diff --git a/ts/bundled_ui.ts b/ts/bundled_ui.ts index 1f6d360..f02c7be 100644 --- a/ts/bundled_ui.ts +++ b/ts/bundled_ui.ts @@ -2,7 +2,7 @@ export const files: { path: string; contentBase64: string }[] = [ { "path": "bundle.js", - "contentBase64": "dmFyIF9fY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTsKdmFyIF9fZnJlZXplID0gT2JqZWN0LmZyZWV6ZTsKdmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTsKdmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwp2YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lczsKdmFyIF9fZ2V0UHJvdG9PZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjsKdmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CnZhciBfX2tub3duU3ltYm9sID0gKG5hbWUsIHN5bWJvbCkgPT4gKHN5bWJvbCA9IFN5bWJvbFtuYW1lXSkgPyBzeW1ib2wgOiAvKiBAX19QVVJFX18gKi8gU3ltYm9sLmZvcigiU3ltYm9sLiIgKyBuYW1lKTsKdmFyIF9fdHlwZUVycm9yID0gKG1zZykgPT4gewogIHRocm93IFR5cGVFcnJvcihtc2cpOwp9Owp2YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5MiwgdmFsdWUyKSA9PiBrZXkyIGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleTIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlMiB9KSA6IG9ialtrZXkyXSA9IHZhbHVlMjsKdmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlMikgPT4gX19kZWZQcm9wKHRhcmdldCwgIm5hbWUiLCB7IHZhbHVlOiB2YWx1ZTIsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTsKdmFyIF9fcmVxdWlyZSA9IC8qIEBfX1BVUkVfXyAqLyAoKHgzKSA9PiB0eXBlb2YgcmVxdWlyZSAhPT0gInVuZGVmaW5lZCIgPyByZXF1aXJlIDogdHlwZW9mIFByb3h5ICE9PSAidW5kZWZpbmVkIiA/IG5ldyBQcm94eSh4MywgewogIGdldDogKGE1LCBiNSkgPT4gKHR5cGVvZiByZXF1aXJlICE9PSAidW5kZWZpbmVkIiA/IHJlcXVpcmUgOiBhNSlbYjVdCn0pIDogeDMpKGZ1bmN0aW9uKHgzKSB7CiAgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAidW5kZWZpbmVkIikgcmV0dXJuIHJlcXVpcmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICB0aHJvdyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mICInICsgeDMgKyAnIiBpcyBub3Qgc3VwcG9ydGVkJyk7Cn0pOwp2YXIgX19lc20gPSAoZm4sIHJlcykgPT4gZnVuY3Rpb24gX19pbml0KCkgewogIHJldHVybiBmbiAmJiAocmVzID0gKDAsIGZuW19fZ2V0T3duUHJvcE5hbWVzKGZuKVswXV0pKGZuID0gMCkpLCByZXM7Cn07CnZhciBfX2NvbW1vbkpTID0gKGNiLCBtb2QpID0+IGZ1bmN0aW9uIF9fcmVxdWlyZTIoKSB7CiAgcmV0dXJuIG1vZCB8fCAoMCwgY2JbX19nZXRPd25Qcm9wTmFtZXMoY2IpWzBdXSkoKG1vZCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbW9kKSwgbW9kLmV4cG9ydHM7Cn07CnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbDMpID0+IHsKICBmb3IgKHZhciBuYW1lIGluIGFsbDMpCiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsM1tuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTsKfTsKdmFyIF9fY29weVByb3BzID0gKHRvMiwgZnJvbTIsIGV4Y2VwdCwgZGVzYykgPT4gewogIGlmIChmcm9tMiAmJiB0eXBlb2YgZnJvbTIgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBmcm9tMiA9PT0gImZ1bmN0aW9uIikgewogICAgZm9yIChsZXQga2V5MiBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tMikpCiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8yLCBrZXkyKSAmJiBrZXkyICE9PSBleGNlcHQpCiAgICAgICAgX19kZWZQcm9wKHRvMiwga2V5MiwgeyBnZXQ6ICgpID0+IGZyb20yW2tleTJdLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20yLCBrZXkyKSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pOwogIH0KICByZXR1cm4gdG8yOwp9Owp2YXIgX190b0VTTSA9IChtb2QsIGlzTm9kZU1vZGUsIHRhcmdldCkgPT4gKHRhcmdldCA9IG1vZCAhPSBudWxsID8gX19jcmVhdGUoX19nZXRQcm90b09mKG1vZCkpIDoge30sIF9fY29weVByb3BzKAogIC8vIElmIHRoZSBpbXBvcnRlciBpcyBpbiBub2RlIGNvbXBhdGliaWxpdHkgbW9kZSBvciB0aGlzIGlzIG5vdCBhbiBFU00KICAvLyBmaWxlIHRoYXQgaGFzIGJlZW4gY29udmVydGVkIHRvIGEgQ29tbW9uSlMgZmlsZSB1c2luZyBhIEJhYmVsLQogIC8vIGNvbXBhdGlibGUgdHJhbnNmb3JtIChpLmUuICJfX2VzTW9kdWxlIiBoYXMgbm90IGJlZW4gc2V0KSwgdGhlbiBzZXQKICAvLyAiZGVmYXVsdCIgdG8gdGhlIENvbW1vbkpTICJtb2R1bGUuZXhwb3J0cyIgZm9yIG5vZGUgY29tcGF0aWJpbGl0eS4KICBpc05vZGVNb2RlIHx8ICFtb2QgfHwgIW1vZC5fX2VzTW9kdWxlID8gX19kZWZQcm9wKHRhcmdldCwgImRlZmF1bHQiLCB7IHZhbHVlOiBtb2QsIGVudW1lcmFibGU6IHRydWUgfSkgOiB0YXJnZXQsCiAgbW9kCikpOwp2YXIgX19kZWNvcmF0b3JTdGFydCA9IChiYXNlKSA9PiBbLCAsICwgX19jcmVhdGUoYmFzZT8uW19fa25vd25TeW1ib2woIm1ldGFkYXRhIildID8/IG51bGwpXTsKdmFyIF9fZGVjb3JhdG9yU3RyaW5ncyA9IFsiY2xhc3MiLCAibWV0aG9kIiwgImdldHRlciIsICJzZXR0ZXIiLCAiYWNjZXNzb3IiLCAiZmllbGQiLCAidmFsdWUiLCAiZ2V0IiwgInNldCJdOwp2YXIgX19leHBlY3RGbiA9IChmbikgPT4gZm4gIT09IHZvaWQgMCAmJiB0eXBlb2YgZm4gIT09ICJmdW5jdGlvbiIgPyBfX3R5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKSA6IGZuOwp2YXIgX19kZWNvcmF0b3JDb250ZXh0ID0gKGtpbmQsIG5hbWUsIGRvbmUsIG1ldGFkYXRhLCBmbnMpID0+ICh7IGtpbmQ6IF9fZGVjb3JhdG9yU3RyaW5nc1traW5kXSwgbmFtZSwgbWV0YWRhdGEsIGFkZEluaXRpYWxpemVyOiAoZm4pID0+IGRvbmUuXyA/IF9fdHlwZUVycm9yKCJBbHJlYWR5IGluaXRpYWxpemVkIikgOiBmbnMucHVzaChfX2V4cGVjdEZuKGZuIHx8IG51bGwpKSB9KTsKdmFyIF9fZGVjb3JhdG9yTWV0YWRhdGEgPSAoYXJyYXksIHRhcmdldCkgPT4gX19kZWZOb3JtYWxQcm9wKHRhcmdldCwgX19rbm93blN5bWJvbCgibWV0YWRhdGEiKSwgYXJyYXlbM10pOwp2YXIgX19ydW5Jbml0aWFsaXplcnMgPSAoYXJyYXksIGZsYWdzLCBzZWxmMiwgdmFsdWUyKSA9PiB7CiAgZm9yICh2YXIgaTExID0gMCwgZm5zID0gYXJyYXlbZmxhZ3MgPj4gMV0sIG4xMyA9IGZucyAmJiBmbnMubGVuZ3RoOyBpMTEgPCBuMTM7IGkxMSsrKSBmbGFncyAmIDEgPyBmbnNbaTExXS5jYWxsKHNlbGYyKSA6IHZhbHVlMiA9IGZuc1tpMTFdLmNhbGwoc2VsZjIsIHZhbHVlMik7CiAgcmV0dXJuIHZhbHVlMjsKfTsKdmFyIF9fZGVjb3JhdGVFbGVtZW50ID0gKGFycmF5LCBmbGFncywgbmFtZSwgZGVjb3JhdG9ycywgdGFyZ2V0LCBleHRyYSkgPT4gewogIHZhciBmbiwgaXQsIGRvbmUsIGN0eCwgYWNjZXNzLCBrNCA9IGZsYWdzICYgNywgczkgPSAhIShmbGFncyAmIDgpLCBwNyA9ICEhKGZsYWdzICYgMTYpOwogIHZhciBqNCA9IGs0ID4gMyA/IGFycmF5Lmxlbmd0aCArIDEgOiBrNCA/IHM5ID8gMSA6IDIgOiAwLCBrZXkyID0gX19kZWNvcmF0b3JTdHJpbmdzW2s0ICsgNV07CiAgdmFyIGluaXRpYWxpemVycyA9IGs0ID4gMyAmJiAoYXJyYXlbajQgLSAxXSA9IFtdKSwgZXh0cmFJbml0aWFsaXplcnMgPSBhcnJheVtqNF0gfHwgKGFycmF5W2o0XSA9IFtdKTsKICB2YXIgZGVzYyA9IGs0ICYmICghcDcgJiYgIXM5ICYmICh0YXJnZXQgPSB0YXJnZXQucHJvdG90eXBlKSwgazQgPCA1ICYmIChrNCA+IDMgfHwgIXA3KSAmJiBfX2dldE93blByb3BEZXNjKGs0IDwgNCA/IHRhcmdldCA6IHsgZ2V0IFtuYW1lXSgpIHsKICAgIHJldHVybiBfX3ByaXZhdGVHZXQodGhpcywgZXh0cmEpOwogIH0sIHNldCBbbmFtZV0oeDMpIHsKICAgIHJldHVybiBfX3ByaXZhdGVTZXQodGhpcywgZXh0cmEsIHgzKTsKICB9IH0sIG5hbWUpKTsKICBrNCA/IHA3ICYmIGs0IDwgNCAmJiBfX25hbWUoZXh0cmEsIChrNCA+IDIgPyAic2V0ICIgOiBrNCA+IDEgPyAiZ2V0ICIgOiAiIikgKyBuYW1lKSA6IF9fbmFtZSh0YXJnZXQsIG5hbWUpOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICBjdHggPSBfX2RlY29yYXRvckNvbnRleHQoazQsIG5hbWUsIGRvbmUgPSB7fSwgYXJyYXlbM10sIGV4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGlmIChrNCkgewogICAgICBjdHguc3RhdGljID0gczksIGN0eC5wcml2YXRlID0gcDcsIGFjY2VzcyA9IGN0eC5hY2Nlc3MgPSB7IGhhczogcDcgPyAoeDMpID0+IF9fcHJpdmF0ZUluKHRhcmdldCwgeDMpIDogKHgzKSA9PiBuYW1lIGluIHgzIH07CiAgICAgIGlmIChrNCBeIDMpIGFjY2Vzcy5nZXQgPSBwNyA/ICh4MykgPT4gKGs0IF4gMSA/IF9fcHJpdmF0ZUdldCA6IF9fcHJpdmF0ZU1ldGhvZCkoeDMsIHRhcmdldCwgazQgXiA0ID8gZXh0cmEgOiBkZXNjLmdldCkgOiAoeDMpID0+IHgzW25hbWVdOwogICAgICBpZiAoazQgPiAyKSBhY2Nlc3Muc2V0ID0gcDcgPyAoeDMsIHk1KSA9PiBfX3ByaXZhdGVTZXQoeDMsIHRhcmdldCwgeTUsIGs0IF4gNCA/IGV4dHJhIDogZGVzYy5zZXQpIDogKHgzLCB5NSkgPT4geDNbbmFtZV0gPSB5NTsKICAgIH0KICAgIGl0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoazQgPyBrNCA8IDQgPyBwNyA/IGV4dHJhIDogZGVzY1trZXkyXSA6IGs0ID4gNCA/IHZvaWQgMCA6IHsgZ2V0OiBkZXNjLmdldCwgc2V0OiBkZXNjLnNldCB9IDogdGFyZ2V0LCBjdHgpLCBkb25lLl8gPSAxOwogICAgaWYgKGs0IF4gNCB8fCBpdCA9PT0gdm9pZCAwKSBfX2V4cGVjdEZuKGl0KSAmJiAoazQgPiA0ID8gaW5pdGlhbGl6ZXJzLnVuc2hpZnQoaXQpIDogazQgPyBwNyA/IGV4dHJhID0gaXQgOiBkZXNjW2tleTJdID0gaXQgOiB0YXJnZXQgPSBpdCk7CiAgICBlbHNlIGlmICh0eXBlb2YgaXQgIT09ICJvYmplY3QiIHx8IGl0ID09PSBudWxsKSBfX3R5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICBlbHNlIF9fZXhwZWN0Rm4oZm4gPSBpdC5nZXQpICYmIChkZXNjLmdldCA9IGZuKSwgX19leHBlY3RGbihmbiA9IGl0LnNldCkgJiYgKGRlc2Muc2V0ID0gZm4pLCBfX2V4cGVjdEZuKGZuID0gaXQuaW5pdCkgJiYgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoZm4pOwogIH0KICByZXR1cm4gazQgfHwgX19kZWNvcmF0b3JNZXRhZGF0YShhcnJheSwgdGFyZ2V0KSwgZGVzYyAmJiBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCBkZXNjKSwgcDcgPyBrNCBeIDQgPyBleHRyYSA6IGRlc2MgOiB0YXJnZXQ7Cn07CnZhciBfX3B1YmxpY0ZpZWxkID0gKG9iaiwga2V5MiwgdmFsdWUyKSA9PiBfX2RlZk5vcm1hbFByb3Aob2JqLCB0eXBlb2Yga2V5MiAhPT0gInN5bWJvbCIgPyBrZXkyICsgIiIgOiBrZXkyLCB2YWx1ZTIpOwp2YXIgX19hY2Nlc3NDaGVjayA9IChvYmosIG1lbWJlciwgbXNnKSA9PiBtZW1iZXIuaGFzKG9iaikgfHwgX190eXBlRXJyb3IoIkNhbm5vdCAiICsgbXNnKTsKdmFyIF9fcHJpdmF0ZUluID0gKG1lbWJlciwgb2JqKSA9PiBPYmplY3Qob2JqKSAhPT0gb2JqID8gX190eXBlRXJyb3IoJ0Nhbm5vdCB1c2UgdGhlICJpbiIgb3BlcmF0b3Igb24gdGhpcyB2YWx1ZScpIDogbWVtYmVyLmhhcyhvYmopOwp2YXIgX19wcml2YXRlR2V0ID0gKG9iaiwgbWVtYmVyLCBnZXR0ZXIpID0+IChfX2FjY2Vzc0NoZWNrKG9iaiwgbWVtYmVyLCAicmVhZCBmcm9tIHByaXZhdGUgZmllbGQiKSwgZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IG1lbWJlci5nZXQob2JqKSk7CnZhciBfX3ByaXZhdGVBZGQgPSAob2JqLCBtZW1iZXIsIHZhbHVlMikgPT4gbWVtYmVyLmhhcyhvYmopID8gX190eXBlRXJyb3IoIkNhbm5vdCBhZGQgdGhlIHNhbWUgcHJpdmF0ZSBtZW1iZXIgbW9yZSB0aGFuIG9uY2UiKSA6IG1lbWJlciBpbnN0YW5jZW9mIFdlYWtTZXQgPyBtZW1iZXIuYWRkKG9iaikgOiBtZW1iZXIuc2V0KG9iaiwgdmFsdWUyKTsKdmFyIF9fcHJpdmF0ZVNldCA9IChvYmosIG1lbWJlciwgdmFsdWUyLCBzZXR0ZXIpID0+IChfX2FjY2Vzc0NoZWNrKG9iaiwgbWVtYmVyLCAid3JpdGUgdG8gcHJpdmF0ZSBmaWVsZCIpLCBzZXR0ZXIgPyBzZXR0ZXIuY2FsbChvYmosIHZhbHVlMikgOiBtZW1iZXIuc2V0KG9iaiwgdmFsdWUyKSwgdmFsdWUyKTsKdmFyIF9fcHJpdmF0ZU1ldGhvZCA9IChvYmosIG1lbWJlciwgbWV0aG9kKSA9PiAoX19hY2Nlc3NDaGVjayhvYmosIG1lbWJlciwgImFjY2VzcyBwcml2YXRlIG1ldGhvZCIpLCBtZXRob2QpOwp2YXIgX190ZW1wbGF0ZSA9IChjb29rZWQsIHJhdzIpID0+IF9fZnJlZXplKF9fZGVmUHJvcChjb29rZWQsICJyYXciLCB7IHZhbHVlOiBfX2ZyZWV6ZShyYXcyIHx8IGNvb2tlZC5zbGljZSgpKSB9KSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvY3NzLXRhZy5qcwp2YXIgdCwgZSwgcywgbywgbiwgciwgaSwgUywgYzsKdmFyIGluaXRfY3NzX3RhZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2Nzcy10YWcuanMiKCkgewogICAgdCA9IGdsb2JhbFRoaXMsIGUgPSB0LlNoYWRvd1Jvb3QgJiYgKHZvaWQgMCA9PT0gdC5TaGFkeUNTUyB8fCB0LlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdykgJiYgImFkb3B0ZWRTdHlsZVNoZWV0cyIgaW4gRG9jdW1lbnQucHJvdG90eXBlICYmICJyZXBsYWNlIiBpbiBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZSwgcyA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woKSwgbyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogICAgbiA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodDksIGUxMSwgbzEzKSB7CiAgICAgICAgaWYgKHRoaXMuXyRjc3NSZXN1bHQkID0gdHJ1ZSwgbzEzICE9PSBzKSB0aHJvdyBFcnJvcigiQ1NTUmVzdWx0IGlzIG5vdCBjb25zdHJ1Y3RhYmxlLiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AgaW5zdGVhZC4iKTsKICAgICAgICB0aGlzLmNzc1RleHQgPSB0OSwgdGhpcy50ID0gZTExOwogICAgICB9CiAgICAgIGdldCBzdHlsZVNoZWV0KCkgewogICAgICAgIGxldCB0OSA9IHRoaXMubzsKICAgICAgICBjb25zdCBzOSA9IHRoaXMudDsKICAgICAgICBpZiAoZSAmJiB2b2lkIDAgPT09IHQ5KSB7CiAgICAgICAgICBjb25zdCBlMTEgPSB2b2lkIDAgIT09IHM5ICYmIDEgPT09IHM5Lmxlbmd0aDsKICAgICAgICAgIGUxMSAmJiAodDkgPSBvLmdldChzOSkpLCB2b2lkIDAgPT09IHQ5ICYmICgodGhpcy5vID0gdDkgPSBuZXcgQ1NTU3R5bGVTaGVldCgpKS5yZXBsYWNlU3luYyh0aGlzLmNzc1RleHQpLCBlMTEgJiYgby5zZXQoczksIHQ5KSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0OTsKICAgICAgfQogICAgICB0b1N0cmluZygpIHsKICAgICAgICByZXR1cm4gdGhpcy5jc3NUZXh0OwogICAgICB9CiAgICB9OwogICAgciA9ICh0OSkgPT4gbmV3IG4oInN0cmluZyIgPT0gdHlwZW9mIHQ5ID8gdDkgOiB0OSArICIiLCB2b2lkIDAsIHMpLCBpID0gKHQ5LCAuLi5lMTEpID0+IHsKICAgICAgY29uc3QgbzEzID0gMSA9PT0gdDkubGVuZ3RoID8gdDlbMF0gOiBlMTEucmVkdWNlKChlMTIsIHM5LCBvMTQpID0+IGUxMiArICgodDEwKSA9PiB7CiAgICAgICAgaWYgKHRydWUgPT09IHQxMC5fJGNzc1Jlc3VsdCQpIHJldHVybiB0MTAuY3NzVGV4dDsKICAgICAgICBpZiAoIm51bWJlciIgPT0gdHlwZW9mIHQxMCkgcmV0dXJuIHQxMDsKICAgICAgICB0aHJvdyBFcnJvcigiVmFsdWUgcGFzc2VkIHRvICdjc3MnIGZ1bmN0aW9uIG11c3QgYmUgYSAnY3NzJyBmdW5jdGlvbiByZXN1bHQ6ICIgKyB0MTAgKyAiLiBVc2UgJ3Vuc2FmZUNTUycgdG8gcGFzcyBub24tbGl0ZXJhbCB2YWx1ZXMsIGJ1dCB0YWtlIGNhcmUgdG8gZW5zdXJlIHBhZ2Ugc2VjdXJpdHkuIik7CiAgICAgIH0pKHM5KSArIHQ5W28xNCArIDFdLCB0OVswXSk7CiAgICAgIHJldHVybiBuZXcgbihvMTMsIHQ5LCBzKTsKICAgIH0sIFMgPSAoczksIG8xMykgPT4gewogICAgICBpZiAoZSkgczkuYWRvcHRlZFN0eWxlU2hlZXRzID0gbzEzLm1hcCgodDkpID0+IHQ5IGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCA/IHQ5IDogdDkuc3R5bGVTaGVldCk7CiAgICAgIGVsc2UgZm9yIChjb25zdCBlMTEgb2YgbzEzKSB7CiAgICAgICAgY29uc3QgbzE0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSwgbjEzID0gdC5saXROb25jZTsKICAgICAgICB2b2lkIDAgIT09IG4xMyAmJiBvMTQuc2V0QXR0cmlidXRlKCJub25jZSIsIG4xMyksIG8xNC50ZXh0Q29udGVudCA9IGUxMS5jc3NUZXh0LCBzOS5hcHBlbmRDaGlsZChvMTQpOwogICAgICB9CiAgICB9LCBjID0gZSA/ICh0OSkgPT4gdDkgOiAodDkpID0+IHQ5IGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCA/ICgodDEwKSA9PiB7CiAgICAgIGxldCBlMTEgPSAiIjsKICAgICAgZm9yIChjb25zdCBzOSBvZiB0MTAuY3NzUnVsZXMpIGUxMSArPSBzOS5jc3NUZXh0OwogICAgICByZXR1cm4gcihlMTEpOwogICAgfSkodDkpIDogdDk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9yZWFjdGl2ZS1lbGVtZW50LmpzCnZhciBpMiwgZTIsIGgsIHIyLCBvMiwgbjIsIGEsIGMyLCBsLCBwLCBkLCB1LCBmLCBiLCB5Owp2YXIgaW5pdF9yZWFjdGl2ZV9lbGVtZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvcmVhY3RpdmUtZWxlbWVudC5qcyIoKSB7CiAgICBpbml0X2Nzc190YWcoKTsKICAgIGluaXRfY3NzX3RhZygpOwogICAgKHsgaXM6IGkyLCBkZWZpbmVQcm9wZXJ0eTogZTIsIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogaCwgZ2V0T3duUHJvcGVydHlOYW1lczogcjIsIGdldE93blByb3BlcnR5U3ltYm9sczogbzIsIGdldFByb3RvdHlwZU9mOiBuMiB9ID0gT2JqZWN0KSwgYSA9IGdsb2JhbFRoaXMsIGMyID0gYS50cnVzdGVkVHlwZXMsIGwgPSBjMiA/IGMyLmVtcHR5U2NyaXB0IDogIiIsIHAgPSBhLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCwgZCA9ICh0OSwgczkpID0+IHQ5LCB1ID0geyB0b0F0dHJpYnV0ZSh0OSwgczkpIHsKICAgICAgc3dpdGNoIChzOSkgewogICAgICAgIGNhc2UgQm9vbGVhbjoKICAgICAgICAgIHQ5ID0gdDkgPyBsIDogbnVsbDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgT2JqZWN0OgogICAgICAgIGNhc2UgQXJyYXk6CiAgICAgICAgICB0OSA9IG51bGwgPT0gdDkgPyB0OSA6IEpTT04uc3RyaW5naWZ5KHQ5KTsKICAgICAgfQogICAgICByZXR1cm4gdDk7CiAgICB9LCBmcm9tQXR0cmlidXRlKHQ5LCBzOSkgewogICAgICBsZXQgaTExID0gdDk7CiAgICAgIHN3aXRjaCAoczkpIHsKICAgICAgICBjYXNlIEJvb2xlYW46CiAgICAgICAgICBpMTEgPSBudWxsICE9PSB0OTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTnVtYmVyOgogICAgICAgICAgaTExID0gbnVsbCA9PT0gdDkgPyBudWxsIDogTnVtYmVyKHQ5KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgT2JqZWN0OgogICAgICAgIGNhc2UgQXJyYXk6CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpMTEgPSBKU09OLnBhcnNlKHQ5KTsKICAgICAgICAgIH0gY2F0Y2ggKHQxMCkgewogICAgICAgICAgICBpMTEgPSBudWxsOwogICAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBpMTE7CiAgICB9IH0sIGYgPSAodDksIHM5KSA9PiAhaTIodDksIHM5KSwgYiA9IHsgYXR0cmlidXRlOiB0cnVlLCB0eXBlOiBTdHJpbmcsIGNvbnZlcnRlcjogdSwgcmVmbGVjdDogZmFsc2UsIHVzZURlZmF1bHQ6IGZhbHNlLCBoYXNDaGFuZ2VkOiBmIH07CiAgICBTeW1ib2wubWV0YWRhdGEgPz89IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woIm1ldGFkYXRhIiksIGEubGl0UHJvcGVydHlNZXRhZGF0YSA/Pz0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgICB5ID0gY2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudCB7CiAgICAgIHN0YXRpYyBhZGRJbml0aWFsaXplcih0OSkgewogICAgICAgIHRoaXMuXyRFaSgpLCAodGhpcy5sID8/PSBbXSkucHVzaCh0OSk7CiAgICAgIH0KICAgICAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUoKSwgdGhpcy5fJEVoICYmIFsuLi50aGlzLl8kRWgua2V5cygpXTsKICAgICAgfQogICAgICBzdGF0aWMgY3JlYXRlUHJvcGVydHkodDksIHM5ID0gYikgewogICAgICAgIGlmIChzOS5zdGF0ZSAmJiAoczkuYXR0cmlidXRlID0gZmFsc2UpLCB0aGlzLl8kRWkoKSwgdGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkodDkpICYmICgoczkgPSBPYmplY3QuY3JlYXRlKHM5KSkud3JhcHBlZCA9IHRydWUpLCB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldCh0OSwgczkpLCAhczkubm9BY2Nlc3NvcikgewogICAgICAgICAgY29uc3QgaTExID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpLCBoOSA9IHRoaXMuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQ5LCBpMTEsIHM5KTsKICAgICAgICAgIHZvaWQgMCAhPT0gaDkgJiYgZTIodGhpcy5wcm90b3R5cGUsIHQ5LCBoOSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRpYyBnZXRQcm9wZXJ0eURlc2NyaXB0b3IodDksIHM5LCBpMTEpIHsKICAgICAgICBjb25zdCB7IGdldDogZTExLCBzZXQ6IHIxMSB9ID0gaCh0aGlzLnByb3RvdHlwZSwgdDkpID8/IHsgZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXNbczldOwogICAgICAgIH0sIHNldCh0MTApIHsKICAgICAgICAgIHRoaXNbczldID0gdDEwOwogICAgICAgIH0gfTsKICAgICAgICByZXR1cm4geyBnZXQ6IGUxMSwgc2V0KHMxMCkgewogICAgICAgICAgY29uc3QgaDkgPSBlMTE/LmNhbGwodGhpcyk7CiAgICAgICAgICByMTE/LmNhbGwodGhpcywgczEwKSwgdGhpcy5yZXF1ZXN0VXBkYXRlKHQ5LCBoOSwgaTExKTsKICAgICAgICB9LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfTsKICAgICAgfQogICAgICBzdGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKHQ5KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZ2V0KHQ5KSA/PyBiOwogICAgICB9CiAgICAgIHN0YXRpYyBfJEVpKCkgewogICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGQoImVsZW1lbnRQcm9wZXJ0aWVzIikpKSByZXR1cm47CiAgICAgICAgY29uc3QgdDkgPSBuMih0aGlzKTsKICAgICAgICB0OS5maW5hbGl6ZSgpLCB2b2lkIDAgIT09IHQ5LmwgJiYgKHRoaXMubCA9IFsuLi50OS5sXSksIHRoaXMuZWxlbWVudFByb3BlcnRpZXMgPSBuZXcgTWFwKHQ5LmVsZW1lbnRQcm9wZXJ0aWVzKTsKICAgICAgfQogICAgICBzdGF0aWMgZmluYWxpemUoKSB7CiAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZCgiZmluYWxpemVkIikpKSByZXR1cm47CiAgICAgICAgaWYgKHRoaXMuZmluYWxpemVkID0gdHJ1ZSwgdGhpcy5fJEVpKCksIHRoaXMuaGFzT3duUHJvcGVydHkoZCgicHJvcGVydGllcyIpKSkgewogICAgICAgICAgY29uc3QgdDEwID0gdGhpcy5wcm9wZXJ0aWVzLCBzOSA9IFsuLi5yMih0MTApLCAuLi5vMih0MTApXTsKICAgICAgICAgIGZvciAoY29uc3QgaTExIG9mIHM5KSB0aGlzLmNyZWF0ZVByb3BlcnR5KGkxMSwgdDEwW2kxMV0pOwogICAgICAgIH0KICAgICAgICBjb25zdCB0OSA9IHRoaXNbU3ltYm9sLm1ldGFkYXRhXTsKICAgICAgICBpZiAobnVsbCAhPT0gdDkpIHsKICAgICAgICAgIGNvbnN0IHM5ID0gbGl0UHJvcGVydHlNZXRhZGF0YS5nZXQodDkpOwogICAgICAgICAgaWYgKHZvaWQgMCAhPT0gczkpIGZvciAoY29uc3QgW3QxMCwgaTExXSBvZiBzOSkgdGhpcy5lbGVtZW50UHJvcGVydGllcy5zZXQodDEwLCBpMTEpOwogICAgICAgIH0KICAgICAgICB0aGlzLl8kRWggPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIGZvciAoY29uc3QgW3QxMCwgczldIG9mIHRoaXMuZWxlbWVudFByb3BlcnRpZXMpIHsKICAgICAgICAgIGNvbnN0IGkxMSA9IHRoaXMuXyRFdSh0MTAsIHM5KTsKICAgICAgICAgIHZvaWQgMCAhPT0gaTExICYmIHRoaXMuXyRFaC5zZXQoaTExLCB0MTApOwogICAgICAgIH0KICAgICAgICB0aGlzLmVsZW1lbnRTdHlsZXMgPSB0aGlzLmZpbmFsaXplU3R5bGVzKHRoaXMuc3R5bGVzKTsKICAgICAgfQogICAgICBzdGF0aWMgZmluYWxpemVTdHlsZXMoczkpIHsKICAgICAgICBjb25zdCBpMTEgPSBbXTsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzOSkpIHsKICAgICAgICAgIGNvbnN0IGUxMSA9IG5ldyBTZXQoczkuZmxhdCgxIC8gMCkucmV2ZXJzZSgpKTsKICAgICAgICAgIGZvciAoY29uc3QgczEwIG9mIGUxMSkgaTExLnVuc2hpZnQoYyhzMTApKTsKICAgICAgICB9IGVsc2Ugdm9pZCAwICE9PSBzOSAmJiBpMTEucHVzaChjKHM5KSk7CiAgICAgICAgcmV0dXJuIGkxMTsKICAgICAgfQogICAgICBzdGF0aWMgXyRFdSh0OSwgczkpIHsKICAgICAgICBjb25zdCBpMTEgPSBzOS5hdHRyaWJ1dGU7CiAgICAgICAgcmV0dXJuIGZhbHNlID09PSBpMTEgPyB2b2lkIDAgOiAic3RyaW5nIiA9PSB0eXBlb2YgaTExID8gaTExIDogInN0cmluZyIgPT0gdHlwZW9mIHQ5ID8gdDkudG9Mb3dlckNhc2UoKSA6IHZvaWQgMDsKICAgICAgfQogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlcigpLCB0aGlzLl8kRXAgPSB2b2lkIDAsIHRoaXMuaXNVcGRhdGVQZW5kaW5nID0gZmFsc2UsIHRoaXMuaGFzVXBkYXRlZCA9IGZhbHNlLCB0aGlzLl8kRW0gPSBudWxsLCB0aGlzLl8kRXYoKTsKICAgICAgfQogICAgICBfJEV2KCkgewogICAgICAgIHRoaXMuXyRFUyA9IG5ldyBQcm9taXNlKCh0OSkgPT4gdGhpcy5lbmFibGVVcGRhdGluZyA9IHQ5KSwgdGhpcy5fJEFMID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgdGhpcy5fJEVfKCksIHRoaXMucmVxdWVzdFVwZGF0ZSgpLCB0aGlzLmNvbnN0cnVjdG9yLmw/LmZvckVhY2goKHQ5KSA9PiB0OSh0aGlzKSk7CiAgICAgIH0KICAgICAgYWRkQ29udHJvbGxlcih0OSkgewogICAgICAgICh0aGlzLl8kRU8gPz89IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpLmFkZCh0OSksIHZvaWQgMCAhPT0gdGhpcy5yZW5kZXJSb290ICYmIHRoaXMuaXNDb25uZWN0ZWQgJiYgdDkuaG9zdENvbm5lY3RlZD8uKCk7CiAgICAgIH0KICAgICAgcmVtb3ZlQ29udHJvbGxlcih0OSkgewogICAgICAgIHRoaXMuXyRFTz8uZGVsZXRlKHQ5KTsKICAgICAgfQogICAgICBfJEVfKCkgewogICAgICAgIGNvbnN0IHQ5ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgczkgPSB0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzOwogICAgICAgIGZvciAoY29uc3QgaTExIG9mIHM5LmtleXMoKSkgdGhpcy5oYXNPd25Qcm9wZXJ0eShpMTEpICYmICh0OS5zZXQoaTExLCB0aGlzW2kxMV0pLCBkZWxldGUgdGhpc1tpMTFdKTsKICAgICAgICB0OS5zaXplID4gMCAmJiAodGhpcy5fJEVwID0gdDkpOwogICAgICB9CiAgICAgIGNyZWF0ZVJlbmRlclJvb3QoKSB7CiAgICAgICAgY29uc3QgdDkgPSB0aGlzLnNoYWRvd1Jvb3QgPz8gdGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25zdHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyk7CiAgICAgICAgcmV0dXJuIFModDksIHRoaXMuY29uc3RydWN0b3IuZWxlbWVudFN0eWxlcyksIHQ5OwogICAgICB9CiAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHRoaXMucmVuZGVyUm9vdCA/Pz0gdGhpcy5jcmVhdGVSZW5kZXJSb290KCksIHRoaXMuZW5hYmxlVXBkYXRpbmcodHJ1ZSksIHRoaXMuXyRFTz8uZm9yRWFjaCgodDkpID0+IHQ5Lmhvc3RDb25uZWN0ZWQ/LigpKTsKICAgICAgfQogICAgICBlbmFibGVVcGRhdGluZyh0OSkgewogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHRoaXMuXyRFTz8uZm9yRWFjaCgodDkpID0+IHQ5Lmhvc3REaXNjb25uZWN0ZWQ/LigpKTsKICAgICAgfQogICAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodDksIHM5LCBpMTEpIHsKICAgICAgICB0aGlzLl8kQUsodDksIGkxMSk7CiAgICAgIH0KICAgICAgXyRFVCh0OSwgczkpIHsKICAgICAgICBjb25zdCBpMTEgPSB0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzLmdldCh0OSksIGUxMSA9IHRoaXMuY29uc3RydWN0b3IuXyRFdSh0OSwgaTExKTsKICAgICAgICBpZiAodm9pZCAwICE9PSBlMTEgJiYgdHJ1ZSA9PT0gaTExLnJlZmxlY3QpIHsKICAgICAgICAgIGNvbnN0IGg5ID0gKHZvaWQgMCAhPT0gaTExLmNvbnZlcnRlcj8udG9BdHRyaWJ1dGUgPyBpMTEuY29udmVydGVyIDogdSkudG9BdHRyaWJ1dGUoczksIGkxMS50eXBlKTsKICAgICAgICAgIHRoaXMuXyRFbSA9IHQ5LCBudWxsID09IGg5ID8gdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZTExKSA6IHRoaXMuc2V0QXR0cmlidXRlKGUxMSwgaDkpLCB0aGlzLl8kRW0gPSBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgICBfJEFLKHQ5LCBzOSkgewogICAgICAgIGNvbnN0IGkxMSA9IHRoaXMuY29uc3RydWN0b3IsIGUxMSA9IGkxMS5fJEVoLmdldCh0OSk7CiAgICAgICAgaWYgKHZvaWQgMCAhPT0gZTExICYmIHRoaXMuXyRFbSAhPT0gZTExKSB7CiAgICAgICAgICBjb25zdCB0MTAgPSBpMTEuZ2V0UHJvcGVydHlPcHRpb25zKGUxMSksIGg5ID0gImZ1bmN0aW9uIiA9PSB0eXBlb2YgdDEwLmNvbnZlcnRlciA/IHsgZnJvbUF0dHJpYnV0ZTogdDEwLmNvbnZlcnRlciB9IDogdm9pZCAwICE9PSB0MTAuY29udmVydGVyPy5mcm9tQXR0cmlidXRlID8gdDEwLmNvbnZlcnRlciA6IHU7CiAgICAgICAgICB0aGlzLl8kRW0gPSBlMTE7CiAgICAgICAgICBjb25zdCByMTEgPSBoOS5mcm9tQXR0cmlidXRlKHM5LCB0MTAudHlwZSk7CiAgICAgICAgICB0aGlzW2UxMV0gPSByMTEgPz8gdGhpcy5fJEVqPy5nZXQoZTExKSA/PyByMTEsIHRoaXMuXyRFbSA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlcXVlc3RVcGRhdGUodDksIHM5LCBpMTEsIGUxMSA9IGZhbHNlLCBoOSkgewogICAgICAgIGlmICh2b2lkIDAgIT09IHQ5KSB7CiAgICAgICAgICBjb25zdCByMTEgPSB0aGlzLmNvbnN0cnVjdG9yOwogICAgICAgICAgaWYgKGZhbHNlID09PSBlMTEgJiYgKGg5ID0gdGhpc1t0OV0pLCBpMTEgPz89IHIxMS5nZXRQcm9wZXJ0eU9wdGlvbnModDkpLCAhKChpMTEuaGFzQ2hhbmdlZCA/PyBmKShoOSwgczkpIHx8IGkxMS51c2VEZWZhdWx0ICYmIGkxMS5yZWZsZWN0ICYmIGg5ID09PSB0aGlzLl8kRWo/LmdldCh0OSkgJiYgIXRoaXMuaGFzQXR0cmlidXRlKHIxMS5fJEV1KHQ5LCBpMTEpKSkpIHJldHVybjsKICAgICAgICAgIHRoaXMuQyh0OSwgczksIGkxMSk7CiAgICAgICAgfQogICAgICAgIGZhbHNlID09PSB0aGlzLmlzVXBkYXRlUGVuZGluZyAmJiAodGhpcy5fJEVTID0gdGhpcy5fJEVQKCkpOwogICAgICB9CiAgICAgIEModDksIHM5LCB7IHVzZURlZmF1bHQ6IGkxMSwgcmVmbGVjdDogZTExLCB3cmFwcGVkOiBoOSB9LCByMTEpIHsKICAgICAgICBpMTEgJiYgISh0aGlzLl8kRWogPz89IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpLmhhcyh0OSkgJiYgKHRoaXMuXyRFai5zZXQodDksIHIxMSA/PyBzOSA/PyB0aGlzW3Q5XSksIHRydWUgIT09IGg5IHx8IHZvaWQgMCAhPT0gcjExKSB8fCAodGhpcy5fJEFMLmhhcyh0OSkgfHwgKHRoaXMuaGFzVXBkYXRlZCB8fCBpMTEgfHwgKHM5ID0gdm9pZCAwKSwgdGhpcy5fJEFMLnNldCh0OSwgczkpKSwgdHJ1ZSA9PT0gZTExICYmIHRoaXMuXyRFbSAhPT0gdDkgJiYgKHRoaXMuXyRFcSA/Pz0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkuYWRkKHQ5KSk7CiAgICAgIH0KICAgICAgYXN5bmMgXyRFUCgpIHsKICAgICAgICB0aGlzLmlzVXBkYXRlUGVuZGluZyA9IHRydWU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IHRoaXMuXyRFUzsKICAgICAgICB9IGNhdGNoICh0MTApIHsKICAgICAgICAgIFByb21pc2UucmVqZWN0KHQxMCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHQ5ID0gdGhpcy5zY2hlZHVsZVVwZGF0ZSgpOwogICAgICAgIHJldHVybiBudWxsICE9IHQ5ICYmIGF3YWl0IHQ5LCAhdGhpcy5pc1VwZGF0ZVBlbmRpbmc7CiAgICAgIH0KICAgICAgc2NoZWR1bGVVcGRhdGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybVVwZGF0ZSgpOwogICAgICB9CiAgICAgIHBlcmZvcm1VcGRhdGUoKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzVXBkYXRlUGVuZGluZykgcmV0dXJuOwogICAgICAgIGlmICghdGhpcy5oYXNVcGRhdGVkKSB7CiAgICAgICAgICBpZiAodGhpcy5yZW5kZXJSb290ID8/PSB0aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSwgdGhpcy5fJEVwKSB7CiAgICAgICAgICAgIGZvciAoY29uc3QgW3QxMSwgczEwXSBvZiB0aGlzLl8kRXApIHRoaXNbdDExXSA9IHMxMDsKICAgICAgICAgICAgdGhpcy5fJEVwID0gdm9pZCAwOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgdDEwID0gdGhpcy5jb25zdHJ1Y3Rvci5lbGVtZW50UHJvcGVydGllczsKICAgICAgICAgIGlmICh0MTAuc2l6ZSA+IDApIGZvciAoY29uc3QgW3MxMCwgaTExXSBvZiB0MTApIHsKICAgICAgICAgICAgY29uc3QgeyB3cmFwcGVkOiB0MTEgfSA9IGkxMSwgZTExID0gdGhpc1tzMTBdOwogICAgICAgICAgICB0cnVlICE9PSB0MTEgfHwgdGhpcy5fJEFMLmhhcyhzMTApIHx8IHZvaWQgMCA9PT0gZTExIHx8IHRoaXMuQyhzMTAsIHZvaWQgMCwgaTExLCBlMTEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZXQgdDkgPSBmYWxzZTsKICAgICAgICBjb25zdCBzOSA9IHRoaXMuXyRBTDsKICAgICAgICB0cnkgewogICAgICAgICAgdDkgPSB0aGlzLnNob3VsZFVwZGF0ZShzOSksIHQ5ID8gKHRoaXMud2lsbFVwZGF0ZShzOSksIHRoaXMuXyRFTz8uZm9yRWFjaCgodDEwKSA9PiB0MTAuaG9zdFVwZGF0ZT8uKCkpLCB0aGlzLnVwZGF0ZShzOSkpIDogdGhpcy5fJEVNKCk7CiAgICAgICAgfSBjYXRjaCAoczEwKSB7CiAgICAgICAgICB0aHJvdyB0OSA9IGZhbHNlLCB0aGlzLl8kRU0oKSwgczEwOwogICAgICAgIH0KICAgICAgICB0OSAmJiB0aGlzLl8kQUUoczkpOwogICAgICB9CiAgICAgIHdpbGxVcGRhdGUodDkpIHsKICAgICAgfQogICAgICBfJEFFKHQ5KSB7CiAgICAgICAgdGhpcy5fJEVPPy5mb3JFYWNoKCh0MTApID0+IHQxMC5ob3N0VXBkYXRlZD8uKCkpLCB0aGlzLmhhc1VwZGF0ZWQgfHwgKHRoaXMuaGFzVXBkYXRlZCA9IHRydWUsIHRoaXMuZmlyc3RVcGRhdGVkKHQ5KSksIHRoaXMudXBkYXRlZCh0OSk7CiAgICAgIH0KICAgICAgXyRFTSgpIHsKICAgICAgICB0aGlzLl8kQUwgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCB0aGlzLmlzVXBkYXRlUGVuZGluZyA9IGZhbHNlOwogICAgICB9CiAgICAgIGdldCB1cGRhdGVDb21wbGV0ZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpOwogICAgICB9CiAgICAgIGdldFVwZGF0ZUNvbXBsZXRlKCkgewogICAgICAgIHJldHVybiB0aGlzLl8kRVM7CiAgICAgIH0KICAgICAgc2hvdWxkVXBkYXRlKHQ5KSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgdXBkYXRlKHQ5KSB7CiAgICAgICAgdGhpcy5fJEVxICYmPSB0aGlzLl8kRXEuZm9yRWFjaCgodDEwKSA9PiB0aGlzLl8kRVQodDEwLCB0aGlzW3QxMF0pKSwgdGhpcy5fJEVNKCk7CiAgICAgIH0KICAgICAgdXBkYXRlZCh0OSkgewogICAgICB9CiAgICAgIGZpcnN0VXBkYXRlZCh0OSkgewogICAgICB9CiAgICB9OwogICAgeS5lbGVtZW50U3R5bGVzID0gW10sIHkuc2hhZG93Um9vdE9wdGlvbnMgPSB7IG1vZGU6ICJvcGVuIiB9LCB5W2QoImVsZW1lbnRQcm9wZXJ0aWVzIildID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgeVtkKCJmaW5hbGl6ZWQiKV0gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBwPy4oeyBSZWFjdGl2ZUVsZW1lbnQ6IHkgfSksIChhLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zID8/PSBbXSkucHVzaCgiMi4xLjIiKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9saXQtaHRtbC5qcwpmdW5jdGlvbiBWKHQ5LCBpMTEpIHsKICBpZiAoIXUyKHQ5KSB8fCAhdDkuaGFzT3duUHJvcGVydHkoInJhdyIpKSB0aHJvdyBFcnJvcigiaW52YWxpZCB0ZW1wbGF0ZSBzdHJpbmdzIGFycmF5Iik7CiAgcmV0dXJuIHZvaWQgMCAhPT0gZTMgPyBlMy5jcmVhdGVIVE1MKGkxMSkgOiBpMTE7Cn0KZnVuY3Rpb24gTSh0OSwgaTExLCBzOSA9IHQ5LCBlMTEpIHsKICBpZiAoaTExID09PSBFKSByZXR1cm4gaTExOwogIGxldCBoOSA9IHZvaWQgMCAhPT0gZTExID8gczkuXyRDbz8uW2UxMV0gOiBzOS5fJENsOwogIGNvbnN0IG8xMyA9IGEyKGkxMSkgPyB2b2lkIDAgOiBpMTEuXyRsaXREaXJlY3RpdmUkOwogIHJldHVybiBoOT8uY29uc3RydWN0b3IgIT09IG8xMyAmJiAoaDk/Ll8kQU8/LihmYWxzZSksIHZvaWQgMCA9PT0gbzEzID8gaDkgPSB2b2lkIDAgOiAoaDkgPSBuZXcgbzEzKHQ5KSwgaDkuXyRBVCh0OSwgczksIGUxMSkpLCB2b2lkIDAgIT09IGUxMSA/IChzOS5fJENvID8/PSBbXSlbZTExXSA9IGg5IDogczkuXyRDbCA9IGg5KSwgdm9pZCAwICE9PSBoOSAmJiAoaTExID0gTSh0OSwgaDkuXyRBUyh0OSwgaTExLnZhbHVlcyksIGg5LCBlMTEpKSwgaTExOwp9CnZhciB0MiwgaTMsIHMyLCBlMywgaDIsIG8zLCBuMywgcjMsIGwyLCBjMywgYTIsIHUyLCBkMiwgZjIsIHYsIF8sIG0sIHAyLCBnLCAkLCB5MiwgeCwgYjIsIHcsIFQsIEUsIEEsIEMsIFAsIE4sIFMyLCBSLCBrLCBILCBJLCBMLCB6LCBaLCBqLCBCLCBEOwp2YXIgaW5pdF9saXRfaHRtbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9saXQtaHRtbC5qcyIoKSB7CiAgICB0MiA9IGdsb2JhbFRoaXMsIGkzID0gKHQ5KSA9PiB0OSwgczIgPSB0Mi50cnVzdGVkVHlwZXMsIGUzID0gczIgPyBzMi5jcmVhdGVQb2xpY3koImxpdC1odG1sIiwgeyBjcmVhdGVIVE1MOiAodDkpID0+IHQ5IH0pIDogdm9pZCAwLCBoMiA9ICIkbGl0JCIsIG8zID0gYGxpdCQke01hdGgucmFuZG9tKCkudG9GaXhlZCg5KS5zbGljZSgyKX0kYCwgbjMgPSAiPyIgKyBvMywgcjMgPSBgPCR7bjN9PmAsIGwyID0gZG9jdW1lbnQsIGMzID0gKCkgPT4gbDIuY3JlYXRlQ29tbWVudCgiIiksIGEyID0gKHQ5KSA9PiBudWxsID09PSB0OSB8fCAib2JqZWN0IiAhPSB0eXBlb2YgdDkgJiYgImZ1bmN0aW9uIiAhPSB0eXBlb2YgdDksIHUyID0gQXJyYXkuaXNBcnJheSwgZDIgPSAodDkpID0+IHUyKHQ5KSB8fCAiZnVuY3Rpb24iID09IHR5cGVvZiB0OT8uW1N5bWJvbC5pdGVyYXRvcl0sIGYyID0gIlsgCVxuXGZccl0iLCB2ID0gLzwoPzooIS0tfFwvW15hLXpBLVpdKXwoXC8/W2EtekEtWl1bXj5cc10qKXwoXC8/JCkpL2csIF8gPSAvLS0+L2csIG0gPSAvPi9nLCBwMiA9IFJlZ0V4cChgPnwke2YyfSg/OihbXlxccyInPj0vXSspKCR7ZjJ9Kj0ke2YyfSooPzpbXiAJClxmXHIiJ1xgPD49XXwoInwnKXwpKXwkKWAsICJnIiksIGcgPSAvJy9nLCAkID0gLyIvZywgeTIgPSAvXig/OnNjcmlwdHxzdHlsZXx0ZXh0YXJlYXx0aXRsZSkkL2ksIHggPSAodDkpID0+IChpMTEsIC4uLnM5KSA9PiAoeyBfJGxpdFR5cGUkOiB0OSwgc3RyaW5nczogaTExLCB2YWx1ZXM6IHM5IH0pLCBiMiA9IHgoMSksIHcgPSB4KDIpLCBUID0geCgzKSwgRSA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2wuZm9yKCJsaXQtbm9DaGFuZ2UiKSwgQSA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2wuZm9yKCJsaXQtbm90aGluZyIpLCBDID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCksIFAgPSBsMi5jcmVhdGVUcmVlV2Fsa2VyKGwyLCAxMjkpOwogICAgTiA9ICh0OSwgaTExKSA9PiB7CiAgICAgIGNvbnN0IHM5ID0gdDkubGVuZ3RoIC0gMSwgZTExID0gW107CiAgICAgIGxldCBuMTMsIGw2ID0gMiA9PT0gaTExID8gIjxzdmc+IiA6IDMgPT09IGkxMSA/ICI8bWF0aD4iIDogIiIsIGMxMSA9IHY7CiAgICAgIGZvciAobGV0IGkxMiA9IDA7IGkxMiA8IHM5OyBpMTIrKykgewogICAgICAgIGNvbnN0IHMxMCA9IHQ5W2kxMl07CiAgICAgICAgbGV0IGE1LCB1NywgZDYgPSAtMSwgZjcgPSAwOwogICAgICAgIGZvciAoOyBmNyA8IHMxMC5sZW5ndGggJiYgKGMxMS5sYXN0SW5kZXggPSBmNywgdTcgPSBjMTEuZXhlYyhzMTApLCBudWxsICE9PSB1Nyk7ICkgZjcgPSBjMTEubGFzdEluZGV4LCBjMTEgPT09IHYgPyAiIS0tIiA9PT0gdTdbMV0gPyBjMTEgPSBfIDogdm9pZCAwICE9PSB1N1sxXSA/IGMxMSA9IG0gOiB2b2lkIDAgIT09IHU3WzJdID8gKHkyLnRlc3QodTdbMl0pICYmIChuMTMgPSBSZWdFeHAoIjwvIiArIHU3WzJdLCAiZyIpKSwgYzExID0gcDIpIDogdm9pZCAwICE9PSB1N1szXSAmJiAoYzExID0gcDIpIDogYzExID09PSBwMiA/ICI+IiA9PT0gdTdbMF0gPyAoYzExID0gbjEzID8/IHYsIGQ2ID0gLTEpIDogdm9pZCAwID09PSB1N1sxXSA/IGQ2ID0gLTIgOiAoZDYgPSBjMTEubGFzdEluZGV4IC0gdTdbMl0ubGVuZ3RoLCBhNSA9IHU3WzFdLCBjMTEgPSB2b2lkIDAgPT09IHU3WzNdID8gcDIgOiAnIicgPT09IHU3WzNdID8gJCA6IGcpIDogYzExID09PSAkIHx8IGMxMSA9PT0gZyA/IGMxMSA9IHAyIDogYzExID09PSBfIHx8IGMxMSA9PT0gbSA/IGMxMSA9IHYgOiAoYzExID0gcDIsIG4xMyA9IHZvaWQgMCk7CiAgICAgICAgY29uc3QgeDMgPSBjMTEgPT09IHAyICYmIHQ5W2kxMiArIDFdLnN0YXJ0c1dpdGgoIi8+IikgPyAiICIgOiAiIjsKICAgICAgICBsNiArPSBjMTEgPT09IHYgPyBzMTAgKyByMyA6IGQ2ID49IDAgPyAoZTExLnB1c2goYTUpLCBzMTAuc2xpY2UoMCwgZDYpICsgaDIgKyBzMTAuc2xpY2UoZDYpICsgbzMgKyB4MykgOiBzMTAgKyBvMyArICgtMiA9PT0gZDYgPyBpMTIgOiB4Myk7CiAgICAgIH0KICAgICAgcmV0dXJuIFtWKHQ5LCBsNiArICh0OVtzOV0gfHwgIjw/PiIpICsgKDIgPT09IGkxMSA/ICI8L3N2Zz4iIDogMyA9PT0gaTExID8gIjwvbWF0aD4iIDogIiIpKSwgZTExXTsKICAgIH07CiAgICBTMiA9IGNsYXNzIF9TIHsKICAgICAgY29uc3RydWN0b3IoeyBzdHJpbmdzOiB0OSwgXyRsaXRUeXBlJDogaTExIH0sIGUxMSkgewogICAgICAgIGxldCByMTE7CiAgICAgICAgdGhpcy5wYXJ0cyA9IFtdOwogICAgICAgIGxldCBsNiA9IDAsIGE1ID0gMDsKICAgICAgICBjb25zdCB1NyA9IHQ5Lmxlbmd0aCAtIDEsIGQ2ID0gdGhpcy5wYXJ0cywgW2Y3LCB2NV0gPSBOKHQ5LCBpMTEpOwogICAgICAgIGlmICh0aGlzLmVsID0gX1MuY3JlYXRlRWxlbWVudChmNywgZTExKSwgUC5jdXJyZW50Tm9kZSA9IHRoaXMuZWwuY29udGVudCwgMiA9PT0gaTExIHx8IDMgPT09IGkxMSkgewogICAgICAgICAgY29uc3QgdDEwID0gdGhpcy5lbC5jb250ZW50LmZpcnN0Q2hpbGQ7CiAgICAgICAgICB0MTAucmVwbGFjZVdpdGgoLi4udDEwLmNoaWxkTm9kZXMpOwogICAgICAgIH0KICAgICAgICBmb3IgKDsgbnVsbCAhPT0gKHIxMSA9IFAubmV4dE5vZGUoKSkgJiYgZDYubGVuZ3RoIDwgdTc7ICkgewogICAgICAgICAgaWYgKDEgPT09IHIxMS5ub2RlVHlwZSkgewogICAgICAgICAgICBpZiAocjExLmhhc0F0dHJpYnV0ZXMoKSkgZm9yIChjb25zdCB0MTAgb2YgcjExLmdldEF0dHJpYnV0ZU5hbWVzKCkpIGlmICh0MTAuZW5kc1dpdGgoaDIpKSB7CiAgICAgICAgICAgICAgY29uc3QgaTEyID0gdjVbYTUrK10sIHM5ID0gcjExLmdldEF0dHJpYnV0ZSh0MTApLnNwbGl0KG8zKSwgZTEyID0gLyhbLj9AXSk/KC4qKS8uZXhlYyhpMTIpOwogICAgICAgICAgICAgIGQ2LnB1c2goeyB0eXBlOiAxLCBpbmRleDogbDYsIG5hbWU6IGUxMlsyXSwgc3RyaW5nczogczksIGN0b3I6ICIuIiA9PT0gZTEyWzFdID8gSSA6ICI/IiA9PT0gZTEyWzFdID8gTCA6ICJAIiA9PT0gZTEyWzFdID8geiA6IEggfSksIHIxMS5yZW1vdmVBdHRyaWJ1dGUodDEwKTsKICAgICAgICAgICAgfSBlbHNlIHQxMC5zdGFydHNXaXRoKG8zKSAmJiAoZDYucHVzaCh7IHR5cGU6IDYsIGluZGV4OiBsNiB9KSwgcjExLnJlbW92ZUF0dHJpYnV0ZSh0MTApKTsKICAgICAgICAgICAgaWYgKHkyLnRlc3QocjExLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgY29uc3QgdDEwID0gcjExLnRleHRDb250ZW50LnNwbGl0KG8zKSwgaTEyID0gdDEwLmxlbmd0aCAtIDE7CiAgICAgICAgICAgICAgaWYgKGkxMiA+IDApIHsKICAgICAgICAgICAgICAgIHIxMS50ZXh0Q29udGVudCA9IHMyID8gczIuZW1wdHlTY3JpcHQgOiAiIjsKICAgICAgICAgICAgICAgIGZvciAobGV0IHM5ID0gMDsgczkgPCBpMTI7IHM5KyspIHIxMS5hcHBlbmQodDEwW3M5XSwgYzMoKSksIFAubmV4dE5vZGUoKSwgZDYucHVzaCh7IHR5cGU6IDIsIGluZGV4OiArK2w2IH0pOwogICAgICAgICAgICAgICAgcjExLmFwcGVuZCh0MTBbaTEyXSwgYzMoKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKDggPT09IHIxMS5ub2RlVHlwZSkgaWYgKHIxMS5kYXRhID09PSBuMykgZDYucHVzaCh7IHR5cGU6IDIsIGluZGV4OiBsNiB9KTsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBsZXQgdDEwID0gLTE7CiAgICAgICAgICAgIGZvciAoOyAtMSAhPT0gKHQxMCA9IHIxMS5kYXRhLmluZGV4T2YobzMsIHQxMCArIDEpKTsgKSBkNi5wdXNoKHsgdHlwZTogNywgaW5kZXg6IGw2IH0pLCB0MTAgKz0gbzMubGVuZ3RoIC0gMTsKICAgICAgICAgIH0KICAgICAgICAgIGw2Kys7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRpYyBjcmVhdGVFbGVtZW50KHQ5LCBpMTEpIHsKICAgICAgICBjb25zdCBzOSA9IGwyLmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7CiAgICAgICAgcmV0dXJuIHM5LmlubmVySFRNTCA9IHQ5LCBzOTsKICAgICAgfQogICAgfTsKICAgIFIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHQ5LCBpMTEpIHsKICAgICAgICB0aGlzLl8kQVYgPSBbXSwgdGhpcy5fJEFOID0gdm9pZCAwLCB0aGlzLl8kQUQgPSB0OSwgdGhpcy5fJEFNID0gaTExOwogICAgICB9CiAgICAgIGdldCBwYXJlbnROb2RlKCkgewogICAgICAgIHJldHVybiB0aGlzLl8kQU0ucGFyZW50Tm9kZTsKICAgICAgfQogICAgICBnZXQgXyRBVSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFNLl8kQVU7CiAgICAgIH0KICAgICAgdSh0OSkgewogICAgICAgIGNvbnN0IHsgZWw6IHsgY29udGVudDogaTExIH0sIHBhcnRzOiBzOSB9ID0gdGhpcy5fJEFELCBlMTEgPSAodDk/LmNyZWF0aW9uU2NvcGUgPz8gbDIpLmltcG9ydE5vZGUoaTExLCB0cnVlKTsKICAgICAgICBQLmN1cnJlbnROb2RlID0gZTExOwogICAgICAgIGxldCBoOSA9IFAubmV4dE5vZGUoKSwgbzEzID0gMCwgbjEzID0gMCwgcjExID0gczlbMF07CiAgICAgICAgZm9yICg7IHZvaWQgMCAhPT0gcjExOyApIHsKICAgICAgICAgIGlmIChvMTMgPT09IHIxMS5pbmRleCkgewogICAgICAgICAgICBsZXQgaTEyOwogICAgICAgICAgICAyID09PSByMTEudHlwZSA/IGkxMiA9IG5ldyBrKGg5LCBoOS5uZXh0U2libGluZywgdGhpcywgdDkpIDogMSA9PT0gcjExLnR5cGUgPyBpMTIgPSBuZXcgcjExLmN0b3IoaDksIHIxMS5uYW1lLCByMTEuc3RyaW5ncywgdGhpcywgdDkpIDogNiA9PT0gcjExLnR5cGUgJiYgKGkxMiA9IG5ldyBaKGg5LCB0aGlzLCB0OSkpLCB0aGlzLl8kQVYucHVzaChpMTIpLCByMTEgPSBzOVsrK24xM107CiAgICAgICAgICB9CiAgICAgICAgICBvMTMgIT09IHIxMT8uaW5kZXggJiYgKGg5ID0gUC5uZXh0Tm9kZSgpLCBvMTMrKyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQLmN1cnJlbnROb2RlID0gbDIsIGUxMTsKICAgICAgfQogICAgICBwKHQ5KSB7CiAgICAgICAgbGV0IGkxMSA9IDA7CiAgICAgICAgZm9yIChjb25zdCBzOSBvZiB0aGlzLl8kQVYpIHZvaWQgMCAhPT0gczkgJiYgKHZvaWQgMCAhPT0gczkuc3RyaW5ncyA/IChzOS5fJEFJKHQ5LCBzOSwgaTExKSwgaTExICs9IHM5LnN0cmluZ3MubGVuZ3RoIC0gMikgOiBzOS5fJEFJKHQ5W2kxMV0pKSwgaTExKys7CiAgICAgIH0KICAgIH07CiAgICBrID0gY2xhc3MgX2sgewogICAgICBnZXQgXyRBVSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFNPy5fJEFVID8/IHRoaXMuXyRDdjsKICAgICAgfQogICAgICBjb25zdHJ1Y3Rvcih0OSwgaTExLCBzOSwgZTExKSB7CiAgICAgICAgdGhpcy50eXBlID0gMiwgdGhpcy5fJEFIID0gQSwgdGhpcy5fJEFOID0gdm9pZCAwLCB0aGlzLl8kQUEgPSB0OSwgdGhpcy5fJEFCID0gaTExLCB0aGlzLl8kQU0gPSBzOSwgdGhpcy5vcHRpb25zID0gZTExLCB0aGlzLl8kQ3YgPSBlMTE/LmlzQ29ubmVjdGVkID8/IHRydWU7CiAgICAgIH0KICAgICAgZ2V0IHBhcmVudE5vZGUoKSB7CiAgICAgICAgbGV0IHQ5ID0gdGhpcy5fJEFBLnBhcmVudE5vZGU7CiAgICAgICAgY29uc3QgaTExID0gdGhpcy5fJEFNOwogICAgICAgIHJldHVybiB2b2lkIDAgIT09IGkxMSAmJiAxMSA9PT0gdDk/Lm5vZGVUeXBlICYmICh0OSA9IGkxMS5wYXJlbnROb2RlKSwgdDk7CiAgICAgIH0KICAgICAgZ2V0IHN0YXJ0Tm9kZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFBOwogICAgICB9CiAgICAgIGdldCBlbmROb2RlKCkgewogICAgICAgIHJldHVybiB0aGlzLl8kQUI7CiAgICAgIH0KICAgICAgXyRBSSh0OSwgaTExID0gdGhpcykgewogICAgICAgIHQ5ID0gTSh0aGlzLCB0OSwgaTExKSwgYTIodDkpID8gdDkgPT09IEEgfHwgbnVsbCA9PSB0OSB8fCAiIiA9PT0gdDkgPyAodGhpcy5fJEFIICE9PSBBICYmIHRoaXMuXyRBUigpLCB0aGlzLl8kQUggPSBBKSA6IHQ5ICE9PSB0aGlzLl8kQUggJiYgdDkgIT09IEUgJiYgdGhpcy5fKHQ5KSA6IHZvaWQgMCAhPT0gdDkuXyRsaXRUeXBlJCA/IHRoaXMuJCh0OSkgOiB2b2lkIDAgIT09IHQ5Lm5vZGVUeXBlID8gdGhpcy5UKHQ5KSA6IGQyKHQ5KSA/IHRoaXMuayh0OSkgOiB0aGlzLl8odDkpOwogICAgICB9CiAgICAgIE8odDkpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFBLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQ5LCB0aGlzLl8kQUIpOwogICAgICB9CiAgICAgIFQodDkpIHsKICAgICAgICB0aGlzLl8kQUggIT09IHQ5ICYmICh0aGlzLl8kQVIoKSwgdGhpcy5fJEFIID0gdGhpcy5PKHQ5KSk7CiAgICAgIH0KICAgICAgXyh0OSkgewogICAgICAgIHRoaXMuXyRBSCAhPT0gQSAmJiBhMih0aGlzLl8kQUgpID8gdGhpcy5fJEFBLm5leHRTaWJsaW5nLmRhdGEgPSB0OSA6IHRoaXMuVChsMi5jcmVhdGVUZXh0Tm9kZSh0OSkpLCB0aGlzLl8kQUggPSB0OTsKICAgICAgfQogICAgICAkKHQ5KSB7CiAgICAgICAgY29uc3QgeyB2YWx1ZXM6IGkxMSwgXyRsaXRUeXBlJDogczkgfSA9IHQ5LCBlMTEgPSAibnVtYmVyIiA9PSB0eXBlb2YgczkgPyB0aGlzLl8kQUModDkpIDogKHZvaWQgMCA9PT0gczkuZWwgJiYgKHM5LmVsID0gUzIuY3JlYXRlRWxlbWVudChWKHM5LmgsIHM5LmhbMF0pLCB0aGlzLm9wdGlvbnMpKSwgczkpOwogICAgICAgIGlmICh0aGlzLl8kQUg/Ll8kQUQgPT09IGUxMSkgdGhpcy5fJEFILnAoaTExKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGNvbnN0IHQxMCA9IG5ldyBSKGUxMSwgdGhpcyksIHMxMCA9IHQxMC51KHRoaXMub3B0aW9ucyk7CiAgICAgICAgICB0MTAucChpMTEpLCB0aGlzLlQoczEwKSwgdGhpcy5fJEFIID0gdDEwOwogICAgICAgIH0KICAgICAgfQogICAgICBfJEFDKHQ5KSB7CiAgICAgICAgbGV0IGkxMSA9IEMuZ2V0KHQ5LnN0cmluZ3MpOwogICAgICAgIHJldHVybiB2b2lkIDAgPT09IGkxMSAmJiBDLnNldCh0OS5zdHJpbmdzLCBpMTEgPSBuZXcgUzIodDkpKSwgaTExOwogICAgICB9CiAgICAgIGsodDkpIHsKICAgICAgICB1Mih0aGlzLl8kQUgpIHx8ICh0aGlzLl8kQUggPSBbXSwgdGhpcy5fJEFSKCkpOwogICAgICAgIGNvbnN0IGkxMSA9IHRoaXMuXyRBSDsKICAgICAgICBsZXQgczksIGUxMSA9IDA7CiAgICAgICAgZm9yIChjb25zdCBoOSBvZiB0OSkgZTExID09PSBpMTEubGVuZ3RoID8gaTExLnB1c2goczkgPSBuZXcgX2sodGhpcy5PKGMzKCkpLCB0aGlzLk8oYzMoKSksIHRoaXMsIHRoaXMub3B0aW9ucykpIDogczkgPSBpMTFbZTExXSwgczkuXyRBSShoOSksIGUxMSsrOwogICAgICAgIGUxMSA8IGkxMS5sZW5ndGggJiYgKHRoaXMuXyRBUihzOSAmJiBzOS5fJEFCLm5leHRTaWJsaW5nLCBlMTEpLCBpMTEubGVuZ3RoID0gZTExKTsKICAgICAgfQogICAgICBfJEFSKHQ5ID0gdGhpcy5fJEFBLm5leHRTaWJsaW5nLCBzOSkgewogICAgICAgIGZvciAodGhpcy5fJEFQPy4oZmFsc2UsIHRydWUsIHM5KTsgdDkgIT09IHRoaXMuXyRBQjsgKSB7CiAgICAgICAgICBjb25zdCBzMTAgPSBpMyh0OSkubmV4dFNpYmxpbmc7CiAgICAgICAgICBpMyh0OSkucmVtb3ZlKCksIHQ5ID0gczEwOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXRDb25uZWN0ZWQodDkpIHsKICAgICAgICB2b2lkIDAgPT09IHRoaXMuXyRBTSAmJiAodGhpcy5fJEN2ID0gdDksIHRoaXMuXyRBUD8uKHQ5KSk7CiAgICAgIH0KICAgIH07CiAgICBIID0gY2xhc3MgewogICAgICBnZXQgdGFnTmFtZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LnRhZ05hbWU7CiAgICAgIH0KICAgICAgZ2V0IF8kQVUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuXyRBTS5fJEFVOwogICAgICB9CiAgICAgIGNvbnN0cnVjdG9yKHQ5LCBpMTEsIHM5LCBlMTEsIGg5KSB7CiAgICAgICAgdGhpcy50eXBlID0gMSwgdGhpcy5fJEFIID0gQSwgdGhpcy5fJEFOID0gdm9pZCAwLCB0aGlzLmVsZW1lbnQgPSB0OSwgdGhpcy5uYW1lID0gaTExLCB0aGlzLl8kQU0gPSBlMTEsIHRoaXMub3B0aW9ucyA9IGg5LCBzOS5sZW5ndGggPiAyIHx8ICIiICE9PSBzOVswXSB8fCAiIiAhPT0gczlbMV0gPyAodGhpcy5fJEFIID0gQXJyYXkoczkubGVuZ3RoIC0gMSkuZmlsbChuZXcgU3RyaW5nKCkpLCB0aGlzLnN0cmluZ3MgPSBzOSkgOiB0aGlzLl8kQUggPSBBOwogICAgICB9CiAgICAgIF8kQUkodDksIGkxMSA9IHRoaXMsIHM5LCBlMTEpIHsKICAgICAgICBjb25zdCBoOSA9IHRoaXMuc3RyaW5nczsKICAgICAgICBsZXQgbzEzID0gZmFsc2U7CiAgICAgICAgaWYgKHZvaWQgMCA9PT0gaDkpIHQ5ID0gTSh0aGlzLCB0OSwgaTExLCAwKSwgbzEzID0gIWEyKHQ5KSB8fCB0OSAhPT0gdGhpcy5fJEFIICYmIHQ5ICE9PSBFLCBvMTMgJiYgKHRoaXMuXyRBSCA9IHQ5KTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGNvbnN0IGUxMiA9IHQ5OwogICAgICAgICAgbGV0IG4xMywgcjExOwogICAgICAgICAgZm9yICh0OSA9IGg5WzBdLCBuMTMgPSAwOyBuMTMgPCBoOS5sZW5ndGggLSAxOyBuMTMrKykgcjExID0gTSh0aGlzLCBlMTJbczkgKyBuMTNdLCBpMTEsIG4xMyksIHIxMSA9PT0gRSAmJiAocjExID0gdGhpcy5fJEFIW24xM10pLCBvMTMgfHw9ICFhMihyMTEpIHx8IHIxMSAhPT0gdGhpcy5fJEFIW24xM10sIHIxMSA9PT0gQSA/IHQ5ID0gQSA6IHQ5ICE9PSBBICYmICh0OSArPSAocjExID8/ICIiKSArIGg5W24xMyArIDFdKSwgdGhpcy5fJEFIW24xM10gPSByMTE7CiAgICAgICAgfQogICAgICAgIG8xMyAmJiAhZTExICYmIHRoaXMuaih0OSk7CiAgICAgIH0KICAgICAgaih0OSkgewogICAgICAgIHQ5ID09PSBBID8gdGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpIDogdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsIHQ5ID8/ICIiKTsKICAgICAgfQogICAgfTsKICAgIEkgPSBjbGFzcyBleHRlbmRzIEggewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpLCB0aGlzLnR5cGUgPSAzOwogICAgICB9CiAgICAgIGoodDkpIHsKICAgICAgICB0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXSA9IHQ5ID09PSBBID8gdm9pZCAwIDogdDk7CiAgICAgIH0KICAgIH07CiAgICBMID0gY2xhc3MgZXh0ZW5kcyBIIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKSwgdGhpcy50eXBlID0gNDsKICAgICAgfQogICAgICBqKHQ5KSB7CiAgICAgICAgdGhpcy5lbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSh0aGlzLm5hbWUsICEhdDkgJiYgdDkgIT09IEEpOwogICAgICB9CiAgICB9OwogICAgeiA9IGNsYXNzIGV4dGVuZHMgSCB7CiAgICAgIGNvbnN0cnVjdG9yKHQ5LCBpMTEsIHM5LCBlMTEsIGg5KSB7CiAgICAgICAgc3VwZXIodDksIGkxMSwgczksIGUxMSwgaDkpLCB0aGlzLnR5cGUgPSA1OwogICAgICB9CiAgICAgIF8kQUkodDksIGkxMSA9IHRoaXMpIHsKICAgICAgICBpZiAoKHQ5ID0gTSh0aGlzLCB0OSwgaTExLCAwKSA/PyBBKSA9PT0gRSkgcmV0dXJuOwogICAgICAgIGNvbnN0IHM5ID0gdGhpcy5fJEFILCBlMTEgPSB0OSA9PT0gQSAmJiBzOSAhPT0gQSB8fCB0OS5jYXB0dXJlICE9PSBzOS5jYXB0dXJlIHx8IHQ5Lm9uY2UgIT09IHM5Lm9uY2UgfHwgdDkucGFzc2l2ZSAhPT0gczkucGFzc2l2ZSwgaDkgPSB0OSAhPT0gQSAmJiAoczkgPT09IEEgfHwgZTExKTsKICAgICAgICBlMTEgJiYgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5uYW1lLCB0aGlzLCBzOSksIGg5ICYmIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMubmFtZSwgdGhpcywgdDkpLCB0aGlzLl8kQUggPSB0OTsKICAgICAgfQogICAgICBoYW5kbGVFdmVudCh0OSkgewogICAgICAgICJmdW5jdGlvbiIgPT0gdHlwZW9mIHRoaXMuXyRBSCA/IHRoaXMuXyRBSC5jYWxsKHRoaXMub3B0aW9ucz8uaG9zdCA/PyB0aGlzLmVsZW1lbnQsIHQ5KSA6IHRoaXMuXyRBSC5oYW5kbGVFdmVudCh0OSk7CiAgICAgIH0KICAgIH07CiAgICBaID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih0OSwgaTExLCBzOSkgewogICAgICAgIHRoaXMuZWxlbWVudCA9IHQ5LCB0aGlzLnR5cGUgPSA2LCB0aGlzLl8kQU4gPSB2b2lkIDAsIHRoaXMuXyRBTSA9IGkxMSwgdGhpcy5vcHRpb25zID0gczk7CiAgICAgIH0KICAgICAgZ2V0IF8kQVUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuXyRBTS5fJEFVOwogICAgICB9CiAgICAgIF8kQUkodDkpIHsKICAgICAgICBNKHRoaXMsIHQ5KTsKICAgICAgfQogICAgfTsKICAgIGogPSB7IE06IGgyLCBQOiBvMywgQTogbjMsIEM6IDEsIEw6IE4sIFIsIEQ6IGQyLCBWOiBNLCBJOiBrLCBILCBOOiBMLCBVOiB6LCBCOiBJLCBGOiBaIH0sIEIgPSB0Mi5saXRIdG1sUG9seWZpbGxTdXBwb3J0OwogICAgQj8uKFMyLCBrKSwgKHQyLmxpdEh0bWxWZXJzaW9ucyA/Pz0gW10pLnB1c2goIjMuMy4yIik7CiAgICBEID0gKHQ5LCBpMTEsIHM5KSA9PiB7CiAgICAgIGNvbnN0IGUxMSA9IHM5Py5yZW5kZXJCZWZvcmUgPz8gaTExOwogICAgICBsZXQgaDkgPSBlMTEuXyRsaXRQYXJ0JDsKICAgICAgaWYgKHZvaWQgMCA9PT0gaDkpIHsKICAgICAgICBjb25zdCB0MTAgPSBzOT8ucmVuZGVyQmVmb3JlID8/IG51bGw7CiAgICAgICAgZTExLl8kbGl0UGFydCQgPSBoOSA9IG5ldyBrKGkxMS5pbnNlcnRCZWZvcmUoYzMoKSwgdDEwKSwgdDEwLCB2b2lkIDAsIHM5ID8/IHt9KTsKICAgICAgfQogICAgICByZXR1cm4gaDkuXyRBSSh0OSksIGg5OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1lbGVtZW50QDQuMi4yL25vZGVfbW9kdWxlcy9saXQtZWxlbWVudC9saXQtZWxlbWVudC5qcwp2YXIgczMsIGk0LCBvNCwgbjQ7CnZhciBpbml0X2xpdF9lbGVtZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWVsZW1lbnRANC4yLjIvbm9kZV9tb2R1bGVzL2xpdC1lbGVtZW50L2xpdC1lbGVtZW50LmpzIigpIHsKICAgIGluaXRfcmVhY3RpdmVfZWxlbWVudCgpOwogICAgaW5pdF9yZWFjdGl2ZV9lbGVtZW50KCk7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBzMyA9IGdsb2JhbFRoaXM7CiAgICBpNCA9IGNsYXNzIGV4dGVuZHMgeSB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyksIHRoaXMucmVuZGVyT3B0aW9ucyA9IHsgaG9zdDogdGhpcyB9LCB0aGlzLl8kRG8gPSB2b2lkIDA7CiAgICAgIH0KICAgICAgY3JlYXRlUmVuZGVyUm9vdCgpIHsKICAgICAgICBjb25zdCB0OSA9IHN1cGVyLmNyZWF0ZVJlbmRlclJvb3QoKTsKICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJPcHRpb25zLnJlbmRlckJlZm9yZSA/Pz0gdDkuZmlyc3RDaGlsZCwgdDk7CiAgICAgIH0KICAgICAgdXBkYXRlKHQ5KSB7CiAgICAgICAgY29uc3QgcjExID0gdGhpcy5yZW5kZXIoKTsKICAgICAgICB0aGlzLmhhc1VwZGF0ZWQgfHwgKHRoaXMucmVuZGVyT3B0aW9ucy5pc0Nvbm5lY3RlZCA9IHRoaXMuaXNDb25uZWN0ZWQpLCBzdXBlci51cGRhdGUodDkpLCB0aGlzLl8kRG8gPSBEKHIxMSwgdGhpcy5yZW5kZXJSb290LCB0aGlzLnJlbmRlck9wdGlvbnMpOwogICAgICB9CiAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksIHRoaXMuXyREbz8uc2V0Q29ubmVjdGVkKHRydWUpOwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksIHRoaXMuXyREbz8uc2V0Q29ubmVjdGVkKGZhbHNlKTsKICAgICAgfQogICAgICByZW5kZXIoKSB7CiAgICAgICAgcmV0dXJuIEU7CiAgICAgIH0KICAgIH07CiAgICBpNC5fJGxpdEVsZW1lbnQkID0gdHJ1ZSwgaTRbImZpbmFsaXplZCJdID0gdHJ1ZSwgczMubGl0RWxlbWVudEh5ZHJhdGVTdXBwb3J0Py4oeyBMaXRFbGVtZW50OiBpNCB9KTsKICAgIG80ID0gczMubGl0RWxlbWVudFBvbHlmaWxsU3VwcG9ydDsKICAgIG80Py4oeyBMaXRFbGVtZW50OiBpNCB9KTsKICAgIG40ID0geyBfJEFLOiAodDksIGUxMSwgcjExKSA9PiB7CiAgICAgIHQ5Ll8kQUsoZTExLCByMTEpOwogICAgfSwgXyRBTDogKHQ5KSA9PiB0OS5fJEFMIH07CiAgICAoczMubGl0RWxlbWVudFZlcnNpb25zID8/PSBbXSkucHVzaCgiNC4yLjIiKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9pcy1zZXJ2ZXIuanMKdmFyIG81Owp2YXIgaW5pdF9pc19zZXJ2ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvaXMtc2VydmVyLmpzIigpIHsKICAgIG81ID0gZmFsc2U7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9pbmRleC5qcwp2YXIgaW5pdF9saXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9pbmRleC5qcyIoKSB7CiAgICBpbml0X3JlYWN0aXZlX2VsZW1lbnQoKTsKICAgIGluaXRfbGl0X2h0bWwoKTsKICAgIGluaXRfbGl0X2VsZW1lbnQoKTsKICAgIGluaXRfaXNfc2VydmVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcytpc291bmlxdWVAMS4wLjUvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2lzb3VuaXF1ZS9kaXN0X3RzL2luZGV4LmpzCnZhciByZXF1aXJlX2Rpc3RfdHMgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2lzb3VuaXF1ZUAxLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvaXNvdW5pcXVlL2Rpc3RfdHMvaW5kZXguanMiKGV4cG9ydHMpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICBleHBvcnRzLnVuaSA9IHZvaWQgMDsKICAgIHZhciB1bmkzID0gKHByZWZpeDQgPSAidW5pIikgPT4gewogICAgICByZXR1cm4gYCR7cHJlZml4NH1fJHtgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4YC5yZXBsYWNlKC9beHldL2csIChjMTEpID0+IHsKICAgICAgICBjb25zdCByMTEgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwOwogICAgICAgIGNvbnN0IHY1ID0gYzExID09PSAieCIgPyByMTEgOiByMTEgJiAzIHwgODsKICAgICAgICByZXR1cm4gdjUudG9TdHJpbmcoMTYpOwogICAgICB9KX1gOwogICAgfTsKICAgIGV4cG9ydHMudW5pID0gdW5pMzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cHJvbWlzZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvc21hcnRwcm9taXNlLmNsYXNzZXMuZGVmZXJyZWQuanMKdmFyIERlZmVycmVkLCBkZWZlcjsKdmFyIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfZGVmZXJyZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHByb21pc2VANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmRlZmVycmVkLmpzIigpIHsKICAgIERlZmVycmVkID0gY2xhc3MgewogICAgICBjbGFpbSgpIHsKICAgICAgICBpZiAodGhpcy5jbGFpbWVkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkRlZmVycmVkIGFscmVhZHkgY2xhaW1lZCIpOwogICAgICAgIH0KICAgICAgICB0aGlzLmNsYWltZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGdldCBkdXJhdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zdG9wcGVkQXQpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnN0b3BwZWRBdCAtIHRoaXMuc3RhcnRlZEF0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuc3RhcnRlZEF0OwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmNsYWltZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgICAgICAgdGhpcy5yZXNvbHZlID0gKHZhbHVlQXJnKSA9PiB7CiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gImZ1bGZpbGxlZCI7CiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEF0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgcmVzb2x2ZTIodmFsdWVBcmcpOwogICAgICAgICAgfTsKICAgICAgICAgIHRoaXMucmVqZWN0ID0gKHJlYXNvbikgPT4gewogICAgICAgICAgICB0aGlzLnN0YXR1cyA9ICJyZWplY3RlZCI7CiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEF0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7CiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5zdGFydGVkQXQgPSBEYXRlLm5vdygpOwogICAgICAgICAgdGhpcy5zdGF0dXMgPSAicGVuZGluZyI7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBkZWZlciA9ICgpID0+IHsKICAgICAgcmV0dXJuIG5ldyBEZWZlcnJlZCgpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cHJvbWlzZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvc21hcnRwcm9taXNlLmNsYXNzZXMuY3VtdWxhdGl2ZWRlZmVycmVkLmpzCnZhciBDdW11bGF0aXZlRGVmZXJyZWQsIGN1bXVsYXRpdmVEZWZlcjsKdmFyIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfY3VtdWxhdGl2ZWRlZmVycmVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRwcm9taXNlQDQuMi4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9zbWFydHByb21pc2UuY2xhc3Nlcy5jdW11bGF0aXZlZGVmZXJyZWQuanMiKCkgewogICAgaW5pdF9zbWFydHByb21pc2VfY2xhc3Nlc19kZWZlcnJlZCgpOwogICAgQ3VtdWxhdGl2ZURlZmVycmVkID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMgPSBbXTsKICAgICAgICB0aGlzLmRlZmVycmVkID0gZGVmZXIoKTsKICAgICAgICB0aGlzLnByb21pc2UgPSB0aGlzLmRlZmVycmVkLnByb21pc2U7CiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7CiAgICAgICAgICB3aGlsZSAodGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgY29uc3QgcG9wcGVkUHJvbWlzZSA9IHRoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5zaGlmdCgpOwogICAgICAgICAgICBhd2FpdCBwb3BwZWRQcm9taXNlOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgfSwgMCk7CiAgICAgIH0KICAgICAgc3ViRGVmZXIoKSB7CiAgICAgICAgY29uc3QgZG9uZSA9IGRlZmVyKCk7CiAgICAgICAgdGhpcy5hZGRQcm9taXNlKGRvbmUucHJvbWlzZSk7CiAgICAgICAgcmV0dXJuIGRvbmU7CiAgICAgIH0KICAgICAgYWRkUHJvbWlzZShwcm9taXNlQXJnKSB7CiAgICAgICAgdGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLnB1c2gocHJvbWlzZUFyZyk7CiAgICAgIH0KICAgIH07CiAgICBjdW11bGF0aXZlRGVmZXIgPSAoKSA9PiB7CiAgICAgIHJldHVybiBuZXcgQ3VtdWxhdGl2ZURlZmVycmVkKCk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRwcm9taXNlQDQuMi4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0cywgewogIEN1bXVsYXRpdmVEZWZlcnJlZDogKCkgPT4gQ3VtdWxhdGl2ZURlZmVycmVkLAogIERlZmVycmVkOiAoKSA9PiBEZWZlcnJlZCwKICBjdW11bGF0aXZlRGVmZXI6ICgpID0+IGN1bXVsYXRpdmVEZWZlciwKICBkZWZlcjogKCkgPT4gZGVmZXIsCiAgZnJvbUNhbGxiYWNrOiAoKSA9PiBmcm9tQ2FsbGJhY2ssCiAgZ2V0Rmlyc3RUcnVlT3JGYWxzZTogKCkgPT4gZ2V0Rmlyc3RUcnVlT3JGYWxzZSwKICBtYXA6ICgpID0+IG1hcCwKICByZWplY3RlZFByb21pc2U6ICgpID0+IHJlamVjdGVkUHJvbWlzZSwKICByZXNvbHZlZFByb21pc2U6ICgpID0+IHJlc29sdmVkUHJvbWlzZSwKICB0aW1lb3V0QW5kQ29udGludWU6ICgpID0+IHRpbWVvdXRBbmRDb250aW51ZSwKICB0aW1lb3V0V3JhcDogKCkgPT4gdGltZW91dFdyYXAKfSk7CnZhciByZXNvbHZlZFByb21pc2UsIHJlamVjdGVkUHJvbWlzZSwgbWFwLCB0aW1lb3V0V3JhcCwgdGltZW91dEFuZENvbnRpbnVlLCBnZXRGaXJzdFRydWVPckZhbHNlLCBmcm9tQ2FsbGJhY2s7CnZhciBpbml0X2Rpc3RfdHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHByb21pc2VANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfZGVmZXJyZWQoKTsKICAgIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfY3VtdWxhdGl2ZWRlZmVycmVkKCk7CiAgICBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2RlZmVycmVkKCk7CiAgICByZXNvbHZlZFByb21pc2UgPSAodmFsdWUyKSA9PiB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUyKTsKICAgIH07CiAgICByZWplY3RlZFByb21pc2UgPSAoZXJyKSA9PiB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpOwogICAgfTsKICAgIG1hcCA9IGFzeW5jIChpbnB1dEFyZywgZnVuY3Rpb25BcmcpID0+IHsKICAgICAgY29uc3QgcHJvbWlzZUFycmF5ID0gW107CiAgICAgIGNvbnN0IHJlc3VsdEFycmF5ID0gW107CiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpbnB1dEFyZykgewogICAgICAgIGNvbnN0IHByb21pc2UgPSBmdW5jdGlvbkFyZyhpdGVtKTsKICAgICAgICBwcm9taXNlQXJyYXkucHVzaChwcm9taXNlKTsKICAgICAgICBwcm9taXNlLnRoZW4oKHgzKSA9PiB7CiAgICAgICAgICByZXN1bHRBcnJheS5wdXNoKHgzKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlQXJyYXkpOwogICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CiAgICB9OwogICAgdGltZW91dFdyYXAgPSBhc3luYyAocHJvbWlzZUFyZywgdGltZW91dEluTXNBcmcsIHJlamVjdEFyZyA9IHRydWUpID0+IHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBpZiAocmVqZWN0QXJnKSB7CiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoInRpbWVvdXQiKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgIH0KICAgICAgICB9LCB0aW1lb3V0SW5Nc0FyZyk7CiAgICAgICAgcHJvbWlzZUFyZy50aGVuKHJlc29sdmUyLCByZWplY3QpOwogICAgICB9KTsKICAgIH07CiAgICB0aW1lb3V0QW5kQ29udGludWUgPSBhc3luYyAocHJvbWlzZUFyZywgdGltZW91dEluTXNBcmcgPSA2ZTQpID0+IHsKICAgICAgcmV0dXJuIHRpbWVvdXRXcmFwKHByb21pc2VBcmcsIHRpbWVvdXRJbk1zQXJnLCBmYWxzZSk7CiAgICB9OwogICAgZ2V0Rmlyc3RUcnVlT3JGYWxzZSA9IGFzeW5jIChwcm9taXNlc0FyZykgPT4gewogICAgICBjb25zdCBkb25lID0gZGVmZXIoKTsKICAgICAgZm9yIChjb25zdCBwcm9taXNlQXJnIG9mIHByb21pc2VzQXJnKSB7CiAgICAgICAgcHJvbWlzZUFyZy50aGVuKChyZXN1bHRBcmcpID0+IHsKICAgICAgICAgIGlmIChyZXN1bHRBcmcgPT09IHRydWUpIHsKICAgICAgICAgICAgZG9uZS5yZXNvbHZlKHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIFByb21pc2UuYWxsKHByb21pc2VzQXJnKS50aGVuKCgpID0+IHsKICAgICAgICBkb25lLnJlc29sdmUoZmFsc2UpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGRvbmUucHJvbWlzZTsKICAgIH07CiAgICBmcm9tQ2FsbGJhY2sgPSAoZm4pID0+IHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgICAgZm4oKGVyciwgcmVzdWx0KSA9PiB7CiAgICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICAgIHJlamVjdChlcnIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzb2x2ZTIocmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRyeF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS90c2xpYkAyLjguMS9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcwpmdW5jdGlvbiBfX2V4dGVuZHMoZDYsIGI1KSB7CiAgaWYgKHR5cGVvZiBiNSAhPT0gImZ1bmN0aW9uIiAmJiBiNSAhPT0gbnVsbCkKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIiArIFN0cmluZyhiNSkgKyAiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTsKICBleHRlbmRTdGF0aWNzKGQ2LCBiNSk7CiAgZnVuY3Rpb24gX18oKSB7CiAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDY7CiAgfQogIGQ2LnByb3RvdHlwZSA9IGI1ID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiNSkgOiAoX18ucHJvdG90eXBlID0gYjUucHJvdG90eXBlLCBuZXcgX18oKSk7Cn0KZnVuY3Rpb24gX19yZXN0KHM5LCBlMTEpIHsKICB2YXIgdDkgPSB7fTsKICBmb3IgKHZhciBwNyBpbiBzOSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzOSwgcDcpICYmIGUxMS5pbmRleE9mKHA3KSA8IDApCiAgICB0OVtwN10gPSBzOVtwN107CiAgaWYgKHM5ICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09ICJmdW5jdGlvbiIpCiAgICBmb3IgKHZhciBpMTEgPSAwLCBwNyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoczkpOyBpMTEgPCBwNy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGlmIChlMTEuaW5kZXhPZihwN1tpMTFdKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHM5LCBwN1tpMTFdKSkKICAgICAgICB0OVtwN1tpMTFdXSA9IHM5W3A3W2kxMV1dOwogICAgfQogIHJldHVybiB0OTsKfQpmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5MiwgZGVzYykgewogIHZhciBjMTEgPSBhcmd1bWVudHMubGVuZ3RoLCByMTEgPSBjMTEgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5MikgOiBkZXNjLCBkNjsKICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICJvYmplY3QiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSAiZnVuY3Rpb24iKSByMTEgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5MiwgZGVzYyk7CiAgZWxzZSBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgaWYgKGQ2ID0gZGVjb3JhdG9yc1tpMTFdKSByMTEgPSAoYzExIDwgMyA/IGQ2KHIxMSkgOiBjMTEgPiAzID8gZDYodGFyZ2V0LCBrZXkyLCByMTEpIDogZDYodGFyZ2V0LCBrZXkyKSkgfHwgcjExOwogIHJldHVybiBjMTEgPiAzICYmIHIxMSAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXkyLCByMTEpLCByMTE7Cn0KZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHsKICByZXR1cm4gZnVuY3Rpb24odGFyZ2V0LCBrZXkyKSB7CiAgICBkZWNvcmF0b3IodGFyZ2V0LCBrZXkyLCBwYXJhbUluZGV4KTsKICB9Owp9CmZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn0KZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnMyKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9CmZ1bmN0aW9uIF9fcHJvcEtleSh4MykgewogIHJldHVybiB0eXBlb2YgeDMgPT09ICJzeW1ib2wiID8geDMgOiAiIi5jb25jYXQoeDMpOwp9CmZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGY3LCBuYW1lLCBwcmVmaXg0KSB7CiAgaWYgKHR5cGVvZiBuYW1lID09PSAic3ltYm9sIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyAiWyIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sICJdIikgOiAiIjsKICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGY3LCAibmFtZSIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4NCA/ICIiLmNvbmNhdChwcmVmaXg0LCAiICIsIG5hbWUpIDogbmFtZSB9KTsKfQpmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7CiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gImZ1bmN0aW9uIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpOwp9CmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQNCwgZ2VuZXJhdG9yKSB7CiAgZnVuY3Rpb24gYWRvcHQodmFsdWUyKSB7CiAgICByZXR1cm4gdmFsdWUyIGluc3RhbmNlb2YgUDQgPyB2YWx1ZTIgOiBuZXcgUDQoZnVuY3Rpb24ocmVzb2x2ZTIpIHsKICAgICAgcmVzb2x2ZTIodmFsdWUyKTsKICAgIH0pOwogIH0KICByZXR1cm4gbmV3IChQNCB8fCAoUDQgPSBQcm9taXNlKSkoZnVuY3Rpb24ocmVzb2x2ZTIsIHJlamVjdCkgewogICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlMikgewogICAgICB0cnkgewogICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUyKSk7CiAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIHJlamVjdChlMTEpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZTIpIHsKICAgICAgdHJ5IHsKICAgICAgICBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZTIpKTsKICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgcmVqZWN0KGUxMSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7CiAgICAgIHJlc3VsdC5kb25lID8gcmVzb2x2ZTIocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsKICAgIH0KICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTsKICB9KTsKfQpmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5MykgewogIHZhciBfNCA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgewogICAgaWYgKHQ5WzBdICYgMSkgdGhyb3cgdDlbMV07CiAgICByZXR1cm4gdDlbMV07CiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgZjcsIHk1LCB0OSwgZzQgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09ICJmdW5jdGlvbiIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTsKICByZXR1cm4gZzQubmV4dCA9IHZlcmIoMCksIGc0WyJ0aHJvdyJdID0gdmVyYigxKSwgZzRbInJldHVybiJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiAoZzRbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXM7CiAgfSksIGc0OwogIGZ1bmN0aW9uIHZlcmIobjEzKSB7CiAgICByZXR1cm4gZnVuY3Rpb24odjUpIHsKICAgICAgcmV0dXJuIHN0ZXAoW24xMywgdjVdKTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHN0ZXAob3ApIHsKICAgIGlmIChmNykgdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpOwogICAgd2hpbGUgKGc0ICYmIChnNCA9IDAsIG9wWzBdICYmIChfNCA9IDApKSwgXzQpIHRyeSB7CiAgICAgIGlmIChmNyA9IDEsIHk1ICYmICh0OSA9IG9wWzBdICYgMiA/IHk1WyJyZXR1cm4iXSA6IG9wWzBdID8geTVbInRocm93Il0gfHwgKCh0OSA9IHk1WyJyZXR1cm4iXSkgJiYgdDkuY2FsbCh5NSksIDApIDogeTUubmV4dCkgJiYgISh0OSA9IHQ5LmNhbGwoeTUsIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ5OwogICAgICBpZiAoeTUgPSAwLCB0OSkgb3AgPSBbb3BbMF0gJiAyLCB0OS52YWx1ZV07CiAgICAgIHN3aXRjaCAob3BbMF0pIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgdDkgPSBvcDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNDoKICAgICAgICAgIF80LmxhYmVsKys7CiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgXzQubGFiZWwrKzsKICAgICAgICAgIHk1ID0gb3BbMV07CiAgICAgICAgICBvcCA9IFswXTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGNhc2UgNzoKICAgICAgICAgIG9wID0gXzQub3BzLnBvcCgpOwogICAgICAgICAgXzQudHJ5cy5wb3AoKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBpZiAoISh0OSA9IF80LnRyeXMsIHQ5ID0gdDkubGVuZ3RoID4gMCAmJiB0OVt0OS5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgewogICAgICAgICAgICBfNCA9IDA7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdDkgfHwgb3BbMV0gPiB0OVswXSAmJiBvcFsxXSA8IHQ5WzNdKSkgewogICAgICAgICAgICBfNC5sYWJlbCA9IG9wWzFdOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfNC5sYWJlbCA8IHQ5WzFdKSB7CiAgICAgICAgICAgIF80LmxhYmVsID0gdDlbMV07CiAgICAgICAgICAgIHQ5ID0gb3A7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHQ5ICYmIF80LmxhYmVsIDwgdDlbMl0pIHsKICAgICAgICAgICAgXzQubGFiZWwgPSB0OVsyXTsKICAgICAgICAgICAgXzQub3BzLnB1c2gob3ApOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0OVsyXSkgXzQub3BzLnBvcCgpOwogICAgICAgICAgXzQudHJ5cy5wb3AoKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIG9wID0gYm9keTMuY2FsbCh0aGlzQXJnLCBfNCk7CiAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgb3AgPSBbNiwgZTExXTsKICAgICAgeTUgPSAwOwogICAgfSBmaW5hbGx5IHsKICAgICAgZjcgPSB0OSA9IDA7CiAgICB9CiAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsKICAgIHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07CiAgfQp9CmZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtNiwgbzEzKSB7CiAgZm9yICh2YXIgcDcgaW4gbTYpIGlmIChwNyAhPT0gImRlZmF1bHQiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobzEzLCBwNykpIF9fY3JlYXRlQmluZGluZyhvMTMsIG02LCBwNyk7Cn0KZnVuY3Rpb24gX192YWx1ZXMobzEzKSB7CiAgdmFyIHM5ID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG02ID0gczkgJiYgbzEzW3M5XSwgaTExID0gMDsKICBpZiAobTYpIHJldHVybiBtNi5jYWxsKG8xMyk7CiAgaWYgKG8xMyAmJiB0eXBlb2YgbzEzLmxlbmd0aCA9PT0gIm51bWJlciIpIHJldHVybiB7CiAgICBuZXh0OiBmdW5jdGlvbigpIHsKICAgICAgaWYgKG8xMyAmJiBpMTEgPj0gbzEzLmxlbmd0aCkgbzEzID0gdm9pZCAwOwogICAgICByZXR1cm4geyB2YWx1ZTogbzEzICYmIG8xM1tpMTErK10sIGRvbmU6ICFvMTMgfTsKICAgIH0KICB9OwogIHRocm93IG5ldyBUeXBlRXJyb3IoczkgPyAiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iIDogIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTsKfQpmdW5jdGlvbiBfX3JlYWQobzEzLCBuMTMpIHsKICB2YXIgbTYgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG8xM1tTeW1ib2wuaXRlcmF0b3JdOwogIGlmICghbTYpIHJldHVybiBvMTM7CiAgdmFyIGkxMSA9IG02LmNhbGwobzEzKSwgcjExLCBhciA9IFtdLCBlMTE7CiAgdHJ5IHsKICAgIHdoaWxlICgobjEzID09PSB2b2lkIDAgfHwgbjEzLS0gPiAwKSAmJiAhKHIxMSA9IGkxMS5uZXh0KCkpLmRvbmUpIGFyLnB1c2gocjExLnZhbHVlKTsKICB9IGNhdGNoIChlcnJvcikgewogICAgZTExID0geyBlcnJvciB9OwogIH0gZmluYWxseSB7CiAgICB0cnkgewogICAgICBpZiAocjExICYmICFyMTEuZG9uZSAmJiAobTYgPSBpMTFbInJldHVybiJdKSkgbTYuY2FsbChpMTEpOwogICAgfSBmaW5hbGx5IHsKICAgICAgaWYgKGUxMSkgdGhyb3cgZTExLmVycm9yOwogICAgfQogIH0KICByZXR1cm4gYXI7Cn0KZnVuY3Rpb24gX19zcHJlYWQoKSB7CiAgZm9yICh2YXIgYXIgPSBbXSwgaTExID0gMDsgaTExIDwgYXJndW1lbnRzLmxlbmd0aDsgaTExKyspCiAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2kxMV0pKTsKICByZXR1cm4gYXI7Cn0KZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7CiAgZm9yICh2YXIgczkgPSAwLCBpMTEgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkxMSA8IGlsOyBpMTErKykgczkgKz0gYXJndW1lbnRzW2kxMV0ubGVuZ3RoOwogIGZvciAodmFyIHIxMSA9IEFycmF5KHM5KSwgazQgPSAwLCBpMTEgPSAwOyBpMTEgPCBpbDsgaTExKyspCiAgICBmb3IgKHZhciBhNSA9IGFyZ3VtZW50c1tpMTFdLCBqNCA9IDAsIGpsID0gYTUubGVuZ3RoOyBqNCA8IGpsOyBqNCsrLCBrNCsrKQogICAgICByMTFbazRdID0gYTVbajRdOwogIHJldHVybiByMTE7Cn0KZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bzIsIGZyb20yLCBwYWNrKSB7CiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaTExID0gMCwgbDYgPSBmcm9tMi5sZW5ndGgsIGFyOyBpMTEgPCBsNjsgaTExKyspIHsKICAgIGlmIChhciB8fCAhKGkxMSBpbiBmcm9tMikpIHsKICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tMiwgMCwgaTExKTsKICAgICAgYXJbaTExXSA9IGZyb20yW2kxMV07CiAgICB9CiAgfQogIHJldHVybiB0bzIuY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20yKSk7Cn0KZnVuY3Rpb24gX19hd2FpdCh2NSkgewogIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2NSwgdGhpcykgOiBuZXcgX19hd2FpdCh2NSk7Cn0KZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHsKICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTsKICB2YXIgZzQgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGkxMSwgcTIgPSBbXTsKICByZXR1cm4gaTExID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09ICJmdW5jdGlvbiIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKCJuZXh0IiksIHZlcmIoInRocm93IiksIHZlcmIoInJldHVybiIsIGF3YWl0UmV0dXJuKSwgaTExW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXM7CiAgfSwgaTExOwogIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGY3KSB7CiAgICByZXR1cm4gZnVuY3Rpb24odjUpIHsKICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2NSkudGhlbihmNywgcmVqZWN0KTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHZlcmIobjEzLCBmNykgewogICAgaWYgKGc0W24xM10pIHsKICAgICAgaTExW24xM10gPSBmdW5jdGlvbih2NSkgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihhNSwgYjUpIHsKICAgICAgICAgIHEyLnB1c2goW24xMywgdjUsIGE1LCBiNV0pID4gMSB8fCByZXN1bWUobjEzLCB2NSk7CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIGlmIChmNykgaTExW24xM10gPSBmNyhpMTFbbjEzXSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHJlc3VtZShuMTMsIHY1KSB7CiAgICB0cnkgewogICAgICBzdGVwKGc0W24xM10odjUpKTsKICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICBzZXR0bGUocTJbMF1bM10sIGUxMSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHN0ZXAocjExKSB7CiAgICByMTEudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIxMS52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocTJbMF1bMl0sIHIxMSk7CiAgfQogIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUyKSB7CiAgICByZXN1bWUoIm5leHQiLCB2YWx1ZTIpOwogIH0KICBmdW5jdGlvbiByZWplY3QodmFsdWUyKSB7CiAgICByZXN1bWUoInRocm93IiwgdmFsdWUyKTsKICB9CiAgZnVuY3Rpb24gc2V0dGxlKGY3LCB2NSkgewogICAgaWYgKGY3KHY1KSwgcTIuc2hpZnQoKSwgcTIubGVuZ3RoKSByZXN1bWUocTJbMF1bMF0sIHEyWzBdWzFdKTsKICB9Cn0KZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvMTMpIHsKICB2YXIgaTExLCBwNzsKICByZXR1cm4gaTExID0ge30sIHZlcmIoIm5leHQiKSwgdmVyYigidGhyb3ciLCBmdW5jdGlvbihlMTEpIHsKICAgIHRocm93IGUxMTsKICB9KSwgdmVyYigicmV0dXJuIiksIGkxMVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpczsKICB9LCBpMTE7CiAgZnVuY3Rpb24gdmVyYihuMTMsIGY3KSB7CiAgICBpMTFbbjEzXSA9IG8xM1tuMTNdID8gZnVuY3Rpb24odjUpIHsKICAgICAgcmV0dXJuIChwNyA9ICFwNykgPyB7IHZhbHVlOiBfX2F3YWl0KG8xM1tuMTNdKHY1KSksIGRvbmU6IGZhbHNlIH0gOiBmNyA/IGY3KHY1KSA6IHY1OwogICAgfSA6IGY3OwogIH0KfQpmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8xMykgewogIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpOwogIHZhciBtNiA9IG8xM1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGkxMTsKICByZXR1cm4gbTYgPyBtNi5jYWxsKG8xMykgOiAobzEzID0gdHlwZW9mIF9fdmFsdWVzID09PSAiZnVuY3Rpb24iID8gX192YWx1ZXMobzEzKSA6IG8xM1tTeW1ib2wuaXRlcmF0b3JdKCksIGkxMSA9IHt9LCB2ZXJiKCJuZXh0IiksIHZlcmIoInRocm93IiksIHZlcmIoInJldHVybiIpLCBpMTFbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpczsKICB9LCBpMTEpOwogIGZ1bmN0aW9uIHZlcmIobjEzKSB7CiAgICBpMTFbbjEzXSA9IG8xM1tuMTNdICYmIGZ1bmN0aW9uKHY1KSB7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICAgICAgdjUgPSBvMTNbbjEzXSh2NSksIHNldHRsZShyZXNvbHZlMiwgcmVqZWN0LCB2NS5kb25lLCB2NS52YWx1ZSk7CiAgICAgIH0pOwogICAgfTsKICB9CiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUyLCByZWplY3QsIGQ2LCB2NSkgewogICAgUHJvbWlzZS5yZXNvbHZlKHY1KS50aGVuKGZ1bmN0aW9uKHY2KSB7CiAgICAgIHJlc29sdmUyKHsgdmFsdWU6IHY2LCBkb25lOiBkNiB9KTsKICAgIH0sIHJlamVjdCk7CiAgfQp9CmZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3MikgewogIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsICJyYXciLCB7IHZhbHVlOiByYXcyIH0pOwogIH0gZWxzZSB7CiAgICBjb29rZWQucmF3ID0gcmF3MjsKICB9CiAgcmV0dXJuIGNvb2tlZDsKfQpmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7CiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDsKICB2YXIgcmVzdWx0ID0ge307CiAgaWYgKG1vZCAhPSBudWxsKSB7CiAgICBmb3IgKHZhciBrNCA9IG93bktleXMobW9kKSwgaTExID0gMDsgaTExIDwgazQubGVuZ3RoOyBpMTErKykgaWYgKGs0W2kxMV0gIT09ICJkZWZhdWx0IikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrNFtpMTFdKTsKICB9CiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTsKICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHsKICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTsKfQpmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZTE0LCBraW5kLCBmNykgewogIGlmIChraW5kID09PSAiYSIgJiYgIWY3KSB0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTsKICBpZiAodHlwZW9mIHN0YXRlMTQgPT09ICJmdW5jdGlvbiIgPyByZWNlaXZlciAhPT0gc3RhdGUxNCB8fCAhZjcgOiAhc3RhdGUxNC5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXQiKTsKICByZXR1cm4ga2luZCA9PT0gIm0iID8gZjcgOiBraW5kID09PSAiYSIgPyBmNy5jYWxsKHJlY2VpdmVyKSA6IGY3ID8gZjcudmFsdWUgOiBzdGF0ZTE0LmdldChyZWNlaXZlcik7Cn0KZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUxNCwgdmFsdWUyLCBraW5kLCBmNykgewogIGlmIChraW5kID09PSAibSIpIHRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZSIpOwogIGlmIChraW5kID09PSAiYSIgJiYgIWY3KSB0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTsKICBpZiAodHlwZW9mIHN0YXRlMTQgPT09ICJmdW5jdGlvbiIgPyByZWNlaXZlciAhPT0gc3RhdGUxNCB8fCAhZjcgOiAhc3RhdGUxNC5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpOwogIHJldHVybiBraW5kID09PSAiYSIgPyBmNy5jYWxsKHJlY2VpdmVyLCB2YWx1ZTIpIDogZjcgPyBmNy52YWx1ZSA9IHZhbHVlMiA6IHN0YXRlMTQuc2V0KHJlY2VpdmVyLCB2YWx1ZTIpLCB2YWx1ZTI7Cn0KZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlMTQsIHJlY2VpdmVyKSB7CiAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8IHR5cGVvZiByZWNlaXZlciAhPT0gIm9iamVjdCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdCIpOwogIHJldHVybiB0eXBlb2Ygc3RhdGUxNCA9PT0gImZ1bmN0aW9uIiA/IHJlY2VpdmVyID09PSBzdGF0ZTE0IDogc3RhdGUxNC5oYXMocmVjZWl2ZXIpOwp9CmZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudjIsIHZhbHVlMiwgYXN5bmMyKSB7CiAgaWYgKHZhbHVlMiAhPT0gbnVsbCAmJiB2YWx1ZTIgIT09IHZvaWQgMCkgewogICAgaWYgKHR5cGVvZiB2YWx1ZTIgIT09ICJvYmplY3QiICYmIHR5cGVvZiB2YWx1ZTIgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZC4iKTsKICAgIHZhciBkaXNwb3NlLCBpbm5lcjsKICAgIGlmIChhc3luYzIpIHsKICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICBkaXNwb3NlID0gdmFsdWUyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOwogICAgfQogICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkgewogICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgZGlzcG9zZSA9IHZhbHVlMltTeW1ib2wuZGlzcG9zZV07CiAgICAgIGlmIChhc3luYzIpIGlubmVyID0gZGlzcG9zZTsKICAgIH0KICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLiIpOwogICAgaWYgKGlubmVyKSBkaXNwb3NlID0gZnVuY3Rpb24oKSB7CiAgICAgIHRyeSB7CiAgICAgICAgaW5uZXIuY2FsbCh0aGlzKTsKICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUxMSk7CiAgICAgIH0KICAgIH07CiAgICBlbnYyLnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUyLCBkaXNwb3NlLCBhc3luYzogYXN5bmMyIH0pOwogIH0gZWxzZSBpZiAoYXN5bmMyKSB7CiAgICBlbnYyLnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTsKICB9CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52MikgewogIGZ1bmN0aW9uIGZhaWwoZTExKSB7CiAgICBlbnYyLmVycm9yID0gZW52Mi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUxMSwgZW52Mi5lcnJvciwgIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC4iKSA6IGUxMTsKICAgIGVudjIuaGFzRXJyb3IgPSB0cnVlOwogIH0KICB2YXIgcjExLCBzOSA9IDA7CiAgZnVuY3Rpb24gbmV4dDIoKSB7CiAgICB3aGlsZSAocjExID0gZW52Mi5zdGFjay5wb3AoKSkgewogICAgICB0cnkgewogICAgICAgIGlmICghcjExLmFzeW5jICYmIHM5ID09PSAxKSByZXR1cm4gczkgPSAwLCBlbnYyLnN0YWNrLnB1c2gocjExKSwgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuZXh0Mik7CiAgICAgICAgaWYgKHIxMS5kaXNwb3NlKSB7CiAgICAgICAgICB2YXIgcmVzdWx0ID0gcjExLmRpc3Bvc2UuY2FsbChyMTEudmFsdWUpOwogICAgICAgICAgaWYgKHIxMS5hc3luYykgcmV0dXJuIHM5IHw9IDIsIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dDIsIGZ1bmN0aW9uKGUxMSkgewogICAgICAgICAgICBmYWlsKGUxMSk7CiAgICAgICAgICAgIHJldHVybiBuZXh0MigpOwogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHM5IHw9IDE7CiAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIGZhaWwoZTExKTsKICAgICAgfQogICAgfQogICAgaWYgKHM5ID09PSAxKSByZXR1cm4gZW52Mi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudjIuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7CiAgICBpZiAoZW52Mi5oYXNFcnJvcikgdGhyb3cgZW52Mi5lcnJvcjsKICB9CiAgcmV0dXJuIG5leHQyKCk7Cn0KZnVuY3Rpb24gX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24ocGF0aDIsIHByZXNlcnZlSnN4KSB7CiAgaWYgKHR5cGVvZiBwYXRoMiA9PT0gInN0cmluZyIgJiYgL15cLlwuP1wvLy50ZXN0KHBhdGgyKSkgewogICAgcmV0dXJuIHBhdGgyLnJlcGxhY2UoL1wuKHRzeCkkfCgoPzpcLmQpPykoKD86XC5bXi4vXSs/KT8pXC4oW2NtXT8pdHMkL2ksIGZ1bmN0aW9uKG02LCB0c3gsIGQ2LCBleHQsIGNtKSB7CiAgICAgIHJldHVybiB0c3ggPyBwcmVzZXJ2ZUpzeCA/ICIuanN4IiA6ICIuanMiIDogZDYgJiYgKCFleHQgfHwgIWNtKSA/IG02IDogZDYgKyBleHQgKyAiLiIgKyBjbS50b0xvd2VyQ2FzZSgpICsgImpzIjsKICAgIH0pOwogIH0KICByZXR1cm4gcGF0aDI7Cn0KdmFyIGV4dGVuZFN0YXRpY3MsIF9fYXNzaWduLCBfX2NyZWF0ZUJpbmRpbmcsIF9fc2V0TW9kdWxlRGVmYXVsdCwgb3duS2V5cywgX1N1cHByZXNzZWRFcnJvciwgdHNsaWJfZXM2X2RlZmF1bHQ7CnZhciBpbml0X3RzbGliX2VzNiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3RzbGliQDIuOC4xL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIigpIHsKICAgIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkNiwgYjUpIHsKICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGQ3LCBiNikgewogICAgICAgIGQ3Ll9fcHJvdG9fXyA9IGI2OwogICAgICB9IHx8IGZ1bmN0aW9uKGQ3LCBiNikgewogICAgICAgIGZvciAodmFyIHA3IGluIGI2KSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGI2LCBwNykpIGQ3W3A3XSA9IGI2W3A3XTsKICAgICAgfTsKICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZDYsIGI1KTsKICAgIH07CiAgICBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkgewogICAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24yKHQ5KSB7CiAgICAgICAgZm9yICh2YXIgczksIGkxMSA9IDEsIG4xMyA9IGFyZ3VtZW50cy5sZW5ndGg7IGkxMSA8IG4xMzsgaTExKyspIHsKICAgICAgICAgIHM5ID0gYXJndW1lbnRzW2kxMV07CiAgICAgICAgICBmb3IgKHZhciBwNyBpbiBzOSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzOSwgcDcpKSB0OVtwN10gPSBzOVtwN107CiAgICAgICAgfQogICAgICAgIHJldHVybiB0OTsKICAgICAgfTsKICAgICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICB9OwogICAgOwogICAgOwogICAgOwogICAgOwogICAgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtNiwgazQpOwogICAgICBpZiAoIWRlc2MgfHwgKCJnZXQiIGluIGRlc2MgPyAhbTYuX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7CiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBtNltrNF07CiAgICAgICAgfSB9OwogICAgICB9CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvMTMsIGsyMiwgZGVzYyk7CiAgICB9KSA6IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIG8xM1trMjJdID0gbTZbazRdOwogICAgfSk7CiAgICA7CiAgICBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8xMywgdjUpIHsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8xMywgImRlZmF1bHQiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2NSB9KTsKICAgIH0pIDogZnVuY3Rpb24obzEzLCB2NSkgewogICAgICBvMTNbImRlZmF1bHQiXSA9IHY1OwogICAgfTsKICAgIG93bktleXMgPSBmdW5jdGlvbihvMTMpIHsKICAgICAgb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uKG8xNCkgewogICAgICAgIHZhciBhciA9IFtdOwogICAgICAgIGZvciAodmFyIGs0IGluIG8xNCkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvMTQsIGs0KSkgYXJbYXIubGVuZ3RoXSA9IGs0OwogICAgICAgIHJldHVybiBhcjsKICAgICAgfTsKICAgICAgcmV0dXJuIG93bktleXMobzEzKTsKICAgIH07CiAgICBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gImZ1bmN0aW9uIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlMikgewogICAgICB2YXIgZTExID0gbmV3IEVycm9yKG1lc3NhZ2UyKTsKICAgICAgcmV0dXJuIGUxMS5uYW1lID0gIlN1cHByZXNzZWRFcnJvciIsIGUxMS5lcnJvciA9IGVycm9yLCBlMTEuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGUxMTsKICAgIH07CiAgICB0c2xpYl9lczZfZGVmYXVsdCA9IHsKICAgICAgX19leHRlbmRzLAogICAgICBfX2Fzc2lnbiwKICAgICAgX19yZXN0LAogICAgICBfX2RlY29yYXRlLAogICAgICBfX3BhcmFtLAogICAgICBfX2VzRGVjb3JhdGUsCiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzOiBfX3J1bkluaXRpYWxpemVyczIsCiAgICAgIF9fcHJvcEtleSwKICAgICAgX19zZXRGdW5jdGlvbk5hbWUsCiAgICAgIF9fbWV0YWRhdGEsCiAgICAgIF9fYXdhaXRlciwKICAgICAgX19nZW5lcmF0b3IsCiAgICAgIF9fY3JlYXRlQmluZGluZywKICAgICAgX19leHBvcnRTdGFyLAogICAgICBfX3ZhbHVlcywKICAgICAgX19yZWFkLAogICAgICBfX3NwcmVhZCwKICAgICAgX19zcHJlYWRBcnJheXMsCiAgICAgIF9fc3ByZWFkQXJyYXksCiAgICAgIF9fYXdhaXQsCiAgICAgIF9fYXN5bmNHZW5lcmF0b3IsCiAgICAgIF9fYXN5bmNEZWxlZ2F0b3IsCiAgICAgIF9fYXN5bmNWYWx1ZXMsCiAgICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0LAogICAgICBfX2ltcG9ydFN0YXIsCiAgICAgIF9faW1wb3J0RGVmYXVsdCwKICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCwKICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCwKICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEluLAogICAgICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSwKICAgICAgX19kaXNwb3NlUmVzb3VyY2VzLAogICAgICBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNGdW5jdGlvbi5qcwpmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlMikgewogIHJldHVybiB0eXBlb2YgdmFsdWUyID09PSAiZnVuY3Rpb24iOwp9CnZhciBpbml0X2lzRnVuY3Rpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzRnVuY3Rpb24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9jcmVhdGVFcnJvckNsYXNzLmpzCmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkgewogIHZhciBfc3VwZXIgPSBmdW5jdGlvbihpbnN0YW5jZSkgewogICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7CiAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrOwogIH07CiAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpOwogIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTsKICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYzsKICByZXR1cm4gY3RvckZ1bmM7Cn0KdmFyIGluaXRfY3JlYXRlRXJyb3JDbGFzcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvY3JlYXRlRXJyb3JDbGFzcy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL1Vuc3Vic2NyaXB0aW9uRXJyb3IuanMKdmFyIFVuc3Vic2NyaXB0aW9uRXJyb3I7CnZhciBpbml0X1Vuc3Vic2NyaXB0aW9uRXJyb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL1Vuc3Vic2NyaXB0aW9uRXJyb3IuanMiKCkgewogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykgewogICAgICAgIF9zdXBlcih0aGlzKTsKICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnJvcnMgPyBlcnJvcnMubGVuZ3RoICsgIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuIiArIGVycm9ycy5tYXAoZnVuY3Rpb24oZXJyLCBpMTEpIHsKICAgICAgICAgIHJldHVybiBpMTEgKyAxICsgIikgIiArIGVyci50b1N0cmluZygpOwogICAgICAgIH0pLmpvaW4oIlxuICAiKSA6ICIiOwogICAgICAgIHRoaXMubmFtZSA9ICJVbnN1YnNjcmlwdGlvbkVycm9yIjsKICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9yczsKICAgICAgfTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9hcnJSZW1vdmUuanMKZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkgewogIGlmIChhcnIpIHsKICAgIHZhciBpbmRleDIgPSBhcnIuaW5kZXhPZihpdGVtKTsKICAgIDAgPD0gaW5kZXgyICYmIGFyci5zcGxpY2UoaW5kZXgyLCAxKTsKICB9Cn0KdmFyIGluaXRfYXJyUmVtb3ZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9hcnJSZW1vdmUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU3Vic2NyaXB0aW9uLmpzCmZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHwgdmFsdWUyICYmICJjbG9zZWQiIGluIHZhbHVlMiAmJiBpc0Z1bmN0aW9uKHZhbHVlMi5yZW1vdmUpICYmIGlzRnVuY3Rpb24odmFsdWUyLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZTIudW5zdWJzY3JpYmUpOwp9CmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7CiAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkgewogICAgZmluYWxpemVyKCk7CiAgfSBlbHNlIHsKICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpOwogIH0KfQp2YXIgU3Vic2NyaXB0aW9uLCBFTVBUWV9TVUJTQ1JJUFRJT047CnZhciBpbml0X1N1YnNjcmlwdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL1N1YnNjcmlwdGlvbi5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgICBpbml0X1Vuc3Vic2NyaXB0aW9uRXJyb3IoKTsKICAgIGluaXRfYXJyUmVtb3ZlKCk7CiAgICBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24oKSB7CiAgICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbjIoaW5pdGlhbFRlYXJkb3duKSB7CiAgICAgICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247CiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsOwogICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsOwogICAgICB9CiAgICAgIFN1YnNjcmlwdGlvbjIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGVfMSwgX2ExNiwgZV8yLCBfYjsKICAgICAgICB2YXIgZXJyb3JzOwogICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHsKICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTsKICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlOwogICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHsKICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDsKICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkgewogICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBfcGFyZW50YWdlXzFfMS52YWx1ZTsKICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgICAgICAgICAgICBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OwogICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hMTYgPSBfcGFyZW50YWdlXzEucmV0dXJuKSkgX2ExNi5jYWxsKF9wYXJlbnRhZ2VfMSk7CiAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgICBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgaW5pdGlhbEZpbmFsaXplciA9IHRoaXMuaW5pdGlhbFRlYXJkb3duOwogICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdGlhbEZpbmFsaXplcikpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBpbml0aWFsRmluYWxpemVyKCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgICAgIGVycm9ycyA9IGUxMSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlMTEuZXJyb3JzIDogW2UxMV07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7CiAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHsKICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHsKICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107CiAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoZXJyb3JzKSksIF9fcmVhZChlcnIuZXJyb3JzKSk7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZV8yXzEpIHsKICAgICAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OwogICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7CiAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChlcnJvcnMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YnNjcmlwdGlvbjIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHRlYXJkb3duKSB7CiAgICAgICAgdmFyIF9hMTY7CiAgICAgICAgaWYgKHRlYXJkb3duICYmIHRlYXJkb3duICE9PSB0aGlzKSB7CiAgICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHsKICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24yKSB7CiAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2ExNiA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIF9hMTYgIT09IHZvaWQgMCA/IF9hMTYgOiBbXSkucHVzaCh0ZWFyZG93bik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgICBTdWJzY3JpcHRpb24yLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24ocGFyZW50KSB7CiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7CiAgICAgICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KTsKICAgICAgfTsKICAgICAgU3Vic2NyaXB0aW9uMi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKHBhcmVudCkgewogICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlOwogICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50OwogICAgICB9OwogICAgICBTdWJzY3JpcHRpb24yLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24ocGFyZW50KSB7CiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7CiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkgewogICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDsKICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHsKICAgICAgICAgIGFyclJlbW92ZShfcGFyZW50YWdlLCBwYXJlbnQpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaXB0aW9uMi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24odGVhcmRvd24pIHsKICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzOwogICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pOwogICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbjIpIHsKICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTdWJzY3JpcHRpb24yLkVNUFRZID0gKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBlbXB0eTQgPSBuZXcgU3Vic2NyaXB0aW9uMigpOwogICAgICAgIGVtcHR5NC5jbG9zZWQgPSB0cnVlOwogICAgICAgIHJldHVybiBlbXB0eTQ7CiAgICAgIH0pKCk7CiAgICAgIHJldHVybiBTdWJzY3JpcHRpb24yOwogICAgfSkoKTsKICAgIEVNUFRZX1NVQlNDUklQVElPTiA9IFN1YnNjcmlwdGlvbi5FTVBUWTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL2NvbmZpZy5qcwp2YXIgY29uZmlnOwp2YXIgaW5pdF9jb25maWcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9jb25maWcuanMiKCkgewogICAgY29uZmlnID0gewogICAgICBvblVuaGFuZGxlZEVycm9yOiBudWxsLAogICAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsCiAgICAgIFByb21pc2U6IHZvaWQgMCwKICAgICAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogZmFsc2UsCiAgICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvdGltZW91dFByb3ZpZGVyLmpzCnZhciB0aW1lb3V0UHJvdmlkZXI7CnZhciBpbml0X3RpbWVvdXRQcm92aWRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci90aW1lb3V0UHJvdmlkZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIHRpbWVvdXRQcm92aWRlciA9IHsKICAgICAgc2V0VGltZW91dDogZnVuY3Rpb24oaGFuZGxlcjIsIHRpbWVvdXQyKSB7CiAgICAgICAgdmFyIGFyZ3MgPSBbXTsKICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTsKICAgICAgICB9CiAgICAgICAgdmFyIGRlbGVnYXRlID0gdGltZW91dFByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIGlmIChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuc2V0VGltZW91dCkgewogICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLnNldFRpbWVvdXQuYXBwbHkoZGVsZWdhdGUsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIyLCB0aW1lb3V0Ml0sIF9fcmVhZChhcmdzKSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIyLCB0aW1lb3V0Ml0sIF9fcmVhZChhcmdzKSkpOwogICAgICB9LAogICAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uKGhhbmRsZTMpIHsKICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7CiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLmNsZWFyVGltZW91dCkgfHwgY2xlYXJUaW1lb3V0KShoYW5kbGUzKTsKICAgICAgfSwKICAgICAgZGVsZWdhdGU6IHZvaWQgMAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvcmVwb3J0VW5oYW5kbGVkRXJyb3IuanMKZnVuY3Rpb24gcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyKSB7CiAgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICB2YXIgb25VbmhhbmRsZWRFcnJvciA9IGNvbmZpZy5vblVuaGFuZGxlZEVycm9yOwogICAgaWYgKG9uVW5oYW5kbGVkRXJyb3IpIHsKICAgICAgb25VbmhhbmRsZWRFcnJvcihlcnIpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgZXJyOwogICAgfQogIH0pOwp9CnZhciBpbml0X3JlcG9ydFVuaGFuZGxlZEVycm9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvci5qcyIoKSB7CiAgICBpbml0X2NvbmZpZygpOwogICAgaW5pdF90aW1lb3V0UHJvdmlkZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvbm9vcC5qcwpmdW5jdGlvbiBub29wKCkgewp9CnZhciBpbml0X25vb3AgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL25vb3AuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvTm90aWZpY2F0aW9uRmFjdG9yaWVzLmpzCmZ1bmN0aW9uIGVycm9yTm90aWZpY2F0aW9uKGVycm9yKSB7CiAgcmV0dXJuIGNyZWF0ZU5vdGlmaWNhdGlvbigiRSIsIHZvaWQgMCwgZXJyb3IpOwp9CmZ1bmN0aW9uIG5leHROb3RpZmljYXRpb24odmFsdWUyKSB7CiAgcmV0dXJuIGNyZWF0ZU5vdGlmaWNhdGlvbigiTiIsIHZhbHVlMiwgdm9pZCAwKTsKfQpmdW5jdGlvbiBjcmVhdGVOb3RpZmljYXRpb24oa2luZCwgdmFsdWUyLCBlcnJvcikgewogIHJldHVybiB7CiAgICBraW5kLAogICAgdmFsdWU6IHZhbHVlMiwKICAgIGVycm9yCiAgfTsKfQp2YXIgQ09NUExFVEVfTk9USUZJQ0FUSU9OOwp2YXIgaW5pdF9Ob3RpZmljYXRpb25GYWN0b3JpZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9Ob3RpZmljYXRpb25GYWN0b3JpZXMuanMiKCkgewogICAgQ09NUExFVEVfTk9USUZJQ0FUSU9OID0gKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gY3JlYXRlTm90aWZpY2F0aW9uKCJDIiwgdm9pZCAwLCB2b2lkIDApOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvZXJyb3JDb250ZXh0LmpzCmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikgewogIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZykgewogICAgdmFyIGlzUm9vdCA9ICFjb250ZXh0OwogICAgaWYgKGlzUm9vdCkgewogICAgICBjb250ZXh0ID0geyBlcnJvclRocm93bjogZmFsc2UsIGVycm9yOiBudWxsIH07CiAgICB9CiAgICBjYigpOwogICAgaWYgKGlzUm9vdCkgewogICAgICB2YXIgX2ExNiA9IGNvbnRleHQsIGVycm9yVGhyb3duID0gX2ExNi5lcnJvclRocm93biwgZXJyb3IgPSBfYTE2LmVycm9yOwogICAgICBjb250ZXh0ID0gbnVsbDsKICAgICAgaWYgKGVycm9yVGhyb3duKSB7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0KICAgIH0KICB9IGVsc2UgewogICAgY2IoKTsKICB9Cn0KZnVuY3Rpb24gY2FwdHVyZUVycm9yKGVycikgewogIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyAmJiBjb250ZXh0KSB7CiAgICBjb250ZXh0LmVycm9yVGhyb3duID0gdHJ1ZTsKICAgIGNvbnRleHQuZXJyb3IgPSBlcnI7CiAgfQp9CnZhciBjb250ZXh0Owp2YXIgaW5pdF9lcnJvckNvbnRleHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2Vycm9yQ29udGV4dC5qcyIoKSB7CiAgICBpbml0X2NvbmZpZygpOwogICAgY29udGV4dCA9IG51bGw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TdWJzY3JpYmVyLmpzCmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHsKICByZXR1cm4gX2JpbmQuY2FsbChmbiwgdGhpc0FyZyk7Cn0KZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHsKICBpZiAoY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpIHsKICAgIGNhcHR1cmVFcnJvcihlcnJvcik7CiAgfSBlbHNlIHsKICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTsKICB9Cn0KZnVuY3Rpb24gZGVmYXVsdEVycm9ySGFuZGxlcihlcnIpIHsKICB0aHJvdyBlcnI7Cn0KZnVuY3Rpb24gaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIHN1YnNjcmliZXIpIHsKICB2YXIgb25TdG9wcGVkTm90aWZpY2F0aW9uID0gY29uZmlnLm9uU3RvcHBlZE5vdGlmaWNhdGlvbjsKICBvblN0b3BwZWROb3RpZmljYXRpb24gJiYgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gb25TdG9wcGVkTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgc3Vic2NyaWJlcik7CiAgfSk7Cn0KdmFyIFN1YnNjcmliZXIsIF9iaW5kLCBDb25zdW1lck9ic2VydmVyLCBTYWZlU3Vic2NyaWJlciwgRU1QVFlfT0JTRVJWRVI7CnZhciBpbml0X1N1YnNjcmliZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TdWJzY3JpYmVyLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICAgIGluaXRfU3Vic2NyaXB0aW9uKCk7CiAgICBpbml0X2NvbmZpZygpOwogICAgaW5pdF9yZXBvcnRVbmhhbmRsZWRFcnJvcigpOwogICAgaW5pdF9ub29wKCk7CiAgICBpbml0X05vdGlmaWNhdGlvbkZhY3RvcmllcygpOwogICAgaW5pdF90aW1lb3V0UHJvdmlkZXIoKTsKICAgIGluaXRfZXJyb3JDb250ZXh0KCk7CiAgICBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoU3Vic2NyaWJlcjIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIyKGRlc3RpbmF0aW9uKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpczsKICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTsKICAgICAgICBpZiAoZGVzdGluYXRpb24pIHsKICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247CiAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7CiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChfdGhpcyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBTdWJzY3JpYmVyMi5jcmVhdGUgPSBmdW5jdGlvbihuZXh0MiwgZXJyb3IsIGNvbXBsZXRlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0MiwgZXJyb3IsIGNvbXBsZXRlKTsKICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHsKICAgICAgICAgIGhhbmRsZVN0b3BwZWROb3RpZmljYXRpb24obmV4dE5vdGlmaWNhdGlvbih2YWx1ZTIpLCB0aGlzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5fbmV4dCh2YWx1ZTIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7CiAgICAgICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKGVycm9yTm90aWZpY2F0aW9uKGVyciksIHRoaXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7CiAgICAgICAgICB0aGlzLl9lcnJvcihlcnIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7CiAgICAgICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKENPTVBMRVRFX05PVElGSUNBVElPTiwgdGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTdWJzY3JpYmVyMi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7CiAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7CiAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7CiAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YnNjcmliZXIyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZTIpOwogICAgICB9OwogICAgICBTdWJzY3JpYmVyMi5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBTdWJzY3JpYmVyMjsKICAgIH0pKFN1YnNjcmlwdGlvbik7CiAgICBfYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kOwogICAgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbigpIHsKICAgICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcjIocGFydGlhbE9ic2VydmVyKSB7CiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7CiAgICAgIH0KICAgICAgQ29uc3VtZXJPYnNlcnZlcjIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7CiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIubmV4dCh2YWx1ZTIpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29uc3VtZXJPYnNlcnZlcjIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyOwogICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29uc3VtZXJPYnNlcnZlcjIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyOwogICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSgpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXIyOwogICAgfSkoKTsKICAgIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBTYWZlU3Vic2NyaWJlcjIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjsKICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgIW9ic2VydmVyT3JOZXh0KSB7CiAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7CiAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0ICE9PSBudWxsICYmIG9ic2VydmVyT3JOZXh0ICE9PSB2b2lkIDAgPyBvYnNlcnZlck9yTmV4dCA6IHZvaWQgMCwKICAgICAgICAgICAgZXJyb3I6IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IHZvaWQgMCwKICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHZvaWQgMAogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIGNvbnRleHRfMTsKICAgICAgICAgIGlmIChfdGhpcyAmJiBjb25maWcudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHRfMSA9IE9iamVjdC5jcmVhdGUob2JzZXJ2ZXJPck5leHQpOwogICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMudW5zdWJzY3JpYmUoKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gewogICAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0Lm5leHQgJiYgYmluZChvYnNlcnZlck9yTmV4dC5uZXh0LCBjb250ZXh0XzEpLAogICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLAogICAgICAgICAgICAgIGNvbXBsZXRlOiBvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlLCBjb250ZXh0XzEpCiAgICAgICAgICAgIH07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICByZXR1cm4gU2FmZVN1YnNjcmliZXIyOwogICAgfSkoU3Vic2NyaWJlcik7CiAgICBFTVBUWV9PQlNFUlZFUiA9IHsKICAgICAgY2xvc2VkOiB0cnVlLAogICAgICBuZXh0OiBub29wLAogICAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlciwKICAgICAgY29tcGxldGU6IG5vb3AKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zeW1ib2wvb2JzZXJ2YWJsZS5qcwp2YXIgb2JzZXJ2YWJsZTsKdmFyIGluaXRfb2JzZXJ2YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3N5bWJvbC9vYnNlcnZhYmxlLmpzIigpIHsKICAgIG9ic2VydmFibGUgPSAoZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8ICJAQG9ic2VydmFibGUiOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaWRlbnRpdHkuanMKZnVuY3Rpb24gaWRlbnRpdHkoeDMpIHsKICByZXR1cm4geDM7Cn0KdmFyIGluaXRfaWRlbnRpdHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lkZW50aXR5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvcGlwZS5qcwpmdW5jdGlvbiBwaXBlKCkgewogIHZhciBmbnMgPSBbXTsKICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgZm5zW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgfQogIHJldHVybiBwaXBlRnJvbUFycmF5KGZucyk7Cn0KZnVuY3Rpb24gcGlwZUZyb21BcnJheShmbnMpIHsKICBpZiAoZm5zLmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIGlkZW50aXR5OwogIH0KICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkgewogICAgcmV0dXJuIGZuc1swXTsKICB9CiAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7CiAgICByZXR1cm4gZm5zLnJlZHVjZShmdW5jdGlvbihwcmV2LCBmbikgewogICAgICByZXR1cm4gZm4ocHJldik7CiAgICB9LCBpbnB1dCk7CiAgfTsKfQp2YXIgaW5pdF9waXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9waXBlLmpzIigpIHsKICAgIGluaXRfaWRlbnRpdHkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL09ic2VydmFibGUuanMKZnVuY3Rpb24gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpIHsKICB2YXIgX2ExNjsKICByZXR1cm4gKF9hMTYgPSBwcm9taXNlQ3RvciAhPT0gbnVsbCAmJiBwcm9taXNlQ3RvciAhPT0gdm9pZCAwID8gcHJvbWlzZUN0b3IgOiBjb25maWcuUHJvbWlzZSkgIT09IG51bGwgJiYgX2ExNiAhPT0gdm9pZCAwID8gX2ExNiA6IFByb21pc2U7Cn0KZnVuY3Rpb24gaXNPYnNlcnZlcih2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyICYmIGlzRnVuY3Rpb24odmFsdWUyLm5leHQpICYmIGlzRnVuY3Rpb24odmFsdWUyLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlMi5jb21wbGV0ZSk7Cn0KZnVuY3Rpb24gaXNTdWJzY3JpYmVyKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgJiYgdmFsdWUyIGluc3RhbmNlb2YgU3Vic2NyaWJlciB8fCBpc09ic2VydmVyKHZhbHVlMikgJiYgaXNTdWJzY3JpcHRpb24odmFsdWUyKTsKfQp2YXIgT2JzZXJ2YWJsZTsKdmFyIGluaXRfT2JzZXJ2YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL09ic2VydmFibGUuanMiKCkgewogICAgaW5pdF9TdWJzY3JpYmVyKCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9vYnNlcnZhYmxlKCk7CiAgICBpbml0X3BpcGUoKTsKICAgIGluaXRfY29uZmlnKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICAgIGluaXRfZXJyb3JDb250ZXh0KCk7CiAgICBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uKCkgewogICAgICBmdW5jdGlvbiBPYnNlcnZhYmxlMihzdWJzY3JpYmUyKSB7CiAgICAgICAgaWYgKHN1YnNjcmliZTIpIHsKICAgICAgICAgIHRoaXMuX3N1YnNjcmliZSA9IHN1YnNjcmliZTI7CiAgICAgICAgfQogICAgICB9CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ob3BlcmF0b3IpIHsKICAgICAgICB2YXIgb2JzZXJ2YWJsZTIgPSBuZXcgT2JzZXJ2YWJsZTIoKTsKICAgICAgICBvYnNlcnZhYmxlMi5zb3VyY2UgPSB0aGlzOwogICAgICAgIG9ic2VydmFibGUyLm9wZXJhdG9yID0gb3BlcmF0b3I7CiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUyOwogICAgICB9OwogICAgICBPYnNlcnZhYmxlMi5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkgewogICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBpc1N1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQpID8gb2JzZXJ2ZXJPck5leHQgOiBuZXcgU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSk7CiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIF9hMTYgPSBfdGhpcywgb3BlcmF0b3IgPSBfYTE2Lm9wZXJhdG9yLCBzb3VyY2UgPSBfYTE2LnNvdXJjZTsKICAgICAgICAgIHN1YnNjcmliZXIuYWRkKG9wZXJhdG9yID8gb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpIDogc291cmNlID8gX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKSA6IF90aGlzLl90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcikpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBzdWJzY3JpYmVyOwogICAgICB9OwogICAgICBPYnNlcnZhYmxlMi5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHNpbmspIHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShzaW5rKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24obmV4dDIsIHByb21pc2VDdG9yKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTsKICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uKHJlc29sdmUyLCByZWplY3QpIHsKICAgICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHsKICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIG5leHQyKHZhbHVlMik7CiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGVycm9yOiByZWplY3QsCiAgICAgICAgICAgIGNvbXBsZXRlOiByZXNvbHZlMgogICAgICAgICAgfSk7CiAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgICAgIHZhciBfYTE2OwogICAgICAgIHJldHVybiAoX2ExNiA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYTE2ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE2LnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgfTsKICAgICAgT2JzZXJ2YWJsZTIucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTsKICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgb3BlcmF0aW9uc1tfaV0gPSBhcmd1bWVudHNbX2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTsKICAgICAgfTsKICAgICAgT2JzZXJ2YWJsZTIucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHByb21pc2VDdG9yKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTsKICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uKHJlc29sdmUyLCByZWplY3QpIHsKICAgICAgICAgIHZhciB2YWx1ZTI7CiAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoZnVuY3Rpb24oeDMpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbHVlMiA9IHgzOwogICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTsKICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZTIodmFsdWUyKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9OwogICAgICBPYnNlcnZhYmxlMi5jcmVhdGUgPSBmdW5jdGlvbihzdWJzY3JpYmUyKSB7CiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlMihzdWJzY3JpYmUyKTsKICAgICAgfTsKICAgICAgcmV0dXJuIE9ic2VydmFibGUyOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvbGlmdC5qcwpmdW5jdGlvbiBoYXNMaWZ0KHNvdXJjZSkgewogIHJldHVybiBpc0Z1bmN0aW9uKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZS5saWZ0KTsKfQpmdW5jdGlvbiBvcGVyYXRlKGluaXQpIHsKICByZXR1cm4gZnVuY3Rpb24oc291cmNlKSB7CiAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7CiAgICAgIHJldHVybiBzb3VyY2UubGlmdChmdW5jdGlvbihsaWZ0ZWRTb3VyY2UpIHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIGluaXQobGlmdGVkU291cmNlLCB0aGlzKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKTsKICB9Owp9CnZhciBpbml0X2xpZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2xpZnQuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvT3BlcmF0b3JTdWJzY3JpYmVyLmpzCmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7CiAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7Cn0KdmFyIE9wZXJhdG9yU3Vic2NyaWJlcjsKdmFyIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlci5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9TdWJzY3JpYmVyKCk7CiAgICBPcGVyYXRvclN1YnNjcmliZXIgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhPcGVyYXRvclN1YnNjcmliZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBPcGVyYXRvclN1YnNjcmliZXIyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUsIHNob3VsZFVuc3Vic2NyaWJlKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7CiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7CiAgICAgICAgX3RoaXMuc2hvdWxkVW5zdWJzY3JpYmUgPSBzaG91bGRVbnN1YnNjcmliZTsKICAgICAgICBfdGhpcy5fbmV4dCA9IG9uTmV4dCA/IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgb25OZXh0KHZhbHVlMik7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTsKICAgICAgICAgIH0KICAgICAgICB9IDogX3N1cGVyLnByb3RvdHlwZS5fbmV4dDsKICAgICAgICBfdGhpcy5fZXJyb3IgPSBvbkVycm9yID8gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBvbkVycm9yKGVycik7CiAgICAgICAgICB9IGNhdGNoIChlcnIyKSB7CiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycjIpOwogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpOwogICAgICAgICAgfQogICAgICAgIH0gOiBfc3VwZXIucHJvdG90eXBlLl9lcnJvcjsKICAgICAgICBfdGhpcy5fY29tcGxldGUgPSBvbkNvbXBsZXRlID8gZnVuY3Rpb24oKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBvbkNvbXBsZXRlKCk7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTsKICAgICAgICAgIH0KICAgICAgICB9IDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIE9wZXJhdG9yU3Vic2NyaWJlcjIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF9hMTY7CiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkgewogICAgICAgICAgdmFyIGNsb3NlZF8xID0gdGhpcy5jbG9zZWQ7CiAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7CiAgICAgICAgICAhY2xvc2VkXzEgJiYgKChfYTE2ID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYTE2ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE2LmNhbGwodGhpcykpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIE9wZXJhdG9yU3Vic2NyaWJlcjI7CiAgICB9KShTdWJzY3JpYmVyKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9yZWZDb3VudC5qcwpmdW5jdGlvbiByZWZDb3VudCgpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBjb25uZWN0aW9uID0gbnVsbDsKICAgIHNvdXJjZS5fcmVmQ291bnQrKzsKICAgIHZhciByZWZDb3VudGVyID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBpZiAoIXNvdXJjZSB8fCBzb3VyY2UuX3JlZkNvdW50IDw9IDAgfHwgMCA8IC0tc291cmNlLl9yZWZDb3VudCkgewogICAgICAgIGNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YXIgc2hhcmVkQ29ubmVjdGlvbiA9IHNvdXJjZS5fY29ubmVjdGlvbjsKICAgICAgdmFyIGNvbm4gPSBjb25uZWN0aW9uOwogICAgICBjb25uZWN0aW9uID0gbnVsbDsKICAgICAgaWYgKHNoYXJlZENvbm5lY3Rpb24gJiYgKCFjb25uIHx8IHNoYXJlZENvbm5lY3Rpb24gPT09IGNvbm4pKSB7CiAgICAgICAgc2hhcmVkQ29ubmVjdGlvbi51bnN1YnNjcmliZSgpOwogICAgICB9CiAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgIH0pOwogICAgc291cmNlLnN1YnNjcmliZShyZWZDb3VudGVyKTsKICAgIGlmICghcmVmQ291bnRlci5jbG9zZWQpIHsKICAgICAgY29ubmVjdGlvbiA9IHNvdXJjZS5jb25uZWN0KCk7CiAgICB9CiAgfSk7Cn0KdmFyIGluaXRfcmVmQ291bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVmQ291bnQuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUuanMKdmFyIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTsKdmFyIGluaXRfQ29ubmVjdGFibGVPYnNlcnZhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9TdWJzY3JpcHRpb24oKTsKICAgIGluaXRfcmVmQ291bnQoKTsKICAgIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyKCk7CiAgICBpbml0X2xpZnQoKTsKICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZSA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIoc291cmNlLCBzdWJqZWN0RmFjdG9yeSkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlOwogICAgICAgIF90aGlzLnN1YmplY3RGYWN0b3J5ID0gc3ViamVjdEZhY3Rvcnk7CiAgICAgICAgX3RoaXMuX3N1YmplY3QgPSBudWxsOwogICAgICAgIF90aGlzLl9yZWZDb3VudCA9IDA7CiAgICAgICAgX3RoaXMuX2Nvbm5lY3Rpb24gPSBudWxsOwogICAgICAgIGlmIChoYXNMaWZ0KHNvdXJjZSkpIHsKICAgICAgICAgIF90aGlzLmxpZnQgPSBzb3VyY2UubGlmdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgfTsKICAgICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlMi5wcm90b3R5cGUuZ2V0U3ViamVjdCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzdWJqZWN0ID0gdGhpcy5fc3ViamVjdDsKICAgICAgICBpZiAoIXN1YmplY3QgfHwgc3ViamVjdC5pc1N0b3BwZWQpIHsKICAgICAgICAgIHRoaXMuX3N1YmplY3QgPSB0aGlzLnN1YmplY3RGYWN0b3J5KCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9zdWJqZWN0OwogICAgICB9OwogICAgICBDb25uZWN0YWJsZU9ic2VydmFibGUyLnByb3RvdHlwZS5fdGVhcmRvd24gPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLl9yZWZDb3VudCA9IDA7CiAgICAgICAgdmFyIF9jb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbjsKICAgICAgICB0aGlzLl9zdWJqZWN0ID0gdGhpcy5fY29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgX2Nvbm5lY3Rpb24gPT09IG51bGwgfHwgX2Nvbm5lY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jb25uZWN0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgIH07CiAgICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgIHZhciBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbjsKICAgICAgICBpZiAoIWNvbm5lY3Rpb24pIHsKICAgICAgICAgIGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpOwogICAgICAgICAgdmFyIHN1YmplY3RfMSA9IHRoaXMuZ2V0U3ViamVjdCgpOwogICAgICAgICAgY29ubmVjdGlvbi5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJqZWN0XzEsIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIF90aGlzLl90ZWFyZG93bigpOwogICAgICAgICAgICBzdWJqZWN0XzEuY29tcGxldGUoKTsKICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikgewogICAgICAgICAgICBfdGhpcy5fdGVhcmRvd24oKTsKICAgICAgICAgICAgc3ViamVjdF8xLmVycm9yKGVycik7CiAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIF90aGlzLl90ZWFyZG93bigpOwogICAgICAgICAgfSkpKTsKICAgICAgICAgIGlmIChjb25uZWN0aW9uLmNsb3NlZCkgewogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgICAgY29ubmVjdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb247CiAgICAgIH07CiAgICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIucHJvdG90eXBlLnJlZkNvdW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHJlZkNvdW50KCkodGhpcyk7CiAgICAgIH07CiAgICAgIHJldHVybiBDb25uZWN0YWJsZU9ic2VydmFibGUyOwogICAgfSkoT2JzZXJ2YWJsZSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlci5qcwp2YXIgcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlcjsKdmFyIGluaXRfcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyLmpzIigpIHsKICAgIHBlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXIgPSB7CiAgICAgIG5vdzogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIChwZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyLmRlbGVnYXRlIHx8IHBlcmZvcm1hbmNlKS5ub3coKTsKICAgICAgfSwKICAgICAgZGVsZWdhdGU6IHZvaWQgMAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9hbmltYXRpb25GcmFtZVByb3ZpZGVyLmpzCnZhciBhbmltYXRpb25GcmFtZVByb3ZpZGVyOwp2YXIgaW5pdF9hbmltYXRpb25GcmFtZVByb3ZpZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2FuaW1hdGlvbkZyYW1lUHJvdmlkZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfU3Vic2NyaXB0aW9uKCk7CiAgICBhbmltYXRpb25GcmFtZVByb3ZpZGVyID0gewogICAgICBzY2hlZHVsZTogZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgICAgICB2YXIgcmVxdWVzdCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZTsKICAgICAgICB2YXIgY2FuY2VsID0gY2FuY2VsQW5pbWF0aW9uRnJhbWU7CiAgICAgICAgdmFyIGRlbGVnYXRlID0gYW5pbWF0aW9uRnJhbWVQcm92aWRlci5kZWxlZ2F0ZTsKICAgICAgICBpZiAoZGVsZWdhdGUpIHsKICAgICAgICAgIHJlcXVlc3QgPSBkZWxlZ2F0ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7CiAgICAgICAgICBjYW5jZWwgPSBkZWxlZ2F0ZS5jYW5jZWxBbmltYXRpb25GcmFtZTsKICAgICAgICB9CiAgICAgICAgdmFyIGhhbmRsZTMgPSByZXF1ZXN0KGZ1bmN0aW9uKHRpbWVzdGFtcDIpIHsKICAgICAgICAgIGNhbmNlbCA9IHZvaWQgMDsKICAgICAgICAgIGNhbGxiYWNrKHRpbWVzdGFtcDIpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGNhbmNlbCA9PT0gbnVsbCB8fCBjYW5jZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhbmNlbChoYW5kbGUzKTsKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYXJncyA9IFtdOwogICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgICAgfQogICAgICAgIHZhciBkZWxlZ2F0ZSA9IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuZGVsZWdhdGU7CiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLnJlcXVlc3RBbmltYXRpb25GcmFtZSkgfHwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKS5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpOwogICAgICB9LAogICAgICBjYW5jZWxBbmltYXRpb25GcmFtZTogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGFyZ3MgPSBbXTsKICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldOwogICAgICAgIH0KICAgICAgICB2YXIgZGVsZWdhdGUgPSBhbmltYXRpb25GcmFtZVByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jYW5jZWxBbmltYXRpb25GcmFtZSkgfHwgY2FuY2VsQW5pbWF0aW9uRnJhbWUpLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGFyZ3MpKSk7CiAgICAgIH0sCiAgICAgIGRlbGVnYXRlOiB2b2lkIDAKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2RvbS9hbmltYXRpb25GcmFtZXMuanMKZnVuY3Rpb24gYW5pbWF0aW9uRnJhbWVzKHRpbWVzdGFtcFByb3ZpZGVyKSB7CiAgcmV0dXJuIHRpbWVzdGFtcFByb3ZpZGVyID8gYW5pbWF0aW9uRnJhbWVzRmFjdG9yeSh0aW1lc3RhbXBQcm92aWRlcikgOiBERUZBVUxUX0FOSU1BVElPTl9GUkFNRVM7Cn0KZnVuY3Rpb24gYW5pbWF0aW9uRnJhbWVzRmFjdG9yeSh0aW1lc3RhbXBQcm92aWRlcikgewogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICB2YXIgcHJvdmlkZXIgPSB0aW1lc3RhbXBQcm92aWRlciB8fCBwZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyOwogICAgdmFyIHN0YXJ0ID0gcHJvdmlkZXIubm93KCk7CiAgICB2YXIgaWQgPSAwOwogICAgdmFyIHJ1biA9IGZ1bmN0aW9uKCkgewogICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7CiAgICAgICAgaWQgPSBhbmltYXRpb25GcmFtZVByb3ZpZGVyLnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbih0aW1lc3RhbXAyKSB7CiAgICAgICAgICBpZCA9IDA7CiAgICAgICAgICB2YXIgbm93MiA9IHByb3ZpZGVyLm5vdygpOwogICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHsKICAgICAgICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXBQcm92aWRlciA/IG5vdzIgOiB0aW1lc3RhbXAyLAogICAgICAgICAgICBlbGFwc2VkOiBub3cyIC0gc3RhcnQKICAgICAgICAgIH0pOwogICAgICAgICAgcnVuKCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBydW4oKTsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgaWYgKGlkKSB7CiAgICAgICAgYW5pbWF0aW9uRnJhbWVQcm92aWRlci5jYW5jZWxBbmltYXRpb25GcmFtZShpZCk7CiAgICAgIH0KICAgIH07CiAgfSk7Cn0KdmFyIERFRkFVTFRfQU5JTUFUSU9OX0ZSQU1FUzsKdmFyIGluaXRfYW5pbWF0aW9uRnJhbWVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9kb20vYW5pbWF0aW9uRnJhbWVzLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lUHJvdmlkZXIoKTsKICAgIERFRkFVTFRfQU5JTUFUSU9OX0ZSQU1FUyA9IGFuaW1hdGlvbkZyYW1lc0ZhY3RvcnkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IuanMKdmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yOwp2YXIgaW5pdF9PYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IuanMiKCkgewogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBPYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBPYmplY3RVbnN1YnNjcmliZWRFcnJvckltcGwoKSB7CiAgICAgICAgX3N1cGVyKHRoaXMpOwogICAgICAgIHRoaXMubmFtZSA9ICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciI7CiAgICAgICAgdGhpcy5tZXNzYWdlID0gIm9iamVjdCB1bnN1YnNjcmliZWQiOwogICAgICB9OwogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TdWJqZWN0LmpzCnZhciBTdWJqZWN0LCBBbm9ueW1vdXNTdWJqZWN0Owp2YXIgaW5pdF9TdWJqZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU3ViamVjdC5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9PYnNlcnZhYmxlKCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9PYmplY3RVbnN1YnNjcmliZWRFcnJvcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICAgIGluaXRfZXJyb3JDb250ZXh0KCk7CiAgICBTdWJqZWN0ID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoU3ViamVjdDIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIFN1YmplY3QyKCkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7CiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7CiAgICAgICAgX3RoaXMub2JzZXJ2ZXJzID0gW107CiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7CiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTsKICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IG51bGw7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ob3BlcmF0b3IpIHsKICAgICAgICB2YXIgc3ViamVjdCA9IG5ldyBBbm9ueW1vdXNTdWJqZWN0KHRoaXMsIHRoaXMpOwogICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjsKICAgICAgICByZXR1cm4gc3ViamVjdDsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgZV8xLCBfYTE2OwogICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTsKICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7CiAgICAgICAgICAgIGlmICghX3RoaXMuY3VycmVudE9ic2VydmVycykgewogICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKF90aGlzLm9ic2VydmVycyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKF90aGlzLmN1cnJlbnRPYnNlcnZlcnMpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7CiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfYy52YWx1ZTsKICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUyKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgICAgICAgICAgZV8xID0geyBlcnJvcjogZV8xXzEgfTsKICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYTE2ID0gX2IucmV0dXJuKSkgX2ExNi5jYWxsKF9iKTsKICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9OwogICAgICBTdWJqZWN0Mi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlcnIpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbigpIHsKICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7CiAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkgewogICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7CiAgICAgICAgICAgIF90aGlzLnRocm93bkVycm9yID0gZXJyOwogICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzOwogICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkgewogICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmVycm9yKGVycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24oKSB7CiAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpOwogICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHsKICAgICAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTsKICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVyczsKICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHsKICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlOwogICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDsKICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1YmplY3QyLnByb3RvdHlwZSwgIm9ic2VydmVkIiwgewogICAgICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgX2ExNjsKICAgICAgICAgIHJldHVybiAoKF9hMTYgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2ExNiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNi5sZW5ndGgpID4gMDsKICAgICAgICB9LAogICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICB9KTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpOwogICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpOwogICAgICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7CiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpOwogICAgICB9OwogICAgICBTdWJqZWN0Mi5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgdmFyIF9hMTYgPSB0aGlzLCBoYXNFcnJvciA9IF9hMTYuaGFzRXJyb3IsIGlzU3RvcHBlZCA9IF9hMTYuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYTE2Lm9ic2VydmVyczsKICAgICAgICBpZiAoaGFzRXJyb3IgfHwgaXNTdG9wcGVkKSB7CiAgICAgICAgICByZXR1cm4gRU1QVFlfU1VCU0NSSVBUSU9OOwogICAgICAgIH0KICAgICAgICB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsOwogICAgICAgIG9ic2VydmVycy5wdXNoKHN1YnNjcmliZXIpOwogICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uKCkgewogICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7CiAgICAgICAgICBhcnJSZW1vdmUob2JzZXJ2ZXJzLCBzdWJzY3JpYmVyKTsKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgICAgIHZhciBfYTE2ID0gdGhpcywgaGFzRXJyb3IgPSBfYTE2Lmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hMTYudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hMTYuaXNTdG9wcGVkOwogICAgICAgIGlmIChoYXNFcnJvcikgewogICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7CiAgICAgICAgfSBlbHNlIGlmIChpc1N0b3BwZWQpIHsKICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgb2JzZXJ2YWJsZTIgPSBuZXcgT2JzZXJ2YWJsZSgpOwogICAgICAgIG9ic2VydmFibGUyLnNvdXJjZSA9IHRoaXM7CiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUyOwogICAgICB9OwogICAgICBTdWJqZWN0Mi5jcmVhdGUgPSBmdW5jdGlvbihkZXN0aW5hdGlvbiwgc291cmNlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpOwogICAgICB9OwogICAgICByZXR1cm4gU3ViamVjdDI7CiAgICB9KShPYnNlcnZhYmxlKTsKICAgIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0MiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQW5vbnltb3VzU3ViamVjdDIoZGVzdGluYXRpb24sIHNvdXJjZSkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjsKICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIEFub255bW91c1N1YmplY3QyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgdmFyIF9hMTYsIF9iOwogICAgICAgIChfYiA9IChfYTE2ID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2ExNiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNi5uZXh0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYTE2LCB2YWx1ZTIpOwogICAgICB9OwogICAgICBBbm9ueW1vdXNTdWJqZWN0Mi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlcnIpIHsKICAgICAgICB2YXIgX2ExNiwgX2I7CiAgICAgICAgKF9iID0gKF9hMTYgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYTE2ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE2LmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYTE2LCBlcnIpOwogICAgICB9OwogICAgICBBbm9ueW1vdXNTdWJqZWN0Mi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNiwgX2I7CiAgICAgICAgKF9iID0gKF9hMTYgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYTE2ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE2LmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYTE2KTsKICAgICAgfTsKICAgICAgQW5vbnltb3VzU3ViamVjdDIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdmFyIF9hMTYsIF9iOwogICAgICAgIHJldHVybiAoX2IgPSAoX2ExNiA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYTE2ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE2LnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OOwogICAgICB9OwogICAgICByZXR1cm4gQW5vbnltb3VzU3ViamVjdDI7CiAgICB9KShTdWJqZWN0KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL0JlaGF2aW9yU3ViamVjdC5qcwp2YXIgQmVoYXZpb3JTdWJqZWN0Owp2YXIgaW5pdF9CZWhhdmlvclN1YmplY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3QuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfU3ViamVjdCgpOwogICAgQmVoYXZpb3JTdWJqZWN0ID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQmVoYXZpb3JTdWJqZWN0MiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQmVoYXZpb3JTdWJqZWN0MihfdmFsdWUpIHsKICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOwogICAgICAgIF90aGlzLl92YWx1ZSA9IF92YWx1ZTsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJlaGF2aW9yU3ViamVjdDIucHJvdG90eXBlLCAidmFsdWUiLCB7CiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlKCk7CiAgICAgICAgfSwKICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgfSk7CiAgICAgIEJlaGF2aW9yU3ViamVjdDIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IF9zdXBlci5wcm90b3R5cGUuX3N1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpOwogICAgICAgICFzdWJzY3JpcHRpb24uY2xvc2VkICYmIHN1YnNjcmliZXIubmV4dCh0aGlzLl92YWx1ZSk7CiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjsKICAgICAgfTsKICAgICAgQmVoYXZpb3JTdWJqZWN0Mi5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNiA9IHRoaXMsIGhhc0Vycm9yID0gX2ExNi5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYTE2LnRocm93bkVycm9yLCBfdmFsdWUgPSBfYTE2Ll92YWx1ZTsKICAgICAgICBpZiAoaGFzRXJyb3IpIHsKICAgICAgICAgIHRocm93IHRocm93bkVycm9yOwogICAgICAgIH0KICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7CiAgICAgICAgcmV0dXJuIF92YWx1ZTsKICAgICAgfTsKICAgICAgQmVoYXZpb3JTdWJqZWN0Mi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgIF9zdXBlci5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsIHRoaXMuX3ZhbHVlID0gdmFsdWUyKTsKICAgICAgfTsKICAgICAgcmV0dXJuIEJlaGF2aW9yU3ViamVjdDI7CiAgICB9KShTdWJqZWN0KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXIuanMKdmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlcjsKdmFyIGluaXRfZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2RhdGVUaW1lc3RhbXBQcm92aWRlci5qcyIoKSB7CiAgICBkYXRlVGltZXN0YW1wUHJvdmlkZXIgPSB7CiAgICAgIG5vdzogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIChkYXRlVGltZXN0YW1wUHJvdmlkZXIuZGVsZWdhdGUgfHwgRGF0ZSkubm93KCk7CiAgICAgIH0sCiAgICAgIGRlbGVnYXRlOiB2b2lkIDAKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9SZXBsYXlTdWJqZWN0LmpzCnZhciBSZXBsYXlTdWJqZWN0Owp2YXIgaW5pdF9SZXBsYXlTdWJqZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvUmVwbGF5U3ViamVjdC5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9TdWJqZWN0KCk7CiAgICBpbml0X2RhdGVUaW1lc3RhbXBQcm92aWRlcigpOwogICAgUmVwbGF5U3ViamVjdCA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKFJlcGxheVN1YmplY3QyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBSZXBsYXlTdWJqZWN0MihfYnVmZmVyU2l6ZSwgX3dpbmRvd1RpbWUsIF90aW1lc3RhbXBQcm92aWRlcikgewogICAgICAgIGlmIChfYnVmZmVyU2l6ZSA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBfYnVmZmVyU2l6ZSA9IEluZmluaXR5OwogICAgICAgIH0KICAgICAgICBpZiAoX3dpbmRvd1RpbWUgPT09IHZvaWQgMCkgewogICAgICAgICAgX3dpbmRvd1RpbWUgPSBJbmZpbml0eTsKICAgICAgICB9CiAgICAgICAgaWYgKF90aW1lc3RhbXBQcm92aWRlciA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBfdGltZXN0YW1wUHJvdmlkZXIgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXI7CiAgICAgICAgfQogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuX2J1ZmZlclNpemUgPSBfYnVmZmVyU2l6ZTsKICAgICAgICBfdGhpcy5fd2luZG93VGltZSA9IF93aW5kb3dUaW1lOwogICAgICAgIF90aGlzLl90aW1lc3RhbXBQcm92aWRlciA9IF90aW1lc3RhbXBQcm92aWRlcjsKICAgICAgICBfdGhpcy5fYnVmZmVyID0gW107CiAgICAgICAgX3RoaXMuX2luZmluaXRlVGltZVdpbmRvdyA9IHRydWU7CiAgICAgICAgX3RoaXMuX2luZmluaXRlVGltZVdpbmRvdyA9IF93aW5kb3dUaW1lID09PSBJbmZpbml0eTsKICAgICAgICBfdGhpcy5fYnVmZmVyU2l6ZSA9IE1hdGgubWF4KDEsIF9idWZmZXJTaXplKTsKICAgICAgICBfdGhpcy5fd2luZG93VGltZSA9IE1hdGgubWF4KDEsIF93aW5kb3dUaW1lKTsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgUmVwbGF5U3ViamVjdDIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICB2YXIgX2ExNiA9IHRoaXMsIGlzU3RvcHBlZCA9IF9hMTYuaXNTdG9wcGVkLCBfYnVmZmVyID0gX2ExNi5fYnVmZmVyLCBfaW5maW5pdGVUaW1lV2luZG93ID0gX2ExNi5faW5maW5pdGVUaW1lV2luZG93LCBfdGltZXN0YW1wUHJvdmlkZXIgPSBfYTE2Ll90aW1lc3RhbXBQcm92aWRlciwgX3dpbmRvd1RpbWUgPSBfYTE2Ll93aW5kb3dUaW1lOwogICAgICAgIGlmICghaXNTdG9wcGVkKSB7CiAgICAgICAgICBfYnVmZmVyLnB1c2godmFsdWUyKTsKICAgICAgICAgICFfaW5maW5pdGVUaW1lV2luZG93ICYmIF9idWZmZXIucHVzaChfdGltZXN0YW1wUHJvdmlkZXIubm93KCkgKyBfd2luZG93VGltZSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX3RyaW1CdWZmZXIoKTsKICAgICAgICBfc3VwZXIucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLCB2YWx1ZTIpOwogICAgICB9OwogICAgICBSZXBsYXlTdWJqZWN0Mi5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7CiAgICAgICAgdGhpcy5fdHJpbUJ1ZmZlcigpOwogICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgICB2YXIgX2ExNiA9IHRoaXMsIF9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfYTE2Ll9pbmZpbml0ZVRpbWVXaW5kb3csIF9idWZmZXIgPSBfYTE2Ll9idWZmZXI7CiAgICAgICAgdmFyIGNvcHkgPSBfYnVmZmVyLnNsaWNlKCk7CiAgICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgY29weS5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpMTEgKz0gX2luZmluaXRlVGltZVdpbmRvdyA/IDEgOiAyKSB7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoY29weVtpMTFdKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTsKICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uOwogICAgICB9OwogICAgICBSZXBsYXlTdWJqZWN0Mi5wcm90b3R5cGUuX3RyaW1CdWZmZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNiA9IHRoaXMsIF9idWZmZXJTaXplID0gX2ExNi5fYnVmZmVyU2l6ZSwgX3RpbWVzdGFtcFByb3ZpZGVyID0gX2ExNi5fdGltZXN0YW1wUHJvdmlkZXIsIF9idWZmZXIgPSBfYTE2Ll9idWZmZXIsIF9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfYTE2Ll9pbmZpbml0ZVRpbWVXaW5kb3c7CiAgICAgICAgdmFyIGFkanVzdGVkQnVmZmVyU2l6ZSA9IChfaW5maW5pdGVUaW1lV2luZG93ID8gMSA6IDIpICogX2J1ZmZlclNpemU7CiAgICAgICAgX2J1ZmZlclNpemUgPCBJbmZpbml0eSAmJiBhZGp1c3RlZEJ1ZmZlclNpemUgPCBfYnVmZmVyLmxlbmd0aCAmJiBfYnVmZmVyLnNwbGljZSgwLCBfYnVmZmVyLmxlbmd0aCAtIGFkanVzdGVkQnVmZmVyU2l6ZSk7CiAgICAgICAgaWYgKCFfaW5maW5pdGVUaW1lV2luZG93KSB7CiAgICAgICAgICB2YXIgbm93MiA9IF90aW1lc3RhbXBQcm92aWRlci5ub3coKTsKICAgICAgICAgIHZhciBsYXN0MyA9IDA7CiAgICAgICAgICBmb3IgKHZhciBpMTEgPSAxOyBpMTEgPCBfYnVmZmVyLmxlbmd0aCAmJiBfYnVmZmVyW2kxMV0gPD0gbm93MjsgaTExICs9IDIpIHsKICAgICAgICAgICAgbGFzdDMgPSBpMTE7CiAgICAgICAgICB9CiAgICAgICAgICBsYXN0MyAmJiBfYnVmZmVyLnNwbGljZSgwLCBsYXN0MyArIDEpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIFJlcGxheVN1YmplY3QyOwogICAgfSkoU3ViamVjdCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9Bc3luY1N1YmplY3QuanMKdmFyIEFzeW5jU3ViamVjdDsKdmFyIGluaXRfQXN5bmNTdWJqZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvQXN5bmNTdWJqZWN0LmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X1N1YmplY3QoKTsKICAgIEFzeW5jU3ViamVjdCA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKEFzeW5jU3ViamVjdDIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIEFzeW5jU3ViamVjdDIoKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuX3ZhbHVlID0gbnVsbDsKICAgICAgICBfdGhpcy5faGFzVmFsdWUgPSBmYWxzZTsKICAgICAgICBfdGhpcy5faXNDb21wbGV0ZSA9IGZhbHNlOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBBc3luY1N1YmplY3QyLnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgICAgICB2YXIgX2ExNiA9IHRoaXMsIGhhc0Vycm9yID0gX2ExNi5oYXNFcnJvciwgX2hhc1ZhbHVlID0gX2ExNi5faGFzVmFsdWUsIF92YWx1ZSA9IF9hMTYuX3ZhbHVlLCB0aHJvd25FcnJvciA9IF9hMTYudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hMTYuaXNTdG9wcGVkLCBfaXNDb21wbGV0ZSA9IF9hMTYuX2lzQ29tcGxldGU7CiAgICAgICAgaWYgKGhhc0Vycm9yKSB7CiAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRocm93bkVycm9yKTsKICAgICAgICB9IGVsc2UgaWYgKGlzU3RvcHBlZCB8fCBfaXNDb21wbGV0ZSkgewogICAgICAgICAgX2hhc1ZhbHVlICYmIHN1YnNjcmliZXIubmV4dChfdmFsdWUpOwogICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQXN5bmNTdWJqZWN0Mi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHsKICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUyOwogICAgICAgICAgdGhpcy5faGFzVmFsdWUgPSB0cnVlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQXN5bmNTdWJqZWN0Mi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNiA9IHRoaXMsIF9oYXNWYWx1ZSA9IF9hMTYuX2hhc1ZhbHVlLCBfdmFsdWUgPSBfYTE2Ll92YWx1ZSwgX2lzQ29tcGxldGUgPSBfYTE2Ll9pc0NvbXBsZXRlOwogICAgICAgIGlmICghX2lzQ29tcGxldGUpIHsKICAgICAgICAgIHRoaXMuX2lzQ29tcGxldGUgPSB0cnVlOwogICAgICAgICAgX2hhc1ZhbHVlICYmIF9zdXBlci5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsIF92YWx1ZSk7CiAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLmNvbXBsZXRlLmNhbGwodGhpcyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gQXN5bmNTdWJqZWN0MjsKICAgIH0pKFN1YmplY3QpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FjdGlvbi5qcwp2YXIgQWN0aW9uOwp2YXIgaW5pdF9BY3Rpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQWN0aW9uLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgQWN0aW9uID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQWN0aW9uMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQWN0aW9uMihzY2hlZHVsZXIsIHdvcmspIHsKICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpczsKICAgICAgfQogICAgICBBY3Rpb24yLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHN0YXRlMTQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIHJldHVybiBBY3Rpb24yOwogICAgfSkoU3Vic2NyaXB0aW9uKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9pbnRlcnZhbFByb3ZpZGVyLmpzCnZhciBpbnRlcnZhbFByb3ZpZGVyOwp2YXIgaW5pdF9pbnRlcnZhbFByb3ZpZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2ludGVydmFsUHJvdmlkZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGludGVydmFsUHJvdmlkZXIgPSB7CiAgICAgIHNldEludGVydmFsOiBmdW5jdGlvbihoYW5kbGVyMiwgdGltZW91dDIpIHsKICAgICAgICB2YXIgYXJncyA9IFtdOwogICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldOwogICAgICAgIH0KICAgICAgICB2YXIgZGVsZWdhdGUgPSBpbnRlcnZhbFByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIGlmIChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuc2V0SW50ZXJ2YWwpIHsKICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5zZXRJbnRlcnZhbC5hcHBseShkZWxlZ2F0ZSwgX19zcHJlYWRBcnJheShbaGFuZGxlcjIsIHRpbWVvdXQyXSwgX19yZWFkKGFyZ3MpKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIyLCB0aW1lb3V0Ml0sIF9fcmVhZChhcmdzKSkpOwogICAgICB9LAogICAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbihoYW5kbGUzKSB7CiAgICAgICAgdmFyIGRlbGVnYXRlID0gaW50ZXJ2YWxQcm92aWRlci5kZWxlZ2F0ZTsKICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJJbnRlcnZhbCkgfHwgY2xlYXJJbnRlcnZhbCkoaGFuZGxlMyk7CiAgICAgIH0sCiAgICAgIGRlbGVnYXRlOiB2b2lkIDAKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXN5bmNBY3Rpb24uanMKdmFyIEFzeW5jQWN0aW9uOwp2YXIgaW5pdF9Bc3luY0FjdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9Bc3luY0FjdGlvbi5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9BY3Rpb24oKTsKICAgIGluaXRfaW50ZXJ2YWxQcm92aWRlcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICAgIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24yLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBc3luY0FjdGlvbjIoc2NoZWR1bGVyLCB3b3JrKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzOwogICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKICAgICAgICBfdGhpcy53b3JrID0gd29yazsKICAgICAgICBfdGhpcy5wZW5kaW5nID0gZmFsc2U7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIEFzeW5jQWN0aW9uMi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihzdGF0ZTE0LCBkZWxheTIpIHsKICAgICAgICB2YXIgX2ExNjsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmNsb3NlZCkgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTE0OwogICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7CiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyOwogICAgICAgIGlmIChpZCAhPSBudWxsKSB7CiAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheTIpOwogICAgICAgIH0KICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlOwogICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTI7CiAgICAgICAgdGhpcy5pZCA9IChfYTE2ID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2ExNiAhPT0gdm9pZCAwID8gX2ExNiA6IHRoaXMucmVxdWVzdEFzeW5jSWQoc2NoZWR1bGVyLCB0aGlzLmlkLCBkZWxheTIpOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9OwogICAgICBBc3luY0FjdGlvbjIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24oc2NoZWR1bGVyLCBfaWQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkyKTsKICAgICAgfTsKICAgICAgQXN5bmNBY3Rpb24yLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKF9zY2hlZHVsZXIsIGlkLCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChkZWxheTIgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheTIgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkgewogICAgICAgICAgcmV0dXJuIGlkOwogICAgICAgIH0KICAgICAgICBpZiAoaWQgIT0gbnVsbCkgewogICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgfTsKICAgICAgQXN5bmNBY3Rpb24yLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oc3RhdGUxNCwgZGVsYXkyKSB7CiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7CiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uIik7CiAgICAgICAgfQogICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlOwogICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUxNCwgZGVsYXkyKTsKICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7CiAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBc3luY0FjdGlvbjIucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24oc3RhdGUxNCwgX2RlbGF5KSB7CiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTsKICAgICAgICB2YXIgZXJyb3JWYWx1ZTsKICAgICAgICB0cnkgewogICAgICAgICAgdGhpcy53b3JrKHN0YXRlMTQpOwogICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgZXJyb3JlZCA9IHRydWU7CiAgICAgICAgICBlcnJvclZhbHVlID0gZTExID8gZTExIDogbmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIik7CiAgICAgICAgfQogICAgICAgIGlmIChlcnJvcmVkKSB7CiAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEFzeW5jQWN0aW9uMi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7CiAgICAgICAgICB2YXIgX2ExNiA9IHRoaXMsIGlkID0gX2ExNi5pZCwgc2NoZWR1bGVyID0gX2ExNi5zY2hlZHVsZXI7CiAgICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zOwogICAgICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDsKICAgICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlOwogICAgICAgICAgYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpOwogICAgICAgICAgaWYgKGlkICE9IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDsKICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBBc3luY0FjdGlvbjI7CiAgICB9KShBY3Rpb24pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9JbW1lZGlhdGUuanMKZnVuY3Rpb24gZmluZEFuZENsZWFySGFuZGxlKGhhbmRsZTMpIHsKICBpZiAoaGFuZGxlMyBpbiBhY3RpdmVIYW5kbGVzKSB7CiAgICBkZWxldGUgYWN0aXZlSGFuZGxlc1toYW5kbGUzXTsKICAgIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KdmFyIG5leHRIYW5kbGUsIHJlc29sdmVkLCBhY3RpdmVIYW5kbGVzLCBJbW1lZGlhdGUsIFRlc3RUb29sczsKdmFyIGluaXRfSW1tZWRpYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9JbW1lZGlhdGUuanMiKCkgewogICAgbmV4dEhhbmRsZSA9IDE7CiAgICBhY3RpdmVIYW5kbGVzID0ge307CiAgICBJbW1lZGlhdGUgPSB7CiAgICAgIHNldEltbWVkaWF0ZTogZnVuY3Rpb24oY2IpIHsKICAgICAgICB2YXIgaGFuZGxlMyA9IG5leHRIYW5kbGUrKzsKICAgICAgICBhY3RpdmVIYW5kbGVzW2hhbmRsZTNdID0gdHJ1ZTsKICAgICAgICBpZiAoIXJlc29sdmVkKSB7CiAgICAgICAgICByZXNvbHZlZCA9IFByb21pc2UucmVzb2x2ZSgpOwogICAgICAgIH0KICAgICAgICByZXNvbHZlZC50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGZpbmRBbmRDbGVhckhhbmRsZShoYW5kbGUzKSAmJiBjYigpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBoYW5kbGUzOwogICAgICB9LAogICAgICBjbGVhckltbWVkaWF0ZTogZnVuY3Rpb24oaGFuZGxlMykgewogICAgICAgIGZpbmRBbmRDbGVhckhhbmRsZShoYW5kbGUzKTsKICAgICAgfQogICAgfTsKICAgIFRlc3RUb29scyA9IHsKICAgICAgcGVuZGluZzogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFjdGl2ZUhhbmRsZXMpLmxlbmd0aDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9pbW1lZGlhdGVQcm92aWRlci5qcwp2YXIgc2V0SW1tZWRpYXRlLCBjbGVhckltbWVkaWF0ZSwgaW1tZWRpYXRlUHJvdmlkZXI7CnZhciBpbml0X2ltbWVkaWF0ZVByb3ZpZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2ltbWVkaWF0ZVByb3ZpZGVyLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0ltbWVkaWF0ZSgpOwogICAgc2V0SW1tZWRpYXRlID0gSW1tZWRpYXRlLnNldEltbWVkaWF0ZSwgY2xlYXJJbW1lZGlhdGUgPSBJbW1lZGlhdGUuY2xlYXJJbW1lZGlhdGU7CiAgICBpbW1lZGlhdGVQcm92aWRlciA9IHsKICAgICAgc2V0SW1tZWRpYXRlOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYXJncyA9IFtdOwogICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgICAgfQogICAgICAgIHZhciBkZWxlZ2F0ZSA9IGltbWVkaWF0ZVByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRJbW1lZGlhdGUpIHx8IHNldEltbWVkaWF0ZSkuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpKTsKICAgICAgfSwKICAgICAgY2xlYXJJbW1lZGlhdGU6IGZ1bmN0aW9uKGhhbmRsZTMpIHsKICAgICAgICB2YXIgZGVsZWdhdGUgPSBpbW1lZGlhdGVQcm92aWRlci5kZWxlZ2F0ZTsKICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJJbW1lZGlhdGUpIHx8IGNsZWFySW1tZWRpYXRlKShoYW5kbGUzKTsKICAgICAgfSwKICAgICAgZGVsZWdhdGU6IHZvaWQgMAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9Bc2FwQWN0aW9uLmpzCnZhciBBc2FwQWN0aW9uOwp2YXIgaW5pdF9Bc2FwQWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzYXBBY3Rpb24uanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfQXN5bmNBY3Rpb24oKTsKICAgIGluaXRfaW1tZWRpYXRlUHJvdmlkZXIoKTsKICAgIEFzYXBBY3Rpb24gPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhBc2FwQWN0aW9uMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQXNhcEFjdGlvbjIoc2NoZWR1bGVyLCB3b3JrKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzOwogICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKICAgICAgICBfdGhpcy53b3JrID0gd29yazsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgQXNhcEFjdGlvbjIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24oc2NoZWR1bGVyLCBpZCwgZGVsYXkyKSB7CiAgICAgICAgaWYgKGRlbGF5MiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBkZWxheTIgPSAwOwogICAgICAgIH0KICAgICAgICBpZiAoZGVsYXkyICE9PSBudWxsICYmIGRlbGF5MiA+IDApIHsKICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcywgc2NoZWR1bGVyLCBpZCwgZGVsYXkyKTsKICAgICAgICB9CiAgICAgICAgc2NoZWR1bGVyLmFjdGlvbnMucHVzaCh0aGlzKTsKICAgICAgICByZXR1cm4gc2NoZWR1bGVyLl9zY2hlZHVsZWQgfHwgKHNjaGVkdWxlci5fc2NoZWR1bGVkID0gaW1tZWRpYXRlUHJvdmlkZXIuc2V0SW1tZWRpYXRlKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdm9pZCAwKSkpOwogICAgICB9OwogICAgICBBc2FwQWN0aW9uMi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihzY2hlZHVsZXIsIGlkLCBkZWxheTIpIHsKICAgICAgICB2YXIgX2ExNjsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChkZWxheTIgIT0gbnVsbCA/IGRlbGF5MiA+IDAgOiB0aGlzLmRlbGF5ID4gMCkgewogICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheTIpOwogICAgICAgIH0KICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zOwogICAgICAgIGlmIChpZCAhPSBudWxsICYmICgoX2ExNiA9IGFjdGlvbnNbYWN0aW9ucy5sZW5ndGggLSAxXSkgPT09IG51bGwgfHwgX2ExNiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNi5pZCkgIT09IGlkKSB7CiAgICAgICAgICBpbW1lZGlhdGVQcm92aWRlci5jbGVhckltbWVkaWF0ZShpZCk7CiAgICAgICAgICBpZiAoc2NoZWR1bGVyLl9zY2hlZHVsZWQgPT09IGlkKSB7CiAgICAgICAgICAgIHNjaGVkdWxlci5fc2NoZWR1bGVkID0gdm9pZCAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9OwogICAgICByZXR1cm4gQXNhcEFjdGlvbjI7CiAgICB9KShBc3luY0FjdGlvbik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TY2hlZHVsZXIuanMKdmFyIFNjaGVkdWxlcjsKdmFyIGluaXRfU2NoZWR1bGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU2NoZWR1bGVyLmpzIigpIHsKICAgIGluaXRfZGF0ZVRpbWVzdGFtcFByb3ZpZGVyKCk7CiAgICBTY2hlZHVsZXIgPSAoZnVuY3Rpb24oKSB7CiAgICAgIGZ1bmN0aW9uIFNjaGVkdWxlcjIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93MikgewogICAgICAgIGlmIChub3cyID09PSB2b2lkIDApIHsKICAgICAgICAgIG5vdzIgPSBTY2hlZHVsZXIyLm5vdzsKICAgICAgICB9CiAgICAgICAgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gc2NoZWR1bGVyQWN0aW9uQ3RvcjsKICAgICAgICB0aGlzLm5vdyA9IG5vdzI7CiAgICAgIH0KICAgICAgU2NoZWR1bGVyMi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbih3b3JrLCBkZWxheTIsIHN0YXRlMTQpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlMTQsIGRlbGF5Mik7CiAgICAgIH07CiAgICAgIFNjaGVkdWxlcjIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdzsKICAgICAgcmV0dXJuIFNjaGVkdWxlcjI7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzeW5jU2NoZWR1bGVyLmpzCnZhciBBc3luY1NjaGVkdWxlcjsKdmFyIGluaXRfQXN5bmNTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXN5bmNTY2hlZHVsZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfU2NoZWR1bGVyKCk7CiAgICBBc3luY1NjaGVkdWxlciA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKEFzeW5jU2NoZWR1bGVyMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIyKFNjaGVkdWxlckFjdGlvbiwgbm93MikgewogICAgICAgIGlmIChub3cyID09PSB2b2lkIDApIHsKICAgICAgICAgIG5vdzIgPSBTY2hlZHVsZXIubm93OwogICAgICAgIH0KICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdzIpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdOwogICAgICAgIF90aGlzLl9hY3RpdmUgPSBmYWxzZTsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgQXN5bmNTY2hlZHVsZXIyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKGFjdGlvbikgewogICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zOwogICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHsKICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgZXJyb3I7CiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTsKICAgICAgICBkbyB7CiAgICAgICAgICBpZiAoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKTsKICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTsKICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgIHdoaWxlIChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpIHsKICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjI7CiAgICB9KShTY2hlZHVsZXIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzYXBTY2hlZHVsZXIuanMKdmFyIEFzYXBTY2hlZHVsZXI7CnZhciBpbml0X0FzYXBTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXNhcFNjaGVkdWxlci5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9Bc3luY1NjaGVkdWxlcigpOwogICAgQXNhcFNjaGVkdWxlciA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKEFzYXBTY2hlZHVsZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBc2FwU2NoZWR1bGVyMigpIHsKICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CiAgICAgIH0KICAgICAgQXNhcFNjaGVkdWxlcjIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24oYWN0aW9uKSB7CiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTsKICAgICAgICB2YXIgZmx1c2hJZCA9IHRoaXMuX3NjaGVkdWxlZDsKICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB2b2lkIDA7CiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7CiAgICAgICAgdmFyIGVycm9yOwogICAgICAgIGFjdGlvbiA9IGFjdGlvbiB8fCBhY3Rpb25zLnNoaWZ0KCk7CiAgICAgICAgZG8gewogICAgICAgICAgaWYgKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zWzBdKSAmJiBhY3Rpb24uaWQgPT09IGZsdXNoSWQgJiYgYWN0aW9ucy5zaGlmdCgpKTsKICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTsKICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmlkID09PSBmbHVzaElkICYmIGFjdGlvbnMuc2hpZnQoKSkgewogICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgIH0KICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIEFzYXBTY2hlZHVsZXIyOwogICAgfSkoQXN5bmNTY2hlZHVsZXIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2FzYXAuanMKdmFyIGFzYXBTY2hlZHVsZXIsIGFzYXA7CnZhciBpbml0X2FzYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYXNhcC5qcyIoKSB7CiAgICBpbml0X0FzYXBBY3Rpb24oKTsKICAgIGluaXRfQXNhcFNjaGVkdWxlcigpOwogICAgYXNhcFNjaGVkdWxlciA9IG5ldyBBc2FwU2NoZWR1bGVyKEFzYXBBY3Rpb24pOwogICAgYXNhcCA9IGFzYXBTY2hlZHVsZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYXN5bmMuanMKdmFyIGFzeW5jU2NoZWR1bGVyLCBhc3luYzsKdmFyIGluaXRfYXN5bmMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYXN5bmMuanMiKCkgewogICAgaW5pdF9Bc3luY0FjdGlvbigpOwogICAgaW5pdF9Bc3luY1NjaGVkdWxlcigpOwogICAgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pOwogICAgYXN5bmMgPSBhc3luY1NjaGVkdWxlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9RdWV1ZUFjdGlvbi5qcwp2YXIgUXVldWVBY3Rpb247CnZhciBpbml0X1F1ZXVlQWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlQWN0aW9uLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0FzeW5jQWN0aW9uKCk7CiAgICBRdWV1ZUFjdGlvbiA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKFF1ZXVlQWN0aW9uMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gUXVldWVBY3Rpb24yKHNjaGVkdWxlciwgd29yaykgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpczsKICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7CiAgICAgICAgX3RoaXMud29yayA9IHdvcms7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIFF1ZXVlQWN0aW9uMi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihzdGF0ZTE0LCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChkZWxheTIgPiAwKSB7CiAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsIHN0YXRlMTQsIGRlbGF5Mik7CiAgICAgICAgfQogICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTI7CiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlMTQ7CiAgICAgICAgdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIFF1ZXVlQWN0aW9uMi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHN0YXRlMTQsIGRlbGF5MikgewogICAgICAgIHJldHVybiBkZWxheTIgPiAwIHx8IHRoaXMuY2xvc2VkID8gX3N1cGVyLnByb3RvdHlwZS5leGVjdXRlLmNhbGwodGhpcywgc3RhdGUxNCwgZGVsYXkyKSA6IHRoaXMuX2V4ZWN1dGUoc3RhdGUxNCwgZGVsYXkyKTsKICAgICAgfTsKICAgICAgUXVldWVBY3Rpb24yLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgaWQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKGRlbGF5MiAhPSBudWxsICYmIGRlbGF5MiA+IDAgfHwgZGVsYXkyID09IG51bGwgJiYgdGhpcy5kZWxheSA+IDApIHsKICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcywgc2NoZWR1bGVyLCBpZCwgZGVsYXkyKTsKICAgICAgICB9CiAgICAgICAgc2NoZWR1bGVyLmZsdXNoKHRoaXMpOwogICAgICAgIHJldHVybiAwOwogICAgICB9OwogICAgICByZXR1cm4gUXVldWVBY3Rpb24yOwogICAgfSkoQXN5bmNBY3Rpb24pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlU2NoZWR1bGVyLmpzCnZhciBRdWV1ZVNjaGVkdWxlcjsKdmFyIGluaXRfUXVldWVTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvUXVldWVTY2hlZHVsZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfQXN5bmNTY2hlZHVsZXIoKTsKICAgIFF1ZXVlU2NoZWR1bGVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoUXVldWVTY2hlZHVsZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBRdWV1ZVNjaGVkdWxlcjIoKSB7CiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOwogICAgICB9CiAgICAgIHJldHVybiBRdWV1ZVNjaGVkdWxlcjI7CiAgICB9KShBc3luY1NjaGVkdWxlcik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvcXVldWUuanMKdmFyIHF1ZXVlU2NoZWR1bGVyLCBxdWV1ZTsKdmFyIGluaXRfcXVldWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvcXVldWUuanMiKCkgewogICAgaW5pdF9RdWV1ZUFjdGlvbigpOwogICAgaW5pdF9RdWV1ZVNjaGVkdWxlcigpOwogICAgcXVldWVTY2hlZHVsZXIgPSBuZXcgUXVldWVTY2hlZHVsZXIoUXVldWVBY3Rpb24pOwogICAgcXVldWUgPSBxdWV1ZVNjaGVkdWxlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9BbmltYXRpb25GcmFtZUFjdGlvbi5qcwp2YXIgQW5pbWF0aW9uRnJhbWVBY3Rpb247CnZhciBpbml0X0FuaW1hdGlvbkZyYW1lQWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FuaW1hdGlvbkZyYW1lQWN0aW9uLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0FzeW5jQWN0aW9uKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lUHJvdmlkZXIoKTsKICAgIEFuaW1hdGlvbkZyYW1lQWN0aW9uID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQW5pbWF0aW9uRnJhbWVBY3Rpb24yLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBbmltYXRpb25GcmFtZUFjdGlvbjIoc2NoZWR1bGVyLCB3b3JrKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzOwogICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKICAgICAgICBfdGhpcy53b3JrID0gd29yazsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgQW5pbWF0aW9uRnJhbWVBY3Rpb24yLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgaWQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKGRlbGF5MiAhPT0gbnVsbCAmJiBkZWxheTIgPiAwKSB7CiAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5Mik7CiAgICAgICAgfQogICAgICAgIHNjaGVkdWxlci5hY3Rpb25zLnB1c2godGhpcyk7CiAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5fc2NoZWR1bGVkIHx8IChzY2hlZHVsZXIuX3NjaGVkdWxlZCA9IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5mbHVzaCh2b2lkIDApOwogICAgICAgIH0pKTsKICAgICAgfTsKICAgICAgQW5pbWF0aW9uRnJhbWVBY3Rpb24yLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgaWQsIGRlbGF5MikgewogICAgICAgIHZhciBfYTE2OwogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKGRlbGF5MiAhPSBudWxsID8gZGVsYXkyID4gMCA6IHRoaXMuZGVsYXkgPiAwKSB7CiAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5Mik7CiAgICAgICAgfQogICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7CiAgICAgICAgaWYgKGlkICE9IG51bGwgJiYgaWQgPT09IHNjaGVkdWxlci5fc2NoZWR1bGVkICYmICgoX2ExNiA9IGFjdGlvbnNbYWN0aW9ucy5sZW5ndGggLSAxXSkgPT09IG51bGwgfHwgX2ExNiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNi5pZCkgIT09IGlkKSB7CiAgICAgICAgICBhbmltYXRpb25GcmFtZVByb3ZpZGVyLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTsKICAgICAgICAgIHNjaGVkdWxlci5fc2NoZWR1bGVkID0gdm9pZCAwOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9OwogICAgICByZXR1cm4gQW5pbWF0aW9uRnJhbWVBY3Rpb24yOwogICAgfSkoQXN5bmNBY3Rpb24pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLmpzCnZhciBBbmltYXRpb25GcmFtZVNjaGVkdWxlcjsKdmFyIGluaXRfQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfQXN5bmNTY2hlZHVsZXIoKTsKICAgIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBbmltYXRpb25GcmFtZVNjaGVkdWxlcjIoKSB7CiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOwogICAgICB9CiAgICAgIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyMi5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihhY3Rpb24pIHsKICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlOwogICAgICAgIHZhciBmbHVzaElkOwogICAgICAgIGlmIChhY3Rpb24pIHsKICAgICAgICAgIGZsdXNoSWQgPSBhY3Rpb24uaWQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZsdXNoSWQgPSB0aGlzLl9zY2hlZHVsZWQ7CiAgICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB2b2lkIDA7CiAgICAgICAgfQogICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zOwogICAgICAgIHZhciBlcnJvcjsKICAgICAgICBhY3Rpb24gPSBhY3Rpb24gfHwgYWN0aW9ucy5zaGlmdCgpOwogICAgICAgIGRvIHsKICAgICAgICAgIGlmIChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmlkID09PSBmbHVzaElkICYmIGFjdGlvbnMuc2hpZnQoKSk7CiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7CiAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpIHsKICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBBbmltYXRpb25GcmFtZVNjaGVkdWxlcjI7CiAgICB9KShBc3luY1NjaGVkdWxlcik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYW5pbWF0aW9uRnJhbWUuanMKdmFyIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCBhbmltYXRpb25GcmFtZTsKdmFyIGluaXRfYW5pbWF0aW9uRnJhbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYW5pbWF0aW9uRnJhbWUuanMiKCkgewogICAgaW5pdF9BbmltYXRpb25GcmFtZUFjdGlvbigpOwogICAgaW5pdF9BbmltYXRpb25GcmFtZVNjaGVkdWxlcigpOwogICAgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBuZXcgQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIoQW5pbWF0aW9uRnJhbWVBY3Rpb24pOwogICAgYW5pbWF0aW9uRnJhbWUgPSBhbmltYXRpb25GcmFtZVNjaGVkdWxlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9WaXJ0dWFsVGltZVNjaGVkdWxlci5qcwp2YXIgVmlydHVhbFRpbWVTY2hlZHVsZXIsIFZpcnR1YWxBY3Rpb247CnZhciBpbml0X1ZpcnR1YWxUaW1lU2NoZWR1bGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL1ZpcnR1YWxUaW1lU2NoZWR1bGVyLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0FzeW5jQWN0aW9uKCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9Bc3luY1NjaGVkdWxlcigpOwogICAgVmlydHVhbFRpbWVTY2hlZHVsZXIgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhWaXJ0dWFsVGltZVNjaGVkdWxlcjIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIFZpcnR1YWxUaW1lU2NoZWR1bGVyMihzY2hlZHVsZXJBY3Rpb25DdG9yLCBtYXhGcmFtZXMpIHsKICAgICAgICBpZiAoc2NoZWR1bGVyQWN0aW9uQ3RvciA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBzY2hlZHVsZXJBY3Rpb25DdG9yID0gVmlydHVhbEFjdGlvbjsKICAgICAgICB9CiAgICAgICAgaWYgKG1heEZyYW1lcyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBtYXhGcmFtZXMgPSBJbmZpbml0eTsKICAgICAgICB9CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyQWN0aW9uQ3RvciwgZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMuZnJhbWU7CiAgICAgICAgfSkgfHwgdGhpczsKICAgICAgICBfdGhpcy5tYXhGcmFtZXMgPSBtYXhGcmFtZXM7CiAgICAgICAgX3RoaXMuZnJhbWUgPSAwOwogICAgICAgIF90aGlzLmluZGV4ID0gLTE7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIFZpcnR1YWxUaW1lU2NoZWR1bGVyMi5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNiA9IHRoaXMsIGFjdGlvbnMgPSBfYTE2LmFjdGlvbnMsIG1heEZyYW1lcyA9IF9hMTYubWF4RnJhbWVzOwogICAgICAgIHZhciBlcnJvcjsKICAgICAgICB2YXIgYWN0aW9uOwogICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmRlbGF5IDw9IG1heEZyYW1lcykgewogICAgICAgICAgYWN0aW9ucy5zaGlmdCgpOwogICAgICAgICAgdGhpcy5mcmFtZSA9IGFjdGlvbi5kZWxheTsKICAgICAgICAgIGlmIChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICB3aGlsZSAoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSB7CiAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfQogICAgICB9OwogICAgICBWaXJ0dWFsVGltZVNjaGVkdWxlcjIuZnJhbWVUaW1lRmFjdG9yID0gMTA7CiAgICAgIHJldHVybiBWaXJ0dWFsVGltZVNjaGVkdWxlcjI7CiAgICB9KShBc3luY1NjaGVkdWxlcik7CiAgICBWaXJ0dWFsQWN0aW9uID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoVmlydHVhbEFjdGlvbjIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIFZpcnR1YWxBY3Rpb24yKHNjaGVkdWxlciwgd29yaywgaW5kZXgyKSB7CiAgICAgICAgaWYgKGluZGV4MiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBpbmRleDIgPSBzY2hlZHVsZXIuaW5kZXggKz0gMTsKICAgICAgICB9CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzOwogICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKICAgICAgICBfdGhpcy53b3JrID0gd29yazsKICAgICAgICBfdGhpcy5pbmRleCA9IGluZGV4MjsKICAgICAgICBfdGhpcy5hY3RpdmUgPSB0cnVlOwogICAgICAgIF90aGlzLmluZGV4ID0gc2NoZWR1bGVyLmluZGV4ID0gaW5kZXgyOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBWaXJ0dWFsQWN0aW9uMi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihzdGF0ZTE0LCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUoZGVsYXkyKSkgewogICAgICAgICAgaWYgKCF0aGlzLmlkKSB7CiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcywgc3RhdGUxNCwgZGVsYXkyKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7CiAgICAgICAgICB2YXIgYWN0aW9uID0gbmV3IFZpcnR1YWxBY3Rpb24yKHRoaXMuc2NoZWR1bGVyLCB0aGlzLndvcmspOwogICAgICAgICAgdGhpcy5hZGQoYWN0aW9uKTsKICAgICAgICAgIHJldHVybiBhY3Rpb24uc2NoZWR1bGUoc3RhdGUxNCwgZGVsYXkyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIFN1YnNjcmlwdGlvbi5FTVBUWTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFZpcnR1YWxBY3Rpb24yLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgaWQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgdGhpcy5kZWxheSA9IHNjaGVkdWxlci5mcmFtZSArIGRlbGF5MjsKICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zOwogICAgICAgIGFjdGlvbnMucHVzaCh0aGlzKTsKICAgICAgICBhY3Rpb25zLnNvcnQoVmlydHVhbEFjdGlvbjIuc29ydEFjdGlvbnMpOwogICAgICAgIHJldHVybiAxOwogICAgICB9OwogICAgICBWaXJ0dWFsQWN0aW9uMi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihzY2hlZHVsZXIsIGlkLCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIH07CiAgICAgIFZpcnR1YWxBY3Rpb24yLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKHN0YXRlMTQsIGRlbGF5MikgewogICAgICAgIGlmICh0aGlzLmFjdGl2ZSA9PT0gdHJ1ZSkgewogICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX2V4ZWN1dGUuY2FsbCh0aGlzLCBzdGF0ZTE0LCBkZWxheTIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgVmlydHVhbEFjdGlvbjIuc29ydEFjdGlvbnMgPSBmdW5jdGlvbihhNSwgYjUpIHsKICAgICAgICBpZiAoYTUuZGVsYXkgPT09IGI1LmRlbGF5KSB7CiAgICAgICAgICBpZiAoYTUuaW5kZXggPT09IGI1LmluZGV4KSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgfSBlbHNlIGlmIChhNS5pbmRleCA+IGI1LmluZGV4KSB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoYTUuZGVsYXkgPiBiNS5kZWxheSkgewogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBWaXJ0dWFsQWN0aW9uMjsKICAgIH0pKEFzeW5jQWN0aW9uKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZW1wdHkuanMKZnVuY3Rpb24gZW1wdHkoc2NoZWR1bGVyKSB7CiAgcmV0dXJuIHNjaGVkdWxlciA/IGVtcHR5U2NoZWR1bGVkKHNjaGVkdWxlcikgOiBFTVBUWTsKfQpmdW5jdGlvbiBlbXB0eVNjaGVkdWxlZChzY2hlZHVsZXIpIHsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgIH0pOwogIH0pOwp9CnZhciBFTVBUWTsKdmFyIGluaXRfZW1wdHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2VtcHR5LmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgRU1QVFkgPSBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgIHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNTY2hlZHVsZXIuanMKZnVuY3Rpb24gaXNTY2hlZHVsZXIodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMiAmJiBpc0Z1bmN0aW9uKHZhbHVlMi5zY2hlZHVsZSk7Cn0KdmFyIGluaXRfaXNTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzU2NoZWR1bGVyLmpzIigpIHsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9hcmdzLmpzCmZ1bmN0aW9uIGxhc3QoYXJyKSB7CiAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07Cn0KZnVuY3Rpb24gcG9wUmVzdWx0U2VsZWN0b3IoYXJncykgewogIHJldHVybiBpc0Z1bmN0aW9uKGxhc3QoYXJncykpID8gYXJncy5wb3AoKSA6IHZvaWQgMDsKfQpmdW5jdGlvbiBwb3BTY2hlZHVsZXIoYXJncykgewogIHJldHVybiBpc1NjaGVkdWxlcihsYXN0KGFyZ3MpKSA/IGFyZ3MucG9wKCkgOiB2b2lkIDA7Cn0KZnVuY3Rpb24gcG9wTnVtYmVyKGFyZ3MsIGRlZmF1bHRWYWx1ZSkgewogIHJldHVybiB0eXBlb2YgbGFzdChhcmdzKSA9PT0gIm51bWJlciIgPyBhcmdzLnBvcCgpIDogZGVmYXVsdFZhbHVlOwp9CnZhciBpbml0X2FyZ3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2FyZ3MuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgICBpbml0X2lzU2NoZWR1bGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXJyYXlMaWtlLmpzCnZhciBpc0FycmF5TGlrZTsKdmFyIGluaXRfaXNBcnJheUxpa2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXJyYXlMaWtlLmpzIigpIHsKICAgIGlzQXJyYXlMaWtlID0gKGZ1bmN0aW9uKHgzKSB7CiAgICAgIHJldHVybiB4MyAmJiB0eXBlb2YgeDMubGVuZ3RoID09PSAibnVtYmVyIiAmJiB0eXBlb2YgeDMgIT09ICJmdW5jdGlvbiI7CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNQcm9taXNlLmpzCmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZTIpIHsKICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZTIgPT09IG51bGwgfHwgdmFsdWUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZTIudGhlbik7Cn0KdmFyIGluaXRfaXNQcm9taXNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc1Byb21pc2UuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzSW50ZXJvcE9ic2VydmFibGUuanMKZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkgewogIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTsKfQp2YXIgaW5pdF9pc0ludGVyb3BPYnNlcnZhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc0ludGVyb3BPYnNlcnZhYmxlLmpzIigpIHsKICAgIGluaXRfb2JzZXJ2YWJsZSgpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXN5bmNJdGVyYWJsZS5qcwpmdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7CiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7Cn0KdmFyIGluaXRfaXNBc3luY0l0ZXJhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc0FzeW5jSXRlcmFibGUuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL3Rocm93VW5vYnNlcnZhYmxlRXJyb3IuanMKZnVuY3Rpb24gY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpIHsKICByZXR1cm4gbmV3IFR5cGVFcnJvcigiWW91IHByb3ZpZGVkICIgKyAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAib2JqZWN0IiA/ICJhbiBpbnZhbGlkIG9iamVjdCIgOiAiJyIgKyBpbnB1dCArICInIikgKyAiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuIik7Cn0KdmFyIGluaXRfdGhyb3dVbm9ic2VydmFibGVFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvdGhyb3dVbm9ic2VydmFibGVFcnJvci5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zeW1ib2wvaXRlcmF0b3IuanMKZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7CiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICJmdW5jdGlvbiIgfHwgIVN5bWJvbC5pdGVyYXRvcikgewogICAgcmV0dXJuICJAQGl0ZXJhdG9yIjsKICB9CiAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjsKfQp2YXIgaXRlcmF0b3I7CnZhciBpbml0X2l0ZXJhdG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc3ltYm9sL2l0ZXJhdG9yLmpzIigpIHsKICAgIGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNJdGVyYWJsZS5qcwpmdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7CiAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7Cn0KdmFyIGluaXRfaXNJdGVyYWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNJdGVyYWJsZS5qcyIoKSB7CiAgICBpbml0X2l0ZXJhdG9yKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNSZWFkYWJsZVN0cmVhbUxpa2UuanMKZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkgewogIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcl8xKCkgewogICAgdmFyIHJlYWRlciwgX2ExNiwgdmFsdWUyLCBkb25lOwogICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uKF9iKSB7CiAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTsKICAgICAgICAgIF9iLmxhYmVsID0gMTsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBfYi50cnlzLnB1c2goWzEsICwgOSwgMTBdKTsKICAgICAgICAgIF9iLmxhYmVsID0gMjsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBpZiAoZmFsc2UpIHJldHVybiBbMywgOF07CiAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQocmVhZGVyLnJlYWQoKSldOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIF9hMTYgPSBfYi5zZW50KCksIHZhbHVlMiA9IF9hMTYudmFsdWUsIGRvbmUgPSBfYTE2LmRvbmU7CiAgICAgICAgICBpZiAoIWRvbmUpIHJldHVybiBbMywgNV07CiAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgcmV0dXJuIFsyLCBfYi5zZW50KCldOwogICAgICAgIGNhc2UgNToKICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdCh2YWx1ZTIpXTsKICAgICAgICBjYXNlIDY6CiAgICAgICAgICByZXR1cm4gWzQsIF9iLnNlbnQoKV07CiAgICAgICAgY2FzZSA3OgogICAgICAgICAgX2Iuc2VudCgpOwogICAgICAgICAgcmV0dXJuIFszLCAyXTsKICAgICAgICBjYXNlIDg6CiAgICAgICAgICByZXR1cm4gWzMsIDEwXTsKICAgICAgICBjYXNlIDk6CiAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTsKICAgICAgICAgIHJldHVybiBbN107CiAgICAgICAgY2FzZSAxMDoKICAgICAgICAgIHJldHVybiBbMl07CiAgICAgIH0KICAgIH0pOwogIH0pOwp9CmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikgewogIHJldHVybiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9iai5nZXRSZWFkZXIpOwp9CnZhciBpbml0X2lzUmVhZGFibGVTdHJlYW1MaWtlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc1JlYWRhYmxlU3RyZWFtTGlrZS5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lubmVyRnJvbS5qcwpmdW5jdGlvbiBpbm5lckZyb20oaW5wdXQpIHsKICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7CiAgICByZXR1cm4gaW5wdXQ7CiAgfQogIGlmIChpbnB1dCAhPSBudWxsKSB7CiAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7CiAgICB9CiAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7CiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTsKICAgIH0KICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7CiAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7CiAgICB9CiAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkgewogICAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaW5wdXQpOwogICAgfQogICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7CiAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpOwogICAgfQogICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkgewogICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7CiAgICB9CiAgfQogIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTsKfQpmdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTsKICAgIGlmIChpc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7CiAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpOwogICAgfQogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKTsKICB9KTsKfQpmdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkxMSsrKSB7CiAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpMTFdKTsKICAgIH0KICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICB9KTsKfQpmdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkgewogICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZTIpOwogICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgICAgfQogICAgfSwgZnVuY3Rpb24oZXJyKSB7CiAgICAgIHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7CiAgICB9KS50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTsKICB9KTsKfQpmdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgdmFyIGVfMSwgX2ExNjsKICAgIHRyeSB7CiAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7CiAgICAgICAgdmFyIHZhbHVlMiA9IGl0ZXJhYmxlXzFfMS52YWx1ZTsKICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgIGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07CiAgICB9IGZpbmFsbHkgewogICAgICB0cnkgewogICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYTE2ID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYTE2LmNhbGwoaXRlcmFibGVfMSk7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOwogICAgICB9CiAgICB9CiAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgfSk7Cn0KZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkgewogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICBwcm9jZXNzMihhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbihlcnIpIHsKICAgICAgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsKICAgIH0pOwogIH0pOwp9CmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHsKICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpOwp9CmZ1bmN0aW9uIHByb2Nlc3MyKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHsKICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTsKICB2YXIgZV8yLCBfYTE2OwogIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgdmFyIHZhbHVlMiwgZV8yXzE7CiAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24oX2IpIHsKICAgICAgc3dpdGNoIChfYi5sYWJlbCkgewogICAgICAgIGNhc2UgMDoKICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTsKICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7CiAgICAgICAgICBfYi5sYWJlbCA9IDE7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdOwogICAgICAgICAgdmFsdWUyID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkgewogICAgICAgICAgICByZXR1cm4gWzJdOwogICAgICAgICAgfQogICAgICAgICAgX2IubGFiZWwgPSAzOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIHJldHVybiBbMywgMV07CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgcmV0dXJuIFszLCAxMV07CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7CiAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OwogICAgICAgICAgcmV0dXJuIFszLCAxMV07CiAgICAgICAgY2FzZSA2OgogICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7CiAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSAmJiAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2ExNiA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTsKICAgICAgICAgIHJldHVybiBbNCwgX2ExNi5jYWxsKGFzeW5jSXRlcmFibGVfMSldOwogICAgICAgIGNhc2UgNzoKICAgICAgICAgIF9iLnNlbnQoKTsKICAgICAgICAgIF9iLmxhYmVsID0gODsKICAgICAgICBjYXNlIDg6CiAgICAgICAgICByZXR1cm4gWzMsIDEwXTsKICAgICAgICBjYXNlIDk6CiAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7CiAgICAgICAgICByZXR1cm4gWzddOwogICAgICAgIGNhc2UgMTA6CiAgICAgICAgICByZXR1cm4gWzddOwogICAgICAgIGNhc2UgMTE6CiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgICAgICByZXR1cm4gWzJdOwogICAgICB9CiAgICB9KTsKICB9KTsKfQp2YXIgaW5pdF9pbm5lckZyb20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lubmVyRnJvbS5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9pc0FycmF5TGlrZSgpOwogICAgaW5pdF9pc1Byb21pc2UoKTsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9pc0ludGVyb3BPYnNlcnZhYmxlKCk7CiAgICBpbml0X2lzQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF90aHJvd1Vub2JzZXJ2YWJsZUVycm9yKCk7CiAgICBpbml0X2lzSXRlcmFibGUoKTsKICAgIGluaXRfaXNSZWFkYWJsZVN0cmVhbUxpa2UoKTsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogICAgaW5pdF9yZXBvcnRVbmhhbmRsZWRFcnJvcigpOwogICAgaW5pdF9vYnNlcnZhYmxlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2V4ZWN1dGVTY2hlZHVsZS5qcwpmdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5MiwgcmVwZWF0MykgewogIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgZGVsYXkyID0gMDsKICB9CiAgaWYgKHJlcGVhdDMgPT09IHZvaWQgMCkgewogICAgcmVwZWF0MyA9IGZhbHNlOwogIH0KICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24oKSB7CiAgICB3b3JrKCk7CiAgICBpZiAocmVwZWF0MykgewogICAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgZGVsYXkyKSk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7CiAgICB9CiAgfSwgZGVsYXkyKTsKICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHNjaGVkdWxlU3Vic2NyaXB0aW9uKTsKICBpZiAoIXJlcGVhdDMpIHsKICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjsKICB9Cn0KdmFyIGluaXRfZXhlY3V0ZVNjaGVkdWxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9leGVjdXRlU2NoZWR1bGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29ic2VydmVPbi5qcwpmdW5jdGlvbiBvYnNlcnZlT24oc2NoZWR1bGVyLCBkZWxheTIpIHsKICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgIGRlbGF5MiA9IDA7CiAgfQogIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uKHNvdXJjZSwgc3Vic2NyaWJlcikgewogICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHJldHVybiBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gc3Vic2NyaWJlci5uZXh0KHZhbHVlMik7CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9LCBmdW5jdGlvbihlcnIpIHsKICAgICAgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9KSk7CiAgfSk7Cn0KdmFyIGluaXRfb2JzZXJ2ZU9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29ic2VydmVPbi5qcyIoKSB7CiAgICBpbml0X2V4ZWN1dGVTY2hlZHVsZSgpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N1YnNjcmliZU9uLmpzCmZ1bmN0aW9uIHN1YnNjcmliZU9uKHNjaGVkdWxlciwgZGVsYXkyKSB7CiAgaWYgKGRlbGF5MiA9PT0gdm9pZCAwKSB7CiAgICBkZWxheTIgPSAwOwogIH0KICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHN1YnNjcmliZXIuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7CiAgICB9LCBkZWxheTIpKTsKICB9KTsKfQp2YXIgaW5pdF9zdWJzY3JpYmVPbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zdWJzY3JpYmVPbi5qcyIoKSB7CiAgICBpbml0X2xpZnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZU9ic2VydmFibGUuanMKZnVuY3Rpb24gc2NoZWR1bGVPYnNlcnZhYmxlKGlucHV0LCBzY2hlZHVsZXIpIHsKICByZXR1cm4gaW5uZXJGcm9tKGlucHV0KS5waXBlKHN1YnNjcmliZU9uKHNjaGVkdWxlciksIG9ic2VydmVPbihzY2hlZHVsZXIpKTsKfQp2YXIgaW5pdF9zY2hlZHVsZU9ic2VydmFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVPYnNlcnZhYmxlLmpzIigpIHsKICAgIGluaXRfaW5uZXJGcm9tKCk7CiAgICBpbml0X29ic2VydmVPbigpOwogICAgaW5pdF9zdWJzY3JpYmVPbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlUHJvbWlzZS5qcwpmdW5jdGlvbiBzY2hlZHVsZVByb21pc2UoaW5wdXQsIHNjaGVkdWxlcikgewogIHJldHVybiBpbm5lckZyb20oaW5wdXQpLnBpcGUoc3Vic2NyaWJlT24oc2NoZWR1bGVyKSwgb2JzZXJ2ZU9uKHNjaGVkdWxlcikpOwp9CnZhciBpbml0X3NjaGVkdWxlUHJvbWlzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVByb21pc2UuanMiKCkgewogICAgaW5pdF9pbm5lckZyb20oKTsKICAgIGluaXRfb2JzZXJ2ZU9uKCk7CiAgICBpbml0X3N1YnNjcmliZU9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVBcnJheS5qcwpmdW5jdGlvbiBzY2hlZHVsZUFycmF5KGlucHV0LCBzY2hlZHVsZXIpIHsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgdmFyIGkxMSA9IDA7CiAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uKCkgewogICAgICBpZiAoaTExID09PSBpbnB1dC5sZW5ndGgpIHsKICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3Vic2NyaWJlci5uZXh0KGlucHV0W2kxMSsrXSk7CiAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkgewogICAgICAgICAgdGhpcy5zY2hlZHVsZSgpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfSk7Cn0KdmFyIGluaXRfc2NoZWR1bGVBcnJheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZUFycmF5LmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlSXRlcmFibGUuanMKZnVuY3Rpb24gc2NoZWR1bGVJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIHZhciBpdGVyYXRvcjI7CiAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbigpIHsKICAgICAgaXRlcmF0b3IyID0gaW5wdXRbaXRlcmF0b3JdKCk7CiAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBfYTE2OwogICAgICAgIHZhciB2YWx1ZTI7CiAgICAgICAgdmFyIGRvbmU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9hMTYgPSBpdGVyYXRvcjIubmV4dCgpLCB2YWx1ZTIgPSBfYTE2LnZhbHVlLCBkb25lID0gX2ExNi5kb25lOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoZG9uZSkgewogICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICB9CiAgICAgIH0sIDAsIHRydWUpOwogICAgfSk7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGl0ZXJhdG9yMiA9PT0gbnVsbCB8fCBpdGVyYXRvcjIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGl0ZXJhdG9yMi5yZXR1cm4pICYmIGl0ZXJhdG9yMi5yZXR1cm4oKTsKICAgIH07CiAgfSk7Cn0KdmFyIGluaXRfc2NoZWR1bGVJdGVyYWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZUl0ZXJhYmxlLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9pdGVyYXRvcigpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgICBpbml0X2V4ZWN1dGVTY2hlZHVsZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlQXN5bmNJdGVyYWJsZS5qcwpmdW5jdGlvbiBzY2hlZHVsZUFzeW5jSXRlcmFibGUoaW5wdXQsIHNjaGVkdWxlcikgewogIGlmICghaW5wdXQpIHsKICAgIHRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTsKICB9CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICB2YXIgaXRlcmF0b3IyID0gaW5wdXRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7CiAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIGl0ZXJhdG9yMi5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKICAgICAgICAgIGlmIChyZXN1bHQuZG9uZSkgewogICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocmVzdWx0LnZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSwgMCwgdHJ1ZSk7CiAgICB9KTsKICB9KTsKfQp2YXIgaW5pdF9zY2hlZHVsZUFzeW5jSXRlcmFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVBc3luY0l0ZXJhYmxlLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9leGVjdXRlU2NoZWR1bGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZS5qcwpmdW5jdGlvbiBzY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCwgc2NoZWR1bGVyKSB7CiAgcmV0dXJuIHNjaGVkdWxlQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKGlucHV0KSwgc2NoZWR1bGVyKTsKfQp2YXIgaW5pdF9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZS5qcyIoKSB7CiAgICBpbml0X3NjaGVkdWxlQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF9pc1JlYWRhYmxlU3RyZWFtTGlrZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlZC5qcwpmdW5jdGlvbiBzY2hlZHVsZWQoaW5wdXQsIHNjaGVkdWxlcikgewogIGlmIChpbnB1dCAhPSBudWxsKSB7CiAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlT2JzZXJ2YWJsZShpbnB1dCwgc2NoZWR1bGVyKTsKICAgIH0KICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlQXJyYXkoaW5wdXQsIHNjaGVkdWxlcik7CiAgICB9CiAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkgewogICAgICByZXR1cm4gc2NoZWR1bGVQcm9taXNlKGlucHV0LCBzY2hlZHVsZXIpOwogICAgfQogICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlQXN5bmNJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKTsKICAgIH0KICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkgewogICAgICByZXR1cm4gc2NoZWR1bGVJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKTsKICAgIH0KICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0LCBzY2hlZHVsZXIpOwogICAgfQogIH0KICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7Cn0KdmFyIGluaXRfc2NoZWR1bGVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlZC5qcyIoKSB7CiAgICBpbml0X3NjaGVkdWxlT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9zY2hlZHVsZVByb21pc2UoKTsKICAgIGluaXRfc2NoZWR1bGVBcnJheSgpOwogICAgaW5pdF9zY2hlZHVsZUl0ZXJhYmxlKCk7CiAgICBpbml0X3NjaGVkdWxlQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF9pc0ludGVyb3BPYnNlcnZhYmxlKCk7CiAgICBpbml0X2lzUHJvbWlzZSgpOwogICAgaW5pdF9pc0FycmF5TGlrZSgpOwogICAgaW5pdF9pc0l0ZXJhYmxlKCk7CiAgICBpbml0X2lzQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF90aHJvd1Vub2JzZXJ2YWJsZUVycm9yKCk7CiAgICBpbml0X2lzUmVhZGFibGVTdHJlYW1MaWtlKCk7CiAgICBpbml0X3NjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb20uanMKZnVuY3Rpb24gZnJvbShpbnB1dCwgc2NoZWR1bGVyKSB7CiAgcmV0dXJuIHNjaGVkdWxlciA/IHNjaGVkdWxlZChpbnB1dCwgc2NoZWR1bGVyKSA6IGlubmVyRnJvbShpbnB1dCk7Cn0KdmFyIGluaXRfZnJvbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZnJvbS5qcyIoKSB7CiAgICBpbml0X3NjaGVkdWxlZCgpOwogICAgaW5pdF9pbm5lckZyb20oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvb2YuanMKZnVuY3Rpb24gb2YoKSB7CiAgdmFyIGFyZ3MgPSBbXTsKICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldOwogIH0KICB2YXIgc2NoZWR1bGVyID0gcG9wU2NoZWR1bGVyKGFyZ3MpOwogIHJldHVybiBmcm9tKGFyZ3MsIHNjaGVkdWxlcik7Cn0KdmFyIGluaXRfb2YgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL29mLmpzIigpIHsKICAgIGluaXRfYXJncygpOwogICAgaW5pdF9mcm9tKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3Rocm93RXJyb3IuanMKZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHsKICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OwogIH07CiAgdmFyIGluaXQgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7CiAgfTsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoc2NoZWR1bGVyID8gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShpbml0LCAwLCBzdWJzY3JpYmVyKTsKICB9IDogaW5pdCk7Cn0KdmFyIGluaXRfdGhyb3dFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvdGhyb3dFcnJvci5qcyIoKSB7CiAgICBpbml0X09ic2VydmFibGUoKTsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvTm90aWZpY2F0aW9uLmpzCmZ1bmN0aW9uIG9ic2VydmVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBvYnNlcnZlcikgewogIHZhciBfYTE2LCBfYiwgX2M7CiAgdmFyIF9kID0gbm90aWZpY2F0aW9uLCBraW5kID0gX2Qua2luZCwgdmFsdWUyID0gX2QudmFsdWUsIGVycm9yID0gX2QuZXJyb3I7CiAgaWYgKHR5cGVvZiBraW5kICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBub3RpZmljYXRpb24sIG1pc3NpbmcgImtpbmQiJyk7CiAgfQogIGtpbmQgPT09ICJOIiA/IChfYTE2ID0gb2JzZXJ2ZXIubmV4dCkgPT09IG51bGwgfHwgX2ExNiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNi5jYWxsKG9ic2VydmVyLCB2YWx1ZTIpIDoga2luZCA9PT0gIkUiID8gKF9iID0gb2JzZXJ2ZXIuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKG9ic2VydmVyLCBlcnJvcikgOiAoX2MgPSBvYnNlcnZlci5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhbGwob2JzZXJ2ZXIpOwp9CnZhciBOb3RpZmljYXRpb25LaW5kLCBOb3RpZmljYXRpb247CnZhciBpbml0X05vdGlmaWNhdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL05vdGlmaWNhdGlvbi5qcyIoKSB7CiAgICBpbml0X2VtcHR5KCk7CiAgICBpbml0X29mKCk7CiAgICBpbml0X3Rocm93RXJyb3IoKTsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogICAgKGZ1bmN0aW9uKE5vdGlmaWNhdGlvbktpbmQyKSB7CiAgICAgIE5vdGlmaWNhdGlvbktpbmQyWyJORVhUIl0gPSAiTiI7CiAgICAgIE5vdGlmaWNhdGlvbktpbmQyWyJFUlJPUiJdID0gIkUiOwogICAgICBOb3RpZmljYXRpb25LaW5kMlsiQ09NUExFVEUiXSA9ICJDIjsKICAgIH0pKE5vdGlmaWNhdGlvbktpbmQgfHwgKE5vdGlmaWNhdGlvbktpbmQgPSB7fSkpOwogICAgTm90aWZpY2F0aW9uID0gKGZ1bmN0aW9uKCkgewogICAgICBmdW5jdGlvbiBOb3RpZmljYXRpb24yKGtpbmQsIHZhbHVlMiwgZXJyb3IpIHsKICAgICAgICB0aGlzLmtpbmQgPSBraW5kOwogICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yOwogICAgICAgIHRoaXMuaGFzVmFsdWUgPSBraW5kID09PSAiTiI7CiAgICAgIH0KICAgICAgTm90aWZpY2F0aW9uMi5wcm90b3R5cGUub2JzZXJ2ZSA9IGZ1bmN0aW9uKG9ic2VydmVyKSB7CiAgICAgICAgcmV0dXJuIG9ic2VydmVOb3RpZmljYXRpb24odGhpcywgb2JzZXJ2ZXIpOwogICAgICB9OwogICAgICBOb3RpZmljYXRpb24yLnByb3RvdHlwZS5kbyA9IGZ1bmN0aW9uKG5leHRIYW5kbGVyLCBlcnJvckhhbmRsZXIsIGNvbXBsZXRlSGFuZGxlcikgewogICAgICAgIHZhciBfYTE2ID0gdGhpcywga2luZCA9IF9hMTYua2luZCwgdmFsdWUyID0gX2ExNi52YWx1ZSwgZXJyb3IgPSBfYTE2LmVycm9yOwogICAgICAgIHJldHVybiBraW5kID09PSAiTiIgPyBuZXh0SGFuZGxlciA9PT0gbnVsbCB8fCBuZXh0SGFuZGxlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmV4dEhhbmRsZXIodmFsdWUyKSA6IGtpbmQgPT09ICJFIiA/IGVycm9ySGFuZGxlciA9PT0gbnVsbCB8fCBlcnJvckhhbmRsZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9ySGFuZGxlcihlcnJvcikgOiBjb21wbGV0ZUhhbmRsZXIgPT09IG51bGwgfHwgY29tcGxldGVIYW5kbGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wbGV0ZUhhbmRsZXIoKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obmV4dE9yT2JzZXJ2ZXIsIGVycm9yLCBjb21wbGV0ZSkgewogICAgICAgIHZhciBfYTE2OwogICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKChfYTE2ID0gbmV4dE9yT2JzZXJ2ZXIpID09PSBudWxsIHx8IF9hMTYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hMTYubmV4dCkgPyB0aGlzLm9ic2VydmUobmV4dE9yT2JzZXJ2ZXIpIDogdGhpcy5kbyhuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5wcm90b3R5cGUudG9PYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF9hMTYgPSB0aGlzLCBraW5kID0gX2ExNi5raW5kLCB2YWx1ZTIgPSBfYTE2LnZhbHVlLCBlcnJvciA9IF9hMTYuZXJyb3I7CiAgICAgICAgdmFyIHJlc3VsdCA9IGtpbmQgPT09ICJOIiA/IG9mKHZhbHVlMikgOiBraW5kID09PSAiRSIgPyB0aHJvd0Vycm9yKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgIH0pIDoga2luZCA9PT0gIkMiID8gRU1QVFkgOiAwOwogICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmV4cGVjdGVkIG5vdGlmaWNhdGlvbiBraW5kICIgKyBraW5kKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5jcmVhdGVOZXh0ID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIG5ldyBOb3RpZmljYXRpb24yKCJOIiwgdmFsdWUyKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5jcmVhdGVFcnJvciA9IGZ1bmN0aW9uKGVycikgewogICAgICAgIHJldHVybiBuZXcgTm90aWZpY2F0aW9uMigiRSIsIHZvaWQgMCwgZXJyKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5jcmVhdGVDb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBOb3RpZmljYXRpb24yLmNvbXBsZXRlTm90aWZpY2F0aW9uOwogICAgICB9OwogICAgICBOb3RpZmljYXRpb24yLmNvbXBsZXRlTm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbjIoIkMiKTsKICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbjI7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc09ic2VydmFibGUuanMKdmFyIGluaXRfaXNPYnNlcnZhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc09ic2VydmFibGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9FbXB0eUVycm9yLmpzCnZhciBFbXB0eUVycm9yOwp2YXIgaW5pdF9FbXB0eUVycm9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9FbXB0eUVycm9yLmpzIigpIHsKICAgIGluaXRfY3JlYXRlRXJyb3JDbGFzcygpOwogICAgRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBFbXB0eUVycm9ySW1wbCgpIHsKICAgICAgICBfc3VwZXIodGhpcyk7CiAgICAgICAgdGhpcy5uYW1lID0gIkVtcHR5RXJyb3IiOwogICAgICAgIHRoaXMubWVzc2FnZSA9ICJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSI7CiAgICAgIH07CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL2xhc3RWYWx1ZUZyb20uanMKdmFyIGluaXRfbGFzdFZhbHVlRnJvbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL2xhc3RWYWx1ZUZyb20uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvZmlyc3RWYWx1ZUZyb20uanMKdmFyIGluaXRfZmlyc3RWYWx1ZUZyb20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9maXJzdFZhbHVlRnJvbS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yLmpzCnZhciBBcmd1bWVudE91dE9mUmFuZ2VFcnJvcjsKdmFyIGluaXRfQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yLmpzIigpIHsKICAgIGluaXRfY3JlYXRlRXJyb3JDbGFzcygpOwogICAgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICByZXR1cm4gZnVuY3Rpb24gQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JJbXBsKCkgewogICAgICAgIF9zdXBlcih0aGlzKTsKICAgICAgICB0aGlzLm5hbWUgPSAiQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IiOwogICAgICAgIHRoaXMubWVzc2FnZSA9ICJhcmd1bWVudCBvdXQgb2YgcmFuZ2UiOwogICAgICB9OwogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL05vdEZvdW5kRXJyb3IuanMKdmFyIE5vdEZvdW5kRXJyb3I7CnZhciBpbml0X05vdEZvdW5kRXJyb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL05vdEZvdW5kRXJyb3IuanMiKCkgewogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBOb3RGb3VuZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIE5vdEZvdW5kRXJyb3JJbXBsKG1lc3NhZ2UyKSB7CiAgICAgICAgX3N1cGVyKHRoaXMpOwogICAgICAgIHRoaXMubmFtZSA9ICJOb3RGb3VuZEVycm9yIjsKICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlMjsKICAgICAgfTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9TZXF1ZW5jZUVycm9yLmpzCnZhciBTZXF1ZW5jZUVycm9yOwp2YXIgaW5pdF9TZXF1ZW5jZUVycm9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9TZXF1ZW5jZUVycm9yLmpzIigpIHsKICAgIGluaXRfY3JlYXRlRXJyb3JDbGFzcygpOwogICAgU2VxdWVuY2VFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBTZXF1ZW5jZUVycm9ySW1wbChtZXNzYWdlMikgewogICAgICAgIF9zdXBlcih0aGlzKTsKICAgICAgICB0aGlzLm5hbWUgPSAiU2VxdWVuY2VFcnJvciI7CiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTI7CiAgICAgIH07CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNEYXRlLmpzCmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZTIpOwp9CnZhciBpbml0X2lzRGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNEYXRlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aW1lb3V0LmpzCmZ1bmN0aW9uIHRpbWVvdXQoY29uZmlnMywgc2NoZWR1bGVyQXJnKSB7CiAgdmFyIF9hMTYgPSBpc1ZhbGlkRGF0ZShjb25maWczKSA/IHsgZmlyc3Q6IGNvbmZpZzMgfSA6IHR5cGVvZiBjb25maWczID09PSAibnVtYmVyIiA/IHsgZWFjaDogY29uZmlnMyB9IDogY29uZmlnMywgZmlyc3QyID0gX2ExNi5maXJzdCwgZWFjaCA9IF9hMTYuZWFjaCwgX2IgPSBfYTE2LndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYTE2LnNjaGVkdWxlciwgc2NoZWR1bGVyID0gX2MgPT09IHZvaWQgMCA/IHNjaGVkdWxlckFyZyAhPT0gbnVsbCAmJiBzY2hlZHVsZXJBcmcgIT09IHZvaWQgMCA/IHNjaGVkdWxlckFyZyA6IGFzeW5jU2NoZWR1bGVyIDogX2MsIF9kID0gX2ExNi5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDsKICBpZiAoZmlyc3QyID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJObyB0aW1lb3V0IHByb3ZpZGVkLiIpOwogIH0KICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjsKICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjsKICAgIHZhciBsYXN0VmFsdWUgPSBudWxsOwogICAgdmFyIHNlZW4gPSAwOwogICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbihkZWxheTIpIHsKICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbigpIHsKICAgICAgICB0cnkgewogICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7CiAgICAgICAgICAgIG1ldGEsCiAgICAgICAgICAgIGxhc3RWYWx1ZSwKICAgICAgICAgICAgc2VlbgogICAgICAgICAgfSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsKICAgICAgICB9CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9OwogICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgIHNlZW4rKzsKICAgICAgc3Vic2NyaWJlci5uZXh0KGxhc3RWYWx1ZSA9IHZhbHVlMik7CiAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7CiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7CiAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgIH0KICAgICAgbGFzdFZhbHVlID0gbnVsbDsKICAgIH0pKTsKICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QyICE9IG51bGwgPyB0eXBlb2YgZmlyc3QyID09PSAibnVtYmVyIiA/IGZpcnN0MiA6ICtmaXJzdDIgLSBzY2hlZHVsZXIubm93KCkgOiBlYWNoKTsKICB9KTsKfQpmdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHsKICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pOwp9CnZhciBUaW1lb3V0RXJyb3I7CnZhciBpbml0X3RpbWVvdXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dC5qcyIoKSB7CiAgICBpbml0X2FzeW5jKCk7CiAgICBpbml0X2lzRGF0ZSgpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9leGVjdXRlU2NoZWR1bGUoKTsKICAgIFRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBUaW1lb3V0RXJyb3JJbXBsKGluZm8pIHsKICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBpbmZvID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgX3N1cGVyKHRoaXMpOwogICAgICAgIHRoaXMubWVzc2FnZSA9ICJUaW1lb3V0IGhhcyBvY2N1cnJlZCI7CiAgICAgICAgdGhpcy5uYW1lID0gIlRpbWVvdXRFcnJvciI7CiAgICAgICAgdGhpcy5pbmZvID0gaW5mbzsKICAgICAgfTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hcC5qcwpmdW5jdGlvbiBtYXAyKHByb2plY3QsIHRoaXNBcmcpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBpbmRleDIgPSAwOwogICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHN1YnNjcmliZXIubmV4dChwcm9qZWN0LmNhbGwodGhpc0FyZywgdmFsdWUyLCBpbmRleDIrKykpOwogICAgfSkpOwogIH0pOwp9CnZhciBpbml0X21hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXAuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9tYXBPbmVPck1hbnlBcmdzLmpzCmZ1bmN0aW9uIGNhbGxPckFwcGx5KGZuLCBhcmdzKSB7CiAgcmV0dXJuIGlzQXJyYXkoYXJncykgPyBmbi5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpIDogZm4oYXJncyk7Cn0KZnVuY3Rpb24gbWFwT25lT3JNYW55QXJncyhmbikgewogIHJldHVybiBtYXAyKGZ1bmN0aW9uKGFyZ3MpIHsKICAgIHJldHVybiBjYWxsT3JBcHBseShmbiwgYXJncyk7CiAgfSk7Cn0KdmFyIGlzQXJyYXk7CnZhciBpbml0X21hcE9uZU9yTWFueUFyZ3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL21hcE9uZU9yTWFueUFyZ3MuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfbWFwKCk7CiAgICBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvYmluZENhbGxiYWNrLmpzCnZhciBpbml0X2JpbmRDYWxsYmFjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvYmluZENhbGxiYWNrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvYmluZE5vZGVDYWxsYmFjay5qcwp2YXIgaW5pdF9iaW5kTm9kZUNhbGxiYWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9iaW5kTm9kZUNhbGxiYWNrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29tYmluZUxhdGVzdC5qcwp2YXIgaW5pdF9jb21iaW5lTGF0ZXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZUludGVybmFscy5qcwpmdW5jdGlvbiBtZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQsIG9uQmVmb3JlTmV4dCwgZXhwYW5kMiwgaW5uZXJTdWJTY2hlZHVsZXIsIGFkZGl0aW9uYWxGaW5hbGl6ZXIpIHsKICB2YXIgYnVmZmVyMiA9IFtdOwogIHZhciBhY3RpdmUgPSAwOwogIHZhciBpbmRleDIgPSAwOwogIHZhciBpc0NvbXBsZXRlID0gZmFsc2U7CiAgdmFyIGNoZWNrQ29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgIGlmIChpc0NvbXBsZXRlICYmICFidWZmZXIyLmxlbmd0aCAmJiAhYWN0aXZlKSB7CiAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgIH0KICB9OwogIHZhciBvdXRlck5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgIHJldHVybiBhY3RpdmUgPCBjb25jdXJyZW50ID8gZG9Jbm5lclN1Yih2YWx1ZTIpIDogYnVmZmVyMi5wdXNoKHZhbHVlMik7CiAgfTsKICB2YXIgZG9Jbm5lclN1YiA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgZXhwYW5kMiAmJiBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgIGFjdGl2ZSsrOwogICAgdmFyIGlubmVyQ29tcGxldGUgPSBmYWxzZTsKICAgIGlubmVyRnJvbShwcm9qZWN0KHZhbHVlMiwgaW5kZXgyKyspKS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uKGlubmVyVmFsdWUpIHsKICAgICAgb25CZWZvcmVOZXh0ID09PSBudWxsIHx8IG9uQmVmb3JlTmV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CZWZvcmVOZXh0KGlubmVyVmFsdWUpOwogICAgICBpZiAoZXhwYW5kMikgewogICAgICAgIG91dGVyTmV4dChpbm5lclZhbHVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdWJzY3JpYmVyLm5leHQoaW5uZXJWYWx1ZSk7CiAgICAgIH0KICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICBpbm5lckNvbXBsZXRlID0gdHJ1ZTsKICAgIH0sIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgIGlmIChpbm5lckNvbXBsZXRlKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGFjdGl2ZS0tOwogICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGJ1ZmZlcmVkVmFsdWUgPSBidWZmZXIyLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmIChpbm5lclN1YlNjaGVkdWxlcikgewogICAgICAgICAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBpbm5lclN1YlNjaGVkdWxlciwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZG9Jbm5lclN1YihidWZmZXJlZFZhbHVlKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBkb0lubmVyU3ViKGJ1ZmZlcmVkVmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgd2hpbGUgKGJ1ZmZlcjIubGVuZ3RoICYmIGFjdGl2ZSA8IGNvbmN1cnJlbnQpIHsKICAgICAgICAgICAgX2xvb3BfMSgpOwogICAgICAgICAgfQogICAgICAgICAgY2hlY2tDb21wbGV0ZSgpOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpOwogICAgICAgIH0KICAgICAgfQogICAgfSkpOwogIH07CiAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgb3V0ZXJOZXh0LCBmdW5jdGlvbigpIHsKICAgIGlzQ29tcGxldGUgPSB0cnVlOwogICAgY2hlY2tDb21wbGV0ZSgpOwogIH0pKTsKICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICBhZGRpdGlvbmFsRmluYWxpemVyID09PSBudWxsIHx8IGFkZGl0aW9uYWxGaW5hbGl6ZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxGaW5hbGl6ZXIoKTsKICB9Owp9CnZhciBpbml0X21lcmdlSW50ZXJuYWxzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlSW50ZXJuYWxzLmpzIigpIHsKICAgIGluaXRfaW5uZXJGcm9tKCk7CiAgICBpbml0X2V4ZWN1dGVTY2hlZHVsZSgpOwogICAgaW5pdF9PcGVyYXRvclN1YnNjcmliZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcC5qcwpmdW5jdGlvbiBtZXJnZU1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3RvciwgY29uY3VycmVudCkgewogIGlmIChjb25jdXJyZW50ID09PSB2b2lkIDApIHsKICAgIGNvbmN1cnJlbnQgPSBJbmZpbml0eTsKICB9CiAgaWYgKGlzRnVuY3Rpb24ocmVzdWx0U2VsZWN0b3IpKSB7CiAgICByZXR1cm4gbWVyZ2VNYXAoZnVuY3Rpb24oYTUsIGkxMSkgewogICAgICByZXR1cm4gbWFwMihmdW5jdGlvbihiNSwgaWkpIHsKICAgICAgICByZXR1cm4gcmVzdWx0U2VsZWN0b3IoYTUsIGI1LCBpMTEsIGlpKTsKICAgICAgfSkoaW5uZXJGcm9tKHByb2plY3QoYTUsIGkxMSkpKTsKICAgIH0sIGNvbmN1cnJlbnQpOwogIH0gZWxzZSBpZiAodHlwZW9mIHJlc3VsdFNlbGVjdG9yID09PSAibnVtYmVyIikgewogICAgY29uY3VycmVudCA9IHJlc3VsdFNlbGVjdG9yOwogIH0KICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHJldHVybiBtZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQpOwogIH0pOwp9CnZhciBpbml0X21lcmdlTWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwLmpzIigpIHsKICAgIGluaXRfbWFwKCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X21lcmdlSW50ZXJuYWxzKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZUFsbC5qcwpmdW5jdGlvbiBtZXJnZUFsbChjb25jdXJyZW50KSB7CiAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgewogICAgY29uY3VycmVudCA9IEluZmluaXR5OwogIH0KICByZXR1cm4gbWVyZ2VNYXAoaWRlbnRpdHksIGNvbmN1cnJlbnQpOwp9CnZhciBpbml0X21lcmdlQWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlQWxsLmpzIigpIHsKICAgIGluaXRfbWVyZ2VNYXAoKTsKICAgIGluaXRfaWRlbnRpdHkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRBbGwuanMKZnVuY3Rpb24gY29uY2F0QWxsKCkgewogIHJldHVybiBtZXJnZUFsbCgxKTsKfQp2YXIgaW5pdF9jb25jYXRBbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0QWxsLmpzIigpIHsKICAgIGluaXRfbWVyZ2VBbGwoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29uY2F0LmpzCmZ1bmN0aW9uIGNvbmNhdCgpIHsKICB2YXIgYXJncyA9IFtdOwogIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgfQogIHJldHVybiBjb25jYXRBbGwoKShmcm9tKGFyZ3MsIHBvcFNjaGVkdWxlcihhcmdzKSkpOwp9CnZhciBpbml0X2NvbmNhdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29uY2F0LmpzIigpIHsKICAgIGluaXRfY29uY2F0QWxsKCk7CiAgICBpbml0X2FyZ3MoKTsKICAgIGluaXRfZnJvbSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9kZWZlci5qcwp2YXIgaW5pdF9kZWZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZGVmZXIuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb25uZWN0YWJsZS5qcwp2YXIgaW5pdF9jb25uZWN0YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29ubmVjdGFibGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mb3JrSm9pbi5qcwp2YXIgaW5pdF9mb3JrSm9pbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZm9ya0pvaW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tRXZlbnQuanMKZnVuY3Rpb24gZnJvbUV2ZW50KHRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zLCByZXN1bHRTZWxlY3RvcikgewogIGlmIChpc0Z1bmN0aW9uKG9wdGlvbnMpKSB7CiAgICByZXN1bHRTZWxlY3RvciA9IG9wdGlvbnM7CiAgICBvcHRpb25zID0gdm9pZCAwOwogIH0KICBpZiAocmVzdWx0U2VsZWN0b3IpIHsKICAgIHJldHVybiBmcm9tRXZlbnQodGFyZ2V0LCBldmVudE5hbWUsIG9wdGlvbnMpLnBpcGUobWFwT25lT3JNYW55QXJncyhyZXN1bHRTZWxlY3RvcikpOwogIH0KICB2YXIgX2ExNiA9IF9fcmVhZChpc0V2ZW50VGFyZ2V0KHRhcmdldCkgPyBldmVudFRhcmdldE1ldGhvZHMubWFwKGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHsKICAgIHJldHVybiBmdW5jdGlvbihoYW5kbGVyMikgewogICAgICByZXR1cm4gdGFyZ2V0W21ldGhvZE5hbWVdKGV2ZW50TmFtZSwgaGFuZGxlcjIsIG9wdGlvbnMpOwogICAgfTsKICB9KSA6IGlzTm9kZVN0eWxlRXZlbnRFbWl0dGVyKHRhcmdldCkgPyBub2RlRXZlbnRFbWl0dGVyTWV0aG9kcy5tYXAodG9Db21tb25IYW5kbGVyUmVnaXN0cnkodGFyZ2V0LCBldmVudE5hbWUpKSA6IGlzSlF1ZXJ5U3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KSA/IGpxdWVyeU1ldGhvZHMubWFwKHRvQ29tbW9uSGFuZGxlclJlZ2lzdHJ5KHRhcmdldCwgZXZlbnROYW1lKSkgOiBbXSwgMiksIGFkZDMgPSBfYTE2WzBdLCByZW1vdmUyID0gX2ExNlsxXTsKICBpZiAoIWFkZDMpIHsKICAgIGlmIChpc0FycmF5TGlrZSh0YXJnZXQpKSB7CiAgICAgIHJldHVybiBtZXJnZU1hcChmdW5jdGlvbihzdWJUYXJnZXQpIHsKICAgICAgICByZXR1cm4gZnJvbUV2ZW50KHN1YlRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zKTsKICAgICAgfSkoaW5uZXJGcm9tKHRhcmdldCkpOwogICAgfQogIH0KICBpZiAoIWFkZDMpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7CiAgfQogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICB2YXIgaGFuZGxlcjIgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIGFyZ3MgPSBbXTsKICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgIH0KICAgICAgcmV0dXJuIHN1YnNjcmliZXIubmV4dCgxIDwgYXJncy5sZW5ndGggPyBhcmdzIDogYXJnc1swXSk7CiAgICB9OwogICAgYWRkMyhoYW5kbGVyMik7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiByZW1vdmUyKGhhbmRsZXIyKTsKICAgIH07CiAgfSk7Cn0KZnVuY3Rpb24gdG9Db21tb25IYW5kbGVyUmVnaXN0cnkodGFyZ2V0LCBldmVudE5hbWUpIHsKICByZXR1cm4gZnVuY3Rpb24obWV0aG9kTmFtZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKGhhbmRsZXIyKSB7CiAgICAgIHJldHVybiB0YXJnZXRbbWV0aG9kTmFtZV0oZXZlbnROYW1lLCBoYW5kbGVyMik7CiAgICB9OwogIH07Cn0KZnVuY3Rpb24gaXNOb2RlU3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KSB7CiAgcmV0dXJuIGlzRnVuY3Rpb24odGFyZ2V0LmFkZExpc3RlbmVyKSAmJiBpc0Z1bmN0aW9uKHRhcmdldC5yZW1vdmVMaXN0ZW5lcik7Cn0KZnVuY3Rpb24gaXNKUXVlcnlTdHlsZUV2ZW50RW1pdHRlcih0YXJnZXQpIHsKICByZXR1cm4gaXNGdW5jdGlvbih0YXJnZXQub24pICYmIGlzRnVuY3Rpb24odGFyZ2V0Lm9mZik7Cn0KZnVuY3Rpb24gaXNFdmVudFRhcmdldCh0YXJnZXQpIHsKICByZXR1cm4gaXNGdW5jdGlvbih0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcikgJiYgaXNGdW5jdGlvbih0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcik7Cn0KdmFyIG5vZGVFdmVudEVtaXR0ZXJNZXRob2RzLCBldmVudFRhcmdldE1ldGhvZHMsIGpxdWVyeU1ldGhvZHM7CnZhciBpbml0X2Zyb21FdmVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZnJvbUV2ZW50LmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogICAgaW5pdF9PYnNlcnZhYmxlKCk7CiAgICBpbml0X21lcmdlTWFwKCk7CiAgICBpbml0X2lzQXJyYXlMaWtlKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICAgIGluaXRfbWFwT25lT3JNYW55QXJncygpOwogICAgbm9kZUV2ZW50RW1pdHRlck1ldGhvZHMgPSBbImFkZExpc3RlbmVyIiwgInJlbW92ZUxpc3RlbmVyIl07CiAgICBldmVudFRhcmdldE1ldGhvZHMgPSBbImFkZEV2ZW50TGlzdGVuZXIiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciJdOwogICAganF1ZXJ5TWV0aG9kcyA9IFsib24iLCAib2ZmIl07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21FdmVudFBhdHRlcm4uanMKdmFyIGluaXRfZnJvbUV2ZW50UGF0dGVybiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZnJvbUV2ZW50UGF0dGVybi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2dlbmVyYXRlLmpzCnZhciBpbml0X2dlbmVyYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9nZW5lcmF0ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lpZi5qcwp2YXIgaW5pdF9paWYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lpZi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3RpbWVyLmpzCmZ1bmN0aW9uIHRpbWVyKGR1ZVRpbWUsIGludGVydmFsT3JTY2hlZHVsZXIsIHNjaGVkdWxlcikgewogIGlmIChkdWVUaW1lID09PSB2b2lkIDApIHsKICAgIGR1ZVRpbWUgPSAwOwogIH0KICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsKICAgIHNjaGVkdWxlciA9IGFzeW5jOwogIH0KICB2YXIgaW50ZXJ2YWxEdXJhdGlvbiA9IC0xOwogIGlmIChpbnRlcnZhbE9yU2NoZWR1bGVyICE9IG51bGwpIHsKICAgIGlmIChpc1NjaGVkdWxlcihpbnRlcnZhbE9yU2NoZWR1bGVyKSkgewogICAgICBzY2hlZHVsZXIgPSBpbnRlcnZhbE9yU2NoZWR1bGVyOwogICAgfSBlbHNlIHsKICAgICAgaW50ZXJ2YWxEdXJhdGlvbiA9IGludGVydmFsT3JTY2hlZHVsZXI7CiAgICB9CiAgfQogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICB2YXIgZHVlID0gaXNWYWxpZERhdGUoZHVlVGltZSkgPyArZHVlVGltZSAtIHNjaGVkdWxlci5ub3coKSA6IGR1ZVRpbWU7CiAgICBpZiAoZHVlIDwgMCkgewogICAgICBkdWUgPSAwOwogICAgfQogICAgdmFyIG4xMyA9IDA7CiAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uKCkgewogICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7CiAgICAgICAgc3Vic2NyaWJlci5uZXh0KG4xMysrKTsKICAgICAgICBpZiAoMCA8PSBpbnRlcnZhbER1cmF0aW9uKSB7CiAgICAgICAgICB0aGlzLnNjaGVkdWxlKHZvaWQgMCwgaW50ZXJ2YWxEdXJhdGlvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sIGR1ZSk7CiAgfSk7Cn0KdmFyIGluaXRfdGltZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3RpbWVyLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9hc3luYygpOwogICAgaW5pdF9pc1NjaGVkdWxlcigpOwogICAgaW5pdF9pc0RhdGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvaW50ZXJ2YWwuanMKdmFyIGluaXRfaW50ZXJ2YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2ludGVydmFsLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvbWVyZ2UuanMKdmFyIGluaXRfbWVyZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL21lcmdlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvbmV2ZXIuanMKZnVuY3Rpb24gbmV2ZXIoKSB7CiAgcmV0dXJuIE5FVkVSOwp9CnZhciBORVZFUjsKdmFyIGluaXRfbmV2ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL25ldmVyLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9ub29wKCk7CiAgICBORVZFUiA9IG5ldyBPYnNlcnZhYmxlKG5vb3ApOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9vbkVycm9yUmVzdW1lTmV4dC5qcwp2YXIgaW5pdF9vbkVycm9yUmVzdW1lTmV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvb25FcnJvclJlc3VtZU5leHQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9wYWlycy5qcwp2YXIgaW5pdF9wYWlycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvcGFpcnMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlci5qcwpmdW5jdGlvbiBmaWx0ZXIocHJlZGljYXRlLCB0aGlzQXJnKSB7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgaW5kZXgyID0gMDsKICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uKHZhbHVlMikgewogICAgICByZXR1cm4gcHJlZGljYXRlLmNhbGwodGhpc0FyZywgdmFsdWUyLCBpbmRleDIrKykgJiYgc3Vic2NyaWJlci5uZXh0KHZhbHVlMik7CiAgICB9KSk7CiAgfSk7Cn0KdmFyIGluaXRfZmlsdGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlci5qcyIoKSB7CiAgICBpbml0X2xpZnQoKTsKICAgIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3BhcnRpdGlvbi5qcwp2YXIgaW5pdF9wYXJ0aXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3BhcnRpdGlvbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3JhY2UuanMKdmFyIGluaXRfcmFjZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvcmFjZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3JhbmdlLmpzCnZhciBpbml0X3JhbmdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9yYW5nZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3VzaW5nLmpzCnZhciBpbml0X3VzaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS91c2luZy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3ppcC5qcwp2YXIgaW5pdF96aXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3ppcC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC90eXBlcy5qcwp2YXIgaW5pdF90eXBlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3R5cGVzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9hdWRpdC5qcwp2YXIgaW5pdF9hdWRpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9hdWRpdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvYXVkaXRUaW1lLmpzCnZhciBpbml0X2F1ZGl0VGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9hdWRpdFRpbWUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlci5qcwpmdW5jdGlvbiBidWZmZXIoY2xvc2luZ05vdGlmaWVyKSB7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgY3VycmVudEJ1ZmZlciA9IFtdOwogICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHJldHVybiBjdXJyZW50QnVmZmVyLnB1c2godmFsdWUyKTsKICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICBzdWJzY3JpYmVyLm5leHQoY3VycmVudEJ1ZmZlcik7CiAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgIH0pKTsKICAgIGlubmVyRnJvbShjbG9zaW5nTm90aWZpZXIpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24oKSB7CiAgICAgIHZhciBiNSA9IGN1cnJlbnRCdWZmZXI7CiAgICAgIGN1cnJlbnRCdWZmZXIgPSBbXTsKICAgICAgc3Vic2NyaWJlci5uZXh0KGI1KTsKICAgIH0sIG5vb3ApKTsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgY3VycmVudEJ1ZmZlciA9IG51bGw7CiAgICB9OwogIH0pOwp9CnZhciBpbml0X2J1ZmZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXIuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X25vb3AoKTsKICAgIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyKCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlckNvdW50LmpzCmZ1bmN0aW9uIGJ1ZmZlckNvdW50KGJ1ZmZlclNpemUsIHN0YXJ0QnVmZmVyRXZlcnkpIHsKICBpZiAoc3RhcnRCdWZmZXJFdmVyeSA9PT0gdm9pZCAwKSB7CiAgICBzdGFydEJ1ZmZlckV2ZXJ5ID0gbnVsbDsKICB9CiAgc3RhcnRCdWZmZXJFdmVyeSA9IHN0YXJ0QnVmZmVyRXZlcnkgIT09IG51bGwgJiYgc3RhcnRCdWZmZXJFdmVyeSAhPT0gdm9pZCAwID8gc3RhcnRCdWZmZXJFdmVyeSA6IGJ1ZmZlclNpemU7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgYnVmZmVycyA9IFtdOwogICAgdmFyIGNvdW50MiA9IDA7CiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdmFyIGVfMSwgX2ExNiwgZV8yLCBfYjsKICAgICAgdmFyIHRvRW1pdCA9IG51bGw7CiAgICAgIGlmIChjb3VudDIrKyAlIHN0YXJ0QnVmZmVyRXZlcnkgPT09IDApIHsKICAgICAgICBidWZmZXJzLnB1c2goW10pOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICh2YXIgYnVmZmVyc18xID0gX192YWx1ZXMoYnVmZmVycyksIGJ1ZmZlcnNfMV8xID0gYnVmZmVyc18xLm5leHQoKTsgIWJ1ZmZlcnNfMV8xLmRvbmU7IGJ1ZmZlcnNfMV8xID0gYnVmZmVyc18xLm5leHQoKSkgewogICAgICAgICAgdmFyIGJ1ZmZlcjIgPSBidWZmZXJzXzFfMS52YWx1ZTsKICAgICAgICAgIGJ1ZmZlcjIucHVzaCh2YWx1ZTIpOwogICAgICAgICAgaWYgKGJ1ZmZlclNpemUgPD0gYnVmZmVyMi5sZW5ndGgpIHsKICAgICAgICAgICAgdG9FbWl0ID0gdG9FbWl0ICE9PSBudWxsICYmIHRvRW1pdCAhPT0gdm9pZCAwID8gdG9FbWl0IDogW107CiAgICAgICAgICAgIHRvRW1pdC5wdXNoKGJ1ZmZlcjIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZV8xXzEpIHsKICAgICAgICBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OwogICAgICB9IGZpbmFsbHkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBpZiAoYnVmZmVyc18xXzEgJiYgIWJ1ZmZlcnNfMV8xLmRvbmUgJiYgKF9hMTYgPSBidWZmZXJzXzEucmV0dXJuKSkgX2ExNi5jYWxsKGJ1ZmZlcnNfMSk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRvRW1pdCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBmb3IgKHZhciB0b0VtaXRfMSA9IF9fdmFsdWVzKHRvRW1pdCksIHRvRW1pdF8xXzEgPSB0b0VtaXRfMS5uZXh0KCk7ICF0b0VtaXRfMV8xLmRvbmU7IHRvRW1pdF8xXzEgPSB0b0VtaXRfMS5uZXh0KCkpIHsKICAgICAgICAgICAgdmFyIGJ1ZmZlcjIgPSB0b0VtaXRfMV8xLnZhbHVlOwogICAgICAgICAgICBhcnJSZW1vdmUoYnVmZmVycywgYnVmZmVyMik7CiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChidWZmZXIyKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlXzJfMSkgewogICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKHRvRW1pdF8xXzEgJiYgIXRvRW1pdF8xXzEuZG9uZSAmJiAoX2IgPSB0b0VtaXRfMS5yZXR1cm4pKSBfYi5jYWxsKHRvRW1pdF8xKTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICB2YXIgZV8zLCBfYTE2OwogICAgICB0cnkgewogICAgICAgIGZvciAodmFyIGJ1ZmZlcnNfMiA9IF9fdmFsdWVzKGJ1ZmZlcnMpLCBidWZmZXJzXzJfMSA9IGJ1ZmZlcnNfMi5uZXh0KCk7ICFidWZmZXJzXzJfMS5kb25lOyBidWZmZXJzXzJfMSA9IGJ1ZmZlcnNfMi5uZXh0KCkpIHsKICAgICAgICAgIHZhciBidWZmZXIyID0gYnVmZmVyc18yXzEudmFsdWU7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYnVmZmVyMik7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlXzNfMSkgewogICAgICAgIGVfMyA9IHsgZXJyb3I6IGVfM18xIH07CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGlmIChidWZmZXJzXzJfMSAmJiAhYnVmZmVyc18yXzEuZG9uZSAmJiAoX2ExNiA9IGJ1ZmZlcnNfMi5yZXR1cm4pKSBfYTE2LmNhbGwoYnVmZmVyc18yKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgaWYgKGVfMykgdGhyb3cgZV8zLmVycm9yOwogICAgICAgIH0KICAgICAgfQogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBidWZmZXJzID0gbnVsbDsKICAgIH0pKTsKICB9KTsKfQp2YXIgaW5pdF9idWZmZXJDb3VudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJDb3VudC5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUaW1lLmpzCmZ1bmN0aW9uIGJ1ZmZlclRpbWUoYnVmZmVyVGltZVNwYW4pIHsKICB2YXIgX2ExNiwgX2I7CiAgdmFyIG90aGVyQXJncyA9IFtdOwogIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICBvdGhlckFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07CiAgfQogIHZhciBzY2hlZHVsZXIgPSAoX2ExNiA9IHBvcFNjaGVkdWxlcihvdGhlckFyZ3MpKSAhPT0gbnVsbCAmJiBfYTE2ICE9PSB2b2lkIDAgPyBfYTE2IDogYXN5bmNTY2hlZHVsZXI7CiAgdmFyIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgPSAoX2IgPSBvdGhlckFyZ3NbMF0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG51bGw7CiAgdmFyIG1heEJ1ZmZlclNpemUgPSBvdGhlckFyZ3NbMV0gfHwgSW5maW5pdHk7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgYnVmZmVyUmVjb3JkcyA9IFtdOwogICAgdmFyIHJlc3RhcnRPbkVtaXQgPSBmYWxzZTsKICAgIHZhciBlbWl0ID0gZnVuY3Rpb24ocmVjb3JkKSB7CiAgICAgIHZhciBidWZmZXIyID0gcmVjb3JkLmJ1ZmZlciwgc3VicyA9IHJlY29yZC5zdWJzOwogICAgICBzdWJzLnVuc3Vic2NyaWJlKCk7CiAgICAgIGFyclJlbW92ZShidWZmZXJSZWNvcmRzLCByZWNvcmQpOwogICAgICBzdWJzY3JpYmVyLm5leHQoYnVmZmVyMik7CiAgICAgIHJlc3RhcnRPbkVtaXQgJiYgc3RhcnRCdWZmZXIoKTsKICAgIH07CiAgICB2YXIgc3RhcnRCdWZmZXIgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKGJ1ZmZlclJlY29yZHMpIHsKICAgICAgICB2YXIgc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTsKICAgICAgICBzdWJzY3JpYmVyLmFkZChzdWJzKTsKICAgICAgICB2YXIgYnVmZmVyMiA9IFtdOwogICAgICAgIHZhciByZWNvcmRfMSA9IHsKICAgICAgICAgIGJ1ZmZlcjogYnVmZmVyMiwKICAgICAgICAgIHN1YnMKICAgICAgICB9OwogICAgICAgIGJ1ZmZlclJlY29yZHMucHVzaChyZWNvcmRfMSk7CiAgICAgICAgZXhlY3V0ZVNjaGVkdWxlKHN1YnMsIHNjaGVkdWxlciwgZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gZW1pdChyZWNvcmRfMSk7CiAgICAgICAgfSwgYnVmZmVyVGltZVNwYW4pOwogICAgICB9CiAgICB9OwogICAgaWYgKGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgIT09IG51bGwgJiYgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCA+PSAwKSB7CiAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIHN0YXJ0QnVmZmVyLCBidWZmZXJDcmVhdGlvbkludGVydmFsLCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3RhcnRPbkVtaXQgPSB0cnVlOwogICAgfQogICAgc3RhcnRCdWZmZXIoKTsKICAgIHZhciBidWZmZXJUaW1lU3Vic2NyaWJlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdmFyIGVfMSwgX2ExNzsKICAgICAgdmFyIHJlY29yZHNDb3B5ID0gYnVmZmVyUmVjb3Jkcy5zbGljZSgpOwogICAgICB0cnkgewogICAgICAgIGZvciAodmFyIHJlY29yZHNDb3B5XzEgPSBfX3ZhbHVlcyhyZWNvcmRzQ29weSksIHJlY29yZHNDb3B5XzFfMSA9IHJlY29yZHNDb3B5XzEubmV4dCgpOyAhcmVjb3Jkc0NvcHlfMV8xLmRvbmU7IHJlY29yZHNDb3B5XzFfMSA9IHJlY29yZHNDb3B5XzEubmV4dCgpKSB7CiAgICAgICAgICB2YXIgcmVjb3JkID0gcmVjb3Jkc0NvcHlfMV8xLnZhbHVlOwogICAgICAgICAgdmFyIGJ1ZmZlcjIgPSByZWNvcmQuYnVmZmVyOwogICAgICAgICAgYnVmZmVyMi5wdXNoKHZhbHVlMik7CiAgICAgICAgICBtYXhCdWZmZXJTaXplIDw9IGJ1ZmZlcjIubGVuZ3RoICYmIGVtaXQocmVjb3JkKTsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgICAgZV8xID0geyBlcnJvcjogZV8xXzEgfTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICB0cnkgewogICAgICAgICAgaWYgKHJlY29yZHNDb3B5XzFfMSAmJiAhcmVjb3Jkc0NvcHlfMV8xLmRvbmUgJiYgKF9hMTcgPSByZWNvcmRzQ29weV8xLnJldHVybikpIF9hMTcuY2FsbChyZWNvcmRzQ29weV8xKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOwogICAgICAgIH0KICAgICAgfQogICAgfSwgZnVuY3Rpb24oKSB7CiAgICAgIHdoaWxlIChidWZmZXJSZWNvcmRzID09PSBudWxsIHx8IGJ1ZmZlclJlY29yZHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJ1ZmZlclJlY29yZHMubGVuZ3RoKSB7CiAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlclJlY29yZHMuc2hpZnQoKS5idWZmZXIpOwogICAgICB9CiAgICAgIGJ1ZmZlclRpbWVTdWJzY3JpYmVyID09PSBudWxsIHx8IGJ1ZmZlclRpbWVTdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBidWZmZXJUaW1lU3Vic2NyaWJlci51bnN1YnNjcmliZSgpOwogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgIH0sIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBidWZmZXJSZWNvcmRzID0gbnVsbDsKICAgIH0pOwogICAgc291cmNlLnN1YnNjcmliZShidWZmZXJUaW1lU3Vic2NyaWJlcik7CiAgfSk7Cn0KdmFyIGluaXRfYnVmZmVyVGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUaW1lLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICAgIGluaXRfYXN5bmMoKTsKICAgIGluaXRfYXJncygpOwogICAgaW5pdF9leGVjdXRlU2NoZWR1bGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUb2dnbGUuanMKdmFyIGluaXRfYnVmZmVyVG9nZ2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlclRvZ2dsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyV2hlbi5qcwp2YXIgaW5pdF9idWZmZXJXaGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlcldoZW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NhdGNoRXJyb3IuanMKdmFyIGluaXRfY2F0Y2hFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jYXRjaEVycm9yLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9yZWR1Y2UuanMKdmFyIGluaXRfcmVkdWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JlZHVjZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdG9BcnJheS5qcwp2YXIgaW5pdF90b0FycmF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RvQXJyYXkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVMYXRlc3RBbGwuanMKdmFyIGluaXRfY29tYmluZUxhdGVzdEFsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0QWxsLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lQWxsLmpzCnZhciBpbml0X2NvbWJpbmVBbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUxhdGVzdC5qcwp2YXIgaW5pdF9jb21iaW5lTGF0ZXN0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0V2l0aC5qcwp2YXIgaW5pdF9jb21iaW5lTGF0ZXN0V2l0aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0V2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0TWFwLmpzCnZhciBpbml0X2NvbmNhdE1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRNYXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdE1hcFRvLmpzCnZhciBpbml0X2NvbmNhdE1hcFRvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdE1hcFRvLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXQuanMKdmFyIGluaXRfY29uY2F0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdFdpdGguanMKdmFyIGluaXRfY29uY2F0V2l0aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRXaXRoLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25uZWN0LmpzCnZhciBpbml0X2Nvbm5lY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29ubmVjdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY291bnQuanMKdmFyIGluaXRfY291bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY291bnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlLmpzCmZ1bmN0aW9uIGRlYm91bmNlKGR1cmF0aW9uU2VsZWN0b3IpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlOwogICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7CiAgICB2YXIgZHVyYXRpb25TdWJzY3JpYmVyID0gbnVsbDsKICAgIHZhciBlbWl0ID0gZnVuY3Rpb24oKSB7CiAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9PT0gbnVsbCB8fCBkdXJhdGlvblN1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGR1cmF0aW9uU3Vic2NyaWJlci51bnN1YnNjcmliZSgpOwogICAgICBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsOwogICAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlOwogICAgICAgIHZhciB2YWx1ZTIgPSBsYXN0VmFsdWU7CiAgICAgICAgbGFzdFZhbHVlID0gbnVsbDsKICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgfQogICAgfTsKICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uKHZhbHVlMikgewogICAgICBkdXJhdGlvblN1YnNjcmliZXIgPT09IG51bGwgfHwgZHVyYXRpb25TdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkdXJhdGlvblN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgICAgaGFzVmFsdWUgPSB0cnVlOwogICAgICBsYXN0VmFsdWUgPSB2YWx1ZTI7CiAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBlbWl0LCBub29wKTsKICAgICAgaW5uZXJGcm9tKGR1cmF0aW9uU2VsZWN0b3IodmFsdWUyKSkuc3Vic2NyaWJlKGR1cmF0aW9uU3Vic2NyaWJlcik7CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgZW1pdCgpOwogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBsYXN0VmFsdWUgPSBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsOwogICAgfSkpOwogIH0pOwp9CnZhciBpbml0X2RlYm91bmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlLmpzIigpIHsKICAgIGluaXRfbGlmdCgpOwogICAgaW5pdF9ub29wKCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9pbm5lckZyb20oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWJvdW5jZVRpbWUuanMKZnVuY3Rpb24gZGVib3VuY2VUaW1lKGR1ZVRpbWUsIHNjaGVkdWxlcikgewogIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgewogICAgc2NoZWR1bGVyID0gYXN5bmNTY2hlZHVsZXI7CiAgfQogIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uKHNvdXJjZSwgc3Vic2NyaWJlcikgewogICAgdmFyIGFjdGl2ZVRhc2sgPSBudWxsOwogICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7CiAgICB2YXIgbGFzdFRpbWUgPSBudWxsOwogICAgdmFyIGVtaXQgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKGFjdGl2ZVRhc2spIHsKICAgICAgICBhY3RpdmVUYXNrLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgYWN0aXZlVGFzayA9IG51bGw7CiAgICAgICAgdmFyIHZhbHVlMiA9IGxhc3RWYWx1ZTsKICAgICAgICBsYXN0VmFsdWUgPSBudWxsOwogICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZTIpOwogICAgICB9CiAgICB9OwogICAgZnVuY3Rpb24gZW1pdFdoZW5JZGxlKCkgewogICAgICB2YXIgdGFyZ2V0VGltZSA9IGxhc3RUaW1lICsgZHVlVGltZTsKICAgICAgdmFyIG5vdzIgPSBzY2hlZHVsZXIubm93KCk7CiAgICAgIGlmIChub3cyIDwgdGFyZ2V0VGltZSkgewogICAgICAgIGFjdGl2ZVRhc2sgPSB0aGlzLnNjaGVkdWxlKHZvaWQgMCwgdGFyZ2V0VGltZSAtIG5vdzIpOwogICAgICAgIHN1YnNjcmliZXIuYWRkKGFjdGl2ZVRhc2spOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBlbWl0KCk7CiAgICB9CiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgbGFzdFZhbHVlID0gdmFsdWUyOwogICAgICBsYXN0VGltZSA9IHNjaGVkdWxlci5ub3coKTsKICAgICAgaWYgKCFhY3RpdmVUYXNrKSB7CiAgICAgICAgYWN0aXZlVGFzayA9IHNjaGVkdWxlci5zY2hlZHVsZShlbWl0V2hlbklkbGUsIGR1ZVRpbWUpOwogICAgICAgIHN1YnNjcmliZXIuYWRkKGFjdGl2ZVRhc2spOwogICAgICB9CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgZW1pdCgpOwogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBsYXN0VmFsdWUgPSBhY3RpdmVUYXNrID0gbnVsbDsKICAgIH0pKTsKICB9KTsKfQp2YXIgaW5pdF9kZWJvdW5jZVRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVib3VuY2VUaW1lLmpzIigpIHsKICAgIGluaXRfYXN5bmMoKTsKICAgIGluaXRfbGlmdCgpOwogICAgaW5pdF9PcGVyYXRvclN1YnNjcmliZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eS5qcwp2YXIgaW5pdF9kZWZhdWx0SWZFbXB0eSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZS5qcwp2YXIgaW5pdF90YWtlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2lnbm9yZUVsZW1lbnRzLmpzCnZhciBpbml0X2lnbm9yZUVsZW1lbnRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2lnbm9yZUVsZW1lbnRzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXBUby5qcwp2YXIgaW5pdF9tYXBUbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXBUby5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVsYXlXaGVuLmpzCnZhciBpbml0X2RlbGF5V2hlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWxheVdoZW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlbGF5LmpzCnZhciBpbml0X2RlbGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlbGF5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZW1hdGVyaWFsaXplLmpzCnZhciBpbml0X2RlbWF0ZXJpYWxpemUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVtYXRlcmlhbGl6ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3QuanMKdmFyIGluaXRfZGlzdGluY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxDaGFuZ2VkLmpzCnZhciBpbml0X2Rpc3RpbmN0VW50aWxDaGFuZ2VkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxDaGFuZ2VkLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC5qcwp2YXIgaW5pdF9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3dJZkVtcHR5LmpzCnZhciBpbml0X3Rocm93SWZFbXB0eSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aHJvd0lmRW1wdHkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2VsZW1lbnRBdC5qcwp2YXIgaW5pdF9lbGVtZW50QXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZWxlbWVudEF0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9lbmRXaXRoLmpzCnZhciBpbml0X2VuZFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZW5kV2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXZlcnkuanMKdmFyIGluaXRfZXZlcnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXZlcnkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3RNYXAuanMKdmFyIGluaXRfZXhoYXVzdE1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0TWFwLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0QWxsLmpzCnZhciBpbml0X2V4aGF1c3RBbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdEFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdC5qcwp2YXIgaW5pdF9leGhhdXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V4cGFuZC5qcwp2YXIgaW5pdF9leHBhbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhwYW5kLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maW5hbGl6ZS5qcwp2YXIgaW5pdF9maW5hbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maW5hbGl6ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZC5qcwp2YXIgaW5pdF9maW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmRJbmRleC5qcwp2YXIgaW5pdF9maW5kSW5kZXggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZEluZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maXJzdC5qcwp2YXIgaW5pdF9maXJzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maXJzdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZ3JvdXBCeS5qcwp2YXIgaW5pdF9ncm91cEJ5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2dyb3VwQnkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2lzRW1wdHkuanMKdmFyIGluaXRfaXNFbXB0eSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9pc0VtcHR5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlTGFzdC5qcwp2YXIgaW5pdF90YWtlTGFzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlTGFzdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbGFzdC5qcwp2YXIgaW5pdF9sYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2xhc3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hdGVyaWFsaXplLmpzCnZhciBpbml0X21hdGVyaWFsaXplID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hdGVyaWFsaXplLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXguanMKdmFyIGluaXRfbWF4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21heC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmxhdE1hcC5qcwp2YXIgaW5pdF9mbGF0TWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZsYXRNYXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwVG8uanMKdmFyIGluaXRfbWVyZ2VNYXBUbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcFRvLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVNjYW4uanMKdmFyIGluaXRfbWVyZ2VTY2FuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlU2Nhbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2UuanMKdmFyIGluaXRfbWVyZ2UyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVdpdGguanMKdmFyIGluaXRfbWVyZ2VXaXRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlV2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWluLmpzCnZhciBpbml0X21pbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9taW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL211bHRpY2FzdC5qcwp2YXIgaW5pdF9tdWx0aWNhc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbXVsdGljYXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9vbkVycm9yUmVzdW1lTmV4dFdpdGguanMKdmFyIGluaXRfb25FcnJvclJlc3VtZU5leHRXaXRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29uRXJyb3JSZXN1bWVOZXh0V2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcGFpcndpc2UuanMKdmFyIGluaXRfcGFpcndpc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcGFpcndpc2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3BsdWNrLmpzCnZhciBpbml0X3BsdWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3BsdWNrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoLmpzCnZhciBpbml0X3B1Ymxpc2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaEJlaGF2aW9yLmpzCnZhciBpbml0X3B1Ymxpc2hCZWhhdmlvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoQmVoYXZpb3IuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hMYXN0LmpzCnZhciBpbml0X3B1Ymxpc2hMYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hMYXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoUmVwbGF5LmpzCnZhciBpbml0X3B1Ymxpc2hSZXBsYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaFJlcGxheS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZVdpdGguanMKdmFyIGluaXRfcmFjZVdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZVdpdGguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JlcGVhdC5qcwp2YXIgaW5pdF9yZXBlYXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVwZWF0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXRXaGVuLmpzCnZhciBpbml0X3JlcGVhdFdoZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVwZWF0V2hlbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnkuanMKdmFyIGluaXRfcmV0cnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JldHJ5V2hlbi5qcwp2YXIgaW5pdF9yZXRyeVdoZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnlXaGVuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zYW1wbGUuanMKdmFyIGluaXRfc2FtcGxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NhbXBsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2FtcGxlVGltZS5qcwp2YXIgaW5pdF9zYW1wbGVUaW1lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NhbXBsZVRpbWUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NjYW4uanMKdmFyIGluaXRfc2NhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zY2FuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zZXF1ZW5jZUVxdWFsLmpzCnZhciBpbml0X3NlcXVlbmNlRXF1YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2VxdWVuY2VFcXVhbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2hhcmUuanMKdmFyIGluaXRfc2hhcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2hhcmUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlUmVwbGF5LmpzCnZhciBpbml0X3NoYXJlUmVwbGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlUmVwbGF5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zaW5nbGUuanMKdmFyIGluaXRfc2luZ2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NpbmdsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcC5qcwp2YXIgaW5pdF9za2lwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBMYXN0LmpzCnZhciBpbml0X3NraXBMYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBMYXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9za2lwVW50aWwuanMKdmFyIGluaXRfc2tpcFVudGlsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBVbnRpbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcFdoaWxlLmpzCnZhciBpbml0X3NraXBXaGlsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9za2lwV2hpbGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N0YXJ0V2l0aC5qcwpmdW5jdGlvbiBzdGFydFdpdGgoKSB7CiAgdmFyIHZhbHVlcyA9IFtdOwogIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICB2YWx1ZXNbX2ldID0gYXJndW1lbnRzW19pXTsKICB9CiAgdmFyIHNjaGVkdWxlciA9IHBvcFNjaGVkdWxlcih2YWx1ZXMpOwogIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uKHNvdXJjZSwgc3Vic2NyaWJlcikgewogICAgKHNjaGVkdWxlciA/IGNvbmNhdCh2YWx1ZXMsIHNvdXJjZSwgc2NoZWR1bGVyKSA6IGNvbmNhdCh2YWx1ZXMsIHNvdXJjZSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICB9KTsKfQp2YXIgaW5pdF9zdGFydFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3RhcnRXaXRoLmpzIigpIHsKICAgIGluaXRfY29uY2F0KCk7CiAgICBpbml0X2FyZ3MoKTsKICAgIGluaXRfbGlmdCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaE1hcC5qcwp2YXIgaW5pdF9zd2l0Y2hNYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hBbGwuanMKdmFyIGluaXRfc3dpdGNoQWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaEFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwVG8uanMKdmFyIGluaXRfc3dpdGNoTWFwVG8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwVG8uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaFNjYW4uanMKdmFyIGluaXRfc3dpdGNoU2NhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hTY2FuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlVW50aWwuanMKZnVuY3Rpb24gdGFrZVVudGlsKG5vdGlmaWVyKSB7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICBpbm5lckZyb20obm90aWZpZXIpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCBub29wKSk7CiAgICAhc3Vic2NyaWJlci5jbG9zZWQgJiYgc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICB9KTsKfQp2YXIgaW5pdF90YWtlVW50aWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZVVudGlsLmpzIigpIHsKICAgIGluaXRfbGlmdCgpOwogICAgaW5pdF9PcGVyYXRvclN1YnNjcmliZXIoKTsKICAgIGluaXRfaW5uZXJGcm9tKCk7CiAgICBpbml0X25vb3AoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlV2hpbGUuanMKdmFyIGluaXRfdGFrZVdoaWxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2VXaGlsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFwLmpzCnZhciBpbml0X3RhcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlLmpzCmZ1bmN0aW9uIHRocm90dGxlKGR1cmF0aW9uU2VsZWN0b3IsIGNvbmZpZzMpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBfYTE2ID0gY29uZmlnMyAhPT0gbnVsbCAmJiBjb25maWczICE9PSB2b2lkIDAgPyBjb25maWczIDoge30sIF9iID0gX2ExNi5sZWFkaW5nLCBsZWFkaW5nID0gX2IgPT09IHZvaWQgMCA/IHRydWUgOiBfYiwgX2MgPSBfYTE2LnRyYWlsaW5nLCB0cmFpbGluZyA9IF9jID09PSB2b2lkIDAgPyBmYWxzZSA6IF9jOwogICAgdmFyIGhhc1ZhbHVlID0gZmFsc2U7CiAgICB2YXIgc2VuZFZhbHVlID0gbnVsbDsKICAgIHZhciB0aHJvdHRsZWQgPSBudWxsOwogICAgdmFyIGlzQ29tcGxldGUgPSBmYWxzZTsKICAgIHZhciBlbmRUaHJvdHRsaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgIHRocm90dGxlZCA9PT0gbnVsbCB8fCB0aHJvdHRsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRocm90dGxlZC51bnN1YnNjcmliZSgpOwogICAgICB0aHJvdHRsZWQgPSBudWxsOwogICAgICBpZiAodHJhaWxpbmcpIHsKICAgICAgICBzZW5kKCk7CiAgICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgY2xlYW51cFRocm90dGxpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgdGhyb3R0bGVkID0gbnVsbDsKICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9OwogICAgdmFyIHN0YXJ0VGhyb3R0bGUgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgcmV0dXJuIHRocm90dGxlZCA9IGlubmVyRnJvbShkdXJhdGlvblNlbGVjdG9yKHZhbHVlMikpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZW5kVGhyb3R0bGluZywgY2xlYW51cFRocm90dGxpbmcpKTsKICAgIH07CiAgICB2YXIgc2VuZCA9IGZ1bmN0aW9uKCkgewogICAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlOwogICAgICAgIHZhciB2YWx1ZTIgPSBzZW5kVmFsdWU7CiAgICAgICAgc2VuZFZhbHVlID0gbnVsbDsKICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICAhaXNDb21wbGV0ZSAmJiBzdGFydFRocm90dGxlKHZhbHVlMik7CiAgICAgIH0KICAgIH07CiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgaGFzVmFsdWUgPSB0cnVlOwogICAgICBzZW5kVmFsdWUgPSB2YWx1ZTI7CiAgICAgICEodGhyb3R0bGVkICYmICF0aHJvdHRsZWQuY2xvc2VkKSAmJiAobGVhZGluZyA/IHNlbmQoKSA6IHN0YXJ0VGhyb3R0bGUodmFsdWUyKSk7CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgaXNDb21wbGV0ZSA9IHRydWU7CiAgICAgICEodHJhaWxpbmcgJiYgaGFzVmFsdWUgJiYgdGhyb3R0bGVkICYmICF0aHJvdHRsZWQuY2xvc2VkKSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9KSk7CiAgfSk7Cn0KdmFyIGluaXRfdGhyb3R0bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3R0bGUuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9pbm5lckZyb20oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aHJvdHRsZVRpbWUuanMKZnVuY3Rpb24gdGhyb3R0bGVUaW1lKGR1cmF0aW9uLCBzY2hlZHVsZXIsIGNvbmZpZzMpIHsKICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsKICAgIHNjaGVkdWxlciA9IGFzeW5jU2NoZWR1bGVyOwogIH0KICB2YXIgZHVyYXRpb24kID0gdGltZXIoZHVyYXRpb24sIHNjaGVkdWxlcik7CiAgcmV0dXJuIHRocm90dGxlKGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGR1cmF0aW9uJDsKICB9LCBjb25maWczKTsKfQp2YXIgaW5pdF90aHJvdHRsZVRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3R0bGVUaW1lLmpzIigpIHsKICAgIGluaXRfYXN5bmMoKTsKICAgIGluaXRfdGhyb3R0bGUoKTsKICAgIGluaXRfdGltZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aW1lSW50ZXJ2YWwuanMKdmFyIGluaXRfdGltZUludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVJbnRlcnZhbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFdpdGguanMKdmFyIGluaXRfdGltZW91dFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFdpdGguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVzdGFtcC5qcwp2YXIgaW5pdF90aW1lc3RhbXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZXN0YW1wLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3cuanMKdmFyIGluaXRfd2luZG93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvdy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93Q291bnQuanMKdmFyIGluaXRfd2luZG93Q291bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93Q291bnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RpbWUuanMKdmFyIGluaXRfd2luZG93VGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUaW1lLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUb2dnbGUuanMKdmFyIGluaXRfd2luZG93VG9nZ2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RvZ2dsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93V2hlbi5qcwp2YXIgaW5pdF93aW5kb3dXaGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1doZW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpdGhMYXRlc3RGcm9tLmpzCnZhciBpbml0X3dpdGhMYXRlc3RGcm9tID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpdGhMYXRlc3RGcm9tLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy96aXBBbGwuanMKdmFyIGluaXRfemlwQWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3ppcEFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvemlwLmpzCnZhciBpbml0X3ppcDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvemlwLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy96aXBXaXRoLmpzCnZhciBpbml0X3ppcFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvemlwV2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbmRleC5qcwp2YXIgaW5pdF9lc201ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW5kZXguanMiKCkgewogICAgaW5pdF9PYnNlcnZhYmxlKCk7CiAgICBpbml0X0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9vYnNlcnZhYmxlKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lcygpOwogICAgaW5pdF9TdWJqZWN0KCk7CiAgICBpbml0X0JlaGF2aW9yU3ViamVjdCgpOwogICAgaW5pdF9SZXBsYXlTdWJqZWN0KCk7CiAgICBpbml0X0FzeW5jU3ViamVjdCgpOwogICAgaW5pdF9hc2FwKCk7CiAgICBpbml0X2FzeW5jKCk7CiAgICBpbml0X3F1ZXVlKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lKCk7CiAgICBpbml0X1ZpcnR1YWxUaW1lU2NoZWR1bGVyKCk7CiAgICBpbml0X1NjaGVkdWxlcigpOwogICAgaW5pdF9TdWJzY3JpcHRpb24oKTsKICAgIGluaXRfU3Vic2NyaWJlcigpOwogICAgaW5pdF9Ob3RpZmljYXRpb24oKTsKICAgIGluaXRfcGlwZSgpOwogICAgaW5pdF9ub29wKCk7CiAgICBpbml0X2lkZW50aXR5KCk7CiAgICBpbml0X2lzT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9sYXN0VmFsdWVGcm9tKCk7CiAgICBpbml0X2ZpcnN0VmFsdWVGcm9tKCk7CiAgICBpbml0X0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yKCk7CiAgICBpbml0X0VtcHR5RXJyb3IoKTsKICAgIGluaXRfTm90Rm91bmRFcnJvcigpOwogICAgaW5pdF9PYmplY3RVbnN1YnNjcmliZWRFcnJvcigpOwogICAgaW5pdF9TZXF1ZW5jZUVycm9yKCk7CiAgICBpbml0X3RpbWVvdXQoKTsKICAgIGluaXRfVW5zdWJzY3JpcHRpb25FcnJvcigpOwogICAgaW5pdF9iaW5kQ2FsbGJhY2soKTsKICAgIGluaXRfYmluZE5vZGVDYWxsYmFjaygpOwogICAgaW5pdF9jb21iaW5lTGF0ZXN0KCk7CiAgICBpbml0X2NvbmNhdCgpOwogICAgaW5pdF9jb25uZWN0YWJsZSgpOwogICAgaW5pdF9kZWZlcigpOwogICAgaW5pdF9lbXB0eSgpOwogICAgaW5pdF9mb3JrSm9pbigpOwogICAgaW5pdF9mcm9tKCk7CiAgICBpbml0X2Zyb21FdmVudCgpOwogICAgaW5pdF9mcm9tRXZlbnRQYXR0ZXJuKCk7CiAgICBpbml0X2dlbmVyYXRlKCk7CiAgICBpbml0X2lpZigpOwogICAgaW5pdF9pbnRlcnZhbCgpOwogICAgaW5pdF9tZXJnZSgpOwogICAgaW5pdF9uZXZlcigpOwogICAgaW5pdF9vZigpOwogICAgaW5pdF9vbkVycm9yUmVzdW1lTmV4dCgpOwogICAgaW5pdF9wYWlycygpOwogICAgaW5pdF9wYXJ0aXRpb24oKTsKICAgIGluaXRfcmFjZSgpOwogICAgaW5pdF9yYW5nZSgpOwogICAgaW5pdF90aHJvd0Vycm9yKCk7CiAgICBpbml0X3RpbWVyKCk7CiAgICBpbml0X3VzaW5nKCk7CiAgICBpbml0X3ppcCgpOwogICAgaW5pdF9zY2hlZHVsZWQoKTsKICAgIGluaXRfZW1wdHkoKTsKICAgIGluaXRfbmV2ZXIoKTsKICAgIGluaXRfdHlwZXMoKTsKICAgIGluaXRfY29uZmlnKCk7CiAgICBpbml0X2F1ZGl0KCk7CiAgICBpbml0X2F1ZGl0VGltZSgpOwogICAgaW5pdF9idWZmZXIoKTsKICAgIGluaXRfYnVmZmVyQ291bnQoKTsKICAgIGluaXRfYnVmZmVyVGltZSgpOwogICAgaW5pdF9idWZmZXJUb2dnbGUoKTsKICAgIGluaXRfYnVmZmVyV2hlbigpOwogICAgaW5pdF9jYXRjaEVycm9yKCk7CiAgICBpbml0X2NvbWJpbmVBbGwoKTsKICAgIGluaXRfY29tYmluZUxhdGVzdEFsbCgpOwogICAgaW5pdF9jb21iaW5lTGF0ZXN0V2l0aCgpOwogICAgaW5pdF9jb25jYXRBbGwoKTsKICAgIGluaXRfY29uY2F0TWFwKCk7CiAgICBpbml0X2NvbmNhdE1hcFRvKCk7CiAgICBpbml0X2NvbmNhdFdpdGgoKTsKICAgIGluaXRfY29ubmVjdCgpOwogICAgaW5pdF9jb3VudCgpOwogICAgaW5pdF9kZWJvdW5jZSgpOwogICAgaW5pdF9kZWJvdW5jZVRpbWUoKTsKICAgIGluaXRfZGVmYXVsdElmRW1wdHkoKTsKICAgIGluaXRfZGVsYXkoKTsKICAgIGluaXRfZGVsYXlXaGVuKCk7CiAgICBpbml0X2RlbWF0ZXJpYWxpemUoKTsKICAgIGluaXRfZGlzdGluY3QoKTsKICAgIGluaXRfZGlzdGluY3RVbnRpbENoYW5nZWQoKTsKICAgIGluaXRfZGlzdGluY3RVbnRpbEtleUNoYW5nZWQoKTsKICAgIGluaXRfZWxlbWVudEF0KCk7CiAgICBpbml0X2VuZFdpdGgoKTsKICAgIGluaXRfZXZlcnkoKTsKICAgIGluaXRfZXhoYXVzdCgpOwogICAgaW5pdF9leGhhdXN0QWxsKCk7CiAgICBpbml0X2V4aGF1c3RNYXAoKTsKICAgIGluaXRfZXhwYW5kKCk7CiAgICBpbml0X2ZpbHRlcigpOwogICAgaW5pdF9maW5hbGl6ZSgpOwogICAgaW5pdF9maW5kKCk7CiAgICBpbml0X2ZpbmRJbmRleCgpOwogICAgaW5pdF9maXJzdCgpOwogICAgaW5pdF9ncm91cEJ5KCk7CiAgICBpbml0X2lnbm9yZUVsZW1lbnRzKCk7CiAgICBpbml0X2lzRW1wdHkoKTsKICAgIGluaXRfbGFzdCgpOwogICAgaW5pdF9tYXAoKTsKICAgIGluaXRfbWFwVG8oKTsKICAgIGluaXRfbWF0ZXJpYWxpemUoKTsKICAgIGluaXRfbWF4KCk7CiAgICBpbml0X21lcmdlQWxsKCk7CiAgICBpbml0X2ZsYXRNYXAoKTsKICAgIGluaXRfbWVyZ2VNYXAoKTsKICAgIGluaXRfbWVyZ2VNYXBUbygpOwogICAgaW5pdF9tZXJnZVNjYW4oKTsKICAgIGluaXRfbWVyZ2VXaXRoKCk7CiAgICBpbml0X21pbigpOwogICAgaW5pdF9tdWx0aWNhc3QoKTsKICAgIGluaXRfb2JzZXJ2ZU9uKCk7CiAgICBpbml0X29uRXJyb3JSZXN1bWVOZXh0V2l0aCgpOwogICAgaW5pdF9wYWlyd2lzZSgpOwogICAgaW5pdF9wbHVjaygpOwogICAgaW5pdF9wdWJsaXNoKCk7CiAgICBpbml0X3B1Ymxpc2hCZWhhdmlvcigpOwogICAgaW5pdF9wdWJsaXNoTGFzdCgpOwogICAgaW5pdF9wdWJsaXNoUmVwbGF5KCk7CiAgICBpbml0X3JhY2VXaXRoKCk7CiAgICBpbml0X3JlZHVjZSgpOwogICAgaW5pdF9yZXBlYXQoKTsKICAgIGluaXRfcmVwZWF0V2hlbigpOwogICAgaW5pdF9yZXRyeSgpOwogICAgaW5pdF9yZXRyeVdoZW4oKTsKICAgIGluaXRfcmVmQ291bnQoKTsKICAgIGluaXRfc2FtcGxlKCk7CiAgICBpbml0X3NhbXBsZVRpbWUoKTsKICAgIGluaXRfc2NhbigpOwogICAgaW5pdF9zZXF1ZW5jZUVxdWFsKCk7CiAgICBpbml0X3NoYXJlKCk7CiAgICBpbml0X3NoYXJlUmVwbGF5KCk7CiAgICBpbml0X3NpbmdsZSgpOwogICAgaW5pdF9za2lwKCk7CiAgICBpbml0X3NraXBMYXN0KCk7CiAgICBpbml0X3NraXBVbnRpbCgpOwogICAgaW5pdF9za2lwV2hpbGUoKTsKICAgIGluaXRfc3RhcnRXaXRoKCk7CiAgICBpbml0X3N1YnNjcmliZU9uKCk7CiAgICBpbml0X3N3aXRjaEFsbCgpOwogICAgaW5pdF9zd2l0Y2hNYXAoKTsKICAgIGluaXRfc3dpdGNoTWFwVG8oKTsKICAgIGluaXRfc3dpdGNoU2NhbigpOwogICAgaW5pdF90YWtlKCk7CiAgICBpbml0X3Rha2VMYXN0KCk7CiAgICBpbml0X3Rha2VVbnRpbCgpOwogICAgaW5pdF90YWtlV2hpbGUoKTsKICAgIGluaXRfdGFwKCk7CiAgICBpbml0X3Rocm90dGxlKCk7CiAgICBpbml0X3Rocm90dGxlVGltZSgpOwogICAgaW5pdF90aHJvd0lmRW1wdHkoKTsKICAgIGluaXRfdGltZUludGVydmFsKCk7CiAgICBpbml0X3RpbWVvdXQoKTsKICAgIGluaXRfdGltZW91dFdpdGgoKTsKICAgIGluaXRfdGltZXN0YW1wKCk7CiAgICBpbml0X3RvQXJyYXkoKTsKICAgIGluaXRfd2luZG93KCk7CiAgICBpbml0X3dpbmRvd0NvdW50KCk7CiAgICBpbml0X3dpbmRvd1RpbWUoKTsKICAgIGluaXRfd2luZG93VG9nZ2xlKCk7CiAgICBpbml0X3dpbmRvd1doZW4oKTsKICAgIGluaXRfd2l0aExhdGVzdEZyb20oKTsKICAgIGluaXRfemlwQWxsKCk7CiAgICBpbml0X3ppcFdpdGgoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wYXJ0aXRpb24uanMKdmFyIGluaXRfcGFydGl0aW9uMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wYXJ0aXRpb24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JhY2UuanMKdmFyIGluaXRfcmFjZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9vcGVyYXRvcnMvaW5kZXguanMKdmFyIGluaXRfb3BlcmF0b3JzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvb3BlcmF0b3JzL2luZGV4LmpzIigpIHsKICAgIGluaXRfYXVkaXQoKTsKICAgIGluaXRfYXVkaXRUaW1lKCk7CiAgICBpbml0X2J1ZmZlcigpOwogICAgaW5pdF9idWZmZXJDb3VudCgpOwogICAgaW5pdF9idWZmZXJUaW1lKCk7CiAgICBpbml0X2J1ZmZlclRvZ2dsZSgpOwogICAgaW5pdF9idWZmZXJXaGVuKCk7CiAgICBpbml0X2NhdGNoRXJyb3IoKTsKICAgIGluaXRfY29tYmluZUFsbCgpOwogICAgaW5pdF9jb21iaW5lTGF0ZXN0QWxsKCk7CiAgICBpbml0X2NvbWJpbmVMYXRlc3QyKCk7CiAgICBpbml0X2NvbWJpbmVMYXRlc3RXaXRoKCk7CiAgICBpbml0X2NvbmNhdDIoKTsKICAgIGluaXRfY29uY2F0QWxsKCk7CiAgICBpbml0X2NvbmNhdE1hcCgpOwogICAgaW5pdF9jb25jYXRNYXBUbygpOwogICAgaW5pdF9jb25jYXRXaXRoKCk7CiAgICBpbml0X2Nvbm5lY3QoKTsKICAgIGluaXRfY291bnQoKTsKICAgIGluaXRfZGVib3VuY2UoKTsKICAgIGluaXRfZGVib3VuY2VUaW1lKCk7CiAgICBpbml0X2RlZmF1bHRJZkVtcHR5KCk7CiAgICBpbml0X2RlbGF5KCk7CiAgICBpbml0X2RlbGF5V2hlbigpOwogICAgaW5pdF9kZW1hdGVyaWFsaXplKCk7CiAgICBpbml0X2Rpc3RpbmN0KCk7CiAgICBpbml0X2Rpc3RpbmN0VW50aWxDaGFuZ2VkKCk7CiAgICBpbml0X2Rpc3RpbmN0VW50aWxLZXlDaGFuZ2VkKCk7CiAgICBpbml0X2VsZW1lbnRBdCgpOwogICAgaW5pdF9lbmRXaXRoKCk7CiAgICBpbml0X2V2ZXJ5KCk7CiAgICBpbml0X2V4aGF1c3QoKTsKICAgIGluaXRfZXhoYXVzdEFsbCgpOwogICAgaW5pdF9leGhhdXN0TWFwKCk7CiAgICBpbml0X2V4cGFuZCgpOwogICAgaW5pdF9maWx0ZXIoKTsKICAgIGluaXRfZmluYWxpemUoKTsKICAgIGluaXRfZmluZCgpOwogICAgaW5pdF9maW5kSW5kZXgoKTsKICAgIGluaXRfZmlyc3QoKTsKICAgIGluaXRfZ3JvdXBCeSgpOwogICAgaW5pdF9pZ25vcmVFbGVtZW50cygpOwogICAgaW5pdF9pc0VtcHR5KCk7CiAgICBpbml0X2xhc3QoKTsKICAgIGluaXRfbWFwKCk7CiAgICBpbml0X21hcFRvKCk7CiAgICBpbml0X21hdGVyaWFsaXplKCk7CiAgICBpbml0X21heCgpOwogICAgaW5pdF9tZXJnZTIoKTsKICAgIGluaXRfbWVyZ2VBbGwoKTsKICAgIGluaXRfZmxhdE1hcCgpOwogICAgaW5pdF9tZXJnZU1hcCgpOwogICAgaW5pdF9tZXJnZU1hcFRvKCk7CiAgICBpbml0X21lcmdlU2NhbigpOwogICAgaW5pdF9tZXJnZVdpdGgoKTsKICAgIGluaXRfbWluKCk7CiAgICBpbml0X211bHRpY2FzdCgpOwogICAgaW5pdF9vYnNlcnZlT24oKTsKICAgIGluaXRfb25FcnJvclJlc3VtZU5leHRXaXRoKCk7CiAgICBpbml0X3BhaXJ3aXNlKCk7CiAgICBpbml0X3BhcnRpdGlvbjIoKTsKICAgIGluaXRfcGx1Y2soKTsKICAgIGluaXRfcHVibGlzaCgpOwogICAgaW5pdF9wdWJsaXNoQmVoYXZpb3IoKTsKICAgIGluaXRfcHVibGlzaExhc3QoKTsKICAgIGluaXRfcHVibGlzaFJlcGxheSgpOwogICAgaW5pdF9yYWNlMigpOwogICAgaW5pdF9yYWNlV2l0aCgpOwogICAgaW5pdF9yZWR1Y2UoKTsKICAgIGluaXRfcmVwZWF0KCk7CiAgICBpbml0X3JlcGVhdFdoZW4oKTsKICAgIGluaXRfcmV0cnkoKTsKICAgIGluaXRfcmV0cnlXaGVuKCk7CiAgICBpbml0X3JlZkNvdW50KCk7CiAgICBpbml0X3NhbXBsZSgpOwogICAgaW5pdF9zYW1wbGVUaW1lKCk7CiAgICBpbml0X3NjYW4oKTsKICAgIGluaXRfc2VxdWVuY2VFcXVhbCgpOwogICAgaW5pdF9zaGFyZSgpOwogICAgaW5pdF9zaGFyZVJlcGxheSgpOwogICAgaW5pdF9zaW5nbGUoKTsKICAgIGluaXRfc2tpcCgpOwogICAgaW5pdF9za2lwTGFzdCgpOwogICAgaW5pdF9za2lwVW50aWwoKTsKICAgIGluaXRfc2tpcFdoaWxlKCk7CiAgICBpbml0X3N0YXJ0V2l0aCgpOwogICAgaW5pdF9zdWJzY3JpYmVPbigpOwogICAgaW5pdF9zd2l0Y2hBbGwoKTsKICAgIGluaXRfc3dpdGNoTWFwKCk7CiAgICBpbml0X3N3aXRjaE1hcFRvKCk7CiAgICBpbml0X3N3aXRjaFNjYW4oKTsKICAgIGluaXRfdGFrZSgpOwogICAgaW5pdF90YWtlTGFzdCgpOwogICAgaW5pdF90YWtlVW50aWwoKTsKICAgIGluaXRfdGFrZVdoaWxlKCk7CiAgICBpbml0X3RhcCgpOwogICAgaW5pdF90aHJvdHRsZSgpOwogICAgaW5pdF90aHJvdHRsZVRpbWUoKTsKICAgIGluaXRfdGhyb3dJZkVtcHR5KCk7CiAgICBpbml0X3RpbWVJbnRlcnZhbCgpOwogICAgaW5pdF90aW1lb3V0KCk7CiAgICBpbml0X3RpbWVvdXRXaXRoKCk7CiAgICBpbml0X3RpbWVzdGFtcCgpOwogICAgaW5pdF90b0FycmF5KCk7CiAgICBpbml0X3dpbmRvdygpOwogICAgaW5pdF93aW5kb3dDb3VudCgpOwogICAgaW5pdF93aW5kb3dUaW1lKCk7CiAgICBpbml0X3dpbmRvd1RvZ2dsZSgpOwogICAgaW5pdF93aW5kb3dXaGVuKCk7CiAgICBpbml0X3dpdGhMYXRlc3RGcm9tKCk7CiAgICBpbml0X3ppcDIoKTsKICAgIGluaXRfemlwQWxsKCk7CiAgICBpbml0X3ppcFdpdGgoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5wbHVnaW5zLnJ4anMuanMKdmFyIHNtYXJ0cnhfcGx1Z2luc19yeGpzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoc21hcnRyeF9wbHVnaW5zX3J4anNfZXhwb3J0cywgewogIE9ic2VydmFibGU6ICgpID0+IE9ic2VydmFibGUsCiAgUmVwbGF5U3ViamVjdDogKCkgPT4gUmVwbGF5U3ViamVjdCwKICBTdWJqZWN0OiAoKSA9PiBTdWJqZWN0LAogIFN1YnNjcmlwdGlvbjogKCkgPT4gU3Vic2NyaXB0aW9uLAogIGZyb206ICgpID0+IGZyb20sCiAgZnJvbUV2ZW50OiAoKSA9PiBmcm9tRXZlbnQsCiAgb2Y6ICgpID0+IG9mLAogIG9wczogKCkgPT4gb3BzCn0pOwp2YXIgb3BzOwp2YXIgaW5pdF9zbWFydHJ4X3BsdWdpbnNfcnhqcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5wbHVnaW5zLnJ4anMuanMiKCkgewogICAgaW5pdF9lc201KCk7CiAgICBpbml0X29wZXJhdG9ycygpOwogICAgb3BzID0gewogICAgICBidWZmZXIsCiAgICAgIGJ1ZmZlckNvdW50LAogICAgICBidWZmZXJUaW1lLAogICAgICBkZWJvdW5jZSwKICAgICAgZGVib3VuY2VUaW1lLAogICAgICBmaWx0ZXIsCiAgICAgIG1hcDogbWFwMiwKICAgICAgc3RhcnRXaXRoLAogICAgICB0YWtlVW50aWwsCiAgICAgIHRocm90dGxlVGltZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5jbGFzc2VzLm9ic2VydmFibGVtYXAuanMKdmFyIE9ic2VydmFibGVtYXA7CnZhciBpbml0X3NtYXJ0cnhfY2xhc3Nlc19vYnNlcnZhYmxlbWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LmNsYXNzZXMub2JzZXJ2YWJsZW1hcC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0cnhfcGx1Z2lucygpOwogICAgaW5pdF9zbWFydHJ4X3BsdWdpbnNfcnhqcygpOwogICAgT2JzZXJ2YWJsZW1hcCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5vYnNlcnZhYmxlRXZlbnRFbWl0dGVyQnVuZGxlQXJyYXkgPSBuZXcgQXJyYXkoKTsKICAgICAgICB0aGlzLm9ic2VydmFibGVFdmVudFRhcmdldEJ1bmRsZUFycmF5ID0gbmV3IEFycmF5KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNyZWF0ZXMgYSBob3Qgc3ViamVjdCBpZiBub3QgeWV0IHJlZ2lzdGVyZWQgZm9yIHRoZSBldmVudC4KICAgICAgICogSW4gY2FzZSBldmVudCBoYXMgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSB0aGUgc2FtZSBvYnNlcnZhYmxlIGlzIHJldHVybmVkLgogICAgICAgKi8KICAgICAgZ2V0U3ViamVjdEZvckVtaXR0ZXJFdmVudChlbWl0dGVyQXJnLCBldmVudEFyZykgewogICAgICAgIGNvbnN0IGV4aXN0aW5nQnVuZGxlID0gdGhpcy5vYnNlcnZhYmxlRXZlbnRFbWl0dGVyQnVuZGxlQXJyYXkuZmluZCgoYnVuZGxlQXJnKSA9PiB7CiAgICAgICAgICByZXR1cm4gYnVuZGxlQXJnLmV2ZW50UmVmID09PSBlbWl0dGVyQXJnICYmIGJ1bmRsZUFyZy5ldmVudCA9PT0gZXZlbnRBcmc7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGV4aXN0aW5nQnVuZGxlKSB7CiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdCdW5kbGUuc3ViamVjdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgZW1pdHRlck9ic2VydmFibGUgPSBmcm9tRXZlbnQoZW1pdHRlckFyZywgZXZlbnRBcmcpOwogICAgICAgICAgY29uc3QgZW1pdHRlclN1YmplY3QgPSBuZXcgU3ViamVjdCgpOwogICAgICAgICAgZW1pdHRlck9ic2VydmFibGUuc3Vic2NyaWJlKGVtaXR0ZXJTdWJqZWN0KTsKICAgICAgICAgIGNvbnN0IG5ld0J1bmRsZSA9IHsKICAgICAgICAgICAgc3ViamVjdDogZW1pdHRlclN1YmplY3QsCiAgICAgICAgICAgIGV2ZW50UmVmOiBlbWl0dGVyQXJnLAogICAgICAgICAgICBldmVudDogZXZlbnRBcmcKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLm9ic2VydmFibGVFdmVudEVtaXR0ZXJCdW5kbGVBcnJheS5wdXNoKG5ld0J1bmRsZSk7CiAgICAgICAgICByZXR1cm4gbmV3QnVuZGxlLnN1YmplY3Q7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldFN1YmplY3RGb3JFdmVudFRhcmdldChldmVudFRhcmdldEFyZywgZXZlbnROYW1lQXJnKSB7CiAgICAgICAgY29uc3QgZXhpc3RpbmdCdW5kbGUgPSB0aGlzLm9ic2VydmFibGVFdmVudFRhcmdldEJ1bmRsZUFycmF5LmZpbmQoKGJ1bmRsZUFyZykgPT4gewogICAgICAgICAgcmV0dXJuIGJ1bmRsZUFyZy5ldmVudFJlZiA9PT0gZXZlbnRUYXJnZXRBcmcgJiYgYnVuZGxlQXJnLmV2ZW50ID09PSBldmVudE5hbWVBcmc7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGV4aXN0aW5nQnVuZGxlKSB7CiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdCdW5kbGUuc3ViamVjdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgZW1pdHRlclN1YmplY3QgPSBuZXcgU3ViamVjdCgpOwogICAgICAgICAgY29uc3QgbmV3QnVuZGxlID0gewogICAgICAgICAgICBzdWJqZWN0OiBlbWl0dGVyU3ViamVjdCwKICAgICAgICAgICAgZXZlbnRSZWY6IGV2ZW50VGFyZ2V0QXJnLAogICAgICAgICAgICBldmVudDogZXZlbnROYW1lQXJnCiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5vYnNlcnZhYmxlRXZlbnRUYXJnZXRCdW5kbGVBcnJheS5wdXNoKG5ld0J1bmRsZSk7CiAgICAgICAgICByZXR1cm4gbmV3QnVuZGxlLnN1YmplY3Q7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LmNsYXNzZXMub2JzZXJ2YWJsZWludGFrZS5qcwp2YXIgT2JzZXJ2YWJsZUludGFrZTsKdmFyIGluaXRfc21hcnRyeF9jbGFzc2VzX29ic2VydmFibGVpbnRha2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJ4QDMuMC4xMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyeC9kaXN0X3RzL3NtYXJ0cnguY2xhc3Nlcy5vYnNlcnZhYmxlaW50YWtlLmpzIigpIHsKICAgIGluaXRfc21hcnRyeF9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0cnhfcGx1Z2luc19yeGpzKCk7CiAgICBPYnNlcnZhYmxlSW50YWtlID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLm9ic2VydmFibGVGdW5jdGlvbnMgPSB7CiAgICAgICAgICBuZXh0OiAocGF5bG9hZEFyZykgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIGNvbXBsZXRlOiAocGF5bG9hZEFyZykgPT4gewogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgdGhpcy5nZW5lcmF0b3IgPSBudWxsOwogICAgICAgIHRoaXMuYnVmZmVyZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnBheWxvYWRCdWZmZXIgPSBbXTsKICAgICAgICB0aGlzLm9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXJBcmcpID0+IHsKICAgICAgICAgIHRoaXMub2JzZXJ2YWJsZUZ1bmN0aW9ucy5uZXh0ID0gKC4uLmFyZ3MpID0+IHsKICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyQXJnLm5leHQoYXJncyk7CiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLmNvbXBsZXRlID0gKCkgPT4gewogICAgICAgICAgICB0aGlzLmNvbXBsZXRlZERlZmZlcmVkLnJlc29sdmUoKTsKICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyQXJnLmNvbXBsZXRlKCk7CiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICAgIHRoaXMuY29tcGxldGVkRGVmZmVyZWQgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICB0aGlzLmNvbXBsZXRlZCA9IHRoaXMuY29tcGxldGVkRGVmZmVyZWQucHJvbWlzZTsKICAgICAgfQogICAgICBzZXRPYnNlcnZhYmxlKG9ic2VydmFibGVGdW5jKSB7CiAgICAgICAgdGhpcy5vYnNlcnZhYmxlID0gb2JzZXJ2YWJsZUZ1bmM7CiAgICAgIH0KICAgICAgcHVzaChwYXlsb2FkQXJnKSB7CiAgICAgICAgaWYgKHRoaXMuYnVmZmVyZWQpIHsKICAgICAgICAgIHRoaXMucGF5bG9hZEJ1ZmZlci5wdXNoKHBheWxvYWRBcmcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmludGVybmFsUHVzaChwYXlsb2FkQXJnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHB1c2hlcyBtYW55IHBheWxvYWRzIGFzIGFycmF5CiAgICAgICAqIEBwYXJhbSBwYXlsb2FkQXJnQXJyYXkKICAgICAgICovCiAgICAgIHB1c2hNYW55KHBheWxvYWRBcmdBcnJheSkgewogICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBwYXlsb2FkQXJnQXJyYXkpIHsKICAgICAgICAgIHRoaXMucHVzaChpdGVtKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHNldHMgYSBnZW5lcmF0b3IgdG8gcXVlcnkgdGhlIG5leHQgcHVzaGVkIHZhbHVlCiAgICAgICAqIEBwYXJhbSBnZW5lcmF0b3JBcmcKICAgICAgICovCiAgICAgIHNldEdlbmVyYXRvcihnZW5lcmF0b3JBcmcpIHsKICAgICAgICB0aGlzLmdlbmVyYXRvciA9IGdlbmVyYXRvckFyZzsKICAgICAgfQogICAgICBtYWtlQnVmZmVyZWQoKSB7CiAgICAgICAgdGhpcy5idWZmZXJlZCA9IHRydWU7CiAgICAgIH0KICAgICAgc3Vic2NyaWJlKC4uLmFyZ3MpIHsKICAgICAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSguLi5hcmdzKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVxdWVzdCB0aGUgbmV4dCB2YWx1ZXMgaW4gdGhlIHF1YW50aXR5IHNwZWNpZmllZAogICAgICAgKiBAcGFyYW0gaG93TWFueUFyZyBpZiBhIGdlbmVyYXRvciBpcyBzZXQsIG9mIGEgYnVmZmVyIGV4aXN0cywgdGhpcyBhbGxvd3MgcmV0cmlldmluZyB2YWx1ZXMKICAgICAgICovCiAgICAgIHJlcXVlc3QoaG93TWFueUFyZykgewogICAgICAgIGlmIChob3dNYW55QXJnID09PSAwKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSAhPT0gaG93TWFueUFyZzsgaTExKyspIHsKICAgICAgICAgICAgaWYgKHRoaXMucGF5bG9hZEJ1ZmZlci5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbFB1c2godGhpcy5wYXlsb2FkQnVmZmVyLnNoaWZ0KCkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnN0IG5leHRQYXlsb2FkID0gdGhpcy5nZW5lcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxQdXNoKG5leHRQYXlsb2FkLnZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogc2lnbmFscyB0aGUgY29tcGxldGlvbiBvZiB0aGlzIG9ic2VydmFibGUKICAgICAgICovCiAgICAgIHNpZ25hbENvbXBsZXRlKCkgewogICAgICAgIHRoaXMub2JzZXJ2YWJsZUZ1bmN0aW9ucy5jb21wbGV0ZSgpOwogICAgICB9CiAgICAgIGludGVybmFsUHVzaChwYXlsb2FkQXJnKSB7CiAgICAgICAgdGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLm5leHQocGF5bG9hZEFyZyk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJ4QDMuMC4xMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyeC9kaXN0X3RzL3NtYXJ0cnguZnVuY3Rpb25zLmpzCmZ1bmN0aW9uIGZyb21TdHJlYW1XaXRoQmFja3ByZXNzdXJlKHN0cmVhbSkgewogIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4gewogICAgY29uc3QgcGF1c2VTdHJlYW0gPSAoKSA9PiBzdHJlYW0ucGF1c2UoKTsKICAgIGNvbnN0IHJlc3VtZVN0cmVhbSA9ICgpID0+IHByb2Nlc3MubmV4dFRpY2soKCkgPT4gc3RyZWFtLnJlc3VtZSgpKTsKICAgIGNvbnN0IG9uRGF0YSA9IChkYXRhKSA9PiB7CiAgICAgIHBhdXNlU3RyZWFtKCk7CiAgICAgIHN1YnNjcmliZXIubmV4dChkYXRhKTsKICAgICAgcmVzdW1lU3RyZWFtKCk7CiAgICB9OwogICAgc3RyZWFtLm9uKCJkYXRhIiwgb25EYXRhKTsKICAgIHN0cmVhbS5vbigiZXJyb3IiLCAoZXJyb3IpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpKTsKICAgIHN0cmVhbS5vbigiZW5kIiwgKCkgPT4gc3Vic2NyaWJlci5jb21wbGV0ZSgpKTsKICAgIHN0cmVhbS5vbigiY2xvc2UiLCAoKSA9PiBzdWJzY3JpYmVyLmNvbXBsZXRlKCkpOwogICAgcmV0dXJuICgpID0+IHsKICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJkYXRhIiwgb25EYXRhKTsKICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsIHN1YnNjcmliZXIuZXJyb3IpOwogICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoImVuZCIsIHN1YnNjcmliZXIuY29tcGxldGUpOwogICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoImNsb3NlIiwgc3Vic2NyaWJlci5jb21wbGV0ZSk7CiAgICB9OwogIH0pOwp9CnZhciBpbml0X3NtYXJ0cnhfZnVuY3Rpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LmZ1bmN0aW9ucy5qcyIoKSB7CiAgICBpbml0X2VzbTUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czIgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMiwgewogIE9ic2VydmFibGVJbnRha2U6ICgpID0+IE9ic2VydmFibGVJbnRha2UsCiAgT2JzZXJ2YWJsZW1hcDogKCkgPT4gT2JzZXJ2YWJsZW1hcCwKICBmcm9tU3RyZWFtV2l0aEJhY2twcmVzc3VyZTogKCkgPT4gZnJvbVN0cmVhbVdpdGhCYWNrcHJlc3N1cmUsCiAgcnhqczogKCkgPT4gc21hcnRyeF9wbHVnaW5zX3J4anNfZXhwb3J0cwp9KTsKdmFyIGluaXRfZGlzdF90czIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJ4QDMuMC4xMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyeC9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRyeF9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0cnhfY2xhc3Nlc19vYnNlcnZhYmxlbWFwKCk7CiAgICBpbml0X3NtYXJ0cnhfY2xhc3Nlc19vYnNlcnZhYmxlaW50YWtlKCk7CiAgICBpbml0X3NtYXJ0cnhfZnVuY3Rpb25zKCk7CiAgICBpbml0X3NtYXJ0cnhfcGx1Z2luc19yeGpzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3Byb3BlcnR5LmpzCmZ1bmN0aW9uIG41KHQ5KSB7CiAgcmV0dXJuIChlMTEsIG8xMykgPT4gIm9iamVjdCIgPT0gdHlwZW9mIG8xMyA/IHI0KHQ5LCBlMTEsIG8xMykgOiAoKHQxMCwgZTEyLCBvMTQpID0+IHsKICAgIGNvbnN0IHIxMSA9IGUxMi5oYXNPd25Qcm9wZXJ0eShvMTQpOwogICAgcmV0dXJuIGUxMi5jb25zdHJ1Y3Rvci5jcmVhdGVQcm9wZXJ0eShvMTQsIHQxMCksIHIxMSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZTEyLCBvMTQpIDogdm9pZCAwOwogIH0pKHQ5LCBlMTEsIG8xMyk7Cn0KdmFyIG82LCByNDsKdmFyIGluaXRfcHJvcGVydHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3Byb3BlcnR5LmpzIigpIHsKICAgIGluaXRfcmVhY3RpdmVfZWxlbWVudCgpOwogICAgbzYgPSB7IGF0dHJpYnV0ZTogdHJ1ZSwgdHlwZTogU3RyaW5nLCBjb252ZXJ0ZXI6IHUsIHJlZmxlY3Q6IGZhbHNlLCBoYXNDaGFuZ2VkOiBmIH0sIHI0ID0gKHQ5ID0gbzYsIGUxMSwgcjExKSA9PiB7CiAgICAgIGNvbnN0IHsga2luZDogbjEzLCBtZXRhZGF0YTogaTExIH0gPSByMTE7CiAgICAgIGxldCBzOSA9IGdsb2JhbFRoaXMubGl0UHJvcGVydHlNZXRhZGF0YS5nZXQoaTExKTsKICAgICAgaWYgKHZvaWQgMCA9PT0gczkgJiYgZ2xvYmFsVGhpcy5saXRQcm9wZXJ0eU1ldGFkYXRhLnNldChpMTEsIHM5ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSksICJzZXR0ZXIiID09PSBuMTMgJiYgKCh0OSA9IE9iamVjdC5jcmVhdGUodDkpKS53cmFwcGVkID0gdHJ1ZSksIHM5LnNldChyMTEubmFtZSwgdDkpLCAiYWNjZXNzb3IiID09PSBuMTMpIHsKICAgICAgICBjb25zdCB7IG5hbWU6IG8xMyB9ID0gcjExOwogICAgICAgIHJldHVybiB7IHNldChyMTIpIHsKICAgICAgICAgIGNvbnN0IG4xNCA9IGUxMS5nZXQuY2FsbCh0aGlzKTsKICAgICAgICAgIGUxMS5zZXQuY2FsbCh0aGlzLCByMTIpLCB0aGlzLnJlcXVlc3RVcGRhdGUobzEzLCBuMTQsIHQ5LCB0cnVlLCByMTIpOwogICAgICAgIH0sIGluaXQoZTEyKSB7CiAgICAgICAgICByZXR1cm4gdm9pZCAwICE9PSBlMTIgJiYgdGhpcy5DKG8xMywgdm9pZCAwLCB0OSwgZTEyKSwgZTEyOwogICAgICAgIH0gfTsKICAgICAgfQogICAgICBpZiAoInNldHRlciIgPT09IG4xMykgewogICAgICAgIGNvbnN0IHsgbmFtZTogbzEzIH0gPSByMTE7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHIxMikgewogICAgICAgICAgY29uc3QgbjE0ID0gdGhpc1tvMTNdOwogICAgICAgICAgZTExLmNhbGwodGhpcywgcjEyKSwgdGhpcy5yZXF1ZXN0VXBkYXRlKG8xMywgbjE0LCB0OSwgdHJ1ZSwgcjEyKTsKICAgICAgICB9OwogICAgICB9CiAgICAgIHRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBkZWNvcmF0b3IgbG9jYXRpb246ICIgKyBuMTMpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RlY29yYXRvcnMvcHJvcGVydHkuanMKdmFyIGluaXRfcHJvcGVydHkyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGVjb3JhdG9ycy9wcm9wZXJ0eS5qcyIoKSB7CiAgICBpbml0X3Byb3BlcnR5KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY29sb3JzLmpzCnZhciBpbml0X2RvbXRvb2xzX2NvbG9ycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jb2xvcnMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRkZWxheUAzLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRkZWxheS9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMzID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czMsIHsKICBUaW1lb3V0OiAoKSA9PiBUaW1lb3V0LAogIGRlbGF5Rm9yOiAoKSA9PiBkZWxheUZvciwKICBkZWxheUZvclJhbmRvbTogKCkgPT4gZGVsYXlGb3JSYW5kb20KfSk7CnZhciBkZWxheUZvciwgZGVsYXlGb3JSYW5kb20sIFRpbWVvdXQ7CnZhciBpbml0X2Rpc3RfdHMzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRkZWxheUAzLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRkZWxheS9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGlzdF90cygpOwogICAgZGVsYXlGb3IgPSBhc3luYyAodGltZUluTWlsbGlzZWNvbmRBcmcsIHBhc3NPbkFyZywgdW5yZWZlZEFyZyA9IGZhbHNlKSA9PiB7CiAgICAgIGNvbnN0IHRpbWVvdXQyID0gbmV3IFRpbWVvdXQodGltZUluTWlsbGlzZWNvbmRBcmcsIG51bGwsIHVucmVmZWRBcmcpOwogICAgICBhd2FpdCB0aW1lb3V0Mi5wcm9taXNlOwogICAgICByZXR1cm4gcGFzc09uQXJnOwogICAgfTsKICAgIGRlbGF5Rm9yUmFuZG9tID0gYXN5bmMgKHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnLCB0aW1lTWF4SW5NaWxsaXNlY29uZEFyZywgcGFzc09uQXJnLCB1bnJlZmVkQXJnID0gZmFsc2UpID0+IHsKICAgICAgYXdhaXQgZGVsYXlGb3IoTWF0aC5yYW5kb20oKSAqICh0aW1lTWF4SW5NaWxsaXNlY29uZEFyZyAtIHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnKSArIHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnLCBudWxsLCB1bnJlZmVkQXJnKTsKICAgICAgcmV0dXJuIHBhc3NPbkFyZzsKICAgIH07CiAgICBUaW1lb3V0ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih0aW1lSW5NaWxsaXNlY29uZEFyZywgcGFzc09uLCB1bnJlZmVkQXJnID0gZmFsc2UpIHsKICAgICAgICB0aGlzLl9jYW5jZWxsZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnRpbWVvdXRJbk1pbGxpcyA9IHRpbWVJbk1pbGxpc2Vjb25kQXJnOwogICAgICAgIHRoaXMuX2RlZmVycmVkID0gZGVmZXIoKTsKICAgICAgICB0aGlzLnByb21pc2UgPSB0aGlzLl9kZWZlcnJlZC5wcm9taXNlOwogICAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGlmICghdGhpcy5fY2FuY2VsbGVkKSB7CiAgICAgICAgICAgIHRoaXMuX2RlZmVycmVkLnJlc29sdmUocGFzc09uKTsKICAgICAgICAgIH0KICAgICAgICB9LCB0aW1lSW5NaWxsaXNlY29uZEFyZyk7CiAgICAgICAgdGhpcy5zdGFydGVkID0gRGF0ZS5ub3coKTsKICAgICAgICBpZiAodW5yZWZlZEFyZykgewogICAgICAgICAgdGhpcy5tYWtlVW5yZWZlZCgpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogdW5yZWZmaW5nIGEgdGltZW91dCBjYXVzZXMgdGhlIG5vZGUgcHJvY2VzcyB0byBub3Qgd2FpdCBmb3IgY29tcGxldGlvbiBiZWZvcmUgZXhpdAogICAgICAgKi8KICAgICAgbWFrZVVucmVmZWQoKSB7CiAgICAgICAgdGhpcy5fdGltZW91dC51bnJlZigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjYW5jZWxzIHRoZSB0aW1lcgogICAgICAgKi8KICAgICAgY2FuY2VsKCkgewogICAgICAgIHRoaXMuX2NhbmNlbGxlZCA9IHRydWU7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpOwogICAgICB9CiAgICAgIGdldFRpbWVMZWZ0KCkgewogICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc3RhcnRlZCArIHRoaXMudGltZW91dEluTWlsbGlzIC0gRGF0ZS5ub3coKTsKICAgICAgICByZXR1cm4gcmVzdWx0ID4gMCA/IHJlc3VsdCA6IDA7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3QtaW50ZXJmYWNlc0AzLjAuMTkvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC1pbnRlcmZhY2VzL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czQgPSB7fTsKdmFyIGluaXRfZGlzdF90czQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3QtaW50ZXJmYWNlc0AzLjAuMTkvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC1pbnRlcmZhY2VzL2Rpc3RfdHMvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZXNjYXBlLXN0cmluZy1yZWdleHBANS4wLjAvbm9kZV9tb2R1bGVzL2VzY2FwZS1zdHJpbmctcmVnZXhwL2luZGV4LmpzCmZ1bmN0aW9uIGVzY2FwZVN0cmluZ1JlZ2V4cChzdHJpbmczKSB7CiAgaWYgKHR5cGVvZiBzdHJpbmczICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBzdHJpbmciKTsKICB9CiAgcmV0dXJuIHN0cmluZzMucmVwbGFjZSgvW3xcXHt9KClbXF1eJCsqPy5dL2csICJcXCQmIikucmVwbGFjZSgvLS9nLCAiXFx4MmQiKTsKfQp2YXIgaW5pdF9lc2NhcGVfc3RyaW5nX3JlZ2V4cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2VzY2FwZS1zdHJpbmctcmVnZXhwQDUuMC4wL25vZGVfbW9kdWxlcy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tYXRjaGVyQDUuMC4wL25vZGVfbW9kdWxlcy9tYXRjaGVyL2luZGV4LmpzCnZhciBtYXRjaGVyX2V4cG9ydHMgPSB7fTsKX19leHBvcnQobWF0Y2hlcl9leHBvcnRzLCB7CiAgaXNNYXRjaDogKCkgPT4gaXNNYXRjaCwKICBtYXRjaGVyOiAoKSA9PiBtYXRjaGVyCn0pOwpmdW5jdGlvbiBtYXRjaGVyKGlucHV0cywgcGF0dGVybnMyLCBvcHRpb25zKSB7CiAgcmV0dXJuIGJhc2VNYXRjaGVyKGlucHV0cywgcGF0dGVybnMyLCBvcHRpb25zLCBmYWxzZSk7Cn0KZnVuY3Rpb24gaXNNYXRjaChpbnB1dHMsIHBhdHRlcm5zMiwgb3B0aW9ucykgewogIHJldHVybiBiYXNlTWF0Y2hlcihpbnB1dHMsIHBhdHRlcm5zMiwgb3B0aW9ucywgdHJ1ZSkubGVuZ3RoID4gMDsKfQp2YXIgcmVnZXhwQ2FjaGUsIHNhbml0aXplQXJyYXksIG1ha2VSZWdleHAsIGJhc2VNYXRjaGVyOwp2YXIgaW5pdF9tYXRjaGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWF0Y2hlckA1LjAuMC9ub2RlX21vZHVsZXMvbWF0Y2hlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2VzY2FwZV9zdHJpbmdfcmVnZXhwKCk7CiAgICByZWdleHBDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBzYW5pdGl6ZUFycmF5ID0gKGlucHV0LCBpbnB1dE5hbWUpID0+IHsKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSkgewogICAgICAgIHN3aXRjaCAodHlwZW9mIGlucHV0KSB7CiAgICAgICAgICBjYXNlICJzdHJpbmciOgogICAgICAgICAgICBpbnB1dCA9IFtpbnB1dF07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAidW5kZWZpbmVkIjoKICAgICAgICAgICAgaW5wdXQgPSBbXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAnJHtpbnB1dE5hbWV9JyB0byBiZSBhIHN0cmluZyBvciBhbiBhcnJheSwgYnV0IGdvdCBhIHR5cGUgb2YgJyR7dHlwZW9mIGlucHV0fSdgKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGlucHV0LmZpbHRlcigoc3RyaW5nMykgPT4gewogICAgICAgIGlmICh0eXBlb2Ygc3RyaW5nMyAhPT0gInN0cmluZyIpIHsKICAgICAgICAgIGlmICh0eXBlb2Ygc3RyaW5nMyA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgJyR7aW5wdXROYW1lfScgdG8gYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncywgYnV0IGZvdW5kIGEgdHlwZSBvZiAnJHt0eXBlb2Ygc3RyaW5nM30nIGluIHRoZSBhcnJheWApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSk7CiAgICB9OwogICAgbWFrZVJlZ2V4cCA9IChwYXR0ZXJuLCBvcHRpb25zKSA9PiB7CiAgICAgIG9wdGlvbnMgPSB7CiAgICAgICAgY2FzZVNlbnNpdGl2ZTogZmFsc2UsCiAgICAgICAgLi4ub3B0aW9ucwogICAgICB9OwogICAgICBjb25zdCBjYWNoZUtleSA9IHBhdHRlcm4gKyBKU09OLnN0cmluZ2lmeShvcHRpb25zKTsKICAgICAgaWYgKHJlZ2V4cENhY2hlLmhhcyhjYWNoZUtleSkpIHsKICAgICAgICByZXR1cm4gcmVnZXhwQ2FjaGUuZ2V0KGNhY2hlS2V5KTsKICAgICAgfQogICAgICBjb25zdCBuZWdhdGVkID0gcGF0dGVyblswXSA9PT0gIiEiOwogICAgICBpZiAobmVnYXRlZCkgewogICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKDEpOwogICAgICB9CiAgICAgIHBhdHRlcm4gPSBlc2NhcGVTdHJpbmdSZWdleHAocGF0dGVybikucmVwbGFjZSgvXFxcKi9nLCAiW1xcc1xcU10qIik7CiAgICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoYF4ke3BhdHRlcm59JGAsIG9wdGlvbnMuY2FzZVNlbnNpdGl2ZSA/ICIiIDogImkiKTsKICAgICAgcmVnZXhwLm5lZ2F0ZWQgPSBuZWdhdGVkOwogICAgICByZWdleHBDYWNoZS5zZXQoY2FjaGVLZXksIHJlZ2V4cCk7CiAgICAgIHJldHVybiByZWdleHA7CiAgICB9OwogICAgYmFzZU1hdGNoZXIgPSAoaW5wdXRzLCBwYXR0ZXJuczIsIG9wdGlvbnMsIGZpcnN0TWF0Y2hPbmx5KSA9PiB7CiAgICAgIGlucHV0cyA9IHNhbml0aXplQXJyYXkoaW5wdXRzLCAiaW5wdXRzIik7CiAgICAgIHBhdHRlcm5zMiA9IHNhbml0aXplQXJyYXkocGF0dGVybnMyLCAicGF0dGVybnMiKTsKICAgICAgaWYgKHBhdHRlcm5zMi5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgcGF0dGVybnMyID0gcGF0dGVybnMyLm1hcCgocGF0dGVybikgPT4gbWFrZVJlZ2V4cChwYXR0ZXJuLCBvcHRpb25zKSk7CiAgICAgIGNvbnN0IHsgYWxsUGF0dGVybnMgfSA9IG9wdGlvbnMgfHwge307CiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdOwogICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykgewogICAgICAgIGxldCBtYXRjaGVzOwogICAgICAgIGNvbnN0IGRpZEZpdCA9IFsuLi5wYXR0ZXJuczJdLmZpbGwoZmFsc2UpOwogICAgICAgIGZvciAoY29uc3QgW2luZGV4MiwgcGF0dGVybl0gb2YgcGF0dGVybnMyLmVudHJpZXMoKSkgewogICAgICAgICAgaWYgKHBhdHRlcm4udGVzdChpbnB1dCkpIHsKICAgICAgICAgICAgZGlkRml0W2luZGV4Ml0gPSB0cnVlOwogICAgICAgICAgICBtYXRjaGVzID0gIXBhdHRlcm4ubmVnYXRlZDsKICAgICAgICAgICAgaWYgKCFtYXRjaGVzKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCEobWF0Y2hlcyA9PT0gZmFsc2UgfHwgbWF0Y2hlcyA9PT0gdm9pZCAwICYmIHBhdHRlcm5zMi5zb21lKChwYXR0ZXJuKSA9PiAhcGF0dGVybi5uZWdhdGVkKSB8fCBhbGxQYXR0ZXJucyAmJiBkaWRGaXQuc29tZSgoeWVzLCBpbmRleDIpID0+ICF5ZXMgJiYgIXBhdHRlcm5zMltpbmRleDJdLm5lZ2F0ZWQpKSkgewogICAgICAgICAgcmVzdWx0LnB1c2goaW5wdXQpOwogICAgICAgICAgaWYgKGZpcnN0TWF0Y2hPbmx5KSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWF0Y2hAMi4wLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWF0Y2gvZGlzdF90cy9zbWFydG1hdGNoLnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRtYXRjaF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXRjaEAyLjAuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXRjaC9kaXN0X3RzL3NtYXJ0bWF0Y2gucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X21hdGNoZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWF0Y2hAMi4wLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWF0Y2gvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzNSA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHM1LCB7CiAgU21hcnRNYXRjaDogKCkgPT4gU21hcnRNYXRjaAp9KTsKdmFyIFNtYXJ0TWF0Y2g7CnZhciBpbml0X2Rpc3RfdHM1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXRjaEAyLjAuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXRjaC9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRtYXRjaF9wbHVnaW5zKCk7CiAgICBTbWFydE1hdGNoID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih3aWxkY2FyZEFyZykgewogICAgICAgIHRoaXMud2lsZGNhcmQgPSB3aWxkY2FyZEFyZzsKICAgICAgfQogICAgICBtYXRjaChtYXRjaFN0cmluZ0FyZykgewogICAgICAgIHJldHVybiBtYXRjaGVyX2V4cG9ydHMuaXNNYXRjaChtYXRjaFN0cmluZ0FyZywgdGhpcy53aWxkY2FyZCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9jcm9uZXJAOS4xLjAvbm9kZV9tb2R1bGVzL2Nyb25lci9kaXN0L2Nyb25lci5qcwp2YXIgY3JvbmVyX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoY3JvbmVyX2V4cG9ydHMsIHsKICBDcm9uOiAoKSA9PiBSMiwKICBDcm9uRGF0ZTogKCkgPT4gZjMsCiAgQ3JvblBhdHRlcm46ICgpID0+IGQzLAogIHNjaGVkdWxlZEpvYnM6ICgpID0+IHkzCn0pOwpmdW5jdGlvbiBoMyhuMTMsIHQ5LCBlMTEsIHIxMSwgczksIGkxMSwgYTUsIGw2KSB7CiAgcmV0dXJuIGgzLmZyb21UWihoMy50cChuMTMsIHQ5LCBlMTEsIHIxMSwgczksIGkxMSwgYTUpLCBsNik7Cn0KZnVuY3Rpb24gRDIobjEzLCB0OSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKSB7CiAgbGV0IGUxMSA9IHQ5LnRvTG9jYWxlU3RyaW5nKCJlbi1VUyIsIHsgdGltZVpvbmU6IG4xMywgdGltZVpvbmVOYW1lOiAic2hvcnRPZmZzZXQiIH0pLnNwbGl0KCIgIikuc2xpY2UoLTEpWzBdLCByMTEgPSB0OS50b0xvY2FsZVN0cmluZygiZW4tVVMiKS5yZXBsYWNlKC9bXHUyMDJmXS8sICIgIik7CiAgcmV0dXJuIERhdGUucGFyc2UoYCR7cjExfSBHTVRgKSAtIERhdGUucGFyc2UoYCR7cjExfSAke2UxMX1gKTsKfQpmdW5jdGlvbiBrMihuMTMsIHQ5KSB7CiAgbGV0IGUxMSA9IG5ldyBEYXRlKERhdGUucGFyc2UobjEzKSk7CiAgaWYgKGlzTmFOKGUxMSkpIHRocm93IG5ldyBFcnJvcigibWluaXR6OiBJbnZhbGlkIElTTzg2MDEgcGFzc2VkIHRvIHBhcnNlci4iKTsKICBsZXQgcjExID0gbjEzLnN1YnN0cmluZyg5KTsKICByZXR1cm4gbjEzLmluY2x1ZGVzKCJaIikgfHwgcjExLmluY2x1ZGVzKCItIikgfHwgcjExLmluY2x1ZGVzKCIrIikgPyBoMy50cChlMTEuZ2V0VVRDRnVsbFllYXIoKSwgZTExLmdldFVUQ01vbnRoKCkgKyAxLCBlMTEuZ2V0VVRDRGF0ZSgpLCBlMTEuZ2V0VVRDSG91cnMoKSwgZTExLmdldFVUQ01pbnV0ZXMoKSwgZTExLmdldFVUQ1NlY29uZHMoKSwgIkV0Yy9VVEMiKSA6IGgzLnRwKGUxMS5nZXRGdWxsWWVhcigpLCBlMTEuZ2V0TW9udGgoKSArIDEsIGUxMS5nZXREYXRlKCksIGUxMS5nZXRIb3VycygpLCBlMTEuZ2V0TWludXRlcygpLCBlMTEuZ2V0U2Vjb25kcygpLCB0OSk7Cn0KZnVuY3Rpb24gTjIobjEzKSB7CiAgaWYgKG4xMyA9PT0gdm9pZCAwICYmIChuMTMgPSB7fSksIGRlbGV0ZSBuMTMubmFtZSwgbjEzLmxlZ2FjeU1vZGUgPSBuMTMubGVnYWN5TW9kZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IG4xMy5sZWdhY3lNb2RlLCBuMTMucGF1c2VkID0gbjEzLnBhdXNlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBuMTMucGF1c2VkLCBuMTMubWF4UnVucyA9IG4xMy5tYXhSdW5zID09PSB2b2lkIDAgPyAxIC8gMCA6IG4xMy5tYXhSdW5zLCBuMTMuY2F0Y2ggPSBuMTMuY2F0Y2ggPT09IHZvaWQgMCA/IGZhbHNlIDogbjEzLmNhdGNoLCBuMTMuaW50ZXJ2YWwgPSBuMTMuaW50ZXJ2YWwgPT09IHZvaWQgMCA/IDAgOiBwYXJzZUludChuMTMuaW50ZXJ2YWwudG9TdHJpbmcoKSwgMTApLCBuMTMudXRjT2Zmc2V0ID0gbjEzLnV0Y09mZnNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyc2VJbnQobjEzLnV0Y09mZnNldC50b1N0cmluZygpLCAxMCksIG4xMy51bnJlZiA9IG4xMy51bnJlZiA9PT0gdm9pZCAwID8gZmFsc2UgOiBuMTMudW5yZWYsIG4xMy5zdGFydEF0ICYmIChuMTMuc3RhcnRBdCA9IG5ldyBmMyhuMTMuc3RhcnRBdCwgbjEzLnRpbWV6b25lKSksIG4xMy5zdG9wQXQgJiYgKG4xMy5zdG9wQXQgPSBuZXcgZjMobjEzLnN0b3BBdCwgbjEzLnRpbWV6b25lKSksIG4xMy5pbnRlcnZhbCAhPT0gbnVsbCkgewogICAgaWYgKGlzTmFOKG4xMy5pbnRlcnZhbCkpIHRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IFN1cHBsaWVkIHZhbHVlIGZvciBpbnRlcnZhbCBpcyBub3QgYSBudW1iZXIiKTsKICAgIGlmIChuMTMuaW50ZXJ2YWwgPCAwKSB0aHJvdyBuZXcgRXJyb3IoIkNyb25PcHRpb25zOiBTdXBwbGllZCB2YWx1ZSBmb3IgaW50ZXJ2YWwgY2FuIG5vdCBiZSBuZWdhdGl2ZSIpOwogIH0KICBpZiAobjEzLnV0Y09mZnNldCAhPT0gdm9pZCAwKSB7CiAgICBpZiAoaXNOYU4objEzLnV0Y09mZnNldCkpIHRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IEludmFsaWQgdmFsdWUgcGFzc2VkIGZvciB1dGNPZmZzZXQsIHNob3VsZCBiZSBudW1iZXIgcmVwcmVzZW50aW5nIG1pbnV0ZXMgb2Zmc2V0IGZyb20gVVRDLiIpOwogICAgaWYgKG4xMy51dGNPZmZzZXQgPCAtODcwIHx8IG4xMy51dGNPZmZzZXQgPiA4NzApIHRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IHV0Y09mZnNldCBvdXQgb2YgYm91bmRzLiIpOwogICAgaWYgKG4xMy51dGNPZmZzZXQgIT09IHZvaWQgMCAmJiBuMTMudGltZXpvbmUpIHRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IENvbWJpbmluZyAndXRjT2Zmc2V0JyB3aXRoICd0aW1lem9uZScgaXMgbm90IGFsbG93ZWQuIik7CiAgfQogIGlmIChuMTMudW5yZWYgIT09IHRydWUgJiYgbjEzLnVucmVmICE9PSBmYWxzZSkgdGhyb3cgbmV3IEVycm9yKCJDcm9uT3B0aW9uczogVW5yZWYgc2hvdWxkIGJlIGVpdGhlciB0cnVlLCBmYWxzZSBvciB1bmRlZmluZWQoZmFsc2UpLiIpOwogIHJldHVybiBuMTM7Cn0KZnVuY3Rpb24gZzIobjEzKSB7CiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuMTMpID09PSAiW29iamVjdCBGdW5jdGlvbl0iIHx8IHR5cGVvZiBuMTMgPT0gImZ1bmN0aW9uIiB8fCBuMTMgaW5zdGFuY2VvZiBGdW5jdGlvbjsKfQpmdW5jdGlvbiBTMyhuMTMpIHsKICByZXR1cm4gZzIobjEzKTsKfQpmdW5jdGlvbiBQMihuMTMpIHsKICB0eXBlb2YgRGVubyA8ICJ1IiAmJiB0eXBlb2YgRGVuby51bnJlZlRpbWVyIDwgInUiID8gRGVuby51bnJlZlRpbWVyKG4xMykgOiBuMTMgJiYgdHlwZW9mIG4xMy51bnJlZiA8ICJ1IiAmJiBuMTMudW5yZWYoKTsKfQp2YXIgYjMsIHAzLCB2MiwgZDMsIE8sIG0yLCBmMywgXzIsIHkzLCBSMjsKdmFyIGluaXRfY3JvbmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vY3JvbmVyQDkuMS4wL25vZGVfbW9kdWxlcy9jcm9uZXIvZGlzdC9jcm9uZXIuanMiKCkgewogICAgaDMuZnJvbVRaSVNPID0gKG4xMywgdDksIGUxMSkgPT4gaDMuZnJvbVRaKGsyKG4xMywgdDkpLCBlMTEpOwogICAgaDMuZnJvbVRaID0gZnVuY3Rpb24objEzLCB0OSkgewogICAgICBsZXQgZTExID0gbmV3IERhdGUoRGF0ZS5VVEMobjEzLnksIG4xMy5tIC0gMSwgbjEzLmQsIG4xMy5oLCBuMTMuaSwgbjEzLnMpKSwgcjExID0gRDIobjEzLnR6LCBlMTEpLCBzOSA9IG5ldyBEYXRlKGUxMS5nZXRUaW1lKCkgLSByMTEpLCBpMTEgPSBEMihuMTMudHosIHM5KTsKICAgICAgaWYgKGkxMSAtIHIxMSA9PT0gMCkgcmV0dXJuIHM5OwogICAgICB7CiAgICAgICAgbGV0IGE1ID0gbmV3IERhdGUoZTExLmdldFRpbWUoKSAtIGkxMSksIGw2ID0gRDIobjEzLnR6LCBhNSk7CiAgICAgICAgaWYgKGw2IC0gaTExID09PSAwKSByZXR1cm4gYTU7CiAgICAgICAgaWYgKCF0OSAmJiBsNiAtIGkxMSA+IDApIHJldHVybiBhNTsKICAgICAgICBpZiAodDkpIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkYXRlIHBhc3NlZCB0byBmcm9tVFooKSIpOwogICAgICAgIHJldHVybiBzOTsKICAgICAgfQogICAgfTsKICAgIGgzLnRvVFogPSBmdW5jdGlvbihuMTMsIHQ5KSB7CiAgICAgIGxldCBlMTEgPSBuMTMudG9Mb2NhbGVTdHJpbmcoImVuLVVTIiwgeyB0aW1lWm9uZTogdDkgfSkucmVwbGFjZSgvW1x1MjAyZl0vLCAiICIpLCByMTEgPSBuZXcgRGF0ZShlMTEpOwogICAgICByZXR1cm4geyB5OiByMTEuZ2V0RnVsbFllYXIoKSwgbTogcjExLmdldE1vbnRoKCkgKyAxLCBkOiByMTEuZ2V0RGF0ZSgpLCBoOiByMTEuZ2V0SG91cnMoKSwgaTogcjExLmdldE1pbnV0ZXMoKSwgczogcjExLmdldFNlY29uZHMoKSwgdHo6IHQ5IH07CiAgICB9OwogICAgaDMudHAgPSAobjEzLCB0OSwgZTExLCByMTEsIHM5LCBpMTEsIGE1KSA9PiAoeyB5OiBuMTMsIG06IHQ5LCBkOiBlMTEsIGg6IHIxMSwgaTogczksIHM6IGkxMSwgdHo6IGE1IH0pOwogICAgaDMubWluaXR6ID0gaDM7CiAgICBiMyA9IDMyLCBwMyA9IDMxIHwgYjMsIHYyID0gWzEsIDIsIDQsIDgsIDE2XSwgZDMgPSBjbGFzcyB7CiAgICAgIHBhdHRlcm47CiAgICAgIHRpbWV6b25lOwogICAgICBzZWNvbmQ7CiAgICAgIG1pbnV0ZTsKICAgICAgaG91cjsKICAgICAgZGF5OwogICAgICBtb250aDsKICAgICAgZGF5T2ZXZWVrOwogICAgICBsYXN0RGF5T2ZNb250aDsKICAgICAgc3RhckRPTTsKICAgICAgc3RhckRPVzsKICAgICAgY29uc3RydWN0b3IodDksIGUxMSkgewogICAgICAgIHRoaXMucGF0dGVybiA9IHQ5LCB0aGlzLnRpbWV6b25lID0gZTExLCB0aGlzLnNlY29uZCA9IEFycmF5KDYwKS5maWxsKDApLCB0aGlzLm1pbnV0ZSA9IEFycmF5KDYwKS5maWxsKDApLCB0aGlzLmhvdXIgPSBBcnJheSgyNCkuZmlsbCgwKSwgdGhpcy5kYXkgPSBBcnJheSgzMSkuZmlsbCgwKSwgdGhpcy5tb250aCA9IEFycmF5KDEyKS5maWxsKDApLCB0aGlzLmRheU9mV2VlayA9IEFycmF5KDcpLmZpbGwoMCksIHRoaXMubGFzdERheU9mTW9udGggPSBmYWxzZSwgdGhpcy5zdGFyRE9NID0gZmFsc2UsIHRoaXMuc3RhckRPVyA9IGZhbHNlLCB0aGlzLnBhcnNlKCk7CiAgICAgIH0KICAgICAgcGFyc2UoKSB7CiAgICAgICAgaWYgKCEodHlwZW9mIHRoaXMucGF0dGVybiA9PSAic3RyaW5nIiB8fCB0aGlzLnBhdHRlcm4gaW5zdGFuY2VvZiBTdHJpbmcpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogUGF0dGVybiBoYXMgdG8gYmUgb2YgdHlwZSBzdHJpbmcuIik7CiAgICAgICAgdGhpcy5wYXR0ZXJuLmluZGV4T2YoIkAiKSA+PSAwICYmICh0aGlzLnBhdHRlcm4gPSB0aGlzLmhhbmRsZU5pY2tuYW1lcyh0aGlzLnBhdHRlcm4pLnRyaW0oKSk7CiAgICAgICAgbGV0IHQ5ID0gdGhpcy5wYXR0ZXJuLnJlcGxhY2UoL1xzKy9nLCAiICIpLnNwbGl0KCIgIik7CiAgICAgICAgaWYgKHQ5Lmxlbmd0aCA8IDUgfHwgdDkubGVuZ3RoID4gNikgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IGludmFsaWQgY29uZmlndXJhdGlvbiBmb3JtYXQgKCciICsgdGhpcy5wYXR0ZXJuICsgIicpLCBleGFjdGx5IGZpdmUgb3Igc2l4IHNwYWNlIHNlcGFyYXRlZCBwYXJ0cyBhcmUgcmVxdWlyZWQuIik7CiAgICAgICAgaWYgKHQ5Lmxlbmd0aCA9PT0gNSAmJiB0OS51bnNoaWZ0KCIwIiksIHQ5WzNdLmluZGV4T2YoIkwiKSA+PSAwICYmICh0OVszXSA9IHQ5WzNdLnJlcGxhY2UoIkwiLCAiIiksIHRoaXMubGFzdERheU9mTW9udGggPSB0cnVlKSwgdDlbM10gPT0gIioiICYmICh0aGlzLnN0YXJET00gPSB0cnVlKSwgdDlbNF0ubGVuZ3RoID49IDMgJiYgKHQ5WzRdID0gdGhpcy5yZXBsYWNlQWxwaGFNb250aHModDlbNF0pKSwgdDlbNV0ubGVuZ3RoID49IDMgJiYgKHQ5WzVdID0gdGhpcy5yZXBsYWNlQWxwaGFEYXlzKHQ5WzVdKSksIHQ5WzVdID09ICIqIiAmJiAodGhpcy5zdGFyRE9XID0gdHJ1ZSksIHRoaXMucGF0dGVybi5pbmRleE9mKCI/IikgPj0gMCkgewogICAgICAgICAgbGV0IGUxMSA9IG5ldyBmMygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgdGhpcy50aW1lem9uZSkuZ2V0RGF0ZSh0cnVlKTsKICAgICAgICAgIHQ5WzBdID0gdDlbMF0ucmVwbGFjZSgiPyIsIGUxMS5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSksIHQ5WzFdID0gdDlbMV0ucmVwbGFjZSgiPyIsIGUxMS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSksIHQ5WzJdID0gdDlbMl0ucmVwbGFjZSgiPyIsIGUxMS5nZXRIb3VycygpLnRvU3RyaW5nKCkpLCB0aGlzLnN0YXJET00gfHwgKHQ5WzNdID0gdDlbM10ucmVwbGFjZSgiPyIsIGUxMS5nZXREYXRlKCkudG9TdHJpbmcoKSkpLCB0OVs0XSA9IHQ5WzRdLnJlcGxhY2UoIj8iLCAoZTExLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpKSwgdGhpcy5zdGFyRE9XIHx8ICh0OVs1XSA9IHQ5WzVdLnJlcGxhY2UoIj8iLCBlMTEuZ2V0RGF5KCkudG9TdHJpbmcoKSkpOwogICAgICAgIH0KICAgICAgICB0aGlzLnRocm93QXRJbGxlZ2FsQ2hhcmFjdGVycyh0OSksIHRoaXMucGFydFRvQXJyYXkoInNlY29uZCIsIHQ5WzBdLCAwLCAxKSwgdGhpcy5wYXJ0VG9BcnJheSgibWludXRlIiwgdDlbMV0sIDAsIDEpLCB0aGlzLnBhcnRUb0FycmF5KCJob3VyIiwgdDlbMl0sIDAsIDEpLCB0aGlzLnBhcnRUb0FycmF5KCJkYXkiLCB0OVszXSwgLTEsIDEpLCB0aGlzLnBhcnRUb0FycmF5KCJtb250aCIsIHQ5WzRdLCAtMSwgMSksIHRoaXMucGFydFRvQXJyYXkoImRheU9mV2VlayIsIHQ5WzVdLCAwLCBwMyksIHRoaXMuZGF5T2ZXZWVrWzddICYmICh0aGlzLmRheU9mV2Vla1swXSA9IHRoaXMuZGF5T2ZXZWVrWzddKTsKICAgICAgfQogICAgICBwYXJ0VG9BcnJheSh0OSwgZTExLCByMTEsIHM5KSB7CiAgICAgICAgbGV0IGkxMSA9IHRoaXNbdDldLCBhNSA9IHQ5ID09PSAiZGF5IiAmJiB0aGlzLmxhc3REYXlPZk1vbnRoOwogICAgICAgIGlmIChlMTEgPT09ICIiICYmICFhNSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IGNvbmZpZ3VyYXRpb24gZW50cnkgIiArIHQ5ICsgIiAoIiArIGUxMSArICIpIGlzIGVtcHR5LCBjaGVjayBmb3IgdHJhaWxpbmcgc3BhY2VzLiIpOwogICAgICAgIGlmIChlMTEgPT09ICIqIikgcmV0dXJuIGkxMS5maWxsKHM5KTsKICAgICAgICBsZXQgbDYgPSBlMTEuc3BsaXQoIiwiKTsKICAgICAgICBpZiAobDYubGVuZ3RoID4gMSkgZm9yIChsZXQgbzEzID0gMDsgbzEzIDwgbDYubGVuZ3RoOyBvMTMrKykgdGhpcy5wYXJ0VG9BcnJheSh0OSwgbDZbbzEzXSwgcjExLCBzOSk7CiAgICAgICAgZWxzZSBlMTEuaW5kZXhPZigiLSIpICE9PSAtMSAmJiBlMTEuaW5kZXhPZigiLyIpICE9PSAtMSA/IHRoaXMuaGFuZGxlUmFuZ2VXaXRoU3RlcHBpbmcoZTExLCB0OSwgcjExLCBzOSkgOiBlMTEuaW5kZXhPZigiLSIpICE9PSAtMSA/IHRoaXMuaGFuZGxlUmFuZ2UoZTExLCB0OSwgcjExLCBzOSkgOiBlMTEuaW5kZXhPZigiLyIpICE9PSAtMSA/IHRoaXMuaGFuZGxlU3RlcHBpbmcoZTExLCB0OSwgcjExLCBzOSkgOiBlMTEgIT09ICIiICYmIHRoaXMuaGFuZGxlTnVtYmVyKGUxMSwgdDksIHIxMSwgczkpOwogICAgICB9CiAgICAgIHRocm93QXRJbGxlZ2FsQ2hhcmFjdGVycyh0OSkgewogICAgICAgIGZvciAobGV0IGUxMSA9IDA7IGUxMSA8IHQ5Lmxlbmd0aDsgZTExKyspIGlmICgoZTExID09PSA1ID8gL1teLyowLTksXC0jTF0rLyA6IC9bXi8qMC05LC1dKy8pLnRlc3QodDlbZTExXSkpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBjb25maWd1cmF0aW9uIGVudHJ5ICIgKyBlMTEgKyAiICgiICsgdDlbZTExXSArICIpIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTsKICAgICAgfQogICAgICBoYW5kbGVOdW1iZXIodDksIGUxMSwgcjExLCBzOSkgewogICAgICAgIGxldCBpMTEgPSB0aGlzLmV4dHJhY3ROdGgodDksIGUxMSksIGE1ID0gcGFyc2VJbnQoaTExWzBdLCAxMCkgKyByMTE7CiAgICAgICAgaWYgKGlzTmFOKGE1KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46ICIgKyBlMTEgKyAiIGlzIG5vdCBhIG51bWJlcjogJyIgKyB0OSArICInIik7CiAgICAgICAgdGhpcy5zZXRQYXJ0KGUxMSwgYTUsIGkxMVsxXSB8fCBzOSk7CiAgICAgIH0KICAgICAgc2V0UGFydCh0OSwgZTExLCByMTEpIHsKICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCB0OSkpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHBhcnQgc3BlY2lmaWVkOiAiICsgdDkpOwogICAgICAgIGlmICh0OSA9PT0gImRheU9mV2VlayIpIHsKICAgICAgICAgIGlmIChlMTEgPT09IDcgJiYgKGUxMSA9IDApLCBlMTEgPCAwIHx8IGUxMSA+IDYpIHRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgZGF5T2ZXZWVrOiAiICsgZTExKTsKICAgICAgICAgIHRoaXMuc2V0TnRoV2Vla2RheU9mTW9udGgoZTExLCByMTEpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodDkgPT09ICJzZWNvbmQiIHx8IHQ5ID09PSAibWludXRlIikgewogICAgICAgICAgaWYgKGUxMSA8IDAgfHwgZTExID49IDYwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIgKyB0OSArICI6ICIgKyBlMTEpOwogICAgICAgIH0gZWxzZSBpZiAodDkgPT09ICJob3VyIikgewogICAgICAgICAgaWYgKGUxMSA8IDAgfHwgZTExID49IDI0KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIgKyB0OSArICI6ICIgKyBlMTEpOwogICAgICAgIH0gZWxzZSBpZiAodDkgPT09ICJkYXkiKSB7CiAgICAgICAgICBpZiAoZTExIDwgMCB8fCBlMTEgPj0gMzEpIHRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgIiArIHQ5ICsgIjogIiArIGUxMSk7CiAgICAgICAgfSBlbHNlIGlmICh0OSA9PT0gIm1vbnRoIiAmJiAoZTExIDwgMCB8fCBlMTEgPj0gMTIpKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIgKyB0OSArICI6ICIgKyBlMTEpOwogICAgICAgIHRoaXNbdDldW2UxMV0gPSByMTE7CiAgICAgIH0KICAgICAgaGFuZGxlUmFuZ2VXaXRoU3RlcHBpbmcodDksIGUxMSwgcjExLCBzOSkgewogICAgICAgIGxldCBpMTEgPSB0aGlzLmV4dHJhY3ROdGgodDksIGUxMSksIGE1ID0gaTExWzBdLm1hdGNoKC9eKFxkKyktKFxkKylcLyhcZCspJC8pOwogICAgICAgIGlmIChhNSA9PT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCByYW5nZSB3aXRoIHN0ZXBwaW5nOiAnIiArIHQ5ICsgIiciKTsKICAgICAgICBsZXQgWywgbDYsIG8xMywgdTddID0gYTUsIGMxMSA9IHBhcnNlSW50KGw2LCAxMCkgKyByMTEsIHczID0gcGFyc2VJbnQobzEzLCAxMCkgKyByMTEsIEMzID0gcGFyc2VJbnQodTcsIDEwKTsKICAgICAgICBpZiAoaXNOYU4oYzExKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBsb3dlciByYW5nZSAoTmFOKSIpOwogICAgICAgIGlmIChpc05hTih3MykpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgdXBwZXIgcmFuZ2UgKE5hTikiKTsKICAgICAgICBpZiAoaXNOYU4oQzMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAoTmFOKSIpOwogICAgICAgIGlmIChDMyA9PT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogMCIpOwogICAgICAgIGlmIChDMyA+IHRoaXNbZTExXS5sZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIHN0ZXBzIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gbWF4aW11bSB2YWx1ZSBvZiBwYXJ0ICgiICsgdGhpc1tlMTFdLmxlbmd0aCArICIpIik7CiAgICAgICAgaWYgKGMxMSA+IHczKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogRnJvbSB2YWx1ZSBpcyBsYXJnZXIgdGhhbiB0byB2YWx1ZTogJyIgKyB0OSArICInIik7CiAgICAgICAgZm9yIChsZXQgVDMgPSBjMTE7IFQzIDw9IHczOyBUMyArPSBDMykgdGhpcy5zZXRQYXJ0KGUxMSwgVDMsIGkxMVsxXSB8fCBzOSk7CiAgICAgIH0KICAgICAgZXh0cmFjdE50aCh0OSwgZTExKSB7CiAgICAgICAgbGV0IHIxMSA9IHQ5LCBzOTsKICAgICAgICBpZiAocjExLmluY2x1ZGVzKCIjIikpIHsKICAgICAgICAgIGlmIChlMTEgIT09ICJkYXlPZldlZWsiKSB0aHJvdyBuZXcgRXJyb3IoIkNyb25QYXR0ZXJuOiBudGggKCMpIG9ubHkgYWxsb3dlZCBpbiBkYXktb2Ytd2VlayBmaWVsZCIpOwogICAgICAgICAgczkgPSByMTEuc3BsaXQoIiMiKVsxXSwgcjExID0gcjExLnNwbGl0KCIjIilbMF07CiAgICAgICAgfQogICAgICAgIHJldHVybiBbcjExLCBzOV07CiAgICAgIH0KICAgICAgaGFuZGxlUmFuZ2UodDksIGUxMSwgcjExLCBzOSkgewogICAgICAgIGxldCBpMTEgPSB0aGlzLmV4dHJhY3ROdGgodDksIGUxMSksIGE1ID0gaTExWzBdLnNwbGl0KCItIik7CiAgICAgICAgaWYgKGE1Lmxlbmd0aCAhPT0gMikgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCByYW5nZTogJyIgKyB0OSArICInIik7CiAgICAgICAgbGV0IGw2ID0gcGFyc2VJbnQoYTVbMF0sIDEwKSArIHIxMSwgbzEzID0gcGFyc2VJbnQoYTVbMV0sIDEwKSArIHIxMTsKICAgICAgICBpZiAoaXNOYU4obDYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIGxvd2VyIHJhbmdlIChOYU4pIik7CiAgICAgICAgaWYgKGlzTmFOKG8xMykpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgdXBwZXIgcmFuZ2UgKE5hTikiKTsKICAgICAgICBpZiAobDYgPiBvMTMpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBGcm9tIHZhbHVlIGlzIGxhcmdlciB0aGFuIHRvIHZhbHVlOiAnIiArIHQ5ICsgIiciKTsKICAgICAgICBmb3IgKGxldCB1NyA9IGw2OyB1NyA8PSBvMTM7IHU3KyspIHRoaXMuc2V0UGFydChlMTEsIHU3LCBpMTFbMV0gfHwgczkpOwogICAgICB9CiAgICAgIGhhbmRsZVN0ZXBwaW5nKHQ5LCBlMTEsIHIxMSwgczkpIHsKICAgICAgICBsZXQgaTExID0gdGhpcy5leHRyYWN0TnRoKHQ5LCBlMTEpLCBhNSA9IGkxMVswXS5zcGxpdCgiLyIpOwogICAgICAgIGlmIChhNS5sZW5ndGggIT09IDIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgc3RlcHBpbmc6ICciICsgdDkgKyAiJyIpOwogICAgICAgIGE1WzBdID09PSAiIiAmJiAoYTVbMF0gPSAiKiIpOwogICAgICAgIGxldCBsNiA9IDA7CiAgICAgICAgYTVbMF0gIT09ICIqIiAmJiAobDYgPSBwYXJzZUludChhNVswXSwgMTApICsgcjExKTsKICAgICAgICBsZXQgbzEzID0gcGFyc2VJbnQoYTVbMV0sIDEwKTsKICAgICAgICBpZiAoaXNOYU4obzEzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogKE5hTikiKTsKICAgICAgICBpZiAobzEzID09PSAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAwIik7CiAgICAgICAgaWYgKG8xMyA+IHRoaXNbZTExXS5sZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIG1heCBzdGVwcyBmb3IgcGFydCBpcyAoIiArIHRoaXNbZTExXS5sZW5ndGggKyAiKSIpOwogICAgICAgIGZvciAobGV0IHU3ID0gbDY7IHU3IDwgdGhpc1tlMTFdLmxlbmd0aDsgdTcgKz0gbzEzKSB0aGlzLnNldFBhcnQoZTExLCB1NywgaTExWzFdIHx8IHM5KTsKICAgICAgfQogICAgICByZXBsYWNlQWxwaGFEYXlzKHQ5KSB7CiAgICAgICAgcmV0dXJuIHQ5LnJlcGxhY2UoLy1zdW4vZ2ksICItNyIpLnJlcGxhY2UoL3N1bi9naSwgIjAiKS5yZXBsYWNlKC9tb24vZ2ksICIxIikucmVwbGFjZSgvdHVlL2dpLCAiMiIpLnJlcGxhY2UoL3dlZC9naSwgIjMiKS5yZXBsYWNlKC90aHUvZ2ksICI0IikucmVwbGFjZSgvZnJpL2dpLCAiNSIpLnJlcGxhY2UoL3NhdC9naSwgIjYiKTsKICAgICAgfQogICAgICByZXBsYWNlQWxwaGFNb250aHModDkpIHsKICAgICAgICByZXR1cm4gdDkucmVwbGFjZSgvamFuL2dpLCAiMSIpLnJlcGxhY2UoL2ZlYi9naSwgIjIiKS5yZXBsYWNlKC9tYXIvZ2ksICIzIikucmVwbGFjZSgvYXByL2dpLCAiNCIpLnJlcGxhY2UoL21heS9naSwgIjUiKS5yZXBsYWNlKC9qdW4vZ2ksICI2IikucmVwbGFjZSgvanVsL2dpLCAiNyIpLnJlcGxhY2UoL2F1Zy9naSwgIjgiKS5yZXBsYWNlKC9zZXAvZ2ksICI5IikucmVwbGFjZSgvb2N0L2dpLCAiMTAiKS5yZXBsYWNlKC9ub3YvZ2ksICIxMSIpLnJlcGxhY2UoL2RlYy9naSwgIjEyIik7CiAgICAgIH0KICAgICAgaGFuZGxlTmlja25hbWVzKHQ5KSB7CiAgICAgICAgbGV0IGUxMSA9IHQ5LnRyaW0oKS50b0xvd2VyQ2FzZSgpOwogICAgICAgIHJldHVybiBlMTEgPT09ICJAeWVhcmx5IiB8fCBlMTEgPT09ICJAYW5udWFsbHkiID8gIjAgMCAxIDEgKiIgOiBlMTEgPT09ICJAbW9udGhseSIgPyAiMCAwIDEgKiAqIiA6IGUxMSA9PT0gIkB3ZWVrbHkiID8gIjAgMCAqICogMCIgOiBlMTEgPT09ICJAZGFpbHkiID8gIjAgMCAqICogKiIgOiBlMTEgPT09ICJAaG91cmx5IiA/ICIwICogKiAqICoiIDogdDk7CiAgICAgIH0KICAgICAgc2V0TnRoV2Vla2RheU9mTW9udGgodDksIGUxMSkgewogICAgICAgIGlmICh0eXBlb2YgZTExICE9ICJudW1iZXIiICYmIGUxMSA9PT0gIkwiKSB0aGlzLmRheU9mV2Vla1t0OV0gPSB0aGlzLmRheU9mV2Vla1t0OV0gfCBiMzsKICAgICAgICBlbHNlIGlmIChlMTEgPT09IHAzKSB0aGlzLmRheU9mV2Vla1t0OV0gPSBwMzsKICAgICAgICBlbHNlIGlmIChlMTEgPCA2ICYmIGUxMSA+IDApIHRoaXMuZGF5T2ZXZWVrW3Q5XSA9IHRoaXMuZGF5T2ZXZWVrW3Q5XSB8IHYyW2UxMSAtIDFdOwogICAgICAgIGVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ3JvblBhdHRlcm46IG50aCB3ZWVrZGF5IG91dCBvZiByYW5nZSwgc2hvdWxkIGJlIDEtNSBvciBMLiBWYWx1ZTogJHtlMTF9LCBUeXBlOiAke3R5cGVvZiBlMTF9YCk7CiAgICAgIH0KICAgIH07CiAgICBPID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdLCBtMiA9IFtbIm1vbnRoIiwgInllYXIiLCAwXSwgWyJkYXkiLCAibW9udGgiLCAtMV0sIFsiaG91ciIsICJkYXkiLCAwXSwgWyJtaW51dGUiLCAiaG91ciIsIDBdLCBbInNlY29uZCIsICJtaW51dGUiLCAwXV0sIGYzID0gY2xhc3MgbjYgewogICAgICB0ejsKICAgICAgbXM7CiAgICAgIHNlY29uZDsKICAgICAgbWludXRlOwogICAgICBob3VyOwogICAgICBkYXk7CiAgICAgIG1vbnRoOwogICAgICB5ZWFyOwogICAgICBjb25zdHJ1Y3Rvcih0OSwgZTExKSB7CiAgICAgICAgaWYgKHRoaXMudHogPSBlMTEsIHQ5ICYmIHQ5IGluc3RhbmNlb2YgRGF0ZSkgaWYgKCFpc05hTih0OSkpIHRoaXMuZnJvbURhdGUodDkpOwogICAgICAgIGVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvbkRhdGU6IEludmFsaWQgZGF0ZSBwYXNzZWQgdG8gQ3JvbkRhdGUgY29uc3RydWN0b3IiKTsKICAgICAgICBlbHNlIGlmICh0OSA9PT0gdm9pZCAwKSB0aGlzLmZyb21EYXRlKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKTsKICAgICAgICBlbHNlIGlmICh0OSAmJiB0eXBlb2YgdDkgPT0gInN0cmluZyIpIHRoaXMuZnJvbVN0cmluZyh0OSk7CiAgICAgICAgZWxzZSBpZiAodDkgaW5zdGFuY2VvZiBuNikgdGhpcy5mcm9tQ3JvbkRhdGUodDkpOwogICAgICAgIGVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvbkRhdGU6IEludmFsaWQgdHlwZSAoIiArIHR5cGVvZiB0OSArICIpIHBhc3NlZCB0byBDcm9uRGF0ZSBjb25zdHJ1Y3RvciIpOwogICAgICB9CiAgICAgIGlzTnRoV2Vla2RheU9mTW9udGgodDksIGUxMSwgcjExLCBzOSkgewogICAgICAgIGxldCBhNSA9IG5ldyBEYXRlKERhdGUuVVRDKHQ5LCBlMTEsIHIxMSkpLmdldFVUQ0RheSgpLCBsNiA9IDA7CiAgICAgICAgZm9yIChsZXQgbzEzID0gMTsgbzEzIDw9IHIxMTsgbzEzKyspIG5ldyBEYXRlKERhdGUuVVRDKHQ5LCBlMTEsIG8xMykpLmdldFVUQ0RheSgpID09PSBhNSAmJiBsNisrOwogICAgICAgIGlmIChzOSAmIHAzICYmIHYyW2w2IC0gMV0gJiBzOSkgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKHM5ICYgYjMpIHsKICAgICAgICAgIGxldCBvMTMgPSBuZXcgRGF0ZShEYXRlLlVUQyh0OSwgZTExICsgMSwgMCkpLmdldFVUQ0RhdGUoKTsKICAgICAgICAgIGZvciAobGV0IHU3ID0gcjExICsgMTsgdTcgPD0gbzEzOyB1NysrKSBpZiAobmV3IERhdGUoRGF0ZS5VVEModDksIGUxMSwgdTcpKS5nZXRVVENEYXkoKSA9PT0gYTUpIHJldHVybiBmYWxzZTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgZnJvbURhdGUodDkpIHsKICAgICAgICBpZiAodGhpcy50eiAhPT0gdm9pZCAwKSBpZiAodHlwZW9mIHRoaXMudHogPT0gIm51bWJlciIpIHRoaXMubXMgPSB0OS5nZXRVVENNaWxsaXNlY29uZHMoKSwgdGhpcy5zZWNvbmQgPSB0OS5nZXRVVENTZWNvbmRzKCksIHRoaXMubWludXRlID0gdDkuZ2V0VVRDTWludXRlcygpICsgdGhpcy50eiwgdGhpcy5ob3VyID0gdDkuZ2V0VVRDSG91cnMoKSwgdGhpcy5kYXkgPSB0OS5nZXRVVENEYXRlKCksIHRoaXMubW9udGggPSB0OS5nZXRVVENNb250aCgpLCB0aGlzLnllYXIgPSB0OS5nZXRVVENGdWxsWWVhcigpLCB0aGlzLmFwcGx5KCk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBsZXQgZTExID0gaDMudG9UWih0OSwgdGhpcy50eik7CiAgICAgICAgICB0aGlzLm1zID0gdDkuZ2V0TWlsbGlzZWNvbmRzKCksIHRoaXMuc2Vjb25kID0gZTExLnMsIHRoaXMubWludXRlID0gZTExLmksIHRoaXMuaG91ciA9IGUxMS5oLCB0aGlzLmRheSA9IGUxMS5kLCB0aGlzLm1vbnRoID0gZTExLm0gLSAxLCB0aGlzLnllYXIgPSBlMTEueTsKICAgICAgICB9CiAgICAgICAgZWxzZSB0aGlzLm1zID0gdDkuZ2V0TWlsbGlzZWNvbmRzKCksIHRoaXMuc2Vjb25kID0gdDkuZ2V0U2Vjb25kcygpLCB0aGlzLm1pbnV0ZSA9IHQ5LmdldE1pbnV0ZXMoKSwgdGhpcy5ob3VyID0gdDkuZ2V0SG91cnMoKSwgdGhpcy5kYXkgPSB0OS5nZXREYXRlKCksIHRoaXMubW9udGggPSB0OS5nZXRNb250aCgpLCB0aGlzLnllYXIgPSB0OS5nZXRGdWxsWWVhcigpOwogICAgICB9CiAgICAgIGZyb21Dcm9uRGF0ZSh0OSkgewogICAgICAgIHRoaXMudHogPSB0OS50eiwgdGhpcy55ZWFyID0gdDkueWVhciwgdGhpcy5tb250aCA9IHQ5Lm1vbnRoLCB0aGlzLmRheSA9IHQ5LmRheSwgdGhpcy5ob3VyID0gdDkuaG91ciwgdGhpcy5taW51dGUgPSB0OS5taW51dGUsIHRoaXMuc2Vjb25kID0gdDkuc2Vjb25kLCB0aGlzLm1zID0gdDkubXM7CiAgICAgIH0KICAgICAgYXBwbHkoKSB7CiAgICAgICAgaWYgKHRoaXMubW9udGggPiAxMSB8fCB0aGlzLmRheSA+IE9bdGhpcy5tb250aF0gfHwgdGhpcy5ob3VyID4gNTkgfHwgdGhpcy5taW51dGUgPiA1OSB8fCB0aGlzLnNlY29uZCA+IDU5IHx8IHRoaXMuaG91ciA8IDAgfHwgdGhpcy5taW51dGUgPCAwIHx8IHRoaXMuc2Vjb25kIDwgMCkgewogICAgICAgICAgbGV0IHQ5ID0gbmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLCB0aGlzLm1vbnRoLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMubXMpKTsKICAgICAgICAgIHJldHVybiB0aGlzLm1zID0gdDkuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHRoaXMuc2Vjb25kID0gdDkuZ2V0VVRDU2Vjb25kcygpLCB0aGlzLm1pbnV0ZSA9IHQ5LmdldFVUQ01pbnV0ZXMoKSwgdGhpcy5ob3VyID0gdDkuZ2V0VVRDSG91cnMoKSwgdGhpcy5kYXkgPSB0OS5nZXRVVENEYXRlKCksIHRoaXMubW9udGggPSB0OS5nZXRVVENNb250aCgpLCB0aGlzLnllYXIgPSB0OS5nZXRVVENGdWxsWWVhcigpLCB0cnVlOwogICAgICAgIH0gZWxzZSByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgZnJvbVN0cmluZyh0OSkgewogICAgICAgIGlmICh0eXBlb2YgdGhpcy50eiA9PSAibnVtYmVyIikgewogICAgICAgICAgbGV0IGUxMSA9IGgzLmZyb21UWklTTyh0OSk7CiAgICAgICAgICB0aGlzLm1zID0gZTExLmdldFVUQ01pbGxpc2Vjb25kcygpLCB0aGlzLnNlY29uZCA9IGUxMS5nZXRVVENTZWNvbmRzKCksIHRoaXMubWludXRlID0gZTExLmdldFVUQ01pbnV0ZXMoKSwgdGhpcy5ob3VyID0gZTExLmdldFVUQ0hvdXJzKCksIHRoaXMuZGF5ID0gZTExLmdldFVUQ0RhdGUoKSwgdGhpcy5tb250aCA9IGUxMS5nZXRVVENNb250aCgpLCB0aGlzLnllYXIgPSBlMTEuZ2V0VVRDRnVsbFllYXIoKSwgdGhpcy5hcHBseSgpOwogICAgICAgIH0gZWxzZSByZXR1cm4gdGhpcy5mcm9tRGF0ZShoMy5mcm9tVFpJU08odDksIHRoaXMudHopKTsKICAgICAgfQogICAgICBmaW5kTmV4dCh0OSwgZTExLCByMTEsIHM5KSB7CiAgICAgICAgbGV0IGkxMSA9IHRoaXNbZTExXSwgYTU7CiAgICAgICAgcjExLmxhc3REYXlPZk1vbnRoICYmICh0aGlzLm1vbnRoICE9PSAxID8gYTUgPSBPW3RoaXMubW9udGhdIDogYTUgPSBuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGggKyAxLCAwLCAwLCAwLCAwLCAwKSkuZ2V0VVRDRGF0ZSgpKTsKICAgICAgICBsZXQgbDYgPSAhcjExLnN0YXJET1cgJiYgZTExID09ICJkYXkiID8gbmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLCB0aGlzLm1vbnRoLCAxLCAwLCAwLCAwLCAwKSkuZ2V0VVRDRGF5KCkgOiB2b2lkIDA7CiAgICAgICAgZm9yIChsZXQgbzEzID0gdGhpc1tlMTFdICsgczk7IG8xMyA8IHIxMVtlMTFdLmxlbmd0aDsgbzEzKyspIHsKICAgICAgICAgIGxldCB1NyA9IHIxMVtlMTFdW28xM107CiAgICAgICAgICBpZiAoZTExID09PSAiZGF5IiAmJiByMTEubGFzdERheU9mTW9udGggJiYgbzEzIC0gczkgPT0gYTUgJiYgKHU3ID0gMSksIGUxMSA9PT0gImRheSIgJiYgIXIxMS5zdGFyRE9XKSB7CiAgICAgICAgICAgIGxldCBjMTEgPSByMTEuZGF5T2ZXZWVrWyhsNiArIChvMTMgLSBzOSAtIDEpKSAlIDddOwogICAgICAgICAgICBpZiAoYzExICYmIGMxMSAmIHAzKSBjMTEgPSB0aGlzLmlzTnRoV2Vla2RheU9mTW9udGgodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCBvMTMgLSBzOSwgYzExKSA/IDEgOiAwOwogICAgICAgICAgICBlbHNlIGlmIChjMTEpIHRocm93IG5ldyBFcnJvcihgQ3JvbkRhdGU6IEludmFsaWQgdmFsdWUgZm9yIGRheU9mV2VlayBlbmNvdW50ZXJlZC4gJHtjMTF9YCk7CiAgICAgICAgICAgIHQ5LmxlZ2FjeU1vZGUgJiYgIXIxMS5zdGFyRE9NID8gdTcgPSB1NyB8fCBjMTEgOiB1NyA9IHU3ICYmIGMxMTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh1NykgcmV0dXJuIHRoaXNbZTExXSA9IG8xMyAtIHM5LCBpMTEgIT09IHRoaXNbZTExXSA/IDIgOiAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gMzsKICAgICAgfQogICAgICByZWN1cnNlKHQ5LCBlMTEsIHIxMSkgewogICAgICAgIGxldCBzOSA9IHRoaXMuZmluZE5leHQoZTExLCBtMltyMTFdWzBdLCB0OSwgbTJbcjExXVsyXSk7CiAgICAgICAgaWYgKHM5ID4gMSkgewogICAgICAgICAgbGV0IGkxMSA9IHIxMSArIDE7CiAgICAgICAgICBmb3IgKDsgaTExIDwgbTIubGVuZ3RoOyApIHRoaXNbbTJbaTExXVswXV0gPSAtbTJbaTExXVsyXSwgaTExKys7CiAgICAgICAgICBpZiAoczkgPT09IDMpIHJldHVybiB0aGlzW20yW3IxMV1bMV1dKyssIHRoaXNbbTJbcjExXVswXV0gPSAtbTJbcjExXVsyXSwgdGhpcy5hcHBseSgpLCB0aGlzLnJlY3Vyc2UodDksIGUxMSwgMCk7CiAgICAgICAgICBpZiAodGhpcy5hcHBseSgpKSByZXR1cm4gdGhpcy5yZWN1cnNlKHQ5LCBlMTEsIHIxMSAtIDEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcjExICs9IDEsIHIxMSA+PSBtMi5sZW5ndGggPyB0aGlzIDogdGhpcy55ZWFyID49IDNlMyA/IG51bGwgOiB0aGlzLnJlY3Vyc2UodDksIGUxMSwgcjExKTsKICAgICAgfQogICAgICBpbmNyZW1lbnQodDksIGUxMSwgcjExKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2Vjb25kICs9IGUxMS5pbnRlcnZhbCAhPT0gdm9pZCAwICYmIGUxMS5pbnRlcnZhbCA+IDEgJiYgcjExID8gZTExLmludGVydmFsIDogMSwgdGhpcy5tcyA9IDAsIHRoaXMuYXBwbHkoKSwgdGhpcy5yZWN1cnNlKHQ5LCBlMTEsIDApOwogICAgICB9CiAgICAgIGdldERhdGUodDkpIHsKICAgICAgICByZXR1cm4gdDkgfHwgdGhpcy50eiA9PT0gdm9pZCAwID8gbmV3IERhdGUodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMubXMpIDogdHlwZW9mIHRoaXMudHogPT0gIm51bWJlciIgPyBuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGgsIHRoaXMuZGF5LCB0aGlzLmhvdXIsIHRoaXMubWludXRlIC0gdGhpcy50eiwgdGhpcy5zZWNvbmQsIHRoaXMubXMpKSA6IGgzLmZyb21UWihoMy50cCh0aGlzLnllYXIsIHRoaXMubW9udGggKyAxLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMudHopLCBmYWxzZSk7CiAgICAgIH0KICAgICAgZ2V0VGltZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRlKGZhbHNlKS5nZXRUaW1lKCk7CiAgICAgIH0KICAgIH07CiAgICBfMiA9IDMwICogMWUzLCB5MyA9IFtdLCBSMiA9IGNsYXNzIHsKICAgICAgbmFtZTsKICAgICAgb3B0aW9uczsKICAgICAgX3N0YXRlczsKICAgICAgZm47CiAgICAgIGNvbnN0cnVjdG9yKHQ5LCBlMTEsIHIxMSkgewogICAgICAgIGxldCBzOSwgaTExOwogICAgICAgIGlmIChnMihlMTEpKSBpMTEgPSBlMTE7CiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGUxMSA9PSAib2JqZWN0IikgczkgPSBlMTE7CiAgICAgICAgZWxzZSBpZiAoZTExICE9PSB2b2lkIDApIHRocm93IG5ldyBFcnJvcigiQ3JvbjogSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgZm9yIG9wdGlvbnNJbi4gU2hvdWxkIGJlIG9uZSBvZiBmdW5jdGlvbiwgb3Igb2JqZWN0IChvcHRpb25zKS4iKTsKICAgICAgICBpZiAoZzIocjExKSkgaTExID0gcjExOwogICAgICAgIGVsc2UgaWYgKHR5cGVvZiByMTEgPT0gIm9iamVjdCIpIHM5ID0gcjExOwogICAgICAgIGVsc2UgaWYgKHIxMSAhPT0gdm9pZCAwKSB0aHJvdyBuZXcgRXJyb3IoIkNyb246IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIGZvciBmdW5jSW4uIFNob3VsZCBiZSBvbmUgb2YgZnVuY3Rpb24sIG9yIG9iamVjdCAob3B0aW9ucykuIik7CiAgICAgICAgaWYgKHRoaXMubmFtZSA9IHM5Py5uYW1lLCB0aGlzLm9wdGlvbnMgPSBOMihzOSksIHRoaXMuX3N0YXRlcyA9IHsga2lsbDogZmFsc2UsIGJsb2NraW5nOiBmYWxzZSwgcHJldmlvdXNSdW46IHZvaWQgMCwgY3VycmVudFJ1bjogdm9pZCAwLCBvbmNlOiB2b2lkIDAsIGN1cnJlbnRUaW1lb3V0OiB2b2lkIDAsIG1heFJ1bnM6IHM5ID8gczkubWF4UnVucyA6IHZvaWQgMCwgcGF1c2VkOiBzOSA/IHM5LnBhdXNlZCA6IGZhbHNlLCBwYXR0ZXJuOiBuZXcgZDMoIiogKiAqICogKiIpIH0sIHQ5ICYmICh0OSBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIHQ5ID09ICJzdHJpbmciICYmIHQ5LmluZGV4T2YoIjoiKSA+IDApID8gdGhpcy5fc3RhdGVzLm9uY2UgPSBuZXcgZjModDksIHRoaXMub3B0aW9ucy50aW1lem9uZSB8fCB0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KSA6IHRoaXMuX3N0YXRlcy5wYXR0ZXJuID0gbmV3IGQzKHQ5LCB0aGlzLm9wdGlvbnMudGltZXpvbmUpLCB0aGlzLm5hbWUpIHsKICAgICAgICAgIGlmICh5My5maW5kKChsNikgPT4gbDYubmFtZSA9PT0gdGhpcy5uYW1lKSkgdGhyb3cgbmV3IEVycm9yKCJDcm9uOiBUcmllZCB0byBpbml0aWFsaXplIG5ldyBuYW1lZCBqb2IgJyIgKyB0aGlzLm5hbWUgKyAiJywgYnV0IG5hbWUgYWxyZWFkeSB0YWtlbi4iKTsKICAgICAgICAgIHkzLnB1c2godGhpcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpMTEgIT09IHZvaWQgMCAmJiBTMyhpMTEpICYmICh0aGlzLmZuID0gaTExLCB0aGlzLnNjaGVkdWxlKCkpLCB0aGlzOwogICAgICB9CiAgICAgIG5leHRSdW4odDkpIHsKICAgICAgICBsZXQgZTExID0gdGhpcy5fbmV4dCh0OSk7CiAgICAgICAgcmV0dXJuIGUxMSA/IGUxMS5nZXREYXRlKGZhbHNlKSA6IG51bGw7CiAgICAgIH0KICAgICAgbmV4dFJ1bnModDksIGUxMSkgewogICAgICAgIHRoaXMuX3N0YXRlcy5tYXhSdW5zICE9PSB2b2lkIDAgJiYgdDkgPiB0aGlzLl9zdGF0ZXMubWF4UnVucyAmJiAodDkgPSB0aGlzLl9zdGF0ZXMubWF4UnVucyk7CiAgICAgICAgbGV0IHIxMSA9IFtdLCBzOSA9IGUxMSB8fCB0aGlzLl9zdGF0ZXMuY3VycmVudFJ1biB8fCB2b2lkIDA7CiAgICAgICAgZm9yICg7IHQ5LS0gJiYgKHM5ID0gdGhpcy5uZXh0UnVuKHM5KSk7ICkgcjExLnB1c2goczkpOwogICAgICAgIHJldHVybiByMTE7CiAgICAgIH0KICAgICAgZ2V0UGF0dGVybigpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnBhdHRlcm4gPyB0aGlzLl9zdGF0ZXMucGF0dGVybi5wYXR0ZXJuIDogdm9pZCAwOwogICAgICB9CiAgICAgIGlzUnVubmluZygpIHsKICAgICAgICBsZXQgdDkgPSB0aGlzLm5leHRSdW4odGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4pLCBlMTEgPSAhdGhpcy5fc3RhdGVzLnBhdXNlZCwgcjExID0gdGhpcy5mbiAhPT0gdm9pZCAwLCBzOSA9ICF0aGlzLl9zdGF0ZXMua2lsbDsKICAgICAgICByZXR1cm4gZTExICYmIHIxMSAmJiBzOSAmJiB0OSAhPT0gbnVsbDsKICAgICAgfQogICAgICBpc1N0b3BwZWQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5raWxsOwogICAgICB9CiAgICAgIGlzQnVzeSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLmJsb2NraW5nOwogICAgICB9CiAgICAgIGN1cnJlbnRSdW4oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuID8gdGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4uZ2V0RGF0ZSgpIDogbnVsbDsKICAgICAgfQogICAgICBwcmV2aW91c1J1bigpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuID8gdGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuLmdldERhdGUoKSA6IG51bGw7CiAgICAgIH0KICAgICAgbXNUb05leHQodDkpIHsKICAgICAgICBsZXQgZTExID0gdGhpcy5fbmV4dCh0OSk7CiAgICAgICAgcmV0dXJuIGUxMSA/IHQ5IGluc3RhbmNlb2YgZjMgfHwgdDkgaW5zdGFuY2VvZiBEYXRlID8gZTExLmdldFRpbWUoKSAtIHQ5LmdldFRpbWUoKSA6IGUxMS5nZXRUaW1lKCkgLSBuZXcgZjModDkpLmdldFRpbWUoKSA6IG51bGw7CiAgICAgIH0KICAgICAgc3RvcCgpIHsKICAgICAgICB0aGlzLl9zdGF0ZXMua2lsbCA9IHRydWUsIHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCAmJiBjbGVhclRpbWVvdXQodGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0KTsKICAgICAgICBsZXQgdDkgPSB5My5pbmRleE9mKHRoaXMpOwogICAgICAgIHQ5ID49IDAgJiYgeTMuc3BsaWNlKHQ5LCAxKTsKICAgICAgfQogICAgICBwYXVzZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnBhdXNlZCA9IHRydWUsICF0aGlzLl9zdGF0ZXMua2lsbDsKICAgICAgfQogICAgICByZXN1bWUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5wYXVzZWQgPSBmYWxzZSwgIXRoaXMuX3N0YXRlcy5raWxsOwogICAgICB9CiAgICAgIHNjaGVkdWxlKHQ5KSB7CiAgICAgICAgaWYgKHQ5ICYmIHRoaXMuZm4pIHRocm93IG5ldyBFcnJvcigiQ3JvbjogSXQgaXMgbm90IGFsbG93ZWQgdG8gc2NoZWR1bGUgdHdvIGZ1bmN0aW9ucyB1c2luZyB0aGUgc2FtZSBDcm9uZXIgaW5zdGFuY2UuIik7CiAgICAgICAgdDkgJiYgKHRoaXMuZm4gPSB0OSk7CiAgICAgICAgbGV0IGUxMSA9IHRoaXMubXNUb05leHQoKSwgcjExID0gdGhpcy5uZXh0UnVuKHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuKTsKICAgICAgICByZXR1cm4gZTExID09IG51bGwgfHwgaXNOYU4oZTExKSB8fCByMTEgPT09IG51bGwgPyB0aGlzIDogKGUxMSA+IF8yICYmIChlMTEgPSBfMiksIHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fY2hlY2tUcmlnZ2VyKHIxMSksIGUxMSksIHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCAmJiB0aGlzLm9wdGlvbnMudW5yZWYgJiYgUDIodGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0KSwgdGhpcyk7CiAgICAgIH0KICAgICAgYXN5bmMgX3RyaWdnZXIodDkpIHsKICAgICAgICBpZiAodGhpcy5fc3RhdGVzLmJsb2NraW5nID0gdHJ1ZSwgdGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4gPSBuZXcgZjModm9pZCAwLCB0aGlzLm9wdGlvbnMudGltZXpvbmUgfHwgdGhpcy5vcHRpb25zLnV0Y09mZnNldCksIHRoaXMub3B0aW9ucy5jYXRjaCkgdHJ5IHsKICAgICAgICAgIHRoaXMuZm4gIT09IHZvaWQgMCAmJiBhd2FpdCB0aGlzLmZuKHRoaXMsIHRoaXMub3B0aW9ucy5jb250ZXh0KTsKICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICAgIGcyKHRoaXMub3B0aW9ucy5jYXRjaCkgJiYgdGhpcy5vcHRpb25zLmNhdGNoKGUxMSwgdGhpcyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgdGhpcy5mbiAhPT0gdm9pZCAwICYmIGF3YWl0IHRoaXMuZm4odGhpcywgdGhpcy5vcHRpb25zLmNvbnRleHQpOwogICAgICAgIHRoaXMuX3N0YXRlcy5wcmV2aW91c1J1biA9IG5ldyBmMyh0OSwgdGhpcy5vcHRpb25zLnRpbWV6b25lIHx8IHRoaXMub3B0aW9ucy51dGNPZmZzZXQpLCB0aGlzLl9zdGF0ZXMuYmxvY2tpbmcgPSBmYWxzZTsKICAgICAgfQogICAgICBhc3luYyB0cmlnZ2VyKCkgewogICAgICAgIGF3YWl0IHRoaXMuX3RyaWdnZXIoKTsKICAgICAgfQogICAgICBydW5zTGVmdCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLm1heFJ1bnM7CiAgICAgIH0KICAgICAgX2NoZWNrVHJpZ2dlcih0OSkgewogICAgICAgIGxldCBlMTEgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgcjExID0gIXRoaXMuX3N0YXRlcy5wYXVzZWQgJiYgZTExLmdldFRpbWUoKSA+PSB0OS5nZXRUaW1lKCksIHM5ID0gdGhpcy5fc3RhdGVzLmJsb2NraW5nICYmIHRoaXMub3B0aW9ucy5wcm90ZWN0OwogICAgICAgIHIxMSAmJiAhczkgPyAodGhpcy5fc3RhdGVzLm1heFJ1bnMgIT09IHZvaWQgMCAmJiB0aGlzLl9zdGF0ZXMubWF4UnVucy0tLCB0aGlzLl90cmlnZ2VyKCkpIDogcjExICYmIHM5ICYmIGcyKHRoaXMub3B0aW9ucy5wcm90ZWN0KSAmJiBzZXRUaW1lb3V0KCgpID0+IHRoaXMub3B0aW9ucy5wcm90ZWN0KHRoaXMpLCAwKSwgdGhpcy5zY2hlZHVsZSgpOwogICAgICB9CiAgICAgIF9uZXh0KHQ5KSB7CiAgICAgICAgbGV0IGUxMSA9ICEhKHQ5IHx8IHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuKSwgcjExID0gZmFsc2U7CiAgICAgICAgIXQ5ICYmIHRoaXMub3B0aW9ucy5zdGFydEF0ICYmIHRoaXMub3B0aW9ucy5pbnRlcnZhbCAmJiAoW3Q5LCBlMTFdID0gdGhpcy5fY2FsY3VsYXRlUHJldmlvdXNSdW4odDksIGUxMSksIHIxMSA9ICF0OSksIHQ5ID0gbmV3IGYzKHQ5LCB0aGlzLm9wdGlvbnMudGltZXpvbmUgfHwgdGhpcy5vcHRpb25zLnV0Y09mZnNldCksIHRoaXMub3B0aW9ucy5zdGFydEF0ICYmIHQ5ICYmIHQ5LmdldFRpbWUoKSA8IHRoaXMub3B0aW9ucy5zdGFydEF0LmdldFRpbWUoKSAmJiAodDkgPSB0aGlzLm9wdGlvbnMuc3RhcnRBdCk7CiAgICAgICAgbGV0IHM5ID0gdGhpcy5fc3RhdGVzLm9uY2UgfHwgbmV3IGYzKHQ5LCB0aGlzLm9wdGlvbnMudGltZXpvbmUgfHwgdGhpcy5vcHRpb25zLnV0Y09mZnNldCk7CiAgICAgICAgcmV0dXJuICFyMTEgJiYgczkgIT09IHRoaXMuX3N0YXRlcy5vbmNlICYmIChzOSA9IHM5LmluY3JlbWVudCh0aGlzLl9zdGF0ZXMucGF0dGVybiwgdGhpcy5vcHRpb25zLCBlMTEpKSwgdGhpcy5fc3RhdGVzLm9uY2UgJiYgdGhpcy5fc3RhdGVzLm9uY2UuZ2V0VGltZSgpIDw9IHQ5LmdldFRpbWUoKSB8fCBzOSA9PT0gbnVsbCB8fCB0aGlzLl9zdGF0ZXMubWF4UnVucyAhPT0gdm9pZCAwICYmIHRoaXMuX3N0YXRlcy5tYXhSdW5zIDw9IDAgfHwgdGhpcy5fc3RhdGVzLmtpbGwgfHwgdGhpcy5vcHRpb25zLnN0b3BBdCAmJiBzOS5nZXRUaW1lKCkgPj0gdGhpcy5vcHRpb25zLnN0b3BBdC5nZXRUaW1lKCkgPyBudWxsIDogczk7CiAgICAgIH0KICAgICAgX2NhbGN1bGF0ZVByZXZpb3VzUnVuKHQ5LCBlMTEpIHsKICAgICAgICBsZXQgcjExID0gbmV3IGYzKHZvaWQgMCwgdGhpcy5vcHRpb25zLnRpbWV6b25lIHx8IHRoaXMub3B0aW9ucy51dGNPZmZzZXQpLCBzOSA9IHQ5OwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc3RhcnRBdC5nZXRUaW1lKCkgPD0gcjExLmdldFRpbWUoKSkgewogICAgICAgICAgczkgPSB0aGlzLm9wdGlvbnMuc3RhcnRBdDsKICAgICAgICAgIGxldCBpMTEgPSBzOS5nZXRUaW1lKCkgKyB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwgKiAxZTM7CiAgICAgICAgICBmb3IgKDsgaTExIDw9IHIxMS5nZXRUaW1lKCk7ICkgczkgPSBuZXcgZjMoczksIHRoaXMub3B0aW9ucy50aW1lem9uZSB8fCB0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KS5pbmNyZW1lbnQodGhpcy5fc3RhdGVzLnBhdHRlcm4sIHRoaXMub3B0aW9ucywgdHJ1ZSksIGkxMSA9IHM5LmdldFRpbWUoKSArIHRoaXMub3B0aW9ucy5pbnRlcnZhbCAqIDFlMzsKICAgICAgICAgIGUxMSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzOSA9PT0gbnVsbCAmJiAoczkgPSB2b2lkIDApLCBbczksIGUxMV07CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29uc3RhbnRzLmpzCnZhciBkYXlzSW5XZWVrLCBkYXlzSW5ZZWFyLCBtYXhUaW1lLCBtaW5UaW1lLCBtaWxsaXNlY29uZHNJbldlZWssIG1pbGxpc2Vjb25kc0luRGF5LCBtaWxsaXNlY29uZHNJbk1pbnV0ZSwgbWlsbGlzZWNvbmRzSW5Ib3VyLCBtaWxsaXNlY29uZHNJblNlY29uZCwgbWludXRlc0luWWVhciwgbWludXRlc0luTW9udGgsIG1pbnV0ZXNJbkRheSwgbWludXRlc0luSG91ciwgbW9udGhzSW5RdWFydGVyLCBtb250aHNJblllYXIsIHF1YXJ0ZXJzSW5ZZWFyLCBzZWNvbmRzSW5Ib3VyLCBzZWNvbmRzSW5NaW51dGUsIHNlY29uZHNJbkRheSwgc2Vjb25kc0luV2Vlaywgc2Vjb25kc0luWWVhciwgc2Vjb25kc0luTW9udGgsIHNlY29uZHNJblF1YXJ0ZXIsIGNvbnN0cnVjdEZyb21TeW1ib2w7CnZhciBpbml0X2NvbnN0YW50cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdGFudHMuanMiKCkgewogICAgZGF5c0luV2VlayA9IDc7CiAgICBkYXlzSW5ZZWFyID0gMzY1LjI0MjU7CiAgICBtYXhUaW1lID0gTWF0aC5wb3coMTAsIDgpICogMjQgKiA2MCAqIDYwICogMWUzOwogICAgbWluVGltZSA9IC1tYXhUaW1lOwogICAgbWlsbGlzZWNvbmRzSW5XZWVrID0gNjA0OGU1OwogICAgbWlsbGlzZWNvbmRzSW5EYXkgPSA4NjRlNTsKICAgIG1pbGxpc2Vjb25kc0luTWludXRlID0gNmU0OwogICAgbWlsbGlzZWNvbmRzSW5Ib3VyID0gMzZlNTsKICAgIG1pbGxpc2Vjb25kc0luU2Vjb25kID0gMWUzOwogICAgbWludXRlc0luWWVhciA9IDUyNTYwMDsKICAgIG1pbnV0ZXNJbk1vbnRoID0gNDMyMDA7CiAgICBtaW51dGVzSW5EYXkgPSAxNDQwOwogICAgbWludXRlc0luSG91ciA9IDYwOwogICAgbW9udGhzSW5RdWFydGVyID0gMzsKICAgIG1vbnRoc0luWWVhciA9IDEyOwogICAgcXVhcnRlcnNJblllYXIgPSA0OwogICAgc2Vjb25kc0luSG91ciA9IDM2MDA7CiAgICBzZWNvbmRzSW5NaW51dGUgPSA2MDsKICAgIHNlY29uZHNJbkRheSA9IHNlY29uZHNJbkhvdXIgKiAyNDsKICAgIHNlY29uZHNJbldlZWsgPSBzZWNvbmRzSW5EYXkgKiA3OwogICAgc2Vjb25kc0luWWVhciA9IHNlY29uZHNJbkRheSAqIGRheXNJblllYXI7CiAgICBzZWNvbmRzSW5Nb250aCA9IHNlY29uZHNJblllYXIgLyAxMjsKICAgIHNlY29uZHNJblF1YXJ0ZXIgPSBzZWNvbmRzSW5Nb250aCAqIDM7CiAgICBjb25zdHJ1Y3RGcm9tU3ltYm9sID0gLyogQF9fUFVSRV9fICovIFN5bWJvbC5mb3IoImNvbnN0cnVjdERhdGVGcm9tIik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29uc3RydWN0RnJvbS5qcwpmdW5jdGlvbiBjb25zdHJ1Y3RGcm9tKGRhdGUsIHZhbHVlMikgewogIGlmICh0eXBlb2YgZGF0ZSA9PT0gImZ1bmN0aW9uIikgcmV0dXJuIGRhdGUodmFsdWUyKTsKICBpZiAoZGF0ZSAmJiB0eXBlb2YgZGF0ZSA9PT0gIm9iamVjdCIgJiYgY29uc3RydWN0RnJvbVN5bWJvbCBpbiBkYXRlKQogICAgcmV0dXJuIGRhdGVbY29uc3RydWN0RnJvbVN5bWJvbF0odmFsdWUyKTsKICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBuZXcgZGF0ZS5jb25zdHJ1Y3Rvcih2YWx1ZTIpOwogIHJldHVybiBuZXcgRGF0ZSh2YWx1ZTIpOwp9CnZhciBjb25zdHJ1Y3RGcm9tX2RlZmF1bHQ7CnZhciBpbml0X2NvbnN0cnVjdEZyb20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29uc3RydWN0RnJvbS5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgY29uc3RydWN0RnJvbV9kZWZhdWx0ID0gY29uc3RydWN0RnJvbTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy90b0RhdGUuanMKZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50LCBjb250ZXh0MikgewogIHJldHVybiBjb25zdHJ1Y3RGcm9tKGNvbnRleHQyIHx8IGFyZ3VtZW50LCBhcmd1bWVudCk7Cn0KdmFyIHRvRGF0ZV9kZWZhdWx0Owp2YXIgaW5pdF90b0RhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvdG9EYXRlLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgdG9EYXRlX2RlZmF1bHQgPSB0b0RhdGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkRGF5cy5qcwpmdW5jdGlvbiBhZGREYXlzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoaXNOYU4oYW1vdW50KSkgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgTmFOKTsKICBpZiAoIWFtb3VudCkgcmV0dXJuIF9kYXRlOwogIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpICsgYW1vdW50KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGFkZERheXNfZGVmYXVsdDsKdmFyIGluaXRfYWRkRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGREYXlzLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGFkZERheXNfZGVmYXVsdCA9IGFkZERheXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTW9udGhzLmpzCmZ1bmN0aW9uIGFkZE1vbnRocyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKGlzTmFOKGFtb3VudCkpIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIE5hTik7CiAgaWYgKCFhbW91bnQpIHsKICAgIHJldHVybiBfZGF0ZTsKICB9CiAgY29uc3QgZGF5T2ZNb250aCA9IF9kYXRlLmdldERhdGUoKTsKICBjb25zdCBlbmRPZkRlc2lyZWRNb250aCA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgX2RhdGUuZ2V0VGltZSgpKTsKICBlbmRPZkRlc2lyZWRNb250aC5zZXRNb250aChfZGF0ZS5nZXRNb250aCgpICsgYW1vdW50ICsgMSwgMCk7CiAgY29uc3QgZGF5c0luTW9udGggPSBlbmRPZkRlc2lyZWRNb250aC5nZXREYXRlKCk7CiAgaWYgKGRheU9mTW9udGggPj0gZGF5c0luTW9udGgpIHsKICAgIHJldHVybiBlbmRPZkRlc2lyZWRNb250aDsKICB9IGVsc2UgewogICAgX2RhdGUuc2V0RnVsbFllYXIoCiAgICAgIGVuZE9mRGVzaXJlZE1vbnRoLmdldEZ1bGxZZWFyKCksCiAgICAgIGVuZE9mRGVzaXJlZE1vbnRoLmdldE1vbnRoKCksCiAgICAgIGRheU9mTW9udGgKICAgICk7CiAgICByZXR1cm4gX2RhdGU7CiAgfQp9CnZhciBhZGRNb250aHNfZGVmYXVsdDsKdmFyIGluaXRfYWRkTW9udGhzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZE1vbnRocy5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBhZGRNb250aHNfZGVmYXVsdCA9IGFkZE1vbnRoczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGQuanMKZnVuY3Rpb24gYWRkKGRhdGUsIGR1cmF0aW9uLCBvcHRpb25zKSB7CiAgY29uc3QgewogICAgeWVhcnMgPSAwLAogICAgbW9udGhzOiBtb250aHMyID0gMCwKICAgIHdlZWtzID0gMCwKICAgIGRheXM6IGRheXMyID0gMCwKICAgIGhvdXJzID0gMCwKICAgIG1pbnV0ZXMgPSAwLAogICAgc2Vjb25kcyA9IDAKICB9ID0gZHVyYXRpb247CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRhdGVXaXRoTW9udGhzID0gbW9udGhzMiB8fCB5ZWFycyA/IGFkZE1vbnRocyhfZGF0ZSwgbW9udGhzMiArIHllYXJzICogMTIpIDogX2RhdGU7CiAgY29uc3QgZGF0ZVdpdGhEYXlzID0gZGF5czIgfHwgd2Vla3MgPyBhZGREYXlzKGRhdGVXaXRoTW9udGhzLCBkYXlzMiArIHdlZWtzICogNykgOiBkYXRlV2l0aE1vbnRoczsKICBjb25zdCBtaW51dGVzVG9BZGQgPSBtaW51dGVzICsgaG91cnMgKiA2MDsKICBjb25zdCBzZWNvbmRzVG9BZGQgPSBzZWNvbmRzICsgbWludXRlc1RvQWRkICogNjA7CiAgY29uc3QgbXNUb0FkZCA9IHNlY29uZHNUb0FkZCAqIDFlMzsKICByZXR1cm4gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCArZGF0ZVdpdGhEYXlzICsgbXNUb0FkZCk7Cn0KdmFyIGFkZF9kZWZhdWx0Owp2YXIgaW5pdF9hZGQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkLmpzIigpIHsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9hZGRNb250aHMoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGFkZF9kZWZhdWx0ID0gYWRkOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2F0dXJkYXkuanMKZnVuY3Rpb24gaXNTYXR1cmRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF5KCkgPT09IDY7Cn0KdmFyIGlzU2F0dXJkYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNTYXR1cmRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhdHVyZGF5LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1NhdHVyZGF5X2RlZmF1bHQgPSBpc1NhdHVyZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU3VuZGF5LmpzCmZ1bmN0aW9uIGlzU3VuZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKSA9PT0gMDsKfQp2YXIgaXNTdW5kYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNTdW5kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTdW5kYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzU3VuZGF5X2RlZmF1bHQgPSBpc1N1bmRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1dlZWtlbmQuanMKZnVuY3Rpb24gaXNXZWVrZW5kKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXkgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpOwogIHJldHVybiBkYXkgPT09IDAgfHwgZGF5ID09PSA2Owp9CnZhciBpc1dlZWtlbmRfZGVmYXVsdDsKdmFyIGluaXRfaXNXZWVrZW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzV2Vla2VuZC5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNXZWVrZW5kX2RlZmF1bHQgPSBpc1dlZWtlbmQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkQnVzaW5lc3NEYXlzLmpzCmZ1bmN0aW9uIGFkZEJ1c2luZXNzRGF5cyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3Qgc3RhcnRlZE9uV2Vla2VuZCA9IGlzV2Vla2VuZChfZGF0ZSwgb3B0aW9ucyk7CiAgaWYgKGlzTmFOKGFtb3VudCkpIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCBOYU4pOwogIGNvbnN0IGhvdXJzID0gX2RhdGUuZ2V0SG91cnMoKTsKICBjb25zdCBzaWduID0gYW1vdW50IDwgMCA/IC0xIDogMTsKICBjb25zdCBmdWxsV2Vla3MgPSBNYXRoLnRydW5jKGFtb3VudCAvIDUpOwogIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpICsgZnVsbFdlZWtzICogNyk7CiAgbGV0IHJlc3REYXlzID0gTWF0aC5hYnMoYW1vdW50ICUgNSk7CiAgd2hpbGUgKHJlc3REYXlzID4gMCkgewogICAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBzaWduKTsKICAgIGlmICghaXNXZWVrZW5kKF9kYXRlLCBvcHRpb25zKSkgcmVzdERheXMgLT0gMTsKICB9CiAgaWYgKHN0YXJ0ZWRPbldlZWtlbmQgJiYgaXNXZWVrZW5kKF9kYXRlLCBvcHRpb25zKSAmJiBhbW91bnQgIT09IDApIHsKICAgIGlmIChpc1NhdHVyZGF5KF9kYXRlLCBvcHRpb25zKSkKICAgICAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyAoc2lnbiA8IDAgPyAyIDogLTEpKTsKICAgIGlmIChpc1N1bmRheShfZGF0ZSwgb3B0aW9ucykpCiAgICAgIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpICsgKHNpZ24gPCAwID8gMSA6IC0yKSk7CiAgfQogIF9kYXRlLnNldEhvdXJzKGhvdXJzKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGFkZEJ1c2luZXNzRGF5c19kZWZhdWx0Owp2YXIgaW5pdF9hZGRCdXNpbmVzc0RheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkQnVzaW5lc3NEYXlzLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9pc1NhdHVyZGF5KCk7CiAgICBpbml0X2lzU3VuZGF5KCk7CiAgICBpbml0X2lzV2Vla2VuZCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGFkZEJ1c2luZXNzRGF5c19kZWZhdWx0ID0gYWRkQnVzaW5lc3NEYXlzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZE1pbGxpc2Vjb25kcy5qcwpmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgK3RvRGF0ZShkYXRlKSArIGFtb3VudCk7Cn0KdmFyIGFkZE1pbGxpc2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9hZGRNaWxsaXNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTWlsbGlzZWNvbmRzLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGFkZE1pbGxpc2Vjb25kc19kZWZhdWx0ID0gYWRkTWlsbGlzZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZEhvdXJzLmpzCmZ1bmN0aW9uIGFkZEhvdXJzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGF0ZSwgYW1vdW50ICogbWlsbGlzZWNvbmRzSW5Ib3VyLCBvcHRpb25zKTsKfQp2YXIgYWRkSG91cnNfZGVmYXVsdDsKdmFyIGluaXRfYWRkSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkSG91cnMuanMiKCkgewogICAgaW5pdF9hZGRNaWxsaXNlY29uZHMoKTsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBhZGRIb3Vyc19kZWZhdWx0ID0gYWRkSG91cnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9kZWZhdWx0T3B0aW9ucy5qcwpmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHsKICByZXR1cm4gZGVmYXVsdE9wdGlvbnM7Cn0KZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMobmV3T3B0aW9ucykgewogIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9uczsKfQp2YXIgZGVmYXVsdE9wdGlvbnM7CnZhciBpbml0X2RlZmF1bHRPcHRpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZGVmYXVsdE9wdGlvbnMuanMiKCkgewogICAgZGVmYXVsdE9wdGlvbnMgPSB7fTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mV2Vlay5qcwpmdW5jdGlvbiBzdGFydE9mV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCB3ZWVrU3RhcnRzT24gPSBvcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gMDsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGF5ID0gX2RhdGUuZ2V0RGF5KCk7CiAgY29uc3QgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247CiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgLSBkaWZmKTsKICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHN0YXJ0T2ZXZWVrX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZXZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZXZWVrLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mV2Vla19kZWZhdWx0ID0gc3RhcnRPZldlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZklTT1dlZWsuanMKZnVuY3Rpb24gc3RhcnRPZklTT1dlZWsoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBzdGFydE9mV2VlayhkYXRlLCB7IC4uLm9wdGlvbnMsIHdlZWtTdGFydHNPbjogMSB9KTsKfQp2YXIgc3RhcnRPZklTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZklTT1dlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZklTT1dlZWsuanMiKCkgewogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgc3RhcnRPZklTT1dlZWtfZGVmYXVsdCA9IHN0YXJ0T2ZJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT1dlZWtZZWFyLmpzCmZ1bmN0aW9uIGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IGNvbnN0cnVjdEZyb20oX2RhdGUsIDApOwogIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDQpOwogIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3Qgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZklTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7CiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IGNvbnN0cnVjdEZyb20oX2RhdGUsIDApOwogIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0RnVsbFllYXIoeWVhciwgMCwgNCk7CiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBjb25zdCBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTsKICBpZiAoX2RhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHsKICAgIHJldHVybiB5ZWFyICsgMTsKICB9IGVsc2UgaWYgKF9kYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7CiAgICByZXR1cm4geWVhcjsKICB9IGVsc2UgewogICAgcmV0dXJuIHllYXIgLSAxOwogIH0KfQp2YXIgZ2V0SVNPV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfZ2V0SVNPV2Vla1llYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vla1llYXIuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3N0YXJ0T2ZJU09XZWVrKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0SVNPV2Vla1llYXJfZGVmYXVsdCA9IGdldElTT1dlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy5qcwpmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlKTsKICBjb25zdCB1dGNEYXRlID0gbmV3IERhdGUoCiAgICBEYXRlLlVUQygKICAgICAgX2RhdGUuZ2V0RnVsbFllYXIoKSwKICAgICAgX2RhdGUuZ2V0TW9udGgoKSwKICAgICAgX2RhdGUuZ2V0RGF0ZSgpLAogICAgICBfZGF0ZS5nZXRIb3VycygpLAogICAgICBfZGF0ZS5nZXRNaW51dGVzKCksCiAgICAgIF9kYXRlLmdldFNlY29uZHMoKSwKICAgICAgX2RhdGUuZ2V0TWlsbGlzZWNvbmRzKCkKICAgICkKICApOwogIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoX2RhdGUuZ2V0RnVsbFllYXIoKSk7CiAgcmV0dXJuICtkYXRlIC0gK3V0Y0RhdGU7Cn0KdmFyIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL25vcm1hbGl6ZURhdGVzLmpzCmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGVzKGNvbnRleHQyLCAuLi5kYXRlcykgewogIGNvbnN0IG5vcm1hbGl6ZTQgPSBjb25zdHJ1Y3RGcm9tLmJpbmQoCiAgICBudWxsLAogICAgY29udGV4dDIgfHwgZGF0ZXMuZmluZCgoZGF0ZSkgPT4gdHlwZW9mIGRhdGUgPT09ICJvYmplY3QiKQogICk7CiAgcmV0dXJuIGRhdGVzLm1hcChub3JtYWxpemU0KTsKfQp2YXIgaW5pdF9ub3JtYWxpemVEYXRlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL25vcm1hbGl6ZURhdGVzLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZEYXkuanMKZnVuY3Rpb24gc3RhcnRPZkRheShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc3RhcnRPZkRheV9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZEYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHN0YXJ0T2ZEYXlfZGVmYXVsdCA9IHN0YXJ0T2ZEYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IGxhdGVyU3RhcnRPZkRheSA9IHN0YXJ0T2ZEYXkobGF0ZXJEYXRlXyk7CiAgY29uc3QgZWFybGllclN0YXJ0T2ZEYXkgPSBzdGFydE9mRGF5KGVhcmxpZXJEYXRlXyk7CiAgY29uc3QgbGF0ZXJUaW1lc3RhbXAgPSArbGF0ZXJTdGFydE9mRGF5IC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhsYXRlclN0YXJ0T2ZEYXkpOwogIGNvbnN0IGVhcmxpZXJUaW1lc3RhbXAgPSArZWFybGllclN0YXJ0T2ZEYXkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGVhcmxpZXJTdGFydE9mRGF5KTsKICByZXR1cm4gTWF0aC5yb3VuZCgobGF0ZXJUaW1lc3RhbXAgLSBlYXJsaWVyVGltZXN0YW1wKSAvIG1pbGxpc2Vjb25kc0luRGF5KTsKfQp2YXIgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMuanMiKCkgewogICAgaW5pdF9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9zdGFydE9mRGF5KCk7CiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5czsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSVNPV2Vla1llYXIuanMKZnVuY3Rpb24gc3RhcnRPZklTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCB5ZWFyID0gZ2V0SVNPV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7CiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5ID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTsKICBmb3VydGhPZkphbnVhcnkuc2V0RnVsbFllYXIoeWVhciwgMCwgNCk7CiAgZm91cnRoT2ZKYW51YXJ5LnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpOwp9CnZhciBzdGFydE9mSVNPV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZJU09XZWVrWWVhci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0SVNPV2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIHN0YXJ0T2ZJU09XZWVrWWVhcl9kZWZhdWx0ID0gc3RhcnRPZklTT1dlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldElTT1dlZWtZZWFyLmpzCmZ1bmN0aW9uIHNldElTT1dlZWtZZWFyKGRhdGUsIHdlZWtZZWFyLCBvcHRpb25zKSB7CiAgbGV0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKAogICAgX2RhdGUsCiAgICBzdGFydE9mSVNPV2Vla1llYXIoX2RhdGUsIG9wdGlvbnMpCiAgKTsKICBjb25zdCBmb3VydGhPZkphbnVhcnkgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZvdXJ0aE9mSmFudWFyeS5zZXRGdWxsWWVhcih3ZWVrWWVhciwgMCwgNCk7CiAgZm91cnRoT2ZKYW51YXJ5LnNldEhvdXJzKDAsIDAsIDAsIDApOwogIF9kYXRlID0gc3RhcnRPZklTT1dlZWtZZWFyKGZvdXJ0aE9mSmFudWFyeSk7CiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBkaWZmKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHNldElTT1dlZWtZZWFyX2RlZmF1bHQ7CnZhciBpbml0X3NldElTT1dlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldElTT1dlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0SVNPV2Vla1llYXJfZGVmYXVsdCA9IHNldElTT1dlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZElTT1dlZWtZZWFycy5qcwpmdW5jdGlvbiBhZGRJU09XZWVrWWVhcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIHNldElTT1dlZWtZZWFyKGRhdGUsIGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpICsgYW1vdW50LCBvcHRpb25zKTsKfQp2YXIgYWRkSVNPV2Vla1llYXJzX2RlZmF1bHQ7CnZhciBpbml0X2FkZElTT1dlZWtZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRJU09XZWVrWWVhcnMuanMiKCkgewogICAgaW5pdF9nZXRJU09XZWVrWWVhcigpOwogICAgaW5pdF9zZXRJU09XZWVrWWVhcigpOwogICAgYWRkSVNPV2Vla1llYXJzX2RlZmF1bHQgPSBhZGRJU09XZWVrWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTWludXRlcy5qcwpmdW5jdGlvbiBhZGRNaW51dGVzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBfZGF0ZS5zZXRUaW1lKF9kYXRlLmdldFRpbWUoKSArIGFtb3VudCAqIG1pbGxpc2Vjb25kc0luTWludXRlKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGFkZE1pbnV0ZXNfZGVmYXVsdDsKdmFyIGluaXRfYWRkTWludXRlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRNaW51dGVzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgYWRkTWludXRlc19kZWZhdWx0ID0gYWRkTWludXRlczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRRdWFydGVycy5qcwpmdW5jdGlvbiBhZGRRdWFydGVycyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIGFtb3VudCAqIDMsIG9wdGlvbnMpOwp9CnZhciBhZGRRdWFydGVyc19kZWZhdWx0Owp2YXIgaW5pdF9hZGRRdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRRdWFydGVycy5qcyIoKSB7CiAgICBpbml0X2FkZE1vbnRocygpOwogICAgYWRkUXVhcnRlcnNfZGVmYXVsdCA9IGFkZFF1YXJ0ZXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZFNlY29uZHMuanMKZnVuY3Rpb24gYWRkU2Vjb25kcyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRhdGUsIGFtb3VudCAqIDFlMywgb3B0aW9ucyk7Cn0KdmFyIGFkZFNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfYWRkU2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRTZWNvbmRzLmpzIigpIHsKICAgIGluaXRfYWRkTWlsbGlzZWNvbmRzKCk7CiAgICBhZGRTZWNvbmRzX2RlZmF1bHQgPSBhZGRTZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZFdlZWtzLmpzCmZ1bmN0aW9uIGFkZFdlZWtzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGREYXlzKGRhdGUsIGFtb3VudCAqIDcsIG9wdGlvbnMpOwp9CnZhciBhZGRXZWVrc19kZWZhdWx0Owp2YXIgaW5pdF9hZGRXZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRXZWVrcy5qcyIoKSB7CiAgICBpbml0X2FkZERheXMoKTsKICAgIGFkZFdlZWtzX2RlZmF1bHQgPSBhZGRXZWVrczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRZZWFycy5qcwpmdW5jdGlvbiBhZGRZZWFycyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIGFtb3VudCAqIDEyLCBvcHRpb25zKTsKfQp2YXIgYWRkWWVhcnNfZGVmYXVsdDsKdmFyIGluaXRfYWRkWWVhcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkWWVhcnMuanMiKCkgewogICAgaW5pdF9hZGRNb250aHMoKTsKICAgIGFkZFllYXJzX2RlZmF1bHQgPSBhZGRZZWFyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hcmVJbnRlcnZhbHNPdmVybGFwcGluZy5qcwpmdW5jdGlvbiBhcmVJbnRlcnZhbHNPdmVybGFwcGluZyhpbnRlcnZhbExlZnQsIGludGVydmFsUmlnaHQsIG9wdGlvbnMpIHsKICBjb25zdCBbbGVmdFN0YXJ0VGltZSwgbGVmdEVuZFRpbWVdID0gWwogICAgK3RvRGF0ZShpbnRlcnZhbExlZnQuc3RhcnQsIG9wdGlvbnM/LmluKSwKICAgICt0b0RhdGUoaW50ZXJ2YWxMZWZ0LmVuZCwgb3B0aW9ucz8uaW4pCiAgXS5zb3J0KChhNSwgYjUpID0+IGE1IC0gYjUpOwogIGNvbnN0IFtyaWdodFN0YXJ0VGltZSwgcmlnaHRFbmRUaW1lXSA9IFsKICAgICt0b0RhdGUoaW50ZXJ2YWxSaWdodC5zdGFydCwgb3B0aW9ucz8uaW4pLAogICAgK3RvRGF0ZShpbnRlcnZhbFJpZ2h0LmVuZCwgb3B0aW9ucz8uaW4pCiAgXS5zb3J0KChhNSwgYjUpID0+IGE1IC0gYjUpOwogIGlmIChvcHRpb25zPy5pbmNsdXNpdmUpCiAgICByZXR1cm4gbGVmdFN0YXJ0VGltZSA8PSByaWdodEVuZFRpbWUgJiYgcmlnaHRTdGFydFRpbWUgPD0gbGVmdEVuZFRpbWU7CiAgcmV0dXJuIGxlZnRTdGFydFRpbWUgPCByaWdodEVuZFRpbWUgJiYgcmlnaHRTdGFydFRpbWUgPCBsZWZ0RW5kVGltZTsKfQp2YXIgYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmdfZGVmYXVsdDsKdmFyIGluaXRfYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmcuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGFyZUludGVydmFsc092ZXJsYXBwaW5nX2RlZmF1bHQgPSBhcmVJbnRlcnZhbHNPdmVybGFwcGluZzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tYXguanMKZnVuY3Rpb24gbWF4MihkYXRlcywgb3B0aW9ucykgewogIGxldCByZXN1bHQ7CiAgbGV0IGNvbnRleHQyID0gb3B0aW9ucz8uaW47CiAgZGF0ZXMuZm9yRWFjaCgoZGF0ZSkgPT4gewogICAgaWYgKCFjb250ZXh0MiAmJiB0eXBlb2YgZGF0ZSA9PT0gIm9iamVjdCIpCiAgICAgIGNvbnRleHQyID0gY29uc3RydWN0RnJvbS5iaW5kKG51bGwsIGRhdGUpOwogICAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgY29udGV4dDIpOwogICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0IDwgZGF0ZV8gfHwgaXNOYU4oK2RhdGVfKSkgcmVzdWx0ID0gZGF0ZV87CiAgfSk7CiAgcmV0dXJuIGNvbnN0cnVjdEZyb20oY29udGV4dDIsIHJlc3VsdCB8fCBOYU4pOwp9CnZhciBtYXhfZGVmYXVsdDsKdmFyIGluaXRfbWF4MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tYXguanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgbWF4X2RlZmF1bHQgPSBtYXgyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbi5qcwpmdW5jdGlvbiBtaW4yKGRhdGVzLCBvcHRpb25zKSB7CiAgbGV0IHJlc3VsdDsKICBsZXQgY29udGV4dDIgPSBvcHRpb25zPy5pbjsKICBkYXRlcy5mb3JFYWNoKChkYXRlKSA9PiB7CiAgICBpZiAoIWNvbnRleHQyICYmIHR5cGVvZiBkYXRlID09PSAib2JqZWN0IikKICAgICAgY29udGV4dDIgPSBjb25zdHJ1Y3RGcm9tLmJpbmQobnVsbCwgZGF0ZSk7CiAgICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBjb250ZXh0Mik7CiAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQgPiBkYXRlXyB8fCBpc05hTigrZGF0ZV8pKSByZXN1bHQgPSBkYXRlXzsKICB9KTsKICByZXR1cm4gY29uc3RydWN0RnJvbShjb250ZXh0MiwgcmVzdWx0IHx8IE5hTik7Cn0KdmFyIG1pbl9kZWZhdWx0Owp2YXIgaW5pdF9taW4yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbi5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBtaW5fZGVmYXVsdCA9IG1pbjI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY2xhbXAuanMKZnVuY3Rpb24gY2xhbXAoZGF0ZSwgaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgW2RhdGVfLCBzdGFydCwgZW5kM10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgZGF0ZSwKICAgIGludGVydmFsMy5zdGFydCwKICAgIGludGVydmFsMy5lbmQKICApOwogIHJldHVybiBtaW4yKFttYXgyKFtkYXRlXywgc3RhcnRdLCBvcHRpb25zKSwgZW5kM10sIG9wdGlvbnMpOwp9CnZhciBjbGFtcF9kZWZhdWx0Owp2YXIgaW5pdF9jbGFtcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jbGFtcC5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X21heDIoKTsKICAgIGluaXRfbWluMigpOwogICAgY2xhbXBfZGVmYXVsdCA9IGNsYW1wOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Nsb3Nlc3RJbmRleFRvLmpzCmZ1bmN0aW9uIGNsb3Nlc3RJbmRleFRvKGRhdGVUb0NvbXBhcmUsIGRhdGVzKSB7CiAgY29uc3QgdGltZVRvQ29tcGFyZSA9ICt0b0RhdGUoZGF0ZVRvQ29tcGFyZSk7CiAgaWYgKGlzTmFOKHRpbWVUb0NvbXBhcmUpKSByZXR1cm4gTmFOOwogIGxldCByZXN1bHQ7CiAgbGV0IG1pbkRpc3RhbmNlOwogIGRhdGVzLmZvckVhY2goKGRhdGUsIGluZGV4MikgPT4gewogICAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSk7CiAgICBpZiAoaXNOYU4oK2RhdGVfKSkgewogICAgICByZXN1bHQgPSBOYU47CiAgICAgIG1pbkRpc3RhbmNlID0gTmFOOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKHRpbWVUb0NvbXBhcmUgLSArZGF0ZV8pOwogICAgaWYgKHJlc3VsdCA9PSBudWxsIHx8IGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHsKICAgICAgcmVzdWx0ID0gaW5kZXgyOwogICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlOwogICAgfQogIH0pOwogIHJldHVybiByZXN1bHQ7Cn0KdmFyIGNsb3Nlc3RJbmRleFRvX2RlZmF1bHQ7CnZhciBpbml0X2Nsb3Nlc3RJbmRleFRvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Nsb3Nlc3RJbmRleFRvLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBjbG9zZXN0SW5kZXhUb19kZWZhdWx0ID0gY2xvc2VzdEluZGV4VG87CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY2xvc2VzdFRvLmpzCmZ1bmN0aW9uIGNsb3Nlc3RUbyhkYXRlVG9Db21wYXJlLCBkYXRlcywgb3B0aW9ucykgewogIGNvbnN0IFtkYXRlVG9Db21wYXJlXywgLi4uZGF0ZXNfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBkYXRlVG9Db21wYXJlLAogICAgLi4uZGF0ZXMKICApOwogIGNvbnN0IGluZGV4MiA9IGNsb3Nlc3RJbmRleFRvKGRhdGVUb0NvbXBhcmVfLCBkYXRlc18pOwogIGlmICh0eXBlb2YgaW5kZXgyID09PSAibnVtYmVyIiAmJiBpc05hTihpbmRleDIpKQogICAgcmV0dXJuIGNvbnN0cnVjdEZyb20oZGF0ZVRvQ29tcGFyZV8sIE5hTik7CiAgaWYgKGluZGV4MiAhPT0gdm9pZCAwKSByZXR1cm4gZGF0ZXNfW2luZGV4Ml07Cn0KdmFyIGNsb3Nlc3RUb19kZWZhdWx0Owp2YXIgaW5pdF9jbG9zZXN0VG8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY2xvc2VzdFRvLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfY2xvc2VzdEluZGV4VG8oKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgY2xvc2VzdFRvX2RlZmF1bHQgPSBjbG9zZXN0VG87CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29tcGFyZUFzYy5qcwpmdW5jdGlvbiBjb21wYXJlQXNjKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIHsKICBjb25zdCBkaWZmID0gK3RvRGF0ZShkYXRlTGVmdCkgLSArdG9EYXRlKGRhdGVSaWdodCk7CiAgaWYgKGRpZmYgPCAwKSByZXR1cm4gLTE7CiAgZWxzZSBpZiAoZGlmZiA+IDApIHJldHVybiAxOwogIHJldHVybiBkaWZmOwp9CnZhciBjb21wYXJlQXNjX2RlZmF1bHQ7CnZhciBpbml0X2NvbXBhcmVBc2MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29tcGFyZUFzYy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgY29tcGFyZUFzY19kZWZhdWx0ID0gY29tcGFyZUFzYzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb21wYXJlRGVzYy5qcwpmdW5jdGlvbiBjb21wYXJlRGVzYyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KSB7CiAgY29uc3QgZGlmZiA9ICt0b0RhdGUoZGF0ZUxlZnQpIC0gK3RvRGF0ZShkYXRlUmlnaHQpOwogIGlmIChkaWZmID4gMCkgcmV0dXJuIC0xOwogIGVsc2UgaWYgKGRpZmYgPCAwKSByZXR1cm4gMTsKICByZXR1cm4gZGlmZjsKfQp2YXIgY29tcGFyZURlc2NfZGVmYXVsdDsKdmFyIGluaXRfY29tcGFyZURlc2MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29tcGFyZURlc2MuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGNvbXBhcmVEZXNjX2RlZmF1bHQgPSBjb21wYXJlRGVzYzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdHJ1Y3ROb3cuanMKZnVuY3Rpb24gY29uc3RydWN0Tm93KGRhdGUpIHsKICByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlLCBEYXRlLm5vdygpKTsKfQp2YXIgY29uc3RydWN0Tm93X2RlZmF1bHQ7CnZhciBpbml0X2NvbnN0cnVjdE5vdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdHJ1Y3ROb3cuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBjb25zdHJ1Y3ROb3dfZGVmYXVsdCA9IGNvbnN0cnVjdE5vdzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kYXlzVG9XZWVrcy5qcwpmdW5jdGlvbiBkYXlzVG9XZWVrcyhkYXlzMikgewogIGNvbnN0IHJlc3VsdCA9IE1hdGgudHJ1bmMoZGF5czIgLyBkYXlzSW5XZWVrKTsKICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDsKfQp2YXIgZGF5c1RvV2Vla3NfZGVmYXVsdDsKdmFyIGluaXRfZGF5c1RvV2Vla3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGF5c1RvV2Vla3MuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGRheXNUb1dlZWtzX2RlZmF1bHQgPSBkYXlzVG9XZWVrczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVEYXkuanMKZnVuY3Rpb24gaXNTYW1lRGF5KGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbZGF0ZUxlZnRfLCBkYXRlUmlnaHRfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgcmV0dXJuICtzdGFydE9mRGF5KGRhdGVMZWZ0XykgPT09ICtzdGFydE9mRGF5KGRhdGVSaWdodF8pOwp9CnZhciBpc1NhbWVEYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNTYW1lRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZURheS5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X3N0YXJ0T2ZEYXkoKTsKICAgIGlzU2FtZURheV9kZWZhdWx0ID0gaXNTYW1lRGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRGF0ZS5qcwpmdW5jdGlvbiBpc0RhdGUodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMiBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIHZhbHVlMiA9PT0gIm9iamVjdCIgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlMikgPT09ICJbb2JqZWN0IERhdGVdIjsKfQp2YXIgaXNEYXRlX2RlZmF1bHQ7CnZhciBpbml0X2lzRGF0ZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNEYXRlLmpzIigpIHsKICAgIGlzRGF0ZV9kZWZhdWx0ID0gaXNEYXRlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVmFsaWQuanMKZnVuY3Rpb24gaXNWYWxpZChkYXRlKSB7CiAgcmV0dXJuICEoIWlzRGF0ZShkYXRlKSAmJiB0eXBlb2YgZGF0ZSAhPT0gIm51bWJlciIgfHwgaXNOYU4oK3RvRGF0ZShkYXRlKSkpOwp9CnZhciBpc1ZhbGlkX2RlZmF1bHQ7CnZhciBpbml0X2lzVmFsaWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNWYWxpZC5qcyIoKSB7CiAgICBpbml0X2lzRGF0ZTIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1ZhbGlkX2RlZmF1bHQgPSBpc1ZhbGlkOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkJ1c2luZXNzRGF5cy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5CdXNpbmVzc0RheXMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBpZiAoIWlzVmFsaWQobGF0ZXJEYXRlXykgfHwgIWlzVmFsaWQoZWFybGllckRhdGVfKSkgcmV0dXJuIE5hTjsKICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgY29uc3Qgc2lnbiA9IGRpZmYgPCAwID8gLTEgOiAxOwogIGNvbnN0IHdlZWtzID0gTWF0aC50cnVuYyhkaWZmIC8gNyk7CiAgbGV0IHJlc3VsdCA9IHdlZWtzICogNTsKICBsZXQgbW92aW5nRGF0ZSA9IGFkZERheXMoZWFybGllckRhdGVfLCB3ZWVrcyAqIDcpOwogIHdoaWxlICghaXNTYW1lRGF5KGxhdGVyRGF0ZV8sIG1vdmluZ0RhdGUpKSB7CiAgICByZXN1bHQgKz0gaXNXZWVrZW5kKG1vdmluZ0RhdGUsIG9wdGlvbnMpID8gMCA6IHNpZ247CiAgICBtb3ZpbmdEYXRlID0gYWRkRGF5cyhtb3ZpbmdEYXRlLCBzaWduKTsKICB9CiAgcmV0dXJuIHJlc3VsdCA9PT0gMCA/IDAgOiByZXN1bHQ7Cn0KdmFyIGRpZmZlcmVuY2VJbkJ1c2luZXNzRGF5c19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5CdXNpbmVzc0RheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoKTsKICAgIGluaXRfaXNTYW1lRGF5KCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfaXNXZWVrZW5kKCk7CiAgICBkaWZmZXJlbmNlSW5CdXNpbmVzc0RheXNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkJ1c2luZXNzRGF5czsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIHJldHVybiBnZXRJU09XZWVrWWVhcihsYXRlckRhdGVfLCBvcHRpb25zKSAtIGdldElTT1dlZWtZZWFyKGVhcmxpZXJEYXRlXywgb3B0aW9ucyk7Cn0KdmFyIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfZ2V0SVNPV2Vla1llYXIoKTsKICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBjb25zdCBzdGFydE9mSVNPV2Vla0xlZnQgPSBzdGFydE9mSVNPV2VlayhsYXRlckRhdGVfKTsKICBjb25zdCBzdGFydE9mSVNPV2Vla1JpZ2h0ID0gc3RhcnRPZklTT1dlZWsoZWFybGllckRhdGVfKTsKICBjb25zdCB0aW1lc3RhbXBMZWZ0ID0gK3N0YXJ0T2ZJU09XZWVrTGVmdCAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoc3RhcnRPZklTT1dlZWtMZWZ0KTsKICBjb25zdCB0aW1lc3RhbXBSaWdodCA9ICtzdGFydE9mSVNPV2Vla1JpZ2h0IC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhzdGFydE9mSVNPV2Vla1JpZ2h0KTsKICByZXR1cm4gTWF0aC5yb3VuZCgodGltZXN0YW1wTGVmdCAtIHRpbWVzdGFtcFJpZ2h0KSAvIG1pbGxpc2Vjb25kc0luV2Vlayk7Cn0KdmFyIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3NfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzLmpzIigpIHsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3NfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3M7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBjb25zdCB5ZWFyc0RpZmYgPSBsYXRlckRhdGVfLmdldEZ1bGxZZWFyKCkgLSBlYXJsaWVyRGF0ZV8uZ2V0RnVsbFllYXIoKTsKICBjb25zdCBtb250aHNEaWZmID0gbGF0ZXJEYXRlXy5nZXRNb250aCgpIC0gZWFybGllckRhdGVfLmdldE1vbnRoKCk7CiAgcmV0dXJuIHllYXJzRGlmZiAqIDEyICsgbW9udGhzRGlmZjsKfQp2YXIgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFF1YXJ0ZXIuanMKZnVuY3Rpb24gZ2V0UXVhcnRlcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IHF1YXJ0ZXIgPSBNYXRoLnRydW5jKF9kYXRlLmdldE1vbnRoKCkgLyAzKSArIDE7CiAgcmV0dXJuIHF1YXJ0ZXI7Cn0KdmFyIGdldFF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfZ2V0UXVhcnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRRdWFydGVyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRRdWFydGVyX2RlZmF1bHQgPSBnZXRRdWFydGVyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHllYXJzRGlmZiA9IGxhdGVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAtIGVhcmxpZXJEYXRlXy5nZXRGdWxsWWVhcigpOwogIGNvbnN0IHF1YXJ0ZXJzRGlmZiA9IGdldFF1YXJ0ZXIobGF0ZXJEYXRlXykgLSBnZXRRdWFydGVyKGVhcmxpZXJEYXRlXyk7CiAgcmV0dXJuIHllYXJzRGlmZiAqIDQgKyBxdWFydGVyc0RpZmY7Cn0KdmFyIGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfZ2V0UXVhcnRlcigpOwogICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVyc19kZWZhdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBjb25zdCBsYXRlclN0YXJ0T2ZXZWVrID0gc3RhcnRPZldlZWsobGF0ZXJEYXRlXywgb3B0aW9ucyk7CiAgY29uc3QgZWFybGllclN0YXJ0T2ZXZWVrID0gc3RhcnRPZldlZWsoZWFybGllckRhdGVfLCBvcHRpb25zKTsKICBjb25zdCBsYXRlclRpbWVzdGFtcCA9ICtsYXRlclN0YXJ0T2ZXZWVrIC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhsYXRlclN0YXJ0T2ZXZWVrKTsKICBjb25zdCBlYXJsaWVyVGltZXN0YW1wID0gK2VhcmxpZXJTdGFydE9mV2VlayAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZWFybGllclN0YXJ0T2ZXZWVrKTsKICByZXR1cm4gTWF0aC5yb3VuZCgobGF0ZXJUaW1lc3RhbXAgLSBlYXJsaWVyVGltZXN0YW1wKSAvIG1pbGxpc2Vjb25kc0luV2Vlayk7Cn0KdmFyIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3NfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzLmpzIigpIHsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3NfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3M7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgcmV0dXJuIGxhdGVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAtIGVhcmxpZXJEYXRlXy5nZXRGdWxsWWVhcigpOwp9CnZhciBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycy5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkRheXMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluRGF5cyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHNpZ24gPSBjb21wYXJlTG9jYWxBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICBjb25zdCBkaWZmZXJlbmNlID0gTWF0aC5hYnMoCiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKQogICk7CiAgbGF0ZXJEYXRlXy5zZXREYXRlKGxhdGVyRGF0ZV8uZ2V0RGF0ZSgpIC0gc2lnbiAqIGRpZmZlcmVuY2UpOwogIGNvbnN0IGlzTGFzdERheU5vdEZ1bGwgPSBOdW1iZXIoCiAgICBjb21wYXJlTG9jYWxBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSA9PT0gLXNpZ24KICApOwogIGNvbnN0IHJlc3VsdCA9IHNpZ24gKiAoZGlmZmVyZW5jZSAtIGlzTGFzdERheU5vdEZ1bGwpOwogIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0Owp9CmZ1bmN0aW9uIGNvbXBhcmVMb2NhbEFzYyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7CiAgY29uc3QgZGlmZiA9IGxhdGVyRGF0ZS5nZXRGdWxsWWVhcigpIC0gZWFybGllckRhdGUuZ2V0RnVsbFllYXIoKSB8fCBsYXRlckRhdGUuZ2V0TW9udGgoKSAtIGVhcmxpZXJEYXRlLmdldE1vbnRoKCkgfHwgbGF0ZXJEYXRlLmdldERhdGUoKSAtIGVhcmxpZXJEYXRlLmdldERhdGUoKSB8fCBsYXRlckRhdGUuZ2V0SG91cnMoKSAtIGVhcmxpZXJEYXRlLmdldEhvdXJzKCkgfHwgbGF0ZXJEYXRlLmdldE1pbnV0ZXMoKSAtIGVhcmxpZXJEYXRlLmdldE1pbnV0ZXMoKSB8fCBsYXRlckRhdGUuZ2V0U2Vjb25kcygpIC0gZWFybGllckRhdGUuZ2V0U2Vjb25kcygpIHx8IGxhdGVyRGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGVhcmxpZXJEYXRlLmdldE1pbGxpc2Vjb25kcygpOwogIGlmIChkaWZmIDwgMCkgcmV0dXJuIC0xOwogIGlmIChkaWZmID4gMCkgcmV0dXJuIDE7CiAgcmV0dXJuIGRpZmY7Cn0KdmFyIGRpZmZlcmVuY2VJbkRheXNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5EYXlzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKCk7CiAgICBkaWZmZXJlbmNlSW5EYXlzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5EYXlzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZ2V0Um91bmRpbmdNZXRob2QuanMKZnVuY3Rpb24gZ2V0Um91bmRpbmdNZXRob2QobWV0aG9kKSB7CiAgcmV0dXJuIChudW1iZXIyKSA9PiB7CiAgICBjb25zdCByb3VuZCA9IG1ldGhvZCA/IE1hdGhbbWV0aG9kXSA6IE1hdGgudHJ1bmM7CiAgICBjb25zdCByZXN1bHQgPSByb3VuZChudW1iZXIyKTsKICAgIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0OwogIH07Cn0KdmFyIGluaXRfZ2V0Um91bmRpbmdNZXRob2QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9nZXRSb3VuZGluZ01ldGhvZC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluSG91cnMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluSG91cnMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBjb25zdCBkaWZmID0gKCtsYXRlckRhdGVfIC0gK2VhcmxpZXJEYXRlXykgLyBtaWxsaXNlY29uZHNJbkhvdXI7CiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTsKfQp2YXIgZGlmZmVyZW5jZUluSG91cnNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluSG91cnMuanMiKCkgewogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGRpZmZlcmVuY2VJbkhvdXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5Ib3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJJU09XZWVrWWVhcnMuanMKZnVuY3Rpb24gc3ViSVNPV2Vla1llYXJzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRJU09XZWVrWWVhcnMoZGF0ZSwgLWFtb3VudCwgb3B0aW9ucyk7Cn0KdmFyIHN1YklTT1dlZWtZZWFyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJJU09XZWVrWWVhcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViSVNPV2Vla1llYXJzLmpzIigpIHsKICAgIGluaXRfYWRkSVNPV2Vla1llYXJzKCk7CiAgICBzdWJJU09XZWVrWWVhcnNfZGVmYXVsdCA9IHN1YklTT1dlZWtZZWFyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5JU09XZWVrWWVhcnMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgY29uc3Qgc2lnbiA9IGNvbXBhcmVBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICBjb25zdCBkaWZmID0gTWF0aC5hYnMoCiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8sIG9wdGlvbnMpCiAgKTsKICBjb25zdCBhZGp1c3RlZERhdGUgPSBzdWJJU09XZWVrWWVhcnMobGF0ZXJEYXRlXywgc2lnbiAqIGRpZmYsIG9wdGlvbnMpOwogIGNvbnN0IGlzTGFzdElTT1dlZWtZZWFyTm90RnVsbCA9IE51bWJlcigKICAgIGNvbXBhcmVBc2MoYWRqdXN0ZWREYXRlLCBlYXJsaWVyRGF0ZV8pID09PSAtc2lnbgogICk7CiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmIC0gaXNMYXN0SVNPV2Vla1llYXJOb3RGdWxsKTsKICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDsKfQp2YXIgZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbklTT1dlZWtZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5JU09XZWVrWWVhcnMuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb21wYXJlQXNjKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzKCk7CiAgICBpbml0X3N1YklTT1dlZWtZZWFycygpOwogICAgZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5JU09XZWVrWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7CiAgcmV0dXJuICt0b0RhdGUobGF0ZXJEYXRlKSAtICt0b0RhdGUoZWFybGllckRhdGUpOwp9CnZhciBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTWludXRlcy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5NaW51dGVzKGRhdGVMZWZ0LCBkYXRlUmlnaHQsIG9wdGlvbnMpIHsKICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIC8gbWlsbGlzZWNvbmRzSW5NaW51dGU7CiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTsKfQp2YXIgZGlmZmVyZW5jZUluTWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5NaW51dGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbk1pbnV0ZXMuanMiKCkgewogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzKCk7CiAgICBkaWZmZXJlbmNlSW5NaW51dGVzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5NaW51dGVzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mRGF5LmpzCmZ1bmN0aW9uIGVuZE9mRGF5KGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mRGF5X2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mRGF5LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZkRheV9kZWZhdWx0ID0gZW5kT2ZEYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZNb250aC5qcwpmdW5jdGlvbiBlbmRPZk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgbW9udGggPSBfZGF0ZS5nZXRNb250aCgpOwogIF9kYXRlLnNldEZ1bGxZZWFyKF9kYXRlLmdldEZ1bGxZZWFyKCksIG1vbnRoICsgMSwgMCk7CiAgX2RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZk1vbnRoX2RlZmF1bHQgPSBlbmRPZk1vbnRoOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzTGFzdERheU9mTW9udGguanMKZnVuY3Rpb24gaXNMYXN0RGF5T2ZNb250aChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIHJldHVybiArZW5kT2ZEYXkoX2RhdGUsIG9wdGlvbnMpID09PSArZW5kT2ZNb250aChfZGF0ZSwgb3B0aW9ucyk7Cn0KdmFyIGlzTGFzdERheU9mTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfaXNMYXN0RGF5T2ZNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0xhc3REYXlPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfZW5kT2ZEYXkoKTsKICAgIGluaXRfZW5kT2ZNb250aCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzTGFzdERheU9mTW9udGhfZGVmYXVsdCA9IGlzTGFzdERheU9mTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTW9udGhzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbk1vbnRocyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIHdvcmtpbmdMYXRlckRhdGUsIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHNpZ24gPSBjb21wYXJlQXNjKHdvcmtpbmdMYXRlckRhdGUsIGVhcmxpZXJEYXRlXyk7CiAgY29uc3QgZGlmZmVyZW5jZSA9IE1hdGguYWJzKAogICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMod29ya2luZ0xhdGVyRGF0ZSwgZWFybGllckRhdGVfKQogICk7CiAgaWYgKGRpZmZlcmVuY2UgPCAxKSByZXR1cm4gMDsKICBpZiAod29ya2luZ0xhdGVyRGF0ZS5nZXRNb250aCgpID09PSAxICYmIHdvcmtpbmdMYXRlckRhdGUuZ2V0RGF0ZSgpID4gMjcpCiAgICB3b3JraW5nTGF0ZXJEYXRlLnNldERhdGUoMzApOwogIHdvcmtpbmdMYXRlckRhdGUuc2V0TW9udGgod29ya2luZ0xhdGVyRGF0ZS5nZXRNb250aCgpIC0gc2lnbiAqIGRpZmZlcmVuY2UpOwogIGxldCBpc0xhc3RNb250aE5vdEZ1bGwgPSBjb21wYXJlQXNjKHdvcmtpbmdMYXRlckRhdGUsIGVhcmxpZXJEYXRlXykgPT09IC1zaWduOwogIGlmIChpc0xhc3REYXlPZk1vbnRoKGxhdGVyRGF0ZV8pICYmIGRpZmZlcmVuY2UgPT09IDEgJiYgY29tcGFyZUFzYyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pID09PSAxKSB7CiAgICBpc0xhc3RNb250aE5vdEZ1bGwgPSBmYWxzZTsKICB9CiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmZXJlbmNlIC0gK2lzTGFzdE1vbnRoTm90RnVsbCk7CiAgcmV0dXJuIHJlc3VsdCA9PT0gMCA/IDAgOiByZXN1bHQ7Cn0KdmFyIGRpZmZlcmVuY2VJbk1vbnRoc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5Nb250aHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTW9udGhzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfY29tcGFyZUFzYygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocygpOwogICAgaW5pdF9pc0xhc3REYXlPZk1vbnRoKCk7CiAgICBkaWZmZXJlbmNlSW5Nb250aHNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbk1vbnRoczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5RdWFydGVycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5RdWFydGVycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbk1vbnRocyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSAvIDM7CiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTsKfQp2YXIgZGlmZmVyZW5jZUluUXVhcnRlcnNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluUXVhcnRlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluUXVhcnRlcnMuanMiKCkgewogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5Nb250aHMoKTsKICAgIGRpZmZlcmVuY2VJblF1YXJ0ZXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5RdWFydGVyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5TZWNvbmRzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJblNlY29uZHMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSkgLyAxZTM7CiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTsKfQp2YXIgZGlmZmVyZW5jZUluU2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5TZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJblNlY29uZHMuanMiKCkgewogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMoKTsKICAgIGRpZmZlcmVuY2VJblNlY29uZHNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJblNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluV2Vla3MuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluV2Vla3MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5EYXlzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIC8gNzsKICByZXR1cm4gZ2V0Um91bmRpbmdNZXRob2Qob3B0aW9ucz8ucm91bmRpbmdNZXRob2QpKGRpZmYpOwp9CnZhciBkaWZmZXJlbmNlSW5XZWVrc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5XZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5XZWVrcy5qcyIoKSB7CiAgICBpbml0X2dldFJvdW5kaW5nTWV0aG9kKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkRheXMoKTsKICAgIGRpZmZlcmVuY2VJbldlZWtzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5XZWVrczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5ZZWFycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5ZZWFycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHNpZ24gPSBjb21wYXJlQXNjKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgY29uc3QgZGlmZiA9IE1hdGguYWJzKGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSk7CiAgbGF0ZXJEYXRlXy5zZXRGdWxsWWVhcigxNTg0KTsKICBlYXJsaWVyRGF0ZV8uc2V0RnVsbFllYXIoMTU4NCk7CiAgY29uc3QgcGFydGlhbCA9IGNvbXBhcmVBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSA9PT0gLXNpZ247CiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmIC0gK3BhcnRpYWwpOwogIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0Owp9CnZhciBkaWZmZXJlbmNlSW5ZZWFyc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5ZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5ZZWFycy5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2NvbXBhcmVBc2MoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycygpOwogICAgZGlmZmVyZW5jZUluWWVhcnNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJblllYXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvbm9ybWFsaXplSW50ZXJ2YWwuanMKZnVuY3Rpb24gbm9ybWFsaXplSW50ZXJ2YWwoY29udGV4dDIsIGludGVydmFsMykgewogIGNvbnN0IFtzdGFydCwgZW5kM10gPSBub3JtYWxpemVEYXRlcyhjb250ZXh0MiwgaW50ZXJ2YWwzLnN0YXJ0LCBpbnRlcnZhbDMuZW5kKTsKICByZXR1cm4geyBzdGFydCwgZW5kOiBlbmQzIH07Cn0KdmFyIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9ub3JtYWxpemVJbnRlcnZhbC5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaERheU9mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaERheU9mSW50ZXJ2YWwoaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgeyBzdGFydCwgZW5kOiBlbmQzIH0gPSBub3JtYWxpemVJbnRlcnZhbChvcHRpb25zPy5pbiwgaW50ZXJ2YWwzKTsKICBsZXQgcmV2ZXJzZWQgPSArc3RhcnQgPiArZW5kMzsKICBjb25zdCBlbmRUaW1lID0gcmV2ZXJzZWQgPyArc3RhcnQgOiArZW5kMzsKICBjb25zdCBkYXRlID0gcmV2ZXJzZWQgPyBlbmQzIDogc3RhcnQ7CiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBsZXQgc3RlcCA9IG9wdGlvbnM/LnN0ZXAgPz8gMTsKICBpZiAoIXN0ZXApIHJldHVybiBbXTsKICBpZiAoc3RlcCA8IDApIHsKICAgIHN0ZXAgPSAtc3RlcDsKICAgIHJldmVyc2VkID0gIXJldmVyc2VkOwogIH0KICBjb25zdCBkYXRlcyA9IFtdOwogIHdoaWxlICgrZGF0ZSA8PSBlbmRUaW1lKSB7CiAgICBkYXRlcy5wdXNoKGNvbnN0cnVjdEZyb20oc3RhcnQsIGRhdGUpKTsKICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXApOwogICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICB9CiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7Cn0KdmFyIGVhY2hEYXlPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hEYXlPZkludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hEYXlPZkludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgZWFjaERheU9mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hEYXlPZkludGVydmFsOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hIb3VyT2ZJbnRlcnZhbC5qcwpmdW5jdGlvbiBlYWNoSG91ck9mSW50ZXJ2YWwoaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgeyBzdGFydCwgZW5kOiBlbmQzIH0gPSBub3JtYWxpemVJbnRlcnZhbChvcHRpb25zPy5pbiwgaW50ZXJ2YWwzKTsKICBsZXQgcmV2ZXJzZWQgPSArc3RhcnQgPiArZW5kMzsKICBjb25zdCBlbmRUaW1lID0gcmV2ZXJzZWQgPyArc3RhcnQgOiArZW5kMzsKICBjb25zdCBkYXRlID0gcmV2ZXJzZWQgPyBlbmQzIDogc3RhcnQ7CiAgZGF0ZS5zZXRNaW51dGVzKDAsIDAsIDApOwogIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxOwogIGlmICghc3RlcCkgcmV0dXJuIFtdOwogIGlmIChzdGVwIDwgMCkgewogICAgc3RlcCA9IC1zdGVwOwogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgfQogIGNvbnN0IGRhdGVzID0gW107CiAgd2hpbGUgKCtkYXRlIDw9IGVuZFRpbWUpIHsKICAgIGRhdGVzLnB1c2goY29uc3RydWN0RnJvbShzdGFydCwgZGF0ZSkpOwogICAgZGF0ZS5zZXRIb3VycyhkYXRlLmdldEhvdXJzKCkgKyBzdGVwKTsKICB9CiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7Cn0KdmFyIGVhY2hIb3VyT2ZJbnRlcnZhbF9kZWZhdWx0Owp2YXIgaW5pdF9lYWNoSG91ck9mSW50ZXJ2YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaEhvdXJPZkludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgZWFjaEhvdXJPZkludGVydmFsX2RlZmF1bHQgPSBlYWNoSG91ck9mSW50ZXJ2YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaE1pbnV0ZU9mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaE1pbnV0ZU9mSW50ZXJ2YWwoaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgeyBzdGFydCwgZW5kOiBlbmQzIH0gPSBub3JtYWxpemVJbnRlcnZhbChvcHRpb25zPy5pbiwgaW50ZXJ2YWwzKTsKICBzdGFydC5zZXRTZWNvbmRzKDAsIDApOwogIGxldCByZXZlcnNlZCA9ICtzdGFydCA+ICtlbmQzOwogIGNvbnN0IGVuZFRpbWUgPSByZXZlcnNlZCA/ICtzdGFydCA6ICtlbmQzOwogIGxldCBkYXRlID0gcmV2ZXJzZWQgPyBlbmQzIDogc3RhcnQ7CiAgbGV0IHN0ZXAgPSBvcHRpb25zPy5zdGVwID8/IDE7CiAgaWYgKCFzdGVwKSByZXR1cm4gW107CiAgaWYgKHN0ZXAgPCAwKSB7CiAgICBzdGVwID0gLXN0ZXA7CiAgICByZXZlcnNlZCA9ICFyZXZlcnNlZDsKICB9CiAgY29uc3QgZGF0ZXMgPSBbXTsKICB3aGlsZSAoK2RhdGUgPD0gZW5kVGltZSkgewogICAgZGF0ZXMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7CiAgICBkYXRlID0gYWRkTWludXRlcyhkYXRlLCBzdGVwKTsKICB9CiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7Cn0KdmFyIGVhY2hNaW51dGVPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hNaW51dGVPZkludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hNaW51dGVPZkludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwoKTsKICAgIGluaXRfYWRkTWludXRlcygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBlYWNoTWludXRlT2ZJbnRlcnZhbF9kZWZhdWx0ID0gZWFjaE1pbnV0ZU9mSW50ZXJ2YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaE1vbnRoT2ZJbnRlcnZhbC5qcwpmdW5jdGlvbiBlYWNoTW9udGhPZkludGVydmFsKGludGVydmFsMywgb3B0aW9ucykgewogIGNvbnN0IHsgc3RhcnQsIGVuZDogZW5kMyB9ID0gbm9ybWFsaXplSW50ZXJ2YWwob3B0aW9ucz8uaW4sIGludGVydmFsMyk7CiAgbGV0IHJldmVyc2VkID0gK3N0YXJ0ID4gK2VuZDM7CiAgY29uc3QgZW5kVGltZSA9IHJldmVyc2VkID8gK3N0YXJ0IDogK2VuZDM7CiAgY29uc3QgZGF0ZSA9IHJldmVyc2VkID8gZW5kMyA6IHN0YXJ0OwogIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgZGF0ZS5zZXREYXRlKDEpOwogIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxOwogIGlmICghc3RlcCkgcmV0dXJuIFtdOwogIGlmIChzdGVwIDwgMCkgewogICAgc3RlcCA9IC1zdGVwOwogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgfQogIGNvbnN0IGRhdGVzID0gW107CiAgd2hpbGUgKCtkYXRlIDw9IGVuZFRpbWUpIHsKICAgIGRhdGVzLnB1c2goY29uc3RydWN0RnJvbShzdGFydCwgZGF0ZSkpOwogICAgZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBzdGVwKTsKICB9CiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7Cn0KdmFyIGVhY2hNb250aE9mSW50ZXJ2YWxfZGVmYXVsdDsKdmFyIGluaXRfZWFjaE1vbnRoT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoTW9udGhPZkludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgZWFjaE1vbnRoT2ZJbnRlcnZhbF9kZWZhdWx0ID0gZWFjaE1vbnRoT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mUXVhcnRlci5qcwpmdW5jdGlvbiBzdGFydE9mUXVhcnRlcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGN1cnJlbnRNb250aCA9IF9kYXRlLmdldE1vbnRoKCk7CiAgY29uc3QgbW9udGggPSBjdXJyZW50TW9udGggLSBjdXJyZW50TW9udGggJSAzOwogIF9kYXRlLnNldE1vbnRoKG1vbnRoLCAxKTsKICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHN0YXJ0T2ZRdWFydGVyX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZRdWFydGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZRdWFydGVyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mUXVhcnRlcl9kZWZhdWx0ID0gc3RhcnRPZlF1YXJ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFF1YXJ0ZXJPZkludGVydmFsLmpzCmZ1bmN0aW9uIGVhY2hRdWFydGVyT2ZJbnRlcnZhbChpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB7IHN0YXJ0LCBlbmQ6IGVuZDMgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbDMpOwogIGxldCByZXZlcnNlZCA9ICtzdGFydCA+ICtlbmQzOwogIGNvbnN0IGVuZFRpbWUgPSByZXZlcnNlZCA/ICtzdGFydE9mUXVhcnRlcihzdGFydCkgOiArc3RhcnRPZlF1YXJ0ZXIoZW5kMyk7CiAgbGV0IGRhdGUgPSByZXZlcnNlZCA/IHN0YXJ0T2ZRdWFydGVyKGVuZDMpIDogc3RhcnRPZlF1YXJ0ZXIoc3RhcnQpOwogIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxOwogIGlmICghc3RlcCkgcmV0dXJuIFtdOwogIGlmIChzdGVwIDwgMCkgewogICAgc3RlcCA9IC1zdGVwOwogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgfQogIGNvbnN0IGRhdGVzID0gW107CiAgd2hpbGUgKCtkYXRlIDw9IGVuZFRpbWUpIHsKICAgIGRhdGVzLnB1c2goY29uc3RydWN0RnJvbShzdGFydCwgZGF0ZSkpOwogICAgZGF0ZSA9IGFkZFF1YXJ0ZXJzKGRhdGUsIHN0ZXApOwogIH0KICByZXR1cm4gcmV2ZXJzZWQgPyBkYXRlcy5yZXZlcnNlKCkgOiBkYXRlczsKfQp2YXIgZWFjaFF1YXJ0ZXJPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hRdWFydGVyT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoUXVhcnRlck9mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9hZGRRdWFydGVycygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3N0YXJ0T2ZRdWFydGVyKCk7CiAgICBlYWNoUXVhcnRlck9mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hRdWFydGVyT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla09mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaFdlZWtPZkludGVydmFsKGludGVydmFsMywgb3B0aW9ucykgewogIGNvbnN0IHsgc3RhcnQsIGVuZDogZW5kMyB9ID0gbm9ybWFsaXplSW50ZXJ2YWwob3B0aW9ucz8uaW4sIGludGVydmFsMyk7CiAgbGV0IHJldmVyc2VkID0gK3N0YXJ0ID4gK2VuZDM7CiAgY29uc3Qgc3RhcnREYXRlV2VlayA9IHJldmVyc2VkID8gc3RhcnRPZldlZWsoZW5kMywgb3B0aW9ucykgOiBzdGFydE9mV2VlayhzdGFydCwgb3B0aW9ucyk7CiAgY29uc3QgZW5kRGF0ZVdlZWsgPSByZXZlcnNlZCA/IHN0YXJ0T2ZXZWVrKHN0YXJ0LCBvcHRpb25zKSA6IHN0YXJ0T2ZXZWVrKGVuZDMsIG9wdGlvbnMpOwogIHN0YXJ0RGF0ZVdlZWsuc2V0SG91cnMoMTUpOwogIGVuZERhdGVXZWVrLnNldEhvdXJzKDE1KTsKICBjb25zdCBlbmRUaW1lID0gK2VuZERhdGVXZWVrLmdldFRpbWUoKTsKICBsZXQgY3VycmVudERhdGUgPSBzdGFydERhdGVXZWVrOwogIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxOwogIGlmICghc3RlcCkgcmV0dXJuIFtdOwogIGlmIChzdGVwIDwgMCkgewogICAgc3RlcCA9IC1zdGVwOwogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgfQogIGNvbnN0IGRhdGVzID0gW107CiAgd2hpbGUgKCtjdXJyZW50RGF0ZSA8PSBlbmRUaW1lKSB7CiAgICBjdXJyZW50RGF0ZS5zZXRIb3VycygwKTsKICAgIGRhdGVzLnB1c2goY29uc3RydWN0RnJvbShzdGFydCwgY3VycmVudERhdGUpKTsKICAgIGN1cnJlbnREYXRlID0gYWRkV2Vla3MoY3VycmVudERhdGUsIHN0ZXApOwogICAgY3VycmVudERhdGUuc2V0SG91cnMoMTUpOwogIH0KICByZXR1cm4gcmV2ZXJzZWQgPyBkYXRlcy5yZXZlcnNlKCkgOiBkYXRlczsKfQp2YXIgZWFjaFdlZWtPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hXZWVrT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla09mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9hZGRXZWVrcygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3N0YXJ0T2ZXZWVrKCk7CiAgICBlYWNoV2Vla09mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hXZWVrT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla2VuZE9mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaFdlZWtlbmRPZkludGVydmFsKGludGVydmFsMywgb3B0aW9ucykgewogIGNvbnN0IHsgc3RhcnQsIGVuZDogZW5kMyB9ID0gbm9ybWFsaXplSW50ZXJ2YWwob3B0aW9ucz8uaW4sIGludGVydmFsMyk7CiAgY29uc3QgZGF0ZUludGVydmFsID0gZWFjaERheU9mSW50ZXJ2YWwoeyBzdGFydCwgZW5kOiBlbmQzIH0sIG9wdGlvbnMpOwogIGNvbnN0IHdlZWtlbmRzID0gW107CiAgbGV0IGluZGV4MiA9IDA7CiAgd2hpbGUgKGluZGV4MiA8IGRhdGVJbnRlcnZhbC5sZW5ndGgpIHsKICAgIGNvbnN0IGRhdGUgPSBkYXRlSW50ZXJ2YWxbaW5kZXgyKytdOwogICAgaWYgKGlzV2Vla2VuZChkYXRlKSkgd2Vla2VuZHMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7CiAgfQogIHJldHVybiB3ZWVrZW5kczsKfQp2YXIgZWFjaFdlZWtlbmRPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hXZWVrZW5kT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla2VuZE9mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2VhY2hEYXlPZkludGVydmFsKCk7CiAgICBpbml0X2lzV2Vla2VuZCgpOwogICAgZWFjaFdlZWtlbmRPZkludGVydmFsX2RlZmF1bHQgPSBlYWNoV2Vla2VuZE9mSW50ZXJ2YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZk1vbnRoLmpzCmZ1bmN0aW9uIHN0YXJ0T2ZNb250aChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldERhdGUoMSk7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZNb250aC5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc3RhcnRPZk1vbnRoX2RlZmF1bHQgPSBzdGFydE9mTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZk1vbnRoLmpzCmZ1bmN0aW9uIGVhY2hXZWVrZW5kT2ZNb250aChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3Qgc3RhcnQgPSBzdGFydE9mTW9udGgoZGF0ZSwgb3B0aW9ucyk7CiAgY29uc3QgZW5kMyA9IGVuZE9mTW9udGgoZGF0ZSwgb3B0aW9ucyk7CiAgcmV0dXJuIGVhY2hXZWVrZW5kT2ZJbnRlcnZhbCh7IHN0YXJ0LCBlbmQ6IGVuZDMgfSwgb3B0aW9ucyk7Cn0KdmFyIGVhY2hXZWVrZW5kT2ZNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9lYWNoV2Vla2VuZE9mTW9udGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfZWFjaFdlZWtlbmRPZkludGVydmFsKCk7CiAgICBpbml0X2VuZE9mTW9udGgoKTsKICAgIGluaXRfc3RhcnRPZk1vbnRoKCk7CiAgICBlYWNoV2Vla2VuZE9mTW9udGhfZGVmYXVsdCA9IGVhY2hXZWVrZW5kT2ZNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZlllYXIuanMKZnVuY3Rpb24gZW5kT2ZZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgX2RhdGUuc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDApOwogIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBlbmRPZlllYXJfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mWWVhci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZW5kT2ZZZWFyX2RlZmF1bHQgPSBlbmRPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZlllYXIuanMKZnVuY3Rpb24gc3RhcnRPZlllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBkYXRlXy5zZXRGdWxsWWVhcihkYXRlXy5nZXRGdWxsWWVhcigpLCAwLCAxKTsKICBkYXRlXy5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gZGF0ZV87Cn0KdmFyIHN0YXJ0T2ZZZWFyX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZZZWFyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mWWVhcl9kZWZhdWx0ID0gc3RhcnRPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZlllYXIuanMKZnVuY3Rpb24gZWFjaFdlZWtlbmRPZlllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IHN0YXJ0ID0gc3RhcnRPZlllYXIoZGF0ZSwgb3B0aW9ucyk7CiAgY29uc3QgZW5kMyA9IGVuZE9mWWVhcihkYXRlLCBvcHRpb25zKTsKICByZXR1cm4gZWFjaFdlZWtlbmRPZkludGVydmFsKHsgc3RhcnQsIGVuZDogZW5kMyB9LCBvcHRpb25zKTsKfQp2YXIgZWFjaFdlZWtlbmRPZlllYXJfZGVmYXVsdDsKdmFyIGluaXRfZWFjaFdlZWtlbmRPZlllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZlllYXIuanMiKCkgewogICAgaW5pdF9lYWNoV2Vla2VuZE9mSW50ZXJ2YWwoKTsKICAgIGluaXRfZW5kT2ZZZWFyKCk7CiAgICBpbml0X3N0YXJ0T2ZZZWFyKCk7CiAgICBlYWNoV2Vla2VuZE9mWWVhcl9kZWZhdWx0ID0gZWFjaFdlZWtlbmRPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFllYXJPZkludGVydmFsLmpzCmZ1bmN0aW9uIGVhY2hZZWFyT2ZJbnRlcnZhbChpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB7IHN0YXJ0LCBlbmQ6IGVuZDMgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbDMpOwogIGxldCByZXZlcnNlZCA9ICtzdGFydCA+ICtlbmQzOwogIGNvbnN0IGVuZFRpbWUgPSByZXZlcnNlZCA/ICtzdGFydCA6ICtlbmQzOwogIGNvbnN0IGRhdGUgPSByZXZlcnNlZCA/IGVuZDMgOiBzdGFydDsKICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIGRhdGUuc2V0TW9udGgoMCwgMSk7CiAgbGV0IHN0ZXAgPSBvcHRpb25zPy5zdGVwID8/IDE7CiAgaWYgKCFzdGVwKSByZXR1cm4gW107CiAgaWYgKHN0ZXAgPCAwKSB7CiAgICBzdGVwID0gLXN0ZXA7CiAgICByZXZlcnNlZCA9ICFyZXZlcnNlZDsKICB9CiAgY29uc3QgZGF0ZXMgPSBbXTsKICB3aGlsZSAoK2RhdGUgPD0gZW5kVGltZSkgewogICAgZGF0ZXMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7CiAgICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXApOwogIH0KICByZXR1cm4gcmV2ZXJzZWQgPyBkYXRlcy5yZXZlcnNlKCkgOiBkYXRlczsKfQp2YXIgZWFjaFllYXJPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hZZWFyT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoWWVhck9mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBlYWNoWWVhck9mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hZZWFyT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZkRlY2FkZS5qcwpmdW5jdGlvbiBlbmRPZkRlY2FkZShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpOwogIGNvbnN0IGRlY2FkZSA9IDkgKyBNYXRoLmZsb29yKHllYXIgLyAxMCkgKiAxMDsKICBfZGF0ZS5zZXRGdWxsWWVhcihkZWNhZGUsIDExLCAzMSk7CiAgX2RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mRGVjYWRlX2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mRGVjYWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mRGVjYWRlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZkRlY2FkZV9kZWZhdWx0ID0gZW5kT2ZEZWNhZGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZIb3VyLmpzCmZ1bmN0aW9uIGVuZE9mSG91cihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldE1pbnV0ZXMoNTksIDU5LCA5OTkpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgZW5kT2ZIb3VyX2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mSG91ciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZkhvdXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGVuZE9mSG91cl9kZWZhdWx0ID0gZW5kT2ZIb3VyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mV2Vlay5qcwpmdW5jdGlvbiBlbmRPZldlZWsoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3Qgd2Vla1N0YXJ0c09uID0gb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IDA7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRheSA9IF9kYXRlLmdldERheSgpOwogIGNvbnN0IGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gLTcgOiAwKSArIDYgLSAoZGF5IC0gd2Vla1N0YXJ0c09uKTsKICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSArIGRpZmYpOwogIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBlbmRPZldlZWtfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZXZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mV2Vlay5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZW5kT2ZXZWVrX2RlZmF1bHQgPSBlbmRPZldlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZJU09XZWVrLmpzCmZ1bmN0aW9uIGVuZE9mSVNPV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGVuZE9mV2VlayhkYXRlLCB7IC4uLm9wdGlvbnMsIHdlZWtTdGFydHNPbjogMSB9KTsKfQp2YXIgZW5kT2ZJU09XZWVrX2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mSVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZklTT1dlZWsuanMiKCkgewogICAgaW5pdF9lbmRPZldlZWsoKTsKICAgIGVuZE9mSVNPV2Vla19kZWZhdWx0ID0gZW5kT2ZJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mSVNPV2Vla1llYXIuanMKZnVuY3Rpb24gZW5kT2ZJU09XZWVrWWVhcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgeWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogIGNvbnN0IGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDQpOwogIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3QgX2RhdGUgPSBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLCBvcHRpb25zKTsKICBfZGF0ZS5zZXRNaWxsaXNlY29uZHMoX2RhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSAxKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mSVNPV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZJU09XZWVrWWVhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZklTT1dlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9nZXRJU09XZWVrWWVhcigpOwogICAgaW5pdF9zdGFydE9mSVNPV2VlaygpOwogICAgZW5kT2ZJU09XZWVrWWVhcl9kZWZhdWx0ID0gZW5kT2ZJU09XZWVrWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZk1pbnV0ZS5qcwpmdW5jdGlvbiBlbmRPZk1pbnV0ZShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldFNlY29uZHMoNTksIDk5OSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBlbmRPZk1pbnV0ZV9kZWZhdWx0Owp2YXIgaW5pdF9lbmRPZk1pbnV0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZk1pbnV0ZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZW5kT2ZNaW51dGVfZGVmYXVsdCA9IGVuZE9mTWludXRlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mUXVhcnRlci5qcwpmdW5jdGlvbiBlbmRPZlF1YXJ0ZXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBjdXJyZW50TW9udGggPSBfZGF0ZS5nZXRNb250aCgpOwogIGNvbnN0IG1vbnRoID0gY3VycmVudE1vbnRoIC0gY3VycmVudE1vbnRoICUgMyArIDM7CiAgX2RhdGUuc2V0TW9udGgobW9udGgsIDApOwogIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBlbmRPZlF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZRdWFydGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mUXVhcnRlci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZW5kT2ZRdWFydGVyX2RlZmF1bHQgPSBlbmRPZlF1YXJ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZTZWNvbmQuanMKZnVuY3Rpb24gZW5kT2ZTZWNvbmQoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBfZGF0ZS5zZXRNaWxsaXNlY29uZHMoOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mU2Vjb25kX2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mU2Vjb25kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mU2Vjb25kLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZlNlY29uZF9kZWZhdWx0ID0gZW5kT2ZTZWNvbmQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZUb2RheS5qcwpmdW5jdGlvbiBlbmRPZlRvZGF5KG9wdGlvbnMpIHsKICByZXR1cm4gZW5kT2ZEYXkoRGF0ZS5ub3coKSwgb3B0aW9ucyk7Cn0KdmFyIGVuZE9mVG9kYXlfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZUb2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZlRvZGF5LmpzIigpIHsKICAgIGluaXRfZW5kT2ZEYXkoKTsKICAgIGVuZE9mVG9kYXlfZGVmYXVsdCA9IGVuZE9mVG9kYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZUb21vcnJvdy5qcwpmdW5jdGlvbiBlbmRPZlRvbW9ycm93KG9wdGlvbnMpIHsKICBjb25zdCBub3cyID0gY29uc3RydWN0Tm93KG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gbm93Mi5nZXRGdWxsWWVhcigpOwogIGNvbnN0IG1vbnRoID0gbm93Mi5nZXRNb250aCgpOwogIGNvbnN0IGRheSA9IG5vdzIuZ2V0RGF0ZSgpOwogIGNvbnN0IGRhdGUgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pOwogIGRhdGUuc2V0RnVsbFllYXIoeWVhciwgbW9udGgsIGRheSArIDEpOwogIGRhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gb3B0aW9ucz8uaW4gPyBvcHRpb25zLmluKGRhdGUpIDogZGF0ZTsKfQp2YXIgZW5kT2ZUb21vcnJvd19kZWZhdWx0Owp2YXIgaW5pdF9lbmRPZlRvbW9ycm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mVG9tb3Jyb3cuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGVuZE9mVG9tb3Jyb3dfZGVmYXVsdCA9IGVuZE9mVG9tb3Jyb3c7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZZZXN0ZXJkYXkuanMKZnVuY3Rpb24gZW5kT2ZZZXN0ZXJkYXkob3B0aW9ucykgewogIGNvbnN0IG5vdzIgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pOwogIGNvbnN0IGRhdGUgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCAwKTsKICBkYXRlLnNldEZ1bGxZZWFyKG5vdzIuZ2V0RnVsbFllYXIoKSwgbm93Mi5nZXRNb250aCgpLCBub3cyLmdldERhdGUoKSAtIDEpOwogIGRhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gZGF0ZTsKfQp2YXIgZW5kT2ZZZXN0ZXJkYXlfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZZZXN0ZXJkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZZZXN0ZXJkYXkuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgZW5kT2ZZZXN0ZXJkYXlfZGVmYXVsdCA9IGVuZE9mWWVzdGVyZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlLmpzCnZhciBmb3JtYXREaXN0YW5jZUxvY2FsZSwgZm9ybWF0RGlzdGFuY2U7CnZhciBpbml0X2Zvcm1hdERpc3RhbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlLmpzIigpIHsKICAgIGZvcm1hdERpc3RhbmNlTG9jYWxlID0gewogICAgICBsZXNzVGhhblhTZWNvbmRzOiB7CiAgICAgICAgb25lOiAibGVzcyB0aGFuIGEgc2Vjb25kIiwKICAgICAgICBvdGhlcjogImxlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcyIKICAgICAgfSwKICAgICAgeFNlY29uZHM6IHsKICAgICAgICBvbmU6ICIxIHNlY29uZCIsCiAgICAgICAgb3RoZXI6ICJ7e2NvdW50fX0gc2Vjb25kcyIKICAgICAgfSwKICAgICAgaGFsZkFNaW51dGU6ICJoYWxmIGEgbWludXRlIiwKICAgICAgbGVzc1RoYW5YTWludXRlczogewogICAgICAgIG9uZTogImxlc3MgdGhhbiBhIG1pbnV0ZSIsCiAgICAgICAgb3RoZXI6ICJsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMiCiAgICAgIH0sCiAgICAgIHhNaW51dGVzOiB7CiAgICAgICAgb25lOiAiMSBtaW51dGUiLAogICAgICAgIG90aGVyOiAie3tjb3VudH19IG1pbnV0ZXMiCiAgICAgIH0sCiAgICAgIGFib3V0WEhvdXJzOiB7CiAgICAgICAgb25lOiAiYWJvdXQgMSBob3VyIiwKICAgICAgICBvdGhlcjogImFib3V0IHt7Y291bnR9fSBob3VycyIKICAgICAgfSwKICAgICAgeEhvdXJzOiB7CiAgICAgICAgb25lOiAiMSBob3VyIiwKICAgICAgICBvdGhlcjogInt7Y291bnR9fSBob3VycyIKICAgICAgfSwKICAgICAgeERheXM6IHsKICAgICAgICBvbmU6ICIxIGRheSIsCiAgICAgICAgb3RoZXI6ICJ7e2NvdW50fX0gZGF5cyIKICAgICAgfSwKICAgICAgYWJvdXRYV2Vla3M6IHsKICAgICAgICBvbmU6ICJhYm91dCAxIHdlZWsiLAogICAgICAgIG90aGVyOiAiYWJvdXQge3tjb3VudH19IHdlZWtzIgogICAgICB9LAogICAgICB4V2Vla3M6IHsKICAgICAgICBvbmU6ICIxIHdlZWsiLAogICAgICAgIG90aGVyOiAie3tjb3VudH19IHdlZWtzIgogICAgICB9LAogICAgICBhYm91dFhNb250aHM6IHsKICAgICAgICBvbmU6ICJhYm91dCAxIG1vbnRoIiwKICAgICAgICBvdGhlcjogImFib3V0IHt7Y291bnR9fSBtb250aHMiCiAgICAgIH0sCiAgICAgIHhNb250aHM6IHsKICAgICAgICBvbmU6ICIxIG1vbnRoIiwKICAgICAgICBvdGhlcjogInt7Y291bnR9fSBtb250aHMiCiAgICAgIH0sCiAgICAgIGFib3V0WFllYXJzOiB7CiAgICAgICAgb25lOiAiYWJvdXQgMSB5ZWFyIiwKICAgICAgICBvdGhlcjogImFib3V0IHt7Y291bnR9fSB5ZWFycyIKICAgICAgfSwKICAgICAgeFllYXJzOiB7CiAgICAgICAgb25lOiAiMSB5ZWFyIiwKICAgICAgICBvdGhlcjogInt7Y291bnR9fSB5ZWFycyIKICAgICAgfSwKICAgICAgb3ZlclhZZWFyczogewogICAgICAgIG9uZTogIm92ZXIgMSB5ZWFyIiwKICAgICAgICBvdGhlcjogIm92ZXIge3tjb3VudH19IHllYXJzIgogICAgICB9LAogICAgICBhbG1vc3RYWWVhcnM6IHsKICAgICAgICBvbmU6ICJhbG1vc3QgMSB5ZWFyIiwKICAgICAgICBvdGhlcjogImFsbW9zdCB7e2NvdW50fX0geWVhcnMiCiAgICAgIH0KICAgIH07CiAgICBmb3JtYXREaXN0YW5jZSA9ICh0b2tlbiwgY291bnQyLCBvcHRpb25zKSA9PiB7CiAgICAgIGxldCByZXN1bHQ7CiAgICAgIGNvbnN0IHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07CiAgICAgIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gInN0cmluZyIpIHsKICAgICAgICByZXN1bHQgPSB0b2tlblZhbHVlOwogICAgICB9IGVsc2UgaWYgKGNvdW50MiA9PT0gMSkgewogICAgICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub25lOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub3RoZXIucmVwbGFjZSgie3tjb3VudH19IiwgY291bnQyLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICAgIGlmIChvcHRpb25zPy5hZGRTdWZmaXgpIHsKICAgICAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHsKICAgICAgICAgIHJldHVybiAiaW4gIiArIHJlc3VsdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHJlc3VsdCArICIgYWdvIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4uanMKZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykgewogIHJldHVybiAob3B0aW9ucyA9IHt9KSA9PiB7CiAgICBjb25zdCB3aWR0aCA9IG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDsKICAgIGNvbnN0IGZvcm1hdDIgPSBhcmdzLmZvcm1hdHNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0c1thcmdzLmRlZmF1bHRXaWR0aF07CiAgICByZXR1cm4gZm9ybWF0MjsKICB9Owp9CnZhciBpbml0X2J1aWxkRm9ybWF0TG9uZ0ZuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9fbGliL2J1aWxkRm9ybWF0TG9uZ0ZuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nLmpzCnZhciBkYXRlRm9ybWF0cywgdGltZUZvcm1hdHMsIGRhdGVUaW1lRm9ybWF0cywgZm9ybWF0TG9uZzsKdmFyIGluaXRfZm9ybWF0TG9uZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nLmpzIigpIHsKICAgIGluaXRfYnVpbGRGb3JtYXRMb25nRm4oKTsKICAgIGRhdGVGb3JtYXRzID0gewogICAgICBmdWxsOiAiRUVFRSwgTU1NTSBkbywgeSIsCiAgICAgIGxvbmc6ICJNTU1NIGRvLCB5IiwKICAgICAgbWVkaXVtOiAiTU1NIGQsIHkiLAogICAgICBzaG9ydDogIk1NL2RkL3l5eXkiCiAgICB9OwogICAgdGltZUZvcm1hdHMgPSB7CiAgICAgIGZ1bGw6ICJoOm1tOnNzIGEgenp6eiIsCiAgICAgIGxvbmc6ICJoOm1tOnNzIGEgeiIsCiAgICAgIG1lZGl1bTogImg6bW06c3MgYSIsCiAgICAgIHNob3J0OiAiaDptbSBhIgogICAgfTsKICAgIGRhdGVUaW1lRm9ybWF0cyA9IHsKICAgICAgZnVsbDogInt7ZGF0ZX19ICdhdCcge3t0aW1lfX0iLAogICAgICBsb25nOiAie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fSIsCiAgICAgIG1lZGl1bTogInt7ZGF0ZX19LCB7e3RpbWV9fSIsCiAgICAgIHNob3J0OiAie3tkYXRlfX0sIHt7dGltZX19IgogICAgfTsKICAgIGZvcm1hdExvbmcgPSB7CiAgICAgIGRhdGU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHsKICAgICAgICBmb3JtYXRzOiBkYXRlRm9ybWF0cywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJmdWxsIgogICAgICB9KSwKICAgICAgdGltZTogYnVpbGRGb3JtYXRMb25nRm4oewogICAgICAgIGZvcm1hdHM6IHRpbWVGb3JtYXRzLAogICAgICAgIGRlZmF1bHRXaWR0aDogImZ1bGwiCiAgICAgIH0pLAogICAgICBkYXRlVGltZTogYnVpbGRGb3JtYXRMb25nRm4oewogICAgICAgIGZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJmdWxsIgogICAgICB9KQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRSZWxhdGl2ZS5qcwp2YXIgZm9ybWF0UmVsYXRpdmVMb2NhbGUsIGZvcm1hdFJlbGF0aXZlOwp2YXIgaW5pdF9mb3JtYXRSZWxhdGl2ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRSZWxhdGl2ZS5qcyIoKSB7CiAgICBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHsKICAgICAgbGFzdFdlZWs6ICInbGFzdCcgZWVlZSAnYXQnIHAiLAogICAgICB5ZXN0ZXJkYXk6ICIneWVzdGVyZGF5IGF0JyBwIiwKICAgICAgdG9kYXk6ICIndG9kYXkgYXQnIHAiLAogICAgICB0b21vcnJvdzogIid0b21vcnJvdyBhdCcgcCIsCiAgICAgIG5leHRXZWVrOiAiZWVlZSAnYXQnIHAiLAogICAgICBvdGhlcjogIlAiCiAgICB9OwogICAgZm9ybWF0UmVsYXRpdmUgPSAodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSA9PiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRMb2NhbGl6ZUZuLmpzCmZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7CiAgcmV0dXJuICh2YWx1ZTIsIG9wdGlvbnMpID0+IHsKICAgIGNvbnN0IGNvbnRleHQyID0gb3B0aW9ucz8uY29udGV4dCA/IFN0cmluZyhvcHRpb25zLmNvbnRleHQpIDogInN0YW5kYWxvbmUiOwogICAgbGV0IHZhbHVlc0FycmF5OwogICAgaWYgKGNvbnRleHQyID09PSAiZm9ybWF0dGluZyIgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7CiAgICAgIGNvbnN0IGRlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdEZvcm1hdHRpbmdXaWR0aCB8fCBhcmdzLmRlZmF1bHRXaWR0aDsKICAgICAgY29uc3Qgd2lkdGggPSBvcHRpb25zPy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDsKICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1tkZWZhdWx0V2lkdGhdOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0V2lkdGg7CiAgICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucz8ud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDsKICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLnZhbHVlc1t3aWR0aF0gfHwgYXJncy52YWx1ZXNbZGVmYXVsdFdpZHRoXTsKICAgIH0KICAgIGNvbnN0IGluZGV4MiA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayh2YWx1ZTIpIDogdmFsdWUyOwogICAgcmV0dXJuIHZhbHVlc0FycmF5W2luZGV4Ml07CiAgfTsKfQp2YXIgaW5pdF9idWlsZExvY2FsaXplRm4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRMb2NhbGl6ZUZuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS5qcwp2YXIgZXJhVmFsdWVzLCBxdWFydGVyVmFsdWVzLCBtb250aFZhbHVlcywgZGF5VmFsdWVzLCBkYXlQZXJpb2RWYWx1ZXMsIGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMsIG9yZGluYWxOdW1iZXIsIGxvY2FsaXplOwp2YXIgaW5pdF9sb2NhbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS5qcyIoKSB7CiAgICBpbml0X2J1aWxkTG9jYWxpemVGbigpOwogICAgZXJhVmFsdWVzID0gewogICAgICBuYXJyb3c6IFsiQiIsICJBIl0sCiAgICAgIGFiYnJldmlhdGVkOiBbIkJDIiwgIkFEIl0sCiAgICAgIHdpZGU6IFsiQmVmb3JlIENocmlzdCIsICJBbm5vIERvbWluaSJdCiAgICB9OwogICAgcXVhcnRlclZhbHVlcyA9IHsKICAgICAgbmFycm93OiBbIjEiLCAiMiIsICIzIiwgIjQiXSwKICAgICAgYWJicmV2aWF0ZWQ6IFsiUTEiLCAiUTIiLCAiUTMiLCAiUTQiXSwKICAgICAgd2lkZTogWyIxc3QgcXVhcnRlciIsICIybmQgcXVhcnRlciIsICIzcmQgcXVhcnRlciIsICI0dGggcXVhcnRlciJdCiAgICB9OwogICAgbW9udGhWYWx1ZXMgPSB7CiAgICAgIG5hcnJvdzogWyJKIiwgIkYiLCAiTSIsICJBIiwgIk0iLCAiSiIsICJKIiwgIkEiLCAiUyIsICJPIiwgIk4iLCAiRCJdLAogICAgICBhYmJyZXZpYXRlZDogWwogICAgICAgICJKYW4iLAogICAgICAgICJGZWIiLAogICAgICAgICJNYXIiLAogICAgICAgICJBcHIiLAogICAgICAgICJNYXkiLAogICAgICAgICJKdW4iLAogICAgICAgICJKdWwiLAogICAgICAgICJBdWciLAogICAgICAgICJTZXAiLAogICAgICAgICJPY3QiLAogICAgICAgICJOb3YiLAogICAgICAgICJEZWMiCiAgICAgIF0sCiAgICAgIHdpZGU6IFsKICAgICAgICAiSmFudWFyeSIsCiAgICAgICAgIkZlYnJ1YXJ5IiwKICAgICAgICAiTWFyY2giLAogICAgICAgICJBcHJpbCIsCiAgICAgICAgIk1heSIsCiAgICAgICAgIkp1bmUiLAogICAgICAgICJKdWx5IiwKICAgICAgICAiQXVndXN0IiwKICAgICAgICAiU2VwdGVtYmVyIiwKICAgICAgICAiT2N0b2JlciIsCiAgICAgICAgIk5vdmVtYmVyIiwKICAgICAgICAiRGVjZW1iZXIiCiAgICAgIF0KICAgIH07CiAgICBkYXlWYWx1ZXMgPSB7CiAgICAgIG5hcnJvdzogWyJTIiwgIk0iLCAiVCIsICJXIiwgIlQiLCAiRiIsICJTIl0sCiAgICAgIHNob3J0OiBbIlN1IiwgIk1vIiwgIlR1IiwgIldlIiwgIlRoIiwgIkZyIiwgIlNhIl0sCiAgICAgIGFiYnJldmlhdGVkOiBbIlN1biIsICJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCJdLAogICAgICB3aWRlOiBbCiAgICAgICAgIlN1bmRheSIsCiAgICAgICAgIk1vbmRheSIsCiAgICAgICAgIlR1ZXNkYXkiLAogICAgICAgICJXZWRuZXNkYXkiLAogICAgICAgICJUaHVyc2RheSIsCiAgICAgICAgIkZyaWRheSIsCiAgICAgICAgIlNhdHVyZGF5IgogICAgICBdCiAgICB9OwogICAgZGF5UGVyaW9kVmFsdWVzID0gewogICAgICBuYXJyb3c6IHsKICAgICAgICBhbTogImEiLAogICAgICAgIHBtOiAicCIsCiAgICAgICAgbWlkbmlnaHQ6ICJtaSIsCiAgICAgICAgbm9vbjogIm4iLAogICAgICAgIG1vcm5pbmc6ICJtb3JuaW5nIiwKICAgICAgICBhZnRlcm5vb246ICJhZnRlcm5vb24iLAogICAgICAgIGV2ZW5pbmc6ICJldmVuaW5nIiwKICAgICAgICBuaWdodDogIm5pZ2h0IgogICAgICB9LAogICAgICBhYmJyZXZpYXRlZDogewogICAgICAgIGFtOiAiQU0iLAogICAgICAgIHBtOiAiUE0iLAogICAgICAgIG1pZG5pZ2h0OiAibWlkbmlnaHQiLAogICAgICAgIG5vb246ICJub29uIiwKICAgICAgICBtb3JuaW5nOiAibW9ybmluZyIsCiAgICAgICAgYWZ0ZXJub29uOiAiYWZ0ZXJub29uIiwKICAgICAgICBldmVuaW5nOiAiZXZlbmluZyIsCiAgICAgICAgbmlnaHQ6ICJuaWdodCIKICAgICAgfSwKICAgICAgd2lkZTogewogICAgICAgIGFtOiAiYS5tLiIsCiAgICAgICAgcG06ICJwLm0uIiwKICAgICAgICBtaWRuaWdodDogIm1pZG5pZ2h0IiwKICAgICAgICBub29uOiAibm9vbiIsCiAgICAgICAgbW9ybmluZzogIm1vcm5pbmciLAogICAgICAgIGFmdGVybm9vbjogImFmdGVybm9vbiIsCiAgICAgICAgZXZlbmluZzogImV2ZW5pbmciLAogICAgICAgIG5pZ2h0OiAibmlnaHQiCiAgICAgIH0KICAgIH07CiAgICBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0gewogICAgICBuYXJyb3c6IHsKICAgICAgICBhbTogImEiLAogICAgICAgIHBtOiAicCIsCiAgICAgICAgbWlkbmlnaHQ6ICJtaSIsCiAgICAgICAgbm9vbjogIm4iLAogICAgICAgIG1vcm5pbmc6ICJpbiB0aGUgbW9ybmluZyIsCiAgICAgICAgYWZ0ZXJub29uOiAiaW4gdGhlIGFmdGVybm9vbiIsCiAgICAgICAgZXZlbmluZzogImluIHRoZSBldmVuaW5nIiwKICAgICAgICBuaWdodDogImF0IG5pZ2h0IgogICAgICB9LAogICAgICBhYmJyZXZpYXRlZDogewogICAgICAgIGFtOiAiQU0iLAogICAgICAgIHBtOiAiUE0iLAogICAgICAgIG1pZG5pZ2h0OiAibWlkbmlnaHQiLAogICAgICAgIG5vb246ICJub29uIiwKICAgICAgICBtb3JuaW5nOiAiaW4gdGhlIG1vcm5pbmciLAogICAgICAgIGFmdGVybm9vbjogImluIHRoZSBhZnRlcm5vb24iLAogICAgICAgIGV2ZW5pbmc6ICJpbiB0aGUgZXZlbmluZyIsCiAgICAgICAgbmlnaHQ6ICJhdCBuaWdodCIKICAgICAgfSwKICAgICAgd2lkZTogewogICAgICAgIGFtOiAiYS5tLiIsCiAgICAgICAgcG06ICJwLm0uIiwKICAgICAgICBtaWRuaWdodDogIm1pZG5pZ2h0IiwKICAgICAgICBub29uOiAibm9vbiIsCiAgICAgICAgbW9ybmluZzogImluIHRoZSBtb3JuaW5nIiwKICAgICAgICBhZnRlcm5vb246ICJpbiB0aGUgYWZ0ZXJub29uIiwKICAgICAgICBldmVuaW5nOiAiaW4gdGhlIGV2ZW5pbmciLAogICAgICAgIG5pZ2h0OiAiYXQgbmlnaHQiCiAgICAgIH0KICAgIH07CiAgICBvcmRpbmFsTnVtYmVyID0gKGRpcnR5TnVtYmVyLCBfb3B0aW9ucykgPT4gewogICAgICBjb25zdCBudW1iZXIyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTsKICAgICAgY29uc3QgcmVtMTAwID0gbnVtYmVyMiAlIDEwMDsKICAgICAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7CiAgICAgICAgc3dpdGNoIChyZW0xMDAgJSAxMCkgewogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICByZXR1cm4gbnVtYmVyMiArICJzdCI7CiAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgIHJldHVybiBudW1iZXIyICsgIm5kIjsKICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgcmV0dXJuIG51bWJlcjIgKyAicmQiOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbnVtYmVyMiArICJ0aCI7CiAgICB9OwogICAgbG9jYWxpemUgPSB7CiAgICAgIG9yZGluYWxOdW1iZXIsCiAgICAgIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHsKICAgICAgICB2YWx1ZXM6IGVyYVZhbHVlcywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJ3aWRlIgogICAgICB9KSwKICAgICAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHsKICAgICAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsCiAgICAgICAgZGVmYXVsdFdpZHRoOiAid2lkZSIsCiAgICAgICAgYXJndW1lbnRDYWxsYmFjazogKHF1YXJ0ZXIpID0+IHF1YXJ0ZXIgLSAxCiAgICAgIH0pLAogICAgICBtb250aDogYnVpbGRMb2NhbGl6ZUZuKHsKICAgICAgICB2YWx1ZXM6IG1vbnRoVmFsdWVzLAogICAgICAgIGRlZmF1bHRXaWR0aDogIndpZGUiCiAgICAgIH0pLAogICAgICBkYXk6IGJ1aWxkTG9jYWxpemVGbih7CiAgICAgICAgdmFsdWVzOiBkYXlWYWx1ZXMsCiAgICAgICAgZGVmYXVsdFdpZHRoOiAid2lkZSIKICAgICAgfSksCiAgICAgIGRheVBlcmlvZDogYnVpbGRMb2NhbGl6ZUZuKHsKICAgICAgICB2YWx1ZXM6IGRheVBlcmlvZFZhbHVlcywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJ3aWRlIiwKICAgICAgICBmb3JtYXR0aW5nVmFsdWVzOiBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzLAogICAgICAgIGRlZmF1bHRGb3JtYXR0aW5nV2lkdGg6ICJ3aWRlIgogICAgICB9KQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvX2xpYi9idWlsZE1hdGNoRm4uanMKZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHsKICByZXR1cm4gKHN0cmluZzMsIG9wdGlvbnMgPSB7fSkgPT4gewogICAgY29uc3Qgd2lkdGggPSBvcHRpb25zLndpZHRoOwogICAgY29uc3QgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07CiAgICBjb25zdCBtYXRjaFJlc3VsdCA9IHN0cmluZzMubWF0Y2gobWF0Y2hQYXR0ZXJuKTsKICAgIGlmICghbWF0Y2hSZXN1bHQpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07CiAgICBjb25zdCBwYXJzZVBhdHRlcm5zID0gd2lkdGggJiYgYXJncy5wYXJzZVBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07CiAgICBjb25zdCBrZXkyID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleDIocGFyc2VQYXR0ZXJucywgKHBhdHRlcm4pID0+IHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKSkgOiAoCiAgICAgIC8vIFtUT0RPXSAtLSBJIGNoYWxsZW5nZSB5b3UgdG8gZml4IHRoZSB0eXBlCiAgICAgIGZpbmRLZXkocGFyc2VQYXR0ZXJucywgKHBhdHRlcm4pID0+IHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKSkKICAgICk7CiAgICBsZXQgdmFsdWUyOwogICAgdmFsdWUyID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleTIpIDoga2V5MjsKICAgIHZhbHVlMiA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/ICgKICAgICAgLy8gW1RPRE9dIC0tIEkgY2hhbGxlbmdlIHlvdSB0byBmaXggdGhlIHR5cGUKICAgICAgb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlMikKICAgICkgOiB2YWx1ZTI7CiAgICBjb25zdCByZXN0ID0gc3RyaW5nMy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7CiAgICByZXR1cm4geyB2YWx1ZTogdmFsdWUyLCByZXN0IH07CiAgfTsKfQpmdW5jdGlvbiBmaW5kS2V5KG9iamVjdCwgcHJlZGljYXRlKSB7CiAgZm9yIChjb25zdCBrZXkyIGluIG9iamVjdCkgewogICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleTIpICYmIHByZWRpY2F0ZShvYmplY3Rba2V5Ml0pKSB7CiAgICAgIHJldHVybiBrZXkyOwogICAgfQogIH0KICByZXR1cm4gdm9pZCAwOwp9CmZ1bmN0aW9uIGZpbmRJbmRleDIoYXJyYXksIHByZWRpY2F0ZSkgewogIGZvciAobGV0IGtleTIgPSAwOyBrZXkyIDwgYXJyYXkubGVuZ3RoOyBrZXkyKyspIHsKICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5Ml0pKSB7CiAgICAgIHJldHVybiBrZXkyOwogICAgfQogIH0KICByZXR1cm4gdm9pZCAwOwp9CnZhciBpbml0X2J1aWxkTWF0Y2hGbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvX2xpYi9idWlsZE1hdGNoRm4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4uanMKZnVuY3Rpb24gYnVpbGRNYXRjaFBhdHRlcm5GbihhcmdzKSB7CiAgcmV0dXJuIChzdHJpbmczLCBvcHRpb25zID0ge30pID0+IHsKICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gc3RyaW5nMy5tYXRjaChhcmdzLm1hdGNoUGF0dGVybik7CiAgICBpZiAoIW1hdGNoUmVzdWx0KSByZXR1cm4gbnVsbDsKICAgIGNvbnN0IG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTsKICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gc3RyaW5nMy5tYXRjaChhcmdzLnBhcnNlUGF0dGVybik7CiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDsKICAgIGxldCB2YWx1ZTIgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07CiAgICB2YWx1ZTIgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUyKSA6IHZhbHVlMjsKICAgIGNvbnN0IHJlc3QgPSBzdHJpbmczLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTsKICAgIHJldHVybiB7IHZhbHVlOiB2YWx1ZTIsIHJlc3QgfTsKICB9Owp9CnZhciBpbml0X2J1aWxkTWF0Y2hQYXR0ZXJuRm4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL2VuLVVTL19saWIvbWF0Y2guanMKdmFyIG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sIG1hdGNoRXJhUGF0dGVybnMsIHBhcnNlRXJhUGF0dGVybnMsIG1hdGNoUXVhcnRlclBhdHRlcm5zLCBwYXJzZVF1YXJ0ZXJQYXR0ZXJucywgbWF0Y2hNb250aFBhdHRlcm5zLCBwYXJzZU1vbnRoUGF0dGVybnMsIG1hdGNoRGF5UGF0dGVybnMsIHBhcnNlRGF5UGF0dGVybnMsIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMsIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsIG1hdGNoOwp2YXIgaW5pdF9tYXRjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC5qcyIoKSB7CiAgICBpbml0X2J1aWxkTWF0Y2hGbigpOwogICAgaW5pdF9idWlsZE1hdGNoUGF0dGVybkZuKCk7CiAgICBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXGQrKSh0aHxzdHxuZHxyZCk/L2k7CiAgICBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL1xkKy9pOwogICAgbWF0Y2hFcmFQYXR0ZXJucyA9IHsKICAgICAgbmFycm93OiAvXihifGEpL2ksCiAgICAgIGFiYnJldmlhdGVkOiAvXihiXC4/XHM/Y1wuP3xiXC4/XHM/Y1wuP1xzP2VcLj98YVwuP1xzP2RcLj98Y1wuP1xzP2VcLj8pL2ksCiAgICAgIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaQogICAgfTsKICAgIHBhcnNlRXJhUGF0dGVybnMgPSB7CiAgICAgIGFueTogWy9eYi9pLCAvXihhfGMpL2ldCiAgICB9OwogICAgbWF0Y2hRdWFydGVyUGF0dGVybnMgPSB7CiAgICAgIG5hcnJvdzogL15bMTIzNF0vaSwKICAgICAgYWJicmV2aWF0ZWQ6IC9ecVsxMjM0XS9pLAogICAgICB3aWRlOiAvXlsxMjM0XSh0aHxzdHxuZHxyZCk/IHF1YXJ0ZXIvaQogICAgfTsKICAgIHBhcnNlUXVhcnRlclBhdHRlcm5zID0gewogICAgICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXQogICAgfTsKICAgIG1hdGNoTW9udGhQYXR0ZXJucyA9IHsKICAgICAgbmFycm93OiAvXltqZm1hc29uZF0vaSwKICAgICAgYWJicmV2aWF0ZWQ6IC9eKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKS9pLAogICAgICB3aWRlOiAvXihqYW51YXJ5fGZlYnJ1YXJ5fG1hcmNofGFwcmlsfG1heXxqdW5lfGp1bHl8YXVndXN0fHNlcHRlbWJlcnxvY3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pCiAgICB9OwogICAgcGFyc2VNb250aFBhdHRlcm5zID0gewogICAgICBuYXJyb3c6IFsKICAgICAgICAvXmovaSwKICAgICAgICAvXmYvaSwKICAgICAgICAvXm0vaSwKICAgICAgICAvXmEvaSwKICAgICAgICAvXm0vaSwKICAgICAgICAvXmovaSwKICAgICAgICAvXmovaSwKICAgICAgICAvXmEvaSwKICAgICAgICAvXnMvaSwKICAgICAgICAvXm8vaSwKICAgICAgICAvXm4vaSwKICAgICAgICAvXmQvaQogICAgICBdLAogICAgICBhbnk6IFsKICAgICAgICAvXmphL2ksCiAgICAgICAgL15mL2ksCiAgICAgICAgL15tYXIvaSwKICAgICAgICAvXmFwL2ksCiAgICAgICAgL15tYXkvaSwKICAgICAgICAvXmp1bi9pLAogICAgICAgIC9eanVsL2ksCiAgICAgICAgL15hdS9pLAogICAgICAgIC9ecy9pLAogICAgICAgIC9eby9pLAogICAgICAgIC9ebi9pLAogICAgICAgIC9eZC9pCiAgICAgIF0KICAgIH07CiAgICBtYXRjaERheVBhdHRlcm5zID0gewogICAgICBuYXJyb3c6IC9eW3NtdHdmXS9pLAogICAgICBzaG9ydDogL14oc3V8bW98dHV8d2V8dGh8ZnJ8c2EpL2ksCiAgICAgIGFiYnJldmlhdGVkOiAvXihzdW58bW9ufHR1ZXx3ZWR8dGh1fGZyaXxzYXQpL2ksCiAgICAgIHdpZGU6IC9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pCiAgICB9OwogICAgcGFyc2VEYXlQYXR0ZXJucyA9IHsKICAgICAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLAogICAgICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldCiAgICB9OwogICAgbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyA9IHsKICAgICAgbmFycm93OiAvXihhfHB8bWl8bnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2ksCiAgICAgIGFueTogL14oW2FwXVwuP1xzP21cLj98bWlkbmlnaHR8bm9vbnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2kKICAgIH07CiAgICBwYXJzZURheVBlcmlvZFBhdHRlcm5zID0gewogICAgICBhbnk6IHsKICAgICAgICBhbTogL15hL2ksCiAgICAgICAgcG06IC9ecC9pLAogICAgICAgIG1pZG5pZ2h0OiAvXm1pL2ksCiAgICAgICAgbm9vbjogL15uby9pLAogICAgICAgIG1vcm5pbmc6IC9tb3JuaW5nL2ksCiAgICAgICAgYWZ0ZXJub29uOiAvYWZ0ZXJub29uL2ksCiAgICAgICAgZXZlbmluZzogL2V2ZW5pbmcvaSwKICAgICAgICBuaWdodDogL25pZ2h0L2kKICAgICAgfQogICAgfTsKICAgIG1hdGNoID0gewogICAgICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHsKICAgICAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sCiAgICAgICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLAogICAgICAgIHZhbHVlQ2FsbGJhY2s6ICh2YWx1ZTIpID0+IHBhcnNlSW50KHZhbHVlMiwgMTApCiAgICAgIH0pLAogICAgICBlcmE6IGJ1aWxkTWF0Y2hGbih7CiAgICAgICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hFcmFQYXR0ZXJucywKICAgICAgICBkZWZhdWx0TWF0Y2hXaWR0aDogIndpZGUiLAogICAgICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRXJhUGF0dGVybnMsCiAgICAgICAgZGVmYXVsdFBhcnNlV2lkdGg6ICJhbnkiCiAgICAgIH0pLAogICAgICBxdWFydGVyOiBidWlsZE1hdGNoRm4oewogICAgICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoUXVhcnRlclBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAid2lkZSIsCiAgICAgICAgcGFyc2VQYXR0ZXJuczogcGFyc2VRdWFydGVyUGF0dGVybnMsCiAgICAgICAgZGVmYXVsdFBhcnNlV2lkdGg6ICJhbnkiLAogICAgICAgIHZhbHVlQ2FsbGJhY2s6IChpbmRleDIpID0+IGluZGV4MiArIDEKICAgICAgfSksCiAgICAgIG1vbnRoOiBidWlsZE1hdGNoRm4oewogICAgICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoTW9udGhQYXR0ZXJucywKICAgICAgICBkZWZhdWx0TWF0Y2hXaWR0aDogIndpZGUiLAogICAgICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlTW9udGhQYXR0ZXJucywKICAgICAgICBkZWZhdWx0UGFyc2VXaWR0aDogImFueSIKICAgICAgfSksCiAgICAgIGRheTogYnVpbGRNYXRjaEZuKHsKICAgICAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAid2lkZSIsCiAgICAgICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQYXR0ZXJucywKICAgICAgICBkZWZhdWx0UGFyc2VXaWR0aDogImFueSIKICAgICAgfSksCiAgICAgIGRheVBlcmlvZDogYnVpbGRNYXRjaEZuKHsKICAgICAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBlcmlvZFBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAiYW55IiwKICAgICAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBlcmlvZFBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAiYW55IgogICAgICB9KQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMuanMKdmFyIGVuVVMsIGVuX1VTX2RlZmF1bHQ7CnZhciBpbml0X2VuX1VTID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy5qcyIoKSB7CiAgICBpbml0X2Zvcm1hdERpc3RhbmNlKCk7CiAgICBpbml0X2Zvcm1hdExvbmcoKTsKICAgIGluaXRfZm9ybWF0UmVsYXRpdmUoKTsKICAgIGluaXRfbG9jYWxpemUoKTsKICAgIGluaXRfbWF0Y2goKTsKICAgIGVuVVMgPSB7CiAgICAgIGNvZGU6ICJlbi1VUyIsCiAgICAgIGZvcm1hdERpc3RhbmNlLAogICAgICBmb3JtYXRMb25nLAogICAgICBmb3JtYXRSZWxhdGl2ZSwKICAgICAgbG9jYWxpemUsCiAgICAgIG1hdGNoLAogICAgICBvcHRpb25zOiB7CiAgICAgICAgd2Vla1N0YXJ0c09uOiAwLAogICAgICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogMQogICAgICB9CiAgICB9OwogICAgZW5fVVNfZGVmYXVsdCA9IGVuVVM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9kZWZhdWx0TG9jYWxlLmpzCnZhciBpbml0X2RlZmF1bHRMb2NhbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9kZWZhdWx0TG9jYWxlLmpzIigpIHsKICAgIGluaXRfZW5fVVMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXlPZlllYXIuanMKZnVuY3Rpb24gZ2V0RGF5T2ZZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhfZGF0ZSwgc3RhcnRPZlllYXIoX2RhdGUpKTsKICBjb25zdCBkYXlPZlllYXIgPSBkaWZmICsgMTsKICByZXR1cm4gZGF5T2ZZZWFyOwp9CnZhciBnZXREYXlPZlllYXJfZGVmYXVsdDsKdmFyIGluaXRfZ2V0RGF5T2ZZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERheU9mWWVhci5qcyIoKSB7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9zdGFydE9mWWVhcigpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldERheU9mWWVhcl9kZWZhdWx0ID0gZ2V0RGF5T2ZZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT1dlZWsuanMKZnVuY3Rpb24gZ2V0SVNPV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRpZmYgPSArc3RhcnRPZklTT1dlZWsoX2RhdGUpIC0gK3N0YXJ0T2ZJU09XZWVrWWVhcihfZGF0ZSk7CiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2VlaykgKyAxOwp9CnZhciBnZXRJU09XZWVrX2RlZmF1bHQ7CnZhciBpbml0X2dldElTT1dlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vlay5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9zdGFydE9mSVNPV2VlaygpOwogICAgaW5pdF9zdGFydE9mSVNPV2Vla1llYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRJU09XZWVrX2RlZmF1bHQgPSBnZXRJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWtZZWFyLmpzCmZ1bmN0aW9uIGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCBmaXJzdFdlZWtDb250YWluc0RhdGUgPSBvcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gZGVmYXVsdE9wdGlvbnMyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gMTsKICBjb25zdCBmaXJzdFdlZWtPZk5leHRZZWFyID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTsKICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldEZ1bGxZZWFyKHllYXIgKyAxLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpOwogIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3Qgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZOZXh0WWVhciwgb3B0aW9ucyk7CiAgY29uc3QgZmlyc3RXZWVrT2ZUaGlzWWVhciA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7CiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpOwogIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3Qgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7CiAgaWYgKCtfZGF0ZSA+PSArc3RhcnRPZk5leHRZZWFyKSB7CiAgICByZXR1cm4geWVhciArIDE7CiAgfSBlbHNlIGlmICgrX2RhdGUgPj0gK3N0YXJ0T2ZUaGlzWWVhcikgewogICAgcmV0dXJuIHllYXI7CiAgfSBlbHNlIHsKICAgIHJldHVybiB5ZWFyIC0gMTsKICB9Cn0KdmFyIGdldFdlZWtZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2dldFdlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldFdlZWtZZWFyX2RlZmF1bHQgPSBnZXRXZWVrWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mV2Vla1llYXIuanMKZnVuY3Rpb24gc3RhcnRPZldlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBkZWZhdWx0T3B0aW9uczIuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyAxOwogIGNvbnN0IHllYXIgPSBnZXRXZWVrWWVhcihkYXRlLCBvcHRpb25zKTsKICBjb25zdCBmaXJzdFdlZWsgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZpcnN0V2Vlay5zZXRGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpOwogIGZpcnN0V2Vlay5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBjb25zdCBfZGF0ZSA9IHN0YXJ0T2ZXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZldlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZXZWVrWWVhci5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0V2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIHN0YXJ0T2ZXZWVrWWVhcl9kZWZhdWx0ID0gc3RhcnRPZldlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWsuanMKZnVuY3Rpb24gZ2V0V2VlayhkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRpZmYgPSArc3RhcnRPZldlZWsoX2RhdGUsIG9wdGlvbnMpIC0gK3N0YXJ0T2ZXZWVrWWVhcihfZGF0ZSwgb3B0aW9ucyk7CiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2VlaykgKyAxOwp9CnZhciBnZXRXZWVrX2RlZmF1bHQ7CnZhciBpbml0X2dldFdlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0V2Vlay5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgaW5pdF9zdGFydE9mV2Vla1llYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRXZWVrX2RlZmF1bHQgPSBnZXRXZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvYWRkTGVhZGluZ1plcm9zLmpzCmZ1bmN0aW9uIGFkZExlYWRpbmdaZXJvcyhudW1iZXIyLCB0YXJnZXRMZW5ndGgpIHsKICBjb25zdCBzaWduID0gbnVtYmVyMiA8IDAgPyAiLSIgOiAiIjsKICBjb25zdCBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIyKS50b1N0cmluZygpLnBhZFN0YXJ0KHRhcmdldExlbmd0aCwgIjAiKTsKICByZXR1cm4gc2lnbiArIG91dHB1dDsKfQp2YXIgaW5pdF9hZGRMZWFkaW5nWmVyb3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9hZGRMZWFkaW5nWmVyb3MuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZm9ybWF0L2xpZ2h0Rm9ybWF0dGVycy5qcwp2YXIgbGlnaHRGb3JtYXR0ZXJzOwp2YXIgaW5pdF9saWdodEZvcm1hdHRlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9mb3JtYXQvbGlnaHRGb3JtYXR0ZXJzLmpzIigpIHsKICAgIGluaXRfYWRkTGVhZGluZ1plcm9zKCk7CiAgICBsaWdodEZvcm1hdHRlcnMgPSB7CiAgICAgIC8vIFllYXIKICAgICAgeShkYXRlLCB0b2tlbikgewogICAgICAgIGNvbnN0IHNpZ25lZFllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7CiAgICAgICAgY29uc3QgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyOwogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModG9rZW4gPT09ICJ5eSIgPyB5ZWFyICUgMTAwIDogeWVhciwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gTW9udGgKICAgICAgTShkYXRlLCB0b2tlbikgewogICAgICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpOwogICAgICAgIHJldHVybiB0b2tlbiA9PT0gIk0iID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTsKICAgICAgfSwKICAgICAgLy8gRGF5IG9mIHRoZSBtb250aAogICAgICBkKGRhdGUsIHRva2VuKSB7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldERhdGUoKSwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gQU0gb3IgUE0KICAgICAgYShkYXRlLCB0b2tlbikgewogICAgICAgIGNvbnN0IGRheVBlcmlvZEVudW1WYWx1ZSA9IGRhdGUuZ2V0SG91cnMoKSAvIDEyID49IDEgPyAicG0iIDogImFtIjsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJhIjoKICAgICAgICAgIGNhc2UgImFhIjoKICAgICAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZS50b1VwcGVyQ2FzZSgpOwogICAgICAgICAgY2FzZSAiYWFhIjoKICAgICAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZTsKICAgICAgICAgIGNhc2UgImFhYWFhIjoKICAgICAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZVswXTsKICAgICAgICAgIGNhc2UgImFhYWEiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZSA9PT0gImFtIiA/ICJhLm0uIiA6ICJwLm0uIjsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIEhvdXIgWzEtMTJdCiAgICAgIGgoZGF0ZSwgdG9rZW4pIHsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0SG91cnMoKSAlIDEyIHx8IDEyLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBIb3VyIFswLTIzXQogICAgICBIKGRhdGUsIHRva2VuKSB7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldEhvdXJzKCksIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIE1pbnV0ZQogICAgICBtKGRhdGUsIHRva2VuKSB7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldE1pbnV0ZXMoKSwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gU2Vjb25kCiAgICAgIHMoZGF0ZSwgdG9rZW4pIHsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0U2Vjb25kcygpLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBGcmFjdGlvbiBvZiBzZWNvbmQKICAgICAgUyhkYXRlLCB0b2tlbikgewogICAgICAgIGNvbnN0IG51bWJlck9mRGlnaXRzID0gdG9rZW4ubGVuZ3RoOwogICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kczIgPSBkYXRlLmdldE1pbGxpc2Vjb25kcygpOwogICAgICAgIGNvbnN0IGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC50cnVuYygKICAgICAgICAgIG1pbGxpc2Vjb25kczIgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKQogICAgICAgICk7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzLmpzCmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lU2hvcnQob2Zmc2V0LCBkZWxpbWl0ZXIgPSAiIikgewogIGNvbnN0IHNpZ24gPSBvZmZzZXQgPiAwID8gIi0iIDogIisiOwogIGNvbnN0IGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7CiAgY29uc3QgaG91cnMgPSBNYXRoLnRydW5jKGFic09mZnNldCAvIDYwKTsKICBjb25zdCBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7CiAgaWYgKG1pbnV0ZXMgPT09IDApIHsKICAgIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKTsKICB9CiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpOwp9CmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyhvZmZzZXQsIGRlbGltaXRlcikgewogIGlmIChvZmZzZXQgJSA2MCA9PT0gMCkgewogICAgY29uc3Qgc2lnbiA9IG9mZnNldCA+IDAgPyAiLSIgOiAiKyI7CiAgICByZXR1cm4gc2lnbiArIGFkZExlYWRpbmdaZXJvcyhNYXRoLmFicyhvZmZzZXQpIC8gNjAsIDIpOwogIH0KICByZXR1cm4gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkZWxpbWl0ZXIpOwp9CmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGVsaW1pdGVyID0gIiIpIHsKICBjb25zdCBzaWduID0gb2Zmc2V0ID4gMCA/ICItIiA6ICIrIjsKICBjb25zdCBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpOwogIGNvbnN0IGhvdXJzID0gYWRkTGVhZGluZ1plcm9zKE1hdGgudHJ1bmMoYWJzT2Zmc2V0IC8gNjApLCAyKTsKICBjb25zdCBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTsKICByZXR1cm4gc2lnbiArIGhvdXJzICsgZGVsaW1pdGVyICsgbWludXRlczsKfQp2YXIgZGF5UGVyaW9kRW51bSwgZm9ybWF0dGVyczsKdmFyIGluaXRfZm9ybWF0dGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzLmpzIigpIHsKICAgIGluaXRfZ2V0RGF5T2ZZZWFyKCk7CiAgICBpbml0X2dldElTT1dlZWsoKTsKICAgIGluaXRfZ2V0SVNPV2Vla1llYXIoKTsKICAgIGluaXRfZ2V0V2VlaygpOwogICAgaW5pdF9nZXRXZWVrWWVhcigpOwogICAgaW5pdF9hZGRMZWFkaW5nWmVyb3MoKTsKICAgIGluaXRfbGlnaHRGb3JtYXR0ZXJzKCk7CiAgICBkYXlQZXJpb2RFbnVtID0gewogICAgICBhbTogImFtIiwKICAgICAgcG06ICJwbSIsCiAgICAgIG1pZG5pZ2h0OiAibWlkbmlnaHQiLAogICAgICBub29uOiAibm9vbiIsCiAgICAgIG1vcm5pbmc6ICJtb3JuaW5nIiwKICAgICAgYWZ0ZXJub29uOiAiYWZ0ZXJub29uIiwKICAgICAgZXZlbmluZzogImV2ZW5pbmciLAogICAgICBuaWdodDogIm5pZ2h0IgogICAgfTsKICAgIGZvcm1hdHRlcnMgPSB7CiAgICAgIC8vIEVyYQogICAgICBHOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgZXJhID0gZGF0ZS5nZXRGdWxsWWVhcigpID4gMCA/IDEgOiAwOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIEFELCBCQwogICAgICAgICAgY2FzZSAiRyI6CiAgICAgICAgICBjYXNlICJHRyI6CiAgICAgICAgICBjYXNlICJHR0ciOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmVyYShlcmEsIHsgd2lkdGg6ICJhYmJyZXZpYXRlZCIgfSk7CiAgICAgICAgICAvLyBBLCBCCiAgICAgICAgICBjYXNlICJHR0dHRyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZXJhKGVyYSwgeyB3aWR0aDogIm5hcnJvdyIgfSk7CiAgICAgICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdAogICAgICAgICAgY2FzZSAiR0dHRyI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmVyYShlcmEsIHsgd2lkdGg6ICJ3aWRlIiB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFllYXIKICAgICAgeTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGlmICh0b2tlbiA9PT0gInlvIikgewogICAgICAgICAgY29uc3Qgc2lnbmVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICAgIGNvbnN0IHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjsKICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcih5ZWFyLCB7IHVuaXQ6ICJ5ZWFyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy55KGRhdGUsIHRva2VuKTsKICAgICAgfSwKICAgICAgLy8gTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhcgogICAgICBZOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3Qgc2lnbmVkV2Vla1llYXIgPSBnZXRXZWVrWWVhcihkYXRlLCBvcHRpb25zKTsKICAgICAgICBjb25zdCB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyOwogICAgICAgIGlmICh0b2tlbiA9PT0gIllZIikgewogICAgICAgICAgY29uc3QgdHdvRGlnaXRZZWFyID0gd2Vla1llYXIgJSAxMDA7CiAgICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHR3b0RpZ2l0WWVhciwgMik7CiAgICAgICAgfQogICAgICAgIGlmICh0b2tlbiA9PT0gIllvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKHdlZWtZZWFyLCB7IHVuaXQ6ICJ5ZWFyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXIKICAgICAgUjogZnVuY3Rpb24oZGF0ZSwgdG9rZW4pIHsKICAgICAgICBjb25zdCBpc29XZWVrWWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUpOwogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLgogICAgICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczoKICAgICAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHwKICAgICAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXwKICAgICAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHwKICAgICAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHwKICAgICAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHwKICAgICAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLAogICAgICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuCiAgICAgIHU6IGZ1bmN0aW9uKGRhdGUsIHRva2VuKSB7CiAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIFF1YXJ0ZXIKICAgICAgUTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0TW9udGgoKSArIDEpIC8gMyk7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMSwgMiwgMywgNAogICAgICAgICAgY2FzZSAiUSI6CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7CiAgICAgICAgICAvLyAwMSwgMDIsIDAzLCAwNAogICAgICAgICAgY2FzZSAiUVEiOgogICAgICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpOwogICAgICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoCiAgICAgICAgICBjYXNlICJRbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihxdWFydGVyLCB7IHVuaXQ6ICJxdWFydGVyIiB9KTsKICAgICAgICAgIC8vIFExLCBRMiwgUTMsIFE0CiAgICAgICAgICBjYXNlICJRUVEiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLnF1YXJ0ZXIocXVhcnRlciwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKQogICAgICAgICAgY2FzZSAiUVFRUVEiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLnF1YXJ0ZXIocXVhcnRlciwgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLgogICAgICAgICAgY2FzZSAiUVFRUSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLnF1YXJ0ZXIocXVhcnRlciwgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlcgogICAgICBxOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRNb250aCgpICsgMSkgLyAzKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyAxLCAyLCAzLCA0CiAgICAgICAgICBjYXNlICJxIjoKICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTsKICAgICAgICAgIC8vIDAxLCAwMiwgMDMsIDA0CiAgICAgICAgICBjYXNlICJxcSI6CiAgICAgICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGgKICAgICAgICAgIGNhc2UgInFvIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHsgdW5pdDogInF1YXJ0ZXIiIH0pOwogICAgICAgICAgLy8gUTEsIFEyLCBRMywgUTQKICAgICAgICAgIGNhc2UgInFxcSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIucXVhcnRlcihxdWFydGVyLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpCiAgICAgICAgICBjYXNlICJxcXFxcSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIucXVhcnRlcihxdWFydGVyLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uCiAgICAgICAgICBjYXNlICJxcXFxIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIucXVhcnRlcihxdWFydGVyLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyBNb250aAogICAgICBNOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCk7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiTSI6CiAgICAgICAgICBjYXNlICJNTSI6CiAgICAgICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuTShkYXRlLCB0b2tlbik7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoCiAgICAgICAgICBjYXNlICJNbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihtb250aCArIDEsIHsgdW5pdDogIm1vbnRoIiB9KTsKICAgICAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlYwogICAgICAgICAgY2FzZSAiTU1NIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5tb250aChtb250aCwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIEosIEYsIC4uLiwgRAogICAgICAgICAgY2FzZSAiTU1NTU0iOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm1vbnRoKG1vbnRoLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyCiAgICAgICAgICBjYXNlICJNTU1NIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIubW9udGgobW9udGgsIHsgd2lkdGg6ICJ3aWRlIiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gU3RhbmQtYWxvbmUgbW9udGgKICAgICAgTDogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIDEsIDIsIC4uLiwgMTIKICAgICAgICAgIGNhc2UgIkwiOgogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7CiAgICAgICAgICAvLyAwMSwgMDIsIC4uLiwgMTIKICAgICAgICAgIGNhc2UgIkxMIjoKICAgICAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpOwogICAgICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aAogICAgICAgICAgY2FzZSAiTG8iOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7IHVuaXQ6ICJtb250aCIgfSk7CiAgICAgICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWMKICAgICAgICAgIGNhc2UgIkxMTCI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIubW9udGgobW9udGgsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBKLCBGLCAuLi4sIEQKICAgICAgICAgIGNhc2UgIkxMTExMIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5tb250aChtb250aCwgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlcgogICAgICAgICAgY2FzZSAiTExMTCI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm1vbnRoKG1vbnRoLCB7IHdpZHRoOiAid2lkZSIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIExvY2FsIHdlZWsgb2YgeWVhcgogICAgICB3OiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3Qgd2VlayA9IGdldFdlZWsoZGF0ZSwgb3B0aW9ucyk7CiAgICAgICAgaWYgKHRva2VuID09PSAid28iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIod2VlaywgeyB1bml0OiAid2VlayIgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2VlaywgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gSVNPIHdlZWsgb2YgeWVhcgogICAgICBJOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgaXNvV2VlayA9IGdldElTT1dlZWsoZGF0ZSk7CiAgICAgICAgaWYgKHRva2VuID09PSAiSW8iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoaXNvV2VlaywgeyB1bml0OiAid2VlayIgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gRGF5IG9mIHRoZSBtb250aAogICAgICBkOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgaWYgKHRva2VuID09PSAiZG8iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXREYXRlKCksIHsgdW5pdDogImRhdGUiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmQoZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBEYXkgb2YgeWVhcgogICAgICBEOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgZGF5T2ZZZWFyID0gZ2V0RGF5T2ZZZWFyKGRhdGUpOwogICAgICAgIGlmICh0b2tlbiA9PT0gIkRvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGRheU9mWWVhciwgeyB1bml0OiAiZGF5T2ZZZWFyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIERheSBvZiB3ZWVrCiAgICAgIEU6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIFR1ZQogICAgICAgICAgY2FzZSAiRSI6CiAgICAgICAgICBjYXNlICJFRSI6CiAgICAgICAgICBjYXNlICJFRUUiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUCiAgICAgICAgICBjYXNlICJFRUVFRSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdQogICAgICAgICAgY2FzZSAiRUVFRUVFIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJzaG9ydCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gVHVlc2RheQogICAgICAgICAgY2FzZSAiRUVFRSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIExvY2FsIGRheSBvZiB3ZWVrCiAgICAgIGU6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpOwogICAgICAgIGNvbnN0IGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChOdGggZGF5IG9mIHdlZWsgd2l0aCBjdXJyZW50IGxvY2FsZSBvciB3ZWVrU3RhcnRzT24pCiAgICAgICAgICBjYXNlICJlIjoKICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7CiAgICAgICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlCiAgICAgICAgICBjYXNlICJlZSI6CiAgICAgICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIDIpOwogICAgICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoCiAgICAgICAgICBjYXNlICJlbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2VlaywgeyB1bml0OiAiZGF5IiB9KTsKICAgICAgICAgIGNhc2UgImVlZSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFQKICAgICAgICAgIGNhc2UgImVlZWVlIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJlZWVlZWUiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdWVzZGF5CiAgICAgICAgICBjYXNlICJlZWVlIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWsKICAgICAgYzogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMiwgb3B0aW9ucykgewogICAgICAgIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0RGF5KCk7CiAgICAgICAgY29uc3QgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNzsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKHNhbWUgYXMgaW4gYGVgKQogICAgICAgICAgY2FzZSAiYyI6CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspOwogICAgICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZQogICAgICAgICAgY2FzZSAiY2MiOgogICAgICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpOwogICAgICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoCiAgICAgICAgICBjYXNlICJjbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2VlaywgeyB1bml0OiAiZGF5IiB9KTsKICAgICAgICAgIGNhc2UgImNjYyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFQKICAgICAgICAgIGNhc2UgImNjY2NjIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJjY2NjY2MiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdWVzZGF5CiAgICAgICAgICBjYXNlICJjY2NjIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gSVNPIGRheSBvZiB3ZWVrCiAgICAgIGk6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpOwogICAgICAgIGNvbnN0IGlzb0RheU9mV2VlayA9IGRheU9mV2VlayA9PT0gMCA/IDcgOiBkYXlPZldlZWs7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMgogICAgICAgICAgY2FzZSAiaSI6CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaXNvRGF5T2ZXZWVrKTsKICAgICAgICAgIC8vIDAyCiAgICAgICAgICBjYXNlICJpaSI6CiAgICAgICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpOwogICAgICAgICAgLy8gMm5kCiAgICAgICAgICBjYXNlICJpbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHsgdW5pdDogImRheSIgfSk7CiAgICAgICAgICAvLyBUdWUKICAgICAgICAgIGNhc2UgImlpaSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFQKICAgICAgICAgIGNhc2UgImlpaWlpIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJpaWlpaWkiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdWVzZGF5CiAgICAgICAgICBjYXNlICJpaWlpIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gQU0gb3IgUE0KICAgICAgYTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpOwogICAgICAgIGNvbnN0IGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICJwbSIgOiAiYW0iOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImEiOgogICAgICAgICAgY2FzZSAiYWEiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlICJhYWEiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGNhc2UgImFhYWFhIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgImFhYWEiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uCiAgICAgIGI6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTsKICAgICAgICBsZXQgZGF5UGVyaW9kRW51bVZhbHVlOwogICAgICAgIGlmIChob3VycyA9PT0gMTIpIHsKICAgICAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubm9vbjsKICAgICAgICB9IGVsc2UgaWYgKGhvdXJzID09PSAwKSB7CiAgICAgICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1pZG5pZ2h0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAicG0iIDogImFtIjsKICAgICAgICB9CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiYiI6CiAgICAgICAgICBjYXNlICJiYiI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgImJiYiI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgY2FzZSAiYmJiYmIiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiYmJiYiI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIGluIHRoZSBtb3JuaW5nLCBpbiB0aGUgYWZ0ZXJub29uLCBpbiB0aGUgZXZlbmluZywgYXQgbmlnaHQKICAgICAgQjogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpOwogICAgICAgIGxldCBkYXlQZXJpb2RFbnVtVmFsdWU7CiAgICAgICAgaWYgKGhvdXJzID49IDE3KSB7CiAgICAgICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7CiAgICAgICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikgewogICAgICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247CiAgICAgICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7CiAgICAgICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgIkIiOgogICAgICAgICAgY2FzZSAiQkIiOgogICAgICAgICAgY2FzZSAiQkJCIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiQkJCQkIiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiQkJCQiI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIEhvdXIgWzEtMTJdCiAgICAgIGg6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBpZiAodG9rZW4gPT09ICJobyIpIHsKICAgICAgICAgIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyOwogICAgICAgICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDEyOwogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7IHVuaXQ6ICJob3VyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5oKGRhdGUsIHRva2VuKTsKICAgICAgfSwKICAgICAgLy8gSG91ciBbMC0yM10KICAgICAgSDogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGlmICh0b2tlbiA9PT0gIkhvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0SG91cnMoKSwgeyB1bml0OiAiaG91ciIgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuSChkYXRlLCB0b2tlbik7CiAgICAgIH0sCiAgICAgIC8vIEhvdXIgWzAtMTFdCiAgICAgIEs6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyOwogICAgICAgIGlmICh0b2tlbiA9PT0gIktvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7IHVuaXQ6ICJob3VyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gSG91ciBbMS0yNF0KICAgICAgazogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTsKICAgICAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMjQ7CiAgICAgICAgaWYgKHRva2VuID09PSAia28iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoaG91cnMsIHsgdW5pdDogImhvdXIiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBNaW51dGUKICAgICAgbTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGlmICh0b2tlbiA9PT0gIm1vIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0TWludXRlcygpLCB7IHVuaXQ6ICJtaW51dGUiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBTZWNvbmQKICAgICAgczogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGlmICh0b2tlbiA9PT0gInNvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0U2Vjb25kcygpLCB7IHVuaXQ6ICJzZWNvbmQiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnMoZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBGcmFjdGlvbiBvZiBzZWNvbmQKICAgICAgUzogZnVuY3Rpb24oZGF0ZSwgdG9rZW4pIHsKICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKQogICAgICBYOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7CiAgICAgICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7CiAgICAgICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gIloiOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlcwogICAgICAgICAgY2FzZSAiWCI6CiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpOwogICAgICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyCiAgICAgICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0cwogICAgICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhgCiAgICAgICAgICBjYXNlICJYWFhYIjoKICAgICAgICAgIGNhc2UgIlhYIjoKICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTsKICAgICAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlcgogICAgICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHMKICAgICAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYWGAKICAgICAgICAgIGNhc2UgIlhYWFhYIjoKICAgICAgICAgIGNhc2UgIlhYWCI6CiAgICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXIKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgIjoiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBgJyswMDowMCdgIG9yIGVxdWl2YWxlbnQpCiAgICAgIHg6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlcwogICAgICAgICAgY2FzZSAieCI6CiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpOwogICAgICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyCiAgICAgICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0cwogICAgICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgCiAgICAgICAgICBjYXNlICJ4eHh4IjoKICAgICAgICAgIGNhc2UgInh4IjoKICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTsKICAgICAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlcgogICAgICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHMKICAgICAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGAKICAgICAgICAgIGNhc2UgInh4eHh4IjoKICAgICAgICAgIGNhc2UgInh4eCI6CiAgICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXIKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgIjoiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFRpbWV6b25lIChHTVQpCiAgICAgIE86IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBTaG9ydAogICAgICAgICAgY2FzZSAiTyI6CiAgICAgICAgICBjYXNlICJPTyI6CiAgICAgICAgICBjYXNlICJPT08iOgogICAgICAgICAgICByZXR1cm4gIkdNVCIgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAiOiIpOwogICAgICAgICAgLy8gTG9uZwogICAgICAgICAgY2FzZSAiT09PTyI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gIkdNVCIgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgIjoiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXRpb24pCiAgICAgIHo6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBTaG9ydAogICAgICAgICAgY2FzZSAieiI6CiAgICAgICAgICBjYXNlICJ6eiI6CiAgICAgICAgICBjYXNlICJ6enoiOgogICAgICAgICAgICByZXR1cm4gIkdNVCIgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAiOiIpOwogICAgICAgICAgLy8gTG9uZwogICAgICAgICAgY2FzZSAienp6eiI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gIkdNVCIgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgIjoiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFNlY29uZHMgdGltZXN0YW1wCiAgICAgIHQ6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICBjb25zdCB0aW1lc3RhbXAyID0gTWF0aC50cnVuYygrZGF0ZSAvIDFlMyk7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAyLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBNaWxsaXNlY29uZHMgdGltZXN0YW1wCiAgICAgIFQ6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKCtkYXRlLCB0b2tlbi5sZW5ndGgpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzLmpzCnZhciBkYXRlTG9uZ0Zvcm1hdHRlciwgdGltZUxvbmdGb3JtYXR0ZXIsIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlciwgbG9uZ0Zvcm1hdHRlcnM7CnZhciBpbml0X2xvbmdGb3JtYXR0ZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzLmpzIigpIHsKICAgIGRhdGVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcyKSA9PiB7CiAgICAgIHN3aXRjaCAocGF0dGVybikgewogICAgICAgIGNhc2UgIlAiOgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLmRhdGUoeyB3aWR0aDogInNob3J0IiB9KTsKICAgICAgICBjYXNlICJQUCI6CiAgICAgICAgICByZXR1cm4gZm9ybWF0TG9uZzIuZGF0ZSh7IHdpZHRoOiAibWVkaXVtIiB9KTsKICAgICAgICBjYXNlICJQUFAiOgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLmRhdGUoeyB3aWR0aDogImxvbmciIH0pOwogICAgICAgIGNhc2UgIlBQUFAiOgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gZm9ybWF0TG9uZzIuZGF0ZSh7IHdpZHRoOiAiZnVsbCIgfSk7CiAgICAgIH0KICAgIH07CiAgICB0aW1lTG9uZ0Zvcm1hdHRlciA9IChwYXR0ZXJuLCBmb3JtYXRMb25nMikgPT4gewogICAgICBzd2l0Y2ggKHBhdHRlcm4pIHsKICAgICAgICBjYXNlICJwIjoKICAgICAgICAgIHJldHVybiBmb3JtYXRMb25nMi50aW1lKHsgd2lkdGg6ICJzaG9ydCIgfSk7CiAgICAgICAgY2FzZSAicHAiOgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLnRpbWUoeyB3aWR0aDogIm1lZGl1bSIgfSk7CiAgICAgICAgY2FzZSAicHBwIjoKICAgICAgICAgIHJldHVybiBmb3JtYXRMb25nMi50aW1lKHsgd2lkdGg6ICJsb25nIiB9KTsKICAgICAgICBjYXNlICJwcHBwIjoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLnRpbWUoeyB3aWR0aDogImZ1bGwiIH0pOwogICAgICB9CiAgICB9OwogICAgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcyKSA9PiB7CiAgICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107CiAgICAgIGNvbnN0IGRhdGVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMV07CiAgICAgIGNvbnN0IHRpbWVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMl07CiAgICAgIGlmICghdGltZVBhdHRlcm4pIHsKICAgICAgICByZXR1cm4gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZzIpOwogICAgICB9CiAgICAgIGxldCBkYXRlVGltZUZvcm1hdDsKICAgICAgc3dpdGNoIChkYXRlUGF0dGVybikgewogICAgICAgIGNhc2UgIlAiOgogICAgICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nMi5kYXRlVGltZSh7IHdpZHRoOiAic2hvcnQiIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiUFAiOgogICAgICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nMi5kYXRlVGltZSh7IHdpZHRoOiAibWVkaXVtIiB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlBQUCI6CiAgICAgICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcyLmRhdGVUaW1lKHsgd2lkdGg6ICJsb25nIiB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlBQUFAiOgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcyLmRhdGVUaW1lKHsgd2lkdGg6ICJmdWxsIiB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHJldHVybiBkYXRlVGltZUZvcm1hdC5yZXBsYWNlKCJ7e2RhdGV9fSIsIGRhdGVMb25nRm9ybWF0dGVyKGRhdGVQYXR0ZXJuLCBmb3JtYXRMb25nMikpLnJlcGxhY2UoInt7dGltZX19IiwgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcyKSk7CiAgICB9OwogICAgbG9uZ0Zvcm1hdHRlcnMgPSB7CiAgICAgIHA6IHRpbWVMb25nRm9ybWF0dGVyLAogICAgICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXIKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9wcm90ZWN0ZWRUb2tlbnMuanMKZnVuY3Rpb24gaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbih0b2tlbikgewogIHJldHVybiBkYXlPZlllYXJUb2tlblJFLnRlc3QodG9rZW4pOwp9CmZ1bmN0aW9uIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikgewogIHJldHVybiB3ZWVrWWVhclRva2VuUkUudGVzdCh0b2tlbik7Cn0KZnVuY3Rpb24gd2Fybk9yVGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0MiwgaW5wdXQpIHsKICBjb25zdCBfbWVzc2FnZSA9IG1lc3NhZ2UodG9rZW4sIGZvcm1hdDIsIGlucHV0KTsKICBjb25zb2xlLndhcm4oX21lc3NhZ2UpOwogIGlmICh0aHJvd1Rva2Vucy5pbmNsdWRlcyh0b2tlbikpIHRocm93IG5ldyBSYW5nZUVycm9yKF9tZXNzYWdlKTsKfQpmdW5jdGlvbiBtZXNzYWdlKHRva2VuLCBmb3JtYXQyLCBpbnB1dCkgewogIGNvbnN0IHN1YmplY3QgPSB0b2tlblswXSA9PT0gIlkiID8gInllYXJzIiA6ICJkYXlzIG9mIHRoZSBtb250aCI7CiAgcmV0dXJuIGBVc2UgXGAke3Rva2VuLnRvTG93ZXJDYXNlKCl9XGAgaW5zdGVhZCBvZiBcYCR7dG9rZW59XGAgKGluIFxgJHtmb3JtYXQyfVxgKSBmb3IgZm9ybWF0dGluZyAke3N1YmplY3R9IHRvIHRoZSBpbnB1dCBcYCR7aW5wdXR9XGA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZGA7Cn0KdmFyIGRheU9mWWVhclRva2VuUkUsIHdlZWtZZWFyVG9rZW5SRSwgdGhyb3dUb2tlbnM7CnZhciBpbml0X3Byb3RlY3RlZFRva2VucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL3Byb3RlY3RlZFRva2Vucy5qcyIoKSB7CiAgICBkYXlPZlllYXJUb2tlblJFID0gL15EKyQvOwogICAgd2Vla1llYXJUb2tlblJFID0gL15ZKyQvOwogICAgdGhyb3dUb2tlbnMgPSBbIkQiLCAiREQiLCAiWVkiLCAiWVlZWSJdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdC5qcwpmdW5jdGlvbiBmb3JtYXQoZGF0ZSwgZm9ybWF0U3RyLCBvcHRpb25zKSB7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZSA/PyBlblVTOwogIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBkZWZhdWx0T3B0aW9uczIuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyAxOwogIGNvbnN0IHdlZWtTdGFydHNPbiA9IG9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwOwogIGNvbnN0IG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKCFpc1ZhbGlkKG9yaWdpbmFsRGF0ZSkpIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTsKICB9CiAgbGV0IHBhcnRzID0gZm9ybWF0U3RyLm1hdGNoKGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoKHN1YnN0cmluZykgPT4gewogICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07CiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICJwIiB8fCBmaXJzdENoYXJhY3RlciA9PT0gIlAiKSB7CiAgICAgIGNvbnN0IGxvbmdGb3JtYXR0ZXIgPSBsb25nRm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07CiAgICAgIHJldHVybiBsb25nRm9ybWF0dGVyKHN1YnN0cmluZywgbG9jYWxlLmZvcm1hdExvbmcpOwogICAgfQogICAgcmV0dXJuIHN1YnN0cmluZzsKICB9KS5qb2luKCIiKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoKHN1YnN0cmluZykgPT4gewogICAgaWYgKHN1YnN0cmluZyA9PT0gIicnIikgewogICAgICByZXR1cm4geyBpc1Rva2VuOiBmYWxzZSwgdmFsdWU6ICInIiB9OwogICAgfQogICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07CiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICInIikgewogICAgICByZXR1cm4geyBpc1Rva2VuOiBmYWxzZSwgdmFsdWU6IGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpIH07CiAgICB9CiAgICBpZiAoZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl0pIHsKICAgICAgcmV0dXJuIHsgaXNUb2tlbjogdHJ1ZSwgdmFsdWU6IHN1YnN0cmluZyB9OwogICAgfQogICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigKICAgICAgICAiRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGAiICsgZmlyc3RDaGFyYWN0ZXIgKyAiYCIKICAgICAgKTsKICAgIH0KICAgIHJldHVybiB7IGlzVG9rZW46IGZhbHNlLCB2YWx1ZTogc3Vic3RyaW5nIH07CiAgfSk7CiAgaWYgKGxvY2FsZS5sb2NhbGl6ZS5wcmVwcm9jZXNzb3IpIHsKICAgIHBhcnRzID0gbG9jYWxlLmxvY2FsaXplLnByZXByb2Nlc3NvcihvcmlnaW5hbERhdGUsIHBhcnRzKTsKICB9CiAgY29uc3QgZm9ybWF0dGVyT3B0aW9ucyA9IHsKICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSwKICAgIHdlZWtTdGFydHNPbiwKICAgIGxvY2FsZQogIH07CiAgcmV0dXJuIHBhcnRzLm1hcCgocGFydCkgPT4gewogICAgaWYgKCFwYXJ0LmlzVG9rZW4pIHJldHVybiBwYXJ0LnZhbHVlOwogICAgY29uc3QgdG9rZW4gPSBwYXJ0LnZhbHVlOwogICAgaWYgKCFvcHRpb25zPy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMgJiYgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB8fCAhb3B0aW9ucz8udXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucyAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSkgewogICAgICB3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXRTdHIsIFN0cmluZyhkYXRlKSk7CiAgICB9CiAgICBjb25zdCBmb3JtYXR0ZXIyID0gZm9ybWF0dGVyc1t0b2tlblswXV07CiAgICByZXR1cm4gZm9ybWF0dGVyMihvcmlnaW5hbERhdGUsIHRva2VuLCBsb2NhbGUubG9jYWxpemUsIGZvcm1hdHRlck9wdGlvbnMpOwogIH0pLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIGNsZWFuRXNjYXBlZFN0cmluZyhpbnB1dCkgewogIGNvbnN0IG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTsKICBpZiAoIW1hdGNoZWQpIHsKICAgIHJldHVybiBpbnB1dDsKICB9CiAgcmV0dXJuIG1hdGNoZWRbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cCwgIiciKTsKfQp2YXIgZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCwgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAsIGVzY2FwZWRTdHJpbmdSZWdFeHAsIGRvdWJsZVF1b3RlUmVnRXhwLCB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCwgZm9ybWF0X2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXQuanMiKCkgewogICAgaW5pdF9kZWZhdWx0TG9jYWxlKCk7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X2Zvcm1hdHRlcnMoKTsKICAgIGluaXRfbG9uZ0Zvcm1hdHRlcnMoKTsKICAgIGluaXRfcHJvdGVjdGVkVG9rZW5zKCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFx3KVwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZzsKICAgIGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1ArcCt8UCt8cCt8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7CiAgICBlc2NhcGVkU3RyaW5nUmVnRXhwID0gL14nKFteXSo/KSc/JC87CiAgICBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nOwogICAgdW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAgPSAvW2EtekEtWl0vOwogICAgZm9ybWF0X2RlZmF1bHQgPSBmb3JtYXQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RGlzdGFuY2UuanMKZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2UyKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IGxvY2FsZSA9IG9wdGlvbnM/LmxvY2FsZSA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlID8/IGVuVVM7CiAgY29uc3QgbWludXRlc0luQWxtb3N0VHdvRGF5cyA9IDI1MjA7CiAgY29uc3QgY29tcGFyaXNvbiA9IGNvbXBhcmVBc2MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSk7CiAgaWYgKGlzTmFOKGNvbXBhcmlzb24pKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgY29uc3QgbG9jYWxpemVPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgewogICAgYWRkU3VmZml4OiBvcHRpb25zPy5hZGRTdWZmaXgsCiAgICBjb21wYXJpc29uCiAgfSk7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgLi4uY29tcGFyaXNvbiA+IDAgPyBbZWFybGllckRhdGUsIGxhdGVyRGF0ZV0gOiBbbGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZV0KICApOwogIGNvbnN0IHNlY29uZHMgPSBkaWZmZXJlbmNlSW5TZWNvbmRzKGVhcmxpZXJEYXRlXywgbGF0ZXJEYXRlXyk7CiAgY29uc3Qgb2Zmc2V0SW5TZWNvbmRzID0gKGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZWFybGllckRhdGVfKSAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMobGF0ZXJEYXRlXykpIC8gMWUzOwogIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLnJvdW5kKChzZWNvbmRzIC0gb2Zmc2V0SW5TZWNvbmRzKSAvIDYwKTsKICBsZXQgbW9udGhzMjsKICBpZiAobWludXRlcyA8IDIpIHsKICAgIGlmIChvcHRpb25zPy5pbmNsdWRlU2Vjb25kcykgewogICAgICBpZiAoc2Vjb25kcyA8IDUpIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhTZWNvbmRzIiwgNSwgbG9jYWxpemVPcHRpb25zKTsKICAgICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgMTApIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhTZWNvbmRzIiwgMTAsIGxvY2FsaXplT3B0aW9ucyk7CiAgICAgIH0gZWxzZSBpZiAoc2Vjb25kcyA8IDIwKSB7CiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgibGVzc1RoYW5YU2Vjb25kcyIsIDIwLCBsb2NhbGl6ZU9wdGlvbnMpOwogICAgICB9IGVsc2UgaWYgKHNlY29uZHMgPCA0MCkgewogICAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoImhhbGZBTWludXRlIiwgMCwgbG9jYWxpemVPcHRpb25zKTsKICAgICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgNjApIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhNaW51dGVzIiwgMSwgbG9jYWxpemVPcHRpb25zKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4TWludXRlcyIsIDEsIGxvY2FsaXplT3B0aW9ucyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChtaW51dGVzID09PSAwKSB7CiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgibGVzc1RoYW5YTWludXRlcyIsIDEsIGxvY2FsaXplT3B0aW9ucyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieE1pbnV0ZXMiLCBtaW51dGVzLCBsb2NhbGl6ZU9wdGlvbnMpOwogICAgICB9CiAgICB9CiAgfSBlbHNlIGlmIChtaW51dGVzIDwgNDUpIHsKICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoInhNaW51dGVzIiwgbWludXRlcywgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCA5MCkgewogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgiYWJvdXRYSG91cnMiLCAxLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbkRheSkgewogICAgY29uc3QgaG91cnMgPSBNYXRoLnJvdW5kKG1pbnV0ZXMgLyA2MCk7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJhYm91dFhIb3VycyIsIGhvdXJzLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbkFsbW9zdFR3b0RheXMpIHsKICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoInhEYXlzIiwgMSwgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCBtaW51dGVzSW5Nb250aCkgewogICAgY29uc3QgZGF5czIgPSBNYXRoLnJvdW5kKG1pbnV0ZXMgLyBtaW51dGVzSW5EYXkpOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieERheXMiLCBkYXlzMiwgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCBtaW51dGVzSW5Nb250aCAqIDIpIHsKICAgIG1vbnRoczIgPSBNYXRoLnJvdW5kKG1pbnV0ZXMgLyBtaW51dGVzSW5Nb250aCk7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJhYm91dFhNb250aHMiLCBtb250aHMyLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0KICBtb250aHMyID0gZGlmZmVyZW5jZUluTW9udGhzKGVhcmxpZXJEYXRlXywgbGF0ZXJEYXRlXyk7CiAgaWYgKG1vbnRoczIgPCAxMikgewogICAgY29uc3QgbmVhcmVzdE1vbnRoID0gTWF0aC5yb3VuZChtaW51dGVzIC8gbWludXRlc0luTW9udGgpOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieE1vbnRocyIsIG5lYXJlc3RNb250aCwgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgewogICAgY29uc3QgbW9udGhzU2luY2VTdGFydE9mWWVhciA9IG1vbnRoczIgJSAxMjsKICAgIGNvbnN0IHllYXJzID0gTWF0aC50cnVuYyhtb250aHMyIC8gMTIpOwogICAgaWYgKG1vbnRoc1NpbmNlU3RhcnRPZlllYXIgPCAzKSB7CiAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoImFib3V0WFllYXJzIiwgeWVhcnMsIGxvY2FsaXplT3B0aW9ucyk7CiAgICB9IGVsc2UgaWYgKG1vbnRoc1NpbmNlU3RhcnRPZlllYXIgPCA5KSB7CiAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoIm92ZXJYWWVhcnMiLCB5ZWFycywgbG9jYWxpemVPcHRpb25zKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoImFsbW9zdFhZZWFycyIsIHllYXJzICsgMSwgbG9jYWxpemVPcHRpb25zKTsKICAgIH0KICB9Cn0KdmFyIGZvcm1hdERpc3RhbmNlX2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdERpc3RhbmNlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREaXN0YW5jZS5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRMb2NhbGUoKTsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb21wYXJlQXNjKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5Nb250aHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluU2Vjb25kcygpOwogICAgZm9ybWF0RGlzdGFuY2VfZGVmYXVsdCA9IGZvcm1hdERpc3RhbmNlMjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREaXN0YW5jZVN0cmljdC5qcwpmdW5jdGlvbiBmb3JtYXREaXN0YW5jZVN0cmljdChsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZSA/PyBlblVTOwogIGNvbnN0IGNvbXBhcmlzb24gPSBjb21wYXJlQXNjKGxhdGVyRGF0ZSwgZWFybGllckRhdGUpOwogIGlmIChpc05hTihjb21wYXJpc29uKSkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpOwogIH0KICBjb25zdCBsb2NhbGl6ZU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7CiAgICBhZGRTdWZmaXg6IG9wdGlvbnM/LmFkZFN1ZmZpeCwKICAgIGNvbXBhcmlzb24KICB9KTsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICAuLi5jb21wYXJpc29uID4gMCA/IFtlYXJsaWVyRGF0ZSwgbGF0ZXJEYXRlXSA6IFtsYXRlckRhdGUsIGVhcmxpZXJEYXRlXQogICk7CiAgY29uc3Qgcm91bmRpbmdNZXRob2QgPSBnZXRSb3VuZGluZ01ldGhvZChvcHRpb25zPy5yb3VuZGluZ01ldGhvZCA/PyAicm91bmQiKTsKICBjb25zdCBtaWxsaXNlY29uZHMyID0gZWFybGllckRhdGVfLmdldFRpbWUoKSAtIGxhdGVyRGF0ZV8uZ2V0VGltZSgpOwogIGNvbnN0IG1pbnV0ZXMgPSBtaWxsaXNlY29uZHMyIC8gbWlsbGlzZWNvbmRzSW5NaW51dGU7CiAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGVhcmxpZXJEYXRlXykgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGxhdGVyRGF0ZV8pOwogIGNvbnN0IGRzdE5vcm1hbGl6ZWRNaW51dGVzID0gKG1pbGxpc2Vjb25kczIgLSB0aW1lem9uZU9mZnNldCkgLyBtaWxsaXNlY29uZHNJbk1pbnV0ZTsKICBjb25zdCBkZWZhdWx0VW5pdCA9IG9wdGlvbnM/LnVuaXQ7CiAgbGV0IHVuaXQ7CiAgaWYgKCFkZWZhdWx0VW5pdCkgewogICAgaWYgKG1pbnV0ZXMgPCAxKSB7CiAgICAgIHVuaXQgPSAic2Vjb25kIjsKICAgIH0gZWxzZSBpZiAobWludXRlcyA8IDYwKSB7CiAgICAgIHVuaXQgPSAibWludXRlIjsKICAgIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbkRheSkgewogICAgICB1bml0ID0gImhvdXIiOwogICAgfSBlbHNlIGlmIChkc3ROb3JtYWxpemVkTWludXRlcyA8IG1pbnV0ZXNJbk1vbnRoKSB7CiAgICAgIHVuaXQgPSAiZGF5IjsKICAgIH0gZWxzZSBpZiAoZHN0Tm9ybWFsaXplZE1pbnV0ZXMgPCBtaW51dGVzSW5ZZWFyKSB7CiAgICAgIHVuaXQgPSAibW9udGgiOwogICAgfSBlbHNlIHsKICAgICAgdW5pdCA9ICJ5ZWFyIjsKICAgIH0KICB9IGVsc2UgewogICAgdW5pdCA9IGRlZmF1bHRVbml0OwogIH0KICBpZiAodW5pdCA9PT0gInNlY29uZCIpIHsKICAgIGNvbnN0IHNlY29uZHMgPSByb3VuZGluZ01ldGhvZChtaWxsaXNlY29uZHMyIC8gMWUzKTsKICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoInhTZWNvbmRzIiwgc2Vjb25kcywgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKHVuaXQgPT09ICJtaW51dGUiKSB7CiAgICBjb25zdCByb3VuZGVkTWludXRlcyA9IHJvdW5kaW5nTWV0aG9kKG1pbnV0ZXMpOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieE1pbnV0ZXMiLCByb3VuZGVkTWludXRlcywgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKHVuaXQgPT09ICJob3VyIikgewogICAgY29uc3QgaG91cnMgPSByb3VuZGluZ01ldGhvZChtaW51dGVzIC8gNjApOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieEhvdXJzIiwgaG91cnMsIGxvY2FsaXplT3B0aW9ucyk7CiAgfSBlbHNlIGlmICh1bml0ID09PSAiZGF5IikgewogICAgY29uc3QgZGF5czIgPSByb3VuZGluZ01ldGhvZChkc3ROb3JtYWxpemVkTWludXRlcyAvIG1pbnV0ZXNJbkRheSk7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4RGF5cyIsIGRheXMyLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSBpZiAodW5pdCA9PT0gIm1vbnRoIikgewogICAgY29uc3QgbW9udGhzMiA9IHJvdW5kaW5nTWV0aG9kKGRzdE5vcm1hbGl6ZWRNaW51dGVzIC8gbWludXRlc0luTW9udGgpOwogICAgcmV0dXJuIG1vbnRoczIgPT09IDEyICYmIGRlZmF1bHRVbml0ICE9PSAibW9udGgiID8gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4WWVhcnMiLCAxLCBsb2NhbGl6ZU9wdGlvbnMpIDogbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4TW9udGhzIiwgbW9udGhzMiwgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgewogICAgY29uc3QgeWVhcnMgPSByb3VuZGluZ01ldGhvZChkc3ROb3JtYWxpemVkTWludXRlcyAvIG1pbnV0ZXNJblllYXIpOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieFllYXJzIiwgeWVhcnMsIGxvY2FsaXplT3B0aW9ucyk7CiAgfQp9CnZhciBmb3JtYXREaXN0YW5jZVN0cmljdF9kZWZhdWx0Owp2YXIgaW5pdF9mb3JtYXREaXN0YW5jZVN0cmljdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREaXN0YW5jZVN0cmljdC5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRMb2NhbGUoKTsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfZ2V0Um91bmRpbmdNZXRob2QoKTsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb21wYXJlQXNjKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgZm9ybWF0RGlzdGFuY2VTdHJpY3RfZGVmYXVsdCA9IGZvcm1hdERpc3RhbmNlU3RyaWN0OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdERpc3RhbmNlVG9Ob3cuanMKZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2VUb05vdyhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGZvcm1hdERpc3RhbmNlMihkYXRlLCBjb25zdHJ1Y3ROb3coZGF0ZSksIG9wdGlvbnMpOwp9CnZhciBmb3JtYXREaXN0YW5jZVRvTm93X2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdERpc3RhbmNlVG9Ob3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RGlzdGFuY2VUb05vdy5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9mb3JtYXREaXN0YW5jZTIoKTsKICAgIGZvcm1hdERpc3RhbmNlVG9Ob3dfZGVmYXVsdCA9IGZvcm1hdERpc3RhbmNlVG9Ob3c7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RGlzdGFuY2VUb05vd1N0cmljdC5qcwpmdW5jdGlvbiBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gZm9ybWF0RGlzdGFuY2VTdHJpY3QoZGF0ZSwgY29uc3RydWN0Tm93KGRhdGUpLCBvcHRpb25zKTsKfQp2YXIgZm9ybWF0RGlzdGFuY2VUb05vd1N0cmljdF9kZWZhdWx0Owp2YXIgaW5pdF9mb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3QuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfZm9ybWF0RGlzdGFuY2VTdHJpY3QoKTsKICAgIGZvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3RfZGVmYXVsdCA9IGZvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3Q7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RHVyYXRpb24uanMKZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24oZHVyYXRpb24sIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IGxvY2FsZSA9IG9wdGlvbnM/LmxvY2FsZSA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlID8/IGVuVVM7CiAgY29uc3QgZm9ybWF0MiA9IG9wdGlvbnM/LmZvcm1hdCA/PyBkZWZhdWx0Rm9ybWF0OwogIGNvbnN0IHplcm8gPSBvcHRpb25zPy56ZXJvID8/IGZhbHNlOwogIGNvbnN0IGRlbGltaXRlciA9IG9wdGlvbnM/LmRlbGltaXRlciA/PyAiICI7CiAgaWYgKCFsb2NhbGUuZm9ybWF0RGlzdGFuY2UpIHsKICAgIHJldHVybiAiIjsKICB9CiAgY29uc3QgcmVzdWx0ID0gZm9ybWF0Mi5yZWR1Y2UoKGFjYywgdW5pdCkgPT4gewogICAgY29uc3QgdG9rZW4gPSBgeCR7dW5pdC5yZXBsYWNlKC8oXi4pLywgKG02KSA9PiBtNi50b1VwcGVyQ2FzZSgpKX1gOwogICAgY29uc3QgdmFsdWUyID0gZHVyYXRpb25bdW5pdF07CiAgICBpZiAodmFsdWUyICE9PSB2b2lkIDAgJiYgKHplcm8gfHwgZHVyYXRpb25bdW5pdF0pKSB7CiAgICAgIHJldHVybiBhY2MuY29uY2F0KGxvY2FsZS5mb3JtYXREaXN0YW5jZSh0b2tlbiwgdmFsdWUyKSk7CiAgICB9CiAgICByZXR1cm4gYWNjOwogIH0sIFtdKS5qb2luKGRlbGltaXRlcik7CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgZGVmYXVsdEZvcm1hdCwgZm9ybWF0RHVyYXRpb25fZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0RHVyYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RHVyYXRpb24uanMiKCkgewogICAgaW5pdF9kZWZhdWx0TG9jYWxlKCk7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBkZWZhdWx0Rm9ybWF0ID0gWwogICAgICAieWVhcnMiLAogICAgICAibW9udGhzIiwKICAgICAgIndlZWtzIiwKICAgICAgImRheXMiLAogICAgICAiaG91cnMiLAogICAgICAibWludXRlcyIsCiAgICAgICJzZWNvbmRzIgogICAgXTsKICAgIGZvcm1hdER1cmF0aW9uX2RlZmF1bHQgPSBmb3JtYXREdXJhdGlvbjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRJU08uanMKZnVuY3Rpb24gZm9ybWF0SVNPKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKGlzTmFOKCtkYXRlXykpIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTsKICB9CiAgY29uc3QgZm9ybWF0MiA9IG9wdGlvbnM/LmZvcm1hdCA/PyAiZXh0ZW5kZWQiOwogIGNvbnN0IHJlcHJlc2VudGF0aW9uID0gb3B0aW9ucz8ucmVwcmVzZW50YXRpb24gPz8gImNvbXBsZXRlIjsKICBsZXQgcmVzdWx0ID0gIiI7CiAgbGV0IHR6T2Zmc2V0ID0gIiI7CiAgY29uc3QgZGF0ZURlbGltaXRlciA9IGZvcm1hdDIgPT09ICJleHRlbmRlZCIgPyAiLSIgOiAiIjsKICBjb25zdCB0aW1lRGVsaW1pdGVyID0gZm9ybWF0MiA9PT0gImV4dGVuZGVkIiA/ICI6IiA6ICIiOwogIGlmIChyZXByZXNlbnRhdGlvbiAhPT0gInRpbWUiKSB7CiAgICBjb25zdCBkYXkgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0RGF0ZSgpLCAyKTsKICAgIGNvbnN0IG1vbnRoID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldE1vbnRoKCkgKyAxLCAyKTsKICAgIGNvbnN0IHllYXIgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0RnVsbFllYXIoKSwgNCk7CiAgICByZXN1bHQgPSBgJHt5ZWFyfSR7ZGF0ZURlbGltaXRlcn0ke21vbnRofSR7ZGF0ZURlbGltaXRlcn0ke2RheX1gOwogIH0KICBpZiAocmVwcmVzZW50YXRpb24gIT09ICJkYXRlIikgewogICAgY29uc3Qgb2Zmc2V0ID0gZGF0ZV8uZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgIGlmIChvZmZzZXQgIT09IDApIHsKICAgICAgY29uc3QgYWJzb2x1dGVPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpOwogICAgICBjb25zdCBob3VyT2Zmc2V0ID0gYWRkTGVhZGluZ1plcm9zKE1hdGgudHJ1bmMoYWJzb2x1dGVPZmZzZXQgLyA2MCksIDIpOwogICAgICBjb25zdCBtaW51dGVPZmZzZXQgPSBhZGRMZWFkaW5nWmVyb3MoYWJzb2x1dGVPZmZzZXQgJSA2MCwgMik7CiAgICAgIGNvbnN0IHNpZ24gPSBvZmZzZXQgPCAwID8gIisiIDogIi0iOwogICAgICB0ek9mZnNldCA9IGAke3NpZ259JHtob3VyT2Zmc2V0fToke21pbnV0ZU9mZnNldH1gOwogICAgfSBlbHNlIHsKICAgICAgdHpPZmZzZXQgPSAiWiI7CiAgICB9CiAgICBjb25zdCBob3VyID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldEhvdXJzKCksIDIpOwogICAgY29uc3QgbWludXRlID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldE1pbnV0ZXMoKSwgMik7CiAgICBjb25zdCBzZWNvbmQgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0U2Vjb25kcygpLCAyKTsKICAgIGNvbnN0IHNlcGFyYXRvciA9IHJlc3VsdCA9PT0gIiIgPyAiIiA6ICJUIjsKICAgIGNvbnN0IHRpbWUgPSBbaG91ciwgbWludXRlLCBzZWNvbmRdLmpvaW4odGltZURlbGltaXRlcik7CiAgICByZXN1bHQgPSBgJHtyZXN1bHR9JHtzZXBhcmF0b3J9JHt0aW1lfSR7dHpPZmZzZXR9YDsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgZm9ybWF0SVNPX2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdElTTyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRJU08uanMiKCkgewogICAgaW5pdF9hZGRMZWFkaW5nWmVyb3MoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXRJU09fZGVmYXVsdCA9IGZvcm1hdElTTzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRJU085MDc1LmpzCmZ1bmN0aW9uIGZvcm1hdElTTzkwNzUoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoIWlzVmFsaWQoZGF0ZV8pKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgfQogIGNvbnN0IGZvcm1hdDIgPSBvcHRpb25zPy5mb3JtYXQgPz8gImV4dGVuZGVkIjsKICBjb25zdCByZXByZXNlbnRhdGlvbiA9IG9wdGlvbnM/LnJlcHJlc2VudGF0aW9uID8/ICJjb21wbGV0ZSI7CiAgbGV0IHJlc3VsdCA9ICIiOwogIGNvbnN0IGRhdGVEZWxpbWl0ZXIgPSBmb3JtYXQyID09PSAiZXh0ZW5kZWQiID8gIi0iIDogIiI7CiAgY29uc3QgdGltZURlbGltaXRlciA9IGZvcm1hdDIgPT09ICJleHRlbmRlZCIgPyAiOiIgOiAiIjsKICBpZiAocmVwcmVzZW50YXRpb24gIT09ICJ0aW1lIikgewogICAgY29uc3QgZGF5ID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldERhdGUoKSwgMik7CiAgICBjb25zdCBtb250aCA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRNb250aCgpICsgMSwgMik7CiAgICBjb25zdCB5ZWFyID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldEZ1bGxZZWFyKCksIDQpOwogICAgcmVzdWx0ID0gYCR7eWVhcn0ke2RhdGVEZWxpbWl0ZXJ9JHttb250aH0ke2RhdGVEZWxpbWl0ZXJ9JHtkYXl9YDsKICB9CiAgaWYgKHJlcHJlc2VudGF0aW9uICE9PSAiZGF0ZSIpIHsKICAgIGNvbnN0IGhvdXIgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0SG91cnMoKSwgMik7CiAgICBjb25zdCBtaW51dGUgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0TWludXRlcygpLCAyKTsKICAgIGNvbnN0IHNlY29uZCA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRTZWNvbmRzKCksIDIpOwogICAgY29uc3Qgc2VwYXJhdG9yID0gcmVzdWx0ID09PSAiIiA/ICIiIDogIiAiOwogICAgcmVzdWx0ID0gYCR7cmVzdWx0fSR7c2VwYXJhdG9yfSR7aG91cn0ke3RpbWVEZWxpbWl0ZXJ9JHttaW51dGV9JHt0aW1lRGVsaW1pdGVyfSR7c2Vjb25kfWA7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KdmFyIGZvcm1hdElTTzkwNzVfZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0SVNPOTA3NSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRJU085MDc1LmpzIigpIHsKICAgIGluaXRfYWRkTGVhZGluZ1plcm9zKCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXRJU085MDc1X2RlZmF1bHQgPSBmb3JtYXRJU085MDc1OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdElTT0R1cmF0aW9uLmpzCmZ1bmN0aW9uIGZvcm1hdElTT0R1cmF0aW9uKGR1cmF0aW9uKSB7CiAgY29uc3QgewogICAgeWVhcnMgPSAwLAogICAgbW9udGhzOiBtb250aHMyID0gMCwKICAgIGRheXM6IGRheXMyID0gMCwKICAgIGhvdXJzID0gMCwKICAgIG1pbnV0ZXMgPSAwLAogICAgc2Vjb25kcyA9IDAKICB9ID0gZHVyYXRpb247CiAgcmV0dXJuIGBQJHt5ZWFyc31ZJHttb250aHMyfU0ke2RheXMyfURUJHtob3Vyc31IJHttaW51dGVzfU0ke3NlY29uZHN9U2A7Cn0KdmFyIGZvcm1hdElTT0R1cmF0aW9uX2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdElTT0R1cmF0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdElTT0R1cmF0aW9uLmpzIigpIHsKICAgIGZvcm1hdElTT0R1cmF0aW9uX2RlZmF1bHQgPSBmb3JtYXRJU09EdXJhdGlvbjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRSRkMzMzM5LmpzCmZ1bmN0aW9uIGZvcm1hdFJGQzMzMzkoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoIWlzVmFsaWQoZGF0ZV8pKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgfQogIGNvbnN0IGZyYWN0aW9uRGlnaXRzID0gb3B0aW9ucz8uZnJhY3Rpb25EaWdpdHMgPz8gMDsKICBjb25zdCBkYXkgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0RGF0ZSgpLCAyKTsKICBjb25zdCBtb250aCA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRNb250aCgpICsgMSwgMik7CiAgY29uc3QgeWVhciA9IGRhdGVfLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgaG91ciA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRIb3VycygpLCAyKTsKICBjb25zdCBtaW51dGUgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0TWludXRlcygpLCAyKTsKICBjb25zdCBzZWNvbmQgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0U2Vjb25kcygpLCAyKTsKICBsZXQgZnJhY3Rpb25hbFNlY29uZCA9ICIiOwogIGlmIChmcmFjdGlvbkRpZ2l0cyA+IDApIHsKICAgIGNvbnN0IG1pbGxpc2Vjb25kczIgPSBkYXRlXy5nZXRNaWxsaXNlY29uZHMoKTsKICAgIGNvbnN0IGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC50cnVuYygKICAgICAgbWlsbGlzZWNvbmRzMiAqIE1hdGgucG93KDEwLCBmcmFjdGlvbkRpZ2l0cyAtIDMpCiAgICApOwogICAgZnJhY3Rpb25hbFNlY29uZCA9ICIuIiArIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgZnJhY3Rpb25EaWdpdHMpOwogIH0KICBsZXQgb2Zmc2V0ID0gIiI7CiAgY29uc3QgdHpPZmZzZXQgPSBkYXRlXy5nZXRUaW1lem9uZU9mZnNldCgpOwogIGlmICh0ek9mZnNldCAhPT0gMCkgewogICAgY29uc3QgYWJzb2x1dGVPZmZzZXQgPSBNYXRoLmFicyh0ek9mZnNldCk7CiAgICBjb25zdCBob3VyT2Zmc2V0ID0gYWRkTGVhZGluZ1plcm9zKE1hdGgudHJ1bmMoYWJzb2x1dGVPZmZzZXQgLyA2MCksIDIpOwogICAgY29uc3QgbWludXRlT2Zmc2V0ID0gYWRkTGVhZGluZ1plcm9zKGFic29sdXRlT2Zmc2V0ICUgNjAsIDIpOwogICAgY29uc3Qgc2lnbiA9IHR6T2Zmc2V0IDwgMCA/ICIrIiA6ICItIjsKICAgIG9mZnNldCA9IGAke3NpZ259JHtob3VyT2Zmc2V0fToke21pbnV0ZU9mZnNldH1gOwogIH0gZWxzZSB7CiAgICBvZmZzZXQgPSAiWiI7CiAgfQogIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1UJHtob3VyfToke21pbnV0ZX06JHtzZWNvbmR9JHtmcmFjdGlvbmFsU2Vjb25kfSR7b2Zmc2V0fWA7Cn0KdmFyIGZvcm1hdFJGQzMzMzlfZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0UkZDMzMzOSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRSRkMzMzM5LmpzIigpIHsKICAgIGluaXRfYWRkTGVhZGluZ1plcm9zKCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXRSRkMzMzM5X2RlZmF1bHQgPSBmb3JtYXRSRkMzMzM5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdFJGQzcyMzEuanMKZnVuY3Rpb24gZm9ybWF0UkZDNzIzMShkYXRlKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSk7CiAgaWYgKCFpc1ZhbGlkKF9kYXRlKSkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpOwogIH0KICBjb25zdCBkYXlOYW1lID0gZGF5c1tfZGF0ZS5nZXRVVENEYXkoKV07CiAgY29uc3QgZGF5T2ZNb250aCA9IGFkZExlYWRpbmdaZXJvcyhfZGF0ZS5nZXRVVENEYXRlKCksIDIpOwogIGNvbnN0IG1vbnRoTmFtZSA9IG1vbnRoc1tfZGF0ZS5nZXRVVENNb250aCgpXTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0VVRDRnVsbFllYXIoKTsKICBjb25zdCBob3VyID0gYWRkTGVhZGluZ1plcm9zKF9kYXRlLmdldFVUQ0hvdXJzKCksIDIpOwogIGNvbnN0IG1pbnV0ZSA9IGFkZExlYWRpbmdaZXJvcyhfZGF0ZS5nZXRVVENNaW51dGVzKCksIDIpOwogIGNvbnN0IHNlY29uZCA9IGFkZExlYWRpbmdaZXJvcyhfZGF0ZS5nZXRVVENTZWNvbmRzKCksIDIpOwogIHJldHVybiBgJHtkYXlOYW1lfSwgJHtkYXlPZk1vbnRofSAke21vbnRoTmFtZX0gJHt5ZWFyfSAke2hvdXJ9OiR7bWludXRlfToke3NlY29uZH0gR01UYDsKfQp2YXIgZGF5cywgbW9udGhzLCBmb3JtYXRSRkM3MjMxX2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdFJGQzcyMzEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0UkZDNzIzMS5qcyIoKSB7CiAgICBpbml0X2FkZExlYWRpbmdaZXJvcygpOwogICAgaW5pdF9pc1ZhbGlkKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZGF5cyA9IFsiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0Il07CiAgICBtb250aHMgPSBbCiAgICAgICJKYW4iLAogICAgICAiRmViIiwKICAgICAgIk1hciIsCiAgICAgICJBcHIiLAogICAgICAiTWF5IiwKICAgICAgIkp1biIsCiAgICAgICJKdWwiLAogICAgICAiQXVnIiwKICAgICAgIlNlcCIsCiAgICAgICJPY3QiLAogICAgICAiTm92IiwKICAgICAgIkRlYyIKICAgIF07CiAgICBmb3JtYXRSRkM3MjMxX2RlZmF1bHQgPSBmb3JtYXRSRkM3MjMxOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdFJlbGF0aXZlLmpzCmZ1bmN0aW9uIGZvcm1hdFJlbGF0aXZlMihkYXRlLCBiYXNlRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtkYXRlXywgYmFzZURhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKG9wdGlvbnM/LmluLCBkYXRlLCBiYXNlRGF0ZSk7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZSA/PyBlblVTOwogIGNvbnN0IHdlZWtTdGFydHNPbiA9IG9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwOwogIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZGF0ZV8sIGJhc2VEYXRlXyk7CiAgaWYgKGlzTmFOKGRpZmYpKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgfQogIGxldCB0b2tlbjsKICBpZiAoZGlmZiA8IC02KSB7CiAgICB0b2tlbiA9ICJvdGhlciI7CiAgfSBlbHNlIGlmIChkaWZmIDwgLTEpIHsKICAgIHRva2VuID0gImxhc3RXZWVrIjsKICB9IGVsc2UgaWYgKGRpZmYgPCAwKSB7CiAgICB0b2tlbiA9ICJ5ZXN0ZXJkYXkiOwogIH0gZWxzZSBpZiAoZGlmZiA8IDEpIHsKICAgIHRva2VuID0gInRvZGF5IjsKICB9IGVsc2UgaWYgKGRpZmYgPCAyKSB7CiAgICB0b2tlbiA9ICJ0b21vcnJvdyI7CiAgfSBlbHNlIGlmIChkaWZmIDwgNykgewogICAgdG9rZW4gPSAibmV4dFdlZWsiOwogIH0gZWxzZSB7CiAgICB0b2tlbiA9ICJvdGhlciI7CiAgfQogIGNvbnN0IGZvcm1hdFN0ciA9IGxvY2FsZS5mb3JtYXRSZWxhdGl2ZSh0b2tlbiwgZGF0ZV8sIGJhc2VEYXRlXywgewogICAgbG9jYWxlLAogICAgd2Vla1N0YXJ0c09uCiAgfSk7CiAgcmV0dXJuIGZvcm1hdChkYXRlXywgZm9ybWF0U3RyLCB7IGxvY2FsZSwgd2Vla1N0YXJ0c09uIH0pOwp9CnZhciBmb3JtYXRSZWxhdGl2ZV9kZWZhdWx0Owp2YXIgaW5pdF9mb3JtYXRSZWxhdGl2ZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0UmVsYXRpdmUuanMiKCkgewogICAgaW5pdF9kZWZhdWx0TG9jYWxlKCk7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9mb3JtYXQoKTsKICAgIGZvcm1hdFJlbGF0aXZlX2RlZmF1bHQgPSBmb3JtYXRSZWxhdGl2ZTI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZnJvbVVuaXhUaW1lLmpzCmZ1bmN0aW9uIGZyb21Vbml4VGltZSh1bml4VGltZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUodW5peFRpbWUgKiAxZTMsIG9wdGlvbnM/LmluKTsKfQp2YXIgZnJvbVVuaXhUaW1lX2RlZmF1bHQ7CnZhciBpbml0X2Zyb21Vbml4VGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mcm9tVW5peFRpbWUuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGZyb21Vbml4VGltZV9kZWZhdWx0ID0gZnJvbVVuaXhUaW1lOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERhdGUuanMKZnVuY3Rpb24gZ2V0RGF0ZShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF0ZSgpOwp9CnZhciBnZXREYXRlX2RlZmF1bHQ7CnZhciBpbml0X2dldERhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGF0ZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0RGF0ZV9kZWZhdWx0ID0gZ2V0RGF0ZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXkuanMKZnVuY3Rpb24gZ2V0RGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKTsKfQp2YXIgZ2V0RGF5X2RlZmF1bHQ7CnZhciBpbml0X2dldERheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldERheV9kZWZhdWx0ID0gZ2V0RGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERheXNJbk1vbnRoLmpzCmZ1bmN0aW9uIGdldERheXNJbk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgbW9udGhJbmRleCA9IF9kYXRlLmdldE1vbnRoKCk7CiAgY29uc3QgbGFzdERheU9mTW9udGgyID0gY29uc3RydWN0RnJvbShfZGF0ZSwgMCk7CiAgbGFzdERheU9mTW9udGgyLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoSW5kZXggKyAxLCAwKTsKICBsYXN0RGF5T2ZNb250aDIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIGxhc3REYXlPZk1vbnRoMi5nZXREYXRlKCk7Cn0KdmFyIGdldERheXNJbk1vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2dldERheXNJbk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERheXNJbk1vbnRoLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldERheXNJbk1vbnRoX2RlZmF1bHQgPSBnZXREYXlzSW5Nb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0xlYXBZZWFyLmpzCmZ1bmN0aW9uIGlzTGVhcFllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTsKICByZXR1cm4geWVhciAlIDQwMCA9PT0gMCB8fCB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwOwp9CnZhciBpc0xlYXBZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2lzTGVhcFllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNMZWFwWWVhci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNMZWFwWWVhcl9kZWZhdWx0ID0gaXNMZWFwWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXlzSW5ZZWFyLmpzCmZ1bmN0aW9uIGdldERheXNJblllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoTnVtYmVyLmlzTmFOKCtfZGF0ZSkpIHJldHVybiBOYU47CiAgcmV0dXJuIGlzTGVhcFllYXIoX2RhdGUpID8gMzY2IDogMzY1Owp9CnZhciBnZXREYXlzSW5ZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2dldERheXNJblllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGF5c0luWWVhci5qcyIoKSB7CiAgICBpbml0X2lzTGVhcFllYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXREYXlzSW5ZZWFyX2RlZmF1bHQgPSBnZXREYXlzSW5ZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERlY2FkZS5qcwpmdW5jdGlvbiBnZXREZWNhZGUoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTsKICBjb25zdCBkZWNhZGUgPSBNYXRoLmZsb29yKHllYXIgLyAxMCkgKiAxMDsKICByZXR1cm4gZGVjYWRlOwp9CnZhciBnZXREZWNhZGVfZGVmYXVsdDsKdmFyIGluaXRfZ2V0RGVjYWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERlY2FkZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0RGVjYWRlX2RlZmF1bHQgPSBnZXREZWNhZGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGVmYXVsdE9wdGlvbnMuanMKZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMyKCkgewogIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBnZXREZWZhdWx0T3B0aW9ucygpKTsKfQp2YXIgZ2V0RGVmYXVsdE9wdGlvbnNfZGVmYXVsdDsKdmFyIGluaXRfZ2V0RGVmYXVsdE9wdGlvbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGVmYXVsdE9wdGlvbnMuanMiKCkgewogICAgaW5pdF9kZWZhdWx0T3B0aW9ucygpOwogICAgZ2V0RGVmYXVsdE9wdGlvbnNfZGVmYXVsdCA9IGdldERlZmF1bHRPcHRpb25zMjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRIb3Vycy5qcwpmdW5jdGlvbiBnZXRIb3VycyhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0SG91cnMoKTsKfQp2YXIgZ2V0SG91cnNfZGVmYXVsdDsKdmFyIGluaXRfZ2V0SG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SG91cnMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldEhvdXJzX2RlZmF1bHQgPSBnZXRIb3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRJU09EYXkuanMKZnVuY3Rpb24gZ2V0SVNPRGF5KGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXkgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpOwogIHJldHVybiBkYXkgPT09IDAgPyA3IDogZGF5Owp9CnZhciBnZXRJU09EYXlfZGVmYXVsdDsKdmFyIGluaXRfZ2V0SVNPRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT0RheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0SVNPRGF5X2RlZmF1bHQgPSBnZXRJU09EYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vla3NJblllYXIuanMKZnVuY3Rpb24gZ2V0SVNPV2Vla3NJblllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IHRoaXNZZWFyID0gc3RhcnRPZklTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogIGNvbnN0IG5leHRZZWFyID0gc3RhcnRPZklTT1dlZWtZZWFyKGFkZFdlZWtzKHRoaXNZZWFyLCA2MCkpOwogIGNvbnN0IGRpZmYgPSArbmV4dFllYXIgLSArdGhpc1llYXI7CiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2Vlayk7Cn0KdmFyIGdldElTT1dlZWtzSW5ZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2dldElTT1dlZWtzSW5ZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT1dlZWtzSW5ZZWFyLmpzIigpIHsKICAgIGluaXRfYWRkV2Vla3MoKTsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBpbml0X3N0YXJ0T2ZJU09XZWVrWWVhcigpOwogICAgZ2V0SVNPV2Vla3NJblllYXJfZGVmYXVsdCA9IGdldElTT1dlZWtzSW5ZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldE1pbGxpc2Vjb25kcy5qcwpmdW5jdGlvbiBnZXRNaWxsaXNlY29uZHMoZGF0ZSkgewogIHJldHVybiB0b0RhdGUoZGF0ZSkuZ2V0TWlsbGlzZWNvbmRzKCk7Cn0KdmFyIGdldE1pbGxpc2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9nZXRNaWxsaXNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0TWlsbGlzZWNvbmRzLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRNaWxsaXNlY29uZHNfZGVmYXVsdCA9IGdldE1pbGxpc2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRNaW51dGVzLmpzCmZ1bmN0aW9uIGdldE1pbnV0ZXMoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldE1pbnV0ZXMoKTsKfQp2YXIgZ2V0TWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9nZXRNaW51dGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldE1pbnV0ZXMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldE1pbnV0ZXNfZGVmYXVsdCA9IGdldE1pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0TW9udGguanMKZnVuY3Rpb24gZ2V0TW9udGgoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldE1vbnRoKCk7Cn0KdmFyIGdldE1vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2dldE1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldE1vbnRoLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRNb250aF9kZWZhdWx0ID0gZ2V0TW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHMuanMKZnVuY3Rpb24gZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHMoaW50ZXJ2YWxMZWZ0LCBpbnRlcnZhbFJpZ2h0KSB7CiAgY29uc3QgW2xlZnRTdGFydCwgbGVmdEVuZF0gPSBbCiAgICArdG9EYXRlKGludGVydmFsTGVmdC5zdGFydCksCiAgICArdG9EYXRlKGludGVydmFsTGVmdC5lbmQpCiAgXS5zb3J0KChhNSwgYjUpID0+IGE1IC0gYjUpOwogIGNvbnN0IFtyaWdodFN0YXJ0LCByaWdodEVuZF0gPSBbCiAgICArdG9EYXRlKGludGVydmFsUmlnaHQuc3RhcnQpLAogICAgK3RvRGF0ZShpbnRlcnZhbFJpZ2h0LmVuZCkKICBdLnNvcnQoKGE1LCBiNSkgPT4gYTUgLSBiNSk7CiAgY29uc3QgaXNPdmVybGFwcGluZyA9IGxlZnRTdGFydCA8IHJpZ2h0RW5kICYmIHJpZ2h0U3RhcnQgPCBsZWZ0RW5kOwogIGlmICghaXNPdmVybGFwcGluZykgcmV0dXJuIDA7CiAgY29uc3Qgb3ZlcmxhcExlZnQgPSByaWdodFN0YXJ0IDwgbGVmdFN0YXJ0ID8gbGVmdFN0YXJ0IDogcmlnaHRTdGFydDsKICBjb25zdCBsZWZ0ID0gb3ZlcmxhcExlZnQgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG92ZXJsYXBMZWZ0KTsKICBjb25zdCBvdmVybGFwUmlnaHQgPSByaWdodEVuZCA+IGxlZnRFbmQgPyBsZWZ0RW5kIDogcmlnaHRFbmQ7CiAgY29uc3QgcmlnaHQgPSBvdmVybGFwUmlnaHQgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG92ZXJsYXBSaWdodCk7CiAgcmV0dXJuIE1hdGguY2VpbCgocmlnaHQgLSBsZWZ0KSAvIG1pbGxpc2Vjb25kc0luRGF5KTsKfQp2YXIgZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHNfZGVmYXVsdDsKdmFyIGluaXRfZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHMuanMiKCkgewogICAgaW5pdF9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldE92ZXJsYXBwaW5nRGF5c0luSW50ZXJ2YWxzX2RlZmF1bHQgPSBnZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFsczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRTZWNvbmRzLmpzCmZ1bmN0aW9uIGdldFNlY29uZHMoZGF0ZSkgewogIHJldHVybiB0b0RhdGUoZGF0ZSkuZ2V0U2Vjb25kcygpOwp9CnZhciBnZXRTZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X2dldFNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0U2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0U2Vjb25kc19kZWZhdWx0ID0gZ2V0U2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRUaW1lLmpzCmZ1bmN0aW9uIGdldFRpbWUoZGF0ZSkgewogIHJldHVybiArdG9EYXRlKGRhdGUpOwp9CnZhciBnZXRUaW1lX2RlZmF1bHQ7CnZhciBpbml0X2dldFRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0VGltZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0VGltZV9kZWZhdWx0ID0gZ2V0VGltZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRVbml4VGltZS5qcwpmdW5jdGlvbiBnZXRVbml4VGltZShkYXRlKSB7CiAgcmV0dXJuIE1hdGgudHJ1bmMoK3RvRGF0ZShkYXRlKSAvIDFlMyk7Cn0KdmFyIGdldFVuaXhUaW1lX2RlZmF1bHQ7CnZhciBpbml0X2dldFVuaXhUaW1lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFVuaXhUaW1lLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRVbml4VGltZV9kZWZhdWx0ID0gZ2V0VW5peFRpbWU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0V2Vla09mTW9udGguanMKZnVuY3Rpb24gZ2V0V2Vla09mTW9udGgoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3Qgd2Vla1N0YXJ0c09uID0gb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IDA7CiAgY29uc3QgY3VycmVudERheU9mTW9udGggPSBnZXREYXRlKHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikpOwogIGlmIChpc05hTihjdXJyZW50RGF5T2ZNb250aCkpIHJldHVybiBOYU47CiAgY29uc3Qgc3RhcnRXZWVrRGF5ID0gZ2V0RGF5KHN0YXJ0T2ZNb250aChkYXRlLCBvcHRpb25zKSk7CiAgbGV0IGxhc3REYXlPZkZpcnN0V2VlayA9IHdlZWtTdGFydHNPbiAtIHN0YXJ0V2Vla0RheTsKICBpZiAobGFzdERheU9mRmlyc3RXZWVrIDw9IDApIGxhc3REYXlPZkZpcnN0V2VlayArPSA3OwogIGNvbnN0IHJlbWFpbmluZ0RheXNBZnRlckZpcnN0V2VlayA9IGN1cnJlbnREYXlPZk1vbnRoIC0gbGFzdERheU9mRmlyc3RXZWVrOwogIHJldHVybiBNYXRoLmNlaWwocmVtYWluaW5nRGF5c0FmdGVyRmlyc3RXZWVrIC8gNykgKyAxOwp9CnZhciBnZXRXZWVrT2ZNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9nZXRXZWVrT2ZNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRXZWVrT2ZNb250aC5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X2dldERhdGUoKTsKICAgIGluaXRfZ2V0RGF5KCk7CiAgICBpbml0X3N0YXJ0T2ZNb250aCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldFdlZWtPZk1vbnRoX2RlZmF1bHQgPSBnZXRXZWVrT2ZNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZNb250aC5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZNb250aChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IG1vbnRoID0gX2RhdGUuZ2V0TW9udGgoKTsKICBfZGF0ZS5zZXRGdWxsWWVhcihfZGF0ZS5nZXRGdWxsWWVhcigpLCBtb250aCArIDEsIDApOwogIF9kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiB0b0RhdGUoX2RhdGUsIG9wdGlvbnM/LmluKTsKfQp2YXIgbGFzdERheU9mTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfbGFzdERheU9mTW9udGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mTW9udGguanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGxhc3REYXlPZk1vbnRoX2RlZmF1bHQgPSBsYXN0RGF5T2ZNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRXZWVrc0luTW9udGguanMKZnVuY3Rpb24gZ2V0V2Vla3NJbk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBjb250ZXh0RGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgcmV0dXJuIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MoCiAgICBsYXN0RGF5T2ZNb250aChjb250ZXh0RGF0ZSwgb3B0aW9ucyksCiAgICBzdGFydE9mTW9udGgoY29udGV4dERhdGUsIG9wdGlvbnMpLAogICAgb3B0aW9ucwogICkgKyAxOwp9CnZhciBnZXRXZWVrc0luTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfZ2V0V2Vla3NJbk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWtzSW5Nb250aC5qcyIoKSB7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MoKTsKICAgIGluaXRfbGFzdERheU9mTW9udGgoKTsKICAgIGluaXRfc3RhcnRPZk1vbnRoKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0V2Vla3NJbk1vbnRoX2RlZmF1bHQgPSBnZXRXZWVrc0luTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0WWVhci5qcwpmdW5jdGlvbiBnZXRZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXRGdWxsWWVhcigpOwp9CnZhciBnZXRZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2dldFllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0WWVhci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0WWVhcl9kZWZhdWx0ID0gZ2V0WWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9ob3Vyc1RvTWlsbGlzZWNvbmRzLmpzCmZ1bmN0aW9uIGhvdXJzVG9NaWxsaXNlY29uZHMoaG91cnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyhob3VycyAqIG1pbGxpc2Vjb25kc0luSG91cik7Cn0KdmFyIGhvdXJzVG9NaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfaG91cnNUb01pbGxpc2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9ob3Vyc1RvTWlsbGlzZWNvbmRzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBob3Vyc1RvTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBob3Vyc1RvTWlsbGlzZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2hvdXJzVG9NaW51dGVzLmpzCmZ1bmN0aW9uIGhvdXJzVG9NaW51dGVzKGhvdXJzKSB7CiAgcmV0dXJuIE1hdGgudHJ1bmMoaG91cnMgKiBtaW51dGVzSW5Ib3VyKTsKfQp2YXIgaG91cnNUb01pbnV0ZXNfZGVmYXVsdDsKdmFyIGluaXRfaG91cnNUb01pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaG91cnNUb01pbnV0ZXMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGhvdXJzVG9NaW51dGVzX2RlZmF1bHQgPSBob3Vyc1RvTWludXRlczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9ob3Vyc1RvU2Vjb25kcy5qcwpmdW5jdGlvbiBob3Vyc1RvU2Vjb25kcyhob3VycykgewogIHJldHVybiBNYXRoLnRydW5jKGhvdXJzICogc2Vjb25kc0luSG91cik7Cn0KdmFyIGhvdXJzVG9TZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X2hvdXJzVG9TZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2hvdXJzVG9TZWNvbmRzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBob3Vyc1RvU2Vjb25kc19kZWZhdWx0ID0gaG91cnNUb1NlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaW50ZXJ2YWwuanMKZnVuY3Rpb24gaW50ZXJ2YWwyKHN0YXJ0LCBlbmQzLCBvcHRpb25zKSB7CiAgY29uc3QgW19zdGFydCwgX2VuZF0gPSBub3JtYWxpemVEYXRlcyhvcHRpb25zPy5pbiwgc3RhcnQsIGVuZDMpOwogIGlmIChpc05hTigrX3N0YXJ0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiU3RhcnQgZGF0ZSBpcyBpbnZhbGlkIik7CiAgaWYgKGlzTmFOKCtfZW5kKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiRW5kIGRhdGUgaXMgaW52YWxpZCIpOwogIGlmIChvcHRpb25zPy5hc3NlcnRQb3NpdGl2ZSAmJiArX3N0YXJ0ID4gK19lbmQpCiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFbmQgZGF0ZSBtdXN0IGJlIGFmdGVyIHN0YXJ0IGRhdGUiKTsKICByZXR1cm4geyBzdGFydDogX3N0YXJ0LCBlbmQ6IF9lbmQgfTsKfQp2YXIgaW50ZXJ2YWxfZGVmYXVsdDsKdmFyIGluaXRfaW50ZXJ2YWwyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGludGVydmFsX2RlZmF1bHQgPSBpbnRlcnZhbDI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaW50ZXJ2YWxUb0R1cmF0aW9uLmpzCmZ1bmN0aW9uIGludGVydmFsVG9EdXJhdGlvbihpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB7IHN0YXJ0LCBlbmQ6IGVuZDMgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbDMpOwogIGNvbnN0IGR1cmF0aW9uID0ge307CiAgY29uc3QgeWVhcnMgPSBkaWZmZXJlbmNlSW5ZZWFycyhlbmQzLCBzdGFydCk7CiAgaWYgKHllYXJzKSBkdXJhdGlvbi55ZWFycyA9IHllYXJzOwogIGNvbnN0IHJlbWFpbmluZ01vbnRocyA9IGFkZChzdGFydCwgeyB5ZWFyczogZHVyYXRpb24ueWVhcnMgfSk7CiAgY29uc3QgbW9udGhzMiA9IGRpZmZlcmVuY2VJbk1vbnRocyhlbmQzLCByZW1haW5pbmdNb250aHMpOwogIGlmIChtb250aHMyKSBkdXJhdGlvbi5tb250aHMgPSBtb250aHMyOwogIGNvbnN0IHJlbWFpbmluZ0RheXMgPSBhZGQocmVtYWluaW5nTW9udGhzLCB7IG1vbnRoczogZHVyYXRpb24ubW9udGhzIH0pOwogIGNvbnN0IGRheXMyID0gZGlmZmVyZW5jZUluRGF5cyhlbmQzLCByZW1haW5pbmdEYXlzKTsKICBpZiAoZGF5czIpIGR1cmF0aW9uLmRheXMgPSBkYXlzMjsKICBjb25zdCByZW1haW5pbmdIb3VycyA9IGFkZChyZW1haW5pbmdEYXlzLCB7IGRheXM6IGR1cmF0aW9uLmRheXMgfSk7CiAgY29uc3QgaG91cnMgPSBkaWZmZXJlbmNlSW5Ib3VycyhlbmQzLCByZW1haW5pbmdIb3Vycyk7CiAgaWYgKGhvdXJzKSBkdXJhdGlvbi5ob3VycyA9IGhvdXJzOwogIGNvbnN0IHJlbWFpbmluZ01pbnV0ZXMgPSBhZGQocmVtYWluaW5nSG91cnMsIHsgaG91cnM6IGR1cmF0aW9uLmhvdXJzIH0pOwogIGNvbnN0IG1pbnV0ZXMgPSBkaWZmZXJlbmNlSW5NaW51dGVzKGVuZDMsIHJlbWFpbmluZ01pbnV0ZXMpOwogIGlmIChtaW51dGVzKSBkdXJhdGlvbi5taW51dGVzID0gbWludXRlczsKICBjb25zdCByZW1haW5pbmdTZWNvbmRzID0gYWRkKHJlbWFpbmluZ01pbnV0ZXMsIHsgbWludXRlczogZHVyYXRpb24ubWludXRlcyB9KTsKICBjb25zdCBzZWNvbmRzID0gZGlmZmVyZW5jZUluU2Vjb25kcyhlbmQzLCByZW1haW5pbmdTZWNvbmRzKTsKICBpZiAoc2Vjb25kcykgZHVyYXRpb24uc2Vjb25kcyA9IHNlY29uZHM7CiAgcmV0dXJuIGR1cmF0aW9uOwp9CnZhciBpbnRlcnZhbFRvRHVyYXRpb25fZGVmYXVsdDsKdmFyIGluaXRfaW50ZXJ2YWxUb0R1cmF0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGVydmFsVG9EdXJhdGlvbi5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZUludGVydmFsKCk7CiAgICBpbml0X2FkZCgpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5EYXlzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkhvdXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1pbnV0ZXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluTW9udGhzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJblNlY29uZHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluWWVhcnMoKTsKICAgIGludGVydmFsVG9EdXJhdGlvbl9kZWZhdWx0ID0gaW50ZXJ2YWxUb0R1cmF0aW9uOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGxGb3JtYXQuanMKZnVuY3Rpb24gaW50bEZvcm1hdChkYXRlLCBmb3JtYXRPckxvY2FsZSwgbG9jYWxlT3B0aW9ucykgewogIGxldCBmb3JtYXRPcHRpb25zOwogIGlmIChpc0Zvcm1hdE9wdGlvbnMoZm9ybWF0T3JMb2NhbGUpKSB7CiAgICBmb3JtYXRPcHRpb25zID0gZm9ybWF0T3JMb2NhbGU7CiAgfSBlbHNlIHsKICAgIGxvY2FsZU9wdGlvbnMgPSBmb3JtYXRPckxvY2FsZTsKICB9CiAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZU9wdGlvbnM/LmxvY2FsZSwgZm9ybWF0T3B0aW9ucykuZm9ybWF0KAogICAgdG9EYXRlKGRhdGUpCiAgKTsKfQpmdW5jdGlvbiBpc0Zvcm1hdE9wdGlvbnMob3B0cykgewogIHJldHVybiBvcHRzICE9PSB2b2lkIDAgJiYgISgibG9jYWxlIiBpbiBvcHRzKTsKfQp2YXIgaW50bEZvcm1hdF9kZWZhdWx0Owp2YXIgaW5pdF9pbnRsRm9ybWF0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGxGb3JtYXQuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGludGxGb3JtYXRfZGVmYXVsdCA9IGludGxGb3JtYXQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaW50bEZvcm1hdERpc3RhbmNlLmpzCmZ1bmN0aW9uIGludGxGb3JtYXREaXN0YW5jZShsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgbGV0IHZhbHVlMiA9IDA7CiAgbGV0IHVuaXQ7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGlmICghb3B0aW9ucz8udW5pdCkgewogICAgY29uc3QgZGlmZkluU2Vjb25kcyA9IGRpZmZlcmVuY2VJblNlY29uZHMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgIGlmIChNYXRoLmFicyhkaWZmSW5TZWNvbmRzKSA8IHNlY29uZHNJbk1pbnV0ZSkgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5TZWNvbmRzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICAgIHVuaXQgPSAic2Vjb25kIjsKICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGlmZkluU2Vjb25kcykgPCBzZWNvbmRzSW5Ib3VyKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgICAgdW5pdCA9ICJtaW51dGUiOwogICAgfSBlbHNlIGlmIChNYXRoLmFicyhkaWZmSW5TZWNvbmRzKSA8IHNlY29uZHNJbkRheSAmJiBNYXRoLmFicyhkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSkgPCAxKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbkhvdXJzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICAgIHVuaXQgPSAiaG91ciI7CiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luV2VlayAmJiAodmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXykpICYmIE1hdGguYWJzKHZhbHVlMikgPCA3KSB7CiAgICAgIHVuaXQgPSAiZGF5IjsKICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGlmZkluU2Vjb25kcykgPCBzZWNvbmRzSW5Nb250aCkgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICAgIHVuaXQgPSAid2VlayI7CiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luUXVhcnRlcikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgICB1bml0ID0gIm1vbnRoIjsKICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGlmZkluU2Vjb25kcykgPCBzZWNvbmRzSW5ZZWFyKSB7CiAgICAgIGlmIChkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXykgPCA0KSB7CiAgICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgICAgIHVuaXQgPSAicXVhcnRlciI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgICAgIHVuaXQgPSAieWVhciI7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgICAgdW5pdCA9ICJ5ZWFyIjsKICAgIH0KICB9IGVsc2UgewogICAgdW5pdCA9IG9wdGlvbnM/LnVuaXQ7CiAgICBpZiAodW5pdCA9PT0gInNlY29uZCIpIHsKICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluU2Vjb25kcyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAibWludXRlIikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5NaW51dGVzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICJob3VyIikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5Ib3VycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAiZGF5IikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gIndlZWsiKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gIm1vbnRoIikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAicXVhcnRlciIpIHsKICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAieWVhciIpIHsKICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfQogIH0KICBjb25zdCBydGYgPSBuZXcgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQob3B0aW9ucz8ubG9jYWxlLCB7CiAgICBudW1lcmljOiAiYXV0byIsCiAgICAuLi5vcHRpb25zCiAgfSk7CiAgcmV0dXJuIHJ0Zi5mb3JtYXQodmFsdWUyLCB1bml0KTsKfQp2YXIgaW50bEZvcm1hdERpc3RhbmNlX2RlZmF1bHQ7CnZhciBpbml0X2ludGxGb3JtYXREaXN0YW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pbnRsRm9ybWF0RGlzdGFuY2UuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkhvdXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1pbnV0ZXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluU2Vjb25kcygpOwogICAgaW50bEZvcm1hdERpc3RhbmNlX2RlZmF1bHQgPSBpbnRsRm9ybWF0RGlzdGFuY2U7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNBZnRlci5qcwpmdW5jdGlvbiBpc0FmdGVyKGRhdGUsIGRhdGVUb0NvbXBhcmUpIHsKICByZXR1cm4gK3RvRGF0ZShkYXRlKSA+ICt0b0RhdGUoZGF0ZVRvQ29tcGFyZSk7Cn0KdmFyIGlzQWZ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfaXNBZnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0FmdGVyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0FmdGVyX2RlZmF1bHQgPSBpc0FmdGVyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzQmVmb3JlLmpzCmZ1bmN0aW9uIGlzQmVmb3JlKGRhdGUsIGRhdGVUb0NvbXBhcmUpIHsKICByZXR1cm4gK3RvRGF0ZShkYXRlKSA8ICt0b0RhdGUoZGF0ZVRvQ29tcGFyZSk7Cn0KdmFyIGlzQmVmb3JlX2RlZmF1bHQ7CnZhciBpbml0X2lzQmVmb3JlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzQmVmb3JlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0JlZm9yZV9kZWZhdWx0ID0gaXNCZWZvcmU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNFcXVhbC5qcwpmdW5jdGlvbiBpc0VxdWFsKGxlZnREYXRlLCByaWdodERhdGUpIHsKICByZXR1cm4gK3RvRGF0ZShsZWZ0RGF0ZSkgPT09ICt0b0RhdGUocmlnaHREYXRlKTsKfQp2YXIgaXNFcXVhbF9kZWZhdWx0Owp2YXIgaW5pdF9pc0VxdWFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRXF1YWwuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzRXF1YWxfZGVmYXVsdCA9IGlzRXF1YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNFeGlzdHMuanMKZnVuY3Rpb24gaXNFeGlzdHMoeWVhciwgbW9udGgsIGRheSkgewogIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5KTsKICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGggJiYgZGF0ZS5nZXREYXRlKCkgPT09IGRheTsKfQp2YXIgaXNFeGlzdHNfZGVmYXVsdDsKdmFyIGluaXRfaXNFeGlzdHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNFeGlzdHMuanMiKCkgewogICAgaXNFeGlzdHNfZGVmYXVsdCA9IGlzRXhpc3RzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRmlyc3REYXlPZk1vbnRoLmpzCmZ1bmN0aW9uIGlzRmlyc3REYXlPZk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXRlKCkgPT09IDE7Cn0KdmFyIGlzRmlyc3REYXlPZk1vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2lzRmlyc3REYXlPZk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRmlyc3REYXlPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0ZpcnN0RGF5T2ZNb250aF9kZWZhdWx0ID0gaXNGaXJzdERheU9mTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNGcmlkYXkuanMKZnVuY3Rpb24gaXNGcmlkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpID09PSA1Owp9CnZhciBpc0ZyaWRheV9kZWZhdWx0Owp2YXIgaW5pdF9pc0ZyaWRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0ZyaWRheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNGcmlkYXlfZGVmYXVsdCA9IGlzRnJpZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRnV0dXJlLmpzCmZ1bmN0aW9uIGlzRnV0dXJlKGRhdGUpIHsKICByZXR1cm4gK3RvRGF0ZShkYXRlKSA+IERhdGUubm93KCk7Cn0KdmFyIGlzRnV0dXJlX2RlZmF1bHQ7CnZhciBpbml0X2lzRnV0dXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRnV0dXJlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0Z1dHVyZV9kZWZhdWx0ID0gaXNGdXR1cmU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvdHJhbnNwb3NlLmpzCmZ1bmN0aW9uIHRyYW5zcG9zZShkYXRlLCBjb25zdHJ1Y3RvcikgewogIGNvbnN0IGRhdGVfID0gaXNDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikgPyBuZXcgY29uc3RydWN0b3IoMCkgOiBjb25zdHJ1Y3RGcm9tKGNvbnN0cnVjdG9yLCAwKTsKICBkYXRlXy5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpOwogIGRhdGVfLnNldEhvdXJzKAogICAgZGF0ZS5nZXRIb3VycygpLAogICAgZGF0ZS5nZXRNaW51dGVzKCksCiAgICBkYXRlLmdldFNlY29uZHMoKSwKICAgIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkKICApOwogIHJldHVybiBkYXRlXzsKfQpmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSB7CiAgcmV0dXJuIHR5cGVvZiBjb25zdHJ1Y3RvciA9PT0gImZ1bmN0aW9uIiAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU/LmNvbnN0cnVjdG9yID09PSBjb25zdHJ1Y3RvcjsKfQp2YXIgdHJhbnNwb3NlX2RlZmF1bHQ7CnZhciBpbml0X3RyYW5zcG9zZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy90cmFuc3Bvc2UuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICB0cmFuc3Bvc2VfZGVmYXVsdCA9IHRyYW5zcG9zZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL1NldHRlci5qcwp2YXIgVElNRVpPTkVfVU5JVF9QUklPUklUWSwgU2V0dGVyLCBWYWx1ZVNldHRlciwgRGF0ZVRpbWV6b25lU2V0dGVyOwp2YXIgaW5pdF9TZXR0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9TZXR0ZXIuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3RyYW5zcG9zZSgpOwogICAgVElNRVpPTkVfVU5JVF9QUklPUklUWSA9IDEwOwogICAgU2V0dGVyID0gY2xhc3MgewogICAgICBzdWJQcmlvcml0eSA9IDA7CiAgICAgIHZhbGlkYXRlKF91dGNEYXRlLCBfb3B0aW9ucykgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9OwogICAgVmFsdWVTZXR0ZXIgPSBjbGFzcyBleHRlbmRzIFNldHRlciB7CiAgICAgIGNvbnN0cnVjdG9yKHZhbHVlMiwgdmFsaWRhdGVWYWx1ZSwgc2V0VmFsdWUsIHByaW9yaXR5LCBzdWJQcmlvcml0eSkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgICAgICB0aGlzLnZhbGlkYXRlVmFsdWUgPSB2YWxpZGF0ZVZhbHVlOwogICAgICAgIHRoaXMuc2V0VmFsdWUgPSBzZXRWYWx1ZTsKICAgICAgICB0aGlzLnByaW9yaXR5ID0gcHJpb3JpdHk7CiAgICAgICAgaWYgKHN1YlByaW9yaXR5KSB7CiAgICAgICAgICB0aGlzLnN1YlByaW9yaXR5ID0gc3ViUHJpb3JpdHk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKGRhdGUsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVZhbHVlKGRhdGUsIHRoaXMudmFsdWUsIG9wdGlvbnMpOwogICAgICB9CiAgICAgIHNldChkYXRlLCBmbGFncywgb3B0aW9ucykgewogICAgICAgIHJldHVybiB0aGlzLnNldFZhbHVlKGRhdGUsIGZsYWdzLCB0aGlzLnZhbHVlLCBvcHRpb25zKTsKICAgICAgfQogICAgfTsKICAgIERhdGVUaW1lem9uZVNldHRlciA9IGNsYXNzIGV4dGVuZHMgU2V0dGVyIHsKICAgICAgcHJpb3JpdHkgPSBUSU1FWk9ORV9VTklUX1BSSU9SSVRZOwogICAgICBzdWJQcmlvcml0eSA9IC0xOwogICAgICBjb25zdHJ1Y3Rvcihjb250ZXh0MiwgcmVmZXJlbmNlKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0MiB8fCAoKGRhdGUpID0+IGNvbnN0cnVjdEZyb20ocmVmZXJlbmNlLCBkYXRlKSk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzKSB7CiAgICAgICAgaWYgKGZsYWdzLnRpbWVzdGFtcElzU2V0KSByZXR1cm4gZGF0ZTsKICAgICAgICByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlLCB0cmFuc3Bvc2UoZGF0ZSwgdGhpcy5jb250ZXh0KSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9QYXJzZXIuanMKdmFyIFBhcnNlcjsKdmFyIGluaXRfUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvUGFyc2VyLmpzIigpIHsKICAgIGluaXRfU2V0dGVyKCk7CiAgICBQYXJzZXIgPSBjbGFzcyB7CiAgICAgIHJ1bihkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyLCBvcHRpb25zKTsKICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiB7CiAgICAgICAgICBzZXR0ZXI6IG5ldyBWYWx1ZVNldHRlcigKICAgICAgICAgICAgcmVzdWx0LnZhbHVlLAogICAgICAgICAgICB0aGlzLnZhbGlkYXRlLAogICAgICAgICAgICB0aGlzLnNldCwKICAgICAgICAgICAgdGhpcy5wcmlvcml0eSwKICAgICAgICAgICAgdGhpcy5zdWJQcmlvcml0eQogICAgICAgICAgKSwKICAgICAgICAgIHJlc3Q6IHJlc3VsdC5yZXN0CiAgICAgICAgfTsKICAgICAgfQogICAgICB2YWxpZGF0ZShfdXRjRGF0ZSwgX3ZhbHVlLCBfb3B0aW9ucykgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9FcmFQYXJzZXIuanMKdmFyIEVyYVBhcnNlcjsKdmFyIGluaXRfRXJhUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9FcmFQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIEVyYVBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxNDA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBBRCwgQkMKICAgICAgICAgIGNhc2UgIkciOgogICAgICAgICAgY2FzZSAiR0ciOgogICAgICAgICAgY2FzZSAiR0dHIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5lcmEoZGF0ZVN0cmluZywgeyB3aWR0aDogImFiYnJldmlhdGVkIiB9KSB8fCBtYXRjaDIuZXJhKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciIH0pOwogICAgICAgICAgLy8gQSwgQgogICAgICAgICAgY2FzZSAiR0dHR0ciOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmVyYShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiB9KTsKICAgICAgICAgIC8vIEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0CiAgICAgICAgICBjYXNlICJHR0dHIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZXJhKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJ3aWRlIiB9KSB8fCBtYXRjaDIuZXJhKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJhYmJyZXZpYXRlZCIgfSkgfHwgbWF0Y2gyLmVyYShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBmbGFncy5lcmEgPSB2YWx1ZTI7CiAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih2YWx1ZTIsIDAsIDEpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJSIiwgInUiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvY29uc3RhbnRzLmpzCnZhciBudW1lcmljUGF0dGVybnMsIHRpbWV6b25lUGF0dGVybnM7CnZhciBpbml0X2NvbnN0YW50czIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9jb25zdGFudHMuanMiKCkgewogICAgbnVtZXJpY1BhdHRlcm5zID0gewogICAgICBtb250aDogL14oMVswLTJdfDA/XGQpLywKICAgICAgLy8gMCB0byAxMgogICAgICBkYXRlOiAvXigzWzAtMV18WzAtMl0/XGQpLywKICAgICAgLy8gMCB0byAzMQogICAgICBkYXlPZlllYXI6IC9eKDM2WzAtNl18M1swLTVdXGR8WzAtMl0/XGQ/XGQpLywKICAgICAgLy8gMCB0byAzNjYKICAgICAgd2VlazogL14oNVswLTNdfFswLTRdP1xkKS8sCiAgICAgIC8vIDAgdG8gNTMKICAgICAgaG91cjIzaDogL14oMlswLTNdfFswLTFdP1xkKS8sCiAgICAgIC8vIDAgdG8gMjMKICAgICAgaG91cjI0aDogL14oMlswLTRdfFswLTFdP1xkKS8sCiAgICAgIC8vIDAgdG8gMjQKICAgICAgaG91cjExaDogL14oMVswLTFdfDA/XGQpLywKICAgICAgLy8gMCB0byAxMQogICAgICBob3VyMTJoOiAvXigxWzAtMl18MD9cZCkvLAogICAgICAvLyAwIHRvIDEyCiAgICAgIG1pbnV0ZTogL15bMC01XT9cZC8sCiAgICAgIC8vIDAgdG8gNTkKICAgICAgc2Vjb25kOiAvXlswLTVdP1xkLywKICAgICAgLy8gMCB0byA1OQogICAgICBzaW5nbGVEaWdpdDogL15cZC8sCiAgICAgIC8vIDAgdG8gOQogICAgICB0d29EaWdpdHM6IC9eXGR7MSwyfS8sCiAgICAgIC8vIDAgdG8gOTkKICAgICAgdGhyZWVEaWdpdHM6IC9eXGR7MSwzfS8sCiAgICAgIC8vIDAgdG8gOTk5CiAgICAgIGZvdXJEaWdpdHM6IC9eXGR7MSw0fS8sCiAgICAgIC8vIDAgdG8gOTk5OQogICAgICBhbnlEaWdpdHNTaWduZWQ6IC9eLT9cZCsvLAogICAgICBzaW5nbGVEaWdpdFNpZ25lZDogL14tP1xkLywKICAgICAgLy8gMCB0byA5LCAtMCB0byAtOQogICAgICB0d29EaWdpdHNTaWduZWQ6IC9eLT9cZHsxLDJ9LywKICAgICAgLy8gMCB0byA5OSwgLTAgdG8gLTk5CiAgICAgIHRocmVlRGlnaXRzU2lnbmVkOiAvXi0/XGR7MSwzfS8sCiAgICAgIC8vIDAgdG8gOTk5LCAtMCB0byAtOTk5CiAgICAgIGZvdXJEaWdpdHNTaWduZWQ6IC9eLT9cZHsxLDR9LwogICAgICAvLyAwIHRvIDk5OTksIC0wIHRvIC05OTk5CiAgICB9OwogICAgdGltZXpvbmVQYXR0ZXJucyA9IHsKICAgICAgYmFzaWNPcHRpb25hbE1pbnV0ZXM6IC9eKFsrLV0pKFxkezJ9KShcZHsyfSk/fFovLAogICAgICBiYXNpYzogL14oWystXSkoXGR7Mn0pKFxkezJ9KXxaLywKICAgICAgYmFzaWNPcHRpb25hbFNlY29uZHM6IC9eKFsrLV0pKFxkezJ9KShcZHsyfSkoKFxkezJ9KSk/fFovLAogICAgICBleHRlbmRlZDogL14oWystXSkoXGR7Mn0pOihcZHsyfSl8Wi8sCiAgICAgIGV4dGVuZGVkT3B0aW9uYWxTZWNvbmRzOiAvXihbKy1dKShcZHsyfSk6KFxkezJ9KSg6KFxkezJ9KSk/fFovCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvdXRpbHMuanMKZnVuY3Rpb24gbWFwVmFsdWUocGFyc2VGblJlc3VsdCwgbWFwRm4pIHsKICBpZiAoIXBhcnNlRm5SZXN1bHQpIHsKICAgIHJldHVybiBwYXJzZUZuUmVzdWx0OwogIH0KICByZXR1cm4gewogICAgdmFsdWU6IG1hcEZuKHBhcnNlRm5SZXN1bHQudmFsdWUpLAogICAgcmVzdDogcGFyc2VGblJlc3VsdC5yZXN0CiAgfTsKfQpmdW5jdGlvbiBwYXJzZU51bWVyaWNQYXR0ZXJuKHBhdHRlcm4sIGRhdGVTdHJpbmcpIHsKICBjb25zdCBtYXRjaFJlc3VsdCA9IGRhdGVTdHJpbmcubWF0Y2gocGF0dGVybik7CiAgaWYgKCFtYXRjaFJlc3VsdCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHJldHVybiB7CiAgICB2YWx1ZTogcGFyc2VJbnQobWF0Y2hSZXN1bHRbMF0sIDEwKSwKICAgIHJlc3Q6IGRhdGVTdHJpbmcuc2xpY2UobWF0Y2hSZXN1bHRbMF0ubGVuZ3RoKQogIH07Cn0KZnVuY3Rpb24gcGFyc2VUaW1lem9uZVBhdHRlcm4ocGF0dGVybiwgZGF0ZVN0cmluZykgewogIGNvbnN0IG1hdGNoUmVzdWx0ID0gZGF0ZVN0cmluZy5tYXRjaChwYXR0ZXJuKTsKICBpZiAoIW1hdGNoUmVzdWx0KSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgaWYgKG1hdGNoUmVzdWx0WzBdID09PSAiWiIpIHsKICAgIHJldHVybiB7CiAgICAgIHZhbHVlOiAwLAogICAgICByZXN0OiBkYXRlU3RyaW5nLnNsaWNlKDEpCiAgICB9OwogIH0KICBjb25zdCBzaWduID0gbWF0Y2hSZXN1bHRbMV0gPT09ICIrIiA/IDEgOiAtMTsKICBjb25zdCBob3VycyA9IG1hdGNoUmVzdWx0WzJdID8gcGFyc2VJbnQobWF0Y2hSZXN1bHRbMl0sIDEwKSA6IDA7CiAgY29uc3QgbWludXRlcyA9IG1hdGNoUmVzdWx0WzNdID8gcGFyc2VJbnQobWF0Y2hSZXN1bHRbM10sIDEwKSA6IDA7CiAgY29uc3Qgc2Vjb25kcyA9IG1hdGNoUmVzdWx0WzVdID8gcGFyc2VJbnQobWF0Y2hSZXN1bHRbNV0sIDEwKSA6IDA7CiAgcmV0dXJuIHsKICAgIHZhbHVlOiBzaWduICogKGhvdXJzICogbWlsbGlzZWNvbmRzSW5Ib3VyICsgbWludXRlcyAqIG1pbGxpc2Vjb25kc0luTWludXRlICsgc2Vjb25kcyAqIG1pbGxpc2Vjb25kc0luU2Vjb25kKSwKICAgIHJlc3Q6IGRhdGVTdHJpbmcuc2xpY2UobWF0Y2hSZXN1bHRbMF0ubGVuZ3RoKQogIH07Cn0KZnVuY3Rpb24gcGFyc2VBbnlEaWdpdHNTaWduZWQoZGF0ZVN0cmluZykgewogIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5hbnlEaWdpdHNTaWduZWQsIGRhdGVTdHJpbmcpOwp9CmZ1bmN0aW9uIHBhcnNlTkRpZ2l0cyhuMTMsIGRhdGVTdHJpbmcpIHsKICBzd2l0Y2ggKG4xMykgewogICAgY2FzZSAxOgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuc2luZ2xlRGlnaXQsIGRhdGVTdHJpbmcpOwogICAgY2FzZSAyOgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMudHdvRGlnaXRzLCBkYXRlU3RyaW5nKTsKICAgIGNhc2UgMzoKICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLnRocmVlRGlnaXRzLCBkYXRlU3RyaW5nKTsKICAgIGNhc2UgNDoKICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLmZvdXJEaWdpdHMsIGRhdGVTdHJpbmcpOwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obmV3IFJlZ0V4cCgiXlxcZHsxLCIgKyBuMTMgKyAifSIpLCBkYXRlU3RyaW5nKTsKICB9Cn0KZnVuY3Rpb24gcGFyc2VORGlnaXRzU2lnbmVkKG4xMywgZGF0ZVN0cmluZykgewogIHN3aXRjaCAobjEzKSB7CiAgICBjYXNlIDE6CiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5zaW5nbGVEaWdpdFNpZ25lZCwgZGF0ZVN0cmluZyk7CiAgICBjYXNlIDI6CiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy50d29EaWdpdHNTaWduZWQsIGRhdGVTdHJpbmcpOwogICAgY2FzZSAzOgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMudGhyZWVEaWdpdHNTaWduZWQsIGRhdGVTdHJpbmcpOwogICAgY2FzZSA0OgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuZm91ckRpZ2l0c1NpZ25lZCwgZGF0ZVN0cmluZyk7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihuZXcgUmVnRXhwKCJeLT9cXGR7MSwiICsgbjEzICsgIn0iKSwgZGF0ZVN0cmluZyk7CiAgfQp9CmZ1bmN0aW9uIGRheVBlcmlvZEVudW1Ub0hvdXJzKGRheVBlcmlvZCkgewogIHN3aXRjaCAoZGF5UGVyaW9kKSB7CiAgICBjYXNlICJtb3JuaW5nIjoKICAgICAgcmV0dXJuIDQ7CiAgICBjYXNlICJldmVuaW5nIjoKICAgICAgcmV0dXJuIDE3OwogICAgY2FzZSAicG0iOgogICAgY2FzZSAibm9vbiI6CiAgICBjYXNlICJhZnRlcm5vb24iOgogICAgICByZXR1cm4gMTI7CiAgICBjYXNlICJhbSI6CiAgICBjYXNlICJtaWRuaWdodCI6CiAgICBjYXNlICJuaWdodCI6CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gMDsKICB9Cn0KZnVuY3Rpb24gbm9ybWFsaXplVHdvRGlnaXRZZWFyKHR3b0RpZ2l0WWVhciwgY3VycmVudFllYXIpIHsKICBjb25zdCBpc0NvbW1vbkVyYSA9IGN1cnJlbnRZZWFyID4gMDsKICBjb25zdCBhYnNDdXJyZW50WWVhciA9IGlzQ29tbW9uRXJhID8gY3VycmVudFllYXIgOiAxIC0gY3VycmVudFllYXI7CiAgbGV0IHJlc3VsdDsKICBpZiAoYWJzQ3VycmVudFllYXIgPD0gNTApIHsKICAgIHJlc3VsdCA9IHR3b0RpZ2l0WWVhciB8fCAxMDA7CiAgfSBlbHNlIHsKICAgIGNvbnN0IHJhbmdlRW5kID0gYWJzQ3VycmVudFllYXIgKyA1MDsKICAgIGNvbnN0IHJhbmdlRW5kQ2VudHVyeSA9IE1hdGgudHJ1bmMocmFuZ2VFbmQgLyAxMDApICogMTAwOwogICAgY29uc3QgaXNQcmV2aW91c0NlbnR1cnkgPSB0d29EaWdpdFllYXIgPj0gcmFuZ2VFbmQgJSAxMDA7CiAgICByZXN1bHQgPSB0d29EaWdpdFllYXIgKyByYW5nZUVuZENlbnR1cnkgLSAoaXNQcmV2aW91c0NlbnR1cnkgPyAxMDAgOiAwKTsKICB9CiAgcmV0dXJuIGlzQ29tbW9uRXJhID8gcmVzdWx0IDogMSAtIHJlc3VsdDsKfQpmdW5jdGlvbiBpc0xlYXBZZWFySW5kZXgoeWVhcikgewogIHJldHVybiB5ZWFyICUgNDAwID09PSAwIHx8IHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDA7Cn0KdmFyIGluaXRfdXRpbHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi91dGlscy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1llYXJQYXJzZXIuanMKdmFyIFllYXJQYXJzZXI7CnZhciBpbml0X1llYXJQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1llYXJQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFllYXJQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTMwOwogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbIlkiLCAiUiIsICJ1IiwgInciLCAiSSIsICJpIiwgImUiLCAiYyIsICJ0IiwgIlQiXTsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAoeWVhcikgPT4gKHsKICAgICAgICAgIHllYXIsCiAgICAgICAgICBpc1R3b0RpZ2l0WWVhcjogdG9rZW4gPT09ICJ5eSIKICAgICAgICB9KTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJ5IjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyg0LCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgICBjYXNlICJ5byI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB1bml0OiAieWVhciIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUocGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMi5pc1R3b0RpZ2l0WWVhciB8fCB2YWx1ZTIueWVhciA+IDA7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBjb25zdCBjdXJyZW50WWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICBpZiAodmFsdWUyLmlzVHdvRGlnaXRZZWFyKSB7CiAgICAgICAgICBjb25zdCBub3JtYWxpemVkVHdvRGlnaXRZZWFyID0gbm9ybWFsaXplVHdvRGlnaXRZZWFyKAogICAgICAgICAgICB2YWx1ZTIueWVhciwKICAgICAgICAgICAgY3VycmVudFllYXIKICAgICAgICAgICk7CiAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKG5vcm1hbGl6ZWRUd29EaWdpdFllYXIsIDAsIDEpOwogICAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICAgIHJldHVybiBkYXRlOwogICAgICAgIH0KICAgICAgICBjb25zdCB5ZWFyID0gISgiZXJhIiBpbiBmbGFncykgfHwgZmxhZ3MuZXJhID09PSAxID8gdmFsdWUyLnllYXIgOiAxIC0gdmFsdWUyLnllYXI7CiAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyLCAwLCAxKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Mb2NhbFdlZWtZZWFyUGFyc2VyLmpzCnZhciBMb2NhbFdlZWtZZWFyUGFyc2VyOwp2YXIgaW5pdF9Mb2NhbFdlZWtZZWFyUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Mb2NhbFdlZWtZZWFyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfZ2V0V2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBMb2NhbFdlZWtZZWFyUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEzMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAoeWVhcikgPT4gKHsKICAgICAgICAgIHllYXIsCiAgICAgICAgICBpc1R3b0RpZ2l0WWVhcjogdG9rZW4gPT09ICJZWSIKICAgICAgICB9KTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJZIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyg0LCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgICBjYXNlICJZbyI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB1bml0OiAieWVhciIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUocGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMi5pc1R3b0RpZ2l0WWVhciB8fCB2YWx1ZTIueWVhciA+IDA7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZTIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBjdXJyZW50WWVhciA9IGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogICAgICAgIGlmICh2YWx1ZTIuaXNUd29EaWdpdFllYXIpIHsKICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUd29EaWdpdFllYXIgPSBub3JtYWxpemVUd29EaWdpdFllYXIoCiAgICAgICAgICAgIHZhbHVlMi55ZWFyLAogICAgICAgICAgICBjdXJyZW50WWVhcgogICAgICAgICAgKTsKICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoCiAgICAgICAgICAgIG5vcm1hbGl6ZWRUd29EaWdpdFllYXIsCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlCiAgICAgICAgICApOwogICAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICAgIHJldHVybiBzdGFydE9mV2VlayhkYXRlLCBvcHRpb25zKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgeWVhciA9ICEoImVyYSIgaW4gZmxhZ3MpIHx8IGZsYWdzLmVyYSA9PT0gMSA/IHZhbHVlMi55ZWFyIDogMSAtIHZhbHVlMi55ZWFyOwogICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeWVhciwgMCwgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIHN0YXJ0T2ZXZWVrKGRhdGUsIG9wdGlvbnMpOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAieSIsCiAgICAgICAgIlIiLAogICAgICAgICJ1IiwKICAgICAgICAiUSIsCiAgICAgICAgInEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtZZWFyUGFyc2VyLmpzCnZhciBJU09XZWVrWWVhclBhcnNlcjsKdmFyIGluaXRfSVNPV2Vla1llYXJQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtZZWFyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIElTT1dlZWtZZWFyUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEzMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4pIHsKICAgICAgICBpZiAodG9rZW4gPT09ICJSIikgewogICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0c1NpZ25lZCg0LCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0c1NpZ25lZCh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGNvbnN0IGZpcnN0V2Vla09mWWVhciA9IGNvbnN0cnVjdEZyb20oZGF0ZSwgMCk7CiAgICAgICAgZmlyc3RXZWVrT2ZZZWFyLnNldEZ1bGxZZWFyKHZhbHVlMiwgMCwgNCk7CiAgICAgICAgZmlyc3RXZWVrT2ZZZWFyLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBzdGFydE9mSVNPV2VlayhmaXJzdFdlZWtPZlllYXIpOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiRyIsCiAgICAgICAgInkiLAogICAgICAgICJZIiwKICAgICAgICAidSIsCiAgICAgICAgIlEiLAogICAgICAgICJxIiwKICAgICAgICAiTSIsCiAgICAgICAgIkwiLAogICAgICAgICJ3IiwKICAgICAgICAiZCIsCiAgICAgICAgIkQiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRXh0ZW5kZWRZZWFyUGFyc2VyLmpzCnZhciBFeHRlbmRlZFllYXJQYXJzZXI7CnZhciBpbml0X0V4dGVuZGVkWWVhclBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRXh0ZW5kZWRZZWFyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBFeHRlbmRlZFllYXJQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTMwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbikgewogICAgICAgIGlmICh0b2tlbiA9PT0gInUiKSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzU2lnbmVkKDQsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzU2lnbmVkKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih2YWx1ZTIsIDAsIDEpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJHIiwgInkiLCAiWSIsICJSIiwgInciLCAiSSIsICJpIiwgImUiLCAiYyIsICJ0IiwgIlQiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1F1YXJ0ZXJQYXJzZXIuanMKdmFyIFF1YXJ0ZXJQYXJzZXI7CnZhciBpbml0X1F1YXJ0ZXJQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1F1YXJ0ZXJQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFF1YXJ0ZXJQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTIwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMSwgMiwgMywgNAogICAgICAgICAgY2FzZSAiUSI6CiAgICAgICAgICBjYXNlICJRUSI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aAogICAgICAgICAgY2FzZSAiUW8iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiAicXVhcnRlciIgfSk7CiAgICAgICAgICAvLyBRMSwgUTIsIFEzLCBRNAogICAgICAgICAgY2FzZSAiUVFRIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLnF1YXJ0ZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbCkKICAgICAgICAgIGNhc2UgIlFRUVFRIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4KICAgICAgICAgIGNhc2UgIlFRUVEiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAxICYmIHZhbHVlMiA8PSA0OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0TW9udGgoKHZhbHVlMiAtIDEpICogMywgMSk7CiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbCiAgICAgICAgIlkiLAogICAgICAgICJSIiwKICAgICAgICAicSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIuanMKdmFyIFN0YW5kQWxvbmVRdWFydGVyUGFyc2VyOwp2YXIgaW5pdF9TdGFuZEFsb25lUXVhcnRlclBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFN0YW5kQWxvbmVRdWFydGVyUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEyMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIDEsIDIsIDMsIDQKICAgICAgICAgIGNhc2UgInEiOgogICAgICAgICAgY2FzZSAicXEiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGgKICAgICAgICAgIGNhc2UgInFvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogInF1YXJ0ZXIiIH0pOwogICAgICAgICAgLy8gUTEsIFEyLCBRMywgUTQKICAgICAgICAgIGNhc2UgInFxcSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpCiAgICAgICAgICBjYXNlICJxcXFxcSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uCiAgICAgICAgICBjYXNlICJxcXFxIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLnF1YXJ0ZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gNDsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldE1vbnRoKCh2YWx1ZTIgLSAxKSAqIDMsIDEpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJZIiwKICAgICAgICAiUiIsCiAgICAgICAgIlEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgInciLAogICAgICAgICJJIiwKICAgICAgICAiZCIsCiAgICAgICAgIkQiLAogICAgICAgICJpIiwKICAgICAgICAiZSIsCiAgICAgICAgImMiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL01vbnRoUGFyc2VyLmpzCnZhciBNb250aFBhcnNlcjsKdmFyIGluaXRfTW9udGhQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL01vbnRoUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIE1vbnRoUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbCiAgICAgICAgIlkiLAogICAgICAgICJSIiwKICAgICAgICAicSIsCiAgICAgICAgIlEiLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgIkkiLAogICAgICAgICJEIiwKICAgICAgICAiaSIsCiAgICAgICAgImUiLAogICAgICAgICJjIiwKICAgICAgICAidCIsCiAgICAgICAgIlQiCiAgICAgIF07CiAgICAgIHByaW9yaXR5ID0gMTEwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgY29uc3QgdmFsdWVDYWxsYmFjayA9ICh2YWx1ZTIpID0+IHZhbHVlMiAtIDE7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMSwgMiwgLi4uLCAxMgogICAgICAgICAgY2FzZSAiTSI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5tb250aCwgZGF0ZVN0cmluZyksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gMDEsIDAyLCAuLi4sIDEyCiAgICAgICAgICBjYXNlICJNTSI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHMoMiwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spOwogICAgICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aAogICAgICAgICAgY2FzZSAiTW8iOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUoCiAgICAgICAgICAgICAgbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgdW5pdDogIm1vbnRoIgogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIHZhbHVlQ2FsbGJhY2sKICAgICAgICAgICAgKTsKICAgICAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlYwogICAgICAgICAgY2FzZSAiTU1NIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gSiwgRiwgLi4uLCBECiAgICAgICAgICBjYXNlICJNTU1NTSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIubW9udGgoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlcgogICAgICAgICAgY2FzZSAiTU1NTSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJ3aWRlIiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pIHx8IG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSAxMTsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldE1vbnRoKHZhbHVlMiwgMSk7CiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZU1vbnRoUGFyc2VyLmpzCnZhciBTdGFuZEFsb25lTW9udGhQYXJzZXI7CnZhciBpbml0X1N0YW5kQWxvbmVNb250aFBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZU1vbnRoUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFN0YW5kQWxvbmVNb250aFBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxMTA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBjb25zdCB2YWx1ZUNhbGxiYWNrID0gKHZhbHVlMikgPT4gdmFsdWUyIC0gMTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyAxLCAyLCAuLi4sIDEyCiAgICAgICAgICBjYXNlICJMIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLm1vbnRoLCBkYXRlU3RyaW5nKSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICAvLyAwMSwgMDIsIC4uLiwgMTIKICAgICAgICAgIGNhc2UgIkxMIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cygyLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoCiAgICAgICAgICBjYXNlICJMbyI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB1bml0OiAibW9udGgiCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjCiAgICAgICAgICBjYXNlICJMTEwiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSk7CiAgICAgICAgICAvLyBKLCBGLCAuLi4sIEQKICAgICAgICAgIGNhc2UgIkxMTExMIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyCiAgICAgICAgICBjYXNlICJMTExMIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIubW9udGgoZGF0ZVN0cmluZywgeyB3aWR0aDogIndpZGUiLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSkgfHwgbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDAgJiYgdmFsdWUyIDw9IDExOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0TW9udGgodmFsdWUyLCAxKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiWSIsCiAgICAgICAgIlIiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJ3IiwKICAgICAgICAiSSIsCiAgICAgICAgIkQiLAogICAgICAgICJpIiwKICAgICAgICAiZSIsCiAgICAgICAgImMiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0V2Vlay5qcwpmdW5jdGlvbiBzZXRXZWVrKGRhdGUsIHdlZWssIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGlmZiA9IGdldFdlZWsoZGF0ZV8sIG9wdGlvbnMpIC0gd2VlazsKICBkYXRlXy5zZXREYXRlKGRhdGVfLmdldERhdGUoKSAtIGRpZmYgKiA3KTsKICByZXR1cm4gdG9EYXRlKGRhdGVfLCBvcHRpb25zPy5pbik7Cn0KdmFyIHNldFdlZWtfZGVmYXVsdDsKdmFyIGluaXRfc2V0V2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRXZWVrLmpzIigpIHsKICAgIGluaXRfZ2V0V2VlaygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldFdlZWtfZGVmYXVsdCA9IHNldFdlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsV2Vla1BhcnNlci5qcwp2YXIgTG9jYWxXZWVrUGFyc2VyOwp2YXIgaW5pdF9Mb2NhbFdlZWtQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsV2Vla1BhcnNlci5qcyIoKSB7CiAgICBpbml0X3NldFdlZWsoKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIExvY2FsV2Vla1BhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxMDA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJ3IjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLndlZWssIGRhdGVTdHJpbmcpOwogICAgICAgICAgY2FzZSAid28iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiAid2VlayIgfSk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IDUzOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiBzdGFydE9mV2VlayhzZXRXZWVrKGRhdGUsIHZhbHVlMiwgb3B0aW9ucyksIG9wdGlvbnMpOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAieSIsCiAgICAgICAgIlIiLAogICAgICAgICJ1IiwKICAgICAgICAicSIsCiAgICAgICAgIlEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SVNPV2Vlay5qcwpmdW5jdGlvbiBzZXRJU09XZWVrKGRhdGUsIHdlZWssIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGlmZiA9IGdldElTT1dlZWsoX2RhdGUsIG9wdGlvbnMpIC0gd2VlazsKICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSAtIGRpZmYgKiA3KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHNldElTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfc2V0SVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRJU09XZWVrLmpzIigpIHsKICAgIGluaXRfZ2V0SVNPV2VlaygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldElTT1dlZWtfZGVmYXVsdCA9IHNldElTT1dlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtQYXJzZXIuanMKdmFyIElTT1dlZWtQYXJzZXI7CnZhciBpbml0X0lTT1dlZWtQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtQYXJzZXIuanMiKCkgewogICAgaW5pdF9zZXRJU09XZWVrKCk7CiAgICBpbml0X3N0YXJ0T2ZJU09XZWVrKCk7CiAgICBpbml0X2NvbnN0YW50czIoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBJU09XZWVrUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEwMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgIkkiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMud2VlaywgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJJbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJ3ZWVrIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gNTM7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHN0YXJ0T2ZJU09XZWVrKHNldElTT1dlZWsoZGF0ZSwgdmFsdWUyKSk7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJ5IiwKICAgICAgICAiWSIsCiAgICAgICAgInUiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgImQiLAogICAgICAgICJEIiwKICAgICAgICAiZSIsCiAgICAgICAgImMiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0RhdGVQYXJzZXIuanMKdmFyIERBWVNfSU5fTU9OVEgsIERBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSLCBEYXRlUGFyc2VyOwp2YXIgaW5pdF9EYXRlUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9EYXRlUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIERBWVNfSU5fTU9OVEggPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07CiAgICBEQVlTX0lOX01PTlRIX0xFQVBfWUVBUiA9IFsKICAgICAgMzEsCiAgICAgIDI5LAogICAgICAzMSwKICAgICAgMzAsCiAgICAgIDMxLAogICAgICAzMCwKICAgICAgMzEsCiAgICAgIDMxLAogICAgICAzMCwKICAgICAgMzEsCiAgICAgIDMwLAogICAgICAzMQogICAgXTsKICAgIERhdGVQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gOTA7CiAgICAgIHN1YlByaW9yaXR5ID0gMTsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImQiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuZGF0ZSwgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJkbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJkYXRlIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICBjb25zdCBpc0xlYXBZZWFyMiA9IGlzTGVhcFllYXJJbmRleCh5ZWFyKTsKICAgICAgICBjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTsKICAgICAgICBpZiAoaXNMZWFwWWVhcjIpIHsKICAgICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gREFZU19JTl9NT05USF9MRUFQX1lFQVJbbW9udGhdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IERBWVNfSU5fTU9OVEhbbW9udGhdOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldERhdGUodmFsdWUyKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiWSIsCiAgICAgICAgIlIiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgInciLAogICAgICAgICJJIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5T2ZZZWFyUGFyc2VyLmpzCnZhciBEYXlPZlllYXJQYXJzZXI7CnZhciBpbml0X0RheU9mWWVhclBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5T2ZZZWFyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIERheU9mWWVhclBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA5MDsKICAgICAgc3VicHJpb3JpdHkgPSAxOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiRCI6CiAgICAgICAgICBjYXNlICJERCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5kYXlPZlllYXIsIGRhdGVTdHJpbmcpOwogICAgICAgICAgY2FzZSAiRG8iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiAiZGF0ZSIgfSk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKGRhdGUsIHZhbHVlMikgewogICAgICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7CiAgICAgICAgY29uc3QgaXNMZWFwWWVhcjIgPSBpc0xlYXBZZWFySW5kZXgoeWVhcik7CiAgICAgICAgaWYgKGlzTGVhcFllYXIyKSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IDM2NjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAxICYmIHZhbHVlMiA8PSAzNjU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0TW9udGgoMCwgdmFsdWUyKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiWSIsCiAgICAgICAgIlIiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRSIsCiAgICAgICAgImkiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXREYXkuanMKZnVuY3Rpb24gc2V0RGF5KGRhdGUsIGRheSwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3Qgd2Vla1N0YXJ0c09uID0gb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IDA7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGN1cnJlbnREYXkgPSBkYXRlXy5nZXREYXkoKTsKICBjb25zdCByZW1haW5kZXIgPSBkYXkgJSA3OwogIGNvbnN0IGRheUluZGV4ID0gKHJlbWFpbmRlciArIDcpICUgNzsKICBjb25zdCBkZWx0YSA9IDcgLSB3ZWVrU3RhcnRzT247CiAgY29uc3QgZGlmZiA9IGRheSA8IDAgfHwgZGF5ID4gNiA/IGRheSAtIChjdXJyZW50RGF5ICsgZGVsdGEpICUgNyA6IChkYXlJbmRleCArIGRlbHRhKSAlIDcgLSAoY3VycmVudERheSArIGRlbHRhKSAlIDc7CiAgcmV0dXJuIGFkZERheXMoZGF0ZV8sIGRpZmYsIG9wdGlvbnMpOwp9CnZhciBzZXREYXlfZGVmYXVsdDsKdmFyIGluaXRfc2V0RGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERheS5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X2FkZERheXMoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXREYXlfZGVmYXVsdCA9IHNldERheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5UGFyc2VyLmpzCnZhciBEYXlQYXJzZXI7CnZhciBpbml0X0RheVBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5UGFyc2VyLmpzIigpIHsKICAgIGluaXRfc2V0RGF5KCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgRGF5UGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDkwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gVHVlCiAgICAgICAgICBjYXNlICJFIjoKICAgICAgICAgIGNhc2UgIkVFIjoKICAgICAgICAgIGNhc2UgIkVFRSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gVAogICAgICAgICAgY2FzZSAiRUVFRUUiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJFRUVFRUUiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gVHVlc2RheQogICAgICAgICAgY2FzZSAiRUVFRSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAid2lkZSIsIGNvbnRleHQ6ICJmb3JtYXR0aW5nIiB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSA2OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMiwgb3B0aW9ucykgewogICAgICAgIGRhdGUgPSBzZXREYXkoZGF0ZSwgdmFsdWUyLCBvcHRpb25zKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsiRCIsICJpIiwgImUiLCAiYyIsICJ0IiwgIlQiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsRGF5UGFyc2VyLmpzCnZhciBMb2NhbERheVBhcnNlcjsKdmFyIGluaXRfTG9jYWxEYXlQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsRGF5UGFyc2VyLmpzIigpIHsKICAgIGluaXRfc2V0RGF5KCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgTG9jYWxEYXlQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gOTA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCB2YWx1ZUNhbGxiYWNrID0gKHZhbHVlMikgPT4gewogICAgICAgICAgY29uc3Qgd2hvbGVXZWVrRGF5cyA9IE1hdGguZmxvb3IoKHZhbHVlMiAtIDEpIC8gNykgKiA3OwogICAgICAgICAgcmV0dXJuICh2YWx1ZTIgKyBvcHRpb25zLndlZWtTdGFydHNPbiArIDYpICUgNyArIHdob2xlV2Vla0RheXM7CiAgICAgICAgfTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyAzCiAgICAgICAgICBjYXNlICJlIjoKICAgICAgICAgIGNhc2UgImVlIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpLCB2YWx1ZUNhbGxiYWNrKTsKICAgICAgICAgIC8vIDNyZAogICAgICAgICAgY2FzZSAiZW8iOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUoCiAgICAgICAgICAgICAgbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgdW5pdDogImRheSIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICAvLyBUdWUKICAgICAgICAgIGNhc2UgImVlZSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gVAogICAgICAgICAgY2FzZSAiZWVlZWUiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJlZWVlZWUiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gVHVlc2RheQogICAgICAgICAgY2FzZSAiZWVlZSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAid2lkZSIsIGNvbnRleHQ6ICJmb3JtYXR0aW5nIiB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSA2OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMiwgb3B0aW9ucykgewogICAgICAgIGRhdGUgPSBzZXREYXkoZGF0ZSwgdmFsdWUyLCBvcHRpb25zKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAieSIsCiAgICAgICAgIlIiLAogICAgICAgICJ1IiwKICAgICAgICAicSIsCiAgICAgICAgIlEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgIkUiLAogICAgICAgICJpIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyLmpzCnZhciBTdGFuZEFsb25lTG9jYWxEYXlQYXJzZXI7CnZhciBpbml0X1N0YW5kQWxvbmVMb2NhbERheVBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyLmpzIigpIHsKICAgIGluaXRfc2V0RGF5KCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDkwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgdmFsdWVDYWxsYmFjayA9ICh2YWx1ZTIpID0+IHsKICAgICAgICAgIGNvbnN0IHdob2xlV2Vla0RheXMgPSBNYXRoLmZsb29yKCh2YWx1ZTIgLSAxKSAvIDcpICogNzsKICAgICAgICAgIHJldHVybiAodmFsdWUyICsgb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA2KSAlIDcgKyB3aG9sZVdlZWtEYXlzOwogICAgICAgIH07CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMwogICAgICAgICAgY2FzZSAiYyI6CiAgICAgICAgICBjYXNlICJjYyI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgICAvLyAzcmQKICAgICAgICAgIGNhc2UgImNvIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHVuaXQ6ICJkYXkiCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gVHVlCiAgICAgICAgICBjYXNlICJjY2MiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogInNob3J0IiwgY29udGV4dDogInN0YW5kYWxvbmUiIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogIm5hcnJvdyIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICAgIC8vIFQKICAgICAgICAgIGNhc2UgImNjY2NjIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdQogICAgICAgICAgY2FzZSAiY2NjY2NjIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogInNob3J0IiwgY29udGV4dDogInN0YW5kYWxvbmUiIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogIm5hcnJvdyIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICAgIC8vIFR1ZXNkYXkKICAgICAgICAgIGNhc2UgImNjY2MiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogIndpZGUiLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogInNob3J0IiwgY29udGV4dDogInN0YW5kYWxvbmUiIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogIm5hcnJvdyIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMCAmJiB2YWx1ZTIgPD0gNjsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIsIG9wdGlvbnMpIHsKICAgICAgICBkYXRlID0gc2V0RGF5KGRhdGUsIHZhbHVlMiwgb3B0aW9ucyk7CiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbCiAgICAgICAgInkiLAogICAgICAgICJSIiwKICAgICAgICAidSIsCiAgICAgICAgInEiLAogICAgICAgICJRIiwKICAgICAgICAiTSIsCiAgICAgICAgIkwiLAogICAgICAgICJJIiwKICAgICAgICAiZCIsCiAgICAgICAgIkQiLAogICAgICAgICJFIiwKICAgICAgICAiaSIsCiAgICAgICAgImUiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SVNPRGF5LmpzCmZ1bmN0aW9uIHNldElTT0RheShkYXRlLCBkYXksIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgY3VycmVudERheSA9IGdldElTT0RheShkYXRlXywgb3B0aW9ucyk7CiAgY29uc3QgZGlmZiA9IGRheSAtIGN1cnJlbnREYXk7CiAgcmV0dXJuIGFkZERheXMoZGF0ZV8sIGRpZmYsIG9wdGlvbnMpOwp9CnZhciBzZXRJU09EYXlfZGVmYXVsdDsKdmFyIGluaXRfc2V0SVNPRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldElTT0RheS5qcyIoKSB7CiAgICBpbml0X2FkZERheXMoKTsKICAgIGluaXRfZ2V0SVNPRGF5KCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0SVNPRGF5X2RlZmF1bHQgPSBzZXRJU09EYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT0RheVBhcnNlci5qcwp2YXIgSVNPRGF5UGFyc2VyOwp2YXIgaW5pdF9JU09EYXlQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT0RheVBhcnNlci5qcyIoKSB7CiAgICBpbml0X3NldElTT0RheSgpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIElTT0RheVBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA5MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAodmFsdWUyKSA9PiB7CiAgICAgICAgICBpZiAodmFsdWUyID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiA3OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHZhbHVlMjsKICAgICAgICB9OwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIDIKICAgICAgICAgIGNhc2UgImkiOgogICAgICAgICAgY2FzZSAiaWkiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgICAvLyAybmQKICAgICAgICAgIGNhc2UgImlvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogImRheSIgfSk7CiAgICAgICAgICAvLyBUdWUKICAgICAgICAgIGNhc2UgImlpaSI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gVAogICAgICAgICAgY2FzZSAiaWlpaWkiOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUoCiAgICAgICAgICAgICAgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICAvLyBUdQogICAgICAgICAgY2FzZSAiaWlpaWlpIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJzaG9ydCIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIHZhbHVlQ2FsbGJhY2sKICAgICAgICAgICAgKTsKICAgICAgICAgIC8vIFR1ZXNkYXkKICAgICAgICAgIGNhc2UgImlpaWkiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAic2hvcnQiLAogICAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IDc7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZSA9IHNldElTT0RheShkYXRlLCB2YWx1ZTIpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJ5IiwKICAgICAgICAiWSIsCiAgICAgICAgInUiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgImQiLAogICAgICAgICJEIiwKICAgICAgICAiRSIsCiAgICAgICAgImUiLAogICAgICAgICJjIiwKICAgICAgICAidCIsCiAgICAgICAgIlQiCiAgICAgIF07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9BTVBNUGFyc2VyLmpzCnZhciBBTVBNUGFyc2VyOwp2YXIgaW5pdF9BTVBNUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9BTVBNUGFyc2VyLmpzIigpIHsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBBTVBNUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDgwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiYSI6CiAgICAgICAgICBjYXNlICJhYSI6CiAgICAgICAgICBjYXNlICJhYWEiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlICJhYWFhYSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiYWFhYSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0SG91cnMoZGF5UGVyaW9kRW51bVRvSG91cnModmFsdWUyKSwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJiIiwgIkIiLCAiSCIsICJrIiwgInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvQU1QTU1pZG5pZ2h0UGFyc2VyLmpzCnZhciBBTVBNTWlkbmlnaHRQYXJzZXI7CnZhciBpbml0X0FNUE1NaWRuaWdodFBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvQU1QTU1pZG5pZ2h0UGFyc2VyLmpzIigpIHsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBBTVBNTWlkbmlnaHRQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gODA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJiIjoKICAgICAgICAgIGNhc2UgImJiIjoKICAgICAgICAgIGNhc2UgImJiYiI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgImJiYmJiIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlICJiYmJiIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZS5zZXRIb3VycyhkYXlQZXJpb2RFbnVtVG9Ib3Vycyh2YWx1ZTIpLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbImEiLCAiQiIsICJIIiwgImsiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9EYXlQZXJpb2RQYXJzZXIuanMKdmFyIERheVBlcmlvZFBhcnNlcjsKdmFyIGluaXRfRGF5UGVyaW9kUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9EYXlQZXJpb2RQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIERheVBlcmlvZFBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA4MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgIkIiOgogICAgICAgICAgY2FzZSAiQkIiOgogICAgICAgICAgY2FzZSAiQkJCIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiQkJCQkIiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgIkJCQkIiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldEhvdXJzKGRheVBlcmlvZEVudW1Ub0hvdXJzKHZhbHVlMiksIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsiYSIsICJiIiwgInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSG91cjF0bzEyUGFyc2VyLmpzCnZhciBIb3VyMXRvMTJQYXJzZXI7CnZhciBpbml0X0hvdXIxdG8xMlBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSG91cjF0bzEyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIEhvdXIxdG8xMlBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA3MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImgiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuaG91cjEyaCwgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJobyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJob3VyIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gMTI7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgY29uc3QgaXNQTSA9IGRhdGUuZ2V0SG91cnMoKSA+PSAxMjsKICAgICAgICBpZiAoaXNQTSAmJiB2YWx1ZTIgPCAxMikgewogICAgICAgICAgZGF0ZS5zZXRIb3Vycyh2YWx1ZTIgKyAxMiwgMCwgMCwgMCk7CiAgICAgICAgfSBlbHNlIGlmICghaXNQTSAmJiB2YWx1ZTIgPT09IDEyKSB7CiAgICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkYXRlLnNldEhvdXJzKHZhbHVlMiwgMCwgMCwgMCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsiSCIsICJLIiwgImsiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMHRvMjNQYXJzZXIuanMKdmFyIEhvdXIwdG8yM1BhcnNlcjsKdmFyIGluaXRfSG91cjB0bzIzUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMHRvMjNQYXJzZXIuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSG91cjB0bzIzUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDcwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiSCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5ob3VyMjNoLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgIkhvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogImhvdXIiIH0pOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSAyMzsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldEhvdXJzKHZhbHVlMiwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJhIiwgImIiLCAiaCIsICJLIiwgImsiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMFRvMTFQYXJzZXIuanMKdmFyIEhvdXIwVG8xMVBhcnNlcjsKdmFyIGluaXRfSG91cjBUbzExUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMFRvMTFQYXJzZXIuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSG91cjBUbzExUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDcwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiSyI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5ob3VyMTFoLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgIktvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogImhvdXIiIH0pOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSAxMTsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBjb25zdCBpc1BNID0gZGF0ZS5nZXRIb3VycygpID49IDEyOwogICAgICAgIGlmIChpc1BNICYmIHZhbHVlMiA8IDEyKSB7CiAgICAgICAgICBkYXRlLnNldEhvdXJzKHZhbHVlMiArIDEyLCAwLCAwLCAwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0ZS5zZXRIb3Vycyh2YWx1ZTIsIDAsIDAsIDApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbImgiLCAiSCIsICJrIiwgInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSG91cjFUbzI0UGFyc2VyLmpzCnZhciBIb3VyMVRvMjRQYXJzZXI7CnZhciBpbml0X0hvdXIxVG8yNFBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSG91cjFUbzI0UGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIEhvdXIxVG8yNFBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA3MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImsiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuaG91cjI0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJrbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJob3VyIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gMjQ7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgY29uc3QgaG91cnMgPSB2YWx1ZTIgPD0gMjQgPyB2YWx1ZTIgJSAyNCA6IHZhbHVlMjsKICAgICAgICBkYXRlLnNldEhvdXJzKGhvdXJzLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbImEiLCAiYiIsICJoIiwgIkgiLCAiSyIsICJ0IiwgIlQiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL01pbnV0ZVBhcnNlci5qcwp2YXIgTWludXRlUGFyc2VyOwp2YXIgaW5pdF9NaW51dGVQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL01pbnV0ZVBhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50czIoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBNaW51dGVQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gNjA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJtIjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLm1pbnV0ZSwgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJtbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJtaW51dGUiIH0pOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSA1OTsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldE1pbnV0ZXModmFsdWUyLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU2Vjb25kUGFyc2VyLmpzCnZhciBTZWNvbmRQYXJzZXI7CnZhciBpbml0X1NlY29uZFBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU2Vjb25kUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFNlY29uZFBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA1MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgInMiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuc2Vjb25kLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgInNvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogInNlY29uZCIgfSk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDAgJiYgdmFsdWUyIDw9IDU5OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0U2Vjb25kcyh2YWx1ZTIsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9GcmFjdGlvbk9mU2Vjb25kUGFyc2VyLmpzCnZhciBGcmFjdGlvbk9mU2Vjb25kUGFyc2VyOwp2YXIgaW5pdF9GcmFjdGlvbk9mU2Vjb25kUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9GcmFjdGlvbk9mU2Vjb25kUGFyc2VyLmpzIigpIHsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBGcmFjdGlvbk9mU2Vjb25kUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDMwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbikgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAodmFsdWUyKSA9PiBNYXRoLnRydW5jKHZhbHVlMiAqIE1hdGgucG93KDEwLCAtdG9rZW4ubGVuZ3RoICsgMykpOwogICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHModmFsdWUyKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSVNPVGltZXpvbmVXaXRoWlBhcnNlci5qcwp2YXIgSVNPVGltZXpvbmVXaXRoWlBhcnNlcjsKdmFyIGluaXRfSVNPVGltZXpvbmVXaXRoWlBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSVNPVGltZXpvbmVXaXRoWlBhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSVNPVGltZXpvbmVXaXRoWlBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4pIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJYIjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKAogICAgICAgICAgICAgIHRpbWV6b25lUGF0dGVybnMuYmFzaWNPcHRpb25hbE1pbnV0ZXMsCiAgICAgICAgICAgICAgZGF0ZVN0cmluZwogICAgICAgICAgICApOwogICAgICAgICAgY2FzZSAiWFgiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4odGltZXpvbmVQYXR0ZXJucy5iYXNpYywgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJYWFhYIjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKAogICAgICAgICAgICAgIHRpbWV6b25lUGF0dGVybnMuYmFzaWNPcHRpb25hbFNlY29uZHMsCiAgICAgICAgICAgICAgZGF0ZVN0cmluZwogICAgICAgICAgICApOwogICAgICAgICAgY2FzZSAiWFhYWFgiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4oCiAgICAgICAgICAgICAgdGltZXpvbmVQYXR0ZXJucy5leHRlbmRlZE9wdGlvbmFsU2Vjb25kcywKICAgICAgICAgICAgICBkYXRlU3RyaW5nCiAgICAgICAgICAgICk7CiAgICAgICAgICBjYXNlICJYWFgiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKHRpbWV6b25lUGF0dGVybnMuZXh0ZW5kZWQsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXQoZGF0ZSwgZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGlmIChmbGFncy50aW1lc3RhbXBJc1NldCkgcmV0dXJuIGRhdGU7CiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEZyb20oCiAgICAgICAgICBkYXRlLAogICAgICAgICAgZGF0ZS5nZXRUaW1lKCkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIC0gdmFsdWUyCiAgICAgICAgKTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbInQiLCAiVCIsICJ4Il07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9JU09UaW1lem9uZVBhcnNlci5qcwp2YXIgSVNPVGltZXpvbmVQYXJzZXI7CnZhciBpbml0X0lTT1RpbWV6b25lUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9JU09UaW1lem9uZVBhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSVNPVGltZXpvbmVQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAieCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybigKICAgICAgICAgICAgICB0aW1lem9uZVBhdHRlcm5zLmJhc2ljT3B0aW9uYWxNaW51dGVzLAogICAgICAgICAgICAgIGRhdGVTdHJpbmcKICAgICAgICAgICAgKTsKICAgICAgICAgIGNhc2UgInh4IjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKHRpbWV6b25lUGF0dGVybnMuYmFzaWMsIGRhdGVTdHJpbmcpOwogICAgICAgICAgY2FzZSAieHh4eCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybigKICAgICAgICAgICAgICB0aW1lem9uZVBhdHRlcm5zLmJhc2ljT3B0aW9uYWxTZWNvbmRzLAogICAgICAgICAgICAgIGRhdGVTdHJpbmcKICAgICAgICAgICAgKTsKICAgICAgICAgIGNhc2UgInh4eHh4IjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKAogICAgICAgICAgICAgIHRpbWV6b25lUGF0dGVybnMuZXh0ZW5kZWRPcHRpb25hbFNlY29uZHMsCiAgICAgICAgICAgICAgZGF0ZVN0cmluZwogICAgICAgICAgICApOwogICAgICAgICAgY2FzZSAieHh4IjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmV4dGVuZGVkLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBpZiAoZmxhZ3MudGltZXN0YW1wSXNTZXQpIHJldHVybiBkYXRlOwogICAgICAgIHJldHVybiBjb25zdHJ1Y3RGcm9tKAogICAgICAgICAgZGF0ZSwKICAgICAgICAgIGRhdGUuZ2V0VGltZSgpIC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkYXRlKSAtIHZhbHVlMgogICAgICAgICk7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJ0IiwgIlQiLCAiWCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvVGltZXN0YW1wU2Vjb25kc1BhcnNlci5qcwp2YXIgVGltZXN0YW1wU2Vjb25kc1BhcnNlcjsKdmFyIGluaXRfVGltZXN0YW1wU2Vjb25kc1BhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvVGltZXN0YW1wU2Vjb25kc1BhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBUaW1lc3RhbXBTZWNvbmRzUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDQwOwogICAgICBwYXJzZShkYXRlU3RyaW5nKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlQW55RGlnaXRzU2lnbmVkKGRhdGVTdHJpbmcpOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIHJldHVybiBbY29uc3RydWN0RnJvbShkYXRlLCB2YWx1ZTIgKiAxZTMpLCB7IHRpbWVzdGFtcElzU2V0OiB0cnVlIH1dOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9ICIqIjsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1RpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlci5qcwp2YXIgVGltZXN0YW1wTWlsbGlzZWNvbmRzUGFyc2VyOwp2YXIgaW5pdF9UaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1RpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBUaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMjA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcpIHsKICAgICAgICByZXR1cm4gcGFyc2VBbnlEaWdpdHNTaWduZWQoZGF0ZVN0cmluZyk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIFtjb25zdHJ1Y3RGcm9tKGRhdGUsIHZhbHVlMiksIHsgdGltZXN0YW1wSXNTZXQ6IHRydWUgfV07CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gIioiOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMuanMKdmFyIHBhcnNlcnM7CnZhciBpbml0X3BhcnNlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzLmpzIigpIHsKICAgIGluaXRfRXJhUGFyc2VyKCk7CiAgICBpbml0X1llYXJQYXJzZXIoKTsKICAgIGluaXRfTG9jYWxXZWVrWWVhclBhcnNlcigpOwogICAgaW5pdF9JU09XZWVrWWVhclBhcnNlcigpOwogICAgaW5pdF9FeHRlbmRlZFllYXJQYXJzZXIoKTsKICAgIGluaXRfUXVhcnRlclBhcnNlcigpOwogICAgaW5pdF9TdGFuZEFsb25lUXVhcnRlclBhcnNlcigpOwogICAgaW5pdF9Nb250aFBhcnNlcigpOwogICAgaW5pdF9TdGFuZEFsb25lTW9udGhQYXJzZXIoKTsKICAgIGluaXRfTG9jYWxXZWVrUGFyc2VyKCk7CiAgICBpbml0X0lTT1dlZWtQYXJzZXIoKTsKICAgIGluaXRfRGF0ZVBhcnNlcigpOwogICAgaW5pdF9EYXlPZlllYXJQYXJzZXIoKTsKICAgIGluaXRfRGF5UGFyc2VyKCk7CiAgICBpbml0X0xvY2FsRGF5UGFyc2VyKCk7CiAgICBpbml0X1N0YW5kQWxvbmVMb2NhbERheVBhcnNlcigpOwogICAgaW5pdF9JU09EYXlQYXJzZXIoKTsKICAgIGluaXRfQU1QTVBhcnNlcigpOwogICAgaW5pdF9BTVBNTWlkbmlnaHRQYXJzZXIoKTsKICAgIGluaXRfRGF5UGVyaW9kUGFyc2VyKCk7CiAgICBpbml0X0hvdXIxdG8xMlBhcnNlcigpOwogICAgaW5pdF9Ib3VyMHRvMjNQYXJzZXIoKTsKICAgIGluaXRfSG91cjBUbzExUGFyc2VyKCk7CiAgICBpbml0X0hvdXIxVG8yNFBhcnNlcigpOwogICAgaW5pdF9NaW51dGVQYXJzZXIoKTsKICAgIGluaXRfU2Vjb25kUGFyc2VyKCk7CiAgICBpbml0X0ZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIoKTsKICAgIGluaXRfSVNPVGltZXpvbmVXaXRoWlBhcnNlcigpOwogICAgaW5pdF9JU09UaW1lem9uZVBhcnNlcigpOwogICAgaW5pdF9UaW1lc3RhbXBTZWNvbmRzUGFyc2VyKCk7CiAgICBpbml0X1RpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlcigpOwogICAgcGFyc2VycyA9IHsKICAgICAgRzogbmV3IEVyYVBhcnNlcigpLAogICAgICB5OiBuZXcgWWVhclBhcnNlcigpLAogICAgICBZOiBuZXcgTG9jYWxXZWVrWWVhclBhcnNlcigpLAogICAgICBSOiBuZXcgSVNPV2Vla1llYXJQYXJzZXIoKSwKICAgICAgdTogbmV3IEV4dGVuZGVkWWVhclBhcnNlcigpLAogICAgICBROiBuZXcgUXVhcnRlclBhcnNlcigpLAogICAgICBxOiBuZXcgU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIoKSwKICAgICAgTTogbmV3IE1vbnRoUGFyc2VyKCksCiAgICAgIEw6IG5ldyBTdGFuZEFsb25lTW9udGhQYXJzZXIoKSwKICAgICAgdzogbmV3IExvY2FsV2Vla1BhcnNlcigpLAogICAgICBJOiBuZXcgSVNPV2Vla1BhcnNlcigpLAogICAgICBkOiBuZXcgRGF0ZVBhcnNlcigpLAogICAgICBEOiBuZXcgRGF5T2ZZZWFyUGFyc2VyKCksCiAgICAgIEU6IG5ldyBEYXlQYXJzZXIoKSwKICAgICAgZTogbmV3IExvY2FsRGF5UGFyc2VyKCksCiAgICAgIGM6IG5ldyBTdGFuZEFsb25lTG9jYWxEYXlQYXJzZXIoKSwKICAgICAgaTogbmV3IElTT0RheVBhcnNlcigpLAogICAgICBhOiBuZXcgQU1QTVBhcnNlcigpLAogICAgICBiOiBuZXcgQU1QTU1pZG5pZ2h0UGFyc2VyKCksCiAgICAgIEI6IG5ldyBEYXlQZXJpb2RQYXJzZXIoKSwKICAgICAgaDogbmV3IEhvdXIxdG8xMlBhcnNlcigpLAogICAgICBIOiBuZXcgSG91cjB0bzIzUGFyc2VyKCksCiAgICAgIEs6IG5ldyBIb3VyMFRvMTFQYXJzZXIoKSwKICAgICAgazogbmV3IEhvdXIxVG8yNFBhcnNlcigpLAogICAgICBtOiBuZXcgTWludXRlUGFyc2VyKCksCiAgICAgIHM6IG5ldyBTZWNvbmRQYXJzZXIoKSwKICAgICAgUzogbmV3IEZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIoKSwKICAgICAgWDogbmV3IElTT1RpbWV6b25lV2l0aFpQYXJzZXIoKSwKICAgICAgeDogbmV3IElTT1RpbWV6b25lUGFyc2VyKCksCiAgICAgIHQ6IG5ldyBUaW1lc3RhbXBTZWNvbmRzUGFyc2VyKCksCiAgICAgIFQ6IG5ldyBUaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIoKQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS5qcwpmdW5jdGlvbiBwYXJzZShkYXRlU3RyLCBmb3JtYXRTdHIsIHJlZmVyZW5jZURhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBpbnZhbGlkRGF0ZSA9ICgpID0+IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgcmVmZXJlbmNlRGF0ZSwgTmFOKTsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9uczIoKTsKICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZSA/PyBlblVTOwogIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBkZWZhdWx0T3B0aW9uczIuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyAxOwogIGNvbnN0IHdlZWtTdGFydHNPbiA9IG9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwOwogIGlmICghZm9ybWF0U3RyKQogICAgcmV0dXJuIGRhdGVTdHIgPyBpbnZhbGlkRGF0ZSgpIDogdG9EYXRlKHJlZmVyZW5jZURhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBzdWJGbk9wdGlvbnMgPSB7CiAgICBmaXJzdFdlZWtDb250YWluc0RhdGUsCiAgICB3ZWVrU3RhcnRzT24sCiAgICBsb2NhbGUKICB9OwogIGNvbnN0IHNldHRlcnMgPSBbbmV3IERhdGVUaW1lem9uZVNldHRlcihvcHRpb25zPy5pbiwgcmVmZXJlbmNlRGF0ZSldOwogIGNvbnN0IHRva2VucyA9IGZvcm1hdFN0ci5tYXRjaChsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cDIpLm1hcCgoc3Vic3RyaW5nKSA9PiB7CiAgICBjb25zdCBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTsKICAgIGlmIChmaXJzdENoYXJhY3RlciBpbiBsb25nRm9ybWF0dGVycykgewogICAgICBjb25zdCBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdOwogICAgICByZXR1cm4gbG9uZ0Zvcm1hdHRlcihzdWJzdHJpbmcsIGxvY2FsZS5mb3JtYXRMb25nKTsKICAgIH0KICAgIHJldHVybiBzdWJzdHJpbmc7CiAgfSkuam9pbigiIikubWF0Y2goZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cDIpOwogIGNvbnN0IHVzZWRUb2tlbnMgPSBbXTsKICBmb3IgKGxldCB0b2tlbiBvZiB0b2tlbnMpIHsKICAgIGlmICghb3B0aW9ucz8udXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikpIHsKICAgICAgd2Fybk9yVGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0U3RyLCBkYXRlU3RyKTsKICAgIH0KICAgIGlmICghb3B0aW9ucz8udXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucyAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSkgewogICAgICB3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXRTdHIsIGRhdGVTdHIpOwogICAgfQogICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSB0b2tlblswXTsKICAgIGNvbnN0IHBhcnNlciA9IHBhcnNlcnNbZmlyc3RDaGFyYWN0ZXJdOwogICAgaWYgKHBhcnNlcikgewogICAgICBjb25zdCB7IGluY29tcGF0aWJsZVRva2VucyB9ID0gcGFyc2VyOwogICAgICBpZiAoQXJyYXkuaXNBcnJheShpbmNvbXBhdGlibGVUb2tlbnMpKSB7CiAgICAgICAgY29uc3QgaW5jb21wYXRpYmxlVG9rZW4gPSB1c2VkVG9rZW5zLmZpbmQoCiAgICAgICAgICAodXNlZFRva2VuKSA9PiBpbmNvbXBhdGlibGVUb2tlbnMuaW5jbHVkZXModXNlZFRva2VuLnRva2VuKSB8fCB1c2VkVG9rZW4udG9rZW4gPT09IGZpcnN0Q2hhcmFjdGVyCiAgICAgICAgKTsKICAgICAgICBpZiAoaW5jb21wYXRpYmxlVG9rZW4pIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKAogICAgICAgICAgICBgVGhlIGZvcm1hdCBzdHJpbmcgbXVzdG4ndCBjb250YWluIFxgJHtpbmNvbXBhdGlibGVUb2tlbi5mdWxsVG9rZW59XGAgYW5kIFxgJHt0b2tlbn1cYCBhdCB0aGUgc2FtZSB0aW1lYAogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAocGFyc2VyLmluY29tcGF0aWJsZVRva2VucyA9PT0gIioiICYmIHVzZWRUb2tlbnMubGVuZ3RoID4gMCkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKAogICAgICAgICAgYFRoZSBmb3JtYXQgc3RyaW5nIG11c3RuJ3QgY29udGFpbiBcYCR7dG9rZW59XGAgYW5kIGFueSBvdGhlciB0b2tlbiBhdCB0aGUgc2FtZSB0aW1lYAogICAgICAgICk7CiAgICAgIH0KICAgICAgdXNlZFRva2Vucy5wdXNoKHsgdG9rZW46IGZpcnN0Q2hhcmFjdGVyLCBmdWxsVG9rZW46IHRva2VuIH0pOwogICAgICBjb25zdCBwYXJzZVJlc3VsdCA9IHBhcnNlci5ydW4oCiAgICAgICAgZGF0ZVN0ciwKICAgICAgICB0b2tlbiwKICAgICAgICBsb2NhbGUubWF0Y2gsCiAgICAgICAgc3ViRm5PcHRpb25zCiAgICAgICk7CiAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKICAgICAgICByZXR1cm4gaW52YWxpZERhdGUoKTsKICAgICAgfQogICAgICBzZXR0ZXJzLnB1c2gocGFyc2VSZXN1bHQuc2V0dGVyKTsKICAgICAgZGF0ZVN0ciA9IHBhcnNlUmVzdWx0LnJlc3Q7CiAgICB9IGVsc2UgewogICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIubWF0Y2godW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAyKSkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKAogICAgICAgICAgIkZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgIiArIGZpcnN0Q2hhcmFjdGVyICsgImAiCiAgICAgICAgKTsKICAgICAgfQogICAgICBpZiAodG9rZW4gPT09ICInJyIpIHsKICAgICAgICB0b2tlbiA9ICInIjsKICAgICAgfSBlbHNlIGlmIChmaXJzdENoYXJhY3RlciA9PT0gIiciKSB7CiAgICAgICAgdG9rZW4gPSBjbGVhbkVzY2FwZWRTdHJpbmcyKHRva2VuKTsKICAgICAgfQogICAgICBpZiAoZGF0ZVN0ci5pbmRleE9mKHRva2VuKSA9PT0gMCkgewogICAgICAgIGRhdGVTdHIgPSBkYXRlU3RyLnNsaWNlKHRva2VuLmxlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGludmFsaWREYXRlKCk7CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKGRhdGVTdHIubGVuZ3RoID4gMCAmJiBub3RXaGl0ZXNwYWNlUmVnRXhwLnRlc3QoZGF0ZVN0cikpIHsKICAgIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogIH0KICBjb25zdCB1bmlxdWVQcmlvcml0eVNldHRlcnMgPSBzZXR0ZXJzLm1hcCgoc2V0dGVyKSA9PiBzZXR0ZXIucHJpb3JpdHkpLnNvcnQoKGE1LCBiNSkgPT4gYjUgLSBhNSkuZmlsdGVyKChwcmlvcml0eSwgaW5kZXgyLCBhcnJheSkgPT4gYXJyYXkuaW5kZXhPZihwcmlvcml0eSkgPT09IGluZGV4MikubWFwKAogICAgKHByaW9yaXR5KSA9PiBzZXR0ZXJzLmZpbHRlcigoc2V0dGVyKSA9PiBzZXR0ZXIucHJpb3JpdHkgPT09IHByaW9yaXR5KS5zb3J0KChhNSwgYjUpID0+IGI1LnN1YlByaW9yaXR5IC0gYTUuc3ViUHJpb3JpdHkpCiAgKS5tYXAoKHNldHRlckFycmF5KSA9PiBzZXR0ZXJBcnJheVswXSk7CiAgbGV0IGRhdGUgPSB0b0RhdGUocmVmZXJlbmNlRGF0ZSwgb3B0aW9ucz8uaW4pOwogIGlmIChpc05hTigrZGF0ZSkpIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogIGNvbnN0IGZsYWdzID0ge307CiAgZm9yIChjb25zdCBzZXR0ZXIgb2YgdW5pcXVlUHJpb3JpdHlTZXR0ZXJzKSB7CiAgICBpZiAoIXNldHRlci52YWxpZGF0ZShkYXRlLCBzdWJGbk9wdGlvbnMpKSB7CiAgICAgIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogICAgfQogICAgY29uc3QgcmVzdWx0ID0gc2V0dGVyLnNldChkYXRlLCBmbGFncywgc3ViRm5PcHRpb25zKTsKICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHsKICAgICAgZGF0ZSA9IHJlc3VsdFswXTsKICAgICAgT2JqZWN0LmFzc2lnbihmbGFncywgcmVzdWx0WzFdKTsKICAgIH0gZWxzZSB7CiAgICAgIGRhdGUgPSByZXN1bHQ7CiAgICB9CiAgfQogIHJldHVybiBkYXRlOwp9CmZ1bmN0aW9uIGNsZWFuRXNjYXBlZFN0cmluZzIoaW5wdXQpIHsKICByZXR1cm4gaW5wdXQubWF0Y2goZXNjYXBlZFN0cmluZ1JlZ0V4cDIpWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAyLCAiJyIpOwp9CnZhciBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwMiwgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAyLCBlc2NhcGVkU3RyaW5nUmVnRXhwMiwgZG91YmxlUXVvdGVSZWdFeHAyLCBub3RXaGl0ZXNwYWNlUmVnRXhwLCB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cDIsIHBhcnNlX2RlZmF1bHQ7CnZhciBpbml0X3BhcnNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdExvY2FsZSgpOwogICAgaW5pdF9sb25nRm9ybWF0dGVycygpOwogICAgaW5pdF9wcm90ZWN0ZWRUb2tlbnMoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9nZXREZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGluaXRfU2V0dGVyKCk7CiAgICBpbml0X3BhcnNlcnMoKTsKICAgIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAyID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFx3KVwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZzsKICAgIGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwMiA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nOwogICAgZXNjYXBlZFN0cmluZ1JlZ0V4cDIgPSAvXicoW15dKj8pJz8kLzsKICAgIGRvdWJsZVF1b3RlUmVnRXhwMiA9IC8nJy9nOwogICAgbm90V2hpdGVzcGFjZVJlZ0V4cCA9IC9cUy87CiAgICB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cDIgPSAvW2EtekEtWl0vOwogICAgcGFyc2VfZGVmYXVsdCA9IHBhcnNlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzTWF0Y2guanMKZnVuY3Rpb24gaXNNYXRjaDIoZGF0ZVN0ciwgZm9ybWF0U3RyLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzVmFsaWQocGFyc2UoZGF0ZVN0ciwgZm9ybWF0U3RyLCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgb3B0aW9ucykpOwp9CnZhciBpc01hdGNoX2RlZmF1bHQ7CnZhciBpbml0X2lzTWF0Y2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNNYXRjaC5qcyIoKSB7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfcGFyc2UoKTsKICAgIGlzTWF0Y2hfZGVmYXVsdCA9IGlzTWF0Y2gyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzTW9uZGF5LmpzCmZ1bmN0aW9uIGlzTW9uZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKSA9PT0gMTsKfQp2YXIgaXNNb25kYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNNb25kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNNb25kYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzTW9uZGF5X2RlZmF1bHQgPSBpc01vbmRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1Bhc3QuanMKZnVuY3Rpb24gaXNQYXN0KGRhdGUpIHsKICByZXR1cm4gK3RvRGF0ZShkYXRlKSA8IERhdGUubm93KCk7Cn0KdmFyIGlzUGFzdF9kZWZhdWx0Owp2YXIgaW5pdF9pc1Bhc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNQYXN0LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1Bhc3RfZGVmYXVsdCA9IGlzUGFzdDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSG91ci5qcwpmdW5jdGlvbiBzdGFydE9mSG91cihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldE1pbnV0ZXMoMCwgMCwgMCk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mSG91cl9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mSG91ciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSG91ci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc3RhcnRPZkhvdXJfZGVmYXVsdCA9IHN0YXJ0T2ZIb3VyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZUhvdXIuanMKZnVuY3Rpb24gaXNTYW1lSG91cihkYXRlTGVmdCwgZGF0ZVJpZ2h0LCBvcHRpb25zKSB7CiAgY29uc3QgW2RhdGVMZWZ0XywgZGF0ZVJpZ2h0X10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgZGF0ZUxlZnQsCiAgICBkYXRlUmlnaHQKICApOwogIHJldHVybiArc3RhcnRPZkhvdXIoZGF0ZUxlZnRfKSA9PT0gK3N0YXJ0T2ZIb3VyKGRhdGVSaWdodF8pOwp9CnZhciBpc1NhbWVIb3VyX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZUhvdXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lSG91ci5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X3N0YXJ0T2ZIb3VyKCk7CiAgICBpc1NhbWVIb3VyX2RlZmF1bHQgPSBpc1NhbWVIb3VyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZVdlZWsuanMKZnVuY3Rpb24gaXNTYW1lV2VlayhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIHJldHVybiArc3RhcnRPZldlZWsobGF0ZXJEYXRlXywgb3B0aW9ucykgPT09ICtzdGFydE9mV2VlayhlYXJsaWVyRGF0ZV8sIG9wdGlvbnMpOwp9CnZhciBpc1NhbWVXZWVrX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZVdlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lV2Vlay5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X3N0YXJ0T2ZXZWVrKCk7CiAgICBpc1NhbWVXZWVrX2RlZmF1bHQgPSBpc1NhbWVXZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZUlTT1dlZWsuanMKZnVuY3Rpb24gaXNTYW1lSVNPV2VlayhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZVdlZWsobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgeyAuLi5vcHRpb25zLCB3ZWVrU3RhcnRzT246IDEgfSk7Cn0KdmFyIGlzU2FtZUlTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfaXNTYW1lSVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVJU09XZWVrLmpzIigpIHsKICAgIGluaXRfaXNTYW1lV2VlaygpOwogICAgaXNTYW1lSVNPV2Vla19kZWZhdWx0ID0gaXNTYW1lSVNPV2VlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVJU09XZWVrWWVhci5qcwpmdW5jdGlvbiBpc1NhbWVJU09XZWVrWWVhcihsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIHJldHVybiArc3RhcnRPZklTT1dlZWtZZWFyKGxhdGVyRGF0ZV8pID09PSArc3RhcnRPZklTT1dlZWtZZWFyKGVhcmxpZXJEYXRlXyk7Cn0KdmFyIGlzU2FtZUlTT1dlZWtZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZUlTT1dlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZUlTT1dlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpc1NhbWVJU09XZWVrWWVhcl9kZWZhdWx0ID0gaXNTYW1lSVNPV2Vla1llYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZk1pbnV0ZS5qcwpmdW5jdGlvbiBzdGFydE9mTWludXRlKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgZGF0ZV8uc2V0U2Vjb25kcygwLCAwKTsKICByZXR1cm4gZGF0ZV87Cn0KdmFyIHN0YXJ0T2ZNaW51dGVfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZk1pbnV0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mTWludXRlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mTWludXRlX2RlZmF1bHQgPSBzdGFydE9mTWludXRlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZU1pbnV0ZS5qcwpmdW5jdGlvbiBpc1NhbWVNaW51dGUobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSkgewogIHJldHVybiArc3RhcnRPZk1pbnV0ZShsYXRlckRhdGUpID09PSArc3RhcnRPZk1pbnV0ZShlYXJsaWVyRGF0ZSk7Cn0KdmFyIGlzU2FtZU1pbnV0ZV9kZWZhdWx0Owp2YXIgaW5pdF9pc1NhbWVNaW51dGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lTWludXRlLmpzIigpIHsKICAgIGluaXRfc3RhcnRPZk1pbnV0ZSgpOwogICAgaXNTYW1lTWludXRlX2RlZmF1bHQgPSBpc1NhbWVNaW51dGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lTW9udGguanMKZnVuY3Rpb24gaXNTYW1lTW9udGgobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICByZXR1cm4gbGF0ZXJEYXRlXy5nZXRGdWxsWWVhcigpID09PSBlYXJsaWVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAmJiBsYXRlckRhdGVfLmdldE1vbnRoKCkgPT09IGVhcmxpZXJEYXRlXy5nZXRNb250aCgpOwp9CnZhciBpc1NhbWVNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9pc1NhbWVNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVNb250aC5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpc1NhbWVNb250aF9kZWZhdWx0ID0gaXNTYW1lTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lUXVhcnRlci5qcwpmdW5jdGlvbiBpc1NhbWVRdWFydGVyKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbZGF0ZUxlZnRfLCBkYXRlUmlnaHRfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgcmV0dXJuICtzdGFydE9mUXVhcnRlcihkYXRlTGVmdF8pID09PSArc3RhcnRPZlF1YXJ0ZXIoZGF0ZVJpZ2h0Xyk7Cn0KdmFyIGlzU2FtZVF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfaXNTYW1lUXVhcnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVRdWFydGVyLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfc3RhcnRPZlF1YXJ0ZXIoKTsKICAgIGlzU2FtZVF1YXJ0ZXJfZGVmYXVsdCA9IGlzU2FtZVF1YXJ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZlNlY29uZC5qcwpmdW5jdGlvbiBzdGFydE9mU2Vjb25kKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgZGF0ZV8uc2V0TWlsbGlzZWNvbmRzKDApOwogIHJldHVybiBkYXRlXzsKfQp2YXIgc3RhcnRPZlNlY29uZF9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mU2Vjb25kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZTZWNvbmQuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHN0YXJ0T2ZTZWNvbmRfZGVmYXVsdCA9IHN0YXJ0T2ZTZWNvbmQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lU2Vjb25kLmpzCmZ1bmN0aW9uIGlzU2FtZVNlY29uZChsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7CiAgcmV0dXJuICtzdGFydE9mU2Vjb25kKGxhdGVyRGF0ZSkgPT09ICtzdGFydE9mU2Vjb25kKGVhcmxpZXJEYXRlKTsKfQp2YXIgaXNTYW1lU2Vjb25kX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZVNlY29uZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVTZWNvbmQuanMiKCkgewogICAgaW5pdF9zdGFydE9mU2Vjb25kKCk7CiAgICBpc1NhbWVTZWNvbmRfZGVmYXVsdCA9IGlzU2FtZVNlY29uZDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVZZWFyLmpzCmZ1bmN0aW9uIGlzU2FtZVllYXIobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICByZXR1cm4gbGF0ZXJEYXRlXy5nZXRGdWxsWWVhcigpID09PSBlYXJsaWVyRGF0ZV8uZ2V0RnVsbFllYXIoKTsKfQp2YXIgaXNTYW1lWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9pc1NhbWVZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZVllYXIuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaXNTYW1lWWVhcl9kZWZhdWx0ID0gaXNTYW1lWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNIb3VyLmpzCmZ1bmN0aW9uIGlzVGhpc0hvdXIoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBpc1NhbWVIb3VyKAogICAgdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKSwKICAgIGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKQogICk7Cn0KdmFyIGlzVGhpc0hvdXJfZGVmYXVsdDsKdmFyIGluaXRfaXNUaGlzSG91ciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNIb3VyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBpbml0X2lzU2FtZUhvdXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1RoaXNIb3VyX2RlZmF1bHQgPSBpc1RoaXNIb3VyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc0lTT1dlZWsuanMKZnVuY3Rpb24gaXNUaGlzSVNPV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZUlTT1dlZWsoCiAgICBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIGRhdGUpLAogICAgY29uc3RydWN0Tm93KG9wdGlvbnM/LmluIHx8IGRhdGUpCiAgKTsKfQp2YXIgaXNUaGlzSVNPV2Vla19kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNJU09XZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc0lTT1dlZWsuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVJU09XZWVrKCk7CiAgICBpc1RoaXNJU09XZWVrX2RlZmF1bHQgPSBpc1RoaXNJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc01pbnV0ZS5qcwpmdW5jdGlvbiBpc1RoaXNNaW51dGUoZGF0ZSkgewogIHJldHVybiBpc1NhbWVNaW51dGUoZGF0ZSwgY29uc3RydWN0Tm93KGRhdGUpKTsKfQp2YXIgaXNUaGlzTWludXRlX2RlZmF1bHQ7CnZhciBpbml0X2lzVGhpc01pbnV0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNNaW51dGUuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lTWludXRlKCk7CiAgICBpc1RoaXNNaW51dGVfZGVmYXVsdCA9IGlzVGhpc01pbnV0ZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNNb250aC5qcwpmdW5jdGlvbiBpc1RoaXNNb250aChkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZU1vbnRoKAogICAgY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBkYXRlKSwKICAgIGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKQogICk7Cn0KdmFyIGlzVGhpc01vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2lzVGhpc01vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc01vbnRoLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lTW9udGgoKTsKICAgIGlzVGhpc01vbnRoX2RlZmF1bHQgPSBpc1RoaXNNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNRdWFydGVyLmpzCmZ1bmN0aW9uIGlzVGhpc1F1YXJ0ZXIoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBpc1NhbWVRdWFydGVyKAogICAgY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBkYXRlKSwKICAgIGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKQogICk7Cn0KdmFyIGlzVGhpc1F1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfaXNUaGlzUXVhcnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNRdWFydGVyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lUXVhcnRlcigpOwogICAgaXNUaGlzUXVhcnRlcl9kZWZhdWx0ID0gaXNUaGlzUXVhcnRlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNTZWNvbmQuanMKZnVuY3Rpb24gaXNUaGlzU2Vjb25kKGRhdGUpIHsKICByZXR1cm4gaXNTYW1lU2Vjb25kKGRhdGUsIGNvbnN0cnVjdE5vdyhkYXRlKSk7Cn0KdmFyIGlzVGhpc1NlY29uZF9kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNTZWNvbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzU2Vjb25kLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBpbml0X2lzU2FtZVNlY29uZCgpOwogICAgaXNUaGlzU2Vjb25kX2RlZmF1bHQgPSBpc1RoaXNTZWNvbmQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzV2Vlay5qcwpmdW5jdGlvbiBpc1RoaXNXZWVrKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gaXNTYW1lV2VlaygKICAgIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgZGF0ZSksCiAgICBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSksCiAgICBvcHRpb25zCiAgKTsKfQp2YXIgaXNUaGlzV2Vla19kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNXZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc1dlZWsuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVXZWVrKCk7CiAgICBpc1RoaXNXZWVrX2RlZmF1bHQgPSBpc1RoaXNXZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc1llYXIuanMKZnVuY3Rpb24gaXNUaGlzWWVhcihkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZVllYXIoCiAgICBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIGRhdGUpLAogICAgY29uc3RydWN0Tm93KG9wdGlvbnM/LmluIHx8IGRhdGUpCiAgKTsKfQp2YXIgaXNUaGlzWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc1llYXIuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVZZWFyKCk7CiAgICBpc1RoaXNZZWFyX2RlZmF1bHQgPSBpc1RoaXNZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGh1cnNkYXkuanMKZnVuY3Rpb24gaXNUaHVyc2RheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF5KCkgPT09IDQ7Cn0KdmFyIGlzVGh1cnNkYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNUaHVyc2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RodXJzZGF5LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1RodXJzZGF5X2RlZmF1bHQgPSBpc1RodXJzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVG9kYXkuanMKZnVuY3Rpb24gaXNUb2RheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZURheSgKICAgIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgZGF0ZSksCiAgICBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSkKICApOwp9CnZhciBpc1RvZGF5X2RlZmF1bHQ7CnZhciBpbml0X2lzVG9kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUb2RheS5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBpbml0X2lzU2FtZURheSgpOwogICAgaXNUb2RheV9kZWZhdWx0ID0gaXNUb2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RvbW9ycm93LmpzCmZ1bmN0aW9uIGlzVG9tb3Jyb3coZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBpc1NhbWVEYXkoCiAgICBkYXRlLAogICAgYWRkRGF5cyhjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSksIDEpLAogICAgb3B0aW9ucwogICk7Cn0KdmFyIGlzVG9tb3Jyb3dfZGVmYXVsdDsKdmFyIGluaXRfaXNUb21vcnJvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RvbW9ycm93LmpzIigpIHsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lRGF5KCk7CiAgICBpc1RvbW9ycm93X2RlZmF1bHQgPSBpc1RvbW9ycm93OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVHVlc2RheS5qcwpmdW5jdGlvbiBpc1R1ZXNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpID09PSAyOwp9CnZhciBpc1R1ZXNkYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNUdWVzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVHVlc2RheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNUdWVzZGF5X2RlZmF1bHQgPSBpc1R1ZXNkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNXZWRuZXNkYXkuanMKZnVuY3Rpb24gaXNXZWRuZXNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpID09PSAzOwp9CnZhciBpc1dlZG5lc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9pc1dlZG5lc2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1dlZG5lc2RheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNXZWRuZXNkYXlfZGVmYXVsdCA9IGlzV2VkbmVzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzV2l0aGluSW50ZXJ2YWwuanMKZnVuY3Rpb24gaXNXaXRoaW5JbnRlcnZhbChkYXRlLCBpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB0aW1lID0gK3RvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgW3N0YXJ0VGltZSwgZW5kVGltZV0gPSBbCiAgICArdG9EYXRlKGludGVydmFsMy5zdGFydCwgb3B0aW9ucz8uaW4pLAogICAgK3RvRGF0ZShpbnRlcnZhbDMuZW5kLCBvcHRpb25zPy5pbikKICBdLnNvcnQoKGE1LCBiNSkgPT4gYTUgLSBiNSk7CiAgcmV0dXJuIHRpbWUgPj0gc3RhcnRUaW1lICYmIHRpbWUgPD0gZW5kVGltZTsKfQp2YXIgaXNXaXRoaW5JbnRlcnZhbF9kZWZhdWx0Owp2YXIgaW5pdF9pc1dpdGhpbkludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzV2l0aGluSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzV2l0aGluSW50ZXJ2YWxfZGVmYXVsdCA9IGlzV2l0aGluSW50ZXJ2YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViRGF5cy5qcwpmdW5jdGlvbiBzdWJEYXlzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGREYXlzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJEYXlzX2RlZmF1bHQ7CnZhciBpbml0X3N1YkRheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViRGF5cy5qcyIoKSB7CiAgICBpbml0X2FkZERheXMoKTsKICAgIHN1YkRheXNfZGVmYXVsdCA9IHN1YkRheXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNZZXN0ZXJkYXkuanMKZnVuY3Rpb24gaXNZZXN0ZXJkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBpc1NhbWVEYXkoCiAgICBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIGRhdGUpLAogICAgc3ViRGF5cyhjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSksIDEpCiAgKTsKfQp2YXIgaXNZZXN0ZXJkYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNZZXN0ZXJkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNZZXN0ZXJkYXkuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVEYXkoKTsKICAgIGluaXRfc3ViRGF5cygpOwogICAgaXNZZXN0ZXJkYXlfZGVmYXVsdCA9IGlzWWVzdGVyZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZkRlY2FkZS5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZEZWNhZGUoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTsKICBjb25zdCBkZWNhZGUgPSA5ICsgTWF0aC5mbG9vcih5ZWFyIC8gMTApICogMTA7CiAgX2RhdGUuc2V0RnVsbFllYXIoZGVjYWRlICsgMSwgMCwgMCk7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIHRvRGF0ZShfZGF0ZSwgb3B0aW9ucz8uaW4pOwp9CnZhciBsYXN0RGF5T2ZEZWNhZGVfZGVmYXVsdDsKdmFyIGluaXRfbGFzdERheU9mRGVjYWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZkRlY2FkZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgbGFzdERheU9mRGVjYWRlX2RlZmF1bHQgPSBsYXN0RGF5T2ZEZWNhZGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mV2Vlay5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZXZWVrKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IHdlZWtTdGFydHNPbiA9IG9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwOwogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBkYXkgPSBfZGF0ZS5nZXREYXkoKTsKICBjb25zdCBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IC03IDogMCkgKyA2IC0gKGRheSAtIHdlZWtTdGFydHNPbik7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBkaWZmKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGxhc3REYXlPZldlZWtfZGVmYXVsdDsKdmFyIGluaXRfbGFzdERheU9mV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZXZWVrLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBsYXN0RGF5T2ZXZWVrX2RlZmF1bHQgPSBsYXN0RGF5T2ZXZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZklTT1dlZWsuanMKZnVuY3Rpb24gbGFzdERheU9mSVNPV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGxhc3REYXlPZldlZWsoZGF0ZSwgeyAuLi5vcHRpb25zLCB3ZWVrU3RhcnRzT246IDEgfSk7Cn0KdmFyIGxhc3REYXlPZklTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfbGFzdERheU9mSVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZJU09XZWVrLmpzIigpIHsKICAgIGluaXRfbGFzdERheU9mV2VlaygpOwogICAgbGFzdERheU9mSVNPV2Vla19kZWZhdWx0ID0gbGFzdERheU9mSVNPV2VlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZJU09XZWVrWWVhci5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZJU09XZWVrWWVhcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgeWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogIGNvbnN0IGZvdXJ0aE9mSmFudWFyeSA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7CiAgZm91cnRoT2ZKYW51YXJ5LnNldEZ1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTsKICBmb3VydGhPZkphbnVhcnkuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3QgZGF0ZV8gPSBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnksIG9wdGlvbnMpOwogIGRhdGVfLnNldERhdGUoZGF0ZV8uZ2V0RGF0ZSgpIC0gMSk7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBsYXN0RGF5T2ZJU09XZWVrWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9sYXN0RGF5T2ZJU09XZWVrWWVhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZJU09XZWVrWWVhci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0SVNPV2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGxhc3REYXlPZklTT1dlZWtZZWFyX2RlZmF1bHQgPSBsYXN0RGF5T2ZJU09XZWVrWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZRdWFydGVyLmpzCmZ1bmN0aW9uIGxhc3REYXlPZlF1YXJ0ZXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBjdXJyZW50TW9udGggPSBkYXRlXy5nZXRNb250aCgpOwogIGNvbnN0IG1vbnRoID0gY3VycmVudE1vbnRoIC0gY3VycmVudE1vbnRoICUgMyArIDM7CiAgZGF0ZV8uc2V0TW9udGgobW9udGgsIDApOwogIGRhdGVfLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBkYXRlXzsKfQp2YXIgbGFzdERheU9mUXVhcnRlcl9kZWZhdWx0Owp2YXIgaW5pdF9sYXN0RGF5T2ZRdWFydGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZlF1YXJ0ZXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGxhc3REYXlPZlF1YXJ0ZXJfZGVmYXVsdCA9IGxhc3REYXlPZlF1YXJ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mWWVhci5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IGRhdGVfLmdldEZ1bGxZZWFyKCk7CiAgZGF0ZV8uc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDApOwogIGRhdGVfLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBkYXRlXzsKfQp2YXIgbGFzdERheU9mWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9sYXN0RGF5T2ZZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZlllYXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGxhc3REYXlPZlllYXJfZGVmYXVsdCA9IGxhc3REYXlPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGlnaHRGb3JtYXQuanMKZnVuY3Rpb24gbGlnaHRGb3JtYXQoZGF0ZSwgZm9ybWF0U3RyKSB7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSk7CiAgaWYgKCFpc1ZhbGlkKGRhdGVfKSkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpOwogIH0KICBjb25zdCB0b2tlbnMgPSBmb3JtYXRTdHIubWF0Y2goZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cDMpOwogIGlmICghdG9rZW5zKSByZXR1cm4gIiI7CiAgY29uc3QgcmVzdWx0ID0gdG9rZW5zLm1hcCgoc3Vic3RyaW5nKSA9PiB7CiAgICBpZiAoc3Vic3RyaW5nID09PSAiJyciKSB7CiAgICAgIHJldHVybiAiJyI7CiAgICB9CiAgICBjb25zdCBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTsKICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gIiciKSB7CiAgICAgIHJldHVybiBjbGVhbkVzY2FwZWRTdHJpbmczKHN1YnN0cmluZyk7CiAgICB9CiAgICBjb25zdCBmb3JtYXR0ZXIyID0gbGlnaHRGb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTsKICAgIGlmIChmb3JtYXR0ZXIyKSB7CiAgICAgIHJldHVybiBmb3JtYXR0ZXIyKGRhdGVfLCBzdWJzdHJpbmcpOwogICAgfQogICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwMykpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoCiAgICAgICAgIkZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgIiArIGZpcnN0Q2hhcmFjdGVyICsgImAiCiAgICAgICk7CiAgICB9CiAgICByZXR1cm4gc3Vic3RyaW5nOwogIH0pLmpvaW4oIiIpOwogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nMyhpbnB1dCkgewogIGNvbnN0IG1hdGNoZXMgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwMyk7CiAgaWYgKCFtYXRjaGVzKSByZXR1cm4gaW5wdXQ7CiAgcmV0dXJuIG1hdGNoZXNbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cDMsICInIik7Cn0KdmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAzLCBlc2NhcGVkU3RyaW5nUmVnRXhwMywgZG91YmxlUXVvdGVSZWdFeHAzLCB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cDMsIGxpZ2h0Rm9ybWF0X2RlZmF1bHQ7CnZhciBpbml0X2xpZ2h0Rm9ybWF0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xpZ2h0Rm9ybWF0LmpzIigpIHsKICAgIGluaXRfbGlnaHRGb3JtYXR0ZXJzKCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwMyA9IC8oXHcpXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nOwogICAgZXNjYXBlZFN0cmluZ1JlZ0V4cDMgPSAvXicoW15dKj8pJz8kLzsKICAgIGRvdWJsZVF1b3RlUmVnRXhwMyA9IC8nJy9nOwogICAgdW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAzID0gL1thLXpBLVpdLzsKICAgIGxpZ2h0Rm9ybWF0X2RlZmF1bHQgPSBsaWdodEZvcm1hdDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taWxsaXNlY29uZHMuanMKZnVuY3Rpb24gbWlsbGlzZWNvbmRzKHsKICB5ZWFycywKICBtb250aHM6IG1vbnRoczIsCiAgd2Vla3MsCiAgZGF5czogZGF5czIsCiAgaG91cnMsCiAgbWludXRlcywKICBzZWNvbmRzCn0pIHsKICBsZXQgdG90YWxEYXlzID0gMDsKICBpZiAoeWVhcnMpIHRvdGFsRGF5cyArPSB5ZWFycyAqIGRheXNJblllYXI7CiAgaWYgKG1vbnRoczIpIHRvdGFsRGF5cyArPSBtb250aHMyICogKGRheXNJblllYXIgLyAxMik7CiAgaWYgKHdlZWtzKSB0b3RhbERheXMgKz0gd2Vla3MgKiA3OwogIGlmIChkYXlzMikgdG90YWxEYXlzICs9IGRheXMyOwogIGxldCB0b3RhbFNlY29uZHMgPSB0b3RhbERheXMgKiAyNCAqIDYwICogNjA7CiAgaWYgKGhvdXJzKSB0b3RhbFNlY29uZHMgKz0gaG91cnMgKiA2MCAqIDYwOwogIGlmIChtaW51dGVzKSB0b3RhbFNlY29uZHMgKz0gbWludXRlcyAqIDYwOwogIGlmIChzZWNvbmRzKSB0b3RhbFNlY29uZHMgKz0gc2Vjb25kczsKICByZXR1cm4gTWF0aC50cnVuYyh0b3RhbFNlY29uZHMgKiAxZTMpOwp9CnZhciBtaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfbWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBtaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWlsbGlzZWNvbmRzVG9Ib3Vycy5qcwpmdW5jdGlvbiBtaWxsaXNlY29uZHNUb0hvdXJzKG1pbGxpc2Vjb25kczIpIHsKICBjb25zdCBob3VycyA9IG1pbGxpc2Vjb25kczIgLyBtaWxsaXNlY29uZHNJbkhvdXI7CiAgcmV0dXJuIE1hdGgudHJ1bmMoaG91cnMpOwp9CnZhciBtaWxsaXNlY29uZHNUb0hvdXJzX2RlZmF1bHQ7CnZhciBpbml0X21pbGxpc2Vjb25kc1RvSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWlsbGlzZWNvbmRzVG9Ib3Vycy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWlsbGlzZWNvbmRzVG9Ib3Vyc19kZWZhdWx0ID0gbWlsbGlzZWNvbmRzVG9Ib3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taWxsaXNlY29uZHNUb01pbnV0ZXMuanMKZnVuY3Rpb24gbWlsbGlzZWNvbmRzVG9NaW51dGVzKG1pbGxpc2Vjb25kczIpIHsKICBjb25zdCBtaW51dGVzID0gbWlsbGlzZWNvbmRzMiAvIG1pbGxpc2Vjb25kc0luTWludXRlOwogIHJldHVybiBNYXRoLnRydW5jKG1pbnV0ZXMpOwp9CnZhciBtaWxsaXNlY29uZHNUb01pbnV0ZXNfZGVmYXVsdDsKdmFyIGluaXRfbWlsbGlzZWNvbmRzVG9NaW51dGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbGxpc2Vjb25kc1RvTWludXRlcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWlsbGlzZWNvbmRzVG9NaW51dGVzX2RlZmF1bHQgPSBtaWxsaXNlY29uZHNUb01pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWlsbGlzZWNvbmRzVG9TZWNvbmRzLmpzCmZ1bmN0aW9uIG1pbGxpc2Vjb25kc1RvU2Vjb25kcyhtaWxsaXNlY29uZHMyKSB7CiAgY29uc3Qgc2Vjb25kcyA9IG1pbGxpc2Vjb25kczIgLyBtaWxsaXNlY29uZHNJblNlY29uZDsKICByZXR1cm4gTWF0aC50cnVuYyhzZWNvbmRzKTsKfQp2YXIgbWlsbGlzZWNvbmRzVG9TZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X21pbGxpc2Vjb25kc1RvU2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taWxsaXNlY29uZHNUb1NlY29uZHMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIG1pbGxpc2Vjb25kc1RvU2Vjb25kc19kZWZhdWx0ID0gbWlsbGlzZWNvbmRzVG9TZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbnV0ZXNUb0hvdXJzLmpzCmZ1bmN0aW9uIG1pbnV0ZXNUb0hvdXJzKG1pbnV0ZXMpIHsKICBjb25zdCBob3VycyA9IG1pbnV0ZXMgLyBtaW51dGVzSW5Ib3VyOwogIHJldHVybiBNYXRoLnRydW5jKGhvdXJzKTsKfQp2YXIgbWludXRlc1RvSG91cnNfZGVmYXVsdDsKdmFyIGluaXRfbWludXRlc1RvSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWludXRlc1RvSG91cnMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIG1pbnV0ZXNUb0hvdXJzX2RlZmF1bHQgPSBtaW51dGVzVG9Ib3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taW51dGVzVG9NaWxsaXNlY29uZHMuanMKZnVuY3Rpb24gbWludXRlc1RvTWlsbGlzZWNvbmRzKG1pbnV0ZXMpIHsKICByZXR1cm4gTWF0aC50cnVuYyhtaW51dGVzICogbWlsbGlzZWNvbmRzSW5NaW51dGUpOwp9CnZhciBtaW51dGVzVG9NaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfbWludXRlc1RvTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbnV0ZXNUb01pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWludXRlc1RvTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBtaW51dGVzVG9NaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWludXRlc1RvU2Vjb25kcy5qcwpmdW5jdGlvbiBtaW51dGVzVG9TZWNvbmRzKG1pbnV0ZXMpIHsKICByZXR1cm4gTWF0aC50cnVuYyhtaW51dGVzICogc2Vjb25kc0luTWludXRlKTsKfQp2YXIgbWludXRlc1RvU2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9taW51dGVzVG9TZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbnV0ZXNUb1NlY29uZHMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIG1pbnV0ZXNUb1NlY29uZHNfZGVmYXVsdCA9IG1pbnV0ZXNUb1NlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbW9udGhzVG9RdWFydGVycy5qcwpmdW5jdGlvbiBtb250aHNUb1F1YXJ0ZXJzKG1vbnRoczIpIHsKICBjb25zdCBxdWFydGVycyA9IG1vbnRoczIgLyBtb250aHNJblF1YXJ0ZXI7CiAgcmV0dXJuIE1hdGgudHJ1bmMocXVhcnRlcnMpOwp9CnZhciBtb250aHNUb1F1YXJ0ZXJzX2RlZmF1bHQ7CnZhciBpbml0X21vbnRoc1RvUXVhcnRlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbW9udGhzVG9RdWFydGVycy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbW9udGhzVG9RdWFydGVyc19kZWZhdWx0ID0gbW9udGhzVG9RdWFydGVyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tb250aHNUb1llYXJzLmpzCmZ1bmN0aW9uIG1vbnRoc1RvWWVhcnMobW9udGhzMikgewogIGNvbnN0IHllYXJzID0gbW9udGhzMiAvIG1vbnRoc0luWWVhcjsKICByZXR1cm4gTWF0aC50cnVuYyh5ZWFycyk7Cn0KdmFyIG1vbnRoc1RvWWVhcnNfZGVmYXVsdDsKdmFyIGluaXRfbW9udGhzVG9ZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tb250aHNUb1llYXJzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBtb250aHNUb1llYXJzX2RlZmF1bHQgPSBtb250aHNUb1llYXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHREYXkuanMKZnVuY3Rpb24gbmV4dERheShkYXRlLCBkYXksIG9wdGlvbnMpIHsKICBsZXQgZGVsdGEgPSBkYXkgLSBnZXREYXkoZGF0ZSwgb3B0aW9ucyk7CiAgaWYgKGRlbHRhIDw9IDApIGRlbHRhICs9IDc7CiAgcmV0dXJuIGFkZERheXMoZGF0ZSwgZGVsdGEsIG9wdGlvbnMpOwp9CnZhciBuZXh0RGF5X2RlZmF1bHQ7CnZhciBpbml0X25leHREYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dERheS5qcyIoKSB7CiAgICBpbml0X2FkZERheXMoKTsKICAgIGluaXRfZ2V0RGF5KCk7CiAgICBuZXh0RGF5X2RlZmF1bHQgPSBuZXh0RGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRGcmlkYXkuanMKZnVuY3Rpb24gbmV4dEZyaWRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIG5leHREYXkoZGF0ZSwgNSwgb3B0aW9ucyk7Cn0KdmFyIG5leHRGcmlkYXlfZGVmYXVsdDsKdmFyIGluaXRfbmV4dEZyaWRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0RnJpZGF5LmpzIigpIHsKICAgIGluaXRfbmV4dERheSgpOwogICAgbmV4dEZyaWRheV9kZWZhdWx0ID0gbmV4dEZyaWRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0TW9uZGF5LmpzCmZ1bmN0aW9uIG5leHRNb25kYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBuZXh0RGF5KGRhdGUsIDEsIG9wdGlvbnMpOwp9CnZhciBuZXh0TW9uZGF5X2RlZmF1bHQ7CnZhciBpbml0X25leHRNb25kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dE1vbmRheS5qcyIoKSB7CiAgICBpbml0X25leHREYXkoKTsKICAgIG5leHRNb25kYXlfZGVmYXVsdCA9IG5leHRNb25kYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFNhdHVyZGF5LmpzCmZ1bmN0aW9uIG5leHRTYXR1cmRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIG5leHREYXkoZGF0ZSwgNiwgb3B0aW9ucyk7Cn0KdmFyIG5leHRTYXR1cmRheV9kZWZhdWx0Owp2YXIgaW5pdF9uZXh0U2F0dXJkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFNhdHVyZGF5LmpzIigpIHsKICAgIGluaXRfbmV4dERheSgpOwogICAgbmV4dFNhdHVyZGF5X2RlZmF1bHQgPSBuZXh0U2F0dXJkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFN1bmRheS5qcwpmdW5jdGlvbiBuZXh0U3VuZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gbmV4dERheShkYXRlLCAwLCBvcHRpb25zKTsKfQp2YXIgbmV4dFN1bmRheV9kZWZhdWx0Owp2YXIgaW5pdF9uZXh0U3VuZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRTdW5kYXkuanMiKCkgewogICAgaW5pdF9uZXh0RGF5KCk7CiAgICBuZXh0U3VuZGF5X2RlZmF1bHQgPSBuZXh0U3VuZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRUaHVyc2RheS5qcwpmdW5jdGlvbiBuZXh0VGh1cnNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBuZXh0RGF5KGRhdGUsIDQsIG9wdGlvbnMpOwp9CnZhciBuZXh0VGh1cnNkYXlfZGVmYXVsdDsKdmFyIGluaXRfbmV4dFRodXJzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRUaHVyc2RheS5qcyIoKSB7CiAgICBpbml0X25leHREYXkoKTsKICAgIG5leHRUaHVyc2RheV9kZWZhdWx0ID0gbmV4dFRodXJzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRUdWVzZGF5LmpzCmZ1bmN0aW9uIG5leHRUdWVzZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gbmV4dERheShkYXRlLCAyLCBvcHRpb25zKTsKfQp2YXIgbmV4dFR1ZXNkYXlfZGVmYXVsdDsKdmFyIGluaXRfbmV4dFR1ZXNkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFR1ZXNkYXkuanMiKCkgewogICAgaW5pdF9uZXh0RGF5KCk7CiAgICBuZXh0VHVlc2RheV9kZWZhdWx0ID0gbmV4dFR1ZXNkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFdlZG5lc2RheS5qcwpmdW5jdGlvbiBuZXh0V2VkbmVzZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gbmV4dERheShkYXRlLCAzLCBvcHRpb25zKTsKfQp2YXIgbmV4dFdlZG5lc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9uZXh0V2VkbmVzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRXZWRuZXNkYXkuanMiKCkgewogICAgaW5pdF9uZXh0RGF5KCk7CiAgICBuZXh0V2VkbmVzZGF5X2RlZmF1bHQgPSBuZXh0V2VkbmVzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlSVNPLmpzCmZ1bmN0aW9uIHBhcnNlSVNPKGFyZ3VtZW50LCBvcHRpb25zKSB7CiAgY29uc3QgaW52YWxpZERhdGUgPSAoKSA9PiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCBOYU4pOwogIGNvbnN0IGFkZGl0aW9uYWxEaWdpdHMgPSBvcHRpb25zPy5hZGRpdGlvbmFsRGlnaXRzID8/IDI7CiAgY29uc3QgZGF0ZVN0cmluZ3MgPSBzcGxpdERhdGVTdHJpbmcoYXJndW1lbnQpOwogIGxldCBkYXRlOwogIGlmIChkYXRlU3RyaW5ncy5kYXRlKSB7CiAgICBjb25zdCBwYXJzZVllYXJSZXN1bHQgPSBwYXJzZVllYXIoZGF0ZVN0cmluZ3MuZGF0ZSwgYWRkaXRpb25hbERpZ2l0cyk7CiAgICBkYXRlID0gcGFyc2VEYXRlKHBhcnNlWWVhclJlc3VsdC5yZXN0RGF0ZVN0cmluZywgcGFyc2VZZWFyUmVzdWx0LnllYXIpOwogIH0KICBpZiAoIWRhdGUgfHwgaXNOYU4oK2RhdGUpKSByZXR1cm4gaW52YWxpZERhdGUoKTsKICBjb25zdCB0aW1lc3RhbXAyID0gK2RhdGU7CiAgbGV0IHRpbWUgPSAwOwogIGxldCBvZmZzZXQ7CiAgaWYgKGRhdGVTdHJpbmdzLnRpbWUpIHsKICAgIHRpbWUgPSBwYXJzZVRpbWUoZGF0ZVN0cmluZ3MudGltZSk7CiAgICBpZiAoaXNOYU4odGltZSkpIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogIH0KICBpZiAoZGF0ZVN0cmluZ3MudGltZXpvbmUpIHsKICAgIG9mZnNldCA9IHBhcnNlVGltZXpvbmUoZGF0ZVN0cmluZ3MudGltZXpvbmUpOwogICAgaWYgKGlzTmFOKG9mZnNldCkpIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogIH0gZWxzZSB7CiAgICBjb25zdCB0bXBEYXRlID0gbmV3IERhdGUodGltZXN0YW1wMiArIHRpbWUpOwogICAgY29uc3QgcmVzdWx0ID0gdG9EYXRlKDAsIG9wdGlvbnM/LmluKTsKICAgIHJlc3VsdC5zZXRGdWxsWWVhcigKICAgICAgdG1wRGF0ZS5nZXRVVENGdWxsWWVhcigpLAogICAgICB0bXBEYXRlLmdldFVUQ01vbnRoKCksCiAgICAgIHRtcERhdGUuZ2V0VVRDRGF0ZSgpCiAgICApOwogICAgcmVzdWx0LnNldEhvdXJzKAogICAgICB0bXBEYXRlLmdldFVUQ0hvdXJzKCksCiAgICAgIHRtcERhdGUuZ2V0VVRDTWludXRlcygpLAogICAgICB0bXBEYXRlLmdldFVUQ1NlY29uZHMoKSwKICAgICAgdG1wRGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKQogICAgKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHJldHVybiB0b0RhdGUodGltZXN0YW1wMiArIHRpbWUgKyBvZmZzZXQsIG9wdGlvbnM/LmluKTsKfQpmdW5jdGlvbiBzcGxpdERhdGVTdHJpbmcoZGF0ZVN0cmluZykgewogIGNvbnN0IGRhdGVTdHJpbmdzID0ge307CiAgY29uc3QgYXJyYXkgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLmRhdGVUaW1lRGVsaW1pdGVyKTsKICBsZXQgdGltZVN0cmluZzsKICBpZiAoYXJyYXkubGVuZ3RoID4gMikgewogICAgcmV0dXJuIGRhdGVTdHJpbmdzOwogIH0KICBpZiAoLzovLnRlc3QoYXJyYXlbMF0pKSB7CiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMF07CiAgfSBlbHNlIHsKICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBhcnJheVswXTsKICAgIHRpbWVTdHJpbmcgPSBhcnJheVsxXTsKICAgIGlmIChwYXR0ZXJucy50aW1lWm9uZURlbGltaXRlci50ZXN0KGRhdGVTdHJpbmdzLmRhdGUpKSB7CiAgICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLnRpbWVab25lRGVsaW1pdGVyKVswXTsKICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmcuc3Vic3RyKAogICAgICAgIGRhdGVTdHJpbmdzLmRhdGUubGVuZ3RoLAogICAgICAgIGRhdGVTdHJpbmcubGVuZ3RoCiAgICAgICk7CiAgICB9CiAgfQogIGlmICh0aW1lU3RyaW5nKSB7CiAgICBjb25zdCB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lLmV4ZWModGltZVN0cmluZyk7CiAgICBpZiAodG9rZW4pIHsKICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmcucmVwbGFjZSh0b2tlblsxXSwgIiIpOwogICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IHRva2VuWzFdOwogICAgfSBlbHNlIHsKICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmc7CiAgICB9CiAgfQogIHJldHVybiBkYXRlU3RyaW5nczsKfQpmdW5jdGlvbiBwYXJzZVllYXIoZGF0ZVN0cmluZywgYWRkaXRpb25hbERpZ2l0cykgewogIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgKICAgICJeKD86KFxcZHs0fXxbKy1dXFxkeyIgKyAoNCArIGFkZGl0aW9uYWxEaWdpdHMpICsgIn0pfChcXGR7Mn18WystXVxcZHsiICsgKDIgKyBhZGRpdGlvbmFsRGlnaXRzKSArICJ9KSQpIgogICk7CiAgY29uc3QgY2FwdHVyZXMgPSBkYXRlU3RyaW5nLm1hdGNoKHJlZ2V4KTsKICBpZiAoIWNhcHR1cmVzKSByZXR1cm4geyB5ZWFyOiBOYU4sIHJlc3REYXRlU3RyaW5nOiAiIiB9OwogIGNvbnN0IHllYXIgPSBjYXB0dXJlc1sxXSA/IHBhcnNlSW50KGNhcHR1cmVzWzFdKSA6IG51bGw7CiAgY29uc3QgY2VudHVyeSA9IGNhcHR1cmVzWzJdID8gcGFyc2VJbnQoY2FwdHVyZXNbMl0pIDogbnVsbDsKICByZXR1cm4gewogICAgeWVhcjogY2VudHVyeSA9PT0gbnVsbCA/IHllYXIgOiBjZW50dXJ5ICogMTAwLAogICAgcmVzdERhdGVTdHJpbmc6IGRhdGVTdHJpbmcuc2xpY2UoKGNhcHR1cmVzWzFdIHx8IGNhcHR1cmVzWzJdKS5sZW5ndGgpCiAgfTsKfQpmdW5jdGlvbiBwYXJzZURhdGUoZGF0ZVN0cmluZywgeWVhcikgewogIGlmICh5ZWFyID09PSBudWxsKSByZXR1cm4gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7CiAgY29uc3QgY2FwdHVyZXMgPSBkYXRlU3RyaW5nLm1hdGNoKGRhdGVSZWdleCk7CiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShOYU4pOwogIGNvbnN0IGlzV2Vla0RhdGUgPSAhIWNhcHR1cmVzWzRdOwogIGNvbnN0IGRheU9mWWVhciA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbMV0pOwogIGNvbnN0IG1vbnRoID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1syXSkgLSAxOwogIGNvbnN0IGRheSA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbM10pOwogIGNvbnN0IHdlZWsgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzRdKTsKICBjb25zdCBkYXlPZldlZWsgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzVdKSAtIDE7CiAgaWYgKGlzV2Vla0RhdGUpIHsKICAgIGlmICghdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXlPZldlZWspKSB7CiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoTmFOKTsKICAgIH0KICAgIHJldHVybiBkYXlPZklTT1dlZWtZZWFyKHllYXIsIHdlZWssIGRheU9mV2Vlayk7CiAgfSBlbHNlIHsKICAgIGNvbnN0IGRhdGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoMCk7CiAgICBpZiAoIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF5KSB8fCAhdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikpIHsKICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShOYU4pOwogICAgfQogICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgTWF0aC5tYXgoZGF5T2ZZZWFyLCBkYXkpKTsKICAgIHJldHVybiBkYXRlOwogIH0KfQpmdW5jdGlvbiBwYXJzZURhdGVVbml0KHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgPyBwYXJzZUludCh2YWx1ZTIpIDogMTsKfQpmdW5jdGlvbiBwYXJzZVRpbWUodGltZVN0cmluZykgewogIGNvbnN0IGNhcHR1cmVzID0gdGltZVN0cmluZy5tYXRjaCh0aW1lUmVnZXgpOwogIGlmICghY2FwdHVyZXMpIHJldHVybiBOYU47CiAgY29uc3QgaG91cnMgPSBwYXJzZVRpbWVVbml0KGNhcHR1cmVzWzFdKTsKICBjb25zdCBtaW51dGVzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1syXSk7CiAgY29uc3Qgc2Vjb25kcyA9IHBhcnNlVGltZVVuaXQoY2FwdHVyZXNbM10pOwogIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSkgewogICAgcmV0dXJuIE5hTjsKICB9CiAgcmV0dXJuIGhvdXJzICogbWlsbGlzZWNvbmRzSW5Ib3VyICsgbWludXRlcyAqIG1pbGxpc2Vjb25kc0luTWludXRlICsgc2Vjb25kcyAqIDFlMzsKfQpmdW5jdGlvbiBwYXJzZVRpbWVVbml0KHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgJiYgcGFyc2VGbG9hdCh2YWx1ZTIucmVwbGFjZSgiLCIsICIuIikpIHx8IDA7Cn0KZnVuY3Rpb24gcGFyc2VUaW1lem9uZSh0aW1lem9uZVN0cmluZykgewogIGlmICh0aW1lem9uZVN0cmluZyA9PT0gIloiKSByZXR1cm4gMDsKICBjb25zdCBjYXB0dXJlcyA9IHRpbWV6b25lU3RyaW5nLm1hdGNoKHRpbWV6b25lUmVnZXgpOwogIGlmICghY2FwdHVyZXMpIHJldHVybiAwOwogIGNvbnN0IHNpZ24gPSBjYXB0dXJlc1sxXSA9PT0gIisiID8gLTEgOiAxOwogIGNvbnN0IGhvdXJzID0gcGFyc2VJbnQoY2FwdHVyZXNbMl0pOwogIGNvbnN0IG1pbnV0ZXMgPSBjYXB0dXJlc1szXSAmJiBwYXJzZUludChjYXB0dXJlc1szXSkgfHwgMDsKICBpZiAoIXZhbGlkYXRlVGltZXpvbmUoaG91cnMsIG1pbnV0ZXMpKSB7CiAgICByZXR1cm4gTmFOOwogIH0KICByZXR1cm4gc2lnbiAqIChob3VycyAqIG1pbGxpc2Vjb25kc0luSG91ciArIG1pbnV0ZXMgKiBtaWxsaXNlY29uZHNJbk1pbnV0ZSk7Cn0KZnVuY3Rpb24gZGF5T2ZJU09XZWVrWWVhcihpc29XZWVrWWVhciwgd2VlaywgZGF5KSB7CiAgY29uc3QgZGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgwKTsKICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGlzb1dlZWtZZWFyLCAwLCA0KTsKICBjb25zdCBmb3VydGhPZkphbnVhcnlEYXkgPSBkYXRlLmdldFVUQ0RheSgpIHx8IDc7CiAgY29uc3QgZGlmZiA9ICh3ZWVrIC0gMSkgKiA3ICsgZGF5ICsgMSAtIGZvdXJ0aE9mSmFudWFyeURheTsKICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBkaWZmKTsKICByZXR1cm4gZGF0ZTsKfQpmdW5jdGlvbiBpc0xlYXBZZWFySW5kZXgyKHllYXIpIHsKICByZXR1cm4geWVhciAlIDQwMCA9PT0gMCB8fCB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwOwp9CmZ1bmN0aW9uIHZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSkgewogIHJldHVybiBtb250aCA+PSAwICYmIG1vbnRoIDw9IDExICYmIGRhdGUgPj0gMSAmJiBkYXRlIDw9IChkYXlzSW5Nb250aHNbbW9udGhdIHx8IChpc0xlYXBZZWFySW5kZXgyKHllYXIpID8gMjkgOiAyOCkpOwp9CmZ1bmN0aW9uIHZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpIHsKICByZXR1cm4gZGF5T2ZZZWFyID49IDEgJiYgZGF5T2ZZZWFyIDw9IChpc0xlYXBZZWFySW5kZXgyKHllYXIpID8gMzY2IDogMzY1KTsKfQpmdW5jdGlvbiB2YWxpZGF0ZVdlZWtEYXRlKF95ZWFyLCB3ZWVrLCBkYXkpIHsKICByZXR1cm4gd2VlayA+PSAxICYmIHdlZWsgPD0gNTMgJiYgZGF5ID49IDAgJiYgZGF5IDw9IDY7Cn0KZnVuY3Rpb24gdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7CiAgaWYgKGhvdXJzID09PSAyNCkgewogICAgcmV0dXJuIG1pbnV0ZXMgPT09IDAgJiYgc2Vjb25kcyA9PT0gMDsKICB9CiAgcmV0dXJuIHNlY29uZHMgPj0gMCAmJiBzZWNvbmRzIDwgNjAgJiYgbWludXRlcyA+PSAwICYmIG1pbnV0ZXMgPCA2MCAmJiBob3VycyA+PSAwICYmIGhvdXJzIDwgMjU7Cn0KZnVuY3Rpb24gdmFsaWRhdGVUaW1lem9uZShfaG91cnMsIG1pbnV0ZXMpIHsKICByZXR1cm4gbWludXRlcyA+PSAwICYmIG1pbnV0ZXMgPD0gNTk7Cn0KdmFyIHBhdHRlcm5zLCBkYXRlUmVnZXgsIHRpbWVSZWdleCwgdGltZXpvbmVSZWdleCwgZGF5c0luTW9udGhzLCBwYXJzZUlTT19kZWZhdWx0Owp2YXIgaW5pdF9wYXJzZUlTTyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZUlTTy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgcGF0dGVybnMgPSB7CiAgICAgIGRhdGVUaW1lRGVsaW1pdGVyOiAvW1QgXS8sCiAgICAgIHRpbWVab25lRGVsaW1pdGVyOiAvW1ogXS9pLAogICAgICB0aW1lem9uZTogLyhbWistXS4qKSQvCiAgICB9OwogICAgZGF0ZVJlZ2V4ID0gL14tPyg/OihcZHszfSl8KFxkezJ9KSg/Oi0/KFxkezJ9KSk/fFcoXGR7Mn0pKD86LT8oXGR7MX0pKT98KSQvOwogICAgdGltZVJlZ2V4ID0gL14oXGR7Mn0oPzpbLixdXGQqKT8pKD86Oj8oXGR7Mn0oPzpbLixdXGQqKT8pKT8oPzo6PyhcZHsyfSg/OlsuLF1cZCopPykpPyQvOwogICAgdGltZXpvbmVSZWdleCA9IC9eKFsrLV0pKFxkezJ9KSg/Ojo/KFxkezJ9KSk/JC87CiAgICBkYXlzSW5Nb250aHMgPSBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTsKICAgIHBhcnNlSVNPX2RlZmF1bHQgPSBwYXJzZUlTTzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZUpTT04uanMKZnVuY3Rpb24gcGFyc2VKU09OKGRhdGVTdHIsIG9wdGlvbnMpIHsKICBjb25zdCBwYXJ0cyA9IGRhdGVTdHIubWF0Y2goCiAgICAvKFxkezR9KS0oXGR7Mn0pLShcZHsyfSlbVCBdKFxkezJ9KTooXGR7Mn0pOihcZHsyfSkoPzpcLihcZHswLDd9KSk/KD86WnwoLikoXGR7Mn0pOj8oXGR7Mn0pPyk/LwogICk7CiAgaWYgKCFwYXJ0cykgcmV0dXJuIHRvRGF0ZShOYU4sIG9wdGlvbnM/LmluKTsKICByZXR1cm4gdG9EYXRlKAogICAgRGF0ZS5VVEMoCiAgICAgICtwYXJ0c1sxXSwKICAgICAgK3BhcnRzWzJdIC0gMSwKICAgICAgK3BhcnRzWzNdLAogICAgICArcGFydHNbNF0gLSAoK3BhcnRzWzldIHx8IDApICogKHBhcnRzWzhdID09ICItIiA/IC0xIDogMSksCiAgICAgICtwYXJ0c1s1XSAtICgrcGFydHNbMTBdIHx8IDApICogKHBhcnRzWzhdID09ICItIiA/IC0xIDogMSksCiAgICAgICtwYXJ0c1s2XSwKICAgICAgKygocGFydHNbN10gfHwgIjAiKSArICIwMCIpLnN1YnN0cmluZygwLCAzKQogICAgKSwKICAgIG9wdGlvbnM/LmluCiAgKTsKfQp2YXIgcGFyc2VKU09OX2RlZmF1bHQ7CnZhciBpbml0X3BhcnNlSlNPTiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZUpTT04uanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHBhcnNlSlNPTl9kZWZhdWx0ID0gcGFyc2VKU09OOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzRGF5LmpzCmZ1bmN0aW9uIHByZXZpb3VzRGF5KGRhdGUsIGRheSwgb3B0aW9ucykgewogIGxldCBkZWx0YSA9IGdldERheShkYXRlLCBvcHRpb25zKSAtIGRheTsKICBpZiAoZGVsdGEgPD0gMCkgZGVsdGEgKz0gNzsKICByZXR1cm4gc3ViRGF5cyhkYXRlLCBkZWx0YSwgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzRGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzRGF5LmpzIigpIHsKICAgIGluaXRfZ2V0RGF5KCk7CiAgICBpbml0X3N1YkRheXMoKTsKICAgIHByZXZpb3VzRGF5X2RlZmF1bHQgPSBwcmV2aW91c0RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c0ZyaWRheS5qcwpmdW5jdGlvbiBwcmV2aW91c0ZyaWRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHByZXZpb3VzRGF5KGRhdGUsIDUsIG9wdGlvbnMpOwp9CnZhciBwcmV2aW91c0ZyaWRheV9kZWZhdWx0Owp2YXIgaW5pdF9wcmV2aW91c0ZyaWRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c0ZyaWRheS5qcyIoKSB7CiAgICBpbml0X3ByZXZpb3VzRGF5KCk7CiAgICBwcmV2aW91c0ZyaWRheV9kZWZhdWx0ID0gcHJldmlvdXNGcmlkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNNb25kYXkuanMKZnVuY3Rpb24gcHJldmlvdXNNb25kYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBwcmV2aW91c0RheShkYXRlLCAxLCBvcHRpb25zKTsKfQp2YXIgcHJldmlvdXNNb25kYXlfZGVmYXVsdDsKdmFyIGluaXRfcHJldmlvdXNNb25kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNNb25kYXkuanMiKCkgewogICAgaW5pdF9wcmV2aW91c0RheSgpOwogICAgcHJldmlvdXNNb25kYXlfZGVmYXVsdCA9IHByZXZpb3VzTW9uZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzU2F0dXJkYXkuanMKZnVuY3Rpb24gcHJldmlvdXNTYXR1cmRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHByZXZpb3VzRGF5KGRhdGUsIDYsIG9wdGlvbnMpOwp9CnZhciBwcmV2aW91c1NhdHVyZGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzU2F0dXJkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNTYXR1cmRheS5qcyIoKSB7CiAgICBpbml0X3ByZXZpb3VzRGF5KCk7CiAgICBwcmV2aW91c1NhdHVyZGF5X2RlZmF1bHQgPSBwcmV2aW91c1NhdHVyZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzU3VuZGF5LmpzCmZ1bmN0aW9uIHByZXZpb3VzU3VuZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gcHJldmlvdXNEYXkoZGF0ZSwgMCwgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzU3VuZGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzU3VuZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzU3VuZGF5LmpzIigpIHsKICAgIGluaXRfcHJldmlvdXNEYXkoKTsKICAgIHByZXZpb3VzU3VuZGF5X2RlZmF1bHQgPSBwcmV2aW91c1N1bmRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c1RodXJzZGF5LmpzCmZ1bmN0aW9uIHByZXZpb3VzVGh1cnNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBwcmV2aW91c0RheShkYXRlLCA0LCBvcHRpb25zKTsKfQp2YXIgcHJldmlvdXNUaHVyc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9wcmV2aW91c1RodXJzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzVGh1cnNkYXkuanMiKCkgewogICAgaW5pdF9wcmV2aW91c0RheSgpOwogICAgcHJldmlvdXNUaHVyc2RheV9kZWZhdWx0ID0gcHJldmlvdXNUaHVyc2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c1R1ZXNkYXkuanMKZnVuY3Rpb24gcHJldmlvdXNUdWVzZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gcHJldmlvdXNEYXkoZGF0ZSwgMiwgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzVHVlc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9wcmV2aW91c1R1ZXNkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNUdWVzZGF5LmpzIigpIHsKICAgIGluaXRfcHJldmlvdXNEYXkoKTsKICAgIHByZXZpb3VzVHVlc2RheV9kZWZhdWx0ID0gcHJldmlvdXNUdWVzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzV2VkbmVzZGF5LmpzCmZ1bmN0aW9uIHByZXZpb3VzV2VkbmVzZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gcHJldmlvdXNEYXkoZGF0ZSwgMywgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzV2VkbmVzZGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzV2VkbmVzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzV2VkbmVzZGF5LmpzIigpIHsKICAgIGluaXRfcHJldmlvdXNEYXkoKTsKICAgIHByZXZpb3VzV2VkbmVzZGF5X2RlZmF1bHQgPSBwcmV2aW91c1dlZG5lc2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9xdWFydGVyc1RvTW9udGhzLmpzCmZ1bmN0aW9uIHF1YXJ0ZXJzVG9Nb250aHMocXVhcnRlcnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyhxdWFydGVycyAqIG1vbnRoc0luUXVhcnRlcik7Cn0KdmFyIHF1YXJ0ZXJzVG9Nb250aHNfZGVmYXVsdDsKdmFyIGluaXRfcXVhcnRlcnNUb01vbnRocyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9xdWFydGVyc1RvTW9udGhzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBxdWFydGVyc1RvTW9udGhzX2RlZmF1bHQgPSBxdWFydGVyc1RvTW9udGhzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3F1YXJ0ZXJzVG9ZZWFycy5qcwpmdW5jdGlvbiBxdWFydGVyc1RvWWVhcnMocXVhcnRlcnMpIHsKICBjb25zdCB5ZWFycyA9IHF1YXJ0ZXJzIC8gcXVhcnRlcnNJblllYXI7CiAgcmV0dXJuIE1hdGgudHJ1bmMoeWVhcnMpOwp9CnZhciBxdWFydGVyc1RvWWVhcnNfZGVmYXVsdDsKdmFyIGluaXRfcXVhcnRlcnNUb1llYXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3F1YXJ0ZXJzVG9ZZWFycy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgcXVhcnRlcnNUb1llYXJzX2RlZmF1bHQgPSBxdWFydGVyc1RvWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcm91bmRUb05lYXJlc3RIb3Vycy5qcwpmdW5jdGlvbiByb3VuZFRvTmVhcmVzdEhvdXJzKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBuZWFyZXN0VG8gPSBvcHRpb25zPy5uZWFyZXN0VG8gPz8gMTsKICBpZiAobmVhcmVzdFRvIDwgMSB8fCBuZWFyZXN0VG8gPiAxMikKICAgIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIE5hTik7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGZyYWN0aW9uYWxNaW51dGVzID0gZGF0ZV8uZ2V0TWludXRlcygpIC8gNjA7CiAgY29uc3QgZnJhY3Rpb25hbFNlY29uZHMgPSBkYXRlXy5nZXRTZWNvbmRzKCkgLyA2MCAvIDYwOwogIGNvbnN0IGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgPSBkYXRlXy5nZXRNaWxsaXNlY29uZHMoKSAvIDFlMyAvIDYwIC8gNjA7CiAgY29uc3QgaG91cnMgPSBkYXRlXy5nZXRIb3VycygpICsgZnJhY3Rpb25hbE1pbnV0ZXMgKyBmcmFjdGlvbmFsU2Vjb25kcyArIGZyYWN0aW9uYWxNaWxsaXNlY29uZHM7CiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucz8ucm91bmRpbmdNZXRob2QgPz8gInJvdW5kIjsKICBjb25zdCByb3VuZGluZ01ldGhvZCA9IGdldFJvdW5kaW5nTWV0aG9kKG1ldGhvZCk7CiAgY29uc3Qgcm91bmRlZEhvdXJzID0gcm91bmRpbmdNZXRob2QoaG91cnMgLyBuZWFyZXN0VG8pICogbmVhcmVzdFRvOwogIGRhdGVfLnNldEhvdXJzKHJvdW5kZWRIb3VycywgMCwgMCwgMCk7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciByb3VuZFRvTmVhcmVzdEhvdXJzX2RlZmF1bHQ7CnZhciBpbml0X3JvdW5kVG9OZWFyZXN0SG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcm91bmRUb05lYXJlc3RIb3Vycy5qcyIoKSB7CiAgICBpbml0X2dldFJvdW5kaW5nTWV0aG9kKCk7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICByb3VuZFRvTmVhcmVzdEhvdXJzX2RlZmF1bHQgPSByb3VuZFRvTmVhcmVzdEhvdXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3JvdW5kVG9OZWFyZXN0TWludXRlcy5qcwpmdW5jdGlvbiByb3VuZFRvTmVhcmVzdE1pbnV0ZXMoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IG5lYXJlc3RUbyA9IG9wdGlvbnM/Lm5lYXJlc3RUbyA/PyAxOwogIGlmIChuZWFyZXN0VG8gPCAxIHx8IG5lYXJlc3RUbyA+IDMwKSByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlLCBOYU4pOwogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBmcmFjdGlvbmFsU2Vjb25kcyA9IGRhdGVfLmdldFNlY29uZHMoKSAvIDYwOwogIGNvbnN0IGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgPSBkYXRlXy5nZXRNaWxsaXNlY29uZHMoKSAvIDFlMyAvIDYwOwogIGNvbnN0IG1pbnV0ZXMgPSBkYXRlXy5nZXRNaW51dGVzKCkgKyBmcmFjdGlvbmFsU2Vjb25kcyArIGZyYWN0aW9uYWxNaWxsaXNlY29uZHM7CiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucz8ucm91bmRpbmdNZXRob2QgPz8gInJvdW5kIjsKICBjb25zdCByb3VuZGluZ01ldGhvZCA9IGdldFJvdW5kaW5nTWV0aG9kKG1ldGhvZCk7CiAgY29uc3Qgcm91bmRlZE1pbnV0ZXMgPSByb3VuZGluZ01ldGhvZChtaW51dGVzIC8gbmVhcmVzdFRvKSAqIG5lYXJlc3RUbzsKICBkYXRlXy5zZXRNaW51dGVzKHJvdW5kZWRNaW51dGVzLCAwLCAwKTsKICByZXR1cm4gZGF0ZV87Cn0KdmFyIHJvdW5kVG9OZWFyZXN0TWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9yb3VuZFRvTmVhcmVzdE1pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcm91bmRUb05lYXJlc3RNaW51dGVzLmpzIigpIHsKICAgIGluaXRfZ2V0Um91bmRpbmdNZXRob2QoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIHJvdW5kVG9OZWFyZXN0TWludXRlc19kZWZhdWx0ID0gcm91bmRUb05lYXJlc3RNaW51dGVzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NlY29uZHNUb0hvdXJzLmpzCmZ1bmN0aW9uIHNlY29uZHNUb0hvdXJzKHNlY29uZHMpIHsKICBjb25zdCBob3VycyA9IHNlY29uZHMgLyBzZWNvbmRzSW5Ib3VyOwogIHJldHVybiBNYXRoLnRydW5jKGhvdXJzKTsKfQp2YXIgc2Vjb25kc1RvSG91cnNfZGVmYXVsdDsKdmFyIGluaXRfc2Vjb25kc1RvSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2Vjb25kc1RvSG91cnMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHNlY29uZHNUb0hvdXJzX2RlZmF1bHQgPSBzZWNvbmRzVG9Ib3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZWNvbmRzVG9NaWxsaXNlY29uZHMuanMKZnVuY3Rpb24gc2Vjb25kc1RvTWlsbGlzZWNvbmRzKHNlY29uZHMpIHsKICByZXR1cm4gc2Vjb25kcyAqIG1pbGxpc2Vjb25kc0luU2Vjb25kOwp9CnZhciBzZWNvbmRzVG9NaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfc2Vjb25kc1RvTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NlY29uZHNUb01pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgc2Vjb25kc1RvTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBzZWNvbmRzVG9NaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2Vjb25kc1RvTWludXRlcy5qcwpmdW5jdGlvbiBzZWNvbmRzVG9NaW51dGVzKHNlY29uZHMpIHsKICBjb25zdCBtaW51dGVzID0gc2Vjb25kcyAvIHNlY29uZHNJbk1pbnV0ZTsKICByZXR1cm4gTWF0aC50cnVuYyhtaW51dGVzKTsKfQp2YXIgc2Vjb25kc1RvTWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9zZWNvbmRzVG9NaW51dGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NlY29uZHNUb01pbnV0ZXMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHNlY29uZHNUb01pbnV0ZXNfZGVmYXVsdCA9IHNlY29uZHNUb01pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0TW9udGguanMKZnVuY3Rpb24gc2V0TW9udGgoZGF0ZSwgbW9udGgsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgZGF5ID0gX2RhdGUuZ2V0RGF0ZSgpOwogIGNvbnN0IG1pZE1vbnRoID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTsKICBtaWRNb250aC5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCwgMTUpOwogIG1pZE1vbnRoLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIGNvbnN0IGRheXNJbk1vbnRoID0gZ2V0RGF5c0luTW9udGgobWlkTW9udGgpOwogIF9kYXRlLnNldE1vbnRoKG1vbnRoLCBNYXRoLm1pbihkYXksIGRheXNJbk1vbnRoKSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzZXRNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9zZXRNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRNb250aC5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0RGF5c0luTW9udGgoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRNb250aF9kZWZhdWx0ID0gc2V0TW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0LmpzCmZ1bmN0aW9uIHNldChkYXRlLCB2YWx1ZXMsIG9wdGlvbnMpIHsKICBsZXQgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGlmIChpc05hTigrX2RhdGUpKSByZXR1cm4gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBOYU4pOwogIGlmICh2YWx1ZXMueWVhciAhPSBudWxsKSBfZGF0ZS5zZXRGdWxsWWVhcih2YWx1ZXMueWVhcik7CiAgaWYgKHZhbHVlcy5tb250aCAhPSBudWxsKSBfZGF0ZSA9IHNldE1vbnRoKF9kYXRlLCB2YWx1ZXMubW9udGgpOwogIGlmICh2YWx1ZXMuZGF0ZSAhPSBudWxsKSBfZGF0ZS5zZXREYXRlKHZhbHVlcy5kYXRlKTsKICBpZiAodmFsdWVzLmhvdXJzICE9IG51bGwpIF9kYXRlLnNldEhvdXJzKHZhbHVlcy5ob3Vycyk7CiAgaWYgKHZhbHVlcy5taW51dGVzICE9IG51bGwpIF9kYXRlLnNldE1pbnV0ZXModmFsdWVzLm1pbnV0ZXMpOwogIGlmICh2YWx1ZXMuc2Vjb25kcyAhPSBudWxsKSBfZGF0ZS5zZXRTZWNvbmRzKHZhbHVlcy5zZWNvbmRzKTsKICBpZiAodmFsdWVzLm1pbGxpc2Vjb25kcyAhPSBudWxsKSBfZGF0ZS5zZXRNaWxsaXNlY29uZHModmFsdWVzLm1pbGxpc2Vjb25kcyk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzZXRfZGVmYXVsdDsKdmFyIGluaXRfc2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldC5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfc2V0TW9udGgoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRfZGVmYXVsdCA9IHNldDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXREYXRlLmpzCmZ1bmN0aW9uIHNldERhdGUoZGF0ZSwgZGF5T2ZNb250aCwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBfZGF0ZS5zZXREYXRlKGRheU9mTW9udGgpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc2V0RGF0ZV9kZWZhdWx0Owp2YXIgaW5pdF9zZXREYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERhdGUuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldERhdGVfZGVmYXVsdCA9IHNldERhdGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0RGF5T2ZZZWFyLmpzCmZ1bmN0aW9uIHNldERheU9mWWVhcihkYXRlLCBkYXlPZlllYXIsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgZGF0ZV8uc2V0TW9udGgoMCk7CiAgZGF0ZV8uc2V0RGF0ZShkYXlPZlllYXIpOwogIHJldHVybiBkYXRlXzsKfQp2YXIgc2V0RGF5T2ZZZWFyX2RlZmF1bHQ7CnZhciBpbml0X3NldERheU9mWWVhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXREYXlPZlllYXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldERheU9mWWVhcl9kZWZhdWx0ID0gc2V0RGF5T2ZZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERlZmF1bHRPcHRpb25zLmpzCmZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zMihvcHRpb25zKSB7CiAgY29uc3QgcmVzdWx0ID0ge307CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBmb3IgKGNvbnN0IHByb3BlcnR5MTMgaW4gZGVmYXVsdE9wdGlvbnMyKSB7CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlZmF1bHRPcHRpb25zMiwgcHJvcGVydHkxMykpIHsKICAgICAgcmVzdWx0W3Byb3BlcnR5MTNdID0gZGVmYXVsdE9wdGlvbnMyW3Byb3BlcnR5MTNdOwogICAgfQogIH0KICBmb3IgKGNvbnN0IHByb3BlcnR5MTMgaW4gb3B0aW9ucykgewogICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBwcm9wZXJ0eTEzKSkgewogICAgICBpZiAob3B0aW9uc1twcm9wZXJ0eTEzXSA9PT0gdm9pZCAwKSB7CiAgICAgICAgZGVsZXRlIHJlc3VsdFtwcm9wZXJ0eTEzXTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHRbcHJvcGVydHkxM10gPSBvcHRpb25zW3Byb3BlcnR5MTNdOwogICAgICB9CiAgICB9CiAgfQogIHNldERlZmF1bHRPcHRpb25zKHJlc3VsdCk7Cn0KdmFyIHNldERlZmF1bHRPcHRpb25zX2RlZmF1bHQ7CnZhciBpbml0X3NldERlZmF1bHRPcHRpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERlZmF1bHRPcHRpb25zLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIHNldERlZmF1bHRPcHRpb25zX2RlZmF1bHQgPSBzZXREZWZhdWx0T3B0aW9uczI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SG91cnMuanMKZnVuY3Rpb24gc2V0SG91cnMoZGF0ZSwgaG91cnMsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0SG91cnMoaG91cnMpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc2V0SG91cnNfZGVmYXVsdDsKdmFyIGluaXRfc2V0SG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SG91cnMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldEhvdXJzX2RlZmF1bHQgPSBzZXRIb3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRNaWxsaXNlY29uZHMuanMKZnVuY3Rpb24gc2V0TWlsbGlzZWNvbmRzKGRhdGUsIG1pbGxpc2Vjb25kczIsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0TWlsbGlzZWNvbmRzKG1pbGxpc2Vjb25kczIpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc2V0TWlsbGlzZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X3NldE1pbGxpc2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRNaWxsaXNlY29uZHMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldE1pbGxpc2Vjb25kc19kZWZhdWx0ID0gc2V0TWlsbGlzZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldE1pbnV0ZXMuanMKZnVuY3Rpb24gc2V0TWludXRlcyhkYXRlLCBtaW51dGVzLCBvcHRpb25zKSB7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGRhdGVfLnNldE1pbnV0ZXMobWludXRlcyk7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBzZXRNaW51dGVzX2RlZmF1bHQ7CnZhciBpbml0X3NldE1pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0TWludXRlcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0TWludXRlc19kZWZhdWx0ID0gc2V0TWludXRlczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRRdWFydGVyLmpzCmZ1bmN0aW9uIHNldFF1YXJ0ZXIoZGF0ZSwgcXVhcnRlciwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBvbGRRdWFydGVyID0gTWF0aC50cnVuYyhkYXRlXy5nZXRNb250aCgpIC8gMykgKyAxOwogIGNvbnN0IGRpZmYgPSBxdWFydGVyIC0gb2xkUXVhcnRlcjsKICByZXR1cm4gc2V0TW9udGgoZGF0ZV8sIGRhdGVfLmdldE1vbnRoKCkgKyBkaWZmICogMyk7Cn0KdmFyIHNldFF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfc2V0UXVhcnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRRdWFydGVyLmpzIigpIHsKICAgIGluaXRfc2V0TW9udGgoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRRdWFydGVyX2RlZmF1bHQgPSBzZXRRdWFydGVyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldFNlY29uZHMuanMKZnVuY3Rpb24gc2V0U2Vjb25kcyhkYXRlLCBzZWNvbmRzLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldFNlY29uZHMoc2Vjb25kcyk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzZXRTZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X3NldFNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0U2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0U2Vjb25kc19kZWZhdWx0ID0gc2V0U2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRXZWVrWWVhci5qcwpmdW5jdGlvbiBzZXRXZWVrWWVhcihkYXRlLCB3ZWVrWWVhciwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3QgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gb3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IDE7CiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygKICAgIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbiksCiAgICBzdGFydE9mV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyksCiAgICBvcHRpb25zCiAgKTsKICBjb25zdCBmaXJzdFdlZWsgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZpcnN0V2Vlay5zZXRGdWxsWWVhcih3ZWVrWWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTsKICBmaXJzdFdlZWsuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3QgZGF0ZV8gPSBzdGFydE9mV2Vla1llYXIoZmlyc3RXZWVrLCBvcHRpb25zKTsKICBkYXRlXy5zZXREYXRlKGRhdGVfLmdldERhdGUoKSArIGRpZmYpOwogIHJldHVybiBkYXRlXzsKfQp2YXIgc2V0V2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfc2V0V2Vla1llYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0V2Vla1llYXIuanMiKCkgewogICAgaW5pdF9kZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9zdGFydE9mV2Vla1llYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRXZWVrWWVhcl9kZWZhdWx0ID0gc2V0V2Vla1llYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0WWVhci5qcwpmdW5jdGlvbiBzZXRZZWFyKGRhdGUsIHllYXIsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKGlzTmFOKCtkYXRlXykpIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIE5hTik7CiAgZGF0ZV8uc2V0RnVsbFllYXIoeWVhcik7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBzZXRZZWFyX2RlZmF1bHQ7CnZhciBpbml0X3NldFllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0WWVhci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRZZWFyX2RlZmF1bHQgPSBzZXRZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZEZWNhZGUuanMKZnVuY3Rpb24gc3RhcnRPZkRlY2FkZShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpOwogIGNvbnN0IGRlY2FkZSA9IE1hdGguZmxvb3IoeWVhciAvIDEwKSAqIDEwOwogIF9kYXRlLnNldEZ1bGxZZWFyKGRlY2FkZSwgMCwgMSk7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mRGVjYWRlX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZEZWNhZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZkRlY2FkZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc3RhcnRPZkRlY2FkZV9kZWZhdWx0ID0gc3RhcnRPZkRlY2FkZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mVG9kYXkuanMKZnVuY3Rpb24gc3RhcnRPZlRvZGF5KG9wdGlvbnMpIHsKICByZXR1cm4gc3RhcnRPZkRheShEYXRlLm5vdygpLCBvcHRpb25zKTsKfQp2YXIgc3RhcnRPZlRvZGF5X2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZUb2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mVG9kYXkuanMiKCkgewogICAgaW5pdF9zdGFydE9mRGF5KCk7CiAgICBzdGFydE9mVG9kYXlfZGVmYXVsdCA9IHN0YXJ0T2ZUb2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mVG9tb3Jyb3cuanMKZnVuY3Rpb24gc3RhcnRPZlRvbW9ycm93KG9wdGlvbnMpIHsKICBjb25zdCBub3cyID0gY29uc3RydWN0Tm93KG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gbm93Mi5nZXRGdWxsWWVhcigpOwogIGNvbnN0IG1vbnRoID0gbm93Mi5nZXRNb250aCgpOwogIGNvbnN0IGRheSA9IG5vdzIuZ2V0RGF0ZSgpOwogIGNvbnN0IGRhdGUgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCAwKTsKICBkYXRlLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXkgKyAxKTsKICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBkYXRlOwp9CnZhciBzdGFydE9mVG9tb3Jyb3dfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZlRvbW9ycm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZUb21vcnJvdy5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBzdGFydE9mVG9tb3Jyb3dfZGVmYXVsdCA9IHN0YXJ0T2ZUb21vcnJvdzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mWWVzdGVyZGF5LmpzCmZ1bmN0aW9uIHN0YXJ0T2ZZZXN0ZXJkYXkob3B0aW9ucykgewogIGNvbnN0IG5vdzIgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBub3cyLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgbW9udGggPSBub3cyLmdldE1vbnRoKCk7CiAgY29uc3QgZGF5ID0gbm93Mi5nZXREYXRlKCk7CiAgY29uc3QgZGF0ZSA9IGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbik7CiAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF5IC0gMSk7CiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gZGF0ZTsKfQp2YXIgc3RhcnRPZlllc3RlcmRheV9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mWWVzdGVyZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZZZXN0ZXJkYXkuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIHN0YXJ0T2ZZZXN0ZXJkYXlfZGVmYXVsdCA9IHN0YXJ0T2ZZZXN0ZXJkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTW9udGhzLmpzCmZ1bmN0aW9uIHN1Yk1vbnRocyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJNb250aHNfZGVmYXVsdDsKdmFyIGluaXRfc3ViTW9udGhzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1Yk1vbnRocy5qcyIoKSB7CiAgICBpbml0X2FkZE1vbnRocygpOwogICAgc3ViTW9udGhzX2RlZmF1bHQgPSBzdWJNb250aHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViLmpzCmZ1bmN0aW9uIHN1YihkYXRlLCBkdXJhdGlvbiwgb3B0aW9ucykgewogIGNvbnN0IHsKICAgIHllYXJzID0gMCwKICAgIG1vbnRoczogbW9udGhzMiA9IDAsCiAgICB3ZWVrcyA9IDAsCiAgICBkYXlzOiBkYXlzMiA9IDAsCiAgICBob3VycyA9IDAsCiAgICBtaW51dGVzID0gMCwKICAgIHNlY29uZHMgPSAwCiAgfSA9IGR1cmF0aW9uOwogIGNvbnN0IHdpdGhvdXRNb250aHMgPSBzdWJNb250aHMoZGF0ZSwgbW9udGhzMiArIHllYXJzICogMTIsIG9wdGlvbnMpOwogIGNvbnN0IHdpdGhvdXREYXlzID0gc3ViRGF5cyh3aXRob3V0TW9udGhzLCBkYXlzMiArIHdlZWtzICogNywgb3B0aW9ucyk7CiAgY29uc3QgbWludXRlc1RvU3ViID0gbWludXRlcyArIGhvdXJzICogNjA7CiAgY29uc3Qgc2Vjb25kc1RvU3ViID0gc2Vjb25kcyArIG1pbnV0ZXNUb1N1YiAqIDYwOwogIGNvbnN0IG1zVG9TdWIgPSBzZWNvbmRzVG9TdWIgKiAxZTM7CiAgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgK3dpdGhvdXREYXlzIC0gbXNUb1N1Yik7Cn0KdmFyIHN1Yl9kZWZhdWx0Owp2YXIgaW5pdF9zdWIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9zdWJEYXlzKCk7CiAgICBpbml0X3N1Yk1vbnRocygpOwogICAgc3ViX2RlZmF1bHQgPSBzdWI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViQnVzaW5lc3NEYXlzLmpzCmZ1bmN0aW9uIHN1YkJ1c2luZXNzRGF5cyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkQnVzaW5lc3NEYXlzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJCdXNpbmVzc0RheXNfZGVmYXVsdDsKdmFyIGluaXRfc3ViQnVzaW5lc3NEYXlzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1YkJ1c2luZXNzRGF5cy5qcyIoKSB7CiAgICBpbml0X2FkZEJ1c2luZXNzRGF5cygpOwogICAgc3ViQnVzaW5lc3NEYXlzX2RlZmF1bHQgPSBzdWJCdXNpbmVzc0RheXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViSG91cnMuanMKZnVuY3Rpb24gc3ViSG91cnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZEhvdXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJIb3Vyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJIb3VycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJIb3Vycy5qcyIoKSB7CiAgICBpbml0X2FkZEhvdXJzKCk7CiAgICBzdWJIb3Vyc19kZWZhdWx0ID0gc3ViSG91cnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTWlsbGlzZWNvbmRzLmpzCmZ1bmN0aW9uIHN1Yk1pbGxpc2Vjb25kcyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJNaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfc3ViTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1Yk1pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2FkZE1pbGxpc2Vjb25kcygpOwogICAgc3ViTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBzdWJNaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTWludXRlcy5qcwpmdW5jdGlvbiBzdWJNaW51dGVzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRNaW51dGVzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJNaW51dGVzX2RlZmF1bHQ7CnZhciBpbml0X3N1Yk1pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTWludXRlcy5qcyIoKSB7CiAgICBpbml0X2FkZE1pbnV0ZXMoKTsKICAgIHN1Yk1pbnV0ZXNfZGVmYXVsdCA9IHN1Yk1pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViUXVhcnRlcnMuanMKZnVuY3Rpb24gc3ViUXVhcnRlcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZFF1YXJ0ZXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJRdWFydGVyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJRdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJRdWFydGVycy5qcyIoKSB7CiAgICBpbml0X2FkZFF1YXJ0ZXJzKCk7CiAgICBzdWJRdWFydGVyc19kZWZhdWx0ID0gc3ViUXVhcnRlcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViU2Vjb25kcy5qcwpmdW5jdGlvbiBzdWJTZWNvbmRzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRTZWNvbmRzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJTZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X3N1YlNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViU2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2FkZFNlY29uZHMoKTsKICAgIHN1YlNlY29uZHNfZGVmYXVsdCA9IHN1YlNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViV2Vla3MuanMKZnVuY3Rpb24gc3ViV2Vla3MoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZFdlZWtzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJXZWVrc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJXZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJXZWVrcy5qcyIoKSB7CiAgICBpbml0X2FkZFdlZWtzKCk7CiAgICBzdWJXZWVrc19kZWZhdWx0ID0gc3ViV2Vla3M7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViWWVhcnMuanMKZnVuY3Rpb24gc3ViWWVhcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZFllYXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJZZWFyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJZZWFycy5qcyIoKSB7CiAgICBpbml0X2FkZFllYXJzKCk7CiAgICBzdWJZZWFyc19kZWZhdWx0ID0gc3ViWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvd2Vla3NUb0RheXMuanMKZnVuY3Rpb24gd2Vla3NUb0RheXMod2Vla3MpIHsKICByZXR1cm4gTWF0aC50cnVuYyh3ZWVrcyAqIGRheXNJbldlZWspOwp9CnZhciB3ZWVrc1RvRGF5c19kZWZhdWx0Owp2YXIgaW5pdF93ZWVrc1RvRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy93ZWVrc1RvRGF5cy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgd2Vla3NUb0RheXNfZGVmYXVsdCA9IHdlZWtzVG9EYXlzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3llYXJzVG9EYXlzLmpzCmZ1bmN0aW9uIHllYXJzVG9EYXlzKHllYXJzKSB7CiAgcmV0dXJuIE1hdGgudHJ1bmMoeWVhcnMgKiBkYXlzSW5ZZWFyKTsKfQp2YXIgeWVhcnNUb0RheXNfZGVmYXVsdDsKdmFyIGluaXRfeWVhcnNUb0RheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMveWVhcnNUb0RheXMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHllYXJzVG9EYXlzX2RlZmF1bHQgPSB5ZWFyc1RvRGF5czsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy95ZWFyc1RvTW9udGhzLmpzCmZ1bmN0aW9uIHllYXJzVG9Nb250aHMoeWVhcnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyh5ZWFycyAqIG1vbnRoc0luWWVhcik7Cn0KdmFyIHllYXJzVG9Nb250aHNfZGVmYXVsdDsKdmFyIGluaXRfeWVhcnNUb01vbnRocyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy95ZWFyc1RvTW9udGhzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICB5ZWFyc1RvTW9udGhzX2RlZmF1bHQgPSB5ZWFyc1RvTW9udGhzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3llYXJzVG9RdWFydGVycy5qcwpmdW5jdGlvbiB5ZWFyc1RvUXVhcnRlcnMoeWVhcnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyh5ZWFycyAqIHF1YXJ0ZXJzSW5ZZWFyKTsKfQp2YXIgeWVhcnNUb1F1YXJ0ZXJzX2RlZmF1bHQ7CnZhciBpbml0X3llYXJzVG9RdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy95ZWFyc1RvUXVhcnRlcnMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHllYXJzVG9RdWFydGVyc19kZWZhdWx0ID0geWVhcnNUb1F1YXJ0ZXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2luZGV4LmpzCnZhciBkYXRlX2Zuc19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRhdGVfZm5zX2V4cG9ydHMsIHsKICBhZGQ6ICgpID0+IGFkZCwKICBhZGRCdXNpbmVzc0RheXM6ICgpID0+IGFkZEJ1c2luZXNzRGF5cywKICBhZGREYXlzOiAoKSA9PiBhZGREYXlzLAogIGFkZEhvdXJzOiAoKSA9PiBhZGRIb3VycywKICBhZGRJU09XZWVrWWVhcnM6ICgpID0+IGFkZElTT1dlZWtZZWFycywKICBhZGRNaWxsaXNlY29uZHM6ICgpID0+IGFkZE1pbGxpc2Vjb25kcywKICBhZGRNaW51dGVzOiAoKSA9PiBhZGRNaW51dGVzLAogIGFkZE1vbnRoczogKCkgPT4gYWRkTW9udGhzLAogIGFkZFF1YXJ0ZXJzOiAoKSA9PiBhZGRRdWFydGVycywKICBhZGRTZWNvbmRzOiAoKSA9PiBhZGRTZWNvbmRzLAogIGFkZFdlZWtzOiAoKSA9PiBhZGRXZWVrcywKICBhZGRZZWFyczogKCkgPT4gYWRkWWVhcnMsCiAgYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmc6ICgpID0+IGFyZUludGVydmFsc092ZXJsYXBwaW5nLAogIGNsYW1wOiAoKSA9PiBjbGFtcCwKICBjbG9zZXN0SW5kZXhUbzogKCkgPT4gY2xvc2VzdEluZGV4VG8sCiAgY2xvc2VzdFRvOiAoKSA9PiBjbG9zZXN0VG8sCiAgY29tcGFyZUFzYzogKCkgPT4gY29tcGFyZUFzYywKICBjb21wYXJlRGVzYzogKCkgPT4gY29tcGFyZURlc2MsCiAgY29uc3RydWN0RnJvbTogKCkgPT4gY29uc3RydWN0RnJvbSwKICBjb25zdHJ1Y3ROb3c6ICgpID0+IGNvbnN0cnVjdE5vdywKICBkYXlzVG9XZWVrczogKCkgPT4gZGF5c1RvV2Vla3MsCiAgZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzOiAoKSA9PiBkaWZmZXJlbmNlSW5CdXNpbmVzc0RheXMsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzOiAoKSA9PiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnM6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzLAogIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3M6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3MsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHM6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzLAogIGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnM6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrczogKCkgPT4gZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcywKICBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzOiAoKSA9PiBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzLAogIGRpZmZlcmVuY2VJbkRheXM6ICgpID0+IGRpZmZlcmVuY2VJbkRheXMsCiAgZGlmZmVyZW5jZUluSG91cnM6ICgpID0+IGRpZmZlcmVuY2VJbkhvdXJzLAogIGRpZmZlcmVuY2VJbklTT1dlZWtZZWFyczogKCkgPT4gZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzLAogIGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kczogKCkgPT4gZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzLAogIGRpZmZlcmVuY2VJbk1pbnV0ZXM6ICgpID0+IGRpZmZlcmVuY2VJbk1pbnV0ZXMsCiAgZGlmZmVyZW5jZUluTW9udGhzOiAoKSA9PiBkaWZmZXJlbmNlSW5Nb250aHMsCiAgZGlmZmVyZW5jZUluUXVhcnRlcnM6ICgpID0+IGRpZmZlcmVuY2VJblF1YXJ0ZXJzLAogIGRpZmZlcmVuY2VJblNlY29uZHM6ICgpID0+IGRpZmZlcmVuY2VJblNlY29uZHMsCiAgZGlmZmVyZW5jZUluV2Vla3M6ICgpID0+IGRpZmZlcmVuY2VJbldlZWtzLAogIGRpZmZlcmVuY2VJblllYXJzOiAoKSA9PiBkaWZmZXJlbmNlSW5ZZWFycywKICBlYWNoRGF5T2ZJbnRlcnZhbDogKCkgPT4gZWFjaERheU9mSW50ZXJ2YWwsCiAgZWFjaEhvdXJPZkludGVydmFsOiAoKSA9PiBlYWNoSG91ck9mSW50ZXJ2YWwsCiAgZWFjaE1pbnV0ZU9mSW50ZXJ2YWw6ICgpID0+IGVhY2hNaW51dGVPZkludGVydmFsLAogIGVhY2hNb250aE9mSW50ZXJ2YWw6ICgpID0+IGVhY2hNb250aE9mSW50ZXJ2YWwsCiAgZWFjaFF1YXJ0ZXJPZkludGVydmFsOiAoKSA9PiBlYWNoUXVhcnRlck9mSW50ZXJ2YWwsCiAgZWFjaFdlZWtPZkludGVydmFsOiAoKSA9PiBlYWNoV2Vla09mSW50ZXJ2YWwsCiAgZWFjaFdlZWtlbmRPZkludGVydmFsOiAoKSA9PiBlYWNoV2Vla2VuZE9mSW50ZXJ2YWwsCiAgZWFjaFdlZWtlbmRPZk1vbnRoOiAoKSA9PiBlYWNoV2Vla2VuZE9mTW9udGgsCiAgZWFjaFdlZWtlbmRPZlllYXI6ICgpID0+IGVhY2hXZWVrZW5kT2ZZZWFyLAogIGVhY2hZZWFyT2ZJbnRlcnZhbDogKCkgPT4gZWFjaFllYXJPZkludGVydmFsLAogIGVuZE9mRGF5OiAoKSA9PiBlbmRPZkRheSwKICBlbmRPZkRlY2FkZTogKCkgPT4gZW5kT2ZEZWNhZGUsCiAgZW5kT2ZIb3VyOiAoKSA9PiBlbmRPZkhvdXIsCiAgZW5kT2ZJU09XZWVrOiAoKSA9PiBlbmRPZklTT1dlZWssCiAgZW5kT2ZJU09XZWVrWWVhcjogKCkgPT4gZW5kT2ZJU09XZWVrWWVhciwKICBlbmRPZk1pbnV0ZTogKCkgPT4gZW5kT2ZNaW51dGUsCiAgZW5kT2ZNb250aDogKCkgPT4gZW5kT2ZNb250aCwKICBlbmRPZlF1YXJ0ZXI6ICgpID0+IGVuZE9mUXVhcnRlciwKICBlbmRPZlNlY29uZDogKCkgPT4gZW5kT2ZTZWNvbmQsCiAgZW5kT2ZUb2RheTogKCkgPT4gZW5kT2ZUb2RheSwKICBlbmRPZlRvbW9ycm93OiAoKSA9PiBlbmRPZlRvbW9ycm93LAogIGVuZE9mV2VlazogKCkgPT4gZW5kT2ZXZWVrLAogIGVuZE9mWWVhcjogKCkgPT4gZW5kT2ZZZWFyLAogIGVuZE9mWWVzdGVyZGF5OiAoKSA9PiBlbmRPZlllc3RlcmRheSwKICBmb3JtYXQ6ICgpID0+IGZvcm1hdCwKICBmb3JtYXREYXRlOiAoKSA9PiBmb3JtYXQsCiAgZm9ybWF0RGlzdGFuY2U6ICgpID0+IGZvcm1hdERpc3RhbmNlMiwKICBmb3JtYXREaXN0YW5jZVN0cmljdDogKCkgPT4gZm9ybWF0RGlzdGFuY2VTdHJpY3QsCiAgZm9ybWF0RGlzdGFuY2VUb05vdzogKCkgPT4gZm9ybWF0RGlzdGFuY2VUb05vdywKICBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0OiAoKSA9PiBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0LAogIGZvcm1hdER1cmF0aW9uOiAoKSA9PiBmb3JtYXREdXJhdGlvbiwKICBmb3JtYXRJU086ICgpID0+IGZvcm1hdElTTywKICBmb3JtYXRJU085MDc1OiAoKSA9PiBmb3JtYXRJU085MDc1LAogIGZvcm1hdElTT0R1cmF0aW9uOiAoKSA9PiBmb3JtYXRJU09EdXJhdGlvbiwKICBmb3JtYXRSRkMzMzM5OiAoKSA9PiBmb3JtYXRSRkMzMzM5LAogIGZvcm1hdFJGQzcyMzE6ICgpID0+IGZvcm1hdFJGQzcyMzEsCiAgZm9ybWF0UmVsYXRpdmU6ICgpID0+IGZvcm1hdFJlbGF0aXZlMiwKICBmb3JtYXR0ZXJzOiAoKSA9PiBmb3JtYXR0ZXJzLAogIGZyb21Vbml4VGltZTogKCkgPT4gZnJvbVVuaXhUaW1lLAogIGdldERhdGU6ICgpID0+IGdldERhdGUsCiAgZ2V0RGF5OiAoKSA9PiBnZXREYXksCiAgZ2V0RGF5T2ZZZWFyOiAoKSA9PiBnZXREYXlPZlllYXIsCiAgZ2V0RGF5c0luTW9udGg6ICgpID0+IGdldERheXNJbk1vbnRoLAogIGdldERheXNJblllYXI6ICgpID0+IGdldERheXNJblllYXIsCiAgZ2V0RGVjYWRlOiAoKSA9PiBnZXREZWNhZGUsCiAgZ2V0RGVmYXVsdE9wdGlvbnM6ICgpID0+IGdldERlZmF1bHRPcHRpb25zMiwKICBnZXRIb3VyczogKCkgPT4gZ2V0SG91cnMsCiAgZ2V0SVNPRGF5OiAoKSA9PiBnZXRJU09EYXksCiAgZ2V0SVNPV2VlazogKCkgPT4gZ2V0SVNPV2VlaywKICBnZXRJU09XZWVrWWVhcjogKCkgPT4gZ2V0SVNPV2Vla1llYXIsCiAgZ2V0SVNPV2Vla3NJblllYXI6ICgpID0+IGdldElTT1dlZWtzSW5ZZWFyLAogIGdldE1pbGxpc2Vjb25kczogKCkgPT4gZ2V0TWlsbGlzZWNvbmRzLAogIGdldE1pbnV0ZXM6ICgpID0+IGdldE1pbnV0ZXMsCiAgZ2V0TW9udGg6ICgpID0+IGdldE1vbnRoLAogIGdldE92ZXJsYXBwaW5nRGF5c0luSW50ZXJ2YWxzOiAoKSA9PiBnZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFscywKICBnZXRRdWFydGVyOiAoKSA9PiBnZXRRdWFydGVyLAogIGdldFNlY29uZHM6ICgpID0+IGdldFNlY29uZHMsCiAgZ2V0VGltZTogKCkgPT4gZ2V0VGltZSwKICBnZXRVbml4VGltZTogKCkgPT4gZ2V0VW5peFRpbWUsCiAgZ2V0V2VlazogKCkgPT4gZ2V0V2VlaywKICBnZXRXZWVrT2ZNb250aDogKCkgPT4gZ2V0V2Vla09mTW9udGgsCiAgZ2V0V2Vla1llYXI6ICgpID0+IGdldFdlZWtZZWFyLAogIGdldFdlZWtzSW5Nb250aDogKCkgPT4gZ2V0V2Vla3NJbk1vbnRoLAogIGdldFllYXI6ICgpID0+IGdldFllYXIsCiAgaG91cnNUb01pbGxpc2Vjb25kczogKCkgPT4gaG91cnNUb01pbGxpc2Vjb25kcywKICBob3Vyc1RvTWludXRlczogKCkgPT4gaG91cnNUb01pbnV0ZXMsCiAgaG91cnNUb1NlY29uZHM6ICgpID0+IGhvdXJzVG9TZWNvbmRzLAogIGludGVydmFsOiAoKSA9PiBpbnRlcnZhbDIsCiAgaW50ZXJ2YWxUb0R1cmF0aW9uOiAoKSA9PiBpbnRlcnZhbFRvRHVyYXRpb24sCiAgaW50bEZvcm1hdDogKCkgPT4gaW50bEZvcm1hdCwKICBpbnRsRm9ybWF0RGlzdGFuY2U6ICgpID0+IGludGxGb3JtYXREaXN0YW5jZSwKICBpc0FmdGVyOiAoKSA9PiBpc0FmdGVyLAogIGlzQmVmb3JlOiAoKSA9PiBpc0JlZm9yZSwKICBpc0RhdGU6ICgpID0+IGlzRGF0ZSwKICBpc0VxdWFsOiAoKSA9PiBpc0VxdWFsLAogIGlzRXhpc3RzOiAoKSA9PiBpc0V4aXN0cywKICBpc0ZpcnN0RGF5T2ZNb250aDogKCkgPT4gaXNGaXJzdERheU9mTW9udGgsCiAgaXNGcmlkYXk6ICgpID0+IGlzRnJpZGF5LAogIGlzRnV0dXJlOiAoKSA9PiBpc0Z1dHVyZSwKICBpc0xhc3REYXlPZk1vbnRoOiAoKSA9PiBpc0xhc3REYXlPZk1vbnRoLAogIGlzTGVhcFllYXI6ICgpID0+IGlzTGVhcFllYXIsCiAgaXNNYXRjaDogKCkgPT4gaXNNYXRjaDIsCiAgaXNNb25kYXk6ICgpID0+IGlzTW9uZGF5LAogIGlzUGFzdDogKCkgPT4gaXNQYXN0LAogIGlzU2FtZURheTogKCkgPT4gaXNTYW1lRGF5LAogIGlzU2FtZUhvdXI6ICgpID0+IGlzU2FtZUhvdXIsCiAgaXNTYW1lSVNPV2VlazogKCkgPT4gaXNTYW1lSVNPV2VlaywKICBpc1NhbWVJU09XZWVrWWVhcjogKCkgPT4gaXNTYW1lSVNPV2Vla1llYXIsCiAgaXNTYW1lTWludXRlOiAoKSA9PiBpc1NhbWVNaW51dGUsCiAgaXNTYW1lTW9udGg6ICgpID0+IGlzU2FtZU1vbnRoLAogIGlzU2FtZVF1YXJ0ZXI6ICgpID0+IGlzU2FtZVF1YXJ0ZXIsCiAgaXNTYW1lU2Vjb25kOiAoKSA9PiBpc1NhbWVTZWNvbmQsCiAgaXNTYW1lV2VlazogKCkgPT4gaXNTYW1lV2VlaywKICBpc1NhbWVZZWFyOiAoKSA9PiBpc1NhbWVZZWFyLAogIGlzU2F0dXJkYXk6ICgpID0+IGlzU2F0dXJkYXksCiAgaXNTdW5kYXk6ICgpID0+IGlzU3VuZGF5LAogIGlzVGhpc0hvdXI6ICgpID0+IGlzVGhpc0hvdXIsCiAgaXNUaGlzSVNPV2VlazogKCkgPT4gaXNUaGlzSVNPV2VlaywKICBpc1RoaXNNaW51dGU6ICgpID0+IGlzVGhpc01pbnV0ZSwKICBpc1RoaXNNb250aDogKCkgPT4gaXNUaGlzTW9udGgsCiAgaXNUaGlzUXVhcnRlcjogKCkgPT4gaXNUaGlzUXVhcnRlciwKICBpc1RoaXNTZWNvbmQ6ICgpID0+IGlzVGhpc1NlY29uZCwKICBpc1RoaXNXZWVrOiAoKSA9PiBpc1RoaXNXZWVrLAogIGlzVGhpc1llYXI6ICgpID0+IGlzVGhpc1llYXIsCiAgaXNUaHVyc2RheTogKCkgPT4gaXNUaHVyc2RheSwKICBpc1RvZGF5OiAoKSA9PiBpc1RvZGF5LAogIGlzVG9tb3Jyb3c6ICgpID0+IGlzVG9tb3Jyb3csCiAgaXNUdWVzZGF5OiAoKSA9PiBpc1R1ZXNkYXksCiAgaXNWYWxpZDogKCkgPT4gaXNWYWxpZCwKICBpc1dlZG5lc2RheTogKCkgPT4gaXNXZWRuZXNkYXksCiAgaXNXZWVrZW5kOiAoKSA9PiBpc1dlZWtlbmQsCiAgaXNXaXRoaW5JbnRlcnZhbDogKCkgPT4gaXNXaXRoaW5JbnRlcnZhbCwKICBpc1llc3RlcmRheTogKCkgPT4gaXNZZXN0ZXJkYXksCiAgbGFzdERheU9mRGVjYWRlOiAoKSA9PiBsYXN0RGF5T2ZEZWNhZGUsCiAgbGFzdERheU9mSVNPV2VlazogKCkgPT4gbGFzdERheU9mSVNPV2VlaywKICBsYXN0RGF5T2ZJU09XZWVrWWVhcjogKCkgPT4gbGFzdERheU9mSVNPV2Vla1llYXIsCiAgbGFzdERheU9mTW9udGg6ICgpID0+IGxhc3REYXlPZk1vbnRoLAogIGxhc3REYXlPZlF1YXJ0ZXI6ICgpID0+IGxhc3REYXlPZlF1YXJ0ZXIsCiAgbGFzdERheU9mV2VlazogKCkgPT4gbGFzdERheU9mV2VlaywKICBsYXN0RGF5T2ZZZWFyOiAoKSA9PiBsYXN0RGF5T2ZZZWFyLAogIGxpZ2h0Rm9ybWF0OiAoKSA9PiBsaWdodEZvcm1hdCwKICBsaWdodEZvcm1hdHRlcnM6ICgpID0+IGxpZ2h0Rm9ybWF0dGVycywKICBsb25nRm9ybWF0dGVyczogKCkgPT4gbG9uZ0Zvcm1hdHRlcnMsCiAgbWF4OiAoKSA9PiBtYXgyLAogIG1pbGxpc2Vjb25kczogKCkgPT4gbWlsbGlzZWNvbmRzLAogIG1pbGxpc2Vjb25kc1RvSG91cnM6ICgpID0+IG1pbGxpc2Vjb25kc1RvSG91cnMsCiAgbWlsbGlzZWNvbmRzVG9NaW51dGVzOiAoKSA9PiBtaWxsaXNlY29uZHNUb01pbnV0ZXMsCiAgbWlsbGlzZWNvbmRzVG9TZWNvbmRzOiAoKSA9PiBtaWxsaXNlY29uZHNUb1NlY29uZHMsCiAgbWluOiAoKSA9PiBtaW4yLAogIG1pbnV0ZXNUb0hvdXJzOiAoKSA9PiBtaW51dGVzVG9Ib3VycywKICBtaW51dGVzVG9NaWxsaXNlY29uZHM6ICgpID0+IG1pbnV0ZXNUb01pbGxpc2Vjb25kcywKICBtaW51dGVzVG9TZWNvbmRzOiAoKSA9PiBtaW51dGVzVG9TZWNvbmRzLAogIG1vbnRoc1RvUXVhcnRlcnM6ICgpID0+IG1vbnRoc1RvUXVhcnRlcnMsCiAgbW9udGhzVG9ZZWFyczogKCkgPT4gbW9udGhzVG9ZZWFycywKICBuZXh0RGF5OiAoKSA9PiBuZXh0RGF5LAogIG5leHRGcmlkYXk6ICgpID0+IG5leHRGcmlkYXksCiAgbmV4dE1vbmRheTogKCkgPT4gbmV4dE1vbmRheSwKICBuZXh0U2F0dXJkYXk6ICgpID0+IG5leHRTYXR1cmRheSwKICBuZXh0U3VuZGF5OiAoKSA9PiBuZXh0U3VuZGF5LAogIG5leHRUaHVyc2RheTogKCkgPT4gbmV4dFRodXJzZGF5LAogIG5leHRUdWVzZGF5OiAoKSA9PiBuZXh0VHVlc2RheSwKICBuZXh0V2VkbmVzZGF5OiAoKSA9PiBuZXh0V2VkbmVzZGF5LAogIHBhcnNlOiAoKSA9PiBwYXJzZSwKICBwYXJzZUlTTzogKCkgPT4gcGFyc2VJU08sCiAgcGFyc2VKU09OOiAoKSA9PiBwYXJzZUpTT04sCiAgcGFyc2VyczogKCkgPT4gcGFyc2VycywKICBwcmV2aW91c0RheTogKCkgPT4gcHJldmlvdXNEYXksCiAgcHJldmlvdXNGcmlkYXk6ICgpID0+IHByZXZpb3VzRnJpZGF5LAogIHByZXZpb3VzTW9uZGF5OiAoKSA9PiBwcmV2aW91c01vbmRheSwKICBwcmV2aW91c1NhdHVyZGF5OiAoKSA9PiBwcmV2aW91c1NhdHVyZGF5LAogIHByZXZpb3VzU3VuZGF5OiAoKSA9PiBwcmV2aW91c1N1bmRheSwKICBwcmV2aW91c1RodXJzZGF5OiAoKSA9PiBwcmV2aW91c1RodXJzZGF5LAogIHByZXZpb3VzVHVlc2RheTogKCkgPT4gcHJldmlvdXNUdWVzZGF5LAogIHByZXZpb3VzV2VkbmVzZGF5OiAoKSA9PiBwcmV2aW91c1dlZG5lc2RheSwKICBxdWFydGVyc1RvTW9udGhzOiAoKSA9PiBxdWFydGVyc1RvTW9udGhzLAogIHF1YXJ0ZXJzVG9ZZWFyczogKCkgPT4gcXVhcnRlcnNUb1llYXJzLAogIHJvdW5kVG9OZWFyZXN0SG91cnM6ICgpID0+IHJvdW5kVG9OZWFyZXN0SG91cnMsCiAgcm91bmRUb05lYXJlc3RNaW51dGVzOiAoKSA9PiByb3VuZFRvTmVhcmVzdE1pbnV0ZXMsCiAgc2Vjb25kc1RvSG91cnM6ICgpID0+IHNlY29uZHNUb0hvdXJzLAogIHNlY29uZHNUb01pbGxpc2Vjb25kczogKCkgPT4gc2Vjb25kc1RvTWlsbGlzZWNvbmRzLAogIHNlY29uZHNUb01pbnV0ZXM6ICgpID0+IHNlY29uZHNUb01pbnV0ZXMsCiAgc2V0OiAoKSA9PiBzZXQsCiAgc2V0RGF0ZTogKCkgPT4gc2V0RGF0ZSwKICBzZXREYXk6ICgpID0+IHNldERheSwKICBzZXREYXlPZlllYXI6ICgpID0+IHNldERheU9mWWVhciwKICBzZXREZWZhdWx0T3B0aW9uczogKCkgPT4gc2V0RGVmYXVsdE9wdGlvbnMyLAogIHNldEhvdXJzOiAoKSA9PiBzZXRIb3VycywKICBzZXRJU09EYXk6ICgpID0+IHNldElTT0RheSwKICBzZXRJU09XZWVrOiAoKSA9PiBzZXRJU09XZWVrLAogIHNldElTT1dlZWtZZWFyOiAoKSA9PiBzZXRJU09XZWVrWWVhciwKICBzZXRNaWxsaXNlY29uZHM6ICgpID0+IHNldE1pbGxpc2Vjb25kcywKICBzZXRNaW51dGVzOiAoKSA9PiBzZXRNaW51dGVzLAogIHNldE1vbnRoOiAoKSA9PiBzZXRNb250aCwKICBzZXRRdWFydGVyOiAoKSA9PiBzZXRRdWFydGVyLAogIHNldFNlY29uZHM6ICgpID0+IHNldFNlY29uZHMsCiAgc2V0V2VlazogKCkgPT4gc2V0V2VlaywKICBzZXRXZWVrWWVhcjogKCkgPT4gc2V0V2Vla1llYXIsCiAgc2V0WWVhcjogKCkgPT4gc2V0WWVhciwKICBzdGFydE9mRGF5OiAoKSA9PiBzdGFydE9mRGF5LAogIHN0YXJ0T2ZEZWNhZGU6ICgpID0+IHN0YXJ0T2ZEZWNhZGUsCiAgc3RhcnRPZkhvdXI6ICgpID0+IHN0YXJ0T2ZIb3VyLAogIHN0YXJ0T2ZJU09XZWVrOiAoKSA9PiBzdGFydE9mSVNPV2VlaywKICBzdGFydE9mSVNPV2Vla1llYXI6ICgpID0+IHN0YXJ0T2ZJU09XZWVrWWVhciwKICBzdGFydE9mTWludXRlOiAoKSA9PiBzdGFydE9mTWludXRlLAogIHN0YXJ0T2ZNb250aDogKCkgPT4gc3RhcnRPZk1vbnRoLAogIHN0YXJ0T2ZRdWFydGVyOiAoKSA9PiBzdGFydE9mUXVhcnRlciwKICBzdGFydE9mU2Vjb25kOiAoKSA9PiBzdGFydE9mU2Vjb25kLAogIHN0YXJ0T2ZUb2RheTogKCkgPT4gc3RhcnRPZlRvZGF5LAogIHN0YXJ0T2ZUb21vcnJvdzogKCkgPT4gc3RhcnRPZlRvbW9ycm93LAogIHN0YXJ0T2ZXZWVrOiAoKSA9PiBzdGFydE9mV2VlaywKICBzdGFydE9mV2Vla1llYXI6ICgpID0+IHN0YXJ0T2ZXZWVrWWVhciwKICBzdGFydE9mWWVhcjogKCkgPT4gc3RhcnRPZlllYXIsCiAgc3RhcnRPZlllc3RlcmRheTogKCkgPT4gc3RhcnRPZlllc3RlcmRheSwKICBzdWI6ICgpID0+IHN1YiwKICBzdWJCdXNpbmVzc0RheXM6ICgpID0+IHN1YkJ1c2luZXNzRGF5cywKICBzdWJEYXlzOiAoKSA9PiBzdWJEYXlzLAogIHN1YkhvdXJzOiAoKSA9PiBzdWJIb3VycywKICBzdWJJU09XZWVrWWVhcnM6ICgpID0+IHN1YklTT1dlZWtZZWFycywKICBzdWJNaWxsaXNlY29uZHM6ICgpID0+IHN1Yk1pbGxpc2Vjb25kcywKICBzdWJNaW51dGVzOiAoKSA9PiBzdWJNaW51dGVzLAogIHN1Yk1vbnRoczogKCkgPT4gc3ViTW9udGhzLAogIHN1YlF1YXJ0ZXJzOiAoKSA9PiBzdWJRdWFydGVycywKICBzdWJTZWNvbmRzOiAoKSA9PiBzdWJTZWNvbmRzLAogIHN1YldlZWtzOiAoKSA9PiBzdWJXZWVrcywKICBzdWJZZWFyczogKCkgPT4gc3ViWWVhcnMsCiAgdG9EYXRlOiAoKSA9PiB0b0RhdGUsCiAgdHJhbnNwb3NlOiAoKSA9PiB0cmFuc3Bvc2UsCiAgd2Vla3NUb0RheXM6ICgpID0+IHdlZWtzVG9EYXlzLAogIHllYXJzVG9EYXlzOiAoKSA9PiB5ZWFyc1RvRGF5cywKICB5ZWFyc1RvTW9udGhzOiAoKSA9PiB5ZWFyc1RvTW9udGhzLAogIHllYXJzVG9RdWFydGVyczogKCkgPT4geWVhcnNUb1F1YXJ0ZXJzCn0pOwp2YXIgaW5pdF9kYXRlX2ZucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2FkZCgpOwogICAgaW5pdF9hZGRCdXNpbmVzc0RheXMoKTsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9hZGRIb3VycygpOwogICAgaW5pdF9hZGRJU09XZWVrWWVhcnMoKTsKICAgIGluaXRfYWRkTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X2FkZE1pbnV0ZXMoKTsKICAgIGluaXRfYWRkTW9udGhzKCk7CiAgICBpbml0X2FkZFF1YXJ0ZXJzKCk7CiAgICBpbml0X2FkZFNlY29uZHMoKTsKICAgIGluaXRfYWRkV2Vla3MoKTsKICAgIGluaXRfYWRkWWVhcnMoKTsKICAgIGluaXRfYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmcoKTsKICAgIGluaXRfY2xhbXAoKTsKICAgIGluaXRfY2xvc2VzdEluZGV4VG8oKTsKICAgIGluaXRfY2xvc2VzdFRvKCk7CiAgICBpbml0X2NvbXBhcmVBc2MoKTsKICAgIGluaXRfY29tcGFyZURlc2MoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfZGF5c1RvV2Vla3MoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkRheXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluSG91cnMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5NaW51dGVzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1vbnRocygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5RdWFydGVycygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5TZWNvbmRzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbldlZWtzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJblllYXJzKCk7CiAgICBpbml0X2VhY2hEYXlPZkludGVydmFsKCk7CiAgICBpbml0X2VhY2hIb3VyT2ZJbnRlcnZhbCgpOwogICAgaW5pdF9lYWNoTWludXRlT2ZJbnRlcnZhbCgpOwogICAgaW5pdF9lYWNoTW9udGhPZkludGVydmFsKCk7CiAgICBpbml0X2VhY2hRdWFydGVyT2ZJbnRlcnZhbCgpOwogICAgaW5pdF9lYWNoV2Vla09mSW50ZXJ2YWwoKTsKICAgIGluaXRfZWFjaFdlZWtlbmRPZkludGVydmFsKCk7CiAgICBpbml0X2VhY2hXZWVrZW5kT2ZNb250aCgpOwogICAgaW5pdF9lYWNoV2Vla2VuZE9mWWVhcigpOwogICAgaW5pdF9lYWNoWWVhck9mSW50ZXJ2YWwoKTsKICAgIGluaXRfZW5kT2ZEYXkoKTsKICAgIGluaXRfZW5kT2ZEZWNhZGUoKTsKICAgIGluaXRfZW5kT2ZIb3VyKCk7CiAgICBpbml0X2VuZE9mSVNPV2VlaygpOwogICAgaW5pdF9lbmRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X2VuZE9mTWludXRlKCk7CiAgICBpbml0X2VuZE9mTW9udGgoKTsKICAgIGluaXRfZW5kT2ZRdWFydGVyKCk7CiAgICBpbml0X2VuZE9mU2Vjb25kKCk7CiAgICBpbml0X2VuZE9mVG9kYXkoKTsKICAgIGluaXRfZW5kT2ZUb21vcnJvdygpOwogICAgaW5pdF9lbmRPZldlZWsoKTsKICAgIGluaXRfZW5kT2ZZZWFyKCk7CiAgICBpbml0X2VuZE9mWWVzdGVyZGF5KCk7CiAgICBpbml0X2Zvcm1hdCgpOwogICAgaW5pdF9mb3JtYXREaXN0YW5jZTIoKTsKICAgIGluaXRfZm9ybWF0RGlzdGFuY2VTdHJpY3QoKTsKICAgIGluaXRfZm9ybWF0RGlzdGFuY2VUb05vdygpOwogICAgaW5pdF9mb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0KCk7CiAgICBpbml0X2Zvcm1hdER1cmF0aW9uKCk7CiAgICBpbml0X2Zvcm1hdElTTygpOwogICAgaW5pdF9mb3JtYXRJU085MDc1KCk7CiAgICBpbml0X2Zvcm1hdElTT0R1cmF0aW9uKCk7CiAgICBpbml0X2Zvcm1hdFJGQzMzMzkoKTsKICAgIGluaXRfZm9ybWF0UkZDNzIzMSgpOwogICAgaW5pdF9mb3JtYXRSZWxhdGl2ZTIoKTsKICAgIGluaXRfZnJvbVVuaXhUaW1lKCk7CiAgICBpbml0X2dldERhdGUoKTsKICAgIGluaXRfZ2V0RGF5KCk7CiAgICBpbml0X2dldERheU9mWWVhcigpOwogICAgaW5pdF9nZXREYXlzSW5Nb250aCgpOwogICAgaW5pdF9nZXREYXlzSW5ZZWFyKCk7CiAgICBpbml0X2dldERlY2FkZSgpOwogICAgaW5pdF9nZXREZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF9nZXRIb3VycygpOwogICAgaW5pdF9nZXRJU09EYXkoKTsKICAgIGluaXRfZ2V0SVNPV2VlaygpOwogICAgaW5pdF9nZXRJU09XZWVrWWVhcigpOwogICAgaW5pdF9nZXRJU09XZWVrc0luWWVhcigpOwogICAgaW5pdF9nZXRNaWxsaXNlY29uZHMoKTsKICAgIGluaXRfZ2V0TWludXRlcygpOwogICAgaW5pdF9nZXRNb250aCgpOwogICAgaW5pdF9nZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFscygpOwogICAgaW5pdF9nZXRRdWFydGVyKCk7CiAgICBpbml0X2dldFNlY29uZHMoKTsKICAgIGluaXRfZ2V0VGltZSgpOwogICAgaW5pdF9nZXRVbml4VGltZSgpOwogICAgaW5pdF9nZXRXZWVrKCk7CiAgICBpbml0X2dldFdlZWtPZk1vbnRoKCk7CiAgICBpbml0X2dldFdlZWtZZWFyKCk7CiAgICBpbml0X2dldFdlZWtzSW5Nb250aCgpOwogICAgaW5pdF9nZXRZZWFyKCk7CiAgICBpbml0X2hvdXJzVG9NaWxsaXNlY29uZHMoKTsKICAgIGluaXRfaG91cnNUb01pbnV0ZXMoKTsKICAgIGluaXRfaG91cnNUb1NlY29uZHMoKTsKICAgIGluaXRfaW50ZXJ2YWwyKCk7CiAgICBpbml0X2ludGVydmFsVG9EdXJhdGlvbigpOwogICAgaW5pdF9pbnRsRm9ybWF0KCk7CiAgICBpbml0X2ludGxGb3JtYXREaXN0YW5jZSgpOwogICAgaW5pdF9pc0FmdGVyKCk7CiAgICBpbml0X2lzQmVmb3JlKCk7CiAgICBpbml0X2lzRGF0ZTIoKTsKICAgIGluaXRfaXNFcXVhbCgpOwogICAgaW5pdF9pc0V4aXN0cygpOwogICAgaW5pdF9pc0ZpcnN0RGF5T2ZNb250aCgpOwogICAgaW5pdF9pc0ZyaWRheSgpOwogICAgaW5pdF9pc0Z1dHVyZSgpOwogICAgaW5pdF9pc0xhc3REYXlPZk1vbnRoKCk7CiAgICBpbml0X2lzTGVhcFllYXIoKTsKICAgIGluaXRfaXNNYXRjaCgpOwogICAgaW5pdF9pc01vbmRheSgpOwogICAgaW5pdF9pc1Bhc3QoKTsKICAgIGluaXRfaXNTYW1lRGF5KCk7CiAgICBpbml0X2lzU2FtZUhvdXIoKTsKICAgIGluaXRfaXNTYW1lSVNPV2VlaygpOwogICAgaW5pdF9pc1NhbWVJU09XZWVrWWVhcigpOwogICAgaW5pdF9pc1NhbWVNaW51dGUoKTsKICAgIGluaXRfaXNTYW1lTW9udGgoKTsKICAgIGluaXRfaXNTYW1lUXVhcnRlcigpOwogICAgaW5pdF9pc1NhbWVTZWNvbmQoKTsKICAgIGluaXRfaXNTYW1lV2VlaygpOwogICAgaW5pdF9pc1NhbWVZZWFyKCk7CiAgICBpbml0X2lzU2F0dXJkYXkoKTsKICAgIGluaXRfaXNTdW5kYXkoKTsKICAgIGluaXRfaXNUaGlzSG91cigpOwogICAgaW5pdF9pc1RoaXNJU09XZWVrKCk7CiAgICBpbml0X2lzVGhpc01pbnV0ZSgpOwogICAgaW5pdF9pc1RoaXNNb250aCgpOwogICAgaW5pdF9pc1RoaXNRdWFydGVyKCk7CiAgICBpbml0X2lzVGhpc1NlY29uZCgpOwogICAgaW5pdF9pc1RoaXNXZWVrKCk7CiAgICBpbml0X2lzVGhpc1llYXIoKTsKICAgIGluaXRfaXNUaHVyc2RheSgpOwogICAgaW5pdF9pc1RvZGF5KCk7CiAgICBpbml0X2lzVG9tb3Jyb3coKTsKICAgIGluaXRfaXNUdWVzZGF5KCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfaXNXZWRuZXNkYXkoKTsKICAgIGluaXRfaXNXZWVrZW5kKCk7CiAgICBpbml0X2lzV2l0aGluSW50ZXJ2YWwoKTsKICAgIGluaXRfaXNZZXN0ZXJkYXkoKTsKICAgIGluaXRfbGFzdERheU9mRGVjYWRlKCk7CiAgICBpbml0X2xhc3REYXlPZklTT1dlZWsoKTsKICAgIGluaXRfbGFzdERheU9mSVNPV2Vla1llYXIoKTsKICAgIGluaXRfbGFzdERheU9mTW9udGgoKTsKICAgIGluaXRfbGFzdERheU9mUXVhcnRlcigpOwogICAgaW5pdF9sYXN0RGF5T2ZXZWVrKCk7CiAgICBpbml0X2xhc3REYXlPZlllYXIoKTsKICAgIGluaXRfbGlnaHRGb3JtYXQoKTsKICAgIGluaXRfbWF4MigpOwogICAgaW5pdF9taWxsaXNlY29uZHMoKTsKICAgIGluaXRfbWlsbGlzZWNvbmRzVG9Ib3VycygpOwogICAgaW5pdF9taWxsaXNlY29uZHNUb01pbnV0ZXMoKTsKICAgIGluaXRfbWlsbGlzZWNvbmRzVG9TZWNvbmRzKCk7CiAgICBpbml0X21pbjIoKTsKICAgIGluaXRfbWludXRlc1RvSG91cnMoKTsKICAgIGluaXRfbWludXRlc1RvTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X21pbnV0ZXNUb1NlY29uZHMoKTsKICAgIGluaXRfbW9udGhzVG9RdWFydGVycygpOwogICAgaW5pdF9tb250aHNUb1llYXJzKCk7CiAgICBpbml0X25leHREYXkoKTsKICAgIGluaXRfbmV4dEZyaWRheSgpOwogICAgaW5pdF9uZXh0TW9uZGF5KCk7CiAgICBpbml0X25leHRTYXR1cmRheSgpOwogICAgaW5pdF9uZXh0U3VuZGF5KCk7CiAgICBpbml0X25leHRUaHVyc2RheSgpOwogICAgaW5pdF9uZXh0VHVlc2RheSgpOwogICAgaW5pdF9uZXh0V2VkbmVzZGF5KCk7CiAgICBpbml0X3BhcnNlKCk7CiAgICBpbml0X3BhcnNlSVNPKCk7CiAgICBpbml0X3BhcnNlSlNPTigpOwogICAgaW5pdF9wcmV2aW91c0RheSgpOwogICAgaW5pdF9wcmV2aW91c0ZyaWRheSgpOwogICAgaW5pdF9wcmV2aW91c01vbmRheSgpOwogICAgaW5pdF9wcmV2aW91c1NhdHVyZGF5KCk7CiAgICBpbml0X3ByZXZpb3VzU3VuZGF5KCk7CiAgICBpbml0X3ByZXZpb3VzVGh1cnNkYXkoKTsKICAgIGluaXRfcHJldmlvdXNUdWVzZGF5KCk7CiAgICBpbml0X3ByZXZpb3VzV2VkbmVzZGF5KCk7CiAgICBpbml0X3F1YXJ0ZXJzVG9Nb250aHMoKTsKICAgIGluaXRfcXVhcnRlcnNUb1llYXJzKCk7CiAgICBpbml0X3JvdW5kVG9OZWFyZXN0SG91cnMoKTsKICAgIGluaXRfcm91bmRUb05lYXJlc3RNaW51dGVzKCk7CiAgICBpbml0X3NlY29uZHNUb0hvdXJzKCk7CiAgICBpbml0X3NlY29uZHNUb01pbGxpc2Vjb25kcygpOwogICAgaW5pdF9zZWNvbmRzVG9NaW51dGVzKCk7CiAgICBpbml0X3NldCgpOwogICAgaW5pdF9zZXREYXRlKCk7CiAgICBpbml0X3NldERheSgpOwogICAgaW5pdF9zZXREYXlPZlllYXIoKTsKICAgIGluaXRfc2V0RGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfc2V0SG91cnMoKTsKICAgIGluaXRfc2V0SVNPRGF5KCk7CiAgICBpbml0X3NldElTT1dlZWsoKTsKICAgIGluaXRfc2V0SVNPV2Vla1llYXIoKTsKICAgIGluaXRfc2V0TWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X3NldE1pbnV0ZXMoKTsKICAgIGluaXRfc2V0TW9udGgoKTsKICAgIGluaXRfc2V0UXVhcnRlcigpOwogICAgaW5pdF9zZXRTZWNvbmRzKCk7CiAgICBpbml0X3NldFdlZWsoKTsKICAgIGluaXRfc2V0V2Vla1llYXIoKTsKICAgIGluaXRfc2V0WWVhcigpOwogICAgaW5pdF9zdGFydE9mRGF5KCk7CiAgICBpbml0X3N0YXJ0T2ZEZWNhZGUoKTsKICAgIGluaXRfc3RhcnRPZkhvdXIoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X3N0YXJ0T2ZNaW51dGUoKTsKICAgIGluaXRfc3RhcnRPZk1vbnRoKCk7CiAgICBpbml0X3N0YXJ0T2ZRdWFydGVyKCk7CiAgICBpbml0X3N0YXJ0T2ZTZWNvbmQoKTsKICAgIGluaXRfc3RhcnRPZlRvZGF5KCk7CiAgICBpbml0X3N0YXJ0T2ZUb21vcnJvdygpOwogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgaW5pdF9zdGFydE9mV2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZlllYXIoKTsKICAgIGluaXRfc3RhcnRPZlllc3RlcmRheSgpOwogICAgaW5pdF9zdWIoKTsKICAgIGluaXRfc3ViQnVzaW5lc3NEYXlzKCk7CiAgICBpbml0X3N1YkRheXMoKTsKICAgIGluaXRfc3ViSG91cnMoKTsKICAgIGluaXRfc3ViSVNPV2Vla1llYXJzKCk7CiAgICBpbml0X3N1Yk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9zdWJNaW51dGVzKCk7CiAgICBpbml0X3N1Yk1vbnRocygpOwogICAgaW5pdF9zdWJRdWFydGVycygpOwogICAgaW5pdF9zdWJTZWNvbmRzKCk7CiAgICBpbml0X3N1YldlZWtzKCk7CiAgICBpbml0X3N1YlllYXJzKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaW5pdF90cmFuc3Bvc2UoKTsKICAgIGluaXRfd2Vla3NUb0RheXMoKTsKICAgIGluaXRfeWVhcnNUb0RheXMoKTsKICAgIGluaXRfeWVhcnNUb01vbnRocygpOwogICAgaW5pdF95ZWFyc1RvUXVhcnRlcnMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RheWpzQDEuMTEuMTkvbm9kZV9tb2R1bGVzL2RheWpzL2RheWpzLm1pbi5qcwp2YXIgcmVxdWlyZV9kYXlqc19taW4gPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RheWpzQDEuMTEuMTkvbm9kZV9tb2R1bGVzL2RheWpzL2RheWpzLm1pbi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAhKGZ1bmN0aW9uKHQ5LCBlMTEpIHsKICAgICAgIm9iamVjdCIgPT0gdHlwZW9mIGV4cG9ydHMgJiYgInVuZGVmaW5lZCIgIT0gdHlwZW9mIG1vZHVsZSA/IG1vZHVsZS5leHBvcnRzID0gZTExKCkgOiAiZnVuY3Rpb24iID09IHR5cGVvZiBkZWZpbmUgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShlMTEpIDogKHQ5ID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIGdsb2JhbFRoaXMgPyBnbG9iYWxUaGlzIDogdDkgfHwgc2VsZikuZGF5anMgPSBlMTEoKTsKICAgIH0pKGV4cG9ydHMsIChmdW5jdGlvbigpIHsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgdDkgPSAxZTMsIGUxMSA9IDZlNCwgbjEzID0gMzZlNSwgcjExID0gIm1pbGxpc2Vjb25kIiwgaTExID0gInNlY29uZCIsIHM5ID0gIm1pbnV0ZSIsIHU3ID0gImhvdXIiLCBhNSA9ICJkYXkiLCBvMTMgPSAid2VlayIsIGMxMSA9ICJtb250aCIsIGY3ID0gInF1YXJ0ZXIiLCBoOSA9ICJ5ZWFyIiwgZDYgPSAiZGF0ZSIsIGw2ID0gIkludmFsaWQgRGF0ZSIsICQzID0gL14oXGR7NH0pWy0vXT8oXGR7MSwyfSk/Wy0vXT8oXGR7MCwyfSlbVHRcc10qKFxkezEsMn0pPzo/KFxkezEsMn0pPzo/KFxkezEsMn0pP1suOl0/KFxkKyk/JC8sIHk1ID0gL1xbKFteXF1dKyldfFl7MSw0fXxNezEsNH18RHsxLDJ9fGR7MSw0fXxIezEsMn18aHsxLDJ9fGF8QXxtezEsMn18c3sxLDJ9fFp7MSwyfXxTU1MvZywgTTMgPSB7IG5hbWU6ICJlbiIsIHdlZWtkYXlzOiAiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksIG1vbnRoczogIkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksIG9yZGluYWw6IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHZhciBlMTIgPSBbInRoIiwgInN0IiwgIm5kIiwgInJkIl0sIG4xNCA9IHQxMCAlIDEwMDsKICAgICAgICByZXR1cm4gIlsiICsgdDEwICsgKGUxMlsobjE0IC0gMjApICUgMTBdIHx8IGUxMltuMTRdIHx8IGUxMlswXSkgKyAiXSI7CiAgICAgIH0gfSwgbTYgPSBmdW5jdGlvbih0MTAsIGUxMiwgbjE0KSB7CiAgICAgICAgdmFyIHIxMiA9IFN0cmluZyh0MTApOwogICAgICAgIHJldHVybiAhcjEyIHx8IHIxMi5sZW5ndGggPj0gZTEyID8gdDEwIDogIiIgKyBBcnJheShlMTIgKyAxIC0gcjEyLmxlbmd0aCkuam9pbihuMTQpICsgdDEwOwogICAgICB9LCB2NSA9IHsgczogbTYsIHo6IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHZhciBlMTIgPSAtdDEwLnV0Y09mZnNldCgpLCBuMTQgPSBNYXRoLmFicyhlMTIpLCByMTIgPSBNYXRoLmZsb29yKG4xNCAvIDYwKSwgaTEyID0gbjE0ICUgNjA7CiAgICAgICAgcmV0dXJuIChlMTIgPD0gMCA/ICIrIiA6ICItIikgKyBtNihyMTIsIDIsICIwIikgKyAiOiIgKyBtNihpMTIsIDIsICIwIik7CiAgICAgIH0sIG06IGZ1bmN0aW9uIHQxMChlMTIsIG4xNCkgewogICAgICAgIGlmIChlMTIuZGF0ZSgpIDwgbjE0LmRhdGUoKSkgcmV0dXJuIC10MTAobjE0LCBlMTIpOwogICAgICAgIHZhciByMTIgPSAxMiAqIChuMTQueWVhcigpIC0gZTEyLnllYXIoKSkgKyAobjE0Lm1vbnRoKCkgLSBlMTIubW9udGgoKSksIGkxMiA9IGUxMi5jbG9uZSgpLmFkZChyMTIsIGMxMSksIHMxMCA9IG4xNCAtIGkxMiA8IDAsIHU4ID0gZTEyLmNsb25lKCkuYWRkKHIxMiArIChzMTAgPyAtMSA6IDEpLCBjMTEpOwogICAgICAgIHJldHVybiArKC0ocjEyICsgKG4xNCAtIGkxMikgLyAoczEwID8gaTEyIC0gdTggOiB1OCAtIGkxMikpIHx8IDApOwogICAgICB9LCBhOiBmdW5jdGlvbih0MTApIHsKICAgICAgICByZXR1cm4gdDEwIDwgMCA/IE1hdGguY2VpbCh0MTApIHx8IDAgOiBNYXRoLmZsb29yKHQxMCk7CiAgICAgIH0sIHA6IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHJldHVybiB7IE06IGMxMSwgeTogaDksIHc6IG8xMywgZDogYTUsIEQ6IGQ2LCBoOiB1NywgbTogczksIHM6IGkxMSwgbXM6IHIxMSwgUTogZjcgfVt0MTBdIHx8IFN0cmluZyh0MTAgfHwgIiIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvcyQvLCAiIik7CiAgICAgIH0sIHU6IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHJldHVybiB2b2lkIDAgPT09IHQxMDsKICAgICAgfSB9LCBnNCA9ICJlbiIsIEQ0ID0ge307CiAgICAgIEQ0W2c0XSA9IE0zOwogICAgICB2YXIgcDcgPSAiJGlzRGF5anNPYmplY3QiLCBTNSA9IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHJldHVybiB0MTAgaW5zdGFuY2VvZiBfNCB8fCAhKCF0MTAgfHwgIXQxMFtwN10pOwogICAgICB9LCB3MyA9IGZ1bmN0aW9uIHQxMChlMTIsIG4xNCwgcjEyKSB7CiAgICAgICAgdmFyIGkxMjsKICAgICAgICBpZiAoIWUxMikgcmV0dXJuIGc0OwogICAgICAgIGlmICgic3RyaW5nIiA9PSB0eXBlb2YgZTEyKSB7CiAgICAgICAgICB2YXIgczEwID0gZTEyLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBENFtzMTBdICYmIChpMTIgPSBzMTApLCBuMTQgJiYgKEQ0W3MxMF0gPSBuMTQsIGkxMiA9IHMxMCk7CiAgICAgICAgICB2YXIgdTggPSBlMTIuc3BsaXQoIi0iKTsKICAgICAgICAgIGlmICghaTEyICYmIHU4Lmxlbmd0aCA+IDEpIHJldHVybiB0MTAodThbMF0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgYTYgPSBlMTIubmFtZTsKICAgICAgICAgIEQ0W2E2XSA9IGUxMiwgaTEyID0gYTY7CiAgICAgICAgfQogICAgICAgIHJldHVybiAhcjEyICYmIGkxMiAmJiAoZzQgPSBpMTIpLCBpMTIgfHwgIXIxMiAmJiBnNDsKICAgICAgfSwgTzIgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgIGlmIChTNSh0MTApKSByZXR1cm4gdDEwLmNsb25lKCk7CiAgICAgICAgdmFyIG4xNCA9ICJvYmplY3QiID09IHR5cGVvZiBlMTIgPyBlMTIgOiB7fTsKICAgICAgICByZXR1cm4gbjE0LmRhdGUgPSB0MTAsIG4xNC5hcmdzID0gYXJndW1lbnRzLCBuZXcgXzQobjE0KTsKICAgICAgfSwgYjUgPSB2NTsKICAgICAgYjUubCA9IHczLCBiNS5pID0gUzUsIGI1LncgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgIHJldHVybiBPMih0MTAsIHsgbG9jYWxlOiBlMTIuJEwsIHV0YzogZTEyLiR1LCB4OiBlMTIuJHgsICRvZmZzZXQ6IGUxMi4kb2Zmc2V0IH0pOwogICAgICB9OwogICAgICB2YXIgXzQgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgZnVuY3Rpb24gTTQodDEwKSB7CiAgICAgICAgICB0aGlzLiRMID0gdzModDEwLmxvY2FsZSwgbnVsbCwgdHJ1ZSksIHRoaXMucGFyc2UodDEwKSwgdGhpcy4keCA9IHRoaXMuJHggfHwgdDEwLnggfHwge30sIHRoaXNbcDddID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgdmFyIG03ID0gTTQucHJvdG90eXBlOwogICAgICAgIHJldHVybiBtNy5wYXJzZSA9IGZ1bmN0aW9uKHQxMCkgewogICAgICAgICAgdGhpcy4kZCA9IChmdW5jdGlvbih0MTEpIHsKICAgICAgICAgICAgdmFyIGUxMiA9IHQxMS5kYXRlLCBuMTQgPSB0MTEudXRjOwogICAgICAgICAgICBpZiAobnVsbCA9PT0gZTEyKSByZXR1cm4gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7CiAgICAgICAgICAgIGlmIChiNS51KGUxMikpIHJldHVybiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgICAgICAgaWYgKGUxMiBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBuZXcgRGF0ZShlMTIpOwogICAgICAgICAgICBpZiAoInN0cmluZyIgPT0gdHlwZW9mIGUxMiAmJiAhL1okL2kudGVzdChlMTIpKSB7CiAgICAgICAgICAgICAgdmFyIHIxMiA9IGUxMi5tYXRjaCgkMyk7CiAgICAgICAgICAgICAgaWYgKHIxMikgewogICAgICAgICAgICAgICAgdmFyIGkxMiA9IHIxMlsyXSAtIDEgfHwgMCwgczEwID0gKHIxMls3XSB8fCAiMCIpLnN1YnN0cmluZygwLCAzKTsKICAgICAgICAgICAgICAgIHJldHVybiBuMTQgPyBuZXcgRGF0ZShEYXRlLlVUQyhyMTJbMV0sIGkxMiwgcjEyWzNdIHx8IDEsIHIxMls0XSB8fCAwLCByMTJbNV0gfHwgMCwgcjEyWzZdIHx8IDAsIHMxMCkpIDogbmV3IERhdGUocjEyWzFdLCBpMTIsIHIxMlszXSB8fCAxLCByMTJbNF0gfHwgMCwgcjEyWzVdIHx8IDAsIHIxMls2XSB8fCAwLCBzMTApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZTEyKTsKICAgICAgICAgIH0pKHQxMCksIHRoaXMuaW5pdCgpOwogICAgICAgIH0sIG03LmluaXQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciB0MTAgPSB0aGlzLiRkOwogICAgICAgICAgdGhpcy4keSA9IHQxMC5nZXRGdWxsWWVhcigpLCB0aGlzLiRNID0gdDEwLmdldE1vbnRoKCksIHRoaXMuJEQgPSB0MTAuZ2V0RGF0ZSgpLCB0aGlzLiRXID0gdDEwLmdldERheSgpLCB0aGlzLiRIID0gdDEwLmdldEhvdXJzKCksIHRoaXMuJG0gPSB0MTAuZ2V0TWludXRlcygpLCB0aGlzLiRzID0gdDEwLmdldFNlY29uZHMoKSwgdGhpcy4kbXMgPSB0MTAuZ2V0TWlsbGlzZWNvbmRzKCk7CiAgICAgICAgfSwgbTcuJHV0aWxzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gYjU7CiAgICAgICAgfSwgbTcuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuICEodGhpcy4kZC50b1N0cmluZygpID09PSBsNik7CiAgICAgICAgfSwgbTcuaXNTYW1lID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIHZhciBuMTQgPSBPMih0MTApOwogICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRPZihlMTIpIDw9IG4xNCAmJiBuMTQgPD0gdGhpcy5lbmRPZihlMTIpOwogICAgICAgIH0sIG03LmlzQWZ0ZXIgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgICAgcmV0dXJuIE8yKHQxMCkgPCB0aGlzLnN0YXJ0T2YoZTEyKTsKICAgICAgICB9LCBtNy5pc0JlZm9yZSA9IGZ1bmN0aW9uKHQxMCwgZTEyKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5lbmRPZihlMTIpIDwgTzIodDEwKTsKICAgICAgICB9LCBtNy4kZyA9IGZ1bmN0aW9uKHQxMCwgZTEyLCBuMTQpIHsKICAgICAgICAgIHJldHVybiBiNS51KHQxMCkgPyB0aGlzW2UxMl0gOiB0aGlzLnNldChuMTQsIHQxMCk7CiAgICAgICAgfSwgbTcudW5peCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkgLyAxZTMpOwogICAgICAgIH0sIG03LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiRkLmdldFRpbWUoKTsKICAgICAgICB9LCBtNy5zdGFydE9mID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIHZhciBuMTQgPSB0aGlzLCByMTIgPSAhIWI1LnUoZTEyKSB8fCBlMTIsIGY4ID0gYjUucCh0MTApLCBsNyA9IGZ1bmN0aW9uKHQxMSwgZTEzKSB7CiAgICAgICAgICAgIHZhciBpMTIgPSBiNS53KG4xNC4kdSA/IERhdGUuVVRDKG4xNC4keSwgZTEzLCB0MTEpIDogbmV3IERhdGUobjE0LiR5LCBlMTMsIHQxMSksIG4xNCk7CiAgICAgICAgICAgIHJldHVybiByMTIgPyBpMTIgOiBpMTIuZW5kT2YoYTUpOwogICAgICAgICAgfSwgJDQgPSBmdW5jdGlvbih0MTEsIGUxMykgewogICAgICAgICAgICByZXR1cm4gYjUudyhuMTQudG9EYXRlKClbdDExXS5hcHBseShuMTQudG9EYXRlKCJzIiksIChyMTIgPyBbMCwgMCwgMCwgMF0gOiBbMjMsIDU5LCA1OSwgOTk5XSkuc2xpY2UoZTEzKSksIG4xNCk7CiAgICAgICAgICB9LCB5NiA9IHRoaXMuJFcsIE01ID0gdGhpcy4kTSwgbTggPSB0aGlzLiRELCB2NiA9ICJzZXQiICsgKHRoaXMuJHUgPyAiVVRDIiA6ICIiKTsKICAgICAgICAgIHN3aXRjaCAoZjgpIHsKICAgICAgICAgICAgY2FzZSBoOToKICAgICAgICAgICAgICByZXR1cm4gcjEyID8gbDcoMSwgMCkgOiBsNygzMSwgMTEpOwogICAgICAgICAgICBjYXNlIGMxMToKICAgICAgICAgICAgICByZXR1cm4gcjEyID8gbDcoMSwgTTUpIDogbDcoMCwgTTUgKyAxKTsKICAgICAgICAgICAgY2FzZSBvMTM6CiAgICAgICAgICAgICAgdmFyIGc1ID0gdGhpcy4kbG9jYWxlKCkud2Vla1N0YXJ0IHx8IDAsIEQ1ID0gKHk2IDwgZzUgPyB5NiArIDcgOiB5NikgLSBnNTsKICAgICAgICAgICAgICByZXR1cm4gbDcocjEyID8gbTggLSBENSA6IG04ICsgKDYgLSBENSksIE01KTsKICAgICAgICAgICAgY2FzZSBhNToKICAgICAgICAgICAgY2FzZSBkNjoKICAgICAgICAgICAgICByZXR1cm4gJDQodjYgKyAiSG91cnMiLCAwKTsKICAgICAgICAgICAgY2FzZSB1NzoKICAgICAgICAgICAgICByZXR1cm4gJDQodjYgKyAiTWludXRlcyIsIDEpOwogICAgICAgICAgICBjYXNlIHM5OgogICAgICAgICAgICAgIHJldHVybiAkNCh2NiArICJTZWNvbmRzIiwgMik7CiAgICAgICAgICAgIGNhc2UgaTExOgogICAgICAgICAgICAgIHJldHVybiAkNCh2NiArICJNaWxsaXNlY29uZHMiLCAzKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpOwogICAgICAgICAgfQogICAgICAgIH0sIG03LmVuZE9mID0gZnVuY3Rpb24odDEwKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydE9mKHQxMCwgZmFsc2UpOwogICAgICAgIH0sIG03LiRzZXQgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgICAgdmFyIG4xNCwgbzE0ID0gYjUucCh0MTApLCBmOCA9ICJzZXQiICsgKHRoaXMuJHUgPyAiVVRDIiA6ICIiKSwgbDcgPSAobjE0ID0ge30sIG4xNFthNV0gPSBmOCArICJEYXRlIiwgbjE0W2Q2XSA9IGY4ICsgIkRhdGUiLCBuMTRbYzExXSA9IGY4ICsgIk1vbnRoIiwgbjE0W2g5XSA9IGY4ICsgIkZ1bGxZZWFyIiwgbjE0W3U3XSA9IGY4ICsgIkhvdXJzIiwgbjE0W3M5XSA9IGY4ICsgIk1pbnV0ZXMiLCBuMTRbaTExXSA9IGY4ICsgIlNlY29uZHMiLCBuMTRbcjExXSA9IGY4ICsgIk1pbGxpc2Vjb25kcyIsIG4xNClbbzE0XSwgJDQgPSBvMTQgPT09IGE1ID8gdGhpcy4kRCArIChlMTIgLSB0aGlzLiRXKSA6IGUxMjsKICAgICAgICAgIGlmIChvMTQgPT09IGMxMSB8fCBvMTQgPT09IGg5KSB7CiAgICAgICAgICAgIHZhciB5NiA9IHRoaXMuY2xvbmUoKS5zZXQoZDYsIDEpOwogICAgICAgICAgICB5Ni4kZFtsN10oJDQpLCB5Ni5pbml0KCksIHRoaXMuJGQgPSB5Ni5zZXQoZDYsIE1hdGgubWluKHRoaXMuJEQsIHk2LmRheXNJbk1vbnRoKCkpKS4kZDsKICAgICAgICAgIH0gZWxzZSBsNyAmJiB0aGlzLiRkW2w3XSgkNCk7CiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0KCksIHRoaXM7CiAgICAgICAgfSwgbTcuc2V0ID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuJHNldCh0MTAsIGUxMik7CiAgICAgICAgfSwgbTcuZ2V0ID0gZnVuY3Rpb24odDEwKSB7CiAgICAgICAgICByZXR1cm4gdGhpc1tiNS5wKHQxMCldKCk7CiAgICAgICAgfSwgbTcuYWRkID0gZnVuY3Rpb24ocjEyLCBmOCkgewogICAgICAgICAgdmFyIGQ3LCBsNyA9IHRoaXM7CiAgICAgICAgICByMTIgPSBOdW1iZXIocjEyKTsKICAgICAgICAgIHZhciAkNCA9IGI1LnAoZjgpLCB5NiA9IGZ1bmN0aW9uKHQxMCkgewogICAgICAgICAgICB2YXIgZTEyID0gTzIobDcpOwogICAgICAgICAgICByZXR1cm4gYjUudyhlMTIuZGF0ZShlMTIuZGF0ZSgpICsgTWF0aC5yb3VuZCh0MTAgKiByMTIpKSwgbDcpOwogICAgICAgICAgfTsKICAgICAgICAgIGlmICgkNCA9PT0gYzExKSByZXR1cm4gdGhpcy5zZXQoYzExLCB0aGlzLiRNICsgcjEyKTsKICAgICAgICAgIGlmICgkNCA9PT0gaDkpIHJldHVybiB0aGlzLnNldChoOSwgdGhpcy4keSArIHIxMik7CiAgICAgICAgICBpZiAoJDQgPT09IGE1KSByZXR1cm4geTYoMSk7CiAgICAgICAgICBpZiAoJDQgPT09IG8xMykgcmV0dXJuIHk2KDcpOwogICAgICAgICAgdmFyIE01ID0gKGQ3ID0ge30sIGQ3W3M5XSA9IGUxMSwgZDdbdTddID0gbjEzLCBkN1tpMTFdID0gdDksIGQ3KVskNF0gfHwgMSwgbTggPSB0aGlzLiRkLmdldFRpbWUoKSArIHIxMiAqIE01OwogICAgICAgICAgcmV0dXJuIGI1LncobTgsIHRoaXMpOwogICAgICAgIH0sIG03LnN1YnRyYWN0ID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmFkZCgtMSAqIHQxMCwgZTEyKTsKICAgICAgICB9LCBtNy5mb3JtYXQgPSBmdW5jdGlvbih0MTApIHsKICAgICAgICAgIHZhciBlMTIgPSB0aGlzLCBuMTQgPSB0aGlzLiRsb2NhbGUoKTsKICAgICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHJldHVybiBuMTQuaW52YWxpZERhdGUgfHwgbDY7CiAgICAgICAgICB2YXIgcjEyID0gdDEwIHx8ICJZWVlZLU1NLUREVEhIOm1tOnNzWiIsIGkxMiA9IGI1LnoodGhpcyksIHMxMCA9IHRoaXMuJEgsIHU4ID0gdGhpcy4kbSwgYTYgPSB0aGlzLiRNLCBvMTQgPSBuMTQud2Vla2RheXMsIGMxMiA9IG4xNC5tb250aHMsIGY4ID0gbjE0Lm1lcmlkaWVtLCBoMTAgPSBmdW5jdGlvbih0MTEsIG4xNSwgaTEzLCBzMTEpIHsKICAgICAgICAgICAgcmV0dXJuIHQxMSAmJiAodDExW24xNV0gfHwgdDExKGUxMiwgcjEyKSkgfHwgaTEzW24xNV0uc2xpY2UoMCwgczExKTsKICAgICAgICAgIH0sIGQ3ID0gZnVuY3Rpb24odDExKSB7CiAgICAgICAgICAgIHJldHVybiBiNS5zKHMxMCAlIDEyIHx8IDEyLCB0MTEsICIwIik7CiAgICAgICAgICB9LCAkNCA9IGY4IHx8IGZ1bmN0aW9uKHQxMSwgZTEzLCBuMTUpIHsKICAgICAgICAgICAgdmFyIHIxMyA9IHQxMSA8IDEyID8gIkFNIiA6ICJQTSI7CiAgICAgICAgICAgIHJldHVybiBuMTUgPyByMTMudG9Mb3dlckNhc2UoKSA6IHIxMzsKICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gcjEyLnJlcGxhY2UoeTUsIChmdW5jdGlvbih0MTEsIHIxMykgewogICAgICAgICAgICByZXR1cm4gcjEzIHx8IChmdW5jdGlvbih0MTIpIHsKICAgICAgICAgICAgICBzd2l0Y2ggKHQxMikgewogICAgICAgICAgICAgICAgY2FzZSAiWVkiOgogICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGUxMi4keSkuc2xpY2UoLTIpOwogICAgICAgICAgICAgICAgY2FzZSAiWVlZWSI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBiNS5zKGUxMi4keSwgNCwgIjAiKTsKICAgICAgICAgICAgICAgIGNhc2UgIk0iOgogICAgICAgICAgICAgICAgICByZXR1cm4gYTYgKyAxOwogICAgICAgICAgICAgICAgY2FzZSAiTU0iOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhhNiArIDEsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJNTU0iOgogICAgICAgICAgICAgICAgICByZXR1cm4gaDEwKG4xNC5tb250aHNTaG9ydCwgYTYsIGMxMiwgMyk7CiAgICAgICAgICAgICAgICBjYXNlICJNTU1NIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGgxMChjMTIsIGE2KTsKICAgICAgICAgICAgICAgIGNhc2UgIkQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gZTEyLiREOwogICAgICAgICAgICAgICAgY2FzZSAiREQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhlMTIuJEQsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJkIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlMTIuJFcpOwogICAgICAgICAgICAgICAgY2FzZSAiZGQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gaDEwKG4xNC53ZWVrZGF5c01pbiwgZTEyLiRXLCBvMTQsIDIpOwogICAgICAgICAgICAgICAgY2FzZSAiZGRkIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGgxMChuMTQud2Vla2RheXNTaG9ydCwgZTEyLiRXLCBvMTQsIDMpOwogICAgICAgICAgICAgICAgY2FzZSAiZGRkZCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBvMTRbZTEyLiRXXTsKICAgICAgICAgICAgICAgIGNhc2UgIkgiOgogICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHMxMCk7CiAgICAgICAgICAgICAgICBjYXNlICJISCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBiNS5zKHMxMCwgMiwgIjAiKTsKICAgICAgICAgICAgICAgIGNhc2UgImgiOgogICAgICAgICAgICAgICAgICByZXR1cm4gZDcoMSk7CiAgICAgICAgICAgICAgICBjYXNlICJoaCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBkNygyKTsKICAgICAgICAgICAgICAgIGNhc2UgImEiOgogICAgICAgICAgICAgICAgICByZXR1cm4gJDQoczEwLCB1OCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICBjYXNlICJBIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuICQ0KHMxMCwgdTgsIGZhbHNlKTsKICAgICAgICAgICAgICAgIGNhc2UgIm0iOgogICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHU4KTsKICAgICAgICAgICAgICAgIGNhc2UgIm1tIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGI1LnModTgsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJzIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlMTIuJHMpOwogICAgICAgICAgICAgICAgY2FzZSAic3MiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhlMTIuJHMsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJTU1MiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhlMTIuJG1zLCAzLCAiMCIpOwogICAgICAgICAgICAgICAgY2FzZSAiWiI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBpMTI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9KSh0MTEpIHx8IGkxMi5yZXBsYWNlKCI6IiwgIiIpOwogICAgICAgICAgfSkpOwogICAgICAgIH0sIG03LnV0Y09mZnNldCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIDE1ICogLU1hdGgucm91bmQodGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpIC8gMTUpOwogICAgICAgIH0sIG03LmRpZmYgPSBmdW5jdGlvbihyMTIsIGQ3LCBsNykgewogICAgICAgICAgdmFyICQ0LCB5NiA9IHRoaXMsIE01ID0gYjUucChkNyksIG04ID0gTzIocjEyKSwgdjYgPSAobTgudXRjT2Zmc2V0KCkgLSB0aGlzLnV0Y09mZnNldCgpKSAqIGUxMSwgZzUgPSB0aGlzIC0gbTgsIEQ1ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBiNS5tKHk2LCBtOCk7CiAgICAgICAgICB9OwogICAgICAgICAgc3dpdGNoIChNNSkgewogICAgICAgICAgICBjYXNlIGg5OgogICAgICAgICAgICAgICQ0ID0gRDUoKSAvIDEyOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIGMxMToKICAgICAgICAgICAgICAkNCA9IEQ1KCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgZjc6CiAgICAgICAgICAgICAgJDQgPSBENSgpIC8gMzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBvMTM6CiAgICAgICAgICAgICAgJDQgPSAoZzUgLSB2NikgLyA2MDQ4ZTU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgYTU6CiAgICAgICAgICAgICAgJDQgPSAoZzUgLSB2NikgLyA4NjRlNTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSB1NzoKICAgICAgICAgICAgICAkNCA9IGc1IC8gbjEzOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIHM5OgogICAgICAgICAgICAgICQ0ID0gZzUgLyBlMTE7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgaTExOgogICAgICAgICAgICAgICQ0ID0gZzUgLyB0OTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAkNCA9IGc1OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGw3ID8gJDQgOiBiNS5hKCQ0KTsKICAgICAgICB9LCBtNy5kYXlzSW5Nb250aCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuZW5kT2YoYzExKS4kRDsKICAgICAgICB9LCBtNy4kbG9jYWxlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gRDRbdGhpcy4kTF07CiAgICAgICAgfSwgbTcubG9jYWxlID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIGlmICghdDEwKSByZXR1cm4gdGhpcy4kTDsKICAgICAgICAgIHZhciBuMTQgPSB0aGlzLmNsb25lKCksIHIxMiA9IHczKHQxMCwgZTEyLCB0cnVlKTsKICAgICAgICAgIHJldHVybiByMTIgJiYgKG4xNC4kTCA9IHIxMiksIG4xNDsKICAgICAgICB9LCBtNy5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGI1LncodGhpcy4kZCwgdGhpcyk7CiAgICAgICAgfSwgbTcudG9EYXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpOwogICAgICAgIH0sIG03LnRvSlNPTiA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy50b0lTT1N0cmluZygpIDogbnVsbDsKICAgICAgICB9LCBtNy50b0lTT1N0cmluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuJGQudG9JU09TdHJpbmcoKTsKICAgICAgICB9LCBtNy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuJGQudG9VVENTdHJpbmcoKTsKICAgICAgICB9LCBNNDsKICAgICAgfSkoKSwgazQgPSBfNC5wcm90b3R5cGU7CiAgICAgIHJldHVybiBPMi5wcm90b3R5cGUgPSBrNCwgW1siJG1zIiwgcjExXSwgWyIkcyIsIGkxMV0sIFsiJG0iLCBzOV0sIFsiJEgiLCB1N10sIFsiJFciLCBhNV0sIFsiJE0iLCBjMTFdLCBbIiR5IiwgaDldLCBbIiREIiwgZDZdXS5mb3JFYWNoKChmdW5jdGlvbih0MTApIHsKICAgICAgICBrNFt0MTBbMV1dID0gZnVuY3Rpb24oZTEyKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4kZyhlMTIsIHQxMFswXSwgdDEwWzFdKTsKICAgICAgICB9OwogICAgICB9KSksIE8yLmV4dGVuZCA9IGZ1bmN0aW9uKHQxMCwgZTEyKSB7CiAgICAgICAgcmV0dXJuIHQxMC4kaSB8fCAodDEwKGUxMiwgXzQsIE8yKSwgdDEwLiRpID0gdHJ1ZSksIE8yOwogICAgICB9LCBPMi5sb2NhbGUgPSB3MywgTzIuaXNEYXlqcyA9IFM1LCBPMi51bml4ID0gZnVuY3Rpb24odDEwKSB7CiAgICAgICAgcmV0dXJuIE8yKDFlMyAqIHQxMCk7CiAgICAgIH0sIE8yLmVuID0gRDRbZzRdLCBPMi5McyA9IEQ0LCBPMi5wID0ge30sIE8yOwogICAgfSkpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF5anNAMS4xMS4xOS9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2lzVG9kYXkuanMKdmFyIHJlcXVpcmVfaXNUb2RheSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vZGF5anNAMS4xMS4xOS9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2lzVG9kYXkuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgIShmdW5jdGlvbihlMTEsIG8xMykgewogICAgICAib2JqZWN0IiA9PSB0eXBlb2YgZXhwb3J0cyAmJiAidW5kZWZpbmVkIiAhPSB0eXBlb2YgbW9kdWxlID8gbW9kdWxlLmV4cG9ydHMgPSBvMTMoKSA6ICJmdW5jdGlvbiIgPT0gdHlwZW9mIGRlZmluZSAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKG8xMykgOiAoZTExID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIGdsb2JhbFRoaXMgPyBnbG9iYWxUaGlzIDogZTExIHx8IHNlbGYpLmRheWpzX3BsdWdpbl9pc1RvZGF5ID0gbzEzKCk7CiAgICB9KShleHBvcnRzLCAoZnVuY3Rpb24oKSB7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUxMSwgbzEzLCB0OSkgewogICAgICAgIG8xMy5wcm90b3R5cGUuaXNUb2RheSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIGUxMiA9ICJZWVlZLU1NLUREIiwgbzE0ID0gdDkoKTsKICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChlMTIpID09PSBvMTQuZm9ybWF0KGUxMik7CiAgICAgICAgfTsKICAgICAgfTsKICAgIH0pKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3BhcnNlLW1zQDQuMC4wL25vZGVfbW9kdWxlcy9wYXJzZS1tcy9pbmRleC5qcwpmdW5jdGlvbiBwYXJzZU51bWJlcihtaWxsaXNlY29uZHMyKSB7CiAgcmV0dXJuIHsKICAgIGRheXM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzMiAvIDg2NGU1KSwKICAgIGhvdXJzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kczIgLyAzNmU1ICUgMjQpLAogICAgbWludXRlczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMyIC8gNmU0ICUgNjApLAogICAgc2Vjb25kczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMyIC8gMWUzICUgNjApLAogICAgbWlsbGlzZWNvbmRzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kczIgJSAxZTMpLAogICAgbWljcm9zZWNvbmRzOiBNYXRoLnRydW5jKHRvWmVyb0lmSW5maW5pdHkobWlsbGlzZWNvbmRzMiAqIDFlMykgJSAxZTMpLAogICAgbmFub3NlY29uZHM6IE1hdGgudHJ1bmModG9aZXJvSWZJbmZpbml0eShtaWxsaXNlY29uZHMyICogMWU2KSAlIDFlMykKICB9Owp9CmZ1bmN0aW9uIHBhcnNlQmlnaW50KG1pbGxpc2Vjb25kczIpIHsKICByZXR1cm4gewogICAgZGF5czogbWlsbGlzZWNvbmRzMiAvIDg2NDAwMDAwbiwKICAgIGhvdXJzOiBtaWxsaXNlY29uZHMyIC8gMzYwMDAwMG4gJSAyNG4sCiAgICBtaW51dGVzOiBtaWxsaXNlY29uZHMyIC8gNjAwMDBuICUgNjBuLAogICAgc2Vjb25kczogbWlsbGlzZWNvbmRzMiAvIDEwMDBuICUgNjBuLAogICAgbWlsbGlzZWNvbmRzOiBtaWxsaXNlY29uZHMyICUgMTAwMG4sCiAgICBtaWNyb3NlY29uZHM6IDBuLAogICAgbmFub3NlY29uZHM6IDBuCiAgfTsKfQpmdW5jdGlvbiBwYXJzZU1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMyKSB7CiAgc3dpdGNoICh0eXBlb2YgbWlsbGlzZWNvbmRzMikgewogICAgY2FzZSAibnVtYmVyIjogewogICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG1pbGxpc2Vjb25kczIpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1pbGxpc2Vjb25kczIpOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSAiYmlnaW50IjogewogICAgICByZXR1cm4gcGFyc2VCaWdpbnQobWlsbGlzZWNvbmRzMik7CiAgICB9CiAgfQogIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgZmluaXRlIG51bWJlciBvciBiaWdpbnQiKTsKfQp2YXIgdG9aZXJvSWZJbmZpbml0eTsKdmFyIGluaXRfcGFyc2VfbXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYXJzZS1tc0A0LjAuMC9ub2RlX21vZHVsZXMvcGFyc2UtbXMvaW5kZXguanMiKCkgewogICAgdG9aZXJvSWZJbmZpbml0eSA9ICh2YWx1ZTIpID0+IE51bWJlci5pc0Zpbml0ZSh2YWx1ZTIpID8gdmFsdWUyIDogMDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ByZXR0eS1tc0A5LjMuMC9ub2RlX21vZHVsZXMvcHJldHR5LW1zL2luZGV4LmpzCmZ1bmN0aW9uIHByZXR0eU1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMyLCBvcHRpb25zKSB7CiAgY29uc3QgaXNCaWdJbnQgPSB0eXBlb2YgbWlsbGlzZWNvbmRzMiA9PT0gImJpZ2ludCI7CiAgaWYgKCFpc0JpZ0ludCAmJiAhTnVtYmVyLmlzRmluaXRlKG1pbGxpc2Vjb25kczIpKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGZpbml0ZSBudW1iZXIgb3IgYmlnaW50Iik7CiAgfQogIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfTsKICBjb25zdCBzaWduID0gbWlsbGlzZWNvbmRzMiA8IDAgPyAiLSIgOiAiIjsKICBtaWxsaXNlY29uZHMyID0gbWlsbGlzZWNvbmRzMiA8IDAgPyAtbWlsbGlzZWNvbmRzMiA6IG1pbGxpc2Vjb25kczI7CiAgaWYgKG9wdGlvbnMuY29sb25Ob3RhdGlvbikgewogICAgb3B0aW9ucy5jb21wYWN0ID0gZmFsc2U7CiAgICBvcHRpb25zLmZvcm1hdFN1Yk1pbGxpc2Vjb25kcyA9IGZhbHNlOwogICAgb3B0aW9ucy5zZXBhcmF0ZU1pbGxpc2Vjb25kcyA9IGZhbHNlOwogICAgb3B0aW9ucy52ZXJib3NlID0gZmFsc2U7CiAgfQogIGlmIChvcHRpb25zLmNvbXBhY3QpIHsKICAgIG9wdGlvbnMudW5pdENvdW50ID0gMTsKICAgIG9wdGlvbnMuc2Vjb25kc0RlY2ltYWxEaWdpdHMgPSAwOwogICAgb3B0aW9ucy5taWxsaXNlY29uZHNEZWNpbWFsRGlnaXRzID0gMDsKICB9CiAgbGV0IHJlc3VsdCA9IFtdOwogIGNvbnN0IGZsb29yRGVjaW1hbHMgPSAodmFsdWUyLCBkZWNpbWFsRGlnaXRzKSA9PiB7CiAgICBjb25zdCBmbG9vcmVkSW50ZXJpbVZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZTIgKiAxMCAqKiBkZWNpbWFsRGlnaXRzICsgU0VDT05EX1JPVU5ESU5HX0VQU0lMT04pOwogICAgY29uc3QgZmxvb3JlZFZhbHVlID0gTWF0aC5yb3VuZChmbG9vcmVkSW50ZXJpbVZhbHVlKSAvIDEwICoqIGRlY2ltYWxEaWdpdHM7CiAgICByZXR1cm4gZmxvb3JlZFZhbHVlLnRvRml4ZWQoZGVjaW1hbERpZ2l0cyk7CiAgfTsKICBjb25zdCBhZGQzID0gKHZhbHVlMiwgbG9uZywgc2hvcnQsIHZhbHVlU3RyaW5nKSA9PiB7CiAgICBpZiAoKHJlc3VsdC5sZW5ndGggPT09IDAgfHwgIW9wdGlvbnMuY29sb25Ob3RhdGlvbikgJiYgaXNaZXJvKHZhbHVlMikgJiYgIShvcHRpb25zLmNvbG9uTm90YXRpb24gJiYgc2hvcnQgPT09ICJtIikpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFsdWVTdHJpbmcgPz89IFN0cmluZyh2YWx1ZTIpOwogICAgaWYgKG9wdGlvbnMuY29sb25Ob3RhdGlvbikgewogICAgICBjb25zdCB3aG9sZURpZ2l0cyA9IHZhbHVlU3RyaW5nLmluY2x1ZGVzKCIuIikgPyB2YWx1ZVN0cmluZy5zcGxpdCgiLiIpWzBdLmxlbmd0aCA6IHZhbHVlU3RyaW5nLmxlbmd0aDsKICAgICAgY29uc3QgbWluTGVuZ3RoID0gcmVzdWx0Lmxlbmd0aCA+IDAgPyAyIDogMTsKICAgICAgdmFsdWVTdHJpbmcgPSAiMCIucmVwZWF0KE1hdGgubWF4KDAsIG1pbkxlbmd0aCAtIHdob2xlRGlnaXRzKSkgKyB2YWx1ZVN0cmluZzsKICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlU3RyaW5nICs9IG9wdGlvbnMudmVyYm9zZSA/ICIgIiArIHBsdXJhbGl6ZShsb25nLCB2YWx1ZTIpIDogc2hvcnQ7CiAgICB9CiAgICByZXN1bHQucHVzaCh2YWx1ZVN0cmluZyk7CiAgfTsKICBjb25zdCBwYXJzZWQgPSBwYXJzZU1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMyKTsKICBjb25zdCBkYXlzMiA9IEJpZ0ludChwYXJzZWQuZGF5cyk7CiAgaWYgKG9wdGlvbnMuaGlkZVllYXJBbmREYXlzKSB7CiAgICBhZGQzKEJpZ0ludChkYXlzMikgKiAyNG4gKyBCaWdJbnQocGFyc2VkLmhvdXJzKSwgImhvdXIiLCAiaCIpOwogIH0gZWxzZSB7CiAgICBpZiAob3B0aW9ucy5oaWRlWWVhcikgewogICAgICBhZGQzKGRheXMyLCAiZGF5IiwgImQiKTsKICAgIH0gZWxzZSB7CiAgICAgIGFkZDMoZGF5czIgLyAzNjVuLCAieWVhciIsICJ5Iik7CiAgICAgIGFkZDMoZGF5czIgJSAzNjVuLCAiZGF5IiwgImQiKTsKICAgIH0KICAgIGFkZDMoTnVtYmVyKHBhcnNlZC5ob3VycyksICJob3VyIiwgImgiKTsKICB9CiAgYWRkMyhOdW1iZXIocGFyc2VkLm1pbnV0ZXMpLCAibWludXRlIiwgIm0iKTsKICBpZiAoIW9wdGlvbnMuaGlkZVNlY29uZHMpIHsKICAgIGlmIChvcHRpb25zLnNlcGFyYXRlTWlsbGlzZWNvbmRzIHx8IG9wdGlvbnMuZm9ybWF0U3ViTWlsbGlzZWNvbmRzIHx8ICFvcHRpb25zLmNvbG9uTm90YXRpb24gJiYgbWlsbGlzZWNvbmRzMiA8IDFlMyAmJiAhb3B0aW9ucy5zdWJTZWNvbmRzQXNEZWNpbWFscykgewogICAgICBjb25zdCBzZWNvbmRzID0gTnVtYmVyKHBhcnNlZC5zZWNvbmRzKTsKICAgICAgY29uc3QgbWlsbGlzZWNvbmRzMyA9IE51bWJlcihwYXJzZWQubWlsbGlzZWNvbmRzKTsKICAgICAgY29uc3QgbWljcm9zZWNvbmRzID0gTnVtYmVyKHBhcnNlZC5taWNyb3NlY29uZHMpOwogICAgICBjb25zdCBuYW5vc2Vjb25kcyA9IE51bWJlcihwYXJzZWQubmFub3NlY29uZHMpOwogICAgICBhZGQzKHNlY29uZHMsICJzZWNvbmQiLCAicyIpOwogICAgICBpZiAob3B0aW9ucy5mb3JtYXRTdWJNaWxsaXNlY29uZHMpIHsKICAgICAgICBhZGQzKG1pbGxpc2Vjb25kczMsICJtaWxsaXNlY29uZCIsICJtcyIpOwogICAgICAgIGFkZDMobWljcm9zZWNvbmRzLCAibWljcm9zZWNvbmQiLCAiXHhCNXMiKTsKICAgICAgICBhZGQzKG5hbm9zZWNvbmRzLCAibmFub3NlY29uZCIsICJucyIpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kc0FuZEJlbG93ID0gbWlsbGlzZWNvbmRzMyArIG1pY3Jvc2Vjb25kcyAvIDFlMyArIG5hbm9zZWNvbmRzIC8gMWU2OwogICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kc0RlY2ltYWxEaWdpdHMgPSB0eXBlb2Ygb3B0aW9ucy5taWxsaXNlY29uZHNEZWNpbWFsRGlnaXRzID09PSAibnVtYmVyIiA/IG9wdGlvbnMubWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cyA6IDA7CiAgICAgICAgY29uc3Qgcm91bmRlZE1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kc0FuZEJlbG93ID49IDEgPyBNYXRoLnJvdW5kKG1pbGxpc2Vjb25kc0FuZEJlbG93KSA6IE1hdGguY2VpbChtaWxsaXNlY29uZHNBbmRCZWxvdyk7CiAgICAgICAgY29uc3QgbWlsbGlzZWNvbmRzU3RyaW5nID0gbWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cyA/IG1pbGxpc2Vjb25kc0FuZEJlbG93LnRvRml4ZWQobWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cykgOiByb3VuZGVkTWlsbGlzZWNvbmRzOwogICAgICAgIGFkZDMoCiAgICAgICAgICBOdW1iZXIucGFyc2VGbG9hdChtaWxsaXNlY29uZHNTdHJpbmcpLAogICAgICAgICAgIm1pbGxpc2Vjb25kIiwKICAgICAgICAgICJtcyIsCiAgICAgICAgICBtaWxsaXNlY29uZHNTdHJpbmcKICAgICAgICApOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb25zdCBzZWNvbmRzID0gKGlzQmlnSW50ID8gTnVtYmVyKG1pbGxpc2Vjb25kczIgJSBPTkVfREFZX0lOX01JTExJU0VDT05EUykgOiBtaWxsaXNlY29uZHMyKSAvIDFlMyAlIDYwOwogICAgICBjb25zdCBzZWNvbmRzRGVjaW1hbERpZ2l0cyA9IHR5cGVvZiBvcHRpb25zLnNlY29uZHNEZWNpbWFsRGlnaXRzID09PSAibnVtYmVyIiA/IG9wdGlvbnMuc2Vjb25kc0RlY2ltYWxEaWdpdHMgOiAxOwogICAgICBjb25zdCBzZWNvbmRzRml4ZWQgPSBmbG9vckRlY2ltYWxzKHNlY29uZHMsIHNlY29uZHNEZWNpbWFsRGlnaXRzKTsKICAgICAgY29uc3Qgc2Vjb25kc1N0cmluZyA9IG9wdGlvbnMua2VlcERlY2ltYWxzT25XaG9sZVNlY29uZHMgPyBzZWNvbmRzRml4ZWQgOiBzZWNvbmRzRml4ZWQucmVwbGFjZSgvXC4wKyQvLCAiIik7CiAgICAgIGFkZDMoTnVtYmVyLnBhcnNlRmxvYXQoc2Vjb25kc1N0cmluZyksICJzZWNvbmQiLCAicyIsIHNlY29uZHNTdHJpbmcpOwogICAgfQogIH0KICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIHNpZ24gKyAiMCIgKyAob3B0aW9ucy52ZXJib3NlID8gIiBtaWxsaXNlY29uZHMiIDogIm1zIik7CiAgfQogIGNvbnN0IHNlcGFyYXRvciA9IG9wdGlvbnMuY29sb25Ob3RhdGlvbiA/ICI6IiA6ICIgIjsKICBpZiAodHlwZW9mIG9wdGlvbnMudW5pdENvdW50ID09PSAibnVtYmVyIikgewogICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIE1hdGgubWF4KG9wdGlvbnMudW5pdENvdW50LCAxKSk7CiAgfQogIHJldHVybiBzaWduICsgcmVzdWx0LmpvaW4oc2VwYXJhdG9yKTsKfQp2YXIgaXNaZXJvLCBwbHVyYWxpemUsIFNFQ09ORF9ST1VORElOR19FUFNJTE9OLCBPTkVfREFZX0lOX01JTExJU0VDT05EUzsKdmFyIGluaXRfcHJldHR5X21zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LW1zQDkuMy4wL25vZGVfbW9kdWxlcy9wcmV0dHktbXMvaW5kZXguanMiKCkgewogICAgaW5pdF9wYXJzZV9tcygpOwogICAgaXNaZXJvID0gKHZhbHVlMikgPT4gdmFsdWUyID09PSAwIHx8IHZhbHVlMiA9PT0gMG47CiAgICBwbHVyYWxpemUgPSAod29yZCwgY291bnQyKSA9PiBjb3VudDIgPT09IDEgfHwgY291bnQyID09PSAxbiA/IHdvcmQgOiBgJHt3b3JkfXNgOwogICAgU0VDT05EX1JPVU5ESU5HX0VQU0lMT04gPSAxZS03OwogICAgT05FX0RBWV9JTl9NSUxMSVNFQ09ORFMgPSAyNG4gKiA2MG4gKiA2MG4gKiAxMDAwbjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLnBsdWdpbnMuanMKdmFyIGltcG9ydF9kYXlqcywgaW1wb3J0X2lzVG9kYXk7CnZhciBpbml0X3NtYXJ0dGltZV9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9zbWFydHRpbWUucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHM3KCk7CiAgICBpbml0X2Rpc3RfdHMzKCk7CiAgICBpbml0X2Rpc3RfdHMoKTsKICAgIGluaXRfY3JvbmVyKCk7CiAgICBpbml0X2RhdGVfZm5zKCk7CiAgICBpbXBvcnRfZGF5anMgPSBfX3RvRVNNKHJlcXVpcmVfZGF5anNfbWluKCksIDEpOwogICAgaW1wb3J0X2lzVG9kYXkgPSBfX3RvRVNNKHJlcXVpcmVfaXNUb2RheSgpLCAxKTsKICAgIGluaXRfcHJldHR5X21zKCk7CiAgICBpbXBvcnRfZGF5anMuZGVmYXVsdC5leHRlbmQoaW1wb3J0X2lzVG9kYXkuZGVmYXVsdCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmNyb25wYXJzZXIuanMKdmFyIENyb25QYXJzZXI7CnZhciBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25wYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmNyb25wYXJzZXIuanMiKCkgewogICAgaW5pdF9zbWFydHRpbWVfcGx1Z2lucygpOwogICAgQ3JvblBhcnNlciA9IGNsYXNzIHsKICAgICAgZ2V0IGNyb25BcnJheSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5jcm9uRXhwcmVzc2lvbi5zcGxpdCgiICIpOwogICAgICB9CiAgICAgIGNvbnN0cnVjdG9yKGNyb25FeHByZXNzaW9uQXJnKSB7CiAgICAgICAgdGhpcy5jcm9uRXhwcmVzc2lvbiA9IGNyb25FeHByZXNzaW9uQXJnOwogICAgICAgIGlmICh0aGlzLmNyb25BcnJheS5sZW5ndGggPCA2KSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNyb25QYXJzZXIgbmVlZHMgc2Vjb25kIGxldmVsIGFjY3VyYWN5Iik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldE5leHRQYXJ0TWF0Y2goY3JvblBhcnQsIHN0YXJ0VmFsdWUsIG1vZHVsb0FyZykgewogICAgICAgIGlmIChjcm9uUGFydCA9PT0gIioiKSB7CiAgICAgICAgICByZXR1cm4gc3RhcnRWYWx1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGNyb25QYXJ0LmluY2x1ZGVzKCIvIikpIHsKICAgICAgICAgIGNvbnN0IGV2ZXJ5MyA9IHBhcnNlSW50KGNyb25QYXJ0LnNwbGl0KCIvIilbMV0sIDEwKTsKICAgICAgICAgIGNvbnN0IGZpbmRFdmVuTWF0Y2ggPSAocmVjdXJzaW9uU3RhcnRBcmcpID0+IHsKICAgICAgICAgICAgaWYgKHJlY3Vyc2lvblN0YXJ0QXJnICUgZXZlcnkzID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2lvblN0YXJ0QXJnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJldHVybiBmaW5kRXZlbk1hdGNoKHJlY3Vyc2lvblN0YXJ0QXJnICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gZmluZEV2ZW5NYXRjaChzdGFydFZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaWYgKHBhcnNlSW50KGNyb25QYXJ0LCAxMCkgfHwgY3JvblBhcnQgPT09ICIwIikgewogICAgICAgICAgY29uc3QgbWF0Y2gyID0gcGFyc2VJbnQoY3JvblBhcnQsIDEwKTsKICAgICAgICAgIHJldHVybiBtYXRjaDI7CiAgICAgICAgfQogICAgICB9CiAgICAgIG1zVG9OZXh0KCkgewogICAgICAgIGNvbnN0IGNyb25BcnJheSA9IHRoaXMuY3JvbkFycmF5OwogICAgICAgIGNvbnN0IHNlY29uZEV4cHJlc3Npb24gPSBjcm9uQXJyYXlbMF07CiAgICAgICAgY29uc3QgbWludXRlRXhwcmVzc2lvbiA9IGNyb25BcnJheVsxXTsKICAgICAgICBjb25zdCBob3VyRXhwcmVzc2lvbiA9IGNyb25BcnJheVsyXTsKICAgICAgICBjb25zdCBkYXlFeHByZXNzaW9uID0gY3JvbkFycmF5WzNdOwogICAgICAgIGNvbnN0IG1vbnRoRXhwcmVzc2lvbiA9IGNyb25BcnJheVs0XTsKICAgICAgICBjb25zdCB5ZWFyRXhwcmVzc2lvbiA9IGNyb25BcnJheVs1XTsKICAgICAgICBsZXQgY3VycmVudERhdGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgICBsZXQgY3VycmVudFNlY29uZCA9IGN1cnJlbnREYXRlLmdldFNlY29uZHMoKSArIDE7CiAgICAgICAgbGV0IGN1cnJlbnRNaW51dGUgPSBjdXJyZW50RGF0ZS5nZXRNaW51dGVzKCk7CiAgICAgICAgbGV0IGN1cnJlbnRIb3VyID0gY3VycmVudERhdGUuZ2V0SG91cnMoKTsKICAgICAgICBsZXQgY3VycmVudERheSA9IGN1cnJlbnREYXRlLmdldERhdGUoKTsKICAgICAgICBsZXQgY3VycmVudE1vbnRoID0gY3VycmVudERhdGUuZ2V0TW9udGgoKTsKICAgICAgICBsZXQgY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpOwogICAgICAgIGNvbnN0IHRhcmdldFNlY29uZCA9IHRoaXMuZ2V0TmV4dFBhcnRNYXRjaChzZWNvbmRFeHByZXNzaW9uLCBjdXJyZW50U2Vjb25kLCA1OSk7CiAgICAgICAgaWYgKHRhcmdldFNlY29uZCA8IGN1cnJlbnRTZWNvbmQpIHsKICAgICAgICAgIGN1cnJlbnRNaW51dGUgPSAoY3VycmVudE1pbnV0ZSArIDEpICUgNTk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHRhcmdldE1pbnV0ZSA9IHRoaXMuZ2V0TmV4dFBhcnRNYXRjaChtaW51dGVFeHByZXNzaW9uLCBjdXJyZW50TWludXRlLCA1OSk7CiAgICAgICAgaWYgKHRhcmdldE1pbnV0ZSA8IGN1cnJlbnRNaW51dGUpIHsKICAgICAgICAgIGN1cnJlbnRIb3VyID0gKGN1cnJlbnRIb3VyICsgMSkgJSAyMzsKICAgICAgICB9CiAgICAgICAgY29uc3QgdGFyZ2V0SG91ciA9IHRoaXMuZ2V0TmV4dFBhcnRNYXRjaChob3VyRXhwcmVzc2lvbiwgY3VycmVudEhvdXIsIDIzKTsKICAgICAgICBpZiAodGFyZ2V0SG91ciA8IGN1cnJlbnRIb3VyKSB7CiAgICAgICAgICBjdXJyZW50RGF5ID0gKGN1cnJlbnREYXkgKyAxKSAlIDMwOwogICAgICAgIH0KICAgICAgICBjb25zdCB0YXJnZXREYXkgPSBjdXJyZW50RGF5OwogICAgICAgIGlmICh0YXJnZXREYXkgPCBjdXJyZW50RGF5KSB7CiAgICAgICAgICBjdXJyZW50TW9udGggPSAoY3VycmVudE1vbnRoICsgMSkgJSAxMTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdGFyZ2V0TW9udGggPSBjdXJyZW50TW9udGg7CiAgICAgICAgaWYgKHRhcmdldE1vbnRoIDwgY3VycmVudE1vbnRoKSB7CiAgICAgICAgICBjdXJyZW50WWVhciA9IGN1cnJlbnRZZWFyICsgMTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdGFyZ2V0WWVhciA9IGN1cnJlbnRZZWFyOwogICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBuZXcgRGF0ZSh0YXJnZXRZZWFyLCB0YXJnZXRNb250aCwgdGFyZ2V0RGF5LCB0YXJnZXRIb3VyLCB0YXJnZXRNaW51dGUsIHRhcmdldFNlY29uZCk7CiAgICAgICAgY29uc3QgdGFyZ2V0VGltZSA9IHRhcmdldERhdGUuZ2V0VGltZSgpOwogICAgICAgIHJldHVybiB0YXJnZXRUaW1lIC0gRGF0ZS5ub3coKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3JvbmpvYi5qcwp2YXIgQ3JvbkpvYjsKdmFyIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfY3JvbmpvYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3JvbmpvYi5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25tYW5hZ2VyKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25wYXJzZXIoKTsKICAgIENyb25Kb2IgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGNyb25NYW5hZ2VyLCBjcm9uRXhwcmVzc2lvbkFyZywgam9iRnVuY3Rpb24pIHsKICAgICAgICB0aGlzLnN0YXR1cyA9ICJpbml0aWFsIjsKICAgICAgICB0aGlzLm5leHRFeGVjdXRpb25Vbml4ID0gMDsKICAgICAgICB0aGlzLmNyb25FeHByZXNzaW9uID0gY3JvbkV4cHJlc3Npb25Bcmc7CiAgICAgICAgdGhpcy5qb2JGdW5jdGlvbiA9IGpvYkZ1bmN0aW9uOwogICAgICAgIHRoaXMuY3JvblBhcnNlciA9IG5ldyBjcm9uZXJfZXhwb3J0cy5Dcm9uKGNyb25FeHByZXNzaW9uQXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIHdldGhlciB0aGUgY3JvbmpvYiBuZWVkcyB0byBiZSBleGVjdXRlZAogICAgICAgKi8KICAgICAgY2hlY2tFeGVjdXRpb24oKSB7CiAgICAgICAgaWYgKHRoaXMubmV4dEV4ZWN1dGlvblVuaXggPT09IDApIHsKICAgICAgICAgIHRoaXMuZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKTsKICAgICAgICB9CiAgICAgICAgaWYgKERhdGUubm93KCkgPiB0aGlzLm5leHRFeGVjdXRpb25Vbml4KSB7CiAgICAgICAgICBjb25zdCBtYXliZVByb21pc2UgPSB0aGlzLmpvYkZ1bmN0aW9uKHRoaXMubmV4dEV4ZWN1dGlvblVuaXgpOwogICAgICAgICAgaWYgKG1heWJlUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHsKICAgICAgICAgICAgbWF5YmVQcm9taXNlLmNhdGNoKChlMTEpID0+IGNvbnNvbGUubG9nKGUxMSkpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5uZXh0RXhlY3V0aW9uVW5peCA9IHRoaXMuZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMubmV4dEV4ZWN1dGlvblVuaXg7CiAgICAgIH0KICAgICAgZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubmV4dEV4ZWN1dGlvblVuaXggPSBEYXRlLm5vdygpICsgdGhpcy5nZXRUaW1lVG9OZXh0RXhlY3V0aW9uKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldHMgdGhlIHRpbWUgdG8gbmV4dCBleGVjdXRpb24KICAgICAgICovCiAgICAgIGdldFRpbWVUb05leHRFeGVjdXRpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY3JvblBhcnNlci5tc1RvTmV4dCgpOwogICAgICB9CiAgICAgIHN0YXJ0KCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0YXJ0ZWQiOwogICAgICB9CiAgICAgIHN0b3AoKSB7CiAgICAgICAgdGhpcy5zdGF0dXMgPSAic3RvcHBlZCI7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS51bml0cy5qcwp2YXIgdW5pdHMsIGdldE1pbGxpU2Vjb25kc0Zyb21Vbml0cywgZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlU3RyaW5nLCBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVBZ29UaW1lOwp2YXIgaW5pdF9zbWFydHRpbWVfdW5pdHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS51bml0cy5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICB1bml0cyA9IHsKICAgICAgeWVhcnM6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiAzMTU0ZTc7CiAgICAgIH0sCiAgICAgIG1vbnRoczogKHRpbWVzQXJnID0gMSkgPT4gewogICAgICAgIHJldHVybiB0aW1lc0FyZyAqIDI2MjhlNjsKICAgICAgfSwKICAgICAgd2Vla3M6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiA2MDQ4ZTU7CiAgICAgIH0sCiAgICAgIGRheXM6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiA4NjRlNTsKICAgICAgfSwKICAgICAgaG91cnM6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiAzNmU1OwogICAgICB9LAogICAgICBtaW51dGVzOiAodGltZXNBcmcgPSAxKSA9PiB7CiAgICAgICAgcmV0dXJuIHRpbWVzQXJnICogNmU0OwogICAgICB9LAogICAgICBzZWNvbmRzOiAodGltZXNBcmcgPSAxKSA9PiB7CiAgICAgICAgcmV0dXJuIHRpbWVzQXJnICogMWUzOwogICAgICB9CiAgICB9OwogICAgZ2V0TWlsbGlTZWNvbmRzRnJvbVVuaXRzID0gKGNvbWJpbmF0aW9uQXJnKSA9PiB7CiAgICAgIGxldCB0aW1lSW5NaWxsaXNlY29uZHMgPSAwOwogICAgICBsZXQgYWRkTWlsbGlTZWNvbmRzID0gKG1pbGxpU2Vjb25kc0FyZykgPT4gewogICAgICAgIHRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVJbk1pbGxpc2Vjb25kcyArIG1pbGxpU2Vjb25kc0FyZzsKICAgICAgfTsKICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLnllYXJzKSB7CiAgICAgICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLnllYXJzKGNvbWJpbmF0aW9uQXJnLnllYXJzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLm1vbnRocykgewogICAgICAgIGFkZE1pbGxpU2Vjb25kcyh1bml0cy5tb250aHMoY29tYmluYXRpb25BcmcubW9udGhzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLndlZWtzKSB7CiAgICAgICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLndlZWtzKGNvbWJpbmF0aW9uQXJnLndlZWtzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLmRheXMpIHsKICAgICAgICBhZGRNaWxsaVNlY29uZHModW5pdHMuZGF5cyhjb21iaW5hdGlvbkFyZy5kYXlzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLmhvdXJzKSB7CiAgICAgICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLmhvdXJzKGNvbWJpbmF0aW9uQXJnLmhvdXJzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLm1pbnV0ZXMpIHsKICAgICAgICBhZGRNaWxsaVNlY29uZHModW5pdHMubWludXRlcyhjb21iaW5hdGlvbkFyZy5taW51dGVzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLnNlY29uZHMpIHsKICAgICAgICBhZGRNaWxsaVNlY29uZHModW5pdHMuc2Vjb25kcyhjb21iaW5hdGlvbkFyZy5zZWNvbmRzKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRpbWVJbk1pbGxpc2Vjb25kczsKICAgIH07CiAgICBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVTdHJpbmcgPSAobWlsbGlTZWNvbmRzQXJnKSA9PiB7CiAgICAgIHJldHVybiBwcmV0dHlNaWxsaXNlY29uZHMobWlsbGlTZWNvbmRzQXJnKTsKICAgIH07CiAgICBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVBZ29UaW1lID0gKHRpbWVTdGFtcEFyZykgPT4gewogICAgICByZXR1cm4gZGF0ZV9mbnNfZXhwb3J0cy5mb3JtYXREaXN0YW5jZVRvTm93KG5ldyBEYXRlKHRpbWVTdGFtcEFyZykpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3Jvbm1hbmFnZXIuanMKdmFyIENyb25NYW5hZ2VyOwp2YXIgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19jcm9ubWFuYWdlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3Jvbm1hbmFnZXIuanMiKCkgewogICAgaW5pdF9zbWFydHRpbWVfcGx1Z2lucygpOwogICAgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19jcm9uam9iKCk7CiAgICBpbml0X3NtYXJ0dGltZV91bml0cygpOwogICAgQ3Jvbk1hbmFnZXIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0b3BwZWQiOwogICAgICAgIHRoaXMuY3JvbmpvYnMgPSBuZXcgZGlzdF90c19leHBvcnRzNi5PYmplY3RNYXAoKTsKICAgICAgfQogICAgICBhZGRDcm9uam9iKGNyb25JZGVudGlmaWVyQXJnLCBjcm9uRnVuY3Rpb25BcmcpIHsKICAgICAgICBjb25zdCBuZXdDcm9uSm9iID0gbmV3IENyb25Kb2IodGhpcywgY3JvbklkZW50aWZpZXJBcmcsIGNyb25GdW5jdGlvbkFyZyk7CiAgICAgICAgdGhpcy5jcm9uam9icy5hZGQobmV3Q3JvbkpvYik7CiAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAic3RhcnRlZCIpIHsKICAgICAgICAgIG5ld0Nyb25Kb2Iuc3RhcnQoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ld0Nyb25Kb2I7CiAgICAgIH0KICAgICAgcmVtb3ZlQ3JvbmpvYihjcm9uam9iQXJnKSB7CiAgICAgICAgY3JvbmpvYkFyZy5zdG9wKCk7CiAgICAgICAgdGhpcy5jcm9uam9icy5yZW1vdmUoY3JvbmpvYkFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0YXJ0cyB0aGUgY3JvbmpvYgogICAgICAgKi8KICAgICAgc3RhcnQoKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhdHVzICE9PSAic3RhcnRlZCIpIHsKICAgICAgICAgIHRoaXMuc3RhdHVzID0gInN0YXJ0ZWQiOwogICAgICAgICAgZm9yIChjb25zdCBjcm9uSm9iIG9mIHRoaXMuY3JvbmpvYnMuZ2V0QXJyYXkoKSkgewogICAgICAgICAgICBjcm9uSm9iLnN0YXJ0KCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnJ1bkNyb25DeWNsZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBydW5Dcm9uQ3ljbGUoKSB7CiAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lb3V0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czMuVGltZW91dCgwKTsKICAgICAgICBkbyB7CiAgICAgICAgICBsZXQgbmV4dFJ1bm5pbmdDcm9uam9iOwogICAgICAgICAgZm9yIChjb25zdCBjcm9uSm9iIG9mIHRoaXMuY3JvbmpvYnMuZ2V0QXJyYXkoKSkgewogICAgICAgICAgICBjcm9uSm9iLmNoZWNrRXhlY3V0aW9uKCk7CiAgICAgICAgICAgIGlmICghbmV4dFJ1bm5pbmdDcm9uam9iIHx8IGNyb25Kb2IuZ2V0VGltZVRvTmV4dEV4ZWN1dGlvbigpIDwgbmV4dFJ1bm5pbmdDcm9uam9iLmdldFRpbWVUb05leHRFeGVjdXRpb24oKSkgewogICAgICAgICAgICAgIG5leHRSdW5uaW5nQ3JvbmpvYiA9IGNyb25Kb2I7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChuZXh0UnVubmluZ0Nyb25qb2IpIHsKICAgICAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lb3V0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czMuVGltZW91dChuZXh0UnVubmluZ0Nyb25qb2IuZ2V0VGltZVRvTmV4dEV4ZWN1dGlvbigpKTsKICAgICAgICAgICAgY29uc29sZS5sb2coYE5leHQgQ3JvbkpvYiBzY2hlZHVsZWQgaW4gJHtnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVTdHJpbmcodGhpcy5leGVjdXRpb25UaW1lb3V0LmdldFRpbWVMZWZ0KCkpfWApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lb3V0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czMuVGltZW91dCgxZTMpOwogICAgICAgICAgICBjb25zb2xlLmxvZygibm8gY3JvbmpvYnMgc3BlY2lmaWVkISBDaGVja2luZyBhZ2FpbiBpbiAxIHNlY29uZCIpOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25UaW1lb3V0LnByb21pc2U7CiAgICAgICAgfSB3aGlsZSAodGhpcy5zdGF0dXMgPT09ICJzdGFydGVkIik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0b3BzIGFsbCBjcm9uam9icwogICAgICAgKi8KICAgICAgc3RvcCgpIHsKICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09ICJzdGFydGVkIikgewogICAgICAgICAgdGhpcy5zdGF0dXMgPSAic3RvcHBlZCI7CiAgICAgICAgICB0aGlzLmV4ZWN1dGlvblRpbWVvdXQuY2FuY2VsKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnNvbGUubG9nKGBZb3UgdHJpZWQgdG8gc3RvcCBhIENyb25NYW5hZ2VyIHRoYXQgd2FzIG5vdCBhY3R1YWxseSBzdGFydGVkLmApOwogICAgICAgIH0KICAgICAgICBmb3IgKGNvbnN0IGNyb24gb2YgdGhpcy5jcm9uam9icy5nZXRBcnJheSgpKSB7CiAgICAgICAgICBjcm9uLnN0b3AoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmV4dGVuZGVkZGF0ZS5qcwp2YXIgRXh0ZW5kZWREYXRlOwp2YXIgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19leHRlbmRlZGRhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmV4dGVuZGVkZGF0ZS5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0dGltZV91bml0cygpOwogICAgRXh0ZW5kZWREYXRlID0gY2xhc3MgX0V4dGVuZGVkRGF0ZSBleHRlbmRzIERhdGUgewogICAgICAvLyBTVEFUSUMgZmFjdG9yaWVzCiAgICAgIHN0YXRpYyBmcm9tTWlsbGlzKG1pbGxpU2Vjb25kcykgewogICAgICAgIHJldHVybiBuZXcgX0V4dGVuZGVkRGF0ZShtaWxsaVNlY29uZHMpOwogICAgICB9CiAgICAgIHN0YXRpYyBmcm9tRGF0ZShkYXRlQXJnKSB7CiAgICAgICAgcmV0dXJuIG5ldyBfRXh0ZW5kZWREYXRlKGRhdGVBcmcuZ2V0VGltZSgpKTsKICAgICAgfQogICAgICBzdGF0aWMgZnJvbUV1cm9wZWFuRGF0ZShldXJvcGVhbkRhdGUpIHsKICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAvKC4qKVwuKC4qKVwuKC4qKS8uZXhlYyhldXJvcGVhbkRhdGUpOwogICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgKICAgICAgICAgIHBhcnNlRmxvYXQoZGF0ZUFycmF5WzNdKSwKICAgICAgICAgIC8vIHllYXIKICAgICAgICAgIHBhcnNlRmxvYXQoZGF0ZUFycmF5WzJdKSAtIDEsCiAgICAgICAgICAvLyBtb250aAogICAgICAgICAgcGFyc2VGbG9hdChkYXRlQXJyYXlbMV0pCiAgICAgICAgICAvLyBkYXkKICAgICAgICApOwogICAgICAgIGNvbnN0IHVuaXhNaWxsaSA9IGRhdGUuZ2V0VGltZSgpOwogICAgICAgIHJldHVybiBuZXcgX0V4dGVuZGVkRGF0ZSh1bml4TWlsbGkpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjcmVhdGVzIGFuIEV4dGVuZGVkIGRhdGUgZnJvbSBhIGh5cGVkRGF0ZSBsaWtlICIyMDE4LTAzLTI4IgogICAgICAgKiBAcGFyYW0gZGF0ZVN0cmluZwogICAgICAgKi8KICAgICAgc3RhdGljIGZyb21IeXBoZWREYXRlKGRhdGVTdHJpbmcpIHsKICAgICAgICBjb25zdCBkYXRlTWlsbGlzID0gbmV3IERhdGUoZGF0ZVN0cmluZykuZ2V0VGltZSgpOwogICAgICAgIHJldHVybiBuZXcgX0V4dGVuZGVkRGF0ZShkYXRlTWlsbGlzKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2FtZSBhcyAuZnJvbUV1cm9wZWFuRGF0ZSgpLCBidXQgYWNjZXB0cyBhZGRpdGlvbmFsIHRpbWVBcmcgYW5kIHpvbmVBcmcKICAgICAgICovCiAgICAgIHN0YXRpYyBmcm9tRXVyb3BlYW5EYXRlQW5kVGltZShldXJvcGVhbkRhdGVBcmcsIHRpbWVBcmcgPSAiMTI6MDA6MDAiLCB6b25lQXJnID0gIkV1cm9wZS9CZXJsaW4iKSB7CiAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gLyguKilcLiguKilcLiguKikvLmV4ZWMoZXVyb3BlYW5EYXRlQXJnKTsKICAgICAgICBjb25zdCBzbGljZURhdGUgPSAoZGF0ZVN0cmluZykgPT4gewogICAgICAgICAgcmV0dXJuIGAwJHtkYXRlU3RyaW5nfWAuc2xpY2UoLTIpOwogICAgICAgIH07CiAgICAgICAgY29uc3QgZGF0ZVRpbWVTdHJpbmcgPSBgJHtkYXRlQXJyYXlbM119LSR7c2xpY2VEYXRlKGRhdGVBcnJheVsyXSl9LSR7c2xpY2VEYXRlKGRhdGVBcnJheVsxXSl9VCR7dGltZUFyZ31gOwogICAgICAgIGNvbnN0IGRhdGUgPSBpbXBvcnRfZGF5anMuZGVmYXVsdChkYXRlVGltZVN0cmluZyk7CiAgICAgICAgY29uc3QgdW5peE1pbGxpID0gZGF0ZS50b0RhdGUoKS5nZXRUaW1lKCk7CiAgICAgICAgcmV0dXJuIG5ldyBfRXh0ZW5kZWREYXRlKHVuaXhNaWxsaSk7CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IodW5peE1pbGxpID0gRGF0ZS5ub3coKSkgewogICAgICAgIHN1cGVyKHVuaXhNaWxsaSk7CiAgICAgIH0KICAgICAgLy8KICAgICAgZXhwb3J0VG9FdXJvcGVhbkRhdGUoKSB7CiAgICAgICAgY29uc3QgdW5pdHMyID0gdGhpcy5leHBvcnRUb1VuaXRzKCk7CiAgICAgICAgcmV0dXJuIGAke3VuaXRzMi5kYXlTdHJpbmd9LiR7dW5pdHMyLm1vbnRoU3RyaW5nfS4ke3VuaXRzMi55ZWFyU3RyaW5nfWA7CiAgICAgIH0KICAgICAgZXhwb3J0VG9IeXBoZWRTb3J0YWJsZURhdGUoKSB7CiAgICAgICAgY29uc3QgdW5pdHMyID0gdGhpcy5leHBvcnRUb1VuaXRzKCk7CiAgICAgICAgcmV0dXJuIGAke3VuaXRzMi55ZWFyU3RyaW5nfS0ke3VuaXRzMi5tb250aFN0cmluZ30tJHt1bml0czIuZGF5U3RyaW5nfWA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGV4cG9ydHMgdW5pdHMKICAgICAgICovCiAgICAgIGV4cG9ydFRvVW5pdHMoKSB7CiAgICAgICAgY29uc3QgbW9udGhzQXJyYXkgPSBbCiAgICAgICAgICAiSmFudWFyeSIsCiAgICAgICAgICAiRmVicnVhcnkiLAogICAgICAgICAgIk1hcmNoIiwKICAgICAgICAgICJBcHJpbCIsCiAgICAgICAgICAiTWF5IiwKICAgICAgICAgICJKdW5lIiwKICAgICAgICAgICJKdWx5IiwKICAgICAgICAgICJBdWd1c3QiLAogICAgICAgICAgIlNlcHRlbWJlciIsCiAgICAgICAgICAiT2N0b2JlciIsCiAgICAgICAgICAiTm92ZW1iZXIiLAogICAgICAgICAgIkRlY2VtYmVyIgogICAgICAgIF07CiAgICAgICAgY29uc3QgZGF5c0FycmF5ID0gWwogICAgICAgICAgIk1vbmRheSIsCiAgICAgICAgICAiVHVlc2RheSIsCiAgICAgICAgICAiV2VkbmVzZGF5IiwKICAgICAgICAgICJUaHVyc2RheSIsCiAgICAgICAgICAiRnJpZGF5IiwKICAgICAgICAgICJTYXR1cmRheSIsCiAgICAgICAgICAiU3VuZGF5IgogICAgICAgIF07CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHllYXI6IHRoaXMuZ2V0RnVsbFllYXIoKSwKICAgICAgICAgIHllYXJTdHJpbmc6IGAke3RoaXMuZ2V0RnVsbFllYXIoKX1gLAogICAgICAgICAgbW9udGg6IHRoaXMuZ2V0TW9udGgoKSArIDEsCiAgICAgICAgICBtb250aFN0cmluZzogKCIwIiArICh0aGlzLmdldE1vbnRoKCkgKyAxKSkuc2xpY2UoLTIpLAogICAgICAgICAgbW9udGhOYW1lOiBtb250aHNBcnJheVt0aGlzLmdldE1vbnRoKCldLAogICAgICAgICAgZGF5OiB0aGlzLmdldERhdGUoKSwKICAgICAgICAgIGRheVN0cmluZzogKCIwIiArIHRoaXMuZ2V0RGF0ZSgpKS5zbGljZSgtMiksCiAgICAgICAgICBkYXlPZlRoZVdlZWs6IHRoaXMuZ2V0RGF5KCksCiAgICAgICAgICBkYXlPZlRoZVdlZWtOYW1lOiBkYXlzQXJyYXlbdGhpcy5nZXREYXkoKV0KICAgICAgICB9OwogICAgICB9CiAgICAgIGZvcm1hdChmb3JtYXRBcmcpIHsKICAgICAgICByZXR1cm4gaW1wb3J0X2RheWpzLmRlZmF1bHQodGhpcy5nZXRUaW1lKCkpLmZvcm1hdChmb3JtYXRBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBib29sZWFuIGNoZWNrcwogICAgICAgKi8KICAgICAgaXNUb2RheSgpIHsKICAgICAgICByZXR1cm4gaW1wb3J0X2RheWpzLmRlZmF1bHQodGhpcy5nZXRUaW1lKCkpLmlzVG9kYXkoKTsKICAgICAgfQogICAgICBsZXNzVGltZVBhc3NlZFRvTm93KHVuaXRBcmdzKSB7CiAgICAgICAgY29uc3QgbWF4UGFzc2VkVW5peFRpbWUgPSBnZXRNaWxsaVNlY29uZHNGcm9tVW5pdHModW5pdEFyZ3MpOwogICAgICAgIGNvbnN0IGFjdHVhbFBhc3NlZFVuaXhUaW1lID0gRGF0ZS5ub3coKSAtIHRoaXMuZ2V0VGltZSgpOwogICAgICAgIHJldHVybiBhY3R1YWxQYXNzZWRVbml4VGltZSA8IG1heFBhc3NlZFVuaXhUaW1lOwogICAgICB9CiAgICAgIG1vcmVUaW1lUGFzc2VkVG9Ob3codW5pdEFyZ3MpIHsKICAgICAgICByZXR1cm4gIXRoaXMubGVzc1RpbWVQYXNzZWRUb05vdyh1bml0QXJncyk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmhydG1lYXN1cmVtZW50LmpzCnZhciBIcnRNZWFzdXJlbWVudDsKdmFyIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfaHJ0bWVhc3VyZW1lbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmhydG1lYXN1cmVtZW50LmpzIigpIHsKICAgIEhydE1lYXN1cmVtZW50ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLm5hbm9TZWNvbmRzID0gbnVsbDsKICAgICAgICB0aGlzLm1pbGxpU2Vjb25kcyA9IG51bGw7CiAgICAgICAgdGhpcy5fbWlsbGlTdGFydCA9IG51bGw7CiAgICAgICAgdGhpcy5fbWlsbGlEaWZmID0gbnVsbDsKICAgICAgICB0aGlzLl9zdGFydGVkID0gZmFsc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0YXJ0IHRoZSBtZWFzdXJlbWVudAogICAgICAgKi8KICAgICAgc3RhcnQoKSB7CiAgICAgICAgdGhpcy5fc3RhcnRlZCA9IHRydWU7CiAgICAgICAgdGhpcy5fbWlsbGlTdGFydCA9IERhdGUubm93KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0b3AgdGhlIG1lYXN1cmVtZW50CiAgICAgICAqLwogICAgICBzdG9wKCkgewogICAgICAgIGlmICh0aGlzLl9zdGFydGVkID09PSBmYWxzZSkgewogICAgICAgICAgY29uc29sZS5sb2coIkhhc24ndCBzdGFydGVkIHlldCIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLl9taWxsaURpZmYgPSBEYXRlLm5vdygpIC0gdGhpcy5fbWlsbGlTdGFydDsKICAgICAgICB0aGlzLm5hbm9TZWNvbmRzID0gdGhpcy5fbWlsbGlEaWZmICogMWUzOwogICAgICAgIHRoaXMubWlsbGlTZWNvbmRzID0gdGhpcy5fbWlsbGlEaWZmOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXNldCB0aGUgbWVhc3VyZW1lbnQKICAgICAgICovCiAgICAgIHJlc2V0KCkgewogICAgICAgIHRoaXMubmFub1NlY29uZHMgPSBudWxsOwogICAgICAgIHRoaXMubWlsbGlTZWNvbmRzID0gbnVsbDsKICAgICAgICB0aGlzLl9taWxsaVN0YXJ0ID0gbnVsbDsKICAgICAgICB0aGlzLl9taWxsaURpZmYgPSBudWxsOwogICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuaW50ZXJ2YWwuanMKdmFyIEludGVydmFsOwp2YXIgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19pbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuaW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9zbWFydHRpbWVfcGx1Z2lucygpOwogICAgSW50ZXJ2YWwgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGludGVydmFsTWlsbGlzZW5jb25kc0FyZykgewogICAgICAgIHRoaXMuc3RhdHVzID0gImluaXRpYWwiOwogICAgICAgIHRoaXMuc3RhdHVzQXV0aG9yaXphdGlvbiA9IG51bGw7CiAgICAgICAgdGhpcy5pbnRlcnZhbEpvYnMgPSBbXTsKICAgICAgICB0aGlzLmludGVydmFsTWlsbGlzZWNvbmRzID0gaW50ZXJ2YWxNaWxsaXNlbmNvbmRzQXJnOwogICAgICB9CiAgICAgIHN0YXJ0KCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0YXJ0ZWQiOwogICAgICAgIGNvbnN0IHN0YXR1c0F1dGggPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgICB0aGlzLnN0YXR1c0F1dGhvcml6YXRpb24gPSBzdGF0dXNBdXRoOwogICAgICAgIGNvbnN0IHJ1bkludGVydmFsID0gYXN5bmMgKCkgPT4gewogICAgICAgICAgd2hpbGUgKHRoaXMuc3RhdHVzID09PSAic3RhcnRlZCIgJiYgdGhpcy5zdGF0dXNBdXRob3JpemF0aW9uID09PSBzdGF0dXNBdXRoKSB7CiAgICAgICAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3IodGhpcy5pbnRlcnZhbE1pbGxpc2Vjb25kcyk7CiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUludGVydmFsSm9icygpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgcnVuSW50ZXJ2YWwoKTsKICAgICAgfQogICAgICBzdG9wKCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0b3BwZWQiOwogICAgICAgIHRoaXMuc3RhdHVzQXV0aG9yaXphdGlvbiA9IG51bGw7CiAgICAgIH0KICAgICAgYWRkSW50ZXJ2YWxKb2IoZnVuY0FyZykgewogICAgICAgIHRoaXMuaW50ZXJ2YWxKb2JzLnB1c2goZnVuY0FyZyk7CiAgICAgIH0KICAgICAgZXhlY3V0ZUludGVydmFsSm9icygpIHsKICAgICAgICBmb3IgKGNvbnN0IGZ1bmNBcmcgb2YgdGhpcy5pbnRlcnZhbEpvYnMpIHsKICAgICAgICAgIGZ1bmNBcmcoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLnRpbWVzdGFtcC5qcwp2YXIgVGltZVN0YW1wOwp2YXIgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc190aW1lc3RhbXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLnRpbWVzdGFtcC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBUaW1lU3RhbXAgPSBjbGFzcyBfVGltZVN0YW1wIHsKICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgbmV3IFRpbWVTdGFtcCBmcm9tIG1pbGxpc2Vjb25kcwogICAgICAgKi8KICAgICAgc3RhdGljIGZyb21NaWxsaVNlY29uZHMobWlsbGlTZWNvbmRzQXJnKSB7CiAgICAgICAgcmV0dXJuIG5ldyBfVGltZVN0YW1wKG1pbGxpU2Vjb25kc0FyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgbmV3IFRpbWVTdGFtcCBmb3Igbm93IHdpdGggY2hhbmdlIHNldAogICAgICAgKiBAcGFyYW0gdGltZVN0YW1wQXJnCiAgICAgICAqLwogICAgICBzdGF0aWMgZnJvbVRpbWVTdGFtcCh0aW1lU3RhbXBBcmcpIHsKICAgICAgICBjb25zdCBsb2NhbFRpbWVTdGFtcCA9IG5ldyBfVGltZVN0YW1wKCk7CiAgICAgICAgbG9jYWxUaW1lU3RhbXAuY2hhbmdlID0gbG9jYWxUaW1lU3RhbXAubWlsbGlTZWNvbmRzIC0gdGltZVN0YW1wQXJnLm1pbGxpU2Vjb25kczsKICAgICAgICByZXR1cm4gbG9jYWxUaW1lU3RhbXA7CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IoY3JlYXRvckFyZykgewogICAgICAgIHRoaXMuY2hhbmdlID0gbnVsbDsKICAgICAgICBpZiAoIWNyZWF0b3JBcmcpIHsKICAgICAgICAgIHRoaXMuZGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNyZWF0b3JBcmcgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICB0aGlzLmRhdGUgPSBuZXcgRGF0ZShjcmVhdG9yQXJnKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5taWxsaVNlY29uZHMgPSB0aGlzLmRhdGUuZ2V0VGltZSgpOwogICAgICAgIHRoaXMuZXBvY2h0aW1lID0gTWF0aC5mbG9vcih0aGlzLm1pbGxpU2Vjb25kcyAvIDFlMyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBib29sZWFuIGZvciB3ZXRoZXIgdGhlIHRpbWVzdGFtcCBpcyBvbGRlciB0aGFuIGFub3RoZXIgdGltZXN0YW1wCiAgICAgICAqIEBwYXJhbSBUaW1lU3RhbXBBcmcKICAgICAgICogQHBhcmFtIHRyZXNob2xkVGltZUFyZwogICAgICAgKi8KICAgICAgaXNPbGRlclRoYW5PdGhlclRpbWVTdGFtcChUaW1lU3RhbXBBcmcsIHRyZXNob2xkVGltZUFyZyA9IDApIHsKICAgICAgICBpZiAodGhpcy5taWxsaVNlY29uZHMgPCBUaW1lU3RhbXBBcmcubWlsbGlTZWNvbmRzIC0gdHJlc2hvbGRUaW1lQXJnKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogSXMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2xkZXIgdGhhbiB0aGUgYXJndW1lbnQKICAgICAgICogQHBhcmFtIFRpbWVTdGFtcEFyZwogICAgICAgKi8KICAgICAgaXNPbGRlclRoYW4oVGltZVN0YW1wQXJnLCB0cmVzaG9sZFRpbWVBcmcgPSAwKSB7CiAgICAgICAgaWYgKHRoaXMubWlsbGlTZWNvbmRzICsgdHJlc2hvbGRUaW1lQXJnIDwgVGltZVN0YW1wQXJnLm1pbGxpU2Vjb25kcykgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBib29sZWFuIGZvciB3ZXRoZXIgdGhlIHRpbWVzdGFtcCBpcyB5b3VuZ2VyIHRoYW4gYW5vdGhlciB0aW1lc3RhbXAKICAgICAgICogQHBhcmFtIFRpbWVTdGFtcEFyZwogICAgICAgKiBAcGFyYW0gdHJlc2hvbGRUaW1lQXJnCiAgICAgICAqLwogICAgICBpc1lvdW5nZXJUaGFuT3RoZXJUaW1lU3RhbXAoVGltZVN0YW1wQXJnLCB0cmVzaG9sZFRpbWVBcmcgPSAwKSB7CiAgICAgICAgaWYgKHRoaXMubWlsbGlTZWNvbmRzID4gVGltZVN0YW1wQXJnLm1pbGxpU2Vjb25kcyArIHRyZXNob2xkVGltZUFyZykgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaXNZb3VuZ2VyVGhhbk1pbGxpU2Vjb25kcyhtaWxsaXNlY29uZEFyZykgewogICAgICAgIGNvbnN0IG5vd1RpbWVTdGFtcCA9IG5ldyBfVGltZVN0YW1wKCk7CiAgICAgICAgY29uc3QgY29tcGFyZUVwb2NoVGltZSA9IG5vd1RpbWVTdGFtcC5lcG9jaHRpbWUgLSBtaWxsaXNlY29uZEFyZzsKICAgICAgICBjb25zdCBjb21wYXJlVGltZVN0YW1wID0gbmV3IF9UaW1lU3RhbXAoY29tcGFyZUVwb2NoVGltZSk7CiAgICAgICAgcmV0dXJuIHRoaXMuaXNZb3VuZ2VyVGhhbk90aGVyVGltZVN0YW1wKGNvbXBhcmVUaW1lU3RhbXApOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9zbWFydHRpbWUuY2xhc3Nlcy50aW1lci5qcwp2YXIgVGltZXI7CnZhciBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX3RpbWVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9zbWFydHRpbWUuY2xhc3Nlcy50aW1lci5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX3RpbWVzdGFtcCgpOwogICAgVGltZXIgPSBjbGFzcyB7CiAgICAgIGdldCB0aW1lTGVmdCgpIHsKICAgICAgICByZXR1cm4gdGhpcy50aW1lSW5NaWxsaXNlY29uZHMgLSB0aGlzLnBhdXNlZEF0LmNoYW5nZTsKICAgICAgfQogICAgICBjb25zdHJ1Y3Rvcih0aW1lSW5NaWxsaXNlY29uZHNBcmcpIHsKICAgICAgICB0aGlzLnN0YXRlID0gImluaXRpYXRlZCI7CiAgICAgICAgdGhpcy5jb21wbGV0ZWREZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIHRoaXMudGltZUluTWlsbGlzZWNvbmRzID0gdGltZUluTWlsbGlzZWNvbmRzQXJnOwogICAgICAgIHRoaXMuY29tcGxldGVkID0gdGhpcy5jb21wbGV0ZWREZWZlcnJlZC5wcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBzdGFydHMgdGhlIHRpbWVyCiAgICAgICAqLwogICAgICBzdGFydCgpIHsKICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZEF0KSB7CiAgICAgICAgICB0aGlzLmN1cnJlbnRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuY29tcGxldGVkRGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgICAgfSwgdGhpcy50aW1lSW5NaWxsaXNlY29uZHMpOwogICAgICAgICAgdGhpcy5zdGFydGVkQXQgPSBuZXcgVGltZVN0YW1wKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigidGltZXIgaGFzIGJlZW4gc3RhcnRlZCBiZWZvcmUuIFBsZWFzZSB1c2UgcmVzdW1lIGluc3RlYWQiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcGF1c2UoKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhcnRlZEF0KSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jdXJyZW50VGltZW91dCk7CiAgICAgICAgICB0aGlzLmN1cnJlbnRUaW1lb3V0ID0gbnVsbDsKICAgICAgICAgIHRoaXMucGF1c2VkQXQgPSBUaW1lU3RhbXAuZnJvbVRpbWVTdGFtcCh0aGlzLnN0YXJ0ZWRBdCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlc3VtZSgpIHsKICAgICAgICBpZiAodGhpcy5zdGFydGVkQXQpIHsKICAgICAgICAgIHRoaXMuY3VycmVudFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgdGhpcy5jb21wbGV0ZWREZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgICB9LCB0aGlzLnRpbWVMZWZ0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ0aW1lciBoYXMgTk9UIGJlZW4gc3RhcnRlZCBiZWZvcmUuIFBsZWFzZSB1c2UgLnN0YXJ0KCkgaW5zdGVhZCIpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXNldCgpIHsKICAgICAgICB0aGlzLnBhdXNlKCk7CiAgICAgICAgdGhpcy5zdGFydGVkQXQgPSBudWxsOwogICAgICAgIHRoaXMucGF1c2VkQXQgPSBudWxsOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzNyA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHM3LCB7CiAgQ3JvbkpvYjogKCkgPT4gQ3JvbkpvYiwKICBDcm9uTWFuYWdlcjogKCkgPT4gQ3Jvbk1hbmFnZXIsCiAgRXh0ZW5kZWREYXRlOiAoKSA9PiBFeHRlbmRlZERhdGUsCiAgSHJ0TWVhc3VyZW1lbnQ6ICgpID0+IEhydE1lYXN1cmVtZW50LAogIEludGVydmFsOiAoKSA9PiBJbnRlcnZhbCwKICBUaW1lU3RhbXA6ICgpID0+IFRpbWVTdGFtcCwKICBUaW1lcjogKCkgPT4gVGltZXIsCiAgZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlQWdvVGltZTogKCkgPT4gZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlQWdvVGltZSwKICBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVTdHJpbmc6ICgpID0+IGdldE1pbGxpU2Vjb25kc0FzSHVtYW5SZWFkYWJsZVN0cmluZywKICBnZXRNaWxsaVNlY29uZHNGcm9tVW5pdHM6ICgpID0+IGdldE1pbGxpU2Vjb25kc0Zyb21Vbml0cywKICB1bml0czogKCkgPT4gdW5pdHMKfSk7CnZhciBpbml0X2Rpc3RfdHM2ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25tYW5hZ2VyKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25qb2IoKTsKICAgIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfZXh0ZW5kZWRkYXRlKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2hydG1lYXN1cmVtZW50KCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2ludGVydmFsKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX3RpbWVyKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX3RpbWVzdGFtcCgpOwogICAgaW5pdF9zbWFydHRpbWVfdW5pdHMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N5bWJvbC10cmVlQDMuMi40L25vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZS9saWIvU3ltYm9sVHJlZU5vZGUuanMKdmFyIHJlcXVpcmVfU3ltYm9sVHJlZU5vZGUgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N5bWJvbC10cmVlQDMuMi40L25vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZS9saWIvU3ltYm9sVHJlZU5vZGUuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgbW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBTeW1ib2xUcmVlTm9kZSB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDsKICAgICAgICB0aGlzLnByZXZpb3VzU2libGluZyA9IG51bGw7CiAgICAgICAgdGhpcy5uZXh0U2libGluZyA9IG51bGw7CiAgICAgICAgdGhpcy5maXJzdENoaWxkID0gbnVsbDsKICAgICAgICB0aGlzLmxhc3RDaGlsZCA9IG51bGw7CiAgICAgICAgdGhpcy5jaGlsZHJlblZlcnNpb24gPSAwOwogICAgICAgIHRoaXMuY2hpbGRJbmRleENhY2hlZFVwVG8gPSBudWxsOwogICAgICAgIHRoaXMuY2FjaGVkSW5kZXggPSAtMTsKICAgICAgICB0aGlzLmNhY2hlZEluZGV4VmVyc2lvbiA9IE5hTjsKICAgICAgfQogICAgICBnZXQgaXNBdHRhY2hlZCgpIHsKICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLnBhcmVudCB8fCB0aGlzLnByZXZpb3VzU2libGluZyB8fCB0aGlzLm5leHRTaWJsaW5nKTsKICAgICAgfQogICAgICBnZXQgaGFzQ2hpbGRyZW4oKSB7CiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5maXJzdENoaWxkKTsKICAgICAgfQogICAgICBjaGlsZHJlbkNoYW5nZWQoKSB7CiAgICAgICAgdGhpcy5jaGlsZHJlblZlcnNpb24gPSB0aGlzLmNoaWxkcmVuVmVyc2lvbiArIDEgJiA0Mjk0OTY3Mjk1OwogICAgICAgIHRoaXMuY2hpbGRJbmRleENhY2hlZFVwVG8gPSBudWxsOwogICAgICB9CiAgICAgIGdldENhY2hlZEluZGV4KHBhcmVudE5vZGUpIHsKICAgICAgICBpZiAodGhpcy5jYWNoZWRJbmRleFZlcnNpb24gIT09IHBhcmVudE5vZGUuY2hpbGRyZW5WZXJzaW9uKSB7CiAgICAgICAgICB0aGlzLmNhY2hlZEluZGV4VmVyc2lvbiA9IE5hTjsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkSW5kZXg7CiAgICAgIH0KICAgICAgc2V0Q2FjaGVkSW5kZXgocGFyZW50Tm9kZSwgaW5kZXgyKSB7CiAgICAgICAgdGhpcy5jYWNoZWRJbmRleFZlcnNpb24gPSBwYXJlbnROb2RlLmNoaWxkcmVuVmVyc2lvbjsKICAgICAgICB0aGlzLmNhY2hlZEluZGV4ID0gaW5kZXgyOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3ltYm9sLXRyZWVAMy4yLjQvbm9kZV9tb2R1bGVzL3N5bWJvbC10cmVlL2xpYi9UcmVlUG9zaXRpb24uanMKdmFyIHJlcXVpcmVfVHJlZVBvc2l0aW9uID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zeW1ib2wtdHJlZUAzLjIuNC9ub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1RyZWVQb3NpdGlvbi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5mcmVlemUoewogICAgICAvLyBzYW1lIGFzIERPTSBET0NVTUVOVF9QT1NJVElPTl8KICAgICAgRElTQ09OTkVDVEVEOiAxLAogICAgICBQUkVDRURJTkc6IDIsCiAgICAgIEZPTExPV0lORzogNCwKICAgICAgQ09OVEFJTlM6IDgsCiAgICAgIENPTlRBSU5FRF9CWTogMTYKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3ltYm9sLXRyZWVAMy4yLjQvbm9kZV9tb2R1bGVzL3N5bWJvbC10cmVlL2xpYi9UcmVlSXRlcmF0b3IuanMKdmFyIHJlcXVpcmVfVHJlZUl0ZXJhdG9yID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zeW1ib2wtdHJlZUAzLjIuNC9ub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1RyZWVJdGVyYXRvci5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVFJFRSA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woKTsKICAgIHZhciBST09UID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpOwogICAgdmFyIE5FWFQgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCk7CiAgICB2YXIgSVRFUkFURV9GVU5DID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpOwogICAgdmFyIFRyZWVJdGVyYXRvciA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodHJlZSwgcm9vdDYsIGZpcnN0UmVzdWx0LCBpdGVyYXRlRnVuY3Rpb24pIHsKICAgICAgICB0aGlzW1RSRUVdID0gdHJlZTsKICAgICAgICB0aGlzW1JPT1RdID0gcm9vdDY7CiAgICAgICAgdGhpc1tORVhUXSA9IGZpcnN0UmVzdWx0OwogICAgICAgIHRoaXNbSVRFUkFURV9GVU5DXSA9IGl0ZXJhdGVGdW5jdGlvbjsKICAgICAgfQogICAgICBuZXh0KCkgewogICAgICAgIGNvbnN0IHRyZWUgPSB0aGlzW1RSRUVdOwogICAgICAgIGNvbnN0IGl0ZXJhdGVGdW5jID0gdGhpc1tJVEVSQVRFX0ZVTkNdOwogICAgICAgIGNvbnN0IHJvb3Q2ID0gdGhpc1tST09UXTsKICAgICAgICBpZiAoIXRoaXNbTkVYVF0pIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGRvbmU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiByb290NgogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdmFsdWUyID0gdGhpc1tORVhUXTsKICAgICAgICBpZiAoaXRlcmF0ZUZ1bmMgPT09IDEpIHsKICAgICAgICAgIHRoaXNbTkVYVF0gPSB0cmVlLl9ub2RlKHZhbHVlMikucHJldmlvdXNTaWJsaW5nOwogICAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZUZ1bmMgPT09IDIpIHsKICAgICAgICAgIHRoaXNbTkVYVF0gPSB0cmVlLl9ub2RlKHZhbHVlMikubmV4dFNpYmxpbmc7CiAgICAgICAgfSBlbHNlIGlmIChpdGVyYXRlRnVuYyA9PT0gMykgewogICAgICAgICAgdGhpc1tORVhUXSA9IHRyZWUuX25vZGUodmFsdWUyKS5wYXJlbnQ7CiAgICAgICAgfSBlbHNlIGlmIChpdGVyYXRlRnVuYyA9PT0gNCkgewogICAgICAgICAgdGhpc1tORVhUXSA9IHRyZWUucHJlY2VkaW5nKHZhbHVlMiwgeyByb290OiByb290NiB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpc1tORVhUXSA9IHRyZWUuZm9sbG93aW5nKHZhbHVlMiwgeyByb290OiByb290NiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGRvbmU6IGZhbHNlLAogICAgICAgICAgdmFsdWU6IHZhbHVlMgogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJlZUl0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLml0ZXJhdG9yLCB7CiAgICAgIHZhbHVlOiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfSwKICAgICAgd3JpdGFibGU6IGZhbHNlCiAgICB9KTsKICAgIFRyZWVJdGVyYXRvci5QUkVWID0gMTsKICAgIFRyZWVJdGVyYXRvci5ORVhUID0gMjsKICAgIFRyZWVJdGVyYXRvci5QQVJFTlQgPSAzOwogICAgVHJlZUl0ZXJhdG9yLlBSRUNFRElORyA9IDQ7CiAgICBUcmVlSXRlcmF0b3IuRk9MTE9XSU5HID0gNTsKICAgIE9iamVjdC5mcmVlemUoVHJlZUl0ZXJhdG9yKTsKICAgIE9iamVjdC5mcmVlemUoVHJlZUl0ZXJhdG9yLnByb3RvdHlwZSk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IFRyZWVJdGVyYXRvcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N5bWJvbC10cmVlQDMuMi40L25vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZS9saWIvU3ltYm9sVHJlZS5qcwp2YXIgcmVxdWlyZV9TeW1ib2xUcmVlID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zeW1ib2wtdHJlZUAzLjIuNC9ub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1N5bWJvbFRyZWUuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFN5bWJvbFRyZWVOb2RlID0gcmVxdWlyZV9TeW1ib2xUcmVlTm9kZSgpOwogICAgdmFyIFRyZWVQb3NpdGlvbiA9IHJlcXVpcmVfVHJlZVBvc2l0aW9uKCk7CiAgICB2YXIgVHJlZUl0ZXJhdG9yID0gcmVxdWlyZV9UcmVlSXRlcmF0b3IoKTsKICAgIGZ1bmN0aW9uIHJldHVyblRydWUoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gcmV2ZXJzZUFycmF5SW5kZXgoYXJyYXksIHJldmVyc2VJbmRleCkgewogICAgICByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMSAtIHJldmVyc2VJbmRleF07CiAgICB9CiAgICB2YXIgU3ltYm9sVHJlZSA9IGNsYXNzIHsKICAgICAgLyoqCiAgICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICAgKiBAYWxpYXMgbW9kdWxlOnN5bWJvbC10cmVlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb249J1N5bWJvbFRyZWUgZGF0YSddIERlc2NyaXB0aW9uIHVzZWQgZm9yIHRoZSBTeW1ib2wKICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKGRlc2NyaXB0aW9uKSB7CiAgICAgICAgdGhpcy5zeW1ib2wgPSBTeW1ib2woZGVzY3JpcHRpb24gfHwgIlN5bWJvbFRyZWUgZGF0YSIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBZb3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIChvcHRpb25hbGx5KSBpbml0aWFsaXplIGFuIG9iamVjdCByaWdodCBhZnRlciBpdHMgY3JlYXRpb24sCiAgICAgICAqIHRvIHRha2UgYWR2YW50YWdlIG9mIFY4J3MgZmFzdCBwcm9wZXJ0aWVzLiBBbHNvIHVzZWZ1bCBpZiB5b3Ugd291bGQgbGlrZSB0bwogICAgICAgKiBmcmVlemUgeW91ciBvYmplY3QuCiAgICAgICAqCiAgICAgICAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kCiAgICAgICAqIEBhbGlhcyBtb2R1bGU6c3ltYm9sLXRyZWUjaW5pdGlhbGl6ZQogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gb2JqZWN0CiAgICAgICAqLwogICAgICBpbml0aWFsaXplKG9iamVjdCkgewogICAgICAgIHRoaXMuX25vZGUob2JqZWN0KTsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICB9CiAgICAgIF9ub2RlKG9iamVjdCkgewogICAgICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3Qgbm9kZTIgPSBvYmplY3RbdGhpcy5zeW1ib2xdOwogICAgICAgIGlmIChub2RlMikgewogICAgICAgICAgcmV0dXJuIG5vZGUyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0W3RoaXMuc3ltYm9sXSA9IG5ldyBTeW1ib2xUcmVlTm9kZSgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0IGhhcyBhbnkgY2hpbGRyZW4uIE90aGVyd2lzZSBpdCByZXR1cm5zIGBmYWxzZWAuCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgaGFzQ2hpbGRyZW4KICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtCb29sZWFufQogICAgICAgKi8KICAgICAgaGFzQ2hpbGRyZW4ob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5oYXNDaGlsZHJlbjsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBmaXJzdENoaWxkCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fQogICAgICAgKi8KICAgICAgZmlyc3RDaGlsZChvYmplY3QpIHsKICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLmZpcnN0Q2hpbGQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIGxhc3QgY2hpbGQgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBsYXN0Q2hpbGQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBsYXN0Q2hpbGQob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5sYXN0Q2hpbGQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBwcmV2aW91c1NpYmxpbmcKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBwcmV2aW91c1NpYmxpbmcob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5wcmV2aW91c1NpYmxpbmc7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIG5leHQgc2libGluZyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgogICAgICAgKgogICAgICAgKiAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIG5leHRTaWJsaW5nCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fQogICAgICAgKi8KICAgICAgbmV4dFNpYmxpbmcob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5uZXh0U2libGluZzsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJuIHRoZSBwYXJlbnQgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBwYXJlbnQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBwYXJlbnQob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5wYXJlbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZpbmQgdGhlIGluY2x1c2l2ZSBkZXNjZW5kYW50IHRoYXQgaXMgbGFzdCBpbiB0cmVlIG9yZGVyIG9mIHRoZSBnaXZlbiBvYmplY3QuCiAgICAgICAqCiAgICAgICAqICogYE8obilgICh3b3JzdCBjYXNlKSB3aGVyZSBgbmAgaXMgdGhlIGRlcHRoIG9mIHRoZSBzdWJ0cmVlIG9mIGBvYmplY3RgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgbGFzdEluY2x1c2l2ZURlc2NlbmRhbnQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBsYXN0SW5jbHVzaXZlRGVzY2VuZGFudChvYmplY3QpIHsKICAgICAgICBsZXQgbGFzdENoaWxkOwogICAgICAgIGxldCBjdXJyZW50ID0gb2JqZWN0OwogICAgICAgIHdoaWxlIChsYXN0Q2hpbGQgPSB0aGlzLl9ub2RlKGN1cnJlbnQpLmxhc3RDaGlsZCkgewogICAgICAgICAgY3VycmVudCA9IGxhc3RDaGlsZDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZpbmQgdGhlIHByZWNlZGluZyBvYmplY3QgKEEpIG9mIHRoZSBnaXZlbiBvYmplY3QgKEIpLgogICAgICAgKiBBbiBvYmplY3QgQSBpcyBwcmVjZWRpbmcgYW4gb2JqZWN0IEIgaWYgQSBhbmQgQiBhcmUgaW4gdGhlIHNhbWUgdHJlZQogICAgICAgKiBhbmQgQSBjb21lcyBiZWZvcmUgQiBpbiB0cmVlIG9yZGVyLgogICAgICAgKgogICAgICAgKiAqIGBPKG4pYCAod29yc3QgY2FzZSkKICAgICAgICogKiBgTygxKWAgKGFtb3J0aXplZCB3aGVuIHdhbGtpbmcgdGhlIGVudGlyZSB0cmVlKQogICAgICAgKgogICAgICAgKiBAbWV0aG9kIHByZWNlZGluZwogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnJvb3RdIElmIHNldCwgYHJvb3RgIG11c3QgYmUgYW4gaW5jbHVzaXZlIGFuY2VzdG9yCiAgICAgICAqICAgICAgICBvZiB0aGUgcmV0dXJuIHZhbHVlIChvciBlbHNlIG51bGwgaXMgcmV0dXJuZWQpLiBUaGlzIGNoZWNrIF9hc3N1bWVzXwogICAgICAgKiAgICAgICAgdGhhdCBgcm9vdGAgaXMgYWxzbyBhbiBpbmNsdXNpdmUgYW5jZXN0b3Igb2YgdGhlIGdpdmVuIGBvYmplY3RgCiAgICAgICAqIEByZXR1cm4gez9PYmplY3R9CiAgICAgICAqLwogICAgICBwcmVjZWRpbmcob2JqZWN0LCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgdHJlZVJvb3QgPSBvcHRpb25zICYmIG9wdGlvbnMucm9vdDsKICAgICAgICBpZiAob2JqZWN0ID09PSB0cmVlUm9vdCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHByZXZpb3VzU2libGluZyA9IHRoaXMuX25vZGUob2JqZWN0KS5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgaWYgKHByZXZpb3VzU2libGluZykgewogICAgICAgICAgcmV0dXJuIHRoaXMubGFzdEluY2x1c2l2ZURlc2NlbmRhbnQocHJldmlvdXNTaWJsaW5nKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5wYXJlbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZpbmQgdGhlIGZvbGxvd2luZyBvYmplY3QgKEEpIG9mIHRoZSBnaXZlbiBvYmplY3QgKEIpLgogICAgICAgKiBBbiBvYmplY3QgQSBpcyBmb2xsb3dpbmcgYW4gb2JqZWN0IEIgaWYgQSBhbmQgQiBhcmUgaW4gdGhlIHNhbWUgdHJlZQogICAgICAgKiBhbmQgQSBjb21lcyBhZnRlciBCIGluIHRyZWUgb3JkZXIuCiAgICAgICAqCiAgICAgICAqICogYE8obilgICh3b3JzdCBjYXNlKSB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBvYmplY3RzIGluIHRoZSBlbnRpcmUgdHJlZQogICAgICAgKiAqIGBPKDEpYCAoYW1vcnRpemVkIHdoZW4gd2Fsa2luZyB0aGUgZW50aXJlIHRyZWUpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgZm9sbG93aW5nCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gb2JqZWN0CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnJvb3RdIElmIHNldCwgYHJvb3RgIG11c3QgYmUgYW4gaW5jbHVzaXZlIGFuY2VzdG9yCiAgICAgICAqICAgICAgICBvZiB0aGUgcmV0dXJuIHZhbHVlIChvciBlbHNlIG51bGwgaXMgcmV0dXJuZWQpLiBUaGlzIGNoZWNrIF9hc3N1bWVzXwogICAgICAgKiAgICAgICAgdGhhdCBgcm9vdGAgaXMgYWxzbyBhbiBpbmNsdXNpdmUgYW5jZXN0b3Igb2YgdGhlIGdpdmVuIGBvYmplY3RgCiAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc2tpcENoaWxkcmVuPWZhbHNlXSBJZiBzZXQsIGlnbm9yZSB0aGUgY2hpbGRyZW4gb2YgYG9iamVjdGAKICAgICAgICogQHJldHVybiB7P09iamVjdH0KICAgICAgICovCiAgICAgIGZvbGxvd2luZyhvYmplY3QsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCB0cmVlUm9vdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yb290OwogICAgICAgIGNvbnN0IHNraXBDaGlsZHJlbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5za2lwQ2hpbGRyZW47CiAgICAgICAgY29uc3QgZmlyc3RDaGlsZCA9ICFza2lwQ2hpbGRyZW4gJiYgdGhpcy5fbm9kZShvYmplY3QpLmZpcnN0Q2hpbGQ7CiAgICAgICAgaWYgKGZpcnN0Q2hpbGQpIHsKICAgICAgICAgIHJldHVybiBmaXJzdENoaWxkOwogICAgICAgIH0KICAgICAgICBsZXQgY3VycmVudCA9IG9iamVjdDsKICAgICAgICBkbyB7CiAgICAgICAgICBpZiAoY3VycmVudCA9PT0gdHJlZVJvb3QpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBuZXh0U2libGluZyA9IHRoaXMuX25vZGUoY3VycmVudCkubmV4dFNpYmxpbmc7CiAgICAgICAgICBpZiAobmV4dFNpYmxpbmcpIHsKICAgICAgICAgICAgcmV0dXJuIG5leHRTaWJsaW5nOwogICAgICAgICAgfQogICAgICAgICAgY3VycmVudCA9IHRoaXMuX25vZGUoY3VycmVudCkucGFyZW50OwogICAgICAgIH0gd2hpbGUgKGN1cnJlbnQpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBcHBlbmQgYWxsIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gYW4gYXJyYXkuCiAgICAgICAqCiAgICAgICAqICogYE8obilgIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBgcGFyZW50YAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGNoaWxkcmVuVG9BcnJheQogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyZW50CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KICAgICAgICogQHBhcmFtIHtPYmplY3RbXX0gW29wdGlvbnMuYXJyYXk9W11dCiAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmZpbHRlcl0gRnVuY3Rpb24gdG8gdGVzdCBlYWNoIG9iamVjdCBiZWZvcmUgaXQgaXMgYWRkZWQgdG8gdGhlIGFycmF5LgogICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZva2VkIHdpdGggYXJndW1lbnRzIChvYmplY3QpLiBTaG91bGQgcmV0dXJuIGB0cnVlYCBpZiBhbiBvYmplY3QKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdG8gYmUgaW5jbHVkZWQuCiAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnMudGhpc0FyZ10gVmFsdWUgdG8gdXNlIGFzIGB0aGlzYCB3aGVuIGV4ZWN1dGluZyBgZmlsdGVyYC4KICAgICAgICogQHJldHVybiB7T2JqZWN0W119CiAgICAgICAqLwogICAgICBjaGlsZHJlblRvQXJyYXkocGFyZW50LCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgYXJyYXkgPSBvcHRpb25zICYmIG9wdGlvbnMuYXJyYXkgfHwgW107CiAgICAgICAgY29uc3QgZmlsdGVyMiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXIgfHwgcmV0dXJuVHJ1ZTsKICAgICAgICBjb25zdCB0aGlzQXJnID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoaXNBcmcgfHwgdm9pZCAwOwogICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHBhcmVudCk7CiAgICAgICAgbGV0IG9iamVjdCA9IHBhcmVudE5vZGUuZmlyc3RDaGlsZDsKICAgICAgICBsZXQgaW5kZXgyID0gMDsKICAgICAgICB3aGlsZSAob2JqZWN0KSB7CiAgICAgICAgICBjb25zdCBub2RlMiA9IHRoaXMuX25vZGUob2JqZWN0KTsKICAgICAgICAgIG5vZGUyLnNldENhY2hlZEluZGV4KHBhcmVudE5vZGUsIGluZGV4Mik7CiAgICAgICAgICBpZiAoZmlsdGVyMi5jYWxsKHRoaXNBcmcsIG9iamVjdCkpIHsKICAgICAgICAgICAgYXJyYXkucHVzaChvYmplY3QpOwogICAgICAgICAgfQogICAgICAgICAgb2JqZWN0ID0gbm9kZTIubmV4dFNpYmxpbmc7CiAgICAgICAgICArK2luZGV4MjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBcHBlbmQgYWxsIGluY2x1c2l2ZSBhbmNlc3RvcnMgb2YgdGhlIGdpdmVuIG9iamVjdCB0byBhbiBhcnJheS4KICAgICAgICoKICAgICAgICogKiBgTyhuKWAgd2hlcmUgYG5gIGlzIHRoZSBhbW91bnQgb2YgYW5jZXN0b3JzIG9mIHRoZSBnaXZlbiBgb2JqZWN0YAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGFuY2VzdG9yc1RvQXJyYXkKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0W119IFtvcHRpb25zLmFycmF5PVtdXQogICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5maWx0ZXJdIEZ1bmN0aW9uIHRvIHRlc3QgZWFjaCBvYmplY3QgYmVmb3JlIGl0IGlzIGFkZGVkIHRvIHRoZSBhcnJheS4KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52b2tlZCB3aXRoIGFyZ3VtZW50cyAob2JqZWN0KS4gU2hvdWxkIHJldHVybiBgdHJ1ZWAgaWYgYW4gb2JqZWN0CiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRvIGJlIGluY2x1ZGVkLgogICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zLnRoaXNBcmddIFZhbHVlIHRvIHVzZSBhcyBgdGhpc2Agd2hlbiBleGVjdXRpbmcgYGZpbHRlcmAuCiAgICAgICAqIEByZXR1cm4ge09iamVjdFtdfQogICAgICAgKi8KICAgICAgYW5jZXN0b3JzVG9BcnJheShvYmplY3QsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBhcnJheSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hcnJheSB8fCBbXTsKICAgICAgICBjb25zdCBmaWx0ZXIyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlciB8fCByZXR1cm5UcnVlOwogICAgICAgIGNvbnN0IHRoaXNBcmcgPSBvcHRpb25zICYmIG9wdGlvbnMudGhpc0FyZyB8fCB2b2lkIDA7CiAgICAgICAgbGV0IGFuY2VzdG9yID0gb2JqZWN0OwogICAgICAgIHdoaWxlIChhbmNlc3RvcikgewogICAgICAgICAgaWYgKGZpbHRlcjIuY2FsbCh0aGlzQXJnLCBhbmNlc3RvcikpIHsKICAgICAgICAgICAgYXJyYXkucHVzaChhbmNlc3Rvcik7CiAgICAgICAgICB9CiAgICAgICAgICBhbmNlc3RvciA9IHRoaXMuX25vZGUoYW5jZXN0b3IpLnBhcmVudDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBcHBlbmQgYWxsIGRlc2NlbmRhbnRzIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gYW4gYXJyYXkgKGluIHRyZWUgb3JkZXIpLgogICAgICAgKgogICAgICAgKiAqIGBPKG4pYCB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBvYmplY3RzIGluIHRoZSBzdWItdHJlZSBvZiB0aGUgZ2l2ZW4gYG9iamVjdGAKICAgICAgICoKICAgICAgICogQG1ldGhvZCB0cmVlVG9BcnJheQogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcm9vdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0W119IFtvcHRpb25zLmFycmF5PVtdXQogICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5maWx0ZXJdIEZ1bmN0aW9uIHRvIHRlc3QgZWFjaCBvYmplY3QgYmVmb3JlIGl0IGlzIGFkZGVkIHRvIHRoZSBhcnJheS4KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52b2tlZCB3aXRoIGFyZ3VtZW50cyAob2JqZWN0KS4gU2hvdWxkIHJldHVybiBgdHJ1ZWAgaWYgYW4gb2JqZWN0CiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRvIGJlIGluY2x1ZGVkLgogICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zLnRoaXNBcmddIFZhbHVlIHRvIHVzZSBhcyBgdGhpc2Agd2hlbiBleGVjdXRpbmcgYGZpbHRlcmAuCiAgICAgICAqIEByZXR1cm4ge09iamVjdFtdfQogICAgICAgKi8KICAgICAgdHJlZVRvQXJyYXkocm9vdDYsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBhcnJheSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hcnJheSB8fCBbXTsKICAgICAgICBjb25zdCBmaWx0ZXIyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlciB8fCByZXR1cm5UcnVlOwogICAgICAgIGNvbnN0IHRoaXNBcmcgPSBvcHRpb25zICYmIG9wdGlvbnMudGhpc0FyZyB8fCB2b2lkIDA7CiAgICAgICAgbGV0IG9iamVjdCA9IHJvb3Q2OwogICAgICAgIHdoaWxlIChvYmplY3QpIHsKICAgICAgICAgIGlmIChmaWx0ZXIyLmNhbGwodGhpc0FyZywgb2JqZWN0KSkgewogICAgICAgICAgICBhcnJheS5wdXNoKG9iamVjdCk7CiAgICAgICAgICB9CiAgICAgICAgICBvYmplY3QgPSB0aGlzLmZvbGxvd2luZyhvYmplY3QsIHsgcm9vdDogcm9vdDYgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhcnJheTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSXRlcmF0ZSBvdmVyIGFsbCBjaGlsZHJlbiBvZiB0aGUgZ2l2ZW4gb2JqZWN0CiAgICAgICAqCiAgICAgICAqICogYE8oMSlgIGZvciBhIHNpbmdsZSBpdGVyYXRpb24KICAgICAgICoKICAgICAgICogQG1ldGhvZCBjaGlsZHJlbkl0ZXJhdG9yCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXQogICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnJldmVyc2U9ZmFsc2VdCiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmFibGUgaXRlcmF0b3IgKEVTNikKICAgICAgICovCiAgICAgIGNoaWxkcmVuSXRlcmF0b3IocGFyZW50LCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgcmV2ZXJzZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yZXZlcnNlOwogICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHBhcmVudCk7CiAgICAgICAgcmV0dXJuIG5ldyBUcmVlSXRlcmF0b3IoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgcGFyZW50LAogICAgICAgICAgcmV2ZXJzZSA/IHBhcmVudE5vZGUubGFzdENoaWxkIDogcGFyZW50Tm9kZS5maXJzdENoaWxkLAogICAgICAgICAgcmV2ZXJzZSA/IFRyZWVJdGVyYXRvci5QUkVWIDogVHJlZUl0ZXJhdG9yLk5FWFQKICAgICAgICApOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSBwcmV2aW91cyBzaWJsaW5ncyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LiAoaW4gcmV2ZXJzZSB0cmVlIG9yZGVyKQogICAgICAgKgogICAgICAgKiAqIGBPKDEpYCBmb3IgYSBzaW5nbGUgaXRlcmF0aW9uCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgcHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KQogICAgICAgKi8KICAgICAgcHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdCkgewogICAgICAgIHJldHVybiBuZXcgVHJlZUl0ZXJhdG9yKAogICAgICAgICAgdGhpcywKICAgICAgICAgIG9iamVjdCwKICAgICAgICAgIHRoaXMuX25vZGUob2JqZWN0KS5wcmV2aW91c1NpYmxpbmcsCiAgICAgICAgICBUcmVlSXRlcmF0b3IuUFJFVgogICAgICAgICk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIG5leHQgc2libGluZ3Mgb2YgdGhlIGdpdmVuIG9iamVjdC4gKGluIHRyZWUgb3JkZXIpCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgIGZvciBhIHNpbmdsZSBpdGVyYXRpb24KICAgICAgICoKICAgICAgICogQG1ldGhvZCBuZXh0U2libGluZ3NJdGVyYXRvcgogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmFibGUgaXRlcmF0b3IgKEVTNikKICAgICAgICovCiAgICAgIG5leHRTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdCkgewogICAgICAgIHJldHVybiBuZXcgVHJlZUl0ZXJhdG9yKAogICAgICAgICAgdGhpcywKICAgICAgICAgIG9iamVjdCwKICAgICAgICAgIHRoaXMuX25vZGUob2JqZWN0KS5uZXh0U2libGluZywKICAgICAgICAgIFRyZWVJdGVyYXRvci5ORVhUCiAgICAgICAgKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSXRlcmF0ZSBvdmVyIGFsbCBpbmNsdXNpdmUgYW5jZXN0b3JzIG9mIHRoZSBnaXZlbiBvYmplY3QKICAgICAgICoKICAgICAgICogKiBgTygxKWAgZm9yIGEgc2luZ2xlIGl0ZXJhdGlvbgogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGFuY2VzdG9yc0l0ZXJhdG9yCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KQogICAgICAgKi8KICAgICAgYW5jZXN0b3JzSXRlcmF0b3Iob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG5ldyBUcmVlSXRlcmF0b3IoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgb2JqZWN0LAogICAgICAgICAgb2JqZWN0LAogICAgICAgICAgVHJlZUl0ZXJhdG9yLlBBUkVOVAogICAgICAgICk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEl0ZXJhdGUgb3ZlciBhbGwgZGVzY2VuZGFudHMgb2YgdGhlIGdpdmVuIG9iamVjdCAoaW4gdHJlZSBvcmRlcikuCiAgICAgICAqCiAgICAgICAqIFdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIG9iamVjdHMgaW4gdGhlIHN1Yi10cmVlIG9mIHRoZSBnaXZlbiBgcm9vdGA6CiAgICAgICAqCiAgICAgICAqICogYE8obilgICh3b3JzdCBjYXNlIGZvciBhIHNpbmdsZSBpdGVyYXRpb24pCiAgICAgICAqICogYE8obilgIChhbW9ydGl6ZWQsIHdoZW4gY29tcGxldGluZyB0aGUgaXRlcmF0b3IpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgdHJlZUl0ZXJhdG9yCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByb290CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMucmV2ZXJzZT1mYWxzZV0KICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KQogICAgICAgKi8KICAgICAgdHJlZUl0ZXJhdG9yKHJvb3Q2LCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgcmV2ZXJzZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yZXZlcnNlOwogICAgICAgIHJldHVybiBuZXcgVHJlZUl0ZXJhdG9yKAogICAgICAgICAgdGhpcywKICAgICAgICAgIHJvb3Q2LAogICAgICAgICAgcmV2ZXJzZSA/IHRoaXMubGFzdEluY2x1c2l2ZURlc2NlbmRhbnQocm9vdDYpIDogcm9vdDYsCiAgICAgICAgICByZXZlcnNlID8gVHJlZUl0ZXJhdG9yLlBSRUNFRElORyA6IFRyZWVJdGVyYXRvci5GT0xMT1dJTkcKICAgICAgICApOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBGaW5kIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gb2JqZWN0ICh0aGUgbnVtYmVyIG9mIHByZWNlZGluZyBzaWJsaW5ncykuCiAgICAgICAqCiAgICAgICAqICogYE8obilgIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIHByZWNlZGluZyBzaWJsaW5ncwogICAgICAgKiAqIGBPKDEpYCAoYW1vcnRpemVkLCBpZiB0aGUgdHJlZSBpcyBub3QgbW9kaWZpZWQpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgaW5kZXgKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNoaWxkCiAgICAgICAqIEByZXR1cm4ge051bWJlcn0gVGhlIG51bWJlciBvZiBwcmVjZWRpbmcgc2libGluZ3MsIG9yIC0xIGlmIHRoZSBvYmplY3QgaGFzIG5vIHBhcmVudAogICAgICAgKi8KICAgICAgaW5kZXgoY2hpbGQpIHsKICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSB0aGlzLl9ub2RlKGNoaWxkKTsKICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShjaGlsZE5vZGUucGFyZW50KTsKICAgICAgICBpZiAoIXBhcmVudE5vZGUpIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IGNoaWxkTm9kZS5nZXRDYWNoZWRJbmRleChwYXJlbnROb2RlKTsKICAgICAgICBpZiAoY3VycmVudEluZGV4ID49IDApIHsKICAgICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7CiAgICAgICAgfQogICAgICAgIGN1cnJlbnRJbmRleCA9IDA7CiAgICAgICAgbGV0IG9iamVjdCA9IHBhcmVudE5vZGUuZmlyc3RDaGlsZDsKICAgICAgICBpZiAocGFyZW50Tm9kZS5jaGlsZEluZGV4Q2FjaGVkVXBUbykgewogICAgICAgICAgY29uc3QgY2FjaGVkVXBUb05vZGUgPSB0aGlzLl9ub2RlKHBhcmVudE5vZGUuY2hpbGRJbmRleENhY2hlZFVwVG8pOwogICAgICAgICAgb2JqZWN0ID0gY2FjaGVkVXBUb05vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgICBjdXJyZW50SW5kZXggPSBjYWNoZWRVcFRvTm9kZS5nZXRDYWNoZWRJbmRleChwYXJlbnROb2RlKSArIDE7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChvYmplY3QpIHsKICAgICAgICAgIGNvbnN0IG5vZGUyID0gdGhpcy5fbm9kZShvYmplY3QpOwogICAgICAgICAgbm9kZTIuc2V0Q2FjaGVkSW5kZXgocGFyZW50Tm9kZSwgY3VycmVudEluZGV4KTsKICAgICAgICAgIGlmIChvYmplY3QgPT09IGNoaWxkKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgKytjdXJyZW50SW5kZXg7CiAgICAgICAgICBvYmplY3QgPSBub2RlMi5uZXh0U2libGluZzsKICAgICAgICB9CiAgICAgICAgcGFyZW50Tm9kZS5jaGlsZEluZGV4Q2FjaGVkVXBUbyA9IGNoaWxkOwogICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuLgogICAgICAgKgogICAgICAgKiAqIGBPKG4pYCB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBjaGlsZHJlbgogICAgICAgKiAqIGBPKDEpYCAoYW1vcnRpemVkLCBpZiB0aGUgdHJlZSBpcyBub3QgbW9kaWZpZWQpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgY2hpbGRyZW5Db3VudAogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyZW50CiAgICAgICAqIEByZXR1cm4ge051bWJlcn0KICAgICAgICovCiAgICAgIGNoaWxkcmVuQ291bnQocGFyZW50KSB7CiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUocGFyZW50KTsKICAgICAgICBpZiAoIXBhcmVudE5vZGUubGFzdENoaWxkKSB7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXgocGFyZW50Tm9kZS5sYXN0Q2hpbGQpICsgMTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ29tcGFyZSB0aGUgcG9zaXRpb24gb2YgYW4gb2JqZWN0IHJlbGF0aXZlIHRvIGFub3RoZXIgb2JqZWN0LiBBIGJpdCBzZXQgaXMgcmV0dXJuZWQ6CiAgICAgICAqCiAgICAgICAqIDx1bD4KICAgICAgICogICAgIDxsaT5ESVNDT05ORUNURUQgOiAxPC9saT4KICAgICAgICogICAgIDxsaT5QUkVDRURJTkcgOiAyPC9saT4KICAgICAgICogICAgIDxsaT5GT0xMT1dJTkcgOiA0PC9saT4KICAgICAgICogICAgIDxsaT5DT05UQUlOUyA6IDg8L2xpPgogICAgICAgKiAgICAgPGxpPkNPTlRBSU5FRF9CWSA6IDE2PC9saT4KICAgICAgICogPC91bD4KICAgICAgICoKICAgICAgICogVGhlIHNlbWFudGljcyBhcmUgdGhlIHNhbWUgYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb24gaW4gRE9NLCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdAogICAgICAgKiBESVNDT05ORUNURUQgbmV2ZXIgb2NjdXJzIHdpdGggYW55IG90aGVyIGJpdC4KICAgICAgICoKICAgICAgICogd2hlcmUgYG5gIGFuZCBgbWAgYXJlIHRoZSBhbW91bnQgb2YgYW5jZXN0b3JzIG9mIGBsZWZ0YCBhbmQgYHJpZ2h0YDsKICAgICAgICogd2hlcmUgYG9gIGlzIHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gb2YgdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgYGxlZnRgIGFuZCBgcmlnaHRgOgogICAgICAgKgogICAgICAgKiAqIGBPKG4gKyBtICsgbylgICh3b3JzdCBjYXNlKQogICAgICAgKiAqIGBPKG4gKyBtKWAgKGFtb3J0aXplZCwgaWYgdGhlIHRyZWUgaXMgbm90IG1vZGlmaWVkKQogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGNvbXBhcmVUcmVlUG9zaXRpb24KICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IGxlZnQKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJpZ2h0CiAgICAgICAqIEByZXR1cm4ge051bWJlcn0KICAgICAgICovCiAgICAgIGNvbXBhcmVUcmVlUG9zaXRpb24obGVmdCwgcmlnaHQpIHsKICAgICAgICBpZiAobGVmdCA9PT0gcmlnaHQpIHsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBjb25zdCBsZWZ0QW5jZXN0b3JzID0gW107CiAgICAgICAgewogICAgICAgICAgbGV0IGxlZnRBbmNlc3RvciA9IGxlZnQ7CiAgICAgICAgICB3aGlsZSAobGVmdEFuY2VzdG9yKSB7CiAgICAgICAgICAgIGlmIChsZWZ0QW5jZXN0b3IgPT09IHJpZ2h0KSB7CiAgICAgICAgICAgICAgcmV0dXJuIFRyZWVQb3NpdGlvbi5DT05UQUlOUyB8IFRyZWVQb3NpdGlvbi5QUkVDRURJTkc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGVmdEFuY2VzdG9ycy5wdXNoKGxlZnRBbmNlc3Rvcik7CiAgICAgICAgICAgIGxlZnRBbmNlc3RvciA9IHRoaXMucGFyZW50KGxlZnRBbmNlc3Rvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJpZ2h0QW5jZXN0b3JzID0gW107CiAgICAgICAgewogICAgICAgICAgbGV0IHJpZ2h0QW5jZXN0b3IgPSByaWdodDsKICAgICAgICAgIHdoaWxlIChyaWdodEFuY2VzdG9yKSB7CiAgICAgICAgICAgIGlmIChyaWdodEFuY2VzdG9yID09PSBsZWZ0KSB7CiAgICAgICAgICAgICAgcmV0dXJuIFRyZWVQb3NpdGlvbi5DT05UQUlORURfQlkgfCBUcmVlUG9zaXRpb24uRk9MTE9XSU5HOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJpZ2h0QW5jZXN0b3JzLnB1c2gocmlnaHRBbmNlc3Rvcik7CiAgICAgICAgICAgIHJpZ2h0QW5jZXN0b3IgPSB0aGlzLnBhcmVudChyaWdodEFuY2VzdG9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3Qgcm9vdDYgPSByZXZlcnNlQXJyYXlJbmRleChsZWZ0QW5jZXN0b3JzLCAwKTsKICAgICAgICBpZiAoIXJvb3Q2IHx8IHJvb3Q2ICE9PSByZXZlcnNlQXJyYXlJbmRleChyaWdodEFuY2VzdG9ycywgMCkpIHsKICAgICAgICAgIHJldHVybiBUcmVlUG9zaXRpb24uRElTQ09OTkVDVEVEOwogICAgICAgIH0KICAgICAgICBsZXQgY29tbW9uQW5jZXN0b3JJbmRleCA9IDA7CiAgICAgICAgY29uc3QgYW5jZXN0b3JzTWluTGVuZ3RoID0gTWF0aC5taW4obGVmdEFuY2VzdG9ycy5sZW5ndGgsIHJpZ2h0QW5jZXN0b3JzLmxlbmd0aCk7CiAgICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgYW5jZXN0b3JzTWluTGVuZ3RoOyArK2kxMSkgewogICAgICAgICAgY29uc3QgbGVmdEFuY2VzdG9yID0gcmV2ZXJzZUFycmF5SW5kZXgobGVmdEFuY2VzdG9ycywgaTExKTsKICAgICAgICAgIGNvbnN0IHJpZ2h0QW5jZXN0b3IgPSByZXZlcnNlQXJyYXlJbmRleChyaWdodEFuY2VzdG9ycywgaTExKTsKICAgICAgICAgIGlmIChsZWZ0QW5jZXN0b3IgIT09IHJpZ2h0QW5jZXN0b3IpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBjb21tb25BbmNlc3RvckluZGV4ID0gaTExOwogICAgICAgIH0KICAgICAgICBjb25zdCBsZWZ0SW5kZXggPSB0aGlzLmluZGV4KHJldmVyc2VBcnJheUluZGV4KGxlZnRBbmNlc3RvcnMsIGNvbW1vbkFuY2VzdG9ySW5kZXggKyAxKSk7CiAgICAgICAgY29uc3QgcmlnaHRJbmRleCA9IHRoaXMuaW5kZXgocmV2ZXJzZUFycmF5SW5kZXgocmlnaHRBbmNlc3RvcnMsIGNvbW1vbkFuY2VzdG9ySW5kZXggKyAxKSk7CiAgICAgICAgcmV0dXJuIHJpZ2h0SW5kZXggPCBsZWZ0SW5kZXggPyBUcmVlUG9zaXRpb24uUFJFQ0VESU5HIDogVHJlZVBvc2l0aW9uLkZPTExPV0lORzsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGlzIHRyZWUuCiAgICAgICAqIEhhcyBubyBlZmZlY3QgaWYgYWxyZWFkeSByZW1vdmVkLgogICAgICAgKgogICAgICAgKiAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIHJlbW92ZQogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVtb3ZlT2JqZWN0CiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gcmVtb3ZlT2JqZWN0CiAgICAgICAqLwogICAgICByZW1vdmUocmVtb3ZlT2JqZWN0KSB7CiAgICAgICAgY29uc3QgcmVtb3ZlTm9kZSA9IHRoaXMuX25vZGUocmVtb3ZlT2JqZWN0KTsKICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShyZW1vdmVOb2RlLnBhcmVudCk7CiAgICAgICAgY29uc3QgcHJldk5vZGUgPSB0aGlzLl9ub2RlKHJlbW92ZU5vZGUucHJldmlvdXNTaWJsaW5nKTsKICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IHRoaXMuX25vZGUocmVtb3ZlTm9kZS5uZXh0U2libGluZyk7CiAgICAgICAgaWYgKHBhcmVudE5vZGUpIHsKICAgICAgICAgIGlmIChwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPT09IHJlbW92ZU9iamVjdCkgewogICAgICAgICAgICBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPSByZW1vdmVOb2RlLm5leHRTaWJsaW5nOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHBhcmVudE5vZGUubGFzdENoaWxkID09PSByZW1vdmVPYmplY3QpIHsKICAgICAgICAgICAgcGFyZW50Tm9kZS5sYXN0Q2hpbGQgPSByZW1vdmVOb2RlLnByZXZpb3VzU2libGluZzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHByZXZOb2RlKSB7CiAgICAgICAgICBwcmV2Tm9kZS5uZXh0U2libGluZyA9IHJlbW92ZU5vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgfQogICAgICAgIGlmIChuZXh0Tm9kZSkgewogICAgICAgICAgbmV4dE5vZGUucHJldmlvdXNTaWJsaW5nID0gcmVtb3ZlTm9kZS5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgfQogICAgICAgIHJlbW92ZU5vZGUucGFyZW50ID0gbnVsbDsKICAgICAgICByZW1vdmVOb2RlLnByZXZpb3VzU2libGluZyA9IG51bGw7CiAgICAgICAgcmVtb3ZlTm9kZS5uZXh0U2libGluZyA9IG51bGw7CiAgICAgICAgcmVtb3ZlTm9kZS5jYWNoZWRJbmRleCA9IC0xOwogICAgICAgIHJlbW92ZU5vZGUuY2FjaGVkSW5kZXhWZXJzaW9uID0gTmFOOwogICAgICAgIGlmIChwYXJlbnROb2RlKSB7CiAgICAgICAgICBwYXJlbnROb2RlLmNoaWxkcmVuQ2hhbmdlZCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVtb3ZlT2JqZWN0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIG9iamVjdCBiZWZvcmUgdGhlIHJlZmVyZW5jZSBvYmplY3QuCiAgICAgICAqIGBuZXdPYmplY3RgIGlzIG5vdyB0aGUgcHJldmlvdXMgc2libGluZyBvZiBgcmVmZXJlbmNlT2JqZWN0YC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBpbnNlcnRCZWZvcmUKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9iamVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgbmV3T2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBuZXdPYmplY3QKICAgICAgICovCiAgICAgIGluc2VydEJlZm9yZShyZWZlcmVuY2VPYmplY3QsIG5ld09iamVjdCkgewogICAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU9iamVjdCk7CiAgICAgICAgY29uc3QgcHJldk5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU5vZGUucHJldmlvdXNTaWJsaW5nKTsKICAgICAgICBjb25zdCBuZXdOb2RlID0gdGhpcy5fbm9kZShuZXdPYmplY3QpOwogICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU5vZGUucGFyZW50KTsKICAgICAgICBpZiAobmV3Tm9kZS5pc0F0dGFjaGVkKSB7CiAgICAgICAgICB0aHJvdyBFcnJvcigiR2l2ZW4gb2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUsIHJlbW92ZSBpdCBmaXJzdCIpOwogICAgICAgIH0KICAgICAgICBuZXdOb2RlLnBhcmVudCA9IHJlZmVyZW5jZU5vZGUucGFyZW50OwogICAgICAgIG5ld05vZGUucHJldmlvdXNTaWJsaW5nID0gcmVmZXJlbmNlTm9kZS5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgbmV3Tm9kZS5uZXh0U2libGluZyA9IHJlZmVyZW5jZU9iamVjdDsKICAgICAgICByZWZlcmVuY2VOb2RlLnByZXZpb3VzU2libGluZyA9IG5ld09iamVjdDsKICAgICAgICBpZiAocHJldk5vZGUpIHsKICAgICAgICAgIHByZXZOb2RlLm5leHRTaWJsaW5nID0gbmV3T2JqZWN0OwogICAgICAgIH0KICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPT09IHJlZmVyZW5jZU9iamVjdCkgewogICAgICAgICAgcGFyZW50Tm9kZS5maXJzdENoaWxkID0gbmV3T2JqZWN0OwogICAgICAgIH0KICAgICAgICBpZiAocGFyZW50Tm9kZSkgewogICAgICAgICAgcGFyZW50Tm9kZS5jaGlsZHJlbkNoYW5nZWQoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ld09iamVjdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogSW5zZXJ0IHRoZSBnaXZlbiBvYmplY3QgYWZ0ZXIgdGhlIHJlZmVyZW5jZSBvYmplY3QuCiAgICAgICAqIGBuZXdPYmplY3RgIGlzIG5vdyB0aGUgbmV4dCBzaWJsaW5nIG9mIGByZWZlcmVuY2VPYmplY3RgLgogICAgICAgKgogICAgICAgKiAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGluc2VydEFmdGVyCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZWZlcmVuY2VPYmplY3QKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5ld09iamVjdAogICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIG5ld09iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlCiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqLwogICAgICBpbnNlcnRBZnRlcihyZWZlcmVuY2VPYmplY3QsIG5ld09iamVjdCkgewogICAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU9iamVjdCk7CiAgICAgICAgY29uc3QgbmV4dE5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU5vZGUubmV4dFNpYmxpbmcpOwogICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLl9ub2RlKG5ld09iamVjdCk7CiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlTm9kZS5wYXJlbnQpOwogICAgICAgIGlmIChuZXdOb2RlLmlzQXR0YWNoZWQpIHsKICAgICAgICAgIHRocm93IEVycm9yKCJHaXZlbiBvYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZSwgcmVtb3ZlIGl0IGZpcnN0Iik7CiAgICAgICAgfQogICAgICAgIG5ld05vZGUucGFyZW50ID0gcmVmZXJlbmNlTm9kZS5wYXJlbnQ7CiAgICAgICAgbmV3Tm9kZS5wcmV2aW91c1NpYmxpbmcgPSByZWZlcmVuY2VPYmplY3Q7CiAgICAgICAgbmV3Tm9kZS5uZXh0U2libGluZyA9IHJlZmVyZW5jZU5vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgcmVmZXJlbmNlTm9kZS5uZXh0U2libGluZyA9IG5ld09iamVjdDsKICAgICAgICBpZiAobmV4dE5vZGUpIHsKICAgICAgICAgIG5leHROb2RlLnByZXZpb3VzU2libGluZyA9IG5ld09iamVjdDsKICAgICAgICB9CiAgICAgICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS5sYXN0Q2hpbGQgPT09IHJlZmVyZW5jZU9iamVjdCkgewogICAgICAgICAgcGFyZW50Tm9kZS5sYXN0Q2hpbGQgPSBuZXdPYmplY3Q7CiAgICAgICAgfQogICAgICAgIGlmIChwYXJlbnROb2RlKSB7CiAgICAgICAgICBwYXJlbnROb2RlLmNoaWxkcmVuQ2hhbmdlZCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3T2JqZWN0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIG9iamVjdCBhcyB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIGdpdmVuIHJlZmVyZW5jZSBvYmplY3QuCiAgICAgICAqIGBuZXdPYmplY3RgIGlzIG5vdyB0aGUgZmlyc3QgY2hpbGQgb2YgYHJlZmVyZW5jZU9iamVjdGAuCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgcHJlcGVuZENoaWxkCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZWZlcmVuY2VPYmplY3QKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5ld09iamVjdAogICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIG5ld09iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlCiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqLwogICAgICBwcmVwZW5kQ2hpbGQocmVmZXJlbmNlT2JqZWN0LCBuZXdPYmplY3QpIHsKICAgICAgICBjb25zdCByZWZlcmVuY2VOb2RlID0gdGhpcy5fbm9kZShyZWZlcmVuY2VPYmplY3QpOwogICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLl9ub2RlKG5ld09iamVjdCk7CiAgICAgICAgaWYgKG5ld05vZGUuaXNBdHRhY2hlZCkgewogICAgICAgICAgdGhyb3cgRXJyb3IoIkdpdmVuIG9iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlLCByZW1vdmUgaXQgZmlyc3QiKTsKICAgICAgICB9CiAgICAgICAgaWYgKHJlZmVyZW5jZU5vZGUuaGFzQ2hpbGRyZW4pIHsKICAgICAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKHJlZmVyZW5jZU5vZGUuZmlyc3RDaGlsZCwgbmV3T2JqZWN0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbmV3Tm9kZS5wYXJlbnQgPSByZWZlcmVuY2VPYmplY3Q7CiAgICAgICAgICByZWZlcmVuY2VOb2RlLmZpcnN0Q2hpbGQgPSBuZXdPYmplY3Q7CiAgICAgICAgICByZWZlcmVuY2VOb2RlLmxhc3RDaGlsZCA9IG5ld09iamVjdDsKICAgICAgICAgIHJlZmVyZW5jZU5vZGUuY2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXdPYmplY3Q7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEluc2VydCB0aGUgZ2l2ZW4gb2JqZWN0IGFzIHRoZSBsYXN0IGNoaWxkIG9mIHRoZSBnaXZlbiByZWZlcmVuY2Ugb2JqZWN0LgogICAgICAgKiBgbmV3T2JqZWN0YCBpcyBub3cgdGhlIGxhc3QgY2hpbGQgb2YgYHJlZmVyZW5jZU9iamVjdGAuCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgYXBwZW5kQ2hpbGQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9iamVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgbmV3T2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBuZXdPYmplY3QKICAgICAgICovCiAgICAgIGFwcGVuZENoaWxkKHJlZmVyZW5jZU9iamVjdCwgbmV3T2JqZWN0KSB7CiAgICAgICAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlT2JqZWN0KTsKICAgICAgICBjb25zdCBuZXdOb2RlID0gdGhpcy5fbm9kZShuZXdPYmplY3QpOwogICAgICAgIGlmIChuZXdOb2RlLmlzQXR0YWNoZWQpIHsKICAgICAgICAgIHRocm93IEVycm9yKCJHaXZlbiBvYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZSwgcmVtb3ZlIGl0IGZpcnN0Iik7CiAgICAgICAgfQogICAgICAgIGlmIChyZWZlcmVuY2VOb2RlLmhhc0NoaWxkcmVuKSB7CiAgICAgICAgICB0aGlzLmluc2VydEFmdGVyKHJlZmVyZW5jZU5vZGUubGFzdENoaWxkLCBuZXdPYmplY3QpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBuZXdOb2RlLnBhcmVudCA9IHJlZmVyZW5jZU9iamVjdDsKICAgICAgICAgIHJlZmVyZW5jZU5vZGUuZmlyc3RDaGlsZCA9IG5ld09iamVjdDsKICAgICAgICAgIHJlZmVyZW5jZU5vZGUubGFzdENoaWxkID0gbmV3T2JqZWN0OwogICAgICAgICAgcmVmZXJlbmNlTm9kZS5jaGlsZHJlbkNoYW5nZWQoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ld09iamVjdDsKICAgICAgfQogICAgfTsKICAgIG1vZHVsZS5leHBvcnRzID0gU3ltYm9sVHJlZTsKICAgIFN5bWJvbFRyZWUuVHJlZVBvc2l0aW9uID0gVHJlZVBvc2l0aW9uOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnBsdWdpbnMuanMKdmFyIGltcG9ydF9zeW1ib2xfdHJlZTsKdmFyIGluaXRfY2xhc3Nlc19wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMygpOwogICAgaW5pdF9kaXN0X3RzNSgpOwogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBpbml0X2Rpc3RfdHMyKCk7CiAgICBpbml0X2Rpc3RfdHM2KCk7CiAgICBpbXBvcnRfc3ltYm9sX3RyZWUgPSBfX3RvRVNNKHJlcXVpcmVfU3ltYm9sVHJlZSgpLCAxKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5hc3luY2V4ZWN1dGlvbnN0YWNrLmpzCnZhciBBc3luY0V4ZWN1dGlvblN0YWNrOwp2YXIgaW5pdF9jbGFzc2VzX2FzeW5jZXhlY3V0aW9uc3RhY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuYXN5bmNleGVjdXRpb25zdGFjay5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgQXN5bmNFeGVjdXRpb25TdGFjayA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5leGVjdXRpb25TbG90cyA9IFtdOwogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5ub25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSA9IEluZmluaXR5OwogICAgICAgIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50ID0gMDsKICAgICAgICB0aGlzLm5vbkV4Y2x1c2l2ZVBlbmRpbmdRdWV1ZSA9IFtdOwogICAgICB9CiAgICAgIGFzeW5jIGdldEV4Y2x1c2l2ZUV4ZWN1dGlvblNsb3QoZnVuY0FyZywgdGltZW91dEFyZykgewogICAgICAgIGNvbnN0IGV4ZWN1dGlvbkRlZmVycmVkID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgY29uc3QgZXhlY3V0aW9uU2xvdCA9IHsKICAgICAgICAgIGZ1bmNUb0V4ZWN1dGU6IGZ1bmNBcmcsCiAgICAgICAgICBleGVjdXRpb25EZWZlcnJlZCwKICAgICAgICAgIHRpbWVvdXQ6IHRpbWVvdXRBcmcsCiAgICAgICAgICBtb2RlOiAiZXhjbHVzaXZlIgogICAgICAgIH07CiAgICAgICAgdGhpcy5leGVjdXRpb25TbG90cy5wdXNoKGV4ZWN1dGlvblNsb3QpOwogICAgICAgIHRoaXMucHJvY2Vzc0V4ZWN1dGlvblNsb3RzKCk7CiAgICAgICAgcmV0dXJuIGV4ZWN1dGlvbkRlZmVycmVkLnByb21pc2U7CiAgICAgIH0KICAgICAgYXN5bmMgZ2V0Tm9uRXhjbHVzaXZlRXhlY3V0aW9uU2xvdChmdW5jQXJnLCB0aW1lb3V0QXJnKSB7CiAgICAgICAgY29uc3QgZXhlY3V0aW9uRGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICBjb25zdCBleGVjdXRpb25TbG90ID0gewogICAgICAgICAgZnVuY1RvRXhlY3V0ZTogZnVuY0FyZywKICAgICAgICAgIGV4ZWN1dGlvbkRlZmVycmVkLAogICAgICAgICAgdGltZW91dDogdGltZW91dEFyZywKICAgICAgICAgIG1vZGU6ICJub25leGNsdXNpdmUiCiAgICAgICAgfTsKICAgICAgICB0aGlzLmV4ZWN1dGlvblNsb3RzLnB1c2goZXhlY3V0aW9uU2xvdCk7CiAgICAgICAgdGhpcy5wcm9jZXNzRXhlY3V0aW9uU2xvdHMoKTsKICAgICAgICByZXR1cm4gZXhlY3V0aW9uRGVmZXJyZWQucHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IG5vbi1leGNsdXNpdmUgdGFza3MuCiAgICAgICAqIEBwYXJhbSBjb25jdXJyZW5jeSBtaW5pbXVtIDEgKEluZmluaXR5IG1lYW5zIHVubGltaXRlZCkKICAgICAgICovCiAgICAgIHNldE5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5KGNvbmN1cnJlbmN5KSB7CiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoY29uY3VycmVuY3kpIHx8IGNvbmN1cnJlbmN5IDwgMSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJub25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSBtdXN0IGJlIGEgZmluaXRlIG51bWJlciA+PSAxIik7CiAgICAgICAgfQogICAgICAgIHRoaXMubm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3kgPSBjb25jdXJyZW5jeTsKICAgICAgfQogICAgICAvKiogR2V0IHRoZSBjb25maWd1cmVkIG1heCBjb25jdXJyZW5jeSBmb3Igbm9uLWV4Y2x1c2l2ZSB0YXNrcyAqLwogICAgICBnZXROb25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5ub25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeTsKICAgICAgfQogICAgICAvKiogTnVtYmVyIG9mIG5vbi1leGNsdXNpdmUgdGFza3MgY3VycmVudGx5IHJ1bm5pbmcgKi8KICAgICAgZ2V0QWN0aXZlTm9uRXhjbHVzaXZlQ291bnQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50OwogICAgICB9CiAgICAgIC8qKiBOdW1iZXIgb2Ygbm9uLWV4Y2x1c2l2ZSB0YXNrcyB3YWl0aW5nIGZvciBhIGZyZWUgc2xvdCAqLwogICAgICBnZXRQZW5kaW5nTm9uRXhjbHVzaXZlQ291bnQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubm9uRXhjbHVzaXZlUGVuZGluZ1F1ZXVlLmxlbmd0aDsKICAgICAgfQogICAgICBhc3luYyBwcm9jZXNzRXhlY3V0aW9uU2xvdHMoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNQcm9jZXNzaW5nKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gdHJ1ZTsKICAgICAgICB3aGlsZSAodGhpcy5leGVjdXRpb25TbG90cy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBjb25zdCBjdXJyZW50U2xvdCA9IHRoaXMuZXhlY3V0aW9uU2xvdHNbMF07CiAgICAgICAgICBpZiAoY3VycmVudFNsb3QubW9kZSA9PT0gImV4Y2x1c2l2ZSIpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRlRXhjbHVzaXZlU2xvdChjdXJyZW50U2xvdCk7CiAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uU2xvdHMuc2hpZnQoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IG5vbkV4Y2x1c2l2ZVNsb3RzID0gW107CiAgICAgICAgICAgIHdoaWxlICh0aGlzLmV4ZWN1dGlvblNsb3RzLmxlbmd0aCA+IDAgJiYgdGhpcy5leGVjdXRpb25TbG90c1swXS5tb2RlID09PSAibm9uZXhjbHVzaXZlIikgewogICAgICAgICAgICAgIG5vbkV4Y2x1c2l2ZVNsb3RzLnB1c2godGhpcy5leGVjdXRpb25TbG90cy5zaGlmdCgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVOb25FeGNsdXNpdmVTbG90cyhub25FeGNsdXNpdmVTbG90cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7CiAgICAgIH0KICAgICAgYXN5bmMgZXhlY3V0ZUV4Y2x1c2l2ZVNsb3Qoc2xvdCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBpZiAoc2xvdC50aW1lb3V0KSB7CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbCiAgICAgICAgICAgICAgc2xvdC5mdW5jVG9FeGVjdXRlKCksCiAgICAgICAgICAgICAgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcihzbG90LnRpbWVvdXQpLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaW1lb3V0IHJlYWNoZWQiKTsKICAgICAgICAgICAgICB9KQogICAgICAgICAgICBdKTsKICAgICAgICAgICAgc2xvdC5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzbG90LmZ1bmNUb0V4ZWN1dGUoKTsKICAgICAgICAgICAgc2xvdC5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIHNsb3QuZXhlY3V0aW9uRGVmZXJyZWQucmVqZWN0KGVycm9yKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgZXhlY3V0ZU5vbkV4Y2x1c2l2ZVNsb3RzKHNsb3RzKSB7CiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBzbG90cy5tYXAoYXN5bmMgKHNsb3QpID0+IHsKICAgICAgICAgIGF3YWl0IHRoaXMud2FpdEZvck5vbkV4Y2x1c2l2ZVNsb3QoKTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmIChzbG90LnRpbWVvdXQpIHsKICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoWwogICAgICAgICAgICAgICAgc2xvdC5mdW5jVG9FeGVjdXRlKCksCiAgICAgICAgICAgICAgICBkaXN0X3RzX2V4cG9ydHMzLmRlbGF5Rm9yKHNsb3QudGltZW91dCkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVGltZW91dCByZWFjaGVkIik7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgIHNsb3QuZXhlY3V0aW9uRGVmZXJyZWQucmVzb2x2ZShyZXN1bHQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNsb3QuZnVuY1RvRXhlY3V0ZSgpOwogICAgICAgICAgICAgIHNsb3QuZXhlY3V0aW9uRGVmZXJyZWQucmVzb2x2ZShyZXN1bHQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBzbG90LmV4ZWN1dGlvbkRlZmVycmVkLnJlamVjdChlcnJvcik7CiAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICB0aGlzLnJlbGVhc2VOb25FeGNsdXNpdmVTbG90KCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBXYWl0IHVudGlsIGEgbm9uLWV4Y2x1c2l2ZSBzbG90IGlzIGF2YWlsYWJsZSAocmVzcGVjdHMgbWF4IGNvbmN1cnJlbmN5KS4KICAgICAgICovCiAgICAgIHdhaXRGb3JOb25FeGNsdXNpdmVTbG90KCkgewogICAgICAgIGlmICh0aGlzLm5vbkV4Y2x1c2l2ZUN1cnJlbnRDb3VudCA8IHRoaXMubm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3kpIHsKICAgICAgICAgIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50Kys7CiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgICAgICAgIHRoaXMubm9uRXhjbHVzaXZlUGVuZGluZ1F1ZXVlLnB1c2goKCkgPT4gewogICAgICAgICAgICB0aGlzLm5vbkV4Y2x1c2l2ZUN1cnJlbnRDb3VudCsrOwogICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqIFJlbGVhc2UgYSBub24tZXhjbHVzaXZlIHNsb3QgYW5kIHdha2UgdGhlIG5leHQgd2FpdGVyLCBpZiBhbnkuICovCiAgICAgIHJlbGVhc2VOb25FeGNsdXNpdmVTbG90KCkgewogICAgICAgIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50LS07CiAgICAgICAgY29uc3QgbmV4dDIgPSB0aGlzLm5vbkV4Y2x1c2l2ZVBlbmRpbmdRdWV1ZS5zaGlmdCgpOwogICAgICAgIGlmIChuZXh0MikgewogICAgICAgICAgbmV4dDIoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuYmFja3ByZXNzdXJlZGFycmF5LmpzCnZhciBCYWNrcHJlc3N1cmVkQXJyYXk7CnZhciBpbml0X2NsYXNzZXNfYmFja3ByZXNzdXJlZGFycmF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmJhY2twcmVzc3VyZWRhcnJheS5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgQmFja3ByZXNzdXJlZEFycmF5ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihoaWdoV2F0ZXJNYXJrID0gMTYpIHsKICAgICAgICB0aGlzLmhhc1NwYWNlID0gbmV3IGRpc3RfdHNfZXhwb3J0czIucnhqcy5TdWJqZWN0KCk7CiAgICAgICAgdGhpcy5pdGVtc0F2YWlsYWJsZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLnJ4anMuU3ViamVjdCgpOwogICAgICAgIHRoaXMuZGF0YSA9IFtdOwogICAgICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IGhpZ2hXYXRlck1hcms7CiAgICAgIH0KICAgICAgcHVzaChpdGVtKSB7CiAgICAgICAgdGhpcy5kYXRhLnB1c2goaXRlbSk7CiAgICAgICAgdGhpcy5pdGVtc0F2YWlsYWJsZS5uZXh0KCJpdGVtc0F2YWlsYWJsZSIpOwogICAgICAgIGNvbnN0IHNwYWNlQXZhaWxhYmxlID0gdGhpcy5jaGVja1NwYWNlQXZhaWxhYmxlKCk7CiAgICAgICAgaWYgKHNwYWNlQXZhaWxhYmxlKSB7CiAgICAgICAgICB0aGlzLmhhc1NwYWNlLm5leHQoImhhc1NwYWNlIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzcGFjZUF2YWlsYWJsZTsKICAgICAgfQogICAgICBzaGlmdCgpIHsKICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5kYXRhLnNoaWZ0KCk7CiAgICAgICAgaWYgKHRoaXMuY2hlY2tTcGFjZUF2YWlsYWJsZSgpKSB7CiAgICAgICAgICB0aGlzLmhhc1NwYWNlLm5leHQoImhhc1NwYWNlIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpdGVtOwogICAgICB9CiAgICAgIGNoZWNrU3BhY2VBdmFpbGFibGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPCB0aGlzLmhpZ2hXYXRlck1hcms7CiAgICAgIH0KICAgICAgY2hlY2tIYXNJdGVtcygpIHsKICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aCA+IDA7CiAgICAgIH0KICAgICAgd2FpdEZvclNwYWNlKCkgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgICAgICAgIGlmICh0aGlzLmNoZWNrU3BhY2VBdmFpbGFibGUoKSkgewogICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5oYXNTcGFjZS5zdWJzY3JpYmUoKCkgPT4gewogICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgICAgIHJlc29sdmUyKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHdhaXRGb3JJdGVtcygpIHsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgcmVzb2x2ZTIoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuaXRlbXNBdmFpbGFibGUuc3Vic2NyaWJlKCgpID0+IHsKICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5mYXN0bWFwLmpzCnZhciBGYXN0TWFwOwp2YXIgaW5pdF9jbGFzc2VzX2Zhc3RtYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuZmFzdG1hcC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgRmFzdE1hcCA9IGNsYXNzIF9GYXN0TWFwIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5tYXBPYmplY3QgPSB7fTsKICAgICAgfQogICAgICBpc1VuaXF1ZUtleShrZXlBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5tYXBPYmplY3Rba2V5QXJnXSA/IGZhbHNlIDogdHJ1ZTsKICAgICAgfQogICAgICBhZGRUb01hcChrZXlBcmcsIG9iamVjdEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIGlmICh0aGlzLmlzVW5pcXVlS2V5KGtleUFyZykgfHwgb3B0aW9uc0FyZyAmJiBvcHRpb25zQXJnLmZvcmNlKSB7CiAgICAgICAgICB0aGlzLm1hcE9iamVjdFtrZXlBcmddID0gb2JqZWN0QXJnOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZ2V0QnlLZXkoa2V5QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubWFwT2JqZWN0W2tleUFyZ107CiAgICAgIH0KICAgICAgcmVtb3ZlRnJvbU1hcChrZXlBcmcpIHsKICAgICAgICBjb25zdCByZW1vdmVkSXRlbSA9IHRoaXMuZ2V0QnlLZXkoa2V5QXJnKTsKICAgICAgICBkZWxldGUgdGhpcy5tYXBPYmplY3Rba2V5QXJnXTsKICAgICAgICByZXR1cm4gcmVtb3ZlZEl0ZW07CiAgICAgIH0KICAgICAgZ2V0S2V5cygpIHsKICAgICAgICBjb25zdCBrZXlzMiA9IFtdOwogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIGluIHRoaXMubWFwT2JqZWN0KSB7CiAgICAgICAgICBpZiAodGhpcy5tYXBPYmplY3Rba2V5QXJnXSkgewogICAgICAgICAgICBrZXlzMi5wdXNoKGtleUFyZyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBrZXlzMjsKICAgICAgfQogICAgICBjbGVhbigpIHsKICAgICAgICB0aGlzLm1hcE9iamVjdCA9IHt9OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgbmV3IEZhc3RtYXAgdGhhdCBpbmNsdWRlcyBhbGwgdmFsdWVzIGZyb20gdGhpcyBhbmQgYWxsIGZyb20gdGhlIGZhc3RtYXAgaW4gdGhlIGFyZ3VtZW50CiAgICAgICAqLwogICAgICBjb25jYXQoZmFzdE1hcEFyZykgewogICAgICAgIGNvbnN0IGNvbmNhdGVkRmFzdG1hcCA9IG5ldyBfRmFzdE1hcCgpOwogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiB0aGlzLmdldEtleXMoKSkgewogICAgICAgICAgY29uY2F0ZWRGYXN0bWFwLmFkZFRvTWFwKGtleTIsIHRoaXMuZ2V0QnlLZXkoa2V5MikpOwogICAgICAgIH0KICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2YgZmFzdE1hcEFyZy5nZXRLZXlzKCkpIHsKICAgICAgICAgIGNvbmNhdGVkRmFzdG1hcC5hZGRUb01hcChrZXkyLCBmYXN0TWFwQXJnLmdldEJ5S2V5KGtleTIpLCB7CiAgICAgICAgICAgIGZvcmNlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvbmNhdGVkRmFzdG1hcDsKICAgICAgfQogICAgICAvKioKICAgICAgICogdHJpZXMgdG8gbWVyZ2UgYW5vdGhlciBGYXN0bWFwCiAgICAgICAqIE5vdGU6IHVuaXF1ZUtleUNvbGxpc2lvbnMgd2lsbCBjYXVzZSBvdmVyd3JpdGUKICAgICAgICogQHBhcmFtIGZhc3RNYXBBcmcKICAgICAgICovCiAgICAgIGFkZEFsbEZyb21PdGhlcihmYXN0TWFwQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIGZhc3RNYXBBcmcuZ2V0S2V5cygpKSB7CiAgICAgICAgICB0aGlzLmFkZFRvTWFwKGtleTIsIGZhc3RNYXBBcmcuZ2V0QnlLZXkoa2V5MiksIHsKICAgICAgICAgICAgZm9yY2U6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBmaW5kKGZpbmRGdW5jdGlvbkFyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiB0aGlzLmdldEtleXMoKSkgewogICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0QnlLZXkoa2V5Mik7CiAgICAgICAgICBjb25zdCBmaW5kRnVuY3Rpb25SZXN1bHQgPSBhd2FpdCBmaW5kRnVuY3Rpb25BcmcoaXRlbSk7CiAgICAgICAgICBpZiAoZmluZEZ1bmN0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgIHJldHVybiBpdGVtOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5vYmplY3RtYXAuanMKdmFyIHVuaSwgT2JqZWN0TWFwOwp2YXIgaW5pdF9jbGFzc2VzX29iamVjdG1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5vYmplY3RtYXAuanMiKCkgewogICAgaW5pdF9jbGFzc2VzX3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc19mYXN0bWFwKCk7CiAgICB1bmkgPSAocHJlZml4NCA9ICJ1bmkiKSA9PiB7CiAgICAgIHJldHVybiBgJHtwcmVmaXg0fXh4eHh4eHh4eHh4YC5yZXBsYWNlKC9beHldL2csIChjMTEpID0+IHsKICAgICAgICBjb25zdCByMTEgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwOwogICAgICAgIGNvbnN0IHY1ID0gYzExID09PSAieCIgPyByMTEgOiByMTEgJiAzIHwgODsKICAgICAgICByZXR1cm4gdjUudG9TdHJpbmcoMTYpOwogICAgICB9KTsKICAgIH07CiAgICBPYmplY3RNYXAgPSBjbGFzcyBfT2JqZWN0TWFwIHsKICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBuZXcgaW5zdGFuY2UKICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuZmFzdE1hcCA9IG5ldyBGYXN0TWFwKCk7CiAgICAgICAgdGhpcy5ldmVudFN1YmplY3QgPSBuZXcgZGlzdF90c19leHBvcnRzMi5yeGpzLlN1YmplY3QoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkcyBhbiBvYmplY3QgbWFwcGVkIHRvIGEgc3RyaW5nCiAgICAgICAqIHRoZSBzdHJpbmcgbXVzdCBiZSB1bmlxdWUKICAgICAgICovCiAgICAgIGFkZE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXlBcmcsIG9iamVjdEFyZykgewogICAgICAgIHRoaXMuZmFzdE1hcC5hZGRUb01hcCh1bmlxdWVLZXlBcmcsIG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZhc3Rlc3Qgd2F5IHRvIGdldCBhbiBvYmplY3QgZnJvbSB0aGUgbWFwCiAgICAgICAqIEBwYXJhbSB1bmlxdWVLZXkKICAgICAgICovCiAgICAgIGdldE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXlBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5mYXN0TWFwLmdldEJ5S2V5KHVuaXF1ZUtleUFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJlbW92ZSBrZXkKICAgICAgICogQHBhcmFtIGZ1bmN0aW9uQXJnCiAgICAgICAqLwogICAgICByZW1vdmVNYXBwZWRVbmlxdWUodW5pcXVlS2V5KSB7CiAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5nZXRNYXBwZWRVbmlxdWUodW5pcXVlS2V5KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkIG9iamVjdCB0byBPYmplY3RtYXAKICAgICAgICogcmV0dXJucyBmYWxzZSBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgaW4gdGhlIG1hcAogICAgICAgKiByZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5CiAgICAgICAqLwogICAgICBhZGQob2JqZWN0QXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZyk7CiAgICAgICAgICBpZiAob2JqZWN0ID09PSBvYmplY3RBcmcpIHsKICAgICAgICAgICAgcmV0dXJuIGtleUFyZzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgdW5pcXVlS2V5ID0gdW5pKCJrZXkiKTsKICAgICAgICB0aGlzLmFkZE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXksIG9iamVjdEFyZyk7CiAgICAgICAgdGhpcy5ldmVudFN1YmplY3QubmV4dCh7CiAgICAgICAgICBvcGVyYXRpb246ICJhZGQiLAogICAgICAgICAgcGF5bG9hZDogb2JqZWN0QXJnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHVuaXF1ZUtleTsKICAgICAgfQogICAgICAvKioKICAgICAgICogbGlrZSAuYWRkIGJ1dCBhZGRzIGFuIHdob2xlIGFycmF5IG9mIG9iamVjdHMKICAgICAgICovCiAgICAgIGFkZEFycmF5KG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgICB0aGlzLmFkZChpdGVtKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrIGlmIG9iamVjdCBpcyBpbiBPYmplY3RtYXAKICAgICAgICovCiAgICAgIGNoZWNrRm9yT2JqZWN0KG9iamVjdEFyZykgewogICAgICAgIHJldHVybiAhIXRoaXMuZ2V0S2V5Rm9yT2JqZWN0KG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldCBrZXkgZm9yIG9iamVjdAogICAgICAgKiBAcGFyYW0gZmluZEZ1bmN0aW9uCiAgICAgICAqLwogICAgICBnZXRLZXlGb3JPYmplY3Qob2JqZWN0QXJnKSB7CiAgICAgICAgbGV0IGZvdW5kS2V5ID0gbnVsbDsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICBpZiAoIWZvdW5kS2V5ICYmIHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpID09PSBvYmplY3RBcmcpIHsKICAgICAgICAgICAgZm91bmRLZXkgPSBrZXlBcmc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZvdW5kS2V5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBmaW5kIG9iamVjdAogICAgICAgKi8KICAgICAgYXN5bmMgZmluZChmaW5kRnVuY3Rpb24pIHsKICAgICAgICByZXR1cm4gdGhpcy5mYXN0TWFwLmZpbmQoZmluZEZ1bmN0aW9uKTsKICAgICAgfQogICAgICBmaW5kU3luYyhmaW5kRnVuY3Rpb24pIHsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICBpZiAoZmluZEZ1bmN0aW9uKHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpKSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRNYXBwZWRVbmlxdWUoa2V5QXJnKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZpbmRzIGEgc3BlY2lmaWMgZWxlbWVudCBhbmQgdGhlbiByZW1vdmVzIGl0CiAgICAgICAqLwogICAgICBhc3luYyBmaW5kT25lQW5kUmVtb3ZlKGZpbmRGdW5jdGlvbikgewogICAgICAgIGNvbnN0IGZvdW5kRWxlbWVudCA9IGF3YWl0IHRoaXMuZmluZChmaW5kRnVuY3Rpb24pOwogICAgICAgIGlmIChmb3VuZEVsZW1lbnQpIHsKICAgICAgICAgIHRoaXMucmVtb3ZlKGZvdW5kRWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3VuZEVsZW1lbnQ7CiAgICAgIH0KICAgICAgZmluZE9uZUFuZFJlbW92ZVN5bmMoZmluZEZ1bmN0aW9uKSB7CiAgICAgICAgY29uc3QgZm91bmRFbGVtZW50ID0gdGhpcy5maW5kU3luYyhmaW5kRnVuY3Rpb24pOwogICAgICAgIGlmIChmb3VuZEVsZW1lbnQpIHsKICAgICAgICAgIHRoaXMucmVtb3ZlKGZvdW5kRWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3VuZEVsZW1lbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJ1biBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtIGluIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgYXN5bmMgZm9yRWFjaChmdW5jdGlvbkFyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIGF3YWl0IGZ1bmN0aW9uQXJnKHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldHMgYW4gb2JqZWN0IGluIHRoZSBPYnNlcnZhYmxlbWFwIGFuZCByZW1vdmVzIGl0LCBzbyBpdCBjYW4ndCBiZSByZXRyaWV2ZWQgYWdhaW4KICAgICAgICovCiAgICAgIGdldE9uZUFuZFJlbW92ZSgpIHsKICAgICAgICBjb25zdCBrZXlzMiA9IHRoaXMuZmFzdE1hcC5nZXRLZXlzKCk7CiAgICAgICAgaWYgKGtleXMyLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGtleVRvVXNlID0ga2V5czJbMF07CiAgICAgICAgICBjb25zdCByZW1vdmVkSXRlbSA9IHRoaXMuZmFzdE1hcC5yZW1vdmVGcm9tTWFwKGtleVRvVXNlKTsKICAgICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoewogICAgICAgICAgICBvcGVyYXRpb246ICJyZW1vdmUiLAogICAgICAgICAgICBwYXlsb2FkOiByZW1vdmVkSXRlbQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gcmVtb3ZlZEl0ZW07CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgY2xvbmVkIGFycmF5IG9mIGFsbCB0aGUgb2JqZWN0cyBjdXJyZW50bHkgaW4gdGhlIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgZ2V0QXJyYXkoKSB7CiAgICAgICAgY29uc3QgcmV0dXJuQXJyYXkgPSBbXTsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICByZXR1cm5BcnJheS5wdXNoKHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldHVybkFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVjayBpZiBPYmplY3RtYXAgaXN0IGVtcHR5CiAgICAgICAqLwogICAgICBpc0VtcHR5KCkgewogICAgICAgIHJldHVybiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpLmxlbmd0aCA9PT0gMDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVtb3ZlIG9iamVjdCBmcm9tIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgcmVtb3ZlKG9iamVjdEFyZykgewogICAgICAgIGlmICh0aGlzLmNoZWNrRm9yT2JqZWN0KG9iamVjdEFyZykpIHsKICAgICAgICAgIGNvbnN0IGtleUFyZyA9IHRoaXMuZ2V0S2V5Rm9yT2JqZWN0KG9iamVjdEFyZyk7CiAgICAgICAgICBjb25zdCByZW1vdmVkT2JqZWN0ID0gdGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoa2V5QXJnKTsKICAgICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoewogICAgICAgICAgICBvcGVyYXRpb246ICJyZW1vdmUiLAogICAgICAgICAgICBwYXlsb2FkOiByZW1vdmVkT2JqZWN0CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiByZW1vdmVkT2JqZWN0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICAvKioKICAgICAgICogd2lwZSBPYmplY3RtYXAKICAgICAgICovCiAgICAgIHdpcGUoKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgdGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoa2V5QXJnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBuZXcgT2JqZWN0bWFwIHRoYXQgaW5jbHVkZXMKICAgICAgICovCiAgICAgIGNvbmNhdChvYmplY3RNYXBBcmcpIHsKICAgICAgICBjb25zdCBjb25jYXR0ZWRPYmplY3RNYXAgPSBuZXcgX09iamVjdE1hcCgpOwogICAgICAgIGNvbmNhdHRlZE9iamVjdE1hcC5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcih0aGlzLmZhc3RNYXApOwogICAgICAgIGNvbmNhdHRlZE9iamVjdE1hcC5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcihvYmplY3RNYXBBcmcuZmFzdE1hcCk7CiAgICAgICAgcmV0dXJuIGNvbmNhdHRlZE9iamVjdE1hcDsKICAgICAgfQogICAgICAvKioKICAgICAgICogdHJpZXMgdG8gbWVyZ2UgYW5vdGhlciBPYmplY3RtYXAKICAgICAgICogTm90ZTogdW5pcXVlS2V5Q29sbGlzaW9ucyB3aWxsIGNhdXNlIG92ZXJ3cml0ZQogICAgICAgKiBAcGFyYW0gb2JqZWN0TWFwQXJnCiAgICAgICAqLwogICAgICBhZGRBbGxGcm9tT3RoZXIob2JqZWN0TWFwQXJnKSB7CiAgICAgICAgdGhpcy5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcihvYmplY3RNYXBBcmcuZmFzdE1hcCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuaW50ZXJlc3RtYXAuaW50ZXJlc3QuanMKdmFyIEludGVyZXN0Owp2YXIgaW5pdF9jbGFzc2VzX2ludGVyZXN0bWFwX2ludGVyZXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmludGVyZXN0bWFwLmludGVyZXN0LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBpbml0X2NsYXNzZXNfaW50ZXJlc3RtYXAoKTsKICAgIEludGVyZXN0ID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogcXVpY2sgYWNjZXNzIHRvIGEgc3RyaW5nIHRoYXQgbWFrZXMgdGhlIGludGVyZXN0IGNvbXBhcmFibGUgZm9yIGNoZWNraW5nIGZvciBzaW1pbGFyIGludGVyZXN0cwogICAgICAgKi8KICAgICAgZ2V0IGNvbXBhcmlzb25TdHJpbmcoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyaXNvbkZ1bmModGhpcy5vcmlnaW5hbEludGVyZXN0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZnVsbGZpbGwgdGhlIGludGVyZXN0CiAgICAgICAqLwogICAgICBmdWxsZmlsbEludGVyZXN0KG9iamVjdEFyZykgewogICAgICAgIHRoaXMuaXNGdWxsZmlsbGVkID0gdHJ1ZTsKICAgICAgICB0aGlzLmZ1bGxmaWxsbWVudFN0b3JlID0gW107CiAgICAgICAgdGhpcy5pbnRlcmVzdERlZmVycmVkLnJlc29sdmUob2JqZWN0QXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICoKICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKGludGVyZXN0TWFwQXJnLCBpbnRlcmVzdEFyZywgY29tcGFyaXNvbkZ1bmNBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICB0aGlzLmRlc3RydWN0aW9uVGltZXIgPSBuZXcgZGlzdF90c19leHBvcnRzNy5UaW1lcigxZTQpOwogICAgICAgIHRoaXMuaXNGdWxsZmlsbGVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5mdWxsZmlsbG1lbnRTdG9yZSA9IFtdOwogICAgICAgIHRoaXMuaW50ZXJlc3REZWZlcnJlZCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMuRGVmZXJyZWQoKTsKICAgICAgICB0aGlzLmludGVyZXN0RnVsbGZpbGxlZCA9IHRoaXMuaW50ZXJlc3REZWZlcnJlZC5wcm9taXNlOwogICAgICAgIHRoaXMuaW50ZXJlc3RNYXBSZWYgPSBpbnRlcmVzdE1hcEFyZzsKICAgICAgICB0aGlzLm9yaWdpbmFsSW50ZXJlc3QgPSBpbnRlcmVzdEFyZzsKICAgICAgICB0aGlzLmNvbXBhcmlzb25GdW5jID0gY29tcGFyaXNvbkZ1bmNBcmc7CiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZzsKICAgICAgICB0aGlzLmRlc3RydWN0aW9uVGltZXIuY29tcGxldGVkLnRoZW4oKCkgPT4gewogICAgICAgICAgdGhpcy5kZXN0cm95KCk7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucz8ubWFya0xvc3RBZnRlckRlZmF1bHQpIHsKICAgICAgICAgIGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3IodGhpcy5vcHRpb25zLm1hcmtMb3N0QWZ0ZXJEZWZhdWx0KS50aGVuKHRoaXMubWFya0xvc3QpOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIC8vIExJRkVDWUNMRSBNQU5BR0VNRU5UCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgLyoqCiAgICAgICAqIHNlbGYgZGVzdHJ1Y3RzIHRoZSBpbnRlcmVzdAogICAgICAgKi8KICAgICAgZGVzdHJveSgpIHsKICAgICAgICB0aGlzLmludGVyZXN0TWFwUmVmLnJlbW92ZUludGVyZXN0KHRoaXMpOwogICAgICAgIGlmICghdGhpcy5pc0Z1bGxmaWxsZWQgJiYgdGhpcy5vcHRpb25zLmRlZmF1bHRGdWxsZmlsbG1lbnQpIHsKICAgICAgICAgIHRoaXMuZnVsbGZpbGxJbnRlcmVzdCh0aGlzLm9wdGlvbnMuZGVmYXVsdEZ1bGxmaWxsbWVudCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBub3RpZmllcyB0aGUgaW50ZXJlc3QgdGhhdCB0aGUgaW50ZXJlc3QgaW4gaXQgaGFzIGJlZW4gbG9zdAogICAgICAgKi8KICAgICAgbWFya0xvc3QoKSB7CiAgICAgICAgdGhpcy5kZXN0cnVjdGlvblRpbWVyLnN0YXJ0KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIG5vdGlmaWVzIHRoZSBpbnRlcmVzdCB0aGF0IHRoZSBpbnRlcmVzdCBpbiBpdCBoYXMgYmVlbiByZXN0b3JlZAogICAgICAgKi8KICAgICAgcmVuZXcoKSB7CiAgICAgICAgdGhpcy5kZXN0cnVjdGlvblRpbWVyLnJlc2V0KCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuaW50ZXJlc3RtYXAuanMKdmFyIEludGVyZXN0TWFwOwp2YXIgaW5pdF9jbGFzc2VzX2ludGVyZXN0bWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmludGVyZXN0bWFwLmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBpbml0X2NsYXNzZXNfb2JqZWN0bWFwKCk7CiAgICBpbml0X2NsYXNzZXNfaW50ZXJlc3RtYXBfaW50ZXJlc3QoKTsKICAgIEludGVyZXN0TWFwID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcihjb21wYXJpc29uRnVuY0FyZywgb3B0aW9uc0FyZyA9IHt9KSB7CiAgICAgICAgdGhpcy5pbnRlcmVzdE9iamVjdE1hcCA9IG5ldyBPYmplY3RNYXAoKTsKICAgICAgICB0aGlzLmludGVyZXN0T2JzZXJ2YWJsZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLk9ic2VydmFibGVJbnRha2UoKTsKICAgICAgICB0aGlzLmNvbXBhcmlzb25GdW5jID0gY29tcGFyaXNvbkZ1bmNBcmc7CiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZzsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkcyBhbiBpbnRlcmVzdCB0byB0aGUgSW50ZXJlc3RNYXAKICAgICAgICogQHBhcmFtIGludGVyZXN0SWQKICAgICAgICovCiAgICAgIGFzeW5jIGFkZEludGVyZXN0KGludGVyZXN0SWQsIGRlZmF1bHRGdWxsZmlsbG1lbnRBcmcpIHsKICAgICAgICBjb25zdCBjb21wYXJpc29uU3RyaW5nID0gdGhpcy5jb21wYXJpc29uRnVuYyhpbnRlcmVzdElkKTsKICAgICAgICBsZXQgcmV0dXJuSW50ZXJlc3Q7CiAgICAgICAgY29uc3QgbmV3SW50ZXJlc3QgPSBuZXcgSW50ZXJlc3QodGhpcywgaW50ZXJlc3RJZCwgdGhpcy5jb21wYXJpc29uRnVuYywgewogICAgICAgICAgbWFya0xvc3RBZnRlckRlZmF1bHQ6IHRoaXMub3B0aW9ucy5tYXJrTG9zdEFmdGVyRGVmYXVsdCwKICAgICAgICAgIGRlZmF1bHRGdWxsZmlsbG1lbnQ6IGRlZmF1bHRGdWxsZmlsbG1lbnRBcmcKICAgICAgICB9KTsKICAgICAgICBsZXQgaW50ZXJlc3RFeGlzdHMgPSBmYWxzZTsKICAgICAgICBhd2FpdCB0aGlzLmludGVyZXN0T2JqZWN0TWFwLmZvckVhY2goKGludGVyZXN0QXJnKSA9PiB7CiAgICAgICAgICBpZiAoIWludGVyZXN0RXhpc3RzICYmIGludGVyZXN0QXJnLmNvbXBhcmlzb25TdHJpbmcgPT09IG5ld0ludGVyZXN0LmNvbXBhcmlzb25TdHJpbmcpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coImluZm8iLCBgaW50ZXJlc3QgYWxyZWFkeSBleGlzdHMgZm9yICR7bmV3SW50ZXJlc3QuY29tcGFyaXNvblN0cmluZ31gKTsKICAgICAgICAgICAgaW50ZXJlc3RFeGlzdHMgPSB0cnVlOwogICAgICAgICAgICByZXR1cm5JbnRlcmVzdCA9IGludGVyZXN0QXJnOwogICAgICAgICAgICByZXR1cm5JbnRlcmVzdC5yZW5ldygpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICghcmV0dXJuSW50ZXJlc3QpIHsKICAgICAgICAgIHJldHVybkludGVyZXN0ID0gbmV3SW50ZXJlc3Q7CiAgICAgICAgICB0aGlzLmludGVyZXN0T2JqZWN0TWFwLmFkZChyZXR1cm5JbnRlcmVzdCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuaW50ZXJlc3RPYnNlcnZhYmxlLnB1c2gocmV0dXJuSW50ZXJlc3QpOwogICAgICAgIHJldHVybiByZXR1cm5JbnRlcmVzdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVtb3ZlcyBhbiBpbnRlcmVzdCBmcm9tIHRoZSBpbnRlcmVzdCBtYXAKICAgICAgICovCiAgICAgIHJlbW92ZUludGVyZXN0KGludGVyZXN0QXJnKSB7CiAgICAgICAgY29uc3QgaW50ZXJlc3RUb1JlbW92ZSA9IHRoaXMuaW50ZXJlc3RPYmplY3RNYXAuZmluZE9uZUFuZFJlbW92ZVN5bmMoKGludGVyZXN0QXJnMikgPT4gewogICAgICAgICAgcmV0dXJuIGludGVyZXN0QXJnLmNvbXBhcmlzb25TdHJpbmcgPT09IGludGVyZXN0QXJnMi5jb21wYXJpc29uU3RyaW5nOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVjayBpbnRlcmVzdAogICAgICAgKi8KICAgICAgY2hlY2tJbnRlcmVzdChvYmplY3RBcmcpIHsKICAgICAgICBjb25zdCBjb21wYXJpc29uU3RyaW5nID0gdGhpcy5jb21wYXJpc29uRnVuYyhvYmplY3RBcmcpOwogICAgICAgIHJldHVybiB0aGlzLmNoZWNrSW50ZXJlc3RCeVN0cmluZyhjb21wYXJpc29uU3RyaW5nKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIGFuIGludGVyZXN0CiAgICAgICAqIEBwYXJhbSBjb21wYXJpc29uU3RyaW5nQXJnCiAgICAgICAqLwogICAgICBjaGVja0ludGVyZXN0QnlTdHJpbmcoY29tcGFyaXNvblN0cmluZ0FyZykgewogICAgICAgIGNvbnN0IGZvdW5kSW50ZXJlc3QgPSB0aGlzLmludGVyZXN0T2JqZWN0TWFwLmZpbmRTeW5jKChpbnRlcmVzdCkgPT4gewogICAgICAgICAgcmV0dXJuIGludGVyZXN0LmNvbXBhcmlzb25TdHJpbmcgPT09IGNvbXBhcmlzb25TdHJpbmdBcmc7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGZvdW5kSW50ZXJlc3QpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBpbmZvcm0gbG9zdCBpbnRlcmVzdAogICAgICAgKiBAcGFyYW0gaW50ZXJlc3RJZAogICAgICAgKi8KICAgICAgaW5mb3JtTG9zdEludGVyZXN0KGludGVyZXN0SWQpIHsKICAgICAgICBjb25zdCB3YW50ZWRJbnRlcmVzdCA9IHRoaXMuZmluZEludGVyZXN0KGludGVyZXN0SWQpOwogICAgICAgIGlmICh3YW50ZWRJbnRlcmVzdCkgewogICAgICAgICAgd2FudGVkSW50ZXJlc3QubWFya0xvc3QoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZpbmRzIGFuIGludGVyZXN0CiAgICAgICAqIEBwYXJhbSBpbnRlcmVzdElkCiAgICAgICAqLwogICAgICBmaW5kSW50ZXJlc3QoaW50ZXJlc3RJZCkgewogICAgICAgIGNvbnN0IGNvbXBhcmFibGVTdHJpbmcgPSB0aGlzLmNvbXBhcmlzb25GdW5jKGludGVyZXN0SWQpOwogICAgICAgIGNvbnN0IGludGVyZXN0ID0gdGhpcy5pbnRlcmVzdE9iamVjdE1hcC5maW5kU3luYygoaW50ZXJlc3RBcmcpID0+IHsKICAgICAgICAgIHJldHVybiBpbnRlcmVzdEFyZy5jb21wYXJpc29uU3RyaW5nID09PSBjb21wYXJhYmxlU3RyaW5nOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBpbnRlcmVzdDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5saW1pdGVkYXJyYXkuanMKdmFyIExpbWl0ZWRBcnJheTsKdmFyIGluaXRfY2xhc3Nlc19saW1pdGVkYXJyYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMubGltaXRlZGFycmF5LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBMaW1pdGVkQXJyYXkgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGxpbWl0QXJnKSB7CiAgICAgICAgdGhpcy5hcnJheSA9IFtdOwogICAgICAgIHRoaXMuYXJyYXlMaW1pdCA9IGxpbWl0QXJnOwogICAgICB9CiAgICAgIGFkZE9uZShvYmplY3RBcmcpIHsKICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQob2JqZWN0QXJnKTsKICAgICAgICBpZiAodGhpcy5hcnJheS5sZW5ndGggPiB0aGlzLmFycmF5TGltaXQpIHsKICAgICAgICAgIHRoaXMuYXJyYXkubGVuZ3RoID0gdGhpcy5hcnJheUxpbWl0OwogICAgICAgIH0KICAgICAgfQogICAgICBhZGRNYW55KG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgZm9yIChsZXQgb2JqZWN0QXJnIG9mIG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgICB0aGlzLmFkZE9uZShvYmplY3RBcmcpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXRMaW1pdChsaW1pdEFyZykgewogICAgICAgIHRoaXMuYXJyYXlMaW1pdCA9IGxpbWl0QXJnOwogICAgICAgIGlmICh0aGlzLmFycmF5Lmxlbmd0aCA+IHRoaXMuYXJyYXlMaW1pdCkgewogICAgICAgICAgdGhpcy5hcnJheS5sZW5ndGggPSB0aGlzLmFycmF5TGltaXQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldEF2ZXJhZ2UoKSB7CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFycmF5WzBdID09PSAibnVtYmVyIikgewogICAgICAgICAgbGV0IHN1bSA9IDA7CiAgICAgICAgICBmb3IgKGxldCBsb2NhbE51bWJlciBvZiB0aGlzLmFycmF5KSB7CiAgICAgICAgICAgIGxldCBsb2NhbE51bWJlckFueSA9IGxvY2FsTnVtYmVyOwogICAgICAgICAgICBzdW0gPSBzdW0gKyBsb2NhbE51bWJlckFueTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBzdW0gLyB0aGlzLmFycmF5Lmxlbmd0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmxvb3B0cmFja2VyLmpzCnZhciBMb29wVHJhY2tlcjsKdmFyIGluaXRfY2xhc3Nlc19sb29wdHJhY2tlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5sb29wdHJhY2tlci5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgaW5pdF9jbGFzc2VzX29iamVjdG1hcCgpOwogICAgTG9vcFRyYWNrZXIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMucmVmZXJlbmNlT2JqZWN0TWFwID0gbmV3IE9iamVjdE1hcCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVja3MgYW5kIHRyYWNrcyBhbiBvYmplY3QKICAgICAgICogQHBhcmFtIG9iamVjdEFyZwogICAgICAgKi8KICAgICAgY2hlY2tBbmRUcmFjayhvYmplY3RBcmcpIHsKICAgICAgICBpZiAoIXRoaXMucmVmZXJlbmNlT2JqZWN0TWFwLmNoZWNrRm9yT2JqZWN0KG9iamVjdEFyZykpIHsKICAgICAgICAgIHRoaXMucmVmZXJlbmNlT2JqZWN0TWFwLmFkZChvYmplY3RBcmcpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuc3RyaW5nbWFwLmpzCnZhciBTdHJpbmdtYXA7CnZhciBpbml0X2NsYXNzZXNfc3RyaW5nbWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnN0cmluZ21hcC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgU3RyaW5nbWFwID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLl9zdHJpbmdBcnJheSA9IFtdOwogICAgICAgIHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5ID0gW107CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFkZCBhIHN0cmluZyB0byB0aGUgU3RyaW5nbWFwCiAgICAgICAqLwogICAgICBhZGRTdHJpbmcoc3RyaW5nQXJnKSB7CiAgICAgICAgdGhpcy5fc3RyaW5nQXJyYXkucHVzaChzdHJpbmdBcmcpOwogICAgICAgIHRoaXMubm90aWZ5VHJpZ2dlcigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBsaWtlIGFkZFN0cmluZywgYnV0IGFjY2VwdHMgYW4gYXJyYXkgb2Ygc3RyaW5ncwogICAgICAgKi8KICAgICAgYWRkU3RyaW5nQXJyYXkoc3RyaW5nQXJyYXlBcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IHN0cmluZ0l0ZW0gb2Ygc3RyaW5nQXJyYXlBcmcpIHsKICAgICAgICAgIHRoaXMuYWRkU3RyaW5nKHN0cmluZ0l0ZW0pOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogcmVtb3ZlcyBhIHN0cmluZyBmcm9tIFN0cmluZ21hcAogICAgICAgKi8KICAgICAgcmVtb3ZlU3RyaW5nKHN0cmluZ0FyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIGluIHRoaXMuX3N0cmluZ0FycmF5KSB7CiAgICAgICAgICBpZiAodGhpcy5fc3RyaW5nQXJyYXlba2V5QXJnXSA9PT0gc3RyaW5nQXJnKSB7CiAgICAgICAgICAgIHRoaXMuX3N0cmluZ0FycmF5LnNwbGljZShwYXJzZUludChrZXlBcmcpLCAxKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5ub3RpZnlUcmlnZ2VyKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHdpcGVzIHRoZSBTdHJpbmdtYXAKICAgICAgICovCiAgICAgIHdpcGUoKSB7CiAgICAgICAgdGhpcy5fc3RyaW5nQXJyYXkgPSBbXTsKICAgICAgICB0aGlzLm5vdGlmeVRyaWdnZXIoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2sgaWYgc3RyaW5nIGlzIGluIFN0cmluZ21hcAogICAgICAgKi8KICAgICAgY2hlY2tTdHJpbmcoc3RyaW5nQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmluZ0FycmF5LmluZGV4T2Yoc3RyaW5nQXJnKSAhPT0gLTE7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrcyBzdHJpbmdQcmVzZW5jZSB3aXRoIG1pbmltYXRjaAogICAgICAgKi8KICAgICAgY2hlY2tNaW5pbWF0Y2gobWluaU1hdGNoU3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3Qgc21hcnRNYXRjaEluc3RhbmNlID0gbmV3IGRpc3RfdHNfZXhwb3J0czUuU21hcnRNYXRjaChtaW5pTWF0Y2hTdHJpbmdBcmcpOwogICAgICAgIGxldCBmb3VuZE1hdGNoID0gZmFsc2U7CiAgICAgICAgZm9yIChjb25zdCBzdHJpbmdJdGVtIG9mIHRoaXMuX3N0cmluZ0FycmF5KSB7CiAgICAgICAgICBpZiAoc21hcnRNYXRjaEluc3RhbmNlLm1hdGNoKHN0cmluZ0l0ZW0pKSB7CiAgICAgICAgICAgIGZvdW5kTWF0Y2ggPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZm91bmRNYXRjaDsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIGlmIHRoZSBTdHJpbmdtYXAgaXMgZW1wdHkKICAgICAgICovCiAgICAgIGNoZWNrSXNFbXB0eSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RyaW5nQXJyYXkubGVuZ3RoID09PSAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBnZXRzIGEgY2xvbmVkIGNvcHkgb2YgdGhlIGN1cnJlbnQgc3RyaW5nIEFycmF5CiAgICAgICAqLwogICAgICBnZXRTdHJpbmdBcnJheSgpIHsKICAgICAgICBjb25zdCByZXR1cm5BcnJheSA9IFtdOwogICAgICAgIGZvciAoY29uc3Qgc3RyaW5nSXRlbSBvZiB0aGlzLl9zdHJpbmdBcnJheSkgewogICAgICAgICAgcmV0dXJuQXJyYXkucHVzaChzdHJpbmdJdGVtKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldHVybkFycmF5OwogICAgICB9CiAgICAgIC8vIHRyaWdnZXIgcmVnaXN0ZXJpbmcKICAgICAgLyoqCiAgICAgICAqIHJlZ2lzdGVyIGEgbmV3IHRyaWdnZXIKICAgICAgICovCiAgICAgIHJlZ2lzdGVyVW50aWxUcnVlKGZ1bmN0aW9uQXJnLCBjYWxsYmFja0FyZykgewogICAgICAgIGNvbnN0IHRydWVEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5LnB1c2goKCkgPT4gewogICAgICAgICAgY29uc3QgcmVzdWx0ID0gZnVuY3Rpb25BcmcodGhpcy5nZXRTdHJpbmdBcnJheSgpKTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHsKICAgICAgICAgICAgaWYgKGNhbGxiYWNrQXJnKSB7CiAgICAgICAgICAgICAgY2FsbGJhY2tBcmcoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0cnVlRGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9KTsKICAgICAgICB0aGlzLm5vdGlmeVRyaWdnZXIoKTsKICAgICAgICByZXR1cm4gdHJ1ZURlZmVycmVkLnByb21pc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIG5vdGlmaWVzIHRyaWdnZXJzCiAgICAgICAqLwogICAgICBub3RpZnlUcmlnZ2VyKCkgewogICAgICAgIGNvbnN0IGZpbHRlcmVkQXJyYXkgPSB0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheS5maWx0ZXIoKGZ1bmN0aW9uQXJnKSA9PiB7CiAgICAgICAgICByZXR1cm4gIWZ1bmN0aW9uQXJnKCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXkgPSBmaWx0ZXJlZEFycmF5OwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnRpbWVkYWdncmVnYXRvci5qcwp2YXIgVGltZWRBZ2dyZWd0b3I7CnZhciBpbml0X2NsYXNzZXNfdGltZWRhZ2dyZWdhdG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnRpbWVkYWdncmVnYXRvci5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgVGltZWRBZ2dyZWd0b3IgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmcpIHsKICAgICAgICB0aGlzLnN0b3JhZ2VBcnJheSA9IFtdOwogICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNBcmc7CiAgICAgIH0KICAgICAgY2hlY2tBZ2dyZWdhdGlvblN0YXR1cygpIHsKICAgICAgICBjb25zdCBhZGRBZ2dyZWdhdGlvblRpbWVyID0gKCkgPT4gewogICAgICAgICAgdGhpcy5hZ2dyZWdhdGlvblRpbWVyID0gbmV3IGRpc3RfdHNfZXhwb3J0czcuVGltZXIodGhpcy5vcHRpb25zLmFnZ3JlZ2F0aW9uSW50ZXJ2YWxJbk1pbGxpcyk7CiAgICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9uVGltZXIuY29tcGxldGVkLnRoZW4oKCkgPT4gewogICAgICAgICAgICBjb25zdCBhZ2dyZWdhdGVGb3JQcm9jZXNzaW5nID0gdGhpcy5zdG9yYWdlQXJyYXk7CiAgICAgICAgICAgIGlmIChhZ2dyZWdhdGVGb3JQcm9jZXNzaW5nLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgIHRoaXMuYWdncmVnYXRpb25UaW1lciA9IG51bGw7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuc3RvcmFnZUFycmF5ID0gW107CiAgICAgICAgICAgIGFkZEFnZ3JlZ2F0aW9uVGltZXIoKTsKICAgICAgICAgICAgdGhpcy5vcHRpb25zLmZ1bmN0aW9uRm9yQWdncmVnYXRpb24oYWdncmVnYXRlRm9yUHJvY2Vzc2luZyk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuYWdncmVnYXRpb25UaW1lci5zdGFydCgpOwogICAgICAgIH07CiAgICAgICAgaWYgKCF0aGlzLmFnZ3JlZ2F0aW9uVGltZXIpIHsKICAgICAgICAgIGFkZEFnZ3JlZ2F0aW9uVGltZXIoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYWRkKGFnZ3JlZ2F0aW9uQXJnKSB7CiAgICAgICAgdGhpcy5zdG9yYWdlQXJyYXkucHVzaChhZ2dyZWdhdGlvbkFyZyk7CiAgICAgICAgdGhpcy5jaGVja0FnZ3JlZ2F0aW9uU3RhdHVzKCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMudHJlZS5qcwp2YXIgVHJlZTsKdmFyIGluaXRfY2xhc3Nlc190cmVlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnRyZWUuanMiKCkgewogICAgaW5pdF9jbGFzc2VzX3BsdWdpbnMoKTsKICAgIFRyZWUgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuc3ltYm9sVHJlZSA9IG5ldyBpbXBvcnRfc3ltYm9sX3RyZWUuZGVmYXVsdCgpOwogICAgICB9CiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAvLyBGdW5jdGlvbnMgdGhhdCBtYXAgdG8gdGhlIGZ1bmN0aW9uYWxpdHkgb2Ygc3ltYm9sLXRyZWUKICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIC8qKgogICAgICAgKgogICAgICAgKiBAcGFyYW0gb2JqZWN0QXJnCiAgICAgICAqLwogICAgICBpbml0aWFsaXplKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuaW5pdGlhbGl6ZShvYmplY3RBcmcpOwogICAgICB9CiAgICAgIGhhc0NoaWxkcmVuKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuaGFzQ2hpbGRyZW4ob2JqZWN0QXJnKTsKICAgICAgfQogICAgICBmaXJzdENoaWxkKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuZmlyc3RDaGlsZChvYmplY3RBcmcpOwogICAgICB9CiAgICAgIGxhc3RDaGlsZChvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmxhc3RDaGlsZChvYmplY3RBcmcpOwogICAgICB9CiAgICAgIHByZXZpb3VzU2libGluZyhvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnByZXZpb3VzU2libGluZyhvYmplY3RBcmcpOwogICAgICB9CiAgICAgIG5leHRTaWJsaW5nKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUubmV4dFNpYmxpbmcob2JqZWN0QXJnKTsKICAgICAgfQogICAgICBwYXJlbnQob2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5wYXJlbnQob2JqZWN0QXJnKTsKICAgICAgfQogICAgICBsYXN0SW5jbHVzaXZlRGVzY2VuZGFudChvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgcHJlY2VkaW5nKG9iamVjdEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUucHJlY2VkaW5nKG9iamVjdEFyZywgb3B0aW9uc0FyZyk7CiAgICAgIH0KICAgICAgZm9sbG93aW5nKG9iamVjdCwgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuZm9sbG93aW5nKG9iamVjdCwgb3B0aW9uc0FyZyk7CiAgICAgIH0KICAgICAgY2hpbGRyZW5Ub0FycmF5KHBhcmVudEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuY2hpbGRyZW5Ub0FycmF5KHBhcmVudEFyZywgb3B0aW9uc0FyZyk7CiAgICAgIH0KICAgICAgYW5jZXN0b3JzVG9BcnJheShvYmplY3RBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmFuY2VzdG9yc1RvQXJyYXkob2JqZWN0QXJnLCBvcHRpb25zQXJnKTsKICAgICAgfQogICAgICB0cmVlVG9BcnJheShyb290QXJnLCBvcHRpb25zQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS50cmVlVG9BcnJheShyb290QXJnLCBvcHRpb25zQXJnKTsKICAgICAgfQogICAgICBjaGlsZHJlbkl0ZXJhdG9yKHBhcmVudEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcihwYXJlbnRBcmcsIG9wdGlvbnNBcmcpOwogICAgICB9CiAgICAgIHByZXZpb3VzU2libGluZ3NJdGVyYXRvcihvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnByZXZpb3VzU2libGluZ3NJdGVyYXRvcihvYmplY3RBcmcpOwogICAgICB9CiAgICAgIG5leHRTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUubmV4dFNpYmxpbmdzSXRlcmF0b3IoKTsKICAgICAgfQogICAgICBhbmNlc3RvcnNJdGVyYXRvcihvYmplY3RBcmcpIHsKICAgICAgICB0aGlzLnN5bWJvbFRyZWUuYW5jZXN0b3JzSXRlcmF0b3IoKTsKICAgICAgfQogICAgICB0cmVlSXRlcmF0b3Iocm9vdEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUudHJlZUl0ZXJhdG9yKHJvb3RBcmcpOwogICAgICB9CiAgICAgIGluZGV4KGNoaWxkQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbmRleChjaGlsZEFyZyk7CiAgICAgIH0KICAgICAgY2hpbGRyZW5Db3VudChwYXJlbnRBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmNoaWxkcmVuQ291bnQocGFyZW50QXJnKTsKICAgICAgfQogICAgICBjb21wYXJlVHJlZVBvc2l0aW9uKGxlZnRBcmcsIHJpZ2h0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZVRyZWVQb3NpdGlvbihsZWZ0QXJnLCByaWdodEFyZyk7CiAgICAgIH0KICAgICAgcmVtb3ZlKHJlbW92ZU9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUucmVtb3ZlKHJlbW92ZU9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgaW5zZXJ0QmVmb3JlKHJlZmVyZW5jZU9iamVjdEFyZywgbmV3T2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbnNlcnRCZWZvcmUocmVmZXJlbmNlT2JqZWN0QXJnLCBuZXdPYmplY3RBcmcpOwogICAgICB9CiAgICAgIGluc2VydEFmdGVyKHJlZmVyZW5jZU9iamVjdCwgbmV3T2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbnNlcnRBZnRlcihyZWZlcmVuY2VPYmplY3QsIG5ld09iamVjdEFyZyk7CiAgICAgIH0KICAgICAgcHJlcGVuZENoaWxkKHJlZmVyZW5jZU9iamVjdEFyZywgbmV3T2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5wcmVwZW5kQ2hpbGQocmVmZXJlbmNlT2JqZWN0QXJnLCBuZXdPYmplY3RBcmcpOwogICAgICB9CiAgICAgIGFwcGVuZENoaWxkKHJlZmVyZW5jZU9iamVjdEFyZywgbmV3T2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5hcHBlbmRDaGlsZChyZWZlcmVuY2VPYmplY3RBcmcsIG5ld09iamVjdEFyZyk7CiAgICAgIH0KICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAvLyBGdW5jdGlvbmlvbmFsaXR5IHRoYXQgZXh0ZW5kcyBzeW1ib2wtdHJlZQogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgYnJhbmNoIG9mIHRoZSB0cmVlIGFzIEpTT04KICAgICAgICogY2FuIGJlIHVzZXIKICAgICAgICovCiAgICAgIHRvSnNvbldpdGhIaWVyYWNoeShyb290RWxlbWVudCkgewogICAgICAgIGNvbnN0IHRyZWVJdGVyYWJsZSA9IHRoaXMudHJlZUl0ZXJhdG9yKHJvb3RFbGVtZW50LCB7fSk7CiAgICAgICAgZm9yIChjb25zdCB0cmVlSXRlbSBvZiB0cmVlSXRlcmFibGUpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKHRyZWVJdGVtKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGJ1aWxkcyBhIHRyZWUgZnJvbSBhIEpTT04gd2l0aCBoaWVyYWNoeQogICAgICAgKiBAcGFyYW0gcm9vdEVsZW1lbnQKICAgICAgICovCiAgICAgIGZyb21Kc29uV2l0aEhpZXJhY2h5KHJvb3RFbGVtZW50KSB7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHM2ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czYsIHsKICBBc3luY0V4ZWN1dGlvblN0YWNrOiAoKSA9PiBBc3luY0V4ZWN1dGlvblN0YWNrLAogIEJhY2twcmVzc3VyZWRBcnJheTogKCkgPT4gQmFja3ByZXNzdXJlZEFycmF5LAogIEZhc3RNYXA6ICgpID0+IEZhc3RNYXAsCiAgSW50ZXJlc3Q6ICgpID0+IEludGVyZXN0LAogIEludGVyZXN0TWFwOiAoKSA9PiBJbnRlcmVzdE1hcCwKICBMaW1pdGVkQXJyYXk6ICgpID0+IExpbWl0ZWRBcnJheSwKICBMb29wVHJhY2tlcjogKCkgPT4gTG9vcFRyYWNrZXIsCiAgT2JqZWN0TWFwOiAoKSA9PiBPYmplY3RNYXAsCiAgU3RyaW5nbWFwOiAoKSA9PiBTdHJpbmdtYXAsCiAgVGltZWRBZ2dyZWd0b3I6ICgpID0+IFRpbWVkQWdncmVndG9yLAogIFRyZWU6ICgpID0+IFRyZWUsCiAgdW5pOiAoKSA9PiB1bmkKfSk7CnZhciBpbml0X2Rpc3RfdHM3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfYXN5bmNleGVjdXRpb25zdGFjaygpOwogICAgaW5pdF9jbGFzc2VzX2JhY2twcmVzc3VyZWRhcnJheSgpOwogICAgaW5pdF9jbGFzc2VzX2Zhc3RtYXAoKTsKICAgIGluaXRfY2xhc3Nlc19pbnRlcmVzdG1hcCgpOwogICAgaW5pdF9jbGFzc2VzX2ludGVyZXN0bWFwX2ludGVyZXN0KCk7CiAgICBpbml0X2NsYXNzZXNfbGltaXRlZGFycmF5KCk7CiAgICBpbml0X2NsYXNzZXNfbG9vcHRyYWNrZXIoKTsKICAgIGluaXRfY2xhc3Nlc19vYmplY3RtYXAoKTsKICAgIGluaXRfY2xhc3Nlc19zdHJpbmdtYXAoKTsKICAgIGluaXRfY2xhc3Nlc190aW1lZGFnZ3JlZ2F0b3IoKTsKICAgIGluaXRfY2xhc3Nlc190cmVlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91aW50OGFycmF5LWV4dHJhc0AxLjUuMC9ub2RlX21vZHVsZXMvdWludDhhcnJheS1leHRyYXMvaW5kZXguanMKdmFyIHVpbnQ4YXJyYXlfZXh0cmFzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQodWludDhhcnJheV9leHRyYXNfZXhwb3J0cywgewogIGFyZVVpbnQ4QXJyYXlzRXF1YWw6ICgpID0+IGFyZVVpbnQ4QXJyYXlzRXF1YWwsCiAgYXNzZXJ0VWludDhBcnJheTogKCkgPT4gYXNzZXJ0VWludDhBcnJheSwKICBhc3NlcnRVaW50OEFycmF5T3JBcnJheUJ1ZmZlcjogKCkgPT4gYXNzZXJ0VWludDhBcnJheU9yQXJyYXlCdWZmZXIsCiAgYmFzZTY0VG9TdHJpbmc6ICgpID0+IGJhc2U2NFRvU3RyaW5nLAogIGJhc2U2NFRvVWludDhBcnJheTogKCkgPT4gYmFzZTY0VG9VaW50OEFycmF5LAogIGNvbXBhcmVVaW50OEFycmF5czogKCkgPT4gY29tcGFyZVVpbnQ4QXJyYXlzLAogIGNvbmNhdFVpbnQ4QXJyYXlzOiAoKSA9PiBjb25jYXRVaW50OEFycmF5cywKICBnZXRVaW50QkU6ICgpID0+IGdldFVpbnRCRSwKICBoZXhUb1VpbnQ4QXJyYXk6ICgpID0+IGhleFRvVWludDhBcnJheSwKICBpbmNsdWRlczogKCkgPT4gaW5jbHVkZXMsCiAgaW5kZXhPZjogKCkgPT4gaW5kZXhPZiwKICBpc1VpbnQ4QXJyYXk6ICgpID0+IGlzVWludDhBcnJheSwKICBzdHJpbmdUb0Jhc2U2NDogKCkgPT4gc3RyaW5nVG9CYXNlNjQsCiAgc3RyaW5nVG9VaW50OEFycmF5OiAoKSA9PiBzdHJpbmdUb1VpbnQ4QXJyYXksCiAgdG9VaW50OEFycmF5OiAoKSA9PiB0b1VpbnQ4QXJyYXksCiAgdWludDhBcnJheVRvQmFzZTY0OiAoKSA9PiB1aW50OEFycmF5VG9CYXNlNjQsCiAgdWludDhBcnJheVRvSGV4OiAoKSA9PiB1aW50OEFycmF5VG9IZXgsCiAgdWludDhBcnJheVRvU3RyaW5nOiAoKSA9PiB1aW50OEFycmF5VG9TdHJpbmcKfSk7CmZ1bmN0aW9uIGlzVHlwZSh2YWx1ZTIsIHR5cGVDb25zdHJ1Y3RvciwgdHlwZVN0cmluZ2lmaWVkKSB7CiAgaWYgKCF2YWx1ZTIpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgaWYgKHZhbHVlMi5jb25zdHJ1Y3RvciA9PT0gdHlwZUNvbnN0cnVjdG9yKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUyKSA9PT0gdHlwZVN0cmluZ2lmaWVkOwp9CmZ1bmN0aW9uIGlzVWludDhBcnJheSh2YWx1ZTIpIHsKICByZXR1cm4gaXNUeXBlKHZhbHVlMiwgVWludDhBcnJheSwgdWludDhBcnJheVN0cmluZ2lmaWVkKTsKfQpmdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbHVlMikgewogIHJldHVybiBpc1R5cGUodmFsdWUyLCBBcnJheUJ1ZmZlciwgYXJyYXlCdWZmZXJTdHJpbmdpZmllZCk7Cn0KZnVuY3Rpb24gaXNVaW50OEFycmF5T3JBcnJheUJ1ZmZlcih2YWx1ZTIpIHsKICByZXR1cm4gaXNVaW50OEFycmF5KHZhbHVlMikgfHwgaXNBcnJheUJ1ZmZlcih2YWx1ZTIpOwp9CmZ1bmN0aW9uIGFzc2VydFVpbnQ4QXJyYXkodmFsdWUyKSB7CiAgaWYgKCFpc1VpbnQ4QXJyYXkodmFsdWUyKSkgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXGBVaW50OEFycmF5XGAsIGdvdCBcYCR7dHlwZW9mIHZhbHVlMn1cYGApOwogIH0KfQpmdW5jdGlvbiBhc3NlcnRVaW50OEFycmF5T3JBcnJheUJ1ZmZlcih2YWx1ZTIpIHsKICBpZiAoIWlzVWludDhBcnJheU9yQXJyYXlCdWZmZXIodmFsdWUyKSkgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXGBVaW50OEFycmF5XGAgb3IgXGBBcnJheUJ1ZmZlclxgLCBnb3QgXGAke3R5cGVvZiB2YWx1ZTJ9XGBgKTsKICB9Cn0KZnVuY3Rpb24gdG9VaW50OEFycmF5KHZhbHVlMikgewogIGlmICh2YWx1ZTIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgewogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHZhbHVlMik7CiAgfQogIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUyKSkgewogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHZhbHVlMi5idWZmZXIsIHZhbHVlMi5ieXRlT2Zmc2V0LCB2YWx1ZTIuYnl0ZUxlbmd0aCk7CiAgfQogIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuc3VwcG9ydGVkIHZhbHVlLCBnb3QgXGAke3R5cGVvZiB2YWx1ZTJ9XGAuYCk7Cn0KZnVuY3Rpb24gY29uY2F0VWludDhBcnJheXMoYXJyYXlzLCB0b3RhbExlbmd0aCkgewogIGlmIChhcnJheXMubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7CiAgfQogIHRvdGFsTGVuZ3RoID8/PSBhcnJheXMucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlKSA9PiBhY2N1bXVsYXRvciArIGN1cnJlbnRWYWx1ZS5sZW5ndGgsIDApOwogIGNvbnN0IHJldHVyblZhbHVlID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGgpOwogIGxldCBvZmZzZXQgPSAwOwogIGZvciAoY29uc3QgYXJyYXkgb2YgYXJyYXlzKSB7CiAgICBhc3NlcnRVaW50OEFycmF5KGFycmF5KTsKICAgIHJldHVyblZhbHVlLnNldChhcnJheSwgb2Zmc2V0KTsKICAgIG9mZnNldCArPSBhcnJheS5sZW5ndGg7CiAgfQogIHJldHVybiByZXR1cm5WYWx1ZTsKfQpmdW5jdGlvbiBhcmVVaW50OEFycmF5c0VxdWFsKGE1LCBiNSkgewogIGFzc2VydFVpbnQ4QXJyYXkoYTUpOwogIGFzc2VydFVpbnQ4QXJyYXkoYjUpOwogIGlmIChhNSA9PT0gYjUpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBpZiAoYTUubGVuZ3RoICE9PSBiNS5sZW5ndGgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgZm9yIChsZXQgaW5kZXgyID0gMDsgaW5kZXgyIDwgYTUubGVuZ3RoOyBpbmRleDIrKykgewogICAgaWYgKGE1W2luZGV4Ml0gIT09IGI1W2luZGV4Ml0pIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICByZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiBjb21wYXJlVWludDhBcnJheXMoYTUsIGI1KSB7CiAgYXNzZXJ0VWludDhBcnJheShhNSk7CiAgYXNzZXJ0VWludDhBcnJheShiNSk7CiAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4oYTUubGVuZ3RoLCBiNS5sZW5ndGgpOwogIGZvciAobGV0IGluZGV4MiA9IDA7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyKyspIHsKICAgIGNvbnN0IGRpZmYgPSBhNVtpbmRleDJdIC0gYjVbaW5kZXgyXTsKICAgIGlmIChkaWZmICE9PSAwKSB7CiAgICAgIHJldHVybiBNYXRoLnNpZ24oZGlmZik7CiAgICB9CiAgfQogIHJldHVybiBNYXRoLnNpZ24oYTUubGVuZ3RoIC0gYjUubGVuZ3RoKTsKfQpmdW5jdGlvbiB1aW50OEFycmF5VG9TdHJpbmcoYXJyYXksIGVuY29kaW5nID0gInV0ZjgiKSB7CiAgYXNzZXJ0VWludDhBcnJheU9yQXJyYXlCdWZmZXIoYXJyYXkpOwogIGNhY2hlZERlY29kZXJzW2VuY29kaW5nXSA/Pz0gbmV3IGdsb2JhbFRoaXMuVGV4dERlY29kZXIoZW5jb2RpbmcpOwogIHJldHVybiBjYWNoZWREZWNvZGVyc1tlbmNvZGluZ10uZGVjb2RlKGFycmF5KTsKfQpmdW5jdGlvbiBhc3NlcnRTdHJpbmcodmFsdWUyKSB7CiAgaWYgKHR5cGVvZiB2YWx1ZTIgIT09ICJzdHJpbmciKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcYHN0cmluZ1xgLCBnb3QgXGAke3R5cGVvZiB2YWx1ZTJ9XGBgKTsKICB9Cn0KZnVuY3Rpb24gc3RyaW5nVG9VaW50OEFycmF5KHN0cmluZzMpIHsKICBhc3NlcnRTdHJpbmcoc3RyaW5nMyk7CiAgcmV0dXJuIGNhY2hlZEVuY29kZXIuZW5jb2RlKHN0cmluZzMpOwp9CmZ1bmN0aW9uIGJhc2U2NFRvQmFzZTY0VXJsKGJhc2U2NDIpIHsKICByZXR1cm4gYmFzZTY0Mi5yZXBsYWNlQWxsKCIrIiwgIi0iKS5yZXBsYWNlQWxsKCIvIiwgIl8iKS5yZXBsYWNlKC89KyQvLCAiIik7Cn0KZnVuY3Rpb24gYmFzZTY0VXJsVG9CYXNlNjQoYmFzZTY0dXJsKSB7CiAgY29uc3QgYmFzZTY0MiA9IGJhc2U2NHVybC5yZXBsYWNlQWxsKCItIiwgIisiKS5yZXBsYWNlQWxsKCJfIiwgIi8iKTsKICBjb25zdCBwYWRkaW5nID0gKDQgLSBiYXNlNjQyLmxlbmd0aCAlIDQpICUgNDsKICByZXR1cm4gYmFzZTY0MiArICI9Ii5yZXBlYXQocGFkZGluZyk7Cn0KZnVuY3Rpb24gdWludDhBcnJheVRvQmFzZTY0KGFycmF5LCB7IHVybFNhZmUgPSBmYWxzZSB9ID0ge30pIHsKICBhc3NlcnRVaW50OEFycmF5KGFycmF5KTsKICBsZXQgYmFzZTY0MiA9ICIiOwogIGZvciAobGV0IGluZGV4MiA9IDA7IGluZGV4MiA8IGFycmF5Lmxlbmd0aDsgaW5kZXgyICs9IE1BWF9CTE9DS19TSVpFKSB7CiAgICBjb25zdCBjaHVuayA9IGFycmF5LnN1YmFycmF5KGluZGV4MiwgaW5kZXgyICsgTUFYX0JMT0NLX1NJWkUpOwogICAgYmFzZTY0MiArPSBnbG9iYWxUaGlzLmJ0b2EoU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkodm9pZCAwLCBjaHVuaykpOwogIH0KICByZXR1cm4gdXJsU2FmZSA/IGJhc2U2NFRvQmFzZTY0VXJsKGJhc2U2NDIpIDogYmFzZTY0MjsKfQpmdW5jdGlvbiBiYXNlNjRUb1VpbnQ4QXJyYXkoYmFzZTY0U3RyaW5nKSB7CiAgYXNzZXJ0U3RyaW5nKGJhc2U2NFN0cmluZyk7CiAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShnbG9iYWxUaGlzLmF0b2IoYmFzZTY0VXJsVG9CYXNlNjQoYmFzZTY0U3RyaW5nKSksICh4MykgPT4geDMuY29kZVBvaW50QXQoMCkpOwp9CmZ1bmN0aW9uIHN0cmluZ1RvQmFzZTY0KHN0cmluZzMsIHsgdXJsU2FmZSA9IGZhbHNlIH0gPSB7fSkgewogIGFzc2VydFN0cmluZyhzdHJpbmczKTsKICByZXR1cm4gdWludDhBcnJheVRvQmFzZTY0KHN0cmluZ1RvVWludDhBcnJheShzdHJpbmczKSwgeyB1cmxTYWZlIH0pOwp9CmZ1bmN0aW9uIGJhc2U2NFRvU3RyaW5nKGJhc2U2NFN0cmluZykgewogIGFzc2VydFN0cmluZyhiYXNlNjRTdHJpbmcpOwogIHJldHVybiB1aW50OEFycmF5VG9TdHJpbmcoYmFzZTY0VG9VaW50OEFycmF5KGJhc2U2NFN0cmluZykpOwp9CmZ1bmN0aW9uIHVpbnQ4QXJyYXlUb0hleChhcnJheSkgewogIGFzc2VydFVpbnQ4QXJyYXkoYXJyYXkpOwogIGxldCBoZXhTdHJpbmcgPSAiIjsKICBmb3IgKGxldCBpbmRleDIgPSAwOyBpbmRleDIgPCBhcnJheS5sZW5ndGg7IGluZGV4MisrKSB7CiAgICBoZXhTdHJpbmcgKz0gYnl0ZVRvSGV4TG9va3VwVGFibGVbYXJyYXlbaW5kZXgyXV07CiAgfQogIHJldHVybiBoZXhTdHJpbmc7Cn0KZnVuY3Rpb24gaGV4VG9VaW50OEFycmF5KGhleFN0cmluZykgewogIGFzc2VydFN0cmluZyhoZXhTdHJpbmcpOwogIGlmIChoZXhTdHJpbmcubGVuZ3RoICUgMiAhPT0gMCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhleCBzdHJpbmcgbGVuZ3RoLiIpOwogIH0KICBjb25zdCByZXN1bHRMZW5ndGggPSBoZXhTdHJpbmcubGVuZ3RoIC8gMjsKICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KHJlc3VsdExlbmd0aCk7CiAgZm9yIChsZXQgaW5kZXgyID0gMDsgaW5kZXgyIDwgcmVzdWx0TGVuZ3RoOyBpbmRleDIrKykgewogICAgY29uc3QgaGlnaE5pYmJsZSA9IGhleFRvRGVjaW1hbExvb2t1cFRhYmxlW2hleFN0cmluZ1tpbmRleDIgKiAyXV07CiAgICBjb25zdCBsb3dOaWJibGUgPSBoZXhUb0RlY2ltYWxMb29rdXBUYWJsZVtoZXhTdHJpbmdbaW5kZXgyICogMiArIDFdXTsKICAgIGlmIChoaWdoTmliYmxlID09PSB2b2lkIDAgfHwgbG93TmliYmxlID09PSB2b2lkIDApIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEhleCBjaGFyYWN0ZXIgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gJHtpbmRleDIgKiAyfWApOwogICAgfQogICAgYnl0ZXNbaW5kZXgyXSA9IGhpZ2hOaWJibGUgPDwgNCB8IGxvd05pYmJsZTsKICB9CiAgcmV0dXJuIGJ5dGVzOwp9CmZ1bmN0aW9uIGdldFVpbnRCRSh2aWV3KSB7CiAgY29uc3QgeyBieXRlTGVuZ3RoIH0gPSB2aWV3OwogIGlmIChieXRlTGVuZ3RoID09PSA2KSB7CiAgICByZXR1cm4gdmlldy5nZXRVaW50MTYoMCkgKiAyICoqIDMyICsgdmlldy5nZXRVaW50MzIoMik7CiAgfQogIGlmIChieXRlTGVuZ3RoID09PSA1KSB7CiAgICByZXR1cm4gdmlldy5nZXRVaW50OCgwKSAqIDIgKiogMzIgKyB2aWV3LmdldFVpbnQzMigxKTsKICB9CiAgaWYgKGJ5dGVMZW5ndGggPT09IDQpIHsKICAgIHJldHVybiB2aWV3LmdldFVpbnQzMigwKTsKICB9CiAgaWYgKGJ5dGVMZW5ndGggPT09IDMpIHsKICAgIHJldHVybiB2aWV3LmdldFVpbnQ4KDApICogMiAqKiAxNiArIHZpZXcuZ2V0VWludDE2KDEpOwogIH0KICBpZiAoYnl0ZUxlbmd0aCA9PT0gMikgewogICAgcmV0dXJuIHZpZXcuZ2V0VWludDE2KDApOwogIH0KICBpZiAoYnl0ZUxlbmd0aCA9PT0gMSkgewogICAgcmV0dXJuIHZpZXcuZ2V0VWludDgoMCk7CiAgfQp9CmZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlMikgewogIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoOwogIGNvbnN0IHZhbHVlTGVuZ3RoID0gdmFsdWUyLmxlbmd0aDsKICBpZiAodmFsdWVMZW5ndGggPT09IDApIHsKICAgIHJldHVybiAtMTsKICB9CiAgaWYgKHZhbHVlTGVuZ3RoID4gYXJyYXlMZW5ndGgpIHsKICAgIHJldHVybiAtMTsKICB9CiAgY29uc3QgdmFsaWRPZmZzZXRMZW5ndGggPSBhcnJheUxlbmd0aCAtIHZhbHVlTGVuZ3RoOwogIGZvciAobGV0IGluZGV4MiA9IDA7IGluZGV4MiA8PSB2YWxpZE9mZnNldExlbmd0aDsgaW5kZXgyKyspIHsKICAgIGxldCBpc01hdGNoMyA9IHRydWU7CiAgICBmb3IgKGxldCBpbmRleDIyID0gMDsgaW5kZXgyMiA8IHZhbHVlTGVuZ3RoOyBpbmRleDIyKyspIHsKICAgICAgaWYgKGFycmF5W2luZGV4MiArIGluZGV4MjJdICE9PSB2YWx1ZTJbaW5kZXgyMl0pIHsKICAgICAgICBpc01hdGNoMyA9IGZhbHNlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAoaXNNYXRjaDMpIHsKICAgICAgcmV0dXJuIGluZGV4MjsKICAgIH0KICB9CiAgcmV0dXJuIC0xOwp9CmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCB2YWx1ZTIpIHsKICByZXR1cm4gaW5kZXhPZihhcnJheSwgdmFsdWUyKSAhPT0gLTE7Cn0KdmFyIG9iamVjdFRvU3RyaW5nLCB1aW50OEFycmF5U3RyaW5naWZpZWQsIGFycmF5QnVmZmVyU3RyaW5naWZpZWQsIGNhY2hlZERlY29kZXJzLCBjYWNoZWRFbmNvZGVyLCBNQVhfQkxPQ0tfU0laRSwgYnl0ZVRvSGV4TG9va3VwVGFibGUsIGhleFRvRGVjaW1hbExvb2t1cFRhYmxlOwp2YXIgaW5pdF91aW50OGFycmF5X2V4dHJhcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VpbnQ4YXJyYXktZXh0cmFzQDEuNS4wL25vZGVfbW9kdWxlcy91aW50OGFycmF5LWV4dHJhcy9pbmRleC5qcyIoKSB7CiAgICBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CiAgICB1aW50OEFycmF5U3RyaW5naWZpZWQgPSAiW29iamVjdCBVaW50OEFycmF5XSI7CiAgICBhcnJheUJ1ZmZlclN0cmluZ2lmaWVkID0gIltvYmplY3QgQXJyYXlCdWZmZXJdIjsKICAgIGNhY2hlZERlY29kZXJzID0gewogICAgICB1dGY4OiBuZXcgZ2xvYmFsVGhpcy5UZXh0RGVjb2RlcigidXRmOCIpCiAgICB9OwogICAgY2FjaGVkRW5jb2RlciA9IG5ldyBnbG9iYWxUaGlzLlRleHRFbmNvZGVyKCk7CiAgICBNQVhfQkxPQ0tfU0laRSA9IDY1NTM1OwogICAgYnl0ZVRvSGV4TG9va3VwVGFibGUgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNTYgfSwgKF80LCBpbmRleDIpID0+IGluZGV4Mi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgIjAiKSk7CiAgICBoZXhUb0RlY2ltYWxMb29rdXBUYWJsZSA9IHsKICAgICAgMDogMCwKICAgICAgMTogMSwKICAgICAgMjogMiwKICAgICAgMzogMywKICAgICAgNDogNCwKICAgICAgNTogNSwKICAgICAgNjogNiwKICAgICAgNzogNywKICAgICAgODogOCwKICAgICAgOTogOSwKICAgICAgYTogMTAsCiAgICAgIGI6IDExLAogICAgICBjOiAxMiwKICAgICAgZDogMTMsCiAgICAgIGU6IDE0LAogICAgICBmOiAxNSwKICAgICAgQTogMTAsCiAgICAgIEI6IDExLAogICAgICBDOiAxMiwKICAgICAgRDogMTMsCiAgICAgIEU6IDE0LAogICAgICBGOiAxNQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0YnVmZmVyQDMuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGJ1ZmZlci9kaXN0X3RzL3NtYXJ0YnVmZmVyLnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRidWZmZXJfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0YnVmZmVyQDMuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGJ1ZmZlci9kaXN0X3RzL3NtYXJ0YnVmZmVyLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF91aW50OGFycmF5X2V4dHJhcygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRidWZmZXJAMy4wLjUvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0YnVmZmVyL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czggPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzOCwgewogIGJhc2U2NFRvVWludDhBcnJheTogKCkgPT4gYmFzZTY0VG9VaW50OEFycmF5MiwKICBlbnN1cmVQdXJlVWludDhBcnJheTogKCkgPT4gZW5zdXJlUHVyZVVpbnQ4QXJyYXksCiAgaXNCdWZmZXJMaWtlOiAoKSA9PiBpc0J1ZmZlckxpa2UsCiAgaXNVaW50OEFycmF5OiAoKSA9PiBpc1VpbnQ4QXJyYXkyLAogIHVJbnQ4QXJyYXlFeHRyYXM6ICgpID0+IHVJbnQ4QXJyYXlFeHRyYXMsCiAgdUludDhBcnJheVRvQmFzZTY0OiAoKSA9PiB1SW50OEFycmF5VG9CYXNlNjQKfSk7CmZ1bmN0aW9uIHVJbnQ4QXJyYXlUb0Jhc2U2NCh1SW50OEFycmF5KSB7CiAgcmV0dXJuIHVpbnQ4YXJyYXlfZXh0cmFzX2V4cG9ydHMudWludDhBcnJheVRvQmFzZTY0KHVJbnQ4QXJyYXkpOwp9CmZ1bmN0aW9uIGJhc2U2NFRvVWludDhBcnJheTIoYmFzZTY0MikgewogIHJldHVybiB1aW50OGFycmF5X2V4dHJhc19leHBvcnRzLmJhc2U2NFRvVWludDhBcnJheShiYXNlNjQyKTsKfQpmdW5jdGlvbiBpc0J1ZmZlckxpa2Uob2JqKSB7CiAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqLmJ5dGVMZW5ndGggPT09ICJudW1iZXIiKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICJ1bmRlZmluZWQiICYmIEJ1ZmZlci5pc0J1ZmZlcikgewogICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gZW5zdXJlUHVyZVVpbnQ4QXJyYXkoYnVmZmVyQXJnKSB7CiAgY29uc3QgdWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlckFyZy5sZW5ndGgpOwogIHVpbnQ4QXJyYXkuc2V0KGJ1ZmZlckFyZyk7CiAgcmV0dXJuIHVpbnQ4QXJyYXk7Cn0KdmFyIHVJbnQ4QXJyYXlFeHRyYXMsIGlzVWludDhBcnJheTI7CnZhciBpbml0X2Rpc3RfdHM4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRidWZmZXJAMy4wLjUvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0YnVmZmVyL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydGJ1ZmZlcl9wbHVnaW5zKCk7CiAgICB1SW50OEFycmF5RXh0cmFzID0gdWludDhhcnJheV9leHRyYXNfZXhwb3J0czsKICAgIGlzVWludDhBcnJheTIgPSAob2JqKSA9PiB7CiAgICAgIHJldHVybiB1aW50OGFycmF5X2V4dHJhc19leHBvcnRzLmlzVWludDhBcnJheShvYmopOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9zbWFydGd1YXJkLnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRndWFyZF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC9kaXN0X3RzL3NtYXJ0Z3VhcmQucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9jbGFzc2VzLmd1YXJkLmpzCnZhciBHdWFyZDsKdmFyIGluaXRfY2xhc3Nlc19ndWFyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9jbGFzc2VzLmd1YXJkLmpzIigpIHsKICAgIGluaXRfc21hcnRndWFyZF9wbHVnaW5zKCk7CiAgICBHdWFyZCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoZ3VhcmRGdW5jdGlvbkFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHRoaXMuZ3VhcmRGdW5jdGlvbiA9IGd1YXJkRnVuY3Rpb25Bcmc7CiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZzsKICAgICAgfQogICAgICAvKioKICAgICAgICogZXhlY3V0ZXMgdGhlIGd1YXJkIGFnYWluc3QgYSBkYXRhIGFyZ3VtZW50OwogICAgICAgKiBAcGFyYW0gZGF0YUFyZwogICAgICAgKi8KICAgICAgYXN5bmMgZXhlYyhkYXRhQXJnKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ndWFyZEZ1bmN0aW9uKGRhdGFBcmcpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgYXN5bmMgZ2V0RmFpbGVkSGludChkYXRhQXJnKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjKGRhdGFBcmcpOwogICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZhaWxlZEhpbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9jbGFzc2VzLmd1YXJkZXJyb3IuanMKdmFyIEd1YXJkRXJyb3I7CnZhciBpbml0X2NsYXNzZXNfZ3VhcmRlcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9jbGFzc2VzLmd1YXJkZXJyb3IuanMiKCkgewogICAgaW5pdF9zbWFydGd1YXJkX3BsdWdpbnMoKTsKICAgIEd1YXJkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICAgICAgY29uc3RydWN0b3IobWVzc2FnZTIpIHsKICAgICAgICBzdXBlcihtZXNzYWdlMik7CiAgICAgICAgdGhpcy5uYW1lID0gIkd1YXJkRXJyb3IiOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC9kaXN0X3RzL2NsYXNzZXMuZ3VhcmRzZXQuanMKdmFyIEd1YXJkU2V0Owp2YXIgaW5pdF9jbGFzc2VzX2d1YXJkc2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC9kaXN0X3RzL2NsYXNzZXMuZ3VhcmRzZXQuanMiKCkgewogICAgaW5pdF9zbWFydGd1YXJkX3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc19ndWFyZCgpOwogICAgR3VhcmRTZXQgPSBjbGFzcyBleHRlbmRzIEd1YXJkIHsKICAgICAgY29uc3RydWN0b3IoZ3VhcmRBcnJheSA9IFtdKSB7CiAgICAgICAgc3VwZXIoYXN5bmMgKGRhdGFBcmcpID0+IHsKICAgICAgICAgIHJldHVybiB0aGlzLmFsbEd1YXJkc1Bhc3MoZGF0YUFyZyk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5ndWFyZHMgPSBndWFyZEFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBleGVjdXRlcyBhbGwgZ3VhcmRzIGluIGFsbCBndWFyZFNldHMgYWdhaW5zdCBhIGRhdGEgYXJndW1lbnQKICAgICAgICogQHBhcmFtIGRhdGFBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGV4ZWNBbGxXaXRoRGF0YShkYXRhQXJnLCBvcHRpb25zQXJnID0gewogICAgICAgIG1vZGU6ICJwYXJhbGxlbCIsCiAgICAgICAgc3RvcE9uRmFpbDogZmFsc2UKICAgICAgfSkgewogICAgICAgIGNvbnN0IHJlc3VsdFByb21pc2VzID0gW107CiAgICAgICAgZm9yIChjb25zdCBndWFyZCBvZiB0aGlzLmd1YXJkcykgewogICAgICAgICAgY29uc3QgZ3VhcmRSZXN1bHRQcm9taXNlID0gZ3VhcmQuZXhlYyhkYXRhQXJnKTsKICAgICAgICAgIGlmIChvcHRpb25zQXJnLm1vZGUgPT09ICJzZXJpYWwiKSB7CiAgICAgICAgICAgIGF3YWl0IGd1YXJkUmVzdWx0UHJvbWlzZTsKICAgICAgICAgIH0KICAgICAgICAgIHJlc3VsdFByb21pc2VzLnB1c2goZ3VhcmRSZXN1bHRQcm9taXNlKTsKICAgICAgICAgIGlmIChvcHRpb25zQXJnLnN0b3BPbkZhaWwpIHsKICAgICAgICAgICAgaWYgKCFhd2FpdCBndWFyZFJlc3VsdFByb21pc2UpIHsKICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwocmVzdWx0UHJvbWlzZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChyZXN1bHRQcm9taXNlcyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrcyBpZiBhbGwgZ3VhcmRzIHBhc3MKICAgICAgICogQHBhcmFtIGRhdGFBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGFsbEd1YXJkc1Bhc3MoZGF0YUFyZywgb3B0aW9uc0FyZyA9IHsKICAgICAgICBtb2RlOiAicGFyYWxsZWwiLAogICAgICAgIHN0b3BPbkZhaWw6IGZhbHNlCiAgICAgIH0pIHsKICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5leGVjQWxsV2l0aERhdGEoZGF0YUFyZywgb3B0aW9uc0FyZyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZXZlcnkoKHJlc3VsdCkgPT4gcmVzdWx0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIGlmIGFueSBndWFyZCBwYXNzZXMKICAgICAgICogQHBhcmFtIGRhdGFBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGFueUd1YXJkc1Bhc3MoZGF0YUFyZykgewogICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmV4ZWNBbGxXaXRoRGF0YShkYXRhQXJnLCB7CiAgICAgICAgICBtb2RlOiAicGFyYWxsZWwiLAogICAgICAgICAgc3RvcE9uRmFpbDogZmFsc2UKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gcmVzdWx0cy5zb21lKChyZXN1bHQpID0+IHJlc3VsdCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgdGhlIGZpcnN0IHJlYXNvbiBmb3Igd2h5IHNvbWV0aGluZyBmYWlscwogICAgICAgKiBAcGFyYW0gZGF0YUFyZwogICAgICAgKiBAcmV0dXJucwogICAgICAgKi8KICAgICAgZ2V0RmFpbGVkSGludChkYXRhQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBndWFyZCBvZiB0aGlzLmd1YXJkcykgewogICAgICAgICAgY29uc3QgZmFpbGVkSGludCA9IGd1YXJkLmdldEZhaWxlZEhpbnQoZGF0YUFyZyk7CiAgICAgICAgICBpZiAoZmFpbGVkSGludCkgewogICAgICAgICAgICByZXR1cm4gZmFpbGVkSGludDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGd1YXJkQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGd1YXJkL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czkgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzOSwgewogIEd1YXJkOiAoKSA9PiBHdWFyZCwKICBHdWFyZEVycm9yOiAoKSA9PiBHdWFyZEVycm9yLAogIEd1YXJkU2V0OiAoKSA9PiBHdWFyZFNldCwKICBwYXNzR3VhcmRzT3JSZWplY3Q6ICgpID0+IHBhc3NHdWFyZHNPclJlamVjdAp9KTsKdmFyIHBhc3NHdWFyZHNPclJlamVjdDsKdmFyIGluaXRfZGlzdF90czkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGd1YXJkQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGd1YXJkL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydGd1YXJkX3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc19ndWFyZCgpOwogICAgaW5pdF9jbGFzc2VzX2d1YXJkZXJyb3IoKTsKICAgIGluaXRfY2xhc3Nlc19ndWFyZCgpOwogICAgaW5pdF9jbGFzc2VzX2d1YXJkc2V0KCk7CiAgICBpbml0X2NsYXNzZXNfZ3VhcmRzZXQoKTsKICAgIGluaXRfY2xhc3Nlc19ndWFyZGVycm9yKCk7CiAgICBwYXNzR3VhcmRzT3JSZWplY3QgPSBhc3luYyAoZGF0YUFyZywgZ3VhcmRzKSA9PiB7CiAgICAgIGNvbnN0IGd1YXJkU2V0ID0gbmV3IEd1YXJkU2V0KGd1YXJkcyk7CiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGd1YXJkU2V0LmFsbEd1YXJkc1Bhc3MoZGF0YUFyZyk7CiAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgY29uc3QgZmFpbGVkSGludCA9IGF3YWl0IGd1YXJkU2V0LmdldEZhaWxlZEhpbnQoZGF0YUFyZyk7CiAgICAgICAgdGhyb3cgbmV3IEd1YXJkRXJyb3IoYEd1YXJkcyBmYWlsZWQ6CiR7ZmFpbGVkSGludH0KICAgIGApOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGVudkA1LjAuMTMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0ZW52L2Rpc3RfdHMvc21hcnRlbnYucGx1Z2lucy5qcwp2YXIgaW5pdF9zbWFydGVudl9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL3NtYXJ0ZW52LnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGVudkA1LjAuMTMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0ZW52L2Rpc3RfdHMvaW50ZXJmYWNlcy9pbmRleC5qcwp2YXIgaW5pdF9pbnRlcmZhY2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL2ludGVyZmFjZXMvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL3NtYXJ0ZW52LmNsYXNzZXMuc21hcnRlbnYuanMKdmFyIFNtYXJ0ZW52Owp2YXIgaW5pdF9zbWFydGVudl9jbGFzc2VzX3NtYXJ0ZW52ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL3NtYXJ0ZW52LmNsYXNzZXMuc21hcnRlbnYuanMiKCkgewogICAgaW5pdF9zbWFydGVudl9wbHVnaW5zKCk7CiAgICBpbml0X2ludGVyZmFjZXMoKTsKICAgIFNtYXJ0ZW52ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmxvYWRlZFNjcmlwdHMgPSBbXTsKICAgICAgfQogICAgICBhc3luYyBnZXRFbnZBd2FyZU1vZHVsZShvcHRpb25zQXJnKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgICAgICBjb25zdCBtb2R1bGVSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFNhZmVOb2RlTW9kdWxlKG9wdGlvbnNBcmcubm9kZU1vZHVsZU5hbWUpOwogICAgICAgICAgcmV0dXJuIG1vZHVsZVJlc3VsdDsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNCcm93c2VyKSB7CiAgICAgICAgICBjb25zdCBtb2R1bGVSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFNhZmVXZWJNb2R1bGUob3B0aW9uc0FyZy53ZWJVcmxBcmcsIG9wdGlvbnNBcmcuZ2V0RnVuY3Rpb24pOwogICAgICAgICAgcmV0dXJuIG1vZHVsZVJlc3VsdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc29sZS5lcnJvcigicGxhdGZvcm0gZm9yIGxvYWRpbmcgbm90IHN1cHBvcnRlZCBieSBzbWFydGVudiIpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBnZXRTYWZlTm9kZU1vZHVsZShtb2R1bGVOYW1lQXJnLCBydW5BZnRlckZ1bmMpIHsKICAgICAgICBpZiAoIXRoaXMuaXNOb2RlKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKGBZb3UgdHJpZWQgdG8gbG9hZCBhIG5vZGUgbW9kdWxlIGluIGEgd3JvbmcgY29udGV4dDogJHttb2R1bGVOYW1lQXJnfS4gVGhpcyBkb2VzIG5vdCB0aHJvdy5gKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBhd2FpdCBuZXcgRnVuY3Rpb24oYHJldHVybiBpbXBvcnQoJyR7bW9kdWxlTmFtZUFyZ30nKWApKCk7CiAgICAgICAgaWYgKHJ1bkFmdGVyRnVuYykgewogICAgICAgICAgYXdhaXQgcnVuQWZ0ZXJGdW5jKHJldHVyblZhbHVlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgICB9CiAgICAgIGFzeW5jIGdldFNhZmVXZWJNb2R1bGUodXJsQXJnLCBnZXRGdW5jdGlvbkFyZykgewogICAgICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIllvdSB0cmllZCB0byBsb2FkIGEgd2ViIG1vZHVsZSBpbiBhIHdyb25nIGNvbnRleHQiKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMubG9hZGVkU2NyaXB0cy5pbmNsdWRlcyh1cmxBcmcpKSB7CiAgICAgICAgICByZXR1cm4gZ2V0RnVuY3Rpb25BcmcoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5sb2FkZWRTY3JpcHRzLnB1c2godXJsQXJnKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgZG9uZSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIGlmIChnbG9iYWxUaGlzLmltcG9ydFNjcmlwdHMpIHsKICAgICAgICAgIGdsb2JhbFRoaXMuaW1wb3J0U2NyaXB0cyh1cmxBcmcpOwogICAgICAgICAgZG9uZS5yZXNvbHZlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwogICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHsKICAgICAgICAgICAgZG9uZS5yZXNvbHZlKCk7CiAgICAgICAgICB9OwogICAgICAgICAgc2NyaXB0LnNyYyA9IHVybEFyZzsKICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgZG9uZS5wcm9taXNlOwogICAgICAgIHJldHVybiBnZXRGdW5jdGlvbkFyZygpOwogICAgICB9CiAgICAgIGdldCBydW50aW1lRW52KCkgewogICAgICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiAibm9kZSI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiAiYnJvd3NlciI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldCBpc0Jyb3dzZXIoKSB7CiAgICAgICAgcmV0dXJuICF0aGlzLmlzTm9kZTsKICAgICAgfQogICAgICBnZXQgdXNlckFnZW50KCkgewogICAgICAgIGlmICh0aGlzLmlzQnJvd3NlcikgewogICAgICAgICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiAidW5kZWZpbmVkIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgZ2V0IGlzTm9kZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5ydW50aW1lRW52ID09PSAibm9kZSI7CiAgICAgIH0KICAgICAgZ2V0IG5vZGVWZXJzaW9uKCkgewogICAgICAgIHJldHVybiBwcm9jZXNzLnZlcnNpb247CiAgICAgIH0KICAgICAgZ2V0IGlzQ0koKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuQ0kpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgaXNNYWNBc3luYygpIHsKICAgICAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgICAgIGNvbnN0IG9zID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKTsKICAgICAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAiZGFyd2luIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBpc1dpbmRvd3NBc3luYygpIHsKICAgICAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgICAgIGNvbnN0IG9zID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKTsKICAgICAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAid2luMzIiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzeW5jIGlzTGludXhBc3luYygpIHsKICAgICAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgICAgIGNvbnN0IG9zID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKTsKICAgICAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAibGludXgiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBwcmludHMgdGhlIGVudmlyb25tZW50IHRvIGNvbnNvbGUKICAgICAgICovCiAgICAgIGFzeW5jIHByaW50RW52KCkgewogICAgICAgIGlmICh0aGlzLmlzTm9kZSkgewogICAgICAgICAgY29uc29sZS5sb2coInJ1bm5pbmcgb24gTk9ERSIpOwogICAgICAgICAgY29uc29sZS5sb2coIm5vZGUgdmVyc2lvbiBpcyAiICsgdGhpcy5ub2RlVmVyc2lvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJydW5uaW5nIG9uIEJST1dTRVIiKTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJicm93c2VyIGlzICIgKyB0aGlzLnVzZXJBZ2VudCk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMxMCA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMxMCwgewogIFNtYXJ0ZW52OiAoKSA9PiBTbWFydGVudgp9KTsKdmFyIGluaXRfZGlzdF90czEwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRlbnZfY2xhc3Nlc19zbWFydGVudigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcucGx1Z2lucy5qcwp2YXIgaXNvdW5pcXVlOwp2YXIgaW5pdF9zbWFydHN0cmluZ19wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcucGx1Z2lucy5qcyIoKSB7CiAgICBpc291bmlxdWUgPSBfX3RvRVNNKHJlcXVpcmVfZGlzdF90cygpLCAxKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmNyZWF0ZS5qcwp2YXIgc21hcnRzdHJpbmdfY3JlYXRlX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoc21hcnRzdHJpbmdfY3JlYXRlX2V4cG9ydHMsIHsKICBjcmVhdGVDcnlwdG9SYW5kb21TdHJpbmc6ICgpID0+IGNyZWF0ZUNyeXB0b1JhbmRvbVN0cmluZywKICBjcmVhdGVSYW5kb21TdHJpbmc6ICgpID0+IGNyZWF0ZVJhbmRvbVN0cmluZwp9KTsKdmFyIGdldFJhbmRvbUludCwgY3VzdG9tUmFuZG9tYXRpYywgY3JlYXRlUmFuZG9tU3RyaW5nLCBjcmVhdGVDcnlwdG9SYW5kb21TdHJpbmc7CnZhciBpbml0X3NtYXJ0c3RyaW5nX2NyZWF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmNyZWF0ZS5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIGdldFJhbmRvbUludCA9IChtaW4zLCBtYXgzKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gInVuZGVmaW5lZCIgJiYgZ2xvYmFsVGhpcy5jcnlwdG8gJiYgZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7CiAgICAgICAgY29uc3QgcmFuZ2UyID0gbWF4MyAtIG1pbjM7CiAgICAgICAgY29uc3QgYXJyYXkgPSBuZXcgVWludDMyQXJyYXkoMSk7CiAgICAgICAgZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycmF5KTsKICAgICAgICByZXR1cm4gbWluMyArIGFycmF5WzBdICUgcmFuZ2UyOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4MyAtIG1pbjMpKSArIG1pbjM7CiAgICAgIH0KICAgIH07CiAgICBjdXN0b21SYW5kb21hdGljID0gKHBhdHRlcm4sIGxlbmd0aCwgb3B0aW9ucykgPT4gewogICAgICBjb25zdCBjaGFyU2V0cyA9IHsKICAgICAgICAiQSI6ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIsCiAgICAgICAgImEiOiAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLAogICAgICAgICIwIjogIjAxMjM0NTY3ODkiLAogICAgICAgICIhIjogIiFAIyQlXiYqKClfKy09W117fXw7OiwuPD4/IiwKICAgICAgICAiKiI6ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSFAIyQlXiYqKClfKy09W117fXw7OiwuPD4/IgogICAgICB9OwogICAgICBsZXQgYWN0dWFsUGF0dGVybiA9IHBhdHRlcm47CiAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoID4gcGF0dGVybi5sZW5ndGgpIHsKICAgICAgICBhY3R1YWxQYXR0ZXJuID0gcGF0dGVybi5yZXBlYXQoTWF0aC5jZWlsKGxlbmd0aCAvIHBhdHRlcm4ubGVuZ3RoKSkuc2xpY2UoMCwgbGVuZ3RoKTsKICAgICAgfSBlbHNlIGlmIChsZW5ndGgpIHsKICAgICAgICBhY3R1YWxQYXR0ZXJuID0gcGF0dGVybi5zbGljZSgwLCBsZW5ndGgpOwogICAgICB9CiAgICAgIGxldCByZXN1bHQgPSAiIjsKICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGFjdHVhbFBhdHRlcm4pIHsKICAgICAgICBpZiAoY2hhclNldHNbY2hhcl0pIHsKICAgICAgICAgIGNvbnN0IGNoYXJTZXQgPSBjaGFyU2V0c1tjaGFyXTsKICAgICAgICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gZ2V0UmFuZG9tSW50KDAsIGNoYXJTZXQubGVuZ3RoKTsKICAgICAgICAgIHJlc3VsdCArPSBjaGFyU2V0W3JhbmRvbUluZGV4XTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzdWx0ICs9IGNoYXI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwogICAgY3JlYXRlUmFuZG9tU3RyaW5nID0gKHBhdHRlcm5BcmcsIGxlbmd0aEFyZywgb3B0aW9uc0FyZykgPT4gewogICAgICByZXR1cm4gY3VzdG9tUmFuZG9tYXRpYyhwYXR0ZXJuQXJnLCBsZW5ndGhBcmcsIG9wdGlvbnNBcmcpOwogICAgfTsKICAgIGNyZWF0ZUNyeXB0b1JhbmRvbVN0cmluZyA9ICgpID0+IHsKICAgICAgcmV0dXJuIGlzb3VuaXF1ZS51bmkoKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5kb2NrZXIuanMKdmFyIHNtYXJ0c3RyaW5nX2RvY2tlcl9leHBvcnRzID0ge307Cl9fZXhwb3J0KHNtYXJ0c3RyaW5nX2RvY2tlcl9leHBvcnRzLCB7CiAgbWFrZUVudk9iamVjdDogKCkgPT4gbWFrZUVudk9iamVjdAp9KTsKdmFyIG1ha2VFbnZPYmplY3Q7CnZhciBpbml0X3NtYXJ0c3RyaW5nX2RvY2tlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmRvY2tlci5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIG1ha2VFbnZPYmplY3QgPSBmdW5jdGlvbihlbnZBcnJheUFyZykgewogICAgICBsZXQgcmV0dXJuT2JqZWN0ID0ge307CiAgICAgIGxldCByZWdleFN0cmluZyA9IC8oLiopPSguKikvOwogICAgICBpZiAodHlwZW9mIGVudkFycmF5QXJnICE9PSAidW5kZWZpbmVkIikgewogICAgICAgIGZvciAobGV0IGVudktleSBpbiBlbnZBcnJheUFyZykgewogICAgICAgICAgbGV0IHJlZ2V4TWF0Y2hlcyA9IHJlZ2V4U3RyaW5nLmV4ZWMoZW52QXJyYXlBcmdbZW52S2V5XSk7CiAgICAgICAgICByZXR1cm5PYmplY3RbcmVnZXhNYXRjaGVzWzFdXSA9IHJlZ2V4TWF0Y2hlc1syXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJldHVybk9iamVjdDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5pbmRlbnQuanMKdmFyIHNtYXJ0c3RyaW5nX2luZGVudF9leHBvcnRzID0ge307Cl9fZXhwb3J0KHNtYXJ0c3RyaW5nX2luZGVudF9leHBvcnRzLCB7CiAgaW5kZW50OiAoKSA9PiBpbmRlbnQsCiAgaW5kZW50V2l0aFByZWZpeDogKCkgPT4gaW5kZW50V2l0aFByZWZpeCwKICBub3JtYWxpemU6ICgpID0+IG5vcm1hbGl6ZQp9KTsKdmFyIHNwbGl0U3RyaW5nQXRMaW5lQnJlYWssIGpvaW5TdHJpbmdXaXRoTGluZUJyZWFrcywgY2xlYW5TdHJpbmdBcnJheSwgaW5kZW50LCBpbmRlbnRXaXRoUHJlZml4LCBub3JtYWxpemU7CnZhciBpbml0X3NtYXJ0c3RyaW5nX2luZGVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmluZGVudC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIHNwbGl0U3RyaW5nQXRMaW5lQnJlYWsgPSAoc3RyaW5nQXJnKSA9PiB7CiAgICAgIGxldCByZXN1bHRBcnJheSA9IHN0cmluZ0FyZy5zcGxpdCgiXG4iKTsKICAgICAgcmV0dXJuIGNsZWFuU3RyaW5nQXJyYXkocmVzdWx0QXJyYXkpOwogICAgfTsKICAgIGpvaW5TdHJpbmdXaXRoTGluZUJyZWFrcyA9IChzdHJpbmdBcnJheUFyZykgPT4gewogICAgICBsZXQgcmVzdWx0U3RyaW5nID0gIiI7CiAgICAgIGZvciAobGV0IGxpbmUgb2Ygc3RyaW5nQXJyYXlBcmcpIHsKICAgICAgICByZXN1bHRTdHJpbmcgPSByZXN1bHRTdHJpbmcgKyBsaW5lICsgIlxuIjsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0U3RyaW5nOwogICAgfTsKICAgIGNsZWFuU3RyaW5nQXJyYXkgPSAoc3RyaW5nQXJyYXlBcmcpID0+IHsKICAgICAgbGV0IHRlc3RSZWdleCA9IC9eW1xzXSokLzsKICAgICAgaWYgKHRlc3RSZWdleC50ZXN0KHN0cmluZ0FycmF5QXJnWzBdKSkgewogICAgICAgIHN0cmluZ0FycmF5QXJnLnNoaWZ0KCk7CiAgICAgIH0KICAgICAgaWYgKHRlc3RSZWdleC50ZXN0KHN0cmluZ0FycmF5QXJnW3N0cmluZ0FycmF5QXJnLmxlbmd0aCAtIDFdKSkgewogICAgICAgIHN0cmluZ0FycmF5QXJnLnBvcCgpOwogICAgICB9CiAgICAgIHJldHVybiBzdHJpbmdBcnJheUFyZzsKICAgIH07CiAgICBpbmRlbnQgPSAoc3RyaW5nQXJnLCBzcGFjZUFtb3VudCkgPT4gewogICAgICBsZXQgbG9jYWxTdHJpbmdBcnJheSA9IHNwbGl0U3RyaW5nQXRMaW5lQnJlYWsoc3RyaW5nQXJnKTsKICAgICAgZm9yIChsZXQgc3RyaW5nQXJnMiBvZiBsb2NhbFN0cmluZ0FycmF5KSB7CiAgICAgICAgc3RyaW5nQXJnMiA9ICIgIi5yZXBlYXQoc3BhY2VBbW91bnQpICsgc3RyaW5nQXJnMjsKICAgICAgfQogICAgICBsZXQgcmVzdWx0U3RyaW5nID0gam9pblN0cmluZ1dpdGhMaW5lQnJlYWtzKGxvY2FsU3RyaW5nQXJyYXkpOwogICAgICByZXR1cm4gcmVzdWx0U3RyaW5nOwogICAgfTsKICAgIGluZGVudFdpdGhQcmVmaXggPSAoc3RyaW5nQXJnLCBwcmVmaXhBcmcpID0+IHsKICAgICAgbGV0IHJlc3VsdFN0cmluZzsKICAgICAgbGV0IHN0cmluZ0FycmF5ID0gc3BsaXRTdHJpbmdBdExpbmVCcmVhayhzdHJpbmdBcmcpOwogICAgICBsZXQgcmVzdWx0QXJyYXkgPSBbXTsKICAgICAgZm9yIChsZXQgc3RyaW5nSXRlbSBvZiBzdHJpbmdBcnJheSkgewogICAgICAgIHJlc3VsdEFycmF5LnB1c2gocHJlZml4QXJnICsgc3RyaW5nSXRlbSk7CiAgICAgIH0KICAgICAgcmVzdWx0U3RyaW5nID0gam9pblN0cmluZ1dpdGhMaW5lQnJlYWtzKHJlc3VsdEFycmF5KTsKICAgICAgcmV0dXJuIHJlc3VsdFN0cmluZzsKICAgIH07CiAgICBub3JtYWxpemUgPSAoc3RyaW5nQXJnKSA9PiB7CiAgICAgIGxldCByZXN1bHRTdHJpbmc7CiAgICAgIGxldCBzcGxpdFN0cmluZ0FycmF5ID0gc3BsaXRTdHJpbmdBdExpbmVCcmVhayhzdHJpbmdBcmcpOwogICAgICBsZXQgbWluQ29tbW9uTGVmdE9mZnNldDsKICAgICAgY29uc3QgZGVJbmRlbnRSZWdleCA9IC9eKFxzKikvOwogICAgICBjb25zdCBlbXB0eUxpbmVSZWdleCA9IC9eKFxzKikkLzsKICAgICAgZm9yIChsZXQgc3RyaW5nSXRlbSBvZiBzcGxpdFN0cmluZ0FycmF5KSB7CiAgICAgICAgbGV0IG9mZnNldFN0cmluZyA9IGRlSW5kZW50UmVnZXguZXhlYyhzdHJpbmdJdGVtKVsxXTsKICAgICAgICBpZiAoKHR5cGVvZiBtaW5Db21tb25MZWZ0T2Zmc2V0ID09PSAidW5kZWZpbmVkIiB8fCBvZmZzZXRTdHJpbmcubGVuZ3RoIDwgbWluQ29tbW9uTGVmdE9mZnNldCkgJiYgIWVtcHR5TGluZVJlZ2V4LnRlc3Qoc3RyaW5nSXRlbSkpIHsKICAgICAgICAgIG1pbkNvbW1vbkxlZnRPZmZzZXQgPSBvZmZzZXRTdHJpbmcubGVuZ3RoOwogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgcmVzdWx0U3BsaXRTdHJpbmdBcnJheSA9IFtdOwogICAgICBmb3IgKGxldCBzdHJpbmdJdGVtIG9mIHNwbGl0U3RyaW5nQXJyYXkpIHsKICAgICAgICByZXN1bHRTcGxpdFN0cmluZ0FycmF5LnB1c2goc3RyaW5nSXRlbS5zdWJzdHIobWluQ29tbW9uTGVmdE9mZnNldCkpOwogICAgICB9CiAgICAgIHJlc3VsdFN0cmluZyA9IGpvaW5TdHJpbmdXaXRoTGluZUJyZWFrcyhyZXN1bHRTcGxpdFN0cmluZ0FycmF5KTsKICAgICAgcmV0dXJuIHJlc3VsdFN0cmluZzsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5ub3JtYWxpemUuanMKdmFyIHNtYXJ0c3RyaW5nX25vcm1hbGl6ZV9leHBvcnRzID0ge307Cl9fZXhwb3J0KHNtYXJ0c3RyaW5nX25vcm1hbGl6ZV9leHBvcnRzLCB7CiAgcmVwbGFjZUFsbDogKCkgPT4gcmVwbGFjZUFsbCwKICBzdGFuZGFyZDogKCkgPT4gc3RhbmRhcmQKfSk7CnZhciByZXBsYWNlQWxsLCBzdHJpcEluZGVudCwgc3RhbmRhcmQ7CnZhciBpbml0X3NtYXJ0c3RyaW5nX25vcm1hbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLm5vcm1hbGl6ZS5qcyIoKSB7CiAgICByZXBsYWNlQWxsID0gKHN0cmluZ0FyZywgc2VhcmNoUGF0dGVybiwgcmVwbGFjZW1lbnRTdHJpbmcpID0+IHsKICAgICAgcmV0dXJuIHN0cmluZ0FyZy5yZXBsYWNlKG5ldyBSZWdFeHAoc2VhcmNoUGF0dGVybiwgImciKSwgcmVwbGFjZW1lbnRTdHJpbmcpOwogICAgfTsKICAgIHN0cmlwSW5kZW50ID0gKHN0cikgPT4gewogICAgICBjb25zdCBsaW5lcyA9IHN0ci5zcGxpdCgiXG4iKTsKICAgICAgbGV0IG1pbkluZGVudCA9IEluZmluaXR5OwogICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHsKICAgICAgICBpZiAobGluZS50cmltKCkubGVuZ3RoID4gMCkgewogICAgICAgICAgY29uc3QgbWF0Y2gyID0gbGluZS5tYXRjaCgvXihccyopLyk7CiAgICAgICAgICBpZiAobWF0Y2gyKSB7CiAgICAgICAgICAgIG1pbkluZGVudCA9IE1hdGgubWluKG1pbkluZGVudCwgbWF0Y2gyWzFdLmxlbmd0aCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChtaW5JbmRlbnQgPT09IEluZmluaXR5IHx8IG1pbkluZGVudCA9PT0gMCkgewogICAgICAgIHJldHVybiBzdHI7CiAgICAgIH0KICAgICAgcmV0dXJuIGxpbmVzLm1hcCgobGluZSkgPT4gewogICAgICAgIGlmIChsaW5lLmxlbmd0aCA+PSBtaW5JbmRlbnQpIHsKICAgICAgICAgIHJldHVybiBsaW5lLnNsaWNlKG1pbkluZGVudCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaW5lOwogICAgICB9KS5qb2luKCJcbiIpOwogICAgfTsKICAgIHN0YW5kYXJkID0gKHN0cmluZ0FyZywgb3B0aW9ucykgPT4gewogICAgICBsZXQgcmVzdWx0ID0gc3RyaW5nQXJnOwogICAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5zdHJpcEluZGVudCkgewogICAgICAgIHJlc3VsdCA9IHN0cmlwSW5kZW50KHJlc3VsdCk7CiAgICAgIH0KICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMubm9ybWFsaXplTmV3bGluZSkgewogICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9cclxuL2csICJcbiIpOwogICAgICB9CiAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnJlcGxhY2VUYWJzKSB7CiAgICAgICAgcmVzdWx0ID0gcmVwbGFjZUFsbChyZXN1bHQsICIJLyIsICIgIik7CiAgICAgIH0KICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuc3RyaXBMZWFkaW5nVHJhaWxpbmdFbXB0eUxpbmVzKSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL15ccypbXHJcbl0vZ20sICIiKS5yZXBsYWNlKC9ccypbXHJcbl0kL2dtLCAiIik7CiAgICAgIH0KICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuc3RyaXBBbGxFbXB0eUxpbmVzKSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL15ccypbXHJcbl0vZ20sICIiKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmJhc2U2NC5qcwp2YXIgdW5pdmVyc2FsQmFzZTY0LCBCYXNlNjQsIGJhc2U2NDsKdmFyIGluaXRfc21hcnRzdHJpbmdfYmFzZTY0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcuYmFzZTY0LmpzIigpIHsKICAgIHVuaXZlcnNhbEJhc2U2NCA9IHsKICAgICAgZW5jb2RlOiAoc3RyKSA9PiB7CiAgICAgICAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLCAidXRmOCIpLnRvU3RyaW5nKCJiYXNlNjQiKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBidG9hICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgY29uc3QgdXRmOEJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0cik7CiAgICAgICAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSBBcnJheS5mcm9tKHV0ZjhCeXRlcywgKGJ5dGUpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZSkpLmpvaW4oIiIpOwogICAgICAgICAgcmV0dXJuIGJ0b2EoYmluYXJ5U3RyaW5nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzdHIpOwogICAgICAgICAgbGV0IHJlc3VsdCA9ICIiOwogICAgICAgICAgbGV0IGkxMSA9IDA7CiAgICAgICAgICB3aGlsZSAoaTExIDwgYnl0ZXMubGVuZ3RoKSB7CiAgICAgICAgICAgIGNvbnN0IGE1ID0gYnl0ZXNbaTExKytdOwogICAgICAgICAgICBjb25zdCBiNSA9IGkxMSA8IGJ5dGVzLmxlbmd0aCA/IGJ5dGVzW2kxMSsrXSA6IDA7CiAgICAgICAgICAgIGNvbnN0IGMxMSA9IGkxMSA8IGJ5dGVzLmxlbmd0aCA/IGJ5dGVzW2kxMSsrXSA6IDA7CiAgICAgICAgICAgIGNvbnN0IGJpdG1hcCA9IGE1IDw8IDE2IHwgYjUgPDwgOCB8IGMxMTsKICAgICAgICAgICAgcmVzdWx0ICs9IGNoYXJzLmNoYXJBdChiaXRtYXAgPj4gMTggJiA2Myk7CiAgICAgICAgICAgIHJlc3VsdCArPSBjaGFycy5jaGFyQXQoYml0bWFwID4+IDEyICYgNjMpOwogICAgICAgICAgICByZXN1bHQgKz0gaTExIC0gMiA8IGJ5dGVzLmxlbmd0aCA/IGNoYXJzLmNoYXJBdChiaXRtYXAgPj4gNiAmIDYzKSA6ICI9IjsKICAgICAgICAgICAgcmVzdWx0ICs9IGkxMSAtIDEgPCBieXRlcy5sZW5ndGggPyBjaGFycy5jaGFyQXQoYml0bWFwICYgNjMpIDogIj0iOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlY29kZTogKHN0cikgPT4gewogICAgICAgIGNvbnN0IGJhc2U2NFN0cmluZyA9IHN0ci5yZXBsYWNlKC8tL2csICIrIikucmVwbGFjZSgvXy9nLCAiLyIpLnBhZEVuZChzdHIubGVuZ3RoICsgKDQgLSBzdHIubGVuZ3RoICUgNCkgJSA0LCAiPSIpOwogICAgICAgIGlmICh0eXBlb2YgQnVmZmVyICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJhc2U2NFN0cmluZywgImJhc2U2NCIpLnRvU3RyaW5nKCJ1dGY4Iik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXRvYiAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIGNvbnN0IGJpbmFyeVN0cmluZyA9IGF0b2IoYmFzZTY0U3RyaW5nKTsKICAgICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYmluYXJ5U3RyaW5nLmxlbmd0aCk7CiAgICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBiaW5hcnlTdHJpbmcubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgICBieXRlc1tpMTFdID0gYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaTExKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYnl0ZXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBjaGFycyA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKICAgICAgICAgIGxldCBieXRlcyA9IFtdOwogICAgICAgICAgbGV0IGkxMSA9IDA7CiAgICAgICAgICB3aGlsZSAoaTExIDwgYmFzZTY0U3RyaW5nLmxlbmd0aCkgewogICAgICAgICAgICBjb25zdCBlbmNvZGVkMSA9IGNoYXJzLmluZGV4T2YoYmFzZTY0U3RyaW5nLmNoYXJBdChpMTErKykpOwogICAgICAgICAgICBjb25zdCBlbmNvZGVkMiA9IGNoYXJzLmluZGV4T2YoYmFzZTY0U3RyaW5nLmNoYXJBdChpMTErKykpOwogICAgICAgICAgICBjb25zdCBlbmNvZGVkMyA9IGNoYXJzLmluZGV4T2YoYmFzZTY0U3RyaW5nLmNoYXJBdChpMTErKykpOwogICAgICAgICAgICBjb25zdCBlbmNvZGVkNCA9IGNoYXJzLmluZGV4T2YoYmFzZTY0U3RyaW5nLmNoYXJBdChpMTErKykpOwogICAgICAgICAgICBjb25zdCBiaXRtYXAgPSBlbmNvZGVkMSA8PCAxOCB8IGVuY29kZWQyIDw8IDEyIHwgZW5jb2RlZDMgPDwgNiB8IGVuY29kZWQ0OwogICAgICAgICAgICBieXRlcy5wdXNoKGJpdG1hcCA+PiAxNiAmIDI1NSk7CiAgICAgICAgICAgIGlmIChlbmNvZGVkMyAhPT0gNjQpCiAgICAgICAgICAgICAgYnl0ZXMucHVzaChiaXRtYXAgPj4gOCAmIDI1NSk7CiAgICAgICAgICAgIGlmIChlbmNvZGVkNCAhPT0gNjQpCiAgICAgICAgICAgICAgYnl0ZXMucHVzaChiaXRtYXAgJiAyNTUpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShuZXcgVWludDhBcnJheShieXRlcykpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIEJhc2U2NCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoaW5wdXRTdHJpbmdBcmcsIHR5cGVBcmcpIHsKICAgICAgICBzd2l0Y2ggKHR5cGVBcmcpIHsKICAgICAgICAgIGNhc2UgInN0cmluZyI6CiAgICAgICAgICAgIHRoaXMucmVmU3RyaW5nID0gaW5wdXRTdHJpbmdBcmc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgICAgdGhpcy5yZWZTdHJpbmcgPSBiYXNlNjQuZGVjb2RlKGlucHV0U3RyaW5nQXJnKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJiYXNlNjR1cmkiOgogICAgICAgICAgICB0aGlzLnJlZlN0cmluZyA9IGJhc2U2NC5kZWNvZGUoaW5wdXRTdHJpbmdBcmcpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogdGhlIHNpbXBsZSBzdHJpbmcgKHVuZW5jb2RlZCkKICAgICAgICovCiAgICAgIGdldCBzaW1wbGVTdHJpbmcoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucmVmU3RyaW5nOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB0aGUgYmFzZTY0IGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwgc3RyaW5nCiAgICAgICAqLwogICAgICBnZXQgYmFzZTY0U3RyaW5nKCkgewogICAgICAgIHJldHVybiBiYXNlNjQuZW5jb2RlKHRoaXMucmVmU3RyaW5nKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogdGhlIGJhc2U2NHVyaSBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIG9yaWdpbmFsIHN0cmluZwogICAgICAgKi8KICAgICAgZ2V0IGJhc2U2NFVyaVN0cmluZygpIHsKICAgICAgICByZXR1cm4gYmFzZTY0LmVuY29kZVVyaSh0aGlzLnJlZlN0cmluZyk7CiAgICAgIH0KICAgIH07CiAgICBiYXNlNjQgPSB7CiAgICAgIC8qKgogICAgICAgKiBlbmNvZGVzIHRoZSBzdHJpbmcKICAgICAgICovCiAgICAgIGVuY29kZTogKHN0cmluZ0FyZykgPT4gewogICAgICAgIHJldHVybiB1bml2ZXJzYWxCYXNlNjQuZW5jb2RlKHN0cmluZ0FyZyk7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBlbmNvZGVzIGEgc3RyaW5nQXJnIHRvIGJhc2U2NCB1cmkgc3R5bGUKICAgICAgICovCiAgICAgIGVuY29kZVVyaTogKHN0cmluZ0FyZykgPT4gewogICAgICAgIHJldHVybiB1bml2ZXJzYWxCYXNlNjQuZW5jb2RlKHN0cmluZ0FyZykucmVwbGFjZSgvXCsvZywgIi0iKS5yZXBsYWNlKC9cLy9nLCAiXyIpLnJlcGxhY2UoLz0vZywgIiIpOwogICAgICB9LAogICAgICAvKioKICAgICAgICogZGVjb2RlcyBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZwogICAgICAgKi8KICAgICAgZGVjb2RlOiAoc3RyaW5nQXJnKSA9PiB7CiAgICAgICAgcmV0dXJuIHVuaXZlcnNhbEJhc2U2NC5kZWNvZGUoc3RyaW5nQXJnKTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBzdHJpbmdBcmcKICAgICAgICogY2hlY2tzIHdldGhlciB0aGUgc3RyaW5nIGlzIGJhc2U2NCBlbmNvZGVkCiAgICAgICAqLwogICAgICBpc0Jhc2U2NDogKHN0cmluZ0FyZykgPT4gewogICAgICAgIGNvbnN0IHJlZ2V4ID0gL14oW0EtWmEtejAtOSsvXXs0fSkqKFtBLVphLXowLTkrL117M309fFtBLVphLXowLTkrL117Mn09PSk/JC87CiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3Qoc3RyaW5nQXJnKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLnR5cGUuanMKdmFyIHNtYXJ0c3RyaW5nX3R5cGVfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChzbWFydHN0cmluZ190eXBlX2V4cG9ydHMsIHsKICBpc0Jhc2U2NDogKCkgPT4gaXNCYXNlNjQsCiAgaXNVdGY4OiAoKSA9PiBpc1V0ZjgKfSk7CnZhciBpc1V0ZjgsIGlzQmFzZTY0Owp2YXIgaW5pdF9zbWFydHN0cmluZ190eXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcudHlwZS5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIGluaXRfc21hcnRzdHJpbmdfYmFzZTY0KCk7CiAgICBpc1V0ZjggPSAoc3RyaW5nQXJnKSA9PiB7CiAgICAgIGNvbnN0IGVuY29kZXIyID0gbmV3IFRleHRFbmNvZGVyKCk7CiAgICAgIGNvbnN0IGJ5dGVzID0gZW5jb2RlcjIuZW5jb2RlKHN0cmluZ0FyZyk7CiAgICAgIGxldCBpMTEgPSAwOwogICAgICB3aGlsZSAoaTExIDwgYnl0ZXMubGVuZ3RoKSB7CiAgICAgICAgaWYgKAogICAgICAgICAgLy8gQVNDSUkKICAgICAgICAgIGJ5dGVzW2kxMV0gPT09IDkgfHwgYnl0ZXNbaTExXSA9PT0gMTAgfHwgYnl0ZXNbaTExXSA9PT0gMTMgfHwgMzIgPD0gYnl0ZXNbaTExXSAmJiBieXRlc1tpMTFdIDw9IDEyNgogICAgICAgICkgewogICAgICAgICAgaTExICs9IDE7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKAogICAgICAgICAgLy8gbm9uLW92ZXJsb25nIDItYnl0ZQogICAgICAgICAgMTk0IDw9IGJ5dGVzW2kxMV0gJiYgYnl0ZXNbaTExXSA8PSAyMjMgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDFdICYmIGJ5dGVzW2kxMSArIDFdIDw9IDE5MQogICAgICAgICkgewogICAgICAgICAgaTExICs9IDI7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKAogICAgICAgICAgLy8gZXhjbHVkaW5nIG92ZXJsb25ncwogICAgICAgICAgYnl0ZXNbaTExXSA9PT0gMjI0ICYmIDE2MCA8PSBieXRlc1tpMTEgKyAxXSAmJiBieXRlc1tpMTEgKyAxXSA8PSAxOTEgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDJdICYmIGJ5dGVzW2kxMSArIDJdIDw9IDE5MSB8fCAvLyBzdHJhaWdodCAzLWJ5dGUKICAgICAgICAgICgyMjUgPD0gYnl0ZXNbaTExXSAmJiBieXRlc1tpMTFdIDw9IDIzNiB8fCBieXRlc1tpMTFdID09PSAyMzggfHwgYnl0ZXNbaTExXSA9PT0gMjM5KSAmJiAxMjggPD0gYnl0ZXNbaTExICsgMV0gJiYgYnl0ZXNbaTExICsgMV0gPD0gMTkxICYmIDEyOCA8PSBieXRlc1tpMTEgKyAyXSAmJiBieXRlc1tpMTEgKyAyXSA8PSAxOTEgfHwgLy8gZXhjbHVkaW5nIHN1cnJvZ2F0ZXMKICAgICAgICAgIGJ5dGVzW2kxMV0gPT09IDIzNyAmJiAxMjggPD0gYnl0ZXNbaTExICsgMV0gJiYgYnl0ZXNbaTExICsgMV0gPD0gMTU5ICYmIDEyOCA8PSBieXRlc1tpMTEgKyAyXSAmJiBieXRlc1tpMTEgKyAyXSA8PSAxOTEKICAgICAgICApIHsKICAgICAgICAgIGkxMSArPSAzOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICgKICAgICAgICAgIC8vIHBsYW5lcyAxLTMKICAgICAgICAgIGJ5dGVzW2kxMV0gPT09IDI0MCAmJiAxNDQgPD0gYnl0ZXNbaTExICsgMV0gJiYgYnl0ZXNbaTExICsgMV0gPD0gMTkxICYmIDEyOCA8PSBieXRlc1tpMTEgKyAyXSAmJiBieXRlc1tpMTEgKyAyXSA8PSAxOTEgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDNdICYmIGJ5dGVzW2kxMSArIDNdIDw9IDE5MSB8fCAvLyBwbGFuZXMgNC0xNQogICAgICAgICAgMjQxIDw9IGJ5dGVzW2kxMV0gJiYgYnl0ZXNbaTExXSA8PSAyNDMgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDFdICYmIGJ5dGVzW2kxMSArIDFdIDw9IDE5MSAmJiAxMjggPD0gYnl0ZXNbaTExICsgMl0gJiYgYnl0ZXNbaTExICsgMl0gPD0gMTkxICYmIDEyOCA8PSBieXRlc1tpMTEgKyAzXSAmJiBieXRlc1tpMTEgKyAzXSA8PSAxOTEgfHwgLy8gcGxhbmUgMTYKICAgICAgICAgIGJ5dGVzW2kxMV0gPT09IDI0NCAmJiAxMjggPD0gYnl0ZXNbaTExICsgMV0gJiYgYnl0ZXNbaTExICsgMV0gPD0gMTQzICYmIDEyOCA8PSBieXRlc1tpMTEgKyAyXSAmJiBieXRlc1tpMTEgKyAyXSA8PSAxOTEgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDNdICYmIGJ5dGVzW2kxMSArIDNdIDw9IDE5MQogICAgICAgICkgewogICAgICAgICAgaTExICs9IDQ7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfTsKICAgIGlzQmFzZTY0ID0gKHN0cmluZ0FyZykgPT4gewogICAgICBjb25zdCBub3RCYXNlNjQgPSAvW15BLVowLTkrXC89XS9pOwogICAgICBjb25zdCBsZW4gPSBzdHJpbmdBcmcubGVuZ3RoOwogICAgICBpZiAoIWxlbiB8fCBsZW4gJSA0ICE9PSAwIHx8IG5vdEJhc2U2NC50ZXN0KHN0cmluZ0FyZykpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgY29uc3QgZmlyc3RQYWRkaW5nQ2hhciA9IHN0cmluZ0FyZy5pbmRleE9mKCI9Iik7CiAgICAgIHJldHVybiBmaXJzdFBhZGRpbmdDaGFyID09PSAtMSB8fCBmaXJzdFBhZGRpbmdDaGFyID09PSBsZW4gLSAxIHx8IGZpcnN0UGFkZGluZ0NoYXIgPT09IGxlbiAtIDIgJiYgc3RyaW5nQXJnW2xlbiAtIDFdID09PSAiPSI7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcuZG9tYWluLmpzCnZhciBEb21haW47CnZhciBpbml0X3NtYXJ0c3RyaW5nX2RvbWFpbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmRvbWFpbi5qcyIoKSB7CiAgICBEb21haW4gPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGRvbWFpblN0cmluZ0FyZykgewogICAgICAgIHRoaXMucHJvdG9jb2wgPSB0aGlzLl9wcm90b2NvbFJlZ2V4KGRvbWFpblN0cmluZ0FyZyk7CiAgICAgICAgaWYgKCF0aGlzLnByb3RvY29sKSB7CiAgICAgICAgICBkb21haW5TdHJpbmdBcmcgPSBgaHR0cHM6Ly8ke2RvbWFpblN0cmluZ0FyZ31gOwogICAgICAgIH0KICAgICAgICB0aGlzLm5vZGVQYXJzZWRVcmwgPSBuZXcgVVJMKGRvbWFpblN0cmluZ0FyZyk7CiAgICAgICAgdGhpcy5wb3J0ID0gdGhpcy5ub2RlUGFyc2VkVXJsLnBvcnQ7CiAgICAgICAgY29uc3QgcmVnZXhNYXRjaGVzID0gdGhpcy5fZG9tYWluUmVnZXgoZG9tYWluU3RyaW5nQXJnLnJlcGxhY2UodGhpcy5ub2RlUGFyc2VkVXJsLnBhdGhuYW1lLCAiIikpOwogICAgICAgIHRoaXMuZnVsbE5hbWUgPSAiIjsKICAgICAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gNTsgaTExKyspIHsKICAgICAgICAgIGlmIChyZWdleE1hdGNoZXNbaTExIC0gMV0pIHsKICAgICAgICAgICAgY29uc3QgbG9jYWxNYXRjaCA9IHJlZ2V4TWF0Y2hlc1tpMTEgLSAxXTsKICAgICAgICAgICAgdGhpc1sibGV2ZWwiICsgaTExLnRvU3RyaW5nKCldID0gbG9jYWxNYXRjaDsKICAgICAgICAgICAgaWYgKHRoaXMuZnVsbE5hbWUgPT09ICIiKSB7CiAgICAgICAgICAgICAgdGhpcy5mdWxsTmFtZSA9IGxvY2FsTWF0Y2g7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5mdWxsTmFtZSA9IGxvY2FsTWF0Y2ggKyAiLiIgKyB0aGlzLmZ1bGxOYW1lOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzWyJsZXZlbCIgKyBpMTEudG9TdHJpbmcoKV0gPSB2b2lkIDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuem9uZU5hbWUgPSB0aGlzLmxldmVsMiArICIuIiArIHRoaXMubGV2ZWwxOwogICAgICAgIHRoaXMudG9wTGV2ZWwgPSB0aGlzLmxldmVsMTsKICAgICAgICB0aGlzLmRvbWFpbk5hbWUgPSB0aGlzLmxldmVsMjsKICAgICAgICB0aGlzLnN1YkRvbWFpbiA9IHRoaXMubGV2ZWwzOwogICAgICB9CiAgICAgIC8vIGhlbHBlciBmdW5jdGlvbnMKICAgICAgLyoqICovCiAgICAgIF9kb21haW5SZWdleChzdHJpbmdBcmcpIHsKICAgICAgICBjb25zdCByZWdleFN0cmluZyA9IC8oW2EtekEtWjAtOVwtXF9dKilcLnswLDF9KFthLXpBLVowLTlcLVxfXSopXC57MCwxfShbYS16QS1aMC05XC1cX10qKVwuezAsMX0oW2EtekEtWjAtOVwtXF9dKilcLnswLDF9KFthLXpBLVowLTlcLVxfXSopXC57MCwxfSQvOwogICAgICAgIGNvbnN0IHJlZ2V4TWF0Y2hlcyA9IHJlZ2V4U3RyaW5nLmV4ZWMoc3RyaW5nQXJnKTsKICAgICAgICByZWdleE1hdGNoZXMucmV2ZXJzZSgpOwogICAgICAgIHJlZ2V4TWF0Y2hlcy5wb3AoKTsKICAgICAgICBjb25zdCByZWdleE1hdGNoZXNGaWx0ZXJlZCA9IHJlZ2V4TWF0Y2hlcy5maWx0ZXIoZnVuY3Rpb24oc3RyaW5nQXJnMikgewogICAgICAgICAgcmV0dXJuIHN0cmluZ0FyZzIgIT09ICIiOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiByZWdleE1hdGNoZXNGaWx0ZXJlZDsKICAgICAgfQogICAgICBfcHJvdG9jb2xSZWdleChzdHJpbmdBcmcpIHsKICAgICAgICBjb25zdCByZWdleFN0cmluZyA9IC9eKFthLXpBLVowLTldKik6XC9cLy87CiAgICAgICAgY29uc3QgcmVnZXhNYXRjaGVzID0gcmVnZXhTdHJpbmcuZXhlYyhzdHJpbmdBcmcpOwogICAgICAgIGlmIChyZWdleE1hdGNoZXMpIHsKICAgICAgICAgIHJldHVybiByZWdleE1hdGNoZXNbMV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgICAgfQogICAgICB9CiAgICAgIF9wb3J0UmVnZXgoc3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3QgcmVnZXhTdHJpbmcgPSAvXihbYS16QS1aMC05XSopOlwvXC8vOwogICAgICAgIGNvbnN0IHJlZ2V4TWF0Y2hlcyA9IHJlZ2V4U3RyaW5nLmV4ZWMoc3RyaW5nQXJnKTsKICAgICAgICBpZiAocmVnZXhNYXRjaGVzKSB7CiAgICAgICAgICByZXR1cm4gcmVnZXhNYXRjaGVzWzFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmdpdC5qcwp2YXIgR2l0UmVwbywgZ2l0UmVnZXgsIGdpdExpbms7CnZhciBpbml0X3NtYXJ0c3RyaW5nX2dpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmdpdC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIEdpdFJlcG8gPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHN0cmluZ0FyZywgdG9rZW5BcmcpIHsKICAgICAgICBsZXQgcmVnZXhNYXRjaGVzID0gZ2l0UmVnZXgoc3RyaW5nQXJnKTsKICAgICAgICB0aGlzLmhvc3QgPSByZWdleE1hdGNoZXNbMV07CiAgICAgICAgdGhpcy51c2VyID0gcmVnZXhNYXRjaGVzWzJdOwogICAgICAgIHRoaXMucmVwbyA9IHJlZ2V4TWF0Y2hlc1szXTsKICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gdG9rZW5Bcmc7CiAgICAgICAgdGhpcy5zc2hVcmwgPSBnaXRMaW5rKHRoaXMuaG9zdCwgdGhpcy51c2VyLCB0aGlzLnJlcG8sIHRoaXMuYWNjZXNzVG9rZW4sICJzc2giKTsKICAgICAgICB0aGlzLmh0dHBzVXJsID0gZ2l0TGluayh0aGlzLmhvc3QsIHRoaXMudXNlciwgdGhpcy5yZXBvLCB0aGlzLmFjY2Vzc1Rva2VuLCAiaHR0cHMiKTsKICAgICAgfQogICAgfTsKICAgIGdpdFJlZ2V4ID0gZnVuY3Rpb24oc3RyaW5nQXJnKSB7CiAgICAgIGNvbnN0IHJlZ2V4U3RyaW5nID0gLyhbYS16QS1aMC05XC1fXC5dKikoPzpcL3xcOikoW2EtekEtWjAtOVwtX1wuXSopKD86XC8pKFthLXpBLVowLTlcLV9cLl0qKSg/OlwuZ2l0KS87CiAgICAgIGxldCByZWdleE1hdGNoZXMgPSByZWdleFN0cmluZy5leGVjKHN0cmluZ0FyZyk7CiAgICAgIHJldHVybiByZWdleE1hdGNoZXM7CiAgICB9OwogICAgZ2l0TGluayA9IGZ1bmN0aW9uKGhvc3RBcmcsIHVzZXJBcmcsIHJlcG9BcmcsIHRva2VuQXJnID0gIiIsIGxpbmtUeXBlQXJnKSB7CiAgICAgIGxldCByZXR1cm5TdHJpbmc7CiAgICAgIGlmICh0b2tlbkFyZyAhPT0gIiIpIHsKICAgICAgICB0b2tlbkFyZyA9IHRva2VuQXJnICsgIkAiOwogICAgICB9CiAgICAgIHN3aXRjaCAobGlua1R5cGVBcmcpIHsKICAgICAgICBjYXNlICJodHRwcyI6CiAgICAgICAgICByZXR1cm5TdHJpbmcgPSAiaHR0cHM6Ly8iICsgdG9rZW5BcmcgKyBob3N0QXJnICsgIi8iICsgdXNlckFyZyArICIvIiArIHJlcG9BcmcgKyAiLmdpdCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJzc2giOgogICAgICAgICAgcmV0dXJuU3RyaW5nID0gImdpdEAiICsgaG9zdEFyZyArICI6IiArIHVzZXJBcmcgKyAiLyIgKyByZXBvQXJnICsgIi5naXQiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkxpbmsgVHlwZSAiICsgbGlua1R5cGVBcmcgKyAiIG5vdCBrbm93biIpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcmV0dXJuIHJldHVyblN0cmluZzsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTEgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTEsIHsKICBCYXNlNjQ6ICgpID0+IEJhc2U2NCwKICBEb21haW46ICgpID0+IERvbWFpbiwKICBHaXRSZXBvOiAoKSA9PiBHaXRSZXBvLAogIGJhc2U2NDogKCkgPT4gYmFzZTY0LAogIGNyZWF0ZTogKCkgPT4gc21hcnRzdHJpbmdfY3JlYXRlX2V4cG9ydHMsCiAgZG9ja2VyOiAoKSA9PiBzbWFydHN0cmluZ19kb2NrZXJfZXhwb3J0cywKICBpbmRlbnQ6ICgpID0+IHNtYXJ0c3RyaW5nX2luZGVudF9leHBvcnRzLAogIG5vcm1hbGl6ZTogKCkgPT4gc21hcnRzdHJpbmdfbm9ybWFsaXplX2V4cG9ydHMsCiAgdHlwZTogKCkgPT4gc21hcnRzdHJpbmdfdHlwZV9leHBvcnRzCn0pOwp2YXIgaW5pdF9kaXN0X3RzMTEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX2NyZWF0ZSgpOwogICAgaW5pdF9zbWFydHN0cmluZ19kb2NrZXIoKTsKICAgIGluaXRfc21hcnRzdHJpbmdfaW5kZW50KCk7CiAgICBpbml0X3NtYXJ0c3RyaW5nX25vcm1hbGl6ZSgpOwogICAgaW5pdF9zbWFydHN0cmluZ190eXBlKCk7CiAgICBpbml0X3NtYXJ0c3RyaW5nX2Jhc2U2NCgpOwogICAgaW5pdF9zbWFydHN0cmluZ19kb21haW4oKTsKICAgIGluaXRfc21hcnRzdHJpbmdfZ2l0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2guY2xvbmVkZWVwQDQuNS4wL25vZGVfbW9kdWxlcy9sb2Rhc2guY2xvbmVkZWVwL2luZGV4LmpzCnZhciByZXF1aXJlX2xvZGFzaCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLmNsb25lZGVlcEA0LjUuMC9ub2RlX21vZHVsZXMvbG9kYXNoLmNsb25lZGVlcC9pbmRleC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICB2YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDsKICAgIHZhciBIQVNIX1VOREVGSU5FRCA9ICJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjsKICAgIHZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTsKICAgIHZhciBhcmdzVGFnID0gIltvYmplY3QgQXJndW1lbnRzXSIsIGFycmF5VGFnID0gIltvYmplY3QgQXJyYXldIiwgYm9vbFRhZyA9ICJbb2JqZWN0IEJvb2xlYW5dIiwgZGF0ZVRhZyA9ICJbb2JqZWN0IERhdGVdIiwgZXJyb3JUYWcgPSAiW29iamVjdCBFcnJvcl0iLCBmdW5jVGFnID0gIltvYmplY3QgRnVuY3Rpb25dIiwgZ2VuVGFnID0gIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIiwgbWFwVGFnID0gIltvYmplY3QgTWFwXSIsIG51bWJlclRhZyA9ICJbb2JqZWN0IE51bWJlcl0iLCBvYmplY3RUYWcgPSAiW29iamVjdCBPYmplY3RdIiwgcHJvbWlzZVRhZyA9ICJbb2JqZWN0IFByb21pc2VdIiwgcmVnZXhwVGFnID0gIltvYmplY3QgUmVnRXhwXSIsIHNldFRhZyA9ICJbb2JqZWN0IFNldF0iLCBzdHJpbmdUYWcgPSAiW29iamVjdCBTdHJpbmddIiwgc3ltYm9sVGFnID0gIltvYmplY3QgU3ltYm9sXSIsIHdlYWtNYXBUYWcgPSAiW29iamVjdCBXZWFrTWFwXSI7CiAgICB2YXIgYXJyYXlCdWZmZXJUYWcgPSAiW29iamVjdCBBcnJheUJ1ZmZlcl0iLCBkYXRhVmlld1RhZyA9ICJbb2JqZWN0IERhdGFWaWV3XSIsIGZsb2F0MzJUYWcgPSAiW29iamVjdCBGbG9hdDMyQXJyYXldIiwgZmxvYXQ2NFRhZyA9ICJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLCBpbnQ4VGFnID0gIltvYmplY3QgSW50OEFycmF5XSIsIGludDE2VGFnID0gIltvYmplY3QgSW50MTZBcnJheV0iLCBpbnQzMlRhZyA9ICJbb2JqZWN0IEludDMyQXJyYXldIiwgdWludDhUYWcgPSAiW29iamVjdCBVaW50OEFycmF5XSIsIHVpbnQ4Q2xhbXBlZFRhZyA9ICJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsIHVpbnQxNlRhZyA9ICJbb2JqZWN0IFVpbnQxNkFycmF5XSIsIHVpbnQzMlRhZyA9ICJbb2JqZWN0IFVpbnQzMkFycmF5XSI7CiAgICB2YXIgcmVSZWdFeHBDaGFyID0gL1tcXF4kLiorPygpW1xde318XS9nOwogICAgdmFyIHJlRmxhZ3MgPSAvXHcqJC87CiAgICB2YXIgcmVJc0hvc3RDdG9yID0gL15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC87CiAgICB2YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cZCopJC87CiAgICB2YXIgY2xvbmVhYmxlVGFncyA9IHt9OwogICAgY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID0gY2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGFWaWV3VGFnXSA9IGNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGVUYWddID0gY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDhUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9IGNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9IGNsb25lYWJsZVRhZ3NbcmVnZXhwVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc2V0VGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MzJUYWddID0gdHJ1ZTsKICAgIGNsb25lYWJsZVRhZ3NbZXJyb3JUYWddID0gY2xvbmVhYmxlVGFnc1tmdW5jVGFnXSA9IGNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTsKICAgIHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAib2JqZWN0IiAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDsKICAgIHZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICJvYmplY3QiICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmOwogICAgdmFyIHJvb3Q2ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOwogICAgdmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzOwogICAgdmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTsKICAgIHZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzOwogICAgZnVuY3Rpb24gYWRkTWFwRW50cnkobWFwNywgcGFpcikgewogICAgICBtYXA3LnNldChwYWlyWzBdLCBwYWlyWzFdKTsKICAgICAgcmV0dXJuIG1hcDc7CiAgICB9CiAgICBmdW5jdGlvbiBhZGRTZXRFbnRyeShzZXQzLCB2YWx1ZTIpIHsKICAgICAgc2V0My5hZGQodmFsdWUyKTsKICAgICAgcmV0dXJuIHNldDM7CiAgICB9CiAgICBmdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7CiAgICAgIHZhciBpbmRleDIgPSAtMSwgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBsZW5ndGgpIHsKICAgICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbaW5kZXgyXSwgaW5kZXgyLCBhcnJheSkgPT09IGZhbHNlKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGFycmF5OwogICAgfQogICAgZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLCBvZmZzZXQgPSBhcnJheS5sZW5ndGg7CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IGxlbmd0aCkgewogICAgICAgIGFycmF5W29mZnNldCArIGluZGV4Ml0gPSB2YWx1ZXNbaW5kZXgyXTsKICAgICAgfQogICAgICByZXR1cm4gYXJyYXk7CiAgICB9CiAgICBmdW5jdGlvbiBhcnJheVJlZHVjZShhcnJheSwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0pIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7CiAgICAgIGlmIChpbml0QWNjdW0gJiYgbGVuZ3RoKSB7CiAgICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVsrK2luZGV4Ml07CiAgICAgIH0KICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXgyXSwgaW5kZXgyLCBhcnJheSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwogICAgfQogICAgZnVuY3Rpb24gYmFzZVRpbWVzKG4xMywgaXRlcmF0ZWUpIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCByZXN1bHQgPSBBcnJheShuMTMpOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBuMTMpIHsKICAgICAgICByZXN1bHRbaW5kZXgyXSA9IGl0ZXJhdGVlKGluZGV4Mik7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5MikgewogICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB2b2lkIDAgOiBvYmplY3Rba2V5Ml07CiAgICB9CiAgICBmdW5jdGlvbiBpc0hvc3RPYmplY3QodmFsdWUyKSB7CiAgICAgIHZhciByZXN1bHQgPSBmYWxzZTsKICAgICAgaWYgKHZhbHVlMiAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZTIudG9TdHJpbmcgIT0gImZ1bmN0aW9uIikgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXN1bHQgPSAhISh2YWx1ZTIgKyAiIik7CiAgICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBtYXBUb0FycmF5KG1hcDcpIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCByZXN1bHQgPSBBcnJheShtYXA3LnNpemUpOwogICAgICBtYXA3LmZvckVhY2goZnVuY3Rpb24odmFsdWUyLCBrZXkyKSB7CiAgICAgICAgcmVzdWx0WysraW5kZXgyXSA9IFtrZXkyLCB2YWx1ZTJdOwogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtMikgewogICAgICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7CiAgICAgICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtMihhcmcpKTsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0MykgewogICAgICB2YXIgaW5kZXgyID0gLTEsIHJlc3VsdCA9IEFycmF5KHNldDMuc2l6ZSk7CiAgICAgIHNldDMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICByZXN1bHRbKytpbmRleDJdID0gdmFsdWUyOwogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLCBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTsKICAgIHZhciBjb3JlSnNEYXRhID0gcm9vdDZbIl9fY29yZS1qc19zaGFyZWRfXyJdOwogICAgdmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7CiAgICAgIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAiIik7CiAgICAgIHJldHVybiB1aWQgPyAiU3ltYm9sKHNyYylfMS4iICsgdWlkIDogIiI7CiAgICB9KSgpOwogICAgdmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZzsKICAgIHZhciBoYXNPd25Qcm9wZXJ0eTMgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTsKICAgIHZhciBvYmplY3RUb1N0cmluZzIgPSBvYmplY3RQcm90by50b1N0cmluZzsKICAgIHZhciByZUlzTmF0aXZlID0gUmVnRXhwKAogICAgICAiXiIgKyBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eTMpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csICIkMS4qPyIpICsgIiQiCiAgICApOwogICAgdmFyIEJ1ZmZlcjIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdDYuQnVmZmVyIDogdm9pZCAwLCBTeW1ib2wyID0gcm9vdDYuU3ltYm9sLCBVaW50OEFycmF5MiA9IHJvb3Q2LlVpbnQ4QXJyYXksIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpLCBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlLCBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlLCBzcGxpY2UyID0gYXJyYXlQcm90by5zcGxpY2U7CiAgICB2YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyMiA/IEJ1ZmZlcjIuaXNCdWZmZXIgOiB2b2lkIDAsIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpOwogICAgdmFyIERhdGFWaWV3MiA9IGdldE5hdGl2ZShyb290NiwgIkRhdGFWaWV3IiksIE1hcDIgPSBnZXROYXRpdmUocm9vdDYsICJNYXAiKSwgUHJvbWlzZTIgPSBnZXROYXRpdmUocm9vdDYsICJQcm9taXNlIiksIFNldDIgPSBnZXROYXRpdmUocm9vdDYsICJTZXQiKSwgV2Vha01hcDIgPSBnZXROYXRpdmUocm9vdDYsICJXZWFrTWFwIiksIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICJjcmVhdGUiKTsKICAgIHZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldzIpLCBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwMiksIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZTIpLCBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0MiksIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcDIpOwogICAgdmFyIHN5bWJvbFByb3RvID0gU3ltYm9sMiA/IFN5bWJvbDIucHJvdG90eXBlIDogdm9pZCAwLCBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdm9pZCAwOwogICAgZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7CiAgICAgIHZhciBpbmRleDIgPSAtMSwgbGVuZ3RoID0gZW50cmllcyA/IGVudHJpZXMubGVuZ3RoIDogMDsKICAgICAgdGhpcy5jbGVhcigpOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBsZW5ndGgpIHsKICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4Ml07CiAgICAgICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gaGFzaENsZWFyKCkgewogICAgICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307CiAgICB9CiAgICBmdW5jdGlvbiBoYXNoRGVsZXRlKGtleTIpIHsKICAgICAgcmV0dXJuIHRoaXMuaGFzKGtleTIpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleTJdOwogICAgfQogICAgZnVuY3Rpb24gaGFzaEdldChrZXkyKSB7CiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXzsKICAgICAgaWYgKG5hdGl2ZUNyZWF0ZSkgewogICAgICAgIHZhciByZXN1bHQgPSBkYXRhW2tleTJdOwogICAgICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdm9pZCAwIDogcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBoYXNPd25Qcm9wZXJ0eTMuY2FsbChkYXRhLCBrZXkyKSA/IGRhdGFba2V5Ml0gOiB2b2lkIDA7CiAgICB9CiAgICBmdW5jdGlvbiBoYXNoSGFzKGtleTIpIHsKICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fOwogICAgICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gZGF0YVtrZXkyXSAhPT0gdm9pZCAwIDogaGFzT3duUHJvcGVydHkzLmNhbGwoZGF0YSwga2V5Mik7CiAgICB9CiAgICBmdW5jdGlvbiBoYXNoU2V0KGtleTIsIHZhbHVlMikgewogICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187CiAgICAgIGRhdGFba2V5Ml0gPSBuYXRpdmVDcmVhdGUgJiYgdmFsdWUyID09PSB2b2lkIDAgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlMjsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBIYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjsKICAgIEhhc2gucHJvdG90eXBlWyJkZWxldGUiXSA9IGhhc2hEZWxldGU7CiAgICBIYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0OwogICAgSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhczsKICAgIEhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7CiAgICBmdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykgewogICAgICB2YXIgaW5kZXgyID0gLTEsIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7CiAgICAgIHRoaXMuY2xlYXIoKTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleDJdOwogICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkgewogICAgICB0aGlzLl9fZGF0YV9fID0gW107CiAgICB9CiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5MikgewogICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sIGluZGV4MiA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkyKTsKICAgICAgaWYgKGluZGV4MiA8IDApIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTsKICAgICAgaWYgKGluZGV4MiA9PSBsYXN0SW5kZXgpIHsKICAgICAgICBkYXRhLnBvcCgpOwogICAgICB9IGVsc2UgewogICAgICAgIHNwbGljZTIuY2FsbChkYXRhLCBpbmRleDIsIDEpOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleTIpIHsKICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLCBpbmRleDIgPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5Mik7CiAgICAgIHJldHVybiBpbmRleDIgPCAwID8gdm9pZCAwIDogZGF0YVtpbmRleDJdWzFdOwogICAgfQogICAgZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleTIpIHsKICAgICAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkyKSA+IC0xOwogICAgfQogICAgZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleTIsIHZhbHVlMikgewogICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sIGluZGV4MiA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkyKTsKICAgICAgaWYgKGluZGV4MiA8IDApIHsKICAgICAgICBkYXRhLnB1c2goW2tleTIsIHZhbHVlMl0pOwogICAgICB9IGVsc2UgewogICAgICAgIGRhdGFbaW5kZXgyXVsxXSA9IHZhbHVlMjsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIExpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjsKICAgIExpc3RDYWNoZS5wcm90b3R5cGVbImRlbGV0ZSJdID0gbGlzdENhY2hlRGVsZXRlOwogICAgTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7CiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhczsKICAgIExpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0OwogICAgZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykgewogICAgICB2YXIgaW5kZXgyID0gLTEsIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7CiAgICAgIHRoaXMuY2xlYXIoKTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleDJdOwogICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7CiAgICAgIHRoaXMuX19kYXRhX18gPSB7CiAgICAgICAgImhhc2giOiBuZXcgSGFzaCgpLAogICAgICAgICJtYXAiOiBuZXcgKE1hcDIgfHwgTGlzdENhY2hlKSgpLAogICAgICAgICJzdHJpbmciOiBuZXcgSGFzaCgpCiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkyKSB7CiAgICAgIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleTIpWyJkZWxldGUiXShrZXkyKTsKICAgIH0KICAgIGZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleTIpIHsKICAgICAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5MikuZ2V0KGtleTIpOwogICAgfQogICAgZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5MikgewogICAgICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkyKS5oYXMoa2V5Mik7CiAgICB9CiAgICBmdW5jdGlvbiBtYXBDYWNoZVNldChrZXkyLCB2YWx1ZTIpIHsKICAgICAgZ2V0TWFwRGF0YSh0aGlzLCBrZXkyKS5zZXQoa2V5MiwgdmFsdWUyKTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBNYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyOwogICAgTWFwQ2FjaGUucHJvdG90eXBlWyJkZWxldGUiXSA9IG1hcENhY2hlRGVsZXRlOwogICAgTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0OwogICAgTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzOwogICAgTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0OwogICAgZnVuY3Rpb24gU3RhY2soZW50cmllcykgewogICAgICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTsKICAgIH0KICAgIGZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7CiAgICAgIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKCk7CiAgICB9CiAgICBmdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkyKSB7CiAgICAgIHJldHVybiB0aGlzLl9fZGF0YV9fWyJkZWxldGUiXShrZXkyKTsKICAgIH0KICAgIGZ1bmN0aW9uIHN0YWNrR2V0KGtleTIpIHsKICAgICAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleTIpOwogICAgfQogICAgZnVuY3Rpb24gc3RhY2tIYXMoa2V5MikgewogICAgICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5Mik7CiAgICB9CiAgICBmdW5jdGlvbiBzdGFja1NldChrZXkyLCB2YWx1ZTIpIHsKICAgICAgdmFyIGNhY2hlID0gdGhpcy5fX2RhdGFfXzsKICAgICAgaWYgKGNhY2hlIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7CiAgICAgICAgdmFyIHBhaXJzMiA9IGNhY2hlLl9fZGF0YV9fOwogICAgICAgIGlmICghTWFwMiB8fCBwYWlyczIubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpIHsKICAgICAgICAgIHBhaXJzMi5wdXNoKFtrZXkyLCB2YWx1ZTJdKTsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgICBjYWNoZSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGUocGFpcnMyKTsKICAgICAgfQogICAgICBjYWNoZS5zZXQoa2V5MiwgdmFsdWUyKTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBTdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyOwogICAgU3RhY2sucHJvdG90eXBlWyJkZWxldGUiXSA9IHN0YWNrRGVsZXRlOwogICAgU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0OwogICAgU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzOwogICAgU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0OwogICAgZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZTIsIGluaGVyaXRlZCkgewogICAgICB2YXIgcmVzdWx0ID0gaXNBcnJheTModmFsdWUyKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZTIpID8gYmFzZVRpbWVzKHZhbHVlMi5sZW5ndGgsIFN0cmluZykgOiBbXTsKICAgICAgdmFyIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGgsIHNraXBJbmRleGVzID0gISFsZW5ndGg7CiAgICAgIGZvciAodmFyIGtleTIgaW4gdmFsdWUyKSB7CiAgICAgICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkzLmNhbGwodmFsdWUyLCBrZXkyKSkgJiYgIShza2lwSW5kZXhlcyAmJiAoa2V5MiA9PSAibGVuZ3RoIiB8fCBpc0luZGV4KGtleTIsIGxlbmd0aCkpKSkgewogICAgICAgICAgcmVzdWx0LnB1c2goa2V5Mik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleTIsIHZhbHVlMikgewogICAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5Ml07CiAgICAgIGlmICghKGhhc093blByb3BlcnR5My5jYWxsKG9iamVjdCwga2V5MikgJiYgZXEob2JqVmFsdWUsIHZhbHVlMikpIHx8IHZhbHVlMiA9PT0gdm9pZCAwICYmICEoa2V5MiBpbiBvYmplY3QpKSB7CiAgICAgICAgb2JqZWN0W2tleTJdID0gdmFsdWUyOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleTIpIHsKICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsKICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CiAgICAgICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleTIpKSB7CiAgICAgICAgICByZXR1cm4gbGVuZ3RoOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7CiAgICAgIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXMyKHNvdXJjZSksIG9iamVjdCk7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUyLCBpc0RlZXAsIGlzRnVsbCwgY3VzdG9taXplciwga2V5Miwgb2JqZWN0LCBzdGFjaykgewogICAgICB2YXIgcmVzdWx0OwogICAgICBpZiAoY3VzdG9taXplcikgewogICAgICAgIHJlc3VsdCA9IG9iamVjdCA/IGN1c3RvbWl6ZXIodmFsdWUyLCBrZXkyLCBvYmplY3QsIHN0YWNrKSA6IGN1c3RvbWl6ZXIodmFsdWUyKTsKICAgICAgfQogICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIGlmICghaXNPYmplY3QzKHZhbHVlMikpIHsKICAgICAgICByZXR1cm4gdmFsdWUyOwogICAgICB9CiAgICAgIHZhciBpc0FyciA9IGlzQXJyYXkzKHZhbHVlMik7CiAgICAgIGlmIChpc0FycikgewogICAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUFycmF5KHZhbHVlMik7CiAgICAgICAgaWYgKCFpc0RlZXApIHsKICAgICAgICAgIHJldHVybiBjb3B5QXJyYXkodmFsdWUyLCByZXN1bHQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlMiksIGlzRnVuYyA9IHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7CiAgICAgICAgaWYgKGlzQnVmZmVyKHZhbHVlMikpIHsKICAgICAgICAgIHJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZTIsIGlzRGVlcCk7CiAgICAgICAgfQogICAgICAgIGlmICh0YWcgPT0gb2JqZWN0VGFnIHx8IHRhZyA9PSBhcmdzVGFnIHx8IGlzRnVuYyAmJiAhb2JqZWN0KSB7CiAgICAgICAgICBpZiAoaXNIb3N0T2JqZWN0KHZhbHVlMikpIHsKICAgICAgICAgICAgcmV0dXJuIG9iamVjdCA/IHZhbHVlMiA6IHt9OwogICAgICAgICAgfQogICAgICAgICAgcmVzdWx0ID0gaW5pdENsb25lT2JqZWN0KGlzRnVuYyA/IHt9IDogdmFsdWUyKTsKICAgICAgICAgIGlmICghaXNEZWVwKSB7CiAgICAgICAgICAgIHJldHVybiBjb3B5U3ltYm9scyh2YWx1ZTIsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZTIpKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKCFjbG9uZWFibGVUYWdzW3RhZ10pIHsKICAgICAgICAgICAgcmV0dXJuIG9iamVjdCA/IHZhbHVlMiA6IHt9OwogICAgICAgICAgfQogICAgICAgICAgcmVzdWx0ID0gaW5pdENsb25lQnlUYWcodmFsdWUyLCB0YWcsIGJhc2VDbG9uZSwgaXNEZWVwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKCkpOwogICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZTIpOwogICAgICBpZiAoc3RhY2tlZCkgewogICAgICAgIHJldHVybiBzdGFja2VkOwogICAgICB9CiAgICAgIHN0YWNrLnNldCh2YWx1ZTIsIHJlc3VsdCk7CiAgICAgIGlmICghaXNBcnIpIHsKICAgICAgICB2YXIgcHJvcHMgPSBpc0Z1bGwgPyBnZXRBbGxLZXlzKHZhbHVlMikgOiBrZXlzMih2YWx1ZTIpOwogICAgICB9CiAgICAgIGFycmF5RWFjaChwcm9wcyB8fCB2YWx1ZTIsIGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkzKSB7CiAgICAgICAgaWYgKHByb3BzKSB7CiAgICAgICAgICBrZXkzID0gc3ViVmFsdWU7CiAgICAgICAgICBzdWJWYWx1ZSA9IHZhbHVlMltrZXkzXTsKICAgICAgICB9CiAgICAgICAgYXNzaWduVmFsdWUocmVzdWx0LCBrZXkzLCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGlzRGVlcCwgaXNGdWxsLCBjdXN0b21pemVyLCBrZXkzLCB2YWx1ZTIsIHN0YWNrKSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gYmFzZUNyZWF0ZShwcm90bykgewogICAgICByZXR1cm4gaXNPYmplY3QzKHByb3RvKSA/IG9iamVjdENyZWF0ZShwcm90bykgOiB7fTsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7CiAgICAgIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpOwogICAgICByZXR1cm4gaXNBcnJheTMob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpOwogICAgfQogICAgZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZTIpIHsKICAgICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nMi5jYWxsKHZhbHVlMik7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUyKSB7CiAgICAgIGlmICghaXNPYmplY3QzKHZhbHVlMikgfHwgaXNNYXNrZWQodmFsdWUyKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24yKHZhbHVlMikgfHwgaXNIb3N0T2JqZWN0KHZhbHVlMikgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yOwogICAgICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlMikpOwogICAgfQogICAgZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7CiAgICAgIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkgewogICAgICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7CiAgICAgIH0KICAgICAgdmFyIHJlc3VsdCA9IFtdOwogICAgICBmb3IgKHZhciBrZXkyIGluIE9iamVjdChvYmplY3QpKSB7CiAgICAgICAgaWYgKGhhc093blByb3BlcnR5My5jYWxsKG9iamVjdCwga2V5MikgJiYga2V5MiAhPSAiY29uc3RydWN0b3IiKSB7CiAgICAgICAgICByZXN1bHQucHVzaChrZXkyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlcjIsIGlzRGVlcCkgewogICAgICBpZiAoaXNEZWVwKSB7CiAgICAgICAgcmV0dXJuIGJ1ZmZlcjIuc2xpY2UoKTsKICAgICAgfQogICAgICB2YXIgcmVzdWx0ID0gbmV3IGJ1ZmZlcjIuY29uc3RydWN0b3IoYnVmZmVyMi5sZW5ndGgpOwogICAgICBidWZmZXIyLmNvcHkocmVzdWx0KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHsKICAgICAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTsKICAgICAgbmV3IFVpbnQ4QXJyYXkyKHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5MihhcnJheUJ1ZmZlcikpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gY2xvbmVEYXRhVmlldyhkYXRhVmlldywgaXNEZWVwKSB7CiAgICAgIHZhciBidWZmZXIyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcihkYXRhVmlldy5idWZmZXIpIDogZGF0YVZpZXcuYnVmZmVyOwogICAgICByZXR1cm4gbmV3IGRhdGFWaWV3LmNvbnN0cnVjdG9yKGJ1ZmZlcjIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpOwogICAgfQogICAgZnVuY3Rpb24gY2xvbmVNYXAobWFwNywgaXNEZWVwLCBjbG9uZUZ1bmMpIHsKICAgICAgdmFyIGFycmF5ID0gaXNEZWVwID8gY2xvbmVGdW5jKG1hcFRvQXJyYXkobWFwNyksIHRydWUpIDogbWFwVG9BcnJheShtYXA3KTsKICAgICAgcmV0dXJuIGFycmF5UmVkdWNlKGFycmF5LCBhZGRNYXBFbnRyeSwgbmV3IG1hcDcuY29uc3RydWN0b3IoKSk7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9uZVJlZ0V4cChyZWdleHApIHsKICAgICAgdmFyIHJlc3VsdCA9IG5ldyByZWdleHAuY29uc3RydWN0b3IocmVnZXhwLnNvdXJjZSwgcmVGbGFncy5leGVjKHJlZ2V4cCkpOwogICAgICByZXN1bHQubGFzdEluZGV4ID0gcmVnZXhwLmxhc3RJbmRleDsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGNsb25lU2V0KHNldDMsIGlzRGVlcCwgY2xvbmVGdW5jKSB7CiAgICAgIHZhciBhcnJheSA9IGlzRGVlcCA/IGNsb25lRnVuYyhzZXRUb0FycmF5KHNldDMpLCB0cnVlKSA6IHNldFRvQXJyYXkoc2V0Myk7CiAgICAgIHJldHVybiBhcnJheVJlZHVjZShhcnJheSwgYWRkU2V0RW50cnksIG5ldyBzZXQzLmNvbnN0cnVjdG9yKCkpOwogICAgfQogICAgZnVuY3Rpb24gY2xvbmVTeW1ib2woc3ltYm9sKSB7CiAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mID8gT2JqZWN0KHN5bWJvbFZhbHVlT2YuY2FsbChzeW1ib2wpKSA6IHt9OwogICAgfQogICAgZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkgewogICAgICB2YXIgYnVmZmVyMiA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7CiAgICAgIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7CiAgICAgIHZhciBpbmRleDIgPSAtMSwgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKICAgICAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IGxlbmd0aCkgewogICAgICAgIGFycmF5W2luZGV4Ml0gPSBzb3VyY2VbaW5kZXgyXTsKICAgICAgfQogICAgICByZXR1cm4gYXJyYXk7CiAgICB9CiAgICBmdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikgewogICAgICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTsKICAgICAgdmFyIGluZGV4MiA9IC0xLCBsZW5ndGggPSBwcm9wcy5sZW5ndGg7CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IGxlbmd0aCkgewogICAgICAgIHZhciBrZXkyID0gcHJvcHNbaW5kZXgyXTsKICAgICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyID8gY3VzdG9taXplcihvYmplY3Rba2V5Ml0sIHNvdXJjZVtrZXkyXSwga2V5Miwgb2JqZWN0LCBzb3VyY2UpIDogdm9pZCAwOwogICAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5MiwgbmV3VmFsdWUgPT09IHZvaWQgMCA/IHNvdXJjZVtrZXkyXSA6IG5ld1ZhbHVlKTsKICAgICAgfQogICAgICByZXR1cm4gb2JqZWN0OwogICAgfQogICAgZnVuY3Rpb24gY29weVN5bWJvbHMoc291cmNlLCBvYmplY3QpIHsKICAgICAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzKHNvdXJjZSksIG9iamVjdCk7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkgewogICAgICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzMiwgZ2V0U3ltYm9scyk7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRNYXBEYXRhKG1hcDcsIGtleTIpIHsKICAgICAgdmFyIGRhdGEgPSBtYXA3Ll9fZGF0YV9fOwogICAgICByZXR1cm4gaXNLZXlhYmxlKGtleTIpID8gZGF0YVt0eXBlb2Yga2V5MiA9PSAic3RyaW5nIiA/ICJzdHJpbmciIDogImhhc2giXSA6IGRhdGEubWFwOwogICAgfQogICAgZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5MikgewogICAgICB2YXIgdmFsdWUyID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkyKTsKICAgICAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZTIpID8gdmFsdWUyIDogdm9pZCAwOwogICAgfQogICAgdmFyIGdldFN5bWJvbHMgPSBuYXRpdmVHZXRTeW1ib2xzID8gb3ZlckFyZyhuYXRpdmVHZXRTeW1ib2xzLCBPYmplY3QpIDogc3R1YkFycmF5OwogICAgdmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7CiAgICBpZiAoRGF0YVZpZXcyICYmIGdldFRhZyhuZXcgRGF0YVZpZXcyKG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnIHx8IE1hcDIgJiYgZ2V0VGFnKG5ldyBNYXAyKCkpICE9IG1hcFRhZyB8fCBQcm9taXNlMiAmJiBnZXRUYWcoUHJvbWlzZTIucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnIHx8IFNldDIgJiYgZ2V0VGFnKG5ldyBTZXQyKCkpICE9IHNldFRhZyB8fCBXZWFrTWFwMiAmJiBnZXRUYWcobmV3IFdlYWtNYXAyKCkpICE9IHdlYWtNYXBUYWcpIHsKICAgICAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IG9iamVjdFRvU3RyaW5nMi5jYWxsKHZhbHVlMiksIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUyLmNvbnN0cnVjdG9yIDogdm9pZCAwLCBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogdm9pZCAwOwogICAgICAgIGlmIChjdG9yU3RyaW5nKSB7CiAgICAgICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHsKICAgICAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6CiAgICAgICAgICAgICAgcmV0dXJuIGRhdGFWaWV3VGFnOwogICAgICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6CiAgICAgICAgICAgICAgcmV0dXJuIG1hcFRhZzsKICAgICAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzoKICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZVRhZzsKICAgICAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOgogICAgICAgICAgICAgIHJldHVybiBzZXRUYWc7CiAgICAgICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6CiAgICAgICAgICAgICAgcmV0dXJuIHdlYWtNYXBUYWc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBpbml0Q2xvbmVBcnJheShhcnJheSkgewogICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLCByZXN1bHQgPSBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpOwogICAgICBpZiAobGVuZ3RoICYmIHR5cGVvZiBhcnJheVswXSA9PSAic3RyaW5nIiAmJiBoYXNPd25Qcm9wZXJ0eTMuY2FsbChhcnJheSwgImluZGV4IikpIHsKICAgICAgICByZXN1bHQuaW5kZXggPSBhcnJheS5pbmRleDsKICAgICAgICByZXN1bHQuaW5wdXQgPSBhcnJheS5pbnB1dDsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkgewogICAgICByZXR1cm4gdHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAiZnVuY3Rpb24iICYmICFpc1Byb3RvdHlwZShvYmplY3QpID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSkgOiB7fTsKICAgIH0KICAgIGZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBjbG9uZUZ1bmMsIGlzRGVlcCkgewogICAgICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjsKICAgICAgc3dpdGNoICh0YWcpIHsKICAgICAgICBjYXNlIGFycmF5QnVmZmVyVGFnOgogICAgICAgICAgcmV0dXJuIGNsb25lQXJyYXlCdWZmZXIob2JqZWN0KTsKICAgICAgICBjYXNlIGJvb2xUYWc6CiAgICAgICAgY2FzZSBkYXRlVGFnOgogICAgICAgICAgcmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpOwogICAgICAgIGNhc2UgZGF0YVZpZXdUYWc6CiAgICAgICAgICByZXR1cm4gY2xvbmVEYXRhVmlldyhvYmplY3QsIGlzRGVlcCk7CiAgICAgICAgY2FzZSBmbG9hdDMyVGFnOgogICAgICAgIGNhc2UgZmxvYXQ2NFRhZzoKICAgICAgICBjYXNlIGludDhUYWc6CiAgICAgICAgY2FzZSBpbnQxNlRhZzoKICAgICAgICBjYXNlIGludDMyVGFnOgogICAgICAgIGNhc2UgdWludDhUYWc6CiAgICAgICAgY2FzZSB1aW50OENsYW1wZWRUYWc6CiAgICAgICAgY2FzZSB1aW50MTZUYWc6CiAgICAgICAgY2FzZSB1aW50MzJUYWc6CiAgICAgICAgICByZXR1cm4gY2xvbmVUeXBlZEFycmF5KG9iamVjdCwgaXNEZWVwKTsKICAgICAgICBjYXNlIG1hcFRhZzoKICAgICAgICAgIHJldHVybiBjbG9uZU1hcChvYmplY3QsIGlzRGVlcCwgY2xvbmVGdW5jKTsKICAgICAgICBjYXNlIG51bWJlclRhZzoKICAgICAgICBjYXNlIHN0cmluZ1RhZzoKICAgICAgICAgIHJldHVybiBuZXcgQ3RvcihvYmplY3QpOwogICAgICAgIGNhc2UgcmVnZXhwVGFnOgogICAgICAgICAgcmV0dXJuIGNsb25lUmVnRXhwKG9iamVjdCk7CiAgICAgICAgY2FzZSBzZXRUYWc6CiAgICAgICAgICByZXR1cm4gY2xvbmVTZXQob2JqZWN0LCBpc0RlZXAsIGNsb25lRnVuYyk7CiAgICAgICAgY2FzZSBzeW1ib2xUYWc6CiAgICAgICAgICByZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gaXNJbmRleCh2YWx1ZTIsIGxlbmd0aCkgewogICAgICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7CiAgICAgIHJldHVybiAhIWxlbmd0aCAmJiAodHlwZW9mIHZhbHVlMiA9PSAibnVtYmVyIiB8fCByZUlzVWludC50ZXN0KHZhbHVlMikpICYmICh2YWx1ZTIgPiAtMSAmJiB2YWx1ZTIgJSAxID09IDAgJiYgdmFsdWUyIDwgbGVuZ3RoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZTIpIHsKICAgICAgdmFyIHR5cGU1ID0gdHlwZW9mIHZhbHVlMjsKICAgICAgcmV0dXJuIHR5cGU1ID09ICJzdHJpbmciIHx8IHR5cGU1ID09ICJudW1iZXIiIHx8IHR5cGU1ID09ICJzeW1ib2wiIHx8IHR5cGU1ID09ICJib29sZWFuIiA/IHZhbHVlMiAhPT0gIl9fcHJvdG9fXyIgOiB2YWx1ZTIgPT09IG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7CiAgICAgIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgbWFza1NyY0tleSBpbiBmdW5jOwogICAgfQogICAgZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUyKSB7CiAgICAgIHZhciBDdG9yID0gdmFsdWUyICYmIHZhbHVlMi5jb25zdHJ1Y3RvciwgcHJvdG8gPSB0eXBlb2YgQ3RvciA9PSAiZnVuY3Rpb24iICYmIEN0b3IucHJvdG90eXBlIHx8IG9iamVjdFByb3RvOwogICAgICByZXR1cm4gdmFsdWUyID09PSBwcm90bzsKICAgIH0KICAgIGZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHsKICAgICAgaWYgKGZ1bmMgIT0gbnVsbCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7CiAgICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gZnVuYyArICIiOwogICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gIiI7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9uZURlZXAodmFsdWUyKSB7CiAgICAgIHJldHVybiBiYXNlQ2xvbmUodmFsdWUyLCB0cnVlLCB0cnVlKTsKICAgIH0KICAgIGZ1bmN0aW9uIGVxKHZhbHVlMiwgb3RoZXIpIHsKICAgICAgcmV0dXJuIHZhbHVlMiA9PT0gb3RoZXIgfHwgdmFsdWUyICE9PSB2YWx1ZTIgJiYgb3RoZXIgIT09IG90aGVyOwogICAgfQogICAgZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUyKSB7CiAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZTIpICYmIGhhc093blByb3BlcnR5My5jYWxsKHZhbHVlMiwgImNhbGxlZSIpICYmICghcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZTIsICJjYWxsZWUiKSB8fCBvYmplY3RUb1N0cmluZzIuY2FsbCh2YWx1ZTIpID09IGFyZ3NUYWcpOwogICAgfQogICAgdmFyIGlzQXJyYXkzID0gQXJyYXkuaXNBcnJheTsKICAgIGZ1bmN0aW9uIGlzQXJyYXlMaWtlMih2YWx1ZTIpIHsKICAgICAgcmV0dXJuIHZhbHVlMiAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlMi5sZW5ndGgpICYmICFpc0Z1bmN0aW9uMih2YWx1ZTIpOwogICAgfQogICAgZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUyKSB7CiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUyKSAmJiBpc0FycmF5TGlrZTIodmFsdWUyKTsKICAgIH0KICAgIHZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTsKICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24yKHZhbHVlMikgewogICAgICB2YXIgdGFnID0gaXNPYmplY3QzKHZhbHVlMikgPyBvYmplY3RUb1N0cmluZzIuY2FsbCh2YWx1ZTIpIDogIiI7CiAgICAgIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnOwogICAgfQogICAgZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUyKSB7CiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUyID09ICJudW1iZXIiICYmIHZhbHVlMiA+IC0xICYmIHZhbHVlMiAlIDEgPT0gMCAmJiB2YWx1ZTIgPD0gTUFYX1NBRkVfSU5URUdFUjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzT2JqZWN0Myh2YWx1ZTIpIHsKICAgICAgdmFyIHR5cGU1ID0gdHlwZW9mIHZhbHVlMjsKICAgICAgcmV0dXJuICEhdmFsdWUyICYmICh0eXBlNSA9PSAib2JqZWN0IiB8fCB0eXBlNSA9PSAiZnVuY3Rpb24iKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZTIpIHsKICAgICAgcmV0dXJuICEhdmFsdWUyICYmIHR5cGVvZiB2YWx1ZTIgPT0gIm9iamVjdCI7CiAgICB9CiAgICBmdW5jdGlvbiBrZXlzMihvYmplY3QpIHsKICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlMihvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTsKICAgIH0KICAgIGZ1bmN0aW9uIHN0dWJBcnJheSgpIHsKICAgICAgcmV0dXJuIFtdOwogICAgfQogICAgZnVuY3Rpb24gc3R1YkZhbHNlKCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IGNsb25lRGVlcDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Zhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5QDIuMS4wL25vZGVfbW9kdWxlcy9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeS9pbmRleC5qcwp2YXIgcmVxdWlyZV9mYXN0X2pzb25fc3RhYmxlX3N0cmluZ2lmeSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnlAMi4xLjAvbm9kZV9tb2R1bGVzL2Zhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5L2luZGV4LmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZGF0YSwgb3B0cykgewogICAgICBpZiAoIW9wdHMpIG9wdHMgPSB7fTsKICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAiZnVuY3Rpb24iKSBvcHRzID0geyBjbXA6IG9wdHMgfTsKICAgICAgdmFyIGN5Y2xlcyA9IHR5cGVvZiBvcHRzLmN5Y2xlcyA9PT0gImJvb2xlYW4iID8gb3B0cy5jeWNsZXMgOiBmYWxzZTsKICAgICAgdmFyIGNtcCA9IG9wdHMuY21wICYmIC8qIEBfX1BVUkVfXyAqLyAoZnVuY3Rpb24oZjcpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24obm9kZTIpIHsKICAgICAgICAgIHJldHVybiBmdW5jdGlvbihhNSwgYjUpIHsKICAgICAgICAgICAgdmFyIGFvYmogPSB7IGtleTogYTUsIHZhbHVlOiBub2RlMlthNV0gfTsKICAgICAgICAgICAgdmFyIGJvYmogPSB7IGtleTogYjUsIHZhbHVlOiBub2RlMltiNV0gfTsKICAgICAgICAgICAgcmV0dXJuIGY3KGFvYmosIGJvYmopOwogICAgICAgICAgfTsKICAgICAgICB9OwogICAgICB9KShvcHRzLmNtcCk7CiAgICAgIHZhciBzZWVuID0gW107CiAgICAgIHJldHVybiAoZnVuY3Rpb24gc3RyaW5naWZ5NShub2RlMikgewogICAgICAgIGlmIChub2RlMiAmJiBub2RlMi50b0pTT04gJiYgdHlwZW9mIG5vZGUyLnRvSlNPTiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgbm9kZTIgPSBub2RlMi50b0pTT04oKTsKICAgICAgICB9CiAgICAgICAgaWYgKG5vZGUyID09PSB2b2lkIDApIHJldHVybjsKICAgICAgICBpZiAodHlwZW9mIG5vZGUyID09ICJudW1iZXIiKSByZXR1cm4gaXNGaW5pdGUobm9kZTIpID8gIiIgKyBub2RlMiA6ICJudWxsIjsKICAgICAgICBpZiAodHlwZW9mIG5vZGUyICE9PSAib2JqZWN0IikgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG5vZGUyKTsKICAgICAgICB2YXIgaTExLCBvdXQ7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZTIpKSB7CiAgICAgICAgICBvdXQgPSAiWyI7CiAgICAgICAgICBmb3IgKGkxMSA9IDA7IGkxMSA8IG5vZGUyLmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgICAgaWYgKGkxMSkgb3V0ICs9ICIsIjsKICAgICAgICAgICAgb3V0ICs9IHN0cmluZ2lmeTUobm9kZTJbaTExXSkgfHwgIm51bGwiOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG91dCArICJdIjsKICAgICAgICB9CiAgICAgICAgaWYgKG5vZGUyID09PSBudWxsKSByZXR1cm4gIm51bGwiOwogICAgICAgIGlmIChzZWVuLmluZGV4T2Yobm9kZTIpICE9PSAtMSkgewogICAgICAgICAgaWYgKGN5Y2xlcykgcmV0dXJuIEpTT04uc3RyaW5naWZ5KCJfX2N5Y2xlX18iKTsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT04iKTsKICAgICAgICB9CiAgICAgICAgdmFyIHNlZW5JbmRleCA9IHNlZW4ucHVzaChub2RlMikgLSAxOwogICAgICAgIHZhciBrZXlzMiA9IE9iamVjdC5rZXlzKG5vZGUyKS5zb3J0KGNtcCAmJiBjbXAobm9kZTIpKTsKICAgICAgICBvdXQgPSAiIjsKICAgICAgICBmb3IgKGkxMSA9IDA7IGkxMSA8IGtleXMyLmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgIHZhciBrZXkyID0ga2V5czJbaTExXTsKICAgICAgICAgIHZhciB2YWx1ZTIgPSBzdHJpbmdpZnk1KG5vZGUyW2tleTJdKTsKICAgICAgICAgIGlmICghdmFsdWUyKSBjb250aW51ZTsKICAgICAgICAgIGlmIChvdXQpIG91dCArPSAiLCI7CiAgICAgICAgICBvdXQgKz0gSlNPTi5zdHJpbmdpZnkoa2V5MikgKyAiOiIgKyB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHNlZW4uc3BsaWNlKHNlZW5JbmRleCwgMSk7CiAgICAgICAgcmV0dXJuICJ7IiArIG91dCArICJ9IjsKICAgICAgfSkoZGF0YSk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRqc29uQDUuMi4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGpzb24vZGlzdF90cy9zbWFydGpzb24ucGx1Z2lucy5qcwp2YXIgaW1wb3J0X2xvZGFzaCwgaW1wb3J0X2Zhc3RfanNvbl9zdGFibGVfc3RyaW5naWZ5LCBzdGFibGVKc29uOwp2YXIgaW5pdF9zbWFydGpzb25fcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0anNvbkA1LjIuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRqc29uL2Rpc3RfdHMvc21hcnRqc29uLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMTAoKTsKICAgIGluaXRfZGlzdF90czExKCk7CiAgICBpbXBvcnRfbG9kYXNoID0gX190b0VTTShyZXF1aXJlX2xvZGFzaCgpLCAxKTsKICAgIGltcG9ydF9mYXN0X2pzb25fc3RhYmxlX3N0cmluZ2lmeSA9IF9fdG9FU00ocmVxdWlyZV9mYXN0X2pzb25fc3RhYmxlX3N0cmluZ2lmeSgpLCAxKTsKICAgIHN0YWJsZUpzb24gPSBpbXBvcnRfZmFzdF9qc29uX3N0YWJsZV9zdHJpbmdpZnkuZGVmYXVsdDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0anNvbkA1LjIuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRqc29uL2Rpc3RfdHMvYnVmZmVyaGFuZGxpbmcuanMKZnVuY3Rpb24gYmFzZTY0RW5jb2RlKGRhdGEpIHsKICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gInVuZGVmaW5lZCIpIHsKICAgIHJldHVybiBCdWZmZXIuZnJvbShkYXRhKS50b1N0cmluZygiYmFzZTY0Iik7CiAgfQogIHJldHVybiBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uZGF0YSkpOwp9CmZ1bmN0aW9uIGJhc2U2NERlY29kZShzdHIpIHsKICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gInVuZGVmaW5lZCIpIHsKICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHN0ciwgImJhc2U2NCIpOwogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1Zi5idWZmZXIsIGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZUxlbmd0aCk7CiAgfQogIHJldHVybiBuZXcgVWludDhBcnJheShBcnJheS5mcm9tKGF0b2Ioc3RyKSkubWFwKChjaGFyKSA9PiBjaGFyLmNoYXJDb2RlQXQoMCkpKTsKfQpmdW5jdGlvbiBzdHJpbmdpZnkodmFsdWUyLCBzcGFjZTIpIHsKICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUyLCByZXBsYWNlciwgc3BhY2UyKTsKfQpmdW5jdGlvbiBwYXJzZTIodGV4dDkpIHsKICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0OSwgcmV2aXZlcik7Cn0KZnVuY3Rpb24gaXNFbmNvZGVkQnVmZmVyKHgzKSB7CiAgcmV0dXJuIGlzT2JqZWN0KHgzKSAmJiB4My50eXBlID09PSAiRW5jb2RlZEJ1ZmZlciIgJiYgaXNTdHJpbmcoeDMuZGF0YSk7Cn0KZnVuY3Rpb24gaXNCdWZmZXJMaWtlMih4MykgewogIHJldHVybiBpc09iamVjdCh4MykgJiYgKHgzLnR5cGUgPT09ICJCdWZmZXIiICYmIChpc0FycmF5Mih4My5kYXRhKSB8fCBpc1N0cmluZyh4My5kYXRhKSkpIHx8IHgzIGluc3RhbmNlb2YgVWludDhBcnJheTsKfQpmdW5jdGlvbiBpc0FycmF5Mih4MykgewogIHJldHVybiBBcnJheS5pc0FycmF5KHgzKTsKfQpmdW5jdGlvbiBpc1N0cmluZyh4MykgewogIHJldHVybiB0eXBlb2YgeDMgPT09ICJzdHJpbmciOwp9CmZ1bmN0aW9uIGlzT2JqZWN0KHgzKSB7CiAgcmV0dXJuIHR5cGVvZiB4MyA9PT0gIm9iamVjdCIgJiYgeDMgIT09IG51bGw7Cn0KdmFyIHJlcGxhY2VyLCByZXZpdmVyOwp2YXIgaW5pdF9idWZmZXJoYW5kbGluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0anNvbkA1LjIuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRqc29uL2Rpc3RfdHMvYnVmZmVyaGFuZGxpbmcuanMiKCkgewogICAgaW5pdF9zbWFydGpzb25fcGx1Z2lucygpOwogICAgcmVwbGFjZXIgPSAoa2V5MiwgdmFsdWUyKSA9PiB7CiAgICAgIGlmIChpc0J1ZmZlckxpa2UyKHZhbHVlMikpIHsKICAgICAgICBsZXQgYnVmZmVyRGF0YTsKICAgICAgICBpZiAoImRhdGEiIGluIHZhbHVlMiAmJiBpc0FycmF5Mih2YWx1ZTIuZGF0YSkpIHsKICAgICAgICAgIGJ1ZmZlckRhdGEgPSBuZXcgVWludDhBcnJheSh2YWx1ZTIuZGF0YSk7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZTIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7CiAgICAgICAgICBidWZmZXJEYXRhID0gdmFsdWUyOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBjb25zdCBiYXNlNjREYXRhID0gImJhc2U2NDoiICsgYmFzZTY0RW5jb2RlKGJ1ZmZlckRhdGEpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiAiRW5jb2RlZEJ1ZmZlciIsCiAgICAgICAgICBkYXRhOiBiYXNlNjREYXRhCiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWUyOwogICAgfTsKICAgIHJldml2ZXIgPSAoa2V5MiwgdmFsdWUyKSA9PiB7CiAgICAgIGlmIChpc0VuY29kZWRCdWZmZXIodmFsdWUyKSkgewogICAgICAgIGlmIChpc1N0cmluZyh2YWx1ZTIuZGF0YSkgJiYgdmFsdWUyLmRhdGEuc3RhcnRzV2l0aCgiYmFzZTY0OiIpKSB7CiAgICAgICAgICBjb25zdCBiYXNlNjREYXRhID0gdmFsdWUyLmRhdGEuc2xpY2UoNyk7CiAgICAgICAgICBjb25zdCBidWZmZXIyID0gYmFzZTY0RGVjb2RlKGJhc2U2NERhdGEpOwogICAgICAgICAgcmV0dXJuIGJ1ZmZlcjI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB2YWx1ZTI7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRqc29uQDUuMi4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGpzb24vZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTIgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTIsIHsKICBTbWFydGpzb246ICgpID0+IFNtYXJ0anNvbiwKICBkZWVwRXF1YWxKc29uTFN0cmluZ3M6ICgpID0+IGRlZXBFcXVhbEpzb25MU3RyaW5ncywKICBkZWVwRXF1YWxPYmplY3RzOiAoKSA9PiBkZWVwRXF1YWxPYmplY3RzLAogIGZvbGREZWM6ICgpID0+IGZvbGREZWMsCiAgcGFyc2U6ICgpID0+IHBhcnNlMywKICBwYXJzZUJhc2U2NDogKCkgPT4gcGFyc2VCYXNlNjQsCiAgcGFyc2VKc29uTDogKCkgPT4gcGFyc2VKc29uTCwKICBzdGFibGVPbmVXYXlTdHJpbmdpZnk6ICgpID0+IHN0YWJsZU9uZVdheVN0cmluZ2lmeSwKICBzdHJpbmdpZnk6ICgpID0+IHN0cmluZ2lmeTIsCiAgc3RyaW5naWZ5QmFzZTY0OiAoKSA9PiBzdHJpbmdpZnlCYXNlNjQsCiAgc3RyaW5naWZ5SnNvbkw6ICgpID0+IHN0cmluZ2lmeUpzb25MLAogIHN0cmluZ2lmeVByZXR0eTogKCkgPT4gc3RyaW5naWZ5UHJldHR5Cn0pOwp2YXIgcGFyc2UzLCBwYXJzZUpzb25MLCBzdHJpbmdpZnlKc29uTCwgc3RhYmxlT25lV2F5U3RyaW5naWZ5LCBzdHJpbmdpZnkyLCBzdHJpbmdpZnlQcmV0dHksIHN0cmluZ2lmeUJhc2U2NCwgcGFyc2VCYXNlNjQsIFNtYXJ0anNvbiwgZm9sZERlYywgZGVlcEVxdWFsT2JqZWN0cywgZGVlcEVxdWFsSnNvbkxTdHJpbmdzOwp2YXIgaW5pdF9kaXN0X3RzMTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGpzb25ANS4yLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0anNvbi9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRqc29uX3BsdWdpbnMoKTsKICAgIGluaXRfYnVmZmVyaGFuZGxpbmcoKTsKICAgIHBhcnNlMyA9IHBhcnNlMjsKICAgIHBhcnNlSnNvbkwgPSAoanNvbmxEYXRhKSA9PiB7CiAgICAgIGNvbnN0IGxpbmVzID0ganNvbmxEYXRhLnNwbGl0KCJcbiIpOwogICAgICBjb25zdCBwYXJzZWREYXRhID0gbGluZXMucmVkdWNlKChhY2MsIGxpbmUpID0+IHsKICAgICAgICBjb25zdCB0cmltbWVkID0gbGluZS50cmltKCk7CiAgICAgICAgaWYgKHRyaW1tZWQubGVuZ3RoID4gMCkgewogICAgICAgICAgYWNjLnB1c2gocGFyc2UzKHRyaW1tZWQpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgfSwgW10pOwogICAgICByZXR1cm4gcGFyc2VkRGF0YTsKICAgIH07CiAgICBzdHJpbmdpZnlKc29uTCA9IChpdGVtcykgPT4gewogICAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtKSA9PiBzdHJpbmdpZnkyKGl0ZW0pKS5qb2luKCJcbiIpOwogICAgfTsKICAgIHN0YWJsZU9uZVdheVN0cmluZ2lmeSA9IChvYmpBcmcsIHNpbXBsZU9yZGVyQXJyYXksIG9wdGlvbnNBcmcgPSB7fSkgPT4gewogICAgICBjb25zdCB2aXNpdGVkID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCk7CiAgICAgIGNvbnN0IHNhbml0aXplMiA9ICh2YWwpID0+IHsKICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgIT09ICJvYmplY3QiKSB7CiAgICAgICAgICByZXR1cm4gdmFsOwogICAgICAgIH0KICAgICAgICBjb25zdCByZXBsYWNlZCA9IHJlcGxhY2VyKCIiLCB2YWwpOwogICAgICAgIGlmIChyZXBsYWNlZCAmJiByZXBsYWNlZC50eXBlID09PSAiRW5jb2RlZEJ1ZmZlciIgJiYgdHlwZW9mIHJlcGxhY2VkLmRhdGEgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICByZXR1cm4gcmVwbGFjZWQ7CiAgICAgICAgfQogICAgICAgIGlmICh2aXNpdGVkLmhhcyh2YWwpKSB7CiAgICAgICAgICByZXR1cm4gIl9fY3ljbGVfXyI7CiAgICAgICAgfQogICAgICAgIHZpc2l0ZWQuYWRkKHZhbCk7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkgewogICAgICAgICAgcmV0dXJuIHZhbC5tYXAoKGl0ZW0pID0+IHNhbml0aXplMihpdGVtKSk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG91dCA9IHt9OwogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBPYmplY3Qua2V5cyh2YWwpKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBvdXRba2V5Ml0gPSBzYW5pdGl6ZTIodmFsW2tleTJdKTsKICAgICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgICBvdXRba2V5Ml0gPSAiX191bnNlcmlhbGl6YWJsZV9fIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG91dDsKICAgICAgfTsKICAgICAgY29uc3Qgb2JqID0gc2FuaXRpemUyKG9iakFyZyk7CiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7CiAgICAgICAgLi4ub3B0aW9uc0FyZywKICAgICAgICBjeWNsZXM6IHRydWUKICAgICAgfTsKICAgICAgaWYgKHNpbXBsZU9yZGVyQXJyYXkgJiYgIW9wdGlvbnMuY21wKSB7CiAgICAgICAgY29uc3Qgb3JkZXIyID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgICBzaW1wbGVPcmRlckFycmF5LmZvckVhY2goKGtleTIsIGlkeCkgPT4gb3JkZXIyLnNldChrZXkyLCBpZHgpKTsKICAgICAgICBvcHRpb25zLmNtcCA9IChhNSwgYjUpID0+IHsKICAgICAgICAgIGNvbnN0IGFJZHggPSBvcmRlcjIuaGFzKGE1LmtleSkgPyBvcmRlcjIuZ2V0KGE1LmtleSkgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgICAgICAgICBjb25zdCBiSWR4ID0gb3JkZXIyLmhhcyhiNS5rZXkpID8gb3JkZXIyLmdldChiNS5rZXkpIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwogICAgICAgICAgaWYgKGFJZHggIT09IGJJZHgpCiAgICAgICAgICAgIHJldHVybiBhSWR4IC0gYklkeDsKICAgICAgICAgIHJldHVybiBhNS5rZXkgPCBiNS5rZXkgPyAtMSA6IGE1LmtleSA+IGI1LmtleSA/IDEgOiAwOwogICAgICAgIH07CiAgICAgIH0KICAgICAgcmV0dXJuIHN0YWJsZUpzb24ob2JqLCBvcHRpb25zKTsKICAgIH07CiAgICBzdHJpbmdpZnkyID0gKG9iakFyZywgc2ltcGxlT3JkZXJBcnJheSwgb3B0aW9uc0FyZyA9IHt9KSA9PiB7CiAgICAgIGNvbnN0IGJ1ZmZlcmVkSnNvbiA9IHN0cmluZ2lmeShvYmpBcmcpOwogICAgICBvYmpBcmcgPSBKU09OLnBhcnNlKGJ1ZmZlcmVkSnNvbik7CiAgICAgIGxldCBvcHRpb25zID0geyAuLi5vcHRpb25zQXJnIH07CiAgICAgIGlmIChzaW1wbGVPcmRlckFycmF5ICYmICFvcHRpb25zLmNtcCkgewogICAgICAgIGNvbnN0IG9yZGVyMiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgICAgc2ltcGxlT3JkZXJBcnJheS5mb3JFYWNoKChrZXkyLCBpZHgpID0+IG9yZGVyMi5zZXQoa2V5MiwgaWR4KSk7CiAgICAgICAgb3B0aW9ucy5jbXAgPSAoYTUsIGI1KSA9PiB7CiAgICAgICAgICBjb25zdCBhSWR4ID0gb3JkZXIyLmhhcyhhNS5rZXkpID8gb3JkZXIyLmdldChhNS5rZXkpIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwogICAgICAgICAgY29uc3QgYklkeCA9IG9yZGVyMi5oYXMoYjUua2V5KSA/IG9yZGVyMi5nZXQoYjUua2V5KSA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKICAgICAgICAgIGlmIChhSWR4ICE9PSBiSWR4KQogICAgICAgICAgICByZXR1cm4gYUlkeCAtIGJJZHg7CiAgICAgICAgICByZXR1cm4gYTUua2V5IDwgYjUua2V5ID8gLTEgOiBhNS5rZXkgPiBiNS5rZXkgPyAxIDogMDsKICAgICAgICB9OwogICAgICB9CiAgICAgIGxldCByZXR1cm5Kc29uID0gc3RhYmxlSnNvbihvYmpBcmcsIG9wdGlvbnMpOwogICAgICByZXR1cm4gcmV0dXJuSnNvbjsKICAgIH07CiAgICBzdHJpbmdpZnlQcmV0dHkgPSAob2JqZWN0QXJnKSA9PiB7CiAgICAgIGNvbnN0IHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5MihvYmplY3RBcmcpOwogICAgICBjb25zdCBvYmplY3QgPSBKU09OLnBhcnNlKHN0cmluZ2lmaWVkKTsKICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iamVjdCwgbnVsbCwgMik7CiAgICB9OwogICAgc3RyaW5naWZ5QmFzZTY0ID0gKC4uLmFyZ3MpID0+IHsKICAgICAgY29uc3Qgc3RyaW5naWZpZWRSZXN1bHQgPSBzdHJpbmdpZnkyKC4uLmFyZ3MpOwogICAgICByZXR1cm4gZGlzdF90c19leHBvcnRzMTEuYmFzZTY0LmVuY29kZVVyaShzdHJpbmdpZmllZFJlc3VsdCk7CiAgICB9OwogICAgcGFyc2VCYXNlNjQgPSAoYmFzZTY0SnNvblN0cmluZ0FyZykgPT4gewogICAgICBjb25zdCBiYXNlNjQyID0gZGlzdF90c19leHBvcnRzMTEuYmFzZTY0OwogICAgICBjb25zdCBkZWNvZGVGbiA9IGJhc2U2NDIuZGVjb2RlVXJpIHx8IGJhc2U2NDIuZGVjb2RlOwogICAgICBjb25zdCBzaW1wbGVTdHJpbmdpZmllZCA9IGRlY29kZUZuKGJhc2U2NEpzb25TdHJpbmdBcmcpOwogICAgICByZXR1cm4gcGFyc2UzKHNpbXBsZVN0cmluZ2lmaWVkKTsKICAgIH07CiAgICBTbWFydGpzb24gPSBjbGFzcyBfU21hcnRqc29uIHsKICAgICAgLyoqCiAgICAgICAqIGVuZm9sZHMgZGF0YSBmcm9tIGFuIG9iamVjdAogICAgICAgKi8KICAgICAgc3RhdGljIGVuZm9sZEZyb21PYmplY3Qob2JqZWN0QXJnKSB7CiAgICAgICAgY29uc3QgbmV3SW5zdGFuY2UgPSBuZXcgdGhpcygpOwogICAgICAgIGNvbnN0IHNhdmVhYmxlcyA9IG5ld0luc3RhbmNlLnNhdmVhYmxlUHJvcGVydGllcyB8fCBbXTsKICAgICAgICBmb3IgKGNvbnN0IGtleU5hbWUgaW4gb2JqZWN0QXJnKSB7CiAgICAgICAgICBpZiAoc2F2ZWFibGVzLmluZGV4T2Yoa2V5TmFtZSkgIT09IC0xKSB7CiAgICAgICAgICAgIG5ld0luc3RhbmNlW2tleU5hbWVdID0gb2JqZWN0QXJnW2tleU5hbWVdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3SW5zdGFuY2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGVuZm9sZCBmcm9tIGpzb24KICAgICAgICovCiAgICAgIHN0YXRpYyBlbmZvbGRGcm9tSnNvbihqc29uQXJnKSB7CiAgICAgICAgY29uc3Qgb2JqZWN0RnJvbUpzb24gPSBwYXJzZTMoanNvbkFyZyk7CiAgICAgICAgcmV0dXJuIHRoaXMuZW5mb2xkRnJvbU9iamVjdChvYmplY3RGcm9tSnNvbik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZvbGRzIGEgY2xhc3MgaW50byBhbiBvYmplY3QKICAgICAgICovCiAgICAgIGZvbGRUb09iamVjdCgpIHsKICAgICAgICBjb25zdCB0cmFja1NldCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgICAgICAgdHJhY2tTZXQuYWRkKHRoaXMpOwogICAgICAgIHJldHVybiB0aGlzLmZvbGRUb09iamVjdEludGVybmFsKHRyYWNrU2V0KTsKICAgICAgfQogICAgICBmb2xkVG9PYmplY3RJbnRlcm5hbCh0cmFja1NldCkgewogICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9OwogICAgICAgIGNvbnN0IGZvbGRWYWx1ZSA9ICh2YWwpID0+IHsKICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBfU21hcnRqc29uKSB7CiAgICAgICAgICAgIGlmICh0cmFja1NldC5oYXModmFsKSkgewogICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiY3ljbGUgZGV0ZWN0ZWQiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0cmFja1NldC5hZGQodmFsKTsKICAgICAgICAgICAgcmV0dXJuIHZhbC5mb2xkVG9PYmplY3RJbnRlcm5hbCh0cmFja1NldCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB2YWwubWFwKChpdGVtKSA9PiBmb2xkVmFsdWUoaXRlbSkpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGltcG9ydF9sb2Rhc2guZGVmYXVsdCh2YWwpOwogICAgICAgIH07CiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnNhdmVhYmxlUHJvcGVydGllcyB8fCBbXTsKICAgICAgICBmb3IgKGNvbnN0IGtleU5hbWUgb2YgcHJvcHMpIHsKICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IHRoaXNba2V5TmFtZV07CiAgICAgICAgICByZXN1bHRba2V5TmFtZV0gPSBmb2xkVmFsdWUodmFsdWUyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogZm9sZHMgYSBjbGFzcyBpbnRvIGFuIG9iamVjdAogICAgICAgKi8KICAgICAgZm9sZFRvSnNvbigpIHsKICAgICAgICBjb25zdCBmb2xkZWRPYmplY3QgPSB0aGlzLmZvbGRUb09iamVjdCgpOwogICAgICAgIHJldHVybiBzdHJpbmdpZnkyKGZvbGRlZE9iamVjdCk7CiAgICAgIH0KICAgIH07CiAgICBmb2xkRGVjID0gKCkgPT4gewogICAgICByZXR1cm4gKHRhcmdldCwga2V5MikgPT4gewogICAgICAgIGlmICghdGFyZ2V0LnNhdmVhYmxlUHJvcGVydGllcykgewogICAgICAgICAgdGFyZ2V0LnNhdmVhYmxlUHJvcGVydGllcyA9IFtdOwogICAgICAgIH0KICAgICAgICB0YXJnZXQuc2F2ZWFibGVQcm9wZXJ0aWVzLnB1c2goa2V5Mik7CiAgICAgIH07CiAgICB9OwogICAgZGVlcEVxdWFsT2JqZWN0cyA9IChvYmplY3QxLCBvYmplY3QyKSA9PiB7CiAgICAgIGNvbnN0IG9iamVjdDFTdHJpbmcgPSBzdHJpbmdpZnkyKG9iamVjdDEpOwogICAgICBjb25zdCBvYmplY3QyU3RyaW5nID0gc3RyaW5naWZ5MihvYmplY3QyKTsKICAgICAgcmV0dXJuIG9iamVjdDFTdHJpbmcgPT09IG9iamVjdDJTdHJpbmc7CiAgICB9OwogICAgZGVlcEVxdWFsSnNvbkxTdHJpbmdzID0gKGpzb25MU3RyaW5nMSwganNvbkxTdHJpbmcyKSA9PiB7CiAgICAgIGNvbnN0IGZpcnN0QXJyYXkgPSBwYXJzZUpzb25MKGpzb25MU3RyaW5nMSk7CiAgICAgIGNvbnN0IHNlY29uZEFycmF5ID0gcGFyc2VKc29uTChqc29uTFN0cmluZzIpOwogICAgICByZXR1cm4gZGVlcEVxdWFsT2JqZWN0cyhmaXJzdEFycmF5LCBzZWNvbmRBcnJheSk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgraWRiQDguMC4zL25vZGVfbW9kdWxlcy9AdGVtcGZpeC9pZGIvYnVpbGQvaW5kZXguanMKdmFyIGJ1aWxkX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoYnVpbGRfZXhwb3J0cywgewogIGRlbGV0ZURCOiAoKSA9PiBkZWxldGVEQiwKICBvcGVuREI6ICgpID0+IG9wZW5EQiwKICB1bndyYXA6ICgpID0+IHVud3JhcCwKICB3cmFwOiAoKSA9PiB3cmFwCn0pOwpmdW5jdGlvbiBnZXRJZGJQcm94eWFibGVUeXBlcygpIHsKICByZXR1cm4gaWRiUHJveHlhYmxlVHlwZXMgfHwgKGlkYlByb3h5YWJsZVR5cGVzID0gWwogICAgSURCRGF0YWJhc2UsCiAgICBJREJPYmplY3RTdG9yZSwKICAgIElEQkluZGV4LAogICAgSURCQ3Vyc29yLAogICAgSURCVHJhbnNhY3Rpb24KICBdKTsKfQpmdW5jdGlvbiBnZXRDdXJzb3JBZHZhbmNlTWV0aG9kcygpIHsKICByZXR1cm4gY3Vyc29yQWR2YW5jZU1ldGhvZHMgfHwgKGN1cnNvckFkdmFuY2VNZXRob2RzID0gWwogICAgSURCQ3Vyc29yLnByb3RvdHlwZS5hZHZhbmNlLAogICAgSURCQ3Vyc29yLnByb3RvdHlwZS5jb250aW51ZSwKICAgIElEQkN1cnNvci5wcm90b3R5cGUuY29udGludWVQcmltYXJ5S2V5CiAgXSk7Cn0KZnVuY3Rpb24gcHJvbWlzaWZ5UmVxdWVzdChyZXF1ZXN0KSB7CiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICBjb25zdCB1bmxpc3RlbiA9ICgpID0+IHsKICAgICAgcmVxdWVzdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzdWNjZXNzIiwgc3VjY2Vzcyk7CiAgICAgIHJlcXVlc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBlcnJvcik7CiAgICB9OwogICAgY29uc3Qgc3VjY2VzcyA9ICgpID0+IHsKICAgICAgcmVzb2x2ZTIod3JhcChyZXF1ZXN0LnJlc3VsdCkpOwogICAgICB1bmxpc3RlbigpOwogICAgfTsKICAgIGNvbnN0IGVycm9yID0gKCkgPT4gewogICAgICByZWplY3QocmVxdWVzdC5lcnJvcik7CiAgICAgIHVubGlzdGVuKCk7CiAgICB9OwogICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCJzdWNjZXNzIiwgc3VjY2Vzcyk7CiAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwgZXJyb3IpOwogIH0pOwogIHJldmVyc2VUcmFuc2Zvcm1DYWNoZS5zZXQocHJvbWlzZSwgcmVxdWVzdCk7CiAgcmV0dXJuIHByb21pc2U7Cn0KZnVuY3Rpb24gY2FjaGVEb25lUHJvbWlzZUZvclRyYW5zYWN0aW9uKHR4KSB7CiAgaWYgKHRyYW5zYWN0aW9uRG9uZU1hcC5oYXModHgpKQogICAgcmV0dXJuOwogIGNvbnN0IGRvbmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgY29uc3QgdW5saXN0ZW4gPSAoKSA9PiB7CiAgICAgIHR4LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbXBsZXRlIiwgY29tcGxldGUpOwogICAgICB0eC5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsIGVycm9yKTsKICAgICAgdHgucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCBlcnJvcik7CiAgICB9OwogICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7CiAgICAgIHJlc29sdmUyKCk7CiAgICAgIHVubGlzdGVuKCk7CiAgICB9OwogICAgY29uc3QgZXJyb3IgPSAoKSA9PiB7CiAgICAgIHJlamVjdCh0eC5lcnJvciB8fCBuZXcgRE9NRXhjZXB0aW9uKCJBYm9ydEVycm9yIiwgIkFib3J0RXJyb3IiKSk7CiAgICAgIHVubGlzdGVuKCk7CiAgICB9OwogICAgdHguYWRkRXZlbnRMaXN0ZW5lcigiY29tcGxldGUiLCBjb21wbGV0ZSk7CiAgICB0eC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsIGVycm9yKTsKICAgIHR4LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwgZXJyb3IpOwogIH0pOwogIHRyYW5zYWN0aW9uRG9uZU1hcC5zZXQodHgsIGRvbmUpOwp9CmZ1bmN0aW9uIHJlcGxhY2VUcmFwcyhjYWxsYmFjaykgewogIGlkYlByb3h5VHJhcHMgPSBjYWxsYmFjayhpZGJQcm94eVRyYXBzKTsKfQpmdW5jdGlvbiB3cmFwRnVuY3Rpb24oZnVuYykgewogIGlmIChnZXRDdXJzb3JBZHZhbmNlTWV0aG9kcygpLmluY2x1ZGVzKGZ1bmMpKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oLi4uYXJncykgewogICAgICBmdW5jLmFwcGx5KHVud3JhcCh0aGlzKSwgYXJncyk7CiAgICAgIHJldHVybiB3cmFwKHRoaXMucmVxdWVzdCk7CiAgICB9OwogIH0KICByZXR1cm4gZnVuY3Rpb24oLi4uYXJncykgewogICAgcmV0dXJuIHdyYXAoZnVuYy5hcHBseSh1bndyYXAodGhpcyksIGFyZ3MpKTsKICB9Owp9CmZ1bmN0aW9uIHRyYW5zZm9ybUNhY2hhYmxlVmFsdWUodmFsdWUyKSB7CiAgaWYgKHR5cGVvZiB2YWx1ZTIgPT09ICJmdW5jdGlvbiIpCiAgICByZXR1cm4gd3JhcEZ1bmN0aW9uKHZhbHVlMik7CiAgaWYgKHZhbHVlMiBpbnN0YW5jZW9mIElEQlRyYW5zYWN0aW9uKQogICAgY2FjaGVEb25lUHJvbWlzZUZvclRyYW5zYWN0aW9uKHZhbHVlMik7CiAgaWYgKGluc3RhbmNlT2ZBbnkodmFsdWUyLCBnZXRJZGJQcm94eWFibGVUeXBlcygpKSkKICAgIHJldHVybiBuZXcgUHJveHkodmFsdWUyLCBpZGJQcm94eVRyYXBzKTsKICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIHdyYXAodmFsdWUyKSB7CiAgaWYgKHZhbHVlMiBpbnN0YW5jZW9mIElEQlJlcXVlc3QpCiAgICByZXR1cm4gcHJvbWlzaWZ5UmVxdWVzdCh2YWx1ZTIpOwogIGlmICh0cmFuc2Zvcm1DYWNoZS5oYXModmFsdWUyKSkKICAgIHJldHVybiB0cmFuc2Zvcm1DYWNoZS5nZXQodmFsdWUyKTsKICBjb25zdCBuZXdWYWx1ZSA9IHRyYW5zZm9ybUNhY2hhYmxlVmFsdWUodmFsdWUyKTsKICBpZiAobmV3VmFsdWUgIT09IHZhbHVlMikgewogICAgdHJhbnNmb3JtQ2FjaGUuc2V0KHZhbHVlMiwgbmV3VmFsdWUpOwogICAgcmV2ZXJzZVRyYW5zZm9ybUNhY2hlLnNldChuZXdWYWx1ZSwgdmFsdWUyKTsKICB9CiAgcmV0dXJuIG5ld1ZhbHVlOwp9CmZ1bmN0aW9uIG9wZW5EQihuYW1lLCB2ZXJzaW9uMiwgeyBibG9ja2VkLCB1cGdyYWRlLCBibG9ja2luZywgdGVybWluYXRlZCB9ID0ge30pIHsKICBjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4obmFtZSwgdmVyc2lvbjIpOwogIGNvbnN0IG9wZW5Qcm9taXNlID0gd3JhcChyZXF1ZXN0KTsKICBpZiAodXBncmFkZSkgewogICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCJ1cGdyYWRlbmVlZGVkIiwgKGV2ZW50KSA9PiB7CiAgICAgIHVwZ3JhZGUod3JhcChyZXF1ZXN0LnJlc3VsdCksIGV2ZW50Lm9sZFZlcnNpb24sIGV2ZW50Lm5ld1ZlcnNpb24sIHdyYXAocmVxdWVzdC50cmFuc2FjdGlvbiksIGV2ZW50KTsKICAgIH0pOwogIH0KICBpZiAoYmxvY2tlZCkgewogICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCJibG9ja2VkIiwgKGV2ZW50KSA9PiBibG9ja2VkKAogICAgICAvLyBDYXN0aW5nIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQtRE9NLWxpYi1nZW5lcmF0b3IvcHVsbC8xNDA1CiAgICAgIGV2ZW50Lm9sZFZlcnNpb24sCiAgICAgIGV2ZW50Lm5ld1ZlcnNpb24sCiAgICAgIGV2ZW50CiAgICApKTsKICB9CiAgb3BlblByb21pc2UudGhlbigoZGIpID0+IHsKICAgIGlmICh0ZXJtaW5hdGVkKQogICAgICBkYi5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsICgpID0+IHRlcm1pbmF0ZWQoKSk7CiAgICBpZiAoYmxvY2tpbmcpIHsKICAgICAgZGIuYWRkRXZlbnRMaXN0ZW5lcigidmVyc2lvbmNoYW5nZSIsIChldmVudCkgPT4gYmxvY2tpbmcoZXZlbnQub2xkVmVyc2lvbiwgZXZlbnQubmV3VmVyc2lvbiwgZXZlbnQpKTsKICAgIH0KICB9KS5jYXRjaCgoKSA9PiB7CiAgfSk7CiAgcmV0dXJuIG9wZW5Qcm9taXNlOwp9CmZ1bmN0aW9uIGRlbGV0ZURCKG5hbWUsIHsgYmxvY2tlZCB9ID0ge30pIHsKICBjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKG5hbWUpOwogIGlmIChibG9ja2VkKSB7CiAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoImJsb2NrZWQiLCAoZXZlbnQpID0+IGJsb2NrZWQoCiAgICAgIC8vIENhc3RpbmcgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC1ET00tbGliLWdlbmVyYXRvci9wdWxsLzE0MDUKICAgICAgZXZlbnQub2xkVmVyc2lvbiwKICAgICAgZXZlbnQKICAgICkpOwogIH0KICByZXR1cm4gd3JhcChyZXF1ZXN0KS50aGVuKCgpID0+IHZvaWQgMCk7Cn0KZnVuY3Rpb24gZ2V0TWV0aG9kKHRhcmdldCwgcHJvcCkgewogIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIElEQkRhdGFiYXNlICYmICEocHJvcCBpbiB0YXJnZXQpICYmIHR5cGVvZiBwcm9wID09PSAic3RyaW5nIikpIHsKICAgIHJldHVybjsKICB9CiAgaWYgKGNhY2hlZE1ldGhvZHMuZ2V0KHByb3ApKQogICAgcmV0dXJuIGNhY2hlZE1ldGhvZHMuZ2V0KHByb3ApOwogIGNvbnN0IHRhcmdldEZ1bmNOYW1lID0gcHJvcC5yZXBsYWNlKC9Gcm9tSW5kZXgkLywgIiIpOwogIGNvbnN0IHVzZUluZGV4ID0gcHJvcCAhPT0gdGFyZ2V0RnVuY05hbWU7CiAgY29uc3QgaXNXcml0ZSA9IHdyaXRlTWV0aG9kcy5pbmNsdWRlcyh0YXJnZXRGdW5jTmFtZSk7CiAgaWYgKAogICAgLy8gQmFpbCBpZiB0aGUgdGFyZ2V0IGRvZXNuJ3QgZXhpc3Qgb24gdGhlIHRhcmdldC4gRWcsIGdldEFsbCBpc24ndCBpbiBFZGdlLgogICAgISh0YXJnZXRGdW5jTmFtZSBpbiAodXNlSW5kZXggPyBJREJJbmRleCA6IElEQk9iamVjdFN0b3JlKS5wcm90b3R5cGUpIHx8ICEoaXNXcml0ZSB8fCByZWFkTWV0aG9kcy5pbmNsdWRlcyh0YXJnZXRGdW5jTmFtZSkpCiAgKSB7CiAgICByZXR1cm47CiAgfQogIGNvbnN0IG1ldGhvZCA9IGFzeW5jIGZ1bmN0aW9uKHN0b3JlTmFtZSwgLi4uYXJncykgewogICAgY29uc3QgdHggPSB0aGlzLnRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgaXNXcml0ZSA/ICJyZWFkd3JpdGUiIDogInJlYWRvbmx5Iik7CiAgICBsZXQgdGFyZ2V0MiA9IHR4LnN0b3JlOwogICAgaWYgKHVzZUluZGV4KQogICAgICB0YXJnZXQyID0gdGFyZ2V0Mi5pbmRleChhcmdzLnNoaWZ0KCkpOwogICAgcmV0dXJuIChhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgIHRhcmdldDJbdGFyZ2V0RnVuY05hbWVdKC4uLmFyZ3MpLAogICAgICBpc1dyaXRlICYmIHR4LmRvbmUKICAgIF0pKVswXTsKICB9OwogIGNhY2hlZE1ldGhvZHMuc2V0KHByb3AsIG1ldGhvZCk7CiAgcmV0dXJuIG1ldGhvZDsKfQphc3luYyBmdW5jdGlvbiogaXRlcmF0ZSguLi5hcmdzKSB7CiAgbGV0IGN1cnNvciA9IHRoaXM7CiAgaWYgKCEoY3Vyc29yIGluc3RhbmNlb2YgSURCQ3Vyc29yKSkgewogICAgY3Vyc29yID0gYXdhaXQgY3Vyc29yLm9wZW5DdXJzb3IoLi4uYXJncyk7CiAgfQogIGlmICghY3Vyc29yKQogICAgcmV0dXJuOwogIGN1cnNvciA9IGN1cnNvcjsKICBjb25zdCBwcm94aWVkQ3Vyc29yID0gbmV3IFByb3h5KGN1cnNvciwgY3Vyc29ySXRlcmF0b3JUcmFwcyk7CiAgaXR0clByb3hpZWRDdXJzb3JUb09yaWdpbmFsUHJveHkuc2V0KHByb3hpZWRDdXJzb3IsIGN1cnNvcik7CiAgcmV2ZXJzZVRyYW5zZm9ybUNhY2hlLnNldChwcm94aWVkQ3Vyc29yLCB1bndyYXAoY3Vyc29yKSk7CiAgd2hpbGUgKGN1cnNvcikgewogICAgeWllbGQgcHJveGllZEN1cnNvcjsKICAgIGN1cnNvciA9IGF3YWl0IChhZHZhbmNlUmVzdWx0cy5nZXQocHJveGllZEN1cnNvcikgfHwgY3Vyc29yLmNvbnRpbnVlKCkpOwogICAgYWR2YW5jZVJlc3VsdHMuZGVsZXRlKHByb3hpZWRDdXJzb3IpOwogIH0KfQpmdW5jdGlvbiBpc0l0ZXJhdG9yUHJvcCh0YXJnZXQsIHByb3ApIHsKICByZXR1cm4gcHJvcCA9PT0gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaW5zdGFuY2VPZkFueSh0YXJnZXQsIFtJREJJbmRleCwgSURCT2JqZWN0U3RvcmUsIElEQkN1cnNvcl0pIHx8IHByb3AgPT09ICJpdGVyYXRlIiAmJiBpbnN0YW5jZU9mQW55KHRhcmdldCwgW0lEQkluZGV4LCBJREJPYmplY3RTdG9yZV0pOwp9CnZhciBpbnN0YW5jZU9mQW55LCBpZGJQcm94eWFibGVUeXBlcywgY3Vyc29yQWR2YW5jZU1ldGhvZHMsIHRyYW5zYWN0aW9uRG9uZU1hcCwgdHJhbnNmb3JtQ2FjaGUsIHJldmVyc2VUcmFuc2Zvcm1DYWNoZSwgaWRiUHJveHlUcmFwcywgdW53cmFwLCByZWFkTWV0aG9kcywgd3JpdGVNZXRob2RzLCBjYWNoZWRNZXRob2RzLCBhZHZhbmNlTWV0aG9kUHJvcHMsIG1ldGhvZE1hcCwgYWR2YW5jZVJlc3VsdHMsIGl0dHJQcm94aWVkQ3Vyc29yVG9PcmlnaW5hbFByb3h5LCBjdXJzb3JJdGVyYXRvclRyYXBzOwp2YXIgaW5pdF9idWlsZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K2lkYkA4LjAuMy9ub2RlX21vZHVsZXMvQHRlbXBmaXgvaWRiL2J1aWxkL2luZGV4LmpzIigpIHsKICAgIGluc3RhbmNlT2ZBbnkgPSAob2JqZWN0LCBjb25zdHJ1Y3RvcnMpID0+IGNvbnN0cnVjdG9ycy5zb21lKChjMTEpID0+IG9iamVjdCBpbnN0YW5jZW9mIGMxMSk7CiAgICB0cmFuc2FjdGlvbkRvbmVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIHRyYW5zZm9ybUNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgICByZXZlcnNlVHJhbnNmb3JtQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIGlkYlByb3h5VHJhcHMgPSB7CiAgICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7CiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIElEQlRyYW5zYWN0aW9uKSB7CiAgICAgICAgICBpZiAocHJvcCA9PT0gImRvbmUiKQogICAgICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb25Eb25lTWFwLmdldCh0YXJnZXQpOwogICAgICAgICAgaWYgKHByb3AgPT09ICJzdG9yZSIpIHsKICAgICAgICAgICAgcmV0dXJuIHJlY2VpdmVyLm9iamVjdFN0b3JlTmFtZXNbMV0gPyB2b2lkIDAgOiByZWNlaXZlci5vYmplY3RTdG9yZShyZWNlaXZlci5vYmplY3RTdG9yZU5hbWVzWzBdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHdyYXAodGFyZ2V0W3Byb3BdKTsKICAgICAgfSwKICAgICAgc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUyKSB7CiAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWUyOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9LAogICAgICBoYXModGFyZ2V0LCBwcm9wKSB7CiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIElEQlRyYW5zYWN0aW9uICYmIChwcm9wID09PSAiZG9uZSIgfHwgcHJvcCA9PT0gInN0b3JlIikpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcHJvcCBpbiB0YXJnZXQ7CiAgICAgIH0KICAgIH07CiAgICB1bndyYXAgPSAodmFsdWUyKSA9PiByZXZlcnNlVHJhbnNmb3JtQ2FjaGUuZ2V0KHZhbHVlMik7CiAgICByZWFkTWV0aG9kcyA9IFsiZ2V0IiwgImdldEtleSIsICJnZXRBbGwiLCAiZ2V0QWxsS2V5cyIsICJjb3VudCJdOwogICAgd3JpdGVNZXRob2RzID0gWyJwdXQiLCAiYWRkIiwgImRlbGV0ZSIsICJjbGVhciJdOwogICAgY2FjaGVkTWV0aG9kcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICByZXBsYWNlVHJhcHMoKG9sZFRyYXBzKSA9PiAoewogICAgICAuLi5vbGRUcmFwcywKICAgICAgZ2V0OiAodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikgPT4gZ2V0TWV0aG9kKHRhcmdldCwgcHJvcCkgfHwgb2xkVHJhcHMuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpLAogICAgICBoYXM6ICh0YXJnZXQsIHByb3ApID0+ICEhZ2V0TWV0aG9kKHRhcmdldCwgcHJvcCkgfHwgb2xkVHJhcHMuaGFzKHRhcmdldCwgcHJvcCkKICAgIH0pKTsKICAgIGFkdmFuY2VNZXRob2RQcm9wcyA9IFsiY29udGludWUiLCAiY29udGludWVQcmltYXJ5S2V5IiwgImFkdmFuY2UiXTsKICAgIG1ldGhvZE1hcCA9IHt9OwogICAgYWR2YW5jZVJlc3VsdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIGl0dHJQcm94aWVkQ3Vyc29yVG9PcmlnaW5hbFByb3h5ID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgICBjdXJzb3JJdGVyYXRvclRyYXBzID0gewogICAgICBnZXQodGFyZ2V0LCBwcm9wKSB7CiAgICAgICAgaWYgKCFhZHZhbmNlTWV0aG9kUHJvcHMuaW5jbHVkZXMocHJvcCkpCiAgICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BdOwogICAgICAgIGxldCBjYWNoZWRGdW5jID0gbWV0aG9kTWFwW3Byb3BdOwogICAgICAgIGlmICghY2FjaGVkRnVuYykgewogICAgICAgICAgY2FjaGVkRnVuYyA9IG1ldGhvZE1hcFtwcm9wXSA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHsKICAgICAgICAgICAgYWR2YW5jZVJlc3VsdHMuc2V0KHRoaXMsIGl0dHJQcm94aWVkQ3Vyc29yVG9PcmlnaW5hbFByb3h5LmdldCh0aGlzKVtwcm9wXSguLi5hcmdzKSk7CiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gY2FjaGVkRnVuYzsKICAgICAgfQogICAgfTsKICAgIHJlcGxhY2VUcmFwcygob2xkVHJhcHMpID0+ICh7CiAgICAgIC4uLm9sZFRyYXBzLAogICAgICBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikgewogICAgICAgIGlmIChpc0l0ZXJhdG9yUHJvcCh0YXJnZXQsIHByb3ApKQogICAgICAgICAgcmV0dXJuIGl0ZXJhdGU7CiAgICAgICAgcmV0dXJuIG9sZFRyYXBzLmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTsKICAgICAgfSwKICAgICAgaGFzKHRhcmdldCwgcHJvcCkgewogICAgICAgIHJldHVybiBpc0l0ZXJhdG9yUHJvcCh0YXJnZXQsIHByb3ApIHx8IG9sZFRyYXBzLmhhcyh0YXJnZXQsIHByb3ApOwogICAgICB9CiAgICB9KSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzdG9yZUAyLjAuMjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnN0b3JlL2Rpc3RfdHMvd2Vic3RvcmUucGx1Z2lucy5qcwp2YXIgaW5pdF93ZWJzdG9yZV9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic3RvcmVAMi4wLjIwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzdG9yZS9kaXN0X3RzL3dlYnN0b3JlLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzNygpOwogICAgaW5pdF9kaXN0X3RzMTAoKTsKICAgIGluaXRfZGlzdF90czEyKCk7CiAgICBpbml0X2Rpc3RfdHMoKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIGluaXRfZGlzdF90czQoKTsKICAgIGluaXRfYnVpbGQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvZGlzdF90cy93ZWJzdG9yZS5jbGFzc2VzLndlYnN0b3JlLmpzCnZhciBXZWJTdG9yZTsKdmFyIGluaXRfd2Vic3RvcmVfY2xhc3Nlc193ZWJzdG9yZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvZGlzdF90cy93ZWJzdG9yZS5jbGFzc2VzLndlYnN0b3JlLmpzIigpIHsKICAgIGluaXRfd2Vic3RvcmVfcGx1Z2lucygpOwogICAgV2ViU3RvcmUgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmcpIHsKICAgICAgICB0aGlzLmluaXRDYWxsZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnJlYWR5RGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zQXJnOwogICAgICB9CiAgICAgIGFzeW5jIGluaXQoKSB7CiAgICAgICAgaWYgKHRoaXMuaW5pdENhbGxlZCkgewogICAgICAgICAgYXdhaXQgdGhpcy5yZWFkeURlZmVycmVkLnByb21pc2U7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuaW5pdENhbGxlZCA9IHRydWU7CiAgICAgICAgY29uc3Qgc21hcnRlbnYgPSBuZXcgZGlzdF90c19leHBvcnRzMTAuU21hcnRlbnYoKTsKICAgICAgICBpZiAoIXNtYXJ0ZW52LmlzQnJvd3NlciAmJiAhZ2xvYmFsVGhpcy5pbmRleGVkREIpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJoZXkiKTsKICAgICAgICAgIGNvbnNvbGUubG9nKGdsb2JhbFRoaXMuaW5kZXhlZERCKTsKICAgICAgICAgIGF3YWl0IHNtYXJ0ZW52LmdldFNhZmVOb2RlTW9kdWxlKCJmYWtlLWluZGV4ZWRkYi9hdXRvIik7CiAgICAgICAgICBpZiAoIWdsb2JhbFRoaXMuaW5kZXhlZERCKSB7CiAgICAgICAgICAgIGNvbnN0IG1vZCA9IGF3YWl0IHNtYXJ0ZW52LmdldFNhZmVOb2RlTW9kdWxlKCJmYWtlLWluZGV4ZWRkYiIpOwogICAgICAgICAgICBnbG9iYWxUaGlzLmluZGV4ZWREQiA9IG5ldyBtb2QuSURCRmFjdG9yeSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmRiID0gYXdhaXQgYnVpbGRfZXhwb3J0cy5vcGVuREIodGhpcy5vcHRpb25zLmRiTmFtZSwgMSwgewogICAgICAgICAgdXBncmFkZTogKGRiKSA9PiB7CiAgICAgICAgICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHRoaXMucmVhZHlEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGFzeW5jIGdldChrZXkyKSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7CiAgICAgICAgcmV0dXJuIHRoaXMuZGIuZ2V0KHRoaXMub3B0aW9ucy5zdG9yZU5hbWUsIGtleTIpOwogICAgICB9CiAgICAgIGFzeW5jIGNoZWNrKGtleUFyZykgewogICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpOwogICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0KGtleUFyZyk7CiAgICAgICAgcmV0dXJuICEhcmVzdWx0OwogICAgICB9CiAgICAgIGFzeW5jIHNldChrZXkyLCB2YWwpIHsKICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTsKICAgICAgICByZXR1cm4gdGhpcy5kYi5wdXQodGhpcy5vcHRpb25zLnN0b3JlTmFtZSwgdmFsLCBrZXkyKTsKICAgICAgfQogICAgICBhc3luYyBkZWxldGUoa2V5MikgewogICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpOwogICAgICAgIHJldHVybiB0aGlzLmRiLmRlbGV0ZSh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lLCBrZXkyKTsKICAgICAgfQogICAgICBhc3luYyBjbGVhcigpIHsKICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTsKICAgICAgICByZXR1cm4gdGhpcy5kYi5jbGVhcih0aGlzLm9wdGlvbnMuc3RvcmVOYW1lKTsKICAgICAgfQogICAgICBhc3luYyBrZXlzKCkgewogICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpOwogICAgICAgIHJldHVybiB0aGlzLmRiLmdldEFsbEtleXModGhpcy5vcHRpb25zLnN0b3JlTmFtZSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzdG9yZUAyLjAuMjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnN0b3JlL2Rpc3RfdHMvd2Vic3RvcmUuY2xhc3Nlcy50eXBlZHJlcXVlc3RjYWNoZS5qcwp2YXIgVHlwZWRyZXF1ZXN0Q2FjaGU7CnZhciBpbml0X3dlYnN0b3JlX2NsYXNzZXNfdHlwZWRyZXF1ZXN0Y2FjaGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzdG9yZUAyLjAuMjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnN0b3JlL2Rpc3RfdHMvd2Vic3RvcmUuY2xhc3Nlcy50eXBlZHJlcXVlc3RjYWNoZS5qcyIoKSB7CiAgICBpbml0X3dlYnN0b3JlX2NsYXNzZXNfd2Vic3RvcmUoKTsKICAgIGluaXRfd2Vic3RvcmVfcGx1Z2lucygpOwogICAgVHlwZWRyZXF1ZXN0Q2FjaGUgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGRvbWFpbkFyZyA9ICJkZWZhdWx0IikgewogICAgICAgIHRoaXMud2Vic3RvcmUgPSBuZXcgV2ViU3RvcmUoewogICAgICAgICAgZGJOYW1lOiAidHJTdG9yZSIsCiAgICAgICAgICBzdG9yZU5hbWU6IGB0clN0b3JlLSR7ZG9tYWluQXJnfWAKICAgICAgICB9KTsKICAgICAgfQogICAgICBidWlsZEtleShyZXF1ZXN0QXJnKSB7CiAgICAgICAgcmV0dXJuIGRpc3RfdHNfZXhwb3J0czEyLnN0cmluZ2lmeSh7CiAgICAgICAgICBtZXRob2Q6IHJlcXVlc3RBcmcubWV0aG9kLAogICAgICAgICAgcmVxdWVzdDogcmVxdWVzdEFyZy5yZXF1ZXN0CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0b3JlcyBieSByZXF1ZXN0CiAgICAgICAqIEBwYXJhbSB0eXBlZHJlcXVlc3RhcmcKICAgICAgICovCiAgICAgIGFzeW5jIHNldEJ5UmVxdWVzdCh0eXBlZHJlcXVlc3RBcmcpIHsKICAgICAgICBpZiAoIXR5cGVkcmVxdWVzdEFyZy5yZXNwb25zZSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJZb3UgY2Fubm90IHN0b3JlIHJlcXVlc3RzIHdpdGhvdXQgYSByZXNwb25zZSBwcmVzZW50Iik7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMud2Vic3RvcmUuc2V0KHRoaXMuYnVpbGRLZXkodHlwZWRyZXF1ZXN0QXJnKSwgdHlwZWRyZXF1ZXN0QXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZ2V0IGJ5IGZ1bGwgdHlvZWRyZXF1ZXN0IGJ5IHBhcnRpYWwgdHlwZWRyZXF1ZXN0CiAgICAgICAqIEBwYXJhbSB0eXBlZHJlcXVlc3RhcmcKICAgICAgICovCiAgICAgIGFzeW5jIGdldEJ5UmVxdWVzdCh0eXBlZHJlcXVlc3RBcmcpIHsKICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLndlYnN0b3JlLmdldCh0aGlzLmJ1aWxkS2V5KHR5cGVkcmVxdWVzdEFyZykpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzdG9yZUAyLjAuMjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnN0b3JlL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czEzID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czEzLCB7CiAgVHlwZWRyZXF1ZXN0Q2FjaGU6ICgpID0+IFR5cGVkcmVxdWVzdENhY2hlLAogIFdlYlN0b3JlOiAoKSA9PiBXZWJTdG9yZQp9KTsKdmFyIGluaXRfZGlzdF90czEzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic3RvcmVAMi4wLjIwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzdG9yZS9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfd2Vic3RvcmVfY2xhc3Nlc190eXBlZHJlcXVlc3RjYWNoZSgpOwogICAgaW5pdF93ZWJzdG9yZV9jbGFzc2VzX3dlYnN0b3JlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJyZXF1ZXN0QDMuMC4zNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2VicmVxdWVzdC9kaXN0X3RzL3dlYnJlcXVlc3QucGx1Z2lucy5qcwp2YXIgaW5pdF93ZWJyZXF1ZXN0X3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJyZXF1ZXN0QDMuMC4zNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2VicmVxdWVzdC9kaXN0X3RzL3dlYnJlcXVlc3QucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMzKCk7CiAgICBpbml0X2Rpc3RfdHMxMCgpOwogICAgaW5pdF9kaXN0X3RzMTIoKTsKICAgIGluaXRfZGlzdF90cygpOwogICAgaW5pdF9kaXN0X3RzMTMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RAMy4wLjM3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czE0ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czE0LCB7CiAgV2ViUmVxdWVzdDogKCkgPT4gV2ViUmVxdWVzdAp9KTsKdmFyIFdlYlJlcXVlc3Q7CnZhciBpbml0X2Rpc3RfdHMxNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RAMy4wLjM3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF93ZWJyZXF1ZXN0X3BsdWdpbnMoKTsKICAgIFdlYlJlcXVlc3QgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmcgPSB7fSkgewogICAgICAgIHRoaXMub3B0aW9uc0FyZyA9IG9wdGlvbnNBcmc7CiAgICAgICAgdGhpcy5jYWNoZVN0b3JlID0gbmV3IGRpc3RfdHNfZXhwb3J0czEzLldlYlN0b3JlKHsKICAgICAgICAgIGRiTmFtZTogIndlYnJlcXVlc3QiLAogICAgICAgICAgc3RvcmVOYW1lOiAid2VicmVxdWVzdCIKICAgICAgICB9KTsKICAgICAgICB0aGlzLm9wdGlvbnMgPSB7CiAgICAgICAgICBsb2dnaW5nOiB0cnVlLAogICAgICAgICAgLi4ub3B0aW9uc0FyZwogICAgICAgIH07CiAgICAgIH0KICAgICAgYXN5bmMgZ2V0SnNvbih1cmxBcmcsIHVzZUNhY2hlQXJnID0gZmFsc2UpIHsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdCh1cmxBcmcsIHsKICAgICAgICAgIG1ldGhvZDogIkdFVCIsCiAgICAgICAgICB1c2VDYWNoZTogdXNlQ2FjaGVBcmcKICAgICAgICB9KTsKICAgICAgICBjb25zdCByZXNwb25zZVRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7CiAgICAgICAgY29uc3QgcmVzcG9uc2VSZXN1bHQgPSBkaXN0X3RzX2V4cG9ydHMxMi5wYXJzZShyZXNwb25zZVRleHQpOwogICAgICAgIHJldHVybiByZXNwb25zZVJlc3VsdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcG9zdEpzb24KICAgICAgICovCiAgICAgIGFzeW5jIHBvc3RKc29uKHVybEFyZywgcmVxdWVzdEJvZHksIHVzZUNhY2hlQXJnID0gZmFsc2UpIHsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdCh1cmxBcmcsIHsKICAgICAgICAgIG1ldGhvZDogIlBPU1QiLAogICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgICB9LAogICAgICAgICAgYm9keTogZGlzdF90c19leHBvcnRzMTIuc3RyaW5naWZ5KHJlcXVlc3RCb2R5KSwKICAgICAgICAgIHVzZUNhY2hlOiB1c2VDYWNoZUFyZwogICAgICAgIH0pOwogICAgICAgIGNvbnN0IHJlc3BvbnNlVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTsKICAgICAgICBjb25zdCByZXNwb25zZVJlc3VsdCA9IGRpc3RfdHNfZXhwb3J0czEyLnBhcnNlKHJlc3BvbnNlVGV4dCk7CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlUmVzdWx0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBwdXQganMKICAgICAgICovCiAgICAgIGFzeW5jIHB1dEpzb24odXJsQXJnLCByZXF1ZXN0Qm9keSwgdXNlU3RvcmVBc0ZhbGxiYWNrID0gZmFsc2UpIHsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdCh1cmxBcmcsIHsKICAgICAgICAgIG1ldGhvZDogIlBVVCIsCiAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICAgIH0sCiAgICAgICAgICBib2R5OiBkaXN0X3RzX2V4cG9ydHMxMi5zdHJpbmdpZnkocmVxdWVzdEJvZHkpCiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICAgIGNvbnN0IHJlc3BvbnNlUmVzdWx0ID0gZGlzdF90c19leHBvcnRzMTIucGFyc2UocmVzcG9uc2VUZXh0KTsKICAgICAgICByZXR1cm4gcmVzcG9uc2VSZXN1bHQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHB1dCBqcwogICAgICAgKi8KICAgICAgYXN5bmMgZGVsZXRlSnNvbih1cmxBcmcsIHVzZVN0b3JlQXNGYWxsYmFjayA9IGZhbHNlKSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QodXJsQXJnLCB7CiAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICAgIH0sCiAgICAgICAgICBtZXRob2Q6ICJHRVQiCiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICAgIGNvbnN0IHJlc3BvbnNlUmVzdWx0ID0gZGlzdF90c19leHBvcnRzMTIucGFyc2UocmVzcG9uc2VUZXh0KTsKICAgICAgICByZXR1cm4gcmVzcG9uc2VSZXN1bHQ7CiAgICAgIH0KICAgICAgYXN5bmMgcmVxdWVzdCh1cmxBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICBvcHRpb25zQXJnID0gewogICAgICAgICAgdGltZW91dE1zOiA2ZTQsCiAgICAgICAgICB1c2VDYWNoZTogZmFsc2UsCiAgICAgICAgICAuLi5vcHRpb25zQXJnCiAgICAgICAgfTsKICAgICAgICBsZXQgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICAgICAgICBkaXN0X3RzX2V4cG9ydHMzLmRlbGF5Rm9yKG9wdGlvbnNBcmcudGltZW91dE1zKS50aGVuKCgpID0+IHsKICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgICB9KTsKICAgICAgICBsZXQgY2FjaGVkUmVzcG9uc2VEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIGxldCBjYWNoZVVzZWQgPSBmYWxzZTsKICAgICAgICBpZiAob3B0aW9uc0FyZy51c2VDYWNoZSAmJiBhd2FpdCB0aGlzLmNhY2hlU3RvcmUuY2hlY2sodXJsQXJnKSkgewogICAgICAgICAgY29uc3QgcmVzcG9uc2VCdWZmZXIgPSBhd2FpdCB0aGlzLmNhY2hlU3RvcmUuZ2V0KHVybEFyZyk7CiAgICAgICAgICBjYWNoZWRSZXNwb25zZURlZmVycmVkLnJlc29sdmUobmV3IFJlc3BvbnNlKHJlc3BvbnNlQnVmZmVyLCB7fSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjYWNoZWRSZXNwb25zZURlZmVycmVkLnJlc29sdmUobnVsbCk7CiAgICAgICAgfQogICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybEFyZywgewogICAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCwKICAgICAgICAgIG1ldGhvZDogb3B0aW9uc0FyZy5tZXRob2QsCiAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgIC4uLm9wdGlvbnNBcmcuaGVhZGVycyB8fCB7fQogICAgICAgICAgfSwKICAgICAgICAgIGJvZHk6IG9wdGlvbnNBcmcuYm9keQogICAgICAgIH0pLmNhdGNoKGFzeW5jIChlcnIpID0+IHsKICAgICAgICAgIGlmIChvcHRpb25zQXJnLnVzZUNhY2hlICYmIGF3YWl0IGNhY2hlZFJlc3BvbnNlRGVmZXJyZWQucHJvbWlzZSkgewogICAgICAgICAgICBjYWNoZVVzZWQgPSB0cnVlOwogICAgICAgICAgICBjb25zdCBjYWNoZWRSZXNwb25zZSA9IGNhY2hlZFJlc3BvbnNlRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFJlc3BvbnNlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAob3B0aW9uc0FyZy51c2VDYWNoZSAmJiBhd2FpdCBjYWNoZWRSZXNwb25zZURlZmVycmVkLnByb21pc2UgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSA1MDApIHsKICAgICAgICAgIGNhY2hlVXNlZCA9IHRydWU7CiAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGNhY2hlZFJlc3BvbnNlRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFjYWNoZVVzZWQgJiYgb3B0aW9uc0FyZy51c2VDYWNoZSAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDApIHsKICAgICAgICAgIGNvbnN0IGJ1ZmZlcjIgPSBhd2FpdCByZXNwb25zZS5jbG9uZSgpLmFycmF5QnVmZmVyKCk7CiAgICAgICAgICBhd2FpdCB0aGlzLmNhY2hlU3RvcmUuc2V0KHVybEFyZywgYnVmZmVyMik7CiAgICAgICAgfQogICAgICAgIHRoaXMubG9nKGAke3VybEFyZ30gYW5zd2VycyB3aXRoIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9YCk7CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhIG11bHRpIGVuZHBvaW50LCBmYXVsdCB0b2xlcmFudCByZXF1ZXN0IGZ1bmN0aW9uCiAgICAgICAqLwogICAgICBhc3luYyByZXF1ZXN0TXVsdGlFbmRwb2ludCh1cmxBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICBsZXQgYWxsVXJsczsKICAgICAgICBsZXQgdXNlZFVybEluZGV4ID0gMDsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh1cmxBcmcpKSB7CiAgICAgICAgICBhbGxVcmxzID0gdXJsQXJnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhbGxVcmxzID0gW3VybEFyZ107CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlcXVlc3RIaXN0b3J5ID0gW107CiAgICAgICAgY29uc3QgZG9IaXN0b3J5Q2hlY2sgPSBhc3luYyAoaGlzdG9yeUVudHJ5VHlwZUFyZykgPT4gewogICAgICAgICAgcmVxdWVzdEhpc3RvcnkucHVzaChoaXN0b3J5RW50cnlUeXBlQXJnKTsKICAgICAgICAgIGlmIChoaXN0b3J5RW50cnlUeXBlQXJnID09PSAiNDI5IikgewogICAgICAgICAgICBjb25zb2xlLmxvZygiZ290IDQyOSwgc28gd2FpdGluZyBhIGxpdHRsZSBiaXQuIik7CiAgICAgICAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3IoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDJlMyAtIDFlMyArIDEpKSArIDFlMyk7CiAgICAgICAgICB9CiAgICAgICAgICBsZXQgbnVtT2ZIaXN0b3J5VHlwZSA9IDA7CiAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlcXVlc3RIaXN0b3J5KSB7CiAgICAgICAgICAgIGlmIChlbnRyeSA9PT0gaGlzdG9yeUVudHJ5VHlwZUFyZykKICAgICAgICAgICAgICBudW1PZkhpc3RvcnlUeXBlKys7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobnVtT2ZIaXN0b3J5VHlwZSA+IDIgKiBhbGxVcmxzLmxlbmd0aCAqIHVzZWRVcmxJbmRleCkgewogICAgICAgICAgICB1c2VkVXJsSW5kZXgrKzsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGNvbnN0IGRvUmVxdWVzdCA9IGFzeW5jICh1cmxUb1VzZSkgPT4gewogICAgICAgICAgaWYgKCF1cmxUb1VzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInJlcXVlc3QgZmFpbGVkIHBlcm1hbmVudGx5Iik7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmxvZyhgR2V0dGluZyAke3VybFRvVXNlfSB3aXRoIG1ldGhvZCAke29wdGlvbnNBcmcubWV0aG9kfWApOwogICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmxUb1VzZSwgewogICAgICAgICAgICBtZXRob2Q6IG9wdGlvbnNBcmcubWV0aG9kLAogICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIiwKICAgICAgICAgICAgICAuLi5vcHRpb25zQXJnLmhlYWRlcnMgfHwge30KICAgICAgICAgICAgfSwKICAgICAgICAgICAgYm9keTogb3B0aW9uc0FyZy5ib2R5CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMubG9nKGAke3VybFRvVXNlfSBhbnN3ZXJzIHdpdGggc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTsKICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMCkgewogICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhd2FpdCBkb0hpc3RvcnlDaGVjayhyZXNwb25zZS5zdGF0dXMudG9TdHJpbmcoKSk7CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRvUmVxdWVzdChhbGxVcmxzW3VzZWRVcmxJbmRleF0pOwogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgY29uc3QgZmluYWxSZXNwb25zZSA9IGF3YWl0IGRvUmVxdWVzdChhbGxVcmxzW3VzZWRVcmxJbmRleF0pOwogICAgICAgIHJldHVybiBmaW5hbFJlc3BvbnNlOwogICAgICB9CiAgICAgIGxvZyhsb2dBcmcpIHsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvZ2dpbmcpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKGxvZ0FyZyk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9wbHVnaW5zLmpzCnZhciBpc291bmlxdWUyOwp2YXIgaW5pdF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90czQoKTsKICAgIGlzb3VuaXF1ZTIgPSBfX3RvRVNNKHJlcXVpcmVfZGlzdF90cygpLCAxKTsKICAgIGluaXRfZGlzdF90czcoKTsKICAgIGluaXRfZGlzdF90czgoKTsKICAgIGluaXRfZGlzdF90czMoKTsKICAgIGluaXRfZGlzdF90czkoKTsKICAgIGluaXRfZGlzdF90cygpOwogICAgaW5pdF9kaXN0X3RzMTQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHJlc3BvbnNlZXJyb3IuanMKdmFyIFR5cGVkUmVzcG9uc2VFcnJvcjsKdmFyIGluaXRfY2xhc3Nlc190eXBlZHJlc3BvbnNlZXJyb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudHlwZWRyZXNwb25zZWVycm9yLmpzIigpIHsKICAgIGluaXRfcGx1Z2lucygpOwogICAgVHlwZWRSZXNwb25zZUVycm9yID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihlcnJvclRleHRBcmcsIGVycm9yRGF0YUFyZykgewogICAgICAgIHRoaXMuZXJyb3JUZXh0ID0gZXJyb3JUZXh0QXJnOwogICAgICAgIHRoaXMuZXJyb3JEYXRhID0gZXJyb3JEYXRhQXJnOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkdG9vbHMuanMKdmFyIFR5cGVkVG9vbHM7CnZhciBpbml0X2NsYXNzZXNfdHlwZWR0b29scyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHRvb2xzLmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJlc3BvbnNlZXJyb3IoKTsKICAgIGluaXRfcGx1Z2lucygpOwogICAgVHlwZWRUb29scyA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5sb2NhbERhdGEgPSB7fTsKICAgICAgfQogICAgICBhc3luYyBwYXNzR3VhcmRzKGd1YXJkc0FyZywgZGF0YUFyZykgewogICAgICAgIGNvbnN0IGd1YXJkU2V0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czkuR3VhcmRTZXQoZ3VhcmRzQXJnKTsKICAgICAgICBjb25zdCBndWFyZFJlc3VsdCA9IGF3YWl0IGd1YXJkU2V0LmFsbEd1YXJkc1Bhc3MoZGF0YUFyZyk7CiAgICAgICAgaWYgKCFndWFyZFJlc3VsdCkgewogICAgICAgICAgY29uc3QgZmFpbGVkSGludCA9IGF3YWl0IGd1YXJkU2V0LmdldEZhaWxlZEhpbnQoZGF0YUFyZyk7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZWRSZXNwb25zZUVycm9yKGBndWFyZCBmYWlsZWQ6ICR7ZmFpbGVkSGludH1gLCB7IGZhaWxlZEhpbnQgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkaGFuZGxlci5qcwp2YXIgVHlwZWRIYW5kbGVyOwp2YXIgaW5pdF9jbGFzc2VzX3R5cGVkaGFuZGxlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZGhhbmRsZXIuanMiKCkgewogICAgaW5pdF9wbHVnaW5zKCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRyZXNwb25zZWVycm9yKCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWR0b29scygpOwogICAgVHlwZWRIYW5kbGVyID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihtZXRob2RBcmcsIGhhbmRsZXJGdW5jdGlvbkFyZykgewogICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kQXJnOwogICAgICAgIHRoaXMuaGFuZGxlckZ1bmN0aW9uID0gaGFuZGxlckZ1bmN0aW9uQXJnOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhZGRzIGEgcmVzcG9uc2UgdG8gdGhlIHR5cGVkUmVxdWVzdAogICAgICAgKiBAcGFyYW0gdHlwZWRSZXF1ZXN0QXJnCiAgICAgICAqLwogICAgICBhc3luYyBhZGRSZXNwb25zZSh0eXBlZFJlcXVlc3RBcmcpIHsKICAgICAgICBpZiAodHlwZWRSZXF1ZXN0QXJnLm1ldGhvZCAhPT0gdGhpcy5tZXRob2QpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigidGhpcyBoYW5kbGVyIGhhcyBiZWVuIGdpdmVuIGEgd3JvbmcgbWV0aG9kIHRvIGFuc3dlciB0by4gUGxlYXNlIHVzZSBhIFR5cGVkUm91dGVyIHRvIGZpbHRlciByZXF1ZXN0cyIpOwogICAgICAgIH0KICAgICAgICBsZXQgdHlwZWRSZXNwb25zZUVycm9yOwogICAgICAgIGNvbnN0IHR5cGVkdG9vbHNJbnN0YW5jZSA9IG5ldyBUeXBlZFRvb2xzKCk7CiAgICAgICAgaWYgKHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGEpIHsKICAgICAgICAgIHR5cGVkdG9vbHNJbnN0YW5jZS5sb2NhbERhdGEgPSB0eXBlZFJlcXVlc3RBcmcubG9jYWxEYXRhOwogICAgICAgIH0KICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFuZGxlckZ1bmN0aW9uKHR5cGVkUmVxdWVzdEFyZy5yZXF1ZXN0LCB0eXBlZHRvb2xzSW5zdGFuY2UpLmNhdGNoKChlMTEpID0+IHsKICAgICAgICAgIGlmIChlMTEgaW5zdGFuY2VvZiBUeXBlZFJlc3BvbnNlRXJyb3IpIHsKICAgICAgICAgICAgdHlwZWRSZXNwb25zZUVycm9yID0gZTExOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS5sb2coZTExKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAodHlwZWRSZXNwb25zZUVycm9yKSB7CiAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcuZXJyb3IgPSB7CiAgICAgICAgICAgIHRleHQ6IHR5cGVkUmVzcG9uc2VFcnJvci5lcnJvclRleHQsCiAgICAgICAgICAgIGRhdGE6IHR5cGVkUmVzcG9uc2VFcnJvci5lcnJvckRhdGEKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmIChyZXNwb25zZSkgewogICAgICAgICAgdHlwZWRSZXF1ZXN0QXJnLnJlc3BvbnNlID0gcmVzcG9uc2U7CiAgICAgICAgfQogICAgICAgIHR5cGVkUmVxdWVzdEFyZz8uY29ycmVsYXRpb24/LnBoYXNlID8gdHlwZWRSZXF1ZXN0QXJnLmNvcnJlbGF0aW9uLnBoYXNlID0gInJlc3BvbnNlIiA6IG51bGw7CiAgICAgICAgcmV0dXJuIHR5cGVkUmVxdWVzdEFyZzsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHJvdXRlci5qcwp2YXIgVHlwZWRSb3V0ZXI7CnZhciBpbml0X2NsYXNzZXNfdHlwZWRyb3V0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudHlwZWRyb3V0ZXIuanMiKCkgewogICAgaW5pdF9wbHVnaW5zKCk7CiAgICBpbml0X2NsYXNzZXNfdmlydHVhbHN0cmVhbSgpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkaGFuZGxlcigpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkcmVxdWVzdCgpOwogICAgVHlwZWRSb3V0ZXIgPSBjbGFzcyBfVHlwZWRSb3V0ZXIgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmhvb2tzID0ge307CiAgICAgICAgdGhpcy5yb3V0ZXJNYXAgPSBuZXcgZGlzdF90c19leHBvcnRzNi5PYmplY3RNYXAoKTsKICAgICAgICB0aGlzLmhhbmRsZXJNYXAgPSBuZXcgZGlzdF90c19leHBvcnRzNi5PYmplY3RNYXAoKTsKICAgICAgICB0aGlzLnJlZ2lzdGVyZWRWaXJ0dWFsU3RyZWFtcyA9IG5ldyBkaXN0X3RzX2V4cG9ydHM2Lk9iamVjdE1hcCgpOwogICAgICAgIHRoaXMuZmlyZUV2ZW50SW50ZXJlc3RNYXAgPSBuZXcgZGlzdF90c19leHBvcnRzNi5JbnRlcmVzdE1hcCgoY29ycmVsYXRpb25JZCkgPT4gY29ycmVsYXRpb25JZCk7CiAgICAgIH0KICAgICAgLy8gVXNlIGdsb2JhbFRoaXMgZm9yIGNyb3NzLWJ1bmRsZSBob29rIHNoYXJpbmcKICAgICAgc3RhdGljIGdldCBnbG9iYWxIb29rcygpIHsKICAgICAgICBpZiAoIWdsb2JhbFRoaXMuX190eXBlZFJvdXRlckdsb2JhbEhvb2tzKSB7CiAgICAgICAgICBnbG9iYWxUaGlzLl9fdHlwZWRSb3V0ZXJHbG9iYWxIb29rcyA9IHt9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gZ2xvYmFsVGhpcy5fX3R5cGVkUm91dGVyR2xvYmFsSG9va3M7CiAgICAgIH0KICAgICAgc3RhdGljIHNldCBnbG9iYWxIb29rcyh2YWx1ZTIpIHsKICAgICAgICBnbG9iYWxUaGlzLl9fdHlwZWRSb3V0ZXJHbG9iYWxIb29rcyA9IHZhbHVlMjsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IGdsb2JhbCBob29rcyBmb3IgbW9uaXRvcmluZyBhbGwgVHlwZWRSZXF1ZXN0IHRyYWZmaWMKICAgICAgICogSG9va3MgYXJlIHNoYXJlZCBhY3Jvc3MgYWxsIGJ1bmRsZXMgdmlhIGdsb2JhbFRoaXMKICAgICAgICovCiAgICAgIHN0YXRpYyBzZXRHbG9iYWxIb29rcyhob29rczgpIHsKICAgICAgICBjb25zdCBjdXJyZW50ID0gX1R5cGVkUm91dGVyLmdsb2JhbEhvb2tzOwogICAgICAgIF9UeXBlZFJvdXRlci5nbG9iYWxIb29rcyA9IHsgLi4uY3VycmVudCwgLi4uaG9va3M4IH07CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENsZWFyIGFsbCBnbG9iYWwgaG9va3MKICAgICAgICovCiAgICAgIHN0YXRpYyBjbGVhckdsb2JhbEhvb2tzKCkgewogICAgICAgIGdsb2JhbFRoaXMuX190eXBlZFJvdXRlckdsb2JhbEhvb2tzID0ge307CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNldCBpbnN0YW5jZS1sZXZlbCBob29rcyBmb3IgbW9uaXRvcmluZyB0cmFmZmljIHRocm91Z2ggdGhpcyByb3V0ZXIKICAgICAgICovCiAgICAgIHNldEhvb2tzKGhvb2tzOCkgewogICAgICAgIHRoaXMuaG9va3MgPSB7IC4uLnRoaXMuaG9va3MsIC4uLmhvb2tzOCB9OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBIZWxwZXIgdG8gY2FsbCBib3RoIGdsb2JhbCBhbmQgaW5zdGFuY2UgaG9va3MKICAgICAgICovCiAgICAgIGNhbGxIb29rKGhvb2tOYW1lLCBlbnRyeSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBfVHlwZWRSb3V0ZXIuZ2xvYmFsSG9va3NbaG9va05hbWVdPy4oZW50cnkpOwogICAgICAgICAgdGhpcy5ob29rc1tob29rTmFtZV0/LihlbnRyeSk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKGBUeXBlZFJvdXRlciBob29rIGVycm9yICgke2hvb2tOYW1lfSk6YCwgZXJyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFkZHMgdGhlIGhhbmRsZXIgdG8gdGhlIHJvdXRpbmcgbWFwCiAgICAgICAqIEBwYXJhbSB0eXBlZEhhbmRsZXJBcmcKICAgICAgICovCiAgICAgIGFkZFR5cGVkSGFuZGxlcih0eXBlZEhhbmRsZXJBcmcpIHsKICAgICAgICBjb25zdCBleGlzdGluZ1R5cGVkSGFuZGxlciA9IHRoaXMuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKHR5cGVkSGFuZGxlckFyZy5tZXRob2QpOwogICAgICAgIGlmIChleGlzdGluZ1R5cGVkSGFuZGxlcikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBhIFR5cGVkSGFuZGxlciBmb3IgJHt0eXBlZEhhbmRsZXJBcmcubWV0aG9kfSBhbHJlZHkgZXhpc3RzISBDYW4ndCBhZGQgYW5vdGhlciBvbmUuYCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuaGFuZGxlck1hcC5hZGQodHlwZWRIYW5kbGVyQXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkcyBhbm90aGVyIHN1YiB0eXBlZFJvdXRlcgogICAgICAgKiBAcGFyYW0gdHlwZWRSZXF1ZXN0CiAgICAgICAqLwogICAgICBhZGRUeXBlZFJvdXRlcih0eXBlZFJvdXRlckFyZykgewogICAgICAgIGNvbnN0IHJvdXRlckV4aXN0cyA9IHRoaXMucm91dGVyTWFwLmZpbmRTeW5jKChyb3V0ZXJBcmcpID0+IHJvdXRlckFyZyA9PT0gdHlwZWRSb3V0ZXJBcmcpOwogICAgICAgIGlmICghcm91dGVyRXhpc3RzKSB7CiAgICAgICAgICB0aGlzLnJvdXRlck1hcC5hZGQodHlwZWRSb3V0ZXJBcmcpOwogICAgICAgICAgdHlwZWRSb3V0ZXJBcmcuYWRkVHlwZWRSb3V0ZXIodGhpcyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNoZWNrRm9yVHlwZWRIYW5kbGVyKG1ldGhvZEFyZykgewogICAgICAgIHJldHVybiAhIXRoaXMuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKG1ldGhvZEFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldHMgYSB0eXBlZCBSb3V0ZXIgZnJvbSB0aGUgcm91dGVyIGNoYWluLCB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbQogICAgICAgKiBAcGFyYW0gbWV0aG9kQXJnCiAgICAgICAqIEBwYXJhbSBjaGVja1Vwc3RyZWFtUm91dGVyCiAgICAgICAqLwogICAgICBnZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QobWV0aG9kQXJnLCBjaGVja2VkUm91dGVycyA9IFtdKSB7CiAgICAgICAgY2hlY2tlZFJvdXRlcnMucHVzaCh0aGlzKTsKICAgICAgICBsZXQgdHlwZWRIYW5kbGVyOwogICAgICAgIHR5cGVkSGFuZGxlciA9IHRoaXMuaGFuZGxlck1hcC5maW5kU3luYygoaGFuZGxlcjIpID0+IHsKICAgICAgICAgIHJldHVybiBoYW5kbGVyMi5tZXRob2QgPT09IG1ldGhvZEFyZzsKICAgICAgICB9KTsKICAgICAgICBpZiAoIXR5cGVkSGFuZGxlcikgewogICAgICAgICAgdGhpcy5yb3V0ZXJNYXAuZ2V0QXJyYXkoKS5mb3JFYWNoKCh0eXBlZFJvdXRlckFyZykgPT4gewogICAgICAgICAgICBpZiAoIXR5cGVkSGFuZGxlciAmJiAhY2hlY2tlZFJvdXRlcnMuaW5jbHVkZXModHlwZWRSb3V0ZXJBcmcpKSB7CiAgICAgICAgICAgICAgdHlwZWRIYW5kbGVyID0gdHlwZWRSb3V0ZXJBcmcuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKG1ldGhvZEFyZywgY2hlY2tlZFJvdXRlcnMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHR5cGVkSGFuZGxlcjsKICAgICAgfQogICAgICBzdGF0aWMgewogICAgICAgIHRoaXMuZGVmYXVsdFJvdXRlT3B0aW9ucyA9IHsKICAgICAgICAgIGxvY2FsUmVxdWVzdDogZmFsc2UsCiAgICAgICAgICBza2lwSG9va3M6IGZhbHNlCiAgICAgICAgfTsKICAgICAgfQogICAgICAvKioKICAgICAgICogaWYgdHlwZWRyZXF1ZXN0IG9iamVjdCBoYXMgY29ycmVsYXRpb24ucGhhc2UgPT09ICdyZXF1ZXN0JyAtPiByb3V0ZXMgYSB0eXBlZCByZXF1ZXN0IG9iamVjdCB0byBhIGhhbmRsZXIKICAgICAgICogaWYgdHlwZWRyZXF1ZXN0IG9iamVjdCBoYXMgY29ycmVsYXRpb24ucGhhc2UgPT09ICdyZXNwb25zZScgLT4gcm91dGVzIGEgdHlwZWQgcmVxdWVzdCBvYmplY3QgdG8gcmVxdWVzdCBmaXJlIGV2ZW50CiAgICAgICAqIEBwYXJhbSB0eXBlZFJlcXVlc3RBcmcKICAgICAgICogQHBhcmFtIG9wdGlvbnNBcmcgLSBPcHRpb25zIG9iamVjdCB3aXRoOgogICAgICAgKiAgIC0gbG9jYWxSZXF1ZXN0OiB0cmVhdCBhcyBsb2NhbCByZXF1ZXN0IChkZWZhdWx0OiBmYWxzZSkKICAgICAgICogICAtIHNraXBIb29rczogc2tpcCBjYWxsaW5nIGhvb2tzIGZvciB0aGlzIHJvdXRpbmcgKGRlZmF1bHQ6IGZhbHNlLCB1c2UgZm9yIGJyb2FkY2FzdC1yZWNlaXZlZCBtZXNzYWdlcykKICAgICAgICovCiAgICAgIGFzeW5jIHJvdXRlQW5kQWRkUmVzcG9uc2UodHlwZWRSZXF1ZXN0QXJnLCBvcHRpb25zQXJnID0ge30pIHsKICAgICAgICBjb25zdCBvcHRpb25zID0geyAuLi5fVHlwZWRSb3V0ZXIuZGVmYXVsdFJvdXRlT3B0aW9ucywgLi4ub3B0aW9uc0FyZyB9OwogICAgICAgIHR5cGVkUmVxdWVzdEFyZyA9IFZpcnR1YWxTdHJlYW0uZGVjb2RlUGF5bG9hZEZyb21OZXR3b3JrKHR5cGVkUmVxdWVzdEFyZywgewogICAgICAgICAgdHlwZWRyb3V0ZXI6IHRoaXMKICAgICAgICB9KTsKICAgICAgICB0eXBlZFJlcXVlc3RBcmcubG9jYWxEYXRhID0gdHlwZWRSZXF1ZXN0QXJnLmxvY2FsRGF0YSB8fCB7fTsKICAgICAgICB0eXBlZFJlcXVlc3RBcmcubG9jYWxEYXRhLmZpcnN0VHlwZWRyb3V0ZXIgPSB0aGlzOwogICAgICAgIGlmICh0eXBlZFJlcXVlc3RBcmcubWV0aG9kID09PSAiIyNWaXJ0dWFsU3RyZWFtIyMiKSB7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmhhbmRsZVN0cmVhbVR5cGVkUmVxdWVzdCh0eXBlZFJlcXVlc3RBcmcpOwogICAgICAgICAgcmVzdWx0LmxvY2FsRGF0YSA9IG51bGw7CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgICBpZiAodHlwZWRSZXF1ZXN0QXJnPy5jb3JyZWxhdGlvbj8ucGhhc2UgPT09ICJyZXF1ZXN0IiB8fCBvcHRpb25zLmxvY2FsUmVxdWVzdCkgewogICAgICAgICAgY29uc3QgcmVxdWVzdFN0YXJ0VGltZSA9IERhdGUubm93KCk7CiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcEhvb2tzKSB7CiAgICAgICAgICAgIHRoaXMuY2FsbEhvb2soIm9uSW5jb21pbmdSZXF1ZXN0IiwgewogICAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHR5cGVkUmVxdWVzdEFyZy5jb3JyZWxhdGlvbj8uaWQgfHwgInVua25vd24iLAogICAgICAgICAgICAgIG1ldGhvZDogdHlwZWRSZXF1ZXN0QXJnLm1ldGhvZCwKICAgICAgICAgICAgICBkaXJlY3Rpb246ICJpbmNvbWluZyIsCiAgICAgICAgICAgICAgcGhhc2U6ICJyZXF1ZXN0IiwKICAgICAgICAgICAgICB0aW1lc3RhbXA6IHJlcXVlc3RTdGFydFRpbWUsCiAgICAgICAgICAgICAgcGF5bG9hZDogdHlwZWRSZXF1ZXN0QXJnLnJlcXVlc3QKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCB0eXBlZEhhbmRsZXIgPSB0aGlzLmdldFR5cGVkSGFuZGxlckZvck1ldGhvZCh0eXBlZFJlcXVlc3RBcmcubWV0aG9kKTsKICAgICAgICAgIGlmICghdHlwZWRIYW5kbGVyKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDYW5ub3QgZmluZCBoYW5kbGVyIGZvciBtZXRob2RuYW1lICR7dHlwZWRSZXF1ZXN0QXJnLm1ldGhvZH1gKTsKICAgICAgICAgICAgdHlwZWRSZXF1ZXN0QXJnLmVycm9yID0gewogICAgICAgICAgICAgIHRleHQ6ICJUaGVyZSBpcyBubyBhdmFpbGFibGUgbWV0aG9kIGZvciB0aGlzIGNhbGwgb24gdGhlIHNlcnZlciBzaWRlIiwKICAgICAgICAgICAgICBkYXRhOiB7fQogICAgICAgICAgICB9OwogICAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcuY29ycmVsYXRpb24ucGhhc2UgPSAicmVzcG9uc2UiOwogICAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcubG9jYWxEYXRhID0gbnVsbDsKICAgICAgICAgICAgdHlwZWRSZXF1ZXN0QXJnID0gVmlydHVhbFN0cmVhbS5lbmNvZGVQYXlsb2FkRm9yTmV0d29yayh0eXBlZFJlcXVlc3RBcmcsIHsKICAgICAgICAgICAgICB0eXBlZHJvdXRlcjogdGhpcwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKCFvcHRpb25zLnNraXBIb29rcykgewogICAgICAgICAgICAgIHRoaXMuY2FsbEhvb2soIm9uT3V0Z29pbmdSZXNwb25zZSIsIHsKICAgICAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHR5cGVkUmVxdWVzdEFyZy5jb3JyZWxhdGlvbj8uaWQgfHwgInVua25vd24iLAogICAgICAgICAgICAgICAgbWV0aG9kOiB0eXBlZFJlcXVlc3RBcmcubWV0aG9kLAogICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAib3V0Z29pbmciLAogICAgICAgICAgICAgICAgcGhhc2U6ICJyZXNwb25zZSIsCiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksCiAgICAgICAgICAgICAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gcmVxdWVzdFN0YXJ0VGltZSwKICAgICAgICAgICAgICAgIHBheWxvYWQ6IHR5cGVkUmVxdWVzdEFyZy5yZXNwb25zZSwKICAgICAgICAgICAgICAgIGVycm9yOiB0eXBlZFJlcXVlc3RBcmcuZXJyb3I/LnRleHQKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdHlwZWRSZXF1ZXN0QXJnOwogICAgICAgICAgfQogICAgICAgICAgdHlwZWRSZXF1ZXN0QXJnID0gYXdhaXQgdHlwZWRIYW5kbGVyLmFkZFJlc3BvbnNlKHR5cGVkUmVxdWVzdEFyZyk7CiAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcubG9jYWxEYXRhID0gbnVsbDsKICAgICAgICAgIHR5cGVkUmVxdWVzdEFyZyA9IFZpcnR1YWxTdHJlYW0uZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsodHlwZWRSZXF1ZXN0QXJnLCB7CiAgICAgICAgICAgIHR5cGVkcm91dGVyOiB0aGlzCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmICghb3B0aW9ucy5za2lwSG9va3MpIHsKICAgICAgICAgICAgdGhpcy5jYWxsSG9vaygib25PdXRnb2luZ1Jlc3BvbnNlIiwgewogICAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHR5cGVkUmVxdWVzdEFyZy5jb3JyZWxhdGlvbj8uaWQgfHwgInVua25vd24iLAogICAgICAgICAgICAgIG1ldGhvZDogdHlwZWRSZXF1ZXN0QXJnLm1ldGhvZCwKICAgICAgICAgICAgICBkaXJlY3Rpb246ICJvdXRnb2luZyIsCiAgICAgICAgICAgICAgcGhhc2U6ICJyZXNwb25zZSIsCiAgICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLAogICAgICAgICAgICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSByZXF1ZXN0U3RhcnRUaW1lLAogICAgICAgICAgICAgIHBheWxvYWQ6IHR5cGVkUmVxdWVzdEFyZy5yZXNwb25zZSwKICAgICAgICAgICAgICBlcnJvcjogdHlwZWRSZXF1ZXN0QXJnLmVycm9yPy50ZXh0CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHR5cGVkUmVxdWVzdEFyZzsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVkUmVxdWVzdEFyZz8uY29ycmVsYXRpb24/LnBoYXNlID09PSAicmVzcG9uc2UiKSB7CiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcEhvb2tzKSB7CiAgICAgICAgICAgIHRoaXMuY2FsbEhvb2soIm9uSW5jb21pbmdSZXNwb25zZSIsIHsKICAgICAgICAgICAgICBjb3JyZWxhdGlvbklkOiB0eXBlZFJlcXVlc3RBcmcuY29ycmVsYXRpb24/LmlkIHx8ICJ1bmtub3duIiwKICAgICAgICAgICAgICBtZXRob2Q6IHR5cGVkUmVxdWVzdEFyZy5tZXRob2QsCiAgICAgICAgICAgICAgZGlyZWN0aW9uOiAiaW5jb21pbmciLAogICAgICAgICAgICAgIHBoYXNlOiAicmVzcG9uc2UiLAogICAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSwKICAgICAgICAgICAgICBwYXlsb2FkOiB0eXBlZFJlcXVlc3RBcmcucmVzcG9uc2UsCiAgICAgICAgICAgICAgZXJyb3I6IHR5cGVkUmVxdWVzdEFyZy5lcnJvcj8udGV4dAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZmlyZUV2ZW50SW50ZXJlc3RNYXAuZmluZEludGVyZXN0KHR5cGVkUmVxdWVzdEFyZy5jb3JyZWxhdGlvbi5pZCk/LmZ1bGxmaWxsSW50ZXJlc3QodHlwZWRSZXF1ZXN0QXJnKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zb2xlLmxvZygicmVjZWl2ZWQgd2VpcmRseSBzaGFwZWQgcmVxdWVzdCIpOwogICAgICAgICAgY29uc29sZS5sb2codHlwZWRSZXF1ZXN0QXJnKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogaGFuZGxlIHN0cmVhbWluZwogICAgICAgKiBAcGFyYW0gc3RyZWFtVHJBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGhhbmRsZVN0cmVhbVR5cGVkUmVxdWVzdChzdHJlYW1UckFyZykgewogICAgICAgIGNvbnN0IHJlbGV2YW50VmlydHVhbFN0cmVhbSA9IGF3YWl0IHRoaXMucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zLmZpbmQoYXN5bmMgKHZpcnR1YWxTdHJlYW1BcmcpID0+IHsKICAgICAgICAgIHJldHVybiB2aXJ0dWFsU3RyZWFtQXJnLnN0cmVhbUlkID09PSBzdHJlYW1UckFyZy5yZXF1ZXN0LnN0cmVhbUlkOwogICAgICAgIH0pOwogICAgICAgIGlmICghcmVsZXZhbnRWaXJ0dWFsU3RyZWFtKSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhgbm8gcmVsZXZhbnQgdmlydHVhbCBzdHJlYW0gZm91bmQgZm9yIHN0cmVhbSB3aXRoIGlkICR7c3RyZWFtVHJBcmcucmVxdWVzdC5zdHJlYW1JZH1gKTsKICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zLmdldEFycmF5KCkpOwogICAgICAgICAgcmV0dXJuIHN0cmVhbVRyQXJnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhgc3VjY2VzczogZm91bmQgcmVsZXZhbnQgdmlydHVhbCBzdHJlYW0gd2l0aCBpZCAke3N0cmVhbVRyQXJnLnJlcXVlc3Quc3RyZWFtSWR9YCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlbGV2YW50VmlydHVhbFN0cmVhbS5oYW5kbGVTdHJlYW1UcihzdHJlYW1UckFyZyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy52aXJ0dWFsc3RyZWFtLmpzCnZhciBjbG9zaW5nQml0LCBWaXJ0dWFsU3RyZWFtOwp2YXIgaW5pdF9jbGFzc2VzX3ZpcnR1YWxzdHJlYW0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudmlydHVhbHN0cmVhbS5qcyIoKSB7CiAgICBpbml0X3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJvdXRlcigpOwogICAgY2xvc2luZ0JpdCA9ICIjIyMjIyMjIyMjIyMjQ0xPU0lORyBCSVQjIyMjIyMjIyMjIyMjIjsKICAgIFZpcnR1YWxTdHJlYW0gPSBjbGFzcyBfVmlydHVhbFN0cmVhbSB7CiAgICAgIC8vIFNUQVRJQwogICAgICBzdGF0aWMgZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsob2JqZWN0UGF5bG9hZCwgY29tbUZ1bmN0aW9ucywgb3JpZ2luYWxQYXlsb2FkLCBwYXRoMiA9IFtdKSB7CiAgICAgICAgaWYgKCFvYmplY3RQYXlsb2FkKSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0UGF5bG9hZDsKICAgICAgICB9CiAgICAgICAgaWYgKGRpc3RfdHNfZXhwb3J0czguaXNCdWZmZXJMaWtlKG9iamVjdFBheWxvYWQpKSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0UGF5bG9hZDsKICAgICAgICB9CiAgICAgICAgaWYgKG9iamVjdFBheWxvYWQgaW5zdGFuY2VvZiBfVmlydHVhbFN0cmVhbSkgewogICAgICAgICAgaWYgKCFvYmplY3RQYXlsb2FkLnNpZGUgJiYgY29tbUZ1bmN0aW9ucy5zZW5kTWV0aG9kKSB7CiAgICAgICAgICAgIG9iamVjdFBheWxvYWQuc2lkZSA9ICJyZXF1ZXN0aW5nIjsKICAgICAgICAgICAgb2JqZWN0UGF5bG9hZC5zZW5kTWV0aG9kID0gY29tbUZ1bmN0aW9ucy5zZW5kTWV0aG9kOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFvYmplY3RQYXlsb2FkLnNpZGUgJiYgY29tbUZ1bmN0aW9ucy50eXBlZHJvdXRlcikgewogICAgICAgICAgICBvYmplY3RQYXlsb2FkLnNpZGUgPSAicmVzcG9uZGluZyI7CiAgICAgICAgICAgIG9iamVjdFBheWxvYWQudHlwZWRyb3V0ZXIgPSBjb21tRnVuY3Rpb25zLnR5cGVkcm91dGVyOwogICAgICAgICAgICBjb21tRnVuY3Rpb25zLnR5cGVkcm91dGVyLnJlZ2lzdGVyZWRWaXJ0dWFsU3RyZWFtcy5hZGQob2JqZWN0UGF5bG9hZCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIW9yaWdpbmFsUGF5bG9hZC5yZXNwb25zZSB8fCBwYXRoMi5pbmNsdWRlcygicmVzcG9uc2UiKSkgewogICAgICAgICAgICBvYmplY3RQYXlsb2FkLnN0YXJ0S2VlcEFsaXZlTG9vcCgpOwogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIF9pc1ZpcnR1YWxTdHJlYW06IHRydWUsCiAgICAgICAgICAgICAgc3RyZWFtSWQ6IG9iamVjdFBheWxvYWQuc3RyZWFtSWQKICAgICAgICAgICAgfTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgX09CTUlUVEVEX1ZJUlRVQUxfU1RSRUFNOiB0cnVlLAogICAgICAgICAgICAgIHJlYXNvbjogInBhdGggaXMgdW5kZXIgLnJlcXVlc3Q6IG9ibWl0dGVkIGZvciBkZWR1cGxpY2F0aW9uIHJlYXNvbnMgaW4gcmVzcG9uc2UgY3ljbGUuIgogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3RQYXlsb2FkKSkgewogICAgICAgICAgcmV0dXJuIG9iamVjdFBheWxvYWQubWFwKChpdGVtLCBpbmRleDIpID0+IF9WaXJ0dWFsU3RyZWFtLmVuY29kZVBheWxvYWRGb3JOZXR3b3JrKAogICAgICAgICAgICBpdGVtLAogICAgICAgICAgICBjb21tRnVuY3Rpb25zLAogICAgICAgICAgICBvcmlnaW5hbFBheWxvYWQgfHwgb2JqZWN0UGF5bG9hZCwKICAgICAgICAgICAgcGF0aDIuY29uY2F0KFN0cmluZyhpbmRleDIpKQogICAgICAgICAgICAvLyBDb252ZXJ0IGluZGV4IHRvIHN0cmluZyBhbmQgY29uY2F0ZW5hdGUgdG8gcGF0aAogICAgICAgICAgKSk7CiAgICAgICAgfSBlbHNlIGlmIChvYmplY3RQYXlsb2FkICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3RQYXlsb2FkID09PSAib2JqZWN0IikgewogICAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9iamVjdFBheWxvYWQpLnJlZHVjZSgoYWNjLCBba2V5MiwgdmFsdWUyXSkgPT4gewogICAgICAgICAgICBjb25zdCBuZXdQYXRoID0gcGF0aDIuY29uY2F0KGtleTIpOwogICAgICAgICAgICBhY2Nba2V5Ml0gPSBfVmlydHVhbFN0cmVhbS5lbmNvZGVQYXlsb2FkRm9yTmV0d29yayh2YWx1ZTIsIGNvbW1GdW5jdGlvbnMsIG9yaWdpbmFsUGF5bG9hZCB8fCBvYmplY3RQYXlsb2FkLCBuZXdQYXRoKTsKICAgICAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgICAgIH0sIHt9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG9iamVjdFBheWxvYWQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRpYyBkZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmsob2JqZWN0UGF5bG9hZCwgY29tbUZ1bmN0aW9ucykgewogICAgICAgIGlmIChkaXN0X3RzX2V4cG9ydHM4LmlzQnVmZmVyTGlrZShvYmplY3RQYXlsb2FkKSB8fCBvYmplY3RQYXlsb2FkIGluc3RhbmNlb2YgVHlwZWRSb3V0ZXIpIHsKICAgICAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkOwogICAgICAgIH0KICAgICAgICBpZiAob2JqZWN0UGF5bG9hZCAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0UGF5bG9hZCA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIGlmIChvYmplY3RQYXlsb2FkIGluc3RhbmNlb2YgU2V0IHx8IG9iamVjdFBheWxvYWQgaW5zdGFuY2VvZiBNYXAgfHwgb2JqZWN0UGF5bG9hZCBpbnN0YW5jZW9mIERhdGUgfHwgb2JqZWN0UGF5bG9hZCBpbnN0YW5jZW9mIFJlZ0V4cCB8fCBvYmplY3RQYXlsb2FkIGluc3RhbmNlb2YgRXJyb3IgfHwgb2JqZWN0UGF5bG9hZCBpbnN0YW5jZW9mIFByb21pc2UgfHwgdHlwZW9mIG9iamVjdFBheWxvYWQudGhlbiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICByZXR1cm4gb2JqZWN0UGF5bG9hZDsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChvYmplY3RQYXlsb2FkLl9pc1ZpcnR1YWxTdHJlYW0pIHsKICAgICAgICAgICAgY29uc3QgdmlydHVhbFN0cmVhbSA9IG5ldyBfVmlydHVhbFN0cmVhbSgpOwogICAgICAgICAgICB2aXJ0dWFsU3RyZWFtLnN0cmVhbUlkID0gb2JqZWN0UGF5bG9hZC5zdHJlYW1JZDsKICAgICAgICAgICAgaWYgKCF2aXJ0dWFsU3RyZWFtLnNpZGUgJiYgY29tbUZ1bmN0aW9ucy5zZW5kTWV0aG9kKSB7CiAgICAgICAgICAgICAgdmlydHVhbFN0cmVhbS5zaWRlID0gInJlcXVlc3RpbmciOwogICAgICAgICAgICAgIHZpcnR1YWxTdHJlYW0uc2VuZE1ldGhvZCA9IGNvbW1GdW5jdGlvbnMuc2VuZE1ldGhvZDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIXZpcnR1YWxTdHJlYW0uc2lkZSAmJiBjb21tRnVuY3Rpb25zLnR5cGVkcm91dGVyKSB7CiAgICAgICAgICAgICAgdmlydHVhbFN0cmVhbS5zaWRlID0gInJlc3BvbmRpbmciOwogICAgICAgICAgICAgIHZpcnR1YWxTdHJlYW0udHlwZWRyb3V0ZXIgPSBjb21tRnVuY3Rpb25zLnR5cGVkcm91dGVyOwogICAgICAgICAgICAgIGNvbW1GdW5jdGlvbnMudHlwZWRyb3V0ZXIucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zLmFkZCh2aXJ0dWFsU3RyZWFtKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2aXJ0dWFsU3RyZWFtLnN0YXJ0S2VlcEFsaXZlTG9vcCgpOwogICAgICAgICAgICByZXR1cm4gdmlydHVhbFN0cmVhbTsKICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3RQYXlsb2FkKSkgewogICAgICAgICAgICBjb25zdCByZXR1cm5BcnJheSA9IFtdOwogICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygb2JqZWN0UGF5bG9hZCkgewogICAgICAgICAgICAgIHJldHVybkFycmF5LnB1c2goX1ZpcnR1YWxTdHJlYW0uZGVjb2RlUGF5bG9hZEZyb21OZXR3b3JrKGl0ZW0sIGNvbW1GdW5jdGlvbnMpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmV0dXJuQXJyYXk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0UGF5bG9hZCkucmVkdWNlKChhY2MsIGtleTIpID0+IHsKICAgICAgICAgICAgICBhY2Nba2V5Ml0gPSBfVmlydHVhbFN0cmVhbS5kZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmsob2JqZWN0UGF5bG9hZFtrZXkyXSwgY29tbUZ1bmN0aW9ucyk7CiAgICAgICAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgICAgICAgfSwge30pOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0UGF5bG9hZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5zdHJlYW1JZCA9IGlzb3VuaXF1ZTIudW5pKCk7CiAgICAgICAgdGhpcy5rZWVwQWxpdmUgPSB0cnVlOwogICAgICAgIHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheSA9IG5ldyBkaXN0X3RzX2V4cG9ydHM2LkJhY2twcmVzc3VyZWRBcnJheSgxNik7CiAgICAgICAgdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5ID0gbmV3IGRpc3RfdHNfZXhwb3J0czYuQmFja3ByZXNzdXJlZEFycmF5KDE2KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogdGFrZXMgY2FyZSBvZiBzZW5kaW5nCiAgICAgICAqLwogICAgICBhc3luYyB3b3JrT25RdWV1ZSgpIHsKICAgICAgICBpZiAodGhpcy53b3JraW5nRGVmZXJyZWQpIHsKICAgICAgICAgIHJldHVybiB0aGlzLndvcmtpbmdEZWZlcnJlZC5wcm9taXNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLndvcmtpbmdEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5zaWRlID09PSAicmVxdWVzdGluZyIpIHsKICAgICAgICAgIGxldCB0aGlzU2lkZUlzQmFja3ByZXNzdXJlZCA9ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpOwogICAgICAgICAgbGV0IG90aGVyU2lkZUhhc05leHQgPSBmYWxzZTsKICAgICAgICAgIGxldCBvdGhlclNpZGVJc0JhY2twcmVzc3VyZWQgPSBmYWxzZTsKICAgICAgICAgIGNvbnN0IGdldEZlZWRiYWNrID0gYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjb25zdCBzdHJlYW1UciA9IGF3YWl0IHRoaXMuc2VuZE1ldGhvZCh7CiAgICAgICAgICAgICAgbWV0aG9kOiAiIyNWaXJ0dWFsU3RyZWFtIyMiLAogICAgICAgICAgICAgIHJlcXVlc3Q6IHsKICAgICAgICAgICAgICAgIHN0cmVhbUlkOiB0aGlzLnN0cmVhbUlkLAogICAgICAgICAgICAgICAgY3ljbGVJZDogaXNvdW5pcXVlMi51bmkoKSwKICAgICAgICAgICAgICAgIGN5Y2xlOiAicmVxdWVzdCIsCiAgICAgICAgICAgICAgICBtYWluUHVycG9zZTogImZlZWRiYWNrIiwKICAgICAgICAgICAgICAgIG5leHQ6IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCA+IDAsCiAgICAgICAgICAgICAgICBiYWNrcHJlc3N1cmU6ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICByZXNwb25zZTogbnVsbAogICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coInN0cmVhbSBlbmRlZCBpbW1hdHVyZWx5Iik7CiAgICAgICAgICAgICAgdGhpcy5rZWVwQWxpdmUgPSBmYWxzZTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlmIChzdHJlYW1UciAmJiBzdHJlYW1Uci5yZXNwb25zZSkgewogICAgICAgICAgICAgIG90aGVyU2lkZUlzQmFja3ByZXNzdXJlZCA9IHN0cmVhbVRyLnJlc3BvbnNlLmJhY2twcmVzc3VyZTsKICAgICAgICAgICAgICBvdGhlclNpZGVIYXNOZXh0ID0gc3RyZWFtVHIucmVzcG9uc2UubmV4dDsKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIGF3YWl0IGdldEZlZWRiYWNrKCk7CiAgICAgICAgICB3aGlsZSAodGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMCB8fCBvdGhlclNpZGVIYXNOZXh0KSB7CiAgICAgICAgICAgIGlmIChvdGhlclNpZGVJc0JhY2twcmVzc3VyZWQpIHsKICAgICAgICAgICAgICB3aGlsZSAob3RoZXJTaWRlSXNCYWNrcHJlc3N1cmVkKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygid2FpdGluZyBmb3IgZmVlZGJhY2sgYmVjYXVzZSBvZiBiYWNrcHJlc3N1cmUuLi4iKTsKICAgICAgICAgICAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3IoNTApOwogICAgICAgICAgICAgICAgYXdhaXQgZ2V0RmVlZGJhY2soKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGV0IGRhdGFBcmc7CiAgICAgICAgICAgIGlmICh0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgZGF0YUFyZyA9IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5zaGlmdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxldCBzdHJlYW1UcjsKICAgICAgICAgICAgc3RyZWFtVHIgPSBhd2FpdCB0aGlzLnNlbmRNZXRob2QoewogICAgICAgICAgICAgIG1ldGhvZDogIiMjVmlydHVhbFN0cmVhbSMjIiwKICAgICAgICAgICAgICByZXF1ZXN0OiB7CiAgICAgICAgICAgICAgICBzdHJlYW1JZDogdGhpcy5zdHJlYW1JZCwKICAgICAgICAgICAgICAgIGN5Y2xlSWQ6IGlzb3VuaXF1ZTIudW5pKCksCiAgICAgICAgICAgICAgICBjeWNsZTogInJlcXVlc3QiLAogICAgICAgICAgICAgICAgbWFpblB1cnBvc2U6IGRhdGFBcmcgPyAiY2h1bmsiIDogInJlYWQiLAogICAgICAgICAgICAgICAgYmFja3ByZXNzdXJlOiB0aGlzU2lkZUlzQmFja3ByZXNzdXJlZCwKICAgICAgICAgICAgICAgIG5leHQ6IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCA+IDAsCiAgICAgICAgICAgICAgICAuLi5kYXRhQXJnID8geyBjaHVua0RhdGE6IGRhdGFBcmcgfSA6IHt9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICByZXNwb25zZTogbnVsbAogICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coInN0cmVhbSBlbmRlZCBpbW1hdHVyZWx5Iik7CiAgICAgICAgICAgICAgdGhpcy5rZWVwQWxpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlmIChzdHJlYW1UciAmJiBzdHJlYW1Uci5yZXNwb25zZSAmJiBzdHJlYW1Uci5yZXNwb25zZS5jaHVua0RhdGEpIHsKICAgICAgICAgICAgICB0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkucHVzaChzdHJlYW1Uci5yZXNwb25zZS5jaHVua0RhdGEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG90aGVyU2lkZUlzQmFja3ByZXNzdXJlZCA9IHN0cmVhbVRyICYmIHN0cmVhbVRyLnJlc3BvbnNlICYmIHN0cmVhbVRyLnJlc3BvbnNlLmJhY2twcmVzc3VyZTsKICAgICAgICAgICAgdGhpc1NpZGVJc0JhY2twcmVzc3VyZWQgPSAhdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmNoZWNrU3BhY2VBdmFpbGFibGUoKTsKICAgICAgICAgICAgb3RoZXJTaWRlSGFzTmV4dCA9IHN0cmVhbVRyICYmIHN0cmVhbVRyLnJlc3BvbnNlICYmIHN0cmVhbVRyLnJlc3BvbnNlLm5leHQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMud29ya2luZ0RlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICB0aGlzLndvcmtpbmdEZWZlcnJlZCA9IG51bGw7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoaXMgbWV0aG9kIGhhbmRsZXMgdGhlIHN0cmVhbSBvbmx5IG9uIHRoZSByZXNwb25kaW5nIHNpZGUKICAgICAgICogQHBhcmFtIHN0cmVhbVRyQXJnCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqLwogICAgICBhc3luYyBoYW5kbGVTdHJlYW1UcihzdHJlYW1UckFyZykgewogICAgICAgIGlmIChzdHJlYW1UckFyZy5yZXF1ZXN0LmtlZXBBbGl2ZSA9PT0gdHJ1ZSAmJiB0aGlzLmtlZXBBbGl2ZSA9PT0gdHJ1ZSkgewogICAgICAgICAgdGhpcy5sYXN0S2VlcEFsaXZlRXZlbnQgPSBEYXRlLm5vdygpOwogICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtVHJBcmcucmVxdWVzdC5rZWVwQWxpdmUgPT09IGZhbHNlKSB7CiAgICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoc3RyZWFtVHJBcmcucmVxdWVzdC5tYWluUHVycG9zZSA9PT0gImtlZXBBbGl2ZSIpIHsKICAgICAgICAgIHN0cmVhbVRyQXJnLnJlc3BvbnNlID0gewogICAgICAgICAgICBzdHJlYW1JZDogdGhpcy5zdHJlYW1JZCwKICAgICAgICAgICAgY3ljbGVJZDogc3RyZWFtVHJBcmcucmVxdWVzdC5jeWNsZUlkLAogICAgICAgICAgICBjeWNsZTogInJlc3BvbnNlIiwKICAgICAgICAgICAgbWFpblB1cnBvc2U6ICJrZWVwQWxpdmUiLAogICAgICAgICAgICBrZWVwQWxpdmU6IHRoaXMua2VlcEFsaXZlLAogICAgICAgICAgICBuZXh0OiB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAwLAogICAgICAgICAgICBiYWNrcHJlc3N1cmU6ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAoc3RyZWFtVHJBcmcucmVxdWVzdC5tYWluUHVycG9zZSA9PT0gImZlZWRiYWNrIikgewogICAgICAgICAgc3RyZWFtVHJBcmcucmVzcG9uc2UgPSB7CiAgICAgICAgICAgIHN0cmVhbUlkOiB0aGlzLnN0cmVhbUlkLAogICAgICAgICAgICBjeWNsZUlkOiBzdHJlYW1UckFyZy5yZXF1ZXN0LmN5Y2xlSWQsCiAgICAgICAgICAgIGN5Y2xlOiAicmVzcG9uc2UiLAogICAgICAgICAgICBtYWluUHVycG9zZTogImZlZWRiYWNrIiwKICAgICAgICAgICAgbmV4dDogdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMCwKICAgICAgICAgICAgYmFja3ByZXNzdXJlOiAhdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmNoZWNrU3BhY2VBdmFpbGFibGUoKQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0cmVhbVRyQXJnLnJlcXVlc3QubWFpblB1cnBvc2UgPT09ICJjaHVuayIpIHsKICAgICAgICAgIHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5wdXNoKHN0cmVhbVRyQXJnLnJlcXVlc3QuY2h1bmtEYXRhKTsKICAgICAgICAgIGlmICh0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAwICYmIHN0cmVhbVRyQXJnLnJlc3BvbnNlLmJhY2twcmVzc3VyZSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgY29uc3QgZGF0YUFyZyA9IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5zaGlmdCgpOwogICAgICAgICAgICBzdHJlYW1UckFyZy5yZXNwb25zZSA9IHsKICAgICAgICAgICAgICBzdHJlYW1JZDogdGhpcy5zdHJlYW1JZCwKICAgICAgICAgICAgICBjeWNsZUlkOiBzdHJlYW1UckFyZy5yZXF1ZXN0LmN5Y2xlSWQsCiAgICAgICAgICAgICAgY3ljbGU6ICJyZXNwb25zZSIsCiAgICAgICAgICAgICAgbWFpblB1cnBvc2U6ICJjaHVuayIsCiAgICAgICAgICAgICAgbmV4dDogdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMSwKICAgICAgICAgICAgICAvLyAxIGFuZCBub3QgMCBiZWNhdXNlIHdlIGNhbGwgc2hpZnQgYSBmZXcgbGluZXMgZG93bgogICAgICAgICAgICAgIGJhY2twcmVzc3VyZTogIXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCksCiAgICAgICAgICAgICAgY2h1bmtEYXRhOiB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuc2hpZnQoKQogICAgICAgICAgICB9OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RyZWFtVHJBcmcucmVzcG9uc2UgPSB7CiAgICAgICAgICAgICAgc3RyZWFtSWQ6IHRoaXMuc3RyZWFtSWQsCiAgICAgICAgICAgICAgY3ljbGVJZDogc3RyZWFtVHJBcmcucmVxdWVzdC5jeWNsZUlkLAogICAgICAgICAgICAgIGN5Y2xlOiAicmVzcG9uc2UiLAogICAgICAgICAgICAgIG1haW5QdXJwb3NlOiAiZmVlZGJhY2siLAogICAgICAgICAgICAgIG5leHQ6IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCA+IDAsCiAgICAgICAgICAgICAgYmFja3ByZXNzdXJlOiAhdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmNoZWNrU3BhY2VBdmFpbGFibGUoKQogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgICAgc3RyZWFtVHJBcmcucmVxdWVzdCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdHJlYW1UckFyZzsKICAgICAgfQogICAgICAvLyBsaWZlY3ljbGUgbWV0aG9kcwogICAgICAvKioKICAgICAgICogY2xvc2VzIHRoZSB2aXJ0dWFsIHN0cmVhbQogICAgICAgKi8KICAgICAgYXN5bmMgY2xlYW51cCgpIHsKICAgICAgICBpZiAodGhpcy50eXBlZHJvdXRlcikgewogICAgICAgICAgdGhpcy50eXBlZHJvdXRlci5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMucmVtb3ZlKHRoaXMpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogYSBrZWVwQWxpdmUgbG9vcCB0aGF0IHdvcmtzIGFjcm9zcyB0ZWNobm9sb2dpZXMKICAgICAgICovCiAgICAgIGFzeW5jIHN0YXJ0S2VlcEFsaXZlTG9vcCgpIHsKICAgICAgICBpZiAodGhpcy5zaWRlID09PSAicmVzcG9uZGluZyIpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcigwKTsKICAgICAgICBjb25zb2xlLmxvZyhgc3RhcnRpbmcga2VlcGFsaXZlIGxvb3Agb24gc2lkZSAke3RoaXMuc2lkZX1gKTsKICAgICAgICBsZXQgY291bnRlcjIgPSAwOwogICAgICAgIGtlZXBBbGl2ZUxvb3A6IHdoaWxlICh0aGlzLmtlZXBBbGl2ZSkgewogICAgICAgICAgYXdhaXQgdGhpcy50cmlnZ2VyS2VlcEFsaXZlKCk7CiAgICAgICAgICBhd2FpdCBkaXN0X3RzX2V4cG9ydHMzLmRlbGF5Rm9yKDFlMyk7CiAgICAgICAgfQogICAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3IoMWUzKTsKICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXAoKTsKICAgICAgICBjb25zb2xlLmxvZyhgY2xlYW5lZCB1cCBmb3Igc3RyZWFtICR7dGhpcy5zdHJlYW1JZH1gKTsKICAgICAgfQogICAgICBhc3luYyB0cmlnZ2VyS2VlcEFsaXZlKCkgewogICAgICAgIGlmICh0aGlzLnNpZGUgPT09ICJyZXF1ZXN0aW5nIikgewogICAgICAgICAgY29uc29sZS5sb2coYGtlZXBhbGl2ZSBzZW50LmApOwogICAgICAgICAgY29uc3Qgc3RyZWFtVHIgPSBhd2FpdCB0aGlzLnNlbmRNZXRob2QoewogICAgICAgICAgICBtZXRob2Q6ICIjI1ZpcnR1YWxTdHJlYW0jIyIsCiAgICAgICAgICAgIHJlcXVlc3Q6IHsKICAgICAgICAgICAgICBzdHJlYW1JZDogdGhpcy5zdHJlYW1JZCwKICAgICAgICAgICAgICBjeWNsZUlkOiBpc291bmlxdWUyLnVuaSgpLAogICAgICAgICAgICAgIGN5Y2xlOiAicmVxdWVzdCIsCiAgICAgICAgICAgICAgbWFpblB1cnBvc2U6ICJrZWVwQWxpdmUiLAogICAgICAgICAgICAgIGtlZXBBbGl2ZTogdGhpcy5rZWVwQWxpdmUKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVzcG9uc2U6IG51bGwKICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgdGhpcy5rZWVwQWxpdmUgPSBmYWxzZTsKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKHN0cmVhbVRyICYmIHN0cmVhbVRyLnJlc3BvbnNlICYmIHN0cmVhbVRyLnJlc3BvbnNlLmtlZXBBbGl2ZSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhpcy5rZWVwQWxpdmUgPSBmYWxzZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMubGFzdEtlZXBBbGl2ZUV2ZW50ID0gRGF0ZS5ub3coKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdHJlYW1UciAmJiBzdHJlYW1Uci5yZXNwb25zZSAmJiBzdHJlYW1Uci5yZXNwb25zZS5uZXh0KSB7CiAgICAgICAgICAgIHRoaXMud29ya09uUXVldWUoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKERhdGUubm93KCkgLSB0aGlzLmxhc3RLZWVwQWxpdmVFdmVudCA+IDFlNCkgewogICAgICAgICAgY29uc29sZS5sb2coYGNsb3Npbmcgc3RyZWFtIGZvciAke3RoaXMuc3RyZWFtSWR9YCk7CiAgICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBEYXRhIHNlbmRpbmcgYW5kIHJlY2VpdmluZwogICAgICBhc3luYyBzZW5kRGF0YShkYXRhQXJnKSB7CiAgICAgICAgdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LnB1c2goZGF0YUFyZyk7CiAgICAgICAgdGhpcy53b3JrT25RdWV1ZSgpOwogICAgICAgIGF3YWl0IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS53YWl0Rm9yU3BhY2UoKTsKICAgICAgfQogICAgICBhc3luYyBmZXRjaERhdGEoKSB7CiAgICAgICAgaWYgKHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5oYXNTcGFjZSkgewogICAgICAgIH0KICAgICAgICBhd2FpdCB0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkud2FpdEZvckl0ZW1zKCk7CiAgICAgICAgY29uc3QgZGF0YVBhY2thZ2UgPSB0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuc2hpZnQoKTsKICAgICAgICByZXR1cm4gZGF0YVBhY2thZ2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJlYWRzIGZyb20gYSBSZWFkYWJsZSBhbmQgc2VuZHMgaXQgdG8gdGhlIG90aGVyIHNpZGUKICAgICAgICogQHBhcmFtIHJlYWRhYmxlU3RyZWFtQXJnCiAgICAgICAqLwogICAgICBhc3luYyByZWFkRnJvbVdlYnN0cmVhbShyZWFkYWJsZVN0cmVhbUFyZywgY2xvc2VBZnRlclJlYWRpbmcgPSB0cnVlKSB7CiAgICAgICAgY29uc3QgcmVhZGVyID0gcmVhZGFibGVTdHJlYW1BcmcuZ2V0UmVhZGVyKCk7CiAgICAgICAgbGV0IHN0cmVhbUlzRG9uZSA9IGZhbHNlOwogICAgICAgIHdoaWxlICghc3RyZWFtSXNEb25lKSB7CiAgICAgICAgICBjb25zdCB7IHZhbHVlOiB2YWx1ZTIsIGRvbmUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VuZERhdGEodmFsdWUyKTsKICAgICAgICAgIH0KICAgICAgICAgIHN0cmVhbUlzRG9uZSA9IGRvbmU7CiAgICAgICAgfQogICAgICAgIGlmIChjbG9zZUFmdGVyUmVhZGluZykgewogICAgICAgICAgYXdhaXQgdGhpcy5jbG9zZSh0cnVlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgd3JpdGVUb1dlYnN0cmVhbSh3cml0YWJsZVN0cmVhbUFyZykgewogICAgICAgIGNvbnN0IHdyaXRlciA9IHdyaXRhYmxlU3RyZWFtQXJnLmdldFdyaXRlcigpOwogICAgICAgIHdoaWxlICh0aGlzLmtlZXBBbGl2ZSB8fCB0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tIYXNJdGVtcygpKSB7CiAgICAgICAgICBjb25zdCB2YWx1ZTIgPSBhd2FpdCB0aGlzLmZldGNoRGF0YSgpOwogICAgICAgICAgaWYgKHZhbHVlMiA9PT0gY2xvc2luZ0JpdCkgewogICAgICAgICAgICB3cml0ZXIucmVsZWFzZUxvY2soKTsKICAgICAgICAgICAgYXdhaXQgd3JpdGFibGVTdHJlYW1BcmcuY2xvc2UoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBhd2FpdCB3cml0ZXIud3JpdGUodmFsdWUyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNsb3NlcyB0aGUgc3RyZWFtCiAgICAgICAqIGlmIHNlbmRDbG9zaW5nQml0QXJnIGlzIHRydWUsIHRoZSBzdHJlYW0gd2lsbCBzZW5kIGEgY2xvc2luZyBiaXQKICAgICAgICogQHBhcmFtIHNlbmRDbG9zaW5nQml0QXJnCiAgICAgICAqLwogICAgICBhc3luYyBjbG9zZShzZW5kQ2xvc2luZ0JpdEFyZyA9IGZhbHNlKSB7CiAgICAgICAgaWYgKHNlbmRDbG9zaW5nQml0QXJnKSB7CiAgICAgICAgICB0aGlzLnNlbmREYXRhKGNsb3NpbmdCaXQpOwogICAgICAgIH0KICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkdGFyZ2V0LmpzCnZhciBUeXBlZFRhcmdldDsKdmFyIGluaXRfY2xhc3Nlc190eXBlZHRhcmdldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHRhcmdldC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRyb3V0ZXIoKTsKICAgIGluaXRfcGx1Z2lucygpOwogICAgVHlwZWRUYXJnZXQgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmcpIHsKICAgICAgICBpZiAob3B0aW9uc0FyZy5wb3N0TWV0aG9kV2l0aFR5cGVkUm91dGVyICYmICFvcHRpb25zQXJnLnR5cGVkUm91dGVyUmVmKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInlvdSBoYXZlIHRvIHNwZWNpZnkgYSB0eXBlZHJvdXRlciB3aGVuIHVzaW5nIHBvc3RtZXRob2Qgd2l0aCB0eXBlZHJvdXRlciIpOwogICAgICAgIH0KICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zQXJnOwogICAgICB9CiAgICAgIGFzeW5jIHBvc3QocGF5bG9hZEFyZykgewogICAgICAgIGxldCByZXNwb25zZUludGVyZXN0OwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZWRSb3V0ZXJSZWYpIHsKICAgICAgICAgIHJlc3BvbnNlSW50ZXJlc3QgPSBhd2FpdCB0aGlzLm9wdGlvbnMudHlwZWRSb3V0ZXJSZWYuZmlyZUV2ZW50SW50ZXJlc3RNYXAuYWRkSW50ZXJlc3QocGF5bG9hZEFyZy5jb3JyZWxhdGlvbi5pZCwgcGF5bG9hZEFyZyk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHBvc3RNZXRob2QgPSB0aGlzLm9wdGlvbnMucG9zdE1ldGhvZCB8fCB0aGlzLm9wdGlvbnMucG9zdE1ldGhvZFdpdGhUeXBlZFJvdXRlcjsKICAgICAgICBjb25zdCBwb3N0TWV0aG9kUmV0dXJuVmFsdWUgPSBhd2FpdCBwb3N0TWV0aG9kKHBheWxvYWRBcmcpOwogICAgICAgIGxldCByZXNwb25zZUJvZHk7CiAgICAgICAgaWYgKHJlc3BvbnNlSW50ZXJlc3QpIHsKICAgICAgICAgIHJlc3BvbnNlQm9keSA9IGF3YWl0IHJlc3BvbnNlSW50ZXJlc3QuaW50ZXJlc3RGdWxsZmlsbGVkOwogICAgICAgIH0gZWxzZSBpZiAocG9zdE1ldGhvZFJldHVyblZhbHVlKSB7CiAgICAgICAgICByZXNwb25zZUJvZHkgPSBwb3N0TWV0aG9kUmV0dXJuVmFsdWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3BvbnNlQm9keSA9IHBheWxvYWRBcmc7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXNwb25zZUJvZHk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudHlwZWRyZXF1ZXN0LmpzCmZ1bmN0aW9uIGNhbGxHbG9iYWxIb29rKGhvb2tOYW1lLCBlbnRyeSkgewogIHRyeSB7CiAgICBUeXBlZFJvdXRlci5nbG9iYWxIb29rc1tob29rTmFtZV0/LihlbnRyeSk7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICBjb25zb2xlLmVycm9yKGBUeXBlZFJlcXVlc3QgaG9vayBlcnJvciAoJHtob29rTmFtZX0pOmAsIGVycik7CiAgfQp9CnZhciB3ZWJyZXF1ZXN0SW5zdGFuY2UsIFR5cGVkUmVxdWVzdDsKdmFyIGluaXRfY2xhc3Nlc190eXBlZHJlcXVlc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudHlwZWRyZXF1ZXN0LmpzIigpIHsKICAgIGluaXRfcGx1Z2lucygpOwogICAgaW5pdF9jbGFzc2VzX3ZpcnR1YWxzdHJlYW0oKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJlc3BvbnNlZXJyb3IoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJvdXRlcigpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkdGFyZ2V0KCk7CiAgICB3ZWJyZXF1ZXN0SW5zdGFuY2UgPSBuZXcgZGlzdF90c19leHBvcnRzMTQuV2ViUmVxdWVzdCgpOwogICAgVHlwZWRSZXF1ZXN0ID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogQHBhcmFtIHBvc3RFbmRQb2ludEFyZwogICAgICAgKiBAcGFyYW0gbWV0aG9kQXJnCiAgICAgICAqLwogICAgICBjb25zdHJ1Y3Rvcihwb3N0VGFyZ2V0LCBtZXRob2RBcmcpIHsKICAgICAgICB0aGlzLnNraXBIb29rcyA9IGZhbHNlOwogICAgICAgIGlmICh0eXBlb2YgcG9zdFRhcmdldCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIHRoaXMudXJsRW5kUG9pbnQgPSBwb3N0VGFyZ2V0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnR5cGVkVGFyZ2V0ID0gcG9zdFRhcmdldDsKICAgICAgICB9CiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2RBcmc7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZpcmVzIHRoZSByZXF1ZXN0CiAgICAgICAqLwogICAgICBhc3luYyBmaXJlKGZpcmVBcmcsIHVzZUNhY2hlQXJnID0gZmFsc2UpIHsKICAgICAgICBjb25zdCByZXF1ZXN0U3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKICAgICAgICBsZXQgcGF5bG9hZFNlbmRpbmcgPSB7CiAgICAgICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLAogICAgICAgICAgcmVxdWVzdDogZmlyZUFyZywKICAgICAgICAgIHJlc3BvbnNlOiBudWxsLAogICAgICAgICAgY29ycmVsYXRpb246IHsKICAgICAgICAgICAgaWQ6IGlzb3VuaXF1ZTIudW5pKCksCiAgICAgICAgICAgIHBoYXNlOiAicmVxdWVzdCIKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHBheWxvYWRTZW5kaW5nID0gVmlydHVhbFN0cmVhbS5lbmNvZGVQYXlsb2FkRm9yTmV0d29yayhwYXlsb2FkU2VuZGluZywgewogICAgICAgICAgc2VuZE1ldGhvZDogKHBheWxvYWRBcmcpID0+IHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zdFRyT2JqZWN0KHBheWxvYWRBcmcpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICghdGhpcy5za2lwSG9va3MpIHsKICAgICAgICAgIGNhbGxHbG9iYWxIb29rKCJvbk91dGdvaW5nUmVxdWVzdCIsIHsKICAgICAgICAgICAgY29ycmVsYXRpb25JZDogcGF5bG9hZFNlbmRpbmcuY29ycmVsYXRpb24uaWQsCiAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsCiAgICAgICAgICAgIGRpcmVjdGlvbjogIm91dGdvaW5nIiwKICAgICAgICAgICAgcGhhc2U6ICJyZXF1ZXN0IiwKICAgICAgICAgICAgdGltZXN0YW1wOiByZXF1ZXN0U3RhcnRUaW1lLAogICAgICAgICAgICBwYXlsb2FkOiBmaXJlQXJnCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgbGV0IHBheWxvYWRSZWNlaXZpbmc7CiAgICAgICAgcGF5bG9hZFJlY2VpdmluZyA9IGF3YWl0IHRoaXMucG9zdFRyT2JqZWN0KHBheWxvYWRTZW5kaW5nLCB1c2VDYWNoZUFyZyk7CiAgICAgICAgcGF5bG9hZFJlY2VpdmluZyA9IFZpcnR1YWxTdHJlYW0uZGVjb2RlUGF5bG9hZEZyb21OZXR3b3JrKHBheWxvYWRSZWNlaXZpbmcsIHsKICAgICAgICAgIHNlbmRNZXRob2Q6IChwYXlsb2FkQXJnKSA9PiB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc3RUck9iamVjdChwYXlsb2FkQXJnKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAoIXRoaXMuc2tpcEhvb2tzKSB7CiAgICAgICAgICBjYWxsR2xvYmFsSG9vaygib25JbmNvbWluZ1Jlc3BvbnNlIiwgewogICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBwYXlsb2FkU2VuZGluZy5jb3JyZWxhdGlvbi5pZCwKICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCwKICAgICAgICAgICAgZGlyZWN0aW9uOiAiaW5jb21pbmciLAogICAgICAgICAgICBwaGFzZTogInJlc3BvbnNlIiwKICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLAogICAgICAgICAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gcmVxdWVzdFN0YXJ0VGltZSwKICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZFJlY2VpdmluZz8ucmVzcG9uc2UsCiAgICAgICAgICAgIGVycm9yOiBwYXlsb2FkUmVjZWl2aW5nPy5lcnJvcj8udGV4dAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwYXlsb2FkUmVjZWl2aW5nLnJlc3BvbnNlOwogICAgICB9CiAgICAgIGFzeW5jIHBvc3RUck9iamVjdChwYXlsb2FkU2VuZGluZ0FyZywgdXNlQ2FjaGVBcmcgPSBmYWxzZSkgewogICAgICAgIGxldCBwYXlsb2FkUmVjZWl2aW5nOwogICAgICAgIGlmICh0aGlzLnVybEVuZFBvaW50KSB7CiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHdlYnJlcXVlc3RJbnN0YW5jZS5wb3N0SnNvbih0aGlzLnVybEVuZFBvaW50LCBwYXlsb2FkU2VuZGluZ0FyZywgdXNlQ2FjaGVBcmcpOwogICAgICAgICAgcGF5bG9hZFJlY2VpdmluZyA9IHJlc3BvbnNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwYXlsb2FkUmVjZWl2aW5nID0gYXdhaXQgdGhpcy50eXBlZFRhcmdldC5wb3N0KHBheWxvYWRTZW5kaW5nQXJnKTsKICAgICAgICB9CiAgICAgICAgaWYgKHBheWxvYWRSZWNlaXZpbmcuZXJyb3IpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYG1ldGhvZDogPj4ke3RoaXMubWV0aG9kfTw8IGdvdCBhbiBFUlJPUjogIiR7cGF5bG9hZFJlY2VpdmluZy5lcnJvci50ZXh0fSIgd2l0aCBkYXRhICR7SlNPTi5zdHJpbmdpZnkocGF5bG9hZFJlY2VpdmluZy5lcnJvci5kYXRhLCBudWxsLCAyKX1gKTsKICAgICAgICAgIGlmICghcGF5bG9hZFJlY2VpdmluZy5yZXRyeSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZWRSZXNwb25zZUVycm9yKHBheWxvYWRSZWNlaXZpbmcuZXJyb3IudGV4dCwgcGF5bG9hZFJlY2VpdmluZy5lcnJvci5kYXRhKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAocGF5bG9hZFJlY2VpdmluZy5yZXRyeSkgewogICAgICAgICAgY29uc29sZS5sb2coYHNlcnZlciByZXF1ZXN0ZWQgcmV0cnkgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uOiAke3BheWxvYWRSZWNlaXZpbmcucmV0cnkucmVhc29ufWApOwogICAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcihwYXlsb2FkUmVjZWl2aW5nLnJldHJ5LndhaXRGb3JNcyk7CiAgICAgICAgICBwYXlsb2FkUmVjZWl2aW5nID0gYXdhaXQgdGhpcy5wb3N0VHJPYmplY3QocGF5bG9hZFNlbmRpbmdBcmcsIHVzZUNhY2hlQXJnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBheWxvYWRSZWNlaXZpbmc7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMxNSA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMxNSwgewogIFR5cGVkSGFuZGxlcjogKCkgPT4gVHlwZWRIYW5kbGVyLAogIFR5cGVkUmVxdWVzdDogKCkgPT4gVHlwZWRSZXF1ZXN0LAogIFR5cGVkUmVzcG9uc2VFcnJvcjogKCkgPT4gVHlwZWRSZXNwb25zZUVycm9yLAogIFR5cGVkUm91dGVyOiAoKSA9PiBUeXBlZFJvdXRlciwKICBUeXBlZFRhcmdldDogKCkgPT4gVHlwZWRUYXJnZXQsCiAgVmlydHVhbFN0cmVhbTogKCkgPT4gVmlydHVhbFN0cmVhbQp9KTsKdmFyIGluaXRfZGlzdF90czE1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRyZXF1ZXN0KCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRoYW5kbGVyKCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRyb3V0ZXIoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJlc3BvbnNlZXJyb3IoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHRhcmdldCgpOwogICAgaW5pdF9jbGFzc2VzX3ZpcnR1YWxzdHJlYW0oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci91dGlsLmpzCmZ1bmN0aW9uIGlzUHJvbWlzZTIob2JqKSB7CiAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICJmdW5jdGlvbiI7Cn0KZnVuY3Rpb24gc2xlZXAodGltZSwgcmVzb2x2ZVdpdGgpIHsKICBpZiAoIXRpbWUpIHRpbWUgPSAwOwogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMpIHsKICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gcmVzKHJlc29sdmVXaXRoKTsKICAgIH0sIHRpbWUpOwogIH0pOwp9CmZ1bmN0aW9uIHJhbmRvbUludChtaW4zLCBtYXgzKSB7CiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXgzIC0gbWluMyArIDEpICsgbWluMyk7Cn0KZnVuY3Rpb24gcmFuZG9tVG9rZW4oKSB7CiAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKTsKfQpmdW5jdGlvbiBtaWNyb1NlY29uZHMoKSB7CiAgdmFyIHJldCA9IERhdGUubm93KCkgKiAxZTM7CiAgaWYgKHJldCA8PSBsYXN0TXMpIHsKICAgIHJldCA9IGxhc3RNcyArIDE7CiAgfQogIGxhc3RNcyA9IHJldDsKICByZXR1cm4gcmV0Owp9CmZ1bmN0aW9uIHN1cHBvcnRzV2ViTG9ja0FQSSgpIHsKICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIG5hdmlnYXRvci5sb2NrcyAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIG5hdmlnYXRvci5sb2Nrcy5yZXF1ZXN0ID09PSAiZnVuY3Rpb24iKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9IGVsc2UgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQp2YXIgUFJPTUlTRV9SRVNPTFZFRF9GQUxTRSwgUFJPTUlTRV9SRVNPTFZFRF9UUlVFLCBQUk9NSVNFX1JFU09MVkVEX1ZPSUQsIGxhc3RNczsKdmFyIGluaXRfdXRpbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci91dGlsLmpzIigpIHsKICAgIFBST01JU0VfUkVTT0xWRURfRkFMU0UgPSBQcm9taXNlLnJlc29sdmUoZmFsc2UpOwogICAgUFJPTUlTRV9SRVNPTFZFRF9UUlVFID0gUHJvbWlzZS5yZXNvbHZlKHRydWUpOwogICAgUFJPTUlTRV9SRVNPTFZFRF9WT0lEID0gUHJvbWlzZS5yZXNvbHZlKCk7CiAgICBsYXN0TXMgPSAwOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL21ldGhvZHMvbmF0aXZlLmpzCmZ1bmN0aW9uIGNyZWF0ZShjaGFubmVsTmFtZSkgewogIHZhciBzdGF0ZTE0ID0gewogICAgdGltZTogbWljcm9TZWNvbmRzKCksCiAgICBtZXNzYWdlc0NhbGxiYWNrOiBudWxsLAogICAgYmM6IG5ldyBCcm9hZGNhc3RDaGFubmVsKGNoYW5uZWxOYW1lKSwKICAgIHN1YkZuczogW10KICAgIC8vIHN1YnNjcmliZXJGdW5jdGlvbnMKICB9OwogIHN0YXRlMTQuYmMub25tZXNzYWdlID0gZnVuY3Rpb24obXNnRXZlbnQpIHsKICAgIGlmIChzdGF0ZTE0Lm1lc3NhZ2VzQ2FsbGJhY2spIHsKICAgICAgc3RhdGUxNC5tZXNzYWdlc0NhbGxiYWNrKG1zZ0V2ZW50LmRhdGEpOwogICAgfQogIH07CiAgcmV0dXJuIHN0YXRlMTQ7Cn0KZnVuY3Rpb24gY2xvc2UoY2hhbm5lbFN0YXRlKSB7CiAgY2hhbm5lbFN0YXRlLmJjLmNsb3NlKCk7CiAgY2hhbm5lbFN0YXRlLnN1YkZucyA9IFtdOwp9CmZ1bmN0aW9uIHBvc3RNZXNzYWdlKGNoYW5uZWxTdGF0ZSwgbWVzc2FnZUpzb24pIHsKICB0cnkgewogICAgY2hhbm5lbFN0YXRlLmJjLnBvc3RNZXNzYWdlKG1lc3NhZ2VKc29uLCBmYWxzZSk7CiAgICByZXR1cm4gUFJPTUlTRV9SRVNPTFZFRF9WT0lEOwogIH0gY2F0Y2ggKGVycikgewogICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7CiAgfQp9CmZ1bmN0aW9uIG9uTWVzc2FnZShjaGFubmVsU3RhdGUsIGZuKSB7CiAgY2hhbm5lbFN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2sgPSBmbjsKfQpmdW5jdGlvbiBjYW5CZVVzZWQoKSB7CiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAidW5kZWZpbmVkIiAmJiBnbG9iYWxUaGlzLkRlbm8gJiYgZ2xvYmFsVGhpcy5EZW5vLmFyZ3MpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBpZiAoKHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIikgJiYgdHlwZW9mIEJyb2FkY2FzdENoYW5uZWwgPT09ICJmdW5jdGlvbiIpIHsKICAgIGlmIChCcm9hZGNhc3RDaGFubmVsLl9wdWJrZXkpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJCcm9hZGNhc3RDaGFubmVsOiBEbyBub3Qgb3ZlcndyaXRlIHdpbmRvdy5Ccm9hZGNhc3RDaGFubmVsIHdpdGggdGhpcyBtb2R1bGUsIHRoaXMgaXMgbm90IGEgcG9seWZpbGwiKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0gZWxzZSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CmZ1bmN0aW9uIGF2ZXJhZ2VSZXNwb25zZVRpbWUoKSB7CiAgcmV0dXJuIDE1MDsKfQp2YXIgbWljcm9TZWNvbmRzMiwgdHlwZSwgTmF0aXZlTWV0aG9kOwp2YXIgaW5pdF9uYXRpdmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9uYXRpdmUuanMiKCkgewogICAgaW5pdF91dGlsKCk7CiAgICBtaWNyb1NlY29uZHMyID0gbWljcm9TZWNvbmRzOwogICAgdHlwZSA9ICJuYXRpdmUiOwogICAgTmF0aXZlTWV0aG9kID0gewogICAgICBjcmVhdGUsCiAgICAgIGNsb3NlLAogICAgICBvbk1lc3NhZ2UsCiAgICAgIHBvc3RNZXNzYWdlLAogICAgICBjYW5CZVVzZWQsCiAgICAgIHR5cGUsCiAgICAgIGF2ZXJhZ2VSZXNwb25zZVRpbWUsCiAgICAgIG1pY3JvU2Vjb25kczogbWljcm9TZWNvbmRzMgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL29ibGl2aW91cy1zZXRAMi4wLjAvbm9kZV9tb2R1bGVzL29ibGl2aW91cy1zZXQvZGlzdC9lc20vc3JjL2luZGV4LmpzCmZ1bmN0aW9uIHJlbW92ZVRvb09sZFZhbHVlcyhvYmxpdmlvdXNTZXQpIHsKICBjb25zdCBvbGRlclRoZW4gPSBub3coKSAtIG9ibGl2aW91c1NldC50dGw7CiAgY29uc3QgaXRlcmF0b3IyID0gb2JsaXZpb3VzU2V0Lm1hcFtTeW1ib2wuaXRlcmF0b3JdKCk7CiAgd2hpbGUgKHRydWUpIHsKICAgIGNvbnN0IG5leHQyID0gaXRlcmF0b3IyLm5leHQoKS52YWx1ZTsKICAgIGlmICghbmV4dDIpIHsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjb25zdCB2YWx1ZTIgPSBuZXh0MlswXTsKICAgIGNvbnN0IHRpbWUgPSBuZXh0MlsxXTsKICAgIGlmICh0aW1lIDwgb2xkZXJUaGVuKSB7CiAgICAgIG9ibGl2aW91c1NldC5tYXAuZGVsZXRlKHZhbHVlMik7CiAgICB9IGVsc2UgewogICAgICBicmVhazsKICAgIH0KICB9Cn0KZnVuY3Rpb24gbm93KCkgewogIHJldHVybiBEYXRlLm5vdygpOwp9CnZhciBPYmxpdmlvdXNTZXQ7CnZhciBpbml0X3NyYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL29ibGl2aW91cy1zZXRAMi4wLjAvbm9kZV9tb2R1bGVzL29ibGl2aW91cy1zZXQvZGlzdC9lc20vc3JjL2luZGV4LmpzIigpIHsKICAgIE9ibGl2aW91c1NldCA9IGNsYXNzIHsKICAgICAgdHRsOwogICAgICBtYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAvKioKICAgICAgICogQ3JlYXRpbmcgY2FsbHMgdG8gc2V0VGltZW91dCgpIGlzIGV4cGVuc2l2ZSwKICAgICAgICogc28gd2Ugb25seSBkbyB0aGF0IGlmIHRoZXJlIGlzIG5vdCB0aW1lb3V0IGFscmVhZHkgb3Blbi4KICAgICAgICovCiAgICAgIF90byA9IGZhbHNlOwogICAgICBjb25zdHJ1Y3Rvcih0dGwpIHsKICAgICAgICB0aGlzLnR0bCA9IHR0bDsKICAgICAgfQogICAgICBoYXModmFsdWUyKSB7CiAgICAgICAgY29uc3QgdmFsdWVUaW1lID0gdGhpcy5tYXAuZ2V0KHZhbHVlMik7CiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZVRpbWUgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICh2YWx1ZVRpbWUgPCBub3coKSAtIHRoaXMudHRsKSB7CiAgICAgICAgICB0aGlzLm1hcC5kZWxldGUodmFsdWUyKTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgYWRkKHZhbHVlMikgewogICAgICAgIHRoaXMubWFwLmRlbGV0ZSh2YWx1ZTIpOwogICAgICAgIHRoaXMubWFwLnNldCh2YWx1ZTIsIG5vdygpKTsKICAgICAgICBpZiAoIXRoaXMuX3RvKSB7CiAgICAgICAgICB0aGlzLl90byA9IHRydWU7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgdGhpcy5fdG8gPSBmYWxzZTsKICAgICAgICAgICAgcmVtb3ZlVG9vT2xkVmFsdWVzKHRoaXMpOwogICAgICAgICAgfSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNsZWFyKCkgewogICAgICAgIHRoaXMubWFwLmNsZWFyKCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvb3B0aW9ucy5qcwpmdW5jdGlvbiBmaWxsT3B0aW9uc1dpdGhEZWZhdWx0cygpIHsKICB2YXIgb3JpZ2luYWxPcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMF0gOiB7fTsKICB2YXIgb3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3JpZ2luYWxPcHRpb25zKSk7CiAgaWYgKHR5cGVvZiBvcHRpb25zLndlYldvcmtlclN1cHBvcnQgPT09ICJ1bmRlZmluZWQiKSBvcHRpb25zLndlYldvcmtlclN1cHBvcnQgPSB0cnVlOwogIGlmICghb3B0aW9ucy5pZGIpIG9wdGlvbnMuaWRiID0ge307CiAgaWYgKCFvcHRpb25zLmlkYi50dGwpIG9wdGlvbnMuaWRiLnR0bCA9IDFlMyAqIDQ1OwogIGlmICghb3B0aW9ucy5pZGIuZmFsbGJhY2tJbnRlcnZhbCkgb3B0aW9ucy5pZGIuZmFsbGJhY2tJbnRlcnZhbCA9IDE1MDsKICBpZiAob3JpZ2luYWxPcHRpb25zLmlkYiAmJiB0eXBlb2Ygb3JpZ2luYWxPcHRpb25zLmlkYi5vbmNsb3NlID09PSAiZnVuY3Rpb24iKSBvcHRpb25zLmlkYi5vbmNsb3NlID0gb3JpZ2luYWxPcHRpb25zLmlkYi5vbmNsb3NlOwogIGlmICghb3B0aW9ucy5sb2NhbHN0b3JhZ2UpIG9wdGlvbnMubG9jYWxzdG9yYWdlID0ge307CiAgaWYgKCFvcHRpb25zLmxvY2Fsc3RvcmFnZS5yZW1vdmVUaW1lb3V0KSBvcHRpb25zLmxvY2Fsc3RvcmFnZS5yZW1vdmVUaW1lb3V0ID0gMWUzICogNjA7CiAgaWYgKG9yaWdpbmFsT3B0aW9ucy5tZXRob2RzKSBvcHRpb25zLm1ldGhvZHMgPSBvcmlnaW5hbE9wdGlvbnMubWV0aG9kczsKICBpZiAoIW9wdGlvbnMubm9kZSkgb3B0aW9ucy5ub2RlID0ge307CiAgaWYgKCFvcHRpb25zLm5vZGUudHRsKSBvcHRpb25zLm5vZGUudHRsID0gMWUzICogNjAgKiAyOwogIGlmICghb3B0aW9ucy5ub2RlLm1heFBhcmFsbGVsV3JpdGVzKSBvcHRpb25zLm5vZGUubWF4UGFyYWxsZWxXcml0ZXMgPSAyMDQ4OwogIGlmICh0eXBlb2Ygb3B0aW9ucy5ub2RlLnVzZUZhc3RQYXRoID09PSAidW5kZWZpbmVkIikgb3B0aW9ucy5ub2RlLnVzZUZhc3RQYXRoID0gdHJ1ZTsKICByZXR1cm4gb3B0aW9uczsKfQp2YXIgaW5pdF9vcHRpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL29wdGlvbnMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL21ldGhvZHMvaW5kZXhlZC1kYi5qcwpmdW5jdGlvbiBnZXRJZGIoKSB7CiAgaWYgKHR5cGVvZiBpbmRleGVkREIgIT09ICJ1bmRlZmluZWQiKSByZXR1cm4gaW5kZXhlZERCOwogIGlmICh0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIikgewogICAgaWYgKHR5cGVvZiB3aW5kb3cubW96SW5kZXhlZERCICE9PSAidW5kZWZpbmVkIikgcmV0dXJuIHdpbmRvdy5tb3pJbmRleGVkREI7CiAgICBpZiAodHlwZW9mIHdpbmRvdy53ZWJraXRJbmRleGVkREIgIT09ICJ1bmRlZmluZWQiKSByZXR1cm4gd2luZG93LndlYmtpdEluZGV4ZWREQjsKICAgIGlmICh0eXBlb2Ygd2luZG93Lm1zSW5kZXhlZERCICE9PSAidW5kZWZpbmVkIikgcmV0dXJuIHdpbmRvdy5tc0luZGV4ZWREQjsKICB9CiAgcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIGNvbW1pdEluZGV4ZWREQlRyYW5zYWN0aW9uKHR4KSB7CiAgaWYgKHR4LmNvbW1pdCkgewogICAgdHguY29tbWl0KCk7CiAgfQp9CmZ1bmN0aW9uIGNyZWF0ZURhdGFiYXNlKGNoYW5uZWxOYW1lKSB7CiAgdmFyIEluZGV4ZWREQiA9IGdldElkYigpOwogIHZhciBkYk5hbWUgPSBEQl9QUkVGSVggKyBjaGFubmVsTmFtZTsKICB2YXIgb3BlblJlcXVlc3QgPSBJbmRleGVkREIub3BlbihkYk5hbWUpOwogIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2KSB7CiAgICB2YXIgZGIgPSBldi50YXJnZXQucmVzdWx0OwogICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoT0JKRUNUX1NUT1JFX0lELCB7CiAgICAgIGtleVBhdGg6ICJpZCIsCiAgICAgIGF1dG9JbmNyZW1lbnQ6IHRydWUKICAgIH0pOwogIH07CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcywgcmVqKSB7CiAgICBvcGVuUmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZXYpIHsKICAgICAgcmV0dXJuIHJlaihldik7CiAgICB9OwogICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CiAgICAgIHJlcyhvcGVuUmVxdWVzdC5yZXN1bHQpOwogICAgfTsKICB9KTsKfQpmdW5jdGlvbiB3cml0ZU1lc3NhZ2UoZGIsIHJlYWRlclV1aWQsIG1lc3NhZ2VKc29uKSB7CiAgdmFyIHRpbWUgPSBEYXRlLm5vdygpOwogIHZhciB3cml0ZU9iamVjdCA9IHsKICAgIHV1aWQ6IHJlYWRlclV1aWQsCiAgICB0aW1lLAogICAgZGF0YTogbWVzc2FnZUpzb24KICB9OwogIHZhciB0eCA9IGRiLnRyYW5zYWN0aW9uKFtPQkpFQ1RfU1RPUkVfSURdLCAicmVhZHdyaXRlIiwgVFJBTlNBQ1RJT05fU0VUVElOR1MpOwogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMsIHJlaikgewogICAgdHgub25jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gcmVzKCk7CiAgICB9OwogICAgdHgub25lcnJvciA9IGZ1bmN0aW9uKGV2KSB7CiAgICAgIHJldHVybiByZWooZXYpOwogICAgfTsKICAgIHZhciBvYmplY3RTdG9yZSA9IHR4Lm9iamVjdFN0b3JlKE9CSkVDVF9TVE9SRV9JRCk7CiAgICBvYmplY3RTdG9yZS5hZGQod3JpdGVPYmplY3QpOwogICAgY29tbWl0SW5kZXhlZERCVHJhbnNhY3Rpb24odHgpOwogIH0pOwp9CmZ1bmN0aW9uIGdldEFsbE1lc3NhZ2VzKGRiKSB7CiAgdmFyIHR4ID0gZGIudHJhbnNhY3Rpb24oT0JKRUNUX1NUT1JFX0lELCAicmVhZG9ubHkiLCBUUkFOU0FDVElPTl9TRVRUSU5HUyk7CiAgdmFyIG9iamVjdFN0b3JlID0gdHgub2JqZWN0U3RvcmUoT0JKRUNUX1NUT1JFX0lEKTsKICB2YXIgcmV0ID0gW107CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcykgewogICAgb2JqZWN0U3RvcmUub3BlbkN1cnNvcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2KSB7CiAgICAgIHZhciBjdXJzb3IgPSBldi50YXJnZXQucmVzdWx0OwogICAgICBpZiAoY3Vyc29yKSB7CiAgICAgICAgcmV0LnB1c2goY3Vyc29yLnZhbHVlKTsKICAgICAgICBjdXJzb3JbImNvbnRpbnVlIl0oKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb21taXRJbmRleGVkREJUcmFuc2FjdGlvbih0eCk7CiAgICAgICAgcmVzKHJldCk7CiAgICAgIH0KICAgIH07CiAgfSk7Cn0KZnVuY3Rpb24gZ2V0TWVzc2FnZXNIaWdoZXJUaGFuKGRiLCBsYXN0Q3Vyc29ySWQpIHsKICB2YXIgdHggPSBkYi50cmFuc2FjdGlvbihPQkpFQ1RfU1RPUkVfSUQsICJyZWFkb25seSIsIFRSQU5TQUNUSU9OX1NFVFRJTkdTKTsKICB2YXIgb2JqZWN0U3RvcmUgPSB0eC5vYmplY3RTdG9yZShPQkpFQ1RfU1RPUkVfSUQpOwogIHZhciByZXQgPSBbXTsKICB2YXIga2V5UmFuZ2VWYWx1ZSA9IElEQktleVJhbmdlLmJvdW5kKGxhc3RDdXJzb3JJZCArIDEsIEluZmluaXR5KTsKICBpZiAob2JqZWN0U3RvcmUuZ2V0QWxsKSB7CiAgICB2YXIgZ2V0QWxsUmVxdWVzdCA9IG9iamVjdFN0b3JlLmdldEFsbChrZXlSYW5nZVZhbHVlKTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMsIHJlaikgewogICAgICBnZXRBbGxSZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihlcnIpIHsKICAgICAgICByZXR1cm4gcmVqKGVycik7CiAgICAgIH07CiAgICAgIGdldEFsbFJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oZTExKSB7CiAgICAgICAgcmVzKGUxMS50YXJnZXQucmVzdWx0KTsKICAgICAgfTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiBvcGVuQ3Vyc29yKCkgewogICAgdHJ5IHsKICAgICAga2V5UmFuZ2VWYWx1ZSA9IElEQktleVJhbmdlLmJvdW5kKGxhc3RDdXJzb3JJZCArIDEsIEluZmluaXR5KTsKICAgICAgcmV0dXJuIG9iamVjdFN0b3JlLm9wZW5DdXJzb3Ioa2V5UmFuZ2VWYWx1ZSk7CiAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgcmV0dXJuIG9iamVjdFN0b3JlLm9wZW5DdXJzb3IoKTsKICAgIH0KICB9CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcywgcmVqKSB7CiAgICB2YXIgb3BlbkN1cnNvclJlcXVlc3QgPSBvcGVuQ3Vyc29yKCk7CiAgICBvcGVuQ3Vyc29yUmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZXJyKSB7CiAgICAgIHJldHVybiByZWooZXJyKTsKICAgIH07CiAgICBvcGVuQ3Vyc29yUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldikgewogICAgICB2YXIgY3Vyc29yID0gZXYudGFyZ2V0LnJlc3VsdDsKICAgICAgaWYgKGN1cnNvcikgewogICAgICAgIGlmIChjdXJzb3IudmFsdWUuaWQgPCBsYXN0Q3Vyc29ySWQgKyAxKSB7CiAgICAgICAgICBjdXJzb3JbImNvbnRpbnVlIl0obGFzdEN1cnNvcklkICsgMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldC5wdXNoKGN1cnNvci52YWx1ZSk7CiAgICAgICAgICBjdXJzb3JbImNvbnRpbnVlIl0oKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29tbWl0SW5kZXhlZERCVHJhbnNhY3Rpb24odHgpOwogICAgICAgIHJlcyhyZXQpOwogICAgICB9CiAgICB9OwogIH0pOwp9CmZ1bmN0aW9uIHJlbW92ZU1lc3NhZ2VzQnlJZChjaGFubmVsU3RhdGUsIGlkcykgewogIGlmIChjaGFubmVsU3RhdGUuY2xvc2VkKSB7CiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTsKICB9CiAgdmFyIHR4ID0gY2hhbm5lbFN0YXRlLmRiLnRyYW5zYWN0aW9uKE9CSkVDVF9TVE9SRV9JRCwgInJlYWR3cml0ZSIsIFRSQU5TQUNUSU9OX1NFVFRJTkdTKTsKICB2YXIgb2JqZWN0U3RvcmUgPSB0eC5vYmplY3RTdG9yZShPQkpFQ1RfU1RPUkVfSUQpOwogIHJldHVybiBQcm9taXNlLmFsbChpZHMubWFwKGZ1bmN0aW9uKGlkKSB7CiAgICB2YXIgZGVsZXRlUmVxdWVzdCA9IG9iamVjdFN0b3JlWyJkZWxldGUiXShpZCk7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzKSB7CiAgICAgIGRlbGV0ZVJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHJlcygpOwogICAgICB9OwogICAgfSk7CiAgfSkpOwp9CmZ1bmN0aW9uIGdldE9sZE1lc3NhZ2VzKGRiLCB0dGwpIHsKICB2YXIgb2xkZXJUaGVuID0gRGF0ZS5ub3coKSAtIHR0bDsKICB2YXIgdHggPSBkYi50cmFuc2FjdGlvbihPQkpFQ1RfU1RPUkVfSUQsICJyZWFkb25seSIsIFRSQU5TQUNUSU9OX1NFVFRJTkdTKTsKICB2YXIgb2JqZWN0U3RvcmUgPSB0eC5vYmplY3RTdG9yZShPQkpFQ1RfU1RPUkVfSUQpOwogIHZhciByZXQgPSBbXTsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzKSB7CiAgICBvYmplY3RTdG9yZS5vcGVuQ3Vyc29yKCkub25zdWNjZXNzID0gZnVuY3Rpb24oZXYpIHsKICAgICAgdmFyIGN1cnNvciA9IGV2LnRhcmdldC5yZXN1bHQ7CiAgICAgIGlmIChjdXJzb3IpIHsKICAgICAgICB2YXIgbXNnT2JrID0gY3Vyc29yLnZhbHVlOwogICAgICAgIGlmIChtc2dPYmsudGltZSA8IG9sZGVyVGhlbikgewogICAgICAgICAgcmV0LnB1c2gobXNnT2JrKTsKICAgICAgICAgIGN1cnNvclsiY29udGludWUiXSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb21taXRJbmRleGVkREJUcmFuc2FjdGlvbih0eCk7CiAgICAgICAgICByZXMocmV0KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzKHJldCk7CiAgICAgIH0KICAgIH07CiAgfSk7Cn0KZnVuY3Rpb24gY2xlYW5PbGRNZXNzYWdlcyhjaGFubmVsU3RhdGUpIHsKICByZXR1cm4gZ2V0T2xkTWVzc2FnZXMoY2hhbm5lbFN0YXRlLmRiLCBjaGFubmVsU3RhdGUub3B0aW9ucy5pZGIudHRsKS50aGVuKGZ1bmN0aW9uKHRvb09sZCkgewogICAgcmV0dXJuIHJlbW92ZU1lc3NhZ2VzQnlJZChjaGFubmVsU3RhdGUsIHRvb09sZC5tYXAoZnVuY3Rpb24obXNnKSB7CiAgICAgIHJldHVybiBtc2cuaWQ7CiAgICB9KSk7CiAgfSk7Cn0KZnVuY3Rpb24gY3JlYXRlMihjaGFubmVsTmFtZSwgb3B0aW9ucykgewogIG9wdGlvbnMgPSBmaWxsT3B0aW9uc1dpdGhEZWZhdWx0cyhvcHRpb25zKTsKICByZXR1cm4gY3JlYXRlRGF0YWJhc2UoY2hhbm5lbE5hbWUpLnRoZW4oZnVuY3Rpb24oZGIpIHsKICAgIHZhciBzdGF0ZTE0ID0gewogICAgICBjbG9zZWQ6IGZhbHNlLAogICAgICBsYXN0Q3Vyc29ySWQ6IDAsCiAgICAgIGNoYW5uZWxOYW1lLAogICAgICBvcHRpb25zLAogICAgICB1dWlkOiByYW5kb21Ub2tlbigpLAogICAgICAvKioKICAgICAgICogZW1pdHRlZE1lc3NhZ2VzSWRzCiAgICAgICAqIGNvbnRhaW5zIGFsbCBtZXNzYWdlcyB0aGF0IGhhdmUgYmVlbiBlbWl0dGVkIGJlZm9yZQogICAgICAgKiBAdHlwZSB7T2JsaXZpb3VzU2V0fQogICAgICAgKi8KICAgICAgZU1JczogbmV3IE9ibGl2aW91c1NldChvcHRpb25zLmlkYi50dGwgKiAyKSwKICAgICAgLy8gZW5zdXJlcyB3ZSBkbyBub3QgcmVhZCBtZXNzYWdlcyBpbiBwYXJhbGxlbAogICAgICB3cml0ZUJsb2NrUHJvbWlzZTogUFJPTUlTRV9SRVNPTFZFRF9WT0lELAogICAgICBtZXNzYWdlc0NhbGxiYWNrOiBudWxsLAogICAgICByZWFkUXVldWVQcm9taXNlczogW10sCiAgICAgIGRiCiAgICB9OwogICAgZGIub25jbG9zZSA9IGZ1bmN0aW9uKCkgewogICAgICBzdGF0ZTE0LmNsb3NlZCA9IHRydWU7CiAgICAgIGlmIChvcHRpb25zLmlkYi5vbmNsb3NlKSBvcHRpb25zLmlkYi5vbmNsb3NlKCk7CiAgICB9OwogICAgX3JlYWRMb29wKHN0YXRlMTQpOwogICAgcmV0dXJuIHN0YXRlMTQ7CiAgfSk7Cn0KZnVuY3Rpb24gX3JlYWRMb29wKHN0YXRlMTQpIHsKICBpZiAoc3RhdGUxNC5jbG9zZWQpIHJldHVybjsKICByZWFkTmV3TWVzc2FnZXMoc3RhdGUxNCkudGhlbihmdW5jdGlvbigpIHsKICAgIHJldHVybiBzbGVlcChzdGF0ZTE0Lm9wdGlvbnMuaWRiLmZhbGxiYWNrSW50ZXJ2YWwpOwogIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gX3JlYWRMb29wKHN0YXRlMTQpOwogIH0pOwp9CmZ1bmN0aW9uIF9maWx0ZXJNZXNzYWdlKG1zZ09iaiwgc3RhdGUxNCkgewogIGlmIChtc2dPYmoudXVpZCA9PT0gc3RhdGUxNC51dWlkKSByZXR1cm4gZmFsc2U7CiAgaWYgKHN0YXRlMTQuZU1Jcy5oYXMobXNnT2JqLmlkKSkgcmV0dXJuIGZhbHNlOwogIGlmIChtc2dPYmouZGF0YS50aW1lIDwgc3RhdGUxNC5tZXNzYWdlc0NhbGxiYWNrVGltZSkgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIHJlYWROZXdNZXNzYWdlcyhzdGF0ZTE0KSB7CiAgaWYgKHN0YXRlMTQuY2xvc2VkKSByZXR1cm4gUFJPTUlTRV9SRVNPTFZFRF9WT0lEOwogIGlmICghc3RhdGUxNC5tZXNzYWdlc0NhbGxiYWNrKSByZXR1cm4gUFJPTUlTRV9SRVNPTFZFRF9WT0lEOwogIHJldHVybiBnZXRNZXNzYWdlc0hpZ2hlclRoYW4oc3RhdGUxNC5kYiwgc3RhdGUxNC5sYXN0Q3Vyc29ySWQpLnRoZW4oZnVuY3Rpb24obmV3ZXJNZXNzYWdlcykgewogICAgdmFyIHVzZU1lc3NhZ2VzID0gbmV3ZXJNZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24obXNnT2JqKSB7CiAgICAgIHJldHVybiAhIW1zZ09iajsKICAgIH0pLm1hcChmdW5jdGlvbihtc2dPYmopIHsKICAgICAgaWYgKG1zZ09iai5pZCA+IHN0YXRlMTQubGFzdEN1cnNvcklkKSB7CiAgICAgICAgc3RhdGUxNC5sYXN0Q3Vyc29ySWQgPSBtc2dPYmouaWQ7CiAgICAgIH0KICAgICAgcmV0dXJuIG1zZ09iajsKICAgIH0pLmZpbHRlcihmdW5jdGlvbihtc2dPYmopIHsKICAgICAgcmV0dXJuIF9maWx0ZXJNZXNzYWdlKG1zZ09iaiwgc3RhdGUxNCk7CiAgICB9KS5zb3J0KGZ1bmN0aW9uKG1zZ09iakEsIG1zZ09iakIpIHsKICAgICAgcmV0dXJuIG1zZ09iakEudGltZSAtIG1zZ09iakIudGltZTsKICAgIH0pOwogICAgdXNlTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbihtc2dPYmopIHsKICAgICAgaWYgKHN0YXRlMTQubWVzc2FnZXNDYWxsYmFjaykgewogICAgICAgIHN0YXRlMTQuZU1Jcy5hZGQobXNnT2JqLmlkKTsKICAgICAgICBzdGF0ZTE0Lm1lc3NhZ2VzQ2FsbGJhY2sobXNnT2JqLmRhdGEpOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQ7CiAgfSk7Cn0KZnVuY3Rpb24gY2xvc2UyKGNoYW5uZWxTdGF0ZSkgewogIGNoYW5uZWxTdGF0ZS5jbG9zZWQgPSB0cnVlOwogIGNoYW5uZWxTdGF0ZS5kYi5jbG9zZSgpOwp9CmZ1bmN0aW9uIHBvc3RNZXNzYWdlMihjaGFubmVsU3RhdGUsIG1lc3NhZ2VKc29uKSB7CiAgY2hhbm5lbFN0YXRlLndyaXRlQmxvY2tQcm9taXNlID0gY2hhbm5lbFN0YXRlLndyaXRlQmxvY2tQcm9taXNlLnRoZW4oZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gd3JpdGVNZXNzYWdlKGNoYW5uZWxTdGF0ZS5kYiwgY2hhbm5lbFN0YXRlLnV1aWQsIG1lc3NhZ2VKc29uKTsKICB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgaWYgKHJhbmRvbUludCgwLCAxMCkgPT09IDApIHsKICAgICAgY2xlYW5PbGRNZXNzYWdlcyhjaGFubmVsU3RhdGUpOwogICAgfQogIH0pOwogIHJldHVybiBjaGFubmVsU3RhdGUud3JpdGVCbG9ja1Byb21pc2U7Cn0KZnVuY3Rpb24gb25NZXNzYWdlMihjaGFubmVsU3RhdGUsIGZuLCB0aW1lKSB7CiAgY2hhbm5lbFN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2tUaW1lID0gdGltZTsKICBjaGFubmVsU3RhdGUubWVzc2FnZXNDYWxsYmFjayA9IGZuOwogIHJlYWROZXdNZXNzYWdlcyhjaGFubmVsU3RhdGUpOwp9CmZ1bmN0aW9uIGNhbkJlVXNlZDIoKSB7CiAgcmV0dXJuICEhZ2V0SWRiKCk7Cn0KZnVuY3Rpb24gYXZlcmFnZVJlc3BvbnNlVGltZTIob3B0aW9ucykgewogIHJldHVybiBvcHRpb25zLmlkYi5mYWxsYmFja0ludGVydmFsICogMjsKfQp2YXIgbWljcm9TZWNvbmRzMywgREJfUFJFRklYLCBPQkpFQ1RfU1RPUkVfSUQsIFRSQU5TQUNUSU9OX1NFVFRJTkdTLCB0eXBlMiwgSW5kZXhlZERCTWV0aG9kOwp2YXIgaW5pdF9pbmRleGVkX2RiID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL21ldGhvZHMvaW5kZXhlZC1kYi5qcyIoKSB7CiAgICBpbml0X3V0aWwoKTsKICAgIGluaXRfc3JjKCk7CiAgICBpbml0X29wdGlvbnMoKTsKICAgIG1pY3JvU2Vjb25kczMgPSBtaWNyb1NlY29uZHM7CiAgICBEQl9QUkVGSVggPSAicHVia2V5LmJyb2FkY2FzdC1jaGFubmVsLTAtIjsKICAgIE9CSkVDVF9TVE9SRV9JRCA9ICJtZXNzYWdlcyI7CiAgICBUUkFOU0FDVElPTl9TRVRUSU5HUyA9IHsKICAgICAgZHVyYWJpbGl0eTogInJlbGF4ZWQiCiAgICB9OwogICAgdHlwZTIgPSAiaWRiIjsKICAgIEluZGV4ZWREQk1ldGhvZCA9IHsKICAgICAgY3JlYXRlOiBjcmVhdGUyLAogICAgICBjbG9zZTogY2xvc2UyLAogICAgICBvbk1lc3NhZ2U6IG9uTWVzc2FnZTIsCiAgICAgIHBvc3RNZXNzYWdlOiBwb3N0TWVzc2FnZTIsCiAgICAgIGNhbkJlVXNlZDogY2FuQmVVc2VkMiwKICAgICAgdHlwZTogdHlwZTIsCiAgICAgIGF2ZXJhZ2VSZXNwb25zZVRpbWU6IGF2ZXJhZ2VSZXNwb25zZVRpbWUyLAogICAgICBtaWNyb1NlY29uZHM6IG1pY3JvU2Vjb25kczMKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9sb2NhbHN0b3JhZ2UuanMKZnVuY3Rpb24gZ2V0TG9jYWxTdG9yYWdlKCkgewogIHZhciBsb2NhbFN0b3JhZ2UyOwogIGlmICh0eXBlb2Ygd2luZG93ID09PSAidW5kZWZpbmVkIikgcmV0dXJuIG51bGw7CiAgdHJ5IHsKICAgIGxvY2FsU3RvcmFnZTIgPSB3aW5kb3cubG9jYWxTdG9yYWdlOwogICAgbG9jYWxTdG9yYWdlMiA9IHdpbmRvd1siaWU4LWV2ZW50bGlzdGVuZXIvc3RvcmFnZSJdIHx8IHdpbmRvdy5sb2NhbFN0b3JhZ2U7CiAgfSBjYXRjaCAoZTExKSB7CiAgfQogIHJldHVybiBsb2NhbFN0b3JhZ2UyOwp9CmZ1bmN0aW9uIHN0b3JhZ2VLZXkoY2hhbm5lbE5hbWUpIHsKICByZXR1cm4gS0VZX1BSRUZJWCArIGNoYW5uZWxOYW1lOwp9CmZ1bmN0aW9uIHBvc3RNZXNzYWdlMyhjaGFubmVsU3RhdGUsIG1lc3NhZ2VKc29uKSB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcykgewogICAgc2xlZXAoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICB2YXIga2V5MiA9IHN0b3JhZ2VLZXkoY2hhbm5lbFN0YXRlLmNoYW5uZWxOYW1lKTsKICAgICAgdmFyIHdyaXRlT2JqID0gewogICAgICAgIHRva2VuOiByYW5kb21Ub2tlbigpLAogICAgICAgIHRpbWU6IERhdGUubm93KCksCiAgICAgICAgZGF0YTogbWVzc2FnZUpzb24sCiAgICAgICAgdXVpZDogY2hhbm5lbFN0YXRlLnV1aWQKICAgICAgfTsKICAgICAgdmFyIHZhbHVlMiA9IEpTT04uc3RyaW5naWZ5KHdyaXRlT2JqKTsKICAgICAgZ2V0TG9jYWxTdG9yYWdlKCkuc2V0SXRlbShrZXkyLCB2YWx1ZTIpOwogICAgICB2YXIgZXYgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKTsKICAgICAgZXYuaW5pdEV2ZW50KCJzdG9yYWdlIiwgdHJ1ZSwgdHJ1ZSk7CiAgICAgIGV2LmtleSA9IGtleTI7CiAgICAgIGV2Lm5ld1ZhbHVlID0gdmFsdWUyOwogICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldik7CiAgICAgIHJlcygpOwogICAgfSk7CiAgfSk7Cn0KZnVuY3Rpb24gYWRkU3RvcmFnZUV2ZW50TGlzdGVuZXIoY2hhbm5lbE5hbWUsIGZuKSB7CiAgdmFyIGtleTIgPSBzdG9yYWdlS2V5KGNoYW5uZWxOYW1lKTsKICB2YXIgbGlzdGVuZXIyID0gZnVuY3Rpb24gbGlzdGVuZXIzKGV2KSB7CiAgICBpZiAoZXYua2V5ID09PSBrZXkyKSB7CiAgICAgIGZuKEpTT04ucGFyc2UoZXYubmV3VmFsdWUpKTsKICAgIH0KICB9OwogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzdG9yYWdlIiwgbGlzdGVuZXIyKTsKICByZXR1cm4gbGlzdGVuZXIyOwp9CmZ1bmN0aW9uIHJlbW92ZVN0b3JhZ2VFdmVudExpc3RlbmVyKGxpc3RlbmVyMikgewogIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzdG9yYWdlIiwgbGlzdGVuZXIyKTsKfQpmdW5jdGlvbiBjcmVhdGUzKGNoYW5uZWxOYW1lLCBvcHRpb25zKSB7CiAgb3B0aW9ucyA9IGZpbGxPcHRpb25zV2l0aERlZmF1bHRzKG9wdGlvbnMpOwogIGlmICghY2FuQmVVc2VkMygpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkJyb2FkY2FzdENoYW5uZWw6IGxvY2Fsc3RvcmFnZSBjYW5ub3QgYmUgdXNlZCIpOwogIH0KICB2YXIgdXVpZCA9IHJhbmRvbVRva2VuKCk7CiAgdmFyIGVNSXMgPSBuZXcgT2JsaXZpb3VzU2V0KG9wdGlvbnMubG9jYWxzdG9yYWdlLnJlbW92ZVRpbWVvdXQpOwogIHZhciBzdGF0ZTE0ID0gewogICAgY2hhbm5lbE5hbWUsCiAgICB1dWlkLAogICAgZU1JcwogICAgLy8gZW1pdHRlZE1lc3NhZ2VzSWRzCiAgfTsKICBzdGF0ZTE0Lmxpc3RlbmVyID0gYWRkU3RvcmFnZUV2ZW50TGlzdGVuZXIoY2hhbm5lbE5hbWUsIGZ1bmN0aW9uKG1zZ09iaikgewogICAgaWYgKCFzdGF0ZTE0Lm1lc3NhZ2VzQ2FsbGJhY2spIHJldHVybjsKICAgIGlmIChtc2dPYmoudXVpZCA9PT0gdXVpZCkgcmV0dXJuOwogICAgaWYgKCFtc2dPYmoudG9rZW4gfHwgZU1Jcy5oYXMobXNnT2JqLnRva2VuKSkgcmV0dXJuOwogICAgaWYgKG1zZ09iai5kYXRhLnRpbWUgJiYgbXNnT2JqLmRhdGEudGltZSA8IHN0YXRlMTQubWVzc2FnZXNDYWxsYmFja1RpbWUpIHJldHVybjsKICAgIGVNSXMuYWRkKG1zZ09iai50b2tlbik7CiAgICBzdGF0ZTE0Lm1lc3NhZ2VzQ2FsbGJhY2sobXNnT2JqLmRhdGEpOwogIH0pOwogIHJldHVybiBzdGF0ZTE0Owp9CmZ1bmN0aW9uIGNsb3NlMyhjaGFubmVsU3RhdGUpIHsKICByZW1vdmVTdG9yYWdlRXZlbnRMaXN0ZW5lcihjaGFubmVsU3RhdGUubGlzdGVuZXIpOwp9CmZ1bmN0aW9uIG9uTWVzc2FnZTMoY2hhbm5lbFN0YXRlLCBmbiwgdGltZSkgewogIGNoYW5uZWxTdGF0ZS5tZXNzYWdlc0NhbGxiYWNrVGltZSA9IHRpbWU7CiAgY2hhbm5lbFN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2sgPSBmbjsKfQpmdW5jdGlvbiBjYW5CZVVzZWQzKCkgewogIHZhciBscyA9IGdldExvY2FsU3RvcmFnZSgpOwogIGlmICghbHMpIHJldHVybiBmYWxzZTsKICB0cnkgewogICAgdmFyIGtleTIgPSAiX19icm9hZGNhc3RjaGFubmVsX2NoZWNrIjsKICAgIGxzLnNldEl0ZW0oa2V5MiwgIndvcmtzIik7CiAgICBscy5yZW1vdmVJdGVtKGtleTIpOwogIH0gY2F0Y2ggKGUxMSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiBhdmVyYWdlUmVzcG9uc2VUaW1lMygpIHsKICB2YXIgZGVmYXVsdFRpbWUgPSAxMjA7CiAgdmFyIHVzZXJBZ2VudDIgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7CiAgaWYgKHVzZXJBZ2VudDIuaW5jbHVkZXMoInNhZmFyaSIpICYmICF1c2VyQWdlbnQyLmluY2x1ZGVzKCJjaHJvbWUiKSkgewogICAgcmV0dXJuIGRlZmF1bHRUaW1lICogMjsKICB9CiAgcmV0dXJuIGRlZmF1bHRUaW1lOwp9CnZhciBtaWNyb1NlY29uZHM0LCBLRVlfUFJFRklYLCB0eXBlMywgTG9jYWxzdG9yYWdlTWV0aG9kOwp2YXIgaW5pdF9sb2NhbHN0b3JhZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9sb2NhbHN0b3JhZ2UuanMiKCkgewogICAgaW5pdF9zcmMoKTsKICAgIGluaXRfb3B0aW9ucygpOwogICAgaW5pdF91dGlsKCk7CiAgICBtaWNyb1NlY29uZHM0ID0gbWljcm9TZWNvbmRzOwogICAgS0VZX1BSRUZJWCA9ICJwdWJrZXkuYnJvYWRjYXN0Q2hhbm5lbC0iOwogICAgdHlwZTMgPSAibG9jYWxzdG9yYWdlIjsKICAgIExvY2Fsc3RvcmFnZU1ldGhvZCA9IHsKICAgICAgY3JlYXRlOiBjcmVhdGUzLAogICAgICBjbG9zZTogY2xvc2UzLAogICAgICBvbk1lc3NhZ2U6IG9uTWVzc2FnZTMsCiAgICAgIHBvc3RNZXNzYWdlOiBwb3N0TWVzc2FnZTMsCiAgICAgIGNhbkJlVXNlZDogY2FuQmVVc2VkMywKICAgICAgdHlwZTogdHlwZTMsCiAgICAgIGF2ZXJhZ2VSZXNwb25zZVRpbWU6IGF2ZXJhZ2VSZXNwb25zZVRpbWUzLAogICAgICBtaWNyb1NlY29uZHM6IG1pY3JvU2Vjb25kczQKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9zaW11bGF0ZS5qcwpmdW5jdGlvbiBjcmVhdGU0KGNoYW5uZWxOYW1lKSB7CiAgdmFyIHN0YXRlMTQgPSB7CiAgICB0aW1lOiBtaWNyb1NlY29uZHM1KCksCiAgICBuYW1lOiBjaGFubmVsTmFtZSwKICAgIG1lc3NhZ2VzQ2FsbGJhY2s6IG51bGwKICB9OwogIFNJTVVMQVRFX0NIQU5ORUxTLmFkZChzdGF0ZTE0KTsKICByZXR1cm4gc3RhdGUxNDsKfQpmdW5jdGlvbiBjbG9zZTQoY2hhbm5lbFN0YXRlKSB7CiAgU0lNVUxBVEVfQ0hBTk5FTFNbImRlbGV0ZSJdKGNoYW5uZWxTdGF0ZSk7Cn0KZnVuY3Rpb24gcG9zdE1lc3NhZ2U0KGNoYW5uZWxTdGF0ZSwgbWVzc2FnZUpzb24pIHsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzKSB7CiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgdmFyIGNoYW5uZWxBcnJheSA9IEFycmF5LmZyb20oU0lNVUxBVEVfQ0hBTk5FTFMpOwogICAgICBjaGFubmVsQXJyYXkuZm9yRWFjaChmdW5jdGlvbihjaGFubmVsKSB7CiAgICAgICAgaWYgKGNoYW5uZWwubmFtZSA9PT0gY2hhbm5lbFN0YXRlLm5hbWUgJiYgLy8gaGFzIHNhbWUgbmFtZQogICAgICAgIGNoYW5uZWwgIT09IGNoYW5uZWxTdGF0ZSAmJiAvLyBub3Qgb3duIGNoYW5uZWwKICAgICAgICAhIWNoYW5uZWwubWVzc2FnZXNDYWxsYmFjayAmJiAvLyBoYXMgc3Vic2NyaWJlcnMKICAgICAgICBjaGFubmVsLnRpbWUgPCBtZXNzYWdlSnNvbi50aW1lKSB7CiAgICAgICAgICBjaGFubmVsLm1lc3NhZ2VzQ2FsbGJhY2sobWVzc2FnZUpzb24pOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJlcygpOwogICAgfSwgU0lNVUxBVEVfREVMQVlfVElNRSk7CiAgfSk7Cn0KZnVuY3Rpb24gb25NZXNzYWdlNChjaGFubmVsU3RhdGUsIGZuKSB7CiAgY2hhbm5lbFN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2sgPSBmbjsKfQpmdW5jdGlvbiBjYW5CZVVzZWQ0KCkgewogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIGF2ZXJhZ2VSZXNwb25zZVRpbWU0KCkgewogIHJldHVybiBTSU1VTEFURV9ERUxBWV9USU1FOwp9CnZhciBtaWNyb1NlY29uZHM1LCB0eXBlNCwgU0lNVUxBVEVfQ0hBTk5FTFMsIFNJTVVMQVRFX0RFTEFZX1RJTUUsIFNpbXVsYXRlTWV0aG9kOwp2YXIgaW5pdF9zaW11bGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2RzL3NpbXVsYXRlLmpzIigpIHsKICAgIGluaXRfdXRpbCgpOwogICAgbWljcm9TZWNvbmRzNSA9IG1pY3JvU2Vjb25kczsKICAgIHR5cGU0ID0gInNpbXVsYXRlIjsKICAgIFNJTVVMQVRFX0NIQU5ORUxTID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgIFNJTVVMQVRFX0RFTEFZX1RJTUUgPSA1OwogICAgU2ltdWxhdGVNZXRob2QgPSB7CiAgICAgIGNyZWF0ZTogY3JlYXRlNCwKICAgICAgY2xvc2U6IGNsb3NlNCwKICAgICAgb25NZXNzYWdlOiBvbk1lc3NhZ2U0LAogICAgICBwb3N0TWVzc2FnZTogcG9zdE1lc3NhZ2U0LAogICAgICBjYW5CZVVzZWQ6IGNhbkJlVXNlZDQsCiAgICAgIHR5cGU6IHR5cGU0LAogICAgICBhdmVyYWdlUmVzcG9uc2VUaW1lOiBhdmVyYWdlUmVzcG9uc2VUaW1lNCwKICAgICAgbWljcm9TZWNvbmRzOiBtaWNyb1NlY29uZHM1CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL21ldGhvZC1jaG9vc2VyLmpzCmZ1bmN0aW9uIGNob29zZU1ldGhvZChvcHRpb25zKSB7CiAgdmFyIGNob29zZU1ldGhvZHMgPSBbXS5jb25jYXQob3B0aW9ucy5tZXRob2RzLCBNRVRIT0RTKS5maWx0ZXIoQm9vbGVhbik7CiAgaWYgKG9wdGlvbnMudHlwZSkgewogICAgaWYgKG9wdGlvbnMudHlwZSA9PT0gInNpbXVsYXRlIikgewogICAgICByZXR1cm4gU2ltdWxhdGVNZXRob2Q7CiAgICB9CiAgICB2YXIgcmV0ID0gY2hvb3NlTWV0aG9kcy5maW5kKGZ1bmN0aW9uKG02KSB7CiAgICAgIHJldHVybiBtNi50eXBlID09PSBvcHRpb25zLnR5cGU7CiAgICB9KTsKICAgIGlmICghcmV0KSB0aHJvdyBuZXcgRXJyb3IoIm1ldGhvZC10eXBlICIgKyBvcHRpb25zLnR5cGUgKyAiIG5vdCBmb3VuZCIpOwogICAgZWxzZSByZXR1cm4gcmV0OwogIH0KICBpZiAoIW9wdGlvbnMud2ViV29ya2VyU3VwcG9ydCkgewogICAgY2hvb3NlTWV0aG9kcyA9IGNob29zZU1ldGhvZHMuZmlsdGVyKGZ1bmN0aW9uKG02KSB7CiAgICAgIHJldHVybiBtNi50eXBlICE9PSAiaWRiIjsKICAgIH0pOwogIH0KICB2YXIgdXNlTWV0aG9kID0gY2hvb3NlTWV0aG9kcy5maW5kKGZ1bmN0aW9uKG1ldGhvZCkgewogICAgcmV0dXJuIG1ldGhvZC5jYW5CZVVzZWQoKTsKICB9KTsKICBpZiAoIXVzZU1ldGhvZCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJObyB1c2FibGUgbWV0aG9kIGZvdW5kIGluICIgKyBKU09OLnN0cmluZ2lmeShNRVRIT0RTLm1hcChmdW5jdGlvbihtNikgewogICAgICByZXR1cm4gbTYudHlwZTsKICAgIH0pKSk7CiAgfSBlbHNlIHsKICAgIHJldHVybiB1c2VNZXRob2Q7CiAgfQp9CnZhciBNRVRIT0RTOwp2YXIgaW5pdF9tZXRob2RfY2hvb3NlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2QtY2hvb3Nlci5qcyIoKSB7CiAgICBpbml0X25hdGl2ZSgpOwogICAgaW5pdF9pbmRleGVkX2RiKCk7CiAgICBpbml0X2xvY2Fsc3RvcmFnZSgpOwogICAgaW5pdF9zaW11bGF0ZSgpOwogICAgTUVUSE9EUyA9IFsKICAgICAgTmF0aXZlTWV0aG9kLAogICAgICAvLyBmYXN0ZXN0CiAgICAgIEluZGV4ZWREQk1ldGhvZCwKICAgICAgTG9jYWxzdG9yYWdlTWV0aG9kCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2Jyb2FkY2FzdC1jaGFubmVsLmpzCmZ1bmN0aW9uIGNsZWFyTm9kZUZvbGRlcihvcHRpb25zKSB7CiAgb3B0aW9ucyA9IGZpbGxPcHRpb25zV2l0aERlZmF1bHRzKG9wdGlvbnMpOwogIHZhciBtZXRob2QgPSBjaG9vc2VNZXRob2Qob3B0aW9ucyk7CiAgaWYgKG1ldGhvZC50eXBlID09PSAibm9kZSIpIHsKICAgIHJldHVybiBtZXRob2QuY2xlYXJOb2RlRm9sZGVyKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9KTsKICB9IGVsc2UgewogICAgcmV0dXJuIFBST01JU0VfUkVTT0xWRURfRkFMU0U7CiAgfQp9CmZ1bmN0aW9uIGVuZm9yY2VPcHRpb25zKG9wdGlvbnMpIHsKICBFTkZPUkNFRF9PUFRJT05TID0gb3B0aW9uczsKfQpmdW5jdGlvbiBfcG9zdChicm9hZGNhc3RDaGFubmVsLCB0eXBlNSwgbXNnKSB7CiAgdmFyIHRpbWUgPSBicm9hZGNhc3RDaGFubmVsLm1ldGhvZC5taWNyb1NlY29uZHMoKTsKICB2YXIgbXNnT2JqID0gewogICAgdGltZSwKICAgIHR5cGU6IHR5cGU1LAogICAgZGF0YTogbXNnCiAgfTsKICB2YXIgYXdhaXRQcmVwYXJlID0gYnJvYWRjYXN0Q2hhbm5lbC5fcHJlcFAgPyBicm9hZGNhc3RDaGFubmVsLl9wcmVwUCA6IFBST01JU0VfUkVTT0xWRURfVk9JRDsKICByZXR1cm4gYXdhaXRQcmVwYXJlLnRoZW4oZnVuY3Rpb24oKSB7CiAgICB2YXIgc2VuZFByb21pc2UgPSBicm9hZGNhc3RDaGFubmVsLm1ldGhvZC5wb3N0TWVzc2FnZShicm9hZGNhc3RDaGFubmVsLl9zdGF0ZSwgbXNnT2JqKTsKICAgIGJyb2FkY2FzdENoYW5uZWwuX3VNUC5hZGQoc2VuZFByb21pc2UpOwogICAgc2VuZFByb21pc2VbImNhdGNoIl0oKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gYnJvYWRjYXN0Q2hhbm5lbC5fdU1QWyJkZWxldGUiXShzZW5kUHJvbWlzZSk7CiAgICB9KTsKICAgIHJldHVybiBzZW5kUHJvbWlzZTsKICB9KTsKfQpmdW5jdGlvbiBfcHJlcGFyZUNoYW5uZWwoY2hhbm5lbCkgewogIHZhciBtYXliZVByb21pc2UgPSBjaGFubmVsLm1ldGhvZC5jcmVhdGUoY2hhbm5lbC5uYW1lLCBjaGFubmVsLm9wdGlvbnMpOwogIGlmIChpc1Byb21pc2UyKG1heWJlUHJvbWlzZSkpIHsKICAgIGNoYW5uZWwuX3ByZXBQID0gbWF5YmVQcm9taXNlOwogICAgbWF5YmVQcm9taXNlLnRoZW4oZnVuY3Rpb24oczkpIHsKICAgICAgY2hhbm5lbC5fc3RhdGUgPSBzOTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICBjaGFubmVsLl9zdGF0ZSA9IG1heWJlUHJvbWlzZTsKICB9Cn0KZnVuY3Rpb24gX2hhc01lc3NhZ2VMaXN0ZW5lcnMoY2hhbm5lbCkgewogIGlmIChjaGFubmVsLl9hZGRFTC5tZXNzYWdlLmxlbmd0aCA+IDApIHJldHVybiB0cnVlOwogIGlmIChjaGFubmVsLl9hZGRFTC5pbnRlcm5hbC5sZW5ndGggPiAwKSByZXR1cm4gdHJ1ZTsKICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gX2FkZExpc3RlbmVyT2JqZWN0KGNoYW5uZWwsIHR5cGU1LCBvYmopIHsKICBjaGFubmVsLl9hZGRFTFt0eXBlNV0ucHVzaChvYmopOwogIF9zdGFydExpc3RlbmluZyhjaGFubmVsKTsKfQpmdW5jdGlvbiBfcmVtb3ZlTGlzdGVuZXJPYmplY3QoY2hhbm5lbCwgdHlwZTUsIG9iaikgewogIGNoYW5uZWwuX2FkZEVMW3R5cGU1XSA9IGNoYW5uZWwuX2FkZEVMW3R5cGU1XS5maWx0ZXIoZnVuY3Rpb24obzEzKSB7CiAgICByZXR1cm4gbzEzICE9PSBvYmo7CiAgfSk7CiAgX3N0b3BMaXN0ZW5pbmcoY2hhbm5lbCk7Cn0KZnVuY3Rpb24gX3N0YXJ0TGlzdGVuaW5nKGNoYW5uZWwpIHsKICBpZiAoIWNoYW5uZWwuX2lMICYmIF9oYXNNZXNzYWdlTGlzdGVuZXJzKGNoYW5uZWwpKSB7CiAgICB2YXIgbGlzdGVuZXJGbiA9IGZ1bmN0aW9uIGxpc3RlbmVyRm4yKG1zZ09iaikgewogICAgICBjaGFubmVsLl9hZGRFTFttc2dPYmoudHlwZV0uZm9yRWFjaChmdW5jdGlvbihsaXN0ZW5lck9iamVjdCkgewogICAgICAgIGlmIChtc2dPYmoudGltZSA+PSBsaXN0ZW5lck9iamVjdC50aW1lKSB7CiAgICAgICAgICBsaXN0ZW5lck9iamVjdC5mbihtc2dPYmouZGF0YSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH07CiAgICB2YXIgdGltZSA9IGNoYW5uZWwubWV0aG9kLm1pY3JvU2Vjb25kcygpOwogICAgaWYgKGNoYW5uZWwuX3ByZXBQKSB7CiAgICAgIGNoYW5uZWwuX3ByZXBQLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgY2hhbm5lbC5faUwgPSB0cnVlOwogICAgICAgIGNoYW5uZWwubWV0aG9kLm9uTWVzc2FnZShjaGFubmVsLl9zdGF0ZSwgbGlzdGVuZXJGbiwgdGltZSk7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgY2hhbm5lbC5faUwgPSB0cnVlOwogICAgICBjaGFubmVsLm1ldGhvZC5vbk1lc3NhZ2UoY2hhbm5lbC5fc3RhdGUsIGxpc3RlbmVyRm4sIHRpbWUpOwogICAgfQogIH0KfQpmdW5jdGlvbiBfc3RvcExpc3RlbmluZyhjaGFubmVsKSB7CiAgaWYgKGNoYW5uZWwuX2lMICYmICFfaGFzTWVzc2FnZUxpc3RlbmVycyhjaGFubmVsKSkgewogICAgY2hhbm5lbC5faUwgPSBmYWxzZTsKICAgIHZhciB0aW1lID0gY2hhbm5lbC5tZXRob2QubWljcm9TZWNvbmRzKCk7CiAgICBjaGFubmVsLm1ldGhvZC5vbk1lc3NhZ2UoY2hhbm5lbC5fc3RhdGUsIG51bGwsIHRpbWUpOwogIH0KfQp2YXIgT1BFTl9CUk9BRENBU1RfQ0hBTk5FTFMsIGxhc3RJZCwgQnJvYWRjYXN0Q2hhbm5lbDIsIEVORk9SQ0VEX09QVElPTlM7CnZhciBpbml0X2Jyb2FkY2FzdF9jaGFubmVsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2Jyb2FkY2FzdC1jaGFubmVsLmpzIigpIHsKICAgIGluaXRfdXRpbCgpOwogICAgaW5pdF9tZXRob2RfY2hvb3NlcigpOwogICAgaW5pdF9vcHRpb25zKCk7CiAgICBPUEVOX0JST0FEQ0FTVF9DSEFOTkVMUyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgICBsYXN0SWQgPSAwOwogICAgQnJvYWRjYXN0Q2hhbm5lbDIgPSBmdW5jdGlvbiBCcm9hZGNhc3RDaGFubmVsMyhuYW1lLCBvcHRpb25zKSB7CiAgICAgIHRoaXMuaWQgPSBsYXN0SWQrKzsKICAgICAgT1BFTl9CUk9BRENBU1RfQ0hBTk5FTFMuYWRkKHRoaXMpOwogICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICBpZiAoRU5GT1JDRURfT1BUSU9OUykgewogICAgICAgIG9wdGlvbnMgPSBFTkZPUkNFRF9PUFRJT05TOwogICAgICB9CiAgICAgIHRoaXMub3B0aW9ucyA9IGZpbGxPcHRpb25zV2l0aERlZmF1bHRzKG9wdGlvbnMpOwogICAgICB0aGlzLm1ldGhvZCA9IGNob29zZU1ldGhvZCh0aGlzLm9wdGlvbnMpOwogICAgICB0aGlzLl9pTCA9IGZhbHNlOwogICAgICB0aGlzLl9vbk1MID0gbnVsbDsKICAgICAgdGhpcy5fYWRkRUwgPSB7CiAgICAgICAgbWVzc2FnZTogW10sCiAgICAgICAgaW50ZXJuYWw6IFtdCiAgICAgIH07CiAgICAgIHRoaXMuX3VNUCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgICAgIHRoaXMuX2JlZkMgPSBbXTsKICAgICAgdGhpcy5fcHJlcFAgPSBudWxsOwogICAgICBfcHJlcGFyZUNoYW5uZWwodGhpcyk7CiAgICB9OwogICAgQnJvYWRjYXN0Q2hhbm5lbDIuX3B1YmtleSA9IHRydWU7CiAgICBCcm9hZGNhc3RDaGFubmVsMi5wcm90b3R5cGUgPSB7CiAgICAgIHBvc3RNZXNzYWdlOiBmdW5jdGlvbiBwb3N0TWVzc2FnZTUobXNnKSB7CiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJyb2FkY2FzdENoYW5uZWwucG9zdE1lc3NhZ2UoKTogQ2Fubm90IHBvc3QgbWVzc2FnZSBhZnRlciBjaGFubmVsIGhhcyBjbG9zZWQgIiArIC8qKgogICAgICAgICAgICogSW4gdGhlIHBhc3Qgd2hlbiB0aGlzIGVycm9yIGFwcGVhcmVkLCBpdCB3YXMgcmVhbGx5IGhhcmQgdG8gZGVidWcuCiAgICAgICAgICAgKiBTbyBub3cgd2UgbG9nIHRoZSBtc2cgdG9nZXRoZXIgd2l0aCB0aGUgZXJyb3Igc28gaXQgYXQgbGVhc3QKICAgICAgICAgICAqIGdpdmVzIHNvbWUgY2x1ZSBhYm91dCB3aGVyZSBpbiB5b3VyIGFwcGxpY2F0aW9uIHRoaXMgaGFwcGVucy4KICAgICAgICAgICAqLwogICAgICAgICAgSlNPTi5zdHJpbmdpZnkobXNnKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfcG9zdCh0aGlzLCAibWVzc2FnZSIsIG1zZyk7CiAgICAgIH0sCiAgICAgIHBvc3RJbnRlcm5hbDogZnVuY3Rpb24gcG9zdEludGVybmFsKG1zZykgewogICAgICAgIHJldHVybiBfcG9zdCh0aGlzLCAiaW50ZXJuYWwiLCBtc2cpOwogICAgICB9LAogICAgICBzZXQgb25tZXNzYWdlKGZuKSB7CiAgICAgICAgdmFyIHRpbWUgPSB0aGlzLm1ldGhvZC5taWNyb1NlY29uZHMoKTsKICAgICAgICB2YXIgbGlzdGVuT2JqID0gewogICAgICAgICAgdGltZSwKICAgICAgICAgIGZuCiAgICAgICAgfTsKICAgICAgICBfcmVtb3ZlTGlzdGVuZXJPYmplY3QodGhpcywgIm1lc3NhZ2UiLCB0aGlzLl9vbk1MKTsKICAgICAgICBpZiAoZm4gJiYgdHlwZW9mIGZuID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICB0aGlzLl9vbk1MID0gbGlzdGVuT2JqOwogICAgICAgICAgX2FkZExpc3RlbmVyT2JqZWN0KHRoaXMsICJtZXNzYWdlIiwgbGlzdGVuT2JqKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5fb25NTCA9IG51bGw7CiAgICAgICAgfQogICAgICB9LAogICAgICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKHR5cGU1LCBmbikgewogICAgICAgIHZhciB0aW1lID0gdGhpcy5tZXRob2QubWljcm9TZWNvbmRzKCk7CiAgICAgICAgdmFyIGxpc3Rlbk9iaiA9IHsKICAgICAgICAgIHRpbWUsCiAgICAgICAgICBmbgogICAgICAgIH07CiAgICAgICAgX2FkZExpc3RlbmVyT2JqZWN0KHRoaXMsIHR5cGU1LCBsaXN0ZW5PYmopOwogICAgICB9LAogICAgICByZW1vdmVFdmVudExpc3RlbmVyOiBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKHR5cGU1LCBmbikgewogICAgICAgIHZhciBvYmogPSB0aGlzLl9hZGRFTFt0eXBlNV0uZmluZChmdW5jdGlvbihvYmoyKSB7CiAgICAgICAgICByZXR1cm4gb2JqMi5mbiA9PT0gZm47CiAgICAgICAgfSk7CiAgICAgICAgX3JlbW92ZUxpc3RlbmVyT2JqZWN0KHRoaXMsIHR5cGU1LCBvYmopOwogICAgICB9LAogICAgICBjbG9zZTogZnVuY3Rpb24gY2xvc2U1KCkgewogICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIE9QRU5fQlJPQURDQVNUX0NIQU5ORUxTWyJkZWxldGUiXSh0aGlzKTsKICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7CiAgICAgICAgdmFyIGF3YWl0UHJlcGFyZSA9IHRoaXMuX3ByZXBQID8gdGhpcy5fcHJlcFAgOiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQ7CiAgICAgICAgdGhpcy5fb25NTCA9IG51bGw7CiAgICAgICAgdGhpcy5fYWRkRUwubWVzc2FnZSA9IFtdOwogICAgICAgIHJldHVybiBhd2FpdFByZXBhcmUudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChBcnJheS5mcm9tKF90aGlzLl91TVApKTsKICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKF90aGlzLl9iZWZDLm1hcChmdW5jdGlvbihmbikgewogICAgICAgICAgICByZXR1cm4gZm4oKTsKICAgICAgICAgIH0pKTsKICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIF90aGlzLm1ldGhvZC5jbG9zZShfdGhpcy5fc3RhdGUpOwogICAgICAgIH0pOwogICAgICB9LAogICAgICBnZXQgdHlwZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5tZXRob2QudHlwZTsKICAgICAgfSwKICAgICAgZ2V0IGlzQ2xvc2VkKCkgewogICAgICAgIHJldHVybiB0aGlzLmNsb3NlZDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VubG9hZEAyLjQuMS9ub2RlX21vZHVsZXMvdW5sb2FkL2Rpc3QvZXMvYnJvd3Nlci5qcwpmdW5jdGlvbiBhZGRCcm93c2VyKGZuKSB7CiAgaWYgKHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSA9PT0gImZ1bmN0aW9uIiAmJiBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUpIHsKICAgIHZhciBvbGRDbG9zZSA9IHNlbGYuY2xvc2UuYmluZChzZWxmKTsKICAgIHNlbGYuY2xvc2UgPSBmdW5jdGlvbigpIHsKICAgICAgZm4oKTsKICAgICAgcmV0dXJuIG9sZENsb3NlKCk7CiAgICB9OwogIH0gZWxzZSB7CiAgICBpZiAodHlwZW9mIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLCBmdW5jdGlvbigpIHsKICAgICAgZm4oKTsKICAgIH0sIHRydWUpOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsIGZ1bmN0aW9uKCkgewogICAgICBmbigpOwogICAgfSwgdHJ1ZSk7CiAgfQp9CnZhciBpbml0X2Jyb3dzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmxvYWRAMi40LjEvbm9kZV9tb2R1bGVzL3VubG9hZC9kaXN0L2VzL2Jyb3dzZXIuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5sb2FkQDIuNC4xL25vZGVfbW9kdWxlcy91bmxvYWQvZGlzdC9lcy9ub2RlLmpzCmZ1bmN0aW9uIGFkZE5vZGUoZm4pIHsKICBwcm9jZXNzLm9uKCJleGl0IiwgZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gZm4oKTsKICB9KTsKICBwcm9jZXNzLm9uKCJiZWZvcmVFeGl0IiwgZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gZm4oKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gcHJvY2Vzcy5leGl0KCk7CiAgICB9KTsKICB9KTsKICBwcm9jZXNzLm9uKCJTSUdJTlQiLCBmdW5jdGlvbigpIHsKICAgIHJldHVybiBmbigpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBwcm9jZXNzLmV4aXQoKTsKICAgIH0pOwogIH0pOwogIHByb2Nlc3Mub24oInVuY2F1Z2h0RXhjZXB0aW9uIiwgZnVuY3Rpb24oZXJyKSB7CiAgICByZXR1cm4gZm4oKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICBjb25zb2xlLnRyYWNlKGVycik7CiAgICAgIHByb2Nlc3MuZXhpdCgxMDEpOwogICAgfSk7CiAgfSk7Cn0KdmFyIGluaXRfbm9kZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VubG9hZEAyLjQuMS9ub2RlX21vZHVsZXMvdW5sb2FkL2Rpc3QvZXMvbm9kZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmxvYWRAMi40LjEvbm9kZV9tb2R1bGVzL3VubG9hZC9kaXN0L2VzL2luZGV4LmpzCmZ1bmN0aW9uIHN0YXJ0TGlzdGVuaW5nKCkgewogIGlmIChzdGFydGVkTGlzdGVuaW5nKSB7CiAgICByZXR1cm47CiAgfQogIHN0YXJ0ZWRMaXN0ZW5pbmcgPSB0cnVlOwogIFVTRV9NRVRIT0QocnVuQWxsKTsKfQpmdW5jdGlvbiBhZGQyKGZuKSB7CiAgc3RhcnRMaXN0ZW5pbmcoKTsKICBpZiAodHlwZW9mIGZuICE9PSAiZnVuY3Rpb24iKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkxpc3RlbmVyIGlzIG5vIGZ1bmN0aW9uIik7CiAgfQogIExJU1RFTkVSUy5hZGQoZm4pOwogIHZhciBhZGRSZXR1cm4gPSB7CiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZTIoKSB7CiAgICAgIHJldHVybiBMSVNURU5FUlNbImRlbGV0ZSJdKGZuKTsKICAgIH0sCiAgICBydW46IGZ1bmN0aW9uIHJ1bigpIHsKICAgICAgTElTVEVORVJTWyJkZWxldGUiXShmbik7CiAgICAgIHJldHVybiBmbigpOwogICAgfQogIH07CiAgcmV0dXJuIGFkZFJldHVybjsKfQpmdW5jdGlvbiBydW5BbGwoKSB7CiAgdmFyIHByb21pc2VzID0gW107CiAgTElTVEVORVJTLmZvckVhY2goZnVuY3Rpb24oZm4pIHsKICAgIHByb21pc2VzLnB1c2goZm4oKSk7CiAgICBMSVNURU5FUlNbImRlbGV0ZSJdKGZuKTsKICB9KTsKICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpOwp9CmZ1bmN0aW9uIHJlbW92ZUFsbCgpIHsKICBMSVNURU5FUlMuY2xlYXIoKTsKfQpmdW5jdGlvbiBnZXRTaXplKCkgewogIHJldHVybiBMSVNURU5FUlMuc2l6ZTsKfQp2YXIgaXNOb2RlLCBVU0VfTUVUSE9ELCBMSVNURU5FUlMsIHN0YXJ0ZWRMaXN0ZW5pbmc7CnZhciBpbml0X2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5sb2FkQDIuNC4xL25vZGVfbW9kdWxlcy91bmxvYWQvZGlzdC9lcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2Jyb3dzZXIoKTsKICAgIGluaXRfbm9kZSgpOwogICAgaXNOb2RlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHR5cGVvZiBwcm9jZXNzICE9PSAidW5kZWZpbmVkIiA/IHByb2Nlc3MgOiAwKSA9PT0gIltvYmplY3QgcHJvY2Vzc10iOwogICAgVVNFX01FVEhPRCA9IGlzTm9kZSA/IGFkZE5vZGUgOiBhZGRCcm93c2VyOwogICAgTElTVEVORVJTID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgIHN0YXJ0ZWRMaXN0ZW5pbmcgPSBmYWxzZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9sZWFkZXItZWxlY3Rpb24tdXRpbC5qcwpmdW5jdGlvbiBzZW5kTGVhZGVyTWVzc2FnZShsZWFkZXJFbGVjdG9yLCBhY3Rpb24pIHsKICB2YXIgbXNnSnNvbiA9IHsKICAgIGNvbnRleHQ6ICJsZWFkZXIiLAogICAgYWN0aW9uLAogICAgdG9rZW46IGxlYWRlckVsZWN0b3IudG9rZW4KICB9OwogIHJldHVybiBsZWFkZXJFbGVjdG9yLmJyb2FkY2FzdENoYW5uZWwucG9zdEludGVybmFsKG1zZ0pzb24pOwp9CmZ1bmN0aW9uIGJlTGVhZGVyKGxlYWRlckVsZWN0b3IpIHsKICBsZWFkZXJFbGVjdG9yLmlzTGVhZGVyID0gdHJ1ZTsKICBsZWFkZXJFbGVjdG9yLl9oYXNMZWFkZXIgPSB0cnVlOwogIHZhciB1bmxvYWRGbiA9IGFkZDIoZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gbGVhZGVyRWxlY3Rvci5kaWUoKTsKICB9KTsKICBsZWFkZXJFbGVjdG9yLl91bmwucHVzaCh1bmxvYWRGbik7CiAgdmFyIGlzTGVhZGVyTGlzdGVuZXIgPSBmdW5jdGlvbiBpc0xlYWRlckxpc3RlbmVyMihtc2cpIHsKICAgIGlmIChtc2cuY29udGV4dCA9PT0gImxlYWRlciIgJiYgbXNnLmFjdGlvbiA9PT0gImFwcGx5IikgewogICAgICBzZW5kTGVhZGVyTWVzc2FnZShsZWFkZXJFbGVjdG9yLCAidGVsbCIpOwogICAgfQogICAgaWYgKG1zZy5jb250ZXh0ID09PSAibGVhZGVyIiAmJiBtc2cuYWN0aW9uID09PSAidGVsbCIgJiYgIWxlYWRlckVsZWN0b3IuX2RwTEMpIHsKICAgICAgbGVhZGVyRWxlY3Rvci5fZHBMQyA9IHRydWU7CiAgICAgIGxlYWRlckVsZWN0b3IuX2RwTCgpOwogICAgICBzZW5kTGVhZGVyTWVzc2FnZShsZWFkZXJFbGVjdG9yLCAidGVsbCIpOwogICAgfQogIH07CiAgbGVhZGVyRWxlY3Rvci5icm9hZGNhc3RDaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoImludGVybmFsIiwgaXNMZWFkZXJMaXN0ZW5lcik7CiAgbGVhZGVyRWxlY3Rvci5fbHN0bnMucHVzaChpc0xlYWRlckxpc3RlbmVyKTsKICByZXR1cm4gc2VuZExlYWRlck1lc3NhZ2UobGVhZGVyRWxlY3RvciwgInRlbGwiKTsKfQp2YXIgaW5pdF9sZWFkZXJfZWxlY3Rpb25fdXRpbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9sZWFkZXItZWxlY3Rpb24tdXRpbC5qcyIoKSB7CiAgICBpbml0X2VzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbGVhZGVyLWVsZWN0aW9uLXdlYi1sb2NrLmpzCnZhciBMZWFkZXJFbGVjdGlvbldlYkxvY2ssIExFQURFUl9ESUVfQUJPUlRfU0lHTkFMX01FU1NBR0U7CnZhciBpbml0X2xlYWRlcl9lbGVjdGlvbl93ZWJfbG9jayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9sZWFkZXItZWxlY3Rpb24td2ViLWxvY2suanMiKCkgewogICAgaW5pdF91dGlsKCk7CiAgICBpbml0X2xlYWRlcl9lbGVjdGlvbl91dGlsKCk7CiAgICBMZWFkZXJFbGVjdGlvbldlYkxvY2sgPSBmdW5jdGlvbiBMZWFkZXJFbGVjdGlvbldlYkxvY2syKGJyb2FkY2FzdENoYW5uZWwsIG9wdGlvbnMpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdGhpcy5icm9hZGNhc3RDaGFubmVsID0gYnJvYWRjYXN0Q2hhbm5lbDsKICAgICAgYnJvYWRjYXN0Q2hhbm5lbC5fYmVmQy5wdXNoKGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBfdGhpcy5kaWUoKTsKICAgICAgfSk7CiAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zOwogICAgICB0aGlzLmlzTGVhZGVyID0gZmFsc2U7CiAgICAgIHRoaXMuaXNEZWFkID0gZmFsc2U7CiAgICAgIHRoaXMudG9rZW4gPSByYW5kb21Ub2tlbigpOwogICAgICB0aGlzLl9sc3RucyA9IFtdOwogICAgICB0aGlzLl91bmwgPSBbXTsKICAgICAgdGhpcy5fZHBMID0gZnVuY3Rpb24oKSB7CiAgICAgIH07CiAgICAgIHRoaXMuX2RwTEMgPSBmYWxzZTsKICAgICAgdGhpcy5fd0tNQyA9IHt9OwogICAgICB0aGlzLmxOID0gInB1YmtleS1iY3x8IiArIGJyb2FkY2FzdENoYW5uZWwubWV0aG9kLnR5cGUgKyAifHwiICsgYnJvYWRjYXN0Q2hhbm5lbC5uYW1lOwogICAgfTsKICAgIExFQURFUl9ESUVfQUJPUlRfU0lHTkFMX01FU1NBR0UgPSAiTGVhZGVyRWxlY3Rpb25XZWJMb2NrLmRpZSgpIGNhbGxlZCI7CiAgICBMZWFkZXJFbGVjdGlvbldlYkxvY2sucHJvdG90eXBlID0gewogICAgICBoYXNMZWFkZXI6IGZ1bmN0aW9uIGhhc0xlYWRlcigpIHsKICAgICAgICB2YXIgX3RoaXMyID0gdGhpczsKICAgICAgICByZXR1cm4gbmF2aWdhdG9yLmxvY2tzLnF1ZXJ5KCkudGhlbihmdW5jdGlvbihsb2NrcykgewogICAgICAgICAgdmFyIHJlbGV2YW50TG9ja3MgPSBsb2Nrcy5oZWxkID8gbG9ja3MuaGVsZC5maWx0ZXIoZnVuY3Rpb24obG9jaykgewogICAgICAgICAgICByZXR1cm4gbG9jay5uYW1lID09PSBfdGhpczIubE47CiAgICAgICAgICB9KSA6IFtdOwogICAgICAgICAgaWYgKHJlbGV2YW50TG9ja3MgJiYgcmVsZXZhbnRMb2Nrcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9LAogICAgICBhd2FpdExlYWRlcnNoaXA6IGZ1bmN0aW9uIGF3YWl0TGVhZGVyc2hpcCgpIHsKICAgICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgICBpZiAoIXRoaXMuX3dMTVApIHsKICAgICAgICAgIHRoaXMuX3dLTUMuYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICAgICAgICAgIHZhciByZXR1cm5Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzLCByZWopIHsKICAgICAgICAgICAgX3RoaXMzLl93S01DLnJlcyA9IHJlczsKICAgICAgICAgICAgX3RoaXMzLl93S01DLnJlaiA9IHJlajsKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5fd0xNUCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcywgcmVqZWN0KSB7CiAgICAgICAgICAgIG5hdmlnYXRvci5sb2Nrcy5yZXF1ZXN0KF90aGlzMy5sTiwgewogICAgICAgICAgICAgIHNpZ25hbDogX3RoaXMzLl93S01DLmMuc2lnbmFsCiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIF90aGlzMy5fd0tNQy5jID0gdm9pZCAwOwogICAgICAgICAgICAgIGJlTGVhZGVyKF90aGlzMyk7CiAgICAgICAgICAgICAgcmVzKCk7CiAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblByb21pc2U7CiAgICAgICAgICAgIH0pWyJjYXRjaCJdKGZ1bmN0aW9uKGVycikgewogICAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZSA9PT0gTEVBREVSX0RJRV9BQk9SVF9TSUdOQUxfTUVTU0FHRSkgewogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoX3RoaXMzLl93S01DLnJlaikgewogICAgICAgICAgICAgICAgICBfdGhpczMuX3dLTUMucmVqKGVycik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl93TE1QOwogICAgICB9LAogICAgICBzZXQgb25kdXBsaWNhdGUoX2ZuKSB7CiAgICAgIH0sCiAgICAgIGRpZTogZnVuY3Rpb24gZGllKCkgewogICAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICAgIHRoaXMuX2xzdG5zLmZvckVhY2goZnVuY3Rpb24obGlzdGVuZXIyKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXM0LmJyb2FkY2FzdENoYW5uZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLCBsaXN0ZW5lcjIpOwogICAgICAgIH0pOwogICAgICAgIHRoaXMuX2xzdG5zID0gW107CiAgICAgICAgdGhpcy5fdW5sLmZvckVhY2goZnVuY3Rpb24odUZuKSB7CiAgICAgICAgICByZXR1cm4gdUZuLnJlbW92ZSgpOwogICAgICAgIH0pOwogICAgICAgIHRoaXMuX3VubCA9IFtdOwogICAgICAgIGlmICh0aGlzLmlzTGVhZGVyKSB7CiAgICAgICAgICB0aGlzLmlzTGVhZGVyID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHRoaXMuaXNEZWFkID0gdHJ1ZTsKICAgICAgICBpZiAodGhpcy5fd0tNQy5yZXMpIHsKICAgICAgICAgIHRoaXMuX3dLTUMucmVzKCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLl93S01DLmMpIHsKICAgICAgICAgIHRoaXMuX3dLTUMuYy5hYm9ydChuZXcgRXJyb3IoTEVBREVSX0RJRV9BQk9SVF9TSUdOQUxfTUVTU0FHRSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VuZExlYWRlck1lc3NhZ2UodGhpcywgImRlYXRoIik7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbGVhZGVyLWVsZWN0aW9uLmpzCmZ1bmN0aW9uIF9hd2FpdExlYWRlcnNoaXBPbmNlKGxlYWRlckVsZWN0b3IpIHsKICBpZiAobGVhZGVyRWxlY3Rvci5pc0xlYWRlcikgewogICAgcmV0dXJuIFBST01JU0VfUkVTT0xWRURfVk9JRDsKICB9CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcykgewogICAgdmFyIHJlc29sdmVkMiA9IGZhbHNlOwogICAgZnVuY3Rpb24gZmluaXNoKCkgewogICAgICBpZiAocmVzb2x2ZWQyKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHJlc29sdmVkMiA9IHRydWU7CiAgICAgIGxlYWRlckVsZWN0b3IuYnJvYWRjYXN0Q2hhbm5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIsIHdoZW5EZWF0aExpc3RlbmVyKTsKICAgICAgcmVzKHRydWUpOwogICAgfQogICAgbGVhZGVyRWxlY3Rvci5hcHBseU9uY2UoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICBpZiAobGVhZGVyRWxlY3Rvci5pc0xlYWRlcikgewogICAgICAgIGZpbmlzaCgpOwogICAgICB9CiAgICB9KTsKICAgIHZhciBfdHJ5T25GYWxsQmFjayA9IGZ1bmN0aW9uIHRyeU9uRmFsbEJhY2soKSB7CiAgICAgIHJldHVybiBzbGVlcChsZWFkZXJFbGVjdG9yLl9vcHRpb25zLmZhbGxiYWNrSW50ZXJ2YWwpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGxlYWRlckVsZWN0b3IuaXNEZWFkIHx8IHJlc29sdmVkMikgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAobGVhZGVyRWxlY3Rvci5pc0xlYWRlcikgewogICAgICAgICAgZmluaXNoKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBsZWFkZXJFbGVjdG9yLmFwcGx5T25jZSh0cnVlKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAobGVhZGVyRWxlY3Rvci5pc0xlYWRlcikgewogICAgICAgICAgICAgIGZpbmlzaCgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF90cnlPbkZhbGxCYWNrKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9OwogICAgX3RyeU9uRmFsbEJhY2soKTsKICAgIHZhciB3aGVuRGVhdGhMaXN0ZW5lciA9IGZ1bmN0aW9uIHdoZW5EZWF0aExpc3RlbmVyMihtc2cpIHsKICAgICAgaWYgKG1zZy5jb250ZXh0ID09PSAibGVhZGVyIiAmJiBtc2cuYWN0aW9uID09PSAiZGVhdGgiKSB7CiAgICAgICAgbGVhZGVyRWxlY3Rvci5faGFzTGVhZGVyID0gZmFsc2U7CiAgICAgICAgbGVhZGVyRWxlY3Rvci5hcHBseU9uY2UoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgaWYgKGxlYWRlckVsZWN0b3IuaXNMZWFkZXIpIHsKICAgICAgICAgICAgZmluaXNoKCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBsZWFkZXJFbGVjdG9yLmJyb2FkY2FzdENoYW5uZWwuYWRkRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLCB3aGVuRGVhdGhMaXN0ZW5lcik7CiAgICBsZWFkZXJFbGVjdG9yLl9sc3Rucy5wdXNoKHdoZW5EZWF0aExpc3RlbmVyKTsKICB9KTsKfQpmdW5jdGlvbiBmaWxsT3B0aW9uc1dpdGhEZWZhdWx0czIob3B0aW9ucywgY2hhbm5lbCkgewogIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9OwogIG9wdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKTsKICBpZiAoIW9wdGlvbnMuZmFsbGJhY2tJbnRlcnZhbCkgewogICAgb3B0aW9ucy5mYWxsYmFja0ludGVydmFsID0gM2UzOwogIH0KICBpZiAoIW9wdGlvbnMucmVzcG9uc2VUaW1lKSB7CiAgICBvcHRpb25zLnJlc3BvbnNlVGltZSA9IGNoYW5uZWwubWV0aG9kLmF2ZXJhZ2VSZXNwb25zZVRpbWUoY2hhbm5lbC5vcHRpb25zKTsKICB9CiAgcmV0dXJuIG9wdGlvbnM7Cn0KZnVuY3Rpb24gY3JlYXRlTGVhZGVyRWxlY3Rpb24oY2hhbm5lbCwgb3B0aW9ucykgewogIGlmIChjaGFubmVsLl9sZWFkZXJFbGVjdG9yKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkJyb2FkY2FzdENoYW5uZWwgYWxyZWFkeSBoYXMgYSBsZWFkZXItZWxlY3RvciIpOwogIH0KICBvcHRpb25zID0gZmlsbE9wdGlvbnNXaXRoRGVmYXVsdHMyKG9wdGlvbnMsIGNoYW5uZWwpOwogIHZhciBlbGVjdG9yID0gc3VwcG9ydHNXZWJMb2NrQVBJKCkgPyBuZXcgTGVhZGVyRWxlY3Rpb25XZWJMb2NrKGNoYW5uZWwsIG9wdGlvbnMpIDogbmV3IExlYWRlckVsZWN0aW9uKGNoYW5uZWwsIG9wdGlvbnMpOwogIGNoYW5uZWwuX2JlZkMucHVzaChmdW5jdGlvbigpIHsKICAgIHJldHVybiBlbGVjdG9yLmRpZSgpOwogIH0pOwogIGNoYW5uZWwuX2xlYWRlckVsZWN0b3IgPSBlbGVjdG9yOwogIHJldHVybiBlbGVjdG9yOwp9CnZhciBMZWFkZXJFbGVjdGlvbjsKdmFyIGluaXRfbGVhZGVyX2VsZWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2xlYWRlci1lbGVjdGlvbi5qcyIoKSB7CiAgICBpbml0X3V0aWwoKTsKICAgIGluaXRfbGVhZGVyX2VsZWN0aW9uX3V0aWwoKTsKICAgIGluaXRfbGVhZGVyX2VsZWN0aW9uX3dlYl9sb2NrKCk7CiAgICBMZWFkZXJFbGVjdGlvbiA9IGZ1bmN0aW9uIExlYWRlckVsZWN0aW9uMihicm9hZGNhc3RDaGFubmVsLCBvcHRpb25zKSB7CiAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCA9IGJyb2FkY2FzdENoYW5uZWw7CiAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zOwogICAgICB0aGlzLmlzTGVhZGVyID0gZmFsc2U7CiAgICAgIHRoaXMuX2hhc0xlYWRlciA9IGZhbHNlOwogICAgICB0aGlzLmlzRGVhZCA9IGZhbHNlOwogICAgICB0aGlzLnRva2VuID0gcmFuZG9tVG9rZW4oKTsKICAgICAgdGhpcy5fYXBsUSA9IFBST01JU0VfUkVTT0xWRURfVk9JRDsKICAgICAgdGhpcy5fYXBsUUMgPSAwOwogICAgICB0aGlzLl91bmwgPSBbXTsKICAgICAgdGhpcy5fbHN0bnMgPSBbXTsKICAgICAgdGhpcy5fZHBMID0gZnVuY3Rpb24oKSB7CiAgICAgIH07CiAgICAgIHRoaXMuX2RwTEMgPSBmYWxzZTsKICAgICAgdmFyIGhhc0xlYWRlckxpc3RlbmVyID0gZnVuY3Rpb24gaGFzTGVhZGVyTGlzdGVuZXIyKG1zZykgewogICAgICAgIGlmIChtc2cuY29udGV4dCA9PT0gImxlYWRlciIpIHsKICAgICAgICAgIGlmIChtc2cuYWN0aW9uID09PSAiZGVhdGgiKSB7CiAgICAgICAgICAgIF90aGlzLl9oYXNMZWFkZXIgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChtc2cuYWN0aW9uID09PSAidGVsbCIpIHsKICAgICAgICAgICAgX3RoaXMuX2hhc0xlYWRlciA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgICB0aGlzLmJyb2FkY2FzdENoYW5uZWwuYWRkRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLCBoYXNMZWFkZXJMaXN0ZW5lcik7CiAgICAgIHRoaXMuX2xzdG5zLnB1c2goaGFzTGVhZGVyTGlzdGVuZXIpOwogICAgfTsKICAgIExlYWRlckVsZWN0aW9uLnByb3RvdHlwZSA9IHsKICAgICAgaGFzTGVhZGVyOiBmdW5jdGlvbiBoYXNMZWFkZXIyKCkgewogICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5faGFzTGVhZGVyKTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgaW5zdGFuY2UgaXMgbGVhZGVyLAogICAgICAgKiBmYWxzZSBpZiBub3QuCiAgICAgICAqIEBhc3luYwogICAgICAgKi8KICAgICAgYXBwbHlPbmNlOiBmdW5jdGlvbiBhcHBseU9uY2UoaXNGcm9tRmFsbGJhY2tJbnRlcnZhbCkgewogICAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICAgIGlmICh0aGlzLmlzTGVhZGVyKSB7CiAgICAgICAgICByZXR1cm4gc2xlZXAoMCwgdHJ1ZSk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmlzRGVhZCkgewogICAgICAgICAgcmV0dXJuIHNsZWVwKDAsIGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuX2FwbFFDID4gMSkgewogICAgICAgICAgcmV0dXJuIHRoaXMuX2FwbFE7CiAgICAgICAgfQogICAgICAgIHZhciBhcHBseVJ1biA9IGZ1bmN0aW9uIGFwcGx5UnVuMigpIHsKICAgICAgICAgIGlmIChfdGhpczIuaXNMZWFkZXIpIHsKICAgICAgICAgICAgcmV0dXJuIFBST01JU0VfUkVTT0xWRURfVFJVRTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBzdG9wQ3JpdGVyaWEgPSBmYWxzZTsKICAgICAgICAgIHZhciBzdG9wQ3JpdGVyaWFQcm9taXNlUmVzb2x2ZTsKICAgICAgICAgIHZhciBzdG9wQ3JpdGVyaWFQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzKSB7CiAgICAgICAgICAgIHN0b3BDcml0ZXJpYVByb21pc2VSZXNvbHZlID0gZnVuY3Rpb24gc3RvcENyaXRlcmlhUHJvbWlzZVJlc29sdmUyKCkgewogICAgICAgICAgICAgIHN0b3BDcml0ZXJpYSA9IHRydWU7CiAgICAgICAgICAgICAgcmVzKCk7CiAgICAgICAgICAgIH07CiAgICAgICAgICB9KTsKICAgICAgICAgIHZhciBoYW5kbGVNZXNzYWdlID0gZnVuY3Rpb24gaGFuZGxlTWVzc2FnZTIobXNnKSB7CiAgICAgICAgICAgIGlmIChtc2cuY29udGV4dCA9PT0gImxlYWRlciIgJiYgbXNnLnRva2VuICE9IF90aGlzMi50b2tlbikgewogICAgICAgICAgICAgIGlmIChtc2cuYWN0aW9uID09PSAiYXBwbHkiKSB7CiAgICAgICAgICAgICAgICBpZiAobXNnLnRva2VuID4gX3RoaXMyLnRva2VuKSB7CiAgICAgICAgICAgICAgICAgIHN0b3BDcml0ZXJpYVByb21pc2VSZXNvbHZlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChtc2cuYWN0aW9uID09PSAidGVsbCIpIHsKICAgICAgICAgICAgICAgIHN0b3BDcml0ZXJpYVByb21pc2VSZXNvbHZlKCk7CiAgICAgICAgICAgICAgICBfdGhpczIuX2hhc0xlYWRlciA9IHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgX3RoaXMyLmJyb2FkY2FzdENoYW5uZWwuYWRkRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLCBoYW5kbGVNZXNzYWdlKTsKICAgICAgICAgIHZhciB3YWl0Rm9yQW5zd2VyVGltZSA9IGlzRnJvbUZhbGxiYWNrSW50ZXJ2YWwgPyBfdGhpczIuX29wdGlvbnMucmVzcG9uc2VUaW1lICogNCA6IF90aGlzMi5fb3B0aW9ucy5yZXNwb25zZVRpbWU7CiAgICAgICAgICByZXR1cm4gc2VuZExlYWRlck1lc3NhZ2UoX3RoaXMyLCAiYXBwbHkiKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtzbGVlcCh3YWl0Rm9yQW5zd2VyVGltZSksIHN0b3BDcml0ZXJpYVByb21pc2UudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCkpOwogICAgICAgICAgICB9KV0pOwogICAgICAgICAgfSkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbmRMZWFkZXJNZXNzYWdlKF90aGlzMiwgImFwcGx5Iik7CiAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtzbGVlcCh3YWl0Rm9yQW5zd2VyVGltZSksIHN0b3BDcml0ZXJpYVByb21pc2UudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCkpOwogICAgICAgICAgICB9KV0pOwogICAgICAgICAgfSlbImNhdGNoIl0oZnVuY3Rpb24oKSB7CiAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBfdGhpczIuYnJvYWRjYXN0Q2hhbm5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIsIGhhbmRsZU1lc3NhZ2UpOwogICAgICAgICAgICBpZiAoIXN0b3BDcml0ZXJpYSkgewogICAgICAgICAgICAgIHJldHVybiBiZUxlYWRlcihfdGhpczIpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgICAgdGhpcy5fYXBsUUMgPSB0aGlzLl9hcGxRQyArIDE7CiAgICAgICAgdGhpcy5fYXBsUSA9IHRoaXMuX2FwbFEudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBhcHBseVJ1bigpOwogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICBfdGhpczIuX2FwbFFDID0gX3RoaXMyLl9hcGxRQyAtIDE7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHRoaXMuX2FwbFEudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBfdGhpczIuaXNMZWFkZXI7CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIGF3YWl0TGVhZGVyc2hpcDogZnVuY3Rpb24gYXdhaXRMZWFkZXJzaGlwMigpIHsKICAgICAgICBpZiAoCiAgICAgICAgICAvKiBfYXdhaXRMZWFkZXJzaGlwUHJvbWlzZSAqLwogICAgICAgICAgIXRoaXMuX2FMUAogICAgICAgICkgewogICAgICAgICAgdGhpcy5fYUxQID0gX2F3YWl0TGVhZGVyc2hpcE9uY2UodGhpcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9hTFA7CiAgICAgIH0sCiAgICAgIHNldCBvbmR1cGxpY2F0ZShmbikgewogICAgICAgIHRoaXMuX2RwTCA9IGZuOwogICAgICB9LAogICAgICBkaWU6IGZ1bmN0aW9uIGRpZTIoKSB7CiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CiAgICAgICAgdGhpcy5fbHN0bnMuZm9yRWFjaChmdW5jdGlvbihsaXN0ZW5lcjIpIHsKICAgICAgICAgIHJldHVybiBfdGhpczMuYnJvYWRjYXN0Q2hhbm5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIsIGxpc3RlbmVyMik7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5fbHN0bnMgPSBbXTsKICAgICAgICB0aGlzLl91bmwuZm9yRWFjaChmdW5jdGlvbih1Rm4pIHsKICAgICAgICAgIHJldHVybiB1Rm4ucmVtb3ZlKCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5fdW5sID0gW107CiAgICAgICAgaWYgKHRoaXMuaXNMZWFkZXIpIHsKICAgICAgICAgIHRoaXMuX2hhc0xlYWRlciA9IGZhbHNlOwogICAgICAgICAgdGhpcy5pc0xlYWRlciA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICB0aGlzLmlzRGVhZCA9IHRydWU7CiAgICAgICAgcmV0dXJuIHNlbmRMZWFkZXJNZXNzYWdlKHRoaXMsICJkZWF0aCIpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2luZGV4LmpzCnZhciBpbml0X2VzYnJvd3NlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2Jyb2FkY2FzdF9jaGFubmVsKCk7CiAgICBpbml0X2xlYWRlcl9lbGVjdGlvbigpOwogICAgaW5pdF9sZWFkZXJfZWxlY3Rpb25fdXRpbCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jb21tc0AxLjAuMzAvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY29tbXMvZGlzdF90cy9kZWVzLWNvbW1zLnBsdWdpbnMuanMKdmFyIGluaXRfZGVlc19jb21tc19wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jb21tc0AxLjAuMzAvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY29tbXMvZGlzdF90cy9kZWVzLWNvbW1zLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMygpOwogICAgaW5pdF9kaXN0X3RzNCgpOwogICAgaW5pdF9kaXN0X3RzMTUoKTsKICAgIGluaXRfZXNicm93c2VyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNvbW1zQDEuMC4zMC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jb21tcy9kaXN0X3RzL2RlZXMtY29tbXMuY2xhc3Nlcy5kZWVzY29tbXMuanMKdmFyIEJyb2FkY2FzdENoYW5uZWw0LCBEZWVzQ29tbXM7CnZhciBpbml0X2RlZXNfY29tbXNfY2xhc3Nlc19kZWVzY29tbXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNvbW1zQDEuMC4zMC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jb21tcy9kaXN0X3RzL2RlZXMtY29tbXMuY2xhc3Nlcy5kZWVzY29tbXMuanMiKCkgewogICAgaW5pdF9kZWVzX2NvbW1zX3BsdWdpbnMoKTsKICAgIEJyb2FkY2FzdENoYW5uZWw0ID0gZ2xvYmFsVGhpcy5Ccm9hZGNhc3RDaGFubmVsOwogICAgaWYgKCFCcm9hZGNhc3RDaGFubmVsNCkgewogICAgICBCcm9hZGNhc3RDaGFubmVsNCA9IEJyb2FkY2FzdENoYW5uZWwyOwogICAgfQogICAgRGVlc0NvbW1zID0gY2xhc3MgewogICAgICAvLyByZWNlaXZpbmcgbWVzc2FnZXMKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5icm9hZGNhc3RDaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWw0KCJkZWVzLWNvbW1zIik7CiAgICAgICAgdGhpcy50eXBlZHJvdXRlciA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxNS5UeXBlZFJvdXRlcigpOwogICAgICAgIHRoaXMudHlwZWR0YXJnZXQgPSBuZXcgZGlzdF90c19leHBvcnRzMTUuVHlwZWRUYXJnZXQoewogICAgICAgICAgcG9zdE1ldGhvZFdpdGhUeXBlZFJvdXRlcjogYXN5bmMgKG1lc3NhZ2VBcmcpID0+IHsKICAgICAgICAgICAgdGhpcy5wb3N0TWVzc2FnZShtZXNzYWdlQXJnKTsKICAgICAgICAgIH0sCiAgICAgICAgICB0eXBlZFJvdXRlclJlZjogdGhpcy50eXBlZHJvdXRlcgogICAgICAgIH0pOwogICAgICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbC5vbm1lc3NhZ2UgPSBhc3luYyAoZXZlbnRBcmcpID0+IHsKICAgICAgICAgIGNvbnN0IG1lc3NhZ2UyID0gZXZlbnRBcmcubWV0aG9kID8gZXZlbnRBcmcgOiBldmVudEFyZy5kYXRhOwogICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkobWVzc2FnZTIpKTsKICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50eXBlZHJvdXRlci5yb3V0ZUFuZEFkZFJlc3BvbnNlKG1lc3NhZ2UyLCB7IHNraXBIb29rczogdHJ1ZSB9KTsKICAgICAgICAgIGlmIChyZXNwb25zZSAmJiAhcmVzcG9uc2UuZXJyb3IpIHsKICAgICAgICAgICAgdGhpcy5wb3N0TWVzc2FnZShyZXNwb25zZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNyZWF0ZXMgYSB0eXBlZHJlcXVlc3Qgd2l0aCB0aGlzIGNsYXNzZXMgcG9zdE1lc3NhZ2UgYXMgcG9zdE1ldGhvZAogICAgICAgKi8KICAgICAgY3JlYXRlVHlwZWRSZXF1ZXN0KG1ldGhvZE5hbWUpIHsKICAgICAgICBjb25zdCB0eXBlZHJlcXVlc3QgPSBuZXcgZGlzdF90c19leHBvcnRzMTUuVHlwZWRSZXF1ZXN0KHRoaXMudHlwZWR0YXJnZXQsIG1ldGhvZE5hbWUpOwogICAgICAgIHJldHVybiB0eXBlZHJlcXVlc3Q7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHBvc3RzIGEgdHlwZWRyZXF1ZXN0bWVzc2FnZQogICAgICAgKi8KICAgICAgYXN5bmMgcG9zdE1lc3NhZ2UobWVzc2FnZUFyZykgewogICAgICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbC5wb3N0TWVzc2FnZShtZXNzYWdlQXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc3Vic2NyaWJlIHRvIG1lc3NhZ2VzCiAgICAgICAqLwogICAgICBhc3luYyBjcmVhdGVUeXBlZEhhbmRsZXIobWV0aG9kQXJnLCBoYW5kbGVyRnVuY3Rpb24pIHsKICAgICAgICB0aGlzLnR5cGVkcm91dGVyLmFkZFR5cGVkSGFuZGxlcihuZXcgZGlzdF90c19leHBvcnRzMTUuVHlwZWRIYW5kbGVyKG1ldGhvZEFyZywgaGFuZGxlckZ1bmN0aW9uKSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNvbW1zQDEuMC4zMC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jb21tcy9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMxNiA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMxNiwgewogIERlZXNDb21tczogKCkgPT4gRGVlc0NvbW1zCn0pOwp2YXIgaW5pdF9kaXN0X3RzMTYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNvbW1zQDEuMC4zMC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jb21tcy9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19jb21tc19jbGFzc2VzX2RlZXNjb21tcygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvY29tbW9uLmpzCnZhciByZXF1aXJlX2NvbW1vbiA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvY29tbW9uLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIGZ1bmN0aW9uIGlzTm90aGluZyhzdWJqZWN0KSB7CiAgICAgIHJldHVybiB0eXBlb2Ygc3ViamVjdCA9PT0gInVuZGVmaW5lZCIgfHwgc3ViamVjdCA9PT0gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIGlzT2JqZWN0MyhzdWJqZWN0KSB7CiAgICAgIHJldHVybiB0eXBlb2Ygc3ViamVjdCA9PT0gIm9iamVjdCIgJiYgc3ViamVjdCAhPT0gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIHRvQXJyYXkzKHNlcXVlbmNlKSB7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNlcXVlbmNlKSkgcmV0dXJuIHNlcXVlbmNlOwogICAgICBlbHNlIGlmIChpc05vdGhpbmcoc2VxdWVuY2UpKSByZXR1cm4gW107CiAgICAgIHJldHVybiBbc2VxdWVuY2VdOwogICAgfQogICAgZnVuY3Rpb24gZXh0ZW5kMyh0YXJnZXQsIHNvdXJjZSkgewogICAgICB2YXIgaW5kZXgyLCBsZW5ndGgsIGtleTIsIHNvdXJjZUtleXM7CiAgICAgIGlmIChzb3VyY2UpIHsKICAgICAgICBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsKICAgICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IHNvdXJjZUtleXMubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgICBrZXkyID0gc291cmNlS2V5c1tpbmRleDJdOwogICAgICAgICAgdGFyZ2V0W2tleTJdID0gc291cmNlW2tleTJdOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdGFyZ2V0OwogICAgfQogICAgZnVuY3Rpb24gcmVwZWF0MyhzdHJpbmczLCBjb3VudDIpIHsKICAgICAgdmFyIHJlc3VsdCA9ICIiLCBjeWNsZTsKICAgICAgZm9yIChjeWNsZSA9IDA7IGN5Y2xlIDwgY291bnQyOyBjeWNsZSArPSAxKSB7CiAgICAgICAgcmVzdWx0ICs9IHN0cmluZzM7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTmVnYXRpdmVaZXJvKG51bWJlcjIpIHsKICAgICAgcmV0dXJuIG51bWJlcjIgPT09IDAgJiYgTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZID09PSAxIC8gbnVtYmVyMjsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzLmlzTm90aGluZyA9IGlzTm90aGluZzsKICAgIG1vZHVsZS5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3QzOwogICAgbW9kdWxlLmV4cG9ydHMudG9BcnJheSA9IHRvQXJyYXkzOwogICAgbW9kdWxlLmV4cG9ydHMucmVwZWF0ID0gcmVwZWF0MzsKICAgIG1vZHVsZS5leHBvcnRzLmlzTmVnYXRpdmVaZXJvID0gaXNOZWdhdGl2ZVplcm87CiAgICBtb2R1bGUuZXhwb3J0cy5leHRlbmQgPSBleHRlbmQzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvZXhjZXB0aW9uLmpzCnZhciByZXF1aXJlX2V4Y2VwdGlvbiA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvZXhjZXB0aW9uLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIGZ1bmN0aW9uIFlBTUxFeGNlcHRpb24ocmVhc29uLCBtYXJrMikgewogICAgICBFcnJvci5jYWxsKHRoaXMpOwogICAgICB0aGlzLm5hbWUgPSAiWUFNTEV4Y2VwdGlvbiI7CiAgICAgIHRoaXMucmVhc29uID0gcmVhc29uOwogICAgICB0aGlzLm1hcmsgPSBtYXJrMjsKICAgICAgdGhpcy5tZXNzYWdlID0gKHRoaXMucmVhc29uIHx8ICIodW5rbm93biByZWFzb24pIikgKyAodGhpcy5tYXJrID8gIiAiICsgdGhpcy5tYXJrLnRvU3RyaW5nKCkgOiAiIik7CiAgICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgewogICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjayB8fCAiIjsKICAgICAgfQogICAgfQogICAgWUFNTEV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7CiAgICBZQU1MRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFlBTUxFeGNlcHRpb247CiAgICBZQU1MRXhjZXB0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nMyhjb21wYWN0KSB7CiAgICAgIHZhciByZXN1bHQgPSB0aGlzLm5hbWUgKyAiOiAiOwogICAgICByZXN1bHQgKz0gdGhpcy5yZWFzb24gfHwgIih1bmtub3duIHJlYXNvbikiOwogICAgICBpZiAoIWNvbXBhY3QgJiYgdGhpcy5tYXJrKSB7CiAgICAgICAgcmVzdWx0ICs9ICIgIiArIHRoaXMubWFyay50b1N0cmluZygpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwogICAgbW9kdWxlLmV4cG9ydHMgPSBZQU1MRXhjZXB0aW9uOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvbWFyay5qcwp2YXIgcmVxdWlyZV9tYXJrID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9tYXJrLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBjb21tb24gPSByZXF1aXJlX2NvbW1vbigpOwogICAgZnVuY3Rpb24gTWFyayhuYW1lLCBidWZmZXIyLCBwb3NpdGlvbjMsIGxpbmUsIGNvbHVtbikgewogICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjI7CiAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjM7CiAgICAgIHRoaXMubGluZSA9IGxpbmU7CiAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uOwogICAgfQogICAgTWFyay5wcm90b3R5cGUuZ2V0U25pcHBldCA9IGZ1bmN0aW9uIGdldFNuaXBwZXQoaW5kZW50MywgbWF4TGVuZ3RoKSB7CiAgICAgIHZhciBoZWFkMiwgc3RhcnQsIHRhaWwsIGVuZDMsIHNuaXBwZXQ7CiAgICAgIGlmICghdGhpcy5idWZmZXIpIHJldHVybiBudWxsOwogICAgICBpbmRlbnQzID0gaW5kZW50MyB8fCA0OwogICAgICBtYXhMZW5ndGggPSBtYXhMZW5ndGggfHwgNzU7CiAgICAgIGhlYWQyID0gIiI7CiAgICAgIHN0YXJ0ID0gdGhpcy5wb3NpdGlvbjsKICAgICAgd2hpbGUgKHN0YXJ0ID4gMCAmJiAiXDBcclxuXHg4NVx1MjAyOFx1MjAyOSIuaW5kZXhPZih0aGlzLmJ1ZmZlci5jaGFyQXQoc3RhcnQgLSAxKSkgPT09IC0xKSB7CiAgICAgICAgc3RhcnQgLT0gMTsKICAgICAgICBpZiAodGhpcy5wb3NpdGlvbiAtIHN0YXJ0ID4gbWF4TGVuZ3RoIC8gMiAtIDEpIHsKICAgICAgICAgIGhlYWQyID0gIiAuLi4gIjsKICAgICAgICAgIHN0YXJ0ICs9IDU7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGFpbCA9ICIiOwogICAgICBlbmQzID0gdGhpcy5wb3NpdGlvbjsKICAgICAgd2hpbGUgKGVuZDMgPCB0aGlzLmJ1ZmZlci5sZW5ndGggJiYgIlwwXHJcblx4ODVcdTIwMjhcdTIwMjkiLmluZGV4T2YodGhpcy5idWZmZXIuY2hhckF0KGVuZDMpKSA9PT0gLTEpIHsKICAgICAgICBlbmQzICs9IDE7CiAgICAgICAgaWYgKGVuZDMgLSB0aGlzLnBvc2l0aW9uID4gbWF4TGVuZ3RoIC8gMiAtIDEpIHsKICAgICAgICAgIHRhaWwgPSAiIC4uLiAiOwogICAgICAgICAgZW5kMyAtPSA1OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNuaXBwZXQgPSB0aGlzLmJ1ZmZlci5zbGljZShzdGFydCwgZW5kMyk7CiAgICAgIHJldHVybiBjb21tb24ucmVwZWF0KCIgIiwgaW5kZW50MykgKyBoZWFkMiArIHNuaXBwZXQgKyB0YWlsICsgIlxuIiArIGNvbW1vbi5yZXBlYXQoIiAiLCBpbmRlbnQzICsgdGhpcy5wb3NpdGlvbiAtIHN0YXJ0ICsgaGVhZDIubGVuZ3RoKSArICJeIjsKICAgIH07CiAgICBNYXJrLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nMyhjb21wYWN0KSB7CiAgICAgIHZhciBzbmlwcGV0LCB3aGVyZSA9ICIiOwogICAgICBpZiAodGhpcy5uYW1lKSB7CiAgICAgICAgd2hlcmUgKz0gJ2luICInICsgdGhpcy5uYW1lICsgJyIgJzsKICAgICAgfQogICAgICB3aGVyZSArPSAiYXQgbGluZSAiICsgKHRoaXMubGluZSArIDEpICsgIiwgY29sdW1uICIgKyAodGhpcy5jb2x1bW4gKyAxKTsKICAgICAgaWYgKCFjb21wYWN0KSB7CiAgICAgICAgc25pcHBldCA9IHRoaXMuZ2V0U25pcHBldCgpOwogICAgICAgIGlmIChzbmlwcGV0KSB7CiAgICAgICAgICB3aGVyZSArPSAiOlxuIiArIHNuaXBwZXQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB3aGVyZTsKICAgIH07CiAgICBtb2R1bGUuZXhwb3J0cyA9IE1hcms7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlLmpzCnZhciByZXF1aXJlX3R5cGUgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFlBTUxFeGNlcHRpb24gPSByZXF1aXJlX2V4Y2VwdGlvbigpOwogICAgdmFyIFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUyA9IFsKICAgICAgImtpbmQiLAogICAgICAicmVzb2x2ZSIsCiAgICAgICJjb25zdHJ1Y3QiLAogICAgICAiaW5zdGFuY2VPZiIsCiAgICAgICJwcmVkaWNhdGUiLAogICAgICAicmVwcmVzZW50IiwKICAgICAgImRlZmF1bHRTdHlsZSIsCiAgICAgICJzdHlsZUFsaWFzZXMiCiAgICBdOwogICAgdmFyIFlBTUxfTk9ERV9LSU5EUyA9IFsKICAgICAgInNjYWxhciIsCiAgICAgICJzZXF1ZW5jZSIsCiAgICAgICJtYXBwaW5nIgogICAgXTsKICAgIGZ1bmN0aW9uIGNvbXBpbGVTdHlsZUFsaWFzZXMobWFwNykgewogICAgICB2YXIgcmVzdWx0ID0ge307CiAgICAgIGlmIChtYXA3ICE9PSBudWxsKSB7CiAgICAgICAgT2JqZWN0LmtleXMobWFwNykuZm9yRWFjaChmdW5jdGlvbihzdHlsZSkgewogICAgICAgICAgbWFwN1tzdHlsZV0uZm9yRWFjaChmdW5jdGlvbihhbGlhcykgewogICAgICAgICAgICByZXN1bHRbU3RyaW5nKGFsaWFzKV0gPSBzdHlsZTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBUeXBlKHRhZywgb3B0aW9ucykgewogICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgaWYgKFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUy5pbmRleE9mKG5hbWUpID09PSAtMSkgewogICAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1Vua25vd24gb3B0aW9uICInICsgbmFtZSArICciIGlzIG1ldCBpbiBkZWZpbml0aW9uIG9mICInICsgdGFnICsgJyIgWUFNTCB0eXBlLicpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMudGFnID0gdGFnOwogICAgICB0aGlzLmtpbmQgPSBvcHRpb25zWyJraW5kIl0gfHwgbnVsbDsKICAgICAgdGhpcy5yZXNvbHZlID0gb3B0aW9uc1sicmVzb2x2ZSJdIHx8IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9OwogICAgICB0aGlzLmNvbnN0cnVjdCA9IG9wdGlvbnNbImNvbnN0cnVjdCJdIHx8IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICByZXR1cm4gZGF0YTsKICAgICAgfTsKICAgICAgdGhpcy5pbnN0YW5jZU9mID0gb3B0aW9uc1siaW5zdGFuY2VPZiJdIHx8IG51bGw7CiAgICAgIHRoaXMucHJlZGljYXRlID0gb3B0aW9uc1sicHJlZGljYXRlIl0gfHwgbnVsbDsKICAgICAgdGhpcy5yZXByZXNlbnQgPSBvcHRpb25zWyJyZXByZXNlbnQiXSB8fCBudWxsOwogICAgICB0aGlzLmRlZmF1bHRTdHlsZSA9IG9wdGlvbnNbImRlZmF1bHRTdHlsZSJdIHx8IG51bGw7CiAgICAgIHRoaXMuc3R5bGVBbGlhc2VzID0gY29tcGlsZVN0eWxlQWxpYXNlcyhvcHRpb25zWyJzdHlsZUFsaWFzZXMiXSB8fCBudWxsKTsKICAgICAgaWYgKFlBTUxfTk9ERV9LSU5EUy5pbmRleE9mKHRoaXMua2luZCkgPT09IC0xKSB7CiAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1Vua25vd24ga2luZCAiJyArIHRoaXMua2luZCArICciIGlzIHNwZWNpZmllZCBmb3IgIicgKyB0YWcgKyAnIiBZQU1MIHR5cGUuJyk7CiAgICAgIH0KICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gVHlwZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS5qcwp2YXIgcmVxdWlyZV9zY2hlbWEgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgY29tbW9uID0gcmVxdWlyZV9jb21tb24oKTsKICAgIHZhciBZQU1MRXhjZXB0aW9uID0gcmVxdWlyZV9leGNlcHRpb24oKTsKICAgIHZhciBUeXBlID0gcmVxdWlyZV90eXBlKCk7CiAgICBmdW5jdGlvbiBjb21waWxlTGlzdChzY2hlbWEsIG5hbWUsIHJlc3VsdCkgewogICAgICB2YXIgZXhjbHVkZSA9IFtdOwogICAgICBzY2hlbWEuaW5jbHVkZS5mb3JFYWNoKGZ1bmN0aW9uKGluY2x1ZGVkU2NoZW1hKSB7CiAgICAgICAgcmVzdWx0ID0gY29tcGlsZUxpc3QoaW5jbHVkZWRTY2hlbWEsIG5hbWUsIHJlc3VsdCk7CiAgICAgIH0pOwogICAgICBzY2hlbWFbbmFtZV0uZm9yRWFjaChmdW5jdGlvbihjdXJyZW50VHlwZSkgewogICAgICAgIHJlc3VsdC5mb3JFYWNoKGZ1bmN0aW9uKHByZXZpb3VzVHlwZSwgcHJldmlvdXNJbmRleCkgewogICAgICAgICAgaWYgKHByZXZpb3VzVHlwZS50YWcgPT09IGN1cnJlbnRUeXBlLnRhZyAmJiBwcmV2aW91c1R5cGUua2luZCA9PT0gY3VycmVudFR5cGUua2luZCkgewogICAgICAgICAgICBleGNsdWRlLnB1c2gocHJldmlvdXNJbmRleCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmVzdWx0LnB1c2goY3VycmVudFR5cGUpOwogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdC5maWx0ZXIoZnVuY3Rpb24odHlwZTUsIGluZGV4MikgewogICAgICAgIHJldHVybiBleGNsdWRlLmluZGV4T2YoaW5kZXgyKSA9PT0gLTE7CiAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gY29tcGlsZU1hcCgpIHsKICAgICAgdmFyIHJlc3VsdCA9IHsKICAgICAgICBzY2FsYXI6IHt9LAogICAgICAgIHNlcXVlbmNlOiB7fSwKICAgICAgICBtYXBwaW5nOiB7fSwKICAgICAgICBmYWxsYmFjazoge30KICAgICAgfSwgaW5kZXgyLCBsZW5ndGg7CiAgICAgIGZ1bmN0aW9uIGNvbGxlY3RUeXBlKHR5cGU1KSB7CiAgICAgICAgcmVzdWx0W3R5cGU1LmtpbmRdW3R5cGU1LnRhZ10gPSByZXN1bHRbImZhbGxiYWNrIl1bdHlwZTUudGFnXSA9IHR5cGU1OwogICAgICB9CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIGFyZ3VtZW50c1tpbmRleDJdLmZvckVhY2goY29sbGVjdFR5cGUpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBTY2hlbWEyKGRlZmluaXRpb24zKSB7CiAgICAgIHRoaXMuaW5jbHVkZSA9IGRlZmluaXRpb24zLmluY2x1ZGUgfHwgW107CiAgICAgIHRoaXMuaW1wbGljaXQgPSBkZWZpbml0aW9uMy5pbXBsaWNpdCB8fCBbXTsKICAgICAgdGhpcy5leHBsaWNpdCA9IGRlZmluaXRpb24zLmV4cGxpY2l0IHx8IFtdOwogICAgICB0aGlzLmltcGxpY2l0LmZvckVhY2goZnVuY3Rpb24odHlwZTUpIHsKICAgICAgICBpZiAodHlwZTUubG9hZEtpbmQgJiYgdHlwZTUubG9hZEtpbmQgIT09ICJzY2FsYXIiKSB7CiAgICAgICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbigiVGhlcmUgaXMgYSBub24tc2NhbGFyIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIEltcGxpY2l0IHJlc29sdmluZyBvZiBzdWNoIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQuIik7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5jb21waWxlZEltcGxpY2l0ID0gY29tcGlsZUxpc3QodGhpcywgImltcGxpY2l0IiwgW10pOwogICAgICB0aGlzLmNvbXBpbGVkRXhwbGljaXQgPSBjb21waWxlTGlzdCh0aGlzLCAiZXhwbGljaXQiLCBbXSk7CiAgICAgIHRoaXMuY29tcGlsZWRUeXBlTWFwID0gY29tcGlsZU1hcCh0aGlzLmNvbXBpbGVkSW1wbGljaXQsIHRoaXMuY29tcGlsZWRFeHBsaWNpdCk7CiAgICB9CiAgICBTY2hlbWEyLkRFRkFVTFQgPSBudWxsOwogICAgU2NoZW1hMi5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGVTY2hlbWEoKSB7CiAgICAgIHZhciBzY2hlbWFzLCB0eXBlczsKICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgc2NoZW1hcyA9IFNjaGVtYTIuREVGQVVMVDsKICAgICAgICAgIHR5cGVzID0gYXJndW1lbnRzWzBdOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAyOgogICAgICAgICAgc2NoZW1hcyA9IGFyZ3VtZW50c1swXTsKICAgICAgICAgIHR5cGVzID0gYXJndW1lbnRzWzFdOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBTY2hlbWEuY3JlYXRlIGZ1bmN0aW9uIik7CiAgICAgIH0KICAgICAgc2NoZW1hcyA9IGNvbW1vbi50b0FycmF5KHNjaGVtYXMpOwogICAgICB0eXBlcyA9IGNvbW1vbi50b0FycmF5KHR5cGVzKTsKICAgICAgaWYgKCFzY2hlbWFzLmV2ZXJ5KGZ1bmN0aW9uKHNjaGVtYSkgewogICAgICAgIHJldHVybiBzY2hlbWEgaW5zdGFuY2VvZiBTY2hlbWEyOwogICAgICB9KSkgewogICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJTcGVjaWZpZWQgbGlzdCBvZiBzdXBlciBzY2hlbWFzIChvciBhIHNpbmdsZSBTY2hlbWEgb2JqZWN0KSBjb250YWlucyBhIG5vbi1TY2hlbWEgb2JqZWN0LiIpOwogICAgICB9CiAgICAgIGlmICghdHlwZXMuZXZlcnkoZnVuY3Rpb24odHlwZTUpIHsKICAgICAgICByZXR1cm4gdHlwZTUgaW5zdGFuY2VvZiBUeXBlOwogICAgICB9KSkgewogICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuIik7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBTY2hlbWEyKHsKICAgICAgICBpbmNsdWRlOiBzY2hlbWFzLAogICAgICAgIGV4cGxpY2l0OiB0eXBlcwogICAgICB9KTsKICAgIH07CiAgICBtb2R1bGUuZXhwb3J0cyA9IFNjaGVtYTI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3N0ci5qcwp2YXIgcmVxdWlyZV9zdHIgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc3RyLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlID0gcmVxdWlyZV90eXBlKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpzdHIiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiAiIjsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3NlcS5qcwp2YXIgcmVxdWlyZV9zZXEgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc2VxLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlID0gcmVxdWlyZV90eXBlKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXEiLCB7CiAgICAgIGtpbmQ6ICJzZXF1ZW5jZSIsCiAgICAgIGNvbnN0cnVjdDogZnVuY3Rpb24oZGF0YSkgewogICAgICAgIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IFtdOwogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbWFwLmpzCnZhciByZXF1aXJlX21hcCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9tYXAuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOm1hcCIsIHsKICAgICAga2luZDogIm1hcHBpbmciLAogICAgICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiB7fTsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZmFpbHNhZmUuanMKdmFyIHJlcXVpcmVfZmFpbHNhZmUgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9mYWlsc2FmZS5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgU2NoZW1hMiA9IHJlcXVpcmVfc2NoZW1hKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEyKHsKICAgICAgZXhwbGljaXQ6IFsKICAgICAgICByZXF1aXJlX3N0cigpLAogICAgICAgIHJlcXVpcmVfc2VxKCksCiAgICAgICAgcmVxdWlyZV9tYXAoKQogICAgICBdCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbnVsbC5qcwp2YXIgcmVxdWlyZV9udWxsID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL251bGwuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIGZ1bmN0aW9uIHJlc29sdmVZYW1sTnVsbChkYXRhKSB7CiAgICAgIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgdmFyIG1heDMgPSBkYXRhLmxlbmd0aDsKICAgICAgcmV0dXJuIG1heDMgPT09IDEgJiYgZGF0YSA9PT0gIn4iIHx8IG1heDMgPT09IDQgJiYgKGRhdGEgPT09ICJudWxsIiB8fCBkYXRhID09PSAiTnVsbCIgfHwgZGF0YSA9PT0gIk5VTEwiKTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxOdWxsKCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTnVsbChvYmplY3QpIHsKICAgICAgcmV0dXJuIG9iamVjdCA9PT0gbnVsbDsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOm51bGwiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlWWFtbE51bGwsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE51bGwsCiAgICAgIHByZWRpY2F0ZTogaXNOdWxsLAogICAgICByZXByZXNlbnQ6IHsKICAgICAgICBjYW5vbmljYWw6IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuICJ+IjsKICAgICAgICB9LAogICAgICAgIGxvd2VyY2FzZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gIm51bGwiOwogICAgICAgIH0sCiAgICAgICAgdXBwZXJjYXNlOiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiAiTlVMTCI7CiAgICAgICAgfSwKICAgICAgICBjYW1lbGNhc2U6IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuICJOdWxsIjsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlZmF1bHRTdHlsZTogImxvd2VyY2FzZSIKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9ib29sLmpzCnZhciByZXF1aXJlX2Jvb2wgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYm9vbC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVHlwZSA9IHJlcXVpcmVfdHlwZSgpOwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxCb29sZWFuKGRhdGEpIHsKICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgdmFyIG1heDMgPSBkYXRhLmxlbmd0aDsKICAgICAgcmV0dXJuIG1heDMgPT09IDQgJiYgKGRhdGEgPT09ICJ0cnVlIiB8fCBkYXRhID09PSAiVHJ1ZSIgfHwgZGF0YSA9PT0gIlRSVUUiKSB8fCBtYXgzID09PSA1ICYmIChkYXRhID09PSAiZmFsc2UiIHx8IGRhdGEgPT09ICJGYWxzZSIgfHwgZGF0YSA9PT0gIkZBTFNFIik7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sQm9vbGVhbihkYXRhKSB7CiAgICAgIHJldHVybiBkYXRhID09PSAidHJ1ZSIgfHwgZGF0YSA9PT0gIlRydWUiIHx8IGRhdGEgPT09ICJUUlVFIjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzQm9vbGVhbihvYmplY3QpIHsKICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAiW29iamVjdCBCb29sZWFuXSI7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpib29sIiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxCb29sZWFuLAogICAgICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxCb29sZWFuLAogICAgICBwcmVkaWNhdGU6IGlzQm9vbGVhbiwKICAgICAgcmVwcmVzZW50OiB7CiAgICAgICAgbG93ZXJjYXNlOiBmdW5jdGlvbihvYmplY3QpIHsKICAgICAgICAgIHJldHVybiBvYmplY3QgPyAidHJ1ZSIgOiAiZmFsc2UiOwogICAgICAgIH0sCiAgICAgICAgdXBwZXJjYXNlOiBmdW5jdGlvbihvYmplY3QpIHsKICAgICAgICAgIHJldHVybiBvYmplY3QgPyAiVFJVRSIgOiAiRkFMU0UiOwogICAgICAgIH0sCiAgICAgICAgY2FtZWxjYXNlOiBmdW5jdGlvbihvYmplY3QpIHsKICAgICAgICAgIHJldHVybiBvYmplY3QgPyAiVHJ1ZSIgOiAiRmFsc2UiOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZGVmYXVsdFN0eWxlOiAibG93ZXJjYXNlIgogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2ludC5qcwp2YXIgcmVxdWlyZV9pbnQgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvaW50LmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBjb21tb24gPSByZXF1aXJlX2NvbW1vbigpOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIGZ1bmN0aW9uIGlzSGV4Q29kZShjMTEpIHsKICAgICAgcmV0dXJuIDQ4IDw9IGMxMSAmJiBjMTEgPD0gNTcgfHwgNjUgPD0gYzExICYmIGMxMSA8PSA3MCB8fCA5NyA8PSBjMTEgJiYgYzExIDw9IDEwMjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzT2N0Q29kZShjMTEpIHsKICAgICAgcmV0dXJuIDQ4IDw9IGMxMSAmJiBjMTEgPD0gNTU7CiAgICB9CiAgICBmdW5jdGlvbiBpc0RlY0NvZGUoYzExKSB7CiAgICAgIHJldHVybiA0OCA8PSBjMTEgJiYgYzExIDw9IDU3OwogICAgfQogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxJbnRlZ2VyKGRhdGEpIHsKICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgdmFyIG1heDMgPSBkYXRhLmxlbmd0aCwgaW5kZXgyID0gMCwgaGFzRGlnaXRzID0gZmFsc2UsIGNoOwogICAgICBpZiAoIW1heDMpIHJldHVybiBmYWxzZTsKICAgICAgY2ggPSBkYXRhW2luZGV4Ml07CiAgICAgIGlmIChjaCA9PT0gIi0iIHx8IGNoID09PSAiKyIpIHsKICAgICAgICBjaCA9IGRhdGFbKytpbmRleDJdOwogICAgICB9CiAgICAgIGlmIChjaCA9PT0gIjAiKSB7CiAgICAgICAgaWYgKGluZGV4MiArIDEgPT09IG1heDMpIHJldHVybiB0cnVlOwogICAgICAgIGNoID0gZGF0YVsrK2luZGV4Ml07CiAgICAgICAgaWYgKGNoID09PSAiYiIpIHsKICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgZm9yICg7IGluZGV4MiA8IG1heDM7IGluZGV4MisrKSB7CiAgICAgICAgICAgIGNoID0gZGF0YVtpbmRleDJdOwogICAgICAgICAgICBpZiAoY2ggPT09ICJfIikgY29udGludWU7CiAgICAgICAgICAgIGlmIChjaCAhPT0gIjAiICYmIGNoICE9PSAiMSIpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBoYXNEaWdpdHMgJiYgY2ggIT09ICJfIjsKICAgICAgICB9CiAgICAgICAgaWYgKGNoID09PSAieCIpIHsKICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgZm9yICg7IGluZGV4MiA8IG1heDM7IGluZGV4MisrKSB7CiAgICAgICAgICAgIGNoID0gZGF0YVtpbmRleDJdOwogICAgICAgICAgICBpZiAoY2ggPT09ICJfIikgY29udGludWU7CiAgICAgICAgICAgIGlmICghaXNIZXhDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleDIpKSkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICBoYXNEaWdpdHMgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gIl8iOwogICAgICAgIH0KICAgICAgICBmb3IgKDsgaW5kZXgyIDwgbWF4MzsgaW5kZXgyKyspIHsKICAgICAgICAgIGNoID0gZGF0YVtpbmRleDJdOwogICAgICAgICAgaWYgKGNoID09PSAiXyIpIGNvbnRpbnVlOwogICAgICAgICAgaWYgKCFpc09jdENvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4MikpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICBoYXNEaWdpdHMgPSB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaGFzRGlnaXRzICYmIGNoICE9PSAiXyI7CiAgICAgIH0KICAgICAgaWYgKGNoID09PSAiXyIpIHJldHVybiBmYWxzZTsKICAgICAgZm9yICg7IGluZGV4MiA8IG1heDM7IGluZGV4MisrKSB7CiAgICAgICAgY2ggPSBkYXRhW2luZGV4Ml07CiAgICAgICAgaWYgKGNoID09PSAiXyIpIGNvbnRpbnVlOwogICAgICAgIGlmIChjaCA9PT0gIjoiKSBicmVhazsKICAgICAgICBpZiAoIWlzRGVjQ29kZShkYXRhLmNoYXJDb2RlQXQoaW5kZXgyKSkpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoIWhhc0RpZ2l0cyB8fCBjaCA9PT0gIl8iKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChjaCAhPT0gIjoiKSByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIC9eKDpbMC01XT9bMC05XSkrJC8udGVzdChkYXRhLnNsaWNlKGluZGV4MikpOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbEludGVnZXIoZGF0YSkgewogICAgICB2YXIgdmFsdWUyID0gZGF0YSwgc2lnbiA9IDEsIGNoLCBiYXNlLCBkaWdpdHMgPSBbXTsKICAgICAgaWYgKHZhbHVlMi5pbmRleE9mKCJfIikgIT09IC0xKSB7CiAgICAgICAgdmFsdWUyID0gdmFsdWUyLnJlcGxhY2UoL18vZywgIiIpOwogICAgICB9CiAgICAgIGNoID0gdmFsdWUyWzBdOwogICAgICBpZiAoY2ggPT09ICItIiB8fCBjaCA9PT0gIisiKSB7CiAgICAgICAgaWYgKGNoID09PSAiLSIpIHNpZ24gPSAtMTsKICAgICAgICB2YWx1ZTIgPSB2YWx1ZTIuc2xpY2UoMSk7CiAgICAgICAgY2ggPSB2YWx1ZTJbMF07CiAgICAgIH0KICAgICAgaWYgKHZhbHVlMiA9PT0gIjAiKSByZXR1cm4gMDsKICAgICAgaWYgKGNoID09PSAiMCIpIHsKICAgICAgICBpZiAodmFsdWUyWzFdID09PSAiYiIpIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUyLnNsaWNlKDIpLCAyKTsKICAgICAgICBpZiAodmFsdWUyWzFdID09PSAieCIpIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUyLCAxNik7CiAgICAgICAgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZTIsIDgpOwogICAgICB9CiAgICAgIGlmICh2YWx1ZTIuaW5kZXhPZigiOiIpICE9PSAtMSkgewogICAgICAgIHZhbHVlMi5zcGxpdCgiOiIpLmZvckVhY2goZnVuY3Rpb24odjUpIHsKICAgICAgICAgIGRpZ2l0cy51bnNoaWZ0KHBhcnNlSW50KHY1LCAxMCkpOwogICAgICAgIH0pOwogICAgICAgIHZhbHVlMiA9IDA7CiAgICAgICAgYmFzZSA9IDE7CiAgICAgICAgZGlnaXRzLmZvckVhY2goZnVuY3Rpb24oZDYpIHsKICAgICAgICAgIHZhbHVlMiArPSBkNiAqIGJhc2U7CiAgICAgICAgICBiYXNlICo9IDYwOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBzaWduICogdmFsdWUyOwogICAgICB9CiAgICAgIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUyLCAxMCk7CiAgICB9CiAgICBmdW5jdGlvbiBpc0ludGVnZXIob2JqZWN0KSB7CiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gIltvYmplY3QgTnVtYmVyXSIgJiYgKG9iamVjdCAlIDEgPT09IDAgJiYgIWNvbW1vbi5pc05lZ2F0aXZlWmVybyhvYmplY3QpKTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOmludCIsIHsKICAgICAga2luZDogInNjYWxhciIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sSW50ZWdlciwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sSW50ZWdlciwKICAgICAgcHJlZGljYXRlOiBpc0ludGVnZXIsCiAgICAgIHJlcHJlc2VudDogewogICAgICAgIGJpbmFyeTogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICByZXR1cm4gb2JqID49IDAgPyAiMGIiICsgb2JqLnRvU3RyaW5nKDIpIDogIi0wYiIgKyBvYmoudG9TdHJpbmcoMikuc2xpY2UoMSk7CiAgICAgICAgfSwKICAgICAgICBvY3RhbDogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICByZXR1cm4gb2JqID49IDAgPyAiMCIgKyBvYmoudG9TdHJpbmcoOCkgOiAiLTAiICsgb2JqLnRvU3RyaW5nKDgpLnNsaWNlKDEpOwogICAgICAgIH0sCiAgICAgICAgZGVjaW1hbDogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICByZXR1cm4gb2JqLnRvU3RyaW5nKDEwKTsKICAgICAgICB9LAogICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi8KICAgICAgICBoZXhhZGVjaW1hbDogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICByZXR1cm4gb2JqID49IDAgPyAiMHgiICsgb2JqLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpIDogIi0weCIgKyBvYmoudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBkZWZhdWx0U3R5bGU6ICJkZWNpbWFsIiwKICAgICAgc3R5bGVBbGlhc2VzOiB7CiAgICAgICAgYmluYXJ5OiBbMiwgImJpbiJdLAogICAgICAgIG9jdGFsOiBbOCwgIm9jdCJdLAogICAgICAgIGRlY2ltYWw6IFsxMCwgImRlYyJdLAogICAgICAgIGhleGFkZWNpbWFsOiBbMTYsICJoZXgiXQogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvZmxvYXQuanMKdmFyIHJlcXVpcmVfZmxvYXQgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvZmxvYXQuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGNvbW1vbiA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICB2YXIgVHlwZSA9IHJlcXVpcmVfdHlwZSgpOwogICAgdmFyIFlBTUxfRkxPQVRfUEFUVEVSTiA9IG5ldyBSZWdFeHAoCiAgICAgIC8vIDIuNWU0LCAyLjUgYW5kIGludGVnZXJzCiAgICAgICJeKD86Wy0rXT8oPzowfFsxLTldWzAtOV9dKikoPzpcXC5bMC05X10qKT8oPzpbZUVdWy0rXT9bMC05XSspP3xcXC5bMC05X10rKD86W2VFXVstK10/WzAtOV0rKT98Wy0rXT9bMC05XVswLTlfXSooPzo6WzAtNV0/WzAtOV0pK1xcLlswLTlfXSp8Wy0rXT9cXC4oPzppbmZ8SW5mfElORil8XFwuKD86bmFufE5hTnxOQU4pKSQiCiAgICApOwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxGbG9hdChkYXRhKSB7CiAgICAgIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmICghWUFNTF9GTE9BVF9QQVRURVJOLnRlc3QoZGF0YSkgfHwgLy8gUXVpY2sgaGFjayB0byBub3QgYWxsb3cgaW50ZWdlcnMgZW5kIHdpdGggYF9gCiAgICAgIC8vIFByb2JhYmx5IHNob3VsZCB1cGRhdGUgcmVnZXhwICYgY2hlY2sgc3BlZWQKICAgICAgZGF0YVtkYXRhLmxlbmd0aCAtIDFdID09PSAiXyIpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sRmxvYXQoZGF0YSkgewogICAgICB2YXIgdmFsdWUyLCBzaWduLCBiYXNlLCBkaWdpdHM7CiAgICAgIHZhbHVlMiA9IGRhdGEucmVwbGFjZSgvXy9nLCAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgc2lnbiA9IHZhbHVlMlswXSA9PT0gIi0iID8gLTEgOiAxOwogICAgICBkaWdpdHMgPSBbXTsKICAgICAgaWYgKCIrLSIuaW5kZXhPZih2YWx1ZTJbMF0pID49IDApIHsKICAgICAgICB2YWx1ZTIgPSB2YWx1ZTIuc2xpY2UoMSk7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlMiA9PT0gIi5pbmYiKSB7CiAgICAgICAgcmV0dXJuIHNpZ24gPT09IDEgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7CiAgICAgIH0gZWxzZSBpZiAodmFsdWUyID09PSAiLm5hbiIpIHsKICAgICAgICByZXR1cm4gTmFOOwogICAgICB9IGVsc2UgaWYgKHZhbHVlMi5pbmRleE9mKCI6IikgPj0gMCkgewogICAgICAgIHZhbHVlMi5zcGxpdCgiOiIpLmZvckVhY2goZnVuY3Rpb24odjUpIHsKICAgICAgICAgIGRpZ2l0cy51bnNoaWZ0KHBhcnNlRmxvYXQodjUsIDEwKSk7CiAgICAgICAgfSk7CiAgICAgICAgdmFsdWUyID0gMDsKICAgICAgICBiYXNlID0gMTsKICAgICAgICBkaWdpdHMuZm9yRWFjaChmdW5jdGlvbihkNikgewogICAgICAgICAgdmFsdWUyICs9IGQ2ICogYmFzZTsKICAgICAgICAgIGJhc2UgKj0gNjA7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHNpZ24gKiB2YWx1ZTI7CiAgICAgIH0KICAgICAgcmV0dXJuIHNpZ24gKiBwYXJzZUZsb2F0KHZhbHVlMiwgMTApOwogICAgfQogICAgdmFyIFNDSUVOVElGSUNfV0lUSE9VVF9ET1QgPSAvXlstK10/WzAtOV0rZS87CiAgICBmdW5jdGlvbiByZXByZXNlbnRZYW1sRmxvYXQob2JqZWN0LCBzdHlsZSkgewogICAgICB2YXIgcmVzOwogICAgICBpZiAoaXNOYU4ob2JqZWN0KSkgewogICAgICAgIHN3aXRjaCAoc3R5bGUpIHsKICAgICAgICAgIGNhc2UgImxvd2VyY2FzZSI6CiAgICAgICAgICAgIHJldHVybiAiLm5hbiI7CiAgICAgICAgICBjYXNlICJ1cHBlcmNhc2UiOgogICAgICAgICAgICByZXR1cm4gIi5OQU4iOwogICAgICAgICAgY2FzZSAiY2FtZWxjYXNlIjoKICAgICAgICAgICAgcmV0dXJuICIuTmFOIjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZID09PSBvYmplY3QpIHsKICAgICAgICBzd2l0Y2ggKHN0eWxlKSB7CiAgICAgICAgICBjYXNlICJsb3dlcmNhc2UiOgogICAgICAgICAgICByZXR1cm4gIi5pbmYiOwogICAgICAgICAgY2FzZSAidXBwZXJjYXNlIjoKICAgICAgICAgICAgcmV0dXJuICIuSU5GIjsKICAgICAgICAgIGNhc2UgImNhbWVsY2FzZSI6CiAgICAgICAgICAgIHJldHVybiAiLkluZiI7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA9PT0gb2JqZWN0KSB7CiAgICAgICAgc3dpdGNoIChzdHlsZSkgewogICAgICAgICAgY2FzZSAibG93ZXJjYXNlIjoKICAgICAgICAgICAgcmV0dXJuICItLmluZiI7CiAgICAgICAgICBjYXNlICJ1cHBlcmNhc2UiOgogICAgICAgICAgICByZXR1cm4gIi0uSU5GIjsKICAgICAgICAgIGNhc2UgImNhbWVsY2FzZSI6CiAgICAgICAgICAgIHJldHVybiAiLS5JbmYiOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChjb21tb24uaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSkgewogICAgICAgIHJldHVybiAiLTAuMCI7CiAgICAgIH0KICAgICAgcmVzID0gb2JqZWN0LnRvU3RyaW5nKDEwKTsKICAgICAgcmV0dXJuIFNDSUVOVElGSUNfV0lUSE9VVF9ET1QudGVzdChyZXMpID8gcmVzLnJlcGxhY2UoImUiLCAiLmUiKSA6IHJlczsKICAgIH0KICAgIGZ1bmN0aW9uIGlzRmxvYXQob2JqZWN0KSB7CiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gIltvYmplY3QgTnVtYmVyXSIgJiYgKG9iamVjdCAlIDEgIT09IDAgfHwgY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlWWFtbEZsb2F0LAogICAgICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxGbG9hdCwKICAgICAgcHJlZGljYXRlOiBpc0Zsb2F0LAogICAgICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxGbG9hdCwKICAgICAgZGVmYXVsdFN0eWxlOiAibG93ZXJjYXNlIgogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvanNvbi5qcwp2YXIgcmVxdWlyZV9qc29uID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvanNvbi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgU2NoZW1hMiA9IHJlcXVpcmVfc2NoZW1hKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEyKHsKICAgICAgaW5jbHVkZTogWwogICAgICAgIHJlcXVpcmVfZmFpbHNhZmUoKQogICAgICBdLAogICAgICBpbXBsaWNpdDogWwogICAgICAgIHJlcXVpcmVfbnVsbCgpLAogICAgICAgIHJlcXVpcmVfYm9vbCgpLAogICAgICAgIHJlcXVpcmVfaW50KCksCiAgICAgICAgcmVxdWlyZV9mbG9hdCgpCiAgICAgIF0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2NvcmUuanMKdmFyIHJlcXVpcmVfY29yZSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2NvcmUuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFNjaGVtYTIgPSByZXF1aXJlX3NjaGVtYSgpOwogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgU2NoZW1hMih7CiAgICAgIGluY2x1ZGU6IFsKICAgICAgICByZXF1aXJlX2pzb24oKQogICAgICBdCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvdGltZXN0YW1wLmpzCnZhciByZXF1aXJlX3RpbWVzdGFtcCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS90aW1lc3RhbXAuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBZQU1MX0RBVEVfUkVHRVhQID0gbmV3IFJlZ0V4cCgKICAgICAgIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldKS0oWzAtOV1bMC05XSkkIgogICAgKTsKICAgIHZhciBZQU1MX1RJTUVTVEFNUF9SRUdFWFAgPSBuZXcgUmVnRXhwKAogICAgICAiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0/KS0oWzAtOV1bMC05XT8pKD86W1R0XXxbIFxcdF0rKShbMC05XVswLTldPyk6KFswLTldWzAtOV0pOihbMC05XVswLTldKSg/OlxcLihbMC05XSopKT8oPzpbIFxcdF0qKFp8KFstK10pKFswLTldWzAtOV0/KSg/OjooWzAtOV1bMC05XSkpPykpPyQiCiAgICApOwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxUaW1lc3RhbXAoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoWUFNTF9EQVRFX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbFRpbWVzdGFtcChkYXRhKSB7CiAgICAgIHZhciBtYXRjaDIsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmcmFjdGlvbiA9IDAsIGRlbHRhID0gbnVsbCwgdHpfaG91ciwgdHpfbWludXRlLCBkYXRlOwogICAgICBtYXRjaDIgPSBZQU1MX0RBVEVfUkVHRVhQLmV4ZWMoZGF0YSk7CiAgICAgIGlmIChtYXRjaDIgPT09IG51bGwpIG1hdGNoMiA9IFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpOwogICAgICBpZiAobWF0Y2gyID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoIkRhdGUgcmVzb2x2ZSBlcnJvciIpOwogICAgICB5ZWFyID0gK21hdGNoMlsxXTsKICAgICAgbW9udGggPSArbWF0Y2gyWzJdIC0gMTsKICAgICAgZGF5ID0gK21hdGNoMlszXTsKICAgICAgaWYgKCFtYXRjaDJbNF0pIHsKICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSkpOwogICAgICB9CiAgICAgIGhvdXIgPSArbWF0Y2gyWzRdOwogICAgICBtaW51dGUgPSArbWF0Y2gyWzVdOwogICAgICBzZWNvbmQgPSArbWF0Y2gyWzZdOwogICAgICBpZiAobWF0Y2gyWzddKSB7CiAgICAgICAgZnJhY3Rpb24gPSBtYXRjaDJbN10uc2xpY2UoMCwgMyk7CiAgICAgICAgd2hpbGUgKGZyYWN0aW9uLmxlbmd0aCA8IDMpIHsKICAgICAgICAgIGZyYWN0aW9uICs9ICIwIjsKICAgICAgICB9CiAgICAgICAgZnJhY3Rpb24gPSArZnJhY3Rpb247CiAgICAgIH0KICAgICAgaWYgKG1hdGNoMls5XSkgewogICAgICAgIHR6X2hvdXIgPSArbWF0Y2gyWzEwXTsKICAgICAgICB0el9taW51dGUgPSArKG1hdGNoMlsxMV0gfHwgMCk7CiAgICAgICAgZGVsdGEgPSAodHpfaG91ciAqIDYwICsgdHpfbWludXRlKSAqIDZlNDsKICAgICAgICBpZiAobWF0Y2gyWzldID09PSAiLSIpIGRlbHRhID0gLWRlbHRhOwogICAgICB9CiAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24pKTsKICAgICAgaWYgKGRlbHRhKSBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgLSBkZWx0YSk7CiAgICAgIHJldHVybiBkYXRlOwogICAgfQogICAgZnVuY3Rpb24gcmVwcmVzZW50WWFtbFRpbWVzdGFtcChvYmplY3QpIHsKICAgICAgcmV0dXJuIG9iamVjdC50b0lTT1N0cmluZygpOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wIiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxUaW1lc3RhbXAsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFRpbWVzdGFtcCwKICAgICAgaW5zdGFuY2VPZjogRGF0ZSwKICAgICAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sVGltZXN0YW1wCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbWVyZ2UuanMKdmFyIHJlcXVpcmVfbWVyZ2UgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbWVyZ2UuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIGZ1bmN0aW9uIHJlc29sdmVZYW1sTWVyZ2UoZGF0YSkgewogICAgICByZXR1cm4gZGF0YSA9PT0gIjw8IiB8fCBkYXRhID09PSBudWxsOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlWWFtbE1lcmdlCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYmluYXJ5LmpzCnZhciByZXF1aXJlX2JpbmFyeSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9iaW5hcnkuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIE5vZGVCdWZmZXI7CiAgICB0cnkgewogICAgICBfcmVxdWlyZSA9IF9fcmVxdWlyZTsKICAgICAgTm9kZUJ1ZmZlciA9IF9yZXF1aXJlKCJidWZmZXIiKS5CdWZmZXI7CiAgICB9IGNhdGNoIChfXykgewogICAgfQogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBCQVNFNjRfTUFQID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XG5cciI7CiAgICBmdW5jdGlvbiByZXNvbHZlWWFtbEJpbmFyeShkYXRhKSB7CiAgICAgIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIHZhciBjb2RlNCwgaWR4LCBiaXRsZW4gPSAwLCBtYXgzID0gZGF0YS5sZW5ndGgsIG1hcDcgPSBCQVNFNjRfTUFQOwogICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDM7IGlkeCsrKSB7CiAgICAgICAgY29kZTQgPSBtYXA3LmluZGV4T2YoZGF0YS5jaGFyQXQoaWR4KSk7CiAgICAgICAgaWYgKGNvZGU0ID4gNjQpIGNvbnRpbnVlOwogICAgICAgIGlmIChjb2RlNCA8IDApIHJldHVybiBmYWxzZTsKICAgICAgICBiaXRsZW4gKz0gNjsKICAgICAgfQogICAgICByZXR1cm4gYml0bGVuICUgOCA9PT0gMDsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxCaW5hcnkoZGF0YSkgewogICAgICB2YXIgaWR4LCB0YWlsYml0cywgaW5wdXQgPSBkYXRhLnJlcGxhY2UoL1tcclxuPV0vZywgIiIpLCBtYXgzID0gaW5wdXQubGVuZ3RoLCBtYXA3ID0gQkFTRTY0X01BUCwgYml0cyA9IDAsIHJlc3VsdCA9IFtdOwogICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDM7IGlkeCsrKSB7CiAgICAgICAgaWYgKGlkeCAlIDQgPT09IDAgJiYgaWR4KSB7CiAgICAgICAgICByZXN1bHQucHVzaChiaXRzID4+IDE2ICYgMjU1KTsKICAgICAgICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gOCAmIDI1NSk7CiAgICAgICAgICByZXN1bHQucHVzaChiaXRzICYgMjU1KTsKICAgICAgICB9CiAgICAgICAgYml0cyA9IGJpdHMgPDwgNiB8IG1hcDcuaW5kZXhPZihpbnB1dC5jaGFyQXQoaWR4KSk7CiAgICAgIH0KICAgICAgdGFpbGJpdHMgPSBtYXgzICUgNCAqIDY7CiAgICAgIGlmICh0YWlsYml0cyA9PT0gMCkgewogICAgICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gMTYgJiAyNTUpOwogICAgICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gOCAmIDI1NSk7CiAgICAgICAgcmVzdWx0LnB1c2goYml0cyAmIDI1NSk7CiAgICAgIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDE4KSB7CiAgICAgICAgcmVzdWx0LnB1c2goYml0cyA+PiAxMCAmIDI1NSk7CiAgICAgICAgcmVzdWx0LnB1c2goYml0cyA+PiAyICYgMjU1KTsKICAgICAgfSBlbHNlIGlmICh0YWlsYml0cyA9PT0gMTIpIHsKICAgICAgICByZXN1bHQucHVzaChiaXRzID4+IDQgJiAyNTUpOwogICAgICB9CiAgICAgIGlmIChOb2RlQnVmZmVyKSB7CiAgICAgICAgcmV0dXJuIE5vZGVCdWZmZXIuZnJvbSA/IE5vZGVCdWZmZXIuZnJvbShyZXN1bHQpIDogbmV3IE5vZGVCdWZmZXIocmVzdWx0KTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gcmVwcmVzZW50WWFtbEJpbmFyeShvYmplY3QpIHsKICAgICAgdmFyIHJlc3VsdCA9ICIiLCBiaXRzID0gMCwgaWR4LCB0YWlsLCBtYXgzID0gb2JqZWN0Lmxlbmd0aCwgbWFwNyA9IEJBU0U2NF9NQVA7CiAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4MzsgaWR4KyspIHsKICAgICAgICBpZiAoaWR4ICUgMyA9PT0gMCAmJiBpZHgpIHsKICAgICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPj4gMTggJiA2M107CiAgICAgICAgICByZXN1bHQgKz0gbWFwN1tiaXRzID4+IDEyICYgNjNdOwogICAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiA2ICYgNjNdOwogICAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyAmIDYzXTsKICAgICAgICB9CiAgICAgICAgYml0cyA9IChiaXRzIDw8IDgpICsgb2JqZWN0W2lkeF07CiAgICAgIH0KICAgICAgdGFpbCA9IG1heDMgJSAzOwogICAgICBpZiAodGFpbCA9PT0gMCkgewogICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPj4gMTggJiA2M107CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiAxMiAmIDYzXTsKICAgICAgICByZXN1bHQgKz0gbWFwN1tiaXRzID4+IDYgJiA2M107CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyAmIDYzXTsKICAgICAgfSBlbHNlIGlmICh0YWlsID09PSAyKSB7CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiAxMCAmIDYzXTsKICAgICAgICByZXN1bHQgKz0gbWFwN1tiaXRzID4+IDQgJiA2M107CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA8PCAyICYgNjNdOwogICAgICAgIHJlc3VsdCArPSBtYXA3WzY0XTsKICAgICAgfSBlbHNlIGlmICh0YWlsID09PSAxKSB7CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiAyICYgNjNdOwogICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPDwgNCAmIDYzXTsKICAgICAgICByZXN1bHQgKz0gbWFwN1s2NF07CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbNjRdOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBpc0JpbmFyeShvYmplY3QpIHsKICAgICAgcmV0dXJuIE5vZGVCdWZmZXIgJiYgTm9kZUJ1ZmZlci5pc0J1ZmZlcihvYmplY3QpOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5IiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxCaW5hcnksCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEJpbmFyeSwKICAgICAgcHJlZGljYXRlOiBpc0JpbmFyeSwKICAgICAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sQmluYXJ5CiAgICB9KTsKICAgIHZhciBfcmVxdWlyZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvb21hcC5qcwp2YXIgcmVxdWlyZV9vbWFwID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL29tYXAuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwogICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CiAgICBmdW5jdGlvbiByZXNvbHZlWWFtbE9tYXAoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAgIHZhciBvYmplY3RLZXlzID0gW10sIGluZGV4MiwgbGVuZ3RoLCBwYWlyLCBwYWlyS2V5LCBwYWlySGFzS2V5LCBvYmplY3QgPSBkYXRhOwogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBwYWlyID0gb2JqZWN0W2luZGV4Ml07CiAgICAgICAgcGFpckhhc0tleSA9IGZhbHNlOwogICAgICAgIGlmIChfdG9TdHJpbmcuY2FsbChwYWlyKSAhPT0gIltvYmplY3QgT2JqZWN0XSIpIHJldHVybiBmYWxzZTsKICAgICAgICBmb3IgKHBhaXJLZXkgaW4gcGFpcikgewogICAgICAgICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhaXIsIHBhaXJLZXkpKSB7CiAgICAgICAgICAgIGlmICghcGFpckhhc0tleSkgcGFpckhhc0tleSA9IHRydWU7CiAgICAgICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIXBhaXJIYXNLZXkpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAob2JqZWN0S2V5cy5pbmRleE9mKHBhaXJLZXkpID09PSAtMSkgb2JqZWN0S2V5cy5wdXNoKHBhaXJLZXkpOwogICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbE9tYXAoZGF0YSkgewogICAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBbXTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOm9tYXAiLCB7CiAgICAgIGtpbmQ6ICJzZXF1ZW5jZSIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sT21hcCwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sT21hcAogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3BhaXJzLmpzCnZhciByZXF1aXJlX3BhaXJzID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3BhaXJzLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlID0gcmVxdWlyZV90eXBlKCk7CiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKICAgIGZ1bmN0aW9uIHJlc29sdmVZYW1sUGFpcnMoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAgIHZhciBpbmRleDIsIGxlbmd0aCwgcGFpciwga2V5czIsIHJlc3VsdCwgb2JqZWN0ID0gZGF0YTsKICAgICAgcmVzdWx0ID0gbmV3IEFycmF5KG9iamVjdC5sZW5ndGgpOwogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBwYWlyID0gb2JqZWN0W2luZGV4Ml07CiAgICAgICAgaWYgKF90b1N0cmluZy5jYWxsKHBhaXIpICE9PSAiW29iamVjdCBPYmplY3RdIikgcmV0dXJuIGZhbHNlOwogICAgICAgIGtleXMyID0gT2JqZWN0LmtleXMocGFpcik7CiAgICAgICAgaWYgKGtleXMyLmxlbmd0aCAhPT0gMSkgcmV0dXJuIGZhbHNlOwogICAgICAgIHJlc3VsdFtpbmRleDJdID0gW2tleXMyWzBdLCBwYWlyW2tleXMyWzBdXV07CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sUGFpcnMoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIFtdOwogICAgICB2YXIgaW5kZXgyLCBsZW5ndGgsIHBhaXIsIGtleXMyLCByZXN1bHQsIG9iamVjdCA9IGRhdGE7CiAgICAgIHJlc3VsdCA9IG5ldyBBcnJheShvYmplY3QubGVuZ3RoKTsKICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgcGFpciA9IG9iamVjdFtpbmRleDJdOwogICAgICAgIGtleXMyID0gT2JqZWN0LmtleXMocGFpcik7CiAgICAgICAgcmVzdWx0W2luZGV4Ml0gPSBba2V5czJbMF0sIHBhaXJba2V5czJbMF1dXTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6cGFpcnMiLCB7CiAgICAgIGtpbmQ6ICJzZXF1ZW5jZSIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sUGFpcnMsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFBhaXJzCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc2V0LmpzCnZhciByZXF1aXJlX3NldCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXQuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxTZXQoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAgIHZhciBrZXkyLCBvYmplY3QgPSBkYXRhOwogICAgICBmb3IgKGtleTIgaW4gb2JqZWN0KSB7CiAgICAgICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5MikpIHsKICAgICAgICAgIGlmIChvYmplY3Rba2V5Ml0gIT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sU2V0KGRhdGEpIHsKICAgICAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDoge307CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXQiLCB7CiAgICAgIGtpbmQ6ICJtYXBwaW5nIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxTZXQsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFNldAogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlLmpzCnZhciByZXF1aXJlX2RlZmF1bHRfc2FmZSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfc2FmZS5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgU2NoZW1hMiA9IHJlcXVpcmVfc2NoZW1hKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEyKHsKICAgICAgaW5jbHVkZTogWwogICAgICAgIHJlcXVpcmVfY29yZSgpCiAgICAgIF0sCiAgICAgIGltcGxpY2l0OiBbCiAgICAgICAgcmVxdWlyZV90aW1lc3RhbXAoKSwKICAgICAgICByZXF1aXJlX21lcmdlKCkKICAgICAgXSwKICAgICAgZXhwbGljaXQ6IFsKICAgICAgICByZXF1aXJlX2JpbmFyeSgpLAogICAgICAgIHJlcXVpcmVfb21hcCgpLAogICAgICAgIHJlcXVpcmVfcGFpcnMoKSwKICAgICAgICByZXF1aXJlX3NldCgpCiAgICAgIF0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy91bmRlZmluZWQuanMKdmFyIHJlcXVpcmVfdW5kZWZpbmVkID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2pzL3VuZGVmaW5lZC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVHlwZSA9IHJlcXVpcmVfdHlwZSgpOwogICAgZnVuY3Rpb24gcmVzb2x2ZUphdmFzY3JpcHRVbmRlZmluZWQoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0SmF2YXNjcmlwdFVuZGVmaW5lZCgpIHsKICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIH0KICAgIGZ1bmN0aW9uIHJlcHJlc2VudEphdmFzY3JpcHRVbmRlZmluZWQoKSB7CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG9iamVjdCkgewogICAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gInVuZGVmaW5lZCI7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy91bmRlZmluZWQiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlSmF2YXNjcmlwdFVuZGVmaW5lZCwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RKYXZhc2NyaXB0VW5kZWZpbmVkLAogICAgICBwcmVkaWNhdGU6IGlzVW5kZWZpbmVkLAogICAgICByZXByZXNlbnQ6IHJlcHJlc2VudEphdmFzY3JpcHRVbmRlZmluZWQKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9yZWdleHAuanMKdmFyIHJlcXVpcmVfcmVnZXhwID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2pzL3JlZ2V4cC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVHlwZSA9IHJlcXVpcmVfdHlwZSgpOwogICAgZnVuY3Rpb24gcmVzb2x2ZUphdmFzY3JpcHRSZWdFeHAoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTsKICAgICAgdmFyIHJlZ2V4cCA9IGRhdGEsIHRhaWwgPSAvXC8oW2dpbV0qKSQvLmV4ZWMoZGF0YSksIG1vZGlmaWVycyA9ICIiOwogICAgICBpZiAocmVnZXhwWzBdID09PSAiLyIpIHsKICAgICAgICBpZiAodGFpbCkgbW9kaWZpZXJzID0gdGFpbFsxXTsKICAgICAgICBpZiAobW9kaWZpZXJzLmxlbmd0aCA+IDMpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAocmVnZXhwW3JlZ2V4cC5sZW5ndGggLSBtb2RpZmllcnMubGVuZ3RoIC0gMV0gIT09ICIvIikgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0SmF2YXNjcmlwdFJlZ0V4cChkYXRhKSB7CiAgICAgIHZhciByZWdleHAgPSBkYXRhLCB0YWlsID0gL1wvKFtnaW1dKikkLy5leGVjKGRhdGEpLCBtb2RpZmllcnMgPSAiIjsKICAgICAgaWYgKHJlZ2V4cFswXSA9PT0gIi8iKSB7CiAgICAgICAgaWYgKHRhaWwpIG1vZGlmaWVycyA9IHRhaWxbMV07CiAgICAgICAgcmVnZXhwID0gcmVnZXhwLnNsaWNlKDEsIHJlZ2V4cC5sZW5ndGggLSBtb2RpZmllcnMubGVuZ3RoIC0gMSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBSZWdFeHAocmVnZXhwLCBtb2RpZmllcnMpOwogICAgfQogICAgZnVuY3Rpb24gcmVwcmVzZW50SmF2YXNjcmlwdFJlZ0V4cChvYmplY3QpIHsKICAgICAgdmFyIHJlc3VsdCA9ICIvIiArIG9iamVjdC5zb3VyY2UgKyAiLyI7CiAgICAgIGlmIChvYmplY3QuZ2xvYmFsKSByZXN1bHQgKz0gImciOwogICAgICBpZiAob2JqZWN0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICJtIjsKICAgICAgaWYgKG9iamVjdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gImkiOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gaXNSZWdFeHAob2JqZWN0KSB7CiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gIltvYmplY3QgUmVnRXhwXSI7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy9yZWdleHAiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlSmF2YXNjcmlwdFJlZ0V4cCwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RKYXZhc2NyaXB0UmVnRXhwLAogICAgICBwcmVkaWNhdGU6IGlzUmVnRXhwLAogICAgICByZXByZXNlbnQ6IHJlcHJlc2VudEphdmFzY3JpcHRSZWdFeHAKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9mdW5jdGlvbi5qcwp2YXIgcmVxdWlyZV9mdW5jdGlvbiA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9mdW5jdGlvbi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgZXNwcmltYTsKICAgIHRyeSB7CiAgICAgIF9yZXF1aXJlID0gX19yZXF1aXJlOwogICAgICBlc3ByaW1hID0gX3JlcXVpcmUoImVzcHJpbWEiKTsKICAgIH0gY2F0Y2ggKF80KSB7CiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIikgZXNwcmltYSA9IHdpbmRvdy5lc3ByaW1hOwogICAgfQogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIGZ1bmN0aW9uIHJlc29sdmVKYXZhc2NyaXB0RnVuY3Rpb24oZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICB0cnkgewogICAgICAgIHZhciBzb3VyY2UgPSAiKCIgKyBkYXRhICsgIikiLCBhc3QgPSBlc3ByaW1hLnBhcnNlKHNvdXJjZSwgeyByYW5nZTogdHJ1ZSB9KTsKICAgICAgICBpZiAoYXN0LnR5cGUgIT09ICJQcm9ncmFtIiB8fCBhc3QuYm9keS5sZW5ndGggIT09IDEgfHwgYXN0LmJvZHlbMF0udHlwZSAhPT0gIkV4cHJlc3Npb25TdGF0ZW1lbnQiIHx8IGFzdC5ib2R5WzBdLmV4cHJlc3Npb24udHlwZSAhPT0gIkFycm93RnVuY3Rpb25FeHByZXNzaW9uIiAmJiBhc3QuYm9keVswXS5leHByZXNzaW9uLnR5cGUgIT09ICJGdW5jdGlvbkV4cHJlc3Npb24iKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdEphdmFzY3JpcHRGdW5jdGlvbihkYXRhKSB7CiAgICAgIHZhciBzb3VyY2UgPSAiKCIgKyBkYXRhICsgIikiLCBhc3QgPSBlc3ByaW1hLnBhcnNlKHNvdXJjZSwgeyByYW5nZTogdHJ1ZSB9KSwgcGFyYW1zMiA9IFtdLCBib2R5MzsKICAgICAgaWYgKGFzdC50eXBlICE9PSAiUHJvZ3JhbSIgfHwgYXN0LmJvZHkubGVuZ3RoICE9PSAxIHx8IGFzdC5ib2R5WzBdLnR5cGUgIT09ICJFeHByZXNzaW9uU3RhdGVtZW50IiB8fCBhc3QuYm9keVswXS5leHByZXNzaW9uLnR5cGUgIT09ICJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiIgJiYgYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlICE9PSAiRnVuY3Rpb25FeHByZXNzaW9uIikgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHJlc29sdmUgZnVuY3Rpb24iKTsKICAgICAgfQogICAgICBhc3QuYm9keVswXS5leHByZXNzaW9uLnBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtKSB7CiAgICAgICAgcGFyYW1zMi5wdXNoKHBhcmFtLm5hbWUpOwogICAgICB9KTsKICAgICAgYm9keTMgPSBhc3QuYm9keVswXS5leHByZXNzaW9uLmJvZHkucmFuZ2U7CiAgICAgIGlmIChhc3QuYm9keVswXS5leHByZXNzaW9uLmJvZHkudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50IikgewogICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24ocGFyYW1zMiwgc291cmNlLnNsaWNlKGJvZHkzWzBdICsgMSwgYm9keTNbMV0gLSAxKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihwYXJhbXMyLCAicmV0dXJuICIgKyBzb3VyY2Uuc2xpY2UoYm9keTNbMF0sIGJvZHkzWzFdKSk7CiAgICB9CiAgICBmdW5jdGlvbiByZXByZXNlbnRKYXZhc2NyaXB0RnVuY3Rpb24ob2JqZWN0KSB7CiAgICAgIHJldHVybiBvYmplY3QudG9TdHJpbmcoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24yKG9iamVjdCkgewogICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT09ICJbb2JqZWN0IEZ1bmN0aW9uXSI7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy9mdW5jdGlvbiIsIHsKICAgICAga2luZDogInNjYWxhciIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVKYXZhc2NyaXB0RnVuY3Rpb24sCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0SmF2YXNjcmlwdEZ1bmN0aW9uLAogICAgICBwcmVkaWNhdGU6IGlzRnVuY3Rpb24yLAogICAgICByZXByZXNlbnQ6IHJlcHJlc2VudEphdmFzY3JpcHRGdW5jdGlvbgogICAgfSk7CiAgICB2YXIgX3JlcXVpcmU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9mdWxsLmpzCnZhciByZXF1aXJlX2RlZmF1bHRfZnVsbCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfZnVsbC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgU2NoZW1hMiA9IHJlcXVpcmVfc2NoZW1hKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IFNjaGVtYTIuREVGQVVMVCA9IG5ldyBTY2hlbWEyKHsKICAgICAgaW5jbHVkZTogWwogICAgICAgIHJlcXVpcmVfZGVmYXVsdF9zYWZlKCkKICAgICAgXSwKICAgICAgZXhwbGljaXQ6IFsKICAgICAgICByZXF1aXJlX3VuZGVmaW5lZCgpLAogICAgICAgIHJlcXVpcmVfcmVnZXhwKCksCiAgICAgICAgcmVxdWlyZV9mdW5jdGlvbigpCiAgICAgIF0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvbG9hZGVyLmpzCnZhciByZXF1aXJlX2xvYWRlciA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvbG9hZGVyLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBjb21tb24gPSByZXF1aXJlX2NvbW1vbigpOwogICAgdmFyIFlBTUxFeGNlcHRpb24gPSByZXF1aXJlX2V4Y2VwdGlvbigpOwogICAgdmFyIE1hcmsgPSByZXF1aXJlX21hcmsoKTsKICAgIHZhciBERUZBVUxUX1NBRkVfU0NIRU1BID0gcmVxdWlyZV9kZWZhdWx0X3NhZmUoKTsKICAgIHZhciBERUZBVUxUX0ZVTExfU0NIRU1BID0gcmVxdWlyZV9kZWZhdWx0X2Z1bGwoKTsKICAgIHZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwogICAgdmFyIENPTlRFWFRfRkxPV19JTiA9IDE7CiAgICB2YXIgQ09OVEVYVF9GTE9XX09VVCA9IDI7CiAgICB2YXIgQ09OVEVYVF9CTE9DS19JTiA9IDM7CiAgICB2YXIgQ09OVEVYVF9CTE9DS19PVVQgPSA0OwogICAgdmFyIENIT01QSU5HX0NMSVAgPSAxOwogICAgdmFyIENIT01QSU5HX1NUUklQID0gMjsKICAgIHZhciBDSE9NUElOR19LRUVQID0gMzsKICAgIHZhciBQQVRURVJOX05PTl9QUklOVEFCTEUgPSAvW1x4MDAtXHgwOFx4MEJceDBDXHgwRS1ceDFGXHg3Ri1ceDg0XHg4Ni1ceDlGXHVGRkZFXHVGRkZGXXxbXHVEODAwLVx1REJGRl0oPyFbXHVEQzAwLVx1REZGRl0pfCg/OlteXHVEODAwLVx1REJGRl18XilbXHVEQzAwLVx1REZGRl0vOwogICAgdmFyIFBBVFRFUk5fTk9OX0FTQ0lJX0xJTkVfQlJFQUtTID0gL1tceDg1XHUyMDI4XHUyMDI5XS87CiAgICB2YXIgUEFUVEVSTl9GTE9XX0lORElDQVRPUlMgPSAvWyxcW1xdXHtcfV0vOwogICAgdmFyIFBBVFRFUk5fVEFHX0hBTkRMRSA9IC9eKD86IXwhIXwhW2EtelwtXSshKSQvaTsKICAgIHZhciBQQVRURVJOX1RBR19VUkkgPSAvXig/OiF8W14sXFtcXVx7XH1dKSg/OiVbMC05YS1mXXsyfXxbMC05YS16XC0jO1wvXD86QCY9XCtcJCxfXC4hflwqJ1woXClcW1xdXSkqJC9pOwogICAgZnVuY3Rpb24gX2NsYXNzKG9iaikgewogICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7CiAgICB9CiAgICBmdW5jdGlvbiBpc19FT0woYzExKSB7CiAgICAgIHJldHVybiBjMTEgPT09IDEwIHx8IGMxMSA9PT0gMTM7CiAgICB9CiAgICBmdW5jdGlvbiBpc19XSElURV9TUEFDRShjMTEpIHsKICAgICAgcmV0dXJuIGMxMSA9PT0gOSB8fCBjMTEgPT09IDMyOwogICAgfQogICAgZnVuY3Rpb24gaXNfV1NfT1JfRU9MKGMxMSkgewogICAgICByZXR1cm4gYzExID09PSA5IHx8IGMxMSA9PT0gMzIgfHwgYzExID09PSAxMCB8fCBjMTEgPT09IDEzOwogICAgfQogICAgZnVuY3Rpb24gaXNfRkxPV19JTkRJQ0FUT1IoYzExKSB7CiAgICAgIHJldHVybiBjMTEgPT09IDQ0IHx8IGMxMSA9PT0gOTEgfHwgYzExID09PSA5MyB8fCBjMTEgPT09IDEyMyB8fCBjMTEgPT09IDEyNTsKICAgIH0KICAgIGZ1bmN0aW9uIGZyb21IZXhDb2RlKGMxMSkgewogICAgICB2YXIgbGM7CiAgICAgIGlmICg0OCA8PSBjMTEgJiYgYzExIDw9IDU3KSB7CiAgICAgICAgcmV0dXJuIGMxMSAtIDQ4OwogICAgICB9CiAgICAgIGxjID0gYzExIHwgMzI7CiAgICAgIGlmICg5NyA8PSBsYyAmJiBsYyA8PSAxMDIpIHsKICAgICAgICByZXR1cm4gbGMgLSA5NyArIDEwOwogICAgICB9CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGZ1bmN0aW9uIGVzY2FwZWRIZXhMZW4oYzExKSB7CiAgICAgIGlmIChjMTEgPT09IDEyMCkgewogICAgICAgIHJldHVybiAyOwogICAgICB9CiAgICAgIGlmIChjMTEgPT09IDExNykgewogICAgICAgIHJldHVybiA0OwogICAgICB9CiAgICAgIGlmIChjMTEgPT09IDg1KSB7CiAgICAgICAgcmV0dXJuIDg7CiAgICAgIH0KICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBmdW5jdGlvbiBmcm9tRGVjaW1hbENvZGUoYzExKSB7CiAgICAgIGlmICg0OCA8PSBjMTEgJiYgYzExIDw9IDU3KSB7CiAgICAgICAgcmV0dXJuIGMxMSAtIDQ4OwogICAgICB9CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGZ1bmN0aW9uIHNpbXBsZUVzY2FwZVNlcXVlbmNlKGMxMSkgewogICAgICByZXR1cm4gYzExID09PSA0OCA/ICJcMCIgOiBjMTEgPT09IDk3ID8gIlx4MDciIDogYzExID09PSA5OCA/ICJcYiIgOiBjMTEgPT09IDExNiA/ICIJIiA6IGMxMSA9PT0gOSA/ICIJIiA6IGMxMSA9PT0gMTEwID8gIlxuIiA6IGMxMSA9PT0gMTE4ID8gIlx2IiA6IGMxMSA9PT0gMTAyID8gIlxmIiA6IGMxMSA9PT0gMTE0ID8gIlxyIiA6IGMxMSA9PT0gMTAxID8gIlx4MUIiIDogYzExID09PSAzMiA/ICIgIiA6IGMxMSA9PT0gMzQgPyAnIicgOiBjMTEgPT09IDQ3ID8gIi8iIDogYzExID09PSA5MiA/ICJcXCIgOiBjMTEgPT09IDc4ID8gIlx4ODUiIDogYzExID09PSA5NSA/ICJceEEwIiA6IGMxMSA9PT0gNzYgPyAiXHUyMDI4IiA6IGMxMSA9PT0gODAgPyAiXHUyMDI5IiA6ICIiOwogICAgfQogICAgZnVuY3Rpb24gY2hhckZyb21Db2RlcG9pbnQoYzExKSB7CiAgICAgIGlmIChjMTEgPD0gNjU1MzUpIHsKICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjMTEpOwogICAgICB9CiAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKAogICAgICAgIChjMTEgLSA2NTUzNiA+PiAxMCkgKyA1NTI5NiwKICAgICAgICAoYzExIC0gNjU1MzYgJiAxMDIzKSArIDU2MzIwCiAgICAgICk7CiAgICB9CiAgICBmdW5jdGlvbiBzZXRQcm9wZXJ0eShvYmplY3QsIGtleTIsIHZhbHVlMikgewogICAgICBpZiAoa2V5MiA9PT0gIl9fcHJvdG9fXyIpIHsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXkyLCB7CiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICB2YWx1ZTogdmFsdWUyCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb2JqZWN0W2tleTJdID0gdmFsdWUyOwogICAgICB9CiAgICB9CiAgICB2YXIgc2ltcGxlRXNjYXBlQ2hlY2sgPSBuZXcgQXJyYXkoMjU2KTsKICAgIHZhciBzaW1wbGVFc2NhcGVNYXAgPSBuZXcgQXJyYXkoMjU2KTsKICAgIGZvciAoaTExID0gMDsgaTExIDwgMjU2OyBpMTErKykgewogICAgICBzaW1wbGVFc2NhcGVDaGVja1tpMTFdID0gc2ltcGxlRXNjYXBlU2VxdWVuY2UoaTExKSA/IDEgOiAwOwogICAgICBzaW1wbGVFc2NhcGVNYXBbaTExXSA9IHNpbXBsZUVzY2FwZVNlcXVlbmNlKGkxMSk7CiAgICB9CiAgICBmdW5jdGlvbiBTdGF0ZShpbnB1dCwgb3B0aW9ucykgewogICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7CiAgICAgIHRoaXMuZmlsZW5hbWUgPSBvcHRpb25zWyJmaWxlbmFtZSJdIHx8IG51bGw7CiAgICAgIHRoaXMuc2NoZW1hID0gb3B0aW9uc1sic2NoZW1hIl0gfHwgREVGQVVMVF9GVUxMX1NDSEVNQTsKICAgICAgdGhpcy5vbldhcm5pbmcgPSBvcHRpb25zWyJvbldhcm5pbmciXSB8fCBudWxsOwogICAgICB0aGlzLmxlZ2FjeSA9IG9wdGlvbnNbImxlZ2FjeSJdIHx8IGZhbHNlOwogICAgICB0aGlzLmpzb24gPSBvcHRpb25zWyJqc29uIl0gfHwgZmFsc2U7CiAgICAgIHRoaXMubGlzdGVuZXIgPSBvcHRpb25zWyJsaXN0ZW5lciJdIHx8IG51bGw7CiAgICAgIHRoaXMuaW1wbGljaXRUeXBlcyA9IHRoaXMuc2NoZW1hLmNvbXBpbGVkSW1wbGljaXQ7CiAgICAgIHRoaXMudHlwZU1hcCA9IHRoaXMuc2NoZW1hLmNvbXBpbGVkVHlwZU1hcDsKICAgICAgdGhpcy5sZW5ndGggPSBpbnB1dC5sZW5ndGg7CiAgICAgIHRoaXMucG9zaXRpb24gPSAwOwogICAgICB0aGlzLmxpbmUgPSAwOwogICAgICB0aGlzLmxpbmVTdGFydCA9IDA7CiAgICAgIHRoaXMubGluZUluZGVudCA9IDA7CiAgICAgIHRoaXMuZG9jdW1lbnRzID0gW107CiAgICB9CiAgICBmdW5jdGlvbiBnZW5lcmF0ZUVycm9yKHN0YXRlMTQsIG1lc3NhZ2UyKSB7CiAgICAgIHJldHVybiBuZXcgWUFNTEV4Y2VwdGlvbigKICAgICAgICBtZXNzYWdlMiwKICAgICAgICBuZXcgTWFyayhzdGF0ZTE0LmZpbGVuYW1lLCBzdGF0ZTE0LmlucHV0LCBzdGF0ZTE0LnBvc2l0aW9uLCBzdGF0ZTE0LmxpbmUsIHN0YXRlMTQucG9zaXRpb24gLSBzdGF0ZTE0LmxpbmVTdGFydCkKICAgICAgKTsKICAgIH0KICAgIGZ1bmN0aW9uIHRocm93RXJyb3IyKHN0YXRlMTQsIG1lc3NhZ2UyKSB7CiAgICAgIHRocm93IGdlbmVyYXRlRXJyb3Ioc3RhdGUxNCwgbWVzc2FnZTIpOwogICAgfQogICAgZnVuY3Rpb24gdGhyb3dXYXJuaW5nKHN0YXRlMTQsIG1lc3NhZ2UyKSB7CiAgICAgIGlmIChzdGF0ZTE0Lm9uV2FybmluZykgewogICAgICAgIHN0YXRlMTQub25XYXJuaW5nLmNhbGwobnVsbCwgZ2VuZXJhdGVFcnJvcihzdGF0ZTE0LCBtZXNzYWdlMikpOwogICAgICB9CiAgICB9CiAgICB2YXIgZGlyZWN0aXZlSGFuZGxlcnMgPSB7CiAgICAgIFlBTUw6IGZ1bmN0aW9uIGhhbmRsZVlhbWxEaXJlY3RpdmUoc3RhdGUxNCwgbmFtZSwgYXJncykgewogICAgICAgIHZhciBtYXRjaDIsIG1ham9yLCBtaW5vcjsKICAgICAgICBpZiAoc3RhdGUxNC52ZXJzaW9uICE9PSBudWxsKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAiZHVwbGljYXRpb24gb2YgJVlBTUwgZGlyZWN0aXZlIik7CiAgICAgICAgfQogICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMSkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgIllBTUwgZGlyZWN0aXZlIGFjY2VwdHMgZXhhY3RseSBvbmUgYXJndW1lbnQiKTsKICAgICAgICB9CiAgICAgICAgbWF0Y2gyID0gL14oWzAtOV0rKVwuKFswLTldKykkLy5leGVjKGFyZ3NbMF0pOwogICAgICAgIGlmIChtYXRjaDIgPT09IG51bGwpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJpbGwtZm9ybWVkIGFyZ3VtZW50IG9mIHRoZSBZQU1MIGRpcmVjdGl2ZSIpOwogICAgICAgIH0KICAgICAgICBtYWpvciA9IHBhcnNlSW50KG1hdGNoMlsxXSwgMTApOwogICAgICAgIG1pbm9yID0gcGFyc2VJbnQobWF0Y2gyWzJdLCAxMCk7CiAgICAgICAgaWYgKG1ham9yICE9PSAxKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAidW5hY2NlcHRhYmxlIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKTsKICAgICAgICB9CiAgICAgICAgc3RhdGUxNC52ZXJzaW9uID0gYXJnc1swXTsKICAgICAgICBzdGF0ZTE0LmNoZWNrTGluZUJyZWFrcyA9IG1pbm9yIDwgMjsKICAgICAgICBpZiAobWlub3IgIT09IDEgJiYgbWlub3IgIT09IDIpIHsKICAgICAgICAgIHRocm93V2FybmluZyhzdGF0ZTE0LCAidW5zdXBwb3J0ZWQgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgVEFHOiBmdW5jdGlvbiBoYW5kbGVUYWdEaXJlY3RpdmUoc3RhdGUxNCwgbmFtZSwgYXJncykgewogICAgICAgIHZhciBoYW5kbGUzLCBwcmVmaXg0OwogICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMikgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgIlRBRyBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IHR3byBhcmd1bWVudHMiKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlMyA9IGFyZ3NbMF07CiAgICAgICAgcHJlZml4NCA9IGFyZ3NbMV07CiAgICAgICAgaWYgKCFQQVRURVJOX1RBR19IQU5ETEUudGVzdChoYW5kbGUzKSkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImlsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIik7CiAgICAgICAgfQogICAgICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZTE0LnRhZ01hcCwgaGFuZGxlMykpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICd0aGVyZSBpcyBhIHByZXZpb3VzbHkgZGVjbGFyZWQgc3VmZml4IGZvciAiJyArIGhhbmRsZTMgKyAnIiB0YWcgaGFuZGxlJyk7CiAgICAgICAgfQogICAgICAgIGlmICghUEFUVEVSTl9UQUdfVVJJLnRlc3QocHJlZml4NCkpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJpbGwtZm9ybWVkIHRhZyBwcmVmaXggKHNlY29uZCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUiKTsKICAgICAgICB9CiAgICAgICAgc3RhdGUxNC50YWdNYXBbaGFuZGxlM10gPSBwcmVmaXg0OwogICAgICB9CiAgICB9OwogICAgZnVuY3Rpb24gY2FwdHVyZVNlZ21lbnQoc3RhdGUxNCwgc3RhcnQsIGVuZDMsIGNoZWNrSnNvbikgewogICAgICB2YXIgX3Bvc2l0aW9uLCBfbGVuZ3RoLCBfY2hhcmFjdGVyLCBfcmVzdWx0OwogICAgICBpZiAoc3RhcnQgPCBlbmQzKSB7CiAgICAgICAgX3Jlc3VsdCA9IHN0YXRlMTQuaW5wdXQuc2xpY2Uoc3RhcnQsIGVuZDMpOwogICAgICAgIGlmIChjaGVja0pzb24pIHsKICAgICAgICAgIGZvciAoX3Bvc2l0aW9uID0gMCwgX2xlbmd0aCA9IF9yZXN1bHQubGVuZ3RoOyBfcG9zaXRpb24gPCBfbGVuZ3RoOyBfcG9zaXRpb24gKz0gMSkgewogICAgICAgICAgICBfY2hhcmFjdGVyID0gX3Jlc3VsdC5jaGFyQ29kZUF0KF9wb3NpdGlvbik7CiAgICAgICAgICAgIGlmICghKF9jaGFyYWN0ZXIgPT09IDkgfHwgMzIgPD0gX2NoYXJhY3RlciAmJiBfY2hhcmFjdGVyIDw9IDExMTQxMTEpKSB7CiAgICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImV4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKFBBVFRFUk5fTk9OX1BSSU5UQUJMRS50ZXN0KF9yZXN1bHQpKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAidGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMiKTsKICAgICAgICB9CiAgICAgICAgc3RhdGUxNC5yZXN1bHQgKz0gX3Jlc3VsdDsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gbWVyZ2VNYXBwaW5ncyhzdGF0ZTE0LCBkZXN0aW5hdGlvbiwgc291cmNlLCBvdmVycmlkYWJsZUtleXMpIHsKICAgICAgdmFyIHNvdXJjZUtleXMsIGtleTIsIGluZGV4MiwgcXVhbnRpdHk7CiAgICAgIGlmICghY29tbW9uLmlzT2JqZWN0KHNvdXJjZSkpIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAiY2Fubm90IG1lcmdlIG1hcHBpbmdzOyB0aGUgcHJvdmlkZWQgc291cmNlIG9iamVjdCBpcyB1bmFjY2VwdGFibGUiKTsKICAgICAgfQogICAgICBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsKICAgICAgZm9yIChpbmRleDIgPSAwLCBxdWFudGl0eSA9IHNvdXJjZUtleXMubGVuZ3RoOyBpbmRleDIgPCBxdWFudGl0eTsgaW5kZXgyICs9IDEpIHsKICAgICAgICBrZXkyID0gc291cmNlS2V5c1tpbmRleDJdOwogICAgICAgIGlmICghX2hhc093blByb3BlcnR5LmNhbGwoZGVzdGluYXRpb24sIGtleTIpKSB7CiAgICAgICAgICBzZXRQcm9wZXJ0eShkZXN0aW5hdGlvbiwga2V5Miwgc291cmNlW2tleTJdKTsKICAgICAgICAgIG92ZXJyaWRhYmxlS2V5c1trZXkyXSA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlMTQsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIHN0YXJ0TGluZSwgc3RhcnRQb3MpIHsKICAgICAgdmFyIGluZGV4MiwgcXVhbnRpdHk7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleU5vZGUpKSB7CiAgICAgICAga2V5Tm9kZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGtleU5vZGUpOwogICAgICAgIGZvciAoaW5kZXgyID0gMCwgcXVhbnRpdHkgPSBrZXlOb2RlLmxlbmd0aDsgaW5kZXgyIDwgcXVhbnRpdHk7IGluZGV4MiArPSAxKSB7CiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXlOb2RlW2luZGV4Ml0pKSB7CiAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJuZXN0ZWQgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBrZXlzIik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZW9mIGtleU5vZGUgPT09ICJvYmplY3QiICYmIF9jbGFzcyhrZXlOb2RlW2luZGV4Ml0pID09PSAiW29iamVjdCBPYmplY3RdIikgewogICAgICAgICAgICBrZXlOb2RlW2luZGV4Ml0gPSAiW29iamVjdCBPYmplY3RdIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBrZXlOb2RlID09PSAib2JqZWN0IiAmJiBfY2xhc3Moa2V5Tm9kZSkgPT09ICJbb2JqZWN0IE9iamVjdF0iKSB7CiAgICAgICAga2V5Tm9kZSA9ICJbb2JqZWN0IE9iamVjdF0iOwogICAgICB9CiAgICAgIGtleU5vZGUgPSBTdHJpbmcoa2V5Tm9kZSk7CiAgICAgIGlmIChfcmVzdWx0ID09PSBudWxsKSB7CiAgICAgICAgX3Jlc3VsdCA9IHt9OwogICAgICB9CiAgICAgIGlmIChrZXlUYWcgPT09ICJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZSIpIHsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZU5vZGUpKSB7CiAgICAgICAgICBmb3IgKGluZGV4MiA9IDAsIHF1YW50aXR5ID0gdmFsdWVOb2RlLmxlbmd0aDsgaW5kZXgyIDwgcXVhbnRpdHk7IGluZGV4MiArPSAxKSB7CiAgICAgICAgICAgIG1lcmdlTWFwcGluZ3Moc3RhdGUxNCwgX3Jlc3VsdCwgdmFsdWVOb2RlW2luZGV4Ml0sIG92ZXJyaWRhYmxlS2V5cyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1lcmdlTWFwcGluZ3Moc3RhdGUxNCwgX3Jlc3VsdCwgdmFsdWVOb2RlLCBvdmVycmlkYWJsZUtleXMpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoIXN0YXRlMTQuanNvbiAmJiAhX2hhc093blByb3BlcnR5LmNhbGwob3ZlcnJpZGFibGVLZXlzLCBrZXlOb2RlKSAmJiBfaGFzT3duUHJvcGVydHkuY2FsbChfcmVzdWx0LCBrZXlOb2RlKSkgewogICAgICAgICAgc3RhdGUxNC5saW5lID0gc3RhcnRMaW5lIHx8IHN0YXRlMTQubGluZTsKICAgICAgICAgIHN0YXRlMTQucG9zaXRpb24gPSBzdGFydFBvcyB8fCBzdGF0ZTE0LnBvc2l0aW9uOwogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImR1cGxpY2F0ZWQgbWFwcGluZyBrZXkiKTsKICAgICAgICB9CiAgICAgICAgc2V0UHJvcGVydHkoX3Jlc3VsdCwga2V5Tm9kZSwgdmFsdWVOb2RlKTsKICAgICAgICBkZWxldGUgb3ZlcnJpZGFibGVLZXlzW2tleU5vZGVdOwogICAgICB9CiAgICAgIHJldHVybiBfcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gcmVhZExpbmVCcmVhayhzdGF0ZTE0KSB7CiAgICAgIHZhciBjaDsKICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgIGlmIChjaCA9PT0gMTApIHsKICAgICAgICBzdGF0ZTE0LnBvc2l0aW9uKys7CiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDEzKSB7CiAgICAgICAgc3RhdGUxNC5wb3NpdGlvbisrOwogICAgICAgIGlmIChzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbikgPT09IDEwKSB7CiAgICAgICAgICBzdGF0ZTE0LnBvc2l0aW9uKys7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQiKTsKICAgICAgfQogICAgICBzdGF0ZTE0LmxpbmUgKz0gMTsKICAgICAgc3RhdGUxNC5saW5lU3RhcnQgPSBzdGF0ZTE0LnBvc2l0aW9uOwogICAgfQogICAgZnVuY3Rpb24gc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTE0LCBhbGxvd0NvbW1lbnRzLCBjaGVja0luZGVudCkgewogICAgICB2YXIgbGluZUJyZWFrcyA9IDAsIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICB3aGlsZSAoY2ggIT09IDApIHsKICAgICAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7CiAgICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICBpZiAoYWxsb3dDb21tZW50cyAmJiBjaCA9PT0gMzUpIHsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICAgIH0gd2hpbGUgKGNoICE9PSAxMCAmJiBjaCAhPT0gMTMgJiYgY2ggIT09IDApOwogICAgICAgIH0KICAgICAgICBpZiAoaXNfRU9MKGNoKSkgewogICAgICAgICAgcmVhZExpbmVCcmVhayhzdGF0ZTE0KTsKICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgICAgbGluZUJyZWFrcysrOwogICAgICAgICAgc3RhdGUxNC5saW5lSW5kZW50ID0gMDsKICAgICAgICAgIHdoaWxlIChjaCA9PT0gMzIpIHsKICAgICAgICAgICAgc3RhdGUxNC5saW5lSW5kZW50Kys7CiAgICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoY2hlY2tJbmRlbnQgIT09IC0xICYmIGxpbmVCcmVha3MgIT09IDAgJiYgc3RhdGUxNC5saW5lSW5kZW50IDwgY2hlY2tJbmRlbnQpIHsKICAgICAgICB0aHJvd1dhcm5pbmcoc3RhdGUxNCwgImRlZmljaWVudCBpbmRlbnRhdGlvbiIpOwogICAgICB9CiAgICAgIHJldHVybiBsaW5lQnJlYWtzOwogICAgfQogICAgZnVuY3Rpb24gdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlMTQpIHsKICAgICAgdmFyIF9wb3NpdGlvbiA9IHN0YXRlMTQucG9zaXRpb24sIGNoOwogICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24pOwogICAgICBpZiAoKGNoID09PSA0NSB8fCBjaCA9PT0gNDYpICYmIGNoID09PSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uICsgMSkgJiYgY2ggPT09IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24gKyAyKSkgewogICAgICAgIF9wb3NpdGlvbiArPSAzOwogICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbik7CiAgICAgICAgaWYgKGNoID09PSAwIHx8IGlzX1dTX09SX0VPTChjaCkpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiB3cml0ZUZvbGRlZExpbmVzKHN0YXRlMTQsIGNvdW50MikgewogICAgICBpZiAoY291bnQyID09PSAxKSB7CiAgICAgICAgc3RhdGUxNC5yZXN1bHQgKz0gIiAiOwogICAgICB9IGVsc2UgaWYgKGNvdW50MiA+IDEpIHsKICAgICAgICBzdGF0ZTE0LnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCJcbiIsIGNvdW50MiAtIDEpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiByZWFkUGxhaW5TY2FsYXIoc3RhdGUxNCwgbm9kZUluZGVudCwgd2l0aGluRmxvd0NvbGxlY3Rpb24pIHsKICAgICAgdmFyIHByZWNlZGluZywgZm9sbG93aW5nLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGhhc1BlbmRpbmdDb250ZW50LCBfbGluZSwgX2xpbmVTdGFydCwgX2xpbmVJbmRlbnQsIF9raW5kID0gc3RhdGUxNC5raW5kLCBfcmVzdWx0ID0gc3RhdGUxNC5yZXN1bHQsIGNoOwogICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgaWYgKGlzX1dTX09SX0VPTChjaCkgfHwgaXNfRkxPV19JTkRJQ0FUT1IoY2gpIHx8IGNoID09PSAzNSB8fCBjaCA9PT0gMzggfHwgY2ggPT09IDQyIHx8IGNoID09PSAzMyB8fCBjaCA9PT0gMTI0IHx8IGNoID09PSA2MiB8fCBjaCA9PT0gMzkgfHwgY2ggPT09IDM0IHx8IGNoID09PSAzNyB8fCBjaCA9PT0gNjQgfHwgY2ggPT09IDk2KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChjaCA9PT0gNjMgfHwgY2ggPT09IDQ1KSB7CiAgICAgICAgZm9sbG93aW5nID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24gKyAxKTsKICAgICAgICBpZiAoaXNfV1NfT1JfRU9MKGZvbGxvd2luZykgfHwgd2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNfRkxPV19JTkRJQ0FUT1IoZm9sbG93aW5nKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBzdGF0ZTE0LmtpbmQgPSAic2NhbGFyIjsKICAgICAgc3RhdGUxNC5yZXN1bHQgPSAiIjsKICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlMTQucG9zaXRpb247CiAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gZmFsc2U7CiAgICAgIHdoaWxlIChjaCAhPT0gMCkgewogICAgICAgIGlmIChjaCA9PT0gNTgpIHsKICAgICAgICAgIGZvbGxvd2luZyA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uICsgMSk7CiAgICAgICAgICBpZiAoaXNfV1NfT1JfRU9MKGZvbGxvd2luZykgfHwgd2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNfRkxPV19JTkRJQ0FUT1IoZm9sbG93aW5nKSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAzNSkgewogICAgICAgICAgcHJlY2VkaW5nID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24gLSAxKTsKICAgICAgICAgIGlmIChpc19XU19PUl9FT0wocHJlY2VkaW5nKSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHN0YXRlMTQucG9zaXRpb24gPT09IHN0YXRlMTQubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZTE0KSB8fCB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihjaCkpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSBpZiAoaXNfRU9MKGNoKSkgewogICAgICAgICAgX2xpbmUgPSBzdGF0ZTE0LmxpbmU7CiAgICAgICAgICBfbGluZVN0YXJ0ID0gc3RhdGUxNC5saW5lU3RhcnQ7CiAgICAgICAgICBfbGluZUluZGVudCA9IHN0YXRlMTQubGluZUluZGVudDsKICAgICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxNCwgZmFsc2UsIC0xKTsKICAgICAgICAgIGlmIChzdGF0ZTE0LmxpbmVJbmRlbnQgPj0gbm9kZUluZGVudCkgewogICAgICAgICAgICBoYXNQZW5kaW5nQ29udGVudCA9IHRydWU7CiAgICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlMTQucG9zaXRpb24gPSBjYXB0dXJlRW5kOwogICAgICAgICAgICBzdGF0ZTE0LmxpbmUgPSBfbGluZTsKICAgICAgICAgICAgc3RhdGUxNC5saW5lU3RhcnQgPSBfbGluZVN0YXJ0OwogICAgICAgICAgICBzdGF0ZTE0LmxpbmVJbmRlbnQgPSBfbGluZUluZGVudDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChoYXNQZW5kaW5nQ29udGVudCkgewogICAgICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUxNCwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBmYWxzZSk7CiAgICAgICAgICB3cml0ZUZvbGRlZExpbmVzKHN0YXRlMTQsIHN0YXRlMTQubGluZSAtIF9saW5lKTsKICAgICAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZTE0LnBvc2l0aW9uOwogICAgICAgICAgaGFzUGVuZGluZ0NvbnRlbnQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc19XSElURV9TUEFDRShjaCkpIHsKICAgICAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZTE0LnBvc2l0aW9uICsgMTsKICAgICAgICB9CiAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgfQogICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZTE0LCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTsKICAgICAgaWYgKHN0YXRlMTQucmVzdWx0KSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgc3RhdGUxNC5raW5kID0gX2tpbmQ7CiAgICAgIHN0YXRlMTQucmVzdWx0ID0gX3Jlc3VsdDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZTE0LCBub2RlSW5kZW50KSB7CiAgICAgIHZhciBjaCwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kOwogICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgaWYgKGNoICE9PSAzOSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBzdGF0ZTE0LmtpbmQgPSAic2NhbGFyIjsKICAgICAgc3RhdGUxNC5yZXN1bHQgPSAiIjsKICAgICAgc3RhdGUxNC5wb3NpdGlvbisrOwogICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUxNC5wb3NpdGlvbjsKICAgICAgd2hpbGUgKChjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKSkgIT09IDApIHsKICAgICAgICBpZiAoY2ggPT09IDM5KSB7CiAgICAgICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZTE0LCBjYXB0dXJlU3RhcnQsIHN0YXRlMTQucG9zaXRpb24sIHRydWUpOwogICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICAgIGlmIChjaCA9PT0gMzkpIHsKICAgICAgICAgICAgY2FwdHVyZVN0YXJ0ID0gc3RhdGUxNC5wb3NpdGlvbjsKICAgICAgICAgICAgc3RhdGUxNC5wb3NpdGlvbisrOwogICAgICAgICAgICBjYXB0dXJlRW5kID0gc3RhdGUxNC5wb3NpdGlvbjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoaXNfRU9MKGNoKSkgewogICAgICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUxNCwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCB0cnVlKTsKICAgICAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUxNCwgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTE0LCBmYWxzZSwgbm9kZUluZGVudCkpOwogICAgICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlMTQucG9zaXRpb247CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZTE0LnBvc2l0aW9uID09PSBzdGF0ZTE0LmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUxNCkpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RhdGUxNC5wb3NpdGlvbisrOwogICAgICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlMTQucG9zaXRpb247CiAgICAgICAgfQogICAgICB9CiAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIik7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkRG91YmxlUXVvdGVkU2NhbGFyKHN0YXRlMTQsIG5vZGVJbmRlbnQpIHsKICAgICAgdmFyIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgaGV4TGVuZ3RoLCBoZXhSZXN1bHQsIHRtcCwgY2g7CiAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICBpZiAoY2ggIT09IDM0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHN0YXRlMTQua2luZCA9ICJzY2FsYXIiOwogICAgICBzdGF0ZTE0LnJlc3VsdCA9ICIiOwogICAgICBzdGF0ZTE0LnBvc2l0aW9uKys7CiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZTE0LnBvc2l0aW9uOwogICAgICB3aGlsZSAoKGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pKSAhPT0gMCkgewogICAgICAgIGlmIChjaCA9PT0gMzQpIHsKICAgICAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlMTQsIGNhcHR1cmVTdGFydCwgc3RhdGUxNC5wb3NpdGlvbiwgdHJ1ZSk7CiAgICAgICAgICBzdGF0ZTE0LnBvc2l0aW9uKys7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgaWYgKGNoID09PSA5MikgewogICAgICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUxNCwgY2FwdHVyZVN0YXJ0LCBzdGF0ZTE0LnBvc2l0aW9uLCB0cnVlKTsKICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgICAgICBpZiAoaXNfRU9MKGNoKSkgewogICAgICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIGZhbHNlLCBub2RlSW5kZW50KTsKICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPCAyNTYgJiYgc2ltcGxlRXNjYXBlQ2hlY2tbY2hdKSB7CiAgICAgICAgICAgIHN0YXRlMTQucmVzdWx0ICs9IHNpbXBsZUVzY2FwZU1hcFtjaF07CiAgICAgICAgICAgIHN0YXRlMTQucG9zaXRpb24rKzsKICAgICAgICAgIH0gZWxzZSBpZiAoKHRtcCA9IGVzY2FwZWRIZXhMZW4oY2gpKSA+IDApIHsKICAgICAgICAgICAgaGV4TGVuZ3RoID0gdG1wOwogICAgICAgICAgICBoZXhSZXN1bHQgPSAwOwogICAgICAgICAgICBmb3IgKDsgaGV4TGVuZ3RoID4gMDsgaGV4TGVuZ3RoLS0pIHsKICAgICAgICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICAgICAgICAgIGlmICgodG1wID0gZnJvbUhleENvZGUoY2gpKSA+PSAwKSB7CiAgICAgICAgICAgICAgICBoZXhSZXN1bHQgPSAoaGV4UmVzdWx0IDw8IDQpICsgdG1wOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAiZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHN0YXRlMTQucmVzdWx0ICs9IGNoYXJGcm9tQ29kZXBvaW50KGhleFJlc3VsdCk7CiAgICAgICAgICAgIHN0YXRlMTQucG9zaXRpb24rKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJ1bmtub3duIGVzY2FwZSBzZXF1ZW5jZSIpOwogICAgICAgICAgfQogICAgICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlMTQucG9zaXRpb247CiAgICAgICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7CiAgICAgICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZTE0LCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpOwogICAgICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZTE0LCBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIGZhbHNlLCBub2RlSW5kZW50KSk7CiAgICAgICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUxNC5wb3NpdGlvbjsKICAgICAgICB9IGVsc2UgaWYgKHN0YXRlMTQucG9zaXRpb24gPT09IHN0YXRlMTQubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZTE0KSkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdGF0ZTE0LnBvc2l0aW9uKys7CiAgICAgICAgICBjYXB0dXJlRW5kID0gc3RhdGUxNC5wb3NpdGlvbjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXIiKTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWRGbG93Q29sbGVjdGlvbihzdGF0ZTE0LCBub2RlSW5kZW50KSB7CiAgICAgIHZhciByZWFkTmV4dCA9IHRydWUsIF9saW5lLCBfdGFnID0gc3RhdGUxNC50YWcsIF9yZXN1bHQsIF9hbmNob3IgPSBzdGF0ZTE0LmFuY2hvciwgZm9sbG93aW5nLCB0ZXJtaW5hdG9yLCBpc1BhaXIsIGlzRXhwbGljaXRQYWlyLCBpc01hcHBpbmcsIG92ZXJyaWRhYmxlS2V5cyA9IHt9LCBrZXlOb2RlLCBrZXlUYWcsIHZhbHVlTm9kZSwgY2g7CiAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICBpZiAoY2ggPT09IDkxKSB7CiAgICAgICAgdGVybWluYXRvciA9IDkzOwogICAgICAgIGlzTWFwcGluZyA9IGZhbHNlOwogICAgICAgIF9yZXN1bHQgPSBbXTsKICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMTIzKSB7CiAgICAgICAgdGVybWluYXRvciA9IDEyNTsKICAgICAgICBpc01hcHBpbmcgPSB0cnVlOwogICAgICAgIF9yZXN1bHQgPSB7fTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlMTQuYW5jaG9yICE9PSBudWxsKSB7CiAgICAgICAgc3RhdGUxNC5hbmNob3JNYXBbc3RhdGUxNC5hbmNob3JdID0gX3Jlc3VsdDsKICAgICAgfQogICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICB3aGlsZSAoY2ggIT09IDApIHsKICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIG5vZGVJbmRlbnQpOwogICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgIGlmIChjaCA9PT0gdGVybWluYXRvcikgewogICAgICAgICAgc3RhdGUxNC5wb3NpdGlvbisrOwogICAgICAgICAgc3RhdGUxNC50YWcgPSBfdGFnOwogICAgICAgICAgc3RhdGUxNC5hbmNob3IgPSBfYW5jaG9yOwogICAgICAgICAgc3RhdGUxNC5raW5kID0gaXNNYXBwaW5nID8gIm1hcHBpbmciIDogInNlcXVlbmNlIjsKICAgICAgICAgIHN0YXRlMTQucmVzdWx0ID0gX3Jlc3VsdDsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAoIXJlYWROZXh0KSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAibWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXMiKTsKICAgICAgICB9CiAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7CiAgICAgICAgaXNQYWlyID0gaXNFeHBsaWNpdFBhaXIgPSBmYWxzZTsKICAgICAgICBpZiAoY2ggPT09IDYzKSB7CiAgICAgICAgICBmb2xsb3dpbmcgPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbiArIDEpOwogICAgICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7CiAgICAgICAgICAgIGlzUGFpciA9IGlzRXhwbGljaXRQYWlyID0gdHJ1ZTsKICAgICAgICAgICAgc3RhdGUxNC5wb3NpdGlvbisrOwogICAgICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIG5vZGVJbmRlbnQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfbGluZSA9IHN0YXRlMTQubGluZTsKICAgICAgICBjb21wb3NlTm9kZShzdGF0ZTE0LCBub2RlSW5kZW50LCBDT05URVhUX0ZMT1dfSU4sIGZhbHNlLCB0cnVlKTsKICAgICAgICBrZXlUYWcgPSBzdGF0ZTE0LnRhZzsKICAgICAgICBrZXlOb2RlID0gc3RhdGUxNC5yZXN1bHQ7CiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTE0LCB0cnVlLCBub2RlSW5kZW50KTsKICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICBpZiAoKGlzRXhwbGljaXRQYWlyIHx8IHN0YXRlMTQubGluZSA9PT0gX2xpbmUpICYmIGNoID09PSA1OCkgewogICAgICAgICAgaXNQYWlyID0gdHJ1ZTsKICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIG5vZGVJbmRlbnQpOwogICAgICAgICAgY29tcG9zZU5vZGUoc3RhdGUxNCwgbm9kZUluZGVudCwgQ09OVEVYVF9GTE9XX0lOLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICB2YWx1ZU5vZGUgPSBzdGF0ZTE0LnJlc3VsdDsKICAgICAgICB9CiAgICAgICAgaWYgKGlzTWFwcGluZykgewogICAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZTE0LCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgdmFsdWVOb2RlKTsKICAgICAgICB9IGVsc2UgaWYgKGlzUGFpcikgewogICAgICAgICAgX3Jlc3VsdC5wdXNoKHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUxNCwgbnVsbCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfcmVzdWx0LnB1c2goa2V5Tm9kZSk7CiAgICAgICAgfQogICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxNCwgdHJ1ZSwgbm9kZUluZGVudCk7CiAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgICAgaWYgKGNoID09PSA0NCkgewogICAgICAgICAgcmVhZE5leHQgPSB0cnVlOwogICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVhZE5leHQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZmxvdyBjb2xsZWN0aW9uIik7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkQmxvY2tTY2FsYXIoc3RhdGUxNCwgbm9kZUluZGVudCkgewogICAgICB2YXIgY2FwdHVyZVN0YXJ0LCBmb2xkaW5nLCBjaG9tcGluZyA9IENIT01QSU5HX0NMSVAsIGRpZFJlYWRDb250ZW50ID0gZmFsc2UsIGRldGVjdGVkSW5kZW50ID0gZmFsc2UsIHRleHRJbmRlbnQgPSBub2RlSW5kZW50LCBlbXB0eUxpbmVzID0gMCwgYXRNb3JlSW5kZW50ZWQgPSBmYWxzZSwgdG1wLCBjaDsKICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgIGlmIChjaCA9PT0gMTI0KSB7CiAgICAgICAgZm9sZGluZyA9IGZhbHNlOwogICAgICB9IGVsc2UgaWYgKGNoID09PSA2MikgewogICAgICAgIGZvbGRpbmcgPSB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBzdGF0ZTE0LmtpbmQgPSAic2NhbGFyIjsKICAgICAgc3RhdGUxNC5yZXN1bHQgPSAiIjsKICAgICAgd2hpbGUgKGNoICE9PSAwKSB7CiAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICBpZiAoY2ggPT09IDQzIHx8IGNoID09PSA0NSkgewogICAgICAgICAgaWYgKENIT01QSU5HX0NMSVAgPT09IGNob21waW5nKSB7CiAgICAgICAgICAgIGNob21waW5nID0gY2ggPT09IDQzID8gQ0hPTVBJTkdfS0VFUCA6IENIT01QSU5HX1NUUklQOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgInJlcGVhdCBvZiBhIGNob21waW5nIG1vZGUgaWRlbnRpZmllciIpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoKHRtcCA9IGZyb21EZWNpbWFsQ29kZShjaCkpID49IDApIHsKICAgICAgICAgIGlmICh0bXAgPT09IDApIHsKICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImJhZCBleHBsaWNpdCBpbmRlbnRhdGlvbiB3aWR0aCBvZiBhIGJsb2NrIHNjYWxhcjsgaXQgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmUiKTsKICAgICAgICAgIH0gZWxzZSBpZiAoIWRldGVjdGVkSW5kZW50KSB7CiAgICAgICAgICAgIHRleHRJbmRlbnQgPSBub2RlSW5kZW50ICsgdG1wIC0gMTsKICAgICAgICAgICAgZGV0ZWN0ZWRJbmRlbnQgPSB0cnVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgInJlcGVhdCBvZiBhbiBpbmRlbnRhdGlvbiB3aWR0aCBpZGVudGlmaWVyIik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7CiAgICAgICAgZG8gewogICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICB9IHdoaWxlIChpc19XSElURV9TUEFDRShjaCkpOwogICAgICAgIGlmIChjaCA9PT0gMzUpIHsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICAgIH0gd2hpbGUgKCFpc19FT0woY2gpICYmIGNoICE9PSAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgd2hpbGUgKGNoICE9PSAwKSB7CiAgICAgICAgcmVhZExpbmVCcmVhayhzdGF0ZTE0KTsKICAgICAgICBzdGF0ZTE0LmxpbmVJbmRlbnQgPSAwOwogICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgIHdoaWxlICgoIWRldGVjdGVkSW5kZW50IHx8IHN0YXRlMTQubGluZUluZGVudCA8IHRleHRJbmRlbnQpICYmIGNoID09PSAzMikgewogICAgICAgICAgc3RhdGUxNC5saW5lSW5kZW50Kys7CiAgICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICBpZiAoIWRldGVjdGVkSW5kZW50ICYmIHN0YXRlMTQubGluZUluZGVudCA+IHRleHRJbmRlbnQpIHsKICAgICAgICAgIHRleHRJbmRlbnQgPSBzdGF0ZTE0LmxpbmVJbmRlbnQ7CiAgICAgICAgfQogICAgICAgIGlmIChpc19FT0woY2gpKSB7CiAgICAgICAgICBlbXB0eUxpbmVzKys7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlMTQubGluZUluZGVudCA8IHRleHRJbmRlbnQpIHsKICAgICAgICAgIGlmIChjaG9tcGluZyA9PT0gQ0hPTVBJTkdfS0VFUCkgewogICAgICAgICAgICBzdGF0ZTE0LnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCJcbiIsIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzKTsKICAgICAgICAgIH0gZWxzZSBpZiAoY2hvbXBpbmcgPT09IENIT01QSU5HX0NMSVApIHsKICAgICAgICAgICAgaWYgKGRpZFJlYWRDb250ZW50KSB7CiAgICAgICAgICAgICAgc3RhdGUxNC5yZXN1bHQgKz0gIlxuIjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChmb2xkaW5nKSB7CiAgICAgICAgICBpZiAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7CiAgICAgICAgICAgIGF0TW9yZUluZGVudGVkID0gdHJ1ZTsKICAgICAgICAgICAgc3RhdGUxNC5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgiXG4iLCBkaWRSZWFkQ29udGVudCA/IDEgKyBlbXB0eUxpbmVzIDogZW1wdHlMaW5lcyk7CiAgICAgICAgICB9IGVsc2UgaWYgKGF0TW9yZUluZGVudGVkKSB7CiAgICAgICAgICAgIGF0TW9yZUluZGVudGVkID0gZmFsc2U7CiAgICAgICAgICAgIHN0YXRlMTQucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoIlxuIiwgZW1wdHlMaW5lcyArIDEpOwogICAgICAgICAgfSBlbHNlIGlmIChlbXB0eUxpbmVzID09PSAwKSB7CiAgICAgICAgICAgIGlmIChkaWRSZWFkQ29udGVudCkgewogICAgICAgICAgICAgIHN0YXRlMTQucmVzdWx0ICs9ICIgIjsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUxNC5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgiXG4iLCBlbXB0eUxpbmVzKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RhdGUxNC5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgiXG4iLCBkaWRSZWFkQ29udGVudCA/IDEgKyBlbXB0eUxpbmVzIDogZW1wdHlMaW5lcyk7CiAgICAgICAgfQogICAgICAgIGRpZFJlYWRDb250ZW50ID0gdHJ1ZTsKICAgICAgICBkZXRlY3RlZEluZGVudCA9IHRydWU7CiAgICAgICAgZW1wdHlMaW5lcyA9IDA7CiAgICAgICAgY2FwdHVyZVN0YXJ0ID0gc3RhdGUxNC5wb3NpdGlvbjsKICAgICAgICB3aGlsZSAoIWlzX0VPTChjaCkgJiYgY2ggIT09IDApIHsKICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgICAgfQogICAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlMTQsIGNhcHR1cmVTdGFydCwgc3RhdGUxNC5wb3NpdGlvbiwgZmFsc2UpOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gcmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUxNCwgbm9kZUluZGVudCkgewogICAgICB2YXIgX2xpbmUsIF90YWcgPSBzdGF0ZTE0LnRhZywgX2FuY2hvciA9IHN0YXRlMTQuYW5jaG9yLCBfcmVzdWx0ID0gW10sIGZvbGxvd2luZywgZGV0ZWN0ZWQgPSBmYWxzZSwgY2g7CiAgICAgIGlmIChzdGF0ZTE0LmFuY2hvciAhPT0gbnVsbCkgewogICAgICAgIHN0YXRlMTQuYW5jaG9yTWFwW3N0YXRlMTQuYW5jaG9yXSA9IF9yZXN1bHQ7CiAgICAgIH0KICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgIHdoaWxlIChjaCAhPT0gMCkgewogICAgICAgIGlmIChjaCAhPT0gNDUpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBmb2xsb3dpbmcgPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbiArIDEpOwogICAgICAgIGlmICghaXNfV1NfT1JfRU9MKGZvbGxvd2luZykpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBkZXRlY3RlZCA9IHRydWU7CiAgICAgICAgc3RhdGUxNC5wb3NpdGlvbisrOwogICAgICAgIGlmIChza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKSkgewogICAgICAgICAgaWYgKHN0YXRlMTQubGluZUluZGVudCA8PSBub2RlSW5kZW50KSB7CiAgICAgICAgICAgIF9yZXN1bHQucHVzaChudWxsKTsKICAgICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfbGluZSA9IHN0YXRlMTQubGluZTsKICAgICAgICBjb21wb3NlTm9kZShzdGF0ZTE0LCBub2RlSW5kZW50LCBDT05URVhUX0JMT0NLX0lOLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgX3Jlc3VsdC5wdXNoKHN0YXRlMTQucmVzdWx0KTsKICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKTsKICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICBpZiAoKHN0YXRlMTQubGluZSA9PT0gX2xpbmUgfHwgc3RhdGUxNC5saW5lSW5kZW50ID4gbm9kZUluZGVudCkgJiYgY2ggIT09IDApIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJiYWQgaW5kZW50YXRpb24gb2YgYSBzZXF1ZW5jZSBlbnRyeSIpOwogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUxNC5saW5lSW5kZW50IDwgbm9kZUluZGVudCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChkZXRlY3RlZCkgewogICAgICAgIHN0YXRlMTQudGFnID0gX3RhZzsKICAgICAgICBzdGF0ZTE0LmFuY2hvciA9IF9hbmNob3I7CiAgICAgICAgc3RhdGUxNC5raW5kID0gInNlcXVlbmNlIjsKICAgICAgICBzdGF0ZTE0LnJlc3VsdCA9IF9yZXN1bHQ7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gcmVhZEJsb2NrTWFwcGluZyhzdGF0ZTE0LCBub2RlSW5kZW50LCBmbG93SW5kZW50KSB7CiAgICAgIHZhciBmb2xsb3dpbmcsIGFsbG93Q29tcGFjdCwgX2xpbmUsIF9wb3MsIF90YWcgPSBzdGF0ZTE0LnRhZywgX2FuY2hvciA9IHN0YXRlMTQuYW5jaG9yLCBfcmVzdWx0ID0ge30sIG92ZXJyaWRhYmxlS2V5cyA9IHt9LCBrZXlUYWcgPSBudWxsLCBrZXlOb2RlID0gbnVsbCwgdmFsdWVOb2RlID0gbnVsbCwgYXRFeHBsaWNpdEtleSA9IGZhbHNlLCBkZXRlY3RlZCA9IGZhbHNlLCBjaDsKICAgICAgaWYgKHN0YXRlMTQuYW5jaG9yICE9PSBudWxsKSB7CiAgICAgICAgc3RhdGUxNC5hbmNob3JNYXBbc3RhdGUxNC5hbmNob3JdID0gX3Jlc3VsdDsKICAgICAgfQogICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgd2hpbGUgKGNoICE9PSAwKSB7CiAgICAgICAgZm9sbG93aW5nID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24gKyAxKTsKICAgICAgICBfbGluZSA9IHN0YXRlMTQubGluZTsKICAgICAgICBfcG9zID0gc3RhdGUxNC5wb3NpdGlvbjsKICAgICAgICBpZiAoKGNoID09PSA2MyB8fCBjaCA9PT0gNTgpICYmIGlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7CiAgICAgICAgICBpZiAoY2ggPT09IDYzKSB7CiAgICAgICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7CiAgICAgICAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZTE0LCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCk7CiAgICAgICAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlOwogICAgICAgICAgICBhdEV4cGxpY2l0S2V5ID0gdHJ1ZTsKICAgICAgICAgICAgYWxsb3dDb21wYWN0ID0gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSBpZiAoYXRFeHBsaWNpdEtleSkgewogICAgICAgICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2U7CiAgICAgICAgICAgIGFsbG93Q29tcGFjdCA9IHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAiaW5jb21wbGV0ZSBleHBsaWNpdCBtYXBwaW5nIHBhaXI7IGEga2V5IG5vZGUgaXMgbWlzc2VkOyBvciBmb2xsb3dlZCBieSBhIG5vbi10YWJ1bGF0ZWQgZW1wdHkgbGluZSIpOwogICAgICAgICAgfQogICAgICAgICAgc3RhdGUxNC5wb3NpdGlvbiArPSAxOwogICAgICAgICAgY2ggPSBmb2xsb3dpbmc7CiAgICAgICAgfSBlbHNlIGlmIChjb21wb3NlTm9kZShzdGF0ZTE0LCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfT1VULCBmYWxzZSwgdHJ1ZSkpIHsKICAgICAgICAgIGlmIChzdGF0ZTE0LmxpbmUgPT09IF9saW5lKSB7CiAgICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgICAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7CiAgICAgICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY2ggPT09IDU4KSB7CiAgICAgICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICAgICAgICBpZiAoIWlzX1dTX09SX0VPTChjaCkpIHsKICAgICAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJhIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGV4cGVjdGVkIGFmdGVyIHRoZSBrZXktdmFsdWUgc2VwYXJhdG9yIHdpdGhpbiBhIGJsb2NrIG1hcHBpbmciKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHsKICAgICAgICAgICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUxNCwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIG51bGwpOwogICAgICAgICAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGRldGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2U7CiAgICAgICAgICAgICAgYWxsb3dDb21wYWN0ID0gZmFsc2U7CiAgICAgICAgICAgICAga2V5VGFnID0gc3RhdGUxNC50YWc7CiAgICAgICAgICAgICAga2V5Tm9kZSA9IHN0YXRlMTQucmVzdWx0OwogICAgICAgICAgICB9IGVsc2UgaWYgKGRldGVjdGVkKSB7CiAgICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImNhbiBub3QgcmVhZCBhbiBpbXBsaWNpdCBtYXBwaW5nIHBhaXI7IGEgY29sb24gaXMgbWlzc2VkIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgc3RhdGUxNC50YWcgPSBfdGFnOwogICAgICAgICAgICAgIHN0YXRlMTQuYW5jaG9yID0gX2FuY2hvcjsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChkZXRlY3RlZCkgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAiY2FuIG5vdCByZWFkIGEgYmxvY2sgbWFwcGluZyBlbnRyeTsgYSBtdWx0aWxpbmUga2V5IG1heSBub3QgYmUgYW4gaW1wbGljaXQga2V5Iik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGF0ZTE0LnRhZyA9IF90YWc7CiAgICAgICAgICAgIHN0YXRlMTQuYW5jaG9yID0gX2FuY2hvcjsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhdGUxNC5saW5lID09PSBfbGluZSB8fCBzdGF0ZTE0LmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSB7CiAgICAgICAgICBpZiAoY29tcG9zZU5vZGUoc3RhdGUxNCwgbm9kZUluZGVudCwgQ09OVEVYVF9CTE9DS19PVVQsIHRydWUsIGFsbG93Q29tcGFjdCkpIHsKICAgICAgICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHsKICAgICAgICAgICAgICBrZXlOb2RlID0gc3RhdGUxNC5yZXN1bHQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdmFsdWVOb2RlID0gc3RhdGUxNC5yZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmICghYXRFeHBsaWNpdEtleSkgewogICAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlMTQsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIF9saW5lLCBfcG9zKTsKICAgICAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKTsKICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhdGUxNC5saW5lSW5kZW50ID4gbm9kZUluZGVudCAmJiBjaCAhPT0gMCkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImJhZCBpbmRlbnRhdGlvbiBvZiBhIG1hcHBpbmcgZW50cnkiKTsKICAgICAgICB9IGVsc2UgaWYgKHN0YXRlMTQubGluZUluZGVudCA8IG5vZGVJbmRlbnQpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoYXRFeHBsaWNpdEtleSkgewogICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUxNCwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIG51bGwpOwogICAgICB9CiAgICAgIGlmIChkZXRlY3RlZCkgewogICAgICAgIHN0YXRlMTQudGFnID0gX3RhZzsKICAgICAgICBzdGF0ZTE0LmFuY2hvciA9IF9hbmNob3I7CiAgICAgICAgc3RhdGUxNC5raW5kID0gIm1hcHBpbmciOwogICAgICAgIHN0YXRlMTQucmVzdWx0ID0gX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gZGV0ZWN0ZWQ7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkVGFnUHJvcGVydHkoc3RhdGUxNCkgewogICAgICB2YXIgX3Bvc2l0aW9uLCBpc1ZlcmJhdGltID0gZmFsc2UsIGlzTmFtZWQgPSBmYWxzZSwgdGFnSGFuZGxlLCB0YWdOYW1lLCBjaDsKICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgIGlmIChjaCAhPT0gMzMpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKHN0YXRlMTQudGFnICE9PSBudWxsKSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImR1cGxpY2F0aW9uIG9mIGEgdGFnIHByb3BlcnR5Iik7CiAgICAgIH0KICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgaWYgKGNoID09PSA2MCkgewogICAgICAgIGlzVmVyYmF0aW0gPSB0cnVlOwogICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDMzKSB7CiAgICAgICAgaXNOYW1lZCA9IHRydWU7CiAgICAgICAgdGFnSGFuZGxlID0gIiEhIjsKICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIHRhZ0hhbmRsZSA9ICIhIjsKICAgICAgfQogICAgICBfcG9zaXRpb24gPSBzdGF0ZTE0LnBvc2l0aW9uOwogICAgICBpZiAoaXNWZXJiYXRpbSkgewogICAgICAgIGRvIHsKICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgICAgfSB3aGlsZSAoY2ggIT09IDAgJiYgY2ggIT09IDYyKTsKICAgICAgICBpZiAoc3RhdGUxNC5wb3NpdGlvbiA8IHN0YXRlMTQubGVuZ3RoKSB7CiAgICAgICAgICB0YWdOYW1lID0gc3RhdGUxNC5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgdmVyYmF0aW0gdGFnIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkgewogICAgICAgICAgaWYgKGNoID09PSAzMykgewogICAgICAgICAgICBpZiAoIWlzTmFtZWQpIHsKICAgICAgICAgICAgICB0YWdIYW5kbGUgPSBzdGF0ZTE0LmlucHV0LnNsaWNlKF9wb3NpdGlvbiAtIDEsIHN0YXRlMTQucG9zaXRpb24gKyAxKTsKICAgICAgICAgICAgICBpZiAoIVBBVFRFUk5fVEFHX0hBTkRMRS50ZXN0KHRhZ0hhbmRsZSkpIHsKICAgICAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJuYW1lZCB0YWcgaGFuZGxlIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVycyIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpc05hbWVkID0gdHJ1ZTsKICAgICAgICAgICAgICBfcG9zaXRpb24gPSBzdGF0ZTE0LnBvc2l0aW9uICsgMTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBleGNsYW1hdGlvbiBtYXJrcyIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICB0YWdOYW1lID0gc3RhdGUxNC5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgIGlmIChQQVRURVJOX0ZMT1dfSU5ESUNBVE9SUy50ZXN0KHRhZ05hbWUpKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBmbG93IGluZGljYXRvciBjaGFyYWN0ZXJzIik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YWdOYW1lICYmICFQQVRURVJOX1RBR19VUkkudGVzdCh0YWdOYW1lKSkgewogICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJ0YWcgbmFtZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnM6ICIgKyB0YWdOYW1lKTsKICAgICAgfQogICAgICBpZiAoaXNWZXJiYXRpbSkgewogICAgICAgIHN0YXRlMTQudGFnID0gdGFnTmFtZTsKICAgICAgfSBlbHNlIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZTE0LnRhZ01hcCwgdGFnSGFuZGxlKSkgewogICAgICAgIHN0YXRlMTQudGFnID0gc3RhdGUxNC50YWdNYXBbdGFnSGFuZGxlXSArIHRhZ05hbWU7CiAgICAgIH0gZWxzZSBpZiAodGFnSGFuZGxlID09PSAiISIpIHsKICAgICAgICBzdGF0ZTE0LnRhZyA9ICIhIiArIHRhZ05hbWU7CiAgICAgIH0gZWxzZSBpZiAodGFnSGFuZGxlID09PSAiISEiKSB7CiAgICAgICAgc3RhdGUxNC50YWcgPSAidGFnOnlhbWwub3JnLDIwMDI6IiArIHRhZ05hbWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgJ3VuZGVjbGFyZWQgdGFnIGhhbmRsZSAiJyArIHRhZ0hhbmRsZSArICciJyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkQW5jaG9yUHJvcGVydHkoc3RhdGUxNCkgewogICAgICB2YXIgX3Bvc2l0aW9uLCBjaDsKICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgIGlmIChjaCAhPT0gMzgpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKHN0YXRlMTQuYW5jaG9yICE9PSBudWxsKSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImR1cGxpY2F0aW9uIG9mIGFuIGFuY2hvciBwcm9wZXJ0eSIpOwogICAgICB9CiAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgIF9wb3NpdGlvbiA9IHN0YXRlMTQucG9zaXRpb247CiAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7CiAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgfQogICAgICBpZiAoc3RhdGUxNC5wb3NpdGlvbiA9PT0gX3Bvc2l0aW9uKSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgIm5hbWUgb2YgYW4gYW5jaG9yIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKTsKICAgICAgfQogICAgICBzdGF0ZTE0LmFuY2hvciA9IHN0YXRlMTQuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkQWxpYXMoc3RhdGUxNCkgewogICAgICB2YXIgX3Bvc2l0aW9uLCBhbGlhcywgY2g7CiAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICBpZiAoY2ggIT09IDQyKSByZXR1cm4gZmFsc2U7CiAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgIF9wb3NpdGlvbiA9IHN0YXRlMTQucG9zaXRpb247CiAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7CiAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgfQogICAgICBpZiAoc3RhdGUxNC5wb3NpdGlvbiA9PT0gX3Bvc2l0aW9uKSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgIm5hbWUgb2YgYW4gYWxpYXMgbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlciIpOwogICAgICB9CiAgICAgIGFsaWFzID0gc3RhdGUxNC5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlMTQucG9zaXRpb24pOwogICAgICBpZiAoIV9oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlMTQuYW5jaG9yTWFwLCBhbGlhcykpIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAndW5pZGVudGlmaWVkIGFsaWFzICInICsgYWxpYXMgKyAnIicpOwogICAgICB9CiAgICAgIHN0YXRlMTQucmVzdWx0ID0gc3RhdGUxNC5hbmNob3JNYXBbYWxpYXNdOwogICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBjb21wb3NlTm9kZShzdGF0ZTE0LCBwYXJlbnRJbmRlbnQsIG5vZGVDb250ZXh0LCBhbGxvd1RvU2VlaywgYWxsb3dDb21wYWN0KSB7CiAgICAgIHZhciBhbGxvd0Jsb2NrU3R5bGVzLCBhbGxvd0Jsb2NrU2NhbGFycywgYWxsb3dCbG9ja0NvbGxlY3Rpb25zLCBpbmRlbnRTdGF0dXMgPSAxLCBhdE5ld0xpbmUgPSBmYWxzZSwgaGFzQ29udGVudCA9IGZhbHNlLCB0eXBlSW5kZXgsIHR5cGVRdWFudGl0eSwgdHlwZTUsIGZsb3dJbmRlbnQsIGJsb2NrSW5kZW50OwogICAgICBpZiAoc3RhdGUxNC5saXN0ZW5lciAhPT0gbnVsbCkgewogICAgICAgIHN0YXRlMTQubGlzdGVuZXIoIm9wZW4iLCBzdGF0ZTE0KTsKICAgICAgfQogICAgICBzdGF0ZTE0LnRhZyA9IG51bGw7CiAgICAgIHN0YXRlMTQuYW5jaG9yID0gbnVsbDsKICAgICAgc3RhdGUxNC5raW5kID0gbnVsbDsKICAgICAgc3RhdGUxNC5yZXN1bHQgPSBudWxsOwogICAgICBhbGxvd0Jsb2NrU3R5bGVzID0gYWxsb3dCbG9ja1NjYWxhcnMgPSBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBDT05URVhUX0JMT0NLX09VVCA9PT0gbm9kZUNvbnRleHQgfHwgQ09OVEVYVF9CTE9DS19JTiA9PT0gbm9kZUNvbnRleHQ7CiAgICAgIGlmIChhbGxvd1RvU2VlaykgewogICAgICAgIGlmIChza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKSkgewogICAgICAgICAgYXROZXdMaW5lID0gdHJ1ZTsKICAgICAgICAgIGlmIChzdGF0ZTE0LmxpbmVJbmRlbnQgPiBwYXJlbnRJbmRlbnQpIHsKICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gMTsKICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUxNC5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHsKICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gMDsKICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUxNC5saW5lSW5kZW50IDwgcGFyZW50SW5kZW50KSB7CiAgICAgICAgICAgIGluZGVudFN0YXR1cyA9IC0xOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaW5kZW50U3RhdHVzID09PSAxKSB7CiAgICAgICAgd2hpbGUgKHJlYWRUYWdQcm9wZXJ0eShzdGF0ZTE0KSB8fCByZWFkQW5jaG9yUHJvcGVydHkoc3RhdGUxNCkpIHsKICAgICAgICAgIGlmIChza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKSkgewogICAgICAgICAgICBhdE5ld0xpbmUgPSB0cnVlOwogICAgICAgICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhbGxvd0Jsb2NrU3R5bGVzOwogICAgICAgICAgICBpZiAoc3RhdGUxNC5saW5lSW5kZW50ID4gcGFyZW50SW5kZW50KSB7CiAgICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gMTsKICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZTE0LmxpbmVJbmRlbnQgPT09IHBhcmVudEluZGVudCkgewogICAgICAgICAgICAgIGluZGVudFN0YXR1cyA9IDA7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUxNC5saW5lSW5kZW50IDwgcGFyZW50SW5kZW50KSB7CiAgICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gLTE7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoYWxsb3dCbG9ja0NvbGxlY3Rpb25zKSB7CiAgICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gYXROZXdMaW5lIHx8IGFsbG93Q29tcGFjdDsKICAgICAgfQogICAgICBpZiAoaW5kZW50U3RhdHVzID09PSAxIHx8IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCkgewogICAgICAgIGlmIChDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0IHx8IENPTlRFWFRfRkxPV19PVVQgPT09IG5vZGVDb250ZXh0KSB7CiAgICAgICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50ICsgMTsKICAgICAgICB9CiAgICAgICAgYmxvY2tJbmRlbnQgPSBzdGF0ZTE0LnBvc2l0aW9uIC0gc3RhdGUxNC5saW5lU3RhcnQ7CiAgICAgICAgaWYgKGluZGVudFN0YXR1cyA9PT0gMSkgewogICAgICAgICAgaWYgKGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJiAocmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUxNCwgYmxvY2tJbmRlbnQpIHx8IHJlYWRCbG9ja01hcHBpbmcoc3RhdGUxNCwgYmxvY2tJbmRlbnQsIGZsb3dJbmRlbnQpKSB8fCByZWFkRmxvd0NvbGxlY3Rpb24oc3RhdGUxNCwgZmxvd0luZGVudCkpIHsKICAgICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoYWxsb3dCbG9ja1NjYWxhcnMgJiYgcmVhZEJsb2NrU2NhbGFyKHN0YXRlMTQsIGZsb3dJbmRlbnQpIHx8IHJlYWRTaW5nbGVRdW90ZWRTY2FsYXIoc3RhdGUxNCwgZmxvd0luZGVudCkgfHwgcmVhZERvdWJsZVF1b3RlZFNjYWxhcihzdGF0ZTE0LCBmbG93SW5kZW50KSkgewogICAgICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKHJlYWRBbGlhcyhzdGF0ZTE0KSkgewogICAgICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlOwogICAgICAgICAgICAgIGlmIChzdGF0ZTE0LnRhZyAhPT0gbnVsbCB8fCBzdGF0ZTE0LmFuY2hvciAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImFsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKHJlYWRQbGFpblNjYWxhcihzdGF0ZTE0LCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0KSkgewogICAgICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlOwogICAgICAgICAgICAgIGlmIChzdGF0ZTE0LnRhZyA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgc3RhdGUxNC50YWcgPSAiPyI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdGF0ZTE0LmFuY2hvciAhPT0gbnVsbCkgewogICAgICAgICAgICAgIHN0YXRlMTQuYW5jaG9yTWFwW3N0YXRlMTQuYW5jaG9yXSA9IHN0YXRlMTQucmVzdWx0OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChpbmRlbnRTdGF0dXMgPT09IDApIHsKICAgICAgICAgIGhhc0NvbnRlbnQgPSBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgJiYgcmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUxNCwgYmxvY2tJbmRlbnQpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc3RhdGUxNC50YWcgIT09IG51bGwgJiYgc3RhdGUxNC50YWcgIT09ICIhIikgewogICAgICAgIGlmIChzdGF0ZTE0LnRhZyA9PT0gIj8iKSB7CiAgICAgICAgICBpZiAoc3RhdGUxNC5yZXN1bHQgIT09IG51bGwgJiYgc3RhdGUxNC5raW5kICE9PSAic2NhbGFyIikgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAndW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITw/PiB0YWc7IGl0IHNob3VsZCBiZSAic2NhbGFyIiwgbm90ICInICsgc3RhdGUxNC5raW5kICsgJyInKTsKICAgICAgICAgIH0KICAgICAgICAgIGZvciAodHlwZUluZGV4ID0gMCwgdHlwZVF1YW50aXR5ID0gc3RhdGUxNC5pbXBsaWNpdFR5cGVzLmxlbmd0aDsgdHlwZUluZGV4IDwgdHlwZVF1YW50aXR5OyB0eXBlSW5kZXggKz0gMSkgewogICAgICAgICAgICB0eXBlNSA9IHN0YXRlMTQuaW1wbGljaXRUeXBlc1t0eXBlSW5kZXhdOwogICAgICAgICAgICBpZiAodHlwZTUucmVzb2x2ZShzdGF0ZTE0LnJlc3VsdCkpIHsKICAgICAgICAgICAgICBzdGF0ZTE0LnJlc3VsdCA9IHR5cGU1LmNvbnN0cnVjdChzdGF0ZTE0LnJlc3VsdCk7CiAgICAgICAgICAgICAgc3RhdGUxNC50YWcgPSB0eXBlNS50YWc7CiAgICAgICAgICAgICAgaWYgKHN0YXRlMTQuYW5jaG9yICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBzdGF0ZTE0LmFuY2hvck1hcFtzdGF0ZTE0LmFuY2hvcl0gPSBzdGF0ZTE0LnJlc3VsdDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlMTQudHlwZU1hcFtzdGF0ZTE0LmtpbmQgfHwgImZhbGxiYWNrIl0sIHN0YXRlMTQudGFnKSkgewogICAgICAgICAgdHlwZTUgPSBzdGF0ZTE0LnR5cGVNYXBbc3RhdGUxNC5raW5kIHx8ICJmYWxsYmFjayJdW3N0YXRlMTQudGFnXTsKICAgICAgICAgIGlmIChzdGF0ZTE0LnJlc3VsdCAhPT0gbnVsbCAmJiB0eXBlNS5raW5kICE9PSBzdGF0ZTE0LmtpbmQpIHsKICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgInVuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8IiArIHN0YXRlMTQudGFnICsgJz4gdGFnOyBpdCBzaG91bGQgYmUgIicgKyB0eXBlNS5raW5kICsgJyIsIG5vdCAiJyArIHN0YXRlMTQua2luZCArICciJyk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXR5cGU1LnJlc29sdmUoc3RhdGUxNC5yZXN1bHQpKSB7CiAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJjYW5ub3QgcmVzb2x2ZSBhIG5vZGUgd2l0aCAhPCIgKyBzdGF0ZTE0LnRhZyArICI+IGV4cGxpY2l0IHRhZyIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUxNC5yZXN1bHQgPSB0eXBlNS5jb25zdHJ1Y3Qoc3RhdGUxNC5yZXN1bHQpOwogICAgICAgICAgICBpZiAoc3RhdGUxNC5hbmNob3IgIT09IG51bGwpIHsKICAgICAgICAgICAgICBzdGF0ZTE0LmFuY2hvck1hcFtzdGF0ZTE0LmFuY2hvcl0gPSBzdGF0ZTE0LnJlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAidW5rbm93biB0YWcgITwiICsgc3RhdGUxNC50YWcgKyAiPiIpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc3RhdGUxNC5saXN0ZW5lciAhPT0gbnVsbCkgewogICAgICAgIHN0YXRlMTQubGlzdGVuZXIoImNsb3NlIiwgc3RhdGUxNCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0YXRlMTQudGFnICE9PSBudWxsIHx8IHN0YXRlMTQuYW5jaG9yICE9PSBudWxsIHx8IGhhc0NvbnRlbnQ7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkRG9jdW1lbnQoc3RhdGUxNCkgewogICAgICB2YXIgZG9jdW1lbnRTdGFydCA9IHN0YXRlMTQucG9zaXRpb24sIF9wb3NpdGlvbiwgZGlyZWN0aXZlTmFtZSwgZGlyZWN0aXZlQXJncywgaGFzRGlyZWN0aXZlcyA9IGZhbHNlLCBjaDsKICAgICAgc3RhdGUxNC52ZXJzaW9uID0gbnVsbDsKICAgICAgc3RhdGUxNC5jaGVja0xpbmVCcmVha3MgPSBzdGF0ZTE0LmxlZ2FjeTsKICAgICAgc3RhdGUxNC50YWdNYXAgPSB7fTsKICAgICAgc3RhdGUxNC5hbmNob3JNYXAgPSB7fTsKICAgICAgd2hpbGUgKChjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKSkgIT09IDApIHsKICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKTsKICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICBpZiAoc3RhdGUxNC5saW5lSW5kZW50ID4gMCB8fCBjaCAhPT0gMzcpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBoYXNEaXJlY3RpdmVzID0gdHJ1ZTsKICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICAgIF9wb3NpdGlvbiA9IHN0YXRlMTQucG9zaXRpb247CiAgICAgICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpKSB7CiAgICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICBkaXJlY3RpdmVOYW1lID0gc3RhdGUxNC5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgIGRpcmVjdGl2ZUFyZ3MgPSBbXTsKICAgICAgICBpZiAoZGlyZWN0aXZlTmFtZS5sZW5ndGggPCAxKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAiZGlyZWN0aXZlIG5hbWUgbXVzdCBub3QgYmUgbGVzcyB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gbGVuZ3RoIik7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChjaCAhPT0gMCkgewogICAgICAgICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkgewogICAgICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNoID09PSAzNSkgewogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICAgICAgfSB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX0VPTChjaCkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChpc19FT0woY2gpKSBicmVhazsKICAgICAgICAgIF9wb3NpdGlvbiA9IHN0YXRlMTQucG9zaXRpb247CiAgICAgICAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkpIHsKICAgICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICAgIH0KICAgICAgICAgIGRpcmVjdGl2ZUFyZ3MucHVzaChzdGF0ZTE0LmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUxNC5wb3NpdGlvbikpOwogICAgICAgIH0KICAgICAgICBpZiAoY2ggIT09IDApIHJlYWRMaW5lQnJlYWsoc3RhdGUxNCk7CiAgICAgICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKGRpcmVjdGl2ZUhhbmRsZXJzLCBkaXJlY3RpdmVOYW1lKSkgewogICAgICAgICAgZGlyZWN0aXZlSGFuZGxlcnNbZGlyZWN0aXZlTmFtZV0oc3RhdGUxNCwgZGlyZWN0aXZlTmFtZSwgZGlyZWN0aXZlQXJncyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93V2FybmluZyhzdGF0ZTE0LCAndW5rbm93biBkb2N1bWVudCBkaXJlY3RpdmUgIicgKyBkaXJlY3RpdmVOYW1lICsgJyInKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTE0LCB0cnVlLCAtMSk7CiAgICAgIGlmIChzdGF0ZTE0LmxpbmVJbmRlbnQgPT09IDAgJiYgc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pID09PSA0NSAmJiBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbiArIDEpID09PSA0NSAmJiBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbiArIDIpID09PSA0NSkgewogICAgICAgIHN0YXRlMTQucG9zaXRpb24gKz0gMzsKICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKTsKICAgICAgfSBlbHNlIGlmIChoYXNEaXJlY3RpdmVzKSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImRpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWQiKTsKICAgICAgfQogICAgICBjb21wb3NlTm9kZShzdGF0ZTE0LCBzdGF0ZTE0LmxpbmVJbmRlbnQgLSAxLCBDT05URVhUX0JMT0NLX09VVCwgZmFsc2UsIHRydWUpOwogICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKTsKICAgICAgaWYgKHN0YXRlMTQuY2hlY2tMaW5lQnJlYWtzICYmIFBBVFRFUk5fTk9OX0FTQ0lJX0xJTkVfQlJFQUtTLnRlc3Qoc3RhdGUxNC5pbnB1dC5zbGljZShkb2N1bWVudFN0YXJ0LCBzdGF0ZTE0LnBvc2l0aW9uKSkpIHsKICAgICAgICB0aHJvd1dhcm5pbmcoc3RhdGUxNCwgIm5vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudCIpOwogICAgICB9CiAgICAgIHN0YXRlMTQuZG9jdW1lbnRzLnB1c2goc3RhdGUxNC5yZXN1bHQpOwogICAgICBpZiAoc3RhdGUxNC5wb3NpdGlvbiA9PT0gc3RhdGUxNC5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlMTQpKSB7CiAgICAgICAgaWYgKHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKSA9PT0gNDYpIHsKICAgICAgICAgIHN0YXRlMTQucG9zaXRpb24gKz0gMzsKICAgICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxNCwgdHJ1ZSwgLTEpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHN0YXRlMTQucG9zaXRpb24gPCBzdGF0ZTE0Lmxlbmd0aCAtIDEpIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAiZW5kIG9mIHRoZSBzdHJlYW0gb3IgYSBkb2N1bWVudCBzZXBhcmF0b3IgaXMgZXhwZWN0ZWQiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGxvYWREb2N1bWVudHMoaW5wdXQsIG9wdGlvbnMpIHsKICAgICAgaW5wdXQgPSBTdHJpbmcoaW5wdXQpOwogICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgaWYgKGlucHV0Lmxlbmd0aCAhPT0gMCkgewogICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KGlucHV0Lmxlbmd0aCAtIDEpICE9PSAxMCAmJiBpbnB1dC5jaGFyQ29kZUF0KGlucHV0Lmxlbmd0aCAtIDEpICE9PSAxMykgewogICAgICAgICAgaW5wdXQgKz0gIlxuIjsKICAgICAgICB9CiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoMCkgPT09IDY1Mjc5KSB7CiAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDEpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgc3RhdGUxNCA9IG5ldyBTdGF0ZShpbnB1dCwgb3B0aW9ucyk7CiAgICAgIHZhciBudWxscG9zID0gaW5wdXQuaW5kZXhPZigiXDAiKTsKICAgICAgaWYgKG51bGxwb3MgIT09IC0xKSB7CiAgICAgICAgc3RhdGUxNC5wb3NpdGlvbiA9IG51bGxwb3M7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgIm51bGwgYnl0ZSBpcyBub3QgYWxsb3dlZCBpbiBpbnB1dCIpOwogICAgICB9CiAgICAgIHN0YXRlMTQuaW5wdXQgKz0gIlwwIjsKICAgICAgd2hpbGUgKHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKSA9PT0gMzIpIHsKICAgICAgICBzdGF0ZTE0LmxpbmVJbmRlbnQgKz0gMTsKICAgICAgICBzdGF0ZTE0LnBvc2l0aW9uICs9IDE7CiAgICAgIH0KICAgICAgd2hpbGUgKHN0YXRlMTQucG9zaXRpb24gPCBzdGF0ZTE0Lmxlbmd0aCAtIDEpIHsKICAgICAgICByZWFkRG9jdW1lbnQoc3RhdGUxNCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0YXRlMTQuZG9jdW1lbnRzOwogICAgfQogICAgZnVuY3Rpb24gbG9hZEFsbChpbnB1dCwgaXRlcmF0b3IyLCBvcHRpb25zKSB7CiAgICAgIGlmIChpdGVyYXRvcjIgIT09IG51bGwgJiYgdHlwZW9mIGl0ZXJhdG9yMiA9PT0gIm9iamVjdCIgJiYgdHlwZW9mIG9wdGlvbnMgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgb3B0aW9ucyA9IGl0ZXJhdG9yMjsKICAgICAgICBpdGVyYXRvcjIgPSBudWxsOwogICAgICB9CiAgICAgIHZhciBkb2N1bWVudHMgPSBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKTsKICAgICAgaWYgKHR5cGVvZiBpdGVyYXRvcjIgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICByZXR1cm4gZG9jdW1lbnRzOwogICAgICB9CiAgICAgIGZvciAodmFyIGluZGV4MiA9IDAsIGxlbmd0aCA9IGRvY3VtZW50cy5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBpdGVyYXRvcjIoZG9jdW1lbnRzW2luZGV4Ml0pOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBsb2FkKGlucHV0LCBvcHRpb25zKSB7CiAgICAgIHZhciBkb2N1bWVudHMgPSBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKTsKICAgICAgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9IGVsc2UgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDEpIHsKICAgICAgICByZXR1cm4gZG9jdW1lbnRzWzBdOwogICAgICB9CiAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJleHBlY3RlZCBhIHNpbmdsZSBkb2N1bWVudCBpbiB0aGUgc3RyZWFtLCBidXQgZm91bmQgbW9yZSIpOwogICAgfQogICAgZnVuY3Rpb24gc2FmZUxvYWRBbGwoaW5wdXQsIGl0ZXJhdG9yMiwgb3B0aW9ucykgewogICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yMiA9PT0gIm9iamVjdCIgJiYgaXRlcmF0b3IyICE9PSBudWxsICYmIHR5cGVvZiBvcHRpb25zID09PSAidW5kZWZpbmVkIikgewogICAgICAgIG9wdGlvbnMgPSBpdGVyYXRvcjI7CiAgICAgICAgaXRlcmF0b3IyID0gbnVsbDsKICAgICAgfQogICAgICByZXR1cm4gbG9hZEFsbChpbnB1dCwgaXRlcmF0b3IyLCBjb21tb24uZXh0ZW5kKHsgc2NoZW1hOiBERUZBVUxUX1NBRkVfU0NIRU1BIH0sIG9wdGlvbnMpKTsKICAgIH0KICAgIGZ1bmN0aW9uIHNhZmVMb2FkKGlucHV0LCBvcHRpb25zKSB7CiAgICAgIHJldHVybiBsb2FkKGlucHV0LCBjb21tb24uZXh0ZW5kKHsgc2NoZW1hOiBERUZBVUxUX1NBRkVfU0NIRU1BIH0sIG9wdGlvbnMpKTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzLmxvYWRBbGwgPSBsb2FkQWxsOwogICAgbW9kdWxlLmV4cG9ydHMubG9hZCA9IGxvYWQ7CiAgICBtb2R1bGUuZXhwb3J0cy5zYWZlTG9hZEFsbCA9IHNhZmVMb2FkQWxsOwogICAgbW9kdWxlLmV4cG9ydHMuc2FmZUxvYWQgPSBzYWZlTG9hZDsKICAgIHZhciBpMTE7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9kdW1wZXIuanMKdmFyIHJlcXVpcmVfZHVtcGVyID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9kdW1wZXIuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGNvbW1vbiA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICB2YXIgWUFNTEV4Y2VwdGlvbiA9IHJlcXVpcmVfZXhjZXB0aW9uKCk7CiAgICB2YXIgREVGQVVMVF9GVUxMX1NDSEVNQSA9IHJlcXVpcmVfZGVmYXVsdF9mdWxsKCk7CiAgICB2YXIgREVGQVVMVF9TQUZFX1NDSEVNQSA9IHJlcXVpcmVfZGVmYXVsdF9zYWZlKCk7CiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKICAgIHZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwogICAgdmFyIENIQVJfVEFCID0gOTsKICAgIHZhciBDSEFSX0xJTkVfRkVFRCA9IDEwOwogICAgdmFyIENIQVJfQ0FSUklBR0VfUkVUVVJOID0gMTM7CiAgICB2YXIgQ0hBUl9TUEFDRSA9IDMyOwogICAgdmFyIENIQVJfRVhDTEFNQVRJT04gPSAzMzsKICAgIHZhciBDSEFSX0RPVUJMRV9RVU9URSA9IDM0OwogICAgdmFyIENIQVJfU0hBUlAgPSAzNTsKICAgIHZhciBDSEFSX1BFUkNFTlQgPSAzNzsKICAgIHZhciBDSEFSX0FNUEVSU0FORCA9IDM4OwogICAgdmFyIENIQVJfU0lOR0xFX1FVT1RFID0gMzk7CiAgICB2YXIgQ0hBUl9BU1RFUklTSyA9IDQyOwogICAgdmFyIENIQVJfQ09NTUEgPSA0NDsKICAgIHZhciBDSEFSX01JTlVTID0gNDU7CiAgICB2YXIgQ0hBUl9DT0xPTiA9IDU4OwogICAgdmFyIENIQVJfRVFVQUxTID0gNjE7CiAgICB2YXIgQ0hBUl9HUkVBVEVSX1RIQU4gPSA2MjsKICAgIHZhciBDSEFSX1FVRVNUSU9OID0gNjM7CiAgICB2YXIgQ0hBUl9DT01NRVJDSUFMX0FUID0gNjQ7CiAgICB2YXIgQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUID0gOTE7CiAgICB2YXIgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCA9IDkzOwogICAgdmFyIENIQVJfR1JBVkVfQUNDRU5UID0gOTY7CiAgICB2YXIgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgPSAxMjM7CiAgICB2YXIgQ0hBUl9WRVJUSUNBTF9MSU5FID0gMTI0OwogICAgdmFyIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCA9IDEyNTsKICAgIHZhciBFU0NBUEVfU0VRVUVOQ0VTID0ge307CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzBdID0gIlxcMCI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzddID0gIlxcYSI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzhdID0gIlxcYiI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzldID0gIlxcdCI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzEwXSA9ICJcXG4iOwogICAgRVNDQVBFX1NFUVVFTkNFU1sxMV0gPSAiXFx2IjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbMTJdID0gIlxcZiI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzEzXSA9ICJcXHIiOwogICAgRVNDQVBFX1NFUVVFTkNFU1syN10gPSAiXFxlIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbMzRdID0gJ1xcIic7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzkyXSA9ICJcXFxcIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbMTMzXSA9ICJcXE4iOwogICAgRVNDQVBFX1NFUVVFTkNFU1sxNjBdID0gIlxcXyI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzgyMzJdID0gIlxcTCI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzgyMzNdID0gIlxcUCI7CiAgICB2YXIgREVQUkVDQVRFRF9CT09MRUFOU19TWU5UQVggPSBbCiAgICAgICJ5IiwKICAgICAgIlkiLAogICAgICAieWVzIiwKICAgICAgIlllcyIsCiAgICAgICJZRVMiLAogICAgICAib24iLAogICAgICAiT24iLAogICAgICAiT04iLAogICAgICAibiIsCiAgICAgICJOIiwKICAgICAgIm5vIiwKICAgICAgIk5vIiwKICAgICAgIk5PIiwKICAgICAgIm9mZiIsCiAgICAgICJPZmYiLAogICAgICAiT0ZGIgogICAgXTsKICAgIGZ1bmN0aW9uIGNvbXBpbGVTdHlsZU1hcChzY2hlbWEsIG1hcDcpIHsKICAgICAgdmFyIHJlc3VsdCwga2V5czIsIGluZGV4MiwgbGVuZ3RoLCB0YWcsIHN0eWxlLCB0eXBlNTsKICAgICAgaWYgKG1hcDcgPT09IG51bGwpIHJldHVybiB7fTsKICAgICAgcmVzdWx0ID0ge307CiAgICAgIGtleXMyID0gT2JqZWN0LmtleXMobWFwNyk7CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0ga2V5czIubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgdGFnID0ga2V5czJbaW5kZXgyXTsKICAgICAgICBzdHlsZSA9IFN0cmluZyhtYXA3W3RhZ10pOwogICAgICAgIGlmICh0YWcuc2xpY2UoMCwgMikgPT09ICIhISIpIHsKICAgICAgICAgIHRhZyA9ICJ0YWc6eWFtbC5vcmcsMjAwMjoiICsgdGFnLnNsaWNlKDIpOwogICAgICAgIH0KICAgICAgICB0eXBlNSA9IHNjaGVtYS5jb21waWxlZFR5cGVNYXBbImZhbGxiYWNrIl1bdGFnXTsKICAgICAgICBpZiAodHlwZTUgJiYgX2hhc093blByb3BlcnR5LmNhbGwodHlwZTUuc3R5bGVBbGlhc2VzLCBzdHlsZSkpIHsKICAgICAgICAgIHN0eWxlID0gdHlwZTUuc3R5bGVBbGlhc2VzW3N0eWxlXTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0W3RhZ10gPSBzdHlsZTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gZW5jb2RlSGV4KGNoYXJhY3RlcikgewogICAgICB2YXIgc3RyaW5nMywgaGFuZGxlMywgbGVuZ3RoOwogICAgICBzdHJpbmczID0gY2hhcmFjdGVyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOwogICAgICBpZiAoY2hhcmFjdGVyIDw9IDI1NSkgewogICAgICAgIGhhbmRsZTMgPSAieCI7CiAgICAgICAgbGVuZ3RoID0gMjsKICAgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPD0gNjU1MzUpIHsKICAgICAgICBoYW5kbGUzID0gInUiOwogICAgICAgIGxlbmd0aCA9IDQ7CiAgICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyIDw9IDQyOTQ5NjcyOTUpIHsKICAgICAgICBoYW5kbGUzID0gIlUiOwogICAgICAgIGxlbmd0aCA9IDg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oImNvZGUgcG9pbnQgd2l0aGluIGEgc3RyaW5nIG1heSBub3QgYmUgZ3JlYXRlciB0aGFuIDB4RkZGRkZGRkYiKTsKICAgICAgfQogICAgICByZXR1cm4gIlxcIiArIGhhbmRsZTMgKyBjb21tb24ucmVwZWF0KCIwIiwgbGVuZ3RoIC0gc3RyaW5nMy5sZW5ndGgpICsgc3RyaW5nMzsKICAgIH0KICAgIGZ1bmN0aW9uIFN0YXRlKG9wdGlvbnMpIHsKICAgICAgdGhpcy5zY2hlbWEgPSBvcHRpb25zWyJzY2hlbWEiXSB8fCBERUZBVUxUX0ZVTExfU0NIRU1BOwogICAgICB0aGlzLmluZGVudCA9IE1hdGgubWF4KDEsIG9wdGlvbnNbImluZGVudCJdIHx8IDIpOwogICAgICB0aGlzLm5vQXJyYXlJbmRlbnQgPSBvcHRpb25zWyJub0FycmF5SW5kZW50Il0gfHwgZmFsc2U7CiAgICAgIHRoaXMuc2tpcEludmFsaWQgPSBvcHRpb25zWyJza2lwSW52YWxpZCJdIHx8IGZhbHNlOwogICAgICB0aGlzLmZsb3dMZXZlbCA9IGNvbW1vbi5pc05vdGhpbmcob3B0aW9uc1siZmxvd0xldmVsIl0pID8gLTEgOiBvcHRpb25zWyJmbG93TGV2ZWwiXTsKICAgICAgdGhpcy5zdHlsZU1hcCA9IGNvbXBpbGVTdHlsZU1hcCh0aGlzLnNjaGVtYSwgb3B0aW9uc1sic3R5bGVzIl0gfHwgbnVsbCk7CiAgICAgIHRoaXMuc29ydEtleXMgPSBvcHRpb25zWyJzb3J0S2V5cyJdIHx8IGZhbHNlOwogICAgICB0aGlzLmxpbmVXaWR0aCA9IG9wdGlvbnNbImxpbmVXaWR0aCJdIHx8IDgwOwogICAgICB0aGlzLm5vUmVmcyA9IG9wdGlvbnNbIm5vUmVmcyJdIHx8IGZhbHNlOwogICAgICB0aGlzLm5vQ29tcGF0TW9kZSA9IG9wdGlvbnNbIm5vQ29tcGF0TW9kZSJdIHx8IGZhbHNlOwogICAgICB0aGlzLmNvbmRlbnNlRmxvdyA9IG9wdGlvbnNbImNvbmRlbnNlRmxvdyJdIHx8IGZhbHNlOwogICAgICB0aGlzLmltcGxpY2l0VHlwZXMgPSB0aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0OwogICAgICB0aGlzLmV4cGxpY2l0VHlwZXMgPSB0aGlzLnNjaGVtYS5jb21waWxlZEV4cGxpY2l0OwogICAgICB0aGlzLnRhZyA9IG51bGw7CiAgICAgIHRoaXMucmVzdWx0ID0gIiI7CiAgICAgIHRoaXMuZHVwbGljYXRlcyA9IFtdOwogICAgICB0aGlzLnVzZWREdXBsaWNhdGVzID0gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIGluZGVudFN0cmluZyhzdHJpbmczLCBzcGFjZXMpIHsKICAgICAgdmFyIGluZCA9IGNvbW1vbi5yZXBlYXQoIiAiLCBzcGFjZXMpLCBwb3NpdGlvbjMgPSAwLCBuZXh0MiA9IC0xLCByZXN1bHQgPSAiIiwgbGluZSwgbGVuZ3RoID0gc3RyaW5nMy5sZW5ndGg7CiAgICAgIHdoaWxlIChwb3NpdGlvbjMgPCBsZW5ndGgpIHsKICAgICAgICBuZXh0MiA9IHN0cmluZzMuaW5kZXhPZigiXG4iLCBwb3NpdGlvbjMpOwogICAgICAgIGlmIChuZXh0MiA9PT0gLTEpIHsKICAgICAgICAgIGxpbmUgPSBzdHJpbmczLnNsaWNlKHBvc2l0aW9uMyk7CiAgICAgICAgICBwb3NpdGlvbjMgPSBsZW5ndGg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxpbmUgPSBzdHJpbmczLnNsaWNlKHBvc2l0aW9uMywgbmV4dDIgKyAxKTsKICAgICAgICAgIHBvc2l0aW9uMyA9IG5leHQyICsgMTsKICAgICAgICB9CiAgICAgICAgaWYgKGxpbmUubGVuZ3RoICYmIGxpbmUgIT09ICJcbiIpIHJlc3VsdCArPSBpbmQ7CiAgICAgICAgcmVzdWx0ICs9IGxpbmU7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGdlbmVyYXRlTmV4dExpbmUoc3RhdGUxNCwgbGV2ZWwpIHsKICAgICAgcmV0dXJuICJcbiIgKyBjb21tb24ucmVwZWF0KCIgIiwgc3RhdGUxNC5pbmRlbnQgKiBsZXZlbCk7CiAgICB9CiAgICBmdW5jdGlvbiB0ZXN0SW1wbGljaXRSZXNvbHZpbmcoc3RhdGUxNCwgc3RyKSB7CiAgICAgIHZhciBpbmRleDIsIGxlbmd0aCwgdHlwZTU7CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gc3RhdGUxNC5pbXBsaWNpdFR5cGVzLmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIHR5cGU1ID0gc3RhdGUxNC5pbXBsaWNpdFR5cGVzW2luZGV4Ml07CiAgICAgICAgaWYgKHR5cGU1LnJlc29sdmUoc3RyKSkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjMTEpIHsKICAgICAgcmV0dXJuIGMxMSA9PT0gQ0hBUl9TUEFDRSB8fCBjMTEgPT09IENIQVJfVEFCOwogICAgfQogICAgZnVuY3Rpb24gaXNQcmludGFibGUoYzExKSB7CiAgICAgIHJldHVybiAzMiA8PSBjMTEgJiYgYzExIDw9IDEyNiB8fCAxNjEgPD0gYzExICYmIGMxMSA8PSA1NTI5NSAmJiBjMTEgIT09IDgyMzIgJiYgYzExICE9PSA4MjMzIHx8IDU3MzQ0IDw9IGMxMSAmJiBjMTEgPD0gNjU1MzMgJiYgYzExICE9PSA2NTI3OSB8fCA2NTUzNiA8PSBjMTEgJiYgYzExIDw9IDExMTQxMTE7CiAgICB9CiAgICBmdW5jdGlvbiBpc05zQ2hhcihjMTEpIHsKICAgICAgcmV0dXJuIGlzUHJpbnRhYmxlKGMxMSkgJiYgIWlzV2hpdGVzcGFjZShjMTEpICYmIGMxMSAhPT0gNjUyNzkgJiYgYzExICE9PSBDSEFSX0NBUlJJQUdFX1JFVFVSTiAmJiBjMTEgIT09IENIQVJfTElORV9GRUVEOwogICAgfQogICAgZnVuY3Rpb24gaXNQbGFpblNhZmUoYzExLCBwcmV2KSB7CiAgICAgIHJldHVybiBpc1ByaW50YWJsZShjMTEpICYmIGMxMSAhPT0gNjUyNzkgJiYgYzExICE9PSBDSEFSX0NPTU1BICYmIGMxMSAhPT0gQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAmJiBjMTEgIT09IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9DT0xPTiAmJiAoYzExICE9PSBDSEFSX1NIQVJQIHx8IHByZXYgJiYgaXNOc0NoYXIocHJldikpOwogICAgfQogICAgZnVuY3Rpb24gaXNQbGFpblNhZmVGaXJzdChjMTEpIHsKICAgICAgcmV0dXJuIGlzUHJpbnRhYmxlKGMxMSkgJiYgYzExICE9PSA2NTI3OSAmJiAhaXNXaGl0ZXNwYWNlKGMxMSkgJiYgYzExICE9PSBDSEFSX01JTlVTICYmIGMxMSAhPT0gQ0hBUl9RVUVTVElPTiAmJiBjMTEgIT09IENIQVJfQ09MT04gJiYgYzExICE9PSBDSEFSX0NPTU1BICYmIGMxMSAhPT0gQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAmJiBjMTEgIT09IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9TSEFSUCAmJiBjMTEgIT09IENIQVJfQU1QRVJTQU5EICYmIGMxMSAhPT0gQ0hBUl9BU1RFUklTSyAmJiBjMTEgIT09IENIQVJfRVhDTEFNQVRJT04gJiYgYzExICE9PSBDSEFSX1ZFUlRJQ0FMX0xJTkUgJiYgYzExICE9PSBDSEFSX0VRVUFMUyAmJiBjMTEgIT09IENIQVJfR1JFQVRFUl9USEFOICYmIGMxMSAhPT0gQ0hBUl9TSU5HTEVfUVVPVEUgJiYgYzExICE9PSBDSEFSX0RPVUJMRV9RVU9URSAmJiBjMTEgIT09IENIQVJfUEVSQ0VOVCAmJiBjMTEgIT09IENIQVJfQ09NTUVSQ0lBTF9BVCAmJiBjMTEgIT09IENIQVJfR1JBVkVfQUNDRU5UOwogICAgfQogICAgZnVuY3Rpb24gbmVlZEluZGVudEluZGljYXRvcihzdHJpbmczKSB7CiAgICAgIHZhciBsZWFkaW5nU3BhY2VSZSA9IC9eXG4qIC87CiAgICAgIHJldHVybiBsZWFkaW5nU3BhY2VSZS50ZXN0KHN0cmluZzMpOwogICAgfQogICAgdmFyIFNUWUxFX1BMQUlOID0gMSwgU1RZTEVfU0lOR0xFID0gMiwgU1RZTEVfTElURVJBTCA9IDMsIFNUWUxFX0ZPTERFRCA9IDQsIFNUWUxFX0RPVUJMRSA9IDU7CiAgICBmdW5jdGlvbiBjaG9vc2VTY2FsYXJTdHlsZShzdHJpbmczLCBzaW5nbGVMaW5lT25seSwgaW5kZW50UGVyTGV2ZWwsIGxpbmVXaWR0aCwgdGVzdEFtYmlndW91c1R5cGUpIHsKICAgICAgdmFyIGkxMTsKICAgICAgdmFyIGNoYXIsIHByZXZfY2hhcjsKICAgICAgdmFyIGhhc0xpbmVCcmVhayA9IGZhbHNlOwogICAgICB2YXIgaGFzRm9sZGFibGVMaW5lID0gZmFsc2U7CiAgICAgIHZhciBzaG91bGRUcmFja1dpZHRoID0gbGluZVdpZHRoICE9PSAtMTsKICAgICAgdmFyIHByZXZpb3VzTGluZUJyZWFrID0gLTE7CiAgICAgIHZhciBwbGFpbiA9IGlzUGxhaW5TYWZlRmlyc3Qoc3RyaW5nMy5jaGFyQ29kZUF0KDApKSAmJiAhaXNXaGl0ZXNwYWNlKHN0cmluZzMuY2hhckNvZGVBdChzdHJpbmczLmxlbmd0aCAtIDEpKTsKICAgICAgaWYgKHNpbmdsZUxpbmVPbmx5KSB7CiAgICAgICAgZm9yIChpMTEgPSAwOyBpMTEgPCBzdHJpbmczLmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgIGNoYXIgPSBzdHJpbmczLmNoYXJDb2RlQXQoaTExKTsKICAgICAgICAgIGlmICghaXNQcmludGFibGUoY2hhcikpIHsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0RPVUJMRTsKICAgICAgICAgIH0KICAgICAgICAgIHByZXZfY2hhciA9IGkxMSA+IDAgPyBzdHJpbmczLmNoYXJDb2RlQXQoaTExIC0gMSkgOiBudWxsOwogICAgICAgICAgcGxhaW4gPSBwbGFpbiAmJiBpc1BsYWluU2FmZShjaGFyLCBwcmV2X2NoYXIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBmb3IgKGkxMSA9IDA7IGkxMSA8IHN0cmluZzMubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgY2hhciA9IHN0cmluZzMuY2hhckNvZGVBdChpMTEpOwogICAgICAgICAgaWYgKGNoYXIgPT09IENIQVJfTElORV9GRUVEKSB7CiAgICAgICAgICAgIGhhc0xpbmVCcmVhayA9IHRydWU7CiAgICAgICAgICAgIGlmIChzaG91bGRUcmFja1dpZHRoKSB7CiAgICAgICAgICAgICAgaGFzRm9sZGFibGVMaW5lID0gaGFzRm9sZGFibGVMaW5lIHx8IC8vIEZvbGRhYmxlIGxpbmUgPSB0b28gbG9uZywgYW5kIG5vdCBtb3JlLWluZGVudGVkLgogICAgICAgICAgICAgIGkxMSAtIHByZXZpb3VzTGluZUJyZWFrIC0gMSA+IGxpbmVXaWR0aCAmJiBzdHJpbmczW3ByZXZpb3VzTGluZUJyZWFrICsgMV0gIT09ICIgIjsKICAgICAgICAgICAgICBwcmV2aW91c0xpbmVCcmVhayA9IGkxMTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmICghaXNQcmludGFibGUoY2hhcikpIHsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0RPVUJMRTsKICAgICAgICAgIH0KICAgICAgICAgIHByZXZfY2hhciA9IGkxMSA+IDAgPyBzdHJpbmczLmNoYXJDb2RlQXQoaTExIC0gMSkgOiBudWxsOwogICAgICAgICAgcGxhaW4gPSBwbGFpbiAmJiBpc1BsYWluU2FmZShjaGFyLCBwcmV2X2NoYXIpOwogICAgICAgIH0KICAgICAgICBoYXNGb2xkYWJsZUxpbmUgPSBoYXNGb2xkYWJsZUxpbmUgfHwgc2hvdWxkVHJhY2tXaWR0aCAmJiAoaTExIC0gcHJldmlvdXNMaW5lQnJlYWsgLSAxID4gbGluZVdpZHRoICYmIHN0cmluZzNbcHJldmlvdXNMaW5lQnJlYWsgKyAxXSAhPT0gIiAiKTsKICAgICAgfQogICAgICBpZiAoIWhhc0xpbmVCcmVhayAmJiAhaGFzRm9sZGFibGVMaW5lKSB7CiAgICAgICAgcmV0dXJuIHBsYWluICYmICF0ZXN0QW1iaWd1b3VzVHlwZShzdHJpbmczKSA/IFNUWUxFX1BMQUlOIDogU1RZTEVfU0lOR0xFOwogICAgICB9CiAgICAgIGlmIChpbmRlbnRQZXJMZXZlbCA+IDkgJiYgbmVlZEluZGVudEluZGljYXRvcihzdHJpbmczKSkgewogICAgICAgIHJldHVybiBTVFlMRV9ET1VCTEU7CiAgICAgIH0KICAgICAgcmV0dXJuIGhhc0ZvbGRhYmxlTGluZSA/IFNUWUxFX0ZPTERFRCA6IFNUWUxFX0xJVEVSQUw7CiAgICB9CiAgICBmdW5jdGlvbiB3cml0ZVNjYWxhcihzdGF0ZTE0LCBzdHJpbmczLCBsZXZlbCwgaXNrZXkpIHsKICAgICAgc3RhdGUxNC5kdW1wID0gKGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChzdHJpbmczLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuICInJyI7CiAgICAgICAgfQogICAgICAgIGlmICghc3RhdGUxNC5ub0NvbXBhdE1vZGUgJiYgREVQUkVDQVRFRF9CT09MRUFOU19TWU5UQVguaW5kZXhPZihzdHJpbmczKSAhPT0gLTEpIHsKICAgICAgICAgIHJldHVybiAiJyIgKyBzdHJpbmczICsgIiciOwogICAgICAgIH0KICAgICAgICB2YXIgaW5kZW50MyA9IHN0YXRlMTQuaW5kZW50ICogTWF0aC5tYXgoMSwgbGV2ZWwpOwogICAgICAgIHZhciBsaW5lV2lkdGggPSBzdGF0ZTE0LmxpbmVXaWR0aCA9PT0gLTEgPyAtMSA6IE1hdGgubWF4KE1hdGgubWluKHN0YXRlMTQubGluZVdpZHRoLCA0MCksIHN0YXRlMTQubGluZVdpZHRoIC0gaW5kZW50Myk7CiAgICAgICAgdmFyIHNpbmdsZUxpbmVPbmx5ID0gaXNrZXkgfHwgc3RhdGUxNC5mbG93TGV2ZWwgPiAtMSAmJiBsZXZlbCA+PSBzdGF0ZTE0LmZsb3dMZXZlbDsKICAgICAgICBmdW5jdGlvbiB0ZXN0QW1iaWd1aXR5KHN0cmluZzQpIHsKICAgICAgICAgIHJldHVybiB0ZXN0SW1wbGljaXRSZXNvbHZpbmcoc3RhdGUxNCwgc3RyaW5nNCk7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAoY2hvb3NlU2NhbGFyU3R5bGUoc3RyaW5nMywgc2luZ2xlTGluZU9ubHksIHN0YXRlMTQuaW5kZW50LCBsaW5lV2lkdGgsIHRlc3RBbWJpZ3VpdHkpKSB7CiAgICAgICAgICBjYXNlIFNUWUxFX1BMQUlOOgogICAgICAgICAgICByZXR1cm4gc3RyaW5nMzsKICAgICAgICAgIGNhc2UgU1RZTEVfU0lOR0xFOgogICAgICAgICAgICByZXR1cm4gIiciICsgc3RyaW5nMy5yZXBsYWNlKC8nL2csICInJyIpICsgIiciOwogICAgICAgICAgY2FzZSBTVFlMRV9MSVRFUkFMOgogICAgICAgICAgICByZXR1cm4gInwiICsgYmxvY2tIZWFkZXIoc3RyaW5nMywgc3RhdGUxNC5pbmRlbnQpICsgZHJvcEVuZGluZ05ld2xpbmUoaW5kZW50U3RyaW5nKHN0cmluZzMsIGluZGVudDMpKTsKICAgICAgICAgIGNhc2UgU1RZTEVfRk9MREVEOgogICAgICAgICAgICByZXR1cm4gIj4iICsgYmxvY2tIZWFkZXIoc3RyaW5nMywgc3RhdGUxNC5pbmRlbnQpICsgZHJvcEVuZGluZ05ld2xpbmUoaW5kZW50U3RyaW5nKGZvbGRTdHJpbmcoc3RyaW5nMywgbGluZVdpZHRoKSwgaW5kZW50MykpOwogICAgICAgICAgY2FzZSBTVFlMRV9ET1VCTEU6CiAgICAgICAgICAgIHJldHVybiAnIicgKyBlc2NhcGVTdHJpbmcoc3RyaW5nMywgbGluZVdpZHRoKSArICciJzsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJpbXBvc3NpYmxlIGVycm9yOiBpbnZhbGlkIHNjYWxhciBzdHlsZSIpOwogICAgICAgIH0KICAgICAgfSkoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGJsb2NrSGVhZGVyKHN0cmluZzMsIGluZGVudFBlckxldmVsKSB7CiAgICAgIHZhciBpbmRlbnRJbmRpY2F0b3IgPSBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZzMpID8gU3RyaW5nKGluZGVudFBlckxldmVsKSA6ICIiOwogICAgICB2YXIgY2xpcCA9IHN0cmluZzNbc3RyaW5nMy5sZW5ndGggLSAxXSA9PT0gIlxuIjsKICAgICAgdmFyIGtlZXAgPSBjbGlwICYmIChzdHJpbmczW3N0cmluZzMubGVuZ3RoIC0gMl0gPT09ICJcbiIgfHwgc3RyaW5nMyA9PT0gIlxuIik7CiAgICAgIHZhciBjaG9tcCA9IGtlZXAgPyAiKyIgOiBjbGlwID8gIiIgOiAiLSI7CiAgICAgIHJldHVybiBpbmRlbnRJbmRpY2F0b3IgKyBjaG9tcCArICJcbiI7CiAgICB9CiAgICBmdW5jdGlvbiBkcm9wRW5kaW5nTmV3bGluZShzdHJpbmczKSB7CiAgICAgIHJldHVybiBzdHJpbmczW3N0cmluZzMubGVuZ3RoIC0gMV0gPT09ICJcbiIgPyBzdHJpbmczLnNsaWNlKDAsIC0xKSA6IHN0cmluZzM7CiAgICB9CiAgICBmdW5jdGlvbiBmb2xkU3RyaW5nKHN0cmluZzMsIHdpZHRoKSB7CiAgICAgIHZhciBsaW5lUmUgPSAvKFxuKykoW15cbl0qKS9nOwogICAgICB2YXIgcmVzdWx0ID0gKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBuZXh0TEYgPSBzdHJpbmczLmluZGV4T2YoIlxuIik7CiAgICAgICAgbmV4dExGID0gbmV4dExGICE9PSAtMSA/IG5leHRMRiA6IHN0cmluZzMubGVuZ3RoOwogICAgICAgIGxpbmVSZS5sYXN0SW5kZXggPSBuZXh0TEY7CiAgICAgICAgcmV0dXJuIGZvbGRMaW5lKHN0cmluZzMuc2xpY2UoMCwgbmV4dExGKSwgd2lkdGgpOwogICAgICB9KSgpOwogICAgICB2YXIgcHJldk1vcmVJbmRlbnRlZCA9IHN0cmluZzNbMF0gPT09ICJcbiIgfHwgc3RyaW5nM1swXSA9PT0gIiAiOwogICAgICB2YXIgbW9yZUluZGVudGVkOwogICAgICB2YXIgbWF0Y2gyOwogICAgICB3aGlsZSAobWF0Y2gyID0gbGluZVJlLmV4ZWMoc3RyaW5nMykpIHsKICAgICAgICB2YXIgcHJlZml4NCA9IG1hdGNoMlsxXSwgbGluZSA9IG1hdGNoMlsyXTsKICAgICAgICBtb3JlSW5kZW50ZWQgPSBsaW5lWzBdID09PSAiICI7CiAgICAgICAgcmVzdWx0ICs9IHByZWZpeDQgKyAoIXByZXZNb3JlSW5kZW50ZWQgJiYgIW1vcmVJbmRlbnRlZCAmJiBsaW5lICE9PSAiIiA/ICJcbiIgOiAiIikgKyBmb2xkTGluZShsaW5lLCB3aWR0aCk7CiAgICAgICAgcHJldk1vcmVJbmRlbnRlZCA9IG1vcmVJbmRlbnRlZDsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gZm9sZExpbmUobGluZSwgd2lkdGgpIHsKICAgICAgaWYgKGxpbmUgPT09ICIiIHx8IGxpbmVbMF0gPT09ICIgIikgcmV0dXJuIGxpbmU7CiAgICAgIHZhciBicmVha1JlID0gLyBbXiBdL2c7CiAgICAgIHZhciBtYXRjaDI7CiAgICAgIHZhciBzdGFydCA9IDAsIGVuZDMsIGN1cnIgPSAwLCBuZXh0MiA9IDA7CiAgICAgIHZhciByZXN1bHQgPSAiIjsKICAgICAgd2hpbGUgKG1hdGNoMiA9IGJyZWFrUmUuZXhlYyhsaW5lKSkgewogICAgICAgIG5leHQyID0gbWF0Y2gyLmluZGV4OwogICAgICAgIGlmIChuZXh0MiAtIHN0YXJ0ID4gd2lkdGgpIHsKICAgICAgICAgIGVuZDMgPSBjdXJyID4gc3RhcnQgPyBjdXJyIDogbmV4dDI7CiAgICAgICAgICByZXN1bHQgKz0gIlxuIiArIGxpbmUuc2xpY2Uoc3RhcnQsIGVuZDMpOwogICAgICAgICAgc3RhcnQgPSBlbmQzICsgMTsKICAgICAgICB9CiAgICAgICAgY3VyciA9IG5leHQyOwogICAgICB9CiAgICAgIHJlc3VsdCArPSAiXG4iOwogICAgICBpZiAobGluZS5sZW5ndGggLSBzdGFydCA+IHdpZHRoICYmIGN1cnIgPiBzdGFydCkgewogICAgICAgIHJlc3VsdCArPSBsaW5lLnNsaWNlKHN0YXJ0LCBjdXJyKSArICJcbiIgKyBsaW5lLnNsaWNlKGN1cnIgKyAxKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHQgKz0gbGluZS5zbGljZShzdGFydCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdC5zbGljZSgxKTsKICAgIH0KICAgIGZ1bmN0aW9uIGVzY2FwZVN0cmluZyhzdHJpbmczKSB7CiAgICAgIHZhciByZXN1bHQgPSAiIjsKICAgICAgdmFyIGNoYXIsIG5leHRDaGFyOwogICAgICB2YXIgZXNjYXBlU2VxOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBzdHJpbmczLmxlbmd0aDsgaTExKyspIHsKICAgICAgICBjaGFyID0gc3RyaW5nMy5jaGFyQ29kZUF0KGkxMSk7CiAgICAgICAgaWYgKGNoYXIgPj0gNTUyOTYgJiYgY2hhciA8PSA1NjMxOSkgewogICAgICAgICAgbmV4dENoYXIgPSBzdHJpbmczLmNoYXJDb2RlQXQoaTExICsgMSk7CiAgICAgICAgICBpZiAobmV4dENoYXIgPj0gNTYzMjAgJiYgbmV4dENoYXIgPD0gNTczNDMpIHsKICAgICAgICAgICAgcmVzdWx0ICs9IGVuY29kZUhleCgoY2hhciAtIDU1Mjk2KSAqIDEwMjQgKyBuZXh0Q2hhciAtIDU2MzIwICsgNjU1MzYpOwogICAgICAgICAgICBpMTErKzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVzY2FwZVNlcSA9IEVTQ0FQRV9TRVFVRU5DRVNbY2hhcl07CiAgICAgICAgcmVzdWx0ICs9ICFlc2NhcGVTZXEgJiYgaXNQcmludGFibGUoY2hhcikgPyBzdHJpbmczW2kxMV0gOiBlc2NhcGVTZXEgfHwgZW5jb2RlSGV4KGNoYXIpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiB3cml0ZUZsb3dTZXF1ZW5jZShzdGF0ZTE0LCBsZXZlbCwgb2JqZWN0KSB7CiAgICAgIHZhciBfcmVzdWx0ID0gIiIsIF90YWcgPSBzdGF0ZTE0LnRhZywgaW5kZXgyLCBsZW5ndGg7CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIGlmICh3cml0ZU5vZGUoc3RhdGUxNCwgbGV2ZWwsIG9iamVjdFtpbmRleDJdLCBmYWxzZSwgZmFsc2UpKSB7CiAgICAgICAgICBpZiAoaW5kZXgyICE9PSAwKSBfcmVzdWx0ICs9ICIsIiArICghc3RhdGUxNC5jb25kZW5zZUZsb3cgPyAiICIgOiAiIik7CiAgICAgICAgICBfcmVzdWx0ICs9IHN0YXRlMTQuZHVtcDsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhdGUxNC50YWcgPSBfdGFnOwogICAgICBzdGF0ZTE0LmR1bXAgPSAiWyIgKyBfcmVzdWx0ICsgIl0iOwogICAgfQogICAgZnVuY3Rpb24gd3JpdGVCbG9ja1NlcXVlbmNlKHN0YXRlMTQsIGxldmVsLCBvYmplY3QsIGNvbXBhY3QpIHsKICAgICAgdmFyIF9yZXN1bHQgPSAiIiwgX3RhZyA9IHN0YXRlMTQudGFnLCBpbmRleDIsIGxlbmd0aDsKICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgaWYgKHdyaXRlTm9kZShzdGF0ZTE0LCBsZXZlbCArIDEsIG9iamVjdFtpbmRleDJdLCB0cnVlLCB0cnVlKSkgewogICAgICAgICAgaWYgKCFjb21wYWN0IHx8IGluZGV4MiAhPT0gMCkgewogICAgICAgICAgICBfcmVzdWx0ICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUxNCwgbGV2ZWwpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0YXRlMTQuZHVtcCAmJiBDSEFSX0xJTkVfRkVFRCA9PT0gc3RhdGUxNC5kdW1wLmNoYXJDb2RlQXQoMCkpIHsKICAgICAgICAgICAgX3Jlc3VsdCArPSAiLSI7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfcmVzdWx0ICs9ICItICI7CiAgICAgICAgICB9CiAgICAgICAgICBfcmVzdWx0ICs9IHN0YXRlMTQuZHVtcDsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhdGUxNC50YWcgPSBfdGFnOwogICAgICBzdGF0ZTE0LmR1bXAgPSBfcmVzdWx0IHx8ICJbXSI7CiAgICB9CiAgICBmdW5jdGlvbiB3cml0ZUZsb3dNYXBwaW5nKHN0YXRlMTQsIGxldmVsLCBvYmplY3QpIHsKICAgICAgdmFyIF9yZXN1bHQgPSAiIiwgX3RhZyA9IHN0YXRlMTQudGFnLCBvYmplY3RLZXlMaXN0ID0gT2JqZWN0LmtleXMob2JqZWN0KSwgaW5kZXgyLCBsZW5ndGgsIG9iamVjdEtleSwgb2JqZWN0VmFsdWUsIHBhaXJCdWZmZXI7CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gb2JqZWN0S2V5TGlzdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBwYWlyQnVmZmVyID0gIiI7CiAgICAgICAgaWYgKGluZGV4MiAhPT0gMCkgcGFpckJ1ZmZlciArPSAiLCAiOwogICAgICAgIGlmIChzdGF0ZTE0LmNvbmRlbnNlRmxvdykgcGFpckJ1ZmZlciArPSAnIic7CiAgICAgICAgb2JqZWN0S2V5ID0gb2JqZWN0S2V5TGlzdFtpbmRleDJdOwogICAgICAgIG9iamVjdFZhbHVlID0gb2JqZWN0W29iamVjdEtleV07CiAgICAgICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUxNCwgbGV2ZWwsIG9iamVjdEtleSwgZmFsc2UsIGZhbHNlKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZTE0LmR1bXAubGVuZ3RoID4gMTAyNCkgcGFpckJ1ZmZlciArPSAiPyAiOwogICAgICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUxNC5kdW1wICsgKHN0YXRlMTQuY29uZGVuc2VGbG93ID8gJyInIDogIiIpICsgIjoiICsgKHN0YXRlMTQuY29uZGVuc2VGbG93ID8gIiIgOiAiICIpOwogICAgICAgIGlmICghd3JpdGVOb2RlKHN0YXRlMTQsIGxldmVsLCBvYmplY3RWYWx1ZSwgZmFsc2UsIGZhbHNlKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUxNC5kdW1wOwogICAgICAgIF9yZXN1bHQgKz0gcGFpckJ1ZmZlcjsKICAgICAgfQogICAgICBzdGF0ZTE0LnRhZyA9IF90YWc7CiAgICAgIHN0YXRlMTQuZHVtcCA9ICJ7IiArIF9yZXN1bHQgKyAifSI7CiAgICB9CiAgICBmdW5jdGlvbiB3cml0ZUJsb2NrTWFwcGluZyhzdGF0ZTE0LCBsZXZlbCwgb2JqZWN0LCBjb21wYWN0KSB7CiAgICAgIHZhciBfcmVzdWx0ID0gIiIsIF90YWcgPSBzdGF0ZTE0LnRhZywgb2JqZWN0S2V5TGlzdCA9IE9iamVjdC5rZXlzKG9iamVjdCksIGluZGV4MiwgbGVuZ3RoLCBvYmplY3RLZXksIG9iamVjdFZhbHVlLCBleHBsaWNpdFBhaXIsIHBhaXJCdWZmZXI7CiAgICAgIGlmIChzdGF0ZTE0LnNvcnRLZXlzID09PSB0cnVlKSB7CiAgICAgICAgb2JqZWN0S2V5TGlzdC5zb3J0KCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YXRlMTQuc29ydEtleXMgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBvYmplY3RLZXlMaXN0LnNvcnQoc3RhdGUxNC5zb3J0S2V5cyk7CiAgICAgIH0gZWxzZSBpZiAoc3RhdGUxNC5zb3J0S2V5cykgewogICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJzb3J0S2V5cyBtdXN0IGJlIGEgYm9vbGVhbiBvciBhIGZ1bmN0aW9uIik7CiAgICAgIH0KICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBvYmplY3RLZXlMaXN0Lmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIHBhaXJCdWZmZXIgPSAiIjsKICAgICAgICBpZiAoIWNvbXBhY3QgfHwgaW5kZXgyICE9PSAwKSB7CiAgICAgICAgICBwYWlyQnVmZmVyICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUxNCwgbGV2ZWwpOwogICAgICAgIH0KICAgICAgICBvYmplY3RLZXkgPSBvYmplY3RLZXlMaXN0W2luZGV4Ml07CiAgICAgICAgb2JqZWN0VmFsdWUgPSBvYmplY3Rbb2JqZWN0S2V5XTsKICAgICAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZTE0LCBsZXZlbCArIDEsIG9iamVjdEtleSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBleHBsaWNpdFBhaXIgPSBzdGF0ZTE0LnRhZyAhPT0gbnVsbCAmJiBzdGF0ZTE0LnRhZyAhPT0gIj8iIHx8IHN0YXRlMTQuZHVtcCAmJiBzdGF0ZTE0LmR1bXAubGVuZ3RoID4gMTAyNDsKICAgICAgICBpZiAoZXhwbGljaXRQYWlyKSB7CiAgICAgICAgICBpZiAoc3RhdGUxNC5kdW1wICYmIENIQVJfTElORV9GRUVEID09PSBzdGF0ZTE0LmR1bXAuY2hhckNvZGVBdCgwKSkgewogICAgICAgICAgICBwYWlyQnVmZmVyICs9ICI/IjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBhaXJCdWZmZXIgKz0gIj8gIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcGFpckJ1ZmZlciArPSBzdGF0ZTE0LmR1bXA7CiAgICAgICAgaWYgKGV4cGxpY2l0UGFpcikgewogICAgICAgICAgcGFpckJ1ZmZlciArPSBnZW5lcmF0ZU5leHRMaW5lKHN0YXRlMTQsIGxldmVsKTsKICAgICAgICB9CiAgICAgICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUxNCwgbGV2ZWwgKyAxLCBvYmplY3RWYWx1ZSwgdHJ1ZSwgZXhwbGljaXRQYWlyKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZTE0LmR1bXAgJiYgQ0hBUl9MSU5FX0ZFRUQgPT09IHN0YXRlMTQuZHVtcC5jaGFyQ29kZUF0KDApKSB7CiAgICAgICAgICBwYWlyQnVmZmVyICs9ICI6IjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcGFpckJ1ZmZlciArPSAiOiAiOwogICAgICAgIH0KICAgICAgICBwYWlyQnVmZmVyICs9IHN0YXRlMTQuZHVtcDsKICAgICAgICBfcmVzdWx0ICs9IHBhaXJCdWZmZXI7CiAgICAgIH0KICAgICAgc3RhdGUxNC50YWcgPSBfdGFnOwogICAgICBzdGF0ZTE0LmR1bXAgPSBfcmVzdWx0IHx8ICJ7fSI7CiAgICB9CiAgICBmdW5jdGlvbiBkZXRlY3RUeXBlKHN0YXRlMTQsIG9iamVjdCwgZXhwbGljaXQpIHsKICAgICAgdmFyIF9yZXN1bHQsIHR5cGVMaXN0LCBpbmRleDIsIGxlbmd0aCwgdHlwZTUsIHN0eWxlOwogICAgICB0eXBlTGlzdCA9IGV4cGxpY2l0ID8gc3RhdGUxNC5leHBsaWNpdFR5cGVzIDogc3RhdGUxNC5pbXBsaWNpdFR5cGVzOwogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IHR5cGVMaXN0Lmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIHR5cGU1ID0gdHlwZUxpc3RbaW5kZXgyXTsKICAgICAgICBpZiAoKHR5cGU1Lmluc3RhbmNlT2YgfHwgdHlwZTUucHJlZGljYXRlKSAmJiAoIXR5cGU1Lmluc3RhbmNlT2YgfHwgdHlwZW9mIG9iamVjdCA9PT0gIm9iamVjdCIgJiYgb2JqZWN0IGluc3RhbmNlb2YgdHlwZTUuaW5zdGFuY2VPZikgJiYgKCF0eXBlNS5wcmVkaWNhdGUgfHwgdHlwZTUucHJlZGljYXRlKG9iamVjdCkpKSB7CiAgICAgICAgICBzdGF0ZTE0LnRhZyA9IGV4cGxpY2l0ID8gdHlwZTUudGFnIDogIj8iOwogICAgICAgICAgaWYgKHR5cGU1LnJlcHJlc2VudCkgewogICAgICAgICAgICBzdHlsZSA9IHN0YXRlMTQuc3R5bGVNYXBbdHlwZTUudGFnXSB8fCB0eXBlNS5kZWZhdWx0U3R5bGU7CiAgICAgICAgICAgIGlmIChfdG9TdHJpbmcuY2FsbCh0eXBlNS5yZXByZXNlbnQpID09PSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgICAgX3Jlc3VsdCA9IHR5cGU1LnJlcHJlc2VudChvYmplY3QsIHN0eWxlKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbCh0eXBlNS5yZXByZXNlbnQsIHN0eWxlKSkgewogICAgICAgICAgICAgIF9yZXN1bHQgPSB0eXBlNS5yZXByZXNlbnRbc3R5bGVdKG9iamVjdCwgc3R5bGUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCIhPCIgKyB0eXBlNS50YWcgKyAnPiB0YWcgcmVzb2x2ZXIgYWNjZXB0cyBub3QgIicgKyBzdHlsZSArICciIHN0eWxlJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3RhdGUxNC5kdW1wID0gX3Jlc3VsdDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiB3cml0ZU5vZGUoc3RhdGUxNCwgbGV2ZWwsIG9iamVjdCwgYmxvY2ssIGNvbXBhY3QsIGlza2V5KSB7CiAgICAgIHN0YXRlMTQudGFnID0gbnVsbDsKICAgICAgc3RhdGUxNC5kdW1wID0gb2JqZWN0OwogICAgICBpZiAoIWRldGVjdFR5cGUoc3RhdGUxNCwgb2JqZWN0LCBmYWxzZSkpIHsKICAgICAgICBkZXRlY3RUeXBlKHN0YXRlMTQsIG9iamVjdCwgdHJ1ZSk7CiAgICAgIH0KICAgICAgdmFyIHR5cGU1ID0gX3RvU3RyaW5nLmNhbGwoc3RhdGUxNC5kdW1wKTsKICAgICAgaWYgKGJsb2NrKSB7CiAgICAgICAgYmxvY2sgPSBzdGF0ZTE0LmZsb3dMZXZlbCA8IDAgfHwgc3RhdGUxNC5mbG93TGV2ZWwgPiBsZXZlbDsKICAgICAgfQogICAgICB2YXIgb2JqZWN0T3JBcnJheSA9IHR5cGU1ID09PSAiW29iamVjdCBPYmplY3RdIiB8fCB0eXBlNSA9PT0gIltvYmplY3QgQXJyYXldIiwgZHVwbGljYXRlSW5kZXgsIGR1cGxpY2F0ZTsKICAgICAgaWYgKG9iamVjdE9yQXJyYXkpIHsKICAgICAgICBkdXBsaWNhdGVJbmRleCA9IHN0YXRlMTQuZHVwbGljYXRlcy5pbmRleE9mKG9iamVjdCk7CiAgICAgICAgZHVwbGljYXRlID0gZHVwbGljYXRlSW5kZXggIT09IC0xOwogICAgICB9CiAgICAgIGlmIChzdGF0ZTE0LnRhZyAhPT0gbnVsbCAmJiBzdGF0ZTE0LnRhZyAhPT0gIj8iIHx8IGR1cGxpY2F0ZSB8fCBzdGF0ZTE0LmluZGVudCAhPT0gMiAmJiBsZXZlbCA+IDApIHsKICAgICAgICBjb21wYWN0ID0gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKGR1cGxpY2F0ZSAmJiBzdGF0ZTE0LnVzZWREdXBsaWNhdGVzW2R1cGxpY2F0ZUluZGV4XSkgewogICAgICAgIHN0YXRlMTQuZHVtcCA9ICIqcmVmXyIgKyBkdXBsaWNhdGVJbmRleDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAob2JqZWN0T3JBcnJheSAmJiBkdXBsaWNhdGUgJiYgIXN0YXRlMTQudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdKSB7CiAgICAgICAgICBzdGF0ZTE0LnVzZWREdXBsaWNhdGVzW2R1cGxpY2F0ZUluZGV4XSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlNSA9PT0gIltvYmplY3QgT2JqZWN0XSIpIHsKICAgICAgICAgIGlmIChibG9jayAmJiBPYmplY3Qua2V5cyhzdGF0ZTE0LmR1bXApLmxlbmd0aCAhPT0gMCkgewogICAgICAgICAgICB3cml0ZUJsb2NrTWFwcGluZyhzdGF0ZTE0LCBsZXZlbCwgc3RhdGUxNC5kdW1wLCBjb21wYWN0KTsKICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSkgewogICAgICAgICAgICAgIHN0YXRlMTQuZHVtcCA9ICImcmVmXyIgKyBkdXBsaWNhdGVJbmRleCArIHN0YXRlMTQuZHVtcDsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgd3JpdGVGbG93TWFwcGluZyhzdGF0ZTE0LCBsZXZlbCwgc3RhdGUxNC5kdW1wKTsKICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSkgewogICAgICAgICAgICAgIHN0YXRlMTQuZHVtcCA9ICImcmVmXyIgKyBkdXBsaWNhdGVJbmRleCArICIgIiArIHN0YXRlMTQuZHVtcDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAodHlwZTUgPT09ICJbb2JqZWN0IEFycmF5XSIpIHsKICAgICAgICAgIHZhciBhcnJheUxldmVsID0gc3RhdGUxNC5ub0FycmF5SW5kZW50ICYmIGxldmVsID4gMCA/IGxldmVsIC0gMSA6IGxldmVsOwogICAgICAgICAgaWYgKGJsb2NrICYmIHN0YXRlMTQuZHVtcC5sZW5ndGggIT09IDApIHsKICAgICAgICAgICAgd3JpdGVCbG9ja1NlcXVlbmNlKHN0YXRlMTQsIGFycmF5TGV2ZWwsIHN0YXRlMTQuZHVtcCwgY29tcGFjdCk7CiAgICAgICAgICAgIGlmIChkdXBsaWNhdGUpIHsKICAgICAgICAgICAgICBzdGF0ZTE0LmR1bXAgPSAiJnJlZl8iICsgZHVwbGljYXRlSW5kZXggKyBzdGF0ZTE0LmR1bXA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHdyaXRlRmxvd1NlcXVlbmNlKHN0YXRlMTQsIGFycmF5TGV2ZWwsIHN0YXRlMTQuZHVtcCk7CiAgICAgICAgICAgIGlmIChkdXBsaWNhdGUpIHsKICAgICAgICAgICAgICBzdGF0ZTE0LmR1bXAgPSAiJnJlZl8iICsgZHVwbGljYXRlSW5kZXggKyAiICIgKyBzdGF0ZTE0LmR1bXA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHR5cGU1ID09PSAiW29iamVjdCBTdHJpbmddIikgewogICAgICAgICAgaWYgKHN0YXRlMTQudGFnICE9PSAiPyIpIHsKICAgICAgICAgICAgd3JpdGVTY2FsYXIoc3RhdGUxNCwgc3RhdGUxNC5kdW1wLCBsZXZlbCwgaXNrZXkpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoc3RhdGUxNC5za2lwSW52YWxpZCkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oInVuYWNjZXB0YWJsZSBraW5kIG9mIGFuIG9iamVjdCB0byBkdW1wICIgKyB0eXBlNSk7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZTE0LnRhZyAhPT0gbnVsbCAmJiBzdGF0ZTE0LnRhZyAhPT0gIj8iKSB7CiAgICAgICAgICBzdGF0ZTE0LmR1bXAgPSAiITwiICsgc3RhdGUxNC50YWcgKyAiPiAiICsgc3RhdGUxNC5kdW1wOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldER1cGxpY2F0ZVJlZmVyZW5jZXMob2JqZWN0LCBzdGF0ZTE0KSB7CiAgICAgIHZhciBvYmplY3RzID0gW10sIGR1cGxpY2F0ZXNJbmRleGVzID0gW10sIGluZGV4MiwgbGVuZ3RoOwogICAgICBpbnNwZWN0Tm9kZShvYmplY3QsIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKTsKICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBkdXBsaWNhdGVzSW5kZXhlcy5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBzdGF0ZTE0LmR1cGxpY2F0ZXMucHVzaChvYmplY3RzW2R1cGxpY2F0ZXNJbmRleGVzW2luZGV4Ml1dKTsKICAgICAgfQogICAgICBzdGF0ZTE0LnVzZWREdXBsaWNhdGVzID0gbmV3IEFycmF5KGxlbmd0aCk7CiAgICB9CiAgICBmdW5jdGlvbiBpbnNwZWN0Tm9kZShvYmplY3QsIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKSB7CiAgICAgIHZhciBvYmplY3RLZXlMaXN0LCBpbmRleDIsIGxlbmd0aDsKICAgICAgaWYgKG9iamVjdCAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAib2JqZWN0IikgewogICAgICAgIGluZGV4MiA9IG9iamVjdHMuaW5kZXhPZihvYmplY3QpOwogICAgICAgIGlmIChpbmRleDIgIT09IC0xKSB7CiAgICAgICAgICBpZiAoZHVwbGljYXRlc0luZGV4ZXMuaW5kZXhPZihpbmRleDIpID09PSAtMSkgewogICAgICAgICAgICBkdXBsaWNhdGVzSW5kZXhlcy5wdXNoKGluZGV4Mik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG9iamVjdHMucHVzaChvYmplY3QpOwogICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkgewogICAgICAgICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICAgICAgICBpbnNwZWN0Tm9kZShvYmplY3RbaW5kZXgyXSwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBvYmplY3RLZXlMaXN0ID0gT2JqZWN0LmtleXMob2JqZWN0KTsKICAgICAgICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBvYmplY3RLZXlMaXN0Lmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgICAgICAgIGluc3BlY3ROb2RlKG9iamVjdFtvYmplY3RLZXlMaXN0W2luZGV4Ml1dLCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGR1bXAoaW5wdXQsIG9wdGlvbnMpIHsKICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgIHZhciBzdGF0ZTE0ID0gbmV3IFN0YXRlKG9wdGlvbnMpOwogICAgICBpZiAoIXN0YXRlMTQubm9SZWZzKSBnZXREdXBsaWNhdGVSZWZlcmVuY2VzKGlucHV0LCBzdGF0ZTE0KTsKICAgICAgaWYgKHdyaXRlTm9kZShzdGF0ZTE0LCAwLCBpbnB1dCwgdHJ1ZSwgdHJ1ZSkpIHJldHVybiBzdGF0ZTE0LmR1bXAgKyAiXG4iOwogICAgICByZXR1cm4gIiI7CiAgICB9CiAgICBmdW5jdGlvbiBzYWZlRHVtcChpbnB1dCwgb3B0aW9ucykgewogICAgICByZXR1cm4gZHVtcChpbnB1dCwgY29tbW9uLmV4dGVuZCh7IHNjaGVtYTogREVGQVVMVF9TQUZFX1NDSEVNQSB9LCBvcHRpb25zKSk7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cy5kdW1wID0gZHVtcDsKICAgIG1vZHVsZS5leHBvcnRzLnNhZmVEdW1wID0gc2FmZUR1bXA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC5qcwp2YXIgcmVxdWlyZV9qc195YW1sID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgbG9hZGVyID0gcmVxdWlyZV9sb2FkZXIoKTsKICAgIHZhciBkdW1wZXIgPSByZXF1aXJlX2R1bXBlcigpOwogICAgZnVuY3Rpb24gZGVwcmVjYXRlZChuYW1lKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkZ1bmN0aW9uICIgKyBuYW1lICsgIiBpcyBkZXByZWNhdGVkIGFuZCBjYW5ub3QgYmUgdXNlZC4iKTsKICAgICAgfTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzLlR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIG1vZHVsZS5leHBvcnRzLlNjaGVtYSA9IHJlcXVpcmVfc2NoZW1hKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5GQUlMU0FGRV9TQ0hFTUEgPSByZXF1aXJlX2ZhaWxzYWZlKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5KU09OX1NDSEVNQSA9IHJlcXVpcmVfanNvbigpOwogICAgbW9kdWxlLmV4cG9ydHMuQ09SRV9TQ0hFTUEgPSByZXF1aXJlX2NvcmUoKTsKICAgIG1vZHVsZS5leHBvcnRzLkRFRkFVTFRfU0FGRV9TQ0hFTUEgPSByZXF1aXJlX2RlZmF1bHRfc2FmZSgpOwogICAgbW9kdWxlLmV4cG9ydHMuREVGQVVMVF9GVUxMX1NDSEVNQSA9IHJlcXVpcmVfZGVmYXVsdF9mdWxsKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5sb2FkID0gbG9hZGVyLmxvYWQ7CiAgICBtb2R1bGUuZXhwb3J0cy5sb2FkQWxsID0gbG9hZGVyLmxvYWRBbGw7CiAgICBtb2R1bGUuZXhwb3J0cy5zYWZlTG9hZCA9IGxvYWRlci5zYWZlTG9hZDsKICAgIG1vZHVsZS5leHBvcnRzLnNhZmVMb2FkQWxsID0gbG9hZGVyLnNhZmVMb2FkQWxsOwogICAgbW9kdWxlLmV4cG9ydHMuZHVtcCA9IGR1bXBlci5kdW1wOwogICAgbW9kdWxlLmV4cG9ydHMuc2FmZUR1bXAgPSBkdW1wZXIuc2FmZUR1bXA7CiAgICBtb2R1bGUuZXhwb3J0cy5ZQU1MRXhjZXB0aW9uID0gcmVxdWlyZV9leGNlcHRpb24oKTsKICAgIG1vZHVsZS5leHBvcnRzLk1JTklNQUxfU0NIRU1BID0gcmVxdWlyZV9mYWlsc2FmZSgpOwogICAgbW9kdWxlLmV4cG9ydHMuU0FGRV9TQ0hFTUEgPSByZXF1aXJlX2RlZmF1bHRfc2FmZSgpOwogICAgbW9kdWxlLmV4cG9ydHMuREVGQVVMVF9TQ0hFTUEgPSByZXF1aXJlX2RlZmF1bHRfZnVsbCgpOwogICAgbW9kdWxlLmV4cG9ydHMuc2NhbiA9IGRlcHJlY2F0ZWQoInNjYW4iKTsKICAgIG1vZHVsZS5leHBvcnRzLnBhcnNlID0gZGVwcmVjYXRlZCgicGFyc2UiKTsKICAgIG1vZHVsZS5leHBvcnRzLmNvbXBvc2UgPSBkZXByZWNhdGVkKCJjb21wb3NlIik7CiAgICBtb2R1bGUuZXhwb3J0cy5hZGRDb25zdHJ1Y3RvciA9IGRlcHJlY2F0ZWQoImFkZENvbnN0cnVjdG9yIik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9pbmRleC5qcwp2YXIgcmVxdWlyZV9qc195YW1sMiA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvaW5kZXguanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIHlhbWwgPSByZXF1aXJlX2pzX3lhbWwoKTsKICAgIG1vZHVsZS5leHBvcnRzID0geWFtbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0eWFtbEAyLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR5YW1sL2Rpc3RfdHMvc21hcnR5YW1sLnBsdWdpbnMuanMKdmFyIHJlcXVpcmVfc21hcnR5YW1sX3BsdWdpbnMgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0eWFtbEAyLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR5YW1sL2Rpc3RfdHMvc21hcnR5YW1sLnBsdWdpbnMuanMiKGV4cG9ydHMpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBfX2NyZWF0ZUJpbmRpbmcyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvMTMsIGsyMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBtNltrNF07CiAgICAgIH0gfSk7CiAgICB9KSA6IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIG8xM1trMjJdID0gbTZbazRdOwogICAgfSkpOwogICAgdmFyIF9fc2V0TW9kdWxlRGVmYXVsdDIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8xMywgdjUpIHsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8xMywgImRlZmF1bHQiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2NSB9KTsKICAgIH0pIDogZnVuY3Rpb24obzEzLCB2NSkgewogICAgICBvMTNbImRlZmF1bHQiXSA9IHY1OwogICAgfSk7CiAgICB2YXIgX19pbXBvcnRTdGFyMiA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24obW9kKSB7CiAgICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7CiAgICAgIHZhciByZXN1bHQgPSB7fTsKICAgICAgaWYgKG1vZCAhPSBudWxsKSB7CiAgICAgICAgZm9yICh2YXIgazQgaW4gbW9kKSBpZiAoazQgIT09ICJkZWZhdWx0IiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGs0KSkgX19jcmVhdGVCaW5kaW5nMihyZXN1bHQsIG1vZCwgazQpOwogICAgICB9CiAgICAgIF9fc2V0TW9kdWxlRGVmYXVsdDIocmVzdWx0LCBtb2QpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICBleHBvcnRzLmpzWWFtbCA9IHZvaWQgMDsKICAgIHZhciBqc1lhbWwgPSBfX2ltcG9ydFN0YXIyKHJlcXVpcmVfanNfeWFtbDIoKSk7CiAgICBleHBvcnRzLmpzWWFtbCA9IGpzWWFtbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0eWFtbEAyLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR5YW1sL2Rpc3RfdHMvaW5kZXguanMKdmFyIHJlcXVpcmVfZGlzdF90czIgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0eWFtbEAyLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR5YW1sL2Rpc3RfdHMvaW5kZXguanMiKGV4cG9ydHMpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBfX2NyZWF0ZUJpbmRpbmcyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvMTMsIGsyMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBtNltrNF07CiAgICAgIH0gfSk7CiAgICB9KSA6IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIG8xM1trMjJdID0gbTZbazRdOwogICAgfSkpOwogICAgdmFyIF9fc2V0TW9kdWxlRGVmYXVsdDIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8xMywgdjUpIHsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8xMywgImRlZmF1bHQiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2NSB9KTsKICAgIH0pIDogZnVuY3Rpb24obzEzLCB2NSkgewogICAgICBvMTNbImRlZmF1bHQiXSA9IHY1OwogICAgfSk7CiAgICB2YXIgX19pbXBvcnRTdGFyMiA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24obW9kKSB7CiAgICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7CiAgICAgIHZhciByZXN1bHQgPSB7fTsKICAgICAgaWYgKG1vZCAhPSBudWxsKSB7CiAgICAgICAgZm9yICh2YXIgazQgaW4gbW9kKSBpZiAoazQgIT09ICJkZWZhdWx0IiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGs0KSkgX19jcmVhdGVCaW5kaW5nMihyZXN1bHQsIG1vZCwgazQpOwogICAgICB9CiAgICAgIF9fc2V0TW9kdWxlRGVmYXVsdDIocmVzdWx0LCBtb2QpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICBleHBvcnRzLm9iamVjdFRvWWFtbFN0cmluZyA9IGV4cG9ydHMueWFtbFN0cmluZ1RvT2JqZWN0ID0gdm9pZCAwOwogICAgdmFyIHBsdWdpbnMzID0gX19pbXBvcnRTdGFyMihyZXF1aXJlX3NtYXJ0eWFtbF9wbHVnaW5zKCkpOwogICAgZXhwb3J0cy55YW1sU3RyaW5nVG9PYmplY3QgPSBhc3luYyAoeWFtbFN0cmluZ0FyZywgb3B0aW9uc0FyZyA9IHt9KSA9PiB7CiAgICAgIHJldHVybiBwbHVnaW5zMy5qc1lhbWwuc2FmZUxvYWQoeWFtbFN0cmluZ0FyZyk7CiAgICB9OwogICAgZXhwb3J0cy5vYmplY3RUb1lhbWxTdHJpbmcgPSBhc3luYyAob2JqZWN0QXJnLCBvcHRpb25zQXJnID0ge30pID0+IHsKICAgICAgcmV0dXJuIHBsdWdpbnMzLmpzWWFtbC5zYWZlRHVtcChvYmplY3RBcmcpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2JhaWxAMi4wLjIvbm9kZV9tb2R1bGVzL2JhaWwvaW5kZXguanMKZnVuY3Rpb24gYmFpbChlcnJvcikgewogIGlmIChlcnJvcikgewogICAgdGhyb3cgZXJyb3I7CiAgfQp9CnZhciBpbml0X2JhaWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9iYWlsQDIuMC4yL25vZGVfbW9kdWxlcy9iYWlsL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2V4dGVuZEAzLjAuMi9ub2RlX21vZHVsZXMvZXh0ZW5kL2luZGV4LmpzCnZhciByZXF1aXJlX2V4dGVuZCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vZXh0ZW5kQDMuMC4yL25vZGVfbW9kdWxlcy9leHRlbmQvaW5kZXguanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgICB2YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwogICAgdmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5OwogICAgdmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwogICAgdmFyIGlzQXJyYXkzID0gZnVuY3Rpb24gaXNBcnJheTQoYXJyKSB7CiAgICAgIGlmICh0eXBlb2YgQXJyYXkuaXNBcnJheSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFycik7CiAgICAgIH0KICAgICAgcmV0dXJuIHRvU3RyLmNhbGwoYXJyKSA9PT0gIltvYmplY3QgQXJyYXldIjsKICAgIH07CiAgICB2YXIgaXNQbGFpbk9iamVjdDIgPSBmdW5jdGlvbiBpc1BsYWluT2JqZWN0MyhvYmopIHsKICAgICAgaWYgKCFvYmogfHwgdG9TdHIuY2FsbChvYmopICE9PSAiW29iamVjdCBPYmplY3RdIikgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB2YXIgaGFzT3duQ29uc3RydWN0b3IgPSBoYXNPd24uY2FsbChvYmosICJjb25zdHJ1Y3RvciIpOwogICAgICB2YXIgaGFzSXNQcm90b3R5cGVPZiA9IG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY29uc3RydWN0b3IucHJvdG90eXBlICYmIGhhc093bi5jYWxsKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsICJpc1Byb3RvdHlwZU9mIik7CiAgICAgIGlmIChvYmouY29uc3RydWN0b3IgJiYgIWhhc093bkNvbnN0cnVjdG9yICYmICFoYXNJc1Byb3RvdHlwZU9mKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHZhciBrZXkyOwogICAgICBmb3IgKGtleTIgaW4gb2JqKSB7CiAgICAgIH0KICAgICAgcmV0dXJuIHR5cGVvZiBrZXkyID09PSAidW5kZWZpbmVkIiB8fCBoYXNPd24uY2FsbChvYmosIGtleTIpOwogICAgfTsKICAgIHZhciBzZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIHNldFByb3BlcnR5Mih0YXJnZXQsIG9wdGlvbnMpIHsKICAgICAgaWYgKGRlZmluZVByb3BlcnR5ICYmIG9wdGlvbnMubmFtZSA9PT0gIl9fcHJvdG9fXyIpIHsKICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG9wdGlvbnMubmFtZSwgewogICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgIHZhbHVlOiBvcHRpb25zLm5ld1ZhbHVlLAogICAgICAgICAgd3JpdGFibGU6IHRydWUKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0YXJnZXRbb3B0aW9ucy5uYW1lXSA9IG9wdGlvbnMubmV3VmFsdWU7CiAgICAgIH0KICAgIH07CiAgICB2YXIgZ2V0UHJvcGVydHkgPSBmdW5jdGlvbiBnZXRQcm9wZXJ0eTIob2JqLCBuYW1lKSB7CiAgICAgIGlmIChuYW1lID09PSAiX19wcm90b19fIikgewogICAgICAgIGlmICghaGFzT3duLmNhbGwob2JqLCBuYW1lKSkgewogICAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgICB9IGVsc2UgaWYgKGdPUEQpIHsKICAgICAgICAgIHJldHVybiBnT1BEKG9iaiwgbmFtZSkudmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBvYmpbbmFtZV07CiAgICB9OwogICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBleHRlbmQzKCkgewogICAgICB2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmU7CiAgICAgIHZhciB0YXJnZXQgPSBhcmd1bWVudHNbMF07CiAgICAgIHZhciBpMTEgPSAxOwogICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsKICAgICAgdmFyIGRlZXAgPSBmYWxzZTsKICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICJib29sZWFuIikgewogICAgICAgIGRlZXAgPSB0YXJnZXQ7CiAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzFdIHx8IHt9OwogICAgICAgIGkxMSA9IDI7CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCA9PSBudWxsIHx8IHR5cGVvZiB0YXJnZXQgIT09ICJvYmplY3QiICYmIHR5cGVvZiB0YXJnZXQgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB0YXJnZXQgPSB7fTsKICAgICAgfQogICAgICBmb3IgKDsgaTExIDwgbGVuZ3RoOyArK2kxMSkgewogICAgICAgIG9wdGlvbnMgPSBhcmd1bWVudHNbaTExXTsKICAgICAgICBpZiAob3B0aW9ucyAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKG5hbWUgaW4gb3B0aW9ucykgewogICAgICAgICAgICBzcmMgPSBnZXRQcm9wZXJ0eSh0YXJnZXQsIG5hbWUpOwogICAgICAgICAgICBjb3B5ID0gZ2V0UHJvcGVydHkob3B0aW9ucywgbmFtZSk7CiAgICAgICAgICAgIGlmICh0YXJnZXQgIT09IGNvcHkpIHsKICAgICAgICAgICAgICBpZiAoZGVlcCAmJiBjb3B5ICYmIChpc1BsYWluT2JqZWN0Mihjb3B5KSB8fCAoY29weUlzQXJyYXkgPSBpc0FycmF5Myhjb3B5KSkpKSB7CiAgICAgICAgICAgICAgICBpZiAoY29weUlzQXJyYXkpIHsKICAgICAgICAgICAgICAgICAgY29weUlzQXJyYXkgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgaXNBcnJheTMoc3JjKSA/IHNyYyA6IFtdOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgaXNQbGFpbk9iamVjdDIoc3JjKSA/IHNyYyA6IHt9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc2V0UHJvcGVydHkodGFyZ2V0LCB7IG5hbWUsIG5ld1ZhbHVlOiBleHRlbmQzKGRlZXAsIGNsb25lLCBjb3B5KSB9KTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb3B5ICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgc2V0UHJvcGVydHkodGFyZ2V0LCB7IG5hbWUsIG5ld1ZhbHVlOiBjb3B5IH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdGFyZ2V0OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RldmxvcEAxLjEuMC9ub2RlX21vZHVsZXMvZGV2bG9wL2xpYi9kZWZhdWx0LmpzCmZ1bmN0aW9uIGRlcHJlY2F0ZShmbikgewogIHJldHVybiBmbjsKfQpmdW5jdGlvbiBlcXVhbCgpIHsKfQpmdW5jdGlvbiBvaygpIHsKfQpmdW5jdGlvbiB1bnJlYWNoYWJsZSgpIHsKfQp2YXIgaW5pdF9kZWZhdWx0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGV2bG9wQDEuMS4wL25vZGVfbW9kdWxlcy9kZXZsb3AvbGliL2RlZmF1bHQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaXMtcGxhaW4tb2JqQDQuMS4wL25vZGVfbW9kdWxlcy9pcy1wbGFpbi1vYmovaW5kZXguanMKZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTIpIHsKICBpZiAodHlwZW9mIHZhbHVlMiAhPT0gIm9iamVjdCIgfHwgdmFsdWUyID09PSBudWxsKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGNvbnN0IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZTIpOwogIHJldHVybiAocHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiYgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsdWUyKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWx1ZTIpOwp9CnZhciBpbml0X2lzX3BsYWluX29iaiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2lzLXBsYWluLW9iakA0LjEuMC9ub2RlX21vZHVsZXMvaXMtcGxhaW4tb2JqL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Ryb3VnaEAyLjIuMC9ub2RlX21vZHVsZXMvdHJvdWdoL2xpYi9pbmRleC5qcwpmdW5jdGlvbiB0cm91Z2goKSB7CiAgY29uc3QgZm5zID0gW107CiAgY29uc3QgcGlwZWxpbmUgPSB7IHJ1biwgdXNlIH07CiAgcmV0dXJuIHBpcGVsaW5lOwogIGZ1bmN0aW9uIHJ1biguLi52YWx1ZXMpIHsKICAgIGxldCBtaWRkbGV3YXJlSW5kZXggPSAtMTsKICAgIGNvbnN0IGNhbGxiYWNrID0gdmFsdWVzLnBvcCgpOwogICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9uIikgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBmdW5jdGlvbiBhcyBsYXN0IGFyZ3VtZW50LCBub3QgIiArIGNhbGxiYWNrKTsKICAgIH0KICAgIG5leHQyKG51bGwsIC4uLnZhbHVlcyk7CiAgICBmdW5jdGlvbiBuZXh0MihlcnJvciwgLi4ub3V0cHV0KSB7CiAgICAgIGNvbnN0IGZuID0gZm5zWysrbWlkZGxld2FyZUluZGV4XTsKICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICBpZiAoZXJyb3IpIHsKICAgICAgICBjYWxsYmFjayhlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IHZhbHVlcy5sZW5ndGgpIHsKICAgICAgICBpZiAob3V0cHV0W2luZGV4Ml0gPT09IG51bGwgfHwgb3V0cHV0W2luZGV4Ml0gPT09IHZvaWQgMCkgewogICAgICAgICAgb3V0cHV0W2luZGV4Ml0gPSB2YWx1ZXNbaW5kZXgyXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsdWVzID0gb3V0cHV0OwogICAgICBpZiAoZm4pIHsKICAgICAgICB3cmFwMihmbiwgbmV4dDIpKC4uLm91dHB1dCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY2FsbGJhY2sobnVsbCwgLi4ub3V0cHV0KTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiB1c2UobWlkZGVsd2FyZSkgewogICAgaWYgKHR5cGVvZiBtaWRkZWx3YXJlICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoCiAgICAgICAgIkV4cGVjdGVkIGBtaWRkZWx3YXJlYCB0byBiZSBhIGZ1bmN0aW9uLCBub3QgIiArIG1pZGRlbHdhcmUKICAgICAgKTsKICAgIH0KICAgIGZucy5wdXNoKG1pZGRlbHdhcmUpOwogICAgcmV0dXJuIHBpcGVsaW5lOwogIH0KfQpmdW5jdGlvbiB3cmFwMihtaWRkbGV3YXJlLCBjYWxsYmFjaykgewogIGxldCBjYWxsZWQ7CiAgcmV0dXJuIHdyYXBwZWQ7CiAgZnVuY3Rpb24gd3JhcHBlZCguLi5wYXJhbWV0ZXJzKSB7CiAgICBjb25zdCBmbkV4cGVjdHNDYWxsYmFjayA9IG1pZGRsZXdhcmUubGVuZ3RoID4gcGFyYW1ldGVycy5sZW5ndGg7CiAgICBsZXQgcmVzdWx0OwogICAgaWYgKGZuRXhwZWN0c0NhbGxiYWNrKSB7CiAgICAgIHBhcmFtZXRlcnMucHVzaChkb25lKTsKICAgIH0KICAgIHRyeSB7CiAgICAgIHJlc3VsdCA9IG1pZGRsZXdhcmUuYXBwbHkodGhpcywgcGFyYW1ldGVycyk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zdCBleGNlcHRpb24gPSAoCiAgICAgICAgLyoqIEB0eXBlIHtFcnJvcn0gKi8KICAgICAgICBlcnJvcgogICAgICApOwogICAgICBpZiAoZm5FeHBlY3RzQ2FsbGJhY2sgJiYgY2FsbGVkKSB7CiAgICAgICAgdGhyb3cgZXhjZXB0aW9uOwogICAgICB9CiAgICAgIHJldHVybiBkb25lKGV4Y2VwdGlvbik7CiAgICB9CiAgICBpZiAoIWZuRXhwZWN0c0NhbGxiYWNrKSB7CiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnRoZW4gJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgcmVzdWx0LnRoZW4odGhlbiwgZG9uZSk7CiAgICAgIH0gZWxzZSBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHsKICAgICAgICBkb25lKHJlc3VsdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhlbihyZXN1bHQpOwogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIGRvbmUoZXJyb3IsIC4uLm91dHB1dCkgewogICAgaWYgKCFjYWxsZWQpIHsKICAgICAgY2FsbGVkID0gdHJ1ZTsKICAgICAgY2FsbGJhY2soZXJyb3IsIC4uLm91dHB1dCk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHRoZW4odmFsdWUyKSB7CiAgICBkb25lKG51bGwsIHZhbHVlMik7CiAgfQp9CnZhciBpbml0X2xpYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Ryb3VnaEAyLjIuMC9ub2RlX21vZHVsZXMvdHJvdWdoL2xpYi9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS90cm91Z2hAMi4yLjAvbm9kZV9tb2R1bGVzL3Ryb3VnaC9pbmRleC5qcwp2YXIgaW5pdF90cm91Z2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS90cm91Z2hAMi4yLjAvbm9kZV9tb2R1bGVzL3Ryb3VnaC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb25ANC4wLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBzdHJpbmdpZnlQb3NpdGlvbih2YWx1ZTIpIHsKICBpZiAoIXZhbHVlMiB8fCB0eXBlb2YgdmFsdWUyICE9PSAib2JqZWN0IikgewogICAgcmV0dXJuICIiOwogIH0KICBpZiAoInBvc2l0aW9uIiBpbiB2YWx1ZTIgfHwgInR5cGUiIGluIHZhbHVlMikgewogICAgcmV0dXJuIHBvc2l0aW9uKHZhbHVlMi5wb3NpdGlvbik7CiAgfQogIGlmICgic3RhcnQiIGluIHZhbHVlMiB8fCAiZW5kIiBpbiB2YWx1ZTIpIHsKICAgIHJldHVybiBwb3NpdGlvbih2YWx1ZTIpOwogIH0KICBpZiAoImxpbmUiIGluIHZhbHVlMiB8fCAiY29sdW1uIiBpbiB2YWx1ZTIpIHsKICAgIHJldHVybiBwb2ludCh2YWx1ZTIpOwogIH0KICByZXR1cm4gIiI7Cn0KZnVuY3Rpb24gcG9pbnQocG9pbnQ0KSB7CiAgcmV0dXJuIGluZGV4KHBvaW50NCAmJiBwb2ludDQubGluZSkgKyAiOiIgKyBpbmRleChwb2ludDQgJiYgcG9pbnQ0LmNvbHVtbik7Cn0KZnVuY3Rpb24gcG9zaXRpb24ocG9zKSB7CiAgcmV0dXJuIHBvaW50KHBvcyAmJiBwb3Muc3RhcnQpICsgIi0iICsgcG9pbnQocG9zICYmIHBvcy5lbmQpOwp9CmZ1bmN0aW9uIGluZGV4KHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgJiYgdHlwZW9mIHZhbHVlMiA9PT0gIm51bWJlciIgPyB2YWx1ZTIgOiAxOwp9CnZhciBpbml0X2xpYjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbkA0LjAuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb24vbGliL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uQDQuMC4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbi9pbmRleC5qcwp2YXIgaW5pdF91bmlzdF91dGlsX3N0cmluZ2lmeV9wb3NpdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uQDQuMC4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlLW1lc3NhZ2VANC4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlLW1lc3NhZ2UvbGliL2luZGV4LmpzCnZhciBWRmlsZU1lc3NhZ2U7CnZhciBpbml0X2xpYjMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZS1tZXNzYWdlQDQuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS1tZXNzYWdlL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X3VuaXN0X3V0aWxfc3RyaW5naWZ5X3Bvc2l0aW9uKCk7CiAgICBWRmlsZU1lc3NhZ2UgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhIG1lc3NhZ2UgZm9yIGByZWFzb25gLgogICAgICAgKgogICAgICAgKiA+IPCfqqYgKipOb3RlKio6IGFsc28gaGFzIG9ic29sZXRlIHNpZ25hdHVyZXMuCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7T3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXQogICAgICAgKiBAcmV0dXJucwogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudAogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7UG9pbnQgfCBQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IHBsYWNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMKICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucwogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucwogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucwogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucwogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlIHwgc3RyaW5nfSBjYXVzZU9yUmVhc29uCiAgICAgICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCBzaG91bGQgdXNlIG1hcmtkb3duLgogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IE9wdGlvbnMgfCBQb2ludCB8IFBvc2l0aW9uIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNPclBhcmVudE9yUGxhY2VdCiAgICAgICAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqICAgUGxhY2UgaW4gY29kZSB3aGVyZSB0aGUgbWVzc2FnZSBvcmlnaW5hdGVzIChleGFtcGxlOgogICAgICAgKiAgIGAnbXktcGFja2FnZTpteS1ydWxlJ2Agb3IgYCdteS1ydWxlJ2ApLgogICAgICAgKiBAcmV0dXJucwogICAgICAgKiAgIEluc3RhbmNlIG9mIGBWRmlsZU1lc3NhZ2VgLgogICAgICAgKi8KICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHkKICAgICAgY29uc3RydWN0b3IoY2F1c2VPclJlYXNvbiwgb3B0aW9uc09yUGFyZW50T3JQbGFjZSwgb3JpZ2luKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNPclBhcmVudE9yUGxhY2UgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBvcmlnaW4gPSBvcHRpb25zT3JQYXJlbnRPclBsYWNlOwogICAgICAgICAgb3B0aW9uc09yUGFyZW50T3JQbGFjZSA9IHZvaWQgMDsKICAgICAgICB9CiAgICAgICAgbGV0IHJlYXNvbiA9ICIiOwogICAgICAgIGxldCBvcHRpb25zID0ge307CiAgICAgICAgbGV0IGxlZ2FjeUNhdXNlID0gZmFsc2U7CiAgICAgICAgaWYgKG9wdGlvbnNPclBhcmVudE9yUGxhY2UpIHsKICAgICAgICAgIGlmICgibGluZSIgaW4gb3B0aW9uc09yUGFyZW50T3JQbGFjZSAmJiAiY29sdW1uIiBpbiBvcHRpb25zT3JQYXJlbnRPclBsYWNlKSB7CiAgICAgICAgICAgIG9wdGlvbnMgPSB7IHBsYWNlOiBvcHRpb25zT3JQYXJlbnRPclBsYWNlIH07CiAgICAgICAgICB9IGVsc2UgaWYgKCJzdGFydCIgaW4gb3B0aW9uc09yUGFyZW50T3JQbGFjZSAmJiAiZW5kIiBpbiBvcHRpb25zT3JQYXJlbnRPclBsYWNlKSB7CiAgICAgICAgICAgIG9wdGlvbnMgPSB7IHBsYWNlOiBvcHRpb25zT3JQYXJlbnRPclBsYWNlIH07CiAgICAgICAgICB9IGVsc2UgaWYgKCJ0eXBlIiBpbiBvcHRpb25zT3JQYXJlbnRPclBsYWNlKSB7CiAgICAgICAgICAgIG9wdGlvbnMgPSB7CiAgICAgICAgICAgICAgYW5jZXN0b3JzOiBbb3B0aW9uc09yUGFyZW50T3JQbGFjZV0sCiAgICAgICAgICAgICAgcGxhY2U6IG9wdGlvbnNPclBhcmVudE9yUGxhY2UucG9zaXRpb24KICAgICAgICAgICAgfTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnNPclBhcmVudE9yUGxhY2UgfTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBjYXVzZU9yUmVhc29uID09PSAic3RyaW5nIikgewogICAgICAgICAgcmVhc29uID0gY2F1c2VPclJlYXNvbjsKICAgICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmNhdXNlICYmIGNhdXNlT3JSZWFzb24pIHsKICAgICAgICAgIGxlZ2FjeUNhdXNlID0gdHJ1ZTsKICAgICAgICAgIHJlYXNvbiA9IGNhdXNlT3JSZWFzb24ubWVzc2FnZTsKICAgICAgICAgIG9wdGlvbnMuY2F1c2UgPSBjYXVzZU9yUmVhc29uOwogICAgICAgIH0KICAgICAgICBpZiAoIW9wdGlvbnMucnVsZUlkICYmICFvcHRpb25zLnNvdXJjZSAmJiB0eXBlb2Ygb3JpZ2luID09PSAic3RyaW5nIikgewogICAgICAgICAgY29uc3QgaW5kZXgyID0gb3JpZ2luLmluZGV4T2YoIjoiKTsKICAgICAgICAgIGlmIChpbmRleDIgPT09IC0xKSB7CiAgICAgICAgICAgIG9wdGlvbnMucnVsZUlkID0gb3JpZ2luOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb3B0aW9ucy5zb3VyY2UgPSBvcmlnaW4uc2xpY2UoMCwgaW5kZXgyKTsKICAgICAgICAgICAgb3B0aW9ucy5ydWxlSWQgPSBvcmlnaW4uc2xpY2UoaW5kZXgyICsgMSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghb3B0aW9ucy5wbGFjZSAmJiBvcHRpb25zLmFuY2VzdG9ycyAmJiBvcHRpb25zLmFuY2VzdG9ycykgewogICAgICAgICAgY29uc3QgcGFyZW50ID0gb3B0aW9ucy5hbmNlc3RvcnNbb3B0aW9ucy5hbmNlc3RvcnMubGVuZ3RoIC0gMV07CiAgICAgICAgICBpZiAocGFyZW50KSB7CiAgICAgICAgICAgIG9wdGlvbnMucGxhY2UgPSBwYXJlbnQucG9zaXRpb247CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHN0YXJ0ID0gb3B0aW9ucy5wbGFjZSAmJiAic3RhcnQiIGluIG9wdGlvbnMucGxhY2UgPyBvcHRpb25zLnBsYWNlLnN0YXJ0IDogb3B0aW9ucy5wbGFjZTsKICAgICAgICB0aGlzLmFuY2VzdG9ycyA9IG9wdGlvbnMuYW5jZXN0b3JzIHx8IHZvaWQgMDsKICAgICAgICB0aGlzLmNhdXNlID0gb3B0aW9ucy5jYXVzZSB8fCB2b2lkIDA7CiAgICAgICAgdGhpcy5jb2x1bW4gPSBzdGFydCA/IHN0YXJ0LmNvbHVtbiA6IHZvaWQgMDsKICAgICAgICB0aGlzLmZhdGFsID0gdm9pZCAwOwogICAgICAgIHRoaXMuZmlsZSA9ICIiOwogICAgICAgIHRoaXMubWVzc2FnZSA9IHJlYXNvbjsKICAgICAgICB0aGlzLmxpbmUgPSBzdGFydCA/IHN0YXJ0LmxpbmUgOiB2b2lkIDA7CiAgICAgICAgdGhpcy5uYW1lID0gc3RyaW5naWZ5UG9zaXRpb24ob3B0aW9ucy5wbGFjZSkgfHwgIjE6MSI7CiAgICAgICAgdGhpcy5wbGFjZSA9IG9wdGlvbnMucGxhY2UgfHwgdm9pZCAwOwogICAgICAgIHRoaXMucmVhc29uID0gdGhpcy5tZXNzYWdlOwogICAgICAgIHRoaXMucnVsZUlkID0gb3B0aW9ucy5ydWxlSWQgfHwgdm9pZCAwOwogICAgICAgIHRoaXMuc291cmNlID0gb3B0aW9ucy5zb3VyY2UgfHwgdm9pZCAwOwogICAgICAgIHRoaXMuc3RhY2sgPSBsZWdhY3lDYXVzZSAmJiBvcHRpb25zLmNhdXNlICYmIHR5cGVvZiBvcHRpb25zLmNhdXNlLnN0YWNrID09PSAic3RyaW5nIiA/IG9wdGlvbnMuY2F1c2Uuc3RhY2sgOiAiIjsKICAgICAgICB0aGlzLmFjdHVhbCA9IHZvaWQgMDsKICAgICAgICB0aGlzLmV4cGVjdGVkID0gdm9pZCAwOwogICAgICAgIHRoaXMubm90ZSA9IHZvaWQgMDsKICAgICAgICB0aGlzLnVybCA9IHZvaWQgMDsKICAgICAgfQogICAgfTsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUuZmlsZSA9ICIiOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5uYW1lID0gIiI7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLnJlYXNvbiA9ICIiOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5tZXNzYWdlID0gIiI7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLnN0YWNrID0gIiI7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLmNvbHVtbiA9IHZvaWQgMDsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUubGluZSA9IHZvaWQgMDsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUuYW5jZXN0b3JzID0gdm9pZCAwOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5jYXVzZSA9IHZvaWQgMDsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUuZmF0YWwgPSB2b2lkIDA7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLnBsYWNlID0gdm9pZCAwOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5ydWxlSWQgPSB2b2lkIDA7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLnNvdXJjZSA9IHZvaWQgMDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlLW1lc3NhZ2VANC4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlLW1lc3NhZ2UvaW5kZXguanMKdmFyIGluaXRfdmZpbGVfbWVzc2FnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlLW1lc3NhZ2VANC4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlLW1lc3NhZ2UvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnBhdGguYnJvd3Nlci5qcwpmdW5jdGlvbiBiYXNlbmFtZShwYXRoMiwgZXh0bmFtZTIpIHsKICBpZiAoZXh0bmFtZTIgIT09IHZvaWQgMCAmJiB0eXBlb2YgZXh0bmFtZTIgIT09ICJzdHJpbmciKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7CiAgfQogIGFzc2VydFBhdGgocGF0aDIpOwogIGxldCBzdGFydCA9IDA7CiAgbGV0IGVuZDMgPSAtMTsKICBsZXQgaW5kZXgyID0gcGF0aDIubGVuZ3RoOwogIGxldCBzZWVuTm9uU2xhc2g7CiAgaWYgKGV4dG5hbWUyID09PSB2b2lkIDAgfHwgZXh0bmFtZTIubGVuZ3RoID09PSAwIHx8IGV4dG5hbWUyLmxlbmd0aCA+IHBhdGgyLmxlbmd0aCkgewogICAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICAgIGlmIChwYXRoMi5jb2RlUG9pbnRBdChpbmRleDIpID09PSA0NykgewogICAgICAgIGlmIChzZWVuTm9uU2xhc2gpIHsKICAgICAgICAgIHN0YXJ0ID0gaW5kZXgyICsgMTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChlbmQzIDwgMCkgewogICAgICAgIHNlZW5Ob25TbGFzaCA9IHRydWU7CiAgICAgICAgZW5kMyA9IGluZGV4MiArIDE7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBlbmQzIDwgMCA/ICIiIDogcGF0aDIuc2xpY2Uoc3RhcnQsIGVuZDMpOwogIH0KICBpZiAoZXh0bmFtZTIgPT09IHBhdGgyKSB7CiAgICByZXR1cm4gIiI7CiAgfQogIGxldCBmaXJzdE5vblNsYXNoRW5kID0gLTE7CiAgbGV0IGV4dG5hbWVJbmRleCA9IGV4dG5hbWUyLmxlbmd0aCAtIDE7CiAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICBpZiAocGF0aDIuY29kZVBvaW50QXQoaW5kZXgyKSA9PT0gNDcpIHsKICAgICAgaWYgKHNlZW5Ob25TbGFzaCkgewogICAgICAgIHN0YXJ0ID0gaW5kZXgyICsgMTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKGZpcnN0Tm9uU2xhc2hFbmQgPCAwKSB7CiAgICAgICAgc2Vlbk5vblNsYXNoID0gdHJ1ZTsKICAgICAgICBmaXJzdE5vblNsYXNoRW5kID0gaW5kZXgyICsgMTsKICAgICAgfQogICAgICBpZiAoZXh0bmFtZUluZGV4ID4gLTEpIHsKICAgICAgICBpZiAocGF0aDIuY29kZVBvaW50QXQoaW5kZXgyKSA9PT0gZXh0bmFtZTIuY29kZVBvaW50QXQoZXh0bmFtZUluZGV4LS0pKSB7CiAgICAgICAgICBpZiAoZXh0bmFtZUluZGV4IDwgMCkgewogICAgICAgICAgICBlbmQzID0gaW5kZXgyOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBleHRuYW1lSW5kZXggPSAtMTsKICAgICAgICAgIGVuZDMgPSBmaXJzdE5vblNsYXNoRW5kOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBpZiAoc3RhcnQgPT09IGVuZDMpIHsKICAgIGVuZDMgPSBmaXJzdE5vblNsYXNoRW5kOwogIH0gZWxzZSBpZiAoZW5kMyA8IDApIHsKICAgIGVuZDMgPSBwYXRoMi5sZW5ndGg7CiAgfQogIHJldHVybiBwYXRoMi5zbGljZShzdGFydCwgZW5kMyk7Cn0KZnVuY3Rpb24gZGlybmFtZShwYXRoMikgewogIGFzc2VydFBhdGgocGF0aDIpOwogIGlmIChwYXRoMi5sZW5ndGggPT09IDApIHsKICAgIHJldHVybiAiLiI7CiAgfQogIGxldCBlbmQzID0gLTE7CiAgbGV0IGluZGV4MiA9IHBhdGgyLmxlbmd0aDsKICBsZXQgdW5tYXRjaGVkU2xhc2g7CiAgd2hpbGUgKC0taW5kZXgyKSB7CiAgICBpZiAocGF0aDIuY29kZVBvaW50QXQoaW5kZXgyKSA9PT0gNDcpIHsKICAgICAgaWYgKHVubWF0Y2hlZFNsYXNoKSB7CiAgICAgICAgZW5kMyA9IGluZGV4MjsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfSBlbHNlIGlmICghdW5tYXRjaGVkU2xhc2gpIHsKICAgICAgdW5tYXRjaGVkU2xhc2ggPSB0cnVlOwogICAgfQogIH0KICByZXR1cm4gZW5kMyA8IDAgPyBwYXRoMi5jb2RlUG9pbnRBdCgwKSA9PT0gNDcgPyAiLyIgOiAiLiIgOiBlbmQzID09PSAxICYmIHBhdGgyLmNvZGVQb2ludEF0KDApID09PSA0NyA/ICIvLyIgOiBwYXRoMi5zbGljZSgwLCBlbmQzKTsKfQpmdW5jdGlvbiBleHRuYW1lKHBhdGgyKSB7CiAgYXNzZXJ0UGF0aChwYXRoMik7CiAgbGV0IGluZGV4MiA9IHBhdGgyLmxlbmd0aDsKICBsZXQgZW5kMyA9IC0xOwogIGxldCBzdGFydFBhcnQgPSAwOwogIGxldCBzdGFydERvdCA9IC0xOwogIGxldCBwcmVEb3RTdGF0ZSA9IDA7CiAgbGV0IHVubWF0Y2hlZFNsYXNoOwogIHdoaWxlIChpbmRleDItLSkgewogICAgY29uc3QgY29kZTQgPSBwYXRoMi5jb2RlUG9pbnRBdChpbmRleDIpOwogICAgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBpZiAodW5tYXRjaGVkU2xhc2gpIHsKICAgICAgICBzdGFydFBhcnQgPSBpbmRleDIgKyAxOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKGVuZDMgPCAwKSB7CiAgICAgIHVubWF0Y2hlZFNsYXNoID0gdHJ1ZTsKICAgICAgZW5kMyA9IGluZGV4MiArIDE7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ2KSB7CiAgICAgIGlmIChzdGFydERvdCA8IDApIHsKICAgICAgICBzdGFydERvdCA9IGluZGV4MjsKICAgICAgfSBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkgewogICAgICAgIHByZURvdFN0YXRlID0gMTsKICAgICAgfQogICAgfSBlbHNlIGlmIChzdGFydERvdCA+IC0xKSB7CiAgICAgIHByZURvdFN0YXRlID0gLTE7CiAgICB9CiAgfQogIGlmIChzdGFydERvdCA8IDAgfHwgZW5kMyA8IDAgfHwgLy8gV2Ugc2F3IGEgbm9uLWRvdCBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBkb3QuCiAgcHJlRG90U3RhdGUgPT09IDAgfHwgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgYC4uYC4KICBwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kMyAtIDEgJiYgc3RhcnREb3QgPT09IHN0YXJ0UGFydCArIDEpIHsKICAgIHJldHVybiAiIjsKICB9CiAgcmV0dXJuIHBhdGgyLnNsaWNlKHN0YXJ0RG90LCBlbmQzKTsKfQpmdW5jdGlvbiBqb2luKC4uLnNlZ21lbnRzKSB7CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBqb2luZWQ7CiAgd2hpbGUgKCsraW5kZXgyIDwgc2VnbWVudHMubGVuZ3RoKSB7CiAgICBhc3NlcnRQYXRoKHNlZ21lbnRzW2luZGV4Ml0pOwogICAgaWYgKHNlZ21lbnRzW2luZGV4Ml0pIHsKICAgICAgam9pbmVkID0gam9pbmVkID09PSB2b2lkIDAgPyBzZWdtZW50c1tpbmRleDJdIDogam9pbmVkICsgIi8iICsgc2VnbWVudHNbaW5kZXgyXTsKICAgIH0KICB9CiAgcmV0dXJuIGpvaW5lZCA9PT0gdm9pZCAwID8gIi4iIDogbm9ybWFsaXplMihqb2luZWQpOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZTIocGF0aDIpIHsKICBhc3NlcnRQYXRoKHBhdGgyKTsKICBjb25zdCBhYnNvbHV0ZSA9IHBhdGgyLmNvZGVQb2ludEF0KDApID09PSA0NzsKICBsZXQgdmFsdWUyID0gbm9ybWFsaXplU3RyaW5nKHBhdGgyLCAhYWJzb2x1dGUpOwogIGlmICh2YWx1ZTIubGVuZ3RoID09PSAwICYmICFhYnNvbHV0ZSkgewogICAgdmFsdWUyID0gIi4iOwogIH0KICBpZiAodmFsdWUyLmxlbmd0aCA+IDAgJiYgcGF0aDIuY29kZVBvaW50QXQocGF0aDIubGVuZ3RoIC0gMSkgPT09IDQ3KSB7CiAgICB2YWx1ZTIgKz0gIi8iOwogIH0KICByZXR1cm4gYWJzb2x1dGUgPyAiLyIgKyB2YWx1ZTIgOiB2YWx1ZTI7Cn0KZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nKHBhdGgyLCBhbGxvd0Fib3ZlUm9vdCkgewogIGxldCByZXN1bHQgPSAiIjsKICBsZXQgbGFzdFNlZ21lbnRMZW5ndGggPSAwOwogIGxldCBsYXN0U2xhc2ggPSAtMTsKICBsZXQgZG90cyA9IDA7CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBjb2RlNDsKICBsZXQgbGFzdFNsYXNoSW5kZXg7CiAgd2hpbGUgKCsraW5kZXgyIDw9IHBhdGgyLmxlbmd0aCkgewogICAgaWYgKGluZGV4MiA8IHBhdGgyLmxlbmd0aCkgewogICAgICBjb2RlNCA9IHBhdGgyLmNvZGVQb2ludEF0KGluZGV4Mik7CiAgICB9IGVsc2UgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBicmVhazsKICAgIH0gZWxzZSB7CiAgICAgIGNvZGU0ID0gNDc7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ3KSB7CiAgICAgIGlmIChsYXN0U2xhc2ggPT09IGluZGV4MiAtIDEgfHwgZG90cyA9PT0gMSkgewogICAgICB9IGVsc2UgaWYgKGxhc3RTbGFzaCAhPT0gaW5kZXgyIC0gMSAmJiBkb3RzID09PSAyKSB7CiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPCAyIHx8IGxhc3RTZWdtZW50TGVuZ3RoICE9PSAyIHx8IHJlc3VsdC5jb2RlUG9pbnRBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IDQ2IHx8IHJlc3VsdC5jb2RlUG9pbnRBdChyZXN1bHQubGVuZ3RoIC0gMikgIT09IDQ2KSB7CiAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDIpIHsKICAgICAgICAgICAgbGFzdFNsYXNoSW5kZXggPSByZXN1bHQubGFzdEluZGV4T2YoIi8iKTsKICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4ICE9PSByZXN1bHQubGVuZ3RoIC0gMSkgewogICAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCA8IDApIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9ICIiOwogICAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpOwogICAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSByZXN1bHQubGVuZ3RoIC0gMSAtIHJlc3VsdC5sYXN0SW5kZXhPZigiLyIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsYXN0U2xhc2ggPSBpbmRleDI7CiAgICAgICAgICAgICAgZG90cyA9IDA7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgcmVzdWx0ID0gIiI7CiAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMDsKICAgICAgICAgICAgbGFzdFNsYXNoID0gaW5kZXgyOwogICAgICAgICAgICBkb3RzID0gMDsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChhbGxvd0Fib3ZlUm9vdCkgewogICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lmxlbmd0aCA+IDAgPyByZXN1bHQgKyAiLy4uIiA6ICIuLiI7CiAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDI7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkgewogICAgICAgICAgcmVzdWx0ICs9ICIvIiArIHBhdGgyLnNsaWNlKGxhc3RTbGFzaCArIDEsIGluZGV4Mik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3VsdCA9IHBhdGgyLnNsaWNlKGxhc3RTbGFzaCArIDEsIGluZGV4Mik7CiAgICAgICAgfQogICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gaW5kZXgyIC0gbGFzdFNsYXNoIC0gMTsKICAgICAgfQogICAgICBsYXN0U2xhc2ggPSBpbmRleDI7CiAgICAgIGRvdHMgPSAwOwogICAgfSBlbHNlIGlmIChjb2RlNCA9PT0gNDYgJiYgZG90cyA+IC0xKSB7CiAgICAgIGRvdHMrKzsKICAgIH0gZWxzZSB7CiAgICAgIGRvdHMgPSAtMTsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBhc3NlcnRQYXRoKHBhdGgyKSB7CiAgaWYgKHR5cGVvZiBwYXRoMiAhPT0gInN0cmluZyIpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoCiAgICAgICJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIgKyBKU09OLnN0cmluZ2lmeShwYXRoMikKICAgICk7CiAgfQp9CnZhciBtaW5wYXRoOwp2YXIgaW5pdF9taW5wYXRoX2Jyb3dzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnBhdGguYnJvd3Nlci5qcyIoKSB7CiAgICBtaW5wYXRoID0geyBiYXNlbmFtZSwgZGlybmFtZSwgZXh0bmFtZSwgam9pbiwgc2VwOiAiLyIgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWlucHJvYy5icm93c2VyLmpzCmZ1bmN0aW9uIGN3ZCgpIHsKICByZXR1cm4gIi8iOwp9CnZhciBtaW5wcm9jOwp2YXIgaW5pdF9taW5wcm9jX2Jyb3dzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnByb2MuYnJvd3Nlci5qcyIoKSB7CiAgICBtaW5wcm9jID0geyBjd2QgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWludXJsLnNoYXJlZC5qcwpmdW5jdGlvbiBpc1VybChmaWxlVXJsT3JQYXRoKSB7CiAgcmV0dXJuIEJvb2xlYW4oCiAgICBmaWxlVXJsT3JQYXRoICE9PSBudWxsICYmIHR5cGVvZiBmaWxlVXJsT3JQYXRoID09PSAib2JqZWN0IiAmJiAiaHJlZiIgaW4gZmlsZVVybE9yUGF0aCAmJiBmaWxlVXJsT3JQYXRoLmhyZWYgJiYgInByb3RvY29sIiBpbiBmaWxlVXJsT3JQYXRoICYmIGZpbGVVcmxPclBhdGgucHJvdG9jb2wgJiYgLy8gQHRzLWV4cGVjdC1lcnJvcjogaW5kZXhpbmcgaXMgZmluZS4KICAgIGZpbGVVcmxPclBhdGguYXV0aCA9PT0gdm9pZCAwCiAgKTsKfQp2YXIgaW5pdF9taW51cmxfc2hhcmVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9taW51cmwuc2hhcmVkLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWludXJsLmJyb3dzZXIuanMKZnVuY3Rpb24gdXJsVG9QYXRoKHBhdGgyKSB7CiAgaWYgKHR5cGVvZiBwYXRoMiA9PT0gInN0cmluZyIpIHsKICAgIHBhdGgyID0gbmV3IFVSTChwYXRoMik7CiAgfSBlbHNlIGlmICghaXNVcmwocGF0aDIpKSB7CiAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoCiAgICAgICdUaGUgInBhdGgiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgVVJMLiBSZWNlaXZlZCBgJyArIHBhdGgyICsgImAiCiAgICApOwogICAgZXJyb3IuY29kZSA9ICJFUlJfSU5WQUxJRF9BUkdfVFlQRSI7CiAgICB0aHJvdyBlcnJvcjsKICB9CiAgaWYgKHBhdGgyLnByb3RvY29sICE9PSAiZmlsZToiKSB7CiAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoIlRoZSBVUkwgbXVzdCBiZSBvZiBzY2hlbWUgZmlsZSIpOwogICAgZXJyb3IuY29kZSA9ICJFUlJfSU5WQUxJRF9VUkxfU0NIRU1FIjsKICAgIHRocm93IGVycm9yOwogIH0KICByZXR1cm4gZ2V0UGF0aEZyb21VUkxQb3NpeChwYXRoMik7Cn0KZnVuY3Rpb24gZ2V0UGF0aEZyb21VUkxQb3NpeCh1cmwpIHsKICBpZiAodXJsLmhvc3RuYW1lICE9PSAiIikgewogICAgY29uc3QgZXJyb3IgPSBuZXcgVHlwZUVycm9yKAogICAgICAnRmlsZSBVUkwgaG9zdCBtdXN0IGJlICJsb2NhbGhvc3QiIG9yIGVtcHR5IG9uIGRhcndpbicKICAgICk7CiAgICBlcnJvci5jb2RlID0gIkVSUl9JTlZBTElEX0ZJTEVfVVJMX0hPU1QiOwogICAgdGhyb3cgZXJyb3I7CiAgfQogIGNvbnN0IHBhdGhuYW1lID0gdXJsLnBhdGhuYW1lOwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBwYXRobmFtZS5sZW5ndGgpIHsKICAgIGlmIChwYXRobmFtZS5jb2RlUG9pbnRBdChpbmRleDIpID09PSAzNyAmJiBwYXRobmFtZS5jb2RlUG9pbnRBdChpbmRleDIgKyAxKSA9PT0gNTApIHsKICAgICAgY29uc3QgdGhpcmQgPSBwYXRobmFtZS5jb2RlUG9pbnRBdChpbmRleDIgKyAyKTsKICAgICAgaWYgKHRoaXJkID09PSA3MCB8fCB0aGlyZCA9PT0gMTAyKSB7CiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgVHlwZUVycm9yKAogICAgICAgICAgIkZpbGUgVVJMIHBhdGggbXVzdCBub3QgaW5jbHVkZSBlbmNvZGVkIC8gY2hhcmFjdGVycyIKICAgICAgICApOwogICAgICAgIGVycm9yLmNvZGUgPSAiRVJSX0lOVkFMSURfRklMRV9VUkxfUEFUSCI7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChwYXRobmFtZSk7Cn0KdmFyIGluaXRfbWludXJsX2Jyb3dzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnVybC5icm93c2VyLmpzIigpIHsKICAgIGluaXRfbWludXJsX3NoYXJlZCgpOwogICAgaW5pdF9taW51cmxfc2hhcmVkKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL2luZGV4LmpzCmZ1bmN0aW9uIGFzc2VydFBhcnQocGFydCwgbmFtZSkgewogIGlmIChwYXJ0ICYmIHBhcnQuaW5jbHVkZXMobWlucGF0aC5zZXApKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJgIiArIG5hbWUgKyAiYCBjYW5ub3QgYmUgYSBwYXRoOiBkaWQgbm90IGV4cGVjdCBgIiArIG1pbnBhdGguc2VwICsgImAiCiAgICApOwogIH0KfQpmdW5jdGlvbiBhc3NlcnROb25FbXB0eShwYXJ0LCBuYW1lKSB7CiAgaWYgKCFwYXJ0KSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoImAiICsgbmFtZSArICJgIGNhbm5vdCBiZSBlbXB0eSIpOwogIH0KfQpmdW5jdGlvbiBhc3NlcnRQYXRoMihwYXRoMiwgbmFtZSkgewogIGlmICghcGF0aDIpIHsKICAgIHRocm93IG5ldyBFcnJvcigiU2V0dGluZyBgIiArIG5hbWUgKyAiYCByZXF1aXJlcyBgcGF0aGAgdG8gYmUgc2V0IHRvbyIpOwogIH0KfQpmdW5jdGlvbiBpc1VpbnQ4QXJyYXkzKHZhbHVlMikgewogIHJldHVybiBCb29sZWFuKAogICAgdmFsdWUyICYmIHR5cGVvZiB2YWx1ZTIgPT09ICJvYmplY3QiICYmICJieXRlTGVuZ3RoIiBpbiB2YWx1ZTIgJiYgImJ5dGVPZmZzZXQiIGluIHZhbHVlMgogICk7Cn0KdmFyIG9yZGVyLCBWRmlsZTsKdmFyIGluaXRfbGliNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF92ZmlsZV9tZXNzYWdlKCk7CiAgICBpbml0X21pbnBhdGhfYnJvd3NlcigpOwogICAgaW5pdF9taW5wcm9jX2Jyb3dzZXIoKTsKICAgIGluaXRfbWludXJsX2Jyb3dzZXIoKTsKICAgIG9yZGVyID0gLyoqIEB0eXBlIHtjb25zdH0gKi8KICAgIFsKICAgICAgImhpc3RvcnkiLAogICAgICAicGF0aCIsCiAgICAgICJiYXNlbmFtZSIsCiAgICAgICJzdGVtIiwKICAgICAgImV4dG5hbWUiLAogICAgICAiZGlybmFtZSIKICAgIF07CiAgICBWRmlsZSA9IGNsYXNzIHsKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhIG5ldyB2aXJ0dWFsIGZpbGUuCiAgICAgICAqCiAgICAgICAqIGBvcHRpb25zYCBpcyB0cmVhdGVkIGFzOgogICAgICAgKgogICAgICAgKiAqICAgYHN0cmluZ2Agb3IgYFVpbnQ4QXJyYXlgIOKAlCBge3ZhbHVlOiBvcHRpb25zfWAKICAgICAgICogKiAgIGBVUkxgIOKAlCBge3BhdGg6IG9wdGlvbnN9YAogICAgICAgKiAqICAgYFZGaWxlYCDigJQgc2hhbGxvdyBjb3BpZXMgaXRzIGRhdGEgb3ZlciB0byB0aGUgbmV3IGZpbGUKICAgICAgICogKiAgIGBvYmplY3RgIOKAlCBhbGwgZmllbGRzIGFyZSBzaGFsbG93IGNvcGllZCBvdmVyIHRvIHRoZSBuZXcgZmlsZQogICAgICAgKgogICAgICAgKiBQYXRoIHJlbGF0ZWQgZmllbGRzIGFyZSBzZXQgaW4gdGhlIGZvbGxvd2luZyBvcmRlciAobGVhc3Qgc3BlY2lmaWMgdG8KICAgICAgICogbW9zdCBzcGVjaWZpYyk6IGBoaXN0b3J5YCwgYHBhdGhgLCBgYmFzZW5hbWVgLCBgc3RlbWAsIGBleHRuYW1lYCwKICAgICAgICogYGRpcm5hbWVgLgogICAgICAgKgogICAgICAgKiBZb3UgY2Fubm90IHNldCBgZGlybmFtZWAgb3IgYGV4dG5hbWVgIHdpdGhvdXQgc2V0dGluZyBlaXRoZXIgYGhpc3RvcnlgLAogICAgICAgKiBgcGF0aGAsIGBiYXNlbmFtZWAsIG9yIGBzdGVtYCB0b28uCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IG51bGwgfCB1bmRlZmluZWR9IFt2YWx1ZV0KICAgICAgICogICBGaWxlIHZhbHVlLgogICAgICAgKiBAcmV0dXJucwogICAgICAgKiAgIE5ldyBpbnN0YW5jZS4KICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKHZhbHVlMikgewogICAgICAgIGxldCBvcHRpb25zOwogICAgICAgIGlmICghdmFsdWUyKSB7CiAgICAgICAgICBvcHRpb25zID0ge307CiAgICAgICAgfSBlbHNlIGlmIChpc1VybCh2YWx1ZTIpKSB7CiAgICAgICAgICBvcHRpb25zID0geyBwYXRoOiB2YWx1ZTIgfTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTIgPT09ICJzdHJpbmciIHx8IGlzVWludDhBcnJheTModmFsdWUyKSkgewogICAgICAgICAgb3B0aW9ucyA9IHsgdmFsdWU6IHZhbHVlMiB9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvcHRpb25zID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICB0aGlzLmN3ZCA9ICJjd2QiIGluIG9wdGlvbnMgPyAiIiA6IG1pbnByb2MuY3dkKCk7CiAgICAgICAgdGhpcy5kYXRhID0ge307CiAgICAgICAgdGhpcy5oaXN0b3J5ID0gW107CiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IFtdOwogICAgICAgIHRoaXMudmFsdWU7CiAgICAgICAgdGhpcy5tYXA7CiAgICAgICAgdGhpcy5yZXN1bHQ7CiAgICAgICAgdGhpcy5zdG9yZWQ7CiAgICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICAgIHdoaWxlICgrK2luZGV4MiA8IG9yZGVyLmxlbmd0aCkgewogICAgICAgICAgY29uc3QgZmllbGQyID0gb3JkZXJbaW5kZXgyXTsKICAgICAgICAgIGlmIChmaWVsZDIgaW4gb3B0aW9ucyAmJiBvcHRpb25zW2ZpZWxkMl0gIT09IHZvaWQgMCAmJiBvcHRpb25zW2ZpZWxkMl0gIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpc1tmaWVsZDJdID0gZmllbGQyID09PSAiaGlzdG9yeSIgPyBbLi4ub3B0aW9uc1tmaWVsZDJdXSA6IG9wdGlvbnNbZmllbGQyXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGV0IGZpZWxkOwogICAgICAgIGZvciAoZmllbGQgaW4gb3B0aW9ucykgewogICAgICAgICAgaWYgKCFvcmRlci5pbmNsdWRlcyhmaWVsZCkpIHsKICAgICAgICAgICAgdGhpc1tmaWVsZF0gPSBvcHRpb25zW2ZpZWxkXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgYmFzZW5hbWUgKGluY2x1ZGluZyBleHRuYW1lKSAoZXhhbXBsZTogYCdpbmRleC5taW4uanMnYCkuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9CiAgICAgICAqICAgQmFzZW5hbWUuCiAgICAgICAqLwogICAgICBnZXQgYmFzZW5hbWUoKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICJzdHJpbmciID8gbWlucGF0aC5iYXNlbmFtZSh0aGlzLnBhdGgpIDogdm9pZCAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgYmFzZW5hbWUgKGluY2x1ZGluZyBleHRuYW1lKSAoYCdpbmRleC5taW4uanMnYCkuCiAgICAgICAqCiAgICAgICAqIENhbm5vdCBjb250YWluIHBhdGggc2VwYXJhdG9ycyAoYCcvJ2Agb24gdW5peCwgbWFjT1MsIGFuZCBicm93c2VycywgYCdcJ2AKICAgICAgICogb24gd2luZG93cykuCiAgICAgICAqIENhbm5vdCBiZSBudWxsaWZpZWQgKHVzZSBgZmlsZS5wYXRoID0gZmlsZS5kaXJuYW1lYCBpbnN0ZWFkKS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VuYW1lCiAgICAgICAqICAgQmFzZW5hbWUuCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqICAgTm90aGluZy4KICAgICAgICovCiAgICAgIHNldCBiYXNlbmFtZShiYXNlbmFtZTIpIHsKICAgICAgICBhc3NlcnROb25FbXB0eShiYXNlbmFtZTIsICJiYXNlbmFtZSIpOwogICAgICAgIGFzc2VydFBhcnQoYmFzZW5hbWUyLCAiYmFzZW5hbWUiKTsKICAgICAgICB0aGlzLnBhdGggPSBtaW5wYXRoLmpvaW4odGhpcy5kaXJuYW1lIHx8ICIiLCBiYXNlbmFtZTIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGhlIHBhcmVudCBwYXRoIChleGFtcGxlOiBgJ34nYCkuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9CiAgICAgICAqICAgRGlybmFtZS4KICAgICAgICovCiAgICAgIGdldCBkaXJuYW1lKCkgewogICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy5wYXRoID09PSAic3RyaW5nIiA/IG1pbnBhdGguZGlybmFtZSh0aGlzLnBhdGgpIDogdm9pZCAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgdGhlIHBhcmVudCBwYXRoIChleGFtcGxlOiBgJ34nYCkuCiAgICAgICAqCiAgICAgICAqIENhbm5vdCBiZSBzZXQgaWYgdGhlcmXigJlzIG5vIGBwYXRoYCB5ZXQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBkaXJuYW1lCiAgICAgICAqICAgRGlybmFtZS4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgc2V0IGRpcm5hbWUoZGlybmFtZTIpIHsKICAgICAgICBhc3NlcnRQYXRoMih0aGlzLmJhc2VuYW1lLCAiZGlybmFtZSIpOwogICAgICAgIHRoaXMucGF0aCA9IG1pbnBhdGguam9pbihkaXJuYW1lMiB8fCAiIiwgdGhpcy5iYXNlbmFtZSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgZXh0bmFtZSAoaW5jbHVkaW5nIGRvdCkgKGV4YW1wbGU6IGAnLmpzJ2ApLgogICAgICAgKgogICAgICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfQogICAgICAgKiAgIEV4dG5hbWUuCiAgICAgICAqLwogICAgICBnZXQgZXh0bmFtZSgpIHsKICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMucGF0aCA9PT0gInN0cmluZyIgPyBtaW5wYXRoLmV4dG5hbWUodGhpcy5wYXRoKSA6IHZvaWQgMDsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IHRoZSBleHRuYW1lIChpbmNsdWRpbmcgZG90KSAoZXhhbXBsZTogYCcuanMnYCkuCiAgICAgICAqCiAgICAgICAqIENhbm5vdCBjb250YWluIHBhdGggc2VwYXJhdG9ycyAoYCcvJ2Agb24gdW5peCwgbWFjT1MsIGFuZCBicm93c2VycywgYCdcJ2AKICAgICAgICogb24gd2luZG93cykuCiAgICAgICAqIENhbm5vdCBiZSBzZXQgaWYgdGhlcmXigJlzIG5vIGBwYXRoYCB5ZXQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBleHRuYW1lCiAgICAgICAqICAgRXh0bmFtZS4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgc2V0IGV4dG5hbWUoZXh0bmFtZTIpIHsKICAgICAgICBhc3NlcnRQYXJ0KGV4dG5hbWUyLCAiZXh0bmFtZSIpOwogICAgICAgIGFzc2VydFBhdGgyKHRoaXMuZGlybmFtZSwgImV4dG5hbWUiKTsKICAgICAgICBpZiAoZXh0bmFtZTIpIHsKICAgICAgICAgIGlmIChleHRuYW1lMi5jb2RlUG9pbnRBdCgwKSAhPT0gNDYpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJgZXh0bmFtZWAgbXVzdCBzdGFydCB3aXRoIGAuYCIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGV4dG5hbWUyLmluY2x1ZGVzKCIuIiwgMSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJgZXh0bmFtZWAgY2Fubm90IGNvbnRhaW4gbXVsdGlwbGUgZG90cyIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLnBhdGggPSBtaW5wYXRoLmpvaW4odGhpcy5kaXJuYW1lLCB0aGlzLnN0ZW0gKyAoZXh0bmFtZTIgfHwgIiIpKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSBmdWxsIHBhdGggKGV4YW1wbGU6IGAnfi9pbmRleC5taW4uanMnYCkuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9CiAgICAgICAqICAgUGF0aC4KICAgICAgICovCiAgICAgIGdldCBwYXRoKCkgewogICAgICAgIHJldHVybiB0aGlzLmhpc3RvcnlbdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDFdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgdGhlIGZ1bGwgcGF0aCAoZXhhbXBsZTogYCd+L2luZGV4Lm1pbi5qcydgKS4KICAgICAgICoKICAgICAgICogQ2Fubm90IGJlIG51bGxpZmllZC4KICAgICAgICogWW91IGNhbiBzZXQgYSBmaWxlIFVSTCAoYSBgVVJMYCBvYmplY3Qgd2l0aCBhIGBmaWxlOmAgcHJvdG9jb2wpIHdoaWNoIHdpbGwKICAgICAgICogYmUgdHVybmVkIGludG8gYSBwYXRoIHdpdGggYHVybC5maWxlVVJMVG9QYXRoYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtVUkwgfCBzdHJpbmd9IHBhdGgKICAgICAgICogICBQYXRoLgogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcuCiAgICAgICAqLwogICAgICBzZXQgcGF0aChwYXRoMikgewogICAgICAgIGlmIChpc1VybChwYXRoMikpIHsKICAgICAgICAgIHBhdGgyID0gdXJsVG9QYXRoKHBhdGgyKTsKICAgICAgICB9CiAgICAgICAgYXNzZXJ0Tm9uRW1wdHkocGF0aDIsICJwYXRoIik7CiAgICAgICAgaWYgKHRoaXMucGF0aCAhPT0gcGF0aDIpIHsKICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKHBhdGgyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgc3RlbSAoYmFzZW5hbWUgdy9vIGV4dG5hbWUpIChleGFtcGxlOiBgJ2luZGV4Lm1pbidgKS4KICAgICAgICoKICAgICAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0KICAgICAgICogICBTdGVtLgogICAgICAgKi8KICAgICAgZ2V0IHN0ZW0oKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICJzdHJpbmciID8gbWlucGF0aC5iYXNlbmFtZSh0aGlzLnBhdGgsIHRoaXMuZXh0bmFtZSkgOiB2b2lkIDA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNldCB0aGUgc3RlbSAoYmFzZW5hbWUgdy9vIGV4dG5hbWUpIChleGFtcGxlOiBgJ2luZGV4Lm1pbidgKS4KICAgICAgICoKICAgICAgICogQ2Fubm90IGNvbnRhaW4gcGF0aCBzZXBhcmF0b3JzIChgJy8nYCBvbiB1bml4LCBtYWNPUywgYW5kIGJyb3dzZXJzLCBgJ1wnYAogICAgICAgKiBvbiB3aW5kb3dzKS4KICAgICAgICogQ2Fubm90IGJlIG51bGxpZmllZCAodXNlIGBmaWxlLnBhdGggPSBmaWxlLmRpcm5hbWVgIGluc3RlYWQpLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RlbQogICAgICAgKiAgIFN0ZW0uCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqICAgTm90aGluZy4KICAgICAgICovCiAgICAgIHNldCBzdGVtKHN0ZW0pIHsKICAgICAgICBhc3NlcnROb25FbXB0eShzdGVtLCAic3RlbSIpOwogICAgICAgIGFzc2VydFBhcnQoc3RlbSwgInN0ZW0iKTsKICAgICAgICB0aGlzLnBhdGggPSBtaW5wYXRoLmpvaW4odGhpcy5kaXJuYW1lIHx8ICIiLCBzdGVtICsgKHRoaXMuZXh0bmFtZSB8fCAiIikpOwogICAgICB9CiAgICAgIC8vIE5vcm1hbCBwcm90b3R5cGFsIG1ldGhvZHMuCiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBmYXRhbCBtZXNzYWdlIGZvciBgcmVhc29uYCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuCiAgICAgICAqCiAgICAgICAqIFRoZSBgZmF0YWxgIGZpZWxkIG9mIHRoZSBtZXNzYWdlIGlzIHNldCB0byBgdHJ1ZWAgKGVycm9yOyBmaWxlIG5vdCB1c2FibGUpCiAgICAgICAqIGFuZCB0aGUgYGZpbGVgIGZpZWxkIGlzIHNldCB0byB0aGUgY3VycmVudCBmaWxlIHBhdGguCiAgICAgICAqIFRoZSBtZXNzYWdlIGlzIGFkZGVkIHRvIHRoZSBgbWVzc2FnZXNgIGZpZWxkIG9uIGBmaWxlYC4KICAgICAgICoKICAgICAgICogPiDwn6qmICoqTm90ZSoqOiBhbHNvIGhhcyBvYnNvbGV0ZSBzaWduYXR1cmVzLgogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge01lc3NhZ2VPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdCiAgICAgICAqIEByZXR1cm5zIHtuZXZlcn0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7bmV2ZXJ9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7UG9pbnQgfCBQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IHBsYWNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge25ldmVyfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtuZXZlcn0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2V9IGNhdXNlCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGFyZW50CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge25ldmVyfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7bmV2ZXJ9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtuZXZlcn0KICAgICAgICoKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZSB8IHN0cmluZ30gY2F1c2VPclJlYXNvbgogICAgICAgKiAgIFJlYXNvbiBmb3IgbWVzc2FnZSwgc2hvdWxkIHVzZSBtYXJrZG93bi4KICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBNZXNzYWdlT3B0aW9ucyB8IFBvaW50IHwgUG9zaXRpb24gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc09yUGFyZW50T3JQbGFjZV0KICAgICAgICogICBDb25maWd1cmF0aW9uIChvcHRpb25hbCkuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogICBQbGFjZSBpbiBjb2RlIHdoZXJlIHRoZSBtZXNzYWdlIG9yaWdpbmF0ZXMgKGV4YW1wbGU6CiAgICAgICAqICAgYCdteS1wYWNrYWdlOm15LXJ1bGUnYCBvciBgJ215LXJ1bGUnYCkuCiAgICAgICAqIEByZXR1cm5zIHtuZXZlcn0KICAgICAgICogICBOZXZlci4KICAgICAgICogQHRocm93cyB7VkZpbGVNZXNzYWdlfQogICAgICAgKiAgIE1lc3NhZ2UuCiAgICAgICAqLwogICAgICBmYWlsKGNhdXNlT3JSZWFzb24sIG9wdGlvbnNPclBhcmVudE9yUGxhY2UsIG9yaWdpbikgewogICAgICAgIGNvbnN0IG1lc3NhZ2UyID0gdGhpcy5tZXNzYWdlKGNhdXNlT3JSZWFzb24sIG9wdGlvbnNPclBhcmVudE9yUGxhY2UsIG9yaWdpbik7CiAgICAgICAgbWVzc2FnZTIuZmF0YWwgPSB0cnVlOwogICAgICAgIHRocm93IG1lc3NhZ2UyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYW4gaW5mbyBtZXNzYWdlIGZvciBgcmVhc29uYCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuCiAgICAgICAqCiAgICAgICAqIFRoZSBgZmF0YWxgIGZpZWxkIG9mIHRoZSBtZXNzYWdlIGlzIHNldCB0byBgdW5kZWZpbmVkYCAoaW5mbzsgY2hhbmdlCiAgICAgICAqIGxpa2VseSBub3QgbmVlZGVkKSBhbmQgdGhlIGBmaWxlYCBmaWVsZCBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgZmlsZSBwYXRoLgogICAgICAgKiBUaGUgbWVzc2FnZSBpcyBhZGRlZCB0byB0aGUgYG1lc3NhZ2VzYCBmaWVsZCBvbiBgZmlsZWAuCiAgICAgICAqCiAgICAgICAqID4g8J+qpiAqKk5vdGUqKjogYWxzbyBoYXMgb2Jzb2xldGUgc2lnbmF0dXJlcy4KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtNZXNzYWdlT3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudAogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7UG9pbnQgfCBQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IHBsYWNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlIHwgc3RyaW5nfSBjYXVzZU9yUmVhc29uCiAgICAgICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCBzaG91bGQgdXNlIG1hcmtkb3duLgogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IE1lc3NhZ2VPcHRpb25zIHwgUG9pbnQgfCBQb3NpdGlvbiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zT3JQYXJlbnRPclBsYWNlXQogICAgICAgKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS4KICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiAgIFBsYWNlIGluIGNvZGUgd2hlcmUgdGhlIG1lc3NhZ2Ugb3JpZ2luYXRlcyAoZXhhbXBsZToKICAgICAgICogICBgJ215LXBhY2thZ2U6bXktcnVsZSdgIG9yIGAnbXktcnVsZSdgKS4KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICogICBNZXNzYWdlLgogICAgICAgKi8KICAgICAgaW5mbyhjYXVzZU9yUmVhc29uLCBvcHRpb25zT3JQYXJlbnRPclBsYWNlLCBvcmlnaW4pIHsKICAgICAgICBjb25zdCBtZXNzYWdlMiA9IHRoaXMubWVzc2FnZShjYXVzZU9yUmVhc29uLCBvcHRpb25zT3JQYXJlbnRPclBsYWNlLCBvcmlnaW4pOwogICAgICAgIG1lc3NhZ2UyLmZhdGFsID0gdm9pZCAwOwogICAgICAgIHJldHVybiBtZXNzYWdlMjsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgbWVzc2FnZSBmb3IgYHJlYXNvbmAgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlLgogICAgICAgKgogICAgICAgKiBUaGUgYGZhdGFsYCBmaWVsZCBvZiB0aGUgbWVzc2FnZSBpcyBzZXQgdG8gYGZhbHNlYCAod2FybmluZzsgY2hhbmdlIG1heSBiZQogICAgICAgKiBuZWVkZWQpIGFuZCB0aGUgYGZpbGVgIGZpZWxkIGlzIHNldCB0byB0aGUgY3VycmVudCBmaWxlIHBhdGguCiAgICAgICAqIFRoZSBtZXNzYWdlIGlzIGFkZGVkIHRvIHRoZSBgbWVzc2FnZXNgIGZpZWxkIG9uIGBmaWxlYC4KICAgICAgICoKICAgICAgICogPiDwn6qmICoqTm90ZSoqOiBhbHNvIGhhcyBvYnNvbGV0ZSBzaWduYXR1cmVzLgogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge01lc3NhZ2VPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGFyZW50CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudAogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge1BvaW50IHwgUG9zaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBwbGFjZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2UgfCBzdHJpbmd9IGNhdXNlT3JSZWFzb24KICAgICAgICogICBSZWFzb24gZm9yIG1lc3NhZ2UsIHNob3VsZCB1c2UgbWFya2Rvd24uCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgTWVzc2FnZU9wdGlvbnMgfCBQb2ludCB8IFBvc2l0aW9uIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNPclBhcmVudE9yUGxhY2VdCiAgICAgICAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqICAgUGxhY2UgaW4gY29kZSB3aGVyZSB0aGUgbWVzc2FnZSBvcmlnaW5hdGVzIChleGFtcGxlOgogICAgICAgKiAgIGAnbXktcGFja2FnZTpteS1ydWxlJ2Agb3IgYCdteS1ydWxlJ2ApLgogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKiAgIE1lc3NhZ2UuCiAgICAgICAqLwogICAgICBtZXNzYWdlKGNhdXNlT3JSZWFzb24sIG9wdGlvbnNPclBhcmVudE9yUGxhY2UsIG9yaWdpbikgewogICAgICAgIGNvbnN0IG1lc3NhZ2UyID0gbmV3IFZGaWxlTWVzc2FnZSgKICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHRoZSBvdmVybG9hZHMgYXJlIGZpbmUuCiAgICAgICAgICBjYXVzZU9yUmVhc29uLAogICAgICAgICAgb3B0aW9uc09yUGFyZW50T3JQbGFjZSwKICAgICAgICAgIG9yaWdpbgogICAgICAgICk7CiAgICAgICAgaWYgKHRoaXMucGF0aCkgewogICAgICAgICAgbWVzc2FnZTIubmFtZSA9IHRoaXMucGF0aCArICI6IiArIG1lc3NhZ2UyLm5hbWU7CiAgICAgICAgICBtZXNzYWdlMi5maWxlID0gdGhpcy5wYXRoOwogICAgICAgIH0KICAgICAgICBtZXNzYWdlMi5mYXRhbCA9IGZhbHNlOwogICAgICAgIHRoaXMubWVzc2FnZXMucHVzaChtZXNzYWdlMik7CiAgICAgICAgcmV0dXJuIG1lc3NhZ2UyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXJpYWxpemUgdGhlIGZpbGUuCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IHdoaWNoIGVuY29kaW5ncyBhcmUgc3VwcG9ydGVkIGRlcGVuZHMgb24gdGhlIGVuZ2luZS4KICAgICAgICogPiBGb3IgaW5mbyBvbiBOb2RlLmpzLCBzZWU6CiAgICAgICAqID4gPGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvdXRpbC5odG1sI3doYXR3Zy1zdXBwb3J0ZWQtZW5jb2RpbmdzPi4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbZW5jb2Rpbmc9J3V0ZjgnXQogICAgICAgKiAgIENoYXJhY3RlciBlbmNvZGluZyB0byB1bmRlcnN0YW5kIGB2YWx1ZWAgYXMgd2hlbiBpdOKAmXMgYSBgVWludDhBcnJheWAKICAgICAgICogICAoZGVmYXVsdDogYCd1dGYtOCdgKS4KICAgICAgICogQHJldHVybnMge3N0cmluZ30KICAgICAgICogICBTZXJpYWxpemVkIGZpbGUuCiAgICAgICAqLwogICAgICB0b1N0cmluZyhlbmNvZGluZykgewogICAgICAgIGlmICh0aGlzLnZhbHVlID09PSB2b2lkIDApIHsKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlID09PSAic3RyaW5nIikgewogICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGRlY29kZXIyID0gbmV3IFRleHREZWNvZGVyKGVuY29kaW5nIHx8IHZvaWQgMCk7CiAgICAgICAgcmV0dXJuIGRlY29kZXIyLmRlY29kZSh0aGlzLnZhbHVlKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9pbmRleC5qcwp2YXIgaW5pdF92ZmlsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaWZpZWRAMTEuMC41L25vZGVfbW9kdWxlcy91bmlmaWVkL2xpYi9jYWxsYWJsZS1pbnN0YW5jZS5qcwp2YXIgQ2FsbGFibGVJbnN0YW5jZTsKdmFyIGluaXRfY2FsbGFibGVfaW5zdGFuY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlmaWVkQDExLjAuNS9ub2RlX21vZHVsZXMvdW5pZmllZC9saWIvY2FsbGFibGUtaW5zdGFuY2UuanMiKCkgewogICAgQ2FsbGFibGVJbnN0YW5jZSA9IC8qKgogICAgICogQHR5cGUge25ldyA8UGFyYW1ldGVycyBleHRlbmRzIEFycmF5PHVua25vd24+LCBSZXN1bHQ+KHByb3BlcnR5OiBzdHJpbmcgfCBzeW1ib2wpID0+ICguLi5wYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzKSA9PiBSZXN1bHR9CiAgICAgKi8KICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi8KICAgIC8qKgogICAgICogQHRoaXMge0Z1bmN0aW9ufQogICAgICogQHBhcmFtIHtzdHJpbmcgfCBzeW1ib2x9IHByb3BlcnR5CiAgICAgKiBAcmV0dXJucyB7KC4uLnBhcmFtZXRlcnM6IEFycmF5PHVua25vd24+KSA9PiB1bmtub3dufQogICAgICovCiAgICAoZnVuY3Rpb24ocHJvcGVydHkxMykgewogICAgICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgICAgIGNvbnN0IGNvbnN0ciA9IHNlbGYyLmNvbnN0cnVjdG9yOwogICAgICBjb25zdCBwcm90byA9ICgKICAgICAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcgfCBzeW1ib2wsIEZ1bmN0aW9uPn0gKi8KICAgICAgICAvLyBQcm90b3R5cGVzIGRvIGV4aXN0LgogICAgICAgIC8vIHR5cGUtY292ZXJhZ2U6aWdub3JlLW5leHQtbGluZQogICAgICAgIGNvbnN0ci5wcm90b3R5cGUKICAgICAgKTsKICAgICAgY29uc3QgdmFsdWUyID0gcHJvdG9bcHJvcGVydHkxM107CiAgICAgIGNvbnN0IGFwcGx5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMi5hcHBseShhcHBseSwgYXJndW1lbnRzKTsKICAgICAgfTsKICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFwcGx5LCBwcm90byk7CiAgICAgIHJldHVybiBhcHBseTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pZmllZEAxMS4wLjUvbm9kZV9tb2R1bGVzL3VuaWZpZWQvbGliL2luZGV4LmpzCmZ1bmN0aW9uIGFzc2VydFBhcnNlcihuYW1lLCB2YWx1ZTIpIHsKICBpZiAodHlwZW9mIHZhbHVlMiAhPT0gImZ1bmN0aW9uIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGAiICsgbmFtZSArICJgIHdpdGhvdXQgYHBhcnNlcmAiKTsKICB9Cn0KZnVuY3Rpb24gYXNzZXJ0Q29tcGlsZXIobmFtZSwgdmFsdWUyKSB7CiAgaWYgKHR5cGVvZiB2YWx1ZTIgIT09ICJmdW5jdGlvbiIpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBgIiArIG5hbWUgKyAiYCB3aXRob3V0IGBjb21waWxlcmAiKTsKICB9Cn0KZnVuY3Rpb24gYXNzZXJ0VW5mcm96ZW4obmFtZSwgZnJvemVuKSB7CiAgaWYgKGZyb3plbikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiQ2Fubm90IGNhbGwgYCIgKyBuYW1lICsgImAgb24gYSBmcm96ZW4gcHJvY2Vzc29yLlxuQ3JlYXRlIGEgbmV3IHByb2Nlc3NvciBmaXJzdCwgYnkgY2FsbGluZyBpdDogdXNlIGBwcm9jZXNzb3IoKWAgaW5zdGVhZCBvZiBgcHJvY2Vzc29yYC4iCiAgICApOwogIH0KfQpmdW5jdGlvbiBhc3NlcnROb2RlKG5vZGUyKSB7CiAgaWYgKCFpc1BsYWluT2JqZWN0KG5vZGUyKSB8fCB0eXBlb2Ygbm9kZTIudHlwZSAhPT0gInN0cmluZyIpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIG5vZGUsIGdvdCBgIiArIG5vZGUyICsgImAiKTsKICB9Cn0KZnVuY3Rpb24gYXNzZXJ0RG9uZShuYW1lLCBhc3luY05hbWUsIGNvbXBsZXRlKSB7CiAgaWYgKCFjb21wbGV0ZSkgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiYCIgKyBuYW1lICsgImAgZmluaXNoZWQgYXN5bmMuIFVzZSBgIiArIGFzeW5jTmFtZSArICJgIGluc3RlYWQiCiAgICApOwogIH0KfQpmdW5jdGlvbiB2ZmlsZSh2YWx1ZTIpIHsKICByZXR1cm4gbG9va3NMaWtlQVZGaWxlKHZhbHVlMikgPyB2YWx1ZTIgOiBuZXcgVkZpbGUodmFsdWUyKTsKfQpmdW5jdGlvbiBsb29rc0xpa2VBVkZpbGUodmFsdWUyKSB7CiAgcmV0dXJuIEJvb2xlYW4oCiAgICB2YWx1ZTIgJiYgdHlwZW9mIHZhbHVlMiA9PT0gIm9iamVjdCIgJiYgIm1lc3NhZ2UiIGluIHZhbHVlMiAmJiAibWVzc2FnZXMiIGluIHZhbHVlMgogICk7Cn0KZnVuY3Rpb24gbG9va3NMaWtlQVZhbHVlKHZhbHVlMikgewogIHJldHVybiB0eXBlb2YgdmFsdWUyID09PSAic3RyaW5nIiB8fCBpc1VpbnQ4QXJyYXk0KHZhbHVlMik7Cn0KZnVuY3Rpb24gaXNVaW50OEFycmF5NCh2YWx1ZTIpIHsKICByZXR1cm4gQm9vbGVhbigKICAgIHZhbHVlMiAmJiB0eXBlb2YgdmFsdWUyID09PSAib2JqZWN0IiAmJiAiYnl0ZUxlbmd0aCIgaW4gdmFsdWUyICYmICJieXRlT2Zmc2V0IiBpbiB2YWx1ZTIKICApOwp9CnZhciBpbXBvcnRfZXh0ZW5kLCBvd24sIFByb2Nlc3NvciwgdW5pZmllZDsKdmFyIGluaXRfbGliNSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaWZpZWRAMTEuMC41L25vZGVfbW9kdWxlcy91bmlmaWVkL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2JhaWwoKTsKICAgIGltcG9ydF9leHRlbmQgPSBfX3RvRVNNKHJlcXVpcmVfZXh0ZW5kKCksIDEpOwogICAgaW5pdF9kZWZhdWx0KCk7CiAgICBpbml0X2lzX3BsYWluX29iaigpOwogICAgaW5pdF90cm91Z2goKTsKICAgIGluaXRfdmZpbGUoKTsKICAgIGluaXRfY2FsbGFibGVfaW5zdGFuY2UoKTsKICAgIG93biA9IHt9Lmhhc093blByb3BlcnR5OwogICAgUHJvY2Vzc29yID0gY2xhc3MgX1Byb2Nlc3NvciBleHRlbmRzIENhbGxhYmxlSW5zdGFuY2UgewogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgcHJvY2Vzc29yLgogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoImNvcHkiKTsKICAgICAgICB0aGlzLkNvbXBpbGVyID0gdm9pZCAwOwogICAgICAgIHRoaXMuUGFyc2VyID0gdm9pZCAwOwogICAgICAgIHRoaXMuYXR0YWNoZXJzID0gW107CiAgICAgICAgdGhpcy5jb21waWxlciA9IHZvaWQgMDsKICAgICAgICB0aGlzLmZyZWV6ZUluZGV4ID0gLTE7CiAgICAgICAgdGhpcy5mcm96ZW4gPSB2b2lkIDA7CiAgICAgICAgdGhpcy5uYW1lc3BhY2UgPSB7fTsKICAgICAgICB0aGlzLnBhcnNlciA9IHZvaWQgMDsKICAgICAgICB0aGlzLnRyYW5zZm9ybWVycyA9IHRyb3VnaCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDb3B5IGEgcHJvY2Vzc29yLgogICAgICAgKgogICAgICAgKiBAZGVwcmVjYXRlZAogICAgICAgKiAgIFRoaXMgaXMgYSBwcml2YXRlIGludGVybmFsIG1ldGhvZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLgogICAgICAgKiBAcmV0dXJucyB7UHJvY2Vzc29yPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdD59CiAgICAgICAqICAgTmV3ICp1bmZyb3plbiogcHJvY2Vzc29yICh7QGxpbmtjb2RlIFByb2Nlc3Nvcn0pIHRoYXQgaXMKICAgICAgICogICBjb25maWd1cmVkIHRvIHdvcmsgdGhlIHNhbWUgYXMgaXRzIGFuY2VzdG9yLgogICAgICAgKiAgIFdoZW4gdGhlIGRlc2NlbmRhbnQgcHJvY2Vzc29yIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGZ1dHVyZSBpdCBkb2VzIG5vdAogICAgICAgKiAgIGFmZmVjdCB0aGUgYW5jZXN0cmFsIHByb2Nlc3Nvci4KICAgICAgICovCiAgICAgIGNvcHkoKSB7CiAgICAgICAgY29uc3QgZGVzdGluYXRpb24gPSAoCiAgICAgICAgICAvKiogQHR5cGUge1Byb2Nlc3NvcjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQ+fSAqLwogICAgICAgICAgbmV3IF9Qcm9jZXNzb3IoKQogICAgICAgICk7CiAgICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICAgIHdoaWxlICgrK2luZGV4MiA8IHRoaXMuYXR0YWNoZXJzLmxlbmd0aCkgewogICAgICAgICAgY29uc3QgYXR0YWNoZXIgPSB0aGlzLmF0dGFjaGVyc1tpbmRleDJdOwogICAgICAgICAgZGVzdGluYXRpb24udXNlKC4uLmF0dGFjaGVyKTsKICAgICAgICB9CiAgICAgICAgZGVzdGluYXRpb24uZGF0YSgoMCwgaW1wb3J0X2V4dGVuZC5kZWZhdWx0KSh0cnVlLCB7fSwgdGhpcy5uYW1lc3BhY2UpKTsKICAgICAgICByZXR1cm4gZGVzdGluYXRpb247CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENvbmZpZ3VyZSB0aGUgcHJvY2Vzc29yIHdpdGggaW5mbyBhdmFpbGFibGUgdG8gYWxsIHBsdWdpbnMuCiAgICAgICAqIEluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiBhbiBvYmplY3QuCiAgICAgICAqCiAgICAgICAqIFR5cGljYWxseSwgb3B0aW9ucyBjYW4gYmUgZ2l2ZW4gdG8gYSBzcGVjaWZpYyBwbHVnaW4sIGJ1dCBzb21ldGltZXMgaXQKICAgICAgICogbWFrZXMgc2Vuc2UgdG8gaGF2ZSBpbmZvcm1hdGlvbiBzaGFyZWQgd2l0aCBzZXZlcmFsIHBsdWdpbnMuCiAgICAgICAqIEZvciBleGFtcGxlLCBhIGxpc3Qgb2YgSFRNTCBlbGVtZW50cyB0aGF0IGFyZSBzZWxmLWNsb3NpbmcsIHdoaWNoIGlzCiAgICAgICAqIG5lZWRlZCBkdXJpbmcgYWxsIHBoYXNlcy4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogc2V0dGluZyBpbmZvcm1hdGlvbiBjYW5ub3Qgb2NjdXIgb24gKmZyb3plbiogcHJvY2Vzc29ycy4KICAgICAgICogPiBDYWxsIHRoZSBwcm9jZXNzb3IgZmlyc3QgdG8gY3JlYXRlIGEgbmV3IHVuZnJvemVuIHByb2Nlc3Nvci4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogdG8gcmVnaXN0ZXIgY3VzdG9tIGRhdGEgaW4gVHlwZVNjcmlwdCwgYXVnbWVudCB0aGUKICAgICAgICogPiB7QGxpbmtjb2RlIERhdGF9IGludGVyZmFjZS4KICAgICAgICoKICAgICAgICogQGV4YW1wbGUKICAgICAgICogICBUaGlzIGV4YW1wbGUgc2hvdyBob3cgdG8gZ2V0IGFuZCBzZXQgaW5mbzoKICAgICAgICoKICAgICAgICogICBgYGBqcwogICAgICAgKiAgIGltcG9ydCB7dW5pZmllZH0gZnJvbSAndW5pZmllZCcKICAgICAgICoKICAgICAgICogICBjb25zdCBwcm9jZXNzb3IgPSB1bmlmaWVkKCkuZGF0YSgnYWxwaGEnLCAnYnJhdm8nKQogICAgICAgKgogICAgICAgKiAgIHByb2Nlc3Nvci5kYXRhKCdhbHBoYScpIC8vID0+ICdicmF2bycKICAgICAgICoKICAgICAgICogICBwcm9jZXNzb3IuZGF0YSgpIC8vID0+IHthbHBoYTogJ2JyYXZvJ30KICAgICAgICoKICAgICAgICogICBwcm9jZXNzb3IuZGF0YSh7Y2hhcmxpZTogJ2RlbHRhJ30pCiAgICAgICAqCiAgICAgICAqICAgcHJvY2Vzc29yLmRhdGEoKSAvLyA9PiB7Y2hhcmxpZTogJ2RlbHRhJ30KICAgICAgICogICBgYGAKICAgICAgICoKICAgICAgICogQHRlbXBsYXRlIHtrZXlvZiBEYXRhfSBLZXkKICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEByZXR1cm5zIHtEYXRhfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtEYXRhfSBkYXRhc2V0CiAgICAgICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7S2V5fSBrZXkKICAgICAgICogQHJldHVybnMge0RhdGFbS2V5XX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7S2V5fSBrZXkKICAgICAgICogQHBhcmFtIHtEYXRhW0tleV19IHZhbHVlCiAgICAgICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn0KICAgICAgICoKICAgICAgICogQHBhcmFtIHtEYXRhIHwgS2V5fSBba2V5XQogICAgICAgKiAgIEtleSB0byBnZXQgb3Igc2V0LCBvciBlbnRpcmUgZGF0YXNldCB0byBzZXQsIG9yIG5vdGhpbmcgdG8gZ2V0IHRoZQogICAgICAgKiAgIGVudGlyZSBkYXRhc2V0IChvcHRpb25hbCkuCiAgICAgICAqIEBwYXJhbSB7RGF0YVtLZXldfSBbdmFsdWVdCiAgICAgICAqICAgVmFsdWUgdG8gc2V0IChvcHRpb25hbCkuCiAgICAgICAqIEByZXR1cm5zIHt1bmtub3dufQogICAgICAgKiAgIFRoZSBjdXJyZW50IHByb2Nlc3NvciB3aGVuIHNldHRpbmcsIHRoZSB2YWx1ZSBhdCBga2V5YCB3aGVuIGdldHRpbmcsIG9yCiAgICAgICAqICAgdGhlIGVudGlyZSBkYXRhc2V0IHdoZW4gZ2V0dGluZyB3aXRob3V0IGtleS4KICAgICAgICovCiAgICAgIGRhdGEoa2V5MiwgdmFsdWUyKSB7CiAgICAgICAgaWYgKHR5cGVvZiBrZXkyID09PSAic3RyaW5nIikgewogICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHsKICAgICAgICAgICAgYXNzZXJ0VW5mcm96ZW4oImRhdGEiLCB0aGlzLmZyb3plbik7CiAgICAgICAgICAgIHRoaXMubmFtZXNwYWNlW2tleTJdID0gdmFsdWUyOwogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBvd24uY2FsbCh0aGlzLm5hbWVzcGFjZSwga2V5MikgJiYgdGhpcy5uYW1lc3BhY2Vba2V5Ml0gfHwgdm9pZCAwOwogICAgICAgIH0KICAgICAgICBpZiAoa2V5MikgewogICAgICAgICAgYXNzZXJ0VW5mcm96ZW4oImRhdGEiLCB0aGlzLmZyb3plbik7CiAgICAgICAgICB0aGlzLm5hbWVzcGFjZSA9IGtleTI7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMubmFtZXNwYWNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBGcmVlemUgYSBwcm9jZXNzb3IuCiAgICAgICAqCiAgICAgICAqIEZyb3plbiBwcm9jZXNzb3JzIGFyZSBtZWFudCB0byBiZSBleHRlbmRlZCBhbmQgbm90IHRvIGJlIGNvbmZpZ3VyZWQKICAgICAgICogZGlyZWN0bHkuCiAgICAgICAqCiAgICAgICAqIFdoZW4gYSBwcm9jZXNzb3IgaXMgZnJvemVuIGl0IGNhbm5vdCBiZSB1bmZyb3plbi4KICAgICAgICogTmV3IHByb2Nlc3NvcnMgd29ya2luZyB0aGUgc2FtZSB3YXkgY2FuIGJlIGNyZWF0ZWQgYnkgY2FsbGluZyB0aGUKICAgICAgICogcHJvY2Vzc29yLgogICAgICAgKgogICAgICAgKiBJdOKAmXMgcG9zc2libGUgdG8gZnJlZXplIHByb2Nlc3NvcnMgZXhwbGljaXRseSBieSBjYWxsaW5nIGAuZnJlZXplKClgLgogICAgICAgKiBQcm9jZXNzb3JzIGZyZWV6ZSBhdXRvbWF0aWNhbGx5IHdoZW4gYC5wYXJzZSgpYCwgYC5ydW4oKWAsIGAucnVuU3luYygpYCwKICAgICAgICogYC5zdHJpbmdpZnkoKWAsIGAucHJvY2VzcygpYCwgb3IgYC5wcm9jZXNzU3luYygpYCBhcmUgY2FsbGVkLgogICAgICAgKgogICAgICAgKiBAcmV0dXJucyB7UHJvY2Vzc29yPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdD59CiAgICAgICAqICAgVGhlIGN1cnJlbnQgcHJvY2Vzc29yLgogICAgICAgKi8KICAgICAgZnJlZXplKCkgewogICAgICAgIGlmICh0aGlzLmZyb3plbikgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHNlbGYyID0gKAogICAgICAgICAgLyoqIEB0eXBlIHtQcm9jZXNzb3J9ICovCiAgICAgICAgICAvKiogQHR5cGUge3Vua25vd259ICovCiAgICAgICAgICB0aGlzCiAgICAgICAgKTsKICAgICAgICB3aGlsZSAoKyt0aGlzLmZyZWV6ZUluZGV4IDwgdGhpcy5hdHRhY2hlcnMubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCBbYXR0YWNoZXIsIC4uLm9wdGlvbnNdID0gdGhpcy5hdHRhY2hlcnNbdGhpcy5mcmVlemVJbmRleF07CiAgICAgICAgICBpZiAob3B0aW9uc1swXSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAob3B0aW9uc1swXSA9PT0gdHJ1ZSkgewogICAgICAgICAgICBvcHRpb25zWzBdID0gdm9pZCAwOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBhdHRhY2hlci5jYWxsKHNlbGYyLCAuLi5vcHRpb25zKTsKICAgICAgICAgIGlmICh0eXBlb2YgdHJhbnNmb3JtZXIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1lcnMudXNlKHRyYW5zZm9ybWVyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5mcm96ZW4gPSB0cnVlOwogICAgICAgIHRoaXMuZnJlZXplSW5kZXggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFBhcnNlIHRleHQgdG8gYSBzeW50YXggdHJlZS4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHBhcnNlYCBmcmVlemVzIHRoZSBwcm9jZXNzb3IgaWYgbm90IGFscmVhZHkgKmZyb3plbiouCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBwYXJzZWAgcGVyZm9ybXMgdGhlIHBhcnNlIHBoYXNlLCBub3QgdGhlIHJ1biBwaGFzZSBvciBvdGhlcgogICAgICAgKiA+IHBoYXNlcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBbZmlsZV0KICAgICAgICogICBmaWxlIHRvIHBhcnNlIChvcHRpb25hbCk7IHR5cGljYWxseSBgc3RyaW5nYCBvciBgVkZpbGVgOyBhbnkgdmFsdWUKICAgICAgICogICBhY2NlcHRlZCBhcyBgeGAgaW4gYG5ldyBWRmlsZSh4KWAuCiAgICAgICAqIEByZXR1cm5zIHtQYXJzZVRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogUGFyc2VUcmVlfQogICAgICAgKiAgIFN5bnRheCB0cmVlIHJlcHJlc2VudGluZyBgZmlsZWAuCiAgICAgICAqLwogICAgICBwYXJzZShmaWxlKSB7CiAgICAgICAgdGhpcy5mcmVlemUoKTsKICAgICAgICBjb25zdCByZWFsRmlsZSA9IHZmaWxlKGZpbGUpOwogICAgICAgIGNvbnN0IHBhcnNlciA9IHRoaXMucGFyc2VyIHx8IHRoaXMuUGFyc2VyOwogICAgICAgIGFzc2VydFBhcnNlcigicGFyc2UiLCBwYXJzZXIpOwogICAgICAgIHJldHVybiBwYXJzZXIoU3RyaW5nKHJlYWxGaWxlKSwgcmVhbEZpbGUpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBQcm9jZXNzIHRoZSBnaXZlbiBmaWxlIGFzIGNvbmZpZ3VyZWQgb24gdGhlIHByb2Nlc3Nvci4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHByb2Nlc3NgIGZyZWV6ZXMgdGhlIHByb2Nlc3NvciBpZiBub3QgYWxyZWFkeSAqZnJvemVuKi4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHByb2Nlc3NgIHBlcmZvcm1zIHRoZSBwYXJzZSwgcnVuLCBhbmQgc3RyaW5naWZ5IHBoYXNlcy4KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gZmlsZQogICAgICAgKiBAcGFyYW0ge1Byb2Nlc3NDYWxsYmFjazxWRmlsZVdpdGhPdXRwdXQ8Q29tcGlsZVJlc3VsdD4+fSBkb25lCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCB1bmRlZmluZWR9IFtmaWxlXQogICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxWRmlsZVdpdGhPdXRwdXQ8Q29tcGlsZVJlc3VsdD4+fQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCB1bmRlZmluZWR9IFtmaWxlXQogICAgICAgKiAgIEZpbGUgKG9wdGlvbmFsKTsgdHlwaWNhbGx5IGBzdHJpbmdgIG9yIGBWRmlsZWBdOyBhbnkgdmFsdWUgYWNjZXB0ZWQgYXMKICAgICAgICogICBgeGAgaW4gYG5ldyBWRmlsZSh4KWAuCiAgICAgICAqIEBwYXJhbSB7UHJvY2Vzc0NhbGxiYWNrPFZGaWxlV2l0aE91dHB1dDxDb21waWxlUmVzdWx0Pj4gfCB1bmRlZmluZWR9IFtkb25lXQogICAgICAgKiAgIENhbGxiYWNrIChvcHRpb25hbCkuCiAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFZGaWxlPiB8IHVuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nIGlmIGBkb25lYCBpcyBnaXZlbi4KICAgICAgICogICBPdGhlcndpc2UgYSBwcm9taXNlLCByZWplY3RlZCB3aXRoIGEgZmF0YWwgZXJyb3Igb3IgcmVzb2x2ZWQgd2l0aCB0aGUKICAgICAgICogICBwcm9jZXNzZWQgZmlsZS4KICAgICAgICoKICAgICAgICogICBUaGUgcGFyc2VkLCB0cmFuc2Zvcm1lZCwgYW5kIGNvbXBpbGVkIHZhbHVlIGlzIGF2YWlsYWJsZSBhdAogICAgICAgKiAgIGBmaWxlLnZhbHVlYCAoc2VlIG5vdGUpLgogICAgICAgKgogICAgICAgKiAgID4gKipOb3RlKio6IHVuaWZpZWQgdHlwaWNhbGx5IGNvbXBpbGVzIGJ5IHNlcmlhbGl6aW5nOiBtb3N0CiAgICAgICAqICAgPiBjb21waWxlcnMgcmV0dXJuIGBzdHJpbmdgIChvciBgVWludDhBcnJheWApLgogICAgICAgKiAgID4gU29tZSBjb21waWxlcnMsIHN1Y2ggYXMgdGhlIG9uZSBjb25maWd1cmVkIHdpdGgKICAgICAgICogICA+IFtgcmVoeXBlLXJlYWN0YF1bcmVoeXBlLXJlYWN0XSwgcmV0dXJuIG90aGVyIHZhbHVlcyAoaW4gdGhpcyBjYXNlLCBhCiAgICAgICAqICAgPiBSZWFjdCB0cmVlKS4KICAgICAgICogICA+IElmIHlvdeKAmXJlIHVzaW5nIGEgY29tcGlsZXIgdGhhdCBkb2VzbuKAmXQgc2VyaWFsaXplLCBleHBlY3QgZGlmZmVyZW50CiAgICAgICAqICAgPiByZXN1bHQgdmFsdWVzLgogICAgICAgKiAgID4KICAgICAgICogICA+IFRvIHJlZ2lzdGVyIGN1c3RvbSByZXN1bHRzIGluIFR5cGVTY3JpcHQsIGFkZCB0aGVtIHRvCiAgICAgICAqICAgPiB7QGxpbmtjb2RlIENvbXBpbGVSZXN1bHRNYXB9LgogICAgICAgKgogICAgICAgKiAgIFtyZWh5cGUtcmVhY3RdOiBodHRwczovL2dpdGh1Yi5jb20vcmVoeXBlanMvcmVoeXBlLXJlYWN0CiAgICAgICAqLwogICAgICBwcm9jZXNzKGZpbGUsIGRvbmUpIHsKICAgICAgICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgICAgICAgdGhpcy5mcmVlemUoKTsKICAgICAgICBhc3NlcnRQYXJzZXIoInByb2Nlc3MiLCB0aGlzLnBhcnNlciB8fCB0aGlzLlBhcnNlcik7CiAgICAgICAgYXNzZXJ0Q29tcGlsZXIoInByb2Nlc3MiLCB0aGlzLmNvbXBpbGVyIHx8IHRoaXMuQ29tcGlsZXIpOwogICAgICAgIHJldHVybiBkb25lID8gZXhlY3V0b3Iodm9pZCAwLCBkb25lKSA6IG5ldyBQcm9taXNlKGV4ZWN1dG9yKTsKICAgICAgICBmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICAgICAgICBjb25zdCByZWFsRmlsZSA9IHZmaWxlKGZpbGUpOwogICAgICAgICAgY29uc3QgcGFyc2VUcmVlID0gKAogICAgICAgICAgICAvKiogQHR5cGUge0hlYWRUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IEhlYWRUcmVlfSAqLwogICAgICAgICAgICAvKiogQHR5cGUge3Vua25vd259ICovCiAgICAgICAgICAgIHNlbGYyLnBhcnNlKHJlYWxGaWxlKQogICAgICAgICAgKTsKICAgICAgICAgIHNlbGYyLnJ1bihwYXJzZVRyZWUsIHJlYWxGaWxlLCBmdW5jdGlvbihlcnJvciwgdHJlZSwgZmlsZTIpIHsKICAgICAgICAgICAgaWYgKGVycm9yIHx8ICF0cmVlIHx8ICFmaWxlMikgewogICAgICAgICAgICAgIHJldHVybiByZWFsRG9uZShlcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgY29tcGlsZVRyZWUgPSAoCiAgICAgICAgICAgICAgLyoqIEB0eXBlIHtDb21waWxlVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBDb21waWxlVHJlZX0gKi8KICAgICAgICAgICAgICAvKiogQHR5cGUge3Vua25vd259ICovCiAgICAgICAgICAgICAgdHJlZQogICAgICAgICAgICApOwogICAgICAgICAgICBjb25zdCBjb21waWxlUmVzdWx0ID0gc2VsZjIuc3RyaW5naWZ5KGNvbXBpbGVUcmVlLCBmaWxlMik7CiAgICAgICAgICAgIGlmIChsb29rc0xpa2VBVmFsdWUoY29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgICAgICBmaWxlMi52YWx1ZSA9IGNvbXBpbGVSZXN1bHQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgZmlsZTIucmVzdWx0ID0gY29tcGlsZVJlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZWFsRG9uZSgKICAgICAgICAgICAgICBlcnJvciwKICAgICAgICAgICAgICAvKiogQHR5cGUge1ZGaWxlV2l0aE91dHB1dDxDb21waWxlUmVzdWx0Pn0gKi8KICAgICAgICAgICAgICBmaWxlMgogICAgICAgICAgICApOwogICAgICAgICAgfSk7CiAgICAgICAgICBmdW5jdGlvbiByZWFsRG9uZShlcnJvciwgZmlsZTIpIHsKICAgICAgICAgICAgaWYgKGVycm9yIHx8ICFmaWxlMikgewogICAgICAgICAgICAgIHJlamVjdChlcnJvcik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb2x2ZTIpIHsKICAgICAgICAgICAgICByZXNvbHZlMihmaWxlMik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgb2soZG9uZSwgImBkb25lYCBpcyBkZWZpbmVkIGlmIGByZXNvbHZlYCBpcyBub3QiKTsKICAgICAgICAgICAgICBkb25lKHZvaWQgMCwgZmlsZTIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBQcm9jZXNzIHRoZSBnaXZlbiBmaWxlIGFzIGNvbmZpZ3VyZWQgb24gdGhlIHByb2Nlc3Nvci4KICAgICAgICoKICAgICAgICogQW4gZXJyb3IgaXMgdGhyb3duIGlmIGFzeW5jaHJvbm91cyB0cmFuc2Zvcm1zIGFyZSBjb25maWd1cmVkLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcHJvY2Vzc1N5bmNgIGZyZWV6ZXMgdGhlIHByb2Nlc3NvciBpZiBub3QgYWxyZWFkeSAqZnJvemVuKi4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHByb2Nlc3NTeW5jYCBwZXJmb3JtcyB0aGUgcGFyc2UsIHJ1biwgYW5kIHN0cmluZ2lmeSBwaGFzZXMuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdCiAgICAgICAqICAgRmlsZSAob3B0aW9uYWwpOyB0eXBpY2FsbHkgYHN0cmluZ2Agb3IgYFZGaWxlYDsgYW55IHZhbHVlIGFjY2VwdGVkIGFzCiAgICAgICAqICAgYHhgIGluIGBuZXcgVkZpbGUoeClgLgogICAgICAgKiBAcmV0dXJucyB7VkZpbGVXaXRoT3V0cHV0PENvbXBpbGVSZXN1bHQ+fQogICAgICAgKiAgIFRoZSBwcm9jZXNzZWQgZmlsZS4KICAgICAgICoKICAgICAgICogICBUaGUgcGFyc2VkLCB0cmFuc2Zvcm1lZCwgYW5kIGNvbXBpbGVkIHZhbHVlIGlzIGF2YWlsYWJsZSBhdAogICAgICAgKiAgIGBmaWxlLnZhbHVlYCAoc2VlIG5vdGUpLgogICAgICAgKgogICAgICAgKiAgID4gKipOb3RlKio6IHVuaWZpZWQgdHlwaWNhbGx5IGNvbXBpbGVzIGJ5IHNlcmlhbGl6aW5nOiBtb3N0CiAgICAgICAqICAgPiBjb21waWxlcnMgcmV0dXJuIGBzdHJpbmdgIChvciBgVWludDhBcnJheWApLgogICAgICAgKiAgID4gU29tZSBjb21waWxlcnMsIHN1Y2ggYXMgdGhlIG9uZSBjb25maWd1cmVkIHdpdGgKICAgICAgICogICA+IFtgcmVoeXBlLXJlYWN0YF1bcmVoeXBlLXJlYWN0XSwgcmV0dXJuIG90aGVyIHZhbHVlcyAoaW4gdGhpcyBjYXNlLCBhCiAgICAgICAqICAgPiBSZWFjdCB0cmVlKS4KICAgICAgICogICA+IElmIHlvdeKAmXJlIHVzaW5nIGEgY29tcGlsZXIgdGhhdCBkb2VzbuKAmXQgc2VyaWFsaXplLCBleHBlY3QgZGlmZmVyZW50CiAgICAgICAqICAgPiByZXN1bHQgdmFsdWVzLgogICAgICAgKiAgID4KICAgICAgICogICA+IFRvIHJlZ2lzdGVyIGN1c3RvbSByZXN1bHRzIGluIFR5cGVTY3JpcHQsIGFkZCB0aGVtIHRvCiAgICAgICAqICAgPiB7QGxpbmtjb2RlIENvbXBpbGVSZXN1bHRNYXB9LgogICAgICAgKgogICAgICAgKiAgIFtyZWh5cGUtcmVhY3RdOiBodHRwczovL2dpdGh1Yi5jb20vcmVoeXBlanMvcmVoeXBlLXJlYWN0CiAgICAgICAqLwogICAgICBwcm9jZXNzU3luYyhmaWxlKSB7CiAgICAgICAgbGV0IGNvbXBsZXRlID0gZmFsc2U7CiAgICAgICAgbGV0IHJlc3VsdDsKICAgICAgICB0aGlzLmZyZWV6ZSgpOwogICAgICAgIGFzc2VydFBhcnNlcigicHJvY2Vzc1N5bmMiLCB0aGlzLnBhcnNlciB8fCB0aGlzLlBhcnNlcik7CiAgICAgICAgYXNzZXJ0Q29tcGlsZXIoInByb2Nlc3NTeW5jIiwgdGhpcy5jb21waWxlciB8fCB0aGlzLkNvbXBpbGVyKTsKICAgICAgICB0aGlzLnByb2Nlc3MoZmlsZSwgcmVhbERvbmUpOwogICAgICAgIGFzc2VydERvbmUoInByb2Nlc3NTeW5jIiwgInByb2Nlc3MiLCBjb21wbGV0ZSk7CiAgICAgICAgb2socmVzdWx0LCAid2UgZWl0aGVyIGJhaWxlZCBvbiBhbiBlcnJvciBvciBoYXZlIGEgdHJlZSIpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgZnVuY3Rpb24gcmVhbERvbmUoZXJyb3IsIGZpbGUyKSB7CiAgICAgICAgICBjb21wbGV0ZSA9IHRydWU7CiAgICAgICAgICBiYWlsKGVycm9yKTsKICAgICAgICAgIHJlc3VsdCA9IGZpbGUyOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogUnVuICp0cmFuc2Zvcm1lcnMqIG9uIGEgc3ludGF4IHRyZWUuCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBydW5gIGZyZWV6ZXMgdGhlIHByb2Nlc3NvciBpZiBub3QgYWxyZWFkeSAqZnJvemVuKi4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHJ1bmAgcGVyZm9ybXMgdGhlIHJ1biBwaGFzZSwgbm90IG90aGVyIHBoYXNlcy4KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7SGVhZFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogSGVhZFRyZWV9IHRyZWUKICAgICAgICogQHBhcmFtIHtSdW5DYWxsYmFjazxUYWlsVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBUYWlsVHJlZT59IGRvbmUKICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7SGVhZFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogSGVhZFRyZWV9IHRyZWUKICAgICAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBmaWxlCiAgICAgICAqIEBwYXJhbSB7UnVuQ2FsbGJhY2s8VGFpbFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogVGFpbFRyZWU+fSBkb25lCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0hlYWRUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IEhlYWRUcmVlfSB0cmVlCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdCiAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFRhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlPn0KICAgICAgICoKICAgICAgICogQHBhcmFtIHtIZWFkVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBIZWFkVHJlZX0gdHJlZQogICAgICAgKiAgIFRyZWUgdG8gdHJhbnNmb3JtIGFuZCBpbnNwZWN0LgogICAgICAgKiBAcGFyYW0geygKICAgICAgICogICBSdW5DYWxsYmFjazxUYWlsVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBUYWlsVHJlZT4gfAogICAgICAgKiAgIENvbXBhdGlibGUKICAgICAgICogKX0gW2ZpbGVdCiAgICAgICAqICAgRmlsZSBhc3NvY2lhdGVkIHdpdGggYG5vZGVgIChvcHRpb25hbCk7IGFueSB2YWx1ZSBhY2NlcHRlZCBhcyBgeGAgaW4KICAgICAgICogICBgbmV3IFZGaWxlKHgpYC4KICAgICAgICogQHBhcmFtIHtSdW5DYWxsYmFjazxUYWlsVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBUYWlsVHJlZT59IFtkb25lXQogICAgICAgKiAgIENhbGxiYWNrIChvcHRpb25hbCkuCiAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFRhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlPiB8IHVuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nIGlmIGBkb25lYCBpcyBnaXZlbi4KICAgICAgICogICBPdGhlcndpc2UsIGEgcHJvbWlzZSByZWplY3RlZCB3aXRoIGEgZmF0YWwgZXJyb3Igb3IgcmVzb2x2ZWQgd2l0aCB0aGUKICAgICAgICogICB0cmFuc2Zvcm1lZCB0cmVlLgogICAgICAgKi8KICAgICAgcnVuKHRyZWUsIGZpbGUsIGRvbmUpIHsKICAgICAgICBhc3NlcnROb2RlKHRyZWUpOwogICAgICAgIHRoaXMuZnJlZXplKCk7CiAgICAgICAgY29uc3QgdHJhbnNmb3JtZXJzID0gdGhpcy50cmFuc2Zvcm1lcnM7CiAgICAgICAgaWYgKCFkb25lICYmIHR5cGVvZiBmaWxlID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBkb25lID0gZmlsZTsKICAgICAgICAgIGZpbGUgPSB2b2lkIDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkb25lID8gZXhlY3V0b3Iodm9pZCAwLCBkb25lKSA6IG5ldyBQcm9taXNlKGV4ZWN1dG9yKTsKICAgICAgICBmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICAgICAgICBvaygKICAgICAgICAgICAgdHlwZW9mIGZpbGUgIT09ICJmdW5jdGlvbiIsCiAgICAgICAgICAgICJgZmlsZWAgY2FuXHUyMDE5dCBiZSBhIGBkb25lYCBhbnltb3JlLCB3ZSBjaGVja2VkIgogICAgICAgICAgKTsKICAgICAgICAgIGNvbnN0IHJlYWxGaWxlID0gdmZpbGUoZmlsZSk7CiAgICAgICAgICB0cmFuc2Zvcm1lcnMucnVuKHRyZWUsIHJlYWxGaWxlLCByZWFsRG9uZSk7CiAgICAgICAgICBmdW5jdGlvbiByZWFsRG9uZShlcnJvciwgb3V0cHV0VHJlZSwgZmlsZTIpIHsKICAgICAgICAgICAgY29uc3QgcmVzdWx0aW5nVHJlZSA9ICgKICAgICAgICAgICAgICAvKiogQHR5cGUge1RhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlfSAqLwogICAgICAgICAgICAgIG91dHB1dFRyZWUgfHwgdHJlZQogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgICByZWplY3QoZXJyb3IpOwogICAgICAgICAgICB9IGVsc2UgaWYgKHJlc29sdmUyKSB7CiAgICAgICAgICAgICAgcmVzb2x2ZTIocmVzdWx0aW5nVHJlZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgb2soZG9uZSwgImBkb25lYCBpcyBkZWZpbmVkIGlmIGByZXNvbHZlYCBpcyBub3QiKTsKICAgICAgICAgICAgICBkb25lKHZvaWQgMCwgcmVzdWx0aW5nVHJlZSwgZmlsZTIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSdW4gKnRyYW5zZm9ybWVycyogb24gYSBzeW50YXggdHJlZS4KICAgICAgICoKICAgICAgICogQW4gZXJyb3IgaXMgdGhyb3duIGlmIGFzeW5jaHJvbm91cyB0cmFuc2Zvcm1zIGFyZSBjb25maWd1cmVkLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcnVuU3luY2AgZnJlZXplcyB0aGUgcHJvY2Vzc29yIGlmIG5vdCBhbHJlYWR5ICpmcm96ZW4qLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcnVuU3luY2AgcGVyZm9ybXMgdGhlIHJ1biBwaGFzZSwgbm90IG90aGVyIHBoYXNlcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtIZWFkVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBIZWFkVHJlZX0gdHJlZQogICAgICAgKiAgIFRyZWUgdG8gdHJhbnNmb3JtIGFuZCBpbnNwZWN0LgogICAgICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCB1bmRlZmluZWR9IFtmaWxlXQogICAgICAgKiAgIEZpbGUgYXNzb2NpYXRlZCB3aXRoIGBub2RlYCAob3B0aW9uYWwpOyBhbnkgdmFsdWUgYWNjZXB0ZWQgYXMgYHhgIGluCiAgICAgICAqICAgYG5ldyBWRmlsZSh4KWAuCiAgICAgICAqIEByZXR1cm5zIHtUYWlsVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBUYWlsVHJlZX0KICAgICAgICogICBUcmFuc2Zvcm1lZCB0cmVlLgogICAgICAgKi8KICAgICAgcnVuU3luYyh0cmVlLCBmaWxlKSB7CiAgICAgICAgbGV0IGNvbXBsZXRlID0gZmFsc2U7CiAgICAgICAgbGV0IHJlc3VsdDsKICAgICAgICB0aGlzLnJ1bih0cmVlLCBmaWxlLCByZWFsRG9uZSk7CiAgICAgICAgYXNzZXJ0RG9uZSgicnVuU3luYyIsICJydW4iLCBjb21wbGV0ZSk7CiAgICAgICAgb2socmVzdWx0LCAid2UgZWl0aGVyIGJhaWxlZCBvbiBhbiBlcnJvciBvciBoYXZlIGEgdHJlZSIpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgZnVuY3Rpb24gcmVhbERvbmUoZXJyb3IsIHRyZWUyKSB7CiAgICAgICAgICBiYWlsKGVycm9yKTsKICAgICAgICAgIHJlc3VsdCA9IHRyZWUyOwogICAgICAgICAgY29tcGxldGUgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogQ29tcGlsZSBhIHN5bnRheCB0cmVlLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgc3RyaW5naWZ5YCBmcmVlemVzIHRoZSBwcm9jZXNzb3IgaWYgbm90IGFscmVhZHkgKmZyb3plbiouCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBzdHJpbmdpZnlgIHBlcmZvcm1zIHRoZSBzdHJpbmdpZnkgcGhhc2UsIG5vdCB0aGUgcnVuIHBoYXNlCiAgICAgICAqID4gb3Igb3RoZXIgcGhhc2VzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0NvbXBpbGVUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IENvbXBpbGVUcmVlfSB0cmVlCiAgICAgICAqICAgVHJlZSB0byBjb21waWxlLgogICAgICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCB1bmRlZmluZWR9IFtmaWxlXQogICAgICAgKiAgIEZpbGUgYXNzb2NpYXRlZCB3aXRoIGBub2RlYCAob3B0aW9uYWwpOyBhbnkgdmFsdWUgYWNjZXB0ZWQgYXMgYHhgIGluCiAgICAgICAqICAgYG5ldyBWRmlsZSh4KWAuCiAgICAgICAqIEByZXR1cm5zIHtDb21waWxlUmVzdWx0IGV4dGVuZHMgdW5kZWZpbmVkID8gVmFsdWUgOiBDb21waWxlUmVzdWx0fQogICAgICAgKiAgIFRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyZWUgKHNlZSBub3RlKS4KICAgICAgICoKICAgICAgICogICA+ICoqTm90ZSoqOiB1bmlmaWVkIHR5cGljYWxseSBjb21waWxlcyBieSBzZXJpYWxpemluZzogbW9zdCBjb21waWxlcnMKICAgICAgICogICA+IHJldHVybiBgc3RyaW5nYCAob3IgYFVpbnQ4QXJyYXlgKS4KICAgICAgICogICA+IFNvbWUgY29tcGlsZXJzLCBzdWNoIGFzIHRoZSBvbmUgY29uZmlndXJlZCB3aXRoCiAgICAgICAqICAgPiBbYHJlaHlwZS1yZWFjdGBdW3JlaHlwZS1yZWFjdF0sIHJldHVybiBvdGhlciB2YWx1ZXMgKGluIHRoaXMgY2FzZSwgYQogICAgICAgKiAgID4gUmVhY3QgdHJlZSkuCiAgICAgICAqICAgPiBJZiB5b3XigJlyZSB1c2luZyBhIGNvbXBpbGVyIHRoYXQgZG9lc27igJl0IHNlcmlhbGl6ZSwgZXhwZWN0IGRpZmZlcmVudAogICAgICAgKiAgID4gcmVzdWx0IHZhbHVlcy4KICAgICAgICogICA+CiAgICAgICAqICAgPiBUbyByZWdpc3RlciBjdXN0b20gcmVzdWx0cyBpbiBUeXBlU2NyaXB0LCBhZGQgdGhlbSB0bwogICAgICAgKiAgID4ge0BsaW5rY29kZSBDb21waWxlUmVzdWx0TWFwfS4KICAgICAgICoKICAgICAgICogICBbcmVoeXBlLXJlYWN0XTogaHR0cHM6Ly9naXRodWIuY29tL3JlaHlwZWpzL3JlaHlwZS1yZWFjdAogICAgICAgKi8KICAgICAgc3RyaW5naWZ5KHRyZWUsIGZpbGUpIHsKICAgICAgICB0aGlzLmZyZWV6ZSgpOwogICAgICAgIGNvbnN0IHJlYWxGaWxlID0gdmZpbGUoZmlsZSk7CiAgICAgICAgY29uc3QgY29tcGlsZXIyID0gdGhpcy5jb21waWxlciB8fCB0aGlzLkNvbXBpbGVyOwogICAgICAgIGFzc2VydENvbXBpbGVyKCJzdHJpbmdpZnkiLCBjb21waWxlcjIpOwogICAgICAgIGFzc2VydE5vZGUodHJlZSk7CiAgICAgICAgcmV0dXJuIGNvbXBpbGVyMih0cmVlLCByZWFsRmlsZSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENvbmZpZ3VyZSB0aGUgcHJvY2Vzc29yIHRvIHVzZSBhIHBsdWdpbiwgYSBsaXN0IG9mIHVzYWJsZSB2YWx1ZXMsIG9yIGEKICAgICAgICogcHJlc2V0LgogICAgICAgKgogICAgICAgKiBJZiB0aGUgcHJvY2Vzc29yIGlzIGFscmVhZHkgdXNpbmcgYSBwbHVnaW4sIHRoZSBwcmV2aW91cyBwbHVnaW4KICAgICAgICogY29uZmlndXJhdGlvbiBpcyBjaGFuZ2VkIGJhc2VkIG9uIHRoZSBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCBpbi4KICAgICAgICogSW4gb3RoZXIgd29yZHMsIHRoZSBwbHVnaW4gaXMgbm90IGFkZGVkIGEgc2Vjb25kIHRpbWUuCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGB1c2VgIGNhbm5vdCBiZSBjYWxsZWQgb24gKmZyb3plbiogcHJvY2Vzc29ycy4KICAgICAgICogPiBDYWxsIHRoZSBwcm9jZXNzb3IgZmlyc3QgdG8gY3JlYXRlIGEgbmV3IHVuZnJvemVuIHByb2Nlc3Nvci4KICAgICAgICoKICAgICAgICogQGV4YW1wbGUKICAgICAgICogICBUaGVyZSBhcmUgbWFueSB3YXlzIHRvIHBhc3MgcGx1Z2lucyB0byBgLnVzZSgpYC4KICAgICAgICogICBUaGlzIGV4YW1wbGUgZ2l2ZXMgYW4gb3ZlcnZpZXc6CiAgICAgICAqCiAgICAgICAqICAgYGBganMKICAgICAgICogICBpbXBvcnQge3VuaWZpZWR9IGZyb20gJ3VuaWZpZWQnCiAgICAgICAqCiAgICAgICAqICAgdW5pZmllZCgpCiAgICAgICAqICAgICAvLyBQbHVnaW4gd2l0aCBvcHRpb25zOgogICAgICAgKiAgICAgLnVzZShwbHVnaW5BLCB7eDogdHJ1ZSwgeTogdHJ1ZX0pCiAgICAgICAqICAgICAvLyBQYXNzaW5nIHRoZSBzYW1lIHBsdWdpbiBhZ2FpbiBtZXJnZXMgY29uZmlndXJhdGlvbiAodG8gYHt4OiB0cnVlLCB5OiBmYWxzZSwgejogdHJ1ZX1gKToKICAgICAgICogICAgIC51c2UocGx1Z2luQSwge3k6IGZhbHNlLCB6OiB0cnVlfSkKICAgICAgICogICAgIC8vIFBsdWdpbnM6CiAgICAgICAqICAgICAudXNlKFtwbHVnaW5CLCBwbHVnaW5DXSkKICAgICAgICogICAgIC8vIFR3byBwbHVnaW5zLCB0aGUgc2Vjb25kIHdpdGggb3B0aW9uczoKICAgICAgICogICAgIC51c2UoW3BsdWdpbkQsIFtwbHVnaW5FLCB7fV1dKQogICAgICAgKiAgICAgLy8gUHJlc2V0IHdpdGggcGx1Z2lucyBhbmQgc2V0dGluZ3M6CiAgICAgICAqICAgICAudXNlKHtwbHVnaW5zOiBbcGx1Z2luRiwgW3BsdWdpbkcsIHt9XV0sIHNldHRpbmdzOiB7cG9zaXRpb246IGZhbHNlfX0pCiAgICAgICAqICAgICAvLyBTZXR0aW5ncyBvbmx5OgogICAgICAgKiAgICAgLnVzZSh7c2V0dGluZ3M6IHtwb3NpdGlvbjogZmFsc2V9fSkKICAgICAgICogICBgYGAKICAgICAgICoKICAgICAgICogQHRlbXBsYXRlIHtBcnJheTx1bmtub3duPn0gW1BhcmFtZXRlcnM9W11dCiAgICAgICAqIEB0ZW1wbGF0ZSB7Tm9kZSB8IHN0cmluZyB8IHVuZGVmaW5lZH0gW0lucHV0PXVuZGVmaW5lZF0KICAgICAgICogQHRlbXBsYXRlIFtPdXRwdXQ9SW5wdXRdCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge1ByZXNldCB8IG51bGwgfCB1bmRlZmluZWR9IFtwcmVzZXRdCiAgICAgICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7UGx1Z2dhYmxlTGlzdH0gbGlzdAogICAgICAgKiBAcmV0dXJucyB7UHJvY2Vzc29yPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdD59CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge1BsdWdpbjxQYXJhbWV0ZXJzLCBJbnB1dCwgT3V0cHV0Pn0gcGx1Z2luCiAgICAgICAqIEBwYXJhbSB7Li4uKFBhcmFtZXRlcnMgfCBbYm9vbGVhbl0pfSBwYXJhbWV0ZXJzCiAgICAgICAqIEByZXR1cm5zIHtVc2VQbHVnaW48UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0LCBJbnB1dCwgT3V0cHV0Pn0KICAgICAgICoKICAgICAgICogQHBhcmFtIHtQbHVnZ2FibGVMaXN0IHwgUGx1Z2luIHwgUHJlc2V0IHwgbnVsbCB8IHVuZGVmaW5lZH0gdmFsdWUKICAgICAgICogICBVc2FibGUgdmFsdWUuCiAgICAgICAqIEBwYXJhbSB7Li4udW5rbm93bn0gcGFyYW1ldGVycwogICAgICAgKiAgIFBhcmFtZXRlcnMsIHdoZW4gYSBwbHVnaW4gaXMgZ2l2ZW4gYXMgYSB1c2FibGUgdmFsdWUuCiAgICAgICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn0KICAgICAgICogICBDdXJyZW50IHByb2Nlc3Nvci4KICAgICAgICovCiAgICAgIHVzZSh2YWx1ZTIsIC4uLnBhcmFtZXRlcnMpIHsKICAgICAgICBjb25zdCBhdHRhY2hlcnMgPSB0aGlzLmF0dGFjaGVyczsKICAgICAgICBjb25zdCBuYW1lc3BhY2UyID0gdGhpcy5uYW1lc3BhY2U7CiAgICAgICAgYXNzZXJ0VW5mcm96ZW4oInVzZSIsIHRoaXMuZnJvemVuKTsKICAgICAgICBpZiAodmFsdWUyID09PSBudWxsIHx8IHZhbHVlMiA9PT0gdm9pZCAwKSB7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUyID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBhZGRQbHVnaW4odmFsdWUyLCBwYXJhbWV0ZXJzKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTIgPT09ICJvYmplY3QiKSB7CiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7CiAgICAgICAgICAgIGFkZExpc3QodmFsdWUyKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFkZFByZXNldCh2YWx1ZTIpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCB1c2FibGUgdmFsdWUsIG5vdCBgIiArIHZhbHVlMiArICJgIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIGZ1bmN0aW9uIGFkZDModmFsdWUzKSB7CiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlMyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICBhZGRQbHVnaW4odmFsdWUzLCBbXSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTMgPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMykpIHsKICAgICAgICAgICAgICBjb25zdCBbcGx1Z2luLCAuLi5wYXJhbWV0ZXJzMl0gPSAoCiAgICAgICAgICAgICAgICAvKiogQHR5cGUge1BsdWdpblR1cGxlPEFycmF5PHVua25vd24+Pn0gKi8KICAgICAgICAgICAgICAgIHZhbHVlMwogICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgYWRkUGx1Z2luKHBsdWdpbiwgcGFyYW1ldGVyczIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGFkZFByZXNldCh2YWx1ZTMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCB1c2FibGUgdmFsdWUsIG5vdCBgIiArIHZhbHVlMyArICJgIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGFkZFByZXNldChyZXN1bHQpIHsKICAgICAgICAgIGlmICghKCJwbHVnaW5zIiBpbiByZXN1bHQpICYmICEoInNldHRpbmdzIiBpbiByZXN1bHQpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAiRXhwZWN0ZWQgdXNhYmxlIHZhbHVlIGJ1dCByZWNlaXZlZCBhbiBlbXB0eSBwcmVzZXQsIHdoaWNoIGlzIHByb2JhYmx5IGEgbWlzdGFrZTogcHJlc2V0cyB0eXBpY2FsbHkgY29tZSB3aXRoIGBwbHVnaW5zYCBhbmQgc29tZXRpbWVzIHdpdGggYHNldHRpbmdzYCwgYnV0IHRoaXMgaGFzIG5laXRoZXIiCiAgICAgICAgICAgICk7CiAgICAgICAgICB9CiAgICAgICAgICBhZGRMaXN0KHJlc3VsdC5wbHVnaW5zKTsKICAgICAgICAgIGlmIChyZXN1bHQuc2V0dGluZ3MpIHsKICAgICAgICAgICAgbmFtZXNwYWNlMi5zZXR0aW5ncyA9ICgwLCBpbXBvcnRfZXh0ZW5kLmRlZmF1bHQpKHRydWUsIG5hbWVzcGFjZTIuc2V0dGluZ3MsIHJlc3VsdC5zZXR0aW5ncyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGFkZExpc3QocGx1Z2luczMpIHsKICAgICAgICAgIGxldCBpbmRleDIgPSAtMTsKICAgICAgICAgIGlmIChwbHVnaW5zMyA9PT0gbnVsbCB8fCBwbHVnaW5zMyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGx1Z2luczMpKSB7CiAgICAgICAgICAgIHdoaWxlICgrK2luZGV4MiA8IHBsdWdpbnMzLmxlbmd0aCkgewogICAgICAgICAgICAgIGNvbnN0IHRoaW5nID0gcGx1Z2luczNbaW5kZXgyXTsKICAgICAgICAgICAgICBhZGQzKHRoaW5nKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBsaXN0IG9mIHBsdWdpbnMsIG5vdCBgIiArIHBsdWdpbnMzICsgImAiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gYWRkUGx1Z2luKHBsdWdpbiwgcGFyYW1ldGVyczIpIHsKICAgICAgICAgIGxldCBpbmRleDIgPSAtMTsKICAgICAgICAgIGxldCBlbnRyeUluZGV4ID0gLTE7CiAgICAgICAgICB3aGlsZSAoKytpbmRleDIgPCBhdHRhY2hlcnMubGVuZ3RoKSB7CiAgICAgICAgICAgIGlmIChhdHRhY2hlcnNbaW5kZXgyXVswXSA9PT0gcGx1Z2luKSB7CiAgICAgICAgICAgICAgZW50cnlJbmRleCA9IGluZGV4MjsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGVudHJ5SW5kZXggPT09IC0xKSB7CiAgICAgICAgICAgIGF0dGFjaGVycy5wdXNoKFtwbHVnaW4sIC4uLnBhcmFtZXRlcnMyXSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtZXRlcnMyLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgbGV0IFtwcmltYXJ5LCAuLi5yZXN0XSA9IHBhcmFtZXRlcnMyOwogICAgICAgICAgICBjb25zdCBjdXJyZW50UHJpbWFyeSA9IGF0dGFjaGVyc1tlbnRyeUluZGV4XVsxXTsKICAgICAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QoY3VycmVudFByaW1hcnkpICYmIGlzUGxhaW5PYmplY3QocHJpbWFyeSkpIHsKICAgICAgICAgICAgICBwcmltYXJ5ID0gKDAsIGltcG9ydF9leHRlbmQuZGVmYXVsdCkodHJ1ZSwgY3VycmVudFByaW1hcnksIHByaW1hcnkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGF0dGFjaGVyc1tlbnRyeUluZGV4XSA9IFtwbHVnaW4sIHByaW1hcnksIC4uLnJlc3RdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIHVuaWZpZWQgPSBuZXcgUHJvY2Vzc29yKCkuZnJlZXplKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmlmaWVkQDExLjAuNS9ub2RlX21vZHVsZXMvdW5pZmllZC9pbmRleC5qcwp2YXIgaW5pdF91bmlmaWVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pZmllZEAxMS4wLjUvbm9kZV9tb2R1bGVzL3VuaWZpZWQvaW5kZXguanMiKCkgewogICAgaW5pdF9saWI1KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9jY291bnRAMi4wLjEvbm9kZV9tb2R1bGVzL2Njb3VudC9pbmRleC5qcwpmdW5jdGlvbiBjY291bnQodmFsdWUyLCBjaGFyYWN0ZXIpIHsKICBjb25zdCBzb3VyY2UgPSBTdHJpbmcodmFsdWUyKTsKICBpZiAodHlwZW9mIGNoYXJhY3RlciAhPT0gInN0cmluZyIpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGNoYXJhY3RlciIpOwogIH0KICBsZXQgY291bnQyID0gMDsKICBsZXQgaW5kZXgyID0gc291cmNlLmluZGV4T2YoY2hhcmFjdGVyKTsKICB3aGlsZSAoaW5kZXgyICE9PSAtMSkgewogICAgY291bnQyKys7CiAgICBpbmRleDIgPSBzb3VyY2UuaW5kZXhPZihjaGFyYWN0ZXIsIGluZGV4MiArIGNoYXJhY3Rlci5sZW5ndGgpOwogIH0KICByZXR1cm4gY291bnQyOwp9CnZhciBpbml0X2Njb3VudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Njb3VudEAyLjAuMS9ub2RlX21vZHVsZXMvY2NvdW50L2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWNoYXJhY3RlckAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyL2luZGV4LmpzCmZ1bmN0aW9uIGFzY2lpQ29udHJvbChjb2RlNCkgewogIHJldHVybiAoCiAgICAvLyBTcGVjaWFsIHdoaXRlc3BhY2UgY29kZXMgKHdoaWNoIGhhdmUgbmVnYXRpdmUgdmFsdWVzKSwgQzAgYW5kIENvbnRyb2wKICAgIC8vIGNoYXJhY3RlciBERUwKICAgIGNvZGU0ICE9PSBudWxsICYmIChjb2RlNCA8IDMyIHx8IGNvZGU0ID09PSAxMjcpCiAgKTsKfQpmdW5jdGlvbiBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpIHsKICByZXR1cm4gY29kZTQgIT09IG51bGwgJiYgY29kZTQgPCAtMjsKfQpmdW5jdGlvbiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSB7CiAgcmV0dXJuIGNvZGU0ICE9PSBudWxsICYmIChjb2RlNCA8IDAgfHwgY29kZTQgPT09IDMyKTsKfQpmdW5jdGlvbiBtYXJrZG93blNwYWNlKGNvZGU0KSB7CiAgcmV0dXJuIGNvZGU0ID09PSAtMiB8fCBjb2RlNCA9PT0gLTEgfHwgY29kZTQgPT09IDMyOwp9CmZ1bmN0aW9uIHJlZ2V4Q2hlY2socmVnZXgpIHsKICByZXR1cm4gY2hlY2s7CiAgZnVuY3Rpb24gY2hlY2soY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCAhPT0gbnVsbCAmJiBjb2RlNCA+IC0xICYmIHJlZ2V4LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlNCkpOwogIH0KfQp2YXIgYXNjaWlBbHBoYSwgYXNjaWlBbHBoYW51bWVyaWMsIGFzY2lpQXRleHQsIGFzY2lpRGlnaXQsIGFzY2lpSGV4RGlnaXQsIGFzY2lpUHVuY3R1YXRpb24sIHVuaWNvZGVQdW5jdHVhdGlvbiwgdW5pY29kZVdoaXRlc3BhY2U7CnZhciBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWNoYXJhY3RlckAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyL2luZGV4LmpzIigpIHsKICAgIGFzY2lpQWxwaGEgPSByZWdleENoZWNrKC9bQS1aYS16XS8pOwogICAgYXNjaWlBbHBoYW51bWVyaWMgPSByZWdleENoZWNrKC9bXGRBLVphLXpdLyk7CiAgICBhc2NpaUF0ZXh0ID0gcmVnZXhDaGVjaygvWyMtJyorXC0tOT0/QS1aXi1+XS8pOwogICAgYXNjaWlEaWdpdCA9IHJlZ2V4Q2hlY2soL1xkLyk7CiAgICBhc2NpaUhleERpZ2l0ID0gcmVnZXhDaGVjaygvW1xkQS1GYS1mXS8pOwogICAgYXNjaWlQdW5jdHVhdGlvbiA9IHJlZ2V4Q2hlY2soL1shLS86LUBbLWB7LX5dLyk7CiAgICB1bmljb2RlUHVuY3R1YXRpb24gPSByZWdleENoZWNrKC9ccHtQfXxccHtTfS91KTsKICAgIHVuaWNvZGVXaGl0ZXNwYWNlID0gcmVnZXhDaGVjaygvXHMvKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtaXNANi4wLjEvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtaXMvbGliL2luZGV4LmpzCmZ1bmN0aW9uIGFueUZhY3RvcnkodGVzdHMpIHsKICBjb25zdCBjaGVja3MyID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHRlc3RzLmxlbmd0aCkgewogICAgY2hlY2tzMltpbmRleDJdID0gY29udmVydCh0ZXN0c1tpbmRleDJdKTsKICB9CiAgcmV0dXJuIGNhc3RGYWN0b3J5KGFueSk7CiAgZnVuY3Rpb24gYW55KC4uLnBhcmFtZXRlcnMpIHsKICAgIGxldCBpbmRleDMgPSAtMTsKICAgIHdoaWxlICgrK2luZGV4MyA8IGNoZWNrczIubGVuZ3RoKSB7CiAgICAgIGlmIChjaGVja3MyW2luZGV4M10uYXBwbHkodGhpcywgcGFyYW1ldGVycykpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQpmdW5jdGlvbiBwcm9wZXJ0aWVzRmFjdG9yeShjaGVjaykgewogIGNvbnN0IGNoZWNrQXNSZWNvcmQgPSAoCiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLwogICAgY2hlY2sKICApOwogIHJldHVybiBjYXN0RmFjdG9yeShhbGwzKTsKICBmdW5jdGlvbiBhbGwzKG5vZGUyKSB7CiAgICBjb25zdCBub2RlQXNSZWNvcmQgPSAoCiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovCiAgICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi8KICAgICAgbm9kZTIKICAgICk7CiAgICBsZXQga2V5MjsKICAgIGZvciAoa2V5MiBpbiBjaGVjaykgewogICAgICBpZiAobm9kZUFzUmVjb3JkW2tleTJdICE9PSBjaGVja0FzUmVjb3JkW2tleTJdKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KZnVuY3Rpb24gdHlwZUZhY3RvcnkoY2hlY2spIHsKICByZXR1cm4gY2FzdEZhY3RvcnkodHlwZTUpOwogIGZ1bmN0aW9uIHR5cGU1KG5vZGUyKSB7CiAgICByZXR1cm4gbm9kZTIgJiYgbm9kZTIudHlwZSA9PT0gY2hlY2s7CiAgfQp9CmZ1bmN0aW9uIGNhc3RGYWN0b3J5KHRlc3RGdW5jdGlvbikgewogIHJldHVybiBjaGVjazsKICBmdW5jdGlvbiBjaGVjayh2YWx1ZTIsIGluZGV4MiwgcGFyZW50KSB7CiAgICByZXR1cm4gQm9vbGVhbigKICAgICAgbG9va3NMaWtlQU5vZGUodmFsdWUyKSAmJiB0ZXN0RnVuY3Rpb24uY2FsbCgKICAgICAgICB0aGlzLAogICAgICAgIHZhbHVlMiwKICAgICAgICB0eXBlb2YgaW5kZXgyID09PSAibnVtYmVyIiA/IGluZGV4MiA6IHZvaWQgMCwKICAgICAgICBwYXJlbnQgfHwgdm9pZCAwCiAgICAgICkKICAgICk7CiAgfQp9CmZ1bmN0aW9uIG9rMigpIHsKICByZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiBsb29rc0xpa2VBTm9kZSh2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZTIgPT09ICJvYmplY3QiICYmICJ0eXBlIiBpbiB2YWx1ZTI7Cn0KdmFyIGlzLCBjb252ZXJ0Owp2YXIgaW5pdF9saWI2ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1pc0A2LjAuMS9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1pcy9saWIvaW5kZXguanMiKCkgewogICAgaXMgPSAvLyBOb3RlOiBvdmVybG9hZHMgaW4gSlNEb2MgY2Fu4oCZdCB5ZXQgdXNlIGRpZmZlcmVudCBgQHRlbXBsYXRlYHMuCiAgICAvKioKICAgICAqIEB0eXBlIHsoCiAgICAgKiAgICg8Q29uZGl0aW9uIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxzdHJpbmc+Pihub2RlOiB1bmtub3duLCB0ZXN0OiBDb25kaXRpb24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSAmIHt0eXBlOiBDb25kaXRpb25bbnVtYmVyXX0pICYKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBBcnJheTxzdHJpbmc+Pihub2RlOiB1bmtub3duLCB0ZXN0OiBDb25kaXRpb24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSAmIHt0eXBlOiBDb25kaXRpb25bbnVtYmVyXX0pICYKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBzdHJpbmc+KG5vZGU6IHVua25vd24sIHRlc3Q6IENvbmRpdGlvbiwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYge3R5cGU6IENvbmRpdGlvbn0pICYKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBQcm9wcz4obm9kZTogdW5rbm93biwgdGVzdDogQ29uZGl0aW9uLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiBDb25kaXRpb24pICYKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBUZXN0RnVuY3Rpb24+KG5vZGU6IHVua25vd24sIHRlc3Q6IENvbmRpdGlvbiwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYgUHJlZGljYXRlPENvbmRpdGlvbiwgTm9kZT4pICYKICAgICAqICAgKChub2RlPzogbnVsbCB8IHVuZGVmaW5lZCkgPT4gZmFsc2UpICYKICAgICAqICAgKChub2RlOiB1bmtub3duLCB0ZXN0PzogbnVsbCB8IHVuZGVmaW5lZCwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlKSAmCiAgICAgKiAgICgobm9kZTogdW5rbm93biwgdGVzdD86IFRlc3QsIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IGJvb2xlYW4pCiAgICAgKiApfQogICAgICovCiAgICAvKioKICAgICAqIEBwYXJhbSB7dW5rbm93bn0gW25vZGVdCiAgICAgKiBAcGFyYW0ge1Rlc3R9IFt0ZXN0XQogICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbaW5kZXhdCiAgICAgKiBAcGFyYW0ge1BhcmVudCB8IG51bGwgfCB1bmRlZmluZWR9IFtwYXJlbnRdCiAgICAgKiBAcGFyYW0ge3Vua25vd259IFtjb250ZXh0XQogICAgICogQHJldHVybnMge2Jvb2xlYW59CiAgICAgKi8KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtcGFyYW1zCiAgICAoZnVuY3Rpb24obm9kZTIsIHRlc3QsIGluZGV4MiwgcGFyZW50LCBjb250ZXh0MikgewogICAgICBjb25zdCBjaGVjayA9IGNvbnZlcnQodGVzdCk7CiAgICAgIGlmIChpbmRleDIgIT09IHZvaWQgMCAmJiBpbmRleDIgIT09IG51bGwgJiYgKHR5cGVvZiBpbmRleDIgIT09ICJudW1iZXIiIHx8IGluZGV4MiA8IDAgfHwgaW5kZXgyID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBwb3NpdGl2ZSBmaW5pdGUgaW5kZXgiKTsKICAgICAgfQogICAgICBpZiAocGFyZW50ICE9PSB2b2lkIDAgJiYgcGFyZW50ICE9PSBudWxsICYmICghaXMocGFyZW50KSB8fCAhcGFyZW50LmNoaWxkcmVuKSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcGFyZW50IG5vZGUiKTsKICAgICAgfQogICAgICBpZiAoKHBhcmVudCA9PT0gdm9pZCAwIHx8IHBhcmVudCA9PT0gbnVsbCkgIT09IChpbmRleDIgPT09IHZvaWQgMCB8fCBpbmRleDIgPT09IG51bGwpKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBib3RoIHBhcmVudCBhbmQgaW5kZXgiKTsKICAgICAgfQogICAgICByZXR1cm4gbG9va3NMaWtlQU5vZGUobm9kZTIpID8gY2hlY2suY2FsbChjb250ZXh0Miwgbm9kZTIsIGluZGV4MiwgcGFyZW50KSA6IGZhbHNlOwogICAgfSk7CiAgICBjb252ZXJ0ID0gLy8gTm90ZTogb3ZlcmxvYWRzIGluIEpTRG9jIGNhbuKAmXQgeWV0IHVzZSBkaWZmZXJlbnQgYEB0ZW1wbGF0ZWBzLgogICAgLyoqCiAgICAgKiBAdHlwZSB7KAogICAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIHN0cmluZz4odGVzdDogQ29uZGl0aW9uKSA9PiAobm9kZTogdW5rbm93biwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYge3R5cGU6IENvbmRpdGlvbn0pICYKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBQcm9wcz4odGVzdDogQ29uZGl0aW9uKSA9PiAobm9kZTogdW5rbm93biwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYgQ29uZGl0aW9uKSAmCiAgICAgKiAgICg8Q29uZGl0aW9uIGV4dGVuZHMgVGVzdEZ1bmN0aW9uPih0ZXN0OiBDb25kaXRpb24pID0+IChub2RlOiB1bmtub3duLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiBQcmVkaWNhdGU8Q29uZGl0aW9uLCBOb2RlPikgJgogICAgICogICAoKHRlc3Q/OiBudWxsIHwgdW5kZWZpbmVkKSA9PiAobm9kZT86IHVua25vd24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSkgJgogICAgICogICAoKHRlc3Q/OiBUZXN0KSA9PiBDaGVjaykKICAgICAqICl9CiAgICAgKi8KICAgIC8qKgogICAgICogQHBhcmFtIHtUZXN0fSBbdGVzdF0KICAgICAqIEByZXR1cm5zIHtDaGVja30KICAgICAqLwogICAgKGZ1bmN0aW9uKHRlc3QpIHsKICAgICAgaWYgKHRlc3QgPT09IG51bGwgfHwgdGVzdCA9PT0gdm9pZCAwKSB7CiAgICAgICAgcmV0dXJuIG9rMjsKICAgICAgfQogICAgICBpZiAodHlwZW9mIHRlc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICByZXR1cm4gY2FzdEZhY3RvcnkodGVzdCk7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAib2JqZWN0IikgewogICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRlc3QpID8gYW55RmFjdG9yeSh0ZXN0KSA6ICgKICAgICAgICAgIC8vIENhc3QgYmVjYXVzZSBgUmVhZG9ubHlBcnJheWAgZ29lcyBpbnRvIHRoZSBhYm92ZSBidXQgYGlzQXJyYXlgCiAgICAgICAgICAvLyBuYXJyb3dzIHRvIGBBcnJheWAuCiAgICAgICAgICBwcm9wZXJ0aWVzRmFjdG9yeSgKICAgICAgICAgICAgLyoqIEB0eXBlIHtQcm9wc30gKi8KICAgICAgICAgICAgdGVzdAogICAgICAgICAgKQogICAgICAgICk7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAic3RyaW5nIikgewogICAgICAgIHJldHVybiB0eXBlRmFjdG9yeSh0ZXN0KTsKICAgICAgfQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGZ1bmN0aW9uLCBzdHJpbmcsIG9yIG9iamVjdCBhcyB0ZXN0Iik7CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtaXNANi4wLjEvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtaXMvaW5kZXguanMKdmFyIGluaXRfdW5pc3RfdXRpbF9pcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtaXNANi4wLjEvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtaXMvaW5kZXguanMiKCkgewogICAgaW5pdF9saWI2KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXZpc2l0LXBhcmVudHNANi4wLjIvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cy9saWIvY29sb3IuanMKZnVuY3Rpb24gY29sb3IoZDYpIHsKICByZXR1cm4gZDY7Cn0KdmFyIGluaXRfY29sb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXZpc2l0LXBhcmVudHNANi4wLjIvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cy9saWIvY29sb3IuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzQDYuMC4yL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0LXBhcmVudHMvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHZpc2l0UGFyZW50cyh0cmVlLCB0ZXN0LCB2aXNpdG9yLCByZXZlcnNlKSB7CiAgbGV0IGNoZWNrOwogIGlmICh0eXBlb2YgdGVzdCA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgdmlzaXRvciAhPT0gImZ1bmN0aW9uIikgewogICAgcmV2ZXJzZSA9IHZpc2l0b3I7CiAgICB2aXNpdG9yID0gdGVzdDsKICB9IGVsc2UgewogICAgY2hlY2sgPSB0ZXN0OwogIH0KICBjb25zdCBpczMgPSBjb252ZXJ0KGNoZWNrKTsKICBjb25zdCBzdGVwID0gcmV2ZXJzZSA/IC0xIDogMTsKICBmYWN0b3J5KHRyZWUsIHZvaWQgMCwgW10pKCk7CiAgZnVuY3Rpb24gZmFjdG9yeShub2RlMiwgaW5kZXgyLCBwYXJlbnRzKSB7CiAgICBjb25zdCB2YWx1ZTIgPSAoCiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovCiAgICAgIG5vZGUyICYmIHR5cGVvZiBub2RlMiA9PT0gIm9iamVjdCIgPyBub2RlMiA6IHt9CiAgICApOwogICAgaWYgKHR5cGVvZiB2YWx1ZTIudHlwZSA9PT0gInN0cmluZyIpIHsKICAgICAgY29uc3QgbmFtZSA9ICgKICAgICAgICAvLyBgaGFzdGAKICAgICAgICB0eXBlb2YgdmFsdWUyLnRhZ05hbWUgPT09ICJzdHJpbmciID8gdmFsdWUyLnRhZ05hbWUgOiAoCiAgICAgICAgICAvLyBgeGFzdGAKICAgICAgICAgIHR5cGVvZiB2YWx1ZTIubmFtZSA9PT0gInN0cmluZyIgPyB2YWx1ZTIubmFtZSA6IHZvaWQgMAogICAgICAgICkKICAgICAgKTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpc2l0MiwgIm5hbWUiLCB7CiAgICAgICAgdmFsdWU6ICJub2RlICgiICsgY29sb3Iobm9kZTIudHlwZSArIChuYW1lID8gIjwiICsgbmFtZSArICI+IiA6ICIiKSkgKyAiKSIKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gdmlzaXQyOwogICAgZnVuY3Rpb24gdmlzaXQyKCkgewogICAgICBsZXQgcmVzdWx0ID0gZW1wdHkyOwogICAgICBsZXQgc3VicmVzdWx0OwogICAgICBsZXQgb2Zmc2V0OwogICAgICBsZXQgZ3JhbmRwYXJlbnRzOwogICAgICBpZiAoIXRlc3QgfHwgaXMzKG5vZGUyLCBpbmRleDIsIHBhcmVudHNbcGFyZW50cy5sZW5ndGggLSAxXSB8fCB2b2lkIDApKSB7CiAgICAgICAgcmVzdWx0ID0gdG9SZXN1bHQodmlzaXRvcihub2RlMiwgcGFyZW50cykpOwogICAgICAgIGlmIChyZXN1bHRbMF0gPT09IEVYSVQpIHsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICgiY2hpbGRyZW4iIGluIG5vZGUyICYmIG5vZGUyLmNoaWxkcmVuKSB7CiAgICAgICAgY29uc3Qgbm9kZUFzUGFyZW50ID0gKAogICAgICAgICAgLyoqIEB0eXBlIHtVbmlzdFBhcmVudH0gKi8KICAgICAgICAgIG5vZGUyCiAgICAgICAgKTsKICAgICAgICBpZiAobm9kZUFzUGFyZW50LmNoaWxkcmVuICYmIHJlc3VsdFswXSAhPT0gU0tJUCkgewogICAgICAgICAgb2Zmc2V0ID0gKHJldmVyc2UgPyBub2RlQXNQYXJlbnQuY2hpbGRyZW4ubGVuZ3RoIDogLTEpICsgc3RlcDsKICAgICAgICAgIGdyYW5kcGFyZW50cyA9IHBhcmVudHMuY29uY2F0KG5vZGVBc1BhcmVudCk7CiAgICAgICAgICB3aGlsZSAob2Zmc2V0ID4gLTEgJiYgb2Zmc2V0IDwgbm9kZUFzUGFyZW50LmNoaWxkcmVuLmxlbmd0aCkgewogICAgICAgICAgICBjb25zdCBjaGlsZCA9IG5vZGVBc1BhcmVudC5jaGlsZHJlbltvZmZzZXRdOwogICAgICAgICAgICBzdWJyZXN1bHQgPSBmYWN0b3J5KGNoaWxkLCBvZmZzZXQsIGdyYW5kcGFyZW50cykoKTsKICAgICAgICAgICAgaWYgKHN1YnJlc3VsdFswXSA9PT0gRVhJVCkgewogICAgICAgICAgICAgIHJldHVybiBzdWJyZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgb2Zmc2V0ID0gdHlwZW9mIHN1YnJlc3VsdFsxXSA9PT0gIm51bWJlciIgPyBzdWJyZXN1bHRbMV0gOiBvZmZzZXQgKyBzdGVwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogIH0KfQpmdW5jdGlvbiB0b1Jlc3VsdCh2YWx1ZTIpIHsKICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7CiAgICByZXR1cm4gdmFsdWUyOwogIH0KICBpZiAodHlwZW9mIHZhbHVlMiA9PT0gIm51bWJlciIpIHsKICAgIHJldHVybiBbQ09OVElOVUUsIHZhbHVlMl07CiAgfQogIHJldHVybiB2YWx1ZTIgPT09IG51bGwgfHwgdmFsdWUyID09PSB2b2lkIDAgPyBlbXB0eTIgOiBbdmFsdWUyXTsKfQp2YXIgZW1wdHkyLCBDT05USU5VRSwgRVhJVCwgU0tJUDsKdmFyIGluaXRfbGliNyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50c0A2LjAuMi9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X3VuaXN0X3V0aWxfaXMoKTsKICAgIGluaXRfY29sb3IoKTsKICAgIGVtcHR5MiA9IFtdOwogICAgQ09OVElOVUUgPSB0cnVlOwogICAgRVhJVCA9IGZhbHNlOwogICAgU0tJUCA9ICJza2lwIjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50c0A2LjAuMi9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzL2luZGV4LmpzCnZhciBpbml0X3VuaXN0X3V0aWxfdmlzaXRfcGFyZW50cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50c0A2LjAuMi9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliNygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlQDMuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZpbmQtYW5kLXJlcGxhY2UvbGliL2luZGV4LmpzCmZ1bmN0aW9uIGZpbmRBbmRSZXBsYWNlKHRyZWUsIGxpc3Q1LCBvcHRpb25zKSB7CiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9OwogIGNvbnN0IGlnbm9yZWQgPSBjb252ZXJ0KHNldHRpbmdzLmlnbm9yZSB8fCBbXSk7CiAgY29uc3QgcGFpcnMyID0gdG9QYWlycyhsaXN0NSk7CiAgbGV0IHBhaXJJbmRleCA9IC0xOwogIHdoaWxlICgrK3BhaXJJbmRleCA8IHBhaXJzMi5sZW5ndGgpIHsKICAgIHZpc2l0UGFyZW50cyh0cmVlLCAidGV4dCIsIHZpc2l0b3IpOwogIH0KICBmdW5jdGlvbiB2aXNpdG9yKG5vZGUyLCBwYXJlbnRzKSB7CiAgICBsZXQgaW5kZXgyID0gLTE7CiAgICBsZXQgZ3JhbmRwYXJlbnQ7CiAgICB3aGlsZSAoKytpbmRleDIgPCBwYXJlbnRzLmxlbmd0aCkgewogICAgICBjb25zdCBwYXJlbnQgPSBwYXJlbnRzW2luZGV4Ml07CiAgICAgIGNvbnN0IHNpYmxpbmdzMiA9IGdyYW5kcGFyZW50ID8gZ3JhbmRwYXJlbnQuY2hpbGRyZW4gOiB2b2lkIDA7CiAgICAgIGlmIChpZ25vcmVkKAogICAgICAgIHBhcmVudCwKICAgICAgICBzaWJsaW5nczIgPyBzaWJsaW5nczIuaW5kZXhPZihwYXJlbnQpIDogdm9pZCAwLAogICAgICAgIGdyYW5kcGFyZW50CiAgICAgICkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZ3JhbmRwYXJlbnQgPSBwYXJlbnQ7CiAgICB9CiAgICBpZiAoZ3JhbmRwYXJlbnQpIHsKICAgICAgcmV0dXJuIGhhbmRsZXIyKG5vZGUyLCBwYXJlbnRzKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gaGFuZGxlcjIobm9kZTIsIHBhcmVudHMpIHsKICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudHNbcGFyZW50cy5sZW5ndGggLSAxXTsKICAgIGNvbnN0IGZpbmQzID0gcGFpcnMyW3BhaXJJbmRleF1bMF07CiAgICBjb25zdCByZXBsYWNlNSA9IHBhaXJzMltwYWlySW5kZXhdWzFdOwogICAgbGV0IHN0YXJ0ID0gMDsKICAgIGNvbnN0IHNpYmxpbmdzMiA9IHBhcmVudC5jaGlsZHJlbjsKICAgIGNvbnN0IGluZGV4MiA9IHNpYmxpbmdzMi5pbmRleE9mKG5vZGUyKTsKICAgIGxldCBjaGFuZ2UgPSBmYWxzZTsKICAgIGxldCBub2RlcyA9IFtdOwogICAgZmluZDMubGFzdEluZGV4ID0gMDsKICAgIGxldCBtYXRjaDIgPSBmaW5kMy5leGVjKG5vZGUyLnZhbHVlKTsKICAgIHdoaWxlIChtYXRjaDIpIHsKICAgICAgY29uc3QgcG9zaXRpb24zID0gbWF0Y2gyLmluZGV4OwogICAgICBjb25zdCBtYXRjaE9iamVjdCA9IHsKICAgICAgICBpbmRleDogbWF0Y2gyLmluZGV4LAogICAgICAgIGlucHV0OiBtYXRjaDIuaW5wdXQsCiAgICAgICAgc3RhY2s6IFsuLi5wYXJlbnRzLCBub2RlMl0KICAgICAgfTsKICAgICAgbGV0IHZhbHVlMiA9IHJlcGxhY2U1KC4uLm1hdGNoMiwgbWF0Y2hPYmplY3QpOwogICAgICBpZiAodHlwZW9mIHZhbHVlMiA9PT0gInN0cmluZyIpIHsKICAgICAgICB2YWx1ZTIgPSB2YWx1ZTIubGVuZ3RoID4gMCA/IHsgdHlwZTogInRleHQiLCB2YWx1ZTogdmFsdWUyIH0gOiB2b2lkIDA7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlMiA9PT0gZmFsc2UpIHsKICAgICAgICBmaW5kMy5sYXN0SW5kZXggPSBwb3NpdGlvbjMgKyAxOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChzdGFydCAhPT0gcG9zaXRpb24zKSB7CiAgICAgICAgICBub2Rlcy5wdXNoKHsKICAgICAgICAgICAgdHlwZTogInRleHQiLAogICAgICAgICAgICB2YWx1ZTogbm9kZTIudmFsdWUuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uMykKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7CiAgICAgICAgICBub2Rlcy5wdXNoKC4uLnZhbHVlMik7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZTIpIHsKICAgICAgICAgIG5vZGVzLnB1c2godmFsdWUyKTsKICAgICAgICB9CiAgICAgICAgc3RhcnQgPSBwb3NpdGlvbjMgKyBtYXRjaDJbMF0ubGVuZ3RoOwogICAgICAgIGNoYW5nZSA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKCFmaW5kMy5nbG9iYWwpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBtYXRjaDIgPSBmaW5kMy5leGVjKG5vZGUyLnZhbHVlKTsKICAgIH0KICAgIGlmIChjaGFuZ2UpIHsKICAgICAgaWYgKHN0YXJ0IDwgbm9kZTIudmFsdWUubGVuZ3RoKSB7CiAgICAgICAgbm9kZXMucHVzaCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IG5vZGUyLnZhbHVlLnNsaWNlKHN0YXJ0KSB9KTsKICAgICAgfQogICAgICBwYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4MiwgMSwgLi4ubm9kZXMpOwogICAgfSBlbHNlIHsKICAgICAgbm9kZXMgPSBbbm9kZTJdOwogICAgfQogICAgcmV0dXJuIGluZGV4MiArIG5vZGVzLmxlbmd0aDsKICB9Cn0KZnVuY3Rpb24gdG9QYWlycyh0dXBsZU9yTGlzdCkgewogIGNvbnN0IHJlc3VsdCA9IFtdOwogIGlmICghQXJyYXkuaXNBcnJheSh0dXBsZU9yTGlzdCkpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGZpbmQgYW5kIHJlcGxhY2UgdHVwbGUgb3IgbGlzdCBvZiB0dXBsZXMiKTsKICB9CiAgY29uc3QgbGlzdDUgPSAhdHVwbGVPckxpc3RbMF0gfHwgQXJyYXkuaXNBcnJheSh0dXBsZU9yTGlzdFswXSkgPyB0dXBsZU9yTGlzdCA6IFt0dXBsZU9yTGlzdF07CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGxpc3Q1Lmxlbmd0aCkgewogICAgY29uc3QgdHVwbGUgPSBsaXN0NVtpbmRleDJdOwogICAgcmVzdWx0LnB1c2goW3RvRXhwcmVzc2lvbih0dXBsZVswXSksIHRvRnVuY3Rpb24odHVwbGVbMV0pXSk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gdG9FeHByZXNzaW9uKGZpbmQzKSB7CiAgcmV0dXJuIHR5cGVvZiBmaW5kMyA9PT0gInN0cmluZyIgPyBuZXcgUmVnRXhwKGVzY2FwZVN0cmluZ1JlZ2V4cChmaW5kMyksICJnIikgOiBmaW5kMzsKfQpmdW5jdGlvbiB0b0Z1bmN0aW9uKHJlcGxhY2U1KSB7CiAgcmV0dXJuIHR5cGVvZiByZXBsYWNlNSA9PT0gImZ1bmN0aW9uIiA/IHJlcGxhY2U1IDogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gcmVwbGFjZTU7CiAgfTsKfQp2YXIgaW5pdF9saWI4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlQDMuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZpbmQtYW5kLXJlcGxhY2UvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfZXNjYXBlX3N0cmluZ19yZWdleHAoKTsKICAgIGluaXRfdW5pc3RfdXRpbF92aXNpdF9wYXJlbnRzKCk7CiAgICBpbml0X3VuaXN0X3V0aWxfaXMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZmluZC1hbmQtcmVwbGFjZUAzLjAuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfZmluZF9hbmRfcmVwbGFjZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZmluZC1hbmQtcmVwbGFjZUAzLjAuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliOCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbC9saWIvaW5kZXguanMKZnVuY3Rpb24gZ2ZtQXV0b2xpbmtMaXRlcmFsRnJvbU1hcmtkb3duKCkgewogIHJldHVybiB7CiAgICB0cmFuc2Zvcm1zOiBbdHJhbnNmb3JtR2ZtQXV0b2xpbmtMaXRlcmFsc10sCiAgICBlbnRlcjogewogICAgICBsaXRlcmFsQXV0b2xpbms6IGVudGVyTGl0ZXJhbEF1dG9saW5rLAogICAgICBsaXRlcmFsQXV0b2xpbmtFbWFpbDogZW50ZXJMaXRlcmFsQXV0b2xpbmtWYWx1ZSwKICAgICAgbGl0ZXJhbEF1dG9saW5rSHR0cDogZW50ZXJMaXRlcmFsQXV0b2xpbmtWYWx1ZSwKICAgICAgbGl0ZXJhbEF1dG9saW5rV3d3OiBlbnRlckxpdGVyYWxBdXRvbGlua1ZhbHVlCiAgICB9LAogICAgZXhpdDogewogICAgICBsaXRlcmFsQXV0b2xpbms6IGV4aXRMaXRlcmFsQXV0b2xpbmssCiAgICAgIGxpdGVyYWxBdXRvbGlua0VtYWlsOiBleGl0TGl0ZXJhbEF1dG9saW5rRW1haWwsCiAgICAgIGxpdGVyYWxBdXRvbGlua0h0dHA6IGV4aXRMaXRlcmFsQXV0b2xpbmtIdHRwLAogICAgICBsaXRlcmFsQXV0b2xpbmtXd3c6IGV4aXRMaXRlcmFsQXV0b2xpbmtXd3cKICAgIH0KICB9Owp9CmZ1bmN0aW9uIGdmbUF1dG9saW5rTGl0ZXJhbFRvTWFya2Rvd24oKSB7CiAgcmV0dXJuIHsKICAgIHVuc2FmZTogWwogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiQCIsCiAgICAgICAgYmVmb3JlOiAiWytcXC0uXFx3XSIsCiAgICAgICAgYWZ0ZXI6ICJbXFwtLlxcd10iLAogICAgICAgIGluQ29uc3RydWN0LAogICAgICAgIG5vdEluQ29uc3RydWN0CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBjaGFyYWN0ZXI6ICIuIiwKICAgICAgICBiZWZvcmU6ICJbV3ddIiwKICAgICAgICBhZnRlcjogIltcXC0uXFx3XSIsCiAgICAgICAgaW5Db25zdHJ1Y3QsCiAgICAgICAgbm90SW5Db25zdHJ1Y3QKICAgICAgfSwKICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIjoiLAogICAgICAgIGJlZm9yZTogIltwc10iLAogICAgICAgIGFmdGVyOiAiXFwvIiwKICAgICAgICBpbkNvbnN0cnVjdCwKICAgICAgICBub3RJbkNvbnN0cnVjdAogICAgICB9CiAgICBdCiAgfTsKfQpmdW5jdGlvbiBlbnRlckxpdGVyYWxBdXRvbGluayh0b2tlbikgewogIHRoaXMuZW50ZXIoeyB0eXBlOiAibGluayIsIHRpdGxlOiBudWxsLCB1cmw6ICIiLCBjaGlsZHJlbjogW10gfSwgdG9rZW4pOwp9CmZ1bmN0aW9uIGVudGVyTGl0ZXJhbEF1dG9saW5rVmFsdWUodG9rZW4pIHsKICB0aGlzLmNvbmZpZy5lbnRlci5hdXRvbGlua1Byb3RvY29sLmNhbGwodGhpcywgdG9rZW4pOwp9CmZ1bmN0aW9uIGV4aXRMaXRlcmFsQXV0b2xpbmtIdHRwKHRva2VuKSB7CiAgdGhpcy5jb25maWcuZXhpdC5hdXRvbGlua1Byb3RvY29sLmNhbGwodGhpcywgdG9rZW4pOwp9CmZ1bmN0aW9uIGV4aXRMaXRlcmFsQXV0b2xpbmtXd3codG9rZW4pIHsKICB0aGlzLmNvbmZpZy5leGl0LmRhdGEuY2FsbCh0aGlzLCB0b2tlbik7CiAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgb2sobm9kZTIudHlwZSA9PT0gImxpbmsiKTsKICBub2RlMi51cmwgPSAiaHR0cDovLyIgKyB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKfQpmdW5jdGlvbiBleGl0TGl0ZXJhbEF1dG9saW5rRW1haWwodG9rZW4pIHsKICB0aGlzLmNvbmZpZy5leGl0LmF1dG9saW5rRW1haWwuY2FsbCh0aGlzLCB0b2tlbik7Cn0KZnVuY3Rpb24gZXhpdExpdGVyYWxBdXRvbGluayh0b2tlbikgewogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gdHJhbnNmb3JtR2ZtQXV0b2xpbmtMaXRlcmFscyh0cmVlKSB7CiAgZmluZEFuZFJlcGxhY2UoCiAgICB0cmVlLAogICAgWwogICAgICBbLyhodHRwcz86XC9cL3x3d3coPz1cLikpKFstLlx3XSspKFteIFx0XHJcbl0qKS9naSwgZmluZFVybF0sCiAgICAgIFsvKD88PV58XHN8XHB7UH18XHB7U30pKFstLlx3K10rKUAoWy1cd10rKD86XC5bLVx3XSspKykvZ3UsIGZpbmRFbWFpbF0KICAgIF0sCiAgICB7IGlnbm9yZTogWyJsaW5rIiwgImxpbmtSZWZlcmVuY2UiXSB9CiAgKTsKfQpmdW5jdGlvbiBmaW5kVXJsKF80LCBwcm90b2NvbCwgZG9tYWluMiwgcGF0aDIsIG1hdGNoMikgewogIGxldCBwcmVmaXg0ID0gIiI7CiAgaWYgKCFwcmV2aW91cyhtYXRjaDIpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGlmICgvXncvaS50ZXN0KHByb3RvY29sKSkgewogICAgZG9tYWluMiA9IHByb3RvY29sICsgZG9tYWluMjsKICAgIHByb3RvY29sID0gIiI7CiAgICBwcmVmaXg0ID0gImh0dHA6Ly8iOwogIH0KICBpZiAoIWlzQ29ycmVjdERvbWFpbihkb21haW4yKSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBjb25zdCBwYXJ0cyA9IHNwbGl0VXJsKGRvbWFpbjIgKyBwYXRoMik7CiAgaWYgKCFwYXJ0c1swXSkgcmV0dXJuIGZhbHNlOwogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJsaW5rIiwKICAgIHRpdGxlOiBudWxsLAogICAgdXJsOiBwcmVmaXg0ICsgcHJvdG9jb2wgKyBwYXJ0c1swXSwKICAgIGNoaWxkcmVuOiBbeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBwcm90b2NvbCArIHBhcnRzWzBdIH1dCiAgfTsKICBpZiAocGFydHNbMV0pIHsKICAgIHJldHVybiBbcmVzdWx0LCB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IHBhcnRzWzFdIH1dOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIGZpbmRFbWFpbChfNCwgYXRleHQsIGxhYmVsLCBtYXRjaDIpIHsKICBpZiAoCiAgICAvLyBOb3QgYW4gZXhwZWN0ZWQgcHJldmlvdXMgY2hhcmFjdGVyLgogICAgIXByZXZpb3VzKG1hdGNoMiwgdHJ1ZSkgfHwgLy8gTGFiZWwgZW5kcyBpbiBub3QgYWxsb3dlZCBjaGFyYWN0ZXIuCiAgICAvWy1cZF9dJC8udGVzdChsYWJlbCkKICApIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHsKICAgIHR5cGU6ICJsaW5rIiwKICAgIHRpdGxlOiBudWxsLAogICAgdXJsOiAibWFpbHRvOiIgKyBhdGV4dCArICJAIiArIGxhYmVsLAogICAgY2hpbGRyZW46IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IGF0ZXh0ICsgIkAiICsgbGFiZWwgfV0KICB9Owp9CmZ1bmN0aW9uIGlzQ29ycmVjdERvbWFpbihkb21haW4yKSB7CiAgY29uc3QgcGFydHMgPSBkb21haW4yLnNwbGl0KCIuIik7CiAgaWYgKHBhcnRzLmxlbmd0aCA8IDIgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gJiYgKC9fLy50ZXN0KHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdKSB8fCAhL1thLXpBLVpcZF0vLnRlc3QocGFydHNbcGFydHMubGVuZ3RoIC0gMV0pKSB8fCBwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXSAmJiAoL18vLnRlc3QocGFydHNbcGFydHMubGVuZ3RoIC0gMl0pIHx8ICEvW2EtekEtWlxkXS8udGVzdChwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXSkpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIHNwbGl0VXJsKHVybCkgewogIGNvbnN0IHRyYWlsRXhlYyA9IC9bISImJyksLjo7PD4/XF19XSskLy5leGVjKHVybCk7CiAgaWYgKCF0cmFpbEV4ZWMpIHsKICAgIHJldHVybiBbdXJsLCB2b2lkIDBdOwogIH0KICB1cmwgPSB1cmwuc2xpY2UoMCwgdHJhaWxFeGVjLmluZGV4KTsKICBsZXQgdHJhaWwyID0gdHJhaWxFeGVjWzBdOwogIGxldCBjbG9zaW5nUGFyZW5JbmRleCA9IHRyYWlsMi5pbmRleE9mKCIpIik7CiAgY29uc3Qgb3BlbmluZ1BhcmVucyA9IGNjb3VudCh1cmwsICIoIik7CiAgbGV0IGNsb3NpbmdQYXJlbnMgPSBjY291bnQodXJsLCAiKSIpOwogIHdoaWxlIChjbG9zaW5nUGFyZW5JbmRleCAhPT0gLTEgJiYgb3BlbmluZ1BhcmVucyA+IGNsb3NpbmdQYXJlbnMpIHsKICAgIHVybCArPSB0cmFpbDIuc2xpY2UoMCwgY2xvc2luZ1BhcmVuSW5kZXggKyAxKTsKICAgIHRyYWlsMiA9IHRyYWlsMi5zbGljZShjbG9zaW5nUGFyZW5JbmRleCArIDEpOwogICAgY2xvc2luZ1BhcmVuSW5kZXggPSB0cmFpbDIuaW5kZXhPZigiKSIpOwogICAgY2xvc2luZ1BhcmVucysrOwogIH0KICByZXR1cm4gW3VybCwgdHJhaWwyXTsKfQpmdW5jdGlvbiBwcmV2aW91cyhtYXRjaDIsIGVtYWlsKSB7CiAgY29uc3QgY29kZTQgPSBtYXRjaDIuaW5wdXQuY2hhckNvZGVBdChtYXRjaDIuaW5kZXggLSAxKTsKICByZXR1cm4gKG1hdGNoMi5pbmRleCA9PT0gMCB8fCB1bmljb2RlV2hpdGVzcGFjZShjb2RlNCkgfHwgdW5pY29kZVB1bmN0dWF0aW9uKGNvZGU0KSkgJiYgLy8gSWYgaXTigJlzIGFuIGVtYWlsLCB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIHNob3VsZCBub3QgYmUgYSBzbGFzaC4KICAoIWVtYWlsIHx8IGNvZGU0ICE9PSA0Nyk7Cn0KdmFyIGluQ29uc3RydWN0LCBub3RJbkNvbnN0cnVjdDsKdmFyIGluaXRfbGliOSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4wLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWwvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfY2NvdW50KCk7CiAgICBpbml0X2RlZmF1bHQoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21kYXN0X3V0aWxfZmluZF9hbmRfcmVwbGFjZSgpOwogICAgaW5Db25zdHJ1Y3QgPSAicGhyYXNpbmciOwogICAgbm90SW5Db25zdHJ1Y3QgPSBbImF1dG9saW5rIiwgImxpbmsiLCAiaW1hZ2UiLCAibGFiZWwiXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4wLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWwvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9nZm1fYXV0b2xpbmtfbGl0ZXJhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4wLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWwvaW5kZXguanMiKCkgewogICAgaW5pdF9saWI5KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1ub3JtYWxpemUtaWRlbnRpZmllckAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtbm9ybWFsaXplLWlkZW50aWZpZXIvaW5kZXguanMKZnVuY3Rpb24gbm9ybWFsaXplSWRlbnRpZmllcih2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyLnJlcGxhY2UoL1tcdFxuXHIgXSsvZywgIiAiKS5yZXBsYWNlKC9eIHwgJC9nLCAiIikudG9Mb3dlckNhc2UoKS50b1VwcGVyQ2FzZSgpOwp9CnZhciBpbml0X21pY3JvbWFya191dGlsX25vcm1hbGl6ZV9pZGVudGlmaWVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtbm9ybWFsaXplLWlkZW50aWZpZXJAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLW5vcm1hbGl6ZS1pZGVudGlmaWVyL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLWZvb3Rub3RlQDIuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS1mb290bm90ZS9saWIvaW5kZXguanMKZnVuY3Rpb24gZW50ZXJGb290bm90ZUNhbGxTdHJpbmcoKSB7CiAgdGhpcy5idWZmZXIoKTsKfQpmdW5jdGlvbiBlbnRlckZvb3Rub3RlQ2FsbCh0b2tlbikgewogIHRoaXMuZW50ZXIoeyB0eXBlOiAiZm9vdG5vdGVSZWZlcmVuY2UiLCBpZGVudGlmaWVyOiAiIiwgbGFiZWw6ICIiIH0sIHRva2VuKTsKfQpmdW5jdGlvbiBlbnRlckZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nKCkgewogIHRoaXMuYnVmZmVyKCk7Cn0KZnVuY3Rpb24gZW50ZXJGb290bm90ZURlZmluaXRpb24odG9rZW4pIHsKICB0aGlzLmVudGVyKAogICAgeyB0eXBlOiAiZm9vdG5vdGVEZWZpbml0aW9uIiwgaWRlbnRpZmllcjogIiIsIGxhYmVsOiAiIiwgY2hpbGRyZW46IFtdIH0sCiAgICB0b2tlbgogICk7Cn0KZnVuY3Rpb24gZXhpdEZvb3Rub3RlQ2FsbFN0cmluZyh0b2tlbikgewogIGNvbnN0IGxhYmVsID0gdGhpcy5yZXN1bWUoKTsKICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICBvayhub2RlMi50eXBlID09PSAiZm9vdG5vdGVSZWZlcmVuY2UiKTsKICBub2RlMi5pZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcigKICAgIHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pCiAgKS50b0xvd2VyQ2FzZSgpOwogIG5vZGUyLmxhYmVsID0gbGFiZWw7Cn0KZnVuY3Rpb24gZXhpdEZvb3Rub3RlQ2FsbCh0b2tlbikgewogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gZXhpdEZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nKHRva2VuKSB7CiAgY29uc3QgbGFiZWwgPSB0aGlzLnJlc3VtZSgpOwogIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogIG9rKG5vZGUyLnR5cGUgPT09ICJmb290bm90ZURlZmluaXRpb24iKTsKICBub2RlMi5pZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcigKICAgIHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pCiAgKS50b0xvd2VyQ2FzZSgpOwogIG5vZGUyLmxhYmVsID0gbGFiZWw7Cn0KZnVuY3Rpb24gZXhpdEZvb3Rub3RlRGVmaW5pdGlvbih0b2tlbikgewogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gZm9vdG5vdGVSZWZlcmVuY2VQZWVrKCkgewogIHJldHVybiAiWyI7Cn0KZnVuY3Rpb24gZm9vdG5vdGVSZWZlcmVuY2Uobm9kZTIsIF80LCBzdGF0ZTE0LCBpbmZvKSB7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTQuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBsZXQgdmFsdWUyID0gdHJhY2tlci5tb3ZlKCJbXiIpOwogIGNvbnN0IGV4aXQzID0gc3RhdGUxNC5lbnRlcigiZm9vdG5vdGVSZWZlcmVuY2UiKTsKICBjb25zdCBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigicmVmZXJlbmNlIik7CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgIHN0YXRlMTQuc2FmZShzdGF0ZTE0LmFzc29jaWF0aW9uSWQobm9kZTIpLCB7IGFmdGVyOiAiXSIsIGJlZm9yZTogdmFsdWUyIH0pCiAgKTsKICBzdWJleGl0KCk7CiAgZXhpdDMoKTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJdIik7CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBnZm1Gb290bm90ZUZyb21NYXJrZG93bigpIHsKICByZXR1cm4gewogICAgZW50ZXI6IHsKICAgICAgZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nOiBlbnRlckZvb3Rub3RlQ2FsbFN0cmluZywKICAgICAgZ2ZtRm9vdG5vdGVDYWxsOiBlbnRlckZvb3Rub3RlQ2FsbCwKICAgICAgZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmc6IGVudGVyRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmcsCiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbjogZW50ZXJGb290bm90ZURlZmluaXRpb24KICAgIH0sCiAgICBleGl0OiB7CiAgICAgIGdmbUZvb3Rub3RlQ2FsbFN0cmluZzogZXhpdEZvb3Rub3RlQ2FsbFN0cmluZywKICAgICAgZ2ZtRm9vdG5vdGVDYWxsOiBleGl0Rm9vdG5vdGVDYWxsLAogICAgICBnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZzogZXhpdEZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nLAogICAgICBnZm1Gb290bm90ZURlZmluaXRpb246IGV4aXRGb290bm90ZURlZmluaXRpb24KICAgIH0KICB9Owp9CmZ1bmN0aW9uIGdmbUZvb3Rub3RlVG9NYXJrZG93bihvcHRpb25zKSB7CiAgbGV0IGZpcnN0TGluZUJsYW5rID0gZmFsc2U7CiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5maXJzdExpbmVCbGFuaykgewogICAgZmlyc3RMaW5lQmxhbmsgPSB0cnVlOwogIH0KICByZXR1cm4gewogICAgaGFuZGxlcnM6IHsgZm9vdG5vdGVEZWZpbml0aW9uLCBmb290bm90ZVJlZmVyZW5jZSB9LAogICAgLy8gVGhpcyBpcyBvbiBieSBkZWZhdWx0IGFscmVhZHkuCiAgICB1bnNhZmU6IFt7IGNoYXJhY3RlcjogIlsiLCBpbkNvbnN0cnVjdDogWyJsYWJlbCIsICJwaHJhc2luZyIsICJyZWZlcmVuY2UiXSB9XQogIH07CiAgZnVuY3Rpb24gZm9vdG5vdGVEZWZpbml0aW9uKG5vZGUyLCBfNCwgc3RhdGUxNCwgaW5mbykgewogICAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTQuY3JlYXRlVHJhY2tlcihpbmZvKTsKICAgIGxldCB2YWx1ZTIgPSB0cmFja2VyLm1vdmUoIlteIik7CiAgICBjb25zdCBleGl0MyA9IHN0YXRlMTQuZW50ZXIoImZvb3Rub3RlRGVmaW5pdGlvbiIpOwogICAgY29uc3Qgc3ViZXhpdCA9IHN0YXRlMTQuZW50ZXIoImxhYmVsIik7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICBzdGF0ZTE0LnNhZmUoc3RhdGUxNC5hc3NvY2lhdGlvbklkKG5vZGUyKSwgeyBiZWZvcmU6IHZhbHVlMiwgYWZ0ZXI6ICJdIiB9KQogICAgKTsKICAgIHN1YmV4aXQoKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIl06Iik7CiAgICBpZiAobm9kZTIuY2hpbGRyZW4gJiYgbm9kZTIuY2hpbGRyZW4ubGVuZ3RoID4gMCkgewogICAgICB0cmFja2VyLnNoaWZ0KDQpOwogICAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICAgIChmaXJzdExpbmVCbGFuayA/ICJcbiIgOiAiICIpICsgc3RhdGUxNC5pbmRlbnRMaW5lcygKICAgICAgICAgIHN0YXRlMTQuY29udGFpbmVyRmxvdyhub2RlMiwgdHJhY2tlci5jdXJyZW50KCkpLAogICAgICAgICAgZmlyc3RMaW5lQmxhbmsgPyBtYXBBbGwgOiBtYXBFeGNlcHRGaXJzdAogICAgICAgICkKICAgICAgKTsKICAgIH0KICAgIGV4aXQzKCk7CiAgICByZXR1cm4gdmFsdWUyOwogIH0KfQpmdW5jdGlvbiBtYXBFeGNlcHRGaXJzdChsaW5lLCBpbmRleDIsIGJsYW5rKSB7CiAgcmV0dXJuIGluZGV4MiA9PT0gMCA/IGxpbmUgOiBtYXBBbGwobGluZSwgaW5kZXgyLCBibGFuayk7Cn0KZnVuY3Rpb24gbWFwQWxsKGxpbmUsIGluZGV4MiwgYmxhbmspIHsKICByZXR1cm4gKGJsYW5rID8gIiIgOiAiICAgICIpICsgbGluZTsKfQp2YXIgaW5pdF9saWIxMCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLWZvb3Rub3RlQDIuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS1mb290bm90ZS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWZhdWx0KCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX25vcm1hbGl6ZV9pZGVudGlmaWVyKCk7CiAgICBmb290bm90ZVJlZmVyZW5jZS5wZWVrID0gZm9vdG5vdGVSZWZlcmVuY2VQZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWZvb3Rub3RlL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfZ2ZtX2Zvb3Rub3RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWZvb3Rub3RlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMTAoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2hAMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2gvbGliL2luZGV4LmpzCmZ1bmN0aW9uIGdmbVN0cmlrZXRocm91Z2hGcm9tTWFya2Rvd24oKSB7CiAgcmV0dXJuIHsKICAgIGNhbkNvbnRhaW5Fb2xzOiBbImRlbGV0ZSJdLAogICAgZW50ZXI6IHsgc3RyaWtldGhyb3VnaDogZW50ZXJTdHJpa2V0aHJvdWdoIH0sCiAgICBleGl0OiB7IHN0cmlrZXRocm91Z2g6IGV4aXRTdHJpa2V0aHJvdWdoIH0KICB9Owp9CmZ1bmN0aW9uIGdmbVN0cmlrZXRocm91Z2hUb01hcmtkb3duKCkgewogIHJldHVybiB7CiAgICB1bnNhZmU6IFsKICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIn4iLAogICAgICAgIGluQ29uc3RydWN0OiAicGhyYXNpbmciLAogICAgICAgIG5vdEluQ29uc3RydWN0OiBjb25zdHJ1Y3RzV2l0aG91dFN0cmlrZXRocm91Z2gKICAgICAgfQogICAgXSwKICAgIGhhbmRsZXJzOiB7IGRlbGV0ZTogaGFuZGxlRGVsZXRlIH0KICB9Owp9CmZ1bmN0aW9uIGVudGVyU3RyaWtldGhyb3VnaCh0b2tlbikgewogIHRoaXMuZW50ZXIoeyB0eXBlOiAiZGVsZXRlIiwgY2hpbGRyZW46IFtdIH0sIHRva2VuKTsKfQpmdW5jdGlvbiBleGl0U3RyaWtldGhyb3VnaCh0b2tlbikgewogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gaGFuZGxlRGVsZXRlKG5vZGUyLCBfNCwgc3RhdGUxNCwgaW5mbykgewogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTE0LmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTE0LmVudGVyKCJzdHJpa2V0aHJvdWdoIik7CiAgbGV0IHZhbHVlMiA9IHRyYWNrZXIubW92ZSgifn4iKTsKICB2YWx1ZTIgKz0gc3RhdGUxNC5jb250YWluZXJQaHJhc2luZyhub2RlMiwgewogICAgLi4udHJhY2tlci5jdXJyZW50KCksCiAgICBiZWZvcmU6IHZhbHVlMiwKICAgIGFmdGVyOiAifiIKICB9KTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJ+fiIpOwogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBwZWVrRGVsZXRlKCkgewogIHJldHVybiAifiI7Cn0KdmFyIGNvbnN0cnVjdHNXaXRob3V0U3RyaWtldGhyb3VnaDsKdmFyIGluaXRfbGliMTEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS1zdHJpa2V0aHJvdWdoQDIuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS1zdHJpa2V0aHJvdWdoL2xpYi9pbmRleC5qcyIoKSB7CiAgICBjb25zdHJ1Y3RzV2l0aG91dFN0cmlrZXRocm91Z2ggPSBbCiAgICAgICJhdXRvbGluayIsCiAgICAgICJkZXN0aW5hdGlvbkxpdGVyYWwiLAogICAgICAiZGVzdGluYXRpb25SYXciLAogICAgICAicmVmZXJlbmNlIiwKICAgICAgInRpdGxlUXVvdGUiLAogICAgICAidGl0bGVBcG9zdHJvcGhlIgogICAgXTsKICAgIGhhbmRsZURlbGV0ZS5wZWVrID0gcGVla0RlbGV0ZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2hAMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2gvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9nZm1fc3RyaWtldGhyb3VnaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2hAMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2gvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxMSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWFya2Rvd24tdGFibGVAMy4wLjQvbm9kZV9tb2R1bGVzL21hcmtkb3duLXRhYmxlL2luZGV4LmpzCmZ1bmN0aW9uIGRlZmF1bHRTdHJpbmdMZW5ndGgodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMi5sZW5ndGg7Cn0KZnVuY3Rpb24gbWFya2Rvd25UYWJsZSh0YWJsZTIsIG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgY29uc3QgYWxpZ24gPSAoc2V0dGluZ3MuYWxpZ24gfHwgW10pLmNvbmNhdCgpOwogIGNvbnN0IHN0cmluZ0xlbmd0aCA9IHNldHRpbmdzLnN0cmluZ0xlbmd0aCB8fCBkZWZhdWx0U3RyaW5nTGVuZ3RoOwogIGNvbnN0IGFsaWdubWVudHMgPSBbXTsKICBjb25zdCBjZWxsTWF0cml4ID0gW107CiAgY29uc3Qgc2l6ZU1hdHJpeCA9IFtdOwogIGNvbnN0IGxvbmdlc3RDZWxsQnlDb2x1bW4gPSBbXTsKICBsZXQgbW9zdENlbGxzUGVyUm93ID0gMDsKICBsZXQgcm93SW5kZXggPSAtMTsKICB3aGlsZSAoKytyb3dJbmRleCA8IHRhYmxlMi5sZW5ndGgpIHsKICAgIGNvbnN0IHJvdzIgPSBbXTsKICAgIGNvbnN0IHNpemVzMiA9IFtdOwogICAgbGV0IGNvbHVtbkluZGV4MiA9IC0xOwogICAgaWYgKHRhYmxlMltyb3dJbmRleF0ubGVuZ3RoID4gbW9zdENlbGxzUGVyUm93KSB7CiAgICAgIG1vc3RDZWxsc1BlclJvdyA9IHRhYmxlMltyb3dJbmRleF0ubGVuZ3RoOwogICAgfQogICAgd2hpbGUgKCsrY29sdW1uSW5kZXgyIDwgdGFibGUyW3Jvd0luZGV4XS5sZW5ndGgpIHsKICAgICAgY29uc3QgY2VsbDIgPSBzZXJpYWxpemUodGFibGUyW3Jvd0luZGV4XVtjb2x1bW5JbmRleDJdKTsKICAgICAgaWYgKHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyAhPT0gZmFsc2UpIHsKICAgICAgICBjb25zdCBzaXplID0gc3RyaW5nTGVuZ3RoKGNlbGwyKTsKICAgICAgICBzaXplczJbY29sdW1uSW5kZXgyXSA9IHNpemU7CiAgICAgICAgaWYgKGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXgyXSA9PT0gdm9pZCAwIHx8IHNpemUgPiBsb25nZXN0Q2VsbEJ5Q29sdW1uW2NvbHVtbkluZGV4Ml0pIHsKICAgICAgICAgIGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXgyXSA9IHNpemU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJvdzIucHVzaChjZWxsMik7CiAgICB9CiAgICBjZWxsTWF0cml4W3Jvd0luZGV4XSA9IHJvdzI7CiAgICBzaXplTWF0cml4W3Jvd0luZGV4XSA9IHNpemVzMjsKICB9CiAgbGV0IGNvbHVtbkluZGV4ID0gLTE7CiAgaWYgKHR5cGVvZiBhbGlnbiA9PT0gIm9iamVjdCIgJiYgImxlbmd0aCIgaW4gYWxpZ24pIHsKICAgIHdoaWxlICgrK2NvbHVtbkluZGV4IDwgbW9zdENlbGxzUGVyUm93KSB7CiAgICAgIGFsaWdubWVudHNbY29sdW1uSW5kZXhdID0gdG9BbGlnbm1lbnQoYWxpZ25bY29sdW1uSW5kZXhdKTsKICAgIH0KICB9IGVsc2UgewogICAgY29uc3QgY29kZTQgPSB0b0FsaWdubWVudChhbGlnbik7CiAgICB3aGlsZSAoKytjb2x1bW5JbmRleCA8IG1vc3RDZWxsc1BlclJvdykgewogICAgICBhbGlnbm1lbnRzW2NvbHVtbkluZGV4XSA9IGNvZGU0OwogICAgfQogIH0KICBjb2x1bW5JbmRleCA9IC0xOwogIGNvbnN0IHJvdyA9IFtdOwogIGNvbnN0IHNpemVzID0gW107CiAgd2hpbGUgKCsrY29sdW1uSW5kZXggPCBtb3N0Q2VsbHNQZXJSb3cpIHsKICAgIGNvbnN0IGNvZGU0ID0gYWxpZ25tZW50c1tjb2x1bW5JbmRleF07CiAgICBsZXQgYmVmb3JlID0gIiI7CiAgICBsZXQgYWZ0ZXIgPSAiIjsKICAgIGlmIChjb2RlNCA9PT0gOTkpIHsKICAgICAgYmVmb3JlID0gIjoiOwogICAgICBhZnRlciA9ICI6IjsKICAgIH0gZWxzZSBpZiAoY29kZTQgPT09IDEwOCkgewogICAgICBiZWZvcmUgPSAiOiI7CiAgICB9IGVsc2UgaWYgKGNvZGU0ID09PSAxMTQpIHsKICAgICAgYWZ0ZXIgPSAiOiI7CiAgICB9CiAgICBsZXQgc2l6ZSA9IHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyA9PT0gZmFsc2UgPyAxIDogTWF0aC5tYXgoCiAgICAgIDEsCiAgICAgIGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXhdIC0gYmVmb3JlLmxlbmd0aCAtIGFmdGVyLmxlbmd0aAogICAgKTsKICAgIGNvbnN0IGNlbGwyID0gYmVmb3JlICsgIi0iLnJlcGVhdChzaXplKSArIGFmdGVyOwogICAgaWYgKHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyAhPT0gZmFsc2UpIHsKICAgICAgc2l6ZSA9IGJlZm9yZS5sZW5ndGggKyBzaXplICsgYWZ0ZXIubGVuZ3RoOwogICAgICBpZiAoc2l6ZSA+IGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXhdKSB7CiAgICAgICAgbG9uZ2VzdENlbGxCeUNvbHVtbltjb2x1bW5JbmRleF0gPSBzaXplOwogICAgICB9CiAgICAgIHNpemVzW2NvbHVtbkluZGV4XSA9IHNpemU7CiAgICB9CiAgICByb3dbY29sdW1uSW5kZXhdID0gY2VsbDI7CiAgfQogIGNlbGxNYXRyaXguc3BsaWNlKDEsIDAsIHJvdyk7CiAgc2l6ZU1hdHJpeC5zcGxpY2UoMSwgMCwgc2l6ZXMpOwogIHJvd0luZGV4ID0gLTE7CiAgY29uc3QgbGluZXMgPSBbXTsKICB3aGlsZSAoKytyb3dJbmRleCA8IGNlbGxNYXRyaXgubGVuZ3RoKSB7CiAgICBjb25zdCByb3cyID0gY2VsbE1hdHJpeFtyb3dJbmRleF07CiAgICBjb25zdCBzaXplczIgPSBzaXplTWF0cml4W3Jvd0luZGV4XTsKICAgIGNvbHVtbkluZGV4ID0gLTE7CiAgICBjb25zdCBsaW5lID0gW107CiAgICB3aGlsZSAoKytjb2x1bW5JbmRleCA8IG1vc3RDZWxsc1BlclJvdykgewogICAgICBjb25zdCBjZWxsMiA9IHJvdzJbY29sdW1uSW5kZXhdIHx8ICIiOwogICAgICBsZXQgYmVmb3JlID0gIiI7CiAgICAgIGxldCBhZnRlciA9ICIiOwogICAgICBpZiAoc2V0dGluZ3MuYWxpZ25EZWxpbWl0ZXJzICE9PSBmYWxzZSkgewogICAgICAgIGNvbnN0IHNpemUgPSBsb25nZXN0Q2VsbEJ5Q29sdW1uW2NvbHVtbkluZGV4XSAtIChzaXplczJbY29sdW1uSW5kZXhdIHx8IDApOwogICAgICAgIGNvbnN0IGNvZGU0ID0gYWxpZ25tZW50c1tjb2x1bW5JbmRleF07CiAgICAgICAgaWYgKGNvZGU0ID09PSAxMTQpIHsKICAgICAgICAgIGJlZm9yZSA9ICIgIi5yZXBlYXQoc2l6ZSk7CiAgICAgICAgfSBlbHNlIGlmIChjb2RlNCA9PT0gOTkpIHsKICAgICAgICAgIGlmIChzaXplICUgMikgewogICAgICAgICAgICBiZWZvcmUgPSAiICIucmVwZWF0KHNpemUgLyAyICsgMC41KTsKICAgICAgICAgICAgYWZ0ZXIgPSAiICIucmVwZWF0KHNpemUgLyAyIC0gMC41KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJlZm9yZSA9ICIgIi5yZXBlYXQoc2l6ZSAvIDIpOwogICAgICAgICAgICBhZnRlciA9IGJlZm9yZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYWZ0ZXIgPSAiICIucmVwZWF0KHNpemUpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc2V0dGluZ3MuZGVsaW1pdGVyU3RhcnQgIT09IGZhbHNlICYmICFjb2x1bW5JbmRleCkgewogICAgICAgIGxpbmUucHVzaCgifCIpOwogICAgICB9CiAgICAgIGlmIChzZXR0aW5ncy5wYWRkaW5nICE9PSBmYWxzZSAmJiAvLyBEb27igJl0IGFkZCB0aGUgb3BlbmluZyBzcGFjZSBpZiB3ZeKAmXJlIG5vdCBhbGlnbmluZyBhbmQgdGhlIGNlbGwgaXMKICAgICAgLy8gZW1wdHk6IHRoZXJlIHdpbGwgYmUgYSBjbG9zaW5nIHNwYWNlLgogICAgICAhKHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyA9PT0gZmFsc2UgJiYgY2VsbDIgPT09ICIiKSAmJiAoc2V0dGluZ3MuZGVsaW1pdGVyU3RhcnQgIT09IGZhbHNlIHx8IGNvbHVtbkluZGV4KSkgewogICAgICAgIGxpbmUucHVzaCgiICIpOwogICAgICB9CiAgICAgIGlmIChzZXR0aW5ncy5hbGlnbkRlbGltaXRlcnMgIT09IGZhbHNlKSB7CiAgICAgICAgbGluZS5wdXNoKGJlZm9yZSk7CiAgICAgIH0KICAgICAgbGluZS5wdXNoKGNlbGwyKTsKICAgICAgaWYgKHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyAhPT0gZmFsc2UpIHsKICAgICAgICBsaW5lLnB1c2goYWZ0ZXIpOwogICAgICB9CiAgICAgIGlmIChzZXR0aW5ncy5wYWRkaW5nICE9PSBmYWxzZSkgewogICAgICAgIGxpbmUucHVzaCgiICIpOwogICAgICB9CiAgICAgIGlmIChzZXR0aW5ncy5kZWxpbWl0ZXJFbmQgIT09IGZhbHNlIHx8IGNvbHVtbkluZGV4ICE9PSBtb3N0Q2VsbHNQZXJSb3cgLSAxKSB7CiAgICAgICAgbGluZS5wdXNoKCJ8Iik7CiAgICAgIH0KICAgIH0KICAgIGxpbmVzLnB1c2goCiAgICAgIHNldHRpbmdzLmRlbGltaXRlckVuZCA9PT0gZmFsc2UgPyBsaW5lLmpvaW4oIiIpLnJlcGxhY2UoLyArJC8sICIiKSA6IGxpbmUuam9pbigiIikKICAgICk7CiAgfQogIHJldHVybiBsaW5lcy5qb2luKCJcbiIpOwp9CmZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyID09PSBudWxsIHx8IHZhbHVlMiA9PT0gdm9pZCAwID8gIiIgOiBTdHJpbmcodmFsdWUyKTsKfQpmdW5jdGlvbiB0b0FsaWdubWVudCh2YWx1ZTIpIHsKICBjb25zdCBjb2RlNCA9IHR5cGVvZiB2YWx1ZTIgPT09ICJzdHJpbmciID8gdmFsdWUyLmNvZGVQb2ludEF0KDApIDogMDsKICByZXR1cm4gY29kZTQgPT09IDY3IHx8IGNvZGU0ID09PSA5OSA/IDk5IDogY29kZTQgPT09IDc2IHx8IGNvZGU0ID09PSAxMDggPyAxMDggOiBjb2RlNCA9PT0gODIgfHwgY29kZTQgPT09IDExNCA/IDExNCA6IDA7Cn0KdmFyIGluaXRfbWFya2Rvd25fdGFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tYXJrZG93bi10YWJsZUAzLjAuNC9ub2RlX21vZHVsZXMvbWFya2Rvd24tdGFibGUvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vendpdGNoQDIuMC40L25vZGVfbW9kdWxlcy96d2l0Y2gvaW5kZXguanMKZnVuY3Rpb24gendpdGNoKGtleTIsIG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgZnVuY3Rpb24gb25lMyh2YWx1ZTIsIC4uLnBhcmFtZXRlcnMpIHsKICAgIGxldCBmbiA9IG9uZTMuaW52YWxpZDsKICAgIGNvbnN0IGhhbmRsZXJzMiA9IG9uZTMuaGFuZGxlcnM7CiAgICBpZiAodmFsdWUyICYmIG93bjIuY2FsbCh2YWx1ZTIsIGtleTIpKSB7CiAgICAgIGNvbnN0IGlkID0gU3RyaW5nKHZhbHVlMltrZXkyXSk7CiAgICAgIGZuID0gb3duMi5jYWxsKGhhbmRsZXJzMiwgaWQpID8gaGFuZGxlcnMyW2lkXSA6IG9uZTMudW5rbm93bjsKICAgIH0KICAgIGlmIChmbikgewogICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCB2YWx1ZTIsIC4uLnBhcmFtZXRlcnMpOwogICAgfQogIH0KICBvbmUzLmhhbmRsZXJzID0gc2V0dGluZ3MuaGFuZGxlcnMgfHwge307CiAgb25lMy5pbnZhbGlkID0gc2V0dGluZ3MuaW52YWxpZDsKICBvbmUzLnVua25vd24gPSBzZXR0aW5ncy51bmtub3duOwogIHJldHVybiBvbmUzOwp9CnZhciBvd24yOwp2YXIgaW5pdF96d2l0Y2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS96d2l0Y2hAMi4wLjQvbm9kZV9tb2R1bGVzL3p3aXRjaC9pbmRleC5qcyIoKSB7CiAgICBvd24yID0ge30uaGFzT3duUHJvcGVydHk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9jb25maWd1cmUuanMKZnVuY3Rpb24gY29uZmlndXJlKGJhc2UsIGV4dGVuc2lvbjIpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGtleTI7CiAgaWYgKGV4dGVuc2lvbjIuZXh0ZW5zaW9ucykgewogICAgd2hpbGUgKCsraW5kZXgyIDwgZXh0ZW5zaW9uMi5leHRlbnNpb25zLmxlbmd0aCkgewogICAgICBjb25maWd1cmUoYmFzZSwgZXh0ZW5zaW9uMi5leHRlbnNpb25zW2luZGV4Ml0pOwogICAgfQogIH0KICBmb3IgKGtleTIgaW4gZXh0ZW5zaW9uMikgewogICAgaWYgKG93bjMuY2FsbChleHRlbnNpb24yLCBrZXkyKSkgewogICAgICBzd2l0Y2ggKGtleTIpIHsKICAgICAgICBjYXNlICJleHRlbnNpb25zIjogewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0IDQgKi8KICAgICAgICBjYXNlICJ1bnNhZmUiOiB7CiAgICAgICAgICBsaXN0KGJhc2Vba2V5Ml0sIGV4dGVuc2lvbjJba2V5Ml0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgImpvaW4iOiB7CiAgICAgICAgICBsaXN0KGJhc2Vba2V5Ml0sIGV4dGVuc2lvbjJba2V5Ml0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgImhhbmRsZXJzIjogewogICAgICAgICAgbWFwMyhiYXNlW2tleTJdLCBleHRlbnNpb24yW2tleTJdKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICBiYXNlLm9wdGlvbnNba2V5Ml0gPSBleHRlbnNpb24yW2tleTJdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4gYmFzZTsKfQpmdW5jdGlvbiBsaXN0KGxlZnQsIHJpZ2h0KSB7CiAgaWYgKHJpZ2h0KSB7CiAgICBsZWZ0LnB1c2goLi4ucmlnaHQpOwogIH0KfQpmdW5jdGlvbiBtYXAzKGxlZnQsIHJpZ2h0KSB7CiAgaWYgKHJpZ2h0KSB7CiAgICBPYmplY3QuYXNzaWduKGxlZnQsIHJpZ2h0KTsKICB9Cn0KdmFyIG93bjM7CnZhciBpbml0X2NvbmZpZ3VyZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2NvbmZpZ3VyZS5qcyIoKSB7CiAgICBvd24zID0ge30uaGFzT3duUHJvcGVydHk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvYmxvY2txdW90ZS5qcwpmdW5jdGlvbiBibG9ja3F1b3RlKG5vZGUyLCBfNCwgc3RhdGUxNCwgaW5mbykgewogIGNvbnN0IGV4aXQzID0gc3RhdGUxNC5lbnRlcigiYmxvY2txdW90ZSIpOwogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTE0LmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgdHJhY2tlci5tb3ZlKCI+ICIpOwogIHRyYWNrZXIuc2hpZnQoMik7CiAgY29uc3QgdmFsdWUyID0gc3RhdGUxNC5pbmRlbnRMaW5lcygKICAgIHN0YXRlMTQuY29udGFpbmVyRmxvdyhub2RlMiwgdHJhY2tlci5jdXJyZW50KCkpLAogICAgbWFwNAogICk7CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIG1hcDQobGluZSwgXzQsIGJsYW5rKSB7CiAgcmV0dXJuICI+IiArIChibGFuayA/ICIiIDogIiAiKSArIGxpbmU7Cn0KdmFyIGluaXRfYmxvY2txdW90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9ibG9ja3F1b3RlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvcGF0dGVybi1pbi1zY29wZS5qcwpmdW5jdGlvbiBwYXR0ZXJuSW5TY29wZShzdGFjaywgcGF0dGVybikgewogIHJldHVybiBsaXN0SW5TY29wZShzdGFjaywgcGF0dGVybi5pbkNvbnN0cnVjdCwgdHJ1ZSkgJiYgIWxpc3RJblNjb3BlKHN0YWNrLCBwYXR0ZXJuLm5vdEluQ29uc3RydWN0LCBmYWxzZSk7Cn0KZnVuY3Rpb24gbGlzdEluU2NvcGUoc3RhY2ssIGxpc3Q1LCBub25lKSB7CiAgaWYgKHR5cGVvZiBsaXN0NSA9PT0gInN0cmluZyIpIHsKICAgIGxpc3Q1ID0gW2xpc3Q1XTsKICB9CiAgaWYgKCFsaXN0NSB8fCBsaXN0NS5sZW5ndGggPT09IDApIHsKICAgIHJldHVybiBub25lOwogIH0KICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgbGlzdDUubGVuZ3RoKSB7CiAgICBpZiAoc3RhY2suaW5jbHVkZXMobGlzdDVbaW5kZXgyXSkpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfQogIHJldHVybiBmYWxzZTsKfQp2YXIgaW5pdF9wYXR0ZXJuX2luX3Njb3BlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9wYXR0ZXJuLWluLXNjb3BlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9icmVhay5qcwpmdW5jdGlvbiBoYXJkQnJlYWsoXzQsIF8xLCBzdGF0ZTE0LCBpbmZvKSB7CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHN0YXRlMTQudW5zYWZlLmxlbmd0aCkgewogICAgaWYgKHN0YXRlMTQudW5zYWZlW2luZGV4Ml0uY2hhcmFjdGVyID09PSAiXG4iICYmIHBhdHRlcm5JblNjb3BlKHN0YXRlMTQuc3RhY2ssIHN0YXRlMTQudW5zYWZlW2luZGV4Ml0pKSB7CiAgICAgIHJldHVybiAvWyBcdF0vLnRlc3QoaW5mby5iZWZvcmUpID8gIiIgOiAiICI7CiAgICB9CiAgfQogIHJldHVybiAiXFxcbiI7Cn0KdmFyIGluaXRfYnJlYWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvYnJlYWsuanMiKCkgewogICAgaW5pdF9wYXR0ZXJuX2luX3Njb3BlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb25nZXN0LXN0cmVha0AzLjEuMC9ub2RlX21vZHVsZXMvbG9uZ2VzdC1zdHJlYWsvaW5kZXguanMKZnVuY3Rpb24gbG9uZ2VzdFN0cmVhayh2YWx1ZTIsIHN1YnN0cmluZykgewogIGNvbnN0IHNvdXJjZSA9IFN0cmluZyh2YWx1ZTIpOwogIGxldCBpbmRleDIgPSBzb3VyY2UuaW5kZXhPZihzdWJzdHJpbmcpOwogIGxldCBleHBlY3RlZCA9IGluZGV4MjsKICBsZXQgY291bnQyID0gMDsKICBsZXQgbWF4MyA9IDA7CiAgaWYgKHR5cGVvZiBzdWJzdHJpbmcgIT09ICJzdHJpbmciKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBzdWJzdHJpbmciKTsKICB9CiAgd2hpbGUgKGluZGV4MiAhPT0gLTEpIHsKICAgIGlmIChpbmRleDIgPT09IGV4cGVjdGVkKSB7CiAgICAgIGlmICgrK2NvdW50MiA+IG1heDMpIHsKICAgICAgICBtYXgzID0gY291bnQyOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb3VudDIgPSAxOwogICAgfQogICAgZXhwZWN0ZWQgPSBpbmRleDIgKyBzdWJzdHJpbmcubGVuZ3RoOwogICAgaW5kZXgyID0gc291cmNlLmluZGV4T2Yoc3Vic3RyaW5nLCBleHBlY3RlZCk7CiAgfQogIHJldHVybiBtYXgzOwp9CnZhciBpbml0X2xvbmdlc3Rfc3RyZWFrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbG9uZ2VzdC1zdHJlYWtAMy4xLjAvbm9kZV9tb2R1bGVzL2xvbmdlc3Qtc3RyZWFrL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvZm9ybWF0LWNvZGUtYXMtaW5kZW50ZWQuanMKZnVuY3Rpb24gZm9ybWF0Q29kZUFzSW5kZW50ZWQobm9kZTIsIHN0YXRlMTQpIHsKICByZXR1cm4gQm9vbGVhbigKICAgIHN0YXRlMTQub3B0aW9ucy5mZW5jZXMgPT09IGZhbHNlICYmIG5vZGUyLnZhbHVlICYmIC8vIElmIHRoZXJl4oCZcyBubyBpbmZv4oCmCiAgICAhbm9kZTIubGFuZyAmJiAvLyBBbmQgdGhlcmXigJlzIGEgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVy4oCmCiAgICAvW14gXHJcbl0vLnRlc3Qobm9kZTIudmFsdWUpICYmIC8vIEFuZCB0aGUgdmFsdWUgZG9lc27igJl0IHN0YXJ0IG9yIGVuZCBpbiBhIGJsYW5r4oCmCiAgICAhL15bXHQgXSooPzpbXHJcbl18JCl8KD86XnxbXHJcbl0pW1x0IF0qJC8udGVzdChub2RlMi52YWx1ZSkKICApOwp9CnZhciBpbml0X2Zvcm1hdF9jb2RlX2FzX2luZGVudGVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9mb3JtYXQtY29kZS1hcy1pbmRlbnRlZC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWZlbmNlLmpzCmZ1bmN0aW9uIGNoZWNrRmVuY2Uoc3RhdGUxNCkgewogIGNvbnN0IG1hcmtlciA9IHN0YXRlMTQub3B0aW9ucy5mZW5jZSB8fCAiYCI7CiAgaWYgKG1hcmtlciAhPT0gImAiICYmIG1hcmtlciAhPT0gIn4iKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3Qgc2VyaWFsaXplIGNvZGUgd2l0aCBgIiArIG1hcmtlciArICJgIGZvciBgb3B0aW9ucy5mZW5jZWAsIGV4cGVjdGVkIGBgIGAgYGAgb3IgYH5gIgogICAgKTsKICB9CiAgcmV0dXJuIG1hcmtlcjsKfQp2YXIgaW5pdF9jaGVja19mZW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stZmVuY2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2NvZGUuanMKZnVuY3Rpb24gY29kZShub2RlMiwgXzQsIHN0YXRlMTQsIGluZm8pIHsKICBjb25zdCBtYXJrZXIgPSBjaGVja0ZlbmNlKHN0YXRlMTQpOwogIGNvbnN0IHJhdzIgPSBub2RlMi52YWx1ZSB8fCAiIjsKICBjb25zdCBzdWZmaXggPSBtYXJrZXIgPT09ICJgIiA/ICJHcmF2ZUFjY2VudCIgOiAiVGlsZGUiOwogIGlmIChmb3JtYXRDb2RlQXNJbmRlbnRlZChub2RlMiwgc3RhdGUxNCkpIHsKICAgIGNvbnN0IGV4aXQ0ID0gc3RhdGUxNC5lbnRlcigiY29kZUluZGVudGVkIik7CiAgICBjb25zdCB2YWx1ZTMgPSBzdGF0ZTE0LmluZGVudExpbmVzKHJhdzIsIG1hcDUpOwogICAgZXhpdDQoKTsKICAgIHJldHVybiB2YWx1ZTM7CiAgfQogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTE0LmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgY29uc3Qgc2VxdWVuY2UgPSBtYXJrZXIucmVwZWF0KE1hdGgubWF4KGxvbmdlc3RTdHJlYWsocmF3MiwgbWFya2VyKSArIDEsIDMpKTsKICBjb25zdCBleGl0MyA9IHN0YXRlMTQuZW50ZXIoImNvZGVGZW5jZWQiKTsKICBsZXQgdmFsdWUyID0gdHJhY2tlci5tb3ZlKHNlcXVlbmNlKTsKICBpZiAobm9kZTIubGFuZykgewogICAgY29uc3Qgc3ViZXhpdCA9IHN0YXRlMTQuZW50ZXIoYGNvZGVGZW5jZWRMYW5nJHtzdWZmaXh9YCk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICBzdGF0ZTE0LnNhZmUobm9kZTIubGFuZywgewogICAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICAgIGFmdGVyOiAiICIsCiAgICAgICAgZW5jb2RlOiBbImAiXSwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICAgIHN1YmV4aXQoKTsKICB9CiAgaWYgKG5vZGUyLmxhbmcgJiYgbm9kZTIubWV0YSkgewogICAgY29uc3Qgc3ViZXhpdCA9IHN0YXRlMTQuZW50ZXIoYGNvZGVGZW5jZWRNZXRhJHtzdWZmaXh9YCk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCIgIik7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICBzdGF0ZTE0LnNhZmUobm9kZTIubWV0YSwgewogICAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICAgIGFmdGVyOiAiXG4iLAogICAgICAgIGVuY29kZTogWyJgIl0sCiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgICAgfSkKICAgICk7CiAgICBzdWJleGl0KCk7CiAgfQogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIlxuIik7CiAgaWYgKHJhdzIpIHsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUocmF3MiArICJcbiIpOwogIH0KICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKHNlcXVlbmNlKTsKICBleGl0MygpOwogIHJldHVybiB2YWx1ZTI7Cn0KZnVuY3Rpb24gbWFwNShsaW5lLCBfNCwgYmxhbmspIHsKICByZXR1cm4gKGJsYW5rID8gIiIgOiAiICAgICIpICsgbGluZTsKfQp2YXIgaW5pdF9jb2RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2NvZGUuanMiKCkgewogICAgaW5pdF9sb25nZXN0X3N0cmVhaygpOwogICAgaW5pdF9mb3JtYXRfY29kZV9hc19pbmRlbnRlZCgpOwogICAgaW5pdF9jaGVja19mZW5jZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1xdW90ZS5qcwpmdW5jdGlvbiBjaGVja1F1b3RlKHN0YXRlMTQpIHsKICBjb25zdCBtYXJrZXIgPSBzdGF0ZTE0Lm9wdGlvbnMucXVvdGUgfHwgJyInOwogIGlmIChtYXJrZXIgIT09ICciJyAmJiBtYXJrZXIgIT09ICInIikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiQ2Fubm90IHNlcmlhbGl6ZSB0aXRsZSB3aXRoIGAiICsgbWFya2VyICsgImAgZm9yIGBvcHRpb25zLnF1b3RlYCwgZXhwZWN0ZWQgYFwiYCwgb3IgYCdgIgogICAgKTsKICB9CiAgcmV0dXJuIG1hcmtlcjsKfQp2YXIgaW5pdF9jaGVja19xdW90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stcXVvdGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2RlZmluaXRpb24uanMKZnVuY3Rpb24gZGVmaW5pdGlvbihub2RlMiwgXzQsIHN0YXRlMTQsIGluZm8pIHsKICBjb25zdCBxdW90ZSA9IGNoZWNrUXVvdGUoc3RhdGUxNCk7CiAgY29uc3Qgc3VmZml4ID0gcXVvdGUgPT09ICciJyA/ICJRdW90ZSIgOiAiQXBvc3Ryb3BoZSI7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTE0LmVudGVyKCJkZWZpbml0aW9uIik7CiAgbGV0IHN1YmV4aXQgPSBzdGF0ZTE0LmVudGVyKCJsYWJlbCIpOwogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTE0LmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgbGV0IHZhbHVlMiA9IHRyYWNrZXIubW92ZSgiWyIpOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICBzdGF0ZTE0LnNhZmUoc3RhdGUxNC5hc3NvY2lhdGlvbklkKG5vZGUyKSwgewogICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgYWZ0ZXI6ICJdIiwKICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgIH0pCiAgKTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJdOiAiKTsKICBzdWJleGl0KCk7CiAgaWYgKAogICAgLy8gSWYgdGhlcmXigJlzIG5vIHVybCwgb3LigKYKICAgICFub2RlMi51cmwgfHwgLy8gSWYgdGhlcmUgYXJlIGNvbnRyb2wgY2hhcmFjdGVycyBvciB3aGl0ZXNwYWNlLgogICAgL1tcMC0gXHUwMDdGXS8udGVzdChub2RlMi51cmwpCiAgKSB7CiAgICBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigiZGVzdGluYXRpb25MaXRlcmFsIik7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCI8Iik7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICBzdGF0ZTE0LnNhZmUobm9kZTIudXJsLCB7IGJlZm9yZTogdmFsdWUyLCBhZnRlcjogIj4iLCAuLi50cmFja2VyLmN1cnJlbnQoKSB9KQogICAgKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIj4iKTsKICB9IGVsc2UgewogICAgc3ViZXhpdCA9IHN0YXRlMTQuZW50ZXIoImRlc3RpbmF0aW9uUmF3Iik7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICBzdGF0ZTE0LnNhZmUobm9kZTIudXJsLCB7CiAgICAgICAgYmVmb3JlOiB2YWx1ZTIsCiAgICAgICAgYWZ0ZXI6IG5vZGUyLnRpdGxlID8gIiAiIDogIlxuIiwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICB9CiAgc3ViZXhpdCgpOwogIGlmIChub2RlMi50aXRsZSkgewogICAgc3ViZXhpdCA9IHN0YXRlMTQuZW50ZXIoYHRpdGxlJHtzdWZmaXh9YCk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCIgIiArIHF1b3RlKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTQuc2FmZShub2RlMi50aXRsZSwgewogICAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICAgIGFmdGVyOiBxdW90ZSwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUocXVvdGUpOwogICAgc3ViZXhpdCgpOwogIH0KICBleGl0MygpOwogIHJldHVybiB2YWx1ZTI7Cn0KdmFyIGluaXRfZGVmaW5pdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9kZWZpbml0aW9uLmpzIigpIHsKICAgIGluaXRfY2hlY2tfcXVvdGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stZW1waGFzaXMuanMKZnVuY3Rpb24gY2hlY2tFbXBoYXNpcyhzdGF0ZTE0KSB7CiAgY29uc3QgbWFya2VyID0gc3RhdGUxNC5vcHRpb25zLmVtcGhhc2lzIHx8ICIqIjsKICBpZiAobWFya2VyICE9PSAiKiIgJiYgbWFya2VyICE9PSAiXyIpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgZW1waGFzaXMgd2l0aCBgIiArIG1hcmtlciArICJgIGZvciBgb3B0aW9ucy5lbXBoYXNpc2AsIGV4cGVjdGVkIGAqYCwgb3IgYF9gIgogICAgKTsKICB9CiAgcmV0dXJuIG1hcmtlcjsKfQp2YXIgaW5pdF9jaGVja19lbXBoYXNpcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stZW1waGFzaXMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9lbmNvZGUtY2hhcmFjdGVyLXJlZmVyZW5jZS5qcwpmdW5jdGlvbiBlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UoY29kZTQpIHsKICByZXR1cm4gIiYjeCIgKyBjb2RlNC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArICI7IjsKfQp2YXIgaW5pdF9lbmNvZGVfY2hhcmFjdGVyX3JlZmVyZW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvZW5jb2RlLWNoYXJhY3Rlci1yZWZlcmVuY2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtY2xhc3NpZnktY2hhcmFjdGVyQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jbGFzc2lmeS1jaGFyYWN0ZXIvaW5kZXguanMKZnVuY3Rpb24gY2xhc3NpZnlDaGFyYWN0ZXIoY29kZTQpIHsKICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgfHwgdW5pY29kZVdoaXRlc3BhY2UoY29kZTQpKSB7CiAgICByZXR1cm4gMTsKICB9CiAgaWYgKHVuaWNvZGVQdW5jdHVhdGlvbihjb2RlNCkpIHsKICAgIHJldHVybiAyOwogIH0KfQp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9jbGFzc2lmeV9jaGFyYWN0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1jbGFzc2lmeS1jaGFyYWN0ZXJAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNsYXNzaWZ5LWNoYXJhY3Rlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9lbmNvZGUtaW5mby5qcwpmdW5jdGlvbiBlbmNvZGVJbmZvKG91dHNpZGUsIGluc2lkZSwgbWFya2VyKSB7CiAgY29uc3Qgb3V0c2lkZUtpbmQgPSBjbGFzc2lmeUNoYXJhY3RlcihvdXRzaWRlKTsKICBjb25zdCBpbnNpZGVLaW5kID0gY2xhc3NpZnlDaGFyYWN0ZXIoaW5zaWRlKTsKICBpZiAob3V0c2lkZUtpbmQgPT09IHZvaWQgMCkgewogICAgcmV0dXJuIGluc2lkZUtpbmQgPT09IHZvaWQgMCA/ICgKICAgICAgLy8gTGV0dGVyIGluc2lkZToKICAgICAgLy8gd2UgaGF2ZSB0byBlbmNvZGUgKmJvdGgqIGxldHRlcnMgZm9yIGBfYCBhcyBpdCBpcyBsb29zZXIuCiAgICAgIC8vIGl0IGFscmVhZHkgZm9ybXMgZm9yIGAqYCAoYW5kIEdGTXMgYH5gKS4KICAgICAgbWFya2VyID09PSAiXyIgPyB7IGluc2lkZTogdHJ1ZSwgb3V0c2lkZTogdHJ1ZSB9IDogeyBpbnNpZGU6IGZhbHNlLCBvdXRzaWRlOiBmYWxzZSB9CiAgICApIDogaW5zaWRlS2luZCA9PT0gMSA/ICgKICAgICAgLy8gV2hpdGVzcGFjZSBpbnNpZGU6IGVuY29kZSBib3RoIChsZXR0ZXIsIHdoaXRlc3BhY2UpLgogICAgICB7IGluc2lkZTogdHJ1ZSwgb3V0c2lkZTogdHJ1ZSB9CiAgICApIDogKAogICAgICAvLyBQdW5jdHVhdGlvbiBpbnNpZGU6IGVuY29kZSBvdXRlciAobGV0dGVyKQogICAgICB7IGluc2lkZTogZmFsc2UsIG91dHNpZGU6IHRydWUgfQogICAgKTsKICB9CiAgaWYgKG91dHNpZGVLaW5kID09PSAxKSB7CiAgICByZXR1cm4gaW5zaWRlS2luZCA9PT0gdm9pZCAwID8gKAogICAgICAvLyBMZXR0ZXIgaW5zaWRlOiBhbHJlYWR5IGZvcm1zLgogICAgICB7IGluc2lkZTogZmFsc2UsIG91dHNpZGU6IGZhbHNlIH0KICAgICkgOiBpbnNpZGVLaW5kID09PSAxID8gKAogICAgICAvLyBXaGl0ZXNwYWNlIGluc2lkZTogZW5jb2RlIGJvdGggKHdoaXRlc3BhY2UpLgogICAgICB7IGluc2lkZTogdHJ1ZSwgb3V0c2lkZTogdHJ1ZSB9CiAgICApIDogKAogICAgICAvLyBQdW5jdHVhdGlvbiBpbnNpZGU6IGFscmVhZHkgZm9ybXMuCiAgICAgIHsgaW5zaWRlOiBmYWxzZSwgb3V0c2lkZTogZmFsc2UgfQogICAgKTsKICB9CiAgcmV0dXJuIGluc2lkZUtpbmQgPT09IHZvaWQgMCA/ICgKICAgIC8vIExldHRlciBpbnNpZGU6IGFscmVhZHkgZm9ybXMuCiAgICB7IGluc2lkZTogZmFsc2UsIG91dHNpZGU6IGZhbHNlIH0KICApIDogaW5zaWRlS2luZCA9PT0gMSA/ICgKICAgIC8vIFdoaXRlc3BhY2UgaW5zaWRlOiBlbmNvZGUgaW5uZXIgKHdoaXRlc3BhY2UpLgogICAgeyBpbnNpZGU6IHRydWUsIG91dHNpZGU6IGZhbHNlIH0KICApIDogKAogICAgLy8gUHVuY3R1YXRpb24gaW5zaWRlOiBhbHJlYWR5IGZvcm1zLgogICAgeyBpbnNpZGU6IGZhbHNlLCBvdXRzaWRlOiBmYWxzZSB9CiAgKTsKfQp2YXIgaW5pdF9lbmNvZGVfaW5mbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvZW5jb2RlLWluZm8uanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jbGFzc2lmeV9jaGFyYWN0ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9lbXBoYXNpcy5qcwpmdW5jdGlvbiBlbXBoYXNpcyhub2RlMiwgXzQsIHN0YXRlMTQsIGluZm8pIHsKICBjb25zdCBtYXJrZXIgPSBjaGVja0VtcGhhc2lzKHN0YXRlMTQpOwogIGNvbnN0IGV4aXQzID0gc3RhdGUxNC5lbnRlcigiZW1waGFzaXMiKTsKICBjb25zdCB0cmFja2VyID0gc3RhdGUxNC5jcmVhdGVUcmFja2VyKGluZm8pOwogIGNvbnN0IGJlZm9yZSA9IHRyYWNrZXIubW92ZShtYXJrZXIpOwogIGxldCBiZXR3ZWVuMiA9IHRyYWNrZXIubW92ZSgKICAgIHN0YXRlMTQuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIHsKICAgICAgYWZ0ZXI6IG1hcmtlciwKICAgICAgYmVmb3JlLAogICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgfSkKICApOwogIGNvbnN0IGJldHdlZW5IZWFkID0gYmV0d2VlbjIuY2hhckNvZGVBdCgwKTsKICBjb25zdCBvcGVuID0gZW5jb2RlSW5mbygKICAgIGluZm8uYmVmb3JlLmNoYXJDb2RlQXQoaW5mby5iZWZvcmUubGVuZ3RoIC0gMSksCiAgICBiZXR3ZWVuSGVhZCwKICAgIG1hcmtlcgogICk7CiAgaWYgKG9wZW4uaW5zaWRlKSB7CiAgICBiZXR3ZWVuMiA9IGVuY29kZUNoYXJhY3RlclJlZmVyZW5jZShiZXR3ZWVuSGVhZCkgKyBiZXR3ZWVuMi5zbGljZSgxKTsKICB9CiAgY29uc3QgYmV0d2VlblRhaWwgPSBiZXR3ZWVuMi5jaGFyQ29kZUF0KGJldHdlZW4yLmxlbmd0aCAtIDEpOwogIGNvbnN0IGNsb3NlNyA9IGVuY29kZUluZm8oaW5mby5hZnRlci5jaGFyQ29kZUF0KDApLCBiZXR3ZWVuVGFpbCwgbWFya2VyKTsKICBpZiAoY2xvc2U3Lmluc2lkZSkgewogICAgYmV0d2VlbjIgPSBiZXR3ZWVuMi5zbGljZSgwLCAtMSkgKyBlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UoYmV0d2VlblRhaWwpOwogIH0KICBjb25zdCBhZnRlciA9IHRyYWNrZXIubW92ZShtYXJrZXIpOwogIGV4aXQzKCk7CiAgc3RhdGUxNC5hdHRlbnRpb25FbmNvZGVTdXJyb3VuZGluZ0luZm8gPSB7CiAgICBhZnRlcjogY2xvc2U3Lm91dHNpZGUsCiAgICBiZWZvcmU6IG9wZW4ub3V0c2lkZQogIH07CiAgcmV0dXJuIGJlZm9yZSArIGJldHdlZW4yICsgYWZ0ZXI7Cn0KZnVuY3Rpb24gZW1waGFzaXNQZWVrKF80LCBfMSwgc3RhdGUxNCkgewogIHJldHVybiBzdGF0ZTE0Lm9wdGlvbnMuZW1waGFzaXMgfHwgIioiOwp9CnZhciBpbml0X2VtcGhhc2lzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2VtcGhhc2lzLmpzIigpIHsKICAgIGluaXRfY2hlY2tfZW1waGFzaXMoKTsKICAgIGluaXRfZW5jb2RlX2NoYXJhY3Rlcl9yZWZlcmVuY2UoKTsKICAgIGluaXRfZW5jb2RlX2luZm8oKTsKICAgIGVtcGhhc2lzLnBlZWsgPSBlbXBoYXNpc1BlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXZpc2l0QDUuMS4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0L2xpYi9pbmRleC5qcwpmdW5jdGlvbiB2aXNpdCh0cmVlLCB0ZXN0T3JWaXNpdG9yLCB2aXNpdG9yT3JSZXZlcnNlLCBtYXliZVJldmVyc2UpIHsKICBsZXQgcmV2ZXJzZTsKICBsZXQgdGVzdDsKICBsZXQgdmlzaXRvcjsKICBpZiAodHlwZW9mIHRlc3RPclZpc2l0b3IgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIHZpc2l0b3JPclJldmVyc2UgIT09ICJmdW5jdGlvbiIpIHsKICAgIHRlc3QgPSB2b2lkIDA7CiAgICB2aXNpdG9yID0gdGVzdE9yVmlzaXRvcjsKICAgIHJldmVyc2UgPSB2aXNpdG9yT3JSZXZlcnNlOwogIH0gZWxzZSB7CiAgICB0ZXN0ID0gdGVzdE9yVmlzaXRvcjsKICAgIHZpc2l0b3IgPSB2aXNpdG9yT3JSZXZlcnNlOwogICAgcmV2ZXJzZSA9IG1heWJlUmV2ZXJzZTsKICB9CiAgdmlzaXRQYXJlbnRzKHRyZWUsIHRlc3QsIG92ZXJsb2FkLCByZXZlcnNlKTsKICBmdW5jdGlvbiBvdmVybG9hZChub2RlMiwgcGFyZW50cykgewogICAgY29uc3QgcGFyZW50ID0gcGFyZW50c1twYXJlbnRzLmxlbmd0aCAtIDFdOwogICAgY29uc3QgaW5kZXgyID0gcGFyZW50ID8gcGFyZW50LmNoaWxkcmVuLmluZGV4T2Yobm9kZTIpIDogdm9pZCAwOwogICAgcmV0dXJuIHZpc2l0b3Iobm9kZTIsIGluZGV4MiwgcGFyZW50KTsKICB9Cn0KdmFyIGluaXRfbGliMTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXZpc2l0QDUuMS4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0L2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X3VuaXN0X3V0aWxfdmlzaXRfcGFyZW50cygpOwogICAgaW5pdF91bmlzdF91dGlsX3Zpc2l0X3BhcmVudHMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXRANS4xLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQvaW5kZXguanMKdmFyIGluaXRfdW5pc3RfdXRpbF92aXNpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXRANS4xLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1zdHJpbmdANC4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tc3RyaW5nL2xpYi9pbmRleC5qcwpmdW5jdGlvbiB0b1N0cmluZyh2YWx1ZTIsIG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwgZW1wdHlPcHRpb25zOwogIGNvbnN0IGluY2x1ZGVJbWFnZUFsdCA9IHR5cGVvZiBzZXR0aW5ncy5pbmNsdWRlSW1hZ2VBbHQgPT09ICJib29sZWFuIiA/IHNldHRpbmdzLmluY2x1ZGVJbWFnZUFsdCA6IHRydWU7CiAgY29uc3QgaW5jbHVkZUh0bWwgPSB0eXBlb2Ygc2V0dGluZ3MuaW5jbHVkZUh0bWwgPT09ICJib29sZWFuIiA/IHNldHRpbmdzLmluY2x1ZGVIdG1sIDogdHJ1ZTsKICByZXR1cm4gb25lKHZhbHVlMiwgaW5jbHVkZUltYWdlQWx0LCBpbmNsdWRlSHRtbCk7Cn0KZnVuY3Rpb24gb25lKHZhbHVlMiwgaW5jbHVkZUltYWdlQWx0LCBpbmNsdWRlSHRtbCkgewogIGlmIChub2RlKHZhbHVlMikpIHsKICAgIGlmICgidmFsdWUiIGluIHZhbHVlMikgewogICAgICByZXR1cm4gdmFsdWUyLnR5cGUgPT09ICJodG1sIiAmJiAhaW5jbHVkZUh0bWwgPyAiIiA6IHZhbHVlMi52YWx1ZTsKICAgIH0KICAgIGlmIChpbmNsdWRlSW1hZ2VBbHQgJiYgImFsdCIgaW4gdmFsdWUyICYmIHZhbHVlMi5hbHQpIHsKICAgICAgcmV0dXJuIHZhbHVlMi5hbHQ7CiAgICB9CiAgICBpZiAoImNoaWxkcmVuIiBpbiB2YWx1ZTIpIHsKICAgICAgcmV0dXJuIGFsbCh2YWx1ZTIuY2hpbGRyZW4sIGluY2x1ZGVJbWFnZUFsdCwgaW5jbHVkZUh0bWwpOwogICAgfQogIH0KICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7CiAgICByZXR1cm4gYWxsKHZhbHVlMiwgaW5jbHVkZUltYWdlQWx0LCBpbmNsdWRlSHRtbCk7CiAgfQogIHJldHVybiAiIjsKfQpmdW5jdGlvbiBhbGwodmFsdWVzLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKSB7CiAgY29uc3QgcmVzdWx0ID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHZhbHVlcy5sZW5ndGgpIHsKICAgIHJlc3VsdFtpbmRleDJdID0gb25lKHZhbHVlc1tpbmRleDJdLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKTsKICB9CiAgcmV0dXJuIHJlc3VsdC5qb2luKCIiKTsKfQpmdW5jdGlvbiBub2RlKHZhbHVlMikgewogIHJldHVybiBCb29sZWFuKHZhbHVlMiAmJiB0eXBlb2YgdmFsdWUyID09PSAib2JqZWN0Iik7Cn0KdmFyIGVtcHR5T3B0aW9uczsKdmFyIGluaXRfbGliMTMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLXN0cmluZ0A0LjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1zdHJpbmcvbGliL2luZGV4LmpzIigpIHsKICAgIGVtcHR5T3B0aW9ucyA9IHt9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1zdHJpbmdANC4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tc3RyaW5nL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfdG9fc3RyaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1zdHJpbmdANC4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tc3RyaW5nL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMTMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvZm9ybWF0LWhlYWRpbmctYXMtc2V0ZXh0LmpzCmZ1bmN0aW9uIGZvcm1hdEhlYWRpbmdBc1NldGV4dChub2RlMiwgc3RhdGUxNCkgewogIGxldCBsaXRlcmFsV2l0aEJyZWFrID0gZmFsc2U7CiAgdmlzaXQobm9kZTIsIGZ1bmN0aW9uKG5vZGUzKSB7CiAgICBpZiAoInZhbHVlIiBpbiBub2RlMyAmJiAvXHI/XG58XHIvLnRlc3Qobm9kZTMudmFsdWUpIHx8IG5vZGUzLnR5cGUgPT09ICJicmVhayIpIHsKICAgICAgbGl0ZXJhbFdpdGhCcmVhayA9IHRydWU7CiAgICAgIHJldHVybiBFWElUOwogICAgfQogIH0pOwogIHJldHVybiBCb29sZWFuKAogICAgKCFub2RlMi5kZXB0aCB8fCBub2RlMi5kZXB0aCA8IDMpICYmIHRvU3RyaW5nKG5vZGUyKSAmJiAoc3RhdGUxNC5vcHRpb25zLnNldGV4dCB8fCBsaXRlcmFsV2l0aEJyZWFrKQogICk7Cn0KdmFyIGluaXRfZm9ybWF0X2hlYWRpbmdfYXNfc2V0ZXh0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9mb3JtYXQtaGVhZGluZy1hcy1zZXRleHQuanMiKCkgewogICAgaW5pdF91bmlzdF91dGlsX3Zpc2l0KCk7CiAgICBpbml0X21kYXN0X3V0aWxfdG9fc3RyaW5nKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaGVhZGluZy5qcwpmdW5jdGlvbiBoZWFkaW5nKG5vZGUyLCBfNCwgc3RhdGUxNCwgaW5mbykgewogIGNvbnN0IHJhbmsgPSBNYXRoLm1heChNYXRoLm1pbig2LCBub2RlMi5kZXB0aCB8fCAxKSwgMSk7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTQuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBpZiAoZm9ybWF0SGVhZGluZ0FzU2V0ZXh0KG5vZGUyLCBzdGF0ZTE0KSkgewogICAgY29uc3QgZXhpdDQgPSBzdGF0ZTE0LmVudGVyKCJoZWFkaW5nU2V0ZXh0Iik7CiAgICBjb25zdCBzdWJleGl0MiA9IHN0YXRlMTQuZW50ZXIoInBocmFzaW5nIik7CiAgICBjb25zdCB2YWx1ZTMgPSBzdGF0ZTE0LmNvbnRhaW5lclBocmFzaW5nKG5vZGUyLCB7CiAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpLAogICAgICBiZWZvcmU6ICJcbiIsCiAgICAgIGFmdGVyOiAiXG4iCiAgICB9KTsKICAgIHN1YmV4aXQyKCk7CiAgICBleGl0NCgpOwogICAgcmV0dXJuIHZhbHVlMyArICJcbiIgKyAocmFuayA9PT0gMSA/ICI9IiA6ICItIikucmVwZWF0KAogICAgICAvLyBUaGUgd2hvbGUgc2l6ZeKApgogICAgICB2YWx1ZTMubGVuZ3RoIC0gLy8gTWludXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGxhc3QgRU9MIChvcgogICAgICAvLyAwIGlmIHRoZXJlIGlzIG5vbmUp4oCmCiAgICAgIChNYXRoLm1heCh2YWx1ZTMubGFzdEluZGV4T2YoIlxyIiksIHZhbHVlMy5sYXN0SW5kZXhPZigiXG4iKSkgKyAxKQogICAgKTsKICB9CiAgY29uc3Qgc2VxdWVuY2UgPSAiIyIucmVwZWF0KHJhbmspOwogIGNvbnN0IGV4aXQzID0gc3RhdGUxNC5lbnRlcigiaGVhZGluZ0F0eCIpOwogIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZTE0LmVudGVyKCJwaHJhc2luZyIpOwogIHRyYWNrZXIubW92ZShzZXF1ZW5jZSArICIgIik7CiAgbGV0IHZhbHVlMiA9IHN0YXRlMTQuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIHsKICAgIGJlZm9yZTogIiMgIiwKICAgIGFmdGVyOiAiXG4iLAogICAgLi4udHJhY2tlci5jdXJyZW50KCkKICB9KTsKICBpZiAoL15bXHQgXS8udGVzdCh2YWx1ZTIpKSB7CiAgICB2YWx1ZTIgPSBlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UodmFsdWUyLmNoYXJDb2RlQXQoMCkpICsgdmFsdWUyLnNsaWNlKDEpOwogIH0KICB2YWx1ZTIgPSB2YWx1ZTIgPyBzZXF1ZW5jZSArICIgIiArIHZhbHVlMiA6IHNlcXVlbmNlOwogIGlmIChzdGF0ZTE0Lm9wdGlvbnMuY2xvc2VBdHgpIHsKICAgIHZhbHVlMiArPSAiICIgKyBzZXF1ZW5jZTsKICB9CiAgc3ViZXhpdCgpOwogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKfQp2YXIgaW5pdF9oZWFkaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2hlYWRpbmcuanMiKCkgewogICAgaW5pdF9lbmNvZGVfY2hhcmFjdGVyX3JlZmVyZW5jZSgpOwogICAgaW5pdF9mb3JtYXRfaGVhZGluZ19hc19zZXRleHQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9odG1sLmpzCmZ1bmN0aW9uIGh0bWwobm9kZTIpIHsKICByZXR1cm4gbm9kZTIudmFsdWUgfHwgIiI7Cn0KZnVuY3Rpb24gaHRtbFBlZWsoKSB7CiAgcmV0dXJuICI8IjsKfQp2YXIgaW5pdF9odG1sID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2h0bWwuanMiKCkgewogICAgaHRtbC5wZWVrID0gaHRtbFBlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaW1hZ2UuanMKZnVuY3Rpb24gaW1hZ2Uobm9kZTIsIF80LCBzdGF0ZTE0LCBpbmZvKSB7CiAgY29uc3QgcXVvdGUgPSBjaGVja1F1b3RlKHN0YXRlMTQpOwogIGNvbnN0IHN1ZmZpeCA9IHF1b3RlID09PSAnIicgPyAiUXVvdGUiIDogIkFwb3N0cm9waGUiOwogIGNvbnN0IGV4aXQzID0gc3RhdGUxNC5lbnRlcigiaW1hZ2UiKTsKICBsZXQgc3ViZXhpdCA9IHN0YXRlMTQuZW50ZXIoImxhYmVsIik7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTQuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBsZXQgdmFsdWUyID0gdHJhY2tlci5tb3ZlKCIhWyIpOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICBzdGF0ZTE0LnNhZmUobm9kZTIuYWx0LCB7IGJlZm9yZTogdmFsdWUyLCBhZnRlcjogIl0iLCAuLi50cmFja2VyLmN1cnJlbnQoKSB9KQogICk7CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiXSgiKTsKICBzdWJleGl0KCk7CiAgaWYgKAogICAgLy8gSWYgdGhlcmXigJlzIG5vIHVybCBidXQgdGhlcmUgaXMgYSB0aXRsZeKApgogICAgIW5vZGUyLnVybCAmJiBub2RlMi50aXRsZSB8fCAvLyBJZiB0aGVyZSBhcmUgY29udHJvbCBjaGFyYWN0ZXJzIG9yIHdoaXRlc3BhY2UuCiAgICAvW1wwLSBcdTAwN0ZdLy50ZXN0KG5vZGUyLnVybCkKICApIHsKICAgIHN1YmV4aXQgPSBzdGF0ZTE0LmVudGVyKCJkZXN0aW5hdGlvbkxpdGVyYWwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIjwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTQuc2FmZShub2RlMi51cmwsIHsgYmVmb3JlOiB2YWx1ZTIsIGFmdGVyOiAiPiIsIC4uLnRyYWNrZXIuY3VycmVudCgpIH0pCiAgICApOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiPiIpOwogIH0gZWxzZSB7CiAgICBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigiZGVzdGluYXRpb25SYXciKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTQuc2FmZShub2RlMi51cmwsIHsKICAgICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgICBhZnRlcjogbm9kZTIudGl0bGUgPyAiICIgOiAiKSIsCiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgICAgfSkKICAgICk7CiAgfQogIHN1YmV4aXQoKTsKICBpZiAobm9kZTIudGl0bGUpIHsKICAgIHN1YmV4aXQgPSBzdGF0ZTE0LmVudGVyKGB0aXRsZSR7c3VmZml4fWApOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiICIgKyBxdW90ZSk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICBzdGF0ZTE0LnNhZmUobm9kZTIudGl0bGUsIHsKICAgICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgICBhZnRlcjogcXVvdGUsCiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgICAgfSkKICAgICk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKHF1b3RlKTsKICAgIHN1YmV4aXQoKTsKICB9CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiKSIpOwogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBpbWFnZVBlZWsoKSB7CiAgcmV0dXJuICIhIjsKfQp2YXIgaW5pdF9pbWFnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbWFnZS5qcyIoKSB7CiAgICBpbml0X2NoZWNrX3F1b3RlKCk7CiAgICBpbWFnZS5wZWVrID0gaW1hZ2VQZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2ltYWdlLXJlZmVyZW5jZS5qcwpmdW5jdGlvbiBpbWFnZVJlZmVyZW5jZShub2RlMiwgXzQsIHN0YXRlMTQsIGluZm8pIHsKICBjb25zdCB0eXBlNSA9IG5vZGUyLnJlZmVyZW5jZVR5cGU7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTE0LmVudGVyKCJpbWFnZVJlZmVyZW5jZSIpOwogIGxldCBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigibGFiZWwiKTsKICBjb25zdCB0cmFja2VyID0gc3RhdGUxNC5jcmVhdGVUcmFja2VyKGluZm8pOwogIGxldCB2YWx1ZTIgPSB0cmFja2VyLm1vdmUoIiFbIik7CiAgY29uc3QgYWx0ID0gc3RhdGUxNC5zYWZlKG5vZGUyLmFsdCwgewogICAgYmVmb3JlOiB2YWx1ZTIsCiAgICBhZnRlcjogIl0iLAogICAgLi4udHJhY2tlci5jdXJyZW50KCkKICB9KTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKGFsdCArICJdWyIpOwogIHN1YmV4aXQoKTsKICBjb25zdCBzdGFjayA9IHN0YXRlMTQuc3RhY2s7CiAgc3RhdGUxNC5zdGFjayA9IFtdOwogIHN1YmV4aXQgPSBzdGF0ZTE0LmVudGVyKCJyZWZlcmVuY2UiKTsKICBjb25zdCByZWZlcmVuY2UgPSBzdGF0ZTE0LnNhZmUoc3RhdGUxNC5hc3NvY2lhdGlvbklkKG5vZGUyKSwgewogICAgYmVmb3JlOiB2YWx1ZTIsCiAgICBhZnRlcjogIl0iLAogICAgLi4udHJhY2tlci5jdXJyZW50KCkKICB9KTsKICBzdWJleGl0KCk7CiAgc3RhdGUxNC5zdGFjayA9IHN0YWNrOwogIGV4aXQzKCk7CiAgaWYgKHR5cGU1ID09PSAiZnVsbCIgfHwgIWFsdCB8fCBhbHQgIT09IHJlZmVyZW5jZSkgewogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZShyZWZlcmVuY2UgKyAiXSIpOwogIH0gZWxzZSBpZiAodHlwZTUgPT09ICJzaG9ydGN1dCIpIHsKICAgIHZhbHVlMiA9IHZhbHVlMi5zbGljZSgwLCAtMSk7CiAgfSBlbHNlIHsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIl0iKTsKICB9CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBpbWFnZVJlZmVyZW5jZVBlZWsoKSB7CiAgcmV0dXJuICIhIjsKfQp2YXIgaW5pdF9pbWFnZV9yZWZlcmVuY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaW1hZ2UtcmVmZXJlbmNlLmpzIigpIHsKICAgIGltYWdlUmVmZXJlbmNlLnBlZWsgPSBpbWFnZVJlZmVyZW5jZVBlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaW5saW5lLWNvZGUuanMKZnVuY3Rpb24gaW5saW5lQ29kZShub2RlMiwgXzQsIHN0YXRlMTQpIHsKICBsZXQgdmFsdWUyID0gbm9kZTIudmFsdWUgfHwgIiI7CiAgbGV0IHNlcXVlbmNlID0gImAiOwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAobmV3IFJlZ0V4cCgiKF58W15gXSkiICsgc2VxdWVuY2UgKyAiKFteYF18JCkiKS50ZXN0KHZhbHVlMikpIHsKICAgIHNlcXVlbmNlICs9ICJgIjsKICB9CiAgaWYgKC9bXiBcclxuXS8udGVzdCh2YWx1ZTIpICYmICgvXlsgXHJcbl0vLnRlc3QodmFsdWUyKSAmJiAvWyBcclxuXSQvLnRlc3QodmFsdWUyKSB8fCAvXmB8YCQvLnRlc3QodmFsdWUyKSkpIHsKICAgIHZhbHVlMiA9ICIgIiArIHZhbHVlMiArICIgIjsKICB9CiAgd2hpbGUgKCsraW5kZXgyIDwgc3RhdGUxNC51bnNhZmUubGVuZ3RoKSB7CiAgICBjb25zdCBwYXR0ZXJuID0gc3RhdGUxNC51bnNhZmVbaW5kZXgyXTsKICAgIGNvbnN0IGV4cHJlc3Npb24gPSBzdGF0ZTE0LmNvbXBpbGVQYXR0ZXJuKHBhdHRlcm4pOwogICAgbGV0IG1hdGNoMjsKICAgIGlmICghcGF0dGVybi5hdEJyZWFrKSBjb250aW51ZTsKICAgIHdoaWxlIChtYXRjaDIgPSBleHByZXNzaW9uLmV4ZWModmFsdWUyKSkgewogICAgICBsZXQgcG9zaXRpb24zID0gbWF0Y2gyLmluZGV4OwogICAgICBpZiAodmFsdWUyLmNoYXJDb2RlQXQocG9zaXRpb24zKSA9PT0gMTAgJiYgdmFsdWUyLmNoYXJDb2RlQXQocG9zaXRpb24zIC0gMSkgPT09IDEzKSB7CiAgICAgICAgcG9zaXRpb24zLS07CiAgICAgIH0KICAgICAgdmFsdWUyID0gdmFsdWUyLnNsaWNlKDAsIHBvc2l0aW9uMykgKyAiICIgKyB2YWx1ZTIuc2xpY2UobWF0Y2gyLmluZGV4ICsgMSk7CiAgICB9CiAgfQogIHJldHVybiBzZXF1ZW5jZSArIHZhbHVlMiArIHNlcXVlbmNlOwp9CmZ1bmN0aW9uIGlubGluZUNvZGVQZWVrKCkgewogIHJldHVybiAiYCI7Cn0KdmFyIGluaXRfaW5saW5lX2NvZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaW5saW5lLWNvZGUuanMiKCkgewogICAgaW5saW5lQ29kZS5wZWVrID0gaW5saW5lQ29kZVBlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2Zvcm1hdC1saW5rLWFzLWF1dG9saW5rLmpzCmZ1bmN0aW9uIGZvcm1hdExpbmtBc0F1dG9saW5rKG5vZGUyLCBzdGF0ZTE0KSB7CiAgY29uc3QgcmF3MiA9IHRvU3RyaW5nKG5vZGUyKTsKICByZXR1cm4gQm9vbGVhbigKICAgICFzdGF0ZTE0Lm9wdGlvbnMucmVzb3VyY2VMaW5rICYmIC8vIElmIHRoZXJl4oCZcyBhIHVybOKApgogICAgbm9kZTIudXJsICYmIC8vIEFuZCB0aGVyZeKAmXMgYSBubyB0aXRsZeKApgogICAgIW5vZGUyLnRpdGxlICYmIC8vIEFuZCB0aGUgY29udGVudCBvZiBgbm9kZWAgaXMgYSBzaW5nbGUgdGV4dCBub2Rl4oCmCiAgICBub2RlMi5jaGlsZHJlbiAmJiBub2RlMi5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgbm9kZTIuY2hpbGRyZW5bMF0udHlwZSA9PT0gInRleHQiICYmIC8vIEFuZCBpZiB0aGUgdXJsIGlzIHRoZSBzYW1lIGFzIHRoZSBjb250ZW504oCmCiAgICAocmF3MiA9PT0gbm9kZTIudXJsIHx8ICJtYWlsdG86IiArIHJhdzIgPT09IG5vZGUyLnVybCkgJiYgLy8gQW5kIHRoYXQgc3RhcnRzIHcvIGEgcHJvdG9jb2zigKYKICAgIC9eW2Etel1bYS16Ky4tXSs6L2kudGVzdChub2RlMi51cmwpICYmIC8vIEFuZCB0aGF0IGRvZXNu4oCZdCBjb250YWluIEFTQ0lJIGNvbnRyb2wgY29kZXMgKGNoYXJhY3RlciBlc2NhcGVzIGFuZAogICAgLy8gcmVmZXJlbmNlcyBkb27igJl0IHdvcmspLCBzcGFjZSwgb3IgYW5nbGUgYnJhY2tldHPigKYKICAgICEvW1wwLSA8Plx1MDA3Rl0vLnRlc3Qobm9kZTIudXJsKQogICk7Cn0KdmFyIGluaXRfZm9ybWF0X2xpbmtfYXNfYXV0b2xpbmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2Zvcm1hdC1saW5rLWFzLWF1dG9saW5rLmpzIigpIHsKICAgIGluaXRfbWRhc3RfdXRpbF90b19zdHJpbmcoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saW5rLmpzCmZ1bmN0aW9uIGxpbmsobm9kZTIsIF80LCBzdGF0ZTE0LCBpbmZvKSB7CiAgY29uc3QgcXVvdGUgPSBjaGVja1F1b3RlKHN0YXRlMTQpOwogIGNvbnN0IHN1ZmZpeCA9IHF1b3RlID09PSAnIicgPyAiUXVvdGUiIDogIkFwb3N0cm9waGUiOwogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTE0LmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgbGV0IGV4aXQzOwogIGxldCBzdWJleGl0OwogIGlmIChmb3JtYXRMaW5rQXNBdXRvbGluayhub2RlMiwgc3RhdGUxNCkpIHsKICAgIGNvbnN0IHN0YWNrID0gc3RhdGUxNC5zdGFjazsKICAgIHN0YXRlMTQuc3RhY2sgPSBbXTsKICAgIGV4aXQzID0gc3RhdGUxNC5lbnRlcigiYXV0b2xpbmsiKTsKICAgIGxldCB2YWx1ZTMgPSB0cmFja2VyLm1vdmUoIjwiKTsKICAgIHZhbHVlMyArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTQuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIHsKICAgICAgICBiZWZvcmU6IHZhbHVlMywKICAgICAgICBhZnRlcjogIj4iLAogICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICAgIH0pCiAgICApOwogICAgdmFsdWUzICs9IHRyYWNrZXIubW92ZSgiPiIpOwogICAgZXhpdDMoKTsKICAgIHN0YXRlMTQuc3RhY2sgPSBzdGFjazsKICAgIHJldHVybiB2YWx1ZTM7CiAgfQogIGV4aXQzID0gc3RhdGUxNC5lbnRlcigibGluayIpOwogIHN1YmV4aXQgPSBzdGF0ZTE0LmVudGVyKCJsYWJlbCIpOwogIGxldCB2YWx1ZTIgPSB0cmFja2VyLm1vdmUoIlsiKTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgc3RhdGUxNC5jb250YWluZXJQaHJhc2luZyhub2RlMiwgewogICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgYWZ0ZXI6ICJdKCIsCiAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICB9KQogICk7CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiXSgiKTsKICBzdWJleGl0KCk7CiAgaWYgKAogICAgLy8gSWYgdGhlcmXigJlzIG5vIHVybCBidXQgdGhlcmUgaXMgYSB0aXRsZeKApgogICAgIW5vZGUyLnVybCAmJiBub2RlMi50aXRsZSB8fCAvLyBJZiB0aGVyZSBhcmUgY29udHJvbCBjaGFyYWN0ZXJzIG9yIHdoaXRlc3BhY2UuCiAgICAvW1wwLSBcdTAwN0ZdLy50ZXN0KG5vZGUyLnVybCkKICApIHsKICAgIHN1YmV4aXQgPSBzdGF0ZTE0LmVudGVyKCJkZXN0aW5hdGlvbkxpdGVyYWwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIjwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTQuc2FmZShub2RlMi51cmwsIHsgYmVmb3JlOiB2YWx1ZTIsIGFmdGVyOiAiPiIsIC4uLnRyYWNrZXIuY3VycmVudCgpIH0pCiAgICApOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiPiIpOwogIH0gZWxzZSB7CiAgICBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigiZGVzdGluYXRpb25SYXciKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTQuc2FmZShub2RlMi51cmwsIHsKICAgICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgICBhZnRlcjogbm9kZTIudGl0bGUgPyAiICIgOiAiKSIsCiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgICAgfSkKICAgICk7CiAgfQogIHN1YmV4aXQoKTsKICBpZiAobm9kZTIudGl0bGUpIHsKICAgIHN1YmV4aXQgPSBzdGF0ZTE0LmVudGVyKGB0aXRsZSR7c3VmZml4fWApOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiICIgKyBxdW90ZSk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICBzdGF0ZTE0LnNhZmUobm9kZTIudGl0bGUsIHsKICAgICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgICBhZnRlcjogcXVvdGUsCiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgICAgfSkKICAgICk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKHF1b3RlKTsKICAgIHN1YmV4aXQoKTsKICB9CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiKSIpOwogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBsaW5rUGVlayhub2RlMiwgXzQsIHN0YXRlMTQpIHsKICByZXR1cm4gZm9ybWF0TGlua0FzQXV0b2xpbmsobm9kZTIsIHN0YXRlMTQpID8gIjwiIDogIlsiOwp9CnZhciBpbml0X2xpbmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvbGluay5qcyIoKSB7CiAgICBpbml0X2NoZWNrX3F1b3RlKCk7CiAgICBpbml0X2Zvcm1hdF9saW5rX2FzX2F1dG9saW5rKCk7CiAgICBsaW5rLnBlZWsgPSBsaW5rUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saW5rLXJlZmVyZW5jZS5qcwpmdW5jdGlvbiBsaW5rUmVmZXJlbmNlKG5vZGUyLCBfNCwgc3RhdGUxNCwgaW5mbykgewogIGNvbnN0IHR5cGU1ID0gbm9kZTIucmVmZXJlbmNlVHlwZTsKICBjb25zdCBleGl0MyA9IHN0YXRlMTQuZW50ZXIoImxpbmtSZWZlcmVuY2UiKTsKICBsZXQgc3ViZXhpdCA9IHN0YXRlMTQuZW50ZXIoImxhYmVsIik7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTQuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBsZXQgdmFsdWUyID0gdHJhY2tlci5tb3ZlKCJbIik7CiAgY29uc3QgdGV4dDkgPSBzdGF0ZTE0LmNvbnRhaW5lclBocmFzaW5nKG5vZGUyLCB7CiAgICBiZWZvcmU6IHZhbHVlMiwKICAgIGFmdGVyOiAiXSIsCiAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogIH0pOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUodGV4dDkgKyAiXVsiKTsKICBzdWJleGl0KCk7CiAgY29uc3Qgc3RhY2sgPSBzdGF0ZTE0LnN0YWNrOwogIHN0YXRlMTQuc3RhY2sgPSBbXTsKICBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigicmVmZXJlbmNlIik7CiAgY29uc3QgcmVmZXJlbmNlID0gc3RhdGUxNC5zYWZlKHN0YXRlMTQuYXNzb2NpYXRpb25JZChub2RlMiksIHsKICAgIGJlZm9yZTogdmFsdWUyLAogICAgYWZ0ZXI6ICJdIiwKICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgfSk7CiAgc3ViZXhpdCgpOwogIHN0YXRlMTQuc3RhY2sgPSBzdGFjazsKICBleGl0MygpOwogIGlmICh0eXBlNSA9PT0gImZ1bGwiIHx8ICF0ZXh0OSB8fCB0ZXh0OSAhPT0gcmVmZXJlbmNlKSB7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKHJlZmVyZW5jZSArICJdIik7CiAgfSBlbHNlIGlmICh0eXBlNSA9PT0gInNob3J0Y3V0IikgewogICAgdmFsdWUyID0gdmFsdWUyLnNsaWNlKDAsIC0xKTsKICB9IGVsc2UgewogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiXSIpOwogIH0KICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIGxpbmtSZWZlcmVuY2VQZWVrKCkgewogIHJldHVybiAiWyI7Cn0KdmFyIGluaXRfbGlua19yZWZlcmVuY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvbGluay1yZWZlcmVuY2UuanMiKCkgewogICAgbGlua1JlZmVyZW5jZS5wZWVrID0gbGlua1JlZmVyZW5jZVBlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWJ1bGxldC5qcwpmdW5jdGlvbiBjaGVja0J1bGxldChzdGF0ZTE0KSB7CiAgY29uc3QgbWFya2VyID0gc3RhdGUxNC5vcHRpb25zLmJ1bGxldCB8fCAiKiI7CiAgaWYgKG1hcmtlciAhPT0gIioiICYmIG1hcmtlciAhPT0gIisiICYmIG1hcmtlciAhPT0gIi0iKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3Qgc2VyaWFsaXplIGl0ZW1zIHdpdGggYCIgKyBtYXJrZXIgKyAiYCBmb3IgYG9wdGlvbnMuYnVsbGV0YCwgZXhwZWN0ZWQgYCpgLCBgK2AsIG9yIGAtYCIKICAgICk7CiAgfQogIHJldHVybiBtYXJrZXI7Cn0KdmFyIGluaXRfY2hlY2tfYnVsbGV0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1idWxsZXQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1idWxsZXQtb3RoZXIuanMKZnVuY3Rpb24gY2hlY2tCdWxsZXRPdGhlcihzdGF0ZTE0KSB7CiAgY29uc3QgYnVsbGV0ID0gY2hlY2tCdWxsZXQoc3RhdGUxNCk7CiAgY29uc3QgYnVsbGV0T3RoZXIgPSBzdGF0ZTE0Lm9wdGlvbnMuYnVsbGV0T3RoZXI7CiAgaWYgKCFidWxsZXRPdGhlcikgewogICAgcmV0dXJuIGJ1bGxldCA9PT0gIioiID8gIi0iIDogIioiOwogIH0KICBpZiAoYnVsbGV0T3RoZXIgIT09ICIqIiAmJiBidWxsZXRPdGhlciAhPT0gIisiICYmIGJ1bGxldE90aGVyICE9PSAiLSIpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgaXRlbXMgd2l0aCBgIiArIGJ1bGxldE90aGVyICsgImAgZm9yIGBvcHRpb25zLmJ1bGxldE90aGVyYCwgZXhwZWN0ZWQgYCpgLCBgK2AsIG9yIGAtYCIKICAgICk7CiAgfQogIGlmIChidWxsZXRPdGhlciA9PT0gYnVsbGV0KSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJFeHBlY3RlZCBgYnVsbGV0YCAoYCIgKyBidWxsZXQgKyAiYCkgYW5kIGBidWxsZXRPdGhlcmAgKGAiICsgYnVsbGV0T3RoZXIgKyAiYCkgdG8gYmUgZGlmZmVyZW50IgogICAgKTsKICB9CiAgcmV0dXJuIGJ1bGxldE90aGVyOwp9CnZhciBpbml0X2NoZWNrX2J1bGxldF9vdGhlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stYnVsbGV0LW90aGVyLmpzIigpIHsKICAgIGluaXRfY2hlY2tfYnVsbGV0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWJ1bGxldC1vcmRlcmVkLmpzCmZ1bmN0aW9uIGNoZWNrQnVsbGV0T3JkZXJlZChzdGF0ZTE0KSB7CiAgY29uc3QgbWFya2VyID0gc3RhdGUxNC5vcHRpb25zLmJ1bGxldE9yZGVyZWQgfHwgIi4iOwogIGlmIChtYXJrZXIgIT09ICIuIiAmJiBtYXJrZXIgIT09ICIpIikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiQ2Fubm90IHNlcmlhbGl6ZSBpdGVtcyB3aXRoIGAiICsgbWFya2VyICsgImAgZm9yIGBvcHRpb25zLmJ1bGxldE9yZGVyZWRgLCBleHBlY3RlZCBgLmAgb3IgYClgIgogICAgKTsKICB9CiAgcmV0dXJuIG1hcmtlcjsKfQp2YXIgaW5pdF9jaGVja19idWxsZXRfb3JkZXJlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stYnVsbGV0LW9yZGVyZWQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1ydWxlLmpzCmZ1bmN0aW9uIGNoZWNrUnVsZShzdGF0ZTE0KSB7CiAgY29uc3QgbWFya2VyID0gc3RhdGUxNC5vcHRpb25zLnJ1bGUgfHwgIioiOwogIGlmIChtYXJrZXIgIT09ICIqIiAmJiBtYXJrZXIgIT09ICItIiAmJiBtYXJrZXIgIT09ICJfIikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiQ2Fubm90IHNlcmlhbGl6ZSBydWxlcyB3aXRoIGAiICsgbWFya2VyICsgImAgZm9yIGBvcHRpb25zLnJ1bGVgLCBleHBlY3RlZCBgKmAsIGAtYCwgb3IgYF9gIgogICAgKTsKICB9CiAgcmV0dXJuIG1hcmtlcjsKfQp2YXIgaW5pdF9jaGVja19ydWxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1ydWxlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saXN0LmpzCmZ1bmN0aW9uIGxpc3QyKG5vZGUyLCBwYXJlbnQsIHN0YXRlMTQsIGluZm8pIHsKICBjb25zdCBleGl0MyA9IHN0YXRlMTQuZW50ZXIoImxpc3QiKTsKICBjb25zdCBidWxsZXRDdXJyZW50ID0gc3RhdGUxNC5idWxsZXRDdXJyZW50OwogIGxldCBidWxsZXQgPSBub2RlMi5vcmRlcmVkID8gY2hlY2tCdWxsZXRPcmRlcmVkKHN0YXRlMTQpIDogY2hlY2tCdWxsZXQoc3RhdGUxNCk7CiAgY29uc3QgYnVsbGV0T3RoZXIgPSBub2RlMi5vcmRlcmVkID8gYnVsbGV0ID09PSAiLiIgPyAiKSIgOiAiLiIgOiBjaGVja0J1bGxldE90aGVyKHN0YXRlMTQpOwogIGxldCB1c2VEaWZmZXJlbnRNYXJrZXIgPSBwYXJlbnQgJiYgc3RhdGUxNC5idWxsZXRMYXN0VXNlZCA/IGJ1bGxldCA9PT0gc3RhdGUxNC5idWxsZXRMYXN0VXNlZCA6IGZhbHNlOwogIGlmICghbm9kZTIub3JkZXJlZCkgewogICAgY29uc3QgZmlyc3RMaXN0SXRlbSA9IG5vZGUyLmNoaWxkcmVuID8gbm9kZTIuY2hpbGRyZW5bMF0gOiB2b2lkIDA7CiAgICBpZiAoCiAgICAgIC8vIEJ1bGxldCBjb3VsZCBiZSB1c2VkIGFzIGEgdGhlbWF0aWMgYnJlYWsgbWFya2VyOgogICAgICAoYnVsbGV0ID09PSAiKiIgfHwgYnVsbGV0ID09PSAiLSIpICYmIC8vIEVtcHR5IGZpcnN0IGxpc3QgaXRlbToKICAgICAgZmlyc3RMaXN0SXRlbSAmJiAoIWZpcnN0TGlzdEl0ZW0uY2hpbGRyZW4gfHwgIWZpcnN0TGlzdEl0ZW0uY2hpbGRyZW5bMF0pICYmIC8vIERpcmVjdGx5IGluIHR3byBvdGhlciBsaXN0IGl0ZW1zOgogICAgICBzdGF0ZTE0LnN0YWNrW3N0YXRlMTQuc3RhY2subGVuZ3RoIC0gMV0gPT09ICJsaXN0IiAmJiBzdGF0ZTE0LnN0YWNrW3N0YXRlMTQuc3RhY2subGVuZ3RoIC0gMl0gPT09ICJsaXN0SXRlbSIgJiYgc3RhdGUxNC5zdGFja1tzdGF0ZTE0LnN0YWNrLmxlbmd0aCAtIDNdID09PSAibGlzdCIgJiYgc3RhdGUxNC5zdGFja1tzdGF0ZTE0LnN0YWNrLmxlbmd0aCAtIDRdID09PSAibGlzdEl0ZW0iICYmIC8vIFRoYXQgYXJlIGVhY2ggdGhlIGZpcnN0IGNoaWxkLgogICAgICBzdGF0ZTE0LmluZGV4U3RhY2tbc3RhdGUxNC5pbmRleFN0YWNrLmxlbmd0aCAtIDFdID09PSAwICYmIHN0YXRlMTQuaW5kZXhTdGFja1tzdGF0ZTE0LmluZGV4U3RhY2subGVuZ3RoIC0gMl0gPT09IDAgJiYgc3RhdGUxNC5pbmRleFN0YWNrW3N0YXRlMTQuaW5kZXhTdGFjay5sZW5ndGggLSAzXSA9PT0gMAogICAgKSB7CiAgICAgIHVzZURpZmZlcmVudE1hcmtlciA9IHRydWU7CiAgICB9CiAgICBpZiAoY2hlY2tSdWxlKHN0YXRlMTQpID09PSBidWxsZXQgJiYgZmlyc3RMaXN0SXRlbSkgewogICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IG5vZGUyLmNoaWxkcmVuLmxlbmd0aCkgewogICAgICAgIGNvbnN0IGl0ZW0gPSBub2RlMi5jaGlsZHJlbltpbmRleDJdOwogICAgICAgIGlmIChpdGVtICYmIGl0ZW0udHlwZSA9PT0gImxpc3RJdGVtIiAmJiBpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW5bMF0gJiYgaXRlbS5jaGlsZHJlblswXS50eXBlID09PSAidGhlbWF0aWNCcmVhayIpIHsKICAgICAgICAgIHVzZURpZmZlcmVudE1hcmtlciA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKHVzZURpZmZlcmVudE1hcmtlcikgewogICAgYnVsbGV0ID0gYnVsbGV0T3RoZXI7CiAgfQogIHN0YXRlMTQuYnVsbGV0Q3VycmVudCA9IGJ1bGxldDsKICBjb25zdCB2YWx1ZTIgPSBzdGF0ZTE0LmNvbnRhaW5lckZsb3cobm9kZTIsIGluZm8pOwogIHN0YXRlMTQuYnVsbGV0TGFzdFVzZWQgPSBidWxsZXQ7CiAgc3RhdGUxNC5idWxsZXRDdXJyZW50ID0gYnVsbGV0Q3VycmVudDsKICBleGl0MygpOwogIHJldHVybiB2YWx1ZTI7Cn0KdmFyIGluaXRfbGlzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saXN0LmpzIigpIHsKICAgIGluaXRfY2hlY2tfYnVsbGV0KCk7CiAgICBpbml0X2NoZWNrX2J1bGxldF9vdGhlcigpOwogICAgaW5pdF9jaGVja19idWxsZXRfb3JkZXJlZCgpOwogICAgaW5pdF9jaGVja19ydWxlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWxpc3QtaXRlbS1pbmRlbnQuanMKZnVuY3Rpb24gY2hlY2tMaXN0SXRlbUluZGVudChzdGF0ZTE0KSB7CiAgY29uc3Qgc3R5bGUgPSBzdGF0ZTE0Lm9wdGlvbnMubGlzdEl0ZW1JbmRlbnQgfHwgIm9uZSI7CiAgaWYgKHN0eWxlICE9PSAidGFiIiAmJiBzdHlsZSAhPT0gIm9uZSIgJiYgc3R5bGUgIT09ICJtaXhlZCIpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgaXRlbXMgd2l0aCBgIiArIHN0eWxlICsgImAgZm9yIGBvcHRpb25zLmxpc3RJdGVtSW5kZW50YCwgZXhwZWN0ZWQgYHRhYmAsIGBvbmVgLCBvciBgbWl4ZWRgIgogICAgKTsKICB9CiAgcmV0dXJuIHN0eWxlOwp9CnZhciBpbml0X2NoZWNrX2xpc3RfaXRlbV9pbmRlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWxpc3QtaXRlbS1pbmRlbnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2xpc3QtaXRlbS5qcwpmdW5jdGlvbiBsaXN0SXRlbShub2RlMiwgcGFyZW50LCBzdGF0ZTE0LCBpbmZvKSB7CiAgY29uc3QgbGlzdEl0ZW1JbmRlbnQgPSBjaGVja0xpc3RJdGVtSW5kZW50KHN0YXRlMTQpOwogIGxldCBidWxsZXQgPSBzdGF0ZTE0LmJ1bGxldEN1cnJlbnQgfHwgY2hlY2tCdWxsZXQoc3RhdGUxNCk7CiAgaWYgKHBhcmVudCAmJiBwYXJlbnQudHlwZSA9PT0gImxpc3QiICYmIHBhcmVudC5vcmRlcmVkKSB7CiAgICBidWxsZXQgPSAodHlwZW9mIHBhcmVudC5zdGFydCA9PT0gIm51bWJlciIgJiYgcGFyZW50LnN0YXJ0ID4gLTEgPyBwYXJlbnQuc3RhcnQgOiAxKSArIChzdGF0ZTE0Lm9wdGlvbnMuaW5jcmVtZW50TGlzdE1hcmtlciA9PT0gZmFsc2UgPyAwIDogcGFyZW50LmNoaWxkcmVuLmluZGV4T2Yobm9kZTIpKSArIGJ1bGxldDsKICB9CiAgbGV0IHNpemUgPSBidWxsZXQubGVuZ3RoICsgMTsKICBpZiAobGlzdEl0ZW1JbmRlbnQgPT09ICJ0YWIiIHx8IGxpc3RJdGVtSW5kZW50ID09PSAibWl4ZWQiICYmIChwYXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICJsaXN0IiAmJiBwYXJlbnQuc3ByZWFkIHx8IG5vZGUyLnNwcmVhZCkpIHsKICAgIHNpemUgPSBNYXRoLmNlaWwoc2l6ZSAvIDQpICogNDsKICB9CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTQuY3JlYXRlVHJhY2tlcihpbmZvKTsKICB0cmFja2VyLm1vdmUoYnVsbGV0ICsgIiAiLnJlcGVhdChzaXplIC0gYnVsbGV0Lmxlbmd0aCkpOwogIHRyYWNrZXIuc2hpZnQoc2l6ZSk7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTE0LmVudGVyKCJsaXN0SXRlbSIpOwogIGNvbnN0IHZhbHVlMiA9IHN0YXRlMTQuaW5kZW50TGluZXMoCiAgICBzdGF0ZTE0LmNvbnRhaW5lckZsb3cobm9kZTIsIHRyYWNrZXIuY3VycmVudCgpKSwKICAgIG1hcDcKICApOwogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKICBmdW5jdGlvbiBtYXA3KGxpbmUsIGluZGV4MiwgYmxhbmspIHsKICAgIGlmIChpbmRleDIpIHsKICAgICAgcmV0dXJuIChibGFuayA/ICIiIDogIiAiLnJlcGVhdChzaXplKSkgKyBsaW5lOwogICAgfQogICAgcmV0dXJuIChibGFuayA/IGJ1bGxldCA6IGJ1bGxldCArICIgIi5yZXBlYXQoc2l6ZSAtIGJ1bGxldC5sZW5ndGgpKSArIGxpbmU7CiAgfQp9CnZhciBpbml0X2xpc3RfaXRlbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saXN0LWl0ZW0uanMiKCkgewogICAgaW5pdF9jaGVja19idWxsZXQoKTsKICAgIGluaXRfY2hlY2tfbGlzdF9pdGVtX2luZGVudCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL3BhcmFncmFwaC5qcwpmdW5jdGlvbiBwYXJhZ3JhcGgobm9kZTIsIF80LCBzdGF0ZTE0LCBpbmZvKSB7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTE0LmVudGVyKCJwYXJhZ3JhcGgiKTsKICBjb25zdCBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigicGhyYXNpbmciKTsKICBjb25zdCB2YWx1ZTIgPSBzdGF0ZTE0LmNvbnRhaW5lclBocmFzaW5nKG5vZGUyLCBpbmZvKTsKICBzdWJleGl0KCk7CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwp9CnZhciBpbml0X3BhcmFncmFwaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9wYXJhZ3JhcGguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1waHJhc2luZ0A0LjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1waHJhc2luZy9saWIvaW5kZXguanMKdmFyIHBocmFzaW5nOwp2YXIgaW5pdF9saWIxNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtcGhyYXNpbmdANC4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtcGhyYXNpbmcvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfdW5pc3RfdXRpbF9pcygpOwogICAgcGhyYXNpbmcgPSAvKiogQHR5cGUgeyhub2RlPzogdW5rbm93bikgPT4gbm9kZSBpcyBFeGNsdWRlPFBocmFzaW5nQ29udGVudCwgSHRtbD59ICovCiAgICBjb252ZXJ0KFsKICAgICAgImJyZWFrIiwKICAgICAgImRlbGV0ZSIsCiAgICAgICJlbXBoYXNpcyIsCiAgICAgIC8vIFRvIGRvOiBuZXh0IG1ham9yOiByZW1vdmVkIHNpbmNlIGZvb3Rub3RlcyB3ZXJlIGFkZGVkIHRvIEdGTS4KICAgICAgImZvb3Rub3RlIiwKICAgICAgImZvb3Rub3RlUmVmZXJlbmNlIiwKICAgICAgImltYWdlIiwKICAgICAgImltYWdlUmVmZXJlbmNlIiwKICAgICAgImlubGluZUNvZGUiLAogICAgICAvLyBFbmFibGVkIGJ5IGBtZGFzdC11dGlsLW1hdGhgOgogICAgICAiaW5saW5lTWF0aCIsCiAgICAgICJsaW5rIiwKICAgICAgImxpbmtSZWZlcmVuY2UiLAogICAgICAvLyBFbmFibGVkIGJ5IGBtZGFzdC11dGlsLW1keGA6CiAgICAgICJtZHhKc3hUZXh0RWxlbWVudCIsCiAgICAgIC8vIEVuYWJsZWQgYnkgYG1kYXN0LXV0aWwtbWR4YDoKICAgICAgIm1keFRleHRFeHByZXNzaW9uIiwKICAgICAgInN0cm9uZyIsCiAgICAgICJ0ZXh0IiwKICAgICAgLy8gRW5hYmxlZCBieSBgbWRhc3QtdXRpbC1kaXJlY3RpdmVgOgogICAgICAidGV4dERpcmVjdGl2ZSIKICAgIF0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1waHJhc2luZ0A0LjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1waHJhc2luZy9pbmRleC5qcwp2YXIgaW5pdF9tZGFzdF91dGlsX3BocmFzaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1waHJhc2luZ0A0LjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1waHJhc2luZy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjE0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvcm9vdC5qcwpmdW5jdGlvbiByb290KG5vZGUyLCBfNCwgc3RhdGUxNCwgaW5mbykgewogIGNvbnN0IGhhc1BocmFzaW5nID0gbm9kZTIuY2hpbGRyZW4uc29tZShmdW5jdGlvbihkNikgewogICAgcmV0dXJuIHBocmFzaW5nKGQ2KTsKICB9KTsKICBjb25zdCBjb250YWluZXIgPSBoYXNQaHJhc2luZyA/IHN0YXRlMTQuY29udGFpbmVyUGhyYXNpbmcgOiBzdGF0ZTE0LmNvbnRhaW5lckZsb3c7CiAgcmV0dXJuIGNvbnRhaW5lci5jYWxsKHN0YXRlMTQsIG5vZGUyLCBpbmZvKTsKfQp2YXIgaW5pdF9yb290ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL3Jvb3QuanMiKCkgewogICAgaW5pdF9tZGFzdF91dGlsX3BocmFzaW5nKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLXN0cm9uZy5qcwpmdW5jdGlvbiBjaGVja1N0cm9uZyhzdGF0ZTE0KSB7CiAgY29uc3QgbWFya2VyID0gc3RhdGUxNC5vcHRpb25zLnN0cm9uZyB8fCAiKiI7CiAgaWYgKG1hcmtlciAhPT0gIioiICYmIG1hcmtlciAhPT0gIl8iKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3Qgc2VyaWFsaXplIHN0cm9uZyB3aXRoIGAiICsgbWFya2VyICsgImAgZm9yIGBvcHRpb25zLnN0cm9uZ2AsIGV4cGVjdGVkIGAqYCwgb3IgYF9gIgogICAgKTsKICB9CiAgcmV0dXJuIG1hcmtlcjsKfQp2YXIgaW5pdF9jaGVja19zdHJvbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLXN0cm9uZy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvc3Ryb25nLmpzCmZ1bmN0aW9uIHN0cm9uZyhub2RlMiwgXzQsIHN0YXRlMTQsIGluZm8pIHsKICBjb25zdCBtYXJrZXIgPSBjaGVja1N0cm9uZyhzdGF0ZTE0KTsKICBjb25zdCBleGl0MyA9IHN0YXRlMTQuZW50ZXIoInN0cm9uZyIpOwogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTE0LmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgY29uc3QgYmVmb3JlID0gdHJhY2tlci5tb3ZlKG1hcmtlciArIG1hcmtlcik7CiAgbGV0IGJldHdlZW4yID0gdHJhY2tlci5tb3ZlKAogICAgc3RhdGUxNC5jb250YWluZXJQaHJhc2luZyhub2RlMiwgewogICAgICBhZnRlcjogbWFya2VyLAogICAgICBiZWZvcmUsCiAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICB9KQogICk7CiAgY29uc3QgYmV0d2VlbkhlYWQgPSBiZXR3ZWVuMi5jaGFyQ29kZUF0KDApOwogIGNvbnN0IG9wZW4gPSBlbmNvZGVJbmZvKAogICAgaW5mby5iZWZvcmUuY2hhckNvZGVBdChpbmZvLmJlZm9yZS5sZW5ndGggLSAxKSwKICAgIGJldHdlZW5IZWFkLAogICAgbWFya2VyCiAgKTsKICBpZiAob3Blbi5pbnNpZGUpIHsKICAgIGJldHdlZW4yID0gZW5jb2RlQ2hhcmFjdGVyUmVmZXJlbmNlKGJldHdlZW5IZWFkKSArIGJldHdlZW4yLnNsaWNlKDEpOwogIH0KICBjb25zdCBiZXR3ZWVuVGFpbCA9IGJldHdlZW4yLmNoYXJDb2RlQXQoYmV0d2VlbjIubGVuZ3RoIC0gMSk7CiAgY29uc3QgY2xvc2U3ID0gZW5jb2RlSW5mbyhpbmZvLmFmdGVyLmNoYXJDb2RlQXQoMCksIGJldHdlZW5UYWlsLCBtYXJrZXIpOwogIGlmIChjbG9zZTcuaW5zaWRlKSB7CiAgICBiZXR3ZWVuMiA9IGJldHdlZW4yLnNsaWNlKDAsIC0xKSArIGVuY29kZUNoYXJhY3RlclJlZmVyZW5jZShiZXR3ZWVuVGFpbCk7CiAgfQogIGNvbnN0IGFmdGVyID0gdHJhY2tlci5tb3ZlKG1hcmtlciArIG1hcmtlcik7CiAgZXhpdDMoKTsKICBzdGF0ZTE0LmF0dGVudGlvbkVuY29kZVN1cnJvdW5kaW5nSW5mbyA9IHsKICAgIGFmdGVyOiBjbG9zZTcub3V0c2lkZSwKICAgIGJlZm9yZTogb3Blbi5vdXRzaWRlCiAgfTsKICByZXR1cm4gYmVmb3JlICsgYmV0d2VlbjIgKyBhZnRlcjsKfQpmdW5jdGlvbiBzdHJvbmdQZWVrKF80LCBfMSwgc3RhdGUxNCkgewogIHJldHVybiBzdGF0ZTE0Lm9wdGlvbnMuc3Ryb25nIHx8ICIqIjsKfQp2YXIgaW5pdF9zdHJvbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvc3Ryb25nLmpzIigpIHsKICAgIGluaXRfY2hlY2tfc3Ryb25nKCk7CiAgICBpbml0X2VuY29kZV9jaGFyYWN0ZXJfcmVmZXJlbmNlKCk7CiAgICBpbml0X2VuY29kZV9pbmZvKCk7CiAgICBzdHJvbmcucGVlayA9IHN0cm9uZ1BlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvdGV4dC5qcwpmdW5jdGlvbiB0ZXh0KG5vZGUyLCBfNCwgc3RhdGUxNCwgaW5mbykgewogIHJldHVybiBzdGF0ZTE0LnNhZmUobm9kZTIudmFsdWUsIGluZm8pOwp9CnZhciBpbml0X3RleHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvdGV4dC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLXJ1bGUtcmVwZXRpdGlvbi5qcwpmdW5jdGlvbiBjaGVja1J1bGVSZXBldGl0aW9uKHN0YXRlMTQpIHsKICBjb25zdCByZXBldGl0aW9uID0gc3RhdGUxNC5vcHRpb25zLnJ1bGVSZXBldGl0aW9uIHx8IDM7CiAgaWYgKHJlcGV0aXRpb24gPCAzKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3Qgc2VyaWFsaXplIHJ1bGVzIHdpdGggcmVwZXRpdGlvbiBgIiArIHJlcGV0aXRpb24gKyAiYCBmb3IgYG9wdGlvbnMucnVsZVJlcGV0aXRpb25gLCBleHBlY3RlZCBgM2Agb3IgbW9yZSIKICAgICk7CiAgfQogIHJldHVybiByZXBldGl0aW9uOwp9CnZhciBpbml0X2NoZWNrX3J1bGVfcmVwZXRpdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stcnVsZS1yZXBldGl0aW9uLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS90aGVtYXRpYy1icmVhay5qcwpmdW5jdGlvbiB0aGVtYXRpY0JyZWFrKF80LCBfMSwgc3RhdGUxNCkgewogIGNvbnN0IHZhbHVlMiA9IChjaGVja1J1bGUoc3RhdGUxNCkgKyAoc3RhdGUxNC5vcHRpb25zLnJ1bGVTcGFjZXMgPyAiICIgOiAiIikpLnJlcGVhdChjaGVja1J1bGVSZXBldGl0aW9uKHN0YXRlMTQpKTsKICByZXR1cm4gc3RhdGUxNC5vcHRpb25zLnJ1bGVTcGFjZXMgPyB2YWx1ZTIuc2xpY2UoMCwgLTEpIDogdmFsdWUyOwp9CnZhciBpbml0X3RoZW1hdGljX2JyZWFrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL3RoZW1hdGljLWJyZWFrLmpzIigpIHsKICAgIGluaXRfY2hlY2tfcnVsZV9yZXBldGl0aW9uKCk7CiAgICBpbml0X2NoZWNrX3J1bGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbmRleC5qcwp2YXIgaGFuZGxlOwp2YXIgaW5pdF9oYW5kbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaW5kZXguanMiKCkgewogICAgaW5pdF9ibG9ja3F1b3RlKCk7CiAgICBpbml0X2JyZWFrKCk7CiAgICBpbml0X2NvZGUoKTsKICAgIGluaXRfZGVmaW5pdGlvbigpOwogICAgaW5pdF9lbXBoYXNpcygpOwogICAgaW5pdF9oZWFkaW5nKCk7CiAgICBpbml0X2h0bWwoKTsKICAgIGluaXRfaW1hZ2UoKTsKICAgIGluaXRfaW1hZ2VfcmVmZXJlbmNlKCk7CiAgICBpbml0X2lubGluZV9jb2RlKCk7CiAgICBpbml0X2xpbmsoKTsKICAgIGluaXRfbGlua19yZWZlcmVuY2UoKTsKICAgIGluaXRfbGlzdCgpOwogICAgaW5pdF9saXN0X2l0ZW0oKTsKICAgIGluaXRfcGFyYWdyYXBoKCk7CiAgICBpbml0X3Jvb3QoKTsKICAgIGluaXRfc3Ryb25nKCk7CiAgICBpbml0X3RleHQoKTsKICAgIGluaXRfdGhlbWF0aWNfYnJlYWsoKTsKICAgIGhhbmRsZSA9IHsKICAgICAgYmxvY2txdW90ZSwKICAgICAgYnJlYWs6IGhhcmRCcmVhaywKICAgICAgY29kZSwKICAgICAgZGVmaW5pdGlvbiwKICAgICAgZW1waGFzaXMsCiAgICAgIGhhcmRCcmVhaywKICAgICAgaGVhZGluZywKICAgICAgaHRtbCwKICAgICAgaW1hZ2UsCiAgICAgIGltYWdlUmVmZXJlbmNlLAogICAgICBpbmxpbmVDb2RlLAogICAgICBsaW5rLAogICAgICBsaW5rUmVmZXJlbmNlLAogICAgICBsaXN0OiBsaXN0MiwKICAgICAgbGlzdEl0ZW0sCiAgICAgIHBhcmFncmFwaCwKICAgICAgcm9vdCwKICAgICAgc3Ryb25nLAogICAgICB0ZXh0LAogICAgICB0aGVtYXRpY0JyZWFrCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvam9pbi5qcwpmdW5jdGlvbiBqb2luRGVmYXVsdHMobGVmdCwgcmlnaHQsIHBhcmVudCwgc3RhdGUxNCkgewogIGlmIChyaWdodC50eXBlID09PSAiY29kZSIgJiYgZm9ybWF0Q29kZUFzSW5kZW50ZWQocmlnaHQsIHN0YXRlMTQpICYmIChsZWZ0LnR5cGUgPT09ICJsaXN0IiB8fCBsZWZ0LnR5cGUgPT09IHJpZ2h0LnR5cGUgJiYgZm9ybWF0Q29kZUFzSW5kZW50ZWQobGVmdCwgc3RhdGUxNCkpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGlmICgic3ByZWFkIiBpbiBwYXJlbnQgJiYgdHlwZW9mIHBhcmVudC5zcHJlYWQgPT09ICJib29sZWFuIikgewogICAgaWYgKGxlZnQudHlwZSA9PT0gInBhcmFncmFwaCIgJiYgLy8gVHdvIHBhcmFncmFwaHMuCiAgICAobGVmdC50eXBlID09PSByaWdodC50eXBlIHx8IHJpZ2h0LnR5cGUgPT09ICJkZWZpbml0aW9uIiB8fCAvLyBQYXJhZ3JhcGggZm9sbG93ZWQgYnkgYSBzZXRleHQgaGVhZGluZy4KICAgIHJpZ2h0LnR5cGUgPT09ICJoZWFkaW5nIiAmJiBmb3JtYXRIZWFkaW5nQXNTZXRleHQocmlnaHQsIHN0YXRlMTQpKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICByZXR1cm4gcGFyZW50LnNwcmVhZCA/IDEgOiAwOwogIH0KfQp2YXIgam9pbjI7CnZhciBpbml0X2pvaW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9qb2luLmpzIigpIHsKICAgIGluaXRfZm9ybWF0X2NvZGVfYXNfaW5kZW50ZWQoKTsKICAgIGluaXRfZm9ybWF0X2hlYWRpbmdfYXNfc2V0ZXh0KCk7CiAgICBqb2luMiA9IFtqb2luRGVmYXVsdHNdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdW5zYWZlLmpzCnZhciBmdWxsUGhyYXNpbmdTcGFucywgdW5zYWZlOwp2YXIgaW5pdF91bnNhZmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91bnNhZmUuanMiKCkgewogICAgZnVsbFBocmFzaW5nU3BhbnMgPSBbCiAgICAgICJhdXRvbGluayIsCiAgICAgICJkZXN0aW5hdGlvbkxpdGVyYWwiLAogICAgICAiZGVzdGluYXRpb25SYXciLAogICAgICAicmVmZXJlbmNlIiwKICAgICAgInRpdGxlUXVvdGUiLAogICAgICAidGl0bGVBcG9zdHJvcGhlIgogICAgXTsKICAgIHVuc2FmZSA9IFsKICAgICAgeyBjaGFyYWN0ZXI6ICIJIiwgYWZ0ZXI6ICJbXFxyXFxuXSIsIGluQ29uc3RydWN0OiAicGhyYXNpbmciIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiCSIsIGJlZm9yZTogIltcXHJcXG5dIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIgfSwKICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIgkiLAogICAgICAgIGluQ29uc3RydWN0OiBbImNvZGVGZW5jZWRMYW5nR3JhdmVBY2NlbnQiLCAiY29kZUZlbmNlZExhbmdUaWxkZSJdCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBjaGFyYWN0ZXI6ICJcciIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6IFsKICAgICAgICAgICJjb2RlRmVuY2VkTGFuZ0dyYXZlQWNjZW50IiwKICAgICAgICAgICJjb2RlRmVuY2VkTGFuZ1RpbGRlIiwKICAgICAgICAgICJjb2RlRmVuY2VkTWV0YUdyYXZlQWNjZW50IiwKICAgICAgICAgICJjb2RlRmVuY2VkTWV0YVRpbGRlIiwKICAgICAgICAgICJkZXN0aW5hdGlvbkxpdGVyYWwiLAogICAgICAgICAgImhlYWRpbmdBdHgiCiAgICAgICAgXQogICAgICB9LAogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiXG4iLAogICAgICAgIGluQ29uc3RydWN0OiBbCiAgICAgICAgICAiY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCIsCiAgICAgICAgICAiY29kZUZlbmNlZExhbmdUaWxkZSIsCiAgICAgICAgICAiY29kZUZlbmNlZE1ldGFHcmF2ZUFjY2VudCIsCiAgICAgICAgICAiY29kZUZlbmNlZE1ldGFUaWxkZSIsCiAgICAgICAgICAiZGVzdGluYXRpb25MaXRlcmFsIiwKICAgICAgICAgICJoZWFkaW5nQXR4IgogICAgICAgIF0KICAgICAgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICIgIiwgYWZ0ZXI6ICJbXFxyXFxuXSIsIGluQ29uc3RydWN0OiAicGhyYXNpbmciIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiICIsIGJlZm9yZTogIltcXHJcXG5dIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIgfSwKICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIiAiLAogICAgICAgIGluQ29uc3RydWN0OiBbImNvZGVGZW5jZWRMYW5nR3JhdmVBY2NlbnQiLCAiY29kZUZlbmNlZExhbmdUaWxkZSJdCiAgICAgIH0sCiAgICAgIC8vIEFuIGV4Y2xhbWF0aW9uIG1hcmsgY2FuIHN0YXJ0IGFuIGltYWdlLCBpZiBpdCBpcyBmb2xsb3dlZCBieSBhIGxpbmsgb3IKICAgICAgLy8gYSBsaW5rIHJlZmVyZW5jZS4KICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIiEiLAogICAgICAgIGFmdGVyOiAiXFxbIiwKICAgICAgICBpbkNvbnN0cnVjdDogInBocmFzaW5nIiwKICAgICAgICBub3RJbkNvbnN0cnVjdDogZnVsbFBocmFzaW5nU3BhbnMKICAgICAgfSwKICAgICAgLy8gQSBxdW90ZSBjYW4gYnJlYWsgb3V0IG9mIGEgdGl0bGUuCiAgICAgIHsgY2hhcmFjdGVyOiAnIicsIGluQ29uc3RydWN0OiAidGl0bGVRdW90ZSIgfSwKICAgICAgLy8gQSBudW1iZXIgc2lnbiBjb3VsZCBzdGFydCBhbiBBVFggaGVhZGluZyBpZiBpdCBzdGFydHMgYSBsaW5lLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIiMiIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiIyIsIGluQ29uc3RydWN0OiAiaGVhZGluZ0F0eCIsIGFmdGVyOiAiKD86W1xyXG5dfCQpIiB9LAogICAgICAvLyBEb2xsYXIgc2lnbiBhbmQgcGVyY2VudGFnZSBhcmUgbm90IHVzZWQgaW4gbWFya2Rvd24uCiAgICAgIC8vIEFuIGFtcGVyc2FuZCBjb3VsZCBzdGFydCBhIGNoYXJhY3RlciByZWZlcmVuY2UuCiAgICAgIHsgY2hhcmFjdGVyOiAiJiIsIGFmdGVyOiAiWyNBLVphLXpdIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIgfSwKICAgICAgLy8gQW4gYXBvc3Ryb3BoZSBjYW4gYnJlYWsgb3V0IG9mIGEgdGl0bGUuCiAgICAgIHsgY2hhcmFjdGVyOiAiJyIsIGluQ29uc3RydWN0OiAidGl0bGVBcG9zdHJvcGhlIiB9LAogICAgICAvLyBBIGxlZnQgcGFyZW4gY291bGQgYnJlYWsgb3V0IG9mIGEgZGVzdGluYXRpb24gcmF3LgogICAgICB7IGNoYXJhY3RlcjogIigiLCBpbkNvbnN0cnVjdDogImRlc3RpbmF0aW9uUmF3IiB9LAogICAgICAvLyBBIGxlZnQgcGFyZW4gZm9sbG93ZWQgYnkgYF1gIGNvdWxkIG1ha2Ugc29tZXRoaW5nIGludG8gYSBsaW5rIG9yIGltYWdlLgogICAgICB7CiAgICAgICAgYmVmb3JlOiAiXFxdIiwKICAgICAgICBjaGFyYWN0ZXI6ICIoIiwKICAgICAgICBpbkNvbnN0cnVjdDogInBocmFzaW5nIiwKICAgICAgICBub3RJbkNvbnN0cnVjdDogZnVsbFBocmFzaW5nU3BhbnMKICAgICAgfSwKICAgICAgLy8gQSByaWdodCBwYXJlbiBjb3VsZCBzdGFydCBhIGxpc3QgaXRlbSBvciBicmVhayBvdXQgb2YgYSBkZXN0aW5hdGlvbgogICAgICAvLyByYXcuCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgYmVmb3JlOiAiXFxkKyIsIGNoYXJhY3RlcjogIikiIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiKSIsIGluQ29uc3RydWN0OiAiZGVzdGluYXRpb25SYXciIH0sCiAgICAgIC8vIEFuIGFzdGVyaXNrIGNhbiBzdGFydCB0aGVtYXRpYyBicmVha3MsIGxpc3QgaXRlbXMsIGVtcGhhc2lzLCBzdHJvbmcuCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAiKiIsIGFmdGVyOiAiKD86WyAJXHJcbipdKSIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICIqIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIsIG5vdEluQ29uc3RydWN0OiBmdWxsUGhyYXNpbmdTcGFucyB9LAogICAgICAvLyBBIHBsdXMgc2lnbiBjb3VsZCBzdGFydCBhIGxpc3QgaXRlbS4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICIrIiwgYWZ0ZXI6ICIoPzpbIAlcclxuXSkiIH0sCiAgICAgIC8vIEEgZGFzaCBjYW4gc3RhcnQgdGhlbWF0aWMgYnJlYWtzLCBsaXN0IGl0ZW1zLCBhbmQgc2V0ZXh0IGhlYWRpbmcKICAgICAgLy8gdW5kZXJsaW5lcy4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICItIiwgYWZ0ZXI6ICIoPzpbIAlcclxuLV0pIiB9LAogICAgICAvLyBBIGRvdCBjb3VsZCBzdGFydCBhIGxpc3QgaXRlbS4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBiZWZvcmU6ICJcXGQrIiwgY2hhcmFjdGVyOiAiLiIsIGFmdGVyOiAiKD86WyAJXHJcbl18JCkiIH0sCiAgICAgIC8vIFNsYXNoLCBjb2xvbiwgYW5kIHNlbWljb2xvbiBhcmUgbm90IHVzZWQgaW4gbWFya2Rvd24gZm9yIGNvbnN0cnVjdHMuCiAgICAgIC8vIEEgbGVzcyB0aGFuIGNhbiBzdGFydCBodG1sIChmbG93IG9yIHRleHQpIG9yIGFuIGF1dG9saW5rLgogICAgICAvLyBIVE1MIGNvdWxkIHN0YXJ0IHdpdGggYW4gZXhjbGFtYXRpb24gbWFyayAoZGVjbGFyYXRpb24sIGNkYXRhLCBjb21tZW50KSwKICAgICAgLy8gc2xhc2ggKGNsb3NpbmcgdGFnKSwgcXVlc3Rpb24gbWFyayAoaW5zdHJ1Y3Rpb24pLCBvciBhIGxldHRlciAodGFnKS4KICAgICAgLy8gQW4gYXV0b2xpbmsgYWxzbyBzdGFydHMgd2l0aCBhIGxldHRlci4KICAgICAgLy8gRmluYWxseSwgaXQgY291bGQgYnJlYWsgb3V0IG9mIGEgZGVzdGluYXRpb24gbGl0ZXJhbC4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICI8IiwgYWZ0ZXI6ICJbIS8/QS1aYS16XSIgfSwKICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIjwiLAogICAgICAgIGFmdGVyOiAiWyEvP0EtWmEtel0iLAogICAgICAgIGluQ29uc3RydWN0OiAicGhyYXNpbmciLAogICAgICAgIG5vdEluQ29uc3RydWN0OiBmdWxsUGhyYXNpbmdTcGFucwogICAgICB9LAogICAgICB7IGNoYXJhY3RlcjogIjwiLCBpbkNvbnN0cnVjdDogImRlc3RpbmF0aW9uTGl0ZXJhbCIgfSwKICAgICAgLy8gQW4gZXF1YWxzIHRvIGNhbiBzdGFydCBzZXRleHQgaGVhZGluZyB1bmRlcmxpbmVzLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIj0iIH0sCiAgICAgIC8vIEEgZ3JlYXRlciB0aGFuIGNhbiBzdGFydCBibG9jayBxdW90ZXMgYW5kIGl0IGNhbiBicmVhayBvdXQgb2YgYQogICAgICAvLyBkZXN0aW5hdGlvbiBsaXRlcmFsLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIj4iIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiPiIsIGluQ29uc3RydWN0OiAiZGVzdGluYXRpb25MaXRlcmFsIiB9LAogICAgICAvLyBRdWVzdGlvbiBtYXJrIGFuZCBhdCBzaWduIGFyZSBub3QgdXNlZCBpbiBtYXJrZG93biBmb3IgY29uc3RydWN0cy4KICAgICAgLy8gQSBsZWZ0IGJyYWNrZXQgY2FuIHN0YXJ0IGRlZmluaXRpb25zLCByZWZlcmVuY2VzLCBsYWJlbHMsCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAiWyIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICJbIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIsIG5vdEluQ29uc3RydWN0OiBmdWxsUGhyYXNpbmdTcGFucyB9LAogICAgICB7IGNoYXJhY3RlcjogIlsiLCBpbkNvbnN0cnVjdDogWyJsYWJlbCIsICJyZWZlcmVuY2UiXSB9LAogICAgICAvLyBBIGJhY2tzbGFzaCBjYW4gc3RhcnQgYW4gZXNjYXBlICh3aGVuIGZvbGxvd2VkIGJ5IHB1bmN0dWF0aW9uKSBvciBhCiAgICAgIC8vIGhhcmQgYnJlYWsgKHdoZW4gZm9sbG93ZWQgYnkgYW4gZW9sKS4KICAgICAgLy8gTm90ZTogdHlwaWNhbCBlc2NhcGVzIGFyZSBoYW5kbGVkIGluIGBzYWZlYCEKICAgICAgeyBjaGFyYWN0ZXI6ICJcXCIsIGFmdGVyOiAiW1xcclxcbl0iLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiB9LAogICAgICAvLyBBIHJpZ2h0IGJyYWNrZXQgY2FuIGV4aXQgbGFiZWxzLgogICAgICB7IGNoYXJhY3RlcjogIl0iLCBpbkNvbnN0cnVjdDogWyJsYWJlbCIsICJyZWZlcmVuY2UiXSB9LAogICAgICAvLyBDYXJldCBpcyBub3QgdXNlZCBpbiBtYXJrZG93biBmb3IgY29uc3RydWN0cy4KICAgICAgLy8gQW4gdW5kZXJzY29yZSBjYW4gc3RhcnQgZW1waGFzaXMsIHN0cm9uZywgb3IgYSB0aGVtYXRpYyBicmVhay4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICJfIiB9LAogICAgICB7IGNoYXJhY3RlcjogIl8iLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiwgbm90SW5Db25zdHJ1Y3Q6IGZ1bGxQaHJhc2luZ1NwYW5zIH0sCiAgICAgIC8vIEEgZ3JhdmUgYWNjZW50IGNhbiBzdGFydCBjb2RlIChmZW5jZWQgb3IgdGV4dCksIG9yIGl0IGNhbiBicmVhayBvdXQgb2YKICAgICAgLy8gYSBncmF2ZSBhY2NlbnQgY29kZSBmZW5jZS4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICJgIiB9LAogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiYCIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6IFsiY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCIsICJjb2RlRmVuY2VkTWV0YUdyYXZlQWNjZW50Il0KICAgICAgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICJgIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIsIG5vdEluQ29uc3RydWN0OiBmdWxsUGhyYXNpbmdTcGFucyB9LAogICAgICAvLyBMZWZ0IGJyYWNlLCB2ZXJ0aWNhbCBiYXIsIHJpZ2h0IGJyYWNlIGFyZSBub3QgdXNlZCBpbiBtYXJrZG93biBmb3IKICAgICAgLy8gY29uc3RydWN0cy4KICAgICAgLy8gQSB0aWxkZSBjYW4gc3RhcnQgY29kZSAoZmVuY2VkKS4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICJ+IiB9CiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGVjb2RlLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2VAMS4zLjAvbm9kZV9tb2R1bGVzL2RlY29kZS1uYW1lZC1jaGFyYWN0ZXItcmVmZXJlbmNlL2luZGV4LmRvbS5qcwpmdW5jdGlvbiBkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZSh2YWx1ZTIpIHsKICBjb25zdCBjaGFyYWN0ZXJSZWZlcmVuY2UyID0gIiYiICsgdmFsdWUyICsgIjsiOwogIGVsZW1lbnQuaW5uZXJIVE1MID0gY2hhcmFjdGVyUmVmZXJlbmNlMjsKICBjb25zdCBjaGFyYWN0ZXIgPSBlbGVtZW50LnRleHRDb250ZW50OwogIGlmIChjaGFyYWN0ZXIuY2hhckNvZGVBdChjaGFyYWN0ZXIubGVuZ3RoIC0gMSkgPT09IDU5ICYmIHZhbHVlMiAhPT0gInNlbWkiKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBjaGFyYWN0ZXIgPT09IGNoYXJhY3RlclJlZmVyZW5jZTIgPyBmYWxzZSA6IGNoYXJhY3RlcjsKfQp2YXIgZWxlbWVudDsKdmFyIGluaXRfaW5kZXhfZG9tID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGVjb2RlLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2VAMS4zLjAvbm9kZV9tb2R1bGVzL2RlY29kZS1uYW1lZC1jaGFyYWN0ZXItcmVmZXJlbmNlL2luZGV4LmRvbS5qcyIoKSB7CiAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaSIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtZGVjb2RlLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZUAyLjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtZGVjb2RlLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZS9pbmRleC5qcwpmdW5jdGlvbiBkZWNvZGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlKHZhbHVlMiwgYmFzZSkgewogIGNvbnN0IGNvZGU0ID0gTnVtYmVyLnBhcnNlSW50KHZhbHVlMiwgYmFzZSk7CiAgaWYgKAogICAgLy8gQzAgZXhjZXB0IGZvciBIVCwgTEYsIEZGLCBDUiwgc3BhY2UuCiAgICBjb2RlNCA8IDkgfHwgY29kZTQgPT09IDExIHx8IGNvZGU0ID4gMTMgJiYgY29kZTQgPCAzMiB8fCAvLyBDb250cm9sIGNoYXJhY3RlciAoREVMKSBvZiBDMCwgYW5kIEMxIGNvbnRyb2xzLgogICAgY29kZTQgPiAxMjYgJiYgY29kZTQgPCAxNjAgfHwgLy8gTG9uZSBoaWdoIHN1cnJvZ2F0ZXMgYW5kIGxvdyBzdXJyb2dhdGVzLgogICAgY29kZTQgPiA1NTI5NSAmJiBjb2RlNCA8IDU3MzQ0IHx8IC8vIE5vbmNoYXJhY3RlcnMuCiAgICBjb2RlNCA+IDY0OTc1ICYmIGNvZGU0IDwgNjUwMDggfHwgLyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqLwogICAgKGNvZGU0ICYgNjU1MzUpID09PSA2NTUzNSB8fCAoY29kZTQgJiA2NTUzNSkgPT09IDY1NTM0IHx8IC8qIGVzbGludC1lbmFibGUgbm8tYml0d2lzZSAqLwogICAgLy8gT3V0IG9mIHJhbmdlCiAgICBjb2RlNCA+IDExMTQxMTEKICApIHsKICAgIHJldHVybiAiXHVGRkZEIjsKICB9CiAgcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGU0KTsKfQp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9kZWNvZGVfbnVtZXJpY19jaGFyYWN0ZXJfcmVmZXJlbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtZGVjb2RlLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZUAyLjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtZGVjb2RlLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZS9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1kZWNvZGUtc3RyaW5nQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1kZWNvZGUtc3RyaW5nL2luZGV4LmpzCmZ1bmN0aW9uIGRlY29kZVN0cmluZyh2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyLnJlcGxhY2UoY2hhcmFjdGVyRXNjYXBlT3JSZWZlcmVuY2UsIGRlY29kZSk7Cn0KZnVuY3Rpb24gZGVjb2RlKCQwLCAkMSwgJDIyKSB7CiAgaWYgKCQxKSB7CiAgICByZXR1cm4gJDE7CiAgfQogIGNvbnN0IGhlYWQyID0gJDIyLmNoYXJDb2RlQXQoMCk7CiAgaWYgKGhlYWQyID09PSAzNSkgewogICAgY29uc3QgaGVhZDMgPSAkMjIuY2hhckNvZGVBdCgxKTsKICAgIGNvbnN0IGhleDMgPSBoZWFkMyA9PT0gMTIwIHx8IGhlYWQzID09PSA4ODsKICAgIHJldHVybiBkZWNvZGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlKCQyMi5zbGljZShoZXgzID8gMiA6IDEpLCBoZXgzID8gMTYgOiAxMCk7CiAgfQogIHJldHVybiBkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZSgkMjIpIHx8ICQwOwp9CnZhciBjaGFyYWN0ZXJFc2NhcGVPclJlZmVyZW5jZTsKdmFyIGluaXRfbWljcm9tYXJrX3V0aWxfZGVjb2RlX3N0cmluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWRlY29kZS1zdHJpbmdAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWRlY29kZS1zdHJpbmcvaW5kZXguanMiKCkgewogICAgaW5pdF9pbmRleF9kb20oKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfZGVjb2RlX251bWVyaWNfY2hhcmFjdGVyX3JlZmVyZW5jZSgpOwogICAgY2hhcmFjdGVyRXNjYXBlT3JSZWZlcmVuY2UgPSAvXFwoWyEtLzotQFstYHstfl0pfCYoIyg/OlxkezEsN318eFtcZGEtZl17MSw2fSl8W1xkYS16XXsxLDMxfSk7L2dpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9hc3NvY2lhdGlvbi5qcwpmdW5jdGlvbiBhc3NvY2lhdGlvbihub2RlMikgewogIGlmIChub2RlMi5sYWJlbCB8fCAhbm9kZTIuaWRlbnRpZmllcikgewogICAgcmV0dXJuIG5vZGUyLmxhYmVsIHx8ICIiOwogIH0KICByZXR1cm4gZGVjb2RlU3RyaW5nKG5vZGUyLmlkZW50aWZpZXIpOwp9CnZhciBpbml0X2Fzc29jaWF0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9hc3NvY2lhdGlvbi5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2RlY29kZV9zdHJpbmcoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY29tcGlsZS1wYXR0ZXJuLmpzCmZ1bmN0aW9uIGNvbXBpbGVQYXR0ZXJuKHBhdHRlcm4pIHsKICBpZiAoIXBhdHRlcm4uX2NvbXBpbGVkKSB7CiAgICBjb25zdCBiZWZvcmUgPSAocGF0dGVybi5hdEJyZWFrID8gIltcXHJcXG5dW1xcdCBdKiIgOiAiIikgKyAocGF0dGVybi5iZWZvcmUgPyAiKD86IiArIHBhdHRlcm4uYmVmb3JlICsgIikiIDogIiIpOwogICAgcGF0dGVybi5fY29tcGlsZWQgPSBuZXcgUmVnRXhwKAogICAgICAoYmVmb3JlID8gIigiICsgYmVmb3JlICsgIikiIDogIiIpICsgKC9bfFxce30oKVtcXV4kKyo/Li1dLy50ZXN0KHBhdHRlcm4uY2hhcmFjdGVyKSA/ICJcXCIgOiAiIikgKyBwYXR0ZXJuLmNoYXJhY3RlciArIChwYXR0ZXJuLmFmdGVyID8gIig/OiIgKyBwYXR0ZXJuLmFmdGVyICsgIikiIDogIiIpLAogICAgICAiZyIKICAgICk7CiAgfQogIHJldHVybiBwYXR0ZXJuLl9jb21waWxlZDsKfQp2YXIgaW5pdF9jb21waWxlX3BhdHRlcm4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NvbXBpbGUtcGF0dGVybi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NvbnRhaW5lci1waHJhc2luZy5qcwpmdW5jdGlvbiBjb250YWluZXJQaHJhc2luZyhwYXJlbnQsIHN0YXRlMTQsIGluZm8pIHsKICBjb25zdCBpbmRleFN0YWNrID0gc3RhdGUxNC5pbmRleFN0YWNrOwogIGNvbnN0IGNoaWxkcmVuMiA9IHBhcmVudC5jaGlsZHJlbiB8fCBbXTsKICBjb25zdCByZXN1bHRzID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBiZWZvcmUgPSBpbmZvLmJlZm9yZTsKICBsZXQgZW5jb2RlQWZ0ZXI7CiAgaW5kZXhTdGFjay5wdXNoKC0xKTsKICBsZXQgdHJhY2tlciA9IHN0YXRlMTQuY3JlYXRlVHJhY2tlcihpbmZvKTsKICB3aGlsZSAoKytpbmRleDIgPCBjaGlsZHJlbjIubGVuZ3RoKSB7CiAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuMltpbmRleDJdOwogICAgbGV0IGFmdGVyOwogICAgaW5kZXhTdGFja1tpbmRleFN0YWNrLmxlbmd0aCAtIDFdID0gaW5kZXgyOwogICAgaWYgKGluZGV4MiArIDEgPCBjaGlsZHJlbjIubGVuZ3RoKSB7CiAgICAgIGxldCBoYW5kbGUzID0gc3RhdGUxNC5oYW5kbGUuaGFuZGxlcnNbY2hpbGRyZW4yW2luZGV4MiArIDFdLnR5cGVdOwogICAgICBpZiAoaGFuZGxlMyAmJiBoYW5kbGUzLnBlZWspIGhhbmRsZTMgPSBoYW5kbGUzLnBlZWs7CiAgICAgIGFmdGVyID0gaGFuZGxlMyA/IGhhbmRsZTMoY2hpbGRyZW4yW2luZGV4MiArIDFdLCBwYXJlbnQsIHN0YXRlMTQsIHsKICAgICAgICBiZWZvcmU6ICIiLAogICAgICAgIGFmdGVyOiAiIiwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KS5jaGFyQXQoMCkgOiAiIjsKICAgIH0gZWxzZSB7CiAgICAgIGFmdGVyID0gaW5mby5hZnRlcjsKICAgIH0KICAgIGlmIChyZXN1bHRzLmxlbmd0aCA+IDAgJiYgKGJlZm9yZSA9PT0gIlxyIiB8fCBiZWZvcmUgPT09ICJcbiIpICYmIGNoaWxkLnR5cGUgPT09ICJodG1sIikgewogICAgICByZXN1bHRzW3Jlc3VsdHMubGVuZ3RoIC0gMV0gPSByZXN1bHRzW3Jlc3VsdHMubGVuZ3RoIC0gMV0ucmVwbGFjZSgKICAgICAgICAvKFxyP1xufFxyKSQvLAogICAgICAgICIgIgogICAgICApOwogICAgICBiZWZvcmUgPSAiICI7CiAgICAgIHRyYWNrZXIgPSBzdGF0ZTE0LmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgICAgIHRyYWNrZXIubW92ZShyZXN1bHRzLmpvaW4oIiIpKTsKICAgIH0KICAgIGxldCB2YWx1ZTIgPSBzdGF0ZTE0LmhhbmRsZShjaGlsZCwgcGFyZW50LCBzdGF0ZTE0LCB7CiAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpLAogICAgICBhZnRlciwKICAgICAgYmVmb3JlCiAgICB9KTsKICAgIGlmIChlbmNvZGVBZnRlciAmJiBlbmNvZGVBZnRlciA9PT0gdmFsdWUyLnNsaWNlKDAsIDEpKSB7CiAgICAgIHZhbHVlMiA9IGVuY29kZUNoYXJhY3RlclJlZmVyZW5jZShlbmNvZGVBZnRlci5jaGFyQ29kZUF0KDApKSArIHZhbHVlMi5zbGljZSgxKTsKICAgIH0KICAgIGNvbnN0IGVuY29kaW5nSW5mbyA9IHN0YXRlMTQuYXR0ZW50aW9uRW5jb2RlU3Vycm91bmRpbmdJbmZvOwogICAgc3RhdGUxNC5hdHRlbnRpb25FbmNvZGVTdXJyb3VuZGluZ0luZm8gPSB2b2lkIDA7CiAgICBlbmNvZGVBZnRlciA9IHZvaWQgMDsKICAgIGlmIChlbmNvZGluZ0luZm8pIHsKICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID4gMCAmJiBlbmNvZGluZ0luZm8uYmVmb3JlICYmIGJlZm9yZSA9PT0gcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdLnNsaWNlKC0xKSkgewogICAgICAgIHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXSA9IHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXS5zbGljZSgwLCAtMSkgKyBlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UoYmVmb3JlLmNoYXJDb2RlQXQoMCkpOwogICAgICB9CiAgICAgIGlmIChlbmNvZGluZ0luZm8uYWZ0ZXIpIGVuY29kZUFmdGVyID0gYWZ0ZXI7CiAgICB9CiAgICB0cmFja2VyLm1vdmUodmFsdWUyKTsKICAgIHJlc3VsdHMucHVzaCh2YWx1ZTIpOwogICAgYmVmb3JlID0gdmFsdWUyLnNsaWNlKC0xKTsKICB9CiAgaW5kZXhTdGFjay5wb3AoKTsKICByZXR1cm4gcmVzdWx0cy5qb2luKCIiKTsKfQp2YXIgaW5pdF9jb250YWluZXJfcGhyYXNpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NvbnRhaW5lci1waHJhc2luZy5qcyIoKSB7CiAgICBpbml0X2VuY29kZV9jaGFyYWN0ZXJfcmVmZXJlbmNlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NvbnRhaW5lci1mbG93LmpzCmZ1bmN0aW9uIGNvbnRhaW5lckZsb3cocGFyZW50LCBzdGF0ZTE0LCBpbmZvKSB7CiAgY29uc3QgaW5kZXhTdGFjayA9IHN0YXRlMTQuaW5kZXhTdGFjazsKICBjb25zdCBjaGlsZHJlbjIgPSBwYXJlbnQuY2hpbGRyZW4gfHwgW107CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTQuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBjb25zdCByZXN1bHRzID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIGluZGV4U3RhY2sucHVzaCgtMSk7CiAgd2hpbGUgKCsraW5kZXgyIDwgY2hpbGRyZW4yLmxlbmd0aCkgewogICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbjJbaW5kZXgyXTsKICAgIGluZGV4U3RhY2tbaW5kZXhTdGFjay5sZW5ndGggLSAxXSA9IGluZGV4MjsKICAgIHJlc3VsdHMucHVzaCgKICAgICAgdHJhY2tlci5tb3ZlKAogICAgICAgIHN0YXRlMTQuaGFuZGxlKGNoaWxkLCBwYXJlbnQsIHN0YXRlMTQsIHsKICAgICAgICAgIGJlZm9yZTogIlxuIiwKICAgICAgICAgIGFmdGVyOiAiXG4iLAogICAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgICAgICB9KQogICAgICApCiAgICApOwogICAgaWYgKGNoaWxkLnR5cGUgIT09ICJsaXN0IikgewogICAgICBzdGF0ZTE0LmJ1bGxldExhc3RVc2VkID0gdm9pZCAwOwogICAgfQogICAgaWYgKGluZGV4MiA8IGNoaWxkcmVuMi5sZW5ndGggLSAxKSB7CiAgICAgIHJlc3VsdHMucHVzaCgKICAgICAgICB0cmFja2VyLm1vdmUoYmV0d2VlbihjaGlsZCwgY2hpbGRyZW4yW2luZGV4MiArIDFdLCBwYXJlbnQsIHN0YXRlMTQpKQogICAgICApOwogICAgfQogIH0KICBpbmRleFN0YWNrLnBvcCgpOwogIHJldHVybiByZXN1bHRzLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIGJldHdlZW4obGVmdCwgcmlnaHQsIHBhcmVudCwgc3RhdGUxNCkgewogIGxldCBpbmRleDIgPSBzdGF0ZTE0LmpvaW4ubGVuZ3RoOwogIHdoaWxlIChpbmRleDItLSkgewogICAgY29uc3QgcmVzdWx0ID0gc3RhdGUxNC5qb2luW2luZGV4Ml0obGVmdCwgcmlnaHQsIHBhcmVudCwgc3RhdGUxNCk7CiAgICBpZiAocmVzdWx0ID09PSB0cnVlIHx8IHJlc3VsdCA9PT0gMSkgewogICAgICBicmVhazsKICAgIH0KICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAibnVtYmVyIikgewogICAgICByZXR1cm4gIlxuIi5yZXBlYXQoMSArIHJlc3VsdCk7CiAgICB9CiAgICBpZiAocmVzdWx0ID09PSBmYWxzZSkgewogICAgICByZXR1cm4gIlxuXG48IS0tLS0+XG5cbiI7CiAgICB9CiAgfQogIHJldHVybiAiXG5cbiI7Cn0KdmFyIGluaXRfY29udGFpbmVyX2Zsb3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NvbnRhaW5lci1mbG93LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvaW5kZW50LWxpbmVzLmpzCmZ1bmN0aW9uIGluZGVudExpbmVzKHZhbHVlMiwgbWFwNykgewogIGNvbnN0IHJlc3VsdCA9IFtdOwogIGxldCBzdGFydCA9IDA7CiAgbGV0IGxpbmUgPSAwOwogIGxldCBtYXRjaDI7CiAgd2hpbGUgKG1hdGNoMiA9IGVvbC5leGVjKHZhbHVlMikpIHsKICAgIG9uZTModmFsdWUyLnNsaWNlKHN0YXJ0LCBtYXRjaDIuaW5kZXgpKTsKICAgIHJlc3VsdC5wdXNoKG1hdGNoMlswXSk7CiAgICBzdGFydCA9IG1hdGNoMi5pbmRleCArIG1hdGNoMlswXS5sZW5ndGg7CiAgICBsaW5lKys7CiAgfQogIG9uZTModmFsdWUyLnNsaWNlKHN0YXJ0KSk7CiAgcmV0dXJuIHJlc3VsdC5qb2luKCIiKTsKICBmdW5jdGlvbiBvbmUzKHZhbHVlMykgewogICAgcmVzdWx0LnB1c2gobWFwNyh2YWx1ZTMsIGxpbmUsICF2YWx1ZTMpKTsKICB9Cn0KdmFyIGVvbDsKdmFyIGluaXRfaW5kZW50X2xpbmVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9pbmRlbnQtbGluZXMuanMiKCkgewogICAgZW9sID0gL1xyP1xufFxyL2c7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL3NhZmUuanMKZnVuY3Rpb24gc2FmZShzdGF0ZTE0LCBpbnB1dCwgY29uZmlnMykgewogIGNvbnN0IHZhbHVlMiA9IChjb25maWczLmJlZm9yZSB8fCAiIikgKyAoaW5wdXQgfHwgIiIpICsgKGNvbmZpZzMuYWZ0ZXIgfHwgIiIpOwogIGNvbnN0IHBvc2l0aW9ucyA9IFtdOwogIGNvbnN0IHJlc3VsdCA9IFtdOwogIGNvbnN0IGluZm9zID0ge307CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHN0YXRlMTQudW5zYWZlLmxlbmd0aCkgewogICAgY29uc3QgcGF0dGVybiA9IHN0YXRlMTQudW5zYWZlW2luZGV4Ml07CiAgICBpZiAoIXBhdHRlcm5JblNjb3BlKHN0YXRlMTQuc3RhY2ssIHBhdHRlcm4pKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgY29uc3QgZXhwcmVzc2lvbiA9IHN0YXRlMTQuY29tcGlsZVBhdHRlcm4ocGF0dGVybik7CiAgICBsZXQgbWF0Y2gyOwogICAgd2hpbGUgKG1hdGNoMiA9IGV4cHJlc3Npb24uZXhlYyh2YWx1ZTIpKSB7CiAgICAgIGNvbnN0IGJlZm9yZSA9ICJiZWZvcmUiIGluIHBhdHRlcm4gfHwgQm9vbGVhbihwYXR0ZXJuLmF0QnJlYWspOwogICAgICBjb25zdCBhZnRlciA9ICJhZnRlciIgaW4gcGF0dGVybjsKICAgICAgY29uc3QgcG9zaXRpb24zID0gbWF0Y2gyLmluZGV4ICsgKGJlZm9yZSA/IG1hdGNoMlsxXS5sZW5ndGggOiAwKTsKICAgICAgaWYgKHBvc2l0aW9ucy5pbmNsdWRlcyhwb3NpdGlvbjMpKSB7CiAgICAgICAgaWYgKGluZm9zW3Bvc2l0aW9uM10uYmVmb3JlICYmICFiZWZvcmUpIHsKICAgICAgICAgIGluZm9zW3Bvc2l0aW9uM10uYmVmb3JlID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChpbmZvc1twb3NpdGlvbjNdLmFmdGVyICYmICFhZnRlcikgewogICAgICAgICAgaW5mb3NbcG9zaXRpb24zXS5hZnRlciA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBwb3NpdGlvbnMucHVzaChwb3NpdGlvbjMpOwogICAgICAgIGluZm9zW3Bvc2l0aW9uM10gPSB7IGJlZm9yZSwgYWZ0ZXIgfTsKICAgICAgfQogICAgfQogIH0KICBwb3NpdGlvbnMuc29ydChudW1lcmljYWwpOwogIGxldCBzdGFydCA9IGNvbmZpZzMuYmVmb3JlID8gY29uZmlnMy5iZWZvcmUubGVuZ3RoIDogMDsKICBjb25zdCBlbmQzID0gdmFsdWUyLmxlbmd0aCAtIChjb25maWczLmFmdGVyID8gY29uZmlnMy5hZnRlci5sZW5ndGggOiAwKTsKICBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBwb3NpdGlvbnMubGVuZ3RoKSB7CiAgICBjb25zdCBwb3NpdGlvbjMgPSBwb3NpdGlvbnNbaW5kZXgyXTsKICAgIGlmIChwb3NpdGlvbjMgPCBzdGFydCB8fCBwb3NpdGlvbjMgPj0gZW5kMykgewogICAgICBjb250aW51ZTsKICAgIH0KICAgIGlmIChwb3NpdGlvbjMgKyAxIDwgZW5kMyAmJiBwb3NpdGlvbnNbaW5kZXgyICsgMV0gPT09IHBvc2l0aW9uMyArIDEgJiYgaW5mb3NbcG9zaXRpb24zXS5hZnRlciAmJiAhaW5mb3NbcG9zaXRpb24zICsgMV0uYmVmb3JlICYmICFpbmZvc1twb3NpdGlvbjMgKyAxXS5hZnRlciB8fCBwb3NpdGlvbnNbaW5kZXgyIC0gMV0gPT09IHBvc2l0aW9uMyAtIDEgJiYgaW5mb3NbcG9zaXRpb24zXS5iZWZvcmUgJiYgIWluZm9zW3Bvc2l0aW9uMyAtIDFdLmJlZm9yZSAmJiAhaW5mb3NbcG9zaXRpb24zIC0gMV0uYWZ0ZXIpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAoc3RhcnQgIT09IHBvc2l0aW9uMykgewogICAgICByZXN1bHQucHVzaChlc2NhcGVCYWNrc2xhc2hlcyh2YWx1ZTIuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uMyksICJcXCIpKTsKICAgIH0KICAgIHN0YXJ0ID0gcG9zaXRpb24zOwogICAgaWYgKC9bIS0vOi1AWy1gey1+XS8udGVzdCh2YWx1ZTIuY2hhckF0KHBvc2l0aW9uMykpICYmICghY29uZmlnMy5lbmNvZGUgfHwgIWNvbmZpZzMuZW5jb2RlLmluY2x1ZGVzKHZhbHVlMi5jaGFyQXQocG9zaXRpb24zKSkpKSB7CiAgICAgIHJlc3VsdC5wdXNoKCJcXCIpOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0LnB1c2goZW5jb2RlQ2hhcmFjdGVyUmVmZXJlbmNlKHZhbHVlMi5jaGFyQ29kZUF0KHBvc2l0aW9uMykpKTsKICAgICAgc3RhcnQrKzsKICAgIH0KICB9CiAgcmVzdWx0LnB1c2goZXNjYXBlQmFja3NsYXNoZXModmFsdWUyLnNsaWNlKHN0YXJ0LCBlbmQzKSwgY29uZmlnMy5hZnRlcikpOwogIHJldHVybiByZXN1bHQuam9pbigiIik7Cn0KZnVuY3Rpb24gbnVtZXJpY2FsKGE1LCBiNSkgewogIHJldHVybiBhNSAtIGI1Owp9CmZ1bmN0aW9uIGVzY2FwZUJhY2tzbGFzaGVzKHZhbHVlMiwgYWZ0ZXIpIHsKICBjb25zdCBleHByZXNzaW9uID0gL1xcKD89WyEtLzotQFstYHstfl0pL2c7CiAgY29uc3QgcG9zaXRpb25zID0gW107CiAgY29uc3QgcmVzdWx0cyA9IFtdOwogIGNvbnN0IHdob2xlID0gdmFsdWUyICsgYWZ0ZXI7CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBzdGFydCA9IDA7CiAgbGV0IG1hdGNoMjsKICB3aGlsZSAobWF0Y2gyID0gZXhwcmVzc2lvbi5leGVjKHdob2xlKSkgewogICAgcG9zaXRpb25zLnB1c2gobWF0Y2gyLmluZGV4KTsKICB9CiAgd2hpbGUgKCsraW5kZXgyIDwgcG9zaXRpb25zLmxlbmd0aCkgewogICAgaWYgKHN0YXJ0ICE9PSBwb3NpdGlvbnNbaW5kZXgyXSkgewogICAgICByZXN1bHRzLnB1c2godmFsdWUyLnNsaWNlKHN0YXJ0LCBwb3NpdGlvbnNbaW5kZXgyXSkpOwogICAgfQogICAgcmVzdWx0cy5wdXNoKCJcXCIpOwogICAgc3RhcnQgPSBwb3NpdGlvbnNbaW5kZXgyXTsKICB9CiAgcmVzdWx0cy5wdXNoKHZhbHVlMi5zbGljZShzdGFydCkpOwogIHJldHVybiByZXN1bHRzLmpvaW4oIiIpOwp9CnZhciBpbml0X3NhZmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL3NhZmUuanMiKCkgewogICAgaW5pdF9lbmNvZGVfY2hhcmFjdGVyX3JlZmVyZW5jZSgpOwogICAgaW5pdF9wYXR0ZXJuX2luX3Njb3BlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL3RyYWNrLmpzCmZ1bmN0aW9uIHRyYWNrKGNvbmZpZzMpIHsKICBjb25zdCBvcHRpb25zID0gY29uZmlnMyB8fCB7fTsKICBjb25zdCBub3cyID0gb3B0aW9ucy5ub3cgfHwge307CiAgbGV0IGxpbmVTaGlmdCA9IG9wdGlvbnMubGluZVNoaWZ0IHx8IDA7CiAgbGV0IGxpbmUgPSBub3cyLmxpbmUgfHwgMTsKICBsZXQgY29sdW1uID0gbm93Mi5jb2x1bW4gfHwgMTsKICByZXR1cm4geyBtb3ZlLCBjdXJyZW50LCBzaGlmdCB9OwogIGZ1bmN0aW9uIGN1cnJlbnQoKSB7CiAgICByZXR1cm4geyBub3c6IHsgbGluZSwgY29sdW1uIH0sIGxpbmVTaGlmdCB9OwogIH0KICBmdW5jdGlvbiBzaGlmdCh2YWx1ZTIpIHsKICAgIGxpbmVTaGlmdCArPSB2YWx1ZTI7CiAgfQogIGZ1bmN0aW9uIG1vdmUoaW5wdXQpIHsKICAgIGNvbnN0IHZhbHVlMiA9IGlucHV0IHx8ICIiOwogICAgY29uc3QgY2h1bmtzID0gdmFsdWUyLnNwbGl0KC9ccj9cbnxcci9nKTsKICAgIGNvbnN0IHRhaWwgPSBjaHVua3NbY2h1bmtzLmxlbmd0aCAtIDFdOwogICAgbGluZSArPSBjaHVua3MubGVuZ3RoIC0gMTsKICAgIGNvbHVtbiA9IGNodW5rcy5sZW5ndGggPT09IDEgPyBjb2x1bW4gKyB0YWlsLmxlbmd0aCA6IDEgKyB0YWlsLmxlbmd0aCArIGxpbmVTaGlmdDsKICAgIHJldHVybiB2YWx1ZTI7CiAgfQp9CnZhciBpbml0X3RyYWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC90cmFjay5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9pbmRleC5qcwpmdW5jdGlvbiB0b01hcmtkb3duKHRyZWUsIG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgY29uc3Qgc3RhdGUxNCA9IHsKICAgIGFzc29jaWF0aW9uSWQ6IGFzc29jaWF0aW9uLAogICAgY29udGFpbmVyUGhyYXNpbmc6IGNvbnRhaW5lclBocmFzaW5nQm91bmQsCiAgICBjb250YWluZXJGbG93OiBjb250YWluZXJGbG93Qm91bmQsCiAgICBjcmVhdGVUcmFja2VyOiB0cmFjaywKICAgIGNvbXBpbGVQYXR0ZXJuLAogICAgZW50ZXIsCiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBHRk0gLyBmcm9udG1hdHRlciBhcmUgdHlwZWQgaW4gYG1kYXN0YCBidXQgbm90IGRlZmluZWQKICAgIC8vIGhlcmUuCiAgICBoYW5kbGVyczogeyAuLi5oYW5kbGUgfSwKICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGFkZCBgaGFuZGxlYCBpbiBhIHNlY29uZC4KICAgIGhhbmRsZTogdm9pZCAwLAogICAgaW5kZW50TGluZXMsCiAgICBpbmRleFN0YWNrOiBbXSwKICAgIGpvaW46IFsuLi5qb2luMl0sCiAgICBvcHRpb25zOiB7fSwKICAgIHNhZmU6IHNhZmVCb3VuZCwKICAgIHN0YWNrOiBbXSwKICAgIHVuc2FmZTogWy4uLnVuc2FmZV0KICB9OwogIGNvbmZpZ3VyZShzdGF0ZTE0LCBzZXR0aW5ncyk7CiAgaWYgKHN0YXRlMTQub3B0aW9ucy50aWdodERlZmluaXRpb25zKSB7CiAgICBzdGF0ZTE0LmpvaW4ucHVzaChqb2luRGVmaW5pdGlvbik7CiAgfQogIHN0YXRlMTQuaGFuZGxlID0gendpdGNoKCJ0eXBlIiwgewogICAgaW52YWxpZCwKICAgIHVua25vd24sCiAgICBoYW5kbGVyczogc3RhdGUxNC5oYW5kbGVycwogIH0pOwogIGxldCByZXN1bHQgPSBzdGF0ZTE0LmhhbmRsZSh0cmVlLCB2b2lkIDAsIHN0YXRlMTQsIHsKICAgIGJlZm9yZTogIlxuIiwKICAgIGFmdGVyOiAiXG4iLAogICAgbm93OiB7IGxpbmU6IDEsIGNvbHVtbjogMSB9LAogICAgbGluZVNoaWZ0OiAwCiAgfSk7CiAgaWYgKHJlc3VsdCAmJiByZXN1bHQuY2hhckNvZGVBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IDEwICYmIHJlc3VsdC5jaGFyQ29kZUF0KHJlc3VsdC5sZW5ndGggLSAxKSAhPT0gMTMpIHsKICAgIHJlc3VsdCArPSAiXG4iOwogIH0KICByZXR1cm4gcmVzdWx0OwogIGZ1bmN0aW9uIGVudGVyKG5hbWUpIHsKICAgIHN0YXRlMTQuc3RhY2sucHVzaChuYW1lKTsKICAgIHJldHVybiBleGl0MzsKICAgIGZ1bmN0aW9uIGV4aXQzKCkgewogICAgICBzdGF0ZTE0LnN0YWNrLnBvcCgpOwogICAgfQogIH0KfQpmdW5jdGlvbiBpbnZhbGlkKHZhbHVlMikgewogIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGhhbmRsZSB2YWx1ZSBgIiArIHZhbHVlMiArICJgLCBleHBlY3RlZCBub2RlIik7Cn0KZnVuY3Rpb24gdW5rbm93bih2YWx1ZTIpIHsKICBjb25zdCBub2RlMiA9ICgKICAgIC8qKiBAdHlwZSB7Tm9kZXN9ICovCiAgICB2YWx1ZTIKICApOwogIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGhhbmRsZSB1bmtub3duIG5vZGUgYCIgKyBub2RlMi50eXBlICsgImAiKTsKfQpmdW5jdGlvbiBqb2luRGVmaW5pdGlvbihsZWZ0LCByaWdodCkgewogIGlmIChsZWZ0LnR5cGUgPT09ICJkZWZpbml0aW9uIiAmJiBsZWZ0LnR5cGUgPT09IHJpZ2h0LnR5cGUpIHsKICAgIHJldHVybiAwOwogIH0KfQpmdW5jdGlvbiBjb250YWluZXJQaHJhc2luZ0JvdW5kKHBhcmVudCwgaW5mbykgewogIHJldHVybiBjb250YWluZXJQaHJhc2luZyhwYXJlbnQsIHRoaXMsIGluZm8pOwp9CmZ1bmN0aW9uIGNvbnRhaW5lckZsb3dCb3VuZChwYXJlbnQsIGluZm8pIHsKICByZXR1cm4gY29udGFpbmVyRmxvdyhwYXJlbnQsIHRoaXMsIGluZm8pOwp9CmZ1bmN0aW9uIHNhZmVCb3VuZCh2YWx1ZTIsIGNvbmZpZzMpIHsKICByZXR1cm4gc2FmZSh0aGlzLCB2YWx1ZTIsIGNvbmZpZzMpOwp9CnZhciBpbml0X2xpYjE1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF96d2l0Y2goKTsKICAgIGluaXRfY29uZmlndXJlKCk7CiAgICBpbml0X2hhbmRsZSgpOwogICAgaW5pdF9qb2luKCk7CiAgICBpbml0X3Vuc2FmZSgpOwogICAgaW5pdF9hc3NvY2lhdGlvbigpOwogICAgaW5pdF9jb21waWxlX3BhdHRlcm4oKTsKICAgIGluaXRfY29udGFpbmVyX3BocmFzaW5nKCk7CiAgICBpbml0X2NvbnRhaW5lcl9mbG93KCk7CiAgICBpbml0X2luZGVudF9saW5lcygpOwogICAgaW5pdF9zYWZlKCk7CiAgICBpbml0X3RyYWNrKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfdG9fbWFya2Rvd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMTUoKTsKICAgIGluaXRfaGFuZGxlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YWJsZUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFibGUvbGliL2luZGV4LmpzCmZ1bmN0aW9uIGdmbVRhYmxlRnJvbU1hcmtkb3duKCkgewogIHJldHVybiB7CiAgICBlbnRlcjogewogICAgICB0YWJsZTogZW50ZXJUYWJsZSwKICAgICAgdGFibGVEYXRhOiBlbnRlckNlbGwsCiAgICAgIHRhYmxlSGVhZGVyOiBlbnRlckNlbGwsCiAgICAgIHRhYmxlUm93OiBlbnRlclJvdwogICAgfSwKICAgIGV4aXQ6IHsKICAgICAgY29kZVRleHQ6IGV4aXRDb2RlVGV4dCwKICAgICAgdGFibGU6IGV4aXRUYWJsZSwKICAgICAgdGFibGVEYXRhOiBleGl0LAogICAgICB0YWJsZUhlYWRlcjogZXhpdCwKICAgICAgdGFibGVSb3c6IGV4aXQKICAgIH0KICB9Owp9CmZ1bmN0aW9uIGVudGVyVGFibGUodG9rZW4pIHsKICBjb25zdCBhbGlnbiA9IHRva2VuLl9hbGlnbjsKICBvayhhbGlnbiwgImV4cGVjdGVkIGBfYWxpZ25gIG9uIHRhYmxlIik7CiAgdGhpcy5lbnRlcigKICAgIHsKICAgICAgdHlwZTogInRhYmxlIiwKICAgICAgYWxpZ246IGFsaWduLm1hcChmdW5jdGlvbihkNikgewogICAgICAgIHJldHVybiBkNiA9PT0gIm5vbmUiID8gbnVsbCA6IGQ2OwogICAgICB9KSwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9LAogICAgdG9rZW4KICApOwogIHRoaXMuZGF0YS5pblRhYmxlID0gdHJ1ZTsKfQpmdW5jdGlvbiBleGl0VGFibGUodG9rZW4pIHsKICB0aGlzLmV4aXQodG9rZW4pOwogIHRoaXMuZGF0YS5pblRhYmxlID0gdm9pZCAwOwp9CmZ1bmN0aW9uIGVudGVyUm93KHRva2VuKSB7CiAgdGhpcy5lbnRlcih7IHR5cGU6ICJ0YWJsZVJvdyIsIGNoaWxkcmVuOiBbXSB9LCB0b2tlbik7Cn0KZnVuY3Rpb24gZXhpdCh0b2tlbikgewogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gZW50ZXJDZWxsKHRva2VuKSB7CiAgdGhpcy5lbnRlcih7IHR5cGU6ICJ0YWJsZUNlbGwiLCBjaGlsZHJlbjogW10gfSwgdG9rZW4pOwp9CmZ1bmN0aW9uIGV4aXRDb2RlVGV4dCh0b2tlbikgewogIGxldCB2YWx1ZTIgPSB0aGlzLnJlc3VtZSgpOwogIGlmICh0aGlzLmRhdGEuaW5UYWJsZSkgewogICAgdmFsdWUyID0gdmFsdWUyLnJlcGxhY2UoL1xcKFtcXHxdKS9nLCByZXBsYWNlKTsKICB9CiAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgb2sobm9kZTIudHlwZSA9PT0gImlubGluZUNvZGUiKTsKICBub2RlMi52YWx1ZSA9IHZhbHVlMjsKICB0aGlzLmV4aXQodG9rZW4pOwp9CmZ1bmN0aW9uIHJlcGxhY2UoJDAsICQxKSB7CiAgcmV0dXJuICQxID09PSAifCIgPyAkMSA6ICQwOwp9CmZ1bmN0aW9uIGdmbVRhYmxlVG9NYXJrZG93bihvcHRpb25zKSB7CiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9OwogIGNvbnN0IHBhZGRpbmcgPSBzZXR0aW5ncy50YWJsZUNlbGxQYWRkaW5nOwogIGNvbnN0IGFsaWduRGVsaW1pdGVycyA9IHNldHRpbmdzLnRhYmxlUGlwZUFsaWduOwogIGNvbnN0IHN0cmluZ0xlbmd0aCA9IHNldHRpbmdzLnN0cmluZ0xlbmd0aDsKICBjb25zdCBhcm91bmQgPSBwYWRkaW5nID8gIiAiIDogInwiOwogIHJldHVybiB7CiAgICB1bnNhZmU6IFsKICAgICAgeyBjaGFyYWN0ZXI6ICJcciIsIGluQ29uc3RydWN0OiAidGFibGVDZWxsIiB9LAogICAgICB7IGNoYXJhY3RlcjogIlxuIiwgaW5Db25zdHJ1Y3Q6ICJ0YWJsZUNlbGwiIH0sCiAgICAgIC8vIEEgcGlwZSwgd2hlbiBmb2xsb3dlZCBieSBhIHRhYiBvciBzcGFjZSAocGFkZGluZyksIG9yIGEgZGFzaCBvciBjb2xvbgogICAgICAvLyAodW5wYWRkZWQgZGVsaW1pdGVyIHJvdyksIGNvdWxkIHJlc3VsdCBpbiBhIHRhYmxlLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogInwiLCBhZnRlcjogIlsJIDotXSIgfSwKICAgICAgLy8gQSBwaXBlIGluIGEgY2VsbCBtdXN0IGJlIGVuY29kZWQuCiAgICAgIHsgY2hhcmFjdGVyOiAifCIsIGluQ29uc3RydWN0OiAidGFibGVDZWxsIiB9LAogICAgICAvLyBBIGNvbG9uIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBkYXNoLCBpbiB3aGljaCBjYXNlIGl0IGNvdWxkIHN0YXJ0IGEKICAgICAgLy8gZGVsaW1pdGVyIHJvdy4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICI6IiwgYWZ0ZXI6ICItIiB9LAogICAgICAvLyBBIGRlbGltaXRlciByb3cgY2FuIGFsc28gc3RhcnQgd2l0aCBhIGRhc2gsIHdoZW4gZm9sbG93ZWQgYnkgbW9yZQogICAgICAvLyBkYXNoZXMsIGEgY29sb24sIG9yIGEgcGlwZS4KICAgICAgLy8gVGhpcyBpcyBhIHN0cmljdGVyIHZlcnNpb24gdGhhbiB0aGUgYnVpbHQgaW4gY2hlY2sgZm9yIGxpc3RzLCB0aGVtYXRpYwogICAgICAvLyBicmVha3MsIGFuZCBzZXRleCBoZWFkaW5nIHVuZGVybGluZXMgdGhvdWdoOgogICAgICAvLyA8aHR0cHM6Ly9naXRodWIuY29tL3N5bnRheC10cmVlL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vYmxvYi81MWEyMDM4L2xpYi91bnNhZmUuanMjTDU3PgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIi0iLCBhZnRlcjogIls6fC1dIiB9CiAgICBdLAogICAgaGFuZGxlcnM6IHsKICAgICAgaW5saW5lQ29kZTogaW5saW5lQ29kZVdpdGhUYWJsZSwKICAgICAgdGFibGU6IGhhbmRsZVRhYmxlLAogICAgICB0YWJsZUNlbGw6IGhhbmRsZVRhYmxlQ2VsbCwKICAgICAgdGFibGVSb3c6IGhhbmRsZVRhYmxlUm93CiAgICB9CiAgfTsKICBmdW5jdGlvbiBoYW5kbGVUYWJsZShub2RlMiwgXzQsIHN0YXRlMTQsIGluZm8pIHsKICAgIHJldHVybiBzZXJpYWxpemVEYXRhKGhhbmRsZVRhYmxlQXNEYXRhKG5vZGUyLCBzdGF0ZTE0LCBpbmZvKSwgbm9kZTIuYWxpZ24pOwogIH0KICBmdW5jdGlvbiBoYW5kbGVUYWJsZVJvdyhub2RlMiwgXzQsIHN0YXRlMTQsIGluZm8pIHsKICAgIGNvbnN0IHJvdyA9IGhhbmRsZVRhYmxlUm93QXNEYXRhKG5vZGUyLCBzdGF0ZTE0LCBpbmZvKTsKICAgIGNvbnN0IHZhbHVlMiA9IHNlcmlhbGl6ZURhdGEoW3Jvd10pOwogICAgcmV0dXJuIHZhbHVlMi5zbGljZSgwLCB2YWx1ZTIuaW5kZXhPZigiXG4iKSk7CiAgfQogIGZ1bmN0aW9uIGhhbmRsZVRhYmxlQ2VsbChub2RlMiwgXzQsIHN0YXRlMTQsIGluZm8pIHsKICAgIGNvbnN0IGV4aXQzID0gc3RhdGUxNC5lbnRlcigidGFibGVDZWxsIik7CiAgICBjb25zdCBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigicGhyYXNpbmciKTsKICAgIGNvbnN0IHZhbHVlMiA9IHN0YXRlMTQuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIHsKICAgICAgLi4uaW5mbywKICAgICAgYmVmb3JlOiBhcm91bmQsCiAgICAgIGFmdGVyOiBhcm91bmQKICAgIH0pOwogICAgc3ViZXhpdCgpOwogICAgZXhpdDMoKTsKICAgIHJldHVybiB2YWx1ZTI7CiAgfQogIGZ1bmN0aW9uIHNlcmlhbGl6ZURhdGEobWF0cml4LCBhbGlnbikgewogICAgcmV0dXJuIG1hcmtkb3duVGFibGUobWF0cml4LCB7CiAgICAgIGFsaWduLAogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBgbWFya2Rvd24tdGFibGVgIHR5cGVzIHNob3VsZCBzdXBwb3J0IGBudWxsYC4KICAgICAgYWxpZ25EZWxpbWl0ZXJzLAogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBgbWFya2Rvd24tdGFibGVgIHR5cGVzIHNob3VsZCBzdXBwb3J0IGBudWxsYC4KICAgICAgcGFkZGluZywKICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYG1hcmtkb3duLXRhYmxlYCB0eXBlcyBzaG91bGQgc3VwcG9ydCBgbnVsbGAuCiAgICAgIHN0cmluZ0xlbmd0aAogICAgfSk7CiAgfQogIGZ1bmN0aW9uIGhhbmRsZVRhYmxlQXNEYXRhKG5vZGUyLCBzdGF0ZTE0LCBpbmZvKSB7CiAgICBjb25zdCBjaGlsZHJlbjIgPSBub2RlMi5jaGlsZHJlbjsKICAgIGxldCBpbmRleDIgPSAtMTsKICAgIGNvbnN0IHJlc3VsdCA9IFtdOwogICAgY29uc3Qgc3ViZXhpdCA9IHN0YXRlMTQuZW50ZXIoInRhYmxlIik7CiAgICB3aGlsZSAoKytpbmRleDIgPCBjaGlsZHJlbjIubGVuZ3RoKSB7CiAgICAgIHJlc3VsdFtpbmRleDJdID0gaGFuZGxlVGFibGVSb3dBc0RhdGEoY2hpbGRyZW4yW2luZGV4Ml0sIHN0YXRlMTQsIGluZm8pOwogICAgfQogICAgc3ViZXhpdCgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gaGFuZGxlVGFibGVSb3dBc0RhdGEobm9kZTIsIHN0YXRlMTQsIGluZm8pIHsKICAgIGNvbnN0IGNoaWxkcmVuMiA9IG5vZGUyLmNoaWxkcmVuOwogICAgbGV0IGluZGV4MiA9IC0xOwogICAgY29uc3QgcmVzdWx0ID0gW107CiAgICBjb25zdCBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigidGFibGVSb3ciKTsKICAgIHdoaWxlICgrK2luZGV4MiA8IGNoaWxkcmVuMi5sZW5ndGgpIHsKICAgICAgcmVzdWx0W2luZGV4Ml0gPSBoYW5kbGVUYWJsZUNlbGwoY2hpbGRyZW4yW2luZGV4Ml0sIG5vZGUyLCBzdGF0ZTE0LCBpbmZvKTsKICAgIH0KICAgIHN1YmV4aXQoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIGlubGluZUNvZGVXaXRoVGFibGUobm9kZTIsIHBhcmVudCwgc3RhdGUxNCkgewogICAgbGV0IHZhbHVlMiA9IGhhbmRsZS5pbmxpbmVDb2RlKG5vZGUyLCBwYXJlbnQsIHN0YXRlMTQpOwogICAgaWYgKHN0YXRlMTQuc3RhY2suaW5jbHVkZXMoInRhYmxlQ2VsbCIpKSB7CiAgICAgIHZhbHVlMiA9IHZhbHVlMi5yZXBsYWNlKC9cfC9nLCAiXFwkJiIpOwogICAgfQogICAgcmV0dXJuIHZhbHVlMjsKICB9Cn0KdmFyIGluaXRfbGliMTYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YWJsZUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFibGUvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVmYXVsdCgpOwogICAgaW5pdF9tYXJrZG93bl90YWJsZSgpOwogICAgaW5pdF9tZGFzdF91dGlsX3RvX21hcmtkb3duKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YWJsZUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFibGUvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9nZm1fdGFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YWJsZUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFibGUvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxNigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW1AMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXRhc2stbGlzdC1pdGVtL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBnZm1UYXNrTGlzdEl0ZW1Gcm9tTWFya2Rvd24oKSB7CiAgcmV0dXJuIHsKICAgIGV4aXQ6IHsKICAgICAgdGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZDogZXhpdENoZWNrLAogICAgICB0YXNrTGlzdENoZWNrVmFsdWVVbmNoZWNrZWQ6IGV4aXRDaGVjaywKICAgICAgcGFyYWdyYXBoOiBleGl0UGFyYWdyYXBoV2l0aFRhc2tMaXN0SXRlbQogICAgfQogIH07Cn0KZnVuY3Rpb24gZ2ZtVGFza0xpc3RJdGVtVG9NYXJrZG93bigpIHsKICByZXR1cm4gewogICAgdW5zYWZlOiBbeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICItIiwgYWZ0ZXI6ICJbOnwtXSIgfV0sCiAgICBoYW5kbGVyczogeyBsaXN0SXRlbTogbGlzdEl0ZW1XaXRoVGFza0xpc3RJdGVtIH0KICB9Owp9CmZ1bmN0aW9uIGV4aXRDaGVjayh0b2tlbikgewogIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDJdOwogIG9rKG5vZGUyLnR5cGUgPT09ICJsaXN0SXRlbSIpOwogIG5vZGUyLmNoZWNrZWQgPSB0b2tlbi50eXBlID09PSAidGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZCI7Cn0KZnVuY3Rpb24gZXhpdFBhcmFncmFwaFdpdGhUYXNrTGlzdEl0ZW0odG9rZW4pIHsKICBjb25zdCBwYXJlbnQgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMl07CiAgaWYgKHBhcmVudCAmJiBwYXJlbnQudHlwZSA9PT0gImxpc3RJdGVtIiAmJiB0eXBlb2YgcGFyZW50LmNoZWNrZWQgPT09ICJib29sZWFuIikgewogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBvayhub2RlMi50eXBlID09PSAicGFyYWdyYXBoIik7CiAgICBjb25zdCBoZWFkMiA9IG5vZGUyLmNoaWxkcmVuWzBdOwogICAgaWYgKGhlYWQyICYmIGhlYWQyLnR5cGUgPT09ICJ0ZXh0IikgewogICAgICBjb25zdCBzaWJsaW5nczIgPSBwYXJlbnQuY2hpbGRyZW47CiAgICAgIGxldCBpbmRleDIgPSAtMTsKICAgICAgbGV0IGZpcnN0UGFyYWdocmFwaDsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgc2libGluZ3MyLmxlbmd0aCkgewogICAgICAgIGNvbnN0IHNpYmxpbmcgPSBzaWJsaW5nczJbaW5kZXgyXTsKICAgICAgICBpZiAoc2libGluZy50eXBlID09PSAicGFyYWdyYXBoIikgewogICAgICAgICAgZmlyc3RQYXJhZ2hyYXBoID0gc2libGluZzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZmlyc3RQYXJhZ2hyYXBoID09PSBub2RlMikgewogICAgICAgIGhlYWQyLnZhbHVlID0gaGVhZDIudmFsdWUuc2xpY2UoMSk7CiAgICAgICAgaWYgKGhlYWQyLnZhbHVlLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgbm9kZTIuY2hpbGRyZW4uc2hpZnQoKTsKICAgICAgICB9IGVsc2UgaWYgKG5vZGUyLnBvc2l0aW9uICYmIGhlYWQyLnBvc2l0aW9uICYmIHR5cGVvZiBoZWFkMi5wb3NpdGlvbi5zdGFydC5vZmZzZXQgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICBoZWFkMi5wb3NpdGlvbi5zdGFydC5jb2x1bW4rKzsKICAgICAgICAgIGhlYWQyLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCsrOwogICAgICAgICAgbm9kZTIucG9zaXRpb24uc3RhcnQgPSBPYmplY3QuYXNzaWduKHt9LCBoZWFkMi5wb3NpdGlvbi5zdGFydCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gbGlzdEl0ZW1XaXRoVGFza0xpc3RJdGVtKG5vZGUyLCBwYXJlbnQsIHN0YXRlMTQsIGluZm8pIHsKICBjb25zdCBoZWFkMiA9IG5vZGUyLmNoaWxkcmVuWzBdOwogIGNvbnN0IGNoZWNrYWJsZSA9IHR5cGVvZiBub2RlMi5jaGVja2VkID09PSAiYm9vbGVhbiIgJiYgaGVhZDIgJiYgaGVhZDIudHlwZSA9PT0gInBhcmFncmFwaCI7CiAgY29uc3QgY2hlY2tib3ggPSAiWyIgKyAobm9kZTIuY2hlY2tlZCA/ICJ4IiA6ICIgIikgKyAiXSAiOwogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTE0LmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgaWYgKGNoZWNrYWJsZSkgewogICAgdHJhY2tlci5tb3ZlKGNoZWNrYm94KTsKICB9CiAgbGV0IHZhbHVlMiA9IGhhbmRsZS5saXN0SXRlbShub2RlMiwgcGFyZW50LCBzdGF0ZTE0LCB7CiAgICAuLi5pbmZvLAogICAgLi4udHJhY2tlci5jdXJyZW50KCkKICB9KTsKICBpZiAoY2hlY2thYmxlKSB7CiAgICB2YWx1ZTIgPSB2YWx1ZTIucmVwbGFjZSgvXig/OlsqKy1dfFxkK1wuKShbXHJcbl18IHsxLDN9KS8sIGNoZWNrKTsKICB9CiAgcmV0dXJuIHZhbHVlMjsKICBmdW5jdGlvbiBjaGVjaygkMCkgewogICAgcmV0dXJuICQwICsgY2hlY2tib3g7CiAgfQp9CnZhciBpbml0X2xpYjE3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW1AMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXRhc2stbGlzdC1pdGVtL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHQoKTsKICAgIGluaXRfbWRhc3RfdXRpbF90b19tYXJrZG93bigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW1AMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXRhc2stbGlzdC1pdGVtL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfZ2ZtX3Rhc2tfbGlzdF9pdGVtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW1AMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXRhc2stbGlzdC1pdGVtL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMTcoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtQDMuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS9saWIvaW5kZXguanMKZnVuY3Rpb24gZ2ZtRnJvbU1hcmtkb3duKCkgewogIHJldHVybiBbCiAgICBnZm1BdXRvbGlua0xpdGVyYWxGcm9tTWFya2Rvd24oKSwKICAgIGdmbUZvb3Rub3RlRnJvbU1hcmtkb3duKCksCiAgICBnZm1TdHJpa2V0aHJvdWdoRnJvbU1hcmtkb3duKCksCiAgICBnZm1UYWJsZUZyb21NYXJrZG93bigpLAogICAgZ2ZtVGFza0xpc3RJdGVtRnJvbU1hcmtkb3duKCkKICBdOwp9CmZ1bmN0aW9uIGdmbVRvTWFya2Rvd24ob3B0aW9ucykgewogIHJldHVybiB7CiAgICBleHRlbnNpb25zOiBbCiAgICAgIGdmbUF1dG9saW5rTGl0ZXJhbFRvTWFya2Rvd24oKSwKICAgICAgZ2ZtRm9vdG5vdGVUb01hcmtkb3duKG9wdGlvbnMpLAogICAgICBnZm1TdHJpa2V0aHJvdWdoVG9NYXJrZG93bigpLAogICAgICBnZm1UYWJsZVRvTWFya2Rvd24ob3B0aW9ucyksCiAgICAgIGdmbVRhc2tMaXN0SXRlbVRvTWFya2Rvd24oKQogICAgXQogIH07Cn0KdmFyIGluaXRfbGliMTggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbUAzLjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0vbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWRhc3RfdXRpbF9nZm1fYXV0b2xpbmtfbGl0ZXJhbCgpOwogICAgaW5pdF9tZGFzdF91dGlsX2dmbV9mb290bm90ZSgpOwogICAgaW5pdF9tZGFzdF91dGlsX2dmbV9zdHJpa2V0aHJvdWdoKCk7CiAgICBpbml0X21kYXN0X3V0aWxfZ2ZtX3RhYmxlKCk7CiAgICBpbml0X21kYXN0X3V0aWxfZ2ZtX3Rhc2tfbGlzdF9pdGVtKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbUAzLjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0vaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9nZm0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbUAzLjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0vaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxOCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtY2h1bmtlZEAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY2h1bmtlZC9pbmRleC5qcwpmdW5jdGlvbiBzcGxpY2UobGlzdDUsIHN0YXJ0LCByZW1vdmUyLCBpdGVtcykgewogIGNvbnN0IGVuZDMgPSBsaXN0NS5sZW5ndGg7CiAgbGV0IGNodW5rU3RhcnQgPSAwOwogIGxldCBwYXJhbWV0ZXJzOwogIGlmIChzdGFydCA8IDApIHsKICAgIHN0YXJ0ID0gLXN0YXJ0ID4gZW5kMyA/IDAgOiBlbmQzICsgc3RhcnQ7CiAgfSBlbHNlIHsKICAgIHN0YXJ0ID0gc3RhcnQgPiBlbmQzID8gZW5kMyA6IHN0YXJ0OwogIH0KICByZW1vdmUyID0gcmVtb3ZlMiA+IDAgPyByZW1vdmUyIDogMDsKICBpZiAoaXRlbXMubGVuZ3RoIDwgMWU0KSB7CiAgICBwYXJhbWV0ZXJzID0gQXJyYXkuZnJvbShpdGVtcyk7CiAgICBwYXJhbWV0ZXJzLnVuc2hpZnQoc3RhcnQsIHJlbW92ZTIpOwogICAgbGlzdDUuc3BsaWNlKC4uLnBhcmFtZXRlcnMpOwogIH0gZWxzZSB7CiAgICBpZiAocmVtb3ZlMikgbGlzdDUuc3BsaWNlKHN0YXJ0LCByZW1vdmUyKTsKICAgIHdoaWxlIChjaHVua1N0YXJ0IDwgaXRlbXMubGVuZ3RoKSB7CiAgICAgIHBhcmFtZXRlcnMgPSBpdGVtcy5zbGljZShjaHVua1N0YXJ0LCBjaHVua1N0YXJ0ICsgMWU0KTsKICAgICAgcGFyYW1ldGVycy51bnNoaWZ0KHN0YXJ0LCAwKTsKICAgICAgbGlzdDUuc3BsaWNlKC4uLnBhcmFtZXRlcnMpOwogICAgICBjaHVua1N0YXJ0ICs9IDFlNDsKICAgICAgc3RhcnQgKz0gMWU0OwogICAgfQogIH0KfQpmdW5jdGlvbiBwdXNoKGxpc3Q1LCBpdGVtcykgewogIGlmIChsaXN0NS5sZW5ndGggPiAwKSB7CiAgICBzcGxpY2UobGlzdDUsIGxpc3Q1Lmxlbmd0aCwgMCwgaXRlbXMpOwogICAgcmV0dXJuIGxpc3Q1OwogIH0KICByZXR1cm4gaXRlbXM7Cn0KdmFyIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWNodW5rZWRAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNodW5rZWQvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtY29tYmluZS1leHRlbnNpb25zQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jb21iaW5lLWV4dGVuc2lvbnMvaW5kZXguanMKZnVuY3Rpb24gY29tYmluZUV4dGVuc2lvbnMoZXh0ZW5zaW9ucykgewogIGNvbnN0IGFsbDMgPSB7fTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgZXh0ZW5zaW9ucy5sZW5ndGgpIHsKICAgIHN5bnRheEV4dGVuc2lvbihhbGwzLCBleHRlbnNpb25zW2luZGV4Ml0pOwogIH0KICByZXR1cm4gYWxsMzsKfQpmdW5jdGlvbiBzeW50YXhFeHRlbnNpb24oYWxsMywgZXh0ZW5zaW9uMikgewogIGxldCBob29rOwogIGZvciAoaG9vayBpbiBleHRlbnNpb24yKSB7CiAgICBjb25zdCBtYXliZSA9IGhhc093blByb3BlcnR5LmNhbGwoYWxsMywgaG9vaykgPyBhbGwzW2hvb2tdIDogdm9pZCAwOwogICAgY29uc3QgbGVmdCA9IG1heWJlIHx8IChhbGwzW2hvb2tdID0ge30pOwogICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb24yW2hvb2tdOwogICAgbGV0IGNvZGU0OwogICAgaWYgKHJpZ2h0KSB7CiAgICAgIGZvciAoY29kZTQgaW4gcmlnaHQpIHsKICAgICAgICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwobGVmdCwgY29kZTQpKSBsZWZ0W2NvZGU0XSA9IFtdOwogICAgICAgIGNvbnN0IHZhbHVlMiA9IHJpZ2h0W2NvZGU0XTsKICAgICAgICBjb25zdHJ1Y3RzKAogICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBMb29rcyBsaWtlIGEgbGlzdC4KICAgICAgICAgIGxlZnRbY29kZTRdLAogICAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZTIpID8gdmFsdWUyIDogdmFsdWUyID8gW3ZhbHVlMl0gOiBbXQogICAgICAgICk7CiAgICAgIH0KICAgIH0KICB9Cn0KZnVuY3Rpb24gY29uc3RydWN0cyhleGlzdGluZywgbGlzdDUpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgY29uc3QgYmVmb3JlID0gW107CiAgd2hpbGUgKCsraW5kZXgyIDwgbGlzdDUubGVuZ3RoKSB7CiAgICA7CiAgICAobGlzdDVbaW5kZXgyXS5hZGQgPT09ICJhZnRlciIgPyBleGlzdGluZyA6IGJlZm9yZSkucHVzaChsaXN0NVtpbmRleDJdKTsKICB9CiAgc3BsaWNlKGV4aXN0aW5nLCAwLCAwLCBiZWZvcmUpOwp9CmZ1bmN0aW9uIGNvbWJpbmVIdG1sRXh0ZW5zaW9ucyhodG1sRXh0ZW5zaW9ucykgewogIGNvbnN0IGhhbmRsZXJzMiA9IHt9OwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBodG1sRXh0ZW5zaW9ucy5sZW5ndGgpIHsKICAgIGh0bWxFeHRlbnNpb24oaGFuZGxlcnMyLCBodG1sRXh0ZW5zaW9uc1tpbmRleDJdKTsKICB9CiAgcmV0dXJuIGhhbmRsZXJzMjsKfQpmdW5jdGlvbiBodG1sRXh0ZW5zaW9uKGFsbDMsIGV4dGVuc2lvbjIpIHsKICBsZXQgaG9vazsKICBmb3IgKGhvb2sgaW4gZXh0ZW5zaW9uMikgewogICAgY29uc3QgbWF5YmUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFsbDMsIGhvb2spID8gYWxsM1tob29rXSA6IHZvaWQgMDsKICAgIGNvbnN0IGxlZnQgPSBtYXliZSB8fCAoYWxsM1tob29rXSA9IHt9KTsKICAgIGNvbnN0IHJpZ2h0ID0gZXh0ZW5zaW9uMltob29rXTsKICAgIGxldCB0eXBlNTsKICAgIGlmIChyaWdodCkgewogICAgICBmb3IgKHR5cGU1IGluIHJpZ2h0KSB7CiAgICAgICAgbGVmdFt0eXBlNV0gPSByaWdodFt0eXBlNV07CiAgICAgIH0KICAgIH0KICB9Cn0KdmFyIGhhc093blByb3BlcnR5Owp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9jb21iaW5lX2V4dGVuc2lvbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1jb21iaW5lLWV4dGVuc2lvbnNAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNvbWJpbmUtZXh0ZW5zaW9ucy9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NodW5rZWQoKTsKICAgIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsL2xpYi9zeW50YXguanMKZnVuY3Rpb24gZ2ZtQXV0b2xpbmtMaXRlcmFsKCkgewogIHJldHVybiB7CiAgICB0ZXh0OiB0ZXh0MgogIH07Cn0KZnVuY3Rpb24gdG9rZW5pemVFbWFpbEF1dG9saW5rKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBkb3Q7CiAgbGV0IGRhdGE7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoIWdmbUF0ZXh0KGNvZGU0KSB8fCAhcHJldmlvdXNFbWFpbC5jYWxsKHNlbGYyLCBzZWxmMi5wcmV2aW91cykgfHwgcHJldmlvdXNVbmJhbGFuY2VkKHNlbGYyLmV2ZW50cykpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJsaXRlcmFsQXV0b2xpbmsiKTsKICAgIGVmZmVjdHMuZW50ZXIoImxpdGVyYWxBdXRvbGlua0VtYWlsIik7CiAgICByZXR1cm4gYXRleHQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhdGV4dChjb2RlNCkgewogICAgaWYgKGdmbUF0ZXh0KGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gYXRleHQ7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDY0KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBlbWFpbERvbWFpbjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBlbWFpbERvbWFpbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NikgewogICAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhlbWFpbERvbWFpbkRvdFRyYWlsLCBlbWFpbERvbWFpbkFmdGVyLCBlbWFpbERvbWFpbkRvdCkoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NSB8fCBjb2RlNCA9PT0gOTUgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpKSB7CiAgICAgIGRhdGEgPSB0cnVlOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gZW1haWxEb21haW47CiAgICB9CiAgICByZXR1cm4gZW1haWxEb21haW5BZnRlcihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGVtYWlsRG9tYWluRG90KGNvZGU0KSB7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZG90ID0gdHJ1ZTsKICAgIHJldHVybiBlbWFpbERvbWFpbjsKICB9CiAgZnVuY3Rpb24gZW1haWxEb21haW5BZnRlcihjb2RlNCkgewogICAgaWYgKGRhdGEgJiYgZG90ICYmIGFzY2lpQWxwaGEoc2VsZjIucHJldmlvdXMpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgibGl0ZXJhbEF1dG9saW5rRW1haWwiKTsKICAgICAgZWZmZWN0cy5leGl0KCJsaXRlcmFsQXV0b2xpbmsiKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVXd3dBdXRvbGluayhlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gd3d3U3RhcnQ7CiAgZnVuY3Rpb24gd3d3U3RhcnQoY29kZTQpIHsKICAgIGlmIChjb2RlNCAhPT0gODcgJiYgY29kZTQgIT09IDExOSB8fCAhcHJldmlvdXNXd3cuY2FsbChzZWxmMiwgc2VsZjIucHJldmlvdXMpIHx8IHByZXZpb3VzVW5iYWxhbmNlZChzZWxmMi5ldmVudHMpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigibGl0ZXJhbEF1dG9saW5rIik7CiAgICBlZmZlY3RzLmVudGVyKCJsaXRlcmFsQXV0b2xpbmtXd3ciKTsKICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKHd3d1ByZWZpeCwgZWZmZWN0cy5hdHRlbXB0KGRvbWFpbiwgZWZmZWN0cy5hdHRlbXB0KHBhdGgsIHd3d0FmdGVyKSwgbm9rKSwgbm9rKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHd3d0FmdGVyKGNvZGU0KSB7CiAgICBlZmZlY3RzLmV4aXQoImxpdGVyYWxBdXRvbGlua1d3dyIpOwogICAgZWZmZWN0cy5leGl0KCJsaXRlcmFsQXV0b2xpbmsiKTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVByb3RvY29sQXV0b2xpbmsoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IGJ1ZmZlcjIgPSAiIjsKICBsZXQgc2VlbiA9IGZhbHNlOwogIHJldHVybiBwcm90b2NvbFN0YXJ0OwogIGZ1bmN0aW9uIHByb3RvY29sU3RhcnQoY29kZTQpIHsKICAgIGlmICgoY29kZTQgPT09IDcyIHx8IGNvZGU0ID09PSAxMDQpICYmIHByZXZpb3VzUHJvdG9jb2wuY2FsbChzZWxmMiwgc2VsZjIucHJldmlvdXMpICYmICFwcmV2aW91c1VuYmFsYW5jZWQoc2VsZjIuZXZlbnRzKSkgewogICAgICBlZmZlY3RzLmVudGVyKCJsaXRlcmFsQXV0b2xpbmsiKTsKICAgICAgZWZmZWN0cy5lbnRlcigibGl0ZXJhbEF1dG9saW5rSHR0cCIpOwogICAgICBidWZmZXIyICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGU0KTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHByb3RvY29sUHJlZml4SW5zaWRlOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHByb3RvY29sUHJlZml4SW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoYXNjaWlBbHBoYShjb2RlNCkgJiYgYnVmZmVyMi5sZW5ndGggPCA1KSB7CiAgICAgIGJ1ZmZlcjIgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZTQpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gcHJvdG9jb2xQcmVmaXhJbnNpZGU7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDU4KSB7CiAgICAgIGNvbnN0IHByb3RvY29sID0gYnVmZmVyMi50b0xvd2VyQ2FzZSgpOwogICAgICBpZiAocHJvdG9jb2wgPT09ICJodHRwIiB8fCBwcm90b2NvbCA9PT0gImh0dHBzIikgewogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgcmV0dXJuIHByb3RvY29sU2xhc2hlc0luc2lkZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHByb3RvY29sU2xhc2hlc0luc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBpZiAoc2VlbikgewogICAgICAgIHJldHVybiBhZnRlclByb3RvY29sOwogICAgICB9CiAgICAgIHNlZW4gPSB0cnVlOwogICAgICByZXR1cm4gcHJvdG9jb2xTbGFzaGVzSW5zaWRlOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGFmdGVyUHJvdG9jb2woY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCA9PT0gbnVsbCB8fCBhc2NpaUNvbnRyb2woY29kZTQpIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpIHx8IHVuaWNvZGVXaGl0ZXNwYWNlKGNvZGU0KSB8fCB1bmljb2RlUHVuY3R1YXRpb24oY29kZTQpID8gbm9rKGNvZGU0KSA6IGVmZmVjdHMuYXR0ZW1wdChkb21haW4sIGVmZmVjdHMuYXR0ZW1wdChwYXRoLCBwcm90b2NvbEFmdGVyKSwgbm9rKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHByb3RvY29sQWZ0ZXIoY29kZTQpIHsKICAgIGVmZmVjdHMuZXhpdCgibGl0ZXJhbEF1dG9saW5rSHR0cCIpOwogICAgZWZmZWN0cy5leGl0KCJsaXRlcmFsQXV0b2xpbmsiKTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVd3d1ByZWZpeChlZmZlY3RzLCBvazMsIG5vaykgewogIGxldCBzaXplID0gMDsKICByZXR1cm4gd3d3UHJlZml4SW5zaWRlOwogIGZ1bmN0aW9uIHd3d1ByZWZpeEluc2lkZShjb2RlNCkgewogICAgaWYgKChjb2RlNCA9PT0gODcgfHwgY29kZTQgPT09IDExOSkgJiYgc2l6ZSA8IDMpIHsKICAgICAgc2l6ZSsrOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gd3d3UHJlZml4SW5zaWRlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NiAmJiBzaXplID09PSAzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB3d3dQcmVmaXhBZnRlcjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiB3d3dQcmVmaXhBZnRlcihjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSBudWxsID8gbm9rKGNvZGU0KSA6IG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplRG9tYWluKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgbGV0IHVuZGVyc2NvcmVJbkxhc3RTZWdtZW50OwogIGxldCB1bmRlcnNjb3JlSW5MYXN0TGFzdFNlZ21lbnQ7CiAgbGV0IHNlZW47CiAgcmV0dXJuIGRvbWFpbkluc2lkZTsKICBmdW5jdGlvbiBkb21haW5JbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDYgfHwgY29kZTQgPT09IDk1KSB7CiAgICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKHRyYWlsLCBkb21haW5BZnRlciwgZG9tYWluQXRQdW5jdHVhdGlvbikoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpIHx8IHVuaWNvZGVXaGl0ZXNwYWNlKGNvZGU0KSB8fCBjb2RlNCAhPT0gNDUgJiYgdW5pY29kZVB1bmN0dWF0aW9uKGNvZGU0KSkgewogICAgICByZXR1cm4gZG9tYWluQWZ0ZXIoY29kZTQpOwogICAgfQogICAgc2VlbiA9IHRydWU7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGRvbWFpbkluc2lkZTsKICB9CiAgZnVuY3Rpb24gZG9tYWluQXRQdW5jdHVhdGlvbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5NSkgewogICAgICB1bmRlcnNjb3JlSW5MYXN0U2VnbWVudCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICB1bmRlcnNjb3JlSW5MYXN0TGFzdFNlZ21lbnQgPSB1bmRlcnNjb3JlSW5MYXN0U2VnbWVudDsKICAgICAgdW5kZXJzY29yZUluTGFzdFNlZ21lbnQgPSB2b2lkIDA7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGRvbWFpbkluc2lkZTsKICB9CiAgZnVuY3Rpb24gZG9tYWluQWZ0ZXIoY29kZTQpIHsKICAgIGlmICh1bmRlcnNjb3JlSW5MYXN0TGFzdFNlZ21lbnQgfHwgdW5kZXJzY29yZUluTGFzdFNlZ21lbnQgfHwgIXNlZW4pIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVQYXRoKGVmZmVjdHMsIG9rMykgewogIGxldCBzaXplT3BlbiA9IDA7CiAgbGV0IHNpemVDbG9zZSA9IDA7CiAgcmV0dXJuIHBhdGhJbnNpZGU7CiAgZnVuY3Rpb24gcGF0aEluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0MCkgewogICAgICBzaXplT3BlbisrOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gcGF0aEluc2lkZTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDEgJiYgc2l6ZUNsb3NlIDwgc2l6ZU9wZW4pIHsKICAgICAgcmV0dXJuIHBhdGhBdFB1bmN0dWF0aW9uKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gMzMgfHwgY29kZTQgPT09IDM0IHx8IGNvZGU0ID09PSAzOCB8fCBjb2RlNCA9PT0gMzkgfHwgY29kZTQgPT09IDQxIHx8IGNvZGU0ID09PSA0MiB8fCBjb2RlNCA9PT0gNDQgfHwgY29kZTQgPT09IDQ2IHx8IGNvZGU0ID09PSA1OCB8fCBjb2RlNCA9PT0gNTkgfHwgY29kZTQgPT09IDYwIHx8IGNvZGU0ID09PSA2MyB8fCBjb2RlNCA9PT0gOTMgfHwgY29kZTQgPT09IDk1IHx8IGNvZGU0ID09PSAxMjYpIHsKICAgICAgcmV0dXJuIGVmZmVjdHMuY2hlY2sodHJhaWwsIG9rMywgcGF0aEF0UHVuY3R1YXRpb24pKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSB8fCB1bmljb2RlV2hpdGVzcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIHBhdGhJbnNpZGU7CiAgfQogIGZ1bmN0aW9uIHBhdGhBdFB1bmN0dWF0aW9uKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQxKSB7CiAgICAgIHNpemVDbG9zZSsrOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBwYXRoSW5zaWRlOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVRyYWlsKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIHRyYWlsMjsKICBmdW5jdGlvbiB0cmFpbDIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMzMgfHwgY29kZTQgPT09IDM0IHx8IGNvZGU0ID09PSAzOSB8fCBjb2RlNCA9PT0gNDEgfHwgY29kZTQgPT09IDQyIHx8IGNvZGU0ID09PSA0NCB8fCBjb2RlNCA9PT0gNDYgfHwgY29kZTQgPT09IDU4IHx8IGNvZGU0ID09PSA1OSB8fCBjb2RlNCA9PT0gNjMgfHwgY29kZTQgPT09IDk1IHx8IGNvZGU0ID09PSAxMjYpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRyYWlsMjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gMzgpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRyYWlsQ2hhcmFjdGVyUmVmZXJlbmNlU3RhcnQ7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0cmFpbEJyYWNrZXRBZnRlcjsKICAgIH0KICAgIGlmICgKICAgICAgLy8gYDxgIGlzIGFuIGVuZC4KICAgICAgY29kZTQgPT09IDYwIHx8IC8vIFNvIGlzIHdoaXRlc3BhY2UuCiAgICAgIGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpIHx8IHVuaWNvZGVXaGl0ZXNwYWNlKGNvZGU0KQogICAgKSB7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRyYWlsQnJhY2tldEFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDQwIHx8IGNvZGU0ID09PSA5MSB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSB8fCB1bmljb2RlV2hpdGVzcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gdHJhaWwyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdHJhaWxDaGFyYWN0ZXJSZWZlcmVuY2VTdGFydChjb2RlNCkgewogICAgcmV0dXJuIGFzY2lpQWxwaGEoY29kZTQpID8gdHJhaWxDaGFyYWN0ZXJSZWZlcmVuY2VJbnNpZGUoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdHJhaWxDaGFyYWN0ZXJSZWZlcmVuY2VJbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNTkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRyYWlsMjsKICAgIH0KICAgIGlmIChhc2NpaUFscGhhKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdHJhaWxDaGFyYWN0ZXJSZWZlcmVuY2VJbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVFbWFpbERvbWFpbkRvdFRyYWlsKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGFmdGVyOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgcmV0dXJuIGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSA/IG5vayhjb2RlNCkgOiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiBwcmV2aW91c1d3dyhjb2RlNCkgewogIHJldHVybiBjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gNDAgfHwgY29kZTQgPT09IDQyIHx8IGNvZGU0ID09PSA5NSB8fCBjb2RlNCA9PT0gOTEgfHwgY29kZTQgPT09IDkzIHx8IGNvZGU0ID09PSAxMjYgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCk7Cn0KZnVuY3Rpb24gcHJldmlvdXNQcm90b2NvbChjb2RlNCkgewogIHJldHVybiAhYXNjaWlBbHBoYShjb2RlNCk7Cn0KZnVuY3Rpb24gcHJldmlvdXNFbWFpbChjb2RlNCkgewogIHJldHVybiAhKGNvZGU0ID09PSA0NyB8fCBnZm1BdGV4dChjb2RlNCkpOwp9CmZ1bmN0aW9uIGdmbUF0ZXh0KGNvZGU0KSB7CiAgcmV0dXJuIGNvZGU0ID09PSA0MyB8fCBjb2RlNCA9PT0gNDUgfHwgY29kZTQgPT09IDQ2IHx8IGNvZGU0ID09PSA5NSB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCk7Cn0KZnVuY3Rpb24gcHJldmlvdXNVbmJhbGFuY2VkKGV2ZW50cykgewogIGxldCBpbmRleDIgPSBldmVudHMubGVuZ3RoOwogIGxldCByZXN1bHQgPSBmYWxzZTsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIGNvbnN0IHRva2VuID0gZXZlbnRzW2luZGV4Ml1bMV07CiAgICBpZiAoKHRva2VuLnR5cGUgPT09ICJsYWJlbExpbmsiIHx8IHRva2VuLnR5cGUgPT09ICJsYWJlbEltYWdlIikgJiYgIXRva2VuLl9iYWxhbmNlZCkgewogICAgICByZXN1bHQgPSB0cnVlOwogICAgICBicmVhazsKICAgIH0KICAgIGlmICh0b2tlbi5fZ2ZtQXV0b2xpbmtMaXRlcmFsV2Fsa2VkSW50bykgewogICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgYnJlYWs7CiAgICB9CiAgfQogIGlmIChldmVudHMubGVuZ3RoID4gMCAmJiAhcmVzdWx0KSB7CiAgICBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLl9nZm1BdXRvbGlua0xpdGVyYWxXYWxrZWRJbnRvID0gdHJ1ZTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgd3d3UHJlZml4LCBkb21haW4sIHBhdGgsIHRyYWlsLCBlbWFpbERvbWFpbkRvdFRyYWlsLCB3d3dBdXRvbGluaywgcHJvdG9jb2xBdXRvbGluaywgZW1haWxBdXRvbGluaywgdGV4dDIsIGNvZGUyOwp2YXIgaW5pdF9zeW50YXggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsL2xpYi9zeW50YXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIHd3d1ByZWZpeCA9IHsKICAgICAgdG9rZW5pemU6IHRva2VuaXplV3d3UHJlZml4LAogICAgICBwYXJ0aWFsOiB0cnVlCiAgICB9OwogICAgZG9tYWluID0gewogICAgICB0b2tlbml6ZTogdG9rZW5pemVEb21haW4sCiAgICAgIHBhcnRpYWw6IHRydWUKICAgIH07CiAgICBwYXRoID0gewogICAgICB0b2tlbml6ZTogdG9rZW5pemVQYXRoLAogICAgICBwYXJ0aWFsOiB0cnVlCiAgICB9OwogICAgdHJhaWwgPSB7CiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVRyYWlsLAogICAgICBwYXJ0aWFsOiB0cnVlCiAgICB9OwogICAgZW1haWxEb21haW5Eb3RUcmFpbCA9IHsKICAgICAgdG9rZW5pemU6IHRva2VuaXplRW1haWxEb21haW5Eb3RUcmFpbCwKICAgICAgcGFydGlhbDogdHJ1ZQogICAgfTsKICAgIHd3d0F1dG9saW5rID0gewogICAgICBuYW1lOiAid3d3QXV0b2xpbmsiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVXd3dBdXRvbGluaywKICAgICAgcHJldmlvdXM6IHByZXZpb3VzV3d3CiAgICB9OwogICAgcHJvdG9jb2xBdXRvbGluayA9IHsKICAgICAgbmFtZTogInByb3RvY29sQXV0b2xpbmsiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVQcm90b2NvbEF1dG9saW5rLAogICAgICBwcmV2aW91czogcHJldmlvdXNQcm90b2NvbAogICAgfTsKICAgIGVtYWlsQXV0b2xpbmsgPSB7CiAgICAgIG5hbWU6ICJlbWFpbEF1dG9saW5rIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplRW1haWxBdXRvbGluaywKICAgICAgcHJldmlvdXM6IHByZXZpb3VzRW1haWwKICAgIH07CiAgICB0ZXh0MiA9IHt9OwogICAgY29kZTIgPSA0ODsKICAgIHdoaWxlIChjb2RlMiA8IDEyMykgewogICAgICB0ZXh0Mltjb2RlMl0gPSBlbWFpbEF1dG9saW5rOwogICAgICBjb2RlMisrOwogICAgICBpZiAoY29kZTIgPT09IDU4KSBjb2RlMiA9IDY1OwogICAgICBlbHNlIGlmIChjb2RlMiA9PT0gOTEpIGNvZGUyID0gOTc7CiAgICB9CiAgICB0ZXh0Mls0M10gPSBlbWFpbEF1dG9saW5rOwogICAgdGV4dDJbNDVdID0gZW1haWxBdXRvbGluazsKICAgIHRleHQyWzQ2XSA9IGVtYWlsQXV0b2xpbms7CiAgICB0ZXh0Mls5NV0gPSBlbWFpbEF1dG9saW5rOwogICAgdGV4dDJbNzJdID0gW2VtYWlsQXV0b2xpbmssIHByb3RvY29sQXV0b2xpbmtdOwogICAgdGV4dDJbMTA0XSA9IFtlbWFpbEF1dG9saW5rLCBwcm90b2NvbEF1dG9saW5rXTsKICAgIHRleHQyWzg3XSA9IFtlbWFpbEF1dG9saW5rLCB3d3dBdXRvbGlua107CiAgICB0ZXh0MlsxMTldID0gW2VtYWlsQXV0b2xpbmssIHd3d0F1dG9saW5rXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWVuY29kZUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtZW5jb2RlL2luZGV4LmpzCmZ1bmN0aW9uIGVuY29kZSh2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyLnJlcGxhY2UoL1siJjw+XS9nLCByZXBsYWNlNSk7CiAgZnVuY3Rpb24gcmVwbGFjZTUodmFsdWUzKSB7CiAgICByZXR1cm4gIiYiICsgY2hhcmFjdGVyUmVmZXJlbmNlc1sKICAgICAgLyoqIEB0eXBlIHtrZXlvZiB0eXBlb2YgY2hhcmFjdGVyUmVmZXJlbmNlc30gKi8KICAgICAgdmFsdWUzCiAgICBdICsgIjsiOwogIH0KfQp2YXIgY2hhcmFjdGVyUmVmZXJlbmNlczsKdmFyIGluaXRfbWljcm9tYXJrX3V0aWxfZW5jb2RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtZW5jb2RlQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1lbmNvZGUvaW5kZXguanMiKCkgewogICAgY2hhcmFjdGVyUmVmZXJlbmNlcyA9IHsgJyInOiAicXVvdCIsICImIjogImFtcCIsICI8IjogImx0IiwgIj4iOiAiZ3QiIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1zYW5pdGl6ZS11cmlAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXNhbml0aXplLXVyaS9pbmRleC5qcwpmdW5jdGlvbiBzYW5pdGl6ZVVyaSh1cmwsIHByb3RvY29sKSB7CiAgY29uc3QgdmFsdWUyID0gZW5jb2RlKG5vcm1hbGl6ZVVyaSh1cmwgfHwgIiIpKTsKICBpZiAoIXByb3RvY29sKSB7CiAgICByZXR1cm4gdmFsdWUyOwogIH0KICBjb25zdCBjb2xvbiA9IHZhbHVlMi5pbmRleE9mKCI6Iik7CiAgY29uc3QgcXVlc3Rpb25NYXJrID0gdmFsdWUyLmluZGV4T2YoIj8iKTsKICBjb25zdCBudW1iZXJTaWduID0gdmFsdWUyLmluZGV4T2YoIiMiKTsKICBjb25zdCBzbGFzaCA9IHZhbHVlMi5pbmRleE9mKCIvIik7CiAgaWYgKAogICAgLy8gSWYgdGhlcmUgaXMgbm8gcHJvdG9jb2wsIGl04oCZcyByZWxhdGl2ZS4KICAgIGNvbG9uIDwgMCB8fCAvLyBJZiB0aGUgZmlyc3QgY29sb24gaXMgYWZ0ZXIgYSBgP2AsIGAjYCwgb3IgYC9gLCBpdOKAmXMgbm90IGEgcHJvdG9jb2wuCiAgICBzbGFzaCA+IC0xICYmIGNvbG9uID4gc2xhc2ggfHwgcXVlc3Rpb25NYXJrID4gLTEgJiYgY29sb24gPiBxdWVzdGlvbk1hcmsgfHwgbnVtYmVyU2lnbiA+IC0xICYmIGNvbG9uID4gbnVtYmVyU2lnbiB8fCAvLyBJdCBpcyBhIHByb3RvY29sLCBpdCBzaG91bGQgYmUgYWxsb3dlZC4KICAgIHByb3RvY29sLnRlc3QodmFsdWUyLnNsaWNlKDAsIGNvbG9uKSkKICApIHsKICAgIHJldHVybiB2YWx1ZTI7CiAgfQogIHJldHVybiAiIjsKfQpmdW5jdGlvbiBub3JtYWxpemVVcmkodmFsdWUyKSB7CiAgY29uc3QgcmVzdWx0ID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBzdGFydCA9IDA7CiAgbGV0IHNraXAyID0gMDsKICB3aGlsZSAoKytpbmRleDIgPCB2YWx1ZTIubGVuZ3RoKSB7CiAgICBjb25zdCBjb2RlNCA9IHZhbHVlMi5jaGFyQ29kZUF0KGluZGV4Mik7CiAgICBsZXQgcmVwbGFjZTUgPSAiIjsKICAgIGlmIChjb2RlNCA9PT0gMzcgJiYgYXNjaWlBbHBoYW51bWVyaWModmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyICsgMSkpICYmIGFzY2lpQWxwaGFudW1lcmljKHZhbHVlMi5jaGFyQ29kZUF0KGluZGV4MiArIDIpKSkgewogICAgICBza2lwMiA9IDI7CiAgICB9IGVsc2UgaWYgKGNvZGU0IDwgMTI4KSB7CiAgICAgIGlmICghL1shIyQmLTs9Py1aX2Eten5dLy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTQpKSkgewogICAgICAgIHJlcGxhY2U1ID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlNCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY29kZTQgPiA1NTI5NSAmJiBjb2RlNCA8IDU3MzQ0KSB7CiAgICAgIGNvbnN0IG5leHQyID0gdmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyICsgMSk7CiAgICAgIGlmIChjb2RlNCA8IDU2MzIwICYmIG5leHQyID4gNTYzMTkgJiYgbmV4dDIgPCA1NzM0NCkgewogICAgICAgIHJlcGxhY2U1ID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlNCwgbmV4dDIpOwogICAgICAgIHNraXAyID0gMTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXBsYWNlNSA9ICJcdUZGRkQiOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXBsYWNlNSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTQpOwogICAgfQogICAgaWYgKHJlcGxhY2U1KSB7CiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlMi5zbGljZShzdGFydCwgaW5kZXgyKSwgZW5jb2RlVVJJQ29tcG9uZW50KHJlcGxhY2U1KSk7CiAgICAgIHN0YXJ0ID0gaW5kZXgyICsgc2tpcDIgKyAxOwogICAgICByZXBsYWNlNSA9ICIiOwogICAgfQogICAgaWYgKHNraXAyKSB7CiAgICAgIGluZGV4MiArPSBza2lwMjsKICAgICAgc2tpcDIgPSAwOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0LmpvaW4oIiIpICsgdmFsdWUyLnNsaWNlKHN0YXJ0KTsKfQp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9zYW5pdGl6ZV91cmkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1zYW5pdGl6ZS11cmlAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXNhbml0aXplLXVyaS9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9lbmNvZGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWwvbGliL2h0bWwuanMKZnVuY3Rpb24gZ2ZtQXV0b2xpbmtMaXRlcmFsSHRtbCgpIHsKICByZXR1cm4gewogICAgZXhpdDogewogICAgICBsaXRlcmFsQXV0b2xpbmtFbWFpbCwKICAgICAgbGl0ZXJhbEF1dG9saW5rSHR0cCwKICAgICAgbGl0ZXJhbEF1dG9saW5rV3d3CiAgICB9CiAgfTsKfQpmdW5jdGlvbiBsaXRlcmFsQXV0b2xpbmtXd3codG9rZW4pIHsKICBhbmNob3JGcm9tVG9rZW4uY2FsbCh0aGlzLCB0b2tlbiwgImh0dHA6Ly8iKTsKfQpmdW5jdGlvbiBsaXRlcmFsQXV0b2xpbmtFbWFpbCh0b2tlbikgewogIGFuY2hvckZyb21Ub2tlbi5jYWxsKHRoaXMsIHRva2VuLCAibWFpbHRvOiIpOwp9CmZ1bmN0aW9uIGxpdGVyYWxBdXRvbGlua0h0dHAodG9rZW4pIHsKICBhbmNob3JGcm9tVG9rZW4uY2FsbCh0aGlzLCB0b2tlbik7Cn0KZnVuY3Rpb24gYW5jaG9yRnJvbVRva2VuKHRva2VuLCBwcm90b2NvbCkgewogIGNvbnN0IHVybCA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogIHRoaXMudGFnKCc8YSBocmVmPSInICsgc2FuaXRpemVVcmkoKHByb3RvY29sIHx8ICIiKSArIHVybCkgKyAnIj4nKTsKICB0aGlzLnJhdyh0aGlzLmVuY29kZSh1cmwpKTsKICB0aGlzLnRhZygiPC9hPiIpOwp9CnZhciBpbml0X2h0bWwyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbC9saWIvaHRtbC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Nhbml0aXplX3VyaSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbC9pbmRleC5qcwp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV9hdXRvbGlua19saXRlcmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbC9pbmRleC5qcyIoKSB7CiAgICBpbml0X3N5bnRheCgpOwogICAgaW5pdF9odG1sMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtcmVzb2x2ZS1hbGxAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXJlc29sdmUtYWxsL2luZGV4LmpzCmZ1bmN0aW9uIHJlc29sdmVBbGwoY29uc3RydWN0czIsIGV2ZW50cywgY29udGV4dDIpIHsKICBjb25zdCBjYWxsZWQgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgY29uc3RydWN0czIubGVuZ3RoKSB7CiAgICBjb25zdCByZXNvbHZlMiA9IGNvbnN0cnVjdHMyW2luZGV4Ml0ucmVzb2x2ZUFsbDsKICAgIGlmIChyZXNvbHZlMiAmJiAhY2FsbGVkLmluY2x1ZGVzKHJlc29sdmUyKSkgewogICAgICBldmVudHMgPSByZXNvbHZlMihldmVudHMsIGNvbnRleHQyKTsKICAgICAgY2FsbGVkLnB1c2gocmVzb2x2ZTIpOwogICAgfQogIH0KICByZXR1cm4gZXZlbnRzOwp9CnZhciBpbml0X21pY3JvbWFya191dGlsX3Jlc29sdmVfYWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtcmVzb2x2ZS1hbGxAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXJlc29sdmUtYWxsL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2F0dGVudGlvbi5qcwpmdW5jdGlvbiByZXNvbHZlQWxsQXR0ZW50aW9uKGV2ZW50cywgY29udGV4dDIpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IG9wZW47CiAgbGV0IGdyb3VwOwogIGxldCB0ZXh0OTsKICBsZXQgb3BlbmluZ1NlcXVlbmNlOwogIGxldCBjbG9zaW5nU2VxdWVuY2U7CiAgbGV0IHVzZTsKICBsZXQgbmV4dEV2ZW50czsKICBsZXQgb2Zmc2V0OwogIHdoaWxlICgrK2luZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIiAmJiBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAiYXR0ZW50aW9uU2VxdWVuY2UiICYmIGV2ZW50c1tpbmRleDJdWzFdLl9jbG9zZSkgewogICAgICBvcGVuID0gaW5kZXgyOwogICAgICB3aGlsZSAob3Blbi0tKSB7CiAgICAgICAgaWYgKGV2ZW50c1tvcGVuXVswXSA9PT0gImV4aXQiICYmIGV2ZW50c1tvcGVuXVsxXS50eXBlID09PSAiYXR0ZW50aW9uU2VxdWVuY2UiICYmIGV2ZW50c1tvcGVuXVsxXS5fb3BlbiAmJiAvLyBJZiB0aGUgbWFya2VycyBhcmUgdGhlIHNhbWU6CiAgICAgICAgY29udGV4dDIuc2xpY2VTZXJpYWxpemUoZXZlbnRzW29wZW5dWzFdKS5jaGFyQ29kZUF0KDApID09PSBjb250ZXh0Mi5zbGljZVNlcmlhbGl6ZShldmVudHNbaW5kZXgyXVsxXSkuY2hhckNvZGVBdCgwKSkgewogICAgICAgICAgaWYgKChldmVudHNbb3Blbl1bMV0uX2Nsb3NlIHx8IGV2ZW50c1tpbmRleDJdWzFdLl9vcGVuKSAmJiAoZXZlbnRzW2luZGV4Ml1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0Lm9mZnNldCkgJSAzICYmICEoKGV2ZW50c1tvcGVuXVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW29wZW5dWzFdLnN0YXJ0Lm9mZnNldCArIGV2ZW50c1tpbmRleDJdWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbaW5kZXgyXVsxXS5zdGFydC5vZmZzZXQpICUgMykpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICB1c2UgPSBldmVudHNbb3Blbl1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tvcGVuXVsxXS5zdGFydC5vZmZzZXQgPiAxICYmIGV2ZW50c1tpbmRleDJdWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbaW5kZXgyXVsxXS5zdGFydC5vZmZzZXQgPiAxID8gMiA6IDE7CiAgICAgICAgICBjb25zdCBzdGFydCA9IHsKICAgICAgICAgICAgLi4uZXZlbnRzW29wZW5dWzFdLmVuZAogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IGVuZDMgPSB7CiAgICAgICAgICAgIC4uLmV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0CiAgICAgICAgICB9OwogICAgICAgICAgbW92ZVBvaW50KHN0YXJ0LCAtdXNlKTsKICAgICAgICAgIG1vdmVQb2ludChlbmQzLCB1c2UpOwogICAgICAgICAgb3BlbmluZ1NlcXVlbmNlID0gewogICAgICAgICAgICB0eXBlOiB1c2UgPiAxID8gInN0cm9uZ1NlcXVlbmNlIiA6ICJlbXBoYXNpc1NlcXVlbmNlIiwKICAgICAgICAgICAgc3RhcnQsCiAgICAgICAgICAgIGVuZDogewogICAgICAgICAgICAgIC4uLmV2ZW50c1tvcGVuXVsxXS5lbmQKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIGNsb3NpbmdTZXF1ZW5jZSA9IHsKICAgICAgICAgICAgdHlwZTogdXNlID4gMSA/ICJzdHJvbmdTZXF1ZW5jZSIgOiAiZW1waGFzaXNTZXF1ZW5jZSIsCiAgICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgICAgLi4uZXZlbnRzW2luZGV4Ml1bMV0uc3RhcnQKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZW5kOiBlbmQzCiAgICAgICAgICB9OwogICAgICAgICAgdGV4dDkgPSB7CiAgICAgICAgICAgIHR5cGU6IHVzZSA+IDEgPyAic3Ryb25nVGV4dCIgOiAiZW1waGFzaXNUZXh0IiwKICAgICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgICAuLi5ldmVudHNbb3Blbl1bMV0uZW5kCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGVuZDogewogICAgICAgICAgICAgIC4uLmV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBncm91cCA9IHsKICAgICAgICAgICAgdHlwZTogdXNlID4gMSA/ICJzdHJvbmciIDogImVtcGhhc2lzIiwKICAgICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgICAuLi5vcGVuaW5nU2VxdWVuY2Uuc3RhcnQKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgICAgLi4uY2xvc2luZ1NlcXVlbmNlLmVuZAogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgZXZlbnRzW29wZW5dWzFdLmVuZCA9IHsKICAgICAgICAgICAgLi4ub3BlbmluZ1NlcXVlbmNlLnN0YXJ0CiAgICAgICAgICB9OwogICAgICAgICAgZXZlbnRzW2luZGV4Ml1bMV0uc3RhcnQgPSB7CiAgICAgICAgICAgIC4uLmNsb3NpbmdTZXF1ZW5jZS5lbmQKICAgICAgICAgIH07CiAgICAgICAgICBuZXh0RXZlbnRzID0gW107CiAgICAgICAgICBpZiAoZXZlbnRzW29wZW5dWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbb3Blbl1bMV0uc3RhcnQub2Zmc2V0KSB7CiAgICAgICAgICAgIG5leHRFdmVudHMgPSBwdXNoKG5leHRFdmVudHMsIFtbImVudGVyIiwgZXZlbnRzW29wZW5dWzFdLCBjb250ZXh0Ml0sIFsiZXhpdCIsIGV2ZW50c1tvcGVuXVsxXSwgY29udGV4dDJdXSk7CiAgICAgICAgICB9CiAgICAgICAgICBuZXh0RXZlbnRzID0gcHVzaChuZXh0RXZlbnRzLCBbWyJlbnRlciIsIGdyb3VwLCBjb250ZXh0Ml0sIFsiZW50ZXIiLCBvcGVuaW5nU2VxdWVuY2UsIGNvbnRleHQyXSwgWyJleGl0Iiwgb3BlbmluZ1NlcXVlbmNlLCBjb250ZXh0Ml0sIFsiZW50ZXIiLCB0ZXh0OSwgY29udGV4dDJdXSk7CiAgICAgICAgICBuZXh0RXZlbnRzID0gcHVzaChuZXh0RXZlbnRzLCByZXNvbHZlQWxsKGNvbnRleHQyLnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbCwgZXZlbnRzLnNsaWNlKG9wZW4gKyAxLCBpbmRleDIpLCBjb250ZXh0MikpOwogICAgICAgICAgbmV4dEV2ZW50cyA9IHB1c2gobmV4dEV2ZW50cywgW1siZXhpdCIsIHRleHQ5LCBjb250ZXh0Ml0sIFsiZW50ZXIiLCBjbG9zaW5nU2VxdWVuY2UsIGNvbnRleHQyXSwgWyJleGl0IiwgY2xvc2luZ1NlcXVlbmNlLCBjb250ZXh0Ml0sIFsiZXhpdCIsIGdyb3VwLCBjb250ZXh0Ml1dKTsKICAgICAgICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW2luZGV4Ml1bMV0uc3RhcnQub2Zmc2V0KSB7CiAgICAgICAgICAgIG9mZnNldCA9IDI7CiAgICAgICAgICAgIG5leHRFdmVudHMgPSBwdXNoKG5leHRFdmVudHMsIFtbImVudGVyIiwgZXZlbnRzW2luZGV4Ml1bMV0sIGNvbnRleHQyXSwgWyJleGl0IiwgZXZlbnRzW2luZGV4Ml1bMV0sIGNvbnRleHQyXV0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb2Zmc2V0ID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIHNwbGljZShldmVudHMsIG9wZW4gLSAxLCBpbmRleDIgLSBvcGVuICsgMywgbmV4dEV2ZW50cyk7CiAgICAgICAgICBpbmRleDIgPSBvcGVuICsgbmV4dEV2ZW50cy5sZW5ndGggLSBvZmZzZXQgLSAyOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAiYXR0ZW50aW9uU2VxdWVuY2UiKSB7CiAgICAgIGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPSAiZGF0YSI7CiAgICB9CiAgfQogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gdG9rZW5pemVBdHRlbnRpb24oZWZmZWN0cywgb2szKSB7CiAgY29uc3QgYXR0ZW50aW9uTWFya2VyczIgPSB0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmF0dGVudGlvbk1hcmtlcnMubnVsbDsKICBjb25zdCBwcmV2aW91czMgPSB0aGlzLnByZXZpb3VzOwogIGNvbnN0IGJlZm9yZSA9IGNsYXNzaWZ5Q2hhcmFjdGVyKHByZXZpb3VzMyk7CiAgbGV0IG1hcmtlcjsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIG1hcmtlciA9IGNvZGU0OwogICAgZWZmZWN0cy5lbnRlcigiYXR0ZW50aW9uU2VxdWVuY2UiKTsKICAgIHJldHVybiBpbnNpZGUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBpbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBpbnNpZGU7CiAgICB9CiAgICBjb25zdCB0b2tlbiA9IGVmZmVjdHMuZXhpdCgiYXR0ZW50aW9uU2VxdWVuY2UiKTsKICAgIGNvbnN0IGFmdGVyID0gY2xhc3NpZnlDaGFyYWN0ZXIoY29kZTQpOwogICAgY29uc3Qgb3BlbiA9ICFhZnRlciB8fCBhZnRlciA9PT0gMiAmJiBiZWZvcmUgfHwgYXR0ZW50aW9uTWFya2VyczIuaW5jbHVkZXMoY29kZTQpOwogICAgY29uc3QgY2xvc2U3ID0gIWJlZm9yZSB8fCBiZWZvcmUgPT09IDIgJiYgYWZ0ZXIgfHwgYXR0ZW50aW9uTWFya2VyczIuaW5jbHVkZXMocHJldmlvdXMzKTsKICAgIHRva2VuLl9vcGVuID0gQm9vbGVhbihtYXJrZXIgPT09IDQyID8gb3BlbiA6IG9wZW4gJiYgKGJlZm9yZSB8fCAhY2xvc2U3KSk7CiAgICB0b2tlbi5fY2xvc2UgPSBCb29sZWFuKG1hcmtlciA9PT0gNDIgPyBjbG9zZTcgOiBjbG9zZTcgJiYgKGFmdGVyIHx8ICFvcGVuKSk7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gbW92ZVBvaW50KHBvaW50NCwgb2Zmc2V0KSB7CiAgcG9pbnQ0LmNvbHVtbiArPSBvZmZzZXQ7CiAgcG9pbnQ0Lm9mZnNldCArPSBvZmZzZXQ7CiAgcG9pbnQ0Ll9idWZmZXJJbmRleCArPSBvZmZzZXQ7Cn0KdmFyIGF0dGVudGlvbjsKdmFyIGluaXRfYXR0ZW50aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYXR0ZW50aW9uLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jbGFzc2lmeV9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfcmVzb2x2ZV9hbGwoKTsKICAgIGF0dGVudGlvbiA9IHsKICAgICAgbmFtZTogImF0dGVudGlvbiIsCiAgICAgIHJlc29sdmVBbGw6IHJlc29sdmVBbGxBdHRlbnRpb24sCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUF0dGVudGlvbgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2F1dG9saW5rLmpzCmZ1bmN0aW9uIHRva2VuaXplQXV0b2xpbmsoZWZmZWN0cywgb2szLCBub2spIHsKICBsZXQgc2l6ZSA9IDA7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJhdXRvbGluayIpOwogICAgZWZmZWN0cy5lbnRlcigiYXV0b2xpbmtNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImF1dG9saW5rTWFya2VyIik7CiAgICBlZmZlY3RzLmVudGVyKCJhdXRvbGlua1Byb3RvY29sIik7CiAgICByZXR1cm4gb3BlbjsKICB9CiAgZnVuY3Rpb24gb3Blbihjb2RlNCkgewogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBzY2hlbWVPckVtYWlsQXRleHQ7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDY0KSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgcmV0dXJuIGVtYWlsQXRleHQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBzY2hlbWVPckVtYWlsQXRleHQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDMgfHwgY29kZTQgPT09IDQ1IHx8IGNvZGU0ID09PSA0NiB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCkpIHsKICAgICAgc2l6ZSA9IDE7CiAgICAgIHJldHVybiBzY2hlbWVJbnNpZGVPckVtYWlsQXRleHQoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGVtYWlsQXRleHQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBzY2hlbWVJbnNpZGVPckVtYWlsQXRleHQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNTgpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgc2l6ZSA9IDA7CiAgICAgIHJldHVybiB1cmxJbnNpZGU7CiAgICB9CiAgICBpZiAoKGNvZGU0ID09PSA0MyB8fCBjb2RlNCA9PT0gNDUgfHwgY29kZTQgPT09IDQ2IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgJiYgc2l6ZSsrIDwgMzIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHNjaGVtZUluc2lkZU9yRW1haWxBdGV4dDsKICAgIH0KICAgIHNpemUgPSAwOwogICAgcmV0dXJuIGVtYWlsQXRleHQoY29kZTQpOwogIH0KICBmdW5jdGlvbiB1cmxJbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgZWZmZWN0cy5leGl0KCJhdXRvbGlua1Byb3RvY29sIik7CiAgICAgIGVmZmVjdHMuZW50ZXIoImF1dG9saW5rTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiYXV0b2xpbmtNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5leGl0KCJhdXRvbGluayIpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSAzMiB8fCBjb2RlNCA9PT0gNjAgfHwgYXNjaWlDb250cm9sKGNvZGU0KSkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gdXJsSW5zaWRlOwogIH0KICBmdW5jdGlvbiBlbWFpbEF0ZXh0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDY0KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBlbWFpbEF0U2lnbk9yRG90OwogICAgfQogICAgaWYgKGFzY2lpQXRleHQoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBlbWFpbEF0ZXh0OwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGVtYWlsQXRTaWduT3JEb3QoY29kZTQpIHsKICAgIHJldHVybiBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCkgPyBlbWFpbExhYmVsKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGVtYWlsTGFiZWwoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDYpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgc2l6ZSA9IDA7CiAgICAgIHJldHVybiBlbWFpbEF0U2lnbk9yRG90OwogICAgfQogICAgaWYgKGNvZGU0ID09PSA2MikgewogICAgICBlZmZlY3RzLmV4aXQoImF1dG9saW5rUHJvdG9jb2wiKS50eXBlID0gImF1dG9saW5rRW1haWwiOwogICAgICBlZmZlY3RzLmVudGVyKCJhdXRvbGlua01hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImF1dG9saW5rTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiYXV0b2xpbmsiKTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIHJldHVybiBlbWFpbFZhbHVlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZW1haWxWYWx1ZShjb2RlNCkgewogICAgaWYgKChjb2RlNCA9PT0gNDUgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpKSAmJiBzaXplKysgPCA2MykgewogICAgICBjb25zdCBuZXh0MiA9IGNvZGU0ID09PSA0NSA/IGVtYWlsVmFsdWUgOiBlbWFpbExhYmVsOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gbmV4dDI7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGF1dG9saW5rOwp2YXIgaW5pdF9hdXRvbGluayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2F1dG9saW5rLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBhdXRvbGluayA9IHsKICAgICAgbmFtZTogImF1dG9saW5rIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQXV0b2xpbmsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS1zcGFjZUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UvaW5kZXguanMKZnVuY3Rpb24gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIG9rMywgdHlwZTUsIG1heDMpIHsKICBjb25zdCBsaW1pdCA9IG1heDMgPyBtYXgzIC0gMSA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKICBsZXQgc2l6ZSA9IDA7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcih0eXBlNSk7CiAgICAgIHJldHVybiBwcmVmaXg0KGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KICBmdW5jdGlvbiBwcmVmaXg0KGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkgJiYgc2l6ZSsrIDwgbGltaXQpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHByZWZpeDQ7CiAgICB9CiAgICBlZmZlY3RzLmV4aXQodHlwZTUpOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQp9CnZhciBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3Rvcnktc3BhY2VAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXNwYWNlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9ibGFuay1saW5lLmpzCmZ1bmN0aW9uIHRva2VuaXplQmxhbmtMaW5lKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlNCkgPyBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYWZ0ZXIsICJsaW5lUHJlZml4IikoY29kZTQpIDogYWZ0ZXIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkgPyBvazMoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGJsYW5rTGluZTsKdmFyIGluaXRfYmxhbmtfbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2JsYW5rLWxpbmUuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGJsYW5rTGluZSA9IHsKICAgICAgcGFydGlhbDogdHJ1ZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQmxhbmtMaW5lCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYmxvY2stcXVvdGUuanMKZnVuY3Rpb24gdG9rZW5pemVCbG9ja1F1b3RlU3RhcnQoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGNvbnN0IHN0YXRlMTQgPSBzZWxmMi5jb250YWluZXJTdGF0ZTsKICAgICAgaWYgKCFzdGF0ZTE0Lm9wZW4pIHsKICAgICAgICBlZmZlY3RzLmVudGVyKCJibG9ja1F1b3RlIiwgewogICAgICAgICAgX2NvbnRhaW5lcjogdHJ1ZQogICAgICAgIH0pOwogICAgICAgIHN0YXRlMTQub3BlbiA9IHRydWU7CiAgICAgIH0KICAgICAgZWZmZWN0cy5lbnRlcigiYmxvY2tRdW90ZVByZWZpeCIpOwogICAgICBlZmZlY3RzLmVudGVyKCJibG9ja1F1b3RlTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiYmxvY2tRdW90ZU1hcmtlciIpOwogICAgICByZXR1cm4gYWZ0ZXI7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmVudGVyKCJibG9ja1F1b3RlUHJlZml4V2hpdGVzcGFjZSIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiYmxvY2tRdW90ZVByZWZpeCIpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgZWZmZWN0cy5leGl0KCJibG9ja1F1b3RlUHJlZml4Iik7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVCbG9ja1F1b3RlQ29udGludWF0aW9uKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiBjb250U3RhcnQ7CiAgZnVuY3Rpb24gY29udFN0YXJ0KGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBjb250QmVmb3JlLCAibGluZVByZWZpeCIsIHNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIikgPyB2b2lkIDAgOiA0KShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gY29udEJlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRCZWZvcmUoY29kZTQpIHsKICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoYmxvY2tRdW90ZSwgb2szLCBub2spKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gZXhpdDIoZWZmZWN0cykgewogIGVmZmVjdHMuZXhpdCgiYmxvY2tRdW90ZSIpOwp9CnZhciBibG9ja1F1b3RlOwp2YXIgaW5pdF9ibG9ja19xdW90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2Jsb2NrLXF1b3RlLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBibG9ja1F1b3RlID0gewogICAgICBjb250aW51YXRpb246IHsKICAgICAgICB0b2tlbml6ZTogdG9rZW5pemVCbG9ja1F1b3RlQ29udGludWF0aW9uCiAgICAgIH0sCiAgICAgIGV4aXQ6IGV4aXQyLAogICAgICBuYW1lOiAiYmxvY2tRdW90ZSIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUJsb2NrUXVvdGVTdGFydAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NoYXJhY3Rlci1lc2NhcGUuanMKZnVuY3Rpb24gdG9rZW5pemVDaGFyYWN0ZXJFc2NhcGUoZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlckVzY2FwZSIpOwogICAgZWZmZWN0cy5lbnRlcigiZXNjYXBlTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJlc2NhcGVNYXJrZXIiKTsKICAgIHJldHVybiBpbnNpZGU7CiAgfQogIGZ1bmN0aW9uIGluc2lkZShjb2RlNCkgewogICAgaWYgKGFzY2lpUHVuY3R1YXRpb24oY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlckVzY2FwZVZhbHVlIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2hhcmFjdGVyRXNjYXBlVmFsdWUiKTsKICAgICAgZWZmZWN0cy5leGl0KCJjaGFyYWN0ZXJFc2NhcGUiKTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQp2YXIgY2hhcmFjdGVyRXNjYXBlOwp2YXIgaW5pdF9jaGFyYWN0ZXJfZXNjYXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY2hhcmFjdGVyLWVzY2FwZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgY2hhcmFjdGVyRXNjYXBlID0gewogICAgICBuYW1lOiAiY2hhcmFjdGVyRXNjYXBlIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQ2hhcmFjdGVyRXNjYXBlCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY2hhcmFjdGVyLXJlZmVyZW5jZS5qcwpmdW5jdGlvbiB0b2tlbml6ZUNoYXJhY3RlclJlZmVyZW5jZShlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBsZXQgc2l6ZSA9IDA7CiAgbGV0IG1heDM7CiAgbGV0IHRlc3Q7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2UiKTsKICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIik7CiAgICByZXR1cm4gb3BlbjsKICB9CiAgZnVuY3Rpb24gb3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAzNSkgewogICAgICBlZmZlY3RzLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYyIpOwogICAgICByZXR1cm4gbnVtZXJpYzsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIik7CiAgICBtYXgzID0gMzE7CiAgICB0ZXN0ID0gYXNjaWlBbHBoYW51bWVyaWM7CiAgICByZXR1cm4gdmFsdWUyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbnVtZXJpYyhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA4OCB8fCBjb2RlNCA9PT0gMTIwKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWwiKTsKICAgICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKTsKICAgICAgbWF4MyA9IDY7CiAgICAgIHRlc3QgPSBhc2NpaUhleERpZ2l0OwogICAgICByZXR1cm4gdmFsdWUyOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKTsKICAgIG1heDMgPSA3OwogICAgdGVzdCA9IGFzY2lpRGlnaXQ7CiAgICByZXR1cm4gdmFsdWUyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdmFsdWUyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDU5ICYmIHNpemUpIHsKICAgICAgY29uc3QgdG9rZW4gPSBlZmZlY3RzLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIik7CiAgICAgIGlmICh0ZXN0ID09PSBhc2NpaUFscGhhbnVtZXJpYyAmJiAhZGVjb2RlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2Uoc2VsZjIuc2xpY2VTZXJpYWxpemUodG9rZW4pKSkgewogICAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgICB9CiAgICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpOwogICAgICBlZmZlY3RzLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZSIpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgaWYgKHRlc3QoY29kZTQpICYmIHNpemUrKyA8IG1heDMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHZhbHVlMjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQp2YXIgY2hhcmFjdGVyUmVmZXJlbmNlOwp2YXIgaW5pdF9jaGFyYWN0ZXJfcmVmZXJlbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY2hhcmFjdGVyLXJlZmVyZW5jZS5qcyIoKSB7CiAgICBpbml0X2luZGV4X2RvbSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGNoYXJhY3RlclJlZmVyZW5jZSA9IHsKICAgICAgbmFtZTogImNoYXJhY3RlclJlZmVyZW5jZSIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUNoYXJhY3RlclJlZmVyZW5jZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NvZGUtZmVuY2VkLmpzCmZ1bmN0aW9uIHRva2VuaXplQ29kZUZlbmNlZChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBjb25zdCBjbG9zZVN0YXJ0ID0gewogICAgcGFydGlhbDogdHJ1ZSwKICAgIHRva2VuaXplOiB0b2tlbml6ZUNsb3NlU3RhcnQKICB9OwogIGxldCBpbml0aWFsUHJlZml4ID0gMDsKICBsZXQgc2l6ZU9wZW4gPSAwOwogIGxldCBtYXJrZXI7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICByZXR1cm4gYmVmb3JlU2VxdWVuY2VPcGVuKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlU2VxdWVuY2VPcGVuKGNvZGU0KSB7CiAgICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICAgIGluaXRpYWxQcmVmaXggPSB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gImxpbmVQcmVmaXgiID8gdGFpbFsyXS5zbGljZVNlcmlhbGl6ZSh0YWlsWzFdLCB0cnVlKS5sZW5ndGggOiAwOwogICAgbWFya2VyID0gY29kZTQ7CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlRmVuY2VkIik7CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlRmVuY2VkRmVuY2UiKTsKICAgIGVmZmVjdHMuZW50ZXIoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIik7CiAgICByZXR1cm4gc2VxdWVuY2VPcGVuKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gc2VxdWVuY2VPcGVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICBzaXplT3BlbisrOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gc2VxdWVuY2VPcGVuOwogICAgfQogICAgaWYgKHNpemVPcGVuIDwgMykgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZXhpdCgiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKTsKICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBpbmZvQmVmb3JlLCAid2hpdGVzcGFjZSIpKGNvZGU0KSA6IGluZm9CZWZvcmUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBpbmZvQmVmb3JlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImNvZGVGZW5jZWRGZW5jZSIpOwogICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ID8gb2szKGNvZGU0KSA6IGVmZmVjdHMuY2hlY2sobm9uTGF6eUNvbnRpbnVhdGlvbiwgYXROb25MYXp5QnJlYWssIGFmdGVyKShjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlRmVuY2VkRmVuY2VJbmZvIik7CiAgICBlZmZlY3RzLmVudGVyKCJjaHVua1N0cmluZyIsIHsKICAgICAgY29udGVudFR5cGU6ICJzdHJpbmciCiAgICB9KTsKICAgIHJldHVybiBpbmZvKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaW5mbyhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjaHVua1N0cmluZyIpOwogICAgICBlZmZlY3RzLmV4aXQoImNvZGVGZW5jZWRGZW5jZUluZm8iKTsKICAgICAgcmV0dXJuIGluZm9CZWZvcmUoY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtTdHJpbmciKTsKICAgICAgZWZmZWN0cy5leGl0KCJjb2RlRmVuY2VkRmVuY2VJbmZvIik7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgbWV0YUJlZm9yZSwgIndoaXRlc3BhY2UiKShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDk2ICYmIGNvZGU0ID09PSBtYXJrZXIpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGluZm87CiAgfQogIGZ1bmN0aW9uIG1ldGFCZWZvcmUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBpbmZvQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImNvZGVGZW5jZWRGZW5jZU1ldGEiKTsKICAgIGVmZmVjdHMuZW50ZXIoImNodW5rU3RyaW5nIiwgewogICAgICBjb250ZW50VHlwZTogInN0cmluZyIKICAgIH0pOwogICAgcmV0dXJuIG1ldGEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBtZXRhKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rU3RyaW5nIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiY29kZUZlbmNlZEZlbmNlTWV0YSIpOwogICAgICByZXR1cm4gaW5mb0JlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDk2ICYmIGNvZGU0ID09PSBtYXJrZXIpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIG1ldGE7CiAgfQogIGZ1bmN0aW9uIGF0Tm9uTGF6eUJyZWFrKGNvZGU0KSB7CiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGNsb3NlU3RhcnQsIGFmdGVyLCBjb250ZW50QmVmb3JlKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRlbnRCZWZvcmUoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgIHJldHVybiBjb250ZW50U3RhcnQ7CiAgfQogIGZ1bmN0aW9uIGNvbnRlbnRTdGFydChjb2RlNCkgewogICAgcmV0dXJuIGluaXRpYWxQcmVmaXggPiAwICYmIG1hcmtkb3duU3BhY2UoY29kZTQpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGJlZm9yZUNvbnRlbnRDaHVuaywgImxpbmVQcmVmaXgiLCBpbml0aWFsUHJlZml4ICsgMSkoY29kZTQpIDogYmVmb3JlQ29udGVudENodW5rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlQ29udGVudENodW5rKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhub25MYXp5Q29udGludWF0aW9uLCBhdE5vbkxhenlCcmVhaywgYWZ0ZXIpKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImNvZGVGbG93VmFsdWUiKTsKICAgIHJldHVybiBjb250ZW50Q2h1bmsoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb250ZW50Q2h1bmsoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY29kZUZsb3dWYWx1ZSIpOwogICAgICByZXR1cm4gYmVmb3JlQ29udGVudENodW5rKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gY29udGVudENodW5rOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgZWZmZWN0cy5leGl0KCJjb2RlRmVuY2VkIik7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdG9rZW5pemVDbG9zZVN0YXJ0KGVmZmVjdHMyLCBvazQsIG5vazIpIHsKICAgIGxldCBzaXplID0gMDsKICAgIHJldHVybiBzdGFydEJlZm9yZTsKICAgIGZ1bmN0aW9uIHN0YXJ0QmVmb3JlKGNvZGU0KSB7CiAgICAgIGVmZmVjdHMyLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICAgIGVmZmVjdHMyLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzMi5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgIHJldHVybiBzdGFydDI7CiAgICB9CiAgICBmdW5jdGlvbiBzdGFydDIoY29kZTQpIHsKICAgICAgZWZmZWN0czIuZW50ZXIoImNvZGVGZW5jZWRGZW5jZSIpOwogICAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlNCkgPyBmYWN0b3J5U3BhY2UoZWZmZWN0czIsIGJlZm9yZVNlcXVlbmNlQ2xvc2UsICJsaW5lUHJlZml4Iiwgc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSA/IHZvaWQgMCA6IDQpKGNvZGU0KSA6IGJlZm9yZVNlcXVlbmNlQ2xvc2UoY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gYmVmb3JlU2VxdWVuY2VDbG9zZShjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICAgIGVmZmVjdHMyLmVudGVyKCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSIpOwogICAgICAgIHJldHVybiBzZXF1ZW5jZUNsb3NlKGNvZGU0KTsKICAgICAgfQogICAgICByZXR1cm4gbm9rMihjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBzZXF1ZW5jZUNsb3NlKGNvZGU0KSB7CiAgICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgICAgc2l6ZSsrOwogICAgICAgIGVmZmVjdHMyLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHJldHVybiBzZXF1ZW5jZUNsb3NlOwogICAgICB9CiAgICAgIGlmIChzaXplID49IHNpemVPcGVuKSB7CiAgICAgICAgZWZmZWN0czIuZXhpdCgiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKTsKICAgICAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlNCkgPyBmYWN0b3J5U3BhY2UoZWZmZWN0czIsIHNlcXVlbmNlQ2xvc2VBZnRlciwgIndoaXRlc3BhY2UiKShjb2RlNCkgOiBzZXF1ZW5jZUNsb3NlQWZ0ZXIoY29kZTQpOwogICAgICB9CiAgICAgIHJldHVybiBub2syKGNvZGU0KTsKICAgIH0KICAgIGZ1bmN0aW9uIHNlcXVlbmNlQ2xvc2VBZnRlcihjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMyLmV4aXQoImNvZGVGZW5jZWRGZW5jZSIpOwogICAgICAgIHJldHVybiBvazQoY29kZTQpOwogICAgICB9CiAgICAgIHJldHVybiBub2syKGNvZGU0KTsKICAgIH0KICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVOb25MYXp5Q29udGludWF0aW9uKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgcmV0dXJuIGxpbmVTdGFydDsKICB9CiAgZnVuY3Rpb24gbGluZVN0YXJ0KGNvZGU0KSB7CiAgICByZXR1cm4gc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0gPyBub2soY29kZTQpIDogb2szKGNvZGU0KTsKICB9Cn0KdmFyIG5vbkxhenlDb250aW51YXRpb24sIGNvZGVGZW5jZWQ7CnZhciBpbml0X2NvZGVfZmVuY2VkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY29kZS1mZW5jZWQuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIG5vbkxhenlDb250aW51YXRpb24gPSB7CiAgICAgIHBhcnRpYWw6IHRydWUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZU5vbkxhenlDb250aW51YXRpb24KICAgIH07CiAgICBjb2RlRmVuY2VkID0gewogICAgICBjb25jcmV0ZTogdHJ1ZSwKICAgICAgbmFtZTogImNvZGVGZW5jZWQiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVDb2RlRmVuY2VkCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY29kZS1pbmRlbnRlZC5qcwpmdW5jdGlvbiB0b2tlbml6ZUNvZGVJbmRlbnRlZChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImNvZGVJbmRlbnRlZCIpOwogICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlclByZWZpeCwgImxpbmVQcmVmaXgiLCA0ICsgMSkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlclByZWZpeChjb2RlNCkgewogICAgY29uc3QgdGFpbCA9IHNlbGYyLmV2ZW50c1tzZWxmMi5ldmVudHMubGVuZ3RoIC0gMV07CiAgICByZXR1cm4gdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09ICJsaW5lUHJlZml4IiAmJiB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA+PSA0ID8gYXRCcmVhayhjb2RlNCkgOiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBhdEJyZWFrKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIGFmdGVyKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoZnVydGhlclN0YXJ0LCBhdEJyZWFrLCBhZnRlcikoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiY29kZUZsb3dWYWx1ZSIpOwogICAgcmV0dXJuIGluc2lkZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjb2RlRmxvd1ZhbHVlIik7CiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gaW5zaWRlOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgZWZmZWN0cy5leGl0KCJjb2RlSW5kZW50ZWQiKTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZUZ1cnRoZXJTdGFydChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gZnVydGhlclN0YXJ0MjsKICBmdW5jdGlvbiBmdXJ0aGVyU3RhcnQyKGNvZGU0KSB7CiAgICBpZiAoc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0pIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgICByZXR1cm4gZnVydGhlclN0YXJ0MjsKICAgIH0KICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYWZ0ZXJQcmVmaXgsICJsaW5lUHJlZml4IiwgNCArIDEpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYWZ0ZXJQcmVmaXgoY29kZTQpIHsKICAgIGNvbnN0IHRhaWwgPSBzZWxmMi5ldmVudHNbc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDFdOwogICAgcmV0dXJuIHRhaWwgJiYgdGFpbFsxXS50eXBlID09PSAibGluZVByZWZpeCIgJiYgdGFpbFsyXS5zbGljZVNlcmlhbGl6ZSh0YWlsWzFdLCB0cnVlKS5sZW5ndGggPj0gNCA/IG9rMyhjb2RlNCkgOiBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpID8gZnVydGhlclN0YXJ0Mihjb2RlNCkgOiBub2soY29kZTQpOwogIH0KfQp2YXIgY29kZUluZGVudGVkLCBmdXJ0aGVyU3RhcnQ7CnZhciBpbml0X2NvZGVfaW5kZW50ZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb2RlLWluZGVudGVkLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBjb2RlSW5kZW50ZWQgPSB7CiAgICAgIG5hbWU6ICJjb2RlSW5kZW50ZWQiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVDb2RlSW5kZW50ZWQKICAgIH07CiAgICBmdXJ0aGVyU3RhcnQgPSB7CiAgICAgIHBhcnRpYWw6IHRydWUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUZ1cnRoZXJTdGFydAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NvZGUtdGV4dC5qcwpmdW5jdGlvbiByZXNvbHZlQ29kZVRleHQoZXZlbnRzKSB7CiAgbGV0IHRhaWxFeGl0SW5kZXggPSBldmVudHMubGVuZ3RoIC0gNDsKICBsZXQgaGVhZEVudGVySW5kZXggPSAzOwogIGxldCBpbmRleDI7CiAgbGV0IGVudGVyOwogIGlmICgoZXZlbnRzW2hlYWRFbnRlckluZGV4XVsxXS50eXBlID09PSAibGluZUVuZGluZyIgfHwgZXZlbnRzW2hlYWRFbnRlckluZGV4XVsxXS50eXBlID09PSAic3BhY2UiKSAmJiAoZXZlbnRzW3RhaWxFeGl0SW5kZXhdWzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nIiB8fCBldmVudHNbdGFpbEV4aXRJbmRleF1bMV0udHlwZSA9PT0gInNwYWNlIikpIHsKICAgIGluZGV4MiA9IGhlYWRFbnRlckluZGV4OwogICAgd2hpbGUgKCsraW5kZXgyIDwgdGFpbEV4aXRJbmRleCkgewogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImNvZGVUZXh0RGF0YSIpIHsKICAgICAgICBldmVudHNbaGVhZEVudGVySW5kZXhdWzFdLnR5cGUgPSAiY29kZVRleHRQYWRkaW5nIjsKICAgICAgICBldmVudHNbdGFpbEV4aXRJbmRleF1bMV0udHlwZSA9ICJjb2RlVGV4dFBhZGRpbmciOwogICAgICAgIGhlYWRFbnRlckluZGV4ICs9IDI7CiAgICAgICAgdGFpbEV4aXRJbmRleCAtPSAyOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfQogIGluZGV4MiA9IGhlYWRFbnRlckluZGV4IC0gMTsKICB0YWlsRXhpdEluZGV4Kys7CiAgd2hpbGUgKCsraW5kZXgyIDw9IHRhaWxFeGl0SW5kZXgpIHsKICAgIGlmIChlbnRlciA9PT0gdm9pZCAwKSB7CiAgICAgIGlmIChpbmRleDIgIT09IHRhaWxFeGl0SW5kZXggJiYgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSAhPT0gImxpbmVFbmRpbmciKSB7CiAgICAgICAgZW50ZXIgPSBpbmRleDI7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaW5kZXgyID09PSB0YWlsRXhpdEluZGV4IHx8IGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nIikgewogICAgICBldmVudHNbZW50ZXJdWzFdLnR5cGUgPSAiY29kZVRleHREYXRhIjsKICAgICAgaWYgKGluZGV4MiAhPT0gZW50ZXIgKyAyKSB7CiAgICAgICAgZXZlbnRzW2VudGVyXVsxXS5lbmQgPSBldmVudHNbaW5kZXgyIC0gMV1bMV0uZW5kOwogICAgICAgIGV2ZW50cy5zcGxpY2UoZW50ZXIgKyAyLCBpbmRleDIgLSBlbnRlciAtIDIpOwogICAgICAgIHRhaWxFeGl0SW5kZXggLT0gaW5kZXgyIC0gZW50ZXIgLSAyOwogICAgICAgIGluZGV4MiA9IGVudGVyICsgMjsKICAgICAgfQogICAgICBlbnRlciA9IHZvaWQgMDsKICAgIH0KICB9CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiBwcmV2aW91czIoY29kZTQpIHsKICByZXR1cm4gY29kZTQgIT09IDk2IHx8IHRoaXMuZXZlbnRzW3RoaXMuZXZlbnRzLmxlbmd0aCAtIDFdWzFdLnR5cGUgPT09ICJjaGFyYWN0ZXJFc2NhcGUiOwp9CmZ1bmN0aW9uIHRva2VuaXplQ29kZVRleHQoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IHNpemVPcGVuID0gMDsKICBsZXQgc2l6ZTsKICBsZXQgdG9rZW47CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlVGV4dCIpOwogICAgZWZmZWN0cy5lbnRlcigiY29kZVRleHRTZXF1ZW5jZSIpOwogICAgcmV0dXJuIHNlcXVlbmNlT3Blbihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHNlcXVlbmNlT3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5NikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBzaXplT3BlbisrOwogICAgICByZXR1cm4gc2VxdWVuY2VPcGVuOwogICAgfQogICAgZWZmZWN0cy5leGl0KCJjb2RlVGV4dFNlcXVlbmNlIik7CiAgICByZXR1cm4gYmV0d2VlbjIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBiZXR3ZWVuMihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSAzMikgewogICAgICBlZmZlY3RzLmVudGVyKCJzcGFjZSIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInNwYWNlIik7CiAgICAgIHJldHVybiBiZXR3ZWVuMjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gOTYpIHsKICAgICAgdG9rZW4gPSBlZmZlY3RzLmVudGVyKCJjb2RlVGV4dFNlcXVlbmNlIik7CiAgICAgIHNpemUgPSAwOwogICAgICByZXR1cm4gc2VxdWVuY2VDbG9zZShjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgICByZXR1cm4gYmV0d2VlbjI7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlVGV4dERhdGEiKTsKICAgIHJldHVybiBkYXRhKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZGF0YShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSAzMiB8fCBjb2RlNCA9PT0gOTYgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImNvZGVUZXh0RGF0YSIpOwogICAgICByZXR1cm4gYmV0d2VlbjIoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBkYXRhOwogIH0KICBmdW5jdGlvbiBzZXF1ZW5jZUNsb3NlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDk2KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHNpemUrKzsKICAgICAgcmV0dXJuIHNlcXVlbmNlQ2xvc2U7CiAgICB9CiAgICBpZiAoc2l6ZSA9PT0gc2l6ZU9wZW4pIHsKICAgICAgZWZmZWN0cy5leGl0KCJjb2RlVGV4dFNlcXVlbmNlIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiY29kZVRleHQiKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICB0b2tlbi50eXBlID0gImNvZGVUZXh0RGF0YSI7CiAgICByZXR1cm4gZGF0YShjb2RlNCk7CiAgfQp9CnZhciBjb2RlVGV4dDsKdmFyIGluaXRfY29kZV90ZXh0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY29kZS10ZXh0LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBjb2RlVGV4dCA9IHsKICAgICAgbmFtZTogImNvZGVUZXh0IiwKICAgICAgcHJldmlvdXM6IHByZXZpb3VzMiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZUNvZGVUZXh0LAogICAgICB0b2tlbml6ZTogdG9rZW5pemVDb2RlVGV4dAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1zdWJ0b2tlbml6ZS9saWIvc3BsaWNlLWJ1ZmZlci5qcwpmdW5jdGlvbiBjaHVua2VkUHVzaChsaXN0NSwgcmlnaHQpIHsKICBsZXQgY2h1bmtTdGFydCA9IDA7CiAgaWYgKHJpZ2h0Lmxlbmd0aCA8IDFlNCkgewogICAgbGlzdDUucHVzaCguLi5yaWdodCk7CiAgfSBlbHNlIHsKICAgIHdoaWxlIChjaHVua1N0YXJ0IDwgcmlnaHQubGVuZ3RoKSB7CiAgICAgIGxpc3Q1LnB1c2goLi4ucmlnaHQuc2xpY2UoY2h1bmtTdGFydCwgY2h1bmtTdGFydCArIDFlNCkpOwogICAgICBjaHVua1N0YXJ0ICs9IDFlNDsKICAgIH0KICB9Cn0KdmFyIFNwbGljZUJ1ZmZlcjsKdmFyIGluaXRfc3BsaWNlX2J1ZmZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1zdWJ0b2tlbml6ZS9saWIvc3BsaWNlLWJ1ZmZlci5qcyIoKSB7CiAgICBTcGxpY2VCdWZmZXIgPSBjbGFzcyB7CiAgICAgIC8qKgogICAgICAgKiBAcGFyYW0ge1JlYWRvbmx5QXJyYXk8VD4gfCBudWxsIHwgdW5kZWZpbmVkfSBbaW5pdGlhbF0KICAgICAgICogICBJbml0aWFsIGl0ZW1zIChvcHRpb25hbCkuCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqICAgU3BsaWNlIGJ1ZmZlci4KICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKGluaXRpYWwyKSB7CiAgICAgICAgdGhpcy5sZWZ0ID0gaW5pdGlhbDIgPyBbLi4uaW5pdGlhbDJdIDogW107CiAgICAgICAgdGhpcy5yaWdodCA9IFtdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBcnJheSBhY2Nlc3M7CiAgICAgICAqIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvci4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4CiAgICAgICAqICAgSW5kZXguCiAgICAgICAqIEByZXR1cm4ge1R9CiAgICAgICAqICAgSXRlbS4KICAgICAgICovCiAgICAgIGdldChpbmRleDIpIHsKICAgICAgICBpZiAoaW5kZXgyIDwgMCB8fCBpbmRleDIgPj0gdGhpcy5sZWZ0Lmxlbmd0aCArIHRoaXMucmlnaHQubGVuZ3RoKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ2Fubm90IGFjY2VzcyBpbmRleCBgIiArIGluZGV4MiArICJgIGluIGEgc3BsaWNlIGJ1ZmZlciBvZiBzaXplIGAiICsgKHRoaXMubGVmdC5sZW5ndGggKyB0aGlzLnJpZ2h0Lmxlbmd0aCkgKyAiYCIpOwogICAgICAgIH0KICAgICAgICBpZiAoaW5kZXgyIDwgdGhpcy5sZWZ0Lmxlbmd0aCkgcmV0dXJuIHRoaXMubGVmdFtpbmRleDJdOwogICAgICAgIHJldHVybiB0aGlzLnJpZ2h0W3RoaXMucmlnaHQubGVuZ3RoIC0gaW5kZXgyICsgdGhpcy5sZWZ0Lmxlbmd0aCAtIDFdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSBzcGxpY2UgYnVmZmVyLCBvbmUgZ3JlYXRlciB0aGFuIHRoZSBsYXJnZXN0IGluZGV4IGluIHRoZQogICAgICAgKiBhcnJheS4KICAgICAgICovCiAgICAgIGdldCBsZW5ndGgoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubGVmdC5sZW5ndGggKyB0aGlzLnJpZ2h0Lmxlbmd0aDsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVtb3ZlIGFuZCByZXR1cm4gYGxpc3RbMF1gOwogICAgICAgKiBtb3ZlcyB0aGUgY3Vyc29yIHRvIGAwYC4KICAgICAgICoKICAgICAgICogQHJldHVybnMge1QgfCB1bmRlZmluZWR9CiAgICAgICAqICAgSXRlbSwgb3B0aW9uYWwuCiAgICAgICAqLwogICAgICBzaGlmdCgpIHsKICAgICAgICB0aGlzLnNldEN1cnNvcigwKTsKICAgICAgICByZXR1cm4gdGhpcy5yaWdodC5wb3AoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2xpY2UgdGhlIGJ1ZmZlciB0byBnZXQgYW4gYXJyYXk7CiAgICAgICAqIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvci4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0CiAgICAgICAqICAgU3RhcnQuCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2VuZF0KICAgICAgICogICBFbmQgKG9wdGlvbmFsKS4KICAgICAgICogQHJldHVybnMge0FycmF5PFQ+fQogICAgICAgKiAgIEFycmF5IG9mIGl0ZW1zLgogICAgICAgKi8KICAgICAgc2xpY2Uoc3RhcnQsIGVuZDMpIHsKICAgICAgICBjb25zdCBzdG9wID0gZW5kMyA9PT0gbnVsbCB8fCBlbmQzID09PSB2b2lkIDAgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiBlbmQzOwogICAgICAgIGlmIChzdG9wIDwgdGhpcy5sZWZ0Lmxlbmd0aCkgewogICAgICAgICAgcmV0dXJuIHRoaXMubGVmdC5zbGljZShzdGFydCwgc3RvcCk7CiAgICAgICAgfQogICAgICAgIGlmIChzdGFydCA+IHRoaXMubGVmdC5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnJpZ2h0LnNsaWNlKHRoaXMucmlnaHQubGVuZ3RoIC0gc3RvcCArIHRoaXMubGVmdC5sZW5ndGgsIHRoaXMucmlnaHQubGVuZ3RoIC0gc3RhcnQgKyB0aGlzLmxlZnQubGVuZ3RoKS5yZXZlcnNlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLmxlZnQuc2xpY2Uoc3RhcnQpLmNvbmNhdCh0aGlzLnJpZ2h0LnNsaWNlKHRoaXMucmlnaHQubGVuZ3RoIC0gc3RvcCArIHRoaXMubGVmdC5sZW5ndGgpLnJldmVyc2UoKSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIE1pbWljcyB0aGUgYmVoYXZpb3Igb2YgQXJyYXkucHJvdG90eXBlLnNwbGljZSgpIGV4Y2VwdCBmb3IgdGhlIGNoYW5nZSBvZgogICAgICAgKiBpbnRlcmZhY2UgbmVjZXNzYXJ5IHRvIGF2b2lkIHNlZ2ZhdWx0cyB3aGVuIHBhdGNoaW5nIGluIHZlcnkgbGFyZ2UgYXJyYXlzLgogICAgICAgKgogICAgICAgKiBUaGlzIG9wZXJhdGlvbiBtb3ZlcyBjdXJzb3IgaXMgbW92ZWQgdG8gYHN0YXJ0YCBhbmQgcmVzdWx0cyBpbiB0aGUgY3Vyc29yCiAgICAgICAqIHBsYWNlZCBhZnRlciBhbnkgaW5zZXJ0ZWQgaXRlbXMuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydAogICAgICAgKiAgIFN0YXJ0OwogICAgICAgKiAgIHplcm8tYmFzZWQgaW5kZXggYXQgd2hpY2ggdG8gc3RhcnQgY2hhbmdpbmcgdGhlIGFycmF5OwogICAgICAgKiAgIG5lZ2F0aXZlIG51bWJlcnMgY291bnQgYmFja3dhcmRzIGZyb20gdGhlIGVuZCBvZiB0aGUgYXJyYXkgYW5kIHZhbHVlcwogICAgICAgKiAgIHRoYXQgYXJlIG91dC1vZiBib3VuZHMgYXJlIGNsYW1wZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGVuZCBvZiB0aGUgYXJyYXkuCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2RlbGV0ZUNvdW50PTBdCiAgICAgICAqICAgRGVsZXRlIGNvdW50IChkZWZhdWx0OiBgMGApOwogICAgICAgKiAgIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRlbGV0ZSwgc3RhcnRpbmcgZnJvbSBzdGFydC4KICAgICAgICogQHBhcmFtIHtBcnJheTxUPiB8IG51bGwgfCB1bmRlZmluZWR9IFtpdGVtcz1bXV0KICAgICAgICogICBJdGVtcyB0byBpbmNsdWRlIGluIHBsYWNlIG9mIHRoZSBkZWxldGVkIGl0ZW1zIChkZWZhdWx0OiBgW11gKS4KICAgICAgICogQHJldHVybiB7QXJyYXk8VD59CiAgICAgICAqICAgQW55IHJlbW92ZWQgaXRlbXMuCiAgICAgICAqLwogICAgICBzcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBpdGVtcykgewogICAgICAgIGNvbnN0IGNvdW50MiA9IGRlbGV0ZUNvdW50IHx8IDA7CiAgICAgICAgdGhpcy5zZXRDdXJzb3IoTWF0aC50cnVuYyhzdGFydCkpOwogICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLnJpZ2h0LnNwbGljZSh0aGlzLnJpZ2h0Lmxlbmd0aCAtIGNvdW50MiwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTsKICAgICAgICBpZiAoaXRlbXMpIGNodW5rZWRQdXNoKHRoaXMubGVmdCwgaXRlbXMpOwogICAgICAgIHJldHVybiByZW1vdmVkLnJldmVyc2UoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGhpZ2hlc3QtbnVtYmVyZWQgaXRlbSBpbiB0aGUgYXJyYXksIHNvCiAgICAgICAqIGBsaXN0W2xpc3QubGVuZ3RoIC0gMV1gOwogICAgICAgKiBNb3ZlcyB0aGUgY3Vyc29yIHRvIGBsZW5ndGhgLgogICAgICAgKgogICAgICAgKiBAcmV0dXJucyB7VCB8IHVuZGVmaW5lZH0KICAgICAgICogICBJdGVtLCBvcHRpb25hbC4KICAgICAgICovCiAgICAgIHBvcCgpIHsKICAgICAgICB0aGlzLnNldEN1cnNvcihOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOwogICAgICAgIHJldHVybiB0aGlzLmxlZnQucG9wKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEluc2VydHMgYSBzaW5nbGUgaXRlbSB0byB0aGUgaGlnaC1udW1iZXJlZCBzaWRlIG9mIHRoZSBhcnJheTsKICAgICAgICogbW92ZXMgdGhlIGN1cnNvciB0byBgbGVuZ3RoYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtUfSBpdGVtCiAgICAgICAqICAgSXRlbS4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgcHVzaChpdGVtKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3IoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTsKICAgICAgICB0aGlzLmxlZnQucHVzaChpdGVtKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSW5zZXJ0cyBtYW55IGl0ZW1zIHRvIHRoZSBoaWdoLW51bWJlcmVkIHNpZGUgb2YgdGhlIGFycmF5LgogICAgICAgKiBNb3ZlcyB0aGUgY3Vyc29yIHRvIGBsZW5ndGhgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0FycmF5PFQ+fSBpdGVtcwogICAgICAgKiAgIEl0ZW1zLgogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcuCiAgICAgICAqLwogICAgICBwdXNoTWFueShpdGVtcykgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7CiAgICAgICAgY2h1bmtlZFB1c2godGhpcy5sZWZ0LCBpdGVtcyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEluc2VydHMgYSBzaW5nbGUgaXRlbSB0byB0aGUgbG93LW51bWJlcmVkIHNpZGUgb2YgdGhlIGFycmF5OwogICAgICAgKiBNb3ZlcyB0aGUgY3Vyc29yIHRvIGAwYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtUfSBpdGVtCiAgICAgICAqICAgSXRlbS4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgdW5zaGlmdChpdGVtKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3IoMCk7CiAgICAgICAgdGhpcy5yaWdodC5wdXNoKGl0ZW0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJbnNlcnRzIG1hbnkgaXRlbXMgdG8gdGhlIGxvdy1udW1iZXJlZCBzaWRlIG9mIHRoZSBhcnJheTsKICAgICAgICogbW92ZXMgdGhlIGN1cnNvciB0byBgMGAuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7QXJyYXk8VD59IGl0ZW1zCiAgICAgICAqICAgSXRlbXMuCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqICAgTm90aGluZy4KICAgICAgICovCiAgICAgIHVuc2hpZnRNYW55KGl0ZW1zKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3IoMCk7CiAgICAgICAgY2h1bmtlZFB1c2godGhpcy5yaWdodCwgaXRlbXMucmV2ZXJzZSgpKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTW92ZSB0aGUgY3Vyc29yIHRvIGEgc3BlY2lmaWMgcG9zaXRpb24gaW4gdGhlIGFycmF5LiBSZXF1aXJlcwogICAgICAgKiB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgZGlzdGFuY2UgbW92ZWQuCiAgICAgICAqCiAgICAgICAqIElmIGBuIDwgMGAsIHRoZSBjdXJzb3Igd2lsbCBlbmQgdXAgYXQgdGhlIGJlZ2lubmluZy4KICAgICAgICogSWYgYG4gPiBsZW5ndGhgLCB0aGUgY3Vyc29yIHdpbGwgZW5kIHVwIGF0IHRoZSBlbmQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuCiAgICAgICAqICAgUG9zaXRpb24uCiAgICAgICAqIEByZXR1cm4ge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgc2V0Q3Vyc29yKG4xMykgewogICAgICAgIGlmIChuMTMgPT09IHRoaXMubGVmdC5sZW5ndGggfHwgbjEzID4gdGhpcy5sZWZ0Lmxlbmd0aCAmJiB0aGlzLnJpZ2h0Lmxlbmd0aCA9PT0gMCB8fCBuMTMgPCAwICYmIHRoaXMubGVmdC5sZW5ndGggPT09IDApIHJldHVybjsKICAgICAgICBpZiAobjEzIDwgdGhpcy5sZWZ0Lmxlbmd0aCkgewogICAgICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMubGVmdC5zcGxpY2UobjEzLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOwogICAgICAgICAgY2h1bmtlZFB1c2godGhpcy5yaWdodCwgcmVtb3ZlZC5yZXZlcnNlKCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5yaWdodC5zcGxpY2UodGhpcy5sZWZ0Lmxlbmd0aCArIHRoaXMucmlnaHQubGVuZ3RoIC0gbjEzLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOwogICAgICAgICAgY2h1bmtlZFB1c2godGhpcy5sZWZ0LCByZW1vdmVkLnJldmVyc2UoKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtc3VidG9rZW5pemVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplL2luZGV4LmpzCmZ1bmN0aW9uIHN1YnRva2VuaXplKGV2ZW50c0FycmF5KSB7CiAgY29uc3QganVtcHMgPSB7fTsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGV2ZW50OwogIGxldCBsaW5lSW5kZXg7CiAgbGV0IG90aGVySW5kZXg7CiAgbGV0IG90aGVyRXZlbnQ7CiAgbGV0IHBhcmFtZXRlcnM7CiAgbGV0IHN1YmV2ZW50czsKICBsZXQgbW9yZTsKICBjb25zdCBldmVudHMgPSBuZXcgU3BsaWNlQnVmZmVyKGV2ZW50c0FycmF5KTsKICB3aGlsZSAoKytpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICB3aGlsZSAoaW5kZXgyIGluIGp1bXBzKSB7CiAgICAgIGluZGV4MiA9IGp1bXBzW2luZGV4Ml07CiAgICB9CiAgICBldmVudCA9IGV2ZW50cy5nZXQoaW5kZXgyKTsKICAgIGlmIChpbmRleDIgJiYgZXZlbnRbMV0udHlwZSA9PT0gImNodW5rRmxvdyIgJiYgZXZlbnRzLmdldChpbmRleDIgLSAxKVsxXS50eXBlID09PSAibGlzdEl0ZW1QcmVmaXgiKSB7CiAgICAgIHN1YmV2ZW50cyA9IGV2ZW50WzFdLl90b2tlbml6ZXIuZXZlbnRzOwogICAgICBvdGhlckluZGV4ID0gMDsKICAgICAgaWYgKG90aGVySW5kZXggPCBzdWJldmVudHMubGVuZ3RoICYmIHN1YmV2ZW50c1tvdGhlckluZGV4XVsxXS50eXBlID09PSAibGluZUVuZGluZ0JsYW5rIikgewogICAgICAgIG90aGVySW5kZXggKz0gMjsKICAgICAgfQogICAgICBpZiAob3RoZXJJbmRleCA8IHN1YmV2ZW50cy5sZW5ndGggJiYgc3ViZXZlbnRzW290aGVySW5kZXhdWzFdLnR5cGUgPT09ICJjb250ZW50IikgewogICAgICAgIHdoaWxlICgrK290aGVySW5kZXggPCBzdWJldmVudHMubGVuZ3RoKSB7CiAgICAgICAgICBpZiAoc3ViZXZlbnRzW290aGVySW5kZXhdWzFdLnR5cGUgPT09ICJjb250ZW50IikgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdWJldmVudHNbb3RoZXJJbmRleF1bMV0udHlwZSA9PT0gImNodW5rVGV4dCIpIHsKICAgICAgICAgICAgc3ViZXZlbnRzW290aGVySW5kZXhdWzFdLl9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSA9IHRydWU7CiAgICAgICAgICAgIG90aGVySW5kZXgrKzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChldmVudFswXSA9PT0gImVudGVyIikgewogICAgICBpZiAoZXZlbnRbMV0uY29udGVudFR5cGUpIHsKICAgICAgICBPYmplY3QuYXNzaWduKGp1bXBzLCBzdWJjb250ZW50KGV2ZW50cywgaW5kZXgyKSk7CiAgICAgICAgaW5kZXgyID0ganVtcHNbaW5kZXgyXTsKICAgICAgICBtb3JlID0gdHJ1ZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChldmVudFsxXS5fY29udGFpbmVyKSB7CiAgICAgIG90aGVySW5kZXggPSBpbmRleDI7CiAgICAgIGxpbmVJbmRleCA9IHZvaWQgMDsKICAgICAgd2hpbGUgKG90aGVySW5kZXgtLSkgewogICAgICAgIG90aGVyRXZlbnQgPSBldmVudHMuZ2V0KG90aGVySW5kZXgpOwogICAgICAgIGlmIChvdGhlckV2ZW50WzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nIiB8fCBvdGhlckV2ZW50WzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nQmxhbmsiKSB7CiAgICAgICAgICBpZiAob3RoZXJFdmVudFswXSA9PT0gImVudGVyIikgewogICAgICAgICAgICBpZiAobGluZUluZGV4KSB7CiAgICAgICAgICAgICAgZXZlbnRzLmdldChsaW5lSW5kZXgpWzFdLnR5cGUgPSAibGluZUVuZGluZ0JsYW5rIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBvdGhlckV2ZW50WzFdLnR5cGUgPSAibGluZUVuZGluZyI7CiAgICAgICAgICAgIGxpbmVJbmRleCA9IG90aGVySW5kZXg7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChvdGhlckV2ZW50WzFdLnR5cGUgPT09ICJsaW5lUHJlZml4IiB8fCBvdGhlckV2ZW50WzFdLnR5cGUgPT09ICJsaXN0SXRlbUluZGVudCIpIHsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChsaW5lSW5kZXgpIHsKICAgICAgICBldmVudFsxXS5lbmQgPSB7CiAgICAgICAgICAuLi5ldmVudHMuZ2V0KGxpbmVJbmRleClbMV0uc3RhcnQKICAgICAgICB9OwogICAgICAgIHBhcmFtZXRlcnMgPSBldmVudHMuc2xpY2UobGluZUluZGV4LCBpbmRleDIpOwogICAgICAgIHBhcmFtZXRlcnMudW5zaGlmdChldmVudCk7CiAgICAgICAgZXZlbnRzLnNwbGljZShsaW5lSW5kZXgsIGluZGV4MiAtIGxpbmVJbmRleCArIDEsIHBhcmFtZXRlcnMpOwogICAgICB9CiAgICB9CiAgfQogIHNwbGljZShldmVudHNBcnJheSwgMCwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLCBldmVudHMuc2xpY2UoMCkpOwogIHJldHVybiAhbW9yZTsKfQpmdW5jdGlvbiBzdWJjb250ZW50KGV2ZW50cywgZXZlbnRJbmRleCkgewogIGNvbnN0IHRva2VuID0gZXZlbnRzLmdldChldmVudEluZGV4KVsxXTsKICBjb25zdCBjb250ZXh0MiA9IGV2ZW50cy5nZXQoZXZlbnRJbmRleClbMl07CiAgbGV0IHN0YXJ0UG9zaXRpb24gPSBldmVudEluZGV4IC0gMTsKICBjb25zdCBzdGFydFBvc2l0aW9ucyA9IFtdOwogIGxldCB0b2tlbml6ZXIgPSB0b2tlbi5fdG9rZW5pemVyOwogIGlmICghdG9rZW5pemVyKSB7CiAgICB0b2tlbml6ZXIgPSBjb250ZXh0Mi5wYXJzZXJbdG9rZW4uY29udGVudFR5cGVdKHRva2VuLnN0YXJ0KTsKICAgIGlmICh0b2tlbi5fY29udGVudFR5cGVUZXh0VHJhaWxpbmcpIHsKICAgICAgdG9rZW5pemVyLl9jb250ZW50VHlwZVRleHRUcmFpbGluZyA9IHRydWU7CiAgICB9CiAgfQogIGNvbnN0IGNoaWxkRXZlbnRzID0gdG9rZW5pemVyLmV2ZW50czsKICBjb25zdCBqdW1wcyA9IFtdOwogIGNvbnN0IGdhcHMgPSB7fTsKICBsZXQgc3RyZWFtOwogIGxldCBwcmV2aW91czM7CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBjdXJyZW50ID0gdG9rZW47CiAgbGV0IGFkanVzdCA9IDA7CiAgbGV0IHN0YXJ0ID0gMDsKICBjb25zdCBicmVha3MgPSBbc3RhcnRdOwogIHdoaWxlIChjdXJyZW50KSB7CiAgICB3aGlsZSAoZXZlbnRzLmdldCgrK3N0YXJ0UG9zaXRpb24pWzFdICE9PSBjdXJyZW50KSB7CiAgICB9CiAgICBzdGFydFBvc2l0aW9ucy5wdXNoKHN0YXJ0UG9zaXRpb24pOwogICAgaWYgKCFjdXJyZW50Ll90b2tlbml6ZXIpIHsKICAgICAgc3RyZWFtID0gY29udGV4dDIuc2xpY2VTdHJlYW0oY3VycmVudCk7CiAgICAgIGlmICghY3VycmVudC5uZXh0KSB7CiAgICAgICAgc3RyZWFtLnB1c2gobnVsbCk7CiAgICAgIH0KICAgICAgaWYgKHByZXZpb3VzMykgewogICAgICAgIHRva2VuaXplci5kZWZpbmVTa2lwKGN1cnJlbnQuc3RhcnQpOwogICAgICB9CiAgICAgIGlmIChjdXJyZW50Ll9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSkgewogICAgICAgIHRva2VuaXplci5fZ2ZtVGFza2xpc3RGaXJzdENvbnRlbnRPZkxpc3RJdGVtID0gdHJ1ZTsKICAgICAgfQogICAgICB0b2tlbml6ZXIud3JpdGUoc3RyZWFtKTsKICAgICAgaWYgKGN1cnJlbnQuX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtKSB7CiAgICAgICAgdG9rZW5pemVyLl9nZm1UYXNrbGlzdEZpcnN0Q29udGVudE9mTGlzdEl0ZW0gPSB2b2lkIDA7CiAgICAgIH0KICAgIH0KICAgIHByZXZpb3VzMyA9IGN1cnJlbnQ7CiAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0OwogIH0KICBjdXJyZW50ID0gdG9rZW47CiAgd2hpbGUgKCsraW5kZXgyIDwgY2hpbGRFdmVudHMubGVuZ3RoKSB7CiAgICBpZiAoCiAgICAgIC8vIEZpbmQgYSB2b2lkIHRva2VuIHRoYXQgaW5jbHVkZXMgYSBicmVhay4KICAgICAgY2hpbGRFdmVudHNbaW5kZXgyXVswXSA9PT0gImV4aXQiICYmIGNoaWxkRXZlbnRzW2luZGV4MiAtIDFdWzBdID09PSAiZW50ZXIiICYmIGNoaWxkRXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gY2hpbGRFdmVudHNbaW5kZXgyIC0gMV1bMV0udHlwZSAmJiBjaGlsZEV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0LmxpbmUgIT09IGNoaWxkRXZlbnRzW2luZGV4Ml1bMV0uZW5kLmxpbmUKICAgICkgewogICAgICBzdGFydCA9IGluZGV4MiArIDE7CiAgICAgIGJyZWFrcy5wdXNoKHN0YXJ0KTsKICAgICAgY3VycmVudC5fdG9rZW5pemVyID0gdm9pZCAwOwogICAgICBjdXJyZW50LnByZXZpb3VzID0gdm9pZCAwOwogICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0OwogICAgfQogIH0KICB0b2tlbml6ZXIuZXZlbnRzID0gW107CiAgaWYgKGN1cnJlbnQpIHsKICAgIGN1cnJlbnQuX3Rva2VuaXplciA9IHZvaWQgMDsKICAgIGN1cnJlbnQucHJldmlvdXMgPSB2b2lkIDA7CiAgfSBlbHNlIHsKICAgIGJyZWFrcy5wb3AoKTsKICB9CiAgaW5kZXgyID0gYnJlYWtzLmxlbmd0aDsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIGNvbnN0IHNsaWNlID0gY2hpbGRFdmVudHMuc2xpY2UoYnJlYWtzW2luZGV4Ml0sIGJyZWFrc1tpbmRleDIgKyAxXSk7CiAgICBjb25zdCBzdGFydDIgPSBzdGFydFBvc2l0aW9ucy5wb3AoKTsKICAgIGp1bXBzLnB1c2goW3N0YXJ0Miwgc3RhcnQyICsgc2xpY2UubGVuZ3RoIC0gMV0pOwogICAgZXZlbnRzLnNwbGljZShzdGFydDIsIDIsIHNsaWNlKTsKICB9CiAganVtcHMucmV2ZXJzZSgpOwogIGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGp1bXBzLmxlbmd0aCkgewogICAgZ2Fwc1thZGp1c3QgKyBqdW1wc1tpbmRleDJdWzBdXSA9IGFkanVzdCArIGp1bXBzW2luZGV4Ml1bMV07CiAgICBhZGp1c3QgKz0ganVtcHNbaW5kZXgyXVsxXSAtIGp1bXBzW2luZGV4Ml1bMF0gLSAxOwogIH0KICByZXR1cm4gZ2FwczsKfQp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9zdWJ0b2tlbml6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1zdWJ0b2tlbml6ZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NodW5rZWQoKTsKICAgIGluaXRfc3BsaWNlX2J1ZmZlcigpOwogICAgaW5pdF9zcGxpY2VfYnVmZmVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb250ZW50LmpzCmZ1bmN0aW9uIHJlc29sdmVDb250ZW50KGV2ZW50cykgewogIHN1YnRva2VuaXplKGV2ZW50cyk7CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiB0b2tlbml6ZUNvbnRlbnQoZWZmZWN0cywgb2szKSB7CiAgbGV0IHByZXZpb3VzMzsKICByZXR1cm4gY2h1bmtTdGFydDsKICBmdW5jdGlvbiBjaHVua1N0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJjb250ZW50Iik7CiAgICBwcmV2aW91czMgPSBlZmZlY3RzLmVudGVyKCJjaHVua0NvbnRlbnQiLCB7CiAgICAgIGNvbnRlbnRUeXBlOiAiY29udGVudCIKICAgIH0pOwogICAgcmV0dXJuIGNodW5rSW5zaWRlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY2h1bmtJbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gY29udGVudEVuZChjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhjb250aW51YXRpb25Db25zdHJ1Y3QsIGNvbnRlbnRDb250aW51ZSwgY29udGVudEVuZCkoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjaHVua0luc2lkZTsKICB9CiAgZnVuY3Rpb24gY29udGVudEVuZChjb2RlNCkgewogICAgZWZmZWN0cy5leGl0KCJjaHVua0NvbnRlbnQiKTsKICAgIGVmZmVjdHMuZXhpdCgiY29udGVudCIpOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRlbnRDb250aW51ZShjb2RlNCkgewogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtDb250ZW50Iik7CiAgICBwcmV2aW91czMubmV4dCA9IGVmZmVjdHMuZW50ZXIoImNodW5rQ29udGVudCIsIHsKICAgICAgY29udGVudFR5cGU6ICJjb250ZW50IiwKICAgICAgcHJldmlvdXM6IHByZXZpb3VzMwogICAgfSk7CiAgICBwcmV2aW91czMgPSBwcmV2aW91czMubmV4dDsKICAgIHJldHVybiBjaHVua0luc2lkZTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVDb250aW51YXRpb24oZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHN0YXJ0TG9va2FoZWFkOwogIGZ1bmN0aW9uIHN0YXJ0TG9va2FoZWFkKGNvZGU0KSB7CiAgICBlZmZlY3RzLmV4aXQoImNodW5rQ29udGVudCIpOwogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBwcmVmaXhlZCwgImxpbmVQcmVmaXgiKTsKICB9CiAgZnVuY3Rpb24gcHJlZml4ZWQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgY29uc3QgdGFpbCA9IHNlbGYyLmV2ZW50c1tzZWxmMi5ldmVudHMubGVuZ3RoIC0gMV07CiAgICBpZiAoIXNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIikgJiYgdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09ICJsaW5lUHJlZml4IiAmJiB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA+PSA0KSB7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGVmZmVjdHMuaW50ZXJydXB0KHNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzLmZsb3csIG5vaywgb2szKShjb2RlNCk7CiAgfQp9CnZhciBjb250ZW50LCBjb250aW51YXRpb25Db25zdHJ1Y3Q7CnZhciBpbml0X2NvbnRlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb250ZW50LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX3N1YnRva2VuaXplKCk7CiAgICBjb250ZW50ID0gewogICAgICByZXNvbHZlOiByZXNvbHZlQ29udGVudCwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQ29udGVudAogICAgfTsKICAgIGNvbnRpbnVhdGlvbkNvbnN0cnVjdCA9IHsKICAgICAgcGFydGlhbDogdHJ1ZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQ29udGludWF0aW9uCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3RvcnktZGVzdGluYXRpb25AMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LWRlc3RpbmF0aW9uL2luZGV4LmpzCmZ1bmN0aW9uIGZhY3RvcnlEZXN0aW5hdGlvbihlZmZlY3RzLCBvazMsIG5vaywgdHlwZTUsIGxpdGVyYWxUeXBlLCBsaXRlcmFsTWFya2VyVHlwZSwgcmF3VHlwZSwgc3RyaW5nVHlwZSwgbWF4MykgewogIGNvbnN0IGxpbWl0ID0gbWF4MyB8fCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgbGV0IGJhbGFuY2UgPSAwOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MCkgewogICAgICBlZmZlY3RzLmVudGVyKHR5cGU1KTsKICAgICAgZWZmZWN0cy5lbnRlcihsaXRlcmFsVHlwZSk7CiAgICAgIGVmZmVjdHMuZW50ZXIobGl0ZXJhbE1hcmtlclR5cGUpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQobGl0ZXJhbE1hcmtlclR5cGUpOwogICAgICByZXR1cm4gZW5jbG9zZWRCZWZvcmU7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDMyIHx8IGNvZGU0ID09PSA0MSB8fCBhc2NpaUNvbnRyb2woY29kZTQpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcih0eXBlNSk7CiAgICBlZmZlY3RzLmVudGVyKHJhd1R5cGUpOwogICAgZWZmZWN0cy5lbnRlcihzdHJpbmdUeXBlKTsKICAgIGVmZmVjdHMuZW50ZXIoImNodW5rU3RyaW5nIiwgewogICAgICBjb250ZW50VHlwZTogInN0cmluZyIKICAgIH0pOwogICAgcmV0dXJuIHJhdzIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBlbmNsb3NlZEJlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MikgewogICAgICBlZmZlY3RzLmVudGVyKGxpdGVyYWxNYXJrZXJUeXBlKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KGxpdGVyYWxNYXJrZXJUeXBlKTsKICAgICAgZWZmZWN0cy5leGl0KGxpdGVyYWxUeXBlKTsKICAgICAgZWZmZWN0cy5leGl0KHR5cGU1KTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoc3RyaW5nVHlwZSk7CiAgICBlZmZlY3RzLmVudGVyKCJjaHVua1N0cmluZyIsIHsKICAgICAgY29udGVudFR5cGU6ICJzdHJpbmciCiAgICB9KTsKICAgIHJldHVybiBlbmNsb3NlZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGVuY2xvc2VkKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtTdHJpbmciKTsKICAgICAgZWZmZWN0cy5leGl0KHN0cmluZ1R5cGUpOwogICAgICByZXR1cm4gZW5jbG9zZWRCZWZvcmUoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA2MCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb2RlNCA9PT0gOTIgPyBlbmNsb3NlZEVzY2FwZSA6IGVuY2xvc2VkOwogIH0KICBmdW5jdGlvbiBlbmNsb3NlZEVzY2FwZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MCB8fCBjb2RlNCA9PT0gNjIgfHwgY29kZTQgPT09IDkyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBlbmNsb3NlZDsKICAgIH0KICAgIHJldHVybiBlbmNsb3NlZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHJhdzIoY29kZTQpIHsKICAgIGlmICghYmFsYW5jZSAmJiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDQxIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSkgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rU3RyaW5nIik7CiAgICAgIGVmZmVjdHMuZXhpdChzdHJpbmdUeXBlKTsKICAgICAgZWZmZWN0cy5leGl0KHJhd1R5cGUpOwogICAgICBlZmZlY3RzLmV4aXQodHlwZTUpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIGlmIChiYWxhbmNlIDwgbGltaXQgJiYgY29kZTQgPT09IDQwKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGJhbGFuY2UrKzsKICAgICAgcmV0dXJuIHJhdzI7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQxKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGJhbGFuY2UtLTsKICAgICAgcmV0dXJuIHJhdzI7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDMyIHx8IGNvZGU0ID09PSA0MCB8fCBhc2NpaUNvbnRyb2woY29kZTQpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb2RlNCA9PT0gOTIgPyByYXdFc2NhcGUgOiByYXcyOwogIH0KICBmdW5jdGlvbiByYXdFc2NhcGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDAgfHwgY29kZTQgPT09IDQxIHx8IGNvZGU0ID09PSA5MikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gcmF3MjsKICAgIH0KICAgIHJldHVybiByYXcyKGNvZGU0KTsKICB9Cn0KdmFyIGluaXRfbWljcm9tYXJrX2ZhY3RvcnlfZGVzdGluYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS1kZXN0aW5hdGlvbkAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3RvcnktZGVzdGluYXRpb24vaW5kZXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LWxhYmVsQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS1sYWJlbC9pbmRleC5qcwpmdW5jdGlvbiBmYWN0b3J5TGFiZWwoZWZmZWN0cywgb2szLCBub2ssIHR5cGU1LCBtYXJrZXJUeXBlLCBzdHJpbmdUeXBlKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBzaXplID0gMDsKICBsZXQgc2VlbjsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIodHlwZTUpOwogICAgZWZmZWN0cy5lbnRlcihtYXJrZXJUeXBlKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQobWFya2VyVHlwZSk7CiAgICBlZmZlY3RzLmVudGVyKHN0cmluZ1R5cGUpOwogICAgcmV0dXJuIGF0QnJlYWs7CiAgfQogIGZ1bmN0aW9uIGF0QnJlYWsoY29kZTQpIHsKICAgIGlmIChzaXplID4gOTk5IHx8IGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA5MSB8fCBjb2RlNCA9PT0gOTMgJiYgIXNlZW4gfHwgLy8gVG8gZG86IHJlbW92ZSBpbiB0aGUgZnV0dXJlIG9uY2Ugd2XigJl2ZSBzd2l0Y2hlZCBmcm9tCiAgICAvLyBgbWljcm9tYXJrLWV4dGVuc2lvbi1mb290bm90ZWAgdG8gYG1pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlYCwKICAgIC8vIHdoaWNoIGRvZXNu4oCZdCBuZWVkIHRoaXMuCiAgICAvLyBIaWRkZW4gZm9vdG5vdGVzIGhvb2suCiAgICAvKiBjOCBpZ25vcmUgbmV4dCAzICovCiAgICBjb2RlNCA9PT0gOTQgJiYgIXNpemUgJiYgIl9oaWRkZW5Gb290bm90ZVN1cHBvcnQiIGluIHNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmV4aXQoc3RyaW5nVHlwZSk7CiAgICAgIGVmZmVjdHMuZW50ZXIobWFya2VyVHlwZSk7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdChtYXJrZXJUeXBlKTsKICAgICAgZWZmZWN0cy5leGl0KHR5cGU1KTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgIHJldHVybiBhdEJyZWFrOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiY2h1bmtTdHJpbmciLCB7CiAgICAgIGNvbnRlbnRUeXBlOiAic3RyaW5nIgogICAgfSk7CiAgICByZXR1cm4gbGFiZWxJbnNpZGUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBsYWJlbEluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA5MSB8fCBjb2RlNCA9PT0gOTMgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSB8fCBzaXplKysgPiA5OTkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjaHVua1N0cmluZyIpOwogICAgICByZXR1cm4gYXRCcmVhayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgaWYgKCFzZWVuKSBzZWVuID0gIW1hcmtkb3duU3BhY2UoY29kZTQpOwogICAgcmV0dXJuIGNvZGU0ID09PSA5MiA/IGxhYmVsRXNjYXBlIDogbGFiZWxJbnNpZGU7CiAgfQogIGZ1bmN0aW9uIGxhYmVsRXNjYXBlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDkxIHx8IGNvZGU0ID09PSA5MiB8fCBjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgc2l6ZSsrOwogICAgICByZXR1cm4gbGFiZWxJbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbGFiZWxJbnNpZGUoY29kZTQpOwogIH0KfQp2YXIgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9sYWJlbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LWxhYmVsQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS1sYWJlbC9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3RvcnktdGl0bGVAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXRpdGxlL2luZGV4LmpzCmZ1bmN0aW9uIGZhY3RvcnlUaXRsZShlZmZlY3RzLCBvazMsIG5vaywgdHlwZTUsIG1hcmtlclR5cGUsIHN0cmluZ1R5cGUpIHsKICBsZXQgbWFya2VyOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAzNCB8fCBjb2RlNCA9PT0gMzkgfHwgY29kZTQgPT09IDQwKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIodHlwZTUpOwogICAgICBlZmZlY3RzLmVudGVyKG1hcmtlclR5cGUpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQobWFya2VyVHlwZSk7CiAgICAgIG1hcmtlciA9IGNvZGU0ID09PSA0MCA/IDQxIDogY29kZTQ7CiAgICAgIHJldHVybiBiZWdpbjM7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVnaW4zKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICBlZmZlY3RzLmVudGVyKG1hcmtlclR5cGUpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQobWFya2VyVHlwZSk7CiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlNSk7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKHN0cmluZ1R5cGUpOwogICAgcmV0dXJuIGF0QnJlYWsoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhdEJyZWFrKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICBlZmZlY3RzLmV4aXQoc3RyaW5nVHlwZSk7CiAgICAgIHJldHVybiBiZWdpbjMobWFya2VyKTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYXRCcmVhaywgImxpbmVQcmVmaXgiKTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImNodW5rU3RyaW5nIiwgewogICAgICBjb250ZW50VHlwZTogInN0cmluZyIKICAgIH0pOwogICAgcmV0dXJuIGluc2lkZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBtYXJrZXIgfHwgY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rU3RyaW5nIik7CiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gY29kZTQgPT09IDkyID8gZXNjYXBlIDogaW5zaWRlOwogIH0KICBmdW5jdGlvbiBlc2NhcGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyIHx8IGNvZGU0ID09PSA5MikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gaW5zaWRlOwogICAgfQogICAgcmV0dXJuIGluc2lkZShjb2RlNCk7CiAgfQp9CnZhciBpbml0X21pY3JvbWFya19mYWN0b3J5X3RpdGxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3RvcnktdGl0bGVAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXRpdGxlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS13aGl0ZXNwYWNlQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS13aGl0ZXNwYWNlL2luZGV4LmpzCmZ1bmN0aW9uIGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIG9rMykgewogIGxldCBzZWVuOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgICAgc2VlbiA9IHRydWU7CiAgICAgIHJldHVybiBzdGFydDsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIHN0YXJ0LCBzZWVuID8gImxpbmVQcmVmaXgiIDogImxpbmVTdWZmaXgiKShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KdmFyIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfd2hpdGVzcGFjZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LXdoaXRlc3BhY2VAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXdoaXRlc3BhY2UvaW5kZXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2RlZmluaXRpb24uanMKZnVuY3Rpb24gdG9rZW5pemVEZWZpbml0aW9uKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBpZGVudGlmaWVyOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiZGVmaW5pdGlvbiIpOwogICAgcmV0dXJuIGJlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJlZm9yZShjb2RlNCkgewogICAgcmV0dXJuIGZhY3RvcnlMYWJlbC5jYWxsKAogICAgICBzZWxmMiwKICAgICAgZWZmZWN0cywKICAgICAgbGFiZWxBZnRlciwKICAgICAgLy8gTm90ZTogd2UgZG9u4oCZdCBuZWVkIHRvIHJlc2V0IHRoZSB3YXkgYG1hcmtkb3duLXJzYCBkb2VzLgogICAgICBub2ssCiAgICAgICJkZWZpbml0aW9uTGFiZWwiLAogICAgICAiZGVmaW5pdGlvbkxhYmVsTWFya2VyIiwKICAgICAgImRlZmluaXRpb25MYWJlbFN0cmluZyIKICAgICkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBsYWJlbEFmdGVyKGNvZGU0KSB7CiAgICBpZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcihzZWxmMi5zbGljZVNlcmlhbGl6ZShzZWxmMi5ldmVudHNbc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDFdWzFdKS5zbGljZSgxLCAtMSkpOwogICAgaWYgKGNvZGU0ID09PSA1OCkgewogICAgICBlZmZlY3RzLmVudGVyKCJkZWZpbml0aW9uTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiZGVmaW5pdGlvbk1hcmtlciIpOwogICAgICByZXR1cm4gbWFya2VyQWZ0ZXI7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbWFya2VyQWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSA/IGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIGRlc3RpbmF0aW9uQmVmb3JlKShjb2RlNCkgOiBkZXN0aW5hdGlvbkJlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGRlc3RpbmF0aW9uQmVmb3JlKGNvZGU0KSB7CiAgICByZXR1cm4gZmFjdG9yeURlc3RpbmF0aW9uKAogICAgICBlZmZlY3RzLAogICAgICBkZXN0aW5hdGlvbkFmdGVyLAogICAgICAvLyBOb3RlOiB3ZSBkb27igJl0IG5lZWQgdG8gcmVzZXQgdGhlIHdheSBgbWFya2Rvd24tcnNgIGRvZXMuCiAgICAgIG5vaywKICAgICAgImRlZmluaXRpb25EZXN0aW5hdGlvbiIsCiAgICAgICJkZWZpbml0aW9uRGVzdGluYXRpb25MaXRlcmFsIiwKICAgICAgImRlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXIiLAogICAgICAiZGVmaW5pdGlvbkRlc3RpbmF0aW9uUmF3IiwKICAgICAgImRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZyIKICAgICkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkZXN0aW5hdGlvbkFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KHRpdGxlQmVmb3JlLCBhZnRlciwgYWZ0ZXIpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlcldoaXRlc3BhY2UsICJ3aGl0ZXNwYWNlIikoY29kZTQpIDogYWZ0ZXJXaGl0ZXNwYWNlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYWZ0ZXJXaGl0ZXNwYWNlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImRlZmluaXRpb24iKTsKICAgICAgc2VsZjIucGFyc2VyLmRlZmluZWQucHVzaChpZGVudGlmaWVyKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVUaXRsZUJlZm9yZShlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiB0aXRsZUJlZm9yZTI7CiAgZnVuY3Rpb24gdGl0bGVCZWZvcmUyKGNvZGU0KSB7CiAgICByZXR1cm4gbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgPyBmYWN0b3J5V2hpdGVzcGFjZShlZmZlY3RzLCBiZWZvcmVNYXJrZXIpKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJlZm9yZU1hcmtlcihjb2RlNCkgewogICAgcmV0dXJuIGZhY3RvcnlUaXRsZShlZmZlY3RzLCB0aXRsZUFmdGVyLCBub2ssICJkZWZpbml0aW9uVGl0bGUiLCAiZGVmaW5pdGlvblRpdGxlTWFya2VyIiwgImRlZmluaXRpb25UaXRsZVN0cmluZyIpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGl0bGVBZnRlcihjb2RlNCkgewogICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZTQpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIHRpdGxlQWZ0ZXJPcHRpb25hbFdoaXRlc3BhY2UsICJ3aGl0ZXNwYWNlIikoY29kZTQpIDogdGl0bGVBZnRlck9wdGlvbmFsV2hpdGVzcGFjZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRpdGxlQWZ0ZXJPcHRpb25hbFdoaXRlc3BhY2UoY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpID8gb2szKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQp9CnZhciBkZWZpbml0aW9uMiwgdGl0bGVCZWZvcmU7CnZhciBpbml0X2RlZmluaXRpb24yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvZGVmaW5pdGlvbi5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X2Rlc3RpbmF0aW9uKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X2xhYmVsKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3RpdGxlKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3doaXRlc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX25vcm1hbGl6ZV9pZGVudGlmaWVyKCk7CiAgICBkZWZpbml0aW9uMiA9IHsKICAgICAgbmFtZTogImRlZmluaXRpb24iLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVEZWZpbml0aW9uCiAgICB9OwogICAgdGl0bGVCZWZvcmUgPSB7CiAgICAgIHBhcnRpYWw6IHRydWUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVRpdGxlQmVmb3JlCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaGFyZC1icmVhay1lc2NhcGUuanMKZnVuY3Rpb24gdG9rZW5pemVIYXJkQnJlYWtFc2NhcGUoZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImhhcmRCcmVha0VzY2FwZSIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBhZnRlcjsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiaGFyZEJyZWFrRXNjYXBlIik7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CnZhciBoYXJkQnJlYWtFc2NhcGU7CnZhciBpbml0X2hhcmRfYnJlYWtfZXNjYXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaGFyZC1icmVhay1lc2NhcGUuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGhhcmRCcmVha0VzY2FwZSA9IHsKICAgICAgbmFtZTogImhhcmRCcmVha0VzY2FwZSIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUhhcmRCcmVha0VzY2FwZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2hlYWRpbmctYXR4LmpzCmZ1bmN0aW9uIHJlc29sdmVIZWFkaW5nQXR4KGV2ZW50cywgY29udGV4dDIpIHsKICBsZXQgY29udGVudEVuZCA9IGV2ZW50cy5sZW5ndGggLSAyOwogIGxldCBjb250ZW50U3RhcnQgPSAzOwogIGxldCBjb250ZW50MzsKICBsZXQgdGV4dDk7CiAgaWYgKGV2ZW50c1tjb250ZW50U3RhcnRdWzFdLnR5cGUgPT09ICJ3aGl0ZXNwYWNlIikgewogICAgY29udGVudFN0YXJ0ICs9IDI7CiAgfQogIGlmIChjb250ZW50RW5kIC0gMiA+IGNvbnRlbnRTdGFydCAmJiBldmVudHNbY29udGVudEVuZF1bMV0udHlwZSA9PT0gIndoaXRlc3BhY2UiKSB7CiAgICBjb250ZW50RW5kIC09IDI7CiAgfQogIGlmIChldmVudHNbY29udGVudEVuZF1bMV0udHlwZSA9PT0gImF0eEhlYWRpbmdTZXF1ZW5jZSIgJiYgKGNvbnRlbnRTdGFydCA9PT0gY29udGVudEVuZCAtIDEgfHwgY29udGVudEVuZCAtIDQgPiBjb250ZW50U3RhcnQgJiYgZXZlbnRzW2NvbnRlbnRFbmQgLSAyXVsxXS50eXBlID09PSAid2hpdGVzcGFjZSIpKSB7CiAgICBjb250ZW50RW5kIC09IGNvbnRlbnRTdGFydCArIDEgPT09IGNvbnRlbnRFbmQgPyAyIDogNDsKICB9CiAgaWYgKGNvbnRlbnRFbmQgPiBjb250ZW50U3RhcnQpIHsKICAgIGNvbnRlbnQzID0gewogICAgICB0eXBlOiAiYXR4SGVhZGluZ1RleHQiLAogICAgICBzdGFydDogZXZlbnRzW2NvbnRlbnRTdGFydF1bMV0uc3RhcnQsCiAgICAgIGVuZDogZXZlbnRzW2NvbnRlbnRFbmRdWzFdLmVuZAogICAgfTsKICAgIHRleHQ5ID0gewogICAgICB0eXBlOiAiY2h1bmtUZXh0IiwKICAgICAgc3RhcnQ6IGV2ZW50c1tjb250ZW50U3RhcnRdWzFdLnN0YXJ0LAogICAgICBlbmQ6IGV2ZW50c1tjb250ZW50RW5kXVsxXS5lbmQsCiAgICAgIGNvbnRlbnRUeXBlOiAidGV4dCIKICAgIH07CiAgICBzcGxpY2UoZXZlbnRzLCBjb250ZW50U3RhcnQsIGNvbnRlbnRFbmQgLSBjb250ZW50U3RhcnQgKyAxLCBbWyJlbnRlciIsIGNvbnRlbnQzLCBjb250ZXh0Ml0sIFsiZW50ZXIiLCB0ZXh0OSwgY29udGV4dDJdLCBbImV4aXQiLCB0ZXh0OSwgY29udGV4dDJdLCBbImV4aXQiLCBjb250ZW50MywgY29udGV4dDJdXSk7CiAgfQogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gdG9rZW5pemVIZWFkaW5nQXR4KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgbGV0IHNpemUgPSAwOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiYXR4SGVhZGluZyIpOwogICAgcmV0dXJuIGJlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJlZm9yZShjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiYXR4SGVhZGluZ1NlcXVlbmNlIik7CiAgICByZXR1cm4gc2VxdWVuY2VPcGVuKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gc2VxdWVuY2VPcGVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDM1ICYmIHNpemUrKyA8IDYpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHNlcXVlbmNlT3BlbjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpOwogICAgICByZXR1cm4gYXRCcmVhayhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYXRCcmVhayhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAzNSkgewogICAgICBlZmZlY3RzLmVudGVyKCJhdHhIZWFkaW5nU2VxdWVuY2UiKTsKICAgICAgcmV0dXJuIHNlcXVlbmNlRnVydGhlcihjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImF0eEhlYWRpbmciKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhdEJyZWFrLCAid2hpdGVzcGFjZSIpKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImF0eEhlYWRpbmdUZXh0Iik7CiAgICByZXR1cm4gZGF0YShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHNlcXVlbmNlRnVydGhlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAzNSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gc2VxdWVuY2VGdXJ0aGVyOwogICAgfQogICAgZWZmZWN0cy5leGl0KCJhdHhIZWFkaW5nU2VxdWVuY2UiKTsKICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZGF0YShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSAzNSB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImF0eEhlYWRpbmdUZXh0Iik7CiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gZGF0YTsKICB9Cn0KdmFyIGhlYWRpbmdBdHg7CnZhciBpbml0X2hlYWRpbmdfYXR4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaGVhZGluZy1hdHguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCgpOwogICAgaGVhZGluZ0F0eCA9IHsKICAgICAgbmFtZTogImhlYWRpbmdBdHgiLAogICAgICByZXNvbHZlOiByZXNvbHZlSGVhZGluZ0F0eCwKICAgICAgdG9rZW5pemU6IHRva2VuaXplSGVhZGluZ0F0eAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWh0bWwtdGFnLW5hbWVAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWh0bWwtdGFnLW5hbWUvaW5kZXguanMKdmFyIGh0bWxCbG9ja05hbWVzLCBodG1sUmF3TmFtZXM7CnZhciBpbml0X21pY3JvbWFya191dGlsX2h0bWxfdGFnX25hbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1odG1sLXRhZy1uYW1lQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1odG1sLXRhZy1uYW1lL2luZGV4LmpzIigpIHsKICAgIGh0bWxCbG9ja05hbWVzID0gWwogICAgICAiYWRkcmVzcyIsCiAgICAgICJhcnRpY2xlIiwKICAgICAgImFzaWRlIiwKICAgICAgImJhc2UiLAogICAgICAiYmFzZWZvbnQiLAogICAgICAiYmxvY2txdW90ZSIsCiAgICAgICJib2R5IiwKICAgICAgImNhcHRpb24iLAogICAgICAiY2VudGVyIiwKICAgICAgImNvbCIsCiAgICAgICJjb2xncm91cCIsCiAgICAgICJkZCIsCiAgICAgICJkZXRhaWxzIiwKICAgICAgImRpYWxvZyIsCiAgICAgICJkaXIiLAogICAgICAiZGl2IiwKICAgICAgImRsIiwKICAgICAgImR0IiwKICAgICAgImZpZWxkc2V0IiwKICAgICAgImZpZ2NhcHRpb24iLAogICAgICAiZmlndXJlIiwKICAgICAgImZvb3RlciIsCiAgICAgICJmb3JtIiwKICAgICAgImZyYW1lIiwKICAgICAgImZyYW1lc2V0IiwKICAgICAgImgxIiwKICAgICAgImgyIiwKICAgICAgImgzIiwKICAgICAgImg0IiwKICAgICAgImg1IiwKICAgICAgImg2IiwKICAgICAgImhlYWQiLAogICAgICAiaGVhZGVyIiwKICAgICAgImhyIiwKICAgICAgImh0bWwiLAogICAgICAiaWZyYW1lIiwKICAgICAgImxlZ2VuZCIsCiAgICAgICJsaSIsCiAgICAgICJsaW5rIiwKICAgICAgIm1haW4iLAogICAgICAibWVudSIsCiAgICAgICJtZW51aXRlbSIsCiAgICAgICJuYXYiLAogICAgICAibm9mcmFtZXMiLAogICAgICAib2wiLAogICAgICAib3B0Z3JvdXAiLAogICAgICAib3B0aW9uIiwKICAgICAgInAiLAogICAgICAicGFyYW0iLAogICAgICAic2VhcmNoIiwKICAgICAgInNlY3Rpb24iLAogICAgICAic3VtbWFyeSIsCiAgICAgICJ0YWJsZSIsCiAgICAgICJ0Ym9keSIsCiAgICAgICJ0ZCIsCiAgICAgICJ0Zm9vdCIsCiAgICAgICJ0aCIsCiAgICAgICJ0aGVhZCIsCiAgICAgICJ0aXRsZSIsCiAgICAgICJ0ciIsCiAgICAgICJ0cmFjayIsCiAgICAgICJ1bCIKICAgIF07CiAgICBodG1sUmF3TmFtZXMgPSBbInByZSIsICJzY3JpcHQiLCAic3R5bGUiLCAidGV4dGFyZWEiXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2h0bWwtZmxvdy5qcwpmdW5jdGlvbiByZXNvbHZlVG9IdG1sRmxvdyhldmVudHMpIHsKICBsZXQgaW5kZXgyID0gZXZlbnRzLmxlbmd0aDsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIiAmJiBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAiaHRtbEZsb3ciKSB7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICBpZiAoaW5kZXgyID4gMSAmJiBldmVudHNbaW5kZXgyIC0gMl1bMV0udHlwZSA9PT0gImxpbmVQcmVmaXgiKSB7CiAgICBldmVudHNbaW5kZXgyXVsxXS5zdGFydCA9IGV2ZW50c1tpbmRleDIgLSAyXVsxXS5zdGFydDsKICAgIGV2ZW50c1tpbmRleDIgKyAxXVsxXS5zdGFydCA9IGV2ZW50c1tpbmRleDIgLSAyXVsxXS5zdGFydDsKICAgIGV2ZW50cy5zcGxpY2UoaW5kZXgyIC0gMiwgMik7CiAgfQogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gdG9rZW5pemVIdG1sRmxvdyhlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBsZXQgbWFya2VyOwogIGxldCBjbG9zaW5nVGFnOwogIGxldCBidWZmZXIyOwogIGxldCBpbmRleDI7CiAgbGV0IG1hcmtlckI7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICByZXR1cm4gYmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlKGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJodG1sRmxvdyIpOwogICAgZWZmZWN0cy5lbnRlcigiaHRtbEZsb3dEYXRhIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIG9wZW47CiAgfQogIGZ1bmN0aW9uIG9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMzMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uT3BlbjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDcpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgY2xvc2luZ1RhZyA9IHRydWU7CiAgICAgIHJldHVybiB0YWdDbG9zZVN0YXJ0OwogICAgfQogICAgaWYgKGNvZGU0ID09PSA2MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBtYXJrZXIgPSAzOwogICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ID8gb2szIDogY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7CiAgICB9CiAgICBpZiAoYXNjaWlBbHBoYShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgYnVmZmVyMiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTQpOwogICAgICByZXR1cm4gdGFnTmFtZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBkZWNsYXJhdGlvbk9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDUpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgbWFya2VyID0gMjsKICAgICAgcmV0dXJuIGNvbW1lbnRPcGVuSW5zaWRlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBtYXJrZXIgPSA1OwogICAgICBpbmRleDIgPSAwOwogICAgICByZXR1cm4gY2RhdGFPcGVuSW5zaWRlOwogICAgfQogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIG1hcmtlciA9IDQ7CiAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMgOiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21tZW50T3Blbkluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ID8gb2szIDogY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY2RhdGFPcGVuSW5zaWRlKGNvZGU0KSB7CiAgICBjb25zdCB2YWx1ZTIgPSAiQ0RBVEFbIjsKICAgIGlmIChjb2RlNCA9PT0gdmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyKyspKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGlmIChpbmRleDIgPT09IHZhbHVlMi5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ID8gb2szIDogY29udGludWF0aW9uOwogICAgICB9CiAgICAgIHJldHVybiBjZGF0YU9wZW5JbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGFnQ2xvc2VTdGFydChjb2RlNCkgewogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGJ1ZmZlcjIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ05hbWU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGFnTmFtZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA0NyB8fCBjb2RlNCA9PT0gNjIgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgY29uc3Qgc2xhc2ggPSBjb2RlNCA9PT0gNDc7CiAgICAgIGNvbnN0IG5hbWUgPSBidWZmZXIyLnRvTG93ZXJDYXNlKCk7CiAgICAgIGlmICghc2xhc2ggJiYgIWNsb3NpbmdUYWcgJiYgaHRtbFJhd05hbWVzLmluY2x1ZGVzKG5hbWUpKSB7CiAgICAgICAgbWFya2VyID0gMTsKICAgICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ID8gb2szKGNvZGU0KSA6IGNvbnRpbnVhdGlvbihjb2RlNCk7CiAgICAgIH0KICAgICAgaWYgKGh0bWxCbG9ja05hbWVzLmluY2x1ZGVzKGJ1ZmZlcjIudG9Mb3dlckNhc2UoKSkpIHsKICAgICAgICBtYXJrZXIgPSA2OwogICAgICAgIGlmIChzbGFzaCkgewogICAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgICAgIHJldHVybiBiYXNpY1NlbGZDbG9zaW5nOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ID8gb2szKGNvZGU0KSA6IGNvbnRpbnVhdGlvbihjb2RlNCk7CiAgICAgIH0KICAgICAgbWFya2VyID0gNzsKICAgICAgcmV0dXJuIHNlbGYyLmludGVycnVwdCAmJiAhc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0gPyBub2soY29kZTQpIDogY2xvc2luZ1RhZyA/IGNvbXBsZXRlQ2xvc2luZ1RhZ0FmdGVyKGNvZGU0KSA6IGNvbXBsZXRlQXR0cmlidXRlTmFtZUJlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBidWZmZXIyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTQpOwogICAgICByZXR1cm4gdGFnTmFtZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBiYXNpY1NlbGZDbG9zaW5nKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMgOiBjb250aW51YXRpb247CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tcGxldGVDbG9zaW5nVGFnQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tcGxldGVDbG9zaW5nVGFnQWZ0ZXI7CiAgICB9CiAgICByZXR1cm4gY29tcGxldGVFbmQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVCZWZvcmUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDcpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlRW5kOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA1OCB8fCBjb2RlNCA9PT0gOTUgfHwgYXNjaWlBbHBoYShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lQmVmb3JlOwogICAgfQogICAgcmV0dXJuIGNvbXBsZXRlRW5kKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tcGxldGVBdHRyaWJ1dGVOYW1lKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1IHx8IGNvZGU0ID09PSA0NiB8fCBjb2RlNCA9PT0gNTggfHwgY29kZTQgPT09IDk1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lOwogICAgfQogICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUFmdGVyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tcGxldGVBdHRyaWJ1dGVOYW1lQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjEpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVCZWZvcmU7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUFmdGVyOwogICAgfQogICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUJlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVCZWZvcmUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gNjAgfHwgY29kZTQgPT09IDYxIHx8IGNvZGU0ID09PSA2MiB8fCBjb2RlNCA9PT0gOTYpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDM0IHx8IGNvZGU0ID09PSAzOSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBtYXJrZXJCID0gY29kZTQ7CiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlUXVvdGVkOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlQmVmb3JlOwogICAgfQogICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVVbnF1b3RlZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVRdW90ZWQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyQikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBtYXJrZXJCID0gbnVsbDsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVRdW90ZWRBZnRlcjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlUXVvdGVkOwogIH0KICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gMzQgfHwgY29kZTQgPT09IDM5IHx8IGNvZGU0ID09PSA0NyB8fCBjb2RlNCA9PT0gNjAgfHwgY29kZTQgPT09IDYxIHx8IGNvZGU0ID09PSA2MiB8fCBjb2RlNCA9PT0gOTYgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUFmdGVyKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZVVucXVvdGVkOwogIH0KICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlUXVvdGVkQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDcgfHwgY29kZTQgPT09IDYyIHx8IG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVCZWZvcmUoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlRW5kKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21wbGV0ZUFmdGVyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBjb250aW51YXRpb24oY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21wbGV0ZUFmdGVyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRpbnVhdGlvbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSAmJiBtYXJrZXIgPT09IDIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkNvbW1lbnRJbnNpZGU7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDYwICYmIG1hcmtlciA9PT0gMSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGludWF0aW9uUmF3VGFnT3BlbjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNjIgJiYgbWFya2VyID09PSA0KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb250aW51YXRpb25DbG9zZTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNjMgJiYgbWFya2VyID09PSAzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gOTMgJiYgbWFya2VyID09PSA1KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb250aW51YXRpb25DZGF0YUluc2lkZTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpICYmIChtYXJrZXIgPT09IDYgfHwgbWFya2VyID09PSA3KSkgewogICAgICBlZmZlY3RzLmV4aXQoImh0bWxGbG93RGF0YSIpOwogICAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhibGFua0xpbmVCZWZvcmUsIGNvbnRpbnVhdGlvbkFmdGVyLCBjb250aW51YXRpb25TdGFydCkoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJodG1sRmxvd0RhdGEiKTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvblN0YXJ0KGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gY29udGludWF0aW9uOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25TdGFydChjb2RlNCkgewogICAgcmV0dXJuIGVmZmVjdHMuY2hlY2sobm9uTGF6eUNvbnRpbnVhdGlvblN0YXJ0LCBjb250aW51YXRpb25TdGFydE5vbkxhenksIGNvbnRpbnVhdGlvbkFmdGVyKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRpbnVhdGlvblN0YXJ0Tm9uTGF6eShjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgcmV0dXJuIGNvbnRpbnVhdGlvbkJlZm9yZTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uQmVmb3JlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm4gY29udGludWF0aW9uU3RhcnQoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiaHRtbEZsb3dEYXRhIik7CiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uQ29tbWVudEluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7CiAgICB9CiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uUmF3VGFnT3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBidWZmZXIyID0gIiI7CiAgICAgIHJldHVybiBjb250aW51YXRpb25SYXdFbmRUYWc7CiAgICB9CiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uUmF3RW5kVGFnKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGNvbnN0IG5hbWUgPSBidWZmZXIyLnRvTG93ZXJDYXNlKCk7CiAgICAgIGlmIChodG1sUmF3TmFtZXMuaW5jbHVkZXMobmFtZSkpIHsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHJldHVybiBjb250aW51YXRpb25DbG9zZTsKICAgICAgfQogICAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGU0KTsKICAgIH0KICAgIGlmIChhc2NpaUFscGhhKGNvZGU0KSAmJiBidWZmZXIyLmxlbmd0aCA8IDgpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgYnVmZmVyMiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvblJhd0VuZFRhZzsKICAgIH0KICAgIHJldHVybiBjb250aW51YXRpb24oY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25DZGF0YUluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7CiAgICB9CiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkNsb3NlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NSAmJiBtYXJrZXIgPT09IDIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkRlY2xhcmF0aW9uSW5zaWRlOwogICAgfQogICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRpbnVhdGlvbkNsb3NlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImh0bWxGbG93RGF0YSIpOwogICAgICByZXR1cm4gY29udGludWF0aW9uQWZ0ZXIoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb250aW51YXRpb25DbG9zZTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uQWZ0ZXIoY29kZTQpIHsKICAgIGVmZmVjdHMuZXhpdCgiaHRtbEZsb3ciKTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZU5vbkxhenlDb250aW51YXRpb25TdGFydChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgIHJldHVybiBhZnRlcjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgcmV0dXJuIHNlbGYyLnBhcnNlci5sYXp5W3NlbGYyLm5vdygpLmxpbmVdID8gbm9rKGNvZGU0KSA6IG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplQmxhbmtMaW5lQmVmb3JlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGJsYW5rTGluZSwgb2szLCBub2spOwogIH0KfQp2YXIgaHRtbEZsb3csIGJsYW5rTGluZUJlZm9yZSwgbm9uTGF6eUNvbnRpbnVhdGlvblN0YXJ0Owp2YXIgaW5pdF9odG1sX2Zsb3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9odG1sLWZsb3cuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfaHRtbF90YWdfbmFtZSgpOwogICAgaW5pdF9ibGFua19saW5lKCk7CiAgICBodG1sRmxvdyA9IHsKICAgICAgY29uY3JldGU6IHRydWUsCiAgICAgIG5hbWU6ICJodG1sRmxvdyIsCiAgICAgIHJlc29sdmVUbzogcmVzb2x2ZVRvSHRtbEZsb3csCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUh0bWxGbG93CiAgICB9OwogICAgYmxhbmtMaW5lQmVmb3JlID0gewogICAgICBwYXJ0aWFsOiB0cnVlLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVCbGFua0xpbmVCZWZvcmUKICAgIH07CiAgICBub25MYXp5Q29udGludWF0aW9uU3RhcnQgPSB7CiAgICAgIHBhcnRpYWw6IHRydWUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZU5vbkxhenlDb250aW51YXRpb25TdGFydAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2h0bWwtdGV4dC5qcwpmdW5jdGlvbiB0b2tlbml6ZUh0bWxUZXh0KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBtYXJrZXI7CiAgbGV0IGluZGV4MjsKICBsZXQgcmV0dXJuU3RhdGU7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJodG1sVGV4dCIpOwogICAgZWZmZWN0cy5lbnRlcigiaHRtbFRleHREYXRhIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIG9wZW47CiAgfQogIGZ1bmN0aW9uIG9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMzMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uT3BlbjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDcpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ0Nsb3NlU3RhcnQ7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDYzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBpbnN0cnVjdGlvbjsKICAgIH0KICAgIGlmIChhc2NpaUFscGhhKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBkZWNsYXJhdGlvbk9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDUpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbW1lbnRPcGVuSW5zaWRlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBpbmRleDIgPSAwOwogICAgICByZXR1cm4gY2RhdGFPcGVuSW5zaWRlOwogICAgfQogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21tZW50T3Blbkluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tbWVudEVuZDsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21tZW50Myhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tbWVudENsb3NlOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuU3RhdGUgPSBjb21tZW50MzsKICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb21tZW50MzsKICB9CiAgZnVuY3Rpb24gY29tbWVudENsb3NlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21tZW50RW5kOwogICAgfQogICAgcmV0dXJuIGNvbW1lbnQzKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tbWVudEVuZChjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSA2MiA/IGVuZDMoY29kZTQpIDogY29kZTQgPT09IDQ1ID8gY29tbWVudENsb3NlKGNvZGU0KSA6IGNvbW1lbnQzKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY2RhdGFPcGVuSW5zaWRlKGNvZGU0KSB7CiAgICBjb25zdCB2YWx1ZTIgPSAiQ0RBVEFbIjsKICAgIGlmIChjb2RlNCA9PT0gdmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyKyspKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBpbmRleDIgPT09IHZhbHVlMi5sZW5ndGggPyBjZGF0YSA6IGNkYXRhT3Blbkluc2lkZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjZGF0YShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY2RhdGFDbG9zZTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVyblN0YXRlID0gY2RhdGE7CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gY2RhdGE7CiAgfQogIGZ1bmN0aW9uIGNkYXRhQ2xvc2UoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNkYXRhRW5kOwogICAgfQogICAgcmV0dXJuIGNkYXRhKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY2RhdGFFbmQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgcmV0dXJuIGVuZDMoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY2RhdGFFbmQ7CiAgICB9CiAgICByZXR1cm4gY2RhdGEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkZWNsYXJhdGlvbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA2MikgewogICAgICByZXR1cm4gZW5kMyhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm5TdGF0ZSA9IGRlY2xhcmF0aW9uOwogICAgICByZXR1cm4gbGluZUVuZGluZ0JlZm9yZShjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogIH0KICBmdW5jdGlvbiBpbnN0cnVjdGlvbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA2MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25DbG9zZTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVyblN0YXRlID0gaW5zdHJ1Y3Rpb247CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gaW5zdHJ1Y3Rpb247CiAgfQogIGZ1bmN0aW9uIGluc3RydWN0aW9uQ2xvc2UoY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCA9PT0gNjIgPyBlbmQzKGNvZGU0KSA6IGluc3RydWN0aW9uKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGFnQ2xvc2VTdGFydChjb2RlNCkgewogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdDbG9zZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdDbG9zZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ0Nsb3NlOwogICAgfQogICAgcmV0dXJuIHRhZ0Nsb3NlQmV0d2Vlbihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRhZ0Nsb3NlQmV0d2Vlbihjb2RlNCkgewogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuU3RhdGUgPSB0YWdDbG9zZUJldHdlZW47CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnQ2xvc2VCZXR3ZWVuOwogICAgfQogICAgcmV0dXJuIGVuZDMoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdPcGVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDcgfHwgY29kZTQgPT09IDYyIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiB0YWdPcGVuQmV0d2Vlbihjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGFnT3BlbkJldHdlZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDcpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGVuZDM7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDU4IHx8IGNvZGU0ID09PSA5NSB8fCBhc2NpaUFscGhhKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZU5hbWU7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm5TdGF0ZSA9IHRhZ09wZW5CZXR3ZWVuOwogICAgICByZXR1cm4gbGluZUVuZGluZ0JlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ09wZW5CZXR3ZWVuOwogICAgfQogICAgcmV0dXJuIGVuZDMoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdPcGVuQXR0cmlidXRlTmFtZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSB8fCBjb2RlNCA9PT0gNDYgfHwgY29kZTQgPT09IDU4IHx8IGNvZGU0ID09PSA5NSB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVOYW1lOwogICAgfQogICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVOYW1lQWZ0ZXIoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdPcGVuQXR0cmlidXRlTmFtZUFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYxKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVCZWZvcmU7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm5TdGF0ZSA9IHRhZ09wZW5BdHRyaWJ1dGVOYW1lQWZ0ZXI7CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZU5hbWVBZnRlcjsKICAgIH0KICAgIHJldHVybiB0YWdPcGVuQmV0d2Vlbihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZUJlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA2MCB8fCBjb2RlNCA9PT0gNjEgfHwgY29kZTQgPT09IDYyIHx8IGNvZGU0ID09PSA5NikgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gMzQgfHwgY29kZTQgPT09IDM5KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIG1hcmtlciA9IGNvZGU0OwogICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuU3RhdGUgPSB0YWdPcGVuQXR0cmlidXRlVmFsdWVCZWZvcmU7CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlQmVmb3JlOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVVbnF1b3RlZDsKICB9CiAgZnVuY3Rpb24gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBtYXJrZXIgPSB2b2lkIDA7CiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVRdW90ZWRBZnRlcjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVyblN0YXRlID0gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkOwogICAgICByZXR1cm4gbGluZUVuZGluZ0JlZm9yZShjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVF1b3RlZDsKICB9CiAgZnVuY3Rpb24gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gMzQgfHwgY29kZTQgPT09IDM5IHx8IGNvZGU0ID09PSA2MCB8fCBjb2RlNCA9PT0gNjEgfHwgY29kZTQgPT09IDk2KSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NyB8fCBjb2RlNCA9PT0gNjIgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIHRhZ09wZW5CZXR3ZWVuKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQ7CiAgfQogIGZ1bmN0aW9uIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVF1b3RlZEFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ3IHx8IGNvZGU0ID09PSA2MiB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gdGFnT3BlbkJldHdlZW4oY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGVuZDMoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJodG1sVGV4dERhdGEiKTsKICAgICAgZWZmZWN0cy5leGl0KCJodG1sVGV4dCIpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGxpbmVFbmRpbmdCZWZvcmUoY29kZTQpIHsKICAgIGVmZmVjdHMuZXhpdCgiaHRtbFRleHREYXRhIik7CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICByZXR1cm4gbGluZUVuZGluZ0FmdGVyOwogIH0KICBmdW5jdGlvbiBsaW5lRW5kaW5nQWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBsaW5lRW5kaW5nQWZ0ZXJQcmVmaXgsICJsaW5lUHJlZml4Iiwgc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSA/IHZvaWQgMCA6IDQpKGNvZGU0KSA6IGxpbmVFbmRpbmdBZnRlclByZWZpeChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGxpbmVFbmRpbmdBZnRlclByZWZpeChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiaHRtbFRleHREYXRhIik7CiAgICByZXR1cm4gcmV0dXJuU3RhdGUoY29kZTQpOwogIH0KfQp2YXIgaHRtbFRleHQ7CnZhciBpbml0X2h0bWxfdGV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2h0bWwtdGV4dC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaHRtbFRleHQgPSB7CiAgICAgIG5hbWU6ICJodG1sVGV4dCIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUh0bWxUZXh0CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGFiZWwtZW5kLmpzCmZ1bmN0aW9uIHJlc29sdmVBbGxMYWJlbEVuZChldmVudHMpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgY29uc3QgbmV3RXZlbnRzID0gW107CiAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgY29uc3QgdG9rZW4gPSBldmVudHNbaW5kZXgyXVsxXTsKICAgIG5ld0V2ZW50cy5wdXNoKGV2ZW50c1tpbmRleDJdKTsKICAgIGlmICh0b2tlbi50eXBlID09PSAibGFiZWxJbWFnZSIgfHwgdG9rZW4udHlwZSA9PT0gImxhYmVsTGluayIgfHwgdG9rZW4udHlwZSA9PT0gImxhYmVsRW5kIikgewogICAgICBjb25zdCBvZmZzZXQgPSB0b2tlbi50eXBlID09PSAibGFiZWxJbWFnZSIgPyA0IDogMjsKICAgICAgdG9rZW4udHlwZSA9ICJkYXRhIjsKICAgICAgaW5kZXgyICs9IG9mZnNldDsKICAgIH0KICB9CiAgaWYgKGV2ZW50cy5sZW5ndGggIT09IG5ld0V2ZW50cy5sZW5ndGgpIHsKICAgIHNwbGljZShldmVudHMsIDAsIGV2ZW50cy5sZW5ndGgsIG5ld0V2ZW50cyk7CiAgfQogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gcmVzb2x2ZVRvTGFiZWxFbmQoZXZlbnRzLCBjb250ZXh0MikgewogIGxldCBpbmRleDIgPSBldmVudHMubGVuZ3RoOwogIGxldCBvZmZzZXQgPSAwOwogIGxldCB0b2tlbjsKICBsZXQgb3BlbjsKICBsZXQgY2xvc2U3OwogIGxldCBtZWRpYTsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIHRva2VuID0gZXZlbnRzW2luZGV4Ml1bMV07CiAgICBpZiAob3BlbikgewogICAgICBpZiAodG9rZW4udHlwZSA9PT0gImxpbmsiIHx8IHRva2VuLnR5cGUgPT09ICJsYWJlbExpbmsiICYmIHRva2VuLl9pbmFjdGl2ZSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIiAmJiB0b2tlbi50eXBlID09PSAibGFiZWxMaW5rIikgewogICAgICAgIHRva2VuLl9pbmFjdGl2ZSA9IHRydWU7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY2xvc2U3KSB7CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIiAmJiAodG9rZW4udHlwZSA9PT0gImxhYmVsSW1hZ2UiIHx8IHRva2VuLnR5cGUgPT09ICJsYWJlbExpbmsiKSAmJiAhdG9rZW4uX2JhbGFuY2VkKSB7CiAgICAgICAgb3BlbiA9IGluZGV4MjsKICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gImxhYmVsTGluayIpIHsKICAgICAgICAgIG9mZnNldCA9IDI7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gImxhYmVsRW5kIikgewogICAgICBjbG9zZTcgPSBpbmRleDI7CiAgICB9CiAgfQogIGNvbnN0IGdyb3VwID0gewogICAgdHlwZTogZXZlbnRzW29wZW5dWzFdLnR5cGUgPT09ICJsYWJlbExpbmsiID8gImxpbmsiIDogImltYWdlIiwKICAgIHN0YXJ0OiB7CiAgICAgIC4uLmV2ZW50c1tvcGVuXVsxXS5zdGFydAogICAgfSwKICAgIGVuZDogewogICAgICAuLi5ldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLmVuZAogICAgfQogIH07CiAgY29uc3QgbGFiZWwgPSB7CiAgICB0eXBlOiAibGFiZWwiLAogICAgc3RhcnQ6IHsKICAgICAgLi4uZXZlbnRzW29wZW5dWzFdLnN0YXJ0CiAgICB9LAogICAgZW5kOiB7CiAgICAgIC4uLmV2ZW50c1tjbG9zZTddWzFdLmVuZAogICAgfQogIH07CiAgY29uc3QgdGV4dDkgPSB7CiAgICB0eXBlOiAibGFiZWxUZXh0IiwKICAgIHN0YXJ0OiB7CiAgICAgIC4uLmV2ZW50c1tvcGVuICsgb2Zmc2V0ICsgMl1bMV0uZW5kCiAgICB9LAogICAgZW5kOiB7CiAgICAgIC4uLmV2ZW50c1tjbG9zZTcgLSAyXVsxXS5zdGFydAogICAgfQogIH07CiAgbWVkaWEgPSBbWyJlbnRlciIsIGdyb3VwLCBjb250ZXh0Ml0sIFsiZW50ZXIiLCBsYWJlbCwgY29udGV4dDJdXTsKICBtZWRpYSA9IHB1c2gobWVkaWEsIGV2ZW50cy5zbGljZShvcGVuICsgMSwgb3BlbiArIG9mZnNldCArIDMpKTsKICBtZWRpYSA9IHB1c2gobWVkaWEsIFtbImVudGVyIiwgdGV4dDksIGNvbnRleHQyXV0pOwogIG1lZGlhID0gcHVzaChtZWRpYSwgcmVzb2x2ZUFsbChjb250ZXh0Mi5wYXJzZXIuY29uc3RydWN0cy5pbnNpZGVTcGFuLm51bGwsIGV2ZW50cy5zbGljZShvcGVuICsgb2Zmc2V0ICsgNCwgY2xvc2U3IC0gMyksIGNvbnRleHQyKSk7CiAgbWVkaWEgPSBwdXNoKG1lZGlhLCBbWyJleGl0IiwgdGV4dDksIGNvbnRleHQyXSwgZXZlbnRzW2Nsb3NlNyAtIDJdLCBldmVudHNbY2xvc2U3IC0gMV0sIFsiZXhpdCIsIGxhYmVsLCBjb250ZXh0Ml1dKTsKICBtZWRpYSA9IHB1c2gobWVkaWEsIGV2ZW50cy5zbGljZShjbG9zZTcgKyAxKSk7CiAgbWVkaWEgPSBwdXNoKG1lZGlhLCBbWyJleGl0IiwgZ3JvdXAsIGNvbnRleHQyXV0pOwogIHNwbGljZShldmVudHMsIG9wZW4sIGV2ZW50cy5sZW5ndGgsIG1lZGlhKTsKICByZXR1cm4gZXZlbnRzOwp9CmZ1bmN0aW9uIHRva2VuaXplTGFiZWxFbmQoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IGluZGV4MiA9IHNlbGYyLmV2ZW50cy5sZW5ndGg7CiAgbGV0IGxhYmVsU3RhcnQ7CiAgbGV0IGRlZmluZWQ7CiAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICBpZiAoKHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJsYWJlbEltYWdlIiB8fCBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGFiZWxMaW5rIikgJiYgIXNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLl9iYWxhbmNlZCkgewogICAgICBsYWJlbFN0YXJ0ID0gc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV07CiAgICAgIGJyZWFrOwogICAgfQogIH0KICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmICghbGFiZWxTdGFydCkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChsYWJlbFN0YXJ0Ll9pbmFjdGl2ZSkgewogICAgICByZXR1cm4gbGFiZWxFbmROb2soY29kZTQpOwogICAgfQogICAgZGVmaW5lZCA9IHNlbGYyLnBhcnNlci5kZWZpbmVkLmluY2x1ZGVzKG5vcm1hbGl6ZUlkZW50aWZpZXIoc2VsZjIuc2xpY2VTZXJpYWxpemUoewogICAgICBzdGFydDogbGFiZWxTdGFydC5lbmQsCiAgICAgIGVuZDogc2VsZjIubm93KCkKICAgIH0pKSk7CiAgICBlZmZlY3RzLmVudGVyKCJsYWJlbEVuZCIpOwogICAgZWZmZWN0cy5lbnRlcigibGFiZWxNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxhYmVsTWFya2VyIik7CiAgICBlZmZlY3RzLmV4aXQoImxhYmVsRW5kIik7CiAgICByZXR1cm4gYWZ0ZXI7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQwKSB7CiAgICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQocmVzb3VyY2VDb25zdHJ1Y3QsIGxhYmVsRW5kT2ssIGRlZmluZWQgPyBsYWJlbEVuZE9rIDogbGFiZWxFbmROb2spKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gOTEpIHsKICAgICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChyZWZlcmVuY2VGdWxsQ29uc3RydWN0LCBsYWJlbEVuZE9rLCBkZWZpbmVkID8gcmVmZXJlbmNlTm90RnVsbCA6IGxhYmVsRW5kTm9rKShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gZGVmaW5lZCA/IGxhYmVsRW5kT2soY29kZTQpIDogbGFiZWxFbmROb2soY29kZTQpOwogIH0KICBmdW5jdGlvbiByZWZlcmVuY2VOb3RGdWxsKGNvZGU0KSB7CiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KHJlZmVyZW5jZUNvbGxhcHNlZENvbnN0cnVjdCwgbGFiZWxFbmRPaywgbGFiZWxFbmROb2spKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbGFiZWxFbmRPayhjb2RlNCkgewogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGxhYmVsRW5kTm9rKGNvZGU0KSB7CiAgICBsYWJlbFN0YXJ0Ll9iYWxhbmNlZCA9IHRydWU7CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVSZXNvdXJjZShlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiByZXNvdXJjZVN0YXJ0OwogIGZ1bmN0aW9uIHJlc291cmNlU3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoInJlc291cmNlIik7CiAgICBlZmZlY3RzLmVudGVyKCJyZXNvdXJjZU1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgicmVzb3VyY2VNYXJrZXIiKTsKICAgIHJldHVybiByZXNvdXJjZUJlZm9yZTsKICB9CiAgZnVuY3Rpb24gcmVzb3VyY2VCZWZvcmUoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSA/IGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIHJlc291cmNlT3BlbikoY29kZTQpIDogcmVzb3VyY2VPcGVuKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVzb3VyY2VPcGVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQxKSB7CiAgICAgIHJldHVybiByZXNvdXJjZUVuZChjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gZmFjdG9yeURlc3RpbmF0aW9uKGVmZmVjdHMsIHJlc291cmNlRGVzdGluYXRpb25BZnRlciwgcmVzb3VyY2VEZXN0aW5hdGlvbk1pc3NpbmcsICJyZXNvdXJjZURlc3RpbmF0aW9uIiwgInJlc291cmNlRGVzdGluYXRpb25MaXRlcmFsIiwgInJlc291cmNlRGVzdGluYXRpb25MaXRlcmFsTWFya2VyIiwgInJlc291cmNlRGVzdGluYXRpb25SYXciLCAicmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZyIsIDMyKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHJlc291cmNlRGVzdGluYXRpb25BZnRlcihjb2RlNCkgewogICAgcmV0dXJuIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpID8gZmFjdG9yeVdoaXRlc3BhY2UoZWZmZWN0cywgcmVzb3VyY2VCZXR3ZWVuKShjb2RlNCkgOiByZXNvdXJjZUVuZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHJlc291cmNlRGVzdGluYXRpb25NaXNzaW5nKGNvZGU0KSB7CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVzb3VyY2VCZXR3ZWVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDM0IHx8IGNvZGU0ID09PSAzOSB8fCBjb2RlNCA9PT0gNDApIHsKICAgICAgcmV0dXJuIGZhY3RvcnlUaXRsZShlZmZlY3RzLCByZXNvdXJjZVRpdGxlQWZ0ZXIsIG5vaywgInJlc291cmNlVGl0bGUiLCAicmVzb3VyY2VUaXRsZU1hcmtlciIsICJyZXNvdXJjZVRpdGxlU3RyaW5nIikoY29kZTQpOwogICAgfQogICAgcmV0dXJuIHJlc291cmNlRW5kKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVzb3VyY2VUaXRsZUFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgPyBmYWN0b3J5V2hpdGVzcGFjZShlZmZlY3RzLCByZXNvdXJjZUVuZCkoY29kZTQpIDogcmVzb3VyY2VFbmQoY29kZTQpOwogIH0KICBmdW5jdGlvbiByZXNvdXJjZUVuZChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0MSkgewogICAgICBlZmZlY3RzLmVudGVyKCJyZXNvdXJjZU1hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInJlc291cmNlTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZXhpdCgicmVzb3VyY2UiKTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVJlZmVyZW5jZUZ1bGwoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHJlZmVyZW5jZUZ1bGw7CiAgZnVuY3Rpb24gcmVmZXJlbmNlRnVsbChjb2RlNCkgewogICAgcmV0dXJuIGZhY3RvcnlMYWJlbC5jYWxsKHNlbGYyLCBlZmZlY3RzLCByZWZlcmVuY2VGdWxsQWZ0ZXIsIHJlZmVyZW5jZUZ1bGxNaXNzaW5nLCAicmVmZXJlbmNlIiwgInJlZmVyZW5jZU1hcmtlciIsICJyZWZlcmVuY2VTdHJpbmciKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHJlZmVyZW5jZUZ1bGxBZnRlcihjb2RlNCkgewogICAgcmV0dXJuIHNlbGYyLnBhcnNlci5kZWZpbmVkLmluY2x1ZGVzKG5vcm1hbGl6ZUlkZW50aWZpZXIoc2VsZjIuc2xpY2VTZXJpYWxpemUoc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXVsxXSkuc2xpY2UoMSwgLTEpKSkgPyBvazMoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVmZXJlbmNlRnVsbE1pc3NpbmcoY29kZTQpIHsKICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVJlZmVyZW5jZUNvbGxhcHNlZChlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiByZWZlcmVuY2VDb2xsYXBzZWRTdGFydDsKICBmdW5jdGlvbiByZWZlcmVuY2VDb2xsYXBzZWRTdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigicmVmZXJlbmNlIik7CiAgICBlZmZlY3RzLmVudGVyKCJyZWZlcmVuY2VNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoInJlZmVyZW5jZU1hcmtlciIpOwogICAgcmV0dXJuIHJlZmVyZW5jZUNvbGxhcHNlZE9wZW47CiAgfQogIGZ1bmN0aW9uIHJlZmVyZW5jZUNvbGxhcHNlZE9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5lbnRlcigicmVmZXJlbmNlTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgicmVmZXJlbmNlTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZXhpdCgicmVmZXJlbmNlIik7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGxhYmVsRW5kLCByZXNvdXJjZUNvbnN0cnVjdCwgcmVmZXJlbmNlRnVsbENvbnN0cnVjdCwgcmVmZXJlbmNlQ29sbGFwc2VkQ29uc3RydWN0Owp2YXIgaW5pdF9sYWJlbF9lbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9sYWJlbC1lbmQuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9kZXN0aW5hdGlvbigpOwogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9sYWJlbCgpOwogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV90aXRsZSgpOwogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV93aGl0ZXNwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaHVua2VkKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX25vcm1hbGl6ZV9pZGVudGlmaWVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Jlc29sdmVfYWxsKCk7CiAgICBsYWJlbEVuZCA9IHsKICAgICAgbmFtZTogImxhYmVsRW5kIiwKICAgICAgcmVzb2x2ZUFsbDogcmVzb2x2ZUFsbExhYmVsRW5kLAogICAgICByZXNvbHZlVG86IHJlc29sdmVUb0xhYmVsRW5kLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVMYWJlbEVuZAogICAgfTsKICAgIHJlc291cmNlQ29uc3RydWN0ID0gewogICAgICB0b2tlbml6ZTogdG9rZW5pemVSZXNvdXJjZQogICAgfTsKICAgIHJlZmVyZW5jZUZ1bGxDb25zdHJ1Y3QgPSB7CiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVJlZmVyZW5jZUZ1bGwKICAgIH07CiAgICByZWZlcmVuY2VDb2xsYXBzZWRDb25zdHJ1Y3QgPSB7CiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVJlZmVyZW5jZUNvbGxhcHNlZAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xhYmVsLXN0YXJ0LWltYWdlLmpzCmZ1bmN0aW9uIHRva2VuaXplTGFiZWxTdGFydEltYWdlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigibGFiZWxJbWFnZSIpOwogICAgZWZmZWN0cy5lbnRlcigibGFiZWxJbWFnZU1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGFiZWxJbWFnZU1hcmtlciIpOwogICAgcmV0dXJuIG9wZW47CiAgfQogIGZ1bmN0aW9uIG9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTEpIHsKICAgICAgZWZmZWN0cy5lbnRlcigibGFiZWxNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJsYWJlbE1hcmtlciIpOwogICAgICBlZmZlY3RzLmV4aXQoImxhYmVsSW1hZ2UiKTsKICAgICAgcmV0dXJuIGFmdGVyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gY29kZTQgPT09IDk0ICYmICJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0IiBpbiBzZWxmMi5wYXJzZXIuY29uc3RydWN0cyA/IG5vayhjb2RlNCkgOiBvazMoY29kZTQpOwogIH0KfQp2YXIgbGFiZWxTdGFydEltYWdlOwp2YXIgaW5pdF9sYWJlbF9zdGFydF9pbWFnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xhYmVsLXN0YXJ0LWltYWdlLmpzIigpIHsKICAgIGluaXRfbGFiZWxfZW5kKCk7CiAgICBsYWJlbFN0YXJ0SW1hZ2UgPSB7CiAgICAgIG5hbWU6ICJsYWJlbFN0YXJ0SW1hZ2UiLAogICAgICByZXNvbHZlQWxsOiBsYWJlbEVuZC5yZXNvbHZlQWxsLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVMYWJlbFN0YXJ0SW1hZ2UKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9sYWJlbC1zdGFydC1saW5rLmpzCmZ1bmN0aW9uIHRva2VuaXplTGFiZWxTdGFydExpbmsoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJsYWJlbExpbmsiKTsKICAgIGVmZmVjdHMuZW50ZXIoImxhYmVsTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsYWJlbE1hcmtlciIpOwogICAgZWZmZWN0cy5leGl0KCJsYWJlbExpbmsiKTsKICAgIHJldHVybiBhZnRlcjsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCA9PT0gOTQgJiYgIl9oaWRkZW5Gb290bm90ZVN1cHBvcnQiIGluIHNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzID8gbm9rKGNvZGU0KSA6IG9rMyhjb2RlNCk7CiAgfQp9CnZhciBsYWJlbFN0YXJ0TGluazsKdmFyIGluaXRfbGFiZWxfc3RhcnRfbGluayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xhYmVsLXN0YXJ0LWxpbmsuanMiKCkgewogICAgaW5pdF9sYWJlbF9lbmQoKTsKICAgIGxhYmVsU3RhcnRMaW5rID0gewogICAgICBuYW1lOiAibGFiZWxTdGFydExpbmsiLAogICAgICByZXNvbHZlQWxsOiBsYWJlbEVuZC5yZXNvbHZlQWxsLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVMYWJlbFN0YXJ0TGluawogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xpbmUtZW5kaW5nLmpzCmZ1bmN0aW9uIHRva2VuaXplTGluZUVuZGluZyhlZmZlY3RzLCBvazMpIHsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgb2szLCAibGluZVByZWZpeCIpOwogIH0KfQp2YXIgbGluZUVuZGluZzsKdmFyIGluaXRfbGluZV9lbmRpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9saW5lLWVuZGluZy5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgbGluZUVuZGluZyA9IHsKICAgICAgbmFtZTogImxpbmVFbmRpbmciLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVMaW5lRW5kaW5nCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvdGhlbWF0aWMtYnJlYWsuanMKZnVuY3Rpb24gdG9rZW5pemVUaGVtYXRpY0JyZWFrKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgbGV0IHNpemUgPSAwOwogIGxldCBtYXJrZXI7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJ0aGVtYXRpY0JyZWFrIik7CiAgICByZXR1cm4gYmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlKGNvZGU0KSB7CiAgICBtYXJrZXIgPSBjb2RlNDsKICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYXRCcmVhayhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBtYXJrZXIpIHsKICAgICAgZWZmZWN0cy5lbnRlcigidGhlbWF0aWNCcmVha1NlcXVlbmNlIik7CiAgICAgIHJldHVybiBzZXF1ZW5jZShjb2RlNCk7CiAgICB9CiAgICBpZiAoc2l6ZSA+PSAzICYmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSkgewogICAgICBlZmZlY3RzLmV4aXQoInRoZW1hdGljQnJlYWsiKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gc2VxdWVuY2UoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHNpemUrKzsKICAgICAgcmV0dXJuIHNlcXVlbmNlOwogICAgfQogICAgZWZmZWN0cy5leGl0KCJ0aGVtYXRpY0JyZWFrU2VxdWVuY2UiKTsKICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhdEJyZWFrLCAid2hpdGVzcGFjZSIpKGNvZGU0KSA6IGF0QnJlYWsoY29kZTQpOwogIH0KfQp2YXIgdGhlbWF0aWNCcmVhazI7CnZhciBpbml0X3RoZW1hdGljX2JyZWFrMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL3RoZW1hdGljLWJyZWFrLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICB0aGVtYXRpY0JyZWFrMiA9IHsKICAgICAgbmFtZTogInRoZW1hdGljQnJlYWsiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVUaGVtYXRpY0JyZWFrCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGlzdC5qcwpmdW5jdGlvbiB0b2tlbml6ZUxpc3RTdGFydChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICBsZXQgaW5pdGlhbFNpemUgPSB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gImxpbmVQcmVmaXgiID8gdGFpbFsyXS5zbGljZVNlcmlhbGl6ZSh0YWlsWzFdLCB0cnVlKS5sZW5ndGggOiAwOwogIGxldCBzaXplID0gMDsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGNvbnN0IGtpbmQgPSBzZWxmMi5jb250YWluZXJTdGF0ZS50eXBlIHx8IChjb2RlNCA9PT0gNDIgfHwgY29kZTQgPT09IDQzIHx8IGNvZGU0ID09PSA0NSA/ICJsaXN0VW5vcmRlcmVkIiA6ICJsaXN0T3JkZXJlZCIpOwogICAgaWYgKGtpbmQgPT09ICJsaXN0VW5vcmRlcmVkIiA/ICFzZWxmMi5jb250YWluZXJTdGF0ZS5tYXJrZXIgfHwgY29kZTQgPT09IHNlbGYyLmNvbnRhaW5lclN0YXRlLm1hcmtlciA6IGFzY2lpRGlnaXQoY29kZTQpKSB7CiAgICAgIGlmICghc2VsZjIuY29udGFpbmVyU3RhdGUudHlwZSkgewogICAgICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLnR5cGUgPSBraW5kOwogICAgICAgIGVmZmVjdHMuZW50ZXIoa2luZCwgewogICAgICAgICAgX2NvbnRhaW5lcjogdHJ1ZQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChraW5kID09PSAibGlzdFVub3JkZXJlZCIpIHsKICAgICAgICBlZmZlY3RzLmVudGVyKCJsaXN0SXRlbVByZWZpeCIpOwogICAgICAgIHJldHVybiBjb2RlNCA9PT0gNDIgfHwgY29kZTQgPT09IDQ1ID8gZWZmZWN0cy5jaGVjayh0aGVtYXRpY0JyZWFrMiwgbm9rLCBhdE1hcmtlcikoY29kZTQpIDogYXRNYXJrZXIoY29kZTQpOwogICAgICB9CiAgICAgIGlmICghc2VsZjIuaW50ZXJydXB0IHx8IGNvZGU0ID09PSA0OSkgewogICAgICAgIGVmZmVjdHMuZW50ZXIoImxpc3RJdGVtUHJlZml4Iik7CiAgICAgICAgZWZmZWN0cy5lbnRlcigibGlzdEl0ZW1WYWx1ZSIpOwogICAgICAgIHJldHVybiBpbnNpZGUoY29kZTQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoYXNjaWlEaWdpdChjb2RlNCkgJiYgKytzaXplIDwgMTApIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGluc2lkZTsKICAgIH0KICAgIGlmICgoIXNlbGYyLmludGVycnVwdCB8fCBzaXplIDwgMikgJiYgKHNlbGYyLmNvbnRhaW5lclN0YXRlLm1hcmtlciA/IGNvZGU0ID09PSBzZWxmMi5jb250YWluZXJTdGF0ZS5tYXJrZXIgOiBjb2RlNCA9PT0gNDEgfHwgY29kZTQgPT09IDQ2KSkgewogICAgICBlZmZlY3RzLmV4aXQoImxpc3RJdGVtVmFsdWUiKTsKICAgICAgcmV0dXJuIGF0TWFya2VyKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBhdE1hcmtlcihjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigibGlzdEl0ZW1NYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpc3RJdGVtTWFya2VyIik7CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5tYXJrZXIgPSBzZWxmMi5jb250YWluZXJTdGF0ZS5tYXJrZXIgfHwgY29kZTQ7CiAgICByZXR1cm4gZWZmZWN0cy5jaGVjaygKICAgICAgYmxhbmtMaW5lLAogICAgICAvLyBDYW7igJl0IGJlIGVtcHR5IHdoZW4gaW50ZXJydXB0aW5nLgogICAgICBzZWxmMi5pbnRlcnJ1cHQgPyBub2sgOiBvbkJsYW5rLAogICAgICBlZmZlY3RzLmF0dGVtcHQobGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlQ29uc3RydWN0LCBlbmRPZlByZWZpeCwgb3RoZXJQcmVmaXgpCiAgICApOwogIH0KICBmdW5jdGlvbiBvbkJsYW5rKGNvZGU0KSB7CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lID0gdHJ1ZTsKICAgIGluaXRpYWxTaXplKys7CiAgICByZXR1cm4gZW5kT2ZQcmVmaXgoY29kZTQpOwogIH0KICBmdW5jdGlvbiBvdGhlclByZWZpeChjb2RlNCkgewogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpOwogICAgICByZXR1cm4gZW5kT2ZQcmVmaXg7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZW5kT2ZQcmVmaXgoY29kZTQpIHsKICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLnNpemUgPSBpbml0aWFsU2l6ZSArIHNlbGYyLnNsaWNlU2VyaWFsaXplKGVmZmVjdHMuZXhpdCgibGlzdEl0ZW1QcmVmaXgiKSwgdHJ1ZSkubGVuZ3RoOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplTGlzdENvbnRpbnVhdGlvbihlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBzZWxmMi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93ID0gdm9pZCAwOwogIHJldHVybiBlZmZlY3RzLmNoZWNrKGJsYW5rTGluZSwgb25CbGFuaywgbm90QmxhbmspOwogIGZ1bmN0aW9uIG9uQmxhbmsoY29kZTQpIHsKICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzID0gc2VsZjIuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXMgfHwgc2VsZjIuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZTsKICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgb2szLCAibGlzdEl0ZW1JbmRlbnQiLCBzZWxmMi5jb250YWluZXJTdGF0ZS5zaXplICsgMSkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBub3RCbGFuayhjb2RlNCkgewogICAgaWYgKHNlbGYyLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzIHx8ICFtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcyA9IHZvaWQgMDsKICAgICAgc2VsZjIuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZSA9IHZvaWQgMDsKICAgICAgcmV0dXJuIG5vdEluQ3VycmVudEl0ZW0oY29kZTQpOwogICAgfQogICAgc2VsZjIuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXMgPSB2b2lkIDA7CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lID0gdm9pZCAwOwogICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChpbmRlbnRDb25zdHJ1Y3QsIG9rMywgbm90SW5DdXJyZW50SXRlbSkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBub3RJbkN1cnJlbnRJdGVtKGNvZGU0KSB7CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93ID0gdHJ1ZTsKICAgIHNlbGYyLmludGVycnVwdCA9IHZvaWQgMDsKICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgZWZmZWN0cy5hdHRlbXB0KGxpc3QzLCBvazMsIG5vayksICJsaW5lUHJlZml4Iiwgc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSA/IHZvaWQgMCA6IDQpKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVJbmRlbnQoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlclByZWZpeCwgImxpc3RJdGVtSW5kZW50Iiwgc2VsZjIuY29udGFpbmVyU3RhdGUuc2l6ZSArIDEpOwogIGZ1bmN0aW9uIGFmdGVyUHJlZml4KGNvZGU0KSB7CiAgICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICAgIHJldHVybiB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gImxpc3RJdGVtSW5kZW50IiAmJiB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA9PT0gc2VsZjIuY29udGFpbmVyU3RhdGUuc2l6ZSA/IG9rMyhjb2RlNCkgOiBub2soY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZUxpc3RFbmQoZWZmZWN0cykgewogIGVmZmVjdHMuZXhpdCh0aGlzLmNvbnRhaW5lclN0YXRlLnR5cGUpOwp9CmZ1bmN0aW9uIHRva2VuaXplTGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYWZ0ZXJQcmVmaXgsICJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiLCBzZWxmMi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpID8gdm9pZCAwIDogNCArIDEpOwogIGZ1bmN0aW9uIGFmdGVyUHJlZml4KGNvZGU0KSB7CiAgICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICAgIHJldHVybiAhbWFya2Rvd25TcGFjZShjb2RlNCkgJiYgdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09ICJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiID8gb2szKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQp9CnZhciBsaXN0MywgbGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlQ29uc3RydWN0LCBpbmRlbnRDb25zdHJ1Y3Q7CnZhciBpbml0X2xpc3QyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGlzdC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9ibGFua19saW5lKCk7CiAgICBpbml0X3RoZW1hdGljX2JyZWFrMigpOwogICAgbGlzdDMgPSB7CiAgICAgIGNvbnRpbnVhdGlvbjogewogICAgICAgIHRva2VuaXplOiB0b2tlbml6ZUxpc3RDb250aW51YXRpb24KICAgICAgfSwKICAgICAgZXhpdDogdG9rZW5pemVMaXN0RW5kLAogICAgICBuYW1lOiAibGlzdCIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUxpc3RTdGFydAogICAgfTsKICAgIGxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZUNvbnN0cnVjdCA9IHsKICAgICAgcGFydGlhbDogdHJ1ZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplTGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlCiAgICB9OwogICAgaW5kZW50Q29uc3RydWN0ID0gewogICAgICBwYXJ0aWFsOiB0cnVlLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVJbmRlbnQKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9zZXRleHQtdW5kZXJsaW5lLmpzCmZ1bmN0aW9uIHJlc29sdmVUb1NldGV4dFVuZGVybGluZShldmVudHMsIGNvbnRleHQyKSB7CiAgbGV0IGluZGV4MiA9IGV2ZW50cy5sZW5ndGg7CiAgbGV0IGNvbnRlbnQzOwogIGxldCB0ZXh0OTsKICBsZXQgZGVmaW5pdGlvbjM7CiAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMF0gPT09ICJlbnRlciIpIHsKICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJjb250ZW50IikgewogICAgICAgIGNvbnRlbnQzID0gaW5kZXgyOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAicGFyYWdyYXBoIikgewogICAgICAgIHRleHQ5ID0gaW5kZXgyOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImNvbnRlbnQiKSB7CiAgICAgICAgZXZlbnRzLnNwbGljZShpbmRleDIsIDEpOwogICAgICB9CiAgICAgIGlmICghZGVmaW5pdGlvbjMgJiYgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImRlZmluaXRpb24iKSB7CiAgICAgICAgZGVmaW5pdGlvbjMgPSBpbmRleDI7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgaGVhZGluZzMgPSB7CiAgICB0eXBlOiAic2V0ZXh0SGVhZGluZyIsCiAgICBzdGFydDogewogICAgICAuLi5ldmVudHNbY29udGVudDNdWzFdLnN0YXJ0CiAgICB9LAogICAgZW5kOiB7CiAgICAgIC4uLmV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV1bMV0uZW5kCiAgICB9CiAgfTsKICBldmVudHNbdGV4dDldWzFdLnR5cGUgPSAic2V0ZXh0SGVhZGluZ1RleHQiOwogIGlmIChkZWZpbml0aW9uMykgewogICAgZXZlbnRzLnNwbGljZSh0ZXh0OSwgMCwgWyJlbnRlciIsIGhlYWRpbmczLCBjb250ZXh0Ml0pOwogICAgZXZlbnRzLnNwbGljZShkZWZpbml0aW9uMyArIDEsIDAsIFsiZXhpdCIsIGV2ZW50c1tjb250ZW50M11bMV0sIGNvbnRleHQyXSk7CiAgICBldmVudHNbY29udGVudDNdWzFdLmVuZCA9IHsKICAgICAgLi4uZXZlbnRzW2RlZmluaXRpb24zXVsxXS5lbmQKICAgIH07CiAgfSBlbHNlIHsKICAgIGV2ZW50c1tjb250ZW50M11bMV0gPSBoZWFkaW5nMzsKICB9CiAgZXZlbnRzLnB1c2goWyJleGl0IiwgaGVhZGluZzMsIGNvbnRleHQyXSk7CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiB0b2tlbml6ZVNldGV4dFVuZGVybGluZShlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBsZXQgbWFya2VyOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgbGV0IGluZGV4MiA9IHNlbGYyLmV2ZW50cy5sZW5ndGg7CiAgICBsZXQgcGFyYWdyYXBoMzsKICAgIHdoaWxlIChpbmRleDItLSkgewogICAgICBpZiAoc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0udHlwZSAhPT0gImxpbmVFbmRpbmciICYmIHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLnR5cGUgIT09ICJsaW5lUHJlZml4IiAmJiBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXS50eXBlICE9PSAiY29udGVudCIpIHsKICAgICAgICBwYXJhZ3JhcGgzID0gc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gInBhcmFncmFwaCI7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmICghc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0gJiYgKHNlbGYyLmludGVycnVwdCB8fCBwYXJhZ3JhcGgzKSkgewogICAgICBlZmZlY3RzLmVudGVyKCJzZXRleHRIZWFkaW5nTGluZSIpOwogICAgICBtYXJrZXIgPSBjb2RlNDsKICAgICAgcmV0dXJuIGJlZm9yZShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlKGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlIik7CiAgICByZXR1cm4gaW5zaWRlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gaW5zaWRlOwogICAgfQogICAgZWZmZWN0cy5leGl0KCJzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlIik7CiAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlNCkgPyBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYWZ0ZXIsICJsaW5lU3VmZml4IikoY29kZTQpIDogYWZ0ZXIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJzZXRleHRIZWFkaW5nTGluZSIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQp2YXIgc2V0ZXh0VW5kZXJsaW5lOwp2YXIgaW5pdF9zZXRleHRfdW5kZXJsaW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvc2V0ZXh0LXVuZGVybGluZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgc2V0ZXh0VW5kZXJsaW5lID0gewogICAgICBuYW1lOiAic2V0ZXh0VW5kZXJsaW5lIiwKICAgICAgcmVzb2x2ZVRvOiByZXNvbHZlVG9TZXRleHRVbmRlcmxpbmUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVNldGV4dFVuZGVybGluZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvaW5kZXguanMKdmFyIGluaXRfbWljcm9tYXJrX2NvcmVfY29tbW9ubWFyayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvaW5kZXguanMiKCkgewogICAgaW5pdF9hdHRlbnRpb24oKTsKICAgIGluaXRfYXV0b2xpbmsoKTsKICAgIGluaXRfYmxhbmtfbGluZSgpOwogICAgaW5pdF9ibG9ja19xdW90ZSgpOwogICAgaW5pdF9jaGFyYWN0ZXJfZXNjYXBlKCk7CiAgICBpbml0X2NoYXJhY3Rlcl9yZWZlcmVuY2UoKTsKICAgIGluaXRfY29kZV9mZW5jZWQoKTsKICAgIGluaXRfY29kZV9pbmRlbnRlZCgpOwogICAgaW5pdF9jb2RlX3RleHQoKTsKICAgIGluaXRfY29udGVudCgpOwogICAgaW5pdF9kZWZpbml0aW9uMigpOwogICAgaW5pdF9oYXJkX2JyZWFrX2VzY2FwZSgpOwogICAgaW5pdF9oZWFkaW5nX2F0eCgpOwogICAgaW5pdF9odG1sX2Zsb3coKTsKICAgIGluaXRfaHRtbF90ZXh0KCk7CiAgICBpbml0X2xhYmVsX2VuZCgpOwogICAgaW5pdF9sYWJlbF9zdGFydF9pbWFnZSgpOwogICAgaW5pdF9sYWJlbF9zdGFydF9saW5rKCk7CiAgICBpbml0X2xpbmVfZW5kaW5nKCk7CiAgICBpbml0X2xpc3QyKCk7CiAgICBpbml0X3NldGV4dF91bmRlcmxpbmUoKTsKICAgIGluaXRfdGhlbWF0aWNfYnJlYWsyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGUvbGliL3N5bnRheC5qcwpmdW5jdGlvbiBnZm1Gb290bm90ZSgpIHsKICByZXR1cm4gewogICAgZG9jdW1lbnQ6IHsKICAgICAgWzkxXTogewogICAgICAgIG5hbWU6ICJnZm1Gb290bm90ZURlZmluaXRpb24iLAogICAgICAgIHRva2VuaXplOiB0b2tlbml6ZURlZmluaXRpb25TdGFydCwKICAgICAgICBjb250aW51YXRpb246IHsKICAgICAgICAgIHRva2VuaXplOiB0b2tlbml6ZURlZmluaXRpb25Db250aW51YXRpb24KICAgICAgICB9LAogICAgICAgIGV4aXQ6IGdmbUZvb3Rub3RlRGVmaW5pdGlvbkVuZAogICAgICB9CiAgICB9LAogICAgdGV4dDogewogICAgICBbOTFdOiB7CiAgICAgICAgbmFtZTogImdmbUZvb3Rub3RlQ2FsbCIsCiAgICAgICAgdG9rZW5pemU6IHRva2VuaXplR2ZtRm9vdG5vdGVDYWxsCiAgICAgIH0sCiAgICAgIFs5M106IHsKICAgICAgICBuYW1lOiAiZ2ZtUG90ZW50aWFsRm9vdG5vdGVDYWxsIiwKICAgICAgICBhZGQ6ICJhZnRlciIsCiAgICAgICAgdG9rZW5pemU6IHRva2VuaXplUG90ZW50aWFsR2ZtRm9vdG5vdGVDYWxsLAogICAgICAgIHJlc29sdmVUbzogcmVzb2x2ZVRvUG90ZW50aWFsR2ZtRm9vdG5vdGVDYWxsCiAgICAgIH0KICAgIH0KICB9Owp9CmZ1bmN0aW9uIHRva2VuaXplUG90ZW50aWFsR2ZtRm9vdG5vdGVDYWxsKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBpbmRleDIgPSBzZWxmMi5ldmVudHMubGVuZ3RoOwogIGNvbnN0IGRlZmluZWQgPSBzZWxmMi5wYXJzZXIuZ2ZtRm9vdG5vdGVzIHx8IChzZWxmMi5wYXJzZXIuZ2ZtRm9vdG5vdGVzID0gW10pOwogIGxldCBsYWJlbFN0YXJ0OwogIHdoaWxlIChpbmRleDItLSkgewogICAgY29uc3QgdG9rZW4gPSBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXTsKICAgIGlmICh0b2tlbi50eXBlID09PSAibGFiZWxJbWFnZSIpIHsKICAgICAgbGFiZWxTdGFydCA9IHRva2VuOwogICAgICBicmVhazsKICAgIH0KICAgIGlmICh0b2tlbi50eXBlID09PSAiZ2ZtRm9vdG5vdGVDYWxsIiB8fCB0b2tlbi50eXBlID09PSAibGFiZWxMaW5rIiB8fCB0b2tlbi50eXBlID09PSAibGFiZWwiIHx8IHRva2VuLnR5cGUgPT09ICJpbWFnZSIgfHwgdG9rZW4udHlwZSA9PT0gImxpbmsiKSB7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmICghbGFiZWxTdGFydCB8fCAhbGFiZWxTdGFydC5fYmFsYW5jZWQpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBjb25zdCBpZCA9IG5vcm1hbGl6ZUlkZW50aWZpZXIoc2VsZjIuc2xpY2VTZXJpYWxpemUoewogICAgICBzdGFydDogbGFiZWxTdGFydC5lbmQsCiAgICAgIGVuZDogc2VsZjIubm93KCkKICAgIH0pKTsKICAgIGlmIChpZC5jb2RlUG9pbnRBdCgwKSAhPT0gOTQgfHwgIWRlZmluZWQuaW5jbHVkZXMoaWQuc2xpY2UoMSkpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyIik7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gcmVzb2x2ZVRvUG90ZW50aWFsR2ZtRm9vdG5vdGVDYWxsKGV2ZW50cywgY29udGV4dDIpIHsKICBsZXQgaW5kZXgyID0gZXZlbnRzLmxlbmd0aDsKICBsZXQgbGFiZWxTdGFydDsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGFiZWxJbWFnZSIgJiYgZXZlbnRzW2luZGV4Ml1bMF0gPT09ICJlbnRlciIpIHsKICAgICAgbGFiZWxTdGFydCA9IGV2ZW50c1tpbmRleDJdWzFdOwogICAgICBicmVhazsKICAgIH0KICB9CiAgZXZlbnRzW2luZGV4MiArIDFdWzFdLnR5cGUgPSAiZGF0YSI7CiAgZXZlbnRzW2luZGV4MiArIDNdWzFdLnR5cGUgPSAiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiOwogIGNvbnN0IGNhbGwgPSB7CiAgICB0eXBlOiAiZ2ZtRm9vdG5vdGVDYWxsIiwKICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbaW5kZXgyICsgM11bMV0uc3RhcnQpLAogICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLmVuZCkKICB9OwogIGNvbnN0IG1hcmtlciA9IHsKICAgIHR5cGU6ICJnZm1Gb290bm90ZUNhbGxNYXJrZXIiLAogICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tpbmRleDIgKyAzXVsxXS5lbmQpLAogICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbaW5kZXgyICsgM11bMV0uZW5kKQogIH07CiAgbWFya2VyLmVuZC5jb2x1bW4rKzsKICBtYXJrZXIuZW5kLm9mZnNldCsrOwogIG1hcmtlci5lbmQuX2J1ZmZlckluZGV4Kys7CiAgY29uc3Qgc3RyaW5nMyA9IHsKICAgIHR5cGU6ICJnZm1Gb290bm90ZUNhbGxTdHJpbmciLAogICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIG1hcmtlci5lbmQpLAogICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLnN0YXJ0KQogIH07CiAgY29uc3QgY2h1bmsgPSB7CiAgICB0eXBlOiAiY2h1bmtTdHJpbmciLAogICAgY29udGVudFR5cGU6ICJzdHJpbmciLAogICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIHN0cmluZzMuc3RhcnQpLAogICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBzdHJpbmczLmVuZCkKICB9OwogIGNvbnN0IHJlcGxhY2VtZW50ID0gWwogICAgLy8gVGFrZSB0aGUgYGxhYmVsSW1hZ2VNYXJrZXJgIChub3cgYGRhdGFgLCB0aGUgYCFgKQogICAgZXZlbnRzW2luZGV4MiArIDFdLAogICAgZXZlbnRzW2luZGV4MiArIDJdLAogICAgWyJlbnRlciIsIGNhbGwsIGNvbnRleHQyXSwKICAgIC8vIFRoZSBgW2AKICAgIGV2ZW50c1tpbmRleDIgKyAzXSwKICAgIGV2ZW50c1tpbmRleDIgKyA0XSwKICAgIC8vIFRoZSBgXmAuCiAgICBbImVudGVyIiwgbWFya2VyLCBjb250ZXh0Ml0sCiAgICBbImV4aXQiLCBtYXJrZXIsIGNvbnRleHQyXSwKICAgIC8vIEV2ZXJ5dGhpbmcgaW4gYmV0d2Vlbi4KICAgIFsiZW50ZXIiLCBzdHJpbmczLCBjb250ZXh0Ml0sCiAgICBbImVudGVyIiwgY2h1bmssIGNvbnRleHQyXSwKICAgIFsiZXhpdCIsIGNodW5rLCBjb250ZXh0Ml0sCiAgICBbImV4aXQiLCBzdHJpbmczLCBjb250ZXh0Ml0sCiAgICAvLyBUaGUgZW5kaW5nIChgXWAsIHByb3Blcmx5IHBhcnNlZCBhbmQgbGFiZWxsZWQpLgogICAgZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAyXSwKICAgIGV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV0sCiAgICBbImV4aXQiLCBjYWxsLCBjb250ZXh0Ml0KICBdOwogIGV2ZW50cy5zcGxpY2UoaW5kZXgyLCBldmVudHMubGVuZ3RoIC0gaW5kZXgyICsgMSwgLi4ucmVwbGFjZW1lbnQpOwogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gdG9rZW5pemVHZm1Gb290bm90ZUNhbGwoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgY29uc3QgZGVmaW5lZCA9IHNlbGYyLnBhcnNlci5nZm1Gb290bm90ZXMgfHwgKHNlbGYyLnBhcnNlci5nZm1Gb290bm90ZXMgPSBbXSk7CiAgbGV0IHNpemUgPSAwOwogIGxldCBkYXRhOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVDYWxsIik7CiAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiKTsKICAgIHJldHVybiBjYWxsU3RhcnQ7CiAgfQogIGZ1bmN0aW9uIGNhbGxTdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ICE9PSA5NCkgcmV0dXJuIG5vayhjb2RlNCk7CiAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZUNhbGxNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlQ2FsbE1hcmtlciIpOwogICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nIik7CiAgICBlZmZlY3RzLmVudGVyKCJjaHVua1N0cmluZyIpLmNvbnRlbnRUeXBlID0gInN0cmluZyI7CiAgICByZXR1cm4gY2FsbERhdGE7CiAgfQogIGZ1bmN0aW9uIGNhbGxEYXRhKGNvZGU0KSB7CiAgICBpZiAoCiAgICAgIC8vIFRvbyBsb25nLgogICAgICBzaXplID4gOTk5IHx8IC8vIENsb3NpbmcgYnJhY2Ugd2l0aCBub3RoaW5nLgogICAgICBjb2RlNCA9PT0gOTMgJiYgIWRhdGEgfHwgLy8gU3BhY2Ugb3IgdGFiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR0ZNIGZvciBzb21lIHJlYXNvbi4KICAgICAgLy8gYFxuYCBhbmQgYFtgIG5vdCBiZWluZyBzdXBwb3J0ZWQgbWFrZXMgc2Vuc2UuCiAgICAgIGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA5MSB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KQogICAgKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rU3RyaW5nIik7CiAgICAgIGNvbnN0IHRva2VuID0gZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZUNhbGxTdHJpbmciKTsKICAgICAgaWYgKCFkZWZpbmVkLmluY2x1ZGVzKG5vcm1hbGl6ZUlkZW50aWZpZXIoc2VsZjIuc2xpY2VTZXJpYWxpemUodG9rZW4pKSkpIHsKICAgICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgICAgfQogICAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsIik7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICBpZiAoIW1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSB7CiAgICAgIGRhdGEgPSB0cnVlOwogICAgfQogICAgc2l6ZSsrOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb2RlNCA9PT0gOTIgPyBjYWxsRXNjYXBlIDogY2FsbERhdGE7CiAgfQogIGZ1bmN0aW9uIGNhbGxFc2NhcGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTEgfHwgY29kZTQgPT09IDkyIHx8IGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBzaXplKys7CiAgICAgIHJldHVybiBjYWxsRGF0YTsKICAgIH0KICAgIHJldHVybiBjYWxsRGF0YShjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplRGVmaW5pdGlvblN0YXJ0KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGNvbnN0IGRlZmluZWQgPSBzZWxmMi5wYXJzZXIuZ2ZtRm9vdG5vdGVzIHx8IChzZWxmMi5wYXJzZXIuZ2ZtRm9vdG5vdGVzID0gW10pOwogIGxldCBpZGVudGlmaWVyOwogIGxldCBzaXplID0gMDsKICBsZXQgZGF0YTsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImdmbUZvb3Rub3RlRGVmaW5pdGlvbiIpLl9jb250YWluZXIgPSB0cnVlOwogICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWwiKTsKICAgIGVmZmVjdHMuZW50ZXIoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbE1hcmtlciIpOwogICAgcmV0dXJuIGxhYmVsQXRNYXJrZXI7CiAgfQogIGZ1bmN0aW9uIGxhYmVsQXRNYXJrZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTQpIHsKICAgICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZW50ZXIoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nIik7CiAgICAgIGVmZmVjdHMuZW50ZXIoImNodW5rU3RyaW5nIikuY29udGVudFR5cGUgPSAic3RyaW5nIjsKICAgICAgcmV0dXJuIGxhYmVsSW5zaWRlOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGxhYmVsSW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoCiAgICAgIC8vIFRvbyBsb25nLgogICAgICBzaXplID4gOTk5IHx8IC8vIENsb3NpbmcgYnJhY2Ugd2l0aCBub3RoaW5nLgogICAgICBjb2RlNCA9PT0gOTMgJiYgIWRhdGEgfHwgLy8gU3BhY2Ugb3IgdGFiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR0ZNIGZvciBzb21lIHJlYXNvbi4KICAgICAgLy8gYFxuYCBhbmQgYFtgIG5vdCBiZWluZyBzdXBwb3J0ZWQgbWFrZXMgc2Vuc2UuCiAgICAgIGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA5MSB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KQogICAgKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rU3RyaW5nIik7CiAgICAgIGNvbnN0IHRva2VuID0gZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZyIpOwogICAgICBpZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcihzZWxmMi5zbGljZVNlcmlhbGl6ZSh0b2tlbikpOwogICAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbE1hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWwiKTsKICAgICAgcmV0dXJuIGxhYmVsQWZ0ZXI7CiAgICB9CiAgICBpZiAoIW1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSB7CiAgICAgIGRhdGEgPSB0cnVlOwogICAgfQogICAgc2l6ZSsrOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb2RlNCA9PT0gOTIgPyBsYWJlbEVzY2FwZSA6IGxhYmVsSW5zaWRlOwogIH0KICBmdW5jdGlvbiBsYWJlbEVzY2FwZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MSB8fCBjb2RlNCA9PT0gOTIgfHwgY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHNpemUrKzsKICAgICAgcmV0dXJuIGxhYmVsSW5zaWRlOwogICAgfQogICAgcmV0dXJuIGxhYmVsSW5zaWRlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbGFiZWxBZnRlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA1OCkgewogICAgICBlZmZlY3RzLmVudGVyKCJkZWZpbml0aW9uTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiZGVmaW5pdGlvbk1hcmtlciIpOwogICAgICBpZiAoIWRlZmluZWQuaW5jbHVkZXMoaWRlbnRpZmllcikpIHsKICAgICAgICBkZWZpbmVkLnB1c2goaWRlbnRpZmllcik7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCB3aGl0ZXNwYWNlQWZ0ZXIsICJnZm1Gb290bm90ZURlZmluaXRpb25XaGl0ZXNwYWNlIik7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gd2hpdGVzcGFjZUFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVEZWZpbml0aW9uQ29udGludWF0aW9uKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIGVmZmVjdHMuY2hlY2soYmxhbmtMaW5lLCBvazMsIGVmZmVjdHMuYXR0ZW1wdChpbmRlbnQyLCBvazMsIG5vaykpOwp9CmZ1bmN0aW9uIGdmbUZvb3Rub3RlRGVmaW5pdGlvbkVuZChlZmZlY3RzKSB7CiAgZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb24iKTsKfQpmdW5jdGlvbiB0b2tlbml6ZUluZGVudDIoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlclByZWZpeCwgImdmbUZvb3Rub3RlRGVmaW5pdGlvbkluZGVudCIsIDQgKyAxKTsKICBmdW5jdGlvbiBhZnRlclByZWZpeChjb2RlNCkgewogICAgY29uc3QgdGFpbCA9IHNlbGYyLmV2ZW50c1tzZWxmMi5ldmVudHMubGVuZ3RoIC0gMV07CiAgICByZXR1cm4gdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09ICJnZm1Gb290bm90ZURlZmluaXRpb25JbmRlbnQiICYmIHRhaWxbMl0uc2xpY2VTZXJpYWxpemUodGFpbFsxXSwgdHJ1ZSkubGVuZ3RoID09PSA0ID8gb2szKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQp9CnZhciBpbmRlbnQyOwp2YXIgaW5pdF9zeW50YXgyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlL2xpYi9zeW50YXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfY29yZV9jb21tb25tYXJrKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9ub3JtYWxpemVfaWRlbnRpZmllcigpOwogICAgaW5kZW50MiA9IHsKICAgICAgdG9rZW5pemU6IHRva2VuaXplSW5kZW50MiwKICAgICAgcGFydGlhbDogdHJ1ZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZS9saWIvaHRtbC5qcwpmdW5jdGlvbiBkZWZhdWx0QmFja0xhYmVsKHJlZmVyZW5jZUluZGV4LCByZXJlZmVyZW5jZUluZGV4KSB7CiAgcmV0dXJuICJCYWNrIHRvIHJlZmVyZW5jZSAiICsgKHJlZmVyZW5jZUluZGV4ICsgMSkgKyAocmVyZWZlcmVuY2VJbmRleCA+IDEgPyAiLSIgKyByZXJlZmVyZW5jZUluZGV4IDogIiIpOwp9CmZ1bmN0aW9uIGdmbUZvb3Rub3RlSHRtbChvcHRpb25zKSB7CiAgY29uc3QgY29uZmlnMyA9IG9wdGlvbnMgfHwgZW1wdHlPcHRpb25zMjsKICBjb25zdCBsYWJlbCA9IGNvbmZpZzMubGFiZWwgfHwgIkZvb3Rub3RlcyI7CiAgY29uc3QgbGFiZWxUYWdOYW1lID0gY29uZmlnMy5sYWJlbFRhZ05hbWUgfHwgImgyIjsKICBjb25zdCBsYWJlbEF0dHJpYnV0ZXMgPSBjb25maWczLmxhYmVsQXR0cmlidXRlcyA9PT0gbnVsbCB8fCBjb25maWczLmxhYmVsQXR0cmlidXRlcyA9PT0gdm9pZCAwID8gJ2NsYXNzPSJzci1vbmx5IicgOiBjb25maWczLmxhYmVsQXR0cmlidXRlczsKICBjb25zdCBiYWNrTGFiZWwgPSBjb25maWczLmJhY2tMYWJlbCB8fCBkZWZhdWx0QmFja0xhYmVsOwogIGNvbnN0IGNsb2JiZXJQcmVmaXggPSBjb25maWczLmNsb2JiZXJQcmVmaXggPT09IG51bGwgfHwgY29uZmlnMy5jbG9iYmVyUHJlZml4ID09PSB2b2lkIDAgPyAidXNlci1jb250ZW50LSIgOiBjb25maWczLmNsb2JiZXJQcmVmaXg7CiAgcmV0dXJuIHsKICAgIGVudGVyOiB7CiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbigpIHsKICAgICAgICBjb25zdCBzdGFjayA9IHRoaXMuZ2V0RGF0YSgidGlnaHRTdGFjayIpOwogICAgICAgIHN0YWNrLnB1c2goZmFsc2UpOwogICAgICB9LAogICAgICBnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZygpIHsKICAgICAgICB0aGlzLmJ1ZmZlcigpOwogICAgICB9LAogICAgICBnZm1Gb290bm90ZUNhbGxTdHJpbmcoKSB7CiAgICAgICAgdGhpcy5idWZmZXIoKTsKICAgICAgfQogICAgfSwKICAgIGV4aXQ6IHsKICAgICAgZ2ZtRm9vdG5vdGVEZWZpbml0aW9uKCkgewogICAgICAgIGxldCBkZWZpbml0aW9ucyA9IHRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9ucyIpOwogICAgICAgIGNvbnN0IGZvb3Rub3RlU3RhY2sgPSB0aGlzLmdldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvblN0YWNrIik7CiAgICAgICAgY29uc3QgdGlnaHRTdGFjayA9IHRoaXMuZ2V0RGF0YSgidGlnaHRTdGFjayIpOwogICAgICAgIGNvbnN0IGN1cnJlbnQgPSBmb290bm90ZVN0YWNrLnBvcCgpOwogICAgICAgIGNvbnN0IHZhbHVlMiA9IHRoaXMucmVzdW1lKCk7CiAgICAgICAgaWYgKCFkZWZpbml0aW9ucykgewogICAgICAgICAgdGhpcy5zZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25zIiwgZGVmaW5pdGlvbnMgPSB7fSk7CiAgICAgICAgfQogICAgICAgIGlmICghb3duNC5jYWxsKGRlZmluaXRpb25zLCBjdXJyZW50KSkgZGVmaW5pdGlvbnNbY3VycmVudF0gPSB2YWx1ZTI7CiAgICAgICAgdGlnaHRTdGFjay5wb3AoKTsKICAgICAgICB0aGlzLnNldERhdGEoInNsdXJwT25lTGluZUVuZGluZyIsIHRydWUpOwogICAgICAgIHRoaXMuc2V0RGF0YSgibGFzdFdhc1RhZyIpOwogICAgICB9LAogICAgICBnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZyh0b2tlbikgewogICAgICAgIGxldCBmb290bm90ZVN0YWNrID0gdGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25TdGFjayIpOwogICAgICAgIGlmICghZm9vdG5vdGVTdGFjaykgewogICAgICAgICAgdGhpcy5zZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25TdGFjayIsIGZvb3Rub3RlU3RhY2sgPSBbXSk7CiAgICAgICAgfQogICAgICAgIGZvb3Rub3RlU3RhY2sucHVzaChub3JtYWxpemVJZGVudGlmaWVyKHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pKSk7CiAgICAgICAgdGhpcy5yZXN1bWUoKTsKICAgICAgICB0aGlzLmJ1ZmZlcigpOwogICAgICB9LAogICAgICBnZm1Gb290bm90ZUNhbGxTdHJpbmcodG9rZW4pIHsKICAgICAgICBsZXQgY2FsbHMgPSB0aGlzLmdldERhdGEoImdmbUZvb3Rub3RlQ2FsbE9yZGVyIik7CiAgICAgICAgbGV0IGNvdW50cyA9IHRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsQ291bnRzIik7CiAgICAgICAgY29uc3QgaWQgPSBub3JtYWxpemVJZGVudGlmaWVyKHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pKTsKICAgICAgICBsZXQgY291bnRlcjI7CiAgICAgICAgdGhpcy5yZXN1bWUoKTsKICAgICAgICBpZiAoIWNhbGxzKSB0aGlzLnNldERhdGEoImdmbUZvb3Rub3RlQ2FsbE9yZGVyIiwgY2FsbHMgPSBbXSk7CiAgICAgICAgaWYgKCFjb3VudHMpIHRoaXMuc2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsQ291bnRzIiwgY291bnRzID0ge30pOwogICAgICAgIGNvbnN0IGluZGV4MiA9IGNhbGxzLmluZGV4T2YoaWQpOwogICAgICAgIGNvbnN0IHNhZmVJZCA9IHNhbml0aXplVXJpKGlkLnRvTG93ZXJDYXNlKCkpOwogICAgICAgIGlmIChpbmRleDIgPT09IC0xKSB7CiAgICAgICAgICBjYWxscy5wdXNoKGlkKTsKICAgICAgICAgIGNvdW50c1tpZF0gPSAxOwogICAgICAgICAgY291bnRlcjIgPSBjYWxscy5sZW5ndGg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvdW50c1tpZF0rKzsKICAgICAgICAgIGNvdW50ZXIyID0gaW5kZXgyICsgMTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmV1c2VDb3VudGVyID0gY291bnRzW2lkXTsKICAgICAgICB0aGlzLnRhZygnPHN1cD48YSBocmVmPSIjJyArIGNsb2JiZXJQcmVmaXggKyAiZm4tIiArIHNhZmVJZCArICciIGlkPSInICsgY2xvYmJlclByZWZpeCArICJmbnJlZi0iICsgc2FmZUlkICsgKHJldXNlQ291bnRlciA+IDEgPyAiLSIgKyByZXVzZUNvdW50ZXIgOiAiIikgKyAnIiBkYXRhLWZvb3Rub3RlLXJlZj0iIiBhcmlhLWRlc2NyaWJlZGJ5PSJmb290bm90ZS1sYWJlbCI+JyArIFN0cmluZyhjb3VudGVyMikgKyAiPC9hPjwvc3VwPiIpOwogICAgICB9LAogICAgICBudWxsKCkgewogICAgICAgIGNvbnN0IGNhbGxzID0gdGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZUNhbGxPcmRlciIpIHx8IFtdOwogICAgICAgIGNvbnN0IGNvdW50cyA9IHRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsQ291bnRzIikgfHwge307CiAgICAgICAgY29uc3QgZGVmaW5pdGlvbnMgPSB0aGlzLmdldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvbnMiKSB8fCB7fTsKICAgICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgICAgaWYgKGNhbGxzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygnPHNlY3Rpb24gZGF0YS1mb290bm90ZXM9IiIgY2xhc3M9ImZvb3Rub3RlcyI+PCcgKyBsYWJlbFRhZ05hbWUgKyAnIGlkPSJmb290bm90ZS1sYWJlbCInICsgKGxhYmVsQXR0cmlidXRlcyA/ICIgIiArIGxhYmVsQXR0cmlidXRlcyA6ICIiKSArICI+Iik7CiAgICAgICAgICB0aGlzLnJhdyh0aGlzLmVuY29kZShsYWJlbCkpOwogICAgICAgICAgdGhpcy50YWcoIjwvIiArIGxhYmVsVGFnTmFtZSArICI+Iik7CiAgICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgICAgdGhpcy50YWcoIjxvbD4iKTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKCsraW5kZXgyIDwgY2FsbHMubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCBpZCA9IGNhbGxzW2luZGV4Ml07CiAgICAgICAgICBjb25zdCBzYWZlSWQgPSBzYW5pdGl6ZVVyaShpZC50b0xvd2VyQ2FzZSgpKTsKICAgICAgICAgIGxldCByZWZlcmVuY2VJbmRleCA9IDA7CiAgICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gW107CiAgICAgICAgICB3aGlsZSAoKytyZWZlcmVuY2VJbmRleCA8PSBjb3VudHNbaWRdKSB7CiAgICAgICAgICAgIHJlZmVyZW5jZXMucHVzaCgnPGEgaHJlZj0iIycgKyBjbG9iYmVyUHJlZml4ICsgImZucmVmLSIgKyBzYWZlSWQgKyAocmVmZXJlbmNlSW5kZXggPiAxID8gIi0iICsgcmVmZXJlbmNlSW5kZXggOiAiIikgKyAnIiBkYXRhLWZvb3Rub3RlLWJhY2tyZWY9IiIgYXJpYS1sYWJlbD0iJyArIHRoaXMuZW5jb2RlKHR5cGVvZiBiYWNrTGFiZWwgPT09ICJzdHJpbmciID8gYmFja0xhYmVsIDogYmFja0xhYmVsKGluZGV4MiwgcmVmZXJlbmNlSW5kZXgpKSArICciIGNsYXNzPSJkYXRhLWZvb3Rub3RlLWJhY2tyZWYiPlx1MjFBOScgKyAocmVmZXJlbmNlSW5kZXggPiAxID8gIjxzdXA+IiArIHJlZmVyZW5jZUluZGV4ICsgIjwvc3VwPiIgOiAiIikgKyAiPC9hPiIpOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5qb2luKCIgIik7CiAgICAgICAgICBsZXQgaW5qZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygnPGxpIGlkPSInICsgY2xvYmJlclByZWZpeCArICJmbi0iICsgc2FmZUlkICsgJyI+Jyk7CiAgICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgICAgdGhpcy50YWcoZGVmaW5pdGlvbnNbaWRdLnJlcGxhY2UoLzxcL3A+KD86XHI/XG58XHIpPyQvLCBmdW5jdGlvbigkMCkgewogICAgICAgICAgICBpbmplY3RlZCA9IHRydWU7CiAgICAgICAgICAgIHJldHVybiAiICIgKyByZWZlcmVuY2UgKyAkMDsKICAgICAgICAgIH0pKTsKICAgICAgICAgIGlmICghaW5qZWN0ZWQpIHsKICAgICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICAgICAgdGhpcy50YWcocmVmZXJlbmNlKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygiPC9saT4iKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNhbGxzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygiPC9vbD4iKTsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygiPC9zZWN0aW9uPiIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07Cn0KdmFyIG93bjQsIGVtcHR5T3B0aW9uczI7CnZhciBpbml0X2h0bWwzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlL2xpYi9odG1sLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfbm9ybWFsaXplX2lkZW50aWZpZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgICBvd240ID0ge30uaGFzT3duUHJvcGVydHk7CiAgICBlbXB0eU9wdGlvbnMyID0ge307CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGUvaW5kZXguanMKdmFyIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fZm9vdG5vdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGUvaW5kZXguanMiKCkgewogICAgaW5pdF9zeW50YXgyKCk7CiAgICBpbml0X2h0bWwzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoL2xpYi9odG1sLmpzCmZ1bmN0aW9uIGdmbVN0cmlrZXRocm91Z2hIdG1sKCkgewogIHJldHVybiB7CiAgICBlbnRlcjogewogICAgICBzdHJpa2V0aHJvdWdoKCkgewogICAgICAgIHRoaXMudGFnKCI8ZGVsPiIpOwogICAgICB9CiAgICB9LAogICAgZXhpdDogewogICAgICBzdHJpa2V0aHJvdWdoKCkgewogICAgICAgIHRoaXMudGFnKCI8L2RlbD4iKTsKICAgICAgfQogICAgfQogIH07Cn0KdmFyIGluaXRfaHRtbDQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoL2xpYi9odG1sLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2hAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2gvbGliL3N5bnRheC5qcwpmdW5jdGlvbiBnZm1TdHJpa2V0aHJvdWdoKG9wdGlvbnMpIHsKICBjb25zdCBvcHRpb25zXyA9IG9wdGlvbnMgfHwge307CiAgbGV0IHNpbmdsZTIgPSBvcHRpb25zXy5zaW5nbGVUaWxkZTsKICBjb25zdCB0b2tlbml6ZXIgPSB7CiAgICBuYW1lOiAic3RyaWtldGhyb3VnaCIsCiAgICB0b2tlbml6ZTogdG9rZW5pemVTdHJpa2V0aHJvdWdoLAogICAgcmVzb2x2ZUFsbDogcmVzb2x2ZUFsbFN0cmlrZXRocm91Z2gKICB9OwogIGlmIChzaW5nbGUyID09PSBudWxsIHx8IHNpbmdsZTIgPT09IHZvaWQgMCkgewogICAgc2luZ2xlMiA9IHRydWU7CiAgfQogIHJldHVybiB7CiAgICB0ZXh0OiB7CiAgICAgIFsxMjZdOiB0b2tlbml6ZXIKICAgIH0sCiAgICBpbnNpZGVTcGFuOiB7CiAgICAgIG51bGw6IFt0b2tlbml6ZXJdCiAgICB9LAogICAgYXR0ZW50aW9uTWFya2VyczogewogICAgICBudWxsOiBbMTI2XQogICAgfQogIH07CiAgZnVuY3Rpb24gcmVzb2x2ZUFsbFN0cmlrZXRocm91Z2goZXZlbnRzLCBjb250ZXh0MikgewogICAgbGV0IGluZGV4MiA9IC0xOwogICAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMF0gPT09ICJlbnRlciIgJiYgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gInN0cmlrZXRocm91Z2hTZXF1ZW5jZVRlbXBvcmFyeSIgJiYgZXZlbnRzW2luZGV4Ml1bMV0uX2Nsb3NlKSB7CiAgICAgICAgbGV0IG9wZW4gPSBpbmRleDI7CiAgICAgICAgd2hpbGUgKG9wZW4tLSkgewogICAgICAgICAgaWYgKGV2ZW50c1tvcGVuXVswXSA9PT0gImV4aXQiICYmIGV2ZW50c1tvcGVuXVsxXS50eXBlID09PSAic3RyaWtldGhyb3VnaFNlcXVlbmNlVGVtcG9yYXJ5IiAmJiBldmVudHNbb3Blbl1bMV0uX29wZW4gJiYgLy8gSWYgdGhlIHNpemVzIGFyZSB0aGUgc2FtZToKICAgICAgICAgIGV2ZW50c1tpbmRleDJdWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbaW5kZXgyXVsxXS5zdGFydC5vZmZzZXQgPT09IGV2ZW50c1tvcGVuXVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW29wZW5dWzFdLnN0YXJ0Lm9mZnNldCkgewogICAgICAgICAgICBldmVudHNbaW5kZXgyXVsxXS50eXBlID0gInN0cmlrZXRocm91Z2hTZXF1ZW5jZSI7CiAgICAgICAgICAgIGV2ZW50c1tvcGVuXVsxXS50eXBlID0gInN0cmlrZXRocm91Z2hTZXF1ZW5jZSI7CiAgICAgICAgICAgIGNvbnN0IHN0cmlrZXRocm91Z2gzID0gewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpa2V0aHJvdWdoIiwKICAgICAgICAgICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW29wZW5dWzFdLnN0YXJ0KSwKICAgICAgICAgICAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tpbmRleDJdWzFdLmVuZCkKICAgICAgICAgICAgfTsKICAgICAgICAgICAgY29uc3QgdGV4dDkgPSB7CiAgICAgICAgICAgICAgdHlwZTogInN0cmlrZXRocm91Z2hUZXh0IiwKICAgICAgICAgICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW29wZW5dWzFdLmVuZCksCiAgICAgICAgICAgICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbaW5kZXgyXVsxXS5zdGFydCkKICAgICAgICAgICAgfTsKICAgICAgICAgICAgY29uc3QgbmV4dEV2ZW50cyA9IFtbImVudGVyIiwgc3RyaWtldGhyb3VnaDMsIGNvbnRleHQyXSwgWyJlbnRlciIsIGV2ZW50c1tvcGVuXVsxXSwgY29udGV4dDJdLCBbImV4aXQiLCBldmVudHNbb3Blbl1bMV0sIGNvbnRleHQyXSwgWyJlbnRlciIsIHRleHQ5LCBjb250ZXh0Ml1dOwogICAgICAgICAgICBjb25zdCBpbnNpZGVTcGFuMiA9IGNvbnRleHQyLnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbDsKICAgICAgICAgICAgaWYgKGluc2lkZVNwYW4yKSB7CiAgICAgICAgICAgICAgc3BsaWNlKG5leHRFdmVudHMsIG5leHRFdmVudHMubGVuZ3RoLCAwLCByZXNvbHZlQWxsKGluc2lkZVNwYW4yLCBldmVudHMuc2xpY2Uob3BlbiArIDEsIGluZGV4MiksIGNvbnRleHQyKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3BsaWNlKG5leHRFdmVudHMsIG5leHRFdmVudHMubGVuZ3RoLCAwLCBbWyJleGl0IiwgdGV4dDksIGNvbnRleHQyXSwgWyJlbnRlciIsIGV2ZW50c1tpbmRleDJdWzFdLCBjb250ZXh0Ml0sIFsiZXhpdCIsIGV2ZW50c1tpbmRleDJdWzFdLCBjb250ZXh0Ml0sIFsiZXhpdCIsIHN0cmlrZXRocm91Z2gzLCBjb250ZXh0Ml1dKTsKICAgICAgICAgICAgc3BsaWNlKGV2ZW50cywgb3BlbiAtIDEsIGluZGV4MiAtIG9wZW4gKyAzLCBuZXh0RXZlbnRzKTsKICAgICAgICAgICAgaW5kZXgyID0gb3BlbiArIG5leHRFdmVudHMubGVuZ3RoIC0gMjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpbmRleDIgPSAtMTsKICAgIHdoaWxlICgrK2luZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJzdHJpa2V0aHJvdWdoU2VxdWVuY2VUZW1wb3JhcnkiKSB7CiAgICAgICAgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9ICJkYXRhIjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGV2ZW50czsKICB9CiAgZnVuY3Rpb24gdG9rZW5pemVTdHJpa2V0aHJvdWdoKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgICBjb25zdCBwcmV2aW91czMgPSB0aGlzLnByZXZpb3VzOwogICAgY29uc3QgZXZlbnRzID0gdGhpcy5ldmVudHM7CiAgICBsZXQgc2l6ZSA9IDA7CiAgICByZXR1cm4gc3RhcnQ7CiAgICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgICBpZiAocHJldmlvdXMzID09PSAxMjYgJiYgZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAxXVsxXS50eXBlICE9PSAiY2hhcmFjdGVyRXNjYXBlIikgewogICAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgICB9CiAgICAgIGVmZmVjdHMuZW50ZXIoInN0cmlrZXRocm91Z2hTZXF1ZW5jZVRlbXBvcmFyeSIpOwogICAgICByZXR1cm4gbW9yZShjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBtb3JlKGNvZGU0KSB7CiAgICAgIGNvbnN0IGJlZm9yZSA9IGNsYXNzaWZ5Q2hhcmFjdGVyKHByZXZpb3VzMyk7CiAgICAgIGlmIChjb2RlNCA9PT0gMTI2KSB7CiAgICAgICAgaWYgKHNpemUgPiAxKSByZXR1cm4gbm9rKGNvZGU0KTsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHNpemUrKzsKICAgICAgICByZXR1cm4gbW9yZTsKICAgICAgfQogICAgICBpZiAoc2l6ZSA8IDIgJiYgIXNpbmdsZTIpIHJldHVybiBub2soY29kZTQpOwogICAgICBjb25zdCB0b2tlbiA9IGVmZmVjdHMuZXhpdCgic3RyaWtldGhyb3VnaFNlcXVlbmNlVGVtcG9yYXJ5Iik7CiAgICAgIGNvbnN0IGFmdGVyID0gY2xhc3NpZnlDaGFyYWN0ZXIoY29kZTQpOwogICAgICB0b2tlbi5fb3BlbiA9ICFhZnRlciB8fCBhZnRlciA9PT0gMiAmJiBCb29sZWFuKGJlZm9yZSk7CiAgICAgIHRva2VuLl9jbG9zZSA9ICFiZWZvcmUgfHwgYmVmb3JlID09PSAyICYmIEJvb2xlYW4oYWZ0ZXIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICB9Cn0KdmFyIGluaXRfc3ludGF4MyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2hAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2gvbGliL3N5bnRheC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NodW5rZWQoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2xhc3NpZnlfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Jlc29sdmVfYWxsKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoL2luZGV4LmpzCnZhciBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX3N0cmlrZXRocm91Z2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoL2luZGV4LmpzIigpIHsKICAgIGluaXRfaHRtbDQoKTsKICAgIGluaXRfc3ludGF4MygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9odG1sLmpzCmZ1bmN0aW9uIGdmbVRhYmxlSHRtbCgpIHsKICByZXR1cm4gewogICAgZW50ZXI6IHsKICAgICAgdGFibGUodG9rZW4pIHsKICAgICAgICBjb25zdCB0YWJsZUFsaWduID0gdG9rZW4uX2FsaWduOwogICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgdGhpcy50YWcoIjx0YWJsZT4iKTsKICAgICAgICB0aGlzLnNldERhdGEoInRhYmxlQWxpZ24iLCB0YWJsZUFsaWduKTsKICAgICAgfSwKICAgICAgdGFibGVCb2R5KCkgewogICAgICAgIHRoaXMudGFnKCI8dGJvZHk+Iik7CiAgICAgIH0sCiAgICAgIHRhYmxlRGF0YSgpIHsKICAgICAgICBjb25zdCB0YWJsZUFsaWduID0gdGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIik7CiAgICAgICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7CiAgICAgICAgY29uc3QgYWxpZ24gPSBhbGlnbm1lbnRbdGFibGVBbGlnblt0YWJsZUNvbHVtbl1dOwogICAgICAgIGlmIChhbGlnbiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICB0aGlzLmJ1ZmZlcigpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgICAgdGhpcy50YWcoIjx0ZCIgKyBhbGlnbiArICI+Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICB0YWJsZUhlYWQoKSB7CiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICB0aGlzLnRhZygiPHRoZWFkPiIpOwogICAgICB9LAogICAgICB0YWJsZUhlYWRlcigpIHsKICAgICAgICBjb25zdCB0YWJsZUFsaWduID0gdGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIik7CiAgICAgICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7CiAgICAgICAgY29uc3QgYWxpZ24gPSBhbGlnbm1lbnRbdGFibGVBbGlnblt0YWJsZUNvbHVtbl1dOwogICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgdGhpcy50YWcoIjx0aCIgKyBhbGlnbiArICI+Iik7CiAgICAgIH0sCiAgICAgIHRhYmxlUm93KCkgewogICAgICAgIHRoaXMuc2V0RGF0YSgidGFibGVDb2x1bW4iLCAwKTsKICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgIHRoaXMudGFnKCI8dHI+Iik7CiAgICAgIH0KICAgIH0sCiAgICBleGl0OiB7CiAgICAgIC8vIE92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBjb2RlIHRleHQgZGF0YSBoYW5kbGVyIHRvIHVuZXNjYXBlIGVzY2FwZWQgcGlwZXMgd2hlbgogICAgICAvLyB0aGV5IGFyZSBpbiB0YWJsZXMuCiAgICAgIGNvZGVUZXh0RGF0YSh0b2tlbikgewogICAgICAgIGxldCB2YWx1ZTIgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICAgICAgICBpZiAodGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIikpIHsKICAgICAgICAgIHZhbHVlMiA9IHZhbHVlMi5yZXBsYWNlKC9cXChbXFx8XSkvZywgcmVwbGFjZTIpOwogICAgICAgIH0KICAgICAgICB0aGlzLnJhdyh0aGlzLmVuY29kZSh2YWx1ZTIpKTsKICAgICAgfSwKICAgICAgdGFibGUoKSB7CiAgICAgICAgdGhpcy5zZXREYXRhKCJ0YWJsZUFsaWduIik7CiAgICAgICAgdGhpcy5zZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIik7CiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICB0aGlzLnRhZygiPC90YWJsZT4iKTsKICAgICAgfSwKICAgICAgdGFibGVCb2R5KCkgewogICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgdGhpcy50YWcoIjwvdGJvZHk+Iik7CiAgICAgIH0sCiAgICAgIHRhYmxlRGF0YSgpIHsKICAgICAgICBjb25zdCB0YWJsZUFsaWduID0gdGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIik7CiAgICAgICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7CiAgICAgICAgaWYgKHRhYmxlQ29sdW1uIGluIHRhYmxlQWxpZ24pIHsKICAgICAgICAgIHRoaXMudGFnKCI8L3RkPiIpOwogICAgICAgICAgdGhpcy5zZXREYXRhKCJ0YWJsZUNvbHVtbiIsIHRhYmxlQ29sdW1uICsgMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMucmVzdW1lKCk7CiAgICAgICAgfQogICAgICB9LAogICAgICB0YWJsZUhlYWQoKSB7CiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICB0aGlzLnRhZygiPC90aGVhZD4iKTsKICAgICAgfSwKICAgICAgdGFibGVIZWFkZXIoKSB7CiAgICAgICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7CiAgICAgICAgdGhpcy50YWcoIjwvdGg+Iik7CiAgICAgICAgdGhpcy5zZXREYXRhKCJ0YWJsZUNvbHVtbiIsIHRhYmxlQ29sdW1uICsgMSk7CiAgICAgIH0sCiAgICAgIHRhYmxlUm93KCkgewogICAgICAgIGNvbnN0IHRhYmxlQWxpZ24gPSB0aGlzLmdldERhdGEoInRhYmxlQWxpZ24iKTsKICAgICAgICBsZXQgdGFibGVDb2x1bW4gPSB0aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7CiAgICAgICAgd2hpbGUgKHRhYmxlQ29sdW1uIDwgdGFibGVBbGlnbi5sZW5ndGgpIHsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygiPHRkIiArIGFsaWdubWVudFt0YWJsZUFsaWduW3RhYmxlQ29sdW1uXV0gKyAiPjwvdGQ+Iik7CiAgICAgICAgICB0YWJsZUNvbHVtbisrOwogICAgICAgIH0KICAgICAgICB0aGlzLnNldERhdGEoInRhYmxlQ29sdW1uIiwgdGFibGVDb2x1bW4pOwogICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgdGhpcy50YWcoIjwvdHI+Iik7CiAgICAgIH0KICAgIH0KICB9Owp9CmZ1bmN0aW9uIHJlcGxhY2UyKCQwLCAkMSkgewogIHJldHVybiAkMSA9PT0gInwiID8gJDEgOiAkMDsKfQp2YXIgYWxpZ25tZW50Owp2YXIgaW5pdF9odG1sNSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZS9saWIvaHRtbC5qcyIoKSB7CiAgICBhbGlnbm1lbnQgPSB7CiAgICAgIG5vbmU6ICIiLAogICAgICBsZWZ0OiAnIGFsaWduPSJsZWZ0IicsCiAgICAgIHJpZ2h0OiAnIGFsaWduPSJyaWdodCInLAogICAgICBjZW50ZXI6ICcgYWxpZ249ImNlbnRlciInCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9lZGl0LW1hcC5qcwpmdW5jdGlvbiBhZGRJbXBsZW1lbnRhdGlvbihlZGl0TWFwLCBhdCwgcmVtb3ZlMiwgYWRkMykgewogIGxldCBpbmRleDIgPSAwOwogIGlmIChyZW1vdmUyID09PSAwICYmIGFkZDMubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm47CiAgfQogIHdoaWxlIChpbmRleDIgPCBlZGl0TWFwLm1hcC5sZW5ndGgpIHsKICAgIGlmIChlZGl0TWFwLm1hcFtpbmRleDJdWzBdID09PSBhdCkgewogICAgICBlZGl0TWFwLm1hcFtpbmRleDJdWzFdICs9IHJlbW92ZTI7CiAgICAgIGVkaXRNYXAubWFwW2luZGV4Ml1bMl0ucHVzaCguLi5hZGQzKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaW5kZXgyICs9IDE7CiAgfQogIGVkaXRNYXAubWFwLnB1c2goW2F0LCByZW1vdmUyLCBhZGQzXSk7Cn0KdmFyIEVkaXRNYXA7CnZhciBpbml0X2VkaXRfbWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9lZGl0LW1hcC5qcyIoKSB7CiAgICBFZGl0TWFwID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgbmV3IGVkaXQgbWFwLgogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5tYXAgPSBbXTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGFuIGVkaXQ6IGEgcmVtb3ZlIGFuZC9vciBhZGQgYXQgYSBjZXJ0YWluIHBsYWNlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZQogICAgICAgKiBAcGFyYW0ge0FycmF5PEV2ZW50Pn0gYWRkCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqLwogICAgICBhZGQoaW5kZXgyLCByZW1vdmUyLCBhZGQzKSB7CiAgICAgICAgYWRkSW1wbGVtZW50YXRpb24odGhpcywgaW5kZXgyLCByZW1vdmUyLCBhZGQzKTsKICAgICAgfQogICAgICAvLyBUbyBkbzogYWRkIHRoaXMgd2hlbiBtb3ZpbmcgdG8gYG1pY3JvbWFya2AuCiAgICAgIC8vIC8qKgogICAgICAvLyAgKiBDcmVhdGUgYW4gZWRpdDogYnV0IGluc2VydCBgYWRkYCBiZWZvcmUgZXhpc3RpbmcgYWRkaXRpb25zLgogICAgICAvLyAgKgogICAgICAvLyAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKICAgICAgLy8gICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZQogICAgICAvLyAgKiBAcGFyYW0ge0FycmF5PEV2ZW50Pn0gYWRkCiAgICAgIC8vICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgIC8vICAqLwogICAgICAvLyBhZGRCZWZvcmUoaW5kZXgsIHJlbW92ZSwgYWRkKSB7CiAgICAgIC8vICAgYWRkSW1wbGVtZW50YXRpb24odGhpcywgaW5kZXgsIHJlbW92ZSwgYWRkLCB0cnVlKQogICAgICAvLyB9CiAgICAgIC8qKgogICAgICAgKiBEb25lLCBjaGFuZ2UgdGhlIGV2ZW50cy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtBcnJheTxFdmVudD59IGV2ZW50cwogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKi8KICAgICAgY29uc3VtZShldmVudHMpIHsKICAgICAgICB0aGlzLm1hcC5zb3J0KGZ1bmN0aW9uKGE1LCBiNSkgewogICAgICAgICAgcmV0dXJuIGE1WzBdIC0gYjVbMF07CiAgICAgICAgfSk7CiAgICAgICAgaWYgKHRoaXMubWFwLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsZXQgaW5kZXgyID0gdGhpcy5tYXAubGVuZ3RoOwogICAgICAgIGNvbnN0IHZlY3MgPSBbXTsKICAgICAgICB3aGlsZSAoaW5kZXgyID4gMCkgewogICAgICAgICAgaW5kZXgyIC09IDE7CiAgICAgICAgICB2ZWNzLnB1c2goZXZlbnRzLnNsaWNlKHRoaXMubWFwW2luZGV4Ml1bMF0gKyB0aGlzLm1hcFtpbmRleDJdWzFdKSwgdGhpcy5tYXBbaW5kZXgyXVsyXSk7CiAgICAgICAgICBldmVudHMubGVuZ3RoID0gdGhpcy5tYXBbaW5kZXgyXVswXTsKICAgICAgICB9CiAgICAgICAgdmVjcy5wdXNoKGV2ZW50cy5zbGljZSgpKTsKICAgICAgICBldmVudHMubGVuZ3RoID0gMDsKICAgICAgICBsZXQgc2xpY2UgPSB2ZWNzLnBvcCgpOwogICAgICAgIHdoaWxlIChzbGljZSkgewogICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50NCBvZiBzbGljZSkgewogICAgICAgICAgICBldmVudHMucHVzaChlbGVtZW50NCk7CiAgICAgICAgICB9CiAgICAgICAgICBzbGljZSA9IHZlY3MucG9wKCk7CiAgICAgICAgfQogICAgICAgIHRoaXMubWFwLmxlbmd0aCA9IDA7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZUAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGUvbGliL2luZmVyLmpzCmZ1bmN0aW9uIGdmbVRhYmxlQWxpZ24oZXZlbnRzLCBpbmRleDIpIHsKICBsZXQgaW5EZWxpbWl0ZXJSb3cgPSBmYWxzZTsKICBjb25zdCBhbGlnbiA9IFtdOwogIHdoaWxlIChpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICBjb25zdCBldmVudCA9IGV2ZW50c1tpbmRleDJdOwogICAgaWYgKGluRGVsaW1pdGVyUm93KSB7CiAgICAgIGlmIChldmVudFswXSA9PT0gImVudGVyIikgewogICAgICAgIGlmIChldmVudFsxXS50eXBlID09PSAidGFibGVDb250ZW50IikgewogICAgICAgICAgYWxpZ24ucHVzaChldmVudHNbaW5kZXgyICsgMV1bMV0udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyTWFya2VyIiA/ICJsZWZ0IiA6ICJub25lIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGV2ZW50WzFdLnR5cGUgPT09ICJ0YWJsZUNvbnRlbnQiKSB7CiAgICAgICAgaWYgKGV2ZW50c1tpbmRleDIgLSAxXVsxXS50eXBlID09PSAidGFibGVEZWxpbWl0ZXJNYXJrZXIiKSB7CiAgICAgICAgICBjb25zdCBhbGlnbkluZGV4ID0gYWxpZ24ubGVuZ3RoIC0gMTsKICAgICAgICAgIGFsaWduW2FsaWduSW5kZXhdID0gYWxpZ25bYWxpZ25JbmRleF0gPT09ICJsZWZ0IiA/ICJjZW50ZXIiIDogInJpZ2h0IjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZXZlbnRbMV0udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyUm93IikgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiICYmIGV2ZW50WzFdLnR5cGUgPT09ICJ0YWJsZURlbGltaXRlclJvdyIpIHsKICAgICAgaW5EZWxpbWl0ZXJSb3cgPSB0cnVlOwogICAgfQogICAgaW5kZXgyICs9IDE7CiAgfQogIHJldHVybiBhbGlnbjsKfQp2YXIgaW5pdF9pbmZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZS9saWIvaW5mZXIuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9zeW50YXguanMKZnVuY3Rpb24gZ2ZtVGFibGUoKSB7CiAgcmV0dXJuIHsKICAgIGZsb3c6IHsKICAgICAgbnVsbDogewogICAgICAgIG5hbWU6ICJ0YWJsZSIsCiAgICAgICAgdG9rZW5pemU6IHRva2VuaXplVGFibGUsCiAgICAgICAgcmVzb2x2ZUFsbDogcmVzb2x2ZVRhYmxlCiAgICAgIH0KICAgIH0KICB9Owp9CmZ1bmN0aW9uIHRva2VuaXplVGFibGUoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IHNpemUgPSAwOwogIGxldCBzaXplQiA9IDA7CiAgbGV0IHNlZW47CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBsZXQgaW5kZXgyID0gc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDE7CiAgICB3aGlsZSAoaW5kZXgyID4gLTEpIHsKICAgICAgY29uc3QgdHlwZTUgPSBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXS50eXBlOwogICAgICBpZiAodHlwZTUgPT09ICJsaW5lRW5kaW5nIiB8fCAvLyBOb3RlOiBtYXJrZG93bi1ycyB1c2VzIGB3aGl0ZXNwYWNlYCBpbnN0ZWFkIG9mIGBsaW5lUHJlZml4YAogICAgICB0eXBlNSA9PT0gImxpbmVQcmVmaXgiKSBpbmRleDItLTsKICAgICAgZWxzZSBicmVhazsKICAgIH0KICAgIGNvbnN0IHRhaWwgPSBpbmRleDIgPiAtMSA/IHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLnR5cGUgOiBudWxsOwogICAgY29uc3QgbmV4dDIgPSB0YWlsID09PSAidGFibGVIZWFkIiB8fCB0YWlsID09PSAidGFibGVSb3ciID8gYm9keVJvd1N0YXJ0IDogaGVhZFJvd0JlZm9yZTsKICAgIGlmIChuZXh0MiA9PT0gYm9keVJvd1N0YXJ0ICYmIHNlbGYyLnBhcnNlci5sYXp5W3NlbGYyLm5vdygpLmxpbmVdKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5leHQyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZFJvd0JlZm9yZShjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigidGFibGVIZWFkIik7CiAgICBlZmZlY3RzLmVudGVyKCJ0YWJsZVJvdyIpOwogICAgcmV0dXJuIGhlYWRSb3dTdGFydChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGhlYWRSb3dTdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAxMjQpIHsKICAgICAgcmV0dXJuIGhlYWRSb3dCcmVhayhjb2RlNCk7CiAgICB9CiAgICBzZWVuID0gdHJ1ZTsKICAgIHNpemVCICs9IDE7CiAgICByZXR1cm4gaGVhZFJvd0JyZWFrKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZFJvd0JyZWFrKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBpZiAoc2l6ZUIgPiAxKSB7CiAgICAgICAgc2l6ZUIgPSAwOwogICAgICAgIHNlbGYyLmludGVycnVwdCA9IHRydWU7CiAgICAgICAgZWZmZWN0cy5leGl0KCJ0YWJsZVJvdyIpOwogICAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyU3RhcnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBoZWFkUm93QnJlYWssICJ3aGl0ZXNwYWNlIikoY29kZTQpOwogICAgfQogICAgc2l6ZUIgKz0gMTsKICAgIGlmIChzZWVuKSB7CiAgICAgIHNlZW4gPSBmYWxzZTsKICAgICAgc2l6ZSArPSAxOwogICAgfQogICAgaWYgKGNvZGU0ID09PSAxMjQpIHsKICAgICAgZWZmZWN0cy5lbnRlcigidGFibGVDZWxsRGl2aWRlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlQ2VsbERpdmlkZXIiKTsKICAgICAgc2VlbiA9IHRydWU7CiAgICAgIHJldHVybiBoZWFkUm93QnJlYWs7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJkYXRhIik7CiAgICByZXR1cm4gaGVhZFJvd0RhdGEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkUm93RGF0YShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSAxMjQgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJkYXRhIik7CiAgICAgIHJldHVybiBoZWFkUm93QnJlYWsoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb2RlNCA9PT0gOTIgPyBoZWFkUm93RXNjYXBlIDogaGVhZFJvd0RhdGE7CiAgfQogIGZ1bmN0aW9uIGhlYWRSb3dFc2NhcGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTIgfHwgY29kZTQgPT09IDEyNCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gaGVhZFJvd0RhdGE7CiAgICB9CiAgICByZXR1cm4gaGVhZFJvd0RhdGEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyU3RhcnQoY29kZTQpIHsKICAgIHNlbGYyLmludGVycnVwdCA9IGZhbHNlOwogICAgaWYgKHNlbGYyLnBhcnNlci5sYXp5W3NlbGYyLm5vdygpLmxpbmVdKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigidGFibGVEZWxpbWl0ZXJSb3ciKTsKICAgIHNlZW4gPSBmYWxzZTsKICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGhlYWREZWxpbWl0ZXJCZWZvcmUsICJsaW5lUHJlZml4Iiwgc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSA/IHZvaWQgMCA6IDQpKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBoZWFkRGVsaW1pdGVyQmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZERlbGltaXRlckJlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSB8fCBjb2RlNCA9PT0gNTgpIHsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJWYWx1ZUJlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDEyNCkgewogICAgICBzZWVuID0gdHJ1ZTsKICAgICAgZWZmZWN0cy5lbnRlcigidGFibGVDZWxsRGl2aWRlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlQ2VsbERpdmlkZXIiKTsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJDZWxsQmVmb3JlOwogICAgfQogICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJOb2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyQ2VsbEJlZm9yZShjb2RlNCkgewogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgaGVhZERlbGltaXRlclZhbHVlQmVmb3JlLCAid2hpdGVzcGFjZSIpKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBoZWFkRGVsaW1pdGVyVmFsdWVCZWZvcmUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyVmFsdWVCZWZvcmUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNTgpIHsKICAgICAgc2l6ZUIgKz0gMTsKICAgICAgc2VlbiA9IHRydWU7CiAgICAgIGVmZmVjdHMuZW50ZXIoInRhYmxlRGVsaW1pdGVyTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFibGVEZWxpbWl0ZXJNYXJrZXIiKTsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJMZWZ0QWxpZ25tZW50QWZ0ZXI7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ1KSB7CiAgICAgIHNpemVCICs9IDE7CiAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyTGVmdEFsaWdubWVudEFmdGVyKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyQ2VsbEFmdGVyKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBoZWFkRGVsaW1pdGVyTm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZERlbGltaXRlckxlZnRBbGlnbm1lbnRBZnRlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmVudGVyKCJ0YWJsZURlbGltaXRlckZpbGxlciIpOwogICAgICByZXR1cm4gaGVhZERlbGltaXRlckZpbGxlcihjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gaGVhZERlbGltaXRlck5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGhlYWREZWxpbWl0ZXJGaWxsZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDUpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJGaWxsZXI7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDU4KSB7CiAgICAgIHNlZW4gPSB0cnVlOwogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlRGVsaW1pdGVyRmlsbGVyIik7CiAgICAgIGVmZmVjdHMuZW50ZXIoInRhYmxlRGVsaW1pdGVyTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFibGVEZWxpbWl0ZXJNYXJrZXIiKTsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJSaWdodEFsaWdubWVudEFmdGVyOwogICAgfQogICAgZWZmZWN0cy5leGl0KCJ0YWJsZURlbGltaXRlckZpbGxlciIpOwogICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJSaWdodEFsaWdubWVudEFmdGVyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZERlbGltaXRlclJpZ2h0QWxpZ25tZW50QWZ0ZXIoY29kZTQpIHsKICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGhlYWREZWxpbWl0ZXJDZWxsQWZ0ZXIsICJ3aGl0ZXNwYWNlIikoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJDZWxsQWZ0ZXIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyQ2VsbEFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDEyNCkgewogICAgICByZXR1cm4gaGVhZERlbGltaXRlckJlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBpZiAoIXNlZW4gfHwgc2l6ZSAhPT0gc2l6ZUIpIHsKICAgICAgICByZXR1cm4gaGVhZERlbGltaXRlck5vayhjb2RlNCk7CiAgICAgIH0KICAgICAgZWZmZWN0cy5leGl0KCJ0YWJsZURlbGltaXRlclJvdyIpOwogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlSGVhZCIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBoZWFkRGVsaW1pdGVyTm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZERlbGltaXRlck5vayhjb2RlNCkgewogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJvZHlSb3dTdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigidGFibGVSb3ciKTsKICAgIHJldHVybiBib2R5Um93QnJlYWsoY29kZTQpOwogIH0KICBmdW5jdGlvbiBib2R5Um93QnJlYWsoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMTI0KSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoInRhYmxlQ2VsbERpdmlkZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJ0YWJsZUNlbGxEaXZpZGVyIik7CiAgICAgIHJldHVybiBib2R5Um93QnJlYWs7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlUm93Iik7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYm9keVJvd0JyZWFrLCAid2hpdGVzcGFjZSIpKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImRhdGEiKTsKICAgIHJldHVybiBib2R5Um93RGF0YShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJvZHlSb3dEYXRhKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDEyNCB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImRhdGEiKTsKICAgICAgcmV0dXJuIGJvZHlSb3dCcmVhayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvZGU0ID09PSA5MiA/IGJvZHlSb3dFc2NhcGUgOiBib2R5Um93RGF0YTsKICB9CiAgZnVuY3Rpb24gYm9keVJvd0VzY2FwZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MiB8fCBjb2RlNCA9PT0gMTI0KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBib2R5Um93RGF0YTsKICAgIH0KICAgIHJldHVybiBib2R5Um93RGF0YShjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHJlc29sdmVUYWJsZShldmVudHMsIGNvbnRleHQyKSB7CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBpbkZpcnN0Q2VsbEF3YWl0aW5nUGlwZSA9IHRydWU7CiAgbGV0IHJvd0tpbmQgPSAwOwogIGxldCBsYXN0Q2VsbCA9IFswLCAwLCAwLCAwXTsKICBsZXQgY2VsbDIgPSBbMCwgMCwgMCwgMF07CiAgbGV0IGFmdGVySGVhZEF3YWl0aW5nRmlyc3RCb2R5Um93ID0gZmFsc2U7CiAgbGV0IGxhc3RUYWJsZUVuZCA9IDA7CiAgbGV0IGN1cnJlbnRUYWJsZTsKICBsZXQgY3VycmVudEJvZHk7CiAgbGV0IGN1cnJlbnRDZWxsOwogIGNvbnN0IG1hcDcgPSBuZXcgRWRpdE1hcCgpOwogIHdoaWxlICgrK2luZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2luZGV4Ml07CiAgICBjb25zdCB0b2tlbiA9IGV2ZW50WzFdOwogICAgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiKSB7CiAgICAgIGlmICh0b2tlbi50eXBlID09PSAidGFibGVIZWFkIikgewogICAgICAgIGFmdGVySGVhZEF3YWl0aW5nRmlyc3RCb2R5Um93ID0gZmFsc2U7CiAgICAgICAgaWYgKGxhc3RUYWJsZUVuZCAhPT0gMCkgewogICAgICAgICAgZmx1c2hUYWJsZUVuZChtYXA3LCBjb250ZXh0MiwgbGFzdFRhYmxlRW5kLCBjdXJyZW50VGFibGUsIGN1cnJlbnRCb2R5KTsKICAgICAgICAgIGN1cnJlbnRCb2R5ID0gdm9pZCAwOwogICAgICAgICAgbGFzdFRhYmxlRW5kID0gMDsKICAgICAgICB9CiAgICAgICAgY3VycmVudFRhYmxlID0gewogICAgICAgICAgdHlwZTogInRhYmxlIiwKICAgICAgICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCB0b2tlbi5zdGFydCksCiAgICAgICAgICAvLyBOb3RlOiBjb3JyZWN0IGVuZCBpcyBzZXQgbGF0ZXIuCiAgICAgICAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIHRva2VuLmVuZCkKICAgICAgICB9OwogICAgICAgIG1hcDcuYWRkKGluZGV4MiwgMCwgW1siZW50ZXIiLCBjdXJyZW50VGFibGUsIGNvbnRleHQyXV0pOwogICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09ICJ0YWJsZVJvdyIgfHwgdG9rZW4udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyUm93IikgewogICAgICAgIGluRmlyc3RDZWxsQXdhaXRpbmdQaXBlID0gdHJ1ZTsKICAgICAgICBjdXJyZW50Q2VsbCA9IHZvaWQgMDsKICAgICAgICBsYXN0Q2VsbCA9IFswLCAwLCAwLCAwXTsKICAgICAgICBjZWxsMiA9IFswLCBpbmRleDIgKyAxLCAwLCAwXTsKICAgICAgICBpZiAoYWZ0ZXJIZWFkQXdhaXRpbmdGaXJzdEJvZHlSb3cpIHsKICAgICAgICAgIGFmdGVySGVhZEF3YWl0aW5nRmlyc3RCb2R5Um93ID0gZmFsc2U7CiAgICAgICAgICBjdXJyZW50Qm9keSA9IHsKICAgICAgICAgICAgdHlwZTogInRhYmxlQm9keSIsCiAgICAgICAgICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCB0b2tlbi5zdGFydCksCiAgICAgICAgICAgIC8vIE5vdGU6IGNvcnJlY3QgZW5kIGlzIHNldCBsYXRlci4KICAgICAgICAgICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCB0b2tlbi5lbmQpCiAgICAgICAgICB9OwogICAgICAgICAgbWFwNy5hZGQoaW5kZXgyLCAwLCBbWyJlbnRlciIsIGN1cnJlbnRCb2R5LCBjb250ZXh0Ml1dKTsKICAgICAgICB9CiAgICAgICAgcm93S2luZCA9IHRva2VuLnR5cGUgPT09ICJ0YWJsZURlbGltaXRlclJvdyIgPyAyIDogY3VycmVudEJvZHkgPyAzIDogMTsKICAgICAgfSBlbHNlIGlmIChyb3dLaW5kICYmICh0b2tlbi50eXBlID09PSAiZGF0YSIgfHwgdG9rZW4udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyTWFya2VyIiB8fCB0b2tlbi50eXBlID09PSAidGFibGVEZWxpbWl0ZXJGaWxsZXIiKSkgewogICAgICAgIGluRmlyc3RDZWxsQXdhaXRpbmdQaXBlID0gZmFsc2U7CiAgICAgICAgaWYgKGNlbGwyWzJdID09PSAwKSB7CiAgICAgICAgICBpZiAobGFzdENlbGxbMV0gIT09IDApIHsKICAgICAgICAgICAgY2VsbDJbMF0gPSBjZWxsMlsxXTsKICAgICAgICAgICAgY3VycmVudENlbGwgPSBmbHVzaENlbGwobWFwNywgY29udGV4dDIsIGxhc3RDZWxsLCByb3dLaW5kLCB2b2lkIDAsIGN1cnJlbnRDZWxsKTsKICAgICAgICAgICAgbGFzdENlbGwgPSBbMCwgMCwgMCwgMF07CiAgICAgICAgICB9CiAgICAgICAgICBjZWxsMlsyXSA9IGluZGV4MjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gInRhYmxlQ2VsbERpdmlkZXIiKSB7CiAgICAgICAgaWYgKGluRmlyc3RDZWxsQXdhaXRpbmdQaXBlKSB7CiAgICAgICAgICBpbkZpcnN0Q2VsbEF3YWl0aW5nUGlwZSA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAobGFzdENlbGxbMV0gIT09IDApIHsKICAgICAgICAgICAgY2VsbDJbMF0gPSBjZWxsMlsxXTsKICAgICAgICAgICAgY3VycmVudENlbGwgPSBmbHVzaENlbGwobWFwNywgY29udGV4dDIsIGxhc3RDZWxsLCByb3dLaW5kLCB2b2lkIDAsIGN1cnJlbnRDZWxsKTsKICAgICAgICAgIH0KICAgICAgICAgIGxhc3RDZWxsID0gY2VsbDI7CiAgICAgICAgICBjZWxsMiA9IFtsYXN0Q2VsbFsxXSwgaW5kZXgyLCAwLCAwXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gInRhYmxlSGVhZCIpIHsKICAgICAgYWZ0ZXJIZWFkQXdhaXRpbmdGaXJzdEJvZHlSb3cgPSB0cnVlOwogICAgICBsYXN0VGFibGVFbmQgPSBpbmRleDI7CiAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09ICJ0YWJsZVJvdyIgfHwgdG9rZW4udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyUm93IikgewogICAgICBsYXN0VGFibGVFbmQgPSBpbmRleDI7CiAgICAgIGlmIChsYXN0Q2VsbFsxXSAhPT0gMCkgewogICAgICAgIGNlbGwyWzBdID0gY2VsbDJbMV07CiAgICAgICAgY3VycmVudENlbGwgPSBmbHVzaENlbGwobWFwNywgY29udGV4dDIsIGxhc3RDZWxsLCByb3dLaW5kLCBpbmRleDIsIGN1cnJlbnRDZWxsKTsKICAgICAgfSBlbHNlIGlmIChjZWxsMlsxXSAhPT0gMCkgewogICAgICAgIGN1cnJlbnRDZWxsID0gZmx1c2hDZWxsKG1hcDcsIGNvbnRleHQyLCBjZWxsMiwgcm93S2luZCwgaW5kZXgyLCBjdXJyZW50Q2VsbCk7CiAgICAgIH0KICAgICAgcm93S2luZCA9IDA7CiAgICB9IGVsc2UgaWYgKHJvd0tpbmQgJiYgKHRva2VuLnR5cGUgPT09ICJkYXRhIiB8fCB0b2tlbi50eXBlID09PSAidGFibGVEZWxpbWl0ZXJNYXJrZXIiIHx8IHRva2VuLnR5cGUgPT09ICJ0YWJsZURlbGltaXRlckZpbGxlciIpKSB7CiAgICAgIGNlbGwyWzNdID0gaW5kZXgyOwogICAgfQogIH0KICBpZiAobGFzdFRhYmxlRW5kICE9PSAwKSB7CiAgICBmbHVzaFRhYmxlRW5kKG1hcDcsIGNvbnRleHQyLCBsYXN0VGFibGVFbmQsIGN1cnJlbnRUYWJsZSwgY3VycmVudEJvZHkpOwogIH0KICBtYXA3LmNvbnN1bWUoY29udGV4dDIuZXZlbnRzKTsKICBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBjb250ZXh0Mi5ldmVudHMubGVuZ3RoKSB7CiAgICBjb25zdCBldmVudCA9IGNvbnRleHQyLmV2ZW50c1tpbmRleDJdOwogICAgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiICYmIGV2ZW50WzFdLnR5cGUgPT09ICJ0YWJsZSIpIHsKICAgICAgZXZlbnRbMV0uX2FsaWduID0gZ2ZtVGFibGVBbGlnbihjb250ZXh0Mi5ldmVudHMsIGluZGV4Mik7CiAgICB9CiAgfQogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gZmx1c2hDZWxsKG1hcDcsIGNvbnRleHQyLCByYW5nZTIsIHJvd0tpbmQsIHJvd0VuZCwgcHJldmlvdXNDZWxsKSB7CiAgY29uc3QgZ3JvdXBOYW1lID0gcm93S2luZCA9PT0gMSA/ICJ0YWJsZUhlYWRlciIgOiByb3dLaW5kID09PSAyID8gInRhYmxlRGVsaW1pdGVyIiA6ICJ0YWJsZURhdGEiOwogIGNvbnN0IHZhbHVlTmFtZSA9ICJ0YWJsZUNvbnRlbnQiOwogIGlmIChyYW5nZTJbMF0gIT09IDApIHsKICAgIHByZXZpb3VzQ2VsbC5lbmQgPSBPYmplY3QuYXNzaWduKHt9LCBnZXRQb2ludChjb250ZXh0Mi5ldmVudHMsIHJhbmdlMlswXSkpOwogICAgbWFwNy5hZGQocmFuZ2UyWzBdLCAwLCBbWyJleGl0IiwgcHJldmlvdXNDZWxsLCBjb250ZXh0Ml1dKTsKICB9CiAgY29uc3Qgbm93MiA9IGdldFBvaW50KGNvbnRleHQyLmV2ZW50cywgcmFuZ2UyWzFdKTsKICBwcmV2aW91c0NlbGwgPSB7CiAgICB0eXBlOiBncm91cE5hbWUsCiAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgbm93MiksCiAgICAvLyBOb3RlOiBjb3JyZWN0IGVuZCBpcyBzZXQgbGF0ZXIuCiAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIG5vdzIpCiAgfTsKICBtYXA3LmFkZChyYW5nZTJbMV0sIDAsIFtbImVudGVyIiwgcHJldmlvdXNDZWxsLCBjb250ZXh0Ml1dKTsKICBpZiAocmFuZ2UyWzJdICE9PSAwKSB7CiAgICBjb25zdCByZWxhdGVkU3RhcnQgPSBnZXRQb2ludChjb250ZXh0Mi5ldmVudHMsIHJhbmdlMlsyXSk7CiAgICBjb25zdCByZWxhdGVkRW5kID0gZ2V0UG9pbnQoY29udGV4dDIuZXZlbnRzLCByYW5nZTJbM10pOwogICAgY29uc3QgdmFsdWVUb2tlbiA9IHsKICAgICAgdHlwZTogdmFsdWVOYW1lLAogICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgcmVsYXRlZFN0YXJ0KSwKICAgICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCByZWxhdGVkRW5kKQogICAgfTsKICAgIG1hcDcuYWRkKHJhbmdlMlsyXSwgMCwgW1siZW50ZXIiLCB2YWx1ZVRva2VuLCBjb250ZXh0Ml1dKTsKICAgIGlmIChyb3dLaW5kICE9PSAyKSB7CiAgICAgIGNvbnN0IHN0YXJ0ID0gY29udGV4dDIuZXZlbnRzW3JhbmdlMlsyXV07CiAgICAgIGNvbnN0IGVuZDMgPSBjb250ZXh0Mi5ldmVudHNbcmFuZ2UyWzNdXTsKICAgICAgc3RhcnRbMV0uZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgZW5kM1sxXS5lbmQpOwogICAgICBzdGFydFsxXS50eXBlID0gImNodW5rVGV4dCI7CiAgICAgIHN0YXJ0WzFdLmNvbnRlbnRUeXBlID0gInRleHQiOwogICAgICBpZiAocmFuZ2UyWzNdID4gcmFuZ2UyWzJdICsgMSkgewogICAgICAgIGNvbnN0IGE1ID0gcmFuZ2UyWzJdICsgMTsKICAgICAgICBjb25zdCBiNSA9IHJhbmdlMlszXSAtIHJhbmdlMlsyXSAtIDE7CiAgICAgICAgbWFwNy5hZGQoYTUsIGI1LCBbXSk7CiAgICAgIH0KICAgIH0KICAgIG1hcDcuYWRkKHJhbmdlMlszXSArIDEsIDAsIFtbImV4aXQiLCB2YWx1ZVRva2VuLCBjb250ZXh0Ml1dKTsKICB9CiAgaWYgKHJvd0VuZCAhPT0gdm9pZCAwKSB7CiAgICBwcmV2aW91c0NlbGwuZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgZ2V0UG9pbnQoY29udGV4dDIuZXZlbnRzLCByb3dFbmQpKTsKICAgIG1hcDcuYWRkKHJvd0VuZCwgMCwgW1siZXhpdCIsIHByZXZpb3VzQ2VsbCwgY29udGV4dDJdXSk7CiAgICBwcmV2aW91c0NlbGwgPSB2b2lkIDA7CiAgfQogIHJldHVybiBwcmV2aW91c0NlbGw7Cn0KZnVuY3Rpb24gZmx1c2hUYWJsZUVuZChtYXA3LCBjb250ZXh0MiwgaW5kZXgyLCB0YWJsZTIsIHRhYmxlQm9keSkgewogIGNvbnN0IGV4aXRzID0gW107CiAgY29uc3QgcmVsYXRlZCA9IGdldFBvaW50KGNvbnRleHQyLmV2ZW50cywgaW5kZXgyKTsKICBpZiAodGFibGVCb2R5KSB7CiAgICB0YWJsZUJvZHkuZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgcmVsYXRlZCk7CiAgICBleGl0cy5wdXNoKFsiZXhpdCIsIHRhYmxlQm9keSwgY29udGV4dDJdKTsKICB9CiAgdGFibGUyLmVuZCA9IE9iamVjdC5hc3NpZ24oe30sIHJlbGF0ZWQpOwogIGV4aXRzLnB1c2goWyJleGl0IiwgdGFibGUyLCBjb250ZXh0Ml0pOwogIG1hcDcuYWRkKGluZGV4MiArIDEsIDAsIGV4aXRzKTsKfQpmdW5jdGlvbiBnZXRQb2ludChldmVudHMsIGluZGV4MikgewogIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2luZGV4Ml07CiAgY29uc3Qgc2lkZSA9IGV2ZW50WzBdID09PSAiZW50ZXIiID8gInN0YXJ0IiA6ICJlbmQiOwogIHJldHVybiBldmVudFsxXVtzaWRlXTsKfQp2YXIgaW5pdF9zeW50YXg0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9zeW50YXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfZWRpdF9tYXAoKTsKICAgIGluaXRfaW5mZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZS9pbmRleC5qcwp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV90YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2h0bWw1KCk7CiAgICBpbml0X3N5bnRheDQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhZ2ZpbHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBnZm1UYWdmaWx0ZXJIdG1sKCkgewogIHJldHVybiB7CiAgICBleGl0OiB7CiAgICAgIGh0bWxGbG93RGF0YSh0b2tlbikgewogICAgICAgIGV4aXRIdG1sRGF0YS5jYWxsKHRoaXMsIHRva2VuLCByZUZsb3cpOwogICAgICB9LAogICAgICBodG1sVGV4dERhdGEodG9rZW4pIHsKICAgICAgICBleGl0SHRtbERhdGEuY2FsbCh0aGlzLCB0b2tlbiwgcmVUZXh0KTsKICAgICAgfQogICAgfQogIH07Cn0KZnVuY3Rpb24gZXhpdEh0bWxEYXRhKHRva2VuLCBmaWx0ZXIyKSB7CiAgbGV0IHZhbHVlMiA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dEYW5nZXJvdXNIdG1sKSB7CiAgICB2YWx1ZTIgPSB2YWx1ZTIucmVwbGFjZShmaWx0ZXIyLCAiJmx0OyQxJDIiKTsKICB9CiAgdGhpcy5yYXcodGhpcy5lbmNvZGUodmFsdWUyKSk7Cn0KdmFyIHJlRmxvdywgcmVUZXh0Owp2YXIgaW5pdF9saWIxOSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhZ2ZpbHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyL2xpYi9pbmRleC5qcyIoKSB7CiAgICByZUZsb3cgPSAvPChcLz8pKGlmcmFtZXxub2VtYmVkfG5vZnJhbWVzfHBsYWludGV4dHxzY3JpcHR8c3R5bGV8dGl0bGV8dGV4dGFyZWF8eG1wKSg/PVtcdFxuXGZcciAvPl0pL2dpOwogICAgcmVUZXh0ID0gbmV3IFJlZ0V4cCgiXiIgKyByZUZsb3cuc291cmNlLCAiaSIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWdmaWx0ZXIvaW5kZXguanMKdmFyIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fdGFnZmlsdGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWdmaWx0ZXIvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxOSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW1AMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtL2xpYi9odG1sLmpzCmZ1bmN0aW9uIGdmbVRhc2tMaXN0SXRlbUh0bWwoKSB7CiAgcmV0dXJuIHsKICAgIGVudGVyOiB7CiAgICAgIHRhc2tMaXN0Q2hlY2soKSB7CiAgICAgICAgdGhpcy50YWcoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgZGlzYWJsZWQ9IiIgJyk7CiAgICAgIH0KICAgIH0sCiAgICBleGl0OiB7CiAgICAgIHRhc2tMaXN0Q2hlY2soKSB7CiAgICAgICAgdGhpcy50YWcoIi8+Iik7CiAgICAgIH0sCiAgICAgIHRhc2tMaXN0Q2hlY2tWYWx1ZUNoZWNrZWQoKSB7CiAgICAgICAgdGhpcy50YWcoJ2NoZWNrZWQ9IiIgJyk7CiAgICAgIH0KICAgIH0KICB9Owp9CnZhciBpbml0X2h0bWw2ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW1AMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtL2xpYi9odG1sLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbS9saWIvc3ludGF4LmpzCmZ1bmN0aW9uIGdmbVRhc2tMaXN0SXRlbSgpIHsKICByZXR1cm4gewogICAgdGV4dDogewogICAgICBbOTFdOiB0YXNrbGlzdENoZWNrCiAgICB9CiAgfTsKfQpmdW5jdGlvbiB0b2tlbml6ZVRhc2tsaXN0Q2hlY2soZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIG9wZW47CiAgZnVuY3Rpb24gb3Blbihjb2RlNCkgewogICAgaWYgKAogICAgICAvLyBFeGl0IGlmIHRoZXJl4oCZcyBzdHVmZiBiZWZvcmUuCiAgICAgIHNlbGYyLnByZXZpb3VzICE9PSBudWxsIHx8IC8vIEV4aXQgaWYgbm90IGluIHRoZSBmaXJzdCBjb250ZW50IHRoYXQgaXMgdGhlIGZpcnN0IGNoaWxkIG9mIGEgbGlzdAogICAgICAvLyBpdGVtLgogICAgICAhc2VsZjIuX2dmbVRhc2tsaXN0Rmlyc3RDb250ZW50T2ZMaXN0SXRlbQogICAgKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigidGFza0xpc3RDaGVjayIpOwogICAgZWZmZWN0cy5lbnRlcigidGFza0xpc3RDaGVja01hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgidGFza0xpc3RDaGVja01hcmtlciIpOwogICAgcmV0dXJuIGluc2lkZTsKICB9CiAgZnVuY3Rpb24gaW5zaWRlKGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigidGFza0xpc3RDaGVja1ZhbHVlVW5jaGVja2VkIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFza0xpc3RDaGVja1ZhbHVlVW5jaGVja2VkIik7CiAgICAgIHJldHVybiBjbG9zZTc7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDg4IHx8IGNvZGU0ID09PSAxMjApIHsKICAgICAgZWZmZWN0cy5lbnRlcigidGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZCIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInRhc2tMaXN0Q2hlY2tWYWx1ZUNoZWNrZWQiKTsKICAgICAgcmV0dXJuIGNsb3NlNzsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjbG9zZTcoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5lbnRlcigidGFza0xpc3RDaGVja01hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInRhc2tMaXN0Q2hlY2tNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5leGl0KCJ0YXNrTGlzdENoZWNrIik7CiAgICAgIHJldHVybiBhZnRlcjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGVmZmVjdHMuY2hlY2soewogICAgICAgIHRva2VuaXplOiBzcGFjZVRoZW5Ob25TcGFjZQogICAgICB9LCBvazMsIG5vaykoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHNwYWNlVGhlbk5vblNwYWNlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlciwgIndoaXRlc3BhY2UiKTsKICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSBudWxsID8gbm9rKGNvZGU0KSA6IG9rMyhjb2RlNCk7CiAgfQp9CnZhciB0YXNrbGlzdENoZWNrOwp2YXIgaW5pdF9zeW50YXg1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW1AMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtL2xpYi9zeW50YXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIHRhc2tsaXN0Q2hlY2sgPSB7CiAgICAgIG5hbWU6ICJ0YXNrbGlzdENoZWNrIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplVGFza2xpc3RDaGVjawogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbS9pbmRleC5qcwp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV90YXNrX2xpc3RfaXRlbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2h0bWw2KCk7CiAgICBpbml0X3N5bnRheDUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtQDMuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS9pbmRleC5qcwpmdW5jdGlvbiBnZm0ob3B0aW9ucykgewogIHJldHVybiBjb21iaW5lRXh0ZW5zaW9ucyhbCiAgICBnZm1BdXRvbGlua0xpdGVyYWwoKSwKICAgIGdmbUZvb3Rub3RlKCksCiAgICBnZm1TdHJpa2V0aHJvdWdoKG9wdGlvbnMpLAogICAgZ2ZtVGFibGUoKSwKICAgIGdmbVRhc2tMaXN0SXRlbSgpCiAgXSk7Cn0KZnVuY3Rpb24gZ2ZtSHRtbChvcHRpb25zKSB7CiAgcmV0dXJuIGNvbWJpbmVIdG1sRXh0ZW5zaW9ucyhbCiAgICBnZm1BdXRvbGlua0xpdGVyYWxIdG1sKCksCiAgICBnZm1Gb290bm90ZUh0bWwob3B0aW9ucyksCiAgICBnZm1TdHJpa2V0aHJvdWdoSHRtbCgpLAogICAgZ2ZtVGFibGVIdG1sKCksCiAgICBnZm1UYWdmaWx0ZXJIdG1sKCksCiAgICBnZm1UYXNrTGlzdEl0ZW1IdG1sKCkKICBdKTsKfQp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtQDMuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NvbWJpbmVfZXh0ZW5zaW9ucygpOwogICAgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV9hdXRvbGlua19saXRlcmFsKCk7CiAgICBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX2Zvb3Rub3RlKCk7CiAgICBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX3N0cmlrZXRocm91Z2goKTsKICAgIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fdGFibGUoKTsKICAgIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fdGFnZmlsdGVyKCk7CiAgICBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX3Rhc2tfbGlzdF9pdGVtKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstZ2ZtQDQuMC4xL25vZGVfbW9kdWxlcy9yZW1hcmstZ2ZtL2xpYi9pbmRleC5qcwpmdW5jdGlvbiByZW1hcmtHZm0ob3B0aW9ucykgewogIGNvbnN0IHNlbGYyID0gKAogICAgLyoqIEB0eXBlIHtQcm9jZXNzb3I8Um9vdD59ICovCiAgICB0aGlzCiAgKTsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwgZW1wdHlPcHRpb25zMzsKICBjb25zdCBkYXRhID0gc2VsZjIuZGF0YSgpOwogIGNvbnN0IG1pY3JvbWFya0V4dGVuc2lvbnMgPSBkYXRhLm1pY3JvbWFya0V4dGVuc2lvbnMgfHwgKGRhdGEubWljcm9tYXJrRXh0ZW5zaW9ucyA9IFtdKTsKICBjb25zdCBmcm9tTWFya2Rvd25FeHRlbnNpb25zID0gZGF0YS5mcm9tTWFya2Rvd25FeHRlbnNpb25zIHx8IChkYXRhLmZyb21NYXJrZG93bkV4dGVuc2lvbnMgPSBbXSk7CiAgY29uc3QgdG9NYXJrZG93bkV4dGVuc2lvbnMgPSBkYXRhLnRvTWFya2Rvd25FeHRlbnNpb25zIHx8IChkYXRhLnRvTWFya2Rvd25FeHRlbnNpb25zID0gW10pOwogIG1pY3JvbWFya0V4dGVuc2lvbnMucHVzaChnZm0oc2V0dGluZ3MpKTsKICBmcm9tTWFya2Rvd25FeHRlbnNpb25zLnB1c2goZ2ZtRnJvbU1hcmtkb3duKCkpOwogIHRvTWFya2Rvd25FeHRlbnNpb25zLnB1c2goZ2ZtVG9NYXJrZG93bihzZXR0aW5ncykpOwp9CnZhciBlbXB0eU9wdGlvbnMzOwp2YXIgaW5pdF9saWIyMCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1nZm1ANC4wLjEvbm9kZV9tb2R1bGVzL3JlbWFyay1nZm0vbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWRhc3RfdXRpbF9nZm0oKTsKICAgIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm0oKTsKICAgIGVtcHR5T3B0aW9uczMgPSB7fTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1nZm1ANC4wLjEvbm9kZV9tb2R1bGVzL3JlbWFyay1nZm0vaW5kZXguanMKdmFyIGluaXRfcmVtYXJrX2dmbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1nZm1ANC4wLjEvbm9kZV9tb2R1bGVzL3JlbWFyay1nZm0vaW5kZXguanMiKCkgewogICAgaW5pdF9saWIyMCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2NvbXBpbGUuanMKZnVuY3Rpb24gY29tcGlsZShvcHRpb25zKSB7CiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9OwogIGxldCB0YWdzID0gdHJ1ZTsKICBjb25zdCBkZWZpbml0aW9ucyA9IHt9OwogIGNvbnN0IGJ1ZmZlcnMgPSBbW11dOwogIGNvbnN0IG1lZGlhU3RhY2sgPSBbXTsKICBjb25zdCB0aWdodFN0YWNrID0gW107CiAgY29uc3QgZGVmYXVsdEhhbmRsZXJzID0gewogICAgZW50ZXI6IHsKICAgICAgYmxvY2tRdW90ZTogb25lbnRlcmJsb2NrcXVvdGUsCiAgICAgIGNvZGVGZW5jZWQ6IG9uZW50ZXJjb2RlZmVuY2VkLAogICAgICBjb2RlRmVuY2VkRmVuY2VJbmZvOiBidWZmZXIyLAogICAgICBjb2RlRmVuY2VkRmVuY2VNZXRhOiBidWZmZXIyLAogICAgICBjb2RlSW5kZW50ZWQ6IG9uZW50ZXJjb2RlaW5kZW50ZWQsCiAgICAgIGNvZGVUZXh0OiBvbmVudGVyY29kZXRleHQsCiAgICAgIGNvbnRlbnQ6IG9uZW50ZXJjb250ZW50LAogICAgICBkZWZpbml0aW9uOiBvbmVudGVyZGVmaW5pdGlvbiwKICAgICAgZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOiBvbmVudGVyZGVmaW5pdGlvbmRlc3RpbmF0aW9uc3RyaW5nLAogICAgICBkZWZpbml0aW9uTGFiZWxTdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIGRlZmluaXRpb25UaXRsZVN0cmluZzogYnVmZmVyMiwKICAgICAgZW1waGFzaXM6IG9uZW50ZXJlbXBoYXNpcywKICAgICAgaHRtbEZsb3c6IG9uZW50ZXJodG1sZmxvdywKICAgICAgaHRtbFRleHQ6IG9uZW50ZXJodG1sLAogICAgICBpbWFnZTogb25lbnRlcmltYWdlLAogICAgICBsYWJlbDogYnVmZmVyMiwKICAgICAgbGluazogb25lbnRlcmxpbmssCiAgICAgIGxpc3RJdGVtTWFya2VyOiBvbmVudGVybGlzdGl0ZW1tYXJrZXIsCiAgICAgIGxpc3RJdGVtVmFsdWU6IG9uZW50ZXJsaXN0aXRlbXZhbHVlLAogICAgICBsaXN0T3JkZXJlZDogb25lbnRlcmxpc3RvcmRlcmVkLAogICAgICBsaXN0VW5vcmRlcmVkOiBvbmVudGVybGlzdHVub3JkZXJlZCwKICAgICAgcGFyYWdyYXBoOiBvbmVudGVycGFyYWdyYXBoLAogICAgICByZWZlcmVuY2U6IGJ1ZmZlcjIsCiAgICAgIHJlc291cmNlOiBvbmVudGVycmVzb3VyY2UsCiAgICAgIHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6IG9uZW50ZXJyZXNvdXJjZWRlc3RpbmF0aW9uc3RyaW5nLAogICAgICByZXNvdXJjZVRpdGxlU3RyaW5nOiBidWZmZXIyLAogICAgICBzZXRleHRIZWFkaW5nOiBvbmVudGVyc2V0ZXh0aGVhZGluZywKICAgICAgc3Ryb25nOiBvbmVudGVyc3Ryb25nCiAgICB9LAogICAgZXhpdDogewogICAgICBhdHhIZWFkaW5nOiBvbmV4aXRhdHhoZWFkaW5nLAogICAgICBhdHhIZWFkaW5nU2VxdWVuY2U6IG9uZXhpdGF0eGhlYWRpbmdzZXF1ZW5jZSwKICAgICAgYXV0b2xpbmtFbWFpbDogb25leGl0YXV0b2xpbmtlbWFpbCwKICAgICAgYXV0b2xpbmtQcm90b2NvbDogb25leGl0YXV0b2xpbmtwcm90b2NvbCwKICAgICAgYmxvY2tRdW90ZTogb25leGl0YmxvY2txdW90ZSwKICAgICAgY2hhcmFjdGVyRXNjYXBlVmFsdWU6IG9uZXhpdGRhdGEsCiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsOiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2VtYXJrZXIsCiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWM6IG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlciwKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWU6IG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZXZhbHVlLAogICAgICBjb2RlRmVuY2VkOiBvbmV4aXRmbG93Y29kZSwKICAgICAgY29kZUZlbmNlZEZlbmNlOiBvbmV4aXRjb2RlZmVuY2VkZmVuY2UsCiAgICAgIGNvZGVGZW5jZWRGZW5jZUluZm86IG9uZXhpdGNvZGVmZW5jZWRmZW5jZWluZm8sCiAgICAgIGNvZGVGZW5jZWRGZW5jZU1ldGE6IG9ucmVzdW1lZHJvcCwKICAgICAgY29kZUZsb3dWYWx1ZTogb25leGl0Y29kZWZsb3d2YWx1ZSwKICAgICAgY29kZUluZGVudGVkOiBvbmV4aXRmbG93Y29kZSwKICAgICAgY29kZVRleHQ6IG9uZXhpdGNvZGV0ZXh0LAogICAgICBjb2RlVGV4dERhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGRhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGRlZmluaXRpb246IG9uZXhpdGRlZmluaXRpb24sCiAgICAgIGRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZzogb25leGl0ZGVmaW5pdGlvbmRlc3RpbmF0aW9uc3RyaW5nLAogICAgICBkZWZpbml0aW9uTGFiZWxTdHJpbmc6IG9uZXhpdGRlZmluaXRpb25sYWJlbHN0cmluZywKICAgICAgZGVmaW5pdGlvblRpdGxlU3RyaW5nOiBvbmV4aXRkZWZpbml0aW9udGl0bGVzdHJpbmcsCiAgICAgIGVtcGhhc2lzOiBvbmV4aXRlbXBoYXNpcywKICAgICAgaGFyZEJyZWFrRXNjYXBlOiBvbmV4aXRoYXJkYnJlYWssCiAgICAgIGhhcmRCcmVha1RyYWlsaW5nOiBvbmV4aXRoYXJkYnJlYWssCiAgICAgIGh0bWxGbG93OiBvbmV4aXRodG1sLAogICAgICBodG1sRmxvd0RhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGh0bWxUZXh0OiBvbmV4aXRodG1sLAogICAgICBodG1sVGV4dERhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGltYWdlOiBvbmV4aXRtZWRpYSwKICAgICAgbGFiZWw6IG9uZXhpdGxhYmVsLAogICAgICBsYWJlbFRleHQ6IG9uZXhpdGxhYmVsdGV4dCwKICAgICAgbGluZUVuZGluZzogb25leGl0bGluZWVuZGluZywKICAgICAgbGluazogb25leGl0bWVkaWEsCiAgICAgIGxpc3RPcmRlcmVkOiBvbmV4aXRsaXN0b3JkZXJlZCwKICAgICAgbGlzdFVub3JkZXJlZDogb25leGl0bGlzdHVub3JkZXJlZCwKICAgICAgcGFyYWdyYXBoOiBvbmV4aXRwYXJhZ3JhcGgsCiAgICAgIHJlZmVyZW5jZTogb25yZXN1bWVkcm9wLAogICAgICByZWZlcmVuY2VTdHJpbmc6IG9uZXhpdHJlZmVyZW5jZXN0cmluZywKICAgICAgcmVzb3VyY2U6IG9ucmVzdW1lZHJvcCwKICAgICAgcmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzogb25leGl0cmVzb3VyY2VkZXN0aW5hdGlvbnN0cmluZywKICAgICAgcmVzb3VyY2VUaXRsZVN0cmluZzogb25leGl0cmVzb3VyY2V0aXRsZXN0cmluZywKICAgICAgc2V0ZXh0SGVhZGluZzogb25leGl0c2V0ZXh0aGVhZGluZywKICAgICAgc2V0ZXh0SGVhZGluZ0xpbmVTZXF1ZW5jZTogb25leGl0c2V0ZXh0aGVhZGluZ2xpbmVzZXF1ZW5jZSwKICAgICAgc2V0ZXh0SGVhZGluZ1RleHQ6IG9uZXhpdHNldGV4dGhlYWRpbmd0ZXh0LAogICAgICBzdHJvbmc6IG9uZXhpdHN0cm9uZywKICAgICAgdGhlbWF0aWNCcmVhazogb25leGl0dGhlbWF0aWNicmVhawogICAgfQogIH07CiAgY29uc3QgaGFuZGxlcnMyID0gKAogICAgLyoqIEB0eXBlIHtOb3JtYWxpemVkSHRtbEV4dGVuc2lvbn0gKi8KICAgIGNvbWJpbmVIdG1sRXh0ZW5zaW9ucyhbZGVmYXVsdEhhbmRsZXJzLCAuLi5zZXR0aW5ncy5odG1sRXh0ZW5zaW9ucyB8fCBbXV0pCiAgKTsKICBjb25zdCBkYXRhID0gewogICAgZGVmaW5pdGlvbnMsCiAgICB0aWdodFN0YWNrCiAgfTsKICBjb25zdCBjb250ZXh0MiA9IHsKICAgIGJ1ZmZlcjogYnVmZmVyMiwKICAgIGVuY29kZTogZW5jb2RlMiwKICAgIGdldERhdGEsCiAgICBsaW5lRW5kaW5nSWZOZWVkZWQsCiAgICBvcHRpb25zOiBzZXR0aW5ncywKICAgIHJhdzogcmF3MiwKICAgIHJlc3VtZSwKICAgIHNldERhdGEsCiAgICB0YWcKICB9OwogIGxldCBsaW5lRW5kaW5nU3R5bGUgPSBzZXR0aW5ncy5kZWZhdWx0TGluZUVuZGluZzsKICByZXR1cm4gY29tcGlsZTI7CiAgZnVuY3Rpb24gY29tcGlsZTIoZXZlbnRzKSB7CiAgICBsZXQgaW5kZXgyID0gLTE7CiAgICBsZXQgc3RhcnQgPSAwOwogICAgY29uc3QgbGlzdFN0YWNrID0gW107CiAgICBsZXQgaGVhZDIgPSBbXTsKICAgIGxldCBib2R5MyA9IFtdOwogICAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgICBpZiAoIWxpbmVFbmRpbmdTdHlsZSAmJiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImxpbmVFbmRpbmciIHx8IGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nQmxhbmsiKSkgewogICAgICAgIGxpbmVFbmRpbmdTdHlsZSA9IC8qKiBAdHlwZSB7TGluZUVuZGluZ30gKi8KICAgICAgICBldmVudHNbaW5kZXgyXVsyXS5zbGljZVNlcmlhbGl6ZShldmVudHNbaW5kZXgyXVsxXSk7CiAgICAgIH0KICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJsaXN0T3JkZXJlZCIgfHwgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImxpc3RVbm9yZGVyZWQiKSB7CiAgICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzBdID09PSAiZW50ZXIiKSB7CiAgICAgICAgICBsaXN0U3RhY2sucHVzaChpbmRleDIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwcmVwYXJlTGlzdChldmVudHMuc2xpY2UobGlzdFN0YWNrLnBvcCgpLCBpbmRleDIpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJkZWZpbml0aW9uIikgewogICAgICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIikgewogICAgICAgICAgYm9keTMgPSBwdXNoKGJvZHkzLCBldmVudHMuc2xpY2Uoc3RhcnQsIGluZGV4MikpOwogICAgICAgICAgc3RhcnQgPSBpbmRleDI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGhlYWQyID0gcHVzaChoZWFkMiwgZXZlbnRzLnNsaWNlKHN0YXJ0LCBpbmRleDIgKyAxKSk7CiAgICAgICAgICBzdGFydCA9IGluZGV4MiArIDE7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBoZWFkMiA9IHB1c2goaGVhZDIsIGJvZHkzKTsKICAgIGhlYWQyID0gcHVzaChoZWFkMiwgZXZlbnRzLnNsaWNlKHN0YXJ0KSk7CiAgICBpbmRleDIgPSAtMTsKICAgIGNvbnN0IHJlc3VsdCA9IGhlYWQyOwogICAgaWYgKGhhbmRsZXJzMi5lbnRlci5udWxsKSB7CiAgICAgIGhhbmRsZXJzMi5lbnRlci5udWxsLmNhbGwoY29udGV4dDIpOwogICAgfQogICAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgICBjb25zdCBoYW5kbGVzID0gaGFuZGxlcnMyW3Jlc3VsdFtpbmRleDJdWzBdXTsKICAgICAgY29uc3Qga2luZCA9IHJlc3VsdFtpbmRleDJdWzFdLnR5cGU7CiAgICAgIGNvbnN0IGhhbmRsZTMgPSBoYW5kbGVzW2tpbmRdOwogICAgICBpZiAoaGFzT3duUHJvcGVydHkyLmNhbGwoaGFuZGxlcywga2luZCkgJiYgaGFuZGxlMykgewogICAgICAgIGhhbmRsZTMuY2FsbCh7CiAgICAgICAgICBzbGljZVNlcmlhbGl6ZTogcmVzdWx0W2luZGV4Ml1bMl0uc2xpY2VTZXJpYWxpemUsCiAgICAgICAgICAuLi5jb250ZXh0MgogICAgICAgIH0sIHJlc3VsdFtpbmRleDJdWzFdKTsKICAgICAgfQogICAgfQogICAgaWYgKGhhbmRsZXJzMi5leGl0Lm51bGwpIHsKICAgICAgaGFuZGxlcnMyLmV4aXQubnVsbC5jYWxsKGNvbnRleHQyKTsKICAgIH0KICAgIHJldHVybiBidWZmZXJzWzBdLmpvaW4oIiIpOwogIH0KICBmdW5jdGlvbiBwcmVwYXJlTGlzdChzbGljZSkgewogICAgY29uc3QgbGVuZ3RoID0gc2xpY2UubGVuZ3RoOwogICAgbGV0IGluZGV4MiA9IDA7CiAgICBsZXQgY29udGFpbmVyQmFsYW5jZSA9IDA7CiAgICBsZXQgbG9vc2UgPSBmYWxzZTsKICAgIGxldCBhdE1hcmtlcjsKICAgIHdoaWxlICgrK2luZGV4MiA8IGxlbmd0aCkgewogICAgICBjb25zdCBldmVudCA9IHNsaWNlW2luZGV4Ml07CiAgICAgIGlmIChldmVudFsxXS5fY29udGFpbmVyKSB7CiAgICAgICAgYXRNYXJrZXIgPSB2b2lkIDA7CiAgICAgICAgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiKSB7CiAgICAgICAgICBjb250YWluZXJCYWxhbmNlKys7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnRhaW5lckJhbGFuY2UtLTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBzd2l0Y2ggKGV2ZW50WzFdLnR5cGUpIHsKICAgICAgICBjYXNlICJsaXN0SXRlbVByZWZpeCI6IHsKICAgICAgICAgIGlmIChldmVudFswXSA9PT0gImV4aXQiKSB7CiAgICAgICAgICAgIGF0TWFya2VyID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjYXNlICJsaW5lUHJlZml4IjogewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgImxpbmVFbmRpbmdCbGFuayI6IHsKICAgICAgICAgIGlmIChldmVudFswXSA9PT0gImVudGVyIiAmJiAhY29udGFpbmVyQmFsYW5jZSkgewogICAgICAgICAgICBpZiAoYXRNYXJrZXIpIHsKICAgICAgICAgICAgICBhdE1hcmtlciA9IHZvaWQgMDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsb29zZSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICBhdE1hcmtlciA9IHZvaWQgMDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHNsaWNlWzBdWzFdLl9sb29zZSA9IGxvb3NlOwogIH0KICBmdW5jdGlvbiBzZXREYXRhKGtleTIsIHZhbHVlMikgewogICAgZGF0YVtrZXkyXSA9IHZhbHVlMjsKICB9CiAgZnVuY3Rpb24gZ2V0RGF0YShrZXkyKSB7CiAgICByZXR1cm4gZGF0YVtrZXkyXTsKICB9CiAgZnVuY3Rpb24gYnVmZmVyMigpIHsKICAgIGJ1ZmZlcnMucHVzaChbXSk7CiAgfQogIGZ1bmN0aW9uIHJlc3VtZSgpIHsKICAgIGNvbnN0IGJ1ZiA9IGJ1ZmZlcnMucG9wKCk7CiAgICByZXR1cm4gYnVmLmpvaW4oIiIpOwogIH0KICBmdW5jdGlvbiB0YWcodmFsdWUyKSB7CiAgICBpZiAoIXRhZ3MpIHJldHVybjsKICAgIHNldERhdGEoImxhc3RXYXNUYWciLCB0cnVlKTsKICAgIGJ1ZmZlcnNbYnVmZmVycy5sZW5ndGggLSAxXS5wdXNoKHZhbHVlMik7CiAgfQogIGZ1bmN0aW9uIHJhdzIodmFsdWUyKSB7CiAgICBzZXREYXRhKCJsYXN0V2FzVGFnIik7CiAgICBidWZmZXJzW2J1ZmZlcnMubGVuZ3RoIC0gMV0ucHVzaCh2YWx1ZTIpOwogIH0KICBmdW5jdGlvbiBsaW5lRW5kaW5nMigpIHsKICAgIHJhdzIobGluZUVuZGluZ1N0eWxlIHx8ICJcbiIpOwogIH0KICBmdW5jdGlvbiBsaW5lRW5kaW5nSWZOZWVkZWQoKSB7CiAgICBjb25zdCBidWZmZXIzID0gYnVmZmVyc1tidWZmZXJzLmxlbmd0aCAtIDFdOwogICAgY29uc3Qgc2xpY2UgPSBidWZmZXIzW2J1ZmZlcjMubGVuZ3RoIC0gMV07CiAgICBjb25zdCBwcmV2aW91czMgPSBzbGljZSA/IHNsaWNlLmNoYXJDb2RlQXQoc2xpY2UubGVuZ3RoIC0gMSkgOiBudWxsOwogICAgaWYgKHByZXZpb3VzMyA9PT0gMTAgfHwgcHJldmlvdXMzID09PSAxMyB8fCBwcmV2aW91czMgPT09IG51bGwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgbGluZUVuZGluZzIoKTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlMih2YWx1ZTIpIHsKICAgIHJldHVybiBnZXREYXRhKCJpZ25vcmVFbmNvZGUiKSA/IHZhbHVlMiA6IGVuY29kZSh2YWx1ZTIpOwogIH0KICBmdW5jdGlvbiBvbnJlc3VtZWRyb3AoKSB7CiAgICByZXN1bWUoKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmxpc3RvcmRlcmVkKHRva2VuKSB7CiAgICB0aWdodFN0YWNrLnB1c2goIXRva2VuLl9sb29zZSk7CiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIHRhZygiPG9sIik7CiAgICBzZXREYXRhKCJleHBlY3RGaXJzdEl0ZW0iLCB0cnVlKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmxpc3R1bm9yZGVyZWQodG9rZW4pIHsKICAgIHRpZ2h0U3RhY2sucHVzaCghdG9rZW4uX2xvb3NlKTsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8dWwiKTsKICAgIHNldERhdGEoImV4cGVjdEZpcnN0SXRlbSIsIHRydWUpOwogIH0KICBmdW5jdGlvbiBvbmVudGVybGlzdGl0ZW12YWx1ZSh0b2tlbikgewogICAgaWYgKGdldERhdGEoImV4cGVjdEZpcnN0SXRlbSIpKSB7CiAgICAgIGNvbnN0IHZhbHVlMiA9IE51bWJlci5wYXJzZUludCh0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKSwgMTApOwogICAgICBpZiAodmFsdWUyICE9PSAxKSB7CiAgICAgICAgdGFnKCcgc3RhcnQ9IicgKyBlbmNvZGUyKFN0cmluZyh2YWx1ZTIpKSArICciJyk7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gb25lbnRlcmxpc3RpdGVtbWFya2VyKCkgewogICAgaWYgKGdldERhdGEoImV4cGVjdEZpcnN0SXRlbSIpKSB7CiAgICAgIHRhZygiPiIpOwogICAgfSBlbHNlIHsKICAgICAgb25leGl0bGlzdGl0ZW0oKTsKICAgIH0KICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8bGk+Iik7CiAgICBzZXREYXRhKCJleHBlY3RGaXJzdEl0ZW0iKTsKICAgIHNldERhdGEoImxhc3RXYXNUYWciKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGlzdG9yZGVyZWQoKSB7CiAgICBvbmV4aXRsaXN0aXRlbSgpOwogICAgdGlnaHRTdGFjay5wb3AoKTsKICAgIGxpbmVFbmRpbmcyKCk7CiAgICB0YWcoIjwvb2w+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGxpc3R1bm9yZGVyZWQoKSB7CiAgICBvbmV4aXRsaXN0aXRlbSgpOwogICAgdGlnaHRTdGFjay5wb3AoKTsKICAgIGxpbmVFbmRpbmcyKCk7CiAgICB0YWcoIjwvdWw+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGxpc3RpdGVtKCkgewogICAgaWYgKGdldERhdGEoImxhc3RXYXNUYWciKSAmJiAhZ2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpKSB7CiAgICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgfQogICAgdGFnKCI8L2xpPiIpOwogICAgc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyYmxvY2txdW90ZSgpIHsKICAgIHRpZ2h0U3RhY2sucHVzaChmYWxzZSk7CiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIHRhZygiPGJsb2NrcXVvdGU+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGJsb2NrcXVvdGUoKSB7CiAgICB0aWdodFN0YWNrLnBvcCgpOwogICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB0YWcoIjwvYmxvY2txdW90ZT4iKTsKICAgIHNldERhdGEoInNsdXJwQWxsTGluZUVuZGluZ3MiKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcnBhcmFncmFwaCgpIHsKICAgIGlmICghdGlnaHRTdGFja1t0aWdodFN0YWNrLmxlbmd0aCAtIDFdKSB7CiAgICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICB0YWcoIjxwPiIpOwogICAgfQogICAgc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRwYXJhZ3JhcGgoKSB7CiAgICBpZiAodGlnaHRTdGFja1t0aWdodFN0YWNrLmxlbmd0aCAtIDFdKSB7CiAgICAgIHNldERhdGEoInNsdXJwQWxsTGluZUVuZGluZ3MiLCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHRhZygiPC9wPiIpOwogICAgfQogIH0KICBmdW5jdGlvbiBvbmVudGVyY29kZWZlbmNlZCgpIHsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8cHJlPjxjb2RlIik7CiAgICBzZXREYXRhKCJmZW5jZXNDb3VudCIsIDApOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjb2RlZmVuY2VkZmVuY2VpbmZvKCkgewogICAgY29uc3QgdmFsdWUyID0gcmVzdW1lKCk7CiAgICB0YWcoJyBjbGFzcz0ibGFuZ3VhZ2UtJyArIHZhbHVlMiArICciJyk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGVmZW5jZWRmZW5jZSgpIHsKICAgIGNvbnN0IGNvdW50MiA9IGdldERhdGEoImZlbmNlc0NvdW50IikgfHwgMDsKICAgIGlmICghY291bnQyKSB7CiAgICAgIHRhZygiPiIpOwogICAgICBzZXREYXRhKCJzbHVycE9uZUxpbmVFbmRpbmciLCB0cnVlKTsKICAgIH0KICAgIHNldERhdGEoImZlbmNlc0NvdW50IiwgY291bnQyICsgMSk7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJjb2RlaW5kZW50ZWQoKSB7CiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIHRhZygiPHByZT48Y29kZT4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0Zmxvd2NvZGUoKSB7CiAgICBjb25zdCBjb3VudDIgPSBnZXREYXRhKCJmZW5jZXNDb3VudCIpOwogICAgaWYgKGNvdW50MiAhPT0gdm9pZCAwICYmIGNvdW50MiA8IDIgJiYgZGF0YS50aWdodFN0YWNrLmxlbmd0aCA+IDAgJiYgIWdldERhdGEoImxhc3RXYXNUYWciKSkgewogICAgICBsaW5lRW5kaW5nMigpOwogICAgfQogICAgaWYgKGdldERhdGEoImZsb3dDb2RlU2VlbkRhdGEiKSkgewogICAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIH0KICAgIHRhZygiPC9jb2RlPjwvcHJlPiIpOwogICAgaWYgKGNvdW50MiAhPT0gdm9pZCAwICYmIGNvdW50MiA8IDIpIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgc2V0RGF0YSgiZmxvd0NvZGVTZWVuRGF0YSIpOwogICAgc2V0RGF0YSgiZmVuY2VzQ291bnQiKTsKICAgIHNldERhdGEoInNsdXJwT25lTGluZUVuZGluZyIpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyaW1hZ2UoKSB7CiAgICBtZWRpYVN0YWNrLnB1c2goewogICAgICBpbWFnZTogdHJ1ZQogICAgfSk7CiAgICB0YWdzID0gdm9pZCAwOwogIH0KICBmdW5jdGlvbiBvbmVudGVybGluaygpIHsKICAgIG1lZGlhU3RhY2sucHVzaCh7fSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGxhYmVsdGV4dCh0b2tlbikgewogICAgbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdLmxhYmVsSWQgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGFiZWwoKSB7CiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0ubGFiZWwgPSByZXN1bWUoKTsKICB9CiAgZnVuY3Rpb24gb25leGl0cmVmZXJlbmNlc3RyaW5nKHRva2VuKSB7CiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0ucmVmZXJlbmNlSWQgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcnJlc291cmNlKCkgewogICAgYnVmZmVyMigpOwogICAgbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uID0gIiI7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJyZXNvdXJjZWRlc3RpbmF0aW9uc3RyaW5nKCkgewogICAgYnVmZmVyMigpOwogICAgc2V0RGF0YSgiaWdub3JlRW5jb2RlIiwgdHJ1ZSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHJlc291cmNlZGVzdGluYXRpb25zdHJpbmcoKSB7CiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0uZGVzdGluYXRpb24gPSByZXN1bWUoKTsKICAgIHNldERhdGEoImlnbm9yZUVuY29kZSIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRyZXNvdXJjZXRpdGxlc3RyaW5nKCkgewogICAgbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdLnRpdGxlID0gcmVzdW1lKCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdG1lZGlhKCkgewogICAgbGV0IGluZGV4MiA9IG1lZGlhU3RhY2subGVuZ3RoIC0gMTsKICAgIGNvbnN0IG1lZGlhID0gbWVkaWFTdGFja1tpbmRleDJdOwogICAgY29uc3QgaWQgPSBtZWRpYS5yZWZlcmVuY2VJZCB8fCBtZWRpYS5sYWJlbElkOwogICAgY29uc3QgY29udGV4dDMgPSBtZWRpYS5kZXN0aW5hdGlvbiA9PT0gdm9pZCAwID8gZGVmaW5pdGlvbnNbbm9ybWFsaXplSWRlbnRpZmllcihpZCldIDogbWVkaWE7CiAgICB0YWdzID0gdHJ1ZTsKICAgIHdoaWxlIChpbmRleDItLSkgewogICAgICBpZiAobWVkaWFTdGFja1tpbmRleDJdLmltYWdlKSB7CiAgICAgICAgdGFncyA9IHZvaWQgMDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKG1lZGlhLmltYWdlKSB7CiAgICAgIHRhZygnPGltZyBzcmM9IicgKyBzYW5pdGl6ZVVyaShjb250ZXh0My5kZXN0aW5hdGlvbiwgc2V0dGluZ3MuYWxsb3dEYW5nZXJvdXNQcm90b2NvbCA/IHZvaWQgMCA6IHByb3RvY29sU291cmNlKSArICciIGFsdD0iJyk7CiAgICAgIHJhdzIobWVkaWEubGFiZWwpOwogICAgICB0YWcoJyInKTsKICAgIH0gZWxzZSB7CiAgICAgIHRhZygnPGEgaHJlZj0iJyArIHNhbml0aXplVXJpKGNvbnRleHQzLmRlc3RpbmF0aW9uLCBzZXR0aW5ncy5hbGxvd0Rhbmdlcm91c1Byb3RvY29sID8gdm9pZCAwIDogcHJvdG9jb2xIcmVmKSArICciJyk7CiAgICB9CiAgICB0YWcoY29udGV4dDMudGl0bGUgPyAnIHRpdGxlPSInICsgY29udGV4dDMudGl0bGUgKyAnIicgOiAiIik7CiAgICBpZiAobWVkaWEuaW1hZ2UpIHsKICAgICAgdGFnKCIgLz4iKTsKICAgIH0gZWxzZSB7CiAgICAgIHRhZygiPiIpOwogICAgICByYXcyKG1lZGlhLmxhYmVsKTsKICAgICAgdGFnKCI8L2E+Iik7CiAgICB9CiAgICBtZWRpYVN0YWNrLnBvcCgpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyZGVmaW5pdGlvbigpIHsKICAgIGJ1ZmZlcjIoKTsKICAgIG1lZGlhU3RhY2sucHVzaCh7fSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb25sYWJlbHN0cmluZyh0b2tlbikgewogICAgcmVzdW1lKCk7CiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0ubGFiZWxJZCA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogIH0KICBmdW5jdGlvbiBvbmVudGVyZGVmaW5pdGlvbmRlc3RpbmF0aW9uc3RyaW5nKCkgewogICAgYnVmZmVyMigpOwogICAgc2V0RGF0YSgiaWdub3JlRW5jb2RlIiwgdHJ1ZSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb25kZXN0aW5hdGlvbnN0cmluZygpIHsKICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbiA9IHJlc3VtZSgpOwogICAgc2V0RGF0YSgiaWdub3JlRW5jb2RlIik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb250aXRsZXN0cmluZygpIHsKICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS50aXRsZSA9IHJlc3VtZSgpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRkZWZpbml0aW9uKCkgewogICAgY29uc3QgbWVkaWEgPSBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV07CiAgICBjb25zdCBpZCA9IG5vcm1hbGl6ZUlkZW50aWZpZXIobWVkaWEubGFiZWxJZCk7CiAgICByZXN1bWUoKTsKICAgIGlmICghaGFzT3duUHJvcGVydHkyLmNhbGwoZGVmaW5pdGlvbnMsIGlkKSkgewogICAgICBkZWZpbml0aW9uc1tpZF0gPSBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV07CiAgICB9CiAgICBtZWRpYVN0YWNrLnBvcCgpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyY29udGVudCgpIHsKICAgIHNldERhdGEoInNsdXJwQWxsTGluZUVuZGluZ3MiLCB0cnVlKTsKICB9CiAgZnVuY3Rpb24gb25leGl0YXR4aGVhZGluZ3NlcXVlbmNlKHRva2VuKSB7CiAgICBpZiAoZ2V0RGF0YSgiaGVhZGluZ1JhbmsiKSkgcmV0dXJuOwogICAgc2V0RGF0YSgiaGVhZGluZ1JhbmsiLCB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKS5sZW5ndGgpOwogICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB0YWcoIjxoIiArIGdldERhdGEoImhlYWRpbmdSYW5rIikgKyAiPiIpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyc2V0ZXh0aGVhZGluZygpIHsKICAgIGJ1ZmZlcjIoKTsKICAgIHNldERhdGEoInNsdXJwQWxsTGluZUVuZGluZ3MiKTsKICB9CiAgZnVuY3Rpb24gb25leGl0c2V0ZXh0aGVhZGluZ3RleHQoKSB7CiAgICBzZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIiwgdHJ1ZSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGF0eGhlYWRpbmcoKSB7CiAgICB0YWcoIjwvaCIgKyBnZXREYXRhKCJoZWFkaW5nUmFuayIpICsgIj4iKTsKICAgIHNldERhdGEoImhlYWRpbmdSYW5rIik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHNldGV4dGhlYWRpbmdsaW5lc2VxdWVuY2UodG9rZW4pIHsKICAgIHNldERhdGEoImhlYWRpbmdSYW5rIiwgdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikuY2hhckNvZGVBdCgwKSA9PT0gNjEgPyAxIDogMik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHNldGV4dGhlYWRpbmcoKSB7CiAgICBjb25zdCB2YWx1ZTIgPSByZXN1bWUoKTsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8aCIgKyBnZXREYXRhKCJoZWFkaW5nUmFuayIpICsgIj4iKTsKICAgIHJhdzIodmFsdWUyKTsKICAgIHRhZygiPC9oIiArIGdldERhdGEoImhlYWRpbmdSYW5rIikgKyAiPiIpOwogICAgc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpOwogICAgc2V0RGF0YSgiaGVhZGluZ1JhbmsiKTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGF0YSh0b2tlbikgewogICAgcmF3MihlbmNvZGUyKHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pKSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGxpbmVlbmRpbmcodG9rZW4pIHsKICAgIGlmIChnZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIikpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGdldERhdGEoInNsdXJwT25lTGluZUVuZGluZyIpKSB7CiAgICAgIHNldERhdGEoInNsdXJwT25lTGluZUVuZGluZyIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoZ2V0RGF0YSgiaW5Db2RlVGV4dCIpKSB7CiAgICAgIHJhdzIoIiAiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgcmF3MihlbmNvZGUyKHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pKSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGVmbG93dmFsdWUodG9rZW4pIHsKICAgIHJhdzIoZW5jb2RlMih0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKSkpOwogICAgc2V0RGF0YSgiZmxvd0NvZGVTZWVuRGF0YSIsIHRydWUpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRoYXJkYnJlYWsoKSB7CiAgICB0YWcoIjxiciAvPiIpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyaHRtbGZsb3coKSB7CiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIG9uZW50ZXJodG1sKCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGh0bWwoKSB7CiAgICBzZXREYXRhKCJpZ25vcmVFbmNvZGUiKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmh0bWwoKSB7CiAgICBpZiAoc2V0dGluZ3MuYWxsb3dEYW5nZXJvdXNIdG1sKSB7CiAgICAgIHNldERhdGEoImlnbm9yZUVuY29kZSIsIHRydWUpOwogICAgfQogIH0KICBmdW5jdGlvbiBvbmVudGVyZW1waGFzaXMoKSB7CiAgICB0YWcoIjxlbT4iKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcnN0cm9uZygpIHsKICAgIHRhZygiPHN0cm9uZz4iKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmNvZGV0ZXh0KCkgewogICAgc2V0RGF0YSgiaW5Db2RlVGV4dCIsIHRydWUpOwogICAgdGFnKCI8Y29kZT4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZXRleHQoKSB7CiAgICBzZXREYXRhKCJpbkNvZGVUZXh0Iik7CiAgICB0YWcoIjwvY29kZT4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZW1waGFzaXMoKSB7CiAgICB0YWcoIjwvZW0+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHN0cm9uZygpIHsKICAgIHRhZygiPC9zdHJvbmc+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHRoZW1hdGljYnJlYWsoKSB7CiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIHRhZygiPGhyIC8+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlcih0b2tlbikgewogICAgc2V0RGF0YSgiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIsIHRva2VuLnR5cGUpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2V2YWx1ZSh0b2tlbikgewogICAgY29uc3QgdmFsdWUyID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgICBjb25zdCBkZWNvZGVkID0gZ2V0RGF0YSgiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpID8gZGVjb2RlTnVtZXJpY0NoYXJhY3RlclJlZmVyZW5jZSh2YWx1ZTIsIGdldERhdGEoImNoYXJhY3RlclJlZmVyZW5jZVR5cGUiKSA9PT0gImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiID8gMTAgOiAxNikgOiBkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZSh2YWx1ZTIpOwogICAgcmF3MihlbmNvZGUyKAogICAgICAvKiogQHR5cGUge3N0cmluZ30gKi8KICAgICAgZGVjb2RlZAogICAgKSk7CiAgICBzZXREYXRhKCJjaGFyYWN0ZXJSZWZlcmVuY2VUeXBlIik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGF1dG9saW5rcHJvdG9jb2wodG9rZW4pIHsKICAgIGNvbnN0IHVyaSA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogICAgdGFnKCc8YSBocmVmPSInICsgc2FuaXRpemVVcmkodXJpLCBzZXR0aW5ncy5hbGxvd0Rhbmdlcm91c1Byb3RvY29sID8gdm9pZCAwIDogcHJvdG9jb2xIcmVmKSArICciPicpOwogICAgcmF3MihlbmNvZGUyKHVyaSkpOwogICAgdGFnKCI8L2E+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGF1dG9saW5rZW1haWwodG9rZW4pIHsKICAgIGNvbnN0IHVyaSA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogICAgdGFnKCc8YSBocmVmPSInICsgc2FuaXRpemVVcmkoIm1haWx0bzoiICsgdXJpKSArICciPicpOwogICAgcmF3MihlbmNvZGUyKHVyaSkpOwogICAgdGFnKCI8L2E+Iik7CiAgfQp9CnZhciBoYXNPd25Qcm9wZXJ0eTIsIHByb3RvY29sSHJlZiwgcHJvdG9jb2xTb3VyY2U7CnZhciBpbml0X2NvbXBpbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvY29tcGlsZS5qcyIoKSB7CiAgICBpbml0X2luZGV4X2RvbSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaHVua2VkKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NvbWJpbmVfZXh0ZW5zaW9ucygpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9kZWNvZGVfbnVtZXJpY19jaGFyYWN0ZXJfcmVmZXJlbmNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2VuY29kZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9ub3JtYWxpemVfaWRlbnRpZmllcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9zYW5pdGl6ZV91cmkoKTsKICAgIGhhc093blByb3BlcnR5MiA9IHt9Lmhhc093blByb3BlcnR5OwogICAgcHJvdG9jb2xIcmVmID0gL14oaHR0cHM/fGlyY3M/fG1haWx0b3x4bXBwKSQvaTsKICAgIHByb3RvY29sU291cmNlID0gL15odHRwcz8kL2k7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvaW5pdGlhbGl6ZS9jb250ZW50LmpzCmZ1bmN0aW9uIGluaXRpYWxpemVDb250ZW50KGVmZmVjdHMpIHsKICBjb25zdCBjb250ZW50U3RhcnQgPSBlZmZlY3RzLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5jb250ZW50SW5pdGlhbCwgYWZ0ZXJDb250ZW50U3RhcnRDb25zdHJ1Y3QsIHBhcmFncmFwaEluaXRpYWwpOwogIGxldCBwcmV2aW91czM7CiAgcmV0dXJuIGNvbnRlbnRTdGFydDsKICBmdW5jdGlvbiBhZnRlckNvbnRlbnRTdGFydENvbnN0cnVjdChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgY29udGVudFN0YXJ0LCAibGluZVByZWZpeCIpOwogIH0KICBmdW5jdGlvbiBwYXJhZ3JhcGhJbml0aWFsKGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJwYXJhZ3JhcGgiKTsKICAgIHJldHVybiBsaW5lU3RhcnQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBsaW5lU3RhcnQoY29kZTQpIHsKICAgIGNvbnN0IHRva2VuID0gZWZmZWN0cy5lbnRlcigiY2h1bmtUZXh0IiwgewogICAgICBjb250ZW50VHlwZTogInRleHQiLAogICAgICBwcmV2aW91czogcHJldmlvdXMzCiAgICB9KTsKICAgIGlmIChwcmV2aW91czMpIHsKICAgICAgcHJldmlvdXMzLm5leHQgPSB0b2tlbjsKICAgIH0KICAgIHByZXZpb3VzMyA9IHRva2VuOwogICAgcmV0dXJuIGRhdGEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkYXRhKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjaHVua1RleHQiKTsKICAgICAgZWZmZWN0cy5leGl0KCJwYXJhZ3JhcGgiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJjaHVua1RleHQiKTsKICAgICAgcmV0dXJuIGxpbmVTdGFydDsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gZGF0YTsKICB9Cn0KdmFyIGNvbnRlbnQyOwp2YXIgaW5pdF9jb250ZW50MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL2NvbnRlbnQuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGNvbnRlbnQyID0gewogICAgICB0b2tlbml6ZTogaW5pdGlhbGl6ZUNvbnRlbnQKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvaW5pdGlhbGl6ZS9kb2N1bWVudC5qcwpmdW5jdGlvbiBpbml0aWFsaXplRG9jdW1lbnQoZWZmZWN0cykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBjb25zdCBzdGFjayA9IFtdOwogIGxldCBjb250aW51ZWQgPSAwOwogIGxldCBjaGlsZEZsb3c7CiAgbGV0IGNoaWxkVG9rZW47CiAgbGV0IGxpbmVTdGFydE9mZnNldDsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmIChjb250aW51ZWQgPCBzdGFjay5sZW5ndGgpIHsKICAgICAgY29uc3QgaXRlbSA9IHN0YWNrW2NvbnRpbnVlZF07CiAgICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlID0gaXRlbVsxXTsKICAgICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChpdGVtWzBdLmNvbnRpbnVhdGlvbiwgZG9jdW1lbnRDb250aW51ZSwgY2hlY2tOZXdDb250YWluZXJzKShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gY2hlY2tOZXdDb250YWluZXJzKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZG9jdW1lbnRDb250aW51ZShjb2RlNCkgewogICAgY29udGludWVkKys7CiAgICBpZiAoc2VsZjIuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdykgewogICAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93ID0gdm9pZCAwOwogICAgICBpZiAoY2hpbGRGbG93KSB7CiAgICAgICAgY2xvc2VGbG93KCk7CiAgICAgIH0KICAgICAgY29uc3QgaW5kZXhCZWZvcmVFeGl0cyA9IHNlbGYyLmV2ZW50cy5sZW5ndGg7CiAgICAgIGxldCBpbmRleEJlZm9yZUZsb3cgPSBpbmRleEJlZm9yZUV4aXRzOwogICAgICBsZXQgcG9pbnQ0OwogICAgICB3aGlsZSAoaW5kZXhCZWZvcmVGbG93LS0pIHsKICAgICAgICBpZiAoc2VsZjIuZXZlbnRzW2luZGV4QmVmb3JlRmxvd11bMF0gPT09ICJleGl0IiAmJiBzZWxmMi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVsxXS50eXBlID09PSAiY2h1bmtGbG93IikgewogICAgICAgICAgcG9pbnQ0ID0gc2VsZjIuZXZlbnRzW2luZGV4QmVmb3JlRmxvd11bMV0uZW5kOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGV4aXRDb250YWluZXJzKGNvbnRpbnVlZCk7CiAgICAgIGxldCBpbmRleDIgPSBpbmRleEJlZm9yZUV4aXRzOwogICAgICB3aGlsZSAoaW5kZXgyIDwgc2VsZjIuZXZlbnRzLmxlbmd0aCkgewogICAgICAgIHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLmVuZCA9IHsKICAgICAgICAgIC4uLnBvaW50NAogICAgICAgIH07CiAgICAgICAgaW5kZXgyKys7CiAgICAgIH0KICAgICAgc3BsaWNlKHNlbGYyLmV2ZW50cywgaW5kZXhCZWZvcmVGbG93ICsgMSwgMCwgc2VsZjIuZXZlbnRzLnNsaWNlKGluZGV4QmVmb3JlRXhpdHMpKTsKICAgICAgc2VsZjIuZXZlbnRzLmxlbmd0aCA9IGluZGV4MjsKICAgICAgcmV0dXJuIGNoZWNrTmV3Q29udGFpbmVycyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gc3RhcnQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjaGVja05ld0NvbnRhaW5lcnMoY29kZTQpIHsKICAgIGlmIChjb250aW51ZWQgPT09IHN0YWNrLmxlbmd0aCkgewogICAgICBpZiAoIWNoaWxkRmxvdykgewogICAgICAgIHJldHVybiBkb2N1bWVudENvbnRpbnVlZChjb2RlNCk7CiAgICAgIH0KICAgICAgaWYgKGNoaWxkRmxvdy5jdXJyZW50Q29uc3RydWN0ICYmIGNoaWxkRmxvdy5jdXJyZW50Q29uc3RydWN0LmNvbmNyZXRlKSB7CiAgICAgICAgcmV0dXJuIGZsb3dTdGFydChjb2RlNCk7CiAgICAgIH0KICAgICAgc2VsZjIuaW50ZXJydXB0ID0gQm9vbGVhbihjaGlsZEZsb3cuY3VycmVudENvbnN0cnVjdCAmJiAhY2hpbGRGbG93Ll9nZm1UYWJsZUR5bmFtaWNJbnRlcnJ1cHRIYWNrKTsKICAgIH0KICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlID0ge307CiAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhjb250YWluZXJDb25zdHJ1Y3QsIHRoZXJlSXNBTmV3Q29udGFpbmVyLCB0aGVyZUlzTm9OZXdDb250YWluZXIpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGhlcmVJc0FOZXdDb250YWluZXIoY29kZTQpIHsKICAgIGlmIChjaGlsZEZsb3cpIGNsb3NlRmxvdygpOwogICAgZXhpdENvbnRhaW5lcnMoY29udGludWVkKTsKICAgIHJldHVybiBkb2N1bWVudENvbnRpbnVlZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRoZXJlSXNOb05ld0NvbnRhaW5lcihjb2RlNCkgewogICAgc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0gPSBjb250aW51ZWQgIT09IHN0YWNrLmxlbmd0aDsKICAgIGxpbmVTdGFydE9mZnNldCA9IHNlbGYyLm5vdygpLm9mZnNldDsKICAgIHJldHVybiBmbG93U3RhcnQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkb2N1bWVudENvbnRpbnVlZChjb2RlNCkgewogICAgc2VsZjIuY29udGFpbmVyU3RhdGUgPSB7fTsKICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoY29udGFpbmVyQ29uc3RydWN0LCBjb250YWluZXJDb250aW51ZSwgZmxvd1N0YXJ0KShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRhaW5lckNvbnRpbnVlKGNvZGU0KSB7CiAgICBjb250aW51ZWQrKzsKICAgIHN0YWNrLnB1c2goW3NlbGYyLmN1cnJlbnRDb25zdHJ1Y3QsIHNlbGYyLmNvbnRhaW5lclN0YXRlXSk7CiAgICByZXR1cm4gZG9jdW1lbnRDb250aW51ZWQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBmbG93U3RhcnQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICBpZiAoY2hpbGRGbG93KSBjbG9zZUZsb3coKTsKICAgICAgZXhpdENvbnRhaW5lcnMoMCk7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNoaWxkRmxvdyA9IGNoaWxkRmxvdyB8fCBzZWxmMi5wYXJzZXIuZmxvdyhzZWxmMi5ub3coKSk7CiAgICBlZmZlY3RzLmVudGVyKCJjaHVua0Zsb3ciLCB7CiAgICAgIF90b2tlbml6ZXI6IGNoaWxkRmxvdywKICAgICAgY29udGVudFR5cGU6ICJmbG93IiwKICAgICAgcHJldmlvdXM6IGNoaWxkVG9rZW4KICAgIH0pOwogICAgcmV0dXJuIGZsb3dDb250aW51ZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGZsb3dDb250aW51ZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHdyaXRlVG9DaGlsZChlZmZlY3RzLmV4aXQoImNodW5rRmxvdyIpLCB0cnVlKTsKICAgICAgZXhpdENvbnRhaW5lcnMoMCk7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHdyaXRlVG9DaGlsZChlZmZlY3RzLmV4aXQoImNodW5rRmxvdyIpKTsKICAgICAgY29udGludWVkID0gMDsKICAgICAgc2VsZjIuaW50ZXJydXB0ID0gdm9pZCAwOwogICAgICByZXR1cm4gc3RhcnQ7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGZsb3dDb250aW51ZTsKICB9CiAgZnVuY3Rpb24gd3JpdGVUb0NoaWxkKHRva2VuLCBlbmRPZkZpbGUpIHsKICAgIGNvbnN0IHN0cmVhbSA9IHNlbGYyLnNsaWNlU3RyZWFtKHRva2VuKTsKICAgIGlmIChlbmRPZkZpbGUpIHN0cmVhbS5wdXNoKG51bGwpOwogICAgdG9rZW4ucHJldmlvdXMgPSBjaGlsZFRva2VuOwogICAgaWYgKGNoaWxkVG9rZW4pIGNoaWxkVG9rZW4ubmV4dCA9IHRva2VuOwogICAgY2hpbGRUb2tlbiA9IHRva2VuOwogICAgY2hpbGRGbG93LmRlZmluZVNraXAodG9rZW4uc3RhcnQpOwogICAgY2hpbGRGbG93LndyaXRlKHN0cmVhbSk7CiAgICBpZiAoc2VsZjIucGFyc2VyLmxhenlbdG9rZW4uc3RhcnQubGluZV0pIHsKICAgICAgbGV0IGluZGV4MiA9IGNoaWxkRmxvdy5ldmVudHMubGVuZ3RoOwogICAgICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgICAgICBpZiAoCiAgICAgICAgICAvLyBUaGUgdG9rZW4gc3RhcnRzIGJlZm9yZSB0aGUgbGluZSBlbmRpbmfigKYKICAgICAgICAgIGNoaWxkRmxvdy5ldmVudHNbaW5kZXgyXVsxXS5zdGFydC5vZmZzZXQgPCBsaW5lU3RhcnRPZmZzZXQgJiYgLy8g4oCmYW5kIGVpdGhlciBpcyBub3QgZW5kZWQgeWV04oCmCiAgICAgICAgICAoIWNoaWxkRmxvdy5ldmVudHNbaW5kZXgyXVsxXS5lbmQgfHwgLy8g4oCmb3IgZW5kcyBhZnRlciBpdC4KICAgICAgICAgIGNoaWxkRmxvdy5ldmVudHNbaW5kZXgyXVsxXS5lbmQub2Zmc2V0ID4gbGluZVN0YXJ0T2Zmc2V0KQogICAgICAgICkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBpbmRleEJlZm9yZUV4aXRzID0gc2VsZjIuZXZlbnRzLmxlbmd0aDsKICAgICAgbGV0IGluZGV4QmVmb3JlRmxvdyA9IGluZGV4QmVmb3JlRXhpdHM7CiAgICAgIGxldCBzZWVuOwogICAgICBsZXQgcG9pbnQ0OwogICAgICB3aGlsZSAoaW5kZXhCZWZvcmVGbG93LS0pIHsKICAgICAgICBpZiAoc2VsZjIuZXZlbnRzW2luZGV4QmVmb3JlRmxvd11bMF0gPT09ICJleGl0IiAmJiBzZWxmMi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVsxXS50eXBlID09PSAiY2h1bmtGbG93IikgewogICAgICAgICAgaWYgKHNlZW4pIHsKICAgICAgICAgICAgcG9pbnQ0ID0gc2VsZjIuZXZlbnRzW2luZGV4QmVmb3JlRmxvd11bMV0uZW5kOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIHNlZW4gPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBleGl0Q29udGFpbmVycyhjb250aW51ZWQpOwogICAgICBpbmRleDIgPSBpbmRleEJlZm9yZUV4aXRzOwogICAgICB3aGlsZSAoaW5kZXgyIDwgc2VsZjIuZXZlbnRzLmxlbmd0aCkgewogICAgICAgIHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLmVuZCA9IHsKICAgICAgICAgIC4uLnBvaW50NAogICAgICAgIH07CiAgICAgICAgaW5kZXgyKys7CiAgICAgIH0KICAgICAgc3BsaWNlKHNlbGYyLmV2ZW50cywgaW5kZXhCZWZvcmVGbG93ICsgMSwgMCwgc2VsZjIuZXZlbnRzLnNsaWNlKGluZGV4QmVmb3JlRXhpdHMpKTsKICAgICAgc2VsZjIuZXZlbnRzLmxlbmd0aCA9IGluZGV4MjsKICAgIH0KICB9CiAgZnVuY3Rpb24gZXhpdENvbnRhaW5lcnMoc2l6ZSkgewogICAgbGV0IGluZGV4MiA9IHN0YWNrLmxlbmd0aDsKICAgIHdoaWxlIChpbmRleDItLSA+IHNpemUpIHsKICAgICAgY29uc3QgZW50cnkgPSBzdGFja1tpbmRleDJdOwogICAgICBzZWxmMi5jb250YWluZXJTdGF0ZSA9IGVudHJ5WzFdOwogICAgICBlbnRyeVswXS5leGl0LmNhbGwoc2VsZjIsIGVmZmVjdHMpOwogICAgfQogICAgc3RhY2subGVuZ3RoID0gc2l6ZTsKICB9CiAgZnVuY3Rpb24gY2xvc2VGbG93KCkgewogICAgY2hpbGRGbG93LndyaXRlKFtudWxsXSk7CiAgICBjaGlsZFRva2VuID0gdm9pZCAwOwogICAgY2hpbGRGbG93ID0gdm9pZCAwOwogICAgc2VsZjIuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdyA9IHZvaWQgMDsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVDb250YWluZXIoZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGVmZmVjdHMuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmRvY3VtZW50LCBvazMsIG5vayksICJsaW5lUHJlZml4IiwgdGhpcy5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpID8gdm9pZCAwIDogNCk7Cn0KdmFyIGRvY3VtZW50MiwgY29udGFpbmVyQ29uc3RydWN0Owp2YXIgaW5pdF9kb2N1bWVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL2RvY3VtZW50LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NodW5rZWQoKTsKICAgIGRvY3VtZW50MiA9IHsKICAgICAgdG9rZW5pemU6IGluaXRpYWxpemVEb2N1bWVudAogICAgfTsKICAgIGNvbnRhaW5lckNvbnN0cnVjdCA9IHsKICAgICAgdG9rZW5pemU6IHRva2VuaXplQ29udGFpbmVyCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2luaXRpYWxpemUvZmxvdy5qcwpmdW5jdGlvbiBpbml0aWFsaXplRmxvdyhlZmZlY3RzKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGNvbnN0IGluaXRpYWwyID0gZWZmZWN0cy5hdHRlbXB0KAogICAgLy8gVHJ5IHRvIHBhcnNlIGEgYmxhbmsgbGluZS4KICAgIGJsYW5rTGluZSwKICAgIGF0QmxhbmtFbmRpbmcsCiAgICAvLyBUcnkgdG8gcGFyc2UgaW5pdGlhbCBmbG93IChlc3NlbnRpYWxseSwgb25seSBjb2RlKS4KICAgIGVmZmVjdHMuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmZsb3dJbml0aWFsLCBhZnRlckNvbnN0cnVjdCwgZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGVmZmVjdHMuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmZsb3csIGFmdGVyQ29uc3RydWN0LCBlZmZlY3RzLmF0dGVtcHQoY29udGVudCwgYWZ0ZXJDb25zdHJ1Y3QpKSwgImxpbmVQcmVmaXgiKSkKICApOwogIHJldHVybiBpbml0aWFsMjsKICBmdW5jdGlvbiBhdEJsYW5rRW5kaW5nKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZ0JsYW5rIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nQmxhbmsiKTsKICAgIHNlbGYyLmN1cnJlbnRDb25zdHJ1Y3QgPSB2b2lkIDA7CiAgICByZXR1cm4gaW5pdGlhbDI7CiAgfQogIGZ1bmN0aW9uIGFmdGVyQ29uc3RydWN0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgc2VsZjIuY3VycmVudENvbnN0cnVjdCA9IHZvaWQgMDsKICAgIHJldHVybiBpbml0aWFsMjsKICB9Cn0KdmFyIGZsb3c7CnZhciBpbml0X2Zsb3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvaW5pdGlhbGl6ZS9mbG93LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2NvcmVfY29tbW9ubWFyaygpOwogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGZsb3cgPSB7CiAgICAgIHRva2VuaXplOiBpbml0aWFsaXplRmxvdwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL3RleHQuanMKZnVuY3Rpb24gaW5pdGlhbGl6ZUZhY3RvcnkoZmllbGQpIHsKICByZXR1cm4gewogICAgcmVzb2x2ZUFsbDogY3JlYXRlUmVzb2x2ZXIoZmllbGQgPT09ICJ0ZXh0IiA/IHJlc29sdmVBbGxMaW5lU3VmZml4ZXMgOiB2b2lkIDApLAogICAgdG9rZW5pemU6IGluaXRpYWxpemVUZXh0CiAgfTsKICBmdW5jdGlvbiBpbml0aWFsaXplVGV4dChlZmZlY3RzKSB7CiAgICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgICBjb25zdCBjb25zdHJ1Y3RzMiA9IHRoaXMucGFyc2VyLmNvbnN0cnVjdHNbZmllbGRdOwogICAgY29uc3QgdGV4dDkgPSBlZmZlY3RzLmF0dGVtcHQoY29uc3RydWN0czIsIHN0YXJ0LCBub3RUZXh0KTsKICAgIHJldHVybiBzdGFydDsKICAgIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KSA/IHRleHQ5KGNvZGU0KSA6IG5vdFRleHQoY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gbm90VGV4dChjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBlZmZlY3RzLmVudGVyKCJkYXRhIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBkYXRhOwogICAgfQogICAgZnVuY3Rpb24gZGF0YShjb2RlNCkgewogICAgICBpZiAoYXRCcmVhayhjb2RlNCkpIHsKICAgICAgICBlZmZlY3RzLmV4aXQoImRhdGEiKTsKICAgICAgICByZXR1cm4gdGV4dDkoY29kZTQpOwogICAgICB9CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBkYXRhOwogICAgfQogICAgZnVuY3Rpb24gYXRCcmVhayhjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBjb25zdCBsaXN0NSA9IGNvbnN0cnVjdHMyW2NvZGU0XTsKICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICBpZiAobGlzdDUpIHsKICAgICAgICB3aGlsZSAoKytpbmRleDIgPCBsaXN0NS5sZW5ndGgpIHsKICAgICAgICAgIGNvbnN0IGl0ZW0gPSBsaXN0NVtpbmRleDJdOwogICAgICAgICAgaWYgKCFpdGVtLnByZXZpb3VzIHx8IGl0ZW0ucHJldmlvdXMuY2FsbChzZWxmMiwgc2VsZjIucHJldmlvdXMpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIGNyZWF0ZVJlc29sdmVyKGV4dHJhUmVzb2x2ZXIpIHsKICByZXR1cm4gcmVzb2x2ZUFsbFRleHQ7CiAgZnVuY3Rpb24gcmVzb2x2ZUFsbFRleHQoZXZlbnRzLCBjb250ZXh0MikgewogICAgbGV0IGluZGV4MiA9IC0xOwogICAgbGV0IGVudGVyOwogICAgd2hpbGUgKCsraW5kZXgyIDw9IGV2ZW50cy5sZW5ndGgpIHsKICAgICAgaWYgKGVudGVyID09PSB2b2lkIDApIHsKICAgICAgICBpZiAoZXZlbnRzW2luZGV4Ml0gJiYgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImRhdGEiKSB7CiAgICAgICAgICBlbnRlciA9IGluZGV4MjsKICAgICAgICAgIGluZGV4MisrOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICghZXZlbnRzW2luZGV4Ml0gfHwgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSAhPT0gImRhdGEiKSB7CiAgICAgICAgaWYgKGluZGV4MiAhPT0gZW50ZXIgKyAyKSB7CiAgICAgICAgICBldmVudHNbZW50ZXJdWzFdLmVuZCA9IGV2ZW50c1tpbmRleDIgLSAxXVsxXS5lbmQ7CiAgICAgICAgICBldmVudHMuc3BsaWNlKGVudGVyICsgMiwgaW5kZXgyIC0gZW50ZXIgLSAyKTsKICAgICAgICAgIGluZGV4MiA9IGVudGVyICsgMjsKICAgICAgICB9CiAgICAgICAgZW50ZXIgPSB2b2lkIDA7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBleHRyYVJlc29sdmVyID8gZXh0cmFSZXNvbHZlcihldmVudHMsIGNvbnRleHQyKSA6IGV2ZW50czsKICB9Cn0KZnVuY3Rpb24gcmVzb2x2ZUFsbExpbmVTdWZmaXhlcyhldmVudHMsIGNvbnRleHQyKSB7CiAgbGV0IGV2ZW50SW5kZXggPSAwOwogIHdoaWxlICgrK2V2ZW50SW5kZXggPD0gZXZlbnRzLmxlbmd0aCkgewogICAgaWYgKChldmVudEluZGV4ID09PSBldmVudHMubGVuZ3RoIHx8IGV2ZW50c1tldmVudEluZGV4XVsxXS50eXBlID09PSAibGluZUVuZGluZyIpICYmIGV2ZW50c1tldmVudEluZGV4IC0gMV1bMV0udHlwZSA9PT0gImRhdGEiKSB7CiAgICAgIGNvbnN0IGRhdGEgPSBldmVudHNbZXZlbnRJbmRleCAtIDFdWzFdOwogICAgICBjb25zdCBjaHVua3MgPSBjb250ZXh0Mi5zbGljZVN0cmVhbShkYXRhKTsKICAgICAgbGV0IGluZGV4MiA9IGNodW5rcy5sZW5ndGg7CiAgICAgIGxldCBidWZmZXJJbmRleCA9IC0xOwogICAgICBsZXQgc2l6ZSA9IDA7CiAgICAgIGxldCB0YWJzOwogICAgICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgICAgICBjb25zdCBjaHVuayA9IGNodW5rc1tpbmRleDJdOwogICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBidWZmZXJJbmRleCA9IGNodW5rLmxlbmd0aDsKICAgICAgICAgIHdoaWxlIChjaHVuay5jaGFyQ29kZUF0KGJ1ZmZlckluZGV4IC0gMSkgPT09IDMyKSB7CiAgICAgICAgICAgIHNpemUrKzsKICAgICAgICAgICAgYnVmZmVySW5kZXgtLTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChidWZmZXJJbmRleCkgYnJlYWs7CiAgICAgICAgICBidWZmZXJJbmRleCA9IC0xOwogICAgICAgIH0gZWxzZSBpZiAoY2h1bmsgPT09IC0yKSB7CiAgICAgICAgICB0YWJzID0gdHJ1ZTsKICAgICAgICAgIHNpemUrKzsKICAgICAgICB9IGVsc2UgaWYgKGNodW5rID09PSAtMSkgewogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbmRleDIrKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoY29udGV4dDIuX2NvbnRlbnRUeXBlVGV4dFRyYWlsaW5nICYmIGV2ZW50SW5kZXggPT09IGV2ZW50cy5sZW5ndGgpIHsKICAgICAgICBzaXplID0gMDsKICAgICAgfQogICAgICBpZiAoc2l6ZSkgewogICAgICAgIGNvbnN0IHRva2VuID0gewogICAgICAgICAgdHlwZTogZXZlbnRJbmRleCA9PT0gZXZlbnRzLmxlbmd0aCB8fCB0YWJzIHx8IHNpemUgPCAyID8gImxpbmVTdWZmaXgiIDogImhhcmRCcmVha1RyYWlsaW5nIiwKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIF9idWZmZXJJbmRleDogaW5kZXgyID8gYnVmZmVySW5kZXggOiBkYXRhLnN0YXJ0Ll9idWZmZXJJbmRleCArIGJ1ZmZlckluZGV4LAogICAgICAgICAgICBfaW5kZXg6IGRhdGEuc3RhcnQuX2luZGV4ICsgaW5kZXgyLAogICAgICAgICAgICBsaW5lOiBkYXRhLmVuZC5saW5lLAogICAgICAgICAgICBjb2x1bW46IGRhdGEuZW5kLmNvbHVtbiAtIHNpemUsCiAgICAgICAgICAgIG9mZnNldDogZGF0YS5lbmQub2Zmc2V0IC0gc2l6ZQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICAuLi5kYXRhLmVuZAogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgZGF0YS5lbmQgPSB7CiAgICAgICAgICAuLi50b2tlbi5zdGFydAogICAgICAgIH07CiAgICAgICAgaWYgKGRhdGEuc3RhcnQub2Zmc2V0ID09PSBkYXRhLmVuZC5vZmZzZXQpIHsKICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YSwgdG9rZW4pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBldmVudHMuc3BsaWNlKGV2ZW50SW5kZXgsIDAsIFsiZW50ZXIiLCB0b2tlbiwgY29udGV4dDJdLCBbImV4aXQiLCB0b2tlbiwgY29udGV4dDJdKTsKICAgICAgICAgIGV2ZW50SW5kZXggKz0gMjsKICAgICAgICB9CiAgICAgIH0KICAgICAgZXZlbnRJbmRleCsrOwogICAgfQogIH0KICByZXR1cm4gZXZlbnRzOwp9CnZhciByZXNvbHZlciwgc3RyaW5nLCB0ZXh0MzsKdmFyIGluaXRfdGV4dDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvaW5pdGlhbGl6ZS90ZXh0LmpzIigpIHsKICAgIHJlc29sdmVyID0gewogICAgICByZXNvbHZlQWxsOiBjcmVhdGVSZXNvbHZlcigpCiAgICB9OwogICAgc3RyaW5nID0gaW5pdGlhbGl6ZUZhY3RvcnkoInN0cmluZyIpOwogICAgdGV4dDMgPSBpbml0aWFsaXplRmFjdG9yeSgidGV4dCIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2NvbnN0cnVjdHMuanMKdmFyIGNvbnN0cnVjdHNfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChjb25zdHJ1Y3RzX2V4cG9ydHMsIHsKICBhdHRlbnRpb25NYXJrZXJzOiAoKSA9PiBhdHRlbnRpb25NYXJrZXJzLAogIGNvbnRlbnRJbml0aWFsOiAoKSA9PiBjb250ZW50SW5pdGlhbCwKICBkaXNhYmxlOiAoKSA9PiBkaXNhYmxlLAogIGRvY3VtZW50OiAoKSA9PiBkb2N1bWVudDMsCiAgZmxvdzogKCkgPT4gZmxvdzIsCiAgZmxvd0luaXRpYWw6ICgpID0+IGZsb3dJbml0aWFsLAogIGluc2lkZVNwYW46ICgpID0+IGluc2lkZVNwYW4sCiAgc3RyaW5nOiAoKSA9PiBzdHJpbmcyLAogIHRleHQ6ICgpID0+IHRleHQ0Cn0pOwp2YXIgZG9jdW1lbnQzLCBjb250ZW50SW5pdGlhbCwgZmxvd0luaXRpYWwsIGZsb3cyLCBzdHJpbmcyLCB0ZXh0NCwgaW5zaWRlU3BhbiwgYXR0ZW50aW9uTWFya2VycywgZGlzYWJsZTsKdmFyIGluaXRfY29uc3RydWN0cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9jb25zdHJ1Y3RzLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2NvcmVfY29tbW9ubWFyaygpOwogICAgaW5pdF90ZXh0MigpOwogICAgZG9jdW1lbnQzID0gewogICAgICBbNDJdOiBsaXN0MywKICAgICAgWzQzXTogbGlzdDMsCiAgICAgIFs0NV06IGxpc3QzLAogICAgICBbNDhdOiBsaXN0MywKICAgICAgWzQ5XTogbGlzdDMsCiAgICAgIFs1MF06IGxpc3QzLAogICAgICBbNTFdOiBsaXN0MywKICAgICAgWzUyXTogbGlzdDMsCiAgICAgIFs1M106IGxpc3QzLAogICAgICBbNTRdOiBsaXN0MywKICAgICAgWzU1XTogbGlzdDMsCiAgICAgIFs1Nl06IGxpc3QzLAogICAgICBbNTddOiBsaXN0MywKICAgICAgWzYyXTogYmxvY2tRdW90ZQogICAgfTsKICAgIGNvbnRlbnRJbml0aWFsID0gewogICAgICBbOTFdOiBkZWZpbml0aW9uMgogICAgfTsKICAgIGZsb3dJbml0aWFsID0gewogICAgICBbLTJdOiBjb2RlSW5kZW50ZWQsCiAgICAgIFstMV06IGNvZGVJbmRlbnRlZCwKICAgICAgWzMyXTogY29kZUluZGVudGVkCiAgICB9OwogICAgZmxvdzIgPSB7CiAgICAgIFszNV06IGhlYWRpbmdBdHgsCiAgICAgIFs0Ml06IHRoZW1hdGljQnJlYWsyLAogICAgICBbNDVdOiBbc2V0ZXh0VW5kZXJsaW5lLCB0aGVtYXRpY0JyZWFrMl0sCiAgICAgIFs2MF06IGh0bWxGbG93LAogICAgICBbNjFdOiBzZXRleHRVbmRlcmxpbmUsCiAgICAgIFs5NV06IHRoZW1hdGljQnJlYWsyLAogICAgICBbOTZdOiBjb2RlRmVuY2VkLAogICAgICBbMTI2XTogY29kZUZlbmNlZAogICAgfTsKICAgIHN0cmluZzIgPSB7CiAgICAgIFszOF06IGNoYXJhY3RlclJlZmVyZW5jZSwKICAgICAgWzkyXTogY2hhcmFjdGVyRXNjYXBlCiAgICB9OwogICAgdGV4dDQgPSB7CiAgICAgIFstNV06IGxpbmVFbmRpbmcsCiAgICAgIFstNF06IGxpbmVFbmRpbmcsCiAgICAgIFstM106IGxpbmVFbmRpbmcsCiAgICAgIFszM106IGxhYmVsU3RhcnRJbWFnZSwKICAgICAgWzM4XTogY2hhcmFjdGVyUmVmZXJlbmNlLAogICAgICBbNDJdOiBhdHRlbnRpb24sCiAgICAgIFs2MF06IFthdXRvbGluaywgaHRtbFRleHRdLAogICAgICBbOTFdOiBsYWJlbFN0YXJ0TGluaywKICAgICAgWzkyXTogW2hhcmRCcmVha0VzY2FwZSwgY2hhcmFjdGVyRXNjYXBlXSwKICAgICAgWzkzXTogbGFiZWxFbmQsCiAgICAgIFs5NV06IGF0dGVudGlvbiwKICAgICAgWzk2XTogY29kZVRleHQKICAgIH07CiAgICBpbnNpZGVTcGFuID0gewogICAgICBudWxsOiBbYXR0ZW50aW9uLCByZXNvbHZlcl0KICAgIH07CiAgICBhdHRlbnRpb25NYXJrZXJzID0gewogICAgICBudWxsOiBbNDIsIDk1XQogICAgfTsKICAgIGRpc2FibGUgPSB7CiAgICAgIG51bGw6IFtdCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2NyZWF0ZS10b2tlbml6ZXIuanMKZnVuY3Rpb24gY3JlYXRlVG9rZW5pemVyKHBhcnNlciwgaW5pdGlhbGl6ZSwgZnJvbTIpIHsKICBsZXQgcG9pbnQ0ID0gewogICAgX2J1ZmZlckluZGV4OiAtMSwKICAgIF9pbmRleDogMCwKICAgIGxpbmU6IGZyb20yICYmIGZyb20yLmxpbmUgfHwgMSwKICAgIGNvbHVtbjogZnJvbTIgJiYgZnJvbTIuY29sdW1uIHx8IDEsCiAgICBvZmZzZXQ6IGZyb20yICYmIGZyb20yLm9mZnNldCB8fCAwCiAgfTsKICBjb25zdCBjb2x1bW5TdGFydCA9IHt9OwogIGNvbnN0IHJlc29sdmVBbGxDb25zdHJ1Y3RzID0gW107CiAgbGV0IGNodW5rcyA9IFtdOwogIGxldCBzdGFjayA9IFtdOwogIGxldCBjb25zdW1lZCA9IHRydWU7CiAgY29uc3QgZWZmZWN0cyA9IHsKICAgIGF0dGVtcHQ6IGNvbnN0cnVjdEZhY3Rvcnkob25zdWNjZXNzZnVsY29uc3RydWN0KSwKICAgIGNoZWNrOiBjb25zdHJ1Y3RGYWN0b3J5KG9uc3VjY2Vzc2Z1bGNoZWNrKSwKICAgIGNvbnN1bWUsCiAgICBlbnRlciwKICAgIGV4aXQ6IGV4aXQzLAogICAgaW50ZXJydXB0OiBjb25zdHJ1Y3RGYWN0b3J5KG9uc3VjY2Vzc2Z1bGNoZWNrLCB7CiAgICAgIGludGVycnVwdDogdHJ1ZQogICAgfSkKICB9OwogIGNvbnN0IGNvbnRleHQyID0gewogICAgY29kZTogbnVsbCwKICAgIGNvbnRhaW5lclN0YXRlOiB7fSwKICAgIGRlZmluZVNraXAsCiAgICBldmVudHM6IFtdLAogICAgbm93OiBub3cyLAogICAgcGFyc2VyLAogICAgcHJldmlvdXM6IG51bGwsCiAgICBzbGljZVNlcmlhbGl6ZSwKICAgIHNsaWNlU3RyZWFtLAogICAgd3JpdGUKICB9OwogIGxldCBzdGF0ZTE0ID0gaW5pdGlhbGl6ZS50b2tlbml6ZS5jYWxsKGNvbnRleHQyLCBlZmZlY3RzKTsKICBsZXQgZXhwZWN0ZWRDb2RlOwogIGlmIChpbml0aWFsaXplLnJlc29sdmVBbGwpIHsKICAgIHJlc29sdmVBbGxDb25zdHJ1Y3RzLnB1c2goaW5pdGlhbGl6ZSk7CiAgfQogIHJldHVybiBjb250ZXh0MjsKICBmdW5jdGlvbiB3cml0ZShzbGljZSkgewogICAgY2h1bmtzID0gcHVzaChjaHVua3MsIHNsaWNlKTsKICAgIG1haW4oKTsKICAgIGlmIChjaHVua3NbY2h1bmtzLmxlbmd0aCAtIDFdICE9PSBudWxsKSB7CiAgICAgIHJldHVybiBbXTsKICAgIH0KICAgIGFkZFJlc3VsdChpbml0aWFsaXplLCAwKTsKICAgIGNvbnRleHQyLmV2ZW50cyA9IHJlc29sdmVBbGwocmVzb2x2ZUFsbENvbnN0cnVjdHMsIGNvbnRleHQyLmV2ZW50cywgY29udGV4dDIpOwogICAgcmV0dXJuIGNvbnRleHQyLmV2ZW50czsKICB9CiAgZnVuY3Rpb24gc2xpY2VTZXJpYWxpemUodG9rZW4sIGV4cGFuZFRhYnMpIHsKICAgIHJldHVybiBzZXJpYWxpemVDaHVua3Moc2xpY2VTdHJlYW0odG9rZW4pLCBleHBhbmRUYWJzKTsKICB9CiAgZnVuY3Rpb24gc2xpY2VTdHJlYW0odG9rZW4pIHsKICAgIHJldHVybiBzbGljZUNodW5rcyhjaHVua3MsIHRva2VuKTsKICB9CiAgZnVuY3Rpb24gbm93MigpIHsKICAgIGNvbnN0IHsKICAgICAgX2J1ZmZlckluZGV4LAogICAgICBfaW5kZXgsCiAgICAgIGxpbmUsCiAgICAgIGNvbHVtbiwKICAgICAgb2Zmc2V0CiAgICB9ID0gcG9pbnQ0OwogICAgcmV0dXJuIHsKICAgICAgX2J1ZmZlckluZGV4LAogICAgICBfaW5kZXgsCiAgICAgIGxpbmUsCiAgICAgIGNvbHVtbiwKICAgICAgb2Zmc2V0CiAgICB9OwogIH0KICBmdW5jdGlvbiBkZWZpbmVTa2lwKHZhbHVlMikgewogICAgY29sdW1uU3RhcnRbdmFsdWUyLmxpbmVdID0gdmFsdWUyLmNvbHVtbjsKICAgIGFjY291bnRGb3JQb3RlbnRpYWxTa2lwKCk7CiAgfQogIGZ1bmN0aW9uIG1haW4oKSB7CiAgICBsZXQgY2h1bmtJbmRleDsKICAgIHdoaWxlIChwb2ludDQuX2luZGV4IDwgY2h1bmtzLmxlbmd0aCkgewogICAgICBjb25zdCBjaHVuayA9IGNodW5rc1twb2ludDQuX2luZGV4XTsKICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gInN0cmluZyIpIHsKICAgICAgICBjaHVua0luZGV4ID0gcG9pbnQ0Ll9pbmRleDsKICAgICAgICBpZiAocG9pbnQ0Ll9idWZmZXJJbmRleCA8IDApIHsKICAgICAgICAgIHBvaW50NC5fYnVmZmVySW5kZXggPSAwOwogICAgICAgIH0KICAgICAgICB3aGlsZSAocG9pbnQ0Ll9pbmRleCA9PT0gY2h1bmtJbmRleCAmJiBwb2ludDQuX2J1ZmZlckluZGV4IDwgY2h1bmsubGVuZ3RoKSB7CiAgICAgICAgICBnbyhjaHVuay5jaGFyQ29kZUF0KHBvaW50NC5fYnVmZmVySW5kZXgpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZ28oY2h1bmspOwogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIGdvKGNvZGU0KSB7CiAgICBjb25zdW1lZCA9IHZvaWQgMDsKICAgIGV4cGVjdGVkQ29kZSA9IGNvZGU0OwogICAgc3RhdGUxNCA9IHN0YXRlMTQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb25zdW1lKGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBwb2ludDQubGluZSsrOwogICAgICBwb2ludDQuY29sdW1uID0gMTsKICAgICAgcG9pbnQ0Lm9mZnNldCArPSBjb2RlNCA9PT0gLTMgPyAyIDogMTsKICAgICAgYWNjb3VudEZvclBvdGVudGlhbFNraXAoKTsKICAgIH0gZWxzZSBpZiAoY29kZTQgIT09IC0xKSB7CiAgICAgIHBvaW50NC5jb2x1bW4rKzsKICAgICAgcG9pbnQ0Lm9mZnNldCsrOwogICAgfQogICAgaWYgKHBvaW50NC5fYnVmZmVySW5kZXggPCAwKSB7CiAgICAgIHBvaW50NC5faW5kZXgrKzsKICAgIH0gZWxzZSB7CiAgICAgIHBvaW50NC5fYnVmZmVySW5kZXgrKzsKICAgICAgaWYgKHBvaW50NC5fYnVmZmVySW5kZXggPT09IC8vIFBvaW50cyB3LyBub24tbmVnYXRpdmUgYF9idWZmZXJJbmRleGAgcmVmZXJlbmNlCiAgICAgIC8vIHN0cmluZ3MuCiAgICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqLwogICAgICBjaHVua3NbcG9pbnQ0Ll9pbmRleF0ubGVuZ3RoKSB7CiAgICAgICAgcG9pbnQ0Ll9idWZmZXJJbmRleCA9IC0xOwogICAgICAgIHBvaW50NC5faW5kZXgrKzsKICAgICAgfQogICAgfQogICAgY29udGV4dDIucHJldmlvdXMgPSBjb2RlNDsKICAgIGNvbnN1bWVkID0gdHJ1ZTsKICB9CiAgZnVuY3Rpb24gZW50ZXIodHlwZTUsIGZpZWxkcykgewogICAgY29uc3QgdG9rZW4gPSBmaWVsZHMgfHwge307CiAgICB0b2tlbi50eXBlID0gdHlwZTU7CiAgICB0b2tlbi5zdGFydCA9IG5vdzIoKTsKICAgIGNvbnRleHQyLmV2ZW50cy5wdXNoKFsiZW50ZXIiLCB0b2tlbiwgY29udGV4dDJdKTsKICAgIHN0YWNrLnB1c2godG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KICBmdW5jdGlvbiBleGl0Myh0eXBlNSkgewogICAgY29uc3QgdG9rZW4gPSBzdGFjay5wb3AoKTsKICAgIHRva2VuLmVuZCA9IG5vdzIoKTsKICAgIGNvbnRleHQyLmV2ZW50cy5wdXNoKFsiZXhpdCIsIHRva2VuLCBjb250ZXh0Ml0pOwogICAgcmV0dXJuIHRva2VuOwogIH0KICBmdW5jdGlvbiBvbnN1Y2Nlc3NmdWxjb25zdHJ1Y3QoY29uc3RydWN0LCBpbmZvKSB7CiAgICBhZGRSZXN1bHQoY29uc3RydWN0LCBpbmZvLmZyb20pOwogIH0KICBmdW5jdGlvbiBvbnN1Y2Nlc3NmdWxjaGVjayhfNCwgaW5mbykgewogICAgaW5mby5yZXN0b3JlKCk7CiAgfQogIGZ1bmN0aW9uIGNvbnN0cnVjdEZhY3Rvcnkob25yZXR1cm4sIGZpZWxkcykgewogICAgcmV0dXJuIGhvb2s7CiAgICBmdW5jdGlvbiBob29rKGNvbnN0cnVjdHMyLCByZXR1cm5TdGF0ZSwgYm9ndXNTdGF0ZSkgewogICAgICBsZXQgbGlzdE9mQ29uc3RydWN0czsKICAgICAgbGV0IGNvbnN0cnVjdEluZGV4OwogICAgICBsZXQgY3VycmVudENvbnN0cnVjdDsKICAgICAgbGV0IGluZm87CiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGNvbnN0cnVjdHMyKSA/ICgKICAgICAgICAvKiBjOCBpZ25vcmUgbmV4dCAxICovCiAgICAgICAgaGFuZGxlTGlzdE9mQ29uc3RydWN0cyhjb25zdHJ1Y3RzMikKICAgICAgKSA6ICJ0b2tlbml6ZSIgaW4gY29uc3RydWN0czIgPyAoCiAgICAgICAgLy8gTG9va3MgbGlrZSBhIGNvbnN0cnVjdC4KICAgICAgICBoYW5kbGVMaXN0T2ZDb25zdHJ1Y3RzKFsKICAgICAgICAgIC8qKiBAdHlwZSB7Q29uc3RydWN0fSAqLwogICAgICAgICAgY29uc3RydWN0czIKICAgICAgICBdKQogICAgICApIDogaGFuZGxlTWFwT2ZDb25zdHJ1Y3RzKGNvbnN0cnVjdHMyKTsKICAgICAgZnVuY3Rpb24gaGFuZGxlTWFwT2ZDb25zdHJ1Y3RzKG1hcDcpIHsKICAgICAgICByZXR1cm4gc3RhcnQ7CiAgICAgICAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgICAgICAgIGNvbnN0IGxlZnQgPSBjb2RlNCAhPT0gbnVsbCAmJiBtYXA3W2NvZGU0XTsKICAgICAgICAgIGNvbnN0IGFsbDMgPSBjb2RlNCAhPT0gbnVsbCAmJiBtYXA3Lm51bGw7CiAgICAgICAgICBjb25zdCBsaXN0NSA9IFsKICAgICAgICAgICAgLy8gVG8gZG86IGFkZCBtb3JlIGV4dGVuc2lvbiB0ZXN0cy4KICAgICAgICAgICAgLyogYzggaWdub3JlIG5leHQgMiAqLwogICAgICAgICAgICAuLi5BcnJheS5pc0FycmF5KGxlZnQpID8gbGVmdCA6IGxlZnQgPyBbbGVmdF0gOiBbXSwKICAgICAgICAgICAgLi4uQXJyYXkuaXNBcnJheShhbGwzKSA/IGFsbDMgOiBhbGwzID8gW2FsbDNdIDogW10KICAgICAgICAgIF07CiAgICAgICAgICByZXR1cm4gaGFuZGxlTGlzdE9mQ29uc3RydWN0cyhsaXN0NSkoY29kZTQpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBoYW5kbGVMaXN0T2ZDb25zdHJ1Y3RzKGxpc3Q1KSB7CiAgICAgICAgbGlzdE9mQ29uc3RydWN0cyA9IGxpc3Q1OwogICAgICAgIGNvbnN0cnVjdEluZGV4ID0gMDsKICAgICAgICBpZiAobGlzdDUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gYm9ndXNTdGF0ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGhhbmRsZUNvbnN0cnVjdChsaXN0NVtjb25zdHJ1Y3RJbmRleF0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGhhbmRsZUNvbnN0cnVjdChjb25zdHJ1Y3QpIHsKICAgICAgICByZXR1cm4gc3RhcnQ7CiAgICAgICAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgICAgICAgIGluZm8gPSBzdG9yZSgpOwogICAgICAgICAgY3VycmVudENvbnN0cnVjdCA9IGNvbnN0cnVjdDsKICAgICAgICAgIGlmICghY29uc3RydWN0LnBhcnRpYWwpIHsKICAgICAgICAgICAgY29udGV4dDIuY3VycmVudENvbnN0cnVjdCA9IGNvbnN0cnVjdDsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjb25zdHJ1Y3QubmFtZSAmJiBjb250ZXh0Mi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoY29uc3RydWN0Lm5hbWUpKSB7CiAgICAgICAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdC50b2tlbml6ZS5jYWxsKAogICAgICAgICAgICAvLyBJZiB3ZSBkbyBoYXZlIGZpZWxkcywgY3JlYXRlIGFuIG9iamVjdCB3LyBgY29udGV4dGAgYXMgaXRzCiAgICAgICAgICAgIC8vIHByb3RvdHlwZS4KICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgYSDigJxsaXZlIGJpbmRpbmfigJ0sIHdoaWNoIGlzIG5lZWRlZCBmb3IgYGludGVycnVwdGAuCiAgICAgICAgICAgIGZpZWxkcyA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShjb250ZXh0MiksIGZpZWxkcykgOiBjb250ZXh0MiwKICAgICAgICAgICAgZWZmZWN0cywKICAgICAgICAgICAgb2szLAogICAgICAgICAgICBub2sKICAgICAgICAgICkoY29kZTQpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBvazMoY29kZTQpIHsKICAgICAgICBjb25zdW1lZCA9IHRydWU7CiAgICAgICAgb25yZXR1cm4oY3VycmVudENvbnN0cnVjdCwgaW5mbyk7CiAgICAgICAgcmV0dXJuIHJldHVyblN0YXRlOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIG5vayhjb2RlNCkgewogICAgICAgIGNvbnN1bWVkID0gdHJ1ZTsKICAgICAgICBpbmZvLnJlc3RvcmUoKTsKICAgICAgICBpZiAoKytjb25zdHJ1Y3RJbmRleCA8IGxpc3RPZkNvbnN0cnVjdHMubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gaGFuZGxlQ29uc3RydWN0KGxpc3RPZkNvbnN0cnVjdHNbY29uc3RydWN0SW5kZXhdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJvZ3VzU3RhdGU7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gYWRkUmVzdWx0KGNvbnN0cnVjdCwgZnJvbTMpIHsKICAgIGlmIChjb25zdHJ1Y3QucmVzb2x2ZUFsbCAmJiAhcmVzb2x2ZUFsbENvbnN0cnVjdHMuaW5jbHVkZXMoY29uc3RydWN0KSkgewogICAgICByZXNvbHZlQWxsQ29uc3RydWN0cy5wdXNoKGNvbnN0cnVjdCk7CiAgICB9CiAgICBpZiAoY29uc3RydWN0LnJlc29sdmUpIHsKICAgICAgc3BsaWNlKGNvbnRleHQyLmV2ZW50cywgZnJvbTMsIGNvbnRleHQyLmV2ZW50cy5sZW5ndGggLSBmcm9tMywgY29uc3RydWN0LnJlc29sdmUoY29udGV4dDIuZXZlbnRzLnNsaWNlKGZyb20zKSwgY29udGV4dDIpKTsKICAgIH0KICAgIGlmIChjb25zdHJ1Y3QucmVzb2x2ZVRvKSB7CiAgICAgIGNvbnRleHQyLmV2ZW50cyA9IGNvbnN0cnVjdC5yZXNvbHZlVG8oY29udGV4dDIuZXZlbnRzLCBjb250ZXh0Mik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHN0b3JlKCkgewogICAgY29uc3Qgc3RhcnRQb2ludCA9IG5vdzIoKTsKICAgIGNvbnN0IHN0YXJ0UHJldmlvdXMgPSBjb250ZXh0Mi5wcmV2aW91czsKICAgIGNvbnN0IHN0YXJ0Q3VycmVudENvbnN0cnVjdCA9IGNvbnRleHQyLmN1cnJlbnRDb25zdHJ1Y3Q7CiAgICBjb25zdCBzdGFydEV2ZW50c0luZGV4ID0gY29udGV4dDIuZXZlbnRzLmxlbmd0aDsKICAgIGNvbnN0IHN0YXJ0U3RhY2sgPSBBcnJheS5mcm9tKHN0YWNrKTsKICAgIHJldHVybiB7CiAgICAgIGZyb206IHN0YXJ0RXZlbnRzSW5kZXgsCiAgICAgIHJlc3RvcmUKICAgIH07CiAgICBmdW5jdGlvbiByZXN0b3JlKCkgewogICAgICBwb2ludDQgPSBzdGFydFBvaW50OwogICAgICBjb250ZXh0Mi5wcmV2aW91cyA9IHN0YXJ0UHJldmlvdXM7CiAgICAgIGNvbnRleHQyLmN1cnJlbnRDb25zdHJ1Y3QgPSBzdGFydEN1cnJlbnRDb25zdHJ1Y3Q7CiAgICAgIGNvbnRleHQyLmV2ZW50cy5sZW5ndGggPSBzdGFydEV2ZW50c0luZGV4OwogICAgICBzdGFjayA9IHN0YXJ0U3RhY2s7CiAgICAgIGFjY291bnRGb3JQb3RlbnRpYWxTa2lwKCk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGFjY291bnRGb3JQb3RlbnRpYWxTa2lwKCkgewogICAgaWYgKHBvaW50NC5saW5lIGluIGNvbHVtblN0YXJ0ICYmIHBvaW50NC5jb2x1bW4gPCAyKSB7CiAgICAgIHBvaW50NC5jb2x1bW4gPSBjb2x1bW5TdGFydFtwb2ludDQubGluZV07CiAgICAgIHBvaW50NC5vZmZzZXQgKz0gY29sdW1uU3RhcnRbcG9pbnQ0LmxpbmVdIC0gMTsKICAgIH0KICB9Cn0KZnVuY3Rpb24gc2xpY2VDaHVua3MoY2h1bmtzLCB0b2tlbikgewogIGNvbnN0IHN0YXJ0SW5kZXggPSB0b2tlbi5zdGFydC5faW5kZXg7CiAgY29uc3Qgc3RhcnRCdWZmZXJJbmRleCA9IHRva2VuLnN0YXJ0Ll9idWZmZXJJbmRleDsKICBjb25zdCBlbmRJbmRleCA9IHRva2VuLmVuZC5faW5kZXg7CiAgY29uc3QgZW5kQnVmZmVySW5kZXggPSB0b2tlbi5lbmQuX2J1ZmZlckluZGV4OwogIGxldCB2aWV3OwogIGlmIChzdGFydEluZGV4ID09PSBlbmRJbmRleCkgewogICAgdmlldyA9IFtjaHVua3Nbc3RhcnRJbmRleF0uc2xpY2Uoc3RhcnRCdWZmZXJJbmRleCwgZW5kQnVmZmVySW5kZXgpXTsKICB9IGVsc2UgewogICAgdmlldyA9IGNodW5rcy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7CiAgICBpZiAoc3RhcnRCdWZmZXJJbmRleCA+IC0xKSB7CiAgICAgIGNvbnN0IGhlYWQyID0gdmlld1swXTsKICAgICAgaWYgKHR5cGVvZiBoZWFkMiA9PT0gInN0cmluZyIpIHsKICAgICAgICB2aWV3WzBdID0gaGVhZDIuc2xpY2Uoc3RhcnRCdWZmZXJJbmRleCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmlldy5zaGlmdCgpOwogICAgICB9CiAgICB9CiAgICBpZiAoZW5kQnVmZmVySW5kZXggPiAwKSB7CiAgICAgIHZpZXcucHVzaChjaHVua3NbZW5kSW5kZXhdLnNsaWNlKDAsIGVuZEJ1ZmZlckluZGV4KSk7CiAgICB9CiAgfQogIHJldHVybiB2aWV3Owp9CmZ1bmN0aW9uIHNlcmlhbGl6ZUNodW5rcyhjaHVua3MsIGV4cGFuZFRhYnMpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgY29uc3QgcmVzdWx0ID0gW107CiAgbGV0IGF0VGFiOwogIHdoaWxlICgrK2luZGV4MiA8IGNodW5rcy5sZW5ndGgpIHsKICAgIGNvbnN0IGNodW5rID0gY2h1bmtzW2luZGV4Ml07CiAgICBsZXQgdmFsdWUyOwogICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gInN0cmluZyIpIHsKICAgICAgdmFsdWUyID0gY2h1bms7CiAgICB9IGVsc2Ugc3dpdGNoIChjaHVuaykgewogICAgICBjYXNlIC01OiB7CiAgICAgICAgdmFsdWUyID0gIlxyIjsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIC00OiB7CiAgICAgICAgdmFsdWUyID0gIlxuIjsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIC0zOiB7CiAgICAgICAgdmFsdWUyID0gIlxyXG4iOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgLTI6IHsKICAgICAgICB2YWx1ZTIgPSBleHBhbmRUYWJzID8gIiAiIDogIgkiOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgLTE6IHsKICAgICAgICBpZiAoIWV4cGFuZFRhYnMgJiYgYXRUYWIpIGNvbnRpbnVlOwogICAgICAgIHZhbHVlMiA9ICIgIjsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBkZWZhdWx0OiB7CiAgICAgICAgdmFsdWUyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaHVuayk7CiAgICAgIH0KICAgIH0KICAgIGF0VGFiID0gY2h1bmsgPT09IC0yOwogICAgcmVzdWx0LnB1c2godmFsdWUyKTsKICB9CiAgcmV0dXJuIHJlc3VsdC5qb2luKCIiKTsKfQp2YXIgaW5pdF9jcmVhdGVfdG9rZW5pemVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2NyZWF0ZS10b2tlbml6ZXIuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9yZXNvbHZlX2FsbCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL3BhcnNlLmpzCmZ1bmN0aW9uIHBhcnNlNChvcHRpb25zKSB7CiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9OwogIGNvbnN0IGNvbnN0cnVjdHMyID0gKAogICAgLyoqIEB0eXBlIHtGdWxsTm9ybWFsaXplZEV4dGVuc2lvbn0gKi8KICAgIGNvbWJpbmVFeHRlbnNpb25zKFtjb25zdHJ1Y3RzX2V4cG9ydHMsIC4uLnNldHRpbmdzLmV4dGVuc2lvbnMgfHwgW11dKQogICk7CiAgY29uc3QgcGFyc2VyID0gewogICAgY29uc3RydWN0czogY29uc3RydWN0czIsCiAgICBjb250ZW50OiBjcmVhdGU3KGNvbnRlbnQyKSwKICAgIGRlZmluZWQ6IFtdLAogICAgZG9jdW1lbnQ6IGNyZWF0ZTcoZG9jdW1lbnQyKSwKICAgIGZsb3c6IGNyZWF0ZTcoZmxvdyksCiAgICBsYXp5OiB7fSwKICAgIHN0cmluZzogY3JlYXRlNyhzdHJpbmcpLAogICAgdGV4dDogY3JlYXRlNyh0ZXh0MykKICB9OwogIHJldHVybiBwYXJzZXI7CiAgZnVuY3Rpb24gY3JlYXRlNyhpbml0aWFsMikgewogICAgcmV0dXJuIGNyZWF0b3I7CiAgICBmdW5jdGlvbiBjcmVhdG9yKGZyb20yKSB7CiAgICAgIHJldHVybiBjcmVhdGVUb2tlbml6ZXIocGFyc2VyLCBpbml0aWFsMiwgZnJvbTIpOwogICAgfQogIH0KfQp2YXIgaW5pdF9wYXJzZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvcGFyc2UuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jb21iaW5lX2V4dGVuc2lvbnMoKTsKICAgIGluaXRfY29udGVudDIoKTsKICAgIGluaXRfZG9jdW1lbnQoKTsKICAgIGluaXRfZmxvdygpOwogICAgaW5pdF90ZXh0MigpOwogICAgaW5pdF9jb25zdHJ1Y3RzKCk7CiAgICBpbml0X2NyZWF0ZV90b2tlbml6ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9wb3N0cHJvY2Vzcy5qcwpmdW5jdGlvbiBwb3N0cHJvY2VzcyhldmVudHMpIHsKICB3aGlsZSAoIXN1YnRva2VuaXplKGV2ZW50cykpIHsKICB9CiAgcmV0dXJuIGV2ZW50czsKfQp2YXIgaW5pdF9wb3N0cHJvY2VzcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9wb3N0cHJvY2Vzcy5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX3N1YnRva2VuaXplKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvcHJlcHJvY2Vzcy5qcwpmdW5jdGlvbiBwcmVwcm9jZXNzKCkgewogIGxldCBjb2x1bW4gPSAxOwogIGxldCBidWZmZXIyID0gIiI7CiAgbGV0IHN0YXJ0ID0gdHJ1ZTsKICBsZXQgYXRDYXJyaWFnZVJldHVybjsKICByZXR1cm4gcHJlcHJvY2Vzc29yOwogIGZ1bmN0aW9uIHByZXByb2Nlc3Nvcih2YWx1ZTIsIGVuY29kaW5nLCBlbmQzKSB7CiAgICBjb25zdCBjaHVua3MgPSBbXTsKICAgIGxldCBtYXRjaDI7CiAgICBsZXQgbmV4dDI7CiAgICBsZXQgc3RhcnRQb3NpdGlvbjsKICAgIGxldCBlbmRQb3NpdGlvbjsKICAgIGxldCBjb2RlNDsKICAgIHZhbHVlMiA9IGJ1ZmZlcjIgKyAodHlwZW9mIHZhbHVlMiA9PT0gInN0cmluZyIgPyB2YWx1ZTIudG9TdHJpbmcoKSA6IG5ldyBUZXh0RGVjb2RlcihlbmNvZGluZyB8fCB2b2lkIDApLmRlY29kZSh2YWx1ZTIpKTsKICAgIHN0YXJ0UG9zaXRpb24gPSAwOwogICAgYnVmZmVyMiA9ICIiOwogICAgaWYgKHN0YXJ0KSB7CiAgICAgIGlmICh2YWx1ZTIuY2hhckNvZGVBdCgwKSA9PT0gNjUyNzkpIHsKICAgICAgICBzdGFydFBvc2l0aW9uKys7CiAgICAgIH0KICAgICAgc3RhcnQgPSB2b2lkIDA7CiAgICB9CiAgICB3aGlsZSAoc3RhcnRQb3NpdGlvbiA8IHZhbHVlMi5sZW5ndGgpIHsKICAgICAgc2VhcmNoLmxhc3RJbmRleCA9IHN0YXJ0UG9zaXRpb247CiAgICAgIG1hdGNoMiA9IHNlYXJjaC5leGVjKHZhbHVlMik7CiAgICAgIGVuZFBvc2l0aW9uID0gbWF0Y2gyICYmIG1hdGNoMi5pbmRleCAhPT0gdm9pZCAwID8gbWF0Y2gyLmluZGV4IDogdmFsdWUyLmxlbmd0aDsKICAgICAgY29kZTQgPSB2YWx1ZTIuY2hhckNvZGVBdChlbmRQb3NpdGlvbik7CiAgICAgIGlmICghbWF0Y2gyKSB7CiAgICAgICAgYnVmZmVyMiA9IHZhbHVlMi5zbGljZShzdGFydFBvc2l0aW9uKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpZiAoY29kZTQgPT09IDEwICYmIHN0YXJ0UG9zaXRpb24gPT09IGVuZFBvc2l0aW9uICYmIGF0Q2FycmlhZ2VSZXR1cm4pIHsKICAgICAgICBjaHVua3MucHVzaCgtMyk7CiAgICAgICAgYXRDYXJyaWFnZVJldHVybiA9IHZvaWQgMDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoYXRDYXJyaWFnZVJldHVybikgewogICAgICAgICAgY2h1bmtzLnB1c2goLTUpOwogICAgICAgICAgYXRDYXJyaWFnZVJldHVybiA9IHZvaWQgMDsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbikgewogICAgICAgICAgY2h1bmtzLnB1c2godmFsdWUyLnNsaWNlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSk7CiAgICAgICAgICBjb2x1bW4gKz0gZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKGNvZGU0KSB7CiAgICAgICAgICBjYXNlIDA6IHsKICAgICAgICAgICAgY2h1bmtzLnB1c2goNjU1MzMpOwogICAgICAgICAgICBjb2x1bW4rKzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIDk6IHsKICAgICAgICAgICAgbmV4dDIgPSBNYXRoLmNlaWwoY29sdW1uIC8gNCkgKiA0OwogICAgICAgICAgICBjaHVua3MucHVzaCgtMik7CiAgICAgICAgICAgIHdoaWxlIChjb2x1bW4rKyA8IG5leHQyKSBjaHVua3MucHVzaCgtMSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgY2FzZSAxMDogewogICAgICAgICAgICBjaHVua3MucHVzaCgtNCk7CiAgICAgICAgICAgIGNvbHVtbiA9IDE7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICBhdENhcnJpYWdlUmV0dXJuID0gdHJ1ZTsKICAgICAgICAgICAgY29sdW1uID0gMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhcnRQb3NpdGlvbiA9IGVuZFBvc2l0aW9uICsgMTsKICAgIH0KICAgIGlmIChlbmQzKSB7CiAgICAgIGlmIChhdENhcnJpYWdlUmV0dXJuKSBjaHVua3MucHVzaCgtNSk7CiAgICAgIGlmIChidWZmZXIyKSBjaHVua3MucHVzaChidWZmZXIyKTsKICAgICAgY2h1bmtzLnB1c2gobnVsbCk7CiAgICB9CiAgICByZXR1cm4gY2h1bmtzOwogIH0KfQp2YXIgc2VhcmNoOwp2YXIgaW5pdF9wcmVwcm9jZXNzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL3ByZXByb2Nlc3MuanMiKCkgewogICAgc2VhcmNoID0gL1tcMFx0XG5ccl0vZzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2luZGV4LmpzCmZ1bmN0aW9uIG1pY3JvbWFyayh2YWx1ZTIsIGVuY29kaW5nLCBvcHRpb25zKSB7CiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gInN0cmluZyIpIHsKICAgIG9wdGlvbnMgPSBlbmNvZGluZzsKICAgIGVuY29kaW5nID0gdm9pZCAwOwogIH0KICByZXR1cm4gY29tcGlsZShvcHRpb25zKShwb3N0cHJvY2VzcyhwYXJzZTQob3B0aW9ucykuZG9jdW1lbnQoKS53cml0ZShwcmVwcm9jZXNzKCkodmFsdWUyLCBlbmNvZGluZywgdHJ1ZSkpKSk7Cn0KdmFyIGluaXRfbWljcm9tYXJrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvaW5kZXguanMiKCkgewogICAgaW5pdF9jb21waWxlKCk7CiAgICBpbml0X3BhcnNlMigpOwogICAgaW5pdF9wb3N0cHJvY2VzcygpOwogICAgaW5pdF9wcmVwcm9jZXNzKCk7CiAgICBpbml0X2NvbXBpbGUoKTsKICAgIGluaXRfcGFyc2UyKCk7CiAgICBpbml0X3Bvc3Rwcm9jZXNzKCk7CiAgICBpbml0X3ByZXByb2Nlc3MoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bkAyLjAuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBmcm9tTWFya2Rvd24odmFsdWUyLCBlbmNvZGluZywgb3B0aW9ucykgewogIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICJzdHJpbmciKSB7CiAgICBvcHRpb25zID0gZW5jb2Rpbmc7CiAgICBlbmNvZGluZyA9IHZvaWQgMDsKICB9CiAgcmV0dXJuIGNvbXBpbGVyKG9wdGlvbnMpKHBvc3Rwcm9jZXNzKHBhcnNlNChvcHRpb25zKS5kb2N1bWVudCgpLndyaXRlKHByZXByb2Nlc3MoKSh2YWx1ZTIsIGVuY29kaW5nLCB0cnVlKSkpKTsKfQpmdW5jdGlvbiBjb21waWxlcihvcHRpb25zKSB7CiAgY29uc3QgY29uZmlnMyA9IHsKICAgIHRyYW5zZm9ybXM6IFtdLAogICAgY2FuQ29udGFpbkVvbHM6IFsiZW1waGFzaXMiLCAiZnJhZ21lbnQiLCAiaGVhZGluZyIsICJwYXJhZ3JhcGgiLCAic3Ryb25nIl0sCiAgICBlbnRlcjogewogICAgICBhdXRvbGluazogb3BlbmVyMihsaW5rMyksCiAgICAgIGF1dG9saW5rUHJvdG9jb2w6IG9uZW50ZXJkYXRhLAogICAgICBhdXRvbGlua0VtYWlsOiBvbmVudGVyZGF0YSwKICAgICAgYXR4SGVhZGluZzogb3BlbmVyMihoZWFkaW5nMyksCiAgICAgIGJsb2NrUXVvdGU6IG9wZW5lcjIoYmxvY2tRdW90ZTIpLAogICAgICBjaGFyYWN0ZXJFc2NhcGU6IG9uZW50ZXJkYXRhLAogICAgICBjaGFyYWN0ZXJSZWZlcmVuY2U6IG9uZW50ZXJkYXRhLAogICAgICBjb2RlRmVuY2VkOiBvcGVuZXIyKGNvZGVGbG93KSwKICAgICAgY29kZUZlbmNlZEZlbmNlSW5mbzogYnVmZmVyMiwKICAgICAgY29kZUZlbmNlZEZlbmNlTWV0YTogYnVmZmVyMiwKICAgICAgY29kZUluZGVudGVkOiBvcGVuZXIyKGNvZGVGbG93LCBidWZmZXIyKSwKICAgICAgY29kZVRleHQ6IG9wZW5lcjIoY29kZVRleHQyLCBidWZmZXIyKSwKICAgICAgY29kZVRleHREYXRhOiBvbmVudGVyZGF0YSwKICAgICAgZGF0YTogb25lbnRlcmRhdGEsCiAgICAgIGNvZGVGbG93VmFsdWU6IG9uZW50ZXJkYXRhLAogICAgICBkZWZpbml0aW9uOiBvcGVuZXIyKGRlZmluaXRpb24zKSwKICAgICAgZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOiBidWZmZXIyLAogICAgICBkZWZpbml0aW9uTGFiZWxTdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIGRlZmluaXRpb25UaXRsZVN0cmluZzogYnVmZmVyMiwKICAgICAgZW1waGFzaXM6IG9wZW5lcjIoZW1waGFzaXMzKSwKICAgICAgaGFyZEJyZWFrRXNjYXBlOiBvcGVuZXIyKGhhcmRCcmVhazMpLAogICAgICBoYXJkQnJlYWtUcmFpbGluZzogb3BlbmVyMihoYXJkQnJlYWszKSwKICAgICAgaHRtbEZsb3c6IG9wZW5lcjIoaHRtbDIwLCBidWZmZXIyKSwKICAgICAgaHRtbEZsb3dEYXRhOiBvbmVudGVyZGF0YSwKICAgICAgaHRtbFRleHQ6IG9wZW5lcjIoaHRtbDIwLCBidWZmZXIyKSwKICAgICAgaHRtbFRleHREYXRhOiBvbmVudGVyZGF0YSwKICAgICAgaW1hZ2U6IG9wZW5lcjIoaW1hZ2UzKSwKICAgICAgbGFiZWw6IGJ1ZmZlcjIsCiAgICAgIGxpbms6IG9wZW5lcjIobGluazMpLAogICAgICBsaXN0SXRlbTogb3BlbmVyMihsaXN0SXRlbTMpLAogICAgICBsaXN0SXRlbVZhbHVlOiBvbmVudGVybGlzdGl0ZW12YWx1ZSwKICAgICAgbGlzdE9yZGVyZWQ6IG9wZW5lcjIobGlzdDUsIG9uZW50ZXJsaXN0b3JkZXJlZCksCiAgICAgIGxpc3RVbm9yZGVyZWQ6IG9wZW5lcjIobGlzdDUpLAogICAgICBwYXJhZ3JhcGg6IG9wZW5lcjIocGFyYWdyYXBoMyksCiAgICAgIHJlZmVyZW5jZTogb25lbnRlcnJlZmVyZW5jZSwKICAgICAgcmVmZXJlbmNlU3RyaW5nOiBidWZmZXIyLAogICAgICByZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOiBidWZmZXIyLAogICAgICByZXNvdXJjZVRpdGxlU3RyaW5nOiBidWZmZXIyLAogICAgICBzZXRleHRIZWFkaW5nOiBvcGVuZXIyKGhlYWRpbmczKSwKICAgICAgc3Ryb25nOiBvcGVuZXIyKHN0cm9uZzMpLAogICAgICB0aGVtYXRpY0JyZWFrOiBvcGVuZXIyKHRoZW1hdGljQnJlYWs0KQogICAgfSwKICAgIGV4aXQ6IHsKICAgICAgYXR4SGVhZGluZzogY2xvc2VyKCksCiAgICAgIGF0eEhlYWRpbmdTZXF1ZW5jZTogb25leGl0YXR4aGVhZGluZ3NlcXVlbmNlLAogICAgICBhdXRvbGluazogY2xvc2VyKCksCiAgICAgIGF1dG9saW5rRW1haWw6IG9uZXhpdGF1dG9saW5rZW1haWwsCiAgICAgIGF1dG9saW5rUHJvdG9jb2w6IG9uZXhpdGF1dG9saW5rcHJvdG9jb2wsCiAgICAgIGJsb2NrUXVvdGU6IGNsb3NlcigpLAogICAgICBjaGFyYWN0ZXJFc2NhcGVWYWx1ZTogb25leGl0ZGF0YSwKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWw6IG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlciwKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYzogb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlbWFya2VyLAogICAgICBjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZTogb25leGl0Y2hhcmFjdGVycmVmZXJlbmNldmFsdWUsCiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZTogb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlLAogICAgICBjb2RlRmVuY2VkOiBjbG9zZXIob25leGl0Y29kZWZlbmNlZCksCiAgICAgIGNvZGVGZW5jZWRGZW5jZTogb25leGl0Y29kZWZlbmNlZGZlbmNlLAogICAgICBjb2RlRmVuY2VkRmVuY2VJbmZvOiBvbmV4aXRjb2RlZmVuY2VkZmVuY2VpbmZvLAogICAgICBjb2RlRmVuY2VkRmVuY2VNZXRhOiBvbmV4aXRjb2RlZmVuY2VkZmVuY2VtZXRhLAogICAgICBjb2RlRmxvd1ZhbHVlOiBvbmV4aXRkYXRhLAogICAgICBjb2RlSW5kZW50ZWQ6IGNsb3NlcihvbmV4aXRjb2RlaW5kZW50ZWQpLAogICAgICBjb2RlVGV4dDogY2xvc2VyKG9uZXhpdGNvZGV0ZXh0KSwKICAgICAgY29kZVRleHREYXRhOiBvbmV4aXRkYXRhLAogICAgICBkYXRhOiBvbmV4aXRkYXRhLAogICAgICBkZWZpbml0aW9uOiBjbG9zZXIoKSwKICAgICAgZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOiBvbmV4aXRkZWZpbml0aW9uZGVzdGluYXRpb25zdHJpbmcsCiAgICAgIGRlZmluaXRpb25MYWJlbFN0cmluZzogb25leGl0ZGVmaW5pdGlvbmxhYmVsc3RyaW5nLAogICAgICBkZWZpbml0aW9uVGl0bGVTdHJpbmc6IG9uZXhpdGRlZmluaXRpb250aXRsZXN0cmluZywKICAgICAgZW1waGFzaXM6IGNsb3NlcigpLAogICAgICBoYXJkQnJlYWtFc2NhcGU6IGNsb3NlcihvbmV4aXRoYXJkYnJlYWspLAogICAgICBoYXJkQnJlYWtUcmFpbGluZzogY2xvc2VyKG9uZXhpdGhhcmRicmVhayksCiAgICAgIGh0bWxGbG93OiBjbG9zZXIob25leGl0aHRtbGZsb3cpLAogICAgICBodG1sRmxvd0RhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGh0bWxUZXh0OiBjbG9zZXIob25leGl0aHRtbHRleHQpLAogICAgICBodG1sVGV4dERhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGltYWdlOiBjbG9zZXIob25leGl0aW1hZ2UpLAogICAgICBsYWJlbDogb25leGl0bGFiZWwsCiAgICAgIGxhYmVsVGV4dDogb25leGl0bGFiZWx0ZXh0LAogICAgICBsaW5lRW5kaW5nOiBvbmV4aXRsaW5lZW5kaW5nLAogICAgICBsaW5rOiBjbG9zZXIob25leGl0bGluayksCiAgICAgIGxpc3RJdGVtOiBjbG9zZXIoKSwKICAgICAgbGlzdE9yZGVyZWQ6IGNsb3NlcigpLAogICAgICBsaXN0VW5vcmRlcmVkOiBjbG9zZXIoKSwKICAgICAgcGFyYWdyYXBoOiBjbG9zZXIoKSwKICAgICAgcmVmZXJlbmNlU3RyaW5nOiBvbmV4aXRyZWZlcmVuY2VzdHJpbmcsCiAgICAgIHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6IG9uZXhpdHJlc291cmNlZGVzdGluYXRpb25zdHJpbmcsCiAgICAgIHJlc291cmNlVGl0bGVTdHJpbmc6IG9uZXhpdHJlc291cmNldGl0bGVzdHJpbmcsCiAgICAgIHJlc291cmNlOiBvbmV4aXRyZXNvdXJjZSwKICAgICAgc2V0ZXh0SGVhZGluZzogY2xvc2VyKG9uZXhpdHNldGV4dGhlYWRpbmcpLAogICAgICBzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlOiBvbmV4aXRzZXRleHRoZWFkaW5nbGluZXNlcXVlbmNlLAogICAgICBzZXRleHRIZWFkaW5nVGV4dDogb25leGl0c2V0ZXh0aGVhZGluZ3RleHQsCiAgICAgIHN0cm9uZzogY2xvc2VyKCksCiAgICAgIHRoZW1hdGljQnJlYWs6IGNsb3NlcigpCiAgICB9CiAgfTsKICBjb25maWd1cmUyKGNvbmZpZzMsIChvcHRpb25zIHx8IHt9KS5tZGFzdEV4dGVuc2lvbnMgfHwgW10pOwogIGNvbnN0IGRhdGEgPSB7fTsKICByZXR1cm4gY29tcGlsZTI7CiAgZnVuY3Rpb24gY29tcGlsZTIoZXZlbnRzKSB7CiAgICBsZXQgdHJlZSA9IHsKICAgICAgdHlwZTogInJvb3QiLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgICBjb25zdCBjb250ZXh0MiA9IHsKICAgICAgc3RhY2s6IFt0cmVlXSwKICAgICAgdG9rZW5TdGFjazogW10sCiAgICAgIGNvbmZpZzogY29uZmlnMywKICAgICAgZW50ZXIsCiAgICAgIGV4aXQ6IGV4aXQzLAogICAgICBidWZmZXI6IGJ1ZmZlcjIsCiAgICAgIHJlc3VtZSwKICAgICAgZGF0YQogICAgfTsKICAgIGNvbnN0IGxpc3RTdGFjayA9IFtdOwogICAgbGV0IGluZGV4MiA9IC0xOwogICAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImxpc3RPcmRlcmVkIiB8fCBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGlzdFVub3JkZXJlZCIpIHsKICAgICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMF0gPT09ICJlbnRlciIpIHsKICAgICAgICAgIGxpc3RTdGFjay5wdXNoKGluZGV4Mik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHRhaWwgPSBsaXN0U3RhY2sucG9wKCk7CiAgICAgICAgICBpbmRleDIgPSBwcmVwYXJlTGlzdChldmVudHMsIHRhaWwsIGluZGV4Mik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpbmRleDIgPSAtMTsKICAgIHdoaWxlICgrK2luZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBjb25maWczW2V2ZW50c1tpbmRleDJdWzBdXTsKICAgICAgaWYgKG93bjUuY2FsbChoYW5kbGVyMiwgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSkpIHsKICAgICAgICBoYW5kbGVyMltldmVudHNbaW5kZXgyXVsxXS50eXBlXS5jYWxsKE9iamVjdC5hc3NpZ24oewogICAgICAgICAgc2xpY2VTZXJpYWxpemU6IGV2ZW50c1tpbmRleDJdWzJdLnNsaWNlU2VyaWFsaXplCiAgICAgICAgfSwgY29udGV4dDIpLCBldmVudHNbaW5kZXgyXVsxXSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChjb250ZXh0Mi50b2tlblN0YWNrLmxlbmd0aCA+IDApIHsKICAgICAgY29uc3QgdGFpbCA9IGNvbnRleHQyLnRva2VuU3RhY2tbY29udGV4dDIudG9rZW5TdGFjay5sZW5ndGggLSAxXTsKICAgICAgY29uc3QgaGFuZGxlcjIgPSB0YWlsWzFdIHx8IGRlZmF1bHRPbkVycm9yOwogICAgICBoYW5kbGVyMi5jYWxsKGNvbnRleHQyLCB2b2lkIDAsIHRhaWxbMF0pOwogICAgfQogICAgdHJlZS5wb3NpdGlvbiA9IHsKICAgICAgc3RhcnQ6IHBvaW50MihldmVudHMubGVuZ3RoID4gMCA/IGV2ZW50c1swXVsxXS5zdGFydCA6IHsKICAgICAgICBsaW5lOiAxLAogICAgICAgIGNvbHVtbjogMSwKICAgICAgICBvZmZzZXQ6IDAKICAgICAgfSksCiAgICAgIGVuZDogcG9pbnQyKGV2ZW50cy5sZW5ndGggPiAwID8gZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAyXVsxXS5lbmQgOiB7CiAgICAgICAgbGluZTogMSwKICAgICAgICBjb2x1bW46IDEsCiAgICAgICAgb2Zmc2V0OiAwCiAgICAgIH0pCiAgICB9OwogICAgaW5kZXgyID0gLTE7CiAgICB3aGlsZSAoKytpbmRleDIgPCBjb25maWczLnRyYW5zZm9ybXMubGVuZ3RoKSB7CiAgICAgIHRyZWUgPSBjb25maWczLnRyYW5zZm9ybXNbaW5kZXgyXSh0cmVlKSB8fCB0cmVlOwogICAgfQogICAgcmV0dXJuIHRyZWU7CiAgfQogIGZ1bmN0aW9uIHByZXBhcmVMaXN0KGV2ZW50cywgc3RhcnQsIGxlbmd0aCkgewogICAgbGV0IGluZGV4MiA9IHN0YXJ0IC0gMTsKICAgIGxldCBjb250YWluZXJCYWxhbmNlID0gLTE7CiAgICBsZXQgbGlzdFNwcmVhZCA9IGZhbHNlOwogICAgbGV0IGxpc3RJdGVtNDsKICAgIGxldCBsaW5lSW5kZXg7CiAgICBsZXQgZmlyc3RCbGFua0xpbmVJbmRleDsKICAgIGxldCBhdE1hcmtlcjsKICAgIHdoaWxlICgrK2luZGV4MiA8PSBsZW5ndGgpIHsKICAgICAgY29uc3QgZXZlbnQgPSBldmVudHNbaW5kZXgyXTsKICAgICAgc3dpdGNoIChldmVudFsxXS50eXBlKSB7CiAgICAgICAgY2FzZSAibGlzdFVub3JkZXJlZCI6CiAgICAgICAgY2FzZSAibGlzdE9yZGVyZWQiOgogICAgICAgIGNhc2UgImJsb2NrUXVvdGUiOiB7CiAgICAgICAgICBpZiAoZXZlbnRbMF0gPT09ICJlbnRlciIpIHsKICAgICAgICAgICAgY29udGFpbmVyQmFsYW5jZSsrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29udGFpbmVyQmFsYW5jZS0tOwogICAgICAgICAgfQogICAgICAgICAgYXRNYXJrZXIgPSB2b2lkIDA7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAibGluZUVuZGluZ0JsYW5rIjogewogICAgICAgICAgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiKSB7CiAgICAgICAgICAgIGlmIChsaXN0SXRlbTQgJiYgIWF0TWFya2VyICYmICFjb250YWluZXJCYWxhbmNlICYmICFmaXJzdEJsYW5rTGluZUluZGV4KSB7CiAgICAgICAgICAgICAgZmlyc3RCbGFua0xpbmVJbmRleCA9IGluZGV4MjsKICAgICAgICAgICAgfQogICAgICAgICAgICBhdE1hcmtlciA9IHZvaWQgMDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjYXNlICJsaW5lUHJlZml4IjoKICAgICAgICBjYXNlICJsaXN0SXRlbVZhbHVlIjoKICAgICAgICBjYXNlICJsaXN0SXRlbU1hcmtlciI6CiAgICAgICAgY2FzZSAibGlzdEl0ZW1QcmVmaXgiOgogICAgICAgIGNhc2UgImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSI6IHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICBhdE1hcmtlciA9IHZvaWQgMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFjb250YWluZXJCYWxhbmNlICYmIGV2ZW50WzBdID09PSAiZW50ZXIiICYmIGV2ZW50WzFdLnR5cGUgPT09ICJsaXN0SXRlbVByZWZpeCIgfHwgY29udGFpbmVyQmFsYW5jZSA9PT0gLTEgJiYgZXZlbnRbMF0gPT09ICJleGl0IiAmJiAoZXZlbnRbMV0udHlwZSA9PT0gImxpc3RVbm9yZGVyZWQiIHx8IGV2ZW50WzFdLnR5cGUgPT09ICJsaXN0T3JkZXJlZCIpKSB7CiAgICAgICAgaWYgKGxpc3RJdGVtNCkgewogICAgICAgICAgbGV0IHRhaWxJbmRleCA9IGluZGV4MjsKICAgICAgICAgIGxpbmVJbmRleCA9IHZvaWQgMDsKICAgICAgICAgIHdoaWxlICh0YWlsSW5kZXgtLSkgewogICAgICAgICAgICBjb25zdCB0YWlsRXZlbnQgPSBldmVudHNbdGFpbEluZGV4XTsKICAgICAgICAgICAgaWYgKHRhaWxFdmVudFsxXS50eXBlID09PSAibGluZUVuZGluZyIgfHwgdGFpbEV2ZW50WzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nQmxhbmsiKSB7CiAgICAgICAgICAgICAgaWYgKHRhaWxFdmVudFswXSA9PT0gImV4aXQiKSBjb250aW51ZTsKICAgICAgICAgICAgICBpZiAobGluZUluZGV4KSB7CiAgICAgICAgICAgICAgICBldmVudHNbbGluZUluZGV4XVsxXS50eXBlID0gImxpbmVFbmRpbmdCbGFuayI7CiAgICAgICAgICAgICAgICBsaXN0U3ByZWFkID0gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdGFpbEV2ZW50WzFdLnR5cGUgPSAibGluZUVuZGluZyI7CiAgICAgICAgICAgICAgbGluZUluZGV4ID0gdGFpbEluZGV4OwogICAgICAgICAgICB9IGVsc2UgaWYgKHRhaWxFdmVudFsxXS50eXBlID09PSAibGluZVByZWZpeCIgfHwgdGFpbEV2ZW50WzFdLnR5cGUgPT09ICJibG9ja1F1b3RlUHJlZml4IiB8fCB0YWlsRXZlbnRbMV0udHlwZSA9PT0gImJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlIiB8fCB0YWlsRXZlbnRbMV0udHlwZSA9PT0gImJsb2NrUXVvdGVNYXJrZXIiIHx8IHRhaWxFdmVudFsxXS50eXBlID09PSAibGlzdEl0ZW1JbmRlbnQiKSB7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChmaXJzdEJsYW5rTGluZUluZGV4ICYmICghbGluZUluZGV4IHx8IGZpcnN0QmxhbmtMaW5lSW5kZXggPCBsaW5lSW5kZXgpKSB7CiAgICAgICAgICAgIGxpc3RJdGVtNC5fc3ByZWFkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGxpc3RJdGVtNC5lbmQgPSBPYmplY3QuYXNzaWduKHt9LCBsaW5lSW5kZXggPyBldmVudHNbbGluZUluZGV4XVsxXS5zdGFydCA6IGV2ZW50WzFdLmVuZCk7CiAgICAgICAgICBldmVudHMuc3BsaWNlKGxpbmVJbmRleCB8fCBpbmRleDIsIDAsIFsiZXhpdCIsIGxpc3RJdGVtNCwgZXZlbnRbMl1dKTsKICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgbGVuZ3RoKys7CiAgICAgICAgfQogICAgICAgIGlmIChldmVudFsxXS50eXBlID09PSAibGlzdEl0ZW1QcmVmaXgiKSB7CiAgICAgICAgICBjb25zdCBpdGVtID0gewogICAgICAgICAgICB0eXBlOiAibGlzdEl0ZW0iLAogICAgICAgICAgICBfc3ByZWFkOiBmYWxzZSwKICAgICAgICAgICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50WzFdLnN0YXJ0KSwKICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogd2XigJlsbCBhZGQgYGVuZGAgaW4gYSBzZWNvbmQuCiAgICAgICAgICAgIGVuZDogdm9pZCAwCiAgICAgICAgICB9OwogICAgICAgICAgbGlzdEl0ZW00ID0gaXRlbTsKICAgICAgICAgIGV2ZW50cy5zcGxpY2UoaW5kZXgyLCAwLCBbImVudGVyIiwgaXRlbSwgZXZlbnRbMl1dKTsKICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgbGVuZ3RoKys7CiAgICAgICAgICBmaXJzdEJsYW5rTGluZUluZGV4ID0gdm9pZCAwOwogICAgICAgICAgYXRNYXJrZXIgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZXZlbnRzW3N0YXJ0XVsxXS5fc3ByZWFkID0gbGlzdFNwcmVhZDsKICAgIHJldHVybiBsZW5ndGg7CiAgfQogIGZ1bmN0aW9uIG9wZW5lcjIoY3JlYXRlNywgYW5kKSB7CiAgICByZXR1cm4gb3BlbjsKICAgIGZ1bmN0aW9uIG9wZW4odG9rZW4pIHsKICAgICAgZW50ZXIuY2FsbCh0aGlzLCBjcmVhdGU3KHRva2VuKSwgdG9rZW4pOwogICAgICBpZiAoYW5kKSBhbmQuY2FsbCh0aGlzLCB0b2tlbik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGJ1ZmZlcjIoKSB7CiAgICB0aGlzLnN0YWNrLnB1c2goewogICAgICB0eXBlOiAiZnJhZ21lbnQiLAogICAgICBjaGlsZHJlbjogW10KICAgIH0pOwogIH0KICBmdW5jdGlvbiBlbnRlcihub2RlMiwgdG9rZW4sIGVycm9ySGFuZGxlcikgewogICAgY29uc3QgcGFyZW50ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgY29uc3Qgc2libGluZ3MyID0gcGFyZW50LmNoaWxkcmVuOwogICAgc2libGluZ3MyLnB1c2gobm9kZTIpOwogICAgdGhpcy5zdGFjay5wdXNoKG5vZGUyKTsKICAgIHRoaXMudG9rZW5TdGFjay5wdXNoKFt0b2tlbiwgZXJyb3JIYW5kbGVyIHx8IHZvaWQgMF0pOwogICAgbm9kZTIucG9zaXRpb24gPSB7CiAgICAgIHN0YXJ0OiBwb2ludDIodG9rZW4uc3RhcnQpLAogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBgZW5kYCB3aWxsIGJlIHBhdGNoZWQgbGF0ZXIuCiAgICAgIGVuZDogdm9pZCAwCiAgICB9OwogIH0KICBmdW5jdGlvbiBjbG9zZXIoYW5kKSB7CiAgICByZXR1cm4gY2xvc2U3OwogICAgZnVuY3Rpb24gY2xvc2U3KHRva2VuKSB7CiAgICAgIGlmIChhbmQpIGFuZC5jYWxsKHRoaXMsIHRva2VuKTsKICAgICAgZXhpdDMuY2FsbCh0aGlzLCB0b2tlbik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGV4aXQzKHRva2VuLCBvbkV4aXRFcnJvcikgewogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrLnBvcCgpOwogICAgY29uc3Qgb3BlbiA9IHRoaXMudG9rZW5TdGFjay5wb3AoKTsKICAgIGlmICghb3BlbikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjbG9zZSBgIiArIHRva2VuLnR5cGUgKyAiYCAoIiArIHN0cmluZ2lmeVBvc2l0aW9uKHsKICAgICAgICBzdGFydDogdG9rZW4uc3RhcnQsCiAgICAgICAgZW5kOiB0b2tlbi5lbmQKICAgICAgfSkgKyAiKTogaXRcdTIwMTlzIG5vdCBvcGVuIik7CiAgICB9IGVsc2UgaWYgKG9wZW5bMF0udHlwZSAhPT0gdG9rZW4udHlwZSkgewogICAgICBpZiAob25FeGl0RXJyb3IpIHsKICAgICAgICBvbkV4aXRFcnJvci5jYWxsKHRoaXMsIHRva2VuLCBvcGVuWzBdKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBoYW5kbGVyMiA9IG9wZW5bMV0gfHwgZGVmYXVsdE9uRXJyb3I7CiAgICAgICAgaGFuZGxlcjIuY2FsbCh0aGlzLCB0b2tlbiwgb3BlblswXSk7CiAgICAgIH0KICAgIH0KICAgIG5vZGUyLnBvc2l0aW9uLmVuZCA9IHBvaW50Mih0b2tlbi5lbmQpOwogIH0KICBmdW5jdGlvbiByZXN1bWUoKSB7CiAgICByZXR1cm4gdG9TdHJpbmcodGhpcy5zdGFjay5wb3AoKSk7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJsaXN0b3JkZXJlZCgpIHsKICAgIHRoaXMuZGF0YS5leHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWUgPSB0cnVlOwogIH0KICBmdW5jdGlvbiBvbmVudGVybGlzdGl0ZW12YWx1ZSh0b2tlbikgewogICAgaWYgKHRoaXMuZGF0YS5leHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWUpIHsKICAgICAgY29uc3QgYW5jZXN0b3IgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMl07CiAgICAgIGFuY2VzdG9yLnN0YXJ0ID0gTnVtYmVyLnBhcnNlSW50KHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pLCAxMCk7CiAgICAgIHRoaXMuZGF0YS5leHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWUgPSB2b2lkIDA7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGVmZW5jZWRmZW5jZWluZm8oKSB7CiAgICBjb25zdCBkYXRhMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLmxhbmcgPSBkYXRhMjsKICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZWZlbmNlZGZlbmNlbWV0YSgpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIubWV0YSA9IGRhdGEyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjb2RlZmVuY2VkZmVuY2UoKSB7CiAgICBpZiAodGhpcy5kYXRhLmZsb3dDb2RlSW5zaWRlKSByZXR1cm47CiAgICB0aGlzLmJ1ZmZlcigpOwogICAgdGhpcy5kYXRhLmZsb3dDb2RlSW5zaWRlID0gdHJ1ZTsKICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZWZlbmNlZCgpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudmFsdWUgPSBkYXRhMi5yZXBsYWNlKC9eKFxyP1xufFxyKXwoXHI/XG58XHIpJC9nLCAiIik7CiAgICB0aGlzLmRhdGEuZmxvd0NvZGVJbnNpZGUgPSB2b2lkIDA7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGVpbmRlbnRlZCgpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudmFsdWUgPSBkYXRhMi5yZXBsYWNlKC8oXHI/XG58XHIpJC9nLCAiIik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb25sYWJlbHN0cmluZyh0b2tlbikgewogICAgY29uc3QgbGFiZWwgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi5sYWJlbCA9IGxhYmVsOwogICAgbm9kZTIuaWRlbnRpZmllciA9IG5vcm1hbGl6ZUlkZW50aWZpZXIodGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikpLnRvTG93ZXJDYXNlKCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb250aXRsZXN0cmluZygpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudGl0bGUgPSBkYXRhMjsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbmRlc3RpbmF0aW9uc3RyaW5nKCkgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi51cmwgPSBkYXRhMjsKICB9CiAgZnVuY3Rpb24gb25leGl0YXR4aGVhZGluZ3NlcXVlbmNlKHRva2VuKSB7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIGlmICghbm9kZTIuZGVwdGgpIHsKICAgICAgY29uc3QgZGVwdGggPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKS5sZW5ndGg7CiAgICAgIG5vZGUyLmRlcHRoID0gZGVwdGg7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHNldGV4dGhlYWRpbmd0ZXh0KCkgewogICAgdGhpcy5kYXRhLnNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmcgPSB0cnVlOwogIH0KICBmdW5jdGlvbiBvbmV4aXRzZXRleHRoZWFkaW5nbGluZXNlcXVlbmNlKHRva2VuKSB7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLmRlcHRoID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikuY29kZVBvaW50QXQoMCkgPT09IDYxID8gMSA6IDI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHNldGV4dGhlYWRpbmcoKSB7CiAgICB0aGlzLmRhdGEuc2V0ZXh0SGVhZGluZ1NsdXJwTGluZUVuZGluZyA9IHZvaWQgMDsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmRhdGEodG9rZW4pIHsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgY29uc3Qgc2libGluZ3MyID0gbm9kZTIuY2hpbGRyZW47CiAgICBsZXQgdGFpbCA9IHNpYmxpbmdzMltzaWJsaW5nczIubGVuZ3RoIC0gMV07CiAgICBpZiAoIXRhaWwgfHwgdGFpbC50eXBlICE9PSAidGV4dCIpIHsKICAgICAgdGFpbCA9IHRleHQ5KCk7CiAgICAgIHRhaWwucG9zaXRpb24gPSB7CiAgICAgICAgc3RhcnQ6IHBvaW50Mih0b2tlbi5zdGFydCksCiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogd2XigJlsbCBhZGQgYGVuZGAgbGF0ZXIuCiAgICAgICAgZW5kOiB2b2lkIDAKICAgICAgfTsKICAgICAgc2libGluZ3MyLnB1c2godGFpbCk7CiAgICB9CiAgICB0aGlzLnN0YWNrLnB1c2godGFpbCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGRhdGEodG9rZW4pIHsKICAgIGNvbnN0IHRhaWwgPSB0aGlzLnN0YWNrLnBvcCgpOwogICAgdGFpbC52YWx1ZSArPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICAgIHRhaWwucG9zaXRpb24uZW5kID0gcG9pbnQyKHRva2VuLmVuZCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGxpbmVlbmRpbmcodG9rZW4pIHsKICAgIGNvbnN0IGNvbnRleHQyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgaWYgKHRoaXMuZGF0YS5hdEhhcmRCcmVhaykgewogICAgICBjb25zdCB0YWlsID0gY29udGV4dDIuY2hpbGRyZW5bY29udGV4dDIuY2hpbGRyZW4ubGVuZ3RoIC0gMV07CiAgICAgIHRhaWwucG9zaXRpb24uZW5kID0gcG9pbnQyKHRva2VuLmVuZCk7CiAgICAgIHRoaXMuZGF0YS5hdEhhcmRCcmVhayA9IHZvaWQgMDsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCF0aGlzLmRhdGEuc2V0ZXh0SGVhZGluZ1NsdXJwTGluZUVuZGluZyAmJiBjb25maWczLmNhbkNvbnRhaW5Fb2xzLmluY2x1ZGVzKGNvbnRleHQyLnR5cGUpKSB7CiAgICAgIG9uZW50ZXJkYXRhLmNhbGwodGhpcywgdG9rZW4pOwogICAgICBvbmV4aXRkYXRhLmNhbGwodGhpcywgdG9rZW4pOwogICAgfQogIH0KICBmdW5jdGlvbiBvbmV4aXRoYXJkYnJlYWsoKSB7CiAgICB0aGlzLmRhdGEuYXRIYXJkQnJlYWsgPSB0cnVlOwogIH0KICBmdW5jdGlvbiBvbmV4aXRodG1sZmxvdygpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudmFsdWUgPSBkYXRhMjsKICB9CiAgZnVuY3Rpb24gb25leGl0aHRtbHRleHQoKSB7CiAgICBjb25zdCBkYXRhMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnZhbHVlID0gZGF0YTI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGV0ZXh0KCkgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi52YWx1ZSA9IGRhdGEyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRsaW5rKCkgewogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBpZiAodGhpcy5kYXRhLmluUmVmZXJlbmNlKSB7CiAgICAgIGNvbnN0IHJlZmVyZW5jZVR5cGUgPSB0aGlzLmRhdGEucmVmZXJlbmNlVHlwZSB8fCAic2hvcnRjdXQiOwogICAgICBub2RlMi50eXBlICs9ICJSZWZlcmVuY2UiOwogICAgICBub2RlMi5yZWZlcmVuY2VUeXBlID0gcmVmZXJlbmNlVHlwZTsKICAgICAgZGVsZXRlIG5vZGUyLnVybDsKICAgICAgZGVsZXRlIG5vZGUyLnRpdGxlOwogICAgfSBlbHNlIHsKICAgICAgZGVsZXRlIG5vZGUyLmlkZW50aWZpZXI7CiAgICAgIGRlbGV0ZSBub2RlMi5sYWJlbDsKICAgIH0KICAgIHRoaXMuZGF0YS5yZWZlcmVuY2VUeXBlID0gdm9pZCAwOwogIH0KICBmdW5jdGlvbiBvbmV4aXRpbWFnZSgpIHsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgaWYgKHRoaXMuZGF0YS5pblJlZmVyZW5jZSkgewogICAgICBjb25zdCByZWZlcmVuY2VUeXBlID0gdGhpcy5kYXRhLnJlZmVyZW5jZVR5cGUgfHwgInNob3J0Y3V0IjsKICAgICAgbm9kZTIudHlwZSArPSAiUmVmZXJlbmNlIjsKICAgICAgbm9kZTIucmVmZXJlbmNlVHlwZSA9IHJlZmVyZW5jZVR5cGU7CiAgICAgIGRlbGV0ZSBub2RlMi51cmw7CiAgICAgIGRlbGV0ZSBub2RlMi50aXRsZTsKICAgIH0gZWxzZSB7CiAgICAgIGRlbGV0ZSBub2RlMi5pZGVudGlmaWVyOwogICAgICBkZWxldGUgbm9kZTIubGFiZWw7CiAgICB9CiAgICB0aGlzLmRhdGEucmVmZXJlbmNlVHlwZSA9IHZvaWQgMDsKICB9CiAgZnVuY3Rpb24gb25leGl0bGFiZWx0ZXh0KHRva2VuKSB7CiAgICBjb25zdCBzdHJpbmczID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgICBjb25zdCBhbmNlc3RvciA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAyXTsKICAgIGFuY2VzdG9yLmxhYmVsID0gZGVjb2RlU3RyaW5nKHN0cmluZzMpOwogICAgYW5jZXN0b3IuaWRlbnRpZmllciA9IG5vcm1hbGl6ZUlkZW50aWZpZXIoc3RyaW5nMykudG9Mb3dlckNhc2UoKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGFiZWwoKSB7CiAgICBjb25zdCBmcmFnbWVudCA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIGNvbnN0IHZhbHVlMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIHRoaXMuZGF0YS5pblJlZmVyZW5jZSA9IHRydWU7CiAgICBpZiAobm9kZTIudHlwZSA9PT0gImxpbmsiKSB7CiAgICAgIGNvbnN0IGNoaWxkcmVuMiA9IGZyYWdtZW50LmNoaWxkcmVuOwogICAgICBub2RlMi5jaGlsZHJlbiA9IGNoaWxkcmVuMjsKICAgIH0gZWxzZSB7CiAgICAgIG5vZGUyLmFsdCA9IHZhbHVlMjsKICAgIH0KICB9CiAgZnVuY3Rpb24gb25leGl0cmVzb3VyY2VkZXN0aW5hdGlvbnN0cmluZygpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudXJsID0gZGF0YTI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHJlc291cmNldGl0bGVzdHJpbmcoKSB7CiAgICBjb25zdCBkYXRhMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnRpdGxlID0gZGF0YTI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHJlc291cmNlKCkgewogICAgdGhpcy5kYXRhLmluUmVmZXJlbmNlID0gdm9pZCAwOwogIH0KICBmdW5jdGlvbiBvbmVudGVycmVmZXJlbmNlKCkgewogICAgdGhpcy5kYXRhLnJlZmVyZW5jZVR5cGUgPSAiY29sbGFwc2VkIjsKICB9CiAgZnVuY3Rpb24gb25leGl0cmVmZXJlbmNlc3RyaW5nKHRva2VuKSB7CiAgICBjb25zdCBsYWJlbCA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLmxhYmVsID0gbGFiZWw7CiAgICBub2RlMi5pZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcih0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKSkudG9Mb3dlckNhc2UoKTsKICAgIHRoaXMuZGF0YS5yZWZlcmVuY2VUeXBlID0gImZ1bGwiOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2VtYXJrZXIodG9rZW4pIHsKICAgIHRoaXMuZGF0YS5jaGFyYWN0ZXJSZWZlcmVuY2VUeXBlID0gdG9rZW4udHlwZTsKICB9CiAgZnVuY3Rpb24gb25leGl0Y2hhcmFjdGVycmVmZXJlbmNldmFsdWUodG9rZW4pIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgICBjb25zdCB0eXBlNSA9IHRoaXMuZGF0YS5jaGFyYWN0ZXJSZWZlcmVuY2VUeXBlOwogICAgbGV0IHZhbHVlMjsKICAgIGlmICh0eXBlNSkgewogICAgICB2YWx1ZTIgPSBkZWNvZGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlKGRhdGEyLCB0eXBlNSA9PT0gImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiID8gMTAgOiAxNik7CiAgICAgIHRoaXMuZGF0YS5jaGFyYWN0ZXJSZWZlcmVuY2VUeXBlID0gdm9pZCAwOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgcmVzdWx0ID0gZGVjb2RlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UoZGF0YTIpOwogICAgICB2YWx1ZTIgPSByZXN1bHQ7CiAgICB9CiAgICBjb25zdCB0YWlsID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgdGFpbC52YWx1ZSArPSB2YWx1ZTI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZSh0b2tlbikgewogICAgY29uc3QgdGFpbCA9IHRoaXMuc3RhY2sucG9wKCk7CiAgICB0YWlsLnBvc2l0aW9uLmVuZCA9IHBvaW50Mih0b2tlbi5lbmQpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRhdXRvbGlua3Byb3RvY29sKHRva2VuKSB7CiAgICBvbmV4aXRkYXRhLmNhbGwodGhpcywgdG9rZW4pOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi51cmwgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICB9CiAgZnVuY3Rpb24gb25leGl0YXV0b2xpbmtlbWFpbCh0b2tlbikgewogICAgb25leGl0ZGF0YS5jYWxsKHRoaXMsIHRva2VuKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudXJsID0gIm1haWx0bzoiICsgdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgfQogIGZ1bmN0aW9uIGJsb2NrUXVvdGUyKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImJsb2NrcXVvdGUiLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgfQogIGZ1bmN0aW9uIGNvZGVGbG93KCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImNvZGUiLAogICAgICBsYW5nOiBudWxsLAogICAgICBtZXRhOiBudWxsLAogICAgICB2YWx1ZTogIiIKICAgIH07CiAgfQogIGZ1bmN0aW9uIGNvZGVUZXh0MigpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJpbmxpbmVDb2RlIiwKICAgICAgdmFsdWU6ICIiCiAgICB9OwogIH0KICBmdW5jdGlvbiBkZWZpbml0aW9uMygpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJkZWZpbml0aW9uIiwKICAgICAgaWRlbnRpZmllcjogIiIsCiAgICAgIGxhYmVsOiBudWxsLAogICAgICB0aXRsZTogbnVsbCwKICAgICAgdXJsOiAiIgogICAgfTsKICB9CiAgZnVuY3Rpb24gZW1waGFzaXMzKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImVtcGhhc2lzIiwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9OwogIH0KICBmdW5jdGlvbiBoZWFkaW5nMygpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJoZWFkaW5nIiwKICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgZGVwdGhgIHdpbGwgYmUgc2V0IGxhdGVyLgogICAgICBkZXB0aDogMCwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9OwogIH0KICBmdW5jdGlvbiBoYXJkQnJlYWszKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImJyZWFrIgogICAgfTsKICB9CiAgZnVuY3Rpb24gaHRtbDIwKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImh0bWwiLAogICAgICB2YWx1ZTogIiIKICAgIH07CiAgfQogIGZ1bmN0aW9uIGltYWdlMygpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJpbWFnZSIsCiAgICAgIHRpdGxlOiBudWxsLAogICAgICB1cmw6ICIiLAogICAgICBhbHQ6IG51bGwKICAgIH07CiAgfQogIGZ1bmN0aW9uIGxpbmszKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImxpbmsiLAogICAgICB0aXRsZTogbnVsbCwKICAgICAgdXJsOiAiIiwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9OwogIH0KICBmdW5jdGlvbiBsaXN0NSh0b2tlbikgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImxpc3QiLAogICAgICBvcmRlcmVkOiB0b2tlbi50eXBlID09PSAibGlzdE9yZGVyZWQiLAogICAgICBzdGFydDogbnVsbCwKICAgICAgc3ByZWFkOiB0b2tlbi5fc3ByZWFkLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgfQogIGZ1bmN0aW9uIGxpc3RJdGVtMyh0b2tlbikgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImxpc3RJdGVtIiwKICAgICAgc3ByZWFkOiB0b2tlbi5fc3ByZWFkLAogICAgICBjaGVja2VkOiBudWxsLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgfQogIGZ1bmN0aW9uIHBhcmFncmFwaDMoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9OwogIH0KICBmdW5jdGlvbiBzdHJvbmczKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogInN0cm9uZyIsCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfTsKICB9CiAgZnVuY3Rpb24gdGV4dDkoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAidGV4dCIsCiAgICAgIHZhbHVlOiAiIgogICAgfTsKICB9CiAgZnVuY3Rpb24gdGhlbWF0aWNCcmVhazQoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAidGhlbWF0aWNCcmVhayIKICAgIH07CiAgfQp9CmZ1bmN0aW9uIHBvaW50MihkNikgewogIHJldHVybiB7CiAgICBsaW5lOiBkNi5saW5lLAogICAgY29sdW1uOiBkNi5jb2x1bW4sCiAgICBvZmZzZXQ6IGQ2Lm9mZnNldAogIH07Cn0KZnVuY3Rpb24gY29uZmlndXJlMihjb21iaW5lZCwgZXh0ZW5zaW9ucykgewogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBleHRlbnNpb25zLmxlbmd0aCkgewogICAgY29uc3QgdmFsdWUyID0gZXh0ZW5zaW9uc1tpbmRleDJdOwogICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUyKSkgewogICAgICBjb25maWd1cmUyKGNvbWJpbmVkLCB2YWx1ZTIpOwogICAgfSBlbHNlIHsKICAgICAgZXh0ZW5zaW9uKGNvbWJpbmVkLCB2YWx1ZTIpOwogICAgfQogIH0KfQpmdW5jdGlvbiBleHRlbnNpb24oY29tYmluZWQsIGV4dGVuc2lvbjIpIHsKICBsZXQga2V5MjsKICBmb3IgKGtleTIgaW4gZXh0ZW5zaW9uMikgewogICAgaWYgKG93bjUuY2FsbChleHRlbnNpb24yLCBrZXkyKSkgewogICAgICBzd2l0Y2ggKGtleTIpIHsKICAgICAgICBjYXNlICJjYW5Db250YWluRW9scyI6IHsKICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gZXh0ZW5zaW9uMltrZXkyXTsKICAgICAgICAgIGlmIChyaWdodCkgewogICAgICAgICAgICBjb21iaW5lZFtrZXkyXS5wdXNoKC4uLnJpZ2h0KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjYXNlICJ0cmFuc2Zvcm1zIjogewogICAgICAgICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb24yW2tleTJdOwogICAgICAgICAgaWYgKHJpZ2h0KSB7CiAgICAgICAgICAgIGNvbWJpbmVkW2tleTJdLnB1c2goLi4ucmlnaHQpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgImVudGVyIjoKICAgICAgICBjYXNlICJleGl0IjogewogICAgICAgICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb24yW2tleTJdOwogICAgICAgICAgaWYgKHJpZ2h0KSB7CiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29tYmluZWRba2V5Ml0sIHJpZ2h0KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQpmdW5jdGlvbiBkZWZhdWx0T25FcnJvcihsZWZ0LCByaWdodCkgewogIGlmIChsZWZ0KSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjbG9zZSBgIiArIGxlZnQudHlwZSArICJgICgiICsgc3RyaW5naWZ5UG9zaXRpb24oewogICAgICBzdGFydDogbGVmdC5zdGFydCwKICAgICAgZW5kOiBsZWZ0LmVuZAogICAgfSkgKyAiKTogYSBkaWZmZXJlbnQgdG9rZW4gKGAiICsgcmlnaHQudHlwZSArICJgLCAiICsgc3RyaW5naWZ5UG9zaXRpb24oewogICAgICBzdGFydDogcmlnaHQuc3RhcnQsCiAgICAgIGVuZDogcmlnaHQuZW5kCiAgICB9KSArICIpIGlzIG9wZW4iKTsKICB9IGVsc2UgewogICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2xvc2UgZG9jdW1lbnQsIGEgdG9rZW4gKGAiICsgcmlnaHQudHlwZSArICJgLCAiICsgc3RyaW5naWZ5UG9zaXRpb24oewogICAgICBzdGFydDogcmlnaHQuc3RhcnQsCiAgICAgIGVuZDogcmlnaHQuZW5kCiAgICB9KSArICIpIGlzIHN0aWxsIG9wZW4iKTsKICB9Cn0KdmFyIG93bjU7CnZhciBpbml0X2xpYjIxID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duQDIuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb20tbWFya2Rvd24vbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWRhc3RfdXRpbF90b19zdHJpbmcoKTsKICAgIGluaXRfbWljcm9tYXJrKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2RlY29kZV9udW1lcmljX2NoYXJhY3Rlcl9yZWZlcmVuY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfZGVjb2RlX3N0cmluZygpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9ub3JtYWxpemVfaWRlbnRpZmllcigpOwogICAgaW5pdF9pbmRleF9kb20oKTsKICAgIGluaXRfdW5pc3RfdXRpbF9zdHJpbmdpZnlfcG9zaXRpb24oKTsKICAgIG93bjUgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bkAyLjAuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfZnJvbV9tYXJrZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bkAyLjAuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMjEoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1wYXJzZUAxMS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvaW5kZXguanMKZnVuY3Rpb24gcmVtYXJrUGFyc2Uob3B0aW9ucykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBzZWxmMi5wYXJzZXIgPSBwYXJzZXI7CiAgZnVuY3Rpb24gcGFyc2VyKGRvYykgewogICAgcmV0dXJuIGZyb21NYXJrZG93bihkb2MsIHsKICAgICAgLi4uc2VsZjIuZGF0YSgic2V0dGluZ3MiKSwKICAgICAgLi4ub3B0aW9ucywKICAgICAgLy8gTm90ZTogdGhlc2Ugb3B0aW9ucyBhcmUgbm90IGluIHRoZSByZWFkbWUuCiAgICAgIC8vIFRoZSBnb2FsIGlzIGZvciB0aGVtIHRvIGJlIHNldCBieSBwbHVnaW5zIG9uIGBkYXRhYCBpbnN0ZWFkIG9mIGJlaW5nCiAgICAgIC8vIHBhc3NlZCBieSB1c2Vycy4KICAgICAgZXh0ZW5zaW9uczogc2VsZjIuZGF0YSgibWljcm9tYXJrRXh0ZW5zaW9ucyIpIHx8IFtdLAogICAgICBtZGFzdEV4dGVuc2lvbnM6IHNlbGYyLmRhdGEoImZyb21NYXJrZG93bkV4dGVuc2lvbnMiKSB8fCBbXQogICAgfSk7CiAgfQp9CnZhciBpbml0X2xpYjIyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLXBhcnNlQDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X21kYXN0X3V0aWxfZnJvbV9tYXJrZG93bigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLXBhcnNlQDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2luZGV4LmpzCnZhciBpbml0X3JlbWFya19wYXJzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1wYXJzZUAxMS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjIyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9mb3JtYXRAMC4yLjIvbm9kZV9tb2R1bGVzL2Zvcm1hdC9mb3JtYXQuanMKdmFyIHJlcXVpcmVfZm9ybWF0ID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9mb3JtYXRAMC4yLjIvbm9kZV9tb2R1bGVzL2Zvcm1hdC9mb3JtYXQuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgOwogICAgKGZ1bmN0aW9uKCkgewogICAgICB2YXIgbmFtZXNwYWNlMjsKICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgbmFtZXNwYWNlMiA9IG1vZHVsZS5leHBvcnRzID0gZm9ybWF0MjsKICAgICAgfSBlbHNlIHsKICAgICAgICBuYW1lc3BhY2UyID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMgfHwgKDEsIGV2YWwpKCJ0aGlzIik7CiAgICAgICAgfSkoKTsKICAgICAgfQogICAgICBuYW1lc3BhY2UyLmZvcm1hdCA9IGZvcm1hdDI7CiAgICAgIG5hbWVzcGFjZTIudnNwcmludGYgPSB2c3ByaW50ZjsKICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgY29uc29sZS5sb2cgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBuYW1lc3BhY2UyLnByaW50ZiA9IHByaW50ZjsKICAgICAgfQogICAgICBmdW5jdGlvbiBwcmludGYoKSB7CiAgICAgICAgY29uc29sZS5sb2coZm9ybWF0Mi5hcHBseShudWxsLCBhcmd1bWVudHMpKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB2c3ByaW50ZihmbXQsIHJlcGxhY2VtZW50cykgewogICAgICAgIHJldHVybiBmb3JtYXQyLmFwcGx5KG51bGwsIFtmbXRdLmNvbmNhdChyZXBsYWNlbWVudHMpKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBmb3JtYXQyKGZtdCkgewogICAgICAgIHZhciBhcmdJbmRleCA9IDEsIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyksIGkxMSA9IDAsIG4xMyA9IGZtdC5sZW5ndGgsIHJlc3VsdCA9ICIiLCBjMTEsIGVzY2FwZWQgPSBmYWxzZSwgYXJnLCB0bXAsIGxlYWRpbmdaZXJvID0gZmFsc2UsIHByZWNpc2lvbiwgbmV4dEFyZyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107CiAgICAgICAgfSwgc2x1cnBOdW1iZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBkaWdpdHMgPSAiIjsKICAgICAgICAgIHdoaWxlICgvXGQvLnRlc3QoZm10W2kxMV0pKSB7CiAgICAgICAgICAgIGRpZ2l0cyArPSBmbXRbaTExKytdOwogICAgICAgICAgICBjMTEgPSBmbXRbaTExXTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBkaWdpdHMubGVuZ3RoID4gMCA/IHBhcnNlSW50KGRpZ2l0cykgOiBudWxsOwogICAgICAgIH07CiAgICAgICAgZm9yICg7IGkxMSA8IG4xMzsgKytpMTEpIHsKICAgICAgICAgIGMxMSA9IGZtdFtpMTFdOwogICAgICAgICAgaWYgKGVzY2FwZWQpIHsKICAgICAgICAgICAgZXNjYXBlZCA9IGZhbHNlOwogICAgICAgICAgICBpZiAoYzExID09ICIuIikgewogICAgICAgICAgICAgIGxlYWRpbmdaZXJvID0gZmFsc2U7CiAgICAgICAgICAgICAgYzExID0gZm10WysraTExXTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjMTEgPT0gIjAiICYmIGZtdFtpMTEgKyAxXSA9PSAiLiIpIHsKICAgICAgICAgICAgICBsZWFkaW5nWmVybyA9IHRydWU7CiAgICAgICAgICAgICAgaTExICs9IDI7CiAgICAgICAgICAgICAgYzExID0gZm10W2kxMV07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbGVhZGluZ1plcm8gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHByZWNpc2lvbiA9IHNsdXJwTnVtYmVyKCk7CiAgICAgICAgICAgIHN3aXRjaCAoYzExKSB7CiAgICAgICAgICAgICAgY2FzZSAiYiI6CiAgICAgICAgICAgICAgICByZXN1bHQgKz0gcGFyc2VJbnQobmV4dEFyZygpLCAxMCkudG9TdHJpbmcoMik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJjIjoKICAgICAgICAgICAgICAgIGFyZyA9IG5leHRBcmcoKTsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAic3RyaW5nIiB8fCBhcmcgaW5zdGFuY2VvZiBTdHJpbmcpCiAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBhcmc7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGFyZywgMTApKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImQiOgogICAgICAgICAgICAgICAgcmVzdWx0ICs9IHBhcnNlSW50KG5leHRBcmcoKSwgMTApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAiZiI6CiAgICAgICAgICAgICAgICB0bXAgPSBTdHJpbmcocGFyc2VGbG9hdChuZXh0QXJnKCkpLnRvRml4ZWQocHJlY2lzaW9uIHx8IDYpKTsKICAgICAgICAgICAgICAgIHJlc3VsdCArPSBsZWFkaW5nWmVybyA/IHRtcCA6IHRtcC5yZXBsYWNlKC9eMC8sICIiKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImoiOgogICAgICAgICAgICAgICAgcmVzdWx0ICs9IEpTT04uc3RyaW5naWZ5KG5leHRBcmcoKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJvIjoKICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiMCIgKyBwYXJzZUludChuZXh0QXJnKCksIDEwKS50b1N0cmluZyg4KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgInMiOgogICAgICAgICAgICAgICAgcmVzdWx0ICs9IG5leHRBcmcoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgIngiOgogICAgICAgICAgICAgICAgcmVzdWx0ICs9ICIweCIgKyBwYXJzZUludChuZXh0QXJnKCksIDEwKS50b1N0cmluZygxNik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJYIjoKICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiMHgiICsgcGFyc2VJbnQobmV4dEFyZygpLCAxMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcmVzdWx0ICs9IGMxMTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGMxMSA9PT0gIiUiKSB7CiAgICAgICAgICAgIGVzY2FwZWQgPSB0cnVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0ICs9IGMxMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2ZhdWx0QDIuMC4xL25vZGVfbW9kdWxlcy9mYXVsdC9pbmRleC5qcwpmdW5jdGlvbiBjcmVhdGU1KENvbnN0cnVjdG9yKSB7CiAgRm9ybWF0dGVkRXJyb3IuZGlzcGxheU5hbWUgPSBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCBDb25zdHJ1Y3Rvci5uYW1lOwogIHJldHVybiBGb3JtYXR0ZWRFcnJvcjsKICBmdW5jdGlvbiBGb3JtYXR0ZWRFcnJvcihmb3JtYXQyLCAuLi52YWx1ZXMpIHsKICAgIGNvbnN0IHJlYXNvbiA9IGZvcm1hdDIgPyAoMCwgaW1wb3J0X2Zvcm1hdDIuZGVmYXVsdCkoZm9ybWF0MiwgLi4udmFsdWVzKSA6IGZvcm1hdDI7CiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHJlYXNvbik7CiAgfQp9CnZhciBpbXBvcnRfZm9ybWF0MiwgZmF1bHQ7CnZhciBpbml0X2ZhdWx0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZmF1bHRAMi4wLjEvbm9kZV9tb2R1bGVzL2ZhdWx0L2luZGV4LmpzIigpIHsKICAgIGltcG9ydF9mb3JtYXQyID0gX190b0VTTShyZXF1aXJlX2Zvcm1hdCgpLCAxKTsKICAgIGZhdWx0ID0gT2JqZWN0LmFzc2lnbihjcmVhdGU1KEVycm9yKSwgewogICAgICBldmFsOiBjcmVhdGU1KEV2YWxFcnJvciksCiAgICAgIHJhbmdlOiBjcmVhdGU1KFJhbmdlRXJyb3IpLAogICAgICByZWZlcmVuY2U6IGNyZWF0ZTUoUmVmZXJlbmNlRXJyb3IpLAogICAgICBzeW50YXg6IGNyZWF0ZTUoU3ludGF4RXJyb3IpLAogICAgICB0eXBlOiBjcmVhdGU1KFR5cGVFcnJvciksCiAgICAgIHVyaTogY3JlYXRlNShVUklFcnJvcikKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9saWIvdG8tbWF0dGVycy5qcwpmdW5jdGlvbiB0b01hdHRlcnMob3B0aW9ucykgewogIGNvbnN0IHJlc3VsdCA9IFtdOwogIGxldCBpbmRleDIgPSAtMTsKICBjb25zdCBwcmVzZXRzT3JNYXR0ZXJzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBvcHRpb25zID8gW29wdGlvbnNdIDogWyJ5YW1sIl07CiAgd2hpbGUgKCsraW5kZXgyIDwgcHJlc2V0c09yTWF0dGVycy5sZW5ndGgpIHsKICAgIHJlc3VsdFtpbmRleDJdID0gbWF0dGVyKHByZXNldHNPck1hdHRlcnNbaW5kZXgyXSk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gbWF0dGVyKG9wdGlvbjIpIHsKICBsZXQgcmVzdWx0ID0gb3B0aW9uMjsKICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gInN0cmluZyIpIHsKICAgIGlmICghb3duNi5jYWxsKG1hcmtlcnMsIHJlc3VsdCkpIHsKICAgICAgdGhyb3cgZmF1bHQoIk1pc3NpbmcgbWF0dGVyIGRlZmluaXRpb24gZm9yIGAlc2AiLCByZXN1bHQpOwogICAgfQogICAgcmVzdWx0ID0gewogICAgICB0eXBlOiByZXN1bHQsCiAgICAgIG1hcmtlcjogbWFya2Vyc1tyZXN1bHRdCiAgICB9OwogIH0gZWxzZSBpZiAodHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHsKICAgIHRocm93IGZhdWx0KCJFeHBlY3RlZCBtYXR0ZXIgdG8gYmUgYW4gb2JqZWN0LCBub3QgYCVqYCIsIHJlc3VsdCk7CiAgfQogIGlmICghb3duNi5jYWxsKHJlc3VsdCwgInR5cGUiKSkgewogICAgdGhyb3cgZmF1bHQoIk1pc3NpbmcgYHR5cGVgIGluIG1hdHRlciBgJWpgIiwgcmVzdWx0KTsKICB9CiAgaWYgKCFvd242LmNhbGwocmVzdWx0LCAiZmVuY2UiKSAmJiAhb3duNi5jYWxsKHJlc3VsdCwgIm1hcmtlciIpKSB7CiAgICB0aHJvdyBmYXVsdCgiTWlzc2luZyBgbWFya2VyYCBvciBgZmVuY2VgIGluIG1hdHRlciBgJWpgIiwgcmVzdWx0KTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgb3duNiwgbWFya2VyczsKdmFyIGluaXRfdG9fbWF0dGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXJAMi4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXIvbGliL3RvLW1hdHRlcnMuanMiKCkgewogICAgaW5pdF9mYXVsdCgpOwogICAgb3duNiA9IHt9Lmhhc093blByb3BlcnR5OwogICAgbWFya2VycyA9IHsKICAgICAgeWFtbDogIi0iLAogICAgICB0b21sOiAiKyIKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyL2xpYi9zeW50YXguanMKZnVuY3Rpb24gZnJvbnRtYXR0ZXIob3B0aW9ucykgewogIGNvbnN0IG1hdHRlcnMgPSB0b01hdHRlcnMob3B0aW9ucyk7CiAgY29uc3QgZmxvdzMgPSB7fTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgbWF0dGVycy5sZW5ndGgpIHsKICAgIGNvbnN0IG1hdHRlcjIgPSBtYXR0ZXJzW2luZGV4Ml07CiAgICBjb25zdCBjb2RlNCA9IGZlbmNlKG1hdHRlcjIsICJvcGVuIikuY2hhckNvZGVBdCgwKTsKICAgIGNvbnN0IGNvbnN0cnVjdCA9IGNyZWF0ZUNvbnN0cnVjdChtYXR0ZXIyKTsKICAgIGNvbnN0IGV4aXN0aW5nID0gZmxvdzNbY29kZTRdOwogICAgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmcpKSB7CiAgICAgIGV4aXN0aW5nLnB1c2goY29uc3RydWN0KTsKICAgIH0gZWxzZSB7CiAgICAgIGZsb3czW2NvZGU0XSA9IFtjb25zdHJ1Y3RdOwogICAgfQogIH0KICByZXR1cm4gewogICAgZmxvdzogZmxvdzMKICB9Owp9CmZ1bmN0aW9uIGNyZWF0ZUNvbnN0cnVjdChtYXR0ZXIyKSB7CiAgY29uc3QgYW55d2hlcmUgPSBtYXR0ZXIyLmFueXdoZXJlOwogIGNvbnN0IGZyb250bWF0dGVyVHlwZSA9ICgKICAgIC8qKiBAdHlwZSB7VG9rZW5UeXBlfSAqLwogICAgbWF0dGVyMi50eXBlCiAgKTsKICBjb25zdCBmZW5jZVR5cGUgPSAoCiAgICAvKiogQHR5cGUge1Rva2VuVHlwZX0gKi8KICAgIGZyb250bWF0dGVyVHlwZSArICJGZW5jZSIKICApOwogIGNvbnN0IHNlcXVlbmNlVHlwZSA9ICgKICAgIC8qKiBAdHlwZSB7VG9rZW5UeXBlfSAqLwogICAgZmVuY2VUeXBlICsgIlNlcXVlbmNlIgogICk7CiAgY29uc3QgdmFsdWVUeXBlID0gKAogICAgLyoqIEB0eXBlIHtUb2tlblR5cGV9ICovCiAgICBmcm9udG1hdHRlclR5cGUgKyAiVmFsdWUiCiAgKTsKICBjb25zdCBjbG9zaW5nRmVuY2VDb25zdHJ1Y3QgPSB7CiAgICB0b2tlbml6ZTogdG9rZW5pemVDbG9zaW5nRmVuY2UsCiAgICBwYXJ0aWFsOiB0cnVlCiAgfTsKICBsZXQgYnVmZmVyMjsKICBsZXQgYnVmZmVySW5kZXggPSAwOwogIHJldHVybiB7CiAgICB0b2tlbml6ZTogdG9rZW5pemVGcm9udG1hdHRlciwKICAgIGNvbmNyZXRlOiB0cnVlCiAgfTsKICBmdW5jdGlvbiB0b2tlbml6ZUZyb250bWF0dGVyKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgICByZXR1cm4gc3RhcnQ7CiAgICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgICBjb25zdCBwb3NpdGlvbjMgPSBzZWxmMi5ub3coKTsKICAgICAgaWYgKAogICAgICAgIC8vIEluZGVudCBub3QgYWxsb3dlZC4KICAgICAgICBwb3NpdGlvbjMuY29sdW1uID09PSAxICYmIC8vIE5vcm1hbGx5LCBvbmx5IGFsbG93ZWQgaW4gZmlyc3QgbGluZS4KICAgICAgICAocG9zaXRpb24zLmxpbmUgPT09IDEgfHwgYW55d2hlcmUpCiAgICAgICkgewogICAgICAgIGJ1ZmZlcjIgPSBmZW5jZShtYXR0ZXIyLCAib3BlbiIpOwogICAgICAgIGJ1ZmZlckluZGV4ID0gMDsKICAgICAgICBpZiAoY29kZTQgPT09IGJ1ZmZlcjIuY2hhckNvZGVBdChidWZmZXJJbmRleCkpIHsKICAgICAgICAgIGVmZmVjdHMuZW50ZXIoZnJvbnRtYXR0ZXJUeXBlKTsKICAgICAgICAgIGVmZmVjdHMuZW50ZXIoZmVuY2VUeXBlKTsKICAgICAgICAgIGVmZmVjdHMuZW50ZXIoc2VxdWVuY2VUeXBlKTsKICAgICAgICAgIHJldHVybiBvcGVuU2VxdWVuY2UoY29kZTQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGZ1bmN0aW9uIG9wZW5TZXF1ZW5jZShjb2RlNCkgewogICAgICBpZiAoYnVmZmVySW5kZXggPT09IGJ1ZmZlcjIubGVuZ3RoKSB7CiAgICAgICAgZWZmZWN0cy5leGl0KHNlcXVlbmNlVHlwZSk7CiAgICAgICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgICAgICBlZmZlY3RzLmVudGVyKCJ3aGl0ZXNwYWNlIik7CiAgICAgICAgICByZXR1cm4gb3BlblNlcXVlbmNlV2hpdGVzcGFjZShjb2RlNCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvcGVuQWZ0ZXIoY29kZTQpOwogICAgICB9CiAgICAgIGlmIChjb2RlNCA9PT0gYnVmZmVyMi5jaGFyQ29kZUF0KGJ1ZmZlckluZGV4KyspKSB7CiAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgICByZXR1cm4gb3BlblNlcXVlbmNlOwogICAgICB9CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gb3BlblNlcXVlbmNlV2hpdGVzcGFjZShjb2RlNCkgewogICAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHJldHVybiBvcGVuU2VxdWVuY2VXaGl0ZXNwYWNlOwogICAgICB9CiAgICAgIGVmZmVjdHMuZXhpdCgid2hpdGVzcGFjZSIpOwogICAgICByZXR1cm4gb3BlbkFmdGVyKGNvZGU0KTsKICAgIH0KICAgIGZ1bmN0aW9uIG9wZW5BZnRlcihjb2RlNCkgewogICAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMuZXhpdChmZW5jZVR5cGUpOwogICAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgICAgIGJ1ZmZlcjIgPSBmZW5jZShtYXR0ZXIyLCAiY2xvc2UiKTsKICAgICAgICBidWZmZXJJbmRleCA9IDA7CiAgICAgICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChjbG9zaW5nRmVuY2VDb25zdHJ1Y3QsIGFmdGVyLCBjb250ZW50U3RhcnQpOwogICAgICB9CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gY29udGVudFN0YXJ0KGNvZGU0KSB7CiAgICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgICAgcmV0dXJuIGNvbnRlbnRFbmQoY29kZTQpOwogICAgICB9CiAgICAgIGVmZmVjdHMuZW50ZXIodmFsdWVUeXBlKTsKICAgICAgcmV0dXJuIGNvbnRlbnRJbnNpZGUoY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gY29udGVudEluc2lkZShjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMuZXhpdCh2YWx1ZVR5cGUpOwogICAgICAgIHJldHVybiBjb250ZW50RW5kKGNvZGU0KTsKICAgICAgfQogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGVudEluc2lkZTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbnRlbnRFbmQoY29kZTQpIHsKICAgICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICAgIH0KICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChjbG9zaW5nRmVuY2VDb25zdHJ1Y3QsIGFmdGVyLCBjb250ZW50U3RhcnQpOwogICAgfQogICAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgICAgZWZmZWN0cy5leGl0KGZyb250bWF0dGVyVHlwZSk7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogIH0KICBmdW5jdGlvbiB0b2tlbml6ZUNsb3NpbmdGZW5jZShlZmZlY3RzLCBvazMsIG5vaykgewogICAgbGV0IGJ1ZmZlckluZGV4MiA9IDA7CiAgICByZXR1cm4gY2xvc2VTdGFydDsKICAgIGZ1bmN0aW9uIGNsb3NlU3RhcnQoY29kZTQpIHsKICAgICAgaWYgKGNvZGU0ID09PSBidWZmZXIyLmNoYXJDb2RlQXQoYnVmZmVySW5kZXgyKSkgewogICAgICAgIGVmZmVjdHMuZW50ZXIoZmVuY2VUeXBlKTsKICAgICAgICBlZmZlY3RzLmVudGVyKHNlcXVlbmNlVHlwZSk7CiAgICAgICAgcmV0dXJuIGNsb3NlU2VxdWVuY2UoY29kZTQpOwogICAgICB9CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gY2xvc2VTZXF1ZW5jZShjb2RlNCkgewogICAgICBpZiAoYnVmZmVySW5kZXgyID09PSBidWZmZXIyLmxlbmd0aCkgewogICAgICAgIGVmZmVjdHMuZXhpdChzZXF1ZW5jZVR5cGUpOwogICAgICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICAgICAgZWZmZWN0cy5lbnRlcigid2hpdGVzcGFjZSIpOwogICAgICAgICAgcmV0dXJuIGNsb3NlU2VxdWVuY2VXaGl0ZXNwYWNlKGNvZGU0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNsb3NlQWZ0ZXIoY29kZTQpOwogICAgICB9CiAgICAgIGlmIChjb2RlNCA9PT0gYnVmZmVyMi5jaGFyQ29kZUF0KGJ1ZmZlckluZGV4MisrKSkgewogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgcmV0dXJuIGNsb3NlU2VxdWVuY2U7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9zZVNlcXVlbmNlV2hpdGVzcGFjZShjb2RlNCkgewogICAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHJldHVybiBjbG9zZVNlcXVlbmNlV2hpdGVzcGFjZTsKICAgICAgfQogICAgICBlZmZlY3RzLmV4aXQoIndoaXRlc3BhY2UiKTsKICAgICAgcmV0dXJuIGNsb3NlQWZ0ZXIoY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gY2xvc2VBZnRlcihjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMuZXhpdChmZW5jZVR5cGUpOwogICAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgICB9CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogIH0KfQpmdW5jdGlvbiBmZW5jZShtYXR0ZXIyLCBwcm9wKSB7CiAgcmV0dXJuIG1hdHRlcjIubWFya2VyID8gcGljayhtYXR0ZXIyLm1hcmtlciwgcHJvcCkucmVwZWF0KDMpIDogKAogICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVGhleeKAmXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KICAgIHBpY2sobWF0dGVyMi5mZW5jZSwgcHJvcCkKICApOwp9CmZ1bmN0aW9uIHBpY2soc2NoZW1hLCBwcm9wKSB7CiAgcmV0dXJuIHR5cGVvZiBzY2hlbWEgPT09ICJzdHJpbmciID8gc2NoZW1hIDogc2NoZW1hW3Byb3BdOwp9CnZhciBpbml0X3N5bnRheDYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyL2xpYi9zeW50YXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfdG9fbWF0dGVycygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9saWIvaHRtbC5qcwp2YXIgaW5pdF9odG1sNyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXJAMi4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXIvbGliL2h0bWwuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9pbmRleC5qcwp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2Zyb250bWF0dGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X3N5bnRheDYoKTsKICAgIGluaXRfaHRtbDcoKTsKICAgIGluaXRfdG9fbWF0dGVycygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9udG1hdHRlckAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9udG1hdHRlci9saWIvaW5kZXguanMKZnVuY3Rpb24gZnJvbnRtYXR0ZXJGcm9tTWFya2Rvd24ob3B0aW9ucykgewogIGNvbnN0IG1hdHRlcnMgPSB0b01hdHRlcnMob3B0aW9ucyk7CiAgY29uc3QgZW50ZXIgPSB7fTsKICBjb25zdCBleGl0MyA9IHt9OwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBtYXR0ZXJzLmxlbmd0aCkgewogICAgY29uc3QgbWF0dGVyMiA9IG1hdHRlcnNbaW5kZXgyXTsKICAgIGVudGVyW21hdHRlcjIudHlwZV0gPSBvcGVuZXIobWF0dGVyMik7CiAgICBleGl0M1ttYXR0ZXIyLnR5cGVdID0gY2xvc2U2OwogICAgZXhpdDNbbWF0dGVyMi50eXBlICsgIlZhbHVlIl0gPSB2YWx1ZTsKICB9CiAgcmV0dXJuIHsgZW50ZXIsIGV4aXQ6IGV4aXQzIH07Cn0KZnVuY3Rpb24gb3BlbmVyKG1hdHRlcjIpIHsKICByZXR1cm4gb3BlbjsKICBmdW5jdGlvbiBvcGVuKHRva2VuKSB7CiAgICB0aGlzLmVudGVyKHsgdHlwZTogbWF0dGVyMi50eXBlLCB2YWx1ZTogIiIgfSwgdG9rZW4pOwogICAgdGhpcy5idWZmZXIoKTsKICB9Cn0KZnVuY3Rpb24gY2xvc2U2KHRva2VuKSB7CiAgY29uc3QgZGF0YSA9IHRoaXMucmVzdW1lKCk7CiAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgb2soInZhbHVlIiBpbiBub2RlMik7CiAgdGhpcy5leGl0KHRva2VuKTsKICBub2RlMi52YWx1ZSA9IGRhdGEucmVwbGFjZSgvXihccj9cbnxccil8KFxyP1xufFxyKSQvZywgIiIpOwp9CmZ1bmN0aW9uIHZhbHVlKHRva2VuKSB7CiAgdGhpcy5jb25maWcuZW50ZXIuZGF0YS5jYWxsKHRoaXMsIHRva2VuKTsKICB0aGlzLmNvbmZpZy5leGl0LmRhdGEuY2FsbCh0aGlzLCB0b2tlbik7Cn0KZnVuY3Rpb24gZnJvbnRtYXR0ZXJUb01hcmtkb3duKG9wdGlvbnMpIHsKICBjb25zdCB1bnNhZmUyID0gW107CiAgY29uc3QgaGFuZGxlcnMyID0ge307CiAgY29uc3QgbWF0dGVycyA9IHRvTWF0dGVycyhvcHRpb25zKTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgbWF0dGVycy5sZW5ndGgpIHsKICAgIGNvbnN0IG1hdHRlcjIgPSBtYXR0ZXJzW2luZGV4Ml07CiAgICBoYW5kbGVyczJbbWF0dGVyMi50eXBlXSA9IGhhbmRsZXIobWF0dGVyMik7CiAgICBjb25zdCBvcGVuID0gZmVuY2UyKG1hdHRlcjIsICJvcGVuIik7CiAgICB1bnNhZmUyLnB1c2goewogICAgICBhdEJyZWFrOiB0cnVlLAogICAgICBjaGFyYWN0ZXI6IG9wZW4uY2hhckF0KDApLAogICAgICBhZnRlcjogZXNjYXBlU3RyaW5nUmVnZXhwKG9wZW4uY2hhckF0KDEpKQogICAgfSk7CiAgfQogIHJldHVybiB7IHVuc2FmZTogdW5zYWZlMiwgaGFuZGxlcnM6IGhhbmRsZXJzMiB9Owp9CmZ1bmN0aW9uIGhhbmRsZXIobWF0dGVyMikgewogIGNvbnN0IG9wZW4gPSBmZW5jZTIobWF0dGVyMiwgIm9wZW4iKTsKICBjb25zdCBjbG9zZTcgPSBmZW5jZTIobWF0dGVyMiwgImNsb3NlIik7CiAgcmV0dXJuIGhhbmRsZTM7CiAgZnVuY3Rpb24gaGFuZGxlMyhub2RlMikgewogICAgcmV0dXJuIG9wZW4gKyAobm9kZTIudmFsdWUgPyAiXG4iICsgbm9kZTIudmFsdWUgOiAiIikgKyAiXG4iICsgY2xvc2U3OwogIH0KfQpmdW5jdGlvbiBmZW5jZTIobWF0dGVyMiwgcHJvcCkgewogIHJldHVybiBtYXR0ZXIyLm1hcmtlciA/IHBpY2syKG1hdHRlcjIubWFya2VyLCBwcm9wKS5yZXBlYXQoMykgOiAoCiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBUaGV54oCZcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgogICAgcGljazIobWF0dGVyMi5mZW5jZSwgcHJvcCkKICApOwp9CmZ1bmN0aW9uIHBpY2syKHNjaGVtYSwgcHJvcCkgewogIHJldHVybiB0eXBlb2Ygc2NoZW1hID09PSAic3RyaW5nIiA/IHNjaGVtYSA6IHNjaGVtYVtwcm9wXTsKfQp2YXIgaW5pdF9saWIyMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZnJvbnRtYXR0ZXJAMi4wLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZnJvbnRtYXR0ZXIvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVmYXVsdCgpOwogICAgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2Zyb250bWF0dGVyKCk7CiAgICBpbml0X2VzY2FwZV9zdHJpbmdfcmVnZXhwKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWZyb250bWF0dGVyQDIuMC4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb250bWF0dGVyL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfZnJvbnRtYXR0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWZyb250bWF0dGVyQDIuMC4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb250bWF0dGVyL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMjMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1mcm9udG1hdHRlckA1LjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLWZyb250bWF0dGVyL2xpYi9pbmRleC5qcwpmdW5jdGlvbiByZW1hcmtGcm9udG1hdHRlcihvcHRpb25zKSB7CiAgY29uc3Qgc2VsZjIgPSAoCiAgICAvKiogQHR5cGUge1Byb2Nlc3Nvcn0gKi8KICAgIHRoaXMKICApOwogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnM0OwogIGNvbnN0IGRhdGEgPSBzZWxmMi5kYXRhKCk7CiAgY29uc3QgbWljcm9tYXJrRXh0ZW5zaW9ucyA9IGRhdGEubWljcm9tYXJrRXh0ZW5zaW9ucyB8fCAoZGF0YS5taWNyb21hcmtFeHRlbnNpb25zID0gW10pOwogIGNvbnN0IGZyb21NYXJrZG93bkV4dGVuc2lvbnMgPSBkYXRhLmZyb21NYXJrZG93bkV4dGVuc2lvbnMgfHwgKGRhdGEuZnJvbU1hcmtkb3duRXh0ZW5zaW9ucyA9IFtdKTsKICBjb25zdCB0b01hcmtkb3duRXh0ZW5zaW9ucyA9IGRhdGEudG9NYXJrZG93bkV4dGVuc2lvbnMgfHwgKGRhdGEudG9NYXJrZG93bkV4dGVuc2lvbnMgPSBbXSk7CiAgbWljcm9tYXJrRXh0ZW5zaW9ucy5wdXNoKGZyb250bWF0dGVyKHNldHRpbmdzKSk7CiAgZnJvbU1hcmtkb3duRXh0ZW5zaW9ucy5wdXNoKGZyb250bWF0dGVyRnJvbU1hcmtkb3duKHNldHRpbmdzKSk7CiAgdG9NYXJrZG93bkV4dGVuc2lvbnMucHVzaChmcm9udG1hdHRlclRvTWFya2Rvd24oc2V0dGluZ3MpKTsKfQp2YXIgZW1wdHlPcHRpb25zNDsKdmFyIGluaXRfbGliMjQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstZnJvbnRtYXR0ZXJANS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1mcm9udG1hdHRlci9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9tZGFzdF91dGlsX2Zyb250bWF0dGVyKCk7CiAgICBpbml0X21pY3JvbWFya19leHRlbnNpb25fZnJvbnRtYXR0ZXIoKTsKICAgIGVtcHR5T3B0aW9uczQgPSAieWFtbCI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstZnJvbnRtYXR0ZXJANS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1mcm9udG1hdHRlci9pbmRleC5qcwp2YXIgaW5pdF9yZW1hcmtfZnJvbnRtYXR0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstZnJvbnRtYXR0ZXJANS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1mcm9udG1hdHRlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjI0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdW5nYXArc3RydWN0dXJlZC1jbG9uZUAxLjMuMC9ub2RlX21vZHVsZXMvQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUvZXNtL3R5cGVzLmpzCnZhciBWT0lELCBQUklNSVRJVkUsIEFSUkFZLCBPQkpFQ1QsIERBVEUsIFJFR0VYUCwgTUFQLCBTRVQsIEVSUk9SLCBCSUdJTlQ7CnZhciBpbml0X3R5cGVzMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vdHlwZXMuanMiKCkgewogICAgVk9JRCA9IC0xOwogICAgUFJJTUlUSVZFID0gMDsKICAgIEFSUkFZID0gMTsKICAgIE9CSkVDVCA9IDI7CiAgICBEQVRFID0gMzsKICAgIFJFR0VYUCA9IDQ7CiAgICBNQVAgPSA1OwogICAgU0VUID0gNjsKICAgIEVSUk9SID0gNzsKICAgIEJJR0lOVCA9IDg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdW5nYXArc3RydWN0dXJlZC1jbG9uZUAxLjMuMC9ub2RlX21vZHVsZXMvQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUvZXNtL2Rlc2VyaWFsaXplLmpzCnZhciBlbnYsIGRlc2VyaWFsaXplciwgZGVzZXJpYWxpemU7CnZhciBpbml0X2Rlc2VyaWFsaXplID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHVuZ2FwK3N0cnVjdHVyZWQtY2xvbmVAMS4zLjAvbm9kZV9tb2R1bGVzL0B1bmdhcC9zdHJ1Y3R1cmVkLWNsb25lL2VzbS9kZXNlcmlhbGl6ZS5qcyIoKSB7CiAgICBpbml0X3R5cGVzMigpOwogICAgZW52ID0gdHlwZW9mIHNlbGYgPT09ICJvYmplY3QiID8gc2VsZiA6IGdsb2JhbFRoaXM7CiAgICBkZXNlcmlhbGl6ZXIgPSAoJDMsIF80KSA9PiB7CiAgICAgIGNvbnN0IGFzID0gKG91dCwgaW5kZXgyKSA9PiB7CiAgICAgICAgJDMuc2V0KGluZGV4Miwgb3V0KTsKICAgICAgICByZXR1cm4gb3V0OwogICAgICB9OwogICAgICBjb25zdCB1bnBhaXIgPSAoaW5kZXgyKSA9PiB7CiAgICAgICAgaWYgKCQzLmhhcyhpbmRleDIpKQogICAgICAgICAgcmV0dXJuICQzLmdldChpbmRleDIpOwogICAgICAgIGNvbnN0IFt0eXBlNSwgdmFsdWUyXSA9IF80W2luZGV4Ml07CiAgICAgICAgc3dpdGNoICh0eXBlNSkgewogICAgICAgICAgY2FzZSBQUklNSVRJVkU6CiAgICAgICAgICBjYXNlIFZPSUQ6CiAgICAgICAgICAgIHJldHVybiBhcyh2YWx1ZTIsIGluZGV4Mik7CiAgICAgICAgICBjYXNlIEFSUkFZOiB7CiAgICAgICAgICAgIGNvbnN0IGFyciA9IGFzKFtdLCBpbmRleDIpOwogICAgICAgICAgICBmb3IgKGNvbnN0IGluZGV4MyBvZiB2YWx1ZTIpCiAgICAgICAgICAgICAgYXJyLnB1c2godW5wYWlyKGluZGV4MykpOwogICAgICAgICAgICByZXR1cm4gYXJyOwogICAgICAgICAgfQogICAgICAgICAgY2FzZSBPQkpFQ1Q6IHsKICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gYXMoe30sIGluZGV4Mik7CiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleTIsIGluZGV4M10gb2YgdmFsdWUyKQogICAgICAgICAgICAgIG9iamVjdFt1bnBhaXIoa2V5MildID0gdW5wYWlyKGluZGV4Myk7CiAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIERBVEU6CiAgICAgICAgICAgIHJldHVybiBhcyhuZXcgRGF0ZSh2YWx1ZTIpLCBpbmRleDIpOwogICAgICAgICAgY2FzZSBSRUdFWFA6IHsKICAgICAgICAgICAgY29uc3QgeyBzb3VyY2UsIGZsYWdzIH0gPSB2YWx1ZTI7CiAgICAgICAgICAgIHJldHVybiBhcyhuZXcgUmVnRXhwKHNvdXJjZSwgZmxhZ3MpLCBpbmRleDIpOwogICAgICAgICAgfQogICAgICAgICAgY2FzZSBNQVA6IHsKICAgICAgICAgICAgY29uc3QgbWFwNyA9IGFzKC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIGluZGV4Mik7CiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleTIsIGluZGV4M10gb2YgdmFsdWUyKQogICAgICAgICAgICAgIG1hcDcuc2V0KHVucGFpcihrZXkyKSwgdW5wYWlyKGluZGV4MykpOwogICAgICAgICAgICByZXR1cm4gbWFwNzsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgU0VUOiB7CiAgICAgICAgICAgIGNvbnN0IHNldDMgPSBhcygvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCBpbmRleDIpOwogICAgICAgICAgICBmb3IgKGNvbnN0IGluZGV4MyBvZiB2YWx1ZTIpCiAgICAgICAgICAgICAgc2V0My5hZGQodW5wYWlyKGluZGV4MykpOwogICAgICAgICAgICByZXR1cm4gc2V0MzsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgRVJST1I6IHsKICAgICAgICAgICAgY29uc3QgeyBuYW1lLCBtZXNzYWdlOiBtZXNzYWdlMiB9ID0gdmFsdWUyOwogICAgICAgICAgICByZXR1cm4gYXMobmV3IGVudltuYW1lXShtZXNzYWdlMiksIGluZGV4Mik7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIEJJR0lOVDoKICAgICAgICAgICAgcmV0dXJuIGFzKEJpZ0ludCh2YWx1ZTIpLCBpbmRleDIpOwogICAgICAgICAgY2FzZSAiQmlnSW50IjoKICAgICAgICAgICAgcmV0dXJuIGFzKE9iamVjdChCaWdJbnQodmFsdWUyKSksIGluZGV4Mik7CiAgICAgICAgICBjYXNlICJBcnJheUJ1ZmZlciI6CiAgICAgICAgICAgIHJldHVybiBhcyhuZXcgVWludDhBcnJheSh2YWx1ZTIpLmJ1ZmZlciwgdmFsdWUyKTsKICAgICAgICAgIGNhc2UgIkRhdGFWaWV3IjogewogICAgICAgICAgICBjb25zdCB7IGJ1ZmZlcjogYnVmZmVyMiB9ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUyKTsKICAgICAgICAgICAgcmV0dXJuIGFzKG5ldyBEYXRhVmlldyhidWZmZXIyKSwgdmFsdWUyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFzKG5ldyBlbnZbdHlwZTVdKHZhbHVlMiksIGluZGV4Mik7CiAgICAgIH07CiAgICAgIHJldHVybiB1bnBhaXI7CiAgICB9OwogICAgZGVzZXJpYWxpemUgPSAoc2VyaWFsaXplZCkgPT4gZGVzZXJpYWxpemVyKC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIHNlcmlhbGl6ZWQpKDApOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHVuZ2FwK3N0cnVjdHVyZWQtY2xvbmVAMS4zLjAvbm9kZV9tb2R1bGVzL0B1bmdhcC9zdHJ1Y3R1cmVkLWNsb25lL2VzbS9zZXJpYWxpemUuanMKdmFyIEVNUFRZMiwgdG9TdHJpbmcyLCBrZXlzLCB0eXBlT2YsIHNob3VsZFNraXAsIHNlcmlhbGl6ZXIsIHNlcmlhbGl6ZTI7CnZhciBpbml0X3NlcmlhbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vc2VyaWFsaXplLmpzIigpIHsKICAgIGluaXRfdHlwZXMyKCk7CiAgICBFTVBUWTIgPSAiIjsKICAgICh7IHRvU3RyaW5nOiB0b1N0cmluZzIgfSA9IHt9KTsKICAgICh7IGtleXMgfSA9IE9iamVjdCk7CiAgICB0eXBlT2YgPSAodmFsdWUyKSA9PiB7CiAgICAgIGNvbnN0IHR5cGU1ID0gdHlwZW9mIHZhbHVlMjsKICAgICAgaWYgKHR5cGU1ICE9PSAib2JqZWN0IiB8fCAhdmFsdWUyKQogICAgICAgIHJldHVybiBbUFJJTUlUSVZFLCB0eXBlNV07CiAgICAgIGNvbnN0IGFzU3RyaW5nID0gdG9TdHJpbmcyLmNhbGwodmFsdWUyKS5zbGljZSg4LCAtMSk7CiAgICAgIHN3aXRjaCAoYXNTdHJpbmcpIHsKICAgICAgICBjYXNlICJBcnJheSI6CiAgICAgICAgICByZXR1cm4gW0FSUkFZLCBFTVBUWTJdOwogICAgICAgIGNhc2UgIk9iamVjdCI6CiAgICAgICAgICByZXR1cm4gW09CSkVDVCwgRU1QVFkyXTsKICAgICAgICBjYXNlICJEYXRlIjoKICAgICAgICAgIHJldHVybiBbREFURSwgRU1QVFkyXTsKICAgICAgICBjYXNlICJSZWdFeHAiOgogICAgICAgICAgcmV0dXJuIFtSRUdFWFAsIEVNUFRZMl07CiAgICAgICAgY2FzZSAiTWFwIjoKICAgICAgICAgIHJldHVybiBbTUFQLCBFTVBUWTJdOwogICAgICAgIGNhc2UgIlNldCI6CiAgICAgICAgICByZXR1cm4gW1NFVCwgRU1QVFkyXTsKICAgICAgICBjYXNlICJEYXRhVmlldyI6CiAgICAgICAgICByZXR1cm4gW0FSUkFZLCBhc1N0cmluZ107CiAgICAgIH0KICAgICAgaWYgKGFzU3RyaW5nLmluY2x1ZGVzKCJBcnJheSIpKQogICAgICAgIHJldHVybiBbQVJSQVksIGFzU3RyaW5nXTsKICAgICAgaWYgKGFzU3RyaW5nLmluY2x1ZGVzKCJFcnJvciIpKQogICAgICAgIHJldHVybiBbRVJST1IsIGFzU3RyaW5nXTsKICAgICAgcmV0dXJuIFtPQkpFQ1QsIGFzU3RyaW5nXTsKICAgIH07CiAgICBzaG91bGRTa2lwID0gKFtUWVBFLCB0eXBlNV0pID0+IFRZUEUgPT09IFBSSU1JVElWRSAmJiAodHlwZTUgPT09ICJmdW5jdGlvbiIgfHwgdHlwZTUgPT09ICJzeW1ib2wiKTsKICAgIHNlcmlhbGl6ZXIgPSAoc3RyaWN0LCBqc29uLCAkMywgXzQpID0+IHsKICAgICAgY29uc3QgYXMgPSAob3V0LCB2YWx1ZTIpID0+IHsKICAgICAgICBjb25zdCBpbmRleDIgPSBfNC5wdXNoKG91dCkgLSAxOwogICAgICAgICQzLnNldCh2YWx1ZTIsIGluZGV4Mik7CiAgICAgICAgcmV0dXJuIGluZGV4MjsKICAgICAgfTsKICAgICAgY29uc3QgcGFpciA9ICh2YWx1ZTIpID0+IHsKICAgICAgICBpZiAoJDMuaGFzKHZhbHVlMikpCiAgICAgICAgICByZXR1cm4gJDMuZ2V0KHZhbHVlMik7CiAgICAgICAgbGV0IFtUWVBFLCB0eXBlNV0gPSB0eXBlT2YodmFsdWUyKTsKICAgICAgICBzd2l0Y2ggKFRZUEUpIHsKICAgICAgICAgIGNhc2UgUFJJTUlUSVZFOiB7CiAgICAgICAgICAgIGxldCBlbnRyeSA9IHZhbHVlMjsKICAgICAgICAgICAgc3dpdGNoICh0eXBlNSkgewogICAgICAgICAgICAgIGNhc2UgImJpZ2ludCI6CiAgICAgICAgICAgICAgICBUWVBFID0gQklHSU5UOwogICAgICAgICAgICAgICAgZW50cnkgPSB2YWx1ZTIudG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImZ1bmN0aW9uIjoKICAgICAgICAgICAgICBjYXNlICJzeW1ib2wiOgogICAgICAgICAgICAgICAgaWYgKHN0cmljdCkKICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigidW5hYmxlIHRvIHNlcmlhbGl6ZSAiICsgdHlwZTUpOwogICAgICAgICAgICAgICAgZW50cnkgPSBudWxsOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAidW5kZWZpbmVkIjoKICAgICAgICAgICAgICAgIHJldHVybiBhcyhbVk9JRF0sIHZhbHVlMik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGFzKFtUWVBFLCBlbnRyeV0sIHZhbHVlMik7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIEFSUkFZOiB7CiAgICAgICAgICAgIGlmICh0eXBlNSkgewogICAgICAgICAgICAgIGxldCBzcHJlYWQgPSB2YWx1ZTI7CiAgICAgICAgICAgICAgaWYgKHR5cGU1ID09PSAiRGF0YVZpZXciKSB7CiAgICAgICAgICAgICAgICBzcHJlYWQgPSBuZXcgVWludDhBcnJheSh2YWx1ZTIuYnVmZmVyKTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGU1ID09PSAiQXJyYXlCdWZmZXIiKSB7CiAgICAgICAgICAgICAgICBzcHJlYWQgPSBuZXcgVWludDhBcnJheSh2YWx1ZTIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gYXMoW3R5cGU1LCBbLi4uc3ByZWFkXV0sIHZhbHVlMik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgYXJyID0gW107CiAgICAgICAgICAgIGNvbnN0IGluZGV4MiA9IGFzKFtUWVBFLCBhcnJdLCB2YWx1ZTIpOwogICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHZhbHVlMikKICAgICAgICAgICAgICBhcnIucHVzaChwYWlyKGVudHJ5KSk7CiAgICAgICAgICAgIHJldHVybiBpbmRleDI7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIE9CSkVDVDogewogICAgICAgICAgICBpZiAodHlwZTUpIHsKICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGU1KSB7CiAgICAgICAgICAgICAgICBjYXNlICJCaWdJbnQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYXMoW3R5cGU1LCB2YWx1ZTIudG9TdHJpbmcoKV0sIHZhbHVlMik7CiAgICAgICAgICAgICAgICBjYXNlICJCb29sZWFuIjoKICAgICAgICAgICAgICAgIGNhc2UgIk51bWJlciI6CiAgICAgICAgICAgICAgICBjYXNlICJTdHJpbmciOgogICAgICAgICAgICAgICAgICByZXR1cm4gYXMoW3R5cGU1LCB2YWx1ZTIudmFsdWVPZigpXSwgdmFsdWUyKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGpzb24gJiYgInRvSlNPTiIgaW4gdmFsdWUyKQogICAgICAgICAgICAgIHJldHVybiBwYWlyKHZhbHVlMi50b0pTT04oKSk7CiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBbXTsKICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gYXMoW1RZUEUsIGVudHJpZXNdLCB2YWx1ZTIpOwogICAgICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2Yga2V5cyh2YWx1ZTIpKSB7CiAgICAgICAgICAgICAgaWYgKHN0cmljdCB8fCAhc2hvdWxkU2tpcCh0eXBlT2YodmFsdWUyW2tleTJdKSkpCiAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goW3BhaXIoa2V5MiksIHBhaXIodmFsdWUyW2tleTJdKV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBpbmRleDI7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIERBVEU6CiAgICAgICAgICAgIHJldHVybiBhcyhbVFlQRSwgdmFsdWUyLnRvSVNPU3RyaW5nKCldLCB2YWx1ZTIpOwogICAgICAgICAgY2FzZSBSRUdFWFA6IHsKICAgICAgICAgICAgY29uc3QgeyBzb3VyY2UsIGZsYWdzIH0gPSB2YWx1ZTI7CiAgICAgICAgICAgIHJldHVybiBhcyhbVFlQRSwgeyBzb3VyY2UsIGZsYWdzIH1dLCB2YWx1ZTIpOwogICAgICAgICAgfQogICAgICAgICAgY2FzZSBNQVA6IHsKICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IFtdOwogICAgICAgICAgICBjb25zdCBpbmRleDIgPSBhcyhbVFlQRSwgZW50cmllc10sIHZhbHVlMik7CiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleTIsIGVudHJ5XSBvZiB2YWx1ZTIpIHsKICAgICAgICAgICAgICBpZiAoc3RyaWN0IHx8ICEoc2hvdWxkU2tpcCh0eXBlT2Yoa2V5MikpIHx8IHNob3VsZFNraXAodHlwZU9mKGVudHJ5KSkpKQogICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKFtwYWlyKGtleTIpLCBwYWlyKGVudHJ5KV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBpbmRleDI7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIFNFVDogewogICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gW107CiAgICAgICAgICAgIGNvbnN0IGluZGV4MiA9IGFzKFtUWVBFLCBlbnRyaWVzXSwgdmFsdWUyKTsKICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB2YWx1ZTIpIHsKICAgICAgICAgICAgICBpZiAoc3RyaWN0IHx8ICFzaG91bGRTa2lwKHR5cGVPZihlbnRyeSkpKQogICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKHBhaXIoZW50cnkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gaW5kZXgyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCB7IG1lc3NhZ2U6IG1lc3NhZ2UyIH0gPSB2YWx1ZTI7CiAgICAgICAgcmV0dXJuIGFzKFtUWVBFLCB7IG5hbWU6IHR5cGU1LCBtZXNzYWdlOiBtZXNzYWdlMiB9XSwgdmFsdWUyKTsKICAgICAgfTsKICAgICAgcmV0dXJuIHBhaXI7CiAgICB9OwogICAgc2VyaWFsaXplMiA9ICh2YWx1ZTIsIHsganNvbiwgbG9zc3kgfSA9IHt9KSA9PiB7CiAgICAgIGNvbnN0IF80ID0gW107CiAgICAgIHJldHVybiBzZXJpYWxpemVyKCEoanNvbiB8fCBsb3NzeSksICEhanNvbiwgLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgXzQpKHZhbHVlMiksIF80OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vaW5kZXguanMKdmFyIGVzbV9kZWZhdWx0Owp2YXIgaW5pdF9lc20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdW5nYXArc3RydWN0dXJlZC1jbG9uZUAxLjMuMC9ub2RlX21vZHVsZXMvQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUvZXNtL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVzZXJpYWxpemUoKTsKICAgIGluaXRfc2VyaWFsaXplKCk7CiAgICBlc21fZGVmYXVsdCA9IHR5cGVvZiBzdHJ1Y3R1cmVkQ2xvbmUgPT09ICJmdW5jdGlvbiIgPyAoCiAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqLwogICAgICAoYW55LCBvcHRpb25zKSA9PiBvcHRpb25zICYmICgianNvbiIgaW4gb3B0aW9ucyB8fCAibG9zc3kiIGluIG9wdGlvbnMpID8gZGVzZXJpYWxpemUoc2VyaWFsaXplMihhbnksIG9wdGlvbnMpKSA6IHN0cnVjdHVyZWRDbG9uZShhbnkpCiAgICApIDogKGFueSwgb3B0aW9ucykgPT4gZGVzZXJpYWxpemUoc2VyaWFsaXplMihhbnksIG9wdGlvbnMpKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtcG9zaXRpb25ANS4wLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtcG9zaXRpb24vbGliL2luZGV4LmpzCmZ1bmN0aW9uIHBvaW50Myh0eXBlNSkgewogIHJldHVybiBwb2ludDQ7CiAgZnVuY3Rpb24gcG9pbnQ0KG5vZGUyKSB7CiAgICBjb25zdCBwb2ludDUgPSBub2RlMiAmJiBub2RlMi5wb3NpdGlvbiAmJiBub2RlMi5wb3NpdGlvblt0eXBlNV0gfHwge307CiAgICBpZiAodHlwZW9mIHBvaW50NS5saW5lID09PSAibnVtYmVyIiAmJiBwb2ludDUubGluZSA+IDAgJiYgdHlwZW9mIHBvaW50NS5jb2x1bW4gPT09ICJudW1iZXIiICYmIHBvaW50NS5jb2x1bW4gPiAwKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgbGluZTogcG9pbnQ1LmxpbmUsCiAgICAgICAgY29sdW1uOiBwb2ludDUuY29sdW1uLAogICAgICAgIG9mZnNldDogdHlwZW9mIHBvaW50NS5vZmZzZXQgPT09ICJudW1iZXIiICYmIHBvaW50NS5vZmZzZXQgPiAtMSA/IHBvaW50NS5vZmZzZXQgOiB2b2lkIDAKICAgICAgfTsKICAgIH0KICB9Cn0KZnVuY3Rpb24gcG9zaXRpb24yKG5vZGUyKSB7CiAgY29uc3Qgc3RhcnQgPSBwb2ludFN0YXJ0KG5vZGUyKTsKICBjb25zdCBlbmQzID0gcG9pbnRFbmQobm9kZTIpOwogIGlmIChzdGFydCAmJiBlbmQzKSB7CiAgICByZXR1cm4geyBzdGFydCwgZW5kOiBlbmQzIH07CiAgfQp9CnZhciBwb2ludEVuZCwgcG9pbnRTdGFydDsKdmFyIGluaXRfbGliMjUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXBvc2l0aW9uQDUuMC4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXBvc2l0aW9uL2xpYi9pbmRleC5qcyIoKSB7CiAgICBwb2ludEVuZCA9IHBvaW50MygiZW5kIik7CiAgICBwb2ludFN0YXJ0ID0gcG9pbnQzKCJzdGFydCIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1wb3NpdGlvbkA1LjAuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1wb3NpdGlvbi9pbmRleC5qcwp2YXIgaW5pdF91bmlzdF91dGlsX3Bvc2l0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1wb3NpdGlvbkA1LjAuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1wb3NpdGlvbi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjI1KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtc2FuaXRpemVANS4wLjIvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC1zYW5pdGl6ZS9saWIvc2NoZW1hLmpzCnZhciBhcmlhLCBkZWZhdWx0U2NoZW1hOwp2YXIgaW5pdF9zY2hlbWEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtc2FuaXRpemVANS4wLjIvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC1zYW5pdGl6ZS9saWIvc2NoZW1hLmpzIigpIHsKICAgIGFyaWEgPSBbImFyaWFEZXNjcmliZWRCeSIsICJhcmlhTGFiZWwiLCAiYXJpYUxhYmVsbGVkQnkiXTsKICAgIGRlZmF1bHRTY2hlbWEgPSB7CiAgICAgIGFuY2VzdG9yczogewogICAgICAgIHRib2R5OiBbInRhYmxlIl0sCiAgICAgICAgdGQ6IFsidGFibGUiXSwKICAgICAgICB0aDogWyJ0YWJsZSJdLAogICAgICAgIHRoZWFkOiBbInRhYmxlIl0sCiAgICAgICAgdGZvb3Q6IFsidGFibGUiXSwKICAgICAgICB0cjogWyJ0YWJsZSJdCiAgICAgIH0sCiAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBhOiBbCiAgICAgICAgICAuLi5hcmlhLAogICAgICAgICAgLy8gTm90ZTogdGhlc2UgMyBhcmUgdXNlZCBieSBHRk0gZm9vdG5vdGVzLCB0aGV5IGRvIHdvcmsgb24gYWxsIGxpbmtzLgogICAgICAgICAgImRhdGFGb290bm90ZUJhY2tyZWYiLAogICAgICAgICAgImRhdGFGb290bm90ZVJlZiIsCiAgICAgICAgICBbImNsYXNzTmFtZSIsICJkYXRhLWZvb3Rub3RlLWJhY2tyZWYiXSwKICAgICAgICAgICJocmVmIgogICAgICAgIF0sCiAgICAgICAgYmxvY2txdW90ZTogWyJjaXRlIl0sCiAgICAgICAgLy8gTm90ZTogdGhpcyBjbGFzcyBpcyBub3Qgbm9ybWFsbHkgYWxsb3dlZCBieSBHSCwgd2hlbiBtYW51YWxseSB3cml0aW5nCiAgICAgICAgLy8gYGNvZGVgIGFzIEhUTUwgaW4gbWFya2Rvd24sIHRoZXkgYWRkcyBpdCBzb21lIG90aGVyIHdheS4KICAgICAgICAvLyBXZSBjYW7igJl0IGRvIHRoYXQsIHNvIHdlIGhhdmUgdG8gYWxsb3cgaXQuCiAgICAgICAgY29kZTogW1siY2xhc3NOYW1lIiwgL15sYW5ndWFnZS0uL11dLAogICAgICAgIGRlbDogWyJjaXRlIl0sCiAgICAgICAgZGl2OiBbIml0ZW1TY29wZSIsICJpdGVtVHlwZSJdLAogICAgICAgIGRsOiBbLi4uYXJpYV0sCiAgICAgICAgLy8gTm90ZTogdGhpcyBpcyB1c2VkIGJ5IEdGTSBmb290bm90ZXMuCiAgICAgICAgaDI6IFtbImNsYXNzTmFtZSIsICJzci1vbmx5Il1dLAogICAgICAgIGltZzogWy4uLmFyaWEsICJsb25nRGVzYyIsICJzcmMiXSwKICAgICAgICAvLyBOb3RlOiBgaW5wdXRgIGlzIG5vdCBub3JtYWxseSBhbGxvd2VkIGJ5IEdILCB3aGVuIG1hbnVhbGx5IHdyaXRpbmcKICAgICAgICAvLyBpdCBpbiBtYXJrZG93biwgdGhleSBhZGQgaXQgZnJvbSB0YXNrbGlzdHMgc29tZSBvdGhlciB3YXkuCiAgICAgICAgLy8gV2UgY2Fu4oCZdCBkbyB0aGF0LCBzbyB3ZSBoYXZlIHRvIGFsbG93IGl0LgogICAgICAgIGlucHV0OiBbCiAgICAgICAgICBbImRpc2FibGVkIiwgdHJ1ZV0sCiAgICAgICAgICBbInR5cGUiLCAiY2hlY2tib3giXQogICAgICAgIF0sCiAgICAgICAgaW5zOiBbImNpdGUiXSwKICAgICAgICAvLyBOb3RlOiB0aGlzIGNsYXNzIGlzIG5vdCBub3JtYWxseSBhbGxvd2VkIGJ5IEdILCB3aGVuIG1hbnVhbGx5IHdyaXRpbmcKICAgICAgICAvLyBgbGlgIGFzIEhUTUwgaW4gbWFya2Rvd24sIHRoZXkgYWRkcyBpdCBzb21lIG90aGVyIHdheS4KICAgICAgICAvLyBXZSBjYW7igJl0IGRvIHRoYXQsIHNvIHdlIGhhdmUgdG8gYWxsb3cgaXQuCiAgICAgICAgbGk6IFtbImNsYXNzTmFtZSIsICJ0YXNrLWxpc3QtaXRlbSJdXSwKICAgICAgICAvLyBOb3RlOiB0aGlzIGNsYXNzIGlzIG5vdCBub3JtYWxseSBhbGxvd2VkIGJ5IEdILCB3aGVuIG1hbnVhbGx5IHdyaXRpbmcKICAgICAgICAvLyBgb2xgIGFzIEhUTUwgaW4gbWFya2Rvd24sIHRoZXkgYWRkcyBpdCBzb21lIG90aGVyIHdheS4KICAgICAgICAvLyBXZSBjYW7igJl0IGRvIHRoYXQsIHNvIHdlIGhhdmUgdG8gYWxsb3cgaXQuCiAgICAgICAgb2w6IFsuLi5hcmlhLCBbImNsYXNzTmFtZSIsICJjb250YWlucy10YXNrLWxpc3QiXV0sCiAgICAgICAgcTogWyJjaXRlIl0sCiAgICAgICAgc2VjdGlvbjogWyJkYXRhRm9vdG5vdGVzIiwgWyJjbGFzc05hbWUiLCAiZm9vdG5vdGVzIl1dLAogICAgICAgIHNvdXJjZTogWyJzcmNTZXQiXSwKICAgICAgICBzdW1tYXJ5OiBbLi4uYXJpYV0sCiAgICAgICAgdGFibGU6IFsuLi5hcmlhXSwKICAgICAgICAvLyBOb3RlOiB0aGlzIGNsYXNzIGlzIG5vdCBub3JtYWxseSBhbGxvd2VkIGJ5IEdILCB3aGVuIG1hbnVhbGx5IHdyaXRpbmcKICAgICAgICAvLyBgb2xgIGFzIEhUTUwgaW4gbWFya2Rvd24sIHRoZXkgYWRkcyBpdCBzb21lIG90aGVyIHdheS4KICAgICAgICAvLyBXZSBjYW7igJl0IGRvIHRoYXQsIHNvIHdlIGhhdmUgdG8gYWxsb3cgaXQuCiAgICAgICAgdWw6IFsuLi5hcmlhLCBbImNsYXNzTmFtZSIsICJjb250YWlucy10YXNrLWxpc3QiXV0sCiAgICAgICAgIioiOiBbCiAgICAgICAgICAiYWJiciIsCiAgICAgICAgICAiYWNjZXB0IiwKICAgICAgICAgICJhY2NlcHRDaGFyc2V0IiwKICAgICAgICAgICJhY2Nlc3NLZXkiLAogICAgICAgICAgImFjdGlvbiIsCiAgICAgICAgICAiYWxpZ24iLAogICAgICAgICAgImFsdCIsCiAgICAgICAgICAiYXhpcyIsCiAgICAgICAgICAiYm9yZGVyIiwKICAgICAgICAgICJjZWxsUGFkZGluZyIsCiAgICAgICAgICAiY2VsbFNwYWNpbmciLAogICAgICAgICAgImNoYXIiLAogICAgICAgICAgImNoYXJPZmYiLAogICAgICAgICAgImNoYXJTZXQiLAogICAgICAgICAgImNoZWNrZWQiLAogICAgICAgICAgImNsZWFyIiwKICAgICAgICAgICJjb2xTcGFuIiwKICAgICAgICAgICJjb2xvciIsCiAgICAgICAgICAiY29scyIsCiAgICAgICAgICAiY29tcGFjdCIsCiAgICAgICAgICAiY29vcmRzIiwKICAgICAgICAgICJkYXRlVGltZSIsCiAgICAgICAgICAiZGlyIiwKICAgICAgICAgIC8vIE5vdGU6IGBkaXNhYmxlZGAgaXMgdGVjaG5pY2FsbHkgYWxsb3dlZCBvbiBhbGwgZWxlbWVudHMgYnkgR0guCiAgICAgICAgICAvLyBCdXQgaXQgaXMgdXNlbGVzcyBvbiBldmVyeXRoaW5nIGV4Y2VwdCBgaW5wdXRgLgogICAgICAgICAgLy8gQmVjYXVzZSBgaW5wdXRgcyBhcmUgbm9ybWFsbHkgbm90IGFsbG93ZWQsIGJ1dCB3ZSBhbGxvdyB0aGVtIGZvcgogICAgICAgICAgLy8gY2hlY2tib3hlcyBkdWUgdG8gdGFza2xpc3RzLCB3ZSBhbGxvdyBgZGlzYWJsZWRgIG9ubHkgdGhlcmUuCiAgICAgICAgICAiZW5jVHlwZSIsCiAgICAgICAgICAiZnJhbWUiLAogICAgICAgICAgImhTcGFjZSIsCiAgICAgICAgICAiaGVhZGVycyIsCiAgICAgICAgICAiaGVpZ2h0IiwKICAgICAgICAgICJocmVmTGFuZyIsCiAgICAgICAgICAiaHRtbEZvciIsCiAgICAgICAgICAiaWQiLAogICAgICAgICAgImlzTWFwIiwKICAgICAgICAgICJpdGVtUHJvcCIsCiAgICAgICAgICAibGFiZWwiLAogICAgICAgICAgImxhbmciLAogICAgICAgICAgIm1heExlbmd0aCIsCiAgICAgICAgICAibWVkaWEiLAogICAgICAgICAgIm1ldGhvZCIsCiAgICAgICAgICAibXVsdGlwbGUiLAogICAgICAgICAgIm5hbWUiLAogICAgICAgICAgIm5vSHJlZiIsCiAgICAgICAgICAibm9TaGFkZSIsCiAgICAgICAgICAibm9XcmFwIiwKICAgICAgICAgICJvcGVuIiwKICAgICAgICAgICJwcm9tcHQiLAogICAgICAgICAgInJlYWRPbmx5IiwKICAgICAgICAgICJyZXYiLAogICAgICAgICAgInJvd1NwYW4iLAogICAgICAgICAgInJvd3MiLAogICAgICAgICAgInJ1bGVzIiwKICAgICAgICAgICJzY29wZSIsCiAgICAgICAgICAic2VsZWN0ZWQiLAogICAgICAgICAgInNoYXBlIiwKICAgICAgICAgICJzaXplIiwKICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICJzdGFydCIsCiAgICAgICAgICAic3VtbWFyeSIsCiAgICAgICAgICAidGFiSW5kZXgiLAogICAgICAgICAgInRpdGxlIiwKICAgICAgICAgICJ1c2VNYXAiLAogICAgICAgICAgInZBbGlnbiIsCiAgICAgICAgICAidmFsdWUiLAogICAgICAgICAgIndpZHRoIgogICAgICAgIF0KICAgICAgfSwKICAgICAgY2xvYmJlcjogWyJhcmlhRGVzY3JpYmVkQnkiLCAiYXJpYUxhYmVsbGVkQnkiLCAiaWQiLCAibmFtZSJdLAogICAgICBjbG9iYmVyUHJlZml4OiAidXNlci1jb250ZW50LSIsCiAgICAgIHByb3RvY29sczogewogICAgICAgIGNpdGU6IFsiaHR0cCIsICJodHRwcyJdLAogICAgICAgIGhyZWY6IFsiaHR0cCIsICJodHRwcyIsICJpcmMiLCAiaXJjcyIsICJtYWlsdG8iLCAieG1wcCJdLAogICAgICAgIGxvbmdEZXNjOiBbImh0dHAiLCAiaHR0cHMiXSwKICAgICAgICBzcmM6IFsiaHR0cCIsICJodHRwcyJdCiAgICAgIH0sCiAgICAgIHJlcXVpcmVkOiB7CiAgICAgICAgaW5wdXQ6IHsgZGlzYWJsZWQ6IHRydWUsIHR5cGU6ICJjaGVja2JveCIgfQogICAgICB9LAogICAgICBzdHJpcDogWyJzY3JpcHQiXSwKICAgICAgdGFnTmFtZXM6IFsKICAgICAgICAiYSIsCiAgICAgICAgImIiLAogICAgICAgICJibG9ja3F1b3RlIiwKICAgICAgICAiYnIiLAogICAgICAgICJjb2RlIiwKICAgICAgICAiZGQiLAogICAgICAgICJkZWwiLAogICAgICAgICJkZXRhaWxzIiwKICAgICAgICAiZGl2IiwKICAgICAgICAiZGwiLAogICAgICAgICJkdCIsCiAgICAgICAgImVtIiwKICAgICAgICAiaDEiLAogICAgICAgICJoMiIsCiAgICAgICAgImgzIiwKICAgICAgICAiaDQiLAogICAgICAgICJoNSIsCiAgICAgICAgImg2IiwKICAgICAgICAiaHIiLAogICAgICAgICJpIiwKICAgICAgICAiaW1nIiwKICAgICAgICAvLyBOb3RlOiBgaW5wdXRgIGlzIG5vdCBub3JtYWxseSBhbGxvd2VkIGJ5IEdILCB3aGVuIG1hbnVhbGx5IHdyaXRpbmcKICAgICAgICAvLyBpdCBpbiBtYXJrZG93biwgdGhleSBhZGQgaXQgZnJvbSB0YXNrbGlzdHMgc29tZSBvdGhlciB3YXkuCiAgICAgICAgLy8gV2UgY2Fu4oCZdCBkbyB0aGF0LCBzbyB3ZSBoYXZlIHRvIGFsbG93IGl0LgogICAgICAgICJpbnB1dCIsCiAgICAgICAgImlucyIsCiAgICAgICAgImtiZCIsCiAgICAgICAgImxpIiwKICAgICAgICAib2wiLAogICAgICAgICJwIiwKICAgICAgICAicGljdHVyZSIsCiAgICAgICAgInByZSIsCiAgICAgICAgInEiLAogICAgICAgICJycCIsCiAgICAgICAgInJ0IiwKICAgICAgICAicnVieSIsCiAgICAgICAgInMiLAogICAgICAgICJzYW1wIiwKICAgICAgICAic2VjdGlvbiIsCiAgICAgICAgInNvdXJjZSIsCiAgICAgICAgInNwYW4iLAogICAgICAgICJzdHJpa2UiLAogICAgICAgICJzdHJvbmciLAogICAgICAgICJzdWIiLAogICAgICAgICJzdW1tYXJ5IiwKICAgICAgICAic3VwIiwKICAgICAgICAidGFibGUiLAogICAgICAgICJ0Ym9keSIsCiAgICAgICAgInRkIiwKICAgICAgICAidGZvb3QiLAogICAgICAgICJ0aCIsCiAgICAgICAgInRoZWFkIiwKICAgICAgICAidHIiLAogICAgICAgICJ0dCIsCiAgICAgICAgInVsIiwKICAgICAgICAidmFyIgogICAgICBdCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXNhbml0aXplQDUuMC4yL25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtc2FuaXRpemUvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHNhbml0aXplKG5vZGUyLCBvcHRpb25zKSB7CiAgbGV0IHJlc3VsdCA9IHsgdHlwZTogInJvb3QiLCBjaGlsZHJlbjogW10gfTsKICBjb25zdCBzdGF0ZTE0ID0gewogICAgc2NoZW1hOiBvcHRpb25zID8geyAuLi5kZWZhdWx0U2NoZW1hLCAuLi5vcHRpb25zIH0gOiBkZWZhdWx0U2NoZW1hLAogICAgc3RhY2s6IFtdCiAgfTsKICBjb25zdCByZXBsYWNlNSA9IHRyYW5zZm9ybShzdGF0ZTE0LCBub2RlMik7CiAgaWYgKHJlcGxhY2U1KSB7CiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXBsYWNlNSkpIHsKICAgICAgaWYgKHJlcGxhY2U1Lmxlbmd0aCA9PT0gMSkgewogICAgICAgIHJlc3VsdCA9IHJlcGxhY2U1WzBdOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IHJlcGxhY2U1OwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSByZXBsYWNlNTsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiB0cmFuc2Zvcm0oc3RhdGUxNCwgbm9kZTIpIHsKICBpZiAobm9kZTIgJiYgdHlwZW9mIG5vZGUyID09PSAib2JqZWN0IikgewogICAgY29uc3QgdW5zYWZlMiA9ICgKICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBSZWFkb25seTx1bmtub3duPj59ICovCiAgICAgIG5vZGUyCiAgICApOwogICAgY29uc3QgdHlwZTUgPSB0eXBlb2YgdW5zYWZlMi50eXBlID09PSAic3RyaW5nIiA/IHVuc2FmZTIudHlwZSA6ICIiOwogICAgc3dpdGNoICh0eXBlNSkgewogICAgICBjYXNlICJjb21tZW50IjogewogICAgICAgIHJldHVybiBjb21tZW50KHN0YXRlMTQsIHVuc2FmZTIpOwogICAgICB9CiAgICAgIGNhc2UgImRvY3R5cGUiOiB7CiAgICAgICAgcmV0dXJuIGRvY3R5cGUoc3RhdGUxNCwgdW5zYWZlMik7CiAgICAgIH0KICAgICAgY2FzZSAiZWxlbWVudCI6IHsKICAgICAgICByZXR1cm4gZWxlbWVudDIoc3RhdGUxNCwgdW5zYWZlMik7CiAgICAgIH0KICAgICAgY2FzZSAicm9vdCI6IHsKICAgICAgICByZXR1cm4gcm9vdDIoc3RhdGUxNCwgdW5zYWZlMik7CiAgICAgIH0KICAgICAgY2FzZSAidGV4dCI6IHsKICAgICAgICByZXR1cm4gdGV4dDUoc3RhdGUxNCwgdW5zYWZlMik7CiAgICAgIH0KICAgICAgZGVmYXVsdDoKICAgIH0KICB9Cn0KZnVuY3Rpb24gY29tbWVudChzdGF0ZTE0LCB1bnNhZmUyKSB7CiAgaWYgKHN0YXRlMTQuc2NoZW1hLmFsbG93Q29tbWVudHMpIHsKICAgIGNvbnN0IHJlc3VsdCA9IHR5cGVvZiB1bnNhZmUyLnZhbHVlID09PSAic3RyaW5nIiA/IHVuc2FmZTIudmFsdWUgOiAiIjsKICAgIGNvbnN0IGluZGV4MiA9IHJlc3VsdC5pbmRleE9mKCItLT4iKTsKICAgIGNvbnN0IHZhbHVlMiA9IGluZGV4MiA8IDAgPyByZXN1bHQgOiByZXN1bHQuc2xpY2UoMCwgaW5kZXgyKTsKICAgIGNvbnN0IG5vZGUyID0geyB0eXBlOiAiY29tbWVudCIsIHZhbHVlOiB2YWx1ZTIgfTsKICAgIHBhdGNoKG5vZGUyLCB1bnNhZmUyKTsKICAgIHJldHVybiBub2RlMjsKICB9Cn0KZnVuY3Rpb24gZG9jdHlwZShzdGF0ZTE0LCB1bnNhZmUyKSB7CiAgaWYgKHN0YXRlMTQuc2NoZW1hLmFsbG93RG9jdHlwZXMpIHsKICAgIGNvbnN0IG5vZGUyID0geyB0eXBlOiAiZG9jdHlwZSIgfTsKICAgIHBhdGNoKG5vZGUyLCB1bnNhZmUyKTsKICAgIHJldHVybiBub2RlMjsKICB9Cn0KZnVuY3Rpb24gZWxlbWVudDIoc3RhdGUxNCwgdW5zYWZlMikgewogIGNvbnN0IG5hbWUgPSB0eXBlb2YgdW5zYWZlMi50YWdOYW1lID09PSAic3RyaW5nIiA/IHVuc2FmZTIudGFnTmFtZSA6ICIiOwogIHN0YXRlMTQuc3RhY2sucHVzaChuYW1lKTsKICBjb25zdCBjb250ZW50MyA9ICgKICAgIC8qKiBAdHlwZSB7QXJyYXk8RWxlbWVudENvbnRlbnQ+fSAqLwogICAgY2hpbGRyZW4oc3RhdGUxNCwgdW5zYWZlMi5jaGlsZHJlbikKICApOwogIGNvbnN0IHByb3BlcnRpZXNfID0gcHJvcGVydGllcyhzdGF0ZTE0LCB1bnNhZmUyLnByb3BlcnRpZXMpOwogIHN0YXRlMTQuc3RhY2sucG9wKCk7CiAgbGV0IHNhZmVFbGVtZW50ID0gZmFsc2U7CiAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gIioiICYmICghc3RhdGUxNC5zY2hlbWEudGFnTmFtZXMgfHwgc3RhdGUxNC5zY2hlbWEudGFnTmFtZXMuaW5jbHVkZXMobmFtZSkpKSB7CiAgICBzYWZlRWxlbWVudCA9IHRydWU7CiAgICBpZiAoc3RhdGUxNC5zY2hlbWEuYW5jZXN0b3JzICYmIG93bjcuY2FsbChzdGF0ZTE0LnNjaGVtYS5hbmNlc3RvcnMsIG5hbWUpKSB7CiAgICAgIGNvbnN0IGFuY2VzdG9ycyA9IHN0YXRlMTQuc2NoZW1hLmFuY2VzdG9yc1tuYW1lXTsKICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICBzYWZlRWxlbWVudCA9IGZhbHNlOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBhbmNlc3RvcnMubGVuZ3RoKSB7CiAgICAgICAgaWYgKHN0YXRlMTQuc3RhY2suaW5jbHVkZXMoYW5jZXN0b3JzW2luZGV4Ml0pKSB7CiAgICAgICAgICBzYWZlRWxlbWVudCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIGlmICghc2FmZUVsZW1lbnQpIHsKICAgIHJldHVybiBzdGF0ZTE0LnNjaGVtYS5zdHJpcCAmJiAhc3RhdGUxNC5zY2hlbWEuc3RyaXAuaW5jbHVkZXMobmFtZSkgPyBjb250ZW50MyA6IHZvaWQgMDsKICB9CiAgY29uc3Qgbm9kZTIgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiBuYW1lLAogICAgcHJvcGVydGllczogcHJvcGVydGllc18sCiAgICBjaGlsZHJlbjogY29udGVudDMKICB9OwogIHBhdGNoKG5vZGUyLCB1bnNhZmUyKTsKICByZXR1cm4gbm9kZTI7Cn0KZnVuY3Rpb24gcm9vdDIoc3RhdGUxNCwgdW5zYWZlMikgewogIGNvbnN0IGNvbnRlbnQzID0gKAogICAgLyoqIEB0eXBlIHtBcnJheTxSb290Q29udGVudD59ICovCiAgICBjaGlsZHJlbihzdGF0ZTE0LCB1bnNhZmUyLmNoaWxkcmVuKQogICk7CiAgY29uc3Qgbm9kZTIgPSB7IHR5cGU6ICJyb290IiwgY2hpbGRyZW46IGNvbnRlbnQzIH07CiAgcGF0Y2gobm9kZTIsIHVuc2FmZTIpOwogIHJldHVybiBub2RlMjsKfQpmdW5jdGlvbiB0ZXh0NShfNCwgdW5zYWZlMikgewogIGNvbnN0IHZhbHVlMiA9IHR5cGVvZiB1bnNhZmUyLnZhbHVlID09PSAic3RyaW5nIiA/IHVuc2FmZTIudmFsdWUgOiAiIjsKICBjb25zdCBub2RlMiA9IHsgdHlwZTogInRleHQiLCB2YWx1ZTogdmFsdWUyIH07CiAgcGF0Y2gobm9kZTIsIHVuc2FmZTIpOwogIHJldHVybiBub2RlMjsKfQpmdW5jdGlvbiBjaGlsZHJlbihzdGF0ZTE0LCBjaGlsZHJlbjIpIHsKICBjb25zdCByZXN1bHRzID0gW107CiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4yKSkgewogICAgY29uc3QgY2hpbGRyZW5Vbmtub3duID0gKAogICAgICAvKiogQHR5cGUge0FycmF5PFJlYWRvbmx5PHVua25vd24+Pn0gKi8KICAgICAgY2hpbGRyZW4yCiAgICApOwogICAgbGV0IGluZGV4MiA9IC0xOwogICAgd2hpbGUgKCsraW5kZXgyIDwgY2hpbGRyZW5Vbmtub3duLmxlbmd0aCkgewogICAgICBjb25zdCB2YWx1ZTIgPSB0cmFuc2Zvcm0oc3RhdGUxNCwgY2hpbGRyZW5Vbmtub3duW2luZGV4Ml0pOwogICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUyKSkgewogICAgICAgICAgcmVzdWx0cy5wdXNoKC4uLnZhbHVlMik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3VsdHMucHVzaCh2YWx1ZTIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4gcmVzdWx0czsKfQpmdW5jdGlvbiBwcm9wZXJ0aWVzKHN0YXRlMTQsIHByb3BlcnRpZXMyKSB7CiAgY29uc3QgdGFnTmFtZSA9IHN0YXRlMTQuc3RhY2tbc3RhdGUxNC5zdGFjay5sZW5ndGggLSAxXTsKICBjb25zdCBhdHRyaWJ1dGVzID0gc3RhdGUxNC5zY2hlbWEuYXR0cmlidXRlczsKICBjb25zdCByZXF1aXJlZCA9IHN0YXRlMTQuc2NoZW1hLnJlcXVpcmVkOwogIGNvbnN0IHNwZWNpZmljID0gYXR0cmlidXRlcyAmJiBvd243LmNhbGwoYXR0cmlidXRlcywgdGFnTmFtZSkgPyBhdHRyaWJ1dGVzW3RhZ05hbWVdIDogdm9pZCAwOwogIGNvbnN0IGRlZmF1bHRzID0gYXR0cmlidXRlcyAmJiBvd243LmNhbGwoYXR0cmlidXRlcywgIioiKSA/IGF0dHJpYnV0ZXNbIioiXSA6IHZvaWQgMDsKICBjb25zdCBwcm9wZXJ0aWVzXyA9ICgKICAgIC8qKiBAdHlwZSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgUmVhZG9ubHk8dW5rbm93bj4+Pn0gKi8KICAgIHByb3BlcnRpZXMyICYmIHR5cGVvZiBwcm9wZXJ0aWVzMiA9PT0gIm9iamVjdCIgPyBwcm9wZXJ0aWVzMiA6IHt9CiAgKTsKICBjb25zdCByZXN1bHQgPSB7fTsKICBsZXQga2V5MjsKICBmb3IgKGtleTIgaW4gcHJvcGVydGllc18pIHsKICAgIGlmIChvd243LmNhbGwocHJvcGVydGllc18sIGtleTIpKSB7CiAgICAgIGNvbnN0IHVuc2FmZTIgPSBwcm9wZXJ0aWVzX1trZXkyXTsKICAgICAgbGV0IHNhZmUyID0gcHJvcGVydHlWYWx1ZSgKICAgICAgICBzdGF0ZTE0LAogICAgICAgIGZpbmREZWZpbml0aW9uKHNwZWNpZmljLCBrZXkyKSwKICAgICAgICBrZXkyLAogICAgICAgIHVuc2FmZTIKICAgICAgKTsKICAgICAgaWYgKHNhZmUyID09PSBudWxsIHx8IHNhZmUyID09PSB2b2lkIDApIHsKICAgICAgICBzYWZlMiA9IHByb3BlcnR5VmFsdWUoc3RhdGUxNCwgZmluZERlZmluaXRpb24oZGVmYXVsdHMsIGtleTIpLCBrZXkyLCB1bnNhZmUyKTsKICAgICAgfQogICAgICBpZiAoc2FmZTIgIT09IG51bGwgJiYgc2FmZTIgIT09IHZvaWQgMCkgewogICAgICAgIHJlc3VsdFtrZXkyXSA9IHNhZmUyOwogICAgICB9CiAgICB9CiAgfQogIGlmIChyZXF1aXJlZCAmJiBvd243LmNhbGwocmVxdWlyZWQsIHRhZ05hbWUpKSB7CiAgICBjb25zdCBwcm9wZXJ0aWVzMyA9IHJlcXVpcmVkW3RhZ05hbWVdOwogICAgZm9yIChrZXkyIGluIHByb3BlcnRpZXMzKSB7CiAgICAgIGlmIChvd243LmNhbGwocHJvcGVydGllczMsIGtleTIpICYmICFvd243LmNhbGwocmVzdWx0LCBrZXkyKSkgewogICAgICAgIHJlc3VsdFtrZXkyXSA9IHByb3BlcnRpZXMzW2tleTJdOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gcHJvcGVydHlWYWx1ZShzdGF0ZTE0LCBkZWZpbml0aW9uMywga2V5MiwgdmFsdWUyKSB7CiAgcmV0dXJuIGRlZmluaXRpb24zID8gQXJyYXkuaXNBcnJheSh2YWx1ZTIpID8gcHJvcGVydHlWYWx1ZU1hbnkoc3RhdGUxNCwgZGVmaW5pdGlvbjMsIGtleTIsIHZhbHVlMikgOiBwcm9wZXJ0eVZhbHVlUHJpbWl0aXZlKHN0YXRlMTQsIGRlZmluaXRpb24zLCBrZXkyLCB2YWx1ZTIpIDogdm9pZCAwOwp9CmZ1bmN0aW9uIHByb3BlcnR5VmFsdWVNYW55KHN0YXRlMTQsIGRlZmluaXRpb24zLCBrZXkyLCB2YWx1ZXMpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgY29uc3QgcmVzdWx0ID0gW107CiAgd2hpbGUgKCsraW5kZXgyIDwgdmFsdWVzLmxlbmd0aCkgewogICAgY29uc3QgdmFsdWUyID0gcHJvcGVydHlWYWx1ZVByaW1pdGl2ZShzdGF0ZTE0LCBkZWZpbml0aW9uMywga2V5MiwgdmFsdWVzW2luZGV4Ml0pOwogICAgaWYgKHR5cGVvZiB2YWx1ZTIgPT09ICJudW1iZXIiIHx8IHR5cGVvZiB2YWx1ZTIgPT09ICJzdHJpbmciKSB7CiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlMik7CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gcHJvcGVydHlWYWx1ZVByaW1pdGl2ZShzdGF0ZTE0LCBkZWZpbml0aW9uMywga2V5MiwgdmFsdWUyKSB7CiAgaWYgKHR5cGVvZiB2YWx1ZTIgIT09ICJib29sZWFuIiAmJiB0eXBlb2YgdmFsdWUyICE9PSAibnVtYmVyIiAmJiB0eXBlb2YgdmFsdWUyICE9PSAic3RyaW5nIikgewogICAgcmV0dXJuOwogIH0KICBpZiAoIXNhZmVQcm90b2NvbChzdGF0ZTE0LCBrZXkyLCB2YWx1ZTIpKSB7CiAgICByZXR1cm47CiAgfQogIGlmICh0eXBlb2YgZGVmaW5pdGlvbjMgPT09ICJvYmplY3QiICYmIGRlZmluaXRpb24zLmxlbmd0aCA+IDEpIHsKICAgIGxldCBvazMgPSBmYWxzZTsKICAgIGxldCBpbmRleDIgPSAwOwogICAgd2hpbGUgKCsraW5kZXgyIDwgZGVmaW5pdGlvbjMubGVuZ3RoKSB7CiAgICAgIGNvbnN0IGFsbG93ZWQgPSBkZWZpbml0aW9uM1tpbmRleDJdOwogICAgICBpZiAoYWxsb3dlZCAmJiB0eXBlb2YgYWxsb3dlZCA9PT0gIm9iamVjdCIgJiYgImZsYWdzIiBpbiBhbGxvd2VkKSB7CiAgICAgICAgaWYgKGFsbG93ZWQudGVzdChTdHJpbmcodmFsdWUyKSkpIHsKICAgICAgICAgIG9rMyA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoYWxsb3dlZCA9PT0gdmFsdWUyKSB7CiAgICAgICAgb2szID0gdHJ1ZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKCFvazMpIHJldHVybjsKICB9CiAgcmV0dXJuIHN0YXRlMTQuc2NoZW1hLmNsb2JiZXIgJiYgc3RhdGUxNC5zY2hlbWEuY2xvYmJlclByZWZpeCAmJiBzdGF0ZTE0LnNjaGVtYS5jbG9iYmVyLmluY2x1ZGVzKGtleTIpID8gc3RhdGUxNC5zY2hlbWEuY2xvYmJlclByZWZpeCArIHZhbHVlMiA6IHZhbHVlMjsKfQpmdW5jdGlvbiBzYWZlUHJvdG9jb2woc3RhdGUxNCwga2V5MiwgdmFsdWUyKSB7CiAgY29uc3QgcHJvdG9jb2xzID0gc3RhdGUxNC5zY2hlbWEucHJvdG9jb2xzICYmIG93bjcuY2FsbChzdGF0ZTE0LnNjaGVtYS5wcm90b2NvbHMsIGtleTIpID8gc3RhdGUxNC5zY2hlbWEucHJvdG9jb2xzW2tleTJdIDogdm9pZCAwOwogIGlmICghcHJvdG9jb2xzIHx8IHByb3RvY29scy5sZW5ndGggPT09IDApIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBjb25zdCB1cmwgPSBTdHJpbmcodmFsdWUyKTsKICBjb25zdCBjb2xvbiA9IHVybC5pbmRleE9mKCI6Iik7CiAgY29uc3QgcXVlc3Rpb25NYXJrID0gdXJsLmluZGV4T2YoIj8iKTsKICBjb25zdCBudW1iZXJTaWduID0gdXJsLmluZGV4T2YoIiMiKTsKICBjb25zdCBzbGFzaCA9IHVybC5pbmRleE9mKCIvIik7CiAgaWYgKGNvbG9uIDwgMCB8fCAvLyBJZiB0aGUgZmlyc3QgY29sb24gaXMgYWZ0ZXIgYSBgP2AsIGAjYCwgb3IgYC9gLCBpdOKAmXMgbm90IGEgcHJvdG9jb2wuCiAgc2xhc2ggPiAtMSAmJiBjb2xvbiA+IHNsYXNoIHx8IHF1ZXN0aW9uTWFyayA+IC0xICYmIGNvbG9uID4gcXVlc3Rpb25NYXJrIHx8IG51bWJlclNpZ24gPiAtMSAmJiBjb2xvbiA+IG51bWJlclNpZ24pIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgcHJvdG9jb2xzLmxlbmd0aCkgewogICAgY29uc3QgcHJvdG9jb2wgPSBwcm90b2NvbHNbaW5kZXgyXTsKICAgIGlmIChjb2xvbiA9PT0gcHJvdG9jb2wubGVuZ3RoICYmIHVybC5zbGljZSgwLCBwcm90b2NvbC5sZW5ndGgpID09PSBwcm90b2NvbCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CiAgcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIHBhdGNoKG5vZGUyLCB1bnNhZmUyKSB7CiAgY29uc3QgY2xlYW5Qb3NpdGlvbiA9IHBvc2l0aW9uMigKICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGxvb2tzIGxpa2UgYSBub2RlLgogICAgdW5zYWZlMgogICk7CiAgaWYgKHVuc2FmZTIuZGF0YSkgewogICAgbm9kZTIuZGF0YSA9IGVzbV9kZWZhdWx0KHVuc2FmZTIuZGF0YSk7CiAgfQogIGlmIChjbGVhblBvc2l0aW9uKSBub2RlMi5wb3NpdGlvbiA9IGNsZWFuUG9zaXRpb247Cn0KZnVuY3Rpb24gZmluZERlZmluaXRpb24oZGVmaW5pdGlvbnMsIGtleTIpIHsKICBsZXQgZGF0YURlZmF1bHQ7CiAgbGV0IGluZGV4MiA9IC0xOwogIGlmIChkZWZpbml0aW9ucykgewogICAgd2hpbGUgKCsraW5kZXgyIDwgZGVmaW5pdGlvbnMubGVuZ3RoKSB7CiAgICAgIGNvbnN0IGVudHJ5ID0gZGVmaW5pdGlvbnNbaW5kZXgyXTsKICAgICAgY29uc3QgbmFtZSA9IHR5cGVvZiBlbnRyeSA9PT0gInN0cmluZyIgPyBlbnRyeSA6IGVudHJ5WzBdOwogICAgICBpZiAobmFtZSA9PT0ga2V5MikgewogICAgICAgIHJldHVybiBlbnRyeTsKICAgICAgfQogICAgICBpZiAobmFtZSA9PT0gImRhdGEqIikgZGF0YURlZmF1bHQgPSBlbnRyeTsKICAgIH0KICB9CiAgaWYgKGtleTIubGVuZ3RoID4gNCAmJiBrZXkyLnNsaWNlKDAsIDQpLnRvTG93ZXJDYXNlKCkgPT09ICJkYXRhIikgewogICAgcmV0dXJuIGRhdGFEZWZhdWx0OwogIH0KfQp2YXIgb3duNzsKdmFyIGluaXRfbGliMjYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtc2FuaXRpemVANS4wLjIvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC1zYW5pdGl6ZS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9lc20oKTsKICAgIGluaXRfdW5pc3RfdXRpbF9wb3NpdGlvbigpOwogICAgaW5pdF9zY2hlbWEoKTsKICAgIG93bjcgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC1zYW5pdGl6ZUA1LjAuMi9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXNhbml0aXplL2luZGV4LmpzCnZhciBpbml0X2hhc3RfdXRpbF9zYW5pdGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC1zYW5pdGl6ZUA1LjAuMi9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXNhbml0aXplL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMjYoKTsKICAgIGluaXRfc2NoZW1hKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2Jsb2NrcXVvdGUuanMKZnVuY3Rpb24gYmxvY2txdW90ZTIoc3RhdGUxNCwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiYmxvY2txdW90ZSIsCiAgICBwcm9wZXJ0aWVzOiB7fSwKICAgIGNoaWxkcmVuOiBzdGF0ZTE0LndyYXAoc3RhdGUxNC5hbGwobm9kZTIpLCB0cnVlKQogIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfYmxvY2txdW90ZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2Jsb2NrcXVvdGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9icmVhay5qcwpmdW5jdGlvbiBoYXJkQnJlYWsyKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWU6ICJiciIsIHByb3BlcnRpZXM6IHt9LCBjaGlsZHJlbjogW10gfTsKICBzdGF0ZTE0LnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBbc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCksIHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlxuIiB9XTsKfQp2YXIgaW5pdF9icmVhazIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2JyZWFrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvY29kZS5qcwpmdW5jdGlvbiBjb2RlMyhzdGF0ZTE0LCBub2RlMikgewogIGNvbnN0IHZhbHVlMiA9IG5vZGUyLnZhbHVlID8gbm9kZTIudmFsdWUgKyAiXG4iIDogIiI7CiAgY29uc3QgcHJvcGVydGllczIgPSB7fTsKICBjb25zdCBsYW5ndWFnZSA9IG5vZGUyLmxhbmcgPyBub2RlMi5sYW5nLnNwbGl0KC9ccysvKSA6IFtdOwogIGlmIChsYW5ndWFnZS5sZW5ndGggPiAwKSB7CiAgICBwcm9wZXJ0aWVzMi5jbGFzc05hbWUgPSBbImxhbmd1YWdlLSIgKyBsYW5ndWFnZVswXV07CiAgfQogIGxldCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiY29kZSIsCiAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzMiwKICAgIGNoaWxkcmVuOiBbeyB0eXBlOiAidGV4dCIsIHZhbHVlOiB2YWx1ZTIgfV0KICB9OwogIGlmIChub2RlMi5tZXRhKSB7CiAgICByZXN1bHQuZGF0YSA9IHsgbWV0YTogbm9kZTIubWV0YSB9OwogIH0KICBzdGF0ZTE0LnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJlc3VsdCA9IHN0YXRlMTQuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwogIHJlc3VsdCA9IHsgdHlwZTogImVsZW1lbnQiLCB0YWdOYW1lOiAicHJlIiwgcHJvcGVydGllczoge30sIGNoaWxkcmVuOiBbcmVzdWx0XSB9OwogIHN0YXRlMTQucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgaW5pdF9jb2RlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvY29kZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2RlbGV0ZS5qcwpmdW5jdGlvbiBzdHJpa2V0aHJvdWdoKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogImRlbCIsCiAgICBwcm9wZXJ0aWVzOiB7fSwKICAgIGNoaWxkcmVuOiBzdGF0ZTE0LmFsbChub2RlMikKICB9OwogIHN0YXRlMTQucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTQuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X2RlbGV0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZGVsZXRlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZW1waGFzaXMuanMKZnVuY3Rpb24gZW1waGFzaXMyKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogImVtIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlMTQuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfZW1waGFzaXMyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9lbXBoYXNpcy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2Zvb3Rub3RlLXJlZmVyZW5jZS5qcwpmdW5jdGlvbiBmb290bm90ZVJlZmVyZW5jZTIoc3RhdGUxNCwgbm9kZTIpIHsKICBjb25zdCBjbG9iYmVyUHJlZml4ID0gdHlwZW9mIHN0YXRlMTQub3B0aW9ucy5jbG9iYmVyUHJlZml4ID09PSAic3RyaW5nIiA/IHN0YXRlMTQub3B0aW9ucy5jbG9iYmVyUHJlZml4IDogInVzZXItY29udGVudC0iOwogIGNvbnN0IGlkID0gU3RyaW5nKG5vZGUyLmlkZW50aWZpZXIpLnRvVXBwZXJDYXNlKCk7CiAgY29uc3Qgc2FmZUlkID0gbm9ybWFsaXplVXJpKGlkLnRvTG93ZXJDYXNlKCkpOwogIGNvbnN0IGluZGV4MiA9IHN0YXRlMTQuZm9vdG5vdGVPcmRlci5pbmRleE9mKGlkKTsKICBsZXQgY291bnRlcjI7CiAgbGV0IHJldXNlQ291bnRlciA9IHN0YXRlMTQuZm9vdG5vdGVDb3VudHMuZ2V0KGlkKTsKICBpZiAocmV1c2VDb3VudGVyID09PSB2b2lkIDApIHsKICAgIHJldXNlQ291bnRlciA9IDA7CiAgICBzdGF0ZTE0LmZvb3Rub3RlT3JkZXIucHVzaChpZCk7CiAgICBjb3VudGVyMiA9IHN0YXRlMTQuZm9vdG5vdGVPcmRlci5sZW5ndGg7CiAgfSBlbHNlIHsKICAgIGNvdW50ZXIyID0gaW5kZXgyICsgMTsKICB9CiAgcmV1c2VDb3VudGVyICs9IDE7CiAgc3RhdGUxNC5mb290bm90ZUNvdW50cy5zZXQoaWQsIHJldXNlQ291bnRlcik7CiAgY29uc3QgbGluazMgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiYSIsCiAgICBwcm9wZXJ0aWVzOiB7CiAgICAgIGhyZWY6ICIjIiArIGNsb2JiZXJQcmVmaXggKyAiZm4tIiArIHNhZmVJZCwKICAgICAgaWQ6IGNsb2JiZXJQcmVmaXggKyAiZm5yZWYtIiArIHNhZmVJZCArIChyZXVzZUNvdW50ZXIgPiAxID8gIi0iICsgcmV1c2VDb3VudGVyIDogIiIpLAogICAgICBkYXRhRm9vdG5vdGVSZWY6IHRydWUsCiAgICAgIGFyaWFEZXNjcmliZWRCeTogWyJmb290bm90ZS1sYWJlbCJdCiAgICB9LAogICAgY2hpbGRyZW46IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IFN0cmluZyhjb3VudGVyMikgfV0KICB9OwogIHN0YXRlMTQucGF0Y2gobm9kZTIsIGxpbmszKTsKICBjb25zdCBzdXAgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAic3VwIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IFtsaW5rM10KICB9OwogIHN0YXRlMTQucGF0Y2gobm9kZTIsIHN1cCk7CiAgcmV0dXJuIHN0YXRlMTQuYXBwbHlEYXRhKG5vZGUyLCBzdXApOwp9CnZhciBpbml0X2Zvb3Rub3RlX3JlZmVyZW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZm9vdG5vdGUtcmVmZXJlbmNlLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2hlYWRpbmcuanMKZnVuY3Rpb24gaGVhZGluZzIoc3RhdGUxNCwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiaCIgKyBub2RlMi5kZXB0aCwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlMTQuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfaGVhZGluZzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2hlYWRpbmcuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9odG1sLmpzCmZ1bmN0aW9uIGh0bWwyKHN0YXRlMTQsIG5vZGUyKSB7CiAgaWYgKHN0YXRlMTQub3B0aW9ucy5hbGxvd0Rhbmdlcm91c0h0bWwpIHsKICAgIGNvbnN0IHJlc3VsdCA9IHsgdHlwZTogInJhdyIsIHZhbHVlOiBub2RlMi52YWx1ZSB9OwogICAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICAgIHJldHVybiBzdGF0ZTE0LmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKICB9CiAgcmV0dXJuIHZvaWQgMDsKfQp2YXIgaW5pdF9odG1sOCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaHRtbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL3JldmVydC5qcwpmdW5jdGlvbiByZXZlcnQoc3RhdGUxNCwgbm9kZTIpIHsKICBjb25zdCBzdWJ0eXBlID0gbm9kZTIucmVmZXJlbmNlVHlwZTsKICBsZXQgc3VmZml4ID0gIl0iOwogIGlmIChzdWJ0eXBlID09PSAiY29sbGFwc2VkIikgewogICAgc3VmZml4ICs9ICJbXSI7CiAgfSBlbHNlIGlmIChzdWJ0eXBlID09PSAiZnVsbCIpIHsKICAgIHN1ZmZpeCArPSAiWyIgKyAobm9kZTIubGFiZWwgfHwgbm9kZTIuaWRlbnRpZmllcikgKyAiXSI7CiAgfQogIGlmIChub2RlMi50eXBlID09PSAiaW1hZ2VSZWZlcmVuY2UiKSB7CiAgICByZXR1cm4gW3sgdHlwZTogInRleHQiLCB2YWx1ZTogIiFbIiArIG5vZGUyLmFsdCArIHN1ZmZpeCB9XTsKICB9CiAgY29uc3QgY29udGVudHMgPSBzdGF0ZTE0LmFsbChub2RlMik7CiAgY29uc3QgaGVhZDIgPSBjb250ZW50c1swXTsKICBpZiAoaGVhZDIgJiYgaGVhZDIudHlwZSA9PT0gInRleHQiKSB7CiAgICBoZWFkMi52YWx1ZSA9ICJbIiArIGhlYWQyLnZhbHVlOwogIH0gZWxzZSB7CiAgICBjb250ZW50cy51bnNoaWZ0KHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlsiIH0pOwogIH0KICBjb25zdCB0YWlsID0gY29udGVudHNbY29udGVudHMubGVuZ3RoIC0gMV07CiAgaWYgKHRhaWwgJiYgdGFpbC50eXBlID09PSAidGV4dCIpIHsKICAgIHRhaWwudmFsdWUgKz0gc3VmZml4OwogIH0gZWxzZSB7CiAgICBjb250ZW50cy5wdXNoKHsgdHlwZTogInRleHQiLCB2YWx1ZTogc3VmZml4IH0pOwogIH0KICByZXR1cm4gY29udGVudHM7Cn0KdmFyIGluaXRfcmV2ZXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9yZXZlcnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9pbWFnZS1yZWZlcmVuY2UuanMKZnVuY3Rpb24gaW1hZ2VSZWZlcmVuY2UyKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgaWQgPSBTdHJpbmcobm9kZTIuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKTsKICBjb25zdCBkZWZpbml0aW9uMyA9IHN0YXRlMTQuZGVmaW5pdGlvbkJ5SWQuZ2V0KGlkKTsKICBpZiAoIWRlZmluaXRpb24zKSB7CiAgICByZXR1cm4gcmV2ZXJ0KHN0YXRlMTQsIG5vZGUyKTsKICB9CiAgY29uc3QgcHJvcGVydGllczIgPSB7IHNyYzogbm9ybWFsaXplVXJpKGRlZmluaXRpb24zLnVybCB8fCAiIiksIGFsdDogbm9kZTIuYWx0IH07CiAgaWYgKGRlZmluaXRpb24zLnRpdGxlICE9PSBudWxsICYmIGRlZmluaXRpb24zLnRpdGxlICE9PSB2b2lkIDApIHsKICAgIHByb3BlcnRpZXMyLnRpdGxlID0gZGVmaW5pdGlvbjMudGl0bGU7CiAgfQogIGNvbnN0IHJlc3VsdCA9IHsgdHlwZTogImVsZW1lbnQiLCB0YWdOYW1lOiAiaW1nIiwgcHJvcGVydGllczogcHJvcGVydGllczIsIGNoaWxkcmVuOiBbXSB9OwogIHN0YXRlMTQucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTQuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X2ltYWdlX3JlZmVyZW5jZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2ltYWdlLXJlZmVyZW5jZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Nhbml0aXplX3VyaSgpOwogICAgaW5pdF9yZXZlcnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW1hZ2UuanMKZnVuY3Rpb24gaW1hZ2UyKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgcHJvcGVydGllczIgPSB7IHNyYzogbm9ybWFsaXplVXJpKG5vZGUyLnVybCkgfTsKICBpZiAobm9kZTIuYWx0ICE9PSBudWxsICYmIG5vZGUyLmFsdCAhPT0gdm9pZCAwKSB7CiAgICBwcm9wZXJ0aWVzMi5hbHQgPSBub2RlMi5hbHQ7CiAgfQogIGlmIChub2RlMi50aXRsZSAhPT0gbnVsbCAmJiBub2RlMi50aXRsZSAhPT0gdm9pZCAwKSB7CiAgICBwcm9wZXJ0aWVzMi50aXRsZSA9IG5vZGUyLnRpdGxlOwogIH0KICBjb25zdCByZXN1bHQgPSB7IHR5cGU6ICJlbGVtZW50IiwgdGFnTmFtZTogImltZyIsIHByb3BlcnRpZXM6IHByb3BlcnRpZXMyLCBjaGlsZHJlbjogW10gfTsKICBzdGF0ZTE0LnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTE0LmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9pbWFnZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2ltYWdlLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2lubGluZS1jb2RlLmpzCmZ1bmN0aW9uIGlubGluZUNvZGUyKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgdGV4dDkgPSB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IG5vZGUyLnZhbHVlLnJlcGxhY2UoL1xyP1xufFxyL2csICIgIikgfTsKICBzdGF0ZTE0LnBhdGNoKG5vZGUyLCB0ZXh0OSk7CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogImNvZGUiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogW3RleHQ5XQogIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfaW5saW5lX2NvZGUyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9pbmxpbmUtY29kZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2xpbmstcmVmZXJlbmNlLmpzCmZ1bmN0aW9uIGxpbmtSZWZlcmVuY2UyKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgaWQgPSBTdHJpbmcobm9kZTIuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKTsKICBjb25zdCBkZWZpbml0aW9uMyA9IHN0YXRlMTQuZGVmaW5pdGlvbkJ5SWQuZ2V0KGlkKTsKICBpZiAoIWRlZmluaXRpb24zKSB7CiAgICByZXR1cm4gcmV2ZXJ0KHN0YXRlMTQsIG5vZGUyKTsKICB9CiAgY29uc3QgcHJvcGVydGllczIgPSB7IGhyZWY6IG5vcm1hbGl6ZVVyaShkZWZpbml0aW9uMy51cmwgfHwgIiIpIH07CiAgaWYgKGRlZmluaXRpb24zLnRpdGxlICE9PSBudWxsICYmIGRlZmluaXRpb24zLnRpdGxlICE9PSB2b2lkIDApIHsKICAgIHByb3BlcnRpZXMyLnRpdGxlID0gZGVmaW5pdGlvbjMudGl0bGU7CiAgfQogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJhIiwKICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMyLAogICAgY2hpbGRyZW46IHN0YXRlMTQuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfbGlua19yZWZlcmVuY2UyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9saW5rLXJlZmVyZW5jZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Nhbml0aXplX3VyaSgpOwogICAgaW5pdF9yZXZlcnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGluay5qcwpmdW5jdGlvbiBsaW5rMihzdGF0ZTE0LCBub2RlMikgewogIGNvbnN0IHByb3BlcnRpZXMyID0geyBocmVmOiBub3JtYWxpemVVcmkobm9kZTIudXJsKSB9OwogIGlmIChub2RlMi50aXRsZSAhPT0gbnVsbCAmJiBub2RlMi50aXRsZSAhPT0gdm9pZCAwKSB7CiAgICBwcm9wZXJ0aWVzMi50aXRsZSA9IG5vZGUyLnRpdGxlOwogIH0KICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiYSIsCiAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzMiwKICAgIGNoaWxkcmVuOiBzdGF0ZTE0LmFsbChub2RlMikKICB9OwogIHN0YXRlMTQucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTQuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X2xpbmsyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9saW5rLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2xpc3QtaXRlbS5qcwpmdW5jdGlvbiBsaXN0SXRlbTIoc3RhdGUxNCwgbm9kZTIsIHBhcmVudCkgewogIGNvbnN0IHJlc3VsdHMgPSBzdGF0ZTE0LmFsbChub2RlMik7CiAgY29uc3QgbG9vc2UgPSBwYXJlbnQgPyBsaXN0TG9vc2UocGFyZW50KSA6IGxpc3RJdGVtTG9vc2Uobm9kZTIpOwogIGNvbnN0IHByb3BlcnRpZXMyID0ge307CiAgY29uc3QgY2hpbGRyZW4yID0gW107CiAgaWYgKHR5cGVvZiBub2RlMi5jaGVja2VkID09PSAiYm9vbGVhbiIpIHsKICAgIGNvbnN0IGhlYWQyID0gcmVzdWx0c1swXTsKICAgIGxldCBwYXJhZ3JhcGgzOwogICAgaWYgKGhlYWQyICYmIGhlYWQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiBoZWFkMi50YWdOYW1lID09PSAicCIpIHsKICAgICAgcGFyYWdyYXBoMyA9IGhlYWQyOwogICAgfSBlbHNlIHsKICAgICAgcGFyYWdyYXBoMyA9IHsgdHlwZTogImVsZW1lbnQiLCB0YWdOYW1lOiAicCIsIHByb3BlcnRpZXM6IHt9LCBjaGlsZHJlbjogW10gfTsKICAgICAgcmVzdWx0cy51bnNoaWZ0KHBhcmFncmFwaDMpOwogICAgfQogICAgaWYgKHBhcmFncmFwaDMuY2hpbGRyZW4ubGVuZ3RoID4gMCkgewogICAgICBwYXJhZ3JhcGgzLmNoaWxkcmVuLnVuc2hpZnQoeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiICIgfSk7CiAgICB9CiAgICBwYXJhZ3JhcGgzLmNoaWxkcmVuLnVuc2hpZnQoewogICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgIHRhZ05hbWU6ICJpbnB1dCIsCiAgICAgIHByb3BlcnRpZXM6IHsgdHlwZTogImNoZWNrYm94IiwgY2hlY2tlZDogbm9kZTIuY2hlY2tlZCwgZGlzYWJsZWQ6IHRydWUgfSwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9KTsKICAgIHByb3BlcnRpZXMyLmNsYXNzTmFtZSA9IFsidGFzay1saXN0LWl0ZW0iXTsKICB9CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHJlc3VsdHMubGVuZ3RoKSB7CiAgICBjb25zdCBjaGlsZCA9IHJlc3VsdHNbaW5kZXgyXTsKICAgIGlmIChsb29zZSB8fCBpbmRleDIgIT09IDAgfHwgY2hpbGQudHlwZSAhPT0gImVsZW1lbnQiIHx8IGNoaWxkLnRhZ05hbWUgIT09ICJwIikgewogICAgICBjaGlsZHJlbjIucHVzaCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICJcbiIgfSk7CiAgICB9CiAgICBpZiAoY2hpbGQudHlwZSA9PT0gImVsZW1lbnQiICYmIGNoaWxkLnRhZ05hbWUgPT09ICJwIiAmJiAhbG9vc2UpIHsKICAgICAgY2hpbGRyZW4yLnB1c2goLi4uY2hpbGQuY2hpbGRyZW4pOwogICAgfSBlbHNlIHsKICAgICAgY2hpbGRyZW4yLnB1c2goY2hpbGQpOwogICAgfQogIH0KICBjb25zdCB0YWlsID0gcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdOwogIGlmICh0YWlsICYmIChsb29zZSB8fCB0YWlsLnR5cGUgIT09ICJlbGVtZW50IiB8fCB0YWlsLnRhZ05hbWUgIT09ICJwIikpIHsKICAgIGNoaWxkcmVuMi5wdXNoKHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlxuIiB9KTsKICB9CiAgY29uc3QgcmVzdWx0ID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWU6ICJsaSIsIHByb3BlcnRpZXM6IHByb3BlcnRpZXMyLCBjaGlsZHJlbjogY2hpbGRyZW4yIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KZnVuY3Rpb24gbGlzdExvb3NlKG5vZGUyKSB7CiAgbGV0IGxvb3NlID0gZmFsc2U7CiAgaWYgKG5vZGUyLnR5cGUgPT09ICJsaXN0IikgewogICAgbG9vc2UgPSBub2RlMi5zcHJlYWQgfHwgZmFsc2U7CiAgICBjb25zdCBjaGlsZHJlbjIgPSBub2RlMi5jaGlsZHJlbjsKICAgIGxldCBpbmRleDIgPSAtMTsKICAgIHdoaWxlICghbG9vc2UgJiYgKytpbmRleDIgPCBjaGlsZHJlbjIubGVuZ3RoKSB7CiAgICAgIGxvb3NlID0gbGlzdEl0ZW1Mb29zZShjaGlsZHJlbjJbaW5kZXgyXSk7CiAgICB9CiAgfQogIHJldHVybiBsb29zZTsKfQpmdW5jdGlvbiBsaXN0SXRlbUxvb3NlKG5vZGUyKSB7CiAgY29uc3Qgc3ByZWFkID0gbm9kZTIuc3ByZWFkOwogIHJldHVybiBzcHJlYWQgPT09IG51bGwgfHwgc3ByZWFkID09PSB2b2lkIDAgPyBub2RlMi5jaGlsZHJlbi5sZW5ndGggPiAxIDogc3ByZWFkOwp9CnZhciBpbml0X2xpc3RfaXRlbTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2xpc3QtaXRlbS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2xpc3QuanMKZnVuY3Rpb24gbGlzdDQoc3RhdGUxNCwgbm9kZTIpIHsKICBjb25zdCBwcm9wZXJ0aWVzMiA9IHt9OwogIGNvbnN0IHJlc3VsdHMgPSBzdGF0ZTE0LmFsbChub2RlMik7CiAgbGV0IGluZGV4MiA9IC0xOwogIGlmICh0eXBlb2Ygbm9kZTIuc3RhcnQgPT09ICJudW1iZXIiICYmIG5vZGUyLnN0YXJ0ICE9PSAxKSB7CiAgICBwcm9wZXJ0aWVzMi5zdGFydCA9IG5vZGUyLnN0YXJ0OwogIH0KICB3aGlsZSAoKytpbmRleDIgPCByZXN1bHRzLmxlbmd0aCkgewogICAgY29uc3QgY2hpbGQgPSByZXN1bHRzW2luZGV4Ml07CiAgICBpZiAoY2hpbGQudHlwZSA9PT0gImVsZW1lbnQiICYmIGNoaWxkLnRhZ05hbWUgPT09ICJsaSIgJiYgY2hpbGQucHJvcGVydGllcyAmJiBBcnJheS5pc0FycmF5KGNoaWxkLnByb3BlcnRpZXMuY2xhc3NOYW1lKSAmJiBjaGlsZC5wcm9wZXJ0aWVzLmNsYXNzTmFtZS5pbmNsdWRlcygidGFzay1saXN0LWl0ZW0iKSkgewogICAgICBwcm9wZXJ0aWVzMi5jbGFzc05hbWUgPSBbImNvbnRhaW5zLXRhc2stbGlzdCJdOwogICAgICBicmVhazsKICAgIH0KICB9CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogbm9kZTIub3JkZXJlZCA/ICJvbCIgOiAidWwiLAogICAgcHJvcGVydGllczogcHJvcGVydGllczIsCiAgICBjaGlsZHJlbjogc3RhdGUxNC53cmFwKHJlc3VsdHMsIHRydWUpCiAgfTsKICBzdGF0ZTE0LnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTE0LmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9saXN0MyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGlzdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3BhcmFncmFwaC5qcwpmdW5jdGlvbiBwYXJhZ3JhcGgyKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogInAiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUxNC5hbGwobm9kZTIpCiAgfTsKICBzdGF0ZTE0LnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTE0LmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9wYXJhZ3JhcGgyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9wYXJhZ3JhcGguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9yb290LmpzCmZ1bmN0aW9uIHJvb3QzKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0geyB0eXBlOiAicm9vdCIsIGNoaWxkcmVuOiBzdGF0ZTE0LndyYXAoc3RhdGUxNC5hbGwobm9kZTIpKSB9OwogIHN0YXRlMTQucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTQuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X3Jvb3QyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9yb290LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvc3Ryb25nLmpzCmZ1bmN0aW9uIHN0cm9uZzIoc3RhdGUxNCwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAic3Ryb25nIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlMTQuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfc3Ryb25nMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvc3Ryb25nLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGFibGUuanMKZnVuY3Rpb24gdGFibGUoc3RhdGUxNCwgbm9kZTIpIHsKICBjb25zdCByb3dzID0gc3RhdGUxNC5hbGwobm9kZTIpOwogIGNvbnN0IGZpcnN0Um93ID0gcm93cy5zaGlmdCgpOwogIGNvbnN0IHRhYmxlQ29udGVudCA9IFtdOwogIGlmIChmaXJzdFJvdykgewogICAgY29uc3QgaGVhZDIgPSB7CiAgICAgIHR5cGU6ICJlbGVtZW50IiwKICAgICAgdGFnTmFtZTogInRoZWFkIiwKICAgICAgcHJvcGVydGllczoge30sCiAgICAgIGNoaWxkcmVuOiBzdGF0ZTE0LndyYXAoW2ZpcnN0Um93XSwgdHJ1ZSkKICAgIH07CiAgICBzdGF0ZTE0LnBhdGNoKG5vZGUyLmNoaWxkcmVuWzBdLCBoZWFkMik7CiAgICB0YWJsZUNvbnRlbnQucHVzaChoZWFkMik7CiAgfQogIGlmIChyb3dzLmxlbmd0aCA+IDApIHsKICAgIGNvbnN0IGJvZHkzID0gewogICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgIHRhZ05hbWU6ICJ0Ym9keSIsCiAgICAgIHByb3BlcnRpZXM6IHt9LAogICAgICBjaGlsZHJlbjogc3RhdGUxNC53cmFwKHJvd3MsIHRydWUpCiAgICB9OwogICAgY29uc3Qgc3RhcnQgPSBwb2ludFN0YXJ0KG5vZGUyLmNoaWxkcmVuWzFdKTsKICAgIGNvbnN0IGVuZDMgPSBwb2ludEVuZChub2RlMi5jaGlsZHJlbltub2RlMi5jaGlsZHJlbi5sZW5ndGggLSAxXSk7CiAgICBpZiAoc3RhcnQgJiYgZW5kMykgYm9keTMucG9zaXRpb24gPSB7IHN0YXJ0LCBlbmQ6IGVuZDMgfTsKICAgIHRhYmxlQ29udGVudC5wdXNoKGJvZHkzKTsKICB9CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogInRhYmxlIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlMTQud3JhcCh0YWJsZUNvbnRlbnQsIHRydWUpCiAgfTsKICBzdGF0ZTE0LnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTE0LmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF90YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGFibGUuanMiKCkgewogICAgaW5pdF91bmlzdF91dGlsX3Bvc2l0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3RhYmxlLXJvdy5qcwpmdW5jdGlvbiB0YWJsZVJvdyhzdGF0ZTE0LCBub2RlMiwgcGFyZW50KSB7CiAgY29uc3Qgc2libGluZ3MyID0gcGFyZW50ID8gcGFyZW50LmNoaWxkcmVuIDogdm9pZCAwOwogIGNvbnN0IHJvd0luZGV4ID0gc2libGluZ3MyID8gc2libGluZ3MyLmluZGV4T2Yobm9kZTIpIDogMTsKICBjb25zdCB0YWdOYW1lID0gcm93SW5kZXggPT09IDAgPyAidGgiIDogInRkIjsKICBjb25zdCBhbGlnbiA9IHBhcmVudCAmJiBwYXJlbnQudHlwZSA9PT0gInRhYmxlIiA/IHBhcmVudC5hbGlnbiA6IHZvaWQgMDsKICBjb25zdCBsZW5ndGggPSBhbGlnbiA/IGFsaWduLmxlbmd0aCA6IG5vZGUyLmNoaWxkcmVuLmxlbmd0aDsKICBsZXQgY2VsbEluZGV4ID0gLTE7CiAgY29uc3QgY2VsbHMyID0gW107CiAgd2hpbGUgKCsrY2VsbEluZGV4IDwgbGVuZ3RoKSB7CiAgICBjb25zdCBjZWxsMiA9IG5vZGUyLmNoaWxkcmVuW2NlbGxJbmRleF07CiAgICBjb25zdCBwcm9wZXJ0aWVzMiA9IHt9OwogICAgY29uc3QgYWxpZ25WYWx1ZSA9IGFsaWduID8gYWxpZ25bY2VsbEluZGV4XSA6IHZvaWQgMDsKICAgIGlmIChhbGlnblZhbHVlKSB7CiAgICAgIHByb3BlcnRpZXMyLmFsaWduID0gYWxpZ25WYWx1ZTsKICAgIH0KICAgIGxldCByZXN1bHQyID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWUsIHByb3BlcnRpZXM6IHByb3BlcnRpZXMyLCBjaGlsZHJlbjogW10gfTsKICAgIGlmIChjZWxsMikgewogICAgICByZXN1bHQyLmNoaWxkcmVuID0gc3RhdGUxNC5hbGwoY2VsbDIpOwogICAgICBzdGF0ZTE0LnBhdGNoKGNlbGwyLCByZXN1bHQyKTsKICAgICAgcmVzdWx0MiA9IHN0YXRlMTQuYXBwbHlEYXRhKGNlbGwyLCByZXN1bHQyKTsKICAgIH0KICAgIGNlbGxzMi5wdXNoKHJlc3VsdDIpOwogIH0KICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAidHIiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUxNC53cmFwKGNlbGxzMiwgdHJ1ZSkKICB9OwogIHN0YXRlMTQucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTQuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X3RhYmxlX3JvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGFibGUtcm93LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGFibGUtY2VsbC5qcwpmdW5jdGlvbiB0YWJsZUNlbGwoc3RhdGUxNCwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAidGQiLAogICAgLy8gQXNzdW1lIGJvZHkgY2VsbC4KICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlMTQuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfdGFibGVfY2VsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGFibGUtY2VsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS90cmltLWxpbmVzQDMuMC4xL25vZGVfbW9kdWxlcy90cmltLWxpbmVzL2luZGV4LmpzCmZ1bmN0aW9uIHRyaW1MaW5lcyh2YWx1ZTIpIHsKICBjb25zdCBzb3VyY2UgPSBTdHJpbmcodmFsdWUyKTsKICBjb25zdCBzZWFyY2gyID0gL1xyP1xufFxyL2c7CiAgbGV0IG1hdGNoMiA9IHNlYXJjaDIuZXhlYyhzb3VyY2UpOwogIGxldCBsYXN0MyA9IDA7CiAgY29uc3QgbGluZXMgPSBbXTsKICB3aGlsZSAobWF0Y2gyKSB7CiAgICBsaW5lcy5wdXNoKAogICAgICB0cmltTGluZShzb3VyY2Uuc2xpY2UobGFzdDMsIG1hdGNoMi5pbmRleCksIGxhc3QzID4gMCwgdHJ1ZSksCiAgICAgIG1hdGNoMlswXQogICAgKTsKICAgIGxhc3QzID0gbWF0Y2gyLmluZGV4ICsgbWF0Y2gyWzBdLmxlbmd0aDsKICAgIG1hdGNoMiA9IHNlYXJjaDIuZXhlYyhzb3VyY2UpOwogIH0KICBsaW5lcy5wdXNoKHRyaW1MaW5lKHNvdXJjZS5zbGljZShsYXN0MyksIGxhc3QzID4gMCwgZmFsc2UpKTsKICByZXR1cm4gbGluZXMuam9pbigiIik7Cn0KZnVuY3Rpb24gdHJpbUxpbmUodmFsdWUyLCBzdGFydCwgZW5kMykgewogIGxldCBzdGFydEluZGV4ID0gMDsKICBsZXQgZW5kSW5kZXggPSB2YWx1ZTIubGVuZ3RoOwogIGlmIChzdGFydCkgewogICAgbGV0IGNvZGU0ID0gdmFsdWUyLmNvZGVQb2ludEF0KHN0YXJ0SW5kZXgpOwogICAgd2hpbGUgKGNvZGU0ID09PSB0YWIgfHwgY29kZTQgPT09IHNwYWNlKSB7CiAgICAgIHN0YXJ0SW5kZXgrKzsKICAgICAgY29kZTQgPSB2YWx1ZTIuY29kZVBvaW50QXQoc3RhcnRJbmRleCk7CiAgICB9CiAgfQogIGlmIChlbmQzKSB7CiAgICBsZXQgY29kZTQgPSB2YWx1ZTIuY29kZVBvaW50QXQoZW5kSW5kZXggLSAxKTsKICAgIHdoaWxlIChjb2RlNCA9PT0gdGFiIHx8IGNvZGU0ID09PSBzcGFjZSkgewogICAgICBlbmRJbmRleC0tOwogICAgICBjb2RlNCA9IHZhbHVlMi5jb2RlUG9pbnRBdChlbmRJbmRleCAtIDEpOwogICAgfQogIH0KICByZXR1cm4gZW5kSW5kZXggPiBzdGFydEluZGV4ID8gdmFsdWUyLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KSA6ICIiOwp9CnZhciB0YWIsIHNwYWNlOwp2YXIgaW5pdF90cmltX2xpbmVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdHJpbS1saW5lc0AzLjAuMS9ub2RlX21vZHVsZXMvdHJpbS1saW5lcy9pbmRleC5qcyIoKSB7CiAgICB0YWIgPSA5OwogICAgc3BhY2UgPSAzMjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGV4dC5qcwpmdW5jdGlvbiB0ZXh0NihzdGF0ZTE0LCBub2RlMikgewogIGNvbnN0IHJlc3VsdCA9IHsgdHlwZTogInRleHQiLCB2YWx1ZTogdHJpbUxpbmVzKFN0cmluZyhub2RlMi52YWx1ZSkpIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfdGV4dDMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3RleHQuanMiKCkgewogICAgaW5pdF90cmltX2xpbmVzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3RoZW1hdGljLWJyZWFrLmpzCmZ1bmN0aW9uIHRoZW1hdGljQnJlYWszKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogImhyIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IFtdCiAgfTsKICBzdGF0ZTE0LnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTE0LmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF90aGVtYXRpY19icmVhazMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3RoZW1hdGljLWJyZWFrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW5kZXguanMKZnVuY3Rpb24gaWdub3JlKCkgewogIHJldHVybiB2b2lkIDA7Cn0KdmFyIGhhbmRsZXJzOwp2YXIgaW5pdF9oYW5kbGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW5kZXguanMiKCkgewogICAgaW5pdF9ibG9ja3F1b3RlMigpOwogICAgaW5pdF9icmVhazIoKTsKICAgIGluaXRfY29kZTIoKTsKICAgIGluaXRfZGVsZXRlKCk7CiAgICBpbml0X2VtcGhhc2lzMigpOwogICAgaW5pdF9mb290bm90ZV9yZWZlcmVuY2UoKTsKICAgIGluaXRfaGVhZGluZzIoKTsKICAgIGluaXRfaHRtbDgoKTsKICAgIGluaXRfaW1hZ2VfcmVmZXJlbmNlMigpOwogICAgaW5pdF9pbWFnZTIoKTsKICAgIGluaXRfaW5saW5lX2NvZGUyKCk7CiAgICBpbml0X2xpbmtfcmVmZXJlbmNlMigpOwogICAgaW5pdF9saW5rMigpOwogICAgaW5pdF9saXN0X2l0ZW0yKCk7CiAgICBpbml0X2xpc3QzKCk7CiAgICBpbml0X3BhcmFncmFwaDIoKTsKICAgIGluaXRfcm9vdDIoKTsKICAgIGluaXRfc3Ryb25nMigpOwogICAgaW5pdF90YWJsZSgpOwogICAgaW5pdF90YWJsZV9yb3coKTsKICAgIGluaXRfdGFibGVfY2VsbCgpOwogICAgaW5pdF90ZXh0MygpOwogICAgaW5pdF90aGVtYXRpY19icmVhazMoKTsKICAgIGhhbmRsZXJzID0gewogICAgICBibG9ja3F1b3RlOiBibG9ja3F1b3RlMiwKICAgICAgYnJlYWs6IGhhcmRCcmVhazIsCiAgICAgIGNvZGU6IGNvZGUzLAogICAgICBkZWxldGU6IHN0cmlrZXRocm91Z2gsCiAgICAgIGVtcGhhc2lzOiBlbXBoYXNpczIsCiAgICAgIGZvb3Rub3RlUmVmZXJlbmNlOiBmb290bm90ZVJlZmVyZW5jZTIsCiAgICAgIGhlYWRpbmc6IGhlYWRpbmcyLAogICAgICBodG1sOiBodG1sMiwKICAgICAgaW1hZ2VSZWZlcmVuY2U6IGltYWdlUmVmZXJlbmNlMiwKICAgICAgaW1hZ2U6IGltYWdlMiwKICAgICAgaW5saW5lQ29kZTogaW5saW5lQ29kZTIsCiAgICAgIGxpbmtSZWZlcmVuY2U6IGxpbmtSZWZlcmVuY2UyLAogICAgICBsaW5rOiBsaW5rMiwKICAgICAgbGlzdEl0ZW06IGxpc3RJdGVtMiwKICAgICAgbGlzdDogbGlzdDQsCiAgICAgIHBhcmFncmFwaDogcGFyYWdyYXBoMiwKICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogcm9vdCBpcyBkaWZmZXJlbnQsIGJ1dCBoYXJkIHRvIHR5cGUuCiAgICAgIHJvb3Q6IHJvb3QzLAogICAgICBzdHJvbmc6IHN0cm9uZzIsCiAgICAgIHRhYmxlLAogICAgICB0YWJsZUNlbGwsCiAgICAgIHRhYmxlUm93LAogICAgICB0ZXh0OiB0ZXh0NiwKICAgICAgdGhlbWF0aWNCcmVhazogdGhlbWF0aWNCcmVhazMsCiAgICAgIHRvbWw6IGlnbm9yZSwKICAgICAgeWFtbDogaWdub3JlLAogICAgICBkZWZpbml0aW9uOiBpZ25vcmUsCiAgICAgIGZvb3Rub3RlRGVmaW5pdGlvbjogaWdub3JlCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9mb290ZXIuanMKZnVuY3Rpb24gZGVmYXVsdEZvb3Rub3RlQmFja0NvbnRlbnQoXzQsIHJlcmVmZXJlbmNlSW5kZXgpIHsKICBjb25zdCByZXN1bHQgPSBbeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXHUyMUE5IiB9XTsKICBpZiAocmVyZWZlcmVuY2VJbmRleCA+IDEpIHsKICAgIHJlc3VsdC5wdXNoKHsKICAgICAgdHlwZTogImVsZW1lbnQiLAogICAgICB0YWdOYW1lOiAic3VwIiwKICAgICAgcHJvcGVydGllczoge30sCiAgICAgIGNoaWxkcmVuOiBbeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBTdHJpbmcocmVyZWZlcmVuY2VJbmRleCkgfV0KICAgIH0pOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIGRlZmF1bHRGb290bm90ZUJhY2tMYWJlbChyZWZlcmVuY2VJbmRleCwgcmVyZWZlcmVuY2VJbmRleCkgewogIHJldHVybiAiQmFjayB0byByZWZlcmVuY2UgIiArIChyZWZlcmVuY2VJbmRleCArIDEpICsgKHJlcmVmZXJlbmNlSW5kZXggPiAxID8gIi0iICsgcmVyZWZlcmVuY2VJbmRleCA6ICIiKTsKfQpmdW5jdGlvbiBmb290ZXIoc3RhdGUxNCkgewogIGNvbnN0IGNsb2JiZXJQcmVmaXggPSB0eXBlb2Ygc3RhdGUxNC5vcHRpb25zLmNsb2JiZXJQcmVmaXggPT09ICJzdHJpbmciID8gc3RhdGUxNC5vcHRpb25zLmNsb2JiZXJQcmVmaXggOiAidXNlci1jb250ZW50LSI7CiAgY29uc3QgZm9vdG5vdGVCYWNrQ29udGVudCA9IHN0YXRlMTQub3B0aW9ucy5mb290bm90ZUJhY2tDb250ZW50IHx8IGRlZmF1bHRGb290bm90ZUJhY2tDb250ZW50OwogIGNvbnN0IGZvb3Rub3RlQmFja0xhYmVsID0gc3RhdGUxNC5vcHRpb25zLmZvb3Rub3RlQmFja0xhYmVsIHx8IGRlZmF1bHRGb290bm90ZUJhY2tMYWJlbDsKICBjb25zdCBmb290bm90ZUxhYmVsID0gc3RhdGUxNC5vcHRpb25zLmZvb3Rub3RlTGFiZWwgfHwgIkZvb3Rub3RlcyI7CiAgY29uc3QgZm9vdG5vdGVMYWJlbFRhZ05hbWUgPSBzdGF0ZTE0Lm9wdGlvbnMuZm9vdG5vdGVMYWJlbFRhZ05hbWUgfHwgImgyIjsKICBjb25zdCBmb290bm90ZUxhYmVsUHJvcGVydGllcyA9IHN0YXRlMTQub3B0aW9ucy5mb290bm90ZUxhYmVsUHJvcGVydGllcyB8fCB7CiAgICBjbGFzc05hbWU6IFsic3Itb25seSJdCiAgfTsKICBjb25zdCBsaXN0SXRlbXMgPSBbXTsKICBsZXQgcmVmZXJlbmNlSW5kZXggPSAtMTsKICB3aGlsZSAoKytyZWZlcmVuY2VJbmRleCA8IHN0YXRlMTQuZm9vdG5vdGVPcmRlci5sZW5ndGgpIHsKICAgIGNvbnN0IGRlZmluaXRpb24zID0gc3RhdGUxNC5mb290bm90ZUJ5SWQuZ2V0KAogICAgICBzdGF0ZTE0LmZvb3Rub3RlT3JkZXJbcmVmZXJlbmNlSW5kZXhdCiAgICApOwogICAgaWYgKCFkZWZpbml0aW9uMykgewogICAgICBjb250aW51ZTsKICAgIH0KICAgIGNvbnN0IGNvbnRlbnQzID0gc3RhdGUxNC5hbGwoZGVmaW5pdGlvbjMpOwogICAgY29uc3QgaWQgPSBTdHJpbmcoZGVmaW5pdGlvbjMuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKTsKICAgIGNvbnN0IHNhZmVJZCA9IG5vcm1hbGl6ZVVyaShpZC50b0xvd2VyQ2FzZSgpKTsKICAgIGxldCByZXJlZmVyZW5jZUluZGV4ID0gMDsKICAgIGNvbnN0IGJhY2tSZWZlcmVuY2VzID0gW107CiAgICBjb25zdCBjb3VudHMgPSBzdGF0ZTE0LmZvb3Rub3RlQ291bnRzLmdldChpZCk7CiAgICB3aGlsZSAoY291bnRzICE9PSB2b2lkIDAgJiYgKytyZXJlZmVyZW5jZUluZGV4IDw9IGNvdW50cykgewogICAgICBpZiAoYmFja1JlZmVyZW5jZXMubGVuZ3RoID4gMCkgewogICAgICAgIGJhY2tSZWZlcmVuY2VzLnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiICIgfSk7CiAgICAgIH0KICAgICAgbGV0IGNoaWxkcmVuMiA9IHR5cGVvZiBmb290bm90ZUJhY2tDb250ZW50ID09PSAic3RyaW5nIiA/IGZvb3Rub3RlQmFja0NvbnRlbnQgOiBmb290bm90ZUJhY2tDb250ZW50KHJlZmVyZW5jZUluZGV4LCByZXJlZmVyZW5jZUluZGV4KTsKICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbjIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgY2hpbGRyZW4yID0geyB0eXBlOiAidGV4dCIsIHZhbHVlOiBjaGlsZHJlbjIgfTsKICAgICAgfQogICAgICBiYWNrUmVmZXJlbmNlcy5wdXNoKHsKICAgICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgICAgdGFnTmFtZTogImEiLAogICAgICAgIHByb3BlcnRpZXM6IHsKICAgICAgICAgIGhyZWY6ICIjIiArIGNsb2JiZXJQcmVmaXggKyAiZm5yZWYtIiArIHNhZmVJZCArIChyZXJlZmVyZW5jZUluZGV4ID4gMSA/ICItIiArIHJlcmVmZXJlbmNlSW5kZXggOiAiIiksCiAgICAgICAgICBkYXRhRm9vdG5vdGVCYWNrcmVmOiAiIiwKICAgICAgICAgIGFyaWFMYWJlbDogdHlwZW9mIGZvb3Rub3RlQmFja0xhYmVsID09PSAic3RyaW5nIiA/IGZvb3Rub3RlQmFja0xhYmVsIDogZm9vdG5vdGVCYWNrTGFiZWwocmVmZXJlbmNlSW5kZXgsIHJlcmVmZXJlbmNlSW5kZXgpLAogICAgICAgICAgY2xhc3NOYW1lOiBbImRhdGEtZm9vdG5vdGUtYmFja3JlZiJdCiAgICAgICAgfSwKICAgICAgICBjaGlsZHJlbjogQXJyYXkuaXNBcnJheShjaGlsZHJlbjIpID8gY2hpbGRyZW4yIDogW2NoaWxkcmVuMl0KICAgICAgfSk7CiAgICB9CiAgICBjb25zdCB0YWlsID0gY29udGVudDNbY29udGVudDMubGVuZ3RoIC0gMV07CiAgICBpZiAodGFpbCAmJiB0YWlsLnR5cGUgPT09ICJlbGVtZW50IiAmJiB0YWlsLnRhZ05hbWUgPT09ICJwIikgewogICAgICBjb25zdCB0YWlsVGFpbCA9IHRhaWwuY2hpbGRyZW5bdGFpbC5jaGlsZHJlbi5sZW5ndGggLSAxXTsKICAgICAgaWYgKHRhaWxUYWlsICYmIHRhaWxUYWlsLnR5cGUgPT09ICJ0ZXh0IikgewogICAgICAgIHRhaWxUYWlsLnZhbHVlICs9ICIgIjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0YWlsLmNoaWxkcmVuLnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiICIgfSk7CiAgICAgIH0KICAgICAgdGFpbC5jaGlsZHJlbi5wdXNoKC4uLmJhY2tSZWZlcmVuY2VzKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnRlbnQzLnB1c2goLi4uYmFja1JlZmVyZW5jZXMpOwogICAgfQogICAgY29uc3QgbGlzdEl0ZW0zID0gewogICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgIHRhZ05hbWU6ICJsaSIsCiAgICAgIHByb3BlcnRpZXM6IHsgaWQ6IGNsb2JiZXJQcmVmaXggKyAiZm4tIiArIHNhZmVJZCB9LAogICAgICBjaGlsZHJlbjogc3RhdGUxNC53cmFwKGNvbnRlbnQzLCB0cnVlKQogICAgfTsKICAgIHN0YXRlMTQucGF0Y2goZGVmaW5pdGlvbjMsIGxpc3RJdGVtMyk7CiAgICBsaXN0SXRlbXMucHVzaChsaXN0SXRlbTMpOwogIH0KICBpZiAobGlzdEl0ZW1zLmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuOwogIH0KICByZXR1cm4gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogInNlY3Rpb24iLAogICAgcHJvcGVydGllczogeyBkYXRhRm9vdG5vdGVzOiB0cnVlLCBjbGFzc05hbWU6IFsiZm9vdG5vdGVzIl0gfSwKICAgIGNoaWxkcmVuOiBbCiAgICAgIHsKICAgICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgICAgdGFnTmFtZTogZm9vdG5vdGVMYWJlbFRhZ05hbWUsCiAgICAgICAgcHJvcGVydGllczogewogICAgICAgICAgLi4uZXNtX2RlZmF1bHQoZm9vdG5vdGVMYWJlbFByb3BlcnRpZXMpLAogICAgICAgICAgaWQ6ICJmb290bm90ZS1sYWJlbCIKICAgICAgICB9LAogICAgICAgIGNoaWxkcmVuOiBbeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBmb290bm90ZUxhYmVsIH1dCiAgICAgIH0sCiAgICAgIHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlxuIiB9LAogICAgICB7CiAgICAgICAgdHlwZTogImVsZW1lbnQiLAogICAgICAgIHRhZ05hbWU6ICJvbCIsCiAgICAgICAgcHJvcGVydGllczoge30sCiAgICAgICAgY2hpbGRyZW46IHN0YXRlMTQud3JhcChsaXN0SXRlbXMsIHRydWUpCiAgICAgIH0sCiAgICAgIHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlxuIiB9CiAgICBdCiAgfTsKfQp2YXIgaW5pdF9mb290ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2Zvb3Rlci5qcyIoKSB7CiAgICBpbml0X2VzbSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9zYW5pdGl6ZV91cmkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvc3RhdGUuanMKZnVuY3Rpb24gY3JlYXRlU3RhdGUodHJlZSwgb3B0aW9ucykgewogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnM1OwogIGNvbnN0IGRlZmluaXRpb25CeUlkID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBjb25zdCBmb290bm90ZUJ5SWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIGNvbnN0IGZvb3Rub3RlQ291bnRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBjb25zdCBoYW5kbGVyczIgPSB7IC4uLmhhbmRsZXJzLCAuLi5zZXR0aW5ncy5oYW5kbGVycyB9OwogIGNvbnN0IHN0YXRlMTQgPSB7CiAgICBhbGw6IGFsbDMsCiAgICBhcHBseURhdGEsCiAgICBkZWZpbml0aW9uQnlJZCwKICAgIGZvb3Rub3RlQnlJZCwKICAgIGZvb3Rub3RlQ291bnRzLAogICAgZm9vdG5vdGVPcmRlcjogW10sCiAgICBoYW5kbGVyczogaGFuZGxlcnMyLAogICAgb25lOiBvbmUzLAogICAgb3B0aW9uczogc2V0dGluZ3MsCiAgICBwYXRjaDogcGF0Y2gyLAogICAgd3JhcDogd3JhcDMKICB9OwogIHZpc2l0KHRyZWUsIGZ1bmN0aW9uKG5vZGUyKSB7CiAgICBpZiAobm9kZTIudHlwZSA9PT0gImRlZmluaXRpb24iIHx8IG5vZGUyLnR5cGUgPT09ICJmb290bm90ZURlZmluaXRpb24iKSB7CiAgICAgIGNvbnN0IG1hcDcgPSBub2RlMi50eXBlID09PSAiZGVmaW5pdGlvbiIgPyBkZWZpbml0aW9uQnlJZCA6IGZvb3Rub3RlQnlJZDsKICAgICAgY29uc3QgaWQgPSBTdHJpbmcobm9kZTIuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKTsKICAgICAgaWYgKCFtYXA3LmhhcyhpZCkpIHsKICAgICAgICBtYXA3LnNldChpZCwgbm9kZTIpOwogICAgICB9CiAgICB9CiAgfSk7CiAgcmV0dXJuIHN0YXRlMTQ7CiAgZnVuY3Rpb24gb25lMyhub2RlMiwgcGFyZW50KSB7CiAgICBjb25zdCB0eXBlNSA9IG5vZGUyLnR5cGU7CiAgICBjb25zdCBoYW5kbGUzID0gc3RhdGUxNC5oYW5kbGVyc1t0eXBlNV07CiAgICBpZiAob3duOC5jYWxsKHN0YXRlMTQuaGFuZGxlcnMsIHR5cGU1KSAmJiBoYW5kbGUzKSB7CiAgICAgIHJldHVybiBoYW5kbGUzKHN0YXRlMTQsIG5vZGUyLCBwYXJlbnQpOwogICAgfQogICAgaWYgKHN0YXRlMTQub3B0aW9ucy5wYXNzVGhyb3VnaCAmJiBzdGF0ZTE0Lm9wdGlvbnMucGFzc1Rocm91Z2guaW5jbHVkZXModHlwZTUpKSB7CiAgICAgIGlmICgiY2hpbGRyZW4iIGluIG5vZGUyKSB7CiAgICAgICAgY29uc3QgeyBjaGlsZHJlbjogY2hpbGRyZW4yLCAuLi5zaGFsbG93IH0gPSBub2RlMjsKICAgICAgICBjb25zdCByZXN1bHQgPSBlc21fZGVmYXVsdChzaGFsbG93KTsKICAgICAgICByZXN1bHQuY2hpbGRyZW4gPSBzdGF0ZTE0LmFsbChub2RlMik7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gZXNtX2RlZmF1bHQobm9kZTIpOwogICAgfQogICAgY29uc3QgdW5rbm93bjMgPSBzdGF0ZTE0Lm9wdGlvbnMudW5rbm93bkhhbmRsZXIgfHwgZGVmYXVsdFVua25vd25IYW5kbGVyOwogICAgcmV0dXJuIHVua25vd24zKHN0YXRlMTQsIG5vZGUyLCBwYXJlbnQpOwogIH0KICBmdW5jdGlvbiBhbGwzKHBhcmVudCkgewogICAgY29uc3QgdmFsdWVzID0gW107CiAgICBpZiAoImNoaWxkcmVuIiBpbiBwYXJlbnQpIHsKICAgICAgY29uc3Qgbm9kZXMgPSBwYXJlbnQuY2hpbGRyZW47CiAgICAgIGxldCBpbmRleDIgPSAtMTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbm9kZXMubGVuZ3RoKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gc3RhdGUxNC5vbmUobm9kZXNbaW5kZXgyXSwgcGFyZW50KTsKICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICBpZiAoaW5kZXgyICYmIG5vZGVzW2luZGV4MiAtIDFdLnR5cGUgPT09ICJicmVhayIpIHsKICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkgJiYgcmVzdWx0LnR5cGUgPT09ICJ0ZXh0IikgewogICAgICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHRyaW1NYXJrZG93blNwYWNlU3RhcnQocmVzdWx0LnZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0KSAmJiByZXN1bHQudHlwZSA9PT0gImVsZW1lbnQiKSB7CiAgICAgICAgICAgICAgY29uc3QgaGVhZDIgPSByZXN1bHQuY2hpbGRyZW5bMF07CiAgICAgICAgICAgICAgaWYgKGhlYWQyICYmIGhlYWQyLnR5cGUgPT09ICJ0ZXh0IikgewogICAgICAgICAgICAgICAgaGVhZDIudmFsdWUgPSB0cmltTWFya2Rvd25TcGFjZVN0YXJ0KGhlYWQyLnZhbHVlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHsKICAgICAgICAgICAgdmFsdWVzLnB1c2goLi4ucmVzdWx0KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHJlc3VsdCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gdmFsdWVzOwogIH0KfQpmdW5jdGlvbiBwYXRjaDIoZnJvbTIsIHRvMikgewogIGlmIChmcm9tMi5wb3NpdGlvbikgdG8yLnBvc2l0aW9uID0gcG9zaXRpb24yKGZyb20yKTsKfQpmdW5jdGlvbiBhcHBseURhdGEoZnJvbTIsIHRvMikgewogIGxldCByZXN1bHQgPSB0bzI7CiAgaWYgKGZyb20yICYmIGZyb20yLmRhdGEpIHsKICAgIGNvbnN0IGhOYW1lID0gZnJvbTIuZGF0YS5oTmFtZTsKICAgIGNvbnN0IGhDaGlsZHJlbiA9IGZyb20yLmRhdGEuaENoaWxkcmVuOwogICAgY29uc3QgaFByb3BlcnRpZXMgPSBmcm9tMi5kYXRhLmhQcm9wZXJ0aWVzOwogICAgaWYgKHR5cGVvZiBoTmFtZSA9PT0gInN0cmluZyIpIHsKICAgICAgaWYgKHJlc3VsdC50eXBlID09PSAiZWxlbWVudCIpIHsKICAgICAgICByZXN1bHQudGFnTmFtZSA9IGhOYW1lOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGNoaWxkcmVuMiA9ICJjaGlsZHJlbiIgaW4gcmVzdWx0ID8gcmVzdWx0LmNoaWxkcmVuIDogW3Jlc3VsdF07CiAgICAgICAgcmVzdWx0ID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWU6IGhOYW1lLCBwcm9wZXJ0aWVzOiB7fSwgY2hpbGRyZW46IGNoaWxkcmVuMiB9OwogICAgICB9CiAgICB9CiAgICBpZiAocmVzdWx0LnR5cGUgPT09ICJlbGVtZW50IiAmJiBoUHJvcGVydGllcykgewogICAgICBPYmplY3QuYXNzaWduKHJlc3VsdC5wcm9wZXJ0aWVzLCBlc21fZGVmYXVsdChoUHJvcGVydGllcykpOwogICAgfQogICAgaWYgKCJjaGlsZHJlbiIgaW4gcmVzdWx0ICYmIHJlc3VsdC5jaGlsZHJlbiAmJiBoQ2hpbGRyZW4gIT09IG51bGwgJiYgaENoaWxkcmVuICE9PSB2b2lkIDApIHsKICAgICAgcmVzdWx0LmNoaWxkcmVuID0gaENoaWxkcmVuOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIGRlZmF1bHRVbmtub3duSGFuZGxlcihzdGF0ZTE0LCBub2RlMikgewogIGNvbnN0IGRhdGEgPSBub2RlMi5kYXRhIHx8IHt9OwogIGNvbnN0IHJlc3VsdCA9ICJ2YWx1ZSIgaW4gbm9kZTIgJiYgIShvd244LmNhbGwoZGF0YSwgImhQcm9wZXJ0aWVzIikgfHwgb3duOC5jYWxsKGRhdGEsICJoQ2hpbGRyZW4iKSkgPyB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IG5vZGUyLnZhbHVlIH0gOiB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiZGl2IiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlMTQuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KZnVuY3Rpb24gd3JhcDMobm9kZXMsIGxvb3NlKSB7CiAgY29uc3QgcmVzdWx0ID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIGlmIChsb29zZSkgewogICAgcmVzdWx0LnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH0pOwogIH0KICB3aGlsZSAoKytpbmRleDIgPCBub2Rlcy5sZW5ndGgpIHsKICAgIGlmIChpbmRleDIpIHJlc3VsdC5wdXNoKHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlxuIiB9KTsKICAgIHJlc3VsdC5wdXNoKG5vZGVzW2luZGV4Ml0pOwogIH0KICBpZiAobG9vc2UgJiYgbm9kZXMubGVuZ3RoID4gMCkgewogICAgcmVzdWx0LnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH0pOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIHRyaW1NYXJrZG93blNwYWNlU3RhcnQodmFsdWUyKSB7CiAgbGV0IGluZGV4MiA9IDA7CiAgbGV0IGNvZGU0ID0gdmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyKTsKICB3aGlsZSAoY29kZTQgPT09IDkgfHwgY29kZTQgPT09IDMyKSB7CiAgICBpbmRleDIrKzsKICAgIGNvZGU0ID0gdmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyKTsKICB9CiAgcmV0dXJuIHZhbHVlMi5zbGljZShpbmRleDIpOwp9CnZhciBvd244LCBlbXB0eU9wdGlvbnM1Owp2YXIgaW5pdF9zdGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvc3RhdGUuanMiKCkgewogICAgaW5pdF9lc20oKTsKICAgIGluaXRfdW5pc3RfdXRpbF92aXNpdCgpOwogICAgaW5pdF91bmlzdF91dGlsX3Bvc2l0aW9uKCk7CiAgICBpbml0X2hhbmRsZXJzKCk7CiAgICBvd244ID0ge30uaGFzT3duUHJvcGVydHk7CiAgICBlbXB0eU9wdGlvbnM1ID0ge307CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHRvSGFzdCh0cmVlLCBvcHRpb25zKSB7CiAgY29uc3Qgc3RhdGUxNCA9IGNyZWF0ZVN0YXRlKHRyZWUsIG9wdGlvbnMpOwogIGNvbnN0IG5vZGUyID0gc3RhdGUxNC5vbmUodHJlZSwgdm9pZCAwKTsKICBjb25zdCBmb290ID0gZm9vdGVyKHN0YXRlMTQpOwogIGNvbnN0IHJlc3VsdCA9IEFycmF5LmlzQXJyYXkobm9kZTIpID8geyB0eXBlOiAicm9vdCIsIGNoaWxkcmVuOiBub2RlMiB9IDogbm9kZTIgfHwgeyB0eXBlOiAicm9vdCIsIGNoaWxkcmVuOiBbXSB9OwogIGlmIChmb290KSB7CiAgICBvaygiY2hpbGRyZW4iIGluIHJlc3VsdCk7CiAgICByZXN1bHQuY2hpbGRyZW4ucHVzaCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICJcbiIgfSwgZm9vdCk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KdmFyIGluaXRfbGliMjcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVmYXVsdCgpOwogICAgaW5pdF9mb290ZXIoKTsKICAgIGluaXRfc3RhdGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9pbmRleC5qcwp2YXIgaW5pdF9tZGFzdF91dGlsX3RvX2hhc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvaW5kZXguanMiKCkgewogICAgaW5pdF9oYW5kbGVycygpOwogICAgaW5pdF9saWIyNygpOwogICAgaW5pdF9mb290ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2h0bWwtdm9pZC1lbGVtZW50c0AzLjAuMC9ub2RlX21vZHVsZXMvaHRtbC12b2lkLWVsZW1lbnRzL2luZGV4LmpzCnZhciBodG1sVm9pZEVsZW1lbnRzOwp2YXIgaW5pdF9odG1sX3ZvaWRfZWxlbWVudHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9odG1sLXZvaWQtZWxlbWVudHNAMy4wLjAvbm9kZV9tb2R1bGVzL2h0bWwtdm9pZC1lbGVtZW50cy9pbmRleC5qcyIoKSB7CiAgICBodG1sVm9pZEVsZW1lbnRzID0gWwogICAgICAiYXJlYSIsCiAgICAgICJiYXNlIiwKICAgICAgImJhc2Vmb250IiwKICAgICAgImJnc291bmQiLAogICAgICAiYnIiLAogICAgICAiY29sIiwKICAgICAgImNvbW1hbmQiLAogICAgICAiZW1iZWQiLAogICAgICAiZnJhbWUiLAogICAgICAiaHIiLAogICAgICAiaW1hZ2UiLAogICAgICAiaW1nIiwKICAgICAgImlucHV0IiwKICAgICAgImtleWdlbiIsCiAgICAgICJsaW5rIiwKICAgICAgIm1ldGEiLAogICAgICAicGFyYW0iLAogICAgICAic291cmNlIiwKICAgICAgInRyYWNrIiwKICAgICAgIndiciIKICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvc2NoZW1hLmpzCnZhciBTY2hlbWE7CnZhciBpbml0X3NjaGVtYTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvc2NoZW1hLmpzIigpIHsKICAgIFNjaGVtYSA9IGNsYXNzIHsKICAgICAgLyoqCiAgICAgICAqIEBwYXJhbSB7U2NoZW1hVHlwZVsncHJvcGVydHknXX0gcHJvcGVydHkKICAgICAgICogICBQcm9wZXJ0eS4KICAgICAgICogQHBhcmFtIHtTY2hlbWFUeXBlWydub3JtYWwnXX0gbm9ybWFsCiAgICAgICAqICAgTm9ybWFsLgogICAgICAgKiBAcGFyYW0ge1NwYWNlIHwgdW5kZWZpbmVkfSBbc3BhY2VdCiAgICAgICAqICAgU3BhY2UuCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqICAgU2NoZW1hLgogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IocHJvcGVydHkxMywgbm9ybWFsLCBzcGFjZTIpIHsKICAgICAgICB0aGlzLm5vcm1hbCA9IG5vcm1hbDsKICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHkxMzsKICAgICAgICBpZiAoc3BhY2UyKSB7CiAgICAgICAgICB0aGlzLnNwYWNlID0gc3BhY2UyOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIFNjaGVtYS5wcm90b3R5cGUubm9ybWFsID0ge307CiAgICBTY2hlbWEucHJvdG90eXBlLnByb3BlcnR5ID0ge307CiAgICBTY2hlbWEucHJvdG90eXBlLnNwYWNlID0gdm9pZCAwOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL21lcmdlLmpzCmZ1bmN0aW9uIG1lcmdlMyhkZWZpbml0aW9ucywgc3BhY2UyKSB7CiAgY29uc3QgcHJvcGVydHkxMyA9IHt9OwogIGNvbnN0IG5vcm1hbCA9IHt9OwogIGZvciAoY29uc3QgZGVmaW5pdGlvbjMgb2YgZGVmaW5pdGlvbnMpIHsKICAgIE9iamVjdC5hc3NpZ24ocHJvcGVydHkxMywgZGVmaW5pdGlvbjMucHJvcGVydHkpOwogICAgT2JqZWN0LmFzc2lnbihub3JtYWwsIGRlZmluaXRpb24zLm5vcm1hbCk7CiAgfQogIHJldHVybiBuZXcgU2NoZW1hKHByb3BlcnR5MTMsIG5vcm1hbCwgc3BhY2UyKTsKfQp2YXIgaW5pdF9tZXJnZTMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvbWVyZ2UuanMiKCkgewogICAgaW5pdF9zY2hlbWEyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL25vcm1hbGl6ZS5qcwpmdW5jdGlvbiBub3JtYWxpemUzKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIudG9Mb3dlckNhc2UoKTsKfQp2YXIgaW5pdF9ub3JtYWxpemUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL25vcm1hbGl6ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvaW5mby5qcwp2YXIgSW5mbzsKdmFyIGluaXRfaW5mbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9pbmZvLmpzIigpIHsKICAgIEluZm8gPSBjbGFzcyB7CiAgICAgIC8qKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkKICAgICAgICogICBQcm9wZXJ0eS4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZQogICAgICAgKiAgIEF0dHJpYnV0ZS4KICAgICAgICogQHJldHVybnMKICAgICAgICogICBJbmZvLgogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IocHJvcGVydHkxMywgYXR0cmlidXRlKSB7CiAgICAgICAgdGhpcy5hdHRyaWJ1dGUgPSBhdHRyaWJ1dGU7CiAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5MTM7CiAgICAgIH0KICAgIH07CiAgICBJbmZvLnByb3RvdHlwZS5hdHRyaWJ1dGUgPSAiIjsKICAgIEluZm8ucHJvdG90eXBlLmJvb2xlYW5pc2ggPSBmYWxzZTsKICAgIEluZm8ucHJvdG90eXBlLmJvb2xlYW4gPSBmYWxzZTsKICAgIEluZm8ucHJvdG90eXBlLmNvbW1hT3JTcGFjZVNlcGFyYXRlZCA9IGZhbHNlOwogICAgSW5mby5wcm90b3R5cGUuY29tbWFTZXBhcmF0ZWQgPSBmYWxzZTsKICAgIEluZm8ucHJvdG90eXBlLmRlZmluZWQgPSBmYWxzZTsKICAgIEluZm8ucHJvdG90eXBlLm11c3RVc2VQcm9wZXJ0eSA9IGZhbHNlOwogICAgSW5mby5wcm90b3R5cGUubnVtYmVyID0gZmFsc2U7CiAgICBJbmZvLnByb3RvdHlwZS5vdmVybG9hZGVkQm9vbGVhbiA9IGZhbHNlOwogICAgSW5mby5wcm90b3R5cGUucHJvcGVydHkgPSAiIjsKICAgIEluZm8ucHJvdG90eXBlLnNwYWNlU2VwYXJhdGVkID0gZmFsc2U7CiAgICBJbmZvLnByb3RvdHlwZS5zcGFjZSA9IHZvaWQgMDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC90eXBlcy5qcwp2YXIgdHlwZXNfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydCh0eXBlc19leHBvcnRzLCB7CiAgYm9vbGVhbjogKCkgPT4gYm9vbGVhbiwKICBib29sZWFuaXNoOiAoKSA9PiBib29sZWFuaXNoLAogIGNvbW1hT3JTcGFjZVNlcGFyYXRlZDogKCkgPT4gY29tbWFPclNwYWNlU2VwYXJhdGVkLAogIGNvbW1hU2VwYXJhdGVkOiAoKSA9PiBjb21tYVNlcGFyYXRlZCwKICBudW1iZXI6ICgpID0+IG51bWJlciwKICBvdmVybG9hZGVkQm9vbGVhbjogKCkgPT4gb3ZlcmxvYWRlZEJvb2xlYW4sCiAgc3BhY2VTZXBhcmF0ZWQ6ICgpID0+IHNwYWNlU2VwYXJhdGVkCn0pOwpmdW5jdGlvbiBpbmNyZW1lbnQoKSB7CiAgcmV0dXJuIDIgKiogKytwb3dlcnM7Cn0KdmFyIHBvd2VycywgYm9vbGVhbiwgYm9vbGVhbmlzaCwgb3ZlcmxvYWRlZEJvb2xlYW4sIG51bWJlciwgc3BhY2VTZXBhcmF0ZWQsIGNvbW1hU2VwYXJhdGVkLCBjb21tYU9yU3BhY2VTZXBhcmF0ZWQ7CnZhciBpbml0X3R5cGVzMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC90eXBlcy5qcyIoKSB7CiAgICBwb3dlcnMgPSAwOwogICAgYm9vbGVhbiA9IGluY3JlbWVudCgpOwogICAgYm9vbGVhbmlzaCA9IGluY3JlbWVudCgpOwogICAgb3ZlcmxvYWRlZEJvb2xlYW4gPSBpbmNyZW1lbnQoKTsKICAgIG51bWJlciA9IGluY3JlbWVudCgpOwogICAgc3BhY2VTZXBhcmF0ZWQgPSBpbmNyZW1lbnQoKTsKICAgIGNvbW1hU2VwYXJhdGVkID0gaW5jcmVtZW50KCk7CiAgICBjb21tYU9yU3BhY2VTZXBhcmF0ZWQgPSBpbmNyZW1lbnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9kZWZpbmVkLWluZm8uanMKZnVuY3Rpb24gbWFyayh2YWx1ZXMsIGtleTIsIHZhbHVlMikgewogIGlmICh2YWx1ZTIpIHsKICAgIHZhbHVlc1trZXkyXSA9IHZhbHVlMjsKICB9Cn0KdmFyIGNoZWNrcywgRGVmaW5lZEluZm87CnZhciBpbml0X2RlZmluZWRfaW5mbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9kZWZpbmVkLWluZm8uanMiKCkgewogICAgaW5pdF9pbmZvKCk7CiAgICBpbml0X3R5cGVzMygpOwogICAgY2hlY2tzID0gLyoqIEB0eXBlIHtSZWFkb25seUFycmF5PGtleW9mIHR5cGVvZiB0eXBlcz59ICovCiAgICBPYmplY3Qua2V5cyh0eXBlc19leHBvcnRzKTsKICAgIERlZmluZWRJbmZvID0gY2xhc3MgZXh0ZW5kcyBJbmZvIHsKICAgICAgLyoqCiAgICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkKICAgICAgICogICBQcm9wZXJ0eS4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZQogICAgICAgKiAgIEF0dHJpYnV0ZS4KICAgICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbbWFza10KICAgICAgICogICBNYXNrLgogICAgICAgKiBAcGFyYW0ge1NwYWNlIHwgdW5kZWZpbmVkfSBbc3BhY2VdCiAgICAgICAqICAgU3BhY2UuCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqICAgSW5mby4KICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5MTMsIGF0dHJpYnV0ZSwgbWFzaywgc3BhY2UyKSB7CiAgICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICAgIHN1cGVyKHByb3BlcnR5MTMsIGF0dHJpYnV0ZSk7CiAgICAgICAgbWFyayh0aGlzLCAic3BhY2UiLCBzcGFjZTIpOwogICAgICAgIGlmICh0eXBlb2YgbWFzayA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIHdoaWxlICgrK2luZGV4MiA8IGNoZWNrcy5sZW5ndGgpIHsKICAgICAgICAgICAgY29uc3QgY2hlY2sgPSBjaGVja3NbaW5kZXgyXTsKICAgICAgICAgICAgbWFyayh0aGlzLCBjaGVja3NbaW5kZXgyXSwgKG1hc2sgJiB0eXBlc19leHBvcnRzW2NoZWNrXSkgPT09IHR5cGVzX2V4cG9ydHNbY2hlY2tdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBEZWZpbmVkSW5mby5wcm90b3R5cGUuZGVmaW5lZCA9IHRydWU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvY3JlYXRlLmpzCmZ1bmN0aW9uIGNyZWF0ZTYoZGVmaW5pdGlvbjMpIHsKICBjb25zdCBwcm9wZXJ0aWVzMiA9IHt9OwogIGNvbnN0IG5vcm1hbHMgPSB7fTsKICBmb3IgKGNvbnN0IFtwcm9wZXJ0eTEzLCB2YWx1ZTJdIG9mIE9iamVjdC5lbnRyaWVzKGRlZmluaXRpb24zLnByb3BlcnRpZXMpKSB7CiAgICBjb25zdCBpbmZvID0gbmV3IERlZmluZWRJbmZvKAogICAgICBwcm9wZXJ0eTEzLAogICAgICBkZWZpbml0aW9uMy50cmFuc2Zvcm0oZGVmaW5pdGlvbjMuYXR0cmlidXRlcyB8fCB7fSwgcHJvcGVydHkxMyksCiAgICAgIHZhbHVlMiwKICAgICAgZGVmaW5pdGlvbjMuc3BhY2UKICAgICk7CiAgICBpZiAoZGVmaW5pdGlvbjMubXVzdFVzZVByb3BlcnR5ICYmIGRlZmluaXRpb24zLm11c3RVc2VQcm9wZXJ0eS5pbmNsdWRlcyhwcm9wZXJ0eTEzKSkgewogICAgICBpbmZvLm11c3RVc2VQcm9wZXJ0eSA9IHRydWU7CiAgICB9CiAgICBwcm9wZXJ0aWVzMltwcm9wZXJ0eTEzXSA9IGluZm87CiAgICBub3JtYWxzW25vcm1hbGl6ZTMocHJvcGVydHkxMyldID0gcHJvcGVydHkxMzsKICAgIG5vcm1hbHNbbm9ybWFsaXplMyhpbmZvLmF0dHJpYnV0ZSldID0gcHJvcGVydHkxMzsKICB9CiAgcmV0dXJuIG5ldyBTY2hlbWEocHJvcGVydGllczIsIG5vcm1hbHMsIGRlZmluaXRpb24zLnNwYWNlKTsKfQp2YXIgaW5pdF9jcmVhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvY3JlYXRlLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplKCk7CiAgICBpbml0X2RlZmluZWRfaW5mbygpOwogICAgaW5pdF9zY2hlbWEyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2FyaWEuanMKdmFyIGFyaWEyOwp2YXIgaW5pdF9hcmlhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9hcmlhLmpzIigpIHsKICAgIGluaXRfY3JlYXRlKCk7CiAgICBpbml0X3R5cGVzMygpOwogICAgYXJpYTIgPSBjcmVhdGU2KHsKICAgICAgcHJvcGVydGllczogewogICAgICAgIGFyaWFBY3RpdmVEZXNjZW5kYW50OiBudWxsLAogICAgICAgIGFyaWFBdG9taWM6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYUF1dG9Db21wbGV0ZTogbnVsbCwKICAgICAgICBhcmlhQnVzeTogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhQ2hlY2tlZDogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhQ29sQ291bnQ6IG51bWJlciwKICAgICAgICBhcmlhQ29sSW5kZXg6IG51bWJlciwKICAgICAgICBhcmlhQ29sU3BhbjogbnVtYmVyLAogICAgICAgIGFyaWFDb250cm9sczogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYXJpYUN1cnJlbnQ6IG51bGwsCiAgICAgICAgYXJpYURlc2NyaWJlZEJ5OiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBhcmlhRGV0YWlsczogbnVsbCwKICAgICAgICBhcmlhRGlzYWJsZWQ6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYURyb3BFZmZlY3Q6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGFyaWFFcnJvck1lc3NhZ2U6IG51bGwsCiAgICAgICAgYXJpYUV4cGFuZGVkOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFGbG93VG86IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGFyaWFHcmFiYmVkOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFIYXNQb3B1cDogbnVsbCwKICAgICAgICBhcmlhSGlkZGVuOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFJbnZhbGlkOiBudWxsLAogICAgICAgIGFyaWFLZXlTaG9ydGN1dHM6IG51bGwsCiAgICAgICAgYXJpYUxhYmVsOiBudWxsLAogICAgICAgIGFyaWFMYWJlbGxlZEJ5OiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBhcmlhTGV2ZWw6IG51bWJlciwKICAgICAgICBhcmlhTGl2ZTogbnVsbCwKICAgICAgICBhcmlhTW9kYWw6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYU11bHRpTGluZTogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhTXVsdGlTZWxlY3RhYmxlOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFPcmllbnRhdGlvbjogbnVsbCwKICAgICAgICBhcmlhT3duczogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYXJpYVBsYWNlaG9sZGVyOiBudWxsLAogICAgICAgIGFyaWFQb3NJblNldDogbnVtYmVyLAogICAgICAgIGFyaWFQcmVzc2VkOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFSZWFkT25seTogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhUmVsZXZhbnQ6IG51bGwsCiAgICAgICAgYXJpYVJlcXVpcmVkOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFSb2xlRGVzY3JpcHRpb246IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGFyaWFSb3dDb3VudDogbnVtYmVyLAogICAgICAgIGFyaWFSb3dJbmRleDogbnVtYmVyLAogICAgICAgIGFyaWFSb3dTcGFuOiBudW1iZXIsCiAgICAgICAgYXJpYVNlbGVjdGVkOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFTZXRTaXplOiBudW1iZXIsCiAgICAgICAgYXJpYVNvcnQ6IG51bGwsCiAgICAgICAgYXJpYVZhbHVlTWF4OiBudW1iZXIsCiAgICAgICAgYXJpYVZhbHVlTWluOiBudW1iZXIsCiAgICAgICAgYXJpYVZhbHVlTm93OiBudW1iZXIsCiAgICAgICAgYXJpYVZhbHVlVGV4dDogbnVsbCwKICAgICAgICByb2xlOiBudWxsCiAgICAgIH0sCiAgICAgIHRyYW5zZm9ybShfNCwgcHJvcGVydHkxMykgewogICAgICAgIHJldHVybiBwcm9wZXJ0eTEzID09PSAicm9sZSIgPyBwcm9wZXJ0eTEzIDogImFyaWEtIiArIHByb3BlcnR5MTMuc2xpY2UoNCkudG9Mb3dlckNhc2UoKTsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvY2FzZS1zZW5zaXRpdmUtdHJhbnNmb3JtLmpzCmZ1bmN0aW9uIGNhc2VTZW5zaXRpdmVUcmFuc2Zvcm0oYXR0cmlidXRlcywgYXR0cmlidXRlKSB7CiAgcmV0dXJuIGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzID8gYXR0cmlidXRlc1thdHRyaWJ1dGVdIDogYXR0cmlidXRlOwp9CnZhciBpbml0X2Nhc2Vfc2Vuc2l0aXZlX3RyYW5zZm9ybSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9jYXNlLXNlbnNpdGl2ZS10cmFuc2Zvcm0uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2Nhc2UtaW5zZW5zaXRpdmUtdHJhbnNmb3JtLmpzCmZ1bmN0aW9uIGNhc2VJbnNlbnNpdGl2ZVRyYW5zZm9ybShhdHRyaWJ1dGVzLCBwcm9wZXJ0eTEzKSB7CiAgcmV0dXJuIGNhc2VTZW5zaXRpdmVUcmFuc2Zvcm0oYXR0cmlidXRlcywgcHJvcGVydHkxMy50b0xvd2VyQ2FzZSgpKTsKfQp2YXIgaW5pdF9jYXNlX2luc2Vuc2l0aXZlX3RyYW5zZm9ybSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9jYXNlLWluc2Vuc2l0aXZlLXRyYW5zZm9ybS5qcyIoKSB7CiAgICBpbml0X2Nhc2Vfc2Vuc2l0aXZlX3RyYW5zZm9ybSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9odG1sLmpzCnZhciBodG1sMzsKdmFyIGluaXRfaHRtbDkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2h0bWwuanMiKCkgewogICAgaW5pdF9jYXNlX2luc2Vuc2l0aXZlX3RyYW5zZm9ybSgpOwogICAgaW5pdF9jcmVhdGUoKTsKICAgIGluaXRfdHlwZXMzKCk7CiAgICBodG1sMyA9IGNyZWF0ZTYoewogICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgYWNjZXB0Y2hhcnNldDogImFjY2VwdC1jaGFyc2V0IiwKICAgICAgICBjbGFzc25hbWU6ICJjbGFzcyIsCiAgICAgICAgaHRtbGZvcjogImZvciIsCiAgICAgICAgaHR0cGVxdWl2OiAiaHR0cC1lcXVpdiIKICAgICAgfSwKICAgICAgbXVzdFVzZVByb3BlcnR5OiBbImNoZWNrZWQiLCAibXVsdGlwbGUiLCAibXV0ZWQiLCAic2VsZWN0ZWQiXSwKICAgICAgcHJvcGVydGllczogewogICAgICAgIC8vIFN0YW5kYXJkIFByb3BlcnRpZXMuCiAgICAgICAgYWJicjogbnVsbCwKICAgICAgICBhY2NlcHQ6IGNvbW1hU2VwYXJhdGVkLAogICAgICAgIGFjY2VwdENoYXJzZXQ6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGFjY2Vzc0tleTogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYWN0aW9uOiBudWxsLAogICAgICAgIGFsbG93OiBudWxsLAogICAgICAgIGFsbG93RnVsbFNjcmVlbjogYm9vbGVhbiwKICAgICAgICBhbGxvd1BheW1lbnRSZXF1ZXN0OiBib29sZWFuLAogICAgICAgIGFsbG93VXNlck1lZGlhOiBib29sZWFuLAogICAgICAgIGFsdDogbnVsbCwKICAgICAgICBhczogbnVsbCwKICAgICAgICBhc3luYzogYm9vbGVhbiwKICAgICAgICBhdXRvQ2FwaXRhbGl6ZTogbnVsbCwKICAgICAgICBhdXRvQ29tcGxldGU6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGF1dG9Gb2N1czogYm9vbGVhbiwKICAgICAgICBhdXRvUGxheTogYm9vbGVhbiwKICAgICAgICBibG9ja2luZzogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgY2FwdHVyZTogbnVsbCwKICAgICAgICBjaGFyU2V0OiBudWxsLAogICAgICAgIGNoZWNrZWQ6IGJvb2xlYW4sCiAgICAgICAgY2l0ZTogbnVsbCwKICAgICAgICBjbGFzc05hbWU6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGNvbHM6IG51bWJlciwKICAgICAgICBjb2xTcGFuOiBudWxsLAogICAgICAgIGNvbnRlbnQ6IG51bGwsCiAgICAgICAgY29udGVudEVkaXRhYmxlOiBib29sZWFuaXNoLAogICAgICAgIGNvbnRyb2xzOiBib29sZWFuLAogICAgICAgIGNvbnRyb2xzTGlzdDogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgY29vcmRzOiBudW1iZXIgfCBjb21tYVNlcGFyYXRlZCwKICAgICAgICBjcm9zc09yaWdpbjogbnVsbCwKICAgICAgICBkYXRhOiBudWxsLAogICAgICAgIGRhdGVUaW1lOiBudWxsLAogICAgICAgIGRlY29kaW5nOiBudWxsLAogICAgICAgIGRlZmF1bHQ6IGJvb2xlYW4sCiAgICAgICAgZGVmZXI6IGJvb2xlYW4sCiAgICAgICAgZGlyOiBudWxsLAogICAgICAgIGRpck5hbWU6IG51bGwsCiAgICAgICAgZGlzYWJsZWQ6IGJvb2xlYW4sCiAgICAgICAgZG93bmxvYWQ6IG92ZXJsb2FkZWRCb29sZWFuLAogICAgICAgIGRyYWdnYWJsZTogYm9vbGVhbmlzaCwKICAgICAgICBlbmNUeXBlOiBudWxsLAogICAgICAgIGVudGVyS2V5SGludDogbnVsbCwKICAgICAgICBmZXRjaFByaW9yaXR5OiBudWxsLAogICAgICAgIGZvcm06IG51bGwsCiAgICAgICAgZm9ybUFjdGlvbjogbnVsbCwKICAgICAgICBmb3JtRW5jVHlwZTogbnVsbCwKICAgICAgICBmb3JtTWV0aG9kOiBudWxsLAogICAgICAgIGZvcm1Ob1ZhbGlkYXRlOiBib29sZWFuLAogICAgICAgIGZvcm1UYXJnZXQ6IG51bGwsCiAgICAgICAgaGVhZGVyczogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgaGVpZ2h0OiBudW1iZXIsCiAgICAgICAgaGlkZGVuOiBvdmVybG9hZGVkQm9vbGVhbiwKICAgICAgICBoaWdoOiBudW1iZXIsCiAgICAgICAgaHJlZjogbnVsbCwKICAgICAgICBocmVmTGFuZzogbnVsbCwKICAgICAgICBodG1sRm9yOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBodHRwRXF1aXY6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGlkOiBudWxsLAogICAgICAgIGltYWdlU2l6ZXM6IG51bGwsCiAgICAgICAgaW1hZ2VTcmNTZXQ6IG51bGwsCiAgICAgICAgaW5lcnQ6IGJvb2xlYW4sCiAgICAgICAgaW5wdXRNb2RlOiBudWxsLAogICAgICAgIGludGVncml0eTogbnVsbCwKICAgICAgICBpczogbnVsbCwKICAgICAgICBpc01hcDogYm9vbGVhbiwKICAgICAgICBpdGVtSWQ6IG51bGwsCiAgICAgICAgaXRlbVByb3A6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGl0ZW1SZWY6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGl0ZW1TY29wZTogYm9vbGVhbiwKICAgICAgICBpdGVtVHlwZTogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAga2luZDogbnVsbCwKICAgICAgICBsYWJlbDogbnVsbCwKICAgICAgICBsYW5nOiBudWxsLAogICAgICAgIGxhbmd1YWdlOiBudWxsLAogICAgICAgIGxpc3Q6IG51bGwsCiAgICAgICAgbG9hZGluZzogbnVsbCwKICAgICAgICBsb29wOiBib29sZWFuLAogICAgICAgIGxvdzogbnVtYmVyLAogICAgICAgIG1hbmlmZXN0OiBudWxsLAogICAgICAgIG1heDogbnVsbCwKICAgICAgICBtYXhMZW5ndGg6IG51bWJlciwKICAgICAgICBtZWRpYTogbnVsbCwKICAgICAgICBtZXRob2Q6IG51bGwsCiAgICAgICAgbWluOiBudWxsLAogICAgICAgIG1pbkxlbmd0aDogbnVtYmVyLAogICAgICAgIG11bHRpcGxlOiBib29sZWFuLAogICAgICAgIG11dGVkOiBib29sZWFuLAogICAgICAgIG5hbWU6IG51bGwsCiAgICAgICAgbm9uY2U6IG51bGwsCiAgICAgICAgbm9Nb2R1bGU6IGJvb2xlYW4sCiAgICAgICAgbm9WYWxpZGF0ZTogYm9vbGVhbiwKICAgICAgICBvbkFib3J0OiBudWxsLAogICAgICAgIG9uQWZ0ZXJQcmludDogbnVsbCwKICAgICAgICBvbkF1eENsaWNrOiBudWxsLAogICAgICAgIG9uQmVmb3JlTWF0Y2g6IG51bGwsCiAgICAgICAgb25CZWZvcmVQcmludDogbnVsbCwKICAgICAgICBvbkJlZm9yZVRvZ2dsZTogbnVsbCwKICAgICAgICBvbkJlZm9yZVVubG9hZDogbnVsbCwKICAgICAgICBvbkJsdXI6IG51bGwsCiAgICAgICAgb25DYW5jZWw6IG51bGwsCiAgICAgICAgb25DYW5QbGF5OiBudWxsLAogICAgICAgIG9uQ2FuUGxheVRocm91Z2g6IG51bGwsCiAgICAgICAgb25DaGFuZ2U6IG51bGwsCiAgICAgICAgb25DbGljazogbnVsbCwKICAgICAgICBvbkNsb3NlOiBudWxsLAogICAgICAgIG9uQ29udGV4dExvc3Q6IG51bGwsCiAgICAgICAgb25Db250ZXh0TWVudTogbnVsbCwKICAgICAgICBvbkNvbnRleHRSZXN0b3JlZDogbnVsbCwKICAgICAgICBvbkNvcHk6IG51bGwsCiAgICAgICAgb25DdWVDaGFuZ2U6IG51bGwsCiAgICAgICAgb25DdXQ6IG51bGwsCiAgICAgICAgb25EYmxDbGljazogbnVsbCwKICAgICAgICBvbkRyYWc6IG51bGwsCiAgICAgICAgb25EcmFnRW5kOiBudWxsLAogICAgICAgIG9uRHJhZ0VudGVyOiBudWxsLAogICAgICAgIG9uRHJhZ0V4aXQ6IG51bGwsCiAgICAgICAgb25EcmFnTGVhdmU6IG51bGwsCiAgICAgICAgb25EcmFnT3ZlcjogbnVsbCwKICAgICAgICBvbkRyYWdTdGFydDogbnVsbCwKICAgICAgICBvbkRyb3A6IG51bGwsCiAgICAgICAgb25EdXJhdGlvbkNoYW5nZTogbnVsbCwKICAgICAgICBvbkVtcHRpZWQ6IG51bGwsCiAgICAgICAgb25FbmRlZDogbnVsbCwKICAgICAgICBvbkVycm9yOiBudWxsLAogICAgICAgIG9uRm9jdXM6IG51bGwsCiAgICAgICAgb25Gb3JtRGF0YTogbnVsbCwKICAgICAgICBvbkhhc2hDaGFuZ2U6IG51bGwsCiAgICAgICAgb25JbnB1dDogbnVsbCwKICAgICAgICBvbkludmFsaWQ6IG51bGwsCiAgICAgICAgb25LZXlEb3duOiBudWxsLAogICAgICAgIG9uS2V5UHJlc3M6IG51bGwsCiAgICAgICAgb25LZXlVcDogbnVsbCwKICAgICAgICBvbkxhbmd1YWdlQ2hhbmdlOiBudWxsLAogICAgICAgIG9uTG9hZDogbnVsbCwKICAgICAgICBvbkxvYWRlZERhdGE6IG51bGwsCiAgICAgICAgb25Mb2FkZWRNZXRhZGF0YTogbnVsbCwKICAgICAgICBvbkxvYWRFbmQ6IG51bGwsCiAgICAgICAgb25Mb2FkU3RhcnQ6IG51bGwsCiAgICAgICAgb25NZXNzYWdlOiBudWxsLAogICAgICAgIG9uTWVzc2FnZUVycm9yOiBudWxsLAogICAgICAgIG9uTW91c2VEb3duOiBudWxsLAogICAgICAgIG9uTW91c2VFbnRlcjogbnVsbCwKICAgICAgICBvbk1vdXNlTGVhdmU6IG51bGwsCiAgICAgICAgb25Nb3VzZU1vdmU6IG51bGwsCiAgICAgICAgb25Nb3VzZU91dDogbnVsbCwKICAgICAgICBvbk1vdXNlT3ZlcjogbnVsbCwKICAgICAgICBvbk1vdXNlVXA6IG51bGwsCiAgICAgICAgb25PZmZsaW5lOiBudWxsLAogICAgICAgIG9uT25saW5lOiBudWxsLAogICAgICAgIG9uUGFnZUhpZGU6IG51bGwsCiAgICAgICAgb25QYWdlU2hvdzogbnVsbCwKICAgICAgICBvblBhc3RlOiBudWxsLAogICAgICAgIG9uUGF1c2U6IG51bGwsCiAgICAgICAgb25QbGF5OiBudWxsLAogICAgICAgIG9uUGxheWluZzogbnVsbCwKICAgICAgICBvblBvcFN0YXRlOiBudWxsLAogICAgICAgIG9uUHJvZ3Jlc3M6IG51bGwsCiAgICAgICAgb25SYXRlQ2hhbmdlOiBudWxsLAogICAgICAgIG9uUmVqZWN0aW9uSGFuZGxlZDogbnVsbCwKICAgICAgICBvblJlc2V0OiBudWxsLAogICAgICAgIG9uUmVzaXplOiBudWxsLAogICAgICAgIG9uU2Nyb2xsOiBudWxsLAogICAgICAgIG9uU2Nyb2xsRW5kOiBudWxsLAogICAgICAgIG9uU2VjdXJpdHlQb2xpY3lWaW9sYXRpb246IG51bGwsCiAgICAgICAgb25TZWVrZWQ6IG51bGwsCiAgICAgICAgb25TZWVraW5nOiBudWxsLAogICAgICAgIG9uU2VsZWN0OiBudWxsLAogICAgICAgIG9uU2xvdENoYW5nZTogbnVsbCwKICAgICAgICBvblN0YWxsZWQ6IG51bGwsCiAgICAgICAgb25TdG9yYWdlOiBudWxsLAogICAgICAgIG9uU3VibWl0OiBudWxsLAogICAgICAgIG9uU3VzcGVuZDogbnVsbCwKICAgICAgICBvblRpbWVVcGRhdGU6IG51bGwsCiAgICAgICAgb25Ub2dnbGU6IG51bGwsCiAgICAgICAgb25VbmhhbmRsZWRSZWplY3Rpb246IG51bGwsCiAgICAgICAgb25VbmxvYWQ6IG51bGwsCiAgICAgICAgb25Wb2x1bWVDaGFuZ2U6IG51bGwsCiAgICAgICAgb25XYWl0aW5nOiBudWxsLAogICAgICAgIG9uV2hlZWw6IG51bGwsCiAgICAgICAgb3BlbjogYm9vbGVhbiwKICAgICAgICBvcHRpbXVtOiBudW1iZXIsCiAgICAgICAgcGF0dGVybjogbnVsbCwKICAgICAgICBwaW5nOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBwbGFjZWhvbGRlcjogbnVsbCwKICAgICAgICBwbGF5c0lubGluZTogYm9vbGVhbiwKICAgICAgICBwb3BvdmVyOiBudWxsLAogICAgICAgIHBvcG92ZXJUYXJnZXQ6IG51bGwsCiAgICAgICAgcG9wb3ZlclRhcmdldEFjdGlvbjogbnVsbCwKICAgICAgICBwb3N0ZXI6IG51bGwsCiAgICAgICAgcHJlbG9hZDogbnVsbCwKICAgICAgICByZWFkT25seTogYm9vbGVhbiwKICAgICAgICByZWZlcnJlclBvbGljeTogbnVsbCwKICAgICAgICByZWw6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIHJlcXVpcmVkOiBib29sZWFuLAogICAgICAgIHJldmVyc2VkOiBib29sZWFuLAogICAgICAgIHJvd3M6IG51bWJlciwKICAgICAgICByb3dTcGFuOiBudW1iZXIsCiAgICAgICAgc2FuZGJveDogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgc2NvcGU6IG51bGwsCiAgICAgICAgc2NvcGVkOiBib29sZWFuLAogICAgICAgIHNlYW1sZXNzOiBib29sZWFuLAogICAgICAgIHNlbGVjdGVkOiBib29sZWFuLAogICAgICAgIHNoYWRvd1Jvb3RDbG9uYWJsZTogYm9vbGVhbiwKICAgICAgICBzaGFkb3dSb290RGVsZWdhdGVzRm9jdXM6IGJvb2xlYW4sCiAgICAgICAgc2hhZG93Um9vdE1vZGU6IG51bGwsCiAgICAgICAgc2hhcGU6IG51bGwsCiAgICAgICAgc2l6ZTogbnVtYmVyLAogICAgICAgIHNpemVzOiBudWxsLAogICAgICAgIHNsb3Q6IG51bGwsCiAgICAgICAgc3BhbjogbnVtYmVyLAogICAgICAgIHNwZWxsQ2hlY2s6IGJvb2xlYW5pc2gsCiAgICAgICAgc3JjOiBudWxsLAogICAgICAgIHNyY0RvYzogbnVsbCwKICAgICAgICBzcmNMYW5nOiBudWxsLAogICAgICAgIHNyY1NldDogbnVsbCwKICAgICAgICBzdGFydDogbnVtYmVyLAogICAgICAgIHN0ZXA6IG51bGwsCiAgICAgICAgc3R5bGU6IG51bGwsCiAgICAgICAgdGFiSW5kZXg6IG51bWJlciwKICAgICAgICB0YXJnZXQ6IG51bGwsCiAgICAgICAgdGl0bGU6IG51bGwsCiAgICAgICAgdHJhbnNsYXRlOiBudWxsLAogICAgICAgIHR5cGU6IG51bGwsCiAgICAgICAgdHlwZU11c3RNYXRjaDogYm9vbGVhbiwKICAgICAgICB1c2VNYXA6IG51bGwsCiAgICAgICAgdmFsdWU6IGJvb2xlYW5pc2gsCiAgICAgICAgd2lkdGg6IG51bWJlciwKICAgICAgICB3cmFwOiBudWxsLAogICAgICAgIHdyaXRpbmdTdWdnZXN0aW9uczogbnVsbCwKICAgICAgICAvLyBMZWdhY3kuCiAgICAgICAgLy8gU2VlOiBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNvdGhlci1lbGVtZW50cywtYXR0cmlidXRlcy1hbmQtYXBpcwogICAgICAgIGFsaWduOiBudWxsLAogICAgICAgIC8vIFNldmVyYWwuIFVzZSBDU1MgYHRleHQtYWxpZ25gIGluc3RlYWQsCiAgICAgICAgYUxpbms6IG51bGwsCiAgICAgICAgLy8gYDxib2R5PmAuIFVzZSBDU1MgYGE6YWN0aXZlIHtjb2xvcn1gIGluc3RlYWQKICAgICAgICBhcmNoaXZlOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICAvLyBgPG9iamVjdD5gLiBMaXN0IG9mIFVSSXMgdG8gYXJjaGl2ZXMKICAgICAgICBheGlzOiBudWxsLAogICAgICAgIC8vIGA8dGQ+YCBhbmQgYDx0aD5gLiBVc2UgYHNjb3BlYCBvbiBgPHRoPmAKICAgICAgICBiYWNrZ3JvdW5kOiBudWxsLAogICAgICAgIC8vIGA8Ym9keT5gLiBVc2UgQ1NTIGBiYWNrZ3JvdW5kLWltYWdlYCBpbnN0ZWFkCiAgICAgICAgYmdDb2xvcjogbnVsbCwKICAgICAgICAvLyBgPGJvZHk+YCBhbmQgdGFibGUgZWxlbWVudHMuIFVzZSBDU1MgYGJhY2tncm91bmQtY29sb3JgIGluc3RlYWQKICAgICAgICBib3JkZXI6IG51bWJlciwKICAgICAgICAvLyBgPHRhYmxlPmAuIFVzZSBDU1MgYGJvcmRlci13aWR0aGAgaW5zdGVhZCwKICAgICAgICBib3JkZXJDb2xvcjogbnVsbCwKICAgICAgICAvLyBgPHRhYmxlPmAuIFVzZSBDU1MgYGJvcmRlci1jb2xvcmAgaW5zdGVhZCwKICAgICAgICBib3R0b21NYXJnaW46IG51bWJlciwKICAgICAgICAvLyBgPGJvZHk+YAogICAgICAgIGNlbGxQYWRkaW5nOiBudWxsLAogICAgICAgIC8vIGA8dGFibGU+YAogICAgICAgIGNlbGxTcGFjaW5nOiBudWxsLAogICAgICAgIC8vIGA8dGFibGU+YAogICAgICAgIGNoYXI6IG51bGwsCiAgICAgICAgLy8gU2V2ZXJhbCB0YWJsZSBlbGVtZW50cy4gV2hlbiBgYWxpZ249Y2hhcmAsIHNldHMgdGhlIGNoYXJhY3RlciB0byBhbGlnbiBvbgogICAgICAgIGNoYXJPZmY6IG51bGwsCiAgICAgICAgLy8gU2V2ZXJhbCB0YWJsZSBlbGVtZW50cy4gV2hlbiBgY2hhcmAsIG9mZnNldHMgdGhlIGFsaWdubWVudAogICAgICAgIGNsYXNzSWQ6IG51bGwsCiAgICAgICAgLy8gYDxvYmplY3Q+YAogICAgICAgIGNsZWFyOiBudWxsLAogICAgICAgIC8vIGA8YnI+YC4gVXNlIENTUyBgY2xlYXJgIGluc3RlYWQKICAgICAgICBjb2RlOiBudWxsLAogICAgICAgIC8vIGA8b2JqZWN0PmAKICAgICAgICBjb2RlQmFzZTogbnVsbCwKICAgICAgICAvLyBgPG9iamVjdD5gCiAgICAgICAgY29kZVR5cGU6IG51bGwsCiAgICAgICAgLy8gYDxvYmplY3Q+YAogICAgICAgIGNvbG9yOiBudWxsLAogICAgICAgIC8vIGA8Zm9udD5gIGFuZCBgPGhyPmAuIFVzZSBDU1MgaW5zdGVhZAogICAgICAgIGNvbXBhY3Q6IGJvb2xlYW4sCiAgICAgICAgLy8gTGlzdHMuIFVzZSBDU1MgdG8gcmVkdWNlIHNwYWNlIGJldHdlZW4gaXRlbXMgaW5zdGVhZAogICAgICAgIGRlY2xhcmU6IGJvb2xlYW4sCiAgICAgICAgLy8gYDxvYmplY3Q+YAogICAgICAgIGV2ZW50OiBudWxsLAogICAgICAgIC8vIGA8c2NyaXB0PmAKICAgICAgICBmYWNlOiBudWxsLAogICAgICAgIC8vIGA8Zm9udD5gLiBVc2UgQ1NTIGluc3RlYWQKICAgICAgICBmcmFtZTogbnVsbCwKICAgICAgICAvLyBgPHRhYmxlPmAKICAgICAgICBmcmFtZUJvcmRlcjogbnVsbCwKICAgICAgICAvLyBgPGlmcmFtZT5gLiBVc2UgQ1NTIGBib3JkZXJgIGluc3RlYWQKICAgICAgICBoU3BhY2U6IG51bWJlciwKICAgICAgICAvLyBgPGltZz5gIGFuZCBgPG9iamVjdD5gCiAgICAgICAgbGVmdE1hcmdpbjogbnVtYmVyLAogICAgICAgIC8vIGA8Ym9keT5gCiAgICAgICAgbGluazogbnVsbCwKICAgICAgICAvLyBgPGJvZHk+YC4gVXNlIENTUyBgYTpsaW5rIHtjb2xvcjogKn1gIGluc3RlYWQKICAgICAgICBsb25nRGVzYzogbnVsbCwKICAgICAgICAvLyBgPGZyYW1lPmAsIGA8aWZyYW1lPmAsIGFuZCBgPGltZz5gLiBVc2UgYW4gYDxhPmAKICAgICAgICBsb3dTcmM6IG51bGwsCiAgICAgICAgLy8gYDxpbWc+YC4gVXNlIGEgYDxwaWN0dXJlPmAKICAgICAgICBtYXJnaW5IZWlnaHQ6IG51bWJlciwKICAgICAgICAvLyBgPGJvZHk+YAogICAgICAgIG1hcmdpbldpZHRoOiBudW1iZXIsCiAgICAgICAgLy8gYDxib2R5PmAKICAgICAgICBub1Jlc2l6ZTogYm9vbGVhbiwKICAgICAgICAvLyBgPGZyYW1lPmAKICAgICAgICBub0hyZWY6IGJvb2xlYW4sCiAgICAgICAgLy8gYDxhcmVhPmAuIFVzZSBubyBocmVmIGluc3RlYWQgb2YgYW4gZXhwbGljaXQgYG5vaHJlZmAKICAgICAgICBub1NoYWRlOiBib29sZWFuLAogICAgICAgIC8vIGA8aHI+YC4gVXNlIGJhY2tncm91bmQtY29sb3IgYW5kIGhlaWdodCBpbnN0ZWFkIG9mIGJvcmRlcnMKICAgICAgICBub1dyYXA6IGJvb2xlYW4sCiAgICAgICAgLy8gYDx0ZD5gIGFuZCBgPHRoPmAKICAgICAgICBvYmplY3Q6IG51bGwsCiAgICAgICAgLy8gYDxhcHBsZXQ+YAogICAgICAgIHByb2ZpbGU6IG51bGwsCiAgICAgICAgLy8gYDxoZWFkPmAKICAgICAgICBwcm9tcHQ6IG51bGwsCiAgICAgICAgLy8gYDxpc2luZGV4PmAKICAgICAgICByZXY6IG51bGwsCiAgICAgICAgLy8gYDxsaW5rPmAKICAgICAgICByaWdodE1hcmdpbjogbnVtYmVyLAogICAgICAgIC8vIGA8Ym9keT5gCiAgICAgICAgcnVsZXM6IG51bGwsCiAgICAgICAgLy8gYDx0YWJsZT5gCiAgICAgICAgc2NoZW1lOiBudWxsLAogICAgICAgIC8vIGA8bWV0YT5gCiAgICAgICAgc2Nyb2xsaW5nOiBib29sZWFuaXNoLAogICAgICAgIC8vIGA8ZnJhbWU+YC4gVXNlIG92ZXJmbG93IGluIHRoZSBjaGlsZCBjb250ZXh0CiAgICAgICAgc3RhbmRieTogbnVsbCwKICAgICAgICAvLyBgPG9iamVjdD5gCiAgICAgICAgc3VtbWFyeTogbnVsbCwKICAgICAgICAvLyBgPHRhYmxlPmAKICAgICAgICB0ZXh0OiBudWxsLAogICAgICAgIC8vIGA8Ym9keT5gLiBVc2UgQ1NTIGBjb2xvcmAgaW5zdGVhZAogICAgICAgIHRvcE1hcmdpbjogbnVtYmVyLAogICAgICAgIC8vIGA8Ym9keT5gCiAgICAgICAgdmFsdWVUeXBlOiBudWxsLAogICAgICAgIC8vIGA8cGFyYW0+YAogICAgICAgIHZlcnNpb246IG51bGwsCiAgICAgICAgLy8gYDxodG1sPmAuIFVzZSBhIGRvY3R5cGUuCiAgICAgICAgdkFsaWduOiBudWxsLAogICAgICAgIC8vIFNldmVyYWwuIFVzZSBDU1MgYHZlcnRpY2FsLWFsaWduYCBpbnN0ZWFkCiAgICAgICAgdkxpbms6IG51bGwsCiAgICAgICAgLy8gYDxib2R5PmAuIFVzZSBDU1MgYGE6dmlzaXRlZCB7Y29sb3J9YCBpbnN0ZWFkCiAgICAgICAgdlNwYWNlOiBudW1iZXIsCiAgICAgICAgLy8gYDxpbWc+YCBhbmQgYDxvYmplY3Q+YAogICAgICAgIC8vIE5vbi1zdGFuZGFyZCBQcm9wZXJ0aWVzLgogICAgICAgIGFsbG93VHJhbnNwYXJlbmN5OiBudWxsLAogICAgICAgIGF1dG9Db3JyZWN0OiBudWxsLAogICAgICAgIGF1dG9TYXZlOiBudWxsLAogICAgICAgIGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlOiBib29sZWFuLAogICAgICAgIGRpc2FibGVSZW1vdGVQbGF5YmFjazogYm9vbGVhbiwKICAgICAgICBwcmVmaXg6IG51bGwsCiAgICAgICAgcHJvcGVydHk6IG51bGwsCiAgICAgICAgcmVzdWx0czogbnVtYmVyLAogICAgICAgIHNlY3VyaXR5OiBudWxsLAogICAgICAgIHVuc2VsZWN0YWJsZTogbnVsbAogICAgICB9LAogICAgICBzcGFjZTogImh0bWwiLAogICAgICB0cmFuc2Zvcm06IGNhc2VJbnNlbnNpdGl2ZVRyYW5zZm9ybQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3N2Zy5qcwp2YXIgc3ZnOwp2YXIgaW5pdF9zdmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3N2Zy5qcyIoKSB7CiAgICBpbml0X2Nhc2Vfc2Vuc2l0aXZlX3RyYW5zZm9ybSgpOwogICAgaW5pdF9jcmVhdGUoKTsKICAgIGluaXRfdHlwZXMzKCk7CiAgICBzdmcgPSBjcmVhdGU2KHsKICAgICAgYXR0cmlidXRlczogewogICAgICAgIGFjY2VudEhlaWdodDogImFjY2VudC1oZWlnaHQiLAogICAgICAgIGFsaWdubWVudEJhc2VsaW5lOiAiYWxpZ25tZW50LWJhc2VsaW5lIiwKICAgICAgICBhcmFiaWNGb3JtOiAiYXJhYmljLWZvcm0iLAogICAgICAgIGJhc2VsaW5lU2hpZnQ6ICJiYXNlbGluZS1zaGlmdCIsCiAgICAgICAgY2FwSGVpZ2h0OiAiY2FwLWhlaWdodCIsCiAgICAgICAgY2xhc3NOYW1lOiAiY2xhc3MiLAogICAgICAgIGNsaXBQYXRoOiAiY2xpcC1wYXRoIiwKICAgICAgICBjbGlwUnVsZTogImNsaXAtcnVsZSIsCiAgICAgICAgY29sb3JJbnRlcnBvbGF0aW9uOiAiY29sb3ItaW50ZXJwb2xhdGlvbiIsCiAgICAgICAgY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczogImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyIsCiAgICAgICAgY29sb3JQcm9maWxlOiAiY29sb3ItcHJvZmlsZSIsCiAgICAgICAgY29sb3JSZW5kZXJpbmc6ICJjb2xvci1yZW5kZXJpbmciLAogICAgICAgIGNyb3NzT3JpZ2luOiAiY3Jvc3NvcmlnaW4iLAogICAgICAgIGRhdGFUeXBlOiAiZGF0YXR5cGUiLAogICAgICAgIGRvbWluYW50QmFzZWxpbmU6ICJkb21pbmFudC1iYXNlbGluZSIsCiAgICAgICAgZW5hYmxlQmFja2dyb3VuZDogImVuYWJsZS1iYWNrZ3JvdW5kIiwKICAgICAgICBmaWxsT3BhY2l0eTogImZpbGwtb3BhY2l0eSIsCiAgICAgICAgZmlsbFJ1bGU6ICJmaWxsLXJ1bGUiLAogICAgICAgIGZsb29kQ29sb3I6ICJmbG9vZC1jb2xvciIsCiAgICAgICAgZmxvb2RPcGFjaXR5OiAiZmxvb2Qtb3BhY2l0eSIsCiAgICAgICAgZm9udEZhbWlseTogImZvbnQtZmFtaWx5IiwKICAgICAgICBmb250U2l6ZTogImZvbnQtc2l6ZSIsCiAgICAgICAgZm9udFNpemVBZGp1c3Q6ICJmb250LXNpemUtYWRqdXN0IiwKICAgICAgICBmb250U3RyZXRjaDogImZvbnQtc3RyZXRjaCIsCiAgICAgICAgZm9udFN0eWxlOiAiZm9udC1zdHlsZSIsCiAgICAgICAgZm9udFZhcmlhbnQ6ICJmb250LXZhcmlhbnQiLAogICAgICAgIGZvbnRXZWlnaHQ6ICJmb250LXdlaWdodCIsCiAgICAgICAgZ2x5cGhOYW1lOiAiZ2x5cGgtbmFtZSIsCiAgICAgICAgZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6ICJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwKICAgICAgICBnbHlwaE9yaWVudGF0aW9uVmVydGljYWw6ICJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCIsCiAgICAgICAgaHJlZkxhbmc6ICJocmVmbGFuZyIsCiAgICAgICAgaG9yaXpBZHZYOiAiaG9yaXotYWR2LXgiLAogICAgICAgIGhvcml6T3JpZ2luWDogImhvcml6LW9yaWdpbi14IiwKICAgICAgICBob3Jpek9yaWdpblk6ICJob3Jpei1vcmlnaW4teSIsCiAgICAgICAgaW1hZ2VSZW5kZXJpbmc6ICJpbWFnZS1yZW5kZXJpbmciLAogICAgICAgIGxldHRlclNwYWNpbmc6ICJsZXR0ZXItc3BhY2luZyIsCiAgICAgICAgbGlnaHRpbmdDb2xvcjogImxpZ2h0aW5nLWNvbG9yIiwKICAgICAgICBtYXJrZXJFbmQ6ICJtYXJrZXItZW5kIiwKICAgICAgICBtYXJrZXJNaWQ6ICJtYXJrZXItbWlkIiwKICAgICAgICBtYXJrZXJTdGFydDogIm1hcmtlci1zdGFydCIsCiAgICAgICAgbmF2RG93bjogIm5hdi1kb3duIiwKICAgICAgICBuYXZEb3duTGVmdDogIm5hdi1kb3duLWxlZnQiLAogICAgICAgIG5hdkRvd25SaWdodDogIm5hdi1kb3duLXJpZ2h0IiwKICAgICAgICBuYXZMZWZ0OiAibmF2LWxlZnQiLAogICAgICAgIG5hdk5leHQ6ICJuYXYtbmV4dCIsCiAgICAgICAgbmF2UHJldjogIm5hdi1wcmV2IiwKICAgICAgICBuYXZSaWdodDogIm5hdi1yaWdodCIsCiAgICAgICAgbmF2VXA6ICJuYXYtdXAiLAogICAgICAgIG5hdlVwTGVmdDogIm5hdi11cC1sZWZ0IiwKICAgICAgICBuYXZVcFJpZ2h0OiAibmF2LXVwLXJpZ2h0IiwKICAgICAgICBvbkFib3J0OiAib25hYm9ydCIsCiAgICAgICAgb25BY3RpdmF0ZTogIm9uYWN0aXZhdGUiLAogICAgICAgIG9uQWZ0ZXJQcmludDogIm9uYWZ0ZXJwcmludCIsCiAgICAgICAgb25CZWZvcmVQcmludDogIm9uYmVmb3JlcHJpbnQiLAogICAgICAgIG9uQmVnaW46ICJvbmJlZ2luIiwKICAgICAgICBvbkNhbmNlbDogIm9uY2FuY2VsIiwKICAgICAgICBvbkNhblBsYXk6ICJvbmNhbnBsYXkiLAogICAgICAgIG9uQ2FuUGxheVRocm91Z2g6ICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICAgICBvbkNoYW5nZTogIm9uY2hhbmdlIiwKICAgICAgICBvbkNsaWNrOiAib25jbGljayIsCiAgICAgICAgb25DbG9zZTogIm9uY2xvc2UiLAogICAgICAgIG9uQ29weTogIm9uY29weSIsCiAgICAgICAgb25DdWVDaGFuZ2U6ICJvbmN1ZWNoYW5nZSIsCiAgICAgICAgb25DdXQ6ICJvbmN1dCIsCiAgICAgICAgb25EYmxDbGljazogIm9uZGJsY2xpY2siLAogICAgICAgIG9uRHJhZzogIm9uZHJhZyIsCiAgICAgICAgb25EcmFnRW5kOiAib25kcmFnZW5kIiwKICAgICAgICBvbkRyYWdFbnRlcjogIm9uZHJhZ2VudGVyIiwKICAgICAgICBvbkRyYWdFeGl0OiAib25kcmFnZXhpdCIsCiAgICAgICAgb25EcmFnTGVhdmU6ICJvbmRyYWdsZWF2ZSIsCiAgICAgICAgb25EcmFnT3ZlcjogIm9uZHJhZ292ZXIiLAogICAgICAgIG9uRHJhZ1N0YXJ0OiAib25kcmFnc3RhcnQiLAogICAgICAgIG9uRHJvcDogIm9uZHJvcCIsCiAgICAgICAgb25EdXJhdGlvbkNoYW5nZTogIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgICAgIG9uRW1wdGllZDogIm9uZW1wdGllZCIsCiAgICAgICAgb25FbmQ6ICJvbmVuZCIsCiAgICAgICAgb25FbmRlZDogIm9uZW5kZWQiLAogICAgICAgIG9uRXJyb3I6ICJvbmVycm9yIiwKICAgICAgICBvbkZvY3VzOiAib25mb2N1cyIsCiAgICAgICAgb25Gb2N1c0luOiAib25mb2N1c2luIiwKICAgICAgICBvbkZvY3VzT3V0OiAib25mb2N1c291dCIsCiAgICAgICAgb25IYXNoQ2hhbmdlOiAib25oYXNoY2hhbmdlIiwKICAgICAgICBvbklucHV0OiAib25pbnB1dCIsCiAgICAgICAgb25JbnZhbGlkOiAib25pbnZhbGlkIiwKICAgICAgICBvbktleURvd246ICJvbmtleWRvd24iLAogICAgICAgIG9uS2V5UHJlc3M6ICJvbmtleXByZXNzIiwKICAgICAgICBvbktleVVwOiAib25rZXl1cCIsCiAgICAgICAgb25Mb2FkOiAib25sb2FkIiwKICAgICAgICBvbkxvYWRlZERhdGE6ICJvbmxvYWRlZGRhdGEiLAogICAgICAgIG9uTG9hZGVkTWV0YWRhdGE6ICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICAgICBvbkxvYWRTdGFydDogIm9ubG9hZHN0YXJ0IiwKICAgICAgICBvbk1lc3NhZ2U6ICJvbm1lc3NhZ2UiLAogICAgICAgIG9uTW91c2VEb3duOiAib25tb3VzZWRvd24iLAogICAgICAgIG9uTW91c2VFbnRlcjogIm9ubW91c2VlbnRlciIsCiAgICAgICAgb25Nb3VzZUxlYXZlOiAib25tb3VzZWxlYXZlIiwKICAgICAgICBvbk1vdXNlTW92ZTogIm9ubW91c2Vtb3ZlIiwKICAgICAgICBvbk1vdXNlT3V0OiAib25tb3VzZW91dCIsCiAgICAgICAgb25Nb3VzZU92ZXI6ICJvbm1vdXNlb3ZlciIsCiAgICAgICAgb25Nb3VzZVVwOiAib25tb3VzZXVwIiwKICAgICAgICBvbk1vdXNlV2hlZWw6ICJvbm1vdXNld2hlZWwiLAogICAgICAgIG9uT2ZmbGluZTogIm9ub2ZmbGluZSIsCiAgICAgICAgb25PbmxpbmU6ICJvbm9ubGluZSIsCiAgICAgICAgb25QYWdlSGlkZTogIm9ucGFnZWhpZGUiLAogICAgICAgIG9uUGFnZVNob3c6ICJvbnBhZ2VzaG93IiwKICAgICAgICBvblBhc3RlOiAib25wYXN0ZSIsCiAgICAgICAgb25QYXVzZTogIm9ucGF1c2UiLAogICAgICAgIG9uUGxheTogIm9ucGxheSIsCiAgICAgICAgb25QbGF5aW5nOiAib25wbGF5aW5nIiwKICAgICAgICBvblBvcFN0YXRlOiAib25wb3BzdGF0ZSIsCiAgICAgICAgb25Qcm9ncmVzczogIm9ucHJvZ3Jlc3MiLAogICAgICAgIG9uUmF0ZUNoYW5nZTogIm9ucmF0ZWNoYW5nZSIsCiAgICAgICAgb25SZXBlYXQ6ICJvbnJlcGVhdCIsCiAgICAgICAgb25SZXNldDogIm9ucmVzZXQiLAogICAgICAgIG9uUmVzaXplOiAib25yZXNpemUiLAogICAgICAgIG9uU2Nyb2xsOiAib25zY3JvbGwiLAogICAgICAgIG9uU2Vla2VkOiAib25zZWVrZWQiLAogICAgICAgIG9uU2Vla2luZzogIm9uc2Vla2luZyIsCiAgICAgICAgb25TZWxlY3Q6ICJvbnNlbGVjdCIsCiAgICAgICAgb25TaG93OiAib25zaG93IiwKICAgICAgICBvblN0YWxsZWQ6ICJvbnN0YWxsZWQiLAogICAgICAgIG9uU3RvcmFnZTogIm9uc3RvcmFnZSIsCiAgICAgICAgb25TdWJtaXQ6ICJvbnN1Ym1pdCIsCiAgICAgICAgb25TdXNwZW5kOiAib25zdXNwZW5kIiwKICAgICAgICBvblRpbWVVcGRhdGU6ICJvbnRpbWV1cGRhdGUiLAogICAgICAgIG9uVG9nZ2xlOiAib250b2dnbGUiLAogICAgICAgIG9uVW5sb2FkOiAib251bmxvYWQiLAogICAgICAgIG9uVm9sdW1lQ2hhbmdlOiAib252b2x1bWVjaGFuZ2UiLAogICAgICAgIG9uV2FpdGluZzogIm9ud2FpdGluZyIsCiAgICAgICAgb25ab29tOiAib256b29tIiwKICAgICAgICBvdmVybGluZVBvc2l0aW9uOiAib3ZlcmxpbmUtcG9zaXRpb24iLAogICAgICAgIG92ZXJsaW5lVGhpY2tuZXNzOiAib3ZlcmxpbmUtdGhpY2tuZXNzIiwKICAgICAgICBwYWludE9yZGVyOiAicGFpbnQtb3JkZXIiLAogICAgICAgIHBhbm9zZTE6ICJwYW5vc2UtMSIsCiAgICAgICAgcG9pbnRlckV2ZW50czogInBvaW50ZXItZXZlbnRzIiwKICAgICAgICByZWZlcnJlclBvbGljeTogInJlZmVycmVycG9saWN5IiwKICAgICAgICByZW5kZXJpbmdJbnRlbnQ6ICJyZW5kZXJpbmctaW50ZW50IiwKICAgICAgICBzaGFwZVJlbmRlcmluZzogInNoYXBlLXJlbmRlcmluZyIsCiAgICAgICAgc3RvcENvbG9yOiAic3RvcC1jb2xvciIsCiAgICAgICAgc3RvcE9wYWNpdHk6ICJzdG9wLW9wYWNpdHkiLAogICAgICAgIHN0cmlrZXRocm91Z2hQb3NpdGlvbjogInN0cmlrZXRocm91Z2gtcG9zaXRpb24iLAogICAgICAgIHN0cmlrZXRocm91Z2hUaGlja25lc3M6ICJzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyIsCiAgICAgICAgc3Ryb2tlRGFzaEFycmF5OiAic3Ryb2tlLWRhc2hhcnJheSIsCiAgICAgICAgc3Ryb2tlRGFzaE9mZnNldDogInN0cm9rZS1kYXNob2Zmc2V0IiwKICAgICAgICBzdHJva2VMaW5lQ2FwOiAic3Ryb2tlLWxpbmVjYXAiLAogICAgICAgIHN0cm9rZUxpbmVKb2luOiAic3Ryb2tlLWxpbmVqb2luIiwKICAgICAgICBzdHJva2VNaXRlckxpbWl0OiAic3Ryb2tlLW1pdGVybGltaXQiLAogICAgICAgIHN0cm9rZU9wYWNpdHk6ICJzdHJva2Utb3BhY2l0eSIsCiAgICAgICAgc3Ryb2tlV2lkdGg6ICJzdHJva2Utd2lkdGgiLAogICAgICAgIHRhYkluZGV4OiAidGFiaW5kZXgiLAogICAgICAgIHRleHRBbmNob3I6ICJ0ZXh0LWFuY2hvciIsCiAgICAgICAgdGV4dERlY29yYXRpb246ICJ0ZXh0LWRlY29yYXRpb24iLAogICAgICAgIHRleHRSZW5kZXJpbmc6ICJ0ZXh0LXJlbmRlcmluZyIsCiAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiAidHJhbnNmb3JtLW9yaWdpbiIsCiAgICAgICAgdHlwZU9mOiAidHlwZW9mIiwKICAgICAgICB1bmRlcmxpbmVQb3NpdGlvbjogInVuZGVybGluZS1wb3NpdGlvbiIsCiAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzOiAidW5kZXJsaW5lLXRoaWNrbmVzcyIsCiAgICAgICAgdW5pY29kZUJpZGk6ICJ1bmljb2RlLWJpZGkiLAogICAgICAgIHVuaWNvZGVSYW5nZTogInVuaWNvZGUtcmFuZ2UiLAogICAgICAgIHVuaXRzUGVyRW06ICJ1bml0cy1wZXItZW0iLAogICAgICAgIHZBbHBoYWJldGljOiAidi1hbHBoYWJldGljIiwKICAgICAgICB2SGFuZ2luZzogInYtaGFuZ2luZyIsCiAgICAgICAgdklkZW9ncmFwaGljOiAidi1pZGVvZ3JhcGhpYyIsCiAgICAgICAgdk1hdGhlbWF0aWNhbDogInYtbWF0aGVtYXRpY2FsIiwKICAgICAgICB2ZWN0b3JFZmZlY3Q6ICJ2ZWN0b3ItZWZmZWN0IiwKICAgICAgICB2ZXJ0QWR2WTogInZlcnQtYWR2LXkiLAogICAgICAgIHZlcnRPcmlnaW5YOiAidmVydC1vcmlnaW4teCIsCiAgICAgICAgdmVydE9yaWdpblk6ICJ2ZXJ0LW9yaWdpbi15IiwKICAgICAgICB3b3JkU3BhY2luZzogIndvcmQtc3BhY2luZyIsCiAgICAgICAgd3JpdGluZ01vZGU6ICJ3cml0aW5nLW1vZGUiLAogICAgICAgIHhIZWlnaHQ6ICJ4LWhlaWdodCIsCiAgICAgICAgLy8gVGhlc2Ugd2VyZSBjYW1lbGNhc2VkIGluIFRpbnkuIE5vdyBsb3dlcmNhc2VkIGluIFNWRyAyCiAgICAgICAgcGxheWJhY2tPcmRlcjogInBsYXliYWNrb3JkZXIiLAogICAgICAgIHRpbWVsaW5lQmVnaW46ICJ0aW1lbGluZWJlZ2luIgogICAgICB9LAogICAgICBwcm9wZXJ0aWVzOiB7CiAgICAgICAgYWJvdXQ6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICBhY2NlbnRIZWlnaHQ6IG51bWJlciwKICAgICAgICBhY2N1bXVsYXRlOiBudWxsLAogICAgICAgIGFkZGl0aXZlOiBudWxsLAogICAgICAgIGFsaWdubWVudEJhc2VsaW5lOiBudWxsLAogICAgICAgIGFscGhhYmV0aWM6IG51bWJlciwKICAgICAgICBhbXBsaXR1ZGU6IG51bWJlciwKICAgICAgICBhcmFiaWNGb3JtOiBudWxsLAogICAgICAgIGFzY2VudDogbnVtYmVyLAogICAgICAgIGF0dHJpYnV0ZU5hbWU6IG51bGwsCiAgICAgICAgYXR0cmlidXRlVHlwZTogbnVsbCwKICAgICAgICBhemltdXRoOiBudW1iZXIsCiAgICAgICAgYmFuZHdpZHRoOiBudWxsLAogICAgICAgIGJhc2VsaW5lU2hpZnQ6IG51bGwsCiAgICAgICAgYmFzZUZyZXF1ZW5jeTogbnVsbCwKICAgICAgICBiYXNlUHJvZmlsZTogbnVsbCwKICAgICAgICBiYm94OiBudWxsLAogICAgICAgIGJlZ2luOiBudWxsLAogICAgICAgIGJpYXM6IG51bWJlciwKICAgICAgICBieTogbnVsbCwKICAgICAgICBjYWxjTW9kZTogbnVsbCwKICAgICAgICBjYXBIZWlnaHQ6IG51bWJlciwKICAgICAgICBjbGFzc05hbWU6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGNsaXA6IG51bGwsCiAgICAgICAgY2xpcFBhdGg6IG51bGwsCiAgICAgICAgY2xpcFBhdGhVbml0czogbnVsbCwKICAgICAgICBjbGlwUnVsZTogbnVsbCwKICAgICAgICBjb2xvcjogbnVsbCwKICAgICAgICBjb2xvckludGVycG9sYXRpb246IG51bGwsCiAgICAgICAgY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczogbnVsbCwKICAgICAgICBjb2xvclByb2ZpbGU6IG51bGwsCiAgICAgICAgY29sb3JSZW5kZXJpbmc6IG51bGwsCiAgICAgICAgY29udGVudDogbnVsbCwKICAgICAgICBjb250ZW50U2NyaXB0VHlwZTogbnVsbCwKICAgICAgICBjb250ZW50U3R5bGVUeXBlOiBudWxsLAogICAgICAgIGNyb3NzT3JpZ2luOiBudWxsLAogICAgICAgIGN1cnNvcjogbnVsbCwKICAgICAgICBjeDogbnVsbCwKICAgICAgICBjeTogbnVsbCwKICAgICAgICBkOiBudWxsLAogICAgICAgIGRhdGFUeXBlOiBudWxsLAogICAgICAgIGRlZmF1bHRBY3Rpb246IG51bGwsCiAgICAgICAgZGVzY2VudDogbnVtYmVyLAogICAgICAgIGRpZmZ1c2VDb25zdGFudDogbnVtYmVyLAogICAgICAgIGRpcmVjdGlvbjogbnVsbCwKICAgICAgICBkaXNwbGF5OiBudWxsLAogICAgICAgIGR1cjogbnVsbCwKICAgICAgICBkaXZpc29yOiBudW1iZXIsCiAgICAgICAgZG9taW5hbnRCYXNlbGluZTogbnVsbCwKICAgICAgICBkb3dubG9hZDogYm9vbGVhbiwKICAgICAgICBkeDogbnVsbCwKICAgICAgICBkeTogbnVsbCwKICAgICAgICBlZGdlTW9kZTogbnVsbCwKICAgICAgICBlZGl0YWJsZTogbnVsbCwKICAgICAgICBlbGV2YXRpb246IG51bWJlciwKICAgICAgICBlbmFibGVCYWNrZ3JvdW5kOiBudWxsLAogICAgICAgIGVuZDogbnVsbCwKICAgICAgICBldmVudDogbnVsbCwKICAgICAgICBleHBvbmVudDogbnVtYmVyLAogICAgICAgIGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6IG51bGwsCiAgICAgICAgZmlsbDogbnVsbCwKICAgICAgICBmaWxsT3BhY2l0eTogbnVtYmVyLAogICAgICAgIGZpbGxSdWxlOiBudWxsLAogICAgICAgIGZpbHRlcjogbnVsbCwKICAgICAgICBmaWx0ZXJSZXM6IG51bGwsCiAgICAgICAgZmlsdGVyVW5pdHM6IG51bGwsCiAgICAgICAgZmxvb2RDb2xvcjogbnVsbCwKICAgICAgICBmbG9vZE9wYWNpdHk6IG51bGwsCiAgICAgICAgZm9jdXNhYmxlOiBudWxsLAogICAgICAgIGZvY3VzSGlnaGxpZ2h0OiBudWxsLAogICAgICAgIGZvbnRGYW1pbHk6IG51bGwsCiAgICAgICAgZm9udFNpemU6IG51bGwsCiAgICAgICAgZm9udFNpemVBZGp1c3Q6IG51bGwsCiAgICAgICAgZm9udFN0cmV0Y2g6IG51bGwsCiAgICAgICAgZm9udFN0eWxlOiBudWxsLAogICAgICAgIGZvbnRWYXJpYW50OiBudWxsLAogICAgICAgIGZvbnRXZWlnaHQ6IG51bGwsCiAgICAgICAgZm9ybWF0OiBudWxsLAogICAgICAgIGZyOiBudWxsLAogICAgICAgIGZyb206IG51bGwsCiAgICAgICAgZng6IG51bGwsCiAgICAgICAgZnk6IG51bGwsCiAgICAgICAgZzE6IGNvbW1hU2VwYXJhdGVkLAogICAgICAgIGcyOiBjb21tYVNlcGFyYXRlZCwKICAgICAgICBnbHlwaE5hbWU6IGNvbW1hU2VwYXJhdGVkLAogICAgICAgIGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOiBudWxsLAogICAgICAgIGdseXBoT3JpZW50YXRpb25WZXJ0aWNhbDogbnVsbCwKICAgICAgICBnbHlwaFJlZjogbnVsbCwKICAgICAgICBncmFkaWVudFRyYW5zZm9ybTogbnVsbCwKICAgICAgICBncmFkaWVudFVuaXRzOiBudWxsLAogICAgICAgIGhhbmRsZXI6IG51bGwsCiAgICAgICAgaGFuZ2luZzogbnVtYmVyLAogICAgICAgIGhhdGNoQ29udGVudFVuaXRzOiBudWxsLAogICAgICAgIGhhdGNoVW5pdHM6IG51bGwsCiAgICAgICAgaGVpZ2h0OiBudWxsLAogICAgICAgIGhyZWY6IG51bGwsCiAgICAgICAgaHJlZkxhbmc6IG51bGwsCiAgICAgICAgaG9yaXpBZHZYOiBudW1iZXIsCiAgICAgICAgaG9yaXpPcmlnaW5YOiBudW1iZXIsCiAgICAgICAgaG9yaXpPcmlnaW5ZOiBudW1iZXIsCiAgICAgICAgaWQ6IG51bGwsCiAgICAgICAgaWRlb2dyYXBoaWM6IG51bWJlciwKICAgICAgICBpbWFnZVJlbmRlcmluZzogbnVsbCwKICAgICAgICBpbml0aWFsVmlzaWJpbGl0eTogbnVsbCwKICAgICAgICBpbjogbnVsbCwKICAgICAgICBpbjI6IG51bGwsCiAgICAgICAgaW50ZXJjZXB0OiBudW1iZXIsCiAgICAgICAgazogbnVtYmVyLAogICAgICAgIGsxOiBudW1iZXIsCiAgICAgICAgazI6IG51bWJlciwKICAgICAgICBrMzogbnVtYmVyLAogICAgICAgIGs0OiBudW1iZXIsCiAgICAgICAga2VybmVsTWF0cml4OiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAga2VybmVsVW5pdExlbmd0aDogbnVsbCwKICAgICAgICBrZXlQb2ludHM6IG51bGwsCiAgICAgICAgLy8gU0VNSV9DT0xPTl9TRVBBUkFURUQKICAgICAgICBrZXlTcGxpbmVzOiBudWxsLAogICAgICAgIC8vIFNFTUlfQ09MT05fU0VQQVJBVEVECiAgICAgICAga2V5VGltZXM6IG51bGwsCiAgICAgICAgLy8gU0VNSV9DT0xPTl9TRVBBUkFURUQKICAgICAgICBrZXJuaW5nOiBudWxsLAogICAgICAgIGxhbmc6IG51bGwsCiAgICAgICAgbGVuZ3RoQWRqdXN0OiBudWxsLAogICAgICAgIGxldHRlclNwYWNpbmc6IG51bGwsCiAgICAgICAgbGlnaHRpbmdDb2xvcjogbnVsbCwKICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZTogbnVtYmVyLAogICAgICAgIGxvY2FsOiBudWxsLAogICAgICAgIG1hcmtlckVuZDogbnVsbCwKICAgICAgICBtYXJrZXJNaWQ6IG51bGwsCiAgICAgICAgbWFya2VyU3RhcnQ6IG51bGwsCiAgICAgICAgbWFya2VySGVpZ2h0OiBudWxsLAogICAgICAgIG1hcmtlclVuaXRzOiBudWxsLAogICAgICAgIG1hcmtlcldpZHRoOiBudWxsLAogICAgICAgIG1hc2s6IG51bGwsCiAgICAgICAgbWFza0NvbnRlbnRVbml0czogbnVsbCwKICAgICAgICBtYXNrVW5pdHM6IG51bGwsCiAgICAgICAgbWF0aGVtYXRpY2FsOiBudWxsLAogICAgICAgIG1heDogbnVsbCwKICAgICAgICBtZWRpYTogbnVsbCwKICAgICAgICBtZWRpYUNoYXJhY3RlckVuY29kaW5nOiBudWxsLAogICAgICAgIG1lZGlhQ29udGVudEVuY29kaW5nczogbnVsbCwKICAgICAgICBtZWRpYVNpemU6IG51bWJlciwKICAgICAgICBtZWRpYVRpbWU6IG51bGwsCiAgICAgICAgbWV0aG9kOiBudWxsLAogICAgICAgIG1pbjogbnVsbCwKICAgICAgICBtb2RlOiBudWxsLAogICAgICAgIG5hbWU6IG51bGwsCiAgICAgICAgbmF2RG93bjogbnVsbCwKICAgICAgICBuYXZEb3duTGVmdDogbnVsbCwKICAgICAgICBuYXZEb3duUmlnaHQ6IG51bGwsCiAgICAgICAgbmF2TGVmdDogbnVsbCwKICAgICAgICBuYXZOZXh0OiBudWxsLAogICAgICAgIG5hdlByZXY6IG51bGwsCiAgICAgICAgbmF2UmlnaHQ6IG51bGwsCiAgICAgICAgbmF2VXA6IG51bGwsCiAgICAgICAgbmF2VXBMZWZ0OiBudWxsLAogICAgICAgIG5hdlVwUmlnaHQ6IG51bGwsCiAgICAgICAgbnVtT2N0YXZlczogbnVsbCwKICAgICAgICBvYnNlcnZlcjogbnVsbCwKICAgICAgICBvZmZzZXQ6IG51bGwsCiAgICAgICAgb25BYm9ydDogbnVsbCwKICAgICAgICBvbkFjdGl2YXRlOiBudWxsLAogICAgICAgIG9uQWZ0ZXJQcmludDogbnVsbCwKICAgICAgICBvbkJlZm9yZVByaW50OiBudWxsLAogICAgICAgIG9uQmVnaW46IG51bGwsCiAgICAgICAgb25DYW5jZWw6IG51bGwsCiAgICAgICAgb25DYW5QbGF5OiBudWxsLAogICAgICAgIG9uQ2FuUGxheVRocm91Z2g6IG51bGwsCiAgICAgICAgb25DaGFuZ2U6IG51bGwsCiAgICAgICAgb25DbGljazogbnVsbCwKICAgICAgICBvbkNsb3NlOiBudWxsLAogICAgICAgIG9uQ29weTogbnVsbCwKICAgICAgICBvbkN1ZUNoYW5nZTogbnVsbCwKICAgICAgICBvbkN1dDogbnVsbCwKICAgICAgICBvbkRibENsaWNrOiBudWxsLAogICAgICAgIG9uRHJhZzogbnVsbCwKICAgICAgICBvbkRyYWdFbmQ6IG51bGwsCiAgICAgICAgb25EcmFnRW50ZXI6IG51bGwsCiAgICAgICAgb25EcmFnRXhpdDogbnVsbCwKICAgICAgICBvbkRyYWdMZWF2ZTogbnVsbCwKICAgICAgICBvbkRyYWdPdmVyOiBudWxsLAogICAgICAgIG9uRHJhZ1N0YXJ0OiBudWxsLAogICAgICAgIG9uRHJvcDogbnVsbCwKICAgICAgICBvbkR1cmF0aW9uQ2hhbmdlOiBudWxsLAogICAgICAgIG9uRW1wdGllZDogbnVsbCwKICAgICAgICBvbkVuZDogbnVsbCwKICAgICAgICBvbkVuZGVkOiBudWxsLAogICAgICAgIG9uRXJyb3I6IG51bGwsCiAgICAgICAgb25Gb2N1czogbnVsbCwKICAgICAgICBvbkZvY3VzSW46IG51bGwsCiAgICAgICAgb25Gb2N1c091dDogbnVsbCwKICAgICAgICBvbkhhc2hDaGFuZ2U6IG51bGwsCiAgICAgICAgb25JbnB1dDogbnVsbCwKICAgICAgICBvbkludmFsaWQ6IG51bGwsCiAgICAgICAgb25LZXlEb3duOiBudWxsLAogICAgICAgIG9uS2V5UHJlc3M6IG51bGwsCiAgICAgICAgb25LZXlVcDogbnVsbCwKICAgICAgICBvbkxvYWQ6IG51bGwsCiAgICAgICAgb25Mb2FkZWREYXRhOiBudWxsLAogICAgICAgIG9uTG9hZGVkTWV0YWRhdGE6IG51bGwsCiAgICAgICAgb25Mb2FkU3RhcnQ6IG51bGwsCiAgICAgICAgb25NZXNzYWdlOiBudWxsLAogICAgICAgIG9uTW91c2VEb3duOiBudWxsLAogICAgICAgIG9uTW91c2VFbnRlcjogbnVsbCwKICAgICAgICBvbk1vdXNlTGVhdmU6IG51bGwsCiAgICAgICAgb25Nb3VzZU1vdmU6IG51bGwsCiAgICAgICAgb25Nb3VzZU91dDogbnVsbCwKICAgICAgICBvbk1vdXNlT3ZlcjogbnVsbCwKICAgICAgICBvbk1vdXNlVXA6IG51bGwsCiAgICAgICAgb25Nb3VzZVdoZWVsOiBudWxsLAogICAgICAgIG9uT2ZmbGluZTogbnVsbCwKICAgICAgICBvbk9ubGluZTogbnVsbCwKICAgICAgICBvblBhZ2VIaWRlOiBudWxsLAogICAgICAgIG9uUGFnZVNob3c6IG51bGwsCiAgICAgICAgb25QYXN0ZTogbnVsbCwKICAgICAgICBvblBhdXNlOiBudWxsLAogICAgICAgIG9uUGxheTogbnVsbCwKICAgICAgICBvblBsYXlpbmc6IG51bGwsCiAgICAgICAgb25Qb3BTdGF0ZTogbnVsbCwKICAgICAgICBvblByb2dyZXNzOiBudWxsLAogICAgICAgIG9uUmF0ZUNoYW5nZTogbnVsbCwKICAgICAgICBvblJlcGVhdDogbnVsbCwKICAgICAgICBvblJlc2V0OiBudWxsLAogICAgICAgIG9uUmVzaXplOiBudWxsLAogICAgICAgIG9uU2Nyb2xsOiBudWxsLAogICAgICAgIG9uU2Vla2VkOiBudWxsLAogICAgICAgIG9uU2Vla2luZzogbnVsbCwKICAgICAgICBvblNlbGVjdDogbnVsbCwKICAgICAgICBvblNob3c6IG51bGwsCiAgICAgICAgb25TdGFsbGVkOiBudWxsLAogICAgICAgIG9uU3RvcmFnZTogbnVsbCwKICAgICAgICBvblN1Ym1pdDogbnVsbCwKICAgICAgICBvblN1c3BlbmQ6IG51bGwsCiAgICAgICAgb25UaW1lVXBkYXRlOiBudWxsLAogICAgICAgIG9uVG9nZ2xlOiBudWxsLAogICAgICAgIG9uVW5sb2FkOiBudWxsLAogICAgICAgIG9uVm9sdW1lQ2hhbmdlOiBudWxsLAogICAgICAgIG9uV2FpdGluZzogbnVsbCwKICAgICAgICBvblpvb206IG51bGwsCiAgICAgICAgb3BhY2l0eTogbnVsbCwKICAgICAgICBvcGVyYXRvcjogbnVsbCwKICAgICAgICBvcmRlcjogbnVsbCwKICAgICAgICBvcmllbnQ6IG51bGwsCiAgICAgICAgb3JpZW50YXRpb246IG51bGwsCiAgICAgICAgb3JpZ2luOiBudWxsLAogICAgICAgIG92ZXJmbG93OiBudWxsLAogICAgICAgIG92ZXJsYXk6IG51bGwsCiAgICAgICAgb3ZlcmxpbmVQb3NpdGlvbjogbnVtYmVyLAogICAgICAgIG92ZXJsaW5lVGhpY2tuZXNzOiBudW1iZXIsCiAgICAgICAgcGFpbnRPcmRlcjogbnVsbCwKICAgICAgICBwYW5vc2UxOiBudWxsLAogICAgICAgIHBhdGg6IG51bGwsCiAgICAgICAgcGF0aExlbmd0aDogbnVtYmVyLAogICAgICAgIHBhdHRlcm5Db250ZW50VW5pdHM6IG51bGwsCiAgICAgICAgcGF0dGVyblRyYW5zZm9ybTogbnVsbCwKICAgICAgICBwYXR0ZXJuVW5pdHM6IG51bGwsCiAgICAgICAgcGhhc2U6IG51bGwsCiAgICAgICAgcGluZzogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgcGl0Y2g6IG51bGwsCiAgICAgICAgcGxheWJhY2tPcmRlcjogbnVsbCwKICAgICAgICBwb2ludGVyRXZlbnRzOiBudWxsLAogICAgICAgIHBvaW50czogbnVsbCwKICAgICAgICBwb2ludHNBdFg6IG51bWJlciwKICAgICAgICBwb2ludHNBdFk6IG51bWJlciwKICAgICAgICBwb2ludHNBdFo6IG51bWJlciwKICAgICAgICBwcmVzZXJ2ZUFscGhhOiBudWxsLAogICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW86IG51bGwsCiAgICAgICAgcHJpbWl0aXZlVW5pdHM6IG51bGwsCiAgICAgICAgcHJvcGFnYXRlOiBudWxsLAogICAgICAgIHByb3BlcnR5OiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgcjogbnVsbCwKICAgICAgICByYWRpdXM6IG51bGwsCiAgICAgICAgcmVmZXJyZXJQb2xpY3k6IG51bGwsCiAgICAgICAgcmVmWDogbnVsbCwKICAgICAgICByZWZZOiBudWxsLAogICAgICAgIHJlbDogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIHJldjogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIHJlbmRlcmluZ0ludGVudDogbnVsbCwKICAgICAgICByZXBlYXRDb3VudDogbnVsbCwKICAgICAgICByZXBlYXREdXI6IG51bGwsCiAgICAgICAgcmVxdWlyZWRFeHRlbnNpb25zOiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgcmVxdWlyZWRGZWF0dXJlczogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIHJlcXVpcmVkRm9udHM6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICByZXF1aXJlZEZvcm1hdHM6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICByZXNvdXJjZTogbnVsbCwKICAgICAgICByZXN0YXJ0OiBudWxsLAogICAgICAgIHJlc3VsdDogbnVsbCwKICAgICAgICByb3RhdGU6IG51bGwsCiAgICAgICAgcng6IG51bGwsCiAgICAgICAgcnk6IG51bGwsCiAgICAgICAgc2NhbGU6IG51bGwsCiAgICAgICAgc2VlZDogbnVsbCwKICAgICAgICBzaGFwZVJlbmRlcmluZzogbnVsbCwKICAgICAgICBzaWRlOiBudWxsLAogICAgICAgIHNsb3BlOiBudWxsLAogICAgICAgIHNuYXBzaG90VGltZTogbnVsbCwKICAgICAgICBzcGVjdWxhckNvbnN0YW50OiBudW1iZXIsCiAgICAgICAgc3BlY3VsYXJFeHBvbmVudDogbnVtYmVyLAogICAgICAgIHNwcmVhZE1ldGhvZDogbnVsbCwKICAgICAgICBzcGFjaW5nOiBudWxsLAogICAgICAgIHN0YXJ0T2Zmc2V0OiBudWxsLAogICAgICAgIHN0ZERldmlhdGlvbjogbnVsbCwKICAgICAgICBzdGVtaDogbnVsbCwKICAgICAgICBzdGVtdjogbnVsbCwKICAgICAgICBzdGl0Y2hUaWxlczogbnVsbCwKICAgICAgICBzdG9wQ29sb3I6IG51bGwsCiAgICAgICAgc3RvcE9wYWNpdHk6IG51bGwsCiAgICAgICAgc3RyaWtldGhyb3VnaFBvc2l0aW9uOiBudW1iZXIsCiAgICAgICAgc3RyaWtldGhyb3VnaFRoaWNrbmVzczogbnVtYmVyLAogICAgICAgIHN0cmluZzogbnVsbCwKICAgICAgICBzdHJva2U6IG51bGwsCiAgICAgICAgc3Ryb2tlRGFzaEFycmF5OiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgc3Ryb2tlRGFzaE9mZnNldDogbnVsbCwKICAgICAgICBzdHJva2VMaW5lQ2FwOiBudWxsLAogICAgICAgIHN0cm9rZUxpbmVKb2luOiBudWxsLAogICAgICAgIHN0cm9rZU1pdGVyTGltaXQ6IG51bWJlciwKICAgICAgICBzdHJva2VPcGFjaXR5OiBudW1iZXIsCiAgICAgICAgc3Ryb2tlV2lkdGg6IG51bGwsCiAgICAgICAgc3R5bGU6IG51bGwsCiAgICAgICAgc3VyZmFjZVNjYWxlOiBudW1iZXIsCiAgICAgICAgc3luY0JlaGF2aW9yOiBudWxsLAogICAgICAgIHN5bmNCZWhhdmlvckRlZmF1bHQ6IG51bGwsCiAgICAgICAgc3luY01hc3RlcjogbnVsbCwKICAgICAgICBzeW5jVG9sZXJhbmNlOiBudWxsLAogICAgICAgIHN5bmNUb2xlcmFuY2VEZWZhdWx0OiBudWxsLAogICAgICAgIHN5c3RlbUxhbmd1YWdlOiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgdGFiSW5kZXg6IG51bWJlciwKICAgICAgICB0YWJsZVZhbHVlczogbnVsbCwKICAgICAgICB0YXJnZXQ6IG51bGwsCiAgICAgICAgdGFyZ2V0WDogbnVtYmVyLAogICAgICAgIHRhcmdldFk6IG51bWJlciwKICAgICAgICB0ZXh0QW5jaG9yOiBudWxsLAogICAgICAgIHRleHREZWNvcmF0aW9uOiBudWxsLAogICAgICAgIHRleHRSZW5kZXJpbmc6IG51bGwsCiAgICAgICAgdGV4dExlbmd0aDogbnVsbCwKICAgICAgICB0aW1lbGluZUJlZ2luOiBudWxsLAogICAgICAgIHRpdGxlOiBudWxsLAogICAgICAgIHRyYW5zZm9ybUJlaGF2aW9yOiBudWxsLAogICAgICAgIHR5cGU6IG51bGwsCiAgICAgICAgdHlwZU9mOiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgdG86IG51bGwsCiAgICAgICAgdHJhbnNmb3JtOiBudWxsLAogICAgICAgIHRyYW5zZm9ybU9yaWdpbjogbnVsbCwKICAgICAgICB1MTogbnVsbCwKICAgICAgICB1MjogbnVsbCwKICAgICAgICB1bmRlcmxpbmVQb3NpdGlvbjogbnVtYmVyLAogICAgICAgIHVuZGVybGluZVRoaWNrbmVzczogbnVtYmVyLAogICAgICAgIHVuaWNvZGU6IG51bGwsCiAgICAgICAgdW5pY29kZUJpZGk6IG51bGwsCiAgICAgICAgdW5pY29kZVJhbmdlOiBudWxsLAogICAgICAgIHVuaXRzUGVyRW06IG51bWJlciwKICAgICAgICB2YWx1ZXM6IG51bGwsCiAgICAgICAgdkFscGhhYmV0aWM6IG51bWJlciwKICAgICAgICB2TWF0aGVtYXRpY2FsOiBudW1iZXIsCiAgICAgICAgdmVjdG9yRWZmZWN0OiBudWxsLAogICAgICAgIHZIYW5naW5nOiBudW1iZXIsCiAgICAgICAgdklkZW9ncmFwaGljOiBudW1iZXIsCiAgICAgICAgdmVyc2lvbjogbnVsbCwKICAgICAgICB2ZXJ0QWR2WTogbnVtYmVyLAogICAgICAgIHZlcnRPcmlnaW5YOiBudW1iZXIsCiAgICAgICAgdmVydE9yaWdpblk6IG51bWJlciwKICAgICAgICB2aWV3Qm94OiBudWxsLAogICAgICAgIHZpZXdUYXJnZXQ6IG51bGwsCiAgICAgICAgdmlzaWJpbGl0eTogbnVsbCwKICAgICAgICB3aWR0aDogbnVsbCwKICAgICAgICB3aWR0aHM6IG51bGwsCiAgICAgICAgd29yZFNwYWNpbmc6IG51bGwsCiAgICAgICAgd3JpdGluZ01vZGU6IG51bGwsCiAgICAgICAgeDogbnVsbCwKICAgICAgICB4MTogbnVsbCwKICAgICAgICB4MjogbnVsbCwKICAgICAgICB4Q2hhbm5lbFNlbGVjdG9yOiBudWxsLAogICAgICAgIHhIZWlnaHQ6IG51bWJlciwKICAgICAgICB5OiBudWxsLAogICAgICAgIHkxOiBudWxsLAogICAgICAgIHkyOiBudWxsLAogICAgICAgIHlDaGFubmVsU2VsZWN0b3I6IG51bGwsCiAgICAgICAgejogbnVsbCwKICAgICAgICB6b29tQW5kUGFuOiBudWxsCiAgICAgIH0sCiAgICAgIHNwYWNlOiAic3ZnIiwKICAgICAgdHJhbnNmb3JtOiBjYXNlU2Vuc2l0aXZlVHJhbnNmb3JtCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIveGxpbmsuanMKdmFyIHhsaW5rOwp2YXIgaW5pdF94bGluayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIveGxpbmsuanMiKCkgewogICAgaW5pdF9jcmVhdGUoKTsKICAgIHhsaW5rID0gY3JlYXRlNih7CiAgICAgIHByb3BlcnRpZXM6IHsKICAgICAgICB4TGlua0FjdHVhdGU6IG51bGwsCiAgICAgICAgeExpbmtBcmNSb2xlOiBudWxsLAogICAgICAgIHhMaW5rSHJlZjogbnVsbCwKICAgICAgICB4TGlua1JvbGU6IG51bGwsCiAgICAgICAgeExpbmtTaG93OiBudWxsLAogICAgICAgIHhMaW5rVGl0bGU6IG51bGwsCiAgICAgICAgeExpbmtUeXBlOiBudWxsCiAgICAgIH0sCiAgICAgIHNwYWNlOiAieGxpbmsiLAogICAgICB0cmFuc2Zvcm0oXzQsIHByb3BlcnR5MTMpIHsKICAgICAgICByZXR1cm4gInhsaW5rOiIgKyBwcm9wZXJ0eTEzLnNsaWNlKDUpLnRvTG93ZXJDYXNlKCk7CiAgICAgIH0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi94bWxucy5qcwp2YXIgeG1sbnM7CnZhciBpbml0X3htbG5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi94bWxucy5qcyIoKSB7CiAgICBpbml0X2NyZWF0ZSgpOwogICAgaW5pdF9jYXNlX2luc2Vuc2l0aXZlX3RyYW5zZm9ybSgpOwogICAgeG1sbnMgPSBjcmVhdGU2KHsKICAgICAgYXR0cmlidXRlczogeyB4bWxuc3hsaW5rOiAieG1sbnM6eGxpbmsiIH0sCiAgICAgIHByb3BlcnRpZXM6IHsgeG1sbnNYTGluazogbnVsbCwgeG1sbnM6IG51bGwgfSwKICAgICAgc3BhY2U6ICJ4bWxucyIsCiAgICAgIHRyYW5zZm9ybTogY2FzZUluc2Vuc2l0aXZlVHJhbnNmb3JtCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIveG1sLmpzCnZhciB4bWw7CnZhciBpbml0X3htbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIveG1sLmpzIigpIHsKICAgIGluaXRfY3JlYXRlKCk7CiAgICB4bWwgPSBjcmVhdGU2KHsKICAgICAgcHJvcGVydGllczogeyB4bWxCYXNlOiBudWxsLCB4bWxMYW5nOiBudWxsLCB4bWxTcGFjZTogbnVsbCB9LAogICAgICBzcGFjZTogInhtbCIsCiAgICAgIHRyYW5zZm9ybShfNCwgcHJvcGVydHkxMykgewogICAgICAgIHJldHVybiAieG1sOiIgKyBwcm9wZXJ0eTEzLnNsaWNlKDMpLnRvTG93ZXJDYXNlKCk7CiAgICAgIH0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9oYXN0LXRvLXJlYWN0LmpzCnZhciBpbml0X2hhc3RfdG9fcmVhY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2hhc3QtdG8tcmVhY3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9maW5kLmpzCmZ1bmN0aW9uIGZpbmQyKHNjaGVtYSwgdmFsdWUyKSB7CiAgY29uc3Qgbm9ybWFsID0gbm9ybWFsaXplMyh2YWx1ZTIpOwogIGxldCBwcm9wZXJ0eTEzID0gdmFsdWUyOwogIGxldCBUeXBlID0gSW5mbzsKICBpZiAobm9ybWFsIGluIHNjaGVtYS5ub3JtYWwpIHsKICAgIHJldHVybiBzY2hlbWEucHJvcGVydHlbc2NoZW1hLm5vcm1hbFtub3JtYWxdXTsKICB9CiAgaWYgKG5vcm1hbC5sZW5ndGggPiA0ICYmIG5vcm1hbC5zbGljZSgwLCA0KSA9PT0gImRhdGEiICYmIHZhbGlkLnRlc3QodmFsdWUyKSkgewogICAgaWYgKHZhbHVlMi5jaGFyQXQoNCkgPT09ICItIikgewogICAgICBjb25zdCByZXN0ID0gdmFsdWUyLnNsaWNlKDUpLnJlcGxhY2UoZGFzaCwgY2FtZWxjYXNlKTsKICAgICAgcHJvcGVydHkxMyA9ICJkYXRhIiArIHJlc3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByZXN0LnNsaWNlKDEpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgcmVzdCA9IHZhbHVlMi5zbGljZSg0KTsKICAgICAgaWYgKCFkYXNoLnRlc3QocmVzdCkpIHsKICAgICAgICBsZXQgZGFzaGVzID0gcmVzdC5yZXBsYWNlKGNhcCwga2ViYWIpOwogICAgICAgIGlmIChkYXNoZXMuY2hhckF0KDApICE9PSAiLSIpIHsKICAgICAgICAgIGRhc2hlcyA9ICItIiArIGRhc2hlczsKICAgICAgICB9CiAgICAgICAgdmFsdWUyID0gImRhdGEiICsgZGFzaGVzOwogICAgICB9CiAgICB9CiAgICBUeXBlID0gRGVmaW5lZEluZm87CiAgfQogIHJldHVybiBuZXcgVHlwZShwcm9wZXJ0eTEzLCB2YWx1ZTIpOwp9CmZ1bmN0aW9uIGtlYmFiKCQwKSB7CiAgcmV0dXJuICItIiArICQwLnRvTG93ZXJDYXNlKCk7Cn0KZnVuY3Rpb24gY2FtZWxjYXNlKCQwKSB7CiAgcmV0dXJuICQwLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpOwp9CnZhciBjYXAsIGRhc2gsIHZhbGlkOwp2YXIgaW5pdF9maW5kMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvZmluZC5qcyIoKSB7CiAgICBpbml0X2RlZmluZWRfaW5mbygpOwogICAgaW5pdF9pbmZvKCk7CiAgICBpbml0X25vcm1hbGl6ZSgpOwogICAgY2FwID0gL1tBLVpdL2c7CiAgICBkYXNoID0gLy1bYS16XS9nOwogICAgdmFsaWQgPSAvXmRhdGFbLVx3LjpdKyQvaTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9pbmRleC5qcwp2YXIgaHRtbDQsIHN2ZzI7CnZhciBpbml0X3Byb3BlcnR5X2luZm9ybWF0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWVyZ2UzKCk7CiAgICBpbml0X2FyaWEoKTsKICAgIGluaXRfaHRtbDkoKTsKICAgIGluaXRfc3ZnKCk7CiAgICBpbml0X3hsaW5rKCk7CiAgICBpbml0X3htbG5zKCk7CiAgICBpbml0X3htbCgpOwogICAgaW5pdF9oYXN0X3RvX3JlYWN0KCk7CiAgICBpbml0X2ZpbmQyKCk7CiAgICBpbml0X25vcm1hbGl6ZSgpOwogICAgaHRtbDQgPSBtZXJnZTMoW2FyaWEyLCBodG1sMywgeGxpbmssIHhtbG5zLCB4bWxdLCAiaHRtbCIpOwogICAgc3ZnMiA9IG1lcmdlMyhbYXJpYTIsIHN2ZywgeGxpbmssIHhtbG5zLCB4bWxdLCAic3ZnIik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvY29yZS5qcwpmdW5jdGlvbiBjb3JlKHZhbHVlMiwgb3B0aW9ucykgewogIHZhbHVlMiA9IHZhbHVlMi5yZXBsYWNlKAogICAgb3B0aW9ucy5zdWJzZXQgPyBjaGFyYWN0ZXJzVG9FeHByZXNzaW9uQ2FjaGVkKG9wdGlvbnMuc3Vic2V0KSA6IGRlZmF1bHRTdWJzZXRSZWdleCwKICAgIGJhc2ljCiAgKTsKICBpZiAob3B0aW9ucy5zdWJzZXQgfHwgb3B0aW9ucy5lc2NhcGVPbmx5KSB7CiAgICByZXR1cm4gdmFsdWUyOwogIH0KICByZXR1cm4gdmFsdWUyLnJlcGxhY2Uoc3Vycm9nYXRlUGFpcnNSZWdleCwgc3Vycm9nYXRlKS5yZXBsYWNlKGNvbnRyb2xDaGFyYWN0ZXJzUmVnZXgsIGJhc2ljKTsKICBmdW5jdGlvbiBzdXJyb2dhdGUocGFpciwgaW5kZXgyLCBhbGwzKSB7CiAgICByZXR1cm4gb3B0aW9ucy5mb3JtYXQoCiAgICAgIChwYWlyLmNoYXJDb2RlQXQoMCkgLSA1NTI5NikgKiAxMDI0ICsgcGFpci5jaGFyQ29kZUF0KDEpIC0gNTYzMjAgKyA2NTUzNiwKICAgICAgYWxsMy5jaGFyQ29kZUF0KGluZGV4MiArIDIpLAogICAgICBvcHRpb25zCiAgICApOwogIH0KICBmdW5jdGlvbiBiYXNpYyhjaGFyYWN0ZXIsIGluZGV4MiwgYWxsMykgewogICAgcmV0dXJuIG9wdGlvbnMuZm9ybWF0KAogICAgICBjaGFyYWN0ZXIuY2hhckNvZGVBdCgwKSwKICAgICAgYWxsMy5jaGFyQ29kZUF0KGluZGV4MiArIDEpLAogICAgICBvcHRpb25zCiAgICApOwogIH0KfQpmdW5jdGlvbiBjaGFyYWN0ZXJzVG9FeHByZXNzaW9uQ2FjaGVkKHN1YnNldCkgewogIGxldCBjYWNoZWQgPSBzdWJzZXRUb1JlZ2V4Q2FjaGUuZ2V0KHN1YnNldCk7CiAgaWYgKCFjYWNoZWQpIHsKICAgIGNhY2hlZCA9IGNoYXJhY3RlcnNUb0V4cHJlc3Npb24oc3Vic2V0KTsKICAgIHN1YnNldFRvUmVnZXhDYWNoZS5zZXQoc3Vic2V0LCBjYWNoZWQpOwogIH0KICByZXR1cm4gY2FjaGVkOwp9CmZ1bmN0aW9uIGNoYXJhY3RlcnNUb0V4cHJlc3Npb24oc3Vic2V0KSB7CiAgY29uc3QgZ3JvdXBzID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHN1YnNldC5sZW5ndGgpIHsKICAgIGdyb3Vwcy5wdXNoKHN1YnNldFtpbmRleDJdLnJlcGxhY2UocmVnZXhFc2NhcGVSZWdleCwgIlxcJCYiKSk7CiAgfQogIHJldHVybiBuZXcgUmVnRXhwKCIoPzoiICsgZ3JvdXBzLmpvaW4oInwiKSArICIpIiwgImciKTsKfQp2YXIgZGVmYXVsdFN1YnNldFJlZ2V4LCBzdXJyb2dhdGVQYWlyc1JlZ2V4LCBjb250cm9sQ2hhcmFjdGVyc1JlZ2V4LCByZWdleEVzY2FwZVJlZ2V4LCBzdWJzZXRUb1JlZ2V4Q2FjaGU7CnZhciBpbml0X2NvcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvY29yZS5qcyIoKSB7CiAgICBkZWZhdWx0U3Vic2V0UmVnZXggPSAvWyImJzw+YF0vZzsKICAgIHN1cnJvZ2F0ZVBhaXJzUmVnZXggPSAvW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2c7CiAgICBjb250cm9sQ2hhcmFjdGVyc1JlZ2V4ID0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXgsIHVuaWNvcm4vbm8taGV4LWVzY2FwZQogICAgL1tceDAxLVx0XHZcZlx4MEUtXHgxRlx4N0ZceDgxXHg4RFx4OEZceDkwXHg5RFx4QTAtXHVGRkZGXS9nOwogICAgcmVnZXhFc2NhcGVSZWdleCA9IC9bfFxce30oKVtcXV4kKyo/Ll0vZzsKICAgIHN1YnNldFRvUmVnZXhDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvdG8taGV4YWRlY2ltYWwuanMKZnVuY3Rpb24gdG9IZXhhZGVjaW1hbChjb2RlNCwgbmV4dDIsIG9taXQpIHsKICBjb25zdCB2YWx1ZTIgPSAiJiN4IiArIGNvZGU0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOwogIHJldHVybiBvbWl0ICYmIG5leHQyICYmICFoZXhhZGVjaW1hbFJlZ2V4LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShuZXh0MikpID8gdmFsdWUyIDogdmFsdWUyICsgIjsiOwp9CnZhciBoZXhhZGVjaW1hbFJlZ2V4Owp2YXIgaW5pdF90b19oZXhhZGVjaW1hbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL3RvLWhleGFkZWNpbWFsLmpzIigpIHsKICAgIGhleGFkZWNpbWFsUmVnZXggPSAvW1xkQS1GYS1mXS87CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvdXRpbC90by1kZWNpbWFsLmpzCmZ1bmN0aW9uIHRvRGVjaW1hbChjb2RlNCwgbmV4dDIsIG9taXQpIHsKICBjb25zdCB2YWx1ZTIgPSAiJiMiICsgU3RyaW5nKGNvZGU0KTsKICByZXR1cm4gb21pdCAmJiBuZXh0MiAmJiAhZGVjaW1hbFJlZ2V4LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShuZXh0MikpID8gdmFsdWUyIDogdmFsdWUyICsgIjsiOwp9CnZhciBkZWNpbWFsUmVnZXg7CnZhciBpbml0X3RvX2RlY2ltYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvdXRpbC90by1kZWNpbWFsLmpzIigpIHsKICAgIGRlY2ltYWxSZWdleCA9IC9cZC87CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9jaGFyYWN0ZXItZW50aXRpZXMtbGVnYWN5QDMuMC4wL25vZGVfbW9kdWxlcy9jaGFyYWN0ZXItZW50aXRpZXMtbGVnYWN5L2luZGV4LmpzCnZhciBjaGFyYWN0ZXJFbnRpdGllc0xlZ2FjeTsKdmFyIGluaXRfY2hhcmFjdGVyX2VudGl0aWVzX2xlZ2FjeSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJhY3Rlci1lbnRpdGllcy1sZWdhY3lAMy4wLjAvbm9kZV9tb2R1bGVzL2NoYXJhY3Rlci1lbnRpdGllcy1sZWdhY3kvaW5kZXguanMiKCkgewogICAgY2hhcmFjdGVyRW50aXRpZXNMZWdhY3kgPSBbCiAgICAgICJBRWxpZyIsCiAgICAgICJBTVAiLAogICAgICAiQWFjdXRlIiwKICAgICAgIkFjaXJjIiwKICAgICAgIkFncmF2ZSIsCiAgICAgICJBcmluZyIsCiAgICAgICJBdGlsZGUiLAogICAgICAiQXVtbCIsCiAgICAgICJDT1BZIiwKICAgICAgIkNjZWRpbCIsCiAgICAgICJFVEgiLAogICAgICAiRWFjdXRlIiwKICAgICAgIkVjaXJjIiwKICAgICAgIkVncmF2ZSIsCiAgICAgICJFdW1sIiwKICAgICAgIkdUIiwKICAgICAgIklhY3V0ZSIsCiAgICAgICJJY2lyYyIsCiAgICAgICJJZ3JhdmUiLAogICAgICAiSXVtbCIsCiAgICAgICJMVCIsCiAgICAgICJOdGlsZGUiLAogICAgICAiT2FjdXRlIiwKICAgICAgIk9jaXJjIiwKICAgICAgIk9ncmF2ZSIsCiAgICAgICJPc2xhc2giLAogICAgICAiT3RpbGRlIiwKICAgICAgIk91bWwiLAogICAgICAiUVVPVCIsCiAgICAgICJSRUciLAogICAgICAiVEhPUk4iLAogICAgICAiVWFjdXRlIiwKICAgICAgIlVjaXJjIiwKICAgICAgIlVncmF2ZSIsCiAgICAgICJVdW1sIiwKICAgICAgIllhY3V0ZSIsCiAgICAgICJhYWN1dGUiLAogICAgICAiYWNpcmMiLAogICAgICAiYWN1dGUiLAogICAgICAiYWVsaWciLAogICAgICAiYWdyYXZlIiwKICAgICAgImFtcCIsCiAgICAgICJhcmluZyIsCiAgICAgICJhdGlsZGUiLAogICAgICAiYXVtbCIsCiAgICAgICJicnZiYXIiLAogICAgICAiY2NlZGlsIiwKICAgICAgImNlZGlsIiwKICAgICAgImNlbnQiLAogICAgICAiY29weSIsCiAgICAgICJjdXJyZW4iLAogICAgICAiZGVnIiwKICAgICAgImRpdmlkZSIsCiAgICAgICJlYWN1dGUiLAogICAgICAiZWNpcmMiLAogICAgICAiZWdyYXZlIiwKICAgICAgImV0aCIsCiAgICAgICJldW1sIiwKICAgICAgImZyYWMxMiIsCiAgICAgICJmcmFjMTQiLAogICAgICAiZnJhYzM0IiwKICAgICAgImd0IiwKICAgICAgImlhY3V0ZSIsCiAgICAgICJpY2lyYyIsCiAgICAgICJpZXhjbCIsCiAgICAgICJpZ3JhdmUiLAogICAgICAiaXF1ZXN0IiwKICAgICAgIml1bWwiLAogICAgICAibGFxdW8iLAogICAgICAibHQiLAogICAgICAibWFjciIsCiAgICAgICJtaWNybyIsCiAgICAgICJtaWRkb3QiLAogICAgICAibmJzcCIsCiAgICAgICJub3QiLAogICAgICAibnRpbGRlIiwKICAgICAgIm9hY3V0ZSIsCiAgICAgICJvY2lyYyIsCiAgICAgICJvZ3JhdmUiLAogICAgICAib3JkZiIsCiAgICAgICJvcmRtIiwKICAgICAgIm9zbGFzaCIsCiAgICAgICJvdGlsZGUiLAogICAgICAib3VtbCIsCiAgICAgICJwYXJhIiwKICAgICAgInBsdXNtbiIsCiAgICAgICJwb3VuZCIsCiAgICAgICJxdW90IiwKICAgICAgInJhcXVvIiwKICAgICAgInJlZyIsCiAgICAgICJzZWN0IiwKICAgICAgInNoeSIsCiAgICAgICJzdXAxIiwKICAgICAgInN1cDIiLAogICAgICAic3VwMyIsCiAgICAgICJzemxpZyIsCiAgICAgICJ0aG9ybiIsCiAgICAgICJ0aW1lcyIsCiAgICAgICJ1YWN1dGUiLAogICAgICAidWNpcmMiLAogICAgICAidWdyYXZlIiwKICAgICAgInVtbCIsCiAgICAgICJ1dW1sIiwKICAgICAgInlhY3V0ZSIsCiAgICAgICJ5ZW4iLAogICAgICAieXVtbCIKICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9jaGFyYWN0ZXItZW50aXRpZXMtaHRtbDRAMi4xLjAvbm9kZV9tb2R1bGVzL2NoYXJhY3Rlci1lbnRpdGllcy1odG1sNC9pbmRleC5qcwp2YXIgY2hhcmFjdGVyRW50aXRpZXNIdG1sNDsKdmFyIGluaXRfY2hhcmFjdGVyX2VudGl0aWVzX2h0bWw0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vY2hhcmFjdGVyLWVudGl0aWVzLWh0bWw0QDIuMS4wL25vZGVfbW9kdWxlcy9jaGFyYWN0ZXItZW50aXRpZXMtaHRtbDQvaW5kZXguanMiKCkgewogICAgY2hhcmFjdGVyRW50aXRpZXNIdG1sNCA9IHsKICAgICAgbmJzcDogIlx4QTAiLAogICAgICBpZXhjbDogIlx4QTEiLAogICAgICBjZW50OiAiXHhBMiIsCiAgICAgIHBvdW5kOiAiXHhBMyIsCiAgICAgIGN1cnJlbjogIlx4QTQiLAogICAgICB5ZW46ICJceEE1IiwKICAgICAgYnJ2YmFyOiAiXHhBNiIsCiAgICAgIHNlY3Q6ICJceEE3IiwKICAgICAgdW1sOiAiXHhBOCIsCiAgICAgIGNvcHk6ICJceEE5IiwKICAgICAgb3JkZjogIlx4QUEiLAogICAgICBsYXF1bzogIlx4QUIiLAogICAgICBub3Q6ICJceEFDIiwKICAgICAgc2h5OiAiXHhBRCIsCiAgICAgIHJlZzogIlx4QUUiLAogICAgICBtYWNyOiAiXHhBRiIsCiAgICAgIGRlZzogIlx4QjAiLAogICAgICBwbHVzbW46ICJceEIxIiwKICAgICAgc3VwMjogIlx4QjIiLAogICAgICBzdXAzOiAiXHhCMyIsCiAgICAgIGFjdXRlOiAiXHhCNCIsCiAgICAgIG1pY3JvOiAiXHhCNSIsCiAgICAgIHBhcmE6ICJceEI2IiwKICAgICAgbWlkZG90OiAiXHhCNyIsCiAgICAgIGNlZGlsOiAiXHhCOCIsCiAgICAgIHN1cDE6ICJceEI5IiwKICAgICAgb3JkbTogIlx4QkEiLAogICAgICByYXF1bzogIlx4QkIiLAogICAgICBmcmFjMTQ6ICJceEJDIiwKICAgICAgZnJhYzEyOiAiXHhCRCIsCiAgICAgIGZyYWMzNDogIlx4QkUiLAogICAgICBpcXVlc3Q6ICJceEJGIiwKICAgICAgQWdyYXZlOiAiXHhDMCIsCiAgICAgIEFhY3V0ZTogIlx4QzEiLAogICAgICBBY2lyYzogIlx4QzIiLAogICAgICBBdGlsZGU6ICJceEMzIiwKICAgICAgQXVtbDogIlx4QzQiLAogICAgICBBcmluZzogIlx4QzUiLAogICAgICBBRWxpZzogIlx4QzYiLAogICAgICBDY2VkaWw6ICJceEM3IiwKICAgICAgRWdyYXZlOiAiXHhDOCIsCiAgICAgIEVhY3V0ZTogIlx4QzkiLAogICAgICBFY2lyYzogIlx4Q0EiLAogICAgICBFdW1sOiAiXHhDQiIsCiAgICAgIElncmF2ZTogIlx4Q0MiLAogICAgICBJYWN1dGU6ICJceENEIiwKICAgICAgSWNpcmM6ICJceENFIiwKICAgICAgSXVtbDogIlx4Q0YiLAogICAgICBFVEg6ICJceEQwIiwKICAgICAgTnRpbGRlOiAiXHhEMSIsCiAgICAgIE9ncmF2ZTogIlx4RDIiLAogICAgICBPYWN1dGU6ICJceEQzIiwKICAgICAgT2NpcmM6ICJceEQ0IiwKICAgICAgT3RpbGRlOiAiXHhENSIsCiAgICAgIE91bWw6ICJceEQ2IiwKICAgICAgdGltZXM6ICJceEQ3IiwKICAgICAgT3NsYXNoOiAiXHhEOCIsCiAgICAgIFVncmF2ZTogIlx4RDkiLAogICAgICBVYWN1dGU6ICJceERBIiwKICAgICAgVWNpcmM6ICJceERCIiwKICAgICAgVXVtbDogIlx4REMiLAogICAgICBZYWN1dGU6ICJceEREIiwKICAgICAgVEhPUk46ICJceERFIiwKICAgICAgc3psaWc6ICJceERGIiwKICAgICAgYWdyYXZlOiAiXHhFMCIsCiAgICAgIGFhY3V0ZTogIlx4RTEiLAogICAgICBhY2lyYzogIlx4RTIiLAogICAgICBhdGlsZGU6ICJceEUzIiwKICAgICAgYXVtbDogIlx4RTQiLAogICAgICBhcmluZzogIlx4RTUiLAogICAgICBhZWxpZzogIlx4RTYiLAogICAgICBjY2VkaWw6ICJceEU3IiwKICAgICAgZWdyYXZlOiAiXHhFOCIsCiAgICAgIGVhY3V0ZTogIlx4RTkiLAogICAgICBlY2lyYzogIlx4RUEiLAogICAgICBldW1sOiAiXHhFQiIsCiAgICAgIGlncmF2ZTogIlx4RUMiLAogICAgICBpYWN1dGU6ICJceEVEIiwKICAgICAgaWNpcmM6ICJceEVFIiwKICAgICAgaXVtbDogIlx4RUYiLAogICAgICBldGg6ICJceEYwIiwKICAgICAgbnRpbGRlOiAiXHhGMSIsCiAgICAgIG9ncmF2ZTogIlx4RjIiLAogICAgICBvYWN1dGU6ICJceEYzIiwKICAgICAgb2NpcmM6ICJceEY0IiwKICAgICAgb3RpbGRlOiAiXHhGNSIsCiAgICAgIG91bWw6ICJceEY2IiwKICAgICAgZGl2aWRlOiAiXHhGNyIsCiAgICAgIG9zbGFzaDogIlx4RjgiLAogICAgICB1Z3JhdmU6ICJceEY5IiwKICAgICAgdWFjdXRlOiAiXHhGQSIsCiAgICAgIHVjaXJjOiAiXHhGQiIsCiAgICAgIHV1bWw6ICJceEZDIiwKICAgICAgeWFjdXRlOiAiXHhGRCIsCiAgICAgIHRob3JuOiAiXHhGRSIsCiAgICAgIHl1bWw6ICJceEZGIiwKICAgICAgZm5vZjogIlx1MDE5MiIsCiAgICAgIEFscGhhOiAiXHUwMzkxIiwKICAgICAgQmV0YTogIlx1MDM5MiIsCiAgICAgIEdhbW1hOiAiXHUwMzkzIiwKICAgICAgRGVsdGE6ICJcdTAzOTQiLAogICAgICBFcHNpbG9uOiAiXHUwMzk1IiwKICAgICAgWmV0YTogIlx1MDM5NiIsCiAgICAgIEV0YTogIlx1MDM5NyIsCiAgICAgIFRoZXRhOiAiXHUwMzk4IiwKICAgICAgSW90YTogIlx1MDM5OSIsCiAgICAgIEthcHBhOiAiXHUwMzlBIiwKICAgICAgTGFtYmRhOiAiXHUwMzlCIiwKICAgICAgTXU6ICJcdTAzOUMiLAogICAgICBOdTogIlx1MDM5RCIsCiAgICAgIFhpOiAiXHUwMzlFIiwKICAgICAgT21pY3JvbjogIlx1MDM5RiIsCiAgICAgIFBpOiAiXHUwM0EwIiwKICAgICAgUmhvOiAiXHUwM0ExIiwKICAgICAgU2lnbWE6ICJcdTAzQTMiLAogICAgICBUYXU6ICJcdTAzQTQiLAogICAgICBVcHNpbG9uOiAiXHUwM0E1IiwKICAgICAgUGhpOiAiXHUwM0E2IiwKICAgICAgQ2hpOiAiXHUwM0E3IiwKICAgICAgUHNpOiAiXHUwM0E4IiwKICAgICAgT21lZ2E6ICJcdTAzQTkiLAogICAgICBhbHBoYTogIlx1MDNCMSIsCiAgICAgIGJldGE6ICJcdTAzQjIiLAogICAgICBnYW1tYTogIlx1MDNCMyIsCiAgICAgIGRlbHRhOiAiXHUwM0I0IiwKICAgICAgZXBzaWxvbjogIlx1MDNCNSIsCiAgICAgIHpldGE6ICJcdTAzQjYiLAogICAgICBldGE6ICJcdTAzQjciLAogICAgICB0aGV0YTogIlx1MDNCOCIsCiAgICAgIGlvdGE6ICJcdTAzQjkiLAogICAgICBrYXBwYTogIlx1MDNCQSIsCiAgICAgIGxhbWJkYTogIlx1MDNCQiIsCiAgICAgIG11OiAiXHUwM0JDIiwKICAgICAgbnU6ICJcdTAzQkQiLAogICAgICB4aTogIlx1MDNCRSIsCiAgICAgIG9taWNyb246ICJcdTAzQkYiLAogICAgICBwaTogIlx1MDNDMCIsCiAgICAgIHJobzogIlx1MDNDMSIsCiAgICAgIHNpZ21hZjogIlx1MDNDMiIsCiAgICAgIHNpZ21hOiAiXHUwM0MzIiwKICAgICAgdGF1OiAiXHUwM0M0IiwKICAgICAgdXBzaWxvbjogIlx1MDNDNSIsCiAgICAgIHBoaTogIlx1MDNDNiIsCiAgICAgIGNoaTogIlx1MDNDNyIsCiAgICAgIHBzaTogIlx1MDNDOCIsCiAgICAgIG9tZWdhOiAiXHUwM0M5IiwKICAgICAgdGhldGFzeW06ICJcdTAzRDEiLAogICAgICB1cHNpaDogIlx1MDNEMiIsCiAgICAgIHBpdjogIlx1MDNENiIsCiAgICAgIGJ1bGw6ICJcdTIwMjIiLAogICAgICBoZWxsaXA6ICJcdTIwMjYiLAogICAgICBwcmltZTogIlx1MjAzMiIsCiAgICAgIFByaW1lOiAiXHUyMDMzIiwKICAgICAgb2xpbmU6ICJcdTIwM0UiLAogICAgICBmcmFzbDogIlx1MjA0NCIsCiAgICAgIHdlaWVycDogIlx1MjExOCIsCiAgICAgIGltYWdlOiAiXHUyMTExIiwKICAgICAgcmVhbDogIlx1MjExQyIsCiAgICAgIHRyYWRlOiAiXHUyMTIyIiwKICAgICAgYWxlZnN5bTogIlx1MjEzNSIsCiAgICAgIGxhcnI6ICJcdTIxOTAiLAogICAgICB1YXJyOiAiXHUyMTkxIiwKICAgICAgcmFycjogIlx1MjE5MiIsCiAgICAgIGRhcnI6ICJcdTIxOTMiLAogICAgICBoYXJyOiAiXHUyMTk0IiwKICAgICAgY3JhcnI6ICJcdTIxQjUiLAogICAgICBsQXJyOiAiXHUyMUQwIiwKICAgICAgdUFycjogIlx1MjFEMSIsCiAgICAgIHJBcnI6ICJcdTIxRDIiLAogICAgICBkQXJyOiAiXHUyMUQzIiwKICAgICAgaEFycjogIlx1MjFENCIsCiAgICAgIGZvcmFsbDogIlx1MjIwMCIsCiAgICAgIHBhcnQ6ICJcdTIyMDIiLAogICAgICBleGlzdDogIlx1MjIwMyIsCiAgICAgIGVtcHR5OiAiXHUyMjA1IiwKICAgICAgbmFibGE6ICJcdTIyMDciLAogICAgICBpc2luOiAiXHUyMjA4IiwKICAgICAgbm90aW46ICJcdTIyMDkiLAogICAgICBuaTogIlx1MjIwQiIsCiAgICAgIHByb2Q6ICJcdTIyMEYiLAogICAgICBzdW06ICJcdTIyMTEiLAogICAgICBtaW51czogIlx1MjIxMiIsCiAgICAgIGxvd2FzdDogIlx1MjIxNyIsCiAgICAgIHJhZGljOiAiXHUyMjFBIiwKICAgICAgcHJvcDogIlx1MjIxRCIsCiAgICAgIGluZmluOiAiXHUyMjFFIiwKICAgICAgYW5nOiAiXHUyMjIwIiwKICAgICAgYW5kOiAiXHUyMjI3IiwKICAgICAgb3I6ICJcdTIyMjgiLAogICAgICBjYXA6ICJcdTIyMjkiLAogICAgICBjdXA6ICJcdTIyMkEiLAogICAgICBpbnQ6ICJcdTIyMkIiLAogICAgICB0aGVyZTQ6ICJcdTIyMzQiLAogICAgICBzaW06ICJcdTIyM0MiLAogICAgICBjb25nOiAiXHUyMjQ1IiwKICAgICAgYXN5bXA6ICJcdTIyNDgiLAogICAgICBuZTogIlx1MjI2MCIsCiAgICAgIGVxdWl2OiAiXHUyMjYxIiwKICAgICAgbGU6ICJcdTIyNjQiLAogICAgICBnZTogIlx1MjI2NSIsCiAgICAgIHN1YjogIlx1MjI4MiIsCiAgICAgIHN1cDogIlx1MjI4MyIsCiAgICAgIG5zdWI6ICJcdTIyODQiLAogICAgICBzdWJlOiAiXHUyMjg2IiwKICAgICAgc3VwZTogIlx1MjI4NyIsCiAgICAgIG9wbHVzOiAiXHUyMjk1IiwKICAgICAgb3RpbWVzOiAiXHUyMjk3IiwKICAgICAgcGVycDogIlx1MjJBNSIsCiAgICAgIHNkb3Q6ICJcdTIyQzUiLAogICAgICBsY2VpbDogIlx1MjMwOCIsCiAgICAgIHJjZWlsOiAiXHUyMzA5IiwKICAgICAgbGZsb29yOiAiXHUyMzBBIiwKICAgICAgcmZsb29yOiAiXHUyMzBCIiwKICAgICAgbGFuZzogIlx1MjMyOSIsCiAgICAgIHJhbmc6ICJcdTIzMkEiLAogICAgICBsb3o6ICJcdTI1Q0EiLAogICAgICBzcGFkZXM6ICJcdTI2NjAiLAogICAgICBjbHViczogIlx1MjY2MyIsCiAgICAgIGhlYXJ0czogIlx1MjY2NSIsCiAgICAgIGRpYW1zOiAiXHUyNjY2IiwKICAgICAgcXVvdDogJyInLAogICAgICBhbXA6ICImIiwKICAgICAgbHQ6ICI8IiwKICAgICAgZ3Q6ICI+IiwKICAgICAgT0VsaWc6ICJcdTAxNTIiLAogICAgICBvZWxpZzogIlx1MDE1MyIsCiAgICAgIFNjYXJvbjogIlx1MDE2MCIsCiAgICAgIHNjYXJvbjogIlx1MDE2MSIsCiAgICAgIFl1bWw6ICJcdTAxNzgiLAogICAgICBjaXJjOiAiXHUwMkM2IiwKICAgICAgdGlsZGU6ICJcdTAyREMiLAogICAgICBlbnNwOiAiXHUyMDAyIiwKICAgICAgZW1zcDogIlx1MjAwMyIsCiAgICAgIHRoaW5zcDogIlx1MjAwOSIsCiAgICAgIHp3bmo6ICJcdTIwMEMiLAogICAgICB6d2o6ICJcdTIwMEQiLAogICAgICBscm06ICJcdTIwMEUiLAogICAgICBybG06ICJcdTIwMEYiLAogICAgICBuZGFzaDogIlx1MjAxMyIsCiAgICAgIG1kYXNoOiAiXHUyMDE0IiwKICAgICAgbHNxdW86ICJcdTIwMTgiLAogICAgICByc3F1bzogIlx1MjAxOSIsCiAgICAgIHNicXVvOiAiXHUyMDFBIiwKICAgICAgbGRxdW86ICJcdTIwMUMiLAogICAgICByZHF1bzogIlx1MjAxRCIsCiAgICAgIGJkcXVvOiAiXHUyMDFFIiwKICAgICAgZGFnZ2VyOiAiXHUyMDIwIiwKICAgICAgRGFnZ2VyOiAiXHUyMDIxIiwKICAgICAgcGVybWlsOiAiXHUyMDMwIiwKICAgICAgbHNhcXVvOiAiXHUyMDM5IiwKICAgICAgcnNhcXVvOiAiXHUyMDNBIiwKICAgICAgZXVybzogIlx1MjBBQyIKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvY29uc3RhbnQvZGFuZ2Vyb3VzLmpzCnZhciBkYW5nZXJvdXM7CnZhciBpbml0X2Rhbmdlcm91cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi9jb25zdGFudC9kYW5nZXJvdXMuanMiKCkgewogICAgZGFuZ2Vyb3VzID0gWwogICAgICAiY2VudCIsCiAgICAgICJjb3B5IiwKICAgICAgImRpdmlkZSIsCiAgICAgICJndCIsCiAgICAgICJsdCIsCiAgICAgICJub3QiLAogICAgICAicGFyYSIsCiAgICAgICJ0aW1lcyIKICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvdXRpbC90by1uYW1lZC5qcwpmdW5jdGlvbiB0b05hbWVkKGNvZGU0LCBuZXh0Miwgb21pdCwgYXR0cmlidXRlKSB7CiAgY29uc3QgY2hhcmFjdGVyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlNCk7CiAgaWYgKG93bjkuY2FsbChjaGFyYWN0ZXJzLCBjaGFyYWN0ZXIpKSB7CiAgICBjb25zdCBuYW1lID0gY2hhcmFjdGVyc1tjaGFyYWN0ZXJdOwogICAgY29uc3QgdmFsdWUyID0gIiYiICsgbmFtZTsKICAgIGlmIChvbWl0ICYmIGNoYXJhY3RlckVudGl0aWVzTGVnYWN5LmluY2x1ZGVzKG5hbWUpICYmICFkYW5nZXJvdXMuaW5jbHVkZXMobmFtZSkgJiYgKCFhdHRyaWJ1dGUgfHwgbmV4dDIgJiYgbmV4dDIgIT09IDYxICYmIG5vdEFscGhhbnVtZXJpY1JlZ2V4LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShuZXh0MikpKSkgewogICAgICByZXR1cm4gdmFsdWUyOwogICAgfQogICAgcmV0dXJuIHZhbHVlMiArICI7IjsKICB9CiAgcmV0dXJuICIiOwp9CnZhciBvd245LCBjaGFyYWN0ZXJzLCBrZXksIG5vdEFscGhhbnVtZXJpY1JlZ2V4Owp2YXIgaW5pdF90b19uYW1lZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL3RvLW5hbWVkLmpzIigpIHsKICAgIGluaXRfY2hhcmFjdGVyX2VudGl0aWVzX2xlZ2FjeSgpOwogICAgaW5pdF9jaGFyYWN0ZXJfZW50aXRpZXNfaHRtbDQoKTsKICAgIGluaXRfZGFuZ2Vyb3VzKCk7CiAgICBvd245ID0ge30uaGFzT3duUHJvcGVydHk7CiAgICBjaGFyYWN0ZXJzID0ge307CiAgICBmb3IgKGtleSBpbiBjaGFyYWN0ZXJFbnRpdGllc0h0bWw0KSB7CiAgICAgIGlmIChvd245LmNhbGwoY2hhcmFjdGVyRW50aXRpZXNIdG1sNCwga2V5KSkgewogICAgICAgIGNoYXJhY3RlcnNbY2hhcmFjdGVyRW50aXRpZXNIdG1sNFtrZXldXSA9IGtleTsKICAgICAgfQogICAgfQogICAgbm90QWxwaGFudW1lcmljUmVnZXggPSAvW15cZEEtWmEtel0vOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvZm9ybWF0LXNtYXJ0LmpzCmZ1bmN0aW9uIGZvcm1hdFNtYXJ0KGNvZGU0LCBuZXh0Miwgb3B0aW9ucykgewogIGxldCBudW1lcmljID0gdG9IZXhhZGVjaW1hbChjb2RlNCwgbmV4dDIsIG9wdGlvbnMub21pdE9wdGlvbmFsU2VtaWNvbG9ucyk7CiAgbGV0IG5hbWVkOwogIGlmIChvcHRpb25zLnVzZU5hbWVkUmVmZXJlbmNlcyB8fCBvcHRpb25zLnVzZVNob3J0ZXN0UmVmZXJlbmNlcykgewogICAgbmFtZWQgPSB0b05hbWVkKAogICAgICBjb2RlNCwKICAgICAgbmV4dDIsCiAgICAgIG9wdGlvbnMub21pdE9wdGlvbmFsU2VtaWNvbG9ucywKICAgICAgb3B0aW9ucy5hdHRyaWJ1dGUKICAgICk7CiAgfQogIGlmICgob3B0aW9ucy51c2VTaG9ydGVzdFJlZmVyZW5jZXMgfHwgIW5hbWVkKSAmJiBvcHRpb25zLnVzZVNob3J0ZXN0UmVmZXJlbmNlcykgewogICAgY29uc3QgZGVjaW1hbCA9IHRvRGVjaW1hbChjb2RlNCwgbmV4dDIsIG9wdGlvbnMub21pdE9wdGlvbmFsU2VtaWNvbG9ucyk7CiAgICBpZiAoZGVjaW1hbC5sZW5ndGggPCBudW1lcmljLmxlbmd0aCkgewogICAgICBudW1lcmljID0gZGVjaW1hbDsKICAgIH0KICB9CiAgcmV0dXJuIG5hbWVkICYmICghb3B0aW9ucy51c2VTaG9ydGVzdFJlZmVyZW5jZXMgfHwgbmFtZWQubGVuZ3RoIDwgbnVtZXJpYy5sZW5ndGgpID8gbmFtZWQgOiBudW1lcmljOwp9CnZhciBpbml0X2Zvcm1hdF9zbWFydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL2Zvcm1hdC1zbWFydC5qcyIoKSB7CiAgICBpbml0X3RvX2hleGFkZWNpbWFsKCk7CiAgICBpbml0X3RvX2RlY2ltYWwoKTsKICAgIGluaXRfdG9fbmFtZWQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL2Zvcm1hdC1iYXNpYy5qcwpmdW5jdGlvbiBmb3JtYXRCYXNpYyhjb2RlNCkgewogIHJldHVybiAiJiN4IiArIGNvZGU0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgIjsiOwp9CnZhciBpbml0X2Zvcm1hdF9iYXNpYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL2Zvcm1hdC1iYXNpYy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvaW5kZXguanMKZnVuY3Rpb24gc3RyaW5naWZ5RW50aXRpZXModmFsdWUyLCBvcHRpb25zKSB7CiAgcmV0dXJuIGNvcmUodmFsdWUyLCBPYmplY3QuYXNzaWduKHsgZm9ybWF0OiBmb3JtYXRTbWFydCB9LCBvcHRpb25zKSk7Cn0KZnVuY3Rpb24gc3RyaW5naWZ5RW50aXRpZXNMaWdodCh2YWx1ZTIsIG9wdGlvbnMpIHsKICByZXR1cm4gY29yZSh2YWx1ZTIsIE9iamVjdC5hc3NpZ24oeyBmb3JtYXQ6IGZvcm1hdEJhc2ljIH0sIG9wdGlvbnMpKTsKfQp2YXIgaW5pdF9saWIyOCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NvcmUoKTsKICAgIGluaXRfZm9ybWF0X3NtYXJ0KCk7CiAgICBpbml0X2Zvcm1hdF9iYXNpYygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvaW5kZXguanMKdmFyIGluaXRfc3RyaW5naWZ5X2VudGl0aWVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIyOCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvY29tbWVudC5qcwpmdW5jdGlvbiBjb21tZW50Mihub2RlMiwgXzEsIF8yMiwgc3RhdGUxNCkgewogIHJldHVybiBzdGF0ZTE0LnNldHRpbmdzLmJvZ3VzQ29tbWVudHMgPyAiPD8iICsgc3RyaW5naWZ5RW50aXRpZXMoCiAgICBub2RlMi52YWx1ZSwKICAgIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlMTQuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcywgewogICAgICBzdWJzZXQ6IGJvZ3VzQ29tbWVudEVudGl0eVN1YnNldAogICAgfSkKICApICsgIj4iIDogIjwhLS0iICsgbm9kZTIudmFsdWUucmVwbGFjZShodG1sQ29tbWVudFJlZ2V4LCBlbmNvZGUyKSArICItLT4iOwogIGZ1bmN0aW9uIGVuY29kZTIoJDApIHsKICAgIHJldHVybiBzdHJpbmdpZnlFbnRpdGllcygKICAgICAgJDAsCiAgICAgIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlMTQuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcywgewogICAgICAgIHN1YnNldDogY29tbWVudEVudGl0eVN1YnNldAogICAgICB9KQogICAgKTsKICB9Cn0KdmFyIGh0bWxDb21tZW50UmVnZXgsIGJvZ3VzQ29tbWVudEVudGl0eVN1YnNldCwgY29tbWVudEVudGl0eVN1YnNldDsKdmFyIGluaXRfY29tbWVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL2NvbW1lbnQuanMiKCkgewogICAgaW5pdF9zdHJpbmdpZnlfZW50aXRpZXMoKTsKICAgIGh0bWxDb21tZW50UmVnZXggPSAvXj58Xi0+fDwhLS18LS0+fC0tIT58PCEtJC9nOwogICAgYm9ndXNDb21tZW50RW50aXR5U3Vic2V0ID0gWyI+Il07CiAgICBjb21tZW50RW50aXR5U3Vic2V0ID0gWyI8IiwgIj4iXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL2RvY3R5cGUuanMKZnVuY3Rpb24gZG9jdHlwZTIoXzEsIF8yMiwgXzMyLCBzdGF0ZTE0KSB7CiAgcmV0dXJuICI8ISIgKyAoc3RhdGUxNC5zZXR0aW5ncy51cHBlckRvY3R5cGUgPyAiRE9DVFlQRSIgOiAiZG9jdHlwZSIpICsgKHN0YXRlMTQuc2V0dGluZ3MudGlnaHREb2N0eXBlID8gIiIgOiAiICIpICsgImh0bWw+IjsKfQp2YXIgaW5pdF9kb2N0eXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvZG9jdHlwZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9jb21tYS1zZXBhcmF0ZWQtdG9rZW5zQDIuMC4zL25vZGVfbW9kdWxlcy9jb21tYS1zZXBhcmF0ZWQtdG9rZW5zL2luZGV4LmpzCmZ1bmN0aW9uIHBhcnNlNSh2YWx1ZTIpIHsKICBjb25zdCB0b2tlbnMgPSBbXTsKICBjb25zdCBpbnB1dCA9IFN0cmluZyh2YWx1ZTIgfHwgIiIpOwogIGxldCBpbmRleDIgPSBpbnB1dC5pbmRleE9mKCIsIik7CiAgbGV0IHN0YXJ0ID0gMDsKICBsZXQgZW5kMyA9IGZhbHNlOwogIHdoaWxlICghZW5kMykgewogICAgaWYgKGluZGV4MiA9PT0gLTEpIHsKICAgICAgaW5kZXgyID0gaW5wdXQubGVuZ3RoOwogICAgICBlbmQzID0gdHJ1ZTsKICAgIH0KICAgIGNvbnN0IHRva2VuID0gaW5wdXQuc2xpY2Uoc3RhcnQsIGluZGV4MikudHJpbSgpOwogICAgaWYgKHRva2VuIHx8ICFlbmQzKSB7CiAgICAgIHRva2Vucy5wdXNoKHRva2VuKTsKICAgIH0KICAgIHN0YXJ0ID0gaW5kZXgyICsgMTsKICAgIGluZGV4MiA9IGlucHV0LmluZGV4T2YoIiwiLCBzdGFydCk7CiAgfQogIHJldHVybiB0b2tlbnM7Cn0KZnVuY3Rpb24gc3RyaW5naWZ5Myh2YWx1ZXMsIG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgY29uc3QgaW5wdXQgPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdID09PSAiIiA/IFsuLi52YWx1ZXMsICIiXSA6IHZhbHVlczsKICByZXR1cm4gaW5wdXQuam9pbigKICAgIChzZXR0aW5ncy5wYWRSaWdodCA/ICIgIiA6ICIiKSArICIsIiArIChzZXR0aW5ncy5wYWRMZWZ0ID09PSBmYWxzZSA/ICIiIDogIiAiKQogICkudHJpbSgpOwp9CnZhciBpbml0X2NvbW1hX3NlcGFyYXRlZF90b2tlbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb21tYS1zZXBhcmF0ZWQtdG9rZW5zQDIuMC4zL25vZGVfbW9kdWxlcy9jb21tYS1zZXBhcmF0ZWQtdG9rZW5zL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3NwYWNlLXNlcGFyYXRlZC10b2tlbnNAMi4wLjIvbm9kZV9tb2R1bGVzL3NwYWNlLXNlcGFyYXRlZC10b2tlbnMvaW5kZXguanMKZnVuY3Rpb24gcGFyc2U2KHZhbHVlMikgewogIGNvbnN0IGlucHV0ID0gU3RyaW5nKHZhbHVlMiB8fCAiIikudHJpbSgpOwogIHJldHVybiBpbnB1dCA/IGlucHV0LnNwbGl0KC9bIFx0XG5cclxmXSsvZykgOiBbXTsKfQpmdW5jdGlvbiBzdHJpbmdpZnk0KHZhbHVlcykgewogIHJldHVybiB2YWx1ZXMuam9pbigiICIpLnRyaW0oKTsKfQp2YXIgaW5pdF9zcGFjZV9zZXBhcmF0ZWRfdG9rZW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3BhY2Utc2VwYXJhdGVkLXRva2Vuc0AyLjAuMi9ub2RlX21vZHVsZXMvc3BhY2Utc2VwYXJhdGVkLXRva2Vucy9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtd2hpdGVzcGFjZUAzLjAuMC9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXdoaXRlc3BhY2UvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHdoaXRlc3BhY2UodGhpbmcpIHsKICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSAib2JqZWN0IiA/IHRoaW5nLnR5cGUgPT09ICJ0ZXh0IiA/IGVtcHR5Myh0aGluZy52YWx1ZSkgOiBmYWxzZSA6IGVtcHR5Myh0aGluZyk7Cn0KZnVuY3Rpb24gZW1wdHkzKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIucmVwbGFjZShyZSwgIiIpID09PSAiIjsKfQp2YXIgcmU7CnZhciBpbml0X2xpYjI5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXdoaXRlc3BhY2VAMy4wLjAvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC13aGl0ZXNwYWNlL2xpYi9pbmRleC5qcyIoKSB7CiAgICByZSA9IC9bIFx0XG5cZlxyXS9nOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXdoaXRlc3BhY2VAMy4wLjAvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC13aGl0ZXNwYWNlL2luZGV4LmpzCnZhciBpbml0X2hhc3RfdXRpbF93aGl0ZXNwYWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXdoaXRlc3BhY2VAMy4wLjAvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC13aGl0ZXNwYWNlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMjkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvb21pc3Npb24vdXRpbC9zaWJsaW5ncy5qcwpmdW5jdGlvbiBzaWJsaW5ncyhpbmNyZW1lbnQyKSB7CiAgcmV0dXJuIHNpYmxpbmc7CiAgZnVuY3Rpb24gc2libGluZyhwYXJlbnQsIGluZGV4MiwgaW5jbHVkZVdoaXRlc3BhY2UpIHsKICAgIGNvbnN0IHNpYmxpbmdzMiA9IHBhcmVudCA/IHBhcmVudC5jaGlsZHJlbiA6IGVtcHR5Q2hpbGRyZW47CiAgICBsZXQgb2Zmc2V0ID0gKGluZGV4MiB8fCAwKSArIGluY3JlbWVudDI7CiAgICBsZXQgbmV4dDIgPSBzaWJsaW5nczJbb2Zmc2V0XTsKICAgIGlmICghaW5jbHVkZVdoaXRlc3BhY2UpIHsKICAgICAgd2hpbGUgKG5leHQyICYmIHdoaXRlc3BhY2UobmV4dDIpKSB7CiAgICAgICAgb2Zmc2V0ICs9IGluY3JlbWVudDI7CiAgICAgICAgbmV4dDIgPSBzaWJsaW5nczJbb2Zmc2V0XTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5leHQyOwogIH0KfQp2YXIgc2libGluZ0FmdGVyLCBzaWJsaW5nQmVmb3JlLCBlbXB0eUNoaWxkcmVuOwp2YXIgaW5pdF9zaWJsaW5ncyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvb21pc3Npb24vdXRpbC9zaWJsaW5ncy5qcyIoKSB7CiAgICBpbml0X2hhc3RfdXRpbF93aGl0ZXNwYWNlKCk7CiAgICBzaWJsaW5nQWZ0ZXIgPSBzaWJsaW5ncygxKTsKICAgIHNpYmxpbmdCZWZvcmUgPSBzaWJsaW5ncygtMSk7CiAgICBlbXB0eUNoaWxkcmVuID0gW107CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL29taXNzaW9uLmpzCmZ1bmN0aW9uIG9taXNzaW9uKGhhbmRsZXJzMikgewogIHJldHVybiBvbWl0OwogIGZ1bmN0aW9uIG9taXQobm9kZTIsIGluZGV4MiwgcGFyZW50KSB7CiAgICByZXR1cm4gb3duMTAuY2FsbChoYW5kbGVyczIsIG5vZGUyLnRhZ05hbWUpICYmIGhhbmRsZXJzMltub2RlMi50YWdOYW1lXShub2RlMiwgaW5kZXgyLCBwYXJlbnQpOwogIH0KfQp2YXIgb3duMTA7CnZhciBpbml0X29taXNzaW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9vbWlzc2lvbi9vbWlzc2lvbi5qcyIoKSB7CiAgICBvd24xMCA9IHt9Lmhhc093blByb3BlcnR5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9vbWlzc2lvbi9jbG9zaW5nLmpzCmZ1bmN0aW9uIGhlYWRPckNvbGdyb3VwT3JDYXB0aW9uKF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyLCB0cnVlKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgIT09ICJjb21tZW50IiAmJiAhKG5leHQyLnR5cGUgPT09ICJ0ZXh0IiAmJiB3aGl0ZXNwYWNlKG5leHQyLnZhbHVlLmNoYXJBdCgwKSkpOwp9CmZ1bmN0aW9uIGh0bWw1KF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgIT09ICJjb21tZW50IjsKfQpmdW5jdGlvbiBib2R5KF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgIT09ICJjb21tZW50IjsKfQpmdW5jdGlvbiBwNChfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuIG5leHQyID8gbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIChuZXh0Mi50YWdOYW1lID09PSAiYWRkcmVzcyIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImFydGljbGUiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJhc2lkZSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImJsb2NrcXVvdGUiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJkZXRhaWxzIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiZGl2IiB8fCBuZXh0Mi50YWdOYW1lID09PSAiZGwiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJmaWVsZHNldCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImZpZ2NhcHRpb24iIHx8IG5leHQyLnRhZ05hbWUgPT09ICJmaWd1cmUiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJmb290ZXIiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJmb3JtIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaDEiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJoMiIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImgzIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaDQiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJoNSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImg2IiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaGVhZGVyIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaGdyb3VwIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaHIiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJtYWluIiB8fCBuZXh0Mi50YWdOYW1lID09PSAibWVudSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gIm5hdiIgfHwgbmV4dDIudGFnTmFtZSA9PT0gIm9sIiB8fCBuZXh0Mi50YWdOYW1lID09PSAicCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInByZSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInNlY3Rpb24iIHx8IG5leHQyLnRhZ05hbWUgPT09ICJ0YWJsZSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInVsIikgOiAhcGFyZW50IHx8IC8vIENvbmZ1c2luZyBwYXJlbnQuCiAgIShwYXJlbnQudHlwZSA9PT0gImVsZW1lbnQiICYmIChwYXJlbnQudGFnTmFtZSA9PT0gImEiIHx8IHBhcmVudC50YWdOYW1lID09PSAiYXVkaW8iIHx8IHBhcmVudC50YWdOYW1lID09PSAiZGVsIiB8fCBwYXJlbnQudGFnTmFtZSA9PT0gImlucyIgfHwgcGFyZW50LnRhZ05hbWUgPT09ICJtYXAiIHx8IHBhcmVudC50YWdOYW1lID09PSAibm9zY3JpcHQiIHx8IHBhcmVudC50YWdOYW1lID09PSAidmlkZW8iKSk7Cn0KZnVuY3Rpb24gbGkoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiAhbmV4dDIgfHwgbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIG5leHQyLnRhZ05hbWUgPT09ICJsaSI7Cn0KZnVuY3Rpb24gZHQoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiBCb29sZWFuKAogICAgbmV4dDIgJiYgbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIChuZXh0Mi50YWdOYW1lID09PSAiZHQiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJkZCIpCiAgKTsKfQpmdW5jdGlvbiBkZChfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgKG5leHQyLnRhZ05hbWUgPT09ICJkdCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImRkIik7Cn0KZnVuY3Rpb24gcnVieUVsZW1lbnQoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiAhbmV4dDIgfHwgbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIChuZXh0Mi50YWdOYW1lID09PSAicnAiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJydCIpOwp9CmZ1bmN0aW9uIG9wdGdyb3VwKF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiBuZXh0Mi50YWdOYW1lID09PSAib3B0Z3JvdXAiOwp9CmZ1bmN0aW9uIG9wdGlvbihfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgKG5leHQyLnRhZ05hbWUgPT09ICJvcHRpb24iIHx8IG5leHQyLnRhZ05hbWUgPT09ICJvcHRncm91cCIpOwp9CmZ1bmN0aW9uIHRoZWFkKF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gQm9vbGVhbigKICAgIG5leHQyICYmIG5leHQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiAobmV4dDIudGFnTmFtZSA9PT0gInRib2R5IiB8fCBuZXh0Mi50YWdOYW1lID09PSAidGZvb3QiKQogICk7Cn0KZnVuY3Rpb24gdGJvZHkoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiAhbmV4dDIgfHwgbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIChuZXh0Mi50YWdOYW1lID09PSAidGJvZHkiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJ0Zm9vdCIpOwp9CmZ1bmN0aW9uIHRmb290KF80LCBpbmRleDIsIHBhcmVudCkgewogIHJldHVybiAhc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKfQpmdW5jdGlvbiB0cihfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgbmV4dDIudGFnTmFtZSA9PT0gInRyIjsKfQpmdW5jdGlvbiBjZWxscyhfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgKG5leHQyLnRhZ05hbWUgPT09ICJ0ZCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInRoIik7Cn0KdmFyIGNsb3Npbmc7CnZhciBpbml0X2Nsb3NpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL2Nsb3NpbmcuanMiKCkgewogICAgaW5pdF9oYXN0X3V0aWxfd2hpdGVzcGFjZSgpOwogICAgaW5pdF9zaWJsaW5ncygpOwogICAgaW5pdF9vbWlzc2lvbigpOwogICAgY2xvc2luZyA9IG9taXNzaW9uKHsKICAgICAgYm9keSwKICAgICAgY2FwdGlvbjogaGVhZE9yQ29sZ3JvdXBPckNhcHRpb24sCiAgICAgIGNvbGdyb3VwOiBoZWFkT3JDb2xncm91cE9yQ2FwdGlvbiwKICAgICAgZGQsCiAgICAgIGR0LAogICAgICBoZWFkOiBoZWFkT3JDb2xncm91cE9yQ2FwdGlvbiwKICAgICAgaHRtbDogaHRtbDUsCiAgICAgIGxpLAogICAgICBvcHRncm91cCwKICAgICAgb3B0aW9uLAogICAgICBwOiBwNCwKICAgICAgcnA6IHJ1YnlFbGVtZW50LAogICAgICBydDogcnVieUVsZW1lbnQsCiAgICAgIHRib2R5LAogICAgICB0ZDogY2VsbHMsCiAgICAgIHRmb290LAogICAgICB0aDogY2VsbHMsCiAgICAgIHRoZWFkLAogICAgICB0cgogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL29wZW5pbmcuanMKZnVuY3Rpb24gaHRtbDYobm9kZTIpIHsKICBjb25zdCBoZWFkMiA9IHNpYmxpbmdBZnRlcihub2RlMiwgLTEpOwogIHJldHVybiAhaGVhZDIgfHwgaGVhZDIudHlwZSAhPT0gImNvbW1lbnQiOwp9CmZ1bmN0aW9uIGhlYWQobm9kZTIpIHsKICBjb25zdCBzZWVuID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICBmb3IgKGNvbnN0IGNoaWxkMiBvZiBub2RlMi5jaGlsZHJlbikgewogICAgaWYgKGNoaWxkMi50eXBlID09PSAiZWxlbWVudCIgJiYgKGNoaWxkMi50YWdOYW1lID09PSAiYmFzZSIgfHwgY2hpbGQyLnRhZ05hbWUgPT09ICJ0aXRsZSIpKSB7CiAgICAgIGlmIChzZWVuLmhhcyhjaGlsZDIudGFnTmFtZSkpIHJldHVybiBmYWxzZTsKICAgICAgc2Vlbi5hZGQoY2hpbGQyLnRhZ05hbWUpOwogICAgfQogIH0KICBjb25zdCBjaGlsZCA9IG5vZGUyLmNoaWxkcmVuWzBdOwogIHJldHVybiAhY2hpbGQgfHwgY2hpbGQudHlwZSA9PT0gImVsZW1lbnQiOwp9CmZ1bmN0aW9uIGJvZHkyKG5vZGUyKSB7CiAgY29uc3QgaGVhZDIgPSBzaWJsaW5nQWZ0ZXIobm9kZTIsIC0xLCB0cnVlKTsKICByZXR1cm4gIWhlYWQyIHx8IGhlYWQyLnR5cGUgIT09ICJjb21tZW50IiAmJiAhKGhlYWQyLnR5cGUgPT09ICJ0ZXh0IiAmJiB3aGl0ZXNwYWNlKGhlYWQyLnZhbHVlLmNoYXJBdCgwKSkpICYmICEoaGVhZDIudHlwZSA9PT0gImVsZW1lbnQiICYmIChoZWFkMi50YWdOYW1lID09PSAibWV0YSIgfHwgaGVhZDIudGFnTmFtZSA9PT0gImxpbmsiIHx8IGhlYWQyLnRhZ05hbWUgPT09ICJzY3JpcHQiIHx8IGhlYWQyLnRhZ05hbWUgPT09ICJzdHlsZSIgfHwgaGVhZDIudGFnTmFtZSA9PT0gInRlbXBsYXRlIikpOwp9CmZ1bmN0aW9uIGNvbGdyb3VwKG5vZGUyLCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IHByZXZpb3VzMyA9IHNpYmxpbmdCZWZvcmUocGFyZW50LCBpbmRleDIpOwogIGNvbnN0IGhlYWQyID0gc2libGluZ0FmdGVyKG5vZGUyLCAtMSwgdHJ1ZSk7CiAgaWYgKHBhcmVudCAmJiBwcmV2aW91czMgJiYgcHJldmlvdXMzLnR5cGUgPT09ICJlbGVtZW50IiAmJiBwcmV2aW91czMudGFnTmFtZSA9PT0gImNvbGdyb3VwIiAmJiBjbG9zaW5nKHByZXZpb3VzMywgcGFyZW50LmNoaWxkcmVuLmluZGV4T2YocHJldmlvdXMzKSwgcGFyZW50KSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gQm9vbGVhbihoZWFkMiAmJiBoZWFkMi50eXBlID09PSAiZWxlbWVudCIgJiYgaGVhZDIudGFnTmFtZSA9PT0gImNvbCIpOwp9CmZ1bmN0aW9uIHRib2R5Mihub2RlMiwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBwcmV2aW91czMgPSBzaWJsaW5nQmVmb3JlKHBhcmVudCwgaW5kZXgyKTsKICBjb25zdCBoZWFkMiA9IHNpYmxpbmdBZnRlcihub2RlMiwgLTEpOwogIGlmIChwYXJlbnQgJiYgcHJldmlvdXMzICYmIHByZXZpb3VzMy50eXBlID09PSAiZWxlbWVudCIgJiYgKHByZXZpb3VzMy50YWdOYW1lID09PSAidGhlYWQiIHx8IHByZXZpb3VzMy50YWdOYW1lID09PSAidGJvZHkiKSAmJiBjbG9zaW5nKHByZXZpb3VzMywgcGFyZW50LmNoaWxkcmVuLmluZGV4T2YocHJldmlvdXMzKSwgcGFyZW50KSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gQm9vbGVhbihoZWFkMiAmJiBoZWFkMi50eXBlID09PSAiZWxlbWVudCIgJiYgaGVhZDIudGFnTmFtZSA9PT0gInRyIik7Cn0KdmFyIG9wZW5pbmc7CnZhciBpbml0X29wZW5pbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL29wZW5pbmcuanMiKCkgewogICAgaW5pdF9oYXN0X3V0aWxfd2hpdGVzcGFjZSgpOwogICAgaW5pdF9zaWJsaW5ncygpOwogICAgaW5pdF9jbG9zaW5nKCk7CiAgICBpbml0X29taXNzaW9uKCk7CiAgICBvcGVuaW5nID0gb21pc3Npb24oewogICAgICBib2R5OiBib2R5MiwKICAgICAgY29sZ3JvdXAsCiAgICAgIGhlYWQsCiAgICAgIGh0bWw6IGh0bWw2LAogICAgICB0Ym9keTogdGJvZHkyCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL2VsZW1lbnQuanMKZnVuY3Rpb24gZWxlbWVudDMobm9kZTIsIGluZGV4MiwgcGFyZW50LCBzdGF0ZTE0KSB7CiAgY29uc3Qgc2NoZW1hID0gc3RhdGUxNC5zY2hlbWE7CiAgY29uc3Qgb21pdCA9IHNjaGVtYS5zcGFjZSA9PT0gInN2ZyIgPyBmYWxzZSA6IHN0YXRlMTQuc2V0dGluZ3Mub21pdE9wdGlvbmFsVGFnczsKICBsZXQgc2VsZkNsb3NpbmcgPSBzY2hlbWEuc3BhY2UgPT09ICJzdmciID8gc3RhdGUxNC5zZXR0aW5ncy5jbG9zZUVtcHR5RWxlbWVudHMgOiBzdGF0ZTE0LnNldHRpbmdzLnZvaWRzLmluY2x1ZGVzKG5vZGUyLnRhZ05hbWUudG9Mb3dlckNhc2UoKSk7CiAgY29uc3QgcGFydHMgPSBbXTsKICBsZXQgbGFzdDM7CiAgaWYgKHNjaGVtYS5zcGFjZSA9PT0gImh0bWwiICYmIG5vZGUyLnRhZ05hbWUgPT09ICJzdmciKSB7CiAgICBzdGF0ZTE0LnNjaGVtYSA9IHN2ZzI7CiAgfQogIGNvbnN0IGF0dHJpYnV0ZXMgPSBzZXJpYWxpemVBdHRyaWJ1dGVzKHN0YXRlMTQsIG5vZGUyLnByb3BlcnRpZXMpOwogIGNvbnN0IGNvbnRlbnQzID0gc3RhdGUxNC5hbGwoCiAgICBzY2hlbWEuc3BhY2UgPT09ICJodG1sIiAmJiBub2RlMi50YWdOYW1lID09PSAidGVtcGxhdGUiID8gbm9kZTIuY29udGVudCA6IG5vZGUyCiAgKTsKICBzdGF0ZTE0LnNjaGVtYSA9IHNjaGVtYTsKICBpZiAoY29udGVudDMpIHNlbGZDbG9zaW5nID0gZmFsc2U7CiAgaWYgKGF0dHJpYnV0ZXMgfHwgIW9taXQgfHwgIW9wZW5pbmcobm9kZTIsIGluZGV4MiwgcGFyZW50KSkgewogICAgcGFydHMucHVzaCgiPCIsIG5vZGUyLnRhZ05hbWUsIGF0dHJpYnV0ZXMgPyAiICIgKyBhdHRyaWJ1dGVzIDogIiIpOwogICAgaWYgKHNlbGZDbG9zaW5nICYmIChzY2hlbWEuc3BhY2UgPT09ICJzdmciIHx8IHN0YXRlMTQuc2V0dGluZ3MuY2xvc2VTZWxmQ2xvc2luZykpIHsKICAgICAgbGFzdDMgPSBhdHRyaWJ1dGVzLmNoYXJBdChhdHRyaWJ1dGVzLmxlbmd0aCAtIDEpOwogICAgICBpZiAoIXN0YXRlMTQuc2V0dGluZ3MudGlnaHRTZWxmQ2xvc2luZyB8fCBsYXN0MyA9PT0gIi8iIHx8IGxhc3QzICYmIGxhc3QzICE9PSAnIicgJiYgbGFzdDMgIT09ICInIikgewogICAgICAgIHBhcnRzLnB1c2goIiAiKTsKICAgICAgfQogICAgICBwYXJ0cy5wdXNoKCIvIik7CiAgICB9CiAgICBwYXJ0cy5wdXNoKCI+Iik7CiAgfQogIHBhcnRzLnB1c2goY29udGVudDMpOwogIGlmICghc2VsZkNsb3NpbmcgJiYgKCFvbWl0IHx8ICFjbG9zaW5nKG5vZGUyLCBpbmRleDIsIHBhcmVudCkpKSB7CiAgICBwYXJ0cy5wdXNoKCI8LyIgKyBub2RlMi50YWdOYW1lICsgIj4iKTsKICB9CiAgcmV0dXJuIHBhcnRzLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIHNlcmlhbGl6ZUF0dHJpYnV0ZXMoc3RhdGUxNCwgcHJvcGVydGllczIpIHsKICBjb25zdCB2YWx1ZXMgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGtleTI7CiAgaWYgKHByb3BlcnRpZXMyKSB7CiAgICBmb3IgKGtleTIgaW4gcHJvcGVydGllczIpIHsKICAgICAgaWYgKHByb3BlcnRpZXMyW2tleTJdICE9PSBudWxsICYmIHByb3BlcnRpZXMyW2tleTJdICE9PSB2b2lkIDApIHsKICAgICAgICBjb25zdCB2YWx1ZTIgPSBzZXJpYWxpemVBdHRyaWJ1dGUoc3RhdGUxNCwga2V5MiwgcHJvcGVydGllczJba2V5Ml0pOwogICAgICAgIGlmICh2YWx1ZTIpIHZhbHVlcy5wdXNoKHZhbHVlMik7CiAgICAgIH0KICAgIH0KICB9CiAgd2hpbGUgKCsraW5kZXgyIDwgdmFsdWVzLmxlbmd0aCkgewogICAgY29uc3QgbGFzdDMgPSBzdGF0ZTE0LnNldHRpbmdzLnRpZ2h0QXR0cmlidXRlcyA/IHZhbHVlc1tpbmRleDJdLmNoYXJBdCh2YWx1ZXNbaW5kZXgyXS5sZW5ndGggLSAxKSA6IHZvaWQgMDsKICAgIGlmIChpbmRleDIgIT09IHZhbHVlcy5sZW5ndGggLSAxICYmIGxhc3QzICE9PSAnIicgJiYgbGFzdDMgIT09ICInIikgewogICAgICB2YWx1ZXNbaW5kZXgyXSArPSAiICI7CiAgICB9CiAgfQogIHJldHVybiB2YWx1ZXMuam9pbigiIik7Cn0KZnVuY3Rpb24gc2VyaWFsaXplQXR0cmlidXRlKHN0YXRlMTQsIGtleTIsIHZhbHVlMikgewogIGNvbnN0IGluZm8gPSBmaW5kMihzdGF0ZTE0LnNjaGVtYSwga2V5Mik7CiAgY29uc3QgeDMgPSBzdGF0ZTE0LnNldHRpbmdzLmFsbG93UGFyc2VFcnJvcnMgJiYgc3RhdGUxNC5zY2hlbWEuc3BhY2UgPT09ICJodG1sIiA/IDAgOiAxOwogIGNvbnN0IHk1ID0gc3RhdGUxNC5zZXR0aW5ncy5hbGxvd0Rhbmdlcm91c0NoYXJhY3RlcnMgPyAwIDogMTsKICBsZXQgcXVvdGUgPSBzdGF0ZTE0LnF1b3RlOwogIGxldCByZXN1bHQ7CiAgaWYgKGluZm8ub3ZlcmxvYWRlZEJvb2xlYW4gJiYgKHZhbHVlMiA9PT0gaW5mby5hdHRyaWJ1dGUgfHwgdmFsdWUyID09PSAiIikpIHsKICAgIHZhbHVlMiA9IHRydWU7CiAgfSBlbHNlIGlmICgoaW5mby5ib29sZWFuIHx8IGluZm8ub3ZlcmxvYWRlZEJvb2xlYW4pICYmICh0eXBlb2YgdmFsdWUyICE9PSAic3RyaW5nIiB8fCB2YWx1ZTIgPT09IGluZm8uYXR0cmlidXRlIHx8IHZhbHVlMiA9PT0gIiIpKSB7CiAgICB2YWx1ZTIgPSBCb29sZWFuKHZhbHVlMik7CiAgfQogIGlmICh2YWx1ZTIgPT09IG51bGwgfHwgdmFsdWUyID09PSB2b2lkIDAgfHwgdmFsdWUyID09PSBmYWxzZSB8fCB0eXBlb2YgdmFsdWUyID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNOYU4odmFsdWUyKSkgewogICAgcmV0dXJuICIiOwogIH0KICBjb25zdCBuYW1lID0gc3RyaW5naWZ5RW50aXRpZXMoCiAgICBpbmZvLmF0dHJpYnV0ZSwKICAgIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlMTQuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcywgewogICAgICAvLyBBbHdheXMgZW5jb2RlIHdpdGhvdXQgcGFyc2UgZXJyb3JzIGluIG5vbi1IVE1MLgogICAgICBzdWJzZXQ6IGNvbnN0YW50cy5uYW1lW3gzXVt5NV0KICAgIH0pCiAgKTsKICBpZiAodmFsdWUyID09PSB0cnVlKSByZXR1cm4gbmFtZTsKICB2YWx1ZTIgPSBBcnJheS5pc0FycmF5KHZhbHVlMikgPyAoaW5mby5jb21tYVNlcGFyYXRlZCA/IHN0cmluZ2lmeTMgOiBzdHJpbmdpZnk0KSh2YWx1ZTIsIHsKICAgIHBhZExlZnQ6ICFzdGF0ZTE0LnNldHRpbmdzLnRpZ2h0Q29tbWFTZXBhcmF0ZWRMaXN0cwogIH0pIDogU3RyaW5nKHZhbHVlMik7CiAgaWYgKHN0YXRlMTQuc2V0dGluZ3MuY29sbGFwc2VFbXB0eUF0dHJpYnV0ZXMgJiYgIXZhbHVlMikgcmV0dXJuIG5hbWU7CiAgaWYgKHN0YXRlMTQuc2V0dGluZ3MucHJlZmVyVW5xdW90ZWQpIHsKICAgIHJlc3VsdCA9IHN0cmluZ2lmeUVudGl0aWVzKAogICAgICB2YWx1ZTIsCiAgICAgIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlMTQuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcywgewogICAgICAgIGF0dHJpYnV0ZTogdHJ1ZSwKICAgICAgICBzdWJzZXQ6IGNvbnN0YW50cy51bnF1b3RlZFt4M11beTVdCiAgICAgIH0pCiAgICApOwogIH0KICBpZiAocmVzdWx0ICE9PSB2YWx1ZTIpIHsKICAgIGlmIChzdGF0ZTE0LnNldHRpbmdzLnF1b3RlU21hcnQgJiYgY2NvdW50KHZhbHVlMiwgcXVvdGUpID4gY2NvdW50KHZhbHVlMiwgc3RhdGUxNC5hbHRlcm5hdGl2ZSkpIHsKICAgICAgcXVvdGUgPSBzdGF0ZTE0LmFsdGVybmF0aXZlOwogICAgfQogICAgcmVzdWx0ID0gcXVvdGUgKyBzdHJpbmdpZnlFbnRpdGllcygKICAgICAgdmFsdWUyLAogICAgICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZTE0LnNldHRpbmdzLmNoYXJhY3RlclJlZmVyZW5jZXMsIHsKICAgICAgICAvLyBBbHdheXMgZW5jb2RlIHdpdGhvdXQgcGFyc2UgZXJyb3JzIGluIG5vbi1IVE1MLgogICAgICAgIHN1YnNldDogKHF1b3RlID09PSAiJyIgPyBjb25zdGFudHMuc2luZ2xlIDogY29uc3RhbnRzLmRvdWJsZSlbeDNdW3k1XSwKICAgICAgICBhdHRyaWJ1dGU6IHRydWUKICAgICAgfSkKICAgICkgKyBxdW90ZTsKICB9CiAgcmV0dXJuIG5hbWUgKyAocmVzdWx0ID8gIj0iICsgcmVzdWx0IDogcmVzdWx0KTsKfQp2YXIgY29uc3RhbnRzOwp2YXIgaW5pdF9lbGVtZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvZWxlbWVudC5qcyIoKSB7CiAgICBpbml0X2Njb3VudCgpOwogICAgaW5pdF9jb21tYV9zZXBhcmF0ZWRfdG9rZW5zKCk7CiAgICBpbml0X3Byb3BlcnR5X2luZm9ybWF0aW9uKCk7CiAgICBpbml0X3NwYWNlX3NlcGFyYXRlZF90b2tlbnMoKTsKICAgIGluaXRfc3RyaW5naWZ5X2VudGl0aWVzKCk7CiAgICBpbml0X2Nsb3NpbmcoKTsKICAgIGluaXRfb3BlbmluZygpOwogICAgY29uc3RhbnRzID0gewogICAgICAvLyBTZWU6IDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNhdHRyaWJ1dGUtbmFtZS1zdGF0ZT4uCiAgICAgIG5hbWU6IFsKICAgICAgICBbIglcblxmXHIgJi89PiIuc3BsaXQoIiIpLCAiCVxuXGZcciBcIiYnLz0+YCIuc3BsaXQoIiIpXSwKICAgICAgICBbYFwwCQpcZlxyICImJy88PT5gLnNwbGl0KCIiKSwgIlwwCVxuXGZcciBcIiYnLzw9PmAiLnNwbGl0KCIiKV0KICAgICAgXSwKICAgICAgLy8gU2VlOiA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jYXR0cmlidXRlLXZhbHVlLSh1bnF1b3RlZCktc3RhdGU+LgogICAgICB1bnF1b3RlZDogWwogICAgICAgIFsiCVxuXGZcciAmPiIuc3BsaXQoIiIpLCAiXDAJXG5cZlxyIFwiJic8PT5gIi5zcGxpdCgiIildLAogICAgICAgIFsiXDAJXG5cZlxyIFwiJic8PT5gIi5zcGxpdCgiIiksICJcMAlcblxmXHIgXCImJzw9PmAiLnNwbGl0KCIiKV0KICAgICAgXSwKICAgICAgLy8gU2VlOiA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jYXR0cmlidXRlLXZhbHVlLShzaW5nbGUtcXVvdGVkKS1zdGF0ZT4uCiAgICAgIHNpbmdsZTogWwogICAgICAgIFsiJiciLnNwbGl0KCIiKSwgIlwiJidgIi5zcGxpdCgiIildLAogICAgICAgIFsiXDAmJyIuc3BsaXQoIiIpLCAiXDBcIiYnYCIuc3BsaXQoIiIpXQogICAgICBdLAogICAgICAvLyBTZWU6IDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNhdHRyaWJ1dGUtdmFsdWUtKGRvdWJsZS1xdW90ZWQpLXN0YXRlPi4KICAgICAgZG91YmxlOiBbCiAgICAgICAgWyciJicuc3BsaXQoIiIpLCAiXCImJ2AiLnNwbGl0KCIiKV0sCiAgICAgICAgWydcMCImJy5zcGxpdCgiIiksICJcMFwiJidgIi5zcGxpdCgiIildCiAgICAgIF0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS90ZXh0LmpzCmZ1bmN0aW9uIHRleHQ3KG5vZGUyLCBfNCwgcGFyZW50LCBzdGF0ZTE0KSB7CiAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQudHlwZSA9PT0gImVsZW1lbnQiICYmIChwYXJlbnQudGFnTmFtZSA9PT0gInNjcmlwdCIgfHwgcGFyZW50LnRhZ05hbWUgPT09ICJzdHlsZSIpID8gbm9kZTIudmFsdWUgOiBzdHJpbmdpZnlFbnRpdGllcygKICAgIG5vZGUyLnZhbHVlLAogICAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUxNC5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLCB7CiAgICAgIHN1YnNldDogdGV4dEVudGl0eVN1YnNldAogICAgfSkKICApOwp9CnZhciB0ZXh0RW50aXR5U3Vic2V0Owp2YXIgaW5pdF90ZXh0NCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL3RleHQuanMiKCkgewogICAgaW5pdF9zdHJpbmdpZnlfZW50aXRpZXMoKTsKICAgIHRleHRFbnRpdHlTdWJzZXQgPSBbIjwiLCAiJiJdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvcmF3LmpzCmZ1bmN0aW9uIHJhdyhub2RlMiwgaW5kZXgyLCBwYXJlbnQsIHN0YXRlMTQpIHsKICByZXR1cm4gc3RhdGUxNC5zZXR0aW5ncy5hbGxvd0Rhbmdlcm91c0h0bWwgPyBub2RlMi52YWx1ZSA6IHRleHQ3KG5vZGUyLCBpbmRleDIsIHBhcmVudCwgc3RhdGUxNCk7Cn0KdmFyIGluaXRfcmF3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvcmF3LmpzIigpIHsKICAgIGluaXRfdGV4dDQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL3Jvb3QuanMKZnVuY3Rpb24gcm9vdDQobm9kZTIsIF8xLCBfMjIsIHN0YXRlMTQpIHsKICByZXR1cm4gc3RhdGUxNC5hbGwobm9kZTIpOwp9CnZhciBpbml0X3Jvb3QzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvcm9vdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9pbmRleC5qcwpmdW5jdGlvbiBpbnZhbGlkMihub2RlMikgewogIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbm9kZSwgbm90IGAiICsgbm9kZTIgKyAiYCIpOwp9CmZ1bmN0aW9uIHVua25vd24yKG5vZGVfKSB7CiAgY29uc3Qgbm9kZTIgPSAoCiAgICAvKiogQHR5cGUge05vZGVzfSAqLwogICAgbm9kZV8KICApOwogIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvbXBpbGUgdW5rbm93biBub2RlIGAiICsgbm9kZTIudHlwZSArICJgIik7Cn0KdmFyIGhhbmRsZTI7CnZhciBpbml0X2hhbmRsZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X3p3aXRjaCgpOwogICAgaW5pdF9jb21tZW50KCk7CiAgICBpbml0X2RvY3R5cGUoKTsKICAgIGluaXRfZWxlbWVudCgpOwogICAgaW5pdF9yYXcoKTsKICAgIGluaXRfcm9vdDMoKTsKICAgIGluaXRfdGV4dDQoKTsKICAgIGhhbmRsZTIgPSB6d2l0Y2goInR5cGUiLCB7CiAgICAgIGludmFsaWQ6IGludmFsaWQyLAogICAgICB1bmtub3duOiB1bmtub3duMiwKICAgICAgaGFuZGxlcnM6IHsgY29tbWVudDogY29tbWVudDIsIGRvY3R5cGU6IGRvY3R5cGUyLCBlbGVtZW50OiBlbGVtZW50MywgcmF3LCByb290OiByb290NCwgdGV4dDogdGV4dDcgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHRvSHRtbCh0cmVlLCBvcHRpb25zKSB7CiAgY29uc3Qgb3B0aW9uc18gPSBvcHRpb25zIHx8IGVtcHR5T3B0aW9uczY7CiAgY29uc3QgcXVvdGUgPSBvcHRpb25zXy5xdW90ZSB8fCAnIic7CiAgY29uc3QgYWx0ZXJuYXRpdmUgPSBxdW90ZSA9PT0gJyInID8gIiciIDogJyInOwogIGlmIChxdW90ZSAhPT0gJyInICYmIHF1b3RlICE9PSAiJyIpIHsKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBxdW90ZSBgIiArIHF1b3RlICsgImAsIGV4cGVjdGVkIGAnYCBvciBgXCJgIik7CiAgfQogIGNvbnN0IHN0YXRlMTQgPSB7CiAgICBvbmU6IG9uZTIsCiAgICBhbGw6IGFsbDIsCiAgICBzZXR0aW5nczogewogICAgICBvbWl0T3B0aW9uYWxUYWdzOiBvcHRpb25zXy5vbWl0T3B0aW9uYWxUYWdzIHx8IGZhbHNlLAogICAgICBhbGxvd1BhcnNlRXJyb3JzOiBvcHRpb25zXy5hbGxvd1BhcnNlRXJyb3JzIHx8IGZhbHNlLAogICAgICBhbGxvd0Rhbmdlcm91c0NoYXJhY3RlcnM6IG9wdGlvbnNfLmFsbG93RGFuZ2Vyb3VzQ2hhcmFjdGVycyB8fCBmYWxzZSwKICAgICAgcXVvdGVTbWFydDogb3B0aW9uc18ucXVvdGVTbWFydCB8fCBmYWxzZSwKICAgICAgcHJlZmVyVW5xdW90ZWQ6IG9wdGlvbnNfLnByZWZlclVucXVvdGVkIHx8IGZhbHNlLAogICAgICB0aWdodEF0dHJpYnV0ZXM6IG9wdGlvbnNfLnRpZ2h0QXR0cmlidXRlcyB8fCBmYWxzZSwKICAgICAgdXBwZXJEb2N0eXBlOiBvcHRpb25zXy51cHBlckRvY3R5cGUgfHwgZmFsc2UsCiAgICAgIHRpZ2h0RG9jdHlwZTogb3B0aW9uc18udGlnaHREb2N0eXBlIHx8IGZhbHNlLAogICAgICBib2d1c0NvbW1lbnRzOiBvcHRpb25zXy5ib2d1c0NvbW1lbnRzIHx8IGZhbHNlLAogICAgICB0aWdodENvbW1hU2VwYXJhdGVkTGlzdHM6IG9wdGlvbnNfLnRpZ2h0Q29tbWFTZXBhcmF0ZWRMaXN0cyB8fCBmYWxzZSwKICAgICAgdGlnaHRTZWxmQ2xvc2luZzogb3B0aW9uc18udGlnaHRTZWxmQ2xvc2luZyB8fCBmYWxzZSwKICAgICAgY29sbGFwc2VFbXB0eUF0dHJpYnV0ZXM6IG9wdGlvbnNfLmNvbGxhcHNlRW1wdHlBdHRyaWJ1dGVzIHx8IGZhbHNlLAogICAgICBhbGxvd0Rhbmdlcm91c0h0bWw6IG9wdGlvbnNfLmFsbG93RGFuZ2Vyb3VzSHRtbCB8fCBmYWxzZSwKICAgICAgdm9pZHM6IG9wdGlvbnNfLnZvaWRzIHx8IGh0bWxWb2lkRWxlbWVudHMsCiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZXM6IG9wdGlvbnNfLmNoYXJhY3RlclJlZmVyZW5jZXMgfHwgZW1wdHlDaGFyYWN0ZXJSZWZlcmVuY2VzLAogICAgICBjbG9zZVNlbGZDbG9zaW5nOiBvcHRpb25zXy5jbG9zZVNlbGZDbG9zaW5nIHx8IGZhbHNlLAogICAgICBjbG9zZUVtcHR5RWxlbWVudHM6IG9wdGlvbnNfLmNsb3NlRW1wdHlFbGVtZW50cyB8fCBmYWxzZQogICAgfSwKICAgIHNjaGVtYTogb3B0aW9uc18uc3BhY2UgPT09ICJzdmciID8gc3ZnMiA6IGh0bWw0LAogICAgcXVvdGUsCiAgICBhbHRlcm5hdGl2ZQogIH07CiAgcmV0dXJuIHN0YXRlMTQub25lKAogICAgQXJyYXkuaXNBcnJheSh0cmVlKSA/IHsgdHlwZTogInJvb3QiLCBjaGlsZHJlbjogdHJlZSB9IDogdHJlZSwKICAgIHZvaWQgMCwKICAgIHZvaWQgMAogICk7Cn0KZnVuY3Rpb24gb25lMihub2RlMiwgaW5kZXgyLCBwYXJlbnQpIHsKICByZXR1cm4gaGFuZGxlMihub2RlMiwgaW5kZXgyLCBwYXJlbnQsIHRoaXMpOwp9CmZ1bmN0aW9uIGFsbDIocGFyZW50KSB7CiAgY29uc3QgcmVzdWx0cyA9IFtdOwogIGNvbnN0IGNoaWxkcmVuMiA9IHBhcmVudCAmJiBwYXJlbnQuY2hpbGRyZW4gfHwgZW1wdHlDaGlsZHJlbjI7CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGNoaWxkcmVuMi5sZW5ndGgpIHsKICAgIHJlc3VsdHNbaW5kZXgyXSA9IHRoaXMub25lKGNoaWxkcmVuMltpbmRleDJdLCBpbmRleDIsIHBhcmVudCk7CiAgfQogIHJldHVybiByZXN1bHRzLmpvaW4oIiIpOwp9CnZhciBlbXB0eU9wdGlvbnM2LCBlbXB0eUNoYXJhY3RlclJlZmVyZW5jZXMsIGVtcHR5Q2hpbGRyZW4yOwp2YXIgaW5pdF9saWIzMCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9odG1sX3ZvaWRfZWxlbWVudHMoKTsKICAgIGluaXRfcHJvcGVydHlfaW5mb3JtYXRpb24oKTsKICAgIGluaXRfaGFuZGxlMigpOwogICAgZW1wdHlPcHRpb25zNiA9IHt9OwogICAgZW1wdHlDaGFyYWN0ZXJSZWZlcmVuY2VzID0ge307CiAgICBlbXB0eUNoaWxkcmVuMiA9IFtdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2luZGV4LmpzCnZhciBpbml0X2hhc3RfdXRpbF90b19odG1sID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMzAoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1odG1sQDE2LjAuMS9ub2RlX21vZHVsZXMvcmVtYXJrLWh0bWwvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHJlbWFya0h0bWwob3B0aW9ucykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBjb25zdCB7IGhhbmRsZXJzOiBoYW5kbGVyczIsIHNhbml0aXplOiBjbGVhbiwgLi4udG9IdG1sT3B0aW9ucyB9ID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnM3OwogIGxldCBhbGxvd0Rhbmdlcm91c0h0bWwgPSBmYWxzZTsKICBsZXQgc2NoZW1hOwogIGlmICh0eXBlb2YgY2xlYW4gPT09ICJib29sZWFuIikgewogICAgYWxsb3dEYW5nZXJvdXNIdG1sID0gIWNsZWFuOwogIH0gZWxzZSBpZiAoY2xlYW4pIHsKICAgIHNjaGVtYSA9IGNsZWFuOwogIH0KICBzZWxmMi5jb21waWxlciA9IGNvbXBpbGVyMjsKICBmdW5jdGlvbiBjb21waWxlcjIodHJlZSwgZmlsZSkgewogICAgY29uc3QgaGFzdCA9IHRvSGFzdCh0cmVlLCB7IGhhbmRsZXJzOiBoYW5kbGVyczIsIGFsbG93RGFuZ2Vyb3VzSHRtbCB9KTsKICAgIGNvbnN0IHNhZmVIYXN0ID0gYWxsb3dEYW5nZXJvdXNIdG1sID8gaGFzdCA6IHNhbml0aXplKGhhc3QsIHNjaGVtYSk7CiAgICBjb25zdCByZXN1bHQgPSB0b0h0bWwoc2FmZUhhc3QsIHsgLi4udG9IdG1sT3B0aW9ucywgYWxsb3dEYW5nZXJvdXNIdG1sIH0pOwogICAgaWYgKGZpbGUuZXh0bmFtZSkgewogICAgICBmaWxlLmV4dG5hbWUgPSAiLmh0bWwiOwogICAgfQogICAgcmV0dXJuIHRyZWUgJiYgdHJlZS50eXBlID09PSAicm9vdCIgJiYgcmVzdWx0ICYmIC9bXlxyXG5dLy50ZXN0KHJlc3VsdC5jaGFyQXQocmVzdWx0Lmxlbmd0aCAtIDEpKSA/IHJlc3VsdCArICJcbiIgOiByZXN1bHQ7CiAgfQp9CnZhciBlbXB0eU9wdGlvbnM3Owp2YXIgaW5pdF9saWIzMSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1odG1sQDE2LjAuMS9ub2RlX21vZHVsZXMvcmVtYXJrLWh0bWwvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfaGFzdF91dGlsX3Nhbml0aXplKCk7CiAgICBpbml0X21kYXN0X3V0aWxfdG9faGFzdCgpOwogICAgaW5pdF9oYXN0X3V0aWxfdG9faHRtbCgpOwogICAgZW1wdHlPcHRpb25zNyA9IHt9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWh0bWxAMTYuMC4xL25vZGVfbW9kdWxlcy9yZW1hcmstaHRtbC9pbmRleC5qcwp2YXIgaW5pdF9yZW1hcmtfaHRtbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1odG1sQDE2LjAuMS9ub2RlX21vZHVsZXMvcmVtYXJrLWh0bWwvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIzMSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLXN0cmluZ2lmeUAxMS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHJlbWFya1N0cmluZ2lmeShvcHRpb25zKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHNlbGYyLmNvbXBpbGVyID0gY29tcGlsZXIyOwogIGZ1bmN0aW9uIGNvbXBpbGVyMih0cmVlKSB7CiAgICByZXR1cm4gdG9NYXJrZG93bih0cmVlLCB7CiAgICAgIC4uLnNlbGYyLmRhdGEoInNldHRpbmdzIiksCiAgICAgIC4uLm9wdGlvbnMsCiAgICAgIC8vIE5vdGU6IHRoaXMgb3B0aW9uIGlzIG5vdCBpbiB0aGUgcmVhZG1lLgogICAgICAvLyBUaGUgZ29hbCBpcyBmb3IgaXQgdG8gYmUgc2V0IGJ5IHBsdWdpbnMgb24gYGRhdGFgIGluc3RlYWQgb2YgYmVpbmcKICAgICAgLy8gcGFzc2VkIGJ5IHVzZXJzLgogICAgICBleHRlbnNpb25zOiBzZWxmMi5kYXRhKCJ0b01hcmtkb3duRXh0ZW5zaW9ucyIpIHx8IFtdCiAgICB9KTsKICB9Cn0KdmFyIGluaXRfbGliMzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstc3RyaW5naWZ5QDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9tZGFzdF91dGlsX3RvX21hcmtkb3duKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstc3RyaW5naWZ5QDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9pbmRleC5qcwp2YXIgaW5pdF9yZW1hcmtfc3RyaW5naWZ5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLXN0cmluZ2lmeUAxMS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIzMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdHVybmRvd25ANy4yLjIvbm9kZV9tb2R1bGVzL3R1cm5kb3duL2xpYi90dXJuZG93bi5icm93c2VyLmVzLmpzCmZ1bmN0aW9uIGV4dGVuZDIoZGVzdGluYXRpb24pIHsKICBmb3IgKHZhciBpMTEgPSAxOyBpMTEgPCBhcmd1bWVudHMubGVuZ3RoOyBpMTErKykgewogICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpMTFdOwogICAgZm9yICh2YXIga2V5MiBpbiBzb3VyY2UpIHsKICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkyKSkgZGVzdGluYXRpb25ba2V5Ml0gPSBzb3VyY2Vba2V5Ml07CiAgICB9CiAgfQogIHJldHVybiBkZXN0aW5hdGlvbjsKfQpmdW5jdGlvbiByZXBlYXQyKGNoYXJhY3RlciwgY291bnQyKSB7CiAgcmV0dXJuIEFycmF5KGNvdW50MiArIDEpLmpvaW4oY2hhcmFjdGVyKTsKfQpmdW5jdGlvbiB0cmltTGVhZGluZ05ld2xpbmVzKHN0cmluZzMpIHsKICByZXR1cm4gc3RyaW5nMy5yZXBsYWNlKC9eXG4qLywgIiIpOwp9CmZ1bmN0aW9uIHRyaW1UcmFpbGluZ05ld2xpbmVzKHN0cmluZzMpIHsKICB2YXIgaW5kZXhFbmQgPSBzdHJpbmczLmxlbmd0aDsKICB3aGlsZSAoaW5kZXhFbmQgPiAwICYmIHN0cmluZzNbaW5kZXhFbmQgLSAxXSA9PT0gIlxuIikgaW5kZXhFbmQtLTsKICByZXR1cm4gc3RyaW5nMy5zdWJzdHJpbmcoMCwgaW5kZXhFbmQpOwp9CmZ1bmN0aW9uIHRyaW1OZXdsaW5lcyhzdHJpbmczKSB7CiAgcmV0dXJuIHRyaW1UcmFpbGluZ05ld2xpbmVzKHRyaW1MZWFkaW5nTmV3bGluZXMoc3RyaW5nMykpOwp9CmZ1bmN0aW9uIGlzQmxvY2sobm9kZTIpIHsKICByZXR1cm4gaXMyKG5vZGUyLCBibG9ja0VsZW1lbnRzKTsKfQpmdW5jdGlvbiBpc1ZvaWQobm9kZTIpIHsKICByZXR1cm4gaXMyKG5vZGUyLCB2b2lkRWxlbWVudHMpOwp9CmZ1bmN0aW9uIGhhc1ZvaWQobm9kZTIpIHsKICByZXR1cm4gaGFzKG5vZGUyLCB2b2lkRWxlbWVudHMpOwp9CmZ1bmN0aW9uIGlzTWVhbmluZ2Z1bFdoZW5CbGFuayhub2RlMikgewogIHJldHVybiBpczIobm9kZTIsIG1lYW5pbmdmdWxXaGVuQmxhbmtFbGVtZW50cyk7Cn0KZnVuY3Rpb24gaGFzTWVhbmluZ2Z1bFdoZW5CbGFuayhub2RlMikgewogIHJldHVybiBoYXMobm9kZTIsIG1lYW5pbmdmdWxXaGVuQmxhbmtFbGVtZW50cyk7Cn0KZnVuY3Rpb24gaXMyKG5vZGUyLCB0YWdOYW1lcykgewogIHJldHVybiB0YWdOYW1lcy5pbmRleE9mKG5vZGUyLm5vZGVOYW1lKSA+PSAwOwp9CmZ1bmN0aW9uIGhhcyhub2RlMiwgdGFnTmFtZXMpIHsKICByZXR1cm4gbm9kZTIuZ2V0RWxlbWVudHNCeVRhZ05hbWUgJiYgdGFnTmFtZXMuc29tZShmdW5jdGlvbih0YWdOYW1lKSB7CiAgICByZXR1cm4gbm9kZTIuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSkubGVuZ3RoOwogIH0pOwp9CmZ1bmN0aW9uIGNsZWFuQXR0cmlidXRlKGF0dHJpYnV0ZSkgewogIHJldHVybiBhdHRyaWJ1dGUgPyBhdHRyaWJ1dGUucmVwbGFjZSgvKFxuK1xzKikrL2csICJcbiIpIDogIiI7Cn0KZnVuY3Rpb24gUnVsZXMob3B0aW9ucykgewogIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CiAgdGhpcy5fa2VlcCA9IFtdOwogIHRoaXMuX3JlbW92ZSA9IFtdOwogIHRoaXMuYmxhbmtSdWxlID0gewogICAgcmVwbGFjZW1lbnQ6IG9wdGlvbnMuYmxhbmtSZXBsYWNlbWVudAogIH07CiAgdGhpcy5rZWVwUmVwbGFjZW1lbnQgPSBvcHRpb25zLmtlZXBSZXBsYWNlbWVudDsKICB0aGlzLmRlZmF1bHRSdWxlID0gewogICAgcmVwbGFjZW1lbnQ6IG9wdGlvbnMuZGVmYXVsdFJlcGxhY2VtZW50CiAgfTsKICB0aGlzLmFycmF5ID0gW107CiAgZm9yICh2YXIga2V5MiBpbiBvcHRpb25zLnJ1bGVzKSB0aGlzLmFycmF5LnB1c2gob3B0aW9ucy5ydWxlc1trZXkyXSk7Cn0KZnVuY3Rpb24gZmluZFJ1bGUocnVsZXMzLCBub2RlMiwgb3B0aW9ucykgewogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IHJ1bGVzMy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YXIgcnVsZSA9IHJ1bGVzM1tpMTFdOwogICAgaWYgKGZpbHRlclZhbHVlKHJ1bGUsIG5vZGUyLCBvcHRpb25zKSkgcmV0dXJuIHJ1bGU7CiAgfQogIHJldHVybiB2b2lkIDA7Cn0KZnVuY3Rpb24gZmlsdGVyVmFsdWUocnVsZSwgbm9kZTIsIG9wdGlvbnMpIHsKICB2YXIgZmlsdGVyMiA9IHJ1bGUuZmlsdGVyOwogIGlmICh0eXBlb2YgZmlsdGVyMiA9PT0gInN0cmluZyIpIHsKICAgIGlmIChmaWx0ZXIyID09PSBub2RlMi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSByZXR1cm4gdHJ1ZTsKICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyMikpIHsKICAgIGlmIChmaWx0ZXIyLmluZGV4T2Yobm9kZTIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgPiAtMSkgcmV0dXJuIHRydWU7CiAgfSBlbHNlIGlmICh0eXBlb2YgZmlsdGVyMiA9PT0gImZ1bmN0aW9uIikgewogICAgaWYgKGZpbHRlcjIuY2FsbChydWxlLCBub2RlMiwgb3B0aW9ucykpIHJldHVybiB0cnVlOwogIH0gZWxzZSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJgZmlsdGVyYCBuZWVkcyB0byBiZSBhIHN0cmluZywgYXJyYXksIG9yIGZ1bmN0aW9uIik7CiAgfQp9CmZ1bmN0aW9uIGNvbGxhcHNlV2hpdGVzcGFjZShvcHRpb25zKSB7CiAgdmFyIGVsZW1lbnQ0ID0gb3B0aW9ucy5lbGVtZW50OwogIHZhciBpc0Jsb2NrMiA9IG9wdGlvbnMuaXNCbG9jazsKICB2YXIgaXNWb2lkMiA9IG9wdGlvbnMuaXNWb2lkOwogIHZhciBpc1ByZSA9IG9wdGlvbnMuaXNQcmUgfHwgZnVuY3Rpb24obm9kZTMpIHsKICAgIHJldHVybiBub2RlMy5ub2RlTmFtZSA9PT0gIlBSRSI7CiAgfTsKICBpZiAoIWVsZW1lbnQ0LmZpcnN0Q2hpbGQgfHwgaXNQcmUoZWxlbWVudDQpKSByZXR1cm47CiAgdmFyIHByZXZUZXh0ID0gbnVsbDsKICB2YXIga2VlcExlYWRpbmdXcyA9IGZhbHNlOwogIHZhciBwcmV2ID0gbnVsbDsKICB2YXIgbm9kZTIgPSBuZXh0KHByZXYsIGVsZW1lbnQ0LCBpc1ByZSk7CiAgd2hpbGUgKG5vZGUyICE9PSBlbGVtZW50NCkgewogICAgaWYgKG5vZGUyLm5vZGVUeXBlID09PSAzIHx8IG5vZGUyLm5vZGVUeXBlID09PSA0KSB7CiAgICAgIHZhciB0ZXh0OSA9IG5vZGUyLmRhdGEucmVwbGFjZSgvWyBcclxuXHRdKy9nLCAiICIpOwogICAgICBpZiAoKCFwcmV2VGV4dCB8fCAvICQvLnRlc3QocHJldlRleHQuZGF0YSkpICYmICFrZWVwTGVhZGluZ1dzICYmIHRleHQ5WzBdID09PSAiICIpIHsKICAgICAgICB0ZXh0OSA9IHRleHQ5LnN1YnN0cigxKTsKICAgICAgfQogICAgICBpZiAoIXRleHQ5KSB7CiAgICAgICAgbm9kZTIgPSByZW1vdmUobm9kZTIpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIG5vZGUyLmRhdGEgPSB0ZXh0OTsKICAgICAgcHJldlRleHQgPSBub2RlMjsKICAgIH0gZWxzZSBpZiAobm9kZTIubm9kZVR5cGUgPT09IDEpIHsKICAgICAgaWYgKGlzQmxvY2syKG5vZGUyKSB8fCBub2RlMi5ub2RlTmFtZSA9PT0gIkJSIikgewogICAgICAgIGlmIChwcmV2VGV4dCkgewogICAgICAgICAgcHJldlRleHQuZGF0YSA9IHByZXZUZXh0LmRhdGEucmVwbGFjZSgvICQvLCAiIik7CiAgICAgICAgfQogICAgICAgIHByZXZUZXh0ID0gbnVsbDsKICAgICAgICBrZWVwTGVhZGluZ1dzID0gZmFsc2U7CiAgICAgIH0gZWxzZSBpZiAoaXNWb2lkMihub2RlMikgfHwgaXNQcmUobm9kZTIpKSB7CiAgICAgICAgcHJldlRleHQgPSBudWxsOwogICAgICAgIGtlZXBMZWFkaW5nV3MgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKHByZXZUZXh0KSB7CiAgICAgICAga2VlcExlYWRpbmdXcyA9IGZhbHNlOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBub2RlMiA9IHJlbW92ZShub2RlMik7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgdmFyIG5leHROb2RlID0gbmV4dChwcmV2LCBub2RlMiwgaXNQcmUpOwogICAgcHJldiA9IG5vZGUyOwogICAgbm9kZTIgPSBuZXh0Tm9kZTsKICB9CiAgaWYgKHByZXZUZXh0KSB7CiAgICBwcmV2VGV4dC5kYXRhID0gcHJldlRleHQuZGF0YS5yZXBsYWNlKC8gJC8sICIiKTsKICAgIGlmICghcHJldlRleHQuZGF0YSkgewogICAgICByZW1vdmUocHJldlRleHQpOwogICAgfQogIH0KfQpmdW5jdGlvbiByZW1vdmUobm9kZTIpIHsKICB2YXIgbmV4dDIgPSBub2RlMi5uZXh0U2libGluZyB8fCBub2RlMi5wYXJlbnROb2RlOwogIG5vZGUyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZTIpOwogIHJldHVybiBuZXh0MjsKfQpmdW5jdGlvbiBuZXh0KHByZXYsIGN1cnJlbnQsIGlzUHJlKSB7CiAgaWYgKHByZXYgJiYgcHJldi5wYXJlbnROb2RlID09PSBjdXJyZW50IHx8IGlzUHJlKGN1cnJlbnQpKSB7CiAgICByZXR1cm4gY3VycmVudC5uZXh0U2libGluZyB8fCBjdXJyZW50LnBhcmVudE5vZGU7CiAgfQogIHJldHVybiBjdXJyZW50LmZpcnN0Q2hpbGQgfHwgY3VycmVudC5uZXh0U2libGluZyB8fCBjdXJyZW50LnBhcmVudE5vZGU7Cn0KZnVuY3Rpb24gY2FuUGFyc2VIVE1MTmF0aXZlbHkoKSB7CiAgdmFyIFBhcnNlcjIgPSByb290NS5ET01QYXJzZXI7CiAgdmFyIGNhblBhcnNlID0gZmFsc2U7CiAgdHJ5IHsKICAgIGlmIChuZXcgUGFyc2VyMigpLnBhcnNlRnJvbVN0cmluZygiIiwgInRleHQvaHRtbCIpKSB7CiAgICAgIGNhblBhcnNlID0gdHJ1ZTsKICAgIH0KICB9IGNhdGNoIChlMTEpIHsKICB9CiAgcmV0dXJuIGNhblBhcnNlOwp9CmZ1bmN0aW9uIGNyZWF0ZUhUTUxQYXJzZXIoKSB7CiAgdmFyIFBhcnNlcjIgPSBmdW5jdGlvbigpIHsKICB9OwogIHsKICAgIGlmIChzaG91bGRVc2VBY3RpdmVYKCkpIHsKICAgICAgUGFyc2VyMi5wcm90b3R5cGUucGFyc2VGcm9tU3RyaW5nID0gZnVuY3Rpb24oc3RyaW5nMykgewogICAgICAgIHZhciBkb2MgPSBuZXcgd2luZG93LkFjdGl2ZVhPYmplY3QoImh0bWxmaWxlIik7CiAgICAgICAgZG9jLmRlc2lnbk1vZGUgPSAib24iOwogICAgICAgIGRvYy5vcGVuKCk7CiAgICAgICAgZG9jLndyaXRlKHN0cmluZzMpOwogICAgICAgIGRvYy5jbG9zZSgpOwogICAgICAgIHJldHVybiBkb2M7CiAgICAgIH07CiAgICB9IGVsc2UgewogICAgICBQYXJzZXIyLnByb3RvdHlwZS5wYXJzZUZyb21TdHJpbmcgPSBmdW5jdGlvbihzdHJpbmczKSB7CiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIik7CiAgICAgICAgZG9jLm9wZW4oKTsKICAgICAgICBkb2Mud3JpdGUoc3RyaW5nMyk7CiAgICAgICAgZG9jLmNsb3NlKCk7CiAgICAgICAgcmV0dXJuIGRvYzsKICAgICAgfTsKICAgIH0KICB9CiAgcmV0dXJuIFBhcnNlcjI7Cn0KZnVuY3Rpb24gc2hvdWxkVXNlQWN0aXZlWCgpIHsKICB2YXIgdXNlQWN0aXZlWCA9IGZhbHNlOwogIHRyeSB7CiAgICBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLm9wZW4oKTsKICB9IGNhdGNoIChlMTEpIHsKICAgIGlmIChyb290NS5BY3RpdmVYT2JqZWN0KSB1c2VBY3RpdmVYID0gdHJ1ZTsKICB9CiAgcmV0dXJuIHVzZUFjdGl2ZVg7Cn0KZnVuY3Rpb24gUm9vdE5vZGUoaW5wdXQsIG9wdGlvbnMpIHsKICB2YXIgcm9vdDY7CiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gInN0cmluZyIpIHsKICAgIHZhciBkb2MgPSBodG1sUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKAogICAgICAvLyBET00gcGFyc2VycyBhcnJhbmdlIGVsZW1lbnRzIGluIHRoZSA8aGVhZD4gYW5kIDxib2R5Pi4KICAgICAgLy8gV3JhcHBpbmcgaW4gYSBjdXN0b20gZWxlbWVudCBlbnN1cmVzIGVsZW1lbnRzIGFyZSByZWxpYWJseSBhcnJhbmdlZCBpbgogICAgICAvLyBhIHNpbmdsZSBlbGVtZW50LgogICAgICAnPHgtdHVybmRvd24gaWQ9InR1cm5kb3duLXJvb3QiPicgKyBpbnB1dCArICI8L3gtdHVybmRvd24+IiwKICAgICAgInRleHQvaHRtbCIKICAgICk7CiAgICByb290NiA9IGRvYy5nZXRFbGVtZW50QnlJZCgidHVybmRvd24tcm9vdCIpOwogIH0gZWxzZSB7CiAgICByb290NiA9IGlucHV0LmNsb25lTm9kZSh0cnVlKTsKICB9CiAgY29sbGFwc2VXaGl0ZXNwYWNlKHsKICAgIGVsZW1lbnQ6IHJvb3Q2LAogICAgaXNCbG9jaywKICAgIGlzVm9pZCwKICAgIGlzUHJlOiBvcHRpb25zLnByZWZvcm1hdHRlZENvZGUgPyBpc1ByZU9yQ29kZSA6IG51bGwKICB9KTsKICByZXR1cm4gcm9vdDY7Cn0KZnVuY3Rpb24gaHRtbFBhcnNlcigpIHsKICBfaHRtbFBhcnNlciA9IF9odG1sUGFyc2VyIHx8IG5ldyBIVE1MUGFyc2VyKCk7CiAgcmV0dXJuIF9odG1sUGFyc2VyOwp9CmZ1bmN0aW9uIGlzUHJlT3JDb2RlKG5vZGUyKSB7CiAgcmV0dXJuIG5vZGUyLm5vZGVOYW1lID09PSAiUFJFIiB8fCBub2RlMi5ub2RlTmFtZSA9PT0gIkNPREUiOwp9CmZ1bmN0aW9uIE5vZGUyKG5vZGUyLCBvcHRpb25zKSB7CiAgbm9kZTIuaXNCbG9jayA9IGlzQmxvY2sobm9kZTIpOwogIG5vZGUyLmlzQ29kZSA9IG5vZGUyLm5vZGVOYW1lID09PSAiQ09ERSIgfHwgbm9kZTIucGFyZW50Tm9kZS5pc0NvZGU7CiAgbm9kZTIuaXNCbGFuayA9IGlzQmxhbmsobm9kZTIpOwogIG5vZGUyLmZsYW5raW5nV2hpdGVzcGFjZSA9IGZsYW5raW5nV2hpdGVzcGFjZShub2RlMiwgb3B0aW9ucyk7CiAgcmV0dXJuIG5vZGUyOwp9CmZ1bmN0aW9uIGlzQmxhbmsobm9kZTIpIHsKICByZXR1cm4gIWlzVm9pZChub2RlMikgJiYgIWlzTWVhbmluZ2Z1bFdoZW5CbGFuayhub2RlMikgJiYgL15ccyokL2kudGVzdChub2RlMi50ZXh0Q29udGVudCkgJiYgIWhhc1ZvaWQobm9kZTIpICYmICFoYXNNZWFuaW5nZnVsV2hlbkJsYW5rKG5vZGUyKTsKfQpmdW5jdGlvbiBmbGFua2luZ1doaXRlc3BhY2Uobm9kZTIsIG9wdGlvbnMpIHsKICBpZiAobm9kZTIuaXNCbG9jayB8fCBvcHRpb25zLnByZWZvcm1hdHRlZENvZGUgJiYgbm9kZTIuaXNDb2RlKSB7CiAgICByZXR1cm4geyBsZWFkaW5nOiAiIiwgdHJhaWxpbmc6ICIiIH07CiAgfQogIHZhciBlZGdlcyA9IGVkZ2VXaGl0ZXNwYWNlKG5vZGUyLnRleHRDb250ZW50KTsKICBpZiAoZWRnZXMubGVhZGluZ0FzY2lpICYmIGlzRmxhbmtlZEJ5V2hpdGVzcGFjZSgibGVmdCIsIG5vZGUyLCBvcHRpb25zKSkgewogICAgZWRnZXMubGVhZGluZyA9IGVkZ2VzLmxlYWRpbmdOb25Bc2NpaTsKICB9CiAgaWYgKGVkZ2VzLnRyYWlsaW5nQXNjaWkgJiYgaXNGbGFua2VkQnlXaGl0ZXNwYWNlKCJyaWdodCIsIG5vZGUyLCBvcHRpb25zKSkgewogICAgZWRnZXMudHJhaWxpbmcgPSBlZGdlcy50cmFpbGluZ05vbkFzY2lpOwogIH0KICByZXR1cm4geyBsZWFkaW5nOiBlZGdlcy5sZWFkaW5nLCB0cmFpbGluZzogZWRnZXMudHJhaWxpbmcgfTsKfQpmdW5jdGlvbiBlZGdlV2hpdGVzcGFjZShzdHJpbmczKSB7CiAgdmFyIG02ID0gc3RyaW5nMy5tYXRjaCgvXigoWyBcdFxyXG5dKikoXHMqKSkoPzooPz1cUylbXHNcU10qXFMpPygoXHMqPykoWyBcdFxyXG5dKikpJC8pOwogIHJldHVybiB7CiAgICBsZWFkaW5nOiBtNlsxXSwKICAgIC8vIHdob2xlIHN0cmluZyBmb3Igd2hpdGVzcGFjZS1vbmx5IHN0cmluZ3MKICAgIGxlYWRpbmdBc2NpaTogbTZbMl0sCiAgICBsZWFkaW5nTm9uQXNjaWk6IG02WzNdLAogICAgdHJhaWxpbmc6IG02WzRdLAogICAgLy8gZW1wdHkgZm9yIHdoaXRlc3BhY2Utb25seSBzdHJpbmdzCiAgICB0cmFpbGluZ05vbkFzY2lpOiBtNls1XSwKICAgIHRyYWlsaW5nQXNjaWk6IG02WzZdCiAgfTsKfQpmdW5jdGlvbiBpc0ZsYW5rZWRCeVdoaXRlc3BhY2Uoc2lkZSwgbm9kZTIsIG9wdGlvbnMpIHsKICB2YXIgc2libGluZzsKICB2YXIgcmVnRXhwOwogIHZhciBpc0ZsYW5rZWQ7CiAgaWYgKHNpZGUgPT09ICJsZWZ0IikgewogICAgc2libGluZyA9IG5vZGUyLnByZXZpb3VzU2libGluZzsKICAgIHJlZ0V4cCA9IC8gJC87CiAgfSBlbHNlIHsKICAgIHNpYmxpbmcgPSBub2RlMi5uZXh0U2libGluZzsKICAgIHJlZ0V4cCA9IC9eIC87CiAgfQogIGlmIChzaWJsaW5nKSB7CiAgICBpZiAoc2libGluZy5ub2RlVHlwZSA9PT0gMykgewogICAgICBpc0ZsYW5rZWQgPSByZWdFeHAudGVzdChzaWJsaW5nLm5vZGVWYWx1ZSk7CiAgICB9IGVsc2UgaWYgKG9wdGlvbnMucHJlZm9ybWF0dGVkQ29kZSAmJiBzaWJsaW5nLm5vZGVOYW1lID09PSAiQ09ERSIpIHsKICAgICAgaXNGbGFua2VkID0gZmFsc2U7CiAgICB9IGVsc2UgaWYgKHNpYmxpbmcubm9kZVR5cGUgPT09IDEgJiYgIWlzQmxvY2soc2libGluZykpIHsKICAgICAgaXNGbGFua2VkID0gcmVnRXhwLnRlc3Qoc2libGluZy50ZXh0Q29udGVudCk7CiAgICB9CiAgfQogIHJldHVybiBpc0ZsYW5rZWQ7Cn0KZnVuY3Rpb24gVHVybmRvd25TZXJ2aWNlKG9wdGlvbnMpIHsKICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVHVybmRvd25TZXJ2aWNlKSkgcmV0dXJuIG5ldyBUdXJuZG93blNlcnZpY2Uob3B0aW9ucyk7CiAgdmFyIGRlZmF1bHRzID0gewogICAgcnVsZXMsCiAgICBoZWFkaW5nU3R5bGU6ICJzZXRleHQiLAogICAgaHI6ICIqICogKiIsCiAgICBidWxsZXRMaXN0TWFya2VyOiAiKiIsCiAgICBjb2RlQmxvY2tTdHlsZTogImluZGVudGVkIiwKICAgIGZlbmNlOiAiYGBgIiwKICAgIGVtRGVsaW1pdGVyOiAiXyIsCiAgICBzdHJvbmdEZWxpbWl0ZXI6ICIqKiIsCiAgICBsaW5rU3R5bGU6ICJpbmxpbmVkIiwKICAgIGxpbmtSZWZlcmVuY2VTdHlsZTogImZ1bGwiLAogICAgYnI6ICIgICIsCiAgICBwcmVmb3JtYXR0ZWRDb2RlOiBmYWxzZSwKICAgIGJsYW5rUmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMikgewogICAgICByZXR1cm4gbm9kZTIuaXNCbG9jayA/ICJcblxuIiA6ICIiOwogICAgfSwKICAgIGtlZXBSZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgIHJldHVybiBub2RlMi5pc0Jsb2NrID8gIlxuXG4iICsgbm9kZTIub3V0ZXJIVE1MICsgIlxuXG4iIDogbm9kZTIub3V0ZXJIVE1MOwogICAgfSwKICAgIGRlZmF1bHRSZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgIHJldHVybiBub2RlMi5pc0Jsb2NrID8gIlxuXG4iICsgY29udGVudDMgKyAiXG5cbiIgOiBjb250ZW50MzsKICAgIH0KICB9OwogIHRoaXMub3B0aW9ucyA9IGV4dGVuZDIoe30sIGRlZmF1bHRzLCBvcHRpb25zKTsKICB0aGlzLnJ1bGVzID0gbmV3IFJ1bGVzKHRoaXMub3B0aW9ucyk7Cn0KZnVuY3Rpb24gcHJvY2VzczMocGFyZW50Tm9kZSkgewogIHZhciBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHJlZHVjZTIuY2FsbChwYXJlbnROb2RlLmNoaWxkTm9kZXMsIGZ1bmN0aW9uKG91dHB1dCwgbm9kZTIpIHsKICAgIG5vZGUyID0gbmV3IE5vZGUyKG5vZGUyLCBzZWxmMi5vcHRpb25zKTsKICAgIHZhciByZXBsYWNlbWVudCA9ICIiOwogICAgaWYgKG5vZGUyLm5vZGVUeXBlID09PSAzKSB7CiAgICAgIHJlcGxhY2VtZW50ID0gbm9kZTIuaXNDb2RlID8gbm9kZTIubm9kZVZhbHVlIDogc2VsZjIuZXNjYXBlKG5vZGUyLm5vZGVWYWx1ZSk7CiAgICB9IGVsc2UgaWYgKG5vZGUyLm5vZGVUeXBlID09PSAxKSB7CiAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnRGb3JOb2RlLmNhbGwoc2VsZjIsIG5vZGUyKTsKICAgIH0KICAgIHJldHVybiBqb2luMyhvdXRwdXQsIHJlcGxhY2VtZW50KTsKICB9LCAiIik7Cn0KZnVuY3Rpb24gcG9zdFByb2Nlc3Mob3V0cHV0KSB7CiAgdmFyIHNlbGYyID0gdGhpczsKICB0aGlzLnJ1bGVzLmZvckVhY2goZnVuY3Rpb24ocnVsZSkgewogICAgaWYgKHR5cGVvZiBydWxlLmFwcGVuZCA9PT0gImZ1bmN0aW9uIikgewogICAgICBvdXRwdXQgPSBqb2luMyhvdXRwdXQsIHJ1bGUuYXBwZW5kKHNlbGYyLm9wdGlvbnMpKTsKICAgIH0KICB9KTsKICByZXR1cm4gb3V0cHV0LnJlcGxhY2UoL15bXHRcclxuXSsvLCAiIikucmVwbGFjZSgvW1x0XHJcblxzXSskLywgIiIpOwp9CmZ1bmN0aW9uIHJlcGxhY2VtZW50Rm9yTm9kZShub2RlMikgewogIHZhciBydWxlID0gdGhpcy5ydWxlcy5mb3JOb2RlKG5vZGUyKTsKICB2YXIgY29udGVudDMgPSBwcm9jZXNzMy5jYWxsKHRoaXMsIG5vZGUyKTsKICB2YXIgd2hpdGVzcGFjZTIgPSBub2RlMi5mbGFua2luZ1doaXRlc3BhY2U7CiAgaWYgKHdoaXRlc3BhY2UyLmxlYWRpbmcgfHwgd2hpdGVzcGFjZTIudHJhaWxpbmcpIGNvbnRlbnQzID0gY29udGVudDMudHJpbSgpOwogIHJldHVybiB3aGl0ZXNwYWNlMi5sZWFkaW5nICsgcnVsZS5yZXBsYWNlbWVudChjb250ZW50Mywgbm9kZTIsIHRoaXMub3B0aW9ucykgKyB3aGl0ZXNwYWNlMi50cmFpbGluZzsKfQpmdW5jdGlvbiBqb2luMyhvdXRwdXQsIHJlcGxhY2VtZW50KSB7CiAgdmFyIHMxID0gdHJpbVRyYWlsaW5nTmV3bGluZXMob3V0cHV0KTsKICB2YXIgczIyID0gdHJpbUxlYWRpbmdOZXdsaW5lcyhyZXBsYWNlbWVudCk7CiAgdmFyIG5scyA9IE1hdGgubWF4KG91dHB1dC5sZW5ndGggLSBzMS5sZW5ndGgsIHJlcGxhY2VtZW50Lmxlbmd0aCAtIHMyMi5sZW5ndGgpOwogIHZhciBzZXBhcmF0b3IgPSAiXG5cbiIuc3Vic3RyaW5nKDAsIG5scyk7CiAgcmV0dXJuIHMxICsgc2VwYXJhdG9yICsgczIyOwp9CmZ1bmN0aW9uIGNhbkNvbnZlcnQoaW5wdXQpIHsKICByZXR1cm4gaW5wdXQgIT0gbnVsbCAmJiAodHlwZW9mIGlucHV0ID09PSAic3RyaW5nIiB8fCBpbnB1dC5ub2RlVHlwZSAmJiAoaW5wdXQubm9kZVR5cGUgPT09IDEgfHwgaW5wdXQubm9kZVR5cGUgPT09IDkgfHwgaW5wdXQubm9kZVR5cGUgPT09IDExKSk7Cn0KdmFyIGJsb2NrRWxlbWVudHMsIHZvaWRFbGVtZW50cywgbWVhbmluZ2Z1bFdoZW5CbGFua0VsZW1lbnRzLCBydWxlcywgcm9vdDUsIEhUTUxQYXJzZXIsIF9odG1sUGFyc2VyLCByZWR1Y2UyLCBlc2NhcGVzLCB0dXJuZG93bl9icm93c2VyX2VzX2RlZmF1bHQ7CnZhciBpbml0X3R1cm5kb3duX2Jyb3dzZXJfZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS90dXJuZG93bkA3LjIuMi9ub2RlX21vZHVsZXMvdHVybmRvd24vbGliL3R1cm5kb3duLmJyb3dzZXIuZXMuanMiKCkgewogICAgYmxvY2tFbGVtZW50cyA9IFsKICAgICAgIkFERFJFU1MiLAogICAgICAiQVJUSUNMRSIsCiAgICAgICJBU0lERSIsCiAgICAgICJBVURJTyIsCiAgICAgICJCTE9DS1FVT1RFIiwKICAgICAgIkJPRFkiLAogICAgICAiQ0FOVkFTIiwKICAgICAgIkNFTlRFUiIsCiAgICAgICJERCIsCiAgICAgICJESVIiLAogICAgICAiRElWIiwKICAgICAgIkRMIiwKICAgICAgIkRUIiwKICAgICAgIkZJRUxEU0VUIiwKICAgICAgIkZJR0NBUFRJT04iLAogICAgICAiRklHVVJFIiwKICAgICAgIkZPT1RFUiIsCiAgICAgICJGT1JNIiwKICAgICAgIkZSQU1FU0VUIiwKICAgICAgIkgxIiwKICAgICAgIkgyIiwKICAgICAgIkgzIiwKICAgICAgIkg0IiwKICAgICAgIkg1IiwKICAgICAgIkg2IiwKICAgICAgIkhFQURFUiIsCiAgICAgICJIR1JPVVAiLAogICAgICAiSFIiLAogICAgICAiSFRNTCIsCiAgICAgICJJU0lOREVYIiwKICAgICAgIkxJIiwKICAgICAgIk1BSU4iLAogICAgICAiTUVOVSIsCiAgICAgICJOQVYiLAogICAgICAiTk9GUkFNRVMiLAogICAgICAiTk9TQ1JJUFQiLAogICAgICAiT0wiLAogICAgICAiT1VUUFVUIiwKICAgICAgIlAiLAogICAgICAiUFJFIiwKICAgICAgIlNFQ1RJT04iLAogICAgICAiVEFCTEUiLAogICAgICAiVEJPRFkiLAogICAgICAiVEQiLAogICAgICAiVEZPT1QiLAogICAgICAiVEgiLAogICAgICAiVEhFQUQiLAogICAgICAiVFIiLAogICAgICAiVUwiCiAgICBdOwogICAgdm9pZEVsZW1lbnRzID0gWwogICAgICAiQVJFQSIsCiAgICAgICJCQVNFIiwKICAgICAgIkJSIiwKICAgICAgIkNPTCIsCiAgICAgICJDT01NQU5EIiwKICAgICAgIkVNQkVEIiwKICAgICAgIkhSIiwKICAgICAgIklNRyIsCiAgICAgICJJTlBVVCIsCiAgICAgICJLRVlHRU4iLAogICAgICAiTElOSyIsCiAgICAgICJNRVRBIiwKICAgICAgIlBBUkFNIiwKICAgICAgIlNPVVJDRSIsCiAgICAgICJUUkFDSyIsCiAgICAgICJXQlIiCiAgICBdOwogICAgbWVhbmluZ2Z1bFdoZW5CbGFua0VsZW1lbnRzID0gWwogICAgICAiQSIsCiAgICAgICJUQUJMRSIsCiAgICAgICJUSEVBRCIsCiAgICAgICJUQk9EWSIsCiAgICAgICJURk9PVCIsCiAgICAgICJUSCIsCiAgICAgICJURCIsCiAgICAgICJJRlJBTUUiLAogICAgICAiU0NSSVBUIiwKICAgICAgIkFVRElPIiwKICAgICAgIlZJREVPIgogICAgXTsKICAgIHJ1bGVzID0ge307CiAgICBydWxlcy5wYXJhZ3JhcGggPSB7CiAgICAgIGZpbHRlcjogInAiLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMpIHsKICAgICAgICByZXR1cm4gIlxuXG4iICsgY29udGVudDMgKyAiXG5cbiI7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5saW5lQnJlYWsgPSB7CiAgICAgIGZpbHRlcjogImJyIiwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiBvcHRpb25zLmJyICsgIlxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmhlYWRpbmcgPSB7CiAgICAgIGZpbHRlcjogWyJoMSIsICJoMiIsICJoMyIsICJoNCIsICJoNSIsICJoNiJdLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIGhMZXZlbCA9IE51bWJlcihub2RlMi5ub2RlTmFtZS5jaGFyQXQoMSkpOwogICAgICAgIGlmIChvcHRpb25zLmhlYWRpbmdTdHlsZSA9PT0gInNldGV4dCIgJiYgaExldmVsIDwgMykgewogICAgICAgICAgdmFyIHVuZGVybGluZSA9IHJlcGVhdDIoaExldmVsID09PSAxID8gIj0iIDogIi0iLCBjb250ZW50My5sZW5ndGgpOwogICAgICAgICAgcmV0dXJuICJcblxuIiArIGNvbnRlbnQzICsgIlxuIiArIHVuZGVybGluZSArICJcblxuIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuICJcblxuIiArIHJlcGVhdDIoIiMiLCBoTGV2ZWwpICsgIiAiICsgY29udGVudDMgKyAiXG5cbiI7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgcnVsZXMuYmxvY2txdW90ZSA9IHsKICAgICAgZmlsdGVyOiAiYmxvY2txdW90ZSIsCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50MykgewogICAgICAgIGNvbnRlbnQzID0gdHJpbU5ld2xpbmVzKGNvbnRlbnQzKS5yZXBsYWNlKC9eL2dtLCAiPiAiKTsKICAgICAgICByZXR1cm4gIlxuXG4iICsgY29udGVudDMgKyAiXG5cbiI7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5saXN0ID0gewogICAgICBmaWx0ZXI6IFsidWwiLCAib2wiXSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMikgewogICAgICAgIHZhciBwYXJlbnQgPSBub2RlMi5wYXJlbnROb2RlOwogICAgICAgIGlmIChwYXJlbnQubm9kZU5hbWUgPT09ICJMSSIgJiYgcGFyZW50Lmxhc3RFbGVtZW50Q2hpbGQgPT09IG5vZGUyKSB7CiAgICAgICAgICByZXR1cm4gIlxuIiArIGNvbnRlbnQzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gIlxuXG4iICsgY29udGVudDMgKyAiXG5cbiI7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgcnVsZXMubGlzdEl0ZW0gPSB7CiAgICAgIGZpbHRlcjogImxpIiwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMiwgb3B0aW9ucykgewogICAgICAgIHZhciBwcmVmaXg0ID0gb3B0aW9ucy5idWxsZXRMaXN0TWFya2VyICsgIiAgICI7CiAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7CiAgICAgICAgaWYgKHBhcmVudC5ub2RlTmFtZSA9PT0gIk9MIikgewogICAgICAgICAgdmFyIHN0YXJ0ID0gcGFyZW50LmdldEF0dHJpYnV0ZSgic3RhcnQiKTsKICAgICAgICAgIHZhciBpbmRleDIgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHBhcmVudC5jaGlsZHJlbiwgbm9kZTIpOwogICAgICAgICAgcHJlZml4NCA9IChzdGFydCA/IE51bWJlcihzdGFydCkgKyBpbmRleDIgOiBpbmRleDIgKyAxKSArICIuICAiOwogICAgICAgIH0KICAgICAgICB2YXIgaXNQYXJhZ3JhcGggPSAvXG4kLy50ZXN0KGNvbnRlbnQzKTsKICAgICAgICBjb250ZW50MyA9IHRyaW1OZXdsaW5lcyhjb250ZW50MykgKyAoaXNQYXJhZ3JhcGggPyAiXG4iIDogIiIpOwogICAgICAgIGNvbnRlbnQzID0gY29udGVudDMucmVwbGFjZSgvXG4vZ20sICJcbiIgKyAiICIucmVwZWF0KHByZWZpeDQubGVuZ3RoKSk7CiAgICAgICAgcmV0dXJuIHByZWZpeDQgKyBjb250ZW50MyArIChub2RlMi5uZXh0U2libGluZyA/ICJcbiIgOiAiIik7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5pbmRlbnRlZENvZGVCbG9jayA9IHsKICAgICAgZmlsdGVyOiBmdW5jdGlvbihub2RlMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiBvcHRpb25zLmNvZGVCbG9ja1N0eWxlID09PSAiaW5kZW50ZWQiICYmIG5vZGUyLm5vZGVOYW1lID09PSAiUFJFIiAmJiBub2RlMi5maXJzdENoaWxkICYmIG5vZGUyLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT09ICJDT0RFIjsKICAgICAgfSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiAiXG5cbiAgICAiICsgbm9kZTIuZmlyc3RDaGlsZC50ZXh0Q29udGVudC5yZXBsYWNlKC9cbi9nLCAiXG4gICAgIikgKyAiXG5cbiI7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5mZW5jZWRDb2RlQmxvY2sgPSB7CiAgICAgIGZpbHRlcjogZnVuY3Rpb24obm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gb3B0aW9ucy5jb2RlQmxvY2tTdHlsZSA9PT0gImZlbmNlZCIgJiYgbm9kZTIubm9kZU5hbWUgPT09ICJQUkUiICYmIG5vZGUyLmZpcnN0Q2hpbGQgJiYgbm9kZTIuZmlyc3RDaGlsZC5ub2RlTmFtZSA9PT0gIkNPREUiOwogICAgICB9LAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIGNsYXNzTmFtZSA9IG5vZGUyLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpIHx8ICIiOwogICAgICAgIHZhciBsYW5ndWFnZSA9IChjbGFzc05hbWUubWF0Y2goL2xhbmd1YWdlLShcUyspLykgfHwgW251bGwsICIiXSlbMV07CiAgICAgICAgdmFyIGNvZGU0ID0gbm9kZTIuZmlyc3RDaGlsZC50ZXh0Q29udGVudDsKICAgICAgICB2YXIgZmVuY2VDaGFyID0gb3B0aW9ucy5mZW5jZS5jaGFyQXQoMCk7CiAgICAgICAgdmFyIGZlbmNlU2l6ZSA9IDM7CiAgICAgICAgdmFyIGZlbmNlSW5Db2RlUmVnZXggPSBuZXcgUmVnRXhwKCJeIiArIGZlbmNlQ2hhciArICJ7Myx9IiwgImdtIik7CiAgICAgICAgdmFyIG1hdGNoMjsKICAgICAgICB3aGlsZSAobWF0Y2gyID0gZmVuY2VJbkNvZGVSZWdleC5leGVjKGNvZGU0KSkgewogICAgICAgICAgaWYgKG1hdGNoMlswXS5sZW5ndGggPj0gZmVuY2VTaXplKSB7CiAgICAgICAgICAgIGZlbmNlU2l6ZSA9IG1hdGNoMlswXS5sZW5ndGggKyAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgZmVuY2UzID0gcmVwZWF0MihmZW5jZUNoYXIsIGZlbmNlU2l6ZSk7CiAgICAgICAgcmV0dXJuICJcblxuIiArIGZlbmNlMyArIGxhbmd1YWdlICsgIlxuIiArIGNvZGU0LnJlcGxhY2UoL1xuJC8sICIiKSArICJcbiIgKyBmZW5jZTMgKyAiXG5cbiI7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5ob3Jpem9udGFsUnVsZSA9IHsKICAgICAgZmlsdGVyOiAiaHIiLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuICJcblxuIiArIG9wdGlvbnMuaHIgKyAiXG5cbiI7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5pbmxpbmVMaW5rID0gewogICAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMubGlua1N0eWxlID09PSAiaW5saW5lZCIgJiYgbm9kZTIubm9kZU5hbWUgPT09ICJBIiAmJiBub2RlMi5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICAgICAgfSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMikgewogICAgICAgIHZhciBocmVmID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgICAgICAgaWYgKGhyZWYpIGhyZWYgPSBocmVmLnJlcGxhY2UoLyhbKCldKS9nLCAiXFwkMSIpOwogICAgICAgIHZhciB0aXRsZSA9IGNsZWFuQXR0cmlidXRlKG5vZGUyLmdldEF0dHJpYnV0ZSgidGl0bGUiKSk7CiAgICAgICAgaWYgKHRpdGxlKSB0aXRsZSA9ICcgIicgKyB0aXRsZS5yZXBsYWNlKC8iL2csICdcXCInKSArICciJzsKICAgICAgICByZXR1cm4gIlsiICsgY29udGVudDMgKyAiXSgiICsgaHJlZiArIHRpdGxlICsgIikiOwogICAgICB9CiAgICB9OwogICAgcnVsZXMucmVmZXJlbmNlTGluayA9IHsKICAgICAgZmlsdGVyOiBmdW5jdGlvbihub2RlMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiBvcHRpb25zLmxpbmtTdHlsZSA9PT0gInJlZmVyZW5jZWQiICYmIG5vZGUyLm5vZGVOYW1lID09PSAiQSIgJiYgbm9kZTIuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgICAgIH0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgaHJlZiA9IG5vZGUyLmdldEF0dHJpYnV0ZSgiaHJlZiIpOwogICAgICAgIHZhciB0aXRsZSA9IGNsZWFuQXR0cmlidXRlKG5vZGUyLmdldEF0dHJpYnV0ZSgidGl0bGUiKSk7CiAgICAgICAgaWYgKHRpdGxlKSB0aXRsZSA9ICcgIicgKyB0aXRsZSArICciJzsKICAgICAgICB2YXIgcmVwbGFjZW1lbnQ7CiAgICAgICAgdmFyIHJlZmVyZW5jZTsKICAgICAgICBzd2l0Y2ggKG9wdGlvbnMubGlua1JlZmVyZW5jZVN0eWxlKSB7CiAgICAgICAgICBjYXNlICJjb2xsYXBzZWQiOgogICAgICAgICAgICByZXBsYWNlbWVudCA9ICJbIiArIGNvbnRlbnQzICsgIl1bXSI7CiAgICAgICAgICAgIHJlZmVyZW5jZSA9ICJbIiArIGNvbnRlbnQzICsgIl06ICIgKyBocmVmICsgdGl0bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAic2hvcnRjdXQiOgogICAgICAgICAgICByZXBsYWNlbWVudCA9ICJbIiArIGNvbnRlbnQzICsgIl0iOwogICAgICAgICAgICByZWZlcmVuY2UgPSAiWyIgKyBjb250ZW50MyArICJdOiAiICsgaHJlZiArIHRpdGxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHZhciBpZCA9IHRoaXMucmVmZXJlbmNlcy5sZW5ndGggKyAxOwogICAgICAgICAgICByZXBsYWNlbWVudCA9ICJbIiArIGNvbnRlbnQzICsgIl1bIiArIGlkICsgIl0iOwogICAgICAgICAgICByZWZlcmVuY2UgPSAiWyIgKyBpZCArICJdOiAiICsgaHJlZiArIHRpdGxlOwogICAgICAgIH0KICAgICAgICB0aGlzLnJlZmVyZW5jZXMucHVzaChyZWZlcmVuY2UpOwogICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKICAgICAgfSwKICAgICAgcmVmZXJlbmNlczogW10sCiAgICAgIGFwcGVuZDogZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIHZhciByZWZlcmVuY2VzID0gIiI7CiAgICAgICAgaWYgKHRoaXMucmVmZXJlbmNlcy5sZW5ndGgpIHsKICAgICAgICAgIHJlZmVyZW5jZXMgPSAiXG5cbiIgKyB0aGlzLnJlZmVyZW5jZXMuam9pbigiXG4iKSArICJcblxuIjsKICAgICAgICAgIHRoaXMucmVmZXJlbmNlcyA9IFtdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVmZXJlbmNlczsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmVtcGhhc2lzID0gewogICAgICBmaWx0ZXI6IFsiZW0iLCAiaSJdLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgaWYgKCFjb250ZW50My50cmltKCkpIHJldHVybiAiIjsKICAgICAgICByZXR1cm4gb3B0aW9ucy5lbURlbGltaXRlciArIGNvbnRlbnQzICsgb3B0aW9ucy5lbURlbGltaXRlcjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLnN0cm9uZyA9IHsKICAgICAgZmlsdGVyOiBbInN0cm9uZyIsICJiIl0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICBpZiAoIWNvbnRlbnQzLnRyaW0oKSkgcmV0dXJuICIiOwogICAgICAgIHJldHVybiBvcHRpb25zLnN0cm9uZ0RlbGltaXRlciArIGNvbnRlbnQzICsgb3B0aW9ucy5zdHJvbmdEZWxpbWl0ZXI7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5jb2RlID0gewogICAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyKSB7CiAgICAgICAgdmFyIGhhc1NpYmxpbmdzID0gbm9kZTIucHJldmlvdXNTaWJsaW5nIHx8IG5vZGUyLm5leHRTaWJsaW5nOwogICAgICAgIHZhciBpc0NvZGVCbG9jayA9IG5vZGUyLnBhcmVudE5vZGUubm9kZU5hbWUgPT09ICJQUkUiICYmICFoYXNTaWJsaW5nczsKICAgICAgICByZXR1cm4gbm9kZTIubm9kZU5hbWUgPT09ICJDT0RFIiAmJiAhaXNDb2RlQmxvY2s7CiAgICAgIH0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50MykgewogICAgICAgIGlmICghY29udGVudDMpIHJldHVybiAiIjsKICAgICAgICBjb250ZW50MyA9IGNvbnRlbnQzLnJlcGxhY2UoL1xyP1xufFxyL2csICIgIik7CiAgICAgICAgdmFyIGV4dHJhU3BhY2UgPSAvXmB8XiAuKj9bXiBdLiogJHxgJC8udGVzdChjb250ZW50MykgPyAiICIgOiAiIjsKICAgICAgICB2YXIgZGVsaW1pdGVyID0gImAiOwogICAgICAgIHZhciBtYXRjaGVzID0gY29udGVudDMubWF0Y2goL2ArL2dtKSB8fCBbXTsKICAgICAgICB3aGlsZSAobWF0Y2hlcy5pbmRleE9mKGRlbGltaXRlcikgIT09IC0xKSBkZWxpbWl0ZXIgPSBkZWxpbWl0ZXIgKyAiYCI7CiAgICAgICAgcmV0dXJuIGRlbGltaXRlciArIGV4dHJhU3BhY2UgKyBjb250ZW50MyArIGV4dHJhU3BhY2UgKyBkZWxpbWl0ZXI7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5pbWFnZSA9IHsKICAgICAgZmlsdGVyOiAiaW1nIiwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMikgewogICAgICAgIHZhciBhbHQgPSBjbGVhbkF0dHJpYnV0ZShub2RlMi5nZXRBdHRyaWJ1dGUoImFsdCIpKTsKICAgICAgICB2YXIgc3JjID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJzcmMiKSB8fCAiIjsKICAgICAgICB2YXIgdGl0bGUgPSBjbGVhbkF0dHJpYnV0ZShub2RlMi5nZXRBdHRyaWJ1dGUoInRpdGxlIikpOwogICAgICAgIHZhciB0aXRsZVBhcnQgPSB0aXRsZSA/ICcgIicgKyB0aXRsZSArICciJyA6ICIiOwogICAgICAgIHJldHVybiBzcmMgPyAiIVsiICsgYWx0ICsgIl0oIiArIHNyYyArIHRpdGxlUGFydCArICIpIiA6ICIiOwogICAgICB9CiAgICB9OwogICAgUnVsZXMucHJvdG90eXBlID0gewogICAgICBhZGQ6IGZ1bmN0aW9uKGtleTIsIHJ1bGUpIHsKICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQocnVsZSk7CiAgICAgIH0sCiAgICAgIGtlZXA6IGZ1bmN0aW9uKGZpbHRlcjIpIHsKICAgICAgICB0aGlzLl9rZWVwLnVuc2hpZnQoewogICAgICAgICAgZmlsdGVyOiBmaWx0ZXIyLAogICAgICAgICAgcmVwbGFjZW1lbnQ6IHRoaXMua2VlcFJlcGxhY2VtZW50CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIHJlbW92ZTogZnVuY3Rpb24oZmlsdGVyMikgewogICAgICAgIHRoaXMuX3JlbW92ZS51bnNoaWZ0KHsKICAgICAgICAgIGZpbHRlcjogZmlsdGVyMiwKICAgICAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9LAogICAgICBmb3JOb2RlOiBmdW5jdGlvbihub2RlMikgewogICAgICAgIGlmIChub2RlMi5pc0JsYW5rKSByZXR1cm4gdGhpcy5ibGFua1J1bGU7CiAgICAgICAgdmFyIHJ1bGU7CiAgICAgICAgaWYgKHJ1bGUgPSBmaW5kUnVsZSh0aGlzLmFycmF5LCBub2RlMiwgdGhpcy5vcHRpb25zKSkgcmV0dXJuIHJ1bGU7CiAgICAgICAgaWYgKHJ1bGUgPSBmaW5kUnVsZSh0aGlzLl9rZWVwLCBub2RlMiwgdGhpcy5vcHRpb25zKSkgcmV0dXJuIHJ1bGU7CiAgICAgICAgaWYgKHJ1bGUgPSBmaW5kUnVsZSh0aGlzLl9yZW1vdmUsIG5vZGUyLCB0aGlzLm9wdGlvbnMpKSByZXR1cm4gcnVsZTsKICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UnVsZTsKICAgICAgfSwKICAgICAgZm9yRWFjaDogZnVuY3Rpb24oZm4pIHsKICAgICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCB0aGlzLmFycmF5Lmxlbmd0aDsgaTExKyspIGZuKHRoaXMuYXJyYXlbaTExXSwgaTExKTsKICAgICAgfQogICAgfTsKICAgIHJvb3Q1ID0gdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB7fTsKICAgIEhUTUxQYXJzZXIgPSBjYW5QYXJzZUhUTUxOYXRpdmVseSgpID8gcm9vdDUuRE9NUGFyc2VyIDogY3JlYXRlSFRNTFBhcnNlcigpOwogICAgcmVkdWNlMiA9IEFycmF5LnByb3RvdHlwZS5yZWR1Y2U7CiAgICBlc2NhcGVzID0gWwogICAgICBbL1xcL2csICJcXFxcIl0sCiAgICAgIFsvXCovZywgIlxcKiJdLAogICAgICBbL14tL2csICJcXC0iXSwKICAgICAgWy9eXCsgL2csICJcXCsgIl0sCiAgICAgIFsvXig9KykvZywgIlxcJDEiXSwKICAgICAgWy9eKCN7MSw2fSkgL2csICJcXCQxICJdLAogICAgICBbL2AvZywgIlxcYCJdLAogICAgICBbL15+fn4vZywgIlxcfn5+Il0sCiAgICAgIFsvXFsvZywgIlxcWyJdLAogICAgICBbL1xdL2csICJcXF0iXSwKICAgICAgWy9ePi9nLCAiXFw+Il0sCiAgICAgIFsvXy9nLCAiXFxfIl0sCiAgICAgIFsvXihcZCspXC4gL2csICIkMVxcLiAiXQogICAgXTsKICAgIFR1cm5kb3duU2VydmljZS5wcm90b3R5cGUgPSB7CiAgICAgIC8qKgogICAgICAgKiBUaGUgZW50cnkgcG9pbnQgZm9yIGNvbnZlcnRpbmcgYSBzdHJpbmcgb3IgRE9NIG5vZGUgdG8gTWFya2Rvd24KICAgICAgICogQHB1YmxpYwogICAgICAgKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudH0gaW5wdXQgVGhlIHN0cmluZyBvciBET00gbm9kZSB0byBjb252ZXJ0CiAgICAgICAqIEByZXR1cm5zIEEgTWFya2Rvd24gcmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0CiAgICAgICAqIEB0eXBlIFN0cmluZwogICAgICAgKi8KICAgICAgdHVybmRvd246IGZ1bmN0aW9uKGlucHV0KSB7CiAgICAgICAgaWYgKCFjYW5Db252ZXJ0KGlucHV0KSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigKICAgICAgICAgICAgaW5wdXQgKyAiIGlzIG5vdCBhIHN0cmluZywgb3IgYW4gZWxlbWVudC9kb2N1bWVudC9mcmFnbWVudCBub2RlLiIKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGlmIChpbnB1dCA9PT0gIiIpIHJldHVybiAiIjsKICAgICAgICB2YXIgb3V0cHV0ID0gcHJvY2VzczMuY2FsbCh0aGlzLCBuZXcgUm9vdE5vZGUoaW5wdXQsIHRoaXMub3B0aW9ucykpOwogICAgICAgIHJldHVybiBwb3N0UHJvY2Vzcy5jYWxsKHRoaXMsIG91dHB1dCk7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBBZGQgb25lIG9yIG1vcmUgcGx1Z2lucwogICAgICAgKiBAcHVibGljCiAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IHBsdWdpbiBUaGUgcGx1Z2luIG9yIGFycmF5IG9mIHBsdWdpbnMgdG8gYWRkCiAgICAgICAqIEByZXR1cm5zIFRoZSBUdXJuZG93biBpbnN0YW5jZSBmb3IgY2hhaW5pbmcKICAgICAgICogQHR5cGUgT2JqZWN0CiAgICAgICAqLwogICAgICB1c2U6IGZ1bmN0aW9uKHBsdWdpbikgewogICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBsdWdpbikpIHsKICAgICAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IHBsdWdpbi5sZW5ndGg7IGkxMSsrKSB0aGlzLnVzZShwbHVnaW5baTExXSk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcGx1Z2luID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBwbHVnaW4odGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInBsdWdpbiBtdXN0IGJlIGEgRnVuY3Rpb24gb3IgYW4gQXJyYXkgb2YgRnVuY3Rpb25zIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9LAogICAgICAvKioKICAgICAgICogQWRkcyBhIHJ1bGUKICAgICAgICogQHB1YmxpYwogICAgICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5IFRoZSB1bmlxdWUga2V5IG9mIHRoZSBydWxlCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBydWxlIFRoZSBydWxlCiAgICAgICAqIEByZXR1cm5zIFRoZSBUdXJuZG93biBpbnN0YW5jZSBmb3IgY2hhaW5pbmcKICAgICAgICogQHR5cGUgT2JqZWN0CiAgICAgICAqLwogICAgICBhZGRSdWxlOiBmdW5jdGlvbihrZXkyLCBydWxlKSB7CiAgICAgICAgdGhpcy5ydWxlcy5hZGQoa2V5MiwgcnVsZSk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBLZWVwIGEgbm9kZSAoYXMgSFRNTCkgdGhhdCBtYXRjaGVzIHRoZSBmaWx0ZXIKICAgICAgICogQHB1YmxpYwogICAgICAgKiBAcGFyYW0ge1N0cmluZ3xBcnJheXxGdW5jdGlvbn0gZmlsdGVyIFRoZSB1bmlxdWUga2V5IG9mIHRoZSBydWxlCiAgICAgICAqIEByZXR1cm5zIFRoZSBUdXJuZG93biBpbnN0YW5jZSBmb3IgY2hhaW5pbmcKICAgICAgICogQHR5cGUgT2JqZWN0CiAgICAgICAqLwogICAgICBrZWVwOiBmdW5jdGlvbihmaWx0ZXIyKSB7CiAgICAgICAgdGhpcy5ydWxlcy5rZWVwKGZpbHRlcjIpOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9LAogICAgICAvKioKICAgICAgICogUmVtb3ZlIGEgbm9kZSB0aGF0IG1hdGNoZXMgdGhlIGZpbHRlcgogICAgICAgKiBAcHVibGljCiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fEZ1bmN0aW9ufSBmaWx0ZXIgVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIHJ1bGUKICAgICAgICogQHJldHVybnMgVGhlIFR1cm5kb3duIGluc3RhbmNlIGZvciBjaGFpbmluZwogICAgICAgKiBAdHlwZSBPYmplY3QKICAgICAgICovCiAgICAgIHJlbW92ZTogZnVuY3Rpb24oZmlsdGVyMikgewogICAgICAgIHRoaXMucnVsZXMucmVtb3ZlKGZpbHRlcjIpOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9LAogICAgICAvKioKICAgICAgICogRXNjYXBlcyBNYXJrZG93biBzeW50YXgKICAgICAgICogQHB1YmxpYwogICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gZXNjYXBlCiAgICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIHdpdGggTWFya2Rvd24gc3ludGF4IGVzY2FwZWQKICAgICAgICogQHR5cGUgU3RyaW5nCiAgICAgICAqLwogICAgICBlc2NhcGU6IGZ1bmN0aW9uKHN0cmluZzMpIHsKICAgICAgICByZXR1cm4gZXNjYXBlcy5yZWR1Y2UoZnVuY3Rpb24oYWNjdW11bGF0b3IsIGVzY2FwZSkgewogICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yLnJlcGxhY2UoZXNjYXBlWzBdLCBlc2NhcGVbMV0pOwogICAgICAgIH0sIHN0cmluZzMpOwogICAgICB9CiAgICB9OwogICAgdHVybmRvd25fYnJvd3Nlcl9lc19kZWZhdWx0ID0gVHVybmRvd25TZXJ2aWNlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdHVybmRvd24tcGx1Z2luLWdmbUAxLjAuMi9ub2RlX21vZHVsZXMvdHVybmRvd24tcGx1Z2luLWdmbS9saWIvdHVybmRvd24tcGx1Z2luLWdmbS5lcy5qcwp2YXIgdHVybmRvd25fcGx1Z2luX2dmbV9lc19leHBvcnRzID0ge307Cl9fZXhwb3J0KHR1cm5kb3duX3BsdWdpbl9nZm1fZXNfZXhwb3J0cywgewogIGdmbTogKCkgPT4gZ2ZtMiwKICBoaWdobGlnaHRlZENvZGVCbG9jazogKCkgPT4gaGlnaGxpZ2h0ZWRDb2RlQmxvY2ssCiAgc3RyaWtldGhyb3VnaDogKCkgPT4gc3RyaWtldGhyb3VnaDIsCiAgdGFibGVzOiAoKSA9PiB0YWJsZXMsCiAgdGFza0xpc3RJdGVtczogKCkgPT4gdGFza0xpc3RJdGVtcwp9KTsKZnVuY3Rpb24gaGlnaGxpZ2h0ZWRDb2RlQmxvY2sodHVybmRvd25TZXJ2aWNlKSB7CiAgdHVybmRvd25TZXJ2aWNlLmFkZFJ1bGUoImhpZ2hsaWdodGVkQ29kZUJsb2NrIiwgewogICAgZmlsdGVyOiBmdW5jdGlvbihub2RlMikgewogICAgICB2YXIgZmlyc3RDaGlsZCA9IG5vZGUyLmZpcnN0Q2hpbGQ7CiAgICAgIHJldHVybiBub2RlMi5ub2RlTmFtZSA9PT0gIkRJViIgJiYgaGlnaGxpZ2h0UmVnRXhwLnRlc3Qobm9kZTIuY2xhc3NOYW1lKSAmJiBmaXJzdENoaWxkICYmIGZpcnN0Q2hpbGQubm9kZU5hbWUgPT09ICJQUkUiOwogICAgfSwKICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgdmFyIGNsYXNzTmFtZSA9IG5vZGUyLmNsYXNzTmFtZSB8fCAiIjsKICAgICAgdmFyIGxhbmd1YWdlID0gKGNsYXNzTmFtZS5tYXRjaChoaWdobGlnaHRSZWdFeHApIHx8IFtudWxsLCAiIl0pWzFdOwogICAgICByZXR1cm4gIlxuXG4iICsgb3B0aW9ucy5mZW5jZSArIGxhbmd1YWdlICsgIlxuIiArIG5vZGUyLmZpcnN0Q2hpbGQudGV4dENvbnRlbnQgKyAiXG4iICsgb3B0aW9ucy5mZW5jZSArICJcblxuIjsKICAgIH0KICB9KTsKfQpmdW5jdGlvbiBzdHJpa2V0aHJvdWdoMih0dXJuZG93blNlcnZpY2UpIHsKICB0dXJuZG93blNlcnZpY2UuYWRkUnVsZSgic3RyaWtldGhyb3VnaCIsIHsKICAgIGZpbHRlcjogWyJkZWwiLCAicyIsICJzdHJpa2UiXSwKICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50MykgewogICAgICByZXR1cm4gIn4iICsgY29udGVudDMgKyAifiI7CiAgICB9CiAgfSk7Cn0KZnVuY3Rpb24gaXNIZWFkaW5nUm93KHRyMikgewogIHZhciBwYXJlbnROb2RlID0gdHIyLnBhcmVudE5vZGU7CiAgcmV0dXJuIHBhcmVudE5vZGUubm9kZU5hbWUgPT09ICJUSEVBRCIgfHwgcGFyZW50Tm9kZS5maXJzdENoaWxkID09PSB0cjIgJiYgKHBhcmVudE5vZGUubm9kZU5hbWUgPT09ICJUQUJMRSIgfHwgaXNGaXJzdFRib2R5KHBhcmVudE5vZGUpKSAmJiBldmVyeTIuY2FsbCh0cjIuY2hpbGROb2RlcywgZnVuY3Rpb24objEzKSB7CiAgICByZXR1cm4gbjEzLm5vZGVOYW1lID09PSAiVEgiOwogIH0pOwp9CmZ1bmN0aW9uIGlzRmlyc3RUYm9keShlbGVtZW50NCkgewogIHZhciBwcmV2aW91c1NpYmxpbmcgPSBlbGVtZW50NC5wcmV2aW91c1NpYmxpbmc7CiAgcmV0dXJuIGVsZW1lbnQ0Lm5vZGVOYW1lID09PSAiVEJPRFkiICYmICghcHJldmlvdXNTaWJsaW5nIHx8IHByZXZpb3VzU2libGluZy5ub2RlTmFtZSA9PT0gIlRIRUFEIiAmJiAvXlxzKiQvaS50ZXN0KHByZXZpb3VzU2libGluZy50ZXh0Q29udGVudCkpOwp9CmZ1bmN0aW9uIGNlbGwoY29udGVudDMsIG5vZGUyKSB7CiAgdmFyIGluZGV4MiA9IGluZGV4T2YyLmNhbGwobm9kZTIucGFyZW50Tm9kZS5jaGlsZE5vZGVzLCBub2RlMik7CiAgdmFyIHByZWZpeDQgPSAiICI7CiAgaWYgKGluZGV4MiA9PT0gMCkgcHJlZml4NCA9ICJ8ICI7CiAgcmV0dXJuIHByZWZpeDQgKyBjb250ZW50MyArICIgfCI7Cn0KZnVuY3Rpb24gdGFibGVzKHR1cm5kb3duU2VydmljZSkgewogIHR1cm5kb3duU2VydmljZS5rZWVwKGZ1bmN0aW9uKG5vZGUyKSB7CiAgICByZXR1cm4gbm9kZTIubm9kZU5hbWUgPT09ICJUQUJMRSIgJiYgIWlzSGVhZGluZ1Jvdyhub2RlMi5yb3dzWzBdKTsKICB9KTsKICBmb3IgKHZhciBrZXkyIGluIHJ1bGVzMikgdHVybmRvd25TZXJ2aWNlLmFkZFJ1bGUoa2V5MiwgcnVsZXMyW2tleTJdKTsKfQpmdW5jdGlvbiB0YXNrTGlzdEl0ZW1zKHR1cm5kb3duU2VydmljZSkgewogIHR1cm5kb3duU2VydmljZS5hZGRSdWxlKCJ0YXNrTGlzdEl0ZW1zIiwgewogICAgZmlsdGVyOiBmdW5jdGlvbihub2RlMikgewogICAgICByZXR1cm4gbm9kZTIudHlwZSA9PT0gImNoZWNrYm94IiAmJiBub2RlMi5wYXJlbnROb2RlLm5vZGVOYW1lID09PSAiTEkiOwogICAgfSwKICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIpIHsKICAgICAgcmV0dXJuIChub2RlMi5jaGVja2VkID8gIlt4XSIgOiAiWyBdIikgKyAiICI7CiAgICB9CiAgfSk7Cn0KZnVuY3Rpb24gZ2ZtMih0dXJuZG93blNlcnZpY2UpIHsKICB0dXJuZG93blNlcnZpY2UudXNlKFsKICAgIGhpZ2hsaWdodGVkQ29kZUJsb2NrLAogICAgc3RyaWtldGhyb3VnaDIsCiAgICB0YWJsZXMsCiAgICB0YXNrTGlzdEl0ZW1zCiAgXSk7Cn0KdmFyIGhpZ2hsaWdodFJlZ0V4cCwgaW5kZXhPZjIsIGV2ZXJ5MiwgcnVsZXMyOwp2YXIgaW5pdF90dXJuZG93bl9wbHVnaW5fZ2ZtX2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdHVybmRvd24tcGx1Z2luLWdmbUAxLjAuMi9ub2RlX21vZHVsZXMvdHVybmRvd24tcGx1Z2luLWdmbS9saWIvdHVybmRvd24tcGx1Z2luLWdmbS5lcy5qcyIoKSB7CiAgICBoaWdobGlnaHRSZWdFeHAgPSAvaGlnaGxpZ2h0LSg/OnRleHR8c291cmNlKS0oW2EtejAtOV0rKS87CiAgICBpbmRleE9mMiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mOwogICAgZXZlcnkyID0gQXJyYXkucHJvdG90eXBlLmV2ZXJ5OwogICAgcnVsZXMyID0ge307CiAgICBydWxlczIudGFibGVDZWxsID0gewogICAgICBmaWx0ZXI6IFsidGgiLCAidGQiXSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMikgewogICAgICAgIHJldHVybiBjZWxsKGNvbnRlbnQzLCBub2RlMik7CiAgICAgIH0KICAgIH07CiAgICBydWxlczIudGFibGVSb3cgPSB7CiAgICAgIGZpbHRlcjogInRyIiwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMikgewogICAgICAgIHZhciBib3JkZXJDZWxscyA9ICIiOwogICAgICAgIHZhciBhbGlnbk1hcCA9IHsgbGVmdDogIjotLSIsIHJpZ2h0OiAiLS06IiwgY2VudGVyOiAiOi06IiB9OwogICAgICAgIGlmIChpc0hlYWRpbmdSb3cobm9kZTIpKSB7CiAgICAgICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBub2RlMi5jaGlsZE5vZGVzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgICAgdmFyIGJvcmRlciA9ICItLS0iOwogICAgICAgICAgICB2YXIgYWxpZ24gPSAobm9kZTIuY2hpbGROb2Rlc1tpMTFdLmdldEF0dHJpYnV0ZSgiYWxpZ24iKSB8fCAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgaWYgKGFsaWduKSBib3JkZXIgPSBhbGlnbk1hcFthbGlnbl0gfHwgYm9yZGVyOwogICAgICAgICAgICBib3JkZXJDZWxscyArPSBjZWxsKGJvcmRlciwgbm9kZTIuY2hpbGROb2Rlc1tpMTFdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICJcbiIgKyBjb250ZW50MyArIChib3JkZXJDZWxscyA/ICJcbiIgKyBib3JkZXJDZWxscyA6ICIiKTsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzMi50YWJsZSA9IHsKICAgICAgLy8gT25seSBjb252ZXJ0IHRhYmxlcyB3aXRoIGEgaGVhZGluZyByb3cuCiAgICAgIC8vIFRhYmxlcyB3aXRoIG5vIGhlYWRpbmcgcm93IGFyZSBrZXB0IHVzaW5nIGBrZWVwYCAoc2VlIGJlbG93KS4KICAgICAgZmlsdGVyOiBmdW5jdGlvbihub2RlMikgewogICAgICAgIHJldHVybiBub2RlMi5ub2RlTmFtZSA9PT0gIlRBQkxFIiAmJiBpc0hlYWRpbmdSb3cobm9kZTIucm93c1swXSk7CiAgICAgIH0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50MykgewogICAgICAgIGNvbnRlbnQzID0gY29udGVudDMucmVwbGFjZSgiXG5cbiIsICJcbiIpOwogICAgICAgIHJldHVybiAiXG5cbiIgKyBjb250ZW50MyArICJcblxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzMi50YWJsZVNlY3Rpb24gPSB7CiAgICAgIGZpbHRlcjogWyJ0aGVhZCIsICJ0Ym9keSIsICJ0Zm9vdCJdLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMpIHsKICAgICAgICByZXR1cm4gY29udGVudDM7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydG1hcmtkb3duQDMuMC4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydG1hcmtkb3duL2Rpc3RfdHMvc21hcnRtYXJrZG93bi5wbHVnaW5zLmpzCnZhciBzbWFydHlhbWw7CnZhciBpbml0X3NtYXJ0bWFya2Rvd25fcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWFya2Rvd25AMy4wLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWFya2Rvd24vZGlzdF90cy9zbWFydG1hcmtkb3duLnBsdWdpbnMuanMiKCkgewogICAgc21hcnR5YW1sID0gX190b0VTTShyZXF1aXJlX2Rpc3RfdHMyKCksIDEpOwogICAgaW5pdF91bmlmaWVkKCk7CiAgICBpbml0X3JlbWFya19nZm0oKTsKICAgIGluaXRfcmVtYXJrX3BhcnNlKCk7CiAgICBpbml0X3JlbWFya19mcm9udG1hdHRlcigpOwogICAgaW5pdF9yZW1hcmtfaHRtbCgpOwogICAgaW5pdF9yZW1hcmtfc3RyaW5naWZ5KCk7CiAgICBpbml0X3R1cm5kb3duX2Jyb3dzZXJfZXMoKTsKICAgIGluaXRfdHVybmRvd25fcGx1Z2luX2dmbV9lcygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXJrZG93bkAzLjAuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXJrZG93bi9kaXN0X3RzL3NtYXJ0bWFya2Rvd24uY2xhc3Nlcy5tZHBhcnNlZHJlc3VsdC5qcwp2YXIgTWRQYXJzZWRSZXN1bHQ7CnZhciBpbml0X3NtYXJ0bWFya2Rvd25fY2xhc3Nlc19tZHBhcnNlZHJlc3VsdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWFya2Rvd25AMy4wLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWFya2Rvd24vZGlzdF90cy9zbWFydG1hcmtkb3duLmNsYXNzZXMubWRwYXJzZWRyZXN1bHQuanMiKCkgewogICAgaW5pdF9zbWFydG1hcmtkb3duX3BsdWdpbnMoKTsKICAgIE1kUGFyc2VkUmVzdWx0ID0gY2xhc3MgX01kUGFyc2VkUmVzdWx0IHsKICAgICAgc3RhdGljIGFzeW5jIGNyZWF0ZUZyb21NYXJrZG93blN0cmluZyhtZFN0cmluZ0FyZykgewogICAgICAgIGNvbnN0IG1kUGFyc2VkUmVzdWx0ID0gbmV3IF9NZFBhcnNlZFJlc3VsdCgpOwogICAgICAgIGF3YWl0IG1kUGFyc2VkUmVzdWx0LnVwZGF0ZUZyb21NYXJrZG93blN0cmluZyhtZFN0cmluZ0FyZyk7CiAgICAgICAgcmV0dXJuIG1kUGFyc2VkUmVzdWx0OwogICAgICB9CiAgICAgIGFzeW5jIHVwZGF0ZUZyb21NYXJrZG93blN0cmluZyhtZFN0cmluZ0FyZykgewogICAgICAgIGxldCB5YW1sU3RyaW5nOwogICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHVuaWZpZWQoKS51c2UocmVtYXJrUGFyc2UpLnVzZShyZW1hcmtHZm0pLnVzZShyZW1hcmtGcm9udG1hdHRlciwgWyJ5YW1sIiwgInRvbWwiXSkudXNlKHJlbWFya1N0cmluZ2lmeSkudXNlKHJlbWFya0h0bWwpLnVzZSgoKSA9PiAodHJlZSkgPT4gewogICAgICAgICAgY29uc29sZS5kaXIodHJlZSk7CiAgICAgICAgICBjb25zdCB5YW1sQ2hpbGQgPSB0cmVlLmNoaWxkcmVuLmZpbmQoKG9iamVjdEFyZykgPT4gb2JqZWN0QXJnLnR5cGUgPT09ICJ5YW1sIik7CiAgICAgICAgICBpZiAoeWFtbENoaWxkKSB7CiAgICAgICAgICAgIHlhbWxTdHJpbmcgPSB5YW1sQ2hpbGQudmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfSkucHJvY2VzcyhtZFN0cmluZ0FyZyk7CiAgICAgICAgdGhpcy5odG1sID0gcmVzdWx0LnRvU3RyaW5nKCk7CiAgICAgICAgaWYgKHlhbWxTdHJpbmcpIHsKICAgICAgICAgIHRoaXMuZnJvbnRtYXR0ZXJEYXRhID0gYXdhaXQgc21hcnR5YW1sLnlhbWxTdHJpbmdUb09iamVjdCh5YW1sU3RyaW5nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5mcm9udG1hdHRlckRhdGEgPSB7fTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydG1hcmtkb3duQDMuMC4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydG1hcmtkb3duL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czE3ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czE3LCB7CiAgU21hcnRNYXJrZG93bjogKCkgPT4gU21hcnRNYXJrZG93bgp9KTsKdmFyIFNtYXJ0TWFya2Rvd247CnZhciBpbml0X2Rpc3RfdHMxNyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWFya2Rvd25AMy4wLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWFya2Rvd24vZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0bWFya2Rvd25fcGx1Z2lucygpOwogICAgaW5pdF9zbWFydG1hcmtkb3duX2NsYXNzZXNfbWRwYXJzZWRyZXN1bHQoKTsKICAgIFNtYXJ0TWFya2Rvd24gPSBjbGFzcyBfU21hcnRNYXJrZG93biB7CiAgICAgIHN0YXRpYyBhc3luYyBlYXN5TWFya2Rvd25Ub0h0bWwobWRTdHJpbmdBcmcpIHsKICAgICAgICBjb25zdCBzbWFydG1hcmtkb3duSW5zdGFuY2UgPSBuZXcgX1NtYXJ0TWFya2Rvd24oKTsKICAgICAgICBjb25zdCBtZFBhcnNlZFJlc3VsdCA9IGF3YWl0IHNtYXJ0bWFya2Rvd25JbnN0YW5jZS5nZXRNZFBhcnNlZFJlc3VsdEZyb21NYXJrZG93bihtZFN0cmluZ0FyZyk7CiAgICAgICAgcmV0dXJuIG1kUGFyc2VkUmVzdWx0Lmh0bWw7CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNyZWF0ZSBhIE1kUGFyc2VkUmVzdWx0IGZyb20gbWFya2Rvd24KICAgICAgICogQHBhcmFtIG1kU3RyaW5nQXJnCiAgICAgICAqLwogICAgICBhc3luYyBnZXRNZFBhcnNlZFJlc3VsdEZyb21NYXJrZG93bihtZFN0cmluZ0FyZykgewogICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IE1kUGFyc2VkUmVzdWx0LmNyZWF0ZUZyb21NYXJrZG93blN0cmluZyhtZFN0cmluZ0FyZyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICBodG1sVG9NYXJrZG93bihodG1sU3RyaW5nKSB7CiAgICAgICAgY29uc3QgdHVybmRvd25JbnN0YW5jZSA9IG5ldyB0dXJuZG93bl9icm93c2VyX2VzX2RlZmF1bHQoewogICAgICAgICAgaGVhZGluZ1N0eWxlOiAiYXR4IiwKICAgICAgICAgIGNvZGVCbG9ja1N0eWxlOiAiZmVuY2VkIgogICAgICAgIH0pOwogICAgICAgIHR1cm5kb3duSW5zdGFuY2UudXNlKHR1cm5kb3duX3BsdWdpbl9nZm1fZXNfZXhwb3J0cy5nZm0pOwogICAgICAgIHJldHVybiB0dXJuZG93bkluc3RhbmNlLnR1cm5kb3duKGh0bWxTdHJpbmcpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcGF0aC10by1yZWdleHBAOC4zLjAvbm9kZV9tb2R1bGVzL3BhdGgtdG8tcmVnZXhwL2Rpc3QvaW5kZXguanMKdmFyIHJlcXVpcmVfZGlzdCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vcGF0aC10by1yZWdleHBAOC4zLjAvbm9kZV9tb2R1bGVzL3BhdGgtdG8tcmVnZXhwL2Rpc3QvaW5kZXguanMiKGV4cG9ydHMpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICBleHBvcnRzLlBhdGhFcnJvciA9IGV4cG9ydHMuVG9rZW5EYXRhID0gdm9pZCAwOwogICAgZXhwb3J0cy5wYXJzZSA9IHBhcnNlODsKICAgIGV4cG9ydHMuY29tcGlsZSA9IGNvbXBpbGUyOwogICAgZXhwb3J0cy5tYXRjaCA9IG1hdGNoMjsKICAgIGV4cG9ydHMucGF0aFRvUmVnZXhwID0gcGF0aFRvUmVnZXhwOwogICAgZXhwb3J0cy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk1OwogICAgdmFyIERFRkFVTFRfREVMSU1JVEVSID0gIi8iOwogICAgdmFyIE5PT1BfVkFMVUUgPSAodmFsdWUyKSA9PiB2YWx1ZTI7CiAgICB2YXIgSURfU1RBUlQgPSAvXlskX1xwe0lEX1N0YXJ0fV0kL3U7CiAgICB2YXIgSURfQ09OVElOVUUgPSAvXlskXHUyMDBjXHUyMDBkXHB7SURfQ29udGludWV9XSQvdTsKICAgIHZhciBTSU1QTEVfVE9LRU5TID0gewogICAgICAvLyBHcm91cHMuCiAgICAgICJ7IjogInsiLAogICAgICAifSI6ICJ9IiwKICAgICAgLy8gUmVzZXJ2ZWQuCiAgICAgICIoIjogIigiLAogICAgICAiKSI6ICIpIiwKICAgICAgIlsiOiAiWyIsCiAgICAgICJdIjogIl0iLAogICAgICAiKyI6ICIrIiwKICAgICAgIj8iOiAiPyIsCiAgICAgICIhIjogIiEiCiAgICB9OwogICAgZnVuY3Rpb24gZXNjYXBlVGV4dChzdHIpIHsKICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9be30oKVxbXF0rPyE6KlxcXS9nLCAiXFwkJiIpOwogICAgfQogICAgZnVuY3Rpb24gZXNjYXBlKHN0cikgewogICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1suKyo/XiR7fSgpW1xdfC9cXF0vZywgIlxcJCYiKTsKICAgIH0KICAgIHZhciBUb2tlbkRhdGEgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHRva2Vucywgb3JpZ2luYWxQYXRoKSB7CiAgICAgICAgdGhpcy50b2tlbnMgPSB0b2tlbnM7CiAgICAgICAgdGhpcy5vcmlnaW5hbFBhdGggPSBvcmlnaW5hbFBhdGg7CiAgICAgIH0KICAgIH07CiAgICBleHBvcnRzLlRva2VuRGF0YSA9IFRva2VuRGF0YTsKICAgIHZhciBQYXRoRXJyb3IgPSBjbGFzcyBleHRlbmRzIFR5cGVFcnJvciB7CiAgICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UyLCBvcmlnaW5hbFBhdGgpIHsKICAgICAgICBsZXQgdGV4dDkgPSBtZXNzYWdlMjsKICAgICAgICBpZiAob3JpZ2luYWxQYXRoKQogICAgICAgICAgdGV4dDkgKz0gYDogJHtvcmlnaW5hbFBhdGh9YDsKICAgICAgICB0ZXh0OSArPSBgOyB2aXNpdCBodHRwczovL2dpdC5uZXcvcGF0aFRvUmVnZXhwRXJyb3IgZm9yIGluZm9gOwogICAgICAgIHN1cGVyKHRleHQ5KTsKICAgICAgICB0aGlzLm9yaWdpbmFsUGF0aCA9IG9yaWdpbmFsUGF0aDsKICAgICAgfQogICAgfTsKICAgIGV4cG9ydHMuUGF0aEVycm9yID0gUGF0aEVycm9yOwogICAgZnVuY3Rpb24gcGFyc2U4KHN0ciwgb3B0aW9ucyA9IHt9KSB7CiAgICAgIGNvbnN0IHsgZW5jb2RlUGF0aCA9IE5PT1BfVkFMVUUgfSA9IG9wdGlvbnM7CiAgICAgIGNvbnN0IGNoYXJzID0gWy4uLnN0cl07CiAgICAgIGNvbnN0IHRva2VucyA9IFtdOwogICAgICBsZXQgaW5kZXgyID0gMDsKICAgICAgbGV0IHBvcyA9IDA7CiAgICAgIGZ1bmN0aW9uIG5hbWUoKSB7CiAgICAgICAgbGV0IHZhbHVlMiA9ICIiOwogICAgICAgIGlmIChJRF9TVEFSVC50ZXN0KGNoYXJzW2luZGV4Ml0pKSB7CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIHZhbHVlMiArPSBjaGFyc1tpbmRleDIrK107CiAgICAgICAgICB9IHdoaWxlIChJRF9DT05USU5VRS50ZXN0KGNoYXJzW2luZGV4Ml0pKTsKICAgICAgICB9IGVsc2UgaWYgKGNoYXJzW2luZGV4Ml0gPT09ICciJykgewogICAgICAgICAgbGV0IHF1b3RlU3RhcnQgPSBpbmRleDI7CiAgICAgICAgICB3aGlsZSAoaW5kZXgyKysgPCBjaGFycy5sZW5ndGgpIHsKICAgICAgICAgICAgaWYgKGNoYXJzW2luZGV4Ml0gPT09ICciJykgewogICAgICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgICAgIHF1b3RlU3RhcnQgPSAwOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjaGFyc1tpbmRleDJdID09PSAiXFwiKQogICAgICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgICB2YWx1ZTIgKz0gY2hhcnNbaW5kZXgyXTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChxdW90ZVN0YXJ0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXRoRXJyb3IoYFVudGVybWluYXRlZCBxdW90ZSBhdCBpbmRleCAke3F1b3RlU3RhcnR9YCwgc3RyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCF2YWx1ZTIpIHsKICAgICAgICAgIHRocm93IG5ldyBQYXRoRXJyb3IoYE1pc3NpbmcgcGFyYW1ldGVyIG5hbWUgYXQgaW5kZXggJHtpbmRleDJ9YCwgc3RyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhbHVlMjsKICAgICAgfQogICAgICB3aGlsZSAoaW5kZXgyIDwgY2hhcnMubGVuZ3RoKSB7CiAgICAgICAgY29uc3QgdmFsdWUyID0gY2hhcnNbaW5kZXgyXTsKICAgICAgICBjb25zdCB0eXBlNSA9IFNJTVBMRV9UT0tFTlNbdmFsdWUyXTsKICAgICAgICBpZiAodHlwZTUpIHsKICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogdHlwZTUsIGluZGV4OiBpbmRleDIrKywgdmFsdWU6IHZhbHVlMiB9KTsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlMiA9PT0gIlxcIikgewogICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiAiZXNjYXBlIiwgaW5kZXg6IGluZGV4MisrLCB2YWx1ZTogY2hhcnNbaW5kZXgyKytdIH0pOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWUyID09PSAiOiIpIHsKICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogInBhcmFtIiwgaW5kZXg6IGluZGV4MisrLCB2YWx1ZTogbmFtZSgpIH0pOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWUyID09PSAiKiIpIHsKICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogIndpbGRjYXJkIiwgaW5kZXg6IGluZGV4MisrLCB2YWx1ZTogbmFtZSgpIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6ICJjaGFyIiwgaW5kZXg6IGluZGV4MisrLCB2YWx1ZTogdmFsdWUyIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB0b2tlbnMucHVzaCh7IHR5cGU6ICJlbmQiLCBpbmRleDogaW5kZXgyLCB2YWx1ZTogIiIgfSk7CiAgICAgIGZ1bmN0aW9uIGNvbnN1bWVVbnRpbChlbmRUeXBlKSB7CiAgICAgICAgY29uc3Qgb3V0cHV0ID0gW107CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW3BvcysrXTsKICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBlbmRUeXBlKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAiY2hhciIgfHwgdG9rZW4udHlwZSA9PT0gImVzY2FwZSIpIHsKICAgICAgICAgICAgbGV0IHBhdGgyID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgIGxldCBjdXIgPSB0b2tlbnNbcG9zXTsKICAgICAgICAgICAgd2hpbGUgKGN1ci50eXBlID09PSAiY2hhciIgfHwgY3VyLnR5cGUgPT09ICJlc2NhcGUiKSB7CiAgICAgICAgICAgICAgcGF0aDIgKz0gY3VyLnZhbHVlOwogICAgICAgICAgICAgIGN1ciA9IHRva2Vuc1srK3Bvc107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgb3V0cHV0LnB1c2goewogICAgICAgICAgICAgIHR5cGU6ICJ0ZXh0IiwKICAgICAgICAgICAgICB2YWx1ZTogZW5jb2RlUGF0aChwYXRoMikKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJwYXJhbSIgfHwgdG9rZW4udHlwZSA9PT0gIndpbGRjYXJkIikgewogICAgICAgICAgICBvdXRwdXQucHVzaCh7CiAgICAgICAgICAgICAgdHlwZTogdG9rZW4udHlwZSwKICAgICAgICAgICAgICBuYW1lOiB0b2tlbi52YWx1ZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gInsiKSB7CiAgICAgICAgICAgIG91dHB1dC5wdXNoKHsKICAgICAgICAgICAgICB0eXBlOiAiZ3JvdXAiLAogICAgICAgICAgICAgIHRva2VuczogY29uc3VtZVVudGlsKCJ9IikKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgbmV3IFBhdGhFcnJvcihgVW5leHBlY3RlZCAke3Rva2VuLnR5cGV9IGF0IGluZGV4ICR7dG9rZW4uaW5kZXh9LCBleHBlY3RlZCAke2VuZFR5cGV9YCwgc3RyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG91dHB1dDsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFRva2VuRGF0YShjb25zdW1lVW50aWwoImVuZCIpLCBzdHIpOwogICAgfQogICAgZnVuY3Rpb24gY29tcGlsZTIocGF0aDIsIG9wdGlvbnMgPSB7fSkgewogICAgICBjb25zdCB7IGVuY29kZTogZW5jb2RlMiA9IGVuY29kZVVSSUNvbXBvbmVudCwgZGVsaW1pdGVyID0gREVGQVVMVF9ERUxJTUlURVIgfSA9IG9wdGlvbnM7CiAgICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgcGF0aDIgPT09ICJvYmplY3QiID8gcGF0aDIgOiBwYXJzZTgocGF0aDIsIG9wdGlvbnMpOwogICAgICBjb25zdCBmbiA9IHRva2Vuc1RvRnVuY3Rpb24oZGF0YS50b2tlbnMsIGRlbGltaXRlciwgZW5jb2RlMik7CiAgICAgIHJldHVybiBmdW5jdGlvbiBwYXRoMyhwYXJhbXMyID0ge30pIHsKICAgICAgICBjb25zdCBbcGF0aDQsIC4uLm1pc3NpbmddID0gZm4ocGFyYW1zMik7CiAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBNaXNzaW5nIHBhcmFtZXRlcnM6ICR7bWlzc2luZy5qb2luKCIsICIpfWApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGF0aDQ7CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiB0b2tlbnNUb0Z1bmN0aW9uKHRva2VucywgZGVsaW1pdGVyLCBlbmNvZGUyKSB7CiAgICAgIGNvbnN0IGVuY29kZXJzID0gdG9rZW5zLm1hcCgodG9rZW4pID0+IHRva2VuVG9GdW5jdGlvbih0b2tlbiwgZGVsaW1pdGVyLCBlbmNvZGUyKSk7CiAgICAgIHJldHVybiAoZGF0YSkgPT4gewogICAgICAgIGNvbnN0IHJlc3VsdCA9IFsiIl07CiAgICAgICAgZm9yIChjb25zdCBlbmNvZGVyMiBvZiBlbmNvZGVycykgewogICAgICAgICAgY29uc3QgW3ZhbHVlMiwgLi4uZXh0cmFzXSA9IGVuY29kZXIyKGRhdGEpOwogICAgICAgICAgcmVzdWx0WzBdICs9IHZhbHVlMjsKICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLmV4dHJhcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiB0b2tlblRvRnVuY3Rpb24odG9rZW4sIGRlbGltaXRlciwgZW5jb2RlMikgewogICAgICBpZiAodG9rZW4udHlwZSA9PT0gInRleHQiKQogICAgICAgIHJldHVybiAoKSA9PiBbdG9rZW4udmFsdWVdOwogICAgICBpZiAodG9rZW4udHlwZSA9PT0gImdyb3VwIikgewogICAgICAgIGNvbnN0IGZuID0gdG9rZW5zVG9GdW5jdGlvbih0b2tlbi50b2tlbnMsIGRlbGltaXRlciwgZW5jb2RlMik7CiAgICAgICAgcmV0dXJuIChkYXRhKSA9PiB7CiAgICAgICAgICBjb25zdCBbdmFsdWUyLCAuLi5taXNzaW5nXSA9IGZuKGRhdGEpOwogICAgICAgICAgaWYgKCFtaXNzaW5nLmxlbmd0aCkKICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZTJdOwogICAgICAgICAgcmV0dXJuIFsiIl07CiAgICAgICAgfTsKICAgICAgfQogICAgICBjb25zdCBlbmNvZGVWYWx1ZSA9IGVuY29kZTIgfHwgTk9PUF9WQUxVRTsKICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJ3aWxkY2FyZCIgJiYgZW5jb2RlMiAhPT0gZmFsc2UpIHsKICAgICAgICByZXR1cm4gKGRhdGEpID0+IHsKICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IGRhdGFbdG9rZW4ubmFtZV07CiAgICAgICAgICBpZiAodmFsdWUyID09IG51bGwpCiAgICAgICAgICAgIHJldHVybiBbIiIsIHRva2VuLm5hbWVdOwogICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlMikgfHwgdmFsdWUyLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAiJHt0b2tlbi5uYW1lfSIgdG8gYmUgYSBub24tZW1wdHkgYXJyYXlgKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgIHZhbHVlMi5tYXAoKHZhbHVlMywgaW5kZXgyKSA9PiB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZTMgIT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAiJHt0b2tlbi5uYW1lfS8ke2luZGV4Mn0iIHRvIGJlIGEgc3RyaW5nYCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBlbmNvZGVWYWx1ZSh2YWx1ZTMpOwogICAgICAgICAgICB9KS5qb2luKGRlbGltaXRlcikKICAgICAgICAgIF07CiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gKGRhdGEpID0+IHsKICAgICAgICBjb25zdCB2YWx1ZTIgPSBkYXRhW3Rva2VuLm5hbWVdOwogICAgICAgIGlmICh2YWx1ZTIgPT0gbnVsbCkKICAgICAgICAgIHJldHVybiBbIiIsIHRva2VuLm5hbWVdOwogICAgICAgIGlmICh0eXBlb2YgdmFsdWUyICE9PSAic3RyaW5nIikgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgIiR7dG9rZW4ubmFtZX0iIHRvIGJlIGEgc3RyaW5nYCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBbZW5jb2RlVmFsdWUodmFsdWUyKV07CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBtYXRjaDIocGF0aDIsIG9wdGlvbnMgPSB7fSkgewogICAgICBjb25zdCB7IGRlY29kZTogZGVjb2RlMiA9IGRlY29kZVVSSUNvbXBvbmVudCwgZGVsaW1pdGVyID0gREVGQVVMVF9ERUxJTUlURVIgfSA9IG9wdGlvbnM7CiAgICAgIGNvbnN0IHsgcmVnZXhwLCBrZXlzOiBrZXlzMiB9ID0gcGF0aFRvUmVnZXhwKHBhdGgyLCBvcHRpb25zKTsKICAgICAgY29uc3QgZGVjb2RlcnMgPSBrZXlzMi5tYXAoKGtleTIpID0+IHsKICAgICAgICBpZiAoZGVjb2RlMiA9PT0gZmFsc2UpCiAgICAgICAgICByZXR1cm4gTk9PUF9WQUxVRTsKICAgICAgICBpZiAoa2V5Mi50eXBlID09PSAicGFyYW0iKQogICAgICAgICAgcmV0dXJuIGRlY29kZTI7CiAgICAgICAgcmV0dXJuICh2YWx1ZTIpID0+IHZhbHVlMi5zcGxpdChkZWxpbWl0ZXIpLm1hcChkZWNvZGUyKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBmdW5jdGlvbiBtYXRjaDMoaW5wdXQpIHsKICAgICAgICBjb25zdCBtNiA9IHJlZ2V4cC5leGVjKGlucHV0KTsKICAgICAgICBpZiAoIW02KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGNvbnN0IHBhdGgzID0gbTZbMF07CiAgICAgICAgY29uc3QgcGFyYW1zMiA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgICAgIGZvciAobGV0IGkxMSA9IDE7IGkxMSA8IG02Lmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgIGlmIChtNltpMTFdID09PSB2b2lkIDApCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgY29uc3Qga2V5MiA9IGtleXMyW2kxMSAtIDFdOwogICAgICAgICAgY29uc3QgZGVjb2RlcjIgPSBkZWNvZGVyc1tpMTEgLSAxXTsKICAgICAgICAgIHBhcmFtczJba2V5Mi5uYW1lXSA9IGRlY29kZXIyKG02W2kxMV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4geyBwYXRoOiBwYXRoMywgcGFyYW1zOiBwYXJhbXMyIH07CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBwYXRoVG9SZWdleHAocGF0aDIsIG9wdGlvbnMgPSB7fSkgewogICAgICBjb25zdCB7IGRlbGltaXRlciA9IERFRkFVTFRfREVMSU1JVEVSLCBlbmQ6IGVuZDMgPSB0cnVlLCBzZW5zaXRpdmUgPSBmYWxzZSwgdHJhaWxpbmcgPSB0cnVlIH0gPSBvcHRpb25zOwogICAgICBjb25zdCBrZXlzMiA9IFtdOwogICAgICBjb25zdCBmbGFncyA9IHNlbnNpdGl2ZSA/ICIiIDogImkiOwogICAgICBjb25zdCBzb3VyY2VzID0gW107CiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgcGF0aHNUb0FycmF5KHBhdGgyLCBbXSkpIHsKICAgICAgICBjb25zdCBkYXRhID0gdHlwZW9mIGlucHV0ID09PSAib2JqZWN0IiA/IGlucHV0IDogcGFyc2U4KGlucHV0LCBvcHRpb25zKTsKICAgICAgICBmb3IgKGNvbnN0IHRva2VucyBvZiBmbGF0dGVuKGRhdGEudG9rZW5zLCAwLCBbXSkpIHsKICAgICAgICAgIHNvdXJjZXMucHVzaCh0b1JlZ0V4cFNvdXJjZSh0b2tlbnMsIGRlbGltaXRlciwga2V5czIsIGRhdGEub3JpZ2luYWxQYXRoKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGxldCBwYXR0ZXJuID0gYF4oPzoke3NvdXJjZXMuam9pbigifCIpfSlgOwogICAgICBpZiAodHJhaWxpbmcpCiAgICAgICAgcGF0dGVybiArPSBgKD86JHtlc2NhcGUoZGVsaW1pdGVyKX0kKT9gOwogICAgICBwYXR0ZXJuICs9IGVuZDMgPyAiJCIgOiBgKD89JHtlc2NhcGUoZGVsaW1pdGVyKX18JClgOwogICAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTsKICAgICAgcmV0dXJuIHsgcmVnZXhwLCBrZXlzOiBrZXlzMiB9OwogICAgfQogICAgZnVuY3Rpb24gcGF0aHNUb0FycmF5KHBhdGhzLCBpbml0KSB7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGhzKSkgewogICAgICAgIGZvciAoY29uc3QgcDcgb2YgcGF0aHMpCiAgICAgICAgICBwYXRoc1RvQXJyYXkocDcsIGluaXQpOwogICAgICB9IGVsc2UgewogICAgICAgIGluaXQucHVzaChwYXRocyk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluaXQ7CiAgICB9CiAgICBmdW5jdGlvbiogZmxhdHRlbih0b2tlbnMsIGluZGV4MiwgaW5pdCkgewogICAgICBpZiAoaW5kZXgyID09PSB0b2tlbnMubGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIHlpZWxkIGluaXQ7CiAgICAgIH0KICAgICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXgyXTsKICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJncm91cCIpIHsKICAgICAgICBmb3IgKGNvbnN0IHNlcSBvZiBmbGF0dGVuKHRva2VuLnRva2VucywgMCwgaW5pdC5zbGljZSgpKSkgewogICAgICAgICAgeWllbGQqIGZsYXR0ZW4odG9rZW5zLCBpbmRleDIgKyAxLCBzZXEpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpbml0LnB1c2godG9rZW4pOwogICAgICB9CiAgICAgIHlpZWxkKiBmbGF0dGVuKHRva2VucywgaW5kZXgyICsgMSwgaW5pdCk7CiAgICB9CiAgICBmdW5jdGlvbiB0b1JlZ0V4cFNvdXJjZSh0b2tlbnMsIGRlbGltaXRlciwga2V5czIsIG9yaWdpbmFsUGF0aCkgewogICAgICBsZXQgcmVzdWx0ID0gIiI7CiAgICAgIGxldCBiYWNrdHJhY2sgPSAiIjsKICAgICAgbGV0IGlzU2FmZVNlZ21lbnRQYXJhbSA9IHRydWU7CiAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7CiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJ0ZXh0IikgewogICAgICAgICAgcmVzdWx0ICs9IGVzY2FwZSh0b2tlbi52YWx1ZSk7CiAgICAgICAgICBiYWNrdHJhY2sgKz0gdG9rZW4udmFsdWU7CiAgICAgICAgICBpc1NhZmVTZWdtZW50UGFyYW0gfHwgKGlzU2FmZVNlZ21lbnRQYXJhbSA9IHRva2VuLnZhbHVlLmluY2x1ZGVzKGRlbGltaXRlcikpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICh0b2tlbi50eXBlID09PSAicGFyYW0iIHx8IHRva2VuLnR5cGUgPT09ICJ3aWxkY2FyZCIpIHsKICAgICAgICAgIGlmICghaXNTYWZlU2VnbWVudFBhcmFtICYmICFiYWNrdHJhY2spIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhdGhFcnJvcihgTWlzc2luZyB0ZXh0IGJlZm9yZSAiJHt0b2tlbi5uYW1lfSIgJHt0b2tlbi50eXBlfWAsIG9yaWdpbmFsUGF0aCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gInBhcmFtIikgewogICAgICAgICAgICByZXN1bHQgKz0gYCgke25lZ2F0ZShkZWxpbWl0ZXIsIGlzU2FmZVNlZ21lbnRQYXJhbSA/ICIiIDogYmFja3RyYWNrKX0rKWA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXN1bHQgKz0gYChbXFxzXFxTXSspYDsKICAgICAgICAgIH0KICAgICAgICAgIGtleXMyLnB1c2godG9rZW4pOwogICAgICAgICAgYmFja3RyYWNrID0gIiI7CiAgICAgICAgICBpc1NhZmVTZWdtZW50UGFyYW0gPSBmYWxzZTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gbmVnYXRlKGRlbGltaXRlciwgYmFja3RyYWNrKSB7CiAgICAgIGlmIChiYWNrdHJhY2subGVuZ3RoIDwgMikgewogICAgICAgIGlmIChkZWxpbWl0ZXIubGVuZ3RoIDwgMikKICAgICAgICAgIHJldHVybiBgW14ke2VzY2FwZShkZWxpbWl0ZXIgKyBiYWNrdHJhY2spfV1gOwogICAgICAgIHJldHVybiBgKD86KD8hJHtlc2NhcGUoZGVsaW1pdGVyKX0pW14ke2VzY2FwZShiYWNrdHJhY2spfV0pYDsKICAgICAgfQogICAgICBpZiAoZGVsaW1pdGVyLmxlbmd0aCA8IDIpIHsKICAgICAgICByZXR1cm4gYCg/Oig/ISR7ZXNjYXBlKGJhY2t0cmFjayl9KVteJHtlc2NhcGUoZGVsaW1pdGVyKX1dKWA7CiAgICAgIH0KICAgICAgcmV0dXJuIGAoPzooPyEke2VzY2FwZShiYWNrdHJhY2spfXwke2VzY2FwZShkZWxpbWl0ZXIpfSlbXFxzXFxTXSlgOwogICAgfQogICAgZnVuY3Rpb24gc3RyaW5naWZ5VG9rZW5zKHRva2VucykgewogICAgICBsZXQgdmFsdWUyID0gIiI7CiAgICAgIGxldCBpMTEgPSAwOwogICAgICBmdW5jdGlvbiBuYW1lKHZhbHVlMykgewogICAgICAgIGNvbnN0IGlzU2FmZSA9IGlzTmFtZVNhZmUodmFsdWUzKSAmJiBpc05leHROYW1lU2FmZSh0b2tlbnNbaTExXSk7CiAgICAgICAgcmV0dXJuIGlzU2FmZSA/IHZhbHVlMyA6IEpTT04uc3RyaW5naWZ5KHZhbHVlMyk7CiAgICAgIH0KICAgICAgd2hpbGUgKGkxMSA8IHRva2Vucy5sZW5ndGgpIHsKICAgICAgICBjb25zdCB0b2tlbiA9IHRva2Vuc1tpMTErK107CiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJ0ZXh0IikgewogICAgICAgICAgdmFsdWUyICs9IGVzY2FwZVRleHQodG9rZW4udmFsdWUpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICh0b2tlbi50eXBlID09PSAiZ3JvdXAiKSB7CiAgICAgICAgICB2YWx1ZTIgKz0gYHske3N0cmluZ2lmeVRva2Vucyh0b2tlbi50b2tlbnMpfX1gOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICh0b2tlbi50eXBlID09PSAicGFyYW0iKSB7CiAgICAgICAgICB2YWx1ZTIgKz0gYDoke25hbWUodG9rZW4ubmFtZSl9YDsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gIndpbGRjYXJkIikgewogICAgICAgICAgdmFsdWUyICs9IGAqJHtuYW1lKHRva2VuLm5hbWUpfWA7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5rbm93biB0b2tlbiB0eXBlOiAke3Rva2VuLnR5cGV9YCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHZhbHVlMjsKICAgIH0KICAgIGZ1bmN0aW9uIHN0cmluZ2lmeTUoZGF0YSkgewogICAgICByZXR1cm4gc3RyaW5naWZ5VG9rZW5zKGRhdGEudG9rZW5zKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTmFtZVNhZmUobmFtZSkgewogICAgICBjb25zdCBbZmlyc3QyLCAuLi5yZXN0XSA9IG5hbWU7CiAgICAgIHJldHVybiBJRF9TVEFSVC50ZXN0KGZpcnN0MikgJiYgcmVzdC5ldmVyeSgoY2hhcikgPT4gSURfQ09OVElOVUUudGVzdChjaGFyKSk7CiAgICB9CiAgICBmdW5jdGlvbiBpc05leHROYW1lU2FmZSh0b2tlbikgewogICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gInRleHQiKQogICAgICAgIHJldHVybiAhSURfQ09OVElOVUUudGVzdCh0b2tlbi52YWx1ZVswXSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyb3V0ZXJAMS4zLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cm91dGVyL2Rpc3RfdHMvc21hcnRyb3V0ZXIucGx1Z2lucy5qcwp2YXIgcGF0aFRvUmVnRXhwOwp2YXIgaW5pdF9zbWFydHJvdXRlcl9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyb3V0ZXJAMS4zLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cm91dGVyL2Rpc3RfdHMvc21hcnRyb3V0ZXIucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHM3KCk7CiAgICBpbml0X2Rpc3RfdHMyKCk7CiAgICBwYXRoVG9SZWdFeHAgPSBfX3RvRVNNKHJlcXVpcmVfZGlzdCgpLCAxKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cm91dGVyQDEuMy4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJvdXRlci9kaXN0X3RzL3NtYXJ0cm91dGVyLmNsYXNzZXMucXVlcnlwYXJhbXMuanMKdmFyIFF1ZXJ5UGFyYW1zOwp2YXIgaW5pdF9zbWFydHJvdXRlcl9jbGFzc2VzX3F1ZXJ5cGFyYW1zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyb3V0ZXJAMS4zLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cm91dGVyL2Rpc3RfdHMvc21hcnRyb3V0ZXIuY2xhc3Nlcy5xdWVyeXBhcmFtcy5qcyIoKSB7CiAgICBpbml0X3NtYXJ0cm91dGVyX3BsdWdpbnMoKTsKICAgIFF1ZXJ5UGFyYW1zID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgfQogICAgICBnZXRBbGxBc09iamVjdCgpIHsKICAgICAgICBjb25zdCB1cmxTZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXModXJsU2VhcmNoUGFyYW1zLmVudHJpZXMoKSk7CiAgICAgIH0KICAgICAgc2V0UXVlcnlQYXJhbShxdWVyeUtleUFyZywgcXVlcnlDb250ZW50QXJnLCBwdXNoT3JSZXBsYWNlQXJnID0gInJlcGxhY2UiKSB7CiAgICAgICAgdmFyIHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsKICAgICAgICBxdWVyeVBhcmFtcy5zZXQocXVlcnlLZXlBcmcsIHF1ZXJ5Q29udGVudEFyZyk7CiAgICAgICAgcHVzaE9yUmVwbGFjZUFyZyA9PT0gInB1c2giID8gaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgIj8iICsgcXVlcnlQYXJhbXMudG9TdHJpbmcoKSkgOiBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCBudWxsLCAiPyIgKyBxdWVyeVBhcmFtcy50b1N0cmluZygpKTsKICAgICAgfQogICAgICBkZWxldGVRdWVyeVBhcmFtKHF1ZXJ5S2V5QXJnLCBwdXNoT3JSZXBsYWNlQXJnID0gInJlcGxhY2UiKSB7CiAgICAgICAgdmFyIHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsKICAgICAgICBxdWVyeVBhcmFtcy5kZWxldGUocXVlcnlLZXlBcmcpOwogICAgICAgIHB1c2hPclJlcGxhY2VBcmcgPT09ICJwdXNoIiA/IGhpc3RvcnkucHVzaFN0YXRlKG51bGwsIG51bGwsICI/IiArIHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKCkpIDogaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgbnVsbCwgIj8iICsgcXVlcnlQYXJhbXMudG9TdHJpbmcoKSk7CiAgICAgIH0KICAgICAgZ2V0UXVlcnlQYXJhbShxdWVyeVBhcmFtTmFtZSkgewogICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5nZXRBbGxBc09iamVjdCgpOwogICAgICAgIHJldHVybiBxdWVyeVBhcmFtc1txdWVyeVBhcmFtTmFtZV07CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJvdXRlckAxLjMuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyb3V0ZXIvZGlzdF90cy9zbWFydHJvdXRlci5jbGFzc2VzLnNtYXJ0cm91dGVyLmpzCnZhciByb3V0ZUxvZywgU21hcnRSb3V0ZXI7CnZhciBpbml0X3NtYXJ0cm91dGVyX2NsYXNzZXNfc21hcnRyb3V0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJvdXRlckAxLjMuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyb3V0ZXIvZGlzdF90cy9zbWFydHJvdXRlci5jbGFzc2VzLnNtYXJ0cm91dGVyLmpzIigpIHsKICAgIGluaXRfc21hcnRyb3V0ZXJfcGx1Z2lucygpOwogICAgaW5pdF9zbWFydHJvdXRlcl9jbGFzc2VzX3F1ZXJ5cGFyYW1zKCk7CiAgICByb3V0ZUxvZyA9IChtZXNzYWdlMikgPT4gewogICAgICBjb25zb2xlLmxvZyhgJWNbUm91dGVyXSVjICR7bWVzc2FnZTJ9YCwgImNvbG9yOiByZ2IoMjU1LCAxMDUsIDEwMCk7IiwgImNvbG9yOiBpbmhlcml0Iik7CiAgICB9OwogICAgU21hcnRSb3V0ZXIgPSBjbGFzcyBfU21hcnRSb3V0ZXIgewogICAgICAvKioKICAgICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBSb3V0ZXIuCiAgICAgICAqLwogICAgICBjb25zdHJ1Y3RvcihvcHRpb25zQXJnLCBiYXNlUGF0aCA9ICIiKSB7CiAgICAgICAgdGhpcy5vcHRpb25zID0gewogICAgICAgICAgZGVidWc6IGZhbHNlCiAgICAgICAgfTsKICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gbmV3IFF1ZXJ5UGFyYW1zKCk7CiAgICAgICAgdGhpcy5yb3V0ZXMgPSBbXTsKICAgICAgICB0aGlzLm9wdGlvbnMgPSB7CiAgICAgICAgICAuLi50aGlzLm9wdGlvbnMsCiAgICAgICAgICAuLi5vcHRpb25zQXJnCiAgICAgICAgfTsKICAgICAgICB0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGg7CiAgICAgICAgdGhpcy5wb3BzdGF0ZUxpc3RlbmVyID0gKHBvcFN0YXRlRXZlbnRBcmcpID0+IHsKICAgICAgICAgIHBvcFN0YXRlRXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuX2hhbmRsZVJvdXRlU3RhdGUoKTsKICAgICAgICB9OwogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsIHRoaXMucG9wc3RhdGVMaXN0ZW5lcik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhIHN1Yi1yb3V0ZXIgd2l0aCBhIHNwZWNpZmljIHByZWZpeAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3ViUGF0aAogICAgICAgKiBAcGFyYW0ge0lSb3V0ZXJPcHRpb25zfSBbb3B0aW9uc10KICAgICAgICovCiAgICAgIGNyZWF0ZVN1YlJvdXRlcihzdWJQYXRoLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgbmV3QmFzZVBhdGggPSBgJHt0aGlzLmJhc2VQYXRofSR7c3ViUGF0aH1gOwogICAgICAgIHJldHVybiBuZXcgX1NtYXJ0Um91dGVyKHsgLi4udGhpcy5vcHRpb25zLCAuLi5vcHRpb25zIH0sIG5ld0Jhc2VQYXRoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUHVzaCByb3V0ZSBzdGF0ZSB0byBoaXN0b3J5IHN0YWNrCiAgICAgICAqLwogICAgICBhc3luYyBwdXNoVXJsKHVybCA9ICIvIiwgc3RhdGUxNCA9IHt9KSB7CiAgICAgICAgY29uc3QgZnVsbFVybCA9IGAke3RoaXMuYmFzZVBhdGh9JHt1cmx9YDsKICAgICAgICBpZiAoZnVsbFVybCAhPT0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKSB7CiAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoc3RhdGUxNCwgd2luZG93LmRvY3VtZW50LnRpdGxlLCBmdWxsVXJsKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHN0YXRlMTQsIHdpbmRvdy5kb2N1bWVudC50aXRsZSwgZnVsbFVybCk7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMuX2hhbmRsZVJvdXRlU3RhdGUoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQXR0YWNoIHJvdXRlIHdpdGggaGFuZGxlcgogICAgICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHJvdXRlQXJnCiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGhhbmRsZXJBcmcKICAgICAgICovCiAgICAgIG9uKHJvdXRlQXJnLCBoYW5kbGVyQXJnKSB7CiAgICAgICAgY29uc3QgZnVsbFJvdXRlID0gYCR7dGhpcy5iYXNlUGF0aH0ke3JvdXRlQXJnfWA7CiAgICAgICAgY29uc3Qgcm91dGVPYmplY3QgPSB7CiAgICAgICAgICBtYXRjaEZ1bmN0aW9uOiBwYXRoVG9SZWdFeHAubWF0Y2goZnVsbFJvdXRlKSwKICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXJBcmcKICAgICAgICB9OwogICAgICAgIHRoaXMucm91dGVzLnB1c2gocm91dGVPYmplY3QpOwogICAgICAgIGNvbnN0IHJlbW92ZUZ1bmN0aW9uID0gKCkgPT4gewogICAgICAgICAgdGhpcy5yb3V0ZXMuc3BsaWNlKHRoaXMucm91dGVzLmluZGV4T2Yocm91dGVPYmplY3QpLCAxKTsKICAgICAgICB9OwogICAgICAgIHJldHVybiByZW1vdmVGdW5jdGlvbjsKICAgICAgfQogICAgICAvKioKICAgICAgICogQXBwbHkgcm91dGVzIGhhbmRsZXIgdG8gY3VycmVudCByb3V0ZQogICAgICAgKi8KICAgICAgYXN5bmMgX2hhbmRsZVJvdXRlU3RhdGUoKSB7CiAgICAgICAgY29uc3QgY3VycmVudExvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lOwogICAgICAgIGNvbnN0IHdhbnRlZFJvdXRlcyA9IHRoaXMucm91dGVzLmZpbHRlcigocm91dGVBcmcpID0+IHsKICAgICAgICAgIHJldHVybiAhIXJvdXRlQXJnLm1hdGNoRnVuY3Rpb24oY3VycmVudExvY2F0aW9uKTsKICAgICAgICB9KTsKICAgICAgICBmb3IgKGNvbnN0IHdhbnRlZFJvdXRlIG9mIHdhbnRlZFJvdXRlcykgewogICAgICAgICAgY29uc3Qgcm91dGVSZXN1bHQgPSB3YW50ZWRSb3V0ZS5tYXRjaEZ1bmN0aW9uKGN1cnJlbnRMb2NhdGlvbik7CiAgICAgICAgICB3YW50ZWRSb3V0ZS5oYW5kbGVyKHsKICAgICAgICAgICAgLi4ucm91dGVSZXN1bHQudmFsdWVPZigpLAogICAgICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtcy5nZXRBbGxBc09iamVjdCgpCiAgICAgICAgICAgIC8vIFRPRE8gY2hlY2sgd2V0aGVyIGVudHJpZXMgaXMgc3VwcG9ydGVkIGluIHR5cGluZ3MKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogRGVzdHJveSB0aGUgcm91dGVyIGluc3RhbmNlLCByZW1vdmluZyBhbGwgZXh0ZXJuYWwgcmVmZXJlbmNlcwogICAgICAgKi8KICAgICAgZGVzdHJveSgpIHsKICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLCB0aGlzLnBvcHN0YXRlTGlzdGVuZXIpOwogICAgICAgIHRoaXMucm91dGVzID0gW107CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJvdXRlckAxLjMuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyb3V0ZXIvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTggPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTgsIHsKICBTbWFydFJvdXRlcjogKCkgPT4gU21hcnRSb3V0ZXIKfSk7CnZhciBpbml0X2Rpc3RfdHMxOCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cm91dGVyQDEuMy4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJvdXRlci9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRyb3V0ZXJfY2xhc3Nlc19zbWFydHJvdXRlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRoYXNoQDMuMi42L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGhhc2gvZGlzdF90c193ZWIvcGx1Z2lucy5qcwp2YXIgaW5pdF9wbHVnaW5zMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0aGFzaEAzLjIuNi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRoYXNoL2Rpc3RfdHNfd2ViL3BsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMTAoKTsKICAgIGluaXRfZGlzdF90czEyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGhhc2hAMy4yLjYvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0aGFzaC9kaXN0X3RzX3dlYi9zaGEyNTYuZmFsbGJhY2suanMKZnVuY3Rpb24gcm90cihuMTMsIGI1KSB7CiAgcmV0dXJuIG4xMyA+Pj4gYjUgfCBuMTMgPDwgMzIgLSBiNTsKfQpmdW5jdGlvbiBzaGEyNTZUcmFuc2Zvcm0oVzIsIEg0KSB7CiAgbGV0IGE1ID0gSDRbMF07CiAgbGV0IGI1ID0gSDRbMV07CiAgbGV0IGMxMSA9IEg0WzJdOwogIGxldCBkNiA9IEg0WzNdOwogIGxldCBlMTEgPSBINFs0XTsKICBsZXQgZjcgPSBINFs1XTsKICBsZXQgZzQgPSBINFs2XTsKICBsZXQgaDkgPSBINFs3XTsKICBmb3IgKGxldCBqNCA9IDA7IGo0IDwgNjQ7IGo0KyspIHsKICAgIGlmIChqNCA+PSAxNikgewogICAgICBjb25zdCBzMCA9IHJvdHIoVzJbajQgLSAxNV0sIDcpIF4gcm90cihXMltqNCAtIDE1XSwgMTgpIF4gVzJbajQgLSAxNV0gPj4+IDM7CiAgICAgIGNvbnN0IHMxID0gcm90cihXMltqNCAtIDJdLCAxNykgXiByb3RyKFcyW2o0IC0gMl0sIDE5KSBeIFcyW2o0IC0gMl0gPj4+IDEwOwogICAgICBXMltqNF0gPSBXMltqNCAtIDE2XSArIHMwICsgVzJbajQgLSA3XSArIHMxID4+PiAwOwogICAgfQogICAgY29uc3QgUzEgPSByb3RyKGUxMSwgNikgXiByb3RyKGUxMSwgMTEpIF4gcm90cihlMTEsIDI1KTsKICAgIGNvbnN0IGNoID0gZTExICYgZjcgXiB+ZTExICYgZzQ7CiAgICBjb25zdCB0ZW1wMSA9IGg5ICsgUzEgKyBjaCArIEtbajRdICsgVzJbajRdID4+PiAwOwogICAgY29uc3QgUzAgPSByb3RyKGE1LCAyKSBeIHJvdHIoYTUsIDEzKSBeIHJvdHIoYTUsIDIyKTsKICAgIGNvbnN0IG1haiA9IGE1ICYgYjUgXiBhNSAmIGMxMSBeIGI1ICYgYzExOwogICAgY29uc3QgdGVtcDIgPSBTMCArIG1haiA+Pj4gMDsKICAgIGg5ID0gZzQ7CiAgICBnNCA9IGY3OwogICAgZjcgPSBlMTE7CiAgICBlMTEgPSBkNiArIHRlbXAxID4+PiAwOwogICAgZDYgPSBjMTE7CiAgICBjMTEgPSBiNTsKICAgIGI1ID0gYTU7CiAgICBhNSA9IHRlbXAxICsgdGVtcDIgPj4+IDA7CiAgfQogIEg0WzBdID0gSDRbMF0gKyBhNSA+Pj4gMDsKICBINFsxXSA9IEg0WzFdICsgYjUgPj4+IDA7CiAgSDRbMl0gPSBINFsyXSArIGMxMSA+Pj4gMDsKICBINFszXSA9IEg0WzNdICsgZDYgPj4+IDA7CiAgSDRbNF0gPSBINFs0XSArIGUxMSA+Pj4gMDsKICBINFs1XSA9IEg0WzVdICsgZjcgPj4+IDA7CiAgSDRbNl0gPSBINFs2XSArIGc0ID4+PiAwOwogIEg0WzddID0gSDRbN10gKyBoOSA+Pj4gMDsKfQpmdW5jdGlvbiBzaGEyNTZGYWxsYmFjayhieXRlcykgewogIGNvbnN0IEhfY29weSA9IFsuLi5IMl07CiAgY29uc3QgbXNnTGVuID0gYnl0ZXMubGVuZ3RoOwogIGNvbnN0IG1zZ0JpdExlbiA9IG1zZ0xlbiAqIDg7CiAgY29uc3QgcGFkTGVuID0gbXNnTGVuICUgNjQgPCA1NiA/IDU2IC0gbXNnTGVuICUgNjQgOiAxMjAgLSBtc2dMZW4gJSA2NDsKICBjb25zdCBwYWRkZWQgPSBuZXcgVWludDhBcnJheShtc2dMZW4gKyBwYWRMZW4gKyA4KTsKICBwYWRkZWQuc2V0KGJ5dGVzKTsKICBwYWRkZWRbbXNnTGVuXSA9IDEyODsKICBjb25zdCBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhwYWRkZWQuYnVmZmVyKTsKICBkYXRhVmlldy5zZXRVaW50MzIocGFkZGVkLmxlbmd0aCAtIDgsIDAsIGZhbHNlKTsKICBkYXRhVmlldy5zZXRVaW50MzIocGFkZGVkLmxlbmd0aCAtIDQsIG1zZ0JpdExlbiA+Pj4gMCwgZmFsc2UpOwogIGZvciAobGV0IG9mZnNldCA9IDA7IG9mZnNldCA8IHBhZGRlZC5sZW5ndGg7IG9mZnNldCArPSA2NCkgewogICAgY29uc3QgVzIgPSBuZXcgQXJyYXkoNjQpOwogICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgMTY7IGkxMSsrKSB7CiAgICAgIFcyW2kxMV0gPSBkYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0ICsgaTExICogNCwgZmFsc2UpOwogICAgfQogICAgc2hhMjU2VHJhbnNmb3JtKFcyLCBIX2NvcHkpOwogIH0KICBsZXQgaGV4MyA9ICIiOwogIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IDg7IGkxMSsrKSB7CiAgICBoZXgzICs9IEhfY29weVtpMTFdLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCAiMCIpOwogIH0KICByZXR1cm4gaGV4MzsKfQp2YXIgSywgSDI7CnZhciBpbml0X3NoYTI1Nl9mYWxsYmFjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0aGFzaEAzLjIuNi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRoYXNoL2Rpc3RfdHNfd2ViL3NoYTI1Ni5mYWxsYmFjay5qcyIoKSB7CiAgICBLID0gWwogICAgICAxMTE2MzUyNDA4LAogICAgICAxODk5NDQ3NDQxLAogICAgICAzMDQ5MzIzNDcxLAogICAgICAzOTIxMDA5NTczLAogICAgICA5NjE5ODcxNjMsCiAgICAgIDE1MDg5NzA5OTMsCiAgICAgIDI0NTM2MzU3NDgsCiAgICAgIDI4NzA3NjMyMjEsCiAgICAgIDM2MjQzODEwODAsCiAgICAgIDMxMDU5ODQwMSwKICAgICAgNjA3MjI1Mjc4LAogICAgICAxNDI2ODgxOTg3LAogICAgICAxOTI1MDc4Mzg4LAogICAgICAyMTYyMDc4MjA2LAogICAgICAyNjE0ODg4MTAzLAogICAgICAzMjQ4MjIyNTgwLAogICAgICAzODM1MzkwNDAxLAogICAgICA0MDIyMjI0Nzc0LAogICAgICAyNjQzNDcwNzgsCiAgICAgIDYwNDgwNzYyOCwKICAgICAgNzcwMjU1OTgzLAogICAgICAxMjQ5MTUwMTIyLAogICAgICAxNTU1MDgxNjkyLAogICAgICAxOTk2MDY0OTg2LAogICAgICAyNTU0MjIwODgyLAogICAgICAyODIxODM0MzQ5LAogICAgICAyOTUyOTk2ODA4LAogICAgICAzMjEwMzEzNjcxLAogICAgICAzMzM2NTcxODkxLAogICAgICAzNTg0NTI4NzExLAogICAgICAxMTM5MjY5OTMsCiAgICAgIDMzODI0MTg5NSwKICAgICAgNjY2MzA3MjA1LAogICAgICA3NzM1Mjk5MTIsCiAgICAgIDEyOTQ3NTczNzIsCiAgICAgIDEzOTYxODIyOTEsCiAgICAgIDE2OTUxODM3MDAsCiAgICAgIDE5ODY2NjEwNTEsCiAgICAgIDIxNzcwMjYzNTAsCiAgICAgIDI0NTY5NTYwMzcsCiAgICAgIDI3MzA0ODU5MjEsCiAgICAgIDI4MjAzMDI0MTEsCiAgICAgIDMyNTk3MzA4MDAsCiAgICAgIDMzNDU3NjQ3NzEsCiAgICAgIDM1MTYwNjU4MTcsCiAgICAgIDM2MDAzNTI4MDQsCiAgICAgIDQwOTQ1NzE5MDksCiAgICAgIDI3NTQyMzM0NCwKICAgICAgNDMwMjI3NzM0LAogICAgICA1MDY5NDg2MTYsCiAgICAgIDY1OTA2MDU1NiwKICAgICAgODgzOTk3ODc3LAogICAgICA5NTgxMzk1NzEsCiAgICAgIDEzMjI4MjIyMTgsCiAgICAgIDE1MzcwMDIwNjMsCiAgICAgIDE3NDc4NzM3NzksCiAgICAgIDE5NTU1NjIyMjIsCiAgICAgIDIwMjQxMDQ4MTUsCiAgICAgIDIyMjc3MzA0NTIsCiAgICAgIDIzNjE4NTI0MjQsCiAgICAgIDI0Mjg0MzY0NzQsCiAgICAgIDI3NTY3MzQxODcsCiAgICAgIDMyMDQwMzE0NzksCiAgICAgIDMzMjkzMjUyOTgKICAgIF07CiAgICBIMiA9IFsKICAgICAgMTc3OTAzMzcwMywKICAgICAgMzE0NDEzNDI3NywKICAgICAgMTAxMzkwNDI0MiwKICAgICAgMjc3MzQ4MDc2MiwKICAgICAgMTM1OTg5MzExOSwKICAgICAgMjYwMDgyMjkyNCwKICAgICAgNTI4NzM0NjM1LAogICAgICAxNTQxNDU5MjI1CiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRoYXNoQDMuMi42L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGhhc2gvZGlzdF90c193ZWIvaW5kZXguanMKdmFyIGRpc3RfdHNfd2ViX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoZGlzdF90c193ZWJfZXhwb3J0cywgewogIG1kNUZyb21TdHJpbmc6ICgpID0+IG1kNUZyb21TdHJpbmcsCiAgc2hhMjU2RnJvbUJ1ZmZlcjogKCkgPT4gc2hhMjU2RnJvbUJ1ZmZlciwKICBzaGEyNTZGcm9tRmlsZTogKCkgPT4gc2hhMjU2RnJvbUZpbGUsCiAgc2hhMjU2RnJvbVN0cmVhbTogKCkgPT4gc2hhMjU2RnJvbVN0cmVhbSwKICBzaGEyNTZGcm9tU3RyaW5nOiAoKSA9PiBzaGEyNTZGcm9tU3RyaW5nLAogIHNoYTI1NkZyb21TdHJpbmdTeW5jOiAoKSA9PiBzaGEyNTZGcm9tU3RyaW5nU3luYywKICBzaGEyNjVGcm9tT2JqZWN0OiAoKSA9PiBzaGEyNjVGcm9tT2JqZWN0Cn0pOwp2YXIgaGV4LCBpc0NyeXB0b1N1YnRsZUF2YWlsYWJsZSwgc2hhMjU2RnJvbVN0cmluZywgc2hhMjU2RnJvbVN0cmluZ1N5bmMsIHNoYTI1NkZyb21CdWZmZXIsIHNoYTI2NUZyb21PYmplY3QsIHNoYTI1NkZyb21TdHJlYW0sIHNoYTI1NkZyb21GaWxlLCBtZDVGcm9tU3RyaW5nOwp2YXIgaW5pdF9kaXN0X3RzX3dlYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0aGFzaEAzLjIuNi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRoYXNoL2Rpc3RfdHNfd2ViL2luZGV4LmpzIigpIHsKICAgIGluaXRfcGx1Z2luczIoKTsKICAgIGluaXRfc2hhMjU2X2ZhbGxiYWNrKCk7CiAgICBoZXggPSAoYnVmZmVyMikgPT4gewogICAgICBjb25zdCBoZXhDb2RlcyA9IFtdOwogICAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlcjIpOwogICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCB2aWV3LmJ5dGVMZW5ndGg7IGkxMSArPSA0KSB7CiAgICAgICAgY29uc3QgdmFsdWUyID0gdmlldy5nZXRVaW50MzIoaTExKTsKICAgICAgICBjb25zdCBzdHJpbmdWYWx1ZSA9IHZhbHVlMi50b1N0cmluZygxNik7CiAgICAgICAgY29uc3QgcGFkZGluZyA9ICIwMDAwMDAwMCI7CiAgICAgICAgY29uc3QgcGFkZGVkVmFsdWUgPSAocGFkZGluZyArIHN0cmluZ1ZhbHVlKS5zbGljZSgtcGFkZGluZy5sZW5ndGgpOwogICAgICAgIGhleENvZGVzLnB1c2gocGFkZGVkVmFsdWUpOwogICAgICB9CiAgICAgIHJldHVybiBoZXhDb2Rlcy5qb2luKCIiKTsKICAgIH07CiAgICBpc0NyeXB0b1N1YnRsZUF2YWlsYWJsZSA9ICgpID0+IHsKICAgICAgcmV0dXJuIHR5cGVvZiBjcnlwdG8gIT09ICJ1bmRlZmluZWQiICYmIGNyeXB0by5zdWJ0bGUgIT09IHZvaWQgMDsKICAgIH07CiAgICBzaGEyNTZGcm9tU3RyaW5nID0gYXN5bmMgKHN0cmluZ0FyZykgPT4gewogICAgICBjb25zdCBidWZmZXIyID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0cmluZ0FyZyk7CiAgICAgIGlmIChpc0NyeXB0b1N1YnRsZUF2YWlsYWJsZSgpKSB7CiAgICAgICAgY29uc3QgaGFzaCA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCJTSEEtMjU2IiwgYnVmZmVyMik7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gaGV4KGhhc2gpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHNoYTI1NkZhbGxiYWNrKGJ1ZmZlcjIpOwogICAgICB9CiAgICB9OwogICAgc2hhMjU2RnJvbVN0cmluZ1N5bmMgPSAoc3RyaW5nQXJnKSA9PiB7CiAgICAgIGNvbnNvbGUud2Fybigic2hhMjU2RnJvbVN0cmluZ1N5bmMgaXMgbm90IHRydWx5IHN5bmNocm9ub3VzIGluIGJyb3dzZXIgZW52aXJvbm1lbnQiKTsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJzaGEyNTZGcm9tU3RyaW5nU3luYyBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgZW52aXJvbm1lbnQuIFVzZSBzaGEyNTZGcm9tU3RyaW5nIGluc3RlYWQuIik7CiAgICB9OwogICAgc2hhMjU2RnJvbUJ1ZmZlciA9IGFzeW5jIChidWZmZXJBcmcpID0+IHsKICAgICAgaWYgKGlzQ3J5cHRvU3VidGxlQXZhaWxhYmxlKCkpIHsKICAgICAgICBsZXQgaW5wdXRCdWZmZXI7CiAgICAgICAgaWYgKGJ1ZmZlckFyZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgICAgICAgIGNvbnN0IHZpZXcgPSBidWZmZXJBcmc7CiAgICAgICAgICBpbnB1dEJ1ZmZlciA9IHZpZXcuYnVmZmVyLnNsaWNlKHZpZXcuYnl0ZU9mZnNldCwgdmlldy5ieXRlT2Zmc2V0ICsgdmlldy5ieXRlTGVuZ3RoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW5wdXRCdWZmZXIgPSBidWZmZXJBcmc7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGhhc2ggPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgiU0hBLTI1NiIsIGlucHV0QnVmZmVyKTsKICAgICAgICBjb25zdCByZXN1bHQgPSBoZXgoaGFzaCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCB1aW50OEFycmF5ID0gYnVmZmVyQXJnIGluc3RhbmNlb2YgVWludDhBcnJheSA/IGJ1ZmZlckFyZyA6IG5ldyBVaW50OEFycmF5KGJ1ZmZlckFyZyk7CiAgICAgICAgcmV0dXJuIHNoYTI1NkZhbGxiYWNrKHVpbnQ4QXJyYXkpOwogICAgICB9CiAgICB9OwogICAgc2hhMjY1RnJvbU9iamVjdCA9IGFzeW5jIChvYmplY3RBcmcpID0+IHsKICAgICAgY29uc3Qgc3RyaW5naWZpZWRPYmplY3QgPSBkaXN0X3RzX2V4cG9ydHMxMi5zdHJpbmdpZnkob2JqZWN0QXJnKTsKICAgICAgY29uc3QgaGFzaFJlc3VsdCA9IGF3YWl0IHNoYTI1NkZyb21TdHJpbmcoc3RyaW5naWZpZWRPYmplY3QpOwogICAgICByZXR1cm4gaGFzaFJlc3VsdDsKICAgIH07CiAgICBzaGEyNTZGcm9tU3RyZWFtID0gKGlucHV0KSA9PiB7CiAgICAgIHRocm93IG5ldyBFcnJvcigic2hhMjU2RnJvbVN0cmVhbSBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgZW52aXJvbm1lbnQiKTsKICAgIH07CiAgICBzaGEyNTZGcm9tRmlsZSA9IGFzeW5jIChmaWxlUGF0aCkgPT4gewogICAgICB0aHJvdyBuZXcgRXJyb3IoInNoYTI1NkZyb21GaWxlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciBlbnZpcm9ubWVudCIpOwogICAgfTsKICAgIG1kNUZyb21TdHJpbmcgPSBhc3luYyAoc3RyaW5nVG9IYXNoKSA9PiB7CiAgICAgIHRocm93IG5ldyBFcnJvcigibWQ1RnJvbVN0cmluZyBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgZW52aXJvbm1lbnQuIFdlYiBDcnlwdG8gQVBJIGRvZXMgbm90IHN1cHBvcnQgTUQ1LiIpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvc21hcnRzdGF0ZS5wbHVnaW5zLmpzCnZhciBpbml0X3NtYXJ0c3RhdGVfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvc21hcnRzdGF0ZS5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90c193ZWIoKTsKICAgIGluaXRfZGlzdF90czEyKCk7CiAgICBpbml0X2Rpc3RfdHMoKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIGluaXRfZGlzdF90czEzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0YXRlQDIuMC4yNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdGF0ZS9kaXN0X3RzL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zdGF0ZWFjdGlvbi5qcwp2YXIgU3RhdGVBY3Rpb247CnZhciBpbml0X3NtYXJ0c3RhdGVfY2xhc3Nlc19zdGF0ZWFjdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvc21hcnRzdGF0ZS5jbGFzc2VzLnN0YXRlYWN0aW9uLmpzIigpIHsKICAgIGluaXRfc21hcnRzdGF0ZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0c3RhdGVfY2xhc3Nlc19zdGF0ZXBhcnQoKTsKICAgIFN0YXRlQWN0aW9uID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihzdGF0ZVBhcnRSZWYsIGFjdGlvbkRlZikgewogICAgICAgIHRoaXMuc3RhdGVQYXJ0UmVmID0gc3RhdGVQYXJ0UmVmOwogICAgICAgIHRoaXMuYWN0aW9uRGVmID0gYWN0aW9uRGVmOwogICAgICB9CiAgICAgIHRyaWdnZXIocGF5bG9hZCkgewogICAgICAgIHJldHVybiB0aGlzLnN0YXRlUGFydFJlZi5kaXNwYXRjaEFjdGlvbih0aGlzLCBwYXlsb2FkKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvc21hcnRzdGF0ZS5jbGFzc2VzLnN0YXRlcGFydC5qcwp2YXIgU3RhdGVQYXJ0Owp2YXIgaW5pdF9zbWFydHN0YXRlX2NsYXNzZXNfc3RhdGVwYXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMjcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9zbWFydHN0YXRlLmNsYXNzZXMuc3RhdGVwYXJ0LmpzIigpIHsKICAgIGluaXRfc21hcnRzdGF0ZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0c3RhdGVfY2xhc3Nlc19zdGF0ZWFjdGlvbigpOwogICAgU3RhdGVQYXJ0ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihuYW1lQXJnLCB3ZWJTdG9yZU9wdGlvbnNBcmcpIHsKICAgICAgICB0aGlzLnN0YXRlID0gbmV3IGRpc3RfdHNfZXhwb3J0czIucnhqcy5TdWJqZWN0KCk7CiAgICAgICAgdGhpcy5jdW11bGF0aXZlRGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMuY3VtdWxhdGl2ZURlZmVyKCk7CiAgICAgICAgdGhpcy53ZWJTdG9yZSA9IG51bGw7CiAgICAgICAgdGhpcy5uYW1lID0gbmFtZUFyZzsKICAgICAgICBpZiAod2ViU3RvcmVPcHRpb25zQXJnKSB7CiAgICAgICAgICB0aGlzLndlYlN0b3JlT3B0aW9ucyA9IHdlYlN0b3JlT3B0aW9uc0FyZzsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGluaXRpYWxpemVzIHRoZSB3ZWJzdG9yZQogICAgICAgKi8KICAgICAgYXN5bmMgaW5pdCgpIHsKICAgICAgICBpZiAodGhpcy53ZWJTdG9yZU9wdGlvbnMpIHsKICAgICAgICAgIHRoaXMud2ViU3RvcmUgPSBuZXcgZGlzdF90c19leHBvcnRzMTMuV2ViU3RvcmUodGhpcy53ZWJTdG9yZU9wdGlvbnMpOwogICAgICAgICAgYXdhaXQgdGhpcy53ZWJTdG9yZS5pbml0KCk7CiAgICAgICAgICBjb25zdCBzdG9yZWRTdGF0ZSA9IGF3YWl0IHRoaXMud2ViU3RvcmUuZ2V0KFN0cmluZyh0aGlzLm5hbWUpKTsKICAgICAgICAgIGlmIChzdG9yZWRTdGF0ZSAmJiB0aGlzLnZhbGlkYXRlU3RhdGUoc3RvcmVkU3RhdGUpKSB7CiAgICAgICAgICAgIHRoaXMuc3RhdGVTdG9yZSA9IHN0b3JlZFN0YXRlOwogICAgICAgICAgICBhd2FpdCB0aGlzLm5vdGlmeUNoYW5nZSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogZ2V0cyB0aGUgc3RhdGUgZnJvbSB0aGUgc3RhdGUgc3RvcmUKICAgICAgICovCiAgICAgIGdldFN0YXRlKCkgewogICAgICAgIHJldHVybiB0aGlzLnN0YXRlU3RvcmU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHNldHMgdGhlIHN0YXRlU3RvcmUgdG8gdGhlIG5ldyBzdGF0ZQogICAgICAgKiBAcGFyYW0gbmV3U3RhdGVBcmcKICAgICAgICovCiAgICAgIGFzeW5jIHNldFN0YXRlKG5ld1N0YXRlQXJnKSB7CiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlU3RhdGUobmV3U3RhdGVBcmcpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc3RhdGUgc3RydWN0dXJlIGZvciBzdGF0ZSBwYXJ0ICcke3RoaXMubmFtZX0nYCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc3RhdGVTdG9yZSA9IG5ld1N0YXRlQXJnOwogICAgICAgIGF3YWl0IHRoaXMubm90aWZ5Q2hhbmdlKCk7CiAgICAgICAgaWYgKHRoaXMud2ViU3RvcmUpIHsKICAgICAgICAgIGF3YWl0IHRoaXMud2ViU3RvcmUuc2V0KFN0cmluZyh0aGlzLm5hbWUpLCBuZXdTdGF0ZUFyZyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLnN0YXRlU3RvcmU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFZhbGlkYXRlcyBzdGF0ZSBzdHJ1Y3R1cmUgLSBjYW4gYmUgb3ZlcnJpZGRlbiBmb3IgY3VzdG9tIHZhbGlkYXRpb24KICAgICAgICogQHBhcmFtIHN0YXRlQXJnCiAgICAgICAqLwogICAgICB2YWxpZGF0ZVN0YXRlKHN0YXRlQXJnKSB7CiAgICAgICAgcmV0dXJuIHN0YXRlQXJnICE9PSBudWxsICYmIHN0YXRlQXJnICE9PSB2b2lkIDA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIG5vdGlmaWVzIG9mIGEgY2hhbmdlIG9uIHRoZSBzdGF0ZQogICAgICAgKi8KICAgICAgYXN5bmMgbm90aWZ5Q2hhbmdlKCkgewogICAgICAgIGlmICghdGhpcy5zdGF0ZVN0b3JlKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IGNyZWF0ZVN0YXRlSGFzaCA9IGFzeW5jIChzdGF0ZUFyZykgPT4gewogICAgICAgICAgcmV0dXJuIGF3YWl0IGRpc3RfdHNfd2ViX2V4cG9ydHMuc2hhMjU2RnJvbVN0cmluZyhkaXN0X3RzX2V4cG9ydHMxMi5zdGFibGVPbmVXYXlTdHJpbmdpZnkoc3RhdGVBcmcpKTsKICAgICAgICB9OwogICAgICAgIGNvbnN0IGN1cnJlbnRIYXNoID0gYXdhaXQgY3JlYXRlU3RhdGVIYXNoKHRoaXMuc3RhdGVTdG9yZSk7CiAgICAgICAgaWYgKHRoaXMubGFzdFN0YXRlTm90aWZpY2F0aW9uUGF5bG9hZEhhc2ggJiYgY3VycmVudEhhc2ggPT09IHRoaXMubGFzdFN0YXRlTm90aWZpY2F0aW9uUGF5bG9hZEhhc2gpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5sYXN0U3RhdGVOb3RpZmljYXRpb25QYXlsb2FkSGFzaCA9IGN1cnJlbnRIYXNoOwogICAgICAgIH0KICAgICAgICB0aGlzLnN0YXRlLm5leHQodGhpcy5zdGF0ZVN0b3JlKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY3JlYXRlcyBhIGN1bXVsYXRpdmUgbm90aWZpY2F0aW9uIGJ5IGFkZGluZyBhIGNoYW5nZSBub3RpZmljYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgY2FsbCBzdGFjazsKICAgICAgICovCiAgICAgIG5vdGlmeUNoYW5nZUN1bXVsYXRpdmUoKSB7CiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5zdGF0ZVN0b3JlKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMubm90aWZ5Q2hhbmdlKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgMCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHNlbGVjdHMgYSBzdGF0ZSBvciBhIHN1YnN0YXRlCiAgICAgICAqLwogICAgICBzZWxlY3Qoc2VsZWN0b3JGbikgewogICAgICAgIGlmICghc2VsZWN0b3JGbikgewogICAgICAgICAgc2VsZWN0b3JGbiA9IChzdGF0ZTE0KSA9PiBzdGF0ZTE0OwogICAgICAgIH0KICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLnN0YXRlLnBpcGUoZGlzdF90c19leHBvcnRzMi5yeGpzLm9wcy5zdGFydFdpdGgodGhpcy5nZXRTdGF0ZSgpKSwgZGlzdF90c19leHBvcnRzMi5yeGpzLm9wcy5maWx0ZXIoKHN0YXRlQXJnKSA9PiBzdGF0ZUFyZyAhPT0gdm9pZCAwKSwgZGlzdF90c19leHBvcnRzMi5yeGpzLm9wcy5tYXAoKHN0YXRlQXJnKSA9PiB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gc2VsZWN0b3JGbihzdGF0ZUFyZyk7CiAgICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICAgIH0KICAgICAgICB9KSk7CiAgICAgICAgcmV0dXJuIG1hcHBlZDsKICAgICAgfQogICAgICAvKioKICAgICAgICogY3JlYXRlcyBhbiBhY3Rpb24gY2FwYWJsZSBvZiBtb2RpZnlpbmcgdGhlIHN0YXRlCiAgICAgICAqLwogICAgICBjcmVhdGVBY3Rpb24oYWN0aW9uRGVmKSB7CiAgICAgICAgcmV0dXJuIG5ldyBTdGF0ZUFjdGlvbih0aGlzLCBhY3Rpb25EZWYpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBkaXNwYXRjaGVzIGFuIGFjdGlvbiBvbiB0aGUgc3RhdGVwYXJ0IGxldmVsCiAgICAgICAqLwogICAgICBhc3luYyBkaXNwYXRjaEFjdGlvbihzdGF0ZUFjdGlvbiwgYWN0aW9uUGF5bG9hZCkgewogICAgICAgIGF3YWl0IHRoaXMuY3VtdWxhdGl2ZURlZmVycmVkLnByb21pc2U7CiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSBhd2FpdCBzdGF0ZUFjdGlvbi5hY3Rpb25EZWYodGhpcywgYWN0aW9uUGF5bG9hZCk7CiAgICAgICAgYXdhaXQgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGUoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogd2FpdHMgdW50aWwgYSBjZXJ0YWluIHBhcnQgb2YgdGhlIHN0YXRlIGJlY29tZXMgYXZhaWxhYmxlCiAgICAgICAqIEBwYXJhbSBzZWxlY3RvckZuCiAgICAgICAqLwogICAgICBhc3luYyB3YWl0VW50aWxQcmVzZW50KHNlbGVjdG9yRm4pIHsKICAgICAgICBjb25zdCBkb25lID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgY29uc3Qgc2VsZWN0ZWRPYnNlcnZhYmxlID0gdGhpcy5zZWxlY3Qoc2VsZWN0b3JGbik7CiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gc2VsZWN0ZWRPYnNlcnZhYmxlLnN1YnNjcmliZShhc3luYyAodmFsdWUyKSA9PiB7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIGRvbmUucmVzb2x2ZSh2YWx1ZTIpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRvbmUucHJvbWlzZTsKICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBpcyBleGVjdXRlZAogICAgICAgKi8KICAgICAgYXN5bmMgc3RhdGVTZXR1cChmdW5jQXJnKSB7CiAgICAgICAgY29uc3QgcmVzdWx0UHJvbWlzZSA9IGZ1bmNBcmcodGhpcyk7CiAgICAgICAgdGhpcy5jdW11bGF0aXZlRGVmZXJyZWQuYWRkUHJvbWlzZShyZXN1bHRQcm9taXNlKTsKICAgICAgICB0aGlzLnNldFN0YXRlKGF3YWl0IHJlc3VsdFByb21pc2UpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMjcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9zbWFydHN0YXRlLmNsYXNzZXMuc21hcnRzdGF0ZS5qcwp2YXIgU21hcnRzdGF0ZTsKdmFyIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3NtYXJ0c3RhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0YXRlQDIuMC4yNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdGF0ZS9kaXN0X3RzL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zbWFydHN0YXRlLmpzIigpIHsKICAgIGluaXRfc21hcnRzdGF0ZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0c3RhdGVfY2xhc3Nlc19zdGF0ZXBhcnQoKTsKICAgIFNtYXJ0c3RhdGUgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuc3RhdGVQYXJ0TWFwID0ge307CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEFsbG93cyBnZXR0aW5nIGFuZCBpbml0aWFsaXppbmcgYSBuZXcgc3RhdGVwYXJ0CiAgICAgICAqIGluaXRNb2RlID09PSAnc29mdCcgKGRlZmF1bHQpIC0gcmV0dXJucyBleGlzdGluZyBzdGF0ZXBhcnQgaWYgZXhpc3RzLCBjcmVhdGVzIG5ldyBpZiBub3QKICAgICAgICogaW5pdE1vZGUgPT09ICdtYW5kYXRvcnknIC0gcmVxdWlyZXMgc3RhdGVwYXJ0IHRvIG5vdCBleGlzdCwgZmFpbHMgaWYgaXQgZG9lcwogICAgICAgKiBpbml0TW9kZSA9PT0gJ2ZvcmNlJyAtIGFsd2F5cyBjcmVhdGVzIG5ldyBzdGF0ZXBhcnQsIG92ZXJ3cml0aW5nIGFueSBleGlzdGluZwogICAgICAgKiBpbml0TW9kZSA9PT0gJ3BlcnNpc3RlbnQnIC0gbGlrZSAnc29mdCcgYnV0IHdpdGggd2Vic3RvcmUgcGVyc2lzdGVuY2UKICAgICAgICogQHBhcmFtIHN0YXRlUGFydE5hbWVBcmcKICAgICAgICogQHBhcmFtIGluaXRpYWxBcmcKICAgICAgICogQHBhcmFtIGluaXRNb2RlCiAgICAgICAqLwogICAgICBhc3luYyBnZXRTdGF0ZVBhcnQoc3RhdGVQYXJ0TmFtZUFyZywgaW5pdGlhbEFyZywgaW5pdE1vZGUgPSAic29mdCIpIHsKICAgICAgICBjb25zdCBleGlzdGluZ1N0YXRlUGFydCA9IHRoaXMuc3RhdGVQYXJ0TWFwW3N0YXRlUGFydE5hbWVBcmddOwogICAgICAgIGlmIChleGlzdGluZ1N0YXRlUGFydCkgewogICAgICAgICAgc3dpdGNoIChpbml0TW9kZSkgewogICAgICAgICAgICBjYXNlICJtYW5kYXRvcnkiOgogICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RhdGUgcGFydCAnJHtzdGF0ZVBhcnROYW1lQXJnfScgYWxyZWFkeSBleGlzdHMsIGJ1dCBpbml0TW9kZSBpcyAnbWFuZGF0b3J5J2ApOwogICAgICAgICAgICBjYXNlICJmb3JjZSI6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU3RhdGVQYXJ0KHN0YXRlUGFydE5hbWVBcmcsIGluaXRpYWxBcmcsIGluaXRNb2RlKTsKICAgICAgICAgICAgY2FzZSAic29mdCI6CiAgICAgICAgICAgIGNhc2UgInBlcnNpc3RlbnQiOgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHJldHVybiBleGlzdGluZ1N0YXRlUGFydDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKCFpbml0aWFsQXJnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RhdGUgcGFydCAnJHtzdGF0ZVBhcnROYW1lQXJnfScgZG9lcyBub3QgZXhpc3QgYW5kIG5vIGluaXRpYWwgc3RhdGUgcHJvdmlkZWRgKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVN0YXRlUGFydChzdGF0ZVBhcnROYW1lQXJnLCBpbml0aWFsQXJnLCBpbml0TW9kZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGVzIGEgc3RhdGVwYXJ0CiAgICAgICAqIEBwYXJhbSBzdGF0ZVBhcnROYW1lCiAgICAgICAqIEBwYXJhbSBpbml0aWFsUGF5bG9hZEFyZwogICAgICAgKiBAcGFyYW0gaW5pdE1vZGUKICAgICAgICovCiAgICAgIGFzeW5jIGNyZWF0ZVN0YXRlUGFydChzdGF0ZVBhcnROYW1lLCBpbml0aWFsUGF5bG9hZEFyZywgaW5pdE1vZGUgPSAic29mdCIpIHsKICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IG5ldyBTdGF0ZVBhcnQoc3RhdGVQYXJ0TmFtZSwgaW5pdE1vZGUgPT09ICJwZXJzaXN0ZW50IiA/IHsKICAgICAgICAgIGRiTmFtZTogInNtYXJ0c3RhdGUiLAogICAgICAgICAgc3RvcmVOYW1lOiBzdGF0ZVBhcnROYW1lCiAgICAgICAgfSA6IG51bGwpOwogICAgICAgIGF3YWl0IG5ld1N0YXRlLmluaXQoKTsKICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBuZXdTdGF0ZS5nZXRTdGF0ZSgpOwogICAgICAgIGF3YWl0IG5ld1N0YXRlLnNldFN0YXRlKHsKICAgICAgICAgIC4uLmN1cnJlbnRTdGF0ZSwKICAgICAgICAgIC4uLmluaXRpYWxQYXlsb2FkQXJnCiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5zdGF0ZVBhcnRNYXBbc3RhdGVQYXJ0TmFtZV0gPSBuZXdTdGF0ZTsKICAgICAgICByZXR1cm4gbmV3U3RhdGU7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0YXRlQDIuMC4yNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdGF0ZS9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMxOSA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMxOSwgewogIFNtYXJ0c3RhdGU6ICgpID0+IFNtYXJ0c3RhdGUsCiAgU3RhdGVBY3Rpb246ICgpID0+IFN0YXRlQWN0aW9uLAogIFN0YXRlUGFydDogKCkgPT4gU3RhdGVQYXJ0Cn0pOwp2YXIgaW5pdF9kaXN0X3RzMTkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0YXRlQDIuMC4yNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdGF0ZS9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3NtYXJ0c3RhdGUoKTsKICAgIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3N0YXRlcGFydCgpOwogICAgaW5pdF9zbWFydHN0YXRlX2NsYXNzZXNfc3RhdGVhY3Rpb24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dXJsQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHVybC9kaXN0X3RzL3NtYXJ0dXJsLnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnR1cmxfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dXJsQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHVybC9kaXN0X3RzL3NtYXJ0dXJsLnBsdWdpbnMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR1cmxAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dXJsL2Rpc3RfdHMvc21hcnR1cmwuY2xhc3Nlcy5zbWFydHVybC5qcwp2YXIgU21hcnR1cmw7CnZhciBpbml0X3NtYXJ0dXJsX2NsYXNzZXNfc21hcnR1cmwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHVybEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR1cmwvZGlzdF90cy9zbWFydHVybC5jbGFzc2VzLnNtYXJ0dXJsLmpzIigpIHsKICAgIGluaXRfc21hcnR1cmxfcGx1Z2lucygpOwogICAgU21hcnR1cmwgPSBjbGFzcyBfU21hcnR1cmwgewogICAgICAvLyBTdGF0aWMgbWV0aG9kIHRvIGNyZWF0ZSBhIFNtYXJ0dXJsIGluc3RhbmNlIGZyb20gYSBVUkwgc3RyaW5nCiAgICAgIHN0YXRpYyBjcmVhdGVGcm9tVXJsKHVybEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIGNvbnN0IHBhcnNlZFVybEluc3RhbmNlID0gbmV3IFVSTCh1cmxBcmcpOwogICAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHt9OwogICAgICAgIGNvbnN0IHNlYXJjaFBhcmFtUGFpcnMgPSBbXTsKICAgICAgICBpZiAocGFyc2VkVXJsSW5zdGFuY2Uuc2VhcmNoKSB7CiAgICAgICAgICBwYXJzZWRVcmxJbnN0YW5jZS5zZWFyY2gucmVwbGFjZSgiPyIsICIiKS5zcGxpdCgiJiIpLm1hcCgoc2VhcmNoUGFyYW1QYWlyKSA9PiB7CiAgICAgICAgICAgIHNlYXJjaFBhcmFtUGFpcnMucHVzaCh7CiAgICAgICAgICAgICAga2V5OiBzZWFyY2hQYXJhbVBhaXIuc3BsaXQoIj0iKVswXSwKICAgICAgICAgICAgICB2YWx1ZTogc2VhcmNoUGFyYW1QYWlyLnNwbGl0KCI9IilbMV0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgZm9yIChjb25zdCBzZWFyY2hQYXJhbVBhaXIgb2Ygc2VhcmNoUGFyYW1QYWlycykgewogICAgICAgICAgc2VhcmNoUGFyYW1zW3NlYXJjaFBhcmFtUGFpci5rZXldID0gc2VhcmNoUGFyYW1QYWlyLnZhbHVlOwogICAgICAgIH0KICAgICAgICBpZiAob3B0aW9uc0FyZz8uc2VhcmNoUGFyYW1zKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2YgT2JqZWN0LmtleXMob3B0aW9uc0FyZy5zZWFyY2hQYXJhbXMpKSB7CiAgICAgICAgICAgIHNlYXJjaFBhcmFtc1trZXkyXSA9IG9wdGlvbnNBcmcuc2VhcmNoUGFyYW1zW2tleTJdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZXQgcGF0aDIgPSBwYXJzZWRVcmxJbnN0YW5jZS5wYXRobmFtZSB8fCAiIjsKICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2VhcmNoUGFyYW1zKS5sZW5ndGggPiAwKSB7CiAgICAgICAgICBwYXRoMiArPSAiPyI7CiAgICAgICAgICBsZXQgZmlyc3QyID0gdHJ1ZTsKICAgICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBPYmplY3Qua2V5cyhzZWFyY2hQYXJhbXMpKSB7CiAgICAgICAgICAgIGlmIChmaXJzdDIpIHsKICAgICAgICAgICAgICBmaXJzdDIgPSBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBwYXRoMiArPSAiJiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcGF0aDIgKz0gYCR7a2V5Mn09JHtzZWFyY2hQYXJhbXNba2V5Ml19YDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gewogICAgICAgICAgLi4ucGFyc2VkVXJsSW5zdGFuY2UsCiAgICAgICAgICBocmVmOiBwYXJzZWRVcmxJbnN0YW5jZS5ocmVmLAogICAgICAgICAgb3JpZ2luOiBwYXJzZWRVcmxJbnN0YW5jZS5vcmlnaW4sCiAgICAgICAgICBwcm90b2NvbDogcGFyc2VkVXJsSW5zdGFuY2UucHJvdG9jb2wsCiAgICAgICAgICB1c2VybmFtZTogcGFyc2VkVXJsSW5zdGFuY2UudXNlcm5hbWUsCiAgICAgICAgICBwYXNzd29yZDogcGFyc2VkVXJsSW5zdGFuY2UucGFzc3dvcmQsCiAgICAgICAgICBob3N0OiBwYXJzZWRVcmxJbnN0YW5jZS5ob3N0LAogICAgICAgICAgaG9zdG5hbWU6IHBhcnNlZFVybEluc3RhbmNlLmhvc3RuYW1lLAogICAgICAgICAgcG9ydDogcGFyc2VkVXJsSW5zdGFuY2UucG9ydCwKICAgICAgICAgIHBhdGg6IHBhdGgyLAogICAgICAgICAgcGF0aG5hbWU6IHBhcnNlZFVybEluc3RhbmNlLnBhdGhuYW1lLAogICAgICAgICAgc2VhcmNoOiBwYXJzZWRVcmxJbnN0YW5jZS5zZWFyY2gsCiAgICAgICAgICBzZWFyY2hQYXJhbXMsCiAgICAgICAgICBoYXNoOiBwYXJzZWRVcmxJbnN0YW5jZS5oYXNoCiAgICAgICAgfTsKICAgICAgICBpZiAoIXBhcnNlZFVybC5wb3J0ICYmIHBhcnNlZFVybC5wcm90b2NvbCA9PT0gImh0dHBzOiIpIHsKICAgICAgICAgIHBhcnNlZFVybC5wb3J0ID0gIjQ0MyI7CiAgICAgICAgfQogICAgICAgIGlmICghcGFyc2VkVXJsLnBvcnQgJiYgcGFyc2VkVXJsLnByb3RvY29sID09PSAiaHR0cDoiKSB7CiAgICAgICAgICBwYXJzZWRVcmwucG9ydCA9ICI4MCI7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJldHVyblNtYXJ0dXJsID0gbmV3IF9TbWFydHVybCgpOwogICAgICAgIE9iamVjdC5hc3NpZ24ocmV0dXJuU21hcnR1cmwsIHBhcnNlZFVybCk7CiAgICAgICAgcmV0dXJuIHJldHVyblNtYXJ0dXJsOwogICAgICB9CiAgICAgIC8vIFN0YXRpYyBtZXRob2QgdG8gY3JlYXRlIGEgU21hcnR1cmwgaW5zdGFuY2UgZnJvbSBhbiBleGlzdGluZyBJVXJsT2JqZWN0CiAgICAgIHN0YXRpYyBjcmVhdGVGcm9tUGFyc2VkVXJsKHBhcnNlZFVybEFyZykgewogICAgICAgIGNvbnN0IHJldHVyblNtYXJ0dXJsID0gbmV3IF9TbWFydHVybCgpOwogICAgICAgIE9iamVjdC5hc3NpZ24ocmV0dXJuU21hcnR1cmwsIHBhcnNlZFVybEFyZyk7CiAgICAgICAgcmV0dXJuIHJldHVyblNtYXJ0dXJsOwogICAgICB9CiAgICAgIC8vIENvbnN0cnVjdG9yIGluaXRpYWxpemVzIHNlYXJjaFBhcmFtcyBhcyBhbiBlbXB0eSBvYmplY3QKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5zZWFyY2hQYXJhbXMgPSB7fTsKICAgICAgfQogICAgICAvLyBNZXRob2QgdG8gY3JlYXRlIGFuIGluZGVwZW5kZW50IGNsb25lIG9mIHRoZSBjdXJyZW50IFNtYXJ0dXJsIGluc3RhbmNlCiAgICAgIGNsb25lKCkgewogICAgICAgIGNvbnN0IGNsb25lZEluc3RhbmNlID0gbmV3IF9TbWFydHVybCgpOwogICAgICAgIE9iamVjdC5hc3NpZ24oY2xvbmVkSW5zdGFuY2UsIHRoaXMpOwogICAgICAgIGNsb25lZEluc3RhbmNlLnNlYXJjaFBhcmFtcyA9IHsgLi4udGhpcy5zZWFyY2hQYXJhbXMgfTsKICAgICAgICByZXR1cm4gY2xvbmVkSW5zdGFuY2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFR5cGVkIG1ldGhvZCB0byBzZXQgYSBwcm9wZXJ0eSBhbmQgcmV0dXJuIHRoZSBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuCiAgICAgICAqIEBwYXJhbSBwcm9wIC0gVGhlIHByb3BlcnR5IG5hbWUgdG8gc2V0IChtdXN0IGJlIGEga2V5IG9mIFNtYXJ0dXJsKQogICAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBwcm9wZXJ0eQogICAgICAgKiBAcmV0dXJucyBUaGUgU21hcnR1cmwgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZwogICAgICAgKi8KICAgICAgc2V0KHByb3AsIHZhbHVlMikgewogICAgICAgIHRoaXNbcHJvcF0gPSB2YWx1ZTI7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgICAgLy8gTWV0aG9kIHRvIGNvbnZlcnQgdGhlIFNtYXJ0dXJsIGluc3RhbmNlIGJhY2sgaW50byBhIFVSTCBzdHJpbmcKICAgICAgdG9TdHJpbmcoKSB7CiAgICAgICAgbGV0IHVzZXJwYXJ0ID0gYGA7CiAgICAgICAgaWYgKHRoaXMudXNlcm5hbWUgJiYgIXRoaXMucGFzc3dvcmQpIHsKICAgICAgICAgIHVzZXJwYXJ0ID0gYCR7dGhpcy51c2VybmFtZX1AYDsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMudXNlcm5hbWUgJiYgdGhpcy5wYXNzd29yZCkgewogICAgICAgICAgdXNlcnBhcnQgPSBgJHt0aGlzLnVzZXJuYW1lfToke3RoaXMucGFzc3dvcmR9QGA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBgJHt0aGlzLnByb3RvY29sfS8vJHt1c2VycGFydH0ke3RoaXMuaG9zdG5hbWV9OiR7dGhpcy5wb3J0fSR7dGhpcy5wYXRofWA7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHVybEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR1cmwvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjAgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjAsIHsKICBTbWFydHVybDogKCkgPT4gU21hcnR1cmwKfSk7CnZhciBpbml0X2Rpc3RfdHMyMCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dXJsQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHVybC9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnR1cmxfY2xhc3Nlc19zbWFydHVybCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2hyb2NrcytzbWFydHByb21pc2VANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNocm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvc21hcnRwcm9taXNlLmNsYXNzZXMuZGVmZXJyZWQuanMKdmFyIERlZmVycmVkMiwgZGVmZXIzOwp2YXIgaW5pdF9zbWFydHByb21pc2VfY2xhc3Nlc19kZWZlcnJlZDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0cHJvbWlzZUA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9zbWFydHByb21pc2UuY2xhc3Nlcy5kZWZlcnJlZC5qcyIoKSB7CiAgICBEZWZlcnJlZDIgPSBjbGFzcyB7CiAgICAgIGNsYWltKCkgewogICAgICAgIGlmICh0aGlzLmNsYWltZWQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRGVmZXJyZWQgYWxyZWFkeSBjbGFpbWVkIik7CiAgICAgICAgfQogICAgICAgIHRoaXMuY2xhaW1lZCA9IHRydWU7CiAgICAgIH0KICAgICAgZ2V0IGR1cmF0aW9uKCkgewogICAgICAgIGlmICh0aGlzLnN0b3BwZWRBdCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcHBlZEF0IC0gdGhpcy5zdGFydGVkQXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydGVkQXQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuY2xhaW1lZCA9IGZhbHNlOwogICAgICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgICAgICB0aGlzLnJlc29sdmUgPSAodmFsdWVBcmcpID0+IHsKICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSAiZnVsZmlsbGVkIjsKICAgICAgICAgICAgdGhpcy5zdG9wcGVkQXQgPSBEYXRlLm5vdygpOwogICAgICAgICAgICByZXNvbHZlMih2YWx1ZUFyZyk7CiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5yZWplY3QgPSAocmVhc29uKSA9PiB7CiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gInJlamVjdGVkIjsKICAgICAgICAgICAgdGhpcy5zdG9wcGVkQXQgPSBEYXRlLm5vdygpOwogICAgICAgICAgICByZWplY3QocmVhc29uKTsKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLnN0YXJ0ZWRBdCA9IERhdGUubm93KCk7CiAgICAgICAgICB0aGlzLnN0YXR1cyA9ICJwZW5kaW5nIjsKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIGRlZmVyMyA9ICgpID0+IHsKICAgICAgcmV0dXJuIG5ldyBEZWZlcnJlZDIoKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0cHJvbWlzZUA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9zbWFydHByb21pc2UuY2xhc3Nlcy5jdW11bGF0aXZlZGVmZXJyZWQuanMKdmFyIEN1bXVsYXRpdmVEZWZlcnJlZDIsIGN1bXVsYXRpdmVEZWZlcjI7CnZhciBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2N1bXVsYXRpdmVkZWZlcnJlZDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0cHJvbWlzZUA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9zbWFydHByb21pc2UuY2xhc3Nlcy5jdW11bGF0aXZlZGVmZXJyZWQuanMiKCkgewogICAgaW5pdF9zbWFydHByb21pc2VfY2xhc3Nlc19kZWZlcnJlZDIoKTsKICAgIEN1bXVsYXRpdmVEZWZlcnJlZDIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuYWNjdW11bGF0ZWRQcm9taXNlcyA9IFtdOwogICAgICAgIHRoaXMuZGVmZXJyZWQgPSBkZWZlcjMoKTsKICAgICAgICB0aGlzLnByb21pc2UgPSB0aGlzLmRlZmVycmVkLnByb21pc2U7CiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7CiAgICAgICAgICB3aGlsZSAodGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgY29uc3QgcG9wcGVkUHJvbWlzZSA9IHRoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5zaGlmdCgpOwogICAgICAgICAgICBhd2FpdCBwb3BwZWRQcm9taXNlOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgfSwgMCk7CiAgICAgIH0KICAgICAgYWRkUHJvbWlzZShwcm9taXNlQXJnKSB7CiAgICAgICAgdGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLnB1c2gocHJvbWlzZUFyZyk7CiAgICAgIH0KICAgIH07CiAgICBjdW11bGF0aXZlRGVmZXIyID0gKCkgPT4gewogICAgICByZXR1cm4gbmV3IEN1bXVsYXRpdmVEZWZlcnJlZDIoKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0cHJvbWlzZUA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjEgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjEsIHsKICBDdW11bGF0aXZlRGVmZXJyZWQ6ICgpID0+IEN1bXVsYXRpdmVEZWZlcnJlZDIsCiAgRGVmZXJyZWQ6ICgpID0+IERlZmVycmVkMiwKICBjdW11bGF0aXZlRGVmZXI6ICgpID0+IGN1bXVsYXRpdmVEZWZlcjIsCiAgZGVmZXI6ICgpID0+IGRlZmVyMywKICBnZXRGaXJzdFRydWVPckZhbHNlOiAoKSA9PiBnZXRGaXJzdFRydWVPckZhbHNlMiwKICBtYXA6ICgpID0+IG1hcDYsCiAgcmVqZWN0ZWRQcm9taXNlOiAoKSA9PiByZWplY3RlZFByb21pc2UyLAogIHJlc29sdmVkUHJvbWlzZTogKCkgPT4gcmVzb2x2ZWRQcm9taXNlMiwKICB0aW1lb3V0QW5kQ29udGludWU6ICgpID0+IHRpbWVvdXRBbmRDb250aW51ZTIsCiAgdGltZW91dFdyYXA6ICgpID0+IHRpbWVvdXRXcmFwMgp9KTsKdmFyIHJlc29sdmVkUHJvbWlzZTIsIHJlamVjdGVkUHJvbWlzZTIsIG1hcDYsIHRpbWVvdXRXcmFwMiwgdGltZW91dEFuZENvbnRpbnVlMiwgZ2V0Rmlyc3RUcnVlT3JGYWxzZTI7CnZhciBpbml0X2Rpc3RfdHMyMSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRwcm9taXNlQDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfZGVmZXJyZWQyKCk7CiAgICBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2N1bXVsYXRpdmVkZWZlcnJlZDIoKTsKICAgIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfZGVmZXJyZWQyKCk7CiAgICByZXNvbHZlZFByb21pc2UyID0gKHZhbHVlMikgPT4gewogICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlMik7CiAgICB9OwogICAgcmVqZWN0ZWRQcm9taXNlMiA9IChlcnIpID0+IHsKICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7CiAgICB9OwogICAgbWFwNiA9IGFzeW5jIChpbnB1dEFyZywgZnVuY3Rpb25BcmcpID0+IHsKICAgICAgY29uc3QgcHJvbWlzZUFycmF5ID0gW107CiAgICAgIGNvbnN0IHJlc3VsdEFycmF5ID0gW107CiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpbnB1dEFyZykgewogICAgICAgIGNvbnN0IHByb21pc2UgPSBmdW5jdGlvbkFyZyhpdGVtKTsKICAgICAgICBwcm9taXNlQXJyYXkucHVzaChwcm9taXNlKTsKICAgICAgICBwcm9taXNlLnRoZW4oKHgzKSA9PiB7CiAgICAgICAgICByZXN1bHRBcnJheS5wdXNoKHgzKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlQXJyYXkpOwogICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CiAgICB9OwogICAgdGltZW91dFdyYXAyID0gYXN5bmMgKHByb21pc2VBcmcsIHRpbWVvdXRJbk1zQXJnLCByZWplY3RBcmcgPSB0cnVlKSA9PiB7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgaWYgKHJlamVjdEFyZykgewogICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCJ0aW1lb3V0IikpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzb2x2ZTIobnVsbCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgdGltZW91dEluTXNBcmcpOwogICAgICAgIHByb21pc2VBcmcudGhlbihyZXNvbHZlMiwgcmVqZWN0KTsKICAgICAgfSk7CiAgICB9OwogICAgdGltZW91dEFuZENvbnRpbnVlMiA9IGFzeW5jIChwcm9taXNlQXJnLCB0aW1lb3V0SW5Nc0FyZyA9IDZlNCkgPT4gewogICAgICByZXR1cm4gdGltZW91dFdyYXAyKHByb21pc2VBcmcsIHRpbWVvdXRJbk1zQXJnLCBmYWxzZSk7CiAgICB9OwogICAgZ2V0Rmlyc3RUcnVlT3JGYWxzZTIgPSBhc3luYyAocHJvbWlzZXNBcmcpID0+IHsKICAgICAgY29uc3QgZG9uZSA9IGRlZmVyMygpOwogICAgICBmb3IgKGNvbnN0IHByb21pc2VBcmcgb2YgcHJvbWlzZXNBcmcpIHsKICAgICAgICBwcm9taXNlQXJnLnRoZW4oKHJlc3VsdEFyZykgPT4gewogICAgICAgICAgaWYgKHJlc3VsdEFyZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICBkb25lLnJlc29sdmUodHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXNBcmcpLnRoZW4oKCkgPT4gewogICAgICAgIGRvbmUucmVzb2x2ZShmYWxzZSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gZG9uZS5wcm9taXNlOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRkZWxheUAzLjAuMS9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydGRlbGF5L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czIyID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czIyLCB7CiAgVGltZW91dDogKCkgPT4gVGltZW91dDIsCiAgZGVsYXlGb3I6ICgpID0+IGRlbGF5Rm9yMiwKICBkZWxheUZvclJhbmRvbTogKCkgPT4gZGVsYXlGb3JSYW5kb20yCn0pOwp2YXIgZGVsYXlGb3IyLCBkZWxheUZvclJhbmRvbTIsIFRpbWVvdXQyOwp2YXIgaW5pdF9kaXN0X3RzMjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0ZGVsYXlAMy4wLjEvbm9kZV9tb2R1bGVzL0BwdXNocm9ja3Mvc21hcnRkZWxheS9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGlzdF90czIxKCk7CiAgICBkZWxheUZvcjIgPSBhc3luYyAodGltZUluTWlsbGlzZWNvbmRBcmcsIHBhc3NPbkFyZywgdW5yZWZlZEFyZyA9IGZhbHNlKSA9PiB7CiAgICAgIGNvbnN0IHRpbWVvdXQyID0gbmV3IFRpbWVvdXQyKHRpbWVJbk1pbGxpc2Vjb25kQXJnLCBudWxsLCB1bnJlZmVkQXJnKTsKICAgICAgYXdhaXQgdGltZW91dDIucHJvbWlzZTsKICAgICAgcmV0dXJuIHBhc3NPbkFyZzsKICAgIH07CiAgICBkZWxheUZvclJhbmRvbTIgPSBhc3luYyAodGltZU1pbkluTWlsbGlzZWNvbmRBcmcsIHRpbWVNYXhJbk1pbGxpc2Vjb25kQXJnLCBwYXNzT25BcmcsIHVucmVmZWRBcmcgPSBmYWxzZSkgPT4gewogICAgICBhd2FpdCBkZWxheUZvcjIoTWF0aC5yYW5kb20oKSAqICh0aW1lTWF4SW5NaWxsaXNlY29uZEFyZyAtIHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnKSArIHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnLCBudWxsLCB1bnJlZmVkQXJnKTsKICAgICAgcmV0dXJuIHBhc3NPbkFyZzsKICAgIH07CiAgICBUaW1lb3V0MiA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodGltZUluTWlsbGlzZWNvbmRBcmcsIHBhc3NPbiwgdW5yZWZlZEFyZyA9IGZhbHNlKSB7CiAgICAgICAgdGhpcy5fY2FuY2VsbGVkID0gZmFsc2U7CiAgICAgICAgdGhpcy50aW1lb3V0SW5NaWxsaXMgPSB0aW1lSW5NaWxsaXNlY29uZEFyZzsKICAgICAgICB0aGlzLl9kZWZlcnJlZCA9IGRlZmVyMygpOwogICAgICAgIHRoaXMucHJvbWlzZSA9IHRoaXMuX2RlZmVycmVkLnByb21pc2U7CiAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgaWYgKCF0aGlzLl9jYW5jZWxsZWQpIHsKICAgICAgICAgICAgdGhpcy5fZGVmZXJyZWQucmVzb2x2ZShwYXNzT24pOwogICAgICAgICAgfQogICAgICAgIH0sIHRpbWVJbk1pbGxpc2Vjb25kQXJnKTsKICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBEYXRlLm5vdygpOwogICAgICAgIGlmICh1bnJlZmVkQXJnKSB7CiAgICAgICAgICB0aGlzLm1ha2VVbnJlZmVkKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB1bnJlZmZpbmcgYSB0aW1lb3V0IGNhdXNlcyB0aGUgbm9kZSBwcm9jZXNzIHRvIG5vdCB3YWl0IGZvciBjb21wbGV0aW9uIGJlZm9yZSBleGl0CiAgICAgICAqLwogICAgICBtYWtlVW5yZWZlZCgpIHsKICAgICAgICB0aGlzLl90aW1lb3V0LnVucmVmKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNhbmNlbHMgdGhlIHRpbWVyCiAgICAgICAqLwogICAgICBjYW5jZWwoKSB7CiAgICAgICAgdGhpcy5fY2FuY2VsbGVkID0gdHJ1ZTsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7CiAgICAgIH0KICAgICAgZ2V0VGltZUxlZnQoKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zdGFydGVkICsgdGhpcy50aW1lb3V0SW5NaWxsaXMgLSBEYXRlLm5vdygpOwogICAgICAgIHJldHVybiByZXN1bHQgPiAwID8gcmVzdWx0IDogMDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9hZGRyZXNzLmpzCnZhciBpbml0X2FkZHJlc3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvYWRkcmVzcy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvY29tcGFueS5qcwp2YXIgaW5pdF9jb21wYW55ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2NvbXBhbnkuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9jb250YWN0LmpzCnZhciBpbml0X2NvbnRhY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvY29udGFjdC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyMygpOwogICAgaW5pdF9kaXN0X3RzMjMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2NoZWNraW5nYWNjb3VudC5qcwp2YXIgaW5pdF9jaGVja2luZ2FjY291bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9jaGVja2luZ2FjY291bnQuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2N1cnJlbmN5LmpzCnZhciBpbml0X2N1cnJlbmN5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvY3VycmVuY3kuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvZXhwZW5zZS5qcwp2YXIgaW5pdF9leHBlbnNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvZXhwZW5zZS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvaW52b2ljZS5qcwp2YXIgaW5pdF9pbnZvaWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvaW52b2ljZS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvcGF5bWVudC5qcwp2YXIgaW5pdF9wYXltZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvcGF5bWVudC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS90cmFuc2FjdGlvbi5qcwp2YXIgaW5pdF90cmFuc2FjdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL3RyYW5zYWN0aW9uLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2luZGV4LmpzCnZhciBmaW5hbmNlX2V4cG9ydHMgPSB7fTsKdmFyIGluaXRfZmluYW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2luZGV4LmpzIigpIHsKICAgIGluaXRfY2hlY2tpbmdhY2NvdW50KCk7CiAgICBpbml0X2N1cnJlbmN5KCk7CiAgICBpbml0X2V4cGVuc2UoKTsKICAgIGluaXRfaW52b2ljZSgpOwogICAgaW5pdF9wYXltZW50KCk7CiAgICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3Mvam9iLmpzCnZhciBJSm9iOwp2YXIgaW5pdF9qb2IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3Mvam9iLmpzIigpIHsKICAgIGluaXRfZmluYW5jZSgpOwogICAgaW5pdF9jb21wYW55KCk7CiAgICBpbml0X2NvbnRhY3QoKTsKICAgIElKb2IgPSBjbGFzcyB7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL21vbmdvZGVzY3JpcHRvci5qcwp2YXIgaW5pdF9tb25nb2Rlc2NyaXB0b3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2UvbW9uZ29kZXNjcmlwdG9yLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9vYmplY3RhY3Rpb24uanMKdmFyIGluaXRfb2JqZWN0YWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL29iamVjdGFjdGlvbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2Uvb2JqZWN0c3RhdHVzLmpzCnZhciBpbml0X29iamVjdHN0YXR1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9vYmplY3RzdGF0dXMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL3dyYXBwZWRkYXRhLmpzCnZhciBpbml0X3dyYXBwZWRkYXRhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL3dyYXBwZWRkYXRhLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9pbmRleC5qcwp2YXIgZGF0YWJhc2VfZXhwb3J0cyA9IHt9Owp2YXIgaW5pdF9kYXRhYmFzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X21vbmdvZGVzY3JpcHRvcigpOwogICAgaW5pdF9vYmplY3RhY3Rpb24oKTsKICAgIGluaXRfb2JqZWN0c3RhdHVzKCk7CiAgICBpbml0X3dyYXBwZWRkYXRhKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvbGV0dGVyLmpzCnZhciBpbml0X2xldHRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9sZXR0ZXIuanMiKCkgewogICAgaW5pdF9idXNpbmVzcygpOwogICAgaW5pdF9maW5hbmNlKCk7CiAgICBpbml0X2RhdGFiYXNlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvcGRmLmpzCnZhciBpbml0X3BkZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9wZGYuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL3BlcnNvbi5qcwp2YXIgaW5pdF9wZXJzb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvcGVyc29uLmpzIigpIHsKICAgIGluaXRfY29udGFjdCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL3Byb2plY3QuanMKdmFyIGluaXRfcHJvamVjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9wcm9qZWN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9pbmRleC5qcwp2YXIgYnVzaW5lc3NfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChidXNpbmVzc19leHBvcnRzLCB7CiAgSUpvYjogKCkgPT4gSUpvYgp9KTsKdmFyIGluaXRfYnVzaW5lc3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvaW5kZXguanMiKCkgewogICAgaW5pdF9hZGRyZXNzKCk7CiAgICBpbml0X2NvbXBhbnkoKTsKICAgIGluaXRfY29udGFjdCgpOwogICAgaW5pdF9qb2IoKTsKICAgIGluaXRfbGV0dGVyKCk7CiAgICBpbml0X3BkZigpOwogICAgaW5pdF9wZXJzb24oKTsKICAgIGluaXRfcHJvamVjdCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvZGUvY29tbWl0aW5mby5qcwp2YXIgaW5pdF9jb21taXRpbmZvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvZGUvY29tbWl0aW5mby5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29kZS9zdGF0dXNvYmplY3QuanMKdmFyIGluaXRfc3RhdHVzb2JqZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvZGUvc3RhdHVzb2JqZWN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb2RlL2luZGV4LmpzCnZhciBjb2RlX2V4cG9ydHMgPSB7fTsKdmFyIGluaXRfY29kZTMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29kZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NvbW1pdGluZm8oKTsKICAgIGluaXRfc3RhdHVzb2JqZWN0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGFpbmVyL2NvbnRhaW5lci5qcwp2YXIgaW5pdF9jb250YWluZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGFpbmVyL2NvbnRhaW5lci5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGFpbmVyL3ZvbHVtZW1vdW50LmpzCnZhciBpbml0X3ZvbHVtZW1vdW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRhaW5lci92b2x1bWVtb3VudC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGFpbmVyL2luZGV4LmpzCnZhciBjb250YWluZXJfZXhwb3J0cyA9IHt9Owp2YXIgaW5pdF9jb250YWluZXIyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRhaW5lci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NvbnRhaW5lcigpOwogICAgaW5pdF92b2x1bWVtb3VudCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvYXJ0aWNsZS5qcwp2YXIgaW5pdF9hcnRpY2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvYXJ0aWNsZS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvYXV0aG9yLmpzCnZhciBpbml0X2F1dGhvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250ZW50L2F1dGhvci5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvZG9jdW1lbnRhdGlvbnNldC5qcwp2YXIgaW5pdF9kb2N1bWVudGF0aW9uc2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvZG9jdW1lbnRhdGlvbnNldC5qcyIoKSB7CiAgICBpbml0X2FydGljbGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250ZW50L2luZGV4LmpzCnZhciBjb250ZW50X2V4cG9ydHMgPSB7fTsKdmFyIGluaXRfY29udGVudDMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGVudC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2FydGljbGUoKTsKICAgIGluaXRfYXV0aG9yKCk7CiAgICBpbml0X2RvY3VtZW50YXRpb25zZXQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9nZW5lcmFsL2RhdGUuanMKdmFyIGluaXRfZGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9nZW5lcmFsL2RhdGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2dlbmVyYWwvdGltZS5qcwp2YXIgaW5pdF90aW1lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2dlbmVyYWwvdGltZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZ2VuZXJhbC9pbmRleC5qcwp2YXIgZ2VuZXJhbF9leHBvcnRzID0ge307CnZhciBpbml0X2dlbmVyYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZ2VuZXJhbC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RhdGUoKTsKICAgIGluaXRfdGltZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvY2VydC5qcwp2YXIgaW5pdF9jZXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvY2VydC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9jbmFtZS5qcwp2YXIgSUNuYW1lRGVzY3JpcHRvcjsKdmFyIGluaXRfY25hbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9jbmFtZS5qcyIoKSB7CiAgICBpbml0X2NlcnQoKTsKICAgIElDbmFtZURlc2NyaXB0b3IgPSBjbGFzcyB7CiAgICB9OwogICAgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZGV2aWNlLmpzCnZhciBpbml0X2RldmljZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2RldmljZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9kbnMuanMKdmFyIGluaXRfZG5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZG5zLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2Ruc2NoYWxsZW5nZS5qcwp2YXIgaW5pdF9kbnNjaGFsbGVuZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9kbnNjaGFsbGVuZ2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZG9tYWluZGVsZWdhdGlvbi5qcwp2YXIgaW5pdF9kb21haW5kZWxlZ2F0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZG9tYWluZGVsZWdhdGlvbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9qd3QuanMKdmFyIGluaXRfand0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvand0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL25ldHdvcmtub2RlLmpzCnZhciBpbml0X25ldHdvcmtub2RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvbmV0d29ya25vZGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvcmVxdWVzdC5qcwp2YXIgaW5pdF9yZXF1ZXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvcmVxdWVzdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9yZXZlcnNlcHJveHkuanMKdmFyIGluaXRfcmV2ZXJzZXByb3h5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvcmV2ZXJzZXByb3h5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL3NzaC5qcwp2YXIgaW5pdF9zc2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9zc2guanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvaW5kZXguanMKdmFyIG5ldHdvcmtfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChuZXR3b3JrX2V4cG9ydHMsIHsKICBJQ25hbWVEZXNjcmlwdG9yOiAoKSA9PiBJQ25hbWVEZXNjcmlwdG9yCn0pOwp2YXIgaW5pdF9uZXR3b3JrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvaW5kZXguanMiKCkgewogICAgaW5pdF9jZXJ0KCk7CiAgICBpbml0X2NuYW1lKCk7CiAgICBpbml0X2RldmljZSgpOwogICAgaW5pdF9kbnMoKTsKICAgIGluaXRfZG5zY2hhbGxlbmdlKCk7CiAgICBpbml0X2RvbWFpbmRlbGVnYXRpb24oKTsKICAgIGluaXRfand0KCk7CiAgICBpbml0X25ldHdvcmtub2RlKCk7CiAgICBpbml0X3JlcXVlc3QoKTsKICAgIGluaXRfcmV2ZXJzZXByb3h5KCk7CiAgICBpbml0X3NzaCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3NhYXMvcHJvZHVjdC5qcwp2YXIgaW5pdF9wcm9kdWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3NhYXMvcHJvZHVjdC5qcyIoKSB7CiAgICBpbml0X2NvbXBhbnkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zYWFzL3N1YnNjcmlwdGlvbnBsYW4uanMKdmFyIGluaXRfc3Vic2NyaXB0aW9ucGxhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zYWFzL3N1YnNjcmlwdGlvbnBsYW4uanMiKCkgewogICAgaW5pdF9wcm9kdWN0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc2Fhcy9pbmRleC5qcwp2YXIgc2Fhc19leHBvcnRzID0ge307CnZhciBpbml0X3NhYXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc2Fhcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3N1YnNjcmlwdGlvbnBsYW4oKTsKICAgIGluaXRfcHJvZHVjdCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3N0b3JhZ2UvaW5kZXguanMKdmFyIHN0b3JhZ2VfZXhwb3J0cyA9IHt9Owp2YXIgaW5pdF9zdG9yYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3N0b3JhZ2UvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3dlYnNpdGUvbGluay5qcwp2YXIgaW5pdF9saW5rMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL2xpbmsuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3dlYnNpdGUvbWVudWl0ZW0uanMKdmFyIGluaXRfbWVudWl0ZW0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9tZW51aXRlbS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9saW5rYmxvY2suanMKdmFyIGluaXRfbGlua2Jsb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3dlYnNpdGUvbGlua2Jsb2NrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL2luZGV4LmpzCnZhciB3ZWJzaXRlX2V4cG9ydHMgPSB7fTsKdmFyIGluaXRfd2Vic2l0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGluazMoKTsKICAgIGluaXRfbWVudWl0ZW0oKTsKICAgIGluaXRfbGlua2Jsb2NrKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvdHlwZWZlc3Qub3duLmpzCnZhciBpbml0X3R5cGVmZXN0X293biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy90eXBlZmVzdC5vd24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMyMyA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMyMywgewogIGJ1c2luZXNzOiAoKSA9PiBidXNpbmVzc19leHBvcnRzLAogIGNvZGU6ICgpID0+IGNvZGVfZXhwb3J0cywKICBjb250YWluZXI6ICgpID0+IGNvbnRhaW5lcl9leHBvcnRzLAogIGNvbnRlbnQ6ICgpID0+IGNvbnRlbnRfZXhwb3J0cywKICBkYXRhYmFzZTogKCkgPT4gZGF0YWJhc2VfZXhwb3J0cywKICBmaW5hbmNlOiAoKSA9PiBmaW5hbmNlX2V4cG9ydHMsCiAgZ2VuZXJhbDogKCkgPT4gZ2VuZXJhbF9leHBvcnRzLAogIG5ldHdvcms6ICgpID0+IG5ldHdvcmtfZXhwb3J0cywKICBzYWFzOiAoKSA9PiBzYWFzX2V4cG9ydHMsCiAgc3RvcmFnZTogKCkgPT4gc3RvcmFnZV9leHBvcnRzLAogIHdlYnNpdGU6ICgpID0+IHdlYnNpdGVfZXhwb3J0cwp9KTsKdmFyIGluaXRfZGlzdF90czIzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfYnVzaW5lc3MoKTsKICAgIGluaXRfY29kZTMoKTsKICAgIGluaXRfY29udGFpbmVyMigpOwogICAgaW5pdF9kYXRhYmFzZSgpOwogICAgaW5pdF9maW5hbmNlKCk7CiAgICBpbml0X2NvbnRlbnQzKCk7CiAgICBpbml0X2dlbmVyYWwoKTsKICAgIGluaXRfbmV0d29yaygpOwogICAgaW5pdF9zYWFzKCk7CiAgICBpbml0X3N0b3JhZ2UoKTsKICAgIGluaXRfd2Vic2l0ZSgpOwogICAgaW5pdF90eXBlZmVzdF9vd24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5wbHVnaW5zLmpzCnZhciBpbml0X3dlYnNldHVwX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyMigpOwogICAgaW5pdF9kaXN0X3RzMjEoKTsKICAgIGluaXRfZGlzdF90czIzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvaW50ZXJmYWNlcy9pbmRleC5qcwp2YXIgaW5pdF9pbnRlcmZhY2VzMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy9pbnRlcmZhY2VzL2luZGV4LmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfcGx1Z2lucygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnLmpzCnZhciBUYWc7CnZhciBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnLmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfcGx1Z2lucygpOwogICAgVGFnID0gY2xhc3MgewogICAgICBhcHBlbmRUb0RvbSgpIHsKICAgICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5wYXJlbnRFbGVtZW50ICYmICF0aGlzLmVsZW1lbnRSZWYucGFyZW50Tm9kZSkgewogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnRSZWYpOwogICAgICAgIH0KICAgICAgfQogICAgICByZW1vdmVGcm9tRG9tKCkgewogICAgICAgIGlmICh0aGlzLmVsZW1lbnRSZWYucGFyZW50RWxlbWVudCkgewogICAgICAgICAgdGhpcy5lbGVtZW50UmVmLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50UmVmKTsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudFJlZi5wYXJlbnROb2RlKSB7CiAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnRSZWYpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZy5qc29ubGR0YWcuanMKdmFyIEpzb25MZFRhZzsKdmFyIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfanNvbmxkdGFnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnLmpzb25sZHRhZy5qcyIoKSB7CiAgICBpbml0X3dlYnNldHVwX3BsdWdpbnMoKTsKICAgIGluaXRfaW50ZXJmYWNlczIoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWcoKTsKICAgIEpzb25MZFRhZyA9IGNsYXNzIF9Kc29uTGRUYWcgZXh0ZW5kcyBUYWcgewogICAgICBzdGF0aWMgY3JlYXRlQ29tcGFueUpzb25MZChjb21wYW55RGF0YUFyZykgewogICAgICAgIGNvbnN0IGNvbXBhbnlMZCA9IHsKICAgICAgICAgICJAY29udGV4dCI6ICJodHRwczovL3NjaGVtYS5vcmciLAogICAgICAgICAgIkB0eXBlIjogIkNvcnBvcmF0aW9uIiwKICAgICAgICAgIG5hbWU6IGNvbXBhbnlEYXRhQXJnLm5hbWUsCiAgICAgICAgICBhbHRlcm5hdGVOYW1lOiBjb21wYW55RGF0YUFyZy5uYW1lLnJlcGxhY2UoIiBHbWJIIiwgIiIpLAogICAgICAgICAgdXJsOiBjb21wYW55RGF0YUFyZy5jb250YWN0LndlYnNpdGUsCiAgICAgICAgICBsb2dvOiBjb21wYW55RGF0YUFyZy5jb250YWN0LmxvZ29VcmwsCiAgICAgICAgICBjb250YWN0UG9pbnQ6IHsKICAgICAgICAgICAgIkB0eXBlIjogIkNvbnRhY3RQb2ludCIsCiAgICAgICAgICAgIHRlbGVwaG9uZTogY29tcGFueURhdGFBcmcuY29udGFjdC5waG9uZSwKICAgICAgICAgICAgY29udGFjdFR5cGU6ICJjdXN0b21lciBzZXJ2aWNlIiwKICAgICAgICAgICAgYXJlYVNlcnZlZDogIkRFIiwKICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2U6IFsiZW4iLCAiR2VybWFuIl0KICAgICAgICAgIH0sCiAgICAgICAgICBzYW1lQXM6IFtdCiAgICAgICAgfTsKICAgICAgICBpZiAoY29tcGFueURhdGFBcmcuY29udGFjdC5mYWNlYm9va1VybCkgewogICAgICAgICAgY29tcGFueUxkLnNhbWVBcy5wdXNoKGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QuZmFjZWJvb2tVcmwpOwogICAgICAgIH0KICAgICAgICBpZiAoY29tcGFueURhdGFBcmcuY29udGFjdC50d2l0dGVyVXJsKSB7CiAgICAgICAgICBjb21wYW55TGQuc2FtZUFzLnB1c2goY29tcGFueURhdGFBcmcuY29udGFjdC50d2l0dGVyVXJsKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgbGRUYWcgPSBuZXcgX0pzb25MZFRhZyhjb21wYW55TGQpOwogICAgICAgIHJldHVybiBsZFRhZzsKICAgICAgfQogICAgICBzdGF0aWMgY3JlYXRlTmV3c0FydGljbGVKc29uTGQobmV3c0FydGljbGVBcmcpIHsKICAgICAgICBjb25zdCBuZXdzQXJ0aWNsZUxkID0gewogICAgICAgICAgIkBjb250ZXh0IjogImh0dHBzOi8vc2NoZW1hLm9yZyIsCiAgICAgICAgICAiQHR5cGUiOiAiTmV3c0FydGljbGUiLAogICAgICAgICAgbWFpbkVudGl0eU9mUGFnZTogewogICAgICAgICAgICAiQHR5cGUiOiAiV2ViUGFnZSIsCiAgICAgICAgICAgICJAaWQiOiB3aW5kb3cubG9jYXRpb24uaHJlZgogICAgICAgICAgfSwKICAgICAgICAgIGhlYWRsaW5lOiAiQXJ0aWNsZSBoZWFkbGluZSIsCiAgICAgICAgICBpbWFnZTogW25ld3NBcnRpY2xlQXJnLmZlYXR1cmVkSW1hZ2VVcmxdLAogICAgICAgICAgZGF0ZVB1Ymxpc2hlZDogbmV3IERhdGUobmV3c0FydGljbGVBcmcudGltZXN0YW1wKS50b0lTT1N0cmluZygpLAogICAgICAgICAgZGF0ZU1vZGlmaWVkOiBuZXcgRGF0ZShuZXdzQXJ0aWNsZUFyZy50aW1lc3RhbXApLnRvSVNPU3RyaW5nKCksCiAgICAgICAgICBhdXRob3I6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlBlcnNvbiIsCiAgICAgICAgICAgIG5hbWU6IGAke25ld3NBcnRpY2xlQXJnLmF1dGhvci5maXJzdE5hbWV9ICR7bmV3c0FydGljbGVBcmcuYXV0aG9yLnN1ck5hbWV9YAogICAgICAgICAgfSwKICAgICAgICAgIHB1Ymxpc2hlcjogewogICAgICAgICAgICAiQHR5cGUiOiAiT3JnYW5pemF0aW9uIiwKICAgICAgICAgICAgbmFtZTogbmV3c0FydGljbGVBcmcuYXV0aG9yLnN1ck5hbWUsCiAgICAgICAgICAgIGxvZ286IHsKICAgICAgICAgICAgICAiQHR5cGUiOiAiSW1hZ2VPYmplY3QiLAogICAgICAgICAgICAgIHVybDogbmV3c0FydGljbGVBcmcuYXV0aG9yLnN1ck5hbWUKICAgICAgICAgICAgICAvLyBUT0RPCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBkZXNjcmlwdGlvbjogbmV3c0FydGljbGVBcmcuYXV0aG9yLmZpcnN0TmFtZQogICAgICAgIH07CiAgICAgICAgY29uc3QgbGRUYWcgPSBuZXcgX0pzb25MZFRhZyhuZXdzQXJ0aWNsZUxkKTsKICAgICAgICByZXR1cm4gbGRUYWc7CiAgICAgIH0KICAgICAgc3RhdGljIGNyZWF0ZVByb2R1Y3RKc29uTGQocHJvZHVjdEFyZywgcHVibGlzaGVyQXJnKSB7CiAgICAgICAgY29uc3QgcHJvZHVjdExkID0gewogICAgICAgICAgIkBjb250ZXh0IjogImh0dHBzOi8vc2NoZW1hLm9yZyIsCiAgICAgICAgICAiQHR5cGUiOiAiU29mdHdhcmVBcHBsaWNhdGlvbiIsCiAgICAgICAgICBuYW1lOiBwcm9kdWN0QXJnLm5hbWUsCiAgICAgICAgICBkZXNjcmlwdGlvbjogcHJvZHVjdEFyZy5kZXNjcmlwdGlvbiwKICAgICAgICAgIG9wZXJhdGluZ1N5c3RlbTogcHJvZHVjdEFyZy5vcywKICAgICAgICAgIGFwcGxpY2F0aW9uQ2F0ZWdvcnk6IHByb2R1Y3RBcmcuY2F0ZWdvcnksCiAgICAgICAgICBvZmZlcnM6IHsKICAgICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICAgbmFtZTogIlVzZXItYmFzZWQgUGxhbiIsCiAgICAgICAgICAgIHByaWNlU3BlY2lmaWNhdGlvbjogewogICAgICAgICAgICAgICJAdHlwZSI6ICJQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvbiIsCiAgICAgICAgICAgICAgdmFsdWVOYW1lOiAiTnVtYmVyIG9mIFVzZXJzIiwKICAgICAgICAgICAgICB2YWx1ZVJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgICAgIHByaWNlOiAiNC45OSIsCiAgICAgICAgICAgICAgcHJpY2VDdXJyZW5jeTogIkVVUiIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHB1Ymxpc2hlcjogdGhpcy5jcmVhdGVDb21wYW55SnNvbkxkKHB1Ymxpc2hlckFyZykuZWxlbWVudFJlZi50ZXh0Q29udGVudCwKICAgICAgICAgIHNjcmVlbnNob3Q6ICJodHRwczovL3d3dy5zb2NpYWwuaW8vc2NyZWVuc2hvdC5wbmciLAogICAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cuc29jaWFsLmlvLyIKICAgICAgICB9OwogICAgICAgIGNvbnN0IGxkVGFnID0gbmV3IF9Kc29uTGRUYWcocHJvZHVjdExkKTsKICAgICAgICByZXR1cm4gbGRUYWc7CiAgICAgIH0KICAgICAgLy8gSU5TVEFOQ0UKICAgICAgY29uc3RydWN0b3IobGRPYmplY3RBcmcpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIGNvbnN0IGpzb25MZEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKICAgICAgICBqc29uTGRFbGVtZW50LnR5cGUgPSAiYXBwbGljYXRpb24vbGQranNvbiI7CiAgICAgICAganNvbkxkRWxlbWVudC50ZXh0ID0gSlNPTi5zdHJpbmdpZnkobGRPYmplY3RBcmcpOwogICAgICAgIHRoaXMuZWxlbWVudFJlZiA9IGpzb25MZEVsZW1lbnQ7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWcub3BlbmdyYXBodGFnLmpzCnZhciBPcGVuZ3JhcGhUYWc7CnZhciBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnX29wZW5ncmFwaHRhZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZy5vcGVuZ3JhcGh0YWcuanMiKCkgewogICAgaW5pdF93ZWJzZXR1cF9wbHVnaW5zKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnKCk7CiAgICBPcGVuZ3JhcGhUYWcgPSBjbGFzcyBfT3BlbmdyYXBoVGFnIGV4dGVuZHMgVGFnIHsKICAgICAgc3RhdGljIGNyZWF0ZU5ld3NBcnRpY2xlT2dUYWdzKG5ld3NBcnRpY2xlQXJnKSB7CiAgICAgICAgY29uc3QgdGFnQXJyYXkgPSBbXTsKICAgICAgICB0YWdBcnJheS5wdXNoKG5ldyBfT3BlbmdyYXBoVGFnKCJvZzp1cmwiLCBuZXdzQXJ0aWNsZUFyZy51cmwpKTsKICAgICAgICB0YWdBcnJheS5wdXNoKG5ldyBfT3BlbmdyYXBoVGFnKCJvZzp0aXRsZSIsIG5ld3NBcnRpY2xlQXJnLnRpdGxlKSk7CiAgICAgICAgdGFnQXJyYXkucHVzaChuZXcgX09wZW5ncmFwaFRhZygib2c6ZGVzY3JpcHRpb24iLCBuZXdzQXJ0aWNsZUFyZy5jb250ZW50KSk7CiAgICAgICAgdGFnQXJyYXkucHVzaChuZXcgX09wZW5ncmFwaFRhZygib2c6aW1hZ2UiLCBuZXdzQXJ0aWNsZUFyZy5mZWF0dXJlZEltYWdlVXJsKSk7CiAgICAgICAgcmV0dXJuIHRhZ0FycmF5OwogICAgICB9CiAgICAgIHN0YXRpYyBjcmVhdGVQcm9kdWN0T2dUYWdzKHByb2R1Y3RBcmcpIHsKICAgICAgICBjb25zdCB0YWdBcnJheSA9IFtdOwogICAgICAgIHRhZ0FycmF5LnB1c2gobmV3IF9PcGVuZ3JhcGhUYWcoIm9nOnVybCIsIGdsb2JhbFRoaXMubG9jYXRpb24uaHJlZikpOwogICAgICAgIHRhZ0FycmF5LnB1c2gobmV3IF9PcGVuZ3JhcGhUYWcoIm9nOnRpdGxlIiwgYCR7cHJvZHVjdEFyZy5uYW1lfSAtICR7cHJvZHVjdEFyZy5zbG9nYW59YCkpOwogICAgICAgIHRhZ0FycmF5LnB1c2gobmV3IF9PcGVuZ3JhcGhUYWcoIm9nOnNpdGVfbmFtZSIsIHByb2R1Y3RBcmcubmFtZSkpOwogICAgICAgIHRhZ0FycmF5LnB1c2gobmV3IF9PcGVuZ3JhcGhUYWcoIm9nOmRlc2NyaXB0aW9uIiwgcHJvZHVjdEFyZy5kZXNjcmlwdGlvbikpOwogICAgICAgIHRhZ0FycmF5LnB1c2gobmV3IF9PcGVuZ3JhcGhUYWcoIm9nOmltYWdlIiwgcHJvZHVjdEFyZy5sb2dvTGluaykpOwogICAgICAgIHJldHVybiB0YWdBcnJheTsKICAgICAgfQogICAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eU5hbWVBcmcsIGNvbnRlbnRBcmcpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIGNvbnN0IG9wZW5HcmFwaEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJtZXRhIik7CiAgICAgICAgb3BlbkdyYXBoRWxlbWVudC5zZXRBdHRyaWJ1dGUoInByb3BlcnR5IiwgcHJvcGVydHlOYW1lQXJnKTsKICAgICAgICBvcGVuR3JhcGhFbGVtZW50LmNvbnRlbnQgPSBjb250ZW50QXJnOwogICAgICAgIHRoaXMuZWxlbWVudFJlZiA9IG9wZW5HcmFwaEVsZW1lbnQ7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWdsZXZlbC5qcwp2YXIgVGFnTGV2ZWw7CnZhciBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnbGV2ZWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWdsZXZlbC5qcyIoKSB7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnX2pzb25sZHRhZygpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19vcGVuZ3JhcGh0YWcoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdtYW5hZ2VyKCk7CiAgICBpbml0X3dlYnNldHVwX3BsdWdpbnMoKTsKICAgIFRhZ0xldmVsID0gY2xhc3MgewogICAgICBzZXQgdGl0bGUodGl0bGVBcmcpIHsKICAgICAgICB0aGlzLnRpdGxlU3RvcmUgPSB0aXRsZUFyZzsKICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gImVuYWJsZWQiKSB7CiAgICAgICAgICBkb2N1bWVudC50aXRsZSA9IHRoaXMudGl0bGVTdG9yZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZ2V0IHRpdGxlKCkgewogICAgICAgIHJldHVybiB0aGlzLnRpdGxlU3RvcmU7CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IodGFnTWFuYWdlclJlZkFyZywgbGV2ZWxUeXBlKSB7CiAgICAgICAgdGhpcy50YWdzID0gW107CiAgICAgICAgdGhpcy5zdGF0ZSA9ICJkaXNhYmxlZCI7CiAgICAgICAgdGhpcy50YWdNYW5hZ2VyUmVmID0gdGFnTWFuYWdlclJlZkFyZzsKICAgICAgfQogICAgICBhZGRUYWcodGFnQXJnKSB7CiAgICAgICAgaWYgKHRhZ0FyZyBpbnN0YW5jZW9mIEFycmF5KSB7CiAgICAgICAgICBmb3IgKGNvbnN0IHRhZ0FyZzIgb2YgdGFnQXJnKSB7CiAgICAgICAgICAgIHRoaXMuYWRkVGFnKHRhZ0FyZzIpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnRhZ3MucHVzaCh0YWdBcmcpOwogICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09ICJlbmFibGVkIikgewogICAgICAgICAgICB0YWdBcmcuYXBwZW5kVG9Eb20oKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgYWRkQ29tcGFueUluZm8oY29tcGFueURhdGFBcmcpIHsKICAgICAgICB0aGlzLmFkZFRhZyhKc29uTGRUYWcuY3JlYXRlQ29tcGFueUpzb25MZChjb21wYW55RGF0YUFyZykpOwogICAgICAgIHRoaXMuYWRkVGFnKG5ldyBPcGVuZ3JhcGhUYWcoIm9nOnR5cGUiLCAiYnVzaW5lc3MuYnVzaW5lc3MiKSk7CiAgICAgICAgdGhpcy5hZGRUYWcobmV3IE9wZW5ncmFwaFRhZygib2c6dGl0bGUiLCBjb21wYW55RGF0YUFyZy5uYW1lKSk7CiAgICAgICAgdGhpcy5hZGRUYWcobmV3IE9wZW5ncmFwaFRhZygib2c6dXJsIiwgY29tcGFueURhdGFBcmcuY29udGFjdC53ZWJzaXRlKSk7CiAgICAgICAgdGhpcy5hZGRUYWcobmV3IE9wZW5ncmFwaFRhZygib2c6aW1hZ2UiLCBjb21wYW55RGF0YUFyZy5jb250YWN0LmxvZ29VcmwpKTsKICAgICAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCJidXNpbmVzczpjb250YWN0X2RhdGE6c3RyZWV0X2FkZHJlc3MiLCBgJHtjb21wYW55RGF0YUFyZy5jb250YWN0LmFkZHJlc3Muc3RyZWV0TmFtZX0gJHtjb21wYW55RGF0YUFyZy5jb250YWN0LmFkZHJlc3MuaG91c2VOdW1iZXJ9YCkpOwogICAgICAgIHRoaXMuYWRkVGFnKG5ldyBPcGVuZ3JhcGhUYWcoImJ1c2luZXNzOmNvbnRhY3RfZGF0YTpsb2NhbGl0eSIsIGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QuYWRkcmVzcy5wb3N0YWxDb2RlKSk7CiAgICAgICAgdGhpcy5hZGRUYWcobmV3IE9wZW5ncmFwaFRhZygiYnVzaW5lc3M6Y29udGFjdF9kYXRhOnJlZ2lvbiIsIGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QuYWRkcmVzcy5jaXR5KSk7CiAgICAgICAgdGhpcy5hZGRUYWcobmV3IE9wZW5ncmFwaFRhZygiYnVzaW5lc3M6Y29udGFjdF9kYXRhOnBvc3RhbF9jb2RlIiwgY29tcGFueURhdGFBcmcuY29udGFjdC5hZGRyZXNzLnBvc3RhbENvZGUpKTsKICAgICAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCJidXNpbmVzczpjb250YWN0X2RhdGE6Y291bnRyeV9uYW1lIiwgY29tcGFueURhdGFBcmcuY29udGFjdC5hZGRyZXNzLmNvdW50cnkpKTsKICAgICAgfQogICAgICBhZGROZXdzQXJ0aWNsZUluZm8oYXJ0aWNsZUFyZykgewogICAgICAgIHRoaXMuYWRkVGFnKEpzb25MZFRhZy5jcmVhdGVOZXdzQXJ0aWNsZUpzb25MZChhcnRpY2xlQXJnKSk7CiAgICAgICAgdGhpcy5hZGRUYWcoT3BlbmdyYXBoVGFnLmNyZWF0ZU5ld3NBcnRpY2xlT2dUYWdzKGFydGljbGVBcmcpKTsKICAgICAgfQogICAgICBhZGRQcm9kdWN0SW5mbyhwcm9kdWN0QXJnLCBjb21wYW55QXJnKSB7CiAgICAgICAgdGhpcy5hZGRUYWcoSnNvbkxkVGFnLmNyZWF0ZVByb2R1Y3RKc29uTGQocHJvZHVjdEFyZywgY29tcGFueUFyZykpOwogICAgICAgIHRoaXMuYWRkVGFnKE9wZW5ncmFwaFRhZy5jcmVhdGVQcm9kdWN0T2dUYWdzKHByb2R1Y3RBcmcpKTsKICAgICAgfQogICAgICBhc3luYyBlbmFibGUoKSB7CiAgICAgICAgaWYgKHRoaXMudGl0bGUpIHsKICAgICAgICAgIGRvY3VtZW50LnRpdGxlID0gdGhpcy50aXRsZTsKICAgICAgICB9CiAgICAgICAgZm9yIChjb25zdCB0YWdBcmcgb2YgdGhpcy50YWdzKSB7CiAgICAgICAgICB0YWdBcmcuYXBwZW5kVG9Eb20oKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zdGF0ZSA9ICJlbmFibGVkIjsKICAgICAgfQogICAgICBhc3luYyBkaXNhYmxlKCkgewogICAgICAgIGZvciAoY29uc3QgdGFnQXJnIG9mIHRoaXMudGFncykgewogICAgICAgICAgdGFnQXJnLnJlbW92ZUZyb21Eb20oKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zdGF0ZSA9ICJkaXNhYmxlZCI7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWcubWV0YXRhZy5qcwp2YXIgTWV0YVRhZzsKdmFyIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfbWV0YXRhZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZy5tZXRhdGFnLmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWcoKTsKICAgIE1ldGFUYWcgPSBjbGFzcyBleHRlbmRzIFRhZyB7CiAgICAgIGNvbnN0cnVjdG9yKG1ldGFOYW1lQXJnLCBjb250ZW50QXJnKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICBjb25zdCBtZXRhRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKTsKICAgICAgICBtZXRhRWxlbWVudC5uYW1lID0gbWV0YU5hbWVBcmc7CiAgICAgICAgbWV0YUVsZW1lbnQuY29udGVudCA9IGNvbnRlbnRBcmc7CiAgICAgICAgdGhpcy5lbGVtZW50UmVmID0gbWV0YUVsZW1lbnQ7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWdtYW5hZ2VyLmpzCnZhciBUYWdNYW5hZ2VyOwp2YXIgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ21hbmFnZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWdtYW5hZ2VyLmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdsZXZlbCgpOwogICAgaW5pdF93ZWJzZXR1cF9wbHVnaW5zKCk7CiAgICBpbml0X2ludGVyZmFjZXMyKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnX21ldGF0YWcoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfanNvbmxkdGFnKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnX29wZW5ncmFwaHRhZygpOwogICAgVGFnTWFuYWdlciA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5nbG9iYWxMZXZlbCA9IG5ldyBUYWdMZXZlbCh0aGlzLCAiZ2xvYmFsIik7CiAgICAgICAgdGhpcy5iYXNlTGV2ZWwgPSBuZXcgVGFnTGV2ZWwodGhpcywgImJhc2UiKTsKICAgICAgfQogICAgICBhc3luYyBzZXR1cChtZXRhT2JqZWN0QXJnKSB7CiAgICAgICAgdGhpcy5nbG9iYWxMZXZlbC5hZGRUYWcobmV3IE1ldGFUYWcoImdvb2dsZSIsICJub3RyYW5zbGF0ZSIpKTsKICAgICAgICB0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygicmV2aXNpdC1hZnRlciIsICIxIGRheXMiKSk7CiAgICAgICAgaWYgKG1ldGFPYmplY3RBcmcudHdpdHRlckhhbmRsZSkgewogICAgICAgICAgdGhpcy5nbG9iYWxMZXZlbC5hZGRUYWcobmV3IE1ldGFUYWcoInR3aXR0ZXI6Y2FyZCIsICJzdW1tYXJ5X2xhcmdlX2ltYWdlIikpOwogICAgICAgICAgdGhpcy5nbG9iYWxMZXZlbC5hZGRUYWcobmV3IE1ldGFUYWcoInR3aXR0ZXI6c2l0ZSIsIG1ldGFPYmplY3RBcmcudHdpdHRlckhhbmRsZSkpOwogICAgICAgICAgdGhpcy5nbG9iYWxMZXZlbC5hZGRUYWcobmV3IE1ldGFUYWcoInR3aXR0ZXI6Y3JlYXRvciIsIG1ldGFPYmplY3RBcmcudHdpdHRlckhhbmRsZSkpOwogICAgICAgIH0KICAgICAgICB0aGlzLmJhc2VMZXZlbC50aXRsZSA9IG1ldGFPYmplY3RBcmcudGl0bGU7CiAgICAgICAgaWYgKG1ldGFPYmplY3RBcmcuZGVzY3JpcHRpb24pIHsKICAgICAgICAgIHRoaXMuYmFzZUxldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygiZGVzY3JpcHRpb24iLCBtZXRhT2JqZWN0QXJnLmRlc2NyaXB0aW9uKSk7CiAgICAgICAgfQogICAgICAgIGlmIChtZXRhT2JqZWN0QXJnLmNhbm9uaWNhbERvbWFpbikgewogICAgICAgICAgdGhpcy5iYXNlTGV2ZWwuYWRkVGFnKG5ldyBNZXRhVGFnKCJjYW5vbmljYWwiLCBtZXRhT2JqZWN0QXJnLmNhbm9uaWNhbERvbWFpbikpOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgIGNhc2UgKG1ldGFPYmplY3RBcmcubGRDb21wYW55ICYmICFtZXRhT2JqZWN0QXJnLmxkUHJvZHVjdCk6CiAgICAgICAgICAgIHRoaXMuYmFzZUxldmVsLmFkZENvbXBhbnlJbmZvKG1ldGFPYmplY3RBcmcubGRDb21wYW55KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICEhbWV0YU9iamVjdEFyZy5sZFByb2R1Y3Q6CiAgICAgICAgICAgIHRoaXMuYmFzZUxldmVsLmFkZFByb2R1Y3RJbmZvKG1ldGFPYmplY3RBcmcubGRQcm9kdWN0LCBtZXRhT2JqZWN0QXJnLmxkQ29tcGFueSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBhd2FpdCB0aGlzLmdsb2JhbExldmVsLmVuYWJsZSgpOwogICAgICAgIHRoaXMuYWN0aXZlTGV2ZWwgPSB0aGlzLmJhc2VMZXZlbDsKICAgICAgICBhd2FpdCB0aGlzLmFjdGl2ZUxldmVsLmVuYWJsZSgpOwogICAgICB9CiAgICAgIGFzeW5jIHNldFN1YlBhZ2VMZXZlbChtZXRhT2JqZWN0QXJnKSB7CiAgICAgICAgY29uc3Qgc3ViUGFnZUxldmVsID0gbmV3IFRhZ0xldmVsKHRoaXMsICJzdWJwYWdlIik7CiAgICAgICAgc3ViUGFnZUxldmVsLnRpdGxlID0gbWV0YU9iamVjdEFyZy50aXRsZTsKICAgICAgICBpZiAobWV0YU9iamVjdEFyZy5kZXNjcmlwdGlvbikgewogICAgICAgICAgc3ViUGFnZUxldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygiZGVzY3JpcHRpb24iLCBtZXRhT2JqZWN0QXJnLmRlc2NyaXB0aW9uKSk7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMuYWN0aXZlTGV2ZWwuZGlzYWJsZSgpOwogICAgICAgIHRoaXMuYWN0aXZlTGV2ZWwgPSBzdWJQYWdlTGV2ZWw7CiAgICAgICAgYXdhaXQgdGhpcy5hY3RpdmVMZXZlbC5lbmFibGUoKTsKICAgICAgICByZXR1cm4gc3ViUGFnZUxldmVsOwogICAgICB9CiAgICAgIGFzeW5jIHJldmVydFRvQmFzZUxldmVsKCkgewogICAgICAgIGlmICh0aGlzLmFjdGl2ZUxldmVsICE9PSB0aGlzLmJhc2VMZXZlbCkgewogICAgICAgICAgYXdhaXQgdGhpcy5hY3RpdmVMZXZlbC5kaXNhYmxlKCk7CiAgICAgICAgICB0aGlzLmFjdGl2ZUxldmVsID0gdGhpcy5iYXNlTGV2ZWw7CiAgICAgICAgICBhd2FpdCB0aGlzLmFjdGl2ZUxldmVsLmVuYWJsZSgpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLndlYnNldHVwLmpzCnZhciBXZWJTZXR1cDsKdmFyIGluaXRfd2Vic2V0dXBfY2xhc3Nlc193ZWJzZXR1cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLndlYnNldHVwLmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfcGx1Z2lucygpOwogICAgaW5pdF9pbnRlcmZhY2VzMigpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ21hbmFnZXIoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdsZXZlbCgpOwogICAgV2ViU2V0dXAgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmcpIHsKICAgICAgICB0aGlzLnRhZ01hbmFnZXIgPSBuZXcgVGFnTWFuYWdlcigpOwogICAgICAgIHRoaXMucmVhZHlEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0czIxLmRlZmVyKCk7CiAgICAgICAgdGhpcy5yZWFkeUZvclNtYXJ0c3NyRGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMyMS5kZWZlcigpOwogICAgICAgIHRoaXMucmVhZHlQcm9taXNlID0gdGhpcy5yZWFkeURlZmVycmVkLnByb21pc2U7CiAgICAgICAgdGhpcy5yZWFkeUZvclNtYXJ0c3NyUHJvbWlzZSA9IHRoaXMucmVhZHlGb3JTbWFydHNzckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZzsKICAgICAgICB0aGlzLnNldHVwKCkudGhlbigoKSA9PiB7CiAgICAgICAgICB0aGlzLnJlYWR5RGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc21hcnRzc3JXYWl0Rm9yUmVhZHlTaWduYWwpIHsKICAgICAgICAgICAgdGhpcy5yZWFkeUZvclNtYXJ0c3NyRGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhbiBhc3luYyBzZXR1cCBjYWxsZWQgYnkgdGhlIGNvbnN0cnVjdG9yCiAgICAgICAqLwogICAgICBhc3luYyBzZXR1cChvcHRpb25zQXJnKSB7CiAgICAgICAgaWYgKG9wdGlvbnNBcmcpIHsKICAgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNBcmc7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMudGFnTWFuYWdlci5zZXR1cCh0aGlzLm9wdGlvbnMubWV0YU9iamVjdCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldmVydHMgdGhlIGFjdGl2ZSBsZXZlbCBhbmQgcmV0dXJucyB0byB0aGUgYmFzZSBsZXZlbAogICAgICAgKi8KICAgICAgcmV2ZXJ0VG9CYXNlTGV2ZWwoKSB7CiAgICAgICAgdGhpcy50YWdNYW5hZ2VyLnJldmVydFRvQmFzZUxldmVsKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHNldHMgYSBzdWJwYWdlCiAgICAgICAqIEBwYXJhbSBtZXRhT2JqZWN0QXJnCiAgICAgICAqLwogICAgICBhc3luYyBzZXRTdWJMZXZlbChtZXRhT2JqZWN0QXJnKSB7CiAgICAgICAgY29uc3Qgc3ViTGV2ZWwgPSBhd2FpdCB0aGlzLnRhZ01hbmFnZXIuc2V0U3ViUGFnZUxldmVsKG1ldGFPYmplY3RBcmcpOwogICAgICAgIHJldHVybiBzdWJMZXZlbDsKICAgICAgfQogICAgICAvKioKICAgICAgICogZmxhc2hlcyB0aGUgdGl0bGUgd2l0aCB0aGUgZ2l2ZW4gdGV4dAogICAgICAgKiBAcGFyYW0gZmxhc2hUZXh0QXJnCiAgICAgICAqLwogICAgICBmbGFzaFRpdGxlKGZsYXNoVGV4dEFyZykgewogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBpbmZvcm1zIHNtYXJ0c3NyIHRoYXQgdGhlIHBhZ2UgaXMgcmVhZHkgdG8gYmUgcmVuZGVyZWQKICAgICAgICovCiAgICAgIGluZm9ybVJlYWR5Rm9yU21hcnRzc3IoKSB7CiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc21hcnRzc3JXYWl0Rm9yUmVhZHlTaWduYWwpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFlvdSBoYXZlIG5vdCBpbmRpY2F0ZWQgdGhhdCB5b3UgaW5mb3JtIHNtYXJ0c3NyIGJ5IGEgZGVkaWNhdGVkIHNpZ25hbCEgUGxlYXNlIGNvbnNpZGVyIGRvaW5nIHNvIWApOwogICAgICAgIH0KICAgICAgICB0aGlzLnJlYWR5Rm9yU21hcnRzc3JEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50aXRsZS5qcwp2YXIgVGl0bGU7CnZhciBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGl0bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50aXRsZS5qcyIoKSB7CiAgICBpbml0X3dlYnNldHVwX3BsdWdpbnMoKTsKICAgIFRpdGxlID0gY2xhc3MgewogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjQgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjQsIHsKICBKc29uTGRUYWc6ICgpID0+IEpzb25MZFRhZywKICBNZXRhVGFnOiAoKSA9PiBNZXRhVGFnLAogIE9wZW5ncmFwaFRhZzogKCkgPT4gT3BlbmdyYXBoVGFnLAogIFRpdGxlOiAoKSA9PiBUaXRsZSwKICBXZWJTZXR1cDogKCkgPT4gV2ViU2V0dXAKfSk7CnZhciBpbml0X2Rpc3RfdHMyNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfd2Vic2V0dXAoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfbWV0YXRhZygpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19vcGVuZ3JhcGh0YWcoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfanNvbmxkdGFnKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGl0bGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvbGlrLnBsdWdpbnMuanMKdmFyIGltcG9ydF9zeW1ib2xfdHJlZTI7CnZhciBpbml0X2xpa19wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9saWsucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMzKCk7CiAgICBpbml0X2Rpc3RfdHM1KCk7CiAgICBpbml0X2Rpc3RfdHMoKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIGluaXRfZGlzdF90czYoKTsKICAgIGltcG9ydF9zeW1ib2xfdHJlZTIgPSBfX3RvRVNNKHJlcXVpcmVfU3ltYm9sVHJlZSgpLCAxKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvbGlrLmZhc3RtYXAuanMKdmFyIEZhc3RNYXAyOwp2YXIgaW5pdF9saWtfZmFzdG1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvbGlrLmZhc3RtYXAuanMiKCkgewogICAgaW5pdF9saWtfcGx1Z2lucygpOwogICAgRmFzdE1hcDIgPSBjbGFzcyBfRmFzdE1hcCB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMubWFwT2JqZWN0ID0ge307CiAgICAgIH0KICAgICAgaXNVbmlxdWVLZXkoa2V5QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubWFwT2JqZWN0W2tleUFyZ10gPyBmYWxzZSA6IHRydWU7CiAgICAgIH0KICAgICAgYWRkVG9NYXAoa2V5QXJnLCBvYmplY3RBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICBpZiAodGhpcy5pc1VuaXF1ZUtleShrZXlBcmcpIHx8IG9wdGlvbnNBcmcgJiYgb3B0aW9uc0FyZy5mb3JjZSkgewogICAgICAgICAgdGhpcy5tYXBPYmplY3Rba2V5QXJnXSA9IG9iamVjdEFyZzsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldEJ5S2V5KGtleUFyZykgewogICAgICAgIHJldHVybiB0aGlzLm1hcE9iamVjdFtrZXlBcmddOwogICAgICB9CiAgICAgIHJlbW92ZUZyb21NYXAoa2V5QXJnKSB7CiAgICAgICAgY29uc3QgcmVtb3ZlZEl0ZW0gPSB0aGlzLmdldEJ5S2V5KGtleUFyZyk7CiAgICAgICAgZGVsZXRlIHRoaXMubWFwT2JqZWN0W2tleUFyZ107CiAgICAgICAgcmV0dXJuIHJlbW92ZWRJdGVtOwogICAgICB9CiAgICAgIGdldEtleXMoKSB7CiAgICAgICAgY29uc3Qga2V5czIgPSBbXTsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBpbiB0aGlzLm1hcE9iamVjdCkgewogICAgICAgICAgaWYgKHRoaXMubWFwT2JqZWN0W2tleUFyZ10pIHsKICAgICAgICAgICAga2V5czIucHVzaChrZXlBcmcpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4ga2V5czI7CiAgICAgIH0KICAgICAgY2xlYW4oKSB7CiAgICAgICAgdGhpcy5tYXBPYmplY3QgPSB7fTsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmV0dXJucyBhIG5ldyBGYXN0bWFwIHRoYXQgaW5jbHVkZXMgYWxsIHZhbHVlcyBmcm9tIHRoaXMgYW5kIGFsbCBmcm9tIHRoZSBmYXN0bWFwIGluIHRoZSBhcmd1bWVudAogICAgICAgKi8KICAgICAgY29uY2F0KGZhc3RNYXBBcmcpIHsKICAgICAgICBjb25zdCBjb25jYXRlZEZhc3RtYXAgPSBuZXcgX0Zhc3RNYXAoKTsKICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2YgdGhpcy5nZXRLZXlzKCkpIHsKICAgICAgICAgIGNvbmNhdGVkRmFzdG1hcC5hZGRUb01hcChrZXkyLCB0aGlzLmdldEJ5S2V5KGtleTIpKTsKICAgICAgICB9CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIGZhc3RNYXBBcmcuZ2V0S2V5cygpKSB7CiAgICAgICAgICBjb25jYXRlZEZhc3RtYXAuYWRkVG9NYXAoa2V5MiwgZmFzdE1hcEFyZy5nZXRCeUtleShrZXkyKSwgewogICAgICAgICAgICBmb3JjZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjb25jYXRlZEZhc3RtYXA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHRyaWVzIHRvIG1lcmdlIGFub3RoZXIgRmFzdG1hcAogICAgICAgKiBOb3RlOiB1bmlxdWVLZXlDb2xsaXNpb25zIHdpbGwgY2F1c2Ugb3ZlcndyaXRlCiAgICAgICAqIEBwYXJhbSBmYXN0TWFwQXJnCiAgICAgICAqLwogICAgICBhZGRBbGxGcm9tT3RoZXIoZmFzdE1hcEFyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBmYXN0TWFwQXJnLmdldEtleXMoKSkgewogICAgICAgICAgdGhpcy5hZGRUb01hcChrZXkyLCBmYXN0TWFwQXJnLmdldEJ5S2V5KGtleTIpLCB7CiAgICAgICAgICAgIGZvcmNlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgZmluZChmaW5kRnVuY3Rpb25BcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2YgdGhpcy5nZXRLZXlzKCkpIHsKICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEJ5S2V5KGtleTIpOwogICAgICAgICAgY29uc3QgZmluZEZ1bmN0aW9uUmVzdWx0ID0gYXdhaXQgZmluZEZ1bmN0aW9uQXJnKGl0ZW0pOwogICAgICAgICAgaWYgKGZpbmRGdW5jdGlvblJlc3VsdCkgewogICAgICAgICAgICByZXR1cm4gaXRlbTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2xpay5vYmplY3RtYXAuanMKdmFyIHVuaTIsIE9iamVjdE1hcDI7CnZhciBpbml0X2xpa19vYmplY3RtYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2xpay5vYmplY3RtYXAuanMiKCkgewogICAgaW5pdF9saWtfcGx1Z2lucygpOwogICAgaW5pdF9saWtfZmFzdG1hcCgpOwogICAgdW5pMiA9IChwcmVmaXg0ID0gInVuaSIpID0+IHsKICAgICAgcmV0dXJuIGAke3ByZWZpeDR9eHh4eHh4eHh4eHhgLnJlcGxhY2UoL1t4eV0vZywgKGMxMSkgPT4gewogICAgICAgIGNvbnN0IHIxMSA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDA7CiAgICAgICAgY29uc3QgdjUgPSBjMTEgPT09ICJ4IiA/IHIxMSA6IHIxMSAmIDMgfCA4OwogICAgICAgIHJldHVybiB2NS50b1N0cmluZygxNik7CiAgICAgIH0pOwogICAgfTsKICAgIE9iamVjdE1hcDIgPSBjbGFzcyBfT2JqZWN0TWFwIHsKICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBuZXcgaW5zdGFuY2UKICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuZmFzdE1hcCA9IG5ldyBGYXN0TWFwMigpOwogICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czIucnhqcy5TdWJqZWN0KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFkZHMgYW4gb2JqZWN0IG1hcHBlZCB0byBhIHN0cmluZwogICAgICAgKiB0aGUgc3RyaW5nIG11c3QgYmUgdW5pcXVlCiAgICAgICAqLwogICAgICBhZGRNYXBwZWRVbmlxdWUodW5pcXVlS2V5QXJnLCBvYmplY3RBcmcpIHsKICAgICAgICB0aGlzLmZhc3RNYXAuYWRkVG9NYXAodW5pcXVlS2V5QXJnLCBvYmplY3RBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBmYXN0ZXN0IHdheSB0byBnZXQgYW4gb2JqZWN0IGZyb20gdGhlIG1hcAogICAgICAgKiBAcGFyYW0gdW5pcXVlS2V5CiAgICAgICAqLwogICAgICBnZXRNYXBwZWRVbmlxdWUodW5pcXVlS2V5QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZmFzdE1hcC5nZXRCeUtleSh1bmlxdWVLZXlBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZW1vdmUga2V5CiAgICAgICAqIEBwYXJhbSBmdW5jdGlvbkFyZwogICAgICAgKi8KICAgICAgcmVtb3ZlTWFwcGVkVW5pcXVlKHVuaXF1ZUtleSkgewogICAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuZ2V0TWFwcGVkVW5pcXVlKHVuaXF1ZUtleSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFkZCBvYmplY3QgdG8gT2JqZWN0bWFwCiAgICAgICAqIHJldHVybnMgZmFsc2UgaWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5IGluIHRoZSBtYXAKICAgICAgICogcmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3Qgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseQogICAgICAgKi8KICAgICAgYWRkKG9iamVjdEFyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpOwogICAgICAgICAgaWYgKG9iamVjdCA9PT0gb2JqZWN0QXJnKSB7CiAgICAgICAgICAgIHJldHVybiBrZXlBcmc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IHVuaTIoImtleSIpOwogICAgICAgIHRoaXMuYWRkTWFwcGVkVW5pcXVlKHVuaXF1ZUtleSwgb2JqZWN0QXJnKTsKICAgICAgICB0aGlzLmV2ZW50U3ViamVjdC5uZXh0KHsKICAgICAgICAgIG9wZXJhdGlvbjogImFkZCIsCiAgICAgICAgICBwYXlsb2FkOiBvYmplY3RBcmcKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdW5pcXVlS2V5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBsaWtlIC5hZGQgYnV0IGFkZHMgYW4gd2hvbGUgYXJyYXkgb2Ygb2JqZWN0cwogICAgICAgKi8KICAgICAgYWRkQXJyYXkob2JqZWN0QXJyYXlBcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygb2JqZWN0QXJyYXlBcmcpIHsKICAgICAgICAgIHRoaXMuYWRkKGl0ZW0pOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2sgaWYgb2JqZWN0IGlzIGluIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgY2hlY2tGb3JPYmplY3Qob2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXRLZXlGb3JPYmplY3Qob2JqZWN0QXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZ2V0IGtleSBmb3Igb2JqZWN0CiAgICAgICAqIEBwYXJhbSBmaW5kRnVuY3Rpb24KICAgICAgICovCiAgICAgIGdldEtleUZvck9iamVjdChvYmplY3RBcmcpIHsKICAgICAgICBsZXQgZm91bmRLZXkgPSBudWxsOwogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIGlmICghZm91bmRLZXkgJiYgdGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZykgPT09IG9iamVjdEFyZykgewogICAgICAgICAgICBmb3VuZEtleSA9IGtleUFyZzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZm91bmRLZXk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZpbmQgb2JqZWN0CiAgICAgICAqLwogICAgICBhc3luYyBmaW5kKGZpbmRGdW5jdGlvbikgewogICAgICAgIHJldHVybiB0aGlzLmZhc3RNYXAuZmluZChmaW5kRnVuY3Rpb24pOwogICAgICB9CiAgICAgIGZpbmRTeW5jKGZpbmRGdW5jdGlvbikgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIGlmIChmaW5kRnVuY3Rpb24odGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZykpKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE1hcHBlZFVuaXF1ZShrZXlBcmcpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogZmluZHMgYSBzcGVjaWZpYyBlbGVtZW50IGFuZCB0aGVuIHJlbW92ZXMgaXQKICAgICAgICovCiAgICAgIGFzeW5jIGZpbmRPbmVBbmRSZW1vdmUoZmluZEZ1bmN0aW9uKSB7CiAgICAgICAgY29uc3QgZm91bmRFbGVtZW50ID0gYXdhaXQgdGhpcy5maW5kKGZpbmRGdW5jdGlvbik7CiAgICAgICAgaWYgKGZvdW5kRWxlbWVudCkgewogICAgICAgICAgdGhpcy5yZW1vdmUoZm91bmRFbGVtZW50KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZvdW5kRWxlbWVudDsKICAgICAgfQogICAgICBmaW5kT25lQW5kUmVtb3ZlU3luYyhmaW5kRnVuY3Rpb24pIHsKICAgICAgICBjb25zdCBmb3VuZEVsZW1lbnQgPSB0aGlzLmZpbmRTeW5jKGZpbmRGdW5jdGlvbik7CiAgICAgICAgaWYgKGZvdW5kRWxlbWVudCkgewogICAgICAgICAgdGhpcy5yZW1vdmUoZm91bmRFbGVtZW50KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZvdW5kRWxlbWVudDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcnVuIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0gaW4gT2JqZWN0bWFwCiAgICAgICAqLwogICAgICBhc3luYyBmb3JFYWNoKGZ1bmN0aW9uQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgYXdhaXQgZnVuY3Rpb25BcmcodGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZykpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogZ2V0cyBhbiBvYmplY3QgaW4gdGhlIE9ic2VydmFibGVtYXAgYW5kIHJlbW92ZXMgaXQsIHNvIGl0IGNhbid0IGJlIHJldHJpZXZlZCBhZ2FpbgogICAgICAgKi8KICAgICAgZ2V0T25lQW5kUmVtb3ZlKCkgewogICAgICAgIGNvbnN0IGtleXMyID0gdGhpcy5mYXN0TWFwLmdldEtleXMoKTsKICAgICAgICBpZiAoa2V5czIubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3Qga2V5VG9Vc2UgPSBrZXlzMlswXTsKICAgICAgICAgIGNvbnN0IHJlbW92ZWRJdGVtID0gdGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoa2V5VG9Vc2UpOwogICAgICAgICAgdGhpcy5ldmVudFN1YmplY3QubmV4dCh7CiAgICAgICAgICAgIG9wZXJhdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIHBheWxvYWQ6IHJlbW92ZWRJdGVtCiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiByZW1vdmVkSXRlbTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBjbG9uZWQgYXJyYXkgb2YgYWxsIHRoZSBvYmplY3RzIGN1cnJlbnRseSBpbiB0aGUgT2JqZWN0bWFwCiAgICAgICAqLwogICAgICBnZXRBcnJheSgpIHsKICAgICAgICBjb25zdCByZXR1cm5BcnJheSA9IFtdOwogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIHJldHVybkFycmF5LnB1c2godGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZykpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0dXJuQXJyYXk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrIGlmIE9iamVjdG1hcCBpc3QgZW1wdHkKICAgICAgICovCiAgICAgIGlzRW1wdHkoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkubGVuZ3RoID09PSAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZW1vdmUgb2JqZWN0IGZyb20gT2JqZWN0bWFwCiAgICAgICAqLwogICAgICByZW1vdmUob2JqZWN0QXJnKSB7CiAgICAgICAgaWYgKHRoaXMuY2hlY2tGb3JPYmplY3Qob2JqZWN0QXJnKSkgewogICAgICAgICAgY29uc3Qga2V5QXJnID0gdGhpcy5nZXRLZXlGb3JPYmplY3Qob2JqZWN0QXJnKTsKICAgICAgICAgIGNvbnN0IHJlbW92ZWRPYmplY3QgPSB0aGlzLmZhc3RNYXAucmVtb3ZlRnJvbU1hcChrZXlBcmcpOwogICAgICAgICAgdGhpcy5ldmVudFN1YmplY3QubmV4dCh7CiAgICAgICAgICAgIG9wZXJhdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIHBheWxvYWQ6IHJlbW92ZWRPYmplY3QKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIHJlbW92ZWRPYmplY3Q7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB3aXBlIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgd2lwZSgpIHsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICB0aGlzLmZhc3RNYXAucmVtb3ZlRnJvbU1hcChrZXlBcmcpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogcmV0dXJucyBhIG5ldyBPYmplY3RtYXAgdGhhdCBpbmNsdWRlcwogICAgICAgKi8KICAgICAgY29uY2F0KG9iamVjdE1hcEFyZykgewogICAgICAgIGNvbnN0IGNvbmNhdHRlZE9iamVjdE1hcCA9IG5ldyBfT2JqZWN0TWFwKCk7CiAgICAgICAgY29uY2F0dGVkT2JqZWN0TWFwLmZhc3RNYXAuYWRkQWxsRnJvbU90aGVyKHRoaXMuZmFzdE1hcCk7CiAgICAgICAgY29uY2F0dGVkT2JqZWN0TWFwLmZhc3RNYXAuYWRkQWxsRnJvbU90aGVyKG9iamVjdE1hcEFyZy5mYXN0TWFwKTsKICAgICAgICByZXR1cm4gY29uY2F0dGVkT2JqZWN0TWFwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB0cmllcyB0byBtZXJnZSBhbm90aGVyIE9iamVjdG1hcAogICAgICAgKiBOb3RlOiB1bmlxdWVLZXlDb2xsaXNpb25zIHdpbGwgY2F1c2Ugb3ZlcndyaXRlCiAgICAgICAqIEBwYXJhbSBvYmplY3RNYXBBcmcKICAgICAgICovCiAgICAgIGFkZEFsbEZyb21PdGhlcihvYmplY3RNYXBBcmcpIHsKICAgICAgICB0aGlzLmZhc3RNYXAuYWRkQWxsRnJvbU90aGVyKG9iamVjdE1hcEFyZy5mYXN0TWFwKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvbGlrLnN0cmluZ21hcC5qcwp2YXIgU3RyaW5nbWFwMjsKdmFyIGluaXRfbGlrX3N0cmluZ21hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvbGlrLnN0cmluZ21hcC5qcyIoKSB7CiAgICBpbml0X2xpa19wbHVnaW5zKCk7CiAgICBTdHJpbmdtYXAyID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLl9zdHJpbmdBcnJheSA9IFtdOwogICAgICAgIHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5ID0gW107CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFkZCBhIHN0cmluZyB0byB0aGUgU3RyaW5nbWFwCiAgICAgICAqLwogICAgICBhZGRTdHJpbmcoc3RyaW5nQXJnKSB7CiAgICAgICAgdGhpcy5fc3RyaW5nQXJyYXkucHVzaChzdHJpbmdBcmcpOwogICAgICAgIHRoaXMubm90aWZ5VHJpZ2dlcigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBsaWtlIGFkZFN0cmluZywgYnV0IGFjY2VwdHMgYW4gYXJyYXkgb2Ygc3RyaW5ncwogICAgICAgKi8KICAgICAgYWRkU3RyaW5nQXJyYXkoc3RyaW5nQXJyYXlBcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IHN0cmluZ0l0ZW0gb2Ygc3RyaW5nQXJyYXlBcmcpIHsKICAgICAgICAgIHRoaXMuYWRkU3RyaW5nKHN0cmluZ0l0ZW0pOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogcmVtb3ZlcyBhIHN0cmluZyBmcm9tIFN0cmluZ21hcAogICAgICAgKi8KICAgICAgcmVtb3ZlU3RyaW5nKHN0cmluZ0FyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIGluIHRoaXMuX3N0cmluZ0FycmF5KSB7CiAgICAgICAgICBpZiAodGhpcy5fc3RyaW5nQXJyYXlba2V5QXJnXSA9PT0gc3RyaW5nQXJnKSB7CiAgICAgICAgICAgIHRoaXMuX3N0cmluZ0FycmF5LnNwbGljZShwYXJzZUludChrZXlBcmcpLCAxKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5ub3RpZnlUcmlnZ2VyKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHdpcGVzIHRoZSBTdHJpbmdtYXAKICAgICAgICovCiAgICAgIHdpcGUoKSB7CiAgICAgICAgdGhpcy5fc3RyaW5nQXJyYXkgPSBbXTsKICAgICAgICB0aGlzLm5vdGlmeVRyaWdnZXIoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2sgaWYgc3RyaW5nIGlzIGluIFN0cmluZ21hcAogICAgICAgKi8KICAgICAgY2hlY2tTdHJpbmcoc3RyaW5nQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmluZ0FycmF5LmluZGV4T2Yoc3RyaW5nQXJnKSAhPT0gLTE7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrcyBzdHJpbmdQcmVzZW5jZSB3aXRoIG1pbmltYXRjaAogICAgICAgKi8KICAgICAgY2hlY2tNaW5pbWF0Y2gobWluaU1hdGNoU3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3Qgc21hcnRNYXRjaEluc3RhbmNlID0gbmV3IGRpc3RfdHNfZXhwb3J0czUuU21hcnRNYXRjaChtaW5pTWF0Y2hTdHJpbmdBcmcpOwogICAgICAgIGxldCBmb3VuZE1hdGNoID0gZmFsc2U7CiAgICAgICAgZm9yIChjb25zdCBzdHJpbmdJdGVtIG9mIHRoaXMuX3N0cmluZ0FycmF5KSB7CiAgICAgICAgICBpZiAoc21hcnRNYXRjaEluc3RhbmNlLm1hdGNoKHN0cmluZ0l0ZW0pKSB7CiAgICAgICAgICAgIGZvdW5kTWF0Y2ggPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZm91bmRNYXRjaDsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIGlmIHRoZSBTdHJpbmdtYXAgaXMgZW1wdHkKICAgICAgICovCiAgICAgIGNoZWNrSXNFbXB0eSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RyaW5nQXJyYXkubGVuZ3RoID09PSAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBnZXRzIGEgY2xvbmVkIGNvcHkgb2YgdGhlIGN1cnJlbnQgc3RyaW5nIEFycmF5CiAgICAgICAqLwogICAgICBnZXRTdHJpbmdBcnJheSgpIHsKICAgICAgICBjb25zdCByZXR1cm5BcnJheSA9IFtdOwogICAgICAgIGZvciAoY29uc3Qgc3RyaW5nSXRlbSBvZiB0aGlzLl9zdHJpbmdBcnJheSkgewogICAgICAgICAgcmV0dXJuQXJyYXkucHVzaChzdHJpbmdJdGVtKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldHVybkFycmF5OwogICAgICB9CiAgICAgIC8vIHRyaWdnZXIgcmVnaXN0ZXJpbmcKICAgICAgLyoqCiAgICAgICAqIHJlZ2lzdGVyIGEgbmV3IHRyaWdnZXIKICAgICAgICovCiAgICAgIHJlZ2lzdGVyVW50aWxUcnVlKGZ1bmN0aW9uQXJnLCBjYWxsYmFja0FyZykgewogICAgICAgIGNvbnN0IHRydWVEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5LnB1c2goKCkgPT4gewogICAgICAgICAgY29uc3QgcmVzdWx0ID0gZnVuY3Rpb25BcmcodGhpcy5nZXRTdHJpbmdBcnJheSgpKTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHsKICAgICAgICAgICAgaWYgKGNhbGxiYWNrQXJnKSB7CiAgICAgICAgICAgICAgY2FsbGJhY2tBcmcoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0cnVlRGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9KTsKICAgICAgICB0aGlzLm5vdGlmeVRyaWdnZXIoKTsKICAgICAgICByZXR1cm4gdHJ1ZURlZmVycmVkLnByb21pc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIG5vdGlmaWVzIHRyaWdnZXJzCiAgICAgICAqLwogICAgICBub3RpZnlUcmlnZ2VyKCkgewogICAgICAgIGNvbnN0IGZpbHRlcmVkQXJyYXkgPSB0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheS5maWx0ZXIoKGZ1bmN0aW9uQXJnKSA9PiB7CiAgICAgICAgICByZXR1cm4gIWZ1bmN0aW9uQXJnKCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXkgPSBmaWx0ZXJlZEFycmF5OwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrbGVuaXNAMS4zLjIwL25vZGVfbW9kdWxlcy9AdGVtcGZpeC9sZW5pcy9kaXN0L2xlbmlzLm1qcwpmdW5jdGlvbiBjbGFtcDIobWluMywgaW5wdXQsIG1heDMpIHsKICByZXR1cm4gTWF0aC5tYXgobWluMywgTWF0aC5taW4oaW5wdXQsIG1heDMpKTsKfQpmdW5jdGlvbiBsZXJwKHgzLCB5NSwgdDkpIHsKICByZXR1cm4gKDEgLSB0OSkgKiB4MyArIHQ5ICogeTU7Cn0KZnVuY3Rpb24gZGFtcCh4MywgeTUsIGxhbWJkYSwgZGVsdGFUaW1lKSB7CiAgcmV0dXJuIGxlcnAoeDMsIHk1LCAxIC0gTWF0aC5leHAoLWxhbWJkYSAqIGRlbHRhVGltZSkpOwp9CmZ1bmN0aW9uIG1vZHVsbyhuMTMsIGQ2KSB7CiAgcmV0dXJuIChuMTMgJSBkNiArIGQ2KSAlIGQ2Owp9CmZ1bmN0aW9uIGRlYm91bmNlMihjYWxsYmFjaywgZGVsYXkyKSB7CiAgbGV0IHRpbWVyMjsKICByZXR1cm4gZnVuY3Rpb24oLi4uYXJncykgewogICAgbGV0IGNvbnRleHQyID0gdGhpczsKICAgIGNsZWFyVGltZW91dCh0aW1lcjIpOwogICAgdGltZXIyID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHRpbWVyMiA9IHZvaWQgMDsKICAgICAgY2FsbGJhY2suYXBwbHkoY29udGV4dDIsIGFyZ3MpOwogICAgfSwgZGVsYXkyKTsKICB9Owp9CnZhciB2ZXJzaW9uLCBBbmltYXRlLCBEaW1lbnNpb25zLCBFbWl0dGVyLCBMSU5FX0hFSUdIVCwgbGlzdGVuZXJPcHRpb25zLCBWaXJ0dWFsU2Nyb2xsLCBkZWZhdWx0RWFzaW5nLCBMZW5pczsKdmFyIGluaXRfbGVuaXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCtsZW5pc0AxLjMuMjAvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L2xlbmlzL2Rpc3QvbGVuaXMubWpzIigpIHsKICAgIHZlcnNpb24gPSAiMS4zLjE3IjsKICAgIEFuaW1hdGUgPSBjbGFzcyB7CiAgICAgIGlzUnVubmluZyA9IGZhbHNlOwogICAgICB2YWx1ZSA9IDA7CiAgICAgIGZyb20gPSAwOwogICAgICB0byA9IDA7CiAgICAgIGN1cnJlbnRUaW1lID0gMDsKICAgICAgLy8gVGhlc2UgYXJlIGluc3RhbmNpYXRlZCBpbiB0aGUgZnJvbVRvIG1ldGhvZAogICAgICBsZXJwOwogICAgICBkdXJhdGlvbjsKICAgICAgZWFzaW5nOwogICAgICBvblVwZGF0ZTsKICAgICAgLyoqCiAgICAgICAqIEFkdmFuY2UgdGhlIGFuaW1hdGlvbiBieSB0aGUgZ2l2ZW4gZGVsdGEgdGltZQogICAgICAgKgogICAgICAgKiBAcGFyYW0gZGVsdGFUaW1lIC0gVGhlIHRpbWUgaW4gc2Vjb25kcyB0byBhZHZhbmNlIHRoZSBhbmltYXRpb24KICAgICAgICovCiAgICAgIGFkdmFuY2UoZGVsdGFUaW1lKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzUnVubmluZykgcmV0dXJuOwogICAgICAgIGxldCBjb21wbGV0ZWQgPSBmYWxzZTsKICAgICAgICBpZiAodGhpcy5kdXJhdGlvbiAmJiB0aGlzLmVhc2luZykgewogICAgICAgICAgdGhpcy5jdXJyZW50VGltZSArPSBkZWx0YVRpbWU7CiAgICAgICAgICBjb25zdCBsaW5lYXJQcm9ncmVzcyA9IGNsYW1wMigwLCB0aGlzLmN1cnJlbnRUaW1lIC8gdGhpcy5kdXJhdGlvbiwgMSk7CiAgICAgICAgICBjb21wbGV0ZWQgPSBsaW5lYXJQcm9ncmVzcyA+PSAxOwogICAgICAgICAgY29uc3QgZWFzZWRQcm9ncmVzcyA9IGNvbXBsZXRlZCA/IDEgOiB0aGlzLmVhc2luZyhsaW5lYXJQcm9ncmVzcyk7CiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5mcm9tICsgKHRoaXMudG8gLSB0aGlzLmZyb20pICogZWFzZWRQcm9ncmVzczsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGVycCkgewogICAgICAgICAgdGhpcy52YWx1ZSA9IGRhbXAodGhpcy52YWx1ZSwgdGhpcy50bywgdGhpcy5sZXJwICogNjAsIGRlbHRhVGltZSk7CiAgICAgICAgICBpZiAoTWF0aC5yb3VuZCh0aGlzLnZhbHVlKSA9PT0gdGhpcy50bykgewogICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50bzsKICAgICAgICAgICAgY29tcGxldGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudG87CiAgICAgICAgICBjb21wbGV0ZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoY29tcGxldGVkKSB7CiAgICAgICAgICB0aGlzLnN0b3AoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5vblVwZGF0ZT8uKHRoaXMudmFsdWUsIGNvbXBsZXRlZCk7CiAgICAgIH0KICAgICAgLyoqIFN0b3AgdGhlIGFuaW1hdGlvbiAqLwogICAgICBzdG9wKCkgewogICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNldCB1cCB0aGUgYW5pbWF0aW9uIGZyb20gYSBzdGFydGluZyB2YWx1ZSB0byBhbiBlbmRpbmcgdmFsdWUKICAgICAgICogd2l0aCBvcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBsZXJwaW5nLCBkdXJhdGlvbiwgZWFzaW5nLCBhbmQgb25VcGRhdGUgY2FsbGJhY2sKICAgICAgICoKICAgICAgICogQHBhcmFtIGZyb20gLSBUaGUgc3RhcnRpbmcgdmFsdWUKICAgICAgICogQHBhcmFtIHRvIC0gVGhlIGVuZGluZyB2YWx1ZQogICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBhbmltYXRpb24KICAgICAgICovCiAgICAgIGZyb21Ubyhmcm9tMiwgdG8yLCB7IGxlcnA6IGxlcnAyLCBkdXJhdGlvbiwgZWFzaW5nLCBvblN0YXJ0LCBvblVwZGF0ZSB9KSB7CiAgICAgICAgdGhpcy5mcm9tID0gdGhpcy52YWx1ZSA9IGZyb20yOwogICAgICAgIHRoaXMudG8gPSB0bzI7CiAgICAgICAgdGhpcy5sZXJwID0gbGVycDI7CiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uOwogICAgICAgIHRoaXMuZWFzaW5nID0gZWFzaW5nOwogICAgICAgIHRoaXMuY3VycmVudFRpbWUgPSAwOwogICAgICAgIHRoaXMuaXNSdW5uaW5nID0gdHJ1ZTsKICAgICAgICBvblN0YXJ0Py4oKTsKICAgICAgICB0aGlzLm9uVXBkYXRlID0gb25VcGRhdGU7CiAgICAgIH0KICAgIH07CiAgICBEaW1lbnNpb25zID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih3cmFwcGVyLCBjb250ZW50MywgeyBhdXRvUmVzaXplID0gdHJ1ZSwgZGVib3VuY2U6IGRlYm91bmNlVmFsdWUgPSAyNTAgfSA9IHt9KSB7CiAgICAgICAgdGhpcy53cmFwcGVyID0gd3JhcHBlcjsKICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50MzsKICAgICAgICBpZiAoYXV0b1Jlc2l6ZSkgewogICAgICAgICAgdGhpcy5kZWJvdW5jZWRSZXNpemUgPSBkZWJvdW5jZTIodGhpcy5yZXNpemUsIGRlYm91bmNlVmFsdWUpOwogICAgICAgICAgaWYgKHRoaXMud3JhcHBlciBpbnN0YW5jZW9mIFdpbmRvdykgewogICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy5kZWJvdW5jZWRSZXNpemUsIGZhbHNlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMud3JhcHBlclJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuZGVib3VuY2VkUmVzaXplKTsKICAgICAgICAgICAgdGhpcy53cmFwcGVyUmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLndyYXBwZXIpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5jb250ZW50UmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5kZWJvdW5jZWRSZXNpemUpOwogICAgICAgICAgdGhpcy5jb250ZW50UmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNvbnRlbnQpOwogICAgICAgIH0KICAgICAgICB0aGlzLnJlc2l6ZSgpOwogICAgICB9CiAgICAgIHdpZHRoID0gMDsKICAgICAgaGVpZ2h0ID0gMDsKICAgICAgc2Nyb2xsSGVpZ2h0ID0gMDsKICAgICAgc2Nyb2xsV2lkdGggPSAwOwogICAgICAvLyBUaGVzZSBhcmUgaW5zdGFuY2lhdGVkIGluIHRoZSBjb25zdHJ1Y3RvciBhcyB0aGV5IG5lZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3B0aW9ucwogICAgICBkZWJvdW5jZWRSZXNpemU7CiAgICAgIHdyYXBwZXJSZXNpemVPYnNlcnZlcjsKICAgICAgY29udGVudFJlc2l6ZU9ic2VydmVyOwogICAgICBkZXN0cm95KCkgewogICAgICAgIHRoaXMud3JhcHBlclJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7CiAgICAgICAgdGhpcy5jb250ZW50UmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTsKICAgICAgICBpZiAodGhpcy53cmFwcGVyID09PSB3aW5kb3cgJiYgdGhpcy5kZWJvdW5jZWRSZXNpemUpIHsKICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlzLmRlYm91bmNlZFJlc2l6ZSwgZmFsc2UpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXNpemUgPSAoKSA9PiB7CiAgICAgICAgdGhpcy5vbldyYXBwZXJSZXNpemUoKTsKICAgICAgICB0aGlzLm9uQ29udGVudFJlc2l6ZSgpOwogICAgICB9OwogICAgICBvbldyYXBwZXJSZXNpemUgPSAoKSA9PiB7CiAgICAgICAgaWYgKHRoaXMud3JhcHBlciBpbnN0YW5jZW9mIFdpbmRvdykgewogICAgICAgICAgdGhpcy53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOwogICAgICAgICAgdGhpcy5oZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLndyYXBwZXIuY2xpZW50V2lkdGg7CiAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMud3JhcHBlci5jbGllbnRIZWlnaHQ7CiAgICAgICAgfQogICAgICB9OwogICAgICBvbkNvbnRlbnRSZXNpemUgPSAoKSA9PiB7CiAgICAgICAgaWYgKHRoaXMud3JhcHBlciBpbnN0YW5jZW9mIFdpbmRvdykgewogICAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSB0aGlzLmNvbnRlbnQuc2Nyb2xsSGVpZ2h0OwogICAgICAgICAgdGhpcy5zY3JvbGxXaWR0aCA9IHRoaXMuY29udGVudC5zY3JvbGxXaWR0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSB0aGlzLndyYXBwZXIuc2Nyb2xsSGVpZ2h0OwogICAgICAgICAgdGhpcy5zY3JvbGxXaWR0aCA9IHRoaXMud3JhcHBlci5zY3JvbGxXaWR0aDsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGdldCBsaW1pdCgpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgeDogdGhpcy5zY3JvbGxXaWR0aCAtIHRoaXMud2lkdGgsCiAgICAgICAgICB5OiB0aGlzLnNjcm9sbEhlaWdodCAtIHRoaXMuaGVpZ2h0CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIEVtaXR0ZXIgPSBjbGFzcyB7CiAgICAgIGV2ZW50cyA9IHt9OwogICAgICAvKioKICAgICAgICogRW1pdCBhbiBldmVudCB3aXRoIHRoZSBnaXZlbiBkYXRhCiAgICAgICAqIEBwYXJhbSBldmVudCBFdmVudCBuYW1lCiAgICAgICAqIEBwYXJhbSBhcmdzIERhdGEgdG8gcGFzcyB0byB0aGUgZXZlbnQgaGFuZGxlcnMKICAgICAgICovCiAgICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHsKICAgICAgICBsZXQgY2FsbGJhY2tzID0gdGhpcy5ldmVudHNbZXZlbnRdIHx8IFtdOwogICAgICAgIGZvciAobGV0IGkxMSA9IDAsIGxlbmd0aCA9IGNhbGxiYWNrcy5sZW5ndGg7IGkxMSA8IGxlbmd0aDsgaTExKyspIHsKICAgICAgICAgIGNhbGxiYWNrc1tpMTFdPy4oLi4uYXJncyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBZGQgYSBjYWxsYmFjayB0byB0aGUgZXZlbnQKICAgICAgICogQHBhcmFtIGV2ZW50IEV2ZW50IG5hbWUKICAgICAgICogQHBhcmFtIGNiIENhbGxiYWNrIGZ1bmN0aW9uCiAgICAgICAqIEByZXR1cm5zIFVuc3Vic2NyaWJlIGZ1bmN0aW9uCiAgICAgICAqLwogICAgICBvbihldmVudCwgY2IpIHsKICAgICAgICB0aGlzLmV2ZW50c1tldmVudF0/LnB1c2goY2IpIHx8ICh0aGlzLmV2ZW50c1tldmVudF0gPSBbY2JdKTsKICAgICAgICByZXR1cm4gKCkgPT4gewogICAgICAgICAgdGhpcy5ldmVudHNbZXZlbnRdID0gdGhpcy5ldmVudHNbZXZlbnRdPy5maWx0ZXIoKGkxMSkgPT4gY2IgIT09IGkxMSk7CiAgICAgICAgfTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgZXZlbnQKICAgICAgICogQHBhcmFtIGV2ZW50IEV2ZW50IG5hbWUKICAgICAgICogQHBhcmFtIGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uCiAgICAgICAqLwogICAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7CiAgICAgICAgdGhpcy5ldmVudHNbZXZlbnRdID0gdGhpcy5ldmVudHNbZXZlbnRdPy5maWx0ZXIoKGkxMSkgPT4gY2FsbGJhY2sgIT09IGkxMSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJlbW92ZSBhbGwgZXZlbnQgbGlzdGVuZXJzIGFuZCBjbGVhbiB1cAogICAgICAgKi8KICAgICAgZGVzdHJveSgpIHsKICAgICAgICB0aGlzLmV2ZW50cyA9IHt9OwogICAgICB9CiAgICB9OwogICAgTElORV9IRUlHSFQgPSAxMDAgLyA2OwogICAgbGlzdGVuZXJPcHRpb25zID0geyBwYXNzaXZlOiBmYWxzZSB9OwogICAgVmlydHVhbFNjcm9sbCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoZWxlbWVudDQsIG9wdGlvbnMgPSB7IHdoZWVsTXVsdGlwbGllcjogMSwgdG91Y2hNdWx0aXBsaWVyOiAxIH0pIHsKICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50NDsKICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlzLm9uV2luZG93UmVzaXplLCBmYWxzZSk7CiAgICAgICAgdGhpcy5vbldpbmRvd1Jlc2l6ZSgpOwogICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsIHRoaXMub25XaGVlbCwgbGlzdGVuZXJPcHRpb25zKTsKICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICJ0b3VjaHN0YXJ0IiwKICAgICAgICAgIHRoaXMub25Ub3VjaFN0YXJ0LAogICAgICAgICAgbGlzdGVuZXJPcHRpb25zCiAgICAgICAgKTsKICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICJ0b3VjaG1vdmUiLAogICAgICAgICAgdGhpcy5vblRvdWNoTW92ZSwKICAgICAgICAgIGxpc3RlbmVyT3B0aW9ucwogICAgICAgICk7CiAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIiwgdGhpcy5vblRvdWNoRW5kLCBsaXN0ZW5lck9wdGlvbnMpOwogICAgICB9CiAgICAgIHRvdWNoU3RhcnQgPSB7CiAgICAgICAgeDogMCwKICAgICAgICB5OiAwCiAgICAgIH07CiAgICAgIGxhc3REZWx0YSA9IHsKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAKICAgICAgfTsKICAgICAgd2luZG93ID0gewogICAgICAgIHdpZHRoOiAwLAogICAgICAgIGhlaWdodDogMAogICAgICB9OwogICAgICBlbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTsKICAgICAgLyoqCiAgICAgICAqIEFkZCBhbiBldmVudCBsaXN0ZW5lciBmb3IgdGhlIGdpdmVuIGV2ZW50IGFuZCBjYWxsYmFjawogICAgICAgKgogICAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnQgbmFtZQogICAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24KICAgICAgICovCiAgICAgIG9uKGV2ZW50LCBjYWxsYmFjaykgewogICAgICAgIHJldHVybiB0aGlzLmVtaXR0ZXIub24oZXZlbnQsIGNhbGxiYWNrKTsKICAgICAgfQogICAgICAvKiogUmVtb3ZlIGFsbCBldmVudCBsaXN0ZW5lcnMgYW5kIGNsZWFuIHVwICovCiAgICAgIGRlc3Ryb3koKSB7CiAgICAgICAgdGhpcy5lbWl0dGVyLmRlc3Ryb3koKTsKICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy5vbldpbmRvd1Jlc2l6ZSwgZmFsc2UpOwogICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsIHRoaXMub25XaGVlbCwgbGlzdGVuZXJPcHRpb25zKTsKICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICJ0b3VjaHN0YXJ0IiwKICAgICAgICAgIHRoaXMub25Ub3VjaFN0YXJ0LAogICAgICAgICAgbGlzdGVuZXJPcHRpb25zCiAgICAgICAgKTsKICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICJ0b3VjaG1vdmUiLAogICAgICAgICAgdGhpcy5vblRvdWNoTW92ZSwKICAgICAgICAgIGxpc3RlbmVyT3B0aW9ucwogICAgICAgICk7CiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoCiAgICAgICAgICAidG91Y2hlbmQiLAogICAgICAgICAgdGhpcy5vblRvdWNoRW5kLAogICAgICAgICAgbGlzdGVuZXJPcHRpb25zCiAgICAgICAgKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogRXZlbnQgaGFuZGxlciBmb3IgJ3RvdWNoc3RhcnQnIGV2ZW50CiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBldmVudCBUb3VjaCBldmVudAogICAgICAgKi8KICAgICAgb25Ub3VjaFN0YXJ0ID0gKGV2ZW50KSA9PiB7CiAgICAgICAgY29uc3QgeyBjbGllbnRYLCBjbGllbnRZIH0gPSBldmVudC50YXJnZXRUb3VjaGVzID8gZXZlbnQudGFyZ2V0VG91Y2hlc1swXSA6IGV2ZW50OwogICAgICAgIHRoaXMudG91Y2hTdGFydC54ID0gY2xpZW50WDsKICAgICAgICB0aGlzLnRvdWNoU3RhcnQueSA9IGNsaWVudFk7CiAgICAgICAgdGhpcy5sYXN0RGVsdGEgPSB7CiAgICAgICAgICB4OiAwLAogICAgICAgICAgeTogMAogICAgICAgIH07CiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoInNjcm9sbCIsIHsKICAgICAgICAgIGRlbHRhWDogMCwKICAgICAgICAgIGRlbHRhWTogMCwKICAgICAgICAgIGV2ZW50CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIC8qKiBFdmVudCBoYW5kbGVyIGZvciAndG91Y2htb3ZlJyBldmVudCAqLwogICAgICBvblRvdWNoTW92ZSA9IChldmVudCkgPT4gewogICAgICAgIGNvbnN0IHsgY2xpZW50WCwgY2xpZW50WSB9ID0gZXZlbnQudGFyZ2V0VG91Y2hlcyA/IGV2ZW50LnRhcmdldFRvdWNoZXNbMF0gOiBldmVudDsKICAgICAgICBjb25zdCBkZWx0YVggPSAtKGNsaWVudFggLSB0aGlzLnRvdWNoU3RhcnQueCkgKiB0aGlzLm9wdGlvbnMudG91Y2hNdWx0aXBsaWVyOwogICAgICAgIGNvbnN0IGRlbHRhWSA9IC0oY2xpZW50WSAtIHRoaXMudG91Y2hTdGFydC55KSAqIHRoaXMub3B0aW9ucy50b3VjaE11bHRpcGxpZXI7CiAgICAgICAgdGhpcy50b3VjaFN0YXJ0LnggPSBjbGllbnRYOwogICAgICAgIHRoaXMudG91Y2hTdGFydC55ID0gY2xpZW50WTsKICAgICAgICB0aGlzLmxhc3REZWx0YSA9IHsKICAgICAgICAgIHg6IGRlbHRhWCwKICAgICAgICAgIHk6IGRlbHRhWQogICAgICAgIH07CiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoInNjcm9sbCIsIHsKICAgICAgICAgIGRlbHRhWCwKICAgICAgICAgIGRlbHRhWSwKICAgICAgICAgIGV2ZW50CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIG9uVG91Y2hFbmQgPSAoZXZlbnQpID0+IHsKICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgic2Nyb2xsIiwgewogICAgICAgICAgZGVsdGFYOiB0aGlzLmxhc3REZWx0YS54LAogICAgICAgICAgZGVsdGFZOiB0aGlzLmxhc3REZWx0YS55LAogICAgICAgICAgZXZlbnQKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgLyoqIEV2ZW50IGhhbmRsZXIgZm9yICd3aGVlbCcgZXZlbnQgKi8KICAgICAgb25XaGVlbCA9IChldmVudCkgPT4gewogICAgICAgIGxldCB7IGRlbHRhWCwgZGVsdGFZLCBkZWx0YU1vZGUgfSA9IGV2ZW50OwogICAgICAgIGNvbnN0IG11bHRpcGxpZXJYID0gZGVsdGFNb2RlID09PSAxID8gTElORV9IRUlHSFQgOiBkZWx0YU1vZGUgPT09IDIgPyB0aGlzLndpbmRvdy53aWR0aCA6IDE7CiAgICAgICAgY29uc3QgbXVsdGlwbGllclkgPSBkZWx0YU1vZGUgPT09IDEgPyBMSU5FX0hFSUdIVCA6IGRlbHRhTW9kZSA9PT0gMiA/IHRoaXMud2luZG93LmhlaWdodCA6IDE7CiAgICAgICAgZGVsdGFYICo9IG11bHRpcGxpZXJYOwogICAgICAgIGRlbHRhWSAqPSBtdWx0aXBsaWVyWTsKICAgICAgICBkZWx0YVggKj0gdGhpcy5vcHRpb25zLndoZWVsTXVsdGlwbGllcjsKICAgICAgICBkZWx0YVkgKj0gdGhpcy5vcHRpb25zLndoZWVsTXVsdGlwbGllcjsKICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgic2Nyb2xsIiwgeyBkZWx0YVgsIGRlbHRhWSwgZXZlbnQgfSk7CiAgICAgIH07CiAgICAgIG9uV2luZG93UmVzaXplID0gKCkgPT4gewogICAgICAgIHRoaXMud2luZG93ID0gewogICAgICAgICAgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLAogICAgICAgICAgaGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQKICAgICAgICB9OwogICAgICB9OwogICAgfTsKICAgIGRlZmF1bHRFYXNpbmcgPSAodDkpID0+IE1hdGgubWluKDEsIDEuMDAxIC0gTWF0aC5wb3coMiwgLTEwICogdDkpKTsKICAgIExlbmlzID0gY2xhc3MgewogICAgICBfaXNTY3JvbGxpbmcgPSBmYWxzZTsKICAgICAgLy8gdHJ1ZSB3aGVuIHNjcm9sbCBpcyBhbmltYXRpbmcKICAgICAgX2lzU3RvcHBlZCA9IGZhbHNlOwogICAgICAvLyB0cnVlIGlmIHVzZXIgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIHNjcm9sbCAtIGVuYWJsZS9kaXNhYmxlIHByb2dyYW1tYXRpY2FsbHkKICAgICAgX2lzTG9ja2VkID0gZmFsc2U7CiAgICAgIC8vIHNhbWUgYXMgaXNTdG9wcGVkIGJ1dCBlbmFibGVkL2Rpc2FibGVkIHdoZW4gc2Nyb2xsIHJlYWNoZXMgdGFyZ2V0CiAgICAgIF9wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50ID0gZmFsc2U7CiAgICAgIF9yZXNldFZlbG9jaXR5VGltZW91dCA9IG51bGw7CiAgICAgIF9yYWZJZCA9IG51bGw7CiAgICAgIC8qKgogICAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgdXNlciBpcyB0b3VjaGluZyB0aGUgc2NyZWVuCiAgICAgICAqLwogICAgICBpc1RvdWNoaW5nOwogICAgICAvKioKICAgICAgICogVGhlIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxlbmlzIGluc3RhbmNlIHdhcyBjcmVhdGVkCiAgICAgICAqLwogICAgICB0aW1lID0gMDsKICAgICAgLyoqCiAgICAgICAqIFVzZXIgZGF0YSB0aGF0IHdpbGwgYmUgZm9yd2FyZGVkIHRocm91Z2ggdGhlIHNjcm9sbCBldmVudAogICAgICAgKgogICAgICAgKiBAZXhhbXBsZQogICAgICAgKiBsZW5pcy5zY3JvbGxUbygxMDAsIHsKICAgICAgICogICB1c2VyRGF0YTogewogICAgICAgKiAgICAgZm9vOiAnYmFyJwogICAgICAgKiAgIH0KICAgICAgICogfSkKICAgICAgICovCiAgICAgIHVzZXJEYXRhID0ge307CiAgICAgIC8qKgogICAgICAgKiBUaGUgbGFzdCB2ZWxvY2l0eSBvZiB0aGUgc2Nyb2xsCiAgICAgICAqLwogICAgICBsYXN0VmVsb2NpdHkgPSAwOwogICAgICAvKioKICAgICAgICogVGhlIGN1cnJlbnQgdmVsb2NpdHkgb2YgdGhlIHNjcm9sbAogICAgICAgKi8KICAgICAgdmVsb2NpdHkgPSAwOwogICAgICAvKioKICAgICAgICogVGhlIGRpcmVjdGlvbiBvZiB0aGUgc2Nyb2xsCiAgICAgICAqLwogICAgICBkaXJlY3Rpb24gPSAwOwogICAgICAvKioKICAgICAgICogVGhlIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBsZW5pcyBpbnN0YW5jZQogICAgICAgKi8KICAgICAgb3B0aW9uczsKICAgICAgLyoqCiAgICAgICAqIFRoZSB0YXJnZXQgc2Nyb2xsIHZhbHVlCiAgICAgICAqLwogICAgICB0YXJnZXRTY3JvbGw7CiAgICAgIC8qKgogICAgICAgKiBUaGUgYW5pbWF0ZWQgc2Nyb2xsIHZhbHVlCiAgICAgICAqLwogICAgICBhbmltYXRlZFNjcm9sbDsKICAgICAgLy8gVGhlc2UgYXJlIGluc3RhbmNpYXRlZCBoZXJlIGFzIHRoZXkgZG9uJ3QgbmVlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvcHRpb25zCiAgICAgIGFuaW1hdGUgPSBuZXcgQW5pbWF0ZSgpOwogICAgICBlbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTsKICAgICAgLy8gVGhlc2UgYXJlIGluc3RhbmNpYXRlZCBpbiB0aGUgY29uc3RydWN0b3IgYXMgdGhleSBuZWVkIGluZm9ybWF0aW9uIGZyb20gdGhlIG9wdGlvbnMKICAgICAgZGltZW5zaW9uczsKICAgICAgLy8gVGhpcyBpcyBub3QgcHJpdmF0ZSBiZWNhdXNlIGl0J3MgdXNlZCBpbiB0aGUgU25hcCBjbGFzcwogICAgICB2aXJ0dWFsU2Nyb2xsOwogICAgICBjb25zdHJ1Y3Rvcih7CiAgICAgICAgd3JhcHBlciA9IHdpbmRvdywKICAgICAgICBjb250ZW50OiBjb250ZW50MyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwKICAgICAgICBldmVudHNUYXJnZXQgPSB3cmFwcGVyLAogICAgICAgIHNtb290aFdoZWVsID0gdHJ1ZSwKICAgICAgICBzeW5jVG91Y2ggPSBmYWxzZSwKICAgICAgICBzeW5jVG91Y2hMZXJwID0gMC4wNzUsCiAgICAgICAgdG91Y2hJbmVydGlhRXhwb25lbnQgPSAxLjcsCiAgICAgICAgZHVyYXRpb24sCiAgICAgICAgLy8gaW4gc2Vjb25kcwogICAgICAgIGVhc2luZywKICAgICAgICBsZXJwOiBsZXJwMiA9IDAuMSwKICAgICAgICBpbmZpbml0ZSA9IGZhbHNlLAogICAgICAgIG9yaWVudGF0aW9uID0gInZlcnRpY2FsIiwKICAgICAgICAvLyB2ZXJ0aWNhbCwgaG9yaXpvbnRhbAogICAgICAgIGdlc3R1cmVPcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uID09PSAiaG9yaXpvbnRhbCIgPyAiYm90aCIgOiAidmVydGljYWwiLAogICAgICAgIC8vIHZlcnRpY2FsLCBob3Jpem9udGFsLCBib3RoCiAgICAgICAgdG91Y2hNdWx0aXBsaWVyID0gMSwKICAgICAgICB3aGVlbE11bHRpcGxpZXIgPSAxLAogICAgICAgIGF1dG9SZXNpemUgPSB0cnVlLAogICAgICAgIHByZXZlbnQsCiAgICAgICAgdmlydHVhbFNjcm9sbCwKICAgICAgICBvdmVyc2Nyb2xsID0gdHJ1ZSwKICAgICAgICBhdXRvUmFmID0gZmFsc2UsCiAgICAgICAgYW5jaG9ycyA9IGZhbHNlLAogICAgICAgIGF1dG9Ub2dnbGUgPSBmYWxzZSwKICAgICAgICAvLyBodHRwczovL2Nhbml1c2UuY29tLz9zZWFyY2g9dHJhbnNpdGlvbi1iZWhhdmlvcgogICAgICAgIGFsbG93TmVzdGVkU2Nyb2xsID0gZmFsc2UsCiAgICAgICAgLy8gQHRzLWlnbm9yZTogdGhpcyB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZQogICAgICAgIF9fZXhwZXJpbWVudGFsX19uYWl2ZURpbWVuc2lvbnMgPSBmYWxzZSwKICAgICAgICBuYWl2ZURpbWVuc2lvbnMgPSBfX2V4cGVyaW1lbnRhbF9fbmFpdmVEaW1lbnNpb25zLAogICAgICAgIHN0b3BJbmVydGlhT25OYXZpZ2F0ZSA9IGZhbHNlCiAgICAgIH0gPSB7fSkgewogICAgICAgIHdpbmRvdy5sZW5pc1ZlcnNpb24gPSB2ZXJzaW9uOwogICAgICAgIGlmICghd3JhcHBlciB8fCB3cmFwcGVyID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHsKICAgICAgICAgIHdyYXBwZXIgPSB3aW5kb3c7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgZHVyYXRpb24gPT09ICJudW1iZXIiICYmIHR5cGVvZiBlYXNpbmcgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGVhc2luZyA9IGRlZmF1bHRFYXNpbmc7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZWFzaW5nID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBkdXJhdGlvbiAhPT0gIm51bWJlciIpIHsKICAgICAgICAgIGR1cmF0aW9uID0gMTsKICAgICAgICB9CiAgICAgICAgdGhpcy5vcHRpb25zID0gewogICAgICAgICAgd3JhcHBlciwKICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICAgICAgZXZlbnRzVGFyZ2V0LAogICAgICAgICAgc21vb3RoV2hlZWwsCiAgICAgICAgICBzeW5jVG91Y2gsCiAgICAgICAgICBzeW5jVG91Y2hMZXJwLAogICAgICAgICAgdG91Y2hJbmVydGlhRXhwb25lbnQsCiAgICAgICAgICBkdXJhdGlvbiwKICAgICAgICAgIGVhc2luZywKICAgICAgICAgIGxlcnA6IGxlcnAyLAogICAgICAgICAgaW5maW5pdGUsCiAgICAgICAgICBnZXN0dXJlT3JpZW50YXRpb24sCiAgICAgICAgICBvcmllbnRhdGlvbiwKICAgICAgICAgIHRvdWNoTXVsdGlwbGllciwKICAgICAgICAgIHdoZWVsTXVsdGlwbGllciwKICAgICAgICAgIGF1dG9SZXNpemUsCiAgICAgICAgICBwcmV2ZW50LAogICAgICAgICAgdmlydHVhbFNjcm9sbCwKICAgICAgICAgIG92ZXJzY3JvbGwsCiAgICAgICAgICBhdXRvUmFmLAogICAgICAgICAgYW5jaG9ycywKICAgICAgICAgIGF1dG9Ub2dnbGUsCiAgICAgICAgICBhbGxvd05lc3RlZFNjcm9sbCwKICAgICAgICAgIG5haXZlRGltZW5zaW9ucywKICAgICAgICAgIHN0b3BJbmVydGlhT25OYXZpZ2F0ZQogICAgICAgIH07CiAgICAgICAgdGhpcy5kaW1lbnNpb25zID0gbmV3IERpbWVuc2lvbnMod3JhcHBlciwgY29udGVudDMsIHsgYXV0b1Jlc2l6ZSB9KTsKICAgICAgICB0aGlzLnVwZGF0ZUNsYXNzTmFtZSgpOwogICAgICAgIHRoaXMudGFyZ2V0U2Nyb2xsID0gdGhpcy5hbmltYXRlZFNjcm9sbCA9IHRoaXMuYWN0dWFsU2Nyb2xsOwogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMub25OYXRpdmVTY3JvbGwsIGZhbHNlKTsKICAgICAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGxlbmQiLCB0aGlzLm9uU2Nyb2xsRW5kLCB7CiAgICAgICAgICBjYXB0dXJlOiB0cnVlCiAgICAgICAgfSk7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hbmNob3JzIHx8IHRoaXMub3B0aW9ucy5zdG9wSW5lcnRpYU9uTmF2aWdhdGUpIHsKICAgICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoCiAgICAgICAgICAgICJjbGljayIsCiAgICAgICAgICAgIHRoaXMub25DbGljaywKICAgICAgICAgICAgZmFsc2UKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoCiAgICAgICAgICAicG9pbnRlcmRvd24iLAogICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duLAogICAgICAgICAgZmFsc2UKICAgICAgICApOwogICAgICAgIHRoaXMudmlydHVhbFNjcm9sbCA9IG5ldyBWaXJ0dWFsU2Nyb2xsKGV2ZW50c1RhcmdldCwgewogICAgICAgICAgdG91Y2hNdWx0aXBsaWVyLAogICAgICAgICAgd2hlZWxNdWx0aXBsaWVyCiAgICAgICAgfSk7CiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsLm9uKCJzY3JvbGwiLCB0aGlzLm9uVmlydHVhbFNjcm9sbCk7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvVG9nZ2xlKSB7CiAgICAgICAgICB0aGlzLmNoZWNrT3ZlcmZsb3coKTsKICAgICAgICAgIHRoaXMucm9vdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsIHRoaXMub25UcmFuc2l0aW9uRW5kLCB7CiAgICAgICAgICAgIHBhc3NpdmU6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9SYWYpIHsKICAgICAgICAgIHRoaXMuX3JhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmFmKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIERlc3Ryb3kgdGhlIGxlbmlzIGluc3RhbmNlLCByZW1vdmUgYWxsIGV2ZW50IGxpc3RlbmVycyBhbmQgY2xlYW4gdXAgdGhlIGNsYXNzIG5hbWUKICAgICAgICovCiAgICAgIGRlc3Ryb3koKSB7CiAgICAgICAgdGhpcy5lbWl0dGVyLmRlc3Ryb3koKTsKICAgICAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5yZW1vdmVFdmVudExpc3RlbmVyKAogICAgICAgICAgInNjcm9sbCIsCiAgICAgICAgICB0aGlzLm9uTmF0aXZlU2Nyb2xsLAogICAgICAgICAgZmFsc2UKICAgICAgICApOwogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbGVuZCIsIHRoaXMub25TY3JvbGxFbmQsIHsKICAgICAgICAgIGNhcHR1cmU6IHRydWUKICAgICAgICB9KTsKICAgICAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5yZW1vdmVFdmVudExpc3RlbmVyKAogICAgICAgICAgInBvaW50ZXJkb3duIiwKICAgICAgICAgIHRoaXMub25Qb2ludGVyRG93biwKICAgICAgICAgIGZhbHNlCiAgICAgICAgKTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFuY2hvcnMgfHwgdGhpcy5vcHRpb25zLnN0b3BJbmVydGlhT25OYXZpZ2F0ZSkgewogICAgICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICAgImNsaWNrIiwKICAgICAgICAgICAgdGhpcy5vbkNsaWNrLAogICAgICAgICAgICBmYWxzZQogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsLmRlc3Ryb3koKTsKICAgICAgICB0aGlzLmRpbWVuc2lvbnMuZGVzdHJveSgpOwogICAgICAgIHRoaXMuY2xlYW5VcENsYXNzTmFtZSgpOwogICAgICAgIGlmICh0aGlzLl9yYWZJZCkgewogICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmSWQpOwogICAgICAgIH0KICAgICAgfQogICAgICBvbihldmVudCwgY2FsbGJhY2spIHsKICAgICAgICByZXR1cm4gdGhpcy5lbWl0dGVyLm9uKGV2ZW50LCBjYWxsYmFjayk7CiAgICAgIH0KICAgICAgb2ZmKGV2ZW50LCBjYWxsYmFjaykgewogICAgICAgIHJldHVybiB0aGlzLmVtaXR0ZXIub2ZmKGV2ZW50LCBjYWxsYmFjayk7CiAgICAgIH0KICAgICAgb25TY3JvbGxFbmQgPSAoZTExKSA9PiB7CiAgICAgICAgaWYgKCEoZTExIGluc3RhbmNlb2YgQ3VzdG9tRXZlbnQpKSB7CiAgICAgICAgICBpZiAodGhpcy5pc1Njcm9sbGluZyA9PT0gInNtb290aCIgfHwgdGhpcy5pc1Njcm9sbGluZyA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgZGlzcGF0Y2hTY3JvbGxlbmRFdmVudCA9ICgpID0+IHsKICAgICAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5kaXNwYXRjaEV2ZW50KAogICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCJzY3JvbGxlbmQiLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRoaXMub3B0aW9ucy53cmFwcGVyID09PSB3aW5kb3csCiAgICAgICAgICAgIC8vIGNhbmNlbGFibGU6IGZhbHNlLAogICAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgICBsZW5pc1Njcm9sbEVuZDogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgICB9KQogICAgICAgICk7CiAgICAgIH07CiAgICAgIGdldCBvdmVyZmxvdygpIHsKICAgICAgICBjb25zdCBwcm9wZXJ0eTEzID0gdGhpcy5pc0hvcml6b250YWwgPyAib3ZlcmZsb3cteCIgOiAib3ZlcmZsb3cteSI7CiAgICAgICAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUodGhpcy5yb290RWxlbWVudClbcHJvcGVydHkxM107CiAgICAgIH0KICAgICAgY2hlY2tPdmVyZmxvdygpIHsKICAgICAgICBpZiAoWyJoaWRkZW4iLCAiY2xpcCJdLmluY2x1ZGVzKHRoaXMub3ZlcmZsb3cpKSB7CiAgICAgICAgICB0aGlzLmludGVybmFsU3RvcCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmludGVybmFsU3RhcnQoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgb25UcmFuc2l0aW9uRW5kID0gKGV2ZW50KSA9PiB7CiAgICAgICAgaWYgKGV2ZW50LnByb3BlcnR5TmFtZS5pbmNsdWRlcygib3ZlcmZsb3ciKSkgewogICAgICAgICAgdGhpcy5jaGVja092ZXJmbG93KCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBzZXRTY3JvbGwoc2Nyb2xsKSB7CiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKSB7CiAgICAgICAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5zY3JvbGxUbyh7IGxlZnQ6IHNjcm9sbCwgYmVoYXZpb3I6ICJpbnN0YW50IiB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIuc2Nyb2xsVG8oeyB0b3A6IHNjcm9sbCwgYmVoYXZpb3I6ICJpbnN0YW50IiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgb25DbGljayA9IChldmVudCkgPT4gewogICAgICAgIGNvbnN0IHBhdGgyID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7CiAgICAgICAgY29uc3QgYW5jaG9yRWxlbWVudHMgPSBwYXRoMi5maWx0ZXIoCiAgICAgICAgICAobm9kZTIpID0+IG5vZGUyIGluc3RhbmNlb2YgSFRNTEFuY2hvckVsZW1lbnQgJiYgbm9kZTIuZ2V0QXR0cmlidXRlKCJocmVmIikKICAgICAgICApOwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYW5jaG9ycykgewogICAgICAgICAgY29uc3QgYW5jaG9yID0gYW5jaG9yRWxlbWVudHMuZmluZCgKICAgICAgICAgICAgKG5vZGUyKSA9PiBub2RlMi5nZXRBdHRyaWJ1dGUoImhyZWYiKT8uaW5jbHVkZXMoIiMiKQogICAgICAgICAgKTsKICAgICAgICAgIGlmIChhbmNob3IpIHsKICAgICAgICAgICAgY29uc3QgaHJlZiA9IGFuY2hvci5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICAgICAgICAgICAgaWYgKGhyZWYpIHsKICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdHlwZW9mIHRoaXMub3B0aW9ucy5hbmNob3JzID09PSAib2JqZWN0IiAmJiB0aGlzLm9wdGlvbnMuYW5jaG9ycyA/IHRoaXMub3B0aW9ucy5hbmNob3JzIDogdm9pZCAwOwogICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGAjJHtocmVmLnNwbGl0KCIjIilbMV19YDsKICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKHRhcmdldCwgb3B0aW9ucyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdG9wSW5lcnRpYU9uTmF2aWdhdGUpIHsKICAgICAgICAgIGNvbnN0IGludGVybmFsTGluayA9IGFuY2hvckVsZW1lbnRzLmZpbmQoCiAgICAgICAgICAgIChub2RlMikgPT4gbm9kZTIuaG9zdCA9PT0gd2luZG93LmxvY2F0aW9uLmhvc3QKICAgICAgICAgICk7CiAgICAgICAgICBpZiAoaW50ZXJuYWxMaW5rKSB7CiAgICAgICAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICAgIG9uUG9pbnRlckRvd24gPSAoZXZlbnQpID0+IHsKICAgICAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAxKSB7CiAgICAgICAgICB0aGlzLnJlc2V0KCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBvblZpcnR1YWxTY3JvbGwgPSAoZGF0YSkgPT4gewogICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLnZpcnR1YWxTY3JvbGwgPT09ICJmdW5jdGlvbiIgJiYgdGhpcy5vcHRpb25zLnZpcnR1YWxTY3JvbGwoZGF0YSkgPT09IGZhbHNlKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IHsgZGVsdGFYLCBkZWx0YVksIGV2ZW50IH0gPSBkYXRhOwogICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCJ2aXJ0dWFsLXNjcm9sbCIsIHsgZGVsdGFYLCBkZWx0YVksIGV2ZW50IH0pOwogICAgICAgIGlmIChldmVudC5jdHJsS2V5KSByZXR1cm47CiAgICAgICAgaWYgKGV2ZW50LmxlbmlzU3RvcFByb3BhZ2F0aW9uKSByZXR1cm47CiAgICAgICAgY29uc3QgaXNUb3VjaCA9IGV2ZW50LnR5cGUuaW5jbHVkZXMoInRvdWNoIik7CiAgICAgICAgY29uc3QgaXNXaGVlbCA9IGV2ZW50LnR5cGUuaW5jbHVkZXMoIndoZWVsIik7CiAgICAgICAgdGhpcy5pc1RvdWNoaW5nID0gZXZlbnQudHlwZSA9PT0gInRvdWNoc3RhcnQiIHx8IGV2ZW50LnR5cGUgPT09ICJ0b3VjaG1vdmUiOwogICAgICAgIGNvbnN0IGlzQ2xpY2tPclRhcCA9IGRlbHRhWCA9PT0gMCAmJiBkZWx0YVkgPT09IDA7CiAgICAgICAgY29uc3QgaXNUYXBUb1N0b3AgPSB0aGlzLm9wdGlvbnMuc3luY1RvdWNoICYmIGlzVG91Y2ggJiYgZXZlbnQudHlwZSA9PT0gInRvdWNoc3RhcnQiICYmIGlzQ2xpY2tPclRhcCAmJiAhdGhpcy5pc1N0b3BwZWQgJiYgIXRoaXMuaXNMb2NrZWQ7CiAgICAgICAgaWYgKGlzVGFwVG9TdG9wKSB7CiAgICAgICAgICB0aGlzLnJlc2V0KCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IGlzVW5rbm93bkdlc3R1cmUgPSB0aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uID09PSAidmVydGljYWwiICYmIGRlbHRhWSA9PT0gMCB8fCB0aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uID09PSAiaG9yaXpvbnRhbCIgJiYgZGVsdGFYID09PSAwOwogICAgICAgIGlmIChpc0NsaWNrT3JUYXAgfHwgaXNVbmtub3duR2VzdHVyZSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsZXQgY29tcG9zZWRQYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7CiAgICAgICAgY29tcG9zZWRQYXRoID0gY29tcG9zZWRQYXRoLnNsaWNlKDAsIGNvbXBvc2VkUGF0aC5pbmRleE9mKHRoaXMucm9vdEVsZW1lbnQpKTsKICAgICAgICBjb25zdCBwcmV2ZW50ID0gdGhpcy5vcHRpb25zLnByZXZlbnQ7CiAgICAgICAgaWYgKCEhY29tcG9zZWRQYXRoLmZpbmQoCiAgICAgICAgICAobm9kZTIpID0+IG5vZGUyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgKHR5cGVvZiBwcmV2ZW50ID09PSAiZnVuY3Rpb24iICYmIHByZXZlbnQ/Lihub2RlMikgfHwgbm9kZTIuaGFzQXR0cmlidXRlPy4oImRhdGEtbGVuaXMtcHJldmVudCIpIHx8IGlzVG91Y2ggJiYgbm9kZTIuaGFzQXR0cmlidXRlPy4oImRhdGEtbGVuaXMtcHJldmVudC10b3VjaCIpIHx8IGlzV2hlZWwgJiYgbm9kZTIuaGFzQXR0cmlidXRlPy4oImRhdGEtbGVuaXMtcHJldmVudC13aGVlbCIpIHx8IHRoaXMub3B0aW9ucy5hbGxvd05lc3RlZFNjcm9sbCAmJiB0aGlzLmNoZWNrTmVzdGVkU2Nyb2xsKG5vZGUyLCB7IGRlbHRhWCwgZGVsdGFZIH0pKQogICAgICAgICkpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkIHx8IHRoaXMuaXNMb2NrZWQpIHsKICAgICAgICAgIGlmIChldmVudC5jYW5jZWxhYmxlKSB7CiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IGlzU21vb3RoID0gdGhpcy5vcHRpb25zLnN5bmNUb3VjaCAmJiBpc1RvdWNoIHx8IHRoaXMub3B0aW9ucy5zbW9vdGhXaGVlbCAmJiBpc1doZWVsOwogICAgICAgIGlmICghaXNTbW9vdGgpIHsKICAgICAgICAgIHRoaXMuaXNTY3JvbGxpbmcgPSAibmF0aXZlIjsKICAgICAgICAgIHRoaXMuYW5pbWF0ZS5zdG9wKCk7CiAgICAgICAgICBldmVudC5sZW5pc1N0b3BQcm9wYWdhdGlvbiA9IHRydWU7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGxldCBkZWx0YSA9IGRlbHRhWTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmdlc3R1cmVPcmllbnRhdGlvbiA9PT0gImJvdGgiKSB7CiAgICAgICAgICBkZWx0YSA9IE1hdGguYWJzKGRlbHRhWSkgPiBNYXRoLmFicyhkZWx0YVgpID8gZGVsdGFZIDogZGVsdGFYOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmdlc3R1cmVPcmllbnRhdGlvbiA9PT0gImhvcml6b250YWwiKSB7CiAgICAgICAgICBkZWx0YSA9IGRlbHRhWDsKICAgICAgICB9CiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMub3ZlcnNjcm9sbCB8fCB0aGlzLm9wdGlvbnMuaW5maW5pdGUgfHwgdGhpcy5vcHRpb25zLndyYXBwZXIgIT09IHdpbmRvdyAmJiB0aGlzLmxpbWl0ID4gMCAmJiAodGhpcy5hbmltYXRlZFNjcm9sbCA+IDAgJiYgdGhpcy5hbmltYXRlZFNjcm9sbCA8IHRoaXMubGltaXQgfHwgdGhpcy5hbmltYXRlZFNjcm9sbCA9PT0gMCAmJiBkZWx0YVkgPiAwIHx8IHRoaXMuYW5pbWF0ZWRTY3JvbGwgPT09IHRoaXMubGltaXQgJiYgZGVsdGFZIDwgMCkpIHsKICAgICAgICAgIGV2ZW50LmxlbmlzU3RvcFByb3BhZ2F0aW9uID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGV2ZW50LmNhbmNlbGFibGUpIHsKICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGlzU3luY1RvdWNoID0gaXNUb3VjaCAmJiB0aGlzLm9wdGlvbnMuc3luY1RvdWNoOwogICAgICAgIGNvbnN0IGlzVG91Y2hFbmQgPSBpc1RvdWNoICYmIGV2ZW50LnR5cGUgPT09ICJ0b3VjaGVuZCI7CiAgICAgICAgY29uc3QgaGFzVG91Y2hJbmVydGlhID0gaXNUb3VjaEVuZDsKICAgICAgICBpZiAoaGFzVG91Y2hJbmVydGlhKSB7CiAgICAgICAgICBkZWx0YSA9IE1hdGguc2lnbih0aGlzLnZlbG9jaXR5KSAqIE1hdGgucG93KE1hdGguYWJzKHRoaXMudmVsb2NpdHkpLCB0aGlzLm9wdGlvbnMudG91Y2hJbmVydGlhRXhwb25lbnQpOwogICAgICAgIH0KICAgICAgICB0aGlzLnNjcm9sbFRvKHRoaXMudGFyZ2V0U2Nyb2xsICsgZGVsdGEsIHsKICAgICAgICAgIHByb2dyYW1tYXRpYzogZmFsc2UsCiAgICAgICAgICAuLi5pc1N5bmNUb3VjaCA/IHsKICAgICAgICAgICAgbGVycDogaGFzVG91Y2hJbmVydGlhID8gdGhpcy5vcHRpb25zLnN5bmNUb3VjaExlcnAgOiAxCiAgICAgICAgICB9IDogewogICAgICAgICAgICBsZXJwOiB0aGlzLm9wdGlvbnMubGVycCwKICAgICAgICAgICAgZHVyYXRpb246IHRoaXMub3B0aW9ucy5kdXJhdGlvbiwKICAgICAgICAgICAgZWFzaW5nOiB0aGlzLm9wdGlvbnMuZWFzaW5nCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIC8qKgogICAgICAgKiBGb3JjZSBsZW5pcyB0byByZWNhbGN1bGF0ZSB0aGUgZGltZW5zaW9ucwogICAgICAgKi8KICAgICAgcmVzaXplKCkgewogICAgICAgIHRoaXMuZGltZW5zaW9ucy5yZXNpemUoKTsKICAgICAgICB0aGlzLmFuaW1hdGVkU2Nyb2xsID0gdGhpcy50YXJnZXRTY3JvbGwgPSB0aGlzLmFjdHVhbFNjcm9sbDsKICAgICAgICB0aGlzLmVtaXQoKTsKICAgICAgfQogICAgICBlbWl0KCkgewogICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCJzY3JvbGwiLCB0aGlzKTsKICAgICAgfQogICAgICBvbk5hdGl2ZVNjcm9sbCA9ICgpID0+IHsKICAgICAgICBpZiAodGhpcy5fcmVzZXRWZWxvY2l0eVRpbWVvdXQgIT09IG51bGwpIHsKICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNldFZlbG9jaXR5VGltZW91dCk7CiAgICAgICAgICB0aGlzLl9yZXNldFZlbG9jaXR5VGltZW91dCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLl9wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50KSB7CiAgICAgICAgICB0aGlzLl9wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50ID0gZmFsc2U7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsaW5nID09PSBmYWxzZSB8fCB0aGlzLmlzU2Nyb2xsaW5nID09PSAibmF0aXZlIikgewogICAgICAgICAgY29uc3QgbGFzdFNjcm9sbCA9IHRoaXMuYW5pbWF0ZWRTY3JvbGw7CiAgICAgICAgICB0aGlzLmFuaW1hdGVkU2Nyb2xsID0gdGhpcy50YXJnZXRTY3JvbGwgPSB0aGlzLmFjdHVhbFNjcm9sbDsKICAgICAgICAgIHRoaXMubGFzdFZlbG9jaXR5ID0gdGhpcy52ZWxvY2l0eTsKICAgICAgICAgIHRoaXMudmVsb2NpdHkgPSB0aGlzLmFuaW1hdGVkU2Nyb2xsIC0gbGFzdFNjcm9sbDsKICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gTWF0aC5zaWduKAogICAgICAgICAgICB0aGlzLmFuaW1hdGVkU2Nyb2xsIC0gbGFzdFNjcm9sbAogICAgICAgICAgKTsKICAgICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHsKICAgICAgICAgICAgdGhpcy5pc1Njcm9sbGluZyA9ICJuYXRpdmUiOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5lbWl0KCk7CiAgICAgICAgICBpZiAodGhpcy52ZWxvY2l0eSAhPT0gMCkgewogICAgICAgICAgICB0aGlzLl9yZXNldFZlbG9jaXR5VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIHRoaXMubGFzdFZlbG9jaXR5ID0gdGhpcy52ZWxvY2l0eTsKICAgICAgICAgICAgICB0aGlzLnZlbG9jaXR5ID0gMDsKICAgICAgICAgICAgICB0aGlzLmlzU2Nyb2xsaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgdGhpcy5lbWl0KCk7CiAgICAgICAgICAgIH0sIDQwMCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgICByZXNldCgpIHsKICAgICAgICB0aGlzLmlzTG9ja2VkID0gZmFsc2U7CiAgICAgICAgdGhpcy5pc1Njcm9sbGluZyA9IGZhbHNlOwogICAgICAgIHRoaXMuYW5pbWF0ZWRTY3JvbGwgPSB0aGlzLnRhcmdldFNjcm9sbCA9IHRoaXMuYWN0dWFsU2Nyb2xsOwogICAgICAgIHRoaXMubGFzdFZlbG9jaXR5ID0gdGhpcy52ZWxvY2l0eSA9IDA7CiAgICAgICAgdGhpcy5hbmltYXRlLnN0b3AoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU3RhcnQgbGVuaXMgc2Nyb2xsIGFmdGVyIGl0IGhhcyBiZWVuIHN0b3BwZWQKICAgICAgICovCiAgICAgIHN0YXJ0KCkgewogICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHJldHVybjsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Ub2dnbGUpIHsKICAgICAgICAgIHRoaXMucm9vdEVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoIm92ZXJmbG93Iik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuaW50ZXJuYWxTdGFydCgpOwogICAgICB9CiAgICAgIGludGVybmFsU3RhcnQoKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzU3RvcHBlZCkgcmV0dXJuOwogICAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IGZhbHNlOwogICAgICAgIHRoaXMuZW1pdCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTdG9wIGxlbmlzIHNjcm9sbAogICAgICAgKi8KICAgICAgc3RvcCgpIHsKICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHJldHVybjsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Ub2dnbGUpIHsKICAgICAgICAgIHRoaXMucm9vdEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoIm92ZXJmbG93IiwgImNsaXAiKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5pbnRlcm5hbFN0b3AoKTsKICAgICAgfQogICAgICBpbnRlcm5hbFN0b3AoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSByZXR1cm47CiAgICAgICAgdGhpcy5yZXNldCgpOwogICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTsKICAgICAgICB0aGlzLmVtaXQoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVxdWVzdEFuaW1hdGlvbkZyYW1lIGZvciBsZW5pcwogICAgICAgKgogICAgICAgKiBAcGFyYW0gdGltZSBUaGUgdGltZSBpbiBtcyBmcm9tIGFuIGV4dGVybmFsIGNsb2NrIGxpa2UgYHJlcXVlc3RBbmltYXRpb25GcmFtZWAgb3IgVGVtcHVzCiAgICAgICAqLwogICAgICByYWYgPSAodGltZSkgPT4gewogICAgICAgIGNvbnN0IGRlbHRhVGltZSA9IHRpbWUgLSAodGhpcy50aW1lIHx8IHRpbWUpOwogICAgICAgIHRoaXMudGltZSA9IHRpbWU7CiAgICAgICAgdGhpcy5hbmltYXRlLmFkdmFuY2UoZGVsdGFUaW1lICogMWUtMyk7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUmFmKSB7CiAgICAgICAgICB0aGlzLl9yYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnJhZik7CiAgICAgICAgfQogICAgICB9OwogICAgICAvKioKICAgICAgICogU2Nyb2xsIHRvIGEgdGFyZ2V0IHZhbHVlCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCB2YWx1ZSB0byBzY3JvbGwgdG8KICAgICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSBzY3JvbGwKICAgICAgICoKICAgICAgICogQGV4YW1wbGUKICAgICAgICogbGVuaXMuc2Nyb2xsVG8oMTAwLCB7CiAgICAgICAqICAgb2Zmc2V0OiAxMDAsCiAgICAgICAqICAgZHVyYXRpb246IDEsCiAgICAgICAqICAgZWFzaW5nOiAodCkgPT4gMSAtIE1hdGguY29zKCh0ICogTWF0aC5QSSkgLyAyKSwKICAgICAgICogICBsZXJwOiAwLjEsCiAgICAgICAqICAgb25TdGFydDogKCkgPT4gewogICAgICAgKiAgICAgY29uc29sZS5sb2coJ29uU3RhcnQnKQogICAgICAgKiAgIH0sCiAgICAgICAqICAgb25Db21wbGV0ZTogKCkgPT4gewogICAgICAgKiAgICAgY29uc29sZS5sb2coJ29uQ29tcGxldGUnKQogICAgICAgKiAgIH0sCiAgICAgICAqIH0pCiAgICAgICAqLwogICAgICBzY3JvbGxUbyh0YXJnZXQsIHsKICAgICAgICBvZmZzZXQgPSAwLAogICAgICAgIGltbWVkaWF0ZSA9IGZhbHNlLAogICAgICAgIGxvY2sgPSBmYWxzZSwKICAgICAgICBwcm9ncmFtbWF0aWMgPSB0cnVlLAogICAgICAgIC8vIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhlIGNsYXNzCiAgICAgICAgbGVycDogbGVycDIgPSBwcm9ncmFtbWF0aWMgPyB0aGlzLm9wdGlvbnMubGVycCA6IHZvaWQgMCwKICAgICAgICBkdXJhdGlvbiA9IHByb2dyYW1tYXRpYyA/IHRoaXMub3B0aW9ucy5kdXJhdGlvbiA6IHZvaWQgMCwKICAgICAgICBlYXNpbmcgPSBwcm9ncmFtbWF0aWMgPyB0aGlzLm9wdGlvbnMuZWFzaW5nIDogdm9pZCAwLAogICAgICAgIG9uU3RhcnQsCiAgICAgICAgb25Db21wbGV0ZSwKICAgICAgICBmb3JjZSA9IGZhbHNlLAogICAgICAgIC8vIHNjcm9sbCBldmVuIGlmIHN0b3BwZWQKICAgICAgICB1c2VyRGF0YQogICAgICB9ID0ge30pIHsKICAgICAgICBpZiAoKHRoaXMuaXNTdG9wcGVkIHx8IHRoaXMuaXNMb2NrZWQpICYmICFmb3JjZSkgcmV0dXJuOwogICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAic3RyaW5nIiAmJiBbInRvcCIsICJsZWZ0IiwgInN0YXJ0IiwgIiMiXS5pbmNsdWRlcyh0YXJnZXQpKSB7CiAgICAgICAgICB0YXJnZXQgPSAwOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRhcmdldCA9PT0gInN0cmluZyIgJiYgWyJib3R0b20iLCAicmlnaHQiLCAiZW5kIl0uaW5jbHVkZXModGFyZ2V0KSkgewogICAgICAgICAgdGFyZ2V0ID0gdGhpcy5saW1pdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGV0IG5vZGUyOwogICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIG5vZGUyID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpOwogICAgICAgICAgICBpZiAoIW5vZGUyKSB7CiAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gIiN0b3AiKSB7CiAgICAgICAgICAgICAgICB0YXJnZXQgPSAwOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oIkxlbmlzOiBUYXJnZXQgbm90IGZvdW5kIiwgdGFyZ2V0KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgdGFyZ2V0Py5ub2RlVHlwZSkgewogICAgICAgICAgICBub2RlMiA9IHRhcmdldDsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChub2RlMikgewogICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLndyYXBwZXIgIT09IHdpbmRvdykgewogICAgICAgICAgICAgIGNvbnN0IHdyYXBwZXJSZWN0ID0gdGhpcy5yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgICBvZmZzZXQgLT0gdGhpcy5pc0hvcml6b250YWwgPyB3cmFwcGVyUmVjdC5sZWZ0IDogd3JhcHBlclJlY3QudG9wOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBub2RlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgdGFyZ2V0ID0gKHRoaXMuaXNIb3Jpem9udGFsID8gcmVjdC5sZWZ0IDogcmVjdC50b3ApICsgdGhpcy5hbmltYXRlZFNjcm9sbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICJudW1iZXIiKSByZXR1cm47CiAgICAgICAgdGFyZ2V0ICs9IG9mZnNldDsKICAgICAgICB0YXJnZXQgPSBNYXRoLnJvdW5kKHRhcmdldCk7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbmZpbml0ZSkgewogICAgICAgICAgaWYgKHByb2dyYW1tYXRpYykgewogICAgICAgICAgICB0aGlzLnRhcmdldFNjcm9sbCA9IHRoaXMuYW5pbWF0ZWRTY3JvbGwgPSB0aGlzLnNjcm9sbDsKICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSB0YXJnZXQgLSB0aGlzLmFuaW1hdGVkU2Nyb2xsOwogICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiB0aGlzLmxpbWl0IC8gMikgewogICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldCAtIHRoaXMubGltaXQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlzdGFuY2UgPCAtdGhpcy5saW1pdCAvIDIpIHsKICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQgKyB0aGlzLmxpbWl0OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRhcmdldCA9IGNsYW1wMigwLCB0YXJnZXQsIHRoaXMubGltaXQpOwogICAgICAgIH0KICAgICAgICBpZiAodGFyZ2V0ID09PSB0aGlzLnRhcmdldFNjcm9sbCkgewogICAgICAgICAgb25TdGFydD8uKHRoaXMpOwogICAgICAgICAgb25Db21wbGV0ZT8uKHRoaXMpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLnVzZXJEYXRhID0gdXNlckRhdGEgPz8ge307CiAgICAgICAgaWYgKGltbWVkaWF0ZSkgewogICAgICAgICAgdGhpcy5hbmltYXRlZFNjcm9sbCA9IHRoaXMudGFyZ2V0U2Nyb2xsID0gdGFyZ2V0OwogICAgICAgICAgdGhpcy5zZXRTY3JvbGwodGhpcy5zY3JvbGwpOwogICAgICAgICAgdGhpcy5yZXNldCgpOwogICAgICAgICAgdGhpcy5wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50KCk7CiAgICAgICAgICB0aGlzLmVtaXQoKTsKICAgICAgICAgIG9uQ29tcGxldGU/Lih0aGlzKTsKICAgICAgICAgIHRoaXMudXNlckRhdGEgPSB7fTsKICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTY3JvbGxlbmRFdmVudCgpOwogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICghcHJvZ3JhbW1hdGljKSB7CiAgICAgICAgICB0aGlzLnRhcmdldFNjcm9sbCA9IHRhcmdldDsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBkdXJhdGlvbiA9PT0gIm51bWJlciIgJiYgdHlwZW9mIGVhc2luZyAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgZWFzaW5nID0gZGVmYXVsdEVhc2luZzsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlYXNpbmcgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIGR1cmF0aW9uICE9PSAibnVtYmVyIikgewogICAgICAgICAgZHVyYXRpb24gPSAxOwogICAgICAgIH0KICAgICAgICB0aGlzLmFuaW1hdGUuZnJvbVRvKHRoaXMuYW5pbWF0ZWRTY3JvbGwsIHRhcmdldCwgewogICAgICAgICAgZHVyYXRpb24sCiAgICAgICAgICBlYXNpbmcsCiAgICAgICAgICBsZXJwOiBsZXJwMiwKICAgICAgICAgIG9uU3RhcnQ6ICgpID0+IHsKICAgICAgICAgICAgaWYgKGxvY2spIHRoaXMuaXNMb2NrZWQgPSB0cnVlOwogICAgICAgICAgICB0aGlzLmlzU2Nyb2xsaW5nID0gInNtb290aCI7CiAgICAgICAgICAgIG9uU3RhcnQ/Lih0aGlzKTsKICAgICAgICAgIH0sCiAgICAgICAgICBvblVwZGF0ZTogKHZhbHVlMiwgY29tcGxldGVkKSA9PiB7CiAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxpbmcgPSAic21vb3RoIjsKICAgICAgICAgICAgdGhpcy5sYXN0VmVsb2NpdHkgPSB0aGlzLnZlbG9jaXR5OwogICAgICAgICAgICB0aGlzLnZlbG9jaXR5ID0gdmFsdWUyIC0gdGhpcy5hbmltYXRlZFNjcm9sbDsKICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBNYXRoLnNpZ24odGhpcy52ZWxvY2l0eSk7CiAgICAgICAgICAgIHRoaXMuYW5pbWF0ZWRTY3JvbGwgPSB2YWx1ZTI7CiAgICAgICAgICAgIHRoaXMuc2V0U2Nyb2xsKHRoaXMuc2Nyb2xsKTsKICAgICAgICAgICAgaWYgKHByb2dyYW1tYXRpYykgewogICAgICAgICAgICAgIHRoaXMudGFyZ2V0U2Nyb2xsID0gdmFsdWUyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghY29tcGxldGVkKSB0aGlzLmVtaXQoKTsKICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCkgewogICAgICAgICAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgICAgICAgICB0aGlzLmVtaXQoKTsKICAgICAgICAgICAgICBvbkNvbXBsZXRlPy4odGhpcyk7CiAgICAgICAgICAgICAgdGhpcy51c2VyRGF0YSA9IHt9OwogICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoU2Nyb2xsZW5kRXZlbnQoKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB0aGlzLnByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQoKSB7CiAgICAgICAgdGhpcy5fcHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudCA9IHRydWU7CiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgIHRoaXMuX3ByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQgPSBmYWxzZTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBjaGVja05lc3RlZFNjcm9sbChub2RlMiwgeyBkZWx0YVgsIGRlbHRhWSB9KSB7CiAgICAgICAgY29uc3QgdGltZSA9IERhdGUubm93KCk7CiAgICAgICAgY29uc3QgY2FjaGUgPSBub2RlMi5fbGVuaXMgPz89IHt9OwogICAgICAgIGxldCBoYXNPdmVyZmxvd1gsIGhhc092ZXJmbG93WSwgaXNTY3JvbGxhYmxlWCwgaXNTY3JvbGxhYmxlWSwgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCwgY2xpZW50V2lkdGgsIGNsaWVudEhlaWdodDsKICAgICAgICBjb25zdCBnZXN0dXJlT3JpZW50YXRpb24gPSB0aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uOwogICAgICAgIGlmICh0aW1lIC0gKGNhY2hlLnRpbWUgPz8gMCkgPiAyZTMpIHsKICAgICAgICAgIGNhY2hlLnRpbWUgPSBEYXRlLm5vdygpOwogICAgICAgICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUyKTsKICAgICAgICAgIGNhY2hlLmNvbXB1dGVkU3R5bGUgPSBjb21wdXRlZFN0eWxlOwogICAgICAgICAgY29uc3Qgb3ZlcmZsb3dYU3RyaW5nID0gY29tcHV0ZWRTdHlsZS5vdmVyZmxvd1g7CiAgICAgICAgICBjb25zdCBvdmVyZmxvd1lTdHJpbmcgPSBjb21wdXRlZFN0eWxlLm92ZXJmbG93WTsKICAgICAgICAgIGhhc092ZXJmbG93WCA9IFsiYXV0byIsICJvdmVybGF5IiwgInNjcm9sbCJdLmluY2x1ZGVzKG92ZXJmbG93WFN0cmluZyk7CiAgICAgICAgICBoYXNPdmVyZmxvd1kgPSBbImF1dG8iLCAib3ZlcmxheSIsICJzY3JvbGwiXS5pbmNsdWRlcyhvdmVyZmxvd1lTdHJpbmcpOwogICAgICAgICAgY2FjaGUuaGFzT3ZlcmZsb3dYID0gaGFzT3ZlcmZsb3dYOwogICAgICAgICAgY2FjaGUuaGFzT3ZlcmZsb3dZID0gaGFzT3ZlcmZsb3dZOwogICAgICAgICAgaWYgKCFoYXNPdmVyZmxvd1ggJiYgIWhhc092ZXJmbG93WSkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgaWYgKGdlc3R1cmVPcmllbnRhdGlvbiA9PT0gInZlcnRpY2FsIiAmJiAhaGFzT3ZlcmZsb3dZKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICBpZiAoZ2VzdHVyZU9yaWVudGF0aW9uID09PSAiaG9yaXpvbnRhbCIgJiYgIWhhc092ZXJmbG93WCkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgc2Nyb2xsV2lkdGggPSBub2RlMi5zY3JvbGxXaWR0aDsKICAgICAgICAgIHNjcm9sbEhlaWdodCA9IG5vZGUyLnNjcm9sbEhlaWdodDsKICAgICAgICAgIGNsaWVudFdpZHRoID0gbm9kZTIuY2xpZW50V2lkdGg7CiAgICAgICAgICBjbGllbnRIZWlnaHQgPSBub2RlMi5jbGllbnRIZWlnaHQ7CiAgICAgICAgICBpc1Njcm9sbGFibGVYID0gc2Nyb2xsV2lkdGggPiBjbGllbnRXaWR0aDsKICAgICAgICAgIGlzU2Nyb2xsYWJsZVkgPSBzY3JvbGxIZWlnaHQgPiBjbGllbnRIZWlnaHQ7CiAgICAgICAgICBjYWNoZS5pc1Njcm9sbGFibGVYID0gaXNTY3JvbGxhYmxlWDsKICAgICAgICAgIGNhY2hlLmlzU2Nyb2xsYWJsZVkgPSBpc1Njcm9sbGFibGVZOwogICAgICAgICAgY2FjaGUuc2Nyb2xsV2lkdGggPSBzY3JvbGxXaWR0aDsKICAgICAgICAgIGNhY2hlLnNjcm9sbEhlaWdodCA9IHNjcm9sbEhlaWdodDsKICAgICAgICAgIGNhY2hlLmNsaWVudFdpZHRoID0gY2xpZW50V2lkdGg7CiAgICAgICAgICBjYWNoZS5jbGllbnRIZWlnaHQgPSBjbGllbnRIZWlnaHQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlzU2Nyb2xsYWJsZVggPSBjYWNoZS5pc1Njcm9sbGFibGVYOwogICAgICAgICAgaXNTY3JvbGxhYmxlWSA9IGNhY2hlLmlzU2Nyb2xsYWJsZVk7CiAgICAgICAgICBoYXNPdmVyZmxvd1ggPSBjYWNoZS5oYXNPdmVyZmxvd1g7CiAgICAgICAgICBoYXNPdmVyZmxvd1kgPSBjYWNoZS5oYXNPdmVyZmxvd1k7CiAgICAgICAgICBzY3JvbGxXaWR0aCA9IGNhY2hlLnNjcm9sbFdpZHRoOwogICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gY2FjaGUuc2Nyb2xsSGVpZ2h0OwogICAgICAgICAgY2xpZW50V2lkdGggPSBjYWNoZS5jbGllbnRXaWR0aDsKICAgICAgICAgIGNsaWVudEhlaWdodCA9IGNhY2hlLmNsaWVudEhlaWdodDsKICAgICAgICB9CiAgICAgICAgaWYgKCFoYXNPdmVyZmxvd1ggJiYgIWhhc092ZXJmbG93WSB8fCAhaXNTY3JvbGxhYmxlWCAmJiAhaXNTY3JvbGxhYmxlWSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoZ2VzdHVyZU9yaWVudGF0aW9uID09PSAidmVydGljYWwiICYmICghaGFzT3ZlcmZsb3dZIHx8ICFpc1Njcm9sbGFibGVZKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoZ2VzdHVyZU9yaWVudGF0aW9uID09PSAiaG9yaXpvbnRhbCIgJiYgKCFoYXNPdmVyZmxvd1ggfHwgIWlzU2Nyb2xsYWJsZVgpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGxldCBvcmllbnRhdGlvbjsKICAgICAgICBpZiAoZ2VzdHVyZU9yaWVudGF0aW9uID09PSAiaG9yaXpvbnRhbCIpIHsKICAgICAgICAgIG9yaWVudGF0aW9uID0gIngiOwogICAgICAgIH0gZWxzZSBpZiAoZ2VzdHVyZU9yaWVudGF0aW9uID09PSAidmVydGljYWwiKSB7CiAgICAgICAgICBvcmllbnRhdGlvbiA9ICJ5IjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgaXNTY3JvbGxpbmdYID0gZGVsdGFYICE9PSAwOwogICAgICAgICAgY29uc3QgaXNTY3JvbGxpbmdZID0gZGVsdGFZICE9PSAwOwogICAgICAgICAgaWYgKGlzU2Nyb2xsaW5nWCAmJiBoYXNPdmVyZmxvd1ggJiYgaXNTY3JvbGxhYmxlWCkgewogICAgICAgICAgICBvcmllbnRhdGlvbiA9ICJ4IjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChpc1Njcm9sbGluZ1kgJiYgaGFzT3ZlcmZsb3dZICYmIGlzU2Nyb2xsYWJsZVkpIHsKICAgICAgICAgICAgb3JpZW50YXRpb24gPSAieSI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghb3JpZW50YXRpb24pIHJldHVybiBmYWxzZTsKICAgICAgICBsZXQgc2Nyb2xsLCBtYXhTY3JvbGwsIGRlbHRhLCBoYXNPdmVyZmxvdywgaXNTY3JvbGxhYmxlOwogICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gIngiKSB7CiAgICAgICAgICBzY3JvbGwgPSBub2RlMi5zY3JvbGxMZWZ0OwogICAgICAgICAgbWF4U2Nyb2xsID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aDsKICAgICAgICAgIGRlbHRhID0gZGVsdGFYOwogICAgICAgICAgaGFzT3ZlcmZsb3cgPSBoYXNPdmVyZmxvd1g7CiAgICAgICAgICBpc1Njcm9sbGFibGUgPSBpc1Njcm9sbGFibGVYOwogICAgICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb24gPT09ICJ5IikgewogICAgICAgICAgc2Nyb2xsID0gbm9kZTIuc2Nyb2xsVG9wOwogICAgICAgICAgbWF4U2Nyb2xsID0gc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0OwogICAgICAgICAgZGVsdGEgPSBkZWx0YVk7CiAgICAgICAgICBoYXNPdmVyZmxvdyA9IGhhc092ZXJmbG93WTsKICAgICAgICAgIGlzU2Nyb2xsYWJsZSA9IGlzU2Nyb2xsYWJsZVk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgY29uc3Qgd2lsbFNjcm9sbCA9IGRlbHRhID4gMCA/IHNjcm9sbCA8IG1heFNjcm9sbCA6IHNjcm9sbCA+IDA7CiAgICAgICAgcmV0dXJuIHdpbGxTY3JvbGwgJiYgaGFzT3ZlcmZsb3cgJiYgaXNTY3JvbGxhYmxlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBUaGUgcm9vdCBlbGVtZW50IG9uIHdoaWNoIGxlbmlzIGlzIGluc3RhbmNlZAogICAgICAgKi8KICAgICAgZ2V0IHJvb3RFbGVtZW50KCkgewogICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JhcHBlciA9PT0gd2luZG93ID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogdGhpcy5vcHRpb25zLndyYXBwZXI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSBsaW1pdCB3aGljaCBpcyB0aGUgbWF4aW11bSBzY3JvbGwgdmFsdWUKICAgICAgICovCiAgICAgIGdldCBsaW1pdCgpIHsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLm5haXZlRGltZW5zaW9ucykgewogICAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3RFbGVtZW50LnNjcm9sbFdpZHRoIC0gdGhpcy5yb290RWxlbWVudC5jbGllbnRXaWR0aDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3RFbGVtZW50LnNjcm9sbEhlaWdodCAtIHRoaXMucm9vdEVsZW1lbnQuY2xpZW50SGVpZ2h0OwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5kaW1lbnNpb25zLmxpbWl0W3RoaXMuaXNIb3Jpem9udGFsID8gIngiIDogInkiXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBzY3JvbGwgaXMgaG9yaXpvbnRhbAogICAgICAgKi8KICAgICAgZ2V0IGlzSG9yaXpvbnRhbCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9yaWVudGF0aW9uID09PSAiaG9yaXpvbnRhbCI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSBhY3R1YWwgc2Nyb2xsIHZhbHVlCiAgICAgICAqLwogICAgICBnZXQgYWN0dWFsU2Nyb2xsKCkgewogICAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLm9wdGlvbnMud3JhcHBlcjsKICAgICAgICByZXR1cm4gdGhpcy5pc0hvcml6b250YWwgPyB3cmFwcGVyLnNjcm9sbFggPz8gd3JhcHBlci5zY3JvbGxMZWZ0IDogd3JhcHBlci5zY3JvbGxZID8/IHdyYXBwZXIuc2Nyb2xsVG9wOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBUaGUgY3VycmVudCBzY3JvbGwgdmFsdWUKICAgICAgICovCiAgICAgIGdldCBzY3JvbGwoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5pbmZpbml0ZSA/IG1vZHVsbyh0aGlzLmFuaW1hdGVkU2Nyb2xsLCB0aGlzLmxpbWl0KSA6IHRoaXMuYW5pbWF0ZWRTY3JvbGw7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSBwcm9ncmVzcyBvZiB0aGUgc2Nyb2xsIHJlbGF0aXZlIHRvIHRoZSBsaW1pdAogICAgICAgKi8KICAgICAgZ2V0IHByb2dyZXNzKCkgewogICAgICAgIHJldHVybiB0aGlzLmxpbWl0ID09PSAwID8gMSA6IHRoaXMuc2Nyb2xsIC8gdGhpcy5saW1pdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3VycmVudCBzY3JvbGwgc3RhdGUKICAgICAgICovCiAgICAgIGdldCBpc1Njcm9sbGluZygpIHsKICAgICAgICByZXR1cm4gdGhpcy5faXNTY3JvbGxpbmc7CiAgICAgIH0KICAgICAgc2V0IGlzU2Nyb2xsaW5nKHZhbHVlMikgewogICAgICAgIGlmICh0aGlzLl9pc1Njcm9sbGluZyAhPT0gdmFsdWUyKSB7CiAgICAgICAgICB0aGlzLl9pc1Njcm9sbGluZyA9IHZhbHVlMjsKICAgICAgICAgIHRoaXMudXBkYXRlQ2xhc3NOYW1lKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiBsZW5pcyBpcyBzdG9wcGVkCiAgICAgICAqLwogICAgICBnZXQgaXNTdG9wcGVkKCkgewogICAgICAgIHJldHVybiB0aGlzLl9pc1N0b3BwZWQ7CiAgICAgIH0KICAgICAgc2V0IGlzU3RvcHBlZCh2YWx1ZTIpIHsKICAgICAgICBpZiAodGhpcy5faXNTdG9wcGVkICE9PSB2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuX2lzU3RvcHBlZCA9IHZhbHVlMjsKICAgICAgICAgIHRoaXMudXBkYXRlQ2xhc3NOYW1lKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiBsZW5pcyBpcyBsb2NrZWQKICAgICAgICovCiAgICAgIGdldCBpc0xvY2tlZCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5faXNMb2NrZWQ7CiAgICAgIH0KICAgICAgc2V0IGlzTG9ja2VkKHZhbHVlMikgewogICAgICAgIGlmICh0aGlzLl9pc0xvY2tlZCAhPT0gdmFsdWUyKSB7CiAgICAgICAgICB0aGlzLl9pc0xvY2tlZCA9IHZhbHVlMjsKICAgICAgICAgIHRoaXMudXBkYXRlQ2xhc3NOYW1lKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiBsZW5pcyBpcyBzbW9vdGggc2Nyb2xsaW5nCiAgICAgICAqLwogICAgICBnZXQgaXNTbW9vdGgoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaXNTY3JvbGxpbmcgPT09ICJzbW9vdGgiOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBUaGUgY2xhc3MgbmFtZSBhcHBsaWVkIHRvIHRoZSB3cmFwcGVyIGVsZW1lbnQKICAgICAgICovCiAgICAgIGdldCBjbGFzc05hbWUoKSB7CiAgICAgICAgbGV0IGNsYXNzTmFtZSA9ICJsZW5pcyI7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvVG9nZ2xlKSBjbGFzc05hbWUgKz0gIiBsZW5pcy1hdXRvVG9nZ2xlIjsKICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIGNsYXNzTmFtZSArPSAiIGxlbmlzLXN0b3BwZWQiOwogICAgICAgIGlmICh0aGlzLmlzTG9ja2VkKSBjbGFzc05hbWUgKz0gIiBsZW5pcy1sb2NrZWQiOwogICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsaW5nKSBjbGFzc05hbWUgKz0gIiBsZW5pcy1zY3JvbGxpbmciOwogICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsaW5nID09PSAic21vb3RoIikgY2xhc3NOYW1lICs9ICIgbGVuaXMtc21vb3RoIjsKICAgICAgICByZXR1cm4gY2xhc3NOYW1lOwogICAgICB9CiAgICAgIHVwZGF0ZUNsYXNzTmFtZSgpIHsKICAgICAgICB0aGlzLmNsZWFuVXBDbGFzc05hbWUoKTsKICAgICAgICB0aGlzLnJvb3RFbGVtZW50LmNsYXNzTmFtZSA9IGAke3RoaXMucm9vdEVsZW1lbnQuY2xhc3NOYW1lfSAke3RoaXMuY2xhc3NOYW1lfWAudHJpbSgpOwogICAgICB9CiAgICAgIGNsZWFuVXBDbGFzc05hbWUoKSB7CiAgICAgICAgdGhpcy5yb290RWxlbWVudC5jbGFzc05hbWUgPSB0aGlzLnJvb3RFbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKC9sZW5pcygtXHcrKT8vZywgIiIpLnRyaW0oKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N3ZWV0LXNjcm9sbEA0LjAuMC9ub2RlX21vZHVsZXMvc3dlZXQtc2Nyb2xsL3N3ZWV0LXNjcm9sbC5qcwp2YXIgcmVxdWlyZV9zd2VldF9zY3JvbGwgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N3ZWV0LXNjcm9sbEA0LjAuMC9ub2RlX21vZHVsZXMvc3dlZXQtc2Nyb2xsL3N3ZWV0LXNjcm9sbC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAoZnVuY3Rpb24oZ2xvYmFsMiwgZmFjdG9yeSkgewogICAgICB0eXBlb2YgZXhwb3J0cyA9PT0gIm9iamVjdCIgJiYgdHlwZW9mIG1vZHVsZSAhPT0gInVuZGVmaW5lZCIgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6IHR5cGVvZiBkZWZpbmUgPT09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6IChnbG9iYWwyID0gZ2xvYmFsMiB8fCBzZWxmLCBnbG9iYWwyLlN3ZWV0U2Nyb2xsID0gZmFjdG9yeSgpKTsKICAgIH0pKGV4cG9ydHMsIGZ1bmN0aW9uKCkgewogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBfX2Fzc2lnbjIgPSBmdW5jdGlvbigpIHsKICAgICAgICBfX2Fzc2lnbjIgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduMyh0OSkgewogICAgICAgICAgZm9yICh2YXIgczksIGkxMSA9IDEsIG4xMyA9IGFyZ3VtZW50cy5sZW5ndGg7IGkxMSA8IG4xMzsgaTExKyspIHsKICAgICAgICAgICAgczkgPSBhcmd1bWVudHNbaTExXTsKICAgICAgICAgICAgZm9yICh2YXIgcDcgaW4gczkpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoczksIHA3KSkgdDlbcDddID0gczlbcDddOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHQ5OwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIF9fYXNzaWduMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICB9OwogICAgICB2YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTsKICAgICAgdmFyIGNhblVzZUhpc3RvcnkgPSAhY2FuVXNlRE9NID8gZmFsc2UgOiB3aW5kb3cuaGlzdG9yeSAmJiAicHVzaFN0YXRlIiBpbiB3aW5kb3cuaGlzdG9yeSAmJiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgIT09ICJmaWxlOiI7CiAgICAgIHZhciBjYW5Vc2VQYXNzaXZlT3B0aW9uID0gKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzdXBwb3J0ID0gZmFsc2U7CiAgICAgICAgaWYgKCFjYW5Vc2VET00pIHsKICAgICAgICAgIHJldHVybiBzdXBwb3J0OwogICAgICAgIH0KICAgICAgICB0cnkgewogICAgICAgICAgdmFyIHdpbiA9IHdpbmRvdzsKICAgICAgICAgIHZhciBvcHRzID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAicGFzc2l2ZSIsIHsKICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBzdXBwb3J0ID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICB3aW4uYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsIG51bGwsIG9wdHMpOwogICAgICAgICAgd2luLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLCBudWxsLCBvcHRzKTsKICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN1cHBvcnQ7CiAgICAgIH0pKCk7CiAgICAgIHZhciBpc1N0cmluZzIgPSBmdW5jdGlvbihvYmopIHsKICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gInN0cmluZyI7CiAgICAgIH07CiAgICAgIHZhciBpc0Z1bmN0aW9uMiA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAiZnVuY3Rpb24iOwogICAgICB9OwogICAgICB2YXIgaXNBcnJheTMgPSBmdW5jdGlvbihvYmopIHsKICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmopOwogICAgICB9OwogICAgICB2YXIgaXNOdW1lcmljID0gZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgcmV0dXJuICFpc0FycmF5MyhvYmopICYmIG9iaiAtIHBhcnNlRmxvYXQob2JqKSArIDEgPj0gMDsKICAgICAgfTsKICAgICAgdmFyIGhhc1Byb3AgPSBmdW5jdGlvbihvYmosIGtleTIpIHsKICAgICAgICByZXR1cm4gb2JqICYmIG9iai5oYXNPd25Qcm9wZXJ0eShrZXkyKTsKICAgICAgfTsKICAgICAgdmFyIHJhZiA9IGNhblVzZURPTSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpIDogbnVsbDsKICAgICAgdmFyIGNhZiA9IGNhblVzZURPTSA/IHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdykgOiBudWxsOwogICAgICB2YXIgY29zID0gTWF0aC5jb3MsIHNpbiA9IE1hdGguc2luLCBwb3cgPSBNYXRoLnBvdywgc3FydCA9IE1hdGguc3FydCwgUEkgPSBNYXRoLlBJOwogICAgICB2YXIgZWFzaW5ncyA9IHsKICAgICAgICBsaW5lYXI6IGZ1bmN0aW9uKHA3KSB7CiAgICAgICAgICByZXR1cm4gcDc7CiAgICAgICAgfSwKICAgICAgICBlYXNlSW5RdWFkOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gYzExICogKHQ5IC89IGQ2KSAqIHQ5ICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlT3V0UXVhZDogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIC1jMTEgKiAodDkgLz0gZDYpICogKHQ5IC0gMikgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbk91dFF1YWQ6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiAodDkgLz0gZDYgLyAyKSA8IDEgPyBjMTEgLyAyICogdDkgKiB0OSArIGI1IDogLWMxMSAvIDIgKiAoLS10OSAqICh0OSAtIDIpIC0gMSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbkN1YmljOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gYzExICogKHQ5IC89IGQ2KSAqIHQ5ICogdDkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VPdXRDdWJpYzogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIGMxMSAqICgodDkgPSB0OSAvIGQ2IC0gMSkgKiB0OSAqIHQ5ICsgMSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbk91dEN1YmljOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gKHQ5IC89IGQ2IC8gMikgPCAxID8gYzExIC8gMiAqIHQ5ICogdDkgKiB0OSArIGI1IDogYzExIC8gMiAqICgodDkgLT0gMikgKiB0OSAqIHQ5ICsgMikgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJblF1YXJ0OiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gYzExICogKHQ5IC89IGQ2KSAqIHQ5ICogdDkgKiB0OSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZU91dFF1YXJ0OiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gLWMxMSAqICgodDkgPSB0OSAvIGQ2IC0gMSkgKiB0OSAqIHQ5ICogdDkgLSAxKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluT3V0UXVhcnQ6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiAodDkgLz0gZDYgLyAyKSA8IDEgPyBjMTEgLyAyICogdDkgKiB0OSAqIHQ5ICogdDkgKyBiNSA6IC1jMTEgLyAyICogKCh0OSAtPSAyKSAqIHQ5ICogdDkgKiB0OSAtIDIpICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlSW5RdWludDogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIGMxMSAqICh0OSAvPSBkNikgKiB0OSAqIHQ5ICogdDkgKiB0OSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZU91dFF1aW50OiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gYzExICogKCh0OSA9IHQ5IC8gZDYgLSAxKSAqIHQ5ICogdDkgKiB0OSAqIHQ5ICsgMSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbk91dFF1aW50OiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gKHQ5IC89IGQ2IC8gMikgPCAxID8gYzExIC8gMiAqIHQ5ICogdDkgKiB0OSAqIHQ5ICogdDkgKyBiNSA6IGMxMSAvIDIgKiAoKHQ5IC09IDIpICogdDkgKiB0OSAqIHQ5ICogdDkgKyAyKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluU2luZTogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIC1jMTEgKiBjb3ModDkgLyBkNiAqIChQSSAvIDIpKSArIGMxMSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZU91dFNpbmU6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiBjMTEgKiBzaW4odDkgLyBkNiAqIChQSSAvIDIpKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluT3V0U2luZTogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIC1jMTEgLyAyICogKGNvcyhQSSAqIHQ5IC8gZDYpIC0gMSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbkV4cG86IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiB0OSA9PT0gMCA/IGI1IDogYzExICogcG93KDIsIDEwICogKHQ5IC8gZDYgLSAxKSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VPdXRFeHBvOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gdDkgPT09IGQ2ID8gYjUgKyBjMTEgOiBjMTEgKiAoLXBvdygyLCAtMTAgKiB0OSAvIGQ2KSArIDEpICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlSW5PdXRFeHBvOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICBpZiAodDkgPT09IDApCiAgICAgICAgICAgIHJldHVybiBiNTsKICAgICAgICAgIGlmICh0OSA9PT0gZDYpCiAgICAgICAgICAgIHJldHVybiBiNSArIGMxMTsKICAgICAgICAgIGlmICgodDkgLz0gZDYgLyAyKSA8IDEpCiAgICAgICAgICAgIHJldHVybiBjMTEgLyAyICogcG93KDIsIDEwICogKHQ5IC0gMSkpICsgYjU7CiAgICAgICAgICByZXR1cm4gYzExIC8gMiAqICgtcG93KDIsIC0xMCAqIC0tdDkpICsgMikgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbkNpcmM6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiAtYzExICogKHNxcnQoMSAtICh0OSAvPSBkNikgKiB0OSkgLSAxKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZU91dENpcmM6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiBjMTEgKiBzcXJ0KDEgLSAodDkgPSB0OSAvIGQ2IC0gMSkgKiB0OSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbk91dENpcmM6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiAodDkgLz0gZDYgLyAyKSA8IDEgPyAtYzExIC8gMiAqIChzcXJ0KDEgLSB0OSAqIHQ5KSAtIDEpICsgYjUgOiBjMTEgLyAyICogKHNxcnQoMSAtICh0OSAtPSAyKSAqIHQ5KSArIDEpICsgYjU7CiAgICAgICAgfQogICAgICB9OwogICAgICB2YXIgJCQgPSBmdW5jdGlvbihzZWxlY3RvcikgewogICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCghc2VsZWN0b3IgPyBbXSA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKTsKICAgICAgfTsKICAgICAgdmFyICQzID0gZnVuY3Rpb24oc2VsZWN0b3IpIHsKICAgICAgICByZXR1cm4gJCQoc2VsZWN0b3IpLnNoaWZ0KCkgfHwgbnVsbDsKICAgICAgfTsKICAgICAgdmFyIGlzRWxlbWVudCA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBFbGVtZW50OwogICAgICB9OwogICAgICB2YXIgaXNXaW5kb3cgPSBmdW5jdGlvbigkZWwpIHsKICAgICAgICByZXR1cm4gJGVsID09PSB3aW5kb3c7CiAgICAgIH07CiAgICAgIHZhciBpc1Jvb3RDb250YWluZXIgPSBmdW5jdGlvbigkZWwpIHsKICAgICAgICByZXR1cm4gJGVsID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgJGVsID09PSBkb2N1bWVudC5ib2R5OwogICAgICB9OwogICAgICB2YXIgbWF0Y2hlcyA9IGZ1bmN0aW9uKCRlbCwgc2VsZWN0b3IpIHsKICAgICAgICBpZiAoaXNFbGVtZW50KHNlbGVjdG9yKSkgewogICAgICAgICAgcmV0dXJuICRlbCA9PT0gc2VsZWN0b3I7CiAgICAgICAgfQogICAgICAgIHZhciByZXN1bHRzID0gJCQoc2VsZWN0b3IpOwogICAgICAgIHZhciBpMTEgPSByZXN1bHRzLmxlbmd0aDsKICAgICAgICB3aGlsZSAoLS1pMTEgPj0gMCAmJiByZXN1bHRzW2kxMV0gIT09ICRlbCkgewogICAgICAgIH0KICAgICAgICByZXR1cm4gaTExID4gLTE7CiAgICAgIH07CiAgICAgIHZhciBnZXRIZWlnaHQgPSBmdW5jdGlvbigkZWwpIHsKICAgICAgICByZXR1cm4gTWF0aC5tYXgoJGVsLnNjcm9sbEhlaWdodCwgJGVsLmNsaWVudEhlaWdodCwgJGVsLm9mZnNldEhlaWdodCk7CiAgICAgIH07CiAgICAgIHZhciBnZXRXaWR0aCA9IGZ1bmN0aW9uKCRlbCkgewogICAgICAgIHJldHVybiBNYXRoLm1heCgkZWwuc2Nyb2xsV2lkdGgsICRlbC5jbGllbnRXaWR0aCwgJGVsLm9mZnNldFdpZHRoKTsKICAgICAgfTsKICAgICAgdmFyIGdldFNpemUyID0gZnVuY3Rpb24oJGVsKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHdpZHRoOiBnZXRXaWR0aCgkZWwpLAogICAgICAgICAgaGVpZ2h0OiBnZXRIZWlnaHQoJGVsKQogICAgICAgIH07CiAgICAgIH07CiAgICAgIHZhciBnZXRWaWV3cG9ydEFuZEVsZW1lbnRTaXplcyA9IGZ1bmN0aW9uKCRlbCkgewogICAgICAgIHZhciBpc1Jvb3QgPSBpc1dpbmRvdygkZWwpIHx8IGlzUm9vdENvbnRhaW5lcigkZWwpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICB2aWV3cG9ydDogewogICAgICAgICAgICB3aWR0aDogaXNSb290ID8gTWF0aC5taW4od2luZG93LmlubmVyV2lkdGgsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCkgOiAkZWwuY2xpZW50V2lkdGgsCiAgICAgICAgICAgIGhlaWdodDogaXNSb290ID8gd2luZG93LmlubmVySGVpZ2h0IDogJGVsLmNsaWVudEhlaWdodAogICAgICAgICAgfSwKICAgICAgICAgIHNpemU6IGlzUm9vdCA/IHsKICAgICAgICAgICAgd2lkdGg6IE1hdGgubWF4KGdldFdpZHRoKGRvY3VtZW50LmJvZHkpLCBnZXRXaWR0aChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKSwKICAgICAgICAgICAgaGVpZ2h0OiBNYXRoLm1heChnZXRIZWlnaHQoZG9jdW1lbnQuYm9keSksIGdldEhlaWdodChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKQogICAgICAgICAgfSA6IGdldFNpemUyKCRlbCkKICAgICAgICB9OwogICAgICB9OwogICAgICB2YXIgZGlyZWN0aW9uTWV0aG9kTWFwID0gewogICAgICAgIHk6ICJzY3JvbGxUb3AiLAogICAgICAgIHg6ICJzY3JvbGxMZWZ0IgogICAgICB9OwogICAgICB2YXIgZGlyZWN0aW9uUHJvcE1hcCA9IHsKICAgICAgICB5OiAicGFnZVlPZmZzZXQiLAogICAgICAgIHg6ICJwYWdlWE9mZnNldCIKICAgICAgfTsKICAgICAgdmFyIGdldFNjcm9sbCA9IGZ1bmN0aW9uKCRlbCwgZGlyZWN0aW9uKSB7CiAgICAgICAgcmV0dXJuIGlzV2luZG93KCRlbCkgPyAkZWxbZGlyZWN0aW9uUHJvcE1hcFtkaXJlY3Rpb25dXSA6ICRlbFtkaXJlY3Rpb25NZXRob2RNYXBbZGlyZWN0aW9uXV07CiAgICAgIH07CiAgICAgIHZhciBzZXRTY3JvbGwgPSBmdW5jdGlvbigkZWwsIG9mZnNldCwgZGlyZWN0aW9uKSB7CiAgICAgICAgaWYgKGlzV2luZG93KCRlbCkpIHsKICAgICAgICAgIHZhciB0b3BfMSA9IGRpcmVjdGlvbiA9PT0gInkiOwogICAgICAgICAgJGVsLnNjcm9sbFRvKCF0b3BfMSA/IG9mZnNldCA6ICRlbC5wYWdlWE9mZnNldCwgdG9wXzEgPyBvZmZzZXQgOiAkZWwucGFnZVlPZmZzZXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAkZWxbZGlyZWN0aW9uTWV0aG9kTWFwW2RpcmVjdGlvbl1dID0gb2Zmc2V0OwogICAgICAgIH0KICAgICAgfTsKICAgICAgdmFyIGdldE9mZnNldCA9IGZ1bmN0aW9uKCRlbCwgJGNvbnRleHQpIHsKICAgICAgICB2YXIgcmVjdCA9ICRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBpZiAocmVjdC53aWR0aCB8fCByZWN0LmhlaWdodCkgewogICAgICAgICAgdmFyIHNjcm9sbF8xID0geyB0b3A6IDAsIGxlZnQ6IDAgfTsKICAgICAgICAgIHZhciAkY3R4ID0gdm9pZCAwOwogICAgICAgICAgaWYgKGlzV2luZG93KCRjb250ZXh0KSB8fCBpc1Jvb3RDb250YWluZXIoJGNvbnRleHQpKSB7CiAgICAgICAgICAgICRjdHggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CiAgICAgICAgICAgIHNjcm9sbF8xLnRvcCA9IHdpbmRvd1tkaXJlY3Rpb25Qcm9wTWFwLnldOwogICAgICAgICAgICBzY3JvbGxfMS5sZWZ0ID0gd2luZG93W2RpcmVjdGlvblByb3BNYXAueF07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY3R4ID0gJGNvbnRleHQ7CiAgICAgICAgICAgIHZhciBjUmVjdCA9ICRjdHguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgIHNjcm9sbF8xLnRvcCA9IGNSZWN0LnRvcCAqIC0xICsgJGN0eFtkaXJlY3Rpb25NZXRob2RNYXAueV07CiAgICAgICAgICAgIHNjcm9sbF8xLmxlZnQgPSBjUmVjdC5sZWZ0ICogLTEgKyAkY3R4W2RpcmVjdGlvbk1ldGhvZE1hcC54XTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHRvcDogcmVjdC50b3AgKyBzY3JvbGxfMS50b3AgLSAkY3R4LmNsaWVudFRvcCwKICAgICAgICAgICAgbGVmdDogcmVjdC5sZWZ0ICsgc2Nyb2xsXzEubGVmdCAtICRjdHguY2xpZW50TGVmdAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlY3Q7CiAgICAgIH07CiAgICAgIHZhciB3aGVlbEV2ZW50TmFtZSA9IChmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIWNhblVzZURPTSkgewogICAgICAgICAgcmV0dXJuICJ3aGVlbCI7CiAgICAgICAgfQogICAgICAgIHJldHVybiAib253aGVlbCIgaW4gZG9jdW1lbnQgPyAid2hlZWwiIDogIm1vdXNld2hlZWwiOwogICAgICB9KSgpOwogICAgICB2YXIgZXZlbnROYW1lID0gZnVuY3Rpb24obmFtZSkgewogICAgICAgIHJldHVybiBuYW1lID09PSAid2hlZWwiID8gd2hlZWxFdmVudE5hbWUgOiBuYW1lOwogICAgICB9OwogICAgICB2YXIgYXBwbHkgPSBmdW5jdGlvbigkZWwsIG1ldGhvZCwgZXZlbnQsIGxpc3RlbmVyMiwgcGFzc2l2ZSkgewogICAgICAgIGV2ZW50LnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICAkZWxbbWV0aG9kXShldmVudE5hbWUobmFtZSksIGxpc3RlbmVyMiwgY2FuVXNlUGFzc2l2ZU9wdGlvbiA/IHsgcGFzc2l2ZSB9IDogZmFsc2UpOwogICAgICAgIH0pOwogICAgICB9OwogICAgICB2YXIgYWRkRXZlbnQgPSBmdW5jdGlvbigkZWwsIGV2ZW50LCBsaXN0ZW5lcjIsIHBhc3NpdmUpIHsKICAgICAgICByZXR1cm4gYXBwbHkoJGVsLCAiYWRkRXZlbnRMaXN0ZW5lciIsIGV2ZW50LCBsaXN0ZW5lcjIsIHBhc3NpdmUpOwogICAgICB9OwogICAgICB2YXIgcmVtb3ZlRXZlbnQgPSBmdW5jdGlvbigkZWwsIGV2ZW50LCBsaXN0ZW5lcjIsIHBhc3NpdmUpIHsKICAgICAgICByZXR1cm4gYXBwbHkoJGVsLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIGV2ZW50LCBsaXN0ZW5lcjIsIHBhc3NpdmUpOwogICAgICB9OwogICAgICB2YXIgcmVSZWxhdGl2ZVRva2VuID0gL14oXCt8LSk9KFxkKyg/OlwuXGQrKT8pJC87CiAgICAgIHZhciBwYXJzZUNvb3JkaW5hdGUgPSBmdW5jdGlvbihjb29yZGluYXRlLCBlbmFibGVWZXJ0aWNhbCkgewogICAgICAgIHZhciByZXMgPSB7IHRvcDogMCwgbGVmdDogMCwgcmVsYXRpdmU6IGZhbHNlIH07CiAgICAgICAgaWYgKGhhc1Byb3AoY29vcmRpbmF0ZSwgInRvcCIpIHx8IGhhc1Byb3AoY29vcmRpbmF0ZSwgImxlZnQiKSkgewogICAgICAgICAgcmVzID0gX19hc3NpZ24yKHt9LCByZXMsIGNvb3JkaW5hdGUpOwogICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheTMoY29vcmRpbmF0ZSkpIHsKICAgICAgICAgIGlmIChjb29yZGluYXRlLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgcmVzLnRvcCA9IGNvb3JkaW5hdGVbMF07CiAgICAgICAgICAgIHJlcy5sZWZ0ID0gY29vcmRpbmF0ZVsxXTsKICAgICAgICAgIH0gZWxzZSBpZiAoY29vcmRpbmF0ZS5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgcmVzLnRvcCA9IGVuYWJsZVZlcnRpY2FsID8gY29vcmRpbmF0ZVswXSA6IDA7CiAgICAgICAgICAgIHJlcy5sZWZ0ID0gIWVuYWJsZVZlcnRpY2FsID8gY29vcmRpbmF0ZVswXSA6IDA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGlzTnVtZXJpYyhjb29yZGluYXRlKSkgewogICAgICAgICAgaWYgKGVuYWJsZVZlcnRpY2FsKSB7CiAgICAgICAgICAgIHJlcy50b3AgPSBjb29yZGluYXRlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzLmxlZnQgPSBjb29yZGluYXRlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcyKGNvb3JkaW5hdGUpKSB7CiAgICAgICAgICB2YXIgbTYgPSBjb29yZGluYXRlLnRyaW0oKS5tYXRjaChyZVJlbGF0aXZlVG9rZW4pOwogICAgICAgICAgaWYgKCFtNikgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBvcCA9IG02WzFdOwogICAgICAgICAgdmFyIHZhbCA9IHBhcnNlSW50KG02WzJdLCAxMCk7CiAgICAgICAgICBpZiAob3AgPT09ICIrIikgewogICAgICAgICAgICByZXMudG9wID0gZW5hYmxlVmVydGljYWwgPyB2YWwgOiAwOwogICAgICAgICAgICByZXMubGVmdCA9ICFlbmFibGVWZXJ0aWNhbCA/IHZhbCA6IDA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXMudG9wID0gZW5hYmxlVmVydGljYWwgPyAtdmFsIDogMDsKICAgICAgICAgICAgcmVzLmxlZnQgPSAhZW5hYmxlVmVydGljYWwgPyAtdmFsIDogMDsKICAgICAgICAgIH0KICAgICAgICAgIHJlcy5yZWxhdGl2ZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzOwogICAgICB9OwogICAgICB2YXIgZGVmYXVsdE9wdGlvbnMyID0gewogICAgICAgIHRyaWdnZXI6ICJbZGF0YS1zY3JvbGxdIiwKICAgICAgICBoZWFkZXI6ICJbZGF0YS1zY3JvbGwtaGVhZGVyXSIsCiAgICAgICAgZHVyYXRpb246IDFlMywKICAgICAgICBlYXNpbmc6ICJlYXNlT3V0UXVpbnQiLAogICAgICAgIG9mZnNldDogMCwKICAgICAgICB2ZXJ0aWNhbDogdHJ1ZSwKICAgICAgICBob3Jpem9udGFsOiBmYWxzZSwKICAgICAgICBjYW5jZWxsYWJsZTogdHJ1ZSwKICAgICAgICB1cGRhdGVVUkw6IGZhbHNlLAogICAgICAgIHByZXZlbnREZWZhdWx0OiB0cnVlLAogICAgICAgIHN0b3BQcm9wYWdhdGlvbjogdHJ1ZSwKICAgICAgICAvLyBDYWxsYmFja3MKICAgICAgICBiZWZvcmU6IG51bGwsCiAgICAgICAgYWZ0ZXI6IG51bGwsCiAgICAgICAgY2FuY2VsOiBudWxsLAogICAgICAgIGNvbXBsZXRlOiBudWxsLAogICAgICAgIHN0ZXA6IG51bGwKICAgICAgfTsKICAgICAgdmFyIENPTlRBSU5FUl9DTElDS19FVkVOVCA9ICJjbGljayI7CiAgICAgIHZhciBDT05UQUlORVJfU1RPUF9FVkVOVCA9ICJ3aGVlbCB0b3VjaHN0YXJ0IHRvdWNobW92ZSI7CiAgICAgIHZhciBTd2VldFNjcm9sbDMgPSAoCiAgICAgICAgLyoqIEBjbGFzcyAqLwogICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgIGZ1bmN0aW9uIFN3ZWV0U2Nyb2xsNChvcHRpb25zLCBjb250YWluZXIpIHsKICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kZWwgPSBudWxsOwogICAgICAgICAgICB0aGlzLmN0eCA9IHsKICAgICAgICAgICAgICAkdHJpZ2dlcjogbnVsbCwKICAgICAgICAgICAgICBvcHRzOiBudWxsLAogICAgICAgICAgICAgIHByb2dyZXNzOiBmYWxzZSwKICAgICAgICAgICAgICBwb3M6IG51bGwsCiAgICAgICAgICAgICAgc3RhcnRQb3M6IG51bGwsCiAgICAgICAgICAgICAgZWFzaW5nOiBudWxsLAogICAgICAgICAgICAgIHN0YXJ0OiAwLAogICAgICAgICAgICAgIGlkOiAwLAogICAgICAgICAgICAgIGNhbmNlbDogZmFsc2UsCiAgICAgICAgICAgICAgaGFzaDogbnVsbAogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLmxvb3AgPSBmdW5jdGlvbih0aW1lKSB7CiAgICAgICAgICAgICAgdmFyIF9hMTYgPSBfdGhpcywgJGVsID0gX2ExNi4kZWwsIGN0eCA9IF9hMTYuY3R4OwogICAgICAgICAgICAgIGlmICghY3R4LnN0YXJ0KSB7CiAgICAgICAgICAgICAgICBjdHguc3RhcnQgPSB0aW1lOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoIWN0eC5wcm9ncmVzcyB8fCAhJGVsKSB7CiAgICAgICAgICAgICAgICBfdGhpcy5zdG9wKCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHZhciBvcHRpb25zMiA9IGN0eC5vcHRzOwogICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBjdHgucG9zOwogICAgICAgICAgICAgIHZhciBzdGFydCA9IGN0eC5zdGFydDsKICAgICAgICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSBjdHguc3RhcnRQb3M7CiAgICAgICAgICAgICAgdmFyIGVhc2luZyA9IGN0eC5lYXNpbmc7CiAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gb3B0aW9uczIuZHVyYXRpb247CiAgICAgICAgICAgICAgdmFyIGRpcmVjdGlvbk1hcCA9IHsgdG9wOiAieSIsIGxlZnQ6ICJ4IiB9OwogICAgICAgICAgICAgIHZhciB0aW1lRWxhcHNlZCA9IHRpbWUgLSBzdGFydDsKICAgICAgICAgICAgICB2YXIgdDkgPSBNYXRoLm1pbigxLCBNYXRoLm1heCh0aW1lRWxhcHNlZCAvIGR1cmF0aW9uLCAwKSk7CiAgICAgICAgICAgICAgT2JqZWN0LmtleXMob2Zmc2V0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleTIpIHsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZTIgPSBvZmZzZXRba2V5Ml07CiAgICAgICAgICAgICAgICB2YXIgaW5pdGlhbDIgPSBzdGFydE9mZnNldFtrZXkyXTsKICAgICAgICAgICAgICAgIHZhciBkZWx0YSA9IHZhbHVlMiAtIGluaXRpYWwyOwogICAgICAgICAgICAgICAgaWYgKGRlbHRhICE9PSAwKSB7CiAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBlYXNpbmcodDksIGR1cmF0aW9uICogdDksIDAsIDEsIGR1cmF0aW9uKTsKICAgICAgICAgICAgICAgICAgc2V0U2Nyb2xsKCRlbCwgTWF0aC5yb3VuZChpbml0aWFsMiArIGRlbHRhICogdmFsKSwgZGlyZWN0aW9uTWFwW2tleTJdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBpZiAodGltZUVsYXBzZWQgPD0gZHVyYXRpb24pIHsKICAgICAgICAgICAgICAgIF90aGlzLmhvb2sob3B0aW9uczIsICJzdGVwIiwgdDkpOwogICAgICAgICAgICAgICAgY3R4LmlkID0gU3dlZXRTY3JvbGw0LnJhZihfdGhpcy5sb29wKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgX3RoaXMuc3RvcCh0cnVlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbihlMTEpIHsKICAgICAgICAgICAgICB2YXIgb3B0cyA9IF90aGlzLm9wdHM7CiAgICAgICAgICAgICAgdmFyICRlbCA9IGUxMS50YXJnZXQ7CiAgICAgICAgICAgICAgZm9yICg7ICRlbCAmJiAkZWwgIT09IGRvY3VtZW50OyAkZWwgPSAkZWwucGFyZW50Tm9kZSkgewogICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKCRlbCwgb3B0cy50cmlnZ2VyKSkgewogICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBkYXRhT3B0aW9ucyA9IEpTT04ucGFyc2UoJGVsLmdldEF0dHJpYnV0ZSgiZGF0YS1zY3JvbGwtb3B0aW9ucyIpIHx8ICJ7fSIpOwogICAgICAgICAgICAgICAgdmFyIGRhdGEgPSAkZWwuZ2V0QXR0cmlidXRlKCJkYXRhLXNjcm9sbCIpOwogICAgICAgICAgICAgICAgdmFyIHRvMiA9IGRhdGEgfHwgJGVsLmdldEF0dHJpYnV0ZSgiaHJlZiIpOwogICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMyID0gX19hc3NpZ24yKHt9LCBvcHRzLCBkYXRhT3B0aW9ucyk7CiAgICAgICAgICAgICAgICB2YXIgcHJldmVudERlZmF1bHQgPSBvcHRpb25zMi5wcmV2ZW50RGVmYXVsdCwgc3RvcFByb3BhZ2F0aW9uID0gb3B0aW9uczIuc3RvcFByb3BhZ2F0aW9uLCB2ZXJ0aWNhbCA9IG9wdGlvbnMyLnZlcnRpY2FsLCBob3Jpem9udGFsID0gb3B0aW9uczIuaG9yaXpvbnRhbDsKICAgICAgICAgICAgICAgIGlmIChwcmV2ZW50RGVmYXVsdCkgewogICAgICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzdG9wUHJvcGFnYXRpb24pIHsKICAgICAgICAgICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX3RoaXMuY3R4LiR0cmlnZ2VyID0gJGVsOwogICAgICAgICAgICAgICAgaWYgKGhvcml6b250YWwgJiYgdmVydGljYWwpIHsKICAgICAgICAgICAgICAgICAgX3RoaXMudG8odG8yLCBvcHRpb25zMik7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZlcnRpY2FsKSB7CiAgICAgICAgICAgICAgICAgIF90aGlzLnRvVG9wKHRvMiwgb3B0aW9uczIpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChob3Jpem9udGFsKSB7CiAgICAgICAgICAgICAgICAgIF90aGlzLnRvTGVmdCh0bzIsIG9wdGlvbnMyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5oYW5kbGVTdG9wID0gZnVuY3Rpb24oZTExKSB7CiAgICAgICAgICAgICAgdmFyIGN0eCA9IF90aGlzLmN0eDsKICAgICAgICAgICAgICB2YXIgb3B0cyA9IGN0eC5vcHRzOwogICAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMuY2FuY2VsbGFibGUpIHsKICAgICAgICAgICAgICAgIGN0eC5jYW5jZWwgPSB0cnVlOwogICAgICAgICAgICAgICAgX3RoaXMuc3RvcCgpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMub3B0cyA9IF9fYXNzaWduMih7fSwgZGVmYXVsdE9wdGlvbnMyLCBvcHRpb25zIHx8IHt9KTsKICAgICAgICAgICAgdmFyICRjb250YWluZXIgPSBudWxsOwogICAgICAgICAgICBpZiAoY2FuVXNlRE9NKSB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250YWluZXIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICAkY29udGFpbmVyID0gJDMoY29udGFpbmVyKTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRhaW5lciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAkY29udGFpbmVyID0gY29udGFpbmVyOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkY29udGFpbmVyID0gd2luZG93OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLiRlbCA9ICRjb250YWluZXI7CiAgICAgICAgICAgIGlmICgkY29udGFpbmVyKSB7CiAgICAgICAgICAgICAgdGhpcy5iaW5kKHRydWUsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgU3dlZXRTY3JvbGw0LmNyZWF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMsIGNvbnRhaW5lcikgewogICAgICAgICAgICByZXR1cm4gbmV3IFN3ZWV0U2Nyb2xsNChvcHRpb25zLCBjb250YWluZXIpOwogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUudG8gPSBmdW5jdGlvbihkaXN0YW5jZSwgb3B0aW9ucykgewogICAgICAgICAgICBpZiAoIWNhblVzZURPTSkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgX2ExNiA9IHRoaXMsICRlbCA9IF9hMTYuJGVsLCBjdHggPSBfYTE2LmN0eCwgY3VycmVudE9wdGlvbnMgPSBfYTE2Lm9wdHM7CiAgICAgICAgICAgIHZhciAkdHJpZ2dlciA9IGN0eC4kdHJpZ2dlcjsKICAgICAgICAgICAgdmFyIG9wdHMgPSBfX2Fzc2lnbjIoe30sIGN1cnJlbnRPcHRpb25zLCBvcHRpb25zIHx8IHt9KTsKICAgICAgICAgICAgdmFyIG9wdE9mZnNldCA9IG9wdHMub2Zmc2V0LCB2ZXJ0aWNhbCA9IG9wdHMudmVydGljYWwsIGhvcml6b250YWwgPSBvcHRzLmhvcml6b250YWw7CiAgICAgICAgICAgIHZhciAkaGVhZGVyID0gaXNFbGVtZW50KG9wdHMuaGVhZGVyKSA/IG9wdHMuaGVhZGVyIDogJDMob3B0cy5oZWFkZXIpOwogICAgICAgICAgICB2YXIgcmVnID0gL14jLzsKICAgICAgICAgICAgdmFyIGhhc2ggPSBpc1N0cmluZzIoZGlzdGFuY2UpICYmIHJlZy50ZXN0KGRpc3RhbmNlKSA/IGRpc3RhbmNlIDogbnVsbDsKICAgICAgICAgICAgY3R4Lm9wdHMgPSBvcHRzOwogICAgICAgICAgICBjdHguY2FuY2VsID0gZmFsc2U7CiAgICAgICAgICAgIGN0eC5oYXNoID0gaGFzaDsKICAgICAgICAgICAgdGhpcy5zdG9wKCk7CiAgICAgICAgICAgIGlmICghJGVsKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBvZmZzZXQgPSBwYXJzZUNvb3JkaW5hdGUob3B0T2Zmc2V0LCB2ZXJ0aWNhbCk7CiAgICAgICAgICAgIHZhciBjb29yZGluYXRlID0gcGFyc2VDb29yZGluYXRlKGRpc3RhbmNlLCB2ZXJ0aWNhbCk7CiAgICAgICAgICAgIHZhciBzY3JvbGwgPSB7IHRvcDogMCwgbGVmdDogMCB9OwogICAgICAgICAgICBpZiAoY29vcmRpbmF0ZSkgewogICAgICAgICAgICAgIGlmIChjb29yZGluYXRlLnJlbGF0aXZlKSB7CiAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IGdldFNjcm9sbCgkZWwsIHZlcnRpY2FsID8gInkiIDogIngiKTsKICAgICAgICAgICAgICAgIHNjcm9sbC50b3AgPSB2ZXJ0aWNhbCA/IGN1cnJlbnQgKyBjb29yZGluYXRlLnRvcCA6IGNvb3JkaW5hdGUudG9wOwogICAgICAgICAgICAgICAgc2Nyb2xsLmxlZnQgPSAhdmVydGljYWwgPyBjdXJyZW50ICsgY29vcmRpbmF0ZS5sZWZ0IDogY29vcmRpbmF0ZS5sZWZ0OwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzY3JvbGwgPSBjb29yZGluYXRlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZzIoZGlzdGFuY2UpICYmIGRpc3RhbmNlICE9PSAiIyIpIHsKICAgICAgICAgICAgICB2YXIgJHRhcmdldCA9ICQzKGRpc3RhbmNlKTsKICAgICAgICAgICAgICBpZiAoISR0YXJnZXQpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc2Nyb2xsID0gZ2V0T2Zmc2V0KCR0YXJnZXQsICRlbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG9mZnNldCkgewogICAgICAgICAgICAgIHNjcm9sbC50b3AgKz0gb2Zmc2V0LnRvcDsKICAgICAgICAgICAgICBzY3JvbGwubGVmdCArPSBvZmZzZXQubGVmdDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJGhlYWRlcikgewogICAgICAgICAgICAgIHNjcm9sbC50b3AgPSBNYXRoLm1heCgwLCBzY3JvbGwudG9wIC0gZ2V0U2l6ZTIoJGhlYWRlcikuaGVpZ2h0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgX2IgPSBnZXRWaWV3cG9ydEFuZEVsZW1lbnRTaXplcygkZWwpLCB2aWV3cG9ydCA9IF9iLnZpZXdwb3J0LCBzaXplID0gX2Iuc2l6ZTsKICAgICAgICAgICAgc2Nyb2xsLnRvcCA9IHZlcnRpY2FsID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2l6ZS5oZWlnaHQgLSB2aWV3cG9ydC5oZWlnaHQsIHNjcm9sbC50b3ApKSA6IGdldFNjcm9sbCgkZWwsICJ5Iik7CiAgICAgICAgICAgIHNjcm9sbC5sZWZ0ID0gaG9yaXpvbnRhbCA/IE1hdGgubWF4KDAsIE1hdGgubWluKHNpemUud2lkdGggLSB2aWV3cG9ydC53aWR0aCwgc2Nyb2xsLmxlZnQpKSA6IGdldFNjcm9sbCgkZWwsICJ4Iik7CiAgICAgICAgICAgIGlmICh0aGlzLmhvb2sob3B0cywgImJlZm9yZSIsIHNjcm9sbCwgJHRyaWdnZXIpID09PSBmYWxzZSkgewogICAgICAgICAgICAgIGN0eC5vcHRzID0gbnVsbDsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3R4LnBvcyA9IHNjcm9sbDsKICAgICAgICAgICAgdGhpcy5zdGFydChvcHRzKTsKICAgICAgICAgICAgdGhpcy5iaW5kKGZhbHNlLCB0cnVlKTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLnRvVG9wID0gZnVuY3Rpb24oZGlzdGFuY2UsIG9wdGlvbnMpIHsKICAgICAgICAgICAgdGhpcy50byhkaXN0YW5jZSwgX19hc3NpZ24yKHt9LCBvcHRpb25zIHx8IHt9LCB7IHZlcnRpY2FsOiB0cnVlLCBob3Jpem9udGFsOiBmYWxzZSB9KSk7CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS50b0xlZnQgPSBmdW5jdGlvbihkaXN0YW5jZSwgb3B0aW9ucykgewogICAgICAgICAgICB0aGlzLnRvKGRpc3RhbmNlLCBfX2Fzc2lnbjIoe30sIG9wdGlvbnMgfHwge30sIHsgdmVydGljYWw6IGZhbHNlLCBob3Jpem9udGFsOiB0cnVlIH0pKTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLnRvRWxlbWVudCA9IGZ1bmN0aW9uKCRlbGVtZW50LCBvcHRpb25zKSB7CiAgICAgICAgICAgIHZhciAkZWwgPSB0aGlzLiRlbDsKICAgICAgICAgICAgaWYgKCFjYW5Vc2VET00gfHwgISRlbCkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnRvKGdldE9mZnNldCgkZWxlbWVudCwgJGVsKSwgb3B0aW9ucyB8fCB7fSk7CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24oZ290b0VuZCkgewogICAgICAgICAgICBpZiAoZ290b0VuZCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICAgICAgZ290b0VuZCA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBfYTE2ID0gdGhpcywgJGVsID0gX2ExNi4kZWwsIGN0eCA9IF9hMTYuY3R4OwogICAgICAgICAgICB2YXIgcG9zID0gY3R4LnBvczsKICAgICAgICAgICAgaWYgKCEkZWwgfHwgIWN0eC5wcm9ncmVzcykgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBTd2VldFNjcm9sbDQuY2FmKGN0eC5pZCk7CiAgICAgICAgICAgIGN0eC5wcm9ncmVzcyA9IGZhbHNlOwogICAgICAgICAgICBjdHguc3RhcnQgPSAwOwogICAgICAgICAgICBjdHguaWQgPSAwOwogICAgICAgICAgICBpZiAoZ290b0VuZCAmJiBwb3MpIHsKICAgICAgICAgICAgICBzZXRTY3JvbGwoJGVsLCBwb3MubGVmdCwgIngiKTsKICAgICAgICAgICAgICBzZXRTY3JvbGwoJGVsLCBwb3MudG9wLCAieSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuY29tcGxldGUoKTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICAgICAgaWYgKHRoaXMuJGVsKSB7CiAgICAgICAgICAgICAgdmFyIG9wdHMgPSBfX2Fzc2lnbjIoe30sIHRoaXMub3B0cywgb3B0aW9ucyk7CiAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7CiAgICAgICAgICAgICAgdGhpcy51bmJpbmQodHJ1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgdGhpcy5vcHRzID0gb3B0czsKICAgICAgICAgICAgICB0aGlzLmJpbmQodHJ1ZSwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICh0aGlzLiRlbCkgewogICAgICAgICAgICAgIHRoaXMuc3RvcCgpOwogICAgICAgICAgICAgIHRoaXMudW5iaW5kKHRydWUsIHRydWUpOwogICAgICAgICAgICAgIHRoaXMuJGVsID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUub25CZWZvcmUgPSBmdW5jdGlvbihfNCwgX18pIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS5vblN0ZXAgPSBmdW5jdGlvbihfNCkgewogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUub25BZnRlciA9IGZ1bmN0aW9uKF80LCBfXykgewogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUub25DYW5jZWwgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLm9uQ29tcGxldGUgPSBmdW5jdGlvbihfNCkgewogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbihvcHRzKSB7CiAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDsKICAgICAgICAgICAgY3R4Lm9wdHMgPSBvcHRzOwogICAgICAgICAgICBjdHgucHJvZ3Jlc3MgPSB0cnVlOwogICAgICAgICAgICBjdHguZWFzaW5nID0gaXNGdW5jdGlvbjIob3B0cy5lYXNpbmcpID8gb3B0cy5lYXNpbmcgOiBlYXNpbmdzW29wdHMuZWFzaW5nXTsKICAgICAgICAgICAgdmFyICRjb250YWluZXIgPSB0aGlzLiRlbDsKICAgICAgICAgICAgdmFyIHN0YXJ0ID0gewogICAgICAgICAgICAgIHRvcDogZ2V0U2Nyb2xsKCRjb250YWluZXIsICJ5IiksCiAgICAgICAgICAgICAgbGVmdDogZ2V0U2Nyb2xsKCRjb250YWluZXIsICJ4IikKICAgICAgICAgICAgfTsKICAgICAgICAgICAgY3R4LnN0YXJ0UG9zID0gc3RhcnQ7CiAgICAgICAgICAgIGN0eC5pZCA9IFN3ZWV0U2Nyb2xsNC5yYWYodGhpcy5sb29wKTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBfYTE2ID0gdGhpcywgJGVsID0gX2ExNi4kZWwsIGN0eCA9IF9hMTYuY3R4OwogICAgICAgICAgICB2YXIgaGFzaCA9IGN0eC5oYXNoLCBjYW5jZWwgPSBjdHguY2FuY2VsLCBvcHRzID0gY3R4Lm9wdHMsIHBvcyA9IGN0eC5wb3MsICR0cmlnZ2VyID0gY3R4LiR0cmlnZ2VyOwogICAgICAgICAgICBpZiAoISRlbCB8fCAhb3B0cykgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaGFzaCAhPSBudWxsICYmIGhhc2ggIT09IHdpbmRvdy5sb2NhdGlvbi5oYXNoKSB7CiAgICAgICAgICAgICAgdmFyIHVwZGF0ZVVSTCA9IG9wdHMudXBkYXRlVVJMOwogICAgICAgICAgICAgIGlmIChjYW5Vc2VET00gJiYgY2FuVXNlSGlzdG9yeSAmJiB1cGRhdGVVUkwgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cuaGlzdG9yeVt1cGRhdGVVUkwgPT09ICJyZXBsYWNlIiA/ICJyZXBsYWNlU3RhdGUiIDogInB1c2hTdGF0ZSJdKG51bGwsICIiLCBoYXNoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy51bmJpbmQoZmFsc2UsIHRydWUpOwogICAgICAgICAgICBjdHgub3B0cyA9IG51bGw7CiAgICAgICAgICAgIGN0eC4kdHJpZ2dlciA9IG51bGw7CiAgICAgICAgICAgIGlmIChjYW5jZWwpIHsKICAgICAgICAgICAgICB0aGlzLmhvb2sob3B0cywgImNhbmNlbCIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuaG9vayhvcHRzLCAiYWZ0ZXIiLCBwb3MsICR0cmlnZ2VyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmhvb2sob3B0cywgImNvbXBsZXRlIiwgY2FuY2VsKTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLmhvb2sgPSBmdW5jdGlvbihvcHRpb25zLCB0eXBlNSkgewogICAgICAgICAgICB2YXIgYXJncyA9IFtdOwogICAgICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIF9hMTY7CiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IG9wdGlvbnNbdHlwZTVdOwogICAgICAgICAgICB2YXIgY2FsbGJhY2tSZXN1bHQ7CiAgICAgICAgICAgIHZhciBtZXRob2RSZXN1bHQ7CiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uMihjYWxsYmFjaykpIHsKICAgICAgICAgICAgICBjYWxsYmFja1Jlc3VsdCA9IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MuY29uY2F0KFt0aGlzXSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG1ldGhvZFJlc3VsdCA9IChfYTE2ID0gdGhpcylbIm9uIiArICh0eXBlNVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZTUuc2xpY2UoMSkpXS5hcHBseShfYTE2LCBhcmdzKTsKICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrUmVzdWx0ICE9PSB2b2lkIDAgPyBjYWxsYmFja1Jlc3VsdCA6IG1ldGhvZFJlc3VsdDsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihjbGljaywgc3RvcCkgewogICAgICAgICAgICB2YXIgX2ExNiA9IHRoaXMsICRlbCA9IF9hMTYuJGVsLCBvcHRzID0gX2ExNi5jdHgub3B0czsKICAgICAgICAgICAgaWYgKCRlbCkgewogICAgICAgICAgICAgIGlmIChjbGljaykgewogICAgICAgICAgICAgICAgYWRkRXZlbnQoJGVsLCBDT05UQUlORVJfQ0xJQ0tfRVZFTlQsIHRoaXMuaGFuZGxlQ2xpY2ssIGZhbHNlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKICAgICAgICAgICAgICAgIGFkZEV2ZW50KCRlbCwgQ09OVEFJTkVSX1NUT1BfRVZFTlQsIHRoaXMuaGFuZGxlU3RvcCwgb3B0cyA/IG9wdHMuY2FuY2VsbGFibGUgOiB0cnVlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKGNsaWNrLCBzdG9wKSB7CiAgICAgICAgICAgIHZhciBfYTE2ID0gdGhpcywgJGVsID0gX2ExNi4kZWwsIG9wdHMgPSBfYTE2LmN0eC5vcHRzOwogICAgICAgICAgICBpZiAoJGVsKSB7CiAgICAgICAgICAgICAgaWYgKGNsaWNrKSB7CiAgICAgICAgICAgICAgICByZW1vdmVFdmVudCgkZWwsIENPTlRBSU5FUl9DTElDS19FVkVOVCwgdGhpcy5oYW5kbGVDbGljaywgZmFsc2UpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQoJGVsLCBDT05UQUlORVJfU1RPUF9FVkVOVCwgdGhpcy5oYW5kbGVTdG9wLCBvcHRzID8gb3B0cy5jYW5jZWxsYWJsZSA6IHRydWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5yYWYgPSByYWY7CiAgICAgICAgICBTd2VldFNjcm9sbDQuY2FmID0gY2FmOwogICAgICAgICAgcmV0dXJuIFN3ZWV0U2Nyb2xsNDsKICAgICAgICB9KSgpCiAgICAgICk7CiAgICAgIHJldHVybiBTd2VldFNjcm9sbDM7CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5wbHVnaW5zLmpzCnZhciBpbXBvcnRfc3dlZXRfc2Nyb2xsLCBsaWs7CnZhciBpbml0X2RvbXRvb2xzX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMxNigpOwogICAgaW5pdF9kaXN0X3RzMTUoKTsKICAgIGluaXRfZGlzdF90czMoKTsKICAgIGluaXRfZGlzdF90czEyKCk7CiAgICBpbml0X2Rpc3RfdHMxNygpOwogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBpbml0X2Rpc3RfdHMxOCgpOwogICAgaW5pdF9kaXN0X3RzMigpOwogICAgaW5pdF9kaXN0X3RzMTkoKTsKICAgIGluaXRfZGlzdF90czExKCk7CiAgICBpbml0X2Rpc3RfdHMyMCgpOwogICAgaW5pdF9kaXN0X3RzMTQoKTsKICAgIGluaXRfZGlzdF90czI0KCk7CiAgICBpbml0X2Rpc3RfdHMxMygpOwogICAgaW5pdF9saWtfb2JqZWN0bWFwKCk7CiAgICBpbml0X2xpa19zdHJpbmdtYXAoKTsKICAgIGluaXRfbGlrX2Zhc3RtYXAoKTsKICAgIGluaXRfbGVuaXMoKTsKICAgIGltcG9ydF9zd2VldF9zY3JvbGwgPSBfX3RvRVNNKHJlcXVpcmVfc3dlZXRfc2Nyb2xsKCksIDEpOwogICAgbGlrID0gewogICAgICBPYmplY3RNYXA6IE9iamVjdE1hcDIsCiAgICAgIFN0cmluZ21hcDogU3RyaW5nbWFwMiwKICAgICAgRmFzdE1hcDogRmFzdE1hcDIKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY3NzLmJyZWFrcG9pbnRzLmpzCnZhciBkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cywgewogIGNzc0ZvckRlc2t0b3A6ICgpID0+IGNzc0ZvckRlc2t0b3AsCiAgY3NzRm9yTm90ZWJvb2s6ICgpID0+IGNzc0Zvck5vdGVib29rLAogIGNzc0ZvclBoYWJsZXQ6ICgpID0+IGNzc0ZvclBoYWJsZXQsCiAgY3NzRm9yUGhvbmU6ICgpID0+IGNzc0ZvclBob25lLAogIGNzc0ZvclRhYmxldDogKCkgPT4gY3NzRm9yVGFibGV0LAogIGRlc2t0b3A6ICgpID0+IGRlc2t0b3AsCiAgbm90ZWJvb2s6ICgpID0+IG5vdGVib29rLAogIHBoYWJsZXQ6ICgpID0+IHBoYWJsZXQsCiAgcGhvbmU6ICgpID0+IHBob25lLAogIHRhYmxldDogKCkgPT4gdGFibGV0Cn0pOwp2YXIgZGVza3RvcCwgbm90ZWJvb2ssIHRhYmxldCwgcGhhYmxldCwgcGhvbmUsIGNzc0ZvckRlc2t0b3AsIGNzc0Zvck5vdGVib29rLCBjc3NGb3JUYWJsZXQsIGNzc0ZvclBoYWJsZXQsIGNzc0ZvclBob25lOwp2YXIgaW5pdF9kb210b29sc19jc3NfYnJlYWtwb2ludHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY3NzLmJyZWFrcG9pbnRzLmpzIigpIHsKICAgIGluaXRfZG9tdG9vbHNfY2xhc3Nlc19kb210b29scygpOwogICAgaW5pdF9saXQoKTsKICAgIGRlc2t0b3AgPSAxNjAwOwogICAgbm90ZWJvb2sgPSAxMjQwOwogICAgdGFibGV0ID0gMTAyNDsKICAgIHBoYWJsZXQgPSA2MDA7CiAgICBwaG9uZSA9IDQwMDsKICAgIGNzc0ZvckRlc2t0b3AgPSAoY3NzQXJnKSA9PiB7CiAgICAgIHJldHVybiByKGAKICAgIEBjb250YWluZXIgd2NjVG9vbHNWaWV3cG9ydCAobWluLXdpZHRoOiAke2Rlc2t0b3B9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWluLXdpZHRoOiAke2Rlc2t0b3B9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICBgKTsKICAgIH07CiAgICBjc3NGb3JOb3RlYm9vayA9IChjc3NBcmcpID0+IHsKICAgICAgcmV0dXJuIHIoYAogICAgQGNvbnRhaW5lciB3Y2NUb29sc1ZpZXdwb3J0IChtYXgtd2lkdGg6ICR7bm90ZWJvb2t9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke25vdGVib29rfXB4KSB7CiAgICAgICR7Y3NzQXJnLmNzc1RleHR9CiAgICB9CiAgYCk7CiAgICB9OwogICAgY3NzRm9yVGFibGV0ID0gKGNzc0FyZykgPT4gewogICAgICByZXR1cm4gcihgCiAgICBAY29udGFpbmVyIHdjY1Rvb2xzVmlld3BvcnQgKG1heC13aWR0aDogJHt0YWJsZXR9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke3RhYmxldH1weCkgewogICAgICAke2Nzc0FyZy5jc3NUZXh0fQogICAgfQogIGApOwogICAgfTsKICAgIGNzc0ZvclBoYWJsZXQgPSAoY3NzQXJnKSA9PiB7CiAgICAgIHJldHVybiByKGAKICAgIEBjb250YWluZXIgd2NjVG9vbHNWaWV3cG9ydCAobWF4LXdpZHRoOiAke3BoYWJsZXR9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke3BoYWJsZXR9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICBgKTsKICAgIH07CiAgICBjc3NGb3JQaG9uZSA9IChjc3NBcmcpID0+IHsKICAgICAgcmV0dXJuIHIoYAogICAgQGNvbnRhaW5lciB3Y2NUb29sc1ZpZXdwb3J0IChtYXgtd2lkdGg6ICR7cGhvbmV9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke3Bob25lfXB4KSB7CiAgICAgICR7Y3NzQXJnLmNzc1RleHR9CiAgICB9CiAgYCk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmNsYXNzZXMuc2Nyb2xsZXIuanMKdmFyIFNjcm9sbGVyOwp2YXIgaW5pdF9kb210b29sc19jbGFzc2VzX3Njcm9sbGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmNsYXNzZXMuc2Nyb2xsZXIuanMiKCkgewogICAgaW5pdF9kb210b29sc19wbHVnaW5zKCk7CiAgICBTY3JvbGxlciA9IGNsYXNzIHsKICAgICAgZG9tdG9vbHNJbnN0YW5jZTsKICAgICAgLy8gQXJyYXkgdG8gc3RvcmUgc2Nyb2xsIGNhbGxiYWNrIGZ1bmN0aW9ucy4KICAgICAgc2Nyb2xsQ2FsbGJhY2tzID0gW107CiAgICAgIC8vIExlbmlzIGluc3RhbmNlIChpZiBhY3RpdmF0ZWQpIG9yIG51bGwuCiAgICAgIGxlbmlzSW5zdGFuY2UgPSBudWxsOwogICAgICAvLyBCb3VuZCBoYW5kbGVycyB0byBhbGxvdyByZW1vdmFsIGZyb20gZXZlbnQgbGlzdGVuZXJzLgogICAgICBoYW5kbGVOYXRpdmVTY3JvbGwgPSAoZXZlbnQpID0+IHsKICAgICAgICB0aGlzLmV4ZWN1dGVTY3JvbGxDYWxsYmFja3MoKTsKICAgICAgfTsKICAgICAgaGFuZGxlTGVuaXNTY3JvbGwgPSAoaW5mbykgPT4gewogICAgICAgIHRoaXMuZXhlY3V0ZVNjcm9sbENhbGxiYWNrcygpOwogICAgICB9OwogICAgICBjb25zdHJ1Y3Rvcihkb210b29sc0luc3RhbmNlQXJnKSB7CiAgICAgICAgdGhpcy5kb210b29sc0luc3RhbmNlID0gZG9tdG9vbHNJbnN0YW5jZUFyZzsKICAgICAgICB0aGlzLmF0dGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCk7CiAgICAgIH0KICAgICAgc3dlZXRTY3JvbGxlciA9IG5ldyBpbXBvcnRfc3dlZXRfc2Nyb2xsLmRlZmF1bHQoe30pOwogICAgICAvKioKICAgICAgICogU2Nyb2xscyB0byBhIGdpdmVuIGVsZW1lbnQgd2l0aCBvcHRpb25zLgogICAgICAgKi8KICAgICAgYXN5bmMgdG9FbGVtZW50KGVsZW1lbnRBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICB0aGlzLnN3ZWV0U2Nyb2xsZXIudG9FbGVtZW50KGVsZW1lbnRBcmcsIG9wdGlvbnNBcmcpOwogICAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3Iob3B0aW9uc0FyZy5kdXJhdGlvbik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIERldGVjdHMgd2hldGhlciBuYXRpdmUgc21vb3RoIHNjcm9sbGluZyBpcyBlbmFibGVkLgogICAgICAgKi8KICAgICAgYXN5bmMgZGV0ZWN0TmF0aXZlU21vb3RoU2Nyb2xsKCkgewogICAgICAgIGNvbnN0IGRvbmUgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICBjb25zdCBzYW1wbGVTaXplID0gMTAwOwogICAgICAgIGNvbnN0IGFjY2VwdGFibGVEZWx0YURpZmZlcmVuY2UgPSAzOwogICAgICAgIGNvbnN0IG1pbmltdW1TbW9vdGhSYXRpbyA9IDAuNzU7CiAgICAgICAgY29uc3QgZXZlbnREZWx0YXMgPSBbXTsKICAgICAgICBmdW5jdGlvbiBvbldoZWVsKGV2ZW50KSB7CiAgICAgICAgICBldmVudERlbHRhcy5wdXNoKGV2ZW50LmRlbHRhWSk7CiAgICAgICAgICBpZiAoZXZlbnREZWx0YXMubGVuZ3RoID49IHNhbXBsZVNpemUpIHsKICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIiwgb25XaGVlbCk7CiAgICAgICAgICAgIGFuYWx5emVFdmVudHMoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gYW5hbHl6ZUV2ZW50cygpIHsKICAgICAgICAgIGNvbnN0IHRvdGFsRGlmZnMgPSBldmVudERlbHRhcy5sZW5ndGggLSAxOwogICAgICAgICAgbGV0IHNtYWxsRGlmZkNvdW50ID0gMDsKICAgICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHRvdGFsRGlmZnM7IGkxMSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhldmVudERlbHRhc1tpMTEgKyAxXSAtIGV2ZW50RGVsdGFzW2kxMV0pOwogICAgICAgICAgICBpZiAoZGlmZiA8PSBhY2NlcHRhYmxlRGVsdGFEaWZmZXJlbmNlKSB7CiAgICAgICAgICAgICAgc21hbGxEaWZmQ291bnQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgY29uc3Qgc21vb3RoUmF0aW8gPSBzbWFsbERpZmZDb3VudCAvIHRvdGFsRGlmZnM7CiAgICAgICAgICBpZiAoc21vb3RoUmF0aW8gPj0gbWluaW11bVNtb290aFJhdGlvKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTbW9vdGggc2Nyb2xsaW5nIGRldGVjdGVkLiIpOwogICAgICAgICAgICBkb25lLnJlc29sdmUodHJ1ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLmxvZygiU21vb3RoIHNjcm9sbGluZyBOT1QgZGV0ZWN0ZWQuIik7CiAgICAgICAgICAgIGRvbmUucmVzb2x2ZShmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsIG9uV2hlZWwpOwogICAgICAgIHJldHVybiBkb25lLnByb21pc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEVuYWJsZXMgTGVuaXMgc2Nyb2xsaW5nLgogICAgICAgKiBJZiBvcHRpb25zQXJnLmRpc2FibGVPbk5hdGl2ZVNtb290aFNjcm9sbCBpcyB0cnVlIGFuZCBuYXRpdmUgc21vb3RoIHNjcm9sbGluZyBpcyBkZXRlY3RlZCwKICAgICAgICogTGVuaXMgd2lsbCBiZSBkZXN0cm95ZWQgaW1tZWRpYXRlbHkuCiAgICAgICAqLwogICAgICBhc3luYyBlbmFibGVMZW5pc1Njcm9sbChvcHRpb25zQXJnKSB7CiAgICAgICAgY29uc3QgbGVuaXMgPSBuZXcgTGVuaXMoewogICAgICAgICAgYXV0b1JhZjogdHJ1ZQogICAgICAgIH0pOwogICAgICAgIGlmIChvcHRpb25zQXJnPy5kaXNhYmxlT25OYXRpdmVTbW9vdGhTY3JvbGwpIHsKICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmRldGVjdE5hdGl2ZVNtb290aFNjcm9sbCgpKSB7CiAgICAgICAgICAgIGxlbmlzLmRlc3Ryb3koKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmxlbmlzSW5zdGFuY2UgPSBsZW5pczsKICAgICAgICB0aGlzLmRldGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCk7CiAgICAgICAgdGhpcy5hdHRhY2hMZW5pc1Njcm9sbExpc3RlbmVyKCk7CiAgICAgICAgY29uc3Qgb3JpZ2luYWxEZXN0cm95ID0gbGVuaXMuZGVzdHJveS5iaW5kKGxlbmlzKTsKICAgICAgICBsZW5pcy5kZXN0cm95ID0gKCkgPT4gewogICAgICAgICAgb3JpZ2luYWxEZXN0cm95KCk7CiAgICAgICAgICB0aGlzLmRldGFjaExlbmlzU2Nyb2xsTGlzdGVuZXIoKTsKICAgICAgICAgIHRoaXMuYXR0YWNoTmF0aXZlU2Nyb2xsTGlzdGVuZXIoKTsKICAgICAgICAgIHRoaXMubGVuaXNJbnN0YW5jZSA9IG51bGw7CiAgICAgICAgfTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWQgb24gc2Nyb2xsLgogICAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBleGVjdXRlIG9uIGVhY2ggc2Nyb2xsIGV2ZW50LgogICAgICAgKi8KICAgICAgb25TY3JvbGwoY2FsbGJhY2spIHsKICAgICAgICB0aGlzLnNjcm9sbENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogRXhlY3V0ZXMgYWxsIHJlZ2lzdGVyZWQgc2Nyb2xsIGNhbGxiYWNrcyBjb25jdXJyZW50bHkuCiAgICAgICAqLwogICAgICBleGVjdXRlU2Nyb2xsQ2FsbGJhY2tzKCkgewogICAgICAgIHRoaXMuc2Nyb2xsQ2FsbGJhY2tzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjYWxsYmFjaygpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgaW4gc2Nyb2xsIGNhbGxiYWNrOiIsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQXR0YWNoZXMgdGhlIG5hdGl2ZSBzY3JvbGwgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAqLwogICAgICBhdHRhY2hOYXRpdmVTY3JvbGxMaXN0ZW5lcigpIHsKICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5oYW5kbGVOYXRpdmVTY3JvbGwpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBEZXRhY2hlcyB0aGUgbmF0aXZlIHNjcm9sbCBldmVudCBsaXN0ZW5lci4KICAgICAgICovCiAgICAgIGRldGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCkgewogICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLmhhbmRsZU5hdGl2ZVNjcm9sbCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEF0dGFjaGVzIHRoZSBMZW5pcyBzY3JvbGwgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAqLwogICAgICBhdHRhY2hMZW5pc1Njcm9sbExpc3RlbmVyKCkgewogICAgICAgIGlmICh0aGlzLmxlbmlzSW5zdGFuY2UpIHsKICAgICAgICAgIHRoaXMubGVuaXNJbnN0YW5jZS5vbigic2Nyb2xsIiwgdGhpcy5oYW5kbGVMZW5pc1Njcm9sbCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBEZXRhY2hlcyB0aGUgTGVuaXMgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyLgogICAgICAgKi8KICAgICAgZGV0YWNoTGVuaXNTY3JvbGxMaXN0ZW5lcigpIHsKICAgICAgICBpZiAodGhpcy5sZW5pc0luc3RhbmNlKSB7CiAgICAgICAgICB0aGlzLmxlbmlzSW5zdGFuY2Uub2ZmKCJzY3JvbGwiLCB0aGlzLmhhbmRsZUxlbmlzU2Nyb2xsKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy50aGVtZW1hbmFnZXIuanMKdmFyIFRoZW1lTWFuYWdlcjsKdmFyIGluaXRfZG9tdG9vbHNfY2xhc3Nlc190aGVtZW1hbmFnZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy50aGVtZW1hbmFnZXIuanMiKCkgewogICAgaW5pdF9kb210b29sc19jbGFzc2VzX2RvbXRvb2xzKCk7CiAgICBpbml0X2RvbXRvb2xzX3BsdWdpbnMoKTsKICAgIFRoZW1lTWFuYWdlciA9IGNsYXNzIHsKICAgICAgZG9tdG9vbHNSZWY7CiAgICAgIGdvQnJpZ2h0Qm9vbGVhbiA9IGZhbHNlOwogICAgICBwcmVmZXJyZWRDb2xvclNjaGVtZU1lZGlhTWF0Y2ggPSB3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiKTsKICAgICAgdGhlbWVPYnNlcnZhYmxlID0gbmV3IGRpc3RfdHNfZXhwb3J0czIucnhqcy5SZXBsYXlTdWJqZWN0KDEpOwogICAgICBjb25zdHJ1Y3Rvcihkb210b29sc1JlZkFyZykgewogICAgICAgIHRoaXMuZG9tdG9vbHNSZWYgPSBkb210b29sc1JlZkFyZzsKICAgICAgICB0aGlzLmdvQnJpZ2h0Qm9vbGVhbiA9IHRoaXMucHJlZmVycmVkQ29sb3JTY2hlbWVNZWRpYU1hdGNoLm1hdGNoZXM7CiAgICAgICAgdGhpcy5wcmVmZXJyZWRDb2xvclNjaGVtZU1lZGlhTWF0Y2guYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50QXJnKSA9PiB7CiAgICAgICAgICB0aGlzLmdvQnJpZ2h0Qm9vbGVhbiA9IGV2ZW50QXJnLm1hdGNoZXM7CiAgICAgICAgICB0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy51cGRhdGVBbGxDb25uZWN0ZWRFbGVtZW50cygpOwogICAgICB9CiAgICAgIGFzeW5jIGVuYWJsZUF1dG9tYXRpY0dsb2JhbFRoZW1lQ2hhbmdlKCkgewogICAgICAgIGlmIChkb2N1bWVudC5ib2R5ICYmIGRvY3VtZW50LmJvZHkuc3R5bGUpIHsKICAgICAgICAgIHRoaXMudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSh7CiAgICAgICAgICAgIG5leHQ6IChnb0JyaWdodCkgPT4gewogICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZCA9IGdvQnJpZ2h0ID8gIiNmZmYiIDogIiMwMDAiOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgdXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKSB7CiAgICAgICAgdGhpcy50aGVtZU9ic2VydmFibGUubmV4dCh0aGlzLmdvQnJpZ2h0Qm9vbGVhbik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHNldCB0aGUgdGhlbWUgb2YgdGhlIHdlYnNpdGUgdG8gYnJpZ2h0CiAgICAgICAqLwogICAgICBnb0JyaWdodCgpIHsKICAgICAgICB0aGlzLmdvQnJpZ2h0Qm9vbGVhbiA9IHRydWU7CiAgICAgICAgdGhpcy51cGRhdGVBbGxDb25uZWN0ZWRFbGVtZW50cygpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBzZXQgdGhlIHRoZW1lIG9mIHRoZSB3ZWJzaXRlIHRvIGRhcmsKICAgICAgICovCiAgICAgIGdvRGFyaygpIHsKICAgICAgICB0aGlzLmdvQnJpZ2h0Qm9vbGVhbiA9IGZhbHNlOwogICAgICAgIHRoaXMudXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc2ltcGx5IHRvZ2dsZSBiZXR3ZWVuIGJyaWdodCBhbmQgZGFyawogICAgICAgKi8KICAgICAgdG9nZ2xlRGFya0JyaWdodCgpIHsKICAgICAgICB0aGlzLmdvQnJpZ2h0Qm9vbGVhbiA9ICF0aGlzLmdvQnJpZ2h0Qm9vbGVhbjsKICAgICAgICB0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy5rZXlib2FyZC5qcwp2YXIgS2V5LCBLZXlib2FyZDsKdmFyIGluaXRfZG9tdG9vbHNfY2xhc3Nlc19rZXlib2FyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jbGFzc2VzLmtleWJvYXJkLmpzIigpIHsKICAgIGluaXRfZG9tdG9vbHNfcGx1Z2lucygpOwogICAgKGZ1bmN0aW9uKEtleTIpIHsKICAgICAgS2V5MltLZXkyWyJCYWNrc3BhY2UiXSA9IDhdID0gIkJhY2tzcGFjZSI7CiAgICAgIEtleTJbS2V5MlsiVGFiIl0gPSA5XSA9ICJUYWIiOwogICAgICBLZXkyW0tleTJbIkVudGVyIl0gPSAxM10gPSAiRW50ZXIiOwogICAgICBLZXkyW0tleTJbIlNoaWZ0Il0gPSAxNl0gPSAiU2hpZnQiOwogICAgICBLZXkyW0tleTJbIkN0cmwiXSA9IDE3XSA9ICJDdHJsIjsKICAgICAgS2V5MltLZXkyWyJBbHQiXSA9IDE4XSA9ICJBbHQiOwogICAgICBLZXkyW0tleTJbIlBhdXNlQnJlYWsiXSA9IDE5XSA9ICJQYXVzZUJyZWFrIjsKICAgICAgS2V5MltLZXkyWyJDYXBzTG9jayJdID0gMjBdID0gIkNhcHNMb2NrIjsKICAgICAgS2V5MltLZXkyWyJFc2NhcGUiXSA9IDI3XSA9ICJFc2NhcGUiOwogICAgICBLZXkyW0tleTJbIlNwYWNlIl0gPSAzMl0gPSAiU3BhY2UiOwogICAgICBLZXkyW0tleTJbIlBhZ2VVcCJdID0gMzNdID0gIlBhZ2VVcCI7CiAgICAgIEtleTJbS2V5MlsiUGFnZURvd24iXSA9IDM0XSA9ICJQYWdlRG93biI7CiAgICAgIEtleTJbS2V5MlsiRW5kIl0gPSAzNV0gPSAiRW5kIjsKICAgICAgS2V5MltLZXkyWyJIb21lIl0gPSAzNl0gPSAiSG9tZSI7CiAgICAgIEtleTJbS2V5MlsiTGVmdEFycm93Il0gPSAzN10gPSAiTGVmdEFycm93IjsKICAgICAgS2V5MltLZXkyWyJVcEFycm93Il0gPSAzOF0gPSAiVXBBcnJvdyI7CiAgICAgIEtleTJbS2V5MlsiUmlnaHRBcnJvdyJdID0gMzldID0gIlJpZ2h0QXJyb3ciOwogICAgICBLZXkyW0tleTJbIkRvd25BcnJvdyJdID0gNDBdID0gIkRvd25BcnJvdyI7CiAgICAgIEtleTJbS2V5MlsiSW5zZXJ0Il0gPSA0NV0gPSAiSW5zZXJ0IjsKICAgICAgS2V5MltLZXkyWyJEZWxldGUiXSA9IDQ2XSA9ICJEZWxldGUiOwogICAgICBLZXkyW0tleTJbIlplcm8iXSA9IDQ4XSA9ICJaZXJvIjsKICAgICAgS2V5MltLZXkyWyJDbG9zZWRQYXJlbiJdID0gNDhdID0gIkNsb3NlZFBhcmVuIjsKICAgICAgS2V5MltLZXkyWyJPbmUiXSA9IDQ5XSA9ICJPbmUiOwogICAgICBLZXkyW0tleTJbIkV4Y2xhbWF0aW9uTWFyayJdID0gNDldID0gIkV4Y2xhbWF0aW9uTWFyayI7CiAgICAgIEtleTJbS2V5MlsiVHdvIl0gPSA1MF0gPSAiVHdvIjsKICAgICAgS2V5MltLZXkyWyJBdFNpZ24iXSA9IDUwXSA9ICJBdFNpZ24iOwogICAgICBLZXkyW0tleTJbIlRocmVlIl0gPSA1MV0gPSAiVGhyZWUiOwogICAgICBLZXkyW0tleTJbIlBvdW5kU2lnbiJdID0gNTFdID0gIlBvdW5kU2lnbiI7CiAgICAgIEtleTJbS2V5MlsiSGFzaCJdID0gNTFdID0gIkhhc2giOwogICAgICBLZXkyW0tleTJbIkZvdXIiXSA9IDUyXSA9ICJGb3VyIjsKICAgICAgS2V5MltLZXkyWyJEb2xsYXJTaWduIl0gPSA1Ml0gPSAiRG9sbGFyU2lnbiI7CiAgICAgIEtleTJbS2V5MlsiRml2ZSJdID0gNTNdID0gIkZpdmUiOwogICAgICBLZXkyW0tleTJbIlBlcmNlbnRTaWduIl0gPSA1M10gPSAiUGVyY2VudFNpZ24iOwogICAgICBLZXkyW0tleTJbIlNpeCJdID0gNTRdID0gIlNpeCI7CiAgICAgIEtleTJbS2V5MlsiQ2FyZXQiXSA9IDU0XSA9ICJDYXJldCI7CiAgICAgIEtleTJbS2V5MlsiSGF0Il0gPSA1NF0gPSAiSGF0IjsKICAgICAgS2V5MltLZXkyWyJTZXZlbiJdID0gNTVdID0gIlNldmVuIjsKICAgICAgS2V5MltLZXkyWyJBbXBlcnNhbmQiXSA9IDU1XSA9ICJBbXBlcnNhbmQiOwogICAgICBLZXkyW0tleTJbIkVpZ2h0Il0gPSA1Nl0gPSAiRWlnaHQiOwogICAgICBLZXkyW0tleTJbIlN0YXIiXSA9IDU2XSA9ICJTdGFyIjsKICAgICAgS2V5MltLZXkyWyJBc3RlcmlrIl0gPSA1Nl0gPSAiQXN0ZXJpayI7CiAgICAgIEtleTJbS2V5MlsiTmluZSJdID0gNTddID0gIk5pbmUiOwogICAgICBLZXkyW0tleTJbIk9wZW5QYXJlbiJdID0gNTddID0gIk9wZW5QYXJlbiI7CiAgICAgIEtleTJbS2V5MlsiQSJdID0gNjVdID0gIkEiOwogICAgICBLZXkyW0tleTJbIkIiXSA9IDY2XSA9ICJCIjsKICAgICAgS2V5MltLZXkyWyJDIl0gPSA2N10gPSAiQyI7CiAgICAgIEtleTJbS2V5MlsiRCJdID0gNjhdID0gIkQiOwogICAgICBLZXkyW0tleTJbIkUiXSA9IDY5XSA9ICJFIjsKICAgICAgS2V5MltLZXkyWyJGIl0gPSA3MF0gPSAiRiI7CiAgICAgIEtleTJbS2V5MlsiRyJdID0gNzFdID0gIkciOwogICAgICBLZXkyW0tleTJbIkgiXSA9IDcyXSA9ICJIIjsKICAgICAgS2V5MltLZXkyWyJJIl0gPSA3M10gPSAiSSI7CiAgICAgIEtleTJbS2V5MlsiSiJdID0gNzRdID0gIkoiOwogICAgICBLZXkyW0tleTJbIksiXSA9IDc1XSA9ICJLIjsKICAgICAgS2V5MltLZXkyWyJMIl0gPSA3Nl0gPSAiTCI7CiAgICAgIEtleTJbS2V5MlsiTSJdID0gNzddID0gIk0iOwogICAgICBLZXkyW0tleTJbIk4iXSA9IDc4XSA9ICJOIjsKICAgICAgS2V5MltLZXkyWyJPIl0gPSA3OV0gPSAiTyI7CiAgICAgIEtleTJbS2V5MlsiUCJdID0gODBdID0gIlAiOwogICAgICBLZXkyW0tleTJbIlEiXSA9IDgxXSA9ICJRIjsKICAgICAgS2V5MltLZXkyWyJSIl0gPSA4Ml0gPSAiUiI7CiAgICAgIEtleTJbS2V5MlsiUyJdID0gODNdID0gIlMiOwogICAgICBLZXkyW0tleTJbIlQiXSA9IDg0XSA9ICJUIjsKICAgICAgS2V5MltLZXkyWyJVIl0gPSA4NV0gPSAiVSI7CiAgICAgIEtleTJbS2V5MlsiViJdID0gODZdID0gIlYiOwogICAgICBLZXkyW0tleTJbIlciXSA9IDg3XSA9ICJXIjsKICAgICAgS2V5MltLZXkyWyJYIl0gPSA4OF0gPSAiWCI7CiAgICAgIEtleTJbS2V5MlsiWSJdID0gODldID0gIlkiOwogICAgICBLZXkyW0tleTJbIloiXSA9IDkwXSA9ICJaIjsKICAgICAgS2V5MltLZXkyWyJMZWZ0V2luZG93S2V5Il0gPSA5MV0gPSAiTGVmdFdpbmRvd0tleSI7CiAgICAgIEtleTJbS2V5MlsiUmlnaHRXaW5kb3dLZXkiXSA9IDkyXSA9ICJSaWdodFdpbmRvd0tleSI7CiAgICAgIEtleTJbS2V5MlsiU2VsZWN0S2V5Il0gPSA5M10gPSAiU2VsZWN0S2V5IjsKICAgICAgS2V5MltLZXkyWyJOdW1wYWQwIl0gPSA5Nl0gPSAiTnVtcGFkMCI7CiAgICAgIEtleTJbS2V5MlsiTnVtcGFkMSJdID0gOTddID0gIk51bXBhZDEiOwogICAgICBLZXkyW0tleTJbIk51bXBhZDIiXSA9IDk4XSA9ICJOdW1wYWQyIjsKICAgICAgS2V5MltLZXkyWyJOdW1wYWQzIl0gPSA5OV0gPSAiTnVtcGFkMyI7CiAgICAgIEtleTJbS2V5MlsiTnVtcGFkNCJdID0gMTAwXSA9ICJOdW1wYWQ0IjsKICAgICAgS2V5MltLZXkyWyJOdW1wYWQ1Il0gPSAxMDFdID0gIk51bXBhZDUiOwogICAgICBLZXkyW0tleTJbIk51bXBhZDYiXSA9IDEwMl0gPSAiTnVtcGFkNiI7CiAgICAgIEtleTJbS2V5MlsiTnVtcGFkNyJdID0gMTAzXSA9ICJOdW1wYWQ3IjsKICAgICAgS2V5MltLZXkyWyJOdW1wYWQ4Il0gPSAxMDRdID0gIk51bXBhZDgiOwogICAgICBLZXkyW0tleTJbIk51bXBhZDkiXSA9IDEwNV0gPSAiTnVtcGFkOSI7CiAgICAgIEtleTJbS2V5MlsiTXVsdGlwbHkiXSA9IDEwNl0gPSAiTXVsdGlwbHkiOwogICAgICBLZXkyW0tleTJbIkFkZCJdID0gMTA3XSA9ICJBZGQiOwogICAgICBLZXkyW0tleTJbIlN1YnRyYWN0Il0gPSAxMDldID0gIlN1YnRyYWN0IjsKICAgICAgS2V5MltLZXkyWyJEZWNpbWFsUG9pbnQiXSA9IDExMF0gPSAiRGVjaW1hbFBvaW50IjsKICAgICAgS2V5MltLZXkyWyJEaXZpZGUiXSA9IDExMV0gPSAiRGl2aWRlIjsKICAgICAgS2V5MltLZXkyWyJGMSJdID0gMTEyXSA9ICJGMSI7CiAgICAgIEtleTJbS2V5MlsiRjIiXSA9IDExM10gPSAiRjIiOwogICAgICBLZXkyW0tleTJbIkYzIl0gPSAxMTRdID0gIkYzIjsKICAgICAgS2V5MltLZXkyWyJGNCJdID0gMTE1XSA9ICJGNCI7CiAgICAgIEtleTJbS2V5MlsiRjUiXSA9IDExNl0gPSAiRjUiOwogICAgICBLZXkyW0tleTJbIkY2Il0gPSAxMTddID0gIkY2IjsKICAgICAgS2V5MltLZXkyWyJGNyJdID0gMTE4XSA9ICJGNyI7CiAgICAgIEtleTJbS2V5MlsiRjgiXSA9IDExOV0gPSAiRjgiOwogICAgICBLZXkyW0tleTJbIkY5Il0gPSAxMjBdID0gIkY5IjsKICAgICAgS2V5MltLZXkyWyJGMTAiXSA9IDEyMV0gPSAiRjEwIjsKICAgICAgS2V5MltLZXkyWyJGMTEiXSA9IDEyMl0gPSAiRjExIjsKICAgICAgS2V5MltLZXkyWyJGMTIiXSA9IDEyM10gPSAiRjEyIjsKICAgICAgS2V5MltLZXkyWyJOdW1Mb2NrIl0gPSAxNDRdID0gIk51bUxvY2siOwogICAgICBLZXkyW0tleTJbIlNjcm9sbExvY2siXSA9IDE0NV0gPSAiU2Nyb2xsTG9jayI7CiAgICAgIEtleTJbS2V5MlsiU2VtaUNvbG9uIl0gPSAxODZdID0gIlNlbWlDb2xvbiI7CiAgICAgIEtleTJbS2V5MlsiRXF1YWxzIl0gPSAxODddID0gIkVxdWFscyI7CiAgICAgIEtleTJbS2V5MlsiQ29tbWEiXSA9IDE4OF0gPSAiQ29tbWEiOwogICAgICBLZXkyW0tleTJbIkRhc2giXSA9IDE4OV0gPSAiRGFzaCI7CiAgICAgIEtleTJbS2V5MlsiUGVyaW9kIl0gPSAxOTBdID0gIlBlcmlvZCI7CiAgICAgIEtleTJbS2V5MlsiVW5kZXJTY29yZSJdID0gMTg5XSA9ICJVbmRlclNjb3JlIjsKICAgICAgS2V5MltLZXkyWyJQbHVzU2lnbiJdID0gMTg3XSA9ICJQbHVzU2lnbiI7CiAgICAgIEtleTJbS2V5MlsiRm9yd2FyZFNsYXNoIl0gPSAxOTFdID0gIkZvcndhcmRTbGFzaCI7CiAgICAgIEtleTJbS2V5MlsiVGlsZGUiXSA9IDE5Ml0gPSAiVGlsZGUiOwogICAgICBLZXkyW0tleTJbIkdyYXZlQWNjZW50Il0gPSAxOTJdID0gIkdyYXZlQWNjZW50IjsKICAgICAgS2V5MltLZXkyWyJPcGVuQnJhY2tldCJdID0gMjE5XSA9ICJPcGVuQnJhY2tldCI7CiAgICAgIEtleTJbS2V5MlsiQ2xvc2VkQnJhY2tldCJdID0gMjIxXSA9ICJDbG9zZWRCcmFja2V0IjsKICAgICAgS2V5MltLZXkyWyJRdW90ZSJdID0gMjIyXSA9ICJRdW90ZSI7CiAgICB9KShLZXkgfHwgKEtleSA9IHt9KSk7CiAgICBLZXlib2FyZCA9IGNsYXNzIHsKICAgICAgZG9tTm9kZTsKICAgICAgbWFwQ29tYm9zVG9IYW5kbGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIHByZXNzZWRLZXlzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgICAgY29uc3RydWN0b3IoZG9tTm9kZSkgewogICAgICAgIHRoaXMuZG9tTm9kZSA9IGRvbU5vZGU7CiAgICAgICAgdGhpcy5zdGFydExpc3RlbmluZygpOwogICAgICB9CiAgICAgIGtleUVudW0gPSBLZXk7CiAgICAgIG9uKGtleXMyKSB7CiAgICAgICAgY29uc3Qgc3ViamVjdCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLnJ4anMuU3ViamVjdCgpOwogICAgICAgIHRoaXMucmVnaXN0ZXJLZXlzKGtleXMyLCBzdWJqZWN0KTsKICAgICAgICByZXR1cm4gc3ViamVjdDsKICAgICAgfQogICAgICB0cmlnZ2VyS2V5UHJlc3Moa2V5c0FyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBrZXlzQXJnKSB7CiAgICAgICAgICB0aGlzLnByZXNzZWRLZXlzLmFkZChrZXkyKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5jaGVja01hdGNoaW5nS2V5Ym9hcmRTdWJqZWN0cygpOwogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBrZXlzQXJnKSB7CiAgICAgICAgICB0aGlzLnByZXNzZWRLZXlzLmRlbGV0ZShrZXkyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhcnRMaXN0ZW5pbmcoKSB7CiAgICAgICAgdGhpcy5kb21Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLmhhbmRsZUtleURvd24pOwogICAgICAgIHRoaXMuZG9tTm9kZS5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsIHRoaXMuaGFuZGxlS2V5VXApOwogICAgICB9CiAgICAgIHN0b3BMaXN0ZW5pbmcoKSB7CiAgICAgICAgdGhpcy5kb21Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLmhhbmRsZUtleURvd24pOwogICAgICAgIHRoaXMuZG9tTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsIHRoaXMuaGFuZGxlS2V5VXApOwogICAgICB9CiAgICAgIGNsZWFyKCkgewogICAgICAgIHRoaXMuc3RvcExpc3RlbmluZygpOwogICAgICAgIHRoaXMubWFwQ29tYm9zVG9IYW5kbGVycy5jbGVhcigpOwogICAgICAgIHRoaXMucHJlc3NlZEtleXMuY2xlYXIoKTsKICAgICAgfQogICAgICBoYW5kbGVLZXlEb3duID0gKGV2ZW50KSA9PiB7CiAgICAgICAgdGhpcy5wcmVzc2VkS2V5cy5hZGQoZXZlbnQua2V5Q29kZSk7CiAgICAgICAgdGhpcy5jaGVja01hdGNoaW5nS2V5Ym9hcmRTdWJqZWN0cyhldmVudCk7CiAgICAgIH07CiAgICAgIGNoZWNrTWF0Y2hpbmdLZXlib2FyZFN1YmplY3RzKHBheWxvYWRBcmcpIHsKICAgICAgICB0aGlzLm1hcENvbWJvc1RvSGFuZGxlcnMuZm9yRWFjaCgoc3ViamVjdEFyZywga2V5c0FyZykgPT4gewogICAgICAgICAgaWYgKHRoaXMuYXJlQWxsS2V5c1ByZXNzZWQoa2V5c0FyZykpIHsKICAgICAgICAgICAgc3ViamVjdEFyZy5uZXh0KHBheWxvYWRBcmcpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGhhbmRsZUtleVVwID0gKGV2ZW50KSA9PiB7CiAgICAgICAgdGhpcy5wcmVzc2VkS2V5cy5kZWxldGUoZXZlbnQua2V5Q29kZSk7CiAgICAgIH07CiAgICAgIGFyZUFsbEtleXNQcmVzc2VkKGtleXNBcmcpIHsKICAgICAgICBsZXQgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICBrZXlzQXJnLmZvckVhY2goKGtleTIpID0+IHsKICAgICAgICAgIGlmICghdGhpcy5wcmVzc2VkS2V5cy5oYXMoa2V5MikpIHsKICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICByZWdpc3RlcktleXMoa2V5c0FyZywgc3ViamVjdEFyZykgewogICAgICAgIGlmICghdGhpcy5tYXBDb21ib3NUb0hhbmRsZXJzLmhhcyhrZXlzQXJnKSkgewogICAgICAgICAgdGhpcy5tYXBDb21ib3NUb0hhbmRsZXJzLnNldChrZXlzQXJnLCBzdWJqZWN0QXJnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3Qgc3ViamVjdCA9IHRoaXMubWFwQ29tYm9zVG9IYW5kbGVycy5nZXQoa2V5c0FyZyk7CiAgICAgICAgICByZXR1cm4gc3ViamVjdDsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy5qcwp2YXIgRG9tVG9vbHM7CnZhciBpbml0X2RvbXRvb2xzX2NsYXNzZXNfZG9tdG9vbHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy5qcyIoKSB7CiAgICBpbml0X2RvbXRvb2xzX3BsdWdpbnMoKTsKICAgIGluaXRfZG9tdG9vbHNfY3NzX2JyZWFrcG9pbnRzKCk7CiAgICBpbml0X2RvbXRvb2xzX2NsYXNzZXNfc2Nyb2xsZXIoKTsKICAgIGluaXRfZGlzdF90czI0KCk7CiAgICBpbml0X2RvbXRvb2xzX2NsYXNzZXNfdGhlbWVtYW5hZ2VyKCk7CiAgICBpbml0X2RvbXRvb2xzX2NsYXNzZXNfa2V5Ym9hcmQoKTsKICAgIERvbVRvb2xzID0gY2xhc3MgX0RvbVRvb2xzIHsKICAgICAgLy8gPT09PT09CiAgICAgIC8vIFNUQVRJQwogICAgICAvLyA9PT09PT0KICAgICAgc3RhdGljIGluaXRpYWxpemF0aW9uUHJvbWlzZSA9IG51bGw7CiAgICAgIC8qKgogICAgICAgKiBzZXR1cHMgZG9tdG9vbHMKICAgICAgICovCiAgICAgIHN0YXRpYyBhc3luYyBzZXR1cERvbVRvb2xzKG9wdGlvbnNBcmcgPSB7fSkgewogICAgICAgIGlmICghb3B0aW9uc0FyZy5pZ25vcmVHbG9iYWwgJiYgX0RvbVRvb2xzLmluaXRpYWxpemF0aW9uUHJvbWlzZSkgewogICAgICAgICAgcmV0dXJuIGF3YWl0IF9Eb21Ub29scy5pbml0aWFsaXphdGlvblByb21pc2U7CiAgICAgICAgfQogICAgICAgIGlmICghb3B0aW9uc0FyZy5pZ25vcmVHbG9iYWwpIHsKICAgICAgICAgIF9Eb21Ub29scy5pbml0aWFsaXphdGlvblByb21pc2UgPSAoYXN5bmMgKCkgPT4gewogICAgICAgICAgICBsZXQgZG9tVG9vbHNJbnN0YW5jZTsKICAgICAgICAgICAgaWYgKCFnbG9iYWxUaGlzLmRlZXNEb21Ub29scykgewogICAgICAgICAgICAgIGdsb2JhbFRoaXMuZGVlc0RvbVRvb2xzID0gbmV3IF9Eb21Ub29scyhvcHRpb25zQXJnKTsKICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlID0gZ2xvYmFsVGhpcy5kZWVzRG9tVG9vbHM7CiAgICAgICAgICAgICAgY29uc3QgcmVhZHlTdGF0ZUNoYW5nZWRGdW5jID0gKCkgPT4gewogICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJpbnRlcmFjdGl2ZSIgfHwgZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIikgewogICAgICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlLmVsZW1lbnRzLmhlYWRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaGVhZCIpOwogICAgICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlLmVsZW1lbnRzLmJvZHlFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpOwogICAgICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlLmtleWJvYXJkID0gbmV3IEtleWJvYXJkKGRvY3VtZW50LmJvZHkpOwogICAgICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlLmRvbVJlYWR5LnJlc29sdmUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiaW50ZXJhY3RpdmUiIHx8IGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICAgICAgICAgIHJlYWR5U3RhdGVDaGFuZ2VkRnVuYygpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIiwgcmVhZHlTdGF0ZUNoYW5nZWRGdW5jKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZG9tVG9vbHNJbnN0YW5jZS5kb21Ub29sc1JlYWR5LnJlc29sdmUoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlID0gZ2xvYmFsVGhpcy5kZWVzRG9tVG9vbHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXdhaXQgZG9tVG9vbHNJbnN0YW5jZS5kb21Ub29sc1JlYWR5LnByb21pc2U7CiAgICAgICAgICAgIHJldHVybiBkb21Ub29sc0luc3RhbmNlOwogICAgICAgICAgfSkoKTsKICAgICAgICAgIHJldHVybiBhd2FpdCBfRG9tVG9vbHMuaW5pdGlhbGl6YXRpb25Qcm9taXNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBkb21Ub29sc0luc3RhbmNlID0gbmV3IF9Eb21Ub29scyhvcHRpb25zQXJnKTsKICAgICAgICAgIHJldHVybiBkb21Ub29sc0luc3RhbmNlOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogaWYgeW91IGNhbiwgdXNlIHRoZSBzdGF0aWMgYXN5c25jIC5zZXR1cERvbVRvb2xzKCkgZnVuY3Rpb24gaW5zdGVhZCBzaW5jZSBpdCBpcyBzYWZlciB0byB1c2UuCiAgICAgICAqLwogICAgICBzdGF0aWMgZ2V0R2xvYmFsRG9tVG9vbHNTeW5jKCkgewogICAgICAgIGNvbnN0IGdsb2JhbERvbVRvb2xzID0gZ2xvYmFsVGhpcy5kZWVzRG9tVG9vbHM7CiAgICAgICAgaWYgKCFnbG9iYWxEb21Ub29scykgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJZb3UgdHJpZWQgdG8gYWNjZXNzIGRvbXRvb2xzIHN5bmNocm9ub3VzbHkgdG9vIGVhcmx5Iik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBnbG9iYWxUaGlzLmRlZXNEb21Ub29sczsKICAgICAgfQogICAgICAvLyA9PT09PT09PQogICAgICAvLyBJTlNUQU5DRQogICAgICAvLyA9PT09PT09PQogICAgICAvLyBlbGVtZW50cwogICAgICBlbGVtZW50cyA9IHsKICAgICAgICBoZWFkRWxlbWVudDogbnVsbCwKICAgICAgICBib2R5RWxlbWVudDogbnVsbAogICAgICB9OwogICAgICB3ZWJzZXR1cCA9IG5ldyBXZWJTZXR1cCh7CiAgICAgICAgbWV0YU9iamVjdDogewogICAgICAgICAgdGl0bGU6ICJsb2FkaW5nLi4uIgogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHNtYXJ0c3RhdGUgPSBuZXcgZGlzdF90c19leHBvcnRzMTkuU21hcnRzdGF0ZSgpOwogICAgICBkb21Ub29sc1N0YXRlUGFydCA9IHRoaXMuc21hcnRzdGF0ZS5nZXRTdGF0ZVBhcnQoImRvbXRvb2xzIiwgewogICAgICAgIHZpcnR1YWxWaWV3cG9ydDogIm5hdGl2ZSIsCiAgICAgICAgand0OiBudWxsCiAgICAgIH0pOwogICAgICByb3V0ZXIgPSBuZXcgZGlzdF90c19leHBvcnRzMTguU21hcnRSb3V0ZXIoewogICAgICAgIGRlYnVnOiBmYWxzZQogICAgICB9KTsKICAgICAgY29udmVuaWVuY2UgPSB7CiAgICAgICAgdHlwZWRyZXF1ZXN0OiBkaXN0X3RzX2V4cG9ydHMxNSwKICAgICAgICBzbWFydGRlbGF5OiBkaXN0X3RzX2V4cG9ydHMzLAogICAgICAgIHNtYXJ0anNvbjogZGlzdF90c19leHBvcnRzMTIsCiAgICAgICAgc21hcnR1cmw6IGRpc3RfdHNfZXhwb3J0czIwCiAgICAgIH07CiAgICAgIGRlZXNDb21tcyA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxNi5EZWVzQ29tbXMoKTsKICAgICAgc2Nyb2xsZXIgPSBuZXcgU2Nyb2xsZXIodGhpcyk7CiAgICAgIHRoZW1lTWFuYWdlciA9IG5ldyBUaGVtZU1hbmFnZXIodGhpcyk7CiAgICAgIGtleWJvYXJkID0gbnVsbDsKICAgICAgLy8gSW5pdGlhbGl6ZWQgYWZ0ZXIgRE9NIHJlYWR5IHRvIGF2b2lkIGFjY2Vzc2luZyBkb2N1bWVudC5ib2R5IGJlZm9yZSBpdCBleGlzdHMKICAgICAgZG9tVG9vbHNSZWFkeSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICBkb21SZWFkeSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICBnbG9iYWxTdHlsZXNSZWFkeSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICBjb25zdHJ1Y3RvcihvcHRpb25zQXJnKSB7CiAgICAgIH0KICAgICAgcnVuT25jZVRyYWNrZXJTdHJpbmdNYXAgPSBuZXcgbGlrLlN0cmluZ21hcCgpOwogICAgICBydW5PbmNlUmVzdWx0TWFwID0gbmV3IGxpay5GYXN0TWFwKCk7CiAgICAgIHJ1bk9uY2VFcnJvck1hcCA9IG5ldyBsaWsuRmFzdE1hcCgpOwogICAgICAvKioKICAgICAgICogcnVuIGEgZnVuY3Rpb24gb25jZSBhbmQgYWx3YXlzIGdldCB0aGUgUHJvbWlzZSBvZiB0aGUgZmlyc3QgZXhlY3V0aW9uCiAgICAgICAqIEBwYXJhbSBpZGVudGlmaWVyQXJnIHRoZSBpbmRlbnRpZmllciBhcmcgaWRlbnRpZmllcyBmdW5jdGlvbnMuIGZ1bmN0aW9ucyB3aXRoIHRoZSBzYW1lIGlkZW50aWZpZXIgYXJlIGNvbnNpZGVyZWQgZXF1YWwKICAgICAgICogQHBhcmFtIGZ1bmNBcmcgdGhlIGFjdHVhbCBmdW5jIGFyZyB0byBydW4KICAgICAgICovCiAgICAgIGFzeW5jIHJ1bk9uY2UoaWRlbnRpZmllckFyZywgZnVuY0FyZykgewogICAgICAgIGNvbnN0IHJ1bm5pbmdJZCA9IGAke2lkZW50aWZpZXJBcmd9K3J1bm5pbmdDaGVja2A7CiAgICAgICAgaWYgKCF0aGlzLnJ1bk9uY2VUcmFja2VyU3RyaW5nTWFwLmNoZWNrU3RyaW5nKGlkZW50aWZpZXJBcmcpKSB7CiAgICAgICAgICB0aGlzLnJ1bk9uY2VUcmFja2VyU3RyaW5nTWFwLmFkZFN0cmluZyhpZGVudGlmaWVyQXJnKTsKICAgICAgICAgIHRoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAuYWRkU3RyaW5nKHJ1bm5pbmdJZCk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmdW5jQXJnKCk7CiAgICAgICAgICAgIHRoaXMucnVuT25jZVJlc3VsdE1hcC5hZGRUb01hcChpZGVudGlmaWVyQXJnLCByZXN1bHQpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgdGhpcy5ydW5PbmNlRXJyb3JNYXAuYWRkVG9NYXAoaWRlbnRpZmllckFyZywgZXJyb3IpOwogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgdGhpcy5ydW5PbmNlVHJhY2tlclN0cmluZ01hcC5yZW1vdmVTdHJpbmcocnVubmluZ0lkKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAucmVnaXN0ZXJVbnRpbFRydWUoKHN0cmluZ01hcCkgPT4gewogICAgICAgICAgcmV0dXJuICFzdHJpbmdNYXAuaW5jbHVkZXMocnVubmluZ0lkKTsKICAgICAgICB9LCAoKSA9PiB7CiAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMucnVuT25jZUVycm9yTWFwLmdldEJ5S2V5KGlkZW50aWZpZXJBcmcpOwogICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXMucnVuT25jZVJlc3VsdE1hcC5nZXRCeUtleShpZGVudGlmaWVyQXJnKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICAvLyBzZXRTdHVmZgogICAgICAvKioKICAgICAgICogYWxsb3dzIHRvIHNldCBnbG9iYWwgc3R5bGVzCiAgICAgICAqIEBwYXJhbSBzdHlsZXNUZXh0IHRoZSBjc3MgdGV4dCB5b3Ugd2FudCB0byBzZXQKICAgICAgICovCiAgICAgIGFzeW5jIHNldEdsb2JhbFN0eWxlcyhzdHlsZXNUZXh0KSB7CiAgICAgICAgYXdhaXQgdGhpcy5kb21SZWFkeS5wcm9taXNlOwogICAgICAgIGNvbnN0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgICAgc3R5bGVFbGVtZW50LnR5cGUgPSAidGV4dC9jc3MiOwogICAgICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHlsZXNUZXh0KSk7CiAgICAgICAgdGhpcy5lbGVtZW50cy5oZWFkRWxlbWVudC5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhbGxvd3MgdG8gc2V0IGdsb2JhbCBzdHlsZXMKICAgICAgICogQHBhcmFtIHN0eWxlc1RleHQgdGhlIGNzcyB0ZXh0IHlvdSB3YW50IHRvIHNldAogICAgICAgKi8KICAgICAgYXN5bmMgc2V0RXh0ZXJuYWxTY3JpcHQoc2NyaXB0TGlua0FyZykgewogICAgICAgIGF3YWl0IHRoaXMuZG9tUmVhZHkucHJvbWlzZTsKICAgICAgICBjb25zdCBkb25lID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgc2NyaXB0LnNyYyA9IHNjcmlwdExpbmtBcmc7CiAgICAgICAgc2NyaXB0LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmdW5jdGlvbigpIHsKICAgICAgICAgIGRvbmUucmVzb2x2ZSgpOwogICAgICAgIH0pOwogICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmJvZHk7CiAgICAgICAgcGFyZW50Tm9kZS5hcHBlbmQoc2NyaXB0KTsKICAgICAgICBhd2FpdCBkb25lLnByb21pc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFsbG93cyBzZXR0aW5nIGV4dGVybmFsIGNzcyBmaWxlcwogICAgICAgKiBAcGFyYW0gY3NzTGlua0FyZyBhIHVybCB0byBhbiBleHRlcm5hbCBzdHlsZXNoZWV0CiAgICAgICAqLwogICAgICBhc3luYyBzZXRFeHRlcm5hbENzcyhjc3NMaW5rQXJnKSB7CiAgICAgICAgY29uc3QgY3NzVGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpOwogICAgICAgIGNzc1RhZy5yZWwgPSAic3R5bGVzaGVldCI7CiAgICAgICAgY3NzVGFnLmNyb3NzT3JpZ2luID0gImFub255bW91cyI7CiAgICAgICAgY3NzVGFnLmhyZWYgPSBjc3NMaW5rQXJnOwogICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kKGNzc1RhZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFsbG93cyBzZXR0aW5nIG9mIHdlYnNpdGUgaW5mb3MKICAgICAgICogQHBhcmFtIG9wdGlvbnNBcmcgdGhlIHdlYnNpdGUgaW5mbwogICAgICAgKi8KICAgICAgYXN5bmMgc2V0V2Vic2l0ZUluZm8ob3B0aW9uc0FyZykgewogICAgICAgIGF3YWl0IHRoaXMud2Vic2V0dXAuc2V0dXAob3B0aW9uc0FyZyk7CiAgICAgICAgYXdhaXQgdGhpcy53ZWJzZXR1cC5yZWFkeVByb21pc2U7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY3NzLmJhc2VzdHlsZXMuanMKdmFyIHNjcm9sbEJhclN0eWxlcywgZ2xvYmFsQmFzZVN0eWxlczsKdmFyIGluaXRfZG9tdG9vbHNfY3NzX2Jhc2VzdHlsZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY3NzLmJhc2VzdHlsZXMuanMiKCkgewogICAgaW5pdF9kb210b29sc19jbGFzc2VzX2RvbXRvb2xzKCk7CiAgICBpbml0X2xpdCgpOwogICAgc2Nyb2xsQmFyU3R5bGVzID0gKCgpID0+IHsKICAgICAgY29uc3QgcmV0dXJuU3R5bGVzT2xkID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNYWMgT1MgWCIpID09PSAtMSA/IGlgYC5jc3NUZXh0IDogYGA7CiAgICAgIGNvbnN0IHJldHVyblN0eWxlcyA9IGlgCiAgICAvKiB3aWR0aCAqLwogICAgOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgIHdpZHRoOiAwcHg7CiAgICB9CiAgICBib2R5IHsKICAgICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lOwogICAgfQogIGAuY3NzVGV4dDsKICAgICAgcmV0dXJuIHJldHVyblN0eWxlczsKICAgIH0pKCk7CiAgICBnbG9iYWxCYXNlU3R5bGVzID0gaWAKICAvKgogIEBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6ICdNYXRlcmlhbCBJY29ucyc7CiAgICBmb250LXN0eWxlOiBub3JtYWw7CiAgICBmb250LXdlaWdodDogNDAwOwogICAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL21hdGVyaWFsaWNvbnMvdjQyL2ZsVWhScTZ0elpjbFFFSi1WZGctSXVpYURzTmNJaFE4dFEud29mZjIpCiAgICAgIGZvcm1hdCgnd29mZjInKTsKICB9ICovCgogIC8qIGdsb2JhbCBib2R5IHN0eWxlcyAqLwogIGJvZHkgewogICAgbWFyZ2luOiAwcHg7CiAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCBzYW5zLXNlcmlmOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB9CgogIC8qIHNjcm9sbCBiYXIgc3R5bGVzICovCiAgJHtyKHNjcm9sbEJhclN0eWxlcyl9CmAuY3NzVGV4dDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5lbGVtZW50YmFzaWMuanMKdmFyIGRvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLCB7CiAgc2V0dXA6ICgpID0+IHNldHVwLAogIHN0YXRpY1N0eWxlczogKCkgPT4gc3RhdGljU3R5bGVzLAogIHN0eWxlczogKCkgPT4gc3R5bGVzCn0pOwp2YXIgc3RhdGljU3R5bGVzLCBzdHlsZXMsIHNldHVwOwp2YXIgaW5pdF9kb210b29sc19lbGVtZW50YmFzaWMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuZWxlbWVudGJhc2ljLmpzIigpIHsKICAgIGluaXRfZG9tdG9vbHNfcGx1Z2lucygpOwogICAgaW5pdF9kb210b29sc19jbGFzc2VzX2RvbXRvb2xzKCk7CiAgICBpbml0X2RvbXRvb2xzX2Nzc19iYXNlc3R5bGVzKCk7CiAgICBpbml0X2xpdCgpOwogICAgc3RhdGljU3R5bGVzID0gaWAKICAqIHsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xcywgY29sb3IgMC4xczsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgfQoKICA6aG9zdCB7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgc2Fucy1zZXJpZjsKICB9CgogICR7cihzY3JvbGxCYXJTdHlsZXMpfQpgOwogICAgc3R5bGVzID0gYjJgCiAgPHN0eWxlPgogICAgKiB7CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xcywgY29sb3IgMC4xczsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIH0KCiAgICA6aG9zdCB7CiAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIHNhbnMtc2VyaWY7CiAgICB9CgogICAgJHtzY3JvbGxCYXJTdHlsZXN9CiAgPC9zdHlsZT4KYDsKICAgIHNldHVwID0gYXN5bmMgKGVsZW1lbnRBcmcsIG9wdGlvbnNBcmcgPSB7fSkgPT4gewogICAgICBjb25zdCBkb21Ub29scyA9IGF3YWl0IERvbVRvb2xzLnNldHVwRG9tVG9vbHMob3B0aW9uc0FyZyk7CiAgICAgIGlmIChlbGVtZW50QXJnKSB7CiAgICAgIH0KICAgICAgZG9tVG9vbHMucnVuT25jZSgiZWxlbWVudEJhc2ljU2V0dXAiLCBhc3luYyAoKSA9PiB7CiAgICAgICAgZG9tVG9vbHMuc2V0R2xvYmFsU3R5bGVzKGdsb2JhbEJhc2VTdHlsZXMpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGRvbVRvb2xzOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jc3MuanMKdmFyIGRvbXRvb2xzX2Nzc19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRvbXRvb2xzX2Nzc19leHBvcnRzLCB7CiAgY3NzR3JpZENvbHVtbnM6ICgpID0+IGNzc0dyaWRDb2x1bW5zCn0pOwp2YXIgY3NzR3JpZENvbHVtbnM7CnZhciBpbml0X2RvbXRvb2xzX2NzcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jc3MuanMiKCkgewogICAgY3NzR3JpZENvbHVtbnMgPSAoYW1vdW50T2ZDb2x1bW5zQXJnLCBnYXBTaXplQXJnKSA9PiB7CiAgICAgIGxldCByZXR1cm5TdHJpbmcgPSBgYDsKICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgYW1vdW50T2ZDb2x1bW5zQXJnOyBpMTErKykgewogICAgICAgIHJldHVyblN0cmluZyArPSBgIGNhbGMoKDEwMCUvJHthbW91bnRPZkNvbHVtbnNBcmd9KSAtICgke2dhcFNpemVBcmcgKiAoYW1vdW50T2ZDb2x1bW5zQXJnIC0gMSl9cHgvJHthbW91bnRPZkNvbHVtbnNBcmd9KSlgOwogICAgICB9CiAgICAgIHJldHVybiByZXR1cm5TdHJpbmc7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLnBsdWdpbmV4cG9ydHMuanMKdmFyIGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMsIHsKICBTd2VldFNjcm9sbDogKCkgPT4gaW1wb3J0X3N3ZWV0X3Njcm9sbDIuZGVmYXVsdCwKICBzbWFydGRlbGF5OiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMzLAogIHNtYXJ0bWFya2Rvd246ICgpID0+IGRpc3RfdHNfZXhwb3J0czE3LAogIHNtYXJ0cHJvbWlzZTogKCkgPT4gZGlzdF90c19leHBvcnRzLAogIHNtYXJ0cm91dGVyOiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMxOCwKICBzbWFydHJ4OiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMyLAogIHNtYXJ0c3RhdGU6ICgpID0+IGRpc3RfdHNfZXhwb3J0czE5LAogIHNtYXJ0c3RyaW5nOiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMxMSwKICBzbWFydHVybDogKCkgPT4gZGlzdF90c19leHBvcnRzMjAsCiAgdHlwZWRyZXF1ZXN0OiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMxNQp9KTsKdmFyIGltcG9ydF9zd2VldF9zY3JvbGwyOwp2YXIgaW5pdF9kb210b29sc19wbHVnaW5leHBvcnRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLnBsdWdpbmV4cG9ydHMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMygpOwogICAgaW5pdF9kaXN0X3RzMTcoKTsKICAgIGluaXRfZGlzdF90cygpOwogICAgaW1wb3J0X3N3ZWV0X3Njcm9sbDIgPSBfX3RvRVNNKHJlcXVpcmVfc3dlZXRfc2Nyb2xsKCksIDEpOwogICAgaW5pdF9kaXN0X3RzMTkoKTsKICAgIGluaXRfZGlzdF90czE4KCk7CiAgICBpbml0X2Rpc3RfdHMyKCk7CiAgICBpbml0X2Rpc3RfdHMxMSgpOwogICAgaW5pdF9kaXN0X3RzMjAoKTsKICAgIGluaXRfZGlzdF90czE1KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czI1ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czI1LCB7CiAgRG9tVG9vbHM6ICgpID0+IERvbVRvb2xzLAogIFR5cGVkUmVxdWVzdDogKCkgPT4gVHlwZWRSZXF1ZXN0LAogIGJyZWFrcG9pbnRzOiAoKSA9PiBkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cywKICBjc3M6ICgpID0+IGRvbXRvb2xzX2Nzc19leHBvcnRzLAogIGVsZW1lbnRCYXNpYzogKCkgPT4gZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMsCiAgcGx1Z2luczogKCkgPT4gZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzCn0pOwp2YXIgaW5pdF9kaXN0X3RzMjUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9kb210b29sc19jb2xvcnMoKTsKICAgIGluaXRfZG9tdG9vbHNfZWxlbWVudGJhc2ljKCk7CiAgICBpbml0X2RvbXRvb2xzX2Nzc19icmVha3BvaW50cygpOwogICAgaW5pdF9kb210b29sc19jc3MoKTsKICAgIGluaXRfZG9tdG9vbHNfY2xhc3Nlc19kb210b29scygpOwogICAgaW5pdF9kaXN0X3RzMTUoKTsKICAgIGluaXRfZGlzdF90czI0KCk7CiAgICBpbml0X2RvbXRvb2xzX3BsdWdpbmV4cG9ydHMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvcGx1Z2lucy5qcwp2YXIgaXNvdW5pcXVlMywgbGl0Owp2YXIgaW5pdF9wbHVnaW5zMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvcGx1Z2lucy5qcyIoKSB7CiAgICBpc291bmlxdWUzID0gX190b0VTTShyZXF1aXJlX2Rpc3RfdHMoKSwgMSk7CiAgICBpbml0X2Rpc3RfdHMyKCk7CiAgICBpbml0X2xpdCgpOwogICAgaW5pdF9wcm9wZXJ0eTIoKTsKICAgIGluaXRfZGlzdF90czI1KCk7CiAgICBsaXQgPSB7CiAgICAgIGNzczogaSwKICAgICAgdW5zYWZlQ1NTOiByLAogICAgICBMaXRFbGVtZW50OiBpNCwKICAgICAgcHJvcGVydHk6IG41CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9jbGFzc2VzLmNzc21hbmFnZXIuanMKdmFyIENzc01hbmFnZXI7CnZhciBpbml0X2NsYXNzZXNfY3NzbWFuYWdlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvY2xhc3Nlcy5jc3NtYW5hZ2VyLmpzIigpIHsKICAgIGluaXRfbGl0KCk7CiAgICBpbml0X3BsdWdpbnMzKCk7CiAgICBpbml0X2Rpc3RfdHMyNSgpOwogICAgQ3NzTWFuYWdlciA9IGNsYXNzIF9Dc3NNYW5hZ2VyIHsKICAgICAgLy8gU1RBVElDCiAgICAgIHN0YXRpYyBpbnN0YW5jZSA9IG51bGw7CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgQ3NzTWFuYWdlcgogICAgICAgKi8KICAgICAgc3RhdGljIGdldFNpbmdsZXRvbigpIHsKICAgICAgICBpZiAoIV9Dc3NNYW5hZ2VyLmluc3RhbmNlKSB7CiAgICAgICAgICBfQ3NzTWFuYWdlci5pbnN0YW5jZSA9IG5ldyBfQ3NzTWFuYWdlcigpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX0Nzc01hbmFnZXIuaW5zdGFuY2U7CiAgICAgIH0KICAgICAgLy8gSU5TVEFOQ0UKICAgICAgZG9tdG9vbHNQcm9taXNlID0gRG9tVG9vbHMuc2V0dXBEb21Ub29scygpOwogICAgICBnb0JyaWdodCA9IGZhbHNlOwogICAgICBiZFZhclRyaXBsZXRTdG9yZSA9IFtdOwogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmRvbXRvb2xzUHJvbWlzZS50aGVuKGFzeW5jIChkb210b29sc0FyZykgPT4gewogICAgICAgICAgZG9tdG9vbHNBcmcudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoYXN5bmMgKGdvQnJpZ2h0QXJnKSA9PiB7CiAgICAgICAgICAgIHRoaXMuZ29CcmlnaHQgPSBnb0JyaWdodEFyZzsKICAgICAgICAgICAgYXdhaXQgZG9tdG9vbHNBcmcuZG9tUmVhZHkucHJvbWlzZTsKICAgICAgICAgICAgZm9yIChjb25zdCBiZFRyaXBsZXRBcmcgb2YgdGhpcy5iZFZhclRyaXBsZXRTdG9yZSkgewogICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkoYmRUcmlwbGV0QXJnLmNzc1Zhck5hbWUsIHRoaXMuZ29CcmlnaHQgPyBiZFRyaXBsZXRBcmcuYnJpZ2h0VmFsdWUgOiBiZFRyaXBsZXRBcmcuZGFya1ZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZ2V0IGRlZmF1bHRTdHlsZXMoKSB7CiAgICAgICAgcmV0dXJuIGRvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnN0YXRpY1N0eWxlczsKICAgICAgfQogICAgICBjc3NGb3JEZXNrdG9wKGNvbnRlbnRBcmcpIHsKICAgICAgICByZXR1cm4gcihkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cy5jc3NGb3JEZXNrdG9wKGNvbnRlbnRBcmcpKTsKICAgICAgfQogICAgICBjc3NGb3JOb3RlYm9vayhjb250ZW50QXJnKSB7CiAgICAgICAgcmV0dXJuIHIoZG9tdG9vbHNfY3NzX2JyZWFrcG9pbnRzX2V4cG9ydHMuY3NzRm9yTm90ZWJvb2soY29udGVudEFyZykpOwogICAgICB9CiAgICAgIGNzc0ZvclRhYmxldChjb250ZW50QXJnKSB7CiAgICAgICAgcmV0dXJuIHIoZG9tdG9vbHNfY3NzX2JyZWFrcG9pbnRzX2V4cG9ydHMuY3NzRm9yVGFibGV0KGNvbnRlbnRBcmcpKTsKICAgICAgfQogICAgICBjc3NGb3JQaGFibGV0KGNvbnRlbnRBcmcpIHsKICAgICAgICByZXR1cm4gcihkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cy5jc3NGb3JQaGFibGV0KGNvbnRlbnRBcmcpKTsKICAgICAgfQogICAgICBjc3NGb3JQaG9uZShjb250ZW50QXJnKSB7CiAgICAgICAgcmV0dXJuIHIoZG9tdG9vbHNfY3NzX2JyZWFrcG9pbnRzX2V4cG9ydHMuY3NzRm9yUGhvbmUoY29udGVudEFyZykpOwogICAgICB9CiAgICAgIGJkVGhlbWUoYnJpZ2h0VmFsdWVBcmcsIGRhcmtWYWx1ZUFyZykgewogICAgICAgIGxldCByZXR1cm5Dc3NWYXI7CiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZTsKICAgICAgICBpZiAoRG9tVG9vbHMuZ2V0R2xvYmFsRG9tVG9vbHNTeW5jKCkpIHsKICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IERvbVRvb2xzLmdldEdsb2JhbERvbVRvb2xzU3luYygpLnRoZW1lTWFuYWdlci5nb0JyaWdodEJvb2xlYW4gPyBicmlnaHRWYWx1ZUFyZyA6IGRhcmtWYWx1ZUFyZzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGVmYXVsdFZhbHVlID0gZGFya1ZhbHVlQXJnOwogICAgICAgIH0KICAgICAgICBjb25zdCBleGlzdGluZ1RyaXBsZXQgPSB0aGlzLmJkVmFyVHJpcGxldFN0b3JlLmZpbmQoKHRyaXBsZXRBcmcpID0+IHRyaXBsZXRBcmcuZGFya1ZhbHVlID09PSBkYXJrVmFsdWVBcmcgJiYgdHJpcGxldEFyZy5icmlnaHRWYWx1ZSA9PT0gYnJpZ2h0VmFsdWVBcmcpOwogICAgICAgIGlmIChleGlzdGluZ1RyaXBsZXQpIHsKICAgICAgICAgIHJldHVybkNzc1ZhciA9IGV4aXN0aW5nVHJpcGxldC5jc3NWYXJOYW1lOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBuZXdUcmlwbGV0ID0gewogICAgICAgICAgICBjc3NWYXJOYW1lOiBgLS0ke2lzb3VuaXF1ZTMudW5pKCl9YCwKICAgICAgICAgICAgYnJpZ2h0VmFsdWU6IGJyaWdodFZhbHVlQXJnLAogICAgICAgICAgICBkYXJrVmFsdWU6IGRhcmtWYWx1ZUFyZwogICAgICAgICAgfTsKICAgICAgICAgIHRoaXMuYmRWYXJUcmlwbGV0U3RvcmUucHVzaChuZXdUcmlwbGV0KTsKICAgICAgICAgIHRoaXMuZG9tdG9vbHNQcm9taXNlLnRoZW4oYXN5bmMgKGRvbXRvb2xzQXJnKSA9PiB7CiAgICAgICAgICAgIGF3YWl0IGRvbXRvb2xzQXJnLmRvbVJlYWR5LnByb21pc2U7CiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkobmV3VHJpcGxldC5jc3NWYXJOYW1lLCBkZWZhdWx0VmFsdWUpOwogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm5Dc3NWYXIgPSBuZXdUcmlwbGV0LmNzc1Zhck5hbWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaXQudW5zYWZlQ1NTKGB2YXIoJHtyZXR1cm5Dc3NWYXJ9LCAke2RlZmF1bHRWYWx1ZX0pYCk7CiAgICAgIH0KICAgICAgY3NzR3JpZENvbHVtbnMgPSAoYW1vdW50T2ZDb2x1bW5zQXJnLCBnYXBTaXplQXJnKSA9PiB7CiAgICAgICAgbGV0IHJldHVyblN0cmluZyA9IGBgOwogICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGFtb3VudE9mQ29sdW1uc0FyZzsgaTExKyspIHsKICAgICAgICAgIHJldHVyblN0cmluZyArPSBgIGNhbGMoKDEwMCUvJHthbW91bnRPZkNvbHVtbnNBcmd9KSAtICgke2dhcFNpemVBcmcgKiAoYW1vdW50T2ZDb2x1bW5zQXJnIC0gMSl9cHgvJHthbW91bnRPZkNvbHVtbnNBcmd9KSlgOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGl0LnVuc2FmZUNTUyhyZXR1cm5TdHJpbmcpOwogICAgICB9OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9zdGF0aWMuanMKdmFyIGEzLCBvNywgczQsIGk1LCBsMywgbjcsIHUzLCBjNCwgJDI7CnZhciBpbml0X3N0YXRpYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9zdGF0aWMuanMiKCkgewogICAgaW5pdF9saXRfaHRtbCgpOwogICAgYTMgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sLmZvcigiIiksIG83ID0gKHQ5KSA9PiB7CiAgICAgIGlmICh0OT8uciA9PT0gYTMpIHJldHVybiB0OT8uXyRsaXRTdGF0aWMkOwogICAgfSwgczQgPSAodDkpID0+ICh7IF8kbGl0U3RhdGljJDogdDksIHI6IGEzIH0pLCBpNSA9ICh0OSwgLi4ucjExKSA9PiAoeyBfJGxpdFN0YXRpYyQ6IHIxMS5yZWR1Y2UoKHIxMiwgZTExLCBhNSkgPT4gcjEyICsgKCh0MTApID0+IHsKICAgICAgaWYgKHZvaWQgMCAhPT0gdDEwLl8kbGl0U3RhdGljJCkgcmV0dXJuIHQxMC5fJGxpdFN0YXRpYyQ7CiAgICAgIHRocm93IEVycm9yKGBWYWx1ZSBwYXNzZWQgdG8gJ2xpdGVyYWwnIGZ1bmN0aW9uIG11c3QgYmUgYSAnbGl0ZXJhbCcgcmVzdWx0OiAke3QxMH0uIFVzZSAndW5zYWZlU3RhdGljJyB0byBwYXNzIG5vbi1saXRlcmFsIHZhbHVlcywgYnV0CiAgICAgICAgICAgIHRha2UgY2FyZSB0byBlbnN1cmUgcGFnZSBzZWN1cml0eS5gKTsKICAgIH0pKGUxMSkgKyB0OVthNSArIDFdLCB0OVswXSksIHI6IGEzIH0pLCBsMyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIG43ID0gKHQ5KSA9PiAocjExLCAuLi5lMTEpID0+IHsKICAgICAgY29uc3QgYTUgPSBlMTEubGVuZ3RoOwogICAgICBsZXQgczksIGkxMTsKICAgICAgY29uc3QgbjEzID0gW10sIHU3ID0gW107CiAgICAgIGxldCBjMTEsICQzID0gMCwgZjcgPSBmYWxzZTsKICAgICAgZm9yICg7ICQzIDwgYTU7ICkgewogICAgICAgIGZvciAoYzExID0gcjExWyQzXTsgJDMgPCBhNSAmJiB2b2lkIDAgIT09IChpMTEgPSBlMTFbJDNdLCBzOSA9IG83KGkxMSkpOyApIGMxMSArPSBzOSArIHIxMVsrKyQzXSwgZjcgPSB0cnVlOwogICAgICAgICQzICE9PSBhNSAmJiB1Ny5wdXNoKGkxMSksIG4xMy5wdXNoKGMxMSksICQzKys7CiAgICAgIH0KICAgICAgaWYgKCQzID09PSBhNSAmJiBuMTMucHVzaChyMTFbYTVdKSwgZjcpIHsKICAgICAgICBjb25zdCB0MTAgPSBuMTMuam9pbigiJCRsaXQkJCIpOwogICAgICAgIHZvaWQgMCA9PT0gKHIxMSA9IGwzLmdldCh0MTApKSAmJiAobjEzLnJhdyA9IG4xMywgbDMuc2V0KHQxMCwgcjExID0gbjEzKSksIGUxMSA9IHU3OwogICAgICB9CiAgICAgIHJldHVybiB0OShyMTEsIC4uLmUxMSk7CiAgICB9LCB1MyA9IG43KGIyKSwgYzQgPSBuNyh3KSwgJDIgPSBuNyhUKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L3N0YXRpYy1odG1sLmpzCnZhciBpbml0X3N0YXRpY19odG1sID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvc3RhdGljLWh0bWwuanMiKCkgewogICAgaW5pdF9zdGF0aWMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmUuanMKdmFyIHQzLCBlNCwgaTY7CnZhciBpbml0X2RpcmVjdGl2ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmUuanMiKCkgewogICAgdDMgPSB7IEFUVFJJQlVURTogMSwgQ0hJTEQ6IDIsIFBST1BFUlRZOiAzLCBCT09MRUFOX0FUVFJJQlVURTogNCwgRVZFTlQ6IDUsIEVMRU1FTlQ6IDYgfSwgZTQgPSAodDkpID0+ICguLi5lMTEpID0+ICh7IF8kbGl0RGlyZWN0aXZlJDogdDksIHZhbHVlczogZTExIH0pOwogICAgaTYgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHQ5KSB7CiAgICAgIH0KICAgICAgZ2V0IF8kQVUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuXyRBTS5fJEFVOwogICAgICB9CiAgICAgIF8kQVQodDksIGUxMSwgaTExKSB7CiAgICAgICAgdGhpcy5fJEN0ID0gdDksIHRoaXMuXyRBTSA9IGUxMSwgdGhpcy5fJENpID0gaTExOwogICAgICB9CiAgICAgIF8kQVModDksIGUxMSkgewogICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZSh0OSwgZTExKTsKICAgICAgfQogICAgICB1cGRhdGUodDksIGUxMSkgewogICAgICAgIHJldHVybiB0aGlzLnJlbmRlciguLi5lMTEpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvdW5zYWZlLWh0bWwuanMKdmFyIGU1LCBvODsKdmFyIGluaXRfdW5zYWZlX2h0bWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcyIoKSB7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBpbml0X2RpcmVjdGl2ZSgpOwogICAgZTUgPSBjbGFzcyBleHRlbmRzIGk2IHsKICAgICAgY29uc3RydWN0b3IoaTExKSB7CiAgICAgICAgaWYgKHN1cGVyKGkxMSksIHRoaXMuaXQgPSBBLCBpMTEudHlwZSAhPT0gdDMuQ0hJTEQpIHRocm93IEVycm9yKHRoaXMuY29uc3RydWN0b3IuZGlyZWN0aXZlTmFtZSArICIoKSBjYW4gb25seSBiZSB1c2VkIGluIGNoaWxkIGJpbmRpbmdzIik7CiAgICAgIH0KICAgICAgcmVuZGVyKHIxMSkgewogICAgICAgIGlmIChyMTEgPT09IEEgfHwgbnVsbCA9PSByMTEpIHJldHVybiB0aGlzLl90ID0gdm9pZCAwLCB0aGlzLml0ID0gcjExOwogICAgICAgIGlmIChyMTEgPT09IEUpIHJldHVybiByMTE7CiAgICAgICAgaWYgKCJzdHJpbmciICE9IHR5cGVvZiByMTEpIHRocm93IEVycm9yKHRoaXMuY29uc3RydWN0b3IuZGlyZWN0aXZlTmFtZSArICIoKSBjYWxsZWQgd2l0aCBhIG5vbi1zdHJpbmcgdmFsdWUiKTsKICAgICAgICBpZiAocjExID09PSB0aGlzLml0KSByZXR1cm4gdGhpcy5fdDsKICAgICAgICB0aGlzLml0ID0gcjExOwogICAgICAgIGNvbnN0IHM5ID0gW3IxMV07CiAgICAgICAgcmV0dXJuIHM5LnJhdyA9IHM5LCB0aGlzLl90ID0geyBfJGxpdFR5cGUkOiB0aGlzLmNvbnN0cnVjdG9yLnJlc3VsdFR5cGUsIHN0cmluZ3M6IHM5LCB2YWx1ZXM6IFtdIH07CiAgICAgIH0KICAgIH07CiAgICBlNS5kaXJlY3RpdmVOYW1lID0gInVuc2FmZUhUTUwiLCBlNS5yZXN1bHRUeXBlID0gMTsKICAgIG84ID0gZTQoZTUpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcwp2YXIgaW5pdF91bnNhZmVfaHRtbDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzIigpIHsKICAgIGluaXRfdW5zYWZlX2h0bWwoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvY3VzdG9tLWVsZW1lbnQuanMKdmFyIHQ0Owp2YXIgaW5pdF9jdXN0b21fZWxlbWVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvY3VzdG9tLWVsZW1lbnQuanMiKCkgewogICAgdDQgPSAodDkpID0+IChlMTEsIG8xMykgPT4gewogICAgICB2b2lkIDAgIT09IG8xMyA/IG8xMy5hZGRJbml0aWFsaXplcigoKSA9PiB7CiAgICAgICAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKHQ5LCBlMTEpOwogICAgICB9KSA6IGN1c3RvbUVsZW1lbnRzLmRlZmluZSh0OSwgZTExKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kZWNvcmF0b3JzL2N1c3RvbS1lbGVtZW50LmpzCnZhciBpbml0X2N1c3RvbV9lbGVtZW50MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RlY29yYXRvcnMvY3VzdG9tLWVsZW1lbnQuanMiKCkgewogICAgaW5pdF9jdXN0b21fZWxlbWVudCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9zdGF0ZS5qcwpmdW5jdGlvbiByNShyMTEpIHsKICByZXR1cm4gbjUoeyAuLi5yMTEsIHN0YXRlOiB0cnVlLCBhdHRyaWJ1dGU6IGZhbHNlIH0pOwp9CnZhciBpbml0X3N0YXRlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvc3RhdGUuanMiKCkgewogICAgaW5pdF9wcm9wZXJ0eSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9ldmVudC1vcHRpb25zLmpzCmZ1bmN0aW9uIHQ1KHQ5KSB7CiAgcmV0dXJuIChuMTMsIG8xMykgPT4gewogICAgY29uc3QgYzExID0gImZ1bmN0aW9uIiA9PSB0eXBlb2YgbjEzID8gbjEzIDogbjEzW28xM107CiAgICBPYmplY3QuYXNzaWduKGMxMSwgdDkpOwogIH07Cn0KdmFyIGluaXRfZXZlbnRfb3B0aW9ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvZXZlbnQtb3B0aW9ucy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL2Jhc2UuanMKdmFyIGU2Owp2YXIgaW5pdF9iYXNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9iYXNlLmpzIigpIHsKICAgIGU2ID0gKGUxMSwgdDksIGMxMSkgPT4gKGMxMS5jb25maWd1cmFibGUgPSB0cnVlLCBjMTEuZW51bWVyYWJsZSA9IHRydWUsIFJlZmxlY3QuZGVjb3JhdGUgJiYgIm9iamVjdCIgIT0gdHlwZW9mIHQ5ICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlMTEsIHQ5LCBjMTEpLCBjMTEpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS5qcwpmdW5jdGlvbiBlNyhlMTEsIHIxMSkgewogIHJldHVybiAobjEzLCBzOSwgaTExKSA9PiB7CiAgICBjb25zdCBvMTMgPSAodDkpID0+IHQ5LnJlbmRlclJvb3Q/LnF1ZXJ5U2VsZWN0b3IoZTExKSA/PyBudWxsOwogICAgaWYgKHIxMSkgewogICAgICBjb25zdCB7IGdldDogZTEyLCBzZXQ6IHIxMiB9ID0gIm9iamVjdCIgPT0gdHlwZW9mIHM5ID8gbjEzIDogaTExID8/IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gewogICAgICAgIGNvbnN0IHQ5ID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpOwogICAgICAgIHJldHVybiB7IGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzW3Q5XTsKICAgICAgICB9LCBzZXQoZTEzKSB7CiAgICAgICAgICB0aGlzW3Q5XSA9IGUxMzsKICAgICAgICB9IH07CiAgICAgIH0pKCk7CiAgICAgIHJldHVybiBlNihuMTMsIHM5LCB7IGdldCgpIHsKICAgICAgICBsZXQgdDkgPSBlMTIuY2FsbCh0aGlzKTsKICAgICAgICByZXR1cm4gdm9pZCAwID09PSB0OSAmJiAodDkgPSBvMTModGhpcyksIChudWxsICE9PSB0OSB8fCB0aGlzLmhhc1VwZGF0ZWQpICYmIHIxMi5jYWxsKHRoaXMsIHQ5KSksIHQ5OwogICAgICB9IH0pOwogICAgfQogICAgcmV0dXJuIGU2KG4xMywgczksIHsgZ2V0KCkgewogICAgICByZXR1cm4gbzEzKHRoaXMpOwogICAgfSB9KTsKICB9Owp9CnZhciBpbml0X3F1ZXJ5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS5qcyIoKSB7CiAgICBpbml0X2Jhc2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYWxsLmpzCmZ1bmN0aW9uIHI2KHIxMSkgewogIHJldHVybiAobjEzLCBvMTMpID0+IGU2KG4xMywgbzEzLCB7IGdldCgpIHsKICAgIHJldHVybiAodGhpcy5yZW5kZXJSb290ID8/IChlOCA/Pz0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKSkucXVlcnlTZWxlY3RvckFsbChyMTEpOwogIH0gfSk7Cn0KdmFyIGU4Owp2YXIgaW5pdF9xdWVyeV9hbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFsbC5qcyIoKSB7CiAgICBpbml0X2Jhc2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXN5bmMuanMKZnVuY3Rpb24gcjcocjExKSB7CiAgcmV0dXJuIChuMTMsIGUxMSkgPT4gZTYobjEzLCBlMTEsIHsgYXN5bmMgZ2V0KCkgewogICAgcmV0dXJuIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGUsIHRoaXMucmVuZGVyUm9vdD8ucXVlcnlTZWxlY3RvcihyMTEpID8/IG51bGw7CiAgfSB9KTsKfQp2YXIgaW5pdF9xdWVyeV9hc3luYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXN5bmMuanMiKCkgewogICAgaW5pdF9iYXNlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFzc2lnbmVkLWVsZW1lbnRzLmpzCmZ1bmN0aW9uIG85KG8xMykgewogIHJldHVybiAoZTExLCBuMTMpID0+IHsKICAgIGNvbnN0IHsgc2xvdDogcjExLCBzZWxlY3RvcjogczkgfSA9IG8xMyA/PyB7fSwgYzExID0gInNsb3QiICsgKHIxMSA/IGBbbmFtZT0ke3IxMX1dYCA6ICI6bm90KFtuYW1lXSkiKTsKICAgIHJldHVybiBlNihlMTEsIG4xMywgeyBnZXQoKSB7CiAgICAgIGNvbnN0IHQ5ID0gdGhpcy5yZW5kZXJSb290Py5xdWVyeVNlbGVjdG9yKGMxMSksIGUxMiA9IHQ5Py5hc3NpZ25lZEVsZW1lbnRzKG8xMykgPz8gW107CiAgICAgIHJldHVybiB2b2lkIDAgPT09IHM5ID8gZTEyIDogZTEyLmZpbHRlcigodDEwKSA9PiB0MTAubWF0Y2hlcyhzOSkpOwogICAgfSB9KTsKICB9Owp9CnZhciBpbml0X3F1ZXJ5X2Fzc2lnbmVkX2VsZW1lbnRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3NpZ25lZC1lbGVtZW50cy5qcyIoKSB7CiAgICBpbml0X2Jhc2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXNzaWduZWQtbm9kZXMuanMKZnVuY3Rpb24gbjgobjEzKSB7CiAgcmV0dXJuIChvMTMsIHIxMSkgPT4gewogICAgY29uc3QgeyBzbG90OiBlMTEgfSA9IG4xMyA/PyB7fSwgczkgPSAic2xvdCIgKyAoZTExID8gYFtuYW1lPSR7ZTExfV1gIDogIjpub3QoW25hbWVdKSIpOwogICAgcmV0dXJuIGU2KG8xMywgcjExLCB7IGdldCgpIHsKICAgICAgY29uc3QgdDkgPSB0aGlzLnJlbmRlclJvb3Q/LnF1ZXJ5U2VsZWN0b3IoczkpOwogICAgICByZXR1cm4gdDk/LmFzc2lnbmVkTm9kZXMobjEzKSA/PyBbXTsKICAgIH0gfSk7CiAgfTsKfQp2YXIgaW5pdF9xdWVyeV9hc3NpZ25lZF9ub2RlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXNzaWduZWQtbm9kZXMuanMiKCkgewogICAgaW5pdF9iYXNlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kZWNvcmF0b3JzLmpzCnZhciBpbml0X2RlY29yYXRvcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kZWNvcmF0b3JzLmpzIigpIHsKICAgIGluaXRfY3VzdG9tX2VsZW1lbnQoKTsKICAgIGluaXRfcHJvcGVydHkoKTsKICAgIGluaXRfc3RhdGUyKCk7CiAgICBpbml0X2V2ZW50X29wdGlvbnMoKTsKICAgIGluaXRfcXVlcnkoKTsKICAgIGluaXRfcXVlcnlfYWxsKCk7CiAgICBpbml0X3F1ZXJ5X2FzeW5jKCk7CiAgICBpbml0X3F1ZXJ5X2Fzc2lnbmVkX2VsZW1lbnRzKCk7CiAgICBpbml0X3F1ZXJ5X2Fzc2lnbmVkX25vZGVzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2NsYXNzZXMuZGVlcy1lbGVtZW50LmpzCnZhciBfX2VzRGVjb3JhdGUyLCBfX3J1bkluaXRpYWxpemVyczMsIERlZXNFbGVtZW50Owp2YXIgaW5pdF9jbGFzc2VzX2RlZXNfZWxlbWVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvY2xhc3Nlcy5kZWVzLWVsZW1lbnQuanMiKCkgewogICAgaW5pdF9wbHVnaW5zMygpOwogICAgX19lc0RlY29yYXRlMiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNFbGVtZW50ID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gbGl0LkxpdEVsZW1lbnQ7CiAgICAgIGxldCBfZ29CcmlnaHRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9nb0JyaWdodF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9nb0JyaWdodF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2RvbXRvb2xzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZG9tdG9vbHNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZG9tdG9vbHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgcmV0dXJuIGNsYXNzIERlZXNFbGVtZW50IGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9nb0JyaWdodF9kZWNvcmF0b3JzID0gW2xpdC5wcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX2RvbXRvb2xzX2RlY29yYXRvcnMgPSBbbGl0LnByb3BlcnR5KCldOwogICAgICAgICAgX19lc0RlY29yYXRlMih0aGlzLCBudWxsLCBfZ29CcmlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZ29CcmlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImdvQnJpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmdvQnJpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZ29CcmlnaHQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2dvQnJpZ2h0X2luaXRpYWxpemVycywgX2dvQnJpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTIodGhpcywgbnVsbCwgX2RvbXRvb2xzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRvbXRvb2xzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkb210b29scyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kb210b29scywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmRvbXRvb2xzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kb210b29sc19pbml0aWFsaXplcnMsIF9kb210b29sc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgICNnb0JyaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzKHRoaXMsIF9nb0JyaWdodF9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgICAgICAvLyBJTlNUQU5DRQogICAgICAgIGdldCBnb0JyaWdodCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNnb0JyaWdodF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZ29CcmlnaHQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNnb0JyaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAvLyBkb210b29scwogICAgICAgIGRvbXRvb2xzUHJvbWlzZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMyh0aGlzLCBfZ29CcmlnaHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICNkb210b29sc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzKHRoaXMsIF9kb210b29sc19pbml0aWFsaXplcnMsIHZvaWQgMCk7CiAgICAgICAgZ2V0IGRvbXRvb2xzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2RvbXRvb2xzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBkb210b29scyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2RvbXRvb2xzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHJ4U3Vic2NyaXB0aW9ucyA9IChfX3J1bkluaXRpYWxpemVyczModGhpcywgX2RvbXRvb2xzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgW10pOwogICAgICAgIHRoZW1lU3Vic2NyaXB0aW9uOwogICAgICAgIGVsZW1lbnREb21SZWFkeURlZmVycmVkID0gZGlzdF90c19leHBvcnRzMjUucGx1Z2lucy5zbWFydHByb21pc2UuZGVmZXIoKTsKICAgICAgICBlbGVtZW50RG9tUmVhZHkgPSB0aGlzLmVsZW1lbnREb21SZWFkeURlZmVycmVkLnByb21pc2U7CiAgICAgICAgY29uc3RydWN0b3Iob3B0aW9uc0FyZyA9IHt9KSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgdGhpcy5kb210b29sc1Byb21pc2UgPSBkaXN0X3RzX2V4cG9ydHMyNS5lbGVtZW50QmFzaWMuc2V0dXAodGhpcywgb3B0aW9uc0FyZyk7CiAgICAgICAgICB0aGlzLmRvbXRvb2xzUHJvbWlzZS50aGVuKChkb210b29sc0FyZykgPT4gewogICAgICAgICAgICB0aGlzLmRvbXRvb2xzID0gZG9tdG9vbHNBcmc7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgY29uc3QgZG9tdG9vbHMgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgICAgIHRoaXMudGhlbWVTdWJzY3JpcHRpb24gPSBkb210b29scy50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZ29CcmlnaHRBcmcpID0+IHsKICAgICAgICAgICAgdGhpcy5nb0JyaWdodCA9IGdvQnJpZ2h0QXJnOwogICAgICAgICAgICBpZiAodGhpcy50aGVtZUNoYW5nZWQpIHsKICAgICAgICAgICAgICB0aGlzLnRoZW1lQ2hhbmdlZChnb0JyaWdodEFyZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5yeFN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRoZW1lU3Vic2NyaXB0aW9uKTsKICAgICAgICAgIGZvciAoY29uc3Qgc3RhcnR1cEZ1bmN0aW9uIG9mIHRoaXMuc3RhcnR1cEZ1bmN0aW9ucykgewogICAgICAgICAgICBhd2FpdCBzdGFydHVwRnVuY3Rpb24oKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRlZXNFbGVtZW50Q29ubmVjdGVkIikpOwogICAgICAgIH0KICAgICAgICBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgICAgICBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgICAgIHRoaXMuZWxlbWVudERvbVJlYWR5RGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgIH0KICAgICAgICBzdGFydHVwRnVuY3Rpb25zID0gW107CiAgICAgICAgcmVnaXN0ZXJTdGFydHVwRnVuY3Rpb24oc3RhcnR1cEZ1bmN0aW9uQXJnKSB7CiAgICAgICAgICB0aGlzLnN0YXJ0dXBGdW5jdGlvbnMucHVzaChzdGFydHVwRnVuY3Rpb25BcmcpOwogICAgICAgIH0KICAgICAgICBnYXJiYWdlRnVuY3Rpb25zID0gW107CiAgICAgICAgcmVnaXN0ZXJHYXJiYWdlRnVuY3Rpb24oZ2FyYmFnZUZ1bmN0aW9uQXJnKSB7CiAgICAgICAgICB0aGlzLmdhcmJhZ2VGdW5jdGlvbnMucHVzaChnYXJiYWdlRnVuY3Rpb25BcmcpOwogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHRoaXMucnhTdWJzY3JpcHRpb25zKSB7CiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChjb25zdCBnYXJiYWdlRnVuY3Rpb24gb2YgdGhpcy5nYXJiYWdlRnVuY3Rpb25zKSB7CiAgICAgICAgICAgIGF3YWl0IGdhcmJhZ2VGdW5jdGlvbigpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZGVlc0VsZW1lbnREaXNjb25uZWN0ZWQiKSk7CiAgICAgICAgfQogICAgICB9OwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmUtaGVscGVycy5qcwp2YXIgdDYsIGk3LCBuOSwgZTksIGw0LCBkNCwgYzUsIGY0LCByOCwgczUsIHYzLCB1NCwgbTMsIHA1LCBNMiwgaDQsIGoyOwp2YXIgaW5pdF9kaXJlY3RpdmVfaGVscGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmUtaGVscGVycy5qcyIoKSB7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICAoeyBJOiB0NiB9ID0gaiksIGk3ID0gKG8xMykgPT4gbzEzLCBuOSA9IChvMTMpID0+IG51bGwgPT09IG8xMyB8fCAib2JqZWN0IiAhPSB0eXBlb2YgbzEzICYmICJmdW5jdGlvbiIgIT0gdHlwZW9mIG8xMywgZTkgPSB7IEhUTUw6IDEsIFNWRzogMiwgTUFUSE1MOiAzIH0sIGw0ID0gKG8xMywgdDkpID0+IHZvaWQgMCA9PT0gdDkgPyB2b2lkIDAgIT09IG8xMz8uXyRsaXRUeXBlJCA6IG8xMz8uXyRsaXRUeXBlJCA9PT0gdDksIGQ0ID0gKG8xMykgPT4gbnVsbCAhPSBvMTM/Ll8kbGl0VHlwZSQ/LmgsIGM1ID0gKG8xMykgPT4gdm9pZCAwICE9PSBvMTM/Ll8kbGl0RGlyZWN0aXZlJCwgZjQgPSAobzEzKSA9PiBvMTM/Ll8kbGl0RGlyZWN0aXZlJCwgcjggPSAobzEzKSA9PiB2b2lkIDAgPT09IG8xMy5zdHJpbmdzLCBzNSA9ICgpID0+IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpLCB2MyA9IChvMTMsIG4xMywgZTExKSA9PiB7CiAgICAgIGNvbnN0IGw2ID0gbzEzLl8kQUEucGFyZW50Tm9kZSwgZDYgPSB2b2lkIDAgPT09IG4xMyA/IG8xMy5fJEFCIDogbjEzLl8kQUE7CiAgICAgIGlmICh2b2lkIDAgPT09IGUxMSkgewogICAgICAgIGNvbnN0IGkxMSA9IGw2Lmluc2VydEJlZm9yZShzNSgpLCBkNiksIG4xNCA9IGw2Lmluc2VydEJlZm9yZShzNSgpLCBkNik7CiAgICAgICAgZTExID0gbmV3IHQ2KGkxMSwgbjE0LCBvMTMsIG8xMy5vcHRpb25zKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCB0OSA9IGUxMS5fJEFCLm5leHRTaWJsaW5nLCBuMTQgPSBlMTEuXyRBTSwgYzExID0gbjE0ICE9PSBvMTM7CiAgICAgICAgaWYgKGMxMSkgewogICAgICAgICAgbGV0IHQxMDsKICAgICAgICAgIGUxMS5fJEFRPy4obzEzKSwgZTExLl8kQU0gPSBvMTMsIHZvaWQgMCAhPT0gZTExLl8kQVAgJiYgKHQxMCA9IG8xMy5fJEFVKSAhPT0gbjE0Ll8kQVUgJiYgZTExLl8kQVAodDEwKTsKICAgICAgICB9CiAgICAgICAgaWYgKHQ5ICE9PSBkNiB8fCBjMTEpIHsKICAgICAgICAgIGxldCBvMTQgPSBlMTEuXyRBQTsKICAgICAgICAgIGZvciAoOyBvMTQgIT09IHQ5OyApIHsKICAgICAgICAgICAgY29uc3QgdDEwID0gaTcobzE0KS5uZXh0U2libGluZzsKICAgICAgICAgICAgaTcobDYpLmluc2VydEJlZm9yZShvMTQsIGQ2KSwgbzE0ID0gdDEwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZTExOwogICAgfSwgdTQgPSAobzEzLCB0OSwgaTExID0gbzEzKSA9PiAobzEzLl8kQUkodDksIGkxMSksIG8xMyksIG0zID0ge30sIHA1ID0gKG8xMywgdDkgPSBtMykgPT4gbzEzLl8kQUggPSB0OSwgTTIgPSAobzEzKSA9PiBvMTMuXyRBSCwgaDQgPSAobzEzKSA9PiB7CiAgICAgIG8xMy5fJEFSKCksIG8xMy5fJEFBLnJlbW92ZSgpOwogICAgfSwgajIgPSAobzEzKSA9PiB7CiAgICAgIG8xMy5fJEFSKCk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2FzeW5jLWRpcmVjdGl2ZS5qcwpmdW5jdGlvbiBoNShpMTEpIHsKICB2b2lkIDAgIT09IHRoaXMuXyRBTiA/IChvMTAodGhpcyksIHRoaXMuXyRBTSA9IGkxMSwgcjkodGhpcykpIDogdGhpcy5fJEFNID0gaTExOwp9CmZ1bmN0aW9uIG4xMChpMTEsIHQ5ID0gZmFsc2UsIGUxMSA9IDApIHsKICBjb25zdCByMTEgPSB0aGlzLl8kQUgsIGg5ID0gdGhpcy5fJEFOOwogIGlmICh2b2lkIDAgIT09IGg5ICYmIDAgIT09IGg5LnNpemUpIGlmICh0OSkgaWYgKEFycmF5LmlzQXJyYXkocjExKSkgZm9yIChsZXQgaTEyID0gZTExOyBpMTIgPCByMTEubGVuZ3RoOyBpMTIrKykgczYocjExW2kxMl0sIGZhbHNlKSwgbzEwKHIxMVtpMTJdKTsKICBlbHNlIG51bGwgIT0gcjExICYmIChzNihyMTEsIGZhbHNlKSwgbzEwKHIxMSkpOwogIGVsc2UgczYodGhpcywgaTExKTsKfQp2YXIgczYsIG8xMCwgcjksIGM2LCBmNTsKdmFyIGluaXRfYXN5bmNfZGlyZWN0aXZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2FzeW5jLWRpcmVjdGl2ZS5qcyIoKSB7CiAgICBpbml0X2RpcmVjdGl2ZV9oZWxwZXJzKCk7CiAgICBpbml0X2RpcmVjdGl2ZSgpOwogICAgaW5pdF9kaXJlY3RpdmUoKTsKICAgIHM2ID0gKGkxMSwgdDkpID0+IHsKICAgICAgY29uc3QgZTExID0gaTExLl8kQU47CiAgICAgIGlmICh2b2lkIDAgPT09IGUxMSkgcmV0dXJuIGZhbHNlOwogICAgICBmb3IgKGNvbnN0IGkxMiBvZiBlMTEpIGkxMi5fJEFPPy4odDksIGZhbHNlKSwgczYoaTEyLCB0OSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSwgbzEwID0gKGkxMSkgPT4gewogICAgICBsZXQgdDksIGUxMTsKICAgICAgZG8gewogICAgICAgIGlmICh2b2lkIDAgPT09ICh0OSA9IGkxMS5fJEFNKSkgYnJlYWs7CiAgICAgICAgZTExID0gdDkuXyRBTiwgZTExLmRlbGV0ZShpMTEpLCBpMTEgPSB0OTsKICAgICAgfSB3aGlsZSAoMCA9PT0gZTExPy5zaXplKTsKICAgIH0sIHI5ID0gKGkxMSkgPT4gewogICAgICBmb3IgKGxldCB0OTsgdDkgPSBpMTEuXyRBTTsgaTExID0gdDkpIHsKICAgICAgICBsZXQgZTExID0gdDkuXyRBTjsKICAgICAgICBpZiAodm9pZCAwID09PSBlMTEpIHQ5Ll8kQU4gPSBlMTEgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICAgIGVsc2UgaWYgKGUxMS5oYXMoaTExKSkgYnJlYWs7CiAgICAgICAgZTExLmFkZChpMTEpLCBjNih0OSk7CiAgICAgIH0KICAgIH07CiAgICBjNiA9IChpMTEpID0+IHsKICAgICAgaTExLnR5cGUgPT0gdDMuQ0hJTEQgJiYgKGkxMS5fJEFQID8/PSBuMTAsIGkxMS5fJEFRID8/PSBoNSk7CiAgICB9OwogICAgZjUgPSBjbGFzcyBleHRlbmRzIGk2IHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKSwgdGhpcy5fJEFOID0gdm9pZCAwOwogICAgICB9CiAgICAgIF8kQVQoaTExLCB0OSwgZTExKSB7CiAgICAgICAgc3VwZXIuXyRBVChpMTEsIHQ5LCBlMTEpLCByOSh0aGlzKSwgdGhpcy5pc0Nvbm5lY3RlZCA9IGkxMS5fJEFVOwogICAgICB9CiAgICAgIF8kQU8oaTExLCB0OSA9IHRydWUpIHsKICAgICAgICBpMTEgIT09IHRoaXMuaXNDb25uZWN0ZWQgJiYgKHRoaXMuaXNDb25uZWN0ZWQgPSBpMTEsIGkxMSA/IHRoaXMucmVjb25uZWN0ZWQ/LigpIDogdGhpcy5kaXNjb25uZWN0ZWQ/LigpKSwgdDkgJiYgKHM2KHRoaXMsIGkxMSksIG8xMCh0aGlzKSk7CiAgICAgIH0KICAgICAgc2V0VmFsdWUodDkpIHsKICAgICAgICBpZiAocjgodGhpcy5fJEN0KSkgdGhpcy5fJEN0Ll8kQUkodDksIHRoaXMpOwogICAgICAgIGVsc2UgewogICAgICAgICAgY29uc3QgaTExID0gWy4uLnRoaXMuXyRDdC5fJEFIXTsKICAgICAgICAgIGkxMVt0aGlzLl8kQ2ldID0gdDksIHRoaXMuXyRDdC5fJEFJKGkxMSwgdGhpcywgMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZCgpIHsKICAgICAgfQogICAgICByZWNvbm5lY3RlZCgpIHsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2FzeW5jLWRpcmVjdGl2ZS5qcwp2YXIgaW5pdF9hc3luY19kaXJlY3RpdmUyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvYXN5bmMtZGlyZWN0aXZlLmpzIigpIHsKICAgIGluaXRfYXN5bmNfZGlyZWN0aXZlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2RpcmVjdGl2ZXMvY2xhc3Nlcy5yZXNvbHZlZGlyZWN0aXZlLmpzCnZhciBSZXNvbHZlRGlyZWN0aXZlLCByZXNvbHZlLCByZXNvbHZlRXhlYzsKdmFyIGluaXRfY2xhc3Nlc19yZXNvbHZlZGlyZWN0aXZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9kaXJlY3RpdmVzL2NsYXNzZXMucmVzb2x2ZWRpcmVjdGl2ZS5qcyIoKSB7CiAgICBpbml0X2xpdCgpOwogICAgaW5pdF9hc3luY19kaXJlY3RpdmUyKCk7CiAgICBSZXNvbHZlRGlyZWN0aXZlID0gY2xhc3MgZXh0ZW5kcyBmNSB7CiAgICAgIHByb21pc2U7CiAgICAgIGhhc1Byb21pc2VTZXR0bGVkID0gZmFsc2U7CiAgICAgIHJlbmRlcihwcm9taXNlKSB7CiAgICAgICAgaWYgKHRoaXMucHJvbWlzZSAhPT0gcHJvbWlzZSkgewogICAgICAgICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTsKICAgICAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKSB7CiAgICAgICAgICAgIHRoaXMuaGFuZGxlUHJvbWlzZShwcm9taXNlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEU7CiAgICAgIH0KICAgICAgaGFuZGxlUHJvbWlzZShwcm9taXNlKSB7CiAgICAgICAgdGhpcy5oYXNQcm9taXNlU2V0dGxlZCA9IGZhbHNlOwogICAgICAgIHByb21pc2UudGhlbigodmFsdWUyKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5wcm9taXNlID09PSBwcm9taXNlICYmICF0aGlzLmhhc1Byb21pc2VTZXR0bGVkKSB7CiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUyKTsKICAgICAgICAgICAgdGhpcy5oYXNQcm9taXNlU2V0dGxlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5wcm9taXNlID09PSBwcm9taXNlICYmICF0aGlzLmhhc1Byb21pc2VTZXR0bGVkKSB7CiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoZXJyb3IpOwogICAgICAgICAgICB0aGlzLmhhc1Byb21pc2VTZXR0bGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBkaXNjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5oYXNQcm9taXNlU2V0dGxlZCA9IHRydWU7CiAgICAgIH0KICAgICAgcmVjb25uZWN0ZWQoKSB7CiAgICAgICAgaWYgKCF0aGlzLmhhc1Byb21pc2VTZXR0bGVkKSB7CiAgICAgICAgICB0aGlzLmhhbmRsZVByb21pc2UodGhpcy5wcm9taXNlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICByZXNvbHZlID0gZTQoUmVzb2x2ZURpcmVjdGl2ZSk7CiAgICByZXNvbHZlRXhlYyA9IChmdW5jQXJnKSA9PiB7CiAgICAgIHJldHVybiByZXNvbHZlKGZ1bmNBcmcoKSk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9kaXJlY3RpdmVzL2NsYXNzZXMuc3Vic2NyaWJlZGlyZWN0aXZlLmpzCnZhciBTdWJzY3JpYmVEaXJlY3RpdmUsIHN1YnNjcmliZTsKdmFyIGluaXRfY2xhc3Nlc19zdWJzY3JpYmVkaXJlY3RpdmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2RpcmVjdGl2ZXMvY2xhc3Nlcy5zdWJzY3JpYmVkaXJlY3RpdmUuanMiKCkgewogICAgaW5pdF9saXQoKTsKICAgIGluaXRfYXN5bmNfZGlyZWN0aXZlMigpOwogICAgaW5pdF9kaXN0X3RzMigpOwogICAgU3Vic2NyaWJlRGlyZWN0aXZlID0gY2xhc3MgZXh0ZW5kcyBmNSB7CiAgICAgIG9ic2VydmFibGU7CiAgICAgIHN1YiA9IG51bGw7CiAgICAgIHJlbmRlcihvYnNlcnZhYmxlMikgewogICAgICAgIGlmICh0aGlzLm9ic2VydmFibGUgIT09IG9ic2VydmFibGUyKSB7CiAgICAgICAgICB0aGlzLnN1Yj8udW5zdWJzY3JpYmUoKTsKICAgICAgICAgIHRoaXMub2JzZXJ2YWJsZSA9IG9ic2VydmFibGUyOwogICAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQpIHsKICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmUob2JzZXJ2YWJsZTIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gRTsKICAgICAgfQogICAgICBzdWJzY3JpYmUob2JzZXJ2YWJsZTIpIHsKICAgICAgICB0aGlzLnN1YiA9IG9ic2VydmFibGUyLnN1YnNjcmliZSgodjUpID0+IHsKICAgICAgICAgIHRoaXMuc2V0VmFsdWUodjUpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLnN1Yj8udW5zdWJzY3JpYmUoKTsKICAgICAgfQogICAgICByZWNvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLnN1YnNjcmliZSh0aGlzLm9ic2VydmFibGUpOwogICAgICB9CiAgICB9OwogICAgc3Vic2NyaWJlID0gZTQoU3Vic2NyaWJlRGlyZWN0aXZlKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvZGlyZWN0aXZlcy9jbGFzc2VzLnN1YnNjcmliZXdpdGh0ZW1wbGF0ZS5qcwp2YXIgU3Vic2NyaWJlV2l0aFRlbXBsYXRlRGlyZWN0aXZlLCBzdWJzY3JpYmVXaXRoVGVtcGxhdGU7CnZhciBpbml0X2NsYXNzZXNfc3Vic2NyaWJld2l0aHRlbXBsYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9kaXJlY3RpdmVzL2NsYXNzZXMuc3Vic2NyaWJld2l0aHRlbXBsYXRlLmpzIigpIHsKICAgIGluaXRfbGl0KCk7CiAgICBpbml0X2FzeW5jX2RpcmVjdGl2ZTIoKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIFN1YnNjcmliZVdpdGhUZW1wbGF0ZURpcmVjdGl2ZSA9IGNsYXNzIGV4dGVuZHMgZjUgewogICAgICBvYnNlcnZhYmxlOwogICAgICB0ZW1wbGF0ZUZuOwogICAgICBzdWIgPSBudWxsOwogICAgICByZW5kZXIob2JzZXJ2YWJsZTIsIHRlbXBsYXRlRm4pIHsKICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5vYnNlcnZhYmxlICE9PSBvYnNlcnZhYmxlMiB8fCB0aGlzLnRlbXBsYXRlRm4gIT09IHRlbXBsYXRlRm47CiAgICAgICAgaWYgKGNoYW5nZWQpIHsKICAgICAgICAgIHRoaXMuc3ViPy51bnN1YnNjcmliZSgpOwogICAgICAgICAgdGhpcy5vYnNlcnZhYmxlID0gb2JzZXJ2YWJsZTI7CiAgICAgICAgICB0aGlzLnRlbXBsYXRlRm4gPSB0ZW1wbGF0ZUZuOwogICAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQpIHsKICAgICAgICAgICAgdGhpcy5zdGFydFN1YnNjcmlwdGlvbigpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gRTsKICAgICAgfQogICAgICBzdGFydFN1YnNjcmlwdGlvbigpIHsKICAgICAgICB0aGlzLnN1YiA9IHRoaXMub2JzZXJ2YWJsZS5zdWJzY3JpYmUoKHY1KSA9PiB7CiAgICAgICAgICBjb25zdCBvdXQgPSB0aGlzLnRlbXBsYXRlRm4odjUpOwogICAgICAgICAgdGhpcy5zZXRWYWx1ZShvdXQpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLnN1Yj8udW5zdWJzY3JpYmUoKTsKICAgICAgfQogICAgICByZWNvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLnN0YXJ0U3Vic2NyaXB0aW9uKCk7CiAgICAgIH0KICAgIH07CiAgICBzdWJzY3JpYmVXaXRoVGVtcGxhdGUgPSBlNChTdWJzY3JpYmVXaXRoVGVtcGxhdGVEaXJlY3RpdmUpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvcHJpdmF0ZS1hc3luYy1oZWxwZXJzLmpzCnZhciB0NywgczcsIGk4Owp2YXIgaW5pdF9wcml2YXRlX2FzeW5jX2hlbHBlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy9wcml2YXRlLWFzeW5jLWhlbHBlcnMuanMiKCkgewogICAgdDcgPSBhc3luYyAodDksIHM5KSA9PiB7CiAgICAgIGZvciBhd2FpdCAoY29uc3QgaTExIG9mIHQ5KSBpZiAoZmFsc2UgPT09IGF3YWl0IHM5KGkxMSkpIHJldHVybjsKICAgIH07CiAgICBzNyA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodDkpIHsKICAgICAgICB0aGlzLkcgPSB0OTsKICAgICAgfQogICAgICBkaXNjb25uZWN0KCkgewogICAgICAgIHRoaXMuRyA9IHZvaWQgMDsKICAgICAgfQogICAgICByZWNvbm5lY3QodDkpIHsKICAgICAgICB0aGlzLkcgPSB0OTsKICAgICAgfQogICAgICBkZXJlZigpIHsKICAgICAgICByZXR1cm4gdGhpcy5HOwogICAgICB9CiAgICB9OwogICAgaTggPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuWSA9IHZvaWQgMCwgdGhpcy5aID0gdm9pZCAwOwogICAgICB9CiAgICAgIGdldCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5ZOwogICAgICB9CiAgICAgIHBhdXNlKCkgewogICAgICAgIHRoaXMuWSA/Pz0gbmV3IFByb21pc2UoKHQ5KSA9PiB0aGlzLlogPSB0OSk7CiAgICAgIH0KICAgICAgcmVzdW1lKCkgewogICAgICAgIHRoaXMuWj8uKCksIHRoaXMuWSA9IHRoaXMuWiA9IHZvaWQgMDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL3VudGlsLmpzCnZhciBuMTEsIGg2LCBjNywgbTQ7CnZhciBpbml0X3VudGlsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvdW50aWwuanMiKCkgewogICAgaW5pdF9saXRfaHRtbCgpOwogICAgaW5pdF9kaXJlY3RpdmVfaGVscGVycygpOwogICAgaW5pdF9hc3luY19kaXJlY3RpdmUoKTsKICAgIGluaXRfcHJpdmF0ZV9hc3luY19oZWxwZXJzKCk7CiAgICBpbml0X2RpcmVjdGl2ZSgpOwogICAgbjExID0gKHQ5KSA9PiAhbjkodDkpICYmICJmdW5jdGlvbiIgPT0gdHlwZW9mIHQ5LnRoZW4sIGg2ID0gMTA3Mzc0MTgyMzsKICAgIGM3ID0gY2xhc3MgZXh0ZW5kcyBmNSB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyksIHRoaXMuXyRDd3QgPSBoNiwgdGhpcy5fJENidCA9IFtdLCB0aGlzLl8kQ0sgPSBuZXcgczcodGhpcyksIHRoaXMuXyRDWCA9IG5ldyBpOCgpOwogICAgICB9CiAgICAgIHJlbmRlciguLi5zOSkgewogICAgICAgIHJldHVybiBzOS5maW5kKCh0OSkgPT4gIW4xMSh0OSkpID8/IEU7CiAgICAgIH0KICAgICAgdXBkYXRlKHM5LCBpMTEpIHsKICAgICAgICBjb25zdCBlMTEgPSB0aGlzLl8kQ2J0OwogICAgICAgIGxldCByMTEgPSBlMTEubGVuZ3RoOwogICAgICAgIHRoaXMuXyRDYnQgPSBpMTE7CiAgICAgICAgY29uc3QgbzEzID0gdGhpcy5fJENLLCBjMTEgPSB0aGlzLl8kQ1g7CiAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCB8fCB0aGlzLmRpc2Nvbm5lY3RlZCgpOwogICAgICAgIGZvciAobGV0IHQ5ID0gMDsgdDkgPCBpMTEubGVuZ3RoICYmICEodDkgPiB0aGlzLl8kQ3d0KTsgdDkrKykgewogICAgICAgICAgY29uc3QgczEwID0gaTExW3Q5XTsKICAgICAgICAgIGlmICghbjExKHMxMCkpIHJldHVybiB0aGlzLl8kQ3d0ID0gdDksIHMxMDsKICAgICAgICAgIHQ5IDwgcjExICYmIHMxMCA9PT0gZTExW3Q5XSB8fCAodGhpcy5fJEN3dCA9IGg2LCByMTEgPSAwLCBQcm9taXNlLnJlc29sdmUoczEwKS50aGVuKGFzeW5jICh0MTApID0+IHsKICAgICAgICAgICAgZm9yICg7IGMxMS5nZXQoKTsgKSBhd2FpdCBjMTEuZ2V0KCk7CiAgICAgICAgICAgIGNvbnN0IGkxMiA9IG8xMy5kZXJlZigpOwogICAgICAgICAgICBpZiAodm9pZCAwICE9PSBpMTIpIHsKICAgICAgICAgICAgICBjb25zdCBlMTIgPSBpMTIuXyRDYnQuaW5kZXhPZihzMTApOwogICAgICAgICAgICAgIGUxMiA+IC0xICYmIGUxMiA8IGkxMi5fJEN3dCAmJiAoaTEyLl8kQ3d0ID0gZTEyLCBpMTIuc2V0VmFsdWUodDEwKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEU7CiAgICAgIH0KICAgICAgZGlzY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuXyRDSy5kaXNjb25uZWN0KCksIHRoaXMuXyRDWC5wYXVzZSgpOwogICAgICB9CiAgICAgIHJlY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuXyRDSy5yZWNvbm5lY3QodGhpcyksIHRoaXMuXyRDWC5yZXN1bWUoKTsKICAgICAgfQogICAgfTsKICAgIG00ID0gZTQoYzcpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGlyZWN0aXZlcy91bnRpbC5qcwp2YXIgaW5pdF91bnRpbDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL3VudGlsLmpzIigpIHsKICAgIGluaXRfdW50aWwoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL2FzeW5jLXJlcGxhY2UuanMKdmFyIG8xMSwgaDc7CnZhciBpbml0X2FzeW5jX3JlcGxhY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy9hc3luYy1yZXBsYWNlLmpzIigpIHsKICAgIGluaXRfbGl0X2h0bWwoKTsKICAgIGluaXRfYXN5bmNfZGlyZWN0aXZlKCk7CiAgICBpbml0X3ByaXZhdGVfYXN5bmNfaGVscGVycygpOwogICAgaW5pdF9kaXJlY3RpdmUoKTsKICAgIG8xMSA9IGNsYXNzIGV4dGVuZHMgZjUgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpLCB0aGlzLl8kQ0sgPSBuZXcgczcodGhpcyksIHRoaXMuXyRDWCA9IG5ldyBpOCgpOwogICAgICB9CiAgICAgIHJlbmRlcihpMTEsIHM5KSB7CiAgICAgICAgcmV0dXJuIEU7CiAgICAgIH0KICAgICAgdXBkYXRlKGkxMSwgW3M5LCByMTFdKSB7CiAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQgfHwgdGhpcy5kaXNjb25uZWN0ZWQoKSwgczkgPT09IHRoaXMuXyRDSikgcmV0dXJuIEU7CiAgICAgICAgdGhpcy5fJENKID0gczk7CiAgICAgICAgbGV0IG4xMyA9IDA7CiAgICAgICAgY29uc3QgeyBfJENLOiBvMTMsIF8kQ1g6IGg5IH0gPSB0aGlzOwogICAgICAgIHJldHVybiB0NyhzOSwgYXN5bmMgKHQ5KSA9PiB7CiAgICAgICAgICBmb3IgKDsgaDkuZ2V0KCk7ICkgYXdhaXQgaDkuZ2V0KCk7CiAgICAgICAgICBjb25zdCBpMTIgPSBvMTMuZGVyZWYoKTsKICAgICAgICAgIGlmICh2b2lkIDAgIT09IGkxMikgewogICAgICAgICAgICBpZiAoaTEyLl8kQ0ogIT09IHM5KSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIHZvaWQgMCAhPT0gcjExICYmICh0OSA9IHIxMSh0OSwgbjEzKSksIGkxMi5jb21taXRWYWx1ZSh0OSwgbjEzKSwgbjEzKys7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9KSwgRTsKICAgICAgfQogICAgICBjb21taXRWYWx1ZSh0OSwgaTExKSB7CiAgICAgICAgdGhpcy5zZXRWYWx1ZSh0OSk7CiAgICAgIH0KICAgICAgZGlzY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuXyRDSy5kaXNjb25uZWN0KCksIHRoaXMuXyRDWC5wYXVzZSgpOwogICAgICB9CiAgICAgIHJlY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuXyRDSy5yZWNvbm5lY3QodGhpcyksIHRoaXMuXyRDWC5yZXN1bWUoKTsKICAgICAgfQogICAgfTsKICAgIGg3ID0gZTQobzExKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL2FzeW5jLWFwcGVuZC5qcwp2YXIgYzg7CnZhciBpbml0X2FzeW5jX2FwcGVuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL2FzeW5jLWFwcGVuZC5qcyIoKSB7CiAgICBpbml0X2RpcmVjdGl2ZSgpOwogICAgaW5pdF9hc3luY19yZXBsYWNlKCk7CiAgICBpbml0X2RpcmVjdGl2ZV9oZWxwZXJzKCk7CiAgICBjOCA9IGU0KGNsYXNzIGV4dGVuZHMgbzExIHsKICAgICAgY29uc3RydWN0b3IocjExKSB7CiAgICAgICAgaWYgKHN1cGVyKHIxMSksIHIxMS50eXBlICE9PSB0My5DSElMRCkgdGhyb3cgRXJyb3IoImFzeW5jQXBwZW5kIGNhbiBvbmx5IGJlIHVzZWQgaW4gY2hpbGQgZXhwcmVzc2lvbnMiKTsKICAgICAgfQogICAgICB1cGRhdGUocjExLCBlMTEpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEN0dCA9IHIxMSwgc3VwZXIudXBkYXRlKHIxMSwgZTExKTsKICAgICAgfQogICAgICBjb21taXRWYWx1ZShyMTEsIGUxMSkgewogICAgICAgIDAgPT09IGUxMSAmJiBqMih0aGlzLl8kQ3R0KTsKICAgICAgICBjb25zdCBzOSA9IHYzKHRoaXMuXyRDdHQpOwogICAgICAgIHU0KHM5LCByMTEpOwogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RpcmVjdGl2ZXMvYXN5bmMtYXBwZW5kLmpzCnZhciBpbml0X2FzeW5jX2FwcGVuZDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL2FzeW5jLWFwcGVuZC5qcyIoKSB7CiAgICBpbml0X2FzeW5jX2FwcGVuZCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMva2V5ZWQuanMKdmFyIGk5Owp2YXIgaW5pdF9rZXllZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL2tleWVkLmpzIigpIHsKICAgIGluaXRfbGl0X2h0bWwoKTsKICAgIGluaXRfZGlyZWN0aXZlKCk7CiAgICBpbml0X2RpcmVjdGl2ZV9oZWxwZXJzKCk7CiAgICBpOSA9IGU0KGNsYXNzIGV4dGVuZHMgaTYgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpLCB0aGlzLmtleSA9IEE7CiAgICAgIH0KICAgICAgcmVuZGVyKHIxMSwgdDkpIHsKICAgICAgICByZXR1cm4gdGhpcy5rZXkgPSByMTEsIHQ5OwogICAgICB9CiAgICAgIHVwZGF0ZShyMTEsIFt0OSwgZTExXSkgewogICAgICAgIHJldHVybiB0OSAhPT0gdGhpcy5rZXkgJiYgKHA1KHIxMSksIHRoaXMua2V5ID0gdDkpLCBlMTE7CiAgICAgIH0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGlyZWN0aXZlcy9rZXllZC5qcwp2YXIgaW5pdF9rZXllZDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL2tleWVkLmpzIigpIHsKICAgIGluaXRfa2V5ZWQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL3JlcGVhdC5qcwp2YXIgdTUsIGM5Owp2YXIgaW5pdF9yZXBlYXQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvcmVwZWF0LmpzIigpIHsKICAgIGluaXRfbGl0X2h0bWwoKTsKICAgIGluaXRfZGlyZWN0aXZlKCk7CiAgICBpbml0X2RpcmVjdGl2ZV9oZWxwZXJzKCk7CiAgICB1NSA9IChlMTEsIHM5LCB0OSkgPT4gewogICAgICBjb25zdCByMTEgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICBmb3IgKGxldCBsNiA9IHM5OyBsNiA8PSB0OTsgbDYrKykgcjExLnNldChlMTFbbDZdLCBsNik7CiAgICAgIHJldHVybiByMTE7CiAgICB9LCBjOSA9IGU0KGNsYXNzIGV4dGVuZHMgaTYgewogICAgICBjb25zdHJ1Y3RvcihlMTEpIHsKICAgICAgICBpZiAoc3VwZXIoZTExKSwgZTExLnR5cGUgIT09IHQzLkNISUxEKSB0aHJvdyBFcnJvcigicmVwZWF0KCkgY2FuIG9ubHkgYmUgdXNlZCBpbiB0ZXh0IGV4cHJlc3Npb25zIik7CiAgICAgIH0KICAgICAgZHQoZTExLCBzOSwgdDkpIHsKICAgICAgICBsZXQgcjExOwogICAgICAgIHZvaWQgMCA9PT0gdDkgPyB0OSA9IHM5IDogdm9pZCAwICE9PSBzOSAmJiAocjExID0gczkpOwogICAgICAgIGNvbnN0IGw2ID0gW10sIG8xMyA9IFtdOwogICAgICAgIGxldCBpMTEgPSAwOwogICAgICAgIGZvciAoY29uc3QgczEwIG9mIGUxMSkgbDZbaTExXSA9IHIxMSA/IHIxMShzMTAsIGkxMSkgOiBpMTEsIG8xM1tpMTFdID0gdDkoczEwLCBpMTEpLCBpMTErKzsKICAgICAgICByZXR1cm4geyB2YWx1ZXM6IG8xMywga2V5czogbDYgfTsKICAgICAgfQogICAgICByZW5kZXIoZTExLCBzOSwgdDkpIHsKICAgICAgICByZXR1cm4gdGhpcy5kdChlMTEsIHM5LCB0OSkudmFsdWVzOwogICAgICB9CiAgICAgIHVwZGF0ZShzOSwgW3Q5LCByMTEsIGMxMV0pIHsKICAgICAgICBjb25zdCBkNiA9IE0yKHM5KSwgeyB2YWx1ZXM6IHA3LCBrZXlzOiBhNSB9ID0gdGhpcy5kdCh0OSwgcjExLCBjMTEpOwogICAgICAgIGlmICghQXJyYXkuaXNBcnJheShkNikpIHJldHVybiB0aGlzLnV0ID0gYTUsIHA3OwogICAgICAgIGNvbnN0IGg5ID0gdGhpcy51dCA/Pz0gW10sIHY1ID0gW107CiAgICAgICAgbGV0IG02LCB5NSwgeDMgPSAwLCBqNCA9IGQ2Lmxlbmd0aCAtIDEsIGs0ID0gMCwgdzMgPSBwNy5sZW5ndGggLSAxOwogICAgICAgIGZvciAoOyB4MyA8PSBqNCAmJiBrNCA8PSB3MzsgKSBpZiAobnVsbCA9PT0gZDZbeDNdKSB4MysrOwogICAgICAgIGVsc2UgaWYgKG51bGwgPT09IGQ2W2o0XSkgajQtLTsKICAgICAgICBlbHNlIGlmIChoOVt4M10gPT09IGE1W2s0XSkgdjVbazRdID0gdTQoZDZbeDNdLCBwN1trNF0pLCB4MysrLCBrNCsrOwogICAgICAgIGVsc2UgaWYgKGg5W2o0XSA9PT0gYTVbdzNdKSB2NVt3M10gPSB1NChkNltqNF0sIHA3W3czXSksIGo0LS0sIHczLS07CiAgICAgICAgZWxzZSBpZiAoaDlbeDNdID09PSBhNVt3M10pIHY1W3czXSA9IHU0KGQ2W3gzXSwgcDdbdzNdKSwgdjMoczksIHY1W3czICsgMV0sIGQ2W3gzXSksIHgzKyssIHczLS07CiAgICAgICAgZWxzZSBpZiAoaDlbajRdID09PSBhNVtrNF0pIHY1W2s0XSA9IHU0KGQ2W2o0XSwgcDdbazRdKSwgdjMoczksIGQ2W3gzXSwgZDZbajRdKSwgajQtLSwgazQrKzsKICAgICAgICBlbHNlIGlmICh2b2lkIDAgPT09IG02ICYmIChtNiA9IHU1KGE1LCBrNCwgdzMpLCB5NSA9IHU1KGg5LCB4MywgajQpKSwgbTYuaGFzKGg5W3gzXSkpIGlmIChtNi5oYXMoaDlbajRdKSkgewogICAgICAgICAgY29uc3QgZTExID0geTUuZ2V0KGE1W2s0XSksIHQxMCA9IHZvaWQgMCAhPT0gZTExID8gZDZbZTExXSA6IG51bGw7CiAgICAgICAgICBpZiAobnVsbCA9PT0gdDEwKSB7CiAgICAgICAgICAgIGNvbnN0IGUxMiA9IHYzKHM5LCBkNlt4M10pOwogICAgICAgICAgICB1NChlMTIsIHA3W2s0XSksIHY1W2s0XSA9IGUxMjsKICAgICAgICAgIH0gZWxzZSB2NVtrNF0gPSB1NCh0MTAsIHA3W2s0XSksIHYzKHM5LCBkNlt4M10sIHQxMCksIGQ2W2UxMV0gPSBudWxsOwogICAgICAgICAgazQrKzsKICAgICAgICB9IGVsc2UgaDQoZDZbajRdKSwgajQtLTsKICAgICAgICBlbHNlIGg0KGQ2W3gzXSksIHgzKys7CiAgICAgICAgZm9yICg7IGs0IDw9IHczOyApIHsKICAgICAgICAgIGNvbnN0IGUxMSA9IHYzKHM5LCB2NVt3MyArIDFdKTsKICAgICAgICAgIHU0KGUxMSwgcDdbazRdKSwgdjVbazQrK10gPSBlMTE7CiAgICAgICAgfQogICAgICAgIGZvciAoOyB4MyA8PSBqNDsgKSB7CiAgICAgICAgICBjb25zdCBlMTEgPSBkNlt4MysrXTsKICAgICAgICAgIG51bGwgIT09IGUxMSAmJiBoNChlMTEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy51dCA9IGE1LCBwNShzOSwgdjUpLCBFOwogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RpcmVjdGl2ZXMvcmVwZWF0LmpzCnZhciBpbml0X3JlcGVhdDMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL3JlcGVhdC5qcyIoKSB7CiAgICBpbml0X3JlcGVhdDIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvZGlyZWN0aXZlcy9pbmRleC5qcwp2YXIgZGlyZWN0aXZlc19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRpcmVjdGl2ZXNfZXhwb3J0cywgewogIGFzeW5jQXBwZW5kOiAoKSA9PiBjOCwKICBrZXllZDogKCkgPT4gaTksCiAgcmVwZWF0OiAoKSA9PiBjOSwKICByZXNvbHZlOiAoKSA9PiByZXNvbHZlLAogIHJlc29sdmVFeGVjOiAoKSA9PiByZXNvbHZlRXhlYywKICBzdWJzY3JpYmU6ICgpID0+IHN1YnNjcmliZSwKICBzdWJzY3JpYmVXaXRoVGVtcGxhdGU6ICgpID0+IHN1YnNjcmliZVdpdGhUZW1wbGF0ZSwKICB1bnRpbDogKCkgPT4gbTQKfSk7CnZhciBpbml0X2RpcmVjdGl2ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2RpcmVjdGl2ZXMvaW5kZXguanMiKCkgewogICAgaW5pdF9jbGFzc2VzX3Jlc29sdmVkaXJlY3RpdmUoKTsKICAgIGluaXRfY2xhc3Nlc19zdWJzY3JpYmVkaXJlY3RpdmUoKTsKICAgIGluaXRfY2xhc3Nlc19zdWJzY3JpYmV3aXRodGVtcGxhdGUoKTsKICAgIGluaXRfdW50aWwyKCk7CiAgICBpbml0X2FzeW5jX2FwcGVuZDIoKTsKICAgIGluaXRfa2V5ZWQyKCk7CiAgICBpbml0X3JlcGVhdDMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czI2ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czI2LCB7CiAgRGVlc0VsZW1lbnQ6ICgpID0+IERlZXNFbGVtZW50LAogIGNzczogKCkgPT4gaSwKICBjc3NNYW5hZ2VyOiAoKSA9PiBjc3NNYW5hZ2VyLAogIGN1c3RvbUVsZW1lbnQ6ICgpID0+IHQ0LAogIGRpcmVjdGl2ZXM6ICgpID0+IGRpcmVjdGl2ZXNfZXhwb3J0cywKICBkb210b29sczogKCkgPT4gZGlzdF90c19leHBvcnRzMjUsCiAgaHRtbDogKCkgPT4gYjIsCiAgcHJvcGVydHk6ICgpID0+IG41LAogIHF1ZXJ5OiAoKSA9PiBlNywKICBxdWVyeUFsbDogKCkgPT4gcjYsCiAgcXVlcnlBc3luYzogKCkgPT4gcjcsCiAgcmVuZGVyOiAoKSA9PiBELAogIHN0YXRlOiAoKSA9PiByNSwKICBzdGF0aWM6ICgpID0+IHUzLAogIHVuc2FmZUNTUzogKCkgPT4gciwKICB1bnNhZmVIVE1MOiAoKSA9PiBvOCwKICB1bnNhZmVTdGF0aWM6ICgpID0+IHM0Cn0pOwp2YXIgY3NzTWFuYWdlcjsKdmFyIGluaXRfZGlzdF90czI2ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfY3NzbWFuYWdlcigpOwogICAgaW5pdF9saXQoKTsKICAgIGluaXRfc3RhdGljX2h0bWwoKTsKICAgIGluaXRfdW5zYWZlX2h0bWwyKCk7CiAgICBpbml0X2N1c3RvbV9lbGVtZW50MigpOwogICAgaW5pdF9kZWNvcmF0b3JzKCk7CiAgICBpbml0X2Rpc3RfdHMyNSgpOwogICAgaW5pdF9jbGFzc2VzX2RlZXNfZWxlbWVudCgpOwogICAgaW5pdF9kaXJlY3RpdmVzKCk7CiAgICBjc3NNYW5hZ2VyID0gQ3NzTWFuYWdlci5nZXRTaW5nbGV0b24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMHRoZW1lLmpzCnZhciB0aGVtZURlZmF1bHRzLCB0aGVtZURlZmF1bHRTdHlsZXM7CnZhciBpbml0X3RoZW1lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwdGhlbWUuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjYoKTsKICAgIHRoZW1lRGVmYXVsdHMgPSB7CiAgICAgIGNvbG9yczogewogICAgICAgIGxpZ2h0OiB7CiAgICAgICAgICBiZ1ByaW1hcnk6ICIjZmZmZmZmIiwKICAgICAgICAgIGJnU2Vjb25kYXJ5OiAiI2ZhZmFmYSIsCiAgICAgICAgICBiZ1RlcnRpYXJ5OiAiI2Y0ZjRmNSIsCiAgICAgICAgICB0ZXh0UHJpbWFyeTogIiMwOTA5MGIiLAogICAgICAgICAgdGV4dFNlY29uZGFyeTogIiMzNzQxNTEiLAogICAgICAgICAgdGV4dE11dGVkOiAiIzcxNzE3YSIsCiAgICAgICAgICBib3JkZXJEZWZhdWx0OiAiI2U1ZTdlYiIsCiAgICAgICAgICBib3JkZXJTdWJ0bGU6ICIjZjRmNGY1IiwKICAgICAgICAgIGJvcmRlclN0cm9uZzogIiNkMWQ1ZGIiLAogICAgICAgICAgYWNjZW50UHJpbWFyeTogIiMzYjgyZjYiLAogICAgICAgICAgYWNjZW50U3VjY2VzczogIiMyMmM1NWUiLAogICAgICAgICAgYWNjZW50V2FybmluZzogIiNmNTllMGIiLAogICAgICAgICAgYWNjZW50RXJyb3I6ICIjZWY0NDQ0IgogICAgICAgIH0sCiAgICAgICAgZGFyazogewogICAgICAgICAgYmdQcmltYXJ5OiAiIzA5MDkwYiIsCiAgICAgICAgICBiZ1NlY29uZGFyeTogIiMwYTBhMGEiLAogICAgICAgICAgYmdUZXJ0aWFyeTogIiMxODE4MWIiLAogICAgICAgICAgdGV4dFByaW1hcnk6ICIjZmFmYWZhIiwKICAgICAgICAgIHRleHRTZWNvbmRhcnk6ICIjZDRkNGQ4IiwKICAgICAgICAgIHRleHRNdXRlZDogIiNhMWExYWEiLAogICAgICAgICAgYm9yZGVyRGVmYXVsdDogIiMyNzI3MmEiLAogICAgICAgICAgYm9yZGVyU3VidGxlOiAiIzFhMWExYSIsCiAgICAgICAgICBib3JkZXJTdHJvbmc6ICIjM2YzZjQ2IiwKICAgICAgICAgIGFjY2VudFByaW1hcnk6ICIjM2I4MmY2IiwKICAgICAgICAgIGFjY2VudFN1Y2Nlc3M6ICIjMjJjNTVlIiwKICAgICAgICAgIGFjY2VudFdhcm5pbmc6ICIjZjU5ZTBiIiwKICAgICAgICAgIGFjY2VudEVycm9yOiAiI2VmNDQ0NCIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHNwYWNpbmc6IHsKICAgICAgICB4czogIjRweCIsCiAgICAgICAgc206ICI4cHgiLAogICAgICAgIG1kOiAiMTJweCIsCiAgICAgICAgbGc6ICIxNnB4IiwKICAgICAgICB4bDogIjI0cHgiLAogICAgICAgICIyeGwiOiAiMzJweCIsCiAgICAgICAgIjN4bCI6ICI0OHB4IgogICAgICB9LAogICAgICByYWRpdXM6IHsKICAgICAgICB4czogIjJweCIsCiAgICAgICAgc206ICI0cHgiLAogICAgICAgIG1kOiAiNnB4IiwKICAgICAgICBsZzogIjhweCIsCiAgICAgICAgeGw6ICIxMnB4IiwKICAgICAgICBmdWxsOiAiOTk5cHgiCiAgICAgIH0sCiAgICAgIHNoYWRvd3M6IHsKICAgICAgICB4czogIjAgMXB4IDJweCAwIHJnYigwIDAgMCAvIDAuMDUpIiwKICAgICAgICBzbTogIjAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSkiLAogICAgICAgIG1kOiAiMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xNSkiLAogICAgICAgIGxnOiAiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpIgogICAgICB9LAogICAgICB0cmFuc2l0aW9uczogewogICAgICAgIGZhc3Q6ICIwLjFzIiwKICAgICAgICBkZWZhdWx0OiAiMC4xNXMiLAogICAgICAgIHNsb3c6ICIwLjJzIiwKICAgICAgICBzbG93ZXI6ICIwLjNzIgogICAgICB9LAogICAgICBjb250cm9sSGVpZ2h0czogewogICAgICAgIHNtOiAiMzJweCIsCiAgICAgICAgbWQ6ICIzNnB4IiwKICAgICAgICBsZzogIjQwcHgiLAogICAgICAgIHhsOiAiNDhweCIKICAgICAgfQogICAgfTsKICAgIHRoZW1lRGVmYXVsdFN0eWxlcyA9IGlgCiAgOmhvc3QgewogICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICogU3BhY2luZyBTY2FsZQogICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogICAgLS1kZWVzLXNwYWNpbmcteHM6IDRweDsKICAgIC0tZGVlcy1zcGFjaW5nLXNtOiA4cHg7CiAgICAtLWRlZXMtc3BhY2luZy1tZDogMTJweDsKICAgIC0tZGVlcy1zcGFjaW5nLWxnOiAxNnB4OwogICAgLS1kZWVzLXNwYWNpbmcteGw6IDI0cHg7CiAgICAtLWRlZXMtc3BhY2luZy0yeGw6IDMycHg7CiAgICAtLWRlZXMtc3BhY2luZy0zeGw6IDQ4cHg7CgogICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICogQm9yZGVyIFJhZGl1cyBTY2FsZQogICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogICAgLS1kZWVzLXJhZGl1cy14czogMnB4OwogICAgLS1kZWVzLXJhZGl1cy1zbTogNHB4OwogICAgLS1kZWVzLXJhZGl1cy1tZDogNnB4OwogICAgLS1kZWVzLXJhZGl1cy1sZzogOHB4OwogICAgLS1kZWVzLXJhZGl1cy14bDogMTJweDsKICAgIC0tZGVlcy1yYWRpdXMtZnVsbDogOTk5cHg7CgogICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICogU2hhZG93IEVsZXZhdGlvbiBTY2FsZQogICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogICAgLS1kZWVzLXNoYWRvdy14czogMCAxcHggMnB4IDAgcmdiKDAgMCAwIC8gMC4wNSk7CiAgICAtLWRlZXMtc2hhZG93LXNtOiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgLS1kZWVzLXNoYWRvdy1tZDogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAtLWRlZXMtc2hhZG93LWxnOiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CgogICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICogVHJhbnNpdGlvbiBEdXJhdGlvbiBTY2FsZQogICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogICAgLS1kZWVzLXRyYW5zaXRpb24tZmFzdDogMC4xczsKICAgIC0tZGVlcy10cmFuc2l0aW9uLWRlZmF1bHQ6IDAuMTVzOwogICAgLS1kZWVzLXRyYW5zaXRpb24tc2xvdzogMC4yczsKICAgIC0tZGVlcy10cmFuc2l0aW9uLXNsb3dlcjogMC4zczsKCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgKiBDb250cm9sIEhlaWdodCBTY2FsZQogICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogICAgLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXNtOiAzMnB4OwogICAgLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LW1kOiAzNnB4OwogICAgLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LWxnOiA0MHB4OwogICAgLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXhsOiA0OHB4OwogIH0KYDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0Bmb3J0YXdlc29tZStmb250YXdlc29tZS1zdmctY29yZUA3LjEuMC9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlL2luZGV4Lm1qcwpmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyMTEsIGE1KSB7CiAgKG51bGwgPT0gYTUgfHwgYTUgPiByMTEubGVuZ3RoKSAmJiAoYTUgPSByMTEubGVuZ3RoKTsKICBmb3IgKHZhciBlMTEgPSAwLCBuMTMgPSBBcnJheShhNSk7IGUxMSA8IGE1OyBlMTErKykgbjEzW2UxMV0gPSByMTFbZTExXTsKICByZXR1cm4gbjEzOwp9CmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyMTEpIHsKICBpZiAoQXJyYXkuaXNBcnJheShyMTEpKSByZXR1cm4gcjExOwp9CmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyMTEpIHsKICBpZiAoQXJyYXkuaXNBcnJheShyMTEpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocjExKTsKfQpmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYTUsIG4xMykgewogIGlmICghKGE1IGluc3RhbmNlb2YgbjEzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7Cn0KZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZTExLCByMTEpIHsKICBmb3IgKHZhciB0OSA9IDA7IHQ5IDwgcjExLmxlbmd0aDsgdDkrKykgewogICAgdmFyIG8xMyA9IHIxMVt0OV07CiAgICBvMTMuZW51bWVyYWJsZSA9IG8xMy5lbnVtZXJhYmxlIHx8IGZhbHNlLCBvMTMuY29uZmlndXJhYmxlID0gdHJ1ZSwgInZhbHVlIiBpbiBvMTMgJiYgKG8xMy53cml0YWJsZSA9IHRydWUpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZTExLCBfdG9Qcm9wZXJ0eUtleShvMTMua2V5KSwgbzEzKTsKICB9Cn0KZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUxMSwgcjExLCB0OSkgewogIHJldHVybiByMTEgJiYgX2RlZmluZVByb3BlcnRpZXMoZTExLnByb3RvdHlwZSwgcjExKSwgdDkgJiYgX2RlZmluZVByb3BlcnRpZXMoZTExLCB0OSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlMTEsICJwcm90b3R5cGUiLCB7CiAgICB3cml0YWJsZTogZmFsc2UKICB9KSwgZTExOwp9CmZ1bmN0aW9uIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHIxMSwgZTExKSB7CiAgdmFyIHQ5ID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByMTFbU3ltYm9sLml0ZXJhdG9yXSB8fCByMTFbIkBAaXRlcmF0b3IiXTsKICBpZiAoIXQ5KSB7CiAgICBpZiAoQXJyYXkuaXNBcnJheShyMTEpIHx8ICh0OSA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyMTEpKSB8fCBlMTEgJiYgcjExICYmICJudW1iZXIiID09IHR5cGVvZiByMTEubGVuZ3RoKSB7CiAgICAgIHQ5ICYmIChyMTEgPSB0OSk7CiAgICAgIHZhciBuMTMgPSAwLCBGMiA9IGZ1bmN0aW9uKCkgewogICAgICB9OwogICAgICByZXR1cm4gewogICAgICAgIHM6IEYyLAogICAgICAgIG46IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIG4xMyA+PSByMTEubGVuZ3RoID8gewogICAgICAgICAgICBkb25lOiB0cnVlCiAgICAgICAgICB9IDogewogICAgICAgICAgICBkb25lOiBmYWxzZSwKICAgICAgICAgICAgdmFsdWU6IHIxMVtuMTMrK10KICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICBlOiBmdW5jdGlvbihyMTIpIHsKICAgICAgICAgIHRocm93IHIxMjsKICAgICAgICB9LAogICAgICAgIGY6IEYyCiAgICAgIH07CiAgICB9CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIik7CiAgfQogIHZhciBvMTMsIGE1ID0gdHJ1ZSwgdTcgPSBmYWxzZTsKICByZXR1cm4gewogICAgczogZnVuY3Rpb24oKSB7CiAgICAgIHQ5ID0gdDkuY2FsbChyMTEpOwogICAgfSwKICAgIG46IGZ1bmN0aW9uKCkgewogICAgICB2YXIgcjEyID0gdDkubmV4dCgpOwogICAgICByZXR1cm4gYTUgPSByMTIuZG9uZSwgcjEyOwogICAgfSwKICAgIGU6IGZ1bmN0aW9uKHIxMikgewogICAgICB1NyA9IHRydWUsIG8xMyA9IHIxMjsKICAgIH0sCiAgICBmOiBmdW5jdGlvbigpIHsKICAgICAgdHJ5IHsKICAgICAgICBhNSB8fCBudWxsID09IHQ5LnJldHVybiB8fCB0OS5yZXR1cm4oKTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBpZiAodTcpIHRocm93IG8xMzsKICAgICAgfQogICAgfQogIH07Cn0KZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUxMSwgcjExLCB0OSkgewogIHJldHVybiAocjExID0gX3RvUHJvcGVydHlLZXkocjExKSkgaW4gZTExID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUxMSwgcjExLCB7CiAgICB2YWx1ZTogdDksCiAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgd3JpdGFibGU6IHRydWUKICB9KSA6IGUxMVtyMTFdID0gdDksIGUxMTsKfQpmdW5jdGlvbiBfaW5oZXJpdHModDksIGUxMSkgewogIGlmICgiZnVuY3Rpb24iICE9IHR5cGVvZiBlMTEgJiYgbnVsbCAhPT0gZTExKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpOwogIHQ5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZTExICYmIGUxMS5wcm90b3R5cGUsIHsKICAgIGNvbnN0cnVjdG9yOiB7CiAgICAgIHZhbHVlOiB0OSwKICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgfQogIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodDksICJwcm90b3R5cGUiLCB7CiAgICB3cml0YWJsZTogZmFsc2UKICB9KSwgZTExICYmIF9zZXRQcm90b3R5cGVPZih0OSwgZTExKTsKfQpmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIxMSkgewogIGlmICgidW5kZWZpbmVkIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcjExW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByMTFbIkBAaXRlcmF0b3IiXSkgcmV0dXJuIEFycmF5LmZyb20ocjExKTsKfQpmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQocjExLCBsNikgewogIHZhciB0OSA9IG51bGwgPT0gcjExID8gbnVsbCA6ICJ1bmRlZmluZWQiICE9IHR5cGVvZiBTeW1ib2wgJiYgcjExW1N5bWJvbC5pdGVyYXRvcl0gfHwgcjExWyJAQGl0ZXJhdG9yIl07CiAgaWYgKG51bGwgIT0gdDkpIHsKICAgIHZhciBlMTEsIG4xMywgaTExLCB1NywgYTUgPSBbXSwgZjcgPSB0cnVlLCBvMTMgPSBmYWxzZTsKICAgIHRyeSB7CiAgICAgIGlmIChpMTEgPSAodDkgPSB0OS5jYWxsKHIxMSkpLm5leHQsIDAgPT09IGw2KSB7CiAgICAgICAgaWYgKE9iamVjdCh0OSkgIT09IHQ5KSByZXR1cm47CiAgICAgICAgZjcgPSBmYWxzZTsKICAgICAgfSBlbHNlIGZvciAoOyAhKGY3ID0gKGUxMSA9IGkxMS5jYWxsKHQ5KSkuZG9uZSkgJiYgKGE1LnB1c2goZTExLnZhbHVlKSwgYTUubGVuZ3RoICE9PSBsNik7IGY3ID0gdHJ1ZSkgOwogICAgfSBjYXRjaCAocjEyKSB7CiAgICAgIG8xMyA9IHRydWUsIG4xMyA9IHIxMjsKICAgIH0gZmluYWxseSB7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKCFmNyAmJiBudWxsICE9IHQ5LnJldHVybiAmJiAodTcgPSB0OS5yZXR1cm4oKSwgT2JqZWN0KHU3KSAhPT0gdTcpKSByZXR1cm47CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgaWYgKG8xMykgdGhyb3cgbjEzOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYTU7CiAgfQp9CmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7CiAgdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKTsKfQpmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7CiAgdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIik7Cn0KZnVuY3Rpb24gb3duS2V5czIoZTExLCByMTEpIHsKICB2YXIgdDkgPSBPYmplY3Qua2V5cyhlMTEpOwogIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7CiAgICB2YXIgbzEzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlMTEpOwogICAgcjExICYmIChvMTMgPSBvMTMuZmlsdGVyKGZ1bmN0aW9uKHIxMikgewogICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlMTEsIHIxMikuZW51bWVyYWJsZTsKICAgIH0pKSwgdDkucHVzaC5hcHBseSh0OSwgbzEzKTsKICB9CiAgcmV0dXJuIHQ5Owp9CmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKGUxMSkgewogIGZvciAodmFyIHIxMSA9IDE7IHIxMSA8IGFyZ3VtZW50cy5sZW5ndGg7IHIxMSsrKSB7CiAgICB2YXIgdDkgPSBudWxsICE9IGFyZ3VtZW50c1tyMTFdID8gYXJndW1lbnRzW3IxMV0gOiB7fTsKICAgIHIxMSAlIDIgPyBvd25LZXlzMihPYmplY3QodDkpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uKHIxMikgewogICAgICBfZGVmaW5lUHJvcGVydHkoZTExLCByMTIsIHQ5W3IxMl0pOwogICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUxMSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModDkpKSA6IG93bktleXMyKE9iamVjdCh0OSkpLmZvckVhY2goZnVuY3Rpb24ocjEyKSB7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlMTEsIHIxMiwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0OSwgcjEyKSk7CiAgICB9KTsKICB9CiAgcmV0dXJuIGUxMTsKfQpmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodDksIGUxMSkgewogIHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgIHJldHVybiB0MTAuX19wcm90b19fID0gZTEyLCB0MTA7CiAgfSwgX3NldFByb3RvdHlwZU9mKHQ5LCBlMTEpOwp9CmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIxMSwgZTExKSB7CiAgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyMTEpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyMTEsIGUxMSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIxMSwgZTExKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7Cn0KZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIxMSkgewogIHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocjExKSB8fCBfaXRlcmFibGVUb0FycmF5KHIxMSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIxMSkgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7Cn0KZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQ5LCByMTEpIHsKICBpZiAoIm9iamVjdCIgIT0gdHlwZW9mIHQ5IHx8ICF0OSkgcmV0dXJuIHQ5OwogIHZhciBlMTEgPSB0OVtTeW1ib2wudG9QcmltaXRpdmVdOwogIGlmICh2b2lkIDAgIT09IGUxMSkgewogICAgdmFyIGkxMSA9IGUxMS5jYWxsKHQ5LCByMTEgfHwgImRlZmF1bHQiKTsKICAgIGlmICgib2JqZWN0IiAhPSB0eXBlb2YgaTExKSByZXR1cm4gaTExOwogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKTsKICB9CiAgcmV0dXJuICgic3RyaW5nIiA9PT0gcjExID8gU3RyaW5nIDogTnVtYmVyKSh0OSk7Cn0KZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodDkpIHsKICB2YXIgaTExID0gX3RvUHJpbWl0aXZlKHQ5LCAic3RyaW5nIik7CiAgcmV0dXJuICJzeW1ib2wiID09IHR5cGVvZiBpMTEgPyBpMTEgOiBpMTEgKyAiIjsKfQpmdW5jdGlvbiBfdHlwZW9mKG8xMykgewogICJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7CiAgcmV0dXJuIF90eXBlb2YgPSAiZnVuY3Rpb24iID09IHR5cGVvZiBTeW1ib2wgJiYgInN5bWJvbCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uKG8xNCkgewogICAgcmV0dXJuIHR5cGVvZiBvMTQ7CiAgfSA6IGZ1bmN0aW9uKG8xNCkgewogICAgcmV0dXJuIG8xNCAmJiAiZnVuY3Rpb24iID09IHR5cGVvZiBTeW1ib2wgJiYgbzE0LmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbzE0ICE9PSBTeW1ib2wucHJvdG90eXBlID8gInN5bWJvbCIgOiB0eXBlb2YgbzE0OwogIH0sIF90eXBlb2YobzEzKTsKfQpmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocjExLCBhNSkgewogIGlmIChyMTEpIHsKICAgIGlmICgic3RyaW5nIiA9PSB0eXBlb2YgcjExKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocjExLCBhNSk7CiAgICB2YXIgdDkgPSB7fS50b1N0cmluZy5jYWxsKHIxMSkuc2xpY2UoOCwgLTEpOwogICAgcmV0dXJuICJPYmplY3QiID09PSB0OSAmJiByMTEuY29uc3RydWN0b3IgJiYgKHQ5ID0gcjExLmNvbnN0cnVjdG9yLm5hbWUpLCAiTWFwIiA9PT0gdDkgfHwgIlNldCIgPT09IHQ5ID8gQXJyYXkuZnJvbShyMTEpIDogIkFyZ3VtZW50cyIgPT09IHQ5IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQ5KSA/IF9hcnJheUxpa2VUb0FycmF5KHIxMSwgYTUpIDogdm9pZCAwOwogIH0KfQpmdW5jdGlvbiBfd3JhcFJlZ0V4cCgpIHsKICBfd3JhcFJlZ0V4cCA9IGZ1bmN0aW9uKGUxMiwgcjEyKSB7CiAgICByZXR1cm4gbmV3IEJhYmVsUmVnRXhwKGUxMiwgdm9pZCAwLCByMTIpOwogIH07CiAgdmFyIGUxMSA9IFJlZ0V4cC5wcm90b3R5cGUsIHIxMSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogIGZ1bmN0aW9uIEJhYmVsUmVnRXhwKGUxMiwgdDksIHA3KSB7CiAgICB2YXIgbzEzID0gUmVnRXhwKGUxMiwgdDkpOwogICAgcmV0dXJuIHIxMS5zZXQobzEzLCBwNyB8fCByMTEuZ2V0KGUxMikpLCBfc2V0UHJvdG90eXBlT2YobzEzLCBCYWJlbFJlZ0V4cC5wcm90b3R5cGUpOwogIH0KICBmdW5jdGlvbiBidWlsZEdyb3VwcyhlMTIsIHQ5KSB7CiAgICB2YXIgcDcgPSByMTEuZ2V0KHQ5KTsKICAgIHJldHVybiBPYmplY3Qua2V5cyhwNykucmVkdWNlKGZ1bmN0aW9uKHIxMiwgdDEwKSB7CiAgICAgIHZhciBvMTMgPSBwN1t0MTBdOwogICAgICBpZiAoIm51bWJlciIgPT0gdHlwZW9mIG8xMykgcjEyW3QxMF0gPSBlMTJbbzEzXTsKICAgICAgZWxzZSB7CiAgICAgICAgZm9yICh2YXIgaTExID0gMDsgdm9pZCAwID09PSBlMTJbbzEzW2kxMV1dICYmIGkxMSArIDEgPCBvMTMubGVuZ3RoOyApIGkxMSsrOwogICAgICAgIHIxMlt0MTBdID0gZTEyW28xM1tpMTFdXTsKICAgICAgfQogICAgICByZXR1cm4gcjEyOwogICAgfSwgLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCkpOwogIH0KICByZXR1cm4gX2luaGVyaXRzKEJhYmVsUmVnRXhwLCBSZWdFeHApLCBCYWJlbFJlZ0V4cC5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uKHIxMikgewogICAgdmFyIHQ5ID0gZTExLmV4ZWMuY2FsbCh0aGlzLCByMTIpOwogICAgaWYgKHQ5KSB7CiAgICAgIHQ5Lmdyb3VwcyA9IGJ1aWxkR3JvdXBzKHQ5LCB0aGlzKTsKICAgICAgdmFyIHA3ID0gdDkuaW5kaWNlczsKICAgICAgcDcgJiYgKHA3Lmdyb3VwcyA9IGJ1aWxkR3JvdXBzKHA3LCB0aGlzKSk7CiAgICB9CiAgICByZXR1cm4gdDk7CiAgfSwgQmFiZWxSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5yZXBsYWNlXSA9IGZ1bmN0aW9uKHQ5LCBwNykgewogICAgaWYgKCJzdHJpbmciID09IHR5cGVvZiBwNykgewogICAgICB2YXIgbzEzID0gcjExLmdldCh0aGlzKTsKICAgICAgcmV0dXJuIGUxMVtTeW1ib2wucmVwbGFjZV0uY2FsbCh0aGlzLCB0OSwgcDcucmVwbGFjZSgvXCQ8KFtePl0rKSg+fCQpL2csIGZ1bmN0aW9uKGUxMiwgcjEyLCB0MTApIHsKICAgICAgICBpZiAoIiIgPT09IHQxMCkgcmV0dXJuIGUxMjsKICAgICAgICB2YXIgcDggPSBvMTNbcjEyXTsKICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwOCkgPyAiJCIgKyBwOC5qb2luKCIkIikgOiAibnVtYmVyIiA9PSB0eXBlb2YgcDggPyAiJCIgKyBwOCA6ICIiOwogICAgICB9KSk7CiAgICB9CiAgICBpZiAoImZ1bmN0aW9uIiA9PSB0eXBlb2YgcDcpIHsKICAgICAgdmFyIGkxMSA9IHRoaXM7CiAgICAgIHJldHVybiBlMTFbU3ltYm9sLnJlcGxhY2VdLmNhbGwodGhpcywgdDksIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBlMTIgPSBhcmd1bWVudHM7CiAgICAgICAgcmV0dXJuICJvYmplY3QiICE9IHR5cGVvZiBlMTJbZTEyLmxlbmd0aCAtIDFdICYmIChlMTIgPSBbXS5zbGljZS5jYWxsKGUxMikpLnB1c2goYnVpbGRHcm91cHMoZTEyLCBpMTEpKSwgcDcuYXBwbHkodGhpcywgZTEyKTsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gZTExW1N5bWJvbC5yZXBsYWNlXS5jYWxsKHRoaXMsIHQ5LCBwNyk7CiAgfSwgX3dyYXBSZWdFeHAuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKfQpmdW5jdGlvbiBmYW1pbHlQcm94eShvYmopIHsKICByZXR1cm4gbmV3IFByb3h5KG9iaiwgewogICAgZ2V0OiBmdW5jdGlvbiBnZXQyKHRhcmdldCwgcHJvcCkgewogICAgICByZXR1cm4gcHJvcCBpbiB0YXJnZXQgPyB0YXJnZXRbcHJvcF0gOiB0YXJnZXRbaTEwXTsKICAgIH0KICB9KTsKfQpmdW5jdGlvbiBnZXRBdHRyQ29uZmlnKGF0dHIpIHsKICB2YXIgZWxlbWVudDQgPSBET0NVTUVOVC5xdWVyeVNlbGVjdG9yKCJzY3JpcHRbIiArIGF0dHIgKyAiXSIpOwogIGlmIChlbGVtZW50NCkgewogICAgcmV0dXJuIGVsZW1lbnQ0LmdldEF0dHJpYnV0ZShhdHRyKTsKICB9Cn0KZnVuY3Rpb24gY29lcmNlKHZhbCkgewogIGlmICh2YWwgPT09ICIiKSByZXR1cm4gdHJ1ZTsKICBpZiAodmFsID09PSAiZmFsc2UiKSByZXR1cm4gZmFsc2U7CiAgaWYgKHZhbCA9PT0gInRydWUiKSByZXR1cm4gdHJ1ZTsKICByZXR1cm4gdmFsOwp9CmZ1bmN0aW9uIG9uQ2hhbmdlKGNiKSB7CiAgX29uQ2hhbmdlQ2IucHVzaChjYik7CiAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgX29uQ2hhbmdlQ2Iuc3BsaWNlKF9vbkNoYW5nZUNiLmluZGV4T2YoY2IpLCAxKTsKICB9Owp9CmZ1bmN0aW9uIGluc2VydENzcyhjc3MxNSkgewogIGlmICghY3NzMTUgfHwgIUlTX0RPTSkgewogICAgcmV0dXJuOwogIH0KICB2YXIgc3R5bGUgPSBET0NVTUVOVC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogIHN0eWxlLnNldEF0dHJpYnV0ZSgidHlwZSIsICJ0ZXh0L2NzcyIpOwogIHN0eWxlLmlubmVySFRNTCA9IGNzczE1OwogIHZhciBoZWFkQ2hpbGRyZW4gPSBET0NVTUVOVC5oZWFkLmNoaWxkTm9kZXM7CiAgdmFyIGJlZm9yZUNoaWxkID0gbnVsbDsKICBmb3IgKHZhciBpMTEgPSBoZWFkQ2hpbGRyZW4ubGVuZ3RoIC0gMTsgaTExID4gLTE7IGkxMS0tKSB7CiAgICB2YXIgY2hpbGQgPSBoZWFkQ2hpbGRyZW5baTExXTsKICAgIHZhciB0YWdOYW1lID0gKGNoaWxkLnRhZ05hbWUgfHwgIiIpLnRvVXBwZXJDYXNlKCk7CiAgICBpZiAoWyJTVFlMRSIsICJMSU5LIl0uaW5kZXhPZih0YWdOYW1lKSA+IC0xKSB7CiAgICAgIGJlZm9yZUNoaWxkID0gY2hpbGQ7CiAgICB9CiAgfQogIERPQ1VNRU5ULmhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBiZWZvcmVDaGlsZCk7CiAgcmV0dXJuIGNzczE1Owp9CmZ1bmN0aW9uIG5leHRVbmlxdWVJZCgpIHsKICB2YXIgc2l6ZSA9IDEyOwogIHZhciBpZCA9ICIiOwogIHdoaWxlIChzaXplLS0gPiAwKSB7CiAgICBpZCArPSBpZFBvb2xbTWF0aC5yYW5kb20oKSAqIDYyIHwgMF07CiAgfQogIHJldHVybiBpZDsKfQpmdW5jdGlvbiB0b0FycmF5MihvYmopIHsKICB2YXIgYXJyYXkgPSBbXTsKICBmb3IgKHZhciBpMTEgPSAob2JqIHx8IFtdKS5sZW5ndGggPj4+IDA7IGkxMS0tOyApIHsKICAgIGFycmF5W2kxMV0gPSBvYmpbaTExXTsKICB9CiAgcmV0dXJuIGFycmF5Owp9CmZ1bmN0aW9uIGNsYXNzQXJyYXkobm9kZTIpIHsKICBpZiAobm9kZTIuY2xhc3NMaXN0KSB7CiAgICByZXR1cm4gdG9BcnJheTIobm9kZTIuY2xhc3NMaXN0KTsKICB9IGVsc2UgewogICAgcmV0dXJuIChub2RlMi5nZXRBdHRyaWJ1dGUoImNsYXNzIikgfHwgIiIpLnNwbGl0KCIgIikuZmlsdGVyKGZ1bmN0aW9uKGkxMSkgewogICAgICByZXR1cm4gaTExOwogICAgfSk7CiAgfQp9CmZ1bmN0aW9uIGh0bWxFc2NhcGUoc3RyKSB7CiAgcmV0dXJuICIiLmNvbmNhdChzdHIpLnJlcGxhY2UoLyYvZywgIiZhbXA7IikucmVwbGFjZSgvIi9nLCAiJnF1b3Q7IikucmVwbGFjZSgvJy9nLCAiJiMzOTsiKS5yZXBsYWNlKC88L2csICImbHQ7IikucmVwbGFjZSgvPi9nLCAiJmd0OyIpOwp9CmZ1bmN0aW9uIGpvaW5BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpIHsKICByZXR1cm4gT2JqZWN0LmtleXMoYXR0cmlidXRlcyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uKGFjYywgYXR0cmlidXRlTmFtZSkgewogICAgcmV0dXJuIGFjYyArICIiLmNvbmNhdChhdHRyaWJ1dGVOYW1lLCAnPSInKS5jb25jYXQoaHRtbEVzY2FwZShhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdKSwgJyIgJyk7CiAgfSwgIiIpLnRyaW0oKTsKfQpmdW5jdGlvbiBqb2luU3R5bGVzKHN0eWxlczMpIHsKICByZXR1cm4gT2JqZWN0LmtleXMoc3R5bGVzMyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uKGFjYywgc3R5bGVOYW1lKSB7CiAgICByZXR1cm4gYWNjICsgIiIuY29uY2F0KHN0eWxlTmFtZSwgIjogIikuY29uY2F0KHN0eWxlczNbc3R5bGVOYW1lXS50cmltKCksICI7Iik7CiAgfSwgIiIpOwp9CmZ1bmN0aW9uIHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0yKSB7CiAgcmV0dXJuIHRyYW5zZm9ybTIuc2l6ZSAhPT0gbWVhbmluZ2xlc3NUcmFuc2Zvcm0uc2l6ZSB8fCB0cmFuc2Zvcm0yLnggIT09IG1lYW5pbmdsZXNzVHJhbnNmb3JtLnggfHwgdHJhbnNmb3JtMi55ICE9PSBtZWFuaW5nbGVzc1RyYW5zZm9ybS55IHx8IHRyYW5zZm9ybTIucm90YXRlICE9PSBtZWFuaW5nbGVzc1RyYW5zZm9ybS5yb3RhdGUgfHwgdHJhbnNmb3JtMi5mbGlwWCB8fCB0cmFuc2Zvcm0yLmZsaXBZOwp9CmZ1bmN0aW9uIHRyYW5zZm9ybUZvclN2ZyhfcmVmMikgewogIHZhciB0cmFuc2Zvcm0yID0gX3JlZjIudHJhbnNmb3JtLCBjb250YWluZXJXaWR0aCA9IF9yZWYyLmNvbnRhaW5lcldpZHRoLCBpY29uV2lkdGggPSBfcmVmMi5pY29uV2lkdGg7CiAgdmFyIG91dGVyID0gewogICAgdHJhbnNmb3JtOiAidHJhbnNsYXRlKCIuY29uY2F0KGNvbnRhaW5lcldpZHRoIC8gMiwgIiAyNTYpIikKICB9OwogIHZhciBpbm5lclRyYW5zbGF0ZSA9ICJ0cmFuc2xhdGUoIi5jb25jYXQodHJhbnNmb3JtMi54ICogMzIsICIsICIpLmNvbmNhdCh0cmFuc2Zvcm0yLnkgKiAzMiwgIikgIik7CiAgdmFyIGlubmVyU2NhbGUgPSAic2NhbGUoIi5jb25jYXQodHJhbnNmb3JtMi5zaXplIC8gMTYgKiAodHJhbnNmb3JtMi5mbGlwWCA/IC0xIDogMSksICIsICIpLmNvbmNhdCh0cmFuc2Zvcm0yLnNpemUgLyAxNiAqICh0cmFuc2Zvcm0yLmZsaXBZID8gLTEgOiAxKSwgIikgIik7CiAgdmFyIGlubmVyUm90YXRlID0gInJvdGF0ZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnJvdGF0ZSwgIiAwIDApIik7CiAgdmFyIGlubmVyID0gewogICAgdHJhbnNmb3JtOiAiIi5jb25jYXQoaW5uZXJUcmFuc2xhdGUsICIgIikuY29uY2F0KGlubmVyU2NhbGUsICIgIikuY29uY2F0KGlubmVyUm90YXRlKQogIH07CiAgdmFyIHBhdGgyID0gewogICAgdHJhbnNmb3JtOiAidHJhbnNsYXRlKCIuY29uY2F0KGljb25XaWR0aCAvIDIgKiAtMSwgIiAtMjU2KSIpCiAgfTsKICByZXR1cm4gewogICAgb3V0ZXIsCiAgICBpbm5lciwKICAgIHBhdGg6IHBhdGgyCiAgfTsKfQpmdW5jdGlvbiB0cmFuc2Zvcm1Gb3JDc3MoX3JlZjIpIHsKICB2YXIgdHJhbnNmb3JtMiA9IF9yZWYyLnRyYW5zZm9ybSwgX3JlZjIkd2lkdGggPSBfcmVmMi53aWR0aCwgd2lkdGggPSBfcmVmMiR3aWR0aCA9PT0gdm9pZCAwID8gVU5JVFNfSU5fR1JJRCA6IF9yZWYyJHdpZHRoLCBfcmVmMiRoZWlnaHQgPSBfcmVmMi5oZWlnaHQsIGhlaWdodCA9IF9yZWYyJGhlaWdodCA9PT0gdm9pZCAwID8gVU5JVFNfSU5fR1JJRCA6IF9yZWYyJGhlaWdodCwgX3JlZjIkc3RhcnRDZW50ZXJlZCA9IF9yZWYyLnN0YXJ0Q2VudGVyZWQsIHN0YXJ0Q2VudGVyZWQgPSBfcmVmMiRzdGFydENlbnRlcmVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYyJHN0YXJ0Q2VudGVyZWQ7CiAgdmFyIHZhbCA9ICIiOwogIGlmIChzdGFydENlbnRlcmVkICYmIElTX0lFKSB7CiAgICB2YWwgKz0gInRyYW5zbGF0ZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnggLyBkJDIgLSB3aWR0aCAvIDIsICJlbSwgIikuY29uY2F0KHRyYW5zZm9ybTIueSAvIGQkMiAtIGhlaWdodCAvIDIsICJlbSkgIik7CiAgfSBlbHNlIGlmIChzdGFydENlbnRlcmVkKSB7CiAgICB2YWwgKz0gInRyYW5zbGF0ZShjYWxjKC01MCUgKyAiLmNvbmNhdCh0cmFuc2Zvcm0yLnggLyBkJDIsICJlbSksIGNhbGMoLTUwJSArICIpLmNvbmNhdCh0cmFuc2Zvcm0yLnkgLyBkJDIsICJlbSkpICIpOwogIH0gZWxzZSB7CiAgICB2YWwgKz0gInRyYW5zbGF0ZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnggLyBkJDIsICJlbSwgIikuY29uY2F0KHRyYW5zZm9ybTIueSAvIGQkMiwgImVtKSAiKTsKICB9CiAgdmFsICs9ICJzY2FsZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnNpemUgLyBkJDIgKiAodHJhbnNmb3JtMi5mbGlwWCA/IC0xIDogMSksICIsICIpLmNvbmNhdCh0cmFuc2Zvcm0yLnNpemUgLyBkJDIgKiAodHJhbnNmb3JtMi5mbGlwWSA/IC0xIDogMSksICIpICIpOwogIHZhbCArPSAicm90YXRlKCIuY29uY2F0KHRyYW5zZm9ybTIucm90YXRlLCAiZGVnKSAiKTsKICByZXR1cm4gdmFsOwp9CmZ1bmN0aW9uIGNzcygpIHsKICB2YXIgZGNwID0gREVGQVVMVF9DU1NfUFJFRklYOwogIHZhciBkcmMgPSBERUZBVUxUX1JFUExBQ0VNRU5UX0NMQVNTOwogIHZhciBmcCA9IGNvbmZpZzIuY3NzUHJlZml4OwogIHZhciByYyA9IGNvbmZpZzIucmVwbGFjZW1lbnRDbGFzczsKICB2YXIgczkgPSBiYXNlU3R5bGVzOwogIGlmIChmcCAhPT0gZGNwIHx8IHJjICE9PSBkcmMpIHsKICAgIHZhciBkUGF0dCA9IG5ldyBSZWdFeHAoIlxcLiIuY29uY2F0KGRjcCwgIlxcLSIpLCAiZyIpOwogICAgdmFyIGN1c3RvbVByb3BQYXR0ID0gbmV3IFJlZ0V4cCgiXFwtLSIuY29uY2F0KGRjcCwgIlxcLSIpLCAiZyIpOwogICAgdmFyIHJQYXR0ID0gbmV3IFJlZ0V4cCgiXFwuIi5jb25jYXQoZHJjKSwgImciKTsKICAgIHM5ID0gczkucmVwbGFjZShkUGF0dCwgIi4iLmNvbmNhdChmcCwgIi0iKSkucmVwbGFjZShjdXN0b21Qcm9wUGF0dCwgIi0tIi5jb25jYXQoZnAsICItIikpLnJlcGxhY2UoclBhdHQsICIuIi5jb25jYXQocmMpKTsKICB9CiAgcmV0dXJuIHM5Owp9CmZ1bmN0aW9uIGVuc3VyZUNzcygpIHsKICBpZiAoY29uZmlnMi5hdXRvQWRkQ3NzICYmICFfY3NzSW5zZXJ0ZWQpIHsKICAgIGluc2VydENzcyhjc3MoKSk7CiAgICBfY3NzSW5zZXJ0ZWQgPSB0cnVlOwogIH0KfQpmdW5jdGlvbiBkb21yZWFkeShmbikgewogIGlmICghSVNfRE9NKSByZXR1cm47CiAgbG9hZGVkID8gc2V0VGltZW91dChmbiwgMCkgOiBmdW5jdGlvbnMucHVzaChmbik7Cn0KZnVuY3Rpb24gdG9IdG1sMihhYnN0cmFjdE5vZGVzKSB7CiAgdmFyIHRhZyA9IGFic3RyYWN0Tm9kZXMudGFnLCBfYWJzdHJhY3ROb2RlcyRhdHRyaWIgPSBhYnN0cmFjdE5vZGVzLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMgPSBfYWJzdHJhY3ROb2RlcyRhdHRyaWIgPT09IHZvaWQgMCA/IHt9IDogX2Fic3RyYWN0Tm9kZXMkYXR0cmliLCBfYWJzdHJhY3ROb2RlcyRjaGlsZHIgPSBhYnN0cmFjdE5vZGVzLmNoaWxkcmVuLCBjaGlsZHJlbjIgPSBfYWJzdHJhY3ROb2RlcyRjaGlsZHIgPT09IHZvaWQgMCA/IFtdIDogX2Fic3RyYWN0Tm9kZXMkY2hpbGRyOwogIGlmICh0eXBlb2YgYWJzdHJhY3ROb2RlcyA9PT0gInN0cmluZyIpIHsKICAgIHJldHVybiBodG1sRXNjYXBlKGFic3RyYWN0Tm9kZXMpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gIjwiLmNvbmNhdCh0YWcsICIgIikuY29uY2F0KGpvaW5BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpLCAiPiIpLmNvbmNhdChjaGlsZHJlbjIubWFwKHRvSHRtbDIpLmpvaW4oIiIpLCAiPC8iKS5jb25jYXQodGFnLCAiPiIpOwogIH0KfQpmdW5jdGlvbiBpY29uRnJvbU1hcHBpbmcobWFwcGluZywgcHJlZml4NCwgaWNvbk5hbWUpIHsKICBpZiAobWFwcGluZyAmJiBtYXBwaW5nW3ByZWZpeDRdICYmIG1hcHBpbmdbcHJlZml4NF1baWNvbk5hbWVdKSB7CiAgICByZXR1cm4gewogICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgIGljb25OYW1lLAogICAgICBpY29uOiBtYXBwaW5nW3ByZWZpeDRdW2ljb25OYW1lXQogICAgfTsKICB9Cn0KZnVuY3Rpb24gdG9IZXgodW5pY29kZSkgewogIGlmIChfdG9Db25zdW1hYmxlQXJyYXkodW5pY29kZSkubGVuZ3RoICE9PSAxKSByZXR1cm4gbnVsbDsKICByZXR1cm4gdW5pY29kZS5jb2RlUG9pbnRBdCgwKS50b1N0cmluZygxNik7Cn0KZnVuY3Rpb24gbm9ybWFsaXplSWNvbnMoaWNvbnM2KSB7CiAgcmV0dXJuIE9iamVjdC5rZXlzKGljb25zNikucmVkdWNlKGZ1bmN0aW9uKGFjYywgaWNvbk5hbWUpIHsKICAgIHZhciBpY29uMyA9IGljb25zNltpY29uTmFtZV07CiAgICB2YXIgZXhwYW5kZWQgPSAhIWljb24zLmljb247CiAgICBpZiAoZXhwYW5kZWQpIHsKICAgICAgYWNjW2ljb24zLmljb25OYW1lXSA9IGljb24zLmljb247CiAgICB9IGVsc2UgewogICAgICBhY2NbaWNvbk5hbWVdID0gaWNvbjM7CiAgICB9CiAgICByZXR1cm4gYWNjOwogIH0sIHt9KTsKfQpmdW5jdGlvbiBkZWZpbmVJY29ucyhwcmVmaXg0LCBpY29uczYpIHsKICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzJdIDoge307CiAgdmFyIF9wYXJhbXMkc2tpcEhvb2tzID0gcGFyYW1zMi5za2lwSG9va3MsIHNraXBIb29rcyA9IF9wYXJhbXMkc2tpcEhvb2tzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wYXJhbXMkc2tpcEhvb2tzOwogIHZhciBub3JtYWxpemVkID0gbm9ybWFsaXplSWNvbnMoaWNvbnM2KTsKICBpZiAodHlwZW9mIG5hbWVzcGFjZS5ob29rcy5hZGRQYWNrID09PSAiZnVuY3Rpb24iICYmICFza2lwSG9va3MpIHsKICAgIG5hbWVzcGFjZS5ob29rcy5hZGRQYWNrKHByZWZpeDQsIG5vcm1hbGl6ZUljb25zKGljb25zNikpOwogIH0gZWxzZSB7CiAgICBuYW1lc3BhY2Uuc3R5bGVzW3ByZWZpeDRdID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG5hbWVzcGFjZS5zdHlsZXNbcHJlZml4NF0gfHwge30pLCBub3JtYWxpemVkKTsKICB9CiAgaWYgKHByZWZpeDQgPT09ICJmYXMiKSB7CiAgICBkZWZpbmVJY29ucygiZmEiLCBpY29uczYpOwogIH0KfQpmdW5jdGlvbiBpc1Jlc2VydmVkKG5hbWUpIHsKICByZXR1cm4gflJFU0VSVkVEX0NMQVNTRVMuaW5kZXhPZihuYW1lKTsKfQpmdW5jdGlvbiBnZXRJY29uTmFtZShjc3NQcmVmaXgsIGNscykgewogIHZhciBwYXJ0cyA9IGNscy5zcGxpdCgiLSIpOwogIHZhciBwcmVmaXg0ID0gcGFydHNbMF07CiAgdmFyIGljb25OYW1lID0gcGFydHMuc2xpY2UoMSkuam9pbigiLSIpOwogIGlmIChwcmVmaXg0ID09PSBjc3NQcmVmaXggJiYgaWNvbk5hbWUgIT09ICIiICYmICFpc1Jlc2VydmVkKGljb25OYW1lKSkgewogICAgcmV0dXJuIGljb25OYW1lOwogIH0gZWxzZSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KZnVuY3Rpb24gYnlVbmljb2RlKHByZWZpeDQsIHVuaWNvZGUpIHsKICByZXR1cm4gKF9ieVVuaWNvZGVbcHJlZml4NF0gfHwge30pW3VuaWNvZGVdOwp9CmZ1bmN0aW9uIGJ5TGlnYXR1cmUocHJlZml4NCwgbGlnYXR1cmUpIHsKICByZXR1cm4gKF9ieUxpZ2F0dXJlW3ByZWZpeDRdIHx8IHt9KVtsaWdhdHVyZV07Cn0KZnVuY3Rpb24gYnlBbGlhcyhwcmVmaXg0LCBhbGlhcykgewogIHJldHVybiAoX2J5QWxpYXNbcHJlZml4NF0gfHwge30pW2FsaWFzXTsKfQpmdW5jdGlvbiBieU9sZE5hbWUobmFtZSkgewogIHJldHVybiBfYnlPbGROYW1lW25hbWVdIHx8IHsKICAgIHByZWZpeDogbnVsbCwKICAgIGljb25OYW1lOiBudWxsCiAgfTsKfQpmdW5jdGlvbiBieU9sZFVuaWNvZGUodW5pY29kZSkgewogIHZhciBvbGRVbmljb2RlID0gX2J5T2xkVW5pY29kZVt1bmljb2RlXTsKICB2YXIgbmV3VW5pY29kZSA9IGJ5VW5pY29kZSgiZmFzIiwgdW5pY29kZSk7CiAgcmV0dXJuIG9sZFVuaWNvZGUgfHwgKG5ld1VuaWNvZGUgPyB7CiAgICBwcmVmaXg6ICJmYXMiLAogICAgaWNvbk5hbWU6IG5ld1VuaWNvZGUKICB9IDogbnVsbCkgfHwgewogICAgcHJlZml4OiBudWxsLAogICAgaWNvbk5hbWU6IG51bGwKICB9Owp9CmZ1bmN0aW9uIGdldERlZmF1bHRVc2FibGVQcmVmaXgoKSB7CiAgcmV0dXJuIF9kZWZhdWx0VXNhYmxlUHJlZml4Owp9CmZ1bmN0aW9uIGdldEZhbWlseUlkKHZhbHVlcykgewogIHZhciBmYW1pbHkgPSBpMTA7CiAgdmFyIGZhbVByb3BzID0gRkFNSUxZX05BTUVTLnJlZHVjZShmdW5jdGlvbihhY2MsIGZhbWlseUlkKSB7CiAgICBhY2NbZmFtaWx5SWRdID0gIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLSIpLmNvbmNhdChmYW1pbHlJZCk7CiAgICByZXR1cm4gYWNjOwogIH0sIHt9KTsKICBydC5mb3JFYWNoKGZ1bmN0aW9uKGZhbWlseUlkKSB7CiAgICBpZiAodmFsdWVzLmluY2x1ZGVzKGZhbVByb3BzW2ZhbWlseUlkXSkgfHwgdmFsdWVzLnNvbWUoZnVuY3Rpb24odiQkMSkgewogICAgICByZXR1cm4gUFJFRklYRVNfRk9SX0ZBTUlMWVtmYW1pbHlJZF0uaW5jbHVkZXModiQkMSk7CiAgICB9KSkgewogICAgICBmYW1pbHkgPSBmYW1pbHlJZDsKICAgIH0KICB9KTsKICByZXR1cm4gZmFtaWx5Owp9CmZ1bmN0aW9uIGdldENhbm9uaWNhbFByZWZpeChzdHlsZU9yUHJlZml4KSB7CiAgdmFyIHBhcmFtczIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9OwogIHZhciBfcGFyYW1zJGZhbWlseSA9IHBhcmFtczIuZmFtaWx5LCBmYW1pbHkgPSBfcGFyYW1zJGZhbWlseSA9PT0gdm9pZCAwID8gaTEwIDogX3BhcmFtcyRmYW1pbHk7CiAgdmFyIHN0eWxlID0gUFJFRklYX1RPX1NUWUxFW2ZhbWlseV1bc3R5bGVPclByZWZpeF07CiAgaWYgKGZhbWlseSA9PT0gdDggJiYgIXN0eWxlT3JQcmVmaXgpIHsKICAgIHJldHVybiAiZmFkIjsKICB9CiAgdmFyIHByZWZpeDQgPSBTVFlMRV9UT19QUkVGSVhbZmFtaWx5XVtzdHlsZU9yUHJlZml4XSB8fCBTVFlMRV9UT19QUkVGSVhbZmFtaWx5XVtzdHlsZV07CiAgdmFyIGRlZmluZWQgPSBzdHlsZU9yUHJlZml4IGluIG5hbWVzcGFjZS5zdHlsZXMgPyBzdHlsZU9yUHJlZml4IDogbnVsbDsKICB2YXIgcmVzdWx0ID0gcHJlZml4NCB8fCBkZWZpbmVkIHx8IG51bGw7CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBtb3ZlTm9uRmFDbGFzc2VzVG9SZXN0KGNsYXNzTmFtZXMpIHsKICB2YXIgcmVzdCA9IFtdOwogIHZhciBpY29uTmFtZSA9IG51bGw7CiAgY2xhc3NOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGNscykgewogICAgdmFyIHJlc3VsdCA9IGdldEljb25OYW1lKGNvbmZpZzIuY3NzUHJlZml4LCBjbHMpOwogICAgaWYgKHJlc3VsdCkgewogICAgICBpY29uTmFtZSA9IHJlc3VsdDsKICAgIH0gZWxzZSBpZiAoY2xzKSB7CiAgICAgIHJlc3QucHVzaChjbHMpOwogICAgfQogIH0pOwogIHJldHVybiB7CiAgICBpY29uTmFtZSwKICAgIHJlc3QKICB9Owp9CmZ1bmN0aW9uIHNvcnRlZFVuaXF1ZVZhbHVlcyhhcnIpIHsKICByZXR1cm4gYXJyLnNvcnQoKS5maWx0ZXIoZnVuY3Rpb24odmFsdWUyLCBpbmRleDIsIGFycjIpIHsKICAgIHJldHVybiBhcnIyLmluZGV4T2YodmFsdWUyKSA9PT0gaW5kZXgyOwogIH0pOwp9CmZ1bmN0aW9uIGdldENhbm9uaWNhbEljb24odmFsdWVzKSB7CiAgdmFyIHBhcmFtczIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9OwogIHZhciBfcGFyYW1zJHNraXBMb29rdXBzID0gcGFyYW1zMi5za2lwTG9va3Vwcywgc2tpcExvb2t1cHMgPSBfcGFyYW1zJHNraXBMb29rdXBzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wYXJhbXMkc2tpcExvb2t1cHM7CiAgdmFyIGdpdmVuUHJlZml4ID0gbnVsbDsKICB2YXIgZmFTdHlsZU9yRmFtaWx5Q2xhc3NlcyA9IHNvcnRlZFVuaXF1ZVZhbHVlcyh2YWx1ZXMuZmlsdGVyKGZ1bmN0aW9uKGNscykgewogICAgcmV0dXJuIF9mYUNvbWJpbmVkQ2xhc3Nlcy5pbmNsdWRlcyhjbHMpOwogIH0pKTsKICB2YXIgbm9uU3R5bGVPckZhbWlseUNsYXNzZXMgPSBzb3J0ZWRVbmlxdWVWYWx1ZXModmFsdWVzLmZpbHRlcihmdW5jdGlvbihjbHMpIHsKICAgIHJldHVybiAhX2ZhQ29tYmluZWRDbGFzc2VzLmluY2x1ZGVzKGNscyk7CiAgfSkpOwogIHZhciBmYVN0eWxlcyA9IGZhU3R5bGVPckZhbWlseUNsYXNzZXMuZmlsdGVyKGZ1bmN0aW9uKGNscykgewogICAgZ2l2ZW5QcmVmaXggPSBjbHM7CiAgICByZXR1cm4gIVEuaW5jbHVkZXMoY2xzKTsKICB9KTsKICB2YXIgX2ZhU3R5bGVzID0gX3NsaWNlZFRvQXJyYXkoZmFTdHlsZXMsIDEpLCBfZmFTdHlsZXMkID0gX2ZhU3R5bGVzWzBdLCBzdHlsZUZyb21WYWx1ZXMgPSBfZmFTdHlsZXMkID09PSB2b2lkIDAgPyBudWxsIDogX2ZhU3R5bGVzJDsKICB2YXIgZmFtaWx5ID0gZ2V0RmFtaWx5SWQoZmFTdHlsZU9yRmFtaWx5Q2xhc3Nlcyk7CiAgdmFyIGNhbm9uaWNhbCA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtb3ZlTm9uRmFDbGFzc2VzVG9SZXN0KG5vblN0eWxlT3JGYW1pbHlDbGFzc2VzKSksIHt9LCB7CiAgICBwcmVmaXg6IGdldENhbm9uaWNhbFByZWZpeChzdHlsZUZyb21WYWx1ZXMsIHsKICAgICAgZmFtaWx5CiAgICB9KQogIH0pOwogIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgY2Fub25pY2FsKSwgZ2V0RGVmYXVsdENhbm9uaWNhbFByZWZpeCh7CiAgICB2YWx1ZXMsCiAgICBmYW1pbHksCiAgICBzdHlsZXM6IHN0eWxlczIsCiAgICBjb25maWc6IGNvbmZpZzIsCiAgICBjYW5vbmljYWwsCiAgICBnaXZlblByZWZpeAogIH0pKSwgYXBwbHlTaGltQW5kQWxpYXMoc2tpcExvb2t1cHMsIGdpdmVuUHJlZml4LCBjYW5vbmljYWwpKTsKfQpmdW5jdGlvbiBhcHBseVNoaW1BbmRBbGlhcyhza2lwTG9va3VwcywgZ2l2ZW5QcmVmaXgsIGNhbm9uaWNhbCkgewogIHZhciBwcmVmaXg0ID0gY2Fub25pY2FsLnByZWZpeCwgaWNvbk5hbWUgPSBjYW5vbmljYWwuaWNvbk5hbWU7CiAgaWYgKHNraXBMb29rdXBzIHx8ICFwcmVmaXg0IHx8ICFpY29uTmFtZSkgewogICAgcmV0dXJuIHsKICAgICAgcHJlZml4OiBwcmVmaXg0LAogICAgICBpY29uTmFtZQogICAgfTsKICB9CiAgdmFyIHNoaW0gPSBnaXZlblByZWZpeCA9PT0gImZhIiA/IGJ5T2xkTmFtZShpY29uTmFtZSkgOiB7fTsKICB2YXIgYWxpYXNJY29uTmFtZSA9IGJ5QWxpYXMocHJlZml4NCwgaWNvbk5hbWUpOwogIGljb25OYW1lID0gc2hpbS5pY29uTmFtZSB8fCBhbGlhc0ljb25OYW1lIHx8IGljb25OYW1lOwogIHByZWZpeDQgPSBzaGltLnByZWZpeCB8fCBwcmVmaXg0OwogIGlmIChwcmVmaXg0ID09PSAiZmFyIiAmJiAhc3R5bGVzMlsiZmFyIl0gJiYgc3R5bGVzMlsiZmFzIl0gJiYgIWNvbmZpZzIuYXV0b0ZldGNoU3ZnKSB7CiAgICBwcmVmaXg0ID0gImZhcyI7CiAgfQogIHJldHVybiB7CiAgICBwcmVmaXg6IHByZWZpeDQsCiAgICBpY29uTmFtZQogIH07Cn0KZnVuY3Rpb24gZ2V0RGVmYXVsdENhbm9uaWNhbFByZWZpeChwcmVmaXhPcHRpb25zKSB7CiAgdmFyIHZhbHVlcyA9IHByZWZpeE9wdGlvbnMudmFsdWVzLCBmYW1pbHkgPSBwcmVmaXhPcHRpb25zLmZhbWlseSwgY2Fub25pY2FsID0gcHJlZml4T3B0aW9ucy5jYW5vbmljYWwsIF9wcmVmaXhPcHRpb25zJGdpdmVuUCA9IHByZWZpeE9wdGlvbnMuZ2l2ZW5QcmVmaXgsIGdpdmVuUHJlZml4ID0gX3ByZWZpeE9wdGlvbnMkZ2l2ZW5QID09PSB2b2lkIDAgPyAiIiA6IF9wcmVmaXhPcHRpb25zJGdpdmVuUCwgX3ByZWZpeE9wdGlvbnMkc3R5bGVzID0gcHJlZml4T3B0aW9ucy5zdHlsZXMsIHN0eWxlczMgPSBfcHJlZml4T3B0aW9ucyRzdHlsZXMgPT09IHZvaWQgMCA/IHt9IDogX3ByZWZpeE9wdGlvbnMkc3R5bGVzLCBfcHJlZml4T3B0aW9ucyRjb25maWcgPSBwcmVmaXhPcHRpb25zLmNvbmZpZywgY29uZmlnJCQxID0gX3ByZWZpeE9wdGlvbnMkY29uZmlnID09PSB2b2lkIDAgPyB7fSA6IF9wcmVmaXhPcHRpb25zJGNvbmZpZzsKICB2YXIgaXNEdW90b25lRmFtaWx5ID0gZmFtaWx5ID09PSB0ODsKICB2YXIgdmFsdWVzSGFzRHVvdG9uZSA9IHZhbHVlcy5pbmNsdWRlcygiZmEtZHVvdG9uZSIpIHx8IHZhbHVlcy5pbmNsdWRlcygiZmFkIik7CiAgdmFyIGRlZmF1bHRGYW1pbHlJc0R1b3RvbmUgPSBjb25maWckJDEuZmFtaWx5RGVmYXVsdCA9PT0gImR1b3RvbmUiOwogIHZhciBjYW5vbmljYWxQcmVmaXhJc0R1b3RvbmUgPSBjYW5vbmljYWwucHJlZml4ID09PSAiZmFkIiB8fCBjYW5vbmljYWwucHJlZml4ID09PSAiZmEtZHVvdG9uZSI7CiAgaWYgKCFpc0R1b3RvbmVGYW1pbHkgJiYgKHZhbHVlc0hhc0R1b3RvbmUgfHwgZGVmYXVsdEZhbWlseUlzRHVvdG9uZSB8fCBjYW5vbmljYWxQcmVmaXhJc0R1b3RvbmUpKSB7CiAgICBjYW5vbmljYWwucHJlZml4ID0gImZhZCI7CiAgfQogIGlmICh2YWx1ZXMuaW5jbHVkZXMoImZhLWJyYW5kcyIpIHx8IHZhbHVlcy5pbmNsdWRlcygiZmFiIikpIHsKICAgIGNhbm9uaWNhbC5wcmVmaXggPSAiZmFiIjsKICB9CiAgaWYgKCFjYW5vbmljYWwucHJlZml4ICYmIG5ld0Nhbm9uaWNhbEZhbWlsaWVzLmluY2x1ZGVzKGZhbWlseSkpIHsKICAgIHZhciB2YWxpZFByZWZpeCA9IE9iamVjdC5rZXlzKHN0eWxlczMpLmZpbmQoZnVuY3Rpb24oa2V5MikgewogICAgICByZXR1cm4gbmV3Q2Fub25pY2FsU3R5bGVzLmluY2x1ZGVzKGtleTIpOwogICAgfSk7CiAgICBpZiAodmFsaWRQcmVmaXggfHwgY29uZmlnJCQxLmF1dG9GZXRjaFN2ZykgewogICAgICB2YXIgZGVmYXVsdFByZWZpeCA9IFV0LmdldChmYW1pbHkpLmRlZmF1bHRTaG9ydFByZWZpeElkOwogICAgICBjYW5vbmljYWwucHJlZml4ID0gZGVmYXVsdFByZWZpeDsKICAgICAgY2Fub25pY2FsLmljb25OYW1lID0gYnlBbGlhcyhjYW5vbmljYWwucHJlZml4LCBjYW5vbmljYWwuaWNvbk5hbWUpIHx8IGNhbm9uaWNhbC5pY29uTmFtZTsKICAgIH0KICB9CiAgaWYgKGNhbm9uaWNhbC5wcmVmaXggPT09ICJmYSIgfHwgZ2l2ZW5QcmVmaXggPT09ICJmYSIpIHsKICAgIGNhbm9uaWNhbC5wcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCkgfHwgImZhcyI7CiAgfQogIHJldHVybiBjYW5vbmljYWw7Cn0KZnVuY3Rpb24gcmVnaXN0ZXJQbHVnaW5zKG5leHRQbHVnaW5zLCBfcmVmMikgewogIHZhciBvYmogPSBfcmVmMi5taXhvdXRzVG87CiAgX3BsdWdpbnMgPSBuZXh0UGx1Z2luczsKICBfaG9va3MgPSB7fTsKICBPYmplY3Qua2V5cyhwcm92aWRlcnMpLmZvckVhY2goZnVuY3Rpb24oazQpIHsKICAgIGlmIChkZWZhdWx0UHJvdmlkZXJLZXlzLmluZGV4T2YoazQpID09PSAtMSkgewogICAgICBkZWxldGUgcHJvdmlkZXJzW2s0XTsKICAgIH0KICB9KTsKICBfcGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uKHBsdWdpbikgewogICAgdmFyIG1peG91dDggPSBwbHVnaW4ubWl4b3V0ID8gcGx1Z2luLm1peG91dCgpIDoge307CiAgICBPYmplY3Qua2V5cyhtaXhvdXQ4KS5mb3JFYWNoKGZ1bmN0aW9uKHRrKSB7CiAgICAgIGlmICh0eXBlb2YgbWl4b3V0OFt0a10gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBvYmpbdGtdID0gbWl4b3V0OFt0a107CiAgICAgIH0KICAgICAgaWYgKF90eXBlb2YobWl4b3V0OFt0a10pID09PSAib2JqZWN0IikgewogICAgICAgIE9iamVjdC5rZXlzKG1peG91dDhbdGtdKS5mb3JFYWNoKGZ1bmN0aW9uKHNrKSB7CiAgICAgICAgICBpZiAoIW9ialt0a10pIHsKICAgICAgICAgICAgb2JqW3RrXSA9IHt9OwogICAgICAgICAgfQogICAgICAgICAgb2JqW3RrXVtza10gPSBtaXhvdXQ4W3RrXVtza107CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0pOwogICAgaWYgKHBsdWdpbi5ob29rcykgewogICAgICB2YXIgaG9va3M4ID0gcGx1Z2luLmhvb2tzKCk7CiAgICAgIE9iamVjdC5rZXlzKGhvb2tzOCkuZm9yRWFjaChmdW5jdGlvbihob29rKSB7CiAgICAgICAgaWYgKCFfaG9va3NbaG9va10pIHsKICAgICAgICAgIF9ob29rc1tob29rXSA9IFtdOwogICAgICAgIH0KICAgICAgICBfaG9va3NbaG9va10ucHVzaChob29rczhbaG9va10pOwogICAgICB9KTsKICAgIH0KICAgIGlmIChwbHVnaW4ucHJvdmlkZXMpIHsKICAgICAgcGx1Z2luLnByb3ZpZGVzKHByb3ZpZGVycyk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG9iajsKfQpmdW5jdGlvbiBjaGFpbkhvb2tzKGhvb2ssIGFjY3VtdWxhdG9yKSB7CiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykgewogICAgYXJnc1tfa2V5IC0gMl0gPSBhcmd1bWVudHNbX2tleV07CiAgfQogIHZhciBob29rRm5zID0gX2hvb2tzW2hvb2tdIHx8IFtdOwogIGhvb2tGbnMuZm9yRWFjaChmdW5jdGlvbihob29rRm4pIHsKICAgIGFjY3VtdWxhdG9yID0gaG9va0ZuLmFwcGx5KG51bGwsIFthY2N1bXVsYXRvcl0uY29uY2F0KGFyZ3MpKTsKICB9KTsKICByZXR1cm4gYWNjdW11bGF0b3I7Cn0KZnVuY3Rpb24gY2FsbEhvb2tzKGhvb2spIHsKICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgewogICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTsKICB9CiAgdmFyIGhvb2tGbnMgPSBfaG9va3NbaG9va10gfHwgW107CiAgaG9va0Zucy5mb3JFYWNoKGZ1bmN0aW9uKGhvb2tGbikgewogICAgaG9va0ZuLmFwcGx5KG51bGwsIGFyZ3MpOwogIH0pOwogIHJldHVybiB2b2lkIDA7Cn0KZnVuY3Rpb24gY2FsbFByb3ZpZGVkKCkgewogIHZhciBob29rID0gYXJndW1lbnRzWzBdOwogIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKICByZXR1cm4gcHJvdmlkZXJzW2hvb2tdID8gcHJvdmlkZXJzW2hvb2tdLmFwcGx5KG51bGwsIGFyZ3MpIDogdm9pZCAwOwp9CmZ1bmN0aW9uIGZpbmRJY29uRGVmaW5pdGlvbihpY29uTG9va3VwKSB7CiAgaWYgKGljb25Mb29rdXAucHJlZml4ID09PSAiZmEiKSB7CiAgICBpY29uTG9va3VwLnByZWZpeCA9ICJmYXMiOwogIH0KICB2YXIgaWNvbk5hbWUgPSBpY29uTG9va3VwLmljb25OYW1lOwogIHZhciBwcmVmaXg0ID0gaWNvbkxvb2t1cC5wcmVmaXggfHwgZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpOwogIGlmICghaWNvbk5hbWUpIHJldHVybjsKICBpY29uTmFtZSA9IGJ5QWxpYXMocHJlZml4NCwgaWNvbk5hbWUpIHx8IGljb25OYW1lOwogIHJldHVybiBpY29uRnJvbU1hcHBpbmcobGlicmFyeS5kZWZpbml0aW9ucywgcHJlZml4NCwgaWNvbk5hbWUpIHx8IGljb25Gcm9tTWFwcGluZyhuYW1lc3BhY2Uuc3R5bGVzLCBwcmVmaXg0LCBpY29uTmFtZSk7Cn0KZnVuY3Rpb24gZG9tVmFyaWFudHModmFsLCBhYnN0cmFjdENyZWF0b3IpIHsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsLCAiYWJzdHJhY3QiLCB7CiAgICBnZXQ6IGFic3RyYWN0Q3JlYXRvcgogIH0pOwogIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWwsICJodG1sIiwgewogICAgZ2V0OiBmdW5jdGlvbiBnZXQyKCkgewogICAgICByZXR1cm4gdmFsLmFic3RyYWN0Lm1hcChmdW5jdGlvbihhNSkgewogICAgICAgIHJldHVybiB0b0h0bWwyKGE1KTsKICAgICAgfSk7CiAgICB9CiAgfSk7CiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbCwgIm5vZGUiLCB7CiAgICBnZXQ6IGZ1bmN0aW9uIGdldDIoKSB7CiAgICAgIGlmICghSVNfRE9NKSByZXR1cm4gdm9pZCAwOwogICAgICB2YXIgY29udGFpbmVyID0gRE9DVU1FTlQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSB2YWwuaHRtbDsKICAgICAgcmV0dXJuIGNvbnRhaW5lci5jaGlsZHJlbjsKICAgIH0KICB9KTsKICByZXR1cm4gdmFsOwp9CmZ1bmN0aW9uIGFzSWNvbihfcmVmMikgewogIHZhciBjaGlsZHJlbjIgPSBfcmVmMi5jaGlsZHJlbiwgbWFpbiA9IF9yZWYyLm1haW4sIG1hc2sgPSBfcmVmMi5tYXNrLCBhdHRyaWJ1dGVzID0gX3JlZjIuYXR0cmlidXRlcywgc3R5bGVzMyA9IF9yZWYyLnN0eWxlcywgdHJhbnNmb3JtMiA9IF9yZWYyLnRyYW5zZm9ybTsKICBpZiAodHJhbnNmb3JtSXNNZWFuaW5nZnVsKHRyYW5zZm9ybTIpICYmIG1haW4uZm91bmQgJiYgIW1hc2suZm91bmQpIHsKICAgIHZhciB3aWR0aCA9IG1haW4ud2lkdGgsIGhlaWdodCA9IG1haW4uaGVpZ2h0OwogICAgdmFyIG9mZnNldCA9IHsKICAgICAgeDogd2lkdGggLyBoZWlnaHQgLyAyLAogICAgICB5OiAwLjUKICAgIH07CiAgICBhdHRyaWJ1dGVzWyJzdHlsZSJdID0gam9pblN0eWxlcyhfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgc3R5bGVzMyksIHt9LCB7CiAgICAgICJ0cmFuc2Zvcm0tb3JpZ2luIjogIiIuY29uY2F0KG9mZnNldC54ICsgdHJhbnNmb3JtMi54IC8gMTYsICJlbSAiKS5jb25jYXQob2Zmc2V0LnkgKyB0cmFuc2Zvcm0yLnkgLyAxNiwgImVtIikKICAgIH0pKTsKICB9CiAgcmV0dXJuIFt7CiAgICB0YWc6ICJzdmciLAogICAgYXR0cmlidXRlcywKICAgIGNoaWxkcmVuOiBjaGlsZHJlbjIKICB9XTsKfQpmdW5jdGlvbiBhc1N5bWJvbChfcmVmMikgewogIHZhciBwcmVmaXg0ID0gX3JlZjIucHJlZml4LCBpY29uTmFtZSA9IF9yZWYyLmljb25OYW1lLCBjaGlsZHJlbjIgPSBfcmVmMi5jaGlsZHJlbiwgYXR0cmlidXRlcyA9IF9yZWYyLmF0dHJpYnV0ZXMsIHN5bWJvbCA9IF9yZWYyLnN5bWJvbDsKICB2YXIgaWQgPSBzeW1ib2wgPT09IHRydWUgPyAiIi5jb25jYXQocHJlZml4NCwgIi0iKS5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItIikuY29uY2F0KGljb25OYW1lKSA6IHN5bWJvbDsKICByZXR1cm4gW3sKICAgIHRhZzogInN2ZyIsCiAgICBhdHRyaWJ1dGVzOiB7CiAgICAgIHN0eWxlOiAiZGlzcGxheTogbm9uZTsiCiAgICB9LAogICAgY2hpbGRyZW46IFt7CiAgICAgIHRhZzogInN5bWJvbCIsCiAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBhdHRyaWJ1dGVzKSwge30sIHsKICAgICAgICBpZAogICAgICB9KSwKICAgICAgY2hpbGRyZW46IGNoaWxkcmVuMgogICAgfV0KICB9XTsKfQpmdW5jdGlvbiBpc0xhYmVsZWQoYXR0cmlidXRlcykgewogIHZhciBsYWJlbHMgPSBbImFyaWEtbGFiZWwiLCAiYXJpYS1sYWJlbGxlZGJ5IiwgInRpdGxlIiwgInJvbGUiXTsKICByZXR1cm4gbGFiZWxzLnNvbWUoZnVuY3Rpb24obGFiZWwpIHsKICAgIHJldHVybiBsYWJlbCBpbiBhdHRyaWJ1dGVzOwogIH0pOwp9CmZ1bmN0aW9uIG1ha2VJbmxpbmVTdmdBYnN0cmFjdChwYXJhbXMyKSB7CiAgdmFyIF9wYXJhbXMkaWNvbnMgPSBwYXJhbXMyLmljb25zLCBtYWluID0gX3BhcmFtcyRpY29ucy5tYWluLCBtYXNrID0gX3BhcmFtcyRpY29ucy5tYXNrLCBwcmVmaXg0ID0gcGFyYW1zMi5wcmVmaXgsIGljb25OYW1lID0gcGFyYW1zMi5pY29uTmFtZSwgdHJhbnNmb3JtMiA9IHBhcmFtczIudHJhbnNmb3JtLCBzeW1ib2wgPSBwYXJhbXMyLnN5bWJvbCwgbWFza0lkID0gcGFyYW1zMi5tYXNrSWQsIGV4dHJhID0gcGFyYW1zMi5leHRyYSwgX3BhcmFtcyR3YXRjaGFibGUgPSBwYXJhbXMyLndhdGNoYWJsZSwgd2F0Y2hhYmxlID0gX3BhcmFtcyR3YXRjaGFibGUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhcmFtcyR3YXRjaGFibGU7CiAgdmFyIF9yZWYyID0gbWFzay5mb3VuZCA/IG1hc2sgOiBtYWluLCB3aWR0aCA9IF9yZWYyLndpZHRoLCBoZWlnaHQgPSBfcmVmMi5oZWlnaHQ7CiAgdmFyIGF0dHJDbGFzcyA9IFtjb25maWcyLnJlcGxhY2VtZW50Q2xhc3MsIGljb25OYW1lID8gIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLSIpLmNvbmNhdChpY29uTmFtZSkgOiAiIl0uZmlsdGVyKGZ1bmN0aW9uKGMxMSkgewogICAgcmV0dXJuIGV4dHJhLmNsYXNzZXMuaW5kZXhPZihjMTEpID09PSAtMTsKICB9KS5maWx0ZXIoZnVuY3Rpb24oYzExKSB7CiAgICByZXR1cm4gYzExICE9PSAiIiB8fCAhIWMxMTsKICB9KS5jb25jYXQoZXh0cmEuY2xhc3Nlcykuam9pbigiICIpOwogIHZhciBjb250ZW50MyA9IHsKICAgIGNoaWxkcmVuOiBbXSwKICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBleHRyYS5hdHRyaWJ1dGVzKSwge30sIHsKICAgICAgImRhdGEtcHJlZml4IjogcHJlZml4NCwKICAgICAgImRhdGEtaWNvbiI6IGljb25OYW1lLAogICAgICAiY2xhc3MiOiBhdHRyQ2xhc3MsCiAgICAgICJyb2xlIjogZXh0cmEuYXR0cmlidXRlcy5yb2xlIHx8ICJpbWciLAogICAgICAidmlld0JveCI6ICIwIDAgIi5jb25jYXQod2lkdGgsICIgIikuY29uY2F0KGhlaWdodCkKICAgIH0pCiAgfTsKICBpZiAoIWlzTGFiZWxlZChleHRyYS5hdHRyaWJ1dGVzKSAmJiAhZXh0cmEuYXR0cmlidXRlc1siYXJpYS1oaWRkZW4iXSkgewogICAgY29udGVudDMuYXR0cmlidXRlc1siYXJpYS1oaWRkZW4iXSA9ICJ0cnVlIjsKICB9CiAgaWYgKHdhdGNoYWJsZSkgewogICAgY29udGVudDMuYXR0cmlidXRlc1tEQVRBX0ZBX0kyU1ZHXSA9ICIiOwogIH0KICB2YXIgYXJncyA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBjb250ZW50MyksIHt9LCB7CiAgICBwcmVmaXg6IHByZWZpeDQsCiAgICBpY29uTmFtZSwKICAgIG1haW4sCiAgICBtYXNrLAogICAgbWFza0lkLAogICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0yLAogICAgc3ltYm9sLAogICAgc3R5bGVzOiBfb2JqZWN0U3ByZWFkMih7fSwgZXh0cmEuc3R5bGVzKQogIH0pOwogIHZhciBfcmVmMjIgPSBtYXNrLmZvdW5kICYmIG1haW4uZm91bmQgPyBjYWxsUHJvdmlkZWQoImdlbmVyYXRlQWJzdHJhY3RNYXNrIiwgYXJncykgfHwgewogICAgY2hpbGRyZW46IFtdLAogICAgYXR0cmlidXRlczoge30KICB9IDogY2FsbFByb3ZpZGVkKCJnZW5lcmF0ZUFic3RyYWN0SWNvbiIsIGFyZ3MpIHx8IHsKICAgIGNoaWxkcmVuOiBbXSwKICAgIGF0dHJpYnV0ZXM6IHt9CiAgfSwgY2hpbGRyZW4yID0gX3JlZjIyLmNoaWxkcmVuLCBhdHRyaWJ1dGVzID0gX3JlZjIyLmF0dHJpYnV0ZXM7CiAgYXJncy5jaGlsZHJlbiA9IGNoaWxkcmVuMjsKICBhcmdzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogIGlmIChzeW1ib2wpIHsKICAgIHJldHVybiBhc1N5bWJvbChhcmdzKTsKICB9IGVsc2UgewogICAgcmV0dXJuIGFzSWNvbihhcmdzKTsKICB9Cn0KZnVuY3Rpb24gbWFrZUxheWVyc1RleHRBYnN0cmFjdChwYXJhbXMyKSB7CiAgdmFyIGNvbnRlbnQzID0gcGFyYW1zMi5jb250ZW50LCB3aWR0aCA9IHBhcmFtczIud2lkdGgsIGhlaWdodCA9IHBhcmFtczIuaGVpZ2h0LCB0cmFuc2Zvcm0yID0gcGFyYW1zMi50cmFuc2Zvcm0sIGV4dHJhID0gcGFyYW1zMi5leHRyYSwgX3BhcmFtcyR3YXRjaGFibGUyID0gcGFyYW1zMi53YXRjaGFibGUsIHdhdGNoYWJsZSA9IF9wYXJhbXMkd2F0Y2hhYmxlMiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcGFyYW1zJHdhdGNoYWJsZTI7CiAgdmFyIGF0dHJpYnV0ZXMgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgZXh0cmEuYXR0cmlidXRlcyksIHt9LCB7CiAgICBjbGFzczogZXh0cmEuY2xhc3Nlcy5qb2luKCIgIikKICB9KTsKICBpZiAod2F0Y2hhYmxlKSB7CiAgICBhdHRyaWJ1dGVzW0RBVEFfRkFfSTJTVkddID0gIiI7CiAgfQogIHZhciBzdHlsZXMzID0gX29iamVjdFNwcmVhZDIoe30sIGV4dHJhLnN0eWxlcyk7CiAgaWYgKHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0yKSkgewogICAgc3R5bGVzM1sidHJhbnNmb3JtIl0gPSB0cmFuc2Zvcm1Gb3JDc3MoewogICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybTIsCiAgICAgIHN0YXJ0Q2VudGVyZWQ6IHRydWUsCiAgICAgIHdpZHRoLAogICAgICBoZWlnaHQKICAgIH0pOwogICAgc3R5bGVzM1siLXdlYmtpdC10cmFuc2Zvcm0iXSA9IHN0eWxlczNbInRyYW5zZm9ybSJdOwogIH0KICB2YXIgc3R5bGVTdHJpbmcgPSBqb2luU3R5bGVzKHN0eWxlczMpOwogIGlmIChzdHlsZVN0cmluZy5sZW5ndGggPiAwKSB7CiAgICBhdHRyaWJ1dGVzWyJzdHlsZSJdID0gc3R5bGVTdHJpbmc7CiAgfQogIHZhciB2YWwgPSBbXTsKICB2YWwucHVzaCh7CiAgICB0YWc6ICJzcGFuIiwKICAgIGF0dHJpYnV0ZXMsCiAgICBjaGlsZHJlbjogW2NvbnRlbnQzXQogIH0pOwogIHJldHVybiB2YWw7Cn0KZnVuY3Rpb24gbWFrZUxheWVyc0NvdW50ZXJBYnN0cmFjdChwYXJhbXMyKSB7CiAgdmFyIGNvbnRlbnQzID0gcGFyYW1zMi5jb250ZW50LCBleHRyYSA9IHBhcmFtczIuZXh0cmE7CiAgdmFyIGF0dHJpYnV0ZXMgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgZXh0cmEuYXR0cmlidXRlcyksIHt9LCB7CiAgICBjbGFzczogZXh0cmEuY2xhc3Nlcy5qb2luKCIgIikKICB9KTsKICB2YXIgc3R5bGVTdHJpbmcgPSBqb2luU3R5bGVzKGV4dHJhLnN0eWxlcyk7CiAgaWYgKHN0eWxlU3RyaW5nLmxlbmd0aCA+IDApIHsKICAgIGF0dHJpYnV0ZXNbInN0eWxlIl0gPSBzdHlsZVN0cmluZzsKICB9CiAgdmFyIHZhbCA9IFtdOwogIHZhbC5wdXNoKHsKICAgIHRhZzogInNwYW4iLAogICAgYXR0cmlidXRlcywKICAgIGNoaWxkcmVuOiBbY29udGVudDNdCiAgfSk7CiAgcmV0dXJuIHZhbDsKfQpmdW5jdGlvbiBhc0ZvdW5kSWNvbihpY29uMykgewogIHZhciB3aWR0aCA9IGljb24zWzBdOwogIHZhciBoZWlnaHQgPSBpY29uM1sxXTsKICB2YXIgX2ljb24kc2xpY2UgPSBpY29uMy5zbGljZSg0KSwgX2ljb24kc2xpY2UyID0gX3NsaWNlZFRvQXJyYXkoX2ljb24kc2xpY2UsIDEpLCB2ZWN0b3JEYXRhID0gX2ljb24kc2xpY2UyWzBdOwogIHZhciBlbGVtZW50NCA9IG51bGw7CiAgaWYgKEFycmF5LmlzQXJyYXkodmVjdG9yRGF0YSkpIHsKICAgIGVsZW1lbnQ0ID0gewogICAgICB0YWc6ICJnIiwKICAgICAgYXR0cmlidXRlczogewogICAgICAgIGNsYXNzOiAiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItIikuY29uY2F0KERVT1RPTkVfQ0xBU1NFUy5HUk9VUCkKICAgICAgfSwKICAgICAgY2hpbGRyZW46IFt7CiAgICAgICAgdGFnOiAicGF0aCIsCiAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgY2xhc3M6ICIiLmNvbmNhdChjb25maWcyLmNzc1ByZWZpeCwgIi0iKS5jb25jYXQoRFVPVE9ORV9DTEFTU0VTLlNFQ09OREFSWSksCiAgICAgICAgICBmaWxsOiAiY3VycmVudENvbG9yIiwKICAgICAgICAgIGQ6IHZlY3RvckRhdGFbMF0KICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICB0YWc6ICJwYXRoIiwKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBjbGFzczogIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLSIpLmNvbmNhdChEVU9UT05FX0NMQVNTRVMuUFJJTUFSWSksCiAgICAgICAgICBmaWxsOiAiY3VycmVudENvbG9yIiwKICAgICAgICAgIGQ6IHZlY3RvckRhdGFbMV0KICAgICAgICB9CiAgICAgIH1dCiAgICB9OwogIH0gZWxzZSB7CiAgICBlbGVtZW50NCA9IHsKICAgICAgdGFnOiAicGF0aCIsCiAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBmaWxsOiAiY3VycmVudENvbG9yIiwKICAgICAgICBkOiB2ZWN0b3JEYXRhCiAgICAgIH0KICAgIH07CiAgfQogIHJldHVybiB7CiAgICBmb3VuZDogdHJ1ZSwKICAgIHdpZHRoLAogICAgaGVpZ2h0LAogICAgaWNvbjogZWxlbWVudDQKICB9Owp9CmZ1bmN0aW9uIG1heWJlTm90aWZ5TWlzc2luZyhpY29uTmFtZSwgcHJlZml4NCkgewogIGlmICghUFJPRFVDVElPTiAmJiAhY29uZmlnMi5zaG93TWlzc2luZ0ljb25zICYmIGljb25OYW1lKSB7CiAgICBjb25zb2xlLmVycm9yKCdJY29uIHdpdGggbmFtZSAiJy5jb25jYXQoaWNvbk5hbWUsICciIGFuZCBwcmVmaXggIicpLmNvbmNhdChwcmVmaXg0LCAnIiBpcyBtaXNzaW5nLicpKTsKICB9Cn0KZnVuY3Rpb24gZmluZEljb24oaWNvbk5hbWUsIHByZWZpeDQpIHsKICB2YXIgZ2l2ZW5QcmVmaXggPSBwcmVmaXg0OwogIGlmIChwcmVmaXg0ID09PSAiZmEiICYmIGNvbmZpZzIuc3R5bGVEZWZhdWx0ICE9PSBudWxsKSB7CiAgICBwcmVmaXg0ID0gZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpOwogIH0KICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZTIsIHJlamVjdCkgewogICAgaWYgKGdpdmVuUHJlZml4ID09PSAiZmEiKSB7CiAgICAgIHZhciBzaGltID0gYnlPbGROYW1lKGljb25OYW1lKSB8fCB7fTsKICAgICAgaWNvbk5hbWUgPSBzaGltLmljb25OYW1lIHx8IGljb25OYW1lOwogICAgICBwcmVmaXg0ID0gc2hpbS5wcmVmaXggfHwgcHJlZml4NDsKICAgIH0KICAgIGlmIChpY29uTmFtZSAmJiBwcmVmaXg0ICYmIHN0eWxlcyQxW3ByZWZpeDRdICYmIHN0eWxlcyQxW3ByZWZpeDRdW2ljb25OYW1lXSkgewogICAgICB2YXIgaWNvbjMgPSBzdHlsZXMkMVtwcmVmaXg0XVtpY29uTmFtZV07CiAgICAgIHJldHVybiByZXNvbHZlMihhc0ZvdW5kSWNvbihpY29uMykpOwogICAgfQogICAgbWF5YmVOb3RpZnlNaXNzaW5nKGljb25OYW1lLCBwcmVmaXg0KTsKICAgIHJlc29sdmUyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtaXNzaW5nSWNvblJlc29sdXRpb25NaXhpbiksIHt9LCB7CiAgICAgIGljb246IGNvbmZpZzIuc2hvd01pc3NpbmdJY29ucyAmJiBpY29uTmFtZSA/IGNhbGxQcm92aWRlZCgibWlzc2luZ0ljb25BYnN0cmFjdCIpIHx8IHt9IDoge30KICAgIH0pKTsKICB9KTsKfQpmdW5jdGlvbiBpc1dhdGNoZWQobm9kZTIpIHsKICB2YXIgaTJzdmcyID0gbm9kZTIuZ2V0QXR0cmlidXRlID8gbm9kZTIuZ2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcpIDogbnVsbDsKICByZXR1cm4gdHlwZW9mIGkyc3ZnMiA9PT0gInN0cmluZyI7Cn0KZnVuY3Rpb24gaGFzUHJlZml4QW5kSWNvbihub2RlMikgewogIHZhciBwcmVmaXg0ID0gbm9kZTIuZ2V0QXR0cmlidXRlID8gbm9kZTIuZ2V0QXR0cmlidXRlKERBVEFfUFJFRklYKSA6IG51bGw7CiAgdmFyIGljb24zID0gbm9kZTIuZ2V0QXR0cmlidXRlID8gbm9kZTIuZ2V0QXR0cmlidXRlKERBVEFfSUNPTikgOiBudWxsOwogIHJldHVybiBwcmVmaXg0ICYmIGljb24zOwp9CmZ1bmN0aW9uIGhhc0JlZW5SZXBsYWNlZChub2RlMikgewogIHJldHVybiBub2RlMiAmJiBub2RlMi5jbGFzc0xpc3QgJiYgbm9kZTIuY2xhc3NMaXN0LmNvbnRhaW5zICYmIG5vZGUyLmNsYXNzTGlzdC5jb250YWlucyhjb25maWcyLnJlcGxhY2VtZW50Q2xhc3MpOwp9CmZ1bmN0aW9uIGdldE11dGF0b3IoKSB7CiAgaWYgKGNvbmZpZzIuYXV0b1JlcGxhY2VTdmcgPT09IHRydWUpIHsKICAgIHJldHVybiBtdXRhdG9ycy5yZXBsYWNlOwogIH0KICB2YXIgbXV0YXRvciA9IG11dGF0b3JzW2NvbmZpZzIuYXV0b1JlcGxhY2VTdmddOwogIHJldHVybiBtdXRhdG9yIHx8IG11dGF0b3JzLnJlcGxhY2U7Cn0KZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TKHRhZykgewogIHJldHVybiBET0NVTUVOVC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgdGFnKTsKfQpmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZykgewogIHJldHVybiBET0NVTUVOVC5jcmVhdGVFbGVtZW50KHRhZyk7Cn0KZnVuY3Rpb24gY29udmVydFNWRyhhYnN0cmFjdE9iaikgewogIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTsKICB2YXIgX3BhcmFtcyRjZUZuID0gcGFyYW1zMi5jZUZuLCBjZUZuID0gX3BhcmFtcyRjZUZuID09PSB2b2lkIDAgPyBhYnN0cmFjdE9iai50YWcgPT09ICJzdmciID8gY3JlYXRlRWxlbWVudE5TIDogY3JlYXRlRWxlbWVudCA6IF9wYXJhbXMkY2VGbjsKICBpZiAodHlwZW9mIGFic3RyYWN0T2JqID09PSAic3RyaW5nIikgewogICAgcmV0dXJuIERPQ1VNRU5ULmNyZWF0ZVRleHROb2RlKGFic3RyYWN0T2JqKTsKICB9CiAgdmFyIHRhZyA9IGNlRm4oYWJzdHJhY3RPYmoudGFnKTsKICBPYmplY3Qua2V5cyhhYnN0cmFjdE9iai5hdHRyaWJ1dGVzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGtleTIpIHsKICAgIHRhZy5zZXRBdHRyaWJ1dGUoa2V5MiwgYWJzdHJhY3RPYmouYXR0cmlidXRlc1trZXkyXSk7CiAgfSk7CiAgdmFyIGNoaWxkcmVuMiA9IGFic3RyYWN0T2JqLmNoaWxkcmVuIHx8IFtdOwogIGNoaWxkcmVuMi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKSB7CiAgICB0YWcuYXBwZW5kQ2hpbGQoY29udmVydFNWRyhjaGlsZCwgewogICAgICBjZUZuCiAgICB9KSk7CiAgfSk7CiAgcmV0dXJuIHRhZzsKfQpmdW5jdGlvbiBub2RlQXNDb21tZW50KG5vZGUyKSB7CiAgdmFyIGNvbW1lbnQzID0gIiAiLmNvbmNhdChub2RlMi5vdXRlckhUTUwsICIgIik7CiAgY29tbWVudDMgPSAiIi5jb25jYXQoY29tbWVudDMsICJGb250IEF3ZXNvbWUgZm9udGF3ZXNvbWUuY29tICIpOwogIHJldHVybiBjb21tZW50MzsKfQpmdW5jdGlvbiBwZXJmb3JtT3BlcmF0aW9uU3luYyhvcCkgewogIG9wKCk7Cn0KZnVuY3Rpb24gcGVyZm9ybShtdXRhdGlvbnMsIGNhbGxiYWNrKSB7CiAgdmFyIGNhbGxiYWNrRnVuY3Rpb24gPSB0eXBlb2YgY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIgPyBjYWxsYmFjayA6IG5vb3AkMjsKICBpZiAobXV0YXRpb25zLmxlbmd0aCA9PT0gMCkgewogICAgY2FsbGJhY2tGdW5jdGlvbigpOwogIH0gZWxzZSB7CiAgICB2YXIgZnJhbWUgPSBwZXJmb3JtT3BlcmF0aW9uU3luYzsKICAgIGlmIChjb25maWcyLm11dGF0ZUFwcHJvYWNoID09PSBNVVRBVElPTl9BUFBST0FDSF9BU1lOQykgewogICAgICBmcmFtZSA9IFdJTkRPVy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgcGVyZm9ybU9wZXJhdGlvblN5bmM7CiAgICB9CiAgICBmcmFtZShmdW5jdGlvbigpIHsKICAgICAgdmFyIG11dGF0b3IgPSBnZXRNdXRhdG9yKCk7CiAgICAgIHZhciBtYXJrMiA9IHBlcmYuYmVnaW4oIm11dGF0ZSIpOwogICAgICBtdXRhdGlvbnMubWFwKG11dGF0b3IpOwogICAgICBtYXJrMigpOwogICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICB9KTsKICB9Cn0KZnVuY3Rpb24gZGlzYWJsZU9ic2VydmF0aW9uKCkgewogIGRpc2FibGVkID0gdHJ1ZTsKfQpmdW5jdGlvbiBlbmFibGVPYnNlcnZhdGlvbigpIHsKICBkaXNhYmxlZCA9IGZhbHNlOwp9CmZ1bmN0aW9uIG9ic2VydmUob3B0aW9ucykgewogIGlmICghTVVUQVRJT05fT0JTRVJWRVIpIHsKICAgIHJldHVybjsKICB9CiAgaWYgKCFjb25maWcyLm9ic2VydmVNdXRhdGlvbnMpIHsKICAgIHJldHVybjsKICB9CiAgdmFyIF9vcHRpb25zJHRyZWVDYWxsYmFjayA9IG9wdGlvbnMudHJlZUNhbGxiYWNrLCB0cmVlQ2FsbGJhY2sgPSBfb3B0aW9ucyR0cmVlQ2FsbGJhY2sgPT09IHZvaWQgMCA/IG5vb3AkMiA6IF9vcHRpb25zJHRyZWVDYWxsYmFjaywgX29wdGlvbnMkbm9kZUNhbGxiYWNrID0gb3B0aW9ucy5ub2RlQ2FsbGJhY2ssIG5vZGVDYWxsYmFjayA9IF9vcHRpb25zJG5vZGVDYWxsYmFjayA9PT0gdm9pZCAwID8gbm9vcCQyIDogX29wdGlvbnMkbm9kZUNhbGxiYWNrLCBfb3B0aW9ucyRwc2V1ZG9FbGVtZW4gPSBvcHRpb25zLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2ssIHBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sgPSBfb3B0aW9ucyRwc2V1ZG9FbGVtZW4gPT09IHZvaWQgMCA/IG5vb3AkMiA6IF9vcHRpb25zJHBzZXVkb0VsZW1lbiwgX29wdGlvbnMkb2JzZXJ2ZU11dGF0ID0gb3B0aW9ucy5vYnNlcnZlTXV0YXRpb25zUm9vdCwgb2JzZXJ2ZU11dGF0aW9uc1Jvb3QgPSBfb3B0aW9ucyRvYnNlcnZlTXV0YXQgPT09IHZvaWQgMCA/IERPQ1VNRU5UIDogX29wdGlvbnMkb2JzZXJ2ZU11dGF0OwogIG1vID0gbmV3IE1VVEFUSU9OX09CU0VSVkVSKGZ1bmN0aW9uKG9iamVjdHMpIHsKICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuOwogICAgdmFyIGRlZmF1bHRQcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7CiAgICB0b0FycmF5MihvYmplY3RzKS5mb3JFYWNoKGZ1bmN0aW9uKG11dGF0aW9uUmVjb3JkKSB7CiAgICAgIGlmIChtdXRhdGlvblJlY29yZC50eXBlID09PSAiY2hpbGRMaXN0IiAmJiBtdXRhdGlvblJlY29yZC5hZGRlZE5vZGVzLmxlbmd0aCA+IDAgJiYgIWlzV2F0Y2hlZChtdXRhdGlvblJlY29yZC5hZGRlZE5vZGVzWzBdKSkgewogICAgICAgIGlmIChjb25maWcyLnNlYXJjaFBzZXVkb0VsZW1lbnRzKSB7CiAgICAgICAgICBwc2V1ZG9FbGVtZW50c0NhbGxiYWNrKG11dGF0aW9uUmVjb3JkLnRhcmdldCk7CiAgICAgICAgfQogICAgICAgIHRyZWVDYWxsYmFjayhtdXRhdGlvblJlY29yZC50YXJnZXQpOwogICAgICB9CiAgICAgIGlmIChtdXRhdGlvblJlY29yZC50eXBlID09PSAiYXR0cmlidXRlcyIgJiYgbXV0YXRpb25SZWNvcmQudGFyZ2V0LnBhcmVudE5vZGUgJiYgY29uZmlnMi5zZWFyY2hQc2V1ZG9FbGVtZW50cykgewogICAgICAgIHBzZXVkb0VsZW1lbnRzQ2FsbGJhY2soW211dGF0aW9uUmVjb3JkLnRhcmdldF0sIHRydWUpOwogICAgICB9CiAgICAgIGlmIChtdXRhdGlvblJlY29yZC50eXBlID09PSAiYXR0cmlidXRlcyIgJiYgaXNXYXRjaGVkKG11dGF0aW9uUmVjb3JkLnRhcmdldCkgJiYgfkFUVFJJQlVURVNfV0FUQ0hFRF9GT1JfTVVUQVRJT04uaW5kZXhPZihtdXRhdGlvblJlY29yZC5hdHRyaWJ1dGVOYW1lKSkgewogICAgICAgIGlmIChtdXRhdGlvblJlY29yZC5hdHRyaWJ1dGVOYW1lID09PSAiY2xhc3MiICYmIGhhc1ByZWZpeEFuZEljb24obXV0YXRpb25SZWNvcmQudGFyZ2V0KSkgewogICAgICAgICAgdmFyIF9nZXRDYW5vbmljYWxJY29uID0gZ2V0Q2Fub25pY2FsSWNvbihjbGFzc0FycmF5KG11dGF0aW9uUmVjb3JkLnRhcmdldCkpLCBwcmVmaXg0ID0gX2dldENhbm9uaWNhbEljb24ucHJlZml4LCBpY29uTmFtZSA9IF9nZXRDYW5vbmljYWxJY29uLmljb25OYW1lOwogICAgICAgICAgbXV0YXRpb25SZWNvcmQudGFyZ2V0LnNldEF0dHJpYnV0ZShEQVRBX1BSRUZJWCwgcHJlZml4NCB8fCBkZWZhdWx0UHJlZml4KTsKICAgICAgICAgIGlmIChpY29uTmFtZSkgbXV0YXRpb25SZWNvcmQudGFyZ2V0LnNldEF0dHJpYnV0ZShEQVRBX0lDT04sIGljb25OYW1lKTsKICAgICAgICB9IGVsc2UgaWYgKGhhc0JlZW5SZXBsYWNlZChtdXRhdGlvblJlY29yZC50YXJnZXQpKSB7CiAgICAgICAgICBub2RlQ2FsbGJhY2sobXV0YXRpb25SZWNvcmQudGFyZ2V0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0pOwogIGlmICghSVNfRE9NKSByZXR1cm47CiAgbW8ub2JzZXJ2ZShvYnNlcnZlTXV0YXRpb25zUm9vdCwgewogICAgY2hpbGRMaXN0OiB0cnVlLAogICAgYXR0cmlidXRlczogdHJ1ZSwKICAgIGNoYXJhY3RlckRhdGE6IHRydWUsCiAgICBzdWJ0cmVlOiB0cnVlCiAgfSk7Cn0KZnVuY3Rpb24gZGlzY29ubmVjdCgpIHsKICBpZiAoIW1vKSByZXR1cm47CiAgbW8uZGlzY29ubmVjdCgpOwp9CmZ1bmN0aW9uIHN0eWxlUGFyc2VyKG5vZGUyKSB7CiAgdmFyIHN0eWxlID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJzdHlsZSIpOwogIHZhciB2YWwgPSBbXTsKICBpZiAoc3R5bGUpIHsKICAgIHZhbCA9IHN0eWxlLnNwbGl0KCI7IikucmVkdWNlKGZ1bmN0aW9uKGFjYywgc3R5bGUyKSB7CiAgICAgIHZhciBzdHlsZXMzID0gc3R5bGUyLnNwbGl0KCI6Iik7CiAgICAgIHZhciBwcm9wID0gc3R5bGVzM1swXTsKICAgICAgdmFyIHZhbHVlMiA9IHN0eWxlczMuc2xpY2UoMSk7CiAgICAgIGlmIChwcm9wICYmIHZhbHVlMi5sZW5ndGggPiAwKSB7CiAgICAgICAgYWNjW3Byb3BdID0gdmFsdWUyLmpvaW4oIjoiKS50cmltKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGFjYzsKICAgIH0sIHt9KTsKICB9CiAgcmV0dXJuIHZhbDsKfQpmdW5jdGlvbiBjbGFzc1BhcnNlcihub2RlMikgewogIHZhciBleGlzdGluZ1ByZWZpeCA9IG5vZGUyLmdldEF0dHJpYnV0ZSgiZGF0YS1wcmVmaXgiKTsKICB2YXIgZXhpc3RpbmdJY29uTmFtZSA9IG5vZGUyLmdldEF0dHJpYnV0ZSgiZGF0YS1pY29uIik7CiAgdmFyIGlubmVyVGV4dCA9IG5vZGUyLmlubmVyVGV4dCAhPT0gdm9pZCAwID8gbm9kZTIuaW5uZXJUZXh0LnRyaW0oKSA6ICIiOwogIHZhciB2YWwgPSBnZXRDYW5vbmljYWxJY29uKGNsYXNzQXJyYXkobm9kZTIpKTsKICBpZiAoIXZhbC5wcmVmaXgpIHsKICAgIHZhbC5wcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7CiAgfQogIGlmIChleGlzdGluZ1ByZWZpeCAmJiBleGlzdGluZ0ljb25OYW1lKSB7CiAgICB2YWwucHJlZml4ID0gZXhpc3RpbmdQcmVmaXg7CiAgICB2YWwuaWNvbk5hbWUgPSBleGlzdGluZ0ljb25OYW1lOwogIH0KICBpZiAodmFsLmljb25OYW1lICYmIHZhbC5wcmVmaXgpIHsKICAgIHJldHVybiB2YWw7CiAgfQogIGlmICh2YWwucHJlZml4ICYmIGlubmVyVGV4dC5sZW5ndGggPiAwKSB7CiAgICB2YWwuaWNvbk5hbWUgPSBieUxpZ2F0dXJlKHZhbC5wcmVmaXgsIG5vZGUyLmlubmVyVGV4dCkgfHwgYnlVbmljb2RlKHZhbC5wcmVmaXgsIHRvSGV4KG5vZGUyLmlubmVyVGV4dCkpOwogIH0KICBpZiAoIXZhbC5pY29uTmFtZSAmJiBjb25maWcyLmF1dG9GZXRjaFN2ZyAmJiBub2RlMi5maXJzdENoaWxkICYmIG5vZGUyLmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICB2YWwuaWNvbk5hbWUgPSBub2RlMi5maXJzdENoaWxkLmRhdGE7CiAgfQogIHJldHVybiB2YWw7Cn0KZnVuY3Rpb24gYXR0cmlidXRlc1BhcnNlcihub2RlMikgewogIHZhciBleHRyYUF0dHJpYnV0ZXMgPSB0b0FycmF5Mihub2RlMi5hdHRyaWJ1dGVzKS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBhdHRyKSB7CiAgICBpZiAoYWNjLm5hbWUgIT09ICJjbGFzcyIgJiYgYWNjLm5hbWUgIT09ICJzdHlsZSIpIHsKICAgICAgYWNjW2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlOwogICAgfQogICAgcmV0dXJuIGFjYzsKICB9LCB7fSk7CiAgcmV0dXJuIGV4dHJhQXR0cmlidXRlczsKfQpmdW5jdGlvbiBibGFua01ldGEoKSB7CiAgcmV0dXJuIHsKICAgIGljb25OYW1lOiBudWxsLAogICAgcHJlZml4OiBudWxsLAogICAgdHJhbnNmb3JtOiBtZWFuaW5nbGVzc1RyYW5zZm9ybSwKICAgIHN5bWJvbDogZmFsc2UsCiAgICBtYXNrOiB7CiAgICAgIGljb25OYW1lOiBudWxsLAogICAgICBwcmVmaXg6IG51bGwsCiAgICAgIHJlc3Q6IFtdCiAgICB9LAogICAgbWFza0lkOiBudWxsLAogICAgZXh0cmE6IHsKICAgICAgY2xhc3NlczogW10sCiAgICAgIHN0eWxlczoge30sCiAgICAgIGF0dHJpYnV0ZXM6IHt9CiAgICB9CiAgfTsKfQpmdW5jdGlvbiBwYXJzZU1ldGEobm9kZTIpIHsKICB2YXIgcGFyc2VyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7CiAgICBzdHlsZVBhcnNlcjogdHJ1ZQogIH07CiAgdmFyIF9jbGFzc1BhcnNlciA9IGNsYXNzUGFyc2VyKG5vZGUyKSwgaWNvbk5hbWUgPSBfY2xhc3NQYXJzZXIuaWNvbk5hbWUsIHByZWZpeDQgPSBfY2xhc3NQYXJzZXIucHJlZml4LCBleHRyYUNsYXNzZXMgPSBfY2xhc3NQYXJzZXIucmVzdDsKICB2YXIgZXh0cmFBdHRyaWJ1dGVzID0gYXR0cmlidXRlc1BhcnNlcihub2RlMik7CiAgdmFyIHBsdWdpbk1ldGEgPSBjaGFpbkhvb2tzKCJwYXJzZU5vZGVBdHRyaWJ1dGVzIiwge30sIG5vZGUyKTsKICB2YXIgZXh0cmFTdHlsZXMgPSBwYXJzZXIuc3R5bGVQYXJzZXIgPyBzdHlsZVBhcnNlcihub2RlMikgOiBbXTsKICByZXR1cm4gX29iamVjdFNwcmVhZDIoewogICAgaWNvbk5hbWUsCiAgICBwcmVmaXg6IHByZWZpeDQsCiAgICB0cmFuc2Zvcm06IG1lYW5pbmdsZXNzVHJhbnNmb3JtLAogICAgbWFzazogewogICAgICBpY29uTmFtZTogbnVsbCwKICAgICAgcHJlZml4OiBudWxsLAogICAgICByZXN0OiBbXQogICAgfSwKICAgIG1hc2tJZDogbnVsbCwKICAgIHN5bWJvbDogZmFsc2UsCiAgICBleHRyYTogewogICAgICBjbGFzc2VzOiBleHRyYUNsYXNzZXMsCiAgICAgIHN0eWxlczogZXh0cmFTdHlsZXMsCiAgICAgIGF0dHJpYnV0ZXM6IGV4dHJhQXR0cmlidXRlcwogICAgfQogIH0sIHBsdWdpbk1ldGEpOwp9CmZ1bmN0aW9uIGdlbmVyYXRlTXV0YXRpb24obm9kZTIpIHsKICB2YXIgbm9kZU1ldGEgPSBjb25maWcyLmF1dG9SZXBsYWNlU3ZnID09PSAibmVzdCIgPyBwYXJzZU1ldGEobm9kZTIsIHsKICAgIHN0eWxlUGFyc2VyOiBmYWxzZQogIH0pIDogcGFyc2VNZXRhKG5vZGUyKTsKICBpZiAofm5vZGVNZXRhLmV4dHJhLmNsYXNzZXMuaW5kZXhPZihMQVlFUlNfVEVYVF9DTEFTU05BTUUpKSB7CiAgICByZXR1cm4gY2FsbFByb3ZpZGVkKCJnZW5lcmF0ZUxheWVyc1RleHQiLCBub2RlMiwgbm9kZU1ldGEpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gY2FsbFByb3ZpZGVkKCJnZW5lcmF0ZVN2Z1JlcGxhY2VtZW50TXV0YXRpb24iLCBub2RlMiwgbm9kZU1ldGEpOwogIH0KfQpmdW5jdGlvbiBnZXRLbm93blByZWZpeGVzKCkgewogIHJldHVybiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KFl0KSwgX3RvQ29uc3VtYWJsZUFycmF5KFp0JDEpKTsKfQpmdW5jdGlvbiBvblRyZWUocm9vdDYpIHsKICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IG51bGw7CiAgaWYgKCFJU19ET00pIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKICB2YXIgaHRtbENsYXNzTGlzdCA9IERPQ1VNRU5ULmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3Q7CiAgdmFyIGhjbEFkZCA9IGZ1bmN0aW9uIGhjbEFkZDIoc3VmZml4KSB7CiAgICByZXR1cm4gaHRtbENsYXNzTGlzdC5hZGQoIiIuY29uY2F0KEhUTUxfQ0xBU1NfSTJTVkdfQkFTRV9DTEFTUywgIi0iKS5jb25jYXQoc3VmZml4KSk7CiAgfTsKICB2YXIgaGNsUmVtb3ZlID0gZnVuY3Rpb24gaGNsUmVtb3ZlMihzdWZmaXgpIHsKICAgIHJldHVybiBodG1sQ2xhc3NMaXN0LnJlbW92ZSgiIi5jb25jYXQoSFRNTF9DTEFTU19JMlNWR19CQVNFX0NMQVNTLCAiLSIpLmNvbmNhdChzdWZmaXgpKTsKICB9OwogIHZhciBwcmVmaXhlcyA9IGNvbmZpZzIuYXV0b0ZldGNoU3ZnID8gZ2V0S25vd25QcmVmaXhlcygpIDogUS5jb25jYXQoT2JqZWN0LmtleXMoc3R5bGVzJDIpKTsKICBpZiAoIXByZWZpeGVzLmluY2x1ZGVzKCJmYSIpKSB7CiAgICBwcmVmaXhlcy5wdXNoKCJmYSIpOwogIH0KICB2YXIgcHJlZml4ZXNEb21RdWVyeSA9IFsiLiIuY29uY2F0KExBWUVSU19URVhUX0NMQVNTTkFNRSwgIjpub3QoWyIpLmNvbmNhdChEQVRBX0ZBX0kyU1ZHLCAiXSkiKV0uY29uY2F0KHByZWZpeGVzLm1hcChmdW5jdGlvbihwJCQxKSB7CiAgICByZXR1cm4gIi4iLmNvbmNhdChwJCQxLCAiOm5vdChbIikuY29uY2F0KERBVEFfRkFfSTJTVkcsICJdKSIpOwogIH0pKS5qb2luKCIsICIpOwogIGlmIChwcmVmaXhlc0RvbVF1ZXJ5Lmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwogIH0KICB2YXIgY2FuZGlkYXRlcyA9IFtdOwogIHRyeSB7CiAgICBjYW5kaWRhdGVzID0gdG9BcnJheTIocm9vdDYucXVlcnlTZWxlY3RvckFsbChwcmVmaXhlc0RvbVF1ZXJ5KSk7CiAgfSBjYXRjaCAoZSQkMSkgewogIH0KICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPiAwKSB7CiAgICBoY2xBZGQoInBlbmRpbmciKTsKICAgIGhjbFJlbW92ZSgiY29tcGxldGUiKTsKICB9IGVsc2UgewogICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwogIH0KICB2YXIgbWFyazIgPSBwZXJmLmJlZ2luKCJvblRyZWUiKTsKICB2YXIgbXV0YXRpb25zID0gY2FuZGlkYXRlcy5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBub2RlMikgewogICAgdHJ5IHsKICAgICAgdmFyIG11dGF0aW9uID0gZ2VuZXJhdGVNdXRhdGlvbihub2RlMik7CiAgICAgIGlmIChtdXRhdGlvbikgewogICAgICAgIGFjYy5wdXNoKG11dGF0aW9uKTsKICAgICAgfQogICAgfSBjYXRjaCAoZSQkMSkgewogICAgICBpZiAoIVBST0RVQ1RJT04pIHsKICAgICAgICBpZiAoZSQkMS5uYW1lID09PSAiTWlzc2luZ0ljb24iKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKGUkJDEpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGFjYzsKICB9LCBbXSk7CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUyLCByZWplY3QpIHsKICAgIFByb21pc2UuYWxsKG11dGF0aW9ucykudGhlbihmdW5jdGlvbihyZXNvbHZlZE11dGF0aW9ucykgewogICAgICBwZXJmb3JtKHJlc29sdmVkTXV0YXRpb25zLCBmdW5jdGlvbigpIHsKICAgICAgICBoY2xBZGQoImFjdGl2ZSIpOwogICAgICAgIGhjbEFkZCgiY29tcGxldGUiKTsKICAgICAgICBoY2xSZW1vdmUoInBlbmRpbmciKTsKICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAiZnVuY3Rpb24iKSBjYWxsYmFjaygpOwogICAgICAgIG1hcmsyKCk7CiAgICAgICAgcmVzb2x2ZTIoKTsKICAgICAgfSk7CiAgICB9KS5jYXRjaChmdW5jdGlvbihlJCQxKSB7CiAgICAgIG1hcmsyKCk7CiAgICAgIHJlamVjdChlJCQxKTsKICAgIH0pOwogIH0pOwp9CmZ1bmN0aW9uIG9uTm9kZShub2RlMikgewogIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogbnVsbDsKICBnZW5lcmF0ZU11dGF0aW9uKG5vZGUyKS50aGVuKGZ1bmN0aW9uKG11dGF0aW9uKSB7CiAgICBpZiAobXV0YXRpb24pIHsKICAgICAgcGVyZm9ybShbbXV0YXRpb25dLCBjYWxsYmFjayk7CiAgICB9CiAgfSk7Cn0KZnVuY3Rpb24gcmVzb2x2ZUljb25zKG5leHQyKSB7CiAgcmV0dXJuIGZ1bmN0aW9uKG1heWJlSWNvbkRlZmluaXRpb24pIHsKICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTsKICAgIHZhciBpY29uRGVmaW5pdGlvbiA9IChtYXliZUljb25EZWZpbml0aW9uIHx8IHt9KS5pY29uID8gbWF5YmVJY29uRGVmaW5pdGlvbiA6IGZpbmRJY29uRGVmaW5pdGlvbihtYXliZUljb25EZWZpbml0aW9uIHx8IHt9KTsKICAgIHZhciBtYXNrID0gcGFyYW1zMi5tYXNrOwogICAgaWYgKG1hc2spIHsKICAgICAgbWFzayA9IChtYXNrIHx8IHt9KS5pY29uID8gbWFzayA6IGZpbmRJY29uRGVmaW5pdGlvbihtYXNrIHx8IHt9KTsKICAgIH0KICAgIHJldHVybiBuZXh0MihpY29uRGVmaW5pdGlvbiwgX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHBhcmFtczIpLCB7fSwgewogICAgICBtYXNrCiAgICB9KSk7CiAgfTsKfQpmdW5jdGlvbiBoZXhWYWx1ZUZyb21Db250ZW50KGNvbnRlbnQzKSB7CiAgdmFyIGNsZWFuZWQgPSBjb250ZW50My5yZXBsYWNlKENMRUFOX0NPTlRFTlRfUEFUVEVSTiwgIiIpOwogIHJldHVybiB0b0hleChfdG9Db25zdW1hYmxlQXJyYXkoY2xlYW5lZClbMF0gfHwgIiIpOwp9CmZ1bmN0aW9uIGlzU2Vjb25kYXJ5TGF5ZXIoc3R5bGVzMykgewogIHZhciBoYXNTdHlsaXN0aWNTZXQgPSBzdHlsZXMzLmdldFByb3BlcnR5VmFsdWUoImZvbnQtZmVhdHVyZS1zZXR0aW5ncyIpLmluY2x1ZGVzKCJzczAxIik7CiAgdmFyIGNvbnRlbnQzID0gc3R5bGVzMy5nZXRQcm9wZXJ0eVZhbHVlKCJjb250ZW50Iik7CiAgdmFyIGNsZWFuZWQgPSBjb250ZW50My5yZXBsYWNlKENMRUFOX0NPTlRFTlRfUEFUVEVSTiwgIiIpOwogIHZhciBjb2RlUG9pbnQgPSBjbGVhbmVkLmNvZGVQb2ludEF0KDApOwogIHZhciBpc1ByZXBlbmRUZW4gPSBjb2RlUG9pbnQgPj0gU0VDT05EQVJZX1VOSUNPREVfUkFOR0VbMF0gJiYgY29kZVBvaW50IDw9IFNFQ09OREFSWV9VTklDT0RFX1JBTkdFWzFdOwogIHZhciBpc0RvdWJsZWQgPSBjbGVhbmVkLmxlbmd0aCA9PT0gMiA/IGNsZWFuZWRbMF0gPT09IGNsZWFuZWRbMV0gOiBmYWxzZTsKICByZXR1cm4gaXNQcmVwZW5kVGVuIHx8IGlzRG91YmxlZCB8fCBoYXNTdHlsaXN0aWNTZXQ7Cn0KZnVuY3Rpb24gZ2V0UHJlZml4KGZvbnRGYW1pbHksIGZvbnRXZWlnaHQpIHsKICB2YXIgZm9udEZhbWlseVNhbml0aXplZCA9IGZvbnRGYW1pbHkucmVwbGFjZSgvXlsnIl18WyciXSQvZywgIiIpLnRvTG93ZXJDYXNlKCk7CiAgdmFyIGZvbnRXZWlnaHRJbnRlZ2VyID0gcGFyc2VJbnQoZm9udFdlaWdodCk7CiAgdmFyIGZvbnRXZWlnaHRTYW5pdGl6ZWQgPSBpc05hTihmb250V2VpZ2h0SW50ZWdlcikgPyAibm9ybWFsIiA6IGZvbnRXZWlnaHRJbnRlZ2VyOwogIHJldHVybiAoRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWFtmb250RmFtaWx5U2FuaXRpemVkXSB8fCB7fSlbZm9udFdlaWdodFNhbml0aXplZF0gfHwgRk9OVF9GQU1JTFlfV0VJR0hUX0ZBTExCQUNLW2ZvbnRGYW1pbHlTYW5pdGl6ZWRdOwp9CmZ1bmN0aW9uIHJlcGxhY2VGb3JQb3NpdGlvbihub2RlMiwgcG9zaXRpb24zKSB7CiAgdmFyIHBlbmRpbmdBdHRyaWJ1dGUgPSAiIi5jb25jYXQoREFUQV9GQV9QU0VVRE9fRUxFTUVOVF9QRU5ESU5HKS5jb25jYXQocG9zaXRpb24zLnJlcGxhY2UoIjoiLCAiLSIpKTsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZTIsIHJlamVjdCkgewogICAgaWYgKG5vZGUyLmdldEF0dHJpYnV0ZShwZW5kaW5nQXR0cmlidXRlKSAhPT0gbnVsbCkgewogICAgICByZXR1cm4gcmVzb2x2ZTIoKTsKICAgIH0KICAgIHZhciBjaGlsZHJlbjIgPSB0b0FycmF5Mihub2RlMi5jaGlsZHJlbik7CiAgICB2YXIgYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQgPSBjaGlsZHJlbjIuZmlsdGVyKGZ1bmN0aW9uKGMkJDEpIHsKICAgICAgcmV0dXJuIGMkJDEuZ2V0QXR0cmlidXRlKERBVEFfRkFfUFNFVURPX0VMRU1FTlQpID09PSBwb3NpdGlvbjM7CiAgICB9KVswXTsKICAgIHZhciBzdHlsZXMzID0gV0lORE9XLmdldENvbXB1dGVkU3R5bGUobm9kZTIsIHBvc2l0aW9uMyk7CiAgICB2YXIgZm9udEZhbWlseSA9IHN0eWxlczMuZ2V0UHJvcGVydHlWYWx1ZSgiZm9udC1mYW1pbHkiKTsKICAgIHZhciBmb250RmFtaWx5TWF0Y2ggPSBmb250RmFtaWx5Lm1hdGNoKEZPTlRfRkFNSUxZX1BBVFRFUk4pOwogICAgdmFyIGZvbnRXZWlnaHQgPSBzdHlsZXMzLmdldFByb3BlcnR5VmFsdWUoImZvbnQtd2VpZ2h0Iik7CiAgICB2YXIgY29udGVudDMgPSBzdHlsZXMzLmdldFByb3BlcnR5VmFsdWUoImNvbnRlbnQiKTsKICAgIGlmIChhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudCAmJiAhZm9udEZhbWlseU1hdGNoKSB7CiAgICAgIG5vZGUyLnJlbW92ZUNoaWxkKGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50KTsKICAgICAgcmV0dXJuIHJlc29sdmUyKCk7CiAgICB9IGVsc2UgaWYgKGZvbnRGYW1pbHlNYXRjaCAmJiBjb250ZW50MyAhPT0gIm5vbmUiICYmIGNvbnRlbnQzICE9PSAiIikgewogICAgICB2YXIgX2NvbnRlbnQyID0gc3R5bGVzMy5nZXRQcm9wZXJ0eVZhbHVlKCJjb250ZW50Iik7CiAgICAgIHZhciBwcmVmaXg0ID0gZ2V0UHJlZml4KGZvbnRGYW1pbHksIGZvbnRXZWlnaHQpOwogICAgICB2YXIgaGV4VmFsdWUgPSBoZXhWYWx1ZUZyb21Db250ZW50KF9jb250ZW50Mik7CiAgICAgIHZhciBpc1Y0ID0gZm9udEZhbWlseU1hdGNoWzBdLnN0YXJ0c1dpdGgoIkZvbnRBd2Vzb21lIik7CiAgICAgIHZhciBpc1NlY29uZGFyeSA9IGlzU2Vjb25kYXJ5TGF5ZXIoc3R5bGVzMyk7CiAgICAgIHZhciBpY29uTmFtZSA9IGJ5VW5pY29kZShwcmVmaXg0LCBoZXhWYWx1ZSk7CiAgICAgIHZhciBpY29uSWRlbnRpZmllciA9IGljb25OYW1lOwogICAgICBpZiAoaXNWNCkgewogICAgICAgIHZhciBpY29uTmFtZTQgPSBieU9sZFVuaWNvZGUoaGV4VmFsdWUpOwogICAgICAgIGlmIChpY29uTmFtZTQuaWNvbk5hbWUgJiYgaWNvbk5hbWU0LnByZWZpeCkgewogICAgICAgICAgaWNvbk5hbWUgPSBpY29uTmFtZTQuaWNvbk5hbWU7CiAgICAgICAgICBwcmVmaXg0ID0gaWNvbk5hbWU0LnByZWZpeDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGljb25OYW1lICYmICFpc1NlY29uZGFyeSAmJiAoIWFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50IHx8IGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50LmdldEF0dHJpYnV0ZShEQVRBX1BSRUZJWCkgIT09IHByZWZpeDQgfHwgYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQuZ2V0QXR0cmlidXRlKERBVEFfSUNPTikgIT09IGljb25JZGVudGlmaWVyKSkgewogICAgICAgIG5vZGUyLnNldEF0dHJpYnV0ZShwZW5kaW5nQXR0cmlidXRlLCBpY29uSWRlbnRpZmllcik7CiAgICAgICAgaWYgKGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50KSB7CiAgICAgICAgICBub2RlMi5yZW1vdmVDaGlsZChhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIHZhciBtZXRhID0gYmxhbmtNZXRhKCk7CiAgICAgICAgdmFyIGV4dHJhID0gbWV0YS5leHRyYTsKICAgICAgICBleHRyYS5hdHRyaWJ1dGVzW0RBVEFfRkFfUFNFVURPX0VMRU1FTlRdID0gcG9zaXRpb24zOwogICAgICAgIGZpbmRJY29uKGljb25OYW1lLCBwcmVmaXg0KS50aGVuKGZ1bmN0aW9uKG1haW4pIHsKICAgICAgICAgIHZhciBhYnN0cmFjdCA9IG1ha2VJbmxpbmVTdmdBYnN0cmFjdChfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWV0YSksIHt9LCB7CiAgICAgICAgICAgIGljb25zOiB7CiAgICAgICAgICAgICAgbWFpbiwKICAgICAgICAgICAgICBtYXNrOiBlbXB0eUNhbm9uaWNhbEljb24oKQogICAgICAgICAgICB9LAogICAgICAgICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgICAgICAgIGljb25OYW1lOiBpY29uSWRlbnRpZmllciwKICAgICAgICAgICAgZXh0cmEsCiAgICAgICAgICAgIHdhdGNoYWJsZTogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgICAgdmFyIGVsZW1lbnQ0ID0gRE9DVU1FTlQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsICJzdmciKTsKICAgICAgICAgIGlmIChwb3NpdGlvbjMgPT09ICI6OmJlZm9yZSIpIHsKICAgICAgICAgICAgbm9kZTIuaW5zZXJ0QmVmb3JlKGVsZW1lbnQ0LCBub2RlMi5maXJzdENoaWxkKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5vZGUyLmFwcGVuZENoaWxkKGVsZW1lbnQ0KTsKICAgICAgICAgIH0KICAgICAgICAgIGVsZW1lbnQ0Lm91dGVySFRNTCA9IGFic3RyYWN0Lm1hcChmdW5jdGlvbihhJCQxKSB7CiAgICAgICAgICAgIHJldHVybiB0b0h0bWwyKGEkJDEpOwogICAgICAgICAgfSkuam9pbigiXG4iKTsKICAgICAgICAgIG5vZGUyLnJlbW92ZUF0dHJpYnV0ZShwZW5kaW5nQXR0cmlidXRlKTsKICAgICAgICAgIHJlc29sdmUyKCk7CiAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXNvbHZlMigpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXNvbHZlMigpOwogICAgfQogIH0pOwp9CmZ1bmN0aW9uIHJlcGxhY2U0KG5vZGUyKSB7CiAgcmV0dXJuIFByb21pc2UuYWxsKFtyZXBsYWNlRm9yUG9zaXRpb24obm9kZTIsICI6OmJlZm9yZSIpLCByZXBsYWNlRm9yUG9zaXRpb24obm9kZTIsICI6OmFmdGVyIildKTsKfQpmdW5jdGlvbiBwcm9jZXNzYWJsZShub2RlMikgewogIHJldHVybiBub2RlMi5wYXJlbnROb2RlICE9PSBkb2N1bWVudC5oZWFkICYmICF+VEFHTkFNRVNfVE9fU0tJUF9GT1JfUFNFVURPRUxFTUVOVFMuaW5kZXhPZihub2RlMi50YWdOYW1lLnRvVXBwZXJDYXNlKCkpICYmICFub2RlMi5nZXRBdHRyaWJ1dGUoREFUQV9GQV9QU0VVRE9fRUxFTUVOVCkgJiYgKCFub2RlMi5wYXJlbnROb2RlIHx8IG5vZGUyLnBhcmVudE5vZGUudGFnTmFtZSAhPT0gInN2ZyIpOwp9CmZ1bmN0aW9uIHNlYXJjaFBzZXVkb0VsZW1lbnRzKHJvb3Q2KSB7CiAgdmFyIHVzZUFzTm9kZUxpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlOwogIGlmICghSVNfRE9NKSByZXR1cm47CiAgdmFyIG5vZGVMaXN0OwogIGlmICh1c2VBc05vZGVMaXN0KSB7CiAgICBub2RlTGlzdCA9IHJvb3Q2OwogIH0gZWxzZSBpZiAoY29uZmlnMi5zZWFyY2hQc2V1ZG9FbGVtZW50c0Z1bGxTY2FuKSB7CiAgICBub2RlTGlzdCA9IHJvb3Q2LnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTsKICB9IGVsc2UgewogICAgdmFyIHNlbGVjdG9yU2V0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgIHZhciBfaXRlcmF0b3IyID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoZG9jdW1lbnQuc3R5bGVTaGVldHMpLCBfc3RlcDI7CiAgICB0cnkgewogICAgICBmb3IgKF9pdGVyYXRvcjIucygpOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIubigpKS5kb25lOyApIHsKICAgICAgICB2YXIgc3R5bGVzaGVldCA9IF9zdGVwMi52YWx1ZTsKICAgICAgICB0cnkgewogICAgICAgICAgdmFyIF9pdGVyYXRvcjMgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihzdHlsZXNoZWV0LmNzc1J1bGVzKSwgX3N0ZXAzOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgZm9yIChfaXRlcmF0b3IzLnMoKTsgIShfc3RlcDMgPSBfaXRlcmF0b3IzLm4oKSkuZG9uZTsgKSB7CiAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBfc3RlcDMudmFsdWU7CiAgICAgICAgICAgICAgdmFyIHBhcnNlZFNlbGVjdG9ycyA9IHBhcnNlQ1NTUnVsZUZvclBzZXVkb3MocnVsZS5zZWxlY3RvclRleHQpOwogICAgICAgICAgICAgIHZhciBfaXRlcmF0b3I0ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIocGFyc2VkU2VsZWN0b3JzKSwgX3N0ZXA0OwogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBmb3IgKF9pdGVyYXRvcjQucygpOyAhKF9zdGVwNCA9IF9pdGVyYXRvcjQubigpKS5kb25lOyApIHsKICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gX3N0ZXA0LnZhbHVlOwogICAgICAgICAgICAgICAgICBzZWxlY3RvclNldC5hZGQoc2VsZWN0b3IpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgX2l0ZXJhdG9yNC5lKGVycik7CiAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgIF9pdGVyYXRvcjQuZigpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIF9pdGVyYXRvcjMuZShlcnIpOwogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgX2l0ZXJhdG9yMy5mKCk7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZSQkMSkgewogICAgICAgICAgaWYgKGNvbmZpZzIuc2VhcmNoUHNldWRvRWxlbWVudHNXYXJuaW5ncykgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIkZvbnQgQXdlc29tZTogY2Fubm90IHBhcnNlIHN0eWxlc2hlZXQ6ICIuY29uY2F0KHN0eWxlc2hlZXQuaHJlZiwgIiAoIikuY29uY2F0KGUkJDEubWVzc2FnZSwgJylcbklmIGl0IGRlY2xhcmVzIGFueSBGb250IEF3ZXNvbWUgQ1NTIHBzZXVkby1lbGVtZW50cywgdGhleSB3aWxsIG5vdCBiZSByZW5kZXJlZCBhcyBTVkcgaWNvbnMuIEFkZCBjcm9zc29yaWdpbj0iYW5vbnltb3VzIiB0byB0aGUgPGxpbms+LCBlbmFibGUgc2VhcmNoUHNldWRvRWxlbWVudHNGdWxsU2NhbiBmb3Igc2xvd2VyIGJ1dCBtb3JlIHRob3JvdWdoIERPTSBwYXJzaW5nLCBvciBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgYnkgc2V0dGluZyBzZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzIHRvIGZhbHNlLicpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVycikgewogICAgICBfaXRlcmF0b3IyLmUoZXJyKTsKICAgIH0gZmluYWxseSB7CiAgICAgIF9pdGVyYXRvcjIuZigpOwogICAgfQogICAgaWYgKCFzZWxlY3RvclNldC5zaXplKSByZXR1cm47CiAgICB2YXIgY2xlYW5TZWxlY3RvcnMgPSBBcnJheS5mcm9tKHNlbGVjdG9yU2V0KS5qb2luKCIsICIpOwogICAgdHJ5IHsKICAgICAgbm9kZUxpc3QgPSByb290Ni5xdWVyeVNlbGVjdG9yQWxsKGNsZWFuU2VsZWN0b3JzKTsKICAgIH0gY2F0Y2ggKF91bnVzZWQpIHsKICAgIH0KICB9CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUyLCByZWplY3QpIHsKICAgIHZhciBvcGVyYXRpb25zID0gdG9BcnJheTIobm9kZUxpc3QpLmZpbHRlcihwcm9jZXNzYWJsZSkubWFwKHJlcGxhY2U0KTsKICAgIHZhciBlbmQzID0gcGVyZi5iZWdpbigic2VhcmNoUHNldWRvRWxlbWVudHMiKTsKICAgIGRpc2FibGVPYnNlcnZhdGlvbigpOwogICAgUHJvbWlzZS5hbGwob3BlcmF0aW9ucykudGhlbihmdW5jdGlvbigpIHsKICAgICAgZW5kMygpOwogICAgICBlbmFibGVPYnNlcnZhdGlvbigpOwogICAgICByZXNvbHZlMigpOwogICAgfSkuY2F0Y2goZnVuY3Rpb24oKSB7CiAgICAgIGVuZDMoKTsKICAgICAgZW5hYmxlT2JzZXJ2YXRpb24oKTsKICAgICAgcmVqZWN0KCk7CiAgICB9KTsKICB9KTsKfQpmdW5jdGlvbiBmaWxsQmxhY2soYWJzdHJhY3QpIHsKICB2YXIgZm9yY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7CiAgaWYgKGFic3RyYWN0LmF0dHJpYnV0ZXMgJiYgKGFic3RyYWN0LmF0dHJpYnV0ZXMuZmlsbCB8fCBmb3JjZSkpIHsKICAgIGFic3RyYWN0LmF0dHJpYnV0ZXMuZmlsbCA9ICJibGFjayI7CiAgfQogIHJldHVybiBhYnN0cmFjdDsKfQpmdW5jdGlvbiBkZUdyb3VwKGFic3RyYWN0KSB7CiAgaWYgKGFic3RyYWN0LnRhZyA9PT0gImciKSB7CiAgICByZXR1cm4gYWJzdHJhY3QuY2hpbGRyZW47CiAgfSBlbHNlIHsKICAgIHJldHVybiBbYWJzdHJhY3RdOwogIH0KfQp2YXIgbm9vcDIsIF9XSU5ET1csIF9ET0NVTUVOVCwgX01VVEFUSU9OX09CU0VSVkVSLCBfUEVSRk9STUFOQ0UsIF9yZWYsIF9yZWYkdXNlckFnZW50LCB1c2VyQWdlbnQsIFdJTkRPVywgRE9DVU1FTlQsIE1VVEFUSU9OX09CU0VSVkVSLCBQRVJGT1JNQU5DRSwgSVNfQlJPV1NFUiwgSVNfRE9NLCBJU19JRSwgX2R0LCBFMiwgXzMsIHEsIEgzLCBRLCBpMTAsIHQ4LCBkNSwgbDUsIGY2LCBuMTIsIGg4LCBvMTIsIHU2LCBnMywgczgsIHk0LCBtNSwgZTEwLCBwNiwgYTQsIHcyLCB4MiwgYjQsIGMxMCwgSTIsIEYsIHY0LCBTNCwgQTIsIFAzLCBqMywgQjIsIE4zLCBrMywgRDMsIFQyLCBDMiwgVywgSzIsIFIzLCBydCwgZHQyLCBndCwgQ3QsIFV0LCBfdCwgWXQsIHF0LCBIdCwgTDIsIHIxMCwgVSwgSiwgJHQsIG9sLCBkbCwgZmwsIHVsLCBfbWwsIGwkMSwgZiQxLCBuJDEsIG8kMSwgdSQxLCBzJDEsIGgkMSwgZyQxLCB5JDEsIGUkMSwgbSQxLCBwJDEsIGEkMSwgdyQxLCBiJDEsIHIkMSwgYyQxLCBpJDEsIHgkMSwgSSQxLCBGJDEsIHYkMSwgUyQxLCBBJDEsIFAkMSwgaiQxLCBCJDEsIE4kMSwgayQxLCBEJDEsIEMkMSwgVCQxLCBMJDEsIFckMSwgUiQxLCBLJDEsIFUkMSwgSiQxLCBtbCQxLCBFJDEsIGQkMSwgXyQxLCBNJDEsIHJ0JDEsICR0JDEsIHoyLCBIdCQxLCBZJDEsIFp0JDEsIEckMSwgTyQxLCBWJDEsICQkMSwgdG8sIHJvLCBOQU1FU1BBQ0VfSURFTlRJRklFUiwgVU5JVFNfSU5fR1JJRCwgREVGQVVMVF9DU1NfUFJFRklYLCBERUZBVUxUX1JFUExBQ0VNRU5UX0NMQVNTLCBEQVRBX0ZBX0kyU1ZHLCBEQVRBX0ZBX1BTRVVET19FTEVNRU5ULCBEQVRBX0ZBX1BTRVVET19FTEVNRU5UX1BFTkRJTkcsIERBVEFfUFJFRklYLCBEQVRBX0lDT04sIEhUTUxfQ0xBU1NfSTJTVkdfQkFTRV9DTEFTUywgTVVUQVRJT05fQVBQUk9BQ0hfQVNZTkMsIFRBR05BTUVTX1RPX1NLSVBfRk9SX1BTRVVET0VMRU1FTlRTLCBQU0VVRE9fRUxFTUVOVFMsIFBST0RVQ1RJT04sIF9QUkVGSVhfVE9fU1RZTEUsIFBSRUZJWF9UT19TVFlMRSwgX1NUWUxFX1RPX1BSRUZJWCwgU1RZTEVfVE9fUFJFRklYLCBfUFJFRklYX1RPX0xPTkdfU1RZTEUsIFBSRUZJWF9UT19MT05HX1NUWUxFLCBfTE9OR19TVFlMRV9UT19QUkVGSVgsIExPTkdfU1RZTEVfVE9fUFJFRklYLCBJQ09OX1NFTEVDVElPTl9TWU5UQVhfUEFUVEVSTiwgTEFZRVJTX1RFWFRfQ0xBU1NOQU1FLCBGT05UX0ZBTUlMWV9QQVRURVJOLCBfRk9OVF9XRUlHSFRfVE9fUFJFRklYLCBGT05UX1dFSUdIVF9UT19QUkVGSVgsIEFUVFJJQlVURVNfV0FUQ0hFRF9GT1JfTVVUQVRJT04sIERVT1RPTkVfQ0xBU1NFUywgUkVTRVJWRURfQ0xBU1NFUywgaW5pdGlhbCwgX2RlZmF1bHQsIF9jb25maWcsIGNvbmZpZzIsIF9vbkNoYW5nZUNiLCBkJDIsIG1lYW5pbmdsZXNzVHJhbnNmb3JtLCBpZFBvb2wsIGJhc2VTdHlsZXMsIF9jc3NJbnNlcnRlZCwgSW5qZWN0Q1NTLCB3JDIsIG5hbWVzcGFjZSwgZnVuY3Rpb25zLCBfbGlzdGVuZXIsIGxvYWRlZCwgYmluZEludGVybmFsNCwgcmVkdWNlMywgTU9OTywgRFVPLCBtb2Rlcm5NYXRjaGVzLCBsZWdhY3lNYXRjaGVzLCBzdHlsZXMyLCBzaGltcywgRkFNSUxZX05BTUVTLCBQUkVGSVhFU19GT1JfRkFNSUxZLCBfZGVmYXVsdFVzYWJsZVByZWZpeCwgX2J5VW5pY29kZSwgX2J5TGlnYXR1cmUsIF9ieU9sZE5hbWUsIF9ieU9sZFVuaWNvZGUsIF9ieUFsaWFzLCBidWlsZCwgZW1wdHlDYW5vbmljYWxJY29uLCBfZmFDb21iaW5lZENsYXNzZXMsIG5ld0Nhbm9uaWNhbEZhbWlsaWVzLCBuZXdDYW5vbmljYWxTdHlsZXMsIExpYnJhcnksIF9wbHVnaW5zLCBfaG9va3MsIHByb3ZpZGVycywgZGVmYXVsdFByb3ZpZGVyS2V5cywgbGlicmFyeSwgbm9BdXRvLCBkb20sIHBhcnNlNywgYXBpLCBhdXRvUmVwbGFjZSwgc3R5bGVzJDEsIG1pc3NpbmdJY29uUmVzb2x1dGlvbk1peGluLCBub29wJDEsIHAkMiwgcHJlYW1ibGUsIGJlZ2luLCBlbmQsIHBlcmYsIG5vb3AkMiwgbXV0YXRvcnMsIGRpc2FibGVkLCBtbywgc3R5bGVzJDIsIHJlbmRlciwgUmVwbGFjZUVsZW1lbnRzLCBMYXllcnMsIExheWVyc0NvdW50ZXIsIExheWVyc1RleHQsIENMRUFOX0NPTlRFTlRfUEFUVEVSTiwgU0VDT05EQVJZX1VOSUNPREVfUkFOR0UsIF9GT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYLCBGT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYLCBGT05UX0ZBTUlMWV9XRUlHSFRfRkFMTEJBQ0ssIGhhc1BzZXVkb0VsZW1lbnQsIHBhcnNlQ1NTUnVsZUZvclBzZXVkb3MsIFBzZXVkb0VsZW1lbnRzLCBfdW53YXRjaGVkLCBNdXRhdGlvbk9ic2VydmVyJDEsIHBhcnNlVHJhbnNmb3JtU3RyaW5nLCBQb3dlclRyYW5zZm9ybXMsIEFMTF9TUEFDRSwgTWFza3MsIE1pc3NpbmdJY29uSW5kaWNhdG9yLCBTdmdTeW1ib2xzLCBwbHVnaW5zLCBub0F1dG8kMSwgY29uZmlnJDEsIGxpYnJhcnkkMSwgZG9tJDEsIHBhcnNlJDEsIGZpbmRJY29uRGVmaW5pdGlvbiQxLCB0b0h0bWwkMSwgaWNvbjIsIGxheWVyLCB0ZXh0OCwgY291bnRlciwgYXR0cnM7CnZhciBpbml0X2ZvbnRhd2Vzb21lX3N2Z19jb3JlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGZvcnRhd2Vzb21lK2ZvbnRhd2Vzb21lLXN2Zy1jb3JlQDcuMS4wL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUvaW5kZXgubWpzIigpIHsKICAgIG5vb3AyID0gZnVuY3Rpb24gbm9vcDMoKSB7CiAgICB9OwogICAgX1dJTkRPVyA9IHt9OwogICAgX0RPQ1VNRU5UID0ge307CiAgICBfTVVUQVRJT05fT0JTRVJWRVIgPSBudWxsOwogICAgX1BFUkZPUk1BTkNFID0gewogICAgICBtYXJrOiBub29wMiwKICAgICAgbWVhc3VyZTogbm9vcDIKICAgIH07CiAgICB0cnkgewogICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIpIF9XSU5ET1cgPSB3aW5kb3c7CiAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICJ1bmRlZmluZWQiKSBfRE9DVU1FTlQgPSBkb2N1bWVudDsKICAgICAgaWYgKHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAidW5kZWZpbmVkIikgX01VVEFUSU9OX09CU0VSVkVSID0gTXV0YXRpb25PYnNlcnZlcjsKICAgICAgaWYgKHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gInVuZGVmaW5lZCIpIF9QRVJGT1JNQU5DRSA9IHBlcmZvcm1hbmNlOwogICAgfSBjYXRjaCAoZTExKSB7CiAgICB9CiAgICBfcmVmID0gX1dJTkRPVy5uYXZpZ2F0b3IgfHwge30sIF9yZWYkdXNlckFnZW50ID0gX3JlZi51c2VyQWdlbnQsIHVzZXJBZ2VudCA9IF9yZWYkdXNlckFnZW50ID09PSB2b2lkIDAgPyAiIiA6IF9yZWYkdXNlckFnZW50OwogICAgV0lORE9XID0gX1dJTkRPVzsKICAgIERPQ1VNRU5UID0gX0RPQ1VNRU5UOwogICAgTVVUQVRJT05fT0JTRVJWRVIgPSBfTVVUQVRJT05fT0JTRVJWRVI7CiAgICBQRVJGT1JNQU5DRSA9IF9QRVJGT1JNQU5DRTsKICAgIElTX0JST1dTRVIgPSAhIVdJTkRPVy5kb2N1bWVudDsKICAgIElTX0RPTSA9ICEhRE9DVU1FTlQuZG9jdW1lbnRFbGVtZW50ICYmICEhRE9DVU1FTlQuaGVhZCAmJiB0eXBlb2YgRE9DVU1FTlQuYWRkRXZlbnRMaXN0ZW5lciA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgRE9DVU1FTlQuY3JlYXRlRWxlbWVudCA9PT0gImZ1bmN0aW9uIjsKICAgIElTX0lFID0gfnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIikgfHwgfnVzZXJBZ2VudC5pbmRleE9mKCJUcmlkZW50LyIpOwogICAgRTIgPSAvZmEoa3xrZHxzfHJ8bHx0fGR8ZHJ8ZGx8ZHR8YnxzbHJ8c2xwcnx3c2J8dGx8bnN8bmRzfGVzfGpyfGpmcnxqZHJ8dXNifHVmc2J8dWRzYnxjcnxzc3xzcnxzbHxzdHxzZHN8c2RyfHNkbHxzZHQpP1tcLVwgXS8sIF8zID0gL0ZvbnQgP0F3ZXNvbWUgPyhbNTY3IF0qKShTb2xpZHxSZWd1bGFyfExpZ2h0fFRoaW58RHVvdG9uZXxCcmFuZHN8RnJlZXxQcm98U2hhcnAgRHVvdG9uZXxTaGFycHxLaXR8Tm90ZG9nIER1b3xOb3Rkb2d8Q2hpc2VsfEV0Y2h8VGh1bWJwcmludHxKZWxseSBGaWxsfEplbGx5IER1b3xKZWxseXxVdGlsaXR5fFV0aWxpdHkgRmlsbHxVdGlsaXR5IER1b3xTbGFiIFByZXNzfFNsYWJ8V2hpdGVib2FyZCk/LiovaTsKICAgIHEgPSB7CiAgICAgIGNsYXNzaWM6IHsKICAgICAgICBmYTogInNvbGlkIiwKICAgICAgICBmYXM6ICJzb2xpZCIsCiAgICAgICAgImZhLXNvbGlkIjogInNvbGlkIiwKICAgICAgICBmYXI6ICJyZWd1bGFyIiwKICAgICAgICAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwKICAgICAgICBmYWw6ICJsaWdodCIsCiAgICAgICAgImZhLWxpZ2h0IjogImxpZ2h0IiwKICAgICAgICBmYXQ6ICJ0aGluIiwKICAgICAgICAiZmEtdGhpbiI6ICJ0aGluIiwKICAgICAgICBmYWI6ICJicmFuZHMiLAogICAgICAgICJmYS1icmFuZHMiOiAiYnJhbmRzIgogICAgICB9LAogICAgICBkdW90b25lOiB7CiAgICAgICAgZmE6ICJzb2xpZCIsCiAgICAgICAgZmFkOiAic29saWQiLAogICAgICAgICJmYS1zb2xpZCI6ICJzb2xpZCIsCiAgICAgICAgImZhLWR1b3RvbmUiOiAic29saWQiLAogICAgICAgIGZhZHI6ICJyZWd1bGFyIiwKICAgICAgICAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwKICAgICAgICBmYWRsOiAibGlnaHQiLAogICAgICAgICJmYS1saWdodCI6ICJsaWdodCIsCiAgICAgICAgZmFkdDogInRoaW4iLAogICAgICAgICJmYS10aGluIjogInRoaW4iCiAgICAgIH0sCiAgICAgIHNoYXJwOiB7CiAgICAgICAgZmE6ICJzb2xpZCIsCiAgICAgICAgZmFzczogInNvbGlkIiwKICAgICAgICAiZmEtc29saWQiOiAic29saWQiLAogICAgICAgIGZhc3I6ICJyZWd1bGFyIiwKICAgICAgICAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwKICAgICAgICBmYXNsOiAibGlnaHQiLAogICAgICAgICJmYS1saWdodCI6ICJsaWdodCIsCiAgICAgICAgZmFzdDogInRoaW4iLAogICAgICAgICJmYS10aGluIjogInRoaW4iCiAgICAgIH0sCiAgICAgICJzaGFycC1kdW90b25lIjogewogICAgICAgIGZhOiAic29saWQiLAogICAgICAgIGZhc2RzOiAic29saWQiLAogICAgICAgICJmYS1zb2xpZCI6ICJzb2xpZCIsCiAgICAgICAgZmFzZHI6ICJyZWd1bGFyIiwKICAgICAgICAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwKICAgICAgICBmYXNkbDogImxpZ2h0IiwKICAgICAgICAiZmEtbGlnaHQiOiAibGlnaHQiLAogICAgICAgIGZhc2R0OiAidGhpbiIsCiAgICAgICAgImZhLXRoaW4iOiAidGhpbiIKICAgICAgfSwKICAgICAgc2xhYjogewogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhc2xyOiAicmVndWxhciIKICAgICAgfSwKICAgICAgInNsYWItcHJlc3MiOiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAicmVndWxhciIsCiAgICAgICAgZmFzbHByOiAicmVndWxhciIKICAgICAgfSwKICAgICAgdGh1bWJwcmludDogewogICAgICAgICJmYS1saWdodCI6ICJsaWdodCIsCiAgICAgICAgZmF0bDogImxpZ2h0IgogICAgICB9LAogICAgICB3aGl0ZWJvYXJkOiB7CiAgICAgICAgImZhLXNlbWlib2xkIjogInNlbWlib2xkIiwKICAgICAgICBmYXdzYjogInNlbWlib2xkIgogICAgICB9LAogICAgICBub3Rkb2c6IHsKICAgICAgICAiZmEtc29saWQiOiAic29saWQiLAogICAgICAgIGZhbnM6ICJzb2xpZCIKICAgICAgfSwKICAgICAgIm5vdGRvZy1kdW8iOiB7CiAgICAgICAgImZhLXNvbGlkIjogInNvbGlkIiwKICAgICAgICBmYW5kczogInNvbGlkIgogICAgICB9LAogICAgICBldGNoOiB7CiAgICAgICAgImZhLXNvbGlkIjogInNvbGlkIiwKICAgICAgICBmYWVzOiAic29saWQiCiAgICAgIH0sCiAgICAgIGplbGx5OiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAicmVndWxhciIsCiAgICAgICAgZmFqcjogInJlZ3VsYXIiCiAgICAgIH0sCiAgICAgICJqZWxseS1maWxsIjogewogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhamZyOiAicmVndWxhciIKICAgICAgfSwKICAgICAgImplbGx5LWR1byI6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwKICAgICAgICBmYWpkcjogInJlZ3VsYXIiCiAgICAgIH0sCiAgICAgIGNoaXNlbDogewogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhY3I6ICJyZWd1bGFyIgogICAgICB9LAogICAgICB1dGlsaXR5OiB7CiAgICAgICAgImZhLXNlbWlib2xkIjogInNlbWlib2xkIiwKICAgICAgICBmYXVzYjogInNlbWlib2xkIgogICAgICB9LAogICAgICAidXRpbGl0eS1kdW8iOiB7CiAgICAgICAgImZhLXNlbWlib2xkIjogInNlbWlib2xkIiwKICAgICAgICBmYXVkc2I6ICJzZW1pYm9sZCIKICAgICAgfSwKICAgICAgInV0aWxpdHktZmlsbCI6IHsKICAgICAgICAiZmEtc2VtaWJvbGQiOiAic2VtaWJvbGQiLAogICAgICAgIGZhdWZzYjogInNlbWlib2xkIgogICAgICB9CiAgICB9LCBIMyA9IHsKICAgICAgR1JPVVA6ICJkdW90b25lLWdyb3VwIiwKICAgICAgU1dBUF9PUEFDSVRZOiAic3dhcC1vcGFjaXR5IiwKICAgICAgUFJJTUFSWTogInByaW1hcnkiLAogICAgICBTRUNPTkRBUlk6ICJzZWNvbmRhcnkiCiAgICB9LCBRID0gWyJmYS1jbGFzc2ljIiwgImZhLWR1b3RvbmUiLCAiZmEtc2hhcnAiLCAiZmEtc2hhcnAtZHVvdG9uZSIsICJmYS10aHVtYnByaW50IiwgImZhLXdoaXRlYm9hcmQiLCAiZmEtbm90ZG9nIiwgImZhLW5vdGRvZy1kdW8iLCAiZmEtY2hpc2VsIiwgImZhLWV0Y2giLCAiZmEtamVsbHkiLCAiZmEtamVsbHktZmlsbCIsICJmYS1qZWxseS1kdW8iLCAiZmEtc2xhYiIsICJmYS1zbGFiLXByZXNzIiwgImZhLXV0aWxpdHkiLCAiZmEtdXRpbGl0eS1kdW8iLCAiZmEtdXRpbGl0eS1maWxsIl07CiAgICBpMTAgPSAiY2xhc3NpYyIsIHQ4ID0gImR1b3RvbmUiLCBkNSA9ICJzaGFycCIsIGw1ID0gInNoYXJwLWR1b3RvbmUiLCBmNiA9ICJjaGlzZWwiLCBuMTIgPSAiZXRjaCIsIGg4ID0gImplbGx5IiwgbzEyID0gImplbGx5LWR1byIsIHU2ID0gImplbGx5LWZpbGwiLCBnMyA9ICJub3Rkb2ciLCBzOCA9ICJub3Rkb2ctZHVvIiwgeTQgPSAic2xhYiIsIG01ID0gInNsYWItcHJlc3MiLCBlMTAgPSAidGh1bWJwcmludCIsIHA2ID0gInV0aWxpdHkiLCBhNCA9ICJ1dGlsaXR5LWR1byIsIHcyID0gInV0aWxpdHktZmlsbCIsIHgyID0gIndoaXRlYm9hcmQiLCBiNCA9ICJDbGFzc2ljIiwgYzEwID0gIkR1b3RvbmUiLCBJMiA9ICJTaGFycCIsIEYgPSAiU2hhcnAgRHVvdG9uZSIsIHY0ID0gIkNoaXNlbCIsIFM0ID0gIkV0Y2giLCBBMiA9ICJKZWxseSIsIFAzID0gIkplbGx5IER1byIsIGozID0gIkplbGx5IEZpbGwiLCBCMiA9ICJOb3Rkb2ciLCBOMyA9ICJOb3Rkb2cgRHVvIiwgazMgPSAiU2xhYiIsIEQzID0gIlNsYWIgUHJlc3MiLCBUMiA9ICJUaHVtYnByaW50IiwgQzIgPSAiVXRpbGl0eSIsIFcgPSAiVXRpbGl0eSBEdW8iLCBLMiA9ICJVdGlsaXR5IEZpbGwiLCBSMyA9ICJXaGl0ZWJvYXJkIiwgcnQgPSBbaTEwLCB0OCwgZDUsIGw1LCBmNiwgbjEyLCBoOCwgbzEyLCB1NiwgZzMsIHM4LCB5NCwgbTUsIGUxMCwgcDYsIGE0LCB3MiwgeDJdLCBkdDIgPSAoX2R0ID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZHQsIGkxMCwgYjQpLCB0OCwgYzEwKSwgZDUsIEkyKSwgbDUsIEYpLCBmNiwgdjQpLCBuMTIsIFM0KSwgaDgsIEEyKSwgbzEyLCBQMyksIHU2LCBqMyksIGczLCBCMiksIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2R0LCBzOCwgTjMpLCB5NCwgazMpLCBtNSwgRDMpLCBlMTAsIFQyKSwgcDYsIEMyKSwgYTQsIFcpLCB3MiwgSzIpLCB4MiwgUjMpKTsKICAgIGd0ID0gewogICAgICBjbGFzc2ljOiB7CiAgICAgICAgOTAwOiAiZmFzIiwKICAgICAgICA0MDA6ICJmYXIiLAogICAgICAgIG5vcm1hbDogImZhciIsCiAgICAgICAgMzAwOiAiZmFsIiwKICAgICAgICAxMDA6ICJmYXQiCiAgICAgIH0sCiAgICAgIGR1b3RvbmU6IHsKICAgICAgICA5MDA6ICJmYWQiLAogICAgICAgIDQwMDogImZhZHIiLAogICAgICAgIDMwMDogImZhZGwiLAogICAgICAgIDEwMDogImZhZHQiCiAgICAgIH0sCiAgICAgIHNoYXJwOiB7CiAgICAgICAgOTAwOiAiZmFzcyIsCiAgICAgICAgNDAwOiAiZmFzciIsCiAgICAgICAgMzAwOiAiZmFzbCIsCiAgICAgICAgMTAwOiAiZmFzdCIKICAgICAgfSwKICAgICAgInNoYXJwLWR1b3RvbmUiOiB7CiAgICAgICAgOTAwOiAiZmFzZHMiLAogICAgICAgIDQwMDogImZhc2RyIiwKICAgICAgICAzMDA6ICJmYXNkbCIsCiAgICAgICAgMTAwOiAiZmFzZHQiCiAgICAgIH0sCiAgICAgIHNsYWI6IHsKICAgICAgICA0MDA6ICJmYXNsciIKICAgICAgfSwKICAgICAgInNsYWItcHJlc3MiOiB7CiAgICAgICAgNDAwOiAiZmFzbHByIgogICAgICB9LAogICAgICB3aGl0ZWJvYXJkOiB7CiAgICAgICAgNjAwOiAiZmF3c2IiCiAgICAgIH0sCiAgICAgIHRodW1icHJpbnQ6IHsKICAgICAgICAzMDA6ICJmYXRsIgogICAgICB9LAogICAgICBub3Rkb2c6IHsKICAgICAgICA5MDA6ICJmYW5zIgogICAgICB9LAogICAgICAibm90ZG9nLWR1byI6IHsKICAgICAgICA5MDA6ICJmYW5kcyIKICAgICAgfSwKICAgICAgZXRjaDogewogICAgICAgIDkwMDogImZhZXMiCiAgICAgIH0sCiAgICAgIGNoaXNlbDogewogICAgICAgIDQwMDogImZhY3IiCiAgICAgIH0sCiAgICAgIGplbGx5OiB7CiAgICAgICAgNDAwOiAiZmFqciIKICAgICAgfSwKICAgICAgImplbGx5LWZpbGwiOiB7CiAgICAgICAgNDAwOiAiZmFqZnIiCiAgICAgIH0sCiAgICAgICJqZWxseS1kdW8iOiB7CiAgICAgICAgNDAwOiAiZmFqZHIiCiAgICAgIH0sCiAgICAgIHV0aWxpdHk6IHsKICAgICAgICA2MDA6ICJmYXVzYiIKICAgICAgfSwKICAgICAgInV0aWxpdHktZHVvIjogewogICAgICAgIDYwMDogImZhdWRzYiIKICAgICAgfSwKICAgICAgInV0aWxpdHktZmlsbCI6IHsKICAgICAgICA2MDA6ICJmYXVmc2IiCiAgICAgIH0KICAgIH07CiAgICBDdCA9IHsKICAgICAgIkZvbnQgQXdlc29tZSA3IEZyZWUiOiB7CiAgICAgICAgOTAwOiAiZmFzIiwKICAgICAgICA0MDA6ICJmYXIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBQcm8iOiB7CiAgICAgICAgOTAwOiAiZmFzIiwKICAgICAgICA0MDA6ICJmYXIiLAogICAgICAgIG5vcm1hbDogImZhciIsCiAgICAgICAgMzAwOiAiZmFsIiwKICAgICAgICAxMDA6ICJmYXQiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBCcmFuZHMiOiB7CiAgICAgICAgNDAwOiAiZmFiIiwKICAgICAgICBub3JtYWw6ICJmYWIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBEdW90b25lIjogewogICAgICAgIDkwMDogImZhZCIsCiAgICAgICAgNDAwOiAiZmFkciIsCiAgICAgICAgbm9ybWFsOiAiZmFkciIsCiAgICAgICAgMzAwOiAiZmFkbCIsCiAgICAgICAgMTAwOiAiZmFkdCIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFNoYXJwIjogewogICAgICAgIDkwMDogImZhc3MiLAogICAgICAgIDQwMDogImZhc3IiLAogICAgICAgIG5vcm1hbDogImZhc3IiLAogICAgICAgIDMwMDogImZhc2wiLAogICAgICAgIDEwMDogImZhc3QiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBTaGFycCBEdW90b25lIjogewogICAgICAgIDkwMDogImZhc2RzIiwKICAgICAgICA0MDA6ICJmYXNkciIsCiAgICAgICAgbm9ybWFsOiAiZmFzZHIiLAogICAgICAgIDMwMDogImZhc2RsIiwKICAgICAgICAxMDA6ICJmYXNkdCIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IEplbGx5IjogewogICAgICAgIDQwMDogImZhanIiLAogICAgICAgIG5vcm1hbDogImZhanIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBKZWxseSBGaWxsIjogewogICAgICAgIDQwMDogImZhamZyIiwKICAgICAgICBub3JtYWw6ICJmYWpmciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IEplbGx5IER1byI6IHsKICAgICAgICA0MDA6ICJmYWpkciIsCiAgICAgICAgbm9ybWFsOiAiZmFqZHIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBTbGFiIjogewogICAgICAgIDQwMDogImZhc2xyIiwKICAgICAgICBub3JtYWw6ICJmYXNsciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MiOiB7CiAgICAgICAgNDAwOiAiZmFzbHByIiwKICAgICAgICBub3JtYWw6ICJmYXNscHIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBUaHVtYnByaW50IjogewogICAgICAgIDMwMDogImZhdGwiLAogICAgICAgIG5vcm1hbDogImZhdGwiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBOb3Rkb2ciOiB7CiAgICAgICAgOTAwOiAiZmFucyIsCiAgICAgICAgbm9ybWFsOiAiZmFucyIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IE5vdGRvZyBEdW8iOiB7CiAgICAgICAgOTAwOiAiZmFuZHMiLAogICAgICAgIG5vcm1hbDogImZhbmRzIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgRXRjaCI6IHsKICAgICAgICA5MDA6ICJmYWVzIiwKICAgICAgICBub3JtYWw6ICJmYWVzIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgQ2hpc2VsIjogewogICAgICAgIDQwMDogImZhY3IiLAogICAgICAgIG5vcm1hbDogImZhY3IiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBXaGl0ZWJvYXJkIjogewogICAgICAgIDYwMDogImZhd3NiIiwKICAgICAgICBub3JtYWw6ICJmYXdzYiIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFV0aWxpdHkiOiB7CiAgICAgICAgNjAwOiAiZmF1c2IiLAogICAgICAgIG5vcm1hbDogImZhdXNiIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgVXRpbGl0eSBEdW8iOiB7CiAgICAgICAgNjAwOiAiZmF1ZHNiIiwKICAgICAgICBub3JtYWw6ICJmYXVkc2IiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IEZpbGwiOiB7CiAgICAgICAgNjAwOiAiZmF1ZnNiIiwKICAgICAgICBub3JtYWw6ICJmYXVmc2IiCiAgICAgIH0KICAgIH07CiAgICBVdCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKFtbImNsYXNzaWMiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFzIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJzb2xpZCIsCiAgICAgIHN0eWxlSWRzOiBbInNvbGlkIiwgInJlZ3VsYXIiLCAibGlnaHQiLCAidGhpbiIsICJicmFuZHMiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogOTAwCiAgICB9XSwgWyJkdW90b25lIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhZCIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic29saWQiLAogICAgICBzdHlsZUlkczogWyJzb2xpZCIsICJyZWd1bGFyIiwgImxpZ2h0IiwgInRoaW4iXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogOTAwCiAgICB9XSwgWyJzaGFycCIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXNzIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJzb2xpZCIsCiAgICAgIHN0eWxlSWRzOiBbInNvbGlkIiwgInJlZ3VsYXIiLCAibGlnaHQiLCAidGhpbiJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA5MDAKICAgIH1dLCBbInNoYXJwLWR1b3RvbmUiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFzZHMiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNvbGlkIiwKICAgICAgc3R5bGVJZHM6IFsic29saWQiLCAicmVndWxhciIsICJsaWdodCIsICJ0aGluIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDkwMAogICAgfV0sIFsiY2hpc2VsIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhY3IiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInJlZ3VsYXIiLAogICAgICBzdHlsZUlkczogWyJyZWd1bGFyIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDQwMAogICAgfV0sIFsiZXRjaCIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYWVzIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJzb2xpZCIsCiAgICAgIHN0eWxlSWRzOiBbInNvbGlkIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDkwMAogICAgfV0sIFsiamVsbHkiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFqciIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAicmVndWxhciIsCiAgICAgIHN0eWxlSWRzOiBbInJlZ3VsYXIiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNDAwCiAgICB9XSwgWyJqZWxseS1kdW8iLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFqZHIiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInJlZ3VsYXIiLAogICAgICBzdHlsZUlkczogWyJyZWd1bGFyIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDQwMAogICAgfV0sIFsiamVsbHktZmlsbCIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYWpmciIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAicmVndWxhciIsCiAgICAgIHN0eWxlSWRzOiBbInJlZ3VsYXIiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNDAwCiAgICB9XSwgWyJub3Rkb2ciLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFucyIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic29saWQiLAogICAgICBzdHlsZUlkczogWyJzb2xpZCJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA5MDAKICAgIH1dLCBbIm5vdGRvZy1kdW8iLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFuZHMiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNvbGlkIiwKICAgICAgc3R5bGVJZHM6IFsic29saWQiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogOTAwCiAgICB9XSwgWyJzbGFiIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhc2xyIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJyZWd1bGFyIiwKICAgICAgc3R5bGVJZHM6IFsicmVndWxhciJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA0MDAKICAgIH1dLCBbInNsYWItcHJlc3MiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFzbHByIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJyZWd1bGFyIiwKICAgICAgc3R5bGVJZHM6IFsicmVndWxhciJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA0MDAKICAgIH1dLCBbInRodW1icHJpbnQiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmF0bCIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAibGlnaHQiLAogICAgICBzdHlsZUlkczogWyJsaWdodCJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiAzMDAKICAgIH1dLCBbInV0aWxpdHkiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmF1c2IiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNlbWlib2xkIiwKICAgICAgc3R5bGVJZHM6IFsic2VtaWJvbGQiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNjAwCiAgICB9XSwgWyJ1dGlsaXR5LWR1byIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXVkc2IiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNlbWlib2xkIiwKICAgICAgc3R5bGVJZHM6IFsic2VtaWJvbGQiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNjAwCiAgICB9XSwgWyJ1dGlsaXR5LWZpbGwiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmF1ZnNiIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJzZW1pYm9sZCIsCiAgICAgIHN0eWxlSWRzOiBbInNlbWlib2xkIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDYwMAogICAgfV0sIFsid2hpdGVib2FyZCIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXdzYiIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic2VtaWJvbGQiLAogICAgICBzdHlsZUlkczogWyJzZW1pYm9sZCJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA2MDAKICAgIH1dXSksIF90ID0gewogICAgICBjaGlzZWw6IHsKICAgICAgICByZWd1bGFyOiAiZmFjciIKICAgICAgfSwKICAgICAgY2xhc3NpYzogewogICAgICAgIGJyYW5kczogImZhYiIsCiAgICAgICAgbGlnaHQ6ICJmYWwiLAogICAgICAgIHJlZ3VsYXI6ICJmYXIiLAogICAgICAgIHNvbGlkOiAiZmFzIiwKICAgICAgICB0aGluOiAiZmF0IgogICAgICB9LAogICAgICBkdW90b25lOiB7CiAgICAgICAgbGlnaHQ6ICJmYWRsIiwKICAgICAgICByZWd1bGFyOiAiZmFkciIsCiAgICAgICAgc29saWQ6ICJmYWQiLAogICAgICAgIHRoaW46ICJmYWR0IgogICAgICB9LAogICAgICBldGNoOiB7CiAgICAgICAgc29saWQ6ICJmYWVzIgogICAgICB9LAogICAgICBqZWxseTogewogICAgICAgIHJlZ3VsYXI6ICJmYWpyIgogICAgICB9LAogICAgICAiamVsbHktZHVvIjogewogICAgICAgIHJlZ3VsYXI6ICJmYWpkciIKICAgICAgfSwKICAgICAgImplbGx5LWZpbGwiOiB7CiAgICAgICAgcmVndWxhcjogImZhamZyIgogICAgICB9LAogICAgICBub3Rkb2c6IHsKICAgICAgICBzb2xpZDogImZhbnMiCiAgICAgIH0sCiAgICAgICJub3Rkb2ctZHVvIjogewogICAgICAgIHNvbGlkOiAiZmFuZHMiCiAgICAgIH0sCiAgICAgIHNoYXJwOiB7CiAgICAgICAgbGlnaHQ6ICJmYXNsIiwKICAgICAgICByZWd1bGFyOiAiZmFzciIsCiAgICAgICAgc29saWQ6ICJmYXNzIiwKICAgICAgICB0aGluOiAiZmFzdCIKICAgICAgfSwKICAgICAgInNoYXJwLWR1b3RvbmUiOiB7CiAgICAgICAgbGlnaHQ6ICJmYXNkbCIsCiAgICAgICAgcmVndWxhcjogImZhc2RyIiwKICAgICAgICBzb2xpZDogImZhc2RzIiwKICAgICAgICB0aGluOiAiZmFzZHQiCiAgICAgIH0sCiAgICAgIHNsYWI6IHsKICAgICAgICByZWd1bGFyOiAiZmFzbHIiCiAgICAgIH0sCiAgICAgICJzbGFiLXByZXNzIjogewogICAgICAgIHJlZ3VsYXI6ICJmYXNscHIiCiAgICAgIH0sCiAgICAgIHRodW1icHJpbnQ6IHsKICAgICAgICBsaWdodDogImZhdGwiCiAgICAgIH0sCiAgICAgIHV0aWxpdHk6IHsKICAgICAgICBzZW1pYm9sZDogImZhdXNiIgogICAgICB9LAogICAgICAidXRpbGl0eS1kdW8iOiB7CiAgICAgICAgc2VtaWJvbGQ6ICJmYXVkc2IiCiAgICAgIH0sCiAgICAgICJ1dGlsaXR5LWZpbGwiOiB7CiAgICAgICAgc2VtaWJvbGQ6ICJmYXVmc2IiCiAgICAgIH0sCiAgICAgIHdoaXRlYm9hcmQ6IHsKICAgICAgICBzZW1pYm9sZDogImZhd3NiIgogICAgICB9CiAgICB9OwogICAgWXQgPSBbImZhayIsICJmYS1raXQiLCAiZmFrZCIsICJmYS1raXQtZHVvdG9uZSJdLCBxdCA9IHsKICAgICAga2l0OiB7CiAgICAgICAgZmFrOiAia2l0IiwKICAgICAgICAiZmEta2l0IjogImtpdCIKICAgICAgfSwKICAgICAgImtpdC1kdW90b25lIjogewogICAgICAgIGZha2Q6ICJraXQtZHVvdG9uZSIsCiAgICAgICAgImZhLWtpdC1kdW90b25lIjogImtpdC1kdW90b25lIgogICAgICB9CiAgICB9LCBIdCA9IFsia2l0Il07CiAgICBMMiA9ICJraXQiLCByMTAgPSAia2l0LWR1b3RvbmUiLCBVID0gIktpdCIsIEogPSAiS2l0IER1b3RvbmUiLCAkdCA9IF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIEwyLCBVKSwgcjEwLCBKKTsKICAgIG9sID0gewogICAgICBraXQ6IHsKICAgICAgICAiZmEta2l0IjogImZhayIKICAgICAgfSwKICAgICAgImtpdC1kdW90b25lIjogewogICAgICAgICJmYS1raXQtZHVvdG9uZSI6ICJmYWtkIgogICAgICB9CiAgICB9OwogICAgZGwgPSB7CiAgICAgICJGb250IEF3ZXNvbWUgS2l0IjogewogICAgICAgIDQwMDogImZhayIsCiAgICAgICAgbm9ybWFsOiAiZmFrIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIEtpdCBEdW90b25lIjogewogICAgICAgIDQwMDogImZha2QiLAogICAgICAgIG5vcm1hbDogImZha2QiCiAgICAgIH0KICAgIH0sIGZsID0gewogICAgICBraXQ6IHsKICAgICAgICBmYWs6ICJmYS1raXQiCiAgICAgIH0sCiAgICAgICJraXQtZHVvdG9uZSI6IHsKICAgICAgICBmYWtkOiAiZmEta2l0LWR1b3RvbmUiCiAgICAgIH0KICAgIH07CiAgICB1bCA9IHsKICAgICAga2l0OiB7CiAgICAgICAga2l0OiAiZmFrIgogICAgICB9LAogICAgICAia2l0LWR1b3RvbmUiOiB7CiAgICAgICAgImtpdC1kdW90b25lIjogImZha2QiCiAgICAgIH0KICAgIH07CiAgICBsJDEgPSB7CiAgICAgIEdST1VQOiAiZHVvdG9uZS1ncm91cCIsCiAgICAgIFNXQVBfT1BBQ0lUWTogInN3YXAtb3BhY2l0eSIsCiAgICAgIFBSSU1BUlk6ICJwcmltYXJ5IiwKICAgICAgU0VDT05EQVJZOiAic2Vjb25kYXJ5IgogICAgfSwgZiQxID0gWyJmYS1jbGFzc2ljIiwgImZhLWR1b3RvbmUiLCAiZmEtc2hhcnAiLCAiZmEtc2hhcnAtZHVvdG9uZSIsICJmYS10aHVtYnByaW50IiwgImZhLXdoaXRlYm9hcmQiLCAiZmEtbm90ZG9nIiwgImZhLW5vdGRvZy1kdW8iLCAiZmEtY2hpc2VsIiwgImZhLWV0Y2giLCAiZmEtamVsbHkiLCAiZmEtamVsbHktZmlsbCIsICJmYS1qZWxseS1kdW8iLCAiZmEtc2xhYiIsICJmYS1zbGFiLXByZXNzIiwgImZhLXV0aWxpdHkiLCAiZmEtdXRpbGl0eS1kdW8iLCAiZmEtdXRpbGl0eS1maWxsIl07CiAgICBuJDEgPSAiY2xhc3NpYyIsIG8kMSA9ICJkdW90b25lIiwgdSQxID0gInNoYXJwIiwgcyQxID0gInNoYXJwLWR1b3RvbmUiLCBoJDEgPSAiY2hpc2VsIiwgZyQxID0gImV0Y2giLCB5JDEgPSAiamVsbHkiLCBlJDEgPSAiamVsbHktZHVvIiwgbSQxID0gImplbGx5LWZpbGwiLCBwJDEgPSAibm90ZG9nIiwgYSQxID0gIm5vdGRvZy1kdW8iLCB3JDEgPSAic2xhYiIsIGIkMSA9ICJzbGFiLXByZXNzIiwgciQxID0gInRodW1icHJpbnQiLCBjJDEgPSAidXRpbGl0eSIsIGkkMSA9ICJ1dGlsaXR5LWR1byIsIHgkMSA9ICJ1dGlsaXR5LWZpbGwiLCBJJDEgPSAid2hpdGVib2FyZCIsIEYkMSA9ICJDbGFzc2ljIiwgdiQxID0gIkR1b3RvbmUiLCBTJDEgPSAiU2hhcnAiLCBBJDEgPSAiU2hhcnAgRHVvdG9uZSIsIFAkMSA9ICJDaGlzZWwiLCBqJDEgPSAiRXRjaCIsIEIkMSA9ICJKZWxseSIsIE4kMSA9ICJKZWxseSBEdW8iLCBrJDEgPSAiSmVsbHkgRmlsbCIsIEQkMSA9ICJOb3Rkb2ciLCBDJDEgPSAiTm90ZG9nIER1byIsIFQkMSA9ICJTbGFiIiwgTCQxID0gIlNsYWIgUHJlc3MiLCBXJDEgPSAiVGh1bWJwcmludCIsIFIkMSA9ICJVdGlsaXR5IiwgSyQxID0gIlV0aWxpdHkgRHVvIiwgVSQxID0gIlV0aWxpdHkgRmlsbCIsIEokMSA9ICJXaGl0ZWJvYXJkIiwgbWwkMSA9IChfbWwgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9tbCwgbiQxLCBGJDEpLCBvJDEsIHYkMSksIHUkMSwgUyQxKSwgcyQxLCBBJDEpLCBoJDEsIFAkMSksIGckMSwgaiQxKSwgeSQxLCBCJDEpLCBlJDEsIE4kMSksIG0kMSwgayQxKSwgcCQxLCBEJDEpLCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9tbCwgYSQxLCBDJDEpLCB3JDEsIFQkMSksIGIkMSwgTCQxKSwgciQxLCBXJDEpLCBjJDEsIFIkMSksIGkkMSwgSyQxKSwgeCQxLCBVJDEpLCBJJDEsIEokMSkpOwogICAgRSQxID0gImtpdCIsIGQkMSA9ICJraXQtZHVvdG9uZSIsIF8kMSA9ICJLaXQiLCBNJDEgPSAiS2l0IER1b3RvbmUiLCBydCQxID0gX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgRSQxLCBfJDEpLCBkJDEsIE0kMSk7CiAgICAkdCQxID0gewogICAgICBjbGFzc2ljOiB7CiAgICAgICAgImZhLWJyYW5kcyI6ICJmYWIiLAogICAgICAgICJmYS1kdW90b25lIjogImZhZCIsCiAgICAgICAgImZhLWxpZ2h0IjogImZhbCIsCiAgICAgICAgImZhLXJlZ3VsYXIiOiAiZmFyIiwKICAgICAgICAiZmEtc29saWQiOiAiZmFzIiwKICAgICAgICAiZmEtdGhpbiI6ICJmYXQiCiAgICAgIH0sCiAgICAgIGR1b3RvbmU6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJmYWRyIiwKICAgICAgICAiZmEtbGlnaHQiOiAiZmFkbCIsCiAgICAgICAgImZhLXRoaW4iOiAiZmFkdCIKICAgICAgfSwKICAgICAgc2hhcnA6IHsKICAgICAgICAiZmEtc29saWQiOiAiZmFzcyIsCiAgICAgICAgImZhLXJlZ3VsYXIiOiAiZmFzciIsCiAgICAgICAgImZhLWxpZ2h0IjogImZhc2wiLAogICAgICAgICJmYS10aGluIjogImZhc3QiCiAgICAgIH0sCiAgICAgICJzaGFycC1kdW90b25lIjogewogICAgICAgICJmYS1zb2xpZCI6ICJmYXNkcyIsCiAgICAgICAgImZhLXJlZ3VsYXIiOiAiZmFzZHIiLAogICAgICAgICJmYS1saWdodCI6ICJmYXNkbCIsCiAgICAgICAgImZhLXRoaW4iOiAiZmFzZHQiCiAgICAgIH0sCiAgICAgIHNsYWI6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJmYXNsciIKICAgICAgfSwKICAgICAgInNsYWItcHJlc3MiOiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAiZmFzbHByIgogICAgICB9LAogICAgICB3aGl0ZWJvYXJkOiB7CiAgICAgICAgImZhLXNlbWlib2xkIjogImZhd3NiIgogICAgICB9LAogICAgICB0aHVtYnByaW50OiB7CiAgICAgICAgImZhLWxpZ2h0IjogImZhdGwiCiAgICAgIH0sCiAgICAgIG5vdGRvZzogewogICAgICAgICJmYS1zb2xpZCI6ICJmYW5zIgogICAgICB9LAogICAgICAibm90ZG9nLWR1byI6IHsKICAgICAgICAiZmEtc29saWQiOiAiZmFuZHMiCiAgICAgIH0sCiAgICAgIGV0Y2g6IHsKICAgICAgICAiZmEtc29saWQiOiAiZmFlcyIKICAgICAgfSwKICAgICAgamVsbHk6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJmYWpyIgogICAgICB9LAogICAgICAiamVsbHktZmlsbCI6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJmYWpmciIKICAgICAgfSwKICAgICAgImplbGx5LWR1byI6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJmYWpkciIKICAgICAgfSwKICAgICAgY2hpc2VsOiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAiZmFjciIKICAgICAgfSwKICAgICAgdXRpbGl0eTogewogICAgICAgICJmYS1zZW1pYm9sZCI6ICJmYXVzYiIKICAgICAgfSwKICAgICAgInV0aWxpdHktZHVvIjogewogICAgICAgICJmYS1zZW1pYm9sZCI6ICJmYXVkc2IiCiAgICAgIH0sCiAgICAgICJ1dGlsaXR5LWZpbGwiOiB7CiAgICAgICAgImZhLXNlbWlib2xkIjogImZhdWZzYiIKICAgICAgfQogICAgfSwgejIgPSB7CiAgICAgIGNsYXNzaWM6IFsiZmFzIiwgImZhciIsICJmYWwiLCAiZmF0IiwgImZhZCJdLAogICAgICBkdW90b25lOiBbImZhZHIiLCAiZmFkbCIsICJmYWR0Il0sCiAgICAgIHNoYXJwOiBbImZhc3MiLCAiZmFzciIsICJmYXNsIiwgImZhc3QiXSwKICAgICAgInNoYXJwLWR1b3RvbmUiOiBbImZhc2RzIiwgImZhc2RyIiwgImZhc2RsIiwgImZhc2R0Il0sCiAgICAgIHNsYWI6IFsiZmFzbHIiXSwKICAgICAgInNsYWItcHJlc3MiOiBbImZhc2xwciJdLAogICAgICB3aGl0ZWJvYXJkOiBbImZhd3NiIl0sCiAgICAgIHRodW1icHJpbnQ6IFsiZmF0bCJdLAogICAgICBub3Rkb2c6IFsiZmFucyJdLAogICAgICAibm90ZG9nLWR1byI6IFsiZmFuZHMiXSwKICAgICAgZXRjaDogWyJmYWVzIl0sCiAgICAgIGplbGx5OiBbImZhanIiXSwKICAgICAgImplbGx5LWZpbGwiOiBbImZhamZyIl0sCiAgICAgICJqZWxseS1kdW8iOiBbImZhamRyIl0sCiAgICAgIGNoaXNlbDogWyJmYWNyIl0sCiAgICAgIHV0aWxpdHk6IFsiZmF1c2IiXSwKICAgICAgInV0aWxpdHktZHVvIjogWyJmYXVkc2IiXSwKICAgICAgInV0aWxpdHktZmlsbCI6IFsiZmF1ZnNiIl0KICAgIH0sIEh0JDEgPSB7CiAgICAgIGNsYXNzaWM6IHsKICAgICAgICBmYWI6ICJmYS1icmFuZHMiLAogICAgICAgIGZhZDogImZhLWR1b3RvbmUiLAogICAgICAgIGZhbDogImZhLWxpZ2h0IiwKICAgICAgICBmYXI6ICJmYS1yZWd1bGFyIiwKICAgICAgICBmYXM6ICJmYS1zb2xpZCIsCiAgICAgICAgZmF0OiAiZmEtdGhpbiIKICAgICAgfSwKICAgICAgZHVvdG9uZTogewogICAgICAgIGZhZHI6ICJmYS1yZWd1bGFyIiwKICAgICAgICBmYWRsOiAiZmEtbGlnaHQiLAogICAgICAgIGZhZHQ6ICJmYS10aGluIgogICAgICB9LAogICAgICBzaGFycDogewogICAgICAgIGZhc3M6ICJmYS1zb2xpZCIsCiAgICAgICAgZmFzcjogImZhLXJlZ3VsYXIiLAogICAgICAgIGZhc2w6ICJmYS1saWdodCIsCiAgICAgICAgZmFzdDogImZhLXRoaW4iCiAgICAgIH0sCiAgICAgICJzaGFycC1kdW90b25lIjogewogICAgICAgIGZhc2RzOiAiZmEtc29saWQiLAogICAgICAgIGZhc2RyOiAiZmEtcmVndWxhciIsCiAgICAgICAgZmFzZGw6ICJmYS1saWdodCIsCiAgICAgICAgZmFzZHQ6ICJmYS10aGluIgogICAgICB9LAogICAgICBzbGFiOiB7CiAgICAgICAgZmFzbHI6ICJmYS1yZWd1bGFyIgogICAgICB9LAogICAgICAic2xhYi1wcmVzcyI6IHsKICAgICAgICBmYXNscHI6ICJmYS1yZWd1bGFyIgogICAgICB9LAogICAgICB3aGl0ZWJvYXJkOiB7CiAgICAgICAgZmF3c2I6ICJmYS1zZW1pYm9sZCIKICAgICAgfSwKICAgICAgdGh1bWJwcmludDogewogICAgICAgIGZhdGw6ICJmYS1saWdodCIKICAgICAgfSwKICAgICAgbm90ZG9nOiB7CiAgICAgICAgZmFuczogImZhLXNvbGlkIgogICAgICB9LAogICAgICAibm90ZG9nLWR1byI6IHsKICAgICAgICBmYW5kczogImZhLXNvbGlkIgogICAgICB9LAogICAgICBldGNoOiB7CiAgICAgICAgZmFlczogImZhLXNvbGlkIgogICAgICB9LAogICAgICBqZWxseTogewogICAgICAgIGZhanI6ICJmYS1yZWd1bGFyIgogICAgICB9LAogICAgICAiamVsbHktZmlsbCI6IHsKICAgICAgICBmYWpmcjogImZhLXJlZ3VsYXIiCiAgICAgIH0sCiAgICAgICJqZWxseS1kdW8iOiB7CiAgICAgICAgZmFqZHI6ICJmYS1yZWd1bGFyIgogICAgICB9LAogICAgICBjaGlzZWw6IHsKICAgICAgICBmYWNyOiAiZmEtcmVndWxhciIKICAgICAgfSwKICAgICAgdXRpbGl0eTogewogICAgICAgIGZhdXNiOiAiZmEtc2VtaWJvbGQiCiAgICAgIH0sCiAgICAgICJ1dGlsaXR5LWR1byI6IHsKICAgICAgICBmYXVkc2I6ICJmYS1zZW1pYm9sZCIKICAgICAgfSwKICAgICAgInV0aWxpdHktZmlsbCI6IHsKICAgICAgICBmYXVmc2I6ICJmYS1zZW1pYm9sZCIKICAgICAgfQogICAgfSwgWSQxID0gWyJmYS1zb2xpZCIsICJmYS1yZWd1bGFyIiwgImZhLWxpZ2h0IiwgImZhLXRoaW4iLCAiZmEtZHVvdG9uZSIsICJmYS1icmFuZHMiLCAiZmEtc2VtaWJvbGQiXSwgWnQkMSA9IFsiZmEiLCAiZmFzIiwgImZhciIsICJmYWwiLCAiZmF0IiwgImZhZCIsICJmYWRyIiwgImZhZGwiLCAiZmFkdCIsICJmYWIiLCAiZmFzcyIsICJmYXNyIiwgImZhc2wiLCAiZmFzdCIsICJmYXNkcyIsICJmYXNkciIsICJmYXNkbCIsICJmYXNkdCIsICJmYXNsciIsICJmYXNscHIiLCAiZmF3c2IiLCAiZmF0bCIsICJmYW5zIiwgImZhbmRzIiwgImZhZXMiLCAiZmFqciIsICJmYWpmciIsICJmYWpkciIsICJmYWNyIiwgImZhdXNiIiwgImZhdWRzYiIsICJmYXVmc2IiXS5jb25jYXQoZiQxLCBZJDEpLCBHJDEgPSBbInNvbGlkIiwgInJlZ3VsYXIiLCAibGlnaHQiLCAidGhpbiIsICJkdW90b25lIiwgImJyYW5kcyIsICJzZW1pYm9sZCJdLCBPJDEgPSBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdLCBWJDEgPSBPJDEuY29uY2F0KFsxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMF0pLCAkJDEgPSBbImF3IiwgImZ3IiwgInB1bGwtbGVmdCIsICJwdWxsLXJpZ2h0Il0sIHRvID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShPYmplY3Qua2V5cyh6MikpLCBHJDEsICQkMSwgWyIyeHMiLCAieHMiLCAic20iLCAibGciLCAieGwiLCAiMnhsIiwgImJlYXQiLCAiYm9yZGVyIiwgImZhZGUiLCAiYmVhdC1mYWRlIiwgImJvdW5jZSIsICJmbGlwLWJvdGgiLCAiZmxpcC1ob3Jpem9udGFsIiwgImZsaXAtdmVydGljYWwiLCAiZmxpcCIsICJpbnZlcnNlIiwgImxheWVycyIsICJsYXllcnMtYm90dG9tLWxlZnQiLCAibGF5ZXJzLWJvdHRvbS1yaWdodCIsICJsYXllcnMtY291bnRlciIsICJsYXllcnMtdGV4dCIsICJsYXllcnMtdG9wLWxlZnQiLCAibGF5ZXJzLXRvcC1yaWdodCIsICJsaSIsICJwdWxsLWVuZCIsICJwdWxsLXN0YXJ0IiwgInB1bHNlIiwgInJvdGF0ZS0xODAiLCAicm90YXRlLTI3MCIsICJyb3RhdGUtOTAiLCAicm90YXRlLWJ5IiwgInNoYWtlIiwgInNwaW4tcHVsc2UiLCAic3Bpbi1yZXZlcnNlIiwgInNwaW4iLCAic3RhY2stMXgiLCAic3RhY2stMngiLCAic3RhY2siLCAidWwiLCAid2lkdGgtYXV0byIsICJ3aWR0aC1maXhlZCIsIGwkMS5HUk9VUCwgbCQxLlNXQVBfT1BBQ0lUWSwgbCQxLlBSSU1BUlksIGwkMS5TRUNPTkRBUlldKS5jb25jYXQoTyQxLm1hcChmdW5jdGlvbih0OSkgewogICAgICByZXR1cm4gIiIuY29uY2F0KHQ5LCAieCIpOwogICAgfSkpLmNvbmNhdChWJDEubWFwKGZ1bmN0aW9uKHQ5KSB7CiAgICAgIHJldHVybiAidy0iLmNvbmNhdCh0OSk7CiAgICB9KSk7CiAgICBybyA9IHsKICAgICAgIkZvbnQgQXdlc29tZSA1IEZyZWUiOiB7CiAgICAgICAgOTAwOiAiZmFzIiwKICAgICAgICA0MDA6ICJmYXIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNSBQcm8iOiB7CiAgICAgICAgOTAwOiAiZmFzIiwKICAgICAgICA0MDA6ICJmYXIiLAogICAgICAgIG5vcm1hbDogImZhciIsCiAgICAgICAgMzAwOiAiZmFsIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDUgQnJhbmRzIjogewogICAgICAgIDQwMDogImZhYiIsCiAgICAgICAgbm9ybWFsOiAiZmFiIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDUgRHVvdG9uZSI6IHsKICAgICAgICA5MDA6ICJmYWQiCiAgICAgIH0KICAgIH07CiAgICBOQU1FU1BBQ0VfSURFTlRJRklFUiA9ICJfX19GT05UX0FXRVNPTUVfX18iOwogICAgVU5JVFNfSU5fR1JJRCA9IDE2OwogICAgREVGQVVMVF9DU1NfUFJFRklYID0gImZhIjsKICAgIERFRkFVTFRfUkVQTEFDRU1FTlRfQ0xBU1MgPSAic3ZnLWlubGluZS0tZmEiOwogICAgREFUQV9GQV9JMlNWRyA9ICJkYXRhLWZhLWkyc3ZnIjsKICAgIERBVEFfRkFfUFNFVURPX0VMRU1FTlQgPSAiZGF0YS1mYS1wc2V1ZG8tZWxlbWVudCI7CiAgICBEQVRBX0ZBX1BTRVVET19FTEVNRU5UX1BFTkRJTkcgPSAiZGF0YS1mYS1wc2V1ZG8tZWxlbWVudC1wZW5kaW5nIjsKICAgIERBVEFfUFJFRklYID0gImRhdGEtcHJlZml4IjsKICAgIERBVEFfSUNPTiA9ICJkYXRhLWljb24iOwogICAgSFRNTF9DTEFTU19JMlNWR19CQVNFX0NMQVNTID0gImZvbnRhd2Vzb21lLWkyc3ZnIjsKICAgIE1VVEFUSU9OX0FQUFJPQUNIX0FTWU5DID0gImFzeW5jIjsKICAgIFRBR05BTUVTX1RPX1NLSVBfRk9SX1BTRVVET0VMRU1FTlRTID0gWyJIVE1MIiwgIkhFQUQiLCAiU1RZTEUiLCAiU0NSSVBUIl07CiAgICBQU0VVRE9fRUxFTUVOVFMgPSBbIjo6YmVmb3JlIiwgIjo6YWZ0ZXIiLCAiOmJlZm9yZSIsICI6YWZ0ZXIiXTsKICAgIFBST0RVQ1RJT04gPSAoZnVuY3Rpb24oKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9IGNhdGNoIChlJCQxKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9KSgpOwogICAgX1BSRUZJWF9UT19TVFlMRSA9IF9vYmplY3RTcHJlYWQyKHt9LCBxKTsKICAgIF9QUkVGSVhfVE9fU1RZTEVbaTEwXSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCB7CiAgICAgICJmYS1kdW90b25lIjogImR1b3RvbmUiCiAgICB9KSwgcVtpMTBdKSwgcXRbImtpdCJdKSwgcXRbImtpdC1kdW90b25lIl0pOwogICAgUFJFRklYX1RPX1NUWUxFID0gZmFtaWx5UHJveHkoX1BSRUZJWF9UT19TVFlMRSk7CiAgICBfU1RZTEVfVE9fUFJFRklYID0gX29iamVjdFNwcmVhZDIoe30sIF90KTsKICAgIF9TVFlMRV9UT19QUkVGSVhbaTEwXSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCB7CiAgICAgIGR1b3RvbmU6ICJmYWQiCiAgICB9KSwgX1NUWUxFX1RPX1BSRUZJWFtpMTBdKSwgdWxbImtpdCJdKSwgdWxbImtpdC1kdW90b25lIl0pOwogICAgU1RZTEVfVE9fUFJFRklYID0gZmFtaWx5UHJveHkoX1NUWUxFX1RPX1BSRUZJWCk7CiAgICBfUFJFRklYX1RPX0xPTkdfU1RZTEUgPSBfb2JqZWN0U3ByZWFkMih7fSwgSHQkMSk7CiAgICBfUFJFRklYX1RPX0xPTkdfU1RZTEVbaTEwXSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBfUFJFRklYX1RPX0xPTkdfU1RZTEVbaTEwXSksIGZsWyJraXQiXSk7CiAgICBQUkVGSVhfVE9fTE9OR19TVFlMRSA9IGZhbWlseVByb3h5KF9QUkVGSVhfVE9fTE9OR19TVFlMRSk7CiAgICBfTE9OR19TVFlMRV9UT19QUkVGSVggPSBfb2JqZWN0U3ByZWFkMih7fSwgJHQkMSk7CiAgICBfTE9OR19TVFlMRV9UT19QUkVGSVhbaTEwXSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBfTE9OR19TVFlMRV9UT19QUkVGSVhbaTEwXSksIG9sWyJraXQiXSk7CiAgICBMT05HX1NUWUxFX1RPX1BSRUZJWCA9IGZhbWlseVByb3h5KF9MT05HX1NUWUxFX1RPX1BSRUZJWCk7CiAgICBJQ09OX1NFTEVDVElPTl9TWU5UQVhfUEFUVEVSTiA9IEUyOwogICAgTEFZRVJTX1RFWFRfQ0xBU1NOQU1FID0gImZhLWxheWVycy10ZXh0IjsKICAgIEZPTlRfRkFNSUxZX1BBVFRFUk4gPSBfMzsKICAgIF9GT05UX1dFSUdIVF9UT19QUkVGSVggPSBfb2JqZWN0U3ByZWFkMih7fSwgZ3QpOwogICAgRk9OVF9XRUlHSFRfVE9fUFJFRklYID0gZmFtaWx5UHJveHkoX0ZPTlRfV0VJR0hUX1RPX1BSRUZJWCk7CiAgICBBVFRSSUJVVEVTX1dBVENIRURfRk9SX01VVEFUSU9OID0gWyJjbGFzcyIsICJkYXRhLXByZWZpeCIsICJkYXRhLWljb24iLCAiZGF0YS1mYS10cmFuc2Zvcm0iLCAiZGF0YS1mYS1tYXNrIl07CiAgICBEVU9UT05FX0NMQVNTRVMgPSBIMzsKICAgIFJFU0VSVkVEX0NMQVNTRVMgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KEh0KSwgX3RvQ29uc3VtYWJsZUFycmF5KHRvKSk7CiAgICBpbml0aWFsID0gV0lORE9XLkZvbnRBd2Vzb21lQ29uZmlnIHx8IHt9OwogICAgaWYgKERPQ1VNRU5UICYmIHR5cGVvZiBET0NVTUVOVC5xdWVyeVNlbGVjdG9yID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGF0dHJzID0gW1siZGF0YS1mYW1pbHktcHJlZml4IiwgImZhbWlseVByZWZpeCJdLCBbImRhdGEtY3NzLXByZWZpeCIsICJjc3NQcmVmaXgiXSwgWyJkYXRhLWZhbWlseS1kZWZhdWx0IiwgImZhbWlseURlZmF1bHQiXSwgWyJkYXRhLXN0eWxlLWRlZmF1bHQiLCAic3R5bGVEZWZhdWx0Il0sIFsiZGF0YS1yZXBsYWNlbWVudC1jbGFzcyIsICJyZXBsYWNlbWVudENsYXNzIl0sIFsiZGF0YS1hdXRvLXJlcGxhY2Utc3ZnIiwgImF1dG9SZXBsYWNlU3ZnIl0sIFsiZGF0YS1hdXRvLWFkZC1jc3MiLCAiYXV0b0FkZENzcyJdLCBbImRhdGEtc2VhcmNoLXBzZXVkby1lbGVtZW50cyIsICJzZWFyY2hQc2V1ZG9FbGVtZW50cyJdLCBbImRhdGEtc2VhcmNoLXBzZXVkby1lbGVtZW50cy13YXJuaW5ncyIsICJzZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzIl0sIFsiZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLWZ1bGwtc2NhbiIsICJzZWFyY2hQc2V1ZG9FbGVtZW50c0Z1bGxTY2FuIl0sIFsiZGF0YS1vYnNlcnZlLW11dGF0aW9ucyIsICJvYnNlcnZlTXV0YXRpb25zIl0sIFsiZGF0YS1tdXRhdGUtYXBwcm9hY2giLCAibXV0YXRlQXBwcm9hY2giXSwgWyJkYXRhLWtlZXAtb3JpZ2luYWwtc291cmNlIiwgImtlZXBPcmlnaW5hbFNvdXJjZSJdLCBbImRhdGEtbWVhc3VyZS1wZXJmb3JtYW5jZSIsICJtZWFzdXJlUGVyZm9ybWFuY2UiXSwgWyJkYXRhLXNob3ctbWlzc2luZy1pY29ucyIsICJzaG93TWlzc2luZ0ljb25zIl1dOwogICAgICBhdHRycy5mb3JFYWNoKGZ1bmN0aW9uKF9yZWYyKSB7CiAgICAgICAgdmFyIF9yZWYyMiA9IF9zbGljZWRUb0FycmF5KF9yZWYyLCAyKSwgYXR0ciA9IF9yZWYyMlswXSwga2V5MiA9IF9yZWYyMlsxXTsKICAgICAgICB2YXIgdmFsID0gY29lcmNlKGdldEF0dHJDb25maWcoYXR0cikpOwogICAgICAgIGlmICh2YWwgIT09IHZvaWQgMCAmJiB2YWwgIT09IG51bGwpIHsKICAgICAgICAgIGluaXRpYWxba2V5Ml0gPSB2YWw7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIF9kZWZhdWx0ID0gewogICAgICBzdHlsZURlZmF1bHQ6ICJzb2xpZCIsCiAgICAgIGZhbWlseURlZmF1bHQ6IGkxMCwKICAgICAgY3NzUHJlZml4OiBERUZBVUxUX0NTU19QUkVGSVgsCiAgICAgIHJlcGxhY2VtZW50Q2xhc3M6IERFRkFVTFRfUkVQTEFDRU1FTlRfQ0xBU1MsCiAgICAgIGF1dG9SZXBsYWNlU3ZnOiB0cnVlLAogICAgICBhdXRvQWRkQ3NzOiB0cnVlLAogICAgICBzZWFyY2hQc2V1ZG9FbGVtZW50czogZmFsc2UsCiAgICAgIHNlYXJjaFBzZXVkb0VsZW1lbnRzV2FybmluZ3M6IHRydWUsCiAgICAgIHNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW46IGZhbHNlLAogICAgICBvYnNlcnZlTXV0YXRpb25zOiB0cnVlLAogICAgICBtdXRhdGVBcHByb2FjaDogImFzeW5jIiwKICAgICAga2VlcE9yaWdpbmFsU291cmNlOiB0cnVlLAogICAgICBtZWFzdXJlUGVyZm9ybWFuY2U6IGZhbHNlLAogICAgICBzaG93TWlzc2luZ0ljb25zOiB0cnVlCiAgICB9OwogICAgaWYgKGluaXRpYWwuZmFtaWx5UHJlZml4KSB7CiAgICAgIGluaXRpYWwuY3NzUHJlZml4ID0gaW5pdGlhbC5mYW1pbHlQcmVmaXg7CiAgICB9CiAgICBfY29uZmlnID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIF9kZWZhdWx0KSwgaW5pdGlhbCk7CiAgICBpZiAoIV9jb25maWcuYXV0b1JlcGxhY2VTdmcpIF9jb25maWcub2JzZXJ2ZU11dGF0aW9ucyA9IGZhbHNlOwogICAgY29uZmlnMiA9IHt9OwogICAgT2JqZWN0LmtleXMoX2RlZmF1bHQpLmZvckVhY2goZnVuY3Rpb24oa2V5MikgewogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uZmlnMiwga2V5MiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQzKHZhbCkgewogICAgICAgICAgX2NvbmZpZ1trZXkyXSA9IHZhbDsKICAgICAgICAgIF9vbkNoYW5nZUNiLmZvckVhY2goZnVuY3Rpb24oY2IpIHsKICAgICAgICAgICAgcmV0dXJuIGNiKGNvbmZpZzIpOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldDIoKSB7CiAgICAgICAgICByZXR1cm4gX2NvbmZpZ1trZXkyXTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uZmlnMiwgImZhbWlseVByZWZpeCIsIHsKICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgc2V0OiBmdW5jdGlvbiBzZXQyKHZhbCkgewogICAgICAgIF9jb25maWcuY3NzUHJlZml4ID0gdmFsOwogICAgICAgIF9vbkNoYW5nZUNiLmZvckVhY2goZnVuY3Rpb24oY2IpIHsKICAgICAgICAgIHJldHVybiBjYihjb25maWcyKTsKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgcmV0dXJuIF9jb25maWcuY3NzUHJlZml4OwogICAgICB9CiAgICB9KTsKICAgIFdJTkRPVy5Gb250QXdlc29tZUNvbmZpZyA9IGNvbmZpZzI7CiAgICBfb25DaGFuZ2VDYiA9IFtdOwogICAgZCQyID0gVU5JVFNfSU5fR1JJRDsKICAgIG1lYW5pbmdsZXNzVHJhbnNmb3JtID0gewogICAgICBzaXplOiAxNiwKICAgICAgeDogMCwKICAgICAgeTogMCwKICAgICAgcm90YXRlOiAwLAogICAgICBmbGlwWDogZmFsc2UsCiAgICAgIGZsaXBZOiBmYWxzZQogICAgfTsKICAgIGlkUG9vbCA9ICIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7CiAgICBiYXNlU3R5bGVzID0gYDpyb290LCA6aG9zdCB7CiAgLS1mYS1mb250LXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBGcmVlIjsKICAtLWZhLWZvbnQtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgRnJlZSI7CiAgLS1mYS1mb250LWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBQcm8iOwogIC0tZmEtZm9udC10aGluOiBub3JtYWwgMTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBQcm8iOwogIC0tZmEtZm9udC1kdW90b25lOiBub3JtYWwgOTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBEdW90b25lIjsKICAtLWZhLWZvbnQtZHVvdG9uZS1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBEdW90b25lIjsKICAtLWZhLWZvbnQtZHVvdG9uZS1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgRHVvdG9uZSI7CiAgLS1mYS1mb250LWR1b3RvbmUtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgRHVvdG9uZSI7CiAgLS1mYS1mb250LWJyYW5kczogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgQnJhbmRzIjsKICAtLWZhLWZvbnQtc2hhcnAtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNoYXJwIjsKICAtLWZhLWZvbnQtc2hhcnAtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgU2hhcnAiOwogIC0tZmEtZm9udC1zaGFycC1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgU2hhcnAiOwogIC0tZmEtZm9udC1zaGFycC10aGluOiBub3JtYWwgMTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTaGFycCI7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUiOwogIC0tZmEtZm9udC1zaGFycC1kdW90b25lLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUiOwogIC0tZmEtZm9udC1zaGFycC1kdW90b25lLWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTaGFycCBEdW90b25lIjsKICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS10aGluOiBub3JtYWwgMTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTaGFycCBEdW90b25lIjsKICAtLWZhLWZvbnQtc2xhYi1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTbGFiIjsKICAtLWZhLWZvbnQtc2xhYi1wcmVzcy1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTbGFiIFByZXNzIjsKICAtLWZhLWZvbnQtd2hpdGVib2FyZC1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgV2hpdGVib2FyZCI7CiAgLS1mYS1mb250LXRodW1icHJpbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFRodW1icHJpbnQiOwogIC0tZmEtZm9udC1ub3Rkb2ctc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IE5vdGRvZyI7CiAgLS1mYS1mb250LW5vdGRvZy1kdW8tc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IE5vdGRvZyBEdW8iOwogIC0tZmEtZm9udC1ldGNoLXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBFdGNoIjsKICAtLWZhLWZvbnQtamVsbHktcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgSmVsbHkiOwogIC0tZmEtZm9udC1qZWxseS1maWxsLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IEplbGx5IEZpbGwiOwogIC0tZmEtZm9udC1qZWxseS1kdW8tcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgSmVsbHkgRHVvIjsKICAtLWZhLWZvbnQtY2hpc2VsLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IENoaXNlbCI7CiAgLS1mYS1mb250LXV0aWxpdHktc2VtaWJvbGQ6IG5vcm1hbCA2MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFV0aWxpdHkiOwogIC0tZmEtZm9udC11dGlsaXR5LWR1by1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgVXRpbGl0eSBEdW8iOwogIC0tZmEtZm9udC11dGlsaXR5LWZpbGwtc2VtaWJvbGQ6IG5vcm1hbCA2MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFV0aWxpdHkgRmlsbCI7Cn0KCi5zdmctaW5saW5lLS1mYSB7CiAgYm94LXNpemluZzogY29udGVudC1ib3g7CiAgZGlzcGxheTogdmFyKC0tZmEtZGlzcGxheSwgaW5saW5lLWJsb2NrKTsKICBoZWlnaHQ6IDFlbTsKICBvdmVyZmxvdzogdmlzaWJsZTsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTI1ZW07CiAgd2lkdGg6IHZhcigtLWZhLXdpZHRoLCAxLjI1ZW0pOwp9Ci5zdmctaW5saW5lLS1mYS5mYS0yeHMgewogIHZlcnRpY2FsLWFsaWduOiAwLjFlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEteHMgewogIHZlcnRpY2FsLWFsaWduOiAwZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXNtIHsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMDcxNDI4NTcxNGVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1sZyB7CiAgdmVydGljYWwtYWxpZ246IC0wLjJlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEteGwgewogIHZlcnRpY2FsLWFsaWduOiAtMC4yNWVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS0yeGwgewogIHZlcnRpY2FsLWFsaWduOiAtMC4zMTI1ZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtbGVmdCwKLnN2Zy1pbmxpbmUtLWZhIC5mYS1wdWxsLXN0YXJ0IHsKICBmbG9hdDogaW5saW5lLXN0YXJ0OwogIG1hcmdpbi1pbmxpbmUtZW5kOiB2YXIoLS1mYS1wdWxsLW1hcmdpbiwgMC4zZW0pOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1wdWxsLXJpZ2h0LAouc3ZnLWlubGluZS0tZmEgLmZhLXB1bGwtZW5kIHsKICBmbG9hdDogaW5saW5lLWVuZDsKICBtYXJnaW4taW5saW5lLXN0YXJ0OiB2YXIoLS1mYS1wdWxsLW1hcmdpbiwgMC4zZW0pOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1saSB7CiAgd2lkdGg6IHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pOwogIGluc2V0LWlubGluZS1zdGFydDogY2FsYygtMSAqIHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pKTsKICBpbnNldC1ibG9jay1zdGFydDogMC4yNWVtOyAvKiBzeW5jaW5nIHZlcnRpY2FsIGFsaWdubWVudCB3aXRoIFdlYiBGb250IHJlbmRlcmluZyAqLwp9CgouZmEtbGF5ZXJzLWNvdW50ZXIsIC5mYS1sYXllcnMtdGV4dCB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5mYS1sYXllcnMgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBoZWlnaHQ6IDFlbTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgsIDEuMjVlbSk7Cn0KLmZhLWxheWVycyAuc3ZnLWlubGluZS0tZmEgewogIGluc2V0OiAwOwogIG1hcmdpbjogYXV0bzsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKfQoKLmZhLWxheWVycy10ZXh0IHsKICBsZWZ0OiA1MCU7CiAgdG9wOiA1MCU7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKfQoKLmZhLWxheWVycy1jb3VudGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1mYS1jb3VudGVyLWJhY2tncm91bmQtY29sb3IsICNmZjI1M2EpOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWZhLWNvdW50ZXItYm9yZGVyLXJhZGl1cywgMWVtKTsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIGNvbG9yOiB2YXIoLS1mYS1pbnZlcnNlLCAjZmZmKTsKICBsaW5lLWhlaWdodDogdmFyKC0tZmEtY291bnRlci1saW5lLWhlaWdodCwgMSk7CiAgbWF4LXdpZHRoOiB2YXIoLS1mYS1jb3VudGVyLW1heC13aWR0aCwgNWVtKTsKICBtaW4td2lkdGg6IHZhcigtLWZhLWNvdW50ZXItbWluLXdpZHRoLCAxLjVlbSk7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBwYWRkaW5nOiB2YXIoLS1mYS1jb3VudGVyLXBhZGRpbmcsIDAuMjVlbSAwLjVlbSk7CiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICB0b3A6IHZhcigtLWZhLXRvcCwgMCk7CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1jb3VudGVyLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0Owp9CgouZmEtbGF5ZXJzLWJvdHRvbS1yaWdodCB7CiAgYm90dG9tOiB2YXIoLS1mYS1ib3R0b20sIDApOwogIHJpZ2h0OiB2YXIoLS1mYS1yaWdodCwgMCk7CiAgdG9wOiBhdXRvOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIHJpZ2h0Owp9CgouZmEtbGF5ZXJzLWJvdHRvbS1sZWZ0IHsKICBib3R0b206IHZhcigtLWZhLWJvdHRvbSwgMCk7CiAgbGVmdDogdmFyKC0tZmEtbGVmdCwgMCk7CiAgcmlnaHQ6IGF1dG87CiAgdG9wOiBhdXRvOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIGxlZnQ7Cn0KCi5mYS1sYXllcnMtdG9wLXJpZ2h0IHsKICB0b3A6IHZhcigtLWZhLXRvcCwgMCk7CiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpOwogIHRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDsKfQoKLmZhLWxheWVycy10b3AtbGVmdCB7CiAgbGVmdDogdmFyKC0tZmEtbGVmdCwgMCk7CiAgcmlnaHQ6IGF1dG87CiAgdG9wOiB2YXIoLS1mYS10b3AsIDApOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGxlZnQ7Cn0KCi5mYS0xeCB7CiAgZm9udC1zaXplOiAxZW07Cn0KCi5mYS0yeCB7CiAgZm9udC1zaXplOiAyZW07Cn0KCi5mYS0zeCB7CiAgZm9udC1zaXplOiAzZW07Cn0KCi5mYS00eCB7CiAgZm9udC1zaXplOiA0ZW07Cn0KCi5mYS01eCB7CiAgZm9udC1zaXplOiA1ZW07Cn0KCi5mYS02eCB7CiAgZm9udC1zaXplOiA2ZW07Cn0KCi5mYS03eCB7CiAgZm9udC1zaXplOiA3ZW07Cn0KCi5mYS04eCB7CiAgZm9udC1zaXplOiA4ZW07Cn0KCi5mYS05eCB7CiAgZm9udC1zaXplOiA5ZW07Cn0KCi5mYS0xMHggewogIGZvbnQtc2l6ZTogMTBlbTsKfQoKLmZhLTJ4cyB7CiAgZm9udC1zaXplOiBjYWxjKDEwIC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDEwcHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMTAgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDEwIC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLXhzIHsKICBmb250LXNpemU6IGNhbGMoMTIgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMTJweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAxMiAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMTIgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEtc20gewogIGZvbnQtc2l6ZTogY2FsYygxNCAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAxNHB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDE0ICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAxNCAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS1sZyB7CiAgZm9udC1zaXplOiBjYWxjKDIwIC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDIwcHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMjAgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDIwIC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLXhsIHsKICBmb250LXNpemU6IGNhbGMoMjQgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMjRweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAyNCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMjQgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEtMnhsIHsKICBmb250LXNpemU6IGNhbGMoMzIgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMzJweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAzMiAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMzIgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEtd2lkdGgtYXV0byB7CiAgLS1mYS13aWR0aDogYXV0bzsKfQoKLmZhLWZ3LAouZmEtd2lkdGgtZml4ZWQgewogIC0tZmEtd2lkdGg6IDEuMjVlbTsKfQoKLmZhLXVsIHsKICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0tZmEtbGktbWFyZ2luLCAyLjVlbSk7CiAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDA7Cn0KLmZhLXVsID4gbGkgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmZhLWxpIHsKICBpbnNldC1pbmxpbmUtc3RhcnQ6IGNhbGMoLTEgKiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKSk7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB3aWR0aDogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSk7CiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7Cn0KCi8qIEhlYWRzIFVwOiBCb3JkZXJlZCBJY29ucyB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgaW4gdGhlIGZ1dHVyZSEKICAtIFRoaXMgZmVhdHVyZSB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZSBvZiBGb250IEF3ZXNvbWUgKHY4KSEKICAtIFlvdSBtYXkgY29udGludWUgdG8gdXNlIGl0IGluIHRoaXMgdmVyc2lvbiAqdjcpLCBidXQgaXQgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGluIEZvbnQgQXdlc29tZSB2OC4KKi8KLyogTm90ZXM6CiogLS1Ae3YuJGNzcy1wcmVmaXh9LWJvcmRlci13aWR0aCA9IDEvMTYgYnkgZGVmYXVsdCAodG8gcmVuZGVyIGFzIH4xcHggYmFzZWQgb24gYSAxNnB4IGRlZmF1bHQgZm9udC1zaXplKQoqIC0tQHt2LiRjc3MtcHJlZml4fS1ib3JkZXItcGFkZGluZyA9CiAgKiogMy8xNiBmb3IgdmVydGljYWwgcGFkZGluZyAodG8gZ2l2ZSB+MnB4IG9mIHZlcnRpY2FsIHdoaXRlc3BhY2UgYXJvdW5kIGFuIGljb24gY29uc2lkZXJpbmcgaXQncyB2ZXJ0aWNhbCBhbGlnbm1lbnQpCiAgKiogNC8xNiBmb3IgaG9yaXpvbnRhbCBwYWRkaW5nICh0byBnaXZlIH40cHggb2YgaG9yaXpvbnRhbCB3aGl0ZXNwYWNlIGFyb3VuZCBhbiBpY29uKQoqLwouZmEtYm9yZGVyIHsKICBib3JkZXItY29sb3I6IHZhcigtLWZhLWJvcmRlci1jb2xvciwgI2VlZSk7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZmEtYm9yZGVyLXJhZGl1cywgMC4xZW0pOwogIGJvcmRlci1zdHlsZTogdmFyKC0tZmEtYm9yZGVyLXN0eWxlLCBzb2xpZCk7CiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1mYS1ib3JkZXItd2lkdGgsIDAuMDYyNWVtKTsKICBib3gtc2l6aW5nOiB2YXIoLS1mYS1ib3JkZXItYm94LXNpemluZywgY29udGVudC1ib3gpOwogIHBhZGRpbmc6IHZhcigtLWZhLWJvcmRlci1wYWRkaW5nLCAwLjE4NzVlbSAwLjI1ZW0pOwp9CgouZmEtcHVsbC1sZWZ0LAouZmEtcHVsbC1zdGFydCB7CiAgZmxvYXQ6IGlubGluZS1zdGFydDsKICBtYXJnaW4taW5saW5lLWVuZDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTsKfQoKLmZhLXB1bGwtcmlnaHQsCi5mYS1wdWxsLWVuZCB7CiAgZmxvYXQ6IGlubGluZS1lbmQ7CiAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTsKfQoKLmZhLWJlYXQgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1iZWF0OwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7Cn0KCi5mYS1ib3VuY2UgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1ib3VuY2U7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjI4LCAwLjg0LCAwLjQyLCAxKSk7Cn0KCi5mYS1mYWRlIHsKICBhbmltYXRpb24tbmFtZTogZmEtZmFkZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSk7Cn0KCi5mYS1iZWF0LWZhZGUgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1iZWF0LWZhZGU7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSkpOwp9CgouZmEtZmxpcCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWZsaXA7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTsKfQoKLmZhLXNoYWtlIHsKICBhbmltYXRpb24tbmFtZTogZmEtc2hha2U7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1zcGluIHsKICBhbmltYXRpb24tbmFtZTogZmEtc3BpbjsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDJzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTsKfQoKLmZhLXNwaW4tcmV2ZXJzZSB7CiAgLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uOiByZXZlcnNlOwp9CgouZmEtcHVsc2UsCi5mYS1zcGluLXB1bHNlIHsKICBhbmltYXRpb24tbmFtZTogZmEtc3BpbjsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIHN0ZXBzKDgpKTsKfQoKQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHsKICAuZmEtYmVhdCwKICAuZmEtYm91bmNlLAogIC5mYS1mYWRlLAogIC5mYS1iZWF0LWZhZGUsCiAgLmZhLWZsaXAsCiAgLmZhLXB1bHNlLAogIC5mYS1zaGFrZSwKICAuZmEtc3BpbiwKICAuZmEtc3Bpbi1wdWxzZSB7CiAgICBhbmltYXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KQGtleWZyYW1lcyBmYS1iZWF0IHsKICAwJSwgOTAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgfQogIDQ1JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtc2NhbGUsIDEuMjUpKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1ib3VuY2UgewogIDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTsKICB9CiAgMTAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXgsIDEuMSksIHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS15LCAwLjkpKSB0cmFuc2xhdGVZKDApOwogIH0KICAzMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtanVtcC1zY2FsZS14LCAwLjkpLCB2YXIoLS1mYS1ib3VuY2UtanVtcC1zY2FsZS15LCAxLjEpKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1oZWlnaHQsIC0wLjVlbSkpOwogIH0KICA1MCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS14LCAxLjA1KSwgdmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteSwgMC45NSkpIHRyYW5zbGF0ZVkoMCk7CiAgfQogIDU3JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkodmFyKC0tZmEtYm91bmNlLXJlYm91bmQsIC0wLjEyNWVtKSk7CiAgfQogIDY0JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWZhZGUgewogIDUwJSB7CiAgICBvcGFjaXR5OiB2YXIoLS1mYS1mYWRlLW9wYWNpdHksIDAuNCk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtYmVhdC1mYWRlIHsKICAwJSwgMTAwJSB7CiAgICBvcGFjaXR5OiB2YXIoLS1mYS1iZWF0LWZhZGUtb3BhY2l0eSwgMC40KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgfQogIDUwJSB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMTI1KSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtZmxpcCB7CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgdmFyKC0tZmEtZmxpcC1hbmdsZSwgLTE4MGRlZykpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLXNoYWtlIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTVkZWcpOwogIH0KICA0JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNWRlZyk7CiAgfQogIDglLCAyNCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoLTE4ZGVnKTsKICB9CiAgMTIlLCAyOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMThkZWcpOwogIH0KICAxNiUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoLTIyZGVnKTsKICB9CiAgMjAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDIyZGVnKTsKICB9CiAgMzIlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMmRlZyk7CiAgfQogIDM2JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMmRlZyk7CiAgfQogIDQwJSwgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zcGluIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQouZmEtcm90YXRlLTkwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cn0KCi5mYS1yb3RhdGUtMTgwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwp9CgouZmEtcm90YXRlLTI3MCB7CiAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsKfQoKLmZhLWZsaXAtaG9yaXpvbnRhbCB7CiAgdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7Cn0KCi5mYS1mbGlwLXZlcnRpY2FsIHsKICB0cmFuc2Zvcm06IHNjYWxlKDEsIC0xKTsKfQoKLmZhLWZsaXAtYm90aCwKLmZhLWZsaXAtaG9yaXpvbnRhbC5mYS1mbGlwLXZlcnRpY2FsIHsKICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAtMSk7Cn0KCi5mYS1yb3RhdGUtYnkgewogIHRyYW5zZm9ybTogcm90YXRlKHZhcigtLWZhLXJvdGF0ZS1hbmdsZSwgMCkpOwp9Cgouc3ZnLWlubGluZS0tZmEgLmZhLXByaW1hcnkgewogIGZpbGw6IHZhcigtLWZhLXByaW1hcnktY29sb3IsIGN1cnJlbnRDb2xvcik7CiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTsKfQoKLnN2Zy1pbmxpbmUtLWZhIC5mYS1zZWNvbmRhcnkgewogIGZpbGw6IHZhcigtLWZhLXNlY29uZGFyeS1jb2xvciwgY3VycmVudENvbG9yKTsKICBvcGFjaXR5OiB2YXIoLS1mYS1zZWNvbmRhcnktb3BhY2l0eSwgMC40KTsKfQoKLnN2Zy1pbmxpbmUtLWZhLmZhLXN3YXAtb3BhY2l0eSAuZmEtcHJpbWFyeSB7CiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7Cn0KCi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXNlY29uZGFyeSB7CiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTsKfQoKLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXByaW1hcnksCi5zdmctaW5saW5lLS1mYSBtYXNrIC5mYS1zZWNvbmRhcnkgewogIGZpbGw6IGJsYWNrOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtaW52ZXJzZSB7CiAgZmlsbDogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7Cn0KCi5mYS1zdGFjayB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGhlaWdodDogMmVtOwogIGxpbmUtaGVpZ2h0OiAyZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgd2lkdGg6IDIuNWVtOwp9CgouZmEtaW52ZXJzZSB7CiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtc3RhY2stMXggewogIC0tZmEtd2lkdGg6IDEuMjVlbTsKICBoZWlnaHQ6IDFlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgpOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0yeCB7CiAgLS1mYS13aWR0aDogMi41ZW07CiAgaGVpZ2h0OiAyZW07CiAgd2lkdGg6IHZhcigtLWZhLXdpZHRoKTsKfQoKLmZhLXN0YWNrLTF4LAouZmEtc3RhY2stMnggewogIGluc2V0OiAwOwogIG1hcmdpbjogYXV0bzsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogdmFyKC0tZmEtc3RhY2stei1pbmRleCwgYXV0byk7Cn1gOwogICAgX2Nzc0luc2VydGVkID0gZmFsc2U7CiAgICBJbmplY3RDU1MgPSB7CiAgICAgIG1peG91dDogZnVuY3Rpb24gbWl4b3V0KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBkb206IHsKICAgICAgICAgICAgY3NzLAogICAgICAgICAgICBpbnNlcnRDc3M6IGVuc3VyZUNzcwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIGhvb2tzOiBmdW5jdGlvbiBob29rcygpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uOiBmdW5jdGlvbiBiZWZvcmVET01FbGVtZW50Q3JlYXRpb24oKSB7CiAgICAgICAgICAgIGVuc3VyZUNzcygpOwogICAgICAgICAgfSwKICAgICAgICAgIGJlZm9yZUkyc3ZnOiBmdW5jdGlvbiBiZWZvcmVJMnN2ZygpIHsKICAgICAgICAgICAgZW5zdXJlQ3NzKCk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIHckMiA9IFdJTkRPVyB8fCB7fTsKICAgIGlmICghdyQyW05BTUVTUEFDRV9JREVOVElGSUVSXSkgdyQyW05BTUVTUEFDRV9JREVOVElGSUVSXSA9IHt9OwogICAgaWYgKCF3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdLnN0eWxlcykgdyQyW05BTUVTUEFDRV9JREVOVElGSUVSXS5zdHlsZXMgPSB7fTsKICAgIGlmICghdyQyW05BTUVTUEFDRV9JREVOVElGSUVSXS5ob29rcykgdyQyW05BTUVTUEFDRV9JREVOVElGSUVSXS5ob29rcyA9IHt9OwogICAgaWYgKCF3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdLnNoaW1zKSB3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdLnNoaW1zID0gW107CiAgICBuYW1lc3BhY2UgPSB3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdOwogICAgZnVuY3Rpb25zID0gW107CiAgICBfbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcigpIHsKICAgICAgRE9DVU1FTlQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIF9saXN0ZW5lcik7CiAgICAgIGxvYWRlZCA9IDE7CiAgICAgIGZ1bmN0aW9ucy5tYXAoZnVuY3Rpb24oZm4pIHsKICAgICAgICByZXR1cm4gZm4oKTsKICAgICAgfSk7CiAgICB9OwogICAgbG9hZGVkID0gZmFsc2U7CiAgICBpZiAoSVNfRE9NKSB7CiAgICAgIGxvYWRlZCA9IChET0NVTUVOVC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgPyAvXmxvYWRlZHxeYy8gOiAvXmxvYWRlZHxeaXxeYy8pLnRlc3QoRE9DVU1FTlQucmVhZHlTdGF0ZSk7CiAgICAgIGlmICghbG9hZGVkKSBET0NVTUVOVC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgX2xpc3RlbmVyKTsKICAgIH0KICAgIGJpbmRJbnRlcm5hbDQgPSBmdW5jdGlvbiBiaW5kSW50ZXJuYWw0MihmdW5jLCB0aGlzQ29udGV4dCkgewogICAgICByZXR1cm4gZnVuY3Rpb24oYTUsIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQ29udGV4dCwgYTUsIGI1LCBjMTEsIGQ2KTsKICAgICAgfTsKICAgIH07CiAgICByZWR1Y2UzID0gZnVuY3Rpb24gZmFzdFJlZHVjZU9iamVjdChzdWJqZWN0LCBmbiwgaW5pdGlhbFZhbHVlLCB0aGlzQ29udGV4dCkgewogICAgICB2YXIga2V5czIgPSBPYmplY3Qua2V5cyhzdWJqZWN0KSwgbGVuZ3RoID0ga2V5czIubGVuZ3RoLCBpdGVyYXRvcjIgPSB0aGlzQ29udGV4dCAhPT0gdm9pZCAwID8gYmluZEludGVybmFsNChmbiwgdGhpc0NvbnRleHQpIDogZm4sIGkxMSwga2V5MiwgcmVzdWx0OwogICAgICBpZiAoaW5pdGlhbFZhbHVlID09PSB2b2lkIDApIHsKICAgICAgICBpMTEgPSAxOwogICAgICAgIHJlc3VsdCA9IHN1YmplY3Rba2V5czJbMF1dOwogICAgICB9IGVsc2UgewogICAgICAgIGkxMSA9IDA7CiAgICAgICAgcmVzdWx0ID0gaW5pdGlhbFZhbHVlOwogICAgICB9CiAgICAgIGZvciAoOyBpMTEgPCBsZW5ndGg7IGkxMSsrKSB7CiAgICAgICAga2V5MiA9IGtleXMyW2kxMV07CiAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3IyKHJlc3VsdCwgc3ViamVjdFtrZXkyXSwga2V5Miwgc3ViamVjdCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07CiAgICBNT05PID0gMTsKICAgIERVTyA9IDI7CiAgICBtb2Rlcm5NYXRjaGVzID0gW1tEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBvcGFjaXR5PSIoW14iXSopIi4qZD0iKFteIl0qKSIuKnBhdGguKmQ9IihbXiJdKikiLywgewogICAgICBkMjogMiwKICAgICAgZDE6IDMKICAgIH0pXSwgW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIG9wYWNpdHk9IihbXiJdKikiLipkPSIoW14iXSopIi8sIHsKICAgICAgZDI6IDIKICAgIH0pXSwgW01PTk8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBmaWxsPSJjdXJyZW50Q29sb3IiLipkPSIoW14iXSspIi8sIHsKICAgICAgZDE6IDEKICAgIH0pXV07CiAgICBsZWdhY3lNYXRjaGVzID0gW1tEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBjbGFzcz0iKFteIl0qc2Vjb25kYXJ5W14iXSopIi4qZD0iKFteIl0rKSIuKnBhdGggY2xhc3M9IihbXiJdKnByaW1hcnlbXiJdKikiLipkPSIoW14iXSspIi8sIHsKICAgICAgYXR0cjI6IDEsCiAgICAgIGQyOiAyLAogICAgICBhdHRyMTogMywKICAgICAgZDE6IDQKICAgIH0pXSwgW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGNsYXNzPSIoW14iXSpwcmltYXJ5W14iXSopIi4qZD0iKFteIl0rKSIuKnBhdGggY2xhc3M9IihbXiJdKnNlY29uZGFyeVteIl0qKSIuKmQ9IihbXiJdKykiLywgewogICAgICBhdHRyMTogMSwKICAgICAgZDE6IDIsCiAgICAgIGF0dHIyOiAzLAogICAgICBkMjogNAogICAgfSldLCBbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggY2xhc3M9IihbXiJdKnByaW1hcnlbXiJdKikiLipkPSIoW14iXSspIi8sIHsKICAgICAgYXR0cjE6IDEsCiAgICAgIGQxOiAyCiAgICB9KV0sIFtEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBjbGFzcz0iKFteIl0qc2Vjb25kYXJ5W14iXSopIi4qZD0iKFteIl0rKSIvLCB7CiAgICAgIGF0dHIyOiAxLAogICAgICBkMjogMgogICAgfSldLCBbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggZD0iKFteIl0rKSIuKmNsYXNzPSIoW14iXSpzZWNvbmRhcnlbXiJdKikiLipwYXRoIGQ9IihbXiJdKykiLipjbGFzcz0iKFteIl0qcHJpbWFyeVteIl0qKSIvLCB7CiAgICAgIGQyOiAxLAogICAgICBhdHRyMjogMiwKICAgICAgZDE6IDMsCiAgICAgIGF0dHIxOiA0CiAgICB9KV0sIFtEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBkPSIoW14iXSspIi4qY2xhc3M9IihbXiJdKnByaW1hcnlbXiJdKikiLipwYXRoIGQ9IihbXiJdKykiLipjbGFzcz0iKFteIl0qc2Vjb25kYXJ5W14iXSopIi8sIHsKICAgICAgZDE6IDEsCiAgICAgIGF0dHIxOiAyLAogICAgICBkMjogMywKICAgICAgYXR0cjI6IDQKICAgIH0pXSwgW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGQ9IihbXiJdKykiLipjbGFzcz0iKFteIl0qcHJpbWFyeVteIl0qKSIvLCB7CiAgICAgIGQxOiAxLAogICAgICBhdHRyMTogMgogICAgfSldLCBbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggZD0iKFteIl0rKSIuKmNsYXNzPSIoW14iXSpzZWNvbmRhcnlbXiJdKikiLywgewogICAgICBkMjogMSwKICAgICAgYXR0cjI6IDIKICAgIH0pXSwgW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGQ9IihbXiJdKykiLipwYXRoIGQ9IihbXiJdKykiLywgewogICAgICBkMTogMSwKICAgICAgZDI6IDIKICAgIH0pXSwgW01PTk8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBkPSIoW14iXSspIi8sIHsKICAgICAgZDE6IDEKICAgIH0pXSwgW01PTk8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBzdHlsZT0iKFteIl0rKSIuKmQ9IihbXiJdKykiLywgewogICAgICBhdHRyMTogMSwKICAgICAgZDE6IDIKICAgIH0pXV07CiAgICBzdHlsZXMyID0gbmFtZXNwYWNlLnN0eWxlcywgc2hpbXMgPSBuYW1lc3BhY2Uuc2hpbXM7CiAgICBGQU1JTFlfTkFNRVMgPSBPYmplY3Qua2V5cyhQUkVGSVhfVE9fTE9OR19TVFlMRSk7CiAgICBQUkVGSVhFU19GT1JfRkFNSUxZID0gRkFNSUxZX05BTUVTLnJlZHVjZShmdW5jdGlvbihhY2MsIGZhbWlseUlkKSB7CiAgICAgIGFjY1tmYW1pbHlJZF0gPSBPYmplY3Qua2V5cyhQUkVGSVhfVE9fTE9OR19TVFlMRVtmYW1pbHlJZF0pOwogICAgICByZXR1cm4gYWNjOwogICAgfSwge30pOwogICAgX2RlZmF1bHRVc2FibGVQcmVmaXggPSBudWxsOwogICAgX2J5VW5pY29kZSA9IHt9OwogICAgX2J5TGlnYXR1cmUgPSB7fTsKICAgIF9ieU9sZE5hbWUgPSB7fTsKICAgIF9ieU9sZFVuaWNvZGUgPSB7fTsKICAgIF9ieUFsaWFzID0ge307CiAgICBidWlsZCA9IGZ1bmN0aW9uIGJ1aWxkMigpIHsKICAgICAgdmFyIGxvb2t1cCA9IGZ1bmN0aW9uIGxvb2t1cDIocmVkdWNlcikgewogICAgICAgIHJldHVybiByZWR1Y2UzKHN0eWxlczIsIGZ1bmN0aW9uKG8kJDEsIHN0eWxlLCBwcmVmaXg0KSB7CiAgICAgICAgICBvJCQxW3ByZWZpeDRdID0gcmVkdWNlMyhzdHlsZSwgcmVkdWNlciwge30pOwogICAgICAgICAgcmV0dXJuIG8kJDE7CiAgICAgICAgfSwge30pOwogICAgICB9OwogICAgICBfYnlVbmljb2RlID0gbG9va3VwKGZ1bmN0aW9uKGFjYywgaWNvbjMsIGljb25OYW1lKSB7CiAgICAgICAgaWYgKGljb24zWzNdKSB7CiAgICAgICAgICBhY2NbaWNvbjNbM11dID0gaWNvbk5hbWU7CiAgICAgICAgfQogICAgICAgIGlmIChpY29uM1syXSkgewogICAgICAgICAgdmFyIGFsaWFzZXMgPSBpY29uM1syXS5maWx0ZXIoZnVuY3Rpb24oYSQkMSkgewogICAgICAgICAgICByZXR1cm4gdHlwZW9mIGEkJDEgPT09ICJudW1iZXIiOwogICAgICAgICAgfSk7CiAgICAgICAgICBhbGlhc2VzLmZvckVhY2goZnVuY3Rpb24oYWxpYXMpIHsKICAgICAgICAgICAgYWNjW2FsaWFzLnRvU3RyaW5nKDE2KV0gPSBpY29uTmFtZTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWNjOwogICAgICB9KTsKICAgICAgX2J5TGlnYXR1cmUgPSBsb29rdXAoZnVuY3Rpb24oYWNjLCBpY29uMywgaWNvbk5hbWUpIHsKICAgICAgICBhY2NbaWNvbk5hbWVdID0gaWNvbk5hbWU7CiAgICAgICAgaWYgKGljb24zWzJdKSB7CiAgICAgICAgICB2YXIgYWxpYXNlcyA9IGljb24zWzJdLmZpbHRlcihmdW5jdGlvbihhJCQxKSB7CiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSQkMSA9PT0gInN0cmluZyI7CiAgICAgICAgICB9KTsKICAgICAgICAgIGFsaWFzZXMuZm9yRWFjaChmdW5jdGlvbihhbGlhcykgewogICAgICAgICAgICBhY2NbYWxpYXNdID0gaWNvbk5hbWU7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgfSk7CiAgICAgIF9ieUFsaWFzID0gbG9va3VwKGZ1bmN0aW9uKGFjYywgaWNvbjMsIGljb25OYW1lKSB7CiAgICAgICAgdmFyIGFsaWFzZXMgPSBpY29uM1syXTsKICAgICAgICBhY2NbaWNvbk5hbWVdID0gaWNvbk5hbWU7CiAgICAgICAgYWxpYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGFsaWFzKSB7CiAgICAgICAgICBhY2NbYWxpYXNdID0gaWNvbk5hbWU7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgfSk7CiAgICAgIHZhciBoYXNSZWd1bGFyID0gImZhciIgaW4gc3R5bGVzMiB8fCBjb25maWcyLmF1dG9GZXRjaFN2ZzsKICAgICAgdmFyIHNoaW1Mb29rdXBzID0gcmVkdWNlMyhzaGltcywgZnVuY3Rpb24oYWNjLCBzaGltKSB7CiAgICAgICAgdmFyIG1heWJlTmFtZU1heWJlVW5pY29kZSA9IHNoaW1bMF07CiAgICAgICAgdmFyIHByZWZpeDQgPSBzaGltWzFdOwogICAgICAgIHZhciBpY29uTmFtZSA9IHNoaW1bMl07CiAgICAgICAgaWYgKHByZWZpeDQgPT09ICJmYXIiICYmICFoYXNSZWd1bGFyKSB7CiAgICAgICAgICBwcmVmaXg0ID0gImZhcyI7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgbWF5YmVOYW1lTWF5YmVVbmljb2RlID09PSAic3RyaW5nIikgewogICAgICAgICAgYWNjLm5hbWVzW21heWJlTmFtZU1heWJlVW5pY29kZV0gPSB7CiAgICAgICAgICAgIHByZWZpeDogcHJlZml4NCwKICAgICAgICAgICAgaWNvbk5hbWUKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgbWF5YmVOYW1lTWF5YmVVbmljb2RlID09PSAibnVtYmVyIikgewogICAgICAgICAgYWNjLnVuaWNvZGVzW21heWJlTmFtZU1heWJlVW5pY29kZS50b1N0cmluZygxNildID0gewogICAgICAgICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgICAgICAgIGljb25OYW1lCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWNjOwogICAgICB9LCB7CiAgICAgICAgbmFtZXM6IHt9LAogICAgICAgIHVuaWNvZGVzOiB7fQogICAgICB9KTsKICAgICAgX2J5T2xkTmFtZSA9IHNoaW1Mb29rdXBzLm5hbWVzOwogICAgICBfYnlPbGRVbmljb2RlID0gc2hpbUxvb2t1cHMudW5pY29kZXM7CiAgICAgIF9kZWZhdWx0VXNhYmxlUHJlZml4ID0gZ2V0Q2Fub25pY2FsUHJlZml4KGNvbmZpZzIuc3R5bGVEZWZhdWx0LCB7CiAgICAgICAgZmFtaWx5OiBjb25maWcyLmZhbWlseURlZmF1bHQKICAgICAgfSk7CiAgICB9OwogICAgb25DaGFuZ2UoZnVuY3Rpb24oYyQkMSkgewogICAgICBfZGVmYXVsdFVzYWJsZVByZWZpeCA9IGdldENhbm9uaWNhbFByZWZpeChjJCQxLnN0eWxlRGVmYXVsdCwgewogICAgICAgIGZhbWlseTogY29uZmlnMi5mYW1pbHlEZWZhdWx0CiAgICAgIH0pOwogICAgfSk7CiAgICBidWlsZCgpOwogICAgZW1wdHlDYW5vbmljYWxJY29uID0gZnVuY3Rpb24gZW1wdHlDYW5vbmljYWxJY29uMigpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBwcmVmaXg6IG51bGwsCiAgICAgICAgaWNvbk5hbWU6IG51bGwsCiAgICAgICAgcmVzdDogW10KICAgICAgfTsKICAgIH07CiAgICBfZmFDb21iaW5lZENsYXNzZXMgPSBadCQxLmNvbmNhdChZdCk7CiAgICBuZXdDYW5vbmljYWxGYW1pbGllcyA9IHJ0LmZpbHRlcihmdW5jdGlvbihmYW1pbHlJZCkgewogICAgICByZXR1cm4gZmFtaWx5SWQgIT09IGkxMCB8fCBmYW1pbHlJZCAhPT0gdDg7CiAgICB9KTsKICAgIG5ld0Nhbm9uaWNhbFN0eWxlcyA9IE9iamVjdC5rZXlzKEh0JDEpLmZpbHRlcihmdW5jdGlvbihrZXkyKSB7CiAgICAgIHJldHVybiBrZXkyICE9PSBpMTA7CiAgICB9KS5tYXAoZnVuY3Rpb24oa2V5MikgewogICAgICByZXR1cm4gT2JqZWN0LmtleXMoSHQkMVtrZXkyXSk7CiAgICB9KS5mbGF0KCk7CiAgICBMaWJyYXJ5ID0gLyogQF9fUFVSRV9fICovIChmdW5jdGlvbigpIHsKICAgICAgZnVuY3Rpb24gTGlicmFyeTIoKSB7CiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExpYnJhcnkyKTsKICAgICAgICB0aGlzLmRlZmluaXRpb25zID0ge307CiAgICAgIH0KICAgICAgcmV0dXJuIF9jcmVhdGVDbGFzcyhMaWJyYXJ5MiwgW3sKICAgICAgICBrZXk6ICJhZGQiLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhZGQzKCkgewogICAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBkZWZpbml0aW9ucyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKICAgICAgICAgICAgZGVmaW5pdGlvbnNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgYWRkaXRpb25zID0gZGVmaW5pdGlvbnMucmVkdWNlKHRoaXMuX3B1bGxEZWZpbml0aW9ucywge30pOwogICAgICAgICAgT2JqZWN0LmtleXMoYWRkaXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGtleTIpIHsKICAgICAgICAgICAgX3RoaXMuZGVmaW5pdGlvbnNba2V5Ml0gPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgX3RoaXMuZGVmaW5pdGlvbnNba2V5Ml0gfHwge30pLCBhZGRpdGlvbnNba2V5Ml0pOwogICAgICAgICAgICBkZWZpbmVJY29ucyhrZXkyLCBhZGRpdGlvbnNba2V5Ml0pOwogICAgICAgICAgICB2YXIgbG9uZ1ByZWZpeCA9IFBSRUZJWF9UT19MT05HX1NUWUxFW2kxMF1ba2V5Ml07CiAgICAgICAgICAgIGlmIChsb25nUHJlZml4KSBkZWZpbmVJY29ucyhsb25nUHJlZml4LCBhZGRpdGlvbnNba2V5Ml0pOwogICAgICAgICAgICBidWlsZCgpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAga2V5OiAicmVzZXQiLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHsKICAgICAgICAgIHRoaXMuZGVmaW5pdGlvbnMgPSB7fTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJfcHVsbERlZmluaXRpb25zIiwKICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3B1bGxEZWZpbml0aW9ucyhhZGRpdGlvbnMsIGRlZmluaXRpb24zKSB7CiAgICAgICAgICB2YXIgbm9ybWFsaXplZCA9IGRlZmluaXRpb24zLnByZWZpeCAmJiBkZWZpbml0aW9uMy5pY29uTmFtZSAmJiBkZWZpbml0aW9uMy5pY29uID8gewogICAgICAgICAgICAwOiBkZWZpbml0aW9uMwogICAgICAgICAgfSA6IGRlZmluaXRpb24zOwogICAgICAgICAgT2JqZWN0LmtleXMobm9ybWFsaXplZCkubWFwKGZ1bmN0aW9uKGtleTIpIHsKICAgICAgICAgICAgdmFyIF9ub3JtYWxpemVkJGtleSA9IG5vcm1hbGl6ZWRba2V5Ml0sIHByZWZpeDQgPSBfbm9ybWFsaXplZCRrZXkucHJlZml4LCBpY29uTmFtZSA9IF9ub3JtYWxpemVkJGtleS5pY29uTmFtZSwgaWNvbjMgPSBfbm9ybWFsaXplZCRrZXkuaWNvbjsKICAgICAgICAgICAgdmFyIGFsaWFzZXMgPSBpY29uM1syXTsKICAgICAgICAgICAgaWYgKCFhZGRpdGlvbnNbcHJlZml4NF0pIGFkZGl0aW9uc1twcmVmaXg0XSA9IHt9OwogICAgICAgICAgICBpZiAoYWxpYXNlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgYWxpYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGFsaWFzKSB7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFsaWFzID09PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgICBhZGRpdGlvbnNbcHJlZml4NF1bYWxpYXNdID0gaWNvbjM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYWRkaXRpb25zW3ByZWZpeDRdW2ljb25OYW1lXSA9IGljb24zOwogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gYWRkaXRpb25zOwogICAgICAgIH0KICAgICAgfV0pOwogICAgfSkoKTsKICAgIF9wbHVnaW5zID0gW107CiAgICBfaG9va3MgPSB7fTsKICAgIHByb3ZpZGVycyA9IHt9OwogICAgZGVmYXVsdFByb3ZpZGVyS2V5cyA9IE9iamVjdC5rZXlzKHByb3ZpZGVycyk7CiAgICBsaWJyYXJ5ID0gbmV3IExpYnJhcnkoKTsKICAgIG5vQXV0byA9IGZ1bmN0aW9uIG5vQXV0bzIoKSB7CiAgICAgIGNvbmZpZzIuYXV0b1JlcGxhY2VTdmcgPSBmYWxzZTsKICAgICAgY29uZmlnMi5vYnNlcnZlTXV0YXRpb25zID0gZmFsc2U7CiAgICAgIGNhbGxIb29rcygibm9BdXRvIik7CiAgICB9OwogICAgZG9tID0gewogICAgICBpMnN2ZzogZnVuY3Rpb24gaTJzdmcoKSB7CiAgICAgICAgdmFyIHBhcmFtczIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1swXSA6IHt9OwogICAgICAgIGlmIChJU19ET00pIHsKICAgICAgICAgIGNhbGxIb29rcygiYmVmb3JlSTJzdmciLCBwYXJhbXMyKTsKICAgICAgICAgIGNhbGxQcm92aWRlZCgicHNldWRvRWxlbWVudHMyc3ZnIiwgcGFyYW1zMik7CiAgICAgICAgICByZXR1cm4gY2FsbFByb3ZpZGVkKCJpMnN2ZyIsIHBhcmFtczIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJPcGVyYXRpb24gcmVxdWlyZXMgYSBET00gb2Ygc29tZSBraW5kLiIpKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHdhdGNoOiBmdW5jdGlvbiB3YXRjaCgpIHsKICAgICAgICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDoge307CiAgICAgICAgdmFyIGF1dG9SZXBsYWNlU3ZnUm9vdCA9IHBhcmFtczIuYXV0b1JlcGxhY2VTdmdSb290OwogICAgICAgIGlmIChjb25maWcyLmF1dG9SZXBsYWNlU3ZnID09PSBmYWxzZSkgewogICAgICAgICAgY29uZmlnMi5hdXRvUmVwbGFjZVN2ZyA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGNvbmZpZzIub2JzZXJ2ZU11dGF0aW9ucyA9IHRydWU7CiAgICAgICAgZG9tcmVhZHkoZnVuY3Rpb24oKSB7CiAgICAgICAgICBhdXRvUmVwbGFjZSh7CiAgICAgICAgICAgIGF1dG9SZXBsYWNlU3ZnUm9vdAogICAgICAgICAgfSk7CiAgICAgICAgICBjYWxsSG9va3MoIndhdGNoIiwgcGFyYW1zMik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBwYXJzZTcgPSB7CiAgICAgIGljb246IGZ1bmN0aW9uIGljb24oX2ljb24pIHsKICAgICAgICBpZiAoX2ljb24gPT09IG51bGwpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoX3R5cGVvZihfaWNvbikgPT09ICJvYmplY3QiICYmIF9pY29uLnByZWZpeCAmJiBfaWNvbi5pY29uTmFtZSkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcHJlZml4OiBfaWNvbi5wcmVmaXgsCiAgICAgICAgICAgIGljb25OYW1lOiBieUFsaWFzKF9pY29uLnByZWZpeCwgX2ljb24uaWNvbk5hbWUpIHx8IF9pY29uLmljb25OYW1lCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfaWNvbikgJiYgX2ljb24ubGVuZ3RoID09PSAyKSB7CiAgICAgICAgICB2YXIgaWNvbk5hbWUgPSBfaWNvblsxXS5pbmRleE9mKCJmYS0iKSA9PT0gMCA/IF9pY29uWzFdLnNsaWNlKDMpIDogX2ljb25bMV07CiAgICAgICAgICB2YXIgcHJlZml4NCA9IGdldENhbm9uaWNhbFByZWZpeChfaWNvblswXSk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgICAgICAgIGljb25OYW1lOiBieUFsaWFzKHByZWZpeDQsIGljb25OYW1lKSB8fCBpY29uTmFtZQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBfaWNvbiA9PT0gInN0cmluZyIgJiYgKF9pY29uLmluZGV4T2YoIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLSIpKSA+IC0xIHx8IF9pY29uLm1hdGNoKElDT05fU0VMRUNUSU9OX1NZTlRBWF9QQVRURVJOKSkpIHsKICAgICAgICAgIHZhciBjYW5vbmljYWxJY29uID0gZ2V0Q2Fub25pY2FsSWNvbihfaWNvbi5zcGxpdCgiICIpLCB7CiAgICAgICAgICAgIHNraXBMb29rdXBzOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHByZWZpeDogY2Fub25pY2FsSWNvbi5wcmVmaXggfHwgZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpLAogICAgICAgICAgICBpY29uTmFtZTogYnlBbGlhcyhjYW5vbmljYWxJY29uLnByZWZpeCwgY2Fub25pY2FsSWNvbi5pY29uTmFtZSkgfHwgY2Fub25pY2FsSWNvbi5pY29uTmFtZQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBfaWNvbiA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIHZhciBfcHJlZml4ID0gZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcHJlZml4OiBfcHJlZml4LAogICAgICAgICAgICBpY29uTmFtZTogYnlBbGlhcyhfcHJlZml4LCBfaWNvbikgfHwgX2ljb24KICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgYXBpID0gewogICAgICBub0F1dG8sCiAgICAgIGNvbmZpZzogY29uZmlnMiwKICAgICAgZG9tLAogICAgICBwYXJzZTogcGFyc2U3LAogICAgICBsaWJyYXJ5LAogICAgICBmaW5kSWNvbkRlZmluaXRpb24sCiAgICAgIHRvSHRtbDogdG9IdG1sMgogICAgfTsKICAgIGF1dG9SZXBsYWNlID0gZnVuY3Rpb24gYXV0b1JlcGxhY2UyKCkgewogICAgICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDoge307CiAgICAgIHZhciBfcGFyYW1zJGF1dG9SZXBsYWNlU3YgPSBwYXJhbXMyLmF1dG9SZXBsYWNlU3ZnUm9vdCwgYXV0b1JlcGxhY2VTdmdSb290ID0gX3BhcmFtcyRhdXRvUmVwbGFjZVN2ID09PSB2b2lkIDAgPyBET0NVTUVOVCA6IF9wYXJhbXMkYXV0b1JlcGxhY2VTdjsKICAgICAgaWYgKChPYmplY3Qua2V5cyhuYW1lc3BhY2Uuc3R5bGVzKS5sZW5ndGggPiAwIHx8IGNvbmZpZzIuYXV0b0ZldGNoU3ZnKSAmJiBJU19ET00gJiYgY29uZmlnMi5hdXRvUmVwbGFjZVN2ZykgYXBpLmRvbS5pMnN2Zyh7CiAgICAgICAgbm9kZTogYXV0b1JlcGxhY2VTdmdSb290CiAgICAgIH0pOwogICAgfTsKICAgIHN0eWxlcyQxID0gbmFtZXNwYWNlLnN0eWxlczsKICAgIG1pc3NpbmdJY29uUmVzb2x1dGlvbk1peGluID0gewogICAgICBmb3VuZDogZmFsc2UsCiAgICAgIHdpZHRoOiA1MTIsCiAgICAgIGhlaWdodDogNTEyCiAgICB9OwogICAgbm9vcCQxID0gZnVuY3Rpb24gbm9vcDQoKSB7CiAgICB9OwogICAgcCQyID0gY29uZmlnMi5tZWFzdXJlUGVyZm9ybWFuY2UgJiYgUEVSRk9STUFOQ0UgJiYgUEVSRk9STUFOQ0UubWFyayAmJiBQRVJGT1JNQU5DRS5tZWFzdXJlID8gUEVSRk9STUFOQ0UgOiB7CiAgICAgIG1hcms6IG5vb3AkMSwKICAgICAgbWVhc3VyZTogbm9vcCQxCiAgICB9OwogICAgcHJlYW1ibGUgPSAnRkEgIjcuMS4wIic7CiAgICBiZWdpbiA9IGZ1bmN0aW9uIGJlZ2luMihuYW1lKSB7CiAgICAgIHAkMi5tYXJrKCIiLmNvbmNhdChwcmVhbWJsZSwgIiAiKS5jb25jYXQobmFtZSwgIiBiZWdpbnMiKSk7CiAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gZW5kKG5hbWUpOwogICAgICB9OwogICAgfTsKICAgIGVuZCA9IGZ1bmN0aW9uIGVuZDIobmFtZSkgewogICAgICBwJDIubWFyaygiIi5jb25jYXQocHJlYW1ibGUsICIgIikuY29uY2F0KG5hbWUsICIgZW5kcyIpKTsKICAgICAgcCQyLm1lYXN1cmUoIiIuY29uY2F0KHByZWFtYmxlLCAiICIpLmNvbmNhdChuYW1lKSwgIiIuY29uY2F0KHByZWFtYmxlLCAiICIpLmNvbmNhdChuYW1lLCAiIGJlZ2lucyIpLCAiIi5jb25jYXQocHJlYW1ibGUsICIgIikuY29uY2F0KG5hbWUsICIgZW5kcyIpKTsKICAgIH07CiAgICBwZXJmID0gewogICAgICBiZWdpbiwKICAgICAgZW5kCiAgICB9OwogICAgbm9vcCQyID0gZnVuY3Rpb24gbm9vcDUoKSB7CiAgICB9OwogICAgbXV0YXRvcnMgPSB7CiAgICAgIHJlcGxhY2U6IGZ1bmN0aW9uIHJlcGxhY2UzKG11dGF0aW9uKSB7CiAgICAgICAgdmFyIG5vZGUyID0gbXV0YXRpb25bMF07CiAgICAgICAgaWYgKG5vZGUyLnBhcmVudE5vZGUpIHsKICAgICAgICAgIG11dGF0aW9uWzFdLmZvckVhY2goZnVuY3Rpb24oYWJzdHJhY3QpIHsKICAgICAgICAgICAgbm9kZTIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY29udmVydFNWRyhhYnN0cmFjdCksIG5vZGUyKTsKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKG5vZGUyLmdldEF0dHJpYnV0ZShEQVRBX0ZBX0kyU1ZHKSA9PT0gbnVsbCAmJiBjb25maWcyLmtlZXBPcmlnaW5hbFNvdXJjZSkgewogICAgICAgICAgICB2YXIgY29tbWVudDMgPSBET0NVTUVOVC5jcmVhdGVDb21tZW50KG5vZGVBc0NvbW1lbnQobm9kZTIpKTsKICAgICAgICAgICAgbm9kZTIucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoY29tbWVudDMsIG5vZGUyKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5vZGUyLnJlbW92ZSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgbmVzdDogZnVuY3Rpb24gbmVzdChtdXRhdGlvbikgewogICAgICAgIHZhciBub2RlMiA9IG11dGF0aW9uWzBdOwogICAgICAgIHZhciBhYnN0cmFjdCA9IG11dGF0aW9uWzFdOwogICAgICAgIGlmICh+Y2xhc3NBcnJheShub2RlMikuaW5kZXhPZihjb25maWcyLnJlcGxhY2VtZW50Q2xhc3MpKSB7CiAgICAgICAgICByZXR1cm4gbXV0YXRvcnMucmVwbGFjZShtdXRhdGlvbik7CiAgICAgICAgfQogICAgICAgIHZhciBmb3JTdmcgPSBuZXcgUmVnRXhwKCIiLmNvbmNhdChjb25maWcyLmNzc1ByZWZpeCwgIi0uKiIpKTsKICAgICAgICBkZWxldGUgYWJzdHJhY3RbMF0uYXR0cmlidXRlcy5pZDsKICAgICAgICBpZiAoYWJzdHJhY3RbMF0uYXR0cmlidXRlcy5jbGFzcykgewogICAgICAgICAgdmFyIHNwbGl0Q2xhc3NlcyA9IGFic3RyYWN0WzBdLmF0dHJpYnV0ZXMuY2xhc3Muc3BsaXQoIiAiKS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBjbHMpIHsKICAgICAgICAgICAgaWYgKGNscyA9PT0gY29uZmlnMi5yZXBsYWNlbWVudENsYXNzIHx8IGNscy5tYXRjaChmb3JTdmcpKSB7CiAgICAgICAgICAgICAgYWNjLnRvU3ZnLnB1c2goY2xzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBhY2MudG9Ob2RlLnB1c2goY2xzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gYWNjOwogICAgICAgICAgfSwgewogICAgICAgICAgICB0b05vZGU6IFtdLAogICAgICAgICAgICB0b1N2ZzogW10KICAgICAgICAgIH0pOwogICAgICAgICAgYWJzdHJhY3RbMF0uYXR0cmlidXRlcy5jbGFzcyA9IHNwbGl0Q2xhc3Nlcy50b1N2Zy5qb2luKCIgIik7CiAgICAgICAgICBpZiAoc3BsaXRDbGFzc2VzLnRvTm9kZS5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgbm9kZTIucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbm9kZTIuc2V0QXR0cmlidXRlKCJjbGFzcyIsIHNwbGl0Q2xhc3Nlcy50b05vZGUuam9pbigiICIpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIG5ld0lubmVySFRNTCA9IGFic3RyYWN0Lm1hcChmdW5jdGlvbihhNSkgewogICAgICAgICAgcmV0dXJuIHRvSHRtbDIoYTUpOwogICAgICAgIH0pLmpvaW4oIlxuIik7CiAgICAgICAgbm9kZTIuc2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcsICIiKTsKICAgICAgICBub2RlMi5pbm5lckhUTUwgPSBuZXdJbm5lckhUTUw7CiAgICAgIH0KICAgIH07CiAgICBkaXNhYmxlZCA9IGZhbHNlOwogICAgbW8gPSBudWxsOwogICAgc3R5bGVzJDIgPSBuYW1lc3BhY2Uuc3R5bGVzOwogICAgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyMihpY29uRGVmaW5pdGlvbikgewogICAgICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge307CiAgICAgIHZhciBfcGFyYW1zJHRyYW5zZm9ybSA9IHBhcmFtczIudHJhbnNmb3JtLCB0cmFuc2Zvcm0yID0gX3BhcmFtcyR0cmFuc2Zvcm0gPT09IHZvaWQgMCA/IG1lYW5pbmdsZXNzVHJhbnNmb3JtIDogX3BhcmFtcyR0cmFuc2Zvcm0sIF9wYXJhbXMkc3ltYm9sID0gcGFyYW1zMi5zeW1ib2wsIHN5bWJvbCA9IF9wYXJhbXMkc3ltYm9sID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wYXJhbXMkc3ltYm9sLCBfcGFyYW1zJG1hc2sgPSBwYXJhbXMyLm1hc2ssIG1hc2sgPSBfcGFyYW1zJG1hc2sgPT09IHZvaWQgMCA/IG51bGwgOiBfcGFyYW1zJG1hc2ssIF9wYXJhbXMkbWFza0lkID0gcGFyYW1zMi5tYXNrSWQsIG1hc2tJZCA9IF9wYXJhbXMkbWFza0lkID09PSB2b2lkIDAgPyBudWxsIDogX3BhcmFtcyRtYXNrSWQsIF9wYXJhbXMkY2xhc3NlcyA9IHBhcmFtczIuY2xhc3NlcywgY2xhc3NlcyA9IF9wYXJhbXMkY2xhc3NlcyA9PT0gdm9pZCAwID8gW10gOiBfcGFyYW1zJGNsYXNzZXMsIF9wYXJhbXMkYXR0cmlidXRlcyA9IHBhcmFtczIuYXR0cmlidXRlcywgYXR0cmlidXRlcyA9IF9wYXJhbXMkYXR0cmlidXRlcyA9PT0gdm9pZCAwID8ge30gOiBfcGFyYW1zJGF0dHJpYnV0ZXMsIF9wYXJhbXMkc3R5bGVzID0gcGFyYW1zMi5zdHlsZXMsIHN0eWxlczMgPSBfcGFyYW1zJHN0eWxlcyA9PT0gdm9pZCAwID8ge30gOiBfcGFyYW1zJHN0eWxlczsKICAgICAgaWYgKCFpY29uRGVmaW5pdGlvbikgcmV0dXJuOwogICAgICB2YXIgcHJlZml4NCA9IGljb25EZWZpbml0aW9uLnByZWZpeCwgaWNvbk5hbWUgPSBpY29uRGVmaW5pdGlvbi5pY29uTmFtZSwgaWNvbjMgPSBpY29uRGVmaW5pdGlvbi5pY29uOwogICAgICByZXR1cm4gZG9tVmFyaWFudHMoX29iamVjdFNwcmVhZDIoewogICAgICAgIHR5cGU6ICJpY29uIgogICAgICB9LCBpY29uRGVmaW5pdGlvbiksIGZ1bmN0aW9uKCkgewogICAgICAgIGNhbGxIb29rcygiYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uIiwgewogICAgICAgICAgaWNvbkRlZmluaXRpb24sCiAgICAgICAgICBwYXJhbXM6IHBhcmFtczIKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gbWFrZUlubGluZVN2Z0Fic3RyYWN0KHsKICAgICAgICAgIGljb25zOiB7CiAgICAgICAgICAgIG1haW46IGFzRm91bmRJY29uKGljb24zKSwKICAgICAgICAgICAgbWFzazogbWFzayA/IGFzRm91bmRJY29uKG1hc2suaWNvbikgOiB7CiAgICAgICAgICAgICAgZm91bmQ6IGZhbHNlLAogICAgICAgICAgICAgIHdpZHRoOiBudWxsLAogICAgICAgICAgICAgIGhlaWdodDogbnVsbCwKICAgICAgICAgICAgICBpY29uOiB7fQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgcHJlZml4OiBwcmVmaXg0LAogICAgICAgICAgaWNvbk5hbWUsCiAgICAgICAgICB0cmFuc2Zvcm06IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtZWFuaW5nbGVzc1RyYW5zZm9ybSksIHRyYW5zZm9ybTIpLAogICAgICAgICAgc3ltYm9sLAogICAgICAgICAgbWFza0lkLAogICAgICAgICAgZXh0cmE6IHsKICAgICAgICAgICAgYXR0cmlidXRlcywKICAgICAgICAgICAgc3R5bGVzOiBzdHlsZXMzLAogICAgICAgICAgICBjbGFzc2VzCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfTsKICAgIFJlcGxhY2VFbGVtZW50cyA9IHsKICAgICAgbWl4b3V0OiBmdW5jdGlvbiBtaXhvdXQyKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBpY29uOiByZXNvbHZlSWNvbnMocmVuZGVyKQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIGhvb2tzOiBmdW5jdGlvbiBob29rczIoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIG11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3M6IGZ1bmN0aW9uIG11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3MoYWNjdW11bGF0b3IpIHsKICAgICAgICAgICAgYWNjdW11bGF0b3IudHJlZUNhbGxiYWNrID0gb25UcmVlOwogICAgICAgICAgICBhY2N1bXVsYXRvci5ub2RlQ2FsbGJhY2sgPSBvbk5vZGU7CiAgICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9LAogICAgICBwcm92aWRlczogZnVuY3Rpb24gcHJvdmlkZXMocHJvdmlkZXJzJCQxKSB7CiAgICAgICAgcHJvdmlkZXJzJCQxLmkyc3ZnID0gZnVuY3Rpb24ocGFyYW1zMikgewogICAgICAgICAgdmFyIF9wYXJhbXMkbm9kZSA9IHBhcmFtczIubm9kZSwgbm9kZTIgPSBfcGFyYW1zJG5vZGUgPT09IHZvaWQgMCA/IERPQ1VNRU5UIDogX3BhcmFtcyRub2RlLCBfcGFyYW1zJGNhbGxiYWNrID0gcGFyYW1zMi5jYWxsYmFjaywgY2FsbGJhY2sgPSBfcGFyYW1zJGNhbGxiYWNrID09PSB2b2lkIDAgPyBmdW5jdGlvbigpIHsKICAgICAgICAgIH0gOiBfcGFyYW1zJGNhbGxiYWNrOwogICAgICAgICAgcmV0dXJuIG9uVHJlZShub2RlMiwgY2FsbGJhY2spOwogICAgICAgIH07CiAgICAgICAgcHJvdmlkZXJzJCQxLmdlbmVyYXRlU3ZnUmVwbGFjZW1lbnRNdXRhdGlvbiA9IGZ1bmN0aW9uKG5vZGUyLCBub2RlTWV0YSkgewogICAgICAgICAgdmFyIGljb25OYW1lID0gbm9kZU1ldGEuaWNvbk5hbWUsIHByZWZpeDQgPSBub2RlTWV0YS5wcmVmaXgsIHRyYW5zZm9ybTIgPSBub2RlTWV0YS50cmFuc2Zvcm0sIHN5bWJvbCA9IG5vZGVNZXRhLnN5bWJvbCwgbWFzayA9IG5vZGVNZXRhLm1hc2ssIG1hc2tJZCA9IG5vZGVNZXRhLm1hc2tJZCwgZXh0cmEgPSBub2RlTWV0YS5leHRyYTsKICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICAgICAgICAgIFByb21pc2UuYWxsKFtmaW5kSWNvbihpY29uTmFtZSwgcHJlZml4NCksIG1hc2suaWNvbk5hbWUgPyBmaW5kSWNvbihtYXNrLmljb25OYW1lLCBtYXNrLnByZWZpeCkgOiBQcm9taXNlLnJlc29sdmUoewogICAgICAgICAgICAgIGZvdW5kOiBmYWxzZSwKICAgICAgICAgICAgICB3aWR0aDogNTEyLAogICAgICAgICAgICAgIGhlaWdodDogNTEyLAogICAgICAgICAgICAgIGljb246IHt9CiAgICAgICAgICAgIH0pXSkudGhlbihmdW5jdGlvbihfcmVmMikgewogICAgICAgICAgICAgIHZhciBfcmVmMjIgPSBfc2xpY2VkVG9BcnJheShfcmVmMiwgMiksIG1haW4gPSBfcmVmMjJbMF0sIG1hc2syID0gX3JlZjIyWzFdOwogICAgICAgICAgICAgIHJlc29sdmUyKFtub2RlMiwgbWFrZUlubGluZVN2Z0Fic3RyYWN0KHsKICAgICAgICAgICAgICAgIGljb25zOiB7CiAgICAgICAgICAgICAgICAgIG1haW4sCiAgICAgICAgICAgICAgICAgIG1hc2s6IG1hc2syCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcHJlZml4OiBwcmVmaXg0LAogICAgICAgICAgICAgICAgaWNvbk5hbWUsCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybTIsCiAgICAgICAgICAgICAgICBzeW1ib2wsCiAgICAgICAgICAgICAgICBtYXNrSWQsCiAgICAgICAgICAgICAgICBleHRyYSwKICAgICAgICAgICAgICAgIHdhdGNoYWJsZTogdHJ1ZQogICAgICAgICAgICAgIH0pXSk7CiAgICAgICAgICAgIH0pLmNhdGNoKHJlamVjdCk7CiAgICAgICAgICB9KTsKICAgICAgICB9OwogICAgICAgIHByb3ZpZGVycyQkMS5nZW5lcmF0ZUFic3RyYWN0SWNvbiA9IGZ1bmN0aW9uKF9yZWYzKSB7CiAgICAgICAgICB2YXIgY2hpbGRyZW4yID0gX3JlZjMuY2hpbGRyZW4sIGF0dHJpYnV0ZXMgPSBfcmVmMy5hdHRyaWJ1dGVzLCBtYWluID0gX3JlZjMubWFpbiwgdHJhbnNmb3JtMiA9IF9yZWYzLnRyYW5zZm9ybSwgc3R5bGVzMyA9IF9yZWYzLnN0eWxlczsKICAgICAgICAgIHZhciBzdHlsZVN0cmluZyA9IGpvaW5TdHlsZXMoc3R5bGVzMyk7CiAgICAgICAgICBpZiAoc3R5bGVTdHJpbmcubGVuZ3RoID4gMCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzWyJzdHlsZSJdID0gc3R5bGVTdHJpbmc7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbmV4dENoaWxkOwogICAgICAgICAgaWYgKHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0yKSkgewogICAgICAgICAgICBuZXh0Q2hpbGQgPSBjYWxsUHJvdmlkZWQoImdlbmVyYXRlQWJzdHJhY3RUcmFuc2Zvcm1Hcm91cGluZyIsIHsKICAgICAgICAgICAgICBtYWluLAogICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtMiwKICAgICAgICAgICAgICBjb250YWluZXJXaWR0aDogbWFpbi53aWR0aCwKICAgICAgICAgICAgICBpY29uV2lkdGg6IG1haW4ud2lkdGgKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBjaGlsZHJlbjIucHVzaChuZXh0Q2hpbGQgfHwgbWFpbi5pY29uKTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbjIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXMKICAgICAgICAgIH07CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIExheWVycyA9IHsKICAgICAgbWl4b3V0OiBmdW5jdGlvbiBtaXhvdXQzKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBsYXllcjogZnVuY3Rpb24gbGF5ZXIyKGFzc2VtYmxlcikgewogICAgICAgICAgICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge307CiAgICAgICAgICAgIHZhciBfcGFyYW1zJGNsYXNzZXMgPSBwYXJhbXMyLmNsYXNzZXMsIGNsYXNzZXMgPSBfcGFyYW1zJGNsYXNzZXMgPT09IHZvaWQgMCA/IFtdIDogX3BhcmFtcyRjbGFzc2VzOwogICAgICAgICAgICByZXR1cm4gZG9tVmFyaWFudHMoewogICAgICAgICAgICAgIHR5cGU6ICJsYXllciIKICAgICAgICAgICAgfSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgY2FsbEhvb2tzKCJiZWZvcmVET01FbGVtZW50Q3JlYXRpb24iLCB7CiAgICAgICAgICAgICAgICBhc3NlbWJsZXIsCiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtczIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4yID0gW107CiAgICAgICAgICAgICAgYXNzZW1ibGVyKGZ1bmN0aW9uKGFyZ3MpIHsKICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzLm1hcChmdW5jdGlvbihhNSkgewogICAgICAgICAgICAgICAgICBjaGlsZHJlbjIgPSBjaGlsZHJlbjIuY29uY2F0KGE1LmFic3RyYWN0KTsKICAgICAgICAgICAgICAgIH0pIDogY2hpbGRyZW4yID0gY2hpbGRyZW4yLmNvbmNhdChhcmdzLmFic3RyYWN0KTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gW3sKICAgICAgICAgICAgICAgIHRhZzogInNwYW4iLAogICAgICAgICAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgICAgICAgICBjbGFzczogWyIiLmNvbmNhdChjb25maWcyLmNzc1ByZWZpeCwgIi1sYXllcnMiKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjbGFzc2VzKSkuam9pbigiICIpCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuMgogICAgICAgICAgICAgIH1dOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgTGF5ZXJzQ291bnRlciA9IHsKICAgICAgbWl4b3V0OiBmdW5jdGlvbiBtaXhvdXQ0KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBjb3VudGVyOiBmdW5jdGlvbiBjb3VudGVyMihjb250ZW50MykgewogICAgICAgICAgICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge307CiAgICAgICAgICAgIHZhciBfcGFyYW1zJHRpdGxlID0gcGFyYW1zMi50aXRsZSwgdGl0bGUgPSBfcGFyYW1zJHRpdGxlID09PSB2b2lkIDAgPyBudWxsIDogX3BhcmFtcyR0aXRsZSwgX3BhcmFtcyRjbGFzc2VzID0gcGFyYW1zMi5jbGFzc2VzLCBjbGFzc2VzID0gX3BhcmFtcyRjbGFzc2VzID09PSB2b2lkIDAgPyBbXSA6IF9wYXJhbXMkY2xhc3NlcywgX3BhcmFtcyRhdHRyaWJ1dGVzID0gcGFyYW1zMi5hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzID0gX3BhcmFtcyRhdHRyaWJ1dGVzID09PSB2b2lkIDAgPyB7fSA6IF9wYXJhbXMkYXR0cmlidXRlcywgX3BhcmFtcyRzdHlsZXMgPSBwYXJhbXMyLnN0eWxlcywgc3R5bGVzMyA9IF9wYXJhbXMkc3R5bGVzID09PSB2b2lkIDAgPyB7fSA6IF9wYXJhbXMkc3R5bGVzOwogICAgICAgICAgICByZXR1cm4gZG9tVmFyaWFudHMoewogICAgICAgICAgICAgIHR5cGU6ICJjb3VudGVyIiwKICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50MwogICAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBjYWxsSG9va3MoImJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbiIsIHsKICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMyCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMYXllcnNDb3VudGVyQWJzdHJhY3QoewogICAgICAgICAgICAgICAgY29udGVudDogY29udGVudDMudG9TdHJpbmcoKSwKICAgICAgICAgICAgICAgIHRpdGxlLAogICAgICAgICAgICAgICAgZXh0cmE6IHsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgc3R5bGVzOiBzdHlsZXMzLAogICAgICAgICAgICAgICAgICBjbGFzc2VzOiBbIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLWxheWVycy1jb3VudGVyIildLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoY2xhc3NlcykpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBMYXllcnNUZXh0ID0gewogICAgICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dDUoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uIHRleHQ5KGNvbnRlbnQzKSB7CiAgICAgICAgICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTsKICAgICAgICAgICAgdmFyIF9wYXJhbXMkdHJhbnNmb3JtID0gcGFyYW1zMi50cmFuc2Zvcm0sIHRyYW5zZm9ybTIgPSBfcGFyYW1zJHRyYW5zZm9ybSA9PT0gdm9pZCAwID8gbWVhbmluZ2xlc3NUcmFuc2Zvcm0gOiBfcGFyYW1zJHRyYW5zZm9ybSwgX3BhcmFtcyRjbGFzc2VzID0gcGFyYW1zMi5jbGFzc2VzLCBjbGFzc2VzID0gX3BhcmFtcyRjbGFzc2VzID09PSB2b2lkIDAgPyBbXSA6IF9wYXJhbXMkY2xhc3NlcywgX3BhcmFtcyRhdHRyaWJ1dGVzID0gcGFyYW1zMi5hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzID0gX3BhcmFtcyRhdHRyaWJ1dGVzID09PSB2b2lkIDAgPyB7fSA6IF9wYXJhbXMkYXR0cmlidXRlcywgX3BhcmFtcyRzdHlsZXMgPSBwYXJhbXMyLnN0eWxlcywgc3R5bGVzMyA9IF9wYXJhbXMkc3R5bGVzID09PSB2b2lkIDAgPyB7fSA6IF9wYXJhbXMkc3R5bGVzOwogICAgICAgICAgICByZXR1cm4gZG9tVmFyaWFudHMoewogICAgICAgICAgICAgIHR5cGU6ICJ0ZXh0IiwKICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50MwogICAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBjYWxsSG9va3MoImJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbiIsIHsKICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMyCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMYXllcnNUZXh0QWJzdHJhY3QoewogICAgICAgICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtZWFuaW5nbGVzc1RyYW5zZm9ybSksIHRyYW5zZm9ybTIpLAogICAgICAgICAgICAgICAgZXh0cmE6IHsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgc3R5bGVzOiBzdHlsZXMzLAogICAgICAgICAgICAgICAgICBjbGFzc2VzOiBbIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLWxheWVycy10ZXh0IildLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoY2xhc3NlcykpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIHByb3ZpZGVzOiBmdW5jdGlvbiBwcm92aWRlczIocHJvdmlkZXJzJCQxKSB7CiAgICAgICAgcHJvdmlkZXJzJCQxLmdlbmVyYXRlTGF5ZXJzVGV4dCA9IGZ1bmN0aW9uKG5vZGUyLCBub2RlTWV0YSkgewogICAgICAgICAgdmFyIHRyYW5zZm9ybTIgPSBub2RlTWV0YS50cmFuc2Zvcm0sIGV4dHJhID0gbm9kZU1ldGEuZXh0cmE7CiAgICAgICAgICB2YXIgd2lkdGggPSBudWxsOwogICAgICAgICAgdmFyIGhlaWdodCA9IG51bGw7CiAgICAgICAgICBpZiAoSVNfSUUpIHsKICAgICAgICAgICAgdmFyIGNvbXB1dGVkRm9udFNpemUgPSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKG5vZGUyKS5mb250U2l6ZSwgMTApOwogICAgICAgICAgICB2YXIgYm91bmRpbmdDbGllbnRSZWN0ID0gbm9kZTIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgIHdpZHRoID0gYm91bmRpbmdDbGllbnRSZWN0LndpZHRoIC8gY29tcHV0ZWRGb250U2l6ZTsKICAgICAgICAgICAgaGVpZ2h0ID0gYm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAvIGNvbXB1dGVkRm9udFNpemU7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtub2RlMiwgbWFrZUxheWVyc1RleHRBYnN0cmFjdCh7CiAgICAgICAgICAgIGNvbnRlbnQ6IG5vZGUyLmlubmVySFRNTCwKICAgICAgICAgICAgd2lkdGgsCiAgICAgICAgICAgIGhlaWdodCwKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0yLAogICAgICAgICAgICBleHRyYSwKICAgICAgICAgICAgd2F0Y2hhYmxlOiB0cnVlCiAgICAgICAgICB9KV0pOwogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBDTEVBTl9DT05URU5UX1BBVFRFUk4gPSBuZXcgUmVnRXhwKCciJywgInVnIik7CiAgICBTRUNPTkRBUllfVU5JQ09ERV9SQU5HRSA9IFsxMTA1OTIwLCAxMTEyMzE5XTsKICAgIF9GT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHsKICAgICAgRm9udEF3ZXNvbWU6IHsKICAgICAgICBub3JtYWw6ICJmYXMiLAogICAgICAgIDQwMDogImZhcyIKICAgICAgfQogICAgfSksIEN0KSwgcm8pLCBkbCk7CiAgICBGT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYID0gT2JqZWN0LmtleXMoX0ZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVgpLnJlZHVjZShmdW5jdGlvbihhY2MsIGtleTIpIHsKICAgICAgYWNjW2tleTIudG9Mb3dlckNhc2UoKV0gPSBfRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWFtrZXkyXTsKICAgICAgcmV0dXJuIGFjYzsKICAgIH0sIHt9KTsKICAgIEZPTlRfRkFNSUxZX1dFSUdIVF9GQUxMQkFDSyA9IE9iamVjdC5rZXlzKEZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVgpLnJlZHVjZShmdW5jdGlvbihhY2MsIGZvbnRGYW1pbHkpIHsKICAgICAgdmFyIHdlaWdodHMgPSBGT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYW2ZvbnRGYW1pbHldOwogICAgICBhY2NbZm9udEZhbWlseV0gPSB3ZWlnaHRzWzkwMF0gfHwgX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdC5lbnRyaWVzKHdlaWdodHMpKVswXVsxXTsKICAgICAgcmV0dXJuIGFjYzsKICAgIH0sIHt9KTsKICAgIGhhc1BzZXVkb0VsZW1lbnQgPSBmdW5jdGlvbiBoYXNQc2V1ZG9FbGVtZW50MihzZWxlY3RvcikgewogICAgICByZXR1cm4gISFzZWxlY3RvciAmJiBQU0VVRE9fRUxFTUVOVFMuc29tZShmdW5jdGlvbihwc2V1ZG9TZWxlY3RvcikgewogICAgICAgIHJldHVybiBzZWxlY3Rvci5pbmNsdWRlcyhwc2V1ZG9TZWxlY3Rvcik7CiAgICAgIH0pOwogICAgfTsKICAgIHBhcnNlQ1NTUnVsZUZvclBzZXVkb3MgPSBmdW5jdGlvbiBwYXJzZUNTU1J1bGVGb3JQc2V1ZG9zMihzZWxlY3RvclRleHQpIHsKICAgICAgaWYgKCFzZWxlY3RvclRleHQpIHJldHVybiBbXTsKICAgICAgdmFyIHNlbGVjdG9yU2V0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgICAgdmFyIHNlbGVjdG9ycyA9IHNlbGVjdG9yVGV4dC5zcGxpdCgvLCg/IVteKCldKlwpKS8pLm1hcChmdW5jdGlvbihzJCQxKSB7CiAgICAgICAgcmV0dXJuIHMkJDEudHJpbSgpOwogICAgICB9KTsKICAgICAgc2VsZWN0b3JzID0gc2VsZWN0b3JzLmZsYXRNYXAoZnVuY3Rpb24oc2VsZWN0b3IyKSB7CiAgICAgICAgcmV0dXJuIHNlbGVjdG9yMi5pbmNsdWRlcygiKCIpID8gc2VsZWN0b3IyIDogc2VsZWN0b3IyLnNwbGl0KCIsIikubWFwKGZ1bmN0aW9uKHMkJDEpIHsKICAgICAgICAgIHJldHVybiBzJCQxLnRyaW0oKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihzZWxlY3RvcnMpLCBfc3RlcDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOyApIHsKICAgICAgICAgIHZhciBzZWxlY3RvciA9IF9zdGVwLnZhbHVlOwogICAgICAgICAgaWYgKGhhc1BzZXVkb0VsZW1lbnQoc2VsZWN0b3IpKSB7CiAgICAgICAgICAgIHZhciBzZWxlY3RvcldpdGhvdXRQc2V1ZG8gPSBQU0VVRE9fRUxFTUVOVFMucmVkdWNlKGZ1bmN0aW9uKGFjYywgcHNldWRvU2VsZWN0b3IpIHsKICAgICAgICAgICAgICByZXR1cm4gYWNjLnJlcGxhY2UocHNldWRvU2VsZWN0b3IsICIiKTsKICAgICAgICAgICAgfSwgc2VsZWN0b3IpOwogICAgICAgICAgICBpZiAoc2VsZWN0b3JXaXRob3V0UHNldWRvICE9PSAiIiAmJiBzZWxlY3RvcldpdGhvdXRQc2V1ZG8gIT09ICIqIikgewogICAgICAgICAgICAgIHNlbGVjdG9yU2V0LmFkZChzZWxlY3RvcldpdGhvdXRQc2V1ZG8pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBfaXRlcmF0b3IuZShlcnIpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIF9pdGVyYXRvci5mKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHNlbGVjdG9yU2V0OwogICAgfTsKICAgIFBzZXVkb0VsZW1lbnRzID0gewogICAgICBob29rczogZnVuY3Rpb24gaG9va3MzKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzOiBmdW5jdGlvbiBtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzKGFjY3VtdWxhdG9yKSB7CiAgICAgICAgICAgIGFjY3VtdWxhdG9yLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sgPSBzZWFyY2hQc2V1ZG9FbGVtZW50czsKICAgICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIHByb3ZpZGVzOiBmdW5jdGlvbiBwcm92aWRlczMocHJvdmlkZXJzMikgewogICAgICAgIHByb3ZpZGVyczIucHNldWRvRWxlbWVudHMyc3ZnID0gZnVuY3Rpb24ocGFyYW1zMikgewogICAgICAgICAgdmFyIF9wYXJhbXMkbm9kZSA9IHBhcmFtczIubm9kZSwgbm9kZTIgPSBfcGFyYW1zJG5vZGUgPT09IHZvaWQgMCA/IERPQ1VNRU5UIDogX3BhcmFtcyRub2RlOwogICAgICAgICAgaWYgKGNvbmZpZzIuc2VhcmNoUHNldWRvRWxlbWVudHMpIHsKICAgICAgICAgICAgc2VhcmNoUHNldWRvRWxlbWVudHMobm9kZTIpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBfdW53YXRjaGVkID0gZmFsc2U7CiAgICBNdXRhdGlvbk9ic2VydmVyJDEgPSB7CiAgICAgIG1peG91dDogZnVuY3Rpb24gbWl4b3V0NigpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgZG9tOiB7CiAgICAgICAgICAgIHVud2F0Y2g6IGZ1bmN0aW9uIHVud2F0Y2goKSB7CiAgICAgICAgICAgICAgZGlzYWJsZU9ic2VydmF0aW9uKCk7CiAgICAgICAgICAgICAgX3Vud2F0Y2hlZCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9LAogICAgICBob29rczogZnVuY3Rpb24gaG9va3M0KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBib290c3RyYXA6IGZ1bmN0aW9uIGJvb3RzdHJhcCgpIHsKICAgICAgICAgICAgb2JzZXJ2ZShjaGFpbkhvb2tzKCJtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzIiwge30pKTsKICAgICAgICAgIH0sCiAgICAgICAgICBub0F1dG86IGZ1bmN0aW9uIG5vQXV0bzMoKSB7CiAgICAgICAgICAgIGRpc2Nvbm5lY3QoKTsKICAgICAgICAgIH0sCiAgICAgICAgICB3YXRjaDogZnVuY3Rpb24gd2F0Y2gyKHBhcmFtczIpIHsKICAgICAgICAgICAgdmFyIG9ic2VydmVNdXRhdGlvbnNSb290ID0gcGFyYW1zMi5vYnNlcnZlTXV0YXRpb25zUm9vdDsKICAgICAgICAgICAgaWYgKF91bndhdGNoZWQpIHsKICAgICAgICAgICAgICBlbmFibGVPYnNlcnZhdGlvbigpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG9ic2VydmUoY2hhaW5Ib29rcygibXV0YXRpb25PYnNlcnZlckNhbGxiYWNrcyIsIHsKICAgICAgICAgICAgICAgIG9ic2VydmVNdXRhdGlvbnNSb290CiAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIHBhcnNlVHJhbnNmb3JtU3RyaW5nID0gZnVuY3Rpb24gcGFyc2VUcmFuc2Zvcm1TdHJpbmcyKHRyYW5zZm9ybVN0cmluZykgewogICAgICB2YXIgdHJhbnNmb3JtMiA9IHsKICAgICAgICBzaXplOiAxNiwKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAsCiAgICAgICAgZmxpcFg6IGZhbHNlLAogICAgICAgIGZsaXBZOiBmYWxzZSwKICAgICAgICByb3RhdGU6IDAKICAgICAgfTsKICAgICAgcmV0dXJuIHRyYW5zZm9ybVN0cmluZy50b0xvd2VyQ2FzZSgpLnNwbGl0KCIgIikucmVkdWNlKGZ1bmN0aW9uKGFjYywgbjEzKSB7CiAgICAgICAgdmFyIHBhcnRzID0gbjEzLnRvTG93ZXJDYXNlKCkuc3BsaXQoIi0iKTsKICAgICAgICB2YXIgZmlyc3QyID0gcGFydHNbMF07CiAgICAgICAgdmFyIHJlc3QgPSBwYXJ0cy5zbGljZSgxKS5qb2luKCItIik7CiAgICAgICAgaWYgKGZpcnN0MiAmJiByZXN0ID09PSAiaCIpIHsKICAgICAgICAgIGFjYy5mbGlwWCA9IHRydWU7CiAgICAgICAgICByZXR1cm4gYWNjOwogICAgICAgIH0KICAgICAgICBpZiAoZmlyc3QyICYmIHJlc3QgPT09ICJ2IikgewogICAgICAgICAgYWNjLmZsaXBZID0gdHJ1ZTsKICAgICAgICAgIHJldHVybiBhY2M7CiAgICAgICAgfQogICAgICAgIHJlc3QgPSBwYXJzZUZsb2F0KHJlc3QpOwogICAgICAgIGlmIChpc05hTihyZXN0KSkgewogICAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgICB9CiAgICAgICAgc3dpdGNoIChmaXJzdDIpIHsKICAgICAgICAgIGNhc2UgImdyb3ciOgogICAgICAgICAgICBhY2Muc2l6ZSA9IGFjYy5zaXplICsgcmVzdDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJzaHJpbmsiOgogICAgICAgICAgICBhY2Muc2l6ZSA9IGFjYy5zaXplIC0gcmVzdDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJsZWZ0IjoKICAgICAgICAgICAgYWNjLnggPSBhY2MueCAtIHJlc3Q7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAicmlnaHQiOgogICAgICAgICAgICBhY2MueCA9IGFjYy54ICsgcmVzdDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJ1cCI6CiAgICAgICAgICAgIGFjYy55ID0gYWNjLnkgLSByZXN0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImRvd24iOgogICAgICAgICAgICBhY2MueSA9IGFjYy55ICsgcmVzdDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJyb3RhdGUiOgogICAgICAgICAgICBhY2Mucm90YXRlID0gYWNjLnJvdGF0ZSArIHJlc3Q7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWNjOwogICAgICB9LCB0cmFuc2Zvcm0yKTsKICAgIH07CiAgICBQb3dlclRyYW5zZm9ybXMgPSB7CiAgICAgIG1peG91dDogZnVuY3Rpb24gbWl4b3V0NygpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgcGFyc2U6IHsKICAgICAgICAgICAgdHJhbnNmb3JtOiBmdW5jdGlvbiB0cmFuc2Zvcm0yKHRyYW5zZm9ybVN0cmluZykgewogICAgICAgICAgICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVN0cmluZyh0cmFuc2Zvcm1TdHJpbmcpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfSwKICAgICAgaG9va3M6IGZ1bmN0aW9uIGhvb2tzNSgpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgcGFyc2VOb2RlQXR0cmlidXRlczogZnVuY3Rpb24gcGFyc2VOb2RlQXR0cmlidXRlcyhhY2N1bXVsYXRvciwgbm9kZTIpIHsKICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmluZyA9IG5vZGUyLmdldEF0dHJpYnV0ZSgiZGF0YS1mYS10cmFuc2Zvcm0iKTsKICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmluZykgewogICAgICAgICAgICAgIGFjY3VtdWxhdG9yLnRyYW5zZm9ybSA9IHBhcnNlVHJhbnNmb3JtU3RyaW5nKHRyYW5zZm9ybVN0cmluZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIHByb3ZpZGVzOiBmdW5jdGlvbiBwcm92aWRlczQocHJvdmlkZXJzMikgewogICAgICAgIHByb3ZpZGVyczIuZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nID0gZnVuY3Rpb24oX3JlZjIpIHsKICAgICAgICAgIHZhciBtYWluID0gX3JlZjIubWFpbiwgdHJhbnNmb3JtMiA9IF9yZWYyLnRyYW5zZm9ybSwgY29udGFpbmVyV2lkdGggPSBfcmVmMi5jb250YWluZXJXaWR0aCwgaWNvbldpZHRoID0gX3JlZjIuaWNvbldpZHRoOwogICAgICAgICAgdmFyIG91dGVyID0gewogICAgICAgICAgICB0cmFuc2Zvcm06ICJ0cmFuc2xhdGUoIi5jb25jYXQoY29udGFpbmVyV2lkdGggLyAyLCAiIDI1NikiKQogICAgICAgICAgfTsKICAgICAgICAgIHZhciBpbm5lclRyYW5zbGF0ZSA9ICJ0cmFuc2xhdGUoIi5jb25jYXQodHJhbnNmb3JtMi54ICogMzIsICIsICIpLmNvbmNhdCh0cmFuc2Zvcm0yLnkgKiAzMiwgIikgIik7CiAgICAgICAgICB2YXIgaW5uZXJTY2FsZSA9ICJzY2FsZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnNpemUgLyAxNiAqICh0cmFuc2Zvcm0yLmZsaXBYID8gLTEgOiAxKSwgIiwgIikuY29uY2F0KHRyYW5zZm9ybTIuc2l6ZSAvIDE2ICogKHRyYW5zZm9ybTIuZmxpcFkgPyAtMSA6IDEpLCAiKSAiKTsKICAgICAgICAgIHZhciBpbm5lclJvdGF0ZSA9ICJyb3RhdGUoIi5jb25jYXQodHJhbnNmb3JtMi5yb3RhdGUsICIgMCAwKSIpOwogICAgICAgICAgdmFyIGlubmVyID0gewogICAgICAgICAgICB0cmFuc2Zvcm06ICIiLmNvbmNhdChpbm5lclRyYW5zbGF0ZSwgIiAiKS5jb25jYXQoaW5uZXJTY2FsZSwgIiAiKS5jb25jYXQoaW5uZXJSb3RhdGUpCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIHBhdGgyID0gewogICAgICAgICAgICB0cmFuc2Zvcm06ICJ0cmFuc2xhdGUoIi5jb25jYXQoaWNvbldpZHRoIC8gMiAqIC0xLCAiIC0yNTYpIikKICAgICAgICAgIH07CiAgICAgICAgICB2YXIgb3BlcmF0aW9ucyA9IHsKICAgICAgICAgICAgb3V0ZXIsCiAgICAgICAgICAgIGlubmVyLAogICAgICAgICAgICBwYXRoOiBwYXRoMgogICAgICAgICAgfTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHRhZzogImciLAogICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMih7fSwgb3BlcmF0aW9ucy5vdXRlciksCiAgICAgICAgICAgIGNoaWxkcmVuOiBbewogICAgICAgICAgICAgIHRhZzogImciLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKHt9LCBvcGVyYXRpb25zLmlubmVyKSwKICAgICAgICAgICAgICBjaGlsZHJlbjogW3sKICAgICAgICAgICAgICAgIHRhZzogbWFpbi5pY29uLnRhZywKICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBtYWluLmljb24uY2hpbGRyZW4sCiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWFpbi5pY29uLmF0dHJpYnV0ZXMpLCBvcGVyYXRpb25zLnBhdGgpCiAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfV0KICAgICAgICAgIH07CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIEFMTF9TUEFDRSA9IHsKICAgICAgeDogMCwKICAgICAgeTogMCwKICAgICAgd2lkdGg6ICIxMDAlIiwKICAgICAgaGVpZ2h0OiAiMTAwJSIKICAgIH07CiAgICBNYXNrcyA9IHsKICAgICAgaG9va3M6IGZ1bmN0aW9uIGhvb2tzNigpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgcGFyc2VOb2RlQXR0cmlidXRlczogZnVuY3Rpb24gcGFyc2VOb2RlQXR0cmlidXRlcyhhY2N1bXVsYXRvciwgbm9kZTIpIHsKICAgICAgICAgICAgdmFyIG1hc2tEYXRhID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJkYXRhLWZhLW1hc2siKTsKICAgICAgICAgICAgdmFyIG1hc2sgPSAhbWFza0RhdGEgPyBlbXB0eUNhbm9uaWNhbEljb24oKSA6IGdldENhbm9uaWNhbEljb24obWFza0RhdGEuc3BsaXQoIiAiKS5tYXAoZnVuY3Rpb24oaTExKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGkxMS50cmltKCk7CiAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgaWYgKCFtYXNrLnByZWZpeCkgewogICAgICAgICAgICAgIG1hc2sucHJlZml4ID0gZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGFjY3VtdWxhdG9yLm1hc2sgPSBtYXNrOwogICAgICAgICAgICBhY2N1bXVsYXRvci5tYXNrSWQgPSBub2RlMi5nZXRBdHRyaWJ1dGUoImRhdGEtZmEtbWFzay1pZCIpOwogICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfSwKICAgICAgcHJvdmlkZXM6IGZ1bmN0aW9uIHByb3ZpZGVzNShwcm92aWRlcnMyKSB7CiAgICAgICAgcHJvdmlkZXJzMi5nZW5lcmF0ZUFic3RyYWN0TWFzayA9IGZ1bmN0aW9uKF9yZWYyKSB7CiAgICAgICAgICB2YXIgY2hpbGRyZW4yID0gX3JlZjIuY2hpbGRyZW4sIGF0dHJpYnV0ZXMgPSBfcmVmMi5hdHRyaWJ1dGVzLCBtYWluID0gX3JlZjIubWFpbiwgbWFzayA9IF9yZWYyLm1hc2ssIGV4cGxpY2l0TWFza0lkID0gX3JlZjIubWFza0lkLCB0cmFuc2Zvcm0yID0gX3JlZjIudHJhbnNmb3JtOwogICAgICAgICAgdmFyIG1haW5XaWR0aCA9IG1haW4ud2lkdGgsIG1haW5QYXRoID0gbWFpbi5pY29uOwogICAgICAgICAgdmFyIG1hc2tXaWR0aCA9IG1hc2sud2lkdGgsIG1hc2tQYXRoID0gbWFzay5pY29uOwogICAgICAgICAgdmFyIHRyYW5zID0gdHJhbnNmb3JtRm9yU3ZnKHsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0yLAogICAgICAgICAgICBjb250YWluZXJXaWR0aDogbWFza1dpZHRoLAogICAgICAgICAgICBpY29uV2lkdGg6IG1haW5XaWR0aAogICAgICAgICAgfSk7CiAgICAgICAgICB2YXIgbWFza1JlY3QgPSB7CiAgICAgICAgICAgIHRhZzogInJlY3QiLAogICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgQUxMX1NQQUNFKSwge30sIHsKICAgICAgICAgICAgICBmaWxsOiAid2hpdGUiCiAgICAgICAgICAgIH0pCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIG1hc2tJbm5lckdyb3VwQ2hpbGRyZW5NaXhpbiA9IG1haW5QYXRoLmNoaWxkcmVuID8gewogICAgICAgICAgICBjaGlsZHJlbjogbWFpblBhdGguY2hpbGRyZW4ubWFwKGZpbGxCbGFjaykKICAgICAgICAgIH0gOiB7fTsKICAgICAgICAgIHZhciBtYXNrSW5uZXJHcm91cCA9IHsKICAgICAgICAgICAgdGFnOiAiZyIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKHt9LCB0cmFucy5pbm5lciksCiAgICAgICAgICAgIGNoaWxkcmVuOiBbZmlsbEJsYWNrKF9vYmplY3RTcHJlYWQyKHsKICAgICAgICAgICAgICB0YWc6IG1haW5QYXRoLnRhZywKICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWFpblBhdGguYXR0cmlidXRlcyksIHRyYW5zLnBhdGgpCiAgICAgICAgICAgIH0sIG1hc2tJbm5lckdyb3VwQ2hpbGRyZW5NaXhpbikpXQogICAgICAgICAgfTsKICAgICAgICAgIHZhciBtYXNrT3V0ZXJHcm91cCA9IHsKICAgICAgICAgICAgdGFnOiAiZyIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKHt9LCB0cmFucy5vdXRlciksCiAgICAgICAgICAgIGNoaWxkcmVuOiBbbWFza0lubmVyR3JvdXBdCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIG1hc2tJZCA9ICJtYXNrLSIuY29uY2F0KGV4cGxpY2l0TWFza0lkIHx8IG5leHRVbmlxdWVJZCgpKTsKICAgICAgICAgIHZhciBjbGlwSWQgPSAiY2xpcC0iLmNvbmNhdChleHBsaWNpdE1hc2tJZCB8fCBuZXh0VW5pcXVlSWQoKSk7CiAgICAgICAgICB2YXIgbWFza1RhZyA9IHsKICAgICAgICAgICAgdGFnOiAibWFzayIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBBTExfU1BBQ0UpLCB7fSwgewogICAgICAgICAgICAgIGlkOiBtYXNrSWQsCiAgICAgICAgICAgICAgbWFza1VuaXRzOiAidXNlclNwYWNlT25Vc2UiLAogICAgICAgICAgICAgIG1hc2tDb250ZW50VW5pdHM6ICJ1c2VyU3BhY2VPblVzZSIKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIGNoaWxkcmVuOiBbbWFza1JlY3QsIG1hc2tPdXRlckdyb3VwXQogICAgICAgICAgfTsKICAgICAgICAgIHZhciBkZWZzID0gewogICAgICAgICAgICB0YWc6ICJkZWZzIiwKICAgICAgICAgICAgY2hpbGRyZW46IFt7CiAgICAgICAgICAgICAgdGFnOiAiY2xpcFBhdGgiLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICAgICAgICAgIGlkOiBjbGlwSWQKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGNoaWxkcmVuOiBkZUdyb3VwKG1hc2tQYXRoKQogICAgICAgICAgICB9LCBtYXNrVGFnXQogICAgICAgICAgfTsKICAgICAgICAgIGNoaWxkcmVuMi5wdXNoKGRlZnMsIHsKICAgICAgICAgICAgdGFnOiAicmVjdCIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKHsKICAgICAgICAgICAgICAiZmlsbCI6ICJjdXJyZW50Q29sb3IiLAogICAgICAgICAgICAgICJjbGlwLXBhdGgiOiAidXJsKCMiLmNvbmNhdChjbGlwSWQsICIpIiksCiAgICAgICAgICAgICAgIm1hc2siOiAidXJsKCMiLmNvbmNhdChtYXNrSWQsICIpIikKICAgICAgICAgICAgfSwgQUxMX1NQQUNFKQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4yLAogICAgICAgICAgICBhdHRyaWJ1dGVzCiAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBNaXNzaW5nSWNvbkluZGljYXRvciA9IHsKICAgICAgcHJvdmlkZXM6IGZ1bmN0aW9uIHByb3ZpZGVzNihwcm92aWRlcnMyKSB7CiAgICAgICAgdmFyIHJlZHVjZU1vdGlvbiA9IGZhbHNlOwogICAgICAgIGlmIChXSU5ET1cubWF0Y2hNZWRpYSkgewogICAgICAgICAgcmVkdWNlTW90aW9uID0gV0lORE9XLm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlczsKICAgICAgICB9CiAgICAgICAgcHJvdmlkZXJzMi5taXNzaW5nSWNvbkFic3RyYWN0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgZ0NoaWxkcmVuID0gW107CiAgICAgICAgICB2YXIgRklMTCA9IHsKICAgICAgICAgICAgZmlsbDogImN1cnJlbnRDb2xvciIKICAgICAgICAgIH07CiAgICAgICAgICB2YXIgQU5JTUFUSU9OX0JBU0UgPSB7CiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGU6ICJYTUwiLAogICAgICAgICAgICByZXBlYXRDb3VudDogImluZGVmaW5pdGUiLAogICAgICAgICAgICBkdXI6ICIycyIKICAgICAgICAgIH07CiAgICAgICAgICBnQ2hpbGRyZW4ucHVzaCh7CiAgICAgICAgICAgIHRhZzogInBhdGgiLAogICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgRklMTCksIHt9LCB7CiAgICAgICAgICAgICAgZDogIk0xNTYuNSw0NDcuN2wtMTIuNiwyOS41Yy0xOC43LTkuNS0zNS45LTIxLjItNTEuNS0zNC45bDIyLjctMjIuN0MxMjcuNiw0MzAuNSwxNDEuNSw0NDAsMTU2LjUsNDQ3Ljd6IE00MC42LDI3Mkg4LjUgYzEuNCwyMS4yLDUuNCw0MS43LDExLjcsNjEuMUw1MCwzMjEuMkM0NS4xLDMwNS41LDQxLjgsMjg5LDQwLjYsMjcyeiBNNDAuNiwyNDBjMS40LTE4LjgsNS4yLTM3LDExLjEtNTQuMWwtMjkuNS0xMi42IEMxNC43LDE5NC4zLDEwLDIxNi43LDguNSwyNDBINDAuNnogTTY0LjMsMTU2LjVjNy44LTE0LjksMTcuMi0yOC44LDI4LjEtNDEuNUw2OS43LDkyLjNjLTEzLjcsMTUuNi0yNS41LDMyLjgtMzQuOSw1MS41IEw2NC4zLDE1Ni41eiBNMzk3LDQxOS42Yy0xMy45LDEyLTI5LjQsMjIuMy00Ni4xLDMwLjRsMTEuOSwyOS44YzIwLjctOS45LDM5LjgtMjIuNiw1Ni45LTM3LjZMMzk3LDQxOS42eiBNMTE1LDkyLjQgYzEzLjktMTIsMjkuNC0yMi4zLDQ2LjEtMzAuNGwtMTEuOS0yOS44Yy0yMC43LDkuOS0zOS44LDIyLjYtNTYuOCwzNy42TDExNSw5Mi40eiBNNDQ3LjcsMzU1LjVjLTcuOCwxNC45LTE3LjIsMjguOC0yOC4xLDQxLjUgbDIyLjcsMjIuN2MxMy43LTE1LjYsMjUuNS0zMi45LDM0LjktNTEuNUw0NDcuNywzNTUuNXogTTQ3MS40LDI3MmMtMS40LDE4LjgtNS4yLDM3LTExLjEsNTQuMWwyOS41LDEyLjYgYzcuNS0yMS4xLDEyLjItNDMuNSwxMy42LTY2LjhINDcxLjR6IE0zMjEuMiw0NjJjLTE1LjcsNS0zMi4yLDguMi00OS4yLDkuNHYzMi4xYzIxLjItMS40LDQxLjctNS40LDYxLjEtMTEuN0wzMjEuMiw0NjJ6IE0yNDAsNDcxLjRjLTE4LjgtMS40LTM3LTUuMi01NC4xLTExLjFsLTEyLjYsMjkuNWMyMS4xLDcuNSw0My41LDEyLjIsNjYuOCwxMy42VjQ3MS40eiBNNDYyLDE5MC44YzUsMTUuNyw4LjIsMzIuMiw5LjQsNDkuMmgzMi4xIGMtMS40LTIxLjItNS40LTQxLjctMTEuNy02MS4xTDQ2MiwxOTAuOHogTTkyLjQsMzk3Yy0xMi0xMy45LTIyLjMtMjkuNC0zMC40LTQ2LjFsLTI5LjgsMTEuOWM5LjksMjAuNywyMi42LDM5LjgsMzcuNiw1Ni45IEw5Mi40LDM5N3ogTTI3Miw0MC42YzE4LjgsMS40LDM2LjksNS4yLDU0LjEsMTEuMWwxMi42LTI5LjVDMzE3LjcsMTQuNywyOTUuMywxMCwyNzIsOC41VjQwLjZ6IE0xOTAuOCw1MCBjMTUuNy01LDMyLjItOC4yLDQ5LjItOS40VjguNWMtMjEuMiwxLjQtNDEuNyw1LjQtNjEuMSwxMS43TDE5MC44LDUweiBNNDQyLjMsOTIuM0w0MTkuNiwxMTVjMTIsMTMuOSwyMi4zLDI5LjQsMzAuNSw0Ni4xIGwyOS44LTExLjlDNDcwLDEyOC41LDQ1Ny4zLDEwOS40LDQ0Mi4zLDkyLjN6IE0zOTcsOTIuNGwyMi43LTIyLjdjLTE1LjYtMTMuNy0zMi44LTI1LjUtNTEuNS0zNC45bC0xMi42LDI5LjUgQzM3MC40LDcyLjEsMzg0LjQsODEuNSwzOTcsOTIuNHoiCiAgICAgICAgICAgIH0pCiAgICAgICAgICB9KTsKICAgICAgICAgIHZhciBPUEFDSVRZX0FOSU1BVEUgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgQU5JTUFUSU9OX0JBU0UpLCB7fSwgewogICAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiAib3BhY2l0eSIKICAgICAgICAgIH0pOwogICAgICAgICAgdmFyIGRvdCA9IHsKICAgICAgICAgICAgdGFnOiAiY2lyY2xlIiwKICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIEZJTEwpLCB7fSwgewogICAgICAgICAgICAgIGN4OiAiMjU2IiwKICAgICAgICAgICAgICBjeTogIjM2NCIsCiAgICAgICAgICAgICAgcjogIjI4IgogICAgICAgICAgICB9KSwKICAgICAgICAgICAgY2hpbGRyZW46IFtdCiAgICAgICAgICB9OwogICAgICAgICAgaWYgKCFyZWR1Y2VNb3Rpb24pIHsKICAgICAgICAgICAgZG90LmNoaWxkcmVuLnB1c2goewogICAgICAgICAgICAgIHRhZzogImFuaW1hdGUiLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBBTklNQVRJT05fQkFTRSksIHt9LCB7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiAiciIsCiAgICAgICAgICAgICAgICB2YWx1ZXM6ICIyODsxNDsyODsyODsxNDsyODsiCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgIHRhZzogImFuaW1hdGUiLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBPUEFDSVRZX0FOSU1BVEUpLCB7fSwgewogICAgICAgICAgICAgICAgdmFsdWVzOiAiMTswOzE7MTswOzE7IgogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgZ0NoaWxkcmVuLnB1c2goZG90KTsKICAgICAgICAgIGdDaGlsZHJlbi5wdXNoKHsKICAgICAgICAgICAgdGFnOiAicGF0aCIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBGSUxMKSwge30sIHsKICAgICAgICAgICAgICBvcGFjaXR5OiAiMSIsCiAgICAgICAgICAgICAgZDogIk0yNjMuNywzMTJoLTE2Yy02LjYsMC0xMi01LjQtMTItMTJjMC03MSw3Ny40LTYzLjksNzcuNC0xMDcuOGMwLTIwLTE3LjgtNDAuMi01Ny40LTQwLjJjLTI5LjEsMC00NC4zLDkuNi01OS4yLDI4LjcgYy0zLjksNS0xMS4xLDYtMTYuMiwyLjRsLTEzLjEtOS4yYy01LjYtMy45LTYuOS0xMS44LTIuNi0xNy4yYzIxLjItMjcuMiw0Ni40LTQ0LjcsOTEuMi00NC43YzUyLjMsMCw5Ny40LDI5LjgsOTcuNCw4MC4yIGMwLDY3LjYtNzcuNCw2My41LTc3LjQsMTA3LjhDMjc1LjcsMzA2LjYsMjcwLjMsMzEyLDI2My43LDMxMnoiCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBjaGlsZHJlbjogcmVkdWNlTW90aW9uID8gW10gOiBbewogICAgICAgICAgICAgIHRhZzogImFuaW1hdGUiLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBPUEFDSVRZX0FOSU1BVEUpLCB7fSwgewogICAgICAgICAgICAgICAgdmFsdWVzOiAiMTswOzA7MDswOzE7IgogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgIH1dCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmICghcmVkdWNlTW90aW9uKSB7CiAgICAgICAgICAgIGdDaGlsZHJlbi5wdXNoKHsKICAgICAgICAgICAgICB0YWc6ICJwYXRoIiwKICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgRklMTCksIHt9LCB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAiMCIsCiAgICAgICAgICAgICAgICBkOiAiTTIzMi41LDEzNC41bDcsMTY4YzAuMyw2LjQsNS42LDExLjUsMTIsMTEuNWg5YzYuNCwwLDExLjctNS4xLDEyLTExLjVsNy0xNjhjMC4zLTYuOC01LjItMTIuNS0xMi0xMi41aC0yMyBDMjM3LjcsMTIyLDIzMi4yLDEyNy43LDIzMi41LDEzNC41eiIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICBjaGlsZHJlbjogW3sKICAgICAgICAgICAgICAgIHRhZzogImFuaW1hdGUiLAogICAgICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIE9QQUNJVFlfQU5JTUFURSksIHt9LCB7CiAgICAgICAgICAgICAgICAgIHZhbHVlczogIjA7MDsxOzE7MDswOyIKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0YWc6ICJnIiwKICAgICAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgICAgIGNsYXNzOiAibWlzc2luZyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY2hpbGRyZW46IGdDaGlsZHJlbgogICAgICAgICAgfTsKICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgU3ZnU3ltYm9scyA9IHsKICAgICAgaG9va3M6IGZ1bmN0aW9uIGhvb2tzNygpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgcGFyc2VOb2RlQXR0cmlidXRlczogZnVuY3Rpb24gcGFyc2VOb2RlQXR0cmlidXRlcyhhY2N1bXVsYXRvciwgbm9kZTIpIHsKICAgICAgICAgICAgdmFyIHN5bWJvbERhdGEgPSBub2RlMi5nZXRBdHRyaWJ1dGUoImRhdGEtZmEtc3ltYm9sIik7CiAgICAgICAgICAgIHZhciBzeW1ib2wgPSBzeW1ib2xEYXRhID09PSBudWxsID8gZmFsc2UgOiBzeW1ib2xEYXRhID09PSAiIiA/IHRydWUgOiBzeW1ib2xEYXRhOwogICAgICAgICAgICBhY2N1bXVsYXRvclsic3ltYm9sIl0gPSBzeW1ib2w7CiAgICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgcGx1Z2lucyA9IFtJbmplY3RDU1MsIFJlcGxhY2VFbGVtZW50cywgTGF5ZXJzLCBMYXllcnNDb3VudGVyLCBMYXllcnNUZXh0LCBQc2V1ZG9FbGVtZW50cywgTXV0YXRpb25PYnNlcnZlciQxLCBQb3dlclRyYW5zZm9ybXMsIE1hc2tzLCBNaXNzaW5nSWNvbkluZGljYXRvciwgU3ZnU3ltYm9sc107CiAgICByZWdpc3RlclBsdWdpbnMocGx1Z2lucywgewogICAgICBtaXhvdXRzVG86IGFwaQogICAgfSk7CiAgICBub0F1dG8kMSA9IGFwaS5ub0F1dG87CiAgICBjb25maWckMSA9IGFwaS5jb25maWc7CiAgICBsaWJyYXJ5JDEgPSBhcGkubGlicmFyeTsKICAgIGRvbSQxID0gYXBpLmRvbTsKICAgIHBhcnNlJDEgPSBhcGkucGFyc2U7CiAgICBmaW5kSWNvbkRlZmluaXRpb24kMSA9IGFwaS5maW5kSWNvbkRlZmluaXRpb247CiAgICB0b0h0bWwkMSA9IGFwaS50b0h0bWw7CiAgICBpY29uMiA9IGFwaS5pY29uOwogICAgbGF5ZXIgPSBhcGkubGF5ZXI7CiAgICB0ZXh0OCA9IGFwaS50ZXh0OwogICAgY291bnRlciA9IGFwaS5jb3VudGVyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGZvcnRhd2Vzb21lK2ZyZWUtYnJhbmRzLXN2Zy1pY29uc0A3LjEuMC9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZyZWUtYnJhbmRzLXN2Zy1pY29ucy9pbmRleC5tanMKdmFyIHByZWZpeCwgZmFTcXVhcmVHaXRodWIsIGZhR2l0aHViU3F1YXJlLCBmYVRoaW5rUGVha3MsIGZhR29vZ2xlRHJpdmUsIGZhQXV0b3ByZWZpeGVyLCBmYVNxdWFyZVZpYWRlbywgZmFWaWFkZW9TcXVhcmUsIGZhQ3BhbmVsLCBmYU1lbmRlbGV5LCBmYURyYWZ0MmRpZ2l0YWwsIGZhUmVwbHlkLCBmYUVtcGlyZSwgZmFBY2Nlc3NpYmxlSWNvbiwgZmFRdW9yYSwgZmFDY0pjYiwgZmFGZWRvcmEsIGZhRHVvbGluZ28sIGZhRmlyc3RkcmFmdCwgZmFGcmVlYnNkLCBmYU9keXNlZSwgZmFHZ0NpcmNsZSwgZmFDbG91ZGZsYXJlLCBmYUhhY2tlcnJhbmssIGZhU2t5YXRsYXMsIGZhRGVza3BybywgZmFSZXNvbHZpbmcsIGZhQmxhY2tiZXJyeSwgZmFTdHJpcGVTLCBmYVNxdWFyZUJlaGFuY2UsIGZhQmVoYW5jZVNxdWFyZSwgZmFTZXJ2aWNlc3RhY2ssIGZhUm9ja2V0Y2hhdCwgZmFSZWJlbCwgZmFTcXVhcmVXZWJBd2Vzb21lLCBmYUxpbmt0cmVlLCBmYVNpbXBseWJ1aWx0LCBmYVN0dWJiZXIsIGZhQXBwZXIsIGZhR29vZ2xlU2Nob2xhciwgZmFZYXJuLCBmYVN0YWNrT3ZlcmZsb3csIGZhQmx1ZXRvb3RoLCBmYUNyZWF0aXZlQ29tbW9uc05jSnAsIGZhUmVkZGl0LCBmYUNvbm5lY3RkZXZlbG9wLCBmYVJlc2VhcmNoZ2F0ZSwgZmFTaWduYWxNZXNzZW5nZXIsIGZhWGluZywgZmFTcXVhcmVKcywgZmFKc1NxdWFyZSwgZmFGb250aWNvbnMsIGZhVXBzLCBmYUFtYXpvblBheSwgZmFQYW5kb3JhLCBmYU9wZW5pZCwgZmFWc2NvLCBmYVVidW50dSwgZmFWaWFjb2luLCBmYVpoaWh1LCBmYVlhbmRleCwgZmFQaXhpdiwgZmFPcGVuYWksIGZhU2l0aCwgZmFOZmNEaXJlY3Rpb25hbCwgZmFDcmVhdGl2ZUNvbW1vbnNCeSwgZmFVbWJyYWNvLCBmYUhvb2xpLCBmYVNxdWFyZUdpdCwgZmFHaXRTcXVhcmUsIGZhT2Rub2tsYXNzbmlraSwgZmFEcnVwYWwsIGZhQmxvZ2dlckIsIGZhSW52aXNpb24sIGZhRmFjZWJvb2tGLCBmYUNlbnRvcywgZmFDY0FtYXpvblBheSwgZmFFYmF5LCBmYUNvbnRhbywgZmFFbGxvLCBmYVNpc3RyaXgsIGZhUGVyaXNjb3BlLCBmYUV4cGVkaXRlZHNzbCwgZmFOYXBzdGVyLCBmYURlbGljaW91cywgZmFHdWlsZGVkLCBmYVhib3gsIGZhVW50YXBwZCwgZmFHb29nbGVQbHVzRywgZmFHaXRodWJBbHQsIGZhR2V0UG9ja2V0LCBmYUdsaWRlLCBmYUJpdHksIGZhV3BleHBsb3JlciwgZmFNZWdhcG9ydCwgZmFNZGIsIGZhUGFnZTQsIGZhVGhlUmVkWWV0aSwgZmFKaXJhLCBmYUZlZGV4LCBmYUV2ZXJub3RlLCBmYVVzYiwgZmFBbmdyeWNyZWF0aXZlLCBmYU1penVuaSwgZmFJdGNoSW8sIGZhV2luZG93cywgZmFTdHVtYmxldXBvbiwgZmFHb29nbGUsIGZhRGlzY29yZCwgZmFIYWNrZXJOZXdzLCBmYUVsZXZlbnR5LCBmYTExdHksIGZhVGVhbXNwZWFrLCBmYVN1cHBsZSwgZmFTcXVhcmVUd2l0dGVyLCBmYVR3aXR0ZXJTcXVhcmUsIGZhRm9udEF3ZXNvbWUsIGZhRm9udEF3ZXNvbWVGbGFnLCBmYUZvbnRBd2Vzb21lTG9nb0Z1bGwsIGZhV2lyc2luZGhhbmR3ZXJrLCBmYVdzaCwgZmFDb25mbHVlbmNlLCBmYURpZ2csIGZhVGhyZWFkcywgZmFXcHJlc3NyLCBmYVJlbmRhY3QsIGZhWW9hc3QsIGZhTmltYmxyLCBmYVBpeGVsZmVkLCBmYVlhaG9vLCBmYUJsdWVza3ksIGZhU2NyaWJkLCBmYUNyZWF0aXZlQ29tbW9uc1BkLCBmYUVhcmx5YmlyZHMsIGZhU3F1YXJlT2Rub2tsYXNzbmlraSwgZmFPZG5va2xhc3NuaWtpU3F1YXJlLCBmYU1hcmtkb3duLCBmYVR5cG8zLCBmYUpvb21sYSwgZmFXZWl4aW4sIGZhR3J1bnQsIGZhUm9ja3JtcywgZmFVbnNwbGFzaCwgZmFTcXVhcmVJbnN0YWdyYW0sIGZhSW5zdGFncmFtU3F1YXJlLCBmYUZpcnN0T3JkZXJBbHQsIGZhRnVsY3J1bSwgZmFCcmF2ZVJldmVyc2UsIGZhQXZpYW5leCwgZmFOczgsIGZhU3F1YXJlUGludGVyZXN0LCBmYVBpbnRlcmVzdFNxdWFyZSwgZmFCbHVldG9vdGhCLCBmYUdyaXBmaXJlLCBmYVNxdWFyZUdvb2dsZVBsdXMsIGZhR29vZ2xlUGx1c1NxdWFyZSwgZmFBcHBTdG9yZSwgZmFXaXgsIGZhSW50ZXJjb20sIGZhUmVhY3RldXJvcGUsIGZhV2F6ZSwgZmFDcmVhdGl2ZUNvbW1vbnNSZW1peCwgZmFCYW5kY2FtcCwgZmFTcXVhcmVXZWJBd2Vzb21lU3Ryb2tlLCBmYVZpbWVvViwgZmFTdHJhdmEsIGZhVW5pcmVnaXN0cnksIGZhQ2NEaW5lcnNDbHViLCBmYVBpbnRlcmVzdCwgZmFBbGdvbGlhLCBmYVN0YWNrcGF0aCwgZmFPY3RvcHVzRGVwbG95LCBmYVlhbW1lciwgZmFNb2R4LCBmYVNxdWFyZVRocmVhZHMsIGZhT2xkUmVwdWJsaWMsIGZhU3VzZSwgZmFBcHBTdG9yZUlvcywgZmFTcXVhcmVEcmliYmJsZSwgZmFEcmliYmJsZVNxdWFyZSwgZmFVaWtpdCwgZmFTdXBlcnBvd2VycywgZmFZb3V0dWJlLCBmYUVtYmVyLCBmYUJvb3RzdHJhcCwgZmFJdHVuZXMsIGZhU3F1YXJlWGluZywgZmFYaW5nU3F1YXJlLCBmYUNzczNBbHQsIGZhU3F1YXJlc3BhY2UsIGZhVHJlbGxvLCBmYVZpYWRlbywgZmFTZWFyY2hlbmdpbiwgZmFQYXlwYWwsIGZhU3F1YXJlQmx1ZXNreSwgZmFEQW5kREJleW9uZCwgZmFNaWNyb3NvZnQsIGZhRmx5LCBmYUNjU3RyaXBlLCBmYVdvcmRwcmVzc1NpbXBsZSwgZmFTZWxsc3ksIGZhRGFzaGN1YmUsIGZhR2l0dGVyLCBmYVdvbGZQYWNrQmF0dGFsaW9uLCBmYUxhc3RmbSwgZmFTaG9wd2FyZSwgZmFCbG9nZ2VyLCBmYUVkZ2UsIGZhSW94aG9zdCwgZmFTY2hsaXgsIGZhREFuZEQsIGZhVnVlanMsIGZhTWV0YSwgZmFDcmVhdGl2ZUNvbW1vbnNTaGFyZSwgZmFTdHVkaW92aW5hcmksIGZhQml0YnVja2V0LCBmYVZrLCBmYUdpdGh1YiwgZmFDb2RpZXBpZSwgZmFQaWVkUGlwZXIsIGZhUmFzcGJlcnJ5UGksIGZhQ3NzMywgZmFIdWJzcG90LCBmYUNtcGxpZCwgZmFEeWFsb2csIGZhRWxlbWVudG9yLCBmYUZpcnN0T3JkZXIsIGZhRHJpYmJibGUsIGZhTGlua2VkaW4sIGZhQ2NQYXlwYWwsIGZhRGhsLCBmYVRleCwgZmFTaG9waWZ5LCBmYVNxdWFyZVJlZGRpdCwgZmFSZWRkaXRTcXVhcmUsIGZhQ3JlYXRpdmVDb21tb25zTmMsIGZhR2FsYWN0aWNSZXB1YmxpYywgZmFGYWNlYm9vaywgZmFHaXRsYWIsIGZhUXEsIGZhU3RyaXBlLCBmYURhaWx5bW90aW9uLCBmYVN0ZWFtLCBmYVNuYXBjaGF0LCBmYVNuYXBjaGF0R2hvc3QsIGZhR2FsYWN0aWNTZW5hdGUsIGZhUGhvZW5peEZyYW1ld29yaywgZmFHaXQsIGZhT3B0aW5Nb25zdGVyLCBmYUplbmtpbnMsIGZhU2xpZGVzaGFyZSwgZmFVYmVyLCBmYURpZ2l0YWxPY2VhbiwgZmFTb3VuZGNsb3VkLCBmYVNxdWFyZUZpZ21hLCBmYUNyZWF0aXZlQ29tbW9uc1NhLCBmYUNocm9tZSwgZmFUcmFkZUZlZGVyYXRpb24sIGZhVmFhZGluLCBmYURldmlhbnRhcnQsIGZhTWVkaXVtLCBmYU1lZGl1bU0sIGZhT3BlbmNhcnQsIGZhWUNvbWJpbmF0b3IsIGZhTGluZSwgZmFBbWlsaWEsIGZhQXN5bW1ldHJpaywgZmFQaGFicmljYXRvciwgZmFCb3RzLCBmYVZpbmUsIGZhTWVkcnQsIGZhT3NpLCBmYUdnLCBmYUJ1eXNlbGxhZHMsIGZhR29vZ2xlUGx1cywgZmFTY3JlZW5wYWwsIGZhQml0Y29pbiwgZmFTd2lmdCwgZmFGaWxlc1BpbndoZWVsLCBmYUxhcmF2ZWwsIGZhV3Bmb3JtcywgZmFTcGVha2VyRGVjaywgZmFGbGlja3IsIGZhQ2NWaXNhLCBmYVVwd29yaywgZmFLYWthb1RhbGssIGZhRmx1dHRlciwgZmFCdWZmZXIsIGZhR3JhdGlwYXksIGZhR29vZ2xlUGF5LCBmYUFwcGxlLCBmYVR1bWJsciwgZmFQaG9lbml4U3F1YWRyb24sIGZhQ2VudGVyY29kZSwgZmFEZWJpYW4sIGZhTWFzdG9kb24sIGZhU2tldGNoLCBmYVdlYkF3ZXNvbWUsIGZhU2FzcywgZmFTcXVhcmVXaGF0c2FwcCwgZmFXaGF0c2FwcFNxdWFyZSwgZmFTa3lwZSwgZmFBbmd1bGFyLCBmYU9wZW5zdXNlLCBmYURyb3Bib3gsIGZhRGVlemVyLCBmYUNyZWF0aXZlQ29tbW9uc1NhbXBsaW5nLCBmYUplZGlPcmRlciwgZmFSUHJvamVjdCwgZmFJbnN0YWxvZCwgZmFDYW5hZGlhbk1hcGxlTGVhZiwgZmFFdGhlcmV1bSwgZmFIb3V6eiwgZmFWaWJlciwgZmFLaWNrc3RhcnRlciwgZmFTcXVhcmVLaWNrc3RhcnRlciwgZmFTcG90aWZ5LCBmYUxlYW5wdWIsIGZhSmF2YSwgZmFOZmNTeW1ib2wsIGZhV29kdSwgZmFTcXVhcmVTdGVhbSwgZmFTdGVhbVNxdWFyZSwgZmFDcmVhdGl2ZUNvbW1vbnNOY0V1LCBmYU5wbSwgZmFDbG91ZHNjYWxlLCBmYVRoZW1lY28sIGZhR29vZ2xlUGxheSwgZmFLb3J2dWUsIGZhVzNjLCBmYUdyYXYsIGZhQXdzLCBmYUdsaWRlRywgZmFKc2ZpZGRsZSwgZmFLZXliYXNlLCBmYUx1bW9uRHJvcCwgZmFXZWVibHksIGZhRG9ja2VyLCBmYU1hZ2VudG8sIGZhR2l0QWx0LCBmYUZpcmVmb3hCcm93c2VyLCBmYUNsb3Vkc21pdGgsIGZhV2l6YXJkc09mVGhlQ29hc3QsIGZhQ3JlYXRpdmVDb21tb25zTmQsIGZhVXNwcywgZmFTcXVhcmVMZXR0ZXJib3hkLCBmYU1hbmRhbG9yaWFuLCBmYVNsYWNrLCBmYVNsYWNrSGFzaCwgZmFBbmdlbGxpc3QsIGZhQW5kcm9pZCwgZmFNZWV0dXAsIGZhRm9udGljb25zRmksIGZhUGFsZmVkLCBmYVdwYmVnaW5uZXIsIGZhRGlhc3BvcmEsIGZhUHJvZHVjdEh1bnQsIGZhU3F1YXJlVXB3b3JrLCBmYUN1dHRsZWZpc2gsIGZhTWVkYXBwcywgZmFQaXgsIGZhU3F1YXJlVHVtYmxyLCBmYVR1bWJsclNxdWFyZSwgZmFSZWFjdCwgZmFKeGwsIGZhU3F1YXJlTGlua2VkaW4sIGZhQ3NzLCBmYUhhc2hub2RlLCBmYVJlZGRpdEFsaWVuLCBmYVRpa3RvaywgZmFXb3JkcHJlc3MsIGZhSWRlYWwsIGZhUGllZFBpcGVyUHAsIGZhVXNzdW5uYWgsIGZhRm9ydEF3ZXNvbWVBbHQsIGZhQnVyb21vYmVsZXhwZXJ0ZSwgZmFCaWxpYmlsaSwgZmFOZW9zLCBmYURldiwgZmFIb3RqYXIsIGZhRG9jaHViLCBmYVZpbWVvLCBmYU1heGNkbiwgZmFTcXVhcmVGb250QXdlc29tZVN0cm9rZSwgZmFGb250QXdlc29tZUFsdCwgZmFTcGVha2FwLCBmYUZhbnRhc3lGbGlnaHRHYW1lcywgZmFMaW51eCwgZmFDb3R0b25CdXJlYXUsIGZhR29vZ2xlV2FsbGV0LCBmYUZvdXJzcXVhcmUsIGZhU2hpcnRzaW5idWxrLCBmYU1pbnRiaXQsIGZhU3RheWxpbmtlZCwgZmFXZWJmbG93LCBmYVJlbnJlbiwgZmFSZXYsIGZhS2V5Y2RuLCBmYUhpcmVBSGVscGVyLCBmYVNxdWFyZUhhY2tlck5ld3MsIGZhSGFja2VyTmV3c1NxdWFyZSwgZmFDcmVhdGl2ZUNvbW1vbnNQZEFsdCwgZmFPcmNpZCwgZmFCZWhhbmNlLCBmYU1vbmVybywgZmFGaWdtYSwgZmFJbnN0YWdyYW0sIGZhUGVyYnl0ZSwgZmFTcXVhcmVWaW1lbywgZmFWaW1lb1NxdWFyZSwgZmFQdXNoZWQsIGZhTWl4Y2xvdWQsIGZhWWFuZGV4SW50ZXJuYXRpb25hbCwgZmFIaXZlLCBmYUNyZWF0aXZlQ29tbW9uc1plcm8sIGZhU3F1YXJlU25hcGNoYXQsIGZhU25hcGNoYXRTcXVhcmUsIGZhVGhlbWVpc2xlLCBmYURhcnRMYW5nLCBmYURlcGxveWRvZywgZmFGbGlwYm9hcmQsIGZhQnV5TkxhcmdlLCBmYVdhdGNobWFuTW9uaXRvcmluZywgZmFIaXBzLCBmYUNsb3VkdmVyc2lmeSwgZmFHb29kcmVhZHMsIGZhVGlkYWwsIGZhVW5pdHksIGZhVGVuY2VudFdlaWJvLCBmYUZyZWVDb2RlQ2FtcCwgZmFYVHdpdHRlciwgZmFTdGlja2VyTXVsZSwgZmFUd2l0Y2gsIGZhS2lja3N0YXJ0ZXJLLCBmYUNyaXRpY2FsUm9sZSwgZmFTdGVhbVN5bWJvbCwgZmFNYWlsY2hpbXAsIGZhTHVtb24sIGZhTnV0cml0aW9uaXgsIGZhQ3JlYXRpdmVDb21tb25zU2FtcGxpbmdQbHVzLCBmYVJlZGhhdCwgZmFTcXVhcmVQaWVkUGlwZXIsIGZhUGllZFBpcGVyU3F1YXJlLCBmYVdoYXRzYXBwLCBmYUltZGIsIGZhUHl0aG9uLCBmYUNhc2hBcHAsIGZhUGludGVyZXN0UCwgZmFXaG1jcywgZmFKb2dldCwgZmFTcXVhcmVZb3V0dWJlLCBmYVlvdXR1YmVTcXVhcmUsIGZhQXRsYXNzaWFuLCBmYVBpZWRQaXBlckhhdCwgZmFJbnRlcm5ldEV4cGxvcmVyLCBmYUFpcmJuYiwgZmFKcywgZmFRdWluc2NhcGUsIGZhQWR2ZXJzYWwsIGZhQ3JlYXRpdmVDb21tb25zLCBmYU5vdGlvbiwgZmFDaHJvbWVjYXN0LCBmYVdpa2lwZWRpYVcsIGZhU2l0cm94LCBmYVNxdWFyZUdpdGxhYiwgZmFHaXRsYWJTcXVhcmUsIGZhU2hvZWxhY2UsIGZhU2VsbGNhc3QsIGZhTWl4LCBmYUNjQXBwbGVQYXksIGZhQnJhdmUsIGZhRXRzeSwgZmFCdGMsIGZhQWRuLCBmYVNxdWFyZVhUd2l0dGVyLCBmYVNxdWFyZUZvbnRBd2Vzb21lLCBmYUZvcnVtYmVlLCBmYTQyR3JvdXAsIGZhSW5ub3NvZnQsIGZhU3R1bWJsZXVwb25DaXJjbGUsIGZhU3ltZm9ueSwgZmFTYWxlc2ZvcmNlLCBmYVNvdXJjZXRyZWUsIGZhTGlua2VkaW5JbiwgZmFIdG1sNSwgZmFSdXN0LCBmYUhvcm5iaWxsLCBmYVBocCwgZmFEaXNxdXMsIGZhNTAwcHgsIGZhQWZmaWxpYXRldGhlbWUsIGZhUmVkUml2ZXIsIGZhVHdpdHRlciwgZmFGb3J0QXdlc29tZSwgZmFNaXhlciwgZmFMeWZ0LCBmYUFwcGxlUGF5LCBmYUFydHN0YXRpb24sIGZhTm9kZUpzLCBmYVVuY2hhcnRlZCwgZmFQbGF5c3RhdGlvbiwgZmFNaWNyb2Jsb2csIGZhR2l0a3Jha2VuLCBmYVRlbGVncmFtLCBmYVRlbGVncmFtUGxhbmUsIGZhSXR1bmVzTm90ZSwgZmFMZXNzLCBmYUZpcmVmb3gsIGZhS2FnZ2xlLCBmYUZhY2Vib29rTWVzc2VuZ2VyLCBmYUF1ZGlibGUsIGZhUGF0cmVvbiwgZmFWbnYsIGZhUGFnZWxpbmVzLCBmYUFtYXpvbiwgZmFFbnZpcmEsIGZhTGlub2RlLCBmYUFjY3Vzb2Z0LCBmYUVybGFuZywgZmFDY0Rpc2NvdmVyLCBmYVNhZmFyaSwgZmFTcGFjZUF3ZXNvbWUsIGZhTm9kZSwgZmFDb2RlcGVuLCBmYVJhdmVscnksIGZhQWxpcGF5LCBmYUNjQW1leCwgZmFQaWVkUGlwZXJBbHQsIGZhTGV0dGVyYm94ZCwgZmFPcGVyYSwgZmFXZWlibywgZmFSZWFkbWUsIGZhR29sYW5nLCBmYVN0YWNrRXhjaGFuZ2UsIGZhR3VscCwgZmFZZWxwLCBmYUdvZm9yZSwgZmFBdmlhdG8sIGZhUGFkbGV0LCBmYUVkZ2VMZWdhY3ksIGZhU3F1YXJlTGFzdGZtLCBmYUxhc3RmbVNxdWFyZSwgZmFHb29kcmVhZHNHLCBmYUNjTWFzdGVyY2FyZCwgZmFEaXNjb3Vyc2UsIGZhQmxhY2tUaWUsIGZhU3F1YXJlRmFjZWJvb2ssIGZhRmFjZWJvb2tTcXVhcmUsIGZhQmF0dGxlTmV0LCBmYUJpbW9iamVjdCwgaWNvbnM7CnZhciBpbml0X2ZyZWVfYnJhbmRzX3N2Z19pY29ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0Bmb3J0YXdlc29tZStmcmVlLWJyYW5kcy1zdmctaWNvbnNANy4xLjAvbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mcmVlLWJyYW5kcy1zdmctaWNvbnMvaW5kZXgubWpzIigpIHsKICAgIHByZWZpeCA9ICJmYWIiOwogICAgZmFTcXVhcmVHaXRodWIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWdpdGh1YiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJnaXRodWItc3F1YXJlIl0sICJmMDkyIiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMjY1LjggNDA3LjdjMC0xLjggMC02IC4xLTExLjYgLjEtMTEuNCAuMS0yOC44IC4xLTQzLjcgMC0xNS42LTUuMi0yNS41LTExLjMtMzAuNyAzNy00LjEgNzYtOS4yIDc2LTczLjEgMC0xOC4yLTYuNS0yNy4zLTE3LjEtMzkgMS43LTQuMyA3LjQtMjItMS43LTQ1LTEzLjktNC4zLTQ1LjcgMTcuOS00NS43IDE3LjktMjYuNi03LjUtNTYuNi03LjUtODMuMiAwIDAgMC0zMS44LTIyLjItNDUuNy0xNy45LTkuMSAyMi45LTMuNSA0MC42LTEuNyA0NS0xMC42IDExLjctMTUuNiAyMC44LTE1LjYgMzkgMCA2My42IDM3LjMgNjkgNzQuMyA3My4xLTQuOCA0LjMtOS4xIDExLjctMTAuNiAyMi4zLTkuNSA0LjMtMzMuOCAxMS43LTQ4LjMtMTMuOS05LjEtMTUuOC0yNS41LTE3LjEtMjUuNS0xNy4xLTE2LjItLjItMS4xIDEwLjItMS4xIDEwLjIgMTAuOCA1IDE4LjQgMjQuMiAxOC40IDI0LjIgOS43IDI5LjcgNTYuMSAxOS43IDU2LjEgMTkuNyAwIDkgLjEgMjEuNyAuMSAzMC42IDAgNC44IC4xIDguNiAuMSAxMCAwIDQuMy0zIDkuNS0xMS41IDgtNjYtMjIuMS0xMTIuMi04NC45LTExMi4yLTE1OC4zIDAtOTEuOCA3MC4yLTE2MS41IDE2Mi0xNjEuNVMzODggMTY1LjYgMzg4IDI1Ny40Yy4xIDczLjQtNDQuNyAxMzYuMy0xMTAuNyAxNTguMy04LjQgMS41LTExLjUtMy43LTExLjUtOHptLTkwLjUtNTQuOGMtLjItMS41IDEuMS0yLjggMy0zLjIgMS45LS4yIDMuNyAuNiAzLjkgMS45IC4zIDEuMy0xIDIuNi0zIDMtMS45IC40LTMuNy0uNC0zLjktMS43em0tOS4xIDMuMmMtMi4yIC4yLTMuNy0uOS0zLjctMi40IDAtMS4zIDEuNS0yLjQgMy41LTIuNCAxLjktLjIgMy43IC45IDMuNyAyLjQgMCAxLjMtMS41IDIuNC0zLjUgMi40em0tMTQuMy0yLjJjLTEuOS0uNC0zLjItMS45LTIuOC0zLjJzMi40LTEuOSA0LjEtMS41YzIgLjYgMy4zIDIuMSAyLjggMy40LS40IDEuMy0yLjQgMS45LTQuMSAxLjN6bS0xMi41LTcuM2MtMS41LTEuMy0xLjktMy4yLS45LTQuMSAuOS0xLjEgMi44LS45IDQuMyAuNiAxLjMgMS4zIDEuOCAzLjMgLjkgNC4xLS45IDEuMS0yLjggLjktNC4zLS42em0tOC41LTEwYy0xLjEtMS41LTEuMS0zLjIgMC0zLjkgMS4xLS45IDIuOC0uMiAzLjcgMS4zIDEuMSAxLjUgMS4xIDMuMyAwIDQuMS0uOSAuNi0yLjYgMC0zLjctMS41em0tNi4zLTguOGMtMS4xLTEuMy0xLjMtMi44LS40LTMuNSAuOS0uOSAyLjQtLjQgMy41IC42IDEuMSAxLjMgMS4zIDIuOCAuNCAzLjUtLjkgLjktMi40IC40LTMuNS0uNnptLTYtNi40Yy0xLjMtLjYtMS45LTEuNy0xLjUtMi42IC40LS42IDEuNS0uOSAyLjgtLjQgMS4zIC43IDEuOSAxLjggMS41IDIuNi0uNCAuOS0xLjcgMS4xLTIuOCAuNHoiXQogICAgfTsKICAgIGZhR2l0aHViU3F1YXJlID0gZmFTcXVhcmVHaXRodWI7CiAgICBmYVRoaW5rUGVha3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGhpbmstcGVha3MiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjczMSIsICJNNDY1LjQgNDA5LjRsODcuMS0xNTAuMi0zMi0uMy01NS4xIDk1LTIwNi4yLTM1My45LTIzNi4yIDQwNy40IDMyIC4zIDIwNC4yLTM1Mi4xIDIwNi4yIDM1My44ek0xMTAuMSAzNjUuM2wzMi4xIDAgMTE3LjQtMjAyLjUgMjAzLjQgMzQ5LjEgMzIuNSAuMS0yMzUuOC00MDQuNi0xNDkuNiAyNTcuOXoiXQogICAgfTsKICAgIGZhR29vZ2xlRHJpdmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlLWRyaXZlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzYWEiLCAiTTMzOSAzMTQuOUwxNzUuNCAzMiAzMzYuNiAzMiA1MDAuMiAzMTQuOSAzMzkgMzE0Ljl6TTIwMS41IDMzOC41bC04MC42IDE0MS41IDMxMC41IDAgODAuNi0xNDEuNS0zMTAuNSAwek0xNTQuMSA2Ny40TDAgMzM4LjUgODAuNiA0ODAgMjM3IDIwOC44IDE1NC4xIDY3LjR6Il0KICAgIH07CiAgICBmYUF1dG9wcmVmaXhlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhdXRvcHJlZml4ZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQxYyIsICJNMzE4LjQgMTZsLTE2MSA0ODAgNzcuNSAwIDI1LjQtODEuNCAxMTkuNSAwIDI1LjIgODEuNCA3Ny41IDAtMTY0LjEtNDgwek0yNzguMSAzNTcuOWw0MS4yLTEzMC40IDEuNSAwIDQwLjkgMTMwLjQtODMuNiAwek02NDAgNDA1TDYzMCAzNzMuNiA0NjIuMSAzNTggNDgxLjUgNDE0LjUgNjQwIDQwNXpNMTc3LjkgMzU4TDEwIDM3My43IDAgNDA1IDE1OC41IDQxNC40IDE3Ny45IDM1OHoiXQogICAgfTsKICAgIGZhU3F1YXJlVmlhZGVvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS12aWFkZW8iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidmlhZGVvLXNxdWFyZSJdLCAiZjJhYSIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTExOC4zIDM4MS4yYy02OC03My42LTE5LjgtMTk2LjEgODEuMi0xOTYuMSAxMy4zIDAgMjYuNiAyLjEgMzkuMSA2LjctNC4zIDguNC03LjMgMTcuNi04LjQgMjcuMS05LjctNC4xLTIwLjItNi0zMC43LTYtNDguOCAwLTg0LjYgNDEuNy04NC42IDg4LjkgMCA0MyAyOC41IDc4LjcgNjkuNSA4NS45IDYxLjUtMjQgNzIuOS0xMTcuNiA3Mi45LTE3NSAwLTcuMyAwLTE0LjgtLjYtMjIuMS0xMS4yLTMyLjktMjYuNi02NC42LTQ0LjItOTQuNSAyNy4xIDE4LjMgNDEuOSA2Mi41IDQ0LjIgOTQuMWwwIC40YzcuNyAyMi41IDExLjggNDYuMiAxMS44IDcwIDAgNTQuMS0yMS45IDk5LTY4LjMgMTI4LjJsLTIuNCAuMmM1MCAxIDg2LjItMzguNiA4Ni4yLTg3LjIgMC0xMi4yLTIuMS0yNC4zLTYuOS0zNS43IDkuNS0xLjkgMTguNS01LjYgMjYuNC0xMC41IDE1LjMgMzYuNiAxMi42IDg3LjMtMjIuOCAxMjUuNi00Mi40IDQ2LjItMTIwIDQ2LjYtMTYyLjQgMHpNMjc0LjYgMjE3LjZjMjEuOS0xMiA0OS42LTMwLjcgNjIuMy01MyAxLjUtMyA0LjEtOC42IDQuNS0xMi0xMi41IDI3LjktNDQuMiA0OS44LTczLjkgNTYuNy00LjctNy4zLTcuNS0xNS41LTcuNS0yNC4zIDAtMTAuMyA1LjItMjQuMSAxMi45LTMxLjYgOC4zLTcuOSAxOC0xMC45IDI3LjktMTQuMSAxNi01LjEgMzIuNS0xMC4zIDQ0LjUtMzUuOSAzMi41IDQ2LjIgMTMuMSAxMzAuMy0zNi4zIDEzMC4zLTEzLjMgMC0yNS4xLTcuMS0zNC40LTE2LjF6Il0KICAgIH07CiAgICBmYVZpYWRlb1NxdWFyZSA9IGZhU3F1YXJlVmlhZGVvOwogICAgZmFDcGFuZWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3BhbmVsIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzODgiLCAiTTIxMC4zIDIyMC4yYy01LjYtMjQuOC0yNi45LTQxLjItNTEtNDEuMmwtMzcgMGMtNy4xIDAtMTIuNSA0LjUtMTQuMyAxMC45TDczLjEgMzIwIDk3LjggMzE5LjljNi44IDAgMTIuMy00LjUgMTQuMi0xMC43bDI1LjgtOTUuNyAxOS44IDBjOC40IDAgMTYuMiA1LjYgMTguMyAxNC44IDIuNSAxMC45LTUuOSAyMi42LTE4LjMgMjIuNmwtMTAuMyAwYy03IDAtMTIuNSA0LjYtMTQuMyAxMC44bC02LjQgMjMuOCAzMiAwYzM3LjIgMCA1OC4zLTM2LjIgNTEuNy02NS4zem0tMTU2LjUgMjhsMTguNiAwYzYuOSAwIDEyLjQtNC40IDE0LjMtMTAuOWw2LjItMjMuNi00MCAwQzMwIDIxMy43IDkgMjI3LjggMS43IDI1NC44LTcgMjg4LjYgMTguNSAzMjAgNTIgMzIwbDEyLjQgMCA3LjEtMjYuMWMxLjItNC40LTIuMi04LjMtNi40LTguM2wtMTEuMyAwYy0yNC43IDAtMjQuOS0zNy40IDAtMzcuNHptMjQ3LjUtMzQuOGwtNzcuOSAwLTMuNSAxMy40Yy0yLjQgOS42IDQuNSAxOC41IDE0LjIgMTguNWw1Ny41IDBjNCAwIDIuNCA0LjMgMi4xIDUuM2wtOC42IDMxLjhjLS40IDEuNC0uOSA1LjMtNS41IDUuM2wtMzQuOSAwYy01LjMgMC01LjMtNy45IDAtNy45bDIxLjYgMGM2LjggMCAxMi4zLTQuNiAxNC4yLTEwLjhsMy41LTEzLjItNDguNCAwYy0zOS4yIDAtNDMuNiA2My44LS43IDYzLjhsNTcuNSAuMmMxMS4yIDAgMjAuNi03LjIgMjMuNC0xNy44bDE0LTUxLjhjNC44LTE5LjItOS43LTM2LjgtMjguNS0zNi44ek02MzMuMSAxNzlsLTE4LjkgMGMtNC45IDAtOS4yIDMuMi0xMC40IDcuOUw1NjguMiAzMjBjMjAuNyAwIDM5LjgtMTMuOCA0NC45LTM0LjVsMjYuNS05OC4yYzEuMi00LjMtMi04LjMtNi41LTguM3pNMzk2LjggMjEzLjdsMCAuMS00OC4zIDAtMjYuMiA5OGMtMS4yIDQuNCAyLjIgOC4zIDYuNCA4LjNsMTguOSAwYzQuOCAwIDkuMi0zIDEwLjQtNy44bDE3LjItNjQgMTkuOCAwYzEyLjUgMCAyMS40IDExLjggMTguMSAyMy40bC0xMC42IDQwYy0xLjIgNC4zIDEuOSA4LjMgNi40IDguM2wxOS4xIDBjNC42IDAgOS4xLTIuOSAxMC4zLTcuOGw4LjgtMzMuMWM5LTMzLjEtMTUuOS02NS40LTUwLjMtNjUuNHptOTguMyA3NC42Yy0zLjYgMC02LTMuNC01LjEtNi43bDgtMzBjLjktMy45IDMuNy02IDcuOC02bDMyLjkgMGMyLjYgMCA0LjYgMi40IDMuOSA1LjFsLS43IDIuNmMtLjYgMi0xLjkgMy0zLjkgM2wtMjEuNiAwYy03IDAtMTIuNiA0LjYtMTQuMiAxMC44bC0zLjUgMTMgNTMuNCAwYzEwLjUgMCAyMC4zLTYuNiAyMy4yLTE3LjZsMy4yLTEyYzQuOS0xOS4xLTkuMy0zNi44LTI4LjMtMzYuOGwtNDcuMyAwYy0xNy45IDAtMzMuOCAxMi0zOC42IDI5LjZsLTEwLjggNDBjLTUgMTcuNyA4LjMgMzYuNyAyOC4zIDM2LjdsNjYuNyAwYzYuOCAwIDEyLjMtNC41IDE0LjItMTAuN2w1LjctMjEtNzMuMyAweiJdCiAgICB9OwogICAgZmFNZW5kZWxleSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtZW5kZWxleSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmN2IzIiwgIk02MjQuNiAzMjUuMmMtMTIuMy0xMi40LTI5LjctMTkuMi00OC40LTE3LjItNDMuMy0xLTQ5LjctMzQuOS0zNy41LTk4LjggMjIuOC01Ny41LTE0LjktMTMxLjUtODcuNC0xMzAuOC03Ny40IC43LTgxLjcgODItMTMwLjkgODItNDguMSAwLTU0LTgxLjMtMTMwLjktODItNzIuOS0uOC0xMTAuMSA3My4zLTg3LjQgMTMwLjggMTIuMiA2My45IDUuOCA5Ny44LTM3LjUgOTguOC0yMS4yLTIuMy0zNyA2LjUtNTMgMjIuNS0xOS45IDE5LjctMTkuMyA5NC44IDQyLjYgMTAyLjYgNDcuMSA1LjkgODEuNi00Mi45IDYxLjItODcuOC00Ny4zLTEwMy43IDE4NS45LTEwNi4xIDE0Ni41LTguMi0uMSAuMS0uMiAuMi0uMyAuNC0yNi44IDQyLjggNi44IDk3LjQgNTguOCA5NS4yIDUyLjEgMi4xIDg1LjQtNTIuNiA1OC44LTk1LjItLjEtLjItLjItLjMtLjMtLjQtMzkuNC05Ny45IDE5My44LTk1LjUgMTQ2LjUgOC4yLTQuNiAxMC02LjcgMjEuMy01LjcgMzMgNC45IDUzLjQgNjguNyA3NC4xIDEwNC45IDM1LjIgMTcuOC0xNC44IDIzLjEtNjUuNiAwLTg4LjN6TTMyMC43IDMwNi4xbC0uNiAwYy00My40IDAtNjIuOC0zNy41LTYyLjgtNjIuOCAwLTM0LjcgMjguMi02Mi44IDYyLjgtNjIuOGwuNiAwYzM0LjcgMCA2Mi44IDI4LjEgNjIuOCA2Mi44IDAgMjUtMTkuMiA2Mi44LTYyLjggNjIuOHoiXQogICAgfTsKICAgIGZhRHJhZnQyZGlnaXRhbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkcmFmdDJkaWdpdGFsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzOTYiLCAiTTQ5NiAzOTguMWwtMTQ0LTgyLjIgMCA2NC43LTkxLjMgMGMzMC44LTM1IDgxLjgtOTUuOSAxMTEuOC0xNDkuMyAzNS4yLTYyLjYgMTYuMS0xMjMuNC0xMi44LTE1My4zLTQuNC00LjYtNjIuMi02Mi45LTE2Ni00MS4yLTU5LjEgMTIuNC04OS40IDQzLjQtMTA0LjMgNjcuMy0xMy4xIDIwLjktMTcgMzkuOC0xOC4yIDQ3LjctNS41IDMzIDE5LjQgNjcuMSA1Ni43IDY3LjEgMzEuNyAwIDU3LjMtMjUuNyA1Ny4zLTU3LjQgMC0yNy4xLTE5LjctNTIuMS00OC01Ni44IDEuOC03LjMgMTcuNy0yMS4xIDI2LjMtMjQuNyA0MS4xLTE3LjMgNzggNS4yIDgzLjMgMzMuNSA4LjMgNDQuMy0zNy4xIDkwLjQtNjkuNyAxMjcuNi03Ni42IDg3LTE0Mi44IDE1NS43LTE2MS4xIDE3NC44bDMzNi0uMSAwIDY0LjIgMTQ0LTgxLjl6TTM4NS45IDM3MWw0Ny4xIDI3LjItNDcuMSAyNy4yIDAtNTQuNHpNMTA1LjQgMTYxLjRhMjIuNCAyMi40IDAgMSAxIDQ0LjggMCAyMi40IDIyLjQgMCAxIDEgLTQ0LjggMHpNOTguNSAzODAuNWMyNS42LTI3LjQgOTcuNy0xMDQuNyAxNTAuOC0xNjkuOSAzNS4xLTQzLjEgNDAuMy04Mi40IDI4LjQtMTEyLjctNy40LTE4LjgtMTcuNS0zMC4yLTI0LjMtMzUuNyA0NS4zIDIuMSA2OCAyMy40IDgyLjIgMzguMyAwIDAgNDIuNCA0OC4yIDUuOCAxMTMuMy0zNyA2NS45LTExMC45IDE0Ny41LTEyOC41IDE2Ni43bC0xMTQuNCAweiJdCiAgICB9OwogICAgZmFSZXBseWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVwbHlkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZTYiLCAiTTMyMCA0ODBsLTE5MiAwQzU3LjYgNDgwIDAgNDIyLjQgMCAzNTJMMCAxNjBDMCA4OS42IDU3LjYgMzIgMTI4IDMybDE5MiAwYzcwLjQgMCAxMjggNTcuNiAxMjggMTI4bDAgMTkyYzAgNzAuNC01Ny42IDEyOC0xMjggMTI4ek0xOTMuNCAyNzMuMmMtNi4xLTItMTEuNi0zLjEtMTYuNC0zLjEtNy4yIDAtMTMuNSAxLjktMTguOSA1LjZzLTkuNiA5LTEyLjggMTUuOGwtMS4xIDAtNC4yLTE4LjMtMjggMCAwIDEzOC45IDM2LjEgMCAwLTg5LjdjMS41LTUuNCA0LjQtOS44IDguNy0xMy4yczkuOC01LjEgMTYuMi01LjFjNC42IDAgOS44IDEgMTUuNiAzLjFsNC44LTM0ek0zMDguNiAzNzYuNmMtMy4yIDIuNC03LjcgNC44LTEzLjcgNy4xcy0xMi44IDMuNS0yMC40IDMuNWMtMTIuMiAwLTIxLjEtMy0yNi41LTguOS01LjUtNS45LTguNS0xNC43LTktMjYuNGw4My4zIDBjLjktNC44IDEuNi05LjQgMi4xLTEzLjkgLjUtNC40IC43LTguNiAuNy0xMi41IDAtMTAuNy0xLjYtMTkuNy00LjctMjYuOS0zLjItNy4yLTcuMy0xMy0xMi41LTE3LjItNS4yLTQuMy0xMS4xLTcuMy0xNy44LTkuMi02LjctMS44LTEzLjUtMi44LTIwLjYtMi44LTIxLjEgMC0zNy41IDYuMS00OS4yIDE4LjNzLTE3LjUgMzAuNS0xNy41IDU1YzAgMjIuOCA1LjIgNDAuNyAxNS42IDUzLjcgMTAuNCAxMy4xIDI2LjggMTkuNiA0OS4yIDE5LjYgMTAuNyAwIDIwLjktMS41IDMwLjQtNC42czE3LjEtNi44IDIyLjYtMTEuMmwtMTItMjMuNnptLTIxLjgtNzAuM2MzLjggNS40IDUuMyAxMy4xIDQuNiAyMy4xbC01MS43IDBjLjktOS40IDMuNy0xNyA4LjItMjIuNnMxMS41LTguNSAyMS04LjVjOC4yLS4xIDE0LjEgMi42IDE3LjkgOHptNzkuOSAyLjVjNC4xIDMuOSA5LjQgNS44IDE2LjEgNS44IDcgMCAxMi42LTEuOSAxNi43LTUuOHM2LjEtOS4xIDYuMS0xNS42LTItMTEuNi02LjEtMTUuNC05LjYtNS43LTE2LjctNS43Yy02LjcgMC0xMiAxLjktMTYuMSA1LjdzLTYuMSA4LjktNi4xIDE1LjQgMiAxMS43IDYuMSAxNS42em0wIDEwMC41YzQuMSAzLjkgOS40IDUuOCAxNi4xIDUuOCA3IDAgMTIuNi0xLjkgMTYuNy01LjhzNi4xLTkuMSA2LjEtMTUuNi0yLTExLjYtNi4xLTE1LjQtOS42LTUuNy0xNi43LTUuN2MtNi43IDAtMTIgMS45LTE2LjEgNS43cy02LjEgOC45LTYuMSAxNS40YzAgNi42IDIgMTEuNyA2LjEgMTUuNnoiXQogICAgfTsKICAgIGZhRW1waXJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVtcGlyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWQxIiwgIk0yOTUuNiA1NC4yYy0xMC44LTIuMi0yMi4xLTMuMy0zMy41LTMuNmwwLTE4LjJjNzguMSAyLjIgMTQ2LjEgNDQgMTg0LjYgMTA2LjZsLTE1LjggOS4xYy02LjEtOS43LTEyLjctMTguOC0yMC4yLTI3LjFsLTE4IDE1LjVjLTI2LTI5LjYtNjEuNC01MC43LTEwMS45LTU4LjRsNC44LTIzLjl6TTYxLjQgMzIyLjRsMjMtNy43Yy02LjQtMTguMy0xMC0zOC4yLTEwLTU4LjdzMy4zLTQwLjQgOS43LTU4LjdsLTIyLjctNy43YzMuNi0xMC44IDguMy0yMS4zIDEzLjYtMzFsLTE1LjgtOS4xQzQyIDE4MSAzMi4xIDIxNy41IDMyLjEgMjU2czEwIDc1IDI3LjEgMTA2LjZMNzUgMzUzLjVjLTUuMy0xMC05LjctMjAuMy0xMy42LTMxLjF6TTIyMS4xIDQzNGMtNDAuNC04LTc1LjgtMjkuMS0xMDEuOS01OC43bC0xOCAxNS44Yy03LjUtOC42LTE0LjQtMTcuNy0yMC4yLTI3LjRsLTE2IDkuNGMzOC41IDYyLjMgMTA2LjggMTA0LjMgMTg0LjkgMTA2LjZsMC0xOC4zYy0xMS4zLS4zLTIyLjctMS43LTMzLjUtMy42bDQuNy0yMy44ek0xMDEuMyAxMjAuOWwxOCAxNS41YzI2LTI5LjYgNjEuNC01MC43IDEwMS45LTU4LjRsLTQuNy0yMy44YzEwLjgtMi4yIDIyLjEtMy4zIDMzLjUtMy42bDAtMTguMkMxNzEuOSAzNC42IDEwMy45IDc2LjQgNjUuNCAxMzlsMTUuOCA5LjFjNi05LjcgMTIuNi0xOC45IDIwLjEtMjcuMnpNNDEwLjcgMzkxLjFsLTE4LTE1LjhjLTI2IDI5LjYtNjEuNCA1MC43LTEwMS45IDU4LjdsNC43IDIzLjhjLTEwLjggMS45LTIyLjEgMy4zLTMzLjUgMy42bDAgMTguM2M3OC4xLTIuMiAxNDYuNC00NC4zIDE4NC45LTEwNi42bC0xNi4xLTkuNGMtNS43IDkuNy0xMi42IDE4LjgtMjAuMSAyNy40ek04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem00ODMuOCAwYTIzNS44IDIzNS44IDAgMSAwIC00NzEuNiAwIDIzNS44IDIzNS44IDAgMSAwIDQ3MS42IDB6bS0zOS0xMDYuNkw0MzcgMTU4LjVjNS4zIDkuNyAxMCAyMC4yIDEzLjYgMzFsLTIyLjcgNy43YzYuNCAxOC4zIDkuNyAzOC4yIDkuNyA1OC43cy0zLjYgNDAuNC0xMCA1OC43bDIzIDcuN2MtMy45IDEwLjgtOC4zIDIxLTEzLjYgMzFsMTUuOCA5LjFDNDcwIDMzMSA0NzkuOSAyOTQuNSA0NzkuOSAyNTZzLTkuOS03NS0yNy4xLTEwNi42em0tMTgzIDE3Ny43YzE2LjMtMy4zIDMwLjQtMTEuNiA0MC43LTIzLjVsNTEuMiA0NC44YzExLjktMTMuNiAyMS4zLTI5LjMgMjcuMS00Ni44bC02NC4yLTIyLjFjMi41LTcuNSAzLjktMTUuMiAzLjktMjMuNXMtMS40LTE2LjEtMy45LTIzLjVsNjQuNS0yMi4xYy02LjEtMTcuNC0xNS41LTMzLjItMjcuNC00Ni44bC01MS4yIDQ0LjhjLTEwLjItMTEuOS0yNC40LTIwLjUtNDAuNy0yMy44bDEzLjMtNjYuNGMtOC42LTEuOS0xNy43LTIuOC0yNy4xLTIuOHMtMTguNSAuOC0yNy4xIDIuOGwxMy4zIDY2LjRjLTE2LjMgMy4zLTMwLjQgMTEuOS00MC43IDIzLjhsLTUxLjItNDQuOGMtMTEuOSAxMy42LTIxLjMgMjkuMy0yNy40IDQ2LjhsNjQuNSAyMi4xYy0yLjUgNy41LTMuOSAxNS4yLTMuOSAyMy41czEuNCAxNi4xIDMuOSAyMy41bC02NC4yIDIyLjFjNS44IDE3LjQgMTUuMiAzMy4yIDI3LjEgNDYuOGw1MS4yLTQ0LjhjMTAuMiAxMS45IDI0LjQgMjAuMiA0MC43IDIzLjVsLTEzLjMgNjYuN2M4LjYgMS43IDE3LjcgMi44IDI3LjEgMi44czE4LjUtMS4xIDI3LjEtMi44bC0xMy4zLTY2Ljd6Il0KICAgIH07CiAgICBmYUFjY2Vzc2libGVJY29uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFjY2Vzc2libGUtaWNvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYyMTA3XSwgImYzNjgiLCAiTTQyMy45IDI1NS44TDQxMSA0MTMuMWMtMy4zIDQwLjctNjMuOSAzNS4xLTYwLjYtNC45bDEwLTEyMi41LTQxLjEgMi4zYzEwLjEgMjAuNyAxNS44IDQzLjkgMTUuOCA2OC41IDAgNDEuMi0xNi4xIDc4LjctNDIuMyAxMDYuNWwtMzkuMy0zOS4zYzU3LjktNjMuNyAxMy4xLTE2Ny4yLTc0LTE2Ny4yLTI1LjkgMC00OS41IDkuOS02Ny4yIDI2TDczIDI0My4yYzIyLTIwLjcgNTAuMS0zNS4xIDgxLjQtNDAuMmw3NS4zLTg1LjctNDIuNi0yNC44LTUxLjYgNDZDMTA1LjUgMTY1LjMgNjQuOSAxMjAgOTUgOTMuMWw2OC02MC43YzkuOC04LjggMjQuMS0xMC4yIDM1LjUtMy42IDAgMCAxMzkuMyA4MC45IDEzOS41IDgxLjEgMTYuMiAxMC4xIDIwLjcgMzYgNi4xIDUyLjZsLTU4LjQgNjYuNSAxMDYuMS01LjljMTguNS0xLjEgMzMuNiAxNC40IDMyLjEgMzIuN3pNMzU5IDEwMS44QTUwLjkgNTAuOSAwIDEgMCAzNTkgMCA1MC45IDUwLjkgMCAxIDAgMzU5IDEwMS44ek0xNzkuNiA0NTYuNWMtODAuNiAwLTEyNy40LTkwLjYtODIuNy0xNTYuMUw1Ny4yIDI2MC43QzM2LjQgMjg3IDI0IDMyMC4zIDI0IDM1Ni40IDI0IDQ4Ny4xIDE3NC43IDU1Ny44IDI3NS40IDQ3OC45bC0zOS43LTM5LjdjLTE2IDEwLjktMzUuMyAxNy4zLTU2LjEgMTcuM3oiXQogICAgfTsKICAgIGZhUXVvcmEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicXVvcmEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJjNCIsICJNNDQwLjcgMzg2LjdsLTI5LjMgMGMtMS41IDEzLjUtMTAuNSAzMC44LTMzIDMwLjgtMjAuNSAwLTM1LjMtMTQuMi00OS41LTM1LjggNDQuMi0zNC4yIDc0LjctODcuNSA3NC43LTE1MyAuMS0xMTcuNS05Ni42LTE5Ni43LTE5OC40LTE5Ni43LTk5LjcgMC0xOTcuNyA3OS43LTE5Ny43IDE5Ni43IDAgMTM0LjEgMTMxLjMgMjIxLjYgMjQ5IDE4OSAxOS43IDMzLjYgNDUuNyA2Mi4zIDk1LjIgNjIuMyA4MS44IDAgOTAuOC03NS4zIDg5LTkzLjN6TTI5Ny4yIDMyOS4yYy0xOS41LTI5LjItNDMuNy01Mi4yLTkxLjUtNTIuMi0zMC41IDAtNTQuMyAxMC02OSAyMi44bDEyLjIgMjQuM2M2LjItMyAxMy00IDE5LjgtNCAzNS41IDAgNTMuNyAzMC44IDY5LjIgNjEuMy0xMCAzLTIwLjcgNC4yLTMyLjcgNC4yLTc1IDAtMTA3LjUtNTMtMTA3LjUtMTU2LjcgMC0xMDQuNCAzMi41LTE1Ny45IDEwNy41LTE1Ny45IDc2LjIgMCAxMDguNyA1My41IDEwOC43IDE1Ny43IC4xIDQxLjgtNS40IDc1LjYtMTYuNyAxMDAuNXoiXQogICAgfTsKICAgIGZhQ2NKY2IgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2MtamNiIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyNGIiLCAiTTQzMS41IDI0NC4zbDAtMzIuM2M0MS4yIDAgMzguNSAuMiAzOC41IC4yIDcuMyAxLjMgMTMuMyA3LjMgMTMuMyAxNiAwIDguOC02IDE0LjUtMTMuMyAxNS44LTEuMiAuNC0zLjMgLjMtMzguNSAuM3ptNDIuOCAyMC4yYy0yLjgtLjctMy4zLS41LTQyLjgtLjVsMCAzNWMzOS42IDAgNDAgLjIgNDIuOC0uNSA3LjUtMS41IDEzLjUtOCAxMy41LTE3IDAtOC43LTYtMTUuNS0xMy41LTE3ek01NzYgODBsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDQ4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0xODIgMTkyLjNsLTU3IDBjMCA2Ny4xIDEwLjcgMTA5LjctMzUuOCAxMDkuNy0xOS41IDAtMzguOC01LjctNTcuMi0xNC44bDAgMjhjMzAgOC4zIDY4IDguMyA2OCA4LjMgOTcuOSAwIDgyLTQ3LjcgODItMTMxLjJ6bTE3OC41IDQuNWMtNjMuNC0xNi0xNjUtMTQuOS0xNjUgNTkuMyAwIDc3LjEgMTA4LjIgNzMuNiAxNjUgNTkuMmwwLTI4LjNDMzEyLjkgMzExLjcgMjUzIDMwOSAyNTMgMjU2czU5LjgtNTUuNiAxMDcuNS0zMS4ybDAtMjh6TTU0NCAyODYuNWMwLTE4LjUtMTYuNS0zMC41LTM4LTMybDAtLjhjMTkuNS0yLjcgMzAuMy0xNS41IDMwLjMtMzAuMiAwLTE5LTE1LjctMzAtMzctMzEgMCAwIDYuMy0uMy0xMjAuMy0uM2wwIDEyNy41IDEyMi43IDBjMjQuMyAuMSA0Mi4zLTEyLjkgNDIuMy0zMy4yeiJdCiAgICB9OwogICAgZmFGZWRvcmEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmVkb3JhIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3OTgiLCAiTTAgMjU1LjhDLjEgMTMyLjIgMTAwLjMgMzIgMjI0IDMyUzQ0OCAxMzIuMyA0NDggMjU2IDM0Ny44IDQ3OS45IDIyNC4xIDQ4MEw1MC45IDQ4MEMyMi44IDQ4MCAuMSA0NTcuMyAwIDQyOS4ybDAgMCAwLTE3My40IDAgMHptMzQyLjYtNjMuMWMwLTM5LjctMzUuNi02OC41LTczLjItNjguNS0zNC45IDAtNjUuOCAyNi4zLTcwLjEgNTkuOS0uMiAzLjgtLjQgNS0uNCA4LjUtLjEgMjEuMSAwIDQyLjgtLjggNjQuNCAuOSAyNi4xIDEgNTIuMSAwIDc2LjYgMCAyNy4xLTE5LjQgNDUuNS00NC43IDQ1LjVzLTQ1LjgtMjAuMi00NS44LTQ1LjVjLjUtMjcuNyAyMi42LTQ1LjMgNDguNS00Ni4xbC4yIDAgMjYuMy0uMiAwLTM3LjMtMjYuMyAuMmMtNDcuMS0uNC04NC42IDM2LjUtODUuOSA4My40IDAgNDUuNiAzNy41IDgyLjkgODMgODIuOSA0MyAwIDc4LjctMzMuNiA4Mi42LTc1LjZsLjItNTMuNSAzMi42LS4zYzI1LjMgLjIgMjUtMzcuOC0uMi0zNy4zbC0zMi40IC4zYzAtNi40IC4xLTEyLjggLjEtMTkuMiAuMS0xMi43IC4xLTI1LjQtLjEtMzguMiAuMS0xNi41IDE1LjgtMzEuMiAzMy4yLTMxLjIgMTcuNSAwIDM1LjkgOC43IDM1LjkgMzEuMiAwIDMuMi0uMSA1LjEtLjMgNi4zLTEuOSAxMC41IDUuMiAyMC40IDE1LjcgMjEuOSAxMC42IDEuNSAyMC4yLTYuMSAyMS4yLTE2LjYgLjYtNC4yIC43LTcuOSAuNy0xMS42eiJdCiAgICB9OwogICAgZmFEdW9saW5nbyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkdW9saW5nbyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlODEyIiwgIk01MDQuMyAyMzAuNWMxMC40IDg4LjUtNDMuNCAxNzIuMS0xMjguMiAxOTlzLTE3Ni42LTEwLjMtMjE4LjktODguN2MtNzIgMy0xMzcuNC0zOS44LTE2My4yLTEwNS41LTIuNi02LjYtMS45LTE0IDEuOS0xOS45czEwLjItOS43IDE3LjItMTAuMWw5Ni4xLTYtMjMuOC03NS45Yy02LjMtMjAtMi4yLTQxLjkgMTEtNTguM3MzMy43LTI1IDU0LjUtMjNjNTIuMiA1IDg2LjggNC44IDEwNC0uNlMzMDAgMTYuNyAzMzktMTYuOWMxNS45LTEzLjcgMzcuNy0xOC41IDU3LjgtMTIuN3MzNi4xIDIxLjMgNDIuNCA0MS40TDQ2Mi44IDg3IDU0My42IDM3LjNjNi0zLjcgMTMuNC00LjMgMTkuOS0xLjZzMTEuMyA4LjMgMTIuOSAxNS4yYzE2LjIgNjguMi0xMi40IDE0MC4zLTcyLjEgMTc5LjV6TTI1OC41IDQ3NS45bDAgMGMxNS4xIDcuNSAyMS41IDI1LjggMTQuMiA0MXMtMjUuNCAyMS45LTQwLjcgMTQuOWwtNDMuOS0yMWMtMTUuMS03LjUtMjEuNS0yNS44LTE0LjItNDFzMjUuNC0yMS45IDQwLjctMTQuOWw0My44IDIxek01NjQuNiAzNDUuN2MxNC44IDguNCAyMCAyNy4zIDExLjYgNDIuMmwtMjMuOSA0Mi40Yy04LjcgMTQuMy0yNy4xIDE5LjItNDEuNiAxMC45cy0xOS45LTI2LjYtMTItNDEuNGwyMy45LTQyLjRjNC03LjEgMTAuNy0xMi40IDE4LjYtMTQuNnMxNi4zLTEuMiAyMy40IDIuOXoiXQogICAgfTsKICAgIGZhRmlyc3RkcmFmdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmaXJzdGRyYWZ0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYzYTEiLCAiTTM4NCAxOTJsLTY0IDAgMCAxMjgtMTI4IDAgMCAxMjgtMTkyIDAgMC0yNS42IDE2Ni40IDAgMC0xMjggMTI4IDAgMC0xMjggODkuNiAwIDAgMjUuNnptLTI1LjYgMzguNGwwIDEyOC0xMjggMCAwIDEyOC0xNjYuNCAwIDAgMjUuNiAxOTIgMCAwLTEyOCAxMjggMCAwLTE1My42LTI1LjYgMHptMjUuNiAxOTJsLTg5LjYgMCAwIDg5LjYgMjUuNiAwIDAtNjQgNjQgMCAwLTI1LjZ6TTAgMGwwIDM4NCAxMjggMCAwLTEyOCAxMjggMCAwLTEyOCAxMjggMCAwLTEyOC0zODQgMHoiXQogICAgfTsKICAgIGZhRnJlZWJzZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmcmVlYnNkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYTQiLCAiTTMwMy43IDk2LjJjMTEuMS0xMS4xIDExNS41LTc3IDEzOS4yLTUzLjIgMjMuNyAyMy43LTQyLjEgMTI4LjEtNTMuMiAxMzkuMnMtMzkuNCAuOS02My4xLTIyLjljLTIzLjgtMjMuNy0zNC4xLTUyLTIyLjktNjMuMXpNMTA5LjkgNjguMUM3My42IDQ3LjUgMjIgMjQuNiA1LjYgNDEuMS0xMSA1Ny43IDEyLjcgMTEwLjUgMzMuNSAxNDYuOCA1MiAxMTQuNiA3OC4zIDg3LjUgMTA5LjkgNjguMXpNNDA2LjcgMTc0YzMuMyAxMS4zIDIuNyAyMC43LTIuNyAyNi4xLTIwLjMgMjAuMy04Ny41LTI3LTEwOS4zLTcwLjEtMTgtMzIuMy0xMS4xLTUzLjQgMTQuOS00OC43IDUuNy0zLjYgMTIuMy03LjYgMTkuNi0xMS42LTI5LjgtMTUuNS02My42LTI0LjMtOTkuNS0yNC4zLTExOS4xIDAtMjE1LjYgOTYuNS0yMTUuNiAyMTUuNiAwIDExOSA5Ni41IDIxNS42IDIxNS42IDIxNS42UzQ0NS4zIDM4MC4xIDQ0NS4zIDI2MWMwLTM4LjQtMTAuMS03NC41LTI3LjctMTA1LjgtMy45IDctNy42IDEzLjMtMTAuOSAxOC44eiJdCiAgICB9OwogICAgZmFPZHlzZWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib2R5c2VlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1YzYiLCAiTTQwNi43IDQ2M2MtNDIuMyAzMC44LTk0LjQgNDktMTUwLjcgNDktMTExLjEgMC0yMDUuNy03MC44LTI0MS4xLTE2OS44IDIuNCAxLjcgNS45IDMuNiA3LjkgNC40IDE2LjMgNy40IDQwLjEtNS40IDYyLjktMjguNyA2LjktNi45IDE0LjQtMTIuNCAyMi44LTE3LjMgMTguMy0xMS45IDM3LjYtMjAuOCA1OC40LTI3LjIgMCAwIDIyLjMgMzQuMiA0My4xIDc0LjhzLTIyLjMgNTQtMjcuMiA1NGMtLjMgMC0uOCAwLTEuNS0uMS0xMS0uNS03MC0zLTU2IDUxLjEgMTQuOSA1Ny40IDk3LjUgMzYuNiAxMzkuNiA4LjlzMzEuNy0xMTguMyAzMS43LTExOC4zYzQxLjEtNi40IDU0IDM3LjEgNTcuOSA1OS40IC44IDQuNiAxLjEgOS45IDEuNCAxNS41IDEuMSAyMS4yIDIuMyA0NS42IDM1LjMgNDYuNCA1LjMgMCAxMC42LS44IDE1LjUtMmwwLS4xem0tOTUuMy0yMy43Yy0yLS41LTMuNS0yLjUtMy01IDEtMi41IDMtMy41IDUtM3MzLjUgMyAzIDUtMi41IDMuNS01IDN6bS0yMDctOTUuNmMxLjUtLjUgMy41IDEgNCAzIDAgMi0xIDQtMyA0LTEuNSAuNS0zLjUtMS00LTMtLjUtMS41IDEtMy41IDMtNHpNNDUxLjggNDIxYzM3LjUtNDQuNiA2MC4yLTEwMi4yIDYwLjItMTY1IDAtNjcuNS0yNi4xLTEyOC45LTY4LjgtMTc0LjctLjEgMjMuNS02LjEgNDguMi0xNi44IDY5LjItMTEuOSAyMC4zLTQ5IDU4LjktNjkuOCA3OC43LS43IC4zLTEuMSAuOS0xLjUgMS40LS4yIC4yLS4zIC40LS41IC42LTUgNi45LTQgMTYuOCAzIDIxLjggMjEuMyAxNS44IDU2LjQgNDUuNiA1OS40IDcyLjggMy41IDM0LjkgMjcuOSA3NS42IDM0LjIgODYuMiAuOCAxLjMgMS4zIDIuMSAxLjQgMi40IDAgMi4yLS40IDQuMy0uOCA2LjVsMCAuMXpNMzkwLjcgMjUxYy0uNSAzIDEgNS45IDQgNi40czUuOS0xIDYuNC00LTEtNS45LTQtNi40Yy0zLTEtNS45IDEtNi40IDR6bTYxLjQtNjAuOWwtMTEuNCA1LjQtMyAxMi45LTUuNC0xMS40LTEyLjktMyAxMS40LTUuNCAzLTEyLjkgNS40IDExLjQgMTIuOSAzek0zOTUuNSA0MS4zYy0xNi4yIDguMi0yMi4xIDMyLjgtMjkgNjEuNC0uMyAxLjQtLjcgMi44LTEgNC4yLTkuNSAzOC41LTMwLjYgMzcuNi00MS43IDM3LjItMS4xIDAtMi0uMS0yLjktLjEtNS4xIDAtNi00LTguOS0xNy4xLTIuNi0xMi4xLTYuOS0zMi0xNy45LTYzLjYtMjIuNy02NS44LTgyLjctNDkuNC0xMjguMi0yMi4yLTU1LjMgMzMuMS0zNC40IDEwMS45LTE5LjggMTQ5LjQgLjcgMi4yIDEuNCA0LjQgMiA2LjYtNCA0LTEzLjggNy41LTI2IDExLjktMTIuMSA0LjMtMjYuNiA5LjUtNDAuMyAxNi45LTMzLjkgMTgtNzAuMyA0OS03OS44IDYyLjYtMS4zLTEwLjctMi0yMS41LTItMzIuNSAwLTE0MS40IDExNC42LTI1NiAyNTYtMjU2IDUxLjQgMCA5OS40IDE1LjIgMTM5LjUgNDEuM3pNNTguOSAxODkuNmMtMS41LTItNC41LTMtNi40LTEuNXMtMyA0LjUtMS41IDYuNCA0LjUgMyA2LjQgMS41YzIuNS0xLjUgMy00LjUgMS41LTYuNHpNMzI3LjMgNjQuOWMyLTEuNSA1LS41IDYuNCAxLjUgMS41IDIuNSAxIDUuNC0xLjUgNi40LTIgMS41LTUgLjUtNi40LTEuNXMtLjUtNSAxLjUtNi40ek05NS4xIDEwNWMtLjUgMS41IC41IDMgMiAzIDEuNSAuNSAzLS41IDMtMiAuNS0xLjUtLjUtMy0yLTNzLTMgLjUtMyAyem04NC43LS41Yy0zLjUtNDMuMSAzNy4xLTU0IDM3LjEtNTQgNDQuMS0xNS40IDU2IDUuOSA2Ni40IDM3LjZzMyA0Mi42LTM4LjYgNTguOS02MS45LTQuNS02NC45LTQyLjZsMCAuMXptODkuNiAxNC45bDEgMGMyLjUgMCA1LTIgNS01IDItNi45IDEtMTQuNC0yLTIwLjgtMS41LTItNC0zLjUtNi40LTIuNS0zIDEtNC41IDQtMy41IDYuOSAyIDQuNSAzIDkuOSAxLjUgMTQuOS0uNSAzIDEuNSA1LjkgNC41IDYuNGwtLjEgLjF6bS05LjktNDEuNmMtMiAwLTQtMS01LTNzLTItMy41LTMtNWMtMi0yLTItNS40IDAtNy40czUuNC0yIDcuNCAwYzIgMi41IDMuNSA1IDUgNy40cy41IDUuOS0yLjUgNy40Yy0uNiAwLTEgLjItMS4zIC4zLS4yIC4xLS40IC4yLS42IC4ybDAgLjF6Il0KICAgIH07CiAgICBmYUdnQ2lyY2xlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdnLWNpcmNsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjYxIiwgIk0yNTcuNSA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMjA4IDM4Mi44bC0xMjUuNy0xMjUuNyAxMjUuNy0xMjUuNyAzNS4yIDM1LjQtMjQuMiAyNC4yLTExLjEtMTEuMS03Ny4yIDc3LjIgNzcuMiA3Ny4yIDI2LjYtMjYuNi01My4xLTUyLjkgMjQuNC0yNC40IDc3LjIgNzcuMi03NSA3NS4yem05OS0yLjJsLTM1LjItMzUuMiAyNC4xLTI0LjQgMTEuMSAxMS4xIDc3LjItNzcuMi03Ny4yLTc3LjItMjYuNSAyNi41IDUzLjEgNTIuOS0yNC40IDI0LjQtNzcuMi03Ny4yIDc1LTc1IDEyNS43IDEyNS43LTEyNS43IDEyNS42eiJdCiAgICB9OwogICAgZmFDbG91ZGZsYXJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNsb3VkZmxhcmUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTA3ZCIsICJNNDA3LjkgMzE5LjlMMTc3LjEgMzE3Yy0uNyAwLTEuNC0uMi0yLS41cy0xLjItLjgtMS42LTEuNGMtLjQtLjYtLjctMS4zLS43LTJzMC0xLjQgLjItMi4xYy40LTEuMSAxLjEtMi4xIDIuMS0yLjhzMi4xLTEuMiAzLjMtMS4ybDIzMi45LTIuOWMyNy42LTEuMyA1Ny41LTIzLjYgNjgtNTAuOGwxMy4zLTM0LjVjLjQtLjkgLjUtMS45IC41LTIuOSAwLS41LS4xLTEuMS0uMi0xLjYtNy40LTMyLjItMjUtNjEuMS01MC4zLTgyLjNzLTU2LjctMzMuNy04OS43LTM1LjUtNjUuNiA3LjMtOTMgMjUuNy00OCA0NS4zLTU4LjggNzYuNWMtMTEuMy04LjUtMjQuOS0xMy4zLTM5LTEzLjdzLTI4IDMuNS0zOS44IDExLjQtMjAuOCAxOS4xLTI1LjkgMzIuMy01LjkgMjcuNi0yLjQgNDEuM2MtNTIuMyAxLjUtOTQuMiA0NC4xLTk0LjIgOTYuNSAwIDQuNyAuMyA5LjMgMSAxNCAuMiAxLjEgLjcgMi4xIDEuNSAyLjhzMS45IDEuMSAyLjkgMS4xbDQyNi4xIC4xYzAgMCAuMSAwIC4xIDAgMS4yIDAgMi4zLS40IDMuMy0xLjFzMS42LTEuNyAyLTIuOWwzLjMtMTEuM2MzLjktMTMuNCAyLjQtMjUuOC00LjEtMzQuOS02LTguNC0xNi4xLTEzLjMtMjguMi0xMy45em0xMDUuOS05OC44Yy0yLjEgMC00LjMgLjEtNi40IC4yLS44IC4xLTEuNSAuMy0yLjEgLjhzLTEgMS4xLTEuMyAxLjhsLTkuMSAzMS4yYy0zLjkgMTMuNC0yLjQgMjUuOCA0LjEgMzQuOSA2IDguNCAxNi4xIDEzLjMgMjguMiAxMy45bDQ5LjIgMi45Yy43IDAgMS40IC4yIDIgLjVzMS4xIC44IDEuNSAxLjRjLjQgLjYgLjcgMS4zIC44IDJzMCAxLjUtLjIgMi4xYy0uNCAxLjEtMS4xIDIuMS0yLjEgMi44cy0yLjEgMS4yLTMuMyAxLjJsLTUxLjEgMi45Yy0yNy44IDEuMy01Ny43IDIzLjYtNjguMSA1MC44bC0zLjcgOS42Yy0uMiAuNC0uMiAuOC0uMiAxLjNzLjIgLjggLjQgMS4yIC42IC43IC45IC45IC44IC4zIDEuMiAuM2MwIDAgLjEgMCAuMSAwbDE3NS45IDBjMSAwIDItLjMgMi44LS45czEuNC0xLjUgMS43LTIuNGMzLjEtMTEuMSA0LjctMjIuNSA0LjctMzQgMC02OS4zLTU2LjUtMTI1LjUtMTI2LjEtMTI1LjV6Il0KICAgIH07CiAgICBmYUhhY2tlcnJhbmsgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaGFja2VycmFuayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWY3IiwgIk00NzcuOSAxMjhDNDYzLjQgMTAzIDI4NS41IDAgMjU2LjUgMHMtMjA2LjkgMTAyLjgtMjIxLjMgMTI4LTE0LjUgMjMwLjggMCAyNTYgMTkyLjQgMTI4IDIyMS4zIDEyOCAyMDYuOC0xMDIuOSAyMjEuMy0xMjggMTQuNS0yMzEgMC0yNTZ6TTMxNi41IDQxNC4yYy00IDAtNDAuOS0zNS44LTM4LTM4LjcgLjktLjkgNi4zLTEuNSAxNy41LTEuOCAwLTI2LjIgLjYtNjguNiAuOS04Ni4zIDAtMi0uNC0zLjQtLjQtNS44bC03OS45IDBjMCA3LjEtLjUgMzYuMiAxLjQgNzIuOSAuMiA0LjUtMS42IDYtNS43IDUuOS0xMC4xIDAtMjAuMy0uMS0zMC40LS4xLTQuMSAwLTUuOS0xLjUtNS43LTYuMSAuOS0zMy40IDMtODQtLjItMjEyLjdsMC0zLjJjLTkuNy0uNC0xNi40LTEtMTcuMy0xLjgtMi45LTIuOSAzNC41LTM4LjcgMzguNS0zOC43czQxLjIgMzUuOCAzOC4zIDM4LjdjLS45IC45LTcuOSAxLjUtMTYuOCAxLjhsMCAzLjJjLTIuNCAyNS44LTIgNzkuNi0yLjYgMTA1LjRsODAuMyAwYzAtNC42IC40LTM0LjctMS4yLTgzLjYtLjEtMy40IDEtNS4yIDQuMi01LjIgMTEuMS0uMSAyMi4yLS4xIDMzLjItLjEgMy41IDAgNC42IDEuNyA0LjUgNS40LTMuNyAxOTEuMy0uNyAxNzcuOS0uNyAyMTAuMyA4LjkgLjQgMTYuOCAxIDE3LjcgMS44IDIuOSAyLjktMzMuNiAzOC43LTM3LjYgMzguN2wwIDB6Il0KICAgIH07CiAgICBmYVNreWF0bGFzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNreWF0bGFzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyMTYiLCAiTTY0MCAzMjkuM2MwIDY1LjktNTIuNSAxMTQuNC0xMTcuNSAxMTQuNC0xNjUuOSAwLTE5Ni42LTI0OS43LTM1OS43LTI0OS43LTE0Ni45IDAtMTQ3LjEgMjEyLjIgNS42IDIxMi4yIDQyLjUgMCA5MC45LTE3LjggMTI1LjMtNDIuNSA1LjYtNC4xIDE2LjktMTYuMyAyMi44LTE2LjNzMTAuOSA1IDEwLjkgMTAuOWMwIDcuOC0xMy4xIDE5LjEtMTguNyAyNC4xLTQwLjkgMzUuNi0xMDAuMyA2MS4yLTE1NC43IDYxLjItODMuNCAuMS0xNTQtNTktMTU0LTE0NC45UzY3LjUgMTQ5LjYgMTUyLjggMTQ5LjZjMTg1LjMgMCAyMjIuNSAyNDUuOSAzNjEuOSAyNDUuOSA5OS45IDAgOTQuOC0xMzkuNyAzLjQtMTM5LjctMTcuNSAwLTM1IDExLjYtNDYuOSAxMS42LTguNCAwLTE1LjktNy4yLTE1LjktMTUuNiAwLTExLjYgNS4zLTIzLjcgNS4zLTM2LjMgMC02Ni42LTUwLjktMTE0LjctMTE2LjktMTE0LjctNTMuMSAwLTgwIDM2LjktODguOCAzNi45LTYuMiAwLTExLjItNS0xMS4yLTExLjIgMC01LjYgNC4xLTEwLjMgNy44LTE0LjQgMjUuMy0yOC44IDY0LjctNDMuNyAxMDIuOC00My43IDc5LjQgMCAxMzkuMSA1OC40IDEzOS4xIDEzNy44IDAgNi45LS4zIDEzLjctMS4yIDIwLjYgMTEuOS0zLjEgMjQuMS00LjcgMzUuOS00LjcgNjAuNyAwIDExMS45IDQ1LjMgMTExLjkgMTA3LjJ6Il0KICAgIH07CiAgICBmYURlc2twcm8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGVza3BybyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzhmIiwgIk0yMjIgNTEybDMxLjEtMzguNGMxMi4zLS4yIDI1LjYtMS40IDM2LjUtNi42IDM4LjktMTguNiAzOC40LTYxLjkgMzguMy02My44LS4xLTUtLjgtNC40LTI4LjktMzcuNGw3OS4xIDBjLS4yIDUwLjEtNy4zIDY4LjUtMTAuMiA3NS43LTkuNCAyMy43LTQzLjkgNjIuOC05NS4yIDY5LjQtOC43IDEuMS0zMi44IDEuMi01MC43IDEuMXpNNDIyLjQgMzQ0LjNjMzguNiAwIDU4LjUtMTMuNiA3My43LTMwLjlsLTE3NS41LS4zLTE3LjQgMzEuMyAxMTkuMi0uMXpNMzc4LjggMTIwLjRsMCAxNjguMy03My41IDAtMzIuNyA1NS41LTYuNSAwYy01Mi4zIDAtNTguMS01Ni41LTU4LjMtNTguOS0xLjItMTMuMi0yMS4zLTExLjYtMjAuMSAxLjggMS40IDE1LjggOC44IDQwIDI2LjQgNTcuMWwtOTEgMGMtMjUuNSAwLTExMC44LTI2LjgtMTA3LTExNGwwLTIxMy4zYzAtMTYgOS43LTE2LjYgMTUtMTYuOGw4MiAwYy4yIDAgLjMgLjEgLjUgLjEgNC4zLS40IDUwLjEtMi4xIDUwLjEgNDMuNyAwIDEzLjMgMjAuMiAxMy40IDIwLjIgMCAwLTE4LjItNS41LTMyLjgtMTUuOC00My43bDg0LjIgMEMzNjEtLjIgMzc4LjggNzkuNiAzNzguOCAxMjAuNHptLTEzMi41IDU2bDY0IDI5LjNjMTMuMy00NS41LTQyLjItNzEuNy02NC0yOS4zeiJdCiAgICB9OwogICAgZmFSZXNvbHZpbmcgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVzb2x2aW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzZTciLCAiTTI4OS4yIDI3OC4yYzQ2LTEzLjMgNDkuNi0yMy41IDQ0LTQzLjRMMzIyIDE5NS41Yy02LjEtMjAuOS0xOC40LTI4LjEtNzEuMS0xMi44bC0xODguMiA1NC4xIDI4LjYgOTguNiAxOTcuOS01Ny4yek0yNTYuNSA4QzEzOS40IDggNDEuMiA4OC43IDE1LjIgMTk3LjVsMjIxLjktNjMuOWMzNC44LTEwLjIgNTQuMi0xMS43IDc5LjMtOC4yIDM2LjMgNi4xIDUyLjcgMjUgNjEuNCA1NS4ybDEwLjcgMzcuOGM4LjIgMjguMSAxIDUwLjYtMjMuNSA3My42LTE5LjQgMTcuNC0zMS4yIDI0LjUtNjEuNCAzMy4ybC05Mi42IDI2LjYgMjIwLjQgMjcuMSA5LjcgMzQuMi00OC4xIDEzLjMtMjg2LjgtMzcuMyAyMyA4MC4yQzE2NiA0OTEuMyAyMDkuNSA1MDQgMjU1LjUgNTA0IDM5Mi41IDUwNCA1MDQgMzkyLjYgNTA0IDI1NS43IDUwNSAxMTkuNCAzOTMuNSA4IDI1Ni41IDh6TTQ2LjMgMzg4LjZMOCAyNTYuOGMwIDQ4LjUgMTQuMyA5My40IDM4LjMgMTMxLjh6Il0KICAgIH07CiAgICBmYUJsYWNrYmVycnkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmxhY2tiZXJyeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzdiIiwgIk0xNjYgMTE2LjljMCAyMy40LTE2LjQgNDkuMS03Mi41IDQ5LjFsLTcwLjEgMCAyMS04OC44IDY3LjggMGM0Mi4xIDAgNTMuOCAyMy4zIDUzLjggMzkuN3pNMjkyLjIgNzcuMmwtNjcuOCAwLTE4LjcgODguOCA3MC4xIDBjNTMuOCAwIDcwLjEtMjUuNyA3MC4xLTQ5LjEgLjEtMTYuNC0xMS42LTM5LjctNTMuNy0zOS43ek04OC44IDIwOC4xbC02Ny44IDAtMjEgODguOCA3MC4xIDBjNTYuMSAwIDcyLjUtMjMuNCA3Mi41LTQ5LjEgMC0xNi4zLTExLjctMzkuNy01My44LTM5Ljd6bTE4MC4xIDBsLTY3LjggMC0xOC43IDg4LjggNzAuMSAwYzUzLjggMCA3MC4xLTIzLjQgNzAuMS00OS4xIDAtMTYuMy0xMS43LTM5LjctNTMuNy0zOS43em0xODkuMy01My44bC02Ny44IDAtMTguNyA4OC44IDcwLjEgMGM1My44IDAgNzAuMS0yMy40IDcwLjEtNDkuMSAuMS0xNi4zLTExLjYtMzkuNy01My43LTM5Ljd6bS0yOCAxMzcuOWwtNjcuOCAwLTE4LjcgODguOCA3MC4xIDBjNTYuMSAwIDcwLjEtMjMuNCA3MC4xLTQ5LjEgMC0xNi4zLTExLjYtMzkuNy01My43LTM5Ljd6TTI0MC44IDM0NmwtNjcuOCAwLTE4LjcgODguOCA3MC4xIDBjNTYuMSAwIDcwLjEtMjUuNyA3MC4xLTQ5LjEgLjEtMTYuMy0xMS42LTM5LjctNTMuNy0zOS43eiJdCiAgICB9OwogICAgZmFTdHJpcGVTID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0cmlwZS1zIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY0MmEiLCAiTTE1NS42IDE1NC42YzAtMjIuMyAxOC42LTMwLjkgNDguNC0zMC45IDQzLjQgMCA5OC41IDEzLjMgMTQxLjkgMzYuN2wwLTEzNC4zYy00Ny4zLTE4LjktOTQuNS0yNi4xLTE0MS44LTI2LjEtMTE1LjcgMC0xOTIuOCA2MC40LTE5Mi44IDE2MS40IDAgMTU3LjkgMjE2LjggMTMyLjMgMjE2LjggMjAwLjQgMCAyNi40LTIyLjkgMzQuOS01NC43IDM0LjktNDcuMiAwLTEwOC4yLTE5LjUtMTU2LjEtNDUuNWwwIDEyOC41YzQ5LjMgMjEuMyAxMDIuMyAzMi4zIDE1NiAzMi40IDExOC42IDAgMjAwLjMtNTEgMjAwLjMtMTUzLjYgMC0xNzAuMi0yMTgtMTM5LjctMjE4LTIwMy45eiJdCiAgICB9OwogICAgZmFTcXVhcmVCZWhhbmNlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1iZWhhbmNlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImJlaGFuY2Utc3F1YXJlIl0sICJmMWI1IiwgIk0xNTUuMyAzMTguNGMxNy4yIDAgMzEuMi02LjEgMzEuMi0yNS40IDAtMTkuNy0xMS43LTI3LjQtMzAuMy0yNy41bC00NiAwIDAgNTIuOSA0NS4xIDB6bS01LjQtMTI5LjZsLTM5LjYgMCAwIDQ0LjggNDIuNyAwYzE1LjEgMCAyNS44LTYuNiAyNS44LTIyLjkgMC0xNy43LTEzLjctMjEuOS0yOC45LTIxLjl6bTEyOS41IDc0LjhsNjIuMiAwYy0xLjctMTguNS0xMS4zLTI5LjctMzAuNS0yOS43LTE4LjMgMC0zMC41IDExLjQtMzEuNyAyOS43ek0zODQgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NHpNMzQ5LjUgMTg1bC03Ny44IDAgMC0xOC45IDc3LjggMCAwIDE4Ljl6TTE5My43IDI0My43YzIzLjYgNi43IDM1IDI3LjUgMzUgNTEuNiAwIDM5LTMyLjcgNTUuNy02Ny42IDU1LjlsLTkzLjEgMCAwLTE5MiA5MC41IDBjMzIuOSAwIDYxLjQgOS4zIDYxLjQgNDcuNSAwIDE5LjMtOSAyOC44LTI2LjIgMzd6bTExOC43LTM4LjZjNDMuNSAwIDY3LjYgMzQuMyA2Ny42IDc1LjQgMCAxLjYtLjEgMy4zLS4yIDUgMCAuOC0uMSAxLjUtLjEgMi4ybC0xMDAuMiAwYzAgMjIuMiAxMS43IDM1LjMgMzQuMSAzNS4zIDExLjYgMCAyNi41LTYuMiAzMC4yLTE4LjFsMzMuNyAwYy0xMC40IDMxLjktMzEuOSA0Ni44LTY1LjEgNDYuOC00My44IDAtNzEuMS0yOS43LTcxLjEtNzMgMC00MS44IDI4LjctNzMuNiA3MS4xLTczLjZ6Il0KICAgIH07CiAgICBmYUJlaGFuY2VTcXVhcmUgPSBmYVNxdWFyZUJlaGFuY2U7CiAgICBmYVNlcnZpY2VzdGFjayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzZXJ2aWNlc3RhY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNlYyIsICJNOTYgMjE2YzgxLjcgMTAuMiAyNzMuNyAxMDIuMyAzMDQgMjMyTDggNDQ4Yzk5LjUtOC4xIDE4NC41LTEzNyA4OC0yMzJ6TTEyOCA2NGMzMi4zIDM1LjYgNDcuNyA4My45IDQ2LjQgMTMzLjYgODIuOSAzMy43IDIwNy4zIDEyMy43IDIzMy42IDI1MC40bDk2IDBDNDYzLjMgMjMxLjkgMjMwLjggNzkuNSAxMjggNjR6Il0KICAgIH07CiAgICBmYVJvY2tldGNoYXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicm9ja2V0Y2hhdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmM2U4IiwgIk0yODQuNSAyMjQuOGMtNi43IDAtMTMuMyAyLjEtMTguOSA1LjhzLTkuOSA5LjEtMTIuNSAxNS40LTMuMiAxMy4xLTEuOSAxOS43IDQuNiAxMi43IDkuNCAxNy40IDEwLjkgOCAxNy41IDkuMyAxMy41IC42IDE5LjctMiAxMS41LTcgMTUuMy0xMi42IDUuNy0xMi4yIDUuNy0xOC45YzAtOS4xLTMuNy0xNy44LTEwLjEtMjQuMnMtMTUuMS0xMC0yNC4yLTkuOXptLTExMC40IDBjLTYuNyAwLTEzLjMgMi4xLTE4LjkgNS44cy05LjkgOS4xLTEyLjUgMTUuNC0zLjIgMTMuMS0xLjkgMTkuNyA0LjYgMTIuNyA5LjQgMTcuNCAxMC45IDggMTcuNSA5LjMgMTMuNSAuNiAxOS43LTIgMTEuNS03IDE1LjMtMTIuNiA1LjctMTIuMiA1LjctMTguOWMwLTkuMS0zLjctMTcuOC0xMC4xLTI0LjJzLTE1LjEtMTAtMjQuMi0xMGwwIDB6bTIyMC45IDBhMzQuMSAzNC4xIDAgMSAwIC40IDY4LjIgMzQuMSAzNC4xIDAgMSAwIC0uNC02OC4yem0xNTMuOC01NS4zYy0xNS41LTI0LjItMzcuMy00NS42LTY0LjctNjMuNi01Mi45LTM0LjgtMTIyLjQtNTQtMTk1LjctNTQtMjQuMiAwLTQ4LjMgMi4xLTcyIDYuNC0xNC45LTE0LjMtMzEuNS0yNi42LTQ5LjUtMzYuNi02Ni44LTMzLjMtMTI1LjYtMjAuOS0xNTUuMy0xMC4yLTIuMyAuOC00LjMgMi4xLTUuOSAzLjlzLTIuNyAzLjktMy4zIDYuMi0uNSA0LjcgLjEgNy4xIDEuOCA0LjQgMy41IDYuMUMyNyA1Ni41IDYxLjYgOTkuMyA1My4xIDEzOC4zIDIwIDE3Mi4yIDIgMjEzIDIgMjU1LjYgMiAyOTkgMjAgMzM5LjggNTMuMSAzNzMuNyA2MS42IDQxMi43IDI3IDQ1NS42IDYgNDc3LjIgNC4zIDQ3OSAzLjIgNDgxLjEgMi41IDQ4My40cy0uNyA0LjctLjEgNyAxLjcgNC41IDMuMyA2LjIgMy42IDMuMSA1LjkgMy45YzI5LjcgMTAuNyA4OC41IDIzLjEgMTU1LjMtMTAuMiAxOC0xMCAzNC43LTIyLjMgNDkuNS0zNi42IDIzLjggNC4zIDQ3LjkgNi40IDcyIDYuNCA3My4zIDAgMTQyLjgtMTkuMiAxOTUuNy01NCAyNy40LTE4IDQ5LjEtMzkuNCA2NC43LTYzLjYgMTcuMy0yNi45IDI2LjEtNTUuOSAyNi4xLTg2LjEgMC0zMS04LjgtNjAtMjYuMS04Ni45bDAgMHpNMjg1LjQgNDA5LjljLTMwLjIgLjEtNjAuMy0zLjgtODkuNC0xMS41bC0yMC4xIDE5LjRjLTExLjIgMTAuNy0yMy42IDIwLTM3LjEgMjcuNi0xNi40IDguMi0zNC4yIDEzLjMtNTIuNSAxNC45IDEtMS44IDEuOS0zLjYgMi44LTUuNCAyMC4yLTM3LjEgMjUuNi03MC41IDE2LjMtMTAwLjEtMzMtMjYtNTIuOC01OS4yLTUyLjgtOTUuNCAwLTgzLjEgMTA0LjMtMTUwLjUgMjMyLjgtMTUwLjVzMjMyLjkgNjcuNCAyMzIuOSAxNTAuNWMwIDgzLjEtMTA0LjMgMTUwLjUtMjMyLjkgMTUwLjV6Il0KICAgIH07CiAgICBmYVJlYmVsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJlYmVsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxZDAiLCAiTTI1Ni45IDUwNGMtMTM5LjMgMC0yNDcuNS0xMTYuMi0yNDMuMy0yNTQuMSAyLjgtNzkuMiA0My4yLTE1Mi4yIDExNi41LTIwMC40IC4zIDAgMS45LS42IDEuMSAuOC01LjggNS41LTExMS4zIDEyOS44LTE0LjEgMjI2LjQgNDkuOCA0OS41IDkwIDIuNSA5MCAyLjUgMzguNS01MC4xLS42LTEyNS45LS42LTEyNS45LTEwLTI0LjktNDUuNy00MC4xLTQ1LjctNDAuMWwyOC44LTMxLjhjMjQuNCAxMC41IDQzLjIgMzguNyA0My4yIDM4LjcgLjgtMjkuNi0yMS45LTYxLjQtMjEuOS02MS40TDI1NS41IDggMjk5LjggNTguMWMtMjAuNSAyOC44LTIxLjkgNjIuNi0yMS45IDYyLjYgMTMuOC0yMyA0My41LTM5LjMgNDMuNS0zOS4zbDI4LjUgMzEuOGMtMjcuNCA4LjktNDUuNCAzOS45LTQ1LjQgMzkuOS0xNS44IDI4LjUtMjcuMSA4OS40IC42IDEyNy4zIDMyLjQgNDQuNiA4Ny43LTIuOCA4Ny43LTIuOCAxMDIuNy05MS45LTEwLjUtMjI1LTEwLjUtMjI1LTYuMS01LjUgLjgtMi44IC44LTIuOCA1MC4xIDM2LjUgMTE0LjYgODQuNCAxMTYuMiAyMDQuOCAyIDE0NS42LTk5LjkgMjQ5LjQtMjQyLjQgMjQ5LjR6Il0KICAgIH07CiAgICBmYVNxdWFyZVdlYkF3ZXNvbWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXdlYi1hd2Vzb21lIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2ODMiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIzNSAxNzcuNmw1MyA0Ni40IDUyLjItMTAuNGMtMi42LTMuOS00LjItOC41LTQuMi0xMy42IDAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRjMCAxMy0xMC4zIDIzLjYtMjMuMiAyNEwzMDQuNSAzNDkuMWMtNS4yIDExLjUtMTYuNiAxOC45LTI5LjIgMTguOWwtMTAyLjYgMGMtMTIuNiAwLTI0LTcuNC0yOS4yLTE4LjlMODcuMiAyMjRjLTEyLjktLjQtMjMuMi0xMS0yMy4yLTI0IDAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRjMCA1LTEuNSA5LjctNC4yIDEzLjZMMTYwIDIyNCAyMTMuMSAxNzcuNmMtOC45LTQuMS0xNS0xMy4xLTE1LTIzLjYgMC0xNC40IDExLjYtMjYgMjYtMjZzMjYgMTEuNiAyNiAyNmMwIDEwLjUtNi4yIDE5LjUtMTUuMSAyMy42eiJdCiAgICB9OwogICAgZmFMaW5rdHJlZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsaW5rdHJlZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlN2Q4IiwgIk0zMiAxNzMuNGwxMjUuOCAwLTg5LjQtODUuNCA0OS41LTUxIDg1LjIgODcuOCAwLTEyNC44IDczLjkgMCAwIDEyNC44IDg1LjItODcuNiA0OS40IDUwLjgtODkuNCA4NS4yIDEyNS43IDAgMCA3MC41LTEyNi40IDAgOTAgODcuNi00OS4zIDQ5LjgtMTIyLjItMTIzLTEyMi4yIDEyMy00OS41LTQ5LjYgOTAtODcuNi0xMjYuNCAwIDAtNzAuNXpNMjAyLjkgMzQ0LjhsNzMuOSAwIDAgMTY3LjItNzMuOSAwIDAtMTY3LjJ6Il0KICAgIH07CiAgICBmYVNpbXBseWJ1aWx0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNpbXBseWJ1aWx0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyMTUiLCAiTTQ4MS42IDY0bC0xMDYgMEMzNjEuMSA2NCAzNDkgNzUuOCAzNDkgOTAuM2wwIDM5LjYtMTg1LjMgMCAwLTM5LjZjMC0xNC41LTEyLTI2LjMtMjYuNi0yNi4zbC0xMDYgMEMxNi41IDY0IDQuNyA3NS44IDQuNyA5MC4zbDAgMzMxLjRjMCAxNC41IDExLjggMjYuMyAyNi42IDI2LjNsNDUwLjQgMGMxNC44IDAgMjYuNi0xMS44IDI2LjYtMjYuM2wwLTMzMS40Yy0uMi0xNC41LTEyLTI2LjMtMjYuNy0yNi4zek0xNTAuNSAyMjIuN2E2Ni41IDY2LjUgMCAxIDEgLS4zIDEzMy4xIDY2LjUgNjYuNSAwIDEgMSAuMy0xMzMuMXptMjExLjkgLjFhNjYuNSA2Ni41IDAgMSAxIC4zIDEzMi45IDY2LjUgNjYuNSAwIDEgMSAtLjMtMTMyLjl6Il0KICAgIH07CiAgICBmYVN0dWJiZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3R1YmJlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNWM3IiwgIk0xMzYuNSAyOTQuMmw1OC44IDIyLjljOS4xLTM2LjggMjUuNC02MS4xIDU1LTYxLjEgNDkuNCAwIDcxLjQgNjMuNiAxNDIuNCA2My42IDE1LjYgMCAzNS45LTIuOCA1NS4zLTEzLjNsMCA2MS43YzAgNjEuOC01MC40IDExMi0xMTIuMyAxMTJMMCA0ODAgNDEuOCA0MjQgMCAzNjggNDEuNyAzMTIgMCAyNTYuMSA0MS44IDIwMC4xIDAgMTQ0LjEgNDEuOCA4OCAwIDMyIDMzNS43IDMyQzM5Ny42IDMyIDQ0OCA4Mi4zIDQ0OCAxNDQuMWwwIDUxLjNjLTkuMiAzNi4zLTI1LjkgNjAuNi01NSA2MC42LTQ5LjYgMC03MS42LTYzLjUtMTQyLjQtNjMuNS0zNS45IDAtOTUuMiAxNC42LTExNC4xIDEwMS42bDAgLjF6Il0KICAgIH07CiAgICBmYUFwcGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFwcGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzNzEiLCAiTTQyLjEgMjM5LjFjMjIuMiAwIDI5IDIuOCAzMy41IDE0LjZsLjggMCAwLTIyLjljMC0xMS4zLTQuOC0xNS40LTE3LjktMTUuNC0xMS4zIDAtMTQuNCAyLjUtMTUuMSAxMi44bC0zOC42IDBjLjMtMTMuOSAxLjUtMTkuMSA1LjgtMjQuNCA3LjMtOC44IDE4LjktMTEuOCA0Ni4xLTExLjggMzMgMCA0Ny4xIDUgNTMuOSAxOC45IDIgNC4zIDQgMTUuNiA0IDIzLjdsMCA3Ni4zLTM4LjMgMCAxLjMtMTkuMS0xIDBjLTUuMyAxNS42LTEzLjYgMjAuNC0zNS41IDIwLjQtMzAuMyAwLTQxLjEtMTAuMS00MS4xLTM3LjMgMC0yNS4yIDEyLjMtMzUuOCA0Mi4xLTM1Ljh6bTE3LjEgNDguMWMxMy4xIDAgMTYuOS0zIDE2LjktMTMuNCAwLTkuMS00LjMtMTEuNi0xOS42LTExLjYtMTMuMSAwLTE3LjkgMy0xNy45IDEyLjEtLjEgMTAuNCAzLjcgMTIuOSAyMC42IDEyLjl6TTEzNyAxOTIuM2wzOC4zIDAtMS41IDIwLjYgLjggMGM5LjEtMTcuMSAxNS45LTIwLjkgMzcuNS0yMC45IDE0LjQgMCAyNC43IDMgMzEuNSA5LjEgOS44IDguNiAxMi44IDIwLjQgMTIuOCA0OC4xIDAgMzAtMyA0My4xLTEyLjEgNTIuOS02LjggNy4zLTE2LjQgMTAuMS0zMy4yIDEwLjEtMjAuNCAwLTI5LjItNS41LTMzLjgtMjEuMmwtLjggMCAwIDcwLjMtMzkuNSAwIDAtMTY5ek0yMTcuOSAyNTNjMC0yNy41LTMuMy0zMi41LTIwLjctMzIuNS0xNi45IDAtMjAuNyA1LTIwLjcgMjguNyAwIDI4IDMuNSAzMy41IDIxLjIgMzMuNSAxNi40IDAgMjAuMi01LjYgMjAuMi0yOS43em01Ny45LTYwLjdsMzguMyAwLTEuNSAyMC42IC44IDBjOS4xLTE3LjEgMTUuOS0yMC45IDM3LjUtMjAuOSAxNC40IDAgMjQuNyAzIDMxLjUgOS4xIDkuOCA4LjYgMTIuOCAyMC40IDEyLjggNDguMSAwIDMwLTMgNDMuMS0xMi4xIDUyLjktNi44IDcuMy0xNi40IDEwLjEtMzMuMyAxMC4xLTIwLjQgMC0yOS4yLTUuNS0zMy44LTIxLjJsLS44IDAgMCA3MC4zLTM5LjUgMCAwLTE2OSAuMSAwek0zNTYuNyAyNTNjMC0yNy41LTMuMy0zMi41LTIwLjctMzIuNS0xNi45IDAtMjAuNyA1LTIwLjcgMjguNyAwIDI4IDMuNSAzMy41IDIxLjIgMzMuNSAxNi40IDAgMjAuMi01LjYgMjAuMi0yOS43em01My44LTMuOGMwLTI1LjQgMy4zLTM3LjggMTIuMy00NS44IDguOC04LjEgMjIuMi0xMS4zIDQ1LjEtMTEuMyA0Mi44IDAgNTUuNyAxMi44IDU1LjcgNTUuN2wwIDExLjEtNzUuMyAwYy0uMyAyLS4zIDQtLjMgNC44IDAgMTYuOSA0LjUgMjEuOSAyMC4xIDIxLjkgMTMuOSAwIDE3LjktMyAxNy45LTEzLjlsMzcuNSAwIDAgMi4zYzAgOS44LTIuNSAxOC45LTYuOCAyNC43LTcuMyA5LjgtMTkuNiAxMy42LTQ0LjMgMTMuNi0yNy41IDAtNDEuNi0zLjMtNTAuNi0xMi4zLTguNS04LjUtMTEuMy0yMS4zLTExLjMtNTAuOHptNzYuNC0xMS42Yy0uMy0xLjgtLjMtMy4zLS4zLTMuOCAwLTEyLjMtMy4zLTE0LjYtMTkuNi0xNC42LTE0LjQgMC0xNy4xIDMtMTguMSAxNS4xbC0uMyAzLjMgMzguMyAwem01NS42LTQ1LjNsMzguMyAwLTEuOCAxOS45IC43IDBjNi44LTE0LjkgMTQuNC0yMC4yIDI5LjctMjAuMiAxMC44IDAgMTkuMSAzLjMgMjMuNCA5LjMgNS4zIDcuMyA2LjggMTQuNCA2LjggMzQgMCAxLjUgMCA1IC4yIDkuM2wtMzUgMGMuMy0xLjggLjMtMy4zIC4zLTQgMC0xNS40LTItMTkuNC0xMC4zLTE5LjQtNi4zIDAtMTAuOCAzLjMtMTMuMSA5LjMtMSAzLTEgNC4zLTEgMTIuM2wwIDY4LTM4LjMgMCAwLTExOC41IC4xIDB6Il0KICAgIH07CiAgICBmYUdvb2dsZVNjaG9sYXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlLXNjaG9sYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTYzYiIsICJNMzkwLjkgMjk4LjVzMCAuMSAuMSAuMWM5LjIgMTkuNCAxNC40IDQxLjEgMTQuNCA2NC0uMSA4Mi41LTY2LjkgMTQ5LjQtMTQ5LjQgMTQ5LjRTMTA2LjcgNDQ1LjEgMTA2LjcgMzYyLjdjMC0yMi45IDUuMi00NC42IDE0LjQtNjQgMS43LTMuNiAzLjYtNy4yIDUuNi0xMC43IDQuNC03LjYgOS40LTE0LjcgMTUtMjEuMyAyNy40LTMyLjYgNjguNS01My4zIDExNC40LTUzLjMgMzMuNiAwIDY0LjYgMTEuMSA4OS42IDI5LjkgOS4xIDYuOSAxNy40IDE0LjcgMjQuOCAyMy41IDUuNiA2LjYgMTAuNiAxMy44IDE1IDIxLjMgMiAzLjQgMy44IDcgNS41IDEwLjVsLS4xLS4xem0yNi40LTE4LjhjLTMwLjEtNTguNC05MS05OC40LTE2MS4zLTk4LjRzLTEzMS4yIDQwLTE2MS4zIDk4LjRsLTk0LjctNzcgMjU2LTIwMi43IDI1NiAyMDIuNy05NC43IDc3LjEgMC0uMXoiXQogICAgfTsKICAgIGZhWWFybiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ5YXJuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ZTMiLCAiTTQwMS45IDM0NS4yYy0zOSA5LjMtNDguNCAzMi4xLTEwNCA0Ny40IDAgMC0yLjcgNC0xMC40IDUuOC0xMy40IDMuMy02My45IDYtNjguNSA2LjEtMTIuNCAuMS0xOS45LTMuMi0yMi04LjItNi40LTE1LjMgOS4yLTIyIDkuMi0yMi04LjEtNS05LTkuOS05LjgtOC4xLTIuNCA1LjgtMy42IDIwLjEtMTAuMSAyNi41LTguOCA4LjktMjUuNSA1LjktMzUuMyAuOC0xMC44LTUuNyAuOC0xOS4yIC44LTE5LjJzLTUuOCAzLjQtMTAuNS0zLjZjLTYtOS4zLTE3LjEtMzcuMyAxMS41LTYyLTEuMy0xMC4xLTQuNi01My43IDQwLjYtODUuNiAwIDAtMjAuNi0yMi44LTEyLjktNDMuMyA1LTEzLjQgNy0xMy4zIDguNi0xMy45IDUuNy0yLjIgMTEuMy00LjYgMTUuNC05LjEgMjAuNi0yMi4yIDQ2LjgtMTggNDYuOC0xOHMxMi40LTM3LjggMjMuOS0zMC40YzMuNSAyLjMgMTYuMyAzMC42IDE2LjMgMzAuNnMxMy42LTcuOSAxNS4xLTVjOC4yIDE2IDkuMiA0Ni41IDUuNiA2NS4xLTYuMSAzMC42LTIxLjQgNDcuMS0yNy42IDU3LjUtMS40IDIuNCAxNi41IDEwIDI3LjggNDEuMyAxMC40IDI4LjYgMS4xIDUyLjcgMi44IDU1LjMgLjggMS40IDEzLjcgLjggMzYuNC0xMy4yIDEyLjgtNy45IDI4LjEtMTYuOSA0NS40LTE3IDE2LjctLjUgMTcuNiAxOS4yIDQuOSAyMi4yek04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem00MTYuNyA3NS4yYy0xLjctMTMuNi0xMy4yLTIzLTI4LTIyLjgtMjIgLjMtNDAuNSAxMS43LTUyLjggMTkuMi00LjggMy04LjkgNS4yLTEyLjQgNi44IDMuMS00NC41LTIyLjUtNzMuMS0yOC43LTc5LjQgNy44LTExLjMgMTguNC0yNy44IDIzLjQtNTMuMiA0LjMtMjEuNyAzLTU1LjUtNi45LTc0LjUtMS42LTMuMS03LjQtMTEuMi0yMS03LjQtOS43LTIwLTEzLTIyLjEtMTUuNi0yMy44LTEuMS0uNy0yMy42LTE2LjQtNDEuNCAyOC0xMi4yIC45LTMxLjMgNS4zLTQ3LjUgMjIuOC0yIDIuMi01LjkgMy44LTEwLjEgNS40bC4xIDBjLTguNCAzLTEyLjMgOS45LTE2LjkgMjIuMy02LjUgMTcuNCAuMiAzNC42IDYuOCA0NS43LTE3LjggMTUuOS0zNyAzOS44LTM1LjcgODIuNS0zNCAzNi0xMS44IDczLTUuNiA3OS42LTEuNiAxMS4xIDMuNyAxOS40IDEyIDIzLjggMTIuNiA2LjcgMzAuMyA5LjYgNDMuOSAyLjggNC45IDUuMiAxMy44IDEwLjEgMzAgMTAuMSA2LjggMCA1OC0yLjkgNzIuNi02LjUgNi44LTEuNiAxMS41LTQuNSAxNC42LTcuMSA5LjgtMy4xIDM2LjgtMTIuMyA2Mi4yLTI4LjcgMTgtMTEuNyAyNC4yLTE0LjIgMzcuNi0xNy40IDEyLjktMy4yIDIxLTE1LjEgMTkuNC0yOC4yeiJdCiAgICB9OwogICAgZmFTdGFja092ZXJmbG93ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0YWNrLW92ZXJmbG93IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxNmMiLCAiTTI5MSAzMTFsLTE5NS43LTQxLjMtOC4yIDM5LjMgMTk1LjcgNDEgOC4yLTM5em01MS04N0wxODguNSA5NS43IDE2MyAxMjYuNSAzMTYuNSAyNTQuOCAzNDIgMjI0em0tMzEuMiAzOS43TDEyOS41IDE3OSAxMTIuOCAyMTUuNSAyOTQgMzAwIDMxMC44IDI2My43ek0yNjIuMyAzMmwtMzIgMjQgMTE5LjMgMTYwLjMgMzItMjQtMTE5LjMtMTYwLjN6bTIwLjUgMzI4bC0yMDAgMCAwIDM5LjcgMjAwIDAgMC0zOS43em0zOS43IDgwbC0yNzkuNSAwIDAtMTIwLTQwIDAgMCAxNjAgMzU5LjUgMCAwLTE2MC00MCAwIDAgMTIweiJdCiAgICB9OwogICAgZmFCbHVldG9vdGggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmx1ZXRvb3RoIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYyOTMiLCAiTTI2MC42IDE3MS4xbC00Mi45IDQyLjktLjMtODYgNDMuMiA0My4xek0yMTcuNCAzOTAuOWw0My4xLTQzLjEtNDIuOS00Mi45LS4yIDg2ek0zODQgMjU5LjRDMzg0IDQ2NSAzMTIuMSA1MTIgMTk4LjkgNTEyUzAgNDY1IDAgMjU5LjQgODMuNCAwIDE5Ni42IDAgMzg0IDUzLjkgMzg0IDI1OS40em0tMTU4LjUgMGw3OS40LTg4LjYtMTI1LjEtMTM0LjMgMCAxNzYuOS03My44LTczLjgtMjcgMjYuOSA5Mi43IDkzLTkyLjcgOTMgMjYuOSAyNi45IDczLjgtNzMuOCAyLjMgMTcwIDEyNy40LTEyNy41LTgzLjktODguN3oiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zTmNKcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLW5jLWpwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZWEiLCAiTTI1NS43IDhDMTExLjYgOCA4IDEyNC44IDggMjU2IDggMzkyLjQgMTE5LjggNTA0IDI1NS43IDUwNCAzODUuOSA1MDQgNTA0IDQwMy4yIDUwNCAyNTYgNTA0IDExNy4yIDM5Ni41IDggMjU1LjcgOHptLjYgNDUwLjdjLTExMiAwLTIwMy42LTkyLjUtMjAzLjYtMjAyLjcgMC0yMS4xIDMtNDEuMiA5LTYwLjNsMTI3IDU2LjUtMjcuOSAwIDAgMzguNiA1OC4xIDAgNS43IDExLjggMCAxOC43LTYzLjggMCAwIDM4LjcgNjMuOCAwIDAgNTYgNjEuNyAwIDAtNTYgNjQuMiAwIDAtMzUuNyA4MSAzNi4xYy0xLjUgMi4yLTU3LjEgOTguMy0xNzUuMiA5OC4zem04Ny42LTEzNy4zbC01Ny42IDAgMC0xOC43IDIuOS01LjYgNTQuNyAyNC4zem02LjUtNTEuNGwwLTE3LjgtMzguNiAwIDYzLTExNi02NS44IDAtNDMuNCA5Ni0yMy0xMC4yLTM5LjYtODUuNy02NS44IDAgMjcuMyA1MS04MS45LTM2LjVjMjcuOC00NC4xIDgyLjYtOTguMSAxNzMuNy05OC4xIDExMi44IDAgMjAzIDkwIDIwMyAyMDMuNCAwIDIxLTIuNyA0MC42LTcuOSA1OUwzNTAuNCAyNzB6Il0KICAgIH07CiAgICBmYVJlZGRpdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZWRkaXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFhMSIsICJNMCAyNTZDMCAxMTQuNiAxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2IDM5Ny40IDUxMiAyNTYgNTEyTDM3LjEgNTEyYy0xMy43IDAtMjAuNS0xNi41LTEwLjktMjYuMkw3NSA0MzdDMjguNyAzOTAuNyAwIDMyNi43IDAgMjU2ek0zNDkuNiAxNTMuNmMyMy42IDAgNDIuNy0xOS4xIDQyLjctNDIuN3MtMTkuMS00Mi43LTQyLjctNDIuN2MtMjAuNiAwLTM3LjggMTQuNi00MS44IDM0LTM0LjUgMy43LTYxLjQgMzMtNjEuNCA2OC40bDAgLjJjLTM3LjUgMS42LTcxLjggMTIuMy05OSAyOS4xLTEwLjEtNy44LTIyLjgtMTIuNS0zNi41LTEyLjUtMzMgMC01OS44IDI2LjgtNTkuOCA1OS44IDAgMjQgMTQuMSA0NC42IDM0LjQgNTQuMSAyIDY5LjQgNzcuNiAxMjUuMiAxNzAuNiAxMjUuMnMxNjguNy01NS45IDE3MC42LTEyNS4zYzIwLjItOS42IDM0LjEtMzAuMiAzNC4xLTU0IDAtMzMtMjYuOC01OS44LTU5LjgtNTkuOC0xMy43IDAtMjYuMyA0LjYtMzYuNCAxMi40LTI3LjQtMTctNjIuMS0yNy43LTEwMC0yOS4xbDAtLjJjMC0yNS40IDE4LjktNDYuNSA0My40LTQ5LjkgNC40IDE4LjggMjEuMyAzMi44IDQxLjUgMzIuOGwuMSAuMnpNMTc3LjEgMjQ2LjljMTYuNyAwIDI5LjUgMTcuNiAyOC41IDM5LjNzLTEzLjUgMjkuNi0zMC4zIDI5LjYtMzEuNC04LjgtMzAuNC0zMC41IDE1LjQtMzguMyAzMi4xLTM4LjNsLjEtLjF6bTE5MC4xIDM4LjNjMSAyMS43LTEzLjcgMzAuNS0zMC40IDMwLjVzLTI5LjMtNy45LTMwLjMtMjkuNiAxMS44LTM5LjMgMjguNS0zOS4zIDMxLjIgMTYuNiAzMi4xIDM4LjNsLjEgLjF6bS00OC4xIDU2LjdjLTEwLjMgMjQuNi0zNC42IDQxLjktNjMgNDEuOXMtNTIuNy0xNy4zLTYzLTQxLjljLTEuMi0yLjkgLjgtNi4yIDMuOS02LjUgMTguNC0xLjkgMzguMy0yLjkgNTkuMS0yLjlzNDAuNyAxIDU5LjEgMi45YzMuMSAuMyA1LjEgMy42IDMuOSA2LjV6Il0KICAgIH07CiAgICBmYUNvbm5lY3RkZXZlbG9wID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNvbm5lY3RkZXZlbG9wIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyMGUiLCAiTTU1MC44IDI0MWwtNTAuMS04Ni44YzEuMS0yLjEgMS45LTQuNiAxLjktNy4yIDAtOC02LjctMTQuNy0xNC43LTE1TDQzMi40IDM2LjFjLjUtMS42IDEuMS0zLjIgMS4xLTQuOCAwLTguNi03LTE1LjMtMTUuMy0xNS4zLTQuOCAwLTguOCAyLjEtMTEuOCA1LjZsLTEwNi42IDBjLTIuNy0zLjUtNi43LTUuNi0xMS41LTUuNnMtOC44IDIuMS0xMS41IDUuNmwtMTA2LjEgMGMtMi45LTMuNS03LTUuNi0xMS44LTUuNi04LjMgMC0xNS4zIDYuNy0xNS4zIDE1LjMgMCAxLjYgLjUgMy41IDEuMSA0LjhsLTU2IDk3LjJjLTUuNCAyLjQtOS4xIDcuNS05LjEgMTMuNyAwIC41IC4zIDEuMSAuMyAxLjZMMjYuNiAyNDAuN2MtNy4yIDEuMy0xMi42IDcuNS0xMi42IDE1IDAgNy4yIDUuMSAxMy40IDEyLjEgMTVsNTUuMiA5NS40Yy0uNSAxLjYtLjggMi45LS44IDQuOCAwIDcuMiA1LjEgMTMuNCAxMi4xIDE0LjdsNTEuNyA4OS43Yy0uNSAxLjYtMS4xIDMuNS0xLjEgNS40IDAgOC42IDcgMTUuMyAxNS4zIDE1LjMgNC44IDAgOC44LTIuMSAxMS41LTUuNGwxMDYuOSAwYzIuNyAzLjIgNyA1LjQgMTEuNSA1LjRzOC44LTIuMSAxMS41LTUuNGwxMDcuMSAwYzIuNyAyLjkgNi43IDQuOCAxMSA0LjggOC42IDAgMTUuMy03IDE1LjMtMTUuMyAwLTEuNi0uMy0yLjktLjgtNC4zbDUxLjctOTAuM2M3LTEuMyAxMi4xLTcuNSAxMi4xLTE0LjcgMC0xLjYtLjMtMy4yLS44LTQuOGw1NC45LTk1LjRjNy0xLjMgMTIuMy03LjUgMTIuMy0xNSAwLTcuMi01LjEtMTMuNC0xMS44LTE0Ljd6bS0zOTcgMjA5LjdsLTQzLjctNzUuOCA0My43IDAgMCA3NS44em0wLTgzLjhsLTQzLjcgMGMtLjMtMS4xLS44LTIuMS0xLjMtMy4ybDQ1LTQ3LjQgMCA1MC42em0wLTYyLjRsLTUwLjQgNTMuM2MtMS4zLS41LTIuNy0xLjMtNC0xLjZMNDMuNyAyNTkuOGMuNS0xLjMgLjUtMi43IC41LTRzMC0yLjQtLjMtMy41bDUyLTkwYzIuNy0uMyA1LjQtMS4xIDcuOC0yLjdsNTAuMSA1MiAwIDkyLjl6bTAtMTAyLjNMMTA4IDE1NC44YzEuMy0yLjEgMi4xLTQuOCAyLjEtNy44IDAtLjMtLjMtLjgtLjMtMS4xbDQzLjktMTUuOCAwIDcyLjF6bTAtODAuNmwtNDMuNyAxNS44IDQzLjctNzUuNSAwIDU5Ljd6bTMyNi41IDM5LjFsLjggMS4zLTM1LjQgMTY3LjEtNjMuOC02Ny4yIDk4LTEwMS41IC4zIC4zek0yOTIuMSAzNTUuMWwxMS41IDExLjgtMjIuOCAwIDExLjMtMTEuOHptLS4zLTExLjNsLTgzLjMtODUuNCA3OS42LTg0LjQgODMgODcuNi03OS4zIDgyLjJ6bTUuNCA1LjlsNzkuMy04Mi4yIDY3LjUgNzEuMy01LjkgMjguMS0xMjQgMC0xNi45LTE3LjF6TTQxMC43IDQ0LjRjMS4xIC41IDIuMSAxLjEgMy41IDEuM2w1Ny45IDEwMC43IDAgLjVjMCAyLjkgLjggNS42IDIuMSA3LjhsLTk3LjUgMTAxLjItODMtODcuNiAxMTcuMS0xMjR6bS05LjEtMi4xbC0xMTMuNiAxMjAuMy01Ny4xLTYwLjMgMTY2LjMtNjAgNC4zIDB6bS0xMjMuNSAwYzIuNyAyLjcgNi4yIDQuMyAxMC4yIDQuM3M3LjUtMS42IDEwLjItNC4zbDc1IDAtMTQ4LjQgNTMuNi01MC45LTUzLjYgMTAzLjkgMHpNMTYxLjkgNDcuOWwxLjEtMi4xYy45LS4yIDEuOC0uNSAyLjctLjhsNTEuMiA1My44LTU0LjkgMTkuOCAwLTcwLjd6bTAgNzkuM2w2MC44LTIyIDU5LjcgNjMuMi03OS42IDg0LjEtNDEtNDIuMSAwLTgzLjN6bTAgOTIuN2wzNi40IDM3LjgtMzYuNCAzOC4zIDAtNzYuMXptMCA4Ny45bDQyLjEtNDQuNSA4Mi44IDg2LTE3LjEgMTcuNy0xMDcuNyAwIDAtNTkuMnptNyAxNjIuMWMtMS42LTEuNi0zLjUtMi43LTUuOS0zLjVsLTEuMS0xLjYgMC04OS43IDk5LjkgMC05MS42IDk0LjgtMS4zIDB6bTEyOS45IDBjLTIuNy0yLjQtNi40LTQuMy0xMC40LTQuM3MtNy44IDEuOS0xMC40IDQuM2wtOTYuNCAwIDkxLjYtOTQuOCAzOC4zIDAgOTEuNiA5NC44LTEwNC4yIDB6bTEyMC0xMS44bC00LjMgNy41Yy0xLjMgLjMtMi40IC44LTMuNSAxLjNsLTg5LjItOTEuOSAxMTQuNCAwLTE3LjQgODN6bTEyLjktMjIuMmwxMi45LTYwLjggMjIgMC0zNC44IDYwLjh6bTM0LjgtNjguOGwtMjAuNCAwIDQuNi0yMS4yIDE3LjEgMTguMmMtLjUgLjgtMS4xIDEuOS0xLjMgMi45em02Ni4yLTEwNy40bC01NS40IDk2LjdjLTEuMyAuNS0yLjcgMS4xLTQgMS45bC0yMC42LTIyIDM0LjYtMTYzLjkgNDUuOCA3OS4zYy0uMyAxLjMtLjggMi43LS44IDQuMyAwIDEuMyAuMyAyLjQgLjUgMy43eiJdCiAgICB9OwogICAgZmFSZXNlYXJjaGdhdGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVzZWFyY2hnYXRlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0ZjgiLCAiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTI2Mi4yIDM2Ni40Yy02LjYgMy0zMy4yIDYtNTAtMTQuMi05LjItMTAuNi0yNS4zLTMzLjMtNDIuMi02My42LTguOSAwLTE0LjcgMC0yMS40LS42bDAgNDYuNGMwIDIzLjUgNiAyMS4yIDI1LjggMjMuOWwwIDguMWMtNi45LS4zLTIzLjEtLjgtMzUuNi0uOC0xMy4xIDAtMjYuMSAuNi0zMy42IC44bDAtOC4xYzE1LjUtMi45IDIyLTEuMyAyMi0yMy45bDAtMTA5LjRjMC0yMi42LTYuNC0yMS0yMi0yMy45bDAtOC4xYzI1LjggMSA1My4xLS42IDcwLjktLjYgMzEuNyAwIDU1LjkgMTQuNCA1NS45IDQ1LjYgMCAyMS4xLTE2LjcgNDIuMi0zOS4yIDQ3LjUgMTMuNiAyNC4yIDMwIDQ1LjYgNDIuMiA1OC45IDcuMiA3LjggMTcuMiAxNC43IDI3LjIgMTQuN2wwIDcuM3ptMjIuOS0xMzVjLTIzLjMgMC0zMi4yLTE1LjctMzIuMi0zMi4ybDAtMzIuMmMwLTEyLjIgOC44LTMwLjQgMzQtMzAuNHMzMC40IDE3LjkgMzAuNCAxNy45bC0xMC43IDcuMnMtNS41LTEyLjUtMTkuNy0xMi41Yy03LjkgMC0xOS43IDcuMy0xOS43IDE5LjdsMCAyNi44YzAgMTMuNCA2LjYgMjMuMyAxNy45IDIzLjMgMTQuMSAwIDIxLjUtMTAuOSAyMS41LTI2LjhsLTE3LjkgMCAwLTEwLjcgMzAuNCAwYzAgMjAuNSA0LjcgNDkuOS0zNCA0OS45ek0xNjguNiAyNzYuMWMtOS40IDAtMTMuNi0uMy0yMC0uOGwwLTY5LjdjNi40LS42IDE1LS42IDIyLjUtLjYgMjMuMyAwIDM3LjIgMTIuMiAzNy4yIDM0LjUgMCAyMS45LTE1IDM2LjYtMzkuNyAzNi42eiJdCiAgICB9OwogICAgZmFTaWduYWxNZXNzZW5nZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2lnbmFsLW1lc3NlbmdlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNjYzIiwgIk0yNTYgMGMtMTMuMyAwLTI2LjMgMS0zOS4xIDNsMy43IDIzLjdDMjMyLjEgMjQuOSAyNDQgMjQgMjU2IDI0czIzLjkgLjkgMzUuNCAyLjdMMjk1LjEgM0MyODIuMyAxIDI2OS4zIDAgMjU2IDB6bTYwLjggNy4zbC01LjcgMjMuM2MyMy40IDUuNyA0NS40IDE0LjkgNjUuNCAyNy4xbDEyLjUtMjAuNWMtMjIuMS0xMy40LTQ2LjQtMjMuNi03Mi4yLTI5Ljl6bTc2LjQgNjEuNmMxOS4xIDE0IDM2IDMwLjkgNTAuMSA1MC4xbDE5LjQtMTQuMkM0NDcgODMuNiA0MjguNCA2NSA0MDcuMyA0OS41TDM5My4xIDY4Ljh6bTgxLjcgNTQuMmwtMjAuNSAxMi41YzEyLjIgMjAgMjEuNCA0MiAyNy4xIDY1LjRsMjMuMy01LjdjLTYuMy0yNS44LTE2LjUtNTAuMS0yOS45LTcyLjJ6bTEwLjUgOTcuNWMxLjggMTEuNSAyLjcgMjMuNCAyLjcgMzUuNHMtLjkgMjMuOS0yLjcgMzUuNGwyMy43IDMuN2MxLjktMTIuNyAzLTI1LjggMy0zOS4xcy0xLTI2LjMtMy0zOS4xbC0yMy43IDMuN3ptLTMxIDE1NS45bDIwLjUgMTIuNWMxMy40LTIyLjEgMjMuNi00Ni40IDI5LjktNzIuMmwtMjMuMy01LjdjLTUuNyAyMy40LTE0LjkgNDUuNC0yNy4xIDY1LjR6bTguMiAzMC44bC0xOS40LTE0LjJjLTE0IDE5LjEtMzAuOSAzNi01MC4xIDUwLjFsMTQuMiAxOS40YzIxLjEtMTUuNSAzOS44LTM0LjEgNTUuMi01NS4yem0tODYuMSA0N2MtMjAgMTIuMi00MiAyMS40LTY1LjQgMjcuMWw1LjcgMjMuM2MyNS44LTYuMyA1MC4xLTE2LjUgNzIuMi0yOS45bC0xMi41LTIwLjV6TTI5NS4xIDUwOWwtMy43LTIzLjdDMjc5LjkgNDg3LjEgMjY4IDQ4OCAyNTYgNDg4cy0yMy45LS45LTM1LjQtMi43TDIxNi45IDUwOWMxMi43IDEuOSAyNS44IDMgMzkuMSAzczI2LjMtMSAzOS4xLTN6bS05NC4xLTI3LjZjLTE3LjYtNC4zLTM0LjQtMTAuNi01MC4xLTE4LjZsLTcuOC00LTMyLjggNy43IDUuNSAyMy40IDI0LjMtNS43YzE3LjQgOC45IDM1LjkgMTUuOCA1NS4zIDIwLjVsNS43LTIzLjN6TTk1LjQgNDk0LjZMOTAgNDcxLjMgNDguMyA0ODFjLTEwLjQgMi40LTE5LjctNi45LTE3LjMtMTcuM2w5LjctNDEuNi0yMy40LTUuNS05LjcgNDEuNkMxLjIgNDg2IDI2IDUxMC44IDUzLjggNTA0LjRsNDEuNi05Ljd6bS01MC05Mi45bDcuNy0zMi44LTQtNy44Yy04LTE1LjctMTQuMy0zMi41LTE4LjYtNTAuMUw3LjMgMzE2LjdDMTIgMzM2LjEgMTguOSAzNTQuNyAyNy43IDM3MmwtNS43IDI0LjMgMjMuNCA1LjV6TTMgMjk1LjFsMjMuNy0zLjdDMjQuOSAyNzkuOSAyNCAyNjggMjQgMjU2cy45LTIzLjkgMi43LTM1LjRMMyAyMTYuOUMxIDIyOS43IDAgMjQyLjcgMCAyNTZzMSAyNi4zIDMgMzkuMXptMjcuNi05NC4xYzUuNy0yMy40IDE0LjktNDUuNCAyNy4xLTY1LjRMMzcuMiAxMjMuMWMtMTMuNCAyMi4xLTIzLjYgNDYuNC0yOS45IDcyLjJsMjMuMyA1Ljd6bTE4LjktOTYuMmwxOS40IDE0LjJjMTQtMTkuMSAzMC45LTM2IDUwLjEtNTAuMUwxMDQuNyA0OS41QzgzLjYgNjUgNjUgODMuNiA0OS41IDEwNC43em04Ni4xLTQ3YzIwLTEyLjIgNDItMjEuNCA2NS40LTI3LjFMMTk1LjIgNy4zYy0yNS44IDYuMy01MC4xIDE2LjUtNzIuMiAyOS45bDEyLjUgMjAuNXpNMjU2IDQ2NGMxMTQuOSAwIDIwOC05My4xIDIwOC0yMDhTMzcwLjkgNDggMjU2IDQ4IDQ4IDE0MS4xIDQ4IDI1NmMwIDM2LjQgOS40IDcwLjcgMjUuOCAxMDAuNSAxLjYgMi45IDIuMSA2LjIgMS40IDkuNGwtMjEuNiA5Mi41IDkyLjUtMjEuNmMzLjItLjcgNi41LS4yIDkuNCAxLjQgMjkuOCAxNi41IDY0IDI1LjggMTAwLjUgMjUuOHoiXQogICAgfTsKICAgIGZhWGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ4aW5nIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxNjgiLCAiTTE2Mi43IDIxMGMtMS44IDMuMy0yNS4yIDQ0LjQtNzAuMSAxMjMuNS00LjkgOC4zLTEwLjggMTIuNS0xNy43IDEyLjVMOS44IDM0NmMtNy43IDAtMTIuMS03LjUtOC41LTE0LjRsNjktMTIxLjNjLjIgMCAuMi0uMSAwLS4zTDI2LjQgMTM0LjRjLTQuMy03LjggLjMtMTQuMSA4LjUtMTQuMWw2NS4xIDBjNy4zIDAgMTMuMyA0LjEgMTggMTIuMkwxNjIuNyAyMTB6TTM4Mi42IDQ2LjFsLTE0NCAyNTMgMCAuMyA5MS42IDE2Ni42YzMuOSA3LjEgLjIgMTQuMS04LjUgMTQuMWwtNjUuMiAwYy03LjYgMC0xMy42LTQtMTgtMTIuMkwxNDYuMSAyOTkuNGMzLjMtNS44IDUxLjUtOTAuOCAxNDQuOC0yNTUuMiA0LjYtOC4xIDEwLjQtMTIuMiAxNy41LTEyLjJsNjUuNyAwYzggMCAxMi4zIDYuNyA4LjUgMTQuMXoiXQogICAgfTsKICAgIGZhU3F1YXJlSnMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWpzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImpzLXNxdWFyZSJdLCAiZjNiOSIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTE4MC45IDQ0NC45Yy0zMy43IDAtNTMuMi0xNy40LTYzLjItMzguNUwxNTIgMzg1LjdjNi42IDExLjcgMTIuNiAyMS42IDI3LjEgMjEuNiAxMy44IDAgMjIuNi01LjQgMjIuNi0yNi41bDAtMTQzLjEgNDIuMSAwIDAgMTQzLjdjMCA0My42LTI1LjYgNjMuNS02Mi45IDYzLjV6bTg1LjgtNDNMMzAxIDM4Mi4xYzkgMTQuNyAyMC44IDI1LjYgNDEuNSAyNS42IDE3LjQgMCAyOC42LTguNyAyOC42LTIwLjggMC0xNC40LTExLjQtMTkuNS0zMC43LTI4bC0xMC41LTQuNWMtMzAuNC0xMi45LTUwLjUtMjkuMi01MC41LTYzLjUgMC0zMS42IDI0LjEtNTUuNiA2MS42LTU1LjYgMjYuOCAwIDQ2IDkuMyA1OS44IDMzLjdMMzY4IDI5MGMtNy4yLTEyLjktMTUtMTgtMjcuMS0xOC0xMi4zIDAtMjAuMSA3LjgtMjAuMSAxOCAwIDEyLjYgNy44IDE3LjcgMjUuOSAyNS42bDEwLjUgNC41YzM1LjggMTUuMyA1NS45IDMxIDU1LjkgNjYuMiAwIDM3LjgtMjkuOCA1OC42LTY5LjcgNTguNi0zOS4xIDAtNjQuNC0xOC42LTc2LjctNDN6Il0KICAgIH07CiAgICBmYUpzU3F1YXJlID0gZmFTcXVhcmVKczsKICAgIGZhRm9udGljb25zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZvbnRpY29ucyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjgwIiwgIk0wIDMybDAgNDQ4IDQ0OCAwIDAtNDQ4LTQ0OCAwek0xODcgMTcyLjljLTE4LjQgMC0xOSA5LjktMTkgMjcuNGwwIDIzLjNjMCAyLjQtMy41IDQuNC0uNiA0LjRsNjcuNCAwLTExLjEgMzcuMy01NS43IDAgMCAxMTIuOWMwIDUuOC0yIDYuNyAzLjIgNy4zbDQzLjUgNC4xIDAgMjUuMS0xMzAuNyAwIDAtMjUuNyAyMS4zLTJjNS4yLS42IDYuNy0yLjMgNi43LTcuOWwwLTExMS40YzAtMi4zLTIuOS0yLjMtNS44LTIuM2wtMjIuMiAwIDAtMzcuNCAyOCAwIDAtMjFjMC00OS42IDI2LjUtNzAgNzcuMy03MCAzNC4xIDAgNjQuNyA4LjIgNjQuNyA1Mi44bC01MC43IDYuMWMuMy0xOC43LTQuNC0yMy0xNi4zLTIzem03NC4zIDI0MS44bDAtMjUuMSAyMC40LTIuNmM1LjItLjYgNy42LTEuNyA3LjYtNy4zbDAtMTA3LjljMC00LjEtMi45LTYuNy02LjctNy45bC0yNC4yLTYuNCA2LjctMjkuNSA4MC4yIDAgMCAxNTEuN2MwIDUuOC0yLjYgNi40IDIuOSA3LjNsMTUuNyAyLjYgMCAyNS4xLTEwMi42IDB6bTgwLjgtMjU1LjVsOSAzMy4yLTcuMyA3LjMtMzEuMi0xNi42LTMxLjIgMTYuNi03LjMtNy4zIDktMzMuMi0yMS44LTI0LjIgMy41LTkuNiAyNy43IDAgMTUuNS0yOCA5LjMgMCAxNS41IDI4IDI3LjcgMCAzLjUgOS42LTIxLjkgMjQuMnoiXQogICAgfTsKICAgIGZhVXBzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVwcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmN2UwIiwgIk0xMDMuMiAzMDNjLTUuMiAzLjYtMzIuNiAxMy4xLTMyLjYtMTlsMC0xMDQtMzIuNyAwIDAgMTAyLjZjMCA3NC45IDgwLjIgNTEuMSA5Ny45IDM5bDAtMTQxLjYtMzIuNiAwIDAgMTIzek00IDc0LjhMNCAyOTUuN2MwIDEwMy43IDc0LjkgMTM1LjIgMTg3LjcgMTg0LjEgMTEyLjQtNDguOSAxODcuNy04MC4yIDE4Ny43LTE4NC4xbDAtMjIwLjlDMjYzLjEgMTMuMiA5Ny42IDI1LjIgNCA3NC44ek0zNjIuMSAyOTUuN2MwIDg2LjYtNTMuMiAxMTMuNi0xNzAuNCAxNjUuMy0xMTcuNS01MS44LTE3MC41LTc4LjctMTcwLjUtMTY1LjNsMC0xMjYuNGMxMDIuMy05My44IDIzMS42LTEwMCAzNDAuOS04OS44bDAgMjE2LjJ6TTE1Mi41IDE4OC4zbDAgMjEyLjggMzIuNyAwIDAtNjguN2MyNC40IDcuMyA3MS43LTIuNiA3MS43LTc4LjUgMC05Ny40LTgwLjctODAuOS0xMDQuNC02NS42em0zMi43IDExNy4zbDAtMTAwLjNjOC40LTQuMiAzOC40LTEyLjcgMzguNCA0OS4zIDAgNjcuOS0zNi40IDUxLjgtMzguNCA1MXptNzkuMS04Ni40Yy4xIDQ3LjMgNTEuNiA0Mi41IDUyLjIgNzAuNCAuNiAyMy41LTMwLjQgMjMtNTAuOCA0LjlsMCAzMC4xYzM2LjIgMjEuNSA4MS45IDguMSA4My4yLTMzLjUgMS43LTUxLjUtNTQuMS00Ni42LTUzLjQtNzMuMiAuNi0yMC4zIDMwLjYtMjAuNSA0OC41LTIuMmwwLTI4LjRjLTI4LjUtMjItNzkuOS05LjItNzkuNyAzMS45eiJdCiAgICB9OwogICAgZmFBbWF6b25QYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYW1hem9uLXBheSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDJjIiwgIk0xNCAzMjUuM2MyLjMtNC4yIDUuMi00LjkgOS43LTIuNSAxMC40IDUuNiAyMC42IDExLjQgMzEuMiAxNi43IDQwLjYgMjAuMiA4My4zIDM1LjggMTI3LjQgNDYuMyAyMC44IDUgNDEuOSA5IDYzLjIgMTEuOCAzMS41IDQuMiA2My4yIDYgOTUgNS4yIDE3LjQtLjQgMzQuOC0xLjggNTIuMS0zLjggNTYuMi02LjYgMTExLjEtMjEgMTYzLjMtNDIuOCAyLjktMS4yIDUuOS0yIDkuMS0xLjIgNi43IDEuOCA5IDkgNC4xIDEzLjktMyAyLjctNi4yIDUuMi05LjYgNy40LTMwLjcgMjEuMS02NC4yIDM2LjQtOTkuNiA0Ny45LTI0LjUgNy45LTQ5LjYgMTMuOC03NS4xIDE3LjYtMTcuNiAyLjctMzUuNCA0LjMtNTMuMiA0LjgtLjggMC0xLjcgLjItMi41IC4zbC0yMS4xIDBjLS44LS4xLTEuNy0uMi0yLjUtLjMtMy42LS4yLTcuMi0uMy0xMC43LS40LTE2LjktLjgtMzMuNy0yLjUtNTAuNC01LjMtMjcuNC00LjUtNTQuMy0xMS41LTgwLjQtMjAuOS01My43LTE5LjQtMTAzLjEtNDguOS0xNDUuNi04Ny0xLjgtMS42LTMtMy44LTQuNC01LjdsMC0yek0xNzIgNjUuMWwtNC4zIC42Yy0xMy44IDEuNy0yNi44IDYuOS0zOCAxNS4xLTIuNCAxLjctNC42IDMuNS03LjEgNS40LS4yLS40LS4zLS45LS40LTEuNC0uNC0yLjctLjgtNS41LTEuMy04LjItLjctNC42LTMtNi42LTcuNi02LjZsLTExLjUgMGMtNi45IDAtOC4yIDEuMy04LjIgOC4ybDAgMjA5LjNjMCAxIDAgMiAuMSAzIC4yIDMgMiA0LjkgNC45IDUgNyAuMSAxNC4xIC4xIDIxLjEgMCAyLjkgMCA0LjctMiA1LTUgLjEtMSAuMS0yIC4xLTNsMC03Mi40YzEuMSAuOSAxLjcgMS40IDIuMiAxLjkgMTcuOSAxNC45IDM4LjUgMTkuOCA2MSAxNS40IDIwLjQtNCAzNC42LTE2LjUgNDMuOC0zNC45IDctMTMuOSA5LjktMjguNyAxMC4zLTQ0LjEgLjUtMTcuMS0xLjItMzMuOS04LjEtNDkuOC04LjUtMTkuNi0yMi42LTMyLjUtNDMuOS0zNi45LTMuMi0uNy02LjUtMS05LjgtMS41LTIuOC0uMS01LjUtLjEtOC4zLS4xek0xMjQuNiAxMDdjLS4xLS43IC4xLTEuMyAuNC0xLjlzLjgtMS4xIDEuMy0xLjRjMTMuNy05LjUgMjguOC0xNC41IDQ1LjYtMTMuMiAxNC45IDEuMSAyNy4xIDguNCAzMy41IDI1LjkgMy45IDEwLjcgNC45IDIxLjggNC45IDMzIDAgMTAuNC0uOCAyMC42LTQgMzAuNi02LjggMjEuMy0yMi40IDI5LjQtNDIuNiAyOC41LTE0LS42LTI2LjItNi0zNy40LTEzLjktLjYtLjMtMS0uOC0xLjMtMS40cy0uNC0xLjItLjQtMS45Yy4xLTE0LjEgMC0yOC4xIDAtNDIuMnMuMS0yOCAwLTQyLjF6TTMzMC4zIDY1LjFjLTEgLjEtMiAuMy0yLjkgLjQtOS43IC40LTE5LjQgMS44LTI4LjkgNC4xLTYuMSAxLjYtMTIgMy44LTE3LjkgNS44LTMuNiAxLjItNS40IDMuOC01LjMgNy43IC4xIDMuMy0uMSA2LjYgMCA5LjkgLjEgNC44IDIuMSA2LjEgNi44IDQuOSA3LjgtMiAxNS42LTQuMiAyMy41LTUuNyAxMi4zLTIuMyAyNC43LTMuMyAzNy4yLTEuNCA2LjUgMSAxMi42IDIuOSAxNi44IDguNCAzLjcgNC44IDUuMSAxMC41IDUuMyAxNi40IC4zIDguMyAuMiAxNi42IC4zIDI0LjkgMCAuNS0uMSAuOS0uMiAxLjQtLjUtLjEtLjkgMC0xLjMtLjEtMTAuNS0yLjYtMjEuMi00LjItMzItNC45LTExLjMtLjYtMjIuNSAuMS0zMy4zIDMuOS0xMi45IDQuNS0yMy4zIDEyLjMtMjkuNCAyNC45LTQuNyA5LjgtNS40IDIwLjItMy45IDMwLjcgMiAxNCA5IDI0LjggMjEuNCAzMS43IDExLjkgNi42IDI0LjggNy40IDM3LjkgNS40IDE1LjEtMi4zIDI4LjUtOC43IDQwLjMtMTguNCAuNS0uNCAxLS44IDEuNi0xLjEgLjYgMy44IDEuMSA3LjQgMS44IDExIC42IDMuMSAyLjUgNS4xIDUuNCA1LjIgNS40IC4xIDEwLjkgLjEgMTYuMyAwIDEuMyAwIDIuNS0uNSAzLjQtMS40czEuNC0yLjEgMS41LTMuM2MuMS0uOSAuMS0xLjkgLjEtMi44bDAtMTA2YzAtNC4zLS4zLTguNi0uOS0xMi45LTEuOS0xMi45LTcuNC0yMy41LTE5LTMwLjQtNi43LTQtMTQuMS02LTIxLjgtNy4xLTMuNi0uNS03LjItLjgtMTAuOC0xLjMtMy45IC4xLTcuOSAuMS0xMS45IC4xem0zNSAxMjcuN2MwIC42LS4xIDEuMi0uMyAxLjdzLS43IDEtMS4yIDEuM2MtMTEuMiA4LjEtMjMuNSAxMy41LTM3LjQgMTQuOS01LjcgLjYtMTEuNCAuNC0xNi44LTEuOC0zLTEuMS01LjYtMi45LTcuOC01LjJzLTMuNy01LjEtNC42LTguMWMtMi02LjMtMi0xMy4xLS4xLTE5LjQgMi41LTguMyA4LjQtMTMgMTYuNC0xNS42IDgtMi40IDE2LjUtMy4yIDI0LjgtMi4yIDguNCAuNyAxNi42IDIuMyAyNSAzLjQgMS42IC4yIDIuMSAxIDIuMSAyLjYtLjEgNC44IDAgOS41IDAgMTQuM3MtLjIgOS40LS4xIDE0LjF6TTYyNS4yIDMyMi4yYy0xLTUtNC44LTYuOS05LjEtOC4zLTYuOC0yLjEtMTMuOS0zLjUtMjEtMy45LTEzLjEtMS4xLTI2LjMtLjUtMzkuMiAxLjktMTQuMyAyLjctMjcuOSA3LjMtNDAgMTUuNi0xLjQgLjktMi43IDIuMS0zLjcgMy41LS40IC42LS42IDEuMy0uNyAxLjlzMCAxLjQgLjIgMi4xYy40IDEuNSAyLjEgMS45IDMuNiAxLjggLjcgMCAxLjUgMCAyLjItLjEgNy44LS44IDE1LjUtMS43IDIzLjMtMi41IDExLjQtMS4xIDIyLjktMS44IDM0LjMtLjkgNC45IC40IDkuNyAxLjMgMTQuNCAyLjcgNS4xIDEuNCA3LjQgNS4yIDcuNiAxMC40IC40IDgtMS40IDE1LjctMy41IDIzLjMtNC4xIDE1LjQtMTAgMzAuMy0xNS44IDQ1LjEtLjQgMS0uOCAyLTEgMy0uNSAyLjkgMS4yIDQuOCA0LjEgNC4xIDEuOC0uNCAzLjQtMS4zIDQuOC0yLjUgNC41LTQuMiA4LjgtOC43IDEyLjctMTMuNCAxMi44LTE2LjQgMjAuMy0zNS4zIDI0LjctNTUuNiAuOC0zLjYgMS40LTcuMyAyLjEtMTAuOWwwLTE3LjN6TTQ5My4xIDE5OWMtMTIuOS0zNS43LTI1LjgtNzEuNC0zOC43LTEwNy4yLTItNS43LTQuMi0xMS4zLTYuMy0xNi45LTEuMS0yLjktMy4yLTQuOC02LjQtNC44LTcuNi0uMS0xNS4yLS4yLTIyLjktLjEtMi41IDAtMy43IDItMy4yIDQuNSAuNSAyLjEgMS4xIDQuMSAxLjkgNi4xIDE5LjYgNDguNSAzOS4zIDk3IDU5LjEgMTQ1LjUgMS43IDQuMSAyLjEgNy42IC4yIDExLjgtMy4zIDcuMy01LjkgMTUtOS4zIDIyLjMtMyA2LjUtOCAxMS40LTE1LjIgMTMuMy01IDEuMy0xMC4yIDEuNy0xNS40IDEuMS0yLjUtLjItNS0uOC03LjUtMS0zLjQtLjItNS4xIDEuMy01LjIgNC44LS4xIDMuMy0uMSA2LjYgMCA5LjkgLjEgNS41IDIgOCA3LjQgOC45IDUuNiAxLjEgMTEuMiAxLjggMTYuOSAyIDE3LjEgLjQgMzAuNy02LjUgMzkuNS0yMS40IDMuNS01LjkgNi42LTEyIDkuMi0xOC40IDIzLjctNTkuOCA0Ny4yLTExOS43IDcwLjYtMTc5LjYgLjctMS44IDEuMy0zLjYgMS42LTUuNSAuNC0yLjgtLjktNC40LTMuNy00LjQtNi42LS4xLTEzLjMgMC0xOS45IDAtMS43LS4xLTMuNCAuMy00LjcgMS4zcy0yLjQgMi4zLTMgMy45Yy0uNSAxLjQtMS4xIDIuNy0xLjYgNC4xbC0zNC44IDEwMGMtMi41IDcuMi01LjEgMTQuNS03LjcgMjIuMi0uNC0xLjEtLjYtMS43LS45LTIuNHoiXQogICAgfTsKICAgIGZhUGFuZG9yYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwYW5kb3JhIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU3ZGEiLCAiTTIwMS4zIDMyTDAgMzIgMCA0ODAgMTIwLjIgNDgwYzExLjIgMCAyMC4zLTkuMSAyMC4zLTIwLjNsMC04Ni4xIDMwLjEgMGMxNDcuMSAwIDIwNy4zLTgyLjkgMjA3LjMtMTc5LjkgMC0xMTkuNy05MC45LTE2MS44LTE3Ni41LTE2MS44eiJdCiAgICB9OwogICAgZmFPcGVuaWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib3BlbmlkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxOWIiLCAiTTI3MS41IDQzMmwtNjggMzJDODguNSA0NTMuNyAwIDM5Mi41IDAgMzE4LjIgMCAyNDYuNyA4Mi41IDE4Ny4yIDE5MS43IDE3My45bDAgNDNjLTcxLjUgMTIuNS0xMjQgNTMtMTI0IDEwMS4zIDAgNTEgNTguNSA5My4zIDEzNS43IDEwM2wwLTM0MCA2OC0zMy4yIDAgMzg0IC4xIDB6TTQ0OCAyOTFsLTEzMS4zLTI4LjUgMzYuOC0yMC43Yy0xOS41LTExLjUtNDMuNS0yMC03MC0yNC44bDAtNDNjNDYuMiA1LjUgODcuNyAxOS41IDEyMC4zIDM5LjNsMzUtMTkuOCA5LjIgOTcuNXoiXQogICAgfTsKICAgIGZhVnNjbyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2c2NvIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU3ZGQiLCAiTTM1Ny42IDI1NmMwLTI3LjEtMTAuNi01Mi41LTI5LjctNzEuN3MtNDQuNi0yOS43LTcxLjctMjkuN2wtLjEgMGMtMjcuMSAwLTUyLjYgMTAuNi03MS43IDI5LjdzLTI5LjcgNDQuNi0yOS43IDcxLjdjMCAyNy4xIDEwLjYgNTIuNSAyOS43IDcxLjcgMTkuMiAxOS4yIDQ0LjYgMjkuNyA3MS43IDI5LjdsLjEgMGMyNy4xIDAgNTIuNi0xMC42IDcxLjctMjkuNyAxOS4yLTE5LjIgMjkuNy00NC42IDI5LjctNzEuN3pNMTc2LjMgNDgyLjFjMjMgOC4xIDQ3IDEyLjYgNzEuNiAxMy40bDAtNTkuMWMtMTcuMS0uNy0zMy41LTMuOC00OS04LjlsLTIyLjYgNTQuNnptMTM3LTU0LjZjLTE1LjUgNS4xLTMyIDguMi00OSA4LjlsMCA1OS4xYzI0LjYtLjggNDguNi01LjMgNzEuNi0xMy40bC0yMi42LTU0LjZ6TTkyLjUgNDMxLjJjMjAuMiAxOC45IDQzLjMgMzQgNjguNyA0NWwyMi41LTU0LjVjLTE4LjMtNy45LTM1LjEtMTguOC00OS44LTMxLjlMOTIuNSA0MzEuMnptMjg1LjktNDEuNGMtMTQuNiAxMy4yLTMxLjQgMjQtNDkuOCAzMS45bDIyLjUgNTQuNWMyNS40LTExIDQ4LjQtMjYuMSA2OC43LTQ1bC00MS40LTQxLjR6TTE0NS40IDM3OC4yYzEzLjYgMTIuMSAyOSAyMS45IDQ1LjggMjkgMTggNy42IDM3LjEgMTIgNTYuNyAxMi45bDAtNDYuOGMtMjYuNC0xLjgtNTAuMy0xMi4zLTY5LjEtMjguNmwtMzMuNCAzMy40em0xODgtMzMuNGMtMTguOCAxNi4zLTQyLjcgMjYuOC02OS4xIDI4LjZsMCA0Ni44YzE5LjYtLjkgMzguNy01LjMgNTYuNy0xMi45IDE2LjgtNy4xIDMyLjItMTYuOSA0NS44LTI5bC0zMy40LTMzLjR6TTM4LjUgMzU2LjZjMTAuNyAyMy4yIDI1IDQ0LjMgNDIuNSA2My4xbDQxLjMtNDEuM2MtMTIuNC0xMy40LTIyLjktMjguNi0zMC45LTQ1LjJMMzguNSAzNTYuNnptMzgyLjQtMjMuNWMtOCAxNi42LTE4LjUgMzEuOS0zMC45IDQ1LjJsNDEuMyA0MS4zYzE3LjUtMTguNyAzMS44LTM5LjkgNDIuNS02My4xbC01Mi45LTIzLjV6bS0zMzEtNjljMS4xIDE4LjggNS40IDM3LjIgMTIuOCA1NC41IDcuNSAxNy44IDE4IDM0IDMxLjIgNDguMmwzMy41LTMzLjVjLTE2LjQtMTguOC0yNi45LTQyLjgtMjguNy02OS4ybC00OC44IDB6bTI4My43IDBjLTEuOCAyNi40LTEyLjMgNTAuNC0yOC43IDY5LjJsMzMuNSAzMy41YzEzLjEtMTQuMiAyMy42LTMwLjQgMzEuMi00OC4yIDcuMy0xNy40IDExLjYtMzUuNyAxMi43LTU0LjVsLTQ4LjcgMHptLTM1Ny4xIDBjLjkgMjYuNyA2LjEgNTIuNyAxNS42IDc3LjVMODUgMzE4LjJjLTYuNC0xNy0xMC4zLTM1LjEtMTEuMy01NGwtNTcuMSAwem00MjIuMSAwYy0xIDE4LjktNSAzNy4xLTExLjMgNTRsNTIuOCAyMy41YzkuNS0yNC44IDE0LjctNTAuOCAxNS42LTc3LjVsLTU3LjEgMHpNMzIuMSAxNzAuNGMtOS41IDI0LjgtMTQuNyA1MC44LTE1LjYgNzcuNWw1Ny4xIDBjMS0xOC45IDUtMzcuMSAxMS4zLTU0TDMyLjEgMTcwLjR6bTEwMS43LTI1LjJjLTEzLjEgMTQuMi0yMy42IDMwLjQtMzEuMiA0OC4yLTcuMyAxNy40LTExLjYgMzUuNy0xMi44IDU0LjVsNDguOCAwYzEuOC0yNi40IDEyLjMtNTAuNCAyOC43LTY5LjJsLTMzLjUtMzMuNXptMjExLjEgMzMuNWMxNi40IDE4LjggMjYuOSA0Mi44IDI4LjcgNjkuMmw0OC43IDBjLTEuMS0xOC44LTUuNC0zNy4yLTEyLjctNTQuNS03LjUtMTcuOC0xOC0zNC0zMS4yLTQ4LjJsLTMzLjUgMzMuNXptODIuNCAxNS4yYzYuNCAxNyAxMC4zIDM1LjEgMTEuMyA1NGw1Ny4xIDBjLS45LTI2LjctNi4xLTUyLjctMTUuNi03Ny41bC01Mi44IDIzLjV6TTgxIDkyLjNDNjMuNCAxMTEgNDkuMiAxMzIuMiAzOC41IDE1NS40bDUyLjkgMjMuNWM4LTE2LjYgMTguNS0zMS45IDMwLjktNDUuMkw4MSA5Mi4zem0zMDkgNDEuM2MxMi40IDEzLjQgMjIuOSAyOC42IDMwLjkgNDUuMmw1Mi45LTIzLjVjLTEwLjctMjMuMi0yNS00NC4zLTQyLjUtNjMuMUwzOTAgMTMzLjd6TTI0OCA5MS44Yy0xOS42IC45LTM4LjcgNS4zLTU2LjcgMTIuOS0xNi44IDcuMS0zMi4yIDE2LjktNDUuOCAyOWwzMy40IDMzLjRjMTguOC0xNi4zIDQyLjctMjYuOCA2OS4xLTI4LjZsMC00Ni43em0xNi4zIDQ2LjdjMjYuNCAxLjggNTAuMyAxMi4zIDY5LjEgMjguNmwzMy40LTMzLjRjLTEzLjYtMTIuMS0yOS0yMS45LTQ1LjgtMjktMTgtNy42LTM3LjEtMTItNTYuNy0xMi45bDAgNDYuN3pNMTYxLjIgMzUuOGMtMjUuNCAxMS00OC40IDI2LjEtNjguNyA0NWw0MS40IDQxLjRjMTQuNy0xMy4yIDMxLjQtMjQgNDkuOC0zMS45TDE2MS4yIDM1Ljh6TTMyOC42IDkwLjNjMTguMyA3LjkgMzUuMSAxOC44IDQ5LjggMzEuOWw0MS40LTQxLjRjLTIwLjItMTguOS00My4zLTM0LTY4LjctNDVMMzI4LjYgOTAuM3pNMjQ4IDE2LjRjLTI0LjYgLjgtNDguNiA1LjMtNzEuNiAxMy40bDIyLjYgNTQuNmMxNS41LTUuMSAzMi04LjIgNDktOC45bDAtNTkuMXptMTYuMyA1OS4xYzE3LjEgLjcgMzMuNSAzLjggNDkgOC45bDIyLjYtNTQuNmMtMjMtOC4xLTQ3LTEyLjYtNzEuNi0xMy40bDAgNTkuMXpNNTEyLjIgMjY0LjJsLS4yIDBDNTA3LjggMzk5IDM5OS4yIDUwNy43IDI2NC4zIDUxMS45bDAgLjEtMTYuMyAwIDAtLjFDMTEzLjEgNTA3LjcgNC41IDM5OSAuMiAyNjQuMWwtLjIgMCAwLTE2LjMgLjIgMEM0LjUgMTEzIDExMy4xIDQuMyAyNDggLjFsMC0uMSAxNi4zIDAgMCAuMUMzOTkuMiA0LjMgNTA3LjggMTEzIDUxMiAyNDcuOWwuMiAwIDAgMTYuM3oiXQogICAgfTsKICAgIGZhVWJ1bnR1ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVidW50dSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmN2RmIiwgIk00NjkuMiA3NWMwLTIwLjEtOC0zOS4zLTIyLjItNTMuNXMtMzMuNC0yMi4yLTUzLjUtMjIuMi0zOS4zIDgtNTMuNSAyMi4yLTIyLjIgMzMuNC0yMi4yIDUzLjVjMCAyMC4xIDggMzkuMyAyMi4xIDUzLjVzMzMuNCAyMi4xIDUzLjUgMjIuMSAzOS4zLTggNTMuNS0yMi4xIDIyLjEtMzMuNCAyMi4xLTUzLjVsLjEgMHptLTMxNSAxNjUuN2E3NS42IDc1LjYgMCAxIDAgLTE1MS4yIDAgNzUuNiA3NS42IDAgMSAwIDE1MS4yIDB6TTU3IDM0NmMxOC42IDQ2LjkgNTEgODcgOTMgMTE1LjFzOTEuNSA0Mi42IDE0MiA0MS43Yy0xNC43LTE4LjYtMjIuOS00MS41LTIzLjItNjUuMi02LjgtLjktMTMuMy0yLjEtMTkuNS0zLjQtMjYuOC01LjctNTEuOS0xNy4zLTczLjYtMzRzLTM5LjMtMzguMS01MS43LTYyLjVjLTIwLjkgOS45LTQ0LjUgMTIuOC02Ny4xIDguMmwuMSAuMXptMzk1LjEgODkuOGE3NS42IDc1LjYgMCAxIDAgLTE1MS4yIDAgNzUuNiA3NS42IDAgMSAwIDE1MS4yIDB6TTQ0NCAzNTEuNmMxOC41IDE0LjggMzEuNiAzNS4yIDM3LjIgNTguMiAzMy4zLTQxLjMgNTIuNi05Mi4yIDU0LjgtMTQ1LjJzLTEyLjUtMTA1LjQtNDIuMi0xNDkuNGMtOC42IDIxLjUtMjQgMzkuNi00My44IDUxLjYgMTUuNCAyOC42IDIyLjkgNjAuOCAyMS45IDkzLjJzLTEwLjcgNjQtMjggOTEuNmwuMSAwek0xMDEuMSAxMzUuNGMxMi40IDIuNyAyNC4zIDcuNSAzNS4xIDE0LjMgMTYuNi0yNC4yIDM4LjktNDQuMSA2NC44LTU4UzI1NS44IDcwLjQgMjg1LjIgNzBjLjItNS45IC45LTExLjkgMi0xNy43IDMuNi0xNi43IDExLjEtMzIuMyAyMS44LTQ1LjUtNDcuNy0zLjgtOTUuNCA2LTEzNy42IDI4LjVTOTQuMyA5MS43IDcwLjggMTMzLjRjMi43LS4yIDUuMy0uMyA4LS4zIDcuNSAwIDE1IC44IDIyLjQgMi4zbC0uMSAweiJdCiAgICB9OwogICAgZmFWaWFjb2luID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZpYWNvaW4iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjIzNyIsICJNMzg0IDMybC02NCAwLTgwLjcgMTkyLTk0LjUgMC04MC44LTE5Mi02NCAwIDQ4IDExMi00OCAwIDAgNDggNjguNSAwIDEzLjggMzItODIuMyAwIDAgNDggMTAyLjggMCA4OS4yIDIwOCA4OS4yLTIwOCAxMDIuOCAwIDAtNDgtODIuMyAwIDEzLjgtMzIgNjguNSAwIDAtNDgtNDggMCA0OC0xMTJ6TTE5MiAzMzZsLTI3LTY0IDU0IDAtMjcgNjR6Il0KICAgIH07CiAgICBmYVpoaWh1ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInpoaWh1IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY2M2YiLCAiTTE3MC41IDE0OC4xbDAgMjE3LjUgMjMuNCAwIDcuNyAyNi40IDQyLTI2LjQgNDkuNSAwIDAtMjE3LjUtMTIyLjcgMHptOTcuOCAxOTMuOWwtMjcuOSAwLTI3LjkgMTcuNS01LjEtMTcuNS0xMS45IDAgMC0xNzAuMyA3Mi44IDAgMCAxNzAuM3pNMTQ5LjggMjQ3LjdsLTUyLjMgMGMxLjctMjcuMSAyLjItNTEuNiAyLjItNzMuNWw1MS4yIDBzMi0yMi42LTguNi0yMi4zbC04OC41IDBjMy41LTEzLjEgNy45LTI2LjcgMTMuMS00MC43IDAgMC0yNC4xIDAtMzIuMyAyMS42LTMuNCA4LjktMTMuMiA0My4xLTMwLjcgNzguMSA1LjktLjYgMjUuNC0xLjIgMzYuOC0yMi4yIDIuMS01LjkgMi41LTYuNyA1LjEtMTQuNWwyOC45IDBjMCAxMC41LTEuMiA2Ni45LTEuNyA3My40bC01Mi4zIDBjLTExLjcgMC0xNS42IDIzLjYtMTUuNiAyMy42bDY1LjYgMGMtNC40IDQ5LjktMjggOTEuOS03MC44IDEyNS4xIDIwLjUgNS45IDQwLjktLjkgNTEtOS45IDAgMCAyMy0yMC45IDM1LjYtNjkuM2w1NCA2NC45czcuOS0yNi45LTEuMi00MGMtNy42LTguOS0yOC4xLTMzLjEtMzYuOC00MS44TDg3LjkgMzEyYzQuNC0xNCA3LTI3LjYgNy45LTQwLjdsNjEuNiAwcy0uMS0yMy42LTcuNi0yMy42bDAgMHptNDEyLTEuNmMyMC44LTI1LjYgNDUtNTguNiA0NS01OC42cy0xOC42LTE0LjgtMjcuNC00LjFjLTYgOC4yLTM2LjggNDguMi0zNi44IDQ4LjJsMTkuMiAxNC40ek00MTEuOCAxODdjLTktOC4yLTI1LjkgMi4xLTI1LjkgMi4xczM5LjUgNTUgNDEuMSA1Ny40bDE5LjUtMTMuN3MtMjUuNy0zNy42LTM0LjctNDUuOWwwIDAgMCAwek02NDAgMjU4LjRjLTE5LjggMC0xMzAuOSAuOS0xMzEuMSAuOWwwLTEwMWM0LjggMCAxMi40LS40IDIyLjgtMS4yIDQwLjktMi40IDcwLjEtNCA4Ny44LTQuOCAwIDAgMTIuMi0yNy4yLS42LTMzLjQtMy4xLTEuMi0yMy4yIDQuNi0yMy4yIDQuNnMtMTY1LjIgMTYuNS0yMzIuNCAxOGMxLjYgOC44IDcuNiAxNy4xIDE1LjggMTkuNiAxMy4zIDMuNSAyMi43IDEuNyA0OS4yIC45IDI0LjgtMS42IDQzLjctMi40IDU2LjUtMi40bDAgOTkuOC0xMzMuNSAwczIuOCAyMi4zIDI1LjUgMjIuOWwxMDcuOSAwIDAgNzAuOWMwIDE0LTExLjIgMjItMjQuNSAyMS4xLTE0LjEgLjEtMjYuMS0xLjEtNDEuNy0xLjggMiA0IDYuMyAxNC40IDE5LjMgMjEuOCA5LjkgNC44IDE2LjIgNi42IDI2IDYuNiAyOS42IDAgNDUuNy0xNy4zIDQ0LjktNDUuM2wwLTczLjMgMTIyLjQgMGM5LjcgMCA4LjctMjMuOCA4LjctMjMuOGwwIDB6Il0KICAgIH07CiAgICBmYVlhbmRleCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ5YW5kZXgiLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFtdLCAiZjQxMyIsICJNMTUzLjEgMzE1LjhMNjUuNyA1MTIgMiA1MTIgOTggMzAyLjJDNTIuOSAyNzkuMyAyMi44IDIzNy44IDIyLjggMTYxLjEgMjIuNyA1My43IDkwLjggMCAxNzEuNyAwbDgyLjMgMCAwIDUxMi01NS4xIDAgMC0xOTYuMi00NS44IDB6TTE5OC45IDQ2LjVsLTI5LjQgMGMtNDQuNCAwLTg3LjQgMjkuNC04Ny40IDExNC42IDAgODIuMyAzOS40IDEwOC44IDg3LjQgMTA4LjhsMjkuNCAwIDAtMjIzLjR6Il0KICAgIH07CiAgICBmYVBpeGl2ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBpeGl2IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2NDAiLCAiTTk2IDMyQzQzIDMyIDAgNzUgMCAxMjhMMCAzODRjMCA1MyA0MyA5NiA5NiA5NmwyNTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMjU2YzAtNTMtNDMtOTYtOTYtOTZMOTYgMzJ6bTc3LjcgMjE3LjNhNjAuMSA2MC4xIDAgMSAwIDEyMC4zIDAgNjAuMSA2MC4xIDAgMSAwIC0xMjAuMyAwek0xMTkuMSAzODcuOGMtLjMtLjgtLjUtMS43LS41LTIuNmwwLTI0NC4zYzAtMS44IC43LTMuNiAyLTQuOXMzLTIgNC45LTJsMTYuOSAwYzEuMiAwIDIuMyAuMyAzLjMgLjhzMS45IDEuMyAyLjUgMi4zbDE0IDIxLjhjMTkuNy0xNS42IDQ0LjUtMjUgNzEuNi0yNSA2My42IDAgMTE1LjIgNTEuNiAxMTUuMiAxMTUuMlMyOTcuNSAzNjQuNSAyMzMuOCAzNjQuNWMtMjIgMC00Mi42LTYuMi02MC4xLTE2LjlsMCAzNy42YzAgLjktLjIgMS44LS41IDIuNnMtLjkgMS42LTEuNSAyLjItMS40IDEuMS0yLjIgMS41LTEuNyAuNS0yLjYgLjVsLTQxLjMgMGMtLjkgMC0xLjgtLjItMi42LS41cy0xLjYtLjktMi4yLTEuNS0xLjEtMS40LTEuNS0yLjJ6Il0KICAgIH07CiAgICBmYU9wZW5haSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvcGVuYWkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTdjZiIsICJNMTk2LjQgMTg1LjhsMC00OC42YzAtNC4xIDEuNS03LjIgNS4xLTkuMmw5Ny44LTU2LjNjMTMuMy03LjcgMjkuMi0xMS4zIDQ1LjYtMTEuMyA2MS40IDAgMTAwLjQgNDcuNiAxMDAuNCA5OC4zIDAgMy42IDAgNy43LS41IDExLjhMMzQzLjMgMTExLjFjLTYuMS0zLjYtMTIuMy0zLjYtMTguNCAwTDE5Ni40IDE4NS44ek00MjQuNyAzNzUuMmwwLTExNi4yYzAtNy4yLTMuMS0xMi4zLTkuMi0xNS45TDI4NyAxNjguNCAzMjkgMTQ0LjNjMy42LTIgNi43LTIgMTAuMiAwTDQzNyAyMDAuN2MyOC4yIDE2LjQgNDcuMSA1MS4yIDQ3LjEgODUgMCAzOC45LTIzIDc0LjgtNTkuNCA4OS42bDAgMHpNMTY2LjIgMjcyLjhsLTQyLTI0LjZjLTMuNi0yLTUuMS01LjEtNS4xLTkuMmwwLTExMi42YzAtNTQuOCA0Mi05Ni4zIDk4LjgtOTYuMyAyMS41IDAgNDEuNSA3LjIgNTguNCAyMEwxNzUuNCAxMDguNWMtNi4xIDMuNi05LjIgOC43LTkuMiAxNS45bDAgMTQ4LjUgMCAwem05MC40IDUyLjJsLTYwLjItMzMuOCAwLTcxLjcgNjAuMi0zMy44IDYwLjIgMzMuOCAwIDcxLjctNjAuMiAzMy44em0zOC43IDE1NS43Yy0yMS41IDAtNDEuNS03LjItNTguNC0yMGwxMDAuOS01OC40YzYuMS0zLjYgOS4yLTguNyA5LjItMTUuOWwwLTE0OC41IDQyLjUgMjQuNmMzLjYgMiA1LjEgNS4xIDUuMSA5LjJsMCAxMTIuNmMwIDU0LjgtNDIuNSA5Ni4zLTk5LjMgOTYuM2wwIDB6TTE3My44IDM2Ni41TDc2LjEgMzEwLjJjLTI4LjItMTYuNC00Ny4xLTUxLjItNDcuMS04NSAwLTM5LjQgMjMuNi03NC44IDU5LjktODkuNmwwIDExNi43YzAgNy4yIDMuMSAxMi4zIDkuMiAxNS45bDEyOCA3NC4yLTQyIDI0LjFjLTMuNiAyLTYuNyAyLTEwLjIgMHptLTUuNiA4NGMtNTcuOSAwLTEwMC40LTQzLjUtMTAwLjQtOTcuMyAwLTQuMSAuNS04LjIgMS0xMi4zbDEwMC45IDU4LjRjNi4xIDMuNiAxMi4zIDMuNiAxOC40IDBsMTI4LjUtNzQuMiAwIDQ4LjZjMCA0LjEtMS41IDcuMi01LjEgOS4ybC05Ny44IDU2LjNjLTEzLjMgNy43LTI5LjIgMTEuMy00NS42IDExLjNsMCAwem0xMjcgNjAuOWM2MiAwIDExMy43LTQ0IDEyNS40LTEwMi40IDU3LjMtMTQuOSA5NC4yLTY4LjYgOTQuMi0xMjMuNCAwLTM1LjgtMTUuNC03MC43LTQzLTk1LjcgMi42LTEwLjggNC4xLTIxLjUgNC4xLTMyLjMgMC03My4yLTU5LjQtMTI4LTEyOC0xMjgtMTMuOCAwLTI3LjEgMi00MC40IDYuNy0yMy0yMi41LTU0LjgtMzYuOS04OS42LTM2LjktNjIgMC0xMTMuNyA0NC0xMjUuNCAxMDIuNC01Ny4zIDE0LjgtOTQuMiA2OC42LTk0LjIgMTIzLjQgMCAzNS44IDE1LjQgNzAuNyA0MyA5NS43LTIuNiAxMC44LTQuMSAyMS41LTQuMSAzMi4zIDAgNzMuMiA1OS40IDEyOCAxMjggMTI4IDEzLjggMCAyNy4xLTIgNDAuNC02LjcgMjMgMjIuNSA1NC44IDM2LjkgODkuNiAzNi45eiJdCiAgICB9OwogICAgZmFTaXRoID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNpdGgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjUxMiIsICJNMCAzMmw2OS43IDExOC44LTU4LjktMTEuNSA2OS44IDkxYy0zIDE3LTMgMzQuNCAwIDUxLjRsLTY5LjggOTEgNTguOS0xMS41LTY5LjcgMTE4LjggMTE4LjgtNjkuNy0xMS41IDU4LjkgOTEtNjkuOGMxNyAzIDM0LjUgMyA1MS41IDBsOTEgNjkuOC0xMS41LTU4LjkgMTE4LjcgNjkuNy02OS43LTExOC44IDU4LjkgMTEuNS02OS44LTkxYzMtMTcgMy0zNC40IDAtNTEuNGw2OS44LTkxLTU4LjkgMTEuNSA2OS43LTExOC44LTExOC43IDY5LjcgMTEuNS01OC45LTkxLjEgNjkuOWMtOC41LTEuNS0xNy4xLTIuMy0yNS43LTIuM3MtMTcuMiAuOC0yNS43IDIuM0wxMDcuMiA0Mi44IDExOC44IDEwMS43IDAgMzJ6TTIyNCAzODAuMmExMjQuMiAxMjQuMiAwIDEgMSAwLTI0OC40IDEyNC4yIDEyNC4yIDAgMSAxIDAgMjQ4LjR6bTAtMjExLjhhODcuNiA4Ny42IDAgMSAwIDAgMTc1LjEgODcuNiA4Ny42IDAgMSAwIDAtMTc1LjF6Il0KICAgIH07CiAgICBmYU5mY0RpcmVjdGlvbmFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm5mYy1kaXJlY3Rpb25hbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTMwIiwgIk0yMTEuOCA0ODguNmMxLjYgMi41IDIuMSA1LjYgMS40IDguNS0uNiAyLjktMi40IDUuNS00LjkgNy4xLTIuNiAxLjYtNS42IDIuMS04LjYgMS41LTYxLjQtMTMuOS0xMTUuNi00OS45LTE1Mi4yLTEwMS4yUy01LjQgMjkwLjMgMS42IDIyNy43YzctNjIuNyAzNi44LTEyMC41IDgzLjctMTYyLjUgNDYuOS00MiAxMDcuNy02NS4yIDE3MC43LTY1LjIgMS41IDAgMi4xIC4zIDQuMyAuOSAxLjQgLjYgMS44IDEuNCAzLjcgMi41IDEuMSAxLjEgMS45IDIuMyAyLjUgMy43IC41IDEuNCAuOCAyLjggLjggNC4zbDAgMTAxIDI0LjUtMjUuOWMxLTEuMSAyLjItMiAzLjYtMi42IDEuMy0uNiAyLjgtLjkgNC4zLTEgMS41LS4xIDIuOSAuMiA0LjMgLjdzMi43IDEuMyAzLjggMi40YzEgMSAxLjkgMi4yIDIuNSAzLjYgLjYgMS4zIDEgMi44IDEgNC4zcy0uMiAzLS43IDQuM2MtLjYgMS40LTEuNCAyLjYtMi40IDMuN2wtNDQgNDYuNmMtMS4xIDEuMS0yLjMgMi0zLjcgMi42LTEuNSAuNi0zIC45LTUuNCAuOS0uNiAwLTIuMi0uMy0zLjYtLjlzLTIuNy0xLjUtMy43LTIuNmwtNDQuMS00Ni42Yy0yLTIuMi0zLjEtNS4xLTMtOC4xIDAtMyAxLjMtNi43IDMuNS03LjkgMi4yLTIuMSA1LjEtMy4yIDguMS0zLjEgMyAuMSA1LjggMS4zIDcuOSAzLjVsMjQuNSAyNiAwLTg5LjVjLTU2LjQgMi44LTEwOS44IDI1LjgtMTUwLjUgNjUtNDAuNiAzOS4xLTY1LjcgOTEuNy03MC42IDE0Ny45UzM0LjQgMzQ4LjEgNjcuNyAzOTMuN2MzMi40IDQ1LjUgODIgNzcuNSAxMzcgODkuOSAyLjkgLjcgNS41IDIuNSA3LjEgNXpNMTcxLjQgMTI2LjFjLS44IDEuMy0xLjkgMi40LTMuMSAzLjItMjAuNSAxMy45LTM3LjIgMzIuNi00OC44IDU0LjVzLTE3LjcgNDYuMy0xNy43IDcxLjEgNi4xIDQ5LjIgMTcuNyA3MC4yYzExLjYgMjIuOCAyOC4zIDQxLjUgNDguOCA1NS40IDIuNSAxLjcgNC4yIDQuMyA0LjcgNy4zIC42IDIuOS0uOSA2LTEuNyA4LjQtMS43IDIuNS01LjIgNC4yLTcuMyAzLjktMi45IDEuNC02IC44LTguNC0uOS0yMy42LTE2LTQyLjgtMzcuNS01Ni4xLTYyLjctMTMuMy0yNS4xLTIwLjMtNTMuMS0yMC4zLTgxLjYgMC0yOC40IDctNTYuNSAyMC4zLTgxLjYgMTMuMy0yNS4yIDMyLjUtNDYuNyA1Ni4xLTYyLjcgMS4yLS44IDIuNi0xLjQgNC0xLjggMS41LS4zIDMtLjMgNC41IDAgMS40IC4yIDIuOCAuOCA0LjEgMS42czIuMyAxLjkgMy4yIDMuMWMuOCAxLjIgMS40IDIuNiAxLjcgNC4xcy4zIDMgMCA0LjRjLS4zIDEuNS0uOCAyLjktMS43IDQuMXpNMzQwLjkgMzgzLjVjLjgtMS4yIDEuOS0yLjMgMi4yLTMuMWwwLS4xYzIxLjMtMTQgMzgtMzIuNyA0OS42LTU0LjYgMTEuNS0yMS44IDE3LjUtNDYuMiAxNy41LTcwLjlzLTYtNDkuMS0xNy41LTcxYy0xMS42LTIyLjctMjguMy00MC41LTQ5LjYtNTQuNS0uMy0uOC0xLjQtMS45LTIuMi0zLjEtLjgtMS4zLTEuNC0yLjctMS42LTQuMS0xLjItMS41LS4zLTMgMC00LjQgLjMtMS41IC45LTIuOSAxLjctNC4xIC45LTEuMiAxLjEtMi4zIDMuMi0zLjEgMS4yLS44IDIuNi0xLjMgNC4xLTEuNnMyLjktLjMgNC40IDAgMi44IC45IDQuMSAxLjhjMjMuNCAxNiA0Mi43IDM3LjUgNTUuOSA2Mi42IDEzLjMgMjUuMSAxOS40IDUzLjEgMTkuNCA4MS41IDAgMjguNS02LjEgNTYuNS0xOS40IDgxLjYtMTMuMiAyNS4xLTMyLjUgNDYuNi01NS45IDYyLjYtMS4zIC45LTIuNiAxLjUtNC4xIDEuOHMtMi45IC4zLTQuNCAwLTIuOS0xLjctNC4xLTEuNmMtMi4xLS44LTIuMy0xLjktMy4yLTMuMS0uOC0xLjItMS40LTIuNi0xLjctNC4xLS4zLTEuNC0xLjItMi45IDAtNC40IC4yLTEuNCAuOC0yLjggMS42LTQuMXpNMzEyLjMgNi4zYzU2LjIgMTIuNyAxMDYuNCA0NCAxNDIuNyA4OC43IDMwLjQgMzcuNiA0OS42IDgzIDU1LjMgMTMxIDUuNiA0OC0yLjQgOTYuNy0yMy4yIDE0MC4zLTIwLjkgNDMuNi01My42IDgwLjUtOTQuNSAxMDYuMy00MC45IDI1LjctODguMiAzOS40LTEzNi42IDM5LjQtMS41IDAtMi45LS4zLTQuMy0uOS0xLjQtLjUtMi42LTEuNC0zLjctMi40LTEuOS0xLjEtMS45LTIuMy0yLjQtMy43LS42LTEuNC0uOS0yLjgtLjktNC4zbDAtOTkuMi0yNC41IDI2Yy0yLjEgMi4yLTQuOSAyLjYtNy45IDMuNi0zIC4xLTUuOS0xLjEtOC4xLTQtMi4yLTEuMi0zLjUtNC0zLjUtNy0uMS0zIDEtNS45IDMtOC4xbDQ0LjEtNDYuNmMxLjMtMi4yIDUuMS0zLjQgNy4zLTMuNCA0IDAgNi45IDEuMiA5LjEgMy40bDQ0IDQ2LjZjMi4xIDIuMiAzLjIgNS4xIDMuMSA4LjFzLTEuNCA1LjgtMy41IDdjLTIuMiAyLjktNS4xIDQuMS04LjEgNC0zLTEtNS45LTEuNC03LjktMy42bC0yNC41LTI1LjkgMCA4Ny41YzU2LjQtMi44IDEwOS44LTI1LjggMTUwLjUtNjUgNDAuNy00MCA2NS44LTkxLjcgNzAuNy0xNDcuOSA0LjgtNTcuMS0xMC44LTExMi4zLTQ0LjEtMTU3LjktMzMuMy00NS42LTgyLTc3LjUtMTM3LTg5LjktMS41LS4zLTIuOC0uOS00LjEtMS44LTEuMi0uOS0yLjItMS45LTMtMy4yLS44LTEuMi0yLjItMi42LTEuNi00LjEtLjItMS41LS4yLTMgLjEtNC40IC40LTEuNCAxLTIuOCAxLjgtNCAuOS0xLjIgMi0yLjIgMy4yLTMgMS4zLS44IDIuNy0xLjMgNC4xLTEuNiAxLjUtLjMgMy0uMiA0LjQgLjF6bTQwLjggMjQ5LjhjMCAzMS40LTE3LjUgNjEuMS00OS4zIDgzLjUtMi4xIDEuNS00LjggMi4zLTcuNCAyLTIuNy0uMi01LjItMS4zLTctMy4ybC03MC4xLTY5LjhjLTIuMi0yLjEtNC4yLTUtMy40LTggMC0zIDEuMi01LjkgMy4zLTggMi4yLTIuMSA1LTMuMyA4LTMuM3M1LjkgMS4yIDggMy4zbDYzLjEgNjIuOGMyMC44LTE3LjEgMzIuMi0zNy45IDMyLjItNTkuMyAwLTIzLjktMTQuMS00Ny0zOS43LTY1LjEtMi41LTEuNy00LjEtNC4zLTQuNi03LjMtLjUtMi45IC4xLTYgMS45LTguNCAxLjctMi41IDQuMy00LjEgNy4zLTQuNiAyLjktLjUgNiAuMSA4LjQgMS45IDMxLjggMjIuNCA0OS4zIDUyLjEgNDkuMyA4My41ek0yMTYuNyAzNDEuNWMtMyAuNS02LS4yLTguNS0xLjktMzEuNy0yMi40LTUwLjEtNTIuMS01MC4xLTgzLjVzMTguNC02MS4xIDUwLjEtODMuNWMyLjItMS42IDQuOS0yLjMgNy41LTIuMSAyLjcgLjMgNS4xIDEuNCA3IDMuM2w3MC4xIDY5LjhjMi4xIDIuMSAzLjMgNSAzLjMgOHMtMiA1LjgtMy4zIDhjLTIuMSAyLjEtNSAzLjMtNy45IDMuMy0zIDAtNi44LTEuMi04LTMuM2wtNjMuMS02Mi45Yy0yMC45IDE3LjMtMzIuMiAzOC0zMi4yIDU5LjQgMCAyMyAxNC4xIDQ3IDM5LjcgNjUgMi40IDEuOCA0LjEgNC40IDQuNiA3LjQgLjUgMi45LS4yIDUuOS0xLjkgOC40LTEuNyAyLjQtNC40IDQuMS03LjMgNC42eiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNCeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLWJ5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZTciLCAiTTMyMi45IDE5NC40bDAgMTAxLjQtMjguMyAwIDAgMTIwLjUtNzcuMSAwIDAtMTIwLjQtMjguMyAwIDAtMTAxLjVjMC00LjQgMS42LTguMiA0LjYtMTEuMyAzLjEtMy4xIDYuOS00LjcgMTEuMy00LjdsMTAxLjkgMGM0LjEgMCA3LjggMS42IDExLjEgNC43IDMuMSAzLjIgNC44IDYuOSA0LjggMTEuM3ptLTMyLjUtNjQuNWEzNC41IDM0LjUgMCAxIDEgLTY5IC44IDM0LjUgMzQuNSAwIDEgMSA2OS0uOHpNMjU1LjYgOEMzOTcuNCA4IDUwNCAxMTguMSA1MDQgMjU2IDUwNCA0MDMuMSAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS42IDUwNCA4IDM5NC41IDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4em0uOCA0NC43Yy0xMTguMiAwLTIwMy43IDk3LjktMjAzLjcgMjAzLjMgMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOCAuMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zeiJdCiAgICB9OwogICAgZmFVbWJyYWNvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVtYnJhY28iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjhlOCIsICJNMjU2LjMgOGEyNDggMjQ4IDAgMSAwIC0uNyA0OTYgMjQ4IDI0OCAwIDEgMCAuNy00OTZ6bTE0NSAyNjZjLS44IDI3LjEtNS40IDQ4LjgtMTQgNjVzLTIzLjEgMjcuOS00My41IDM1Yy0yMC40IDcuMS00OC45IDEwLjYtODUuNCAxMC41bC00LjYgMGMtMzYuNSAuMS02NS0zLjMtODUuNC0xMC41cy0zNC45LTE4LjgtNDMuNS0zNWMtOC42LTE2LjItMTMuMi0zNy45LTE0LTY1LS43LTEwLjItLjctMjAuNSAwLTMwLjcgLjQtMTQuNyAxLjYtMjkuMyAzLjYtNDMuOSAxLjktMTMuNCAzLjYtMjIuNiA1LjQtMzIgMS00LjkgMS4zLTYuNCAxLjgtOC40IC4zLTEuMSAuOS0yLjEgMS44LTIuOHMyLTEuMSAzLjEtMS4xbC43IDAgMzIgNWMxLjIgLjIgMi4yIC44IDMgMS43czEuMiAyLjEgMS4yIDMuM2MwIC4zIDAgLjUgMCAuOGwtMS43IDguOGMtMS42IDguOC0zLjIgMjAuMS00LjggMzMuNy0xLjcgMTQtMi41IDI4LjEtMi42IDQyLjItLjIgMjcgMi41IDQ2LjkgOC4xIDU5LjggMi44IDYuNCA3LjIgMTIgMTIuNiAxNi40czExLjkgNy40IDE4LjcgOC44YzE4LjggNCAzOC4xIDUuNyA1Ny4zIDUuMWwxMC4zIDBjMTkuMiAuNiAzOC41LTEuMiA1Ny4zLTUuMiA2LjgtMS40IDEzLjItNC41IDE4LjYtOC44czkuNy0xMCAxMi41LTE2LjRjNS43LTEyLjkgOC40LTMyLjkgOC4xLTU5LjgtLjEtMTQuMS0xLTI4LjItMi42LTQyLjEtMS43LTEzLjYtMy4zLTI0LjgtNC45LTMzLjdsLTEuNy04LjhjMC0uMyAwLS41IDAtLjggMC0xLjIgLjQtMi40IDEuMi0zLjNzMS44LTEuNSAzLTEuN2wzMi01IC44IDBjMS4xIDAgMi4yIC40IDMuMSAxLjFzMS41IDEuNyAxLjggMi44Yy42IDIgLjggMy42IDEuOCA4LjQgMS44IDkuNiAzLjUgMTguOCA1LjQgMzIgMiAxNC42IDMuMiAyOS4yIDMuNiA0My45IC43IDEwLjIgLjcgMjAuNSAwIDMwLjdsMCAweiJdCiAgICB9OwogICAgZmFIb29saSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJob29saSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDI3IiwgIk0xNDQuNSAzNTJsMzguMyAuOGMtMTMuMi00LjYtMjYtMTAuMi0zOC4zLTE2LjhsMCAxNnptNTcuNy01LjNsMCA1LjMtMTkuNCAuOGMzNi41IDEyLjUgNjkuOSAxNC4yIDk0LjcgNy4yLTE5LjkgLjItNDUuOC0yLjYtNzUuMy0xMy4zek02MTEuMSAyMzEuNWMxNS45IDAgMjguOS0xMi45IDI4LjktMjguOXMtMTIuOS0yNC41LTI4LjktMjQuNWMtMTUuOSAwLTI4LjkgOC42LTI4LjkgMjQuNXMxMi45IDI4LjkgMjguOSAyOC45ek01ODIuMSAzNTJsNTcuOSAwIDAtMTEwLjUtNTcuOSAwIDAgMTEwLjV6bS03My43IDBsNTcuOSAwIDAtMTk1LjMtNTcuOSAyNy4zIDAgMTY4em0tMzEtMTE5LjRjLTE4LjItMTguMi01MC40LTE3LjEtNTAuNC0xNy4xcy0zMi4zLTEuMS01MC40IDE3LjFjLTE4LjIgMTguMi0xNi44IDMzLjktMTYuOCA1Mi42cy0xLjQgMzQuMyAxNi44IDUyLjUgNTAuNCAxNy4xIDUwLjQgMTcuMSAzMi4zIDEuMSA1MC40LTE3LjFjMTguMi0xOC4yIDE2LjgtMzMuOCAxNi44LTUyLjUtLjEtMTguOCAxLjMtMzQuNS0xNi44LTUyLjZ6bS0zOS44IDcxLjljMCAzLjYtMS44IDEyLjUtMTAuNyAxMi41cy0xMC43LTguOS0xMC43LTEyLjVsMC00MC40YzAtOC43IDcuMy0xMC45IDEwLjctMTAuOXMxMC43IDIuMSAxMC43IDEwLjlsMCA0MC40ek0zMzEuNCAyMzIuNmMtMTguMi0xOC4yLTUwLjQtMTcuMS01MC40LTE3LjFzLTMyLjItMS4xLTUwLjQgMTcuMWMtMS45IDEuOS0zLjcgMy45LTUuMyA2LTM4LjItMjkuNi03Mi41LTQ2LjUtMTAyLjEtNjEuMWwwLTIwLjctMjIuNSAxMC42Yy01NC40LTIyLjEtODktMTguMi05Ny4zIC4xIDAgMC0yNC45IDMyLjggNjEuOCAxMTAuOGwwIDczLjcgNTcuOSAwIDAtMjguNmMtNi41LTQuMi0xMy04LjctMTkuNC0xMy42LTE0LjgtMTEuMi0yNy40LTIxLjYtMzguNC0zMS40bDAtMzFjMTMuMSAxNC43IDMwLjUgMzEuNCA1My40IDUwLjNsNC41IDMuNiAwLTI5LjhjMC02LjkgMS43LTE4LjIgMTAuOC0xOC4yczEwLjYgNi45IDEwLjYgMTVsMCA0OC43YzE4IDEyLjIgMzcuMyAyMi4xIDU3LjcgMjkuNmwwLTkzLjljMC0xOC43LTEzLjQtMzcuNC00MC42LTM3LjQtMTUuOC0uMS0zMC41IDguMi0zOC41IDIxLjlsMC01NC4zYzQxLjkgMjAuOSA4My45IDQ2LjUgOTkuOSA1OC4zLTEwLjIgMTQuNi05LjMgMjguMS05LjMgNDMuNyAwIDE4LjctMS40IDM0LjMgMTYuOCA1Mi41czUwLjQgMTcuMSA1MC40IDE3LjEgMzIuMyAxLjEgNTAuNC0xNy4xYzE4LjItMTguMiAxNi43LTMzLjggMTYuNy01Mi41IDAtMTguNSAxLjUtMzQuMi0xNi43LTUyLjN6TTY1LjIgMTg0bDAgNjMuM2MtNDguNy01NC41LTM4LjktNzYtMzUuMi03OS4xIDEzLjUtMTEuNCAzNy41LTggNjQuNCAyLjFMNjUuMiAxODR6TTI5MS43IDMwNC41YzAgMy42LTEuOCAxMi41LTEwLjcgMTIuNXMtMTAuNy04LjktMTAuNy0xMi41bDAtNDAuNGMwLTguNyA3LjMtMTAuOSAxMC43LTEwLjlzMTAuNyAyLjEgMTAuNyAxMC45bDAgNDAuNHoiXQogICAgfTsKICAgIGZhU3F1YXJlR2l0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1naXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZ2l0LXNxdWFyZSJdLCAiZjFkMiIsICJNMTIwLjggMzM1LjVjLTUuOS0uNC0xMi42LS44LTIwLjItMS4zLTMuMyA0LjEtNi42IDguNC02LjYgMTMuNSAwIDE4LjUgNjUuNSAxOC41IDY1LjUtMS41IDAtOC4zLTcuNC04LjctMzguOC0xMC43bC4xIDB6bTcuOC0xMTcuOWMtMzIuMyAwLTMzLjcgNDQuNS0uNyA0NC41IDMyLjUgMCAzMS43LTQ0LjUgLjctNDQuNXpNMzg0IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTI0My45IDE3Mi4yYy0xNC41IDAtMjIuOS04LjQtMjIuOS0yMi45czguNC0yMi4zIDIyLjktMjIuM2MxNC43IDAgMjMuMSA3LjggMjMuMSAyMi4zcy04LjQgMjIuOS0yMy4xIDIyLjl6TTE0OS42IDE5NWw0OS41IDAgMCAyMS42LTIzLjQgMS44YzQuNiA1LjggOS40IDE0IDkuNCAyNS43IDAgNDguNy01Ny4yIDQ3LjItNzQuMiA0Mi40bC04LjQgMTMuNGM1IC4zIDkuOCAuNiAxNC4zIC44IDU2LjMgMy4yIDgwLjUgNC42IDgwLjUgMzguNSAwIDI5LjItMjUuNyA0NS43LTY5LjkgNDUuNy00NiAwLTYzLjUtMTEuNi02My41LTMxLjcgMC0xMS40IDUuMS0xNy41IDE0LTI1LjktOC40LTMuNS0xMS4yLTkuOS0xMS4yLTE2LjggMC05LjYgNy40LTE2LjMgMjMtMzAuNmwuMi0uMmMtMTIuNC02LjEtMjEuOC0xOS4zLTIxLjgtMzguMSAwLTUxLjYgNTYuNi01My4zIDgxLjYtNDYuOGwtLjEgLjJ6TTI3MC41IDMwMy4xbDEzIDEuOCAwIDIwLjEtNzIuNCAwIDAtMjAuMWMyLjctLjQgNS0uNyA2LjktLjkgOS45LTEuMiAxMC4xLTEuMyAxMC4xLTZsMC03NC43YzAtNC40LS45LTQuNy0xMC4xLTcuOC0xLjktLjctNC4yLTEuNC02LjktMi40bDIuOC0yMC42IDUyLjYgMCAwIDEwNS41YzAgNC4xIC4yIDQuNiA0LjEgNS4xbC0uMSAwem0xMDYuNi0xMC40TDM4NCAzMTVjLTEwLjkgNS40LTI2LjkgMTAuMi00MS40IDEwLjItMzAuMiAwLTQxLjctMTIuMi00MS43LTQwLjlsMC02Ni42YzAtLjggMC0xLjQtLjItMS44LS44LTEuMi00LjItLjctMTkuNi0uN2wwLTIyLjZjMjIuMy0yLjUgMzEuMi0xMy43IDM0LTQxLjRsMjQuMiAwYzAgMzMuMy0uNiAzOCAuNyAzOC42IC4zIC4xIC43IDAgMS4zIDBsMzUuOCAwIDAgMjUuNC0zNy44IDAgMCA2MS42Yy0uMiA2LjMtLjkgMzAuNCAzNy45IDE1LjlsLS4xIDB6Il0KICAgIH07CiAgICBmYUdpdFNxdWFyZSA9IGZhU3F1YXJlR2l0OwogICAgZmFPZG5va2xhc3NuaWtpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm9kbm9rbGFzc25pa2kiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjI2MyIsICJNMjc1LjEgMzM0Yy0yNy40IDE3LjQtNjUuMSAyNC4zLTkwIDI2LjlsMjAuOSAyMC42IDc2LjMgNzYuM2MyNy45IDI4LjYtMTcuNSA3My4zLTQ1LjcgNDUuNy0xOS4xLTE5LjQtNDcuMS00Ny40LTc2LjMtNzYuNkw4NCA1MDMuNGMtMjguMiAyNy41LTczLjYtMTcuNi00NS40LTQ1LjcgMTkuNC0xOS40IDQ3LjEtNDcuNCA3Ni4zLTc2LjNsMjAuNi0yMC42Yy0yNC42LTIuNi02Mi45LTkuMS05MC42LTI2LjktMzIuNi0yMS00Ni45LTMzLjMtMzQuMy01OSA3LjQtMTQuNiAyNy43LTI2LjkgNTQuNi01LjcgMCAwIDM2LjMgMjguOSA5NC45IDI4LjlTMjU1IDI2OS4yIDI1NSAyNjkuMmMyNi45LTIxLjEgNDcuMS04LjkgNTQuNiA1LjcgMTIuNCAyNS43LTEuOSAzOC0zNC41IDU5LjF6bTE0LjYtMjA0LjdhMTI5LjcgMTI5LjcgMCAxIDEgLTI1OS40IC40IDEyOS43IDEyOS43IDAgMSAxIDI1OS40LS40em0tMTkzLjQgLjRhNjMuNyA2My43IDAgMSAwIDEyNy40LS40IDYzLjcgNjMuNyAwIDEgMCAtMTI3LjQgLjR6Il0KICAgIH07CiAgICBmYURydXBhbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkcnVwYWwiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFhOSIsICJNMjcyLjMgMTA4LjFDMjM2LjUgNzIuNSAyMDIuNSAzOC40IDE5Mi40IDAgMTgyLjQgMzguNCAxNDguMSA3Mi41IDExMi40IDEwOC4xIDU4LjggMTYxLjctMS45IDIyMi40LTEuOSAzMTMuNC00LjMgNDIwLjcgODAuOCA1MDkuNiAxODguMSA1MTJzMTk2LjItODIuOCAxOTguNS0xOTAuMWMuMS0yLjggLjEtNS42IDAtOC41IDAtOTEuMS02MC44LTE1MS43LTExNC4zLTIwNS4zek05OCAzMzEuMWMtNS45IDcuNS0xMSAxNS42LTE1LjIgMjQuMi0uMyAuNy0uOCAxLjMtMS4zIDEuOHMtMS4yIC44LTIgMWwtMS43IDBjLTQuMyAwLTkuMi04LjUtOS4yLTguNS0xLjMtMi0yLjUtNC4yLTMuNy02LjRsLS44LTEuOGMtMTEuMi0yNS43LTEuNS02Mi4zLTEuNS02Mi4zIDQuOC0xNy44IDEyLjctMzQuNyAyMy4yLTQ5LjkgNi40LTkuNiAxMy41LTE4LjkgMjEtMjcuN2w5LjIgOS4yIDQzLjUgNDQuNGMuOCAuOSAxLjMgMi4xIDEuMyAzLjNzLS41IDIuNC0xLjMgMy4zTDExNC4xIDMxMi4zIDk4IDMzMS4xem05Ni42IDEyNy4zYy0xMi45LS4xLTI1LjYtMy45LTM2LjQtMTFzLTE5LjQtMTcuMS0yNC42LTI4LjktNy0yNC45LTUtMzcuNyA3LjYtMjQuNyAxNi4yLTM0LjRjMTQuMi0xNi45IDMxLjUtMzMuNSA1MC4zLTU1LjMgMjIuMyAyMy44IDM2LjkgNDAuMSA1MS4yIDU4IDEuMSAxLjQgMi4xIDIuOSAzIDQuNCA3LjggMTEuMSAxMiAyNC40IDEyIDM4IDAgOC44LTEuNyAxNy40LTUgMjUuNXMtOC4yIDE1LjUtMTQuNCAyMS43LTEzLjUgMTEuMS0yMS42IDE0LjUtMTYuNyA1LjEtMjUuNSA1LjFsLS4yIDB6TTMyMC43IDM1MS42Yy0uNCAxLjQtMS4yIDIuNi0yLjMgMy42cy0yLjQgMS42LTMuOCAxLjhsLTEuMyAwYy0yLjYtLjktNC45LTIuNy02LjMtNS4xLTExLjYtMTcuNS0yNC45LTMzLjktMzkuNS00OWwtMTcuOC0xOC40LTU5LjEtNjEuM2MtMTIuNC0xMS41LTI0LjItMjMuNi0zNS40LTM2LjMtLjMtLjUtLjYtLjktLjktMS40LTItMi44LTMuNi01LjktNC43LTkuMmwwLTEuOGMtLjgtNS0uNC0xMC4xIDEuMi0xNXM0LjQtOS4yIDgtMTIuN2MxMS40LTExLjQgMjMtMjMgMzMuOC0zNC45IDEyIDEzLjMgMjQuOCAyNiAzNy40IDM4LjYgMjUuOCAyNCA0OS4xIDUwLjUgNjkuNiA3OS4xIDE3LjMgMjQuNSAyNi43IDUzLjggMjcgODMuOC0uMSAxMi45LTIuMiAyNS44LTYgMzguMnoiXQogICAgfTsKICAgIGZhQmxvZ2dlckIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmxvZ2dlci1iIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzN2QiLCAiTTQ0Ni42IDIyMi43Yy0xLjgtOC02LjgtMTUuNC0xMi41LTE4LjUtMS44LTEtMTMtMi4yLTI1LTIuNy0yMC4xLS45LTIyLjMtMS4zLTI4LjctNS0xMC4xLTUuOS0xMi44LTEyLjMtMTIuOS0yOS41LS4xLTMzLTEzLjgtNjMuNy00MC45LTkxLjMtMTkuMy0xOS43LTQwLjktMzMtNjUuNS00MC41LTUuOS0xLjgtMTkuMS0yLjQtNjMuMy0yLjktNjkuNC0uOC04NC44IC42LTEwOC40IDEwLTQzLjUgMTcuMi03NC43IDUzLjgtODYuMSAxMDAuNi0yLjEgOC44LTIuNiAyMi45LTMuMSAxMDMuOS0uNiAxMDEuNSAuMSAxMTYuNCA2LjQgMTM2LjUgMTUuNiA0OS42IDU5LjkgODYuMyAxMDQuNCA5NC4zIDE0LjggMi43IDE5Ny4zIDMuMyAyMTYgLjggMzIuNS00LjQgNTgtMTcuNSA4MS45LTQxLjkgMTcuMy0xNy43IDI4LjEtMzYuOCAzNS4yLTYyLjEgNC45LTE3LjYgNC41LTE0Mi44IDIuNS0xNTEuN3pNMTI0LjUgMTU5LjFjNy44LTcuOSAxMC04LjIgNTguOC04LjIgNDMuOSAwIDQ1LjQgLjEgNTEuOCAzLjQgOS4zIDQuNyAxMy40IDExLjMgMTMuNCAyMS45IDAgOS41LTMuOCAxNi4yLTEyLjMgMjEuNi00LjYgMi45LTcuMyAzLjEtNTAuMyAzLjMtMjYuNSAuMi00Ny43LS40LTUwLjgtMS4yLTE2LjYtNC43LTIyLjgtMjguNS0xMC42LTQwLjh6TTMxNi4zIDM1OC45bC0xNC45IDIuNC03Ny41IC45Yy02OC4xIC44LTg3LjMtLjQtOTAuOS0yLTcuMS0zLjEtMTMuOC0xMS43LTE0LjktMTkuNC0xLjEtNy4zIDIuNi0xNy4zIDguMi0yMi40IDcuMS02LjQgMTAuMi02LjYgOTcuMy02LjcgODkuNi0uMSA4OS4xLS4xIDk3LjYgNy44IDEyLjEgMTEuMyA5LjUgMzEuMi00LjkgMzkuNHoiXQogICAgfTsKICAgIGZhSW52aXNpb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaW52aXNpb24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjdiMCIsICJNNDA3LjQgMzJMNDAuNiAzMkMxOC4yIDMyIDAgNTAuMiAwIDcyLjZMMCA0MzkuNEMwIDQ2MS44IDE4LjIgNDgwIDQwLjYgNDgwbDM2Ni44IDBjMjIuNCAwIDQwLjYtMTguMiA0MC42LTQwLjZsMC0zNjYuOEM0NDggNTAuMiA0MjkuOCAzMiA0MDcuNCAzMnpNMTc2LjEgMTQ1LjZjLjQgMjMuNC0yMi40IDI3LjMtMjYuNiAyNy40LTE0LjkgMC0yNy4xLTEyLTI3LjEtMjcgLjEtMzUuMiA1My4xLTM1LjUgNTMuNy0uNHpNMzMyLjggMzc3Yy02NS42IDAtMzQuMS03NC0yNS0xMDYuNiAxNC4xLTQ2LjQtNDUuMi01OS01OS45IC43bC0yNS44IDEwMy4zLTQ1LjEgMCA4LjEtMzIuNWMtMzEuNSA1MS44LTk0LjYgNDQuNC05NC42LTQuMyAuMS0xNC4zIC45LTE0IDIzLTEwNC4xbC0zMS44IDAgOS43LTM1LjYgNzYuNCAwYy0zMy42IDEzMy43LTMyLjYgMTI2LjktMzIuOSAxMzguMiAwIDIwLjkgNDAuOSAxMy41IDU3LjQtMjMuMmwxOS44LTc5LjQtMzIuMyAwIDkuNy0zNS42IDY4LjggMC04LjkgNDAuNWM0MC41LTc1LjUgMTI3LjktNDcuOCAxMDEuOCAzOC0xNC4yIDUxLjEtMTQuNiA1MC43LTE0LjkgNTguOCAwIDE1LjUgMTcuNSAyMi42IDMxLjgtMTYuOUwzODYgMzI1Yy0xMC41IDM2LjctMjkuNCA1Mi01My4yIDUyeiJdCiAgICB9OwogICAgZmFGYWNlYm9va0YgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmFjZWJvb2stZiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMzllIiwgIk04MCAyOTkuM2wwIDIxMi43IDExNiAwIDAtMjEyLjcgODYuNSAwIDE4LTk3LjgtMTA0LjUgMCAwLTM0LjZjMC01MS43IDIwLjMtNzEuNSA3Mi43LTcxLjUgMTYuMyAwIDI5LjQgLjQgMzcgMS4ybDAtODguN0MyOTEuNCA0IDI1Ni40IDAgMjM2LjIgMCAxMjkuMyAwIDgwIDUwLjUgODAgMTU5LjRsMCA0Mi4xLTY2IDAgMCA5Ny44IDY2IDB6Il0KICAgIH07CiAgICBmYUNlbnRvcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjZW50b3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjc4OSIsICJNMjg5LjYgOTcuNWwzMS42IDMxLjctNzYuMyA3Ni41IDAtMTA4LjIgNDQuNyAwek0xMjcuMiAxMjkuMmw3Ni4zIDc2LjUgMC0xMDguMi00NC43IDAtMzEuNiAzMS43em00MS41LTQxLjZsNDQuNyAwIDAgMTI3LjkgMTAuOCAxMC44IDEwLjgtMTAuOCAwLTEyNy45IDQ0LjcgMC01NS41LTU1LjYtNTUuNSA1NS42em0yNi4yIDE2OC4xbC0xMC44LTEwLjgtMTI4LjYgMCAwLTQ0LjgtNTUuNSA1NS42IDU1LjUgNTUuNiAwLTQ0LjggMTI4LjYgMCAxMC44LTEwLjh6TTI3NC4yIDIzNWwxMDcuOSAwIDAtNDQuOC0zMS42LTMxLjctNzYuMyA3Ni41em0xNzMuMyAyMC43bC01NS41LTU1LjYgMCA0NC44LTEyNy43IDAtMTAuOCAxMC44IDEwLjggMTAuOCAxMjcuNyAwIDAgNDQuOCA1NS41LTU1LjZ6TTY1LjQgMTc2LjJsMzIuNS0zMS43IDkwLjMgOTAuNSAxNS4zIDAgMC0xNS4zLTkwLjMtOTAuNSAzMS42LTMxLjctNzkuNCAwIDAgNzguN3pNMzgyLjEgOTcuNWwtNzguNSAwIDMxLjYgMzEuNy05MC4zIDkwLjUgMCAxNS4zIDE1LjMgMCA5MC4zLTkwLjUgMzEuNiAzMS43IDAtNzguN3pNMjAzLjUgNDEzLjlsMC0xMDguMS03Ni4zIDc2LjUgMzEuNiAzMS43IDQ0LjcgMCAwLS4xek02NS40IDIzNWwxMDguOCAwLTc2LjMtNzYuNS0zMi41IDMxLjcgMCA0NC44ek0zODIuMSAzMzUuMmwtMzEuNiAzMS43LTkwLjMtOTAuNS0xNS4zIDAgMCAxNS4zIDkwLjMgOTAuNS0zMS42IDMxLjcgNzguNSAwIDAtNzguN3ptMC01OC44bC0xMDcuOSAwIDc2LjMgNzYuNSAzMS42LTMxLjcgMC00NC44ek0zMjEuMiAzODIuMmwtNzYuMy03Ni41IDAgMTA4LjEgNDQuNyAwIDMxLjYtMzEuNnpNOTcuOSAzNTIuOWw3Ni4zLTc2LjUtMTA4LjggMCAwIDQ0LjggMzIuNSAzMS43em0xODEuOCA3MC45bC00NC43IDAgMC0xMjcuOS0xMC44LTEwLjgtMTAuOCAxMC44IDAgMTI3LjktNDQuNyAwIDU1LjUgNTUuNiA1NS41LTU1LjZ6TTExMy4yIDM4Mi4ybDkwLjMtOTAuNSAwLTE1LjMtMTUuMyAwLTkwLjMgOTAuNS0zMi41LTMxLjcgMCA3OC43IDc5LjQgMC0zMS42LTMxLjd6Il0KICAgIH07CiAgICBmYUNjQW1hem9uUGF5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNjLWFtYXpvbi1wYXkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjQyZCIsICJNMTI0LjcgMjAxLjhjLjEtMTEuOCAwLTIzLjUgMC0zNS4zbDAtMzUuM2MwLTEuMyAuNC0yIDEuNC0yLjcgMTEuNS04IDI0LjEtMTIuMSAzOC4yLTExLjEgMTIuNSAuOSAyMi43IDcgMjguMSAyMS43IDMuMyA4LjkgNC4xIDE4LjIgNC4xIDI3LjcgMCA4LjctLjcgMTcuMy0zLjQgMjUuNi01LjcgMTcuOC0xOC43IDI0LjctMzUuNyAyMy45LTExLjctLjUtMjEuOS01LTMxLjQtMTEuNy0uOS0uOC0xLjQtMS42LTEuMy0yLjh6bTE1NC45IDE0LjZjNC42IDEuOCA5LjMgMiAxNC4xIDEuNSAxMS42LTEuMiAyMS45LTUuNyAzMS4zLTEyLjUgLjktLjYgMS4zLTEuMyAxLjMtMi41LS4xLTMuOSAwLTcuOSAwLTExLjggMC00LS4xLTggMC0xMiAwLTEuNC0uNC0yLTEuOC0yLjItNy0uOS0xMy45LTIuMi0yMC45LTIuOS03LS42LTE0LS4zLTIwLjggMS45LTYuNyAyLjItMTEuNyA2LjItMTMuNyAxMy4xLTEuNiA1LjQtMS42IDEwLjggLjEgMTYuMiAxLjYgNS41IDUuMiA5LjIgMTAuNCAxMS4yek01NzYgODBsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDQ4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0zNjguNSAxMDMuOWMuNCAxLjcgLjkgMy40IDEuNiA1LjEgMTYuNSA0MC42IDMyLjkgODEuMyA0OS41IDEyMS45IDEuNCAzLjUgMS43IDYuNCAuMiA5LjktMi44IDYuMi00LjkgMTIuNi03LjggMTguNy0yLjYgNS41LTYuNyA5LjUtMTIuNyAxMS4yLTQuMiAxLjEtOC41IDEuMy0xMi45IC45LTIuMS0uMi00LjItLjctNi4zLS44LTIuOC0uMi00LjIgMS4xLTQuMyA0LS4xIDIuOC0uMSA1LjYgMCA4LjMgLjEgNC42IDEuNiA2LjcgNi4yIDcuNSA0LjcgLjggOS40IDEuNiAxNC4yIDEuNyAxNC4zIC4zIDI1LjctNS40IDMzLjEtMTcuOSAyLjktNC45IDUuNi0xMC4xIDcuNy0xNS40IDE5LjgtNTAuMSAzOS41LTEwMC4zIDU5LjItMTUwLjUgLjYtMS41IDEuMS0zIDEuMy00LjYgLjQtMi40LS43LTMuNi0zLjEtMy43LTUuNi0uMS0xMS4xIDAtMTYuNyAwLTMuMSAwLTUuMyAxLjQtNi40IDQuMy0uNCAxLjEtLjkgMi4zLTEuMyAzLjRsLTI5LjEgODMuN2MtMi4xIDYuMS00LjIgMTIuMS02LjUgMTguNi0uNC0uOS0uNi0xLjQtLjgtMS45LTEwLjgtMjkuOS0yMS42LTU5LjktMzIuNC04OS44LTEuNy00LjctMy41LTkuNS01LjMtMTQuMi0uOS0yLjUtMi43LTQtNS40LTQtNi40LS4xLTEyLjgtLjItMTkuMi0uMS0yLjIgMC0zLjMgMS42LTIuOCAzLjd6TTI0Mi40IDIwNmMxLjcgMTEuNyA3LjYgMjAuOCAxOCAyNi42IDkuOSA1LjUgMjAuNyA2LjIgMzEuNyA0LjYgMTIuNy0xLjkgMjMuOS03LjMgMzMuOC0xNS41IC40LS4zIC44LS42IDEuNC0xIC41IDMuMiAuOSA2LjIgMS41IDkuMiAuNSAyLjYgMi4xIDQuMyA0LjUgNC40IDQuNiAuMSA5LjEgLjEgMTMuNyAwIDIuMy0uMSAzLjgtMS42IDQtMy45IC4xLS44IC4xLTEuNiAuMS0yLjNsMC04OC44YzAtMy42LS4yLTcuMi0uNy0xMC44LTEuNi0xMC44LTYuMi0xOS43LTE1LjktMjUuNC01LjYtMy4zLTExLjgtNS0xOC4yLTUuOS0zLS40LTYtLjctOS4xLTEuMWwtMTAgMGMtLjggLjEtMS42IC4zLTIuNSAuMy04LjIgLjQtMTYuMyAxLjQtMjQuMiAzLjUtNS4xIDEuMy0xMCAzLjItMTUgNC45LTMgMS00LjUgMy4yLTQuNCA2LjUgLjEgMi44LS4xIDUuNiAwIDguMyAuMSA0LjEgMS44IDUuMiA1LjcgNC4xIDYuNS0xLjcgMTMuMS0zLjUgMTkuNy00LjggMTAuMy0xLjkgMjAuNy0yLjcgMzEuMS0xLjIgNS40IC44IDEwLjUgMi40IDE0LjEgNyAzLjEgNCA0LjIgOC44IDQuNCAxMy43IC4zIDYuOSAuMiAxMy45IC4zIDIwLjggMCAuNC0uMSAuNy0uMiAxLjItLjQgMC0uOCAwLTEuMS0uMS04LjgtMi4xLTE3LjctMy42LTI2LjgtNC4xLTkuNS0uNS0xOC45IC4xLTI3LjkgMy4yLTEwLjggMy44LTE5LjUgMTAuMy0yNC42IDIwLjgtNC4xIDguMy00LjYgMTctMy40IDI1Ljh6TTk4LjcgMTA2LjlsMCAxNzUuM2MwIC44IDAgMS43IC4xIDIuNSAuMiAyLjUgMS43IDQuMSA0LjEgNC4yIDUuOSAuMSAxMS44IC4xIDE3LjcgMCAyLjUgMCA0LTEuNyA0LjEtNC4xIC4xLS44IC4xLTEuNyAuMS0yLjVsMC02MC43Yy45IC43IDEuNCAxLjIgMS45IDEuNiAxNSAxMi41IDMyLjIgMTYuNiA1MS4xIDEyLjkgMTcuMS0zLjQgMjguOS0xMy45IDM2LjctMjkuMiA1LjgtMTEuNiA4LjMtMjQuMSA4LjctMzcgLjUtMTQuMy0xLTI4LjQtNi44LTQxLjctNy4xLTE2LjQtMTguOS0yNy4zLTM2LjctMzAuOS0yLjctLjYtNS41LS44LTguMi0xLjJsLTcgMGMtMS4yIC4yLTIuNCAuMy0zLjYgLjUtMTEuNyAxLjQtMjIuMyA1LjgtMzEuOCAxMi43LTIgMS40LTMuOSAzLTUuOSA0LjUtLjEtLjUtLjMtLjgtLjQtMS4yLS40LTIuMy0uNy00LjYtMS4xLTYuOS0uNi0zLjktMi41LTUuNS02LjQtNS42bC05LjcgMGMtNS45LS4xLTYuOSAxLTYuOSA2Ljh6TTQ5My42IDMzOWMtMi43LS43LTUuMSAwLTcuNiAxLTQzLjkgMTguNC04OS41IDMwLjItMTM2LjggMzUuOC0xNC41IDEuNy0yOS4xIDIuOC00My43IDMuMi0yNi42IC43LTUzLjItLjgtNzkuNi00LjMtMTcuOC0yLjQtMzUuNS01LjctNTMtOS45LTM3LTguOS03Mi43LTIxLjctMTA2LjctMzguOC04LjgtNC40LTE3LjQtOS4zLTI2LjEtMTQtMy44LTIuMS02LjItMS41LTguMiAyLjFsMCAxLjdjMS4yIDEuNiAyLjIgMy40IDMuNyA0LjggMzYgMzIuMiA3Ni42IDU2LjUgMTIyIDcyLjkgMjEuOSA3LjkgNDQuNCAxMy43IDY3LjMgMTcuNSAxNCAyLjMgMjggMy44IDQyLjIgNC41IDMgLjEgNiAuMiA5IC40IC43IDAgMS40IC4yIDIuMSAuM2wxNy43IDBjLjctLjEgMS40LS4zIDIuMS0uMyAxNC45LS40IDI5LjgtMS44IDQ0LjYtNCAyMS40LTMuMiA0Mi40LTguMSA2Mi45LTE0LjcgMjkuNi05LjYgNTcuNy0yMi40IDgzLjQtNDAuMSAyLjgtMS45IDUuNy0zLjggOC02LjIgNC4zLTQuNCAyLjMtMTAuNC0zLjMtMTEuOXpNNTQ0IDMxMS4zYy0uOC00LjItNC01LjgtNy42LTctNS43LTEuOS0xMS42LTIuOC0xNy42LTMuMy0xMS0uOS0yMi0uNC0zMi44IDEuNi0xMiAyLjItMjMuNCA2LjEtMzMuNSAxMy4xLTEuMiAuOC0yLjQgMS44LTMuMSAzLS42IC45LS43IDIuMy0uNSAzLjQgLjMgMS4zIDEuNyAxLjYgMyAxLjUgLjYgMCAxLjIgMCAxLjgtLjFsMTkuNS0yLjFjOS42LS45IDE5LjItMS41IDI4LjgtLjggNC4xIC4zIDguMSAxLjIgMTIgMi4yIDQuMyAxLjEgNi4yIDQuNCA2LjQgOC43IC4zIDYuNy0xLjIgMTMuMS0yLjkgMTkuNS0zLjUgMTIuOS04LjMgMjUuNC0xMy4zIDM3LjgtLjMgLjgtLjcgMS43LS44IDIuNS0uNCAyLjUgMSA0IDMuNCAzLjUgMS40LS4zIDMtMS4xIDQtMi4xIDMuNy0zLjYgNy41LTcuMiAxMC42LTExLjIgMTAuNy0xMy44IDE3LTI5LjYgMjAuNy00Ni42IC43LTMgMS4yLTYuMSAxLjctOS4xIC4yLTQuNyAuMi05LjYgLjItMTQuNXoiXQogICAgfTsKICAgIGZhRWJheSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlYmF5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0ZjQiLCAiTTYwNi41IDE4OS41bC01NC44IDEwOS45LTU0LjktMTA5LjktMzcuNSAwIDEwLjkgMjAuNmMtMTEuNS0xOS0zNS45LTI2LTYzLjMtMjYtMzEuOCAwLTY3LjkgOC43LTcxLjUgNDMuMWwzMy43IDBjMS40LTEzLjggMTUuNy0yMS44IDM1LTIxLjggMjYgMCA0MSA5LjYgNDEgMzNsMCAzLjRjLTEyLjcgMC0yOCAuMS00MS43IC40LTQyLjQgLjktNjkuNiAxMC03Ni43IDM0LjQgMS01LjIgMS41LTEwLjYgMS41LTE2LjIgMC01Mi4xLTM5LjctNzYuMi03NS40LTc2LjItMjEuMyAwLTQzIDUuNS01OC43IDI0LjJsMC04MC42LTMyLjEgMCAwIDE2OS41YzAgMTAuMy0uNiAyMi45LTEuMSAzMy4xbDMxLjUgMGMuNy02LjMgMS4xLTEyLjkgMS4xLTE5LjUgMTMuNiAxNi42IDM1LjQgMjQuOSA1OC43IDI0LjkgMzYuOSAwIDY0LjktMjEuOSA3My4zLTU0LjItLjUgMi44LS43IDUuOC0uNyA5IDAgMjQuMSAyMS4xIDQ1IDYwLjYgNDUgMjYuNiAwIDQ1LjgtNS43IDYxLjktMjUuNSAwIDYuNiAuMyAxMy4zIDEuMSAyMC4ybDI5LjggMGMtLjctOC4yLTEtMTcuNS0xLTI2LjhsMC02NS42YzAtOS4zLTEuNy0xNy4yLTQuOC0yMy44bDYxLjUgMTE2LjEtMjguNSA1NC4xIDM1LjkgMCA5OS4yLTE5NC44LTM0IDB6TTI0NC4yIDMxMy44Yy0yOS42IDAtNTAuMi0yMS41LTUwLjItNTMuOCAwLTMyLjQgMjAuNi01My44IDUwLjItNTMuOCAyOS44IDAgNTAuMiAyMS40IDUwLjIgNTMuOCAwIDMyLjMtMjAuNCA1My44LTUwLjIgNTMuOHptMjAwLjktNDcuM2MwIDMwLTE3LjkgNDguNC01MS42IDQ4LjQtMjUuMSAwLTM1LTEzLjQtMzUtMjUuOCAwLTE5LjEgMTguMS0yNC40IDQ3LjItMjUuMyAxMy4xLS41IDI3LjYtLjYgMzkuNC0uNmwwIDMuM3pNMzMuMiAyNjguMWwxMjguOCAwIDAtOC41YzAtNTEuNy0zMy4xLTc1LjQtNzguNC03NS40LTU2LjggMC04MyAzMC44LTgzIDc3LjYgMCA0Mi41IDI1LjMgNzQgODIuNSA3NCAzMS40IDAgNjgtMTEuNyA3NC40LTQ2LjFsLTMzLjEgMGMtMTIgMzUuOC04Ny43IDM2LjctOTEuMi0yMS42em05NS0yMS40bC05NC40IDBjNi45LTU2LjYgOTIuMS01NC43IDk0LjQgMHoiXQogICAgfTsKICAgIGZhQ29udGFvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNvbnRhbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjZkIiwgIk00NS40IDMwNWMxNC40IDY3LjEgMjYuNCAxMjkgNjguMiAxNzVMMzQgNDgwYy0xOC43IDAtMzQtMTUuMi0zNC0zNEwwIDY2QzAgNDcuMyAxNS4yIDMyIDM0IDMybDU3LjcgMGMtMTMuOCAxMi42LTI2LjEgMjcuMi0zNi45IDQzLjYtNDUuNCA3MC0yNyAxNDYuOC05LjQgMjI5LjR6TTQ3OCAzMmwtOTAuMiAwYzIxLjQgMjEuNCAzOS4yIDQ5LjUgNTIuNyA4NC4xTDMwMy40IDE0NS40Yy0xNC45LTI5LTM3LjgtNTMuMy04Mi42LTQzLjktMjQuNiA1LjMtNDEgMTkuMy00OC4zIDM0LjYtOC44IDE4LjctMTMuMiAzOS44IDguMiAxNDAuMyAyMS4xIDEwMC4yIDMzLjcgMTE3LjcgNDkuNSAxMzEuMiAxMi45IDExLjEgMzMuNCAxNyA1OC4zIDExLjcgNDQuNS05LjQgNTUuNy00MC43IDU3LjQtNzMuMmwxMzcuNC0yOS42YzMuMiA3MS41LTE4LjcgMTI1LjItNTcuNCAxNjMuNmw1Mi4xIDBjMTguNyAwIDM0LTE1LjIgMzQtMzRMNTEyIDY2YzAtMTguOC0xNS4yLTM0LTM0LTM0eiJdCiAgICB9OwogICAgZmFFbGxvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVsbG8iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjVmMSIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek0zOTkuOCAyOTMuMkMzODMuMyAzNTguNSAzMjMuOCA0MDQuOCAyNTYgNDA0LjhTMTI4LjcgMzU4LjUgMTEyLjIgMjkzLjJjLTEuNi03LjQgMi41LTE1LjcgOS45LTE3LjRzMTUuNyAyLjUgMTcuNCA5LjljMTQgNTIuOSA2MiA5MC4xIDExNi42IDkwLjFzMTAyLjUtMzcuMiAxMTYuNi05MC4xYzEuNy03LjQgOS45LTEyLjQgMTcuNC05LjkgNy40IDEuNyAxMi40IDkuOSA5LjkgMTcuNHoiXQogICAgfTsKICAgIGZhU2lzdHJpeCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzaXN0cml4IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZWUiLCAiTTQ0OCA0NDlMMzAxLjIgMzAwLjJjMjAtMjcuOSAzMS45LTYyLjIgMzEuOS05OS4yIDAtOTMuMS03NC43LTE2OC45LTE2Ni41LTE2OC45LTkxLjktLjEtMTY2LjYgNzUuNy0xNjYuNiAxNjguOFM3NC43IDM2OS44IDE2Ni41IDM2OS44YzM5LjggMCA3Ni4zLTE0LjIgMTA1LTM3LjlMNDE3LjUgNDgwIDQ0OCA0NDl6TTE2Ni41IDMzMC44Yy03MC42IDAtMTI4LjEtNTguMy0xMjguMS0xMjkuOVM5NS45IDcxIDE2Ni41IDcxIDI5NC42IDEyOS4zIDI5NC42IDIwMC45IDIzNy4yIDMzMC44IDE2Ni41IDMzMC44eiJdCiAgICB9OwogICAgZmFQZXJpc2NvcGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGVyaXNjb3BlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZGEiLCAiTTM3MCA2My42Yy0zOC42LTQxLTg5LjUtNjMuNi0xNDMuNC02My42LTExNC43IDAtMjA4LjEgOTYuMi0yMDguMSAyMTQuNCAwIDc1LjEgNTcuOCAxNTkuOCA4Mi43IDE5Mi43IDM2LjYgNDguNCA5MS40IDEwNC45IDEyNS40IDEwNC45IDQxLjYgMCAxMTIuOS05NC4yIDEyMC45LTEwNSAyNC42LTMzLjEgODItMTE4LjMgODItMTkyLjYgMC01Ni41LTIxLjEtMTEwLjEtNTkuNS0xNTAuOHpNMjI2LjYgNDkzLjljLTQyLjUgMC0xOTAtMTY3LjMtMTkwLTI3OS40IDAtMTA3LjQgODMuOS0xOTYuMyAxOTAtMTk2LjMgMTAwLjggMCAxODQuNyA4OSAxODQuNyAxOTYuMyAuMSAxMTIuMS0xNDcuNCAyNzkuNC0xODQuNyAyNzkuNHpNMzM4IDIwNi44YzAgNTkuMS01MS4xIDEwOS43LTExMC44IDEwOS43LTEwMC42IDAtMTUwLjctMTA4LjItOTIuOS0xODEuOGwwIC40YzAgMjQuNSAyMC4xIDQ0LjQgNDQuOCA0NC40czQ0LjgtMTkuOSA0NC44LTQ0LjRjMC0xOC4yLTExLjEtMzMuOC0yNi45LTQwLjcgNzYuNi0xOS4yIDE0MSAzOS4zIDE0MSAxMTIuNHoiXQogICAgfTsKICAgIGZhRXhwZWRpdGVkc3NsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImV4cGVkaXRlZHNzbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjNlIiwgIk0yNTYgNDMuNGEyMTIuNiAyMTIuNiAwIDEgMCAwIDQyNS4yIDIxMi42IDIxMi42IDAgMSAwIDAtNDI1LjJ6TTE1OC42IDE3Ni4zYzAtNTMuNyA0My43LTk3LjQgOTcuNC05Ny40czk3LjQgNDMuNyA5Ny40IDk3LjRsMCAyNi42YzAgNS0zLjkgOC45LTguOSA4LjlsLTE3LjcgMGMtNSAwLTguOS0zLjktOC45LTguOWwwLTI2LjZjMC04Mi4xLTEyNC04Mi4xLTEyNCAwbDAgMjYuNmMwIDUtMy45IDguOS04LjkgOC45bC0xNy43IDBjLTUgMC04LjktMy45LTguOS04LjlsMC0yNi42IC4yIDB6TTM5Ny43IDM4MGMwIDkuNy04IDE3LjctMTcuNyAxNy43bC0yNDggMGMtOS43IDAtMTcuNy04LTE3LjctMTcuN2wwLTE0MS43YzAtOS43IDgtMTcuNyAxNy43LTE3LjdsMjQ4IDBjOS43IDAgMTcuNyA4IDE3LjcgMTcuN2wwIDE0MS43em0tMjQ4LTEzNy4zbDAgMTMyLjljMCAyLjUtMS45IDQuNC00LjQgNC40bC04LjkgMGMtMi41IDAtNC40LTEuOS00LjQtNC40bDAtMTMyLjljMC0yLjUgMS45LTQuNCA0LjQtNC40bDguOSAwYzIuNSAwIDQuNCAxLjkgNC40IDQuNHptMTQxLjcgNDguN2MwIDEzLTcuMiAyNC40LTE3LjcgMzAuNGwwIDMxLjZjMCA1LTMuOSA4LjktOC45IDguOWwtMTcuNyAwYy01IDAtOC45LTMuOS04LjktOC45bDAtMzEuNmMtMTAuNS02LjEtMTcuNy0xNy40LTE3LjctMzAuNCAwLTE5LjcgMTUuOC0zNS40IDM1LjQtMzUuNHMzNS41IDE1LjggMzUuNSAzNS40ek0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6bTAgMTcuN2EyMzAuMyAyMzAuMyAwIDEgMSAwIDQ2MC42IDIzMC4zIDIzMC4zIDAgMSAxIDAtNDYwLjZ6Il0KICAgIH07CiAgICBmYU5hcHN0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibmFwc3RlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2QyIiwgIk0zMDYuMyAzNzMuNmMtMTQuMiAxMy42LTMxLjMgMjQuMS01MC40IDMwLjUtMTktNi40LTM2LjItMTYuOS01MC4zLTMwLjVsMTAwLjcgMHptNDQtMTk5LjZjMjAtMTYuOSA0My42LTI5LjIgNjkuNi0zNi4ybDAgMTYxLjJjMCAyMTkuNC0zMjggMjE3LjYtMzI4IC4zbDAtMTYxLjZjMjUuOSA2LjkgNDkuNiAxOS42IDY5LjUgMzYuNCA1Ni44LTQwIDEzMi41LTM5LjkgMTg4LjktLjF6TTE0MS41IDExNS41YzY0LjQtNjAgMTY0LjMtNjAuMSAyMjguOS0uMi03LjEgMy41LTEzLjkgNy4zLTIwLjYgMTEuNS01OC43LTMwLjUtMTI5LjItMzAuNC0xODcuOSAuMS02LjMtNC0xMy45LTguMi0yMC40LTExLjR6TTUxLjggOTMuMmwwIDY5LjNjLTU4LjQgMzYuNS01OC40IDEyMS4xIC4xIDE1OC4zIDI2LjQgMjQ1LjEgMzgxLjcgMjQwLjMgNDA3LjYgMS41bC4zLTEuN2M1OC43LTM2LjMgNTguOS0xMjEuNyAuMi0xNTguMmwwLTY5LjJjLTE3LjMgLjUtMzQgMy01MC4xIDcuNC04Mi05MS41LTIyNS41LTkxLjUtMzA3LjUgLjEtMTYuMy00LjQtMzMuMS03LTUwLjYtNy41ek0yNjcuMiAzNTJzMzYtLjMgNjEuMy0xLjVjMTAuMi0uNSAyMS4xLTQgMjUuNS02LjUgMjYuMy0xNS4xIDI1LjQtMzkuMiAyNi4yLTQ3LjQtNzkuNS0uNi05OS45LTMuOS0xMTMgNTUuNHpNMTMxLjcgMjk2LjdjLjggOC4yLS4xIDMyLjMgMjYuMiA0Ny40IDQuNCAyLjUgMTUuMiA2IDI1LjUgNi41IDI1LjMgMS4xIDYxLjMgMS41IDYxLjMgMS41LTEzLjItNTkuNC0zMy43LTU2LjEtMTEzLTU1LjR6TTMwMC44IDQyMC4xYy0zLjItNS4zLTYuOS03LjMtNi45LTcuMy0yNC44IDcuMy01Mi4yIDYuOS03NS45IDAgMCAwLTIuOSAxLjUtNi40IDYuNi0yLjggNC4xLTMuNyA5LjYtMy43IDkuNiAyOS4xIDE3LjYgNjcuMSAxNy42IDk2LjIgMC0uMS0uMS0uMy00LTMuMy04Ljl6Il0KICAgIH07CiAgICBmYURlbGljaW91cyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkZWxpY2lvdXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFhNSIsICJNNDQ2LjYgNjhjLS40LTEuNS0uOS0zLTEuNC00LjUtLjktMi41LTItNC44LTMuMy03LjEtMS40LTIuNC0zLTQuOC00LjctNi45LTIuMS0yLjUtNC40LTQuOC02LjktNi44LTEuMS0uOS0yLjItMS43LTMuMy0yLjUtMS4zLS45LTIuNi0xLjctNC0yLjQtMS44LTEtMy42LTEuOC01LjUtMi41LTEuNy0uNy0zLjUtMS4zLTUuNC0xLjctMy44LTEtNy45LTEuNS0xMi0xLjVsLTM1MiAwQzIxLjYgMzIgLjEgNTMuNSAuMSA4MGwwIDM1MmMwIDQuMSAuNSA4LjIgMS41IDEyIDIgNy43IDUuOCAxNC42IDExIDIwLjMgMSAxLjEgMi4xIDIuMiAzLjMgMy4zIDUuNyA1LjIgMTIuNiA5IDIwLjMgMTEgMy44IDEgNy45IDEuNSAxMiAxLjVsMzUyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTIuMWMtLjEtNC4xLS42LTguMi0xLjYtMTJ6TTQxNi4xIDQzMmMwIDguOC03LjIgMTYtMTYgMTZsLTE3NiAwIDAtMTkyLTE5MiAwIDAtMTc2YzAtOC44IDcuMi0xNiAxNi0xNmwxNzYgMCAwIDE5MiAxOTIgMCAwIDE3NnoiXQogICAgfTsKICAgIGZhR3VpbGRlZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJndWlsZGVkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwN2UiLCAiTTQ0My45IDY0TDUgNjRjMCAxMDMuMyAyMi4yIDE4MC4xIDQzLjQgMjIyLjQgNjQuMSAxMjcuOCAxNzYgMTYxLjYgMTc3LjMgMTYxLjYgNTUuNy0yMC41IDEwNC41LTU2LjMgMTQwLjYtMTAzLjUgMjUuOS0zMy45IDUzLjEtODcuMiA2NS45LTE0NS44bC0yNTkuOSAwYzQuMSAzNi40IDIyLjIgNjcuOSA0NS4xIDg2LjlsODguNiAwYy0xNyAyOC4yLTQ4LjIgNTQuNC04MC41IDY5LjUtMzEuMi0xMy4zLTY5LjEtNDYuNS05Ni41LTk4LjQtMjYuNy01My44LTI3LjEtMTA1LjktMjcuMS0xMDUuOWwzMzYuMSAwYzQtMjguOCA1LjktNTcuOSA1LjktODYuOXoiXQogICAgfTsKICAgIGZhWGJveCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ4Ym94IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0MTIiLCAiTTM2OS45IDMxOC4yYzQ0LjMgNTQuMyA2NC43IDk4LjggNTQuNCAxMTguNy03LjkgMTUuMS01Ni43IDQ0LjYtOTIuNiA1NS45LTI5LjYgOS4zLTY4LjQgMTMuMy0xMDAuNCAxMC4yLTM4LjItMy43LTc2LjktMTcuNC0xMTAuMS0zOS0yNy45LTE4LjItMzQuMi0yNS43LTM0LjItNDAuNiAwLTI5LjkgMzIuOS04Mi4zIDg5LjItMTQyLjEgMzItMzMuOSA3Ni41LTczLjcgODEuNC03Mi42IDkuNCAyLjEgODQuMyA3NS4xIDExMi4zIDEwOS41ek0xODguNiAxNDMuOGMtMjkuNy0yNi45LTU4LjEtNTMuOS04Ni40LTYzLjQtMTUuMi01LjEtMTYuMy00LjgtMjguNyA4LjEtMjkuMiAzMC40LTUzLjUgNzkuNy02MC4zIDEyMi40LTUuNCAzNC4yLTYuMSA0My44LTQuMiA2MC41IDUuNiA1MC41IDE3LjMgODUuNCA0MC41IDEyMC45IDkuNSAxNC42IDEyLjEgMTcuMyA5LjMgOS45LTQuMi0xMS0uMy0zNy41IDkuNS02NCAxNC4zLTM5IDUzLjktMTEyLjkgMTIwLjMtMTk0LjR6bTMxMS42IDYzLjVjLTE2LjktODAtNjcuNS0xMzAuMy03NC42LTEzMC4zLTcuMyAwLTI0LjIgNi41LTM2IDEzLjktMjMuMyAxNC41LTQxIDMxLjQtNjQuMyA1Mi44IDQyLjQgNTMuMyAxMDIuMiAxMzkuNCAxMjIuOSAyMDIuMyA2LjggMjAuNyA5LjcgNDEuMSA3LjQgNTIuMy0xLjcgOC41LTEuNyA4LjUgMS40IDQuNiA2LjEtNy43IDE5LjktMzEuMyAyNS40LTQzLjUgNy40LTE2LjIgMTUtNDAuMiAxOC42LTU4LjcgNC4zLTIyLjUgMy45LTcwLjgtLjgtOTMuNHpNMTQxLjMgNDNjNDcuNy0yLjUgMTA5LjcgMzQuNSAxMTQuMyAzNS40IC43IC4xIDEwLjQtNC4yIDIxLjYtOS43IDYzLjktMzEuMSA5NC0yNS44IDEwNy40LTI1LjItNjMuOS0zOS4zLTE1Mi43LTUwLTIzMy45LTExLjctMjMuNCAxMS4xLTI0IDExLjktOS40IDExLjJ6Il0KICAgIH07CiAgICBmYVVudGFwcGQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidW50YXBwZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDA1IiwgIk00MDEuNSA0OS45QzMyMS43IDIxMCAzMTYuOSAyMDIuNCAzMTMuNiAyMjMuMWwtNS4yIDMyLjhjLTEuOSAxMi02LjYgMjMuNS0xMy43IDMzLjRMMTQ1LjggNDk3LjFjLTcuNiAxMC42LTIwLjQgMTYuMi0zMy40IDE0LjYtNDAuMy01LTc3LjgtMzIuMi05NS4zLTY4LjUtNS43LTExLjgtNC41LTI1LjggMy4xLTM2LjRMMTY5LjEgMTk4LjljNy4xLTkuOSAxNi40LTE4IDI3LjItMjMuN2wyOS4zLTE1LjVjMTguNS05LjggOS43LTExLjkgMTM1LjYtMTM4LjkgMS00LjggMS03LjMgMy42LTggMy0uNyA2LjYtMSA2LjMtNC42bC0uNC00LjZjLS4yLTEuOSAxLjMtMy42IDMuMi0zLjYgNC41LS4xIDEzLjIgMS4yIDI1LjYgMTAgMTIuMyA4LjkgMTYuNCAxNi44IDE3LjcgMjEuMSAuNiAxLjgtLjYgMy43LTIuNCA0LjJsLTQuNSAxLjFjLTMuNCAuOS0yLjUgNC40LTIuMyA3LjQgLjEgMi44LTIuMyAzLjYtNi41IDYuMXpNMjMwLjMgMzYuNGMzLjQgLjkgMi41IDQuNCAyLjMgNy40LS4yIDIuNyAyLjEgMy41IDYuNCA2IDcuOSAxNS45IDE1LjMgMzAuNSAyMi4yIDQ0IC43IDEuMyAyLjMgMS41IDMuMyAuNSAxMS4yLTEyIDI0LjYtMjYuMiA0MC41LTQyLjYgMS4zLTEuNCAxLjQtMy41IC4xLTQuOS04LTguMi0xNi41LTE2LjktMjUuNi0yNi4xLTEtNC43LTEtNy4zLTMuNi04LTMtLjgtNi42LTEtNi4zLTQuNiAuMy0zLjMgMS40LTguMS0yLjgtOC4yLTQuNS0uMS0xMy4yIDEuMS0yNS42IDEwLTEyLjMgOC45LTE2LjQgMTYuOC0xNy43IDIxLjEtMS40IDQuMiAzLjYgNC42IDYuOCA1LjR6TTYyMC4yIDQwNi43TDQ3MS40IDE5OC44Yy0xMy4yLTE4LjUtMjYuNi0yMy40LTU2LjQtMzkuMS0xMS4yLTUuOS0xNC4yLTEwLjktMzAuNS0yOC45LTEtMS4xLTIuOS0uOS0zLjYgLjUtNDYuMyA4OC44LTQ3LjEgODIuOC00OSA5NC44LTEuNyAxMC43LTEuMyAyMCAuMyAyOS44IDEuOSAxMiA2LjYgMjMuNSAxMy43IDMzLjRMNDk0LjggNDk3LjJjNy42IDEwLjYgMjAuMiAxNi4yIDMzLjEgMTQuNyA0MC4zLTQuOSA3OC0zMiA5NS43LTY4LjYgNS40LTExLjkgNC4zLTI1LjktMy40LTM2LjZ6Il0KICAgIH07CiAgICBmYUdvb2dsZVBsdXNHID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2dsZS1wbHVzLWciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjBkNSIsICJNMzg2LjMgMjI4LjVjMS44IDkuNyAzLjEgMTkuNCAzLjEgMzIgMCAxMDkuOC03My42IDE4Ny41LTE4NC40IDE4Ny41LTEwNi4xIDAtMTkyLTg1LjktMTkyLTE5MlM5OC45IDY0IDIwNSA2NGM1MS45IDAgOTUuMSAxOC45IDEyOC42IDUwLjNsLTUyLjEgNTBjLTE0LjEtMTMuNi0zOS0yOS42LTc2LjUtMjkuNi02NS41IDAtMTE4LjkgNTQuMi0xMTguOSAxMjEuM1MxMzkuNSAzNzcuMyAyMDUgMzc3LjNjNzYgMCAxMDQuNS01NC43IDEwOS04Mi44bC0xMDkgMCAwLTY2IDE4MS4zIDAgMCAwem0xODUuNCA2LjRsMC01NS43LTU2IDAgMCA1NS43LTU1LjcgMCAwIDU2IDU1LjcgMCAwIDU1LjcgNTYgMCAwLTU1LjcgNTUuNyAwIDAtNTYtNTUuNyAweiJdCiAgICB9OwogICAgZmFHaXRodWJBbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2l0aHViLWFsdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTEzIiwgIk0yMDIuMSAzMjguN2MwIDIwLjktMTAuOSA1NS4xLTM2LjcgNTUuMXMtMzYuNy0zNC4yLTM2LjctNTUuMSAxMC45LTU1LjEgMzYuNy01NS4xIDM2LjcgMzQuMiAzNi43IDU1LjF6TTQ5NiAyNzguMmMwIDMxLjktMy4yIDY1LjctMTcuNSA5NS0zNy45IDc2LjYtMTQyLjEgNzQuOC0yMTYuNyA3NC44LTc1LjggMC0xODYuMiAyLjctMjI1LjYtNzQuOC0xNC42LTI5LTIwLjItNjMuMS0yMC4yLTk1IDAtNDEuOSAxMy45LTgxLjUgNDEuNS0xMTMuNi01LjItMTUuOC03LjctMzIuNC03LjctNDguOCAwLTIxLjUgNC45LTMyLjMgMTQuNi01MS44IDQ1LjMgMCA3NC4zIDkgMTA4LjggMzYgMjktNi45IDU4LjgtMTAgODguNy0xMCAyNyAwIDU0LjIgMi45IDgwLjQgOS4yIDM0LTI2LjcgNjMtMzUuMiAxMDcuOC0zNS4yIDkuOCAxOS41IDE0LjYgMzAuMyAxNC42IDUxLjggMCAxNi40LTIuNiAzMi43LTcuNyA0OC4yIDI3LjUgMzIuNCAzOSA3Mi4zIDM5IDExNC4yem0tNjQuMyA1MC41YzAtNDMuOS0yNi43LTgyLjYtNzMuNS04Mi42LTE4LjkgMC0zNyAzLjQtNTYgNi0xNC45IDIuMy0yOS44IDMuMi00NS4xIDMuMi0xNS4yIDAtMzAuMS0uOS00NS4xLTMuMi0xOC43LTIuNi0zNy02LTU2LTYtNDYuOCAwLTczLjUgMzguNy03My41IDgyLjYgMCA4Ny44IDgwLjQgMTAxLjMgMTUwLjQgMTAxLjNsNDguMiAwYzcwLjMgMCAxNTAuNi0xMy40IDE1MC42LTEwMS4zem0tODIuNi01NS4xYy0yNS44IDAtMzYuNyAzNC4yLTM2LjcgNTUuMXMxMC45IDU1LjEgMzYuNyA1NS4xIDM2LjctMzQuMiAzNi43LTU1LjEtMTAuOS01NS4xLTM2LjctNTUuMXoiXQogICAgfTsKICAgIGZhR2V0UG9ja2V0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdldC1wb2NrZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI2NSIsICJNNDA3LjYgNjRsLTM2NyAwQzE4LjUgNjQgMCA4Mi41IDAgMTA0LjZMMCAyMzkuOEMwIDM2NC41IDk5LjcgNDY0IDIyNC4yIDQ2NCAzNDguMiA0NjQgNDQ4IDM2NC41IDQ0OCAyMzkuOGwwLTEzNS4yQzQ0OCA4Mi4yIDQzMC4zIDY0IDQwNy42IDY0em0tMTYyIDI2OC41Yy0xMi40IDExLjgtMzEuNCAxMS4xLTQyLjQgMC0xMTMuNy0xMDguOS0xMTQuOS0xMDUuMS0xMTQuOS0xMjMuMiAwLTE2LjkgMTMuOC0zMC43IDMwLjctMzAuNyAxNyAwIDE2LjEgMy44IDEwNS4yIDg5LjMgOTAuNi04Ni45IDg4LjYtODkuMyAxMDUuNS04OS4zczMwLjcgMTMuOCAzMC43IDMwLjdjMCAxNy44LTIuOSAxNS43LTExNC44IDEyMy4yeiJdCiAgICB9OwogICAgZmFHbGlkZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnbGlkZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmE1IiwgIk0yNTIuOCAxNDguNmMwIDguOC0xLjYgMTcuNy0zLjQgMjYuNC01LjggMjcuOC0xMS42IDU1LjgtMTcuMyA4My42LTEuNCA2LjMtOC4zIDQuOS0xMy43IDQuOS0yMy44IDAtMzAuNS0yNi0zMC41LTQ1LjUgMC0yOS4zIDExLjItNjguMSAzOC41LTgzLjEgNC4zLTIuNSA5LjItNC4yIDE0LjEtNC4yIDExLjQgMCAxMi4zIDguMyAxMi4zIDE3Ljl6TTQ0OCA4MGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsMzUyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTM4NCAyNjdjMC01LjEtMjAuOC0zNy43LTI1LjUtMzkuNS0yLjItLjktNy4yLTIuMy05LjYtMi4zLTIzLjEgMC0zOC43IDEwLjUtNTguMiAyMS41bC0uNS0uNWM0LjMtMjkuNCAxNC42LTU3LjIgMTQuNi04Ny40IDAtNDQuNi0yMy44LTYyLjctNjcuNS02Mi43LTcxLjcgMC0xMDggNzAuOC0xMDggMTIzLjUgMCA1NC43IDMyIDg1IDg2LjMgODUgNy41IDAgNi45LS42IDYuOSAyLjMtMTAuNSA4MC4zLTU2LjUgODIuOS01Ni41IDU4LjkgMC0yNC40IDI4LTM2LjUgMjguMy0zOC0uMi03LjYtMjkuMy0xNy4yLTM2LjctMTcuMi0yMS4xIDAtMzIuNyAzMy0zMi43IDUwLjYgMCAzMi4zIDIwLjQgNTQuNyA1My4zIDU0LjcgNDguMiAwIDgzLjQtNDkuNyA5NC4zLTkxLjcgOS40LTM3LjcgNy0zOS40IDEyLjMtNDIuMSAyMC0xMC4xIDM1LjgtMTYuOCA1OC40LTE2LjggMTEuMSAwIDE5IDIuMyAzNi43IDUuMiAxLjggLjEgNC4xLTEuNyA0LjEtMy41eiJdCiAgICB9OwogICAgZmFCaXR5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJpdHkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM3YSIsICJNODYuNSA2Ny4yYzk1LjQtODkuMiAyNDYuMS05MS4yIDM0My4xIDMuOCAxNC4zIDE0LjEtNi40IDM3LjEtMjIuNCAyMS41LTg0LjgtODIuNC0yMTUuOC04MC4zLTI5OC45LTMuMi0xNi4zIDE1LjEtMzYuNS04LjMtMjEuOC0yMi4xem05OC45IDQxOC42YzE5LjMgNS43IDI5LjMtMjMuNiA3LjktMzAtMTEyLjItMzMuOS0xNzUuOC0xNDkuNy0xNDcuNS0yNjEgNS0xOS42LTI0LjktMjguMS0zMC4yLTcuMS0zMi4xIDEyNy40IDQxLjEgMjU5LjggMTY5LjggMjk4LjF6bTE0OC4xLTJjMTIxLjktNDAuMiAxOTIuOS0xNjYuOSAxNjQuNC0yOTEtNC41LTE5LjctMzQuOS0xMy44LTMwIDcuOSAyNC4yIDEwNy43LTM3LjEgMjE3LjktMTQzLjIgMjUzLjQtMjEuMiA3LTEwLjQgMzYgOC44IDI5Ljd6bS02Mi45LTc5bC4yLTcxLjhjMC04LjItNi42LTE0LjgtMTQuOC0xNC44cy0xNC44IDYuNy0xNC44IDE0LjhsLS4yIDcxLjhjMCA4LjIgNi42IDE0LjggMTQuOCAxNC44czE0LjgtNi42IDE0LjgtMTQuOHptNzEtMjY5YzIuMSA5MC45IDQuNyAxMzEuOS04NS41IDEzMi41LTkyLjUtLjctODYuOS00NC4zLTg1LjUtMTMyLjUgMC0yMS44LTMyLjUtMTkuNi0zMi41IDBsMCA3MS42YzAgNjkuMyA2MC43IDkwLjkgMTE4IDkwLjEgNTcuMyAuOCAxMTgtMjAuOCAxMTgtOTAuMWwwLTcxLjZjMC0xOS42LTMyLjUtMjEuOC0zMi41IDB6Il0KICAgIH07CiAgICBmYVdwZXhwbG9yZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid3BleHBsb3JlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMmRlIiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem00ODAgMGEyMjQgMjI0IDAgMSAwIC00NDggMCAyMjQgMjI0IDAgMSAwIDQ0OCAwek0xNjAuOSAxMjQuNmw4Ni45IDM3LjEtMzcuMSA4Ni45LTg2LjktMzcuMSAzNy4xLTg2Ljl6bTExMCAxNjkuMWw0Ni42IDk0LTE0LjYgMC01MC0xMDAtNDguOSAxMDAtMTQgMCA1MS4xLTEwNi45LTIyLjMtOS40IDYtMTQgNjguNiAyOS4xLTYgMTQuMy0xNi41LTcuMXpNMjU5LjEgMTc3LjRsNjguNiAyOS40LTI5LjQgNjguMy02OC4zLTI5LjEgMjkuMS02OC42em04MC4zIDQyLjlsNTQuNiAyMy4xLTIzLjQgNTQuMy01NC4zLTIzLjEgMjMuMS01NC4zeiJdCiAgICB9OwogICAgZmFNZWdhcG9ydCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtZWdhcG9ydCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWEzIiwgIk0yMjIuNSAyMDkuNmwwIDY2LjIgMzMuNSAzMy41IDMzLjMtMzMuMyAwLTY2LjQtMzMuNC0zMy40LTMzLjQgMzMuNHpNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MDEuMSA0MjIuNGwtMjYuMSAxOS4yLTI2LTE5LjIgMC02NS41LTMzLjQtMzMuNC0zMy40IDMzLjQgMCA2NS41LTI2LjIgMTkuMi0yNi4xLTE5LjIgMC02NS41LTMzLjQtMzMuNC0zMy41IDMzLjQgMCA2NS41LTI2LjEgMTkuMi0yNi4xLTE5LjIgMC04NyA1OS41LTU5LjUgMC04Ny45IDU5LjUtNTkuNSAwLTc1LjYgMjYuMS0xOS4yIDI2LjEgMTkuMiAwIDc1LjYgNTkuNSA1OS41IDAgODcuNiA1OS43IDU5LjcgMCA4Ny4xLS4xIDB6Il0KICAgIH07CiAgICBmYU1kYiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtZGIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjhjYSIsICJNMTcuNCAxNjAuNGwtMTAuNCAxOTEuNiA0My45IDAgNS42LTc5LjggMjcuOSA3OS44IDQ0LjcgMCAyNS41LTc3LjQgNC44IDc3LjQgNDUuNSAwLTEyLjgtMTkxLjYtNDUuNSAwLTQwLjcgMTE3LjMtNDIuMy0xMTcuMy00Ni4zIDB6bTI4MSAwbC00Ny45IDAgMCAxOTEuNiA0Ny45IDBzOTUgLjggOTQuMi05NS44Yy0uOC05NC4yLTk0LjItOTUuOC05NC4yLTk1LjhsMCAwem0tMS4yIDE0Ni41bDAtMTAyLjFzNDYgNC4zIDQ2LjggNTAuNi00Ni44IDUxLjUtNDYuOCA1MS41bDAgMHptMjM4LjMtNzQuMmM3LjItMTEuNCAxMC0yNSA4LTM4LjMtNS4zLTM1LjgtNTUuMS0zNC4zLTU1LjEtMzQuM2wtNTEuOSAwIDAgMTkxLjYgNDUuNSAwczg3IDQuOCA4Ny02My44YzAtNDMuMS0zMy41LTU1LjEtMzMuNS01NS4xbDAgMHptLTUxLjktMzEuOXMxMy42LTEuNiAxNiA5LjZjMS40IDYuNy00IDEyLTQgMTJsLTEyIDAgMC0yMS42em0tLjEgMTA5LjVsLjEtMjQuOSAwLTE4LjIgLjEgMHM0MS42LTQuNyA0MS4yIDIyLjRjLS4zIDI1LjctNDEuMyAyMC43LTQxLjMgMjAuN2wwIDB6Il0KICAgIH07CiAgICBmYVBhZ2U0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBhZ2U0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzZDciLCAiTTI1NiA1MDRDMTE5IDUwNCA4IDM5MyA4IDI1NlMxMTkgOCAyNTYgOGMyMC45IDAgNDEuMyAyLjYgNjAuNyA3LjVMNTAuMyAzOTIgMjU2IDM5MiAyNTYgNTA0em0wLTE0My42bDAtMjEzLjYtMTQ5LjQgMjEzLjYgMTQ5LjQgMHpNMzUyIDM5MmwwIDkyLjdjNDUuNy0xOS4yIDg0LjUtNTEuNyAxMTEuNC05Mi43TDM1MiAzOTJ6bTU3LjQtMTM4LjJsLTIxLjIgOC40IDIxLjIgOC4zIDAtMTYuN3ptLTIwLjMgNTQuNWMtNi43IDAtOCA2LjMtOCAxMi45bDAgNy43IDE2LjIgMCAwLTEwYzAtNS45LTIuMy0xMC42LTguMi0xMC42ek01MDQgMjU2YzAgMzcuMy04LjIgNzIuNy0yMyAxMDQuNGwtMTI5IDAgMC0zMzMuMUM0NDEuMyA2NC44IDUwNCAxNTMuMSA1MDQgMjU2ek0zNjguNCAxNDMuNmw2OC4yIDAgMC00Ny42LTEzLjkgMCAwIDMyLjYtMTMuOSAwIDAtMjkuNi0xMy45IDAgMCAyOS42LTEyLjcgMCAwLTMyLjYtMTMuOSAwIDAgNDcuNiAuMSAwem02OC4xIDE4NS4zbC0yNi41IDAgMC0xMWMwLTE1LjQtNS42LTI1LjItMjAuOS0yNS4yLTE1LjQgMC0yMC43IDEwLjYtMjAuNyAyNS45bDAgMjUuMyA2OC4yIDAgMC0xNS0uMSAwem0wLTEwM2wtNjguMiAyOS43IDAgMTIuNCA2OC4yIDI5LjUgMC0xNi42LTE0LjQtNS43IDAtMjYuNSAxNC40LTUuOSAwLTE2Ljl6bS00LjgtNjguNWwtMzUuNiAwIDAgMjYuNiAxMy45IDAgMC0xMi4yIDExIDBjOC42IDE1LjggMS4zIDM1LjMtMTguNiAzNS4zLTIyLjUgMC0yOC4zLTI1LjMtMTUuNS0zNy43bC0xMS42LTEwLjZjLTE2LjIgMTcuNS0xMi4yIDYzLjkgMjcuMSA2My45IDM0IDAgNDQuNy0zNS45IDI5LjMtNjUuM3oiXQogICAgfTsKICAgIGZhVGhlUmVkWWV0aSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0aGUtcmVkLXlldGkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjY5ZCIsICJNNDg4LjcgMjQxLjdsMjAuNyA3LjFjLTkuNi0yMy45LTIzLjktMzctMzEuNy00NC44bDcuMS0xOC4yYy4yIDAgMTIuMy0yNy44LTIuNS0zMC43LS42LTExLjMtNi42LTI3LTE4LjQtMjctNy42LTEwLjYtMTcuNy0xMi4zLTMwLjctNS45LTkuMSA0LjQtMTcuNiAxMC0yNS4zIDE2LjUtNS4zLTYuNC0zIC40LTMtMjkuOC0zNy4xLTI0LjMtNDUuNC0xMS43LTc0LjggM2wuNSAuNWMtMjItNy43LTQ1LjEtMTIuMi02OC40LTEzLjMtNS41LTguNy0xOC42LTE5LjEtMjUuMS0yNS4xbDI0LjggNy4xYy01LjUtNS41LTI2LjgtMTIuOS0zNC4yLTE1LjIgMTguMi00LjEgMjkuOC0yMC44IDQyLjUtMzMtMzQuOS0xMC4xLTY3LjktNS45LTk3LjkgMTEuOGwxMi00NC4yLTEuOC0uNWMtMzEuNiAyNC4yLTMzIDQxLjktMzMuNyA0NS41LS45LTIuNC02LjMtMTkuNi0xNS4yLTI3LTMuMyA4LjEtMy41IDE3LjEtLjUgMjUuMyAzIDguNCA1LjkgMTQuOCA4LjQgMTguOS0xNi0zLjMtMjguMy00LjktNDkuMiAwbC0zLjcgMCAzMyAxNC4zYy0yMC4yIDE4LjktMzYuMSA0MS45LTQ2LjcgNjcuNGwtMS43IDguNCAxLjcgMS43IDcuNi00LjdjLTMuMyAxMS42LTUuMyAxOS40LTYuNiAyNS44LTEwLjkgMTIuMi0yMC4yIDI1LjgtMjcuOCA0MC4zLTE1IDEtMzEuOCAxMC44LTQwLjMgMTQuM2wzIDMuNCAyOC44IDFjLS41IDEtLjcgMi4yLTEuMiAzLjItNy4zIDYuNC0zOS44IDM3LjctMzMgODAuN2wyMC4yLTIyLjRjLjUgMS43IC43IDMuNCAxLjIgNS4yIDAgMjUuNSAuNCA4OS42IDY0LjkgMTUwLjUgNDMuNiA0MCA5NiA2MC4yIDE1Ny41IDYwLjIgMTIxLjcgMCAyMjMtODcuMyAyMjMtMjExLjUgNi44LTkuNy0xLjIgMyAxNi43LTI1LjFsMTMgMTQuMyAyLjUtLjVjLTEuOC0xMS43LTQuOC0yMy4xLTguOS0zNC4yLTEuNS00LjgtMy44LTkuMy02LjgtMTMuM2wwIDB6TTM5OC41IDExMS4ybC0uNSAyMS45YzUuNSAxOC4xIDE2LjkgMTcuMiAyMi40IDE3LjJsLTMuNC00LjcgMjIuNC01LjRjLTkgLjUtMTggLjUtMjcgMCAxMi44LTIuMSAzMy4zLTI5IDQzLTExLjMgMy40IDcuNiA2LjQgMTcuMiA5LjMgMjcuOGwxLjctNS45Yy0xLjMtNS0xLjgtMTAuMS0xLjctMTUuMiA1LjQgLjUgOC44IDMuNCA5LjMgMTAuMSAuNSA2LjQgMS43IDE0LjggMy40IDI1LjNsNC43LTExLjNjNC42IDAgNC41LTMuNi0yLjUgMjAuNy0yMC45LTguNy0zNS4xLTguNC00Ni41LTguNGwxOC4yLTE2Yy0yNS4zIDguMi0zMyAxMC44LTU0LjggMjAuOS0xLjEtNS40LTUtMTMuNS0xNi0xOS45LTMuMiAzLjgtMi44IC45LS43IDE0LjhsLTIuNSAwYy0xLjItOC4yLTQuMS0xNi04LjQtMjMuMWw0LjItMy40YzguNC03LjEgMTEuOC0xNC4zIDEwLjYtMjEuOS0uNS02LjQtNS40LTEzLjUtMTMuNS0yMC43IDUuNi0zLjQgMTUuMi0uNCAyOC4zIDguNXptLTM5LjYtMTAuMWMyLjcgMS45IDExLjQgNS40IDE4LjkgMTcuMiA0LjIgOC40IDQgOS44IDMuNCAxMS4xLS41IDIuNC0uNSA0LjMtMyA3LjEtMS43IDIuNS01LjQgNC43LTExLjggNy42LTcuNi0xMy0xNi41LTIzLjYtMjcuOC0zMS4ybDIwLjMtMTEuOHptLTI2Ny40IDQybDEuMi0xLjdjMS4yLTIuOSA0LjItNy42IDkuMy0xNS4ybDIuNS0zLjQtMTMgMTIuMyA1LjQtNC43LTEwLjEgOS4zLTQuMiAxLjJjMTIuMy0yNC4xIDIzLjEtNDEuMyAzMi41LTUwLjIgOS4zLTkuMyAxNi0xNiAyMC4yLTE5LjRsLTYuNCAxLjJjLTExLjMtNC4yLTE5LjQtNy4xLTI0LjgtOC40IDIuNS0uNSAzLjctLjUgMy4yLS41IDEwLjMgMCAxNy41IC41IDIwLjkgMS4yIDUuMiAxLjcgMTAuNiAyLjUgMTYgMi41bC41LTEuNy04LjQtMzUuOCAxMy41IDI5YzIuOC00LjQgNC44LTkuMiA1LjktMTQuMyAxLjctNi40IDUuNC0xMyAxMC4xLTE5LjRzNy42LTEwLjYgOS4zLTExLjNjLTIuNiA4LjMtNC43IDE2LjgtNi40IDI1LjNsLTEuNyA3LjEtLjUgNC43IDIuNSAyLjVjMjEuOS0xMy41IDQ1LjUtMTkuNCA3MS4zLTE4LjlsMjEuMSAuNWMtMTEuOCAxMy41LTI3LjggMjEuOS00OC41IDI0LjgtNy43IDEuNC0xNS42IDIuNC0yMy40IDIuOWwtLjItLjUtMi41LTEuMmMtNC44LTEtOS43LS4zLTE0IDItMi41LS4yLTQuOS0uNS03LjEtLjdsLTIuNSAxLjcgLjUgMS4yYzIgLjIgMy45IC41IDYuMiAuN2wtMiAzLjQgMy40LS41LTEwLjYgMTEuM2MtNC4yIDMtNS40IDYuNC00LjIgOS4zbDUuNC0zLjQgMS4yIDBjNi4xLTguMiAxNS4yLTEzLjYgMjUuMy0xNS4ybDAtM2M2LjQgLjUgMTMgMSAxOS40IDEuMiA2LjQgMCA4LjQgLjUgNS40IDEuMiA3LjIgNCAxNC4xIDguNiAyMC43IDEzLjUgMTMuNSAxMC4xIDIzLjYgMjEuOSAzMCAzNS40IDguOCAxOC4yIDEzLjUgMzcuMSAxMy41IDU2LjYgMCA5LjUtMSAxOS0zIDI4LjMtMy41IDE1LjktOC45IDMxLjMtMTYgNDZsMi41IC41YzE4LjItMTkuNyA0MS45LTE2IDQ5LjItMTZsLTYuNCA1LjkgMjIuNCAxNy43LTEuNyAzMC43Yy01LjQtMTIuMy0xNi41LTIxLjEtMzMtMjcuOCAxNi41IDE0LjggMjMuNiAyMS4xIDIxLjkgMjAuMi00LjgtMi44LTMuNS0xLjktMTAuOC0zLjcgNC4xIDQuMSAxNy41IDE4LjggMTguMiAyMC43bC4yIC4yLS4yIC4yYzAgMS44IDEuNi0xLjItMTQgMjIuOS03NS4yLTE1LjMtMTA2LjMtNDIuNy0xNDEuMi02My4ybDExLjggMS4yYy0xMS44LTE4LjUtMTUuNi0xNy43LTM4LjQtMjYuMWwxMC42LTguNGMtOC44LTMtMTguMi0zLTI4LjMgLjVsNy42LTEwLjYtMS4yLTEuN2MtMTQuOSA0LjMtMTkuOCA5LjItMjIuNiAxMS4zLTEuMS01LjUtMi44LTEyLjQtMTIuMy0yOC44bC0xLjIgMjctMTMuMi01YzEuNS0yNS4yIDUuNC01MC41IDEzLjItNzQuNnpNMzY4IDQ3My4xYy00OS45IDI1LTU2LjEgMjIuNC01OSAyMy45LTI5LjgtMTEuOC01MC45LTMxLjctNjMuNS01OC44bDMwIDE2LjVjLTkuOC05LjMtMTguMy0xNi41LTM4LjQtNDQuM2wxMS44IDIzLjEtMTcuNy03LjZjMTQuMiAyMS4xIDIzLjUgNTEuNyA2Ni42IDczLjUtMTIwLjggMjQuMi0xOTktNzIuMS0yMDAuOS03NC4zIDExLjEgOS4yIDIyLjkgMTcuNSAzNS40IDI0LjggMy40IDEuNyA3LjEgMi41IDEwLjEgMS4ybC0xNi0yMC43YzkuMiA0LjIgOS41IDQuNSA2OS4xIDI5LTQyLjUtMjAuNy03My44LTQwLjgtOTMuMi02MC4yLS41IDYuNC0xLjIgMTAuMS0xLjIgMTAuMSA4LjcgNy4zIDE1LjggMTYuNCAyMC43IDI2LjYtMzktMTguOS01Ny42LTQ3LjYtNzEuMy04Mi42IDQ5LjkgNTUuMSAxMTguOSAzNy41IDEyMC41IDM3LjEgMzQuOCAxNi40IDY5LjkgMjMuNiAxMTMuOSAxMC42IDMuMyAwIDIwLjMgMTcgMjUuMyAzOS4xbDQuMi0zLTIuNS0yMy42YzkgOSAyNC45IDIyLjYgMzQuNCAxMy0xNS42LTUuMy0yMy41LTkuNS0yOS41LTMxLjcgNC42IDQuMiA3LjYgOSAyNy44IDE1bDEuMi0xLjItMTAuNS0xNC4yYzExLjctNC44LTMuNSAxIDMyLTEwLjggNC4zIDM0LjMgOSA0OS4yIC43IDg5LjV6TTQ4My4zIDI1OC43bC0yLjUgLjUgMyA5LjNjLTMuNSA1LjktMjMuNyA0NC4zLTcxLjYgNzkuNy0zOS41IDI5LjgtNzYuNiAzOS4xLTgwLjkgNDAuM2wtNy42LTcuMS0xLjIgMyAxNC4zIDE2LTcuMS00LjcgMy40IDQuMi0xLjIgMC0yMS45LTEzLjUgOS4zIDI2LjYtMTktMjcuOS0xLjIgMi41IDcuNiAyOWMtNi4xLTguMi0yMS0zMi42LTU2LjgtMzkuNmwzMi41IDIxLjJjLTMxLjIgNC43LTYzIDIuNS05My4yLTYuNC00LjItMS4yLTguOS0yLjUtMTMuNS00LjJsMS4yLTMtNDQuOC0yMi40IDI2LjEgMjIuNGMtNTcuNyA5LjEtMTEzLTI1LjQtMTI2LjQtODMuNEwyOS4zIDI4NC44IDcgMzA3LjFjMTkuNS01Ny41IDI1LjYtNTcuOSA1MS40LTcwLjEtOS4xLTUuMy0xLjYtMy4zLTM4LjQtOS4zIDE1LjgtNS44IDMzLTE1LjQgNzMgNS4yIDEuMi0uNyAyLjQtMS4zIDMuNy0xLjcgLjYtMy4yIC40LS44IDEtMTEuOCAzLjkgMTAgMy42IDguNyAzIDkuM2wxLjcgLjVjMTIuNy02LjUgOC45LTQuNSAxNy04LjlsLTUuNCAxMy41IDIyLjMtNS44LTguNCA4LjQgMi41IDIuNWM0LjUtMS44IDMwLjMgMy40IDQwLjggMTZsLTIzLjYtMi41YzM5LjQgMjMgNTEuNSA1NCA1NS44IDY5LjZsMS43LTEuMmMtMi44LTIyLjMtMTIuNC0zMy45LTE2LTQwLjEgNC4yIDUgMzkuMiAzNC42IDExMC40IDQ2LTExLjMtLjUtMjMuMSA1LjQtMzQuOSAxOC45bDQ2LjctMjAuMi05LjMgMjEuOWM3LjYtMTAuMSAxNC44LTIzLjYgMjEuMi0zOS42bDAtLjUgMS4yLTMtMS4yIDE2YzEzLjUtNDEuOCAyNS4zLTc4LjUgMzUuNC0xMDkuN2wxMy41LTI3LjggMC0yLTUuNC00LjIgMTAuMSAwIDUuOSA0LjIgMi41LTEuMi0zLjQtMTYgMTIuMyAxOC45IDQxLjgtMjAuMi0xNC44IDEzIC41IDIuOSAxNy43LS41YzExLjEgLjQgMjIuMSAxLjggMzMgNC4ybC0yMy42IDIuNS0xLjIgMyAyNi42IDIzLjFjOS45IDkuOSAxOC45IDIwLjYgMjcgMzItMTEuMi0zLjMtMTAuMy0zLjQtMjEuMi0zLjRsMTIuMyAzMi41LTguOS0xMi44em0tNi4xLTcxLjNsLTMuOSAxMy0xNC4zLTExLjggMTguMi0xLjJ6bS0yNTQuOCA3LjFjMS43IDEwLjYgNC43IDE3LjcgOC44IDIxLjktOS4zIDYuNi0yNy41IDEzLjktNDYuNSAxNmwuNSAxLjJjOC4zIDEuMyAxNi45IC40IDI0LjgtMi41bC03LjEgMTNjNC4yLTEuNyAxMC4xLTcuMSAxNy43LTE0LjggMTEuOS01LjUgMTIuNy01LjEgMjAuMi0xNi0xMi43LTYuNC0xNS43LTEzLjctMTguNC0xOC44em0zLjctMTAyLjNjLTYuNC0zLjQtMTAuNiAzLTEyLjMgMTguOXMyLjUgMjkuNSAxMS44IDM5LjYgMTguMiAxMC42IDI2LjEgMyAzLjQtMjMuNi0xMS4zLTQ3LjdjLTMuNS01LjctOC40LTEwLjUtMTQuMy0xMy44bDAgMHptLTQuNyA0Ni4zYzUuNCAyLjIgMTAuNSAxLjkgMTIuMy0xMC42bDAtNC43LTEuMiAuNWMtNC4zLTMuMS0yLjUtNC41LTEuNy02LjJsLjUtLjVjLS45LTEuMi01LTguMS0xMi41IDQuNy0uNS0xMy41IC41LTIxLjkgMy0yNC44IDEuMi0yLjUgNC43LTEuMiAxMS4zIDQuMiA2LjQgNS40IDExLjMgMTYgMTUuMiAzMi41IDYuNSAyOC0xOS44IDI2LjItMjYuOSA0Ljl6bS00NS01LjVjMS42IC4zIDkuMy0xLjEgOS4zLTE0LjhsLS41IDBjLTUuNC0xLjEtMi4yLTUuNS0uNy01LjktMS43LTMtMy40LTQuMi01LjQtNC43LTguMSAwLTExLjYgMTIuNy04LjEgMjEuMiAuNSAxLjEgMS4zIDIgMi4yIDIuOHMyIDEuMiAzLjIgMS40bDAgMHptNDAuMS01MC4xbC0yLjUgLjUgLjUgM2M5LjEtLjUgMTguMSAxLjUgMjYuMSA1LjktMi41LTUuNS0xMC0xNC4zLTI4LjMtMTQuM2wuNSAyLjUgMy43IDIuNHptLTcxLjggNDkuNGMyMS43IDE2LjggMTYuNSAyMS40IDQ2LjUgMjMuNmwtMi45LTQuN2M4LjQtNy4yIDEzLjctMTcuMyAxNC44LTI4LjMgMS43LTE2LTEuMi0yOS41LTguOC00MS4zbDEzLTcuNmMwLS4zIDAtLjYtLjEtLjlzLS4yLS42LS40LS44Yy0yLjItLjktNC42LTEuMi03LS45cy00LjYgMS4yLTYuNSAyLjZjLTEyLjcgNi43LTI4IDIwLjktMjkgMjIuNC0xLjcgMS43LTMuNCA1LjktNS40IDEzLjUtMS45IDcuNy0yLjkgMTUuNi0yLjkgMjMuNi00LjctOC0xMC41LTYuNC0xOS45LTUuOWw3LjEgNy42Yy0xNi41IDAtMjMuMyAxNS40LTIzLjYgMTYgNi44IDAgNC42LTcuNiAzMC0xMi4zLTQuMy02LjMtMy4zLTUtNC45LTYuNnptMTguNy0xOC43YzEuMi03LjYgMy40LTEzIDYuNC0xNy4yIDUuNC02LjQgMTAuNi0xMC4xIDE2LTExLjggNC4yLTEuNyA3LjEgMS4yIDEwLjEgOS4zIDIuNSA4LjIgMy41IDE2LjggMyAyNS4zLS41IDkuMy0zLjQgMTcuMi04LjQgMjMuMS0yLjkgMy40LTUuNCA1LjktNi40IDcuNi0zLjggLjQtNy42IC4yLTExLjMtLjVsLTcuMS0zLjQtNS40LTYuNGMuOC0xMCAxLjMtMTguOCAzLjEtMjZ6bTQyIDU2LjFjLTM0LjggMTQuNC0zNC43IDE0LTM2LjEgMTQuMy0yMC44IDQuNy0xOS0yNC40LTE4LjktMjQuOGw1LjktMS4yLS41LTIuNWMtMjAuMi0yLjYtMzEgNC4yLTMyLjUgNC45IC41IC41IDMgMy40IDUuOSA5LjMgNC4yLTYuNCA4LjgtMTAuMSAxNS4yLTEwLjYtMS43IDExLjItMS4yIDIyLjcgMS43IDMzLjcgLjEgLjUgMi42IDE3LjQgMjcuNSAyNC4xIDExLjMgMyAyNyAxLjIgNDguOS01LjRsLTkuMiAuNWMtNC4yLTE0LjgtNi40LTI0LjgtNS45LTI5LjUgMTEuMy04LjggMjEuOS0xMS4zIDMwLjctNy42bDIuNSAwLTExLjgtNy42LTcuMSAuNWMtNS45IDEuMi0xMi4zIDQuMi0xOS40IDguNGwzLjEtNi41eiJdCiAgICB9OwogICAgZmFKaXJhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImppcmEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdiMSIsICJNNDk4LjUgMjQxLjdjLTcyLjktNzIuNy0xNjkuNC0xNjkuOS0yNDEuNS0yNDEuNy0xNjUuNSAxNjQuOS0yNDIuNSAyNDEuNy0yNDIuNSAyNDEuNy03LjkgNy45LTcuOSAyMC43IDAgMjguNyAxMzIuOCAxMzIuMyA2MS44IDYxLjUgMjQyLjUgMjQxLjYgMzc5LjQtMzc4IDE1LjctMTYuNyAyNDEuNS0yNDEuNyA4LTcuOSA4LTIwLjcgMC0yOC42ek0yNTcgMzMxLjdsLTc2LTc1LjcgNzYtNzUuNyA3NiA3NS43LTc2IDc1Ljd6Il0KICAgIH07CiAgICBmYUZlZGV4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZlZGV4IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY3OTciLCAiTTU4NiAyODQuNWw1My4zLTU5LjktNjIuNCAwLTIxLjcgMjQuOC0yMi41LTI0LjgtMTE4LjcgMCAwLTE2IDU2LjEgMCAwLTQ4LjEtMTUxLjIgMCAwIDc1LjUtLjUgMGMtOS42LTExLTIxLjUtMTQuOC0zNS40LTE0LjgtMjguNCAwLTQ5LjggMTkuNC01Ny4zIDQ0LjktMTgtNTkuNC05Ny40LTU3LjYtMTIxLjktMTRsMC0yNC4yLTU0LjggMCAwLTI2LjIgNjAgMCAwLTQxLjEtMTA5IDAgMCAxODQuNCA0OSAwIDAtNzcuNSA0OC45IDBjLTEuNSA1LjctMi4zIDExLjgtMi4zIDE4LjIgMCA3My4xIDEwMi42IDkxLjQgMTMwLjIgMjMuN2wtNDIgMGMtMTQuNyAyMC45LTQ1LjggOC45LTQ1LjgtMTQuNmw4NS41IDBjMy43IDMwLjUgMjcuNCA1Ni45IDYwLjEgNTYuOSAxNC4xIDAgMjctNi45IDM0LjktMTguNmwuNSAwIDAgMTEuOSAyMTIuMiAwIDIyLjEtMjUgMjIuMyAyNSA2NC40IDAtNTQtNjAuNXpNMTM5LjMgMjY3LjljNi4xLTI2LjMgNDEuNy0yNS42IDQ2LjUgMGwtNDYuNSAwem0xNTMuNCA0OC45Yy0zNC42IDAtMzQtNjIuOCAwLTYyLjggMzIuNiAwIDM0LjUgNjIuOCAwIDYyLjh6bTE2Ny44IDE5LjFsLTk0LjQgMCAwLTE2Ni41IDk1IDAgMCAzMC4yLTU2LjEgMCAwIDMzLjkgNTUuNSAwIDAgMjguMS01Ni4xIDAgMCA0NC43IDU2LjEgMCAwIDI5LjZ6bS00NS45LTM5LjhsMC0yNC40IDU2LjEgMCAwLTQ0IDUwLjcgNTctNTAuNyA1NyAwLTQ1LjYtNTYuMSAwem0xMzguNiAxMC4zbC0yNi4xIDI5LjUtMzguMSAwIDQ1LjYtNTEuMi00NS42LTUxLjIgMzkuNyAwIDI2LjYgMjkuMyAyNS42LTI5LjMgMzguNSAwLTQ1LjQgNTEgNDYgNTEuNC00MC41IDAtMjYuMy0yOS41eiJdCiAgICB9OwogICAgZmFFdmVybm90ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJldmVybm90ZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmODM5IiwgIk0xMjEuMSAxMzIuMmMxLjYgMjIuMy0xNy42IDIxLjYtMjEuNiAyMS42LTY4LjkgMC03My42LTEtODMuNiAzLjMtLjYgLjItLjcgMC0uNC0uNEwxMjQuMSA0Ni40Yy40LS40IC42LS4yIC40IC40LTQuNCAxMC0zLjQgMTUuMS0zLjQgODUuNHptNzkgMzA4Yy0xNC43LTM3LjEgMTMtNzYuOSA1Mi41LTc2LjYgMTcuNSAwIDIyLjYgMjMuMiA3LjkgMzEuNC02LjIgMy4zLTI0LjkgMS43LTI1LjEgMTkuMiAwIDE3LjEgMTkuNyAyNSAzMS4yIDI0LjkgNiAwIDExLjktMS4yIDE3LjUtMy41czEwLjYtNS43IDE0LjgtOS45IDcuNi05LjMgOS45LTE0LjggMy41LTExLjUgMy41LTE3LjVsMC0uMWMwLTExLjYtNy44LTQ3LjItNDcuNS01NS4zLTcuNy0xLjUtNjUtNi4zLTY4LjQtNTAuNS0zLjcgMTYuOS0xNy40IDYzLjUtNDMuMSA2OS4xLTguNyAxLjktNjkuNyA3LjYtMTEyLjktMzYuOCAwIDAtMTguNi0xNS4yLTI4LjItNTgtMy40LTE1LjctOS4zLTM5LjctMTEuMS02MiAwLTE4IDExLjEtMzAuNCAyNS4xLTMyLjIgODEgMCA5MCAyLjMgMTAxLTcuOCA5LjgtOS4yIDcuOC0xNS41IDcuOC0xMDIuOCAxLTguMyA3LjgtMzAuOCA1My40LTI0LjEgNiAuOSAzMS45IDQuMiAzNy41IDMwLjZMMjkwIDc0LjhjMjAuNCAzLjcgNzAuOSA3IDgwLjYgNTcuOSAyMi43IDEyMS4xIDguOSAyMzguNSA3LjggMjM4LjUtMTYgMTE0LjQtMTExLjEgMTA4LjktMTExLjEgMTA4LjktMTktLjItNTQuMi05LjQtNjcuMy0zOS44bDAgMHpNMjgxIDIzNS40Yy0xIDEuOS0yLjIgNiAuOSA3IDE0LjEgNC45IDM5LjggNi44IDQ1LjkgNS41IDMuMS0uMiAzLjEtNC40IDIuNS02LjYtMy41LTIxLjgtNDAuOC0yNi41LTQ5LjItNS45bDAgMHoiXQogICAgfTsKICAgIGZhVXNiID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVzYiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjg3IiwgIk02MzMuNSAyNTZjMCAzLjEtMS43IDYuMS00LjUgNy41TDUzOS45IDMxN2MtMS40IC44LTIuOCAxLjQtNC41IDEuNC0xLjQgMC0zLjEtLjMtNC41LTEuMS0yLjgtMS43LTQuNS00LjUtNC41LTcuOGwwLTM1LjYtMjMwLjcgMGMyNS4zIDM5LjYgNDAuNSAxMDYuOSA2OS42IDEwNi45bDI2LjcgMCAwLTI2LjhjMC01IDMuOS04LjkgOC45LTguOWw4OS4xIDBjNSAwIDguOSAzLjkgOC45IDguOWwwIDg5LjFjMCA1LTMuOSA4LjktOC45IDguOWwtODkuMSAwYy01IDAtOC45LTMuOS04LjktOC45bDAtMjYuNy0yNi43IDBjLTc1LjQgMC04MS4xLTE0Mi41LTEyNC43LTE0Mi41bC0xMDAuMyAwYy04LjEgMzAuNi0zNS45IDUzLjUtNjkgNTMuNS0zOS4zLS4xLTcxLjMtMzIuMS03MS4zLTcxLjRzMzItNzEuMyA3MS4zLTcxLjNjMzMuMSAwIDYxIDIyLjggNjkgNTMuNSAzOS4xIDAgNDMuOSA5LjUgNzQuNi02MC40IDQwLjEtODkuMSA1OC4xLTgyLjEgMTA4LjktODIuMSA3LjUtMjAuOSAyNy0zNS42IDUwLjQtMzUuNiAyOS41IDAgNTMuNSAyMy45IDUzLjUgNTMuNXMtMjMuOSA1My41LTUzLjUgNTMuNWMtMjMuNCAwLTQyLjktMTQuOC01MC40LTM1LjZsLTI5LjggMGMtMjkuMSAwLTQ0LjMgNjcuNC02OS42IDEwNi45bDMwMi4xIDAgMC0zNS42YzAtMy4zIDEuNy02LjEgNC41LTcuOHM2LjQtMS40IDguOSAuM0w2MjkgMjQ4LjhjMi44IDEuMSA0LjUgNC4xIDQuNSA3LjJ6Il0KICAgIH07CiAgICBmYUFuZ3J5Y3JlYXRpdmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYW5ncnljcmVhdGl2ZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMzZlIiwgIk02NDAgMjM4LjJsLTMuMiAyOC4yLTM0LjUgMi4zLTIgMTguMSAzNC41LTIuMy0zLjIgMjguMi0zNC40IDIuMi0yLjMgMjAuMSAzNC40LTIuMi0zIDI2LjEtNjQuNyA0LjEgMTIuNy0xMTMuMi00Ny4zIDExNS40LTMxLjkgMi0yMy44LTExNy44IDMwLjMtMiAxMy42IDc5LjQgMzEuNy04Mi40IDkzLjEtNi4yek00MjYuOCAzNzEuNWwyOC4zLTEuOCAxMi45LTEyMC4xLTI4LjQgMS45LTEyLjggMTIwek0xNjIgMzg4LjFsLTE5LjQtMzYtMy41IDM3LjQtMjguMiAxLjcgMi43LTI5LjFjLTExIDE4LTMyIDM0LjMtNTYuOSAzNS44LTMyLjggMi01OS43LTIwLjktNTYuNC01OC4yIDIuNi0yOS4zIDI2LjctNjIuOCA2Ny41LTY1LjQgMzcuNy0yLjQgNDcuNiAyMy4yIDUxLjMgMjguOGwyLjgtMzAuOCAzOC45LTIuNWMyMC4xLTEuMyAzOC43IDMuNyA0Mi41IDIzLjdsMi42LTI2LjYgNjQuOC00LjItMi43IDI3LjktMzYuNCAyLjQtMS43IDE3LjkgMzYuNC0yLjMtMi43IDI3LjktMzYuNCAyLjMtMS45IDE5LjkgMzYuMy0yLjMtMi4xIDIwLjggNTUtMTE3LjIgMjMuOC0xLjYgMzIuMSAxMTAuNiA4LjktODUuNi0yMi4zIDEuNCAyLjktMjcuOSA3NS00LjktMyAyOC0yNC4zIDEuNi05LjcgOTEuOS01OCAzLjctNC4zLTE1LjYtMzkuNCAyLjUtOCAxNi4zLTEyNi4yIDcuN3ptLTQ0LjMtNzAuMmwtMjYuNCAxLjdjLTYuNy0xMi40LTE0LjQtMTYuNi0yNi4zLTE1LjgtMTkgMS4yLTMzLjMgMTcuNS0zNC42IDMzLjMtMS40IDE2IDcuMyAzMi41IDI4LjcgMzEuMiAxMi44LS44IDIxLjMtOC42IDI4LjktMTguOWwyNy0xLjcgMi43LTI5Ljh6bTU2LjEtNy43YzEuMi0xMi45LTcuNi0xMy42LTI2LjEtMTIuNEwxNDUgMzI2LjNjMTQuMi0uOSAyNy41LTIuMSAyOC44LTE2LjF6TTE5NC45IDM4MWw1LjgtNjBjLTUgMTMuNS0xNC43IDIxLjEtMjcuOSAyNi42TDE5NC45IDM4MXptMTM1LjQtNDVsLTcuOS0zNy44LTE1LjggMzkuMyAyMy43LTEuNXpNMTYwLjIgMjYxLjRsLTQuMy0xNy41LTM5LjYgMi42LTguMSAxOC4yLTMxLjkgMi4xIDU3LTEyMS45IDIzLjktMS42IDMwLjcgMTAyIDkuOS0xMDQuNyAyNy0xLjggMzcuOCA2My42IDYuNS02Ni42IDI4LjUtMS45LTQgNDEuMmM3LjQtMTMuNSAyMi45LTQ0LjcgNjMuNi00Ny41IDQwLjUtMi44IDUyLjQgMjkuMyA1My40IDMwLjNsMy4zLTMyIDM5LjMtMi43YzEyLjctLjkgMjcuOCAuMyAzNi4zIDkuN2wtNC40LTExLjkgMzIuMi0yLjIgMTIuOSA0My4yIDIzLTQ1LjcgMzEtMi4yLTQzLjYgNzguNC00LjggNDQuMy0yOC40IDEuOSA0LjgtNDQuMy0xNS44LTQzYzEgMjIuMy05LjIgNDAuMS0zMiA0OS42bDI1LjIgMzguOC0zNi40IDIuNC0xOS4yLTM2LjgtNCAzOC4zLTI4LjQgMS45IDMuMy0zMS41Yy02LjcgOS4zLTE5LjcgMzUuNC01OS42IDM4LTI2LjIgMS43LTQ1LjYtMTAuMy01NS40LTM5LjJsLTQgNDAuMy0yNSAxLjYtMzcuNi02My4zLTYuMyA2Ni4yLTU2LjggMy43em0yNzYuNi04Mi4xYzEwLjItLjcgMTcuNS0yLjEgMjEuNi00LjMgNC41LTIuNCA3LTYuNCA3LjYtMTIuMSAuNi01LjMtLjYtOC44LTMuNC0xMC40LTMuNi0yLjEtMTAuNi0yLjgtMjIuOS0ybC0yLjkgMjguOHpNMzI3LjcgMjE0YzUuNiA1LjkgMTIuNyA4LjUgMjEuMyA3LjkgNC43LS4zIDkuMS0xLjggMTMuMy00LjEgNS41LTMgMTAuNi04IDE1LjEtMTQuM2wtMzQuMiAyLjMgMi40LTIzLjkgNjMuMS00LjMgMS4yLTEyLTMxLjIgMi4xYy00LjEtMy43LTcuOC02LjYtMTEuMS04LjEtNC0xLjctOC4xLTIuOC0xMi4yLTIuNS04IC41LTE1LjMgMy42LTIyIDkuMi03LjcgNi40LTEyIDE0LjUtMTIuOSAyNC40LTEuMSA5LjYgMS40IDE3LjMgNy4yIDIzLjN6bS0yMDEuMyA4LjJsMjMuOC0xLjYtOC4zLTM3LjYtMTUuNSAzOS4yeiJdCiAgICB9OwogICAgZmFNaXp1bmkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWl6dW5pIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzY2MiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMTc2IDM1OS45Yy0zMS40IDEwLjYtNTguOCAyNy4zLTgwIDQ4LjJMOTYgMTM2YzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAyMjMuOXpNMjk2IDM1MGMtMTIuOS0yLTI2LjItMy4xLTM5LjgtMy4xLTEzLjggMC0yNy4yIDEuMS00MC4yIDMuMWwwLTIxNGMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMjE0em0xMjAgNTcuN2MtMjEuMi0yMC44LTQ4LjYtMzcuNC04MC00OEwzMzYgMTM2YzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAyNzEuN3oiXQogICAgfTsKICAgIGZhSXRjaElvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIml0Y2gtaW8iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjgzYSIsICJNNzEuOSAzNC44QzUwLjIgNDcuNyA3LjQgOTYuOCA3IDEwOS43bDAgMjEuM2MwIDI3LjEgMjUuMyA1MC44IDQ4LjIgNTAuOCAyNy42IDAgNTAuNS0yMi44IDUwLjUtNTAgMCAyNy4xIDIyLjIgNTAgNDkuOCA1MHM0OS0yMi44IDQ5LTUwYzAgMjcuMSAyMy42IDUwIDUxLjIgNTBsLjUgMGMyNy42IDAgNTEuMi0yMi44IDUxLjItNTAgMCAyNy4xIDIxLjUgNTAgNDkgNTBzNDkuOC0yMi44IDQ5LjgtNTBjMCAyNy4xIDIzIDUwIDUwLjUgNTAgMjMgMCA0OC4zLTIzLjggNDguMy01MC44bDAtMjEuM2MtLjQtMTIuOS00My4yLTYyLjEtNjQuOS03NS02Ny40LTIuMy0xMTQuMi0yLjctMTg0LTIuN1M5MS4xIDMzLjEgNzEuOSAzNC44ek0yMDQuMiAxNjkuMmMtMjIgMzguNC03Ny45IDM4LjctOTkuOCAuMi0xMy4yIDIzLjEtNDMuMiAzMi4xLTU2IDI3LjctMy45IDQwLjItMTMuNyAyMzcuMSAxNy43IDI2OS4yIDgwIDE4LjcgMzAyLjEgMTguMSAzNzkuOCAwIDMxLjYtMzIuMyAyMS4zLTIzMiAxNy43LTI2OS4yLTEyLjkgNC40LTQyLjktNC42LTU2LTI3LjctMjIgMzguNS03Ny44IDM4LjEtOTkuOC0uMi03LjEgMTIuNS0yMyAyOC45LTUxLjggMjguOS0xMC40IC4zLTIwLjgtMi4yLTI5LjktNy4zcy0xNi43LTEyLjYtMjEuOS0yMS42bDAgMHptLTQxLjYgNTMuOGMxNi41IDAgMzEuMSAwIDQ5LjIgMTkuOCAyOS4zLTMgNTguOS0zIDg4LjIgMCAxOC4yLTE5LjcgMzIuOC0xOS43IDQ5LjItMTkuNyA1Mi4zIDAgNjUuMiA3Ny41IDgzLjkgMTQ0LjQgMTcuMyA2Mi4yLTUuNSA2My43LTM0IDYzLjctNDIuMS0xLjYtNjUuNS0zMi4yLTY1LjUtNjIuOC0zOS4zIDYuNC0xMDEuOSA4LjgtMTU1LjYgMCAwIDMwLjYtMjMuMyA2MS4yLTY1LjUgNjIuOC0yOC40LS4xLTUxLjItMS42LTMzLjktNjMuNyAxOC43LTY3IDMxLjYtMTQ0LjQgODMuOS0xNDQuNGwwLS4xek0yNTYgMjcwLjhzLTQ0LjQgNDAuOC01Mi40IDU1LjJsMjktMS4yIDAgMjUuM2MwIDEuNSAyMS4zIC4yIDIzLjMgLjIgMTEuNiAuNSAyMy4zIDEgMjMuMy0uMmwwLTI1LjMgMjkgMS4yYy04LTE0LjUtNTIuNC01NS4yLTUyLjQtNTUuMmwuMSAweiJdCiAgICB9OwogICAgZmFXaW5kb3dzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndpbmRvd3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE3YSIsICJNMCA5My43bDE4My42LTI1LjMgMCAxNzcuNC0xODMuNiAwIDAtMTUyLjF6TTAgNDE4LjNsMTgzLjYgMjUuMyAwLTE3NS4yLTE4My42IDAgMCAxNDkuOXptMjAzLjggMjhsMjQ0LjIgMzMuNyAwLTIxMS42LTI0NC4yIDAgMCAxNzcuOXptMC0zODAuNmwwIDE4MC4xIDI0NC4yIDAgMC0yMTMuOC0yNDQuMiAzMy43eiJdCiAgICB9OwogICAgZmFTdHVtYmxldXBvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdHVtYmxldXBvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWE0IiwgIk01MDIuOSAyNjZsMCA2OS43YzAgNjIuMS01MC4zIDExMi40LTExMi40IDExMi40LTYxLjggMC0xMTIuNC00OS44LTExMi40LTExMS4zbDAtNzAuMiAzNC4zIDE2IDUxLjEtMTUuMiAwIDcwLjZjMCAxNC43IDEyIDI2LjUgMjYuNyAyNi41UzQxNyAzNTIuNyA0MTcgMzM4bDAtNzIgODUuOSAwek0yNzguMiAyMDcuOGwzNC4zIDE2IDUxLjEtMTUuMiAwLTM1LjZjMC02MC41LTUxLjEtMTA5LTExMi4xLTEwOS02MC44IDAtMTEyLjEgNDguMi0xMTIuMSAxMDguMmwwIDE2Mi40YzAgMTQuOS0xMiAyNi43LTI2LjcgMjYuN1M4NiAzNDkuNSA4NiAzMzQuNmwwLTY4LjYtODYgMCAwIDY5LjdjMCA2MiA1MC4zIDExMi4zIDExMi40IDExMi4zIDYxLjYgMCAxMTIuNC00OS41IDExMi40LTExMC44bDAtMTYwLjNjMC0xNC43IDEyLTI2LjcgMjYuNy0yNi43czI2LjcgMTIgMjYuNyAyNi43bDAgMzAuOXoiXQogICAgfTsKICAgIGZhR29vZ2xlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2dsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWEwIiwgIk01MDAgMjYxLjhDNTAwIDQwMy4zIDQwMy4xIDUwNCAyNjAgNTA0IDEyMi44IDUwNCAxMiAzOTMuMiAxMiAyNTZTMTIyLjggOCAyNjAgOGM2Ni44IDAgMTIzIDI0LjUgMTY2LjMgNjQuOWwtNjcuNSA2NC45Yy04OC4zLTg1LjItMjUyLjUtMjEuMi0yNTIuNSAxMTguMiAwIDg2LjUgNjkuMSAxNTYuNiAxNTMuNyAxNTYuNiA5OC4yIDAgMTM1LTcwLjQgMTQwLjgtMTA2LjlsLTE0MC44IDAgMC04NS4zIDIzNi4xIDBjMi4zIDEyLjcgMy45IDI0LjkgMy45IDQxLjR6Il0KICAgIH07CiAgICBmYURpc2NvcmQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGlzY29yZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMzkyIiwgIk00OTIuNSA2OS44Yy0uMi0uMy0uNC0uNi0uOC0uNy0zOC4xLTE3LjUtNzguNC0zMC0xMTkuNy0zNy4xLS40LS4xLS44IDAtMS4xIC4xcy0uNiAuNC0uOCAuOGMtNS41IDkuOS0xMC41IDIwLjItMTQuOSAzMC42LTQ0LjYtNi44LTg5LjktNi44LTEzNC40IDAtNC41LTEwLjUtOS41LTIwLjctMTUuMS0zMC42LS4yLS4zLS41LS42LS44LS44cy0uNy0uMi0xLjEtLjJjLTQxLjMgNy4xLTgxLjYgMTkuNi0xMTkuNyAzNy4xLS4zIC4xLS42IC40LS44IC43LTc2LjIgMTEzLjgtOTcuMSAyMjQuOS04Ni45IDMzNC41IDAgLjMgLjEgLjUgLjIgLjhzLjMgLjQgLjUgLjZjNDQuNCAzMi45IDk0IDU4IDE0Ni44IDc0LjIgLjQgLjEgLjggLjEgMS4xIDBzLjctLjQgLjktLjdjMTEuMy0xNS40IDIxLjQtMzEuOCAzMC00OC44IC4xLS4yIC4yLS41IC4yLS44czAtLjUtLjEtLjgtLjItLjUtLjQtLjYtLjQtLjMtLjctLjRjLTE1LjgtNi4xLTMxLjItMTMuNC00NS45LTIxLjktLjMtLjItLjUtLjQtLjctLjZzLS4zLS42LS4zLS45IDAtLjYgLjItLjkgLjMtLjUgLjYtLjdjMy4xLTIuMyA2LjItNC43IDkuMS03LjEgLjMtLjIgLjYtLjQgLjktLjRzLjcgMCAxIC4xYzk2LjIgNDMuOSAyMDAuNCA0My45IDI5NS41IDAgLjMtLjEgLjctLjIgMS0uMnMuNyAuMiAuOSAuNGMyLjkgMi40IDYgNC45IDkuMSA3LjIgLjIgLjIgLjQgLjQgLjYgLjdzLjIgLjYgLjIgLjktLjEgLjYtLjMgLjktLjQgLjUtLjYgLjZjLTE0LjcgOC42LTMwIDE1LjktNDUuOSAyMS44LS4yIC4xLS41IC4yLS43IC40cy0uMyAuNC0uNCAuNy0uMSAuNS0uMSAuOCAuMSAuNSAuMiAuOGM4LjggMTcgMTguOCAzMy4zIDMwIDQ4LjggLjIgLjMgLjYgLjYgLjkgLjdzLjggLjEgMS4xIDBjNTIuOS0xNi4yIDEwMi42LTQxLjMgMTQ3LjEtNzQuMiAuMi0uMiAuNC0uNCAuNS0uNnMuMi0uNSAuMi0uOGMxMi4zLTEyNi44LTIwLjUtMjM2LjktODYuOS0zMzQuNXptLTMwMiAyNjcuN2MtMjkgMC01Mi44LTI2LjYtNTIuOC01OS4yczIzLjQtNTkuMiA1Mi44LTU5LjJjMjkuNyAwIDUzLjMgMjYuOCA1Mi44IDU5LjIgMCAzMi43LTIzLjQgNTkuMi01Mi44IDU5LjJ6bTE5NS40IDBjLTI5IDAtNTIuOC0yNi42LTUyLjgtNTkuMnMyMy40LTU5LjIgNTIuOC01OS4yYzI5LjcgMCA1My4zIDI2LjggNTIuOCA1OS4yIDAgMzIuNy0yMy4yIDU5LjItNTIuOCA1OS4yeiJdCiAgICB9OwogICAgZmFIYWNrZXJOZXdzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhhY2tlci1uZXdzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxZDQiLCAiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTIxLjIgMjI5LjJsLS4yIDBjLjEtLjEgLjItLjMgLjMtLjQgMCAuMSAwIC4zLS4xIC40em0yMTggNTMuOWwwIDEwMC45LTMxLjQgMCAwLTEwMi43LTc5LjgtMTUzLjMgMzcuMyAwYzUyLjUgOTguMyA0OS4yIDEwMS4yIDU5LjMgMTI1LjYgMTIuMy0yNyA1LjgtMjQuNCA2MC42LTEyNS42bDM0LjggMC04MC44IDE1NS4xeiJdCiAgICB9OwogICAgZmFFbGV2ZW50eSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlbGV2ZW50eSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyIxMXR5Il0sICJlN2Q2IiwgIk02MTUuMyAxNjguNWMyLjMgMCA0LjYgLjcgNi42IDIuMiAxLjkgMS40IDMuMSAzLjMgMy44IDUgMS40IDMuMyAxLjggNy4zIDEuOCAxMS4zIDAgMi4yLS4zIDQuOS0uNyA3LjZsMCAuNC01MC45IDI2NC45IDAgMGMtNCAyMi4xLTguNSAzOS40LTEzLjYgNTEuNy01IDEyLjEtMTAuOSAyMS42LTE4LjYgMjdsMCAwYy03LjUgNS4zLTE2LjkgNy43LTI3LjYgOGwtMyAwYy0xNiAwLTI5LjMtNC4yLTM2LjktMTQuOC0uMS0uMS0uMS0uMS0uMi0uMi0uMS0uMi0uMy0uNC0uNS0uNmwwIDBjLTEuOC0yLjQtMi41LTUuMi0yLjktNy40LS41LTIuOC0uNy02LjEtLjctOS44IDAtNy4zIC42LTEzLjUgMi4xLTE4LjIgMS40LTQuNCA0LjgtMTAuNCAxMi4yLTEwLjRsMS4zIC4xYy4yIDAgLjQgLjEgLjUgLjEgLjMgLjEgLjYgLjEgLjggLjIgLjYgLjEgMS4zIC4zIDIuMiAuNmw3LjYgMi4yIC4xIDAgNy42IDIuMWMuOSAuMiAxLjcgLjQgMi4yIC41IC40IC4xIC42IC4xIC43IC4xIDAgMCAuMSAwIC4yLS4xIC4xLS4xIC40LS4yIC44LS42IC45LS45IDIuMi0yLjYgMy42LTUuNyAyLjYtNS44IDQuMi0xNC43IDQuMi0yNy40IDAtLjctLjMtMy40LTEuMy04LjktLjktNS4xLTIuMy0xMi4yLTQuMi0yMS4xbC01Ni0yMzIuOS0uMS0uNCAwLS4zYy0uNC0yLjctLjctNS4zLS43LTcuMyAwLTMuNyAuNC03LjUgMS43LTEwLjYgLjctMS42IDEuOC0zLjQgMy41LTQuOSAxLjktMS41IDQuMi0yLjMgNi41LTIuM2wzNC42IDBjNC42IDAgOC43IDEuNyAxMS45IDVsMS4zIDEuNWMxLjIgMS42IDIgMy40IDIuNyA1LjIgLjkgMi40IDEuNSA1LjEgMiA4LjFsMzAuNCAxNjEuMiAyMy44LTE2MGMuOC01LjggMi4yLTExLjQgNS4xLTE1LjEgMy0zLjggNy4yLTUuOCAxMi01LjhsMjQgMHpNMzc1LjEgMzQuNmMyLjYgMCA1LjEgLjcgNy40IDIuMyAyLjIgMS41IDMuNyAzLjYgNC43IDUuNyAxLjkgNCAyLjUgOS4xIDIuNSAxNC41bDAgMTExLjJjMCAuMSAwIC4yIDAgLjNsMzIuNCAwYzIuNSAwIDUgLjYgNy4yIDIuMSAyLjIgMS40IDMuNyAzLjQgNC44IDUuNSAyIDMuOSAyLjYgOC44IDIuNiAxMy45bDAgMTUuNGMwIDUtLjYgOS44LTIuNiAxMy43LTEuMSAyLTIuNiA0LTQuOCA1LjQtMi4yIDEuNC00LjcgMi03LjEgMmwtMzIuNSAwIDAgMTQ1LjhjMCAxMC44IC43IDE5LjUgMiAyNi4yIDEuNCA2LjkgMy4xIDEwLjkgNC43IDEyLjkgMS4yIDEuNSAyLjIgMi41IDMuMSAzLjJsMi4yIDEuNCAuMSAuMSAyLjkgLjhjMS4yIC4yIDIuNiAuMyA0LjMgLjNsMjAuMyAwYzQuNSAwIDguOSAxLjcgMTEuOCA1LjggMi42IDMuNiAzLjMgOC4xIDMuMyAxMi4ybDAgMTcuMmMwIDQuNS0uOCA5LjMtMy40IDEzLjEtMyA0LjItNy41IDYtMTIuMyA2bDAgMC0yOS4xIC4xYy04IDAtMTUtLjYtMjEuMi0xLjctNi43LTEuMy0xMy40LTQuMS0yMC4xLTguMS03LjItNC40LTEzLTEwLjMtMTcuNS0xNy44LTQuNS03LjUtNy45LTE3LjUtMTAuNS0yOS41LTIuNi0xMi4yLTMuOS0yNi42LTMuOS00M2wwLTE0NC45LTEzLjQgMGMtMi40IDAtNC45LS42LTcuMS0yLTIuMi0xLjQtMy43LTMuNC00LjgtNS40LTItMy45LTIuNi04LjctMi42LTEzLjdsMC0xNS40YzAtNS4xIC42LTEwIDIuNi0xMy45IDEuMS0yLjEgMi42LTQgNC44LTUuNSAyLjItMS41IDQuNy0yLjEgNy4yLTIuMWwxMy40IDAgMC0uNiA1LjItMTExLjIgMC0uMSAuMy0zLjljLjUtMy44IDEuMy03LjQgMi43LTEwLjMgMi4xLTQuMiA2LTcuOSAxMS44LTcuOWwyOC42IDB6bS0yNjggMTEuN2MxLjggLjMgMy42IC45IDUuMyAyLjEgMi4xIDEuNSAzLjUgMy41IDQuNCA1LjQgMS43IDMuNyAyLjMgOC40IDIuMyAxMy4ybDAgMzc3LjhjMCA2LjctLjYgMTIuNi0yLjQgMTcuMS0uOSAyLjMtMi4zIDQuNy00LjQgNi41LTIuMyAyLTUuMSAzLTguMSAzbC00My43IDBjLTMgMC01LjgtMS4xLTguMS0zLjEtMi4xLTEuOS0zLjQtNC4zLTQuMi02LjUtMS43LTQuNS0yLjMtMTAuMy0yLjMtMTdsMC0zMTUuOGMtNC44IDEuMi04LjcgMi4yLTExLjUgMi45LTEuOSAuNS0zLjQgLjgtNC40IDEuMS0uNSAuMS0uOSAuMi0xLjIgLjMtLjEgMC0uMyAuMS0uNSAuMS0uMSAwLS4yIDAtLjMgLjEgMCAwLS4yIDAtLjMgMCAwIDAtLjIgMC0uNCAwbDAgMGMtLjEgMC0uMyAwLS40IDAtLjEgMC0uMiAwLS4yIDAtMi4yIC4xLTQuNS0uNC02LjYtMS43LTIuMy0xLjQtMy44LTMuNC00LjctNS4zLTEuOC0zLjctMi4zLTguNC0yLjMtMTNsMC0yNy40YzAtNC40IC43LTguOCAyLjYtMTIuNCAyLjEtMy45IDUuNS02LjYgOS44LTcuNmw3NS41LTE5LjVjMS40LS40IDIuOS0uNSA0LjQtLjVsMS44IC4xem0xNDMuOC0uNWMxLjggLjMgMy42IC45IDUuMiAyLjEgMi4xIDEuNSAzLjUgMy41IDQuNCA1LjQgMS43IDMuNyAyLjIgOC40IDIuMiAxMy4ybDAgMzc3LjhjMCA2LjctLjYgMTIuNi0yLjQgMTcuMS0uOSAyLjMtMi4zIDQuNy00LjQgNi41LTIuMyAyLTUuMSAzLTguMSAzbC00My43IDBjLTMgMC01LjgtMS4xLTguMS0zLjEtMi4xLTEuOS0zLjQtNC4zLTQuMi02LjUtMS43LTQuNS0yLjMtMTAuMy0yLjMtMTdsMC0zMTUuOGMtNC44IDEuMi04LjcgMi4yLTExLjUgMi45LTEuOSAuNS0zLjQgLjgtNC40IDEuMS0uNSAuMS0uOSAuMi0xLjIgLjMtLjEgMC0uMyAuMS0uNSAuMS0uMSAwLS4yIDAtLjMgLjEtLjEgMC0uMiAwLS4zIDAgMCAwLS4yIDAtLjQgMGwwIDBjLS4xIDAtLjIgMC0uMyAwLS4xIDAtLjIgMC0uMyAwLTIuMiAuMS00LjUtLjQtNi42LTEuNy0yLjMtMS40LTMuOC0zLjQtNC43LTUuMy0xLjgtMy43LTIuMy04LjMtMi4zLTEzbDAtMjcuNGMwLTQuNCAuNy04LjcgMi42LTEyLjQgMi4xLTMuOSA1LjUtNi42IDkuOC03LjZsNzUuNC0xOS40YzEuNC0uNCAyLjktLjUgNC40LS41bDEuOCAuMXoiXQogICAgfTsKICAgIGZhMTF0eSA9IGZhRWxldmVudHk7CiAgICBmYVRlYW1zcGVhayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0ZWFtc3BlYWsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRmOSIsICJNMTUyLjggMzcuMmMtMzIuMiAzOC4xLTU2LjEgODIuNi02OS45IDEzMC41IDAgLjItLjEgLjMtLjEgLjUtMzkuMyAxNi4yLTY2LjggNTQuOC02Ni44IDk5LjggMCA1OS42IDQ4LjQgMTA4IDEwOCAxMDhzMTA4LTQ4LjQgMTA4LTEwOGMwLTUzLjUtMzguOS05Ny45LTkwLTEwNi41IDE1LjctNDEuOCA0MC40LTc5LjYgNzIuMy0xMTAuNyAxLjgtMS42IDQtMi42IDYuMy0zLjEgMzcuMi0xMS41IDc2LjctMTMuMyAxMTQuOC01LjIgMTE5LjMgMjUuMSAxOTguNiAxMzguMiAxODEuNyAyNTguOC04LjQgNjIuNi0zOC42IDExMi43LTg3LjcgMTUxLjQtNTAuMSAzOS43LTEwNy41IDU0LjMtMTcwLjIgNTIuMmwtMjQtMWMxMi40IDIuOCAyNSA0LjkgMzcuNiA2LjMgNDAuNyA0LjIgODEuNCAyLjEgMTIwLjEtMTIuNSA5NC0zNS41IDE0OS4zLTEwMi4zIDE2Mi45LTIwMi41IDQuOC01Mi42LTUuOC0xMDUuNC0zMC44LTE1Mi03MC40LTEzMS45LTIzNC4yLTE4MS42LTM2Ni0xMTEuMi0yLjQgMS40LTQuNSAzLjEtNi4zIDUuMmwuMSAwek0zMDkuNCA0MzMuOWMtMi4xIDExLjUtNC4yIDIxLjktMTQuNiAzMS4zIDUzLjItMSAxMjMuMi0yOS4yIDE2MS44LTk3LjEgMzkuNy02OS45IDM3LjYtMTM5LjktNi4zLTIwNy44LTM2LjUtNTUuMy04OS44LTgyLjQtMTU2LjYtODYuNiAxLjUgMi4zIDMuMiA0LjQgNS4yIDYuM2w1LjIgNi4zYzI1LjEgMzEuMyAzNy42IDY3LjkgNDIuOCAxMDcuNSAyLjEgMTUuNy0xIDMwLjMtMTMuNiA0MS44LTQuMiAzLjEtNS4yIDYuMy00LjIgMTAuNGw3LjMgMTcuNyAyOS4zIDU0LjNjNS4yIDExLjUgNC4yIDE5LjgtNi4zIDI4LjItMy4yIDIuNS02LjcgNC42LTEwLjQgNi4zbC0xOC44IDguNCAzLjEgMTMuNmMzLjEgNi4zIDEgMTIuNS0zLjEgMTcuNy0yLjUgMi40LTMuOCA1LjktMy4xIDkuNCAyLjEgMTEuNS0yLjEgMTkuOC0xMi41IDI1LjEtMi4xIDEtNC4yIDUuMi01LjIgNy4zbDAtLjF6bS0xMzMuNi0zLjFjMTYuNyAxMS41IDM0LjUgMjAuOSA1My4yIDI2LjEgMjQgNS4yIDQxLjgtNi4zIDQ0LjktMzAuMyAxLTguNCA1LjItMTQuNiAxMi41LTE3LjcgNy4zLTQuMiA4LjQtNy4zIDIuMS0xMy42bC05LjQtOC40IDEzLjYtNC4yYzYuMy0yLjEgNy4zLTUuMiA1LjItMTEuNS0xLjQtMy0yLjQtNi4yLTMuMS05LjQtMy4xLTE0LjYtMi4xLTE1LjcgMTEuNS0xOC44IDguNC0zLjEgMTUuNy02LjMgMjEuOS0xMi41IDMuMS0yLjEgMy4xLTQuMiAxLTguNGwtMTYuNy0zMC4zYy0xLTEuOS0yLjEtMy44LTMuMS01LjctNi40LTExLjctMTMtMjMuNi0xNS43LTM3LjEtMi4xLTkuNC0xLTE3LjcgOC40LTI0IDUuMi00LjIgOC40LTkuNCA4LjQtMTYuNy0uNC0xMC4xLTEuNS0yMC4zLTMuMS0zMC4zLTYuMy0zNy42LTIzLTY4LjktNTEuMi05NS01LjItNC4yLTkuNC02LjMtMTYuNy00LjJsLTM1LjYgMTIuNyA2IDMuNmM2LjMgMy43IDEyLjIgNy4zIDE3IDEyLjEgMzAuMyAyNi4xIDQxLjggNjEuNiA0NS45IDEwMC4yIDEgOC40IDAgMTYuNy03LjMgMjEuOS04LjQgNS4yLTEwLjQgMTIuNS03LjMgMjAuOSA0LjkgMTMuMiAxMC40IDI2IDE2LjcgMzguNkwyOTEuNiAzMThjLTYuMyA4LjQtMTMuNiAxMS41LTIxLjkgMTQuNi0xMi41IDMuMS0xNC42IDcuMy0xMC40IDIwLjkgLjYgMS41IDEuNCAyLjggMi4xIDQuMiAyLjEgNS4yIDEgOC40LTQuMiAxMC40bC0xMi41IDMuMSA1LjIgNC4yIDQuMiA0LjJjNC4yIDUuMiA0LjIgOC40LTIuMSAxMC40LTcuMyA0LjItMTEuNSA5LjQtMTEuNSAxNy43IDAgMTIuNS03LjMgMTkuOC0xOC44IDI0LTMuOCAxLTcuNiAxLjUtMTEuNSAxbC0zNC41LTIuMSAuMSAuMnoiXQogICAgfTsKICAgIGZhU3VwcGxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN1cHBsZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmM2Y5IiwgIk02NDAgMjYyLjVjMCA2NC4xLTEwOSAxMTYuMS0yNDMuNSAxMTYuMS0yNC44IDAtNDguNi0xLjgtNzEuMS01IDcuNyAuNCAxNS41IC42IDIzLjQgLjYgMTM0LjUgMCAyNDMuNS01Ni45IDI0My41LTEyNy4xIDAtMjkuNC0xOS4xLTU2LjQtNTEuMi03OCA2MCAyMS4xIDk4LjkgNTUuMSA5OC45IDkzLjR6TTQ3LjcgMjI3LjljLS4xLTcwLjIgMTA4LjgtMTI3LjMgMjQzLjMtMTI3LjYgNy45IDAgMTUuNiAuMiAyMy4zIC41LTIyLjUtMy4yLTQ2LjMtNC45LTcxLTQuOS0xMzQuNSAuNC0yNDMuNCA1Mi42LTI0My4zIDExNi43IC4xIDM4LjMgMzkuMSA3Mi4zIDk5LjMgOTMuMy0zMi4zLTIxLjUtNTEuNS00OC42LTUxLjYtNzh6bTYwLjIgMzkuOVMxMTguNCAyODEgMTM3LjIgMjgxYzE3LjkgMCAyOC40LTExLjUgMjguNC0yNS4xIDAtMjgtNDAuMi0yNS4xLTQwLjItMzkuNyAwLTUuNCA1LjMtOS4xIDEyLjUtOS4xIDUuNyAwIDExLjMgMi42IDExLjMgNi42bDAgMy45IDE0LjIgMCAwLTcuOWMwLTEyLjEtMTUuNC0xNi44LTI1LjQtMTYuOC0xNi41IDAtMjguNSAxMC4yLTI4LjUgMjQuMSAwIDI2LjYgNDAuMiAyNS40IDQwLjIgMzkuOSAwIDYuNi01LjggMTAuMS0xMi4zIDEwLjEtMTEuOSAwLTIwLjctMTAuMS0yMC43LTEwLjFsLTguOCAxMC45em0xMjAuOC03My42bDAgNTQuNGMwIDExLjMtNy4xIDE3LjgtMTcuOCAxNy44cy0xNy44LTYuNS0xNy44LTE3LjdsMC01NC41LTE1LjggMCAwIDU1YzAgMTguOSAxMy40IDMxLjkgMzMuNyAzMS45IDIwLjEgMCAzMy40LTEzIDMzLjQtMzEuOWwwLTU1LTE1LjcgMHptMzQuNCA4NS40bDE1LjggMCAwLTI5LjUgMTUuNSAwYzE2IDAgMjcuMi0xMS41IDI3LjItMjguMXMtMTEuMi0yNy44LTI3LjItMjcuOGwtMzkuMSAwIDAgMTMuNCA3LjggMCAwIDcyem0xNS44LTQzbDAtMjkuMSAxMi45IDBjOC43IDAgMTMuNyA1LjcgMTMuNyAxNC40IDAgOC45LTUuMSAxNC43LTE0IDE0LjdsLTEyLjYgMHptNTcgNDNsMTUuOCAwIDAtMjkuNSAxNS41IDBjMTYgMCAyNy4yLTExLjUgMjcuMi0yOC4xcy0xMS4yLTI3LjgtMjcuMi0yNy44bC0zOS4xIDAgMCAxMy40IDcuOCAwIDAgNzJ6bTE1LjctNDNsMC0yOS4xIDEyLjkgMGM4LjcgMCAxMy43IDUuNyAxMy43IDE0LjQgMCA4LjktNSAxNC43LTE0IDE0LjdsLTEyLjYgMHptNTcuMSAzNC44YzAgNS44IDIuNCA4LjIgOC4yIDguMmwzNy42IDBjNS44IDAgOC4yLTIuNCA4LjItOC4ybDAtMTMtMTQuMyAwIDAgNS4yYzAgMS43LTEgMi42LTIuNiAyLjZsLTE4LjYgMGMtMS43IDAtMi42LTEtMi42LTIuNmwwLTYxLjJjMC01LjctMi40LTguMi04LjItOC4ybC0xNS40IDAgMCAxMy40IDUuMiAwYzEuNyAwIDIuNiAxIDIuNiAyLjZsMCA2MS4yLS4xIDB6bTYzLjQgMGMwIDUuOCAyLjQgOC4yIDguMiA4LjJsMzguNyAwYzUuNyAwIDguMi0yLjQgOC4yLTguMmwwLTEzLTE0LjMgMCAwIDUuMmMwIDEuNy0xIDIuNi0yLjYgMi42bC0xOS43IDBjLTEuNyAwLTIuNi0xLTIuNi0yLjZsMC0yMC4zIDI3LjcgMCAwLTEzLjQtMjcuNyAwIDAtMjIuNCAxOS4yIDBjMS43IDAgMi42IDEgMi42IDIuNmwwIDUuMiAxNC4yIDAgMC0xM2MwLTUuNy0yLjUtOC4yLTguMi04LjJsLTUxLjYgMCAwIDEzLjQgNy44IDAgMCA2My45IC4xIDB6bTU4LjktNzZsMCA1LjkgMS42IDAgMC01LjkgMi43IDAgMC0xLjItNyAwIDAgMS4yIDIuNyAwem01LjctMS4ybDAgNy4xIDEuNSAwIDAtNS43IDIuMyA1LjcgMS4zIDAgMi4zLTUuNyAwIDUuNyAxLjUgMCAwLTcuMS0yLjMgMC0yLjEgNS4xLTIuMS01LjEtMi40IDB6Il0KICAgIH07CiAgICBmYVNxdWFyZVR3aXR0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXR3aXR0ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidHdpdHRlci1zcXVhcmUiXSwgImYwODEiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTM1MS4zIDE5OS4zYzAgODYuNy02NiAxODYuNi0xODYuNiAxODYuNi0zNy4yIDAtNzEuNy0xMC44LTEwMC43LTI5LjQgNS4zIC42IDEwLjQgLjggMTUuOCAuOCAzMC43IDAgNTguOS0xMC40IDgxLjQtMjgtMjguOC0uNi01My0xOS41LTYxLjMtNDUuNSAxMC4xIDEuNSAxOS4yIDEuNSAyOS42LTEuMi0zMC02LjEtNTIuNS0zMi41LTUyLjUtNjQuNGwwLS44YzguNyA0LjkgMTguOSA3LjkgMjkuNiA4LjMtOS02LTE2LjQtMTQuMS0yMS41LTIzLjZzLTcuOC0yMC4yLTcuNy0zMWMwLTEyLjIgMy4yLTIzLjQgOC45LTMzLjEgMzIuMyAzOS44IDgwLjggNjUuOCAxMzUuMiA2OC42LTkuMy00NC41IDI0LTgwLjYgNjQtODAuNiAxOC45IDAgMzUuOSA3LjkgNDcuOSAyMC43IDE0LjgtMi44IDI5LTguMyA0MS42LTE1LjgtNC45IDE1LjItMTUuMiAyOC0yOC44IDM2LjEgMTMuMi0xLjQgMjYtNS4xIDM3LjgtMTAuMi04LjkgMTMuMS0yMC4xIDI0LjctMzIuOSAzNCAuMiAyLjggLjIgNS43IC4yIDguNXoiXQogICAgfTsKICAgIGZhVHdpdHRlclNxdWFyZSA9IGZhU3F1YXJlVHdpdHRlcjsKICAgIGZhRm9udEF3ZXNvbWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZm9udC1hd2Vzb21lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjI1MDEsIDYyNjk0LCAiZm9udC1hd2Vzb21lLWZsYWciLCAiZm9udC1hd2Vzb21lLWxvZ28tZnVsbCJdLCAiZjJiNCIsICJNOTEuNyA5NkMxMDYuMyA4Ni44IDExNiA3MC41IDExNiA1MiAxMTYgMjMuMyA5Mi43IDAgNjQgMFMxMiAyMy4zIDEyIDUyYzAgMTYuNyA3LjggMzEuNSAyMCA0MWwwIDQxOSA2NCAwIDAtNjQgMzczLjYgMGMxNC42IDAgMjYuNC0xMS44IDI2LjQtMjYuNCAwLTMuNy0uOC03LjMtMi4zLTEwLjdMNDMyIDI3MiA0OTMuNyAxMzMuMWMxLjUtMy40IDIuMy03IDIuMy0xMC43IDAtMTQuNi0xMS44LTI2LjQtMjYuNC0yNi40TDkxLjcgOTZ6Il0KICAgIH07CiAgICBmYUZvbnRBd2Vzb21lRmxhZyA9IGZhRm9udEF3ZXNvbWU7CiAgICBmYUZvbnRBd2Vzb21lTG9nb0Z1bGwgPSBmYUZvbnRBd2Vzb21lOwogICAgZmFXaXJzaW5kaGFuZHdlcmsgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2lyc2luZGhhbmR3ZXJrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbIndzaCJdLCAiZTJkMCIsICJNMTguOSA0NzkuOGw4My40IDAgMC0xMTItODMuNCA0NyAwIDY1em0zMjkgMGw4Mi40IDAgMC02NS04Mi40LTQ3IDAgMTEyem0wLTQ0OGwwIDIxOS44LTEyMy42LTcyLjQtMTIxLjcgNzIuNCAwLTIxOS44LTgzLjcgMCAwIDM2MC44IDIwNS40LTEyMi4zIDIwNiAxMjIuMyAwLTM2MC44LTgyLjMgMHoiXQogICAgfTsKICAgIGZhV3NoID0gZmFXaXJzaW5kaGFuZHdlcms7CiAgICBmYUNvbmZsdWVuY2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY29uZmx1ZW5jZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzhkIiwgIk0yLjggNDEyLjJjLTQuNSA3LjYtMi4xIDE3LjUgNS41IDIyLjJsMTA1LjkgNjUuMmM3LjcgNC43IDE3LjcgMi40IDIyLjQtNS4zIDAtLjEgLjEtLjIgLjEtLjIgNjcuMS0xMTIuMiA4MC41LTk1LjkgMjgwLjktLjcgOC4xIDMuOSAxNy44IC40IDIxLjctNy43IC4xLS4xIC4xLS4zIC4yLS40bDUwLjQtMTE0LjFjMy42LTguMS0uMS0xNy42LTguMS0yMS4zLTIyLjItMTAuNC02Ni4yLTMxLjItMTA1LjktNTAuMy0yNDcuOS0xMjAuNi0zMzAuOCA0NS43LTM3My4xIDExMi42ek01MTAuMiAxMDAuMWM0LjUtNy42IDIuMS0xNy41LTUuNS0yMi4yTDM5OC45IDEyLjhjLTcuNS01LTE3LjYtMy4xLTIyLjYgNC40LS4yIC4zLS40IC42LS42IDEtNjcuMyAxMTIuNi04MS4xIDk1LjYtMjgwLjYgLjktOC4xLTMuOS0xNy44LS40LTIxLjcgNy43LS4xIC4xLS4xIC4zLS4yIC40TDIyLjcgMTQxLjNjLTMuNiA4LjEgLjEgMTcuNiA4LjEgMjEuMyAyMi4yIDEwLjQgNjYuMyAzMS4yIDEwNiA1MC40IDI0OCAxMjAgMzMwLjgtNDUuNCAzNzMuNC0xMTIuOXoiXQogICAgfTsKICAgIGZhRGlnZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkaWdnIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYTYiLCAiTTgxLjcgMTcyLjNsLTgxLjcgMCAwIDE3NC40IDEzMi43IDAgMC0yNTAuNy01MSAwIDAgNzYuM3ptMCAxMzMuNGwtMzAuOCAwIDAtOTIuMyAzMC44IDAgMCA5Mi4zek0zNzguOSAxNzIuM2wwIDE3NC40IDgxLjggMCAwIDI4LjUtODEuOCAwIDAgNDAuOCAxMzMuMSAwIDAtMjQzLjctMTMzLjEgMHptODEuOCAxMzMuNGwtMzAuOCAwIDAtOTIuMyAzMC44IDAgMCA5Mi4zem0tMjM1LjYgNDFsODIuMSAwIDAgMjguNS04Mi4xIDAgMCA0MC44IDEzMy4zIDAgMC0yNDMuNy0xMzMuMyAwIDAgMTc0LjR6bTUxLjItMTMzLjNsMzAuOCAwIDAgOTIuMy0zMC44IDAgMC05Mi4zek0xNTMuMyA5Nmw1MS4zIDAgMCA1MS01MS4zIDAgMC01MXptMCA3Ni4zbDUxLjMgMCAwIDE3NC40LTUxLjMgMCAwLTE3NC40eiJdCiAgICB9OwogICAgZmFUaHJlYWRzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRocmVhZHMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTYxOCIsICJNMzMxLjUgMjM1LjdjMi4yIC45IDQuMiAxLjkgNi4zIDIuOCAyOS4yIDE0LjEgNTAuNiAzNS4yIDYxLjggNjEuNCAxNS43IDM2LjUgMTcuMiA5NS44LTMwLjMgMTQzLjItMzYuMiAzNi4yLTgwLjMgNTIuNS0xNDIuNiA1M2wtLjMgMGMtNzAuMi0uNS0xMjQuMS0yNC4xLTE2MC40LTcwLjItMzIuMy00MS00OC45LTk4LjEtNDkuNS0xNjkuNmwwLS41QzE3IDE4NC4zIDMzLjYgMTI3LjIgNjUuOSA4Ni4yIDEwMi4yIDQwLjEgMTU2LjIgMTYuNSAyMjYuNCAxNmwuMyAwYzcwLjMgLjUgMTI0LjkgMjQgMTYyLjMgNjkuOSAxOC40IDIyLjcgMzIgNTAgNDAuNiA4MS43bC00MC40IDEwLjhjLTcuMS0yNS44LTE3LjgtNDcuOC0zMi4yLTY1LjQtMjkuMi0zNS44LTczLTU0LjItMTMwLjUtNTQuNi01NyAuNS0xMDAuMSAxOC44LTEyOC4yIDU0LjQtMjYuMiAzMy4zLTM5LjggODEuNS00MC4zIDE0My4yIC41IDYxLjcgMTQuMSAxMDkuOSA0MC4zIDE0My4zIDI4IDM1LjYgNzEuMiA1My45IDEyOC4yIDU0LjQgNTEuNC0uNCA4NS40LTEyLjYgMTEzLjctNDAuOSAzMi4zLTMyLjIgMzEuNy03MS44IDIxLjQtOTUuOS02LjEtMTQuMi0xNy4xLTI2LTMxLjktMzQuOS0zLjcgMjYuOS0xMS44IDQ4LjMtMjQuNyA2NC44LTE3LjEgMjEuOC00MS40IDMzLjYtNzIuNyAzNS4zLTIzLjYgMS4zLTQ2LjMtNC40LTYzLjktMTYtMjAuOC0xMy44LTMzLTM0LjgtMzQuMy01OS4zLTIuNS00OC4zIDM1LjctODMgOTUuMi04Ni40IDIxLjEtMS4yIDQwLjktLjMgNTkuMiAyLjgtMi40LTE0LjgtNy4zLTI2LjYtMTQuNi0zNS4yLTEwLTExLjctMjUuNi0xNy43LTQ2LjItMTcuOGwtLjcgMGMtMTYuNiAwLTM5IDQuNi01My4zIDI2LjNsLTM0LjQtMjMuNmMxOS4yLTI5LjEgNTAuMy00NS4xIDg3LjgtNDUuMWwuOCAwYzYyLjYgLjQgOTkuOSAzOS41IDEwMy43IDEwNy43bC0uMiAuMiAuMSAwem0tMTU2IDY4LjhjMS4zIDI1LjEgMjguNCAzNi44IDU0LjYgMzUuMyAyNS42LTEuNCA1NC42LTExLjQgNTkuNS03My4yLTEzLjItMi45LTI3LjgtNC40LTQzLjQtNC40LTQuOCAwLTkuNiAuMS0xNC40IC40LTQyLjkgMi40LTU3LjIgMjMuMi01Ni4yIDQxLjhsLS4xIC4xeiJdCiAgICB9OwogICAgZmFXcHJlc3NyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndwcmVzc3IiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsicmVuZGFjdCJdLCAiZjNlNCIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MjcuMyAxNjYuNmMtMTUuMiAzNC41LTMwLjQgNjktNDUuNiAxMDMuNS0yLjQgNS41LTYuOSA4LjItMTMgOC4yLTIzIDAtNDYgLjEtNjkgMC01LjEgMC04LjIgMS45LTEwLjMgNi43LTEwLjIgMjMuNi0yMC42IDQ3LTMxIDcwLjUtMS41IDMuNS00LjEgNS4zLTcuOSA1LjMtNDUuOSAwLTkxLjkgMC0xMzcuOCAwLTMuMSAwLTUuNi0xLjEtNy43LTMuNC0xMS4yLTEyLjMtMjIuNS0yNC42LTMzLjctMzYuOS0yLjctMy0yLjgtNi4yLTEuMi05LjcgOC43LTE5LjUgMTcuMy0zOS4xIDI1LjktNTguNyAxMi45LTI5LjQgMjUuOS01OC43IDM4LjctODguMSAxLjctMy45IDQuMy01LjcgOC41LTUuNyAxNC4yIC4xIDI4LjUgMCA0Mi43IDAgNi4yIDAgOS4yIDQuOCA2LjcgMTAuNi0xMy42IDMwLjgtMjcuMiA2MS42LTQwLjcgOTIuMy01LjcgMTMtMTEuNCAyNi0xNy4xIDM5LTMuOSA5IDcuMSAxMiAxMSA1LjYgLjItLjQtMS40IDQuMiAzMC02Ny43IDEuNC0zLjEgMy40LTQuNCA2LjgtNC40IDE1LjIgLjEgMzAuNCAwIDQ1LjYgMCA1LjYgMCA3LjkgMy42IDUuNyA4LjctOC4zIDE5LTE2LjcgMzcuOS0yNSA1Ni45LTUgMTEuNCA4LjEgMTIuNSAxMS4zIDUuMyAwLS4xIDI3LjktNjMuMyAzMi4yLTczLjIgMi00LjYgNS40LTYuNSAxMC4zLTYuNSAyNi40IC4xIDUyLjkgMCA3OS4zIDAgMTIuNCAwIDEzLjktMTMuNiAzLjktMTMuNi0yNS4zIDAtNTAuNSAwLTc1LjggMC02LjMgMC03LjgtMi41LTUuMy04LjMgNS44LTEzLjEgMTEuNi0yNi4xIDE3LjMtMzkuMiAxLjctNCA0LjUtNS44IDguOC01LjggMjMuMSAuMSAyNiAwIDEzMC44IDAgNi4xIDAgOCAyLjggNS42IDguM3oiXQogICAgfTsKICAgIGZhUmVuZGFjdCA9IGZhV3ByZXNzcjsKICAgIGZhWW9hc3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAieW9hc3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJiMSIsICJNOTEuMyA3NmwxODYgMC03IDE4LjktMTc5IDBjLTM5LjcgMC03MS45IDMxLjYtNzEuOSA3MC4zbDAgMjA1LjRjMCAzNS40IDI0LjkgNzAuMyA4NCA3MC4zbDAgMTkuMS0xMi4xIDBDNDEuMiA0NjAgMCA0MTkuOCAwIDM3MC41TDAgMTY1LjJDMCAxMTUuOSA0MC43IDc2IDkxLjMgNzZ6TTMyMC40IDIwbDY2LjUgMGMtMTQzLjggMzc4LjEtMTQ1LjcgMzk4LjktMTg0LjcgNDM5LjMtMjAuOCAyMS42LTQ5LjMgMzEuNy03OC4zIDMyLjdsMC01MS4xYzQ5LjItNy43IDY0LjYtNDkuOSA2NC42LTc1LjMgMC0yMC4xIC42LTEyLjYtODIuMS0yMjMuMmw2MS40IDAgNTAuNCAxNTYuNiAxMDIuMi0yNzl6TTQ0OCAxNjEuNWwwIDI5OC41LTIxNCAwYzYuNi05LjYgMTAuNy0xNi4zIDEyLjEtMTkuNGwxODIuNSAwIDAtMjc5LjFjMC0zMi41LTE3LjEtNTEuOS00OC4yLTYyLjlMMzg3LjEgODFjNDEuNyAxMy42IDYwLjkgNDMuMSA2MC45IDgwLjV6Il0KICAgIH07CiAgICBmYU5pbWJsciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJuaW1ibHIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjVhOCIsICJNMjQ2LjYgMzUzLjNhMjcgMjcgMCAxIDEgMC01NCAyNyAyNyAwIDEgMSAwIDU0em0tNzkuNC0yN2EyNy4xIDI3LjEgMCAxIDEgLTU0LjMgMCAyNy4xIDI3LjEgMCAxIDEgNTQuMyAwek0xOTEuOCAxNTlDMTU3IDE1OSA4OS40IDE3OC44IDU5LjIgMjI3TDE0IDAgMTQgMzM1LjVDMTQgNDMzLjEgOTMuNiA1MTIgMTkxLjggNTEyUzM2OS41IDQzMyAzNjkuNSAzMzUuNSAyOTAuMSAxNTkgMTkxLjggMTU5em0wIDMwOC4xYy03My4zIDAtMTMyLjUtNTguOS0xMzIuNS0xMzEuNnM1OS4yLTEzMS42IDEzMi41LTEzMS42IDEzMi41IDU4LjkgMTMyLjUgMTMxLjUtNTkuMyAxMzEuNi0xMzIuNSAxMzEuNmwwIC4xeiJdCiAgICB9OwogICAgZmFQaXhlbGZlZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaXhlbGZlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlN2RiIiwgIk0yNTYgMGEyNTYgMjU2IDAgMSAxIDAgNTEyIDI1NiAyNTYgMCAxIDEgMC01MTJ6TTIzNS43IDMxMS45bDQ3IDBjNDQuMiAwIDgwLjEtMzQuOSA4MC4xLTc4cy0zNS45LTc4LTgwLjEtNzhsLTY3LjggMGMtMjUuNSAwLTQ2LjIgMjAuMS00Ni4yIDQ1bDAgMTc1LjEgNjctNjQuMXoiXQogICAgfTsKICAgIGZhWWFob28gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAieWFob28iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjE5ZSIsICJNMjIzLjggMTQxLjFsLTU2LjcgMTQzLjItNTYtMTQzLjItOTYuMSAwIDEwNS44IDI0OS4xLTM4LjYgODkuOCA5NC4yIDAgMTQwLjktMzM4LjktOTMuNiAwek0zMjkuMiAyNzYuOWE1OC4yIDU4LjIgMCAxIDAgMCAxMTYuNCA1OC4yIDU4LjIgMCAxIDAgMC0xMTYuNHpNMzk0LjcgMzJsLTkzIDIyMy41IDEwNC44IDAgOTIuNi0yMjMuNS0xMDQuNCAweiJdCiAgICB9OwogICAgZmFCbHVlc2t5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJsdWVza3kiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTY3MSIsICJNNDA3LjggMjk0LjdjLTMuMy0uNC02LjctLjgtMTAtMS4zIDMuNCAuNCA2LjcgLjkgMTAgMS4zek0yODggMjI3LjFDMjYxLjkgMTc2LjQgMTkwLjkgODEuOSAxMjQuOSAzNS4zIDYxLjYtOS40IDM3LjUtMS43IDIxLjYgNS41IDMuMyAxMy44IDAgNDEuOSAwIDU4LjRTOS4xIDE5NCAxNSAyMTMuOWMxOS41IDY1LjcgODkuMSA4Ny45IDE1My4yIDgwLjcgMy4zLS41IDYuNi0uOSAxMC0xLjQtMy4zIC41LTYuNiAxLTEwIDEuNC05My45IDE0LTE3Ny4zIDQ4LjItNjcuOSAxNjkuOSAxMjAuMyAxMjQuNiAxNjQuOC0yNi43IDE4Ny43LTEwMy40IDIyLjkgNzYuNyA0OS4yIDIyMi41IDE4NS42IDEwMy40IDEwMi40LTEwMy40IDI4LjEtMTU2LTY1LjgtMTY5LjktMy4zLS40LTYuNy0uOC0xMC0xLjMgMy40IC40IDYuNyAuOSAxMCAxLjMgNjQuMSA3LjEgMTMzLjYtMTUuMSAxNTMuMi04MC43IDUuOS0xOS45IDE1LTEzOC45IDE1LTE1NS41cy0zLjMtNDQuNy0yMS42LTUyLjljLTE1LjgtNy4xLTQwLTE0LjktMTAzLjIgMjkuOC02Ni4xIDQ2LjYtMTM3LjEgMTQxLjEtMTYzLjIgMTkxLjh6Il0KICAgIH07CiAgICBmYVNjcmliZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzY3JpYmQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjI4YSIsICJNNDIuNiAyNTIuN2MtMTYuMS0xOS0yNC43LTQ1LjktMjQuOC03OS45IDAtMTAwLjQgNzUuMi0xNTMuMSAxNjcuMi0xNTMuMSA5OC42LTEuNiAxNTYuOCA0OSAxODQuMyA3MC42bC01MC41IDcyLjEtMzcuMy0yNC42IDI2LjktMzguNmMtMzYuNS0yNC03OS40LTM2LjUtMTIzLTM1LjgtNTAuNy0uOC0xMTEuNyAyNy4yLTExMS43IDc2LjIgMCAxOC43IDExLjIgMjAuNyAyOC42IDE1LjYgMjMuMy01LjMgNDEuOSAuNiA1NS44IDE0IDI2LjQgMjQuMyAyMy4yIDY3LjYtLjcgOTEuOS0yOS4yIDI5LjUtODUuMiAyNy4zLTExNC44LTguNHptMzE3LjcgNS45Yy0xNS41LTE4LjgtMzguOS0yOS40LTYzLjItMjguNi0zOC4xLTItNzEuMSAyOC03MC41IDY3LjItLjcgMTYuOCA2IDMzIDE4LjQgNDQuMyAxNC4xIDEzLjkgMzMgMTkuNyA1Ni4zIDE0LjQgMTcuNC01LjEgMjguNi0zLjEgMjguNiAxNS42IDAgNC4zLS41IDguNS0xLjQgMTIuNy0xNi43IDQwLjktNTkuNSA2NC40LTEyMS40IDY0LjQtNTEuOSAuMi0xMDIuNC0xNi40LTE0NC4xLTQ3LjNsMzMuNy0zOS40LTM1LjYtMjcuNC02MC44IDcxLjggMTUuNCAxMy44YzUyLjUgNDYuOCAxMjAuNCA3Mi41IDE5MC43IDcyLjIgNTEuNCAwIDk0LjQtMTAuNSAxMzMuNi00NC4xIDU3LjEtNTEuNCA1NC4yLTE0OS4yIDIwLjMtMTg5LjZ6Il0KICAgIH07CiAgICBmYUNyZWF0aXZlQ29tbW9uc1BkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtcGQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlYyIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2em0wIDQ0OS41Yy0xMzkuMiAwLTIzNS44LTEzOC0xOTAuMi0yNjcuOWw3OC44IDM1LjFjLTIuMSAxMC41LTMuMyAyMS41LTMuMyAzMi45IDAgOTkgNzMuOSAxMjYuOSAxMjAuNCAxMjYuOSAyMi45IDAgNTMuNS02LjcgNzkuNC0yOS41TDMwNSAzMTEuMWMtNS41IDYuMy0xNy42IDE2LjctMzYuMyAxNi43LTM3LjggMC01My43LTM5LjktNTMuOS03MS45IDIzMC40IDEwMi42IDIxNi41IDk2LjUgMjE3LjkgOTYuOC0zNC4zIDYyLjQtMTAwLjYgMTA0LjgtMTc2LjcgMTA0Ljh6bTE5NC4yLTE1MGwtMjI0LTEwMGMxOC44LTM0IDU0LjktMzAuNyA3NC43LTExbDQwLjQtNDEuNmMtMjcuMS0yMy4zLTU4LTI3LjUtNzguMS0yNy41LTQ3LjQgMC04MC45IDIwLjUtMTAwLjcgNTEuNkw4Ny42IDE0NS42YzM2LjEtNTQuOSA5OC4xLTkxLjIgMTY4LjUtOTEuMiAxMTEuMSAwIDIwMS41IDkwLjQgMjAxLjUgMjAxLjUgMCAxOC0yLjQgMzUuNC02LjggNTItLjMtLjEtLjQtLjItLjYtLjR6Il0KICAgIH07CiAgICBmYUVhcmx5YmlyZHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZWFybHliaXJkcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzlhIiwgIk0zMjkuMyA0Ny41YzEuMi0xMyAyMS4zLTE0IDM2LjYtOC43IC45IC4zIDI2LjIgOS43IDE5IDE1LjItMjcuOS03LjQtNTYuNCAxOC4yLTU1LjYtNi41em0tMjAxIDYuOWMzMC43LTguMSA2MiAyMCA2MS4xLTcuMS0xLjMtMTQuMi0yMy40LTE1LjMtNDAuMi05LjYtMSAuMy0yOC43IDEwLjUtMjAuOSAxNi43ek0zMzUuNSAxNjBhMTYgMTYgMCAxIDAgMCAzMiAxNiAxNiAwIDEgMCAwLTMyem0tMTU5LjcgMGExNiAxNiAwIDEgMCAwIDMyIDE2IDE2IDAgMSAwIDAtMzJ6TTQ5NC4zIDMyMy4yYy05LjkgMjQtNDAuNyAxMS02My45LTEuMi0xMy41IDY5LjEtNTguMSAxMTEuNC0xMjYuMyAxMjQuMiAuMyAuOS0yLS4xIDI0IDEgMzMuNiAxLjQgNjMuOC0zLjEgOTcuNC04LTE5LjgtMTMuOC0xMS40LTM3LjEtOS44LTM4LjEgMS40LS45IDE0LjcgMS43IDIxLjYgMTEuNSA4LjYtMTIuNSAyOC40LTE0LjggMzAuMi0xMy42IDEuNiAxLjEgNi42IDIwLjktNi45IDM0LjYgNC43LS45IDguMi0xLjYgOS44LTIuMSAyLjYtLjggMTcuNyAxMS4zIDMuMSAxMy4zLTE0LjMgMi4zLTIyLjYgNS4xLTQ3LjEgMTAuOC00NS45IDEwLjctODUuOSAxMS44LTExNy43IDEyLjhsMSAxMS42YzMuOCAxOC4xLTIzLjQgMjQuMy0yNy42IDYuMiAuOCAxNy45LTI3LjEgMjEuOC0yOC40LTFsLS41IDUuM2MtLjcgMTguNC0yOC40IDE3LjktMjguMy0uNi03LjUgMTMuNS0yOC4xIDYuOC0yNi40LTguNWwxLjItMTIuNGMtMzYuNyAuOS01OS43IDMuMS02MS44IDMuMS0yMC45IDAtMjAuOS0zMS42IDAtMzEuNiAyLjQgMCAyNy43IDEuMyA2My4yIDIuOC02MS4xLTE1LjUtMTAzLjctNTUtMTE0LjktMTE4LjItMjUgMTIuOC01Ny41IDI2LjgtNjguMiAuOC0xMC41LTI1LjQgMjEuNS00Mi42IDY2LjgtNzMuNCAuNy02LjYgMS42LTEzLjMgMi43LTE5LjgtMTQuNC0xOS42LTExLjYtMzYuMy0xNi4xLTYwLjQtMTYuOCAyLjQtMjMuMi05LjEtMjMuNi0yMy4xIC4zLTcuMyAyLjEtMTQuOSAyLjQtMTUuNCAxLjEtMS44IDEwLjEtMiAxMi43LTIuNiA2LTMxLjcgNTAuNi0zMy4yIDkwLjktMzQuNSAxOS43LTIxLjggNDUuMi00MS41IDgwLjktNDguMy0xNS4zLTE5LjQtMy40LTM5LjktMi40LTQwLjQgMS43LS44IDIxLjIgNC4zIDI2LjMgMjMuMiA1LjItOC44IDE4LjMtMTEuNCAxOS42LTEwLjcgMS4xIC42IDYuNCAxNS00LjkgMjUuOSA0MC4zIDMuNSA3Mi4yIDI0LjcgOTYgNTAuNyAzNi4xIDEuNSA3MS44IDUuOSA3Ny4xIDM0IDIuNyAuNiAxMS42IC44IDEyLjcgMi42IC4zIC41IDIuMSA4LjEgMi40IDE1LjQtLjUgMTMuOS02LjggMjUuNC0yMy42IDIzLjEtMy4yIDE3LjMtMi43IDMyLjktOC43IDQ3LjcgMi40IDExLjcgNCAyMy44IDQuOCAzNi40IDM3IDI1LjQgNzAuMyA0Mi41IDYwLjMgNjYuOXpNMjIzLjUgMTU5LjljLjktNDQtMzcuOS00Mi4yLTc4LjYtNDAuMy0yMS43IDEtMzguOSAxLjktNDUuNSAxMy45LTExLjQgMjAuOSA1LjkgOTIuOSAyMy4yIDEwMS4yIDkuOCA0LjcgNzMuNCA3LjkgODYuMy03LjEgOC4yLTkuNCAxNS00OS40IDE0LjYtNjcuN3ptNTIgNTguM2MtNC4zLTEyLjQtNi0zMC4xLTE1LjMtMzIuNy0yLS41LTktLjUtMTEgMC0xMCAyLjgtMTAuOCAyMi4xLTE3IDM3LjIgMTUuNCAwIDE5LjMgOS43IDIzLjcgOS43IDQuMyAwIDYuMy0xMS4zIDE5LjYtMTQuMnptMTM1LjctODQuN2MtNi42LTEyLjEtMjQuOC0xMi45LTQ2LjUtMTMuOS00MC4yLTEuOS03OC4yLTMuOC03Ny4zIDQwLjMtLjUgMTguMyA1IDU4LjMgMTMuMiA2Ny44IDEzIDE0LjkgNzYuNiAxMS44IDg2LjMgNy4xIDE1LjgtNy42IDM2LjUtNzguOSAyNC4zLTEwMS4zeiJdCiAgICB9OwogICAgZmFTcXVhcmVPZG5va2xhc3NuaWtpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1vZG5va2xhc3NuaWtpIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbIm9kbm9rbGFzc25pa2ktc3F1YXJlIl0sICJmMjY0IiwgIk0yMjQgMTM3LjFjLTUuNC0uMy0xMC44IC42LTE1LjkgMi40cy05LjcgNC44LTEzLjYgOC41LTcgOC4yLTkuMiAxMy4yLTMuMiAxMC4zLTMuMiAxNS43IDEuMSAxMC44IDMuMiAxNS43IDUuMyA5LjUgOS4yIDEzLjIgOC42IDYuNiAxMy42IDguNSAxMC41IDIuNyAxNS45IDIuNGM1LjQgLjMgMTAuOC0uNiAxNS45LTIuNHM5LjctNC44IDEzLjYtOC41IDctOC4yIDkuMi0xMy4yIDMuMi0xMC4zIDMuMi0xNS43LTEuMS0xMC44LTMuMi0xNS43LTUuMy05LjUtOS4yLTEzLjItOC42LTYuNi0xMy42LTguNS0xMC41LTIuNy0xNS45LTIuNHpNMzg0IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTIyNCAyNThhODEgODEgMCAxIDEgMC0xNjIuMSA4MSA4MSAwIDEgMSAwIDE2Mi4xem01OS4zIDYuMmMxNi44LTEzLjIgMjkuNS01LjUgMzQuMSAzLjYgNy44IDE2LTEuMSAyMy43LTIxLjUgMzctMTcuMSAxMC45LTQwLjcgMTUuMi01Ni4yIDE2LjhsMTMgMTIuOSA0Ny43IDQ3LjdjMTcuNCAxNy45LTExIDQ1LjgtMjguNiAyOC42LTEyLTEyLjItMjkuNS0yOS43LTQ3LjctNDcuOWwtNDcuNyA0Ny45Yy0xNy43IDE3LjItNDYtMTEtMjguNC0yOC42IDMuNy0zLjcgNy45LTcuOSAxMi41LTEyLjUgMTAuNC0xMC40IDIyLjYtMjIuNyAzNS4yLTM1LjJsMTIuOS0xMi45Yy0xNS40LTEuNi0zOS4zLTUuNy01Ni42LTE2LjgtMjAuMy0xMy4zLTI5LjMtMjAuOS0yMS40LTM3IDQuNi05LjEgMTcuMy0xNi44IDM0LjEtMy42IDAgMCAyMi43IDE4IDU5LjMgMThzNTkuMy0xOCA1OS4zLTE4eiJdCiAgICB9OwogICAgZmFPZG5va2xhc3NuaWtpU3F1YXJlID0gZmFTcXVhcmVPZG5va2xhc3NuaWtpOwogICAgZmFNYXJrZG93biA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtYXJrZG93biIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNjBmIiwgIk01OTMuOCA1OS4xbC01NDcuNiAwQzIwLjcgNTkuMSAwIDc5LjggMCAxMDUuMkwwIDQwNi43YzAgMjUuNSAyMC43IDQ2LjIgNDYuMiA0Ni4ybDU0Ny43IDBjMjUuNSAwIDQ2LjItMjAuNyA0Ni4xLTQ2LjFsMC0zMDEuNmMwLTI1LjQtMjAuNy00Ni4xLTQ2LjItNDYuMXpNMzM4LjUgMzYwLjZsLTYxLjUgMCAwLTEyMC02MS41IDc2LjktNjEuNS03Ni45IDAgMTIwLTYxLjcgMCAwLTIwOS4yIDYxLjUgMCA2MS41IDc2LjkgNjEuNS03Ni45IDYxLjUgMCAwIDIwOS4yIC4yIDB6bTEzNS4zIDMuMWwtOTIuMy0xMDcuNyA2MS41IDAgMC0xMDQuNiA2MS41IDAgMCAxMDQuNiA2MS41IDAtOTIuMiAxMDcuN3oiXQogICAgfTsKICAgIGZhVHlwbzMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidHlwbzMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQyYiIsICJNMTc4LjcgNzguNGMwLTI0LjcgNS40LTMyLjQgMTMuOS0zOS40LTY5LjUgOC41LTE0OS4zIDM0LTE3Ni4zIDY2LjQtNS40IDcuNy05LjMgMjAuOC05LjMgMzcuMSAwIDEwMy41IDEwNi44IDMzNy41IDE4NC4xIDMzNy41IDM2LjMgMCA5Ny4zLTU5LjUgMTQ2LjctMTM5LTcgMi4zLTExLjYgMi4zLTE4LjUgMi4zLTU3LjIgMC0xNDAuNi0xOTguNS0xNDAuNi0yNjQuOXpNMzAxLjUgMzJjLTMwLjEgMC00MS43IDUuNC00MS43IDM2LjMgMCA2Ni40IDUzLjggMTk4LjUgMTAxLjcgMTk4LjUgMjYuMyAwIDc4LjgtOTkuNyA3OC44LTE4Mi4zIDAtNDAuOS02Ny01Mi41LTEzOC44LTUyLjV6Il0KICAgIH07CiAgICBmYUpvb21sYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJqb29tbGEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFhYSIsICJNLjYgOTIuMWMwLTMzLjMgMjYuOC02MC4xIDU5LjgtNjAuMSAzMCAwIDU0LjUgMjEuOSA1OS4yIDUwLjIgMzIuNi03LjYgNjcuMSAuNiA5Ni41IDMwbC00NC4zIDQ0LjNjLTIwLjUtMjAuNS00Mi42LTE2LjMtNTUuNC0zLjUtMTQuMyAxNC4zLTE0LjMgMzcuOSAwIDUyLjJsOTkuNSA5OS41LTQ0IDQ0LjNjLTg3LjctODcuMi00OS43LTQ5LjctOTkuOC05OS43LTI2LjgtMjYuNS0zNS02NC44LTI0LjgtOTguOS0yNi45LTUuOC00Ni43LTI5LjctNDYuNy01OC4zek0xMzAuMSAyMDguNWw0NC4zIDQ0LjNjMTAtMTAgODkuNy04OS43IDk5LjctOTkuOCAxNC4zLTE0LjMgMzcuNi0xNC4zIDUxLjkgMCAxMi44IDEyLjggMTcgMzUtMy41IDU1LjRsNDQgNDQuM2MzMS4yLTMxLjIgMzguNS02Ny42IDI4LjktMTAxLjIgMjkuMi00LjEgNTEuOS0yOS4yIDUxLjktNTkuNSAwLTMzLjItMjYuOC02MC4xLTU5LjgtNjAuMS0zMC4zIDAtNTUuNCAyMi41LTU5LjUgNTEuNi0zMy44LTkuOS03MS43LTEuNS05OC4zIDI1LjEtMTguMyAxOS4xLTcxLjEgNzEuNS05OS42IDk5Ljl6TTM5Ni40IDM2MC43YzguMi0zMi43LS45LTY4LjUtMjYuMy05My45LTExLjgtMTIuMiA1IDQuNy05OS41LTk5LjdsLTQ0LjMgNDQuMyA5OS43IDk5LjdjMTQuMyAxNC4zIDE0LjMgMzcuNiAwIDUxLjktMTIuOCAxMi44LTM1IDE3LTU1LjQtMy41bC00NCA0NC4zYzI3LjYgMzAuMiA2OCAzOC44IDEwMi43IDI4IDUuNSAyNy40IDI5LjcgNDguMSA1OC45IDQ4LjEgMzMgMCA1OS44LTI2LjggNTkuOC02MC4xIDAtMzAuMi0yMi41LTU1LTUxLjYtNTkuMXptLTg0LjMtNTMuMWwtNDQtNDQuM2MtODcgODYuNC01MC40IDUwLjQtOTkuNyA5OS44LTE0LjMgMTQuMy0zNy42IDE0LjMtNTEuOSAwLTEzLjEtMTMuNC0xNi45LTM1LjMgMy4yLTU1LjRsLTQ0LTQ0LjNjLTMwLjIgMzAuMi0zOCA2NS4yLTI5LjUgOTguMy0yNi43IDYtNDYuMiAyOS45LTQ2LjIgNTguMiAwIDMzLjMgMjYuOCA2MC4xIDU5LjggNjAuMSAyOC42IDAgNTIuNS0xOS44IDU4LjYtNDYuNyAzMi43IDguMiA2OC41LS42IDk0LjItMjYgMzIuMS0zMiAxMi4yLTEyLjQgOTkuNS05OS43eiJdCiAgICB9OwogICAgZmFXZWl4aW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2VpeGluIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxZDciLCAiTTM4NS4yIDE2Ny42YzYuNCAwIDEyLjYgLjMgMTguOCAxLjEtMTYuNi03OC40LTEwMC43LTEzNi43LTE5Ni4zLTEzNi43LTEwNy4yIDAtMTk0LjcgNzIuOC0xOTQuNyAxNjUuNCAwIDUzLjQgMjkuMyA5Ny41IDc3LjkgMTMxLjZsLTE5LjMgNTguNiA2OC0zNC4xYzI0LjQgNC44IDQzLjggOS43IDY4LjIgOS43IDYuMiAwIDEyLjEtLjMgMTguMy0uOC00LTEyLjktNi4yLTI2LjYtNi4yLTQwLjgtLjEtODQuOSA3Mi45LTE1NCAxNjUuMy0xNTR6TTI4MC43IDExNC43YzE0LjUgMCAyNC4yIDkuNyAyNC4yIDI0LjQgMCAxNC41LTkuNyAyNC4yLTI0LjIgMjQuMi0xNC44IDAtMjkuMy05LjctMjkuMy0yNC4yIC4xLTE0LjcgMTQuNi0yNC40IDI5LjMtMjQuNHpNMTQ0LjMgMTYzLjNjLTE0LjUgMC0yOS4zLTkuNy0yOS4zLTI0LjIgMC0xNC44IDE0LjgtMjQuNCAyOS4zLTI0LjQgMTQuOCAwIDI0LjQgOS43IDI0LjQgMjQuNCAwIDE0LjYtOS42IDI0LjItMjQuNCAyNC4yek01NjMgMzE5LjRjMC03Ny45LTc3LjktMTQxLjMtMTY1LjQtMTQxLjMtOTIuNyAwLTE2NS40IDYzLjQtMTY1LjQgMTQxLjNTMzA1IDQ2MC43IDM5Ny42IDQ2MC43YzE5LjMgMCAzOC45LTUuMSA1OC42LTkuOWw1My40IDI5LjMtMTQuOC00OC42QzUzNCA0MDIuMSA1NjMgMzYzLjIgNTYzIDMxOS40ek0zNDMuOSAyOTQuOWMtOS43IDAtMTkuMy05LjctMTkuMy0xOS42IDAtOS43IDkuNy0xOS4zIDE5LjMtMTkuMyAxNC44IDAgMjQuNCA5LjcgMjQuNCAxOS4zIDAgMTAtOS43IDE5LjYtMjQuNCAxOS42em0xMDcuMSAwYy05LjcgMC0xOS4zLTkuNy0xOS4zLTE5LjYgMC05LjcgOS43LTE5LjMgMTkuMy0xOS4zIDE0LjUgMCAyNC40IDkuNyAyNC40IDE5LjMgLjEgMTAtOS45IDE5LjYtMjQuNCAxOS42eiJdCiAgICB9OwogICAgZmFHcnVudCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJncnVudCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmM2FkIiwgIk02MS42IDE4OS4zYy0xLjEgMTAgNS4yIDE5LjEgNS4yIDE5LjEgLjctNy41IDIuMi0xMi44IDQtMTYuNiAuNCAxMC4zIDMuMiAyMy41IDEyLjggMzQuMSA2LjkgNy42IDM1LjYgMjMuMyA1NC45IDYuMSAxIDIuNCAyLjEgNS4zIDMgOC41IDIuOSAxMC4zLTIuNyAyNS4zLTIuNyAyNS4zczE1LjEtMTcuMSAxMy45LTMyLjVjMTAuOC0uNSAyMS40LTguNCAyMS4xLTE5LjUgMCAwLTE4LjkgMTAuNC0zNS41LTguOC05LjctMTEuMi00MC45LTQyLTgzLjEtMzEuOCA0LjMgMSA4LjkgMi40IDEzLjUgNC4xbC0uMSAwYy00LjIgMi02LjUgNy4xLTcgMTJ6bTI4LjMtMS44YzE5LjUgMTEgMzcuNCAyNS43IDQ0LjkgMzctNS43IDMuMy0yMS43IDEwLjQtMzgtMS43LTEwLjMtNy42LTkuOC0yNi4yLTYuOS0zNS4zek0yMzIgMjMzLjNjLTEuMiAxNS41IDEzLjkgMzIuNSAxMy45IDMyLjVzLTUuNi0xNS0yLjctMjUuM2MuOS0zLjIgMi02IDMtOC41IDE5LjMgMTcuMyA0OCAxLjUgNTQuOC02LjEgOS42LTEwLjYgMTIuMy0yMy44IDEyLjgtMzQuMSAxLjggMy44IDMuNCA5LjEgNCAxNi42IDAgMCA2LjQtOS4xIDUuMi0xOS4xLS42LTUtMi45LTEwLTctMTEuOGwtLjEgMGM0LjYtMS44IDkuMi0zLjIgMTMuNS00LjEtNDIuMy0xMC4yLTczLjQgMjAuNi04My4xIDMxLjgtMTYuNyAxOS4yLTM1LjUgOC44LTM1LjUgOC44LS4yIDEwLjkgMTAuNCAxOC45IDIxLjIgMTkuM3ptNjIuNy00NS44YzMgOS4xIDMuNCAyNy43LTcgMzUuNC0xNi4zIDEyLjEtMzIuMiA1LTM3LjkgMS42IDcuNS0xMS40IDI1LjQtMjYgNDQuOS0zN3ptLTEzNC40IDIzMWwtMjkuNCAwYy01LjUgMC04LjIgMS42LTkuNSAyLjktMS45IDItMi4yIDQuNy0uOSA4LjEgMy41IDkuMSAxMS40IDE2LjUgMTMuNyAxOC42IDMuMSAyLjcgNy41IDQuMyAxMS44IDQuMyA0LjQgMCA4LjMtMS43IDExLTQuNiA3LjUtOC4yIDExLjktMTcuMSAxMy0xOS44IC42LTEuNSAxLjMtNC41LS45LTYuOC0xLjgtMS44LTQuNy0yLjctOC44LTIuN3pNMzQ5LjUgMzE3LjNjLTIuNCAxNy45LTEzIDMzLjgtMjQuNiA0My43LTMuMS0yMi43LTMuNy01NS41LTMuNy02Mi40IDAtMTQuNyA5LjUtMjQuNSAxMi4yLTI2LjEgMi41LTEuNSA1LjQtMyA4LjMtNC42IDE4LTkuNiA0MC40LTIxLjYgNDAuNC00My43IDAtMTYuMi05LjMtMjMuMi0xNS40LTI3LjgtLjgtLjYtMS41LTEuMS0yLjItMS43LTIuMS0xLjctMy43LTMtNC4zLTQuNC00LjQtOS44LTMuNi0zNC4yLTEuNy0zNy42IC42LS42IDE2LjctMjAuOSAxMS44LTM5LjItMi03LjQtNi45LTEzLjMtMTQuMS0xNy01LjMtMi43LTExLjktNC4yLTE5LjUtNC41LS4xLTItLjUtMy45LS45LTUuOS0uNi0yLjYtMS4xLTUuMy0uOS04LjEgLjQtNC43IC44LTkgMi4yLTExLjMgOC40LTEzLjMgMjguOC0xNy42IDI5LTE3LjZsMTIuMy0yLjQtOC4xLTkuNWMtLjEtLjItMTcuMy0xNy41LTQ2LjMtMTcuNS03LjkgMC0xNiAxLjMtMjQuMSAzLjktMjQuMiA3LjgtNDIuOSAzMC41LTQ5LjQgMzkuMy0zLjEtMS02LjMtMS45LTkuNi0yLjctNC4yLTE1LjggOS0zOC41IDktMzguNXMtMTMuNi0zLTMzLjcgMTUuMmMtMi42LTYuNS04LjEtMjAuNS0xLjgtMzcuMi0yOS41IDEwLjQtMzYuOSAyNi4zLTM5LjEgNDAuNy03LjYtNS40LTYuNy0yMy4xLTcuMi0yNy42LTcuNSAuOS0yOS4yIDIxLjktMjguMiA0OC4zLTIgLjUtMy45IDEuMS01LjkgMS43LTYuNS04LjgtMjUuMS0zMS41LTQ5LjQtMzkuMy03LjktMi4yLTE2LTMuNS0yMy45LTMuNS0yOSAwLTQ2LjEgMTcuMy00Ni4zIDE3LjVsLTguMSA5LjQgMTIuMyAyLjRjLjIgMCAyMC42IDQuMyAyOSAxNy42IDEuNCAyLjIgMS44IDYuNiAyLjIgMTEuMyAuMiAyLjgtLjQgNS41LS45IDguMS0uNCAxLjktLjggMy45LS45IDUuOS03LjcgLjMtMTQuMiAxLjgtMTkuNSA0LjUtNy4yIDMuNy0xMi4xIDkuNi0xNC4xIDE3LTUgMTguMiAxMS4yIDM4LjUgMTEuOCAzOS4yIDEuOSAzLjQgMi43IDI3LjgtMS43IDM3LjYtLjYgMS40LTIuMiAyLjctNC4zIDQuNC0uNyAuNS0xLjQgMS4xLTIuMiAxLjctNi4xIDQuNi0xNS40IDExLjctMTUuNCAyNy44IDAgMjIuMSAyMi40IDM0LjEgNDAuNCA0My43IDMgMS42IDUuOCAzLjEgOC4zIDQuNiAyLjcgMS42IDEyLjIgMTEuNCAxMi4yIDI2LjEgMCA2LjktLjYgMzkuNy0zLjcgNjIuNC0xMS42LTkuOS0yMi4yLTI1LjktMjQuNi00My44IDAgMC0yOS4yIDIyLjYtMjAuNiA3MC44IDUuMiAyOS41IDIzLjIgNDYuMSA0NyA1NC43IDguOCAxOS4xIDI5LjQgNDUuNyA2Ny4zIDQ5LjYgMTQuNCAxMS44IDM0LjQgMTkuNSA2My42IDE5LjVsLjIgMGMyOS4xIDAgNDkuMS03LjcgNjMuNi0xOS41IDM3LjktMy45IDU4LjUtMzAuNSA2Ny4zLTQ5LjYgMjMuOC04LjcgNDEuNy0yNS4yIDQ3LTU0LjcgOC4yLTQ4LjQtMjEuMS03MC45LTIxLjEtNzAuOXpNMzA2IDM3LjdjNS42LTEuOCAxMS42LTIuNyAxNy43LTIuNyAxMSAwIDE5LjkgMyAyNC43IDUtMy4xIDEuNC02LjQgMy4yLTkuNyA1LjMtMi40LS40LTUuNi0uOC05LjItLjgtMTAuNSAwLTIwLjUgMy4xLTI4LjcgOC45LTEyLjMgOC43LTE4IDE2LjktMjAuNyAyMi40LTIuMi0xLjMtNC41LTIuNS03LjEtMy43LTEuNi0uOC0zLjEtMS41LTQuNy0yLjIgNi4xLTkuMSAxOS45LTI2LjUgMzcuNy0zMi4yem0yMSAxOC4yYy0uOCAxLTEuNiAyLjEtMi4zIDMuMi0zLjMgNS4yLTMuOSAxMS42LTQuNCAxNy44LS41IDYuNC0xLjEgMTIuNS00LjQgMTctNC4yIC44LTguMSAxLjctMTEuNSAyLjctMi4zLTMuMS01LjYtNy0xMC41LTExLjIgMS40LTQuOCA1LjUtMTYuMSAxMy41LTIyLjUgNS42LTQuMyAxMi4yLTYuNyAxOS42LTd6TTQ1LjkgNDUuM2MtMy4zLTIuMi02LjYtNC05LjctNS4zIDQuOC0yIDEzLjctNSAyNC43LTUgNi4xIDAgMTIgLjkgMTcuNyAyLjcgMTcuOCA1LjggMzEuNiAyMy4yIDM3LjcgMzIuMS0xLjYgLjctMy4yIDEuNC00LjggMi4yLTIuNSAxLjItNC45IDIuNS03LjEgMy43LTIuNi01LjQtOC4zLTEzLjctMjAuNy0yMi40LTguMy01LjgtMTguMi04LjktMjguOC04LjktMy40IC4xLTYuNiAuNS05IC45ek05MC42IDg1LjRjLTQuOSA0LjItOC4zIDgtMTAuNSAxMS4yLTMuNC0uOS03LjMtMS45LTExLjUtMi43LTMuMy00LjQtMy44LTEwLjUtNC4zLTE2LjktLjUtNi4yLTEuMS0xMi42LTQuNC0xNy44LS43LTEuMS0xLjUtMi4yLTIuMy0zLjIgNy40IC4zIDE0IDIuNiAxOS41IDcgOCA2LjMgMTIuMSAxNy42IDEzLjUgMjIuNHpNNTguNCAyNTkuOWMtMi43LTEuNi01LjYtMy4xLTguNC00LjYtMTQuOS04LTMwLjItMTYuMy0zMC4yLTMwLjUgMC0xMS4xIDQuMy0xNC42IDguOS0xOC4ybC41LS40Yy43LS42IDEuNC0xLjIgMi4yLTEuOC0uOSA3LjItMS45IDEzLjMtMi43IDE0LjkgMCAwIDEyLjEtMTUgMTUuNy00NC4zIDEuNC0xMS41LTEuMS0zNC4zLTUuMS00MyAuMiA0LjkgMCA5LjgtLjMgMTQuNC0uNC0uOC0uOC0xLjYtMS4zLTIuMi0zLjItNC0xMS44LTE3LjUtOS40LTI2LjYgLjktMy41IDMuMS02IDYuNy03LjggMy44LTEuOSA4LjgtMi45IDE1LjEtMi45IDEyLjMgMCAyNS45IDMuNyAzMi45IDYgMjUuMSA4IDU1LjQgMzAuOSA2NC4xIDM3LjcgLjIgLjIgLjQgLjMgLjQgLjNsNS42IDMuOS0zLjUtNS44Yy0uMi0uMy0xOS4xLTMxLjQtNTMuMi00Ni41IDItMi45IDcuNC04LjEgMjEuNi0xNS4xIDIxLjQtMTAuNSA0Ni41LTE1LjggNzQuMy0xNS44IDI3LjkgMCA1Mi45IDUuMyA3NC4zIDE1LjggMTQuMiA2LjkgMTkuNiAxMi4yIDIxLjYgMTUuMS0zNCAxNS4xLTUyLjkgNDYuMi01My4xIDQ2LjVsLTMuNSA1LjggNS42LTMuOXMuMi0uMSAuNC0uM2M4LjctNi44IDM5LTI5LjggNjQuMS0zNy43IDctMi4yIDIwLjYtNiAzMi45LTYgNi4zIDAgMTEuMyAxIDE1LjEgMi45IDMuNSAxLjggNS43IDQuNCA2LjcgNy44IDIuNSA5LjEtNi4xIDIyLjYtOS40IDI2LjYtLjUgLjYtLjkgMS4zLTEuMyAyLjItLjMtNC42LS41LTkuNS0uMy0xNC40LTQgOC44LTYuNSAzMS41LTUuMSA0MyAzLjYgMjkuMyAxNS43IDQ0LjMgMTUuNyA0NC4zLS44LTEuNi0xLjgtNy43LTIuNy0xNC45IC43IC42IDEuNSAxLjIgMi4yIDEuOGwuNSAuNGM0LjYgMy43IDguOSA3LjEgOC45IDE4LjIgMCAxNC4yLTE1LjQgMjIuNS0zMC4yIDMwLjUtMi45IDEuNS01LjcgMy4xLTguNCA0LjYtOC43IDUtMTggMTYuNy0xOS4xIDM0LjItLjkgMTQuNiAuOSA0OS45IDMuNCA3NS45LTEyLjQgNC44LTI2LjcgNi40LTM5LjcgNi44LTItNC4xLTMuOS04LjUtNS41LTEzLjEtLjctMi0xOS42LTUxLjEtMjYuNC02Mi4yIDUuNSAzOSAxNy41IDczLjcgMjMuNSA4OS42LTMuNS0uNS03LjMtLjctMTEuNy0uN2wtMTE3IDBjLTQuNCAwLTguMyAuMy0xMS43IC43IDYtMTUuOSAxOC4xLTUwLjYgMjMuNS04OS42LTYuOCAxMS4yLTI1LjcgNjAuMy0yNi40IDYyLjItMS42IDQuNi0zLjUgOS01LjUgMTMuMS0xMy0uNC0yNy4yLTItMzkuNy02LjggMi41LTI2IDQuMy02MS4yIDMuNC03NS45LS45LTE3LjQtMTAuMy0yOS4yLTE5LTM0LjJ6TTM1LjEgNDA0LjZjLTEyLjEtMjAtOC43LTU0LjEtMy43LTU5LjEgMTAuOSAzNC40IDQ3LjIgNDQuMyA3NC40IDQ1LjQtMi43IDQuMi01LjIgNy42LTcgMTBsLTEuNCAxLjRjLTcuMiA3LjgtOC42IDE4LjUtNC4xIDMxLjgtMjIuNy0uMS00Ni4zLTkuOC01OC4yLTI5LjV6bTQ1LjcgNDMuNWM2IDEuMSAxMi4yIDEuOSAxOC42IDIuNCAzLjUgOCA3LjQgMTUuOSAxMi4zIDIzLjEtMTQuNC01LjktMjQuNC0xNi0zMC45LTI1LjV6bTExMS41IDUwLjFjLTYwLjYtLjEtNzguMy00NS44LTg0LjktNjQuNy0zLjctMTAuNS0zLjQtMTguMiAuOS0yMy4xIDIuOS0zLjMgOS41LTcuMiAyNC42LTcuMmwxMTguOCAwYzE1LjEgMCAyMS44IDMuOSAyNC42IDcuMiA0LjIgNC44IDQuNSAxMi42IC45IDIzLjEtNi42IDE4LjgtMjQuMyA2NC42LTg0LjkgNjQuN3ptODAuNi0yNC42YzQuOS03LjIgOC44LTE1LjEgMTIuMy0yMy4xIDYuNC0uNSAxMi42LTEuMyAxOC42LTIuNC02LjUgOS41LTE2LjUgMTkuNi0zMC45IDI1LjV6bTc2LjYtNjljLTEyIDE5LjctMzUuNiAyOS4zLTU4LjEgMjkuNyA0LjUtMTMuMyAzLjEtMjQuMS00LjEtMzEuOC0uNC0uNS0uOS0xLTEuNC0xLjUtMS44LTIuNC00LjMtNS44LTctMTAgMjcuMi0xLjIgNjMuNS0xMSA3NC40LTQ1LjQgNSA1IDguNCAzOS4xLTMuOCA1OXpNMTkyLjIgMTg3LjdsLjIgMGMxMi43LS4xIDI3LjItMTcuOCAyNy4yLTE3LjgtOS45IDYtMTguOCA4LjEtMjcuMyA4LjMtOC41LS4yLTE3LjQtMi4zLTI3LjMtOC4zIDAgMCAxNC41IDE3LjYgMjcuMiAxNy44em02MS43IDIzMC43bC0yOS40IDBjLTQuMiAwLTcuMiAuOS04LjkgMi43LTIuMiAyLjMtMS41IDUuMi0uOSA2LjcgMSAyLjYgNS41IDExLjMgMTMgMTkuMyAyLjcgMi45IDYuNiA0LjUgMTEgNC41czguNy0xLjYgMTEuOC00LjJjMi4zLTIgMTAuMi05LjIgMTMuNy0xOC4xIDEuMy0zLjMgMS02LS45LTcuOS0xLjMtMS4zLTQtMi45LTkuNC0zeiJdCiAgICB9OwogICAgZmFSb2Nrcm1zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJvY2tybXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNlOSIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MTMuNCA0MjcuNWwtOTAgMC0xMTItMTMxLjNjLTE3LjktMjAuNC0zLjktNTYuMSAyNi42LTU2LjFsNzUuMyAwLTg0LjYtOTkuMy04NC4zIDk4LjktOTAgMCAxNDcuMS0xNzIuNWMxNC40LTE4LjQgNDEuMy0xNy4zIDU0LjUgMEw0MTMuNyAyNTIuM2MxOSAyMi44IDIgNTcuMi0yNy42IDU2LjEtLjYgMC03NC4yIC4yLTc0LjIgLjJMNDEzLjQgNDI3LjV6Il0KICAgIH07CiAgICBmYVVuc3BsYXNoID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVuc3BsYXNoIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwN2MiLCAiTTQ0OCAyMzAuMmwwIDI0OS44LTQ0OCAwIDAtMjQ5LjggMTQxLjEgMCAwIDEyNC45IDE2NS43IDAgMC0xMjQuOSAxNDEuMSAwek0zMDYuOSAzMmwtMTY1LjcgMCAwIDEyNC45IDE2NS43IDAgMC0xMjQuOXoiXQogICAgfTsKICAgIGZhU3F1YXJlSW5zdGFncmFtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1pbnN0YWdyYW0iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiaW5zdGFncmFtLXNxdWFyZSJdLCAiZTA1NSIsICJNMTk0LjQgMjExLjdhNTMuMyA1My4zIDAgMSAwIDU5LjIgODguNiA1My4zIDUzLjMgMCAxIDAgLTU5LjItODguNnptMTQyLjMtNjguNGMtNS4yLTUuMi0xMS41LTkuMy0xOC40LTEyLTE4LjEtNy4xLTU3LjYtNi44LTgzLjEtNi41LTQuMSAwLTcuOSAuMS0xMS4yIC4xcy03LjIgMC0xMS40LS4xYy0yNS41LS4zLTY0LjgtLjctODIuOSA2LjUtNi45IDIuNy0xMy4xIDYuOC0xOC40IDEycy05LjMgMTEuNS0xMiAxOC40Yy03LjEgMTguMS02LjcgNTcuNy02LjUgODMuMiAwIDQuMSAuMSA3LjkgLjEgMTEuMXMwIDctLjEgMTEuMWMtLjIgMjUuNS0uNiA2NS4xIDYuNSA4My4yIDIuNyA2LjkgNi44IDEzLjEgMTIgMTguNHMxMS41IDkuMyAxOC40IDEyYzE4LjEgNy4xIDU3LjYgNi44IDgzLjEgNi41IDQuMSAwIDcuOS0uMSAxMS4yLS4xczcuMiAwIDExLjQgLjFjMjUuNSAuMyA2NC44IC43IDgyLjktNi41IDYuOS0yLjcgMTMuMS02LjggMTguNC0xMnM5LjMtMTEuNSAxMi0xOC40YzcuMi0xOCA2LjgtNTcuNCA2LjUtODMgMC00LjItLjEtOC4xLS4xLTExLjRzMC03LjEgLjEtMTEuNGMuMy0yNS41IC43LTY0LjktNi41LTgzLTIuNy02LjktNi44LTEzLjEtMTItMTguNGwwIC4yem0tNjcuMSA0NC41YzE4LjEgMTIuMSAzMC42IDMwLjkgMzQuOSA1Mi4ycy0uMiA0My41LTEyLjMgNjEuNmMtNiA5LTEzLjcgMTYuNi0yMi42IDIyLjZzLTE5IDEwLjEtMjkuNiAxMi4yYy0yMS4zIDQuMi00My41LS4yLTYxLjYtMTIuM3MtMzAuNi0zMC45LTM0LjktNTIuMiAuMi00My41IDEyLjItNjEuNiAzMC45LTMwLjYgNTIuMi0zNC45IDQzLjUgLjIgNjEuNiAxMi4ybC4xIDB6bTI5LjItMS4zYy0zLjEtMi4xLTUuNi01LjEtNy4xLTguNnMtMS44LTcuMy0xLjEtMTEuMSAyLjYtNy4xIDUuMi05LjggNi4xLTQuNSA5LjgtNS4yIDcuNi0uNCAxMS4xIDEuMSA2LjUgMy45IDguNiA3IDMuMiA2LjggMy4yIDEwLjZjMCAyLjUtLjUgNS0xLjQgNy4zcy0yLjQgNC40LTQuMSA2LjItMy45IDMuMi02LjIgNC4yLTQuOCAxLjUtNy4zIDEuNWMtMy44IDAtNy41LTEuMS0xMC42LTMuMmwtLjEgMHpNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTM1NyAzODljLTE4LjcgMTguNy00MS40IDI0LjYtNjcgMjUuOS0yNi40IDEuNS0xMDUuNiAxLjUtMTMyIDAtMjUuNi0xLjMtNDguMy03LjItNjctMjUuOXMtMjQuNi00MS40LTI1LjgtNjdjLTEuNS0yNi40LTEuNS0xMDUuNiAwLTEzMiAxLjMtMjUuNiA3LjEtNDguMyAyNS44LTY3czQxLjUtMjQuNiA2Ny0yNS44YzI2LjQtMS41IDEwNS42LTEuNSAxMzIgMCAyNS42IDEuMyA0OC4zIDcuMSA2NyAyNS44czI0LjYgNDEuNCAyNS44IDY3YzEuNSAyNi4zIDEuNSAxMDUuNCAwIDEzMS45LTEuMyAyNS42LTcuMSA0OC4zLTI1LjggNjdsMCAuMXoiXQogICAgfTsKICAgIGZhSW5zdGFncmFtU3F1YXJlID0gZmFTcXVhcmVJbnN0YWdyYW07CiAgICBmYUZpcnN0T3JkZXJBbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmlyc3Qtb3JkZXItYWx0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1MGEiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnptMCA3LjhhMjQwLjIgMjQwLjIgMCAxIDEgMCA0ODAuNCAyNDAuMiAyNDAuMiAwIDEgMSAwLTQ4MC40em0wIDIwLjVhMjE5LjcgMjE5LjcgMCAxIDAgMCA0MzkuNCAyMTkuNyAyMTkuNyAwIDEgMCAwLTQzOS40em0wIDguMmEyMTEuNSAyMTEuNSAwIDEgMSAwIDQyMyAyMTEuNSAyMTEuNSAwIDEgMSAwLTQyM3ptMTg2LjIgMjYwYy00LjQgMTcuMS0xMS4yIDMzLjUtMjAuMSA0OC43bC03NC4xLTM1LjkgNjEuNSA1NC44Yy0xMC42IDE0LjEtMjMuMiAyNi42LTM3LjIgMzcuM2wtNTQuOC02MS42IDM1LjkgNzQuM2MtMTUuMiA5LTMxLjYgMTUuOC00OC42IDIwLjJsLTI3LjMtNzguNSA0LjggODIuOWMtOC42IDEuMi0xNy40IDEuOC0yNi4zIDEuOHMtMTcuNy0uNi0yNi4zLTEuOGw0LjgtODIuNS0yNy4yIDc4Yy0xNy4xLTQuNS0zMy40LTExLjMtNDguNy0yMC4ybDM1LjktNzQuMy01NC45IDYxLjZjLTE0LTEwLjctMjYuNi0yMy4yLTM3LjItMzcuM2w2MS42LTU0LjktNzQuMyAzNS45QzgwLjcgMzM4IDc0IDMyMS43IDY5LjUgMzA0LjZsNzcuOC0yNy4xLTgyLjIgNC44Yy0xLjItOC42LTEuOC0xNy4zLTEuOC0yNi4yIDAtOSAuNi0xNy44IDEuOC0yNi41bDgyLjQgNC44LTc3LjktMjcuMmM0LjUtMTcuMSAxMS4zLTMzLjUgMjAuMi00OC43bDc0LjIgMzUuOS02MS41LTU0LjljMTAuNy0xNCAyMy4yLTI2LjYgMzcuMy0zNy4ybDU0LjggNjEuNS0zNS44LTc0LjJjMTUuMi04LjkgMzEuNi0xNS43IDQ4LjYtMjAuMWwyNi45IDc3LjItNC43LTgxLjZjOC42LTEuMiAxNy40LTEuOCAyNi4zLTEuOHMxNy43IC42IDI2LjMgMS44bC00LjcgODIuMiAyNy03Ny44YzE3LjMgNC41IDMzLjYgMTEuNCA0OC42IDIwLjJsLTM1LjggNzQuMSA1NC43LTYxLjVjMTQuMSAxMC43IDI2LjYgMjMuMiAzNy4yIDM3LjJsLTYxLjQgNTQuOCA3NC4xLTM1LjljOC45IDE1LjIgMTUuNyAzMS42IDIwLjIgNDguNmwtNzcuOCAyNy4xIDgyLjItNC43YzEuMiA4LjcgMS44IDE3LjUgMS44IDI2LjUgMCA4LjktLjYgMTcuNi0xLjggMjYuMmwtODIuMS00LjcgNzcuNyAyNy4xeiJdCiAgICB9OwogICAgZmFGdWxjcnVtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZ1bGNydW0iLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFtdLCAiZjUwYiIsICJNNjMuOCAxNjQuMUwyOC40IDIwNy43LTcgMTY0LjEgMjguNCAxMjAuNiA2My44IDE2NC4xek0xMTIuMiAwbC0yMC41IDE5OC4yLTUxIDU3LjggNTEgNTcuOCAyMC41IDE5OC4yIDAtMjExLjEtNDEuMS00NC45IDQxLjEtNDQuOSAwLTIxMS4xem03OS43IDE2NC4xbDM1LjQgNDMuNiAzNS40LTQzLjYtMzUuNC00My41LTM1LjQgNDMuNXptLTQ4LjUgNDdsNDEuMSA0NC45LTQxLjEgNDQuOSAwIDIxMS4xIDIwLjYtMTk4LjIgNTEtNTcuOC01MS01Ny44LTIwLjYtMTk4LjIgMCAyMTEuMXoiXQogICAgfTsKICAgIGZhQnJhdmVSZXZlcnNlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJyYXZlLXJldmVyc2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTYzZCIsICJNMjk4LjUgMGMzIDAgNS44IDEuMyA3LjggMy42bDM4LjEgNDRjLjUtLjEgMS0uMiAxLjUtLjMgOS4yLTEuNiAxOC42LTIuMiAyNy43LTEuMiAxMS42IDEuNCAyMS41IDUuNCAyOC45IDEyLjkgNy43IDcuOCAxNS40IDE1LjggMjIuNiAyMy42IDIuNSAyLjcgNC45IDUuMiA2LjkgNy40IC43IC44IDEuNCAxLjUgMS45IDIgMy40IDMuNyA0LjIgOC4xIDIuNyAxMS45bC05LjggMjQuNiAxMy4xIDM4LjFjLjcgMiAuOCA0LjEgLjIgNi4yLS4xIC40LS4xIC40LS41IDIuMWwtMS41IDUuOGMtMS42IDYuMy0zLjUgMTMuMy01LjQgMjAuOS01LjYgMjEuNi0xMS4yIDQzLjItMTYuNCA2My40LTEyLjkgNDkuOS0yMS40IDgyLjctMjMuNCA5MC45LTExLjEgNDQuNS0xOS45IDYwLTQ4LjMgODAuMy0yNC45IDE3LjgtNzYuOCA1My42LTg2LjggNjAtMSAuNi0yIDEuMy0zLjQgMi4zLS41IC40LTMuMiAyLjItMy45IDIuNy00LjkgMy4zLTguMyA1LjUtMTIuMSA3LjMtNC43IDIuMi05LjMgMy41LTEzLjkgMy41cy05LjEtMS4yLTEzLjktMy41Yy0zLjctMS44LTcuMi0zLjktMTIuMS03LjMtLjgtLjUtMy40LTIuNC0zLjktMi43LTEuNC0xLTIuNS0xLjctMy40LTIuMy0xMC02LjQtNjEuOS00Mi4xLTg2LjgtNjAtMjguNC0yMC40LTM3LjItMzUuOC00OC4zLTgwLjMtMi04LjItMTAuNS00MS0yMy4zLTkwLjUtNS4zLTIwLjYtMTAuOS00Mi4yLTE2LjUtNjMuOC0yLTcuNi0zLjgtMTQuNi01LjQtMjAuOWwtMS41LTUuOC0uNS0yLjFjLS41LTItLjQtNC4yIC4yLTYuMmwxMy4xLTM4LjEtOS45LTI0LjVjLTEuNS0zLjgtLjctOC4yIDItMTEuMiAxLjItMS4zIDEuOC0yIDIuNi0yLjggMi0yLjIgNC40LTQuNyA2LjktNy40IDcuMy03LjcgMTUtMTUuNyAyMi43LTIzLjUgNy40LTcuNSAxNy4zLTExLjYgMjguOS0xMi45IDkuMS0xLjEgMTguNS0uNSAyNy43IDEuMiAuNSAuMSAxIC4yIDEuNSAuM2wzOC4xLTQ0YzItMi40IDQuOC0zLjcgNy44LTMuN2wxNDggMHptLTQuNyAyMS4xbC0xMzguNiAwLTM5LjEgNDUuMWMtMi42IDMtNi43IDQuMy0xMC42IDMuMi0uMi0uMS0uNy0uMi0xLjUtLjQtMS4zLS4zLTIuOS0uNi00LjUtLjktNy40LTEuMy0xNC45LTEuOC0yMS43LTEtNy4zIC45LTEzIDMuMi0xNi42IDYuOS03LjYgNy43LTE1LjIgMTUuNi0yMi4zIDIzLjMtMS43IDEuOC0zLjMgMy41LTQuOCA1LjFsOC44IDIyYzEgMi40IDEgNSAuMiA3LjVMMjkuNyAxNzAuNmMuNCAxLjQgLjUgMS45IDEuMiA0LjggMS42IDYuMyAzLjUgMTMuMyA1LjQgMjAuOSA1LjYgMjEuNiAxMS4yIDQzLjIgMTYuNCA2My40IDEyLjkgNTAgMjEuNCA4Mi44IDIzLjQgOTEgMTAuMSA0MC4xIDE2LjQgNTEuMyA0MC4yIDY4LjMgMjQuNiAxNy42IDc2LjMgNTMuMiA4NS45IDU5LjMgMS4yIC44IDIuNSAxLjYgNCAyLjcgLjYgLjQgMy4yIDIuMiAzLjkgMi43IDQgMi44IDYuNyA0LjQgOS4yIDUuNiAyLjIgMSAzLjkgMS41IDUuMSAxLjVzMi45LS41IDUuMS0xLjVjMi41LTEuMiA1LjItMi44IDkuMi01LjYgLjctLjUgMy4zLTIuMyAzLjktMi43IDEuNi0xLjEgMi44LTEuOSA0LTIuNyA5LjYtNi4xIDYxLjMtNDEuNyA4NS45LTU5LjMgMjMuOC0xNy4xIDMwLjItMjguMiA0MC4xLTY4LjMgMi4xLTguMyAxMC41LTQxLjEgMjMuMy05MC43IDUuMy0yMC42IDEwLjktNDIuMiAxNi41LTYzLjggMi03LjYgMy44LTE0LjYgNS40LTIwLjkgLjctMi45IC45LTMuNCAxLjItNC44bC0xMy4zLTM4LjhjLS44LTIuNC0uOC01LjEgLjItNy41bDguOC0yMmMtMS41LTEuNi0zLjEtMy4zLTQuOC01LjEtNy4yLTcuNi0xNC43LTE1LjUtMjIuMy0yMy4zLTMuNy0zLjctOS4zLTYtMTYuNi02LjktNi44LS44LTE0LjQtLjMtMjEuNyAxLTEuNyAuMy0zLjIgLjYtNC41IC45LS44IC4yLTEuMyAuMy0xLjUgLjQtMy44IDEuMS03LjktLjItMTAuNi0zLjJMMjkzLjggMjEuMXpNMjI0LjUgMzE2YzIuOCAwIDIwLjkgNi41IDM1LjQgMTQuMXMyNSAxMyAyOC4zIDE1LjIgMS4zIDYuMi0xLjcgOC40LTQ0LjEgMzQuNi00OC4xIDM4LjItOS44IDkuNS0xMy44IDkuNS05LjgtNS45LTEzLjgtOS41LTQ1LjEtMzYtNDguMS0zOC4yLTUuMS02LjItMS43LTguNCAxMy45LTcuNSAyOC4zLTE1LjIgMzIuNS0xNC4xIDM1LjQtMTQuMWwtLjIgMHptLjEtMjMwLjdjLjcgMCA4LjggLjIgMjAuNSA0LjIgMTIuMyA0LjIgMjUuNyA5LjQgMzEuOSA5LjRzNTEuOS04LjkgNTEuOS04LjkgNTQuMiA2Ni43IDU0LjIgODEtNi44IDE4LTEzLjcgMjUuNC0zNi44IDM5LjgtNDAuNyA0My45LTExLjkgMTAuNS03LjEgMjEuOCAxMS43IDI1LjggMy45IDQwLjQtMjEgMjQuNC0yOS40IDIyLjgtMjguNC0xMi4yLTM1LjctMTcuMS0zMC41LTI0LjMtMzAuNS0zMS44IDI0LTIwLjggMjguNC0yMy45IDI0LjctMTQuOCAyNS4xLTE5LjQgLjMtNi01LjctMTcuNC0xNi43LTI2LjctMTQuOS0zNi44IDE5LjEtMTUuNCAzMS41LTIwLjIgMzYuMi0xMy43IDM5LjItMTUuMSAyLjItMi43LTYuOC0zLjYtMzQuNi00LjMtNDYuMS0xLjEtMzEuMiA4LjItMzIuOCAxMC45LTMgMi43LTEuNCAxMS44IDEwLjEgNTIuOCAxMC45IDYwLjYgMi40IDEyLjktNS44IDE0LjgtMjIuMSA1LjItMjYuOCA1LjItMTguNi0zLjMtMjYuOC01LjItNi42LTctNS44LTE0LjggOS4zLTUxLjUgMTAuOS02MC42IC4yLTkuMi0xLjQtMTEuOC0yMS4zLTcuNi0zMi44LTEwLjktMzcuMSAuMi00Ni4xIDEuMS05LjggMi4yLTYuOCAzLjYgMjYuOCAxMC40IDM5LjIgMTUuMSAyOS43IDEwIDMxLjUgMjAuMi05IDI1LjQtMTQuOSAzNi44LTYuMSAxMi44LTUuNyAxNy40IDIwLjYgMTYuNCAyNS4xIDE5LjQgMjguNCAxNi40IDI4LjQgMjMuOS0yMy4yIDI3LTMwLjUgMzEuOC0yNy4yIDE1LjQtMzUuNyAxNy4xLTIxLjctOC4yLTI5LjQtMjIuOC0uOC0yOS4xIDMuOS00MC40LTMuMy0xNy43LTcuMS0yMS44LTMzLjgtMzYuNS00MC43LTQzLjktMTMuNy0xMS4yLTEzLjctMjUuNCA1NC4yLTgxIDU0LjItODEgNDUuOCA4LjkgNTEuOSA4LjkgMTkuNS01LjIgMzEuOS05LjQgMjAuNi00LjIgMjAuNi00LjJsLS4zIDB6Il0KICAgIH07CiAgICBmYUF2aWFuZXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXZpYW5leCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzc0IiwgIk00NTMuMiAzMmwtMzEyIDBDMTAyLjMgMzIgNjUgNjMuMiA1Ny45IDEwMS43TDEuMyA0MTAuM0MtNS44IDQ0OC44IDIwIDQ4MCA1OSA0ODBsMzEyIDBjMzguOSAwIDc2LjItMzEuMiA4My4zLTY5LjdMNTExIDEwMS44QzUxOCA2My4yIDQ5Mi4yIDMyIDQ1My4yIDMyek0zOTUgMzc5LjNsLTMyIDEzLjUtMTE1LjQtMTEwYy0xNC43IDEwLTI5LjIgMTkuNS00MS43IDI3LjFsMjIuMSA2NC4yLTE3LjkgMTIuNy00MC42LTYxLTUyLjQtNDguMSAxNS43LTE1LjQgNTggMzEuMWM5LjMtMTAuNSAyMC44LTIyLjYgMzIuOC0zNC45bC0yMC41LTI5LjYtNjguOC05OS44IDE4LjgtMjguOSA4LjktNC44IDEwMy4xIDExMi40IDQuOSA0LjVjMTkuNC0xOC44IDMzLjgtMzIuNCAzMy44LTMyLjQgNy43LTYuNSAyMS41LTIuOSAzMC43IDcuOSA5IDEwLjUgMTAuNiAyNC43IDIuNyAzMS4zLTEuOCAxLjMtMTUuNSAxMS40LTM1LjMgMjUuNmw0LjUgNy4zIDk0LjkgMTE5LjQtNi4zIDcuOXoiXQogICAgfTsKICAgIGZhTnM4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm5zOCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmM2Q1IiwgIk0xMDQuMyAyNjkuMmwyNi4xIDAgMC0yNi4yLTI2LjEgMCAwIDI2LjJ6TTE1Ni44IDI0M2wtLjEtMjYuMiAwLS45Yy0uMi0xMC40LTQuNC0yMC4zLTExLjktMjcuNnMtMTcuNS0xMS4zLTI3LjktMTEuMS0yMC4zIDQuNC0yNy42IDExLjgtMTEuMyAxNy41LTExLjIgMjcuOWwwIC4yIDI2LjQgMCAwLS4yYy4xLTMuNCAxLjUtNi42IDMuOS05czUuNy0zLjcgOS4xLTMuNyA2LjcgMS4zIDkuMSAzLjcgMy44IDUuNiAzLjkgOWwwIDI2LjIgMjYuMyAwem01Mi40IDI1LjhjMCAxMi0yLjQgMjMuOC02LjkgMzQuOXMtMTEuMyAyMS4xLTE5LjcgMjkuNi0xOC41IDE1LjItMjkuNiAxOS43LTIyLjkgNi45LTM0LjkgNi45bC0uNiAwYy0yNC4yIDAtNDcuMy05LjYtNjQuNC0yNi43UzI2LjMgMjkzIDI2LjMgMjY4LjhsLTI2LjMgMCAwIC4yYzAgMTUuNCAzLjEgMzAuNyA5IDQ0LjlzMTQuNiAyNy4yIDI1LjUgMzguMSAyMy45IDE5LjUgMzguMSAyNS40IDI5LjUgOC45IDQ0LjkgOC45bC44IDBjMTUuNCAwIDMwLjctMyA0NC45LTlzMjcuMi0xNC42IDM4LjEtMjUuNSAxOS41LTIzLjggMjUuNC0zOC4xIDguOS0yOS41IDguOS00NC45bDAtMjYtMjYuMyAwIDAgMjZ6bS0xNTcuMiAwYy4xIDE3LjMgNyAzMy45IDE5LjIgNDYuMXMyOC44IDE5LjEgNDYuMSAxOS4xIDMzLjktNi45IDQ2LjEtMTkuMSAxOS4yLTI4LjggMTkuMi00Ni4xbC0yNi4zIDBjLS4yIDEwLjItNC40IDIwLTExLjcgMjcuMnMtMTcuMSAxMS4yLTI3LjQgMTEuMi0yMC4xLTQtMjcuNC0xMS4yLTExLjUtMTYuOS0xMS43LTI3LjJsMC0yNi0yNi4zIDAgMC0yNi42Yy4zLTE3LjMgNy40LTMzLjggMTkuNy00NS44czI5LTE4LjggNDYuMy0xOC42IDMzLjggNy4yIDQ1LjkgMTkuNSAxOC45IDI4LjkgMTguOSA0Ni4ybDAgMjUuMyAyNi4zIDAgMC0yNS4zYzAtMjQuMy05LjctNDcuNy0yNi45LTY0LjlzLTQwLjUtMjYuOS02NC45LTI2LjktNDcuNyA5LjctNjQuOSAyNi45LTI2LjkgNDAuNS0yNi45IDY0LjlsMCAyNS40IDI2LjMgMCAwIDI2em00MTguNC03MS4yYzEzLjcgMCAyNC42IDYuNiAzMC4xIDE4LjNsLjcgMS41IDIzLjItMTEuNS0uNi0xLjRjLTgtMTkuMy0yOC41LTMxLjMtNTMuNC0zMS4zLTIzLjEgMC00My42IDExLjQtNTEgMjguNC0uMSAyNi45LS4yIDIzLjkgMCAyNC44IDQuNyAxMSAxNC42IDE5LjQgMjguNyAyNC4yIDYuNSAyIDEzLjEgMy4zIDE5LjggNCA1LjUgLjcgMTAuNiAxLjQgMTUuOCAzLjEgNi40IDIuMSAxMC41IDUuMyAxMi44IDkuOGwwIDkuOWMtMy43IDcuNS0xMy44IDEyLjMtMjUuOCAxMi4zLTE0LjMgMC0yNi02LjktMzEuOS0xOWwtLjctMS41LTIzIDExLjUgLjYgMS40YzcuOSAxOS40IDI5LjYgMzIgNTUuMyAzMiAyMy42IDAgNDQuNi0xMS40IDUyLjMtMjguNGwuMi0yNS45LS4yLS43Yy00LjktMTEtMTUuMi0xOS42LTI4LjktMjQuMi03LjctMi43LTE0LjMtMy42LTIwLjctNC40LTUtLjUtMTAtMS41LTE0LjgtMi45LTYuMy0xLjktMTAuNC01LjEtMTIuNi05LjZsMC04LjRjMy40LTcuNCAxMi45LTEyLjEgMjQuMi0xMi4xbDAgMHpNMjg3LjYgMzExLjNsMjYuMSAwIDAtNjguNC0yNi4xIDAgMCA2OC40ek02MzkuOCAyNThjLTIuOS02LjMtOC4zLTEyLTE1LjQtMTYuNyA1LjYtMy44IDEwLjEtOS4xIDEzLTE1LjNsLjItMjUuMy0uMi0uN2MtNy40LTE2LTI2LjctMjYuNy00OC4yLTI2LjdTNTQ4LjUgMTg0IDU0MS4xIDIwMGwtLjIgMjUuMyAuMiAuN2MyLjkgNi4xIDcuNCAxMS40IDEzIDE1LjMtNy4yIDQuNy0xMi41IDEwLjUtMTUuNCAxNi43bC0uMiAyOC45IC4yIC43YzcuNiAxNiAyNy45IDI2LjcgNTAuNiAyNi43czQzLjEtMTAuNyA1MC42LTI2LjdsLjItMjguOS0uMi0uN3ptLTczLjItNTAuOGMzLjYtNi4zIDEyLjYtMTAuNSAyMi42LTEwLjVzMTkgNC4yIDIyLjYgMTAuNWwwIDEzLjdjLTMuNSA2LjItMTIuNiAxMC4zLTIyLjYgMTAuM3MtMTkuMS00LjItMjIuNi0xMC4zbDAtMTMuN3ptNDcuMyA3Mi4yYy0zLjggNi42LTEzLjMgMTAuOS0yNC43IDEwLjktMTEuMSAwLTIxLTQuNC0yNC43LTEwLjlsMC0xNi4yYzMuNy02LjMgMTMuNS0xMC41IDI0LjctMTAuNSAxMS4zIDAgMjAuOSA0LjEgMjQuNyAxMC41bDAgMTYuMnpNMzc2LjQgMjY2bC01OS44LTg5LjctMjkgMCAwIDQwLjYgMjYuNSAwIDAgLjQgNjIuNSA5NC4xIDI1LjcgMCAwLTEzNS4xLTI1LjkgMCAwIDg5Ljd6Il0KICAgIH07CiAgICBmYVNxdWFyZVBpbnRlcmVzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGludGVyZXN0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInBpbnRlcmVzdC1zcXVhcmUiXSwgImYwZDMiLCAiTTM4NCAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDcyLjYgMC0yLjItLjhjLTUuNC00OC4xLTMuMS01Ny41IDE1LjctMTM0LjcgMy45LTE2IDguNS0zNSAxMy45LTU3LjkgMCAwLTcuMy0xNC44LTcuMy0zNi41IDAtNzAuNyA3NS41LTc4IDc1LjUtMjUgMCAxMy41LTUuNCAzMS4xLTExLjIgNDkuOC0zLjMgMTAuNi02LjYgMjEuNS05LjEgMzItNS43IDI0LjUgMTIuMyA0NC40IDM2LjQgNDQuNCA0My43IDAgNzcuMi00NiA3Ny4yLTExMi40IDAtNTguOC00Mi4zLTk5LjktMTAyLjYtOTkuOS02OS45IDAtMTEwLjkgNTIuNC0xMTAuOSAxMDYuNiAwIDIxLjEgOC4yIDQzLjcgMTguMyA1NiAyIDIuNCAyLjMgNC41IDEuNyA3LTEuMSA0LjctMy4xIDEyLjktNC43IDE5LjItMSA0LTEuOCA3LjMtMi4xIDguNi0xLjEgNC41LTMuNSA1LjUtOC4yIDMuMy0zMC42LTE0LjMtNDkuOC01OS4xLTQ5LjgtOTUuMSAwLTc3LjUgNTYuMi0xNDguNiAxNjIuMi0xNDguNiA4NS4yIDAgMTUxLjQgNjAuNyAxNTEuNCAxNDEuOCAwIDg0LjYtNTMuMyAxNTIuNy0xMjcuNCAxNTIuNy0yNC45IDAtNDguMy0xMi45LTU2LjMtMjguMiAwIDAtMTIuMyA0Ni45LTE1LjMgNTguNC01IDE5LjMtMTcuNiA0Mi45LTI3LjQgNTkuM0wzODQgNDgwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0eiJdCiAgICB9OwogICAgZmFQaW50ZXJlc3RTcXVhcmUgPSBmYVNxdWFyZVBpbnRlcmVzdDsKICAgIGZhQmx1ZXRvb3RoQiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJibHVldG9vdGgtYiIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJmMjk0IiwgIk0xNjQuOSAyNjBMMjU3LjUgMTU2LjcgMTExLjYgMCAxMTEuNiAyMDYuMyAyNS40IDEyMC4yLTYgMTUxLjYgMTAyLjEgMjYwLTYgMzY4LjQgMjUuNCAzOTkuOCAxMTEuNiAzMTMuNyAxMTQuMyA1MTIgMjYyLjggMzYzLjQgMTY0LjkgMjYwem00MC45LTEwM2wtNTAgNTAtLjMtMTAwLjMgNTAuMyA1MC4zem0tNTAgMTU2bDUwIDUwLTUwLjMgNTAuMyAuMy0xMDAuM3oiXQogICAgfTsKICAgIGZhR3JpcGZpcmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ3JpcGZpcmUiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjNhYyIsICJNODAuNSAzMDEuNGMwLTczLjggMTA1LjEtMTIyLjUgMTA1LjEtMjAzIDAtNDcuMS0zNC04OC0zOS4xLTkwLjQgLjQgMy4zIC42IDYuNyAuNiAxMCAwIDkyLjEtMTQ3LjEgMTUzLjktMTQ3LjEgMjY4LjYgMCA0OS44IDMyLjIgNzkuMiA2Ni41IDEwOC4zIDY1LjEgNDYuNyA3OC4xIDcxLjQgNzguMSA4Ni42IDAgMTAuMS00LjggMTctNC44IDIyLjMgMTMuMS0xNi43IDE3LjQtMzEuOSAxNy41LTQ2LjQgMC0yOS42LTIxLjctNTYuMy00NC4yLTg2LjUtMTYtMjIuMy0zMi42LTQyLjYtMzIuNi02OS41em0yMDUuMy0zOWMtMTIuMS02Ni44LTc4LTEyNC40LTk0LjctMTMwLjlsNCA3LjJjMi40IDUuMSAzLjQgMTAuOSAzLjQgMTcuMSAwIDQ0LjctNTQuMiAxMTEuMi01Ni42IDExNi43LTIuMiA1LjEtMy4yIDEwLjUtMy4yIDE1LjggMCAyMC4xIDE1LjIgNDIuMSAxNy45IDQyLjEgMi40IDAgNTYuNi01NS40IDU4LjEtODcuNyA2LjQgMTEuNyA5LjEgMjIuNiA5LjEgMzMuNCAwIDQxLjItNDEuOCA5Ni45LTQxLjggOTYuOSAwIDExLjYgMzEuOSA1My4yIDM1LjUgNTMuMiAxIDAgMi4yLTEuNCAzLjItMi40IDM3LjktMzkuMyA2Ny4zLTg1IDY3LjMtMTM2LjggMC04LS43LTE2LjItMi4yLTI0LjZ6Il0KICAgIH07CiAgICBmYVNxdWFyZUdvb2dsZVBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWdvb2dsZS1wbHVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImdvb2dsZS1wbHVzLXNxdWFyZSJdLCAiZjBkNCIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTY0IDI1NmMwLTU1LjMgNDQuNy0xMDAgMTAwLTEwMCAyNyAwIDQ5LjUgOS44IDY3IDI2LjJsLTI3LjEgMjYuMWMtNy40LTcuMS0yMC4zLTE1LjQtMzkuOC0xNS40LTM0LjEgMC02MS45IDI4LjItNjEuOSA2My4yIDAgMzQuOSAyNy44IDYzLjIgNjEuOSA2My4yIDM5LjYgMCA1NC40LTI4LjUgNTYuOC00My4xbC01Ni45IDAgMC0zNC40IDk0LjQgMGMxIDUgMS42IDEwLjEgMS42IDE2LjYgMCA1Ny4xLTM4LjMgOTcuNi05NiA5Ny42LTU1LjMgMC0xMDAtNDQuNy0xMDAtMTAwem0yOTEgMTguMmwwIDI5LTI5LjIgMCAwLTI5LTI5IDAgMC0yOS4yIDI5IDAgMC0yOSAyOS4yIDAgMCAyOSAyOSAwIDAgMjkuMi0yOSAweiJdCiAgICB9OwogICAgZmFHb29nbGVQbHVzU3F1YXJlID0gZmFTcXVhcmVHb29nbGVQbHVzOwogICAgZmFBcHBTdG9yZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhcHAtc3RvcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM2ZiIsICJNMjU1LjkgMTIwLjlsOS4xLTE1LjdjNS42LTkuOCAxOC4xLTEzLjEgMjcuOS03LjVzMTMuMSAxOC4xIDcuNSAyNy45bC04Ny41IDE1MS41IDYzLjMgMGMyMC41IDAgMzIgMjQuMSAyMy4xIDQwLjhsLTE4NS41IDBjLTExLjMgMC0yMC40LTkuMS0yMC40LTIwLjRzOS4xLTIwLjQgMjAuNC0yMC40bDUyIDAgNjYuNi0xMTUuNC0yMC44LTM2LjFjLTUuNi05LjgtMi4zLTIyLjIgNy41LTI3LjkgOS44LTUuNiAyMi4yLTIuMyAyNy45IDcuNWw4LjkgMTUuN3ptLTc4LjcgMjE4bC0xOS42IDM0Yy01LjYgOS44LTE4LjEgMTMuMS0yNy45IDcuNXMtMTMuMS0xOC4xLTcuNS0yNy45bDE0LjYtMjUuMmMxNi40LTUuMSAyOS44LTEuMiA0MC40IDExLjZ6bTE2OC45LTYxLjdsNTMuMSAwYzExLjMgMCAyMC40IDkuMSAyMC40IDIwLjRTNDEwLjUgMzE4IDM5OS4yIDMxOGwtMjkuNSAwIDE5LjkgMzQuNWM1LjYgOS44IDIuMyAyMi4yLTcuNSAyNy45LTkuOCA1LjYtMjIuMiAyLjMtMjcuOS03LjUtMzMuNS01OC4xLTU4LjctMTAxLjYtNzUuNC0xMzAuNi0xNy4xLTI5LjUtNC45LTU5LjEgNy4yLTY5LjEgMTMuNCAyMyAzMy40IDU3LjcgNjAuMSAxMDR6TTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNNDAgMjU2YTIxNiAyMTYgMCAxIDEgNDMyIDAgMjE2IDIxNiAwIDEgMSAtNDMyIDB6Il0KICAgIH07CiAgICBmYVdpeCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3aXgiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjVjZiIsICJNMzkzLjQgMTMxLjdjMCAxMyAyLjEgMzIuNy0yOC43IDQzLjgtOS41IDMuNC0xNiA5LjctMTYgOS43IDAtMzEgNC43LTQyLjIgMTcuNC00OC45IDkuOC01LjEgMjcuMi00LjYgMjcuMi00LjZ6TTI3Ny42IDE2Ny4ybC0zNC4yIDEzMi43LTI4LjUtMTA4LjZjLTcuNy0zMi0yMC44LTQ4LjUtNDguNC00OC41LTI3LjQgMC00MC43IDE2LjItNDguNCA0OC41TDg5LjUgMjk5LjkgNTUuMyAxNjcuMkM0OS43IDE0MC41IDIzLjkgMTI5IDAgMTMyTDY1LjYgMzc5LjlzMjEuNiAxLjYgMzIuNS00YzE0LjItNy4yIDIxLTEyLjggMjkuNi00Ni42IDcuNy0zMC4xIDI5LjEtMTE4LjQgMzEuMS0xMjQuNyA0LjgtMTQuOSAxMS4xLTEzLjggMTUuNCAwIDIgNi4zIDIzLjUgOTQuNiAzMS4xIDEyNC43IDguNiAzMy43IDE1LjQgMzkuMyAyOS42IDQ2LjYgMTAuOCA1LjUgMzIuNSA0IDMyLjUgNEwzMzIuOSAxMzJjLTI0LjQtMy4xLTQ5LjggOC45LTU1LjMgMzUuM3ptMTE1LjggNS4ycy00LjEgNi4zLTEzLjUgMTEuNmMtNiAzLjQtMTEuOCA1LjYtMTggOC42LTE1LjEgNy4zLTEzLjIgMTMuOS0xMy4yIDM1LjJsMCAxNTIuMXMxNi42IDIuMSAyNy40LTMuNGMxMy45LTcuMSAxNy4xLTE0IDE3LjMtNDQuOGwwLTE1MC4zIDAgMCAwLTl6bTE2My40IDg0LjFMNjQwIDEzMi44cy0zNS4xLTYtNTIuNSA5LjhjLTEzLjMgMTIuMS0yNC40IDI5LjYtNTQuMiA3Mi41LS41IC43LTYuMyAxMC41LTEzLjEgMC0yOS4zLTQyLjItNDAuOC02MC4zLTU0LjItNzIuNS0xNy40LTE1LjgtNTIuNS05LjgtNTIuNS05LjhsODMuMiAxMjMuNy04MyAxMjMuNHMzNi42IDQuNiA1NC0xMS4yYzExLjUtMTAuNSAxNy42LTIwLjQgNTIuNS03MC43IDYuOC0xMC41IDEyLjYtLjggMTMuMSAwIDI5LjQgNDIuNCAzOS4yIDU4LjEgNTMuMSA3MC43IDE3LjQgMTUuOCA1My4zIDExLjIgNTMuMyAxMS4ybC04My0xMjMuNHoiXQogICAgfTsKICAgIGZhSW50ZXJjb20gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaW50ZXJjb20iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjdhZiIsICJNMzkyIDMyTDU2IDMyQzI1LjEgMzIgMCA1Ny4xIDAgODhMMCA0MjRjMCAzMC45IDI1LjEgNTYgNTYgNTZsMzM2IDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZsMC0zMzZjMC0zMC45LTI1LjEtNTYtNTYtNTZ6TTI4My43IDExNC4xYzAtMTkuOCAyOS45LTE5LjggMjkuOSAwbDAgMTk5LjVjMCAxOS44LTI5LjkgMTkuOC0yOS45IDBsMC0xOTkuNXptLTc0LjYtNy41YzAtMTkuOCAyOS45LTE5LjggMjkuOSAwbDAgMjE2LjVjMCAxOS44LTI5LjkgMTkuOC0yOS45IDBsMC0yMTYuNXptLTc0LjcgNy41YzAtMTkuOCAyOS45LTE5LjggMjkuOSAwbDAgMTk5LjVjMCAxOS44LTI5LjkgMTkuOC0yOS45IDBsMC0xOTkuNXpNNTkuNyAxNDRjMC0xOS44IDI5LjktMTkuOCAyOS45IDBsMCAxMzQuM2MwIDE5LjgtMjkuOSAxOS44LTI5LjkgMGwwLTEzNC4zek0zODMuMSAzNzEuOGMtNzIuOCA2My0yNDEuNyA2NS40LTMxOC4xIDAtMTUtMTIuOCA0LjQtMzUuNSAxOS40LTIyLjcgNjUuOSA1NS4zIDIxNi4xIDUzLjkgMjc5LjMgMCAxNC45LTEyLjkgMzQuMyA5LjggMTkuNCAyMi43em01LjItOTMuNWMwIDE5LjgtMjkuOSAxOS44LTI5LjkgMGwwLTEzNC4zYzAtMTkuOCAyOS45LTE5LjggMjkuOSAwbDAgMTM0LjN6Il0KICAgIH07CiAgICBmYVJlYWN0ZXVyb3BlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJlYWN0ZXVyb3BlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3NWQiLCAiTTI1MC43IDIxMS43bDUuOC00LjEgNS44IDQuMS0yLjEtNi44IDUuNy00LjMtNy4xLS4xLTIuMy02LjgtMi4zIDYuOC03LjIgLjEgNS43IDQuMy0yIDYuOHptNjMuNyAwbDUuOC00LjEgNS44IDQuMS0yLjEtNi44IDUuNy00LjMtNy4yLS4xLTIuMy02LjgtMi4zIDYuOC03LjIgLjEgNS43IDQuMy0xLjkgNi44em0tOTEuMyA1MC41bC0zLjQgMGMtNC44IDAtMy44IDQtMy44IDEyLjEgMCA0LjctMi4zIDYuMS01LjggNi4xcy01LjgtMS40LTUuOC02LjFsMC0zNi42YzAtNC43IDIuMy02LjEgNS44LTYuMXM1LjggMS40IDUuOCA2LjFjMCA3LjItLjcgMTAuNSAzLjggMTAuNWwzLjQgMGM0LjctLjEgMy44LTMuOSAzLjgtMTIuMyAwLTkuOS02LjctMTQuMS0xNi44LTE0LjFsLS4yIDBjLTEwLjEgMC0xNi44IDQuMi0xNi44IDE0LjFsMCA0MC4xYzAgMTAuNCA2LjcgMTQuMSAxNi44IDE0LjFsLjIgMGMxMC4xIDAgMTYuOC0zLjggMTYuOC0xNC4xIDAtOS45IDEuMS0xMy44LTMuOC0xMy44em0tODAuNyAxNy40bC0xNC43IDAgMC0xOS4zIDExLjQgMGMyLjUgMCAzLjgtMS4zIDMuOC0zLjhsMC0yLjFjMC0yLjUtMS4zLTMuOC0zLjgtMy44bC0xMS40IDAgMC0xOC4zIDE0LjQgMGMyLjUgMCAzLjgtMS4zIDMuOC0zLjhsMC0yLjFjMC0yLjUtMS4zLTMuOC0zLjgtMy44bC0yMS43IDBjLTIuNC0uMS0zLjcgMS4zLTMuNyAzLjhsMCA1OS4xYzAgMi41IDEuMyAzLjggMy44IDMuOGwyMS45IDBjMi41IDAgMy44LTEuMyAzLjgtMy44bDAtMi4xYzAtMi41LTEuMy0zLjgtMy44LTMuOHptLTQyLTE4LjVjNC42LTIgNy4zLTYgNy4zLTEyLjRsMC0xMS45YzAtMTAuMS02LjctMTQuMS0xNi44LTE0LjFsLTEzLjQgMGMtMi41IDAtMy44IDEuMy0zLjggMy44bDAgNTkuMWMwIDIuNSAxLjMgMy44IDMuOCAzLjhsMy40IDBjMi41IDAgMy44LTEuMyAzLjgtMy44bDAtMjIuOSA1LjYgMCA3LjQgMjMuNWMuMiAxIC44IDEuOCAxLjYgMi40czEuOCAuOSAyLjcgLjhsMy4zIDBjMi44IDAgNC0xLjggMy4yLTQuNGwtOC4xLTIzLjl6bS0zLjgtMTRjMCA0LjgtMi41IDYuMS02LjEgNi4xbC01LjggMCAwLTIwLjkgNS44IDBjMy42IDAgNi4xIDEuMyA2LjEgNi4xbDAgOC43ek0xNzYuMSAyMjZjLS4xLS41LS4yLTEtLjQtMS40cy0uNi0uOC0xLTEuMS0uOC0uNi0xLjMtLjctMS0uMi0xLjUtLjFsLTYuOSAwYy0uNSAwLTEgMC0xLjQgLjJzLS45IC40LTEuMyAuNy0uNyAuNy0uOSAxLjEtLjQgLjktLjQgMS40bC0xMSA1OS4yYy0uNSAyLjcgLjkgNC4xIDMuNCA0LjFsMyAwYy41IC4xIDEgMCAxLjUtLjJzLjktLjQgMS4zLS43IC43LS43IC45LTEuMiAuNC0uOSAuNC0xLjRsMS44LTExLjMgMTIuMiAwIDEuOCAxMS4zYzAgLjUgLjIgMSAuNCAxLjRzLjUgLjkgLjkgMS4yIC44IC42IDEuMyAuNyAxIC4yIDEuNSAuMmwzLjUgMGMyLjYgMCAzLjktMS40IDMuNC00LjFMMTc2LjEgMjI2em0tMTIuMyAzOS4zbDQuNy0yOS43IDQuNyAyOS43LTkuNCAwem04OS4zIDIwLjJsMC01My4yIDcuNSAwYzIuNSAwIDMuOC0xLjMgMy44LTMuOGwwLTIuMWMwLTIuNS0xLjMtMy44LTMuOC0zLjhsLTI1LjggMGMtMi41IDAtMy44IDEuMy0zLjggMy44bDAgMi4xYzAgMi41IDEuMyAzLjggMy44IDMuOGw3LjMgMCAwIDUzLjJjMCAyLjUgMS4zIDMuOCAzLjggMy44bDMuNCAwYzIuNSAwIDMuOC0xLjMgMy44LTMuOGwwIDB6bTI0OC0uOGwtMTkuNCAwIDAtMjYuNyAxNi4xIDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC43LS40IC4zLS40IC40LS43IC4xLS41IC4xLS44bDAtLjhjMC0uMyAwLS41LS4xLS44cy0uMi0uNS0uNC0uNy0uNC0uMy0uNy0uNC0uNS0uMS0uOC0uMWwtMTYuMSAwIDAtMjUuOCAxOS4xIDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC43LS40IC4zLS40IC40LS43IC4xLS41IC4xLS44bDAtLjhjMC0uMyAwLS41LS4xLS44cy0uMi0uNS0uNC0uNy0uNC0uMy0uNy0uNC0uNS0uMS0uOC0uMWwtMjIuMiAwYy0uMy0uMS0uNS0uMS0uOCAwcy0uNSAuMi0uNyAuNC0uMyAuNC0uNCAuNy0uMSAuNS0uMSAuOGwwIDYzYzAgLjMgMCAuNSAuMSAuOHMuMiAuNSAuNCAuNiAuNCAuMyAuNyAuNCAuNSAuMSAuOCAuMWwyMi41IDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC43LS40IC4zLS40IC40LS42IC4xLS41IC4xLS44bDAtLjhjMC0uMyAwLS41LS4xLS44cy0uMi0uNS0uNC0uNy0uNC0uMy0uNy0uNC0uNS0uMS0uOC0uMWwwIDB6TTQwOCAyMjEuOGwtLjggMGMtMTAuMSAwLTE1LjMgNC43LTE1LjMgMTQuMWwwIDQwLjFjMCA5LjMgNS4yIDE0LjEgMTUuMyAxNC4xbC44IDBjMTAuMSAwIDE1LjMtNC44IDE1LjMtMTQuMWwwLTQwLjFjMC05LjQtNS4yLTE0LjEtMTUuMy0xNC4xbDAgMHptMTAuMiA1Mi40Yy0uMSA4LTMgMTEuMS0xMC41IDExLjFzLTEwLjUtMy4xLTEwLjUtMTEuMWwwLTM2LjZjMC03LjkgMy0xMS4xIDEwLjUtMTEuMXMxMC41IDMuMiAxMC41IDExLjFsMCAzNi42em0tNDYuNS0xNC41YzYuMS0xLjYgOS4yLTYuMSA5LjItMTMuM2wwLTkuN2MwLTkuNC01LjItMTQuMS0xNS4zLTE0LjFsLTEzLjcgMGMtLjMgMC0uNSAwLS44IC4xcy0uNSAuMi0uNyAuNC0uMyAuNC0uNCAuNi0uMSAuNS0uMSAuOGwwIDYzYzAgLjMgMCAuNSAuMSAuOHMuMiAuNSAuNCAuNiAuNCAuMyAuNyAuNCAuNSAuMSAuOCAuMWwxLjIgMGMuMyAwIC41IDAgLjgtLjFzLjUtLjIgLjYtLjQgLjMtLjQgLjQtLjYgLjEtLjUgLjEtLjhsMC0yNi45IDExLjYgMCAxMC40IDI3LjJjLjIgLjUgLjUgLjkgLjkgMS4xcy45IC40IDEuNCAuNGwxLjUgMGMxLjQgMCAyLTEgMS41LTIuM2wtMTAuNi0yNy4zem0tNi40LTMuOWwtMTAuMiAwIDAtMjguNSAxMC4yIDBjNy41IDAgMTAuNSAzLjEgMTAuNSAxMS4xbDAgNi40YzAgNy44LTMgMTEtMTAuNSAxMWwwIDB6bTg1LjktMzMuMWwtMTMuNyAwYy0uMy0uMS0uNS0uMS0uOCAwcy0uNSAuMi0uNyAuNC0uMyAuNC0uNCAuNy0uMSAuNS0uMSAuOGwwIDYzYzAgLjMgMCAuNSAuMSAuOHMuMiAuNSAuNCAuNiAuNCAuMyAuNyAuNCAuNSAuMSAuOCAuMWwxLjIgMGMuMyAwIC41IDAgLjgtLjFzLjUtLjIgLjYtLjQgLjMtLjQgLjQtLjYgLjEtLjUgLjEtLjhsMC0yNi4xIDEwLjYgMGMxMC4xIDAgMTUuMy00LjggMTUuMy0xNC4xbDAtMTAuNWMwLTkuNC01LjItMTQuMS0xNS4zLTE0LjF6bTEwLjIgMjIuOGMwIDcuOS0zIDExLjEtMTAuNSAxMS4xbC0xMC4yIDAgMC0yOS4yIDEwLjIgMGM3LjUtLjEgMTAuNSAzLjEgMTAuNSAxMWwwIDcuMXpNMjU5LjYgMzA4bC0yLjMtNi44LTIuMyA2LjgtNy4xIC4xIDUuNyA0LjMtMi4xIDYuOCA1LjgtNC4xIDUuOCA0LjEtMi4xLTYuOCA1LjctNC4zLTcuMS0uMXpNNDg3LjIgMTcxLjljLTExLjctNC40LTIzLjUtOC4xLTM1LjYtMTEuMyAxOS42LTc4IDExLjYtMTM0LjctMjIuMy0xNTMuOS0zNC41LTE5LjQtODUuOSA0LjMtMTM4LjIgNTUuMiAzLjQgMy4zIDYuOCA2LjcgMTAuMiAxMC4yIDgyLjUtODAgMTE5LjYtNTMuNSAxMjAuOS01Mi44IDIyLjQgMTIuNyAzNiA1NS44IDE1LjUgMTM3LjgtMjcuOC02LjQtNTYuMS0xMC43LTg0LjYtMTMtNzEuOS0xMDAuNS0xNDAuNi0xNDIuMS0xODIuMi0xNDIuMS0zMC44IDAtNDMuOCAyMS00Ny42IDI3LjctMTguMSAzMi0xMy4zIDg0LjIgLjEgMTMzLjgtNzAuNSAyMC4zLTEyMC43IDU0LjEtMTIwLjMgOTUgLjUgNTkuNiAxMDMuMiA4Ny44IDEyMi4xIDkyLjgtMjAuNSA4MS45LTEwLjEgMTM1LjYgMjIuMyAxNTMuOSAyOCAxNS44IDc1LjEgNiAxMzguMi01NS4yLTMuNC0zLjMtNi44LTYuNy0xMC4yLTEwLjItODIuNSA4MC0xMTkuNyA1My41LTEyMC45IDUyLjgtMjIuMy0xMi42LTM2LTU1LjYtMTUuNS0xMzcuOSAxMi40IDIuOSA0MS44IDkuNSA4NC42IDEzIDcxLjkgMTAwLjQgMTQwLjYgMTQyIDE4Mi4xIDE0MiAzMC44IDAgNDMuOC0yMSA0Ny42LTI3LjcgMTgtMzEuOSAxMy4zLTg0LjEtLjEtMTMzLjggMTUyLjMtNDMuOCAxNTYuMi0xMzAuMiAzMy45LTE3Ni4zbDAgMHpNMTM2IDM2LjhjMi45LTUuMSAxMS45LTIwLjMgMzQuOS0yMC4zIDM2LjggMCA5OC44IDM5LjYgMTYzLjMgMTI2LjItMzEuMy0xLjgtNjIuNy0xLjUtOTMuOSAuOSAxMy0xOC4zIDI3LjEtMzUuOCA0Mi4yLTUyLjQtMy40LTMuNS02LjgtNi45LTEwLjItMTAuMi0xOC4zIDIwLjItMzUuMyA0MS43LTUwLjcgNjQuMi0yOC41IDIuNy01Ni43IDcuNi04NC40IDE0LjYtLjItMS40LTI0LjMtODIuMi0xLjItMTIzbDAgMHpNNDQwLjggNDc1LjFjLTIuOSA1LjEtMTEuOCAyMC4zLTM0LjkgMjAuMy0zNi43IDAtOTguNy0zOS40LTE2My4zLTEyNi4yIDMxLjMgMS44IDYyLjcgMS41IDkzLjktLjktMTMgMTguMy0yNy4xIDM1LjgtNDIuMiA1Mi40IDMuNCAzLjUgNi44IDYuOSAxMC4yIDEwLjIgMTguNC0yMC4yIDM1LjMtNDEuNyA1MC43LTY0LjIgNDcuMy00LjcgODAuMy0xMy41IDg0LjQtMTQuNiAyMi43IDg0LjQgNC41IDExNyAxLjIgMTIzem05LjEtMTM4LjZjLTMuNi0xMS45LTcuNy0yNC4xLTEyLjQtMzYuNC0yLjEgMC00LjItLjUtNi4xLTEuNXMtMy41LTIuNC00LjYtNC4ybC0uMSAuMWMtMS42IDEuNS0zLjQgMi43LTUuNCAzLjYgNS43IDE0LjMgMTAuNiAyOC40IDE0LjcgNDIuMi0yMy43IDYtNDcuNyAxMC4zLTcyIDEzIDMuNS01LjMgMTcuMi0yNi4yIDMyLjItNTQuMi0yLjEtLjgtNC4yLTEuOS02LTMuMi0xLjEgMS4yLTMuNiA0LjItMTAuOSA0LjItNi4yIDExLjItMTcuNCAzMC45LTMzLjkgNTUuMi0zNy40IDMuMy03NSAzLjYtMTEyLjQgMS03LjktMTEuMi0yMS41LTMxLjEtMzYuOC01Ny44LTEtLjQtMi0uOS0zLTEuNS0xLjkgMS42LTMuOSAzLjItMTIuNiAzLjIgNi4zIDExLjIgMTcuNSAzMC43IDMzLjggNTQuNi0yNC4zLTIuMy00OC40LTYuMi03Mi4yLTExLjcgMy45LTE0IDguNi0yOC4zIDE0LjEtNDIuOS0zLjIgMC01LjQgLjItOC40LTEtMi4yIC44LTQuNiAxLjEtNi45IDEtNC45IDEzLjQtOS4xIDI2LjUtMTIuNyAzOS40LTE1OS45LTQyLjYtMTQwLjMtMTIzLjYtMS41LTE2NCAzLjYgMTEuOSA3LjcgMjQuMSAxMi40IDM2LjQgMTAuNCAwIDEyLjkgMy40IDE0LjQgNS4zIC43LS44IDEuNC0xLjYgMi4zLTIuMi01LjgtMTQuNy0xMC45LTI5LjItMTUuMi00My4zIDctMS44IDMyLjQtOC40IDcyLTEzLTE1LjkgMjQuMy0yNi43IDQzLjktMzIuOCA1NS4zIDMuMSAxLjggNS4zIDQuNiA2LjQgOCAyLjUtMy43IDYuMS02LjYgMTAuMi04LjQgNi41LTExLjcgMTcuOS0zMS45IDM0LjgtNTYuOSAzNy40LTMuMyA3NS0zLjYgMTEyLjQtMSAzMS41IDQ0LjYgMjguOSA0OC4xIDQyLjUgNjQuNSAyLjYtMy41IDYuMy02IDEwLjQtNy40LTYuNC0xMS40LTE3LjYtMzEtMzQuMy01NS41IDQwLjQgNC4xIDY1IDEwIDcyLjIgMTEuNy00IDE0LjQtOC45IDI5LjItMTQuNiA0NC4yIDIuNSAxIDQuOCAyLjQgNi44IDQuM2wuMSAuMWMxLTEuNSAyLjMtMi44IDMuOC0zLjhzMy4zLTEuNiA1LjEtMS44YzQuOS0xMy40IDkuMi0yNi42IDEyLjgtMzkuNSAxMS43IDMuMSAyMy4yIDYuOCAzNC41IDExIDEwNi4xIDM5LjkgNzQgODcuOSA3Mi42IDkwLjQtMTkuOCAzNS4xLTgwLjEgNTUuMi0xMDUuNyA2Mi41em0tMTE0LjQtMTE0bC0xLjIgMGMtLjMgMC0uNSAwLS44IC4xcy0uNSAuMi0uNiAuNC0uMyAuNC0uNCAuNi0uMSAuNS0uMSAuOGwwIDQ5LjhjMCA3LjktMi42IDExLjEtMTAuMSAxMS4xcy0xMC4xLTMuMS0xMC4xLTExLjFsMC00OS44YzAtLjMgMC0uNS0uMS0uOHMtLjItLjUtLjQtLjctLjQtLjMtLjctLjQtLjUtLjEtLjgtLjFsLTEuMiAwYy0uMyAwLS41IDAtLjggLjFzLS41IC4yLS43IC40LS4zIC40LS40IC42LS4xIC41LS4xIC44bDAgNTEuNWMwIDkuNiA1IDE0LjEgMTUuMSAxNC4xbC40IDBjMTAuMSAwIDE1LjEtNC42IDE1LjEtMTQuMWwwLTUxLjVjMC0uMy0uMS0uNS0uMi0uOHMtLjMtLjUtLjUtLjYtLjQtLjMtLjctLjQtLjUtLjEtLjgtLjF6TTMyMS44IDMwOGwtMi4zLTYuOC0yLjMgNi44LTcuMSAuMSA1LjcgNC4zLTIuMSA2LjggNS44LTQuMSA1LjggNC4xLTIuMS02LjggNS43LTQuMy03LjEtLjF6bS0zMS4xIDcuNGwtMi4zLTYuOC0yLjMgNi44LTcuMSAuMSA1LjcgNC4zLTIuMSA2LjggNS44LTQuMSA1LjggNC4xLTIuMS02LjggNS43LTQuMy03LjEtLjF6bTUuMS0zMC44bC0xOS40IDAgMC0yNi43IDE2LjEgMGMuMyAwIC41IDAgLjgtLjFzLjUtLjIgLjctLjQgLjMtLjQgLjQtLjcgLjEtLjUgLjEtLjhsMC0uOGMwLS4zIDAtLjUtLjEtLjhzLS4yLS41LS40LS43LS40LS4zLS43LS40LS41LS4xLS44LS4xbC0xNi4xIDAgMC0yNS44IDE5LjEgMGMuMyAwIC41IDAgLjgtLjFzLjUtLjIgLjctLjQgLjMtLjQgLjQtLjcgLjEtLjUgLjEtLjhsMC0uOGMwLS4zIDAtLjUtLjEtLjhzLS4yLS41LS40LS43LS40LS4zLS43LS40LS41LS4xLS44LS4xbC0yMi4yIDBjLS4zIDAtLjUgMC0uOCAuMXMtLjUgLjItLjcgLjQtLjMgLjQtLjQgLjYtLjEgLjUtLjEgLjhsMCA2M2MwIC4zIDAgLjUgLjEgLjhzLjIgLjUgLjQgLjYgLjQgLjMgLjcgLjQgLjUgLjEgLjggLjFsMjIuNSAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNy0uNCAuMy0uNCAuNC0uNyAuMS0uNSAuMS0uOGwwLS44YzAtLjMgMC0uNi0uMS0uOHMtLjItLjUtLjQtLjctLjQtLjQtLjctLjQtLjUtLjEtLjgtLjFsMCAwem0tNy40LTk5LjRsLTIuMyA2LjgtNy4xIC4xIDUuNyA0LjMtMi4xIDYuOCA1LjgtNC4xIDUuOCA0LjEtMi4xLTYuOCA1LjctNC4zLTcuMS0uMS0yLjMtNi44eiJdCiAgICB9OwogICAgZmFXYXplID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndhemUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjgzZiIsICJNNTAyLjYgMjAxLjdjMTQuNSA4NS45LTMwLjkgMTY3LjktMTEzLjIgMjA4LjEgMTMgMzQuMS0xMi40IDcwLjItNDguMyA3MC4yLTEzLjIgMC0yNi01LjEtMzUuNi0xNC4ycy0xNS4zLTIxLjYtMTYtMzQuOGMtNi40IC4yLTY0LjIgMC03Ni4zLS42LS4zIDYuOC0xLjkgMTMuNS00LjcgMTkuNnMtNi45IDExLjctMTEuOSAxNi4zLTEwLjggOC4yLTE3LjIgMTAuNS0xMy4yIDMuNC0xOS45IDMuMWMtMzMuOS0xLjQtNTgtMzQuOC00Ny02Ny45LTM3LjItMTMuMS03Mi41LTM0LjktOTkuNi03MC44LTEzLTE3LjMtLjUtNDEuOCAyMC44LTQxLjggNDYuMyAwIDMyLjItNTQuMiA0My4yLTExMC4zIDE4LjQtOTMuOSAxMTYuOC0xNTcuMSAyMTEuNy0xNTcuMSAxMDIuNSAwIDE5Ny4yIDcwLjcgMjE0LjEgMTY5Ljd6TTM3My45IDM4OC4zYzQyLTE5LjIgODEuMy01Ni43IDk2LjMtMTAyLjEgNDAuNS0xMjMuMS02NC4yLTIyOC0xODEuNy0yMjgtODMuNCAwLTE3MC4zIDU1LjQtMTg2LjEgMTM2LTkuNSA0OC45IDUgMTMxLjQtNjguNyAxMzEuNCAyNC45IDMzLjEgNTguMyA1Mi42IDkzLjcgNjQgMjQuNy0yMS44IDYzLjktMTUuNSA3OS44IDE0LjMgMTQuMiAxIDc5LjIgMS4yIDg3LjkgLjggMy41LTYuOSA4LjUtMTIuOSAxNC43LTE3LjVzMTMuMi03LjkgMjAuOC05LjUgMTUuNC0xLjQgMjIuOSAuNCAxNC41IDUuMyAyMC41IDEwLjJ6TTIwNS41IDE4Ny4xYzAtMzQuNyA1MC44LTM0LjcgNTAuOCAwcy01MC44IDM0LjctNTAuOCAwem0xMTYuNiAwYzAtMzQuNyA1MC45LTM0LjcgNTAuOSAwcy01MC45IDM0LjgtNTAuOSAwek0xOTkuNSAyNTcuOGMtMy40LTE2LjkgMjIuMi0yMi4yIDI1LjYtNS4ybC4xIC4zYzQuMSAyMS40IDI5LjggNDQgNjQuMSA0My4xIDM1LjctLjkgNTkuMy0yMi4yIDY0LjEtNDIuOCA0LjUtMTYuMSAyOC42LTEwLjQgMjUuNSA2LTUuMiAyMi4yLTMxLjIgNjItOTEuNSA2Mi45LTQyLjYgMC04MC45LTI3LjgtODcuOS02NC4ybDAgMHoiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zUmVtaXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy1yZW1peCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGVlIiwgIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6TTQxOC4xIDI2MC40bDQuOSAyLjIgMCA3MGMtNy4yIDMuNi02My40IDI3LjUtNjcuMyAyOC44LTYuNS0xLjgtMTEzLjctNDYuOC0xMzcuMy01Ni4ybC02NC4yIDI2LjYtNjMuMy0yNy41IDAtNjMuOCA1OS4zLTI0LjhjLS43LS43LS40IDUtLjQtNzAuNGw2Ny4zLTI5LjcgMTUxLjkgNjIuOSAwIDYxLjYgNDkuMSAyMC4zem0tNzAuNCA4MS41bDAtNDMuOC0uNCAwIDAtMS44LTExMy44LTQ2LjUgMCA0NS4yIDExMy44IDQ2LjkgMC0uNCAuNCAuNHptNy41LTU3LjZsMzkuOS0xNi40LTM2LjgtMTUuNS0zOSAxNi40IDM1LjkgMTUuNXptNTIuMyAzOC4xbDAtNDMtNDQuMyAxOC42IDAgNDMuNCA0NC4zLTE5eiJdCiAgICB9OwogICAgZmFCYW5kY2FtcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJiYW5kY2FtcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMmQ1IiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6bTQ4LjIgMzI2LjFsLTE4MSAwIDg0LjctMTU2LjEgMTgxIDAtODQuNyAxNTYuMXoiXQogICAgfTsKICAgIGZhU3F1YXJlV2ViQXdlc29tZVN0cm9rZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtd2ViLWF3ZXNvbWUtc3Ryb2tlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2ODQiLCAiTTY0IDY0QzQ2LjMgNjQgMzIgNzguMyAzMiA5NmwwIDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMkw2NCA2NHpNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTIzNSA4MS42bDUzIDQ2LjQgNTIuMi0xMC40Yy0yLjYtMy45LTQuMi04LjUtNC4yLTEzLjYgMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGMwIDEzLTEwLjMgMjMuNi0yMy4yIDI0TDMwNC41IDM0OS4xYy01LjIgMTEuNS0xNi42IDE4LjktMjkuMiAxOC45bC0xMDIuNiAwYy0xMi42IDAtMjQtNy40LTI5LjItMTguOUw4Ny4yIDIyNGMtMTIuOS0uNC0yMy4yLTExLTIzLjItMjQgMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGMwIDUtMS41IDkuNy00LjIgMTMuNkwxNjAgMjI0IDIxMy4xIDE3Ny42Yy04LjktNC4xLTE1LTEzLjEtMTUtMjMuNiAwLTE0LjQgMTEuNi0yNiAyNi0yNnMyNiAxMS42IDI2IDI2YzAgMTAuNS02LjIgMTkuNS0xNS4xIDIzLjZ6Il0KICAgIH07CiAgICBmYVZpbWVvViA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2aW1lby12IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyN2QiLCAiTTQ0Ny44IDE1My42Yy0yIDQzLjYtMzIuNCAxMDMuMy05MS40IDE3OS4xLTYwLjkgNzkuMi0xMTIuNCAxMTguOC0xNTQuNiAxMTguOC0yNi4xIDAtNDguMi0yNC4xLTY2LjMtNzIuMy0zNS4yLTEyOS4yLTUwLjItMjA0LjktNzkuMy0yMDQuOS0zLjQgMC0xNS4xIDcuMS0zNS4yIDIxLjFMMCAxNjguMmM1MS42LTQ1LjMgMTAwLjktOTUuNyAxMzEuOC05OC41IDM0LjktMy40IDU2LjMgMjAuNSA2NC40IDcxLjUgMjguNyAxODEuNSA0MS40IDIwOC45IDkzLjYgMTI2LjcgMTguNy0yOS42IDI4LjgtNTIuMSAzMC4yLTY3LjYgNC44LTQ1LjktMzUuOC00Mi44LTYzLjMtMzEgMjItNzIuMSA2NC4xLTEwNy4xIDEyNi4yLTEwNS4xIDQ1LjggMS4yIDY3LjUgMzEuMSA2NC45IDg5LjR6Il0KICAgIH07CiAgICBmYVN0cmF2YSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdHJhdmEiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjQyOCIsICJNMTU4LjQgMEw3IDI5MiA5Ni4yIDI5MiAxNTguNCAxNzUuOSAyMjAuMSAyOTIgMzA4LjYgMjkyIDE1OC40IDB6TTMwOC42IDI5MmwtNDMuOSA4OC4yLTQ0LjYtODguMi02Ny42IDAgMTEyLjIgMjIwIDExMS41LTIyMC02Ny42IDB6Il0KICAgIH07CiAgICBmYVVuaXJlZ2lzdHJ5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVuaXJlZ2lzdHJ5IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY0MDQiLCAiTTE5MiA0ODBjMzkuNSAwIDc2LjItMTEuOCAxMDYuOC0zMi4ybC0yMTMuNSAwQzExNS44IDQ2OC4yIDE1Mi41IDQ4MCAxOTIgNDgwek0xMDIuOSAyODYuOWwwLTEyLjQtMTAyLjkgMCAwIDEyLjRjMCAyLjUgMCA1IC4xIDcuNGwxMDMuMSAwYy0uMi0yLjQtLjMtNC45LS4zLTcuNHptMjAuNSA1N2wtMTE0LjkgMGMyLjYgOC41IDUuOCAxNi44IDkuNiAyNC44bDEzOC4zIDBjLTEyLjktNS43LTI0LjEtMTQuMi0zMy0yNC44em0tMTcuNy0zNC43bC0xMDQuNCAwYy45IDcuNiAyLjIgMTUgMy45IDIyLjNsMTA5LjcgMGMtNC02LjktNy4yLTE0LjQtOS4yLTIyLjN6bS0yLjgtNjkuM2wtMTAyLjkgMCAwIDE3LjMgMTAyLjkgMCAwLTE3LjN6bTAtMTczLjJsLTEwMi45IDAgMCA0LjkgMTAyLjkgMCAwLTQuOXptMC0zNC43bC0xMDIuOSAwIDAgMi41IDEwMi45IDAgMC0yLjV6bTAgNjkuM2wtMTAyLjkgMCAwIDcuNCAxMDIuOSAwIDAtNy40em0wIDEwNGwtMTAyLjkgMCAwIDE0LjggMTAyLjkgMCAwLTE0Ljh6bTAtNjkuM2wtMTAyLjkgMCAwIDkuOSAxMDIuOSAwIDAtOS45em0wIDM0LjZsLTEwMi45IDAgMCAxMi40IDEwMi45IDAgMC0xMi40ek0yNjkuMSAzMzEuNWwxMDkuNyAwYzEuOC03LjMgMy4xLTE0LjcgMy45LTIyLjNsLTEwNC40IDBjLTIuMSA3LjktNS4yIDE1LjQtOS4yIDIyLjN6bTEyLTE4NS43bDEwMi45IDAgMC05LjgtMTAyLjkgMCAwIDkuOHptMCAzNy4ybDEwMi45IDAgMC0xMi40LTEwMi45IDAgMCAxMi40em0wLTc0LjNsMTAyLjkgMCAwLTcuNC0xMDIuOSAwIDAgNy40em0wLTc2LjdsMCAyLjUgMTAyLjkgMCAwLTIuNS0xMDIuOSAwek03OC4xIDQ0Mi45bDIyNy43IDBjMTEuOC04LjcgMjIuNy0xOC42IDMyLjItMjkuN2wtMjkzLjEgMGM5LjYgMTEgMjEuNCAyMSAzMy4yIDI5Ljd6bTIwMy0zNzEuM2wxMDIuOSAwIDAtNC45LTEwMi45IDAgMCA0Ljl6bTAgMTQ4LjVsMTAyLjkgMCAwLTE0LjgtMTAyLjkgMCAwIDE0Ljh6TTM4LjggNDA1LjdsMzA1LjMgMGM2LjctOC41IDEyLjYtMTcuNiAxNy44LTI3LjJMMjMgMzc4LjVjNS4yIDkuNiA5LjIgMTguNyAxNS44IDI3LjJ6bTE4OC44LTM3LjFsMTM5LjQgMGMzLjctOCA1LjgtMTYuMiA4LjUtMjQuOGwtMTE1IDBjLTguOCAxMC43LTIwLjEgMTkuMi0zMi45IDI0Ljh6bTUzLjUtODEuN2MwIDIuNS0uMSA1LS40IDcuNGwxMDMuMSAwYy4xLTIuNSAuMi00LjkgLjItNy40bDAtMTIuNC0xMDIuOSAwIDAgMTIuNHptMC0yOS43bDEwMi45IDAgMC0xNy4zLTEwMi45IDAgMCAxNy4zeiJdCiAgICB9OwogICAgZmFDY0RpbmVyc0NsdWIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2MtZGluZXJzLWNsdWIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjI0YyIsICJNMjM5LjcgNzkuOWExNzUuOCAxNzUuOCAwIDEgMCAwIDM1MS42IDE3NS44IDE3NS44IDAgMSAwIDAtMzUxLjZ6TTE5OS44IDM1OS41Yy00MS43LTE1LjktNzEuNC01Ni40LTcxLjQtMTAzLjhzMjkuNy04Ny45IDcxLjQtMTA0LjFsMCAyMDcuOXptNzkuOCAuM2wwLTIwOC4yYzQxLjcgMTYuMiA3MS40IDU2LjcgNzEuNCAxMDQuMXMtMjkuNyA4Ny45LTcxLjQgMTA0LjF6TTUyOCAzMkw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQ4MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0zMjkuNyA0NDhsLTkwLjMgMEMxMzMuMiA0NDggNDUuNiAzNjIuNSA0NS42IDI1Ny44IDQ1LjYgMTQzLjIgMTMzLjIgNjQgMjM5LjQgNjRsOTAuMyAwYzEwNSAwIDIwMC43IDc5LjIgMjAwLjcgMTkzLjggMCAxMDQuNy05NS43IDE5MC4yLTIwMC43IDE5MC4yeiJdCiAgICB9OwogICAgZmFQaW50ZXJlc3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGludGVyZXN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwZDIiLCAiTTUwNCAyNTZjMCAxMzctMTExIDI0OC0yNDggMjQ4LTI1LjYgMC01MC4yLTMuOS03My40LTExLjEgMTAuMS0xNi41IDI1LjItNDMuNSAzMC44LTY1IDMtMTEuNiAxNS40LTU5IDE1LjQtNTkgOC4xIDE1LjQgMzEuNyAyOC41IDU2LjggMjguNSA3NC44IDAgMTI4LjctNjguOCAxMjguNy0xNTQuMyAwLTgxLjktNjYuOS0xNDMuMi0xNTIuOS0xNDMuMi0xMDcgMC0xNjMuOSA3MS44LTE2My45IDE1MC4xIDAgMzYuNCAxOS40IDgxLjcgNTAuMyA5Ni4xIDQuNyAyLjIgNy4yIDEuMiA4LjMtMy4zIC44LTMuNCA1LTIwLjMgNi45LTI4LjEgLjYtMi41IC4zLTQuNy0xLjctNy4xLTEwLjEtMTIuNS0xOC4zLTM1LjMtMTguMy01Ni42IDAtNTQuNyA0MS40LTEwNy42IDExMi0xMDcuNiA2MC45IDAgMTAzLjYgNDEuNSAxMDMuNiAxMDAuOSAwIDY3LjEtMzMuOSAxMTMuNi03OCAxMTMuNi0yNC4zIDAtNDIuNi0yMC4xLTM2LjctNDQuOCA3LTI5LjUgMjAuNS02MS4zIDIwLjUtODIuNiAwLTE5LTEwLjItMzQuOS0zMS40LTM0LjktMjQuOSAwLTQ0LjkgMjUuNy00NC45IDYwLjIgMCAyMiA3LjQgMzYuOCA3LjQgMzYuOHMtMjQuNSAxMDMuOC0yOSAxMjMuMkMxNjEuNSA0MzcuMiAxNjMuNSA0NjcuNCAxNjUuNiA0ODcgNzMuNCA0NTAuOSA4IDM2MS4xIDggMjU2IDggMTE5IDExOSA4IDI1NiA4UzUwNCAxMTkgNTA0IDI1NnoiXQogICAgfTsKICAgIGZhQWxnb2xpYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhbGdvbGlhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzNmMiLCAiTTI1NiAwYy0xMzkuOSAwLTI1NCAxMTIuNy0yNTYgMjUyLjEtMiAxNDEuNSAxMTIuOSAyNTguNyAyNTQuNSAyNTkuNSA0My43IC4zIDg1LjktMTAuNCAxMjMuMy0zMC43IDMuNi0yIDQuMi03IDEuMS05LjdsLTI0LTIxLjJjLTQuOS00LjMtMTEuOC01LjUtMTcuOC0zLTI2LjEgMTEuMS01NC41IDE2LjgtODMuNyAxNi40LTExNC40LTEuNS0yMDYuOS05Ni42LTIwNS4xLTIxMSAxLjgtMTEyLjkgOTQuMy0yMDQuMiAyMDcuNy0yMDQuMmwyMDcuNyAwIDAgMzY5LTExNy44LTEwNC43Yy0zLjgtMy40LTkuNy0yLjctMTIuNyAxLjMtMTguOSAyNS00OS43IDQwLjYtODMuOSAzOC4yLTQ3LjUtMy4zLTg1LjktNDEuNS04OS41LTg4LjktNC4yLTU2LjYgNDAuNi0xMDMuOSA5Ni4zLTEwMy45IDUwLjQgMCA5MS45IDM4LjggOTYuMiA4OCAuNCA0LjQgMi40IDguNSA1LjcgMTEuNGwzMC43IDI3LjJjMy41IDMuMSA5IDEuMiA5LjktMy40IDIuMi0xMS44IDMtMjQuMiAyLjEtMzYuOC00LjktNzItNjMuMy0xMzAtMTM1LjQtMTM0LjQtODIuNy01LjEtMTUxLjggNTkuNS0xNTQgMTQwLjYtMi4xIDc4LjkgNjIuNiAxNDcgMTQxLjYgMTQ4LjcgMzMgLjcgNjMuNi05LjYgODguMy0yNy42TDQ5NSA1MDkuNGM2LjYgNS44IDE3IDEuMiAxNy03LjdsMC00OTJjMC01LjQtNC40LTkuNy05LjctOS43TDI1NiAweiJdCiAgICB9OwogICAgZmFTdGFja3BhdGggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RhY2twYXRoIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY4NDIiLCAiTTI0NC42IDIzMi40YzAgOC41LTQuMyAyMC41LTIxLjMgMjAuNWwtMTkuNiAwIDAtNDEuNSAxOS42IDBjMTcuMSAwIDIxLjMgMTIuNCAyMS4zIDIxek00NDggMzJsMCA0NDgtNDQ4IDAgMC00NDggNDQ4IDB6TTE1MS4zIDI4Ny44YzAtMjEuMi0xMi4xLTM0LjUtNDYuNy00NC44LTIwLjYtNy40LTI2LTEwLjktMjYtMTguNnM3LTE0LjYgMjAuNC0xNC42YzE0LjEgMCAyMC44IDguNCAyMC44IDE4LjRsMzAuNyAwIC4yLS42Yy41LTE5LjYtMTUuMS00MS42LTUxLjEtNDEuNi0yMy40IDAtNTIuNiAxMC44LTUyLjYgMzguMyAwIDE5LjQgOS4yIDMxLjMgNTAuNyA0NC40IDE3LjMgNi4yIDIxLjkgMTAuNCAyMS45IDE5LjUgMCAxNS4yLTE5LjEgMTQuMi0xOS41IDE0LjItMjAuNCAwLTI1LjctOS4xLTI1LjctMjEuOWwtMzAuOCAwLS4yIC42Yy0uNyAzMS4zIDI4LjQgNDUuMiA1Ni42IDQ1LjIgMzAgMCA1MS4xLTEzLjYgNTEuMS0zOC4zem0xMjUuNC01NS42YzAtMjUuMy0xOC40LTQ1LjUtNTMuNC00NS41bC01MS44IDAgMCAxMzguMiAzMi4yIDAgMC00Ny40IDE5LjYgMGMzMC4zIDAgNTMuNC0xNiA1My40LTQ1LjR6TTI5Ny45IDMyNWw0OS4xLTEzOC4yLTMxLjEgMC00Ny45IDEzOC4yIDI5LjkgMHpNNDA0LjUgMTg2LjhsLTMxLjEgMC00Ny45IDEzOC4yIDI5LjkgMCA0OS4xLTEzOC4yeiJdCiAgICB9OwogICAgZmFPY3RvcHVzRGVwbG95ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm9jdG9wdXMtZGVwbG95IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwODIiLCAiTTQ1NS43IDM0OS4yYy00NS45LTM5LjEtMzYuNy03Ny45LTE2LjEtMTI4LjEgMzUuNy04Ny0yMy41LTE4Ni45LTEwOS42LTIxMi44LTkyLjktMjcuOS0xOTUuNyAxNi0yMzAuMyAxMDguOC04LjcgMjMuNS0xMi41IDQ4LjUtMTEgNzMuNSAxLjcgMjkuNSAxNC43IDUzIDI0LjEgODAuMyAxNy4yIDUwLjItMjguMSA5Mi43LTY2LjcgMTE3LjYtNDYuOCAzMC4yLTM2LjMgMzkuOS04LjQgNDEuOSAyMy40IDEuNyA0NC41LTQuNSA2NS4zLTE1IDkuMi00LjYgNDAuNy0xOC45IDQ1LjEtMjguNi0xMi4yIDI2LjYtMzcgNzIuNy0yMS41IDEwMi4xIDE5LjEgMzYuMiA2Ny4xLTMxLjggNzYuNy00NS44IDguNi0xMi42IDQzLTgxLjMgNjMuNi00Ni45IDE4LjkgMzEuNCA4LjYgNzYuNCAzNS43IDEwNC42IDMyLjkgMzQuMiA1MS4yLTE4LjMgNTEuNC00NC4yIC4yLTE2LjQtNi4xLTk1LjkgMjkuOS01OS45IDIxLjQgMjEuNCA1Mi45IDcxLjIgODguNiA2NyAzOC43LTQuNS0yMi4xLTY4LTI4LjMtNzguNyA1LjQgNC4zIDUzLjcgMzQuMSA1My44IDkuNSAuMS0xOC44LTMwLjEtMzQuNy00Mi41LTQ1LjN6Il0KICAgIH07CiAgICBmYVlhbW1lciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ5YW1tZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjg0MCIsICJNNTAwLjcgMTU5LjVjLS40LTEuOC0xLjItMy40LTIuMy00LjhzLTIuNS0yLjYtNC4xLTMuNWMtMy4xLTEuNi02LjctMi0xMC4xLTEuMWwtMjYuNCA2LjYgMC0uMi0yMi4zIDUuOC0xLjIgLjMtLjYtMi4yYy0xNS41LTU4LjMtNDUtMTExLjktODYuMS0xNTYuMi0yLjYtMi43LTYuMS00LjItOS44LTQuM3MtNy4zIDEuMy0xMCAzLjhsLTEwMi45IDEwMi43LTE5OS45IDBjLTYuNiAwLTEyLjkgMi42LTE3LjYgNy4zUzAgMTI0LjggMCAxMzEuNGwwIDI0OUMwIDM4NyAyLjYgMzkzLjMgNy4zIDM5OHMxMSA3LjMgMTcuNiA3LjNMMjI1IDQwNS4zIDMyOC4xIDUwOGMyLjYgMi42IDYgNCA5LjcgNHM3LjEtMS40IDkuNy00Yy4xLS4xIC4yLS4zIC40LS40IDI5LjMtMzEuNSA1Mi44LTY3LjggNjkuNi0xMDcuNCA2LjktMTYuNSAxMi43LTMzLjUgMTcuMy01MC44bDAgMCAyMC40IDUuMyAwLS4xIDI4LjMgNy4zYy45IC4yIDEuNyAuNCAyLjYgLjUgMS40IC4yIDIuOCAuMiA0LjEtLjEgMi41LS41IDQuOC0xLjcgNi43LTMuNHMzLjItNCAzLjgtNi41YzE1LjItNjMuNCAxNS4yLTEyOS42IC4xLTE5M2wwIDB6TTMzNy4xIDI0LjdsMCAwIDAgMCAwIDB6TTIyNi45IDE4OS44bC01Mi42IDkxLjNjLTEgMS43LTEuNSAzLjctMS41IDUuN2wwIDQ2LjJjMCA1LjgtMi4zIDExLjQtNi41IDE1LjZzLTkuNyA2LjQtMTUuNiA2LjRsLTMuNCAwYy01LjggMC0xMS40LTIuMy0xNS42LTYuNHMtNi41LTkuNy02LjUtMTUuNmwwLTQ1LjdjMC0xLjktLjUtMy44LTEuNC01LjVMNzIuMyAxODkuNmMtMS45LTMuNC0yLjgtNy4xLTIuOC0xMXMxLjEtNy42IDMtMTAuOSA0LjctNi4xIDguMS04IDcuMS0yLjkgMTEtMi45bDMuMyAwYzQgMCA4IDEuMSAxMS41IDMuMnM2LjMgNS4xIDguMSA4LjdsMzYuNCA3MC4zIDM3LjUtNzAuNWMxLjgtMy41IDQuNi02LjQgNy45LTguNHM3LjItMy4yIDExLjEtMy4yIDcuOCAuOSAxMS4yIDIuOCA2LjMgNC43IDguMiA4LjFjMiAzLjMgMyA3LjEgMyAxMXMtMSA3LjctMyAxMWwwIDB6TTMzNy4xIDI0LjdjMzUuOSA0MC42IDYxLjkgODkgNzUuOCAxNDEuM2wuNiAyLTExNC4xIDI5LjYgMC02Ni4xYzAtNi42LTIuNy0xMi45LTcuMy0xNy42cy0xMS03LjMtMTcuNi03LjNsLTE5LjQgMCA4Mi4xLTgxLjh6TTM5Ny42IDM5MmwwIDAgMCAwYy0xNC43IDM0LjgtMzUuMSA2Ny02MC4yIDk1LjJsLTgyLjItODEuOSAxOS4yIDBjNi42IDAgMTIuOS0yLjYgMTcuNi03LjNzNy4zLTExIDcuMy0xNy42bDAtNjYuMiAxMTQuNiAyOS45Yy00LjQgMTYuMy05LjggMzIuMy0xNi4zIDQ3LjlsMCAwem04NC01Mi40bDAgMC01MC42LTEzLjEtMTMxLjctMzQuMyAwLTcyLjUgMTE5LjctMzEgNC41LTEuMmMyOS45LTcuNyA0OS4yLTEyLjggNTguMS0xNS4xIDEyIDU1LjEgMTIgMTEyLjEgMCAxNjcuMnoiXQogICAgfTsKICAgIGZhTW9keCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtb2R4IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyODUiLCAiTTM1NiAyNDEuOGwzNi43IDIzLjcgMCAyMTQuNS0xMzMtODMuOCA5Ni4zLTE1NC40ek00NDAgNzVsLTIxMy43IDAtMjMgMzcuOCAxNTMuNSA5Ni41IDgzLjItMTM0LjN6TTM1MSAyMTcuOGwtMjk1LjgtMTg1LjggMCAyMTQuNSA0NiAyOSAyNDkuOC01Ny43ek05NyAyOTQuMkw4IDQzNyAyMjEuNyA0MzcgMzQ2LjcgMjM2LjUgOTcgMjk0LjJ6Il0KICAgIH07CiAgICBmYVNxdWFyZVRocmVhZHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXRocmVhZHMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTYxOSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjk0LjIgMjQ0LjNjMTkuNSA5LjMgMzMuNyAyMy41IDQxLjIgNDAuOSAxMC40IDI0LjMgMTEuNCA2My45LTIwLjIgOTUuNC0yNC4yIDI0LjEtNTMuNSAzNS05NS4xIDM1LjNsLS4yIDBjLTQ2LjgtLjMtODIuOC0xNi4xLTEwNi45LTQ2LjgtMjEuNS0yNy4zLTMyLjYtNjUuNC0zMy0xMTMuMWwwLS4yYy40LTQ3LjcgMTEuNS04NS43IDMzLTExMy4xIDI0LjItMzAuNyA2MC4yLTQ2LjUgMTA2LjktNDYuOGwuMiAwYzQ2LjkgLjMgODMuMyAxNiAxMDguMiA0Ni42IDEyLjMgMTUuMSAyMS4zIDMzLjMgMjcgNTQuNGwtMjYuOSA3LjJjLTQuNy0xNy4yLTExLjktMzEuOS0yMS40LTQzLjYtMTkuNC0yMy45LTQ4LjctMzYuMS04Ny0zNi40LTM4IC4zLTY2LjggMTIuNS04NS41IDM2LjItMTcuNSAyMi4zLTI2LjYgNTQuNC0yNi45IDk1LjUgLjMgNDEuMSA5LjQgNzMuMyAyNi45IDk1LjUgMTguNyAyMy44IDQ3LjQgMzYgODUuNSAzNi4yIDM0LjMtLjMgNTYuOS04LjQgNzUuOC0yNy4zIDIxLjUtMjEuNSAyMS4xLTQ3LjkgMTQuMi02NC00LTkuNC0xMS40LTE3LjMtMjEuMy0yMy4zLTIuNCAxOC03LjkgMzIuMi0xNi41IDQzLjItMTEuNCAxNC41LTI3LjcgMjIuNC00OC40IDIzLjUtMTUuNyAuOS0zMC44LTIuOS00Mi42LTEwLjctMTMuOS05LjItMjItMjMuMi0yMi45LTM5LjUtMS43LTMyLjIgMjMuOC01NS4zIDYzLjUtNTcuNiAxNC4xLS44IDI3LjMtLjIgMzkuNSAxLjktMS42LTkuOS00LjktMTcuNy05LjgtMjMuNC02LjctNy44LTE3LjEtMTEuOC0zMC44LTExLjlsLS40IDBjLTExIDAtMjYgMy4xLTM1LjYgMTcuNmwtMjMtMTUuOGMxMi44LTE5LjQgMzMuNi0zMC4xIDU4LjUtMzAuMWwuNiAwYzQxLjggLjMgNjYuNiAyNi4zIDY5LjEgNzEuOCAxLjQgLjYgMi44IDEuMiA0LjIgMS45bC4xIC41em0tNzEuOCA2Ny41YzE3LS45IDM2LjQtNy42IDM5LjctNDguOC04LjgtMS45LTE4LjYtMi45LTI5LTIuOS0zLjIgMC02LjQgLjEtOS42IC4zLTI4LjYgMS42LTM4LjEgMTUuNS0zNy40IDI3LjkgLjkgMTYuNyAxOSAyNC41IDM2LjQgMjMuNmwtLjEtLjF6Il0KICAgIH07CiAgICBmYU9sZFJlcHVibGljID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm9sZC1yZXB1YmxpYyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTEwIiwgIk0yNDMuOCAxMC4yYzcuNS0uMyAxNS0uMyAyMi41LS4xIDMuNiAuMSA3LjIgLjQgMTAuOCAuNyA0LjkgLjMgOS44IDEgMTQuNyAxLjYgMi45IC40IDUuOCAxIDguNyAxLjUgNy45IDEuMyAxNS43IDMuMyAyMy40IDUuNCAxMi4yIDMuNSAyNC4yIDcuOSAzNS44IDEzLjIgMjYuNiAxMi4yIDUwLjkgMjkuMiA3MS42IDQ5LjkgMjAgMjAuMSAzNi43IDQzLjUgNDguOSA2OS4yIDEuMSAyLjYgMi40IDUuMSAzLjUgNy43IDIuOCA2LjQgNS40IDEzIDcuNiAxOS42IDQuMSAxMi4zIDcuMyAyNSA5LjQgMzcuOCAuNiAzLjEgMSA2LjMgMS40IDkuNSAuNSAzLjggLjkgNy43IDEuMiAxMS42IC44IDguMyAuOCAxNi43IC44IDI1LjEtLjEgNS0uMyA5LjktLjcgMTQuOS0uMiAzLjQtLjUgNi44LTEgMTAuMS0uNCAyLjctLjYgNS41LTEuMSA4LjItLjkgNS4xLTEuNyAxMC4zLTIuOSAxNS40LTQuMSAxOC41LTEwLjMgMzYuNi0xOC41IDUzLjYtMTUuOCAzMi44LTM4LjggNjIuMi02Ny4xIDg1LjEtMTcuMyAxNC4xLTM2LjQgMjUuOS01Ni45IDM0LjktNi4yIDIuNy0xMi41IDUuMy0xOC45IDcuNC0zLjUgMS4yLTcgMi40LTEwLjYgMy40LTYuNiAxLjktMTMuMyAzLjYtMjAgNS00LjcgLjktOS4zIDEuNy0xNCAyLjUtNS4zIC43LTEwLjUgMS40LTE1LjggMS43LTYuNyAuNy0xMy40IC44LTIwLjEgLjgtNi44IDAtMTMuNi0uMS0yMC40LS44LTMuMy0uMi02LjYtLjUtOS44LTEtMi43LS40LTUuNS0uNi04LjItMS4xLTQuMS0uNy04LjItMS40LTEyLjQtMi4yLTQuMi0uOS04LjUtMS45LTEyLjctMy04LjYtMi4yLTE3LjEtNS0yNS40LTguMS0xMC41LTQuMS0yMC44LTguNy0zMC42LTE0LjItMi4xLTEuMi00LjMtMi4zLTYuNC0zLjYtMTEuMi02LjYtMjEuOS0xNC4xLTMxLjktMjIuMy0zNC43LTI4LjQtNjEuNC02Ni40LTc2LjQtMTA4LjctMy4xLTguNy01LjctMTcuNi03LjgtMjYuNy0xLjUtNi4yLTIuNS0xMi40LTMuNi0xOC43LS40LTIuMy0uNi00LjctMS03LjEtLjYtNC0uOC04LTEuMi0xMS45LS44LTkuNS0uNy0xOS0uNS0yOC41IC4xLTMuNSAuMy03IC43LTEwLjUgLjMtMy4yIC41LTYuNCAuOS05LjUgLjQtMi44IC43LTUuNiAxLjItOC40IC43LTMuOSAxLjMtNy45IDIuMS0xMS44IDMuNC0xNi41IDguNS0zMi43IDE1LjMtNDguMiAxLjItMi45IDIuNi01LjcgMy45LTguNiA4LjEtMTYuNyAxNy45LTMyLjYgMjkuNS00Ny4xIDIwLTI1LjQgNDUuMS00Ni43IDczLjMtNjIuNSA3LjUtNC4yIDE1LjItOCAyMy4xLTExLjQgMTUuOC02LjkgMzIuNC0xMiA0OS4zLTE1LjQgMy41LS43IDctMS4yIDEwLjYtMS44IDIuNi0uNSA1LjMtLjcgNy45LTEuMSAzLjUtLjUgNy4xLS43IDEwLjYtMSAyLjUtLjIgNC45LS40IDcuNC0uNXptOC42IDI0LjRjLTkuMiAuMS0xOC40IDEtMjcuNiAyLjItNy4zIDEuMS0xNC41IDIuNi0yMS43IDQuMy0xMy45IDMuNS0yNy41IDguMy00MC41IDE0LjQtMTAuNSA1LTIwLjYgMTAuNy0zMC4yIDE3LjItNC4yIDIuOS04LjQgNS44LTEyLjMgOS01LjEgNC0xMCA4LjItMTQuNyAxMi42LTIuNSAyLjItNC44IDQuNy03LjIgNy4xLTI4LjIgMjguOC00OC40IDY1LjQtNTcuNSAxMDQuNy0yIDguNC0zLjUgMTctNC40IDI1LjYtMS4xIDguOS0xLjQgMTcuOS0xLjQgMjYuOCAuMSA3LjEgLjQgMTQuMyAxLjIgMjEuNCAuNiA3LjEgMS45IDE0LjIgMy4yIDIxLjIgMS4xIDQuNiAyIDkuMyAzLjMgMTMuOSA2LjMgMjMuNCAxNi41IDQ1LjcgMzAuMSA2NS44IDguNiAxMyAxOC44IDI0LjkgMzAgMzUuOCAxNi4zIDE1LjggMzUgMjkgNTUuMyAzOS4yIDcuMyAzLjUgMTQuNyA2LjkgMjIuMyA5LjYgNSAxLjggMTAuMSAzLjYgMTUuMiA1IDExLjMgMy4yIDIyLjggNS42IDM0LjQgNy4xIDIuOSAuMyA1LjggLjYgOC43IC45IDEzLjggMS4xIDI3LjcgMSA0MS41LS40IDQuNC0uNiA4LjktMSAxMy4zLTEuOCAzLjYtLjcgNy4zLTEuMiAxMC45LTIuMSA0LjEtMSA4LjMtMS45IDEyLjQtMy4xIDI2LjUtNy4zIDUxLjYtMTkuNyA3My42LTM2LjIgMTUuOC0xMS44IDMwLTI1LjggNDIuMS00MS4zIDMuMy00IDYuMi04LjMgOS4xLTEyLjYgMy40LTUuMSA2LjYtMTAuMiA5LjYtMTUuNSAyLjQtNC40IDQuNy04LjkgNy0xMy40IDUuNy0xMi4xIDEwLjMtMjQuNiAxMy44LTM3LjUgMi42LTEwIDQuNy0yMC4yIDUuOS0zMC40IDEuOC0xMy41IDEuOS0yNy4xIDEuMy00MC43LS4zLTMuOS0uNy03LjgtMS0xMS43LTIuMi0xOS4xLTYuOC0zNy45LTEzLjgtNTUuOC02LTE1LjEtMTMuNS0yOS42LTIyLjYtNDMuMS0xMi43LTE4LjgtMjguMi0zNS43LTQ2LTQ5LjgtMjUtMjAtNTQuNS0zNC41LTg1LjYtNDIuMS03LjgtMS45LTE1LjctMy4zLTIzLjYtNC40LTMuOS0uNi03LjgtLjgtMTEuOC0xLjItNy40LS42LTE0LjgtLjctMjIuMi0uNnpNMTQ3LjMgODMuNWMxMy4zLTguOSAyOC4xLTE1LjQgNDMuMy0yMC4yLTMuMiAxLjgtNi40IDMuNC05LjUgNS4zLTExLjIgNi43LTIxLjUgMTQuOS0zMC40IDI0LjUtNi44IDcuNC0xMi44IDE1LjctMTcgMjQuOS0zLjMgNi45LTUuNiAxNC4yLTYuOSAyMS43LS45IDQuOC0xLjMgOS44LTEuMiAxNC44IC4xIDEzLjcgNC40IDI3LjEgMTEuMyAzOC44IDUuOSAxMC4yIDEzLjYgMTkuMyAyMi40IDI3LjMgNC45IDQuNCAxMC4yIDguMSAxNSAxMi42IDIuMyAyLjIgNC41IDQuNCA2LjQgNi45IDIuNiAzLjMgNC45IDcgNiAxMS4xIC45IDMgLjcgNi4yIC43IDkuMyAwIDQuMSAwIDguMiAwIDEyLjMgLjEgMy41IDAgNy4xIC4xIDEwLjYgLjEgMi40IDAgNC44IC4xIDcuMSAuMiA1LjggLjEgMTEuNSAuMSAxNy4zIC4xIDIuOSAwIDUuOCAuMSA4LjcgMCAxLjYgLjEgMy4zIDAgNC45LS45IC4xLTEuOCAuMi0yLjcgLjItMTEgMC0yMS45LTIuNi0zMi02LjktNi0yLjctMTEuOC01LjktMTcuMS05LjgtNS44LTQuMi0xMS4xLTktMTUuOC0xNC4zLTYuNS03LjItMTItMTUuNC0xNi42LTIzLjktMS4xLTItMi4yLTQtMy4yLTYuMS0xLjItMi42LTIuNi01LjEtMy43LTcuOC00LTkuNy02LjYtMTkuOS04LjEtMzAuMy0uNS00LjQtMS4xLTguOS0xLjItMTMuMy0uNy0xNS43IC44LTMxLjYgNC43LTQ2LjggMi4xLTguMiA0LjgtMTYuMiA4LjMtMjMuOCA2LjMtMTQuMiAxNS4zLTI3LjIgMjYuMy0zOC4yIDYuMy02LjIgMTMuMS0xMS44IDIwLjUtMTYuN3pNMzIyLjcgNjMuNGMyLjcgLjcgNS40IDEuNyA4LjEgMi43IDYuNCAyLjMgMTIuNyA0LjggMTguNyA4IDEzLjEgNi40IDI1LjMgMTQuOCAzNS44IDI1IDEwLjIgMTAgMTguNyAyMS42IDI1LjEgMzQuMyAxLjMgMi43IDIuNiA1LjUgMy44IDguMyA2LjMgMTUuMSAxMCAzMS4zIDExLjIgNDcuNiAuNCA0LjUgLjQgOS4xIC41IDEzLjYgLjEgMTEuNi0xLjUgMjMuMy00LjMgMzQuNS0yIDcuMy00LjMgMTQuNS03LjkgMjEuMi0zLjIgNi42LTYuNyAxMy4yLTEwLjggMTkuMi02LjkgMTAuNS0xNS42IDE5LjktMjUuOCAyNy4yLTEwLjUgNy42LTIyLjYgMTMtMzUuNCAxNS40LTMuNSAuNy03LjEgMS4xLTEwLjcgMS4yLTEuOCAuMS0zLjcgLjItNS42LS4xLS4zLTIuMSAwLTQuMyAwLTYuNSAwLTMuNyAuMS03LjQgLjEtMTEuMiAuMi03IDAtMTQuMSAuMi0yMS4xIDAtMi40IDAtNC44IDAtNy4xIC4yLTUuMSAwLTEwLjEgLjEtMTUuMiAuMS0zLS4yLTYgLjUtOSAuNy0yLjUgMS44LTQuOSAzLjEtNy4xIDQuNS03LjMgMTEuMS0xMyAxNy43LTE4LjMgNS40LTQuMiAxMC41LTguOCAxNS0xMy44IDcuNy04LjQgMTQuMi0xNy45IDE4LjgtMjguMyAyLjUtNS45IDQuNS0xMi4xIDUuNS0xOC41IC45LTQuNCAxLjEtOC44IDEtMTMuMyAwLTcuOC0xLjQtMTUuNi0zLjYtMjMuMi0xLjgtNS43LTQuMy0xMS4yLTcuMS0xNi40LTMuOS02LjktOC42LTEzLjMtMTQtMTkuMi05LjktMTAuOC0yMS44LTE5LjktMzQuNi0yNy4xLTEuOC0xLTMuOC0xLjgtNS42LTN6TTIyMS45IDEyMS45YzEtMS4yIDItMi4zIDMuMS0zLjQtLjYgLjktMS4zIDEuOC0yIDIuNy0zLjEgMy45LTUuNSA4LjMtNyAxMy4xLS45IDMuMy0xLjcgNi42LTEuNyAxMC0uMSAyLjUtLjEgNS4xIC4zIDcuNiAxLjEgNy42IDQuMyAxNC45IDguOCAyMS4xIDIgMi43IDQuMiA1LjMgNi45IDcuMyAxLjYgMS4zIDMuNSAyLjEgNS4zIDMgMy4xIDEuNyA2LjMgMy4yIDkuMSA1LjUgMi43IDIuMSA0LjYgNS4zIDQuNCA4LjggMCA3My43IDAgMTQ3LjMgMCAyMjEgMCAxLjQtLjEgMi43IDAgNCAuMSAxLjUgLjggMi44IDEuNSA0LjEgLjkgMS43IDEuOCAzLjMgMy4yIDQuNiAuOSAuOCAyIDEuNCAzLjIgMS4yIDEuNS0uMiAyLjctMS40IDMuNC0yLjYgMS0xLjUgMS43LTMuMiAyLjMtNC45IC44LTIuMSAuNC00LjQgLjUtNi42IC4xLTQgMC04LjEgLjEtMTIuMSAwLTUuOSAwLTExLjggLjEtMTcuNyAuMS0zLjYgMC03LjIgLjEtMTAuOSAuMi00IDAtOC4xIC4xLTEyLjEgMC02IDAtMTIgLjEtMTggLjEtMy42IDAtNy4yIC4xLTEwLjkgLjEtMy45IDAtNy45IC4xLTExLjggMC02IDAtMTIgLjEtMTggLjItMy45IDAtNy45IC4yLTExLjggLjMgMS40IC4xIDIuOSAuMiA0LjQgLjIgMy42IC40IDcuMiAuOCAxMC44IC4zIDMuNCAuNCA2LjkgLjkgMTAuMyAuNCAzLjEgLjUgNi4yIDEgOS4zIC42IDQuMSAuOSA4LjIgMS41IDEyLjMgMS41IDkgMi44IDE4LjEgNS4xIDI3IDEuMSA0LjggMi40IDkuNiA0IDE0LjMgMi41IDcuOSA1LjcgMTUuNyAxMC4zIDIyLjYgMS43IDIuNiAzLjkgNSA2LjEgNy4yIC4zIC4yIC42IC41IC45IC43IC42IC4zIDEuMy0uMSAxLjctLjYgLjctLjkgMS4yLTEuOSAxLjctMi45IDQuMS03LjggOC4yLTE1LjYgMTIuMy0yMy4zIC43LTEuMyAxLjQtMi42IDIuNi0zLjYgMS44LTEuNiAzLjgtMi43IDYtMy42IDIuOS0xLjIgNS45LTIuMiA5LTIuNCA2LjYtLjYgMTMuMSAuNyAxOS42IDEuOCAzLjcgLjYgNy40IDEuMiAxMS4xIDEuNCAzLjcgLjEgNy41IC4xIDExLjItLjMgOC42LS45IDE3LTMgMjQuOS02LjIgNS4zLTIuMiAxMC41LTQuOCAxNS4zLTcuOSAxMS41LTcuMiAyMS41LTE2LjYgMzAtMjcgMS4yLTEuNCAyLjItMi45IDMuNS00LjMtMS4yIDMuMi0yLjcgNi40LTQuMiA5LjUtMS4zIDIuOS0yLjggNS42LTQuMyA4LjQtNS4yIDkuNi0xMSAxOC45LTE3LjggMjcuNS00IDUuMi04LjUgMTAuMS0xMy4zIDE0LjYtNi42IDYuMS0xNC4xIDExLjQtMjIuNCAxNC44LTguMiAzLjQtMTcuMyA0LjYtMjYuMSAzLjMtMy42LS42LTctMS43LTEwLjQtMi45LTIuOC0xLTUuNC0yLjQtOC0zLjctMy40LTEuNy02LjYtMy44LTkuNy02LjEgMi43IDMuMSA1LjcgNS45IDguNyA4LjYgNC4zIDMuOCA4LjcgNy4zIDEzLjYgMTAuMiA0IDIuNSA4LjMgNC40IDEyLjggNS41IDEuNSAuNCAzIC41IDQuNSAuNi0xLjMgMS4xLTIuNiAyLTQgMy05LjYgNi41LTIwIDExLjktMzAuNyAxNi40LTIwLjkgOC43LTQzLjIgMTQtNjUuNyAxNS4zLTQuNyAuMi05LjMgLjQtMTQgLjQtNS0uMS0xMC0uMS0xNC45LS43LTExLjItLjgtMjIuMy0yLjctMzMuMi01LjQtMTAuNC0yLjctMjAuNi02LjEtMzAuMy0xMC42LTguNy0zLjktMTcuMS04LjQtMjUtMTMuOC0xLjgtMS4zLTMuNy0yLjUtNS40LTQuMSA2LjYtMS4yIDEzLTMuNCAxOS02LjUgNS43LTIuOSAxMS02LjcgMTUuNi0xMS4xIDIuMi0yLjIgNC4zLTQuNiA2LjItNy4xLTMuNCAyLjEtNi45IDQuMi0xMC42IDUuOC00LjQgMi4yLTkuMSAzLjgtMTMuOCA1LTUuNyAxLjUtMTEuNyAxLjctMTcuNiAxLjEtOC4xLTEtMTUuOS00LjMtMjIuNS05LTQuMy0yLjktOC4yLTYuNC0xMi0xMC4xLTkuOS0xMC4yLTE4LjItMjEuOC0yNS43LTMzLjktMy45LTYuMy03LjUtMTIuNy0xMS4xLTE5LjItMS0yLTIuMS00LjEtMy4yLTYuMSAyLjggMi45IDUuNiA2IDguNCA4LjkgMTkuMiAxOS4yIDM3LjYgMzIuMyA1My43IDM1LjUgMy4xIC43IDYuMyAuNSA5LjUgLjggMi44IC4zIDUuNiAuMiA4LjMgLjMgNSAuMSAxMC4xIDAgMTUuMi0uMiAzLjYtLjIgNy4zLS43IDEwLjktMS4xIDIuMS0uMiA0LjEtLjcgNi4xLTEuMiAzLjktMSA4LjEtMSAxMS44IC42IDQuOCAxLjggOC40IDUuNiAxMS40IDkuNyAyLjIgMyA0LjEgNi4yIDUuNyA5LjYgMS4yIDIuNCAyLjUgNC44IDMuNiA3LjMgMSAyLjIgMi4yIDQuNCAzLjQgNi41IC43IDEgMS40IDIuMiAyLjYgMi42IDEuMS0uOCAxLjctMS45IDIuMy0zIDIuMS00LjIgMy40LTguNiA0LjktMTMgMi02LjYgMy44LTEzLjMgNS4yLTIwIDIuMi05LjMgMy4yLTE4LjcgNC41LTI4LjEgLjYtNCAuOC04IDEuMy0xMiAuOS0xMC42IDEuOS0yMS4zIDIuMi0zMS45IC4xLTEuOSAuMi0zLjcgLjMtNS42IDAtNC4zIC4yLTguNyAuMi0xMyAwLTIuNCAwLTQuOCAwLTcuMSAwLTUuMS0uMi0xMC4xLS4yLTE1LjItLjItNi42LS43LTEzLjItMS4zLTE5LjgtLjctNS45LTEuNS0xMS44LTMuMS0xNy41LTItNy43LTUuNi0xNS05LjgtMjEuOC0zLjItNS4xLTYuOC05LjktMTEuMS0xNC0zLjktMy45LTguNi03LjEtMTMuOS04LjQtMS41LS40LTMuMS0uNC00LjYtLjYgLjEtMyAuNy01LjkgMS4zLTguOCAxLjYtNy43IDMuOC0xNS4zIDYuOC0yMi42IDEuNS00IDMuNC03LjkgNS40LTExLjcgMy40LTYuNiA3LjYtMTIuOCAxMi41LTE4LjV6bTMxLjMgMS43Yy40LS4xIC43LS4xIDEuMS0uMiAuMiAxLjggLjEgMy42IC4xIDUuNGwwIDM4LjFjMCAxLjcgLjEgMy41LS4yIDUuMi0uNCAwLS43IDAtMS4xIDAtLjktMy44LTEuNy03LjYtMi42LTExLjMtLjQtMS41LS42LTMuMS0xLjEtNC42LTEuNy0uMi0zLjQtLjItNS4yLS4yLTUuMSAwLTEwLjEgMC0xNS4yIDAtMS43IDAtMy4zIC4xLTUgMCAwLS40LS4zLS45IC4yLTEuMiAxLjMtLjcgMi43LS45IDQuMS0xLjQgMy40LTEuMSA2LjktMi4yIDEwLjMtMy4zIDEuNC0uNSAyLjktLjcgNC4yLTEuNSAwLS42IDAtMS4xIDAtMS43LTEuMi0uNi0yLjUtLjktMy44LTEuMy0zLjEtMS02LjMtMi05LjQtMy0xLjgtLjYtMy43LTEtNS40LTEuOCAwLS40LS4xLS43LS4xLTEuMSA1LjEtLjIgMTAuMiAuMSAxNS4zLS4xIDMuNC0uMSA2LjcgLjEgMTAuMS0uMSAuMS0uNCAuMy0uOCAuNC0xLjIgMS4xLTQuOSAyLjMtOS44IDMuNC0xNC43em02LS4yYy40IDAgLjcgLjEgMS4xIC4yIDEgMy44IDEuNyA3LjggMi43IDExLjYgLjQgMS40IC42IDIuOSAxIDQuMyAyLjUgLjIgNS4xIDAgNy42IDAgNS4yIC4xIDEwLjMgLjEgMTUuNSAuMSAuOCAwIDEuNSAwIDIuMyAuMSAwIC40LS4xIC43LS4xIDEuMS0xLjggLjgtMy44IDEuMi01LjcgMS45LTMuNyAxLjItNy41IDIuNC0xMS4yIDMuNi0uNiAuMi0xLjEgLjQtMS43IC42LS4yIC42LS4yIDEuMS0uMSAxLjcgLjkgLjUgMS44IC44IDIuOCAxLjEgNC45IDEuNSA5LjcgMy4xIDE0LjYgNC42IC40IC4xIC44IC4zIDEuMSAuNSAuNCAuMyAuMiAuOCAuMiAxLjItMS43IC4xLTMuMyAwLTUgMC01LjIgMC0xMC4zIDAtMTUuNSAwLTEuNiAwLTMuMiAwLTQuOCAuMi0uNSAxLjctLjcgMy40LTEuMiA1LjEtLjkgMy42LTEuNSA3LjItMi41IDEwLjgtLjQgMC0uNyAwLTEuMSAuMS0uMy0xLjctLjItMy41LS4yLTUuMmwwLTM4LjFjMC0xLjgtLjEtMy42IC4xLTUuNHptLTE4NiA0NWMxLjEtMi4yIDIuMS00LjQgMy40LTYuNS0xLjggNy42LTIuOSAxNS4zLTMuNiAyMy0uOCA3LjctLjggMTUuNS0uNSAyMy4yIDEuMSAxOS45IDUuNSAzOS44IDE0LjIgNTcuOSAzIDYgNi40IDExLjggMTAuNSAxNy4xIDYuMSA3LjUgMTIuNSAxNC44IDE5LjggMjEuMSA0LjggNC4xIDEwIDcuOCAxNS41IDEwLjggMy4zIDEuNyA2LjUgMy40IDkuOSA0LjcgNSAyIDEwLjIgMy42IDE1LjQgNC45IDMuOCAxIDcuOCAxLjQgMTEuNSAyLjcgNSAxLjYgOS41IDQuNiAxMyA4LjQgNC45IDUuMiA4LjEgMTEuOSAxMC4yIDE4LjcgMSAyLjkgMS42IDUuOSAyLjIgOC45IC4yIC44IC4yIDEuNSAuMiAyLjMtNi41IDIuOC0xMy4zIDUuMS0yMC4zIDYuMi00LjEgLjgtOC4zIDEtMTIuNSAxLjEtMTAuMiAuMi0yMC41LTEuOC0zMC4xLTUuMS0zLjctMS40LTcuNS0yLjktMTEtNC43LTguMS0zLjgtMTUuNi04LjctMjIuNS0xNC41LTIuOS0yLjYtNS44LTUuMS04LjQtOC05LjItOS44LTE2LjMtMjEuNC0yMS44LTMzLjctMi40LTUuNS00LjYtMTEuMi02LjQtMTctMS4yLTMuOS0yLjQtNy45LTMuMy0xMS45LS43LTIuOS0xLjItNS45LTEuOS04LjktLjUtMi4xLS43LTQuMy0xLTYuNS0uOC01LjQtMS4zLTEwLjktMS4zLTE2LjQgLjEtNi4yIC4yLTEyLjQgMS4xLTE4LjUgLjQtMi45IC43LTUuNyAxLjItOC42IDEtNS43IDIuMS0xMS40IDMuNy0xNi45IDMuMS0xMS42IDcuNS0yMyAxMi43LTMzLjh6bTM2My43LTYuNGMxLjEgMS43IDEuOSAzLjUgMi44IDUuMyAyLjEgNC41IDQuMiA4LjkgNiAxMy41IDcuNiAxOC44IDEyLjMgMzguOCAxMyA1OSAwIDEuOCAuMSAzLjUgLjEgNS4zIC4xIDkuNi0xLjMgMTkuMS0zLjIgMjguNS0uNyAzLjYtMS41IDcuMi0yLjYgMTAuNy00IDE0LjctMTAgMjktMTguNCA0MS44LTguMiAxMi42LTE5IDIzLjUtMzEuOCAzMS40LTUuNyAzLjYtMTEuOCA2LjYtMTggOS4yLTUuOCAyLjItMTEuNyA0LTE3LjggNS4xLTYuNCAxLTEyLjkgMS41LTE5LjQgMS4yLTcuOS0uNS0xNS44LTIuMS0yMy4yLTQuOC0xLjktLjgtMy45LTEuNS01LjgtMi4zLS4yLTEuNSAuMi0zIC41LTQuNSAxLjItNS43IDMtMTEuNCA1LjctMTYuNiAyLjQtNC41IDUuNS04LjcgOS41LTExLjkgMi40LTIuMSA1LjItMy42IDguMi00LjggMy42LTEuNSA3LjUtMiAxMS4yLTIuOCA3LjItMS43IDE0LjQtMy45IDIxLjItNyAxMC4zLTQuNyAxOS43LTExLjQgMjcuNi0xOS41IDEuNi0xLjYgMy4yLTMuMiA0LjctNC45IDMuNC0zLjggNi43LTcuNiA5LjgtMTEuNSA3LjUtMTAuMSAxMi44LTIxLjYgMTYuNy0zMy41IDEuNi01LjMgMy4yLTEwLjYgNC4yLTE2LjEgLjYtMi45IDEtNS44IDEuNS04LjcgLjktNi4xIDEuNi0xMi4yIDEuNy0xOC40IC4xLTYuNiAuMS0xMy4zLS41LTE5LjktLjctOC0xLjktMTYtMy43LTIzLjh6Il0KICAgIH07CiAgICBmYVN1c2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3VzZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmN2Q2IiwgIk02MDQuNSAyMTBhMTAuNCAxMC40IDAgMSAxIC0xMS40LTE3LjQgMTAuNCAxMC40IDAgMSAxIDExLjQgMTcuNHpNNjIxIDE4Ny4yYTM4LjUgMzguNSAwIDEgMSAtNzUgMTcuNiAzOC41IDM4LjUgMCAxIDEgNzUtMTcuNnpNNDMzLjcgMzM2LjdjMy4yIDQuNiA1LjggOSA3LjMgMTMuNCAxIDMuMSAyLjQgNy4zIDUuNSA4LjkgLjIgLjEgLjMgLjIgLjUgLjIgNS43IDIuMSAyMC4zIDEuNyAyMC4zIDEuN2wyNi44IDBjMi4zIDAgMjIuNCAwIDIxLjktMi4zLTIuNC0xMC44LTE0LjktMTIuNy0yNC40LTE4LjMtOC43LTUuMi0xNy0xMS4xLTIwLjgtMjEuMy0yLTUuMi0uOC0xNy40IDIuNi0yMS44IDIuNS0zLjIgNi4xLTUuMyAxMC02LjIgNC4zLS45IDguOC0uMSAxMy4xIC4zIDUuMyAuNSAxMC42IDEuNSAxNS45IDIuMiAxMC4zIDEuMyAyMC42IDEuOSAzMSAxLjYgMTcuMS0uNSAzNC4yLTMuMiA1MC40LTguNyAxMS4zLTMuOCAyMi40LTguOSAzMi0xNi4xIDEwLjktOC4xIDguMS03LjQtMy02LjItMTMuMyAxLjQtMjYuNiAxLjYtMzkuOSAuOC0xMi40LS43LTI0LjctMi4yLTM1LjktNy45LTguOC00LjYtMTYuNC05LjEtMjMuNC0xNi4yLTEtMS4xLTEuNy00LjIgLjItNi4yIDEuOS0xLjkgNS44LS44IDcgLjIgMTIuMiAxMC4yIDMwLjUgMTguNiA0OS4zIDE5LjUgMTAuMiAuNSAyMC4xIC43IDMwLjQgLjMgNS4xLS4yIDEyLjgtLjIgMTcuOS0uMyAyLjYgMCA5LjggLjcgMTEuMi0yLjEgLjQtLjggLjQtMS44IC4zLTIuNy0xLjUtNDAuOS00LjUtODYuOS00Ny4zLTEwNi41LTMxLjktMTQuNi03OS43LTM3LjItOTkuOS00Ni42LTQuNy0yLjItMTAuMiAxLjMtMTAuMiA2LjUgMCAxMy42IC43IDMzLjMgLjcgNTEuMS05LjctOS45LTI2LTE2LjEtMzguNC0yMS44LTE0LjEtNi41LTI4LjctMTItNDMuNS0xNi42LTI5LjgtOS4yLTYwLjctMTQuOS05MS43LTE4LTM1LjItMy41LTcxLTEuOC0xMDUuNyA1LjMtNTYuOSAxMi4yLTExMy4xIDM5LjctMTU1LjcgNzkuOC0yNi4xIDI0LjYtNDYuNiA1OS43LTQ4IDk1LjItMiA1MC4zIDEyLjEgNzcuMyAzOCAxMDUuMiA0MS4zIDQ0LjQgMTMwLjIgNTAuNiAxNjYuMi0yIDE2LjItMjMuNyAxOS43LTU1LjggOC04Mi0xMS44LTI2LjItMzguOC00NS4xLTY3LjQtNDYtMjIuMi0uNy00NS45IDEwLjYtNTQuNSAzMS4xLTYuNSAxNS43LTIuOCAzNS4xIDkgNDcuMyA0LjYgNC44IDEwLjkgOC43IDE3LjcgNy4xIDQtLjkgNy40LTMuOSA4LTggLjktNi00LjQtOS45LTcuNi0xNC41LTUuOC04LjMtNC43LTIwLjkgMi43LTI3LjkgNi4yLTYgMTUuMy03LjggMjMuOS03LjcgOCAwIDE2LjIgMS40IDIzLjEgNS41IDkuNyA1LjcgMTYuMiAxNi4yIDE4LjQgMjcuMiA2LjcgMzMtMjAuMiA1OS45LTU2LjYgNjItMTguNiAxLjEtMzcuNi0zLjgtNTIuMS0xNS41LTM2LjktMjkuOC00NS45LTkwLjMtMy44LTEyMi43IDQwLTMwLjcgOTAuNC0yMi44IDEyMC4yLTYuOCAyMy44IDEyLjggNDEuNSAzMy42IDU1IDU2LjcgNi43IDExLjYgMTIuNSAyMy43IDE3LjggMzYuMSA1LjEgMTEuOCA5LjkgMjMuOCAyMC4yIDMyLjUgNi44IDUuOCAxNS4yIDUuNiAyNC4xIDUuNmw1MC44IDBjNi45IDAgNS4yLTQuNiAyLjItNy43LTYuNy02LjktMTYuNC04LjQtMjUuNC0xMC45LTIwLjUtNS42LTE4LjQtMzIuOC0xMi43LTMyLjggMTguMyAwIDE4LjkgLjYgMzQuOSAuMyAyMy4yLS4zIDMwLjItMS43IDQ4LjMgNSA5LjcgMy42IDE5IDEzLjEgMjUuMSAyMS43eiJdCiAgICB9OwogICAgZmFBcHBTdG9yZUlvcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhcHAtc3RvcmUtaW9zIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzNzAiLCAiTTQwMCAzMkw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDM1MiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0xMjcgMzg0LjVjLTUuNSA5LjYtMTcuOCAxMi44LTI3LjMgNy4zLTkuNi01LjUtMTIuOC0xNy44LTcuMy0yNy4zbDE0LjMtMjQuN2MxNi4xLTQuOSAyOS4zLTEuMSAzOS42IDExLjRMMTI3IDM4NC41em0xMzguOS01My45TDg0IDMzMC42Yy0xMSAwLTIwLTktMjAtMjBzOS0yMCAyMC0yMGw1MSAwIDY1LjQtMTEzLjItMjAuNS0zNS40Yy01LjUtOS42LTIuMi0yMS44IDcuMy0yNy4zIDkuNi01LjUgMjEuOC0yLjIgMjcuMyA3LjNsOC45IDE1LjQgOC45LTE1LjRjNS41LTkuNiAxNy44LTEyLjggMjcuMy03LjMgOS42IDUuNSAxMi44IDE3LjggNy4zIDI3LjNsLTg1LjggMTQ4LjYgNjIuMSAwYzIwLjIgMCAzMS41IDIzLjcgMjIuNyA0MHptOTguMSAwbC0yOSAwIDE5LjYgMzMuOWM1LjUgOS42IDIuMiAyMS44LTcuMyAyNy4zLTkuNiA1LjUtMjEuOCAyLjItMjcuMy03LjMtMzIuOS01Ni45LTU3LjUtOTkuNy03NC0xMjguMS0xNi43LTI5LTQuOC01OCA3LjEtNjcuOCAxMy4xIDIyLjcgMzIuNyA1Ni43IDU4LjkgMTAybDUyIDBjMTEgMCAyMCA5IDIwIDIwIDAgMTEuMS05IDIwLTIwIDIweiJdCiAgICB9OwogICAgZmFTcXVhcmVEcmliYmJsZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZHJpYmJibGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZHJpYmJibGUtc3F1YXJlIl0sICJmMzk3IiwgIk0xNjUuOSAxMzIuNWMtMzguMyAxOC02Ni44IDUzLjMtNzUuNyA5NS43IDYuMSAuMSA2Mi40IC4zIDEyNi40LTE2LjctMjIuNy00MC4yLTQ3LjEtNzQuMS01MC43LTc5em0yNi4xLTkuMWMzLjggNS4xIDI4LjYgMzguOSA1MSA4MCA0OC42LTE4LjMgNjkuMS00NS45IDcxLjYtNDkuNC0zMy42LTI5LjgtNzkuMy00MS4xLTEyMi42LTMwLjZ6TTI3Ny40IDM4MmMtMi0xMi0xMC01My44LTI5LjItMTAzLjYtNTUuMSAxOC44LTkzLjggNTYuNC0xMDguMSA4NS42IDQwLjUgMzEuNiA5My4zIDM2LjcgMTM3LjMgMTh6TTIyNy44IDIzMi42QzE1OS42IDI1MyA5My40IDI1Mi4yIDg3LjQgMjUybDAgNC4yYzAgMzUuMSAxMy4zIDY3LjEgMzUuMSA5MS40IDIyLjItMzcuOSA2Ny4xLTc3LjkgMTE2LjUtOTEuOC0zLjQtNy44LTcuMi0xNS41LTExLjEtMjMuMmwtLjEgMHptNzIuNSAxMzYuOWMzMC43LTIwLjcgNTIuNS01My42IDU4LjYtOTEuNi00LjYtMS41LTQyLjMtMTIuNy04NS4xLTUuOCAxNy45IDQ5LjEgMjUuMSA4OS4xIDI2LjUgOTcuNHptLTM0LjgtMTE5YzQ1LjUtNS43IDkwLjcgMy40IDk1LjIgNC40LS4zLTMyLjMtMTEuOC02MS45LTMwLjktODUuMS0yLjkgMy45LTI1LjggMzMuMi03Ni4zIDUzLjkgNC44IDkuOCA4LjMgMTcuOCAxMiAyNi44ek0zODQgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NHpNMjI0IDk2YTE2MCAxNjAgMCAxIDEgMCAzMjAgMTYwIDE2MCAwIDEgMSAwLTMyMHoiXQogICAgfTsKICAgIGZhRHJpYmJibGVTcXVhcmUgPSBmYVNxdWFyZURyaWJiYmxlOwogICAgZmFVaWtpdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1aWtpdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDAzIiwgIk00NDMuOSAxMjhsMCAyNTYtMjI1LjkgMTI4LTIxOC0xMjggMC0yMTQuMyA4Ny42IDQ1LjEgMCAxMTcgMTMzLjUgNzUuNSAxMzUuOC03NS41IDAtMTUxLTEwMS4xLTU3LjYgODcuNi01My4xIDEwMC41IDU3Ljl6TTMwOC42IDQ5LjFsLTg0LjgtNDkuMS04OC42IDU0LjggODYgNDcuMyA4Ny40LTUzeiJdCiAgICB9OwogICAgZmFTdXBlcnBvd2VycyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdXBlcnBvd2VycyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmRkIiwgIk00NDggMzJjLTgzLjMgMTEtMTY2LjggMjItMjUwIDMzLTkyIDEyLjUtMTYzLjMgODYuNy0xNjkgMTgwLTMuMyA1NS41IDE4IDEwOS41IDU3LjggMTQ4LjJMMCA0ODBjODMuMy0xMSAxNjYuNS0yMiAyNDkuOC0zMyA5MS44LTEyLjUgMTYzLjMtODYuOCAxNjguNy0xNzkuOCAzLjUtNTUuNS0xOC0xMDkuNS01Ny43LTE0OC4yTDQ0OCAzMnpNMzY4LjMgMjY0LjNjLTQuMiA3OS41LTc0IDEzOS4yLTE1Mi44IDEzNC41LTc5LjUtNC43LTE0MC43LTcxLTEzNi4zLTE1MSA0LjUtNzkuMiA3NC4zLTEzOS4zIDE1My0xMzQuNSA3OS4zIDQuNyAxNDAuNSA3MSAxMzYuMSAxNTF6Il0KICAgIH07CiAgICBmYVlvdXR1YmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAieW91dHViZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYxODAyXSwgImYxNjciLCAiTTU0OS43IDEyNC4xQzU0My41IDEwMC40IDUyNC45IDgxLjggNTAxLjQgNzUuNSA0NTguOSA2NCAyODguMSA2NCAyODguMSA2NFMxMTcuMyA2NCA3NC43IDc1LjVDNTEuMiA4MS44IDMyLjcgMTAwLjQgMjYuNCAxMjQuMSAxNSAxNjcgMTUgMjU2LjQgMTUgMjU2LjRzMCA4OS40IDExLjQgMTMyLjNjNi4zIDIzLjYgMjQuOCA0MS41IDQ4LjMgNDcuOCA0Mi42IDExLjUgMjEzLjQgMTEuNSAyMTMuNCAxMS41czE3MC44IDAgMjEzLjQtMTEuNWMyMy41LTYuMyA0Mi0yNC4yIDQ4LjMtNDcuOCAxMS40LTQyLjkgMTEuNC0xMzIuMyAxMS40LTEzMi4zczAtODkuNC0xMS40LTEzMi4zek0yMzIuMiAzMzcuNmwwLTE2Mi40IDE0Mi43IDgxLjItMTQyLjcgODEuMnoiXQogICAgfTsKICAgIGZhRW1iZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZW1iZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQyMyIsICJNNjM5LjkgMjU0LjZjLTEuMS0xMC43LTEwLjctNi44LTEwLjctNi44cy0xNS42IDEyLjEtMjkuMyAxMC43Yy0xMy43LTEuMy05LjQtMzItOS40LTMyczMtMjguMS01LjEtMzAuNGMtOC4xLTIuNC0xOCA3LjMtMTggNy4zcy0xMi40IDEzLjctMTguMyAzMS4ybC0xLjYgLjVzMS45LTMwLjYtLjMtMzcuNmMtMS42LTMuNS0xNi40LTMuMi0xOC44IDNzLTE0LjIgNDkuMi0xNSA2Ny4yYzAgMC0yMy4xIDE5LjYtNDMuMyAyMi44cy0yNS05LjQtMjUtOS40IDU0LjgtMTUuMyA1Mi45LTU5LjEtNDQuMi0yNy42LTQ5LTI0Yy00LjYgMy41LTI5LjQgMTguNC0zNi42IDU5LjctLjIgMS40LS43IDcuNS0uNyA3LjVzLTIxLjIgMTQuMi0zMyAxOGMwIDAgMzMtNTUuNi03LjMtODAuOS0xMS40LTYuOC0yMS4zLS41LTI3LjIgNS4zIDEzLjYtMTcuMyA0Ni40LTY0LjIgMzYuOS0xMDUuMi01LjgtMjQuNC0xOC0yNy4xLTI5LjItMjMuMS0xNyA2LjctMjMuNSAxNi43LTIzLjUgMTYuN3MtMjIgMzItMjcuMSA3OS41LTEyLjYgMTA1LjEtMTIuNiAxMDUuMS0xMC41IDEwLjItMjAuMiAxMC43LTUuNC0yOC43LTUuNC0yOC43IDcuNS00NC42IDctNTIuMS0xLjEtMTEuNi05LjktMTQuMmMtOC45LTIuNy0xOC41IDguNi0xOC41IDguNnMtMjUuNSAzOC43LTI3LjcgNDQuNmwtMS4zIDIuNC0xLjMtMS42czE4LTUyLjcgLjgtNTMuNS0yOC41IDE4LjgtMjguNSAxOC44LTE5LjYgMzIuOC0yMC40IDM2LjVsLTEuMy0xLjZzOC4xLTM4LjIgNi40LTQ3LjZjLTEuNi05LjQtMTAuNS03LjUtMTAuNS03LjVzLTExLjMtMS4zLTE0LjIgNS45LTEzLjcgNTUuMy0xNSA3MC43YzAgMC0yOC4yIDIwLjItNDYuOCAyMC40LTE4LjUgLjMtMTYuNy0xMS44LTE2LjctMTEuOHM2OC0yMy4zIDQ5LjQtNjkuMmMtOC4zLTExLjgtMTgtMTUuNS0zMS43LTE1LjMtMTMuNyAuMy0zMC4zIDguNi00MS4zIDMzLjMtNS4zIDExLjgtNi44IDIzLTcuOCAzMS41IDAgMC0xMi4zIDIuNC0xOC44LTIuOXMtMTAgMC0xMCAwLTExLjIgMTQtLjEgMTguMyAyOC4xIDYuMSAyOC4xIDYuMWMxLjYgNy41IDYuMiAxOS41IDE5LjYgMjkuNyAyMC4yIDE1LjMgNTguOC0xLjMgNTguOC0xLjNsMTUuOS04LjhzLjUgMTQuNiAxMi4xIDE2LjcgMTYuNCAxIDM2LjUtNDcuOWMxMS44LTI1IDEyLjYtMjMuNiAxMi42LTIzLjZsMS4zLS4zcy05LjEgNDYuOC01LjYgNTkuN0MxODcuNyAzMTkuNCAyMDMgMzE4IDIwMyAzMThzOC4zIDIuNCAxNS0yMS4yIDE5LjYtNDkuOSAxOS42LTQ5LjlsMS42IDBzLTUuNiA0OC4xIDMgNjMuNyAzMC45IDUuMyAzMC45IDUuMyAxNS42LTcuOCAxOC0xMC4yYzAgMCAxOC41IDE1LjggNDQuNiAxMi45IDU4LjMtMTEuNSA3OS4xLTI1LjkgNzkuMS0yNS45czEwIDI0LjQgNDEuMSAyNi43YzM1LjUgMi43IDU0LjgtMTguNiA1NC44LTE4LjZzLS4zIDEzLjUgMTIuMSAxOC42IDIwLjctMjIuOCAyMC43LTIyLjhsMjAuNy01Ny4yIDEuOSAwczEuMSAzNy4zIDIxLjUgNDMuMiA0Ny0xMy43IDQ3LTEzLjcgNi40LTMuNSA1LjMtMTQuM3ptLTU3OCA1LjNjLjgtMzIgMjEuOC00NS45IDI5LTM5IDcuMyA3IDQuNiAyMi05LjEgMzEuNC0xMy43IDkuNS0xOS45IDcuNi0xOS45IDcuNnpNMzM0LjcgMTM2LjFzMTkuMS00OS43IDIzLjYtMjUuNS00MCA5Ni4yLTQwIDk2LjJjLjUtMTYuMiAxNi40LTcwLjcgMTYuNC03MC43em0yMi44IDEzOC40Yy0xMi42IDMzLTQzLjMgMTkuNi00My4zIDE5LjZzLTMuNS0xMS44IDYuNC00NC45IDMzLjMtMjAuMiAzMy4zLTIwLjIgMTYuMiAxMi40IDMuNiA0NS41em04NC42LTE0LjZzLTMtMTAuNSA4LjEtMzAuNmMxMS0yMC4yIDE5LjYtOS4xIDE5LjYtOS4xczkuNCAxMC4yLTEuMyAyNS41LTI2LjQgMTQuMi0yNi40IDE0LjJ6Il0KICAgIH07CiAgICBmYUJvb3RzdHJhcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJib290c3RyYXAiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjgzNiIsICJNMzMzLjUgMjAxLjRjMC0yMi4xLTE1LjYtMzQuMy00My0zNC4zbC01MC40IDAgMCA3MS4yIDQyLjUgMGMzMi44LS4xIDUwLjktMTMuMyA1MC45LTM2Ljl6TTUxNyAxODguNmMtOS41LTMwLjktMTAuOS02OC44LTkuOC05OC4xIDEuMS0zMC41LTIyLjctNTguNS01NC43LTU4LjVMMTIzLjcgMzJjLTMyLjEgMC01NS44IDI4LjEtNTQuNyA1OC41IDEgMjkuMy0uMyA2Ny4yLTkuOCA5OC4xLTkuNiAzMS0yNS43IDUwLjYtNTIuMiA1My4xbDAgMjguNWMyNi40IDIuNSA0Mi42IDIyLjEgNTIuMiA1My4xIDkuNSAzMC45IDEwLjkgNjguOCA5LjggOTguMS0xLjEgMzAuNSAyMi43IDU4LjUgNTQuNyA1OC41bDMyOC43IDBjMzIuMSAwIDU1LjgtMjguMSA1NC43LTU4LjUtMS0yOS4zIC4zLTY3LjIgOS44LTk4LjEgOS42LTMxIDI1LjctNTAuNiA1Mi4xLTUzLjFsMC0yOC41Yy0yNi4zLTIuNS00Mi41LTIyLjEtNTItNTMuMXpNMzAwLjIgMzc1LjFsLTk3LjkgMCAwLTIzOC4zIDk3LjQgMGM0My4zIDAgNzEuNyAyMy40IDcxLjcgNTkuNCAwIDI1LjMtMTkuMSA0Ny45LTQzLjUgNTEuOGwwIDEuM2MzMy4yIDMuNiA1NS41IDI2LjYgNTUuNSA1OC4zIDAgNDIuMS0zMS4zIDY3LjUtODMuMiA2Ny41em0tMTAtMTA4LjdsLTUwLjEgMCAwIDc4LjQgNTIuMyAwYzM0LjIgMCA1Mi4zLTEzLjcgNTIuMy0zOS41IDAtMjUuNy0xOC42LTM4LjktNTQuNS0zOC45eiJdCiAgICB9OwogICAgZmFJdHVuZXMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaXR1bmVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYjQiLCAiTTIyMy42IDgwLjNhMTcxLjMgMTcxLjMgMCAxIDAgLjIgMzQyLjUgMTcxLjMgMTcxLjMgMCAxIDAgLS4yLTM0Mi41em03OS40IDI0MGMtMy4yIDEzLjYtMTMuNSAyMS4yLTI3LjMgMjMuOC0xMi4xIDIuMi0yMi4yIDIuOC0zMS45LTUtMTEuOC0xMC0xMi0yNi40LTEuNC0zNi44IDguNC04IDIwLjMtOS42IDM4LTEyLjggMy0uNSA1LjYtMS4yIDcuNy0zLjcgMy4yLTMuNiAyLjItMiAyLjItODAuOCAwLTUuNi0yLjctNy4xLTguNC02LjEtNCAuNy05MS45IDE3LjEtOTEuOSAxNy4xLTUgMS4xLTYuNyAyLjYtNi43IDguMyAwIDExNi4xIC41IDExMC44LTEuMiAxMTguNS0yLjEgOS03LjYgMTUuOC0xNC45IDE5LjYtOC4zIDQuNi0yMy40IDYuNi0zMS40IDUuMi0yMS40LTQtMjguOS0yOC43LTE0LjQtNDIuOSA4LjQtOCAyMC4zLTkuNiAzOC0xMi44IDMtLjUgNS42LTEuMiA3LjctMy43IDUtNS43IC45LTEyNyAyLjYtMTMzLjcgLjQtMi42IDEuNS00LjggMy41LTYuNCAyLjEtMS43IDUuOC0yLjcgNi43LTIuNyAxMDEtMTkgMTEzLjMtMjEuNCAxMTUuMS0yMS40IDUuNy0uNCA5IDMgOSA4LjctLjEgMTcwLjYgLjQgMTYxLjQtMSAxNjcuNnpNMzQ1LjIgMzJMMTAyLjggMzJDNDUuOSAzMiAwIDc3LjkgMCAxMzQuOEwwIDM3Ny4yQzAgNDM0LjEgNDUuOSA0ODAgMTAyLjggNDgwbDI0Mi40IDBjNTcgMCAxMDIuOC00NS45IDEwMi44LTEwMi44bDAtMjQyLjRDNDQ4IDc3LjkgNDAyLjEgMzIgMzQ1LjIgMzJ6TTIyMy42IDU5YTE5Mi41IDE5Mi41IDAgMSAxIDAgMzg1IDE5Mi41IDE5Mi41IDAgMSAxIDAtMzg1eiJdCiAgICB9OwogICAgZmFTcXVhcmVYaW5nID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS14aW5nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInhpbmctc3F1YXJlIl0sICJmMTY5IiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNOTMuOCAzMjAuMmMtNS41IDAtOC43LTUuMy02LTEwLjNsNDkuMy04Ni43Yy4xIDAgLjEtLjEgMC0uMmwtMzEuNC01NGMtMy01LjYgLjItMTAuMSA2LTEwLjFsNDYuNiAwYzUuMiAwIDkuNSAyLjkgMTIuOSA4LjdsMzEuOSA1NS4zYy0xLjMgMi4zLTE4IDMxLjctNTAuMSA4OC4yLTMuNSA2LjItNy43IDkuMS0xMi42IDkuMWwtNDYuNiAwem0xNjMuNS0zMy40bDAgLjIgNjUuNSAxMTljMi44IDUuMSAuMSAxMC4xLTYgMTAuMWwtNDYuNiAwYy01LjUgMC05LjctMi45LTEyLjktOC43bC02Ni0xMjAuM2MxLjgtMy4yIDIyLjktNDAuNCA2My4zLTExMS42IDExLjctMjAuNyAyNS4xLTQ0LjMgNDAuMS03MC44IDMuMy01LjggNy40LTguNyAxMi41LTguN2w0Ni45IDBjNS43LS4xIDguOCA0LjcgNiAxMEwyNTcuMyAyODYuOHoiXQogICAgfTsKICAgIGZhWGluZ1NxdWFyZSA9IGZhU3F1YXJlWGluZzsKICAgIGZhQ3NzM0FsdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjc3MzLWFsdCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMzhiIiwgIk0wIDMyTDM0LjkgNDI3LjggMTkyIDQ4MCAzNDkuMSA0MjcuOCAzODQgMzIgMCAzMnptMzEzLjEgODBsLTQuOCA0Ny4zLTExNS4zIDQ5LjMtLjMgLjEgMTExLjUgMC0xMi44IDE0Ni42LTk4LjIgMjguNy05OC44LTI5LjItNi40LTczLjkgNDguOSAwIDMuMiAzOC4zIDUyLjYgMTMuMyA1NC43LTE1LjQgMy43LTYxLjYtMTY2LjMtLjUgMC0uMS0uMiAuMS0zLjYtNDYuMyAxMTIuMS00Ni43IDYuNS0yLjctMTIyLjkgMC01LjgtNDcuMyAyNDIuMiAweiJdCiAgICB9OwogICAgZmFTcXVhcmVzcGFjZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmVzcGFjZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWJlIiwgIk0xODYuMSAzNDMuM2MtOS43IDkuNy05LjcgMjUuMyAwIDM0LjlzMjUuMyA5LjYgMzQuOSAwTDM3OC4zIDIyMS4xYzE5LjMtMTkuMyA1MC42LTE5LjMgNjkuOSAwczE5LjMgNTAuNiAwIDY5LjlMMjk0IDQ0NS4xYzE5LjMgMTkuMyA1MC41IDE5LjMgNjkuOCAwbDAgMCAxMTkuMy0xMTkuMmMzOC42LTM4LjYgMzguNi0xMDEuMSAwLTEzOS43LTM4LjYtMzguNi0xMDEuMi0zOC42LTEzOS43IDBMMTg2LjEgMzQzLjN6TTQzMC43IDIzOC41Yy05LjctOS43LTI1LjMtOS43LTM0LjkgMEwyMzguNSAzOTUuN2MtMTkuMyAxOS4zLTUwLjUgMTkuMy02OS44IDBsMCAwYy05LjYtOS42LTI1LjMtOS43LTM0LjkgMGwwIDBjLTkuNyA5LjYtOS43IDI1LjMgMCAzNC45bDAgMGMzOC42IDM4LjYgMTAxLjEgMzguNiAxMzkuNyAwTDQzMC43IDI3My41YzkuNi05LjcgOS42LTI1LjMgMC0zNC45em0tMjYyIDg3LjNMMzI1LjkgMTY4LjdjOS42LTkuNiA5LjYtMjUuMyAwLTM0LjktOS42LTkuNi0yNS4zLTkuNi0zNC45IDBMMTMzLjcgMjkwLjljLTE5LjMgMTkuMy01MC42IDE5LjMtNjkuOSAwbDAgMGMtMTkuMy0xOS4zLTE5LjMtNTAuNSAwLTY5LjhsMCAwIDE1NC4yLTE1NC4yYy0xOS4zLTE5LjMtNTAuNS0xOS4zLTY5LjggMGwwIDAtMTE5LjIgMTE5LjNjLTM4LjYgMzguNi0zOC42IDEwMS4xIDAgMTM5LjcgMzguNiAzOC42IDEwMS4xIDM4LjYgMTM5LjcgMHpNODEuMyAyNzMuNWM5LjYgOS42IDI1LjMgOS42IDM0LjkgMEwyNzMuNSAxMTYuM2MxOS4zLTE5LjMgNTAuNi0xOS4zIDY5LjggMGwwIDBjOS43IDkuNiAyNS4zIDkuNiAzNC45IDBzOS42LTI1LjMgMC0zNC45Yy0zOC42LTM4LjYtMTAxLjEtMzguNi0xMzkuNyAwTDgxLjMgMjM4LjVjLTkuNiA5LjYtOS42IDI1LjMgMCAzNC45bDAgMHoiXQogICAgfTsKICAgIGZhVHJlbGxvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRyZWxsbyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMTgxIiwgIk0zOTIuMyAzMkw1Ni4xIDMyYy0zMSAwLTU2LjEgMjUuMS01Ni4xIDU2LS4xIDAgMC00IDAgMzM2IDAgMzAuOSAyNS4xIDU2IDU2IDU2bDMzNi4yIDBjMzAuOC0uMiA1NS43LTI1LjIgNTUuNy01NmwwLTMzNmMuMS0zMC44LTI0LjgtNTUuOC01NS42LTU2ek0xOTcgMzcxLjNjLS4yIDE0LjctMTIuMSAyNi42LTI2LjkgMjYuNmwtODIuNyAwYy0xNC44IC4xLTI2LjktMTEuOC0yNy0yNi42bDAtMjU0LjJjMC0xNC44IDEyLTI2LjkgMjYuOS0yNi45bDgyLjkgMGMxNC44IDAgMjYuOSAxMiAyNi45IDI2LjlsMCAyNTQuMi0uMSAwem0xOTMuMS0xMTJjMCAxNC44LTEyIDI2LjktMjYuOSAyNi45bC04MSAwYy0xNC44IDAtMjYuOS0xMi0yNi45LTI2LjlsMC0xNDIuMWMwLTE0LjggMTItMjYuOSAyNi44LTI2LjlsODEuMSAwYzE0LjggMCAyNi45IDEyIDI2LjkgMjYuOWwwIDE0Mi4xeiJdCiAgICB9OwogICAgZmFWaWFkZW8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidmlhZGVvIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyYTkiLCAiTTI3Ni40IDE1MC41bDAgLjdjLTE3LjktNTIuNi00Mi42LTEwMy40LTcwLjgtMTUxLjIgNDMuMyAyOS4yIDY3IDEwMCA3MC44IDE1MC41em0zMi43IDEyMS43YzcuNiAxOC4yIDExIDM3LjUgMTEgNTcgMCA3Ny43LTU3LjggMTQxLTEzNy44IDEzOS40bDMuOC0uM2M3NC4yLTQ2LjcgMTA5LjMtMTE4LjYgMTA5LjMtMjA1LjEgMC0zOC4xLTYuNS03NS45LTE4LjktMTEyIDEgMTEuNyAxIDIzLjcgMSAzNS40IDAgOTEuOC0xOC4xIDI0MS42LTExNi42IDI4MC02NS43LTExLjQtMTExLjMtNjguNi0xMTEuMy0xMzcuNCAwLTc1LjYgNTcuNC0xNDIuMyAxMzUuNC0xNDIuMyAxNi44IDAgMzMuNyAzLjEgNDkuMSA5LjYgMS43LTE1LjEgNi41LTI5LjkgMTMuNC00My4zLTE5LjktNy4yLTQxLjItMTAuNy02Mi41LTEwLjctMTYxLjUgMC0yMzguNyAxOTUuOS0xMjkuOSAzMTMuNyA2Ny45IDc0LjYgMTkyIDczLjkgMjU5LjggMCA1Ni42LTYxLjMgNjAuOS0xNDIuNCAzNi40LTIwMS0xMi43IDgtMjcuMSAxMy45LTQyLjIgMTd6TTQxOC4zIDExLjdjLTMxIDY2LjUtODEuMyA0Ny4yLTExNS44IDgwLjEtMTIuNCAxMi0yMC42IDM0LTIwLjYgNTAuNSAwIDE0LjEgNC41IDI3LjEgMTIgMzguOCA0Ny40LTExIDk4LjMtNDYgMTE4LjItOTAuNy0uNyA1LjUtNC44IDE0LjQtNy4yIDE5LjItMjAuMyAzNS43LTY0LjYgNjUuNi05OS43IDg0LjkgMTQuOCAxNC40IDMzLjcgMjUuOCA1NSAyNS44IDc5IDAgMTEwLjEtMTM0LjYgNTguMS0yMDguNnoiXQogICAgfTsKICAgIGZhU2VhcmNoZW5naW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2VhcmNoZW5naW4iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNlYiIsICJNMjE0LjYgMTMwLjNsLTY3LjIgMjguMiAwLTExNS4zLTU0LjcgMTkwLjMgNTQuNy0yNC4yIDAgMTMwLjMgNjcuMi0yMDkuM3pNMTMxLjQgMzMuNmwtMS4zIDQuNy0xNS4yIDUyLjlDNzQuNiAxMDYuNyA0NiAxNDUuOCA0NiAxOTEuNSA0NiAyNDMuOCA4MC4zIDI4Ny40IDEyOS40IDI5N2wwIDUzLjZDNTEuNSAzNDAuMS02IDI3Mi40LTYgMTkxLjYtNiAxMTEuMSA1My44IDQ0LjQgMTMxLjQgMzMuNnpNNDQyLjggNDgwLjhjLTExLjIgMTEuMi0yMy4xIDEyLjMtMjguNiAxMC41LTUuNC0xLjgtMjcuMS0xOS45LTYwLjQtNDQuNC0zMy4zLTI0LjYtMzMuNi0zNS43LTQzLTU2LjctOS40LTIwLjktMzAuNC00Mi42LTU3LjUtNTIuNGwtOS43LTE0LjdjLTI0LjcgMTYuOS01MyAyNi45LTgxLjMgMjguN2wyLjEtNi42IDE1LjktNDkuNWM0Ni41LTExLjkgODAuOS01NCA4MC45LTEwNC4yIDAtNTQuNS0zOC40LTEwMi4xLTk2LTEwNy4xbDAtNTIuMWM4My4yIDUuMSAxNDguOCA3NC41IDE0OC44IDE1OS4zIDAgMzMuNi0xMS4yIDY0LjctMjkgOTAuNGwxNC42IDkuNmM5LjggMjcuMSAzMS41IDQ4IDUyLjQgNTcuNHMzMi4yIDkuNyA1Ni44IDQzYzI0LjYgMzMuMiA0Mi43IDU0LjkgNDQuNSA2MC4zcy43IDE3LjMtMTAuNSAyOC41em0tOS45LTE3LjljMC00LjQtMy42LTgtOC04cy04IDMuNi04IDggMy42IDggOCA4IDgtMy42IDgtOHoiXQogICAgfTsKICAgIGZhUGF5cGFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBheXBhbCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWVkIiwgIk0xMTEuOSAyOTUuOWMtMy41IDE5LjItMTcuNCAxMDguNy0yMS41IDEzNC0uMyAxLjgtMSAyLjUtMyAyLjVsLTc0LjYgMGMtNy42IDAtMTMuMS02LjYtMTIuMS0xMy45TDU5LjMgNDYuNmMxLjUtOS42IDEwLjEtMTYuOSAyMC0xNi45IDE1Mi4zIDAgMTY1LjEtMy43IDIwNCAxMS40IDYwLjEgMjMuMyA2NS42IDc5LjUgNDQgMTQwLjMtMjEuNSA2Mi42LTcyLjUgODkuNS0xNDAuMSA5MC4zLTQzLjQgLjctNjkuNS03LTc1LjMgMjQuMnpNMzU3LjYgMTUyYy0xLjgtMS4zLTIuNS0xLjgtMyAxLjMtMiAxMS40LTUuMSAyMi41LTguOCAzMy42LTM5LjkgMTEzLjgtMTUwLjUgMTAzLjktMjA0LjUgMTAzLjktNi4xIDAtMTAuMSAzLjMtMTAuOSA5LjQtMjIuNiAxNDAuNC0yNy4xIDE2OS43LTI3LjEgMTY5LjctMSA3LjEgMy41IDEyLjkgMTAuNiAxMi45bDYzLjUgMGM4LjYgMCAxNS43LTYuMyAxNy40LTE0LjkgLjctNS40LTEuMSA2LjEgMTQuNC05MS4zIDQuNi0yMiAxNC4zLTE5LjcgMjkuMy0xOS43IDcxIDAgMTI2LjQtMjguOCAxNDIuOS0xMTIuMyA2LjUtMzQuOCA0LjYtNzEuNC0yMy44LTkyLjZ6Il0KICAgIH07CiAgICBmYVNxdWFyZUJsdWVza3kgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWJsdWVza3kiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTZhMyIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjI0IDI0Ny40YzE0LjUtMzAgNTQtODUuOCA5MC43LTExMy4zIDI2LjUtMTkuOSA2OS4zLTM1LjIgNjkuMyAxMy43IDAgOS44LTUuNiA4Mi4xLTguOSA5My44LTExLjQgNDAuOC01MyA1MS4yLTkwIDQ0LjkgNjQuNyAxMSA4MS4yIDQ3LjUgNDUuNiA4NC02Ny41IDY5LjMtOTctMTcuNC0xMDQuNi0zOS42bC0uMy0uOWMtLjktMi42LTEuNC00LjEtMS44LTQuMXMtLjkgMS41LTEuOCA0LjFjLS4xIC4zLS4yIC42LS4zIC45LTcuNiAyMi4yLTM3LjEgMTA4LjgtMTA0LjYgMzkuNi0zNS41LTM2LjUtMTkuMS03MyA0NS42LTg0LTM3IDYuMy03OC42LTQuMS05MC00NC45LTMuMy0xMS43LTguOS04NC04LjktOTMuOCAwLTQ4LjkgNDIuOS0zMy41IDY5LjMtMTMuNyAzNi43IDI3LjUgNzYuMiA4My40IDkwLjcgMTEzLjN6Il0KICAgIH07CiAgICBmYURBbmREQmV5b25kID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImQtYW5kLWQtYmV5b25kIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY2Y2EiLCAiTTMxMy44IDI0MS41YzEzLjggMCAyMS0xMC4xIDI0LjgtMTcuOS0xLTEuMS01LTQuMi03LjQtNi42LTIuNCA0LjMtOC4yIDEwLjctMTMuOSAxMC43LTEwLjIgMC0xNS40LTE0LjctMy4yLTI2LjYtLjUtLjItNC4zLTEuOC04IDIuNCAwLTMgMS01LjEgMi4xLTYuNi0zLjUgMS4zLTkuOCA1LjYtMTEuNCA3LjkgLjItNS44IDEuNi03LjUgLjYtOWwtLjItLjJzLTguNSA1LjYtOS4zIDE0LjdjMCAwIDEuMS0xLjYgMi4xLTEuOSAuNi0uMyAxLjMgMCAuNiAxLjktLjIgLjYtNS44IDE1LjcgNS4xIDI2LS42LTEuNi0xLjktNy42IDIuNC0xLjktLjMgLjEgNS44IDcuMSAxNS43IDcuMXptNTIuNC0yMS4xYzAtNC00LjktNC40LTUuNi00LjUgMiAzLjkgLjkgNy41IC4yIDkgMi41LS40IDUuNC0xLjYgNS40LTQuNXptMTAuMyA1LjJjMC02LjQtNi4yLTExLjQtMTMuNS0xMC43IDggMS4zIDUuNiAxMy44LTUgMTEuNCAzLjctMi42IDMuMi05LjktMS4zLTEyLjUgMS40IDQuMi0zIDguMi03LjQgNC42LTIuNC0xLjktOC02LjYtMTAuNi04LjYtMi40LTIuMS01LjUtMS02LjYtMS44LTEuMy0xLjEtLjUtMy44LTIuMi01LTEuNi0uOC0zLS4zLTQuOC0xLTEuNi0uNi0yLjctMS45LTIuNi0zLjUtMi41IDQuNCAzLjQgNi4zIDQuNSA4LjUgMSAxLjktLjggNC44IDQgOC41IDE0LjggMTEuNiA5LjEgOCAxMC40IDE4LjEgLjYgNC4zIDQuMiA2LjcgNi40IDcuNC0yLjEtMS45LTIuOS02LjQgMC05LjMgMCAxMy45IDE5LjIgMTMuMyAyMy4xIDYuNC0yLjQgMS4xLTctLjItOS0xLjkgNy43IDEgMTQuMi00LjEgMTQuNi0xMC42em0tMzkuNC0xOC40YzIgLjggMS42IC43IDYuNCA0LjUgMTAuMi0yNC41IDIxLjctMTUuNyAyMi0xNS41IDIuMi0xLjkgOS44LTMuOCAxMy44LTIuNy0yLjQtMi43LTcuNS02LjItMTMuMy02LjItNC43IDAtNy40IDIuMi04IDEuMy0uOC0xLjQgMy4yLTMuNCAzLjItMy40LTUuNCAuMi05LjYgNi43LTExLjIgNS45LTEuMS0uNSAxLjQtMy43IDEuNC0zLjctNS4xIDIuOS05LjMgOS4xLTEwLjIgMTMgNC42LTUuOCAxMy44LTkuOCAxOS43LTktMTAuNSAuNS0xOS41IDkuNy0yMy44IDE1Ljh6bTI0Mi41IDUxLjljLTIwLjcgMC00MCAxLjMtNTAuMyAyLjFsNy40IDguMiAwIDc3LjItNy40IDguMmMxMC40IC44IDMwLjkgMi4xIDUxLjYgMi4xIDQyLjEgMCA1OS4xLTIwLjcgNTkuMS00OC45IDAtMjkuMy0yMy4yLTQ4LjktNjAuNC00OC45em0tMTUuMSA3NS42bDAtNTMuM2MzMC4xLTMuMyA0Ni44IDMuOCA0Ni44IDI2LjMgMCAyNS42LTIxLjQgMzAuMi00Ni44IDI3ek0zMDEuNiAxODFjLTEtMy40LS4yLTYuOSAxLjEtOS40IDEgMyAyLjYgNi40IDcuNSA5LS41LTIuNC0uMi01LjYgLjUtOC0xLjQtNS40IDIuMS05LjkgNi40LTkuOSA2LjkgMCA4LjUgOC44IDQuNyAxNC40IDIuMSAzLjIgNS41IDUuNiA3LjcgNy44IDMuMi0zLjcgNS41LTkuNSA1LjUtMTMuOCAwLTguMi01LjUtMTUuOS0xNi43LTE2LjUtMjAtLjktMjAuMiAxNi42LTIwIDE4LjkgLjUgNS4yIDMuNCA3LjggMy4zIDcuNXptLS40IDZjLS41IDEuOC03IDMuNy0xMC4yIDYuOSA0LjgtMSA3LS4yIDcuOCAxLjggLjUgMS40LS4yIDMuNC0uNSA1LjYgMS42LTEuOCA3LTUuNSAxMS02LjItMS0uMy0zLjQtLjgtNC4zLS44IDIuOS0zLjQgOS4zLTQuNSAxMi44LTMuNy0yLjItLjItNi43IDEuMS04LjUgMi42IDEuNiAuMyAzIC42IDQuMyAxLjEtMi4xIC44LTQuOCAzLjQtNS44IDYuMSA3LTUgMTMuMSA1LjIgNyA4LjIgLjggLjIgMi43IDAgMy41LS41LS4zIDEuMS0xLjkgMy0zIDMuNCAyLjkgMCA3LTEuOSA4LjItNC42IDAgMC0xLjggLjYtMi42LS4ycy4zLTQuMyAuMy00LjNjLTIuMyAyLjktMy40LTEuMy0xLjMtNC4yLTEtLjMtMy41LS42LTQuNi0uNSAzLjItMS4xIDEwLjQtMS44IDExLjItLjMgLjYgMS4xLTEgMy40LTEgMy40IDQtLjUgOC4zIDEuMSA2LjcgNS4xIDIuOS0xLjQgNS41LTUuOSA0LjgtMTAuNC0uMyAxLTEuNiAyLjQtMi45IDIuNyAuMi0xLjQtMS0yLjItMS45LTIuNiAxLjctOS42LTE0LjYtMTQuMi0xNC4xLTIzLjktMSAxLjMtMS44IDUtLjggNy4xIDIuNyAzLjIgOC43IDYuNyAxMC4xIDEyLjItMi42LTYuNC0xNS4xLTExLjQtMTQuNi0yMC4yLTEuNiAxLjYtMi42IDcuOC0xLjMgMTEgMi40IDEuNCA0LjUgMy44IDQuOCA2LjEtMi4yLTUuMS0xMS40LTYuMS0xMy45LTEyLjItLjYgMi4yLS4zIDUgMSA2LjcgMCAwLTIuMi0uOC03LS42IDEuNyAuNiA1LjEgMy41IDQuOCA1LjJ6bTI1LjkgNy40Yy0yLjcgMC0zLjUtMi4xLTQuMi00LjMgMy4zIDEuMyA0LjIgNC4zIDQuMiA0LjN6bTM4LjkgMy43bC0xLS42Yy0xLjEtMS0yLjktMS40LTQuNy0xLjQtMi45IDAtNS44IDEuMy03LjUgMy40LS44IC44LTEuNCAxLjgtMi4xIDIuNmwwIDE1LjdjMy41IDIuNiA3LjEtMi45IDMtNy4yIDEuNSAuMyA0LjYgMi43IDUuMSAzLjIgMCAwIDIuNi0uNSA1LS41IDIuMSAwIDMuOSAuMyA1LjYgMS4xbDAtMTguNGMtMS4xIC41LTIuMiAxLTIuNyAxLjRsLS43IC43ek03OS45IDMwNS45YzE3LjItNC42IDE2LjItMTggMTYuMi0xOS45IDAtMjAuNi0yNC4xLTI1LTM3LTI1bC01Ni4xIDAgOC4zIDguNiAwIDI5LjUtMTEuMyAwIDExLjQgMTQuNiAwIDMyLjMtOC40IDguNmM2MS43IDAgNzMuOCAxLjUgODYuNC01LjkgNi43LTQgOS45LTkuOCA5LjktMTcuNiAwLTUuMSAyLjYtMTguOC0xOS40LTI1LjJ6TTM4LjYgMjc4LjRjMjAgMCAyOS42LS44IDI5LjYgOS4xbDAgM2MwIDEyLjEtMTkgOC44LTI5LjYgOC44bDAtMjAuOXptMCA1OS4ybDAtMjIuNmMxMi4yIDAgMzIuNy0yLjMgMzIuNyA4LjhsMCA0LjUgLjIgMGMwIDExLjItMTIuNSA5LjMtMzIuOSA5LjN6bTEwMS4yLTE5LjNsMjMuMSAuMiAwLS4yIDE0LjEtMjEuMi0zNy4yIDAgMC0xNC45IDUyLjQgMC0xNC4xLTIxIDAtLjItNzMuNSAuMiA3LjQgOC4yIDAgNzcuMS03LjQgOC4yIDgxLjIgMCAxNC4xLTIxLjItNjAuMSAuMiAwLTE1LjR6bTIxNC43LTYwLjFjLTczLjkgMC03Ny41IDk5LjMtLjMgOTkuMyA3Ny45IDAgNzQuMS05OS4zIC4zLTk5LjN6bS0uMyA3Ny41Yy0zNy40IDAtMzYuOS01NS4zIC4yLTU1LjMgMzYuOCAuMSAzOC44IDU1LjMtLjIgNTUuM3ptLTkxLjMtOC4zbDQ0LjEtNjYuMi00MS43IDAgNi4xIDcuMi0yMC41IDM3LjItLjMgMC0yMS0zNy4yIDYuNC03LjItNDQuOSAwIDQ0LjEgNjUuOCAuMiAxOS40LTcuNyA4LjIgNDIuNiAwLTcuMi04LjItLjItMTl6TTIzNC41IDE3Ni4xYzEuNiAxLjMgMi45IDIuNCAyLjkgNi42bDAgMzguOGMwIDQuMi0uOCA1LjMtMi43IDYuNC0uMSAuMS03LjUgNC41LTcuOSA0LjZsMzUuMSAwYzEwIDAgMTcuNC0xLjUgMjYtOC42LS42LTUgLjItOS41IC44LTEyIDAtLjItMS44IDEuNC0yLjcgMy41IDAtNS43IDEuNi0xNS40IDkuNi0yMC41LS4xIDAtMy43LS44LTkgMS4xIDItMy4xIDEwLTcuOSAxMC40LTcuOS04LjItMjYtMzgtMjIuOS0zMi4yLTIyLjktMzAuOSAwLTMyLjYgLjMtMzkuOS00IC4xIC44IC41IDguMiA5LjYgMTQuOXptMjEuNSA1LjVjNC42IDAgMjMuMS0zLjMgMjMuMSAxNy4zIDAgMjAuNy0xOC40IDE3LjMtMjMuMSAxNy4zbDAtMzQuNnptMjI4LjkgNzkuNmw3IDguMyAwIDQyLjUtLjMgMGMtNS40LTE0LjQtNDIuMy00MS41LTQ1LjItNTAuOWwtMzEuNiAwIDcuNCA4LjUgMCA3Ni45LTcuMiA4LjMgMzkgMC03LjQtOC4yIDAtNDcuNCAuMyAwYzMuNyAxMC42IDQ0LjUgNDIuOSA0OC41IDU1LjZsMjEuMyAwIDAtODUuMiA3LjQtOC4zLTM5LjItLjF6TTM3OC4yIDE2NS4xYy0zMi4yIDAtMzIuOCAuMi0zOS45LTQgLjEgLjcgLjUgOC4zIDkuNiAxNC45IDMuMSAyIDIuOSA0LjMgMi45IDkuNSAxLjgtMS4xIDMuOC0yLjIgNi4xLTMtMS4xIDEuMS0yLjcgMi43LTMuNSA0LjUgMS0xLjEgNy41LTUuMSAxNC42LTMuNS0xLjYgLjMtNCAxLjEtNi4xIDIuOSAuMSAwIDIuMS0xLjEgNy41LS4zbDAtNC4zYzQuNyAwIDIzLjEtMy40IDIzLjEgMTcuMyAwIDIwLjUtMTguNSAxNy4zLTE5LjcgMTcuMyA1LjcgNC40IDUuOCAxMiAyLjIgMTYuM2wuMyAwYzMzLjQgMCAzNi43LTI3LjMgMzYuNy0zNCAwLTMuOC0xLjEtMzItMzMuOC0zMy42eiJdCiAgICB9OwogICAgZmFNaWNyb3NvZnQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWljcm9zb2Z0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzY2EiLCAiTTAgMzJsMjE0LjYgMCAwIDIxNC42LTIxNC42IDAgMC0yMTQuNnptMjMzLjQgMGwyMTQuNiAwIDAgMjE0LjYtMjE0LjYgMCAwLTIxNC42ek0wIDI2NS40bDIxNC42IDAgMCAyMTQuNi0yMTQuNiAwIDAtMjE0LjZ6bTIzMy40IDBsMjE0LjYgMCAwIDIxNC42LTIxNC42IDAgMC0yMTQuNnoiXQogICAgfTsKICAgIGZhRmx5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZseSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmNDE3IiwgIk0xNjUuOSA0MjcuOGMxMi45IDExLjcgMzMuNyAzMy4zIDMzLjIgNTAuNyAwIC44LS4xIDEuNi0uMSAyLjUtMS44IDE5LjgtMTguOCAzMS4xLTM5LjEgMzEtMjUtLjEtMzkuOS0xNi44LTM4LjctMzUuOCAxLTE2LjIgMjAuNS0zNi43IDMyLjQtNDcuNiAyLjMtMi4xIDIuNy0yLjcgNS42LTMuNiAzLjQgMCAzLjkgLjMgNi43IDIuOHpNMzAwIDY3LjNjLTE2LjMtMjUuNy0zOC42LTQwLjYtNjMuMy01Mi4xLTI1LjUtMTAuNy01NC42LTE1LjQtNzYuNi0xNS4yLTQ0LjEgMC03MS4yIDEzLjItODEuMSAxNy4zLTUzLjYgMjcuOS04NC40IDY5LjktODIuOSAxNDEuMyA3LjEgODIuMiA5NyAxNzYgMTU1LjggMjMzLjggMS43IDEuNiA0LjUgNC41IDYuMiA1LjFsMy4zIC4xYzIuMS0uNyAxLjgtLjUgMy41LTIuMSA1Mi4zLTQ5LjIgMTQwLjctMTQ1LjggMTU1LjktMjE1LjcgNy0zOS4yIDMuMS03Mi41LTIwLjgtMTEyLjV6TTE1NC45IDM1MS45Yy0yOC01MS4xLTY1LjItMTMwLjctNjkuMy0xODktMy40LTQ3LjUgMTEuNC0xMzEuMiA2OS4zLTEzNi43bDAgMzI1Ljd6TTI5Ni44IDE4MGMtMTYuNCA1Ni44LTc3LjMgMTI4LTExOC45IDE3MC4zIDI3LjgtNTEuOSA2NS4yLTEzMy4zIDY3LjItMTkxLjkgMS42LTQ1LjktOS44LTEwNS44LTQ4LTEzMS40IDg4LjggMTguMyAxMTUuNSA5OC4xIDk5LjcgMTUzeiJdCiAgICB9OwogICAgZmFDY1N0cmlwZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYy1zdHJpcGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFmNSIsICJNNDkyLjQgMjIwLjhjLTguOSAwLTE4LjcgNi43LTE4LjcgMjIuN2wzNi43IDBjMC0xNi05LjMtMjIuNy0xOC0yMi43ek0zNzUgMjIzLjRjLTguMiAwLTEzLjMgMi45LTE3IDdsLjIgNTIuOGMzLjUgMy43IDguNSA2LjcgMTYuOCA2LjcgMTMuMSAwIDIxLjktMTQuMyAyMS45LTMzLjQgMC0xOC42LTktMzMuMi0yMS45LTMzLjF6TTUyOCAzMkw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQ4MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0xMjIuMiAyODEuMWMwIDI1LjYtMjAuMyA0MC4xLTQ5LjkgNDAuMy0xMi4yIDAtMjUuNi0yLjQtMzguOC04LjFsMC0zMy45YzEyIDYuNCAyNy4xIDExLjMgMzguOSAxMS4zIDcuOSAwIDEzLjYtMi4xIDEzLjYtOC43IDAtMTctNTQtMTAuNi01NC00OS45IDAtMjUuMiAxOS4yLTQwLjIgNDgtNDAuMiAxMS44IDAgMjMuNSAxLjggMzUuMyA2LjVsMCAzMy40Yy0xMC44LTUuOC0yNC41LTkuMS0zNS4zLTkuMS03LjUgMC0xMi4xIDIuMi0xMi4xIDcuNyAwIDE2IDU0LjMgOC40IDU0LjMgNTAuN3pNMTkxIDIyNC41bC0yNyAwIDAgNTAuNWMwIDIwLjkgMjIuNSAxNC40IDI3IDEyLjZsMCAyOC45Yy00LjcgMi42LTEzLjMgNC43LTI0LjkgNC43LTIxLjEgMC0zNi45LTE1LjUtMzYuOS0zNi41bC4yLTExMy45IDM0LjctNy40IDAgMzAuOCAyNi45IDAgMCAzMC4zem03NCAyLjRjLTQuNS0xLjUtMTguNy0zLjYtMjcuMSA3LjRsMCA4NC40LTM1LjUgMCAwLTEyNC41IDMwLjcgMCAyLjIgMTAuNWM4LjMtMTUuMyAyNC45LTEyLjIgMjkuNi0xMC41bC4xIDAgMCAzMi43em00NC4xIDkxLjhsLTM1LjcgMCAwLTEyNC41IDM1LjcgMCAwIDEyNC41em0wLTE0Mi45bC0zNS43IDcuNiAwLTI4LjkgMzUuNy03LjYgMCAyOC45em03NC4xIDE0NS41Yy0xMi40IDAtMjAtNS4zLTI1LjEtOWwtLjEgNDAuMi0zNS41IDcuNSAwLTE2NS44IDMxLjMgMCAxLjggOC44YzQuOS00LjUgMTMuOS0xMS4xIDI3LjgtMTEuMSAyNC45IDAgNDguNCAyMi41IDQ4LjQgNjMuOCAwIDQ1LjEtMjMuMiA2NS41LTQ4LjYgNjUuNnptMTYwLjQtNTEuNWwtNjkuNSAwYzEuNiAxNi42IDEzLjggMjEuNSAyNy42IDIxLjUgMTQuMSAwIDI1LjItMyAzNC45LTcuOWwwIDI4LjZjLTkuNyA1LjMtMjIuNCA5LjItMzkuNCA5LjItMzQuNiAwLTU4LjgtMjEuNy01OC44LTY0LjUgMC0zNi4yIDIwLjUtNjQuOSA1NC4zLTY0LjkgMzMuNyAwIDUxLjMgMjguNyA1MS4zIDY1LjEgMCAzLjUtLjMgMTAuOS0uNCAxMi45eiJdCiAgICB9OwogICAgZmFXb3JkcHJlc3NTaW1wbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid29yZHByZXNzLXNpbXBsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDExIiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTMzIDI1NmMwLTMyLjMgNi45LTYzIDE5LjMtOTAuN0wxNTguNyA0NTYuN0M4NC4zIDQyMC41IDMzIDM0NC4yIDMzIDI1NnpNMjU2IDQ3OWMtMjEuOSAwLTQzLTMuMi02My05LjFsNjYuOS0xOTQuNCA2OC41IDE4Ny44Yy41IDEuMSAxIDIuMSAxLjYgMy4xLTIzLjEgOC4xLTQ4IDEyLjYtNzQgMTIuNnptMzAuNy0zMjcuNWMxMy40LS43IDI1LjUtMi4xIDI1LjUtMi4xIDEyLTEuNCAxMC42LTE5LjEtMS40LTE4LjQgMCAwLTM2LjEgMi44LTU5LjQgMi44LTIxLjkgMC01OC43LTIuOC01OC43LTIuOC0xMi0uNy0xMy40IDE3LjctMS40IDE4LjQgMCAwIDExLjQgMS40IDIzLjQgMi4xbDM0LjcgOTUuMi00OC44IDE0Ni4zLTgxLjItMjQxLjVjMTMuNC0uNyAyNS41LTIuMSAyNS41LTIuMSAxMi0xLjQgMTAuNi0xOS4xLTEuNC0xOC40IDAgMC0zNi4xIDIuOC01OS40IDIuOC00LjIgMC05LjEtLjEtMTQuNC0uMyAzOS45LTYwLjUgMTA4LjQtMTAwLjUgMTg2LjMtMTAwLjUgNTggMCAxMTAuOSAyMi4yIDE1MC42IDU4LjUtMS0uMS0xLjktLjItMi45LS4yLTIxLjkgMC0zNy40IDE5LjEtMzcuNCAzOS42IDAgMTguNCAxMC42IDMzLjkgMjEuOSA1Mi4zIDguNSAxNC44IDE4LjQgMzMuOSAxOC40IDYxLjUgMCAxOS4xLTcuMyA0MS4yLTE3IDcyLjFsLTIyLjIgNzQuMy04MC43LTIzOS42em04MS40IDI5Ny4ybDY4LjEtMTk2LjljMTIuNy0zMS44IDE3LTU3LjIgMTctNzkuOSAwLTguMi0uNS0xNS44LTEuNS0yMi45IDE3LjQgMzEuOCAyNy4zIDY4LjIgMjcuMyAxMDcgMCA4Mi4zLTQ0LjYgMTU0LjEtMTEwLjkgMTkyLjd6Il0KICAgIH07CiAgICBmYVNlbGxzeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzZWxsc3kiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjIxMyIsICJNNTQwIDIzNy4zYzMuMS0xMi4zIDQuMy0yNC44IDQuMy0zNy40IDAtOTIuNS03NS40LTE2Ny45LTE2Ny45LTE2Ny45LTc3LjIgMC0xNDQuNiA1My0xNjMgMTI3LjgtMTUuMy0xMy4yLTM0LjktMjAuNS01NS4yLTIwLjUtNDYuMyAwLTg0IDM3LjctODQgODQgMCA3LjQgLjkgMTUgMy4xIDIyLjQtNDIuOSAyMC4yLTcwLjggNjMuNy03MC44IDExMS4yIDAgNjggNTUuNSAxMjMuMiAxMjMuMiAxMjMuMmwzODEuMiAwYzY3LjcgMCAxMjMuMi01NS4yIDEyMy4yLTEyMy4yIDAtNTYuNC0zOC45LTEwNi05NC4xLTExOS41ek0yMDAuMiA0MDEuNmMwIDguMy03IDE1LjMtMTUuMyAxNS4zbC0zMC45IDBjLTguMyAwLTE1LjMtNy0xNS4zLTE1LjNsMC0xMTAuOWMwLTguMyA3LTE1LjMgMTUuMy0xNS4zbDMwLjkgMGM4LjMgMCAxNS4zIDcgMTUuMyAxNS4zbDAgMTEwLjl6bTg5LjUgMGMwIDguMy03IDE1LjMtMTUuMyAxNS4zbC0zMC45IDBjLTguMyAwLTE1LjMtNy0xNS4zLTE1LjNsMC0xMzEuNWMwLTguMyA3LTE1LjMgMTUuMy0xNS4zbDMwLjkgMGM4LjMgMCAxNS4zIDcgMTUuMyAxNS4zbDAgMTMxLjV6bTg5LjUgMGMwIDguMy03IDE1LjMtMTUuMyAxNS4zbC0zMSAwYy04LjMgMC0xNS4zLTctMTUuMy0xNS4zbDAtMTYyLjdjMC04LjMgNy0xNS4zIDE1LjMtMTUuM2wzMSAwYzguMyAwIDE1LjMgNyAxNS4zIDE1LjNsMCAxNjIuN3ptODcgMGMwIDguMy03IDE1LjMtMTUuMyAxNS4zbC0yOC41IDBjLTguMyAwLTE1LjMtNy0xNS4zLTE1LjNsMC0yMjQuNmMwLTguNiA3LTE1LjYgMTUuMy0xNS42bDI4LjUgMGM4LjMgMCAxNS4zIDcgMTUuMyAxNS42bDAgMjI0LjZ6Il0KICAgIH07CiAgICBmYURhc2hjdWJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRhc2hjdWJlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyMTAiLCAiTTMyNi45IDEwNGwtMjE2LjIgMGMtNTEuMSAwLTkxLjIgNDMuMy05MS4yIDkzLjVsMCAyMjkuNWMwIDUwLjUgNDAuMSA4NSA5MS4yIDg1bDIyNy4yIDBjNTEuMSAwIDkxLjItMzQuNSA5MS4yLTg1bDAtNDI3LTEwMi4yIDEwNHpNMTU0LjIgNDE2LjVjLTE3LjcgMC0zMi40LTE1LjEtMzIuNC0zMi44bDAtMTQyLjljMC0xNy43IDE0LjctMzIuNSAzMi40LTMyLjVsMTQwLjcgMGMxNy43IDAgMzIgMTQuOCAzMiAzMi41bDAgMTIzLjUgNTEuMSA1Mi4zLTIyMy44IDAgMC0uMXoiXQogICAgfTsKICAgIGZhR2l0dGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdpdHRlciIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNDI2IiwgIk02Ni40IDMyMi41bC01MC40IDAgMC0zMjIuNSA1MC40IDAgMCAzMjIuNXpNMTY2LjkgNzYuMWwtNTAuNCAwIDAgNDM1LjkgNTAuNCAwIDAtNDM1Ljl6bTEwMC42IDBsLTUwLjQgMCAwIDQzNS45IDUwLjQgMCAwLTQzNS45ek0zNjggNzZsLTUwLjQgMCAwIDI0NyA1MC40IDAgMC0yNDd6Il0KICAgIH07CiAgICBmYVdvbGZQYWNrQmF0dGFsaW9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndvbGYtcGFjay1iYXR0YWxpb24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjUxNCIsICJNMjM2LjIgNDcxLjVsMTAuNiAxNS44IDUuMy0xMi4zIDUuMyA3IDAgMjkuOWMyMS4xLTcuOSAyMS4xLTY2LjkgMjUuNS05Ny4yIDQuNi0zMS45LS45LTkyLjggODEuNC0xNDkuMS04LjktMjMuNi0xMi00OS40LTIuNi04MCAyNy45IDMuNCA1My45IDEwLjYgNjMuMyA1NC4xbC0zMC4zIDguNGMxMS4xIDIzIDE3IDQ2LjggMTMuMiA3Mi4xbC0yNy4zLTctNi4yIDMzLjQtMTguNS03LTguOCAzMy40LTE5LjQtNyAyNi40IDIxLjEgOC44LTI4LjIgMjQuNiA1LjIgNy0zNS42IDI2LjQgMTQuNWMuMi0yMCA3LTU4LjEtOC44LTg0LjVsMjYuNCA1LjNjNC0yMi4xLTIuNC0zOS4yLTcuOS01Ni43bDIyLjQgOS43Yy0uNC0yNS4xLTI5LjktNTYuOC02MS42LTU4LjUtMjAuMi0xLjEtNTYuNy0yNS4yLTU0LjEtNTEuOSAyLTE5LjkgMTcuNC00Mi42IDQzLjEtNDkuNy00NCAzNi41LTkuNyA2Ny4zIDUuMyA3My41IDQuNC0xMS40IDE3LjUtNjkuMSAwLTEzMC4yLTQwLjQgMjIuOS04OS43IDY1LjEtOTMuMiAxNDcuOGwtNTggMzguNy0zLjUgOTMuMiAxMDcuMy01OS44IDcgNy0xNy42IDMuNS00NCAzOC43LTE1LjgtNS4zLTI4LjEgNDkuMy0zLjUgMTE5LjYgMjEuMSAxNS44LTMyLjUgMTUuOC0zMi42LTE1LjggMjEuMS0xNS44LTMuNS0xMTkuNi0yOC4yLTQ5LjMtMTUuOCA1LjMtNDQtMzguNy0xNy42LTMuNSA3LTcgMTA3LjMgNTkuOC0zLjUtOTMuMy01OC4xLTM4LjdjLTMuNS04Mi44LTUyLjctMTI1LTkzLjItMTQ3LjktMTcuNSA2MS4xLTQuNCAxMTguOCAwIDEzMC4yIDE1LTYuMiA0OS4zLTM3IDUuMy03My41IDI1LjcgNy4xIDQxLjEgMjkuOCA0My4xIDQ5LjcgMi42IDI2LjctMzMuOSA1MC44LTU0LjEgNTEuOS0zMS43IDEuNy02MS4yIDMzLjQtNjEuNiA1OC41bDIyLjQtOS43QzEzLjQgMjI0LjcgNyAyNDEuOCAxMSAyNjMuOWwyNi40LTUuM2MtMTUuOCAyNi40LTkuMSA2NC40LTguOCA4NC40bDI2LjQtMTQuNSA3IDM1LjYgMjQuNi01LjMgOC44IDI4LjIgMjYuNC0yMS4xLTE5LjQgNy04LjgtMzMuNC0xOC41IDctNi4yLTMzLjQtMjcuMyA3QzM4IDI5NC44IDQzLjggMjcxIDU1IDI0OGwtMzAuMy04LjRjOS40LTQzLjUgMzUuNS01MC44IDYzLjMtNTQuMSA5LjQgMzAuNiA2LjIgNTYuNS0yLjYgODAuMSA4Mi4zIDU2LjMgNzYuOCAxMTcuMiA4MS40IDE0OS4xIDQuNCAzMC4zIDQuNCA4OS4zIDI1LjUgOTcuMmwwLTI5LjggNS4zLTcgNS4zIDEyLjMgMTAuNi0xNS44IDExLjQgMjEuMSAxMS40LTIxLjEgMCAwem03OS4yLTk1TDI5OS41IDM2NmM3LjUtNC40IDEzLjgtOC40IDE5LjQtMTIuMy0uNiA3LjItLjMgMTMuOC0zLjUgMjIuOGwwIDB6bTI4LjItNDkuM2MtLjQgMTAuOS0uOSAyMS43LTEuOCAzMS43LTcuOC0xLjktMTUuNi0zLjgtMjEuMS03IDguMi03LjkgMTUuNi0xNi4zIDIyLjktMjQuN2wwIDB6bTI0LjYgNS4zYzAtMTMuNC0yLjEtMjQuMi01LjMtMzMuNC01LjUgOS41LTExLjcgMTguNi0xOC41IDI3LjNsMjMuOCA2LjJ6bTMuNS04MC45YzE5LjQgMTIuOCAyNy44IDMzLjcgMjkuOSA1Ni4zLTEyLjMtNC41LTI0LjYtOS4zLTM3LTEwLjYgNS4xLTEyIDYuNi0yOC4xIDctNDUuN2wwIDB6bS0xLjgtNDUuN2MuOCAxNC4zIDEuOCAyOC44IDEuOCA0Mi4yIDE5LjItOC4xIDI5LjgtOS43IDQ0LTE0LjEtMTAuNi0xOS0yNy4yLTI1LjUtNDUuOC0yOC4ybDAgMHpNMTM0LjIgMzc2LjVMMTUwIDM2NmMtNy41LTQuNC0xMy44LTguNC0xOS40LTEyLjMgLjYgNy4zIC4zIDEzLjkgMy41IDIyLjlsMCAwek0xMDYgMzI3LjNjLjQgMTAuOSAuOSAyMS43IDEuOCAzMS43IDcuOC0xLjkgMTUuNi0zLjggMjEuMS03LTguMi03LjktMTUuNi0xNi4zLTIyLjktMjQuN3ptLTI0LjYgNS4zYzAtMTMuNCAyLTI0LjIgNS4zLTMzLjQgNS41IDkuNSAxMS43IDE4LjYgMTguNSAyNy4zbC0yMy44IDYuMnptLTMuNS04MC45Yy0xOS40IDEyLjgtMjcuOCAzMy43LTI5LjkgNTYuMyAxMi4zLTQuNSAyNC42LTkuMyAzNy0xMC42LTUtMTItNi42LTI4LjEtNy00NS43bC0uMSAwem0xLjgtNDUuN2MtLjggMTQuMy0xLjggMjguOC0xLjggNDIuMi0xOS4yLTguMS0yOS44LTkuNy00NC0xNC4xIDEwLjYtMTkgMjcuMi0yNS41IDQ1LjgtMjguMXoiXQogICAgfTsKICAgIGZhTGFzdGZtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxhc3RmbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjAyIiwgIk0yMjUuOCAzNjcuMWwtMTguOC01MXMtMzAuNSAzNC03Ni4yIDM0Yy00MC41IDAtNjkuMi0zNS4yLTY5LjItOTEuNSAwLTcyLjEgMzYuNC05Ny45IDcyLjEtOTcuOSA2Ni41IDAgNzQuOCA1My4zIDEwMC45IDEzNC45IDE4LjggNTYuOSA1NCAxMDIuNiAxNTUuNCAxMDIuNiA3Mi43IDAgMTIyLTIyLjMgMTIyLTgwLjkgMC03Mi45LTYyLjctODAuNi0xMTUtOTIuMS0yNS44LTUuOS0zMy40LTE2LjQtMzMuNC0zNCAwLTE5LjkgMTUuOC0zMS43IDQxLjYtMzEuNyAyOC4yIDAgNDMuNCAxMC42IDQ1LjcgMzUuOGw1OC42LTdjLTQuNy01Mi44LTQxLjEtNzQuNS0xMDAuOS03NC41LTUyLjggMC0xMDQuNCAxOS45LTEwNC40IDgzLjkgMCAzOS45IDE5LjQgNjUuMSA2OCA3Ni44IDQ0LjkgMTAuNiA3OS44IDEzLjggNzkuOCA0NS43IDAgMjEuNy0yMS4xIDMwLjUtNjEgMzAuNS01OS4yIDAtODMuOS0zMS4xLTk3LjktNzMuOS0zMi05Ni44LTQzLjYtMTYzLTE2MS4zLTE2My04Ni4xIDAtMTMxLjggNTQuNS0xMzEuOCAxNDcuMiAwIDg5LjEgNDUuNyAxMzcuMiAxMjcuOSAxMzcuMiA2Ni4yIDAgOTcuOS0zMS4xIDk3LjktMzEuMXoiXQogICAgfTsKICAgIGZhU2hvcHdhcmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2hvcHdhcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjViNSIsICJNNDAzLjUgNDU1LjRjLTQyLjYgMzEuNy05NC40IDQ4LjctMTQ3LjUgNDguNi0xMzcuMiAwLTI0OC0xMTEtMjQ4LTI0OCAwLTEzNy4yIDExMS0yNDggMjQ4LTI0OCA2MS4yLS4xIDEyMC4yIDIyLjYgMTY1LjcgNjMuNSAuNiAuNSAuOSAxLjIgMS4xIDEuOXMuMSAxLjUtLjMgMi4yLS44IDEuMy0xLjUgMS42LTEuNCAuNS0yLjIgLjRjLTE4LjgtMi41LTM3LjctMy43LTU2LjctMy43LTEyOS40IDAtMjIyLjQgNTMuNS0yMjIuNCAxNTUuNCAwIDEwOSA5Mi4xIDE0NS45IDE3Ni44IDE3OC43IDMzLjYgMTMgNjUuNCAyNS40IDg3IDQxLjYgLjQgLjMgLjggLjggMS4xIDEuM3MuNCAxIC40IDEuNi0uMSAxLjEtLjQgMS42LS42IC45LTEuMSAxLjNsLS4xIDB6TTUwMyAyMzMuMWMtLjEtLjktLjUtMS44LTEuMy0yLjQtNTEuOC00My05My42LTYwLjUtMTQ0LjUtNjAuNS04NC4xIDAtODAuMyA1Mi4yLTgwLjMgNTMuNiAwIDQyLjYgNTIuMSA2MiAxMTIuMyA4NC41IDMxLjEgMTEuNiA2My4yIDIzLjYgOTIuNyAzOS45IC40IC4yIC45IC40IDEuNCAuNHMxIDAgMS41LS4yIC45LS40IDEuMy0uOCAuNi0uOCAuOC0xLjJjMTQuMS0zNiAxOS41LTc0LjggMTYtMTEzLjN6Il0KICAgIH07CiAgICBmYUJsb2dnZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmxvZ2dlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMzdjIiwgIk0xNjIuNCAxOTZjNC44LTQuOSA2LjItNS4xIDM2LjQtNS4xIDI3LjIgMCAyOC4xIC4xIDMyLjEgMi4xIDUuOCAyLjkgOC4zIDcgOC4zIDEzLjYgMCA1LjktMi40IDEwLTcuNiAxMy40LTIuOCAxLjgtNC41IDEuOS0zMS4xIDIuMS0xNi40IC4xLTI5LjUtLjItMzEuNS0uOC0xMC4zLTIuOS0xNC4xLTE3LjctNi42LTI1LjN6bTYxLjQgOTQuNWMtNTMuOSAwLTU1LjggLjItNjAuMiA0LjEtMy41IDMuMS01LjcgOS40LTUuMSAxMy45IC43IDQuNyA0LjggMTAuMSA5LjIgMTIgMi4yIDEgMTQuMSAxLjcgNTYuMyAxLjJsNDcuOS0uNiA5LjItMS41YzktNS4xIDEwLjUtMTcuNCAzLjEtMjQuNC01LjMtNC43LTUtNC43LTYwLjQtNC43ek00NDcuMiA0MjAuNmMtMy41IDI4LjQtMjMgNTAuNC01MS4xIDU3LjUtNy4yIDEuOC05LjcgMS45LTE3Mi45IDEuOC0xNTcuOCAwLTE2NS45LS4xLTE3Mi0xLjgtOC40LTIuMi0xNS42LTUuNS0yMi4zLTEwLTUuNi0zLjgtMTMuOS0xMS44LTE3LTE2LjQtMy44LTUuNi04LjItMTUuMy0xMC0yMlMwIDQyMC4zIDAgMjU2LjNjMC0xNjMuMSAwLTE2Ni42IDEuOC0xNzMuNyA2LjMtMjQuNyAyNS45LTQzLjYgNTEuMi00OS4yIDcuMy0xLjYgMzMyLjEtMS45IDM0MC0uMyAyMS4yIDQuMyAzNy45IDE3LjEgNDcuNiAzNi40IDcuNyAxNS4zIDctMS41IDcuMyAxODAuNiAuMiAxMTUuOCAwIDE2NC41LS43IDE3MC41ek0zNjEuOCAyMzUuNGMtMS4xLTUtNC4yLTkuNi03LjctMTEuNS0xLjEtLjYtOC0xLjMtMTUuNS0xLjctMTIuNC0uNi0xMy44LS44LTE3LjgtMy4xLTYuMi0zLjYtNy45LTcuNi04LTE4LjMgMC0yMC40LTguNS0zOS40LTI1LjMtNTYuNS0xMi0xMi4yLTI1LjMtMjAuNS00MC42LTI1LjEtMy42LTEuMS0xMS44LTEuNS0zOS4yLTEuOC00Mi45LS41LTUyLjUgLjQtNjcuMSA2LjItMjcgMTAuNy00Ni4zIDMzLjQtNTMuNCA2Mi40LTEuMyA1LjQtMS42IDE0LjItMS45IDY0LjMtLjQgNjIuOCAwIDcyLjEgNCA4NC41IDkuNyAzMC43IDM3LjEgNTMuNCA2NC42IDU4LjQgOS4yIDEuNyAxMjIuMiAyLjEgMTMzLjcgLjUgMjAuMS0yLjcgMzUuOS0xMC44IDUwLjctMjUuOSAxMC43LTEwLjkgMTcuNC0yMi44IDIxLjgtMzguNSAzLjItMTAuOSAyLjktODguNCAxLjctOTMuOXoiXQogICAgfTsKICAgIGZhRWRnZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlZGdlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyODIiLCAiTTEyMC4xIDM3LjRjNDEtMjUuMiA4Ny42LTM4LjIgMTM0LjktMzcuNCAxNjggMCAyNTcgMTIzLjggMjU3IDIxOS41LS4xIDMyLjctMTMgNjMuOS0zNS45IDg3LjItMjIuOSAyMy4yLTU0IDM2LjUtODYuNyAzNy03NS4yIDAtOTEuNS0yMy4xLTkxLjUtMzIgMC0zLjggMS4yLTYuMiA0LjgtOS40bDEtMS4yIC40LTEuNmMxMC41LTExLjUgMTUuOS0yNi4yIDE1LjktNDEuNiAwLTc4LjctODIuMi0xNDIuNy0xODQtMTQyLjctMzcuNS0uMy03NC41IDguOS0xMDcuNSAyNi45IDI3LTU3LjUgODIuNy05Ny42IDkxLjMtMTAzLjggLjgtLjYgLjMtLjggLjMtLjh6bTE1LjYgMzE4LjFjLTEuNCAzMCA0LjYgNjAgMTYuNCA4Ny4yIDEzLjYgMjYuNCAzMi43IDUxIDU2LjUgNjkuMy01OS41LTExLjUtMTExLjUtNDMuOS0xNDkuNC04OS4zLTM4LjEtNDYuNC01OS4yLTEwNC4zLTU5LjItMTY0LjggMC01MS4yIDYyLjQtOTQuNCAxMzYtOTQuNCAzNi42LS42IDcyLjQgMTAuOSAxMDEuOCAzMi43bC0zLjYgMS4yYy01MS41IDE3LjYtOTguNSA5MC43LTk4LjUgMTU4LjF6TTQ2OS44IDQwMGwtLjcgLjFjLTExLjggMTguOC0yNS45IDM1LjEtNDIuMiA0OS41LTMwLjggMjgtNjguMSA0NS41LTEwOC44IDQ5LjktMTguNiAuMy0zNi44LTMuMi01My44LTExLjQtMjUuNi0xMC4zLTQ3LjEtMzAtNjEuNi01My0xNC40LTIzLjktMjEuMS01MS43LTE5LTc5LjYtLjYtMjAuMSA1LjQtNDAuMyAxNS01OC4yIDEzLjkgMzMuMSAzNy41IDYxLjMgNjcuNiA4MC44czY1LjUgMjkuNSAxMDEuNCAyOC42YzMxIC4zIDYyLjEtNi43IDkwLjItMjAuNWwxLjktLjljMy45LTIuMyA3LjctMy45IDExLjYgMCA0LjUgNC45IDEuOCA5LjItMS4yIDE0LS4yIC4yLS4zIC41LS40IC43eiJdCiAgICB9OwogICAgZmFJb3hob3N0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImlveGhvc3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjIwOCIsICJNNjE2IDE2MGwtNjcuMyAwQzUxMS4yIDcwLjcgNDIyLjkgOCAzMjAgOCAxODMgOCA3MiAxMTkgNzIgMjU2IDcyIDI3Mi40IDczLjYgMjg4LjUgNzYuNyAzMDRMMjQgMzA0Yy0xMy4zIDAtMjQgMTAuOC0yNCAyNCAwIDEzLjMgMTAuNyAyNCAyNCAyNGw2Ny4zIDBjMzcuNSA4OS4zIDEyNS44IDE1MiAyMjguNyAxNTIgMTM3IDAgMjQ4LTExMSAyNDgtMjQ4IDAtMTYuNC0xLjYtMzIuNS00LjctNDhsNTIuNyAwYzEzLjMgMCAyNC0xMC44IDI0LTI0IDAtMTMuMy0xMC43LTI0LTI0LTI0em0tOTYgOTZjMCAxMTAuNS04OS41IDIwMC0yMDAgMjAwLTc1LjcgMC0xNDEuNi00Mi0xNzUuNS0xMDRMNDI0IDM1MmMxMy4zIDAgMjQtMTAuOCAyNC0yNCAwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMjk4LjIgMGMtMy44LTE1LjQtNS44LTMxLjQtNS44LTQ4IDAtMTEwLjUgODkuNS0yMDAgMjAwLTIwMCA3NS43IDAgMTQxLjYgNDIgMTc1LjUgMTA0TDIxNiAxNjBjLTEzLjMgMC0yNCAxMC44LTI0IDI0IDAgMTMuMyAxMC43IDI0IDI0IDI0bDI5OC4yIDBjMy44IDE1LjQgNS44IDMxLjQgNS44IDQ4ek0yMTYgMjMybDIwOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0IDAgMTMuMi0xMC43IDI0LTI0IDI0bC0yMDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjQgMC0xMy4yIDEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYVNjaGxpeCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzY2hsaXgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNlYSIsICJNMzUwLjUgMTU3LjdsLTU0LjItNDYuMSA3My40LTM5IDc4LjMgNDQuMi05Ny41IDQwLjl6TTE5MiAxMjIuMWw0NS43LTI4LjIgMzQuNyAzNC42LTU1LjQgMjktMjUtMzUuNHptLTY1LjEgNi42bDMxLjktMjIuMSAxNy4yIDI4LjQtMzYuNyAyMi41LTEyLjQtMjguOHptLTIzLjMgODguMmwtOC44LTM0LjggMjkuNi0xOC4zIDEzLjEgMzUuMy0zMy45IDE3Ljh6TTgyLjQgMTMzLjJsMjMuOS0xOC4xIDguOSAyNC0yNi43IDE4LjMtNi4xLTI0LjJ6TTU5IDIwNi41bC0zLjYtMjguNCAyMi4zLTE1LjUgNi4xIDI4LjctMjQuOCAxNS4yek0yOC40IDIyMy4xbDIwLjgtMTIuOCAzLjMgMzMuNC0yMi45IDEyLTEuMi0zMi42ek0xLjQgMjY4TDIwLjYgMjU3LjggMjEgMjk2IDAgMzA0LjggMS40IDI2OHptNTkuMSA1OS4zbC0yOC4zIDguMy0xLjYtNDYuOCAyNS4xLTEwLjcgNC44IDQ5LjJ6TTk5IDI2My4ybC0zMS4xIDEzLTUuMi00MC44IDI3LjQtMTQuNCA4LjkgNDIuMnpNMTIzLjIgMzc3bC00MS42IDUuOS04LjEtNjMuNSAzNS4yLTEwLjggMTQuNSA2OC40em0yOC41LTEzOS45bDIxLjIgNTcuMS00Ni4yIDEzLjYtMTMuNy01NC4xIDM4LjctMTYuNnptODUuNyAyMzAuNWwtNzAuOS0zLjMtMjQuMy05NS44IDU1LjItOC42IDQwIDEwNy43ek0xNTIuNSAxODcuOWw0Mi4yLTIyLjQgMjggNDUuOS01MC44IDIxLjMtMTkuNC00NC44em00MSA5NC45bDYxLjMtMTguNyA1Mi44IDg2LjYtNzkuOCAxMS4zLTM0LjMtNzkuMnptNTEuNC04NS42bDY3LjMtMjguOCA2NS41IDY1LjQtODguNiAyNi4yLTQ0LjItNjIuOHoiXQogICAgfTsKICAgIGZhREFuZEQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZC1hbmQtZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMzhkIiwgIk04Mi45IDk4LjljLS42LTE3LjIgMi0zMy44IDEyLjctNDguMiAuMyA3LjQgMS4yIDE0LjUgNC4yIDIxLjYgNS45LTI3LjUgMTkuNy00OS4zIDQyLjMtNjUuNS0xLjkgNS45LTMuNSAxMS44LTMgMTcuNyA4LjctNy40IDE4LjgtMTcuOCA0NC40LTIyLjcgMTQuNy0yLjggMjkuNy0yIDQyLjEgMSAzOC41IDkuMyA2MSAzNC4zIDY5LjcgNzIuMyA1LjMgMjMuMSAuNyA0NS04LjMgNjYuNC01LjIgMTIuNC0xMiAyNC40LTIwLjcgMzUuMS0yLTEuOS0zLjktMy44LTUuOC01LjYtNDIuOC00MC44LTI2LjgtMjUuMi0zNy40LTM3LjQtMS4xLTEuMi0xLTIuMi0uMS0zLjYgOC4zLTEzLjUgMTEuOC0yOC4yIDEwLTQ0LTEuMS05LjgtNC4zLTE4LjktMTEuMy0yNi4yLTE0LjUtMTUuMy0zOS4yLTE1LTUzLjUgLjYtMTEuNCAxMi41LTE0LjEgMjcuNC0xMC45IDQzLjYgLjIgMS4zIC40IDIuNyAwIDMuOS0zLjQgMTMuNy00LjYgMjcuNi0yLjUgNDEuNiAuMSAuNSAuMSAxLjEgLjEgMS42IDAgLjMtLjEgLjUtLjIgMS4xLTIxLjgtMTEtMzYtMjguMy00My4yLTUyLjItOC4zIDE3LjgtMTEuMSAzNS41LTYuNiA1NC4xLTE1LjYtMTUuMi0yMS4zLTM0LjMtMjItNTUuMnpNNTUyLjUgMjIyLjFjLTExLjYtMTEuNi0yNS0yMC40LTQwLjEtMjYuNi0xMi44LTUuMi0yNi03LjktMzkuOS03LjEtMTAgLjYtMTkuNiAzLjEtMjkgNi40LTIuNSAuOS01LjEgMS42LTcuNyAyLjItNC45IDEuMi03LjMtMy4xLTQuNy02LjggMy4yLTQuNiAzLjQtNC4yIDE1LTEyIC42LS40IDEuMi0uOCAyLjItMS41bC0yLjUgMGMtLjYgMC0xLjIgLjItMS45IC4zLTE5LjMgMy4zLTMwLjcgMTUuNS00OC45IDI5LjYtMTAuNCA4LjEtMTMuOCAzLjgtMTItLjUgMS40LTMuNSAzLjMtNi43IDUuMS0xMCAxLTEuOCAyLjMtMy40IDMuNS01LjEtLjItLjItLjUtLjMtLjctLjUtMjcgMTguMy00Ni43IDQyLjQtNTcuNyA3My4zIC4zIC4zIC43IC42IDEgLjkgLjMtLjYgLjUtMS4yIC45LTEuNyAxMC40LTEyLjEgMjIuOC0yMS44IDM2LjYtMjkuOCAxOC4yLTEwLjYgMzcuNS0xOC4zIDU4LjctMjAuMiA0LjMtLjQgOC43LS4xIDEzLjEtLjEtMS44IC43LTMuNSAuOS01LjMgMS4xLTE4LjUgMi40LTM1LjUgOS01MS41IDE4LjUtMzAuMiAxNy45LTU0LjUgNDIuMi03NS4xIDcwLjQtLjMgLjQtLjQgLjktLjcgMS4zIDE0LjUgNS4zIDI0IDE3LjMgMzYuMSAyNS42IC4yLS4xIC4zLS4yIC40LS40bDEuMi0yLjdjMTIuMi0yNi45IDI3LTUyLjMgNDYuNy03NC41IDE2LjctMTguOCAzOC0yNS4zIDYyLjUtMjAgNS45IDEuMyAxMS40IDQuNCAxNy4yIDYuOCAyLjMtMS40IDUuMS0zLjIgOC00LjcgOC40LTQuMyAxNy40LTcgMjYuNy05IDE0LjctMy4xIDI5LjUtNC45IDQ0LjUtMS4zbDAtLjVjLS41LS40LTEuMi0uOC0xLjctMS40ek0zMTcuMSAzOTcuNmMtMzkuNC0zMy0yMi44LTE5LjUtNDIuNy0zNS42LS44IC45IDAtLjItMS45IDMtMTEuMiAxOS4xLTI1LjUgMzUuMy00NCA0Ny42LTEwLjMgNi44LTIxLjUgMTEuOC0zNC4xIDExLjgtMjEuNiAwLTM4LjItOS41LTQ5LjQtMjcuOC0xMi0xOS41LTEzLjMtNDAuNy04LjItNjIuNiA3LjgtMzMuOCAzMC4xLTU1LjIgMzguNi02NC4zLTE4LjctNi4yLTMzIDEuNy00Ni40IDEzLjkgLjgtMTMuOSA0LjMtMjYuMiAxMS44LTM3LjMtMjQuMyAxMC42LTQ1LjkgMjUtNjQuOCA0My45LS4zLTUuOCA1LjQtNDMuNyA1LjYtNDQuNyAuMy0yLjctLjYtNS4zLTMtNy40LTI0LjIgMjQuNy00NC41IDUxLjgtNTYuMSA4NC42IDcuNC01LjkgMTQuOS0xMS40IDIzLjYtMTYuMi04LjMgMjIuMy0xOS42IDUyLjgtNy44IDEwMS4xIDQuNiAxOSAxMS45IDM2LjggMjQuMSA1Mi4zIDIuOSAzLjcgNi4zIDYuOSA5LjUgMTAuMyAuMi0uMiAuNC0uMyAuNi0uNS0xLjQtNy0yLjItMTQuMS0xLjUtMjEuOSAyLjIgMy4yIDMuOSA2IDUuOSA4LjYgMTIuNiAxNiAyOC43IDI3LjQgNDcuMiAzNS42IDI1IDExLjMgNTEuMSAxMy4zIDc3LjkgOC42IDU0LjktOS43IDkwLjctNDguNiAxMTYtOTguOCAxLTEuOCAuNi0yLjktLjktNC4yem0xNzItNDYuNGMtOS41LTMuMS0yMi4yLTQuMi0yOC43LTIuOSA5LjkgNCAxNC4xIDYuNiAxOC44IDEyIDEyLjYgMTQuNCAxMC40IDM0LjctNS40IDQ1LjYtMTEuNyA4LjEtMjQuOSAxMC41LTM4LjkgOS4xLTEuMi0uMS0yLjMtLjQtMy0uNiAyLjgtMy43IDYtNyA4LjEtMTAuOCA5LjQtMTYuOCA1LjQtNDIuMS04LjctNTYuMS0yLjEtMi4xLTQuNi0zLjktNy01LjktLjMgMS4zLS4xIDIuMSAuMSAyLjggNC4yIDE2LjYtOC4xIDMyLjQtMjQuOCAzMS44LTcuNi0uMy0xMy45LTMuOC0xOS42LTguNS0xOS41LTE2LjEtMzkuMS0zMi4xLTU4LjUtNDguMy01LjktNC45LTEyLjUtOC4xLTIwLjEtOC43LTQuNi0uNC05LjMtLjYtMTMuOS0uOS01LjktLjQtOC44LTIuOC0xMC40LTguNC0uOS0zLjQtMS41LTYuOC0yLjItMTAuMi0xLjUtOC4xLTYuMi0xMy0xNC4zLTE0LjItNC40LS43LTguOS0xLTEzLjMtMS41LTEzLTEuNC0xOS44LTcuNC0yMi42LTIwLjMtNSAxMS0xLjYgMjIuNCA3LjMgMjkuOSA0LjUgMy44IDkuMyA3LjMgMTMuOCAxMS4yIDQuNiAzLjggNy40IDguNyA3LjkgMTQuOCAuNCA0LjcgLjggOS41IDEuOCAxNC4xIDIuMiAxMC42IDguOSAxOC40IDE3IDI1LjEgMTYuNSAxMy43IDMzIDI3LjMgNDkuNSA0MS4xIDE3LjkgMTUgMTMuOSAzMi44IDEzIDU2LS45IDIyLjkgMTIuMiA0Mi45IDMzLjUgNTEuMiAxIC40IDIgLjYgMy42IDEuMS0xNS43LTE4LjItMTAuMS00NC4xIC43LTUyLjMgLjMgMi4yIC40IDQuMyAuOSA2LjQgOS40IDQ0LjEgNDUuNCA2NC4yIDg1IDU2LjkgMTYtMi45IDMwLjYtOC45IDQyLjktMTkuOCAyLTEuOCAzLjctNC4xIDUuOS02LjUtMTkuMyA0LjYtMzUuOCAuMS01MC45LTEwLjYgLjctLjMgMS4zLS4zIDEuOS0uMyAyMS4zIDEuOCA0MC42LTMuNCA1Ny0xNy40IDE5LjUtMTYuNiAyNi42LTQyLjkgMTcuNC02Ni04LjMtMjAuMS0yMy42LTMyLjMtNDMuOC0zOC45ek05OS44IDE3OS4zYy01LjMtOS4yLTEzLjItMTUuNi0yMi4xLTIxLjMgMTMuNy0uNSAyNi42IC4yIDM5LjYgMy43LTctMTIuMi04LjUtMjQuNy01LTM4LjcgNS4zIDExLjkgMTMuNyAyMC4xIDIzLjYgMjYuOCAxOS43IDEzLjIgMzUuNyAxOS42IDQ2LjcgMzAuMiAzLjQgMy4zIDYuMyA3LjEgOS42IDEwLjktLjgtMi4xLTEuNC00LjEtMi4yLTYtNS0xMC42LTEzLTE4LjYtMjIuNi0yNS0xLjgtMS4yLTIuOC0yLjUtMy40LTQuNS0zLjMtMTIuNS0zLTI1LjEtLjctMzcuNiAxLTUuNSAyLjgtMTAuOSA0LjUtMTYuMyAuOC0yLjQgMi4zLTQuNiA0LTYuNiAuNiA2LjkgMCAyNS41IDE5LjYgNDYgMTAuOCAxMS4zIDIyLjQgMjEuOSAzMy45IDMyLjcgOSA4LjUgMTguMyAxNi43IDI1LjUgMjYuOCAxLjEgMS42IDIuMiAzLjMgMy44IDQuNy01LTEzLTE0LjItMjQuMS0yNC4yLTMzLjgtOS42LTkuMy0xOS40LTE4LjQtMjkuMi0yNy40LTMuMy0zLTQuNi02LjctNS4xLTEwLjktMS4yLTEwLjQgMC0yMC42IDQuMy0zMC4yIC41LTEgMS4xLTIgMS45LTMuMyAuNSA0LjIgLjYgNy45IDEuNCAxMS42IDQuOCAyMy4xIDIwLjQgMzYuMyA0OS4zIDYzLjUgMTAgOS40IDE5LjMgMTkuMiAyNS42IDMxLjYgNC44IDkuMyA3LjMgMTkgNS43IDI5LjYtLjEgLjYgLjUgMS43IDEuMSAyIDYuMiAyLjYgMTAgNi45IDkuNyAxNC4zIDcuNy0yLjYgMTIuNS04IDE2LjQtMTQuNSA0LjIgMjAuMi05LjEgNTAuMy0yNy4yIDU4LjcgLjQtNC41IDUtMjMuNC0xNi41LTI3LjctNi44LTEuMy0xMi44LTEuMy0yMi45LTIuMSA0LjctOSAxMC40LTIwLjYgLjUtMjIuNC0yNC45LTQuNi01Mi44IDEuOS01Ny44IDQuNiA4LjIgLjQgMTYuMyAxIDIzLjUgMy4zLTIgNi41LTQgMTIuNy01LjggMTguOS0xLjkgNi41IDIuMSAxNC42IDkuMyA5LjYgMS4yLS45IDIuMy0xLjkgMy4zLTIuNy0zLjEgMTcuOS0yLjkgMTUuOS0yLjggMTguMyAuMyAxMC4yIDkuNSA3LjggMTUuNyA3LjMtMi41IDExLjgtMjkuNSAyNy4zLTQ1LjQgMjUuOCA3LTQuNyAxMi43LTEwLjMgMTUuOS0xNy45LTYuNSAuOC0xMi45IDEuNi0xOS4yIDIuNGwtLjMtLjljNC43LTMuNCA4LTcuOCAxMC4yLTEzLjEgOC43LTIxLjEtMy42LTM4LTI1LTM5LjktOS4xLS44LTE3LjggLjgtMjUuOSA1LjUgNi4yLTE1LjYgMTcuMi0yNi42IDMyLjYtMzQuNS0xNS4yLTQuMy04LjktMi43LTI0LjYtNi4zIDE0LjYtOS4zIDMwLjItMTMuMiA0Ni41LTE0LjYtNS4yLTMuMi00OC4xLTMuNi03MC4yIDIwLjkgNy45IDEuNCAxNS41IDIuOCAyMy4yIDQuMi0yMy44IDctNDQgMTkuNy02Mi40IDM1LjYgMS4xLTQuOCAyLjctOS41IDMuMy0xNC4zIC42LTQuNSAuOC05LjIgLjEtMTMuNi0xLjUtOS40LTguOS0xNS4xLTE5LjctMTYuMy03LjktLjktMTUuNiAuMS0yMy4zIDEuMy0uOSAuMS0xLjcgLjMtMi45IDAgMTUuOC0xNC44IDM2LTIxLjcgNTMuMS0zMy41IDYtNC41IDYuOC04LjIgMy0xNC45em0xMjguNCAyNi44YzMuMyAxNiAxMi42IDI1LjUgMjMuOCAyNC4zLTQuNi0xMS4zLTEyLjEtMTkuNS0yMy44LTI0LjN6Il0KICAgIH07CiAgICBmYVZ1ZWpzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZ1ZWpzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0MWYiLCAiTTM1Ni45IDY0LjNsLTc2LjkgMC01NiA4OC42LTQ4LTg4LjYtMTc2IDAgMjI0IDM4My43IDIyNC0zODMuNy05MS4xIDB6TTU1LjcgOTYuM2w1My44IDAgMTE0LjUgMTk4LjIgMTE0LjQtMTk4LjIgNTMuOCAwLTE2OC4yIDI4OC4yLTE2OC4zLTI4OC4yeiJdCiAgICB9OwogICAgZmFNZXRhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1ldGEiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTQ5YiIsICJNNjQwIDMxNy45YzAgOTEuMy0zOS40IDE0OC41LTExMC4zIDE0OC41LTYyLjYgMC05NS44LTM0LjYtMTU2LjktMTM2LjZsLTMxLjQtNTIuNmMtOC4zLTEyLjUtMTQuNS0yNC4yLTIxLjItMzUtMjAuMSAzMy44LTQ3LjEgODMtNDcuMSA4My02NyAxMTYuNi0xMDQuNiAxNDEuMi0xNTYuOSAxNDEuMi03Mi44IDAtMTE2LjItNTcuMy0xMTYuMi0xNDUuOSAwLTE0MyA3OS44LTI3OC4xIDE4My45LTI3OC4xIDUwLjIgMCA5My44IDI0LjcgMTQ0LjggODkuNSAzNy4xLTUwLjEgNzguMS04OS41IDEzMC42LTg5LjUgOTkuMSAwIDE4MC43IDEyNS43IDE4MC43IDI3NS41ek0yODcuNCAxOTIuMmMtNDIuOS02Mi4xLTcwLjktODAuNS0xMDQuNC04MC41LTYxLjkgMC0xMTMuOCAxMDYuMS0xMTMuOCAyMTAgMCA0OC41IDE4LjUgNzUuNyA0OS42IDc1LjcgMzAuMiAwIDQ5LTE5IDEwMy4yLTEwMy44IDAgMCAyNC43LTM5LjEgNjUuNC0xMDEuNHpNNTMxLjIgMzk3LjRjMzIuMiAwIDQ2LjktMjcuNSA0Ni45LTc0LjkgMC0xMjQuMi01NC4zLTIyNS40LTEyMy4yLTIyNS40LTMzLjIgMC02MS4xIDI1LjktOTQuOSA3OCA5LjQgMTMuOCAxOS4xIDI5IDI5LjMgNDUuNGwzNy41IDYyLjRjNTguNyA5NC4xIDczLjUgMTE0LjUgMTA0LjQgMTE0LjV6Il0KICAgIH07CiAgICBmYUNyZWF0aXZlQ29tbW9uc1NoYXJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtc2hhcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRmMiIsICJNMjU1LjYgOEMzOTcuNCA4IDUwNCAxMTguMSA1MDQgMjU2IDUwNCA0MDMuMSAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS42IDUwNCA4IDM5NC41IDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4em0uOCA0NC43Yy0xMTguMiAwLTIwMy43IDk3LjktMjAzLjcgMjAzLjMgMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOCAuMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zem0xMDEgMTMyLjRjNy44IDAgMTMuNyA2LjEgMTMuNyAxMy43bDAgMTgyLjVjMCA3LjctNi4xIDEzLjctMTMuNyAxMy43bC0xMzUuMSAwYy03LjcgMC0xMy43LTYtMTMuNy0xMy43bDAtNTQtNTQgMGMtNy44IDAtMTMuNy02LTEzLjctMTMuN2wwLTE4Mi41YzAtOC4yIDYuNi0xMi43IDEyLjQtMTMuN2wxMzYuNCAwYzcuNyAwIDEzLjcgNiAxMy43IDEzLjdsMCA1NCA1NCAwek0xNjcuOSAzMDAuM2w0MC43IDAgMC0xMDEuNGMwLTcuNCA1LjgtMTIuNiAxMi0xMy43bDU1LjggMCAwLTQwLjMtMTA4LjUgMCAwIDE1NS40em0xNzYuMi04OC4xbC0xMDguNSAwIDAgMTU1LjQgMTA4LjUgMCAwLTE1NS40eiJdCiAgICB9OwogICAgZmFTdHVkaW92aW5hcmkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3R1ZGlvdmluYXJpIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzZjgiLCAiTTQ4MC43IDE4Ny43bDQuMiAyOCAwIDI4LTI1LjEgNDQuMS0zOS44IDc4LjQtNTYuMSA2Ny41LTc5LjEgMzcuOC0xNy43IDI0LjUtNy43IDEyLTkuNiA0czE3LjMtNjMuNiAxOS40LTYzLjYgMjAuMyAuNyAyMC4zIC43bDY2LjctMzguNi05Mi41IDI2LjEtNTUuOSAzNi44LTIyLjggMjgtNi42IDEuNCAyMC44LTczLjYgNi45LTUuNSAyMC43IDEyLjkgODguMy00NS4yIDU2LjgtNTEuNSAxNC44LTY4LjQtMTI1LjQgMjMuMyAxNS4yLTE4LjItMTczLjQtNTMuMyA4MS45LTEwLjUtMTY2LTEyMi45IDExNC45IDE4LjEtMTAxLjMtMTA4IDI1Mi45IDEyNi42LTMxLjUtMzggMTI0LjQgNzQuNC0xNDMuMy05OSAxOC43IDM4LjQtNDkuNi0xOC4xLTQ1LjUtODQuMyAxOTQuNiAxMjItNDIuOS01NS44IDEwOCA5Ni40IDEyLTguOS0yMS0xNi40IDQuMi0zNy44IDM3LjgtMTAuNCAyOS4yIDI0LjcgMTEuNSA0LjItNyA2LjIgOC41IDEyLTEzLjEgNy40LTEwLjMgMjAuMiAxMC41IDIzLjl6Il0KICAgIH07CiAgICBmYUJpdGJ1Y2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJiaXRidWNrZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTgxMF0sICJmMTcxIiwgIk0yMi4yIDMyYy0yLjEgMC00LjIgLjQtNi4xIDEuMXMtMy43IDEuOS01LjIgMy40LTIuNyAzLjItMy41IDUuMS0xLjMgNC0xLjMgNi4xYzAgLjkgLjEgMS45IC4yIDIuOEw3NC4xIDQ2Mi43Yy44IDUuMSAzLjQgOS43IDcuMyAxM3M4LjggNS4yIDE0IDUuMmwzMjUuNyAwYzMuOCAuMSA3LjUtMS4zIDEwLjUtMy43czQuOS01LjkgNS41LTkuN0w1MDUgNTAuN2MuNy00LjItLjMtOC40LTIuOC0xMS45cy02LjItNS43LTEwLjQtNi40Yy0uOS0uMS0xLjktLjItMi44LS4yTDIyLjIgMzJ6TTMwOC4xIDMyOS44bC0xMDQgMC0yOC4xLTE0NyAxNTcuMyAwLTI1LjIgMTQ3eiJdCiAgICB9OwogICAgZmFWayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2ayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMTg5IiwgIk0zMS41IDYzLjVDMCA5NSAwIDE0NS43IDAgMjQ3TDAgMjY1QzAgMzY2LjMgMCA0MTcgMzEuNSA0NDguNVMxMTMuNyA0ODAgMjE1IDQ4MGwxNy45IDBjMTAxLjQgMCAxNTIuMSAwIDE4My41LTMxLjVTNDQ4IDM2Ni4zIDQ0OCAyNjVsMC0xNy45YzAtMTAxLjQgMC0xNTIuMS0zMS41LTE4My41UzMzNC4zIDMyIDIzMyAzMkwyMTUgMzJDMTEzLjcgMzIgNjMgMzIgMzEuNSA2My41ek03NS42IDE2OC4zbDUxLjEgMGMxLjcgODUuNSAzOS40IDEyMS43IDY5LjMgMTI5LjJsMC0xMjkuMiA0OC4yIDAgMCA3My43YzI5LjUtMy4yIDYwLjUtMzYuOCA3MC45LTczLjdsNDguMiAwYy0zLjkgMTkuMi0xMS44IDM3LjMtMjMuMSA1My4zcy0yNS43IDI5LjUtNDIuNSAzOS42YzE4LjcgOS4zIDM1LjIgMjIuNCA0OC40IDM4LjVzMjIuOSAzNC45IDI4LjMgNTVsLTUzIDBjLTQuOS0xNy41LTE0LjgtMzMuMS0yOC42LTQ1cy0zMC43LTE5LjQtNDguNy0yMS42bDAgNjYuNi01LjggMGMtMTAyLjEgMC0xNjAuMy03MC0xNjIuOC0xODYuNXoiXQogICAgfTsKICAgIGZhR2l0aHViID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdpdGh1YiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMDliIiwgIk0xNzMuOSAzOTcuNGMwIDItMi4zIDMuNi01LjIgMy42LTMuMyAuMy01LjYtMS4zLTUuNi0zLjYgMC0yIDIuMy0zLjYgNS4yLTMuNiAzLS4zIDUuNiAxLjMgNS42IDMuNnptLTMxLjEtNC41Yy0uNyAyIDEuMyA0LjMgNC4zIDQuOSAyLjYgMSA1LjYgMCA2LjItMnMtMS4zLTQuMy00LjMtNS4yYy0yLjYtLjctNS41IC4zLTYuMiAyLjN6bTQ0LjItMS43Yy0yLjkgLjctNC45IDIuNi00LjYgNC45IC4zIDIgMi45IDMuMyA1LjkgMi42IDIuOS0uNyA0LjktMi42IDQuNi00LjYtLjMtMS45LTMtMy4yLTUuOS0yLjl6TTI1Mi44IDhjLTEzOC43IDAtMjQ0LjggMTA1LjMtMjQ0LjggMjQ0IDAgMTEwLjkgNjkuOCAyMDUuOCAxNjkuNSAyMzkuMiAxMi44IDIuMyAxNy4zLTUuNiAxNy4zLTEyLjEgMC02LjItLjMtNDAuNC0uMy02MS40IDAgMC03MCAxNS04NC43LTI5LjggMCAwLTExLjQtMjkuMS0yNy44LTM2LjYgMCAwLTIyLjktMTUuNyAxLjYtMTUuNCAwIDAgMjQuOSAyIDM4LjYgMjUuOCAyMS45IDM4LjYgNTguNiAyNy41IDcyLjkgMjAuOSAyLjMtMTYgOC44LTI3LjEgMTYtMzMuNy01NS45LTYuMi0xMTIuMy0xNC4zLTExMi4zLTExMC41IDAtMjcuNSA3LjYtNDEuMyAyMy42LTU4LjktMi42LTYuNS0xMS4xLTMzLjMgMi42LTY3LjkgMjAuOS02LjUgNjkgMjcgNjkgMjcgMjAtNS42IDQxLjUtOC41IDYyLjgtOC41czQyLjggMi45IDYyLjggOC41YzAgMCA0OC4xLTMzLjYgNjktMjcgMTMuNyAzNC43IDUuMiA2MS40IDIuNiA2Ny45IDE2IDE3LjcgMjUuOCAzMS41IDI1LjggNTguOSAwIDk2LjUtNTguOSAxMDQuMi0xMTQuOCAxMTAuNSA5LjIgNy45IDE3IDIyLjkgMTcgNDYuNCAwIDMzLjctLjMgNzUuNC0uMyA4My42IDAgNi41IDQuNiAxNC40IDE3LjMgMTIuMSAxMDAtMzMuMiAxNjcuOC0xMjguMSAxNjcuOC0yMzkgMC0xMzguNy0xMTIuNS0yNDQtMjUxLjItMjQ0ek0xMDUuMiAzNTIuOWMtMS4zIDEtMSAzLjMgLjcgNS4yIDEuNiAxLjYgMy45IDIuMyA1LjIgMSAxLjMtMSAxLTMuMy0uNy01LjItMS42LTEuNi0zLjktMi4zLTUuMi0xem0tMTAuOC04LjFjLS43IDEuMyAuMyAyLjkgMi4zIDMuOSAxLjYgMSAzLjYgLjcgNC4zLS43IC43LTEuMy0uMy0yLjktMi4zLTMuOS0yLS42LTMuNi0uMy00LjMgLjd6bTMyLjQgMzUuNmMtMS42IDEuMy0xIDQuMyAxLjMgNi4yIDIuMyAyLjMgNS4yIDIuNiA2LjUgMSAxLjMtMS4zIC43LTQuMy0xLjMtNi4yLTIuMi0yLjMtNS4yLTIuNi02LjUtMXptLTExLjQtMTQuN2MtMS42IDEtMS42IDMuNiAwIDUuOXM0LjMgMy4zIDUuNiAyLjNjMS42LTEuMyAxLjYtMy45IDAtNi4yLTEuNC0yLjMtNC0zLjMtNS42LTJ6Il0KICAgIH07CiAgICBmYUNvZGllcGllID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNvZGllcGllIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyODQiLCAiTTQ0Mi41IDIwMi45YzMwLjcgMCAzMy41IDUzLjEtLjMgNTMuMWwtMTAuOCAwIDAgNDQuMy0yNi42IDAgMC05Ny40IDM3LjcgMHpNNDkyIDM1Mi42QzQ0OS45IDQ0NC41IDM3MC40IDUwNCAyNjggNTA0IDEzMSA1MDQgMjAgMzkzIDIwIDI1NlMxMzEgOCAyNjggOGM5Ny40IDAgMTcyLjggNTMuNyAyMTguMiAxMzguNEwzMDAuMiAyNTUuMiA0OTIgMzUyLjZ6bS0zOC41IDEyLjVsLTYwLjMtMzAuN2MtMjcuMSA0NC4zLTcwLjQgNzEuNC0xMjIuNCA3MS40LTgyLjUgMC0xNDkuMi02Ni43LTE0OS4yLTE0OC45IDAtODIuNSA2Ni43LTE0OS4yIDE0OS4yLTE0OS4yIDQ4LjQgMCA4OC45IDIzLjUgMTE2LjkgNjMuNGw1OS41LTM0LjZDNDA2LjUgNzMuOSAzNDIuNSAzNi41IDI2OCAzNi41IDE0Ni44IDM2LjUgNDguNSAxMzQuOCA0OC41IDI1NlMxNDYuOCA0NzUuNSAyNjggNDc1LjVjNzguNiAwIDE0Ni41LTQyLjEgMTg1LjUtMTEwLjR6Il0KICAgIH07CiAgICBmYVBpZWRQaXBlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaWVkLXBpcGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyYWUiLCAiTTQ0MC4yIDIzLjJjLTI2LjcgNi44LTY4LjEgMjguNS0xMTQuNiA2Ny41LTMwLjktMTcuNS02NS44LTI2LjctMTAxLjQtMjYuNy0xMTQuOSAwLTIwOCA5My4xLTIwOCAyMDhzOTMuMSAyMDggMjA4IDIwOCAyMDgtOTMuMSAyMDgtMjA4Yy4xLTU0LjEtMjEtMTA2LjEtNTguNy0xNDQuOC02LjYgOC41LTEyLjMgMTcuNy0xNyAyNy40IDI4LjkgMzIuMyA0NC44IDc0LjEgNDQuOSAxMTcuNCAwIDk3LjctNzkuNCAxNzcuMS0xNzcuMSAxNzcuMS0zMC44IDAtNjEtOC4xLTg3LjYtMjMuNCA4Mi45LTEwNy4zIDE1MC44LTM3LjggMTg0LjMtMjI2LjYgNS44LTMyLjYgMjgtOTQuMyAxMjYuMi0xNjAuMiA4LjEtNS40IDIuNC0xOC4xLTctMTUuN3pNMTA5LjMgNDA2LjRDODkuOCAzODkuOCA3NC4yIDM2OS4yIDYzLjUgMzQ2cy0xNi4zLTQ4LjUtMTYuMy03NGMwLTk3LjcgNzkuNC0xNzcuMSAxNzcuMS0xNzcuMSAyNi42IDAgNTIuOCA2LjEgNzYuNiAxNy44LTY2IDYyLjEtMTI2LjkgMTUyLjktMTkxLjYgMjkzLjh6Il0KICAgIH07CiAgICBmYVJhc3BiZXJyeVBpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJhc3BiZXJyeS1waSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmN2JiIiwgIk0zOTIuNSAyMzIuNWwtMy43LTYuNWMuMS00Ni40LTIxLjQtNjUuMy00Ni41LTc5LjcgNy42LTIgMTUuNC0zLjYgMTcuNi0xMy4yIDEzLjEtMy4zIDE1LjgtOS40IDE3LjEtMTUuOCAzLjQtMi4zIDE0LjgtOC43IDEzLjYtMTkuNyA2LjQtNC40IDEwLTEwLjEgOC4xLTE4LjEgNi45LTcuNSA4LjctMTMuNyA1LjgtMTkuNCA4LjMtMTAuMyA0LjYtMTUuNiAxLjEtMjAuOSA2LjItMTEuMiAuNy0yMy4yLTE2LjYtMjEuMi02LjktMTAuMS0yMS45LTcuOC0yNC4yLTcuOC0yLjYtMy4yLTYtNi0xNi41LTQuNy02LjgtNi4xLTE0LjQtNS0yMi4zLTIuMS05LjMtNy4zLTE1LjUtMS40LTIyLjYgLjgtMTEuMy0zLjYtMTMuOSAxLjMtMTkuNCAzLjQtMTIuMy0yLjYtMTYuMSAzLTIyIDguOWwtNi45LS4xYy0xOC42IDEwLjgtMjcuOCAzMi44LTMxLjEgNDQuMS0zLjMtMTEuMy0xMi41LTMzLjMtMzEuMS00NC4xbC02LjkgLjFjLTUuOS01LjktOS43LTExLjUtMjItOC45LTUuNi0yLTguMS03LTE5LjQtMy40LTQuNi0xLjQtOC45LTQuNC0xMy45LTQuMy0yLjYgLjEtNS41IDEtOC43IDMuNS03LjktMy0xNS41LTQtMjIuMyAyLjEtMTAuNS0xLjMtMTQgMS40LTE2LjUgNC43LTIuMyAwLTE3LjMtMi4zLTI0LjIgNy44LTE3LjMtMi0yMi43IDEwLTE2LjUgMjEuMi0zLjUgNS40LTcuMiAxMC43IDEuMSAyMC45LTIuOSA1LjctMS4xIDExLjkgNS44IDE5LjQtMS44IDggMS44IDEzLjcgOC4xIDE4LjEtMS4yIDExIDEwLjIgMTcuNCAxMy42IDE5LjcgMS4zIDYuNCA0IDEyLjQgMTcuMSAxNS44IDIuMiA5LjUgMTAgMTEuMiAxNy42IDEzLjItMjUuMSAxNC40LTQ2LjYgMzMuMy00Ni41IDc5LjdsLTMuNyA2LjVjLTI4LjggMTcuMi01NC43IDcyLjctMTQuMiAxMTcuNyAyLjYgMTQuMSA3LjEgMjQuMiAxMSAzNS40IDUuOSA0NS4yIDQ0LjUgNjYuMyA1NC42IDY4LjggMTQuOSAxMS4yIDMwLjggMjEuOCA1Mi4yIDI5LjIgMjAuMyAyMC42IDQyLjMgMjguNCA2NC4zIDI4LjRsMSAwYzIyLjEgMCA0NC03LjggNjQuMi0yOC40IDIxLjUtNy40IDM3LjMtMTggNTIuMi0yOS4yIDEwLjItMi41IDQ4LjctMjMuNiA1NC42LTY4LjggMy45LTExLjIgOC40LTIxLjMgMTEtMzUuNCA0MC42LTQ1LjEgMTQuNy0xMDAuNS0xNC0xMTcuN3ptLTIyLjItOGMtMS41IDE4LjctOTguOS02NS4xLTgyLjEtNjcuOSA0NS43LTcuNSA4My42IDE5LjIgODIuMSA2Ny45em0tNDMgOTMuMWMtMjQuNSAxNS44LTU5LjggNS42LTc4LjgtMjIuOHMtMTQuNi02NC4yIDkuOS04MCA1OS44LTUuNiA3OC44IDIyLjggMTQuNiA2NC4yLTkuOSA4MHpNMjU5LjQgMjkuM2MuOCA0LjIgMS44IDYuOCAyLjkgNy42IDUuNC01LjggOS44LTExLjcgMTYuOC0xNy4zIDAgMy4zLTEuNyA2LjggMi41IDkuNCAzLjctNSA4LjgtOS41IDE1LjUtMTMuMy0zLjIgNS42LS42IDcuMyAxLjIgOS42IDUuMS00LjQgMTAtOC44IDE5LjQtMTIuMy0yLjYgMy4xLTYuMiA2LjItMi40IDkuOCA1LjMtMy4zIDEwLjYtNi42IDIzLjEtOC45LTIuOCAzLjEtOC43IDYuMy01LjEgOS40IDYuNi0yLjUgMTQtNC40IDIyLjEtNS40LTMuOSAzLjItNy4xIDYuMy0zLjkgOC44IDcuMS0yLjIgMTYuOS01LjEgMjYuNC0yLjZsLTYgNi4xYy0uNyAuOCAxNC4xIC42IDIzLjkgLjgtMy42IDUtNy4yIDkuNy05LjMgMTguMiAxIDEgNS44IC40IDEwLjQgMC00LjcgOS45LTEyLjggMTIuMy0xNC43IDE2LjYgMi45IDIuMiA2LjggMS42IDExLjIgLjEtMy40IDYuOS0xMC40IDExLjctMTYgMTcuMyAxLjQgMSAzLjkgMS42IDkuNyAuOS01LjIgNS41LTExLjQgMTAuNS0xOC44IDE1IDEuMyAxLjUgNS44IDEuNSAxMCAxLjYtNi43IDYuNS0xNS4zIDkuOS0yMy40IDE0LjIgNCAyLjcgNi45IDIuMSAxMCAyLjEtNS43IDQuNy0xNS40IDcuMS0yNC40IDEwIDEuNyAyLjcgMy40IDMuNCA3LjEgNC4xLTkuNSA1LjMtMjMuMiAyLjktMjcgNS42IC45IDIuNyAzLjYgNC40IDYuNyA1LjgtMTUuNCAuOS01Ny4zLS42LTY1LjQtMzIuMyAxNS43LTE3LjMgNDQuNC0zNy41IDkzLjctNjIuNi0zOC40IDEyLjgtNzMgMzAtMTAyIDUzLjUtMzQuMy0xNS45LTEwLjgtNTUuOSA1LjgtNzEuOHpNMjI1IDE0My45YzI0LjItLjMgNTQuMSAxNy44IDU0IDM0LjctLjEgMTUtMjEgMjcuMS01My44IDI2LjktMzIuMS0uNC01My43LTE1LjItNTMuNi0yOS44IDAtMTEuOSAyNi4yLTMyLjUgNTMuNC0zMS44ek0xMDIgMTMxLjFjMy43LS43IDUuNC0xLjUgNy4xLTQuMS05LTIuOC0xOC43LTUuMy0yNC40LTEwIDMuMSAwIDYgLjcgMTAtMi4xLTguMS00LjMtMTYuNy03LjctMjMuNC0xNC4yIDQuMi0uMSA4LjcgMCAxMC0xLjYtNy40LTQuNS0xMy42LTkuNS0xOC44LTE1IDUuOCAuNyA4LjMgLjEgOS43LS45LTUuNi01LjYtMTIuNy0xMC40LTE2LTE3LjMgNC4zIDEuNSA4LjMgMiAxMS4yLS4xLTEuOS00LjItMTAtNi43LTE0LjctMTYuNiA0LjYgLjQgOS40IDEgMTAuNCAwLTIuMS04LjUtNS44LTEzLjMtOS4zLTE4LjIgOS44LS4xIDI0LjYgMCAyMy45LS44bC02LTYuMWM5LjUtMi41IDE5LjMgLjQgMjYuNCAyLjYgMy4yLTIuNS0uMS01LjYtMy45LTguOCA4LjEgMS4xIDE1LjQgMi45IDIyLjEgNS40IDMuNS0zLjEtMi4zLTYuMy01LjEtOS40IDEyLjUgMi4zIDE3LjggNS42IDIzLjEgOC45IDMuOC0zLjYgLjItNi43LTIuNC05LjggOS40IDMuNCAxNC4zIDcuOSAxOS40IDEyLjMgMS43LTIuMyA0LjQtNCAxLjItOS42IDYuNyAzLjggMTEuOCA4LjMgMTUuNSAxMy4zIDQuMS0yLjYgMi41LTYuMiAyLjUtOS40IDcgNS42IDExLjQgMTEuNSAxNi44IDE3LjMgMS4xLS44IDItMy40IDIuOS03LjYgMTYuNiAxNS45IDQwLjEgNTUuOSA2IDcxLjgtMjktMjMuNS02My42LTQwLjctMTAyLTUzLjUgNDkuMyAyNSA3OCA0NS4zIDkzLjcgNjIuNi04IDMxLjgtNTAgMzMuMi02NS40IDMyLjMgMy4xLTEuNCA1LjgtMy4yIDYuNy01LjgtNC0yLjgtMTcuNi0uNC0yNy4yLTUuNnptNjAuMSAyNC4xYzE2LjggMi44LTgwLjYgODYuNS04Mi4xIDY3LjktMS41LTQ4LjcgMzYuNS03NS41IDgyLjEtNjcuOXpNNTguNyAzNDJjLTIzLjctMTguOC0zMS4zLTczLjcgMTIuNi05OC4zIDI2LjUtNyA5IDEwNy44LTEyLjYgOTguM3ptOTEgOTguMmMtMTMuMyA3LjktNDUuOCA0LjctNjguOC0yNy45LTE1LjUtMjcuNC0xMy41LTU1LjItMi42LTYzLjQgMTYuMy05LjggNDEuNSAzLjQgNjAuOSAyNS42IDE2LjkgMjAgMjQuNiA1NS4zIDEwLjUgNjUuN3pNMTIzLjMgMzIwLjVjLTI0LjUtMTUuOC0yOC45LTUxLjYtOS45LTgwczU0LjMtMzguNiA3OC44LTIyLjggMjguOSA1MS42IDkuOSA4MGMtMTkuMSAyOC40LTU0LjQgMzguNi03OC44IDIyLjh6TTIyNS41IDQ5NmMtMjkuNCAxLjItNTguMi0yMy43LTU3LjgtMzIuMy0uNC0xMi43IDM1LjgtMjIuNiA1OS4zLTIyIDIzLjctMSA1NS42IDcuNSA1NS43IDE4LjkgLjUgMTEtMjguOCAzNS45LTU3LjIgMzUuNHptNTguOS0xMjQuOWMuMiAyOS43LTI2LjIgNTMuOC01OC44IDU0cy01OS4yLTIzLjgtNTkuNC01My40bDAtLjZjLS4yLTI5LjcgMjYuMi01My44IDU4LjgtNTRzNTkuMiAyMy44IDU5LjQgNTMuNGwwIC42em04Mi4yIDQyLjdjLTI1LjMgMzQuNi01OS42IDM1LjktNzIuMyAyNi4zLTEzLjMtMTIuNC0zLjItNTAuOSAxNS4xLTcyIDIwLjktMjMuMyA0My4zLTM4LjUgNTguOS0yNi42IDEwLjUgMTAuMyAxNi43IDQ5LjEtMS43IDcyLjN6bTIyLjktNzMuMmMtMjEuNSA5LjQtMzktMTA1LjMtMTIuNi05OC4zIDQzLjkgMjQuNyAzNi4zIDc5LjYgMTIuNiA5OC4zeiJdCiAgICB9OwogICAgZmFDc3MzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNzczMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjEzYyIsICJNNDgwIDMybC02NCAzNjgtMjIzLjMgODAtMTkyLjctODAgMTkuNi05NC44IDgyIDAtOCA0MC42IDExNi40IDQ0LjQgMTM0LjEtNDQuNCAxOC44LTk3LjEtMzMzLjQgMCAxNi04MiAzMzMuNyAwIDEwLjUtNTIuNy0zMzMuNCAwIDE2LjMtODIgNDA3LjQgMHoiXQogICAgfTsKICAgIGZhSHVic3BvdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJodWJzcG90IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYjIiLCAiTTIzNS44IDIxMS42Yy0yNS4xIDIzLjctNDAuOCA1Ny4zLTQwLjggOTQuNiAwIDI5LjMgOS43IDU2LjMgMjYgNzhMMTcxLjUgNDM0Yy00LjQtMS42LTkuMS0yLjUtMTQtMi41LTEwLjggMC0yMC45IDQuMi0yOC41IDExLjhzLTExLjggMTcuOC0xMS44IDI4LjYgNC4yIDIwLjkgMTEuOCAyOC41IDE3LjggMTEuNiAyOC41IDExLjZjMTAuOCAwIDIwLjktMy45IDI4LjYtMTEuNiA3LjYtNy42IDExLjgtMTcuOCAxMS44LTI4LjUgMC00LjItLjYtOC4yLTEuOS0xMi4xbDUwLTUwLjJjMjIgMTYuOSA0OS40IDI2LjkgNzkuMyAyNi45IDcxLjkgMCAxMzAtNTguMyAxMzAtMTMwLjIgMC02NS4yLTQ3LjctMTE5LjItMTEwLjItMTI4LjdsMC02MS42YzE3LjUtNy40IDI4LjItMjMuOCAyOC4yLTQyLjkgMC0yNi4xLTIwLjktNDcuOS00Ny00Ny45UzI3OS42IDQ3IDI3OS42IDczLjFjMCAxOS4xIDEwLjcgMzUuNSAyOC4yIDQyLjlsMCA2MS4yYy0xNS4yIDIuMS0yOS42IDYuNy00Mi43IDEzLjYtMjcuNi0yMC45LTExNy41LTg1LjctMTY4LjktMTI0LjggMS4yLTQuNCAyLTkgMi0xMy44IDAtMjguOC0yMy41LTUyLjItNTIuNC01Mi4yLTI4LjggMC01Mi4yIDIzLjQtNTIuMiA1Mi4yIDAgMjguOSAyMy40IDUyLjMgNTIuMiA1Mi4zIDkuOCAwIDE4LjktMi45IDI2LjgtNy42TDIzNS44IDIxMS42em04OS41IDI1LjZhNjkgNjkgMCAxIDEgMCAxMzggNjkgNjkgMCAxIDEgMC0xMzh6Il0KICAgIH07CiAgICBmYUNtcGxpZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjbXBsaWQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTM2MCIsICJNMjI2LjEgMzg4LjJjMC0uNy0uMi0xLjUtLjYtMi4xcy0xLTEuMS0xLjctMS40Yy0uNS0uMi0xLjEtLjQtMS42LS40bC0xNDkuNiAwYy0zLjEgMC02LjItLjgtOC45LTIuMnMtNS4xLTMuNS02LjktNi4xLTIuOS01LjUtMy4zLTguNiAwLTYuMiAxLjEtOS4xTDgxLjYgMjU1LjdjMi03LjIgNi4yLTEzLjUgMTItMTguMnMxMi45LTcuNCAyMC40LTcuOGwxNDguNiAwYzEuNS0uMSAyLjktLjYgNC0xLjZzMi0yLjIgMi40LTMuNmwxMC44LTQxLjFjLjQtMSAuMy0yLS4xLTIuOXMtMS4yLTEuNi0yLjEtMmMtLjQtLjItLjktLjMtMS40LS4zLS4xIDAtLjEgMC0uMiAwbC0xNDguNSAwYy0yMi4yIDEuMi00My40IDkuMi02MC44IDIzcy0zMCAzMi43LTM2LjIgNTQuMUwzLjUgMzU4LjhjLTMuMiA4LjctNC4yIDE4LTMgMjcuMXM0LjYgMTcuOSA5LjkgMjUuNSAxMi4zIDEzLjggMjAuNSAxOCAxNy4zIDYuNSAyNi41IDYuNmMxIDAgMS45IDAgMi45LS4xbDE0OC42IDBjMS41LS4xIDIuOS0uNyA0LTEuNnMyLTIuMiAyLjQtMy42bDEwLjctNDEuMWMuMi0uNSAuMy0uOSAuMy0xLjR6bTgwLjUtMzA3Yy4yLS40IC4zLS45IC4zLTEuNCAwLS41LS4xLTEtLjMtMS41cy0uNS0uOS0uOC0xLjItLjgtLjYtMS4yLS44LTEtLjMtMS41LS4zbC00MS4yIDBjLTEuNSAuMS0yLjkgLjYtNCAxLjZzLTIgMi4yLTIuNCAzLjZsLTIxLjMgODAuOSA1MS4xIDAgMjEuNC04MC45em0tMTI2LjMgMjg3bDUxLjEgMCAzMi0xMjIuNi01MS4xIDAtMzIgMTIyLjZ6TTUxMS45IDc5LjdjMC0xLS41LTEuOS0xLjItMi42cy0xLjctMS4xLTIuNi0xLjFjLS4xIDAtLjEgMC0uMiAwbC00MSAwYy0xLjUgLjEtMi45IC42LTQuMSAxLjVzLTIgMi4yLTIuNSAzLjZMMzY4LjkgNDMwLjZjLS4yIC40LS4zIC45LS4zIDEuMyAwIDEgLjQgMiAxLjEgMi43czEuNyAxLjEgMi43IDEuMWw0MS4yIDBjMS41LS4xIDIuOS0uNiA0LTEuNnMyLTIuMiAyLjQtMy42TDUxMS41IDgxLjJjLjItLjUgLjMtMSAuMy0xLjV6TTMyNC42IDM4NC41bC00MSAwYy0xLjUgLjEtMi45IC43LTQgMS42cy0yIDIuMi0yLjQgMy42bC0xMC43IDQxLjFjLS4yIC40LS4zIC45LS4zIDEuNCAwIC41IC4xIDEgLjMgMS41cy41IC45IC44IDEuMiAuOCAuNiAxLjIgLjggMSAuMyAxLjUgLjNjLjEgMCAuMiAwIC4zIDBsNDAuOSAwYzEuNS0uMSAyLjktLjYgNC0xLjZzMi0yLjIgMi40LTMuNmwxMC44LTQxLjFjLjItLjYgLjMtMS4yIC4zLTEuOHMtLjMtMS4yLS42LTEuNy0uOC0uOS0xLjMtMS4yLTEuMi0uNC0xLjgtLjRjLS4xIDAtLjIgMC0uMyAwbDAgMHpNNjM2IDc2LjFsLTQxIDBjLTEuNSAuMS0yLjkgLjYtNCAxLjVzLTIgMi4yLTIuNCAzLjZMNDk3LjEgNDMwLjZjLS4yIC40LS4yIC45LS4yIDEuMyAwIDEgLjQgMiAxLjEgMi43czEuNyAxLjEgMi43IDEuMWw0MS4xIDBjMS41LS4xIDIuOS0uNiA0LTEuNnMyLTIuMiAyLjQtMy42TDYzOS43IDgxLjJjLjItLjUgLjMtMSAuMy0xLjUtLjEtMS0uNS0xLjktMS4yLTIuNXMtMS42LTEtMi42LTFjLS4xIDAtLjEgMC0uMiAwbDAtLjF6TTM3MS42IDIyNS4ybDEwLjgtNDEuMWMuMi0uNCAuMi0uOSAuMi0xLjQgMC0xLS40LTItMS4xLTIuN3MtMS43LTEuMS0yLjctMS4xbC00MS4zIDBjLTEuNSAuMS0yLjkgLjctNCAxLjZzLTIgMi4yLTIuNCAzLjZsLTEwLjggNDEuMWMtLjIgLjUtLjMgMS0uMyAxLjVsMCAuMmMuMSAxIC41IDEuOCAxLjIgMi41czEuNiAxIDIuNiAxYy4xIDAgLjIgMCAuMyAwbDQxLjEgMGMxLjUtLjEgMi45LS42IDQtMS42czItMi4yIDIuNC0zLjZ6Il0KICAgIH07CiAgICBmYUR5YWxvZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkeWFsb2ciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM5OSIsICJNMTYgMzJsMCAxMTkuMiA2NCAwIDAtNTUuMiAxMDcuMiAwQzMwMC42IDk2IDM2OCAxNzYuMiAzNjggMjU1LjkgMzY4IDMzMiAzMDkuNCA0MTYgMTg3LjIgNDE2bC0xNzEuMiAwIDAgNjQgMTcxLjIgMEMzNDcuOSA0ODAgNDMyIDM2Ny4zIDQzMiAyNTUuOSA0MzIgMTk3LjIgNDA5LjkgMTQyLjUgMzY5LjcgMTAxLjYgMzI0LjkgNTYgMjYxLjcgMzIgMTg3LjIgMzJMMTYgMzJ6Il0KICAgIH07CiAgICBmYUVsZW1lbnRvciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlbGVtZW50b3IiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQzMCIsICJNLjUgMjU2YzAgMTQxIDExMy42IDI1NSAyNTQuNiAyNTUgMTQyIDAgMjU2LTExNCAyNTYtMjU1IDAtMTQwLTExNC0yNTMuOS0yNTYtMjUzLjktMTQxIDAtMjU0LjYgMTEzLjktMjU0LjYgMjUzLjl6TTE5Mi4xIDE1MGwwIDIxMy00MyAwIDAtMjEzIDQzIDB6bTQyIDBsMTI4IDAgMCA0My0xMjggMCAwLTQzem0xMjggODVsMCA0My0xMjggMCAwLTQzIDEyOCAwem0tMTI4IDg1bDEyOCAwIDAgNDMtMTI4IDAgMC00M3oiXQogICAgfTsKICAgIGZhRmlyc3RPcmRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmaXJzdC1vcmRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmIwIiwgIk0xMy4zIDIyOS4yYy4xLS4xIC4yLS4zIC4zLS40IDAgLjEgMCAuMy0uMSAuNGwtLjIgMHpNMjI0LjQgOTYuNmMtNy4xIDAtMTQuNiAuNi0yMS40IDEuN2wzLjcgNjcuNC0yMi02NGMtMTQuMyAzLjctMjcuNyA5LjQtNDAgMTYuNmwyOS40IDYxLjQtNDUuMS01MC45Yy0xMS40IDguOS0yMS43IDE5LjEtMzAuNiAzMC45bDUwLjYgNDUuNC02MS4xLTI5LjdjLTcuMSAxMi4zLTEyLjkgMjUuNy0xNi42IDQwbDY0LjMgMjIuNi02OC00Yy0uOSA3LjEtMS40IDE0LjYtMS40IDIycy42IDE0LjYgMS40IDIxLjdsNjcuNy00LTY0IDIyLjZjMy43IDE0LjMgOS40IDI3LjcgMTYuNiA0MC4zTDE0OSAzMDYuOSA5OC4xIDM1MmM4LjkgMTEuNyAxOS4xIDIyLjMgMzAuOSAzMC45bDQ0LjktNTAuOS0yOS41IDYxLjRjMTIuMyA3LjQgMjUuNyAxMy4xIDQwIDE2LjlsMjIuMy02NC42LTQgNjhjNy4xIDEuMSAxNC42IDEuNyAyMS43IDEuNyA3LjQgMCAxNC42LS42IDIxLjctMS43bC00LTY4LjYgMjIuNiA2NS4xYzE0LjMtNCAyNy43LTkuNCA0MC0xNi45bC0yOS40LTYxLjMgNDQuOSA1MC45YzExLjctOC45IDIyLTE5LjEgMzAuNi0zMC45bC01MC42LTQ1LjEgNjEuMSAyOS40YzcuMS0xMi4zIDEyLjktMjUuNyAxNi42LTQwLjNsLTY0LTIyLjMgNjcuNCA0YzEuMS03LjEgMS40LTE0LjMgMS40LTIxLjdzLS4zLTE0LjktMS40LTIybC02Ny43IDQgNjQtMjIuM2MtMy43LTE0LjMtOS4xLTI4LTE2LjYtNDAuM2wtNjAuOSAyOS43IDUwLjYtNDUuNGMtOC45LTExLjctMTkuMS0yMi0zMC42LTMwLjlsLTQ1LjEgNTAuOSAyOS40LTYxLjFjLTEyLjMtNy40LTI1LjctMTMuMS00MC0xNi45bC0yMi4zIDY0LjMgNC02Ny43Yy03LjEtMS4yLTE0LjMtMS43LTIxLjctMS43ek00NDMuOCAxMjhMNDQzLjggMzg0IDIyNC40IDUxMiA1IDM4NCA1IDEyOCAyMjQuNCAwIDQ0My44IDEyOHptLTE3LjEgMTAuM2wtMjAyLjMtMTE3LjQtMjAyLjMgMTE3LjQgMCAyMzUuMSAyMDIuMyAxMTcuNyAyMDIuMy0xMTcuNyAwLTIzNS4xek0yMjQuNCAzNy4xbDE4Ny43IDEwOS40IDAgMjE4LjktMTg3LjcgMTA5LjUtMTg3LjctMTA5LjUgMC0yMTguOCAxODcuNy0xMDkuNXptMCA1MC45Yy05Mi4zIDAtMTY2LjkgNzUuMS0xNjYuOSAxNjggMCA5Mi42IDc0LjYgMTY3LjcgMTY2LjkgMTY3LjcgOTIgMCAxNjYuOS03NS4xIDE2Ni45LTE2Ny43IDAtOTIuOS03NC45LTE2OC0xNjYuOS0xNjh6Il0KICAgIH07CiAgICBmYURyaWJiYmxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRyaWJiYmxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxN2QiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNNDIwIDEyMi40YzI5LjUgMzYgNDcuNCA4MiA0Ny44IDEzMi03LTEuNS03Ny0xNS43LTE0Ny41LTYuOC01LjgtMTQtMTEuMi0yNi40LTE4LjYtNDEuNiA3OC4zLTMyIDExMy44LTc3LjUgMTE4LjMtODMuNXpNMzk2LjQgOTcuOWMtMy44IDUuNC0zNS43IDQ4LjMtMTExIDc2LjUtMzQuNy02My44LTczLjItMTE2LjItNzktMTI0IDY3LjItMTYuMiAxMzggMS4zIDE5MC4xIDQ3LjV6TTE2NS45IDY0LjZjNS42IDcuNyA0My40IDYwLjEgNzguNSAxMjIuNS05OS4xIDI2LjMtMTg2LjQgMjUuOS0xOTUuOCAyNS44IDEzLjctNjUuNyA1OC0xMjAuNCAxMTcuMy0xNDguM3pNNDQuMiAyNTYuM2MwLTIuMiAwLTQuMyAuMS02LjUgOS4zIC4yIDExMS45IDEuNSAyMTcuNy0zMC4xIDYuMSAxMS45IDExLjkgMjMuOSAxNy4yIDM1LjktNzYuNiAyMS42LTE0Ni4yIDgzLjUtMTgwLjUgMTQyLjMtMzMuOC0zNy42LTU0LjUtODcuMi01NC41LTE0MS42ek0xMjYgNDIzLjRjMjIuMS00NS4yIDgyLjItMTAzLjYgMTY3LjYtMTMyLjggMjkuNyA3Ny4zIDQyIDE0Mi4xIDQ1LjIgMTYwLjYtNjguMSAyOS0xNTAgMjEuMS0yMTIuOC0yNy45em0yNDguNCA4LjVjLTIuMi0xMi45LTEzLjQtNzQuOS00MS4yLTE1MSA2Ni40LTEwLjYgMTI0LjcgNi44IDEzMS45IDkuMS05LjQgNTguOS00My4zIDEwOS44LTkwLjggMTQyeiJdCiAgICB9OwogICAgZmFMaW5rZWRpbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsaW5rZWRpbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDhjIiwgIk00MTYgMzJMMzEuOSAzMkMxNC4zIDMyIDAgNDYuNSAwIDY0LjNMMCA0NDcuN0MwIDQ2NS41IDE0LjMgNDgwIDMxLjkgNDgwTDQxNiA0ODBjMTcuNiAwIDMyLTE0LjUgMzItMzIuM2wwLTM4My40QzQ0OCA0Ni41IDQzMy42IDMyIDQxNiAzMnpNMTM1LjQgNDE2bC02Ni40IDAgMC0yMTMuOCA2Ni41IDAgMCAyMTMuOC0uMSAwek0xMDIuMiA5NmEzOC41IDM4LjUgMCAxIDEgMCA3NyAzOC41IDM4LjUgMCAxIDEgMC03N3pNMzg0LjMgNDE2bC02Ni40IDAgMC0xMDRjMC0yNC44LS41LTU2LjctMzQuNS01Ni43LTM0LjYgMC0zOS45IDI3LTM5LjkgNTQuOWwwIDEwNS44LTY2LjQgMCAwLTIxMy44IDYzLjcgMCAwIDI5LjIgLjkgMGM4LjktMTYuOCAzMC42LTM0LjUgNjIuOS0zNC41IDY3LjIgMCA3OS43IDQ0LjMgNzkuNyAxMDEuOWwwIDExNy4yeiJdCiAgICB9OwogICAgZmFDY1BheXBhbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYy1wYXlwYWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFmNCIsICJNMTg2LjMgMjU4LjJjMCAxMi4yLTkuNyAyMS41LTIyIDIxLjUtOS4yIDAtMTYtNS4yLTE2LTE1IDAtMTIuMiA5LjUtMjIgMjEuNy0yMiA5LjMgMCAxNi4zIDUuNyAxNi4zIDE1LjV6TTgwLjUgMjA5LjdsLTQuNyAwYy0xLjUgMC0zIDEtMy4yIDIuN2wtNC4zIDI2LjcgOC4yLS4zYzExIDAgMTkuNS0xLjUgMjEuNS0xNC4yIDIuMy0xMy40LTYuMi0xNC45LTE3LjUtMTQuOXptMjg0IDBsLTQuNSAwYy0xLjggMC0zIDEtMy4yIDIuN2wtNC4yIDI2LjcgOC0uM2MxMyAwIDIyLTMgMjItMTgtLjEtMTAuNi05LjYtMTEuMS0xOC4xLTExLjF6TTU3NiA4MGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsNDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTEyOC4zIDIxNS40YzAtMjEtMTYuMi0yOC0zNC43LTI4bC00MCAwYy0yLjUgMC01IDItNS4yIDQuN0wzMiAyOTQuMmMtLjMgMiAxLjIgNCAzLjIgNGwxOSAwYzIuNyAwIDUuMi0yLjkgNS41LTUuN2w0LjUtMjYuNmMxLTcuMiAxMy4yLTQuNyAxOC00LjcgMjguNiAwIDQ2LjEtMTcgNDYuMS00NS44em04NC4yIDguOGwtMTkgMGMtMy44IDAtNCA1LjUtNC4yIDguMi01LjgtOC41LTE0LjItMTAtMjMuNy0xMC0yNC41IDAtNDMuMiAyMS41LTQzLjIgNDUuMiAwIDE5LjUgMTIuMiAzMi4yIDMxLjcgMzIuMiA5IDAgMjAuMi00LjkgMjYuNS0xMS45LS41IDEuNS0xIDQuNy0xIDYuMiAwIDIuMyAxIDQgMy4yIDRsMTcuMiAwYzIuNyAwIDUtMi45IDUuNS01LjdsMTAuMi02NC4zYy4zLTEuOS0xLjItMy45LTMuMi0zLjl6TTI1MyAzMjIuMWw2My43LTkyLjZjLjUtLjUgLjUtMSAuNS0xLjcgMC0xLjctMS41LTMuNS0zLjItMy41bC0xOS4yIDBjLTEuNyAwLTMuNSAxLTQuNSAyLjVsLTI2LjUgMzktMTEtMzcuNWMtLjgtMi4yLTMtNC01LjUtNGwtMTguNyAwYy0xLjcgMC0zLjIgMS44LTMuMiAzLjUgMCAxLjIgMTkuNSA1Ni44IDIxLjIgNjIuMS0yLjcgMy44LTIwLjUgMjguNi0yMC41IDMxLjYgMCAxLjggMS41IDMuMiAzLjIgMy4ybDE5LjIgMGMxLjgtLjEgMy41LTEuMSA0LjUtMi42ek00MTIuMyAyMTUuNGMwLTIxLTE2LjItMjgtMzQuNy0yOGwtMzkuNyAwYy0yLjcgMC01LjIgMi01LjUgNC43bC0xNi4yIDEwMmMtLjIgMiAxLjMgNCAzLjIgNGwyMC41IDBjMiAwIDMuNS0xLjUgNC0zLjJsNC41LTI5YzEtNy4yIDEzLjItNC43IDE4LTQuNyAyOC40IDAgNDUuOS0xNyA0NS45LTQ1Ljh6bTg0LjIgOC44bC0xOSAwYy0zLjggMC00IDUuNS00LjMgOC4yLTUuNS04LjUtMTQtMTAtMjMuNy0xMC0yNC41IDAtNDMuMiAyMS41LTQzLjIgNDUuMiAwIDE5LjUgMTIuMiAzMi4yIDMxLjcgMzIuMiA5LjMgMCAyMC41LTQuOSAyNi41LTExLjktLjMgMS41LTEgNC43LTEgNi4yIDAgMi4zIDEgNCAzLjIgNGwxNy4zIDBjMi43IDAgNS0yLjkgNS41LTUuN2wxMC4yLTY0LjNjLjMtMS45LTEuMi0zLjktMy4yLTMuOXpNNTQ0IDE5MC45YzAtMi0xLjUtMy41LTMuMi0zLjVsLTE4LjUgMGMtMS41IDAtMyAxLjItMy4yIDIuN2wtMTYuMiAxMDQtLjMgLjVjMCAxLjggMS41IDMuNSAzLjUgMy41bDE2LjUgMGMyLjUgMCA1LTIuOSA1LjItNS43bDE2LjItMTAxLjIgMC0uM3ptLTkwIDUxLjhjLTEyLjIgMC0yMS43IDkuNy0yMS43IDIyIDAgOS43IDcgMTUgMTYuMiAxNSAxMiAwIDIxLjctOS4yIDIxLjctMjEuNSAuMS05LjgtNi45LTE1LjUtMTYuMi0xNS41eiJdCiAgICB9OwogICAgZmFEaGwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGhsIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY3OTAiLCAiTTIzOCAzMDEuMmw1OC43IDAgMjIuMy0zMC4yLTU4LjcgMC0yMi4zIDMwLjJ6TTAgMjgyLjlsMCA2LjQgODEuOCAwIDQuNy02LjQtODYuNSAwek0xNzIuOSAyNzFjLTguNyAwLTYtMy42LTQuNi01LjUgMi44LTMuOCA3LjYtMTAuNCAxMC40LTE0LjFzMi44LTUuOS0yLjgtNS45bC01MSAwLTQxLjEgNTUuOCAxMDAuMSAwYzMzLjEgMCA1MS41LTIyLjUgNTcuMi0zMC4zbC02OC4yIDB6bTMxNy41LTYuOWwzOS4zLTUzLjQtNjIuMiAwLTM5LjMgNTMuNCA2Mi4yIDB6TTk1LjMgMjcxbC05NS4zIDAgMCA2LjQgOTAuNiAwIDQuNy02LjR6bTExMS0yNi42Yy0yLjggMy44LTcuNSAxMC40LTEwLjMgMTQuMi0xLjQgMi00LjEgNS41IDQuNiA1LjVsNDUuNiAwczcuMy0xMCAxMy41LTE4LjRjOC40LTExLjQgLjctMzUtMjkuMi0zNWwtMTE3LjkgMC0yMC40IDI3LjggMTExLjQgMGM1LjYgMCA1LjUgMi4yIDIuNyA1Ljl6TTAgMzAxLjJsNzMuMSAwIDQuNy02LjQtNzcuOCAwIDAgNi40em0zMjMgMGw1OC43IDAgMjIuMy0zMC4yLTU4LjcgMGMtLjEgMC0yMi4zIDMwLjItMjIuMyAzMC4yem0yMjIgLjFsOTUgMCAwLTYuNC05MC4zIDAtNC43IDYuNHpNNTY3LjMgMjcxbC00LjcgNi40IDc3LjQgMCAwLTYuNC03Mi43IDB6bS0xMy41IDE4LjNsODYuMiAwIDAtNi40LTgxLjUgMC00LjcgNi40ek0zODkuNiAyMTAuN2wtMjIuNSAzMC42LTI2LjIgMCAyMi41LTMwLjYtNTguNyAwLTM5LjMgNTMuNCAxNDMuNiAwIDM5LjMtNTMuNC01OC43IDB6TTQyMy4xIDI3MXMtNC4zIDUuOS02LjQgOC43Yy03LjQgMTAtLjkgMjEuNiAyMy4yIDIxLjZsOTQuMyAwIDIyLjMtMzAuMy0xMzMuNCAweiJdCiAgICB9OwogICAgZmFUZXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGV4IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU3ZmYiLCAiTTYyMC44IDk1LjRjLTMwLjggLjQtNDIuMSAxNi42LTQ3LjcgMjQuNWwtLjEgLjEtNTUuNyA4MC41IDgyLjggMTIxLjFjNy41IDEwLjYgMTEuMyAxMi41IDM1LjQgMTIuNWwwIDkuMWMtOS4xLS43LTI4LS43LTM3LjctLjctMTIuNCAwLTMwLjggMC00Mi45IC43bDAtOS4xYzEzLjItLjggMTYuNi03LjMgMTYuNi0xMC4yIDAtMS4xIDAtMi4zLTMtNi40bC02NS41LTk2LjMtNjAuMiA4Ny45Yy0xLjkgMi43LTMuOCA1LjQtMy44IDEwLjIgMCA2LjEgMy40IDEzLjYgMTUgMTQuN2wwIDkuMWMtOS40LS43LTI3LjEtLjctMzcuMi0uN2wtMi44IDAtMTEuNyA4Mi42LTE5NS45IDAgMC05LjFjMjYuNyAwIDMwLjkgMCAzMC45LTE2LjlsMC0yMDMuMmMwLTE2LjktNC4zLTE2LjktMzAuOS0xNi45bDAtMTAuMyAxOS44IDBjLTQuOC02MS4xLTEwLjgtNzEuNy02OC03MS44bC0yMC43IDBjLTYuOCAxLjUtNi44IDYuMS02LjggMTQuNGwwIDIwNWMwIDEzLjYgMS4xIDE3LjggMzIuNCAxNy44bDEwLjUgMCAwIDkuMS0uNCAwYy0xNy45LS4zLTM2LjctLjctNTQuOS0uN3MtMzYuOSAuMy01NC44IC43bC0uNiAwIDAtOS4xIDEwLjcgMGMzMS43IDAgMzIuOC00LjEgMzIuOC0xNy44bDAtMjA1YzAtOC43IDAtMTMuMi03LjItMTQuM2wtMjAuOCAwYy01OC40IDAtNjMuNyAxMC45LTY4LjYgNzMuM2wtNi44IDAgNi4zLTgzLjMgMjE3LjUgMCA2LjEgODEuOCAxNjQuMSAwIDkgODMuMy02LjggMGMtNS4zLTQ5LjgtMTIuMS03My03MC4zLTczbC01MS41IDBjLTE1IDAtMTUuOCAxLjktMTUuOCAxNC42bDAgOTMuMyAzNS41IDBjMzUuNSAwIDM4LjktMTIuOCAzOC45LTQ0bDYgMCAwIDk3LjktNiAwYzAtMzEuOC0zLjQtNDQuOC0zOC45LTQ0LjhsLTM1LjUgMCAwIDEwNS4yYzAgMTMgLjcgMTQuOCAxNS44IDE0LjhsNTIuMiAwYzYxLjEgMCA2OS45LTI1LjggNzcuNC03My42LTcuNyAwLTE2LjMgLjItMjIuMiAuN2wwLTkuMWM3LjIgMCAzMS43LS40IDQ3LjgtMjMuOGw2NS41LTk1LjctNzIuNy0xMDYuN2MtOC4zLTExLjctMTUuMS0xMi41LTM1LjgtMTIuNWwwLTkuMWM5LjEgLjcgMjcuOSAuNyAzNy43IC43IDEyLjQgMCAzMC44IDAgNDIuOS0uN2wwIDkuMWMtMTIuNSAuNC0xNi42IDYuOC0xNi42IDEwLjIgMCAxLjEgLjQgMi4zIDMgNi40bDU1LjcgODEuNiA0OS43LTcyLjFjMi43LTMuNyA0LjUtNi44IDQuNS0xMS4zIDAtNi4xLTMtMTMuNi0xNS0xNC44bDAtOS4xYzkuNCAuNyAyNC44IC43IDM3LjIgLjcgOSAwIDIzLjMgMCAzMi0uN2wwIDkuMXoiXQogICAgfTsKICAgIGZhU2hvcGlmeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzaG9waWZ5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwNTciLCAiTTM4OC41IDEwNC4xYy0uMi0xLjEtLjctMi4xLTEuNS0yLjhzLTEuOC0xLjItMi45LTEuMmMtMiAwLTM3LjItLjgtMzcuMi0uOHMtMjEuNi0yMC44LTI5LjYtMjguOGwwIDQzMi43IDEyNS43LTMxLjJzLTU0LTM2NS41LTU0LjQtMzY3Ljl6TTI4OC45IDcwLjVjLTEuOS02LjEtNC4zLTExLjktNy4yLTE3LjYtMTAuNC0yMC0yNi0zMC45LTQ0LjQtMzAuOS0xLjMgMC0yLjcgLjEtNCAuNC0uNC0uOC0xLjItMS4yLTEuNi0yLTgtOC44LTE4LjQtMTIuOC0zMC44LTEyLjQtMjQgLjgtNDggMTgtNjcuMiA0OC44LTEzLjYgMjEuNi0yNCA0OC44LTI2LjggNzAuMS0yNy42IDguNC00Ni44IDE0LjQtNDcuMiAxNC44LTE0IDQuNC0xNC40IDQuOC0xNiAxOC0xLjIgMTAtMzggMjkxLjgtMzggMjkxLjhsMzAyLjYgNTIuNSAwLTQzOC4zYy0xLjUgLjEtMi45IC4yLTQuNCAuNCAwIDAtNS42IDEuNi0xNC44IDQuNHpNMjMzLjYgODcuN2MtMTYgNC44LTMzLjYgMTAuNC01MC44IDE1LjYgNC44LTE4LjggMTQuNC0zNy42IDI1LjYtNTAgNC40LTQuNCAxMC40LTkuNiAxNy4yLTEyLjggNi44IDE0LjQgOC40IDM0IDggNDcuMnpNMjAwLjggMjQuNGM1LS4yIDEwIDEuMSAxNC40IDMuNi02LjQgMy4yLTEyLjggOC40LTE4LjggMTQuNC0xNS4yIDE2LjQtMjYuOCA0Mi0zMS42IDY2LjUtMTQuNCA0LjQtMjguOCA4LjgtNDIgMTIuOCA4LjgtMzguNCA0MS4yLTk2LjQgNzgtOTcuMnpNMTU0LjQgMjQ0LjZjMS42IDI1LjYgNjkuMiAzMS4yIDczLjIgOTEuNyAyLjggNDcuNi0yNS4yIDgwLjEtNjUuNiA4Mi41LTQ4LjggMy4yLTc1LjYtMjUuNi03NS42LTI1LjZsMTAuNC00NHMyNi44IDIwLjQgNDguNCAxOC44YzE0LS44IDE5LjItMTIuNCAxOC44LTIwLjQtMi0zMy42LTU3LjItMzEuNi02MC44LTg2LjktMy4yLTQ2LjQgMjcuMi05My4zIDk0LjUtOTcuNyAyNi0xLjYgMzkuMiA0LjggMzkuMiA0LjhsLTE1LjIgNTcuNnMtMTcuMi04LTM3LjYtNi40Yy0yOS42IDItMzAgMjAuOC0yOS42IDI1LjZ6TTI0OS42IDgyLjljMC0xMi0xLjYtMjkuMi03LjItNDMuNiAxOC40IDMuNiAyNy4yIDI0IDMxLjIgMzYuNC03LjIgMi0xNS4yIDQuNC0yNCA3LjJ6Il0KICAgIH07CiAgICBmYVNxdWFyZVJlZGRpdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcmVkZGl0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInJlZGRpdC1zcXVhcmUiXSwgImYxYTIiLCAiTTY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMnpNMzA1LjkgMTY2LjRjMjAuNiAwIDM3LjMtMTYuNyAzNy4zLTM3LjNzLTE2LjctMzcuMy0zNy4zLTM3LjNjLTE4IDAtMzMuMSAxMi44LTM2LjYgMjkuOC0zMC4yIDMuMi01My44IDI4LjgtNTMuOCA1OS45bDAgLjJjLTMyLjggMS40LTYyLjggMTAuNy04Ni42IDI1LjUtOC44LTYuOC0xOS45LTEwLjktMzItMTAuOS0yOC45IDAtNTIuMyAyMy40LTUyLjMgNTIuMyAwIDIxIDEyLjMgMzkgMzAuMSA0Ny40IDEuNyA2MC43IDY3LjkgMTA5LjYgMTQ5LjMgMTA5LjZzMTQ3LjYtNDguOSAxNDkuMy0xMDkuN2MxNy43LTguNCAyOS45LTI2LjQgMjkuOS00Ny4zIDAtMjguOS0yMy40LTUyLjMtNTIuMy01Mi4zLTEyIDAtMjMgNC0zMS45IDEwLjgtMjQtMTQuOS01NC4zLTI0LjItODcuNS0yNS40bDAtLjFjMC0yMi4yIDE2LjUtNDAuNyAzNy45LTQzLjcgMy45IDE2LjUgMTguNyAyOC43IDM2LjMgMjguN2wuMi0uMnpNMTU1IDI0OC4xYzE0LjYgMCAyNS44IDE1LjQgMjUgMzQuNHMtMTEuOCAyNS45LTI2LjUgMjUuOS0yNy41LTcuNy0yNi42LTI2LjcgMTMuNS0zMy41IDI4LjEtMzMuNWwwLS4xem0xNjYuNCAzMy41Yy45IDE5LTEyIDI2LjctMjYuNiAyNi43cy0yNS42LTYuOS0yNi41LTI1LjkgMTAuMy0zNC40IDI1LTM0LjQgMjcuMyAxNC42IDI4LjEgMzMuNWwwIC4xem0tNDIuMSA0OS42Yy05IDIxLjUtMzAuMyAzNi43LTU1LjEgMzYuN3MtNDYuMS0xNS4xLTU1LjEtMzYuN2MtMS4xLTIuNiAuNy01LjQgMy40LTUuNyAxNi4xLTEuNiAzMy41LTIuNSA1MS43LTIuNXMzNS42IC45IDUxLjcgMi41YzIuNyAuMyA0LjUgMy4xIDMuNCA1Ljd6Il0KICAgIH07CiAgICBmYVJlZGRpdFNxdWFyZSA9IGZhU3F1YXJlUmVkZGl0OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNOYyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLW5jIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZTgiLCAiTTI1NS42IDhDMzk1LjQgOCA1MDQgMTE1LjkgNTA0IDI1NiA1MDQgNDAzLjIgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuMSA1MDQgOCAzOTMuMiA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHpNNjMuOCAxODkuMWMtNy40IDIwLjQtMTEuMSA0Mi43LTExLjEgNjYuOSAwIDExMC45IDkyLjEgMjAyLjQgMjAzLjcgMjAyLjQgMTIyLjQgMCAxNzcuMi0xMDEuOCAxNzguNS0xMDQuMWwtOTMuNC00MS42Yy03LjcgMzcuMS00MS4yIDUzLTY4LjIgNTUuNGwwIDM4LjEtMjguOCAwIDAtMzguMmMtMjcuNS0uMy01Mi42LTEwLjItNzUuMy0yOS43bDM0LjEtMzQuNWMzMS43IDI5LjQgODYuNCAzMS44IDg2LjQtMi4yIDAtNi4yLTIuMi0xMS4yLTYuNi0xNS4xLTE0LjItNi0xLjgtLjEtMjE5LjMtOTcuNHpNMjU2LjQgNTIuM0MyMTggNTIuMyAxNDQgNjEgODUuOSAxNDUuM2w5NC44IDQyLjVjMTAtMzEuMyA0MC40LTQyLjkgNjMuOC00NC4zbDAtMzguMSAyOC44IDAgMCAzOC4xYzIyLjcgMS4yIDQzLjQgOC45IDYyIDIzTDMwMyAxOTkuN2MtNDIuNy0yOS45LTgzLjUtOC03MCAxMS4xIDUzLjQgMjQuMSA0My44IDE5LjggOTMgNDEuNmwxMjcuMSA1Ni43YzQuMS0xNy40IDYuMi0zNS4xIDYuMi01My4xIDAtNTctMTkuOC0xMDUtNTkuMy0xNDMuOS0zOS4zLTM5LjktODcuMi01OS44LTE0My42LTU5Ljh6Il0KICAgIH07CiAgICBmYUdhbGFjdGljUmVwdWJsaWMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2FsYWN0aWMtcmVwdWJsaWMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUwYyIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMSAwIDQ5NiAyNDggMjQ4IDAgMSAxIDAtNDk2em0wIDE2LjVhMjMxLjUgMjMxLjUgMCAxIDAgMCA0NjIuOSAyMzEuNSAyMzEuNSAwIDEgMCAwLTQ2Mi45em0yNy42IDIxLjhsMCAyNC42YzMwLjMgNC41IDU5IDE2LjMgODMuNiAzNC41bDE3LjQtMTcuNGMtMjguNy0yMi4xLTYzLjMtMzYuOS0xMDEtNDEuOHptLTU1LjQgLjFjLTM3LjYgNC45LTcyLjIgMTkuOC0xMDAuOSA0MS45bDE3LjMgMTcuNCAuMSAwYzI0LjEtMTcuOCA1Mi42LTMwLjEgODMuNS0zNC43bDAtMjQuNXptMTIuMiA1MC4ybDAgODIuOWMtMTAgMi0xOS40IDUuOS0yNy43IDExLjRsLTU4LjYtNTguNi0yMS45IDIxLjkgNTguNyA1OC43Yy01LjUgOC4yLTkuNCAxNy42LTExLjUgMjcuNmwtODIuOSAwIDAgMzEgODIuOSAwYzIgMTAgNiAxOS4zIDExLjUgMjcuNWwtNTguNyA1OC43IDIxLjkgMjEuOSA1OC42LTU4LjZjOC40IDUuNiAxNy44IDkuNSAyNy43IDExLjVsMCA4Mi45IDMxIDAgMC04Mi45YzEwLTIgMTkuNC02LjEgMjcuNi0xMS41bDU4LjcgNTguNyAyMS45LTIxLjktNTguNy01OC43YzUuNS04LjIgOS41LTE3LjUgMTEuNS0yNy41bDgyLjkgMCAwLTMxLTgyLjkgMGMtMi0xMC02LTE5LjQtMTEuNS0yNy42bDU4LjctNTguNy0yMS45LTIxLjktNTguNyA1OC43Yy04LjItNS41LTE3LjYtOS41LTI3LjYtMTEuNWwwLTgyLjktMzEgMHptMTgzLjIgMzAuN2wtMTcuNCAxNy40YzE4LjMgMjQuNiAzMC4yIDUzLjQgMzQuNyA4My43bDI0LjYgMGMtNS0zNy43LTE5LjgtNzIuMy00MS45LTEwMXptLTMzNS42IC4xYy0yMi4xIDI4LjctMzYuOSA2My4zLTQxLjggMTAwLjlsMjQuNiAwYzQuNi0zMSAxNi44LTU5LjQgMzQuNi04My41TDg4LjIgMTI3LjR6TTQ2LjMgMjgzLjdjNC45IDM3LjYgMTkuNyA3Mi4yIDQxLjggMTAwLjlsMTcuNC0xNy40Qzg3LjcgMzQzLjEgNzUuNiAzMTQuNiA3MSAyODMuN2wtMjQuNiAwIDAgMHptMzk0LjcgMGMtNC42IDMxLTE2LjggNTkuNS0zNC43IDgzLjZsMTcuNCAxNy40YzIyLjEtMjguNyAzNy02My4zIDQxLjktMTAxbC0yNC42IDB6TTE0NC43IDQwNi40bC0xNy40IDE3LjRjMjguNyAyMi4xIDYzLjMgMzcgMTAxIDQxLjlsMC0yNC42Yy0zMS00LjYtNTkuNS0xNi44LTgzLjYtMzQuNnptMjIyLjUgMGMtMjQuMSAxNy44LTUyLjYgMzAuMS04My42IDM0LjdsMCAyNC42YzM3LjctNC45IDcyLjItMTkuOCAxMDEtNDEuOGwtMTcuMy0xNy40LS4xIDB6Il0KICAgIH07CiAgICBmYUZhY2Vib29rID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZhY2Vib29rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjJlM10sICJmMDlhIiwgIk01MTIgMjU2QzUxMiAxMTQuNiAzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZDMCAzNzYgODIuNyA0NzYuOCAxOTQuMiA1MDQuNWwwLTE3MC4zLTUyLjggMCAwLTc4LjIgNTIuOCAwIDAtMzMuN2MwLTg3LjEgMzkuNC0xMjcuNSAxMjUtMTI3LjUgMTYuMiAwIDQ0LjIgMy4yIDU1LjcgNi40bDAgNzAuOGMtNi0uNi0xNi41LTEtMjkuNi0xLTQyIDAtNTguMiAxNS45LTU4LjIgNTcuMmwwIDI3LjggODMuNiAwLTE0LjQgNzguMi02OS4zIDAgMCAxNzUuOUM0MTMuOCA0OTQuOCA1MTIgMzg2LjkgNTEyIDI1NnoiXQogICAgfTsKICAgIGZhR2l0bGFiID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdpdGxhYiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjk2IiwgIk01MDQgMjA0LjZsLS43LTEuOC02OS43LTE4MS44Yy0xLjQtMy42LTMuOS02LjYtNy4yLTguNi0yLjQtMS42LTUuMS0yLjUtOC0yLjhzLTUuNyAuMS04LjQgMS4xLTUuMSAyLjctNy4xIDQuOGMtMS45IDIuMS0zLjMgNC43LTQuMSA3LjRsLTQ3IDE0NC0xOTAuNSAwLTQ3LjEtMTQ0Yy0uOC0yLjgtMi4yLTUuMy00LjEtNy40LTItMi4xLTQuNC0zLjctNy4xLTQuOC0yLjYtMS01LjUtMS40LTguNC0xLjFzLTUuNiAxLjItOCAyLjhjLTMuMiAyLTUuOCA1LjEtNy4yIDguNkw5LjggMjAyLjggOSAyMDQuNmMtMTAgMjYuMi0xMS4zIDU1LTMuNSA4MiA3LjcgMjYuOSAyNCA1MC43IDQ2LjQgNjcuNmwuMyAuMiAuNiAuNCAxMDYgNzkuNWMzOC41IDI5LjEgNjYuNyA1MC4zIDg0LjYgNjMuOSAzLjcgMS45IDguMyA0LjMgMTMgNC4zczkuMy0yLjQgMTMtNC4zYzE3LjktMTMuNSA0Ni4xLTM0LjkgODQuNi02My45bDEwNi43LTc5LjkgLjMtLjNjMjIuNC0xNi45IDM4LjctNDAuNiA0NS42LTY3LjUgOC42LTI3IDcuNC01NS44LTIuNi04MnoiXQogICAgfTsKICAgIGZhUXEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicXEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFkNiIsICJNNDM0LjEgNDIwLjRjLTExLjUgMS40LTQ0LjktNTIuNy00NC45LTUyLjcgMCAzMS4zLTE2LjEgNzIuMi01MSAxMDEuOCAxNi44IDUuMiA1NC44IDE5LjIgNDUuOCAzNC40LTcuMyAxMi4zLTEyNS41IDcuOS0xNTkuNiA0LTM0LjEgMy44LTE1Mi4zIDguMy0xNTkuNi00LTktMTUuMiAyOC45LTI5LjIgNDUuOC0zNC40LTM0LjktMjkuNS01MS4xLTcwLjQtNTEuMS0xMDEuOCAwIDAtMzMuMyA1NC4xLTQ0LjkgNTIuNy01LjQtLjYtMTIuNC0yOS42IDkuMy05OS43IDEwLjMtMzMgMjItNjAuNSA0MC4xLTEwNS44LTMuMS0xMTYuOSA0NS4yLTIxNSAxNjAuMy0yMTUgMTEzLjcgMCAxNjMuMiA5Ni4xIDE2MC4zIDIxNSAxOC4xIDQ1LjIgMjkuOSA3Mi45IDQwLjEgMTA1LjggMjEuOCA3MC4xIDE0LjcgOTkuMSA5LjMgOTkuN3oiXQogICAgfTsKICAgIGZhU3RyaXBlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0cmlwZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDI5IiwgIk0xNjUgMTQ0LjdsLTQzLjMgOS4yLS4yIDE0Mi40YzAgMjYuMyAxOS44IDQzLjMgNDYuMSA0My4zIDE0LjYgMCAyNS4zLTIuNyAzMS4yLTUuOWwwLTMzLjhjLTUuNyAyLjMtMzMuNyAxMC41LTMzLjctMTUuN2wwLTYzLjIgMzMuNyAwIDAtMzcuOC0zMy43IDAtLjEtMzguNXptODkuMSA1MS42bC0yLjctMTMuMS0zOC40IDAgMCAxNTMuMiA0NC4zIDAgMC0xMDMuMWMxMC41LTEzLjggMjguMi0xMS4xIDMzLjktOS4zbDAtNDAuOGMtNi0yLjEtMjYuNy02LTM3LjEgMTMuMXpNMzQ2LjQgMTI0bC00NC42IDkuNSAwIDM2LjIgNDQuNi05LjUgMC0zNi4yek00NC45IDIyOC4zYzAtNi45IDUuOC05LjYgMTUuMS05LjcgMTMuNSAwIDMwLjcgNC4xIDQ0LjIgMTEuNGwwLTQxLjhjLTE0LjctNS44LTI5LjQtOC4xLTQ0LjEtOC4xLTM2IDAtNjAgMTguOC02MCA1MC4yIDAgNDkuMiA2Ny41IDQxLjIgNjcuNSA2Mi40IDAgOC4yLTcuMSAxMC45LTE3IDEwLjktMTQuNyAwLTMzLjctNi4xLTQ4LjYtMTQuMmwwIDQwYzE2LjUgNy4xIDMzLjIgMTAuMSA0OC41IDEwLjEgMzYuOSAwIDYyLjMtMTUuOCA2Mi4zLTQ3LjggMC01Mi45LTY3LjktNDMuNC02Ny45LTYzLjR6TTY0MCAyNjEuNmMwLTQ1LjUtMjItODEuNC02NC4yLTgxLjRzLTY3LjkgMzUuOS02Ny45IDgxLjFjMCA1My41IDMwLjMgNzguMiA3My41IDc4LjIgMjEuMiAwIDM3LjEtNC44IDQ5LjItMTEuNWwwLTMzLjRjLTEyLjEgNi4xLTI2IDkuOC00My42IDkuOC0xNy4zIDAtMzIuNS02LjEtMzQuNS0yNi45bDg2LjkgMGMuMi0yLjMgLjYtMTEuNiAuNi0xNS45em0tODcuOS0xNi44YzAtMjAgMTIuMy0yOC40IDIzLjQtMjguNCAxMC45IDAgMjIuNSA4LjQgMjIuNSAyOC40bC00NS45IDB6TTQzOS4yIDE4MC4yYy0xNy40IDAtMjguNiA4LjItMzQuOCAxMy45bC0yLjMtMTEtMzkuMSAwIDAgMjA0LjggNDQuNC05LjQgLjEtNTAuMmM2LjQgNC43IDE1LjkgMTEuMiAzMS40IDExLjIgMzEuOCAwIDYwLjgtMjMuMiA2MC44LTc5LjYgLjEtNTEuNi0yOS4zLTc5LjctNjAuNS03OS43ek00MjguNiAzMDIuN2MtMTAuNCAwLTE2LjYtMy44LTIwLjktOC40bC0uMy02NmM0LjYtNS4xIDExLTguOCAyMS4yLTguOCAxNi4yIDAgMjcuNCAxOC4yIDI3LjQgNDEuNCAuMSAyMy45LTEwLjkgNDEuOC0yNy40IDQxLjh6TTMwMS45IDMzNi40bDQ0LjYgMCAwLTE1My4yLTQ0LjYgMCAwIDE1My4yeiJdCiAgICB9OwogICAgZmFEYWlseW1vdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkYWlseW1vdGlvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMDUyIiwgIk0yOTguOSAyNjdjLTcuNC00LjItMTUuOC02LjMtMjQuNC02LjItMTMuMiAwLTI0LjQgNC40LTMzLjQgMTMuM3MtMTMuNiAyMC0xMy42IDMzLjRjMCAxNC4xIDQuNCAyNS42IDEzLjMgMzQuNnMyMCAxMy40IDMzLjQgMTMuNGMxMy43IDAgMjUtNC42IDM0LjEtMTMuOFMzMjIgMzIxLjEgMzIyIDMwNy41YzAtOC4yLTIuMS0xNi4zLTYuMS0yMy41LTQtNy4xLTkuOC0xMy0xNy0xN3pNMCAzMmwwIDQ0OCA0NDggMCAwLTQ0OC00NDggMHpNMzc0LjcgNDA1LjNsLTUzLjEgMCAwLTIzLjktLjcgMGMtMTAuNSAxNy41LTI5LjEgMjYuMi01NS44IDI2LjItMTguNCAwLTM0LjctNC40LTQ4LjktMTMuMS0xNC4xLTguNi0yNS41LTIxLTMyLjktMzUuOC03LjctMTUuMS0xMS42LTMyLjEtMTEuNi01MC45IDAtMTguNCAzLjktMzUuMSAxMS44LTUwLjIgNy41LTE0LjcgMTguOS0yNy4xIDMyLjktMzUuOCAxNC4xLTguNyAzMC0xMy4xIDQ3LjctMTMuMSAxMC4yLS4xIDIwLjIgMS42IDI5LjcgNS4yIDguOSAzLjUgMTcuMiA5LjEgMjUgMTdsMC03Ny45IDU1LjgtMTIuMSAwIDI2NC40eiJdCiAgICB9OwogICAgZmFTdGVhbSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdGVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWI2IiwgIk01MDQgMjU2YzAgMTM3LTExMS4yIDI0OC0yNDguNCAyNDgtMTEzLjggMC0yMDkuNi03Ni4zLTIzOS0xODAuNGw5NS4yIDM5LjNjNi40IDMyLjEgMzQuOSA1Ni40IDY4LjkgNTYuNCAzOS4yIDAgNzEuOS0zMi40IDcwLjItNzMuNWw4NC41LTYwLjJjNTIuMSAxLjMgOTUuOC00MC45IDk1LjgtOTMuNSAwLTUxLjYtNDItOTMuNS05My43LTkzLjVzLTkzLjcgNDItOTMuNyA5My41bDAgMS4yLTU5LjIgODUuN2MtMTUuNS0uOS0zMC43IDMuNC00My41IDEyLjFMOCAyMzYuMUMxOC4yIDEwOC40IDEyNS4xIDggMjU1LjYgOCAzOTIuOCA4IDUwNCAxMTkgNTA0IDI1NnpNMTYzLjcgMzg0LjNsLTMwLjUtMTIuNmM1LjYgMTEuNiAxNS4zIDIwLjggMjcuMiAyNS44IDI2LjkgMTEuMiA1Ny44LTEuNiA2OS0yOC40IDUuNC0xMyA1LjUtMjcuMyAuMS00MC4zUzIxNCAzMDUuNiAyMDEgMzAwLjJjLTEyLjktNS40LTI2LjctNS4yLTM4LjktLjZsMzEuNSAxM2MxOS44IDguMiAyOS4yIDMwLjkgMjAuOSA1MC43LTguMyAxOS45LTMxIDI5LjItNTAuOCAyMXpNMzM3LjUgMTI5LjhhNjIuMyA2Mi4zIDAgMSAxIDAgMTI0LjYgNjIuMyA2Mi4zIDAgMSAxIDAtMTI0LjZ6bS4xIDEwOWE0Ni44IDQ2LjggMCAxIDAgMC05My42IDQ2LjggNDYuOCAwIDEgMCAwIDkzLjZ6Il0KICAgIH07CiAgICBmYVNuYXBjaGF0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNuYXBjaGF0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxMjQsICJzbmFwY2hhdC1naG9zdCJdLCAiZjJhYiIsICJNNDk3LjEgMzY2LjZjLTMuNC05LjItOS44LTE0LjEtMTcuMS0xOC4yLTEuNC0uOC0yLjYtMS41LTMuNy0xLjktMi4yLTEuMS00LjQtMi4yLTYuNi0zLjQtMjIuOC0xMi4xLTQwLjYtMjcuMy01My00NS40LTMuNS01LjEtNi42LTEwLjUtOS4xLTE2LjEtMS4xLTMtMS00LjctLjItNi4zIC44LTEuMiAxLjctMi4yIDIuOS0zIDMuOS0yLjYgOC01LjIgMTAuNy03IDQuOS0zLjIgOC44LTUuNyAxMS4yLTcuNCA5LjQtNi41IDE1LjktMTMuNSAyMC0yMS4zIDIuOS01LjQgNC41LTExLjMgNC45LTE3LjRzLS42LTEyLjItMi44LTE3LjhjLTYuMi0xNi4zLTIxLjYtMjYuNC00MC4zLTI2LjQtMy45IDAtNy45IC40LTExLjcgMS4yLTEgLjItMi4xIC41LTMuMSAuNyAuMi0xMS4yLS4xLTIyLjktMS4xLTM0LjUtMy41LTQwLjgtMTcuOC02Mi4xLTMyLjctNzkuMi05LjUtMTAuNy0yMC43LTE5LjctMzMuMi0yNi43LTIyLjYtMTIuOS00OC4yLTE5LjQtNzYuMS0xOS40cy01My40IDYuNS03NiAxOS40Yy0xMi41IDctMjMuNyAxNi4xLTMzLjMgMjYuOC0xNC45IDE3LTI5LjIgMzguNC0zMi43IDc5LjItMSAxMS42LTEuMiAyMy40LTEuMSAzNC41LTEtLjMtMi0uNS0zLjEtLjctMy45LS44LTcuOC0xLjItMTEuNy0xLjItMTguNyAwLTM0LjEgMTAuMS00MC4zIDI2LjQtMi4yIDUuNy0zLjIgMTEuOC0yLjggMTcuOHMyIDEyIDQuOSAxNy40YzQuMSA3LjggMTAuNyAxNC43IDIwIDIxLjMgMi41IDEuNyA2LjQgNC4yIDExLjIgNy40IDIuNiAxLjcgNi41IDQuMiAxMC4zIDYuNyAxLjMgLjkgMi40IDIgMy4zIDMuMyAuOCAxLjYgLjggMy40LS40IDYuNi0yLjUgNS41LTUuNSAxMC44LTguOSAxNS44LTEyLjEgMTcuNy0yOS40IDMyLjYtNTEuNCA0NC42LTExLjcgNi4yLTIzLjkgMTAuMy0yOSAyNC4zLTMuOSAxMC41LTEuMyAyMi41IDguNSAzMi42IDMuNiAzLjggNy44IDYuOSAxMi40IDkuNCA5LjYgNS4zIDE5LjggOS4zIDMwLjMgMTIuMSAyLjIgLjYgNC4zIDEuNSA2LjEgMi43IDMuNiAzLjEgMy4xIDcuOSA3LjggMTQuOCAyLjQgMy42IDUuNCA2LjcgOSA5LjEgMTAgNi45IDIxLjMgNy40IDMzLjIgNy44IDEwLjggLjQgMjMgLjkgMzYuOSA1LjUgNS44IDEuOSAxMS44IDUuNiAxOC43IDkuOSAxNi43IDEwLjMgMzkuNiAyNC4zIDc3LjggMjQuM3M2MS4zLTE0LjEgNzguMS0yNC40YzYuOS00LjIgMTIuOS03LjkgMTguNS05LjggMTMuOS00LjYgMjYuMi01LjEgMzYuOS01LjUgMTEuOS0uNSAyMy4yLS45IDMzLjItNy44IDQuMi0yLjkgNy43LTYuNyAxMC4yLTExLjIgMy40LTUuOCAzLjQtOS45IDYuNi0xMi44IDEuOC0xLjIgMy43LTIuMSA1LjgtMi42IDEwLjctMi44IDIxLTYuOSAzMC44LTEyLjIgNC45LTIuNiA5LjMtNi4xIDEzLTEwLjJsLjEtLjJjOS4yLTkuOSAxMS41LTIxLjUgNy44LTMxLjh6bS0zNCAxOC4zYy0yMC43IDExLjUtMzQuNSAxMC4yLTQ1LjMgMTcuMS05LjEgNS45LTMuNyAxOC41LTEwLjMgMjMuMS04LjEgNS42LTMyLjItLjQtNjMuMiA5LjktMjUuNiA4LjUtNDIgMzIuOC04OCAzMi44cy02Mi0yNC4zLTg4LjEtMzIuOWMtMzEtMTAuMy01NS4xLTQuMi02My4yLTkuOS02LjYtNC42LTEuMi0xNy4yLTEwLjMtMjMuMS0xMC43LTYuOS0yNC41LTUuNy00NS4zLTE3LjEtMTMuMi03LjMtNS43LTExLjgtMS4zLTEzLjkgNzUuMS0zNi40IDg3LjEtOTIuNiA4Ny43LTk2LjcgLjYtNSAxLjQtOS00LjItMTQuMS01LjQtNS0yOS4yLTE5LjctMzUuOC0yNC4zLTEwLjktNy42LTE1LjctMTUuMy0xMi4yLTI0LjYgMi41LTYuNSA4LjUtOC45IDE0LjktOC45IDIgMCA0IC4yIDYgLjcgMTIgMi42IDIzLjcgOC42IDMwLjQgMTAuMiAuOCAuMiAxLjYgLjMgMi41IC4zIDMuNiAwIDQuOS0xLjggNC42LTUuOS0uOC0xMy4xLTIuNi0zOC43LS42LTYyLjYgMi44LTMyLjkgMTMuNC00OS4yIDI2LTYzLjYgNi4xLTYuOSAzNC41LTM3IDg4LjktMzdTMzM5IDc0LjIgMzQ1IDgxLjFjMTIuNiAxNC40IDIzLjIgMzAuNyAyNiA2My42IDIuMSAyMy45IC4zIDQ5LjUtLjYgNjIuNi0uMyA0LjMgMSA1LjkgNC42IDUuOSAuOCAwIDEuNy0uMSAyLjUtLjMgNi43LTEuNiAxOC40LTcuNiAzMC40LTEwLjIgMi0uNCA0LS43IDYtLjcgNi40IDAgMTIuNCAyLjUgMTQuOSA4LjkgMy41IDkuNC0xLjIgMTctMTIuMiAyNC42LTYuNiA0LjYtMzAuNCAxOS4zLTM1LjggMjQuMy01LjYgNS4xLTQuOCA5LjEtNC4yIDE0LjIgLjUgNC4yIDEyLjUgNjAuNCA4Ny43IDk2LjcgNC40IDIuMiAxMS45IDYuNy0xLjMgMTQuMXoiXQogICAgfTsKICAgIGZhU25hcGNoYXRHaG9zdCA9IGZhU25hcGNoYXQ7CiAgICBmYUdhbGFjdGljU2VuYXRlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdhbGFjdGljLXNlbmF0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTBkIiwgIk0yNDkuOSAzMy41bDAgMjYuMWMtMTMuNiAyMC42LTIzLjkgMTA4LjYtMjQuNSAyMTUuMyAxMS43LTE1LjYgMTkuMS0zMy4zIDE5LjEtNDguMmwwLTE2LjljMC01LjMgLjgtMTAuNSAyLjItMTUuNiAuNi0yLjEgMS40LTQuMSAyLjYtNS44czMuNC0zLjggNi43LTMuOCA1LjQgMi4xIDYuNyAzLjhjMS4yIDEuOCAyIDMuNyAyLjYgNS44IDEuNCA1LjEgMi4yIDEwLjMgMi4yIDE1LjZsMCAxNi45YzAgMTQuOSA3LjQgMzIuNiAxOS4xIDQ4LjItLjYtMTA2LjgtMTAuOS0xOTQuNy0yNC41LTIxNS4zbDAtMjYuMS0xMi4zIDB6TTIyMy41IDE4MS4zYy05LjUgMi4xLTE4LjcgNS4yLTI3LjUgOS4xIDguOSAxNi4xIDkuOCAzMi42IDEuNyAzNy4zLTggNC42LTIxLjgtNC4yLTMxLjQtMTkuOC0xMS42IDguOC0yMS45IDE5LjMtMzAuNiAzMS4xIDE0LjcgOS42IDIyLjkgMjIuOSAxOC4zIDMwLjctNC41IDcuNy0yMCA3LjEtMzUuNS0xLTUuOCAxMy4yLTkuNyAyNy41LTExLjYgNDIuNCA5LjcgLjIgMTguNyAyLjQgMjYuMiA2IDE3LjgtLjMgMzIuOC0yIDQwLjUtNC4yIDUuNi0yNi40IDIzLTQ4LjIgNDYuMy01OS41IC43LTI1LjYgMS45LTQ5LjcgMy41LTcyLjF6bTY1IDBjMS42IDIyLjQgMi43IDQ2LjUgMy41IDcyLjEgMjMuMyAxMS4zIDQwLjggMzMuMiA0Ni4zIDU5LjUgNy43IDIuMyAyMi43IDMuOSA0MC41IDQuMiA3LjUtMy43IDE2LjUtNS44IDI2LjItNi0xLjktMTQuOS01LjktMjkuMi0xMS43LTQyLjQtMTUuNCA4LjEtMzAuOSA4LjctMzUuNSAxLTQuNi03LjcgMy42LTIxLjEgMTguMy0zMC43LTguNy0xMS44LTE5LTIyLjMtMzAuNi0zMS4xLTkuNSAxNS42LTIzLjQgMjQuNC0zMS40IDE5LjgtOC4xLTQuNi03LjItMjEuMiAxLjctMzcuMy04LjgtMy45LTE4LTctMjcuNC05LjF6TTI1NiAxODkuOWMtMy4yIDAtNS45IDguOC02LjEgMTkuOWwwIDAgMCAxNi45YzAgNDEuNC00OSA5NS05My41IDk1LTUyIDAtMTIyLjgtMS40LTE1Ni40IDI5LjJsMCAyLjVjOS40IDE3LjEgMjAuNiAzMy4yIDMzLjIgNDggMTIuNS0yMS4xIDUxLjYtNDEgMTA4LTQxLjQgNDUuNyAxIDc5IDIwLjMgOTAuOCA0MC45IDAgMCAwIDAgMCAuMSA3LjcgMi4xIDE1LjggMy4yIDI0IDMuMiA4LjIgMCAxNi40LTEuMSAyNC0zLjIgMCAwIDAgMCAwLS4xIDExLjctMjAuNSA0NS4xLTM5LjggOTAuOC00MC45IDU2LjQgLjQgOTUuNSAyMC4zIDEwOCA0MS40IDEyLjYtMTQuOCAyMy44LTMwLjkgMzMuMi00OGwwLTIuNWMtMzMuNi0zMC42LTEwNC40LTI5LjItMTU2LjQtMjkuMi00NC41IDAtOTMuNS01My42LTkzLjUtOTVsMC0xNi45LS4xIDBjLS4yLTExLjEtMi45LTE5LjktNi4xLTE5Ljl6bTAgMTc3LjlhNDAuNiA0MC42IDAgMSAxIDAtODEuMyA0MC42IDQwLjYgMCAxIDEgMCA4MS4zem0wLTczLjZhMzMgMzMgMCAxIDAgMCA2NS45IDMzIDMzIDAgMSAwIDAtNjUuOXptMCA1OS44YTI2LjggMjYuOCAwIDEgMSAwLTUzLjYgMjYuOCAyNi44IDAgMSAxIDAgNTMuNnptLTExNC44IDEzYy0xMC4yIC4xLTIxLjYgLjQtMzAuNSAxLjcgLjQgNC40IDEuNSAxOC42IDcuMSAyOS44IDkuMS0yLjYgMTguNC0zLjkgMjcuNi0zLjkgNDEuMyAuOSA3MS41IDM0LjQgNzguMyA3NC41bC4xIDQuN2MxMC40IDEuOSAyMS4yIDIuOSAzMi4yIDIuOSAxMSAwIDIxLjgtMSAzMi4yLTIuOWwuMS00LjdjNi44LTQwLjEgMzctNzMuNSA3OC4zLTc0LjUgOS4zIDAgMTguNSAxLjMgMjcuNiAzLjkgNS42LTExLjEgNi43LTI1LjMgNy4xLTI5LjgtOC45LTEuMy0yMC4zLTEuNi0zMC41LTEuNy0xOC44IC40LTM1LjIgNC4yLTQ4LjYgOS43LTEyLjUgMTYtMjkuMiAzMC00OS42IDMzLjEtLjEgMC0uMiAwLS4zIDAgMCAwLS4xIDAtLjIgLjEtNS4yIDEuMS0xMC42IDEuNi0xNi4yIDEuNi01LjUgMC0xMC45LS41LTE2LjItMS42LS4xIDAtLjEgMC0uMi0uMS0uMSAwLS4yIDAtLjMgMC0yMC40LTMtMzctMTctNDkuNi0zMy4xLTEzLjQtNS41LTI5LjktOS4yLTQ4LjYtOS43eiJdCiAgICB9OwogICAgZmFQaG9lbml4RnJhbWV3b3JrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBob2VuaXgtZnJhbWV3b3JrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzZGMiLCAiTTIxMi45IDM0NC4zYzMuOC0uMSAyMi44LTEuNCAyNS42LTIuMi0yLjQtMi42LTQzLjYtMS02OC00OS42LTQuMy04LjYtNy41LTE3LjYtNi40LTI3LjYgMi45LTI1LjUgMzIuOS0zMCA1Mi0xOC41IDM2IDIxLjYgNjMuMyA5MS4zIDExMy43IDk3LjUgMzcgNC41IDg0LjYtMTcgMTA4LjItNDUuNC0uNi0uMS0uOC0uMi0xLS4xLS40IC4xLS44IC4yLTEuMSAuMy0zMy4zIDEyLjEtOTQuMyA5LjctMTM0LjctMTQuOC0zNy42LTIyLjgtNTMuMS01OC43LTUxLjgtNzQuNiAxLjgtMjEuMyAyMi45LTIzLjIgMzUuOS0xOS42IDE0LjQgMy45IDI0LjQgMTcuNiAzOC45IDI3LjQgMTUuNiAxMC40IDMyLjkgMTMuNyA1MS4zIDEwLjMgMTQuOS0yLjcgMzQuNC0xMi4zIDM2LjUtMTQuNS0xLjEtLjEtMS44LS4xLTIuNS0uMi02LjItLjYtMTIuNC0uOC0xOC41LTEuNy0xMTEuMi0xNi41LTEyOC45LTE2My42LTI1Mi41LTE3My4xLTQ0LjMtMy40LTk5LjQgOC4xLTEzNi4zIDM1LS44IC42LTEuNSAxLjItMi4yIDEuOCAuMSAuMiAuMSAuMyAuMiAuNSAuOCAwIDEuNi0uMSAyLjQtLjIgNi4zLTEgMTIuNS0uOCAxOC43IC4zIDIzLjggNC4zIDQ3LjcgMjMuMSA1NS45IDc2LjUgNS4zIDM0LjMtLjcgNTAuOCA4IDg2LjEgMTkgNzcuMSA5MSAxMDcuNiAxMjcuNyAxMDYuNHpNNzUuMyA2NC45Yy0uOS0xLS45LTEuMi0xLjMtMiAxMi4xLTIuNiAyNC4yLTQuMSAzNi42LTQuOC0xLjEgMTQuNy0yMi4yIDIxLjMtMzUuMyA2Ljh6TTI3Mi4yIDQxNS40Yy00Mi44IDEuMi05Mi0yNi43LTEyMy41LTYxLjQtNC42LTUtMTYuOC0yMC4yLTE4LjYtMjMuNGwuNC0uNGM2LjYgNC4xIDI1LjcgMTguNiA1NC44IDI3IDI0LjIgNyA0OC4xIDYuMyA3MS42LTMuMyAyMi43LTkuMyA0MS0uNSA0My4xIDIuOS0xOC41IDMuOC0yMC4xIDQuNC0yNCA3LjktNS4xIDQuNC00LjYgMTEuNyA3IDE3LjIgMjYuMiAxMi40IDYzLTIuOCA5Ny4yIDI1LjQgMi40IDIgOC4xIDcuOCAxMC4xIDEwLjctLjEgLjItLjMgLjMtLjQgLjUtNC44LTEuNS0xNi40LTcuNS00MC4yLTkuMy0yNC43LTItNDYuMyA1LjMtNzcuNSA2LjJ6TTQ0NyAxNjMuNGMxNi40LTUuMiA0MS4zLTEzLjQgNjYuNS0zLjMgMTYuMSA2LjUgMjYuMiAxOC43IDMyLjEgMzQuNiAzLjUgOS40IDUuMSAxOS43IDUuMSAyOC43LS4yIDAtLjQgMC0uNiAuMS0uMi0uNC0uNC0uOS0uNS0xLjMtNS0yMi0yOS45LTQzLjgtNjcuNi0yOS45LTUwLjIgMTguNi0xMzAuNCA5LjctMTc2LjktNDgtLjctLjktMi40LTEuNy0xLjMtMy4yIC4xLS4yIDIuMSAuNiAzIDEuMyAxOC4xIDEzLjQgMzguMyAyMS45IDYwLjMgMjYuMiAzMC41IDYuMSA1NC42IDIuOSA3OS45LTUuMnpNNTQ5LjcgMjgwLjljLTMyLjQgLjItMzMuOCA1MC4xLTEwMy42IDY0LjQtMTguMiAzLjctMzguNyA0LjYtNDQuOSA0LjJsMC0uNGMyLjgtMS41IDE0LjctMi42IDI5LjctMTYuNiA3LjktNy4zIDE1LjMtMTUuMSAyMi44LTIyLjkgMTkuNS0yMC4yIDQxLjQtNDIuMiA4MS45LTM5IDIzLjEgMS44IDI5LjMgOC4yIDM2LjEgMTIuNyAuMyAuMiAuNCAuNSAuNyAuOS0uNSAwLS43IC4xLS45IDAtNy0yLjctMTQuMy0zLjMtMjEuOC0zLjN6bS0xMi4zLTI0LjFjLS4xIC4yLS4xIC40LS4yIC42LTI4LjktNC40LTQ4LTcuOS02OC41IDQtMTcgOS45LTMxLjQgMjAuNS02MiAyNC40LTI3LjEgMy40LTQ1LjEgMi40LTY2LjEtOC0uMy0uMi0uNi0uNC0xLS42IDAtLjIgLjEtLjMgLjEtLjUgMjQuOSAzLjggMzYuNCA1LjEgNTUuNS01LjggMjIuMy0xMi45IDQwLjEtMjYuNiA3MS4zLTMxIDI5LjYtNC4xIDUxLjMgMi41IDcwLjkgMTYuOXpNMjY4LjYgOTcuM2MtLjYtLjYtMS4xLTEuMi0yLjEtMi4zIDcuNiAwIDI5LjctMS4yIDUzLjQgOC40IDE5LjcgOCAzMi4yIDIxIDUwLjIgMzIuOSAxMS4xIDcuMyAyMy40IDkuMyAzNi40IDguMSA0LjMtLjQgOC41LTEuMiAxMi44LTEuNyAuNC0uMSAuOSAwIDEuNSAuMy0uNiAuNC0xLjIgLjktMS44IDEuMi04LjEgNC0xNi43IDYuMy0yNS42IDcuMS0yNi4xIDIuNi01MC4zLTMuNy03My40LTE1LjQtMTkuMy05LjktMzYuNC0yMi45LTUxLjQtMzguNnpNNjQwIDMzNS43Yy0zLjUgMy4xLTIyLjcgMTEuNi00Mi43IDUuMy0xMi4zLTMuOS0xOS41LTE0LjktMzEuNi0yNC4xLTEwLTcuNi0yMC45LTcuOS0yOC4xLTguNCAuNi0uOCAuOS0xLjIgMS4yLTEuNCAxNC44LTkuMiAzMC41LTEyLjIgNDcuMy02LjUgMTIuNSA0LjIgMTkuMiAxMy41IDMwLjQgMjQuMiAxMC44IDEwLjQgMjEgOS45IDIzLjEgMTAuNSAuMS0uMSAuMiAwIC40IC40em0tMjEyLjUgMTM3YzIuMiAxLjIgMS42IDEuNSAxLjUgMi0xOC41LTEuNC0zMy45LTcuNi00Ni44LTIyLjItMjEuOC0yNC43LTQxLjctMjcuOS00OC42LTI5LjcgLjUtLjIgLjgtLjQgMS4xLS40IDEzLjEgLjEgMjYuMSAuNyAzOC45IDMuOSAyNS4zIDYuNCAzNSAyNS40IDQxLjYgMzUuMyAzLjIgNC44IDcuMyA4LjMgMTIuMyAxMS4xeiJdCiAgICB9OwogICAgZmFHaXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2l0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxZDMiLCAiTTIxNi4zIDE1OC40bC03OS4zIDBjLTQwLTEwLjUtMTMwLjUtNy44LTEzMC41IDc0LjggMCAzMC4xIDE1IDUxLjIgMzUgNjEtMjUuMSAyMy0zNyAzMy44LTM3IDQ5LjIgMCAxMSA0LjUgMjEuMSAxNy45IDI2LjgtMTQuMyAxMy40LTIyLjQgMjMuMS0yMi40IDQxLjQgMCAzMi4xIDI4IDUwLjggMTAxLjYgNTAuOCA3MC44IDAgMTExLjgtMjYuNCAxMTEuOC03My4yIDAtNTguNy00NS4yLTU2LjUtMTUxLjYtNjNsMTMuNC0yMS42YzI3LjMgNy42IDExOC43IDEwIDExOC43LTY3LjkgMC0xOC43LTcuNy0zMS43LTE1LTQxLjFsMzcuNC0yLjggMC0zNC41ek0xNTIuOSA0MDAuM2MwIDMyLjEtMTA0LjkgMzIuMS0xMDQuOSAyLjQgMC04LjEgNS4zLTE1IDEwLjYtMjEuNSA3Ny43IDUuMyA5NC4zIDMuNCA5NC4zIDE5LjF6TTEwMi4xIDI2NS43Yy01Mi44IDAtNTAuNS03MS4yIDEuMi03MS4yIDQ5LjUgMCA1MC44IDcxLjItMS4yIDcxLjJ6TTIzNS40IDM2Ni4ybDAtMzIuMWMyNi43LTMuNyAyNy4yLTIgMjcuMi0xMWwwLTExOS41YzAtOC41LTIuMS03LjQtMjcuMi0xNi4zbDQuNS0zMi45IDg0LjIgMCAwIDE2OC43YzAgNi41IC40IDcuMyA2LjUgOC4xbDIwLjcgMi44IDAgMzIuMS0xMTUuOSAwem01Mi41LTI0NC4zYy0yMy4yIDAtMzYuNi0xMy40LTM2LjYtMzYuNnMxMy40LTM1LjggMzYuNi0zNS44YzIzLjYgMCAzNyAxMi42IDM3IDM1LjhzLTEzLjQgMzYuNi0zNyAzNi42ek01MTIgMzUwLjVjLTE3LjUgOC41LTQzLjEgMTYuMy02Ni4zIDE2LjMtNDguNCAwLTY2LjctMTkuNS02Ni43LTY1LjVsMC0xMDYuNWMwLTUuNCAxLTQuMS0zMS43LTQuMWwwLTM2LjJjMzUuOC00LjEgNTAtMjIgNTQuNS02Ni4zbDM4LjYgMGMwIDY1LjgtMS4zIDYxLjggMy4zIDYxLjhsNTcuMyAwIDAgNDAuNi02MC42IDAgMCA5Ny4xYzAgNi45LTQuOSA1MS40IDYwLjYgMjYuOGwxMSAzNS44eiJdCiAgICB9OwogICAgZmFPcHRpbk1vbnN0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib3B0aW4tbW9uc3RlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMjNjIiwgIk01NzIuOCA0MjEuNGM1LjYtOS41IDQuNy0xNS4yLTUuNC0xMS42LTMtNC45LTctOS41LTExLjEtMTMuOCAyLjktOS43LS43LTE0LjItMTAuOC05LjItNC42LTMuMi0xMC4zLTYuNS0xNS45LTkuMiAwLTE1LjEtMTEuNi0xMS42LTE3LjYtNS43LTEwLjQtMS41LTE4LjctLjMtMjYuOCA1LjcgLjMtNi41IC4zLTEzIC4zLTE5LjcgMTIuNiAwIDQwLjItMTEgNDUuOS0zNi4yIDEuNC02LjggMS42LTEzLjgtLjMtMjEuOS0zLTEzLjUtMTQuMy0yMS4zLTI1LjEtMjUuNy0uOC01LjktNy42LTE0LjMtMTQuOS0xNS45cy0xMi40IDQuOS0xNC4xIDEwLjNjLTguNSAwLTE5LjIgMi44LTIxLjEgOC40LTUuNC0uNS0xMS4xLTEuNC0xNi44LTEuOSAyLjctMS45IDUuNC0zLjUgOC40LTQuNiA1LjQtOS4yIDE0LjYtMTEuNCAyNS43LTExLjZsMC0yLjhjMTkuNS0uNSA0My01LjkgNTMuOC0xOC4xIDEyLjctMTMuOCAxNC42LTM3LjMgMTIuNC01NS4xLTIuNC0xNy4zLTkuNy0zNy42LTI0LjYtNDguMS04LjQtNS45LTIxLjYtLjgtMjIuNyA5LjUtMi4yIDE5LjYgMS4yIDMwLTM4LjYgMjUuMS0xMC4zLTIzLjgtMjQuNi00NC42LTQyLjctNjAtNjkuNi01OS43LTE2Ny43LTUzLjgtMjQ0LjItMzcuNiAxOS43IDQuNiA0MS4xIDguNiA1OS43IDE2LjUtMjYuMiAyLjQtNTIuNyAxMS4zLTc2LjIgMjMuMi0zMi44IDE3LTQ0IDI5LjktNTYuNyA0Mi40IDE0LjktMi4yIDI4LjktNS4xIDQzLjgtMy44LTkuNyA1LjQtMTguNCAxMi4yLTI2LjUgMjAtMjUuOCAuOS0yMy44LTUuMy0yNi4yLTI1LjktMS4xLTEwLjUtMTQuMy0xNS40LTIyLjctOS43LTI4LjEgMTkuOS0zMy41IDc5LjktMTIuMiAxMDMuNSAxMC44IDEyLjIgMzUuMSAxNy4zIDU0LjkgMTcuOC0uMyAxLjEtLjMgMS45LS4zIDIuNyAxMC44IC41IDE5LjUgMi43IDI0LjYgMTEuNiAzIDEuMSA1LjcgMi43IDguMSA0LjYtNS40IC41LTExLjEgMS40LTE2LjUgMS45LTMuMy02LjYtMTMuNy04LjEtMjEuMS04LjEtMS42LTUuNy02LjUtMTIuMi0xNC4xLTEwLjMtNi44IDEuOS0xNC4xIDEwLTE0LjkgMTUuOS0yMi41IDkuNS0zMC4xIDI2LjgtMjUuMSA0Ny42IDUuMyAyNC44IDMzIDM2LjIgNDUuOSAzNi4ybDAgMTkuN2MtNi42LTUtMTQuMy03LjUtMjYuOC01LjctNS41LTUuNS0xNy4zLTEwLjEtMTcuMyA1LjctNS45IDIuNy0xMS40IDUuOS0xNS45IDkuMi05LjgtNC45LTEzLjYtMS43LTExLjEgOS4yLTQuMSA0LjMtNy44IDguNi0xMS4xIDEzLjgtMTAuMi0zLjctMTEgMi4yLTUuNCAxMS42LTEuMSAzLjUtMS42IDctMS45IDEwLjgtLjUgMzEuNiA0NC42IDY0IDczLjUgNjUuMSAxNy4zIC41IDM0LjYtOC40IDQzLTIzLjUgMTEzLjIgNC45IDIyNi43IDQuMSAzNDAuMiAwIDguMSAxNS4xIDI1LjQgMjQuMyA0Mi43IDIzLjUgMjkuMi0xLjEgNzQuMy0zMy41IDczLjUtNjUuMSAuMi0zLjctLjctNy4yLTEuNy0xMC43ek00OTkgMTY3LjRjMS4xLTMgMi40LTguNCAyLjQtMTQuNiAwLTUuOSA2LjgtOC4xIDE0LjEtLjggMTEuMSAxMS42IDE0LjkgNDAuNSAxMy44IDUxLjEtNC4xLTEzLjYtMTMtMjktMzAuMy0zNS43em0tNC42IDYuN2MxOS41IDYuMiAyOC42IDI3LjYgMjkuNyA0OC45LTEuMSAyLjctMyA1LjQtNC45IDcuNi01LjcgNS45LTE1LjQgMTAtMjYuMiAxMi4yIDQuMy0yMS4zIC4zLTQ3LjMtMTIuNy02MyA0LjktLjggMTAuOS0yLjQgMTQuMS01Ljd6bS0yNC4xIDYuOGMxMy44IDExLjkgMjAgMzkuMiAxNC4xIDYzLjUtNC4xIC41LTguMSAuOC0xMS42IC44LTEuOS0yMS45LTYuOC00NC0xNC4zLTY0LjYgMy43IC4zIDguMSAuMyAxMS44IC4zek00Ny43IDIwM2MtMS4xLTEwLjUgMi40LTM5LjUgMTMuOC01MS4xIDctNy4zIDE0LjEtNS4xIDE0LjEgLjggMCA2LjIgMS40IDExLjYgMi40IDE0LjYtMTcuMyA2LjgtMjYuMiAyMi4yLTMwLjMgMzUuN3ptOS43IDI3LjZjLTEuOS0yLjItMy41LTQuOS00LjktNy42IDEuNC0yMS4zIDEwLjMtNDIuNyAyOS43LTQ4LjkgMy4yIDMuMiA5LjIgNC45IDE0LjEgNS43LTEzIDE1LjctMTcgNDEuNi0xMi43IDYzLTEwLjgtMi4yLTIwLjUtNi0yNi4yLTEyLjJ6bTQ3LjkgMTQuNmMtNC4xIDAtOC4xLS4zLTEyLjctLjgtNC42LTE4LjYtMS45LTM4LjkgNS40LTUzbDAgLjMgMTIuMi01LjFjNC45LTEuOSA5LjctMy44IDE0LjktNC45LTEwLjcgMTkuNy0xNy40IDQxLjMtMTkuOCA2My41em0xODQtMTAuNWE3Ni4xIDc2LjEgMCAxIDEgMC0xNTIuMiA3Ni4xIDc2LjEgMCAxIDEgMCAxNTIuMnptMTE1LjYgMjIuMWMtLjMgMTcuOC03IDQ4LjktMjMgNTctMTMuMiA2LjYtNi41LTcuNS0xNi41LTU4LjEgMTMuMyAuMyAyNi42IC4zIDM5LjUgMS4xem0tNTQtMS42Yy44IDQuOSAzLjggNDAuMy0xLjYgNDEuOS0xMS42IDMuNS00MCA0LjMtNTEuMS0xLjEtNC4xLTMtNC42LTM1LjktNC4zLTQxLjFsMCAuM2MxOC45LS4zIDM4LjEtLjMgNTcgMHpNMjc4LjUgMzA5Yy0xMyAzLjUtNDEuNiA0LjEtNTQuNi0xLjYtNi41LTIuNy0zLjgtNDIuNC0xLjktNTEuNiAxOS4yLS41IDM4LjQtLjUgNTcuOC0uOGwwIC4zYzEuMSA4LjMgMy4zIDUxLjItMS4zIDUzLjd6TTE3MiAyNTcuOWMxMi4yLS44IDI0LjYtMS40IDM2LjgtMS42LTIuNCAxNS40LTMgNDMuNS00LjkgNTIuMi0xLjEgNi44LTQuMyA2LjgtOS43IDQuMy0yMS45LTkuOC0yNy42LTM1LjItMjIuMi01NC45em0tMzUuNCAzMS4zYzcuOC0xLjEgMTUuNy0xLjkgMjMuNS0yLjcgMS42IDYuMiAzLjggMTEuOSA3IDE3LjYgMTAgMTcgNDQgMzUuNyA0NS4xIDcgNi4yIDE0LjkgNDAuOCAxMi4yIDU0LjkgMTAuOCAxNS43LTEuNCAyMy44LTEuNCAyNi44LTE0LjMgMTIuNCA0LjMgMzAuOCA0LjEgNDQgMyAxMS4zLS44IDIwLjgtLjUgMjQuNi04LjkgMS4xIDUuMSAxLjkgMTEuNiA0LjYgMTYuOCAxMC44IDIxLjMgMzcuMyAxLjQgNDYuOC0zMS42IDguNiAuOCAxNy42IDEuOSAyNi41IDIuNy0uNCAxLjMtMy44IDcuMyA3LjMgMTEuNi00Ny42IDQ3LTk1LjcgODcuOC0xNjMuMiAxMDctNjMuMi0yMC44LTExMi4xLTU5LjUtMTU1LjktMTA2LjUgOS42LTMuNCAxMC40LTguOCA4LTEyLjV6TTExNSA0NjEuN2MtMy44IDE3LjgtMjEuOSAyOS43LTM5LjcgMjguOS0xOS4yLS44LTQ2LjUtMTctNTkuMi0zNi41LTIuNy0zMS4xIDQzLjgtNjEuMyA2Ni4yLTU0LjYgMTQuOSA0LjMgMjcuOCAzMC44IDMzLjUgNTQgMCAzLS4zIDUuNy0uOCA4LjJ6bS04LjctNjZjLS41LTEzLjUtLjUtMjctLjMtNDAuNWwuMyAwYzIuNy0xLjYgNS43LTMuOCA3LjgtNi41IDYuNS0xLjYgMTMtNS4xIDE1LjEtOS4yIDMuMy03LjEtNy03LjUtNS40LTEyLjQgMi43LTEuMSA1LjctMi4yIDcuOC0zLjUgMjkuMiAyOS4yIDU4LjYgNTYuNSA5Ny4zIDc3LTM2LjggMTEuMy03Mi40IDI3LjYtMTA1LjkgNDctMS4yLTE4LjYtNy43LTM1LjktMTYuNy01MS45em0zMzcuNiA2NC42Yy0xMDMgMy41LTIwNi4yIDQuMS0zMDkuNCAwIDAgLjMgMCAuMy0uMyAuM2wwLS4zIC4zIDBjMzUuMS0yMS42IDcyLjItMzkuMiAxMTIuNC01MC44IDExLjYgNS4xIDIzIDkuNSAzNC45IDEzLjIgMi4yIC44IDIuMiAuOCA0LjMgMCAxNC4zLTQuMSAyOC40LTkuMiA0Mi4yLTE1LjQgNDEuNSAxMS43IDc4LjggMzEuNyAxMTUuNiA1M3ptMTAuNS0xMi40Yy0zNS45LTE5LjUtNzMtMzUuOS0xMTEuOS00Ny42IDM4LjEtMjAgNzEuOS00Ny4zIDEwMy41LTc2LjcgMi4yIDEuNCA0LjYgMi40IDcuNiAzLjIgMCAuOCAuMyAxLjkgLjUgMi40LTQuNiAyLjctNy44IDYuMi01LjkgMTAuMyAyLjIgMy44IDguNiA3LjYgMTUuMSA4LjkgMi40IDIuNyA1LjEgNS4xIDguMSA2LjggMCAxMy44LS4zIDI3LjYtLjggNDEuM2wuMy0uM2MtOS4zIDE1LjktMTUuNSAzNy0xNi41IDUxLjd6bTEwNS45IDYuMmMtMTIuNyAxOS41LTQwIDM1LjctNTkuMiAzNi41LTE5LjMgLjktNDAuNS0xMy4yLTQwLjUtMzcgNS43LTIzLjIgMTguOS00OS43IDMzLjUtNTQgMjIuNy02LjkgNjkuMiAyMy40IDY2LjIgNTQuNXpNMzczLjEgNzUuMmMtMy44LTcyLjEtMTAwLjgtNzkuNy0xMjYtMjMuNSA0NC42LTI0LjMgOTAuMy0xNS43IDEyNiAyMy41ek03NSA0MDcuMWMtMTUuNyAxLjYtNDkuNSAyNS40LTQ5LjUgNDMuMiAwIDExLjYgMTUuNyAxOS41IDMyLjIgMTQuOSAxMi4yLTMuMiAzMS4xLTE3LjYgMzUuOS0yNy4zIDYtMTEuNi0zLjctMzIuNy0xOC42LTMwLjh6TTI5MC45IDIzMC45YzI4LjYgMCA1MS45LTIxLjYgNTEuOS00OC40IDAtMzYuMS00MC41LTU4LjEtNzIuMi00NC4zIDkuNSAzIDE2LjUgMTEuNiAxNi41IDIxLjYgMCAyMy4zLTMzLjMgMzItNDYuNSAxMS4zLTcuMyAzNC4xIDE5LjQgNTkuOCA1MC4zIDU5Ljh6TTY4LjIgNDc0LjFjLjUgNi41IDEyLjIgMTIuNyAyMS42IDkuNSA2LjgtMi43IDE0LjYtMTAuNSAxNy4zLTE2LjIgMy03LTEuMS0yMC05LjctMTguNC04LjkgMS42LTI5LjcgMTYuNy0yOS4yIDI1LjF6bTQzMy4yLTY3Yy0xNC45LTEuOS0yNC42IDE5LjItMTguOSAzMC44IDQuOSA5LjcgMjQuMSAyNC4xIDM2LjIgMjcuMyAxNi41IDQuNiAzMi4yLTMuMiAzMi4yLTE0LjkgMC0xNy44LTMzLjgtNDEuNi00OS41LTQzLjJ6TTQ3OSA0NDljLTguNC0xLjYtMTIuNCAxMS4zLTkuNSAxOC40IDIuNCA1LjcgMTAuMyAxMy41IDE3LjMgMTYuMiA5LjIgMy4yIDIxLjEtMyAyMS4zLTkuNSAuOS04LjQtMjAuMi0yMy41LTI5LjEtMjUuMXoiXQogICAgfTsKICAgIGZhSmVua2lucyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJqZW5raW5zIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYjYiLCAiTTQ1NS40IDQyNWMtMS40LTExLjItMTktMjMuMS0yOC4yLTMxLjktNS4xLTUtMjktMjMuMS0zMC40LTI5LjktMS40LTYuNiA5LjctMjEuNSAxMy4zLTI4LjkgNS4xLTEwLjcgOC44LTIzLjcgMTEuMy0zMi42IDE4LjgtNjYuMSAyMC43LTE1Ni45LTYuMi0yMTEuMi0xMC4yLTIwLjYtMzguNi00OS01Ni40LTYyLjUtNDItMzEuNy0xMTkuNi0zNS4zLTE3MC4xLTE2LjYtMTQuMSA1LjItMjcuOCA5LjgtNDAuMSAxNy4xLTMzLjEgMTkuNC02OC4zIDMyLjUtNzguMSA3MS42LTI0LjIgMTAuOC0zMS41IDQxLjgtMzAuMyA3Ny44IC4yIDcgNC4xIDE1LjggMi43IDIyLjQtLjcgMy4zLTUuMiA3LjYtNi4xIDkuOC0xMS42IDI3LjctMi4zIDY0IDExLjEgODMuNyA4LjEgMTEuOSAyMS41IDIyLjQgMzkuMiAyNS4yIC43IDEwLjYgMy4zIDE5LjcgOC4yIDMwLjQgMy4xIDYuOCAxNC43IDE5IDEwLjQgMjcuNy0yLjIgNC40LTIxIDEzLjgtMjcuMyAxNy42LTIxLjEgMTIuNS0zNi40IDIwLjMtNTUuOSAzNC4zLTEyLjYgOS0zMi4zIDEwLjItMjkuMiAzMS4xIDIuMSAxNC4xIDEwLjEgMzEuNiAxNC43IDQ1LjggLjcgMiAxLjQgNC4xIDIuMSA2bDQyMiAwYzQuOS0xNS4zIDkuNy0zMC45IDE0LjYtNDcuMiAzLjQtMTEuNCAxMC4yLTI3LjggOC43LTM5Ljd6TTE3NC4yIDMzLjdjMS44LS41IDMuNCAuNyA0LjkgMi40LS4yIDUuMi01LjQgNS4xLTguOSA2LjgtNS40IDYuNy0xMy40IDkuOC0yMCAxNy4yLTYuOCA3LjUtMTQuNCAyNy43LTIzLjQgMzAtNC41IDEuMS05LjctLjgtMTMuNi0uNS0xMC40IC43LTE3LjcgNi0yOC4zIDcuNSAxMy42LTI5LjkgNTYuMS01NCA4OS4zLTYzLjR6TTY5LjQgMTI3LjNjMTMuNS0xNC45IDMyLjEtMjQuMSA1NC44LTI1LjkgMTEuNyAyOS43LTguNCA2NS0uOSA5Ny42IDIuMyA5LjkgMTAuMiAyNS40LTIuNCAyNS43IC4zLTI4LjMtMzQuOC00Ni4zLTYxLjMtMjkuNi0xLjgtMjEuNS00LjktNTEuNyA5LjgtNjcuOHptMzYuNyAyMDAuMmMtMS00LjEtMi43LTEyLjktMi4zLTE1LjEgMS42LTguNyAxNy4xLTEyLjUgMTEtMjQuNy0xMS4zLS4xLTEzLjggMTAuMi0yNC4xIDExLjMtMjYuNyAyLjYtNDUuNi0zNS40LTQ0LjQtNTguNCAxLTE5LjUgMTcuNi0zOC4yIDQwLjEtMzUuOCAxNiAxLjggMjEuNCAxOS4yIDI0LjUgMzQuNyA5LjIgLjUgMjIuNS0uNCAyNi45LTcuNi0uNi0xNy41LTguOC0zMS42LTguMi00Ny43IDEtMzAuMyAxNy41LTU3LjYgNC44LTg3LjQgMTMuNi0zMC45IDUzLjUtNTUuMyA4My4xLTcwIDM2LjYtMTguMyA5NC45LTMuNyAxMjkuMyAxNS44IDE5LjcgMTEuMSAzNC40IDMyLjcgNDguMyA1MC43LTE5LjUtNS44LTM2LjEgNC4yLTMzLjEgMjAuMyAxNi4zLTE0LjkgNDQuMi0uMiA1Mi41IDE2LjQgNy45IDE1LjggNy44IDM5LjMgOSA2Mi44IDIuOSA1Ny0xMC40IDExNS45LTM5LjEgMTU3LjEtNy43IDExLTE0LjEgMjMtMjQuOSAzMC42LTI2IDE4LjItNjUuNCAzNC43LTk5LjIgMjMuNC00NC43LTE1LTY1LTQ0LjgtODkuNS03OC44IC43IDE4LjcgMTMuOCAzNC4xIDI2LjggNDguNCAxMS4zIDEyLjUgMjUgMjYuNiAzOS43IDMyLjQtMTIuMy0yLjktMzEuMS0zLjgtMzYuMiA3LjItMjguNi0xLjktNTUuMS00LjgtNjguNy0yNC4yLTEwLjYtMTUuNC0yMS40LTQxLjQtMjYuMy02MS40em0yMjIgMTI0LjFjNC4xLTMgMTEuMS0yLjkgMTcuNC0zLjYtNS40LTIuNy0xMy0zLjctMTkuMy0yLjItLjEtNC4yLTItNi44LTMuMi0xMC4yIDEwLjYtMy44IDM1LjUtMjguNSA0OS42LTIwLjMgNi43IDMuOSA5LjUgMjYuMiAxMC4xIDM3IC40IDktLjggMTgtNC41IDIyLjgtMTguOC0uNi0zNS44LTIuOC01MC43LTcgLjktNi4xLTEtMTIuMSAuNi0xNi41em0tMTcuMi0yMGMtMTYuOCAuOC0yNi0xLjItMzguMy0xMC44IC4yLS44IDEuNC0uNSAxLjUtMS40IDE4IDggNDAuOC0zLjMgNTktNC45LTcuOSA1LjEtMTQuNiAxMS42LTIyLjIgMTcuMXptLTEyLjEgMzMuMmMtMS42LTkuNC0zLjUtMTItMi44LTIwLjIgMjUtMTYuNiAyOS43IDI4LjYgMi44IDIwLjJ6TTE5NC4zIDQzOC42Yy0xMS42LS43LTQ4LjEtMTQtMzguNS0yMy43IDkuNCA2LjUgMjcuNSA0LjkgNDEuMyA3LjMgLjggNC40LTIuOCAxMC4yLTIuOCAxNi40ek0yNiA0OTcuMWMtNC4zLTEyLjctOS4yLTI1LjEtMTQuOC0zNi45IDMwLjgtMjMuOCA2NS4zLTQ4LjkgMTAyLjItNjMuNSAyLjgtMS4xIDIzLjIgMjUuNCAyNi4yIDI3LjYgMTYuNSAxMS43IDM3IDIxIDU2LjIgMzAuMiAxLjIgOC44IDMuOSAyMC4yIDguNyAzNS41IC43IDIuMyAxLjQgNC43IDIuMiA3LjJsLTE4MC43IDAgMC0uMXptMjQwLjYgNS43bC0uOCAwYy4zLS4yIC41LS40IC44LS41bDAgLjV6bTcuNS01LjdjMi4xLTEuNCA0LjMtMi44IDYuNC00LjMgMS4xIDEuNCAyLjIgMi44IDMuMiA0LjNsLTkuNiAwem0xNS4xLTI0LjdjLTEwLjggNy4zLTIwLjYgMTguMy0zMy4zIDI1LjItNiAzLjMtMjcgMTEuNy0zMy40IDEwLjItMy42LS44LTMuOS01LjMtNS40LTkuNS0zLjEtOS0xMC4xLTIzLjQtMTAuOC0zNy0uOC0xNy4yLTIuNS00NiAxNi00Mi40IDE0LjkgMi45IDMyLjMgOS43IDQzLjkgMTYuMSA3LjEgMy45IDExLjEgOC42IDIxLjkgOS41LS4xIDEuNC0uMSAyLjgtLjIgNC4zLTUuOSAzLjktMTUuMyAzLjgtMjEuOCA3LjEgOS41IC40IDE3IDIuNyAyMy41IDUuOS0uMSAzLjQtLjMgNy0uNCAxMC42em01My40IDI0LjdsLTE0IDBjLS4xLTMuMi0yLjgtNS44LTYuMS01LjhzLTUuOSAyLjYtNi4xIDUuOGwtMTcuNCAwYy0yLjgtNC40LTUuNy04LjYtOC45LTEyLjUgMi4xLTIuMiA0LTQuNyA2LTYuOSA5IDMuNyAxNC44LTQuOSAyMS43LTQuMiA3LjkgLjggMTQuMiAxMS43IDI1LjQgMTFsLS42IDEyLjZ6bTguNyAwYy4yLTQgLjQtNy44IC42LTExLjUgMTUuNi03LjMgMjkgMS4zIDM1LjcgMTEuNWwtMzYuMyAwem04My40LTM3Yy0yLjMgMTEuMi01LjggMjQtOS45IDM3LjEtLjItLjEtLjQtLjEtLjYtLjFsLTI3LjkgMGMuNi0xLjEgMS4yLTIuMiAxLjktMy4zLTIuNi02LjEtOS04LjctMTAuOS0xNS41IDEyLjEtMjIuNyA2LjUtOTMuNC0yNC4yLTc4LjUgNC4zLTYuMyAxNS42LTExLjUgMjAuOC0xOS4zIDEzIDEwLjQgMjAuOCAyMC4zIDMzLjIgMzEuNCA2LjggNiAyMCAxMy4zIDIxLjQgMjMuMSAuOCA1LjUtMi42IDE4LjktMy44IDI1LjF6TTE5MC41IDEzMC41YzUuNC0xNC45IDI3LjItMzQuNyA0NS0zMiA3LjcgMS4yIDE4IDguMiAxMi4yIDE3LjctMzAuMi03LTQ1LjIgMTIuNi01NC40IDMzLjEtOC4xLTItNC45LTEzLjEtMi44LTE4Ljh6bTE4NC4xIDYzLjFjOC4yLTMuNiAyMi40LS43IDI5LjYtNS4zLTQuMi0xMS41LTEwLjMtMjEuNC05LjMtMzcuNyAuNSAwIDEgMCAxLjQgLjEgNi44IDE0LjIgMTIuNyAyOS4yIDIxLjQgNDEuNy01LjcgMTMuNS00My42IDI1LjQtNDMuMSAxLjJ6bS05Ni44IDIuN2MtNi44LTEwLjktMTktMzIuNS0xNC41LTQ1LjMgNi41IDExLjkgOC42IDI0LjQgMTcuOCAzMy4zIDQuMSA0IDEyLjIgOSA4LjIgMjAuMi0uOSAyLjctNy44IDguNi0xMS43IDkuNy0xNC40IDQuMy00Ny45IC45LTM2LjYtMTcuMSAxMS45IC43IDI3LjkgNy44IDM2LjgtLjh6bTI3LjMgNzBjMy44IDYuNiAxLjQgMTguNyAxMi4xIDIwLjYgMjAuMiAzLjQgNDMuNi0xMi4zIDU4LjEtMTcuOCA5LTE1LjItLjgtMjAuNy04LjktMzAuNS0xNi42LTIwLTM4LjgtNDQuOC0zOC03NC43IDYuNy00LjkgNy4zIDcuNCA4LjIgOS43IDguNyAyMC4zIDMwLjQgNDYuMiA0Ni4zIDYzLjUgMy45IDQuMyAxMC4zIDguNCAxMSAxMS4yIDIuMSA4LjItNS40IDE4LTQuNSAyMy41LTIxLjcgMTMuOS00NS44IDI5LjEtODEuNCAyNS42LTcuNC02LjctMTAuMy0yMS40LTIuOS0zMS4xem0tMjAxLjMtOS4yYy02LjgtMy45LTguNC0yMS0xNi40LTIxLjQtMTEuNC0uNy05LjMgMjIuMi05LjMgMzUuNS03LjgtNy4xLTkuMi0yOS4xLTMuNS00MC4zLTYuNi0zLjItOS41IDMuNi0xMy4xIDUuOSA0LjctMzQuMSA0OS44LTE1LjggNDIuMyAyMC4zem0yOTkuNiAyOC44Yy0xMC4xIDE5LjItMjQuNCA0MC40LTU0IDQxLS42LTYuMi0xLjEtMTUuNiAwLTE5LjQgMjIuNy0yLjIgMzYuNi0xMy43IDU0LTIxLjZ6TTI2MS41IDI5OC4zYzE4LjkgOS45IDUzLjYgMTEgNzkuMyAxMC4yIDEuNCA1LjYgMS4zIDEyLjYgMS40IDE5LjQtMzMgMS44LTcyLTYuNC04MC43LTI5LjZ6TTM1My43IDM0NWMtMS43IDQuMy01LjMgOS4zLTkuOCAxMS4xLTEyLjEgNC45LTQ1LjYgOC43LTYyLjQtLjMtMTAuNy01LjctMTcuNS0xOC41LTIzLjQtMjYtMi44LTMuNi0xNi45LTEyLjktLjItMTIuOSAxMy4xIDMyLjcgNTggMjkgOTUuOCAyOC4xeiJdCiAgICB9OwogICAgZmFTbGlkZXNoYXJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNsaWRlc2hhcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFlNyIsICJNMTg3LjkgMTUzLjdjLTM0IDAtNjEuNyAyNS43LTYxLjcgNTcuNyAwIDMxLjcgMjcuNyA1Ny43IDYxLjcgNTcuN3M2MS43LTI2IDYxLjctNTcuN2MwLTMyLTI3LjctNTcuNy02MS43LTU3Ljd6bTE0My40IDBjLTM0IDAtNjEuNyAyNS43LTYxLjcgNTcuNyAwIDMxLjcgMjcuNyA1Ny43IDYxLjcgNTcuNyAzNC4zIDAgNjEuNy0yNiA2MS43LTU3LjcgLjEtMzItMjcuNC01Ny43LTYxLjctNTcuN3ptMTU2LjYgOTBsLTYgNC4zIDAtMTk4LjNjMC0yNy40LTIwLjYtNDkuNy00Ni00OS43TDc2LjggMGMtMjUuNCAwLTQ2IDIyLjMtNDYgNDkuN2wwIDE5OC4zYy0yLTEuNC00LjMtMi45LTYuMy00LjMtMTUuMS0xMC42LTI1LjEgNC0xNiAxNy43IDE4LjMgMjIuNiA1My4xIDUwLjMgMTA2LjMgNzItNTYuMyAxOTEuNyAxMzcuNCAyMjIuMyAxMzQuMyAxMjQuMSAwLS43IC4zLTU2LjYgLjMtOTYuNiA1LjEgMS4xIDkuNCAyLjMgMTMuNyAzLjEgMCAzOS43IC4zIDkyLjggLjMgOTMuNS0zLjEgOTguMyAxOTAuNiA2Ny43IDEzNC4zLTEyNCA1My4xLTIxLjcgODgtNDkuNCAxMDYuMy03MiA5LjEtMTMuOC0uOS0yOC4zLTE2LjEtMTcuOHptLTMwLjUgMTkuMmMtNjguOSAzNy40LTEyOC4zIDMxLjEtMTYwLjYgMjkuNy0yMy43LS45LTMyLjYgOS4xLTMzLjcgMjQuOS0xMC4zLTcuNy0xOC42LTE1LjUtMjAuMy0xNy4xLTUuMS01LjQtMTMuNy04LTI3LjEtNy43LTMxLjcgMS4xLTg5LjcgNy40LTE1Ny40LTI4bDAtMTkyLjRjMC0zNC45IDguOS00NS43IDQwLjYtNDUuN2wzMTcuNyAwYzMwLjMgMCA0MC45IDEyLjkgNDAuOSA0NS43bDAgMTkwLjYtLjEgMHoiXQogICAgfTsKICAgIGZhVWJlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1YmVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0MDIiLCAiTTQxNC4xIDMyTDMzLjkgMzJDMTUuMiAzMiAwIDQ3LjIgMCA2NS45TDAgNDQ2YzAgMTguOCAxNS4yIDM0IDMzLjkgMzRMNDE0IDQ4MGMxOC43IDAgMzMuOS0xNS4yIDMzLjktMzMuOWwwLTM4MC4yQzQ0OCA0Ny4yIDQzMi44IDMyIDQxNC4xIDMyek0yMzcuNiAzOTEuMUMxNjMgMzk4LjYgOTYuNCAzNDQuMiA4OC45IDI2OS42bDk0LjQgMCAwIDIwLjRjMCAzLjcgMyA2LjggNi44IDYuOGw2Ny45IDBjMy43IDAgNi44LTMgNi44LTYuOGwwLTY3LjljMC0zLjctMy02LjgtNi44LTYuOGwtNjcuOSAwYy0zLjcgMC02LjggMy02LjggNi44bDAgMjAuNC05NC40IDBjNy02OS40IDY1LjQtMTIyLjIgMTM1LjEtMTIyLjJzMTI4LjEgNTIuOCAxMzUuMSAxMjIuMmM3LjUgNzQuNS00Ni45IDE0MS4xLTEyMS41IDE0OC42eiJdCiAgICB9OwogICAgZmFEaWdpdGFsT2NlYW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGlnaXRhbC1vY2VhbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzkxIiwgIk04NyA0ODEuOGw3My43IDAgMC03My42LTczLjcgMCAwIDczLjZ6TTI1LjQgMzQ2LjZsMCA2MS42IDYxLjYgMCAwLTYxLjYtNjEuNiAwek00OTEuNiAxNzYuOUM0NjguNiAxMDIuNyA0MDkuMiA0My42IDMzNSAyMC4zIDE2NC45LTMyLjggOCA5My43IDggMjU1LjlsOTUuOCAwYzAtMTAxLjggMTAxLTE4MC41IDIwOC4xLTE0MS43IDM5LjcgMTQuMyA3MS41IDQ2LjEgODUuOCA4NS43IDM5LjEgMTA3LTM5LjcgMjA3LjgtMTQxLjQgMjA4bDAgLjMtLjMgMCAwIDk1LjhjMTYyLjYgMCAyODguOC0xNTYuOCAyMzUuNi0zMjcuMXptLTIzNS4zIDIzMWwwLTk1LjMtOTUuNiAwIDAgOTUuNiA5NS4zIDAgMC0uMyAuMyAweiJdCiAgICB9OwogICAgZmFTb3VuZGNsb3VkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNvdW5kY2xvdWQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjFiZSIsICJNNjQwLjIgMjk4LjZjLTEuMyAyMy4xLTExLjUgNDQuOC0yOC40IDYwLjVzLTM5LjIgMjQuNC02Mi4zIDI0LjFsLTIxOCAwYy00LjggMC05LjQtMi0xMi44LTUuNHMtNS4zLTgtNS4zLTEyLjhsMC0yMzQuOGMtLjItNCAuOS04IDMuMS0xMS40czUuMy02LjEgOS03LjdjMCAwIDIwLjEtMTMuOSA2Mi4zLTEzLjkgMjUuOCAwIDUxLjEgNi45IDczLjMgMjAuMSAxNy4zIDEwLjIgMzIuMyAyMy44IDQ0LjEgNDAuMXMyMCAzNC44IDI0LjIgNTQuNGM3LjUtMi4xIDE1LjMtMy4yIDIzLjEtMy4yIDExLjctLjEgMjMuMyAyLjIgMzQuMiA2LjdzMjAuNSAxMS4zIDI4LjcgMTkuNyAxNC42IDE4LjMgMTguOSAyOS4zIDYuMyAyMi42IDUuOSAzNC4zem0tMzU0LTE1My41Yy4xLTEgMC0yLS4zLTIuOXMtLjgtMS44LTEuNS0yLjYtMS41LTEuMy0yLjQtMS43Yy0xLjgtLjgtNC0uOC01LjggMC0uOSAuNC0xLjcgMS0yLjQgMS43cy0xLjIgMS42LTEuNSAyLjYtLjQgMS45LS4zIDIuOWMtNiA3OC45LTEwLjYgMTUyLjkgMCAyMzEuNiAuMiAxLjcgMSAzLjMgMi4zIDQuNSAyLjYgMi40IDYuOCAyLjQgOS40IDAgMS4zLTEuMiAyLjEtMi44IDIuMy00LjUgMTEuMy03OS40IDYuNi0xNTIgMC0yMzEuNmwuMiAwem0tNDQgMjcuM2MtLjItMS44LTEuMS0zLjUtMi40LTQuN3MtMy4xLTEuOS01LTEuOS0zLjYgLjctNSAxLjktMi4yIDIuOS0yLjQgNC43Yy03LjkgNjcuOS03LjkgMTM2LjUgMCAyMDQuNCAuMyAxLjggMS4yIDMuNCAyLjUgNC41czMuMSAxLjggNC44IDEuOCAzLjUtLjYgNC44LTEuOCAyLjItMi44IDIuNS00LjVjOC44LTY3LjggOC44LTEzNi41IC4xLTIwNC40bC4xIDB6bS00NC4zLTYuOWMtLjItMS44LTEtMy40LTIuMy00LjZzLTMtMS44LTQuOC0xLjgtMy41IC43LTQuOCAxLjgtMi4xIDIuOC0yLjMgNC42Yy02LjcgNzItMTAuMiAxMzkuMyAwIDIxMS4xIDAgMS45IC43IDMuNyAyLjEgNXMzLjEgMi4xIDUgMi4xIDMuNy0uNyA1LTIuMSAyLjEtMy4xIDIuMS01YzEwLjUtNzIuOCA3LjMtMTM4LjIgLjEtMjExLjFsLS4xIDB6bS00NCAyMC42YzAtMS45LS44LTMuOC0yLjEtNS4ycy0zLjItMi4xLTUuMi0yLjEtMy44IC44LTUuMiAyLjEtMi4xIDMuMi0yLjEgNS4yYy04LjEgNjMuMy04LjEgMTI3LjUgMCAxOTAuOCAuMiAxLjggMSAzLjQgMi40IDQuNnMzLjEgMS45IDQuOCAxLjkgMy41LS43IDQuOC0xLjkgMi4yLTIuOCAyLjQtNC42YzguOC02My4zIDguOS0xMjcuNSAuMy0xOTAuOGwtLjEgMHptLTQ0LjUgNDcuNmMwLTEuOS0uOC0zLjgtMi4xLTUuMXMtMy4yLTIuMS01LjEtMi4xLTMuOCAuOC01LjEgMi4xLTIuMSAzLjItMi4xIDUuMWMtMTAuNSA0OS4yLTUuNSA5My45IC40IDE0My42IC4zIDEuNiAxLjEgMy4xIDIuMyA0LjJzMi44IDEuNyA0LjUgMS43IDMuMi0uNiA0LjUtMS43IDIuMS0yLjUgMi4zLTQuMmM2LjYtNTAuNCAxMS42LTk0LjEgLjQtMTQzLjZ6bS00NC4xLTcuNWMtLjItMS44LTEuMS0zLjUtMi40LTQuOHMtMy4yLTEuOS01LTEuOS0zLjYgLjctNSAxLjktMi4yIDIuOS0yLjQgNC44Yy05LjMgNTAuMi02LjIgOTQuNCAuMyAxNDQuNSAuNyA3LjYgMTMuNiA3LjUgMTQuNCAwIDcuMi01MC45IDEwLjUtOTMuOCAuMy0xNDQuNWwtLjIgMHpNMjAuNyAyNTAuOGMtLjItMS44LTEuMS0zLjUtMi40LTQuOHMtMy4yLTEuOS01LTEuOS0zLjYgLjctNSAxLjktMi4zIDIuOS0yLjQgNC44Yy04LjUgMzMuNy01LjkgNjEuNiAuNiA5NS40IC4yIDEuNyAxIDMuMyAyLjMgNC40czIuOSAxLjggNC43IDEuOCAzLjQtLjYgNC43LTEuOCAyLjEtMi43IDIuMy00LjRjNy41LTM0LjUgMTEuMi02MS44IC40LTk1LjRsLS4yIDB6Il0KICAgIH07CiAgICBmYVNxdWFyZUZpZ21hID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1maWdtYSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlN2U0IiwgIk0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwek0xNzMuNyA5NmMtMzMgMC01OS44IDI2LjgtNTkuOCA1OS44IDAgMjEgMTAuOCAzOS40IDI3LjIgNTAuMS0xNi40IDEwLjctMjcuMiAyOS4xLTI3LjIgNTAuMXMxMC44IDM5LjUgMjcuMiA1MC4xYy0xNi40IDEwLjctMjcuMiAyOS4xLTI3LjIgNTAuMSAwIDMzLjEgMjcuMSA1OS44IDYwLjEgNTkuOCAzMy4yIDAgNjAuNi0yNi45IDYwLjYtNjAuM2wwLTU1LjdjMTAuNiA5LjggMjQuOCAxNS44IDQwLjQgMTUuOGwxLjEgMGMzMyAwIDU5LjgtMjYuOCA1OS44LTU5LjggMC0yMS0xMC44LTM5LjUtMjcuMi01MC4xIDE2LjQtMTAuNyAyNy4yLTI5LjEgMjcuMi01MC4xIDAtMzMtMjYuOC01OS44LTU5LjgtNTkuOEwxNzMuNyA5NnptNDEuNiAyMTkuOGwwIDM5LjljMCAyMi42LTE4LjYgNDEtNDEuMyA0MS0yMi40IDAtNDAuNy0xOC4yLTQwLjctNDAuNSAwLTIyLjMgMTguMS00MC40IDQwLjMtNDAuNGw0MS43IDB6bTAtMTAwLjNsMCA4MC45LTQxLjcgMGMtMjIuMy0uMS00MC4zLTE4LjItNDAuMy00MC41IDAtMjIuMyAxOC4xLTQwLjUgNDAuNS00MC41bDQxLjYgMHptNjAuOCAwYzIyLjMgMCA0MC41IDE4LjEgNDAuNSA0MC41cy0xOC4xIDQwLjUtNDAuNSA0MC41bC0xLjEgMGMtMjIuMyAwLTQwLjQtMTguMS00MC40LTQwLjVzMTguMS00MC41IDQwLjQtNDAuNWwxLjEgMHptLTYwLjgtMTkuM2wtNDEuNiAwYy0yMi4zIDAtNDAuNS0xOC4xLTQwLjUtNDAuNHMxOC4xLTQwLjUgNDAuNS00MC41bDQxLjYgMCAwIDgwLjl6bTYwLjgtODAuOWMyMi4zIDAgNDAuNSAxOC4xIDQwLjUgNDAuNXMtMTguMSA0MC40LTQwLjUgNDAuNGwtNDEuNSAwIDAtODAuOSA0MS41IDB6Il0KICAgIH07CiAgICBmYUNyZWF0aXZlQ29tbW9uc1NhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtc2EiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlZiIsICJNMjU1LjYgOEMzOTcuNCA4IDUwNCAxMTguMSA1MDQgMjU2IDUwNCA0MDMuMSAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS42IDUwNCA4IDM5NC41IDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4em0uOCA0NC43Yy0xMTguMiAwLTIwMy43IDk3LjktMjAzLjcgMjAzLjMgMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOCAuMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zek0xNDUuNyAyMjFjMTMtODMuOSA4MC41LTk1LjcgMTA4LjktOTUuNyA5OS44IDAgMTI3LjUgODIuNSAxMjcuNSAxMzQuMiAwIDYzLjYtNDEgMTMyLjktMTI4LjkgMTMyLjktMzguOSAwLTk5LjEtMjAtMTA5LjQtOTdsNjIuNSAwYzEuNSAzMC4xIDE5LjYgNDUuMiA1NC41IDQ1LjIgMjMuMyAwIDU4LTE4LjIgNTgtODIuOCAwLTgyLjUtNDkuMS04MC42LTU2LjctODAuNi0zMy4xIDAtNTEuNyAxNC42LTU1LjggNDMuOGwxOC4yIDAtNDkuMiA0OS4yLTQ5LTQ5LjIgMTkuNCAweiJdCiAgICB9OwogICAgZmFDaHJvbWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2hyb21lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNjgiLCAiTTAgMjU2YzAtNDYuNiAxMi41LTkwLjQgMzQuMy0xMjguOUwxNDQuMSAzMTguM2MyMS45IDM5LjIgNjMuOCA2NS43IDExMS45IDY1LjcgMTQuMyAwIDI3LjEtMi4zIDQwLjgtNi42TDIyMC41IDUwOS42Qzk1LjkgNDkyLjMgMCAzODUuMyAwIDI1NnptMzY1LjEgNjUuNmMxMi4zLTE5LjIgMTguOS00Mi41IDE4LjktNjUuNiAwLTM4LjItMTYuOC03Mi41LTQzLjMtOTZsMTUyLjcgMGMxMiAyOS42IDE4LjYgNjIuMSAxOC42IDk2IDAgMTQxLjQtMTE0LjYgMjU1LjEtMjU2IDI1NkwzNjUuMSAzMjEuNnpNNDc3LjggMTI4TDI1NiAxMjhjLTYyLjkgMC0xMTMuNyA0NC4xLTEyNS41IDEwMi43TDU0LjIgOTguNUMxMDEgMzguNSAxNzQgMCAyNTYgMCAzNTAuOCAwIDQzMy41IDUxLjUgNDc3LjggMTI4ek0zNDQgMjU2YTg4IDg4IDAgMSAxIC0xNzYgMCA4OCA4OCAwIDEgMSAxNzYgMHoiXQogICAgfTsKICAgIGZhVHJhZGVGZWRlcmF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRyYWRlLWZlZGVyYXRpb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUxMyIsICJNMjU2IDguOGEyNDcuMiAyNDcuMiAwIDEgMCAwIDQ5NC40IDI0Ny4yIDI0Ny4yIDAgMSAwIDAtNDk0LjR6bTAgMTEuNmEyMzUuNiAyMzUuNiAwIDEgMSAwIDQ3MS4yIDIzNS42IDIzNS42IDAgMSAxIDAtNDcxLjJ6TTQxMS4xIDE2My4xbDAtNDYuOC0xOTMuOCAwIDAgODEuNy0xNTUuMSAwIDM2LjcgNDYgMTE3LjcgMCAwIDE5Ni44IDQ4LjggMCAwLTE5NS44IDgzLjMgMCAwLTQ3LTgzLjMgMCAwLTM0LjggMTQ1LjcgMCAwLS4xem0tNzMuMyA0NS4xbDAgMjMuOS04Mi45IDAgMCAxOTcuNC0yNi44IDAgMC0xOTcuNC0xMjMuOCAwLTIwLjEtMjMuOSAxNDMuOSAwIDAtODAuNiAxNzEuOCAwIDAgMjQuNC0xNDUgMCAwIDU2LjIgODIuOSAwem0tMTYxLjMtNjlsLTEyLjQtMjAuNyAyLjEgMjMuOC0yMy41IDUuNCAyMy4zIDUuNC0yLjEgMjQgMTIuMy0yMC41IDIyLjIgOS41LTE1LjctMTguMSAxNS44LTE4LjEtMjIgOS4zem0tMjkuNi0xOS43bDkuMy0xMS41LTEyLjcgNS45LTgtMTIuNCAxLjcgMTMuOS0xNC4zIDMuOCAxMy43IDIuNy0uOCAxNC43IDYuOC0xMi4yIDEzLjggNS4zLTkuNS0xMC4yek0zMTIuMyAyNjQuN2wtMTMuMSA1LjYtNy4zLTEyLjIgMS4zIDE0LjItMTMuOSAzLjIgMTMuOSAzLjItMS4yIDE0LjIgNy4zLTEyLjIgMTMuMSA1LjUtOS40LTEwLjcgOS4zLTEwLjh6bTEwNi45LTc3LjJsLTIwLjkgOS4xLTEyLTE5LjYgMi4yIDIyLjctMjIuMyA1LjQgMjIuMiA0LjktMS44IDIyLjkgMTEuNS0xOS42IDIxLjIgOC44LTE1LjEtMTcgMTUtMTcuNnpNMjU2IDI5LjlhMjI2LjEgMjI2LjEgMCAxIDAgMCA0NTIuMiAyMjYuMSAyMjYuMSAwIDEgMCAwLTQ1Mi4yek0zNTAuNiAxOTZsMCA1MS04My4zIDAgMCAxOTUuNy01Mi43IDAgMC0xOTYuOC0xMTYuNyAwLTQwLTQ5LjkgMTU3LjQgMCAwLTgxLjYgMTk3LjggMCAwIDUwLjctMTQ1LjcgMCAwIDMwLjkgODMuMiAwek0yNTYgNDMuMmM2MC4zIDAgMTE0LjggMjUgMTUzLjYgNjUuMmwtMTk5LjEgMCAwIDgxLjYtMTU3LjQgMEM4MS4xIDEwNC44IDE2MS40IDQzLjIgMjU2IDQzLjJ6bTAgNDI3LjFjLTExNy45IDAtMjEzLjYtOTUuNi0yMTMuNi0yMTMuNSAwLTIxLjIgMy4xLTQxLjggOC45LTYxLjFsNDMuOCA1Ni4zIDExNC43IDAgMCAxOTYuOCA2NC42IDAgMC0xOTUuOCA4My4zIDAgMC02Mi43LTgzLjIgMCAwLTE5LjIgMTQ1LjYgMCAwLTUwLjhjMzAuOCAzNyA0OS4zIDg0LjYgNDkuMyAxMzYuNSAuMSAxMTcuOS05NS41IDIxMy41LTIxMy40IDIxMy41ek0xODYuOCAyNzVsLTExLTIxLjQgMS43IDI0LjUtMjMuNyAzLjkgMjMuOCA1LjktMy43IDIzLjggMTMtMjAuOSAyMS41IDEwLjgtMTUuOC0xOC44IDE2LjktMTcuMS0yMi43IDkuM3oiXQogICAgfTsKICAgIGZhVmFhZGluID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZhYWRpbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDA4IiwgIk0yMjQuNSAxNDAuN0MyMjYgMTIzLjEgMjI5LjQgODggMjc0LjMgODhsOTguNiAwYzIwLjcgMCAzMi4xLTcuOCAzMi4xLTIxLjZsMC0xMi4zYzAtMTIuMiA5LjMtMjIuMSAyMS41LTIyLjFTNDQ4IDQxLjkgNDQ4IDU0LjFsMCAzNi41YzAgNDIuOS0yMS41IDYyLTY2LjggNjJsLTEwMC41IDBjLTMwLjEgMC0zMyAxNC43LTMzIDI3LjEgMCAxLjMtLjEgMi41LS4yIDMuNy0uNyAxMi4zLTEwLjkgMjIuMi0yMy40IDIyLjJzLTIyLjctOS44LTIzLjQtMjIuMmMtLjEtMS4yLS4yLTIuNC0uMi0zLjcgMC0xMi4zLTMtMjcuMS0zMy0yNy4xbC0xMDAuNyAwQzIxLjUgMTUyLjYgMCAxMzMuNSAwIDkwLjZMMCA1NC4xQzAgNDEuOSA5LjQgMzIgMjEuNiAzMnMyMS41IDkuOSAyMS41IDIyLjFsMCAxMi4zQzQzLjEgODAuMiA1NC41IDg4IDc1LjIgODhsOTguNiAwYzQ0LjggMCA0OC4zIDM1LjEgNDkuOCA1Mi43bC45IDB6TTIyNCA0NTZjMTEuNSAwIDIxLjQtNyAyNS43LTE2LjMgMS4xLTEuOCA5Ny4xLTE2OS42IDk4LjItMTcxLjQgMTEuOS0xOS42LTMuMi00NC4zLTI3LjItNDQuMy0xMy45IDAtMjMuMyA2LjQtMjkuOCAyMC4zTDIyNCAzNjIgMTU3LjEgMjQ0LjNjLTYuNC0xMy45LTE1LjktMjAuMy0yOS44LTIwLjMtMjQgMC0zOS4xIDI0LjYtMjcuMiA0NC4zIDEuMSAxLjkgOTcuMSAxNjkuNiA5OC4yIDE3MS40IDQuMyA5LjMgMTQuMiAxNi4zIDI1LjcgMTYuM3oiXQogICAgfTsKICAgIGZhRGV2aWFudGFydCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkZXZpYW50YXJ0IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYxYmQiLCAiTTMyMCA5My4ybC05OC4yIDE3OS4xIDcuNCA5LjUgOTAuOCAwIDAgMTI3LjctMTYwLjkgMC0xMy41IDkuMi00My43IDg0Yy0uMyAwLTguNiA4LjYtOS4yIDkuMmwtOTIuNyAwIDAtOTMuMiA5My4yLTE3OS40LTcuNC05LjItODUuOCAwIDAtMTI3LjYgMTU2IDAgMTMuNS05LjIgNDMuNy04NGMuMyAwIDguNi04LjYgOS4yLTkuMmw5Ny42IDAgMCA5My4xeiJdCiAgICB9OwogICAgZmFNZWRpdW0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWVkaXVtIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjI0MDcsICJtZWRpdW0tbSJdLCAiZjIzYSIsICJNMzY5LjQgMzJjNDMuNCAwIDc4LjYgMzUuMiA3OC42IDc4LjZsMCA4My44Yy0xLjktLjEtMy44LS4yLTUuNy0uMmwtLjQgMGMtMTAgMC0yMi4zIDIuNC0zMS4xIDYuOC0xMCA0LjYtMTguNyAxMS41LTI2IDIwLjYtMTEuOCAxNC42LTE4LjkgMzQuMy0yMC42IDU2LjQtLjEgLjctLjEgMS4zLS4yIDJzLS4xIDEuMi0uMSAxLjljLS4xIDEuMi0uMSAyLjQtLjEgMy42IDAgMS45LS4xIDMuOCAwIDUuOCAxLjIgNTAuMSAyOC4yIDkwLjIgNzYuMyA5MC4yIDIuNyAwIDUuMy0uMSA3LjktLjRsMCAyMC40YzAgNDMuNC0zNS4yIDc4LjYtNzguNiA3OC42TDc4LjYgNDgwQzM1LjIgNDgwIDAgNDQ0LjggMCA0MDEuNEwwIDExMC42QzAgNjcuMiAzNS4yIDMyIDc4LjYgMzJsMjkwLjggMHpNODIuMyAxMzguOWwuMyAuMWMxMy4yIDMgMTkuOCA3LjQgMTkuOCAyMy40bDAgMTg3LjJjMCAxNi02LjcgMjAuNC0xOS45IDIzLjRsLS4zIC4xIDAgMi44IDUyLjggMCAwLTIuOC0uMy0uMWMtMTMuMi0zLTE5LjktNy40LTE5LjktMjMuNGwwLTE3Ni4zIDg2LjEgMjAyLjUgNC45IDAgODguNi0yMDguMiAwIDE4Ni42Yy0xLjEgMTIuNi03LjggMTYuNS0xOS43IDE5LjJsLS4zIC4xIDAgMi43IDkxLjkgMCAwLTIuNy0uMy0uMWMtMTEuOS0yLjctMTguNy02LjYtMTkuOS0xOS4ybC0uMS0xOTEuOCAuMSAwYzAtMTYgNi43LTIwLjQgMTkuOS0yMy40bC4zLS4xIDAtMi43LTcyLjIgMC02NyAxNTcuNC02Ny0xNTcuNC03Ny44IDAgMCAyLjd6TTQ0OCAzNDAuM2MtMjUuMS03LjQtNDMtMzUuMS00MS4yLTY3LjhsMCAwIDQxLjEgMCAwIDY3Ljh6bS02LjQtMTM1LjZjMi4zIDAgNC40IC4zIDYuNCAuOWwwIDU3LjQtNDAuMiAwYzEuNS0zMy42IDEzLjYtNTcuOSAzMy44LTU4LjN6Il0KICAgIH07CiAgICBmYU1lZGl1bU0gPSBmYU1lZGl1bTsKICAgIGZhT3BlbmNhcnQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib3BlbmNhcnQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjIzZCIsICJNMzMxLjggNDQwLjRhNDUuOCA0NS44IDAgMSAxIDkxLjUgLjMgNDUuOCA0NS44IDAgMSAxIC05MS41LS4zek0xNjkuNCAzOTQuOWE0NS43IDQ1LjcgMCAxIDAgLjMgOTEuMyA0NS43IDQ1LjcgMCAxIDAgLS4zLTkxLjN6bTI5MS43LTI3MGMtMzAyLjIgMC0zNzkuMi0xMi44LTQ2MS4xLTk5LjIgMzQuNCA1MS43IDUzLjMgMTQ4LjkgMzczLjEgMTQ0LjIgMzMzLjMtNSAxMzAgODYuMSA3MC44IDE4OC45IDE4Ni43LTE2Ni43IDMxOS40LTIzMy45IDE3LjItMjMzLjl6Il0KICAgIH07CiAgICBmYVlDb21iaW5hdG9yID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInktY29tYmluYXRvciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjNiIiwgIk00NDggMzJsMCA0NDgtNDQ4IDAgMC00NDggNDQ4IDB6TTIzNiAyODcuNWw3Ny41LTE0NS41LTMyLjcgMC00NS44IDkxYy00LjcgOS4zLTkgMTguMy0xMi44IDI2LjhsLTEyLjItMjYuOC00NS4yLTkxLTM1IDAgNzYuNyAxNDMuOCAwIDk0LjUgMjkuNSAwIDAtOTIuOHoiXQogICAgfTsKICAgIGZhTGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsaW5lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzYzAiLCAiTTMxMSAxOTYuOGwwIDgxLjNjMCAyLjEtMS42IDMuNy0zLjcgMy43bC0xMyAwYy0xLjMgMC0yLjQtLjctMy0xLjVMMjU0IDIzMCAyNTQgMjc4LjJjMCAyLjEtMS42IDMuNy0zLjcgMy43bC0xMyAwYy0yLjEgMC0zLjctMS42LTMuNy0zLjdsMC04MS4zYzAtMi4xIDEuNi0zLjcgMy43LTMuN2wxMi45IDBjMS4xIDAgMi40IC42IDMgMS42bDM3LjMgNTAuMyAwLTQ4LjJjMC0yLjEgMS42LTMuNyAzLjctMy43bDEzIDBjMi4xLS4xIDMuOCAxLjYgMy44IDMuNWwwIC4xem0tOTMuNy0zLjdsLTEzIDBjLTIuMSAwLTMuNyAxLjYtMy43IDMuN2wwIDgxLjNjMCAyLjEgMS42IDMuNyAzLjcgMy43bDEzIDBjMi4xIDAgMy43LTEuNiAzLjctMy43bDAtODEuM2MwLTEuOS0xLjYtMy43LTMuNy0zLjd6bS0zMS40IDY4LjFsLTM1LjYgMCAwLTY0LjRjMC0yLjEtMS42LTMuNy0zLjctMy43bC0xMyAwYy0yLjEgMC0zLjcgMS42LTMuNyAzLjdsMCA4MS4zYzAgMSAuMyAxLjggMSAyLjUgLjcgLjYgMS41IDEgMi41IDFsNTIuMiAwYzIuMSAwIDMuNy0xLjYgMy43LTMuN2wwLTEzYzAtMS45LTEuNi0zLjctMy41LTMuN2wuMSAwem0xOTMuNy02OC4xbC01Mi4zIDBjLTEuOSAwLTMuNyAxLjYtMy43IDMuN2wwIDgxLjNjMCAxLjkgMS42IDMuNyAzLjcgMy43bDUyLjIgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC0xMy4xYzAtMi4xLTEuNi0zLjctMy43LTMuN2wtMzUuNSAwIDAtMTMuNiAzNS41IDBjMi4xIDAgMy43LTEuNiAzLjctMy43bDAtMTMuMWMwLTIuMS0xLjYtMy43LTMuNy0zLjdsLTM1LjUgMCAwLTEzLjcgMzUuNSAwYzIuMSAwIDMuNy0xLjYgMy43LTMuN2wwLTEzYy0uMS0xLjktMS43LTMuNy0zLjctMy43bC4xIDB6TTUxMiA5My40bDAgMzI2Yy0uMSA1MS4yLTQyLjEgOTIuNy05My40IDkyLjZsLTMyNiAwQzQxLjQgNTExLjktLjEgNDY5LjggMCA0MTguNmwwLTMyNkMuMSA0MS40IDQyLjItLjEgOTMuNCAwbDMyNiAwYzUxLjIgLjEgOTIuNyA0Mi4xIDkyLjYgOTMuNHpNNDQxLjYgMjMzLjVjMC04My40LTgzLjctMTUxLjMtMTg2LjQtMTUxLjNTNjguOCAxNTAuMSA2OC44IDIzMy41YzAgNzQuNyA2Ni4zIDEzNy40IDE1NS45IDE0OS4zIDIxLjggNC43IDE5LjMgMTIuNyAxNC40IDQyLjEtLjggNC43LTMuOCAxOC40IDE2LjEgMTAuMXMxMDcuMy02My4yIDE0Ni41LTEwOC4yYzI3LTI5LjcgMzkuOS01OS44IDM5LjktOTMuMWwwLS4yeiJdCiAgICB9OwogICAgZmFBbWlsaWEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYW1pbGlhIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzNmQiLCAiTTI0MC4yIDMyYy02MS45IDAtMTMxLjUgMTYuOS0xODQuMiA1NS40LTUuMSAzLjEtOS4xIDkuMi03LjIgMTkuNCAxLjEgNS4xIDUuMSAyNy40IDEwLjIgMzkuNiA0LjEgMTAuMiAxNC4yIDEwLjIgMjAuMyA2LjEgMzIuNS0yMi4zIDk2LjUtNDcuNyAxNTIuMy00Ny43IDU3LjkgMCA1OC45IDI4LjQgNTguOSA3My4xbDAgMzguNUMyMDMuMSAyMjcuNyA3OC4zIDI1MSA0Ni44IDI2NC4yIDExLjMgMjgwLjUgMTYuNCAzNTcuNyAxNi40IDM3NlMzMS42IDQ4MCAxNDEuMyA0ODBjNDcuOCAwIDExMy43LTIwLjcgMTUzLjMtNDIuMWwwIDI1LjRjMCAzIDIuMSA4LjIgNi4xIDkuMSAzLjEgMSA1MC43IDIgNTkuOSAyczYyLjUgLjMgNjYuNS0uN2M0LjEtMSA1LjEtNi4xIDUuMS05LjFsMC0yOTYuNmMtLjEtODAuMy01Ny45LTEzNi0xOTItMTM2em01MC4yIDM0OGMtMjEuNCAxMy4yLTQ4LjcgMjQuNC03OS4xIDI0LjQtNTIuOCAwLTU4LjktMzMuNS01OS00NC43IDAtMTIuMi0zLTQyLjcgMTguMy01Mi45IDI0LjMtMTMuMiA3NS4xLTI5LjQgMTE5LjgtMzMuNWwwIDEwNi43eiJdCiAgICB9OwogICAgZmFBc3ltbWV0cmlrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFzeW1tZXRyaWsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjM3MiIsICJNNTE3LjUgMzA5LjJjMzguOC00MCA1OC4xLTgwIDU4LjUtMTE2LjEgLjgtNjUuNS01OS40LTExOC4yLTE2OS40LTEzNS0xMjguNy0xOS43LTI4OC41IDE1LjUtNDA2LjYgODIuNCA1Mi0yNi41IDExMC42LTQ4LjIgMTcwLjctNTguMiA3NC41LTIwLjUgMTUzLTI1LjQgMjIxLjMtMTQuOCAxNTIuNSAyMy44IDE5Ni44IDEyNy41IDk4LjggMjMxLjctMTAuMiAxMC44LTIyIDIxLjEtMzUgMzAuNkwzMDQuOSAxMDMuNCAxMTQuNyAzODguOWMtNjUuNi0yOS40LTc2LjUtOTAuMi0xOS4xLTE1MS4yIDIwLjgtMjIuMiA0OC4zLTQxLjkgNzkuNS01OC4xIDIwLTEyLjIgMzkuNy0yMi42IDYyLTMwLjctNjUuMSAyMC4zLTEyMi43IDUyLjktMTYxLjYgOTIuOS0yNy43IDI4LjYtNDEuNCA1Ny4xLTQxLjcgODIuOS0uNSAzNS4xIDIzLjQgNjUuMSA2OC40IDgzbC0zNC41IDUxLjcgMTAxLjYgMCAyMi0zNC40YzIyLjIgMSA0NS4zIDAgNjguNi0yLjdsLTIyLjggMzcuMSAxMzUuNSAwLTMyLjYtNTMuMWMxOC42LTUuMyAzNi45LTExLjUgNTQuNS0xOC43bDQ1LjkgNzEuOCAxMDEuNiAwLTczLjQtMTEwLjRjMTguNS0xMi4xIDM1LTI1LjUgNDguOS0zOS44ek0zMjkuOSAzODkuN2wtMjUtNDAuNi0zMi43IDUzLjNjLTIzLjQgMy41LTQ2LjcgNS4xLTY5LjIgNC40bDEwMS45LTE1OS4zIDc4LjcgMTIzYy0xNy4yIDcuNC0zNS4zIDEzLjktNTMuNyAxOS4yeiJdCiAgICB9OwogICAgZmFQaGFicmljYXRvciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaGFicmljYXRvciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2RiIiwgIk0zMzEuMSAyNjIuMWwtLjEtMTNzMjEuNy0xOS44IDIxLjEtMjEuMmwtOS41LTIwYy0uNi0xLjQtMjkuNS0uNS0yOS41LS41bC05LjQtOS4zcy4yLTI4LjUtMS4yLTI5LjFsLTIwLjEtOS4yYy0xLjQtLjYtMjAuNyAyMS0yMC43IDIxbC0xMy4xLS4ycy0yMC41LTIxLjQtMjEuOS0yMC44bC0yMCA4LjNjLTEuNCAuNSAuMiAyOC45IC4yIDI4LjlsLTkuMSA5LjFzLTI5LjItLjktMjkuNyAuNEwxNjAgMjI2LjNjLS42IDEuNCAyMSAyMSAyMSAyMWwuMSAxMi45UzE1OS40IDI4MCAxNjAgMjgxLjRsOS41IDIwYy42IDEuNCAyOS41IC41IDI5LjUgLjVsOS40IDkuM3MtLjIgMzEuOCAxLjIgMzIuM2wyMC4xIDguM2MxLjQgLjYgMjAuNy0yMy41IDIwLjctMjMuNWwxMy4xIC4yczIwLjUgMjMuOCAyMS44IDIzLjNsMjAtNy41YzEuNC0uNi0uMi0zMi4xLS4yLTMyLjFsOS4xLTkuMXMyOS4yIC45IDI5LjctLjVsOC4xLTE5LjhjLjctMS4xLTIwLjktMjAuNy0yMC45LTIwLjd6bS00NC45LTguN2MuNyAxNy4xLTEyLjggMzEuNi0zMC4xIDMyLjRzLTMyLjEtMTIuNS0zMi44LTI5LjYgMTIuOC0zMS42IDMwLjEtMzIuM2MxNy4zLS44IDMyLjEgMTIuNSAzMi44IDI5LjV6bTIwMS4yLTM3LjlsLTk3LTk3LS4xIC4xYy03NS4xLTczLjMtMTk1LjQtNzIuOC0yNjkuOCAxLjYtNTAuOSA1MS0yNy44IDI3LjktOTUuNyA5NS4zLTIyLjMgMjIuMy0yMi4zIDU4LjcgMCA4MSA2OS45IDY5LjQgNDYuNCA0NiA5Ny40IDk3bC4xLS4xYzc1LjEgNzMuMyAxOTUuNCA3Mi45IDI2OS44LTEuNiA1MS01MC45IDI3LjktMjcuOSA5NS4zLTk1LjMgMjIuMy0yMi4zIDIyLjMtNTguNyAwLTgxek0zNjMuNSAxNDguMmExNTIuMyAxNTIuMyAwIDEgMSAtMjE1IDIxNS42IDE1Mi4zIDE1Mi4zIDAgMSAxIDIxNS0yMTUuNnoiXQogICAgfTsKICAgIGZhQm90cyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJib3RzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUzNDAiLCAiTTg2LjMgMTk3LjhjLTgtLjEtMTUuOSAxLjctMjMuMSA1LjFzLTEzLjUgOC42LTE4LjQgMTQuOWwwLTYxLjljMC0yLjItLjktNC4zLTIuNC01LjhzLTMuNi0yLjQtNS44LTIuNGwtMjguNCAwYy0yLjIgMC00LjMgLjktNS44IDIuNFMwIDE1My44IDAgMTU2TDAgMzMzLjZjMCAxLjEgLjIgMi4xIC42IDMuMXMxIDEuOSAxLjggMi43IDEuNyAxLjQgMi43IDEuOCAyLjEgLjYgMy4xIC42bDI4LjQgMGMxLjEgMCAyLjEtLjIgMy4xLS42czEuOS0xIDIuNy0xLjggMS40LTEuNyAxLjgtMi43IC42LTIuMSAuNi0zLjFsMC04LjFjMTEuNiAxMy40IDI1LjkgMTkuOCA0MS42IDE5LjggMzQuNiAwIDYxLjktMjYuMiA2MS45LTczLjggMC00NS45LTI3LTczLjYtNjEuOS03My42ek03MS41IDMwNS43Yy05LjYgMC0yMS4yLTQuOS0yNi43LTEyLjVsMC00M2M1LjUtNy42IDE3LjItMTIuOCAyNi43LTEyLjggMTcuNyAwIDMxLjEgMTMuMSAzMS4xIDM0IDAgMjEuMi0xMy40IDM0LjMtMzEuMSAzNC4zem0xNTYuNC01OWExNy40IDE3LjQgMCAxIDAgMCAzNC44IDE3LjQgMTcuNCAwIDEgMCAwLTM0Ljh6bTQ2LjEtOTBsMC00NC43YzIuOC0xLjIgNS4yLTMuMyA2LjYtNnMxLjktNS44IDEuMy04LjktMi4yLTUuNy00LjYtNy43LTUuNC0zLTguNC0zLTYuMSAxLjEtOC40IDMtNCA0LjctNC42IDcuNy0uMSA2LjEgMS4zIDguOSAzLjggNC44IDYuNiA2bDAgNDQuN2MtMjggMS4zLTU0LjQgMTMuNi03My42IDM0LjFzLTI5LjUgNDcuNy0yOC44IDc1LjggMTIuMyA1NC43IDMyLjQgNzQuMyA0NyAzMC42IDc1LjEgMzAuNiA1NS0xMSA3NS4xLTMwLjYgMzEuNy00Ni4zIDMyLjQtNzQuMy05LjctNTUuMy0yOC44LTc1LjgtNDUuNS0zMi44LTczLjYtMzQuMXptODYgMTA3LjRjMCAzMC41LTQwLjggNTUuMy05MS4xIDU1LjNzLTkxLjEtMjQuNy05MS4xLTU1LjMgNDAuOC01NS4zIDkxLjEtNTUuMyA5MS4xIDI0LjcgOTEuMSA1NS4zbDAgMHptLTUwLjIgMTcuNGMzLjQgMCA2LjgtMSA5LjctMi45czUuMS00LjYgNi40LTcuOCAxLjctNi43IDEtMTAuMS0yLjMtNi41LTQuOC04LjktNS41LTQuMS04LjktNC44LTYuOS0uMy0xMC4xIDEtNS45IDMuNS03LjggNi40LTIuOSA2LjItMi45IDkuN2MwIDQuNiAxLjggOSA1LjEgMTIuM3M3LjcgNS4xIDEyLjMgNS4xbDAgMHptMjcwLjktMzFjLTE0LjgtMi42LTIyLjQtMy44LTIyLjQtOS45IDAtNS41IDcuMy05LjkgMTcuNy05LjkgMTIuMiAuMSAyNC4yIDMuNiAzNC41IDEwLjEgMS44IDEuMiA0IDEuNiA2LjIgMS4xczQtMS43IDUuMS0zLjZjLjEtLjEgLjEtLjIgLjItLjNsOC42LTE0LjljMS4xLTEuOSAxLjQtNC4xIC44LTYuMXMtMS45LTMuOS0zLjctNWMtMTUuNy05LjQtMzMuNy0xNC4zLTUyLTE0LjEtMzkgMC02MC4yIDIxLjUtNjAuMiA0Ni4yIDAgMzYuMyAzMy43IDQxLjkgNTcuNiA0NS42IDEzLjQgMi4zIDI0LjEgNC40IDI0LjEgMTEgMCA2LjQtNS41IDEwLjgtMTguOSAxMC44LTEzLjYgMC0zMS02LjItNDIuNi0xMy42LS45LS42LTEuOS0xLTMtMS4ycy0yLjEtLjItMy4yIC4xLTIuMSAuNy0yLjkgMS4zLTEuNiAxLjQtMi4yIDIuM2MwIC4xLS4xIC4xLS4xIC4ybC0xMC4yIDE2LjljLTEuMSAxLjgtMS40IDQtMSA2czEuNyAzLjkgMy41IDVjMTUuMiAxMC4zIDM3LjcgMTYuNyA1OS40IDE2LjcgNDAuNCAwIDY0LTE5LjggNjQtNDYuNSAwLTM4LjEtMzUuNS00My45LTU5LjMtNDguM3ptLTk1LjkgNjAuOGMtLjUtMi0xLjgtMy43LTMuNi00LjhzLTMuOS0xLjUtNS45LTEuMWMtMS40IC4zLTIuOCAuNC00LjIgLjQtNy44IDAtMTIuNS02LjEtMTIuNS0xNC4ybDAtNTEuMiAyMC4zIDBjMi4yIDAgNC4yLS45IDUuOC0yLjRzMi40LTMuNiAyLjQtNS44bDAtMjIuN2MwLTIuMi0uOS00LjItMi40LTUuOHMtMy42LTIuNC01LjgtMi40bC0yMC4zIDAgMC0zMC4yYzAtMi4yLS45LTQuMi0yLjQtNS44cy0zLjYtMi40LTUuOC0yLjRsLTI4LjIgMGMtMi4yIDAtNC4yIC45LTUuOCAyLjRzLTIuNCAzLjYtMi40IDUuOGwwIDMwLjItMTUuMSAwYy0xLjEgMC0yLjEgLjItMy4xIC42cy0xLjkgMS0yLjYgMS44LTEuNCAxLjctMS44IDIuNi0uNiAyLS42IDMuMWwwIDIyLjdjMCAxLjEgLjIgMi4xIC42IDMuMXMxIDEuOSAxLjggMi42IDEuNyAxLjQgMi42IDEuOCAyIC42IDMuMSAuNmwxNS4xIDAgMCA2My43YzAgMjcgMTUuNCA0MS4zIDQzLjkgNDEuMyAxMi4yIDAgMjEuNC0yLjIgMjcuNi01LjQgMS42LS44IDIuOS0yLjIgMy43LTMuOXMuOS0zLjYgLjUtNS40bC01LTE5LjN6Il0KICAgIH07CiAgICBmYVZpbmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidmluZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWNhIiwgIk0zODQgMjU0LjdsMCA1Mi4xYy0xOC40IDQuMi0zNi45IDYuMS01Mi4xIDYuMS0zNi45IDc3LjQtMTAzIDE0My44LTEyNS4xIDE1Ni4yLTE0IDcuOS0yNy4xIDguNC00Mi43LS44LTI3LjEtMTYuMy0xMjkuOS0xMDAuNi0xNjQuMS0zNjUuNmw3NC41IDBjMTguNyAxNTkuMSA2NC41IDI0MC43IDExNC44IDMwMS44IDI3LjktMjcuOSA1NC44LTY1LjEgNzUuNi0xMDYuOS00OS44LTI1LjMtODAuMS04MC45LTgwLjEtMTQ1LjYgMC02NS42IDM3LjctMTE1LjEgMTAyLjItMTE1LjEgMTE0LjkgMCAxMDYuMiAxMjcuOSA4MS42IDE4MS41IDAgMC00Ni40IDkuMi02My41LTIwLjUgMy40LTExLjMgOC4yLTMwLjggOC4yLTQ4LjUgMC0zMS4zLTExLjMtNDYuNi0yOC40LTQ2LjYtMTguMiAwLTMwLjggMTcuMS0zMC44IDUwIC4xIDc5LjIgNTkuNCAxMTguNyAxMjkuOSAxMDEuOXoiXQogICAgfTsKICAgIGZhTWVkcnQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWVkcnQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjNjOCIsICJNMTI5LjcgMjU2YzAgMTIxLjggODMuOSAyMjIuOCAxOTMuNSAyNDEuMS0xOC43IDQuNS0zOC4yIDYuOS01OC4yIDYuOS0xMzcuNiAwLTI0OS0xMTEtMjQ5LTI0OFMxMjcuNCA4IDI2NC45IDhjMjAuMSAwIDM5LjYgMi40IDU4LjIgNi45LTEwOS42IDE4LjMtMTkzLjQgMTE5LjMtMTkzLjQgMjQxLjF6TTQyNy4xIDM1Ni4zYy03Ny43IDU1LjQtMTc5LjYgNDcuNS0yNDAuNC0xNC42IDUuNSAxNC4xIDEyLjcgMjcuNyAyMS43IDQwLjUgNjEuNiA4OC4yIDE4Mi40IDEwOS4zIDI2OS43IDQ3czEwOC4xLTE4NC4zIDQ2LjUtMjcyLjZjLTktMTIuOS0xOS4zLTI0LjMtMzAuNS0zNC4yIDM3LjQgNzguOCAxMC43IDE3OC41LTY3IDIzMy45em0tMjE4LjgtMjQ0Yy0xLjQgMS0yLjcgMi4xLTQgMy4xIDY0LjMtMTcuOCAxMzUuOSA0IDE3OC45IDYwLjUgMzUuNyA0NyA0Mi45IDEwNi42IDI0LjQgMTU4IDU2LjctNTYuMiA2Ny42LTE0Mi4xIDIyLjMtMjAxLjgtNTAtNjUuNS0xNDkuMS03NC40LTIyMS42LTE5Ljh6TTMxMiAyMjRjLTQuNCAwLTgtMy42LTgtOGwwLTQwYzAtNC40LTMuNi04LTgtOGwtNDggMGMtNC40IDAtOCAzLjYtOCA4bDAgNDBjMCA0LjQtMy42IDgtOCA4bC00MCAwYy00LjQgMC04IDMuNi04IDhsMCA0OGMwIDQuNCAzLjYgOCA4IDhsNDAgMGM0LjQgMCA4IDMuNiA4IDhsMCA0MGMwIDQuNCAzLjYgOCA4IDhsNDggMGM0LjQgMCA4LTMuNiA4LThsMC00MGMwLTQuNCAzLjYtOCA4LThsNDAgMGM0LjQgMCA4LTMuNiA4LThsMC00OGMwLTQuNC0zLjYtOC04LThsLTQwIDB6Il0KICAgIH07CiAgICBmYU9zaSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvc2kiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQxYSIsICJNOCAyNjYuNGMyLjMtMTM1LjggOTcuNC0yMzIuNCAyMTMuOC0yNDguMSAxMzguOC0xOC42IDI1NS42IDc1LjggMjc4IDIwMS4xIDIxLjMgMTE4LjgtNDQgMjMwLTE1MS42IDI3NC05LjMgMy44LTE0LjQgMS43LTE4LTcuNy0xNy44LTQ2LjMtMzUuNi05Mi42LTUzLjQtMTM5LTMuMS04LjEtMS0xMy4yIDctMTYuOCAyNC4yLTExIDM5LjMtMjkuNCA0My4zLTU1LjggMS41LTkuNyAxLTE5LjYtMS41LTI5LjFzLTYuOS0xOC40LTEyLjktMjYuMS0xMy42LTE0LjEtMjIuMi0xOC44LTE4LjEtNy41LTI3LjktOC4zYy0zOS0zLjQtNzEuOCAyMy43LTc3LjUgNTkuNy01LjIgMzMgMTEuMSA2My43IDQxLjkgNzcuNyA5LjYgNC40IDExLjUgOC42IDcuOCAxOC40LTE3LjkgNDYuNi0zNS44IDkzLjItNTMuNyAxMzkuOS0yLjYgNi45LTguMyA5LjMtMTUuNSA2LjUtNTIuNi0yMC4zLTEwMS40LTYxLTEzMC44LTExOS0yNC45LTQ5LjItMjUuMi04Ny43LTI2LjgtMTA4Ljd6bTIwLjktMS45Yy40IDYuNiAuNiAxNC4zIDEuMyAyMi4xIDYuMyA3MS45IDQ5LjYgMTQzLjUgMTMxIDE4My4xIDMuMiAxLjUgNC40IC44IDUuNi0yLjMgMTQuOS0zOS4xIDI5LjktNzguMiA0NS0xMTcuMyAxLjMtMy4zIC42LTQuOC0yLjQtNi43LTMxLjYtMTkuOS00Ny4zLTQ4LjUtNDUuNi04NiAxLTIxLjYgOS4zLTQwLjUgMjMuOC01Ni4zIDMwLTMyLjcgNzctMzkuOCAxMTUuNS0xNy42IDE1LjYgOSAyOC4yIDIyLjMgMzYuMiAzOC40czExLjIgMzQuMiA5IDUyYy0zLjYgMzAuNi0xOS4zIDUzLjktNDUuNyA2OS44LTIuNyAxLjYtMy41IDIuOS0yLjMgNiAxNS4yIDM5LjIgMzAuMyA3OC40IDQ1LjIgMTE3LjcgMS4yIDMuMSAyLjQgMy44IDUuNiAyLjMgMzUuNS0xNi42IDY1LjItNDAuMyA4OC4xLTcyIDM0LjgtNDguMiA0OS4xLTEwMS45IDQyLjMtMTYxLTEzLjctMTE3LjUtMTE5LjQtMjE0LjgtMjU1LjUtMTk4LTEwNi4xIDEzLTE5NS4zIDEwMi41LTE5Ny4xIDIyNS44eiJdCiAgICB9OwogICAgZmFHZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjYwIiwgIk0xNzkuMiAyMzAuNGwxMDIuNCAxMDIuNC0xMDIuNCAxMDIuNC0xNzkuMi0xNzkuMiAxNzkuMi0xNzkuMiA0NC44IDQ0LjgtMjUuNiAyNS42LTE5LjItMTkuMi0xMjggMTI4IDEyOCAxMjggNTEuNS01MS41LTc3LjEtNzYuNSAyNS42LTI1LjZ6TTMzMi44IDc2LjhsLTEwMi40IDEwMi40IDEwMi40IDEwMi40IDI1LjYtMjUuNi03Ny4xLTc2LjUgNTEuNS01MS41IDEyOCAxMjgtMTI4IDEyOC0xOS4yLTE5LjItMjUuNiAyNS42IDQ0LjggNDQuOCAxNzkuMi0xNzkuMi0xNzkuMi0xNzkuMnoiXQogICAgfTsKICAgIGZhQnV5c2VsbGFkcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJidXlzZWxsYWRzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyMGQiLCAiTTIyNCAxNTAuN2w0Mi45IDE2MC43LTg1LjggMCA0Mi45LTE2MC43ek00NDggODBsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDM1MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0zODIuNyA0MDUuM2wtOTQuNS0yOTguNy0xMjguNCAwLTk0LjUgMjk4LjcgOTAuNyAwIDExMS43LTkxLjYgMjQuMiA5MS42IDkwLjggMHoiXQogICAgfTsKICAgIGZhR29vZ2xlUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnb29nbGUtcGx1cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMmIzIiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTE4NS4zIDM4MGMtMzIuOSAwLTY0LjQtMTMuMS04Ny43LTM2LjNzLTM2LjMtNTQuOC0zNi4zLTg3LjcgMTMuMS02NC40IDM2LjMtODcuNyA1NC44LTM2LjMgODcuNy0zNi4zYzMxLjMgMCA2MC4xIDExIDgzIDMyLjNsLTMzLjYgMzIuNmMtMTMuMi0xMi45LTMxLjMtMTkuMS00OS40LTE5LjEtNDIuOSAwLTc3LjIgMzUuNS03Ny4yIDc4LjFTMTQyLjMgMzM0IDE4NS4zIDMzNGMzMi42IDAgNjQuOS0xOS4xIDcwLjEtNTMuM2wtNzAuMSAwIDAtNDIuNiAxMTYuOSAwYzEuMyA2LjggMS45IDEzLjggMS45IDIwLjcgMCA3MC44LTQ3LjUgMTIxLjItMTE4LjggMTIxLjJ6TTQxNS41IDI3My44bDAgMzUuNS0zNS41IDAgMC0zNS41LTM1LjUgMCAwLTM1LjUgMzUuNSAwIDAtMzUuNSAzNS41IDAgMCAzNS41IDM1LjIgMCAwIDM1LjUtMzUuMiAweiJdCiAgICB9OwogICAgZmFTY3JlZW5wYWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2NyZWVucGFsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NzAiLCAiTTI3OC42IDIyLjVhMjIuNSAyMi41IDAgMSAxIC00NSAwIDIyLjUgMjIuNSAwIDEgMSA0NSAwek0xOTguNyAyNTlhNTcuNCA1Ny40IDAgMSAxIDExNC44IDAgNTcuNCA1Ny40IDAgMSAxIC0xMTQuOCAwem0xMzguNiA5MWMyMi4zLTE5LjkgMzYuNS00Ny4zIDM5LjktNzdsMTE5LjUgMGMtMy41IDYxLjQtMzAuNCAxMTkuMi03NS4yIDE2MS40LTQ0LjcgNDIuMi0xMDMuOSA2NS44LTE2NS40IDY1LjhTMTM1LjQgNDc2LjYgOTAuNyA0MzQuNEM0NS45IDM5Mi4yIDE5LjEgMzM0LjQgMTUuNSAyNzNsMTE5LjcgMGMzLjQgMjkuNyAxNy42IDU3LjEgMzkuOSA3N3M1MS4yIDMwLjkgODEuMSAzMC45YzI5IDAgNTguNy0xMSA4MS4xLTMwLjl6TTI4LjMgMTQxLjdhMjIuNSAyMi41IDAgMSAxIDQ1LTEuNCAyMi41IDIyLjUgMCAxIDEgLTQ1IDEuNHptNDU1LjYtLjdhMjIuNCAyMi40IDAgMSAxIC00NC45IDAgMjIuNCAyMi40IDAgMSAxIDQ0LjkgMHpNMzE4IDk1LjNjLTE3LjMgMTMuOC0zOS4yIDIyLjgtNjEuOSAyMi44cy00NC42LTktNjEuOS0yMi44Yy0xNy4zLTE0LjctMjguOC0zNS4xLTMyLjQtNTcuNSAxNS4xLTYuNCAzMC44LTExLjMgNDYuOS0xNC41IDAgMTIuNiA1IDI0LjYgMTMuOSAzMy41czIwLjkgMTMuOSAzMy41IDEzLjkgMjQuNi01IDMzLjUtMTMuOSAxMy45LTIwLjkgMTMuOS0zMy41YzE2LjEgMy4yIDMxLjggOC4xIDQ2LjkgMTQuNS0zLjYgMjIuNC0xNS4xIDQyLjgtMzIuNCA1Ny41ek04Mi45IDIzMWMtMjEuNCA3LjYtNDQuNyA3LjQtNjUuOS0uNiAyLTE2LjMgNS42LTMyLjMgMTAuOC00Ny45IDUuNCAzLjEgMTEuMyA1LjEgMTcuNSA2IDYuMiAuOCAxMi40IC40IDE4LjUtMS4yIDYtMS43IDExLjYtNC40IDE2LjYtOC4yczkuMS04LjUgMTIuMi0xMy45IDUuMS0xMS40IDYtMTcuNWMuOC02LjIgLjQtMTIuNS0xLjItMTguNXMtNC40LTExLjYtOC4yLTE2LjZjLTMuOC00LjktOC41LTkuMS0xMy45LTEyLjIgMTAuOC0xMi4zIDIyLjktMjMuNSAzNi0zMy4zIDE3LjYgMTQuMyAyOS41IDM0LjUgMzMuNiA1Ni44cy4xIDQ1LjQtMTEuMiA2NWMtMTEuNCAxOS42LTI5LjQgMzQuNS01MC43IDQyLjF6bTM0Ni40IC4xYy0yMS4zLTcuNi0zOS4zLTIyLjYtNTAuNy00Mi4yLTExLjMtMTkuNi0xNS4yLTQyLjctMTEuMS02NSA0LjEtMjIuMiAxNi00Mi40IDMzLjUtNTYuNyAxMy4xIDkuOCAyNS4yIDIxIDM2IDMzLjMtMTAuNyA2LjQtMTguNCAxNi43LTIxLjUgMjguOC0zLjIgMTItMi4zIDI0LjggNC44IDM1LjYgNi4yIDEwLjggMTYuNCAxOC43IDI4LjQgMjJzMjQuOSAxLjcgMzUuNy00LjNjNS4zIDE1LjUgOC45IDMxLjYgMTAuOSA0Ny44LTIyLjEgOC4xLTQ0LjYgOC4zLTY2IC43eiJdCiAgICB9OwogICAgZmFCaXRjb2luID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJpdGNvaW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM3OSIsICJNOCAyNTZhMjQ4IDI0OCAwIDEgMSA0OTYgMCAyNDggMjQ4IDAgMSAxIC00OTYgMHptMzU0LjMtMzUuM2M0LjktMzMtMjAuMi01MC43LTU0LjYtNjIuNmwxMS4xLTQ0LjctMjcuMi02LjgtMTAuOSA0My41Yy03LjItMS44LTE0LjUtMy41LTIxLjgtNS4xbDEwLjktNDMuOC0yNy4yLTYuOC0xMS4yIDQ0LjdjLTUuOS0xLjMtMTEuNy0yLjctMTcuNC00LjFsMC0uMS0zNy41LTkuNC03LjIgMjkuMXMyMC4yIDQuNiAxOS44IDQuOWMxMSAyLjggMTMgMTAgMTIuNyAxNS44bC0xMi43IDUwLjljLjggLjIgMS43IC41IDIuOCAuOS0uOS0uMi0xLjktLjUtMi45LS43bC0xNy44IDcxLjNjLTEuMyAzLjMtNC44IDguNC0xMi41IDYuNSAuMyAuNC0xOS44LTQuOS0xOS44LTQuOWwtMTMuNSAzMS4xIDM1LjQgOC44YzYuNiAxLjcgMTMgMy40IDE5LjQgNWwtMTEuMyA0NS4yIDI3LjIgNi44IDExLjItNDQuN2M3LjIgMiAxNC40IDMuOCAyMS43IDUuNmwtMTEuMSA0NC41IDI3LjIgNi44IDExLjMtNDUuMWM0Ni40IDguOCA4MS4zIDUuMiA5Ni0zNi43IDExLjgtMzMuOC0uNi01My4zLTI1LTY2IDE3LjgtNC4xIDMxLjItMTUuOCAzNC43LTM5Ljl6bS02Mi4yIDg3LjJjLTguNCAzMy44LTY1LjMgMTUuNS04My44IDEwLjlsMTQuOS01OS45YzE4LjQgNC42IDc3LjYgMTMuNyA2OC44IDQ5em04LjQtODcuN2MtNy43IDMwLjctNTUgMTUuMS03MC40IDExLjNsMTMuNS01NC4zYzE1LjQgMy44IDY0LjggMTEgNTYuOCA0M3oiXQogICAgfTsKICAgIGZhU3dpZnQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3dpZnQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjhlMSIsICJNNDQ4IDE1Ni4xYzAtNC41LS4xLTktLjItMTMuNS0uMS05LjktMS0xOS43LTIuNi0yOS40LTEuNy05LjctNC44LTE5LjItOS4yLTI4LTktMTcuNy0yMy40LTMyLjEtNDEuMi00MS4xLTguOC00LjUtMTguMy03LjYtMjgtOS4yLTkuNy0xLjYtMTkuNi0yLjUtMjkuNC0yLjYtNC41LS4xLTktLjItMTMuNS0uMkwxMjQuMSAzMmMtNC41IDAtOSAuMS0xMy41IC4yLTIuNCAuMS00LjkgLjItNy40IC4zLTcuNCAuMy0xNC44IDEuMS0yMi4xIDIuMy03LjMgMS4zLTE0LjQgMy4zLTIxLjIgNi4xLTIuMyAxLTQuNiAyLTYuOCAzLjEtNi42IDMuNC0xMi44IDcuNS0xOC40IDEyLjMtMS45IDEuNi0zLjcgMy4zLTUuNCA1LTcgNy0xMi45IDE1LTE3LjQgMjMuOC00LjQgOC44LTcuNiAxOC4zLTkuMiAyOC0xLjYgOS43LTIuNCAxOS42LTIuNSAyOS40LS4xIDQuNS0uMiA5LS4yIDEzLjVMMCAzNTUuOWMwIDQuNSAuMSA5IC4yIDEzLjUgLjEgOS45IDEgMTkuNyAyLjYgMjkuNCAxLjcgOS43IDQuOCAxOS4yIDkuMiAyOCA5IDE3LjcgMjMuNCAzMi4xIDQxLjEgNDEuMSA4LjggNC40IDE4LjMgNy41IDI4IDkuMiA5LjcgMS42IDE5LjYgMi41IDI5LjQgMi42IDQuNSAuMSA5IC4yIDEzLjUgLjJsMTk5LjggMGM0LjUgMCA5LS4xIDEzLjUtLjIgOS45LS4xIDE5LjctMSAyOS40LTIuNiA5LjctMS43IDE5LjItNC44IDI4LTkuMiAxNy43LTkgMzIuMS0yMy40IDQxLjEtNDEuMiA0LjQtOC44IDcuNi0xOC4zIDkuMi0yOCAxLjYtOS43IDIuNS0xOS42IDIuNi0yOS40IC4xLTQuNSAuMi05IC4yLTEzLjVsMC0xODMuOGMwLTUuNCAwLTEwLjcgMC0xNnptLTY5LjkgMjQxYy0yMC0zOC45LTU3LjItMjkuMy03Ni4zLTE5LjUtMS43IDEtMy41IDItNS4yIDNsLS40IC4yYy0zOS41IDIxLTkyLjUgMjIuNS0xNDUuOC0uNC00My40LTE4LjgtODAuMS01MC4zLTEwNS4zLTkwLjQgMTIuMyA5LjEgMjUuNCAxNi45IDM5LjIgMjMuNCA1Ni40IDI2LjQgMTEzIDI0LjUgMTUzIDAtNTctNDMuOC0xMDQuNi0xMDEtMTQxLjEtMTQ3LjItNy04LjEtMTMuMi0xNi44LTE4LjgtMjUuOSA0My43IDQwIDExMi43IDkwLjIgMTM3LjUgMTA0LjEtNTIuNi01NS41LTk4LjktMTIzLjktOTYuNy0xMjEuNyA4Mi44IDgzLjQgMTU5LjIgMTMwLjYgMTU5LjIgMTMwLjYgMi45IDEuNiA1IDIuOCA2LjcgNCAxLjYtNC4xIDMtOC4yIDQuMi0xMi41IDEzLjItNDguMy0xLjctMTAzLjYtMzUuMy0xNDkuMiA3Ni44IDQ2LjEgMTIyLjIgMTMzLjcgMTAzLjYgMjA3LjgtLjQgMS43LTEgMy40LTEuNCA1LjEgMzguNSA0Ny40IDI4IDk4LjIgMjMuMSA4OC42bDAgMHoiXQogICAgfTsKICAgIGZhRmlsZXNQaW53aGVlbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlcy1waW53aGVlbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNjlmIiwgIk0yNTMuNSAyNDYuNEwxMzcuMiAxMzAuMmMtLjYtLjYtMS0xLjMtMS40LTJzLS41LTEuNi0uNS0yLjQgLjItMS42IC41LTIuNCAuOC0xLjQgMS40LTJMMjUzLjYgNS4xYy45LS45IDItMS41IDMuMi0xLjdzMi41LS4xIDMuNiAuMyAyLjEgMS4zIDIuOCAyLjMgMS4xIDIuMiAxLjEgMy41bDAgMjMyLjVjMCAxLjMtLjMgMi41LTEgMy42cy0xLjcgMS45LTIuOSAyLjQtMi41IC42LTMuNyAuMy0yLjQtLjktMy4yLTEuOXptNDAuMy00LjRsMC0xMzQuNGMwLS44IC4xLTEuNiAuNS0yLjRzLjgtMS41IDEuMy0yLjEgMS4zLTEuMSAyLTEuNCAxLjYtLjUgMi40LS41bDEzNC40IDBjMS4yIDAgMi41IC40IDMuNSAxLjFzMS44IDEuNyAyLjMgMi44IC42IDIuNCAuMyAzLjYtLjkgMi4zLTEuNyAzLjJMMzA0LjMgMjQ2LjRjLS45IC44LTIgMS40LTMuMiAxLjZzLTIuNCAuMS0zLjUtLjQtMi4xLTEuMy0yLjgtMi4zLTEuMS0yLjItMS4xLTMuNGwuMSAuMXptMzAuNiAzNWMtMS4yIDAtMi41LS4zLTMuNS0xcy0xLjktMS42LTIuNC0yLjgtLjYtMi40LS40LTMuNiAuOC0yLjMgMS43LTMuMkw0MDQgMTgyLjJjLjYtLjYgMS4zLTEgMi0xLjRzMS42LS41IDIuNC0uNSAxLjYgLjIgMi40IC41IDEuNCAuOCAyIDEuNGw4NC40IDg0LjJjLjkgLjkgMS41IDIgMS43IDMuMnMuMSAyLjUtLjMgMy42LTEuMyAyLjEtMi4zIDIuOC0yLjIgMS4xLTMuNSAxLjFsLTE2OC41IDAgLjEtLjF6bTkwLjcgMTMxbC05NS4zLTk1LjJjLS45LS45LTEuNS0yLTEuNy0zLjJzLS4xLTIuNSAuNC0zLjcgMS4zLTIuMSAyLjQtMi44IDIuMy0xIDMuNS0xbDk1LjIgMGMxLjcgMCAzLjIgLjcgNC40IDEuOHMxLjggMi44IDEuOCA0LjRsMCA5NS4zYzAgMS4yLS40IDIuNS0xLjEgMy41cy0xLjcgMS44LTIuOCAyLjMtMi40IC42LTMuNiAuMy0yLjMtLjktMy4yLTEuN3pNMTYuOCAzMDIuMWwyMTYuOSAwYzEuMiAwIDIuNSAuNCAzLjUgMS4xczEuOCAxLjcgMi4zIDIuOCAuNiAyLjQgLjMgMy42LS44IDIuMy0xLjcgMy4yTDEyOS43IDQyMS4yYy0uNiAuNi0xLjMgMS0yIDEuNHMtMS42IC41LTIuNCAuNS0xLjYtLjItMi40LS41LTEuNC0uOC0yLTEuNEwxMi4zIDMxMi44Yy0uOS0uOS0xLjUtMi0xLjctMy4ycy0uMS0yLjUgLjQtMy42IDEuMy0yLjEgMi4zLTIuOCAyLjMtMSAzLjUtMWwwLS4xek0yNjQuMyA0NjUuM2MwIC44LS4yIDEuNi0uNSAyLjRzLS44IDEuNS0xLjQgMi0xLjMgMS0yIDEuNC0xLjYgLjUtMi40IC41bC0xMjggMGMtMS4yIDAtMi41LS40LTMuNS0xLjFzLTEuOC0xLjctMi4zLTIuOC0uNi0yLjQtLjMtMy42IC44LTIuMyAxLjctMy4ybDEyOC0xMjhjLjktLjkgMi0xLjUgMy4yLTEuN3MyLjUtLjEgMy42IC4zIDIuMSAxLjMgMi44IDIuMyAxLjEgMi4yIDEuMSAzLjVsMCAxMjh6bTQwLTEzMi41bDgyLjggODIuN2MuNiAuNiAxIDEuMyAxLjQgMnMuNSAxLjYgLjUgMi40LS4yIDEuNi0uNSAyLjQtLjggMS40LTEuNCAyTDMwNC4zIDUwN2MtLjkgLjktMiAxLjUtMy4yIDEuN3MtMi41IC4xLTMuNi0uMy0yLjEtMS4zLTIuOC0yLjMtMS4xLTIuMi0xLjEtMy41bDAtMTY1LjRjMC0xLjIgLjQtMi41IDEuMS0zLjVzMS43LTEuOCAyLjgtMi4zIDIuNC0uNiAzLjYtLjMgMi4zIC44IDMuMiAxLjd6TTc5IDEyMi40YzAtMS4yIC4zLTIuNSAxLTMuNXMxLjctMS44IDIuOC0yLjMgMi40LS42IDMuNi0uNCAyLjMgLjggMy4yIDEuN0wyMzguMSAyNjYuNGMuOSAuOSAxLjUgMiAxLjcgMy4ycy4xIDIuNS0uMyAzLjYtMS4zIDIuMS0yLjMgMi44LTIuMiAxLjEtMy41IDEuMWwtMTQ4LjQgMGMtMS43IDAtMy4yLS43LTQuNC0xLjhzLTEuOC0yLjgtMS44LTQuNGwwLTE0OC40LS4xLS4xeiJdCiAgICB9OwogICAgZmFMYXJhdmVsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxhcmF2ZWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNiZCIsICJNNTA0LjYgMTE1LjhjLS4xLS4yLS4yLS41LS4zLS43LS4xLS40LS4zLS44LS41LTEuMi0uMi0uMi0uMy0uNS0uNS0uNy0uMi0uMy0uNS0uNi0uNy0uOS0uMi0uMi0uNS0uNC0uOC0uNi0uMy0uMi0uNi0uNS0uOS0uN0w0MDQuNiA1NS41Yy0xLjItLjctMi42LTEuMS00LTEuMXMtMi44IC40LTQgMS4xTDMwMC4zIDExMWMtLjMgLjItLjYgLjQtLjkgLjctLjMgLjItLjUgLjQtLjggLjYtLjMgLjMtLjUgLjYtLjcgLjktLjIgLjItLjQgLjQtLjUgLjctLjIgLjQtLjQgLjgtLjUgMS4yLS4xIC4yLS4yIC40LS4zIC43LS4yIC43LS4zIDEuNC0uMyAyLjFsMCAxMDUuMi04MC4yIDQ2LjIgMC0yMDUuOWMwLS43LS4xLTEuNC0uMy0yLjEtLjEtLjItLjItLjQtLjMtLjctLjEtLjQtLjMtLjgtLjUtMS4yLS4xLS4zLS40LS41LS41LS43LS4yLS4zLS41LS42LS43LS45LS4yLS4yLS41LS40LS44LS42LS4zLS4yLS42LS41LS45LS43TDExNS44IDEuMWMtMS4yLS43LTIuNi0xLjEtNC0xLjFzLTIuOCAuNC00IDEuMUwxMS41IDU2LjVjLS4zIC4yLS42IC40LS45IC43LS4zIC4yLS41IC40LS44IC42LS4zIC4zLS41IC42LS43IC45LS4yIC4zLS40IC41LS42IC43LS4yIC40LS40IC44LS41IDEuMi0uMSAuMi0uMiAuNC0uMyAuNy0uMiAuNy0uMyAxLjQtLjMgMi4xbDAgMzI5LjdjMCAxLjQgLjQgMi44IDEuMSA0czEuNyAyLjIgMi45IDIuOUwyMDQgNTEwLjljLjQgLjIgLjkgLjQgMS4zIC41IC4yIC4xIC40IC4yIC42IC4zIDEuMyAuNCAyLjggLjQgNC4xIDAgLjItLjEgLjQtLjIgLjYtLjIgLjUtLjIgMS0uMyAxLjQtLjZMNDA0LjYgNDAwLjFjMS4yLS43IDIuMi0xLjcgMi45LTIuOXMxLjEtMi42IDEuMS00bDAtMTA1LjMgOTIuMi01My4xYzEuMi0uNyAyLjItMS43IDIuOS0zczEuMS0yLjYgMS4xLTRsMC0xMDkuOGMwLS43LS4xLTEuNC0uMi0yLjF6TTExMS44IDE3LjNsODAuMiA0Ni4xLTgwLjIgNDYuMi04MC4yLTQ2LjIgODAuMi00Ni4yem04OC4yIDYwbDAgMjAxLjNjLTMzLjIgMTkuMS01OS45IDM0LjUtODAuMiA0Ni4ybDAtMjAxLjNDMTUzIDEwNC40IDE3OS43IDg5IDIwMCA3Ny4zem0wIDQxMi44TDIzLjUgMzg4LjUgMjMuNSA3Ny4zYzIwLjMgMTEuNyA0Ny4xIDI3LjEgODAuMiA0Ni4ybDAgMjE1LjJjMCAuMyAuMSAuNiAuMSAuOSAwIC40IC4xIC44IC4yIDEuMiAuMSAuMyAuMiAuNiAuNCAuOSAuMSAuMyAuMyAuNyAuNCAxIC4yIC4zIC40IC41IC42IC44IC4yIC4zIC40IC42IC43IC44IC4yIC4yIC41IC40IC44IC42IC4zIC4yIC42IC41IC45IC43bDkyLjIgNTIuMiAuMSA5Mi40em04LTEwNi4yTDEyOCAzMzguNmM1NC43LTMxLjUgMTEzLjUtNjUuMyAxNzYuMy0xMDEuNWw4MC4xIDQ2LjFDMzU1IDMwMCAyOTYuMiAzMzMuNSAyMDggMzgzLjl6bTE4NC41IDQuNmwtMTc2LjUgMTAxLjYgMC05Mi4zQzMxNy40IDM0MCAzNzYuMiAzMDYuNCAzOTIuNSAyOTdsMCA5MS40em0wLTExOS4xYy0yMC4zLTExLjYtNDcuMS0yNy04MC4yLTQ2LjFsMC05MS40YzIwLjMgMTEuNyA0Ny4xIDI3LjEgODAuMiA0Ni4ybDAgOTEuM3ptOC0xMDUuM2wtODAuMi00Ni4yIDgwLjItNDYuMiA4MC4yIDQ2LjEtODAuMiA0Ni4yem04IDEwNS4zbDAtOTEuM2MzMy4yLTE5LjEgNjAtMzQuNSA4MC4zLTQ2LjJsMCA5MS40LTgwLjMgNDYuMnoiXQogICAgfTsKICAgIGZhV3Bmb3JtcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3cGZvcm1zIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyOTgiLCAiTTQ0OCA3NS4ybDAgMzYxLjdjMCAyNC4zLTE5IDQzLjItNDMuMiA0My4ybC0zNjEuNiAwQzE5LjMgNDgwIDAgNDYxLjQgMCA0MzYuOEwwIDc1LjJDMCA1MS4xIDE4LjggMzIgNDMuMiAzMmwzNjEuNyAwYzI0IDAgNDMuMSAxOC44IDQzLjEgNDMuMnpNNDEwLjcgNDM2LjhsMC0zNjEuNmMwLTMtMi42LTUuOC01LjgtNS44bC05LjMgMC0xMTAuMyA3NC42LTYxLjMtNDkuOS02MS4yIDQ5LjktMTEwLjMtNzQuNy05LjMgMGMtMy4yIDAtNS44IDIuOC01LjggNS44bDAgMzYxLjdjMCAzIDIuNiA1LjggNS44IDUuOGwzNjEuNyAwYzMuMiAuMSA1LjgtMi43IDUuOC01Ljh6TTE1MC4yIDE4NmwwIDM3LTczLjUgMCAwLTM3IDczLjUgMHptMCA3NC40bDAgMzcuMy03My41IDAgMC0zNy4zIDczLjUgMHptMTEuMS0xNDcuM2w1NC00My43LTExOC41IDAgNjQuNSA0My43em0yMTAgNzIuOWwwIDM3LTE5NiAwIDAtMzcgMTk2IDB6bTAgNzQuNGwwIDM3LjMtMTk2IDAgMC0zNy4zIDE5NiAwek0yODYuNyAxMTMuMWw2NC41LTQzLjctMTE4LjQgMCA1My45IDQzLjd6TTM3MS4zIDMzNWwwIDM3LjMtOTkuNCAwIDAtMzcuMyA5OS40IDB6Il0KICAgIH07CiAgICBmYVNwZWFrZXJEZWNrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNwZWFrZXItZGVjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmODNjIiwgIk0yMTMuOSAyOTZMMTAwIDI5NmMtMjYuNSAwLTUyLTEwLjUtNzAuNy0yOS4zUzAgMjIyLjUgMCAxOTYgMTAuNSAxNDQgMjkuMyAxMjUuMyA3My41IDk2IDEwMCA5NmwxMzIuOCAwYzEwLjYgMCAyMC44IDQuMiAyOC4zIDExLjdzMTEuNyAxNy43IDExLjcgMjguMy00LjIgMjAuOC0xMS43IDI4LjMtMTcuNyAxMS43LTI4LjMgMTEuN0w5OCAxNzZjLTI2LjUgMC0yNi40IDQwIDAgNDBsMTEzLjggMGMyNi41IDAgNTIgMTAuNSA3MC43IDI5LjNzMjkuMyA0NC4yIDI5LjMgNzAuNy0xMC41IDUyLTI5LjMgNzAuNy00NC4yIDI5LjMtNzAuNyAyOS4zTDQwIDQxNmMtMTAuNiAwLTIwLjgtNC4yLTI4LjMtMTEuN1MwIDM4Ni42IDAgMzc2IDQuMiAzNTUuMiAxMS43IDM0Ny43IDI5LjQgMzM2IDQwIDMzNmwxNzMuOSAwYzI2LjUgMCAyNi41LTQwIDAtNDB6TTI5OCA0MTZjMTMuNS05LjIgMjUtMjEgMzMuOC0zNC43czE0LjctMjkuMiAxNy4zLTQ1LjNsNjQuNiAwYzIuNiAwIDUuMi0uNiA3LjYtMS42czQuNi0yLjUgNi40LTQuNCAzLjMtNC4xIDQuMi02LjUgMS41LTUgMS40LTcuNmwwLTEyMGMwLTIuNi0uNS01LjItMS40LTcuNnMtMi40LTQuNi00LjItNi41LTQtMy4zLTYuNC00LjQtNS0xLjYtNy42LTEuNmwtMTE3LjIgMGM5LjctMTEuMSAxNS0yNS4zIDE1LTQwcy01LjMtMjguOS0xNS00MGwxMzYuOSAwYzQzLjQgMCA3OC42IDM1LjggNzguNiA4MGwwIDE2MGMwIDQ0LjItMzUuMiA4MC03OC42IDgwTDI5OCA0MTZ6Il0KICAgIH07CiAgICBmYUZsaWNrciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmbGlja3IiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE2ZSIsICJNNDAwIDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsMzUyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTE0NC41IDE5MmE2My41IDYzLjUgMCAxIDEgMCAxMjcgNjMuNSA2My41IDAgMSAxIDAtMTI3em0xNTkgMGE2My41IDYzLjUgMCAxIDEgMCAxMjcgNjMuNSA2My41IDAgMSAxIDAtMTI3eiJdCiAgICB9OwogICAgZmFDY1Zpc2EgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2MtdmlzYSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWYwIiwgIk00NzAuMSAyMzEuM3M3LjYgMzcuMiA5LjMgNDVsLTMzLjQgMGMzLjMtOC45IDE2LTQzLjUgMTYtNDMuNS0uMiAuMyAzLjMtOS4xIDUuMy0xNC45bDIuOCAxMy40ek01NzYgODBsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDQ4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0xNTIuNSAzMzEuMmw2My4yLTE1NS4yLTQyLjUgMC0zOS4zIDEwNi00LjMtMjEuNS0xNC03MS40Yy0yLjMtOS45LTkuNC0xMi43LTE4LjItMTMuMWwtNjQuNyAwLS43IDMuMWMxNS44IDQgMjkuOSA5LjggNDIuMiAxNy4xbDM1LjggMTM1IDQyLjUgMHptOTQuNCAuMmwyNS4yLTE1NS40LTQwLjIgMC0yNS4xIDE1NS40IDQwLjEgMHptMTM5LjktNTAuOGMuMi0xNy43LTEwLjYtMzEuMi0zMy43LTQyLjMtMTQuMS03LjEtMjIuNy0xMS45LTIyLjctMTkuMiAuMi02LjYgNy4zLTEzLjQgMjMuMS0xMy40IDEzLjEtLjMgMjIuNyAyLjggMjkuOSA1LjlsMy42IDEuNyA1LjUtMzMuNmMtNy45LTMuMS0yMC41LTYuNi0zNi02LjYtMzkuNyAwLTY3LjYgMjEuMi02Ny44IDUxLjQtLjMgMjIuMyAyMCAzNC43IDM1LjIgNDIuMiAxNS41IDcuNiAyMC44IDEyLjYgMjAuOCAxOS4zLS4yIDEwLjQtMTIuNiAxNS4yLTI0LjEgMTUuMi0xNiAwLTI0LjYtMi41LTM3LjctOC4zbC01LjMtMi41LTUuNiAzNC45YzkuNCA0LjMgMjYuOCA4LjEgNDQuOCA4LjMgNDIuMiAuMSA2OS43LTIwLjggNzAtNTN6TTUyOCAzMzEuNGwtMzIuNC0xNTUuNC0zMS4xIDBjLTkuNiAwLTE2LjkgMi44LTIxIDEyLjlsLTU5LjcgMTQyLjUgNDIuMiAwczYuOS0xOS4yIDguNC0yMy4zbDUxLjYgMGMxLjIgNS41IDQuOCAyMy4zIDQuOCAyMy4zbDM3LjIgMHoiXQogICAgfTsKICAgIGZhVXB3b3JrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVwd29yayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNjQxIiwgIk00OTMuOSAyOTUuNmMtNTAuMyAwLTgzLjUtMzguOS05Mi44LTUzLjkgMTEuOS05NS4zIDQ2LjgtMTI1LjQgOTIuOC0xMjUuNCA0NS41IDAgODAuOSAzNi40IDgwLjkgODkuN3MtMzUuNCA4OS43LTgwLjkgODkuN2wwLS4xem0wLTIzNy44Yy04MS45IDAtMTI3LjggNTMuNC0xNDEgMTA4LjQtMTQuOS0yOC0yNS45LTY1LjUtMzQuNS0xMDAuM2wtMTEzLjIgMCAwIDE0MWMwIDUxLjEtMjMuMyA4OS02OC44IDg5cy03MS42LTM3LjgtNzEuNi04OWwuNS0xNDEtNjUuMyAwIDAgMTQxYzAgNDEuMSAxMy4zIDc4LjQgMzcuNiAxMDUuMSAyNSAyNy41IDU5LjIgNDEuOCA5OC44IDQxLjggNzguOCAwIDEzMy44LTYwLjQgMTMzLjgtMTQ2LjlsMC05NC44YzguMiAzMS4yIDI3LjggOTEuMSA2NS4zIDE0My42bC0zNSAxOTkuNCA2Ni40IDAgMjMuMS0xNDEuM2M3LjYgNi4zIDE1LjcgMTIgMjQuMiAxNyAyMi4yIDE0IDQ3LjcgMjEuOSA3My45IDIyLjggMCAwIDQgLjIgNi4xIC4yIDgxLjIgMCAxNDUuOS02Mi45IDE0NS45LTE0Ny44UzU3NS4zIDU3LjkgNDk0LjEgNTcuOWwtLjItLjF6Il0KICAgIH07CiAgICBmYUtha2FvVGFsayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJrYWthby10YWxrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU3ZDciLCAiTTI4OCAyLjVjMTU5LjEgMCAyODggMTAxLjcgMjg4IDIyNy4xIDAgMTI1LjQtMTI4LjkgMjI3LjEtMjg4IDIyNy4xLTE3LjUgMC0zNC42LTEuMi01MS4yLTMuNi0xNi42IDExLjctMTEyLjYgNzkuMS0xMjEuNyA4MC40IDAgMC0zLjcgMS40LTYuOS0uNHMtMi42LTYuNy0yLjYtNi43QzEwNi42IDUxOS44IDEzMC42IDQzNy4yIDEzNSA0MjEuOSA1My45IDM4MS44IDAgMzEwLjYgMCAyMjkuNSAwIDEwNC4xIDEyOC45IDIuNSAyODggMi41ek04Ni4yIDE2MS43Yy05IDAtMTYuMyA3LjMtMTYuMyAxNi4zczcuMyAxNi4zIDE2LjMgMTYuM2wyNS45IDAgMCA5OC43YzAgOC44IDcuNSAxNS45IDE2LjYgMTUuOXMxNi42LTcuMSAxNi42LTE1LjlsMC05OC43IDI1LjkgMGM5IDAgMTYuMy03LjMgMTYuMy0xNi4zcy03LjMtMTYuMy0xNi4zLTE2LjNsLTg1LjEgMHptMTQwLjggMGMtMTAuOCAuMi0xOS4zIDguNC0yMi4xIDE2LjRMMTY1LjIgMjgyLjdjLTUgMTUuNy0uNiAyMS41IDMuOSAyMy42IDMuMiAxLjUgNi45IDIuMyAxMC42IDIuMyA2LjkgMCAxMi4yLTIuOCAxMy44LTcuM2w4LjItMjEuNiA1MC43IDAgOC4yIDIxLjVjMS42IDQuNSA2LjkgNy4zIDEzLjggNy4zIDMuNyAwIDcuMy0uOCAxMC42LTIuMyA0LjYtMi4xIDktNy45IDMuOS0yMy42TDI0OS4yIDE3OC4xYy0yLjgtOC0xMS4zLTE2LjItMjIuMi0xNi40em0xODAuOSAwYy05LjIgMC0xNi42IDcuNS0xNi42IDE2LjZsMCAxMTMuN2MwIDkuMiA3LjUgMTYuNiAxNi42IDE2LjZzMTYuNi03LjUgMTYuNi0xNi42bDAtMzYuMiA1LjgtNS44IDM4LjkgNTEuNmMzLjIgNC4yIDggNi42IDEzLjMgNi42IDMuNiAwIDcuMS0xLjEgMTAtMy4zIDMuNS0yLjcgNS44LTYuNiA2LjQtMTFzLS41LTguOC0zLjItMTIuM2wtNDAuOS01NC4yIDM3LjktMzcuOGMyLjYtMi42IDMuOS02LjIgMy43LTEwLjEtLjItMy45LTItNy42LTQuOS0xMC41LTMuMS0zLjEtNy4zLTQuOS0xMS40LTQuOS0zLjYgMC02LjggMS4zLTkuMiAzLjdsLTQ2LjMgNDYuNCAwLTM1LjdjMC05LjItNy41LTE2LjYtMTYuNi0xNi42em0tOTEuMyAwYy05LjMgMC0xNi45IDcuNS0xNi45IDE2LjZsMCAxMTIuOGMwIDguNCA3LjEgMTUuMiAxNS45IDE1LjNsNTMuMyAwYzguOCAwIDE1LjktNi45IDE1LjktMTUuM3MtNy4yLTE1LjItMTUuOS0xNS4ybC0zNS4zIDAgMC05Ny42YzAtOS4yLTcuNi0xNi42LTE3LTE2LjZ6bS03MyA4OC42bC0zMy4yIDAgMTYuNi00Ny4xIDE2LjYgNDcuMXoiXQogICAgfTsKICAgIGZhRmx1dHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmbHV0dGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2OTQiLCAiTTQyOS41IDIzNi4zTDI5MS43IDM3NC4xIDQyOS41IDUxMiAyNzIgNTEyYy0zNi4xLTM2LjEtODIuMS04Mi4xLTEzNy45LTEzNy45bDEzNy45LTEzNy44IDE1Ny41IDB6TTI3MiAwTDE2IDI1NiA5NC44IDMzNC44IDQyOS41IDAgMjcyIDB6Il0KICAgIH07CiAgICBmYUJ1ZmZlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJidWZmZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjgzNyIsICJNNDI4LjIgMzgwLjdMMjMxLjcgNDc4LjVjLTIuMyAxLTQuOCAxLjUtNy4zIDEuNXMtNS0uNS03LjMtMS41TDIwLjUgMzgwLjdjLTQtMi00LTUuMyAwLTcuM0w2Ny42IDM1MGMyLjMtMSA0LjgtMS41IDcuMy0xLjVzNSAuNSA3LjMgMS41bDEzNC44IDY3YzIuMyAxIDQuOCAxLjUgNy4zIDEuNXM1LS41IDcuMy0xLjVsMTM0LjgtNjdjMi4zLTEgNC44LTEuNSA3LjMtMS41czUgLjUgNy4zIDEuNWw0Ny4xIDIzLjRjNCAyIDQgNS4yIDAgNy4yem0wLTEzNi41bC00Ny4xLTIzLjRjLTIuMy0xLTQuOC0xLjUtNy4zLTEuNXMtNSAuNS03LjMgMS41TDIzMS43IDI4Ny44Yy0yLjMgMS00LjggMS41LTcuMyAxLjVzLTUtLjUtNy4zLTEuNUw4Mi4zIDIyMC43Yy0yLjMtMS00LjgtMS41LTcuMy0xLjVzLTUgLjUtNy4zIDEuNUwyMC41IDI0NC4xYy00IDItNCA1LjMgMCA3LjNsMTk2LjUgOTcuOGMyLjMgMSA0LjggMS41IDcuMyAxLjVzNS0uNSA3LjMtMS41bDE5Ni41LTk3LjhjNC0yIDQtNS4zIDAtNy4zek0yMC41IDEzMC40TDIxNyAyMjAuN2M0LjcgMS45IDEwIDEuOSAxNC43IDBsMTk2LjUtOTAuM2M0LTEuOSA0LTQuOSAwLTYuN0wyMzEuNyAzMy40Yy00LjctMS45LTEwLTEuOS0xNC43IDBMMjAuNSAxMjMuN2MtNCAxLjgtNCA0LjkgMCA2Ljd6Il0KICAgIH07CiAgICBmYUdyYXRpcGF5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdyYXRpcGF5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxODQiLCAiTTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTIgMjU2IDI1NiAwIDEgMCAwLTUxMnpNMzc0LjMgMjMzLjdMMjU3LjcgMzkxLjMgMTQxLjMgMjMzLjdjLTktMTIuMy0xOS43LTUyIDE0LTc0LjMgMjktMTguNyA1Ni40LTQuMyA3MC43IDEyLjMgMTYuNCAxOC41IDQ4LjEgMTcuNCA2My43IDAgMTQuMy0xNi42IDQxLjctMzEgNzAuMy0xMi4zIDM0IDIyLjMgMjMuMyA2MS45IDE0LjIgNzQuM3oiXQogICAgfTsKICAgIGZhR29vZ2xlUGF5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2dsZS1wYXkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTA3OSIsICJNMTA1LjcgMjE1bDAgNDEuMiA1Ny4xIDBjLTEuMiA2LjYtMy42IDEyLjktNy4yIDE4LjVzLTguNCAxMC40LTEzLjkgMTQuMWMtOS41IDYuNi0yMS43IDEwLjMtMzYgMTAuMy0yNy42IDAtNTAuOS0xOC45LTU5LjMtNDQuMi00LjQtMTMuMy00LjQtMjcuNyAwLTQxIDguNC0yNS41IDMxLjctNDQuNCA1OS4zLTQ0LjQgNy41LS4xIDE0LjkgMS4yIDIxLjkgNHMxMy4zIDYuOSAxOC42IDEyLjFMMTc2LjUgMTU1Yy0xOS4xLTE4LjEtNDQuNC0yOC4xLTcwLjctMjcuOC0xOS43IC4xLTM4LjkgNS43LTU1LjYgMTYuMXMtMzAuMSAyNS4zLTM4LjggNDNDMy45IDIwMS4yIDAgMjE3LjcgMCAyMzQuNHMzLjkgMzMuMiAxMS4zIDQ4LjFsMCAuMmM4LjcgMTcuNyAyMi4xIDMyLjUgMzguOCA0M3MzNS45IDE2IDU1LjYgMTZjMjguNSAwIDUyLjUtOS41IDcwLTI1LjkgMjAtMTguNiAzMS40LTQ2LjIgMzEuNC03OC45IDAtNy4zLS42LTE0LjYtMS44LTIxLjhsLTk5LjcgMHptMzg5LjQtNGMtMTAuMS05LjQtMjMuOS0xNC4xLTQxLjQtMTQuMS0yMi41IDAtMzkuMyA4LjMtNTAuNSAyNC45TDQyNC4xIDIzNWM3LjYtMTEuMyAxOC4xLTE3IDMxLjMtMTcgOC40IDAgMTYuNSAzLjIgMjIuNyA4LjggMyAyLjYgNS41IDUuOSA3LjEgOS42czIuNSA3LjYgMi41IDExLjdsMCA1LjVjLTkuMS01LjEtMjAuNi03LjgtMzQuNi03LjgtMTYuNCAwLTI5LjYgMy45LTM5LjUgMTEuOHMtMTQuOCAxOC4zLTE0LjggMzEuNmMtLjIgNS45IDEgMTEuOCAzLjQgMTcuMnM2IDEwLjIgMTAuNSAxNC4xYzkuMiA4LjMgMjEgMTIuNSAzNC44IDEyLjUgMTYuMyAwIDI5LjItNy4zIDM5LTIxLjlsMSAwIDAgMTcuNyAyMi42IDAgMC03OC43Yy4xLTE2LjYtNC45LTI5LjctMTUtMzl6bS0xOS4yIDg5LjNjLTMuNSAzLjUtNy42IDYuMy0xMi4yIDguMnMtOS41IDIuOS0xNC40IDIuOWMtNi43IC4xLTEzLjEtMi4xLTE4LjMtNi4yLTIuNC0xLjgtNC40LTQuMi01LjctNi45cy0yLTUuNy0yLTguN2MwLTcgMy4yLTEyLjggOS41LTE3LjRzMTQuNS03IDI0LjEtN2MxMy4yLS4yIDIzLjUgMi44IDMwLjggOC44IDAgMTAuMS00IDE4LjktMTEuNyAyNi40em0tOTMuNy0xNDJjLTUuMy01LjMtMTEuNi05LjUtMTguNi0xMi4zcy0xNC40LTQuMi0yMS45LTRsLTYyLjcgMCAwIDE4Ni43IDIzLjYgMCAwLTc1LjYgMzkgMGMxNiAwIDI5LjUtNS40IDQwLjUtMTUuOSAuOS0uOSAxLjgtMS44IDIuNi0yLjcgOS42LTEwLjUgMTQuOC0yNC40IDE0LjMtMzguNnMtNi42LTI3LjctMTYuOS0zNy42bDAgMHptLTE2LjYgNjIuMmMtMyAzLjItNi42IDUuNy0xMC42IDcuNHMtOC40IDIuNS0xMi43IDIuM2wtMzkuNiAwIDAtNjUuMiAzOS42IDBjOC41IDAgMTYuNiAzLjMgMjIuNiA5LjIgNi4xIDYuMSA5LjYgMTQuMyA5LjggMjNzLTMuMSAxNy05IDIzLjNsMCAwek02MTQuMyAyMDFsLTM2LjUgOTEuNy0uNSAwLTM3LjQtOTEuNy0yNS43IDAgNTEuOCAxMTkuNi0yOS40IDY0LjMgMjQuMyAwIDc5LTE4My45LTI1LjcgMHoiXQogICAgfTsKICAgIGZhQXBwbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXBwbGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjE3OSIsICJNMzE5LjEgMjY4LjdjLS4yLTM2LjcgMTYuNC02NC40IDUwLTg0LjgtMTguOC0yNi45LTQ3LjItNDEuNy04NC43LTQ0LjYtMzUuNS0yLjgtNzQuMyAyMC43LTg4LjUgMjAuNy0xNSAwLTQ5LjQtMTkuNy03Ni40LTE5LjctNTUuOCAuOS0xMTUuMSA0NC41LTExNS4xIDEzMy4yIDAgMjYuMiA0LjggNTMuMyAxNC40IDgxLjIgMTIuOCAzNi43IDU5IDEyNi43IDEwNy4yIDEyNS4yIDI1LjItLjYgNDMtMTcuOSA3NS44LTE3LjkgMzEuOCAwIDQ4LjMgMTcuOSA3Ni40IDE3LjkgNDguNi0uNyA5MC40LTgyLjUgMTAyLjYtMTE5LjMtNjUuMi0zMC43LTYxLjctOTAtNjEuNy05MS45ek0yNjIuNSAxMDQuNWMyNy4zLTMyLjQgMjQuOC02MS45IDI0LTcyLjUtMjQuMSAxLjQtNTIgMTYuNC02Ny45IDM0LjktMTcuNSAxOS44LTI3LjggNDQuMy0yNS42IDcxLjkgMjYuMSAyIDQ5LjktMTEuNCA2OS41LTM0LjN6Il0KICAgIH07CiAgICBmYVR1bWJsciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0dW1ibHIiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjE3MyIsICJNMzA5LjkgNDgwLjNjLTEzLjYgMTQuNS01MCAzMS43LTk3LjQgMzEuNy0xMjAuOCAwLTE0Ny04OC44LTE0Ny0xNDAuNmwwLTE0NC00Ny41IDBjLTUuNSAwLTEwLTQuNS0xMC0xMGwwLTY4YzAtNy4yIDQuNS0xMy42IDExLjMtMTYgNjItMjEuOCA4MS41LTc2IDg0LjMtMTE3LjEgLjgtMTEgNi41LTE2LjMgMTYuMS0xNi4zbDcwLjkgMGM1LjUgMCAxMCA0LjUgMTAgMTBsMCAxMTUuMiA4MyAwYzUuNSAwIDEwIDQuNCAxMCA5LjlsMCA4MS43YzAgNS41LTQuNSAxMC0xMCAxMGwtODMuNCAwIDAgMTMzLjJjMCAzNC4yIDIzLjcgNTMuNiA2OCAzNS44IDQuOC0xLjkgOS0zLjIgMTIuNy0yLjIgMy41IC45IDUuOCAzLjQgNy40IDcuOWwyMiA2NC4zYzEuOCA1IDMuMyAxMC42LS40IDE0LjV6Il0KICAgIH07CiAgICBmYVBob2VuaXhTcXVhZHJvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaG9lbml4LXNxdWFkcm9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1MTEiLCAiTTk2IDYzLjRjNDYuNS0zNi4xIDEwNS42LTU2LjEgMTY0LjUtNTQuNiAyOS42LS40IDU5LjEgNS40IDg2LjkgMTUuMy0yNC4xLTQuNi00OS02LjMtNzMuNC0yLjUtNDIuOSA1LjMtODMgMjcuMi0xMTEuOCA1OS4yIDUuNy0xIDEwLjgtMy43IDE2LTUuOSAxOC4xLTcuOSAzNy41LTEzLjMgNTcuMi0xNC44IDE5LjctMi4xIDM5LjYtLjQgNTkuMyAxLjktMTQuNCAyLjgtMjkuMSA0LjYtNDMgOS42LTM0LjQgMTEuMS02NS4zIDMzLjItODYuMyA2Mi42LTEzLjggMTkuNy0yMy42IDQyLjktMjQuNyA2Ny4xLS40IDE2LjUgNS4yIDM0LjggMTkuOCA0NCAxMS4yIDYuOCAyNC42IDkuMiAzNy41IDYuNyAxNS40LTIuNSAzMC4xLTguNiA0My42LTE2LjMgMTEuNS02LjggMjIuNy0xNC42IDMyLTI0LjMgMy44LTMuMiAyLjUtOC40IDIuNi0xMi44LTIuMS0uMy00LjQtMS4xLTYuMyAuMy0xMS40IDYuMy0yMy40IDExLjQtMzUuOCAxNS40LTIwIDYuMi00Mi4yIDguNS02Mi4xIC44IDEyLjggMS43IDI2LjEgLjMgMzcuNy01LjQgMjAuMi05LjcgMzYuOC0yNS4yIDU0LjQtMzguOCAyNy43LTIxLjMgNTcuNS0zOS45IDg4LjktNTUuMyAyNS43LTEyIDUyLjktMjIuOCA4MS42LTI0LjEtMTUuNiAxMy43LTMyLjEgMjYuNS00Ni44IDQxLjQtMTQuNSAxNC0yNy41IDI5LjUtNDAuMSA0NS4yLTMuNSA0LjYtOSA2LjktMTMuNiAxMC4yLTIyLjQgMTUtNDAuMyAzNS44LTUxLjkgNjAuMS05LjMgMTkuNy0xNC41IDQxLjktMTEuOCA2My42IDEuOSAxMy43IDguNyAyNy42IDIwLjkgMzQuOSAxMi45IDggMjkgOC4xIDQzLjUgNS4xIDMyLjgtNy40IDYxLjQtMjguOSA4MS01NS44IDIwLjQtMjcuNSAzMC41LTYyLjIgMjkuMi05Ni4zLS41LTcuNS0xLjYtMTUtMS43LTIyLjUgOCAxOS41IDE0LjggMzkuNyAxNi42IDYwLjggMiAxNC4zIC43IDI4LjgtMS42IDQyLjktMS45IDExLTUuNyAyMS41LTcuOCAzMi40IDIwLjQtMjIuOSAzNC01MC45IDM5LjMtODEuMSA1LjYtMzUuNSAuNy03MS45LTE0LjItMTA0LjYgMjAuOCAzMiAzMi4zIDY5LjYgMzUuNyAxMDcuNSAuNSAxMi43IC41IDI1LjUgMCAzOC4yLTIuOCAzNC4zLTEyLjkgNjcuNi0yOS42IDk3LjgtMjYuMSA0Ny4zLTY4IDg1LjYtMTE3LjIgMTA4LTc4LjMgMzYuMi0xNzQuNyAzMS4zLTI0OC0xNC43LTM5LTIzLjgtNzAuNi01OC05MS40LTk4LjctMTQuNy0yOC45LTIzLjMtNjAuNS0yNS40LTkyLjlsMC0zMS4zQzMuOSAxNzIgNDAuOSAxMDUuOCA5NiA2My40em0yMjIgODAuM2M1LjUtLjkgMTAuOC0yLjQgMTYtNC41IDUtMS44IDkuMi01LjkgMTAuMy0xMS4yLTkgNS0xOCA5LjktMjYuMyAxNS43eiJdCiAgICB9OwogICAgZmFDZW50ZXJjb2RlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNlbnRlcmNvZGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM4MCIsICJNMjAxLjggMjU0LjhhNjQuMSA2NC4xIDAgMSAxIDEyNy40IDEzLjggNjQuMSA2NC4xIDAgMSAxIC0xMjcuNC0xMy44em00MS42IDI0OC45Qzk2LjcgNDk2LTguMiAzNjUuNSAxMC4xIDIyNC4zIDIxLjMgMTM3LjcgNzUuOSA2Ny40IDE0OS4yIDMyLjMgMzEwLjItNDQuOCA0OTguOSA2OS43IDUwMy45IDI0OC45IDUwOCAzOTUuOSAzODUuNSA1MTEuMSAyNDMuNCA1MDMuN3ptMTc5LjktMTgwYzI3LjktMTE4LTE2MC41LTIwNS45LTIzNy4yLTIzNC4yLTU3LjUgNTYuMy02OS4xIDE4OC42LTMzLjggMzQ0LjQgNjguOCAxNS44IDE2OS4xLTI2LjQgMjcxLTExMC4yeiJdCiAgICB9OwogICAgZmFEZWJpYW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGViaWFuIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2MGIiLCAiTTM4MC40IDI0NS42YzMtNy42IDUuNS0xNCA1LjItMjQuNGwtNC4zIDljNC40LTEzLjIgNC0yNy4xIDMuNi00MC40LS4yLTYtLjMtMTEuOCAwLTE3LjRsLTEuOC0uNWMtMS41LTQ1LjItNDAuNi05My4xLTc1LjMtMTA5LjQtMzAtMTMuOC03Ni4xLTE2LjItOTcuMy01LjggMS4zLTEuMSA0LjItMiA2LjgtMi43bC4zLS4xYzMuMy0xIDYtMS43IDQtMi45LTE5LjIgMS45LTI0LjkgNS41LTMxLjEgOS40bC0uMSAwYy00LjYgMi45LTkuNSA2LTIwLjMgOC43LTMuNSAzLjQgMS43IDIgNS44IC45czcuMi0xLjktLjEgMi40Yy0zLjUgMS02LjYgMS4zLTkuNiAxLjZsLS4xIDBjLTguMyAuOC0xNS44IDEuNi0zMC43IDE3IC44IDEuMyAzLjQtLjIgNS4zLTEuM2wuMS0uMWMyLjMtMS40IDMuNC0yLTEuNyA0LjQtMTkuMS0yLjQtNjAuMyA0My43LTY5LjEgNTlsNC42IC44Yy0zLjIgOC02LjggMTQuOC0xMCAyMC44LTQuMyA4LjEtNy45IDE0LjktOC43IDIxLjMtLjMgNS4xLTEgMTEtMS43IDE3LjMtLjEgMS0uMiAyLS4zIDNsLS4xIC42Yy0zIDI3LjMtNi43IDYwLjggMy45IDczbC0xLjMgMTNjLjYgMS4yIDEuMSAyLjMgMS42IDMuNSAuMiAuNCAuNCAuOCAuNSAxLjEgMSAyLjEgMiA0LjIgMy4zIDYuMmwtMyAuMmM3IDIyLjEgMTAuOCAyMi41IDE1LjEgMjIuOSA0LjQgLjQgOS4zIC45IDE4LjcgMjQuMi0yLjctLjktNS41LTEuOS05LjQtNy4yLS41IDQuMSA1LjggMTYuMyAxMy4xIDI1LjhsLTMuMSAzLjZjMi4xIDMuNyA0LjggNi4yIDcuNiA4LjggMSAuOSAyLjEgMS45IDMuMSAyLjktMTEuOS02LjUgMy4yIDEzLjcgMTEuOSAyNS4yIC44IDEuMSAxLjUgMiAyLjIgMi45IDEuNCAxLjkgMi41IDMuNCAyLjkgNC4xbDIuNC00LjJjLS4zIDYuMSA0LjMgMTMuOSAxMy4xIDI0LjdsNy4zLS4zYzMgNiAxNCAxNi43IDIwLjcgMTcuMmwtNC40IDUuOGM4LjEgMi42IDEwLjMgNC4zIDEyLjcgNi4yIDIuNiAyLjEgNS40IDQuMyAxNi4xIDguMWwtNC4yLTcuNGMzLjUgMyA2LjIgNS45IDguOCA4LjdsLjEgLjFjNS4yIDUuNiA5LjkgMTAuNiAxOS43IDE1LjMgMTAuNyAzLjcgMTYuNiA0LjcgMjIuNyA1LjggLjMgMCAuNiAuMSAuOSAuMSA1LjQgLjggMTEuMiAxLjggMjAuOCA0LjUtMS4xLS4xLTIuMi0uMS0zLjMtLjEtMi4zLS4xLTQuNy0uMS03LS4xLTE0LjQtLjItMjkuMi0uNC00Mi43LTUuMi05Ni42LTI1LjctMTg0LjktMTM5LTE3OC40LTI1NS42LS42LTkuOS0uMy0yMC45IDAtMzAuNyAuNC0xMy41IC43LTI0LjgtMS42LTI4LjNsMS0zLjFjNS4zLTE3LjQgMTEuNy0zOC4yIDIzLjgtNjIuOGwtLjEtLjIgMC0uMWMuNCAuNCAzLjQgMy40IDguOC01LjggLjgtMS44IDEuNi0zLjcgMi40LTUuNiAuNS0xLjEgLjktMi4yIDEuNC0zLjIgMi41LTYuMSA1LjEtMTIuMyA4LjQtMTcuOWwyLjYtLjZjMS43LTEwLjEgMTctMjMuOCAyOS44LTM1LjJsMS4xLTFjNS43LTUuMSAxMC43LTkuNyAxMy42LTEzLjFsLjcgNC40YzE3LTE1LjkgNDQuNi0yNy41IDY1LjYtMzYuNGwuNS0uMmM0LjgtMiA5LjMtMy45IDEzLjMtNS43LTMuNCAzLjggMi4yIDIuNyAxMCAxIDQuOC0xIDEwLjQtMi4xIDE1LjMtMi40bC0zLjkgMi4xYy0yLjcgMS40LTUuNCAyLjgtOCA0LjYgOC4xLTIgMTEuNy0xLjQgMTUuNy0uOGwuMyAwYzMuNSAuNiA3LjMgMS4yIDE0LjYgLjItNS42IC44LTEyLjMgMy0xMS4yIDMuOCA3LjkgLjkgMTIuOC0uMSAxNy4yLTFsLjIgMGM1LjUtMS4xIDEwLjMtMiAxOS4zIC45bC0xLTQuOGM3LjMgMi42IDEyLjcgNC4zIDE3LjUgNS44bC41IC4xYzEwIDMgMTcuNiA1LjMgMzQuMiAxNC4xIDMuMiAuMiA1LjMtLjUgNy40LTEuMmwuMSAwYzMuNi0xLjEgNy0yLjEgMTUuMiAxLjIgLjMgLjUgLjUgMSAuNyAxLjQgLjEgLjIgLjIgLjUgLjMgLjdsMCAuMWMxIDIuNiAxLjggNC42IDE0LjYgMTIuMSAxLjctLjctMi43LTQuNy02LjQtOC4ybC0uMS0uMWMtLjItLjEtLjMtLjMtLjUtLjQgMzIuMiAxNy4zIDY3LjMgNTQuMSA3OCA5My41LTYtMTEuMS01LjItNS41LTQuMyAuNSAuNiA0IDEuMiA4LjEtLjIgNy41IDQuNSAxMi4xIDguMSAyNC41IDEwLjQgMzcuNGwtLjgtMi45LS4xLS4zYy0zLjMtMTEuOS05LjYtMzQuMy0xOS45LTQ5LjMtLjQgNC4zLTIuOCAzLjktNS4yIDMuNWwtLjEgMGMtMy4zLS42LTYuMi0xLjEtMS45IDEyLjYgMi42IDMuOCAzLjEgMi40IDMuNSAxLjEgLjUtMS41IC45LTIuNyA0LjcgNS4yIC4xIDQuMSAxIDguMiAyLjEgMTIuN2wuMSAuNmMuMSAuMyAuMSAuNSAuMiAuOGwuMSAuNmMuNiAyLjYgMS4zIDUuNCAxLjggOC40LTEuMS0uMi0yLjMtMi4yLTMuNC00LjItMS40LTIuNC0yLjgtNC43LTMuNy0zLjIgMi40IDExLjUgNi41IDE3LjQgOCAxOC4zLS4zIC42LS42IC43LTEuMSAuNy0uOCAwLTEuOCAuMS0xLjkgNS4zIC43IDEzLjcgMy4zIDEyLjUgNS4zIDExLjYgLjYtLjMgMS4yLS42IDEuNy0uNC0uNiAyLjUtMS42IDUuMS0yLjcgNy45LTIuOCA3LjEtNiAxNS40LTMuNCAyNi4xLS44LTMtMi02LTMuMS04LjlsLS4xLS40Yy0uMi0uNS0uNC0xLS42LTEuNS0uMy0uOC0uNi0xLjYtLjktMi4zLS42IDQuNC0uMyA3LjctLjEgMTAuNmwwIC43Yy40IDUuMyAuNyAxMC0zIDE5LjkgNC4zLTE0LjIgMy44LTI2LjktLjItMjAuOCAxIDEwLjktMy43IDIwLjQtOCAyOC45bC0uMSAuMmMtMy42IDcuMS02LjggMTMuNS01LjkgMTkuM2wtNS4yLTcuMWMtNy41IDEwLjktNyAxMy4zLTYuNSAxNS41bDAgLjFjLjUgMS45IDEgMy44LTMuNCAxMC44IDEuNy0yLjkgMS4zLTMuNiAxLTQuMi0uNC0uOC0uNy0xLjUgMS43LTUuMS0xLjYgLjEtNS41IDMuOS0xMC4xIDguNS0zLjkgMy45LTguNSA4LjQtMTIuOCAxMS44LTM3LjUgMzAuMS04Mi4zIDM0LTEyNS42IDE3LjggLjItMS0uMi0yLjEtMy4xLTQuMS0zNi44LTI4LjItNTguNS01Mi4xLTUwLjktMTA3LjUgMi4xLTEuNiAzLjYtNS44IDUuMy0xMC44bC4yLS40IC4xLS4zIDAtLjFjMi45LTguNCA2LjUtMTguOCAxNC4zLTIzLjggNy44LTE3LjMgMzEuMy0zMy4zIDU2LjQtMzMuNyAyNS42LTEuNCA0Ny4yIDEzLjcgNTguMSAyNy45LTE5LjgtMTguNC01Mi4xLTI0LTc5LjctMTAuNC0yOC4yIDEyLjctNDUgNDMuOC00Mi41IDc0LjcgLjMtLjQgLjYtLjYgLjktLjhsLjItLjJjLjYtLjUgMS4xLS45IDEuNC0zLjMtLjkgNjAuMiA2NC44IDEwNC4zIDExMi4xIDgybC42IDEuM2MxMi43LTMuNSAxNS45LTYuNSAyMC4zLTEwLjdsLjEtLjFjMi4yLTIuMSA0LjctNC41IDguOS03LjMtLjMgLjctMS4zIDEuNy0yLjQgMi43LTIuMiAyLjEtNC42IDQuNS0xLjYgNC42IDUtMS4zIDE4LjUtMTMuNCAyOC41LTIyLjMgLjYtLjUgMS4yLTEgMS43LTEuNSAxLjUtMS4zIDIuOC0yLjUgNC0zLjZsLjMtLjNjMS45LTQuMiAxLjYtNS42IDEuMy03bDAtLjFjLS40LTEuNi0uOC0zLjMgMi40LTkuNmw3LjMtMy43Yy44LTIuMSAxLjUtNC4xIDIuMi02IC4yLS42IC41LTEuMiAuNy0xLjhsLS40LS4yLS4xLS4xek0yNDggMzM0LjFjLTYtMy0xMy43LTguOS0xNC44LTExLjRsLS40IC4zYy0uMyAuNi0uNSAxLjMtLjIgMi4yLTEyLjItNS43LTIzLjQtMTQuMy0zMi42LTI0LjkgNC45IDcuMSAxMC4xIDE0LjEgMTcgMTkuNS02LjktMi4zLTE1LjEtMTEuOC0yMS42LTE5LjNsLS4xLS4xYy00LjMtNS03LjktOS4xLTkuNy05LjUgMTkuOCAzNS41IDgwLjUgNjIuMyAxMTIuMyA0OS0xNC43IC41LTMzLjQgLjMtNDkuOS01Ljh6bTc5LjMtMTE5LjdsLS4xLS4yYy0uNS0xLjUtMS4xLTMuMS0xLjctMy40IDEuNC01LjggNS40LTEwLjcgNC40IDQuNi0xIDMuOC0xLjggMS41LTIuNi0xem0tNC4yIDIyLjJjLTEuMyA3LjktNSAxNS41LTEwLjEgMjIuNSAuMi0yLTEuMi0yLjQtMi42LTIuOC0yLjktLjgtNS45LTEuNiA1LjYtMTYuMS0uNSAxLjktMi4xIDQuNi0zLjcgNy4zbC0uMyAuNGMtMy42IDUuOS02LjcgMTEgNCA0LjNsMS0xLjhjMi42LTQuNSA1LTguOCA2LTEzLjhsLjEgMHptLTU1LjYgMzMuOWM3LjEgLjYgMTQuMSAuNiAyMS0xLjEtMi41IDIuNC01LjIgNC44LTguMyA3LjItMTEuMS0xLjctMjEuMi02LTEyLjctNi4xem0tOTIuNiAxMS42YzMuNiA3LjEgNi40IDExLjUgOSAxNS43bC4xIC4yYzIuMyAzLjcgNC40IDcuMSA2LjggMTEuNy01LjEtNC4yLTguNy05LjUtMTIuNS0xNWwtLjMtLjVjLTEuNC0yLjEtMi44LTQuMi00LjQtNi4ybDEuMi01LjkgLjEgMHptNy41LTkuNmMxLjYgMy4zIDMuMiA2LjQgNS43IDkuMWwyLjYgNy43LTEuMy0yLjFjLTMuMi01LjMtNi4zLTEwLjYtOC0xNi43bDEgMnptMjM4LjktNDEuNmMtMi4zIDE3LjQtNy43IDM0LjYtMTYgNTAuMyA3LjYtMTQuOSAxMi41LTMwLjkgMTQuOC00Ny4ybDEuMi0zLjF6TTM1LjggMTEwLjZjLjQgLjggMS40IC41IDIuMyAuMyAxLjktLjUgMy42LS45LS4xIDcuNi0uNSAuMy0xIC43LTEuNSAxLTEuNCAuOS0yLjggMS45LTMuOSAzIDEuOS0zLjggMy41LTcuNCAzLjItMTEuOXpNMjUuNSAxNTIuM2MtLjcgMy43LTEuNSA3LjktMy40IDEzLjkgLjItMS45IDAtMy41LS4yLTQuOWwwLS4xYy0uNC0zLjQtLjctNi4zIDQuMy0xMi44LS4zIDEuMi0uNSAyLjUtLjcgMy44bDAgLjF6Il0KICAgIH07CiAgICBmYU1hc3RvZG9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1hc3RvZG9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0ZjYiLCAiTTQzMyAxNzkuMWMwLTk3LjItNjMuNy0xMjUuNy02My43LTEyNS43LTYyLjUtMjguNy0yMjguNi0yOC40LTI5MC41IDAgMCAwLTYzLjcgMjguNS02My43IDEyNS43IDAgMTE1LjctNi42IDI1OS40IDEwNS42IDI4OS4xIDQwLjUgMTAuNyA3NS4zIDEzIDEwMy4zIDExLjQgNTAuOC0yLjggNzkuMy0xOC4xIDc5LjMtMTguMWwtMS43LTM2LjlzLTM2LjMgMTEuNC03Ny4xIDEwLjFjLTQwLjQtMS40LTgzLTQuNC04OS42LTU0LS42LTQuNi0uOS05LjMtLjktMTMuOSA4NS42IDIwLjkgMTU4LjcgOS4xIDE3OC43IDYuNyA1Ni4xLTYuNyAxMDUtNDEuMyAxMTEuMi03Mi45IDkuOC00OS44IDktMTIxLjUgOS0xMjEuNXpNMzU3LjkgMzA0LjNsLTQ2LjYgMCAwLTExNC4yYzAtNDkuNy02NC01MS42LTY0IDYuOWwwIDYyLjUtNDYuMyAwIDAtNjIuNWMwLTU4LjUtNjQtNTYuNi02NC02LjlsMCAxMTQuMi00Ni43IDBjMC0xMjIuMS01LjItMTQ3LjkgMTguNC0xNzUgMjUuOS0yOC45IDc5LjgtMzAuOCAxMDMuOCA2LjFsMTEuNiAxOS41IDExLjYtMTkuNWMyNC4xLTM3LjEgNzguMS0zNC44IDEwMy44LTYuMSAyMy43IDI3LjMgMTguNCA1MyAxOC40IDE3NWwwIDB6Il0KICAgIH07CiAgICBmYVNrZXRjaCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJza2V0Y2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdjNiIsICJNMjcuOCAxNjIuMmwtMTguNSAyNC45IDkwLjUgMCA2LjktMTMwLjctNzguOSAxMDUuOHpNMzk2LjYgNDUuN0wyNjggMzIgNDAzLjcgMTc5LjIgMzk2LjYgNDUuN3pNMTEyLjUgMjE4LjNsLTExLjItMjItOTEuMSAwIDIyNC45IDI2MS43LTEyMi42LTIzOS43em0yLTMxLjJsMjg0IDBDMzQwLjYgMTI0LjMgMjkzLjMgNzIuOSAyNTYuNiAzM0wxMTQuNSAxODcuMXptMjk3LjMgOS4xbC0xMzMuOSAyNjEuOCAyMjQuOC0yNjEuNy05MC45IDAgMC0uMXpNNDE1LjcgNjlsLTkuNC0xMi42IC45IDE3LjMgNi4xIDExMy40IDkwLjMgMC04Ny45LTExOC4xek0xMTMuOCA5My41TDEwOS4yIDE3OS4xIDI0NSAzMiAxMTYuNCA0NS43IDExMy44IDkzLjV6TTQwMS41IDE5Ni4ybC0yOTAgMGMxOC4yIDM1LjYgNjYuNiAxMzAuMiAxNDUuMSAyODMuOEw0MDEuNSAxOTYuMnoiXQogICAgfTsKICAgIGZhV2ViQXdlc29tZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3ZWItYXdlc29tZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNjgyIiwgIk0zNzIuMiA1MmMwIDIwLjktMTIuNCAzOS0zMC4yIDQ3LjJMNDQ4IDE5MiA1NTIuNCAxNzEuMWMtNS4zLTcuNy04LjQtMTcuMS04LjQtMjcuMSAwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4YzAgMjYtMjAuNiA0Ny4xLTQ2LjQgNDhMNDgxIDQ0Mi4zYy0xMC4zIDIzLTMzLjIgMzcuNy01OC40IDM3LjdsLTIwNS4yIDBjLTI1LjIgMC00OC0xNC44LTU4LjQtMzcuN0w0Ni40IDE5MkMyMC42IDE5MS4xIDAgMTcwIDAgMTQ0IDAgMTE3LjUgMjEuNSA5NiA0OCA5NnM0OCAyMS41IDQ4IDQ4YzAgMTAuMS0zLjEgMTkuNC04LjQgMjcuMUwxOTIgMTkyIDI5OC4xIDk5LjFjLTE3LjctOC4zLTMwLTI2LjMtMzAtNDcuMSAwLTI4LjcgMjMuMy01MiA1Mi01MnM1MiAyMy4zIDUyIDUybC4xIDB6Il0KICAgIH07CiAgICBmYVNhc3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2FzcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDFlIiwgIk0zMDEuOCAzNzguOWwwIDB6bTI0OS4xLTg3Yy0yMC4xIDAtNDAgNC42LTU4IDEzLjUtNS45LTExLjktMTItMjIuMy0xMy0zMC4xLTEuMi05LjEtMi41LTE0LjUtMS4xLTI1LjNzNy43LTI2LjEgNy42LTI3LjItMS40LTYuNi0xNC4zLTYuNy0yNCAyLjUtMjUuMyA1LjljLTIuMyA2LjItNC4xIDEyLjYtNS4zIDE5LjEtMi4zIDExLjctMjUuOCA1My41LTM5LjEgNzUuMy00LjQtOC41LTguMS0xNi04LjktMjItMS4yLTkuMS0yLjUtMTQuNS0xLjEtMjUuM3M3LjctMjYuMSA3LjYtMjcuMi0xLjQtNi42LTE0LjMtNi43LTI0IDIuNS0yNS4zIDUuOS0yLjcgMTEuNC01LjMgMTkuMS0zMy45IDc3LjMtNDIuMSA5NS40Yy00LjIgOS4yLTcuOCAxNi42LTEwLjQgMjEuNi0uNCAuOC0uNyAxLjMtLjkgMS43IC4zLS41IC41LTEgLjUtLjgtMi4yIDQuMy0zLjUgNi43LTMuNSA2LjdsMCAuMWMtMS43IDMuMi0zLjYgNi4xLTQuNSA2LjEtLjYgMC0xLjktOC40IC4zLTE5LjkgNC43LTI0LjIgMTUuOC02MS44IDE1LjctNjMuMS0uMS0uNyAyLjEtNy4yLTcuMy0xMC43LTkuMS0zLjMtMTIuNCAyLjItMTMuMiAyLjJzLTEuNCAyLTEuNCAyIDEwLjEtNDIuNC0xOS40LTQyLjRjLTE4LjQgMC00NCAyMC4yLTU2LjYgMzguNS03LjkgNC4zLTI1IDEzLjYtNDMgMjMuNS02LjkgMy44LTE0IDcuNy0yMC43IDExLjQtLjUtLjUtLjktMS0xLjQtMS41LTM1LjgtMzguMi0xMDEuOS02NS4yLTk5LjEtMTE2LjUgMS0xOC43IDcuNS02Ny44IDEyNy4xLTEyNy40IDk4LTQ4LjggMTc2LjMtMzUuNCAxODkuOC01LjYgMTkuNCA0Mi41LTQxLjkgMTIxLjYtMTQzLjcgMTMzLTM4LjggNC4zLTU5LjItMTAuNy02NC4zLTE2LjMtNS4zLTUuOS02LjEtNi4yLTguMS01LjEtMy4zIDEuOC0xLjIgNyAwIDEwLjEgMyA3LjkgMTUuNSAyMS45IDM2LjggMjguOSAxOC43IDYuMSA2NC4yIDkuNSAxMTkuMi0xMS44IDYxLjgtMjMuOCAxMDkuOS05MC4xIDk1LjgtMTQ1LjYtMTQuNC01Ni40LTEwNy45LTc0LjktMTk2LjMtNDMuNS01Mi43IDE4LjctMTA5LjcgNDguMS0xNTAuNyA4Ni40LTQ4LjcgNDUuNi01Ni41IDg1LjMtNTMuMyAxMDEuOSAxMS40IDU4LjkgOTIuNiA5Ny4zIDEyNS4xIDEyNS43LTEuNiAuOS0zLjEgMS43LTQuNSAyLjUtMTYuMyA4LjEtNzguMiA0MC41LTkzLjcgNzQuNy0xNy41IDM4LjggMi45IDY2LjYgMTYuMyA3MC40IDQxLjggMTEuNiA4NC42LTkuMyAxMDcuNi00My42czIwLjItNzkuMSA5LjYtOTkuNWMtLjEtLjMtLjMtLjUtLjQtLjggNC4yLTIuNSA4LjUtNSAxMi44LTcuNSA4LjMtNC45IDE2LjQtOS40IDIzLjUtMTMuMy00IDEwLjgtNi45IDIzLjgtOC40IDQyLjYtMS44IDIyIDcuMyA1MC41IDE5LjEgNjEuNyA1LjIgNC45IDExLjUgNSAxNS40IDUgMTMuOCAwIDIwLTExLjQgMjYuOS0yNSA4LjUtMTYuNiAxNi0zNS45IDE2LTM1LjlzLTkuNCA1Mi4yIDE2LjMgNTIuMmM5LjQgMCAxOC44LTEyLjEgMjMtMTguM2wwIC4xcy4yLS40IC43LTEuMmMxLTEuNSAxLjUtMi40IDEuNS0yLjRsMC0uM2MzLjgtNi41IDEyLjEtMjEuNCAyNC42LTQ2IDE2LjItMzEuOCAzMS43LTcxLjUgMzEuNy03MS41IDEuNSA4LjcgMy42IDE3LjMgNi4yIDI1LjggMi44IDkuNSA4LjcgMTkuOSAxMy40IDMwLTMuOCA1LjItNi4xIDguMi02LjEgOC4yIDAgLjEgMCAuMSAuMSAuMi0zIDQtNi40IDguMy05LjkgMTIuNS0xMi44IDE1LjItMjggMzIuNi0zMCAzNy42LTIuNCA1LjktMS44IDEwLjMgMi44IDEzLjcgMy40IDIuNiA5LjQgMyAxNS43IDIuNSAxMS41LS44IDE5LjYtMy42IDIzLjUtNS40IDcuMi0yLjYgMTQtNi4xIDIwLjItMTAuNiAxMi41LTkuMiAyMC4xLTIyLjQgMTkuNC0zOS44LS40LTkuNi0zLjUtMTkuMi03LjMtMjguMiAxLjEtMS42IDIuMy0zLjMgMy40LTUgMTkuOC0yOC45IDM1LjEtNjAuNiAzNS4xLTYwLjYgMS41IDguNyAzLjYgMTcuMyA2LjIgMjUuOCAyLjQgOC4xIDcuMSAxNyAxMS40IDI1LjctMTguNiAxNS4xLTMwLjEgMzIuNi0zNC4xIDQ0LjEtNy40IDIxLjMtMS42IDMwLjkgOS4zIDMzLjEgNC45IDEgMTEuOS0xLjMgMTcuMS0zLjUgNy43LTIuNiAxNS02LjMgMjEuNi0xMS4xIDEyLjUtOS4yIDI0LjYtMjIuMSAyMy44LTM5LjYtLjMtNy45LTIuNS0xNS44LTUuNC0yMy40IDE1LjctNi42IDM2LjEtMTAuMiA2Mi4xLTcuMiA1NS43IDYuNSA2Ni42IDQxLjMgNjQuNSA1NS44cy0xMy44IDIyLjYtMTcuNyAyNS01LjEgMy4zLTQuOCA1LjFjLjUgMi42IDIuMyAyLjUgNS42IDEuOSA0LjYtLjggMjkuMi0xMS44IDMwLjMtMzguNyAxLjYtMzQtMzEuMS03MS40LTg5LTcxLjFsMCAwek0xMjEuOCA0MzYuNmMtMTguNCAyMC4xLTQ0LjIgMjcuNy01NS4zIDIxLjMtMTEuOS02LjktNy4yLTM2LjUgMTUuNS01Ny45IDEzLjgtMTMgMzEuNi0yNSA0My40LTMyLjQgMi43LTEuNiA2LjYtNCAxMS40LTYuOSAuOC0uNSAxLjItLjcgMS4yLS43IC45LS42IDEuOS0xLjEgMi45LTEuNyA4LjMgMzAuNCAuMyA1Ny4yLTE5LjEgNzguM2wwIDB6bTEzNC40LTkxLjRjLTYuNCAxNS43LTE5LjkgNTUuNy0yOC4xIDUzLjYtNy0xLjgtMTEuMy0zMi4zLTEuNC02Mi4zIDUtMTUuMSAxNS42LTMzLjEgMjEuOS00MC4xIDEwLjEtMTEuMyAyMS4yLTE0LjkgMjMuOC0xMC40IDMuNSA1LjktMTIuMiA0OS40LTE2LjIgNTkuMnptMTExIDUzYy0yLjcgMS40LTUuMiAyLjMtNi40IDEuNi0uOS0uNSAxLjEtMi40IDEuMS0yLjRzMTMuOS0xNC45IDE5LjQtMjEuN2MzLjItNCA2LjktOC43IDEwLjktMTMuOSAwIC41IC4xIDEgLjEgMS42LS4xIDE3LjktMTcuMyAzMC0yNS4xIDM0LjhsMCAwem04NS42LTE5LjVjLTItMS40LTEuNy02LjEgNS0yMC43IDIuNi01LjcgOC42LTE1LjMgMTktMjQuNSAxLjIgMy41IDEuOCA3LjEgMS45IDEwLjgtLjEgMjIuNS0xNi4yIDMwLjktMjUuOSAzNC40bDAgMHoiXQogICAgfTsKICAgIGZhU3F1YXJlV2hhdHNhcHAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXdoYXRzYXBwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbIndoYXRzYXBwLXNxdWFyZSJdLCAiZjQwYyIsICJNOTIuMSAyNTQuNmMwIDI0LjkgNyA0OS4yIDIwLjIgNzAuMWwzLjEgNS0xMy4zIDQ4LjYgNDkuOS0xMy4xIDQuOCAyLjljMjAuMiAxMiA0My40IDE4LjQgNjcuMSAxOC40bC4xIDBjNzIuNiAwIDEzMy4zLTU5LjEgMTMzLjMtMTMxLjggMC0zNS4yLTE1LjItNjguMy00MC4xLTkzLjItMjUtMjUtNTgtMzguNy05My4yLTM4LjctNzIuNyAwLTEzMS44IDU5LjEtMTMxLjkgMTMxLjh6TTI3NC44IDMzMGMtMTIuNiAxLjktMjIuNCAuOS00Ny41LTkuOS0zNi44LTE1LjktNjEuOC01MS41LTY2LjktNTguNy0uNC0uNi0uNy0uOS0uOC0xLjEtMi0yLjYtMTYuMi0yMS41LTE2LjItNDEgMC0xOC40IDktMjcuOSAxMy4yLTMyLjMgLjMtLjMgLjUtLjUgLjctLjggMy42LTQgNy45LTUgMTAuNi01IDIuNiAwIDUuMyAwIDcuNiAuMWwuOCAwYzIuMyAwIDUuMiAwIDguMSA2LjggMS4yIDIuOSAzIDcuMyA0LjkgMTEuOCAzLjMgOCA2LjcgMTYuMyA3LjMgMTcuNiAxIDIgMS43IDQuMyAuMyA2LjktMy40IDYuOC02LjkgMTAuNC05LjMgMTMtMy4xIDMuMi00LjUgNC43LTIuMyA4LjYgMTUuMyAyNi4zIDMwLjYgMzUuNCA1My45IDQ3LjEgNCAyIDYuMyAxLjcgOC42LTEgMi4zLTIuNiA5LjktMTEuNiAxMi41LTE1LjUgMi42LTQgNS4zLTMuMyA4LjktMnMyMy4xIDEwLjkgMjcuMSAxMi45Yy44IC40IDEuNSAuNyAyLjEgMSAyLjggMS40IDQuNyAyLjMgNS41IDMuNiAuOSAxLjkgLjkgOS45LTIuNCAxOS4xLTMuMyA5LjMtMTkuMSAxNy43LTI2LjcgMTguOHpNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTE0OC4xIDM5My45TDY0IDQxNiA4Ni41IDMzMy44Yy0xMy45LTI0LTIxLjItNTEuMy0yMS4yLTc5LjMgLjEtODcuNCA3MS4yLTE1OC41IDE1OC42LTE1OC41IDQyLjQgMCA4Mi4yIDE2LjUgMTEyLjIgNDYuNSAyOS45IDMwIDQ3LjkgNjkuOCA0Ny45IDExMi4yIDAgODcuNC03Mi43IDE1OC41LTE2MC4xIDE1OC41LTI2LjYgMC01Mi43LTYuNy03NS44LTE5LjN6Il0KICAgIH07CiAgICBmYVdoYXRzYXBwU3F1YXJlID0gZmFTcXVhcmVXaGF0c2FwcDsKICAgIGZhU2t5cGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2t5cGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE3ZSIsICJNNDI0LjcgMjk5LjhjMi45LTE0IDQuNy0yOC45IDQuNy00My44IDAtMTEzLjUtOTEuOS0yMDUuMy0yMDUuMy0yMDUuMy0xNC45IDAtMjkuNyAxLjctNDMuOCA0LjctMTktMTQuNy00Mi42LTIzLjQtNjguMy0yMy40LTYxLjggMC0xMTIgNTAuMi0xMTIgMTEyIDAgMjUuNyA4LjcgNDkuMyAyMy4zIDY4LjItMi45IDE0LTQuNyAyOC45LTQuNyA0My44IDAgMTEzLjUgOTEuOSAyMDUuMyAyMDUuMyAyMDUuMyAxNC45IDAgMjkuNy0xLjcgNDMuOC00LjcgMTkgMTQuNiA0Mi42IDIzLjMgNjguMiAyMy4zIDYxLjggMCAxMTItNTAuMiAxMTItMTEyIC4xLTI1LjYtOC42LTQ5LjItMjMuMi02OC4xek0yMzAuMSAzOTEuM2MtNjUuNiAwLTEyMC41LTI5LjItMTIwLjUtNjUgMC0xNiA5LTMwLjYgMjkuNS0zMC42IDMxLjIgMCAzNC4xIDQ0LjkgODguMSA0NC45IDI1LjcgMCA0Mi4zLTExLjQgNDIuMy0yNi4zIDAtMTguNy0xNi0yMS42LTQyLTI4LTYyLjUtMTUuNC0xMTcuOC0yMi0xMTcuOC04Ny4yIDAtNTkuMiA1OC42LTgxLjEgMTA5LjEtODEuMSA1NS4xIDAgMTEwLjggMjEuOSAxMTAuOCA1NS40IDAgMTYuOS0xMS40IDMxLjgtMzAuMyAzMS44LTI4LjMgMC0yOS4yLTMzLjUtNzUtMzMuNS0yNS43IDAtNDIgNy00MiAyMi41IDAgMTkuOCAyMC44IDIxLjggNjkuMSAzMyA0MS40IDkuMyA5MC43IDI2LjggOTAuNyA3Ny42IDAgNTkuMS01Ny4xIDg2LjUtMTEyIDg2LjV6Il0KICAgIH07CiAgICBmYUFuZ3VsYXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYW5ndWxhciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDIwIiwgIk0xODUuNyAyNjguMWw3Ni4yIDAtMzguMS05MS42LTM4LjEgOTEuNnpNMjIzLjggMzJMMTYgMTA2LjQgNDcuOCAzODIuMSAyMjMuOCA0ODAgMzk5LjggMzgyLjEgNDMxLjYgMTA2LjQgMjIzLjggMzJ6TTM1NCAzNzMuOGwtNDguNiAwLTI2LjItNjUuNC0xMTAuNiAwLTI2LjIgNjUuNC00OC43IDAgMTMwLjEtMjkyLjMgMTMwLjIgMjkyLjN6Il0KICAgIH07CiAgICBmYU9wZW5zdXNlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm9wZW5zdXNlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU2MmIiLCAiTTQ3MS4xIDEwMi43cy0uMyAxOC4zLS4zIDIwLjNjLTkuMS0zLTc0LjQtMjQuMS0xMzUuNy0yNi4zLTUxLjktMS44LTEyMi44LTQuMy0yMjMgNTcuMy0xOS40IDEyLjQtNzMuOSA0Ni4xLTk5LjYgMTA5LjctNS41IDEzLjMtMTIuNiA0My4zLTUuNSA3MS40IDMuMyAxMi44IDguOSAyNC45IDE2LjUgMzUuNyAxNy40IDI1IDQ2LjYgNDEuNiA3OC4xIDQ0LjQgNDQuNCAzLjkgNzguMS0xNiA5MC01My4zIDguMi0yNS44IDAtNjMuNi0zMS41LTgyLjktMjUuNi0xNS43LTUzLjMtMTIuMS02OS4yLTEuNi0xMy45IDkuMi0yMS44IDIzLjUtMjEuNiAzOS4yIC4zIDI3LjggMjQuMyA0Mi42IDQxLjUgNDIuNiA1LjQgMCAxMC43LS45IDE1LjgtMi43IDYuNS0xLjggMTMuMy02LjUgMTMuMy0xNC45IDAtMTIuMS0xMS42LTE0LjgtMTYuOC0xMy45LTIuOSAuNS00LjUgMi0xMS44IDIuNC0yLS4yLTEyLTMuMS0xMi0xNGwwLS4xYy4yLTEyLjMgMTMuMi0xOCAyNS41LTE2LjkgMzIuMyAyLjggNDcuNyA0MC43IDI4LjUgNjUuNy0xOC4zIDIzLjctNzYuNiAyMy4yLTk5LjctMjAuNC0yNi00OS4yIDEyLjctMTExLjIgODctOTguNCAzMy4yIDUuNyA4My42IDM1LjUgMTAyLjQgMTA0LjNsNDUuOSAwYy01LjctMTcuNi04LjktNjguMyA0Mi43LTY4LjMgNTYuNyAwIDYzLjkgMzkuOSA3OS44IDY4LjNsNDguNiAwYy0xMi44LTE4LjMtMjEuNy0zOC43LTE4LjktNTUuOCA1LjYtMzMuOCAzOS43LTE4LjQgODIuNC0xNy40IDY2LjUgLjQgMTAyLjEtMjcgMTAzLjEtMjggMy43LTMuMSA2LjUtMTUuOCA3LTE3LjcgMS4zLTUuMS0zLjItMi40LTMuMi0yLjQtOC43IDUuMi0zMC41IDE1LjItNTAuOSAxNS42LTI1LjMgLjUtNzYuMi0yNS40LTgxLjYtMjguMi0uMy0uNCAuMSAxLjItMTEtMjUuNSA4OC40IDU4LjMgMTE4LjMgNDAuNSAxNDUuMiAyMS43IC44LS42IDQuMy0yLjkgMy42LTUuNy0xMy44LTQ4LjEtMjIuNC02Mi43LTM0LjUtNjkuNi0zNy0yMS42LTEyNS0zNC43LTEyOS4yLTM1LjMgLjEtLjEtLjktLjMtLjkgLjd6bTYwLjQgNzIuOGEzNy42IDM3LjYgMCAxIDEgNzUuMiAyLjYgMzcuNiAzNy42IDAgMSAxIC03NS4yLTIuNnptMzguNi0yNS4zYy0zLjYtLjMtNy4xIC4xLTEwLjUgMS4ycy02LjUgMi45LTkuMiA1LjMtNC44IDUuMy02LjMgOC41LTIuNCA2LjctMi41IDEwLjMgLjUgNy4xIDEuOCAxMC40IDMuMyA2LjMgNS44IDguOSA1LjUgNC41IDguOCA1LjkgNi45IDIgMTAuNCAxLjljMy42IC4zIDcuMS0uMSAxMC41LTEuMnM2LjUtMi45IDkuMi01LjMgNC44LTUuMyA2LjMtOC41IDIuNC02LjcgMi41LTEwLjMtLjUtNy4xLTEuOC0xMC40LTMuMy02LjMtNS44LTguOS01LjUtNC41LTguOC01LjktNi45LTItMTAuNC0xLjl6bTQuMyAyOC44Yy0xNS40IDAtMTUuNC0xNS42IDAtMTUuNnMxNS40IDE1LjYgMCAxNS42eiJdCiAgICB9OwogICAgZmFEcm9wYm94ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRyb3Bib3giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjE2YiIsICJNMjg4LjQgMTE2LjNsLTEzMiA4NC4zIDEzMiA4NC4zLTEzMiA4NC4zLTEzMi40LTg1LjEgMTMyLjMtODQuMy0xMzIuMy04My41IDEzMi4zLTg0LjMgMTMyLjEgODQuM3pNMTU1LjYgMzk1LjdsMTMyLTg0LjMgMTMyIDg0LjMtMTMyIDg0LjMtMTMyLTg0LjN6TTI4OC40IDI4NC4xbDEzMi04NC4zLTEzMi04My42IDEzMS4zLTg0LjIgMTMyLjMgODQuMy0xMzIuMyA4NC4zIDEzMi4zIDg0LjItMTMyLjMgODQuMy0xMzEuMy04NXoiXQogICAgfTsKICAgIGZhRGVlemVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRlZXplciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDc3IiwgIk0xNC44IDEwMS4xQzYuNiAxMDEuMSAwIDEyNy42IDAgMTYwLjNzNi42IDU5LjIgMTQuOCA1OS4yIDE0LjgtMjYuNSAxNC44LTU5LjItNi42LTU5LjItMTQuOC01OS4yek00NDguNyA0MC45Yy03LjcgMC0xNC41IDE3LjEtMTkuNCA0NC4xLTcuNy00Ni43LTIwLjItNzctMzQuMi03Ny0xNi44IDAtMzEuMSA0Mi45LTM4IDEwNS40LTYuNi00NS40LTE2LjgtNzQuMi0yOC4zLTc0LjItMTYuMSAwLTI5LjYgNTYuOS0zNC43IDEzNi4yLTkuNC00MC44LTIzLjItNjYuMy0zOC4zLTY2LjNzLTI4LjggMjUuNS0zOC4zIDY2LjNjLTUuMS03OS4zLTE4LjYtMTM2LjItMzQuNy0xMzYuMi0xMS41IDAtMjEuNyAyOC44LTI4LjMgNzQuMi02LjYtNjIuNS0yMS4yLTEwNS40LTM3LjgtMTA1LjQtMTQgMC0yNi41IDMwLjQtMzQuMiA3Ny00LjgtMjctMTEuNy00NC4xLTE5LjQtNDQuMS0xNC4zIDAtMjYgNTkuMi0yNiAxMzIuMVM0OSAzMDUuMiA2My4zIDMwNS4yYzUuOSAwIDExLjUtOS45IDE1LjgtMjYuOCA2LjkgNjEuNyAyMS4yIDEwNC4xIDM4IDEwNC4xIDEzIDAgMjQuNS0yNS41IDMyLjEtNjUuNiA1LjQgNzYuMyAxOC42IDEzMC40IDM0LjIgMTMwLjQgOS43IDAgMTguNi0yMS40IDI1LjMtNTYuNCA3LjkgNzIuMiAyNi4zIDEyMi43IDQ3LjcgMTIyLjdzMzkuNS01MC41IDQ3LjctMTIyLjdjNi42IDM1IDE1LjYgNTYuNCAyNS4zIDU2LjQgMTUuNiAwIDI4LjgtNTQuMSAzNC4yLTEzMC40IDcuNyA0MC4xIDE5LjQgNjUuNiAzMi4xIDY1LjYgMTYuNiAwIDMwLjktNDIuMyAzOC0xMDQuMSA0LjMgMTYuOCA5LjcgMjYuOCAxNS44IDI2LjggMTQuMyAwIDI2LTU5LjIgMjYtMTMyLjFTNDYzIDQwLjkgNDQ4LjcgNDAuOXptNDguNSA2MC4yYy04LjIgMC0xNC44IDI2LjUtMTQuOCA1OS4yczYuNiA1OS4yIDE0LjggNTkuMiAxNC44LTI2LjUgMTQuOC01OS4yLTYuNi01OS4yLTE0LjgtNTkuMnoiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zU2FtcGxpbmcgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy1zYW1wbGluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGYwIiwgIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6bTMuNiA1My4yYzIuOC0uMyAxMS41IDEgMTEuNSAxMS41bDYuNiAxMDcuMiA0LjktNTkuM2MwLTYgNC43LTEwLjYgMTAuNi0xMC42czEwLjYgNC43IDEwLjYgMTAuNmMwIDIuNS0uNS01LjcgNS43IDgxLjVsNS44LTY0LjJjLjMtMi45IDIuOS05LjMgMTAuMi05LjMgMy44IDAgOS45IDIuMyAxMC42IDguOWwxMS41IDk2LjUgNS4zLTEyLjhjMS44LTQuNCA1LjItNi42IDEwLjItNi42bDU4IDAgMCAyMS4zLTUwLjkgMC0xOC4yIDQ0LjNjLTMuOSA5LjktMTkuNSA5LjEtMjAuOC0zLjFsLTQtMzEuOS03LjUgOTIuNmMtLjMgMy0zIDkuMy0xMC4yIDkuMy0zIDAtOS44LTIuMS0xMC42LTkuMyAwLTEuOSAuNiA1LjgtNi4yLTc3LjlsLTUuMyA3Mi4yYy0xLjEgNC44LTQuOCA5LjMtMTAuNiA5LjMtMi45IDAtOS44LTItMTAuNi05LjMgMC0xLjkgLjUgNi43LTUuOC04Ny43TDI1NSAzODMuOWMwIDYuMy0zLjYgMTIuNC0xMC42IDEyLjQtNS4yIDAtMTAuNi00LjEtMTAuNi0xMkwyMjggMjk2LjZjLTUuOCA5Mi41LTUuMyA4NC01LjMgODUuOS0xLjEgNC44LTQuOCA5LjMtMTAuNiA5LjMtMyAwLTkuOC0yLjEtMTAuNi05LjMgMC0uNy0uNC0xLjEtLjQtMi42bC02LjItODguNi00LjkgNTYuN2MtLjcgNi41LTYuNyA5LjMtMTAuNiA5LjMtNS44IDAtOS42LTQuMS0xMC42LTguOUwxNTcuNyAyNzJjLTIgNC0zLjUgOC40LTExLjEgOC40bC01MS40IDAgMC0yMS4zIDQ0LjggMCAxMy43LTI3LjljNC40LTkuOSAxOC4yLTcuMiAxOS45IDIuN2wzLjEgMjAuNCA4LjQtOTcuOWMwLTYgNC44LTEwLjYgMTAuNi0xMC42IC41IDAgMTAuNi0uMiAxMC42IDEyLjRsNC45IDY5LjEgNi42LTkyLjZjMC0xMC4xIDkuNS0xMC42IDEwLjItMTAuNiAuNiAwIDEwLjYgLjcgMTAuNiAxMC42bDUuMyA4MC42IDYuMi05Ny45Yy4xLTEuMS0uNi0xMC4zIDkuOS0xMS41eiJdCiAgICB9OwogICAgZmFKZWRpT3JkZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiamVkaS1vcmRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTBlIiwgIk0zOTguOSAzNzMuNmM5NS45LTEyMi4xIDE3LjItMjMzLjEgMTcuMi0yMzMuMSA0NS40IDg1LjgtNDEuNCAxNzAuNS00MS40IDE3MC41IDEwNS0xNzEuNS02MC41LTI3MS41LTYwLjUtMjcxLjUgOTYuOSA3Mi43LTEwLjEgMTkwLjctMTAuMSAxOTAuNyA4NS44IDE1OC40LTY4LjYgMjMwLjEtNjguNiAyMzAuMXMtLjQtMTYuOS0yLjItODUuN2M0LjMgNC41IDM0LjUgMzYuMiAzNC41IDM2LjJsLTI0LjItNDcuNCA2Mi42LTkuMS02Mi42LTkuMSAyMC4yLTU1LjUtMzEuNCA0NS45Yy0yLjItODcuNy03LjgtMzA1LjEtNy45LTMwNi45IDAgMS01LjYgMjE5LTcuOSAzMDYuOWwtMzEuNC00NS45IDIwLjIgNTUuNS02Mi42IDkuMSA2Mi42IDkuMS0yNC4yIDQ3LjQgMzQuNS0zNi4yYy0xLjggNjguOC0yLjIgODUuNy0yLjIgODUuN1M1OS4xIDM4OC42IDE0NC45IDIzMC4yYzAgMC0xMDctMTE4LjEtMTAuMS0xOTAuNyAwIDAtMTY1LjUgOTkuOS02MC41IDI3MS41IDAgMC04Ni44LTg0LjgtNDEuNC0xNzAuNSAwIDAtNzguNyAxMTEgMTcuMiAyMzMuMSAwIDAtMjYuMi0xNi4xLTQ5LjQtNzcuNyAwIDAgMTYuOSAxODMuMyAyMjIgMTg1LjdsNC4xIDBjMjA1LTIuNCAyMjItMTg1LjcgMjIyLTE4NS43LTIzLjYgNjEuNS00OS45IDc3LjctNDkuOSA3Ny43eiJdCiAgICB9OwogICAgZmFSUHJvamVjdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyLXByb2plY3QiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRmNyIsICJNNTc4LjUgMjI2LjZDNTc4LjUgMTE5LjEgNDQ4LjQgMzIgMjg4IDMyUy0yLjUgMTE5LjEtMi41IDIyNi42YzAgOTUuOCAxMDMuMyAxNzUuNCAyMzkuNCAxOTEuNWwwIDYxLjkgOTkuMSAwIDAtNjEuNWMyNC4zLTIuNyA0Ny42LTcuNCA2OS40LTEzLjlsNDAuMSA3NS40IDExMiAwLTY3LjQtMTEzLjdjNTQuNS0zNS40IDg4LjQtODQuOSA4OC40LTEzOS43ek0xMTEuNyAyNDEuMWMwLTczLjUgOTguOS0xMzMgMjIwLjgtMTMzczIxMS45IDQwLjcgMjExLjkgMTMzYzAgNTAuMS0yNi41IDg1LTcwLjMgMTA2LjQtMi40LTEuNi00LjctMi45LTYuNC0zLjctMTAuMi01LjItMjcuOC0xMC41LTI3LjgtMTAuNXM4Ni42LTYuNCA4Ni42LTkyLjctOTAuNi04Ny45LTkwLjYtODcuOWwtMTk5IDAgMCAyMDguM2MtNzQuMS0yMS41LTEyNS4yLTY3LjEtMTI1LjItMTE5Ljl6bTIyNS4xIDM4LjNsMC01NS42YzU3LjggMCA4Ny44LTYuOCA4Ny44IDI3LjMgMCAzNi41LTM4LjIgMjguMy04Ny44IDI4LjN6bS0uOSA3Mi41bDI2LjYgMGMxMC44IDAgMTguOSAxMS43IDI0IDE5LjItMTYuMSAxLjktMzMgMi44LTUwLjYgMi45bDAtMjIuMXoiXQogICAgfTsKICAgIGZhSW5zdGFsb2QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaW5zdGFsb2QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA4MSIsICJNMTUzLjYgNDgwbDIzMy43IDAgMTE1LjQtMjA0LjItMjk4LjMgNTcuNC01MC44IDE0Ni44ek01MDUgMjQwLjFMMzg3LjQgMzIgMTU1LjkgMzIgMzYwLjUgMjY3LjkgNTA1IDI0MC4xek0xMjQuNiA0OC44TDcuNSAyNTYgMTIzLjUgNDYxLjIgMjI1LjkgMTY1LjYgMTI0LjYgNDguOHoiXQogICAgfTsKICAgIGZhQ2FuYWRpYW5NYXBsZUxlYWYgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2FuYWRpYW4tbWFwbGUtbGVhZiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzg1IiwgIk0zODMuOCAzNTEuN2MyLjUtMi41IDEwNS4yLTkyLjQgMTA1LjItOTIuNGwtMTcuNS03LjVjLTEwLTQuOS03LjQtMTEuNS01LTE3LjQgMi40LTcuNiAyMC4xLTY3LjMgMjAuMS02Ny4zcy00Ny43IDEwLTU3LjcgMTIuNWMtNy41IDIuNC0xMC0yLjUtMTIuNS03LjVzLTE1LTMyLjQtMTUtMzIuNC01Mi42IDU5LjktNTUuMSA2Mi4zYy0xMCA3LjUtMjAuMSAwLTE3LjYtMTAgMC0xMCAyNy42LTEyOS42IDI3LjYtMTI5LjZzLTMwLjEgMTcuNC00MC4xIDIyLjRjLTcuNSA1LTEyLjYgNS0xNy42LTUtNS4xLTcuNS00Mi43LTc5LjgtNDIuNy03OS44cy0zNy41IDcyLjMtNDIuNSA3OS44Yy01IDEwLTEwIDEwLTE3LjYgNS0xMC01LTQwLjEtMjIuNC00MC4xLTIyLjRTMTgzLjMgMTgyIDE4My4zIDE5MmMyLjUgMTAtNy41IDE3LjUtMTcuNiAxMC0yLjUtMi41LTU1LjEtNjIuMy01NS4xLTYyLjNzLTEyLjUgMjcuMy0xNSAzMi4zLTUgOS45LTEyLjUgNy41QzczIDE3NyAyNS40IDE2NyAyNS40IDE2N1M0MyAyMjYuNyA0NS41IDIzNC4zYzIuNCA2IDUgMTIuNS01IDE3LjRMMjMgMjU5LjNzMTAyLjYgODkuOSAxMDUuMiA5Mi40YzUuMSA1IDEwIDcuNSA1LjEgMjIuNS01LjEgMTUtMTAuMSAzNS4xLTEwLjEgMzUuMXM5NS4yLTIwLjEgMTA1LjMtMjIuNmM4LjctLjkgMTguMyAyLjUgMTguMyAxMi41UzI0MSA1MTIgMjQxIDUxMmwzMCAwcy01LjgtMTAyLjctNS44LTExMi44IDkuNS0xMy40IDE4LjQtMTIuNWMxMCAyLjUgMTA1LjIgMjIuNiAxMDUuMiAyMi42cy01LTIwLjEtMTAtMzUuMSAwLTE3LjUgNS0yMi41eiJdCiAgICB9OwogICAgZmFFdGhlcmV1bSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJldGhlcmV1bSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmNDJlIiwgIk0zMTEuOSAyNjAuOEwxNjAgMzUzLjYgOCAyNjAuOCAxNjAgMCAzMTEuOSAyNjAuOHpNMTYwIDM4My40TDggMjkwLjYgMTYwIDUxMiAzMTIgMjkwLjYgMTYwIDM4My40eiJdCiAgICB9OwogICAgZmFIb3V6eiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJob3V6eiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjdjIiwgIk0yNzYgMzMwLjdsLTEwNC42IDAgMCAxNDkuMy0xNTQuMyAwIDAtNDQ4IDEwOS41IDAgMCAxMDQuNSAzMDUuMSA4NS42IDAgMjU3LjktMTU1LjcgMCAwLTE0OS4zeiJdCiAgICB9OwogICAgZmFWaWJlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2aWJlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDA5IiwgIk00NDQuMyA0OS45Yy0xMi43LTExLjctNjQuMS00OS0xNzguNy00OS41IDAgMC0xMzUuMS04LjEtMjAwLjkgNTIuMy0zNi42IDM2LjYtNDkuNSA5MC4zLTUwLjkgMTU2LjhzLTMuMSAxOTEuMSAxMTcgMjI0LjlsLjEgMC0uMSA1MS42cy0uOCAyMC45IDEzIDI1LjFjMTYuNiA1LjIgMjYuNC0xMC43IDQyLjMtMjcuOCA4LjctOS40IDIwLjctMjMuMiAyOS44LTMzLjcgODIuMiA2LjkgMTQ1LjMtOC45IDE1Mi41LTExLjIgMTYuNi01LjQgMTEwLjUtMTcuNCAxMjUuNy0xNDIgMTUuOC0xMjguNi03LjYtMjA5LjgtNDkuOC0yNDYuNXpNNDU4LjIgMjg3Yy0xMi45IDEwNC04OSAxMTAuNi0xMDMgMTE1LjEtNiAxLjktNjEuNSAxNS43LTEzMS4yIDExLjIgMCAwLTUyIDYyLjctNjguMiA3OS01LjMgNS4zLTExLjEgNC44LTExLTUuNyAwLTYuOSAuNC04NS43IC40LTg1LjdsMCAwQzQzLjQgMzcyLjcgNDkuNCAyNjYuNiA1MC41IDIxMS4xczExLjYtMTAxIDQyLjYtMTMxLjZjNTUuNy01MC41IDE3MC40LTQzIDE3MC40LTQzIDk2LjkgLjQgMTQzLjMgMjkuNiAxNTQuMSAzOS40IDM1LjcgMzAuNiA1My45IDEwMy44IDQwLjYgMjExLjF6bS0xMzktODAuOGMuNCA4LjYtMTIuNSA5LjItMTIuOSAuNi0xLjEtMjItMTEuNC0zMi43LTMyLjYtMzMuOS04LjYtLjUtNy44LTEzLjQgLjctMTIuOSAyNy45IDEuNSA0My40IDE3LjUgNDQuOCA0Ni4yem0yMC4zIDExLjNjMS00Mi40LTI1LjUtNzUuNi03NS44LTc5LjMtOC41LS42LTcuNi0xMy41IC45LTEyLjkgNTggNC4yIDg4LjkgNDQuMSA4Ny44IDkyLjUtLjEgOC42LTEzLjEgOC4yLTEyLjktLjN6bTQ3IDEzLjRjLjEgOC42LTEyLjkgOC43LTEyLjkgLjEtLjYtODEuNS01NC45LTEyNS45LTEyMC44LTEyNi40LTguNS0uMS04LjUtMTIuOSAwLTEyLjkgNzMuNyAuNSAxMzMgNTEuNCAxMzMuNyAxMzkuMnpNMzc1LjIgMzI5bDAgLjJjLTEwLjggMTktMzEgNDAtNTEuOCAzMy4zbC0uMi0uM2MtMjEuMS01LjktNzAuOC0zMS41LTEwMi4yLTU2LjUtMTYuMi0xMi44LTMxLTI3LjktNDIuNC00Mi40LTEwLjMtMTIuOS0yMC43LTI4LjItMzAuOC00Ni42LTIxLjMtMzguNS0yNi01NS43LTI2LTU1LjctNi43LTIwLjggMTQuMi00MSAzMy4zLTUxLjhsLjIgMGM5LjItNC44IDE4LTMuMiAyMy45IDMuOSAwIDAgMTIuNCAxNC44IDE3LjcgMjIuMSA1IDYuOCAxMS43IDE3LjcgMTUuMiAyMy44IDYuMSAxMC45IDIuMyAyMi0zLjcgMjYuNmwtMTIgOS42Yy02LjEgNC45LTUuMyAxNC01LjMgMTRzMTcuOCA2Ny4zIDg0LjMgODQuM2MwIDAgOS4xIC44IDE0LTUuM2w5LjYtMTJjNC42LTYgMTUuNy05LjggMjYuNi0zLjcgMTQuNyA4LjMgMzMuNCAyMS4yIDQ1LjggMzIuOSA3IDUuNyA4LjYgMTQuNCAzLjggMjMuNnoiXQogICAgfTsKICAgIGZhS2lja3N0YXJ0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAia2lja3N0YXJ0ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsic3F1YXJlLWtpY2tzdGFydGVyIl0sICJmM2JiIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0zMjAuOCAyMzNsLTIzLjMgMjMuMSAyMy4zIDIyLjljMjQuMSAyMy45IDI0LjEgNjMgMCA4Ni45cy02My40IDIzLjktODcuNiAwbC04LjUtOC40Yy0xMS4zIDE2LTI5LjcgMjYuNS01MC45IDI2LjUtMzQuMSAwLTYxLjktMjcuNS02MS45LTYxLjRsMC0xMzMuMmMwLTMzLjggMjcuNy02MS40IDYxLjktNjEuNCAyMS4xIDAgMzkuNiAxMC41IDUwLjkgMjYuNWw4LjUtOC40YzI0LjEtMjMuOSA2My40LTIzLjkgODcuNiAwczI0LjEgNjMgMCA4Ni45eiJdCiAgICB9OwogICAgZmFTcXVhcmVLaWNrc3RhcnRlciA9IGZhS2lja3N0YXJ0ZXI7CiAgICBmYVNwb3RpZnkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3BvdGlmeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWJjIiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTM1Ni43IDM3Mi45Yy00LjIgMC02LjgtMS4zLTEwLjctMy42LTYyLjQtMzcuNi0xMzUtMzkuMi0yMDYuNy0yNC41LTMuOSAxLTkgMi42LTExLjkgMi42LTkuNyAwLTE1LjgtNy43LTE1LjgtMTUuOCAwLTEwLjMgNi4xLTE1LjIgMTMuNi0xNi44IDgxLjktMTguMSAxNjUuNi0xNi41IDIzNyAyNi4yIDYuMSAzLjkgOS43IDcuNCA5LjcgMTYuNXMtNy4xIDE1LjQtMTUuMiAxNS40em0yNi45LTY1LjZjLTUuMiAwLTguNy0yLjMtMTIuMy00LjItNjIuNS0zNy0xNTUuNy01MS45LTIzOC42LTI5LjQtNC44IDEuMy03LjQgMi42LTExLjkgMi42LTEwLjcgMC0xOS40LTguNy0xOS40LTE5LjRzNS4yLTE3LjggMTUuNS0yMC43YzI3LjgtNy44IDU2LjItMTMuNiA5Ny44LTEzLjYgNjQuOSAwIDEyNy42IDE2LjEgMTc3IDQ1LjUgOC4xIDQuOCAxMS4zIDExIDExLjMgMTkuNy0uMSAxMC44LTguNSAxOS41LTE5LjQgMTkuNXptMzEtNzYuMmMtNS4yIDAtOC40LTEuMy0xMi45LTMuOS03MS4yLTQyLjUtMTk4LjUtNTIuNy0yODAuOS0yOS43LTMuNiAxLTguMSAyLjYtMTIuOSAyLjYtMTMuMiAwLTIzLjMtMTAuMy0yMy4zLTIzLjYgMC0xMy42IDguNC0yMS4zIDE3LjQtMjMuOSAzNS4yLTEwLjMgNzQuNi0xNS4yIDExNy41LTE1LjIgNzMgMCAxNDkuNSAxNS4yIDIwNS40IDQ3LjggNy44IDQuNSAxMi45IDEwLjcgMTIuOSAyMi42IDAgMTMuNi0xMSAyMy4zLTIzLjIgMjMuM3oiXQogICAgfTsKICAgIGZhTGVhbnB1YiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsZWFucHViIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyMTIiLCAiTTM4Ni42IDExMS41bDE1LjEgMjQ5LTExLS4zYy0zNi4yLS44LTcxLjYgOC44LTEwMi43IDI4LTMxLTE5LjItNjYuNC0yOC0xMDIuNy0yOC00NS42IDAtODIuMSAxMC43LTEyMy41IDI3LjdMOTMuMiAxMjkuNmMyOC41LTExLjggNjEuNS0xOC4xIDkyLjItMTguMSA0MS4yIDAgNzMuOCAxMy4yIDEwMi43IDQyLjUgMjcuNy0yOC4zIDU5LTQxLjcgOTguNS00Mi41ek01NjkuMiA0NDhjLTI1LjUgMC00Ny41LTUuMi03MC41LTE1LjYtMzQuMy0xNS42LTcwLTI1LTEwNy45LTI1LTM5IDAtNzQuOSAxMi45LTEwMi43IDQwLjYtMjcuNy0yNy43LTYzLjctNDAuNi0xMDIuNy00MC42LTM3LjkgMC03My42IDkuMy0xMDcuOSAyNS0yMi4yIDkuOS00NC43IDE1LjYtNjkuMiAxNS42TDcgNDQ4IDQ5LjYgOTguOWMzOS4zLTIyLjIgODctMzQuOSAxMzIuMy0zNC45IDM3LjEgMCA3NS4yIDcuNyAxMDYuMiAyOS4xIDMxLTIxLjQgNjkuMi0yOS4xIDEwNi4yLTI5LjEgNDUuMyAwIDkzIDEyLjYgMTMyLjMgMzQuOUw1NjkuMiA0NDh6bS00My40LTQ0LjdMNDkxLjggMTIzYy0zMC43LTE0LTY3LjItMjEuNC0xMDEtMjEuNC0zOC40IDAtNzQuNCAxMi4xLTEwMi43IDM4LjctMjguMy0yNi42LTY0LjItMzguNy0xMDIuNy0zOC43LTMzLjggMC03MC4zIDcuNC0xMDEgMjEuNGwtMzQgMjgwLjJjNDcuMi0xOS41IDgyLjktMzMuNSAxMzUtMzMuNSAzNy42IDAgNzAuOCA5LjYgMTAyLjcgMjkuNiAzMS44LTIwIDY1LjEtMjkuNiAxMDIuNy0yOS42IDUyLjIgMCA4Ny44IDE0IDEzNSAzMy41eiJdCiAgICB9OwogICAgZmFKYXZhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImphdmEiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjRlNCIsICJNMjc3LjggMzEyLjljOS44LTYuNyAyMy40LTEyLjUgMjMuNC0xMi41cy0zOC43IDctNzcuMiAxMC4yYy00Ny4xIDMuOS05Ny43IDQuNy0xMjMuMSAxLjMtNjAuMS04IDMzLTMwLjEgMzMtMzAuMXMtMzYuMS0yLjQtODAuNiAxOWMtNTIuNSAyNS40IDEzMCAzNyAyMjQuNSAxMi4xem0tODUuNC0zMi4xYy0xOS00Mi43LTgzLjEtODAuMiAwLTE0NS44IDEwMy43LTgxLjggNTAuNS0xMzUgNTAuNS0xMzUgMjEuNSA4NC41LTc1LjYgMTEwLjEtMTEwLjcgMTYyLjYtMjMuOSAzNS45IDExLjcgNzQuNCA2MC4yIDExOC4yek0zMDcgMTA0LjZjLjEgMC0xNzUuMiA0My44LTkxLjUgMTQwLjIgMjQuNyAyOC40LTYuNSA1NC02LjUgNTRzNjIuNy0zMi40IDMzLjktNzIuOUMyMTYgMTg4LjEgMTk1LjQgMTY5LjMgMzA3IDEwNC42em0tNi4xIDI3MC41Yy0uNSAxLTEuMiAxLjgtMiAyLjYgMTI4LjMtMzMuNyA4MS4xLTExOC45IDE5LjgtOTcuMy0zLjMgMS4yLTYuMiAzLjQtOC4yIDYuMyAzLjYtMS4zIDcuMy0yLjMgMTEtMyAzMS02LjUgNzUuNSA0MS41LTIwLjYgOTEuNHpNMzQ4IDQzNy40czE0LjUgMTEuOS0xNS45IDIxLjJjLTU3LjkgMTcuNS0yNDAuOCAyMi44LTI5MS42IC43LTE4LjMtNy45IDE2LTE5IDI2LjgtMjEuMyAxMS4yLTIuNCAxNy43LTIgMTcuNy0yLTIwLjMtMTQuMy0xMzEuMyAyOC4xLTU2LjQgNDAuMiAyMDQuMiAzMy4yIDM3Mi40LTE0LjkgMzE5LjQtMzguOHpNMTI0LjUgMzk2Yy03OC43IDIyIDQ3LjkgNjcuNCAxNDguMSAyNC41LTkuOC0zLjgtMTkuMi04LjQtMjguMi0xMy44LTQ0LjcgOC41LTY1LjQgOS4xLTEwNiA0LjUtMzMuNS0zLjgtMTMuOS0xNS4yLTEzLjktMTUuMnptMTc5LjggOTcuMmMtNzguNyAxNC44LTE3NS44IDEzLjEtMjMzLjMgMy42IDAtLjEgMTEuOCA5LjcgNzIuNCAxMy42IDkyLjIgNS45IDIzMy44LTMuMyAyMzcuMS00Ni45IDAgMC02LjQgMTYuNS03Ni4yIDI5Ljd6TTI2MC43IDM1M2MtNTkuMiAxMS40LTkzLjUgMTEuMS0xMzYuOCA2LjYtMzMuNS0zLjUtMTEuNi0xOS43LTExLjYtMTkuNy04Ni44IDI4LjggNDguMiA2MS40IDE2OS41IDI1LjktNy44LTIuOC0xNS03LjEtMjEuMS0xMi44eiJdCiAgICB9OwogICAgZmFOZmNTeW1ib2wgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibmZjLXN5bWJvbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTMxIiwgIk0zNjAuOSAzMi40YzcuNy0xLjMgMTUuNyAuNSAyMS4yIDUgODQuMSA1OC43IDEyOS45IDEzNi4zIDEyOS45IDIxNy43IDAgODMuMS00NS44IDE2MC44LTEyOS45IDIxOS41LTQuOCA0LTExLjcgNS45LTE4LjYgNS4zLTctLjYtMTMuNS0zLjYtMTguNC04LjVMMTYxLjcgMjg4LjdjLTUuNi01LjUtOC43LTEzLTkuNi0yMC45IDAtNy44IDQtMTUuMyA5LjUtMjAuOSA1LjYtNS41IDEzLjEtOC43IDIwLjktOC43IDcuOSAwIDE1LjQgMy4xIDIwLjkgOC42TDM2OC41IDQxMS4yYzU0LjYtNDQuNyA4NC4zLTk5LjIgODQuMy0xNTYuMSAwLTYxLjYtMzYuOS0xMjIuMi0xMDMuOS0xNjkuMy02LjQtNC41LTEwLjgtMTEuNC0xMi4xLTE5LjEtMS40LTcuNyAuNC0xNS43IDUtMjIuMSA0LjUtNi40IDExLjQtMTAuOCAxOS4xLTEyLjF6bS0yMDYgNDQ3LjJjLTcuNyAxLjMtMTUuNi0uNS0yMi4xLTUtODMuMS01OC43LTEyOS0xMzYuNC0xMjktMjE5LjUgMC04MS40IDQ1LjgtMTU5IDEyOS0yMTcuNyA1LjctNCAxMi42LTUuOSAxOS42LTUuMyA2LjkgLjYgMTMuNCAzLjYgMTguMyA4LjVMMzU0LjEgMjIzLjNjNS42IDUuNSA4LjcgMTMgOC43IDIwLjkgLjEgNi45LTMgMTUuMy04LjYgMjAuOS01LjUgNS41LTEzIDguNy0yMC45IDguNy03LjggMC0xNi4yLTMuMS0yMC45LTguNkwxNDcuMyAxMDAuN2MtNTQuNiA0NS4yLTg0LjMgOTkuMi04NC4zIDE1NC40IDAgNjMuNCAzNi45IDEyNCAxMDMuMSAxNzEuMSA3LjMgNC42IDExLjYgMTEuNCAxMyAxOS4yIDEuMyA3LjctLjUgMTUuNy01IDIyLjFzLTExLjQgMTAuNy0xOS4yIDEyLjF6Il0KICAgIH07CiAgICBmYVdvZHUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid29kdSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMDg4IiwgIk0xNzguNCAzMzkuN2wtMzcuMyAwLTI4LjktMTE2LjItLjUgMC0yOC41IDExNi4yLTM4IDAtNDUuMi0xNzAuOCAzNy41IDAgMjcgMTE2LjIgLjUgMCAyOS43LTExNi4yIDM1LjIgMCAyOS4yIDExNy43IC41IDAgMjgtMTE3LjcgMzYuOCAwLTQ1LjkgMTcwLjh6bTkzLTEyN2MzOSAwIDY0LjEgMjUuOCA2NC4xIDY1LjMgMCAzOS4yLTI1LjEgNjUtNjQuMSA2NS0zOC43IDAtNjMuOS0yNS44LTYzLjktNjUgMC0zOS41IDI1LjEtNjUuMyA2My45LTY1LjN6bTAgMTA0LjhjMjMuMiAwIDMwLjEtMTkuOSAzMC4xLTM5LjUgMC0xOS45LTYuOS0zOS43LTMwLjEtMzkuNy0yNy43IDAtMjkuOSAxOS45LTI5LjkgMzkuNyAwIDE5LjYgNi45IDM5LjUgMjkuOSAzOS41em0xNjMuNyA2LjVsLS41IDBjLTcuOSAxMy40LTIxLjggMTkuMS0zNy41IDE5LjEtMzcuMyAwLTU1LjUtMzItNTUuNS02Ni4yIDAtMzMuMiAxOC40LTY0LjEgNTQuOC02NC4xIDE0LjYgMCAyOC45IDYuMiAzNi44IDE4LjRsLjIgMCAwLTYyLjIgMzQgMCAwIDE3MC44LTMyLjMgMCAwLTE1Ljh6bS0yOS43LTg1LjZjLTIyLjIgMC0yOS45IDE5LjEtMjkuOSAzOS41IDAgMTkuNCA4LjggMzkuNyAyOS45IDM5LjcgMjIuNSAwIDI5LjItMTkuNiAyOS4yLTM5LjkgMC0yMC4xLTcuMi0zOS4yLTI5LjItMzkuMnpNNTkzIDMzOS43bC0zMi4zIDAgMC0xNy4yLS43IDBjLTguNiAxMy45LTIzLjQgMjAuNi0zNy44IDIwLjYtMzYuMSAwLTQ1LjItMjAuMy00NS4yLTUwLjlsMC03Ni4xIDM0IDAgMCA2OS44YzAgMjAuMyA2IDMwLjQgMjEuOCAzMC40IDE4LjQgMCAyNi4zLTEwLjMgMjYuMy0zNS40bDAtNjQuOCAzNCAwIDAgMTIzLjZ6bTkuNS0zNi44bDM3LjUgMCAwIDM2LjgtMzcuNSAwIDAtMzYuOHoiXQogICAgfTsKICAgIGZhU3F1YXJlU3RlYW0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXN0ZWFtIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInN0ZWFtLXNxdWFyZSJdLCAiZjFiNyIsICJNMTY1LjYgMzA5LjFjMTguNiA3LjcgMjcuMyAyOC45IDE5LjYgNDcuNHMtMjkgMjcuMi00Ny42IDE5LjRsLTI4LjUtMTEuOGM1IDEwLjYgMTMuOCAxOS40IDI1LjQgMjQuMiAyNS4yIDEwLjUgNTQuMS0xLjQgNjQuNi0yNi41IDUuMS0xMi4xIDUuMS0yNS41IC4xLTM3LjctNS4xLTEyLjEtMTQuNS0yMS42LTI2LjctMjYuNy0xMi4xLTUtMjUtNC44LTM2LjQtLjVsMjkuNSAxMi4yek00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NmwwIDE0NC43IDExNi42IDQ4LjFjMTItOC4yIDI2LjItMTIuMSA0MC43LTExLjNsNTUuNC04MC4yIDAtMS4xYzAtNDguMiAzOS4zLTg3LjUgODcuNi04Ny41czg3LjYgMzkuMyA4Ny42IDg3LjVjMCA0OS4yLTQwLjkgODguNy04OS42IDg3LjVsLTc5IDU2LjNjMS42IDM4LjUtMjkuMSA2OC44LTY1LjcgNjguOC0zMS44IDAtNTguNS0yMi43LTY0LjUtNTIuN0wwIDMxOS4yIDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0yNDEuOSAxOTYuMmE1OC40IDU4LjQgMCAxIDAgMTE2LjggMCA1OC40IDU4LjQgMCAxIDAgLTExNi44IDB6bTEwMi40LS4xYTQzLjkgNDMuOSAwIDEgMSAtODcuOCAwIDQzLjkgNDMuOSAwIDEgMSA4Ny44IDB6Il0KICAgIH07CiAgICBmYVN0ZWFtU3F1YXJlID0gZmFTcXVhcmVTdGVhbTsKICAgIGZhQ3JlYXRpdmVDb21tb25zTmNFdSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLW5jLWV1IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZTkiLCAiTTI1NS43IDhDMTExLjYgOCA4IDEyNC44IDggMjU2IDggMzkyLjMgMTE5LjcgNTA0IDI1NS43IDUwNCAzODUuOSA1MDQgNTA0IDQwMy4xIDUwNCAyNTYgNTA0IDExNyAzOTYuNCA4IDI1NS43IDh6bS42IDQ1MC43Yy0xMTIgMC0yMDMuNi05Mi41LTIwMy42LTIwMi43IDAtMjMuMiAzLjctNDUuMiAxMC45LTY2bDY1LjcgMjkuMS00LjcgMCAwIDI5LjUgMjMuMyAwYzAgNi4yLS40IDMuMi0uNCAxOS41bC0yMi44IDAgMCAyOS41IDI3IDBjMTEuNCA2NyA2Ny4yIDEwMS4zIDEyNC42IDEwMS4zIDI2LjYgMCA1MC42LTcuOSA2NC44LTE1LjhsLTEwLTQ2LjFjLTguNyA0LjYtMjguMiAxMC44LTQ3LjMgMTAuOC0yOC4yIDAtNTguMS0xMC45LTY3LjMtNTAuMmw5MC4zIDAgMTI4LjMgNTYuOGMtMS41IDIuMS01Ni4yIDEwNC4zLTE3OC44IDEwNC4zek0yMzkuNiAyNjguMWwtLjUtLjQgLjkgLjQtLjQgMHptNzcuMi0xOS41bDMuNyAwIDAtMjkuNS03MC4zIDAtMjguNi0xMi42YzIuNS01LjUgNS40LTEwLjUgOC44LTE0LjMgMTIuOS0xNS44IDMxLjEtMjIuNCA1MS4xLTIyLjQgMTguMyAwIDM1LjMgNS40IDQ2LjEgMTBsMTEuNi00Ny4zYy0xNS02LjYtMzctMTIuNC02Mi4zLTEyLjQtMzkgMC03Mi4yIDE1LjgtOTUuOSA0Mi4zLTUuMyA2LjEtOS44IDEyLjktMTMuOSAyMC4xTDg1LjUgMTQ2LjRjNjQuNi05Ni44IDE1Ny43LTkzLjYgMTcwLjctOTMuNiAxMTMgMCAyMDMgOTAuMiAyMDMgMjAzLjQgMCAxOC43LTIuMSAzNi4zLTYuMyA1Mi45TDMxNi44IDI0OC42eiJdCiAgICB9OwogICAgZmFOcG0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibnBtIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzZDQiLCAiTTI4OCAyODhsLTMyIDAgMC02NCAzMiAwIDAgNjR6TTU3NiAxNjBsMCAxOTItMjg4IDAgMCAzMi0xMjggMCAwLTMyLTE2MCAwIDAtMTkyIDU3NiAwek0xNjAgMTkybC0xMjggMCAwIDEyOCA2NCAwIDAtOTYgMzIgMCAwIDk2IDMyIDAgMC0xMjh6bTE2MCAwbC0xMjggMCAwIDE2MCA2NCAwIDAtMzIgNjQgMCAwLTEyOHptMjI0IDBsLTE5MiAwIDAgMTI4IDY0IDAgMC05NiAzMiAwIDAgOTYgMzIgMCAwLTk2IDMyIDAgMCA5NiAzMiAwIDAtMTI4eiJdCiAgICB9OwogICAgZmFDbG91ZHNjYWxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNsb3Vkc2NhbGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM4MyIsICJNMzE4LjEgMTU0bC05LjQgNy42Yy0yMi41LTE5LjMtNTEuNS0zMy42LTgzLjMtMzMuNi03MS42IDAtMTI5LjQgNjAuOC0xMjkuNCAxMzIuMyAwIDYuNiAuNCAxMy4xIDEuNCAxOS40LTItNTYgNDEuOC05Ny40IDkyLjYtOTcuNCAyNC4yIDAgNDYuMiA5LjQgNjIuNiAyNC43bC0yNS4yIDIwLjRjLTguMy0uOS0xNi44IDEuOC0yMy4xIDguMS0xMS4xIDExLTExLjEgMjguOSAwIDQwIDExLjEgMTEgMjguOSAxMSA0MCAwIDYuMy02LjMgOS0xNC45IDguMS0yMy4xbDc1LjItODguOGM2LjMtNi41LTMuMy0xNS45LTkuNS05LjZ6TTIxMy43IDI0Ni41YTE0IDE0IDAgMSAxIDIwLjYgMTkgMTQgMTQgMCAxIDEgLTIwLjYtMTl6TTIyNCAzMmEyMjQgMjI0IDAgMSAwIDAgNDQ4IDIyNCAyMjQgMCAxIDAgMC00NDh6bTAgNjRhMTYwIDE2MCAwIDEgMSAwIDMyMCAxNjAgMTYwIDAgMSAxIDAtMzIweiJdCiAgICB9OwogICAgZmFUaGVtZWNvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRoZW1lY28iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjVjNiIsICJNMjAyLjkgOC40YzkuOS01LjcgMjYtNS44IDM2LS4yTDQzMCAxMTUuOWMxMCA1LjYgMTggMTkuNCAxOCAzMC45TDQ0OCAzNjRjMCAxMS40LTguMSAyNS4zLTE4IDMxTDIzOC44IDUwMy43Yy05LjkgNS43LTI2IDUuNi0zNS44LS4yTDE3LjkgMzk1LjFDOCAzODkuMyAwIDM3NS40IDAgMzY0TDAgMTQ2LjdjMC0xMS40IDgtMjUuNCAxNy45LTMxLjFMMjAyLjkgOC40ek0xMjUuNSAyMDguM2MtMTUuOSAwLTMxLjkgLjEtNDcuOCAuMWwwIDEwMS40IDE5LjEgMCAwLTI5LjggMjguNyAwYzQ5LjcgMCA0OS42LTcxLjcgMC03MS43ek0yNjUuNiAzMDguNmwtMzAuNy0zNC42YzM3LTcuNSAzNC44LTY1LjItMTAuOS02NS41LTE2LjEgMC0zMi4yLS4xLTQ4LjMtLjFsMCAxMDEuNiAxOS4xIDAgMC0zMy45IDE4LjQgMCAyOS42IDMzLjkgMjIuOCAwIDAtMS4zem0tNDEuNi04Mi4zYzIzLjMgMCAyMy4zIDMyLjUgMCAzMi41bC0yOS4xIDAgMC0zMi41IDI5LjEgMHptLTk1LjYtMS42YzIxLjIgMCAyMS4xIDM4LjkgMCAzOC45bC0zMi4zIDAgMC0zOC44IDMyLjMgMHptMTkyLjYtMTguMmMtNjguNSAwLTcxIDEwNS44IDAgMTA1LjggNjkuNSAwIDY5LjQtMTA1LjggMC0xMDUuOHptMCAxNy40YzQ0LjEgMCA0NC44IDcwLjkgMCA3MC45cy00NC40LTcwLjkgMC03MC45eiJdCiAgICB9OwogICAgZmFHb29nbGVQbGF5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2dsZS1wbGF5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYWIiLCAiTTI5My42IDIzNC4zTDcyLjkgMTMgMzUzLjcgMTc0LjIgMjkzLjYgMjM0LjN6TTE1LjMgMEMyLjMgNi44LTYuNCAxOS4yLTYuNCAzNS4zbDAgNDQxLjNjMCAxNi4xIDguNyAyOC41IDIxLjcgMzUuM0wyNzEuOSAyNTUuOSAxNS4zIDB6TTQ0MC41IDIyNS42bC01OC45LTM0LjEtNjUuNyA2NC41IDY1LjcgNjQuNSA2MC4xLTM0LjFjMTgtMTQuMyAxOC00Ni41LTEuMi02MC44ek03Mi45IDQ5OUwzNTMuNyAzMzcuOCAyOTMuNiAyNzcuNyA3Mi45IDQ5OXoiXQogICAgfTsKICAgIGZhS29ydnVlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImtvcnZ1ZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDJmIiwgIk0zODcuNiAzNGwtMzI3IDBDMjcuOSAzNCAxLjEgNjAuOCAxLjEgOTMuNWwwIDMyNy4xYzAgMzIuNiAyNi44IDU5LjQgNTkuNSA1OS40bDMyNy4xIDBjMzMgMCA1OS41LTI2LjggNTkuNS01OS41bDAtMzI3QzQ0Ny4xIDYwLjggNDIwLjMgMzQgMzg3LjYgMzR6TTg4LjIgMTIwLjhsOTYgMCAwIDExNiA2MS44LTExNiAxMTAuOSAwLTgxLjIgMTMyLTE4Ny41IDAgMC0xMzJ6TTI1MCAzOTIuOWwtNjUuNy0xMTMuNiAwIDExMy42LTk2IDAgMC0xMzAuOCAxOTEuNSAwIDg4LjYgMTMwLjgtMTE4LjQgMHoiXQogICAgfTsKICAgIGZhVzNjID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInczYyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlN2RlIiwgIk0xMDUuMiAzMDUuM2wzMC45LTEwNC43YzcuOS0yNi43IDguNi00MC42IC4yLTY4LjhsLTEwLjEtMzMuOSA0NC4xIDAgNjEgMjA3LjQgNDUuNy0xNTUuNWMxMy4zLTQ1LjMgMjEuMS01MS45IDU5LjQtNTEuOWwxMzIuOCAwYy0yNC4yIDQyLjktNDkuMyA4NS4yLTczLjkgMTI3LjkgMi42IC44IDUuMiAxLjggNy43IDIuOCAxNy4zIDcuMSAzMi4yIDE5LjQgNDIgMzUuNSAxMS4yIDE4LjUgMTYuOCA0MC4yIDE2LjggNjUuMiAwIDMwLjgtOC4yIDU2LjgtMjQuNiA3Ny44LTE0LjUgMTguNi0zNSAyOS41LTU4LjIgMzEuMiAwIC4zLTUuMiAuNC01LjggLjQtMzkuNy0uMS03MC44LTMyLjEtODMuMS02OC43bDQyLjkgMGMzLjUgNS4zIDYuOCAxMC43IDExLjIgMTUuNSA4LjEgNy4zIDE4LjUgMTAuOSAyOS4zIDExLjEgMTMuMSAwIDIzLjMtOS4xIDI5LjktMTkuOCA4LjEtMTMuMiAxMi4yLTI5IDEyLjItNDcuNSAwLTEzLjEtMS44LTI0LjMtNS4zLTMzLjYtLjktMi4zLTEuOS00LjUtMy02LjYtMS40LTIuNi0yLjktNS4xLTQuNy03LjQtMTAuMS0xMy4yLTI5LjMtMTkuNy00Ny41LTE5LjhsLTI4LjIgMCA3MC4zLTEyMi0zNS42IDBjLTQzLjEgMC0zNS45LTUuNC01MC40IDQzLjNsLTc1LjcgMjU1LjMtNC4yIDAtNjMuMS0yMTEuMS02My4xIDIxMS4xLTQuMiAwLTEwMS0zNDAuNyA0NC4yIDAgNjEgMjA3LjR6TTQ2NyAzMzUuN2MuMyAuNiAxMS4zIDIwLjMgMTguMyAzMC4zIDcuMSAxMC4xIDE5LjggMjAuOSAyNC44IDI0LjZzMTkuMSAxMi41IDM0LjMgMTMuOWMxNS4yIDEuNSAyMy4zIC4yIDM4LjctNi42IDE1LjQtNi44IDI3LjktMjAuNCAzNC45LTI4LjEgNi45LTcuNiAxNy45LTI3LjMgMTguMi0yNy43bDMuMyAxNi44YzEuNyA5LTEgMjMuNy00LjEgMzAtNC4zIDguNi03LjYgMTMuNS0xNCAyMC4zLTYuMSA2LjUtMTYuNyAxMy41LTIxLjMgMTYuNC00LjYgMi45LTIzLjEgMTUuMS01MC4xIDEwLjNzLTQ0LjctMjUuOS01My45LTM4LjJjLTkuOC0xMy4yLTE2LjctMjguMy0xOS0zMy4yLTMuOC04LjQtOS45LTI4LjItMTAuMS0yOC44em0xNjkuNy0yMThjMy4zIDIwLjMtLjEgMjguNy05LjEgNDZsLTEyLjcgMjQuMmMtLjMtLjYtMTAtMjAuNy0yNS45LTMxLjktMTMuNi05LjYtMjIuNS0xMS43LTM2LjMtOC44LTE3LjggMy43LTM4IDI1LTQ2LjggNTEuMi0xMC41IDMxLjQtMTAuNyA0Ni42LTExIDYwLjYtLjYgMjIuNCAyLjkgMzUuNiAyLjkgMzUuNnMtMTUuNC0yOC41LTE1LjItNzAuMWMuMS0yOS43IDQuOC01Ni43IDE4LjUtODMuMyAxMi4xLTIzLjQgMzAuMS0zNy40IDQ2LjEtMzkuMSAxNi41LTEuNyAyOS42IDYuMyAzOS43IDE0LjkgMTAuNiA5IDIxLjMgMjguOCAyMS4zIDI4LjhsMjQuOS00OS44IDMuNiAyMS44eiJdCiAgICB9OwogICAgZmFHcmF2ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdyYXYiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjJkNiIsICJNMzAyLjYgMjEwLjZjNC41IDQuNSA0LjUgMTIuMyAwIDE2LjhsLTEwIDEwYy00LjUgNC45LTEyLjMgNC45LTE3LjEgMGwtMTAuOC0xMC44Yy00LjUtNC45LTQuNS0xMi4zIDAtMTcuMWwxMC0xMGM0LjUtNC41IDEyLjMtNC41IDE3LjEgMGwxMC44IDExLjF6bS0zMS4yLTIwLjNhNy43IDcuNyAwIDEgMCAtMTAuNi0xMSA3LjcgNy43IDAgMSAwIDEwLjYgMTF6bS0yNi44IDUuNWE3LjUgNy41IDAgMSAwIDEwLjcgMTAuNSA3LjUgNy41IDAgMSAwIC0xMC43LTEwLjV6TTMxOS40IDE4MmMtMjAuNS0xNC45LTM0LjktNDQuNi0xMi4zLTcwLjMgMjIuMy0yNS43IDQyLTE3LjggNjEuNyAuOCAxMi4zIDExLjcgMzAuMiAyNS43IDE3LjggNDkuOC0xMi45IDI0LjMtNDYuNiAzNC4zLTY3LjIgMTkuN3ptNDkuMi00NS45Yy05LjItMTAuMy0yNC4xIDcuMS0xNiAxNi42IDcuNiA5LjMgMzMuMSAyLjUgMTYtMTYuNnpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptNDQzLjcgNDRjMi42LTE2LjYtMjAuOS0xNy4xLTI2LTI2LjUtMTQtMjQuOS0yOC42LTM4LTU2LjMtMzEuNCAxMi04LjMgMjQuMy02LjMgMjQuMy02LjMgLjMtNi42IDAtMTMuNC05LjctMjUuNyA0LTEyLjkgLjMtMjMuMSAuMy0yMy4xIDE2LTguOSAyNy43LTI1LjIgMzAtNDQuNiAzLjctMzItMTkuNC02MS4xLTUxLjQtNjQuOC0yMi44LTIuNi00NS4xIDcuOS01Ni4xIDI2LjUtMjMuOSA0MS40IDEuNCA3My4yIDIzLjEgODQtMTQuOS0xLjQtMzUuNC0xMi4zLTQxLjQtMzUuNC02LjgtMjYuNSAyLjktNTEuNCA5LjItNjMuNCAwIDAtNC41LTYtOC4zLTkuMiAwIDAtMTQuMiAwLTI1LjQgNS41IDEyLjMtMTUuNyAyNi0xNC45IDI2LTE0LjkgMC02LjYtLjYtMTUuNC0zLjctMjIuMy01LjYtMTEuNC0yNC42LTEzLjMtMzIuNyAyLjkgLjEtLjIgLjMtLjQgLjQtLjUtNS4yIDEyLjMtMS4xIDU3LjcgMTcuNCA5MC0yLjYgMS40LTkuNCA2LjMtMTMuNCAxMC4zLTIyLjMgMTAtNTggNjIuMi01OCA2Mi4yLTI5LjEgMTEuMS03OS43IDUyLjUtNzIuOSA4Mi4zIC4zIDMuMSAxLjQgNS43IDMuMSA3LjctMi45IDIuMy01LjcgNS4yLTguNiA4LjYtMTIuMyAxNC4yLTUuNSAzNi4zIDE4LjMgMjUuMiAxNi4zLTcuNCAzMC42LTIwLjkgMzcuNS0zMS40IDAgMC01LjctNS4yLTE2LjgtNC41IDI4LjYtNi44IDM1LjQtOS43IDQ3LjctOS40IDguMyA0IDguMy0zNS40IDguMy0zNS40IDAtMTUuMi0yLjMtMzItMTEuNS00Mi44IDEyLjkgMTIuNiAzMCAzMy44IDI4LjkgNjIuNi0uOCAxOC45LTE1LjcgMjMuNy0xNS43IDIzLjctOS40IDE3LjEtNDQuNiA2OC0zMS40IDEwOS40IDAgMC0xMC0xNS40LTEwLjUtMjIuOC0xOCAyMC00OCA1NC0yNS40IDY2LjYgMjcuNSAxNS4yIDExMi4zLTkxLjUgMTMwLjMtMTQ2LjkgMzUuNy0yMS41IDU3LjItNDguOCA2Ni02Ny4xIDIyLjcgNDQuOSA5OC40IDk3LjUgMTA0LjQgNjAuOXoiXQogICAgfTsKICAgIGZhQXdzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImF3cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMzc1IiwgIk0xODAuNCAyMDNjLS43IDIyLjYgMTAuNiAzMi43IDEwLjkgMzktLjEgMS4zLS42IDIuNS0xLjMgMy42cy0xLjcgMi0yLjggMi42bC0xMi44IDljLTEuNyAxLjItMy42IDEuOC01LjYgMS45LS40IDAtOC4yIDEuOC0yMC41LTI1LjYtNy41IDkuNC0xNyAxNi45LTI3LjkgMjJzLTIyLjcgNy43LTM0LjcgNy41Yy0xNi4zIC45LTYwLjQtOS4yLTU4LjEtNTYuMi0xLjYtMzguMyAzNC4xLTYyLjEgNzAuOS02MCA3LjEgMCAyMS42IC40IDQ3IDYuM2wwLTE1LjZjMi43LTI2LjUtMTQuNy00Ny00NC44LTQzLjktMi40IDAtMTkuNC0uNS00NS44IDEwLjEtNy40IDMuNC04LjMgMi44LTEwLjggMi44LTcuNCAwLTQuNC0yMS41LTIuOS0yNC4yIDUuMi02LjQgMzUuOS0xOC40IDY1LjktMTguMiAyMC4xLTEuOCA0MC4xIDQuNCA1NS43IDE3LjMgNi4zIDcuMSAxMS4yIDE1LjQgMTQuMiAyNC40czQuMiAxOC41IDMuNSAyOGwwIDY5LjN6TTk0IDIzNS40YzMyLjQtLjUgNDYuMi0yMCA0OS4zLTMwLjUgMi41LTEwLjEgMi4xLTE2LjQgMi4xLTI3LjQtOS43LTIuMy0yMy42LTQuOS0zOS42LTQuOS0xNS4yLTEuMS00Mi44IDUuNi00MS43IDMyLjMtMS4yIDE2LjggMTEuMSAzMS40IDMwIDMwLjV6bTE3MC45IDIzLjFjLTcuOSAuNy0xMS41LTQuOS0xMi43LTEwLjRMMjAyLjQgODMuNGMtMS0yLjgtMS42LTUuNi0xLjktOC42LS4yLTEuMiAuMS0yLjQgLjgtMy40czEuOC0xLjYgMy0xLjhjLjIgMC0yLjEgMCAyMi4yIDAgOC44LS45IDExLjYgNiAxMi42IDEwLjRMMjc0LjkgMjIwLjggMzA4LjEgODBjLjUtMy4yIDIuOS0xMS4xIDEyLjgtMTAuMmwxNy4yIDBjMi4yLS4yIDExLjEtLjUgMTIuNyAxMC40TDM4NC4xIDIyMi43IDQyMSA4MC4xYy41LTIuMiAyLjctMTEuNCAxMi43LTEwLjRsMTkuNyAwYy45LS4xIDYuMi0uOCA1LjMgOC42LS40IDEuOCAzLjQtMTAuNy01Mi44IDE2OS45LTEuMSA1LjUtNC44IDExLjEtMTIuNyAxMC40bC0xOC43IDBjLTEwLjkgMS4yLTEyLjUtOS43LTEyLjctMTAuN2wtMzMuMi0xMzcuMS0zMi44IDEzN2MtLjIgMS4xLTEuNyAxMS45LTEyLjcgMTAuN2wtMTguMyAwIDAgMHptMjczLjUgNS42Yy01LjkgMC0zMy45LS4zLTU3LjQtMTIuMy0yLjMtMS00LjMtMi42LTUuNy00LjhzLTIuMS00LjYtMi4xLTcuMWwwLTEwLjdjMC04LjUgNi4yLTYuOSA4LjgtNS45IDEwIDQuMSAxNi41IDcuMSAyOC44IDkuNiAzNi43IDcuNSA1Mi44LTIuMyA1Ni43LTQuNSAxMy4yLTcuOCAxNC4yLTI1LjcgNS4zLTM0LjktMTAuNS04LjgtMTUuNS05LjEtNTMuMS0yMS00LjYtMS4zLTQzLjctMTMuNi00My44LTUyLjQtLjYtMjguMiAyNS01Ni4yIDY5LjUtNTYgMTIuNyAwIDQ2LjQgNC4xIDU1LjYgMTUuNiAxLjQgMi4xIDIgNC42IDEuOSA3bDAgMTAuMWMwIDQuNC0xLjYgNi43LTQuOSA2LjctNy43LS45LTIxLjQtMTEuMi00OS4yLTEwLjgtNi45LS40LTM5LjkgLjktMzguNCAyNS0uNCAxOSAyNi42IDI2LjEgMjkuNyAyNi45IDM2LjUgMTEgNDguNiAxMi44IDYzLjEgMjkuNiAxNy4xIDIyLjIgNy45IDQ4LjMgNC4zIDU1LjQtMTkuMSAzNy41LTY4LjQgMzQuNC02OS4zIDM0LjR6bTQwLjIgMTA0LjljLTcwIDUxLjctMTcxLjcgNzkuMi0yNTguNSA3OS4yLTExNy4xIC44LTIzMC4zLTQyLjMtMzE3LjMtMTIwLjctNi41LTUuOS0uOC0xNCA3LjItOS41IDk2LjUgNTUuMiAyMDUuNyA4NC4yIDMxNi45IDg0LjEgODMtLjQgMTY1LjEtMTcuMyAyNDEuNi00OS41IDExLjgtNSAyMS44IDcuOCAxMC4xIDE2LjR6bTI5LjItMzMuM2MtOS0xMS41LTU5LjMtNS40LTgxLjgtMi43LTYuOCAuOC03LjktNS4xLTEuOC05LjUgNDAuMS0yOC4yIDEwNS45LTIwLjEgMTEzLjQtMTAuNiA3LjUgOS41LTIuMSA3NS40LTM5LjYgMTA2LjktNS44IDQuOS0xMS4zIDIuMy04LjctNC4xIDguNC0yMS4zIDI3LjQtNjguNSAxOC40LTgweiJdCiAgICB9OwogICAgZmFHbGlkZUcgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2xpZGUtZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmE2IiwgIk00MDcuMSAyMTEuMmMtMy41LTEuNC0xMS42LTMuOC0xNS40LTMuOC0zNy4xIDAtNjIuMiAxNi44LTkzLjUgMzQuNWwtLjktLjljNy00Ny4zIDIzLjUtOTEuOSAyMy41LTE0MC40IDAtNzEuNS0zOC4yLTEwMC42LTEwOC40LTEwMC42LTExNS4xIDAtMTczLjQgMTEzLjctMTczLjQgMTk4LjQgMCA4Ny45IDUxLjMgMTM2LjYgMTM4LjYgMTM2LjYgMTIgMCAxMS0xIDExIDMuOC0xNi45IDEyOC45LTkwLjggMTMzLjEtOTAuOCA5NC42IDAtMzkuMiA0NS01OC42IDQ1LjUtNjEtLjMtMTIuMi00Ny0yNy42LTU4LjktMjcuNi0zMy45IC4xLTUyLjQgNTEuMi01Mi40IDc5LjMgMCA1MS45IDMyLjggODcuOSA4NS41IDg3LjkgNzcuNCAwIDEzNC03Ny44IDE1MS40LTE0NS40IDE1LjEtNjAuNSAxMS4yLTYzLjMgMTkuNy02Ny42IDMyLjItMTYuMiA1Ny41LTI3IDkzLjgtMjcgMTcuOCAwIDMwLjUgMy43IDU4LjkgOC40IDIuOSAwIDYuNy0yLjkgNi43LTUuOCAwLTgtMzMuNC02MC41LTQwLjktNjMuNHpNMjMxLjggMTI2LjhjLTkuMyA0NC43LTE4LjYgODkuNi0yNy44IDEzNC4zLTIuMyAxMC4yLTEzLjMgNy44LTIyIDcuOC0zOC4zIDAtNDktNDEuOC00OS03My4xIDAtNDcgMTgtMTA5LjMgNjEuOC0xMzMuNCA3LTQuMSAxNC44LTYuNyAyMi42LTYuNyAxOC42IDAgMjAgMTMuMyAyMCAyOC43LS4xIDE0LjMtMi43IDI4LjUtNS42IDQyLjR6Il0KICAgIH07CiAgICBmYUpzZmlkZGxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImpzZmlkZGxlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxY2MiLCAiTTUxMS4xIDIzNy41Yy00LjctMi42LTUuNy01LjctNi40LTEwLjgtMi40LTE2LjUtMy41LTMzLjYtOS4xLTQ5LjEtMzUuOS0xMDAtMTU0LTE0My40LTI0Ni44LTkxLjYtMjcuNCAxNS4yLTQ5IDM2LjQtNjUuNSA2My45LTMuMi0xLjUtNS41LTIuNy03LjgtMy43LTMwLjEtMTIuNC01OS0xMC4xLTg1LjMgOS4yLTI1LjUgMTguNy0zNi40IDQ0LjUtMzIuNyA3Ni40IC40IDMtMiA3LjYtNC41IDkuNS0zOS43IDMwLTU2IDc4LjEtNDEuOSAxMjQuNiAxMy44IDQ1LjYgNTcuNSA3OS44IDEwNS42IDgxLjQgMzAuMyAxIDYwLjYgLjUgOTEgLjUgODQgMCAxNjguMSAuNSAyNTIuMS0uNSA1Mi43LS42IDk2LjEtMzYuOSAxMDguMi04Ny4zIDExLjUtNDguMS0xMS4xLTk3LjMtNTYuOC0xMjIuNnptMjEuMSAxNTYuOWMtMTguMiAyMi40LTQyLjMgMzUuMy03MS4zIDM1LjctNTYuOSAuOC0xMTMuOCAuMi0xNzAuNyAuMiAwIC43LTE2MyAuMi0xNjMuNyAuMi00My45LS4zLTc2LjctMTkuOC05NS4yLTYwLTE4LjktNDEuMi00LTkwLjggMzQuMi0xMTYuMSA5LjItNi4xIDEyLjUtMTEuNiAxMC4xLTIzLjEtNS41LTI2LjQgNC41LTQ4IDI2LjQtNjMgMjMtMTUuNyA0Ny40LTE2LjEgNzItMy4xIDEwLjMgNS40IDE0LjYgMTEuNiAyMi4yLTIuNSAxNC4yLTI2LjQgMzQuNi00Ni43IDYwLjctNjEuMyA5Ny41LTU0LjQgMjI4LjQgNy42IDIzMC4yIDEzMi43IC4xIDguMiAyLjQgMTIuNCA5LjggMTUuOSA1Ny42IDI2LjggNzQuNSA5Ni4xIDM1LjEgMTQ0LjV6bS04Ny44LTgwLjVjLTUuOCAzMS4yLTM0LjYgNTUuMS02Ni43IDU1LjEtMTcgMC0zMi4xLTYuNS00NC4xLTE3LjctMjcuNy0yNS43LTcxLjEtNzUtOTUuOS05My40LTIwLjEtMTQuOS00Mi0xMi4zLTYwLjMgMy44LTUwIDQ0LjEgMTUuOSAxMjEuOCA2Ny4xIDc3LjIgNC41LTQgNy44LTkuNSAxMi43LTEyLjggOC4yLTUuNSAyMC44LS45IDEzLjIgMTAuNi0xNy40IDI2LjMtNDkuMyAzOC4yLTc4LjkgMjkuMy0yOC45LTguNy00OC44LTM2LTQ4LjYtNzAuMiAxLjItMjIuNSAxMi40LTQzLjEgMzUuNC01NiAyMi42LTEyLjYgNDYuNC0xMy4xIDY3IDIuNSA1MC44IDM4LjUgNzUuNiA4MS43IDEwNy4zIDEwMS4yIDI0LjYgMTUuMSA1NC4zIDcuNCA2OC44LTE3LjUgMjguOC00OS4yLTM0LjYtMTA1LTc4LjktNjMuNS00IDMuNy02LjkgOC45LTExLjQgMTEuNy0xMSA2LjgtMTcuMy00LjEtMTIuOC0xMC40IDIwLjctMjguNiA1MC41LTQwLjQgODMuMy0yOC4yIDMxLjQgMTEuNyA0OS4xIDQ0LjQgNDIuOCA3OC4yeiJdCiAgICB9OwogICAgZmFLZXliYXNlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImtleWJhc2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjRmNSIsICJNMjg2LjIgNDE5YTE4IDE4IDAgMSAwIDAgMzYgMTggMTggMCAxIDAgMC0zNnpNMzk4LjEgMjcxLjRjLTkuNS0xNC42LTM5LjQtNTIuNC04Ny4zLTczLjctNi4xLTIuNy0xMi4yLTUuMS0xOC40LTcuMyA0LjEtOS45IDYtMjAuNiA1LjgtMzEuNHMtMi43LTIxLjMtNy4yLTMxLjEtMTAuOS0xOC41LTE4LjktMjUuNy0xNy40LTEyLjYtMjcuNi0xNmMtMTIuNC00LjEtMjMuMy02LTMyLjQtNS44LS42LTItMS45LTExIDkuNC0zNWwtMjIuOS0xMy41LTUuNSA3LjZjLTguNyAxMi4xLTE2LjkgMjMuNi0yNC4zIDM0LjktMi43LS42LTUuNS0xLjEtOC4zLTEuMi00MS41LTIuNC0zOS0yLjMtNDEuMS0yLjMtNTAuNiAwLTUwLjggNTIuMS01MC44IDQ1LjlsLTIuNCAzNi43Yy0xLjYgMjcgMTkuOCA1MC4yIDQ3LjYgNTEuOGw4LjkgLjVDMTA2IDIxNS41IDkwLjQgMjI3LjUgNzYuNiAyNDEuNCAxNCAzMDQuNyAxNCAzNzQgMTQgNDI5LjhsMCAzMy42IDIzLjMtMjkuOGMzLjEgMTMuMSA4IDI1LjggMTQuNiAzNy42IDUuOCAxMC4xIDE0LjkgOS40IDE5LjYgNy4zIDQuMi0xLjkgMTAtNi45IDMuOC0yMC4xLTgtMTYuOC0xMy4zLTM0LjctMTUuOC01My4xbDQ2LjgtNTkuOC0yNC43IDc0LjFjNTguMi00Mi40IDE1Ny40LTYxLjggMjM2LjItMzguNiAzNC4yIDEwLjEgNjcuNCAuNyA4NC43LTIzLjggLjctMSAxLjItMi4yIDEuOC0zLjIgMS44IDkuNCAyLjcgMTguOSAyLjggMjguNCAwIDIzLjMtMy43IDUyLjktMTQuOSA4MS42LTIuNSA2LjUgMS44IDE0LjUgOC42IDE1LjcgNy40IDEuNiAxNS4zLTMuMSAxOC40LTExLjEgOS42LTI1LjUgMTQuNi01NC42IDE0LjYtODYuMiAwLTM4LjYtMTMtNzcuNS0zNS45LTExMC45ek0xNDIuNCAxMjguNmwtMTUuNy0uOS0xLjQgMjEuOCAxMy4xIC44Yy0uNiA2LjUtLjUgMTMuMSAuMyAxOS42bC0yMi40LTEuM2MtMS42LS4xLTMuMi0uNS00LjctMS4xcy0yLjgtMS42LTMuOS0yLjgtMS45LTIuNi0yLjUtNC4xLS44LTMuMS0uNy00LjdMMTA3IDExOWMxLTEyLjIgMTMuOS0xMS4zIDEzLjMtMTEuM2wyOS4xIDEuN2MtMi44IDYuMi01LjEgMTIuNi03IDE5LjJ6TTI5MC44IDMwMC44Yy0yLjEgMS42LTQuOCAyLjQtNy41IDIuMnMtNS4xLTEuNS02LjktMy41bC05LjctMTEuNS0zNC40IDI3Yy0xLjYgMS4zLTMuNyAxLjktNS44IDEuN3MtNC0xLjItNS4zLTIuOGwtMTUuOC0xOC42Yy0xLjItMS42LTEuNy0zLjUtMS41LTUuNHMxLjMtMy43IDIuOC00LjlsMzQuNi0yNy4yLTE0LjEtMTYuNy0xNy4xIDEzLjVjLTEuNiAxLjItMy41IDEuOC01LjUgMS42cy0zLjgtMS4xLTUuMS0yLjZjMCAwLTMuNy00LjQtMy44LTQuNS0xLjItMS42LTEuNy0zLjUtMS41LTUuNXMxLjMtMy43IDIuOC00LjlMMjE0IDIyNS4ycy0xOC41LTIyLTE4LjYtMjIuMWMtLjgtMS0xLjMtMi4xLTEuNy0zLjNzLS40LTIuNS0uMy0zLjcgLjYtMi40IDEuMi0zLjUgMS41LTIgMi41LTIuOGMyLjEtMS43IDQuOC0yLjQgNy40LTIuMnM1LjEgMS41IDYuOSAzLjZsODEuMSA5Ni4zYy44IDEgMS4zIDIuMSAxLjcgMy4zcy40IDIuNSAuMyAzLjctLjYgMi41LTEuMiAzLjUtMS41IDIuMS0yLjUgMi44ek0xODcuNCA0MTlhMTggMTggMCAxIDAgMCAzNiAxOCAxOCAwIDEgMCAwLTM2eiJdCiAgICB9OwogICAgZmFMdW1vbkRyb3AgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibHVtb24tZHJvcCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlN2UzIiwgIk00ODAgMzJjNTMgMCA5NiA0MyA5NiA5NmwwIDIyNGMwIDUzLTQzIDk2LTk2IDk2TDk2IDQ0OGMtNTMgMC05Ni00My05Ni05NkwwIDEyOEMwIDc1IDQzIDMyIDk2IDMybDM4NCAwek0zMDIuNCAxMTQuN2MtOS44LTE2LjQtMjAuNS0xNi40LTI5LjYgMGwtNjguOSAxMTRjLTEwLjcgMTUuNi0xNi40IDMyLjgtMTYuNCA1Mi41IDAgNTAuOSA0NC4zIDk0LjMgMTAwLjEgOTQuMyA1NSAwIDEwMC45LTQzLjUgMTAwLjktOTQuMyAwLTE5LjctNi42LTM3LjgtMTcuMi01Mi41bC02OC45LTExNHoiXQogICAgfTsKICAgIGZhV2VlYmx5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndlZWJseSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWNjIiwgIk00MjUuMSA2NS44Yy0zOS45IDAtNzMuMyAyNS43LTgzLjcgNjQuMy0xOC4yLTU4LjEtNjUuNS02NC4zLTg1LTY0LjMtMTkuOCAwLTY2LjggNi4zLTg1LjMgNjQuMy0xMC40LTM4LjYtNDMuNC02NC4zLTgzLjctNjQuMy00OSAwLTg3LjUgMzMuOS04Ny41IDc3LjIgMCAyOSA0LjIgMzMuMyA3Ny4yIDIzMy41IDIyLjQgNjAuNiA2Ny44IDY5LjQgOTIuNyA2OS40IDM5LjIgMCA3MC0xOS41IDg1LjktNTQgMTUuOSAzNC44IDQ2LjcgNTQuMyA4NS45IDU0LjMgMjUgMCA3MC40LTkuMSA5Mi43LTY5LjcgNzYuNi0yMDguNiA3Ny41LTIwNS42IDc3LjUtMjI3LjIgLjYtNDguMy0zNi04My41LTg2LjktODMuNXptMjYuMyAxMTQuOEwzODUuOSAzNTcuMWMtNy45IDIxLjUtMjEuMiAzNy4yLTQ2LjIgMzcuMi0yMy40IDAtMzcuNC0xMi40LTQ0LTMzLjlsLTM5LjMtMTE3LjQtMSAwLTM5LjMgMTE3LjRjLTcgMjEuNS0yMC45IDMzLjYtNDQgMzMuNi0yNSAwLTM4LjMtMTUuNy00Ni4yLTM3LjJMNjAuOSAxODEuNmMtNS40LTE0LjgtNy45LTIzLjktNy45LTM0LjUgMC0xNi4zIDE1LjgtMjkuNCAzOC4zLTI5LjQgMTguNyAwIDMyIDExLjggMzYuMSAyOS4xbDQ0IDEzOS44IDEgMCA0NC43LTEzNi44YzYtMTkuNyAxNi41LTMyLjEgMzktMzIuMXMzMi45IDEyLjEgMzkgMzIuMWw0NC43IDEzNi44IDEgMCA0NC0xMzkuOGM0LjEtMTcuMiAxNy40LTI5LjEgMzYuMS0yOS4xIDIyLjIgMCAzOC4zIDEzLjMgMzguMyAzNS43LS4zIDcuOS00LjEgMTYtNy42IDI3LjJ6Il0KICAgIH07CiAgICBmYURvY2tlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkb2NrZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjM5NSIsICJNMzQ5LjkgMjM2LjNsLTY2LjEgMCAwLTU5LjQgNjYuMSAwIDAgNTkuNHptMC0yMDQuM2wtNjYuMSAwIDAgNjAuNyA2Ni4xIDAgMC02MC43em03OC4yIDE0NC44bC02Ni4xIDAgMCA1OS40IDY2LjEgMCAwLTU5LjR6TTI3MS44IDEwNC43bC02Ni4xIDAgMCA2MC4xIDY2LjEgMCAwLTYwLjF6bTc4LjEgMGwtNjYuMSAwIDAgNjAuMSA2Ni4xIDAgMC02MC4xem0yNzYuOCAxMDBjLTE0LjQtOS43LTQ3LjYtMTMuMi03My4xLTguNC0zLjMtMjQtMTYuNy00NC45LTQxLjEtNjMuN2wtMTQtOS4zLTkuMyAxNGMtMTguNCAyNy44LTIzLjQgNzMuNi0zLjcgMTAzLjgtOC43IDQuNy0yNS44IDExLjEtNDguNCAxMC43bC00MzQuNyAwYy04LjcgNTAuOCA1LjggMTE2LjggNDQgMTYyLjEgMzcuMSA0My45IDkyLjcgNjYuMiAxNjUuNCA2Ni4yIDE1Ny40IDAgMjczLjktNzIuNSAzMjguNC0yMDQuMiAyMS40IC40IDY3LjYgLjEgOTEuMy00NS4yIDEuNS0yLjUgNi42LTEzLjIgOC41LTE3LjFsLTEzLjMtOC45ek0xMTUuNiAxNzYuOGwtNjYgMCAwIDU5LjQgNjYuMSAwIDAtNTkuNC0uMSAwem03OC4xIDBsLTY2LjEgMCAwIDU5LjQgNjYuMSAwIDAtNTkuNHptNzguMSAwbC02Ni4xIDAgMCA1OS40IDY2LjEgMCAwLTU5LjR6bS03OC4xLTcyLjFsLTY2LjEgMCAwIDYwLjEgNjYuMSAwIDAtNjAuMXoiXQogICAgfTsKICAgIGZhTWFnZW50byA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtYWdlbnRvIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYzQiLCAiTTQ0NS45IDEyNy45bDAgMjU2LjEtNjMuNCAzNi41IDAtMjU1LjgtMTU4LjUtOTEuNi0xNTguNiA5MS42IC40IDI1NS45LTYzLjMtMzYuNiAwLTI1NS45IDIyMS45LTEyOC4xIDIyMS41IDEyNy45ek0yNTUuOCA0MjAuNWwtMzEuNiAxOC40LTMxLjgtMTguMiAwLTI1Ni02My4zIDM2LjYgLjEgMjU1LjkgOTQuOSA1NC45IDk1LjEtNTQuOSAwLTI1Ni02My40LTM2LjYgMCAyNTUuOXoiXQogICAgfTsKICAgIGZhR2l0QWx0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdpdC1hbHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjg0MSIsICJNNDM5LjYgMjM2LjFMMjQ0IDQwLjVDMjM4LjYgMzUgMjMxLjIgMzIgMjIzLjYgMzJzLTE1IDMtMjAuNCA4LjRsLTQwLjcgNDAuNiA1MS41IDUxLjVjMjcuMS05LjEgNTIuNyAxNi44IDQzLjQgNDMuN2w0OS43IDQ5LjdjMzQuMi0xMS44IDYxLjIgMzEgMzUuNSA1Ni43LTI2LjUgMjYuNS03MC4yLTIuOS01Ni0zNy4zbC00Ni4zLTQ2LjMgMCAxMjEuOWMyNS4zIDEyLjUgMjIuMyA0MS44IDkuMSA1NS02LjQgNi40LTE1LjIgMTAuMS0yNC4zIDEwLjFzLTE3LjgtMy42LTI0LjMtMTAuMWMtMTcuNi0xNy42LTExLjEtNDYuOSAxMS4yLTU2bDAtMTIzYy0yMC44LTguNS0yNC42LTMwLjctMTguNi00NUwxNDIuNiAxMDEgOC41IDIzNS4xQzMgMjQwLjYgMCAyNDcuOSAwIDI1NS41czMgMTUgOC41IDIwLjRMMjA0LjEgNDcxLjZjNS40IDUuNCAxMi43IDguNCAyMC40IDguNHMxNS0zIDIwLjQtOC40TDQzOS42IDI3Ni45YzUuNC01LjQgOC40LTEyLjggOC40LTIwLjRzLTMtMTUtOC40LTIwLjR6Il0KICAgIH07CiAgICBmYUZpcmVmb3hCcm93c2VyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZpcmVmb3gtYnJvd3NlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDA3IiwgIk0xMzAuMiAxMjcuNWwwIDB6bTM1MS40IDQ1LjRjLTEwLjYtMjUuNS0zMi4xLTUzLTQ4LjktNjEuNyAxMy43IDI2LjkgMjEuNyA1My45IDI0LjcgNzQgMCAuMSAwIC4zIC4xIC40LTI3LjYtNjguOC03NC40LTk2LjUtMTEyLjYtMTU2LjgtMTUtMjMuNy0xMC45LTI1LjItMTMuMS0yNC43bC0uMSAuMWMtNDYuNyAyNi03NS4zIDc4LjQtODIuNiAxMjIuNy0xNi42IC45LTMyLjkgNS00Ny45IDEyLjEtMS40IC42LTIuNSAxLjctMy4xIDNzLS45IDIuOC0uNiA0LjNjLjIgLjggLjYgMS42IDEuMSAyLjNzMS4yIDEuMyAxLjkgMS43IDEuNiAuNyAyLjQgLjggMS43IDAgMi41LS4zbC41LS4yYzE1LjUtNy4zIDMyLjQtMTEuMiA0OS41LTExLjMgNjIuOC0uNiA5Ny4yIDQ0IDEwNy42IDYyLjMtMTMtOS4yLTM2LjQtMTguMi01OC44LTE0LjMgODcuNyA0My45IDY0LjIgMTk0LjUtNTcuNCAxODkuMi01OS41LTIuNi05Ny4xLTUxLTEwMC41LTkwLjggMCAwIDExLjItNDEuOSA4MC42LTQxLjkgNy41IDAgMjguOS0yMC45IDI5LjMtMjctLjEtMi00Mi41LTE4LjktNTkuMS0zNS4yLTguOC04LjctMTMuMS0xMi45LTE2LjgtMTYuMS0yLTEuNy00LjEtMy4zLTYuMy00LjgtNS42LTE5LjUtNS44LTQwLS43LTU5LjYtMjUuMSAxMS40LTQ0LjYgMjkuNC01OC43IDQ1LjRsLS4xIDBjLTkuNy0xMi4yLTktNTIuNi04LjQtNjEuMS0uMS0uNS03LjIgMy43LTguMiA0LjMtOC42IDYuMS0xNi41IDEyLjktMjMuOCAyMC40LTE2LjMgMTYuNi00NC4xIDUwLjItNTUuNSAxMDEuMi00LjUgMjAuNC02LjggNDQuNC02LjggNTIuMyAwIDEzNC43IDEwOS4yIDI0My45IDI0My45IDI0My45IDEyMC42IDAgMjIzLTg3LjIgMjQwLjQtMjAyLjYgMTEuNi03Ni43LTE0LjctMTMxLjEtMTQuNy0xMzJ6Il0KICAgIH07CiAgICBmYUNsb3Vkc21pdGggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2xvdWRzbWl0aCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzg0IiwgIk01MTIgMjI3LjZMNTEyIDI4NC41IDI4NC40IDUxMiAyMjcuNiA1MTIgMCAyODQuNCAwIDIyNy42IDIyNy42IDAgMjg0LjUgMCA1MTIgMjI3LjZ6bS0yNTYgMTYyYzE3LjggLjUgMzUuNi0yLjYgNTIuMi05LjFzMzEuOC0xNi4yIDQ0LjYtMjguNyAyMy0yNy4zIDI5LjktNDMuOCAxMC41LTM0LjEgMTAuNS01Mi0zLjYtMzUuNS0xMC41LTUyLTE3LjEtMzEuMy0yOS45LTQzLjgtMjgtMjIuMi00NC42LTI4LjctMzQuNC05LjYtNTIuMi05LjFjLTE3LjgtLjUtMzUuNiAyLjYtNTIuMiA5LjFzLTMxLjggMTYuMy00NC42IDI4LjctMjMgMjcuMy0yOS45IDQzLjgtMTAuNSAzNC4xLTEwLjUgNTIgMy42IDM1LjUgMTAuNSA1MiAxNy4xIDMxLjMgMjkuOSA0My44IDI4IDIyLjIgNDQuNiAyOC43IDM0LjQgOS42IDUyLjIgOS4xeiJdCiAgICB9OwogICAgZmFXaXphcmRzT2ZUaGVDb2FzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3aXphcmRzLW9mLXRoZS1jb2FzdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNzMwIiwgIk0yMTkuMiAzNDUuN2MtMS45IDEuNC0xMS4xIDguNC0uMyAyMy42IDQuNiA2LjQgMTQuMSAxMi44IDIxLjcgNi42IDYuNS00LjkgNy40LTEyLjkgLjMtMjMtNS41LTcuOC0xNC4zLTEyLjktMjEuNy03LjF6bTMzNi44IDc1LjljLS4zIDEuNy0uNiAxLjcgLjggMCAyLjEtNC4yIDQuMi0xMC4yIDUtMTkuOSAzLjEtMzguNS00MC4zLTcxLjUtMTAxLjMtNzgtNTQuNy02LTEyNC40IDkuMi0xODguOCA2MC41bC0uMyAxLjZjMi42IDUgNSAxMC43IDMuNCAyMS4ybC44IC4zYzYzLjktNTguNCAxMzEuMi03Ny4yIDE4NC40LTczLjggNTguNCAzLjcgMTAwIDM0IDEwMCA2OC4xIDAgMTAtMi42IDE1LjctMy45IDIwLjJ6TTM5Mi4zIDI0MC40Yy44IDcuMSA0LjIgMTAuMiA5LjIgMTAuNSA1LjUgLjMgOS40LTIuNiAxMC41LTYuNiAuOC0zLjQgMi4xLTI5LjggMi4xLTI5LjhTNDAyLjggMjIxIDM5OS4xIDIyNWMtMy43IDMuNy03LjMgOC40LTYuOCAxNS41em0tNTAtMTUxLjFjLTIwNC41IDAtMzI5LjIgMTM3LjUtMzQxLjUgMTUxLjktMSAuNS0xLjMgLjggLjggMS4zIDYwLjUgMTYuNSAxNTUuOCA4MS4yIDE5Ni4xIDIwMi4ybDEgLjNjNTUuMi02OS45IDE0MC45LTEyOC4xIDIzNy0xMjguMSA4MC45IDAgMTMwLjIgNDIuMiAxMzAuMiA4MC40IDAgMTguMy02LjYgMzMuNS0yMi4zIDQ2LjMgMCAxLS4yIC44IC44IC44IDE0LjctMTAuNyAyNy41LTI4LjggMjcuNS00OC4yIDAtMjIuOC0xMi4xLTM4LjItMTIuMS0zOC4yIDcuMSA3LjEgMTAuNyAxNi4yIDEwLjcgMTYuMiA1LjgtNDAuOSAyNy02Mi4zIDI3LTYyLjMtMi40LTkuNy02LjgtMTcuOC02LjgtMTcuOCA3LjYgOC4xIDE0LjQgMjcuNSAxNC40IDQxLjQgMCAxMC41LTMuNCAyMi44LTEyLjYgMzEuOWwuMyAuNWM4LjEtNSAxNi41LTE2LjggMTYuNS0zOCAwLTE1LjctNC43LTI1LjktNC43LTI1LjkgNS44LTUuMiAxMS4zLTkuMiAxNi0xMS44IC44IDMuNCAyLjEgOS43IDIuNCAxNC45IDAgMSAuOCAxLjggMSAwIC44LTUuOC0uMy0xNi4yLS4zLTE2LjUgNi0zLjEgOS43LTQuNSA5LjctNC41LTE1LjctMTEwLjMtMTQ0LTE5Ni45LTI5MS4yLTE5Ni45ek0yNDMgMzc4LjljLTExLjEgOS0yNC4yIDQuMS0zMC42LTQuMi03LjQtOS42LTYuOC0yNC4xIDQuMi0zMi41IDE0LjgtMTEuNCAyNy4xLS41IDMxLjIgNS41IC4zIC40IDEyLjEgMTYuNi00LjcgMzEuMnptMi4xLTEzNi40bDkuNC0xNy44IDExLjggNzEtMTIuNiA2LTI0LjYtMjguOCAxNC4xLTI2LjcgMy43IDQuNC0xLjgtOC4xem0xOC42IDExNy42bC0uMy0uM2MyLTQuMS0yLjUtNi42LTE3LjUtMzEuNy0xLjMtMi40LTMuMS0yLjktNC40LTIuNmwtLjMtLjVjNy45LTUuOCAxNS40LTEwLjIgMjUuNC0xNS43bC41IC4zYzEuMyAxLjggMi4xIDIuOSAzLjQgNC43bC0uMyAuNWMtMS0uMy0yLjQtLjgtNS4yIC4zLTIuMSAuOC03LjkgMy43LTEyLjMgNy42bDAgMS4zYzEuNiAyLjQgMy45IDYuNiA1LjggOS43bC4zIDBjMTAtNi4zIDcuNi00LjUgMTEuNS03LjlsLjMgMGMuNSAxLjggLjUgMS44IDEuOCA1LjVsLS4zIC4zYy0zLjEgLjYtNC43IC4zLTExLjUgNS41bDAgLjNjOS41IDE3IDExIDE2LjggMTIuNiAxNmwuMyAuM2MtMi4zIDEuNi02LjMgNC4yLTkuNyA2LjZ6TTMxOSAzMjcuNmMtMy4xIDEuNi02IDIuOS0xMCA1bC0uMy0uM2MxLjMtMi42IDEuMi0yLjctMTEuOC0zMi41bC0uMy0uM2MtLjIgMC04LjkgMy43LTEwIDcuM2wtLjUgMC0xLTUuOCAuMy0uNWM3LjMtNC42IDI1LjUtMTEuNiAyNy44LTEyLjZsLjUgLjMgMy4xIDUtLjMgLjVjLTMuNS0xLjgtNy40IC44LTEyLjMgMi42bDAgLjNjMTIuMyAzMiAxMi43IDMwLjYgMTQuNyAzMC42bDAgLjJ6bTQ0LjgtMTYuNWMtNC4yIDEtNS4yIDEuMy05LjcgMi45bC0uMy0uMyAuNS00LjVjLTEtMy40LTMuMS0xMS41LTMuNy0xMy42bC0uMy0uM2MtMy40IC44LTguOSAyLjYtMTIuOCAzLjlsLS4zIC4zYy44IDIuNiAzLjEgOS45IDQuMiAxMy45IC44IDIuNCAxLjggMi45IDIuOSAzLjFsMCAuNWMtMy43IDEtNy4xIDIuNi0xMC4yIDMuOWwtLjMtLjNjMS0xLjMgMS0yLjkgLjMtNS0xLTMuMS04LjEtMjMuOC05LjItMjcuMi0uNS0xLjgtMS42LTMuMS0yLjYtMy4xbDAtLjVjMy4xLTEgNi0yLjEgMTAuNy0zLjRsLjMgLjMtLjMgNC43YzEuMyAzLjkgMi40IDcuNiAzLjEgOS43bC4zIDBjMy45LTEuMyA5LjQtMi45IDEyLjgtMy45bC4zLS4zLTIuNi05LjRjLS41LTEuOC0xLTMuNC0yLjYtMy45bDAtLjNjNC40LTEgNy4zLTEuOCAxMC43LTIuNGwuMyAuM2MtMSAxLjMtMSAyLjktLjUgNC40IDEuNiA2LjMgNC43IDIwLjQgNi4zIDI2LjUgLjUgMi42IDEuOCAzLjQgMi42IDMuOXptMzIuMi02LjhsLS4zIC4zYy00LjcgLjUtMTQuMSAyLjQtMjIuNSA0LjJsLS4zLS4zIC44LTQuMmMtMS42LTcuOS0zLjQtMTguNi01LTI2LjItLjMtMS44LS44LTIuOS0yLjYtMy43bC44LS41YzkuMi0xLjYgMjAuMi0yLjQgMjQuOS0yLjZsLjMgLjNjLjUgMi40IC44IDMuMSAxLjYgNS41bC0uMyAuM2MtMS4xLTEuMS0zLjMtMy4yLTE2LjItLjhsLS4zIC4zYy4zIDEuNiAxIDYuNiAxLjYgOS45bC4zIC4zYzkuNS0xLjcgNC44LS4xIDEwLjctMi40bC4zIDBjMCAxLjYtLjMgMS44LS4zIDUuMmwtLjMgMGMtNC44LTEtMi4yLS45LTEwLjIgMGwtLjMgLjNjLjMgMi4xIDEuNiA5LjQgMi4xIDEyLjZsLjMgLjNjMS4yIC40IDE0LjItLjYgMTYuMi00LjdsLjMgMGMtLjUgMi40LTEgNC4yLTEuNiA2em0xMC43LTQ0LjVjLTQuNSAyLjQtOC4xIDIuOS0xMSAyLjktLjIgMC0xMS40IDEuMS0xNy41LTEwLTYuNy0xMC44LTEtMjUuMiA1LjUtMzEuNyA4LjgtOC4xIDIzLjQtMTAuMSAyOC41LTE3IDgtMTAuMy0xMy0yMi4zLTI5LjYtNS44bC0yLjYtMi45IDUuMi0xNi4yYzI1LjYtMS42IDQ1LjItMyA1MCAxNi4yIC44IDMuMSAwIDkuNC0uMyAxMi4xIDAgMi42LTEuOCAxOC44LTIuMSAyMy0uNSA0LjItLjggMTguMy0uOCAyMC43IC4zIDIuNCAuNSA0LjIgMS42IDUuNSAxLjYgMS44IDUuOCAxLjggNS44IDEuOGwtLjggNC43Yy0xMS44LTEuMS0xMC4zLS42LTIwLjQtMS0zLjItNS4xLTIuMi0zLjMtNC4yLTcuOSAwIDAtNC4yIDMuOS03LjMgNS41ek00NDMuOSAyODFjLTYuNC0xMC42LTE5LjgtNy4yLTIxLjcgNS41LTIuNiAxNy4xIDE0LjMgMTkuOCAyMC43IDEwLjJsLjMgLjNjLS41IDEuOC0xLjggNi0xLjggNi4zbC0uNSAuNWMtMTAuMyA2LjktMjguNS0yLjUtMjUuNy0xOC42IDEuOS0xMC45IDE0LjQtMTguOSAyOC44LTkuOWwuMyAuNWMwIDEuMS0uMyAzLjQtLjMgNS4zem01LjgtODcuN2wwLTYuNmMuNyAwIDE5LjYgMy4zIDI3LjggNy4zbC0xLjYgMTcuNXMxMC4yLTkuNCAxNS40LTEwLjdjNS4yLTEuNiAxNC45IDcuMyAxNC45IDcuM2wtMTEuMyAxMS4zYy0xMi4xLTYuNC0xOS42LS4xLTIwLjcgLjgtNS4zIDM4LjctOC42IDQyLjIgNC40IDQ2LjFsLS41IDQuN2MtMTcuNi00LjMtMTguNS00LjUtMzYuOS03LjNsLjgtNC43YzcuMyAwIDcuNS01LjMgNy42LTYuOCAwIDAgNS01My4yIDUtNTUuMyAwLTIuOS01LTMuNy01LTMuN3ptMTEgMTE0LjRjLTguMS0yLjEtMTQuMS0xMS0xMC43LTIwLjcgMy4xLTkuNCAxMi4zLTEyLjMgMTguOS0xMC4yIDkuMiAyLjYgMTIuOCAxMS44IDEwLjcgMTkuNC0yLjYgOC45LTkuNCAxMy45LTE4LjkgMTEuNXptNDIuMiA5LjdjLTIuNC0uNS03LjEtMi40LTguNi0yLjlsMC0uMyAxLjYtMS44Yy42LTguMiAuNi03LjMgLjMtNy42LTQuOC0xLjgtNi43LTIuNC03LjEtMi40LTEuMyAxLjgtMi45IDQuNS0zLjcgNS41bC0uOCAzLjQgMCAuM2MtMS4zLS4zLTMuOS0xLjMtNi0xLjZsMC0uMyAyLjYtMS44YzMuNC00LjcgMTAtMTQuMSAxMy45LTIwLjJsMC0yLjEgLjUtLjNjMi4xIC44IDUuNSAyLjEgNy42IDIuOSAuNSAuNSAuMi0xLjktMSAyNS4xLS4yIDEuOCAwIDIuNiAuOCAzLjl6bS00LjctODkuOGMxMS4zLTE4LjMgMzAuOC0xNi4yIDM0LTMuNGw3LjYtMjYuMmMyLjMtNi4yLTIuOC05LjktNC41LTExLjNsMS44LTMuN2MxMi4yIDEwLjQgMTYuNCAxNCAyMi41IDIwLjQtMjUuOSA3My4xLTMwLjggODAuOC0yNC42IDg0LjNsLTEuOCA0LjRjLTYuNC0zLjMtOC45LTQuNC0xNy44LTguNmwyLjEtNi44Yy0uMy0uMy0zLjkgMy45LTkuNyAzLjctMTkuMS0xLjMtMjIuOS0zMS43LTkuNy01Mi45em0yOS4zIDc5LjNjMC01LjctNi4zLTcuOS03LjktNS4yLTEuMyAyLjEgMSA1IDIuOSA4LjQgMS42IDIuNiAyLjYgNi4zIDEgOS40LTIuNiA2LjMtMTIuNCA1LjMtMTUuNC0uOCAwLS43LS4zIC4xIDEuOC00LjdsLjgtLjNjLS42IDUuNyA2LjEgOS42IDguNCA1IDEtMi4xLS41LTUuNS0yLjEtOC40LTEuNi0yLjYtMy43LTYuMy0xLjgtOS43IDIuNy01LjEgMTEuMy00LjUgMTQuNyAyLjRsMCAuNS0yLjQgMy40em0yMS4yIDEzLjRjLTItMy4zLS45LTIuMS00LjUtNC43bC0uMyAwYy0yLjQgNC4yLTUuOCAxMC41LTguNiAxNi4yLTEuMyAyLjQtMSAzLjQtLjggMy45bC0uMyAuMy01LjgtNC40IC4zLS4zIDIuMS0xLjNjMy4xLTUuOCA2LjYtMTIuMSA5LjItMTdsMC0uM2MtMi42LTItMS4yLTEuNS02LTEuOGwwLS4zIDMuMS0zLjQgLjMgMGMzLjcgMi40IDEwIDYuOCAxMi4zIDguOWwuMyAuMy0xLjMgMy45ek01NzUuOCAyNzZsLTIuOS0yLjljLjgtMi40IDEuOC01IDIuMS03LjYgLjctOS43LTExLjUtMTEuOC0xMS41LTUgMCA1IDcuOSAxOS40IDcuOSAyNy44IDAgMTAuMi01LjggMTUuNy0xMy45IDE2LjUtOC40IC44LTIwLjItMTAuNS0yMC4yLTEwLjVsNS0xNC40IDIuOSAyLjFjLTMgMTcuOCAxNy43IDIwLjQgMTMuMyA1LjItMS4xLTQtMTguNy0zNC4yIDIuMS0zOC4yIDEzLjYtMi40IDIzIDE2LjUgMjMgMTYuNUw1NzUuOCAyNzZ6bTM1LjYtMTAuMmMtMTEtMzAuNC02MC41LTEyNy41LTE5Mi0xMjkuNi01My40LTEtOTQuMyAxNS40LTEzMi44IDM4bDg1LjYtOS4yLTkxLjQgMjAuNyAyNS4xIDE5LjYtMy45LTE2LjVjNy41LTEuNyAzOS4xLTguNSA2Ni44LTguOWwtMjIuMyA4MC40YzEzLjYtLjcgMTktOSAxOS42LTIyLjhsNS0xIC4zIDI2LjdjLTIyLjUgMy4yLTM3LjMgNi43LTQ5LjUgOS45bDEzLjEtNDMuMi02MS41LTM2LjcgMi40IDguMSAxMC4yIDVjNi4zIDE4LjYgMTkuNCA1Ni42IDIwLjQgNTguNyAyIDQuMyAzLjIgNS44IDEyIDQuNWwxLjEgNWMtMTYuMSA0LjktMjMuNyA3LjYtMzkgMTQuNGwtMi40LTQuN2M0LjQtMi45IDguNy0zLjkgNS41LTEyLjgtMjMuNy02Mi41LTIxLjUtNTguMS0yMi44LTU5LjRsMi40LTQuNCAzMy41IDY3LjNjLTMuOC0xMS45IDEuNyAxLjctMzMtNzguOGwtNDEuOSA4OC41IDQuNy0xMy45LTM1LjktNDIuMiAyNy44IDkzLjUtMTEuOCA4LjRjLTExMS45LTEwMS43LTEwNS44LTk4LjQtMTEzLjctOTguNy01LjUtLjMtMTMuNiA1LjUtMTMuNiA1LjVsLTUtNmMzMC42LTIzLjUgMzEuNi0yNC4zIDU4LjQtNDIuN2w0LjIgNy4xcy01LjggNC4yLTcuOSA3LjFjLTUuOSA5LjMgMS43IDEzLjMgNjEuOCA3NS43bC0xOC44LTU4LjkgMzkuOC0xMC4yIDI1LjcgMzAuNiA0LjQtMTIuMy01LTI0LjYgMTMuMS0zLjQgLjUgMy4xIDMuNy0xMC41LTk0LjMgMjkuMyAxMS4zLTUtMTMuNi00Mi40IDE3LjMtOS4yIDMwLjEgMzYuMSAyOC41LTEzLjFjLTEuNC03LjUtMi41LTE0LjUtNC43LTE5LjZsMTcuMyAxMy45IDQuNy0yLjEtNTkuMi00Mi43IDIzLjEgMTEuNWMxOS02LjEgMjUuMi03LjUgMzIuMi05LjdsMi42IDExYy0xMi42IDEyLjYgMS40IDE2LjggNi41IDE5LjRsLTEzLjYtNjEgMTIgMjguM2M0LjItMS4zIDcuMy0yLjEgNy4zLTIuMWwyLjYgOC42cy0zLjEgMS02LjMgMi4xbDguOSAyMSAzMy44LTY1LjctMjAuNyA2MWM0Mi40LTI0LjEgODEuNC0zNi43IDEzMi0zNS45IDY3IDEgMTY3LjMgNDAuOCAxOTkuOCAxMzkuOCAuOCAyLjEgMCAyLjYtLjggLjN6bS00MDgtMTEzLjRzMS44LS41IDQuMi0xLjNsOS40IDcuNmMtLjQgMC0zLjQtLjMtMTEuMyAyLjRsLTIuNC04LjZ6bTE0My44IDM4LjVjLTEuNi0uNi0yNi41LTQuOC0zMy4zIDIwLjdsMjEuNyAxNyAxMS41LTM3Ljd6TTMxOC40IDY3LjFjLTU4LjQgMC0xMDYuMSAxMi0xMTUgMTQuNGwwIC44YzguNCAyLjEgMTQuNCA0LjIgMjEuMiAxMS44bDEuNiAuM2M2LjYtMS44IDQ5LTEzLjkgMTEwLjItMTMuOSAxODAuMiAwIDMwMS43IDExNi44IDMwMS43IDIyMy40bDAgMTBjMCAxLjMgLjggMi42IDEuMSAuNSAuNS0yLjEgLjgtOC42IC44LTE5LjYgLjMtODMuOC05Ni42LTIyNy42LTMyMS42LTIyNy42ek01MjkuNSAyMzYuOGMxLjMtNS44IDAtMTIuMy03LjMtMTMuMS05LjYtMS4xLTE2LjEgMjMuOC0xNyAzMy41LS44IDUuNS0xLjMgMTQuOSA2IDE0LjkgNC43IDAgOS43LS45IDE4LjMtMzUuNHpNNDY4IDI3OS43Yy0yLjYtLjgtOS40LS44LTEyLjYgMTAuNS0xLjggNi44IC41IDEzLjQgNiAxNC43IDMuNyAxLjEgOC45IC41IDExLjgtMTAuNyAyLjYtOS45LTEuOC0xMy42LTUuMi0xNC40em0yMyAyMWMxLjggLjUgMy4xIDEgNS44IDEuOCAwLTEuOCAuNS04LjQgLjgtMTIuMS0xIDEuMy01LjUgOC4xLTYuNiAxMGwwIC4zeiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNOZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLW5kIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZWIiLCAiTTI1NS42IDhDMzk3LjQgOCA1MDQgMTE4LjEgNTA0IDI1NiA1MDQgNDAzLjEgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuNiA1MDQgOCAzOTQuNSA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHptLjggNDQuN2MtMTE4LjIgMC0yMDMuNyA5Ny45LTIwMy43IDIwMy4zIDAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjggLjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3ptOTQgMTQ0LjNsMCA0Mi41LTE4MC4zIDAgMC00Mi41IDE4MC4zIDB6bTAgNzkuOGwwIDQyLjUtMTgwLjMgMCAwLTQyLjUgMTgwLjMgMHoiXQogICAgfTsKICAgIGZhVXNwcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1c3BzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ZTEiLCAiTTQyOC4zIDI0MS43YzI1LjgtNDEuMyAxNS4yLTQ4LjgtMTEuNy00OC44bC0yNyAwYy0uMSAwLTEuNS0xLjQtMTAuOSA4LTExLjIgNS42LTM3LjkgNi4zLTM3LjkgOC43IDAgNC41IDcwLjMtMy4xIDg4LjEgMCA5LjUgMS41LTEuNSAyMC40LTQuNCAzMi0uNSA0LjUgMi40IDIuMyAzLjggLjF6TTMxNi4yIDI2NC4zYzY0LTIxLjMgOTcuMy0yMy45IDEwMi0yNi4yIDQuNC0yLjktNC40LTYuNi0yNi4yLTUuOC01MS43IDIuMi0xMzcuNiAzNy4xLTE3Mi42IDUzLjlsLTMwLjctOTMuMyAxOTYuNiAwYy0yLjctMjguMi0xNTIuOS0yMi42LTMzNy45LTIyLjZMLTUgNDE1LjhjMTk2LjQtOTcuMyAyNTguOS0xMzAuMyAzMjEuMi0xNTEuNXpNNjIuNyA5NmMyNTMuMyA1My43IDMzMCA2NS43IDMzMi4xIDg1LjIgMzYuNCAwIDQ1LjkgMCA1Mi40IDYuNiAyMS4xIDE5LjctMTQuNiA2Ny43LTE0LjYgNjcuNy00LjQgMi45LTQwNi40IDE2MC4yLTQwNi40IDE2MC4yTDQ0OS4zIDQxNS43IDUxNyA5NiA2Mi43IDk2eiJdCiAgICB9OwogICAgZmFTcXVhcmVMZXR0ZXJib3hkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1sZXR0ZXJib3hkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2MmUiLCAiTTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTEwNS4xIDE4N0M2Ni40IDE4NyAzNSAyMTguMyAzNSAyNTdzMzEuNCA3MCA3MC4xIDcwYzI0LjggMCA0Ni41LTEyLjggNTktMzIuMmwuNS0uNy0uNC0uNmMtNi41LTEwLjYtMTAuMi0yMy4xLTEwLjItMzYuNSAwLTEzLjYgMy45LTI2LjMgMTAuNi0zNy4xLTEyLjQtMTkuOC0zNC40LTMyLjktNTkuNS0zMi45ek0yMjQgMTg3Yy0yNC44IDAtNDYuNSAxMi44LTU5IDMyLjJsLS41IC43IC40IC42YzYuNSAxMC42IDEwLjIgMjMuMSAxMC4yIDM2LjUgMCAxMy42LTMuOSAyNi4zLTEwLjYgMzcuMSAxMi40IDE5LjcgMzQuNCAzMi45IDU5LjUgMzIuOSAyNC44IDAgNDYuNS0xMi44IDU5LTMyLjJsLjUtLjctLjQtLjZjLTYuNS0xMC42LTEwLjItMjMuMS0xMC4yLTM2LjUgMC0xMy42IDMuOS0yNi4zIDEwLjYtMzcuMS0xMi40LTE5LjctMzQuNC0zMi45LTU5LjUtMzIuOXptMTE4LjkgMGMtMjQuOCAwLTQ2LjUgMTIuOC01OSAzMi4ybC0uNSAuNyAuNCAuNmM2LjUgMTAuNiAxMC4yIDIzLjEgMTAuMiAzNi41IDAgMTMuNi0zLjkgMjYuMy0xMC42IDM3LjEgMTIuNCAxOS44IDM0LjQgMzIuOSA1OS41IDMyLjkgMzguNyAwIDcwLjEtMzEuMyA3MC4xLTcwcy0zMS40LTcwLTcwLjEtNzB6Il0KICAgIH07CiAgICBmYU1hbmRhbG9yaWFuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1hbmRhbG9yaWFuIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1MGYiLCAiTTIwMC42IDUxMS45Yy0xLTMuMy0xLjctMTUuOC0xLjQtMjQuNiAuNi0xNS45IDEtMjQuNyAxLjQtMjguOCAuNi02LjIgMi45LTIwLjcgMy4zLTIxLjQgLjYtMSAuNC0yNy45LS4yLTMzLjEtLjMtMi42LS42LTExLjktLjctMjAuNy0uMS0xNi41LS41LTIwLjEtMi43LTI0LjgtMS4xLTIuMy0xLjItMy44LTEtMTEuNCAuMi00LjIgLjEtOC41LS4zLTEyLjctMi0xMy0zLjUtMjcuNy0zLjItMzMuOXMuNC03LjEgMi4xLTkuN2MzLjEtNC43IDYuNS0xNCA4LjYtMjMuMyAyLjMtOS45IDMuOS0xNy4yIDQuNi0yMC43IDEuMS01LjEgMi42LTEwLjEgNC40LTE1LjEgMi4zLTYuMiAyLjUtMTUuNCAuNC0xNS40LS4zIDAtMS40IDEuMi0yLjQgMi43cy00LjggNC44LTguMyA3LjRjLTguNCA2LjEtMTEuNyA5LjQtMTIuNyAxMi42cy0xIDcuMi0uMiA3LjhjLjMgLjIgMS4zIDIuNCAyLjEgNC45IDEuNiA1IDEuOSAxMC4zIC43IDE1LjQtLjQgMS44LTEgNS41LTEuNSA4LjJzLTEgNi41LTEuMyA4LjJjLS4yIDEuNS0uNyAzLTEuNSA0LjMtMSAxLTEuMSAuOS0yLjEtLjUtLjctMS41LTEuMi0zLjEtMS40LTQuNy0uMi0xLjctMS42LTcuMS0zLjEtMTEuOS0zLjMtMTAuOS0zLjUtMTYuMi0xLTIxIC44LTEuNCAxLjQtMyAxLjctNC42IDAtMi40LTIuMi01LjMtNy40LTkuOS03LTYuMi04LjYtNy45LTEwLjItMTEuMy0xLjctMy42LTMuMS00LjEtNC41LTEuNS0xLjggMy0yLjYgOS4xLTMgMjJsLS4zIDEyLjIgMiAyLjJjMy4yIDMuNyAxMi4xIDE2LjUgMTMuOCAxOS44IDMuNCA2LjcgNC4zIDExLjcgNC40IDIzLjZzMSAyMi44IDIgMjQuN2MuNCAuNyAuNSAxLjQgLjMgMS41cy40IDIuMSAxLjMgNC4zYzEgMi45IDEuNyA1LjkgMi4xIDkgLjQgMy41IC45IDcgMS43IDEwLjQgMi4yIDkuNiAyLjggMTQuMSAyLjQgMjAuMS0uMiAzLjMtLjUgMTEuMS0uNyAxNy4zLTEuMyA0MS44LTEuOCA1OC0yIDYxLjItLjEgMi0uNCAxMS41LS42IDIxLjEtLjQgMTYuMy0xLjMgMjcuNC0yLjQgMjguNi0uNiAuNy04LjEtNC45LTEyLjUtOS41LTMuOC0zLjktNC00LjgtMi44LTkuOSAuNy0zIDIuMy0xOC4zIDMuMy0zMi42IC40LTQuOCAuOC0xMC41IDEtMTIuNyAuOC05LjQgMS43LTIwLjMgMi42LTM0LjggLjYtOC41IDEuMy0xNi40IDEuNy0xNy43cy45LTkuOSAxLjEtMTkuMWwuNC0xNi44LTIuMy00LjNjLTEuNy0zLjMtNC45LTYuOS0xMy4yLTE1LjMtNi02LjEtMTEuOC0xMi4zLTEyLjktMTMuOGwtMi0yLjggLjgtMTAuOWMxLjEtMTUuNyAxLjEtNDguNiAwLTU5LjFsLS45LTguNy0zLjMtNC41Yy01LjktOC4xLTUuOC03LjctNi4yLTMzLjMtLjEtNi4xLS40LTExLjUtLjYtMTIuMS0uOC0xLjktMy0yLjctOC41LTMtOC45LS42LTExLTEuOS0yMy44LTE0LjYtNi4yLTYtMTIuMy0xMi0xMy44LTEzLjItMi44LTIuNC0yLjgtMi0uNi05LjZsMS40LTQuNi0xLjctM2MtLjgtMS40LTEuNi0yLjgtMi42LTQuMS0xLjMtMS41LTUuNS0xMC45LTYtMTMuNS0uMi0uNy0uMi0xLjQtLjEtMi4xcy41LTEuMyAuOS0xLjhjMi4yLTIuOSAzLjQtNS43IDQuNS0xMC43IDIuMy0xMS4yIDcuNy0yNi4xIDEwLjYtMjkuMiAzLjItMy41IDcuNy0xIDkuNCA1IDEuMyA0LjggMS40IDkuOCAuMSAxOC42LS41IDMuNy0uOSA3LjQtMSAxMS4xIDAgNCAuMiA0LjcgMi4zIDcuNCAzLjMgNC40IDcuNyA3LjQgMTUuMiAxMC41IDEuNyAuNyAzLjMgMS43IDQuNyAyLjggMTEuMiAxMC43IDE4LjYgMTYuMiAyMi45IDE2LjkgNS4yIC44IDggNC41IDEwIDEzLjQgMS4zIDUuNyA0IDExLjEgNS41IDExLjEgMS4yLS4yIDIuMy0uNyAzLjMtMS40IDItMS4yIDIuMi0xLjcgMi4yLTQuMi0uMy02LS45LTExLjktMi0xNy44LS40LTEuNy0uOC00LjEtLjktNS40cy0uNi0zLjgtMS01LjdjLTIuNi0xMS4yLTMuNi0xNS41LTQuMS0xNi0xLjYtMi00LjEtMTAuMi00LjktMTUuOS0xLjYtMTEuMS00LTE0LjItMTIuOS0xNy40LTQuOS0xLjgtOS40LTQuNS0xMy4zLTcuOS0xLjItMS00LTMuMi02LjQtNS4xcy00LjQtMy41LTQuNi0zLjhjLS44LS43LTEuNy0xLjQtMi43LTItNi4yLTQuMi04LjgtNy0xMS4zLTEybC0yLjQtNWMtLjEtOC43LS4zLTE3LjMtLjQtMjZsNi45LTYuNmM0LTMuOCA4LjUtNy40IDEwLjYtOC40IDMuMy0xLjcgNC40LTEuOSAxMS40LTIgOC41LS4yIDEwLjEgMCAxMS43IDEuNnMxLjQgNi40LS4zIDguNWMtLjYgLjctMS4xIDEuNS0xLjMgMi4zIDAgLjYtMi42IDQuOS01LjQgOS0xLjEgMi4yLTEuOSA0LjUtMi40IDYuOCAyMC40IDEzLjQgMjEuNiAzLjggMTQuMSAyOWwxMS40IDIuNWMzLjEtOC43IDYuNS0xNy4zIDguNi0yNi4yIC4zLTcuNi0xMi00LjItMTUuNC04LjctMi4zLTUuOSAzLjEtMTQuMiA2LjEtMTkuMiAxLjYtMi4zIDYuNi00LjcgOC44LTQuMSAuOSAuMiA0LjItLjQgNy40LTEuMyAyLjUtLjggNS0xLjMgNy41LTEuNyAyLS4yIDQuMS0uNyA2LTEuMyAzLjctMS4xIDQuNS0xLjIgNi4zLS40IDEuOSAuNiAzLjggMS4xIDUuOCAxLjQgMi4xIC4zIDQuMSAuOSA2IDEuOSAxLjYgLjkgMy4zIDEuNyA1IDIuMiAyLjUgLjcgMyAuNiA3LTEuN0wyMjYgNS40IDIzNi43IDVjMTAuNC0uNCAxMC44LS41IDE1LjMtMi43TDI1Ni41IDAgMjU5IDEuNGMxLjggMSAzLjEgMi43IDQuOSA2IDIuNCA0LjUgMi40IDQuNiAxLjQgNy40LS45IDIuNC0uOSAzLjMtLjEgNi40IC41IDIgMS4yIDQgMi4xIDUuOSAuNiAxLjMgMS4xIDIuNiAxLjMgNCAuMyA0LjMgMCA1LjMtMi40IDYuOS0yLjIgMS41LTcgNy45LTcgOS4zLS4yIDEtLjYgMi0xLjEgMy01IDExLjUtNi44IDEzLjYtMTQuMyAxNy05LjIgNC4yLTEyLjMgNS4yLTE2LjIgNS4yLTMuMSAwLTQgLjItNC41IDEuMy0xLjIgMS40LTIuNSAyLjctNC4xIDMuNy0xLjggMS4yLTMuMyAyLjktNC40IDQuOC0uNSAxLjItMS40IDIuMi0yLjUgMi45LS45IC40LTEuOCAxLTIuNSAxLjctMi4yIDEuOS00LjYgMy43LTcgNS40LTMuMyAyLjMtNi45IDUtNy45IDYtLjcgLjctMS41IDEuMy0yLjQgMS43LS44IC40LTEuNiAuOS0yLjEgMS42LTEuMyAxLjQtMS41IDIuMS0xLjEgNC42IC4zIDIgLjggNCAxLjQgNS45IDEuMyAzLjggMS4zIDcuOSAwIDEwLjZzLS45IDYuNyAxLjQgOS42YzIgMi42IDIuMiA0LjYgLjcgOC44LS44IDIuOS0xLjEgNS45LTEuMSA4LjkgMCA0LjkgLjIgNi4zIDEuNSA4LjRzMS44IDIuNSAzLjIgMi4zYzItLjIgMi4zLTEuMSA0LjctMTIuMSAyLjItMTAgMy43LTExLjkgMTMuOC0xNy4xIDIuOS0xLjUgNy41LTQgMTAtNS40czYuOC0zLjcgOS40LTQuOWM1LjktMi42IDExLjItNi42IDE1LjItMTEuNyA3LjEtOC44IDEwLTE2LjIgMTIuOC0zMy4zIC40LTIuOCAxLjMtNS40IDIuOS03LjcgMS40LTIuMiAyLjQtNC43IDIuOS03LjMgMS01LjMgMi45LTkuMSA1LjYtMTEuNSA0LjctNC4yIDYtMS4xIDQuNiAxMC45LS41IDMuOS0xLjEgMTAuMy0xLjQgMTQuNGwtLjYgNy40YzMgMi43IDUuOSA1LjUgOC45IDguMmwuMSA4LjRjLjEgNC42IC41IDkuNSAuOSAxMC45bC44IDIuNS02LjQgNi4zYy04LjUgOC4zLTEyLjkgMTMuOS0xNi44IDIxLjYtMS44IDMuNS0zLjcgNy4xLTQuNCA4LTIuMiAzLjEtNi41IDEzLTguOCAyMC4zbC0yLjMgNy4yLTcgNi41Yy0zLjggMy42LTggNy4yLTkuMiA4LjItMyAyLjMtNC4zIDUuMS00LjMgMTAtLjEgMi41IC40IDUgMS42IDcuMyAuOCAxLjYgMS41IDMuMiAyLjEgNC44IC4zIDEgLjkgMiAxLjYgMi45IDEuNCAxLjYgMS45IDE2LjEgLjggMjMuMi0uNyA0LjUtMy42IDEyLTQuNyAxMi0xLjggMC00LjEgOS4zLTUuMSAyMC43LS4yIDItLjYgNS45LTEgOC43cy0xIDEwLTEuNCAxNmMtLjggMTIuMi0uMiAxOC44IDIgMjMuMiAzLjQgNi43IC41IDEyLjctMTEgMjIuOGwtNCAzLjUgLjEgNS4yYy4xIDMgLjQgNiAxLjEgOC45IDQuNiAxNiA0LjcgMTYuOSA0LjQgMzcuMS0uNSAyNi40LS4zIDQwLjMgLjYgNDQuMiAuNSAyLjMgLjkgNC42IDEuMSA3IC4yIDIgLjcgNS4zIDEuMSA3LjQgLjUgMi4zIC44IDExIC44IDIyLjdsMCAxOS4xLTEuOCAyLjZjLTIuNyAzLjktMTUuMSAxMy41LTE1LjUgMTIuM2wuMSAwem0yOS41LTQ1LjFjLS4yLS4zLS4zLTYuOS0uMy0xNC42IDAtMTQuMS0uOS0yNy41LTIuMy0zNC40LS40LTItLjgtOS43LS45LTE3LjEtLjItMTEuOS0xLjQtMjQuNC0yLjYtMjYuNC0uNy0xLjEtMy0xNy43LTMtMjEuMyAwLTQuMiAxLTYgNS4zLTkuMXM0LjktMy4xIDUuNS0uN2MuMyAxLjEgMS40IDUuNiAyLjYgMTAgMy45IDE1LjEgNC4xIDE2LjMgNCAyMS43LS4xIDUuOC0uMSA2LjEtMS43IDE3LjctMSA3LjEtMS4yIDEyLjQtMSAyOC40IC4yIDE5LjQtLjYgMzUuNy0yIDQxLjMtLjcgMi44LTIuOCA1LjUtMy40IDQuNGwtLjEgMHptLTcxLTM3LjZjLS44LTMuNi0xLjMtNy4yLTEuNy0xMC44cy0xLTcuMi0xLjctMTAuOGMtLjUtMi4xLS45LTQuMy0xLTYuNS0uMy0zLjItLjktNy41LTEuMy05LjUtMS00LjgtMy4zLTE5LjQtMy40LTIxLjEgMC0uNy0uMy00LS43LTcuNC0uNy02LjItLjgtMjcuNy0uMi0yOC4zIDEtMSA2LjYgMi44IDExLjMgNy40bDUuMyA1LjMtLjQgNi41Yy0uMiAzLjYtLjYgMTAuMi0uOCAxNC44LS41IDEzLjMtLjcgOC43LTEuNiAyOC40LS44IDE3LjQtMS45IDMxLjMtMi42IDMyLS4xIC4xLS4yIC4xLS4yIC4ycy0uMiAwLS4zIDAtLjIgMC0uMy0uMS0uMS0uMS0uMi0uMmwwIDB6TTcyIDE2Mi42YzIxLjEgMTIuOCAxNy44IDE0LjIgMjguNSAxNy43IDEzIDQuMyAxOC45IDcuMSAyMy4yIDE2LjktNDMuNyAzNi4xLTY5IDU3LjktNzYuNyA3MC45LTMxIDUyLTYgMTAxLjYgNjIuOCA4Ny4yLTE0LjIgMjkuMi03OCAyOC42LTk4LjctNC45LTI0LjctNDAtMjIuMS0xMTguMyA2MS0xODcuN2wwIDB6bTIxMC44IDE3OWM1Ni43IDYuOSA4Mi4zLTM3LjcgNDYuNS04OS4yIDAgMC0yNi45LTI5LjMtNjQuMy02OCAzLTE1LjUgOS41LTMyLjEgMzAuNi01My44IDg5LjIgNjMuNSA5MiAxNDEuNiA5Mi41IDE0OS40IDQuMyA3MC42LTc4LjcgOTEuMi0xMDUuMyA2MS43bDAgMHoiXQogICAgfTsKICAgIGZhU2xhY2sgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2xhY2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2MjQ0NywgInNsYWNrLWhhc2giXSwgImYxOTgiLCAiTTk0LjEgMzE1LjFjMCAyNS45LTIxLjIgNDcuMS00Ny4xIDQ3LjFTMCAzNDEgMCAzMTUuMSAyMS4yIDI2OCA0Ny4xIDI2OGw0Ny4xIDAgMCA0Ny4xem0yMy43IDBjMC0yNS45IDIxLjItNDcuMSA0Ny4xLTQ3LjFTMjEyIDI4OS4yIDIxMiAzMTUuMWwwIDExNy44YzAgMjUuOS0yMS4yIDQ3LjEtNDcuMSA0Ny4xcy00Ny4xLTIxLjItNDcuMS00Ny4xbDAtMTE3Ljh6bTQ3LjEtMTg5Yy0yNS45IDAtNDcuMS0yMS4yLTQ3LjEtNDcuMVMxMzkgMzIgMTY0LjkgMzIgMjEyIDUzLjIgMjEyIDc5LjFsMCA0Ny4xLTQ3LjEgMHptMCAyMy43YzI1LjkgMCA0Ny4xIDIxLjIgNDcuMSA0Ny4xUzE5MC44IDI0NCAxNjQuOSAyNDRMNDcuMSAyNDRDMjEuMiAyNDQgMCAyMjIuOCAwIDE5Ni45czIxLjItNDcuMSA0Ny4xLTQ3LjFsMTE3LjggMHptMTg5IDQ3LjFjMC0yNS45IDIxLjItNDcuMSA0Ny4xLTQ3LjFTNDQ4IDE3MSA0NDggMTk2LjkgNDI2LjggMjQ0IDQwMC45IDI0NGwtNDcuMSAwIDAtNDcuMXptLTIzLjcgMGMwIDI1LjktMjEuMiA0Ny4xLTQ3LjEgNDcuMVMyMzYgMjIyLjggMjM2IDE5Ni45bDAtMTE3LjhDMjM2IDUzLjIgMjU3LjIgMzIgMjgzLjEgMzJzNDcuMSAyMS4yIDQ3LjEgNDcuMWwwIDExNy44em0tNDcuMSAxODljMjUuOSAwIDQ3LjEgMjEuMiA0Ny4xIDQ3LjFTMzA5IDQ4MCAyODMuMSA0ODAgMjM2IDQ1OC44IDIzNiA0MzIuOWwwLTQ3LjEgNDcuMSAwem0wLTIzLjdjLTI1LjkgMC00Ny4xLTIxLjItNDcuMS00Ny4xUzI1Ny4yIDI2OCAyODMuMSAyNjhsMTE3LjggMGMyNS45IDAgNDcuMSAyMS4yIDQ3LjEgNDcuMXMtMjEuMiA0Ny4xLTQ3LjEgNDcuMWwtMTE3LjggMHoiXQogICAgfTsKICAgIGZhU2xhY2tIYXNoID0gZmFTbGFjazsKICAgIGZhQW5nZWxsaXN0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFuZ2VsbGlzdCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMjA5IiwgIk0zMTUuNiAyMTUuNGMxMS43LTMyLjYgNDUuNC0xMjYuOSA0NS40LTE1Ny4xIDAtMjYuNi0xNS43LTQ4LjktNDMuNy00OC45LTQ0LjYgMC04NC42IDEzMS43LTk3LjEgMTYzLjEtOS43LTI4LjUtNTUuMS0xNzIuNS05NS4xLTE3Mi41LTMxLjEgMC00NS43IDIyLjktNDUuNyA1MS43IDAgMzUuMyAzNC4yIDEyNi44IDQ2LjYgMTYyLTYuMy0yLjMtMTMuMS00LjMtMjAtNC4zLTIzLjQgMC00OC4zIDI5LjEtNDguMyA1Mi42IDAgOC45IDQuOSAyMS40IDggMjkuNy0zNi45IDEwLTUxLjEgMzQuNi01MS4xIDcxLjctLjEgNzIuMiA2OC4zIDE0OC42IDE2NC41IDE0OC42IDExOCAwIDE5MS40LTg4LjYgMTkxLjQtMjAyLjkgMC00My4xLTYuOS04Mi01NC45LTkzLjd6TTI4MC4yIDEwOGM0LTEyLjMgMjEuMS02NC4zIDM3LjEtNjQuMyA4LjYgMCAxMC45IDguOSAxMC45IDE2IDAgMTkuMS0zOC42IDEyNC42LTQ3LjEgMTQ4bC0zNC02IDMzLjEtOTMuN3pNMTEwLjggNDguM2MwLTExLjkgMTQuNS00NS43IDQ2LjMgNDcuMWwzNC42IDEwMC4zYy0xNS42LTEuMy0yNy43LTMtMzUuNCAxLjQtMTAuOS0yOC44LTQ1LjUtMTE5LjctNDUuNS0xNDguOHpNMTA4LjUgMjQ0YzI5LjMgMCA2Ny4xIDk0LjYgNjcuMSAxMDcuNCAwIDUuMS00LjkgMTEuNC0xMC42IDExLjQtMjAuOSAwLTc2LjktNzYuOS03Ni45LTk3LjcgLjEtNy43IDEyLjctMjEuMSAyMC40LTIxLjF6TTI5Mi44IDQzMC4zYy0yOS4xIDMyLTY2LjMgNDguNi0xMDkuNyA0OC42LTU5LjQgMC0xMDYuMy0zMi42LTEyOC45LTg4LjMtMTcuMS00My40IDMuOC02OC4zIDIwLjYtNjguMyAxMS40IDAgNTQuMyA2MC4zIDU0LjMgNzMuMSAwIDQuOS03LjcgOC4zLTExLjcgOC4zLTE2LjEgMC0yMi40LTE1LjUtNTEuMS01MS40LTI5LjcgMjkuNyAyMC41IDg2LjkgNTguMyA4Ni45IDI2LjEgMCA0My4xLTI0LjIgMzgtNDIgMy43IDAgOC4zIC4zIDExLjctLjYgMS4xIDI3LjEgOS4xIDU5LjQgNDEuNyA2MS43IDAtLjkgMi03LjEgMi03LjQgMC0xNy40LTEwLjYtMzIuNi0xMC42LTUwLjMgMC0yOC4zIDIxLjctNTUuNyA0My43LTcxLjcgOC02IDE3LjctOS43IDI3LjEtMTMuMSA5LjctMy43IDIwLTggMjcuNC0xNS40LTEuMS0xMS4yLTUuNy0yMS4xLTE2LjktMjEuMS0yNy43IDAtMTIwLjYgNC0xMjAuNi0zOS43IDAtNi43IC4xLTEzLjEgMTcuNC0xMy4xIDMyLjMgMCAxMTQuMyA4IDEzOC4zIDI5LjEgMTguMSAxNi4xIDI0LjMgMTEzLjItMzEgMTc0Ljd6bS05OC42LTEyNmM5LjcgMy4xIDE5LjcgNCAyOS43IDYtNy40IDUuNC0xNCAxMi0yMC4zIDE5LjEtMi44LTguNS02LjItMTYuOC05LjQtMjUuMXoiXQogICAgfTsKICAgIGZhQW5kcm9pZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhbmRyb2lkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxN2IiLCAiTTQyMC41IDI1My45YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptLTI2NS4xIDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0yNzMuNy05Ni41bDQ3LjktODNjLjgtMS4xIDEuMy0yLjQgMS41LTMuOHMuMi0yLjctLjEtNC4xLS45LTIuNi0xLjctMy43LTEuOC0yLTMtMi43LTIuNS0xLjEtMy45LTEuMy0yLjcgMC00IC40LTIuNSAxLjEtMy42IDEuOS0xLjkgMi0yLjUgMy4ybC00OC41IDg0LjFjLTM4LjgtMTcuNC04MC44LTI2LjQtMTIzLjMtMjYuNHMtODQuNSA5LTEyMy4zIDI2LjRMMTE2LjIgNjQuNGMtLjYtMS4yLTEuNS0yLjMtMi41LTMuMnMtMi4zLTEuNS0zLjYtMS45LTIuNy0uNS00LS40LTIuNyAuNi0zLjkgMS4zLTIuMiAxLjYtMyAyLjctMS40IDIuNC0xLjcgMy43LS4zIDIuNy0uMSA0LjEgLjggMi42IDEuNSAzLjhsNDcuOSA4M0M2NC41IDIwMi4yIDguMiAyODUuNSAwIDM4NGw1NzYgMGMtOC4yLTk4LjUtNjQuNS0xODEuOC0xNDYuOS0yMjYuNnoiXQogICAgfTsKICAgIGZhTWVldHVwID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1lZXR1cCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMmUwIiwgIk0xMzEuMSA0MTQuM2MxLjEgNS43LTIuMyAxMS4xLTggMTIuMy01LjQgMS4xLTEwLjktMi4zLTEyLTgtMS4xLTUuNCAyLjMtMTEuMSA3LjctMTIuM3MxMS4xIDIuMyAxMi4zIDh6bTE0My4xIDcxLjRjLTYuMyA0LjYtOCAxMy40LTMuNyAyMCA0LjYgNi42IDEzLjQgOC4zIDIwIDMuNyA2LjMtNC42IDgtMTMuNCAzLjQtMjAtNC4yLTYuNS0xMy4xLTguMy0xOS43LTMuN3ptLTg2LTQ2Mi4zYTExLjggMTEuOCAwIDEgMCAtNC45LTIzIDExLjggMTEuOCAwIDEgMCA0LjkgMjN6TTY2LjUgMjI2LjNhMjIuMiAyMi4yIDAgMSAwIC0yNC43IDM2LjkgMjIuMiAyMi4yIDAgMSAwIDI0LjctMzYuOXptMjcyLTE3MC45YTIyLjEgMjIuMSAwIDEgMCAtMjIuNC0zOCAyMi4xIDIyLjEgMCAxIDAgMjIuNCAzOHptLTE5MS4xIDU4YTE2LjkgMTYuOSAwIDEgMCAtMTguOC0yOCAxNi45IDE2LjkgMCAxIDAgMTguOCAyOHptMzcyLjMgMTU2Yy03LjQgMS43LTEyLjMgOS4xLTEwLjYgMTYuOSAxLjQgNy40IDguOSAxMi4zIDE2LjMgMTAuNiA3LjQtMS40IDEyLjMtOC45IDEwLjYtMTYuNi0xLjUtNy40LTguOS0xMi4zLTE2LjMtMTAuOXptMzkuNy01Ni44YTEwLjEgMTAuMSAwIDEgMCAtMTkuOCA0LjMgMTAuMSAxMC4xIDAgMSAwIDE5LjgtNC4zem0tODAuMy03My43YTE4LjggMTguOCAwIDEgMCAyMC43IDMxLjMgMTguOCAxOC44IDAgMSAwIC0yMC43LTMxLjN6bS02LjMgMTM5LjRjMjYuMyA0My4xIDE1LjEgMTAwLTI2LjMgMTI5LjEtMTcuNCAxMi4zLTM3LjEgMTcuNy01Ni45IDE3LjEtMTIgNDcuMS02OS40IDY0LjYtMTA1LjEgMzIuNi0xLjEgLjktMi42IDEuNy0zLjcgMi45LTM5LjEgMjcuMS05Mi4zIDE3LjQtMTE5LjQtMjIuMy05LjctMTQuMy0xNC42LTMwLjYtMTUuMS00Ni45LTY1LjQtMTAuOS05MC05NC00MS4xLTEzOS43LTI4LjMtNDYuOSAuNi0xMDcuNCA1My40LTExNC45IDI1LjEtNjYuMiAxMDcuNi05Ny42IDE2My42LTU0LjIgNjcuNC0yMi4zIDEzNi4zIDI5LjQgMTMwLjkgMTAxLjEgNDEuMSAxMi42IDUyLjggNjYuOSAxOS43IDk1LjJ6bS03MCA3NC4zYy0zLjEtMjAuNi00MC45LTQuNi00My4xLTI3LjEtMy4xLTMyIDQzLjctMTAxLjEgNDAtMTI4LTMuNC0yNC0xOS40LTI5LjEtMzMuNC0yOS40LTEzLjQtLjMtMTYuOSAyLTIxLjQgNC42LTIuOSAxLjctNi42IDQuOS0xMS43LS4zLTYuMy02LTExLjEtMTEuNy0xOS40LTEyLjktMTIuMy0yLTE3LjcgMi0yNi42IDkuNy0zLjQgMi45LTEyIDEyLjktMjAgOS4xLTMuNC0xLjctMTUuNC03LjctMjQtMTEuNC0xNi4zLTcuMS00MCA0LjYtNDguNiAyMC0xMi45IDIyLjktMzggMTEzLjEtNDEuNyAxMjUuMS04LjYgMjYuNiAxMC45IDQ4LjYgMzYuOSA0Ny4xIDExLjEtLjYgMTguMy00LjYgMjUuNC0xNy40IDQtNy40IDQxLjctMTA3LjcgNDQuNi0xMTIuNiAyLTMuNCA4LjktOCAxNC42LTUuMSA1LjcgMy4xIDYuOSA5LjQgNiAxNS4xLTEuMSA5LjctMjggNzAuOS0yOC45IDc3LjctMy40IDIyLjkgMjYuOSAyNi42IDM4LjYgNCAzLjctNy4xIDQ1LjctOTIuNiA0OS40LTk4LjMgNC4zLTYuMyA3LjQtOC4zIDExLjctOCAzLjEgMCA4LjMgLjkgNy4xIDEwLjktMS40IDkuNC0zNS4xIDcyLjMtMzguOSA4Ny43LTQuNiAyMC42IDYuNiA0MS40IDI0LjkgNTAuNiAxMS40IDUuNyA2Mi41IDE1LjcgNTguNS0xMS4xem01LjcgOTIuM2EyMy4zIDIzLjMgMCAxIDAgMjYuMiAzOC40IDIzLjMgMjMuMyAwIDEgMCAtMjYuMi0zOC40eiJdCiAgICB9OwogICAgZmFGb250aWNvbnNGaSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmb250aWNvbnMtZmkiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjNhMiIsICJNMTE0LjQgMjI0bDkyLjQgMC0xNS4yIDUxLjItNzYuNCAwIDAgMTU3LjhjMCA4LTIuOCA5LjIgNC40IDEwbDU5LjYgNS42IDAgMzQuNC0xNzkuMiAwIDAtMzUuMiAyOS4yLTIuOGM3LjItLjggOS4yLTMuMiA5LjItMTAuOGwwLTE1NS44YzAtMy4yLTQtMy4yLTgtMy4ybC0zMC40IDAgMC01MS4yIDM4LjQgMCAwLTI4LjhjMC02OCAzNi40LTk2IDEwNi05NiA0Ni44IDAgODguOCAxMS4yIDg4LjggNzIuNEwxNjMuNiAxODBjLjQtMjUuNi02LTMxLjYtMjIuNC0zMS42LTI1LjIgMC0yNiAxMy42LTI2IDM3LjZsMCAzMmMwIDMuMi00LjggNi0uOCA2ek0zODQgNDgzbC0xNDAuOCAwIDAtMzQuNCAyOC0zLjZjNy4yLS44IDEwLjQtMi40IDEwLjQtMTBsMC0xNDhjMC01LjYtNC05LjItOS4yLTEwLjhsLTMzLjItOC44IDkuMi00MC40IDExMCAwIDAgMjA4YzAgOC0zLjYgOC44IDQgMTBsMjEuNiAzLjYgMCAzNC40ek0zNTQgMTM1LjhsMTIuNCA0NS42LTEwIDEwLTQyLjgtMjIuOC00Mi44IDIyLjgtMTAtMTAgMTIuNC00NS42LTMwLTM2LjQgNC44LTEwIDM4IDAgMjEuMi0zOC40IDEyLjggMCAyMS4yIDM4LjQgMzggMCA0LjggMTMuMi0zMCAzMy4yeiJdCiAgICB9OwogICAgZmFQYWxmZWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGFsZmVkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzZDgiLCAiTTM4NC45IDE5My45YzAtNDcuNC01NS4yLTQ0LjItOTUuNC0yOS44LTEuMyAzOS40LTIuNSA4MC43LTMgMTE5LjggLjcgMi44IDIuNiA2LjIgMTUuMSA2LjIgMzYuOCAwIDgzLjQtNDIuOCA4My4zLTk2LjJ6TTE5MC40IDI2Ni4xYy4yIDAgNi41LTIuNyAxMS4yLTIuNyAyNi42IDAgMjAuNyA0NC4xLTE0LjQgNDQuMS0yMS41IDAtMzcuMS0xOC4xLTM3LjEtNDMgMC00MiA0Mi45LTk1LjYgMTAwLjctMTI2LjUgMS0xMi40IDMtMjIgMTAuNS0yOC4yIDExLjItOSAyNi42LTMuNSAyOS41IDExLjEgNzIuMi0yMi4yIDEzNS4yIDEgMTM1LjIgNzIgMCA3Ny45LTc5LjMgMTUyLjYtMTQwLjEgMTM4LjItLjEgMzkuNCAuOSA3NC40IDIuNyAxMDBsMCAuMmMuMiAzLjQgLjYgMTIuNS01LjMgMTkuMS05LjYgMTAuNi0zMy40IDEwLTM2LjQtMjIuMy00LjEtNDQuNCAuMi0yMDYuMSAxLjQtMjQyLjUtMjEuNSAxNS01OC41IDUwLjMtNTguNSA3NS45IC4yIDIuNSAuNCA0IC42IDQuNnpNOCAxODEuMXMtLjEgMzcuNCAzOC40IDM3LjRsMzAgMCAyMi40IDIxNy4yczAgNDQuMyA0NC43IDQ0LjNsMjg4LjkgMHM0NC43LS40IDQ0LjctNDQuM2wyMi40LTIxNy4yIDMwIDBzMzguNCAxLjIgMzguNC0zNy40YzAgMCAuMS0zNy40LTM4LjQtMzcuNGwtMzAuMSAwYy03LjMtMjUuNi0zMC4yLTc0LjMtMTE5LjQtNzQuM2wtMjggMCAwLTE5LjFzLTIuNy0xOC40LTIxLjEtMTguNGwtODUuOCAwUzIyNCAzMS45IDIyNCA1MC4zbDAgMTkuMS0yOC4xIDBzLTEwNSA0LjItMTIwLjUgNzQuM2wtMjkgMFM4IDE0Mi41IDggMTgxLjF6Il0KICAgIH07CiAgICBmYVdwYmVnaW5uZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid3BiZWdpbm5lciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjk3IiwgIk00NjMuMiAzMjIuNGM1Ni4yIDY0LjMgNC4yIDE1Ny42LTkxLjkgMTU3LjYtMzkuNiAwLTc4LjgtMTcuNy0xMDAuMS01MC02LjkgLjQtMjIuNyAuNC0yOS42IDAtMjEuNCAzMi40LTYwLjYgNTAtMTAwLjEgNTAtOTUuNSAwLTE0OC4zLTkzLTkxLjktMTU3LjYtNzkuMS0xMzEuOSAzMS4zLTI5MC40IDIwNi44LTI5MC40IDE3NS42IDAgMjg1LjkgMTU4LjYgMjA2LjggMjkwLjR6bS0zMzkuNi04M2w0MS41IDAgMC01OC4xLTQxLjUgMCAwIDU4LjF6bTIxNy4yIDg2LjFsMC0yMy44Yy02MC41IDIwLjktMTMyLjQgOS4yLTE4Ny42LTM0bC4yIDI0LjljNTEuMSA0Ni40IDEzMS43IDU3LjkgMTg3LjMgMzIuOXpNMTkwIDIzOS40bDE2Ni4xIDAgMC01OC4xLTE2Ni4xIDAgMCA1OC4xeiJdCiAgICB9OwogICAgZmFEaWFzcG9yYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkaWFzcG9yYSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNzkxIiwgIk0yMTkuNyAzNTQuNmMtMS40IDAtODggMTE5LjktODguNyAxMTkuOVM0NC40IDQxNCA0NCA0MTMuMyAxMzAuNiAyODcuNSAxMzAuNiAyODUuOGMwLTIuMi0xMjkuNi00NC0xMzcuNi00Ny4xLTEuMy0uNSAzMS40LTEwMS44IDMxLjctMTAyLjEgLjYtLjcgMTQ0LjQgNDcgMTQ1LjUgNDcgLjQgMCAuOS0uNiAxLTEuMyAuNC0yIDEtMTQ4LjYgMS43LTE0OS42IC44LTEuMiAxMDQuNS0uNyAxMDUuMS0uMyAxLjUgMSAzLjUgMTU2LjEgNi4xIDE1Ni4xIDEuNCAwIDEzOC43LTQ3IDEzOS4zLTQ2LjMgLjggLjkgMzEuOSAxMDIuMiAzMS41IDEwMi42LS45IC45LTE0MC4yIDQ3LjEtMTQwLjYgNDguOC0uMyAxLjQgODIuOCAxMjIuMSA4Mi41IDEyMi45cy04NS41IDYzLjUtODYuMyA2My41Yy0xLS4yLTg5LTEyNS41LTkwLjktMTI1LjVsMCAweiJdCiAgICB9OwogICAgZmFQcm9kdWN0SHVudCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwcm9kdWN0LWh1bnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI4OCIsICJNMzI2LjMgMjE4LjhjMCAyMC41LTE2LjcgMzcuMi0zNy4yIDM3LjJsLTcwLjMgMCAwLTc0LjQgNzAuMyAwYzIwLjUgMCAzNy4yIDE2LjcgMzcuMiAzNy4yek04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem0zNjcuOS0zNy4yYzAtNDcuOS0zOC45LTg2LjgtODYuOC04Ni44bC0xMTkuOSAwIDAgMjQ4IDQ5LjYgMCAwLTc0LjQgNzAuMyAwYzQ3LjkgMCA4Ni44LTM4LjkgODYuOC04Ni44eiJdCiAgICB9OwogICAgZmFTcXVhcmVVcHdvcmsgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXVwd29yayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjdjIiwgIk01NiAzMmwzMzYgMGMzMC45IDAgNTYgMjUuMSA1NiA1NmwwIDMzNmMwIDMwLjktMjUuMSA1Ni01NiA1Nkw1NiA0ODBjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgODhDMCA1Ny4xIDI1LjEgMzIgNTYgMzJ6TTI3MC45IDI3NC4yYzYuNi01Mi45IDI1LjktNjkuNSA1MS40LTY5LjUgMjUuMyAwIDQ0LjkgMjAuMiA0NC45IDQ5LjdzLTE5LjcgNDkuNy00NC45IDQ5LjdjLTI3LjkgMC00Ni4zLTIxLjUtNTEuNC0yOS45em0tMjYuNy00MS44Yy04LjItMTUuNS0xNC4zLTM2LjMtMTkuMi01NS42bC02Mi45IDAgMCA3OC4xYzAgMjguNC0xMi45IDQ5LjQtMzguMiA0OS40Uzg0LjEgMjgzLjQgODQuMSAyNTVsLjMtNzguMS0zNi4yIDAgMCA3OC4xYzAgMjIuOCA3LjQgNDMuNSAyMC45IDU4LjIgMTMuOSAxNS4yIDMyLjggMjMuMiA1NC44IDIzLjIgNDMuNyAwIDc0LjItMzMuNSA3NC4yLTgxLjVsMC01Mi41YzQuNiAxNy4zIDE1LjQgNTAuNSAzNi4yIDc5LjdsLTE5LjMgMTEwLjUgMzYuOCAwIDEyLjgtNzguNGM0LjIgMy41IDguNyA2LjYgMTMuNCA5LjQgMTIuMyA3LjggMjYuNCAxMi4yIDQwLjkgMTIuNmwzLjQgMGM0NS4xIDAgODAuOS0zNC45IDgwLjktODEuOXMtMzUuOS04Mi4yLTgwLjktODIuMmMtNDUuNCAwLTcwLjkgMjkuNy03OC4xIDYwLjFsMCAuMnoiXQogICAgfTsKICAgIGZhQ3V0dGxlZmlzaCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjdXR0bGVmaXNoIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzOGMiLCAiTTM0OCAzMDUuNWMtMTcuNSAzMS42LTU3LjQgNTQuNS05NiA1NC41LTU2LjYgMC0xMDQtNDcuNC0xMDQtMTA0czQ3LjQtMTA0IDEwNC0xMDRjMzguNiAwIDc4LjUgMjIuOSA5NiA1NC41IDEzLjctNTAuOSA0MS43LTkzLjMgODctMTE3LjgtNDUuMy00OS42LTExMC41LTgwLjctMTgzLTgwLjctMTM3IDAtMjQ4IDExMS0yNDggMjQ4UzExNSA1MDQgMjUyIDUwNGM3Mi41IDAgMTM3LjctMzEuMSAxODMtODAuNy00NS4zLTI0LjUtNzMuMy02Ni45LTg3LTExNy44eiJdCiAgICB9OwogICAgZmFNZWRhcHBzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1lZGFwcHMiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjNjNiIsICJNMTE4LjMgMjM4LjRjMy41LTEyLjUgNi45LTMzLjYgMTMuMi0zMy42IDguMyAxLjggOS42IDIzLjQgMTguNiAzNi42IDQuNi0yMy41IDUuMy04NS4xIDE0LjEtODYuNyA5LS43IDE5LjcgNjYuNSAyMiA3Ny41IDkuOSA0LjEgNDguOSA2LjYgNDguOSA2LjYgMS45IDcuMy0yNCA3LjYtNDAgNy44LTQuNiAxNC44LTUuNCAyNy43LTExLjQgMjgtNC43IC4yLTguMi0yOC44LTE3LjUtNDkuNmwtOS40IDY1LjVjLTQuNCAxMy0xNS41LTIyLjUtMjEuOS0zOS4zLTMuMy0uMS02Mi40LTEuNi00Ny42LTcuOGwzMS01ek0yMjggNDQ4YzIxLjIgMCAyMS4yLTMyIDAtMzJMOTIgNDE2Yy0yMS4yIDAtMjEuMiAzMiAwIDMybDEzNiAwem0tMjQgNjRjMjEuMiAwIDIxLjItMzIgMC0zMmwtODggMGMtMjEuMiAwLTIxLjIgMzIgMCAzMmw4OCAwem0zNC4yLTE0MS41YzMuMi0xOC45IDUuMi0zNi40IDExLjktNDguOCA3LjktMTQuNyAxNi4xLTI4LjEgMjQtNDEgMjQuNi00MC40IDQ1LjktNzUuMiA0NS45LTEyNS41IDAtODUuNi03MS44LTE1NS4yLTE2MC0xNTUuMlMwIDY5LjYgMCAxNTUuMmMwIDUwLjIgMjEuMyA4NS4xIDQ1LjkgMTI1LjUgNy45IDEyLjkgMTYgMjYuMyAyNCA0MSA2LjcgMTIuNSA4LjcgMjkuOCAxMS45IDQ4LjkgMy41IDIxIDM2LjEgMTUuNyAzMi42LTUuMS0zLjYtMjEuNy01LjYtNDAuNy0xNS4zLTU4LjYtMzIuNi02MC40LTY2LjEtOTUuNi02Ni4xLTE1MS43IDAtNjcuOSA1Ny0xMjMuMiAxMjctMTIzLjJTMjg3IDg3LjMgMjg3IDE1NS4yYzAgNTYuMS0zMy41IDkxLjMtNjYuMSAxNTEuNi05LjcgMTgtMTEuNyAzNy40LTE1LjMgNTguNi0zLjQgMjAuNiAyOSAyNi40IDMyLjYgNS4xeiJdCiAgICB9OwogICAgZmFQaXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGl4IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0M2EiLCAiTTI0Mi40IDI5Mi41YzUuNC01LjQgMTQuNy01LjQgMjAuMSAwbDc3IDc3YzE0LjIgMTQuMiAzMy4xIDIyIDUzLjEgMjJsMTUuMSAwLTk3LjEgOTcuMWMtMzAuMyAyOS41LTc5LjUgMjkuNS0xMDkuOCAwbC05Ny41LTk3LjQgOS4zIDBjMjAgMCAzOC45LTcuOCA1My4xLTIybDc2LjctNzYuN3ptMjAuMS03My42Yy02LjQgNS41LTE0LjYgNS42LTIwLjEgMGwtNzYuNy03Ni43Yy0xNC4yLTE1LjEtMzMuMS0yMi01My4xLTIybC05LjMgMCA5Ny40LTk3LjRjMzAuNC0zMC4zIDc5LjYtMzAuMyAxMDkuOSAwbDk3LjIgOTcuMS0xNS4yIDBjLTIwIDAtMzguOSA3LjgtNTMuMSAyMmwtNzcgNzd6TTExMi42IDE0Mi43YzEzLjggMCAyNi41IDUuNiAzNy4xIDE1LjRsNzYuNyA3Ni43YzcuMiA2LjMgMTYuNiAxMC44IDI2LjEgMTAuOCA5LjQgMCAxOC44LTQuNSAyNi0xMC44bDc3LTc3YzkuOC05LjcgMjMuMy0xNS4zIDM3LjEtMTUuM2wzNy43IDAgNTguMyA1OC4zYzMwLjMgMzAuMyAzMC4zIDc5LjUgMCAxMDkuOGwtNTguMyA1OC4zLTM3LjcgMGMtMTMuOCAwLTI3LjMtNS42LTM3LjEtMTUuNGwtNzctNzdjLTEzLjktMTMuOS0zOC4yLTEzLjktNTIuMSAuMWwtNzYuNyA3Ni42Yy0xMC42IDkuOC0yMy4zIDE1LjQtMzcuMSAxNS40bC0zMS44IDAtNTgtNThjLTMwLjMtMzAuMy0zMC4zLTc5LjUgMC0xMDkuOGw1OC01OC4xIDMxLjggMHoiXQogICAgfTsKICAgIGZhU3F1YXJlVHVtYmxyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS10dW1ibHIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidHVtYmxyLXNxdWFyZSJdLCAiZjE3NCIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTI1Ni44IDQxNmMtNzUuNSAwLTkxLjktNTUuNS05MS45LTg3LjlsMC05MC0yOS43IDBjLTMuNCAwLTYuMi0yLjgtNi4yLTYuMmwwLTQyLjVjMC00LjUgMi44LTguNSA3LjEtMTAgMzguOC0xMy43IDUwLjktNDcuNSA1Mi43LTczLjIgLjUtNi45IDQuMS0xMC4yIDEwLTEwLjJsNDQuMyAwYzMuNCAwIDYuMiAyLjggNi4yIDYuMmwwIDcyIDUxLjkgMGMzLjQgMCA2LjIgMi44IDYuMiA2LjJsMCA1MS4xYzAgMy40LTIuOCA2LjItNi4yIDYuMmwtNTIuMSAwIDAgODMuM2MwIDIxLjQgMTQuOCAzMy41IDQyLjUgMjIuNCAzLTEuMiA1LjYtMiA4LTEuNCAyLjIgLjUgMy42IDIuMSA0LjYgNC45TDMxOCAzODcuMWMxIDMuMiAyIDYuNy0uMyA5LjEtOC41IDkuMS0zMS4yIDE5LjgtNjAuOSAxOS44eiJdCiAgICB9OwogICAgZmFUdW1ibHJTcXVhcmUgPSBmYVNxdWFyZVR1bWJscjsKICAgIGZhUmVhY3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVhY3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQxYiIsICJNNDE4LjIgMTc3LjJjLTUuNC0xLjgtMTAuOC0zLjUtMTYuMi01LjEgLjktMy43IDEuNy03LjQgMi41LTExLjEgMTIuMy01OS42IDQuMi0xMDcuNS0yMy4xLTEyMy4zLTI2LjMtMTUuMS02OS4yIC42LTExMi42IDM4LjQtNC4zIDMuNy04LjUgNy42LTEyLjUgMTEuNS0yLjctMi42LTUuNS01LjItOC4zLTcuNy00NS41LTQwLjQtOTEuMS01Ny40LTExOC40LTQxLjUtMjYuMiAxNS4yLTM0IDYwLjMtMjMgMTE2LjcgMS4xIDUuNiAyLjMgMTEuMSAzLjcgMTYuNy02LjQgMS44LTEyLjcgMy44LTE4LjYgNS45LTUzLjQgMTguNS05MS43IDQ3LjctOTEuNyA3Ny45IDAgMzEuMiA0MC44IDYyLjUgOTYuMyA4MS41IDQuNSAxLjUgOSAzIDEzLjYgNC4zLTEuNSA2LTIuOCAxMS45LTQgMTgtMTAuNSA1NS41LTIuMyA5OS41IDIzLjkgMTE0LjYgMjcgMTUuNiA3Mi40LS40IDExNi42LTM5LjEgMy41LTMuMSA3LTYuMyAxMC41LTkuNyA0LjQgNC4zIDkgOC40IDEzLjYgMTIuNCA0Mi44IDM2LjggODUuMSA1MS43IDExMS4yIDM2LjYgMjctMTUuNiAzNS44LTYyLjkgMjQuNC0xMjAuNS0uOS00LjQtMS45LTguOS0zLTEzLjUgMy4yLS45IDYuMy0xLjkgOS40LTIuOSA1Ny43LTE5LjEgOTkuNS01MCA5OS41LTgxLjcgMC0zMC4zLTM5LjQtNTkuNy05My44LTc4LjR6TTI4Mi45IDkyLjNjMzcuMi0zMi40IDcxLjktNDUuMSA4Ny43LTM2IDE2LjkgOS43IDIzLjQgNDguOSAxMi44IDEwMC40LS43IDMuNC0xLjQgNi43LTIuMyAxMC0yMi4yLTUtNDQuNy04LjYtNjcuMy0xMC42LTEzLTE4LjYtMjcuMi0zNi40LTQyLjYtNTMuMSAzLjktMy43IDcuNy03LjIgMTEuNy0xMC43ek0xNjcuMiAzMDcuNWM1LjEgOC43IDEwLjMgMTcuNCAxNS44IDI1LjktMTUuNi0xLjctMzEuMS00LjItNDYuNC03LjUgNC40LTE0LjQgOS45LTI5LjMgMTYuMy00NC41IDQuNiA4LjggOS4zIDE3LjUgMTQuMyAyNi4xek0xMzYuOSAxODcuMmMxNC40LTMuMiAyOS43LTUuOCA0NS42LTcuOC01LjMgOC4zLTEwLjUgMTYuOC0xNS40IDI1LjQtNC45IDguNS05LjcgMTcuMi0xNC4yIDI2LTYuMy0xNC45LTExLjYtMjkuNS0xNi00My42em0yNy40IDY4LjljNi42LTEzLjggMTMuOC0yNy4zIDIxLjQtNDAuNnMxNS44LTI2LjIgMjQuNC0zOC45YzE1LTEuMSAzMC4zLTEuNyA0NS45LTEuN3MzMSAuNiA0NS45IDEuN2M4LjUgMTIuNiAxNi42IDI1LjUgMjQuMyAzOC43czE0LjkgMjYuNyAyMS43IDQwLjRjLTYuNyAxMy44LTEzLjkgMjcuNC0yMS42IDQwLjgtNy42IDEzLjMtMTUuNyAyNi4yLTI0LjIgMzktMTQuOSAxLjEtMzAuNCAxLjYtNDYuMSAxLjZzLTMwLjktLjUtNDUuNi0xLjRjLTguNy0xMi43LTE2LjktMjUuNy0yNC42LTM5cy0xNC44LTI2LjgtMjEuNS00MC42em0xODAuNiA1MS4yYzUuMS04LjggOS45LTE3LjcgMTQuNi0yNi43IDYuNCAxNC41IDEyIDI5LjIgMTYuOSA0NC4zLTE1LjUgMy41LTMxLjIgNi4yLTQ3IDggNS40LTguNCAxMC41LTE3IDE1LjUtMjUuNnptMTQuNC03Ni41Yy00LjctOC44LTkuNS0xNy42LTE0LjUtMjYuMi00LjktOC41LTEwLTE2LjktMTUuMy0yNS4yIDE2LjEgMiAzMS41IDQuNyA0NS45IDgtNC42IDE0LjgtMTAgMjkuMi0xNi4xIDQzLjR6TTI1Ni4yIDExOC4zYzEwLjUgMTEuNCAyMC40IDIzLjQgMjkuNiAzNS44LTE5LjgtLjktMzkuNy0uOS01OS41IDAgOS44LTEyLjkgMTkuOS0yNC45IDI5LjktMzUuOHpNMTQwLjIgNTdjMTYuOC05LjggNTQuMSA0LjIgOTMuNCAzOSAyLjUgMi4yIDUgNC42IDcuNiA3LTE1LjUgMTYuNy0yOS44IDM0LjUtNDIuOSA1My4xLTIyLjYgMi00NSA1LjUtNjcuMiAxMC40LTEuMy01LjEtMi40LTEwLjMtMy41LTE1LjUtOS40LTQ4LjQtMy4yLTg0LjkgMTIuNi05NHpNMTE1LjcgMzIwLjZjLTQuMi0xLjItOC4zLTIuNS0xMi40LTMuOS0yMS4zLTYuNy00NS41LTE3LjMtNjMtMzEuMi0xMC4xLTctMTYuOS0xNy44LTE4LjgtMjkuOSAwLTE4LjMgMzEuNi00MS43IDc3LjItNTcuNiA1LjctMiAxMS41LTMuOCAxNy4zLTUuNSA2LjggMjEuNyAxNSA0MyAyNC41IDYzLjYtOS42IDIwLjktMTcuOSA0Mi41LTI0LjggNjQuNXptMTE2LjYgOThjLTE2LjUgMTUuMS0zNS42IDI3LjEtNTYuNCAzNS4zLTExLjEgNS4zLTIzLjkgNS44LTM1LjMgMS4zLTE1LjktOS4yLTIyLjUtNDQuNS0xMy41LTkyIDEuMS01LjYgMi4zLTExLjIgMy43LTE2LjcgMjIuNCA0LjggNDUgOC4xIDY3LjkgOS44IDEzLjIgMTguNyAyNy43IDM2LjYgNDMuMiA1My40LTMuMiAzLjEtNi40IDYuMS05LjYgOC45em0yNC41LTI0LjNjLTEwLjItMTEtMjAuNC0yMy4yLTMwLjMtMzYuMyA5LjYgLjQgMTkuNSAuNiAyOS41IC42IDEwLjMgMCAyMC40LS4yIDMwLjQtLjctOS4yIDEyLjctMTkuMSAyNC44LTI5LjYgMzYuNHptMTMwLjcgMzBjLS45IDEyLjItNi45IDIzLjYtMTYuNSAzMS4zLTE1LjkgOS4yLTQ5LjgtMi44LTg2LjQtMzQuMi00LjItMy42LTguNC03LjUtMTIuNy0xMS41IDE1LjMtMTYuOSAyOS40LTM0LjggNDIuMi01My42IDIyLjktMS45IDQ1LjctNS40IDY4LjItMTAuNSAxIDQuMSAxLjkgOC4yIDIuNyAxMi4yIDQuOSAyMS42IDUuNyA0NC4xIDIuNSA2Ni4zem0xOC4yLTEwNy41Yy0yLjggLjktNS42IDEuOC04LjUgMi42LTctMjEuOC0xNS42LTQzLjEtMjUuNS02My44IDkuNi0yMC40IDE3LjctNDEuNCAyNC41LTYyLjkgNS4yIDEuNSAxMC4yIDMuMSAxNSA0LjcgNDYuNiAxNiA3OS4zIDM5LjggNzkuMyA1OCAwIDE5LjYtMzQuOSA0NC45LTg0LjggNjEuNHpNMjU2IDMwMS44YTQ1LjggNDUuOCAwIDEgMCAwLTkxLjYgNDUuOCA0NS44IDAgMSAwIDAgOTEuNnoiXQogICAgfTsKICAgIGZhSnhsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImp4bCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjdiIiwgIk00MTIuMiAzMkwzNS44IDMyQzE2IDMyIDAgNDggMCA2Ny44TDAgNDQ0LjJDMCA0NjQgMTYgNDgwIDM1LjggNDgwbDM3Ni40IDBjMTkuOCAwIDM1LjgtMTYgMzUuOC0zNS44bDAtMzc2LjRDNDQ4IDQ4IDQzMiAzMiA0MTIuMiAzMnpNMzc4LjYgMzMzLjdjMCA0MC4yLTMyLjYgNzIuOC03Mi44IDcyLjhsLTIzNS42IDBjMC00MC4yIDMyLjYtNzIuOCA3Mi44LTcyLjhsMjM1LjYgMHptMC0xMTMuOWMwIDQwLjItMzIuNiA3Mi44LTcyLjggNzIuOGwtMjM1LjYgMGMwLTQwLjIgMzIuNi03Mi44IDcyLjgtNzIuOGwyMzUuNiAwem0wLTExMy45YzAgNDAuMi0zMi42IDcyLjgtNzIuOCA3Mi44bC0yMzUuNiAwYzAtNDAuMiAzMi42LTcyLjggNzIuOC03Mi44bDIzNS42IDB6Il0KICAgIH07CiAgICBmYVNxdWFyZUxpbmtlZGluID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1saW5rZWRpbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlN2QwIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem01IDE3MC4ybDY2LjUgMCAwIDIxMy44LTY2LjUgMCAwLTIxMy44em03MS43LTY3LjdhMzguNSAzOC41IDAgMSAxIC03NyAwIDM4LjUgMzguNSAwIDEgMSA3NyAwek0zMTcuOSA0MTZsMC0xMDRjMC0yNC44LS41LTU2LjctMzQuNS01Ni43LTM0LjYgMC0zOS45IDI3LTM5LjkgNTQuOWwwIDEwNS44LTY2LjQgMCAwLTIxMy44IDYzLjcgMCAwIDI5LjIgLjkgMGM4LjktMTYuOCAzMC42LTM0LjUgNjIuOS0zNC41IDY3LjIgMCA3OS43IDQ0LjMgNzkuNyAxMDEuOWwwIDExNy4yLTY2LjQgMHoiXQogICAgfTsKICAgIGZhQ3NzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNzcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNmEyIiwgIk0zNzYuMyAzMkwwIDMyIDAgNDA4LjNjMCAxOSA3LjYgMzcuMiAyMSA1MC43czMxLjcgMjEgNTAuNyAyMWwzMDQuNiAwYzE5IDAgMzcuMi03LjYgNTAuNy0yMXMyMS0zMS43IDIxLTUwLjdsMC0zMDQuNmMwLTE5LTcuNi0zNy4yLTIxLTUwLjdzLTMxLjctMjEtNTAuNy0yMXpNMzMyLjQgNDMxLjRjLTcuNy04LjUtMTEuNy0yMC43LTEyLTM2LjZsMzEuMyAwYy4yIDE0LjEgNS4xIDIxLjEgMTQuOCAyMS4xYzQuOSAwIDguNC0xLjYgMTAuNS00LjdjMi0zLjEgMy04IDMtMTQuOGMwLTUuNC0xLjMtOS45LTQtMTMuNGMtMy41LTQuMi04LjEtNy41LTEzLjItOS41TDM1MS4yIDM2OGMtMTAuMy00LjktMTcuOC0xMC44LTIyLjUtMTcuNmMtNC41LTYuOC02LjctMTYuMy02LjctMjguNGMwLTEzLjYgNC0yNC42IDExLjgtMzMuMWM4LjEtOC41IDE5LjEtMTIuNyAzMy4yLTEyLjdjMTMuNiAwIDI0LjEgNC4yIDMxLjUgMTIuNWM3LjUgOC40IDExLjUgMjAuMyAxMS44IDM1LjlsLTMwLjEgMGMuMi01LjEtLjktMTAuMi0zLTE0LjhjLTEuNy0zLjQtNS01LjEtMTAtNS4xYy04LjggMC0xMy4yIDUuMi0xMy4yIDE1LjdjMCA1LjMgMS4xIDkuNCAzLjIgMTIuNmMzLjEgMy41IDcgNi4yIDExLjQgNy44bDExLjEgNC45YzExLjUgNS4zIDE5LjcgMTEuNyAyNC44IDE5LjRjNS4xIDcuNyA3LjYgMTggNy42IDMxYzAgMTUuNS00IDI3LjQtMTIuMyAzNS43Yy04LjIgOC4zLTE5LjUgMTIuNS0zNC4xIDEyLjVzLTI1LjYtNC4yLTMzLjQtMTIuN3ptLTEwMSAwYy03LjctOC41LTExLjctMjAuNy0xMi0zNi42bDMxLjMgMGMuMiAxNC4xIDUuMSAyMS4xIDE0LjggMjEuMWM0LjkgMCA4LjQtMS42IDEwLjQtNC43YzItMy4xIDMtOCAzLTE0LjhjMC01LjQtMS4zLTkuOS0zLjktMTMuNGMtMy41LTQuMi04LjEtNy41LTEzLjItOS41TDI1MC4yIDM2OGMtMTAuMy00LjktMTcuOC0xMC44LTIyLjUtMTcuNmMtNC41LTYuOC02LjctMTYuMy02LjctMjguNGMwLTEzLjYgNC0yNC42IDExLjgtMzMuMWM4LjEtOC41IDE5LjEtMTIuNyAzMy4yLTEyLjdjMTMuNiAwIDI0LjEgNC4yIDMxLjQgMTIuNWM3LjYgOC40IDExLjUgMjAuMyAxMS45IDM1LjlsLTMwLjEgMGMuMi01LjEtLjktMTAuMi0zLTE0LjhjLTEuNy0zLjQtNS01LjEtMTAtNS4xYy04LjggMC0xMy4yIDUuMi0xMy4yIDE1LjdjMCA1LjMgMS4xIDkuNCAzLjIgMTIuNmMzLjEgMy41IDcgNi4yIDExLjQgNy44bDExLjEgNC45YzExLjUgNS4zIDE5LjcgMTEuNyAyNC44IDE5LjRjNS4xIDcuNyA3LjYgMTggNy42IDMxYzAgMTUuNS00LjEgMjcuNC0xMi4zIDM1LjdzLTE5LjUgMTIuNS0zNC4xIDEyLjVzLTI1LjYtNC4yLTMzLjQtMTIuN3ptLTEwNS42IDEuMWMtOC40LTcuNy0xMi41LTE5LjItMTIuNS0zNC41bDAtNzUuNGMwLTE1LjIgNC40LTI2LjcgMTMuMi0zNC42YzguOS03LjggMjAuNy0xMS44IDM1LjItMTEuOGMxNC4xIDAgMjUuMiA0IDMzLjQgMTJjOC4zIDggMTIuNSAyMCAxMi41IDM1LjlsMCA2LTMzLjEgMCAwLTUuOGMwLTYuMS0xLjMtMTAuNy00LTEzLjZjLTEuMS0xLjUtMi42LTIuNy00LjMtMy41cy0zLjUtMS4yLTUuNC0xLjFjLTUuNCAwLTkuMiAxLjgtMTEuNCA1LjZjLTIuMyA1LjItMy4zIDEwLjgtMyAxNi40bDAgNjUuNWMwIDEzLjcgNC44IDIwLjYgMTQuNCAyMC44YzQuNSAwIDcuOS0xLjYgMTAuMi00LjhjMi41LTQuMSAzLjctOC44IDMuNS0xMy42bDAtNC45IDMzLjEgMCAwIDUuMWMwIDEwLjYtMi4xIDE5LjUtNi4yIDI2LjZjLTQgNi45LTkuOSAxMi41LTE3LjEgMTZjLTcuNyAzLjctMTYuMSA1LjUtMjQuNiA1LjNjLTE0LjIgMC0yNS41LTMuOS0zMy44LTExLjZ6Il0KICAgIH07CiAgICBmYUhhc2hub2RlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhhc2hub2RlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0OTkiLCAiTTM1LjcgMTcxLjFjLTQ2LjkgNDYtNDYuOSAxMjIuOSAwIDE2OS44TDE3MS42IDQ3Ni44YzQ2IDQ2LjkgMTIyLjkgNDYuOSAxNjkuOCAwTDQ3Ny4zIDM0MC45YzQ2LjktNDYuOSA0Ni45LTEyMy44IDAtMTY5LjhMMzQxLjQgMzUuMmMtNDYuOS00Ni45LTEyMy44LTQ2LjktMTY5LjggMEwzNS43IDE3MS4xek0xOTYgMTk2LjVhODQuNSA4NC41IDAgMSAxIDEyMCAxMTkgODQuNSA4NC41IDAgMSAxIC0xMjAtMTE5eiJdCiAgICB9OwogICAgZmFSZWRkaXRBbGllbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZWRkaXQtYWxpZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI4MSIsICJNMzczIDEzOC42Yy0yNS4yIDAtNDYuMy0xNy41LTUxLjktNDEtMzAuNiA0LjMtNTQuMiAzMC43LTU0LjIgNjIuNGwwIC4yYzQ3LjQgMS44IDkwLjYgMTUuMSAxMjQuOSAzNi4zIDEyLjYtOS43IDI4LjQtMTUuNSA0NS41LTE1LjUgNDEuMyAwIDc0LjcgMzMuNCA3NC43IDc0LjcgMCAyOS44LTE3LjQgNTUuNS00Mi43IDY3LjUtMi40IDg2LjgtOTcgMTU2LjYtMjEzLjIgMTU2LjZTNDUuNSA0MTAuMSA0MyAzMjMuNGMtMjUuNC0xMS45LTQzLTM3LjctNDMtNjcuNyAwLTQxLjMgMzMuNC03NC43IDc0LjctNzQuNyAxNy4yIDAgMzMgNS44IDQ1LjcgMTUuNiAzNC0yMS4xIDc2LjgtMzQuNCAxMjMuNy0zNi40bDAtLjNjMC00NC4zIDMzLjctODAuOSA3Ni44LTg1LjUgNC45LTI0LjIgMjYuMy00Mi40IDUyLjEtNDIuNCAyOS40IDAgNTMuMyAyMy45IDUzLjMgNTMuM3MtMjMuOSA1My4zLTUzLjMgNTMuM3pNMTU3LjUgMjU1LjNjLTIwLjkgMC0zOC45IDIwLjgtNDAuMiA0Ny45czE3LjEgMzguMSAzOCAzOC4xIDM2LjYtOS44IDM3LjgtMzYuOS0xNC43LTQ5LjEtMzUuNy00OS4xbC4xIDB6TTM5NSAzMDMuMWMtMS4yLTI3LjEtMTkuMi00Ny45LTQwLjItNDcuOXMtMzYuOSAyMi0zNS43IDQ5LjEgMTYuOSAzNi45IDM3LjggMzYuOSAzOS4zLTExIDM4LTM4LjFsLjEgMHptLTYwLjEgNzAuOGMxLjUtMy42LTEtNy43LTQuOS04LjEtMjMtMi4zLTQ3LjktMy42LTczLjgtMy42cy01MC44IDEuMy03My44IDMuNmMtMy45IC40LTYuNCA0LjUtNC45IDguMSAxMi45IDMwLjggNDMuMyA1Mi40IDc4LjcgNTIuNHM2NS44LTIxLjYgNzguNy01Mi40eiJdCiAgICB9OwogICAgZmFUaWt0b2sgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGlrdG9rIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwN2IiLCAiTTQ0OC41IDIwOS45Yy00NCAuMS04Ny0xMy42LTEyMi44LTM5LjJsMCAxNzguN2MwIDMzLjEtMTAuMSA2NS40LTI5IDkyLjZzLTQ1LjYgNDgtNzYuNiA1OS42LTY0LjggMTMuNS05Ni45IDUuMy02MC45LTI1LjktODIuNy01MC44LTM1LjMtNTYtMzktODguOSAyLjktNjYuMSAxOC42LTk1LjIgNDAtNTIuNyA2OS42LTY3LjcgNjIuOS0yMC41IDk1LjctMTZsMCA4OS45Yy0xNS00LjctMzEuMS00LjYtNDYgLjRzLTI3LjkgMTQuNi0zNyAyNy4zLTE0IDI4LjEtMTMuOSA0My45IDUuMiAzMSAxNC41IDQzLjcgMjIuNCAyMi4xIDM3LjQgMjYuOSAzMS4xIDQuOCA0Ni0uMSAyOC0xNC40IDM3LjItMjcuMSAxNC4yLTI4LjEgMTQuMi00My44bDAtMzQ5LjQgODggMGMtLjEgNy40IC42IDE0LjkgMS45IDIyLjIgMy4xIDE2LjMgOS40IDMxLjkgMTguNyA0NS43czIxLjMgMjUuNiAzNS4yIDM0LjZjMTkuOSAxMy4xIDQzLjIgMjAuMSA2NyAyMC4xbDAgODcuNHoiXQogICAgfTsKICAgIGZhV29yZHByZXNzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndvcmRwcmVzcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTlhIiwgIk02MS43IDE2OS40bDEwMS41IDI3OGMtNzEtMzQuNC0xMTkuOS0xMDcuMi0xMTkuOS0xOTEuNCAwLTMwLjkgNi42LTYwLjEgMTguNC04Ni42em0zMzcuOSA3NS45YzAtMjYuMy05LjQtNDQuNS0xNy41LTU4LjctMTAuOC0xNy41LTIwLjktMzIuNC0yMC45LTQ5LjkgMC0xOS42IDE0LjgtMzcuOCAzNS43LTM3LjggLjkgMCAxLjggLjEgMi44IC4yLTM3LjktMzQuNy04OC4zLTU1LjktMTQzLjctNTUuOS03NC4zIDAtMTM5LjcgMzguMS0xNzcuOCA5NS45IDUgLjIgOS43IC4zIDEzLjcgLjMgMjIuMiAwIDU2LjctMi43IDU2LjctMi43IDExLjUtLjcgMTIuOCAxNi4yIDEuNCAxNy41IDAgMC0xMS41IDEuMy0yNC4zIDJsNzcuNSAyMzAuNCA0Ni42LTEzOS42LTMzLjEtOTAuOGMtMTEuNS0uNy0yMi4zLTItMjIuMy0yLTExLjUtLjctMTAuMS0xOC4yIDEuMy0xNy41IDAgMCAzNS4xIDIuNyA1NiAyLjcgMjIuMiAwIDU2LjctMi43IDU2LjctMi43IDExLjUtLjcgMTIuOCAxNi4yIDEuNCAxNy41IDAgMC0xMS41IDEuMy0yNC4zIDJsNzYuOSAyMjguNyAyMS4yLTcwLjljOS0yOS40IDE2LTUwLjUgMTYtNjguN3pNMjU5LjcgMjc0LjZMMTk1LjkgNDYwLjFjMTkuMSA1LjYgMzkuMiA4LjcgNjAuMSA4LjcgMjQuOCAwIDQ4LjUtNC4zIDcwLjYtMTIuMS0uNi0uOS0xLjEtMS45LTEuNS0yLjlMMjU5LjcgMjc0LjZ6bTE4My0xMjAuN2MuOSA2LjggMS40IDE0IDEuNCAyMS45IDAgMjEuNi00IDQ1LjgtMTYuMiA3Ni4ybC02NSAxODcuOWM2My4zLTM2LjkgMTA1LjgtMTA1LjQgMTA1LjgtMTgzLjkgMC0zNy05LjQtNzEuOC0yNi0xMDIuMXpNOCAyNTZhMjQ4IDI0OCAwIDEgMSA0OTYgMCAyNDggMjQ4IDAgMSAxIC00OTYgMHptNDg0LjYgMGEyMzYuNiAyMzYuNiAwIDEgMCAtNDczLjIgMCAyMzYuNiAyMzYuNiAwIDEgMCA0NzMuMiAweiJdCiAgICB9OwogICAgZmFJZGVhbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJpZGVhbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDEzIiwgIk05My44IDE2NS41YTQ5LjEgNDkuMSAwIDEgMCAwIDk4LjEgNDkuMSA0OS4xIDAgMSAwIDAtOTguMXpNNTQuMyA0MjUuOGw3OC45IDAgMC0xNDAuNS03OC45IDAgMCAxNDAuNXpNMjA1LjggMjE0LjJjMC0yMC0xMC0yMi41LTE4LjctMjIuNWwtMTQgMCAwIDQ1LjggMTQgMGM5LjcgMCAxOC43LTIuOCAxOC43LTIzLjN6bTIwMS43IDQ2bDAtOTEuMyAyMi44IDAgMCA2OC42IDMzLjcgMEM0NTQuNiAxMTMuMSAzNTYuOCA4Ni4yIDI2Ny44IDg2LjJsLTk0LjggMCAwIDgyLjggMTQgMGMyNS42IDAgNDEuNSAxNy40IDQxLjUgNDUuMyAwIDI4LjgtMTUuNSA0Ni00MS41IDQ2bC0xNCAwIDAgMTY1LjYgOTQuOCAwYzE0NC42IDAgMTk0LjktNjcuMiAxOTYuNy0xNjUuNmwtNTcuMSAwem0tMTA5LjggMGwtNTYuMiAwIDAtOTEuMiA1NC40IDAgMCAyMi43LTMxLjcgMCAwIDEwLjYgMzAgMCAwIDIyLjctMzAgMCAwIDEyLjUgMzMuNSAwIDAgMjIuN3ptNzQuNyAwbC01LjItMTcuNy0yOS43IDAtNS4yIDE3LjctMjMuNyAwIDI3LjUtOTEuMyAzMi4zIDAgMjcuNSA5MS4zLTIzLjcgMHpNMjY3LjggMzJMLjEgMzIgLjEgNDgwIDI2Ny44IDQ4MGMxNjEuOCAwIDI1MS03OS43IDI1MS0yMjQuNSAwLTgzLjUtMzIuNi0yMjMuNS0yNTEtMjIzLjV6bTAgNDI2LjlsLTI0Ni42IDAgMC00MDUuOSAyNDYuNiAwYzE0Mi4xIDAgMjI5LjkgNjQuNiAyMjkuOSAyMDIuNCAwIDEzNC4xLTgxIDIwMy40LTIyOS45IDIwMy40em04My45LTI2NC45bC03LjUgMjUuOCAxNi40IDAtNy41LTI1LjgtMS40IDB6Il0KICAgIH07CiAgICBmYVBpZWRQaXBlclBwID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBpZWQtcGlwZXItcHAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFhNyIsICJNMjA1LjMgMTc0LjZjMCAyMS4xLTE0LjIgMzguMS0zMS43IDM4LjEtNy4xIDAtMTIuOC0xLjItMTcuMi0zLjdsMC02OGM0LjQtMi43IDEwLjEtNC4yIDE3LjItNC4yIDE3LjUgMCAzMS43IDE2LjkgMzEuNyAzNy44em01Mi42IDY3Yy03LjEgMC0xMi44IDEuNS0xNy4yIDQuMmwwIDY4YzQuNCAyLjUgMTAuMSAzLjcgMTcuMiAzLjcgMTcuNCAwIDMxLjctMTYuOSAzMS43LTM3LjggMC0yMS4xLTE0LjMtMzguMS0zMS43LTM4LjF6TTQ0OCA4MGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsMzUyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTE4NSAyNTUuMWM0MSAwIDc0LjItMzUuNiA3NC4yLTc5LjZTMjI2IDk1LjkgMTg1IDk1LjljLTEyIDAtMjQuMSAzLjItMzQuNiA4LjhsLTQ1LjcgMCAwIDIwNi4zIDUxLjgtMTAuMSAwLTUwLjZjOC42IDMuMSAxOC4xIDQuOCAyOC41IDQuOHptMTU4LjQgMjUuM2MwLTQ0LTMzLjItNzkuNi03My45LTc5LjYtMy4yIDAtNi40IC4yLTkuNiAuNy0zLjcgMTIuNS0xMC4xIDIzLjgtMTkuMiAzMy40LTEzLjggMTUtMzIuMiAyMy44LTUxLjggMjQuOGwwIDE1Ni4zIDUxLjgtMTAuMSAwLTUwLjZjOC42IDMuMiAxOC4yIDQuNyAyOC43IDQuNyA0MC44IDAgNzQtMzUuNiA3NC03OS42eiJdCiAgICB9OwogICAgZmFVc3N1bm5haCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1c3N1bm5haCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDA3IiwgIk00OTYuOSAyNjguMWMwIDYzLjktMjUuNCAxMjUuMi03MC42IDE3MC4zUzMxOS45IDUwOSAyNTYgNTA5IDEzMC44IDQ4My41IDg1LjcgNDM4LjQgMTUuMSAzMzEuOSAxNS4xIDI2OGMwLTYzLjkgMjUuNC0xMjUuMiA3MC42LTE3MC40UzE5Mi4yIDI3LjEgMjU2LjEgMjcuMSAzODEuMyA1Mi40IDQyNi41IDk3LjYgNDk3IDIwNC4xIDQ5NyAyNjhsLS4xIC4xek0zOS41IDI2OGMtLjYgMjguOCA0LjUgNTcuNSAxNS4xIDg0LjNzMjYuNCA1MS4yIDQ2LjYgNzEuOCA0NC4yIDM3IDcwLjggNDguMSA1NS4xIDE2LjkgODMuOSAxNi45IDU3LjQtNS44IDgzLjktMTYuOSA1MC42LTI3LjUgNzAuOC00OC4xIDM2LTQ1IDQ2LjYtNzEuOCAxNS43LTU1LjUgMTUuMS04NC4zYy42LTI4LjgtNC41LTU3LjUtMTUuMS04NC4zcy0yNi40LTUxLjItNDYuNi03MS44LTQ0LjItMzctNzAuOC00OC4xLTU1LjEtMTYuOS04My45LTE2LjktNTcuNCA1LjgtODMuOSAxNi45LTUwLjYgMjcuNS03MC44IDQ4LjEtMzYgNDUtNDYuNiA3MS44LTE1LjcgNTUuNS0xNS4xIDg0LjN6bTM4NS45IDYzLjNjLTEyLjcgMC0yMS42LTEuOS0yNi43LTUuOS01LjUtNC4zLTguMi0xMi4zLTguMi0yMy44bDAtOTYuNWMwLTYuNS01LjItMjAuMi0xNS43LTQxLjIgNyAwIDE3LTkuMSAzMC0yNy4ybDAgMTQ3LjhjMCAxMSAyLjQgMTkuNCA3IDI1LjMgMy43IDQuNyAxMC4xIDguOSAxOSAxMi42IDEuMiAuNCAyLjYgLjkgNC4xIDEuNCAyLjkgLjkgNi4zIDIuMSAxMC4zIDMuNS0xLjggMi43LTguMyA0LTE5LjkgNGwuMSAwem0tMjE5IDBjLTEuMyAyLjQtMy42IDUuNS02LjggOS40bC0xOC41IDIyLjVjLTEtNi4xLTQtMTMtOS4zLTIwLjZzLTkuNy0xMS40LTEzLjQtMTEuNGwtODkuOCAwYzMuMy01LjMgNC45LTguOCA0LjktMTAuOHMtLjgtNS4zLTIuNC05LjdjLTEuNS00LjQtMi40LTguNS0yLjQtMTIuNCAwLTcuNCAyLjEtMTMuOSA2LjMtMTkuM2wyMC0yNS42LTcuMS0xNy43IDE2LjEtMTkuOCA2LjcgMTYuOCA4LTEwLjNjLTEuOCA2LjQtMi42IDEyLjMtMi42IDE3LjcgMCA0LjIgMi44IDEzLjMgOC4zIDI3LjNsMTYuMiA0MC43IDE3LjcgMGMyLjggLjQgNy43IDUgMTQuNiAxMy45IDEuOCAyLjQgNC4zIDUuOCA3LjcgMTAuMiAxLjQgMS45IDIuOSAzLjkgNC42IDYuMSAxLjMtMi4zIDItNC42IDItNy4xIDAtMi0xLjMtNi42LTQtMTMuNEwxNzggMzA0LjFjLTQtMTAuNi02LjEtMTcuNy02LjEtMjEuMyAwLTYuMyAxLjktMTIuMyA1LjgtMTcuOSAuNS0uNiAxLTEuMyAxLjUtMS45IDQuNC01LjYgOC44LTExLjEgMTMuMy0xNi41LTEuMSA0LjYtMS43IDguNy0xLjcgMTIgMCAzLjcgMS43IDkuOSA1LjEgMTguOGw3LjkgMjAuNGMxLjkgNC43IDMgOC4yIDMuNyAxMC4zbDI1LjkgMC0uOS0yLjZjLTEuNC0zLjktNC03LTcuNy05LjNsMTUuNi0yMC4xIDEyLjMgMzIgMTMuNCAwLTYuMS0xNS44Yy0xLjUtMy45LTQtNy03LjctOS4zbDE1LjctMjAuMSAxNy4zIDQ1LjIgMTMuNCAwLTExLjQtMjkuNGMtMS41LTMuOS00LTctNy43LTkuM2wxNS42LTIwIDIyLjQgNTguNyAyNi4yIDBjMS41IDAgMy0xLjEgNC41LTMuMXMyLjItNC4xIDIuMi02LjNsMC05My41YzAtNi41LTQuNS0yMC4zLTEzLjctNDEuMiA1LjQgMCAxNC4xLTkuMSAyNi4yLTI3LjJsMCAxNjMuNWMwIDcuMiAuNiAxMiAxLjcgMTQuNiAxLjYgMy40IDUuMyA2LjIgMTEuMSA4LjItMy45IDUuNi04LjcgOC41LTE0LjUgOC41bC0xNTQuOCAwLS4xLS4yem0tOTgtNDRjLTIuNy02LjctNC0xMS43LTQtMTUtLjYgMS4yLTIuNCAzLjctNS40IDcuNi0xLjQgMS45LTIuMiAzLjctMi4yIDUuMyAwIDIuNiAuOCA1LjcgMi4yIDkuM2w1LjYgMTMuOWM1IDAgOSAwIDExLjktLjFsLTguMi0yMC45IC4xLS4xem0xMy41LTcyLjRjLTMtNS4yLTctOS4zLTExLjktMTEuOS0zLjUtMS45LTUuMy00LjMtNS4zLTcuNCAwLTIuNCA0LjYtOC42IDE0LTE4LjMgLjIgMy44IDEuOSA3LjYgNC45IDExLjIgMy4xIDMuNiA0LjYgNyA0LjYgMTAuMSAwIDIuNi0yLjEgOC02LjIgMTYuM2wtLjEgMHptLTI3LjYgMGMtMy01LjItNy05LjMtMTEuOS0xMS45LTMuNS0xLjktNS4zLTQuMy01LjMtNy40IDAtMi40IDQuNi04LjYgMTQtMTguMyAuMiAzLjggMS45IDcuNiA0LjkgMTEuMiAzLjEgMy42IDQuNiA3IDQuNiAxMC4xIDAgMi42LTIuMSA4LTYuMiAxNi4zbC0uMSAwem04NyAyNy41Yy0zLTUuMi03LTkuMy0xMS45LTExLjktMy41LTEuOS01LjMtNC4zLTUuMy03LjQgMC0yLjQgNC42LTguNiAxNC0xOC4zIC4yIDMuOCAxLjkgNy42IDQuOSAxMS4yIDMuMSAzLjYgNC42IDcgNC42IDEwLjEgMCAyLjYtMi4xIDgtNi4yIDE2LjNsLS4xIDB6Il0KICAgIH07CiAgICBmYUZvcnRBd2Vzb21lQWx0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZvcnQtYXdlc29tZS1hbHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNhMyIsICJNMjA4IDIzNy40bC0yMi4yIDBjLTIuMSAwLTMuNyAxLjYtMy43IDMuN2wwIDUxLjdjMCAyLjEgMS42IDMuNyAzLjcgMy43bDIyLjIgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC01MS43YzAtMi4xLTEuNi0zLjctMy43LTMuN3ptMTE4LjIgMGwtMjIuMiAwYy0yLjEgMC0zLjcgMS42LTMuNyAzLjdsMCA1MS43YzAgMi4xIDEuNiAzLjcgMy43IDMuN2wyMi4yIDBjMi4xIDAgMy43LTEuNiAzLjctMy43bDAtNTEuN2MtLjEtMi4xLTEuNy0zLjctMy43LTMuN3ptMTMyLTEyNS4xYy0yLjMtMy4yLTQuNi02LjQtNy4xLTkuNS05LjgtMTIuNS0yMC44LTI0LTMyLjgtMzQuNC00LjUtMy45LTkuMS03LjYtMTMuOS0xMS4yLTEuNi0xLjItMy4yLTIuMy00LjgtMy41LTI3LjYtMTkuNi01OS4zLTMzLjctOTMuNi00MC43LTE2LjItMy4zLTMyLjktNS01MC01cy0zMy45IDEuNy01MCA1Yy0zNC4zIDcuMS02NiAyMS4yLTkzLjMgNDAuOC0xLjYgMS4xLTMuMiAyLjMtNC44IDMuNS00LjggMy42LTkuNCA3LjMtMTMuOSAxMS4yLTMgMi42LTUuOSA1LjMtOC44IDhzLTUuNyA1LjUtOC40IDguNGMtNS41IDUuNy0xMC43IDExLjgtMTUuNiAxOC0yLjQgMy4xLTQuOCA2LjMtNy4xIDkuNS0yOC45IDQwLjYtNDUuOCA5MC4xLTQ1LjggMTQzLjYgMCAyIC4xIDQgLjEgNiAuMSAuNyAuMSAxLjMgLjEgMiAuMSAxLjMgLjEgMi43IC4yIDQgMCAuOCAuMSAxLjUgLjEgMi4zIDAgMS4zIC4xIDIuNSAuMiAzLjcgLjEgLjggLjEgMS42IC4yIDIuNCAuMSAxLjEgLjIgMi4zIC4zIDMuNSAwIC44IC4xIDEuNiAuMiAyLjQgLjEgMS4yIC4zIDIuNCAuNCAzLjYgLjEgLjggLjIgMS41IC4zIDIuMyAuMSAxLjMgLjMgMi42IC41IDMuOSAuMSAuNiAuMiAxLjMgLjMgMS45bC45IDUuN2MuMSAuNiAuMiAxLjEgLjMgMS43IC4zIDEuMyAuNSAyLjcgLjggNCAuMiAuOCAuMyAxLjYgLjUgMi40IC4yIDEgLjUgMi4xIC43IDMuMiAuMiAuOSAuNCAxLjcgLjYgMi42IC4yIDEgLjQgMiAuNyAzIC4yIC45IC41IDEuOCAuNyAyLjcgLjMgMSAuNSAxLjkgLjggMi45IC4zIC45IC41IDEuOCAuOCAyLjcgLjIgLjkgLjUgMS45IC44IDIuOHMuNSAxLjggLjggMi43Yy4zIDEgLjYgMS45IC45IDIuOCAuNiAxLjYgMS4xIDMuMyAxLjcgNC45IC40IDEgLjcgMS45IDEgMi44IC4zIDEgLjcgMiAxLjEgMyAuMyAuOCAuNiAxLjUgLjkgMi4zbDEuMiAzYy4zIC43IC42IDEuNSAuOSAyLjIgLjQgMSAuOSAyIDEuMyAzbC45IDIuMWMuNSAxIC45IDIgMS40IDMgLjMgLjcgLjYgMS4zIC45IDIgLjUgMSAxIDIuMSAxLjUgMy4xIC4yIC42IC41IDEuMSAuOCAxLjcgLjYgMS4xIDEuMSAyLjIgMS43IDMuMyAuMSAuMiAuMiAuMyAuMyAuNSAyLjIgNC4xIDQuNCA4LjIgNi44IDEyLjIgLjIgLjQgLjUgLjggLjcgMS4yIC43IDEuMSAxLjMgMi4yIDIgMy4zIC4zIC41IC42IC45IC45IDEuNCAuNiAxLjEgMS4zIDIuMSAyIDMuMiAuMyAuNSAuNiAuOSAuOSAxLjQgLjcgMS4xIDEuNCAyLjEgMi4xIDMuMiAuMiAuNCAuNSAuOCAuOCAxLjIgLjcgMS4xIDEuNSAyLjIgMi4zIDMuMyAuMiAuMiAuMyAuNSAuNSAuNyAzNy41IDUxLjcgOTQuNCA4OC41IDE2MCA5OS40IC45IC4xIDEuNyAuMyAyLjYgLjQgMSAuMiAyLjEgLjQgMy4xIC41czEuOSAuMyAyLjggLjRjMSAuMiAyIC4zIDMgLjQgLjkgLjEgMS45IC4yIDIuOSAuM3MxLjkgLjIgMi45IC4zIDIuMSAuMiAzLjEgLjNjLjkgLjEgMS44IC4xIDIuNyAuMiAxLjEgLjEgMi4zIC4xIDMuNCAuMiAuOCAwIDEuNyAuMSAyLjUgLjEgMS4zIDAgMi42IC4xIDMuOSAuMSAuNyAuMSAxLjQgLjEgMi4xIC4xIDIgLjEgNCAuMSA2IC4xczQtLjEgNi0uMWMuNyAwIDEuNC0uMSAyLjEtLjEgMS4zIDAgMi42IDAgMy45LS4xIC44IDAgMS43LS4xIDIuNS0uMSAxLjEtLjEgMi4zLS4xIDMuNC0uMiAuOSAwIDEuOC0uMSAyLjctLjIgMS0uMSAyLjEtLjIgMy4xLS4zczEuOS0uMiAyLjktLjNjLjktLjEgMS45LS4yIDIuOS0uM3MyLS4zIDMtLjQgMS45LS4zIDIuOC0uNGMxLS4yIDIuMS0uMyAzLjEtLjUgLjktLjEgMS43LS4zIDIuNi0uNCA2NS42LTExIDEyMi41LTQ3LjcgMTYwLjEtMTAyLjQgLjItLjIgLjMtLjUgLjUtLjcgLjgtMS4xIDEuNS0yLjIgMi4zLTMuMyAuMi0uNCAuNS0uOCAuOC0xLjIgLjctMS4xIDEuNC0yLjEgMi4xLTMuMiAuMy0uNSAuNi0uOSAuOS0xLjQgLjYtMS4xIDEuMy0yLjEgMi0zLjIgLjMtLjUgLjYtLjkgLjktMS40IC43LTEuMSAxLjMtMi4yIDItMy4zIC4yLS40IC41LS44IC43LTEuMiAyLjQtNCA0LjYtOC4xIDYuOC0xMi4yIC4xLS4yIC4yLS4zIC4zLS41IC42LTEuMSAxLjEtMi4yIDEuNy0zLjMgLjItLjYgLjUtMS4xIC44LTEuNyAuNS0xIDEtMi4xIDEuNS0zLjEgLjMtLjcgLjYtMS4zIC45LTIgLjUtMSAxLTIgMS40LTNsLjktMi4xYy41LTEgLjktMiAxLjMtMyAuMy0uNyAuNi0xLjUgLjktMi4ybDEuMi0zYy4zLS44IC42LTEuNSAuOS0yLjMgLjQtMSAuNy0yIDEuMS0zcy43LTEuOSAxLTIuOGMuNi0xLjYgMS4yLTMuMyAxLjctNC45IC4zLTEgLjYtMS45IC45LTIuOHMuNS0xLjggLjgtMi43Yy4yLS45IC41LTEuOSAuOC0yLjhzLjYtMS44IC44LTIuN2MuMy0xIC41LTEuOSAuOC0yLjkgLjItLjkgLjUtMS44IC43LTIuNyAuMi0xIC41LTIgLjctMyAuMi0uOSAuNC0xLjcgLjYtMi42IC4yLTEgLjUtMi4xIC43LTMuMiAuMi0uOCAuMy0xLjYgLjUtMi40IC4zLTEuMyAuNi0yLjcgLjgtNCAuMS0uNiAuMi0xLjEgLjMtMS43bC45LTUuN2MuMS0uNiAuMi0xLjMgLjMtMS45IC4xLTEuMyAuMy0yLjYgLjUtMy45IC4xLS44IC4yLTEuNSAuMy0yLjMgLjEtMS4yIC4zLTIuNCAuNC0zLjYgMC0uOCAuMS0xLjYgLjItMi40IC4xLTEuMSAuMi0yLjMgLjMtMy41IC4xLS44IC4xLTEuNiAuMi0yLjQgLjEgMS43IC4xIC41IC4yLS43IDAtLjggLjEtMS41IC4xLTIuMyAuMS0xLjMgLjItMi43IC4yLTQgLjEtLjcgLjEtMS4zIC4xLTIgLjEtMiAuMS00IC4xLTYgMC01My41LTE2LjktMTAzLTQ1LjgtMTQzLjd6TTQ0OCAzNzEuNWMtOS40IDE1LjUtMjAuNiAyOS45LTMzLjYgNDIuOS0yMC42IDIwLjYtNDQuNSAzNi43LTcxLjIgNDgtMTMuOSA1LjgtMjguMiAxMC4zLTQyLjkgMTMuMmwwLTc1LjhjMC01OC42LTg4LjYtNTguNi04OC42IDBsMCA3NS44Yy0xNC43LTIuOS0yOS03LjMtNDIuOS0xMy4yLTI2LjctMTEuMy01MC42LTI3LjQtNzEuMi00OC0xMy0xMy0yNC4yLTI3LjQtMzMuNi00Mi45bDAtNzEuM2MwLTIuMSAxLjYtMy43IDMuNy0zLjdsMjIuMSAwYzIuMSAwIDMuNyAxLjYgMy43IDMuN2wwIDI1LjggMjkuNiAwIDAtMTQ0YzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4xIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgMjUuOSAyOS41IDAgMC0yNS45YzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4yIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgMjUuOSAyOS41IDAgMC0yNS45YzAtNC44IDYuNS0zLjcgOS41LTMuN2wwLTkwLjJjLTQuNC0yLTcuNC02LjctNy40LTExLjUgMC0xNi44IDI1LjQtMTYuOCAyNS40IDAgMCA0LjgtMyA5LjQtNy40IDExLjVsMCAzLjljNi4zLTEuNCAxMi43LTIuMyAxOS4yLTIuMyA5LjQgMCAxOC40IDMuNSAyNi4zIDMuNSA3LjIgMCAxNS4yLTMuNSAxOS40LTMuNSAyLjEgMCAzLjcgMS42IDMuNyAzLjdsMCA0OC40YzAgNS42LTE4LjcgNi41LTIyLjQgNi41LTguNiAwLTE2LjYtMy41LTI1LjQtMy41LTcgMC0xNC4xIDEuMi0yMC44IDIuOGwwIDMwLjdjMyAwIDkuNS0xLjEgOS41IDMuN2wwIDI1LjkgMjkuNSAwIDAtMjUuOWMwLTIuMSAxLjYtMy43IDMuNy0zLjdsMjIuMiAwYzIuMSAwIDMuNyAxLjYgMy43IDMuN2wwIDI1LjkgMjkuNSAwIDAtMjUuOWMwLTIuMSAxLjYtMy43IDMuNy0zLjdsMjIuMSAwYzIuMSAwIDMuNyAxLjYgMy43IDMuN2wwIDE0NCAyOS41IDAgMC0yNS44YzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4yIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgNzEuM3oiXQogICAgfTsKICAgIGZhQnVyb21vYmVsZXhwZXJ0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJidXJvbW9iZWxleHBlcnRlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzN2YiLCAiTTAgMzJsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6TTEyMCAxNTJsLTExMiAwIDAtMTEyIDExMiAwIDAgMTEyek0xNjAgMzJsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6TTI4MCAxNTJsLTExMiAwIDAtMTEyIDExMiAwIDAgMTEyek0zMjAgMzJsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6TTQ0MCAxNTJsLTExMiAwIDAtMTEyIDExMiAwIDAgMTEyek0wIDE5MmwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNMTIwIDMxMmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6bTQwLTEyMGwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNMjgwIDMxMmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6bTQwLTEyMGwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNNDQwIDMxMmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6TTAgMzUybDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek0xMjAgNDcybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnptNDAtMTIwbDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek0yODAgNDcybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnptNDAtMTIwbDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAweiJdCiAgICB9OwogICAgZmFCaWxpYmlsaSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJiaWxpYmlsaSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlM2Q5IiwgIk00ODguNiAxMDQuMWMxNi43IDE4LjEgMjQuNCAzOS43IDIzLjMgNjUuN2wwIDIwMi40Yy0uNCAyNi40LTkuMiA0OC4xLTI2LjUgNjUuMS0xNy4yIDE3LTM5LjEgMjUuOS02NS41IDI2LjdMOTIgNDY0Yy0yNi40LS44LTQ4LjItOS44LTY1LjMtMjcuMi0xNy4xLTE3LjQtMjYtNDAuMy0yNi43LTY4LjZMMCAxNjkuOGMuOC0yNiA5LjctNDcuNiAyNi43LTY1LjcgMTcuMS0xNi4zIDM4LjgtMjUuMyA2NS4zLTI2LjFsMjkuNCAwLTI1LjQtMjUuOGMtNS43LTUuNy04LjYtMTMtOC42LTIxLjhzMi45LTE2LjEgOC42LTIxLjggMTMtOC42IDIxLjktOC42IDE2LjEgMi45IDIxLjkgOC42bDczLjMgNjkuNCA4OCAwIDc0LjUtNjkuNEMzODEuNyAyLjkgMzg5LjIgMCAzOTggMHMxNi4xIDIuOSAyMS45IDguNmM1LjcgNS43IDguNiAxMyA4LjYgMjEuOHMtMi45IDE2LjEtOC42IDIxLjhMMzk0LjYgNzggNDIzLjkgNzhjMjYuNCAuOCA0OCA5LjggNjQuNyAyNi4xem0tMzguOCA2OS43Yy0uNC05LjYtMy43LTE3LjQtMTAuNy0yMy41LTUuMi02LjEtMTQtOS40LTIyLjctOS44bC0zMjAuNCAwYy05LjYgLjQtMTcuNCAzLjctMjMuNiA5LjgtNi4xIDYuMS05LjQgMTMuOS05LjggMjMuNWwwIDE5NC40YzAgOS4yIDMuMyAxNyA5LjggMjMuNXMxNC40IDkuOCAyMy42IDkuOGwzMjAuNCAwYzkuMiAwIDE3LTMuMyAyMy4zLTkuOHM5LjctMTQuMyAxMC4xLTIzLjVsMC0xOTQuNHpNMTg1LjUgMjE2LjVjNi4zIDYuMyA5LjcgMTQuMSAxMC4xIDIzLjJsMCAzMy4zYy0uNCA5LjItMy43IDE2LjktOS44IDIzLjItNi4yIDYuMy0xNCA5LjUtMjMuNiA5LjVzLTE3LjUtMy4yLTIzLjYtOS41LTkuNC0xNC05LjgtMjMuMmwwLTMzLjNjLjQtOS4xIDMuOC0xNi45IDEwLjEtMjMuMnMxMy4yLTkuNiAyMy4zLTEwYzkuMiAuNCAxNyAzLjcgMjMuMyAxMHptMTkxLjUgMGM2LjMgNi4zIDkuNyAxNC4xIDEwLjEgMjMuMmwwIDMzLjNjLS40IDkuMi0zLjcgMTYuOS05LjggMjMuMnMtMTQgOS41LTIzLjYgOS41LTE3LjQtMy4yLTIzLjYtOS41Yy03LTYuMy05LjQtMTQtOS43LTIzLjJsMC0zMy4zYy4zLTkuMSAzLjctMTYuOSAxMC0yMy4yczE0LjEtOS42IDIzLjMtMTBjOS4yIC40IDE3IDMuNyAyMy4zIDEweiJdCiAgICB9OwogICAgZmFOZW9zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm5lb3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjYxMiIsICJNMzgzLjggNTEybC05NS4xIDAtMTA4LjItMTU0LjUgMCA5MS4xLTg2LjQgNjMuNC05Ny43IDAgMC00ODIuMiA0MC41LTI5LjggMTA4IDAgMTIzLjcgMTc2LjEgMC0xMTIuNyA4Ni40LTYzLjQgOTcuNyAwIDAgNDYxLjUtNjguOSA1MC41ek03LjIgMzUuM2wwIDQ2MC43IDcyLTUyLjkgMC0yNDkuMSAyMTUuNSAzMDcuNiA4NC44IDAgNTIuNC0zOC4yLTc4LjMgMC0zMTYuMS00NTAuNS0zMC4yIDIyLjN6TTg5LjcgNTAxLjlsODAtNTguOCAwLTEwMS03OS44LTExNC40IDAgMjIwLjktNzIuNiA1My4zIDcyLjMgMCAwIDB6TTQ5IDEwLjhsMzEwLjYgNDQyLjYgODIuNCAwIDAtNDQyLjYtNzkuOCAwIDAgMzE3LjYtMjIyLjktMzE3LjYtOTAuMyAwek0yNzkuNCAxOTEuNmw3MiAxMDIuOCAwLTI3OC41LTcyIDUzIDAgMTIyLjd6Il0KICAgIH07CiAgICBmYURldiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkZXYiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjZjYyIsICJNMTIwLjEgMjA4LjNjLTMuOS0yLjktNy44LTQuMy0xMS42LTQuM2wtMTcuNCAwIDAgMTA0LjUgMTcuNCAwYzMuOSAwIDcuOC0xLjQgMTEuNi00LjNzNS44LTcuMyA1LjgtMTMuMWwwLTY5LjdjMC01LjgtMi0xMC4yLTUuOC0xMy4xek00MDQuMSAzMkw0My45IDMyQzE5LjcgMzIgLjEgNTEuNiAwIDc1LjhMMCA0MzYuMkMuMSA0NjAuNCAxOS43IDQ4MCA0My45IDQ4MGwzNjAuMiAwYzI0LjIgMCA0My44LTE5LjYgNDMuOS00My44bDAtMzYwLjRDNDQ3LjkgNTEuNiA0MjguMyAzMiA0MDQuMSAzMnpNMTU0LjIgMjkxLjJjMCAxOC44LTExLjYgNDcuMy00OC40IDQ3LjNsLTQ2LjQgMCAwLTE2NS41IDQ3LjQgMGMzNS40IDAgNDcuNCAyOC41IDQ3LjQgNDcuM2wwIDcwLjl6bTEwMC43LTg4LjdsLTUzLjMgMCAwIDM4LjQgMzIuNiAwIDAgMjkuNi0zMi42IDAgMCAzOC40IDUzLjMgMCAwIDI5LjYtNjIuMiAwYy0xMS4yIC4zLTIwLjQtOC41LTIwLjctMTkuN2wwLTEyNS4xYy0uMy0xMS4xIDguNi0yMC40IDE5LjctMjAuN2w2My4yIDAgMCAyOS41ek0zNTguNSAzMTcuOGMtMTMuMiAzMC43LTM2LjggMjQuNi00Ny40IDBsLTM4LjUtMTQ0LjggMzIuNiAwIDI5LjcgMTEzLjcgMjkuNi0xMTMuNyAzMi42IDAtMzguNSAxNDQuOHoiXQogICAgfTsKICAgIGZhSG90amFyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhvdGphciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2IxIiwgIk0zNjEuOCAwYzAgMTMxLjYtODAuNyAxNzYuOC0xNDAuMiAyMDkuNC0uNiAuMy0xLjEgLjYtMS42IC45LTUzLjggMzAuMi04OC43IDQ5LjgtODkuNiAxMjJsLTk4LjEgMGMwLTEzMS41IDgwLjctMTc2LjcgMTQwLjItMjA5LjMgNTQuOC0yOS44IDkwLjMtNTAgOTAuMy0xMjNsOTkgMHpNMzAxLjMgMzAyLjZjNTQuOC0yOS44IDkwLjMtNTAgOTAuMy0xMjNsOTggMGMwIDEzMS42LTgwLjcgMTc2LjctMTQwLjIgMjA5LjQtNTQuOCAyOS44LTkwLjMgNTAtOTAuMyAxMjNsLTk4IDBjMC0xMzEuNiA4MC43LTE3Ni44IDE0MC4yLTIwOS40eiJdCiAgICB9OwogICAgZmFEb2NodWIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZG9jaHViIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzOTQiLCAiTTQxMy45IDE2MEwyNzIgMTYwIDI3MiAxOS42IDQxMy45IDE2MHpNMzIwIDE5MmwwIDEzMGMwIDY2LjgtMzYuNSAxMDAuMS0xMTMuMyAxMDAuMWwtOTQuNyAwIDAtMzM3LjMgOTQuNyAwYzEyIDAgMjMuMSAuOCAzMy4xIDIuNWwwLTg0QzIyOC45IDEuMSAyMTcuNCAwIDIwNS4yIDBMMTYgMCAxNiA1MTIgMjA1LjIgNTEyQzM0NS43IDUxMiA0MTYgNDQ3LjQgNDE2IDMxOC4xbDAtMTI2LjEtOTYgMHoiXQogICAgfTsKICAgIGZhVmltZW8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidmltZW8iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQwYSIsICJNNDAzLjIgMzJMNDQuOCAzMkMyMC4xIDMyIDAgNTIuMSAwIDc2LjhMMCA0MzUuMkMwIDQ1OS45IDIwLjEgNDgwIDQ0LjggNDgwbDM1OC40IDBjMjQuNyAwIDQ0LjgtMjAuMSA0NC44LTQ0LjhsMC0zNTguNEM0NDggNTIuMSA0MjcuOSAzMiA0MDMuMiAzMnpNMzc3IDE4MC44Yy0xLjQgMzEuNS0yMy40IDc0LjctNjYgMTI5LjQtNDQgNTcuMi04MS4zIDg1LjgtMTExLjcgODUuOC0xOC45IDAtMzQuOC0xNy40LTQ3LjktNTIuMy0yNS41LTkzLjMtMzYuNC0xNDgtNTcuNC0xNDgtMi40IDAtMTAuOSA1LjEtMjUuNCAxNS4yTDUzLjQgMTkxLjNjMzcuMy0zMi44IDcyLjktNjkuMiA5NS4yLTcxLjIgMjUuMi0yLjQgNDAuNyAxNC44IDQ2LjUgNTEuNyAyMC43IDEzMS4yIDI5LjkgMTUxIDY3LjYgOTEuNiAxMy41LTIxLjQgMjAuOC0zNy43IDIxLjgtNDguOSAzLjUtMzMuMi0yNS45LTMwLjktNDUuOC0yMi40IDE1LjktNTIuMSA0Ni4zLTc3LjQgOTEuMi03NiAzMy4zIC45IDQ5IDIyLjUgNDcuMSA2NC43eiJdCiAgICB9OwogICAgZmFNYXhjZG4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWF4Y2RuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxMzYiLCAiTTQ2MS4xIDQ0Mi43bC05Ny40IDAgNTEuOS0yNDIuN2MyLjMtMTAuMiAuOS0xOS41LTQuNC0yNS43LTUtNi4xLTEzLjctOS42LTI0LjItOS42bC00OS4zIDAtNTkuNSAyNzgtOTcuNCAwIDU5LjUtMjc4LTgzLjQgMC01OS41IDI3OC05Ny40IDAgNTkuNS0yNzgtNDQuNi05NS40IDM3Mi4xIDBjMzkuNCAwIDc1LjMgMTYuMyA5OC4zIDQ0LjkgMjMuMyAyOC42IDMxLjggNjcuNCAyMy42IDEwNS45TDQ2MS4xIDQ0Mi43eiJdCiAgICB9OwogICAgZmFTcXVhcmVGb250QXdlc29tZVN0cm9rZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZm9udC1hd2Vzb21lLXN0cm9rZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJmb250LWF3ZXNvbWUtYWx0Il0sICJmMzVjIiwgIk02NCA2NEM0Ni4zIDY0IDMyIDc4LjMgMzIgOTZsMCAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMjBjMC0xNy43LTE0LjMtMzItMzItMzJMNjQgNjR6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0xNTQgNThjMCA5LjMtNC44IDE3LjQtMTIuMSAyMmwxODguOSAwYzcuMyAwIDEzLjIgNS45IDEzLjIgMTMuMiAwIDEuOC0uNCAzLjctMS4xIDUuNEwzMTIgMjY0IDM0Mi45IDMzMy40Yy44IDEuNyAxLjEgMy41IDEuMSA1LjQgMCA3LjMtNS45IDEzLjItMTMuMiAxMy4ybC0xODYuOCAwIDAgMzItMzIgMCAwLTIwOS41Yy02LjEtNC44LTEwLTEyLjItMTAtMjAuNSAwLTE0LjQgMTEuNi0yNiAyNi0yNnMyNiAxMS42IDI2IDI2eiJdCiAgICB9OwogICAgZmFGb250QXdlc29tZUFsdCA9IGZhU3F1YXJlRm9udEF3ZXNvbWVTdHJva2U7CiAgICBmYVNwZWFrYXAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3BlYWthcCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2YzIiwgIk02NC40IDM5MS44Qy0xNSAzMDMuNi03LjYgMTY3LjQgODEuMSA4Ny42czIyNC44LTczIDMwNC4yIDE1LjIgNzIgMjI0LjQtMTYuNiAzMDQuMWMtMTguNyAxNi45IDY0IDQzLjEgNDIgNTIuMy04Mi4xIDM0LjItMjUzLjkgMzUtMzQ2LjItNjcuNWwwIDB6TTI3Ny43IDE4MC4ybDM4LjUtNDAuOWMtOS42LTguOS0zMi0yNi44LTc2LjItMjcuNi01Mi4zLS45LTk1LjkgMjguMy05Ni44IDgwLS4yIDExLjMgLjMgMzYuNyAyOS40IDU0LjggMzQuNSAyMS40IDg2LjUgMjEuNSA4NiA1Mi4zLS40IDIxLjMtMjYuNCAyNS44LTM4LjYgMjUuNi0zIDAtMzAuMi0uNS00Ny42LTI0LjZsLTQwIDQyLjZjMjguMiAyNyA1OSAzMi42IDgzLjUgMzMgMTAuMiAuMiA5Ni40IC4zIDk3LjgtODEgLjMtMTUuOC0yLjEtMzkuNy0yOC45LTU2LjYtMzQuNC0yMS42LTg1LTE5LjQtODQuNC00OS43IC40LTIzLjMgMzEtMjUuNCAzNy41LTI1LjMgLjQgMCAyNi42IC4zIDM5LjYgMTcuNGwwIDB6Il0KICAgIH07CiAgICBmYUZhbnRhc3lGbGlnaHRHYW1lcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmYW50YXN5LWZsaWdodC1nYW1lcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNmRjIiwgIk0yNTYgMzIuOUwzMi45IDI1NiAyNTYgNDc5LjEgNDc5LjEgMjU2IDI1NiAzMi45ek04OC4zIDI1NS44YzItMiAxMS45LTEyLjMgOTYuNS05Ny41IDQxLjQtNDEuOCA4Ni4yLTQzLjggMTE5LjgtMTguNyAyNC42IDE4LjQgNjIuMSA1OC45IDYyLjEgNTkgLjcgLjcgMS4xIDIuOSAuNiAzLjQtMTEuMyAxMS44LTIyLjcgMjMuNS0zMy41IDM0LjctMzQuMi0zMi4zLTQwLjUtMzguMi00OC41LTQ0LTE3LjgtMTIuNy00MS40LTEwLjEtNTcgNS4xLTIuMiAyLjEtMS44IDMuNCAuMSA1LjQgMi45IDIuOSAyOC4xIDI4LjMgMzUuMSAzNS44LTExLjkgMTEuNi0yMy43IDIzLTM1LjcgMzQuNy0xMi0xMi41LTI0LjUtMjUuNS0zNi41LTM4LjEtMjEuNCAyMS4xLTQxLjcgNDEuMS02MS44IDYxTDg4LjMgMjU1Ljh6TTMyMy4yIDM1Ny40Yy0zNS41IDM1LjQtNzguMSAzOC4xLTEwNyAyMC41LTIyLjEtMTMuNS0zOS40LTMyLjEtNzIuOS02Ni44IDEyLTEyLjQgMjMuOC0yNC40IDM1LjQtMzYuMyAzMyAzMS45IDM3LjEgMzYgNDQuNyA0Mi4xIDE4LjUgMTQuNyA0Mi41IDEzLjcgNTkuMy0xLjggMy43LTMuNCAzLjctMy42IC4xLTcuMi0xMC42LTEwLjctMjEuMi0yMS40LTMxLjgtMzIuMi0xLjMtMS4zLTMtMi41LS44LTQuNyAxMC44LTEwLjcgMjEuNS0yMS41IDMyLjItMzIuMyAuMy0uMyAuNi0uNCAxLjktMS4xIDEyLjQgMTIuOSAyNC45IDI1LjkgMzcuMiAzOC44IDIxLTIwLjcgNDEuMi00MC43IDYxLjMtNjAuNCAxMy43IDEzLjQgMjcuMSAyNi42IDQwLjkgNDAtMjAuMiAyMC45LTgxLjcgODIuNy0xMDAuNSAxMDEuNXpNMjU2IDBMMCAyNTYgMjU2IDUxMiA1MTIgMjU2IDI1NiAwek0xNiAyNTZMMjU2IDE2IDQ5NiAyNTYgMjU2IDQ5NiAxNiAyNTZ6Il0KICAgIH07CiAgICBmYUxpbnV4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxpbnV4IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxN2MiLCAiTTIyMC45IDEyMy4zYzEgLjUgMS44IDEuNyAzIDEuNyAxLjEgMCAyLjgtLjQgMi45LTEuNSAuMi0xLjQtMS45LTIuMy0zLjItMi45LTEuNy0uNy0zLjktMS01LjUtLjEtLjQgLjItLjggLjctLjYgMS4xIC4zIDEuMyAyLjMgMS4xIDMuNCAxLjd6TTE5OSAxMjVjMS4yIDAgMi0xLjIgMy0xLjcgMS4xLS42IDMuMS0uNCAzLjUtMS42IC4yLS40LS4yLS45LS42LTEuMS0xLjYtLjktMy44LS42LTUuNSAuMS0xLjMgLjYtMy40IDEuNS0zLjIgMi45IC4xIDEgMS44IDEuNSAyLjggMS40ek00MjAgNDAzLjhjLTMuNi00LTUuMy0xMS42LTcuMi0xOS43LTEuOC04LjEtMy45LTE2LjgtMTAuNS0yMi40LTEuMy0xLjEtMi42LTIuMS00LTIuOS0xLjMtLjgtMi43LTEuNS00LjEtMiA5LjItMjcuMyA1LjYtNTQuNS0zLjctNzkuMS0xMS40LTMwLjEtMzEuMy01Ni40LTQ2LjUtNzQuNC0xNy4xLTIxLjUtMzMuNy00MS45LTMzLjQtNzIgLjUtNDUuOSA1LjEtMTMxLjItNzUuOC0xMzEuMy0xMDIuNC0uMi03Ni44IDEwMy40LTc3LjkgMTM1LjItMS43IDIzLjQtNi40IDQxLjgtMjIuNSA2NC43LTE4LjkgMjIuNS00NS41IDU4LjgtNTguMSA5Ni43LTYgMTcuOS04LjggMzYuMS02LjIgNTMuMy02LjUgNS44LTExLjQgMTQuNy0xNi42IDIwLjItNC4yIDQuMy0xMC4zIDUuOS0xNyA4LjNzLTE0IDYtMTguNSAxNC41Yy0yLjEgMy45LTIuOCA4LjEtMi44IDEyLjQgMCAzLjkgLjYgNy45IDEuMiAxMS44IDEuMiA4LjEgMi41IDE1LjcgLjggMjAuOC01LjIgMTQuNC01LjkgMjQuNC0yLjIgMzEuNyAzLjggNy4zIDExLjQgMTAuNSAyMC4xIDEyLjMgMTcuMyAzLjYgNDAuOCAyLjcgNTkuMyAxMi41IDE5LjggMTAuNCAzOS45IDE0LjEgNTUuOSAxMC40IDExLjYtMi42IDIxLjEtOS42IDI1LjktMjAuMiAxMi41LS4xIDI2LjMtNS40IDQ4LjMtNi42IDE0LjktMS4yIDMzLjYgNS4zIDU1LjEgNC4xIC42IDIuMyAxLjQgNC42IDIuNSA2LjdsMCAuMWM4LjMgMTYuNyAyMy44IDI0LjMgNDAuMyAyMyAxNi42LTEuMyAzNC4xLTExIDQ4LjMtMjcuOSAxMy42LTE2LjQgMzYtMjMuMiA1MC45LTMyLjIgNy40LTQuNSAxMy40LTEwLjEgMTMuOS0xOC4zIC40LTguMi00LjQtMTcuMy0xNS41LTI5Ljd6TTIyMy44IDg3LjNjOS44LTIyLjIgMzQuMi0yMS44IDQ0LS40IDYuNSAxNC4yIDMuNiAzMC45LTQuMyA0MC40LTEuNi0uOC01LjktMi42LTEyLjYtNC45IDEuMS0xLjIgMy4xLTIuNyAzLjktNC42IDQuOC0xMS44LS4yLTI3LTkuMS0yNy4zLTcuMy0uNS0xMy45IDEwLjgtMTEuOCAyMy00LjEtMi05LjQtMy41LTEzLTQuNC0xLTYuOS0uMy0xNC42IDIuOS0yMS44ek0xODMuMSA3NS44YzEwLjEgMCAyMC44IDE0LjIgMTkuMSAzMy41LTMuNSAxLTcuMSAyLjUtMTAuMiA0LjYgMS4yLTguOS0zLjMtMjAuMS05LjYtMTkuNi04LjQgLjctOS44IDIxLjItMS44IDI4LjEgMSAuOCAxLjktLjItNS45IDUuNS0xNS42LTE0LjYtMTAuNS01Mi4xIDguNC01Mi4xem0tMTMuNiA2MC43YzYuMi00LjYgMTMuNi0xMCAxNC4xLTEwLjUgNC43LTQuNCAxMy41LTE0LjIgMjcuOS0xNC4yIDcuMSAwIDE1LjYgMi4zIDI1LjkgOC45IDYuMyA0LjEgMTEuMyA0LjQgMjIuNiA5LjMgOC40IDMuNSAxMy43IDkuNyAxMC41IDE4LjItMi42IDcuMS0xMSAxNC40LTIyLjcgMTguMS0xMS4xIDMuNi0xOS44IDE2LTM4LjIgMTQuOS0zLjktLjItNy0xLTkuNi0yLjEtOC0zLjUtMTIuMi0xMC40LTIwLTE1LTguNi00LjgtMTMuMi0xMC40LTE0LjctMTUuMy0xLjQtNC45IDAtOSA0LjItMTIuM3ptMy4zIDMzNGMtMi43IDM1LjEtNDMuOSAzNC40LTc1LjMgMTgtMjkuOS0xNS44LTY4LjYtNi41LTc2LjUtMjEuOS0yLjQtNC43LTIuNC0xMi43IDIuNi0yNi40bDAtLjJjMi40LTcuNiAuNi0xNi0uNi0yMy45LTEuMi03LjgtMS44LTE1IC45LTIwIDMuNS02LjcgOC41LTkuMSAxNC44LTExLjMgMTAuMy0zLjcgMTEuOC0zLjQgMTkuNi05LjkgNS41LTUuNyA5LjUtMTIuOSAxNC4zLTE4IDUuMS01LjUgMTAtOC4xIDE3LjctNi45IDguMSAxLjIgMTUuMSA2LjggMjEuOSAxNmwxOS42IDM1LjZjOS41IDE5LjkgNDMuMSA0OC40IDQxIDY4Ljl6bS0xLjQtMjUuOWMtNC4xLTYuNi05LjYtMTMuNi0xNC40LTE5LjYgNy4xIDAgMTQuMi0yLjIgMTYuNy04LjkgMi4zLTYuMiAwLTE0LjktNy40LTI0LjktMTMuNS0xOC4yLTM4LjMtMzIuNS0zOC4zLTMyLjUtMTMuNS04LjQtMjEuMS0xOC43LTI0LjYtMjkuOXMtMy0yMy4zLS4zLTM1LjJjNS4yLTIyLjkgMTguNi00NS4yIDI3LjItNTkuMiAyLjMtMS43IC44IDMuMi04LjcgMjAuOC04LjUgMTYuMS0yNC40IDUzLjMtMi42IDgyLjQgLjYtMjAuNyA1LjUtNDEuOCAxMy44LTYxLjUgMTItMjcuNCAzNy4zLTc0LjkgMzkuMy0xMTIuNyAxLjEgLjggNC42IDMuMiA2LjIgNC4xIDQuNiAyLjcgOC4xIDYuNyAxMi42IDEwLjMgMTIuNCAxMCAyOC41IDkuMiA0Mi40IDEuMiA2LjItMy41IDExLjItNy41IDE1LjktOSA5LjktMy4xIDE3LjgtOC42IDIyLjMtMTUgNy43IDMwLjQgMjUuNyA3NC4zIDM3LjIgOTUuNyA2LjEgMTEuNCAxOC4zIDM1LjUgMjMuNiA2NC42IDMuMy0uMSA3IC40IDEwLjkgMS40IDEzLjgtMzUuNy0xMS43LTc0LjItMjMuMy04NC45LTQuNy00LjYtNC45LTYuNi0yLjYtNi41IDEyLjYgMTEuMiAyOS4yIDMzLjcgMzUuMiA1OSAyLjggMTEuNiAzLjMgMjMuNyAuNCAzNS43IDE2LjQgNi44IDM1LjkgMTcuOSAzMC43IDM0LjgtMi4yLS4xLTMuMiAwLTQuMiAwIDMuMi0xMC4xLTMuOS0xNy42LTIyLjgtMjYuMS0xOS42LTguNi0zNi04LjYtMzguMyAxMi41LTEyLjEgNC4yLTE4LjMgMTQuNy0yMS40IDI3LjMtMi44IDExLjItMy42IDI0LjctNC40IDM5LjktLjUgNy43LTMuNiAxOC02LjggMjktMzIuMSAyMi45LTc2LjcgMzIuOS0xMTQuMyA3LjJ6bTI1Ny40LTExLjVjLS45IDE2LjgtNDEuMiAxOS45LTYzLjIgNDYuNS0xMy4yIDE1LjctMjkuNCAyNC40LTQzLjYgMjUuNXMtMjYuNS00LjgtMzMuNy0xOS4zYy00LjctMTEuMS0yLjQtMjMuMSAxLjEtMzYuMyAzLjctMTQuMiA5LjItMjguOCA5LjktNDAuNiAuOC0xNS4yIDEuNy0yOC41IDQuMi0zOC43IDIuNi0xMC4zIDYuNi0xNy4yIDEzLjctMjEuMSAuMy0uMiAuNy0uMyAxLS41IC44IDEzLjIgNy4zIDI2LjYgMTguOCAyOS41IDEyLjYgMy4zIDMwLjctNy41IDM4LjQtMTYuMyA5LS4zIDE1LjctLjkgMjIuNiA1LjEgOS45IDguNSA3LjEgMzAuMyAxNy4xIDQxLjYgMTAuNiAxMS42IDE0IDE5LjUgMTMuNyAyNC42ek0xNzMuNCAxNDguN2MyIDEuOSA0LjcgNC41IDggNy4xIDYuNiA1LjIgMTUuOCAxMC42IDI3LjMgMTAuNiAxMS42IDAgMjIuNS01LjkgMzEuOC0xMC44IDQuOS0yLjYgMTAuOS03IDE0LjgtMTAuNHM1LjktNi4zIDMuMS02LjYtMi42IDIuNi02IDUuMWMtNC40IDMuMi05LjcgNy40LTEzLjkgOS44LTcuNCA0LjItMTkuNSAxMC4yLTI5LjkgMTAuMnMtMTguNy00LjgtMjQuOS05LjdjLTMuMS0yLjUtNS43LTUtNy43LTYuOS0xLjUtMS40LTEuOS00LjYtNC4zLTQuOS0xLjQtLjEtMS44IDMuNyAxLjcgNi41eiJdCiAgICB9OwogICAgZmFDb3R0b25CdXJlYXUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY290dG9uLWJ1cmVhdSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmODllIiwgIk00NzQuMyAzMzAuNEM0NTAuNiA0MjIuMyAzODAuMSA0NzUgMjcyLjQgNDc4LjhsMC00OS4yYzAtNDggMjYuNC03NC40IDc0LjQtNzQuNCA2MiAwIDk5LjItMzcuMiA5OS4yLTk5LjIgMC02MS40LTM2LjUtOTguMy05Ny40LTk5LjEtMzMtNjkuMy0xNDYuNS02NC43LTE3Ny4yIDAtNjAuOSAuOC05Ny40IDM3LjctOTcuNCA5OS4xIDAgNjIuMSAzNy4zIDk5LjQgOTkuNCA5OS40IDQ4IDAgNzQuNiAyNi4yIDc0LjYgNzQuNGwwIDQ5LjJjLTEzNC40LTUtMjExLjEtODUuMS0yMTEuMS0yMjMgMC0xNDEuOCA4MS40LTIyMy4yIDIyMy4yLTIyMy4yIDExNC44IDAgMTg5LjggNTMuMiAyMTQuNyAxNDguOGwyNS4zIDBDNDczLjkgNzEuNSAzODguMiA4IDI1OS44IDggMTA1IDggMTIgMTAxLjIgMTIgMjU1LjggMTIgNDExLjEgMTA1LjIgNTA0LjMgMjU5LjggNTA0IDM4OC4xIDUwNCA0NzMuNyA0NDAuMiA0OTkuNSAzMzAuNGwtMjUuMiAwek0zNTcgMTgyLjNjNDEuNCAzLjQgNjQuMiAyOSA2NC4yIDczLjcgMCA0OC0yNi40IDc0LjQtNzQuNCA3NC40LTI4LjYgMC00OS4zLTkuNi02MS42LTI3LjMgODMuMS0xNi41IDc1LjYtOTkuNyA3MS44LTEyMC43em0tODEuNyA5Ny40Yy0yLjUtMTAuMy0xNi4zLTg3IDU2LjItOTcgMi4zIDEwLjEgMTYuNSA4Ny4xLTU2LjMgOTdsMCAwek0yNjAgMTMyYzI4LjYgMCA0OSA5LjcgNjEuNCAyNy42LTI4LjQgNS41LTQ5LjQgMjAuNi02MS42IDQzLjQtMTIuMi0yMi45LTMzLjItMzgtNjEuNi00My40IDEyLjQtMTcuNyAzMy4zLTI3LjQgNjEuNi0yNy40bC4yLS4zem0tNzEuNSA1MC43YzczLjIgMTAuNiA1OC45IDg2LjggNTYuNSA5Ny03Mi40LTkuOC01OS04Ny01Ni4yLTk3bC0uMiAwek0xNzMuMiAzMzAuNGMtNDggMC03NC40LTI2LjQtNzQuNC03NC40IDAtNDQuNCAyMi45LTcwIDY0LjItNzMuNy02LjggMzcuMi0xLjQgMTA2LjUgNzEuNiAxMjAuNy0xMi4xIDE3LjYtMzIuOCAyNy4zLTYxLjEgMjcuM2wtLjMgMHptNTMuMiAxMi40YzE0LjMtNy42IDI2LTE5LjMgMzMuNi0zMy41IDcuOCAxNC41IDE5LjMgMjUuNSAzMy44IDMzLjUtMTQuNCA3LjYtMjYuMSAxOS40LTMzLjYgMzMuOC04LTE0LjUtMTkuMS0yNi4yLTMzLjYtMzMuOGwtLjMgMHoiXQogICAgfTsKICAgIGZhR29vZ2xlV2FsbGV0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2dsZS13YWxsZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFlZSIsICJNMTU2LjggMTI2LjhjMzcuNiA2MC42IDY0LjIgMTEzLjEgODQuMyAxNjIuNS04LjMgMzMuOC0xOC44IDY2LjUtMzEuMyA5OC4zLTEzLjItNTIuMy0yNi41LTEwMS4zLTU2LTE0OC41IDYuNS0zNi40IDIuMy03My42IDMtMTEyLjN6TTEwOS4zIDIwMGwtOTMuMiAwYy02LjUgMC0xMC41IDcuNS02LjUgMTIuNyA0Mi4yIDU0LjMgNzEuNyAxMTcuOCA5MS43IDE4Ny4zbDEwMy41IDBjLTE2LjItNjkuNy0zOC43LTEzMy43LTgyLjUtMTkzLjUtMy00LTgtNi41LTEzLTYuNXptNDcuOC04OGM2OC41IDEwOCAxMzAgMjM0LjUgMTM4LjIgMzY4TDQwOSA0ODBjLTEyLTEzOC02OC40LTI2NS0xNDMuMi0zNjhsLTEwOC43IDB6TTQwOC45IDQzLjVjLTEuOC02LjgtOC4yLTExLjUtMTUuMi0xMS41bC04OC4zIDBjLTUuMyAwLTkgNS03LjggMTAuMyAxMy4yIDQ2LjUgMjIuMyA5NS41IDI2LjUgMTQ2IDQ4LjIgODYuMiA3OS43IDE3OC4zIDkwLjYgMjcwLjggMTUuOC02MC41IDI1LjMtMTMzLjUgMjUuMy0yMDMgMC03My42LTEyLjEtMTQ1LjEtMzEuMS0yMTIuNnoiXQogICAgfTsKICAgIGZhRm91cnNxdWFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmb3Vyc3F1YXJlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxODAiLCAiTTMzMS4xIDNMNTcuOSAzQzIwLjQgMyA4IDMxLjMgOCA0OS4xTDggNDgyLjljMCAyMC4zIDEyLjEgMjcuNyAxOC4yIDMwLjEgNi4yIDIuNSAyMi44IDQuNiAzMi45LTcuMSAxMjguOS0xNDkuNCAxMzEuMS0xNTEuOSAxMzEuMS0xNTEuOSAzLjEtMy40IDMuNC0zLjEgNi44LTMuMWw4My40IDBjMzUuMSAwIDQwLjYtMjUuMiA0NC4zLTM5LjdsNDguNi0yNDNDMzgxLjggMjUuOCAzNzEuMSAzIDMzMS4xIDN6TTMxNC44IDc2LjhsLTExLjQgNTkuN2MtMS4yIDYuNS05LjUgMTMuMi0xNi45IDEzLjJsLTEwNi40IDBjLTEyIDAtMjAuNiA4LjMtMjAuNiAyMC4zbDAgMTNjMCAxMiA4LjYgMjAuNiAyMC42IDIwLjZsOTAuNCAwYzguMyAwIDE2LjYgOS4yIDE0LjggMTguMi0xLjggOC45LTEwLjUgNTMuOC0xMS40IDU4LjgtLjkgNC45LTYuOCAxMy41LTE2LjkgMTMuNWwtNzMuNSAwYy0xMy41IDAtMTcuMiAxLjgtMjYuNSAxMi42IDAgMC04LjkgMTEuNC04OS41IDEwOC4zLS45IC45LTEuOCAuNi0xLjgtLjNsMC0zMzguOGMwLTcuNyA2LjgtMTYuNiAxNi42LTE2LjZsMjE5IDBjOC4yIDAgMTUuNiA3LjcgMTMuNSAxNy41eiJdCiAgICB9OwogICAgZmFTaGlydHNpbmJ1bGsgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2hpcnRzaW5idWxrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyMTQiLCAiTTEwMCA0MTAuM2wzMC42IDEzLjQgNC40LTkuOS0zMC42LTEzLjQtNC40IDkuOXptMzkuNCAxNy41bDMwLjYgMTMuNCA0LjQtOS45LTMwLjYtMTMuNC00LjQgOS45em0xNzIuMS0xNGw0LjQgOS45IDMwLjYtMTMuNC00LjQtOS45LTMwLjYgMTMuNHpNMTc5LjEgNDQ1bDMwLjMgMTMuNyA0LjQtOS45LTMwLjMtMTMuNC00LjQgOS42ek02MC40IDM5Mi44bDMwLjYgMTMuNCA0LjQtOS42LTMwLjYtMTMuNy00LjQgOS45em0yMTEuNCAzOC41bDQuNCA5LjkgMzAuNi0xMy40LTQuNC05LjktMzAuNiAxMy40em0tMzkuMyAxNy41bDQuNCA5LjkgMzAuNi0xMy43LTQuNC05LjYtMzAuNiAxMy40em0xMTguNC01Mi4ybDQuNCA5LjYgMzAuNi0xMy40LTQuNC05LjktMzAuNiAxMy43ek0xNzAgNDYuNmwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41em0tNDcuMiAwbC0zMy42IDAgMCAxMC41IDMzLjUgMCAuMS0xMC41em0tNDcuMyAwbC0zMy4yIDAgMCAxMC41IDMzLjMgMC0uMS0xMC41em0xNDEuNSAwbC0zMy4yIDAgMCAxMC41IDMzLjIgMCAwLTEwLjV6bTk0LjUgMGwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41em00Ny4zIDBsLTMzLjUgMCAwIDEwLjUgMzMuNSAwIDAtMTAuNXptLTk0LjYgMGwtMzMuMiAwIDAgMTAuNSAzMy4yIDAgMC0xMC41em0xNDEuNSAwbC0zMy4zIDAgMCAxMC41IDMzLjMgMCAwLTEwLjV6TTUyLjggMzUxLjFsLTEwLjggMCAwIDMzLjUgMTAuOCAwIDAtMzMuNXptNzAtMjE1LjlsLTMzLjYgMCAwIDEwLjUgMzMuNSAwIC4xLTEwLjV6bS03MCAxMC42bDIyLjggMCAwLTEwLjUtMzMuNiAwIDAgMzMuNSAxMC44IDAgMC0yM3pNMjIxLjcgMzc0LjRhOTEuMyA5MS4zIDAgMSAwIDAtMTgyLjYgOTEuMyA5MS4zIDAgMSAwIDAgMTgyLjZ6TTE3My41IDI2My4zYzAtMjUuNCAyOS41LTMxLjggNDkuNi0zMS44IDE2LjkgMCAyOS4yIDUuOCA0NC4zIDEybC04LjggMTYuOS0uOSAwYy02LjQtOS45LTI0LjgtMTMuMS0zNS42LTEzLjEtOSAwLTI5LjggMS44LTI5LjggMTQuOSAwIDIxLjYgNzguNS0xMC4yIDc4LjUgMzcuOSAwIDI1LjQtMzEuNSAzMS4yLTUxIDMxLjItMTguMSAwLTMyLjQtMi45LTQ3LjItMTIuMmw5LTE4LjQgLjkgMGM2LjEgMTIuMiAyMy42IDE0LjkgMzUuOSAxNC45IDguNyAwIDMyLjctMS4yIDMyLjctMTQuMyAwLTI2LjEtNzcuNiA2LjMtNzcuNi0zOHpNNTIuOCAxNzguNGwtMTAuOCAwIDAgMzMuNiAxMC44IDAgMC0zMy42ek0zOTUuMiAzODQuNmwxMC44IDAgMC0zMy41LTEwLjggMCAwIDMzLjV6TTUyLjggMzA3LjlsLTEwLjggMCAwIDMzLjUgMTAuOCAwIDAtMzMuNXpNMCAzLjdsMCA0MDYgMjIxLjcgOTguNiAyMjYuMy05OC42IDAtNDA2LTQ0OCAwek00MTguOCAzOTAuOGwtMTk2LjggODUuNy0xOTIuOC04NS43IDAtMjcwLjEgMzg5LjcgMCAwIDI3MC4xLS4xIDB6bTAtMjk5LjNsLTM4OS42IDAgMC01OC42IDM4OS43IDAgMCA1OC42LS4xIDB6TTUyLjggMjIxLjZsLTEwLjggMCAwIDMzLjUgMTAuOCAwIDAtMzMuNXptMCA0My4ybC0xMC44IDAgMCAzMy41IDEwLjggMCAwLTMzLjV6TTE3MCAxMzUuMmwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41ek0zOTUuMiAyOTguM2wxMC44IDAgMC0zMy41LTEwLjggMCAwIDMzLjV6bTAtNDMuMmwxMC44IDAgMC0zMy41LTEwLjggMCAwIDMzLjV6TTIxNyAxMzUuMmwtMzMuMiAwIDAgMTAuNSAzMy4yIDAgMC0xMC41ek0zOTUuMiAyMTJsMTAuOCAwIDAtMzMuNS0xMC44IDAgMCAzMy41em0wIDEyOS41bDEwLjggMCAwLTMzLjUtMTAuOCAwIDAgMzMuNXptLTEzMS0yMDYuM2wtMzMuMiAwIDAgMTAuNSAzMy4yIDAgMC0xMC41em00Ny4zIDBsLTMzLjUgMCAwIDEwLjUgMzMuNSAwIDAtMTAuNXptODMuNyAzMy42bDEwLjggMCAwLTMzLjUtMzMuNSAwIDAgMTAuNSAyMi44IDAtLjEgMjN6bS0zNi40LTMzLjZsLTMzLjUgMCAwIDEwLjUgMzMuNSAwIDAtMTAuNXoiXQogICAgfTsKICAgIGZhTWludGJpdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtaW50Yml0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU2MmYiLCAiTTczLjIgNTEybDAtNzMuMSAyOTIuNSAwIDAtNzMuMiA3My4yIDAgMC0xNDYuMyA3My4xIDAgMC0yMTkuNC0yMTkuNCAwIDAgNzMuMS0xNDYuMyAwIDAgNzMuMi03My4xIDAgMCAyOTIuNi03My4yIDAgMCA3My4xIDczLjIgMHptNzMuMS0yMTkuNGw3My4yIDAgMCA3My4xLTczLjIgMCAwLTczLjF6bTczLjItNzMuMWw3My4xIDAgMCA3My4xLTczLjIgMCAwLTczLjIgLjEgLjF6bTczLjEgMGwwLTczLjIgNzMuMiAwIDAgNzMuMS03My4yIDAgMCAuMXpNMzY1LjcgNzMuMWw3My4yIDAgMCA3My4yLTczLjIgMCAwLTczLjJ6Il0KICAgIH07CiAgICBmYVN0YXlsaW5rZWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RheWxpbmtlZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2Y1IiwgIk0zODYuNyAyOTIuNWwyLjcgMi43LTE3MC0xNjcuM2MtMy41LTMuNS05LjctMy43LTEzLjgtLjVMMTQ4LjMgMTcxYy00LjIgMy4yLTQuNiA4LjctMS4xIDEyLjJsNjguMSA2NC4zYzMuNiAzLjUgOS45IDMuNyAxNCAuNWwuMS0uMWM0LjEtMy4yIDEwLjQtMyAxNCAuNWw4NCA4MS4zYzMuNiAzLjUgMy4yIDktLjkgMTIuMmwtOTMuMiA3NGMtNC4yIDMuMy0xMC41IDMuMS0xNC4yLS40TDY3LjIgMjY4Yy0zLjUtMy41LTkuNy0zLjctMTMuOS0uNUw3LjUgMzAyLjRjLTQuMiAzLjItNC43IDguNy0xLjIgMTIuMkwyMTUgNTEwLjdzNy40IDYuOCAxNy4zLS44TDQzMC4zIDM0NmM0LTMuMiA0LjQtOC43IC43LTEyLjJsLTQ0LjMtNDEuM3ptNTQuNS04My40TDIzMC43IDIuNWMtMS41LTEuMi04LTUuNS0xNi4zIDEuMUw3LjYgMTY1LjdjLTQuMiAzLjItNC44IDguNy0xLjIgMTIuMmw0Mi4zIDQxLjcgMTcxLjcgMTY1LjFjMy43IDMuNSAxMC4xIDMuNyAxNC4zIC40bDUwLjItMzguOC0uMy0uMyA3LjctNmM0LjItMy4yIDQuNi04LjcgLjktMTIuMmwtNTcuMS01NC40Yy0zLjYtMy41LTEwLTMuNy0xNC4yLS41bC0uMSAuMWMtNC4yIDMuMi0xMC41IDMuMS0xNC4yLS40TDExMyAxODAuOGMtMy42LTMuNS0zLjEtOC45IDEuMS0xMi4ybDkyLjItNzEuNWM0LjEtMy4yIDEwLjMtMyAxMy45IC41bDE2MC40IDE1OWMzLjcgMy41IDEwIDMuNyAxNC4xIC41bDQ1LjgtMzUuOGM0LjEtMy4yIDQuNC04LjcgLjctMTIuMnoiXQogICAgfTsKICAgIGZhV2ViZmxvdyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3ZWJmbG93IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU2NWMiLCAiTTY0MCA2NGwtMjA0LjIgMzk5LjItMTkxLjggMCA4NS41LTE2NS41LTMuOCAwQzI1NS4xIDM4OS4zIDE0OS45IDQ0OS41IDAgNDYzLjJMMCAzMDAuMXM5NS45LTUuNyAxNTIuMy02NC45bC0xNTIuMyAwIDAtMTcxLjIgMTcxLjEgMCAwIDE0MC44IDMuOCAwIDcwLTE0MC44IDEyOS40IDAgMCAxMzkuOSAzLjggMCA3Mi42LTEzOS45IDE4OS4zIDB6Il0KICAgIH07CiAgICBmYVJlbnJlbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZW5yZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjE4YiIsICJNMjE0IDE2OS4xQzIxNCAyNzkuNSAxNTMgMzc0LjUgNjYuNCA0MTYuNSAzMCAzNzMuMiA4IDMxNy43IDggMjU2LjYgOCAxMzMuOSA5Ny4xIDMyLjIgMjE0IDEyLjVsMCAxNTYuNnpNMjU1IDUwNGMtNDIuOSAwLTgzLjMtMTEtMTE4LjUtMzAuNCA1Ny4yLTM2LjEgMTAzLjQtOTAuNyAxMTguNS0xNTQuNiAxNS41IDYzLjkgNjEuNyAxMTguNSAxMTguOCAxNTQuNy0zNS4xIDE5LjMtNzUuNSAzMC4zLTExOC44IDMwLjN6bTE5MC42LTg3LjVDMzU5IDM3NC41IDI5OCAyNzkuNiAyOTggMTY5LjFsMC0xNTYuNmMxMTYuOSAxOS43IDIwNiAxMjEuNCAyMDYgMjQ0LjEgMCA2MS4xLTIyIDExNi42LTU4LjQgMTU5Ljl6Il0KICAgIH07CiAgICBmYVJldiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZXYiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjViMiIsICJNMTU4LjcgMjc0LjlhNjUuNiA2NS42IDAgMSAxIDEzMS4yIDAgNjUuNiA2NS42IDAgMSAxIC0xMzEuMiAwem0yNzAuNy01LjFsLS4xIDBjLS43LTI5LjMtNy43LTU4LjItMjAuNS04NC42cy0zMS4yLTQ5LjctNTMuOC02OC40TDMwOS42IDE0M2MyMiAxNC4yIDQwLjEgMzMuOCA1Mi43IDU2LjhzMTkuMSA0OC44IDE5LjEgNzUuMWMwIDg2LjYtNzAuNSAxNTcuMS0xNTcuMSAxNTcuMVM2Ny4yIDM2MS41IDY3LjIgMjc0LjljMC04MS45IDYzLTE0OS4zIDE0My0xNTYuNGwwIDM5LjEgMTA4LjgtNjIuOC0xMDguOC02Mi44IDAgMzguM2MtMTA2LjcgNy4yLTE5MSA5Ni0xOTEgMjA0LjYgMCAxMTEuNiA4OS4xIDIwMi4zIDIwMC4xIDIwNWwwIC4xIDIxMC4yIDAgMC0yMTAuMnoiXQogICAgfTsKICAgIGZhS2V5Y2RuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImtleWNkbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2JhIiwgIk02My44IDQwOS4zbDYwLjUtNTljMzIuMSA0Mi44IDcxLjEgNjYgMTI2LjYgNjcuNCAzMC41IC43IDYwLjMtNyA4Ni40LTIyLjQgNS4xIDUuMyAxOC41IDE5LjUgMjAuOSAyMi0zMi4yIDIwLjctNjkuNiAzMS4xLTEwOC4xIDMwLjItNDMuMy0xLjEtODQuNi0xNi43LTExNy43LTQ0LjQgLjMtLjYtMzguMiAzNy41LTM4LjYgMzcuOSA5LjUgMjkuOC0xMy4xIDYyLjQtNDYuMyA2Mi40LTI2LjgtLjEtNDcuNS0yMS43LTQ3LjUtNDguNSAwLTM0LjMgMzMuMS01Ni42IDYzLjgtNDUuNnpNNDE4LjcgMTU2LjljMTkuMSAzMS4zIDI5LjYgNjcuNCAyOC43IDEwNC0xLjEgNDQuOC0xOSA4Ny41LTQ4LjYgMTIxIC4zIC4zIDIzLjggMjUuMiAyNC4xIDI1LjUgOS42LTEuMyAxOS4yIDIgMjUuOSA5LjEgMTEuMyAxMiAxMC45IDMwLjktMS4xIDQyLjQtMTIgMTEuMy0zMC45IDEwLjktNDIuNC0xLjEtNi43LTctOS40LTE2LjgtNy42LTI2LjMtMjQuOS0yNi42LTQ0LjQtNDcuMi00NC40LTQ3LjIgNDIuNy0zNC4xIDYzLjMtNzkuNiA2NC40LTEyNC4yIC43LTI4LjktNy4yLTU3LjItMjEuMS04Mi4ybDIyLjEtMjF6TTEwNCA1My4xYzYuNyA3IDkuNCAxNi44IDcuNiAyNi4zbDQ1LjkgNDguMWMtNC43IDMuOC0xMy4zIDEwLjQtMjIuOCAyMS4zLTI1LjQgMjguNS0zOS42IDY0LjgtNDAuNyAxMDIuOS0uNyAyOC45IDYuMSA1Ny4yIDIwIDgyLjRMOTIgMzU1LjZjLTE5LjMtMzEuNi0yOC45LTY3LjctMjcuOC0xMDQuNyAxLTQ0LjYgMTguMy04Ny42IDQ3LjUtMTIxLjFMODYuNCAxMDMuNGMtOS42IDEuMy0xOS4yLTItMjUuOS05LjEtMTEuMy0xMi0xMC45LTMwLjkgMS4xLTQyLjQgMTEuOS0xMS4yIDMwLjYtMTAuOSA0Mi40IDEuMnpNNDY0LjkgOGMyNiAwIDQ3LjEgMjIuNCA0Ny4xIDQ4LjNTNDkwLjkgMTA0IDQ2NC45IDEwNGMtNi4zIC4xLTE0LTEuMS0xNS45LTEuOGwtNjIuOSA1OS43Yy0zMi43LTQzLjYtNzYuNy02NS45LTEyNi45LTY3LjItMzAuNS0uNy02MC4zIDYuOC04Ni4yIDIyLjRsLTIxLjEtMjJDMTg0LjEgNzQuMyAyMjEuNSA2NCAyNjAgNjQuOSAzMDMuMyA2NiAzNDQuNiA4MS42IDM3Ny43IDEwOS41bDQxLjEtMzguNmMtMS41LTQuNy0yLjItOS42LTIuMi0xNC41LS4xLTI2LjcgMjIuMy00OC40IDQ4LjMtNDguNHpNMjU2LjcgMTEzLjRjNS41IDAgMTAuOSAuNCAxNi40IDEuMSA3OC4xIDkuOCAxMzMuNCA4MS4xIDEyMy44IDE1OS4xLTkuOCA3OC4xLTgxLjEgMTMzLjQtMTU5LjEgMTIzLjgtNzguMS05LjgtMTMzLjQtODEuMS0xMjMuOC0xNTkuMiA5LjMtNzIuNCA3MC4xLTEyNC42IDE0Mi43LTEyNC44em0tNTkgMTE5LjRjLjYgMjIuNyAxMi4yIDQxLjggMzIuNCA1Mi4ybC0xMSA1MS43IDczLjcgMC0xMS01MS43YzIwLjEtMTAuOSAzMi4xLTI5IDMyLjQtNTIuMi0uNC0zMi44LTI1LjgtNTcuNS01OC4zLTU4LjMtMzIuMSAuOC01Ny4zIDI0LjgtNTguMiA1OC4zeiJdCiAgICB9OwogICAgZmFIaXJlQUhlbHBlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJoaXJlLWEtaGVscGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzYjAiLCAiTTQ0My4xIDBMNzEuOSAwQzY3LjkgMzcuMyAzNy40IDY3LjggMCA3MS43TDAgNDQzLjJjMzcuNCA0LjkgNjYgMzIuNCA3MS45IDY4LjhsMzcyLjIgMGMzLTM2LjQgMzIuNS02NS44IDY3LjktNjkuOGwwLTM3MC41QzQ3NS42IDY1LjggNDQ3IDM2LjQgNDQzLjEgMHptLTM3IDQwNC45Yy0zNi4zIDAtMTguOC0yLTU1LjEtMi0zNS44IDAtMjEgMi01Ni4xIDItNS45IDAtNC45LTguMiAwLTkuOCAyMi44LTcuNiAyMi45LTEwLjIgMjQuNi0xMi44IDEwLjQtMTUuNiA1LjktODMgNS45LTExMyAwLTUuMy02LjQtMTIuOC0xMy44LTEyLjhsLTExMS4yIDBjLTcuNCAwLTEzLjggNy41LTEzLjggMTIuOCAwIDMwLTQuNSA5Ny40IDUuOSAxMTMgMS43IDIuNSAxLjggNS4yIDI0LjYgMTIuOCA0LjkgMS42IDYgOS44IDAgOS44LTM1LjEgMC0yMC4zLTItNTYuMS0yLTM2LjMgMC0xOC44IDItNTUuMSAyLTcuOSAwLTUuOC0xMC44IDAtMTAuOCAxMC4yLTMuNCAxMy41LTMuNSAyMS43LTEzLjggNy43LTEyLjkgNy45LTQ0LjQgNy45LTEyNy44bDAtMTAxLjJjMC0yMi4yLTEyLjItMjguMy0yOC42LTMyLjQtOC44LTIuMi00LTExLjggMS0xMS44IDM2LjUgMCAyMC42IDIgNTcuMSAyIDMyLjcgMCAxNi41LTIgNDkuMi0yIDMuMyAwIDguNSA4LjMgMSAxMC44LTQuOSAxLjYtMjcuNiAzLjctMjcuNiAzOS4zIDAgNDUuNi0uMiA1NS44IDEgNjguOCAwIDEuMyAyLjMgMTIuOCAxMi44IDEyLjhsMTA5LjIgMGMxMC41IDAgMTIuOC0xMS41IDEyLjgtMTIuOCAxLjItMTMgMS0yMy4yIDEtNjguOCAwLTM1LjYtMjIuNy0zNy43LTI3LjYtMzkuMy03LjUtMi41LTIuMy0xMC44IDEtMTAuOCAzMi43IDAgMTYuNSAyIDQ5LjIgMiAzNi41IDAgMjAuNi0yIDU3LjEtMiA0LjkgMCA5LjkgOS42IDEgMTEuOC0xNi40IDQuMS0yOC42IDEwLjMtMjguNiAzMi40bDAgMTAxLjJjMCA4My40IC4xIDExNC45IDcuOSAxMjcuOCA4LjIgMTAuMiAxMS40IDEwLjQgMjEuNyAxMy44IDUuOCAwIDcuOCAxMC44IDAgMTAuOHoiXQogICAgfTsKICAgIGZhU3F1YXJlSGFja2VyTmV3cyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtaGFja2VyLW5ld3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiaGFja2VyLW5ld3Mtc3F1YXJlIl0sICJmM2FmIiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMjEgMjI5LjJzLjEtLjEgLjEtLjIgLjEtLjIgLjItLjJjMCAuMSAwIC4zLS4xIC40bC0uMiAwek0yMzkuMiAzODRsLTMxLjQgMCAwLTEwMi43LTc5LjgtMTUzLjMgMzcuMyAwYzQxLjUgNzcuNyA0OC4xIDk1LjggNTQuMSAxMTIgMS42IDQuMyAzLjEgOC41IDUuMiAxMy42IDMuMi03IDUuMS0xMS45IDcuMS0xNy4zIDUuOS0xNS4zIDEyLjgtMzMuMiA1My41LTEwOC4zbDM0LjggMC04MC44IDE1NS4xIDAgMTAwLjl6Il0KICAgIH07CiAgICBmYUhhY2tlck5ld3NTcXVhcmUgPSBmYVNxdWFyZUhhY2tlck5ld3M7CiAgICBmYUNyZWF0aXZlQ29tbW9uc1BkQWx0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtcGQtYWx0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZWQiLCAiTTI1NS42IDhDMTEyLjcgOCA4IDEyMy4xIDggMjU2IDggMzk0LjUgMTIxLjYgNTA0IDI1NS42IDUwNCAzODUuNSA1MDQgNTA0IDQwMy4xIDUwNCAyNTYgNTA0IDExOC4xIDM5Ny40IDggMjU1LjYgOHptLjggNDUwLjhjLTExMi41IDAtMjAzLjctOTMtMjAzLjctMjAyLjggMC0xMDUuNCA4NS41LTIwMy4zIDIwMy43LTIwMy4zIDExMi42IDAgMjAyLjkgODkuNSAyMDIuOCAyMDMuMyAwIDEyMS43LTk5LjYgMjAyLjgtMjAyLjggMjAyLjh6TTMyNC43IDE4NmwtNTMuMiAwIDAgMTM3LjIgNTMuMiAwYzIxLjQgMCA3MC01LjEgNzAtNjguNiAwLTYzLjQtNDguNi02OC42LTcwLTY4LjZ6bS44IDEwOC41bC0xOS45IDAgMC03OS43IDE5LjQtLjFjMy44IDAgMzUtMi4xIDM1IDM5LjkgMCAyNC42LTEwLjUgMzkuOS0zNC41IDM5Ljl6TTIxMS43IDE4NmwtNjguMiAwIDAgMTM3LjMgMzQuNiAwIDAtNDQuMyAyNyAwYzU0LjEgMCA1Ny4xLTM3LjUgNTcuMS00Ni41IDAtMzEtMTYuOC00Ni41LTUwLjUtNDYuNXptLTQuOSA2Ny4zbC0yOS4yIDAgMC00MS42IDI4LjMgMGMzMC45IDAgMjguOCA0MS42IC45IDQxLjZ6Il0KICAgIH07CiAgICBmYU9yY2lkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm9yY2lkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4ZDIiLCAiTTI5NC43IDE4OC4ybC00NS45IDAgMCAxNTMuOCA0Ny41IDBjNjcuNiAwIDgzLjEtNTEuMyA4My4xLTc2LjkgMC00MS42LTI2LjUtNzYuOS04NC43LTc2Ljl6TTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMTc1LjIgMzY4LjhsLTI5LjggMCAwLTIwNy41IDI5LjggMCAwIDIwNy41ek0xNjAuMyA5OC41YTE5LjYgMTkuNiAwIDEgMSAwIDM5LjIgMTkuNiAxOS42IDAgMSAxIDAtMzkuMnpNMzAwIDM2OWwtODEgMCAwLTIwNy43IDgwLjYgMGM3Ni43IDAgMTEwLjQgNTQuOCAxMTAuNCAxMDMuOSAwIDUzLjMtNDEuNyAxMDMuOS0xMTAgMTAzLjl6Il0KICAgIH07CiAgICBmYUJlaGFuY2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmVoYW5jZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWI0IiwgIk0yMzIgMjM3LjJjMzEuOC0xNS4yIDQ4LjQtMzguMiA0OC40LTc0IDAtNzAuNi01Mi42LTg3LjgtMTEzLjMtODcuOGwtMTY3LjEgMCAwIDM1NC40IDE3MS44IDBjNjQuNCAwIDEyNC45LTMwLjkgMTI0LjktMTAyLjkgMC00NC41LTIxLjEtNzcuNC02NC43LTg5Ljd6TTc3LjkgMTM1LjlsNzMuMSAwYzI4LjEgMCA1My40IDcuOSA1My40IDQwLjUgMCAzMC4xLTE5LjcgNDIuMi00Ny41IDQyLjJsLTc5IDAgMC04Mi43em04My4zIDIzMy43bC04My4zIDAgMC05Ny42IDg0LjkgMGMzNC4zIDAgNTYgMTQuMyA1NiA1MC42IDAgMzUuOC0yNS45IDQ3LTU3LjYgNDd6TTUxOS43IDEyOC45bC0xNDMuNyAwIDAtMzQuOSAxNDMuNyAwIDAgMzQuOXpNNTc2IDMwNS4yYzAtNzUuOS00NC40LTEzOS4yLTEyNC45LTEzOS4yLTc4LjIgMC0xMzEuMyA1OC44LTEzMS4zIDEzNS44IDAgNzkuOSA1MC4zIDEzNC43IDEzMS4zIDEzNC43IDYxLjMgMCAxMDEtMjcuNiAxMjAuMS04Ni4zbC02Mi4yIDBjLTYuNyAyMS45LTM0LjMgMzMuNS01NS43IDMzLjUtNDEuMyAwLTYzLTI0LjItNjMtNjUuM2wxODUuMSAwYy4zLTQuMiAuNi04LjcgLjYtMTMuMnpNMzkwLjQgMjc0YzIuMy0zMy43IDI0LjctNTQuOCA1OC41LTU0LjggMzUuNCAwIDUzLjIgMjAuOCA1Ni4yIDU0LjhsLTExNC43IDB6Il0KICAgIH07CiAgICBmYU1vbmVybyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtb25lcm8iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNkMCIsICJNMzYwIDM4NGwxMDguNCAwQzQyNSA0NTUuOSAzNDYuMSA1MDQgMjU2IDUwNFM4NyA0NTUuOSA0My42IDM4NGwxMDguNCAwIDAtMTI3LjggMTA0IDEwNC44IDEwNC0xMDUgMCAxMjh6TTk2IDMzNmwwLTIwOCAxNTkuNCAxNTkuNCAxNjAuNi0xNTkuNCAwIDIwOCA3NC44IDBjOC41LTI1LjEgMTMuMi01MiAxMy4yLTgwIDAtMTM3LTExMS0yNDgtMjQ4LTI0OFM4IDExOSA4IDI1NmMwIDI4IDQuNiA1NC45IDEzLjIgODBMOTYgMzM2eiJdCiAgICB9OwogICAgZmFGaWdtYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmaWdtYSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNzk5IiwgIk0xNCA5NS44QzE0IDQyLjkgNTYuOSAwIDEwOS44IDBMMjc0LjIgMGM1Mi45IDAgOTUuOCA0Mi45IDk1LjggOTUuOCAwIDMzLjUtMTcuMiA2My00My4yIDgwLjEgMjYgMTcuMSA0My4yIDQ2LjYgNDMuMiA4MC4xIDAgNTIuOS00Mi45IDk1LjgtOTUuOCA5NS44bC0yLjEgMGMtMjQuOCAwLTQ3LjQtOS40LTY0LjQtMjQuOWwwIDg4LjNjMCA1My42LTQ0IDk2LjgtOTcuNCA5Ni44LTUyLjggMC05Ni4zLTQyLjgtOTYuMy05NS44IDAtMzMuNSAxNy4yLTYzIDQzLjItODAuMS0yNi0xNy4xLTQzLjItNDYuNi00My4yLTgwLjFzMTcuMi02MyA0My4yLTgwLjFDMzEuMiAxNTguOCAxNCAxMjkuMyAxNCA5NS44em0xNjIuMyA5NS44bC02Ni41IDBjLTM1LjYgMC02NC40IDI4LjgtNjQuNCA2NC40IDAgMzUuNCAyOC42IDY0LjIgNjQgNjQuNGw2Ni45IDAgMC0xMjguOHpNMjA3LjcgMjU2YzAgMzUuNiAyOC44IDY0LjQgNjQuNCA2NC40bDIuMSAwYzM1LjYgMCA2NC40LTI4LjggNjQuNC02NC40cy0yOC44LTY0LjQtNjQuNC02NC40bC0yLjEgMGMtMzUuNiAwLTY0LjQgMjguOC02NC40IDY0LjR6bS05Ny45IDk1LjhsLS40IDBjLTM1LjQgLjItNjQgMjktNjQgNjQuNHMyOS4yIDY0LjQgNjQuOSA2NC40YzM2LjMgMCA2Ni0yOS40IDY2LTY1LjVsMC02My40LTY2LjUgMHptMC0zMjAuNGMtMzUuNiAwLTY0LjQgMjguOC02NC40IDY0LjRzMjguOCA2NC40IDY0LjQgNjQuNGw2Ni41IDAgMC0xMjguOC02Ni41IDB6bTk3LjkgMTI4LjhsNjYuNSAwYzM1LjYgMCA2NC40LTI4LjggNjQuNC02NC40cy0yOC44LTY0LjQtNjQuNC02NC40bC02Ni41IDAgMCAxMjguOHoiXQogICAgfTsKICAgIGZhSW5zdGFncmFtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImluc3RhZ3JhbSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMTZkIiwgIk0yMjQuMyAxNDFhMTE1IDExNSAwIDEgMCAtLjYgMjMwIDExNSAxMTUgMCAxIDAgLjYtMjMwem0tLjYgNDAuNGE3NC42IDc0LjYgMCAxIDEgLjYgMTQ5LjIgNzQuNiA3NC42IDAgMSAxIC0uNi0xNDkuMnptOTMuNC00NS4xYTI2LjggMjYuOCAwIDEgMSA1My42IDAgMjYuOCAyNi44IDAgMSAxIC01My42IDB6bTEyOS43IDI3LjJjLTEuNy0zNS45LTkuOS02Ny43LTM2LjItOTMuOS0yNi4yLTI2LjItNTgtMzQuNC05My45LTM2LjItMzctMi4xLTE0Ny45LTIuMS0xODQuOSAwLTM1LjggMS43LTY3LjYgOS45LTkzLjkgMzYuMXMtMzQuNCA1OC0zNi4yIDkzLjljLTIuMSAzNy0yLjEgMTQ3LjkgMCAxODQuOSAxLjcgMzUuOSA5LjkgNjcuNyAzNi4yIDkzLjlzNTggMzQuNCA5My45IDM2LjJjMzcgMi4xIDE0Ny45IDIuMSAxODQuOSAwIDM1LjktMS43IDY3LjctOS45IDkzLjktMzYuMiAyNi4yLTI2LjIgMzQuNC01OCAzNi4yLTkzLjkgMi4xLTM3IDIuMS0xNDcuOCAwLTE4NC44ek0zOTkgMzg4Yy03LjggMTkuNi0yMi45IDM0LjctNDIuNiA0Mi42LTI5LjUgMTEuNy05OS41IDktMTMyLjEgOXMtMTAyLjcgMi42LTEzMi4xLTljLTE5LjYtNy44LTM0LjctMjIuOS00Mi42LTQyLjYtMTEuNy0yOS41LTktOTkuNS05LTEzMi4xcy0yLjYtMTAyLjcgOS0xMzIuMWM3LjgtMTkuNiAyMi45LTM0LjcgNDIuNi00Mi42IDI5LjUtMTEuNyA5OS41LTkgMTMyLjEtOXMxMDIuNy0yLjYgMTMyLjEgOWMxOS42IDcuOCAzNC43IDIyLjkgNDIuNiA0Mi42IDExLjcgMjkuNSA5IDk5LjUgOSAxMzIuMXMyLjcgMTAyLjctOSAxMzIuMXoiXQogICAgfTsKICAgIGZhUGVyYnl0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwZXJieXRlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwODMiLCAiTTMwNS4zIDI4NC42bC01OC43IDAgMCA5OC43IDU4LjcgMGMxNi4zIDAgMjktNC42IDM4LjItMTMuOHMxMy44LTIxLjIgMTMuOC0zNi4xYzAtMTQuNi00LjctMjYuMy0xNC0zNS4zcy0yMi0xMy41LTM3LjktMTMuNXpNMTQ5LjQgMTI4LjdsLTU4LjcgMCAwIDk4LjcgNTguNyAwYzE2LjMgMCAyOS00LjYgMzguMi0xMy44czEzLjgtMjEuMiAxMy44LTM2LjFjMC0xNC42LTQuNy0yNi4zLTE0LTM1LjNzLTIyLTEzLjUtMzcuOS0xMy41ek0zNjYuNiAzMkw4MS40IDMyYy0yMS42IDAtNDIuMiA4LjYtNTcuNSAyMy45UzAgOTEuOCAwIDExMy40TDAgMzk4LjZjMCAyMS42IDguNiA0Mi4yIDIzLjkgNTcuNVM1OS44IDQ4MCA4MS40IDQ4MGwyODUuMyAwYzIxLjYgMCA0Mi4yLTguNiA1Ny41LTIzLjlTNDQ4IDQyMC4yIDQ0OCAzOTguNmwwLTI4NS4zYzAtMjEuNi04LjYtNDIuMi0yMy45LTU3LjVTMzg4LjIgMzIgMzY2LjYgMzJ6bTYzLjYgMzY2LjZjMCAxNi45LTYuNyAzMy0xOC43IDQ1cy0yOC4xIDE4LjYtNDUgMTguN2wtMjg1LjMgMGMtMTYuOSAwLTMzLTYuNy00NS0xOC43cy0xOC42LTI4LjEtMTguNy00NWwwLTI4NS4zYzAtMTYuOSA2LjctMzMgMTguNy00NXMyOC4xLTE4LjYgNDUtMTguN2wyODUuMyAwYzE2LjkgMCAzMyA2LjcgNDUgMTguN3MxOC42IDI4LjEgMTguNyA0NWwwIDI4NS4zem0tMTI1LTI2OS45bC01OC43IDAgMCA5OC43IDU4LjcgMGMxNi4zIDAgMjktNC42IDM4LjItMTMuOHMxMy44LTIxLjIgMTMuOC0zNi4xYzAtMTQuNi00LjctMjYuMy0xNC0zNS4zcy0yMi0xMy41LTM3LjktMTMuNXoiXQogICAgfTsKICAgIGZhU3F1YXJlVmltZW8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXZpbWVvIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInZpbWVvLXNxdWFyZSJdLCAiZjE5NCIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTMxOC41IDMwOS41Yy00My41IDU2LjUtODAuMyA4NC44LTExMC40IDg0LjgtMTguNyAwLTM0LjQtMTcuMi00Ny4zLTUxLjYtMy44LTEzLjktNy4zLTI2LjktMTAuNS0zOS0xOC4yLTY4LjMtMjguNi0xMDcuNC00Ni4yLTEwNy40LTIuNCAwLTEwLjggNS0yNS4xIDE1LjFMNjQgMTkyYzctNi4xIDEzLjktMTIuNCAyMC42LTE4LjUgMjkuMS0yNi4zIDU1LjYtNTAuMyA3My41LTUxLjkgMjQuOS0yLjQgNDAuMiAxNC42IDQ2IDUxLjEgMjAuNSAxMjkuNiAyOS42IDE0OS4yIDY2LjggOTAuNSAxMy40LTIxLjIgMjAuNi0zNy4yIDIxLjUtNDguMyAzLjQtMzIuOC0yNS42LTMwLjYtNDUuMi0yMi4yIDE1LjctNTEuNSA0NS44LTc2LjUgOTAuMS03NS4xIDMyLjkgMSA0OC40IDIyLjQgNDYuNSA2NC0xLjQgMzEuMS0yMy4yIDczLjgtNjUuMyAxMjcuOXoiXQogICAgfTsKICAgIGZhVmltZW9TcXVhcmUgPSBmYVNxdWFyZVZpbWVvOwogICAgZmFQdXNoZWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicHVzaGVkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZTEiLCAiTTQxNS4xIDExMS45bC05OC41LTkgMTQtMzMuNGMxMC40LTIzLjUtMTAuOC00MC40LTI4LjctMzdMMzAuNiA3Ni45Yy0xNS4xIDIuNy0yNiAxOC4zLTIxLjQgMzYuNkwxMTQuMyA0NjEuOGM2LjUgMjEuMyAzNi43IDI0LjIgNDcuNyA3TDE5Ny4zIDM4OCA0MzIuNSAxNTYuN2MxNi40LTE2LjggNC4zLTQyLjktMTcuNC00NC44ek0zMDUuNyA1My42YzUuMS0uNyA3LjUgMi41IDUuMiA3LjRsLTE2LjggMzkuOS0xNzcuNC0xNi4zIDE4OS0zMXpNMzAuOCAxMDcuOWMtMy4xLTUuMSAxLTEwIDYuMS05LjFsMjQ4LjcgMjIuNy05Ni45IDIzMC43LTE1Ny45LTI0NC4zek0xNDQuMSA0NTYuNGMtMi42IDQtNy45IDMuMS05LjQtMS4yTDUxLjYgMTc5LjcgMTc5LjMgMzc3LjNjLTcgMTUtMzUuMiA3OS4xLTM1LjIgNzkuMXpNNDE2LjkgMTQxLjlsLTE5OC43IDE5NS40IDg5LjctMjEzLjcgMTA2LjQgOS43YzQgMS4xIDUuNyA1LjMgMi42IDguNnoiXQogICAgfTsKICAgIGZhTWl4Y2xvdWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWl4Y2xvdWQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjI4OSIsICJNMjEzIDM0Ni42bC0zMy4yIDAgMC0xNTEuNSA2LjItMjEuNi0xMC43IDAtMzguMSAxNzMuMS02MSAwLTM4LjQtMTczLjEtMTAuNSAwIDUuOSAyMS42IDAgMTUxLjUtMzMuMiAwIDAtMTgxLjYgNjUuNyAwIDM2LjYgMTczLjEgOC41IDAgMzYuNi0xNzMuMSA2NS43IDAgMCAxODEuNnptMzMxLjUtNjNsLTg2IDYyLjEgMC0zOC4xIDcyLjktNTEuOC03Mi45LTUxLjggMC0zOC4xIDg2IDYyLjMgOS4zIDAgODYuMy02Mi4zIDAgMzguMS03My4xIDUxLjggNzMuMSA1MS44IDAgMzguMS04Ni4zLTYyLjEtOS4zIDB6TTQzMC4yIDI3Mi4zbC0xODIgMCAwLTMzLjEgMTgyIDAgMCAzMy4xeiJdCiAgICB9OwogICAgZmFZYW5kZXhJbnRlcm5hdGlvbmFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInlhbmRleC1pbnRlcm5hdGlvbmFsIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImY0MTQiLCAiTTEyOS41IDUxMmwwLTE2Ni4xLTExMS0yOTcuOSA1NS44IDAgODEuOCAyMjkuNyA5NC4xLTI3Ny43IDUxLjMgMC0xMjAuNyAzNDcuOCAwIDE2NC4yLTUxLjMgMHoiXQogICAgfTsKICAgIGZhSGl2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJoaXZlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwN2YiLCAiTTI2MC40IDI1NC45TDEzMS41IDMzLjFjLS4yLS4zLS41LS42LS44LS44cy0uNy0uMy0xLjEtLjMtLjggLjEtMS4xIC4zLS42IC41LS44IC44TC4zIDI1NC45Yy0uMiAuMy0uMyAuNy0uMyAxLjFzLjEgLjggLjMgMS4xTDEyOS4xIDQ3OC45Yy4yIC4zIC41IC42IC44IC44cy43IC4zIDEuMSAuMyAuOC0uMSAxLjEtLjMgLjYtLjUgLjgtLjhMMjYwLjQgMjU3LjFjLjItLjMgLjMtLjcgLjMtMS4xcy0uMS0uOC0uMy0xLjF6bTM5LjEtMjUuN2MuMiAuMyAuNSAuNiAuOCAuOHMuNyAuMyAxLjEgLjNsNjYuNSAwYy40IDAgLjgtLjEgMS4xLS4zcy42LS41IC44LS44IC4zLS43IC4zLTEuMS0uMS0uOC0uMy0xLjFMMjU5LjEgMzMuMWMtLjItLjMtLjUtLjYtLjgtLjhzLS43LS4zLTEuMS0uM2wtNjYuNSAwYy0uNCAwLS44IC4xLTEuMSAuM3MtLjYgLjUtLjggLjgtLjMgLjctLjMgMS4xIC4xIC44IC4zIDEuMUwyOTkuNCAyMjkuMnptMjEyLjMgMjUuN0wzODQuOSAzMy4xYy0uMi0uMy0uNS0uNi0uOC0uOHMtLjctLjMtMS4xLS4zbC02Ni42IDBjLS40IDAtLjggLjEtMS4xIC4zcy0uNiAuNS0uOCAuOC0uMyAuNy0uMyAxLjEgLjEgLjggLjMgMS4xTDQ0MC43IDI1NiAzMTQuNSA0NzYuN2MtLjIgLjMtLjMgLjctLjMgMS4xcy4xIC44IC4zIDEuMSAuNSAuNiAuOCAuOCAuNyAuMyAxLjEgLjNsNjYuNiAwYy40IDAgLjgtLjEgMS4xLS4zcy42LS41IC44LS44TDUxMS43IDI1Ny4xYy4yLS4zIC4zLS43IC4zLTEuMXMtLjEtLjgtLjMtMS4xek0zNjYgMjg0LjlsLTY2LjUgMGMtLjQgMC0uOCAuMS0xLjEgLjNzLS42IC41LS44IC44TDE4OC44IDQ3Ni43Yy0uMiAuMy0uMyAuNy0uMyAxLjFzLjEgLjggLjMgMS4xIC41IC42IC44IC44IC43IC4zIDEuMSAuM2w2Ni41IDBjLjQgMCAuOC0uMSAxLjEtLjNzLjYtLjUgLjgtLjhMMzY3LjkgMjg4LjNjLjItLjMgLjMtLjcgLjMtMS4xcy0uMS0uOC0uMy0xLjEtLjUtLjYtLjgtLjgtLjctLjMtMS4xLS4zeiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNaZXJvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtemVybyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGYzIiwgIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6bS0uNCA2MC41Yy04MS45IDAtMTAyLjUgNzcuMy0xMDIuNSAxNDIuOFMxNzQuMSAzOTguOCAyNTYgMzk4LjggMzU4LjUgMzIxLjUgMzU4LjUgMjU2IDMzNy45IDExMy4yIDI1NiAxMTMuMnptMCA1My45YzMuMyAwIDYuNCAuNSA5LjIgMS4yIDUuOSA1LjEgOC44IDEyLjEgMy4xIDIxLjlMMjEzLjggMjkwLjRjLTEuNy0xMi43LTEuOS0yNS4xLTEuOS0zNC40IDAtMjguOCAyLTg4LjkgNDQuMS04OC45em00MC44IDQ2LjJjMi45IDE1LjQgMy4zIDMxLjQgMy4zIDQyLjcgMCAyOC45LTIgODguOS00NC4xIDg4LjktMTMuNSAwLTMyLjYtNy43LTIwLjEtMjYuNGw2MC45LTEwNS4yeiJdCiAgICB9OwogICAgZmFTcXVhcmVTbmFwY2hhdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtc25hcGNoYXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsic25hcGNoYXQtc3F1YXJlIl0sICJmMmFkIiwgIk0zODQgMzJMNjQgMzJjLTE3IDAtMzMuMyA2LjctNDUuMyAxOC43UzAgNzkgMCA5NkwwIDQxNmMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM1M0NyA0ODAgNjQgNDgwbDMyMCAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43UzQ0OCA0MzMgNDQ4IDQxNmwwLTMyMGMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM1M0MDEgMzIgMzg0IDMyem0tMy45IDMxOS4zbC0uMSAuMWMtMi41IDIuOC01LjQgNS4xLTguNyA2LjgtNi41IDMuNi0xMy40IDYuMy0yMC42IDguMi0xLjQgLjQtMi43IDEtMy45IDEuOC0yLjIgMS45LTIuMSA0LjYtNC40IDguNi0xLjcgMy00IDUuNS02LjggNy41LTYuNyA0LjYtMTQuMiA0LjktMjIuMiA1LjItNy4yIC4zLTE1LjQgLjYtMjQuNyAzLjctMy44IDEuMi03LjggMy43LTEyLjQgNi41LTExLjMgNi45LTI2LjcgMTYuNC01Mi4zIDE2LjRzLTQwLjktOS40LTUyLjEtMTYuM2MtNC43LTIuOS04LjctNS40LTEyLjUtNi42LTkuMy0zLjEtMTcuNS0zLjQtMjQuNy0zLjctOC0uMy0xNS41LS42LTIyLjItNS4yLTIuNC0xLjYtNC40LTMuNy02LTYuMS0zLjItNC42LTIuOS03LjgtNS4zLTkuOS0xLjMtLjgtMi42LTEuNS00LjEtMS44LTcuMS0xLjktMTMuOS00LjYtMjAuMy04LjEtMy4xLTEuNi01LjktMy44LTguMy02LjMtNi42LTYuOC04LjMtMTQuOC01LjctMjEuOCAzLjQtOS4zIDExLjYtMTIuMSAxOS40LTE2LjMgMTQuOC04IDI2LjMtMTguMSAzNC40LTI5LjkgMi4zLTMuMyA0LjMtNi45IDYtMTAuNiAuOC0yLjIgLjgtMy4zIC4yLTQuNC0uNi0uOS0xLjMtMS42LTIuMi0yLjItMi41LTEuNy01LjEtMy40LTYuOS00LjUtMy4zLTIuMS01LjktMy44LTcuNS01LTYuMy00LjQtMTAuNi05LTEzLjQtMTQuMi0xLjktMy42LTMtNy42LTMuMy0xMS42cy40LTguMSAxLjktMTEuOWM0LjEtMTAuOSAxNC41LTE3LjcgMjctMTcuNyAyLjYgMCA1LjMgLjMgNy44IC44IC43IC4yIDEuNCAuMyAyIC41LS4xLTcuNCAuMS0xNS40IC43LTIzLjEgMi40LTI3LjMgMTEuOS00MS42IDIxLjktNTMgNi40LTcuMiAxMy45LTEzLjIgMjIuMy0xNy45IDE1LjEtOC42IDMyLjItMTMgNTAuOS0xM3MzNS44IDQuNCA1MC45IDEzYzguMyA0LjcgMTUuOSAxMC44IDIyLjIgMTcuOSAxMCAxMS40IDE5LjUgMjUuNyAyMS45IDUzIC42IDcuNyAuOSAxNS40IC43IDIzLjEgLjctLjIgMS40LS4zIDIuMS0uNSAyLjYtLjYgNS4yLS44IDcuOC0uOCAxMi41IDAgMjIuOCA2LjggMjcgMTcuNyAxLjUgMy44IDIuMSA3LjkgMS45IDExLjlzLTEuNCA4LTMuMyAxMS42Yy0yLjcgNS4yLTcuMSA5LjktMTMuNCAxNC4yLTEuNyAxLjItNC4zIDIuOS03LjUgNS0xLjggMS4yLTQuNSAyLjktNy4yIDQuNy0uOCAuNS0xLjQgMS4yLTEuOSAyLS41IDEtLjUgMi4yIC4yIDQuMiAxLjcgMy44IDMuNyA3LjQgNi4xIDEwLjggOC4zIDEyLjEgMjAuMiAyMi4zIDM1LjUgMzAuNCAxLjUgLjggMyAxLjUgNC40IDIuMyAuNyAuMyAxLjYgLjggMi41IDEuMyA0LjkgMi43IDkuMiA2IDExLjUgMTIuMiAyLjUgNi45IDEgMTQuNy01LjIgMjEuM3ptLTE2LjctMTguNWMtNTAuMy0yNC4zLTU4LjMtNjEuOS01OC43LTY0LjctLjQtMy40LS45LTYgMi44LTkuNSAzLjYtMy4zIDE5LjUtMTMuMiAyNC0xNi4zIDcuMy01LjEgMTAuNS0xMC4yIDguMi0xNi41LTEuNy00LjMtNS43LTYtMTAtNi0xLjMgMC0yLjcgLjItNCAuNC04IDEuNy0xNS44IDUuOC0yMC40IDYuOS0uNSAuMS0xLjEgLjItMS43IC4yLTIuNCAwLTMuMy0xLjEtMy4xLTQgLjYtOC44IDEuOC0yNS45IC40LTQxLjktMS45LTIyLTktMzIuOS0xNy40LTQyLjYtNC4xLTQuNi0yMy4xLTI0LjctNTkuNS0yNC43cy01NS40IDIwLjEtNTkuNSAyNC44Yy04LjQgOS43LTE1LjUgMjAuNi0xNy40IDQyLjYtMS40IDE2LS4xIDMzLjEgLjQgNDEuOSAuMiAyLjgtLjcgNC0zLjEgNC0uNiAwLTEuMS0uMS0xLjctLjItNC41LTEuMS0xMi4zLTUuMS0yMC4zLTYuOS0xLjMtLjMtMi42LS40LTQtLjQtNC4zIDAtOC4zIDEuNi0xMCA2LTIuNCA2LjMgLjggMTEuNCA4LjIgMTYuNSA0LjQgMy4xIDIwLjQgMTMgMjQgMTYuMyAzLjcgMy40IDMuMiA2LjEgMi44IDkuNS0uNCAyLjgtOC40IDQwLjQtNTguNyA2NC43LTIuOSAxLjQtOCA0LjQgLjkgOS4zIDEzLjkgNy42IDIzLjEgNi44IDMwLjMgMTEuNCA2LjEgMy45IDIuNSAxMi40IDYuOSAxNS40IDUuNSAzLjggMjEuNi0uMyA0Mi4zIDYuNiAxNy40IDUuNyAyOC4xIDIyIDU5IDIyczQxLjgtMTYuMyA1OC45LTIyYzIwLjgtNi45IDM2LjktMi44IDQyLjMtNi42IDQuNC0zLjEgLjgtMTEuNSA2LjktMTUuNCA3LjItNC42IDE2LjQtMy44IDMwLjMtMTEuNSA4LjgtNC45IDMuOC03LjkgLjktOS40eiJdCiAgICB9OwogICAgZmFTbmFwY2hhdFNxdWFyZSA9IGZhU3F1YXJlU25hcGNoYXQ7CiAgICBmYVRoZW1laXNsZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0aGVtZWlzbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjJiMiIsICJNMjA4IDg4LjNjMC0xMCA2LjMtMjEuNyAxNy43LTIxLjcgMTEuMSAwIDE3LjcgMTEuNyAxNy43IDIxLjcgMCAxMC4zLTYuNiAyMS43LTE3LjcgMjEuNy0xMS40IDAtMTcuNy0xMS40LTE3LjctMjEuN3ptMzA0IDE2MGMwIDM2LTExLjQgMTAyLjMtMzYuMyAxMjkuNy0yMi45IDI0LjktODcuNCA2MS4xLTEyMC45IDcwLjZsLTEuMSAuMyAwIDMyLjZjMCAxNi4zLTEyLjYgMzAuNi0yOS4xIDMwLjYtMTAgMC0xOS40LTUuNy0yNC42LTE0LjMtNS40IDguNi0xNC45IDE0LjMtMjQuOSAxNC4zcy0xOS40LTUuNy0yNC45LTE0LjNjLTUuMSA4LjYtMTQuNiAxNC4zLTI0LjYgMTQuMy0xMC4zIDAtMTkuNC01LjctMjQuOS0xNC4zLTUuMSA4LjYtMTQuNiAxNC4zLTI0LjYgMTQuMy0xOC45IDAtMjkuNC0xNS43LTI5LjQtMzIuOS0xNi4zIDEyLjMtMzUuNyAxOS40LTU2LjYgMTkuNC0yMiAwLTQzLjQtOC4zLTYwLjMtMjIuOSAxMC4zLS4zIDIwLjYtMi4zIDMwLjMtNS43LTIwLjktNS43LTM5LjQtMTguOS01Mi0zNi4zIDIxLjQgNC42IDQ2LjIgMS43IDY3LjEtMTEuMS0yMi0yMi01Ni42LTU4LjktNjguNi04Ny40LTUuNy0xMy40LTYuOS0zMS40LTYuOS00NS43IDAtNDkuNyAyMC4zLTE2MCA4Ni4zLTE2MCAxMC42IDAgMTguOSA0LjkgMjMuMSAxNC45IDMuNy01LjQgNy43LTEwLjUgMTItMTUuNCAyLTIuNiA1LjctNS40IDcuMS04LjMgOC0xMi42IDExLjctMjEuMSAyMS43LTM0IDMyLjMtNDEuMSA4MS43LTY5LjQgMTM0LjktNjkuNCA2IDAgMTIgLjMgMTcuNyAxLjEgMTAuOS0xMS43IDI2LTE4LjMgNDEuNy0xOC4zIDE0LjYgMCAyOS43IDYgNDAgMTYuMyAuOSAuOSAxLjQgMi4zIDEuNCAzLjQgMCAzLjctMTAuMyAxMy40LTEyLjkgMTYuMyA0LjMgMS40IDE1LjcgNi45IDE1LjcgMTIgMCAyLjktMi45IDUuMS00LjYgNy4xIDMxLjQgMjcuNyA0OS40IDY3LjEgNTYuMyAxMDggNC4zLTUuMSAxMC4zLTguNiAxNy4xLTguNiAxMC42IDAgMjAuOSA3LjEgMjguNiAxNCAyMC45IDE4LjYgMjUuNyA1My4xIDI1LjcgNzkuN3pNMTg4IDg5LjRjMCAxOC4zIDEyLjYgMzcuMSAzMi4zIDM3LjFzMzIuMy0xOC45IDMyLjMtMzcuMWMwLTE4LTEyLjYtMzYuOS0zMi4zLTM2LjlTMTg4IDcxLjQgMTg4IDg5LjR6TTIzNy43IDE5NGMwLTE5LjcgMy43LTM5LjEgOC42LTU4LjMtNTIgNzkuNS0xMy41IDE4NC42IDY4LjkgMTg0LjYgMjEuNCAwIDQyLjYtNy43IDYwLTIwIDItNy40IDMuNy0xNC45IDMuNy0yMi42IDAtMTQuMy02LjMtMjEuNC0yMC42LTIxLjQtNC42IDAtOS4xIC45LTEzLjQgMS43LTYzLjMgMTIuNy0xMDcuMSAzLjctMTA3LjEtNjR6TTE5Ni42IDQ0OC45YzAtMTEuMS04LjktMjAuOS0yMC4zLTIwLjlzLTIwIDkuNy0yMCAyMC45bDAgMzIuNmMwIDExLjEgOC42IDIxLjEgMjAgMjEuMXMyMC4zLTkuNyAyMC4zLTIxLjFsMC0zMi42em00OS4xIDBjMC0xMS4xLTguNi0yMC45LTIwLTIwLjlzLTIwLjMgOS43LTIwLjMgMjAuOWwwIDMyLjZjMCAxMS4xIDguOSAyMS4xIDIwLjMgMjEuMXMyMC0xMCAyMC0yMS4xbDAtMzIuNnptNDkuNyAwYzAtMTEuMS04LjktMjAuOS0yMC4zLTIwLjlzLTIwLjMgOS43LTIwLjMgMjAuOWwwIDMyLjZjMCAxMS4xIDguOSAyMS4xIDIwLjMgMjEuMXMyMC4zLTkuNyAyMC4zLTIxLjFsMC0zMi42em00OS43IDBjMC0xMS4xLTguOS0yMC45LTIwLjMtMjAuOXMtMjAuMyA5LjctMjAuMyAyMC45bDAgMzIuNmMwIDExLjEgOC45IDIxLjEgMjAuMyAyMS4xczIwLjMtMTAgMjAuMy0yMS4xbDAtMzIuNnpNNDIxLjcgMjg2Yy0zMC45IDU5LjEtOTAuMyAxMDIuNi0xNTguNiAxMDIuNi05Ni42IDAtMTYwLjYtODQuNi0xNjAuNi0xNzYuNiAwLTE2LjkgMi0zMy40IDYtNDkuNy0yMCAzMy43LTI5LjcgNzIuNi0yOS43IDExMS40IDAgNjAuMyAyNC45IDEyMS43IDcxLjQgMTYwLjkgNS4xLTkuNyAxNC45LTE2LjMgMjYtMTYuMyAxMCAwIDE5LjQgNS43IDI0LjYgMTQuMyA1LjQtOC42IDE0LjYtMTQuMyAyNC45LTE0LjMgMTAgMCAxOS40IDUuNyAyNC42IDE0LjMgNS40LTguNiAxNC45LTE0LjMgMjQuOS0xNC4zczE5LjQgNS43IDI0LjkgMTQuM2M1LjEtOC42IDE0LjYtMTQuMyAyNC42LTE0LjMgMTAuOSAwIDIwLjkgNi42IDI1LjcgMTYgNDMuNC0zNi4zIDY4LjYtOTIgNzEuNC0xNDguM3ptMTAuNi05OS43YzAtNTMuNy0zNC42LTEwNS43LTkyLjYtMTA1LjctMzAuMyAwLTU4LjYgMTUuMS03OC45IDM2LjktMjAgNjYuNC0yNy40IDEzNi42IDQxLjQgMTM2LjYgMjguOCAwIDk3LjQtMjguNSA4NC4zIDM2LjkgMjguOS0yNiA0NS43LTY1LjcgNDUuNy0xMDQuNnoiXQogICAgfTsKICAgIGZhRGFydExhbmcgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGFydC1sYW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU2OTMiLCAiTTM3OC42IDc4LjljLTIuOC0uMS01LjYtLjItOC41LS4ybC0yNjQuMSAwIDE0My4yLTcyYzcuNC00LjQgMTguOC02LjcgMzAuNC02LjcgMTMuNSAwIDI5LjQgOS4yIDM3IDE2LjhsNjIgNjIgMCAuMXpNMTA3LjMgOTYuNWwyNjIuOCAwYzE2IDAgMjUuNCAxLjQgMzUuNCA5LjNsMTA2LjUgMTA2LjQgMCAyMDguOC03OS4zIC43LTMyNS40LTMyNS4yek05Ni41IDM3M2wwLTI2Mi4yIDMyMy44IDMyMy44IC43IDc3LjQtMjEyLjIgMC05OC4xLTk4LjJDOTkuNCA0MDIuNSA5Ni41IDM5OC41IDk2LjUgMzczek03OC43IDEwNS4zbDAgMjY3LjdjMCAzLjMgLjEgNi4zIC4yIDkuMWwtNjItNjJDNi41IDMwOS4zIDAgMjk0LjMgMCAyNzkuNiAwIDI3Mi44IDMuOSAyNjIuMSA2LjcgMjU2bDcyLTE1MC43eiJdCiAgICB9OwogICAgZmFEZXBsb3lkb2cgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGVwbG95ZG9nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzOGUiLCAiTTM4Mi4yIDEzNmw1MS43IDAgMCAyMzkuNi01MS43IDAgMC0yMC43Yy0xOS44IDI0LjgtNTIuOCAyNC4xLTczLjggMTQuNy0yNi4yLTExLjctNDQuMy0zOC4xLTQ0LjMtNzEuOCAwLTI5LjggMTQuOC01Ny45IDQzLjMtNzAuOCAyMC4yLTkuMSA1Mi43LTEwLjYgNzQuOCAxMi45bDAtMTAzLjl6TTMxNy41IDI5Ny44YTMzLjIgMzMuMiAwIDEgMCA2Ni40IDEgMzMuMiAzMy4yIDAgMSAwIC02Ni40LTF6TTE4OC41IDEzNmw1MS43IDAgMCAyMzkuNi01MS43IDAgMC0yMC43Yy0xOS44IDI0LjgtNTIuOCAyNC4xLTczLjggMTQuNy0yNi4yLTExLjctNDQuMy0zOC4xLTQ0LjMtNzEuOCAwLTI5LjggMTQuOC01Ny45IDQzLjMtNzAuOCAyMC4yLTkuMSA1Mi43LTEwLjYgNzQuOCAxMi45bDAtMTAzLjl6TTEyMy44IDI5Ny44YTMzLjIgMzMuMiAwIDEgMCA2Ni40IDEgMzMuMiAzMy4yIDAgMSAwIC02Ni40LTF6TTQ0OCA5NmMxNy41IDAgMzIgMTQuNCAzMiAzMmwwIDI1NmMwIDE3LjUtMTQuNCAzMi0zMiAzMkw2NCA0MTZjLTE3LjUgMC0zMi0xNC40LTMyLTMybDAtMjU2YzAtMTcuNSAxNC40LTMyIDMyLTMybDM4NCAwem0wLTMyTDY0IDY0QzI4LjggNjQgMCA5Mi44IDAgMTI4TDAgMzg0YzAgMzUuMiAyOC44IDY0IDY0IDY0bDM4NCAwYzM1LjIgMCA2NC0yOC44IDY0LTY0bDAtMjU2YzAtMzUuMi0yOC44LTY0LTY0LTY0eiJdCiAgICB9OwogICAgZmFGbGlwYm9hcmQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmxpcGJvYXJkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0NGQiLCAiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTM1OC40IDIxMS4ybC04OS42IDAgMCA4OS42LTg5LjYgMCAwIDg5LjYtODkuNiAwIDAtMjY4LjggMjY4LjggMCAwIDg5LjZ6Il0KICAgIH07CiAgICBmYUJ1eU5MYXJnZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJidXktbi1sYXJnZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmOGE2IiwgIk0yODguMiAzMkMxMzMuNSAzMiA4IDEzMi4zIDggMjU2UzEzMy41IDQ4MCAyODguMiA0ODAgNTY4LjQgMzc5LjcgNTY4LjQgMjU2IDQ0Mi45IDMyIDI4OC4yIDMyek0yMDIuOCAzODkuMmwtMTM4LjUgMS40IDc3LjItMjkwLjcgMTMzLjQgMGM2My4yIDAgODQuOSAyOC42IDc4IDcyLjgtLjQgMi4zLS45IDQuNi0xLjUgNi45LTUuNi0xLjMtMTEuNC0xLjktMTcuMi0xLjktNDIuMyAwLTc2LjcgMzMuOS03Ni43IDc1LjcgMCAzNy4xIDI3LjEgNjggNjIuOSA3NC41LTE4LjIgMzcuMi01Ni4yIDYwLjktMTE3LjcgNjEuNXpNMzU4LjIgMjA3LjFsMzIgMC0yMi4yIDkwLjMtMzUuNCAwLTExLjItMzUuNi03LjggMzUuNi0zNy44IDAgMjYuNi05MC4zIDMxLjMgMCAxNSAzNi44IDkuNC0zNi44ek01MDQuMSAzODkuMmwtMTk3LjEgMCAxNS44LTYxLjJjMy44IC42IDcuNiAuOCAxMS41IC44IDQyLjMgMCA3Ni43LTMzLjkgNzYuNy03NS42IDAtMzIuNi0yMS02MC41LTUwLjQtNzEuMWwyMS4zLTgyLjQgOTIuNSAwLTUzIDIwNS40IDEwMy45IDAtMjEuMiA4NC4xek0yMTEuOSAyNjkuNGwtMjQuNyAwLTEzLjggNTYuNSAyNC43IDBjMTYuMSAwIDMyLjEtMy4yIDM3LjktMjYuNiA1LjYtMjIuMy04LTI5LjgtMjQuMS0yOS44ek0yMzMuMiAxNzBsLTIxLjMgMC0xMS43IDQ3LjcgMjEuNCAwYzE4IDAgMzUuNC0xNC42IDM5LjItMzAuMSA0LjYtMTguOS05LjUtMTcuNi0yNy42LTE3LjZ6Il0KICAgIH07CiAgICBmYVdhdGNobWFuTW9uaXRvcmluZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3YXRjaG1hbi1tb25pdG9yaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwODciLCAiTTI1NiAxNmEyNDAgMjQwIDAgMSAwIDAgNDgwIDI0MCAyNDAgMCAxIDAgMC00ODB6TTEyMS43IDQyOS4xYy01MS42LTQwLjItODQuOS0xMDIuOC04NC45LTE3My4xIDAtMjEuNyAzLjItNDMuMyA5LjYtNjQuMWwxMDIuOS0xNy45LS4xIDExLTEzLjkgMnMtLjEgMTIuNS0uMSAxOS41YzAgMiAuNCA0IDEuMiA1LjhzMi4xIDMuNCAzLjcgNC42bDkuNSA3LjQtMjcuNyAyMDQuOXpNMjI3LjQgMTQ1LjlsOC41LTcuNnM2LjktNS40LS4xLTkuM2MtNy4yLTQtMzkuNS0zNC41LTM5LjUtMzQuNS01LjMtNS41LTguMy03LjMtMTUuNSAwIDAgMC0zMi4zIDMwLjUtMzkuNSAzNC41LTcuMSA0LS4xIDkuMy0uMSA5LjNsOC41IDcuNiAwIDQuNC03My41LTE5LjJjMzkuNi01Ni45IDEwNS41LTk0LjMgMTgwLTk0LjMgMzEuMyAwIDYyLjIgNi43IDkwLjYgMTkuNnM1My44IDMxLjggNzQuMyA1NS40bC0xOTMuNSAzNy43IDAtMy42em0zNC4xIDMyOS4zbC0zMy45LTI1MC45IDkuNS03LjRjMS42LTEuMiAyLjgtMi44IDMuNy00LjZzMS4zLTMuOCAxLjItNS44YzAtNy0uMS0xOS41LS4xLTE5LjVsLTEzLjktMi0uMS0xMC41IDI0MS43IDMxLjRjMy45IDE2LjQgNS44IDMzLjMgNS44IDUwLjEgMCAxMTkuMS05NS40IDIxNi4yLTIxMy44IDIxOS4xeiJdCiAgICB9OwogICAgZmFIaXBzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhpcHMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQ1MiIsICJNMjUxLjYgMTU3LjZjMC0xLjktLjktMi44LTIuOC0yLjhsLTQwLjkgMGMtMS42IDAtMi43IDEuNC0yLjcgMi44bDAgMjAxLjhjMCAxLjQgMS4xIDIuOCAyLjcgMi44bDQwLjkgMGMxLjkgMCAyLjgtLjkgMi44LTIuOGwwLTIwMS44ek0xNTYuNSAxNjhjLTE2LjEtMTEuOC0zNi4zLTE3LjktNjAuMy0xOC0xOC4xLS4xLTM0LjYgMy43LTQ5LjggMTEuNGwwLTgxLjJjMC0xLjgtLjktMi43LTIuOC0yLjdsLTQwLjkgMEMuOSA3Ny41IDAgNzguNCAwIDgwLjJMMCAzNTkuNGMwIDEuOSAuOSAyLjggMi43IDIuOGw0MSAwYzEuOSAwIDIuOC0uOSAyLjgtMi44bDAtMTM2LjFjMC0uOC0yLjgtMjcgNDUuOC0yNyA0OC41IDAgNDUuOCAyNi4xIDQ1LjggMjdsMCAxMjIuNmMwIDkgNy4zIDE2LjMgMTYuNCAxNi4zbDI3LjMgMGMxLjggMCAyLjctLjkgMi43LTIuOGwwLTEzNi4xYzAtMjMuNC05LjMtNDEuOC0yOC01NS4zek02MzQuOSAyNzguMWMtNi44LTE1LjctMTguNC0yNy0zNC45LTM0LjFsLTU3LjYtMjUuM2MtOC42LTMuNi05LjItMTEuMi0yLjYtMTYuMSA3LjQtNS41IDQ0LjMtMTMuOSA4NCA2LjggMS43IDEgNC0uMyA0LTIuNGwwLTQ0LjdjMC0xLjMtLjYtMi4xLTEuOS0yLjYtMTcuNy02LjYtMzYuMS05LjktNTUuMS05LjktMjYuNSAwLTQ1LjMgNS44LTU4LjUgMTUuNC0uNSAuNC0yOC40IDIwLTIyLjcgNTMuNyAzLjQgMTkuNiAxNS44IDM0LjIgMzcuMiA0My42TDU4MC40IDI4NmMxMS42IDUuMSAxNS4yIDEzLjMgMTIuMiAyMS4yLTMuNyA5LjEtMTMuMiAxMy42LTM2LjUgMTMuNi0yNC4zIDAtNDQuNy04LjktNTguNC0xOS4xLTIuMS0xLjQtNC40IC4yLTQuNCAyLjNsMCAzNC40YzAgMTAuNCA0LjkgMTcuMyAxNC42IDIwLjcgMTUuNiA1LjUgMzEuNiA4LjIgNDguMiA4LjIgMTIuNyAwIDI1LjgtMS4yIDM2LjMtNC4zIC43LS4zIDM2LTguOSA0NS42LTQ1LjggMy41LTEzLjUgMi40LTI2LjUtMy4xLTM5LjF6TTM3Ni4yIDE0OS44Yy0zMS43IDAtMTA0LjIgMjAuMS0xMDQuMiAxMDMuNWwwIDE4My41YzAgLjggLjYgMi43IDIuNyAyLjdsNDAuOSAwYzEuOSAwIDIuOC0uOSAyLjgtMi43bDAtODguOGMxNi41IDEyLjcgMzUuOCAxOS4xIDU3LjcgMTkuMSA2MC41IDAgMTA4LjctNDguNSAxMDguNy0xMDguNyAuMS02MC4zLTQ4LjItMTA4LjYtMTA4LjYtMTA4LjZ6bTAgNDYuNmE2Mi4yIDYyLjIgMCAxIDEgMCAxMjQuMyA2Mi4yIDYyLjIgMCAxIDEgMC0xMjQuM3pNMjI4LjMgNzIuNWMtMTUuOSAwLTI4LjggMTIuOS0yOC45IDI4LjkgMCAxNS42IDEyLjcgMjguOSAyOC45IDI4LjlzMjguOS0xMy4xIDI4LjktMjguOWMwLTE2LjItMTMtMjguOS0yOC45LTI4Ljl6Il0KICAgIH07CiAgICBmYUNsb3VkdmVyc2lmeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZHZlcnNpZnkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjM4NSIsICJNMTYwLjYgMzA0YzguMiA2OC41IDY3LjQgMTE1LjUgMTQ2IDExMS4zIDUxLjIgNDMuMyAxMzYuOCA0NS44IDE4Ni40LTUuNiA2OS4yIDEuMSAxMTguNS00NC42IDEzMS41LTk5LjUgMTQuOC02Mi41LTE4LjItMTMyLjUtOTIuMS0xNTUuMS0zMy04OC4xLTEzMS40LTEwMS41LTE4Ni41LTg1LTU3LjMgMTcuMy04NC4zIDUzLjItOTkuMyAxMDkuNy03LjggMi43LTI2LjUgOC45LTQ1IDI0LjEgMTEuNyAwIDE1LjIgOC45IDE1LjIgMTkuNWwwIDIwLjRjMCAxMC43LTguNyAxOS41LTE5LjUgMTkuNWwtMjAuMiAwYy0xMC43IDAtMTkuNS02LTE5LjUtMTYuN2wwLTYuNi00Ni44IDBjLTMuOCAwLTEwLjggNC4zLTEwLjggMTEuOWwwIDQwLjRjMCA2LjQgNS4zIDExLjggMTEuNyAxMS44bDQ4LjkgMCAwLS4xek0zODggMzEyYy0xMC43IDQ2LjMgMjEuNyA3Mi40IDU1LjMgODYuOC0xMDcuMiAzMy44LTE3MS42LTUwLjgtMTM1LjMtMTEwLjgtMzMuMiAyMS42LTMzLjcgNzEuMi0yOS4yIDkyLjktMTcuOS0xMi40LTUzLjgtMzIuNC01Ny40LTc5LjgtMy0zOS45IDIxLjUtNzUuNyA1Ny05My45IDMwLjYtMTUuOCAxMDMuNS04LjUgMTMzLjYgNDAuOC0xNC4xLTQ4LTUzLjgtNzAuMS0xMDEuOC03NC44IDMwLjktMzAuNyA2NC40LTUwLjMgMTE0LjItNDMuNyA2OS44IDkuMyAxMzMuMiA4Mi44IDY3LjcgMTUwLjUgMzUtMTYuMyA0OC43LTU0LjQgNDcuNS03Ni45bDEwLjUgMTkuNmMxMS44IDIyIDE1LjIgNDcuNiA5LjQgNzItOS4yIDM5LTQwLjYgNjguOC03OS43IDc2LjUtMzIuMSA2LjMtODMuMS01LjEtOTEuOC01OS4yek0xNDAgMjA4bC0zOS44IDBjLTguOSAwLTE2LjItNy4zLTE2LjItMTYuMmwwLTM5LjZjMC04LjkgNy4zLTE2LjIgMTYuMi0xNi4ybDM5LjggMGM4LjkgMCAxNi4yIDcuMyAxNi4yIDE2LjJsMCAzOS42YzAgOC45LTcuMyAxNi4yLTE2LjIgMTYuMnpNMjIuMSAxNjhjLTUuNiAwLTEwLjEtNC41LTEwLjEtMTAuMWwwLTI3LjhjMC01LjYgNC41LTEwLjEgMTAuMS0xMC4xbDI3LjcgMGM1LjUgMCAxMC4xIDQuNSAxMC4xIDEwLjFsMCAyNy44YzAgNS42LTQuNSAxMC4xLTEwLjEgMTAuMWwtMjcuNyAwek0xODAgMTQyLjdsMC0yMS40YzAtNS4xIDQuMi05LjMgOS4zLTkuM2wyMS40IDBjNS4xIDAgOS4zIDQuMiA5LjMgOS4zbDAgMjEuNGMwIDUuMS00LjIgOS4zLTkuMyA5LjNsLTIxLjQgMGMtNS4xIDAtOS4zLTQuMi05LjMtOS4zek02OCAyMzUuNWwwIDI1YzAgNi4zLTUuMSAxMS41LTExLjQgMTEuNWwtMjUuMiAwYy02LjMgMC0xMS40LTUuMi0xMS40LTExLjVsMC0yNWMwLTYuMyA1LjEtMTEuNSAxMS40LTExLjVsMjUuMSAwYzYuNCAwIDExLjUgNS4yIDExLjUgMTEuNXoiXQogICAgfTsKICAgIGZhR29vZHJlYWRzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2RyZWFkcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2E4IiwgIk0yOTkuOSAxOTEuMmM1LjEgMzcuMy00LjcgNzktMzUuOSAxMDAuNy0yMi4zIDE1LjUtNTIuOCAxNC4xLTcwLjggNS43LTM3LjEtMTcuMy00OS41LTU4LjYtNDYuOC05Ny4yIDQuMy02MC45IDQwLjktODcuOSA3NS4zLTg3LjUgNDYuOS0uMiA3MS44IDMxLjggNzguMiA3OC4zek00NDggODhsMCAzMzZjMCAzMC45LTI1LjEgNTYtNTYgNTZMNTYgNDgwYy0zMC45IDAtNTYtMjUuMS01Ni01NkwwIDg4QzAgNTcuMSAyNS4xIDMyIDU2IDMybDMzNiAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2ek0zMzAgMzEzLjJzLS4xLTM0LS4xLTIxNy4zbC0yOSAwIDAgNDAuM2MtLjggLjMtMS4yLS41LTEuNi0xLjItOS42LTIwLjctMzUuOS00Ni4zLTc2LTQ2LTUxLjkgLjQtODcuMiAzMS4yLTEwMC42IDc3LjgtNC4zIDE0LjktNS44IDMwLjEtNS41IDQ1LjYgMS43IDc3LjkgNDUuMSAxMTcuOCAxMTIuNCAxMTUuMiAyOC45LTEuMSA1NC41LTE3IDY5LTQ1LjIgLjUtMSAxLjEtMS45IDEuNy0yLjkgLjIgLjEgLjQgLjEgLjYgLjIgLjMgMy44IC4yIDMwLjcgLjEgMzQuNS0uMiAxNC44LTIgMjkuNS03LjIgNDMuNS03LjggMjEtMjIuMyAzNC43LTQ0LjUgMzkuNS0xNy44IDMuOS0zNS42IDMuOC01My4yLTEuMi0yMS41LTYuMS0zNi41LTE5LTQxLjEtNDEuOC0uMy0xLjYtMS4zLTEuMy0yLjMtMS4zbC0yNi44IDBjLjggMTAuNiAzLjIgMjAuMyA4LjUgMjkuMiAyNC4yIDQwLjUgODIuNyA0OC41IDEyOC4yIDM3LjQgNDkuOS0xMi4zIDY3LjMtNTQuOSA2Ny40LTEwNi4zeiJdCiAgICB9OwogICAgZmFUaWRhbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0aWRhbCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlN2RjIiwgIk0xMDcuMiA0OGwtMS4zIDBjLTMyLjMgMzMuMS02NS40IDY1LjUtOTggOTguNS0yLjYgMi44LTYuMSA1LjEtNy45IDguNiAzNS42IDM1LjQgNzEgNzEgMTA2LjYgMTA2LjQgMzUuNC0zNS4zIDcwLjctNzAuOCAxMDYuMS0xMDYuMWwwLTEuMy03My4yLTczLjJDMTI4LjggNjkuOCAxMTcuMyA1OS42IDEwNy4yIDQ4em0yMTMuNSAwbC0xLjMgMGMtMzQuOSAzNi4xLTcxLjUgNzEtMTA2LjMgMTA3LjIgMzUuOSAzNS4xIDcxIDcxIDEwNi43IDEwNi4zIDM0LjMtMzQuMSA2OC40LTY4LjQgMTAyLjYtMTAyLjQgMS41LTEuNSAzLjMtMi44IDQuMS00LjgtMzQuNi0zMy44LTY4LjQtNjguMi0xMDIuNi0xMDIuMS0xLjMtMS4zLTIuMy0yLjYtMy4zLTQuMXptMjEzLjUgMGwtMS4zIDBjLTE3LjIgMTgtMzUuMSAzNS4zLTUyLjYgNTMtMTcuOSAxNy43LTM1LjQgMzUuNy01My41IDUzLjMgLjggMi4zIDMgMy42IDQuNiA1LjVMNTMzLjMgMjYxLjVjMzYuMS0zNC45IDcwLjgtNzEuMiAxMDYuNy0xMDYuMS0uNS0yLjItMi42LTMuNS00LTVMNTU1LjggNzAuMmMtNy4xLTcuNC0xNC45LTE0LjItMjEuNS0yMi4yek0zMTkuNiAyNjEuN2MtMzQuOSAzNS4xLTcwIDcwLTEwNC45IDEwNC45LS4zIC43LS43IDEuNy0xIDIuMyAyNCAyMy43IDQ3LjcgNDcuNSA3MS41IDcxLjMgMTEuOCAxMS4zIDIyLjggMjMuNSAzNC45IDM0LjQgOC40LTcuNCAxNi40LTE2LjQgMjQuNy0yNC4zIDI1LjUtMjUuMyA1MS01MSA3Ni41LTc2LjMgMS44LTIuMiA0LjMtMy42IDUuNS02LjMtMzUuNC0zNC45LTcwLjUtNzAuMi0xMDUuNi0xMDUuNGwtMS41LS43eiJdCiAgICB9OwogICAgZmFVbml0eSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1bml0eSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMDQ5IiwgIk0yNDMuNiA5MS42bDgwLjEgNDYuOGMyLjkgMS42IDMgNi4yIDAgNy44bC05NS4yIDU1LjZjLTIuOSAxLjctNi4zIDEuNi05IDBsLTk1LjItNTUuNmMtMi45LTEuNi0zLTYuMyAwLTcuOGw4MC4xLTQ2LjggMC05MS42LTIwNC40IDExOS40IDAgMjM4LjggNzguNC00NS44IDAtOTMuNmMtLjEtMy4zIDMuOC01LjcgNi43LTMuOWw5NS4yIDU1LjZjMi45IDEuNyA0LjUgNC43IDQuNSA3LjhsMCAxMTEuMmMuMSAzLjMtMy44IDUuNy02LjcgMy45TDk4IDM0Ni44IDE5LjYgMzkyLjYgMjI0IDUxMiA0MjguNCAzOTIuNiAzNTAgMzQ2LjggMjY5LjkgMzkzLjZjLTIuOCAxLjctNi44LS41LTYuNy0zLjlsMC0xMTEuMmMwLTMuMyAxLjgtNi4zIDQuNS03LjhMMzYyLjkgMjE1YzIuOC0xLjcgNi44IC41IDYuNyAzLjlsMCA5My42IDc4LjQgNDUuOCAwLTIzOC44LTIwNC40LTExOS40IDAgOTEuNnoiXQogICAgfTsKICAgIGZhVGVuY2VudFdlaWJvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRlbmNlbnQtd2VpYm8iLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjFkNSIsICJNNDAuNSA0OTUuOGMxLjQgMTkuOS0yNy42IDIyLjItMjkuNyAyLjktMTEuNi0xMjkuOSAzMS4xLTIzOS41IDEwMS40LTMxMy4yLTE1LjYtMzQgOS4yLTc3LjEgNTAuNi03Ny4xIDMwLjMgMCA1NS4xIDI0LjYgNTUuMSA1NS4xIDAgNDQtNDkuNSA3MC44LTg2LjkgNDUuMS02NS43IDcxLjMtMTAxLjQgMTY5LjgtOTAuNSAyODcuMnpNMTYwLjIgLjFjLTEyNS45IDAtMjA0LjMgMTM0LjItMTQ4LjMgMjQyLjMgOC43IDE3LjQgMzUuMyA0LjUgMjYuMy0xMy40LTQ2LjMtOTIuNiAyMS0xOTkuMiAxMjItMTk5LjIgNzUuNCAwIDEzNi45IDYxLjQgMTM2LjkgMTM2LjkgMCA5MC44LTg2LjkgMTUzLjktMTY3LjcgMTMzLjEtMTkuMS00LjEtMjUuNiAyNC40LTYuNiAyOS4xIDExMC43IDIzLjIgMjA0LTYwIDIwNC0xNjIuMyAwLTkxLjktNzQuNi0xNjYuNS0xNjYuNi0xNjYuNXoiXQogICAgfTsKICAgIGZhRnJlZUNvZGVDYW1wID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZyZWUtY29kZS1jYW1wIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyYzUiLCAiTTk3LjQgOTYuMmMxMC40LTEwLjYgMTYtMTcuMSAxNi0yMS45IDAtMi44LTEuOS01LjUtMy44LTcuNC0yLjQtMS44LTUuNC0yLjgtOC40LTIuOC04LjUgMC0yMC45IDguOC0zNS44IDI1LjctNDEuNSA0Ny4zLTYyLjcgOTMuMS02MS44IDE2MC42UzIxIDM2Ny4zIDU3LjYgNDEyLjJjMTguOCAyMy42IDMzLjIgMzUuOCA0My41IDM1LjggMy4yLS4zIDYuMS0xLjYgOC40LTMuOCAxLjktMi44IDMuOC01LjYgMy44LTguNCAwLTUuNi0zLjktMTIuMi0xMy4yLTIwLjYtNDQuNS00Mi4zLTY3LjMtOTctNjcuNS0xNjUtLjItNjEuNCAyMS42LTExMi40IDY0LjgtMTU0ek0yMzkuNiA0MjAuMWMuNiAuNCAuOSAuNiAuOSAuNmwtLjktLjZ6bTkzLjggLjZsLjItLjFjLS4yIC4xLS4zIC4yLS4yIC4xem0zLjEtMTU4LjJjLTE2LjItNC4yIDUwLjQtODIuOS02OC4xLTE3Ny4yIDAgMCAxNS41IDQ5LjQtNjIuOCAxNTkuNi03NC4zIDEwNC40IDIzLjUgMTY4LjcgMzQgMTc1LjItNi43LTQuMy00Ny40LTM1LjcgOS42LTEyOC42IDExLTE4LjMgMjUuNS0zNC45IDQzLjUtNzIuMiAwIDAgMTUuOSAyMi40IDcuNiA3MS4xLTEyLjUgNzMuNiA1My44IDUyLjUgNTQuOCA1My41IDIyLjggMjYuOC0xNy43IDczLjUtMjEuNiA3Ni42IDUuNS0zLjcgMTE3LjctNzggMzMtMTg4LjEtNiA2LTEzLjggMzQuMi0zMCAzMC4xek01MTEgODkuN2MtMTQuOS0xNi45LTI3LjQtMjUuNy0zNS45LTI1LjctMyAuMS01LjkgMS4xLTguNCAyLjgtMS45IDEuOS0zLjggNC43LTMuOCA3LjQgMCA0LjggNS42IDExLjMgMTYgMjEuOSA0My4yIDQxLjYgNjUgOTIuNiA2NC44IDE1NC4xLS4yIDY4LTIzIDEyMi42LTY3LjUgMTY1LTkuMyA4LjQtMTMuMiAxNC45LTEzLjIgMjAuNiAwIDIuNyAxLjkgNS42IDMuOCA4LjQgMi4zIDIuMiA1LjIgMy42IDguNCAzLjggMTAuMyAwIDI0LjctMTIuMSA0My41LTM1LjggMzYuNi00NC45IDUzLjEtOTQuNCA1NC4xLTE2MS45UzU1Mi41IDEzNyA1MTEgODkuN3oiXQogICAgfTsKICAgIGZhWFR3aXR0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAieC10d2l0dGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2MWIiLCAiTTM1Ny4yIDQ4TDQyNy44IDQ4IDI3My42IDIyNC4yIDQ1NSA0NjQgMzEzIDQ2NCAyMDEuNyAzMTguNiA3NC41IDQ2NCAzLjggNDY0IDE2OC43IDI3NS41LTUuMiA0OCAxNDAuNCA0OCAyNDAuOSAxODAuOSAzNTcuMiA0OHpNMzMyLjQgNDIxLjhsMzkuMSAwLTI1Mi40LTMzMy44LTQyIDAgMjU1LjMgMzMzLjh6Il0KICAgIH07CiAgICBmYVN0aWNrZXJNdWxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0aWNrZXItbXVsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmM2Y3IiwgIk01NjEuNyAxOTkuNmwwIDB6bS02LjItNzcuNGMtNy43LTIyLjMtNS4xLTcuMi0xMy40LTM2LjktMS42LTYuNS0zLjYtMTQuNS02LjItMjAtNC40LTguNy00LjYtNy41LTQuNi05LjUgMC01LjMgMzAuNy00NS4zIDE5LTQ2LjktNS43LS42LTEyLjIgMTEuNi0yMC42IDE3LTguNiA0LjItOCA1LTEwLjMgNS0yLjYgMC01LjctMy02LjItNS0yLTUuNyAxLjktMjUuOS0zLjYtMjUuOS0zLjYgMC0xMi4zIDI0LjgtMTcgMjUuOC01LjIgMS4zLTI3LjktMTEuNC03NS4xIDE4LTI1LjMgMTMuMi04Ni45IDY1LjItODcgNjUuMy02LjcgNC43LTIwIDQuNy0zNS41IDE2LTQ0LjQgMzAuMS0xMDkuNiA5LjQtMTEwLjcgOS0xMTAuNi0yNi44LTEyOC0xNS4yLTE1OSAxMS41LTIwLjggMTcuOS0yMy43IDM2LjUtMjQuMiAzOC45LTQuMiAyMC40IDUuMiA0OC4zIDYuNyA2NC4zIDEuOCAxOS4zLTIuNyAxNy43IDcuNyA5OC4zIC41IDEgNC4xIDAgNS4xIDEuNSAwIDguNC0zLjggMTIuMS00LjEgMTMtMS41IDQuNS0xLjUgMTAuNSAwIDE2IDIuMyA4LjIgOC4yIDM3LjIgOC4yIDQ2LjkgMCA0MS44IC40IDQ0IDIuNiA0OS40IDMuOSAxMCAxMi41IDkuMSAxNyAxMiAzLjEgMy41LS41IDguNSAxIDEyLjUgLjUgMiAzLjYgNCA2LjIgNSA5LjIgMy42IDI3IC4zIDI5LjktMi41IDEuNi0xLjUgLjUtNC41IDMuMS01IDUuMSAwIDEwLjgtLjUgMTQuNC0yLjUgNS4xLTIuNSA0LjEtNiAxLjUtMTAuNS0uNC0uOC03LTEzLjMtOS44LTE2LTIuMS0yLTUuMS0zLTcuMi00LjUtNS44LTQuOS0xMC4zLTE5LjQtMTAuMy0xOS41LTQuNi0xOS40LTEwLjMtNDYuMy00LjEtNjYuOCA0LjYtMTcuMiAzOS41LTg3LjcgMzkuNi04Ny44IDQuMS02LjUgMTctMTEuNSAyNy4zLTcgNiAxLjkgMTkuMyAyMiA2NS40IDMwLjkgNDcuOSA4LjcgOTcuNC0yIDExMi4yLTIgMi44IDItMS45IDEzLS41IDM4LjkgMCAyNi40LS40IDEzLjctNC4xIDI5LjktMi4yIDkuNyAzLjQgMjMuMi0xLjUgNDYuOS0xLjQgOS44LTkuOSAzMi43LTguMiA0My40IC41IDEgMSAyIDEuNSAzLjUgLjUgNC41IDEuNSA4LjUgNC42IDEwIDcuMyAzLjYgMTItMy41IDkuOCAxMS41LS43IDMuMS0yLjYgMTIgMS41IDE1IDQuNCAzLjcgMzAuNiAzLjQgMzYuNSAuNSAyLjYtMS41IDEuNi00LjUgNi40LTcuNCAxLjktLjkgMTEuMy0uNCAxMS4zLTYuNSAuMy0xLjgtOS4yLTE5LjktOS4zLTIwLTIuNi0zLjUtOS4yLTQuNS0xMS4zLTgtNi45LTEwLjEtMS43LTUyLjYgLjUtNTkuNCAzLTExIDUuNi0yMi40IDguNy0zMi40IDExLTQyLjUgMTAuMy01MC42IDE2LjUtNjguMyAuOC0xLjggNi40LTIzLjEgMTAuMy0yOS45IDkuMy0xNyAyMS43LTMyLjQgMzMuNS00Ny40IDE4LTIyLjkgMzQtNDYuOSA1Mi02OS44IDYuMS03IDguMi0xMy43IDE4LTggMTAuOCA1LjcgMjEuNiA3IDMxLjkgMTcgMTQuNiAxMi44IDEwLjIgMTguMiAxMS44IDIyLjkgMS41IDUgNy43IDEwLjUgMTQuOSA5LjUgMTAuNC0yIDEzLTIuNSAxMy40LTIuNSAyLjYtLjUgNS43LTUgNy4yLTggMy4xLTUuNSA3LjItOSA3LjItMTYuNSAwLTcuNy0uNC0yLjgtMjAuNi01Mi45eiJdCiAgICB9OwogICAgZmFUd2l0Y2ggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidHdpdGNoIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxZTgiLCAiTTM1OS40IDEwMy41bC0zOC42IDAgMCAxMDkuNyAzOC42IDAgMC0xMDkuN3pNMjUzLjIgMTAzbC0zOC42IDAgMCAxMDkuOCAzOC42IDAgMC0xMDkuOHpNODkgMGwtOTYuNSA5MS40IDAgMzI5LjIgMTE1LjggMCAwIDkxLjQgOTYuNS05MS40IDc3LjMgMCAxNzMuOC0xNjQuNiAwLTI1Ni0zNjYuOSAwek00MTcuMyAyMzcuOGwtNzcuMiA3My4xLTc3LjIgMC02Ny42IDY0IDAtNjQtODYuOSAwIDAtMjc0LjMgMzA4LjkgMCAwIDIwMS4yeiJdCiAgICB9OwogICAgZmFLaWNrc3RhcnRlcksgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAia2lja3N0YXJ0ZXItayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2JjIiwgIk0zNTYuNyAyNTYuMmw0MC44LTQwLjVjNDIuMi00MS45IDQyLjItMTEwLjMgMC0xNTIuMXMtMTExLTQxLjktMTUzLjIgMEwyMjkuMyA3OC40QzIwOS42IDUwLjMgMTc3LjEgMzIgMTQwLjIgMzIgODAuNSAzMiAzMiA4MC4yIDMyIDEzOS41bDAgMjMzYzAgNTkuNCA0OC41IDEwNy41IDEwOC4yIDEwNy41IDM3LjEgMCA2OS4zLTE4LjMgODktNDYuNGwxNC45IDE0LjdjNDIuMiA0MS45IDExMSA0MS45IDE1My4yIDBzNDIuMi0xMTAuMyAwLTE1Mi4xbC00MC44LTQwIC4xIDB6Il0KICAgIH07CiAgICBmYUNyaXRpY2FsUm9sZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcml0aWNhbC1yb2xlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY2YzkiLCAiTTIyNS44IDBjLjMgLjIgMjE2LjYgMTI0LjUgMjE3LjEgMTI0LjcgMyAxLjIgMy43IDMuNSAzLjcgNi42LS4xIDgzLjQtLjEgMTY2LjkgMCAyNTAuNCAuMSAxLjItLjIgMi40LS44IDMuNHMtMS41IDEuOS0yLjYgMi40Yy0yMS40IDEyLTIwNy45IDExOC4zLTIxOC45IDEyNC42bC0zIDBjLTc5LjMtNDUuNy0yMTguMy0xMjUuNC0yMTguNC0xMjUuNS0uNi0uMy0xLjEtLjctMS40LTEuM3MtLjUtMS4yLS40LTEuOWMwLS45IDAtMjI1LjktLjEtMjUzLjEtLjEtMSAuMi0yIC43LTIuOXMxLjMtMS42IDIuMi0yQzI3LjIgMTEyLjEgMjEzLjIgNiAyMjQuMSAwbDEuOCAwek0yMTUuNCAyMC40bC0uMi0uMmMtNjQuNyAzNi45LTEyOS41IDczLjctMTk0LjIgMTEwLjYgMCAuMSAuMSAuMiAuMSAuNEw1MiAxNDIuOWMtNy43IDYtOC4zIDYtMTAuNiA1LjEtLjEgMC0yNC4yLTkuMy0yNi44LTEwbDAgMjMwLjRjLjktMS40IDY0LjEtMTEwLjkgNjQuMS0xMTEgMS42LTIuOCAzLTEuOSA5LjEtMS41IDEuNCAuMSAxLjUgLjIgLjggMS40LTQxLjIgNzEuMy0zNi40IDYzLTY3LjUgMTE2LjktLjggMS40LS42IDEuMSAxLjIgMS4xbDE4Ni41IDBjMS40IDAgMS43LS4yIDEuNy0xLjZsMC04LjljMC0xLjMgMi40LS44LTE4LjQtMS03LjUtLjEtMTQuMS0zLjItMjEuNC0xMi43LTcuNC05LjctMTQuNi0xOS40LTIxLjgtMjkuMi0yLjMtMy4xLTMuNC0yLjQtMTYuOC0yLjQtMS44IDAtMS44IDAtMS44IDEuOCAuMyAyNi4yIC4yIDI1LjMgMSAzMi43IC41IDQuNCAyLjIgNC4yIDkuNyA0LjggMy4xIC4zIDMuOSA0LjEgLjUgNC45LTEuNiAuNC0zMS42IC41LTMzLjctLjEtLjUtLjEtMS0uNS0xLjMtLjlzLS41LTEtLjQtMS42IC4zLTEuMSAuNi0xLjUgLjktLjcgMS40LS44YzMuMy0uOCA2LjIgLjggNi43LTQuNCAxLjMtMTMuNyAxLjItOSAxLjEtNzkuNCAwLTEwLjgtLjQtMTIuNi01LjQtMTMuNi0xLjItLjItMy41LS4yLTQuNy0uNi0yLjktMS0yLTQuOCAxLjgtNC44IDMzLjcgMCA0Ni4xLTEuMSA1Ni4xIDQuOSA3LjcgNC42IDEyIDExLjUgMTIuNSAyMC40IC45IDE0LjYtNi41IDIyLjMtMTUgMzIuNi0uMiAuMS0uMyAuMy0uNCAuNXMtLjEgLjQtLjEgLjYgMCAuNCAuMSAuNiAuMiAuNCAuNCAuNWMyLjYgMy4yIDUgNi42IDcuNyA5LjggMjcuNiAzMy4yIDI0LjEgMzAuNSA0MS4zIDMzLjEgLjkgLjEgMS0uNCAxLTEuMmwwLTExYzAtMSAuMy0xLjQgMS40LTEuMyA3LjggMS4yIDE1LjggMS4xIDIzLjYtLjMgMS4xLS4xIDEuNSAuMiAxLjUgMS4zIDAgLjEgLjkgMjYuNyAuOSAyNi44IDAgMS41IC43IDEuNiAxLjkgMS42bDE4Ni43IDBjLTI3LjItNDctNTQuMi05NC04MS4yLTE0MC44IDIuMy0uNy0uNCAwIDYuNy0xLjQgMi0uNCAyLjEtLjQgMy4xIDEuNCA3LjMgMTIuNiA3Ny4zIDEzNCA3Ny40IDEzNC4xbDAtMjMwLjRjLTEuNyAuNS0xMDMuMyAzOC43LTEwNS44IDM5LjctMS4xIC40LTEuNSAuMi0xLjktLjktLjYtMS45LTEuMy0zLjgtMi4xLTUuNi0uMy0uOC0uMS0xLjEgLjYtMS40IC4xIDAgOTUuNS0zNS44IDEwMy0zOC44LTY1LjQtMzcuNi0xMzAuNi03NS0xOTYtMTEyLjZsODYuOCAxNTAuNC0uMyAuM2MtOS42LS45LTEwLjUtMS42LTExLjgtMy45LTEtMS43LTczLjUtMTI3LjctODItMTQyLjItOS4xIDE0LjctODMuNiAxNDYuMi04NS40IDE0Ni4zLTIuOSAuMi01LjkgLjEtOS4yIC4xIDI4LjgtNDkuOCA1Ny42LTk5LjUgODYuMi0xNDlsMCAwem01MS45IDEyOS45YzEuOS0uMSAzLjctLjQgNS41LS44IDEuNy0uMyAyLjUgLjIgMi42IDEuOSAwIC4xIC4xIDE5LjEtLjkgMjAuNXMtMS45IDEuMi0yLjYtLjJjLTUtOS43IDYuMi05LjctMzkuMS0xMi0uNyAwLTEgLjItMSAuOSAwIC4xIDMuNyAxMjIgMy43IDEyMi4xIDAgLjkgLjUgMS4yIDEuMiAxLjUgMyAxLjIgNS45IDIuNSA4LjcgNCA3LjMgNC4zIDExLjQgMTAuOCAxMi40IDE5LjMgMS40IDExLjgtMi44IDM1LjgtMzIuMiAzNy4xLTIuOCAuMS0yOC4zIDEuMS0zNC4xLTIzLjMtNC43LTE5LjMgOC4zLTMyLjcgMTkuOS0zNi40IC42LS4xIDEuMi0uNCAxLjUtLjlzLjUtMS4xIC41LTEuN2MuMS01LjYgMy0xMDcuMSAzLjctMTIxLjMgMC0xLjEtLjYtMS4yLTEuNC0xLjEtMzIuMyAuNS0zNi43LS4zLTQwLjIgOC41LTIuNCA2LjItNC4xIDEuMy00IC4yIDEuMS02IDIuMi0xMiAzLjMtMTggLjQtMi4xIDEuNC0yLjYgMy40LTEuOSA1LjYgMi4xIDYuNyAxLjcgMzcuMiAxLjkgMS43IDAgMS44LS4xIDEuOC0xLjggLjctMjcuNSAuNi0yMi42IDEtMjkuNiAuMS0uNi0uMS0xLjItLjMtMS43cy0uNy0uOS0xLjMtMS4xYy01LjYtMi45LTguOC03LjYtOC45LTEzLjktLjQtMTQuOCAxNy43LTIxLjcgMjcuNC0xMS41IDYuOCA3LjIgNS44IDE4LjktMi41IDI0LjItLjggLjQtMS40IDEuMS0xLjggMS44cy0uNiAxLjYtLjQgMi41YzAgLjYtLjEtNC4zIDEgMzAgMCAuOSAuNCAxLjEgMS4yIDEuMSAuMSAwIDIzLS4xIDM0LjUtLjRsMC0uMXpNNjguMyAxNDEuN2MxOS44LTQuNSAzMi43LS42IDUyLjUgMS43IDIuOCAuMyAzLjcgMS4yIDMuNiA0LS4yIDUtMS4yIDIyLjMtMS4yIDIzLjEgMCAuNS0uMiAxLS41IDEuNHMtLjcgLjctMS4yIC45Yy00LjEgMS43LTMuNi00LjQtNC03LjMtMy4xLTIyLjQtNzMuOS0zMi43LTc0LjYgMjUuNC0uMyAyMy45IDE3IDUzLjYgNTQuMSA1MC45IDI3LjItMiAxOS0yMC4yIDI0LjgtMjAuNSAuNC0uMSAuOSAwIDEuMyAuMXMuOCAuNCAxLjEgLjcgLjUgLjcgLjYgMS4yIC4xIC45IDAgMS4zYy0xLjggMTAuOC0zLjQgMTktMy40IDE5LjItMS41IDkuMi04Ni43IDIyLjEtOTMuNC00Mi4xLTIuNy0yNS44IDEwLjQtNTMuNCA0MC4zLTYwLjJ6bTgwIDg3LjdsLTE5LjUgMGMtLjYgMC0xLjItLjEtMS42LS40cy0uOC0uOC0xLTEuNGMyLjQtMy44IDUuOSAuOSA1LjktNi4xLS4xLTI1LjggLjItMzggLjItNDAuMSAwLTMuNC0uNS00LjYtMy4zLTQuOS03LS43LTMuMS0zLjQtMS4xLTMuNCAxMS44LS4xIDIyLjYtLjIgMzAgLjcgOC44IDEuMSAxNi43IDEyLjYgNy45IDIyLjYtMiAyLjItNCA0LjQtNi4xIDYuNyAxIDEuMiA2LjkgOC44IDE3LjMgMTkuNyAyLjcgMi44IDYuMiAzLjUgOS45IDMuMSAuNiAwIDEuMS0uMiAxLjUtLjZzLjctLjkgLjctMS41Yy4zLTMuNCAuMyA0LjcgLjQtNDAuNiAwLTUuNi0uMy02LjYtMy4yLTYuOC00LS40LTQtMi4zLS43LTMuNGwxOS4xLS4xYy4zIDAgNC41IC41IDEgMy40IDAgMC0uMiAwLS4yIDAtMy42IC4zLTMuOSAxLTQgNC42LS4zIDQzLjkgLjEgNDAuMiAuNCA0Mi44IC4xIC44IC4zIDIuMiA1LjEgMi4xIDIuNSAwIDMuOSAzLjQgMCAzLjQtMTAuNCAuMS0yMC43IDAtMzEuMSAuMS0xMC43IDAtMTMuNS02LjItMjQuMi0yMC44LTEuNi0yLjItOC4zLTIuNC04LjItLjQgLjkgMTYuNSAwIDE3LjggNCAxNy43IDQuOC0uMSA0LjcgMy42IC44IDMuNWwuMSAwem0yNzUtMTAuMWMtMS4yIDcuMSAuMiAxMC40LTUuMyAxMC4zLTYxLjUtLjQtNDcuOC0uMi01MC43LS4zLTEuMi0uMS0yLjQtLjQtMy42LS43LTIuNS0uNiAxLjUtMS4yLS40LTUuNi0xLjQtMy40LTIuOC02LjgtNC4xLTEwLjItLjEtLjQtLjQtLjgtLjctMS4xcy0uOC0uNC0xLjMtLjRjLTQuOS0uMi05LjctLjItMTQuNiAuMS0uMyAwLS42IC4yLS45IC4zcy0uNSAuNC0uNyAuN2MtMS42IDMuNi0zLjEgNy4zLTQuNSAxMS0xLjMgMy4yIDcuOSAxLjMgMTIuMiAyLjIgMyAuNiA0LjUgMy43IC43IDMuN2wtMjYuNCAwYy0yLjkgMC0zLjEtMy4yLS43LTMuMiAxLjIgLjEgMi40LS4yIDMuNS0uOXMxLjktMS41IDIuNC0yLjZjMS41LTMgMi44LTYgNC4xLTkuMSAxOC4yLTQyLjEgMTcuMS00MC4yIDE4LjQtNDEuNiAuMi0uMiAuNC0uNCAuNy0uNnMuNi0uMiAuOC0uMiAuNiAuMSAuOCAuMiAuNSAuMyAuNyAuNmMyLjkgMy4zIDE4LjQgNDQuNyAyMy42IDUxLjkgMiAyLjcgNS43IDIgNi40IDIgMy42IC4xIDQtMS4xIDQuMS00LjMgLjEtMS45IC4xIDEuMiAuMS00MS4yIDAtNC41LTIuNC0zLjctNS42LTQuMy0uMyAwLTIuNi0uNi0uMS0zLjEgLjItLjItLjktLjIgMjEuNy0uMiAyLjMgMCA1LjMgMi44LTEuMiAzLjQtLjQgMC0uNyAwLTEuMSAuMnMtLjYgLjMtLjkgLjYtLjQgLjYtLjYgLjktLjIgLjctLjEgMS4xYy0uMSAxLjYtLjIgMzguOSAuMyA0MS4yIC4yIC43IC42IDEuNCAxLjIgMS44czEuMyAuNyAyLjEgLjZjMTMuMyAuNCAxNC45IC40IDE2LTMuNCAxLjctNS44IDQuMS0yLjUgMy43LS4ybDAgLjF6TTMxOC42IDI4My42Yy00LjIgMC00LjQtMy40LS42LTMuNCAzNS45LS4yIDI4LjEgLjQgMzcuMi0uNiAxLjctLjIgMi40IC4yIDIuMyAxLjktLjMgMy40LS42IDYuOC0xIDEwLjItLjIgMi4yLTMuMiAyLjYtMy40LS4yLS40LTUuMy0yLjItNC41LTE1LjYtNS4xLTEuNi0uMS0xLjYgMC0xLjYgMS41bDAgMTYuMWMwIDEuNyAwIDEuNiAxLjYgMS41IDMuMS0uMiAxMC4zIC4zIDE1LjctMS41IC41LS4yIDMuMy0xLjggMy4xIDEuOCAwIC4yLS44IDEwLjQtMS4yIDExLjQtLjUgMS4zLTEuOSAxLjUtMi42IC4zLTEuMi0yIDAtNS4xLTMuNy01LjMtMTUuNC0uOS0xMi45LTIuNS0xMi45IDYgMCAxMi4zLS44IDE2LjEgMy45IDE2LjIgMTYuNiAuNSAxNC40IDAgMTYuNC01LjcgLjgtMi40IDMuNS0xLjggMy4yIC42LS40IDMuMi0uOCA2LjQtMS4yIDkuNiAwIC40LS4yIDIuNC00LjcgMi40LTM3LjItLjEtMzQuNS0uMi0zNS4yLS4zLTIuNy0uNS0yLjItMyAuMi0zLjQgMS4xLS4yIDQgLjUgNC4yLTIuNiAyLjQtNTYuMi0uMS01MS4zLTMuOS01MS4zbDAgMHptLS40LTEwOS41YzIuNSAuNiAzLjEgMS44IDMgNC42LS4zIDUuMy0uMyA5LS42IDkuNy0uNyAyLjItMy4xIDIuMS0zLjMtLjMtLjQtNC44LTMtNy44LTcuNi05LjEtMjYuMy03LjctMzIuOCAxNS41LTI3LjIgMzAuMiA1LjkgMTUuNCAyMiAxNS45IDI4LjkgMTMuOCA1LjktMS45IDUuOS02LjUgNi45LTcuNiAxLjItMS4zIDIuMi0xLjggMy4xIDEuMSAwIC4xIC42IDExLjktNiAxMi43LTEuNiAuMi0xOS40IDMuNy0zMi43LTMuNC0yMS0xMS4yLTE2LjctMzUuNS02LjktNDUuMyAxNC0xNC4xIDM5LjktNy4xIDQyLjMtNi41bDAgMHpNMjg5LjggMjgwLjFjMy4zIDAgMy43IDMgLjIgMy40LTIuNiAuMy01LS40LTUgNS41IDAgMi0uMiAyOSAuNCA0MS40IC4xIDIuMyAxLjIgMy41IDMuNCAzLjcgMjIgMS4yIDE1LTEuNyAxOC44LTYuMyAxLjgtMi4yIDIuOCAuOCAyLjggMS4xIC4zIDEzLjYtNCAxMi40LTUuMiAxMi40bC0zOC4yLS4yYy0xLjktLjItMi4xLTMtLjQtMy40IDItLjUgNC45IC40IDUuMS0yLjggMS0xNS45IC42LTQ0LjYgLjMtNDcuOC0uMy0zLjgtMi44LTMuMy01LjctMy43LTIuNS0uNC0yLTMuMiAuMy0zLjIgMS40IDAgMTggMCAyMy4xIDB6bS0zMS42LTU3LjhjLjEgNC4xIDIuOSAzLjUgNiAzLjYgMi42IC4xIDIuNSAzLjQtLjEgMy40LTYuNSAwLTEzLjcgMC0yMS42LS4xLTMuOCAwLTMuNC0zLjQgMC0zLjQgNC41IDAgMy4yIDEuNiAzLjQtNDUuNSAwLTUuMS0zLjMtMy41LTQuNy00LjItMi42LTEuMi0xLjQtMy4xIC40LTMuMiAxLjMgMCAyMC4yLS40IDIxLjIgLjJzMS45IDEuNi0uNCAyLjljLTEgLjUtMy45LS4zLTQuMiAyLjUgMCAuMi0uOCAxLjYtLjEgNDMuOGwwIDB6TTIyMS4zIDQ5Ni42Yy41IC4zIDEgLjUgMS42IC41czEuMS0uMiAxLjYtLjVjMTctOS44IDE4Mi0xMDMuNiAxOTcuNC0xMTIuNS0uMS0uNCAxMS4zLS4yLTE4MS41LS4zLTEuMiAwLTEuNiAuNC0xLjUgMS42IDAgLjEgMS4zIDQ0LjUgMS4yIDUwLjQtLjEgMi42LS42IDUuMi0xLjQgNy43LS42IDEuOCAuNC0uNS0xMy41IDMyLjItLjcgMS43LTEgMi4yLTItLjEtNC4yLTEwLjMtOC4zLTIwLjctMTIuNi0zMS0xLjUtMy40LTIuMi03LjEtMi0xMC44IC4yLTIuNSAuOC0xNi4xIDEuNS00OCAwLTEuOSAwLTItMi0ybC0xODMgMGMyLjYgMS42IDE3OC4zIDEwMi42IDE5NiAxMTIuOGwuMSAwek0xMzAuNCAzMDcuOWMwIDIuNCAuNCAyLjggMi44IDMgMTEuNSAxLjIgMjEgMy43IDI1LjYtNy4zIDYtMTQuNSAyLjctMzQuNC0xMi41LTM4LjgtMi0uNi0xNi0yLjgtMTUuOSAxLjUgMCA4IDAgMTEuNiAwIDQxLjZ6bTEwNS44LTE1YzAgMi4xIDEuMSAzOC43IDEuMSAzOS4xIC4zIDkuOS0yNS42IDUuOC0yNS4yLTIuNiAuMS0yIDEuNC0zNy40IDEuMS0zOS40LTE0LjEgNy40LTE0LjQgNDAuMiA2LjQgNDguOCA0IDEuNyA4LjQgMS45IDEyLjUgLjZzNy42LTQgOS45LTcuN2M0LjktNy44IDYuOC0yOS41LTUuNC0zOS0uMSAuMS0uMiAuMS0uNCAuMWwwIDB6bS0xMi4zLTE5OGMtOS44IDAtOS43IDE0LjgtLjEgMTQuOXMxMC4xLTE0LjkgLjEtMTQuOWwwIDB6TTE0My43IDE5OC42YzAgMS44IC40IDIuNCAyLjIgMi42IDEzLjYgMS40IDEyLjUtMTEgMTIuMi0xMy40LTEuNy0xMS4yLTE0LjQtMTAuMi0xNC40LTcuOCAwIDQuNSAwIDEzLjcgMCAxOC42ek0zNTYgMjA1bC02LjEtMTUuOGMtMi4yIDUuNS00LjIgMTAuNi02LjIgMTUuOGwxMi4zIDB6Il0KICAgIH07CiAgICBmYVN0ZWFtU3ltYm9sID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0ZWFtLXN5bWJvbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2Y2IiwgIk0yNzMuNSAxNzcuNWE2MSA2MSAwIDEgMSAxMjIgMCA2MSA2MSAwIDEgMSAtMTIyIDB6bTE3NC41IC4yYzAgNjMtNTEgMTEzLjgtMTEzLjcgMTEzLjhMMjI1IDM3MS4zYy00IDQzLTQwLjUgNzYuOC04NC41IDc2LjgtNDAuNSAwLTc0LjctMjguOC04My02N0wwIDM1OCAwIDI1MC43IDk3LjIgMjkwYzE1LjEtOS4yIDMyLjItMTMuMyA1Mi0xMS41bDcxLTEwMS43QzIyMC43IDExNC41IDI3MS43IDY0IDMzNC4yIDY0IDM5NyA2NCA0NDggMTE1IDQ0OCAxNzcuN3pNMjAzIDM2M2MwLTM0LjctMjcuOC02Mi41LTYyLjUtNjIuNS00LjUgMC05IC41LTEzLjUgMS41bDI2IDEwLjVjMjUuNSAxMC4yIDM4IDM5IDI3LjcgNjQuNS0xMC4yIDI1LjUtMzkuMiAzOC02NC43IDI3LjUtMTAuMi00LTIwLjUtOC4zLTMwLjctMTIuMiAxMC41IDE5LjcgMzEuMiAzMy4yIDU1LjIgMzMuMiAzNC43IDAgNjIuNS0yNy44IDYyLjUtNjIuNXpNNDEwLjUgMTc3LjdhNzYuNCA3Ni40IDAgMSAwIC0xNTIuOCAwIDc2LjQgNzYuNCAwIDEgMCAxNTIuOCAweiJdCiAgICB9OwogICAgZmFNYWlsY2hpbXAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWFpbGNoaW1wIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1OWUiLCAiTTMzMSAyNDMuNWMzLjEtLjQgNi4yLS40IDkuMyAwIDEuNy0zLjggMi0xMC40IC41LTE3LjYtMi4yLTEwLjctNS4zLTE3LjEtMTEuNS0xNi4xcy02LjUgOC43LTQuMiAxOS40YzEuMyA2IDMuNSAxMS4xIDYgMTQuM2wwIDB6TTI3Ny40IDI1MmM0LjUgMiA3LjIgMy4zIDguMyAyLjEgMS45LTEuOS0zLjUtOS40LTEyLjEtMTMuMS01LTIuMS0xMC40LTIuOC0xNS44LTIuMnMtMTAuNSAyLjctMTQuOCA1LjhjLTMgMi4yLTUuOCA1LjItNS40IDcuMSAuOSAzLjcgMTAtMi43IDIyLjYtMy41IDctLjQgMTIuOCAxLjggMTcuMyAzLjdsMCAwem0tOSA1LjFjLTkuMSAxLjQtMTUgNi41LTEzLjUgMTAuMSAuOSAuMyAxLjIgLjggNS4yLS44IDYtMi4zIDEyLjQtMi45IDE4LjctMS45IDIuOSAuMyA0LjMgLjUgNC45LS41IDEuNS0yLjItNS43LTgtMTUuNC02LjlsMCAwem01NC4yIDE3LjFjMy40LTYuOS0xMC45LTEzLjktMTQuMy03czEwLjkgMTMuOSAxNC4zIDdsMCAwem0xNS43LTIwLjVjLTcuNy0uMS04IDE1LjgtLjMgMTUuOXM4LTE1LjggLjMtMTZsMCAwek0xMTkuNSAzMzIuN2MtMS4zIC4zLTYgMS41LTguNS0yLjMtNS4yLTggMTEuMS0yMC40IDMtMzUuOC05LjEtMTcuNS0yNy44LTEzLjUtMzUtNS41LTguNyA5LjYtOC43IDIzLjUtNSAyNC4xIDQuMyAuNiA0LjEtNi41IDcuNC0xMS42IC45LTEuNCAyLjEtMi42IDMuNS0zLjZzMy0xLjYgNC42LTIgMy40LS40IDUgMCAzLjMgMSA0LjcgMS45YzExLjYgNy42IDEuNCAxNy44IDIuMyAyOC42IDEuNCAxNi43IDE4LjQgMTYuNCAyMS42IDkgLjItLjQgLjMtLjggLjMtMS4ycy0uMi0uOC0uNS0xLjFjMCAuOSAuNy0xLjMtMy40LS40bDAgMHptMjk5LjctMTcuMWMtMy4zLTExLjctMi42LTkuMi02LjgtMjAuNSAyLjQtMy43IDE1LjMtMjQtMy4xLTQzLjMtMTAuNC0xMC45LTMzLjktMTYuNS00MS4xLTE4LjUtMS41LTExLjQgNC42LTU4LjctMjEuNS04MyAyMC44LTIxLjYgMzMuOC00NS4zIDMzLjctNjUuNy0uMS0zOS4yLTQ4LjItNTEtMTA3LjQtMjYuNWwtMTIuNSA1LjNjLS4xIDAtMjIuNy0yMi4zLTIzLjEtMjIuNi02Ny41LTU4LjktMjc4LjggMTc1LjktMjExLjMgMjMyLjlsMTQuOCAxMi41Yy00IDEwLjctNS40IDIyLjItNC4xIDMzLjUgMy40IDMzLjQgMzYgNjAuNCA2Ny41IDYwLjQgNTcuNyAxMzMuMSAyNjcuOSAxMzMuMyAzMjIuMyAzIDEuNy00LjUgOS4xLTI0LjYgOS4xLTQyLjRzLTEwLjEtMjUuMy0xNi41LTI1LjNsMCAwem0tMzE2IDQ4LjJjLTIyLjgtLjYtNDcuNS0yMS4xLTQ5LjktNDUuNS02LjItNjEuMyA3NC4zLTc1LjMgODQtMTIuMyA0LjUgMjkuNi00LjcgNTguNS0zNC4xIDU3LjhsMCAwek04NC43IDI0OS42Yy0xNS4yIDMtMjguNSAxMS41LTM2LjcgMjMuNS00LjktNC4xLTE0LTEyLTE1LjYtMTUtMTMtMjQuOCAxNC4yLTczIDMzLjMtMTAwLjIgNDcuMS02Ny4yIDEyMC45LTExOC4xIDE1NS0xMDguOSA1LjUgMS42IDIzLjkgMjIuOSAyMy45IDIyLjlzLTM0LjEgMTguOS02NS44IDQ1LjNDMTM2LjIgMTUwIDEwNCAxOTcuNyA4NC43IDI0OS42ek0zMjMuNiAzNTAuN3MtMzUuNyA1LjMtNjkuNS03LjFjNi4yLTIwLjIgMjcgNi4xIDk2LjQtMTMuOCAxNS4zLTQuNCAzNS40LTEzIDUxLTI1LjQgMy40IDcuOCA1LjggMTUuOSA3LjEgMjQuMyAzLjctLjcgMTQuMi0uNSAxMS40IDE4LjEtMy4zIDE5LjktMTEuNyAzNi0yNS45IDUwLjgtOC45IDkuNi0xOS40IDE3LjUtMzEuMiAyMy4zLTYuNSAzLjQtMTMuMyA2LjMtMjAuMyA4LjYtNTMuNSAxNy41LTEwOC4zLTEuNy0xMjYtNDMtMS40LTMuMS0yLjYtNi40LTMuNi05LjctNy41LTI3LjItMS4xLTU5LjggMTguOC04MC40IDEuMi0xLjMgMi41LTIuOSAyLjUtNC44LS4yLTEuNy0uOC0zLjMtMS45LTQuNS03LTEwLjEtMzEuMi0yNy40LTI2LjMtNjAuOCAzLjUtMjQgMjQuNS00MC45IDQ0LjEtMzkuOWw1IC4zYzguNSAuNSAxNS45IDEuNiAyMi45IDEuOSAxMS43IC41IDIyLjItMS4yIDM0LjYtMTEuNiA0LjItMy41IDcuNi02LjUgMTMuMy03LjUgMi4zLS42IDQuNy0uNyA3LS4zczQuNiAxLjIgNi42IDIuNWMxMCA2LjYgMTEuNCAyMi43IDExLjkgMzQuNSAuMyA2LjcgMS4xIDIzIDEuNCAyNy42IC42IDEwLjcgMy40IDEyLjIgOS4xIDE0IDMuMiAxIDYuMiAxLjggMTAuNSAzLjEgMTMuMiAzLjcgMjEgNy41IDI2IDEyLjMgMi41IDIuNSA0LjIgNS44IDQuNyA5LjMgMS42IDExLjQtOC44IDI1LjQtMzYuMyAzOC4yLTQ2LjcgMjEuNy05My43IDE0LjQtMTAwLjUgMTMuNy0yMC4yLTIuNy0zMS42IDIzLjMtMTkuNSA0MS4xIDIyLjYgMzMuNCAxMjIuNCAyMCAxNTEuNC0yMS40IC43LTEgLjEtMS42LS43LTEtNDEuOCAyOC42LTk3LjEgMzguMi0xMjguNSAyNi00LjgtMS44LTE0LjctNi40LTE1LjktMTYuNyA0My42IDEzLjUgNzEgLjcgNzEgLjdzMi0yLjgtLjYtMi41ek0xNzEuNyAxNTcuNWMxNi43LTE5LjQgMzcuNC0zNi4yIDU1LjgtNDUuNiAuMS0uMSAuMy0uMSAuNS0uMXMuMyAuMSAuNCAuMiAuMiAuMyAuMiAuNCAwIC4zLS4xIC41Yy0xLjUgMi43LTQuMyA4LjMtNS4yIDEyLjcgMCAuMSAwIC4zIDAgLjRzLjIgLjMgLjMgLjQgLjMgLjEgLjQgLjEgLjMgMCAuNC0uMWMxMS41LTcuOCAzMS41LTE2LjIgNDktMTcuMyAuMiAwIC4zIDAgLjUgLjFzLjIgLjIgLjMgLjQgLjEgLjMgMCAuNS0uMSAuMy0uMyAuNGMtMi45IDIuMi01LjUgNC44LTcuNyA3LjctLjEgLjEtLjEgLjItLjEgLjRzMCAuMyAuMSAuNCAuMiAuMiAuMyAuMyAuMiAuMSAuNCAuMWMxMi4zIC4xIDI5LjcgNC40IDQxIDEwLjcgLjggLjQgLjIgMS45LS42IDEuNy02OS41LTE1LjktMTIzLjEgMTguNS0xMzQuNSAyNi44LS4yIC4xLS4zIC4xLS41IC4xcy0uMy0uMS0uNS0uMi0uMi0uMy0uMi0uNSAuMS0uNCAuMi0uNWwtLjEgMHoiXQogICAgfTsKICAgIGZhTHVtb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibHVtb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTdlMiIsICJNNDUyLjUgMjIzLjVjOS44IDAgMTYuNSA2LjMgMTYuNSAxNi42bDAgMzEuOGMwIDEwLjMtNi42IDE2LjYtMTYuNiAxNi42bC01Ni4yIDBjLTkuOCAwLTE2LjUtNi4zLTE2LjUtMTYuNmwwLTMxLjhjMC0xMC4zIDYuNy0xNi42IDE2LjUtMTYuNmw1Ni4zIDB6bS0yNS43IDEzLjFjLTEuNS0yLjYtMy4yLTIuNi00LjYgMGwtMTAuNyAxNy42Yy0xLjcgMi40LTIuNiA1LjEtMi42IDguMiAwIDcuOSA2LjkgMTQuNiAxNS42IDE0LjYgOC41IDAgMTUuNi02LjcgMTUuNi0xNC42IDAtMy0xLTUuOC0yLjctOC4ybC0xMC43LTE3LjZ6TTg1LjggMjIzLjhjMSAwIDEuNSAuNiAxLjUgMS41bDAgNTAuMyA2NC42IDBjMSAwIDEuNiAuNiAxLjYgMS41bDAgOS43YzAgLjktLjYgMS41LTEuNiAxLjVsLTc4LjQgMGMtMSAwLTEuNi0uNi0xLjYtMS41bDAtNjEuNGMwLS45IC42LTEuNSAxLjYtMS41bDEyLjMgMHptODguMyAwYzEgMCAxLjUgLjYgMS41IDEuNWwwIDQ1YzAgNCAyIDUuMiA1LjcgNS4ybDQ2LjkgMGMzLjggMCA1LjctMS4zIDUuNy01LjJsMC00NWMwLS45IC41LTEuNSAxLjUtMS41bDEyLjMgMGMxIDAgMS42IC42IDEuNiAxLjVsMCA0NmMwIDEwLjUtNS4zIDE2LjgtMTcuNiAxNi44bC01NCAwYy0xMi4zIDAtMTcuNi02LjMtMTcuNi0xNi44bDAtNDZjMC0uOSAuNi0xLjUgMS42LTEuNWwxMi4zIDB6bTEwOC4yIDBjMSAwIDEuNiAuNSAyLjIgMS40bDMwLjUgNDYuNCAxLjQgMCAzMC41LTQ2LjRjLjYtLjkgMS4yLTEuNCAyLjItMS40bDE4IDBjMSAwIDEuNSAuNiAxLjUgMS41bDAgNjEuNGMwIC45LS41IDEuNS0xLjUgMS41bC0xMi4zIDBjLTEgMC0xLjYtLjYtMS42LTEuNWwwLTQzLjgtMS4xIDAtMjguNyA0My44Yy0uNiAuOS0xLjMgMS41LTIuNCAxLjVsLTEwLjcgMGMtMSAwLTEuNy0uNi0yLjMtMS41bC0yOC43LTQzLjgtMS4xIDAgMCA0My44YzAgLjktLjUgMS41LTEuNSAxLjVsLTEyLjMgMGMtMSAwLTEuNi0uNi0xLjYtMS41bDAtNjEuNGMwLS45IC42LTEuNSAxLjYtMS41bDE3LjkgMHptMjE0LjQgMGMuOSAwIDEuMyAuNCAyLjIgMS4xbDUyLjcgNDYuMyAxLjMgMCAwLTQ2YzAtLjkgLjYtMS41IDEuNi0xLjVsMTIuMyAwYzEgMCAxLjYgLjYgMS42IDEuNWwwIDYxLjRjMCAuOS0uNiAxLjUtMS42IDEuNWwtMTQuNCAwYy0xIDAtMS40LS40LTIuMy0xLjFsLTUyLjYtNDYuMy0xLjQgMCAwIDQ2YzAgLjktLjUgMS41LTEuNSAxLjVsLTEyLjMgMGMtMSAwLTEuNi0uNi0xLjYtMS41bDAtNjEuNGMwLS45IC42LTEuNSAxLjYtMS41bDE0LjQgMHpNMzIwIDExNC4xYzg3LjkgMCAxNjcuNyAxNS43IDIyNS41IDQxbDIuNyAxLjJDNTg3LjEgMTczLjggNjQwIDIwNi41IDY0MCAyNTZzLTUyLjkgODIuMi05MS44IDk5LjZsLTIuNyAxLjJjLTU3LjggMjUuNC0xMzcuNiA0MS0yMjUuNSA0MS03Ni4yIDAtMTU1LjEtMTAuNS0yMjUuNS00MS0zOS42LTE3LjQtOTQuNS01MC4zLTk0LjUtMTAwLjhzNTQuOS04My41IDk0LjUtMTAwLjhjNzAuNC0zMC41IDE0OS4zLTQxIDIyNS41LTQxem0tODguOSAyMjljMjAuMyAyOSA1Mi44IDQ5LjYgODguOSA0OS42IDM2LjIgMCA2OC43LTIwLjYgODktNDkuN2wtMTc3LjkgLjF6bS05Ni4xIDBjNDMuMyAyOS43IDk2LjcgNDMuNSAxNDguNCA0OC0yNC4yLTkuMS00NC40LTI2LjctNTguNi00OC4xbC04OS45IDB6bTI4MC4zLS4xYy0xNC4yIDIxLjQtMzQuNCAzOS4xLTU4LjYgNDguMSA1MS44LTQuNSAxMDUuMy0xOC4zIDE0OC42LTQ4LjJsLTkwIDB6bS0zMzcuNCAuMWM0NC4xIDIzLjEgOTMuNyAzNS40IDE0Mi43IDQyLjYtMzMuNC04LjYtNjYuNS0yMS45LTk0LjQtNDIuNmwtNDguMyAwem00MzYuMi0uMmMtMjcuOSAyMC44LTYxLjEgMzQuMi05NC42IDQyLjggNDcuMy02LjkgODkuNi0xOC41IDEyMy45LTMzLjZsMS43LS44YzYuMS0yLjcgMTEuOS01LjUgMTcuNC04LjRsLTQ4LjUgMHpNNTIwIDE3My42YzEwLjcgOC43IDE5LjggMTguMSAyNyAyOC4yIC40IC42IC41IDEuMyAuMSAycy0xIDEtMS43IDFsLTEuNiAwYy0uNiAwLTEuMi0uMy0xLjUtLjgtNy45LTEwLjktMTguMi0yMS4xLTMwLjYtMzAuNGwtOTMuNSAwYzUuNCA4LjggOS45IDE4LjUgMTMuNCAyOC42IC4yIC42IC4xIDEuMi0uMiAxLjdzLS45IC44LTEuNiAuOGwtMS40IDBjLS44IDAtMS41LS41LTEuOC0xLjMtMy44LTEwLjctOC43LTIwLjgtMTQuNS0yOS45bC0xODQuMyAuMWMtNS44IDkuMS0xMC43IDE5LjEtMTQuNCAyOS44LS4zIC44LTEgMS4zLTEuOCAxLjNsLTEuNCAwYy0uNiAwLTEuMi0uMy0xLjYtLjhzLS41LTEuMS0uMi0xLjdjMy41LTEwLjIgOC0xOS43IDEzLjQtMjguNmwtOTMuNiAwYy0xMi4zIDkuMy0yMi42IDE5LjQtMzAuNCAzMC4zLS40IC41LS45IC44LTEuNSAuOGwtMS42IDBjLS43IDAtMS40LS40LTEuNy0xcy0uMy0xLjQgLjEtMmM3LjYtMTAuNSAxNi43LTE5LjkgMjYuOC0yOGwtNTEgMGMtMjguOSAxNi42LTYyIDQzLjMtNjMuNSA3OS43bDQ0LjcgMGMuNSAwIDEgLjIgMS4zIC42cy42IC44IC42IDEuM2wwIDEuM2MwIDEuMS0uOSAxLjktMS45IDEuOWwtNDQuNyAwQzYuOCAyOTUgNDAgMzIxLjcgNjkgMzM4LjNsNTAuOSAwYy0xMC4zLTguNC0xOS4xLTE3LjQtMjYuMS0yN2wtLjgtMS4xYy0uNC0uNi0uNS0xLjMtLjEtMnMxLTEgMS43LTFsMS42IDAgLjIgMGMuNSAuMSAxIC4zIDEuMyAuOCA3LjkgMTAuOSAxOC4xIDIxIDMwLjUgMzAuM2w5My42IDBjLTUuMy04LjgtOS44LTE4LjQtMTMuNC0yOC41LS4yLS42LS4xLTEuMiAuMi0xLjdzLjktLjggMS42LS44bDEuNCAwIC4yIDBjLjcgLjEgMS40IC42IDEuNyAxLjMgMy44IDEwLjcgOC42IDIwLjcgMTQuNCAyOS44bDE4NC41LS4xYzUuOC05LjEgMTAuNi0xOS4xIDE0LjQtMjkuN2wuMS0uMWMuMy0uNyAxLTEuMSAxLjctMS4xbDEuNCAwYy42IDAgMS4yIC4zIDEuNiAuOHMuNSAxLjIgLjIgMS43Yy0zLjUgMTAuMS04IDE5LjctMTMuMyAyOC41bDkzLjcgMGMxMi4zLTkuMyAyMi41LTE5LjQgMzAuMy0zMC4ybC4xLS4yYy40LS40IC45LS42IDEuNC0uNmwxLjYgMGMuNyAwIDEuNCAuNCAxLjcgMXMuMyAxLjQtLjEgMmMtNy4xIDEwLTE2LjEgMTkuMy0yNi43IDI3LjlsNTEuMSAwYzI4LjgtMTYuNiA2MS44LTQzLjMgNjMuNC03OS42bC00NC43IDBjLTEgMC0xLjktLjktMS45LTEuOWwwLTEuM2MwLTEuMSAuOS0xLjkgMS45LTEuOWw0NC43IDBjLTEuNi0zNi41LTM0LjktNjMuMy02My45LTc5LjlsLTUwLjkgMHpNMjIwLjUgMTI2LjJjLTQ5LjEgNy4xLTk4LjcgMTkuNS0xNDMgNDIuN2w0OC40IDBjMjcuOS0yMC44IDYxLTM0LjEgOTQuNS00Mi43em02Mi44LTUuNGMtNTEuOCA0LjUtMTA1LjIgMTguMy0xNDguNiA0OC4xbDkwIDBjMTQuMi0yMS40IDM0LjQtMzkgNTguNi00OC4xem0zNi42LTEuNmMtMzYuMiAwLTY4LjcgMjAuNi04OSA0OS43bDE3Ny45LS4xYy0yMC4zLTI5LjEtNTIuNy00OS42LTg4LjktNDkuNnptMzYuNiAxLjZjMjQuMiA5LjEgNDQuNCAyNi42IDU4LjUgNDhsODkuOCAwYy00My4zLTI5LjctOTYuNi00My41LTE0OC4zLTQ4em02Mi44IDUuNGMzMy40IDguNSA2Ni40IDIxLjkgOTQuMyA0Mi41bDQ4LjMgMGMtNDQuMS0yMy4xLTkzLjYtMzUuNC0xNDIuNi00Mi41eiJdCiAgICB9OwogICAgZmFOdXRyaXRpb25peCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJudXRyaXRpb25peCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2Q2IiwgIk0xMTIgOC4xUzI0NS40LS4xIDIzMyAxMTIuNWMwIDAgMTkuMS03NC45IDEwMy00MC42IDAgMC0xNy43IDc0LTg4IDU2IDAgMCAxNC42LTU0LjYgNjYuMS01Ni42IDAgMC0zOS45LTEwLjMtODIuMSA0OC44IDAgMC0xOS44LTk0LjUtOTMuNi05OS43IDAgMCA3NS4yIDE5LjQgNzcuNiAxMDcuNSAwIC4xLTEwNi40IDctMTA0LTExOS44ek00MjQgMzIzLjdjMCA0OC41LTkuNyA5NS4zLTMyIDEzMi4zLTQyLjIgMzAuOS0xMDUgNDgtMTY4IDQ4LTYyLjkgMC0xMjUuOC0xNy4xLTE2OC00OC0yMi4zLTM3LTMyLTgzLjgtMzItMTMyLjMgMC00OC40IDE3LjctOTQuNyA0MC0xMzEuNyA0Mi4yLTMwLjkgOTcuMS00OC42IDE2MC00OC42IDYzIDAgMTE3LjggMTcuNiAxNjAgNDguNiAyMi4zIDM3IDQwIDgzLjMgNDAgMTMxLjd6TTE0NCA0MjhhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwek0yMTYgNDI4YTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwem0wLTY2LjJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHpNMjg4IDQyOGEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwem0wLTY2LjJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6TTM2MCA0MjhhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwek0zODQgMjU2Yy00LjgtMjIuMy03LjQtMzYuOS0xNi01Ni0zOC44LTE5LjktOTAuNS0zMi0xNDQtMzJTMTE4LjggMTgwLjEgODAgMjAwYy04LjggMTkuNS0xMS4yIDMzLjktMTYgNTYgNDIuMi03LjkgOTguNy0xNC44IDE2MC0xNC44czExNy44IDYuOSAxNjAgMTQuOHoiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zU2FtcGxpbmdQbHVzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtc2FtcGxpbmctcGx1cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGYxIiwgIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6bTEwNyAyMDUuNmMtNC43IDAtOSAyLjgtMTAuNyA3LjJsLTQgOS41LTExLTkyLjhjLTEuNy0xMy45LTIyLTEzLjQtMjMuMSAuNGwtNC4zIDUxLjQtNS4yLTY4LjhjLTEuMS0xNC4zLTIyLjEtMTQuMi0yMy4yIDBsLTMuNSA0NC45LTUuOS05NC4zYy0uOS0xNC41LTIyLjMtMTQuNC0yMy4yIDBsLTUuMSA4My43LTQuMy02Ni4zYy0uOS0xNC40LTIyLjItMTQuNC0yMy4yIDBsLTUuMyA4MC4yLTQuMS01N2MtMS4xLTE0LjMtMjItMTQuMy0yMy4yLS4ybC03LjcgODkuOC0xLjgtMTIuMmMtMS43LTExLjQtMTcuMS0xMy42LTIyLTMuM2wtMTMuMiAyNy43LTQzLjkgMCAwIDIzLjIgNTEuMyAwYzQuNCAwIDguNC0yLjUgMTAuNC02LjRsMTAuNyA3My4xYzIgMTMuNSAyMS45IDEzIDIzLjEtLjdsMy44LTQzLjYgNS43IDc4LjNjMS4xIDE0LjQgMjIuMyAxNC4yIDIzLjItLjFsNC42LTcwLjQgNC44IDczLjNjLjkgMTQuNCAyMi4zIDE0LjQgMjMuMi0uMWw0LjktODAuNSA0LjUgNzEuOGMuOSAxNC4zIDIyLjEgMTQuNSAyMy4yIC4ybDQuNi01OC42IDQuOSA2NC40YzEuMSAxNC4zIDIyIDE0LjIgMjMuMSAuMWw2LjgtODMgMi43IDIyLjNjMS40IDExLjggMTcuNyAxNC4xIDIyLjMgMy4xbDE4LTQzLjQgNTAuNSAwIDAtMjMuMi01OC40IC4zem0tNzggNS4ybC0yMS45IDAgMCAyMS45YzAgNC4xLTMuMyA3LjUtNy41IDcuNS00LjEgMC03LjUtMy4zLTcuNS03LjVsMC0yMS45LTIxLjkgMGMtNC4xIDAtNy41LTMuMy03LjUtNy41IDAtNC4xIDMuNC03LjUgNy41LTcuNWwyMS45IDAgMC0yMS45YzAtNC4xIDMuNC03LjUgNy41LTcuNXM3LjUgMy4zIDcuNSA3LjVsMCAyMS45IDIxLjkgMGM0LjEgMCA3LjUgMy4zIDcuNSA3LjUgMCA0LjEtMy40IDcuNS03LjUgNy41eiJdCiAgICB9OwogICAgZmFSZWRoYXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVkaGF0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3YmMiLCAiTTM0MS41IDI4NS42YzMzLjcgMCA4Mi4zLTYuOSA4Mi4zLTQ3IC4yLTYuNyAuOS0xLjgtMjAuOS05Ni4yLTQuNi0xOS4xLTguNy0yNy44LTQyLjMtNDQuNi0yNi4xLTEzLjMtODIuOS0zNS40LTk5LjctMzUuNC0xNS43IDAtMjAuMiAyMC4yLTM4LjkgMjAuMi0xOCAwLTMxLjMtMTUuMS00OC4xLTE1LjEtMTYuMSAwLTI2LjcgMTEtMzQuOCAzMy42LTI3LjUgNzcuNi0yNi4zIDc0LjMtMjYuMSA3OC4zIDAgMjQuOCA5Ny42IDEwNi4xIDIyOC41IDEwNi4xek00MjkgMjU0LjhjNC43IDIyIDQuNyAyNC4zIDQuNyAyNy4yIDAgMzcuNy00Mi4zIDU4LjYtOTggNTguNi0xMjUuNyAuMS0yMzUuOS03My42LTIzNS45LTEyMi4zIDAtNi44IDEuNC0xMy41IDQuMS0xOS43LTQ1LjIgMi4zLTEwMy44IDEwLjMtMTAzLjggNjIgMCA4NC43IDIwMC42IDE4OSAzNTkuNSAxODkgMTIxLjggMCAxNTIuNS01NS4xIDE1Mi41LTk4LjYgMC0zNC4yLTI5LjYtNzMtODIuOS05Ni4yeiJdCiAgICB9OwogICAgZmFTcXVhcmVQaWVkUGlwZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXBpZWQtcGlwZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsicGllZC1waXBlci1zcXVhcmUiXSwgImUwMWUiLCAiTTMyLjEgNDE5bC0zMiA2MC4yIC44LTMyOEMuOSA4NS4zIDU0LjEgMzIgMTIwLjEgMzJsMzI3LjIgMEMzNTQuMyA2MC45IDI1Ny40IDEyNi4yIDE5My40IDIwMC42IDEyMi44IDI4MiA4Mi43IDMzOCAzMi4xIDQxOXptNDE2LTM4N1MzMDUuMyA5OC44IDI2MS43IDE5OS4xYy0yMy4yIDUzLjYtMjguOSAxMTguMS03MSAxNTguNi0yOC45IDI3LjgtNjkuOCAzOC4yLTEwNS4zIDU2LjMtMjMuMiAxMi02Ni40IDQwLjUtODQuOSA2NmwzMjguNCAwYzY2IDAgMTE5LjMtNTMuMyAxMTkuMy0xMTkuMi0uMSAwLS4xLTMyOC44LS4xLTMyOC44eiJdCiAgICB9OwogICAgZmFQaWVkUGlwZXJTcXVhcmUgPSBmYVNxdWFyZVBpZWRQaXBlcjsKICAgIGZhV2hhdHNhcHAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2hhdHNhcHAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjIzMiIsICJNMzgwLjkgOTcuMWMtNDEuOS00Mi05Ny43LTY1LjEtMTU3LTY1LjEtMTIyLjQgMC0yMjIgOTkuNi0yMjIgMjIyIDAgMzkuMSAxMC4yIDc3LjMgMjkuNiAxMTFMMCA0ODAgMTE3LjcgNDQ5LjFjMzIuNCAxNy43IDY4LjkgMjcgMTA2LjEgMjdsLjEgMGMxMjIuMyAwIDIyNC4xLTk5LjYgMjI0LjEtMjIyIDAtNTkuMy0yNS4yLTExNS02Ny4xLTE1N3ptLTE1NyAzNDEuNmMtMzMuMiAwLTY1LjctOC45LTk0LTI1LjdsLTYuNy00LTY5LjggMTguMyAxOC42LTY4LjEtNC40LTdjLTE4LjUtMjkuNC0yOC4yLTYzLjMtMjguMi05OC4yIDAtMTAxLjcgODIuOC0xODQuNSAxODQuNi0xODQuNSA0OS4zIDAgOTUuNiAxOS4yIDEzMC40IDU0LjFzNTYuMiA4MS4yIDU2LjEgMTMwLjVjMCAxMDEuOC04NC45IDE4NC42LTE4Ni42IDE4NC42ek0zMjUuMSAzMDAuNWMtNS41LTIuOC0zMi44LTE2LjItMzcuOS0xOC01LjEtMS45LTguOC0yLjgtMTIuNSAyLjhzLTE0LjMgMTgtMTcuNiAyMS44Yy0zLjIgMy43LTYuNSA0LjItMTIgMS40LTMyLjYtMTYuMy01NC0yOS4xLTc1LjUtNjYtNS43LTkuOCA1LjctOS4xIDE2LjMtMzAuMyAxLjgtMy43IC45LTYuOS0uNS05LjdzLTEyLjUtMzAuMS0xNy4xLTQxLjJjLTQuNS0xMC44LTkuMS05LjMtMTIuNS05LjUtMy4yLS4yLTYuOS0uMi0xMC42LS4ycy05LjcgMS40LTE0LjggNi45Yy01LjEgNS42LTE5LjQgMTktMTkuNCA0Ni4zczE5LjkgNTMuNyAyMi42IDU3LjRjMi44IDMuNyAzOS4xIDU5LjcgOTQuOCA4My44IDM1LjIgMTUuMiA0OSAxNi41IDY2LjYgMTMuOSAxMC43LTEuNiAzMi44LTEzLjQgMzcuNC0yNi40czQuNi0yNC4xIDMuMi0yNi40Yy0xLjMtMi41LTUtMy45LTEwLjUtNi42eiJdCiAgICB9OwogICAgZmFJbWRiID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImltZGIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJkOCIsICJNODkuNSAzMjMuNmwtMzUuNiAwIDAtMTM3LjQgMzUuNiAwIDAgMTM3LjR6bTY2LjYtNzMuMWw5LjEtNjQuMyA0Ni4zIDAgMCAxMzcuNC0zMSAwIDAtOTIuNy0xMy40IDkyLjctMjEuMyAwLTEzLTkwLjctLjEgOTAuNy0zMS4yIDAgMC0xMzcuNCA0Ni4xIDBjLjUgOC4zIDIuOCAxOC4xIDQuMyAyOS40bDQuMiAzNC45em02Ny42IDczLjFsMC0xMzcuNCAyNi42IDBjMTcgMCAyNyAuOSAzMyAyLjQgNi4xIDEuNyAxMC43IDQuMiAxMy45IDcuOSAzLjEgMy4zIDUuMSA2LjYgNS44IDEyIC45IDQuNCAxLjQgMTMuMSAxLjQgMjYuMmwwIDQ4LjJjMCAxMi4zLS43IDIwLjUtMS45IDI0LjctMS4xIDQuMS0zLjEgNy40LTYgOS43LTIuOCAyLjQtNi40IDQuMS0xMC43IDUtNC4yIC44LTEwLjYgMS4zLTE5LjEgMS4zbC00MyAwem0zNS41LTExMy45bDAgODkuNGM1LjEgMCA4LjMtMSA5LjQtMi4zIDEuMS0yIDEuOC03LjYgMS44LTE2LjdsMC01My4zYzAtNi4yLS4xLTEwLjItLjctMTItLjMtMS44LTEuMi0zLTIuNi00LjctMS40IDAtNC4xLS40LTcuOS0uNHptNTcuMyAxMTMuOWwwLTEzNy40IDM0LjEgMCAwIDQzLjljMi45LTIuNCA2LjEtNC45IDkuNS02LjYgMy42LTEuNSA4LjgtMi40IDEyLjgtMi40IDQuOCAwIDguOSAuOCAxMi4zIDIuMiAzLjQgMS41IDYgMy41IDggNi4yIDEuNyAyLjYgMi43IDUuMyAzLjEgNy44IC40IDIuNi0uMiA4LS4yIDE2LjJsMCAzOC42YzAgOC4yIC4yIDE0LjMtLjggMTguNC0xLjEgNC0zLjggNy42LTcuOCA5LjYtNC4xIDMuOS04LjkgNS4zLTE0LjYgNS4zLTQgMC05LjItLjktMTIuNy0yLjUtMy41LTEuOC02LjctNC41LTkuNi04bC0yLjEgOC43LTMyIDB6bTQ1LjEtMjAuN2MuNy0xLjggMS02IDEtMTIuNWwwLTM1LjRjMC01LjYtLjMtOS41LTEuMS0xMS4yLS43LTEuOS0zLjctMi43LTUuOC0yLjctMiAwLTMuNCAuOC00LjEgMi4zLS42IDEuNS0xIDUuNC0xIDExLjZsMCAzNi40YzAgNi4xIC40IDEwIDEuMiAxMS42IC42IDEuNyAyLjEgMi41IDQuMSAyLjUgMi4yIDAgNC4yLS44IDUuNy0yLjZ6TTQxOC40IDMyYzE1LjcgMS4yIDI4LjcgMTUuMiAyOC43IDMxLjlsMCAzODQuMmMwIDE2LjQtMTEuOSAzMC40LTI4LjIgMzEtLjMgMC0uNSAuOS0uOCAuOUwyOS45IDQ4MGMtLjMgMC0uNi0uOS0uOC0uMS0xNS43LTEuNC0yNy45LTEzLjgtMjktMzAuMkwwIDYxLjhDMS4xIDQ1LjkgMTMuOCAzMy4xIDMwLjMgMzEuMWwzODcuNCAwYy4yIDAgLjUgLjkgLjcgLjl6TTMwLjMgNDEuM0MxOSA0MiAxMCA1MSA5LjMgNjIuNGwwIDM4Ny4zYy40IDUuNCAyLjcgMTAuNSA2LjQgMTQuMyAzLjggMy45IDguOCA2LjMgMTQuMiA2LjdsMzg4LjIgMGMxMS41LTEgMjAuNi0xMS42IDIwLjYtMjIuNmwwLTM4NC4yYzAtNS43LTIuMS0xMS4zLTYtMTUuNXMtOS4zLTYuOC0xNS03LjJsLTM4Ny40IDB6Il0KICAgIH07CiAgICBmYVB5dGhvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJweXRob24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNlMiIsICJNNDM5LjggMjAwLjVjLTcuNy0zMC45LTIyLjMtNTQuMi01My40LTU0LjJsLTQwLjEgMCAwIDQ3LjRjMCAzNi44LTMxLjIgNjcuOC02Ni44IDY3LjhsLTEwNi44IDBjLTI5LjIgMC01My40IDI1LTUzLjQgNTQuM2wwIDEwMS44YzAgMjkgMjUuMiA0NiA1My40IDU0LjMgMzMuOCA5LjkgNjYuMyAxMS43IDEwNi44IDAgMjYuOS03LjggNTMuNC0yMy41IDUzLjQtNTQuM2wwLTQwLjctMTA2LjcgMCAwLTEzLjYgMTYwLjIgMGMzMS4xIDAgNDIuNi0yMS43IDUzLjQtNTQuMiAxMS4yLTMzLjUgMTAuNy02NS43IDAtMTA4LjZ6TTI4Ni4yIDQ0NC43YTIwLjQgMjAuNCAwIDEgMSAwLTQwLjcgMjAuNCAyMC40IDAgMSAxIDAgNDAuN3pNMTY3LjggMjQ4LjFsMTA2LjggMGMyOS43IDAgNTMuNC0yNC41IDUzLjQtNTQuM2wwLTEwMS45YzAtMjktMjQuNC01MC43LTUzLjQtNTUuNi0zNS44LTUuOS03NC43LTUuNi0xMDYuOCAuMS00NS4yIDgtNTMuNCAyNC43LTUzLjQgNTUuNmwwIDQwLjcgMTA2LjkgMCAwIDEzLjYtMTQ3IDBjLTMxLjEgMC01OC4zIDE4LjctNjYuOCA1NC4yLTkuOCA0MC43LTEwLjIgNjYuMSAwIDEwOC42IDcuNiAzMS42IDI1LjcgNTQuMiA1Ni44IDU0LjJsMzYuNyAwIDAtNDguOGMwLTM1LjMgMzAuNS02Ni40IDY2LjgtNjYuNHpNMTYxLjIgNjQuN2EyMC40IDIwLjQgMCAxIDEgMCA0MC44IDIwLjQgMjAuNCAwIDEgMSAwLTQwLjh6Il0KICAgIH07CiAgICBmYUNhc2hBcHAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2FzaC1hcHAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTdkNCIsICJNNDQwLjMgOTYuOWMtOS40LTI2LjUtMzAuMy00Ny40LTU2LjgtNTctMjQuMS03LjktNDYuMy03LjktOTEuNi03LjlMMTU2IDMyYy00NC44IDAtNjcuMiAwLTkxLjMgNy41LTI2LjUgOS42LTQ3LjQgMzAuNS01NyA1Ny03LjcgMjQuMy03LjcgNDYuNy03LjcgOTEuN0wwIDMyMy44YzAgNDUuMiAwIDY3LjQgNy41IDkxLjUgOS42IDI2LjUgMzAuNSA0Ny40IDU3IDU3IDI0LjMgNy43IDQ2LjcgNy43IDkxLjYgNy43bDEzNS43IDBjNDUgMCA2Ny40IDAgOTEuNi03LjcgMjYuNS05LjYgNDcuNC0zMC41IDU3LTU3IDcuNy0yNC4zIDcuNy00Ni43IDcuNy05MS41bDAtMTM1LjVjMC00NSAwLTY3LjQtNy43LTkxLjV6TTMyMy4xIDE4NS40bC0yNS44IDIxLjFjLTIuMyAxLjktNS41IDEuNS03LjMtLjktMTMuMi0xNi4yLTMzLjctMjUuNC01Ni4xLTI1LjQtMjUgMC00MC42IDEwLjktNDAuNiAyNi4yLS40IDEyLjggMTEuNyAxOS42IDQ5LjEgMjcuNyA0Ny4yIDEwIDY4LjcgMjkuNyA2OC43IDYyLjcgMCA0MS40LTMzLjcgNzEuOS04Ni40IDc1LjNsLTUuMSAyNC41Yy0uNCAyLjMtMi42IDQuMS01LjEgNC4xbC00MC42IDBjLTMuNCAwLTUuOC0zLjItNS4xLTYuNGw2LjQtMjcuM2MtMjYtNy41LTQ3LjItMjItNTkuMy0zOS43LTEuNS0yLjMtMS4xLTUuMyAxLjEtN2wyOC4yLTIyYzIuMy0xLjkgNS44LTEuMyA3LjUgMS4xIDE0LjkgMjAuOSAzOCAzMy4zIDY1LjcgMzMuMyAyNSAwIDQzLjgtMTIuMiA0My44LTI5LjcgMC0xMy40LTkuNC0xOS42LTQxLjItMjYuMi01NC4yLTExLjctNzUuOC0zMS44LTc1LjgtNjQuOSAwLTM4LjQgMzIuMi02Ny4yIDgwLjktNzFsNS4zLTI1LjRjLjQtMi4zIDIuNi00LjEgNS4xLTQuMWwzOS45IDBjMy4yIDAgNS44IDMgNS4xIDYuMmwtNi4yIDI4LjRjMjAuOSA2LjQgMzggMTcuOSA0OC43IDMyLjIgMS43IDIuMSAxLjMgNS4zLS45IDd6Il0KICAgIH07CiAgICBmYVBpbnRlcmVzdFAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGludGVyZXN0LXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjIzMSIsICJNMjA0IDYuNWMtMTAyLjYgMC0yMDQgNjguNC0yMDQgMTc5LjEgMCA3MC40IDM5LjYgMTEwLjQgNjMuNiAxMTAuNCA5LjkgMCAxNS42LTI3LjYgMTUuNi0zNS40IDAtOS4zLTIzLjctMjkuMS0yMy43LTY3LjggMC04MC40IDYxLjItMTM3LjQgMTQwLjQtMTM3LjQgNjguMSAwIDExOC41IDM4LjcgMTE4LjUgMTA5LjggMCA1My4xLTIxLjMgMTUyLjctOTAuMyAxNTIuNy0yNC45IDAtNDYuMi0xOC00Ni4yLTQzLjggMC0zNy44IDI2LjQtNzQuNCAyNi40LTExMy40IDAtNjYuMi05My45LTU0LjItOTMuOSAyNS44IDAgMTYuOCAyLjEgMzUuNCA5LjYgNTAuNy0xMy44IDU5LjQtNDIgMTQ3LjktNDIgMjA5LjEgMCAxOC45IDIuNyAzNy41IDQuNSA1Ni40IDMuNCAzLjggMS43IDMuNCA2LjkgMS41IDUwLjQtNjkgNDguNi04Mi41IDcxLjQtMTcyLjggMTIuMyAyMy40IDQ0LjEgMzYgNjkuMyAzNiAxMDYuMiAwIDE1My45LTEwMy41IDE1My45LTE5Ni44IDAtOTkuMy04NS44LTE2NC4xLTE4MC0xNjQuMXoiXQogICAgfTsKICAgIGZhV2htY3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2htY3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQwZCIsICJNNDQ4IDE2MWwwLTIxLjMtMjguNS04LjgtMi4yLTEwLjQgMjAuMS0yMC43LTEwLjQtMTkuNC0yOSA3LjUtNy4yLTcuNSA3LjUtMjguMi0xOS4xLTExLjYtMjEuMyAyMS0xMC43LTMuMi03LTI2LjQtMjIuNiAwLTYuMiAyNi40LTEyLjEgMy4yLTE5LjctMjEtMTkuNCAxMSA4LjEgMjcuNy04LjEgOC40LTI4LjUtNy41LTExIDE5LjEgMjAuNyAyMS0yLjkgMTAuNC0yOC41IDcuOC0uMyAyMS43IDI4LjggNy41IDIuNCAxMi4xLTIwLjEgMTkuOSAxMC40IDE4LjUgMjkuNi03LjUgNy4yIDguNi04LjEgMjYuOSAxOS45IDExLjYgMTkuNC0yMC40IDExLjYgMi45IDYuNyAyOC41IDIyLjYgLjMgNi43LTI4LjggMTEuNi0zLjUgMjAuNyAyMS42IDIwLjQtMTIuMS04LjgtMjggNy44LTguMSAyOC44IDguOCAxMC4zLTIwLjEtMjAuOS0xOC44IDIuMi0xMi4xIDI5LjEtN3pNMzI4LjggOTIuNmE1Ni44IDU2LjggMCAxIDEgMCAxMTMuNiA1Ni44IDU2LjggMCAxIDEgMC0xMTMuNnptNzIuMyAxMzBsNDYuOSAxNC41IDAgMzkuOS01NS4xIDEzLjQtNC4xIDIyLjcgMzguOSAzNS4zLTE5LjIgMzcuOS01NC0xNi43LTE0LjYgMTUuMiAxNi43IDUyLjUtMzguMyAyMi43LTM4LjktNDAuNS0yMS43IDYuNi0xMi42IDU0LTQyLjQtLjUtMTIuNi01My42LTIxLjctNS42LTM2LjQgMzguNC0zNy40LTIxLjcgMTUuMi01MC41LTEzLjctMTYuMS01NS41IDE0LjEtMTkuNy0zNC44IDM3LjktMzcuNC00LjgtMjIuOC01NC0xNC4xIC41LTQwLjkgNTMuNS0xNC43IDUuNy0xOS43LTM4LjktMzkuNCAyMC43LTM1LjggNTMuNiAxNC4xIDE1LjItMTUuNy0xNS4yLTUyIDM2LjQtMjAuNyAzNi44IDM5LjQgMjIuNy02LjEgMTEuNi01MiA0Mi40IDAgMTEuNiA0NS45LTIyLjYtNS45LTYuMy0xLjctMy4zIDUuNy0xMSAxOS4xLTMuMyA1LjYgNC42IDQuNiAxNy4yIDE3LjQtLjMgMS0yMy44IDYuNS02LjIgMS43YzAgMy4yLS4xIDkuNi0uMyAxOS4zLTQ3LjUgMTAuNC04My4zIDUyLjgtODMuMyAxMDMuNSAwIDU4LjMgNDcuMyAxMDUuNyAxMDUuNyAxMDUuNyA1MC41IDAgOTIuNy0zNS40IDEwMy4yLTgyLjggOS45IC4xIDE2LjYgLjIgMjAuMSAuM2wxLjYtNi43IDUuNi0yNCAxLjktLjYgMTcuMSAxNy44IDQuNyA0LjkgNS44LTMuNCAyMC40LTEyLjEgNS44LTMuNS0yLTYuNS02LjgtMjEuMnoiXQogICAgfTsKICAgIGZhSm9nZXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiam9nZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNiNyIsICJNMzg2LjEgNDVDMzQ1LjYgMTkuOSAzMDAuNiA4IDI1Ni4yIDggMTczIDggOTEuOCA0OS45IDQ0LjkgMTI1LjktMjcgMjQyLjUgOS4zIDM5NS4yIDEyNS45IDQ2Ny4xczI2OS4zIDM1LjYgMzQxLjItODAuOUM1MzkgMjY5LjYgNTAyLjcgMTE2LjggMzg2LjEgNDV6bTUxLjggMzIzLjJjLTQwLjQgNjUuNS0xMTAuNCAxMDEuNS0xODIgMTAxLjUtNi44IDAtMTMuNi0uNC0yMC40LTEtOS0xMy42LTE5LjktMzMuMy0yMy43LTQyLjQtNS43LTEzLjctMjcuMi00NS42IDMxLjItNjcuMSA1MS43LTE5LjEgMTc2LjctMTYuNSAyMDguOC0xNy42LTQgOS04LjYgMTcuOS0xMy45IDI2LjZ6TTIzNy4xIDI4MS45Yy01NS41LTEuNC04MS43LTIwLjgtNTguNS00OC4yczUxLjEtNDAuNyA2OC45LTUxLjJjMTcuOS0xMC41IDI3LjMtMzMuNy0yMy42LTI5LjctMTI4LjYgOC43LTE2Ny4zIDk5LjMtMTc4LjMgMTQwLjItOC44LTQ5LjctLjEtMTAyLjcgMjguNS0xNDkuMSA2MS45LTEwMC41IDE5My41LTEzMS43IDI5NC02OS44IDc0LjggNDYuMSAxMTEuMiAxMzAuOSA5OS4zIDIxMi43LTI0LjktLjUtMTc5LjMtMy42LTIzMC4zLTQuOXptMTgzLjgtNTQuOGMtMjIuNy02LTU3IDExLjMtODYuNyAyNy4yLTI5LjcgMTUuOC0zMS4xIDguMi0zMS4xIDguMnM0MC4yLTI4LjEgNTAuNy0zNC41IDMxLjktMTQgMTMuNC0yNC42Yy0zLjItMS44LTYuNy0yLjctMTAuNC0yLjctMTcuOCAwLTQxLjUgMTguNy02Ny41IDM1LjYtMzEuNSAyMC41LTY1LjMgMzEuMy02NS4zIDMxLjNMMzkzLjUgMjY2IDQ0MCAyNDIuNnMzLjYtOS41LTE5LjEtMTUuNXoiXQogICAgfTsKICAgIGZhU3F1YXJlWW91dHViZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUteW91dHViZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYxNzk4LCAieW91dHViZS1zcXVhcmUiXSwgImY0MzEiLCAiTTI4MiAyNTYuMmwtOTUuMi01NC4xIDAgMTA4LjIgOTUuMi01NC4xek0zODQgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NHptMTQuNCAxMzYuMWM3LjYgMjguNiA3LjYgODguMiA3LjYgODguMnMwIDU5LjYtNy42IDg4LjFjLTQuMiAxNS44LTE2LjUgMjcuNy0zMi4yIDMxLjktMjguMyA3LjctMTQyLjIgNy43LTE0Mi4yIDcuN3MtMTEzLjkgMC0xNDIuMi03LjZjLTE1LjctNC4yLTI4LTE2LjEtMzIuMi0zMS45LTcuNi0yOC42LTcuNi04OC4yLTcuNi04OC4yczAtNTkuNyA3LjYtODguMmM0LjItMTUuOCAxNi41LTI4LjIgMzIuMi0zMi40IDI4LjMtNy43IDE0Mi4yLTcuNyAxNDIuMi03LjdzMTEzLjkgMCAxNDIuMiA3LjdjMTUuNyA0LjIgMjggMTYuNiAzMi4yIDMyLjR6Il0KICAgIH07CiAgICBmYVlvdXR1YmVTcXVhcmUgPSBmYVNxdWFyZVlvdXR1YmU7CiAgICBmYUF0bGFzc2lhbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhdGxhc3NpYW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjc3YiIsICJNMTUyLjIgMjM2LjRjLTcuNy04LjItMTkuNy03LjctMjQuOCAyLjhMMS42IDQ5MC4yYy01IDEwIDIuNCAyMS43IDEzLjQgMjEuN2wxNzUgMGM1LjggLjEgMTEtMy4yIDEzLjQtOC40IDM3LjktNzcuOCAxNS4xLTE5Ni4zLTUxLjItMjY3LjF6TTI0NC40IDguMWMtMTIyLjMgMTkzLjQtOC41IDM0OC42IDY1IDQ5NS41IDIuNSA1LjEgNy43IDguNCAxMy40IDguNEw0OTcgNTEyYzExLjIgMCAxOC40LTExLjggMTMuNC0yMS43IDAgMC0yMzQuNS00NzAuNi0yNDAuNC00ODIuMy01LjMtMTAuNi0xOC44LTEwLjgtMjUuNiAuMXoiXQogICAgfTsKICAgIGZhUGllZFBpcGVySGF0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBpZWQtcGlwZXItaGF0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0ZTUiLCAiTTY0MCAyNC45Yy04MC44IDUzLjYtODkuNCA5Mi41LTk2LjQgMTA0LjQtNi43IDEyLjItMTEuNyA2MC4zLTIzLjMgODMuNi0xMS43IDIzLjYtNTQuMiA0Mi4yLTY2LjEgNTAtMTEuNyA3LjgtMjguMyAzOC4xLTQxLjkgNjQuMi0xMDguMS00LjQtMTY3LjQgMzguOC0yNTkuMiA5My42IDI5LjQtOS43IDQzLjMtMTYuNyA0My4zLTE2LjcgOTQuMi0zNiAxMzkuMy02OC4zIDI4MS4xLTQ5LjIgMS4xIDAgMS45IC42IDIuOCAuOCAzLjkgMi4yIDUuMyA2LjkgMy4xIDEwLjhsLTUzLjkgOTUuOGMtMi41IDQuNy03LjggNy4yLTEzLjEgNi4xLTEyNi44LTIzLjgtMjI2LjkgMTcuMy0zMTguOSAxOC42LTczLjQgMS4xLTk3LjUtMzMuNS05Ny41LTM1LjEgMC0xLjEgLjYtMS43IDEuNy0xLjcgMCAwIDM4LjMgMCAxMDMuMS0xNS4zIDczLjYtMTQwLjMgMTM5LjItMTg5LjQgMjEwLjYtMTg5LjQgMCAwIDcxLjcgMCA5MC42IDYxLjkgMjIuOC0zOS43IDI4LjMtNDkuMiAyOC4zLTQ5LjIgNS4zLTkuNCAzNS03Ny4yIDg2LjQtMTQxLjQgNTEuNS02NCA5MC40LTc5LjkgMTE5LjMtOTEuOHoiXQogICAgfTsKICAgIGZhSW50ZXJuZXRFeHBsb3JlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJpbnRlcm5ldC1leHBsb3JlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjZiIiwgIk00ODMuMSAxNTkuN2MxMC45LTI0LjYgMjEuNC02MC40IDIxLjQtODcuOSAwLTcyLjctNzkuNi05OC40LTIwOS43LTM4LjYtMTA3LjYtNy4yLTIxMS4yIDczLjctMjM3LjEgMTg2LjUgMzAuOS0zNC45IDc4LjMtODIuMyAxMjItMTAxLjItNTQuMyA0OC4zLTEwMC42IDEwOS40LTEzNS43IDE3My4yLTIwLjcgMzcuOS00NCA5OS4yLTQ0IDE0NSAwIDk4LjYgOTIuOSA4Ni41IDE4MC4zIDQyIDMxLjQgMTUuNCA2Ni42IDE1LjYgMTAxLjcgMTUuNiA5Ny4xIDAgMTg0LjItNTQuMyAyMTYuOC0xNDZsLTEyMC44IDBjLTUyLjUgODguNi0xOTYuOCA1My0xOTYuOC00Ny40bDMyOC44IDBjNi40LTQzLjYtMS43LTk1LjctMjYuOS0xNDEuMnpNNjQuNiAzNDYuOUM4Mi4zIDM5OCAxMTguMyA0NDIuNyAxNjQuOCA0NzAuMiA3Ni4xIDUxOS4xLTguNCA0OTkuMyA2NC42IDM0Ni45ek0xODAuNSAyMzhjMi01NS4yIDUwLjMtOTQuOSAxMDQtOTQuOSA1My40IDAgMTAyIDM5LjcgMTA0IDk0LjlsLTIwOCAwek0zNjUuMSA1MC40YzIxLjQtMTAuMyA0OC42LTIyIDcyLjYtMjIgMzEuNCAwIDU0LjMgMjEuNyA1NC4zIDUzLjcgMCAyMC03LjQgNDktMTQuNiA2Ny45LTI2LjMtNDIuMy02Ni04MS42LTExMi4zLTk5LjZ6Il0KICAgIH07CiAgICBmYUFpcmJuYiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhaXJibmIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjgzNCIsICJNMjI0LjUgMzczLjFjLTI1LjItMzEuNy00MC4xLTU5LjQtNDUtODMuMi0yMi41LTg4IDExMi42LTg4IDkwLjEgMC01LjQgMjQuMi0yMC4zIDUyLTQ1IDgzLjJsLS4xIDB6bTEzOC4yIDczLjJjLTQyLjEgMTguMy04My43LTEwLjktMTE5LjMtNTAuNSAxMDMuOS0xMzAuMSA0Ni4xLTIwMC0xOC44LTIwMC01NC45IDAtODUuMiA0Ni41LTczLjMgMTAwLjUgNi45IDI5LjIgMjUuMiA2Mi40IDU0LjQgOTkuNS0zMi41IDM2LTYwLjUgNTIuNy04NS4yIDU0LjktNTAgNy40LTg5LjEtNDEuMS03MS4zLTkxLjEgMTUuMS0zOS4yIDExMS43LTIzMS4yIDExNS45LTI0MS42IDE1LjgtMzAuMSAyNS42LTU3LjQgNTkuNC01Ny40IDMyLjMgMCA0My40IDI1LjkgNjAuNCA1OS45IDM2IDcwLjYgODkuNCAxNzcuNSAxMTQuOCAyMzkuMSAxMy4yIDMzLjEtMS40IDcxLjMtMzcgODYuNnptNDctMTM2LjFjLTEyOC45LTI3NC4zLTEzNi0yNzguMi0xODUuMS0yNzguMi00NS41IDAtNjQuOSAzMS43LTg0LjcgNzIuOC0xMDYuMiAyMTIuMy0xMTYuNCAyNDIuNC0xMTcuMyAyNDUtMjUuMiA2OS4zIDI2LjcgMTMwLjIgODkuNiAxMzAuMiAyMS43IDAgNjAuNi02LjEgMTEyLjQtNjIuNCA1OC43IDYzLjggMTAxLjMgNjIuNCAxMTIuNCA2Mi40IDYyLjkgLjEgMTE0LjktNjAuOSA4OS42LTEzMC4yIDAtMy45LTE2LjgtMzguOS0xNi44LTM5LjZsMCAweiJdCiAgICB9OwogICAgZmFKcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJqcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2I4IiwgIk0wIDMybDAgNDQ4IDQ0OCAwIDAtNDQ4LTQ0OCAwek0yNDMuOCAzODEuNGMwIDQzLjYtMjUuNiA2My41LTYyLjkgNjMuNS0zMy43IDAtNTMuMi0xNy40LTYzLjItMzguNUwxNTIgMzg1LjdjNi42IDExLjcgMTIuNiAyMS42IDI3LjEgMjEuNiAxMy44IDAgMjIuNi01LjQgMjIuNi0yNi41bDAtMTQzLjEgNDIuMSAwIDAgMTQzLjd6bTk5LjYgNjMuNWMtMzkuMSAwLTY0LjQtMTguNi03Ni43LTQzTDMwMSAzODIuMWM5IDE0LjcgMjAuOCAyNS42IDQxLjUgMjUuNiAxNy40IDAgMjguNi04LjcgMjguNi0yMC44IDAtMTQuNC0xMS40LTE5LjUtMzAuNy0yOGwtMTAuNS00LjVjLTMwLjQtMTIuOS01MC41LTI5LjItNTAuNS02My41IDAtMzEuNiAyNC4xLTU1LjYgNjEuNi01NS42IDI2LjggMCA0NiA5LjMgNTkuOCAzMy43TDM2OCAyOTBjLTcuMi0xMi45LTE1LTE4LTI3LjEtMTgtMTIuMyAwLTIwLjEgNy44LTIwLjEgMTggMCAxMi42IDcuOCAxNy43IDI1LjkgMjUuNmwxMC41IDQuNWMzNS44IDE1LjMgNTUuOSAzMSA1NS45IDY2LjIgMCAzNy44LTI5LjggNTguNi02OS43IDU4LjZ6Il0KICAgIH07CiAgICBmYVF1aW5zY2FwZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJxdWluc2NhcGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQ1OSIsICJNMzEzLjcgNDc0LjZsLTEgMGMtNDEuOSAwLTgyLjEtMTYuNy0xMTEuOC00Ni4zcy00Ni4zLTY5LjktNDYuMy0xMTEuOCAxNi43LTgyLjEgNDYuMy0xMTEuOCA2OS45LTQ2LjMgMTExLjgtNDYuM2M5NC45IDAgMTY4LjIgODMuMSAxNTcgMTc2LjYgNCA1LjEgOC4yIDkuNiAxMS4yIDE1LjMgMTMuNC0zMC4zIDIwLjMtNjIuNCAyMC4zLTk3LjcgMC0xMzUuMS0xMDkuNS0yNDQuNi0yNDQuNi0yNDQuNlMxMi4xIDExNy41IDEyLjEgMjUyLjYgMTIxLjYgNDk3LjIgMjU2LjYgNDk3LjJjMjMuOCAuMiA0Ny42LTMuMiA3MC40LTEwLjEtNS4yLTMuNS04LjktOC4xLTEzLjMtMTIuNXptNzguMy0xNjlhOTkuMiA5OS4yIDAgMSAwIDAgMTk4LjQgOTkuMiA5OS4yIDAgMSAwIDAtMTk4LjR6Il0KICAgIH07CiAgICBmYUFkdmVyc2FsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFkdmVyc2FsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzNmEiLCAiTTQ4Mi4xIDMyTDI4LjcgMzJDNS44IDMyIDAgMzcuOSAwIDYwLjlMMCA0NTEuMUMwIDQ3NC40IDUuOCA0ODAgMjguNyA0ODBsNDUzLjQgMGMyNC40IDAgMjkuOS01LjIgMjkuOS0yOS43bDAtMzg4LjFjMC0yNC42LTUuNC0zMC4yLTI5LjktMzAuMnpNMTc4LjQgMjIwLjNjLTI3LjUtMjAuMi03Mi4xLTguNy04NC4yIDIzLjQtNC4zIDExLjEtOS4zIDkuNS0xNy41IDguMy05LjctMS41LTE3LjItMy4yLTIyLjUtNS41LTI4LjgtMTEuNCA4LjYtNTUuMyAyNC45LTY0LjMgNDEuMS0yMS40IDgzLjQtMjIuMiAxMjUuMy00LjggNDAuOSAxNi44IDM0LjUgNTkuMiAzNC41IDEyOC41IDIuNyAyNS44LTQuMyA1OC4zIDkuMyA4OC44IDEuOSA0LjQgLjQgNy45LTIuNyAxMC43LTguNCA2LjctMzkuMyAyLjItNDYuNi03LjQtMS45LTIuMi0xLjgtMy42LTMuOS02LjItMy42LTMuOS03LjMtMi4yLTExLjkgMS01Ny40IDM2LjQtMTQwLjMgMjEuNC0xNDctNDMuMy0zLjEtMjkuMyAxMi40LTU3LjEgMzkuNi03MSAzOC4yLTE5LjUgMTEyLjItMTEuOCAxMTQtMzAuOSAxLjEtMTAuMi0xLjktMjAuMS0xMS4zLTI3LjN6bTI4Ni43IDIyMmMwIDE1LjEtMTEuMSA5LjktMTcuOCA5LjlsLTM5NC45IDBjLTcuNCAwLTE4LjIgNC44LTE3LjgtMTAuNyAuNC0xMy45IDEwLjUtOS4xIDE3LjEtOS4xIDEzMi4zLS40IDI2NC41LS40IDM5Ni44IDAgNi44IDAgMTYuNi00LjQgMTYuNiA5Ljl6bTMuOC0zNDAuNWwwIDI5MWMwIDUuNy0uNyAxMy45LTguMSAxMy45LTEyLjQtLjQtMjcuNSA3LjEtMzYuMS01LjYtNS44LTguNy03LjgtNC0xMi40LTEuMi01My40IDI5LjctMTI4LjEgNy4xLTE0NC40LTg1LjItNi4xLTMzLjQtLjctNjcuMSAxNS43LTEwMCAxMS44LTIzLjkgNTYuOS03Ni4xIDEzNi4xLTMwLjVsMC03MWMwLTI2LjItLjEtMjYuMiAyNi0yNi4yIDMuMSAwIDYuNiAuNCA5LjcgMCAxMC4xLS44IDEzLjYgNC40IDEzLjYgMTQuMy0uMSAuMi0uMSAuMy0uMSAuNXpNNDE3LjQgMzM0LjFjLTE5LjUgNDcuNi03Mi45IDQzLjMtOTAgNS4yLTE1LjEtMzMuMy0xNS41LTY4LjIgLjQtMTAxLjUgMTYuMy0zNC4xIDU5LjctMzUuNyA4MS41LTQuOCAyMC42IDI4LjggMTQuOSA4NC42IDguMSAxMDEuMXpNMTIyLjYgMzY5LjRjLTcuNS0xLjMtMzMtMy4zLTMzLjctMjcuOC0uNC0xMy45IDcuOC0yMyAxOS44LTI1LjggMjQuNC01LjkgNDkuMy05LjkgNzMuNy0xNC43IDguOS0yIDcuNCA0LjQgNy44IDkuNSAxLjQgMzMtMjYuMSA1OS4yLTY3LjYgNTguOHoiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI1ZSIsICJNMjUzLjggMjE0LjlsLTMzLjIgMTcuM2MtOS40LTE5LjYtMjUuMi0xOS45LTI3LjUtMTkuOS0yMi4xIDAtMzMuMiAxNC42LTMzLjIgNDMuOCAwIDIzLjYgOS4yIDQzLjggMzMuMiA0My44IDE0LjUgMCAyNC42LTcuMSAzMC42LTIxLjNsMzAuNiAxNS41Yy02LjIgMTEuNS0yNS43IDM5LTY1LjEgMzktMjIuNiAwLTc0LTEwLjMtNzQtNzcgMC01OC43IDQzLTc3LjEgNzIuNi03Ny4xIDMwLjcgMCA1Mi43IDExLjkgNjYgMzUuOXptMTQzIDBsLTMyLjggMTcuM2MtOS41LTE5LjgtMjUuNy0xOS45LTI3LjktMTkuOS0yMi4xIDAtMzMuMiAxNC42LTMzLjIgNDMuOCAwIDIzLjUgOS4yIDQzLjggMzMuMiA0My44IDE0LjQgMCAyNC42LTcuMSAzMC41LTIxLjNsMzEgMTUuNWMtMi4xIDMuOC0yMS40IDM5LTY1LjEgMzktMjIuNyAwLTc0LTkuOS03NC03NyAwLTU4LjcgNDMtNzcuMSA3Mi42LTc3LjEgMzAuNyAwIDUyLjYgMTEuOSA2NS42IDM1Ljl6TTI1NS42IDhDMTEyLjcgOCA4IDEyMy4xIDggMjU2LjEgOCAzOTQuNSAxMjEuNiA1MDQuMSAyNTUuNiA1MDQuMSAzODUuNSA1MDQuMSA1MDQgNDAzLjIgNTA0IDI1Ni4xIDUwNCAxMTguMiAzOTcuNCA4IDI1NS42IDh6bS45IDQ1MC44Yy0xMTIuNSAwLTIwMy43LTkzLTIwMy43LTIwMi44IDAtMTA1LjQgODUuNC0yMDMuMyAyMDMuNy0yMDMuMyAxMTIuNSAwIDIwMi44IDg5LjUgMjAyLjggMjAzLjMgMCAxMjEuNy05OS43IDIwMi44LTIwMi44IDIwMi44eiJdCiAgICB9OwogICAgZmFOb3Rpb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibm90aW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU3ZDkiLCAiTTk0LjkgMTAwLjJjMTQuOSAxMi4xIDIwLjUgMTEuMiA0OC42IDkuM0w0MDcuOCA5My42YzUuNiAwIC45LTUuNi0uOS02LjVMMzYyLjkgNTUuNGMtOC40LTYuNS0xOS42LTE0LTQxLjEtMTIuMUw2NS45IDYxLjljLTkuMyAuOS0xMS4yIDUuNi03LjUgOS4zbDM2LjQgMjguOXptMTUuOSA2MS42bDAgMjc4LjFjMCAxNC45IDcuNSAyMC41IDI0LjMgMTkuNmwyOTAuNS0xNi44YzE2LjgtLjkgMTguNy0xMS4yIDE4LjctMjMuM2wwLTI3Ni4yYzAtMTIuMS00LjctMTguNy0xNS0xNy43TDEyNS43IDE0My4xYy0xMS4yIC45LTE0LjkgNi41LTE0LjkgMTguN3ptMjg2LjcgMTQuOWMxLjkgOC40IDAgMTYuOC04LjQgMTcuOGwtMTQgMi44IDAgMjA1LjNjLTEyLjIgNi41LTIzLjQgMTAuMy0zMi43IDEwLjMtMTUgMC0xOC43LTQuNy0yOS45LTE4LjdsLTkxLjUtMTQzLjcgMCAxMzkgMjkgNi41czAgMTYuOC0yMy40IDE2LjhsLTY0LjQgMy43Yy0xLjktMy43IDAtMTMuMSA2LjUtMTQuOWwxNi44LTQuNyAwLTE4My44LTIzLjMtMS45Yy0xLjktOC40IDIuOC0yMC41IDE1LjktMjEuNWw2OS4xLTQuNyA5NS4zIDE0NS42IDAtMTI4LjgtMjQuMy0yLjhjLTEuOS0xMC4zIDUuNi0xNy43IDE0LjktMTguN2w2NC41LTMuOHpNNDQuNCAzNi43TDMxMC42IDE3LjFjMzIuNy0yLjggNDEuMS0uOSA2MS42IDE0bDg1IDU5LjdjMTQgMTAuMyAxOC43IDEzLjEgMTguNyAyNC4zbDAgMzI3LjZjMCAyMC41LTcuNSAzMi43LTMzLjYgMzQuNUwxMzMuMiA0OTUuOGMtMTkuNiAuOS0yOS0xLjktMzkuMi0xNC45TDMxLjQgMzk5LjdjLTExLjItMTQuOS0xNS45LTI2LjEtMTUuOS0zOS4ybDAtMjkxLjJjMC0xNi44IDcuNS0zMC44IDI4LjktMzIuN3oiXQogICAgfTsKICAgIGZhQ2hyb21lY2FzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjaHJvbWVjYXN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4MzgiLCAiTTQ0OCA2NEw2NC4yIDY0Yy0yMy42IDAtNDIuNyAxOS4xLTQyLjcgNDIuN2wwIDYzLjkgNDIuNyAwIDAtNjMuOSAzODMuOCAwIDAgMjk4LjYtMTQ5LjIgMCAwIDQyLjcgMTQ5LjQgMGMyMy42IDAgNDIuNy0xOS4xIDQyLjctNDIuN2wwLTI5OC42QzQ5MC45IDgzLjEgNDcxLjYgNjQgNDQ4IDY0ek0yMS41IDM4My42bDAgNjMuOSA2My45IDBjMC0zNS4zLTI4LjYtNjMuOS02My45LTYzLjl6bTAtODVsMCA0Mi40YzU4LjkgMCAxMDYuNiA0OC4xIDEwNi42IDEwN2w0Mi43IDBjLjEtODIuNC02Ni45LTE0OS4zLTE0OS4zLTE0OS40ek0yMTMuNiA0NDhsNDIuNyAwQzI1NS44IDMxOC41IDE1MSAyMTMuNyAyMS41IDIxMy40bDAgNDIuNGMxMDYtLjIgMTkyIDg2LjIgMTkyLjEgMTkyLjJ6Il0KICAgIH07CiAgICBmYVdpa2lwZWRpYVcgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2lraXBlZGlhLXciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjI2NiIsICJNNjQwIDUxLjJsLS4zIDEyLjJjLTI4LjEgLjgtNDUgMTUuOC01NS44IDQwLjMtMjUgNTcuOC0xMDMuMyAyNDAtMTU1LjMgMzU4LjZsLTEzLjYgMC04MS45LTE5My4xYy0zMi41IDYzLjYtNjguMyAxMzAtOTkuMiAxOTMuMS0uMyAuMy0xNSAwLTE1LS4zLTQ2LjktMTA5LjctOTYuMS0yMTguNi0xNDMuMS0zMjguNi0xMS40LTI2LjctNDkuNC03MC03NS42LTY5LjcgMC0zLjEtLjMtMTAtLjMtMTQuMmwxNjEuOSAwIDAgMTMuOWMtMTkuMiAxLjEtNTIuOCAxMy4zLTQzLjMgMzQuMiAyMS45IDQ5LjcgMTAzLjYgMjQwLjMgMTI1LjYgMjg4LjYgMTUtMjkuNyA1Ny44LTEwOS4yIDc1LjMtMTQyLjgtMTMuOS0yOC4zLTU4LjYtMTMzLjktNzIuOC0xNjAtOS43LTE3LjgtMzYuMS0xOS40LTU1LjgtMTkuN2wwLTEzLjkgMTQyLjUgLjMgMCAxMy4xYy0xOS40IC42LTM4LjEgNy44LTI5LjQgMjYuMSAxOC45IDQwIDMwLjYgNjguMSA0OC4xIDEwNC43IDUuNi0xMC44IDM0LjctNjkuNCA0OC4xLTEwMC44IDguOS0yMC42LTMuOS0yOC42LTM4LjYtMjkuNCAuMy0zLjYgMC0xMC4zIC4zLTEzLjYgNDQuNC0uMyAxMTEuMS0uMyAxMjMuMS0uNmwwIDEzLjZDNDYyLjQgNjQgNDM5LjEgNzYgNDI2LjggOTQuOUwzNjcuNiAyMTcuN2M2LjQgMTYuMSA2My4zIDE0Mi44IDY5LjIgMTU2LjdMNTU5LjIgOTEuOGMtOC42LTIzLjEtMzYuNC0yOC4xLTQ3LjItMjguM2wwLTEzLjkgMTI3LjggMS4xIC4yIC41eiJdCiAgICB9OwogICAgZmFTaXRyb3ggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2l0cm94IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU0NGEiLCAiTTIxMi40IDBsMCAwIDIzNS42IDAgMCAxMjgtMzg0IDBDNjQgNTcuNiAxNDEuOCAuNSAyMTIuNCAwem0yNC44IDE5MmwwIDBjNjkuOSAuNSAxNDYuNyA1Ny42IDE0Ni43IDEyOGwtMTczLjIgMCAwIDBDMTQwLjkgMzE5LjYgNjQgMjYyLjQgNjQgMTkybDE3My4zIDB6bS0xLjcgMzIwYzcwLjctLjUgMTQ4LjQtNTcuNiAxNDguNC0xMjhsLTM4NCAwIDAgMTI4IDIzNS42IDAgMCAweiJdCiAgICB9OwogICAgZmFTcXVhcmVHaXRsYWIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWdpdGxhYiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJnaXRsYWItc3F1YXJlIl0sICJlNWFlIiwgIk0wIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZ6bTMzNy41IDEyLjVsNDQuNiAxMTYuNCAuNCAxLjJjNS42IDE2LjggNy4yIDM1LjIgMi4zIDUyLjUtNSAxNy4yLTE1LjQgMzIuNC0yOS44IDQzLjNsLS4yIC4xLTY4LjQgNTEuMi01NC4xIDQwLjljLS41IC4yLTEuMSAuNS0xLjcgLjgtMiAxLTQuNCAyLTYuNyAyLTMgMC02LjgtMS44LTguMy0yLjhsLTU0LjItNDAuOS02Ny45LTUwLjktLjQtLjMtLjItLjFjLTE0LjMtMTAuOC0yNC44LTI2LTI5LjctNDMuM3MtNC4yLTM1LjcgMi4yLTUyLjVsLjUtMS4yIDQ0LjctMTE2LjRjLjktMi4zIDIuNS00LjMgNC41LTUuNiAxLjYtMSAzLjQtMS42IDUuMi0xLjggMS4zLS43IDIuMS0uNCAzLjQgLjEgLjYgLjIgMS4yIC41IDIgLjcgMSAuNCAxLjYgLjkgMi40IDEuNSAuNiAuNCAxLjIgMSAyLjEgMS41IDEuMiAxLjQgMi4yIDMgMi43IDQuOGwyOS4yIDkyLjIgMTIyLjkgMCAzMC4yLTkyLjJjLjUtMS44IDEuNC0zLjQgMi42LTQuOHMyLjgtMi40IDQuNS0zLjFjMS43LS42IDMuNi0uOSA1LjQtLjdzMy42IC44IDUuMiAxLjhjMiAxLjMgMy43IDMuMyA0LjYgNS42eiJdCiAgICB9OwogICAgZmFHaXRsYWJTcXVhcmUgPSBmYVNxdWFyZUdpdGxhYjsKICAgIGZhU2hvZWxhY2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2hvZWxhY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTYwYyIsICJNNDA1LjIgMzMxYzIuMi0xLjEgNC40LTIuMyA2LjUtMy43bDguMy00LjhjMS41LTEuMSA0LjQtMy40IDguNy02LjdsLjUtLjVjMy40LTMuNCA3LjItNSAxMS4zLTQuOSAxLjggMCAzLjkgLjUgNi40IDEuNWwzMS0yNy41Yy45LS43IDEuNy0xLjMgMi42LTEuOGwuMiAwYzMuMy0xLjkgNi0xLjggOC4yIC40IDMuOSAyLjEgNC4yIDUuNiAuOSAxMC42TDQ1Ny4yIDMyMmMuMiAuNSAuNCAxIC40IDEuNSAuNSAyLjIgLjMgNC40LS41IDYuNi0uNyAxLjUtMS44IDIuOS0zLjEgNC4yLTEuNCAxLjQtMi43IDIuOC00LjIgNC4yTDQzMSAzNTIuMmMtMS43IDEuMi0zLjQgMi4zLTUuMSAzLjMtMi4xIDEuMy00LjMgMi41LTYuNiAzLjYtMSAuNC0xLjkgLjktMi45IDEuMy01LjkgMi41LTExLjkgNC4yLTE4LjIgNS0yLjkgMjQuNS0xMS4zIDQ3LjEtMjUuMSA2Ny44LTE3LjUgMjUuNy00MS40IDQ1LjQtNzEuOCA1OC44LTMwLjIgMTMuNS02MyAyMC4yLTk4LjIgMjAuMi00OC42LS41LTg4LTExLjQtMTE4LjItMzIuOC0zNS4xLTI1LTUyLjYtNTcuOS01Mi42LTk5LjFsMC01LjZjMS4yLTI4LjEgOS41LTU0LjYgMjQuOC03OS44IDE1LjEtMjQuOSAzNy4xLTQxLjcgNjYuMS01MC41IDE0LjktNC40IDI5LjktNi42IDQ1LTYuNiAxNS41IDAgMzEuNiAyLjkgNDguMSA4LjZzMzUuMiAxNS41IDU1LjkgMjkuNWw1NC4xIDM2LjNjMTUuMSA5LjggMjguOCAxNi41IDQxLjIgMjAtMi42LTI1LjEtMTEuNy00Ni42LTI3LjMtNjQuNS0xNS43LTE4LjEtMzUuNi0zMS4zLTU5LjktMzkuN0wyNTcgMjIwYy0yMS40LTcuNS0zNy4zLTE0LjktNDcuNy0yMi4yLTI4LjItMTkuMS00My44LTQ1LjItNDctNzguNWwtLjUtOS44YzAtMzIuMSAxMy01OC45IDM5LTgwLjUgMjMtMTkuMyA1MC42LTI5IDgyLjUtMjkgMjQgMCA0NS42IDYuOSA2NC43IDIwLjggMTkuMiAxNCAzMC4xIDMzLjggMzIuNiA1OS40bC41IDEwYzAgMTguNi00LjggMzQuNS0xNC40IDQ3LjctOS44IDEzLjItMTguNSAxOS45LTI2IDE5LjktMS42LS4xLTMuMS0uMy00LjUtLjZsLTM0IDMyYy01LjUgMy05LjIgMi41LTExLjEtMS42LTEuOS0yLjItMS44LTQuOSAuNS04LjJsLjItLjJjLjUtLjcgMS4yLTEuNSAyLTIuNGwzMS42LTMwYy0uNC0xLjUtLjYtMy4xLS42LTQuOCAwLTQuMSAxLjYtNy42IDQuOS0xMC40IDEzLjgtMTIuNCAyMC44LTI2LjcgMjAuOC00Mi44IDAtMTYtNi4xLTI5LjUtMTguMi00MC40cy0yOC43LTE2LjUtNDkuNy0xNi44Yy0yNi4yIDAtNDcuOCA3LjktNjQuNyAyMy43UzE5Mi42IDg5LjkgMTkyLjYgMTEyYzAgMTcuOCA2LjkgMzMuOSAyMC42IDQ4LjMgMTMuNiAxNC4yIDM0LjYgMjUuNCA2MyAzMy41IDM5LjggMTEuNSA3MC4yIDMxIDkxLjMgNTguMyAxOC43IDI0LjIgMjkuMSA1MS4zIDMxLjMgODEuNCAyLjItLjcgNC4zLTEuNSA2LjUtMi42bC0uMSAuMXpNMjk0LjQgMTc4LjdjMCAxLjEgLjYgMS42IDEuOCAxLjYgLjEgMCA5LjctOC45IDI4LjgtMjYuNiAwLTIuNC01LjEgLjktMTUuMyAxMC0xMC4yIDkuMi0xNS4zIDE0LjItMTUuMyAxNC45bDAgLjF6bTggNi40YzAtMS0uNS0xLjUtMS41LTEuNS0xLjEgMC0yLjEgLjUtMi45IDEuNi0xLjktLjEtMy4zIC4xLTQuMiAuNy0uNCAuMi0uNSAuNS0uNSAuNyAwIC43IC41IDEuMyAxLjUgMS42bDMuMyAwYzIuOS0xLjEgNC40LTIuMiA0LjQtMy4zbC0uMSAuMnpNMzI1IDE2NS4yYzAtMi44LTEuNi0yLjgtNC45IDAtMS42IDEuNS0zLjYgMy41LTYgNi4yLS44IC42LTIuNiAyLjItNS4zIDQuOS0yLjggMi45LTQuMiA0LjctNC4yIDUuM2wuMiAxLjNjLjcgLjIgMS4yIC40IDEuNSAuNCAuMSAwIDMuMy0yLjkgOS41LTguN3M5LjMtOC45IDkuMy05LjNsLS4xLS4xem0xNTkuNyAxMjBsLTMwLjYgMjdjMS44IDEgMy4yIDIuNCA0IDQuMmwzMC4yLTI3Yy4yLTEuMiAuMS0yLjItLjUtMi45LS42LS41LTEuNi0uOS0zLjEtMS4zem0tMS42LS45bC0uNy0uNy0yNyAyMS45IDEuNiAyIDI2LTIzLjEgLjEtLjF6TTM2Ni45IDM2My45Yy04LTIuMS0xNS40LTQuNi0yMi4yLTcuNS0xNS4zLTYuMi0zNC4zLTE3LTU3LTMyLjRsLTM3LjQtMjUuM2MtMTUuOC0xMC4xLTMwLjItMTcuNi00My4yLTIyLjYtMTMuMS00LjktMjYtNy4zLTM4LjYtNy4zbC01LjUgMGMtMzIuMiAxLjctNTcuMiAxMy44LTc1IDM2LjItMTYuNiAyMC44LTI1IDQ1LjMtMjUgNzMuNiAwIDMxLjggMTIuOCA1Ni43IDM4LjIgNzQuNyAyNS40IDE4LjEgNjAuMiAyNy4xIDEwNC40IDI3LjEgMzQuNyAwIDY0LTYuMiA4Ny44LTE4LjYgMjMuNy0xMi40IDQyLjEtMjguOCA1NS4yLTQ5LjIgOS44LTE1LjUgMTUuOS0zMS44IDE4LjItNDguOGwuMSAuMXoiXQogICAgfTsKICAgIGZhU2VsbGNhc3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2VsbGNhc3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJkYSIsICJNMzUzLjUgMzJMOTQuOCAzMkM0Mi43IDMyIC4xIDc0LjYgLjEgMTI2LjZsMCAyNTguN0MuMSA0MzcuNCA0Mi43IDQ4MCA5NC44IDQ4MGwyNTguNyAwYzUyLjEgMCA5NC43LTQyLjYgOTQuNy05NC42bDAtMjU4LjhjMC01Mi00Mi42LTk0LjYtOTQuNy05NC42em0tNTAgMzE2LjRjLTI3LjkgNDguMi04OS45IDY0LjktMTM4LjIgMzcuMi0yMi45IDM5LjgtNTQuOSA4LjYtNDIuMy0xMy4ybDE1LjctMjcuMmM1LjktMTAuMyAxOS4yLTEzLjkgMjkuNS03LjkgMTguNiAxMC44LS4xLS4xIDE4LjUgMTAuNyAyNy42IDE1LjkgNjMuNCA2LjMgNzkuNC0yMS4zIDE1LjktMjcuNiA2LjMtNjMuNC0yMS4zLTc5LjQtMTcuOC0xMC4yLS42LS40LTE4LjYtMTAuNi0yNC42LTE0LjItMy40LTUxLjkgMjEuNi0zNy41IDE4LjYgMTAuOC0uMS0uMSAxOC41IDEwLjcgNDguNCAyOCA2NS4xIDkwLjMgMzcuMiAxMzguNXptMjEuOC0yMDguOGMtMTcgMjkuNS0xNi4zIDI4LjgtMTkgMzEuNS02LjUgNi41LTE2LjMgOC43LTI2LjUgMy42LTE4LjYtMTAuOCAuMSAuMS0xOC41LTEwLjctMjcuNi0xNS45LTYzLjQtNi4zLTc5LjQgMjEuM3MtNi4zIDYzLjQgMjEuMyA3OS40YzAgMCAxOC41IDEwLjYgMTguNiAxMC42IDI0LjYgMTQuMiAzLjQgNTEuOS0yMS42IDM3LjUtMTguNi0xMC44IC4xIC4xLTE4LjUtMTAuNy00OC4yLTI3LjgtNjQuOS05MC4xLTM3LjEtMTM4LjQgMjcuOS00OC4yIDg5LjktNjQuOSAxMzguMi0zNy4ybDQuOC04LjRjMTQuMy0yNC45IDUyLTMuMyAzNy43IDIxLjV6Il0KICAgIH07CiAgICBmYU1peCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtaXgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNjYiIsICJNMCA2NEwwIDQxMi45YzAgNTYuMiA4OCA1OC4xIDg4IDBsMC0yMzguNmM3LjktNTIuOSA4OC01MC40IDg4IDYuNWwwIDE3NS4zYzAgNTcuOSA5NiA1OCA5NiAwTDI3MiAyNDBjNS4zLTU0LjcgODgtNTIuNSA4OCA0LjNsMCAyMy44YzAgNTkuOSA4OCA1Ni42IDg4IDBMNDQ4IDY0IDAgNjR6Il0KICAgIH07CiAgICBmYUNjQXBwbGVQYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2MtYXBwbGUtcGF5IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0MTYiLCAiTTMwMi4yIDIxOC40YzAgMTcuMi0xMC41IDI3LjEtMjkgMjcuMWwtMjQuMyAwIDAtNTQuMiAyNC40IDBjMTguNCAwIDI4LjkgOS44IDI4LjkgMjcuMXpNMzQ5LjcgMjgxYzAgOC4zIDcuMiAxMy43IDE4LjUgMTMuNyAxNC40IDAgMjUuMi05LjEgMjUuMi0yMS45bDAtNy43LTIzLjUgMS41Yy0xMy4zIC45LTIwLjIgNS44LTIwLjIgMTQuNHpNNTc2IDc5bDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ3OWMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA3OUMwIDUyLjUgMjEuNSAzMSA0OCAzMWw0ODAgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTI3LjggMTk3LjJjOC40IC43IDE2LjgtNC4yIDIyLjEtMTAuNCA1LjItNi40IDguNi0xNSA3LjctMjMuNy03LjQgLjMtMTYuNiA0LjktMjEuOSAxMS4zLTQuOCA1LjUtOC45IDE0LjQtNy45IDIyLjh6bTYwLjYgNzQuNWMtLjItLjItMTkuNi03LjYtMTkuOC0zMC0uMi0xOC43IDE1LjMtMjcuNyAxNi0yOC4yLTguOC0xMy0yMi40LTE0LjQtMjcuMS0xNC43LTEyLjItLjctMjIuNiA2LjktMjguNCA2LjktNS45IDAtMTQuNy02LjYtMjQuMy02LjQtMTIuNSAuMi0yNC4yIDcuMy0zMC41IDE4LjYtMTMuMSAyMi42LTMuNCA1NiA5LjMgNzQuNCA2LjIgOS4xIDEzLjcgMTkuMSAyMy41IDE4LjcgOS4zLS40IDEzLTYgMjQuMi02IDExLjMgMCAxNC41IDYgMjQuMyA1LjkgMTAuMi0uMiAxNi41LTkuMSAyMi44LTE4LjIgNi45LTEwLjQgOS44LTIwLjQgMTAtMjF6bTEzNS40LTUzLjRjMC0yNi42LTE4LjUtNDQuOC00NC45LTQ0LjhsLTUxLjIgMCAwIDEzNi40IDIxLjIgMCAwLTQ2LjYgMjkuMyAwYzI2LjggMCA0NS42LTE4LjQgNDUuNi00NXptOTAgMjMuN2MwLTE5LjctMTUuOC0zMi40LTQwLTMyLjQtMjIuNSAwLTM5LjEgMTIuOS0zOS43IDMwLjVsMTkuMSAwYzEuNi04LjQgOS40LTEzLjkgMjAtMTMuOSAxMyAwIDIwLjIgNiAyMC4yIDE3LjJsMCA3LjUtMjYuNCAxLjZjLTI0LjYgMS41LTM3LjkgMTEuNi0zNy45IDI5LjEgMCAxNy43IDEzLjcgMjkuNCAzMy40IDI5LjQgMTMuMyAwIDI1LjYtNi43IDMxLjItMTcuNGwuNCAwIDAgMTYuNCAxOS42IDAgMC02OCAuMSAwek01MTYgMjEwLjlsLTIxLjUgMC0yNC45IDgwLjYtLjQgMC0yNC45LTgwLjYtMjIuMyAwIDM1LjkgOTkuMy0xLjkgNmMtMy4yIDEwLjItOC41IDE0LjItMTcuOSAxNC4yLTEuNyAwLTQuOS0uMi02LjItLjNsMCAxNi40YzEuMiAuNCA2LjUgLjUgOC4xIC41IDIwLjcgMCAzMC40LTcuOSAzOC45LTMxLjhMNTE2IDIxMC45eiJdCiAgICB9OwogICAgZmFCcmF2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJicmF2ZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjNjIiwgIk0xNDUuNiAwbDE1NyAwIDQ0LjcgNTAuOHMzOS4zLTEwLjkgNTcuOCA3LjYgMzMuOCAzNC45IDMzLjggMzQuOWwtMTIgMjkuNSAxNS4zIDQzLjdzLTQ0LjkgMTcwLjItNTAuMSAxOTFjLTEwLjQgNDAuOS0xNy40IDU2LjgtNDYuOSA3Ny41cy04Mi45IDU2LjgtOTEuNiA2Mi4yYy0xLjkgMS4yLTMuOSAyLjUtNS45IDMuOS03LjUgNS4xLTE1LjggMTAuOC0yMy41IDEwLjhzLTE2LjEtNS43LTIzLjUtMTAuOGMtMi0xLjQtNC0yLjgtNS45LTMuOS04LjctNS41LTYyLjEtNDEuNS05MS42LTYyLjJzLTM2LjUtMzYuNi00Ni45LTc3LjVjLTUuMy0yMC44LTUwLjEtMTkxLTUwLjEtMTkxTDIxLjUgMTIyLjggOS4zIDkzLjNzMTUuMy0xNi40IDMzLjgtMzQuOSA1Ny44LTcuNiA1Ny44LTcuNkwxNDUuNiAwem03OC41IDQwNy42YzMuNyAwIDguOS00LjcgMTMtOC40IC42LS41IDEuMi0xLjEgMS43LTEuNSA0LjItMy43IDQ3LjgtMzcuNSA1MS0zOS44czUuNC02LjUgMS45LTguN2MtMi44LTEuNy0xMC01LjUtMjAuMy0xMC44LTMtMS42LTYuMy0zLjItOS43LTUtMTUuNC04LTM0LjUtMTQuNy0zNy41LTE0LjdzLTIyLjEgNi44LTM3LjUgMTQuN2MtMy41IDEuOC02LjcgMy41LTkuNyA1LTEwLjMgNS4zLTE3LjYgOS4xLTIwLjMgMTAuOC0zLjYgMi4yLTEuNCA2LjQgMS45IDguN3M0Ni44IDM2LjEgNTEgMzkuOGMuNSAuNSAxLjEgMSAxLjcgMS41IDQuMSAzLjcgOS4zIDguNCAxMyA4LjRsLS4yIDB6bTAtMTY1LjdjNC43IDAgMTcuNi0zIDI2LjQtNWwyLS41YzcuOC0xLjggNy4zLTYuMyA2LjQtMTMtLjEtLjgtLjItMS42LS4zLTIuNC0uNi02LjEtNS44LTMzLjEtOS4xLTUwLjMtMS4xLTUuOC0yLTEwLjUtMi40LTEyLjktMS41LTguMS0uNi05LjQgLjctMTEuMyAuMi0uMyAuNS0uNyAuNy0xLjEgMS40LTIuMyAxNi02LjIgMjcuOS05LjUgMi41LS43IDQuOC0xLjMgNi45LTEuOSAxMC42LTMgMzIuNC0uNiA0NC4yIC42IDEuOCAuMiAzLjQgLjQgNC43IC41IDkuNiAuOSAxMC40IDIuMyA3LjIgMy44LTIuMyAxLjEtMTYuMiA2LjMtMjguNyAxMC45LTQuNyAxLjgtOS4yIDMuNS0xMi44IDQuOC0xLjUgLjUtMyAxLjEtNC41IDEuNy0xMi41IDQuNi0yNy4yIDEwLTI4LjkgMTkuNC0xLjUgOC4zIDUuMiAxOS45IDExLjMgMzAuMyAxLjYgMi44IDMuMiA1LjUgNC42IDguMSA2LjMgMTEuOSA2LjUgMTMuMyA2LjEgMTguMS0uNCAzLjktMTQuNSAxMi43LTIyLjQgMTcuNi0xLjggMS4xLTMuMyAyLjEtNC4yIDIuNy0uOCAuNS0yLjEgMS40LTMuOCAyLjQtOC42IDUuMi0yNi4zIDE2LTI2LjMgMjIuNSAwIDcuOCAyNC42IDI4LjEgMzIuNCAzMy4yczI4LjkgMTYuMSAzNy45IDE3LjggMjMtOC41IDMxLjItMjMuOGM3LjctMTQuNCAxLjctMjguNS0zLjItNDBsLS45LTIuMmMtNC41LTEwLjYgMS45LTE3IDYuMi0yMS4zIC41LS41IDEtMSAxLjQtMS40bDQzLTQ1LjdjMS4zLTEuMyAyLjUtMi42IDMuNy0zLjggNS44LTUuNyAxMC44LTEwLjUgMTAuOC0yMi44IDAtMTQuOS01Ny41LTg0LjUtNTcuNS04NC41cy00OC41IDkuMy01NS4xIDkuM2MtNS4yIDAtMTUuMy0zLjUtMjUuOC03LjEtMi43LS45LTUuNC0xLjktOC0yLjctMTMtNC4zLTIxLjgtNC40LTIxLjgtNC40cy04LjcgMC0yMS44IDQuNGMtMi43IC45LTUuNCAxLjgtOCAyLjctMTAuNSAzLjYtMjAuNiA3LjEtMjUuOCA3LjEtNi41IDAtNTUuMS05LjMtNTUuMS05LjNzLTU3LjUgNjkuNi01Ny41IDg0LjVjMCAxMi4zIDQuOSAxNy4xIDEwLjggMjIuOCAxLjIgMS4yIDIuNSAyLjQgMy43IDMuOGw0My4xIDQ1LjhjLjQgLjUgLjkgLjkgMS40IDEuNCA0LjMgNC4zIDEwLjYgMTAuNyA2LjIgMjEuM2wtLjkgMi4yYy00LjkgMTEuNS0xMSAyNS42LTMuMiA0MCA4LjIgMTUuMyAyMi4yIDI1LjUgMzEuMiAyMy44czMwLjEtMTIuNyAzNy45LTE3LjggMzIuNC0yNS40IDMyLjQtMzMuMmMwLTYuNS0xNy43LTE3LjMtMjYuMy0yMi41LTEuNy0xLTMuMS0xLjktMy44LTIuNC0uOS0uNi0yLjQtMS41LTQuMi0yLjctNy45LTQuOS0yMi0xMy43LTIyLjQtMTcuNi0uNC00LjgtLjMtNi4yIDYuMS0xOC4xIDEuMy0yLjUgMi45LTUuMyA0LjYtOC4xIDYtMTAuNCAxMi44LTIyIDExLjMtMzAuMy0xLjctOS40LTE2LjQtMTQuOC0yOC45LTE5LjQtMS42LS42LTMuMS0xLjEtNC41LTEuNy0zLjYtMS40LTguMS0zLjEtMTIuOC00LjhsLS4xIDBjLTEyLjUtNC43LTI2LjQtOS45LTI4LjctMTAuOS0zLjItMS41LTIuMy0yLjggNy4yLTMuOCAxLjMtLjEgMi45LS4zIDQuNy0uNSAxMS44LTEuMyAzMy42LTMuNiA0NC4yLS42IDIuMSAuNiA0LjQgMS4yIDYuOSAxLjkgMTEuOSAzLjIgMjYuNSA3LjIgMjcuOSA5LjUgLjIgLjQgLjUgLjcgLjcgMS4xIDEuMyAxLjkgMi4yIDMuMiAuNyAxMS4zLS40IDIuNC0xLjMgNy4xLTIuNCAxMi45LTMuMyAxNy4yLTguNSA0NC4yLTkuMSA1MC4zLS4xIC44LS4yIDEuNy0uMyAyLjQtLjggNi43LTEuNCAxMS4yIDYuNCAxM2wyIC41YzguOCAyIDIxLjggNSAyNi40IDVsMC0uMXoiXQogICAgfTsKICAgIGZhRXRzeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJldHN5IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYyZDciLCAiTTM4NCAzNDhjLTEuOCAxMC43LTEzLjggMTEwLTE1LjUgMTMyLTExNy45LTQuMy0yMTkuOS00LjctMzY4LjUgMGwwLTI1LjVjNDUuNS04LjkgNjAuNi04IDYxLTM1LjIgMS44LTcyLjMgMy41LTI0NC4xIDAtMzIyLTEtMjguNS0xMi4xLTI2LjgtNjEtMzZMMCAzNS44YzczLjkgMi40IDI1NS45IDguNiAzNjMtMy44LTMuNSAzOC4yLTcuOCAxMjYuNS03LjggMTI2LjVsLTIzLjIgMEMzMjAuOSAxMTUuNyAzMTMuMiA2OCAyNzcuMyA2OGwtMTM3IDBjLTEwLjIgMC0xMC43IDMuNS0xMC43IDkuOGwwIDE2My44YzU4IC41IDg4LjUtMi41IDg4LjUtMi41IDI5LjgtMSAyNy42LTguNSA0MC43LTY1LjNsMjUuOCAwYy00LjQgMTAxLjQtMy45IDYxLjgtMS44IDE2MC4zTDI1NyAzMzRjLTkuMi00MC4xLTkuMS02MS0zOS41LTYxLjUgMCAwLTIxLjUtMi04OC0ybDAgMTM5YzAgMjYgMTQuMyAzOC4zIDQ0LjMgMzguM2w4OS4zIDBjNjMuNiAwIDY2LjYtMjUgOTguNy05OS44bDIyLjIgMHoiXQogICAgfTsKICAgIGZhQnRjID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJ0YyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMTVhIiwgIk0zMTAuNCAyNDIuNmMyNy43LTE0LjIgNDUuNC0zOS40IDQxLjMtODEuMy01LjQtNTcuNC01Mi41LTc2LjYtMTE0LjgtODEuOWwwLTc5LjQtNDguNSAwIDAgNzcuMmMtMTIuNiAwLTI1LjUgLjMtMzguNCAuNmwwLTc3LjgtNDguNSAwIDAgNzkuNGMtMTcuOCAuNS0zOC42IC4zLTk3LjQgMGwwIDUxLjdjMzguMy0uNyA1OC40LTMuMSA2MyAyMS40bDAgMjE3LjRjLTIuOSAxOS41LTE4LjUgMTYuNy01My4zIDE2LjFMNCA0NDMuN2M4OC41IDAgOTcuNCAuMyA5Ny40IC4zbDAgNjggNDguNSAwIDAtNjcuMWMxMy4yIC4zIDI2LjIgLjMgMzguNCAuM2wwIDY2LjcgNDguNSAwIDAtNjhjODEuMy00LjQgMTM1LjYtMjQuOSAxNDIuOS0xMDEuNSA1LjctNjEuNC0yMy4zLTg4LjktNjkuMy05OS45ek0xNTAuOCAxMzQuNmMyNy40IDAgMTEzLjEtOC41IDExMy4xIDQ4LjUgMCA1NC41LTg1LjcgNDguMi0xMTMuMSA0OC4ybDAtOTYuN3ptMCAyNTEuOGwwLTEwNi41YzMyLjggMCAxMzMuMS05LjEgMTMzLjEgNTMuMyAwIDYwLjItMTAwLjQgNTMuMy0xMzMuMSA1My4zeiJdCiAgICB9OwogICAgZmFBZG4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYWRuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxNzAiLCAiTTI1NiAxNjcuNWw2NC45IDk4LjgtMTI5LjggMCA2NC45LTk4Ljh6TTggMjU2YTI0OCAyNDggMCAxIDEgNDk2IDAgMjQ4IDI0OCAwIDEgMSAtNDk2IDB6bTM5Ni4yIDgyLjdsLTE0OC4yLTIyMy4yLTE0OC4yIDIyMy4yIDMwLjQgMCAzMy42LTUxLjcgMTY4LjYgMCAzMy42IDUxLjcgMzAuMiAweiJdCiAgICB9OwogICAgZmFTcXVhcmVYVHdpdHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUteC10d2l0dGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2MWEiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTI5Ny4xIDg0bC0xMDMuOCAxMTguNiAxMjIuMSAxNjEuNC05NS42IDAtNzQuOC05Ny45LTg1LjcgOTcuOS00Ny41IDAgMTExLTEyNi45LTExNy4xLTE1My4xIDk4IDAgNjcuNyA4OS41IDc4LjItODkuNSA0Ny41IDB6TTMyMy4zIDM2Ny42bC0xNjkuOS0yMjQuNy0yOC4zIDAgMTcxLjggMjI0LjcgMjYuNCAweiJdCiAgICB9OwogICAgZmFTcXVhcmVGb250QXdlc29tZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZm9udC1hd2Vzb21lIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU1YWQiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTkwIDEyMmMwIDkuMy00LjggMTcuNC0xMi4xIDIybDE4OC45IDBjNy4zIDAgMTMuMiA1LjkgMTMuMiAxMy4yIDAgMS44LS40IDMuNy0xLjEgNS40TDMxMiAyNjQgMzQyLjkgMzMzLjRjLjcgMS43IDEuMSAzLjUgMS4xIDUuNCAwIDcuMy01LjkgMTMuMi0xMy4yIDEzLjJsLTE4Ni44IDAgMCAzMi0zMiAwIDAtMjA5LjVjLTYuMS00LjgtMTAtMTIuMi0xMC0yMC41IDAtMTQuNCAxMS42LTI2IDI2LTI2czI2IDExLjYgMjYgMjZ6Il0KICAgIH07CiAgICBmYUZvcnVtYmVlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZvcnVtYmVlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyMTEiLCAiTTUuOCAzMDkuN0MyIDI5Mi43IDAgMjc1LjUgMCAyNTguMyAwIDEzNSA5OS44IDM1IDIyMy4xIDM1IDIzOS43IDM1IDI1Ni40IDM3IDI3Mi40IDQwLjUgMTQ5IDg3LjUgNTEuOSAxODYgNS44IDMwOS43ek0zOTguNyAxMjAuNWMtMTMuNy0xNy41LTI5LjctMzIuNy00Ny44LTQ1LjMtMTQ5LjYgNDQuMy0yNjYuMyAxNjIuMS0zMDkuNyAzMTIgMTIuNSAxOC4xIDI4IDM1LjYgNDUuMiA0OSA0My4xLTE1MS4zIDE2MS4yLTI3MS43IDMxMi4zLTMxNS43em0xNS44IDI1Mi43YzE1LjItMjUuMSAyNS40LTUzLjcgMjkuNS04Mi44LTc5LjQgNDIuOS0xNDUgMTEwLjYtMTg3LjYgMTkwLjMgMzAtNC40IDU4LjktMTUuMyA4NC42LTMxLjMgMzUgMTMuMSA3MC45IDI0LjMgMTA3IDMzLjYtOS4zLTM2LjUtMjAuNC03NC41LTMzLjUtMTA5Ljh6bTI5LjctMTQ1LjVjLTIuNi0xOS41LTcuOS0zOC43LTE1LjgtNTYuOC0xMzcuOSA0NS44LTI0Ni40IDE1Ni42LTI5MS4zIDI5NS4xIDE4LjEgNy42IDM3IDEyLjUgNTYuNiAxNS4yIDQ2LjMtMTE0LjEgMTM2LjgtMjA2LjggMjUwLjUtMjUzLjV6Il0KICAgIH07CiAgICBmYTQyR3JvdXAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiNDItZ3JvdXAiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiaW5ub3NvZnQiXSwgImUwODAiLCAiTTMyMCA5NmwwIDMyMGMyMSAwIDQxLjgtNC4xIDYxLjItMTIuMnMzNy0xOS44IDUxLjktMzQuNyAyNi42LTMyLjUgMzQuNy01MS45IDEyLjItNDAuMiAxMi4yLTYxLjItNC4xLTQxLjgtMTIuMi02MS4yLTE5LjgtMzcuMS0zNC43LTUxLjktMzIuNS0yNi42LTUxLjktMzQuNy00MC4yLTEyLjItNjEuMi0xMi4yek0wIDI1NkwxNjAgNDE2IDMyMCAyNTYgMTYwIDk2IDAgMjU2em00ODAgMGMwIDIxIDQuMSA0MS44IDEyLjIgNjEuMnMxOS44IDM3IDM0LjcgNTEuOSAzMi41IDI2LjYgNTEuOSAzNC43IDQwLjIgMTIuMiA2MS4yIDEyLjJsMC0zMjBjLTQyLjQgMC04My4xIDE2LjktMTEzLjEgNDYuOVM0ODAgMjEzLjYgNDgwIDI1NnoiXQogICAgfTsKICAgIGZhSW5ub3NvZnQgPSBmYTQyR3JvdXA7CiAgICBmYVN0dW1ibGV1cG9uQ2lyY2xlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0dW1ibGV1cG9uLWNpcmNsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWEzIiwgIk0yNjQgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6bTAgMTc3LjVjLTkuOCAwLTE3LjggOC0xNy44IDE3LjhsMCAxMDYuOWMwIDQwLjktMzMuOSA3My45LTc0LjkgNzMuOS00MS40IDAtNzQuOS0zMy41LTc0LjktNzQuOWwwLTQ2LjUgNTcuMyAwIDAgNDUuOGMwIDEwIDggMTcuOCAxNy44IDE3LjhzMTcuOC03LjkgMTcuOC0xNy44bDAtMTA4LjRjMC00MCAzNC4yLTcyLjEgNzQuNy03Mi4xIDQwLjcgMCA3NC43IDMyLjMgNzQuNyA3Mi42bDAgMjMuNy0zNC4xIDEwLjEtMjIuOS0xMC43IDAtMjAuNmMuMS05LjYtNy45LTE3LjYtMTcuNy0xNy42ek00MzEuNiAzMDkuMWMwIDQxLjQtMzMuNSA3NC45LTc0LjkgNzQuOS00MS4yIDAtNzQuOS0zMy4yLTc0LjktNzQuMmwwLTQ2LjggMjIuOSAxMC43IDM0LjEtMTAuMSAwIDQ3LjFjMCA5LjggOCAxNy42IDE3LjggMTcuNnMxNy44LTcuOSAxNy44LTE3LjZsMC00OCA1Ny4zIDBjLS4xIDQ1LjktLjEgNDYuNC0uMSA0Ni40eiJdCiAgICB9OwogICAgZmFTeW1mb255ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN5bWZvbnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjgzZCIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek0zODkuNyAxNTEuNWMtMTEuNSAuNC0xOS40LTYuNC0xOS44LTE2LjktLjMtOS4yIDYuNy0xMy40IDYuNS0xOC45LS4yLTYuNS0xMC4yLTYuOC0xMi45LTYuNy0zOS44IDEuMy00OC42IDU3LTU4LjkgMTEzLjggMjEuNCAzLjIgMzYuNi0uNyA0NS4xLTYuMiAxMi03LjctMy4zLTE1LjctMS40LTI0LjYgNC0xOC4yIDMyLjYtMTkgMzIgNS4zLS40IDE3LjktMjUuOSA0MS44LTc3LjYgMzUuNy0xMC44IDU5LjUtMTguNCAxMTUtNTguMiAxNjEuNy0yOSAzNC41LTU4LjQgMzkuOC03MS42IDQwLjMtMjQuNiAuOS00MS0xMi4zLTQxLjYtMjkuOC0uNi0xNyAxNC40LTI2LjMgMjQuMy0yNi42IDIxLjktLjggMzAuMSAyNS43IDE0LjkgMzQtMTIuMSA5LjcgLjEgMTIuNiAyLjEgMTIuNiAxMC40LS40IDE3LjMtNS41IDIyLjItOSAyNC0yMCAzMy4yLTU0LjkgNDUuNC0xMTguMyA4LjItNDkuNyAxNy03OCAxOC4yLTgyLTE2LjktMTIuNy0yNy4xLTI4LjYtNDkuOC0zNC43LTE1LjYtNC4yLTI1LjEtLjYtMzEuOCA3LjgtNy45IDEwLTUuMyAyMyAyLjQgMzAuN2wxMi42IDE0YzE1LjUgMTcuOSAyNCAzMS45IDIwLjggNTAuNi01LjEgMjkuOS00MC43IDUyLjktODIuOSAzOS45LTM2LTExLjEtNDIuNy0zNi42LTM4LjQtNTAuNiA3LjUtMjQuMiA0Mi40LTExLjcgMzQuNiAxMy42LTIuOCA4LjYtNC45IDguNy02LjMgMTMuMS00LjYgMTQuOCA0MS44IDI4LjQgNTEtMS40IDQuNS0xNC41LTUuMy0yMS43LTIyLjItMzkuOS0yOC41LTMxLjctMTYtNjUuNSAyLjktNzkuNyA1Mi44LTM5LjQgMTAwLjUgMTcuNSAxMTAuNiAyNS44IDM3LjItMTA5IDEwMC41LTEwNS41IDEwMi40LTEwNS41IDI1LjItLjggNDQuMiAxMC42IDQ0LjggMjguNiAuMiA3LjctNC4yIDIyLjYtMTkuNSAyMy4xeiJdCiAgICB9OwogICAgZmFTYWxlc2ZvcmNlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNhbGVzZm9yY2UiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjgzYiIsICJNMjQ5LjQgMjQ1LjZsLTI2LjQgMGMuNy01LjIgMy4zLTE0LjEgMTMuNi0xNC4xIDYuOCAwIDEyIDMuOCAxMi43IDE0LjF6TTM4NiAyMzEuOGMtLjUgMC0xNC4xLTEuOC0xNC4xIDIwczEzLjYgMjAgMTQuMSAyMGMxMyAwIDE0LjEtMTMuNSAxNC4xLTIwIDAtMjEuOC0xMy43LTIwLTE0LjEtMjB6TTE0Mi44IDI1NS41Yy0xLjEgLjktMiAyLTIuNSAzLjJzLS44IDIuNy0uNyA0YzAgNC44IDIuMSA2LjEgMy4zIDcgNC43IDMuNyAxNS4xIDIuMSAyMC45IDFsMC0xNi45Yy01LjMtMS4xLTE2LjctMi0yMC45IDEuNnpNNjQwLjUgMjMyYzAgODcuNi04MCAxNTQuNC0xNjUuNCAxMzYuNC0xOC40IDMzLTcwLjcgNzAuOC0xMzIuMiA0MS42LTQxLjIgOTYtMTc3LjkgOTIuMi0yMTMuOC01LjItMTE5LjcgMjMuOS0xNzguOC0xMzguNC03NS4zLTE5OS4zLTM0LjgtNzkuNCAyMi42LTE3My42IDExNC4zLTE3My42IDE5LjEgMCAzNy45IDQuNCA1NSAxMi45czMyIDIwLjcgNDMuNiAzNS44YzIwLjctMjEuNCA0OS40LTM0LjggODEuMS0zNC44IDQyLjMgMCA3OSAyMy41IDk4LjggNTguNiA5Mi44LTQwLjcgMTkzLjggMjguMiAxOTMuOCAxMjcuNXpNMTIwLjkgMjYzLjhjMC0xMS44LTExLjctMTUuMi0xNy45LTE3LjItNS4zLTIuMS0xMy40LTMuNS0xMy40LTguOSAwLTkuNSAxNy02LjcgMjUuMi0yLjEgMCAwIDEuMiAuNyAxLjYtLjUgLjItLjcgMi40LTYuNiAyLjYtNy4zIC4xLS4zIC4xLS42LS4xLS44cy0uNC0uNS0uNi0uNmMtMTIuMy03LjYtNDAuNy04LjUtNDAuNyAxMi43IDAgMTIuNSAxMS41IDE1LjQgMTcuOSAxNy4yIDQuNyAxLjYgMTMuMiAzIDEzLjIgOC43IDAgNC0zLjUgNy4xLTkuMiA3LjEtNi45IDAtMTMuNS0yLjItMTktNi4zLS41LS4yLTEuNC0uNy0xLjYgLjdsLTIuNCA3LjVjLS41IC45IC4yIDEuMiAuMiAxLjQgMS44IDEuNCAxMC4zIDYuNiAyMi44IDYuNiAxMy4yIDAgMjEuNC03LjEgMjEuNC0xOC4xbDAgMHptMzItNDIuNmMtMTAuMSAwLTE4LjcgMy4yLTIxLjQgNS4yLS4xIC4xLS4yIC4yLS4zIC4zcy0uMSAuMi0uMSAuNCAwIC4zIDAgLjQgLjEgLjMgLjIgLjRsMi42IDcuMWMuMSAuMiAuMiAuNSAuNSAuNnMuNSAuMiAuNyAuMWMuNiAwIDYuOC00IDE2LjktNCA0IDAgNy4xIC43IDkuMiAyLjQgMy42IDIuOCAzLjEgOC4zIDMuMSAxMC42LTQuOC0uMy0xOS4xLTMuNC0yOS40IDMuOC0yLjMgMS42LTQuMyAzLjgtNS41IDYuM3MtMS45IDUuNC0xLjggOC4yYzAgNS45IDEuNSAxMC40IDYuNiAxNC40IDEyLjIgOC4yIDM2LjMgMiAzOC4xIDEuNCAxLjYtLjMgMy41LS43IDMuNS0xLjlsMC0zMy45YzAtNC42IC4zLTIxLjYtMjIuOC0yMS42bDAgLjF6bTQ2LjYtMjFjMC0uMiAwLS4zLS4xLS41cy0uMS0uMy0uMy0uNC0uMi0uMi0uNC0uMy0uMy0uMS0uNS0uMWwtOS44IDBjLS4yIDAtLjMgMC0uNSAuMXMtLjMgLjEtLjQgLjMtLjIgLjItLjMgLjQtLjEgLjMtLjEgLjVsMCA3OWMwIC4yIDAgLjMgLjEgLjVzLjEgLjMgLjMgLjQgLjIgLjIgLjQgLjMgLjMgLjEgLjUgLjFsOS45IDBjLjIgMCAuMyAwIC41LS4xcy4zLS4xIC40LS4zIC4yLS4yIC4zLS40IC4xLS4zIC4xLS41bC0uMS03OXptNTUuNyAyOC45Yy0yLjEtMi4zLTYuOC03LjUtMTcuNi03LjUtMy41IDAtMTQuMiAuMi0yMC43IDguOS02LjQgNy42LTYuNiAxOC4xLTYuNiAyMS40IDAgMy4xIC4yIDE0LjMgNy4xIDIxLjIgMi42IDIuOSA5LjEgOC4yIDIyLjggOC4yIDEwLjggMCAxNi41LTIuMyAxOC42LTMuOCAuNS0uMiAuNy0uNyAuMi0xLjlsLTIuMy02LjhjLS4xLS4zLS4zLS41LS42LS42cy0uNS0uMi0uOC0uMWMtMi42IC45LTYuMyAyLjgtMTUuMyAyLjgtMTcuNCAwLTE2LjgtMTQuNy0xNi45LTE2LjdsMzcuMiAwYy4zIDAgLjUtLjEgLjctLjNzLjQtLjQgLjQtLjdjLS4zIDAgMi4xLTE0LjctNi4xLTI0LjJsMCAwem0zNi43IDUyLjdjMTMuMiAwIDIxLjQtNy4xIDIxLjQtMTguMSAwLTExLjgtMTEuNy0xNS4yLTE3LjktMTcuMi00LjEtMS43LTEzLjQtMy40LTEzLjQtOC45IDAtMy44IDMuMy02LjQgOC41LTYuNCA1LjggLjEgMTEuNSAxLjYgMTYuNyA0LjIgMCAwIDEuMiAuNyAxLjYtLjUgLjItLjcgMi40LTYuNiAyLjYtNy4zIC4xLS4zIC4xLS42LS4xLS44cy0uNC0uNS0uNi0uNmMtNy45LTQuOS0xNi43LTQuOS0yMC4yLTQuOS0xMiAwLTIwLjUgNy4zLTIwLjUgMTcuNiAwIDEyLjUgMTEuNSAxNS40IDE3LjkgMTcuMiA2LjEgMiAxMy4yIDMuMyAxMy4yIDguNyAwIDQtMy41IDcuMS05LjIgNy4xLTYuOSAwLTEzLjUtMi4yLTE5LTYuNC0uMS0uMS0uMy0uMi0uNS0uMnMtLjQgMC0uNSAuMS0uMyAuMi0uNCAuMy0uMiAuMy0uMiAuNWwtMi4zIDcuNWMtLjUgLjkgLjIgMS4yIC4yIDEuNCAxLjcgMS40IDEwLjMgNi42IDIyLjggNi42bDAgMHpNMzU3LjYgMjI0YzAtLjctLjItMS4yLTEuMi0xLjJsLTExLjggMGMwLS4xIC45LTguOSA0LjUtMTIuNSA0LjItNC4yIDExLjgtMS42IDEyLTEuNiAxLjIgLjUgMS40IDAgMS42LS41bDIuOC03LjhjLjctLjkgMC0xLjItLjItMS40LTUuMS0yLTE3LjQtMi45LTI0LjUgNC4yLTUuNSA1LjUtNyAxMy45LTggMTkuNWwtOC41IDBjLS4zIDAtLjYgLjItLjggLjRzLS4zIC41LS40IC44bC0xLjQgNy44YzAgLjcgLjIgMS4yIDEuMiAxLjJsOC4yIDBjLTguNSA0Ny45LTguNyA1MC4yLTEwLjMgNTUuNS0xLjEgMy42LTMuMyA2LjktNS45IDcuOC0uMSAwLTMuOSAxLjctOS42LS4yIDAgMC0uOS0uNS0xLjQgLjctLjIgLjctMi42IDYuOC0yLjggNy41czAgMS40IC41IDEuNGM1LjEgMiAxMyAxLjggMTcuOSAwIDYuMy0yLjMgOS43LTcuOSAxMS41LTEyLjkgMi44LTcuNyAyLjgtOS44IDExLjgtNTkuN2wxMi4yIDBjLjMgMCAuNi0uMiAuOC0uNHMuMy0uNSAuNC0uOGwxLjQtNy44ek00MTEgMjQwYy0uNi0xLjctNS4xLTE4LjEtMjUuMi0xOC4xLTE1LjIgMC0yMyAxMC0yNS4yIDE4LjEtMSAzLTMuMiAxNCAwIDIzLjUgLjEgLjMgNC40IDE4LjEgMjUuMiAxOC4xIDE1IDAgMjIuOS05LjYgMjUuMi0xOC4xIDMuMi05LjYgMS0yMC41IDAtMjMuNXptNDUuNC0xNi43Yy01LTEuNy0xNi42LTEuOS0yMi4xIDUuNGwwLTQuNWMwLS4yIDAtLjMtLjEtLjVzLS4xLS4zLS4zLS40LS4yLS4yLS40LS4zLS4zLS4xLS41LS4xbC05LjQgMGMtLjIgMC0uMyAwLS41IC4xcy0uMyAuMS0uNCAuMy0uMiAuMi0uMyAuNC0uMSAuMy0uMSAuNWwwIDU1LjNjMCAuMiAwIC4zIC4xIC41cy4xIC4zIC4zIC40IC4yIC4yIC40IC4zIC4zIC4xIC41IC4xbDkuNiAwYy4yIDAgLjMgMCAuNS0uMXMuMy0uMSAuNC0uMyAuMi0uMiAuMy0uNCAuMS0uMyAuMS0uNWwwLTI3LjhjMC0yLjkgLjEtMTEuNCA0LjUtMTUuMSA0LjktNC45IDEyLTMuNCAxMy40LTMuMSAuMyAwIC42LS4xIC44LS4zcy40LS40IC42LS43YzEuMi0yLjYgMi4yLTUuMyAzLjEtOCAuMS0uMyAuMS0uNSAwLS44cy0uMy0uNS0uNS0uNmwwIDB6bTQ2LjggNTQuMWwtMi4xLTcuM2MtLjUtMS4yLTEuNC0uNy0xLjQtLjctNC4yIDEuOC0xMC4xIDEuOS0xMS4zIDEuOS00LjYgMC0xNy4yLTEuMS0xNy4yLTE5LjggMC02LjIgMS44LTE5LjggMTYuNS0xOS44IDMuOS0uMSA3LjggLjUgMTEuNSAxLjYgMCAwIC45IC41IDEuMi0uNyAuOS0yLjYgMS42LTQuNSAyLjYtNy41IC4yLS45LS41LTEuMi0uNy0xLjItMTEuNi0zLjktMjIuMy0yLjUtMjcuOCAwLTEuNiAuNy0xNi4yIDYuNS0xNi4yIDI3LjUgMCAyLjktLjYgMzAuMSAyOC45IDMwLjEgNS4zIDAgMTAuNi0xIDE1LjUtMi44IC4yLS4yIC40LS40IC41LS42cy4xLS41IDAtLjhsMCAwem01My45LTM5LjVjLS44LTMtNS40LTE2LjItMjIuMy0xNi4yLTE2IDAtMjMuNSAxMC4xLTI1LjYgMTguNi0xLjIgMy44LTEuNyA3LjgtMS43IDExLjggMCAyNS45IDE4LjggMjkuNCAyOS45IDI5LjQgMTAuOCAwIDE2LjUtMi4zIDE4LjYtMy44IC41LS4yIC43LS43IC4yLTEuOWwtMi40LTYuOGMtLjEtLjMtLjMtLjUtLjYtLjZzLS42LS4yLS44LS4xYy0yLjYgLjktNi4zIDIuOC0xNS4zIDIuOC0xNy40IDAtMTYuOS0xNC43LTE2LjktMTYuN2wzNy4yIDBjLjMgMCAuNS0uMSAuNy0uM3MuNC0uNCAuNC0uN2MtLjIgMCAuOS03LjEtMS40LTE1LjVsMCAwem0tMjMuMy02LjRjLTEwLjMgMC0xMyA5LTEzLjYgMTQuMWwyNi40IDBjLS45LTExLjktNy42LTE0LjEtMTIuNy0xNC4xbDAgMHoiXQogICAgfTsKICAgIGZhU291cmNldHJlZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzb3VyY2V0cmVlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3ZDMiLCAiTTQyNy40IDIwM2MwLTExMi4xLTkwLjktMjAzLTIwMy0yMDMtMTEyLjEtLjItMjAzIDkwLjYtMjAzLjIgMjAyLjYtLjEgNDMgMTMuNSA4NC44IDM4LjcgMTE5LjZzNjAuOSA2MC42IDEwMS44IDczLjhsMCAxMDEuN2MwIDMuOCAxLjUgNy40IDQuMiAxMC4xczYuMyA0LjIgMTAuMSA0LjJsOTYuNCAwYzMuOCAwIDcuNC0xLjUgMTAuMS00LjJzNC4yLTYuMyA0LjItMTAuMWwwLTEwMS42YzQwLjgtMTMuMiA3Ni41LTM5IDEwMS43LTczLjdzMzguOS03Ni41IDM5LTExOS40em0tMjcxLjYgMGMwLTkwLjggMTM3LjMtOTAuOCAxMzcuMyAwLS4xIDg5LjktMTM3LjMgOTEtMTM3LjMgMHoiXQogICAgfTsKICAgIGZhTGlua2VkaW5JbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsaW5rZWRpbi1pbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMGUxIiwgIk0xMDAuMyA0NDhsLTkyLjkgMCAwLTI5OS4xIDkyLjkgMCAwIDI5OS4xek01My44IDEwOC4xQzI0LjEgMTA4LjEgMCA4My41IDAgNTMuOCAwIDM5LjUgNS43IDI1LjkgMTUuOCAxNS44czIzLjgtMTUuOCAzOC0xNS44IDI3LjkgNS43IDM4IDE1LjggMTUuOCAyMy44IDE1LjggMzhjMCAyOS43LTI0LjEgNTQuMy01My44IDU0LjN6TTQ0Ny45IDQ0OGwtOTIuNyAwIDAtMTQ1LjZjMC0zNC43LS43LTc5LjItNDguMy03OS4yLTQ4LjMgMC01NS43IDM3LjctNTUuNyA3Ni43bDAgMTQ4LjEtOTIuOCAwIDAtMjk5LjEgODkuMSAwIDAgNDAuOCAxLjMgMGMxMi40LTIzLjUgNDIuNy00OC4zIDg3LjktNDguMyA5NCAwIDExMS4zIDYxLjkgMTExLjMgMTQyLjNsMCAxNjQuMy0uMSAweiJdCiAgICB9OwogICAgZmFIdG1sNSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJodG1sNSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMTNiIiwgIk0wIDMyTDM0LjkgNDI3LjggMTkxLjUgNDgwIDM0OS4xIDQyNy44IDM4NCAzMiAwIDMyek0zMDguMiAxNTkuOWwtMTgzLjggMCA0LjEgNDkuNCAxNzUuNiAwLTEzLjYgMTQ4LjQtOTcuOSAyNyAwIC4zLTEuMSAwLTk4LjctMjcuMy02LTc1LjggNDcuNyAwIDMuNSAzOC4xIDUzLjUgMTQuNSA1My43LTE0LjUgNi02Mi4yLTE2Ni45IDAtMTIuOC0xNDUuNiAyNDEuMSAwLTQuNCA0Ny43eiJdCiAgICB9OwogICAgZmFSdXN0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJ1c3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA3YSIsICJNNTA4LjUgMjQ5LjhsLTIxLjgtMTMuNWMtLjItMi0uMy0zLjktLjUtNS45bDE4LjctMTcuNWMuOS0uOSAxLjYtMS45IDItMy4xcy41LTIuNSAuMi0zLjctLjgtMi40LTEuNi0zLjMtMS44LTEuNy0zLTIuMWwtMjQtOWMtLjUtMS45LTEuMS0zLjgtMS43LTUuNmwxNS0yMC44Yy43LTEgMS4yLTIuMiAxLjMtMy40czAtMi41LS41LTMuNy0xLjItMi4yLTIuMi0yLjktMi4xLTEuMy0zLjQtMS41bC0yNS40LTQuMmMtLjktMS43LTEuOC0zLjQtMi43LTUuMmwxMC43LTIzLjRjLjUtMS4xIC43LTIuNCAuNi0zLjZzLS41LTIuNC0xLjItMy41LTEuNi0xLjktMi44LTIuNS0yLjQtLjgtMy42LS44bC0yNS44IC45Yy0xLjItMS41LTIuNC0yLjktMy42LTQuNEw0MzkgODEuOGMuMy0xLjIgLjMtMi41LS4xLTMuN3MtMS0yLjMtMS45LTMuMi0yLTEuNS0zLjItMS45LTIuNS0uNC0zLjctLjFMNDA1IDc4LjljLTEuNC0xLjItMi45LTIuNC00LjQtMy42bC45LTI1LjhjLjEtMS4zLS4yLTIuNS0uOC0zLjZzLTEuNC0yLjEtMi41LTIuOC0yLjItMS4xLTMuNS0xLjItMi41IC4xLTMuNyAuNkwzNjcuNyA1My4yYy0xLjctLjktMy40LTEuOC01LjEtMi43bC00LjItMjUuNGMtLjItMS4yLS43LTIuNC0xLjUtMy40cy0xLjgtMS43LTIuOS0yLjItMi40LS43LTMuNy0uNS0yLjQgLjYtMy40IDEuM0wzMjYgMzUuM2MtMS45LS42LTMuOC0xLjEtNS42LTEuN2wtOS0yNGMtLjQtMS4yLTEuMi0yLjItMi4xLTNzLTIuMS0xLjQtMy4zLTEuNi0yLjUtLjItMy43IC4yLTIuMyAxLjEtMy4xIDJMMjgxLjYgMjUuOWMtMi0uMi0zLjktLjQtNS45LS41TDI2Mi4zIDMuNWMtLjctMS4xLTEuNi0xLjktMi43LTIuNnMtMi4zLS45LTMuNi0uOS0yLjUgLjMtMy42IC45LTIgMS41LTIuNyAyLjZMMjM2LjIgMjUuM2MtMiAuMi0zLjkgLjMtNS45IC42TDIxMi45IDcuMWMtLjktLjktMS45LTEuNi0zLjEtMnMtMi41LS41LTMuNy0uMi0yLjQgLjgtMy4zIDEuNi0xLjcgMS44LTIuMSAzbC05IDI0Yy0xLjkgLjYtMy44IDEuMS01LjcgMS43bC0yMC44LTE1Yy0xLS43LTIuMi0xLjItMy40LTEuM3MtMi41IDAtMy43IC41LTIuMiAxLjItMi45IDIuMi0xLjMgMi4xLTEuNSAzLjRsLTQuMiAyNS40Yy0xLjcgLjktMy40IDEuOC01LjIgMi43TDEyMC45IDQyLjZjLTEuMS0uNS0yLjQtLjctMy43LS42cy0yLjUgLjUtMy41IDEuMi0xLjkgMS43LTIuNSAyLjgtLjggMi40LS44IDMuNmwuOSAyNS44Yy0xLjUgMS4yLTMgMi40LTQuNCAzLjZMODEuOCA3M2MtMS4yLS4zLTIuNS0uMy0zLjcgLjFzLTIuMyAxLTMuMiAxLjktMS41IDItMS45IDMuMi0uNCAyLjUtLjEgMy43TDc4LjkgMTA3Yy0xLjIgMS40LTIuNCAyLjktMy42IDQuNGwtMjUuOC0uOWMtMS4zIDAtMi41IC4yLTMuNiAuOHMtMi4xIDEuNC0yLjggMi40LTEuMSAyLjItMS4yIDMuNSAuMSAyLjUgLjYgMy42bDEwLjcgMjMuNGMtLjkgMS43LTEuOCAzLjQtMi43IDUuMmwtMjUuNCA0LjFjLTEuMiAuMi0yLjQgLjctMy40IDEuNXMtMS43IDEuOC0yLjIgMi45LS43IDIuNC0uNSAzLjcgLjYgMi40IDEuMyAzLjRsMTUgMjAuOGMtLjYgMS45LTEuMSAzLjgtMS43IDUuN2wtMjQgOWMtMS4yIC40LTIuMiAxLjItMyAyLjFzLTEuNCAyLjEtMS42IDMuMy0uMiAyLjUgLjIgMy43IDEuMSAyLjMgMiAzLjFsMTguNyAxNy41Yy0uMiAyLS40IDMuOS0uNiA1LjlMMy41IDI0OS44Yy0xLjEgLjctMS45IDEuNi0yLjYgMi43cy0uOSAyLjMtLjkgMy42IC4zIDIuNSAuOSAzLjYgMS41IDIgMi42IDIuN2wyMS44IDEzLjVjLjIgMiAuMyAzLjkgLjYgNS45TDcuMSAyOTkuMWMtLjkgLjktMS42IDEuOS0yIDMuMXMtLjUgMi41LS4yIDMuNyAuOCAyLjQgMS42IDMuMyAxLjggMS43IDMgMi4xbDI0IDljLjYgMS45IDEuMSAzLjggMS43IDUuNmwtMTUgMjAuOGMtLjcgMS0xLjIgMi4yLTEuMyAzLjRzMCAyLjUgLjUgMy43IDEuMiAyLjIgMi4yIDIuOSAyLjEgMS4zIDMuNCAxLjVsMjUuNCA0LjJjLjkgMS43IDEuOCAzLjQgMi43IDUuMUw0Mi42IDM5MS4xYy0uNSAxLjEtLjcgMi40LS42IDMuNnMuNSAyLjUgMS4yIDMuNWMuNyAxLjEgMS42IDEuOSAyLjcgMi41czIuNCAuOCAzLjYgLjhsMjUuOC0uOWMxLjIgMS41IDIuNCAyLjkgMy42IDQuNEw3MyA0MzAuMmMtLjMgMS4yLS4zIDIuNSAuMSAzLjdzMSAyLjMgMS45IDMuMiAyIDEuNSAzLjIgMS45IDIuNSAuNCAzLjcgLjFsMjUuMi01LjljMS41IDEuMiAyLjkgMi40IDQuNCAzLjZsLS45IDI1LjhjMCAxLjMgLjIgMi41IC44IDMuNnMxLjQgMi4xIDIuNSAyLjggMi4yIDEuMSAzLjUgMS4yIDIuNS0uMSAzLjYtLjZsMjMuNC0xMC43YzEuNyAuOSAzLjQgMS44IDUuMSAyLjdsNC4yIDI1LjRjLjIgMS4yIC43IDIuNCAxLjUgMy40czEuOCAxLjggMi45IDIuMiAyLjQgLjcgMy43IC41IDIuNC0uNiAzLjQtMS4zbDIwLjgtMTVjMS45IC42IDMuOCAxLjEgNS42IDEuN2w5IDI0Yy40IDEuMiAxLjIgMi4yIDIuMSAzczIuMSAxLjQgMy4zIDEuNiAyLjUgLjIgMy43LS4yIDIuMy0xLjEgMy4xLTJsMTcuNS0xOC43YzIgLjIgMy45IC40IDUuOSAuNmwxMy41IDIxLjhjLjcgMS4xIDEuNiAxLjkgMi43IDIuNnMyLjMgLjkgMy42IC45IDIuNS0uMyAzLjYtLjkgMi0xLjUgMi43LTIuNmwxMy41LTIxLjhjMi0uMiAzLjktLjMgNS45LS42bDE3LjUgMTguN2MuOSAuOSAxLjkgMS42IDMuMSAyczIuNSAuNSAzLjcgLjIgMi40LS44IDMuMy0xLjYgMS43LTEuOCAyLjEtM2w5LTI0YzEuOS0uNiAzLjgtMS4xIDUuNi0xLjdsMjAuOCAxNWMxIC43IDIuMiAxLjIgMy40IDEuM3MyLjUgMCAzLjctLjUgMi4yLTEuMiAyLjktMi4yIDEuMy0yLjEgMS41LTMuNGw0LjItMjUuNGMxLjctLjkgMy40LTEuOCA1LjEtMi43bDIzLjQgMTAuN2MxLjEgLjUgMi40IC43IDMuNiAuNnMyLjQtLjUgMy41LTEuMiAxLjktMS42IDIuNS0yLjggLjgtMi40IC44LTMuNmwtLjktMjUuOGMxLjUtMS4yIDIuOS0yLjQgNC40LTMuNmwyNS4yIDUuOWMxLjIgLjMgMi41IC4zIDMuNy0uMXMyLjMtMSAzLjItMS45IDEuNS0yIDEuOS0zLjIgLjQtMi41IC4xLTMuN0w0MzMuMSA0MDVjMS4yLTEuNCAyLjQtMi45IDMuNi00LjRsMjUuOCAuOWMxLjMgLjEgMi41LS4yIDMuNi0uOHMyLjEtMS40IDIuOC0yLjVjLjctMSAxLjEtMi4yIDEuMi0zLjVzLS4xLTIuNS0uNi0zLjZsLTEwLjctMjMuNGMuOS0xLjcgMS44LTMuNCAyLjctNS4xbDI1LjQtNC4yYzEuMi0uMiAyLjQtLjcgMy40LTEuNXMxLjgtMS44IDIuMi0yLjkgLjctMi40IC41LTMuNy0uNi0yLjQtMS4zLTMuNGwtMTUtMjAuOGMuNi0xLjkgMS4xLTMuOCAxLjctNS42bDI0LTljMS4yLS40IDIuMi0xLjIgMy0yLjFzMS40LTIuMSAxLjYtMy4zIC4yLTIuNS0uMi0zLjctMS4xLTIuMy0yLTMuMWwtMTguNy0xNy41Yy4yLTEuOSAuNC0zLjkgLjYtNS45bDIxLjgtMTMuNWMxLjEtLjcgMS45LTEuNiAyLjYtMi43cy45LTIuMyAuOS0zLjYtLjMtMi41LS45LTMuNi0xLjUtMi0yLjYtMi43bDAgMHptLTE1MSAxMjkuMWMtMy42LS44LTcuNC0uMS0xMC41IDEuOXMtNS4zIDUuMi02IDguOGwtNy42IDM1LjdjLTI0LjYgMTEuMS01MS4zIDE2LjgtNzguMyAxNi43cy01My42LTYuMS03OC4xLTE3LjRsLTcuNi0zNS43Yy0uNC0xLjgtMS4xLTMuNS0yLjEtNXMtMi40LTIuOC0zLjktMy44LTMuMi0xLjctNS0yLTMuNi0uMy01LjQgLjFsLTMxLjUgNi44Yy01LjgtNi0xMS4zLTEyLjUtMTYuMy0xOS4ybDE1My4yIDBjMS43IDAgMi45LS4zIDIuOS0xLjlsMC01NC4yYzAtMS42LTEuMi0xLjktMi45LTEuOWwtNDQuOCAwIDAtMzQuNCA0OC41IDBjNC40IDAgMjMuNyAxLjMgMjkuOCAyNS45IDEuOSA3LjUgNi4yIDMyLjEgOS4xIDQwIDIuOSA4LjggMTQuNiAyNi41IDI3LjEgMjYuNWw3OSAwYy01LjMgNy4xLTExLjEgMTMuOC0xNy4zIDIwLjFsLTMyLjEtNi45em0yNS44IDM0LjVjMCAzLS45IDYtMi42IDguNXMtNCA0LjUtNi44IDUuNi01LjggMS41LTguOCAuOS01LjctMi03LjgtNC4yLTMuNi00LjgtNC4yLTcuOC0uMy02IC44LTguOCAzLjEtNS4yIDUuNi02LjkgNS40LTIuNiA4LjUtMi42bC40IDBjNCAuMSA3LjcgMS44IDEwLjUgNC42czQuMyA2LjcgNC4zIDEwLjZsLjEgMHptLTIyNS42LS43YzAgMy0uOSA2LTIuNiA4LjVzLTQuMSA0LjUtNi44IDUuNi01LjggMS41LTguOCAuOS01LjctMi03LjgtNC4yLTMuNi00LjgtNC4yLTcuOC0uMy02IC45LTguOCAzLjEtNS4yIDUuNi02LjggNS40LTIuNiA4LjUtMi42bC41IDBjNCAuMSA3LjcgMS44IDEwLjUgNC42czQuMyA2LjcgNC4zIDEwLjZsLjEgMHpNNjkuNiAyMzQuMmwzMi44LTE0LjZjMS43LS43IDMuMi0xLjggNC40LTMuMXMyLjItMi45IDIuOS00LjYgMS0zLjUgLjktNS4zLS41LTMuNi0xLjItNS4zbC02LjgtMTUuMiAyNi42IDAgMCAxMTkuNy01My42IDBjLTYuNi0yMy4yLTguNy00Ny42LTYuMS03MS42ek01OC4zIDE5OC4xYzAtMiAuNC00IDEuMi01LjhzMS45LTMuNSAzLjMtNC45IDMuMS0yLjUgNC45LTMuMyAzLjgtMS4yIDUuOC0xLjJsLjUgMGMzIC4xIDUuOSAxIDguMyAyLjhzNC4zIDQuMSA1LjQgNi45IDEuMyA1LjggLjcgOC44LTIuMSA1LjYtNC4zIDcuNy00LjkgMy41LTcuOCA0LjEtNiAuMi04LjctLjktNS4xLTMuMS02LjgtNS42LTIuNS01LjQtMi41LTguNGwwIDB6bTE1NS4yIDI0LjVsMC0zNS4zIDYzLjMgMGMzLjMgMCAyMy4xIDMuOCAyMy4xIDE4LjYgMCAxMi4zLTE1LjIgMTYuNy0yNy43IDE2LjdsLTU4LjcgMHpNMzk5IDMwNi43Yy05LjggMS4xLTIwLjYtNC4xLTIyLTEwLjEtNS44LTMyLjUtMTUuNC0zOS40LTMwLjYtNTEuNCAxOC45LTEyIDM4LjUtMjkuNiAzOC41LTUzLjMgMC0yNS41LTE3LjUtNDEuNi0yOS40LTQ5LjUtMTYuOC0xMS0zNS4zLTEzLjItNDAuMy0xMy4ybC0xOTguOSAwYzI3LjUtMzAuNyA2NC40LTUxLjUgMTA0LjktNTkuMmwyMy41IDI0LjZjMS4zIDEuMyAyLjggMi40IDQuNCAzLjFzMy41IDEuMSA1LjMgMS4yIDMuNi0uMyA1LjMtLjkgMy4yLTEuNyA0LjYtMi45bDI2LjMtMjVjMjYuOCA1IDUyLjEgMTUuOCA3NC4zIDMxLjZzNDAuNiAzNi4yIDU0LjEgNTkuOWwtMTggNDAuNmMtMS41IDMuNC0xLjUgNy4yLS4yIDEwLjZzMy45IDYuMiA3LjMgNy43bDM0LjYgMTUuM2MxLjEgMTAuOCAxLjIgMjEuNyAuNCAzMi41bC0xOS4zIDBjLTEuOSAwLTIuNyAxLjMtMi43IDMuMWwwIDguOGMwIDIwLjgtMTEuNyAyNS4zLTIyIDI2LjV6TTI0MCA2MC4yYzAtNCAxLjYtNy45IDQuNS0xMC43czYuNy00LjUgMTAuNy00LjVsLjQgMGMzIC4xIDUuOSAxIDguNCAyLjhzNC4zIDQuMSA1LjQgNi45IDEuMyA1LjggLjcgOC44LTIuMSA1LjYtNC4zIDcuNy00LjkgMy41LTcuOCA0LTYgLjItOC43LS45LTUuMS0zLjEtNi44LTUuNi0yLjUtNS40LTIuNS04LjR6TTQzNi44IDIxNGMtMiAwLTQtLjQtNS44LTEuMnMtMy41LTEuOS00LjktMy4zLTIuNS0zLjEtMy4zLTQuOS0xLjItMy44LTEuMi01LjggLjQtNCAxLjItNS44IDEuOS0zLjUgMy4zLTQuOSAzLjEtMi41IDQuOS0zLjMgMy44LTEuMiA1LjgtMS4ybC40IDBjNCAuMSA3LjkgMS43IDEwLjcgNC42czQuNCA2LjggNC4zIDEwLjgtMS43IDcuOS00LjYgMTAuNy02LjggNC40LTEwLjggNC4zeiJdCiAgICB9OwogICAgZmFIb3JuYmlsbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJob3JuYmlsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTkyIiwgIk03Ni44IDM3MC4zYzEgNy44LS40IDE1LjgtNC4xIDIyLjhzLTkuNiAxMi42LTE2LjcgMTYuMS0xNS4xIDQuNy0yMi45IDMuMy0xNS01LjEtMjAuNi0xMC43LTkuMi0xMi45LTEwLjUtMjAuNyAwLTE1LjggMy42LTIyLjkgOS4zLTEyLjggMTYuMy0xNi41IDE1LTUgMjIuOS0zLjljLTc4LjMtMTExLjMgNTItMTkwLjUgNTItMTkwLjUtNS45IDQzLTguMiA5MS4yLTguMiA5MS4yLTY3LjMgNDEuNSAuOSA2NC4xIDM5LjggNzIuOSA5LjkgMjcgMjcuOCA1MC4yIDUxLjQgNjYuN3M1MS42IDI1LjMgODAuMyAyNS4zYzEuOSAwIDMuOC0uMiA1LjctLjNsLjEgMTguOWMtOTkuMiAxLjQtMTU4LjctMjkuMS0xODguOS01MS42em0xMDgtMzI3LjdjLjktNy4yLS4yLTE0LjYtMy40LTIxLjItMy02LjItNy42LTExLjUtMTMuNC0xNS4zcy0xMi41LTUuOS0xOS40LTYuMi0xMy44IDEuNC0xOS44IDQuNy0xMS4xIDguMy0xNC41IDE0LjMtNS4yIDEyLjgtNSAxOS43IDIuMiAxMy43IDUuOSAxOS41IDguOSAxMC42IDE1LjEgMTMuNiAxMy4xIDQuNCAyMCAzLjljLTIyLjYgMjkuOS01My44IDg5LjYtNTIuNCAxOTBsMjEuOC0uMmMwLS45LS4xLTEuOC0uMS0yLjcgMC0yOCA4LjQtNTUuMyAyNC4xLTc4LjVzMzcuOS00MS4yIDYzLjgtNTEuNmM4LTM3LjcgMzAuNy0xMTQuMyA3My44LTQ0LjMgMCAwIDQ4LjEgMi40IDkxLjIgOC4yIDAgMC03Ny44LTEyOC0xODcuNi01NC4xbDAgMHpNNDg5IDE3Ni44YzYuMy0zIDExLjctNy43IDE1LjUtMTMuNnM1LjktMTIuNyA2LjEtMTkuOC0xLjYtMTQtNS4yLTIwLTguNy0xMS0xNC45LTE0LjMtMTMuMi00LjgtMjAuMi00LjQtMTMuOCAyLjgtMTkuNSA2LjktMTAuMiA5LjYtMTMgMTYuMS0zLjcgMTMuNi0yLjcgMjAuNWMtMzEuNy0yMS45LTg5LjgtNDkuMS0xODMuNC00Ny43bC4xIDIyLjVjMi43LS4yIDUuNC0uNCA4LjEtLjQgMjguMSAwIDU1LjYgOC41IDc4LjkgMjQuM3M0MS4yIDM4LjMgNTEuNiA2NC41YzM5LjEgOSAxMDUuMSAzMS42IDM4LjUgNzIuNSAwIDAtMi4zIDQ4LjEtOC4yIDkxLjIgMCAwIDEzMy40LTgxLjIgNDktMTk0LjYgNi42IC42IDEzLjMtLjYgMTkuMy0zLjVsMCAwek0zNzQuNCA0MzYuMmMyMS40LTMyLjUgNDYuNC04OS43IDQ1LjEtMTc5LjdsLTE5LjUgLjFjLjEgMi4xIC4zIDQuMSAuMyA2LjIgMCAyOC42LTguOCA1Ni41LTI1LjEgODBzLTM5LjUgNDEuNC02Ni4zIDUxLjRjLTguOSAzOS0zMS40IDEwNi43LTcyLjggMzkuNSAwIDAtNDguMS0yLjMtOTEuMi04LjIgMCAwIDc5LjkgMTMxLjMgMTkxLjkgNTEgLjMgNC45IDEuNSA5LjYgMy42IDE0IDIuOSA2LjEgNy41IDExLjQgMTMuMSAxNS4xczEyLjIgNiAxOSA2LjQgMTMuNi0xLjEgMTkuNi00LjIgMTEuMS03LjggMTQuNy0xMy42IDUuNi0xMi40IDUuNy0xOS4yLTEuNS0xMy41LTQuOC0xOS40LTguMi0xMC45LTE0LjEtMTQuMy0xMi42LTUuMi0xOS40LTUuMWwwLS4xeiJdCiAgICB9OwogICAgZmFQaHAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGhwIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0NTciLCAiTTMyMCAxMDQuNWMxNzEuNCAwIDMwMy4yIDcyLjIgMzAzLjIgMTUxLjVTNDkxLjMgNDA3LjUgMzIwIDQwNy41QzE0OC42IDQwNy41IDE2LjggMzM1LjMgMTYuOCAyNTZTMTQ4LjcgMTA0LjUgMzIwIDEwNC41em0wLTE2LjhDMTQzLjMgODcuNyAwIDE2MyAwIDI1NlMxNDMuMyA0MjQuMyAzMjAgNDI0LjMgNjQwIDM0OSA2NDAgMjU2IDQ5Ni43IDg3LjcgMzIwIDg3Ljd6TTIxOC4yIDI0Mi41Yy03LjkgNDAuNS0zNS44IDM2LjMtNzAuMSAzNi4zbDEzLjctNzAuNmMzOCAwIDYzLjgtNC4xIDU2LjQgMzQuM3pNOTcuNCAzNTAuM2wzNi43IDAgOC43LTQ0LjhjNDEuMSAwIDY2LjYgMyA5MC4yLTE5LjEgMjYuMS0yNCAzMi45LTY2LjcgMTQuMy04OC4xLTkuNy0xMS4yLTI1LjMtMTYuNy00Ni41LTE2LjdsLTcwLjcgMC0zMi43IDE2OC43ek0yODMuMSAxMzYuN2wzNi41IDAtOC43IDQ0LjhjMzEuNSAwIDYwLjctMi4zIDc0LjggMTAuNyAxNC44IDEzLjYgNy43IDMxLTguMyAxMTMuMWwtMzcgMGMxNS40LTc5LjQgMTguMy04NiAxMi43LTkyLTUuNC01LjgtMTcuNy00LjYtNDcuNC00LjZsLTE4LjggOTYuNi0zNi41IDAgMzIuNy0xNjguNnpNNTA1IDI0Mi41Yy04IDQxLjEtMzYuNyAzNi4zLTcwLjEgMzYuM2wxMy43LTcwLjZjMzguMiAwIDYzLjgtNC4xIDU2LjQgMzQuM3pNMzg0LjIgMzUwLjNsMzYuOCAwIDguNy00NC44YzQzLjIgMCA2Ny4xIDIuNSA5MC4yLTE5LjEgMjYuMS0yNCAzMi45LTY2LjcgMTQuMy04OC4xLTkuNy0xMS4yLTI1LjMtMTYuNy00Ni41LTE2LjdsLTcwLjcgMC0zMi44IDE2OC43eiJdCiAgICB9OwogICAgZmFEaXNxdXMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGlzcXVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU3ZDUiLCAiTTI5MC4yIDUxMmMtNjIuNiAwLTExOS45LTIyLjktMTY0LjItNjAuOEwxNyA0NjYuMSA1OS4xIDM2Mi4yYy0xNC43LTMyLjQtMjIuOS02OC4zLTIyLjktMTA2LjIgMC0xNDEuNCAxMTMuNy0yNTYgMjU0LTI1NiAxNDAuMyAwIDI1NCAxMTQuNiAyNTQgMjU2IDAgMTQxLjQtMTEzLjcgMjU2LTI1NCAyNTZ6TTQyOC45IDI1NS4zbDAtLjdDNDI4LjkgMTgwLjcgMzc2LjggMTI4IDI4NyAxMjhsLTk3IDAgMCAyNTYgOTUuNiAwYzkwLjUgMCAxNDMuNC01NC45IDE0My40LTEyOC43ek0yODggMzIxLjFsLTI4LjQgMCAwLTEzMC4yIDI4LjQgMGM0MS43IDAgNjkuMyAyMy44IDY5LjMgNjQuN2wwIC43YzAgNDEuMy0yNy43IDY0LjctNjkuMyA2NC43eiJdCiAgICB9OwogICAgZmE1MDBweCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICI1MDBweCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMjZlIiwgIk03MS44IDM0NC4zYy02LjUtMTQuMi02LjktMTguMyA3LjQtMjMuMSAyNS42LTggOCA5LjIgNDMuMiA0OS4ybC4zIDAgMC05My45YzEuMi01MC4yIDQ0LTkyLjIgOTcuNy05Mi4yIDUzLjkgMCA5Ny43IDQzLjUgOTcuNyA5Ni44IDAgNjMuNC02MC44IDExMy4yLTEyOC41IDkzLjMtMTAuNS00LjItMi4xLTMxLjcgOC41LTI4LjYgNTMgMCA4OS40LTEwLjEgODkuNC02NC40IDAtNjEtNzcuMS04OS42LTExNi45LTQ0LjYtMjMuNSAyNi40LTE3LjYgNDIuMS0xNy42IDE1Ny42IDUwLjcgMzEgMTE4LjMgMjIgMTYwLjQtMjAuMSAyNC44LTI0LjggMzguNS01OCAzOC41LTkzIDAtMzUuMi0xMy44LTY4LjItMzguOC05My4zLTI0LjgtMjQuOC01Ny44LTM4LjUtOTMuMy0zOC41UzE1MSAxNjMuMyAxMjYuMyAxODhjLS4zIC4zLTE2IDE2LjUtMjEuMiAyMy45bC0uNSAuNmMtMy4zIDQuNy02LjMgOS4xLTIwLjEgNi4xLTYuOS0xLjctMTQuMy01LjgtMTQuMy0xMS44TDcwLjIgMjBjMC01IDMuOS0xMC41IDEwLjUtMTAuNUwzMjIgOS41YzguMyAwIDguMyAxMS42IDguMyAxNS4xIDAgMy45IDAgMTUuMS04LjMgMTUuMWwtMjIzLjIgMCAwIDEzMi45IC4zIDBjMTA0LjItMTA5LjggMjgyLjgtMzYgMjgyLjggMTA4LjkgMCAxNzguMS0yNDQuOCAyMjAuMy0zMTAuMSA2Mi44ek0xMzUuMSA4My41Yy0uNSA0LjIgNC42IDI0LjUgMTQuNiAyMC42IDEyNC44LTQ3LjUgMjAyLjggNDAuNCAyMDkuNCA0MC40IDQuOCAwIDIyLjgtMTUuMyAxNC4zLTIyLjgtOTMuMi04OS0yMzQuNS01Ny0yMzguMy0zOC4yek0zNjEuNSA0MTQuN2MtMTEwIDEwOS45LTI5OSA2MC44LTMzMi0xMDQuMiAwLTEyLjItMzAuNC03LjQtMjguOSAzLjMgMjQgMTczLjQgMjQ2IDI1Ni45IDM4MS42IDEyMS4zIDYuOS03LjgtMTIuNi0yOC40LTIwLjctMjAuNHpNMTgyLjEgMzA2LjZjMCA0IDQuMyA3LjMgNS41IDguNSAzIDMgNi4xIDQuNCA4LjUgNC40IDMuOCAwIDIuNiAuMiAyMi4zLTE5LjUgMTkuNiAxOS4zIDE5LjEgMTkuNSAyMi4zIDE5LjUgNS40IDAgMTguNS0xMC40IDEwLjctMTguMmwtMTcuMy0xNy4zIDE4LjItMTguMmM2LjMtNi44LTEwLjEtMjEuOC0xNi4yLTE1LjdMMjE4LjIgMjY4Yy0xOC42LTE4LjgtMTguNC0xOS41LTIxLjUtMTkuNS01IDAtMTggMTEuNy0xMi40IDE3LjNMMjAyLjUgMjg0Yy0xOC4xIDE3LjktMjAuNCAxOS4yLTIwLjQgMjIuNnoiXQogICAgfTsKICAgIGZhQWZmaWxpYXRldGhlbWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYWZmaWxpYXRldGhlbWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM2YiIsICJNMTU5LjcgMjM3LjRDMTA4LjQgMzA4LjMgNDMuMSAzNDguMiAxNCAzMjYuNi0xNS4yIDMwNC45IDIuOCAyMzAgNTQuMiAxNTkuMSAxMDUuNSA4OC4yIDE3MC44IDQ4LjMgMTk5LjkgNjkuOXMxMS4xIDk2LjYtNDAuMiAxNjcuNXptMzUxLjItNTcuM2MtNzMuOCAxMjMuNC0xOTEuOSAxODcuNy0yNjQuNSAxNDMuNi0yNS0xNS4yLTQxLjMtNDEuMi00OS03My44LTMzLjYgNjQuOC05Mi44IDExMy44LTE2NC4xIDEzMy4yIDQ5LjggNTkuMyAxMjQuMSA5Ni45IDIwNyA5Ni45IDE1MCAwIDI3MS42LTEyMy4xIDI3MS42LTI3NC45IC4xLTguNS0uMy0xNi44LTEtMjV6Il0KICAgIH07CiAgICBmYVJlZFJpdmVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJlZC1yaXZlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2UzIiwgIk0zNTMuMiAzMkw5NC44IDMyQzQyLjQgMzIgMCA3NC40IDAgMTI2LjhMMCAzODUuMkMwIDQzNy42IDQyLjQgNDgwIDk0LjggNDgwbDI1OC40IDBjNTIuNCAwIDk0LjgtNDIuNCA5NC44LTk0LjhsMC0yNTguNEM0NDggNzQuNCA0MDUuNiAzMiAzNTMuMiAzMnpNMTQ0LjkgMjAwLjlsMCA1Ni4zYzAgMjctMjEuOSA0OC45LTQ4LjkgNDguOWwwLTE1NC4yYzAtMTMuMiAxMC43LTIzLjkgMjMuOS0yMy45bDE1NC4yIDBjMCAyNy0yMS45IDQ4LjktNDguOSA0OC45bC01Ni4zIDBjLTEyLjMtLjYtMjQuNiAxMS42LTI0IDI0em0xNzYuMyA3MmwtNTYuMyAwYy0xMi4zLS42LTI0LjYgMTEuNi0yNCAyNGwwIDU2LjNjMCAyNy0yMS45IDQ4LjktNDguOSA0OC45bDAtMTU0LjJjMC0xMy4yIDEwLjctMjMuOSAyMy45LTIzLjlsMTU0LjIgMGMwIDI3LTIxLjkgNDguOS00OC45IDQ4Ljl6Il0KICAgIH07CiAgICBmYVR3aXR0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidHdpdHRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMDk5IiwgIk00NTkuNCAxNTEuN2MuMyA0LjUgLjMgOS4xIC4zIDEzLjYgMCAxMzguNy0xMDUuNiAyOTguNi0yOTguNiAyOTguNi01OS41IDAtMTE0LjctMTcuMi0xNjEuMS00Ny4xIDguNCAxIDE2LjYgMS4zIDI1LjMgMS4zIDQ5LjEgMCA5NC4yLTE2LjYgMTMwLjMtNDQuOC00Ni4xLTEtODQuOC0zMS4yLTk4LjEtNzIuOCA2LjUgMSAxMyAxLjYgMTkuOCAxLjYgOS40IDAgMTguOC0xLjMgMjcuNi0zLjYtNDguMS05LjctODQuMS01Mi04NC4xLTEwM2wwLTEuM2MxNCA3LjggMzAuMiAxMi43IDQ3LjQgMTMuMy0yOC4zLTE4LjgtNDYuOC01MS00Ni44LTg3LjQgMC0xOS41IDUuMi0zNy40IDE0LjMtNTMgNTEuNyA2My43IDEyOS4zIDEwNS4zIDIxNi40IDEwOS44LTEuNi03LjgtMi42LTE1LjktMi42LTI0IDAtNTcuOCA0Ni44LTEwNC45IDEwNC45LTEwNC45IDMwLjIgMCA1Ny41IDEyLjcgNzYuNyAzMy4xIDIzLjctNC41IDQ2LjUtMTMuMyA2Ni42LTI1LjMtNy44IDI0LjQtMjQuNCA0NC44LTQ2LjEgNTcuOCAyMS4xLTIuMyA0MS42LTguMSA2MC40LTE2LjItMTQuMyAyMC44LTMyLjIgMzkuMy01Mi42IDU0LjN6Il0KICAgIH07CiAgICBmYUZvcnRBd2Vzb21lID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZvcnQtYXdlc29tZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjg2IiwgIk00ODkuNSAyODcuOWwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMzItMzYuNiAwIDAtMTc4LjNjMC0yLjYtMi00LjYtNC42LTQuNmwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMzItMzYuNiAwIDAtMzJjMC0yLjYtMi00LjYtNC42LTQuNmwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMzItMzYuNiAwIDAtMzJjMC02LTgtNC42LTExLjctNC42bDAtMzhjOC4zLTIgMTcuMS0zLjQgMjUuNy0zLjQgMTAuOSAwIDIwLjkgNC4zIDMxLjQgNC4zIDQuNiAwIDI3LjctMS4xIDI3LjctOGwwLTYwYzAtMi42LTItNC42LTQuNi00LjYtNS4xIDAtMTUuMSA0LjMtMjQgNC4zLTkuNyAwLTIwLjktNC4zLTMyLjYtNC4zLTggMC0xNiAxLjEtMjMuNyAyLjlsMC00LjljNS40LTIuNiA5LjEtOC4zIDkuMS0xNC4zIDAtMjAuNy0zMS40LTIwLjgtMzEuNCAwIDAgNiAzLjcgMTEuNyA5LjEgMTQuM2wwIDExMS43Yy0zLjcgMC0xMS43LTEuNC0xMS43IDQuNmwwIDMyLTM2LjYgMCAwLTMyYzAtMi42LTItNC42LTQuNi00LjZsLTI3LjQgMGMtMi42IDAtNC42IDItNC42IDQuNmwwIDMyLTM2LjMgMCAwLTMyYzAtMi42LTItNC42LTQuNi00LjZsLTI3LjQgMGMtMi42IDAtNC42IDItNC42IDQuNmwwIDE3OC4zLTM2LjYgMCAwLTMyYzAtMi42LTItNC42LTQuNi00LjZsLTI3LjQgMGMtMi42IDAtNC42IDItNC42IDQuNmwwIDIxOS41IDE4Mi45IDAgMC05NmMwLTcyLjYgMTA5LjctNzIuNiAxMDkuNyAwbDAgOTYgMTgyLjkgMCAwLTIxOS41Yy4xLTIuNi0xLjktNC42LTQuNS00LjZ6bS0yODguMS00LjVjMCAyLjYtMiA0LjYtNC42IDQuNmwtMjcuNCAwYy0yLjYgMC00LjYtMi00LjYtNC42bDAtNjRjMC0yLjYgMi00LjYgNC42LTQuNmwyNy40IDBjMi42IDAgNC42IDIgNC42IDQuNmwwIDY0em0xNDYuNCAwYzAgMi42LTIgNC42LTQuNiA0LjZsLTI3LjQgMGMtMi42IDAtNC42LTItNC42LTQuNmwwLTY0YzAtMi42IDItNC42IDQuNi00LjZsMjcuNCAwYzIuNiAwIDQuNiAyIDQuNiA0LjZsMCA2NHoiXQogICAgfTsKICAgIGZhTWl4ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWl4ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA1NiIsICJNODIuNiA3Ni4xYy0zLjgtNS4xLTguNy05LjQtMTQuMi0xMi41cy0xMS43LTUuMS0xOC4xLTUuNy0xMi44IC4xLTE4LjggMi4yLTExLjYgNS4zLTE2LjMgOS42Yy0xNy42IDE2LjItMTkgNDMuNS00LjggNjIuOGw5MS44IDEyMy05Mi4zIDEyNC4xYy0xNC4yIDE5LjMtMTMuMSA0Ni42IDQuNyA2Mi44IDQuNyA0LjMgMTAuMyA3LjYgMTYuMyA5LjZzMTIuNSAyLjggMTguOCAyLjIgMTIuNS0yLjUgMTguMS01LjcgMTAuNC03LjQgMTQuMi0xMi41TDIxMC45IDI2Mi43YzEuNS0yLjEgMi4zLTQuNiAyLjMtNy4xcy0uOC01LTIuMy03LjFMODIuNiA3Ni4xek00MzguMiAzNzkuNmwtOTIuMy0xMjQuMSA5MS44LTEyM2MxNC4yLTE5LjIgMTIuOC00Ni42LTQuNy02Mi44LTQuNy00LjMtMTAuMy03LjYtMTYuMy05LjZzLTEyLjUtMi44LTE4LjgtMi4yLTEyLjUgMi41LTE4LjEgNS43LTEwLjQgNy40LTE0LjIgMTIuNWwtMTI4IDE3Mi4xYy0xLjUgMi4xLTIuMyA0LjYtMi4zIDcuMXMuOCA1IDIuMyA3LjFMMzY2IDQzNS45YzMuOCA1LjEgOC43IDkuNCAxNC4yIDEyLjVzMTEuNyA1LjEgMTguMSA1LjcgMTIuOC0uMSAxOC44LTIuMiAxMS42LTUuMyAxNi4zLTkuNmMxNy44LTE2LjIgMTktNDMuNSA0LjctNjIuOHoiXQogICAgfTsKICAgIGZhTHlmdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJseWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzYzMiLCAiTTAgODEuMWw3Ny44IDAgMCAyMDguN2MwIDMzLjEgMTUgNTIuOCAyNy4yIDYxLTEyLjcgMTEuMS01MS4yIDIwLjktODAuMi0yLjgtMTctMTQtMjQuOC0zNy4zLTI0LjgtNTlMMCA4MS4xek00ODUuOSAyNTQuNmwwLTIyIDIzLjggMCAwLTc2LjgtMjYuMSAwYy0xMC4xLTQ2LjMtNTEuMi04MC43LTEwMC4zLTgwLjctNTYuNiAwLTEwMi43IDQ2LTEwMi43IDEwMi43bDAgMTc5LjJjMTYgMi4zIDM1LjQtLjMgNTEuNy0xNCAxNy4xLTE0IDI0LjgtMzcuMiAyNC44LTU5bDAtNi43IDM4LjggMCAwLTc2LjgtMzguOCAwIDAtMjMuM2MwLTM0LjYgNTIuMi0zNC42IDUyLjIgMGwwIDc3LjFjMCA1Ni42IDQ2IDEwMi43IDEwMi43IDEwMi43bDAtNzYuNWMtMTQuNSAwLTI2LjEtMTEuNy0yNi4xLTI1Ljl6bS0yOTQuMy05OWwwIDExM2MwIDE1LjQtMjMuOCAxNS40LTIzLjggMGwwLTExMy03Ni44IDAgMCAxMzIuN2MwIDIzLjggOCA1NCA0NSA2My45IDM3IDkuOCA1OC4yLTEwLjYgNTguMi0xMC42LTIuMSAxMy40LTE0LjUgMjMuMy0zNC45IDI1LjMtMTUuNSAxLjYtMzUuMi0zLjYtNDUtNy44bDAgNzAuM2MyNS4xIDcuNSA1MS41IDkuOCA3Ny42IDQuNyA0Ny4xLTkuMSA3Ni44LTQ4LjQgNzYuOC0xMDAuOGwwLTE3OC4yLTc3LjEgMCAwIC41eiJdCiAgICB9OwogICAgZmFBcHBsZVBheSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhcHBsZS1wYXkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQxNSIsICJNMTE2LjkgMTU4LjVjLTcuNSA4LjktMTkuNSAxNS45LTMxLjUgMTQuOS0xLjUtMTIgNC40LTI0LjggMTEuMy0zMi42IDcuNS05LjEgMjAuNi0xNS42IDMxLjMtMTYuMSAxLjIgMTIuNC0zLjcgMjQuNy0xMS4xIDMzLjh6bTEwLjkgMTcuMmMtMTcuNC0xLTMyLjMgOS45LTQwLjUgOS45LTguNCAwLTIxLTkuNC0zNC44LTkuMS0xNy45IC4zLTM0LjUgMTAuNC00My42IDI2LjUtMTguOCAzMi4zLTQuOSA4MCAxMy4zIDEwNi4zIDguOSAxMyAxOS41IDI3LjMgMzMuNSAyNi44IDEzLjMtLjUgMTguNS04LjYgMzQuNS04LjYgMTYuMSAwIDIwLjggOC42IDM0LjggOC40IDE0LjUtLjMgMjMuNi0xMyAzMi41LTI2IDEwLjEtMTQuOCAxNC4zLTI5LjEgMTQuNS0yOS45LS4zLS4zLTI4LTEwLjktMjguMy00Mi45LS4zLTI2LjggMjEuOS0zOS41IDIyLjktNDAuMy0xMi41LTE4LjYtMzItMjAuNi0zOC44LTIxLjF6bTEwMC40LTM2LjJsMCAxOTQuOSAzMC4zIDAgMC02Ni42IDQxLjkgMGMzOC4zIDAgNjUuMS0yNi4zIDY1LjEtNjQuM3MtMjYuNC02NC02NC4xLTY0bC03My4yIDB6TTI1OC41IDE2NWwzNC45IDBjMjYuMyAwIDQxLjMgMTQgNDEuMyAzOC42cy0xNSAzOC44LTQxLjQgMzguOGwtMzQuOCAwIDAtNzcuNHpNNDIwLjcgMzM1LjljMTkgMCAzNi42LTkuNiA0NC42LTI0LjlsLjYgMCAwIDIzLjQgMjggMCAwLTk3YzAtMjguMS0yMi41LTQ2LjMtNTcuMS00Ni4zLTMyLjEgMC01NS45IDE4LjQtNTYuOCA0My42bDI3LjMgMGMyLjMtMTIgMTMuNC0xOS45IDI4LjYtMTkuOSAxOC41IDAgMjguOSA4LjYgMjguOSAyNC41bDAgMTAuOC0zNy44IDIuM2MtMzUuMSAyLjEtNTQuMSAxNi41LTU0LjEgNDEuNSAuMSAyNS4yIDE5LjcgNDIgNDcuOCA0MnptOC4yLTIzLjFjLTE2LjEgMC0yNi40LTcuOC0yNi40LTE5LjYgMC0xMi4zIDkuOS0xOS40IDI4LjgtMjAuNWwzMy42LTIuMSAwIDExYzAgMTguMi0xNS41IDMxLjItMzYgMzEuMnptMTAyLjUgNzQuNmMyOS41IDAgNDMuNC0xMS4zIDU1LjUtNDUuNGw1My4xLTE0OS0zMC44IDAtMzUuNiAxMTUuMS0uNiAwLTM1LjYtMTE1LjEtMzEuNiAwIDUxLjIgMTQxLjktMi44IDguNmMtNC42IDE0LjYtMTIuMSAyMC4zLTI1LjUgMjAuMy0yLjQgMC03LS4zLTguOS0uNWwwIDIzLjRjMS44IC40IDkuMyAuNyAxMS42IC43eiJdCiAgICB9OwogICAgZmFBcnRzdGF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFydHN0YXRpb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjc3YSIsICJNMi4xIDM3Ny40bDQzIDc0LjNjNC4zIDguNSAxMC44IDE1LjcgMTguOSAyMC43czE3LjQgNy42IDI3IDcuNmwyODUuNCAwLTU5LjItMTAyLjYtMzE1LjEgMHpNNTAxLjkgMzUwTDMzNS43IDU5LjNjLTQuNC04LjItMTAuOS0xNS4xLTE4LjktMjBTMjk5LjcgMzIgMjkwLjQgMzJsLTg4LjQgMCAyNTcuMyA0NDcuNiA0MC43LTcwLjVjMS45LTMuMiAyMS0yOS43IDItNTkuMXpNMjc1LjIgMzA0LjVsLTExNS41LTIwMC0xMTUuNSAyMDAgMjMxIDB6Il0KICAgIH07CiAgICBmYU5vZGVKcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJub2RlLWpzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZDMiLCAiTTIyNC41IDUwOGMtNi43IDAtMTMuNS0xLjgtMTkuNC01LjJsLTYxLjctMzYuNWMtOS4yLTUuMi00LjctNy0xLjctOCAxMi4zLTQuMyAxNC44LTUuMiAyNy45LTEyLjcgMS40LS44IDMuMi0uNSA0LjYgLjRsNDcuNCAyOC4xYzEuNyAxIDQuMSAxIDUuNyAwTDQxMiAzNjcuNWMxLjctMSAyLjgtMyAyLjgtNWwwLTIxMy4yYzAtMi4xLTEuMS00LTIuOS01LjFMMjI3LjMgMzcuN2MtMS43LTEtNC0xLTUuNyAwTDM3LjEgMTQ0LjNjLTEuOCAxLTIuOSAzLTIuOSA1LjFsMCAyMTMuMWMwIDIgMS4xIDQgMi45IDQuOWw1MC42IDI5LjJjMjcuNSAxMy43IDQ0LjMtMi40IDQ0LjMtMTguN2wwLTIxMC40YzAtMyAyLjQtNS4zIDUuNC01LjNsMjMuNCAwYzIuOSAwIDUuNCAyLjMgNS40IDUuM2wwIDIxMC41YzAgMzYuNi0yMCA1Ny42LTU0LjcgNTcuNi0xMC43IDAtMTkuMSAwLTQyLjUtMTEuNkwyMC42IDM5Ni4xYy0xMi02LjktMTkuNC0xOS44LTE5LjQtMzMuN2wwLTIxMy4xYzAtMTMuOCA3LjQtMjYuOCAxOS40LTMzLjdMMjA1LjEgOWMxMS43LTYuNiAyNy4yLTYuNiAzOC44IDBMNDI4LjYgMTE1LjdjMTIgNi45IDE5LjQgMTkuOCAxOS40IDMzLjdsMCAyMTMuMWMwIDEzLjgtNy40IDI2LjctMTkuNCAzMy43TDI0My45IDUwMi44Yy01LjkgMy40LTEyLjYgNS4yLTE5LjQgNS4yek0zNzMuNiAyOTcuOWMwLTM5LjktMjctNTAuNS04My43LTU4LTU3LjQtNy42LTYzLjItMTEuNS02My4yLTI0LjkgMC0xMS4xIDQuOS0yNS45IDQ3LjQtMjUuOSAzNy45IDAgNTEuOSA4LjIgNTcuNyAzMy44IC41IDIuNCAyLjcgNC4yIDUuMiA0LjJsMjQgMGMxLjUgMCAyLjktLjYgMy45LTEuN3MxLjUtMi42IDEuNC00LjFjLTMuNy00NC4xLTMzLTY0LjYtOTIuMi02NC42LTUyLjcgMC04NC4xIDIyLjItODQuMSA1OS41IDAgNDAuNCAzMS4zIDUxLjYgODEuOCA1Ni42IDYwLjUgNS45IDY1LjIgMTQuOCA2NS4yIDI2LjcgMCAyMC42LTE2LjYgMjkuNC01NS41IDI5LjQtNDguOSAwLTU5LjYtMTIuMy02My4yLTM2LjYtLjQtMi42LTIuNi00LjUtNS4zLTQuNWwtMjMuOSAwYy0zIDAtNS4zIDIuNC01LjMgNS4zIDAgMzEuMSAxNi45IDY4LjIgOTcuOCA2OC4yIDU4LjQtLjEgOTItMjMuMiA5Mi02My40eiJdCiAgICB9OwogICAgZmFVbmNoYXJ0ZWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidW5jaGFydGVkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwODQiLCAiTTE3MS44IDIzMi44YzEuMSAwIDIuMS0uMyAzLS45czEuNi0xLjQgMi0yLjRjMi4yLTkuOCA3LjQtMTguNiAxNC45LTI1LjMgMS4yLS44IDEuNy0yLjUgMS43LTQuMS0uMS0uNy0uMy0xLjMtLjYtMS45cy0uOS0xLjEtMS40LTEuNEw3NC41IDEyOC41IDE0OS4xIDg1YzEuNS0uOCAyLjctMiAzLjYtMy41czEuNC0zLjEgMS40LTQuOGMwLTEuNy0uNC0zLjQtMS4zLTQuOXMtMi4yLTIuNy0zLjctMy40TDEyNi43IDU1LjZjLTEuNS0uOC0zLjEtMS4yLTQuOC0xLjJzLTMuMyAuNC00LjggMS4yTDE3IDExMy42Yy0xLjUgLjgtMi43IDItMy42IDMuNXMtMS40IDMuMS0xLjQgNC44TDEyIDIzN2MwIDEuNyAuNCAzLjQgMS4zIDQuOXMyLjIgMi43IDMuNyAzLjRsMjIuNCAxMi44YzEuNSAuOSAzLjIgMS4zIDUgMS4yIDIuNCAuMSA0LjgtLjggNi42LTIuNSAxLjgtMS45IDIuOC00LjQgMi45LTdsMC04NS4zIDExNS45IDY3LjljLjYgLjMgMS40IC40IDIuMSAuNHpNMzIzLjQgMzc3LjdjLTEuNyAuMS0zLjQgLjUtNSAxLjJsLTc0LjUgNDMuMSAwLTEzNC4yYzAtMi45LTIuOS01LjgtNi4yLTQuNi05LjQgMi44LTE5LjUgMy0yOSAuNC0uNy0uMi0xLjUtLjItMi4yLS4xcy0xLjQgLjQtMiAuOS0xLjEgMS0xLjQgMS43LS41IDEuNC0uNSAyLjFsMCAxMzMuMy03NC41LTQzLjFjLTEuNS0uOS0zLjItMS4zLTUtMS4yLTIuNSAwLTQuOSAxLTYuNyAyLjhzLTIuOCA0LjItMi44IDYuN2wwIDI2LjFjMCAxLjcgLjQgMy40IDEuMyA0LjlzMi4yIDIuNyAzLjcgMy40bDEwMC4yIDU3LjZjMS41IC45IDMuMiAxLjMgNSAxLjIgMS43IDAgMy40LS40IDUtMS4ybDEwMC4yLTU3LjZjMS41LS44IDIuNy0yIDMuNi0zLjVzMS40LTMuMSAxLjQtNC44bDAtMjYuMWMtLjgtNC42LTUuNC05LjEtMTAuNC05LjF6TTI4Ni4xIDc4YTIzIDIzIDAgMSAwIDAtNDYgMjMgMjMgMCAxIDAgMCA0NnptNjMuNi0xMC4xYTIzIDIzIDAgMSAwIDAgNDYgMjMgMjMgMCAxIDAgMC00NnptNjMuMiA4My43YTIzIDIzIDAgMSAwIDAtNDYgMjMgMjMgMCAxIDAgMCA0NnptLTYzLjItOS4yYTIzIDIzIDAgMSAwIDAgNDYgMjMgMjMgMCAxIDAgMC00NnptLTYzLjYgODMuMmM0LjUgMCA5LTEuMyAxMi44LTMuOXM2LjctNi4xIDguNS0xMC4zIDIuMi04LjggMS4zLTEzLjMtMy4xLTguNi02LjMtMTEuOC03LjMtNS40LTExLjgtNi4zLTkuMS0uNC0xMy4zIDEuMy03LjggNC43LTEwLjMgOC41LTMuOSA4LjItMy45IDEyLjhjMCAzIC42IDYgMS44IDguOHMyLjkgNS4zIDUgNy41IDQuNyAzLjggNy41IDUgNS44IDEuOCA4LjggMS44bDAgMHpNMjI0IDI2MmM0LjUgMCA5LTEuNCAxMi44LTMuOXM2LjctNi4xIDguNS0xMC4zIDIuMi04LjggMS4zLTEzLjMtMy4xLTguNi02LjMtMTEuOC03LjMtNS40LTExLjgtNi4zLTkuMS0uNC0xMy4zIDEuMy03LjggNC43LTEwLjMgOC41LTMuOSA4LjItMy45IDEyLjhjMCAzIC42IDYgMS43IDguOHMyLjggNS4zIDUgNy41IDQuNyAzLjggNy41IDUgNS44IDEuOCA4LjggMS44bDAgMHptMTg4LjktODIuNGMtNC42IDAtOSAxLjMtMTIuOCAzLjlzLTYuNyA2LjEtOC41IDEwLjMtMi4yIDguOC0xLjMgMTMuMyAzLjEgOC42IDYuMyAxMS44IDcuMyA1LjQgMTEuOCA2LjMgOS4xIC40IDEzLjMtMS4zIDcuOC00LjcgMTAuMy04LjUgMy45LTguMiAzLjktMTIuOGMwLTYuMS0yLjQtMTEuOS02LjctMTYuM3MtMTAuMi02LjctMTYuMy02LjdsMCAwem0wIDcyLjNjLTQuNiAwLTkgMS4zLTEyLjggMy45cy02LjcgNi4xLTguNSAxMC4zLTIuMiA4LjgtMS4zIDEzLjMgMy4xIDguNiA2LjMgMTEuOCA3LjMgNS40IDExLjggNi4zIDkuMSAuNCAxMy4zLTEuMyA3LjgtNC43IDEwLjMtOC41IDMuOS04LjIgMy45LTEyLjhjMC02LjEtMi40LTExLjktNi43LTE2LjNzLTEwLjItNi43LTE2LjMtNi43bDAgMHoiXQogICAgfTsKICAgIGZhUGxheXN0YXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGxheXN0YXRpb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjNkZiIsICJNNTcxIDM3Mi4zYy0xMS4zIDE0LjItMzguOCAyNC4zLTM4LjggMjQuM2wtMjA1LjEgNzMuNiAwLTU0LjMgMTUwLjktNTMuOGMxNy4xLTYuMSAxOS44LTE0LjggNS44LTE5LjQtMTMuOS00LjYtMzkuMS0zLjMtNTYuMiAyLjlsLTEwMC41IDM1LjUgMC01Ni40YzIzLjItNy44IDQ3LjEtMTMuNiA3NS43LTE2LjggNDAuOS00LjUgOTAuOSAuNiAxMzAuMiAxNS41IDQ0LjIgMTQgNDkuMiAzNC43IDM4IDQ4Ljl6TTM0Ni42IDI3OS44bDAtMTM5YzAtMTYuMy0zLTMxLjMtMTguMy0zNS42LTExLjctMy44LTE5IDcuMS0xOSAyMy40bDAgMzQ3LjktOTMuOC0yOS44IDAtNDE0LjdjMzkuOSA3LjQgOTggMjQuOSAxMjkuMiAzNS40IDc5LjUgMjcuMyAxMDYuNCA2MS4zIDEwNi40IDEzNy44IDAgNzQuNS00NiAxMDIuOC0xMDQuNSA3NC42ek00My4zIDQxMC4yYy00NS40LTEyLjgtNTMtMzkuNS0zMi4zLTU0LjggMTkuMS0xNC4yIDUxLjctMjQuOSA1MS43LTI0LjlsMTM0LjUtNDcuOCAwIDU0LjUtOTYuOCAzNC42Yy0xNy4xIDYuMS0xOS43IDE0LjgtNS44IDE5LjRzMzkuMSAzLjMgNTYuMi0yLjlsNDYuNC0xNi45IDAgNDguOGMtNTEuNiA5LjMtMTAxLjQgNy4zLTE1My45LTEweiJdCiAgICB9OwogICAgZmFNaWNyb2Jsb2cgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWljcm9ibG9nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwMWEiLCAiTTM5OS44IDM2Mi4yYzI5LjUtMzQuNyA0Ny4xLTc4LjMgNDcuMS0xMjUuOCAwLTExMy05OS42LTIwNC40LTIyMi41LTIwNC40UzIgMTIzLjUgMiAyMzYuNCAxMDEuNiA0NDAuOSAyMjQuNSA0NDAuOWMyNyAwIDUzLjktNC41IDc5LjQtMTMuNCAxLjQtLjUgMy0uNSA0LjUtLjFzMi43IDEuNCAzLjYgMi42YzE4LjYgMjUuMSA0Ny42IDQyLjcgNzkuOSA0OS45IDEuMSAuMiAyLjMgMCAzLjMtLjZzMS43LTEuNiAxLjktMi44Yy4xLS42IC4xLTEuMyAwLTEuOXMtLjQtMS4yLS44LTEuN2MtMTIuMy0xNi0xOC43LTM1LjgtMTgtNTZzOC40LTM5LjUgMjEuNy01NC43bC0uMiAuMXpNMzMwIDIxMi40bC01Ny4zIDQzLjUgMjAuOCA2OC45Yy40IDEuMyAuNCAyLjctLjEgNHMtMS4yIDIuNC0yLjMgMy4yLTIuNCAxLjItMy44IDEuMi0yLjctLjQtMy44LTEuMmwtNTkuMS00MS01OS4xIDQxLjFjLTEuMSAuOC0yLjQgMS4yLTMuOCAxLjJzLTIuNy0uNC0zLjgtMS4yLTEuOS0xLjktMi4zLTMuMi0uNS0yLjctLjEtNGwyMC44LTY4LjktNTcuMy00My41Yy0xLjEtLjgtMS45LTEuOS0yLjMtMy4ycy0uNC0yLjcgMC00IDEuMi0yLjQgMi4zLTMuMiAyLjQtMS4zIDMuNy0xLjNsNzEuOS0xLjUgMjMuNy02Ny45Yy40LTEuMyAxLjMtMi40IDIuNC0zLjJzMi40LTEuMiAzLjgtMS4yIDIuNyAuNCAzLjggMS4yIDEuOSAxLjkgMi40IDMuMmwyMy43IDY3LjkgNzEuOSAxLjVjMS40IDAgMi43IC40IDMuOCAxLjJzMS45IDEuOSAyLjMgMy4yIC40IDIuNyAwIDQtMS4yIDIuNC0yLjMgMy4zbDAgMHoiXQogICAgfTsKICAgIGZhR2l0a3Jha2VuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdpdGtyYWtlbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmM2E2IiwgIk01NTcuNyAxMTguMWMtMi4zLTYuMS05LjMtOS4yLTE1LjMtNi42LTUuNyAyLjQtOC41IDguOS02LjMgMTQuNiAxMC45IDI5IDE2LjkgNjAuNSAxNi45IDkzLjMgMCAxMzQuNi0xMDAuMyAyNDUuNy0yMzAuMiAyNjIuN2wwLTEyMy43YzcuOS0xLjUgMTUuNS0zLjYgMjMtNi4ybDAgMTA0YzEwNi43LTI1LjkgMTg1LjktMTIyLjEgMTg1LjktMjM2LjggMC05MS44LTUwLjgtMTcxLjgtMTI1LjgtMjEzLjMtNS43LTMuMi0xMy0uOS0xNS45IDUtMi43IDUuNS0uNiAxMi4yIDQuNyAxNS4xIDY3LjkgMzcuNiAxMTMuOSAxMTAgMTEzLjkgMTkzLjIgMCA5My4zLTU3LjkgMTczLjEtMTM5LjggMjA1LjRsMC05Mi4yYzE0LjItNC41IDI0LjktMTcuNyAyNC45LTMzLjUgMC0xMy4xLTYuOC0yNC40LTE3LjMtMzAuNSA4LjMtNzkuNSA0NC41LTU4LjYgNDQuNS04My45bDAtMTQuN2MwLTM4LTg3LjktMTYxLjgtMTI5LTE2NC43LTIuNS0uMi01LS4yLTcuNiAwLTQxLjIgMy0xMjkuMSAxMjYuNy0xMjkuMSAxNjQuN2wwIDE0LjhjMCAyNS4zIDM2LjMgNC4zIDQ0LjUgODMuOS0xMC42IDYuMS0xNy4zIDE3LjQtMTcuMyAzMC41IDAgMTUuOCAxMC42IDI5IDI0LjggMzMuNWwwIDkyLjJjLTgxLjktMzIuMi0xMzkuOC0xMTItMTM5LjgtMjA1LjQgMC04My4xIDQ2LTE1NS41IDExMy45LTE5My4yIDUuNC0zIDcuNC05LjYgNC43LTE1LjEtMi45LTUuOS0xMC4xLTguMi0xNS45LTUtNzUgNDEuNS0xMjUuOCAxMjEuNS0xMjUuOCAyMTMuMyAwIDExNC43IDc5LjIgMjEwLjggMTg1LjkgMjM2LjhsMC0xMDRjNy42IDIuNSAxNS4xIDQuNiAyMyA2LjJsMCAxMjMuN2MtMTI5LjgtMTctMjMwLjItMTI4LjEtMjMwLjItMjYyLjcgMC0zMi44IDYtNjQuMyAxNi45LTkzLjMgMi4yLTUuOC0uNi0xMi4yLTYuMy0xNC42LTYtMi42LTEzIC40LTE1LjMgNi42LTExLjggMzEuNS0xOC4zIDY1LjYtMTguMyAxMDEuMyAwIDE1NS4xIDEyMi42IDI4MS42IDI3Ni4zIDI4Ny44bDAtMTQ1LjljNi44IC40IDE1IC41IDIzLjQgMGwwIDE0NS44YzE1My43LTYuMSAyNzYuMy0xMzIuNiAyNzYuMy0yODcuNyAwLTM1LjctNi41LTY5LjgtMTguMy0xMDEuNHpNMzU3LjkgMzIyLjlhMjMuNyAyMy43IDAgMSAxIDAtNDcuNCAyMy43IDIzLjcgMCAxIDEgMCA0Ny40ek0yMTguMSAyNzUuNGEyMy43IDIzLjcgMCAxIDEgMCA0Ny40IDIzLjcgMjMuNyAwIDEgMSAwLTQ3LjR6Il0KICAgIH07CiAgICBmYVRlbGVncmFtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRlbGVncmFtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjI0NjIsICJ0ZWxlZ3JhbS1wbGFuZSJdLCAiZjJjNiIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek0zNzEgMTc2LjdjLTMuNyAzOS4yLTE5LjkgMTM0LjQtMjguMSAxNzguMy0zLjUgMTguNi0xMC4zIDI0LjgtMTYuOSAyNS40LTE0LjQgMS4zLTI1LjMtOS41LTM5LjMtMTguNy0yMS44LTE0LjMtMzQuMi0yMy4yLTU1LjMtMzcuMi0yNC41LTE2LjEtOC42LTI1IDUuMy0zOS41IDMuNy0zLjggNjcuMS02MS41IDY4LjMtNjYuNyAuMi0uNyAuMy0zLjEtMS4yLTQuNHMtMy42LS44LTUuMS0uNWMtMi4yIC41LTM3LjEgMjMuNS0xMDQuNiA2OS4xLTkuOSA2LjgtMTguOSAxMC4xLTI2LjkgOS45LTguOS0uMi0yNS45LTUtMzguNi05LjEtMTUuNS01LTI3LjktNy43LTI2LjgtMTYuMyAuNi00LjUgNi43LTkgMTguNC0xMy43IDcyLjMtMzEuNSAxMjAuNS01Mi4zIDE0NC42LTYyLjMgNjguOS0yOC42IDgzLjItMzMuNiA5Mi41LTMzLjggMi4xIDAgNi42IC41IDkuNiAyLjkgMiAxLjcgMy4yIDQuMSAzLjUgNi43IC41IDMuMiAuNiA2LjUgLjQgOS44eiJdCiAgICB9OwogICAgZmFUZWxlZ3JhbVBsYW5lID0gZmFUZWxlZ3JhbTsKICAgIGZhSXR1bmVzTm90ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJpdHVuZXMtbm90ZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmM2I1IiwgIk0zODEuOSAzODguMmMtNi40IDI3LjQtMjcuMiA0Mi44LTU1LjEgNDgtMjQuNSA0LjUtNDQuOSA1LjYtNjQuNS0xMC4yLTIzLjktMjAuMS0yNC4yLTUzLjQtMi43LTc0LjQgMTctMTYuMiA0MC45LTE5LjUgNzYuOC0yNS44IDYtMS4xIDExLjItMi41IDE1LjYtNy40IDYuNC03LjIgNC40LTQuMSA0LjQtMTYzLjIgMC0xMS4yLTUuNS0xNC4zLTE3LTEyLjMtOC4yIDEuNC0xODUuNyAzNC42LTE4NS43IDM0LjYtMTAuMiAyLjItMTMuNCA1LjItMTMuNCAxNi43IDAgMjM0LjcgMS4xIDIyMy45LTIuNSAyMzkuNS00LjIgMTguMi0xNS40IDMxLjktMzAuMiAzOS41LTE2LjggOS4zLTQ3LjIgMTMuNC02My40IDEwLjQtNDMuMi04LjEtNTguNC01OC0yOS4xLTg2LjYgMTctMTYuMiA0MC45LTE5LjUgNzYuOC0yNS44IDYtMS4xIDExLjItMi41IDE1LjYtNy40IDEwLjEtMTEuNSAxLjgtMjU2LjYgNS4yLTI3MC4yIC44LTUuMiAzLTkuNiA3LjEtMTIuOSA0LjItMy41IDExLjgtNS41IDEzLjQtNS41IDIwNC0zOC4yIDIyOC45LTQzLjEgMjMyLjQtNDMuMSAxMS41LS44IDE4LjEgNiAxOC4xIDE3LjYgLjIgMzQ0LjUgMS4xIDMyNi0xLjggMzM4LjV6Il0KICAgIH07CiAgICBmYUxlc3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibGVzcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDFkIiwgIk02MTMuMiAyMTljMC0yMC41IDMuMi0zMi42IDMuMi01NC42IDAtMzQuMi0xMi42LTQ1LjItNDAuNS00NS4ybC0yMC41IDAgMCAyNC4yIDYuMyAwYzE0LjIgMCAxNy4zIDQuNyAxNy4zIDIyLjEgMCAxNi4zLTEuNiAzMi42LTEuNiA1MS41IDAgMjQuMiA3LjkgMzMuNiAyMy42IDM3LjNsMCAxLjZjLTE1LjggMy43LTIzLjYgMTMuMS0yMy42IDM3LjMgMCAxOC45IDEuNiAzNC4yIDEuNiA1MS41IDAgMTcuOS0zLjcgMjIuNi0xNy4zIDIyLjZsMCAuNS02LjMgMCAwIDI1LjIgMjAuNSAwYzI3LjggMCA0MC41LTExIDQwLjUtNDUuMiAwLTIyLjYtMy4yLTM0LjItMy4yLTU0LjYgMC0xMSA2LjgtMjIuNiAyNy4zLTIzLjZsMC0yNy4zYy0yMC41LS43LTI3LjMtMTIuMy0yNy4zLTIzLjN6TTUwNy42IDI1MWMtMTUuOC02LjMtMzAuNS0xMC0zMC41LTIwLjUgMC03LjkgNi4zLTEyLjYgMTcuOS0xMi42czIyLjEgNC43IDMzLjYgMTMuMWwyMS0yNy44Yy0xMy4xLTEwLTMxLTIwLjUtNTUuMi0yMC41LTM1LjcgMC01OS45IDIwLjUtNTkuOSA0OS40IDAgMjUuNyAyMi42IDM4LjkgNDEuNSA0Ni4yIDE2LjMgNi4zIDMyLjEgMTEuNiAzMi4xIDIyLjEgMCA3LjktNi4zIDEzLjEtMjAuNSAxMy4xLTEzLjEgMC0yNi4zLTUuMy00MC41LTE2LjNsLTIxIDMwLjVjMTUuOCAxMy4xIDM5LjkgMjIuMSA1OS45IDIyLjEgNDIgMCA2NC42LTIyLjEgNjQuNi01MXMtMjIuNS00MS00My00Ny44ek0xNDguNyAzMTAuNGMtMy43IDAtOC40LTMuMi04LjQtMTMuMWwwLTE3OC4yLTc0LjYgMGMtMjguNCAwLTQxIDExLTQxIDQ1LjIgMCAyMi42IDMuMiAzNS4yIDMuMiA1NC42IDAgMTEtNi44IDIyLjYtMjcuMyAyMy42bDAgMjcuM2MyMC41IC41IDI3LjMgMTIuMSAyNy4zIDIzLjEgMCAxOS40LTMuMiAzMS0zLjIgNTMuNiAwIDM0LjIgMTIuNiA0NS4yIDQwLjUgNDUuMmwyMC41IDAgMC0yNC4yLTYuMyAwYy0xMy4xIDAtMTcuMy01LjMtMTcuMy0yMi42czEuNi0zMi4xIDEuNi01MS41YzAtMjQuMi03LjktMzMuNi0yMy42LTM3LjNsMC0xLjZjMTUuOC0zLjcgMjMuNi0xMy4xIDIzLjYtMzcuMyAwLTE4LjktMS42LTM0LjItMS42LTUxLjVzMy43LTIyLjEgMTcuMy0yMi4xbDE0LjEgMCAwIDE1MC44YzAgMzIuMSAxMSA1My4xIDQzLjEgNTMuMSAxMCAwIDE3LjktMS42IDIzLjYtMy43bC01LjMtMzQuMmMtMy4xIC44LTQuNiAuOC02LjIgLjh6TTM4MC40IDI1MWMtMTYuMy02LjMtMzEtMTAtMzEtMjAuNSAwLTcuOSA2LjMtMTIuNiAxNy45LTEyLjZzMjIuMSA0LjcgMzMuNiAxMy4xbDIxLTI3LjhjLTEzLjEtMTAtMzEtMjAuNS01NS4yLTIwLjUtMzUuNyAwLTU5LjkgMjAuNS01OS45IDQ5LjQgMCAyNS43IDIyLjYgMzguOSA0MS41IDQ2LjIgMTYuMyA2LjMgMzIuMSAxMS42IDMyLjEgMjIuMSAwIDcuOS02LjMgMTMuMS0yMC41IDEzLjEtMTMuMSAwLTI2LjMtNS4zLTQwLjUtMTYuM2wtMjAuNSAzMC41YzE1LjggMTMuMSAzOS45IDIyLjEgNTkuOSAyMi4xIDQyIDAgNjQuNi0yMi4xIDY0LjYtNTEgLjEtMjguOS0yMi41LTQxLTQzLTQ3Ljh6bS0xNTUtNjguOGMtMzguNCAwLTc1LjEgMzIuMS03NC4xIDgyLjUgMCA1MiAzNC4yIDgyLjUgNzkuMyA4Mi41IDE4LjkgMCAzOS45LTYuOCA1Ni4yLTE3LjlMMjcxIDMwMS41Yy0xMS42IDYuOC0yMi42IDEwLTM0LjIgMTAtMjEgMC0zNy4zLTEwLTQxLjUtMzQuMmw5NS4yIDBjLjUtMy43IDEuNi0xMSAxLjYtMTkuNCAuNi00Mi42LTIyLjYtNzUuNy02Ni43LTc1Ljd6bS0zMCA2Ni4yYzMuMi0yMSAxNS44LTMxIDMwLjUtMzEgMTguOSAwIDI2LjMgMTMuMSAyNi4zIDMxbC01Ni44IDB6Il0KICAgIH07CiAgICBmYUZpcmVmb3ggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmlyZWZveCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjY5IiwgIk01MDMuNSAyNDEuNWMtLjEtMS42LS4yLTMuMS0uMi00LjdsMC0uMS0uNC00LjcgMC0uMWMtMS4zLTEzLjktMy43LTI3LjctNy4zLTQxLjIgMC0uMSAwLS4xLS4xLS4ybC0xLjEtNGMtLjEtLjItLjEtLjUtLjItLjYtLjQtMS4yLS43LTIuNS0xLjEtMy43LS4xLS4yLS4xLS42LS4yLS44LS40LTEuMi0uNy0yLjQtMS4xLTMuNS0uMS0uNC0uMi0uNi0uNC0xLS40LTEuMi0uNy0yLjMtMS4yLTMuNWwtLjQtMS4xYy0uNC0xLjEtLjgtMi4zLTEuMi0zLjQtLjEtLjMtLjItLjctLjQtMS0uNS0xLjEtLjgtMi4zLTEuMy0zLjQtLjEtLjItLjItLjYtLjQtLjgtLjUtMS4yLTEtMi4zLTEuNC0zLjUgMC0uMS0uMS0uMi0uMS0uNC0xLjYtMy44LTMuMi03LjctNS0xMS40bC0uNC0uN2MtLjUtMS0uOC0xLjgtMS4zLTIuNi0uMi0uNS0uNS0xLjEtLjctMS42LS40LS44LS44LTEuNi0xLjItMi40LS40LS42LS42LTEuMi0xLTEuOHMtLjgtMS40LTEuMi0yLjNjLS40LS42LS43LTEuMy0xLjEtMS45cy0uOC0xLjQtMS4yLTIuMmMtLjQtLjctLjgtMS40LTEuMi0yLS40LS43LS44LTEuMy0xLjItMnMtLjgtMS4zLTEuMi0yLS44LTEuMy0xLjItMS45LS44LTEuNC0xLjMtMi4yYy0uNC0uNi0uOC0xLjItMS4yLTEuOGwtMS40LTIuMWMtLjQtLjYtLjgtMS4yLTEuMi0xLjgtLjUtLjctMS4xLTEuNi0xLjYtMi4zLS40LS41LS43LTEuMS0xLjEtMS42bC0xLjgtMi41Yy0uNC0uNS0uNi0uOC0xLTEuMy0xLTEuMy0xLjgtMi41LTIuOC0zLjctNy4yLTkuNC0xNS0xOC4zLTIzLjUtMjYuNi01LjctNi0xMS44LTExLjUtMTguMy0xNi43LTQtMy41LTguMi02LjctMTIuNS05LjgtNy43LTUuOC0xNi0xMC44LTI0LjYtMTUuMS0yLjQtMS4zLTQuOC0yLjUtNy4yLTMuNy0xNy43LTguNi0zNi4zLTE1LjItNTUuNC0xOS42LTEuOS0uNC0zLjgtLjgtNS42LTEuMmwtLjEgMGMtMS0uMS0xLjgtLjQtMi44LS41LTEyLjUtMi40LTI1LjItMy43LTM4LTRsLTEwLjYgMGMtMTUuMyAuMi0zMC41IDEuOS00NS41IDUtMzMuNiA3LjEtNjMuMiAyMS4yLTgyLjkgMzktMS4xIDEtMS45IDEuNy0yLjQgMi4ybC0uNSAuNSAuMSAwYzAgMCAuMSAwIC4xIDBzMC0uMSAwLS4xbC0uMSAuMWMuMS0uMSAuMS0uMSAuMi0uMSAxNC42LTguOCAzNC45LTE2IDQ5LjQtMTkuNmw1LjktMS40Yy40LS4xIC44LS4xIDEuMi0uMiAxLjctLjQgMy40LS43IDUuMi0xLjEgLjIgMCAuNi0uMSAuOC0uMSA2NC4yLTExLjcgMTMyLjYgNy41IDE4MC4yIDUzIDEwLjMgOS44IDE5LjMgMjAuOCAyNi45IDMyLjggMzAuNCA0OS4yIDI3LjUgMTExLjEgMy44IDE0Ny42LTM0LjQgNTMtMTExLjQgNzEuMy0xNTkgMjQuOC0xNi0xNS41LTI1LjItMzYuNy0yNS42LTU5LS4yLTEwLjcgMi0yMS4yIDYuMi0zMSAxLjctMy44IDEzLjEtMjUuNyAxOC4yLTI0LjYtMTMuMS0yLjgtMzcuNSAyLjYtNTQuNyAyOC4yLTE1LjQgMjIuOS0xNC41IDU4LjItNSA4My4zLTYtMTIuNC0xMC4xLTI1LjYtMTIuMS0zOS4yLTEyLjItODIuNiA0My4zLTE1MyA5NC4zLTE3MC41LTI3LjUtMjQtOTYuNS0yMi4zLTE0Ny43IDE1LjQtMjkuOSAyMi01MS4yIDUzLjItNjIuNSA5MC40IDEuNy0yMC45IDkuNi01Mi4xIDI1LjgtODMuOS0xNy4yIDguOS0zOSAzNy00OS44IDYyLjktMTUuNiAzNy40LTIxIDgyLjItMTYuMSAxMjQuOCAuNCAzLjIgLjcgNi40IDEuMSA5LjYgMTkuOSAxMTcuMSAxMjIgMjA2LjQgMjQ0LjggMjA2LjQgMTM3LjEgMCAyNDguMy0xMTEuMiAyNDguMy0yNDguNC0uMS00LjUtLjItOS4xLS41LTEzLjV6Il0KICAgIH07CiAgICBmYUthZ2dsZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJrYWdnbGUiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjVmYSIsICJNMzA0LjIgNTAxLjVMMTU4LjQgMzIwLjMgMjk4LjIgMTg1YzIuNi0yLjcgMS43LTEwLjUtNS4zLTEwLjVsLTY5LjIgMGMtMy41IDAtNyAxLjgtMTAuNSA1LjNsLTEzMi4zIDEzMy43IDAtMzA2YzAtNS0yLjUtNy41LTcuNS03LjVMMjEuNSAwQzE2LjUgMCAxNCAyLjUgMTQgNy41bDAgNDk3YzAgNSAyLjUgNy41IDcuNSA3LjVsNTEuOSAwYzUgMCA3LjUtMi41IDcuNS03LjVsMC0xMDkgMzAuOC0yOS4zIDExMC41IDE0MC42YzMgMy41IDYuNSA1LjMgMTAuNSA1LjNsNjYuOSAwYzMuNSAwIDUuNS0xIDYtM2wtMS40LTcuNnoiXQogICAgfTsKICAgIGZhRmFjZWJvb2tNZXNzZW5nZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmFjZWJvb2stbWVzc2VuZ2VyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzOWYiLCAiTTI1Ni42IDhjLTE0MCAwLTI0OC42IDEwMi4zLTI0OC42IDI0MC42IDAgNzIuMyAyOS43IDEzNC44IDc4LjEgMTc3LjkgOC4zIDcuNSA2LjYgMTEuOSA4IDU4LjIgLjEgMy4yIDEgNi40IDIuNiA5LjJzMy45IDUuMiA2LjcgNi45IDUuOSAyLjggOS4xIDMgNi41LS4zIDkuNS0xLjZDMTc0LjkgNDc5IDE3NS42IDQ3Ny4yIDE4NC42IDQ3OS42IDMzNy44IDUyMS44IDUwNCA0MjMuNyA1MDQgMjQ4LjYgNTA0IDExMC4zIDM5Ni42IDggMjU2LjYgOHpNNDA1LjggMTkzLjFsLTczIDExNS42Yy0yLjggNC4zLTYuNCA4LjEtMTAuNiAxMXMtOS4xIDQuOC0xNC4xIDUuOC0xMC4zIC44LTE1LjMtLjQtOS43LTMuNC0xMy44LTYuNGwtNTguMS00My41Yy0yLjYtMS45LTUuOC0zLTktM3MtNi40IDEuMS05IDNsLTc4LjQgNTkuNGMtMTAuNSA3LjktMjQuMi00LjYtMTcuMS0xNS43bDczLTExNS42YzIuOC00LjMgNi40LTguMSAxMC42LTExczkuMS00LjggMTQuMS01LjggMTAuMy0uOCAxNS4zIC40IDkuNyAzLjQgMTMuOSA2LjRsNTguMSA0My41YzIuNiAxLjkgNS44IDMgOSAzczYuNC0xLjEgOS0zbDc4LjQtNTkuNGMxMC40LTggMjQuMSA0LjUgMTcuMSAxNS42eiJdCiAgICB9OwogICAgZmFBdWRpYmxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImF1ZGlibGUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjM3MyIsICJNNjQwIDE5OS45bDAgNTQtMzIwIDIwMC0zMjAtMTk5LjkgMC01NCAzMjAgMjAwIDMyMC0yMDAuMXptLTE5NC41IDcybDQ3LjEtMjkuNGMtMzcuMi01NS44LTEwMC43LTkyLjYtMTcyLjctOTIuNnMtMTM1LjUgMzYuNy0xNzIuNiA5Mi40bC4zIDBjMi41LTIuMyA1LjEtNC41IDcuNy02LjcgODkuNy03NC40IDIxOS40LTU4LjEgMjkwLjIgMzYuM3pNMjI1LjQgMjkwLjdjMTYuOS0xMS45IDM2LjUtMTguNyA1Ny40LTE4LjcgMzQuNCAwIDY1LjIgMTguNCA4Ni40IDQ3LjZsNDUuNC0yOC40Yy0yMC45LTI5LjktNTUuNi00OS41LTk0LjgtNDkuNS0zOC45IDAtNzMuNCAxOS40LTk0LjQgNDl6TTEwMy42IDE2MS4xQzIzNS40IDU2LjggNDIxLjggODQuNyA1MjEuMSAyMjMuMmwuNyAxIDQ4LjgtMzAuNGMtNTMuNS04MS43LTE0NS44LTEzNS43LTI1MC43LTEzNS43LTEwMy41IDAtMTk2LjYgNTMuNS0yNTAuNSAxMzUuNiA5LjktMTAuNSAyMi43LTIzLjUgMzQuMi0zMi42eiJdCiAgICB9OwogICAgZmFQYXRyZW9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBhdHJlb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNkOSIsICJNNDkwIDE1My44Yy0uMS02NS40LTUxLTExOS0xMTAuNy0xMzguMy03NC4yLTI0LTE3Mi0yMC41LTI0Mi45IDEyLjktODUuOCA0MC41LTExMi44IDEyOS4zLTExMy44IDIxNy44LS44IDcyLjggNi40IDI2NC40IDExNC42IDI2NS44IDgwLjMgMSA5Mi4zLTEwMi41IDEyOS41LTE1Mi4zIDI2LjQtMzUuNSA2MC41LTQ1LjUgMTAyLjQtNTUuOSA3Mi0xNy44IDEyMS4xLTc0LjcgMTIxLTE1MGwtLjEgMHoiXQogICAgfTsKICAgIGZhVm52ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZudiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDBiIiwgIk0xMDQuOSAzNTJjLTM0LjEgMC00Ni40LTMwLjQtNDYuNC0zMC40TDIuNiAyMTAuMVMtNy44IDE5MiAxMyAxOTJsMzIuOCAwYzEwLjQgMCAxMy4yIDguNyAxOC44IDE4LjFsMzYuNyA3NC41czUuMiAxMy4xIDIxLjEgMTMuMSAyMS4xLTEzLjEgMjEuMS0xMy4xbDM2LjctNzQuNWM1LjYtOS41IDguNC0xOC4xIDE4LjgtMTguMWwzMi44IDBjMjAuOCAwIDEwLjQgMTguMSAxMC40IDE4LjFMMTg2LjQgMzIxLjZTMTc0LjIgMzUyIDE0MCAzNTJsLTM1LjEgMHptMzk1IDBjLTM0LjEgMC00Ni40LTMwLjQtNDYuNC0zMC40TDM5Ny42IDIxMC4xUzM4Ny4yIDE5MiA0MDggMTkybDMyLjggMGMxMC40IDAgMTMuMiA4LjcgMTguOCAxOC4xbDM2LjcgNzQuNXM1LjIgMTMuMSAyMS4xIDEzLjEgMjEuMS0xMy4xIDIxLjEtMTMuMWwzNi44LTc0LjVjNS42LTkuNSA4LjQtMTguMSAxOC44LTE4LjFsMzIuOSAwYzIwLjggMCAxMC40IDE4LjEgMTAuNCAxOC4xTDU4MS41IDMyMS42UzU2OS4zIDM1MiA1MzUuMSAzNTJsLTM1LjIgMHpNMzM3LjYgMTkyYzM0LjEgMCA0Ni40IDMwLjQgNDYuNCAzMC40bDU1LjkgMTExLjVTNDUwLjMgMzUyIDQyOS41IDM1MmwtMzIuOCAwYy0xMC40IDAtMTMuMi04LjctMTguOC0xOC4xbC0zNi43LTc0LjVzLTUuMi0xMy4xLTIxLjEtMTMuMS0yMS4xIDEzLjEtMjEuMSAxMy4xbC0zNi43IDc0LjVjLTUuNiA5LjQtOC40IDE4LjEtMTguOCAxOC4xbC0zMi45IDBjLTIwLjggMC0xMC40LTE4LjEtMTAuNC0xOC4xbDU1LjktMTExLjVTMjY4LjMgMTkyIDMwMi41IDE5MmwzNS4xIDB6Il0KICAgIH07CiAgICBmYVBhZ2VsaW5lcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwYWdlbGluZXMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjE4YyIsICJNMzg0LjEgMzEyLjdjLTU1LjEgMTM2LjctMTg3LjEgNTQtMTg3LjEgNTQtNDAuNSA4MS44LTEwNy40IDEzNC40LTE4NC42IDEzNC43LTE2LjEgMC0xNi42LTI0LjQgMC0yNC40IDY0LjQtLjMgMTIwLjUtNDIuNyAxNTcuMi0xMTAuMS00MS4xIDE1LjktMTE4LjYgMjcuOS0xNjEuNi04Mi4yIDEwOS00NC45IDE1OS4xIDExLjIgMTc4LjMgNDUuNSA5LjktMjQuNCAxNy01MC45IDIxLjYtNzkuNyAwIDAtMTM5LjcgMjEuOS0xNDkuNS05OC4xIDExOS4xLTQ3LjkgMTUyLjYgNzYuNyAxNTIuNiA3Ni43IDEuNi0xNi43IDMuMy01Mi42IDMuMy01My40IDAgMC0xMDYuMy03My43LTM4LjEtMTY1LjIgMTI0LjYgNDMgNjEuNCAxNjIuNCA2MS40IDE2Mi40IC41IDEuNiAuNSAyMy44IDAgMzMuNCAwIDAgNDUuMi04OSAxMzYuNC01Ny41LTQuMiAxMzQtMTQxLjkgMTA2LjQtMTQxLjkgMTA2LjQtNC40IDI3LjQtMTEuMiA1My40LTIwIDc3LjUgMCAwIDgzLTkxLjggMTcyLTIweiJdCiAgICB9OwogICAgZmFBbWF6b24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYW1hem9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyNzAiLCAiTTI1Ny43IDE2Mi43Yy00OC43IDEuOC0xNjkuNSAxNS41LTE2OS41IDExNy41IDAgMTA5LjUgMTM4LjMgMTE0IDE4My41IDQzLjIgNi41IDEwLjIgMzUuNCAzNy41IDQ1LjMgNDYuOGw1Ni44LTU2cy0zMi4zLTI1LjMtMzIuMy01Mi44bDAtMTQ3LjFDMzQxLjUgODkgMzE3IDMyIDIyOS4yIDMyIDE0MS4yIDMyIDk0LjUgODcgOTQuNSAxMzYuM2w3My41IDYuOGMxNi4zLTQ5LjUgNTQuMi00OS41IDU0LjItNDkuNSA0MC43LS4xIDM1LjUgMjkuOCAzNS41IDY5LjF6bTAgODYuOGMwIDgwLTg0LjIgNjgtODQuMiAxNy4yIDAtNDcuMiA1MC41LTU2LjcgODQuMi01Ny44bDAgNDAuNnpNMzkzLjcgNDEzYy03LjcgMTAtNzAgNjctMTc0LjUgNjdTMzQuNyA0MDguNSAxMC4yIDM3OWMtNi44LTcuNyAxLTExLjMgNS41LTguMyA3My4zIDQ0LjUgMTg3LjggMTE3LjggMzcyLjUgMzAuMyA3LjUtMy43IDEzLjMgMiA1LjUgMTJ6bTM5LjggMi4yYy02LjUgMTUuOC0xNiAyNi44LTIxLjIgMzEtNS41IDQuNS05LjUgMi43LTYuNS0zLjhzMTkuMy00Ni41IDEyLjctNTVjLTYuNS04LjMtMzctNC4zLTQ4LTMuMi0xMC44IDEtMTMgMi0xNC0uMy0yLjMtNS43IDIxLjctMTUuNSAzNy41LTE3LjUgMTUuNy0xLjggNDEtLjggNDYgNS43IDMuNyA1LjEgMCAyNy4xLTYuNSA0My4xeiJdCiAgICB9OwogICAgZmFFbnZpcmEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZW52aXJhIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyOTkiLCAiTTAgMzJjNDc3LjYgMCAzNjYuNiAzMTcuMyAzNjcuMSAzNjYuM2w4MC45IDgxLjctMjYgMC03MC40LTcxLjJDMzEyLjYgNDEzIDIyNy4yIDQ0My4zIDEzNy4yIDM3MS44IDQ3IDMwMC4zIDUyIDIxNC43IDAgMzJ6TTc5LjcgNzhjLTQ5LjctMjMuNS01LjIgOS4yLTUuMiA5LjIgNDUuMiAzMS4yIDY2IDczLjcgOTAuMiAxMTkuOSAzMS41IDYwLjIgNzkgMTM5LjcgMTQ0LjIgMTY3LjcgNjUgMjggMzQuMiAxMi41IDYtOC41LTI4LjItMjEuMi02OC4yLTg3LTkxLTEzMC4yLTMxLjctNjAtNjEtMTE4LjYtMTQ0LjItMTU4LjF6Il0KICAgIH07CiAgICBmYUxpbm9kZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsaW5vZGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJiOCIsICJNMzY2LjMgMTg2LjlsLTU5LjUgMzYuOS0uOCAzNi45LTI5LjMtMTkuMy0zOS40IDI0LjNjMi4yIDU1LjIgMi41IDU5LjMgMi41IDU5LjVsLTk3LjIgNjUuNC0xNS4xLTEwNC43IDEwOC4xLTYyLTQwLjItMjYtNzUuNCAzOC41LTIxLTE0My4zIDEyOS00OS40LTkxLjMtNDMuNi0xMjUuNyAzOS40IDI3LjcgMTM0LjkgNDEuOSAzMi43LTMxLjggMTUuMSAyMC45IDEwMS40IDI5LjMgMjcuNy0yMC45IDEyLjYgMTYuOCA3OC44IDY2LjIgNjkuNmMtMTAuOC03NC44LTExLjctNzguNi0xMS43LTc4LjhsNzcuOS01NS4zQzI0NCAzNjUuNCAyNDIuMyAzNjcgMjQyLjMgMzY3bC44IDI0LjMgMzMuNSAyOC41LS44LTc3LjEgNDYuOS0zMy41IDI2LjgtMTguNC0yLjUgMzYgMjUuMSAxNy42IDYuNy03NC42IDU4LjctNDMuNi03MS4yLTM5LjR6Il0KICAgIH07CiAgICBmYUFjY3Vzb2Z0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFjY3Vzb2Z0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzNjkiLCAiTTMyMi4xIDI1MmwwLTEtNTEuMi02NS44cy0xMiAxLjYtMjUgMTUuMWMtOSA5LjMtMjQyLjEgMjM5LjEtMjQzLjQgMjQwLjktNyAxMCAxLjYgNi44IDE1LjcgMS43IC44IDAgMTE0LjUtMzYuNiAxMTQuNS0zNi42IC41LS42LS4xLS4xIC42LS42LS40LTUuMS0uOC0yNi4yLTEtMjcuNy0uNi01LjIgMi4yLTYuOSA3LTguOWw5Mi42LTMzLjhjLjYtLjggODguNS04MS43IDkwLjItODMuM3pNNDgyLjIgMzcyLjFjMTMuMyAxNi4xIDIwLjcgMTMuMyAzMC44IDkuMyAzLjItMS4yIDExNS40LTQ3LjYgMTE3LjgtNDguOSA4LTQuMy0xLjctMTYuNy03LjItMjMuNC0yLjEtMi41LTIwNS4xLTI0NS42LTIwNy4yLTI0OC4zLTkuNy0xMi4yLTE0LjMtMTIuOS0zOC40LTEyLjgtMTAuMiAwLTEwNi44IC41LTExNi41IC42LTE5LjIgLjEtMzIuOS0uMy0xOS4yIDE2LjkgNy43IDkuNSAyMzQuMiAyOTkuNyAyMzkuOSAzMDYuNnptMTUyLjcgMS42Yy0yLjMtLjMtMjQuNi00LjctMzgtNy4yIDAgMC0xMTUgNTAuNC0xMTcuNSA1MS42LTE2IDcuMy0yNi45LTMuMi0zNi43LTE0LjZsLTU3LjEtNzRjLTUuNC0uOS02MC40LTkuNi02NS4zLTkuMy0zLjEgLjItOS42IC44LTE0LjQgMi45LTQuOSAyLjEtMTQ1LjIgNTIuOC0xNTAuMiA1NC43LTUuMSAyLTExLjQgMy42LTExLjEgNy42IC4yIDIuNSAyIDIuNiA0LjYgMy41IDIuNyAuOCAzMDAuOSA2Ny42IDMwOCA2OS4xIDE1LjYgMy4zIDM4LjUgMTAuNSA1My42IDEuNyAyLjEtMS4yIDEyMy44LTc2LjQgMTI1LjgtNzcuOCA1LjQtNCA0LjMtNi44LTEuNy04LjJ6Il0KICAgIH07CiAgICBmYUVybGFuZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlcmxhbmciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjM5ZCIsICJNODcuMiA1My41bC04Ny4yIDAgMCA0MDUgMTAwLjQgMGMtNDkuNy01Mi42LTc4LjgtMTI1LjMtNzguNy0yMTIuMS0uMS03Ni43IDI0LTE0Mi43IDY1LjUtMTkyLjl6bTIzOC4yIDkuN2MtNDUuOSAuMS04NS4xIDMzLjUtODkuMiA4My4ybDE2OS45IDBjLTEuMS00OS43LTM0LjUtODMuMS04MC43LTgzLjJ6bTIzMC43LTkuNmwuMyAwLS4xLS4xLS4yIC4xem0uMyAwYzMxLjQgNDIuNyA0OC43IDk3LjUgNDYuMiAxNjIuNyAuNSA2IC41IDExLjcgMCAyNC4xbC0zNzIuNCAwYy0uMiAxMDkuNyAzOC45IDE5NC45IDEzOC42IDE5NS4zIDY4LjUtLjMgMTE4LTUxIDE1MS45LTEwNi4xbDk2LjQgNDguMmMtMTcuNCAzMC45LTM2LjUgNTcuOC01Ny45IDgwLjhsODAuOCAwIDAtNDA1LTgzLjYgMHoiXQogICAgfTsKICAgIGZhQ2NEaXNjb3ZlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYy1kaXNjb3ZlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWYyIiwgIk01MjAuNCAxOTYuMWMwLTcuOS01LjUtMTIuMS0xNS42LTEyLjFsLTQuOSAwIDAgMjQuOSA0LjcgMGMxMC4zIDAgMTUuOC00LjQgMTUuOC0xMi44ek01MjggMzJMNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw0ODAgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1MmMwLTI2LjUtMjEuNS00OC00OC00OHpNNDgzLjkgMTcwLjljMjIuNiAwIDUyLjktNC4xIDUyLjkgMjQuNCAwIDEyLjYtNi42IDIwLjctMTguNyAyMy4ybDI1LjggMzQuNC0xOS42IDAtMjIuMi0zMi44LTIuMiAwIDAgMzIuOC0xNiAwIDAtODJ6TTQyOCAxNzFsNDUuMyAwIDAgMTQtMjkuMyAwIDAgMTguMiAyOC4zIDAgMCAxMy44LTI4LjMgMCAwIDIyLjIgMjkuMyAwIDAgMTMuOC00NS4zIDAgMC04MnptLTY4LjcgMGwyMS45IDU1LjIgMjIuMi01NS4yIDE3LjUgMC0zNS41IDg0LjItOC42IDAtMzUtODQuMiAxNy41IDB6bS01NS45IDg2LjJhNDQuNiA0NC42IDAgMSAxIDAtODkuMiA0NC42IDQ0LjYgMCAxIDEgMCA4OS4yem0tNDkuMy04My4xbDAgMTljLTIwLjEtMjAuMS00Ni44LTQuNy00Ni44IDE5IDAgMjUgMjcuNSAzOC41IDQ2LjggMTkuMmwwIDE5Yy0yOS43IDE0LjMtNjMuMy01LjctNjMuMy0zOC4yIDAtMzEuMiAzMy4xLTUzIDYzLjMtMzh6bS05Ny4yIDY2LjNjMTEuNCAwIDIyLjQtMTUuMy0zLjMtMjQuNC0xNS01LjUtMjAuMi0xMS40LTIwLjItMjIuNyAwLTIzLjIgMzAuNi0zMS40IDQ5LjctMTQuM2wtOC40IDEwLjhjLTEwLjQtMTEuNi0yNC45LTYuMi0yNC45IDIuNSAwIDQuNCAyLjcgNi45IDEyLjMgMTAuMyAxOC4yIDYuNiAyMy42IDEyLjUgMjMuNiAyNS42IDAgMjkuNS0zOC44IDM3LjQtNTYuNiAxMS4zbDEwLjMtOS45YzMuNyA3LjEgOS45IDEwLjggMTcuNSAxMC44ek01NS40IDI1M2wtMjMuNCAwIDAtODIgMjMuNCAwYzI2LjEgMCA0NC4xIDE3IDQ0LjEgNDEuMSAwIDE4LjUtMTMuMiA0MC45LTQ0LjEgNDAuOXptNjcuNSAwbC0xNiAwIDAtODIgMTYgMCAwIDgyek01NDQgNDMzYzAgOC4yLTYuOCAxNS0xNSAxNWwtNDAxIDBjMTg5LjYtMzUuNiAzODIuNy0xMzkuMiA0MTYtMTYwbDAgMTQ1ek03NC4xIDE5MS42Yy01LjItNC45LTExLjYtNi42LTIxLjktNi42bC00LjIgMCAwIDU0LjIgNC4yIDBjMTAuMyAwIDE3LTIgMjEuOS02LjQgNS43LTUuMiA4LjktMTIuOCA4LjktMjAuN3MtMy4yLTE1LjUtOC45LTIwLjV6Il0KICAgIH07CiAgICBmYVNhZmFyaSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzYWZhcmkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI2NyIsICJNMjc0LjcgMjc0LjdMMjM3LjMgMjM3LjMgMTY2IDM0NiAyNzQuNyAyNzQuN3pNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MTEuOCAxODIuOGwxNC44LTYuMWMxLS40IDItLjYgMy4xLS42czIuMSAuMiAzLjEgLjYgMS44IDEgMi42IDEuNyAxLjMgMS42IDEuNyAyLjYgLjYgMiAuNiAzLjEtLjIgMi4xLS42IDMuMS0xIDEuOS0xLjcgMi42LTEuNiAxLjMtMi42IDEuN0w0MTggMTk3LjZjLTIgLjgtNC4yIC44LTYuMSAwcy0zLjUtMi40LTQuMy00LjMtLjgtNC4yIDAtNi4xIDIuNC0zLjUgNC4zLTQuM3pNMzE0LjQgOTRsNi4xLTE0LjhjLjgtMiAyLjQtMy41IDQuMy00LjNzNC4yLS44IDYuMSAwIDMuNSAyLjQgNC4zIDQuMyAuOCA0LjIgMCA2LjFsLTYuMSAxNC44Yy0uOCAyLTIuNCAzLjUtNC4zIDQuM3MtNC4yIC44LTYuMSAwYy0xLS40LTEuOS0xLTIuNi0xLjdzLTEuMy0xLjYtMS43LTIuNi0uNi0yLS42LTMuMSAuMi0yLjEgLjYtMy4xek0yNTYgNjBjMi4xIDAgNC4yIC44IDUuNyAyLjNTMjY0IDY1LjkgMjY0IDY4bDAgMTZjMCAyLjEtLjggNC4yLTIuMyA1LjdzLTMuNSAyLjMtNS43IDIuMy00LjItLjgtNS43LTIuMy0yLjMtMy41LTIuMy01LjdsMC0xNmMwLTIuMSAuOC00LjIgMi4zLTUuN1MyNTMuOSA2MCAyNTYgNjB6TTE4MSA3NC45YzEtLjQgMi0uNiAzLjEtLjZzMi4xIC4yIDMuMSAuNiAxLjkgMSAyLjYgMS43IDEuMyAxLjYgMS43IDIuNkwxOTcuNiA5NGMuNCAxIC43IDIgLjcgMy4xcy0uMiAyLjEtLjYgMy4xLTEgMS45LTEuNyAyLjYtMS42IDEuNC0yLjYgMS44LTIgLjYtMy4xIC42LTIuMS0uMi0zLjEtLjYtMS45LTEtMi42LTEuOC0xLjMtMS43LTEuNy0yLjdsLTYuMS0xNC44Yy0uOC0yLS44LTQuMiAwLTYuMXMyLjQtMy41IDQuMy00LjN6bS02My42IDQyLjVjMS41LTEuNSAzLjUtMi4zIDUuNy0yLjNzNC4yIC44IDUuNyAyLjNMMTQwIDEyOC43YzEuNSAxLjUgMi4zIDMuNSAyLjMgNS42cy0uOCA0LjEtMi4zIDUuNmMtMS41IDEuNS0zLjUgMi4zLTUuNyAyLjNzLTQuMi0uOC01LjctMi4zbC0xMS4zLTExLjNjLTEuNS0xLjUtMi4zLTMuNS0yLjMtNS42cy44LTQuMSAyLjMtNS42bDAgMHpNNjAgMjU2YzAtMi4xIC44LTQuMiAyLjMtNS43UzY1LjkgMjQ4IDY4IDI0OGwxNiAwYzIuMSAwIDQuMiAuOCA1LjcgMi4zczIuMyAzLjUgMi4zIDUuNy0uOCA0LjItMi4zIDUuNy0zLjUgMi4zLTUuNyAyLjNsLTE2IDBjLTIuMSAwLTQuMi0uOC01LjctMi4zUzYwIDI1OC4xIDYwIDI1NnptNDAuMiA3My4ybC0xNC44IDYuMWMtMSAuNC0yIC42LTMuMSAuNnMtMi4xLS4yLTMuMS0uNi0xLjktMS0yLjYtMS43LTEuMy0xLjYtMS43LTIuNi0uNi0yLS42LTMuMSAuMi0yLjEgLjYtMy4xIDEtMS45IDEuNy0yLjYgMS42LTEuMyAyLjYtMS43TDk0IDMxNC40YzItLjggNC4yLS44IDYuMSAwczMuNSAyLjQgNC4zIDQuMyAuOCA0LjIgMCA2LjEtMi40IDMuNS00LjMgNC4zem00LjMtMTM2Yy0uNCAxLTEgMS45LTEuNyAyLjZzLTEuNiAxLjMtMi42IDEuNy0yIC42LTMuMSAuNi0yLjEtLjItMy4xLS42bC0xNC44LTYuMWMtMi0uOC0zLjUtMi40LTQuMy00LjNzLS44LTQuMiAwLTYuMSAyLjQtMy41IDQuMy00LjMgNC4yLS44IDYuMSAwbDE0LjggNi4xYzIgLjggMy41IDIuNCA0LjMgNC4zcy44IDQuMiAwIDYuMWwwIDB6TTE5Ny42IDQxOGwtNi4xIDE0LjhjLS40IDEtMSAxLjktMS43IDIuNnMtMS42IDEuMy0yLjYgMS43LTIgLjYtMy4xIC42LTIuMS0uMi0zLjEtLjYtMS45LTEtMi42LTEuNy0xLjMtMS42LTEuNy0yLjYtLjYtMi0uNi0zLjEgLjItMi4xIC42LTMuMWw2LjEtMTQuOGMuNC0xIDEtMS45IDEuNy0yLjdzMS42LTEuNCAyLjYtMS44IDItLjYgMy4xLS42IDIuMSAuMiAzLjEgLjYgMS45IDEgMi42IDEuOCAxLjMgMS43IDEuNyAyLjYgLjYgMiAuNiAzLjEtLjIgMi4xLS43IDMuMXpNMjY0IDQ0NGMwIDIuMS0uOCA0LjItMi4zIDUuN3MtMy41IDIuMy01LjcgMi4zLTQuMi0uOC01LjctMi4zLTIuMy0zLjUtMi4zLTUuN2wwLTE2YzAtMi4xIC44LTQuMiAyLjMtNS43czMuNS0yLjMgNS43LTIuMyA0LjIgLjggNS43IDIuMyAyLjMgMy41IDIuMyA1LjdsMCAxNnptNjctNi45Yy0xIC40LTIgLjYtMy4xIC42cy0yLjEtLjItMy4xLS42LTEuOS0xLTIuNi0xLjctMS4zLTEuNi0xLjctMi42TDMxNC40IDQxOGMtLjgtMi0uOC00LjIgMC02LjFzMi40LTMuNSA0LjMtNC4zIDQuMi0uOCA2LjEgMCAzLjUgMi40IDQuMyA0LjNsNi4xIDE0LjhjLjggMiAuOCA0LjIgMCA2LjFzLTIuNCAzLjUtNC4zIDQuM3ptNjMuNi00Mi41Yy0xLjUgMS41LTMuNSAyLjMtNS43IDIuM3MtNC4yLS44LTUuNy0yLjNMMzcyIDM4My4zYy0xLjUtMS41LTIuMy0zLjUtMi4zLTUuNnMuOC00LjEgMi4zLTUuNiAzLjUtMi4zIDUuNy0yLjMgNC4yIC44IDUuNyAyLjNsMTEuMyAxMS4zYzEuNSAxLjUgMi4zIDMuNSAyLjMgNS42cy0uOCA0LjEtMi4zIDUuNmwwIDB6TTI4Ni4yIDI4Ni4yTDExMC4zIDQwMS43IDIyNS44IDIyNS44IDQwMS43IDExMC4zIDI4Ni4yIDI4Ni4yek00MzcuMSAzMzFjLS44IDItMi40IDMuNS00LjMgNC4zcy00LjIgLjgtNi4xIDBsLTE0LjgtNi4xYy0yLS44LTMuNS0yLjQtNC4zLTQuM3MtLjgtNC4yIDAtNi4xYy40LTEgMS0xLjkgMS43LTIuNnMxLjYtMS4zIDIuNi0xLjcgMi0uNiAzLjEtLjYgMi4xIC4yIDMuMSAuNmwxNC44IDYuMWMyIC44IDMuNSAyLjQgNC4zIDQuM3MuOCA0LjIgMCA2LjF6bTYuOS02N2wtMTYgMGMtMi4xIDAtNC4yLS44LTUuNy0yLjNzLTIuMy0zLjUtMi4zLTUuNyAuOC00LjIgMi4zLTUuNyAzLjUtMi4zIDUuNy0yLjNsMTYgMGMyLjEgMCA0LjIgLjggNS43IDIuM3MyLjMgMy41IDIuMyA1LjctLjggNC4yLTIuMyA1LjctMy41IDIuMy01LjcgMi4zeiJdCiAgICB9OwogICAgZmFTcGFjZUF3ZXNvbWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3BhY2UtYXdlc29tZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNWFjIiwgIk05NiAyNTZsMzIgMCAwIDI1Ni0xMjggMCAwLTE2MCAzMiAwIDAtMzIgMzIgMCAwLTMyIDMyIDAgMC0zMnptNDE2IDk2bDAgMTYwLTEyOCAwIDAtMjU2IDMyIDAgMCAzMiAzMiAwIDAgMzIgMzIgMCAwIDMyIDMyIDB6TTMyMCA2NGwzMiAwIDAgMzg0LTMyIDAgMC0zMi0xMjggMCAwIDMyLTMyIDAgMC0zODQgMzIgMCAwLTMyIDMyIDAgMC0zMiA2NCAwIDAgMzIgMzIgMCAwIDMyem0tMzIgNjRsLTY0IDAgMCA2NCA2NCAwIDAtNjR6Il0KICAgIH07CiAgICBmYU5vZGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibm9kZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDE5IiwgIk0zMTYuMyA0NTJjLTIuMSAwLTQuMi0uNi02LjEtMS42TDI5MSA0MzljLTIuOS0xLjYtMS41LTIuMi0uNS0yLjUgMy44LTEuMyA0LjYtMS42IDguNy00IC40LS4yIDEtLjEgMS40IC4xbDE0LjggOC44Yy41IC4zIDEuMyAuMyAxLjggMEwzNzUgNDA4Yy41LS4zIC45LS45IC45LTEuNmwwLTY2LjdjMC0uNy0uMy0xLjMtLjktMS42bC01Ny44LTMzLjNjLS41LS4zLTEuMi0uMy0xLjggMGwtNTcuOCAzMy4zYy0uNiAuMy0uOSAxLS45IDEuNmwwIDY2LjdjMCAuNiAuNCAxLjIgLjkgMS41bDE1LjggOS4xYzguNiA0LjMgMTMuOS0uOCAxMy45LTUuOGwwLTY1LjljMC0uOSAuNy0xLjcgMS43LTEuN2w3LjMgMGMuOSAwIDEuNyAuNyAxLjcgMS43bDAgNjUuOWMwIDExLjUtNi4yIDE4LTE3LjEgMTgtMy4zIDAtNiAwLTEzLjMtMy42bC0xNS4yLTguN2MtMy43LTIuMi02LjEtNi4yLTYuMS0xMC41bDAtNjYuN2MwLTQuMyAyLjMtOC40IDYuMS0xMC41bDU3LjgtMzMuNGMzLjctMi4xIDguNS0yLjEgMTIuMSAwbDU3LjggMzMuNGMzLjcgMi4yIDYuMSA2LjIgNi4xIDEwLjVsMCA2Ni43YzAgNC4zLTIuMyA4LjQtNi4xIDEwLjVsLTU3LjggMzMuNGMtMS43IDEuMS0zLjggMS43LTYgMS43ek0zNjMgMzg2LjJjMC0xMi41LTguNC0xNS44LTI2LjItMTguMi0xOC0yLjQtMTkuOC0zLjYtMTkuOC03LjggMC0zLjUgMS41LTguMSAxNC44LTguMSAxMS45IDAgMTYuMyAyLjYgMTguMSAxMC42IC4yIC44IC44IDEuMyAxLjYgMS4zbDcuNSAwYy41IDAgLjktLjIgMS4yLS41IC4zLS40IC41LS44IC40LTEuMy0xLjItMTMuOC0xMC4zLTIwLjItMjguOC0yMC4yLTE2LjUgMC0yNi4zIDctMjYuMyAxOC42IDAgMTIuNyA5LjggMTYuMSAyNS42IDE3LjcgMTguOSAxLjkgMjAuNCA0LjYgMjAuNCA4LjMgMCA2LjUtNS4yIDkuMi0xNy40IDkuMi0xNS4zIDAtMTguNy0zLjgtMTkuOC0xMS40LS4xLS44LS44LTEuNC0xLjctMS40bC03LjUgMGMtLjkgMC0xLjcgLjctMS43IDEuNyAwIDkuNyA1LjMgMjEuMyAzMC42IDIxLjMgMTguNSAwIDI5LTcuMiAyOS0xOS44em01NC41LTUwLjFjMCA2LjEtNSAxMS4xLTExLjEgMTEuMXMtMTEuMS01LTExLjEtMTEuMWMwLTYuMyA1LjItMTEuMSAxMS4xLTExLjEgNi0uMSAxMS4xIDQuOCAxMS4xIDExLjF6bS0xLjggMGMwLTUuMi00LjItOS4zLTkuNC05LjMtNS4xIDAtOS4zIDQuMS05LjMgOS4zczQuMiA5LjQgOS4zIDkuNGM1LjItLjEgOS40LTQuMyA5LjQtOS40em0tNC41IDYuMmwtMi42IDBjLS4xLS42LS41LTMuOC0uNS0zLjktLjItLjctLjQtMS4xLTEuMy0xLjFsLTIuMiAwIDAgNS0yLjQgMCAwLTEyLjUgNC4zIDBjMS41IDAgNC40IDAgNC40IDMuMyAwIDIuMy0xLjUgMi44LTIuNCAzLjEgMS43IC4xIDEuOCAxLjIgMi4xIDIuOCAuMSAxIC4zIDIuNyAuNiAzLjN6bS0yLjgtOC44YzAtMS43LTEuMi0xLjctMS44LTEuN2wtMiAwIDAgMy41IDEuOSAwYzEuNiAwIDEuOS0xLjEgMS45LTEuOHpNMTM3LjMgMTkxYzAtMi43LTEuNC01LjEtMy43LTYuNEw3Mi4zIDE0OS4zYy0xLS42LTIuMi0uOS0zLjQtMWwtLjYgMGMtMS4yIDAtMi4zIC40LTMuNCAxTDMuNyAxODQuNkMxLjQgMTg1LjkgMCAxODguNCAwIDE5MWwuMSA5NWMwIDEuMyAuNyAyLjUgMS44IDMuMnMyLjUgLjcgMy43IDBMNDIgMjY4LjNjMi4zLTEuNCAzLjctMy44IDMuNy02LjRsMC00NC40YzAtMi42IDEuNC01LjEgMy43LTYuNGwxNS41LTguOWMxLjItLjcgMi40LTEgMy43LTFzMi42IC4zIDMuNyAxbDE1LjUgOC45YzIuMyAxLjMgMy43IDMuOCAzLjcgNi40bDAgNDQuNGMwIDIuNiAxLjQgNS4xIDMuNyA2LjRsMzYuNCAyMC45YzEuMSAuNyAyLjYgLjcgMy43IDAgMS4xLS42IDEuOC0xLjkgMS44LTMuMmwuMi05NXpNNDcyLjUgODcuM2wwIDE3Ni40YzAgMi42LTEuNCA1LjEtMy43IDYuNGwtNjEuMyAzNS40Yy0yLjMgMS4zLTUuMSAxLjMtNy40IDBsLTYxLjMtMzUuNGMtMi4zLTEuMy0zLjctMy44LTMuNy02LjRsMC03MC44YzAtMi42IDEuNC01LjEgMy43LTYuNGw2MS4zLTM1LjRjMi4zLTEuMyA1LjEtMS4zIDcuNCAwbDE1LjMgOC44YzEuNyAxIDMuOS0uMyAzLjktMi4ybDAtOTRjMC0yLjggMy00LjYgNS41LTMuMmwzNi41IDIwLjRjMi4zIDEuMiAzLjggMy43IDMuOCA2LjR6bS00NiAxMjguOWMwLS43LS40LTEuMy0uOS0xLjZsLTIxLTEyLjJjLS42LS4zLTEuMy0uMy0xLjkgMGwtMjEgMTIuMmMtLjYgLjMtLjkgLjktLjkgMS42bDAgMjQuM2MwIC43IC40IDEuMyAuOSAxLjZsMjEgMTIuMWMuNiAuMyAxLjMgLjMgMS44IDBsMjEtMTIuMWMuNi0uMyAuOS0uOSAuOS0xLjZsMC0yNC4zIC4xIDB6bTIwOS44LS43YzIuMy0xLjMgMy43LTMuOCAzLjctNi40bDAtMTcuMWMwLTIuNi0xLjQtNS4xLTMuNy02LjRsLTYwLjktMzUuNGMtMi4zLTEuMy01LjEtMS4zLTcuNCAwbC02MS4zIDM1LjRjLTIuMyAxLjMtMy43IDMuOC0zLjcgNi40bDAgNzAuOGMwIDIuNyAxLjQgNS4xIDMuNyA2LjRsNjAuOSAzNC43YzIuMiAxLjMgNSAxLjMgNy4zIDBsMzYuOC0yMC41YzIuNS0xLjQgMi41LTUgMC02LjRMNTUwIDI0MS42Yy0xLjItLjctMS45LTEuOS0xLjktMy4ybDAtMjIuMmMwLTEuMyAuNy0yLjUgMS45LTMuMmwxOS4yLTExLjFjMS4xLS43IDIuNi0uNyAzLjcgMEw1OTIuMSAyMTNjMS4xIC43IDEuOSAxLjkgMS45IDMuMmwwIDE3LjRjMCAyLjggMy4xIDQuNiA1LjYgMy4ybDM2LjctMjEuM3pNNTU5IDIxOWMtLjQgLjMtLjcgLjctLjcgMS4ybDAgMTMuNmMwIC41IC4zIDEgLjcgMS4ybDExLjggNi44Yy40IC4zIDEgLjMgMS40IDBMNTg0IDIzNWMuNC0uMyAuNy0uNyAuNy0xLjJsMC0xMy42YzAtLjUtLjMtMS0uNy0xLjJsLTExLjgtNi44Yy0uNC0uMy0xLS4zLTEuNCAwTDU1OSAyMTl6TTMwNC44IDI2Mi41bDAtNzAuNGMwLTIuNi0xLjYtNS4xLTMuOS02LjRsLTYxLjEtMzUuMmMtMi4xLTEuMi01LTEuNC03LjQgMGwtNjEuMSAzNS4yYy0yLjMgMS4zLTMuOSAzLjctMy45IDYuNGwwIDcwLjRjMCAyLjggMS45IDUuMiA0IDYuNGw2MS4yIDM1LjJjMi40IDEuNCA1LjIgMS4zIDcuNCAwbDYxLTM1LjJjMS44LTEgMy4xLTIuNyAzLjYtNC43IC4xLS41IC4yLTEuMSAuMi0xLjd6TTIzMC41IDEzNy42bC0uOCAuNSAxLjEgMC0uMy0uNXptNzYuMiAxMzAuMmwtLjQtLjcgMCAuOSAuNC0uMnoiXQogICAgfTsKICAgIGZhQ29kZXBlbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjb2RlcGVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxY2IiLCAiTTUwMi4zIDE1OS43bC0yMzQtMTU2Yy04LTQuOS0xNi41LTUtMjQuNiAwbC0yMzQgMTU2Yy02IDQtOS43IDExLjEtOS43IDE4LjNMMCAzMzRjMCA3LjEgMy43IDE0LjMgOS43IDE4LjNsMjM0IDE1NmM4IDQuOSAxNi41IDUgMjQuNiAwbDIzNC0xNTZjNi00IDkuNy0xMS4xIDkuNy0xOC4zbDAtMTU2YzAtNy4xLTMuNy0xNC4zLTkuNy0xOC4zek0yNzggNjMuMWwxNzIuMyAxMTQuOS03Ni45IDUxLjQtOTUuNC02My43IDAtMTAyLjZ6bS00NCAwTDIzNCAxNjUuNyAxMzguNiAyMjkuNCA2MS43IDE3OCAyMzQgNjMuMXpNNDQgMjE5LjFMOTkuMSAyNTYgNDQgMjkyLjggNDQgMjE5LjF6TTIzNCA0NDguOEw2MS43IDMzNCAxMzguNiAyODIuNiAyMzQgMzQ2LjMgMjM0IDQ0OC44ek0yNTYgMzA4bC03Ny43LTUyIDc3LjctNTIgNzcuNyA1Mi03Ny43IDUyem0yMiAxNDAuOWwwLTEwMi42IDk1LjQtNjMuNyA3Ni45IDUxLjQtMTcyLjMgMTE0Ljl6bTE5MC0xNTZsLTU1LjEtMzYuOSA1NS4xLTM2LjkgMCA3My43eiJdCiAgICB9OwogICAgZmFSYXZlbHJ5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJhdmVscnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjJkOSIsICJNNDk4LjYgMjM0LjJjLTEuMi0xMC4zLTEuNy0yMC44LTMuNy0zMS0yLjUtMTIuNC01LjctMjQuNi05LjYtMzYuNi02LjgtMjAuOS0xNy4yLTQwLjMtMzAuOS01Ny41LTUuOS03LjYtMTIuMS0xNC44LTE4LjgtMjEuNy0xNC4xLTE0LTMwLTI2LjEtNDcuMS0zNi4xLTE3LjgtMTAuNi0zNi44LTE4LjktNTYuNy0yNC43LTExLTMuMS0yMi4zLTUuNC0zMy41LTcuNi02LjgtMS4zLTEzLjctMS43LTIwLjYtMi41LS4zIDAtLjYtLjQtLjktLjYtMTAuOCAwLTIxLjUgMC0zMi4zIDAtMi40IC40LTQuOCAuOS03LjIgMS4yLTExLjYgMS4yLTIzLjEgMy42LTM0LjMgNy4xLTEzLjggNC4xLTI3LjEgOS42LTM5LjggMTYuNC0xMy4zIDctMjYuMSAxNS4xLTM4LjEgMjQuMi02LjIgNC42LTEyLjMgOS40LTE4IDE0LjUtMTAuMiA5LjItMjAuNCAxOC40LTI5LjkgMjguMy0xMi44IDEzLjMtMjQuMSAyOC4xLTMzLjYgNDQtOC42IDE0LTE1LjUgMjktMjAuNSA0NC42LTcuMiAyMi43LTEwLjMgNDYuNi05LjIgNzAuMyAuNiAxMy41IDIgMjYuOSA0LjQgNDAuMiAzLjQgMTguNCA5IDM2LjMgMTYuNyA1My4zIDEzLjYgMjkuMiAzMi4xIDUxLjUgNTAuNCA2Ny45IDEyLjggMTEuNiAyNi44IDIxLjkgNDEuOCAzMC42IDE3LjcgMTAuNCAzNi40IDE4LjkgNTUuOSAyNS4zIDEzLjMgNC4zIDI2LjkgNy42IDQwLjYgOS44IDYuMSAxIDEyLjMgMS4zIDE4LjQgMS45IC40IC4xIC44IC4zIDEuMiAuNmwzMi4zIDBjMi41LS40IDUtLjkgNy41LTEuMSAxNi4zLTEuMyAzMi4xLTUuMyA0Ny41LTEwLjcgMTcuMi01LjkgMzMuNy0xMy45IDQ5LTIzLjggOS43LTYuNCAxOS40LTEzLjEgMjguNy0yMC4xIDUuOC00LjMgMTEtOS41IDE2LjMtMTQuNSA0LTMuNyA3LjgtNy42IDExLjUtMTEuNSAxMi0xMi43IDIyLjYtMjYuNiAzMS40LTQxLjYgOS41LTE2IDE3LjQtMzIuOSAyMi4zLTUwLjkgMi45LTEwLjQgNC45LTIxIDctMzEuNyAxLTUuMyAxLjMtMTAuNyAxLjktMTYuMSAwLS4zIC40LS42IC42LS45bDAtMzcuMWMtLjItLjYtLjQtMS4yLS42LTEuOHptLTE2MS4xLTEuMnMtMTYuNi0zLTI4LjUtM2MtMjcuMiAwLTMzLjYgMTQuOS0zMy42IDM3bDAgOTMuNy03My41IDAgMC0xOTAuNyA3My41IDAgMCAzMS45YzguOS0yNi44IDI2LjgtMzYuMiA2Mi0zNi4ybDAgNjcuM3oiXQogICAgfTsKICAgIGZhQWxpcGF5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFsaXBheSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNjQyIiwgIk0zNzcuNyAzMkw3MC4zIDMyQzMxLjQgMzIgMCA2My40IDAgMTAyLjNMMCA0MDkuN0MwIDQ0OC42IDMxLjQgNDgwIDcwLjMgNDgwbDMwNy41IDBjMzguNSAwIDY5LjgtMzEuMSA3MC4zLTY5LjYtNDYtMjUuNi0xMTAuNi02MC4zLTE3MS42LTg4LjQtMzIuMSA0NC04NC4xIDgxLTE0OC42IDgxLTcwLjYgMC05My43LTQ1LjMtOTctNzYuNC00LTM5IDE0LjktODEuNSA5OS41LTgxLjUgMzUuNCAwIDc5LjQgMTAuMiAxMjcuMSAyNSAxNi41LTMwLjEgMjYuNS02MC4zIDI2LjUtNjAuM2wtMTc4LjIgMCAwLTE2LjcgOTIuMSAwIDAtMzEuMi0xMDkuNCAwIDAtMTkgMTA5LjQgMCAwLTUwLjQgNTAuOSAwIDAgNTAuNCAxMDkuNCAwIDAgMTktMTA5LjQgMCAwIDMxLjIgODguOCAwcy0xNS4yIDQ2LjYtMzguMyA5MC45YzQ4LjkgMTYuNyAxMDAgMzYgMTQ4LjYgNTIuN2wwLTIzNC40Yy4yLTM4LjctMzEuMi03MC4zLTY5LjktNzAuM3pNNDcuMyAzMjNjMSAyMC4yIDEwLjIgNTMuNyA2OS45IDUzLjcgNTIuMSAwIDkyLjYtMzkuNyAxMTcuOS03Mi45LTQ0LjYtMTguNy04NC41LTMxLjQtMTA5LjQtMzEuNC02Ny40IDAtNzkuNCAzMy4xLTc4LjQgNTAuNnoiXQogICAgfTsKICAgIGZhQ2NBbWV4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNjLWFtZXgiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFmMyIsICJNMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNDgwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xLjEtNjEuNyAwLTMxLjktMzUuMS0zMS45IDM1LjEtMjAzLjcgMCAwLTE2My44LTY1LjggMCA4MS43LTE4NC43IDc4LjYgMCAyOC4xIDYzLjIgMC02My4yIDk3LjIgMCAxNi45IDQ3LjYgMTctNDcuNiA3NS41IDAgMC0yLjRjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDQzMnptNDQwLjQtMjEuN2w0Mi4yLTQ2LjMgNDIgNDYuMyA1MS40IDAtNjgtNzIuMSA2OC03Mi4xLTUwLjYgMC00MiA0Ni43LTQxLjUtNDYuNy01MS40IDAgNjcuNSA3Mi41LTY3LjQgNzEuNiAwLTMzLjEtODMgMCAwLTIyLjIgODAuOSAwIDAtMzIuMy04MC45IDAgMC0yMi40IDgzIDAgMC0zMy4xLTEyMiAwIDAgMTQzLjIgMTcxLjggMHptOTYuMy03MmwzOS4zIDQxLjkgMC04My4zLTM5LjMgNDEuNHptLTM2LjMtOTJsMzYuOS0xMDAuNiAwIDEwMC42IDM4LjcgMCAwLTE0My4zLTYwLjIgMC0zMi4yIDg5LjMtMzEuOS04OS4zLTYxLjIgMCAwIDE0My4xLTYzLjItMTQzLjEtNTEuMiAwLTYyLjQgMTQzLjMgNDMgMCAxMS45LTI4LjcgNjUuOSAwIDEyIDI4LjcgODIuNyAwIDAtMTAwLjMgMzYuOCAxMDAuMyAzNC40IDB6TTI4MiAxODUuNGwxOS41LTQ2LjkgMTkuNCA0Ni45LTM4LjkgMHoiXQogICAgfTsKICAgIGZhUGllZFBpcGVyQWx0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBpZWQtcGlwZXItYWx0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxYTgiLCAiTTI0NCAyNDZjLTMuMi0yLTYuMy0yLjktMTAuMS0yLjktNi42IDAtMTIuNiAzLjItMTkuMyAzLjdsMS43IDQuOSAyNy43LTUuN3pNMzc5LjkgNDQzLjljLTE5IDAtNjQuMSA5LjUtNzkuOSAxOS44bDYuOSA0NS4xYzM1LjcgNi4xIDcwLjEgMy42IDEwNi05LjgtNC44LTEwLTIzLjUtNTUuMS0zMy01NS4xek0zNDAuOCAxNzdjNi42IDIuOCAxMS41IDkuMiAyMi43IDIyLjEgMi0xLjQgNy41LTUuMiA3LjUtOC42IDAtNC45LTExLjgtMTMuMi0xMy4yLTIzIDExLjItNS43IDI1LjItNiAzNy42LTguOSA2OC4xLTE2LjQgMTE2LjMtNTIuOSAxNDYuOC0xMTYuNyA2LjEtMTIuNiAxMS44LTI1LjggMTIuNC0zOS45bC0yIDIuNmMtMjguNCA1MC0zMyA2My4yLTgxLjMgMTAwLTMxLjkgMjQuNC02OS4yIDQwLjItMTA2LjYgNTQuNmwtNi4zLS4zIDAtMjEuOGMtMTkuNiAxLjYtMTkuNy0xNC42LTMxLjYtMjMtMTguNyAyMC42LTMxLjYgNDAuOC01OC45IDUxLjEtMTIuNyA0LjgtMTkuNiAxMC0yNS45IDIxLjggMzQuOS0xNi40IDkxLjItMTMuNSA5OC44LTEwek01NTUuNSAwbC0uNiAxLjEtLjMgLjkgLjYtLjYgLjMtMS40ek00OTYuMyAzODIuMWMtMzMuOS01Ni45LTc1LjMtMTE4LjQtMTUwLTExNS41bC0uMy02Yy0xLjEtMTMuNSAzMi44IDMuMiAzNS4xLTMxbC0xNC40IDcuMmMtMTkuOC00NS43LTguNi01NC4zLTY1LjUtNTQuMy0xNC43IDAtMjYuNyAxLjctNDEuNCA0LjYgMi45IDE4LjYgMi4yIDM2LjctMTAuOSA1MC4zbDE5LjUgNS41Yy0xLjcgMy4yLTIuOSA2LjMtMi45IDkuOCAwIDIxIDQyLjggMi45IDQyLjggMzMuNiAwIDE4LjQtMzYuOCA2MC4xLTU0LjkgNjAuMS04IDAtNTMuNy01MC01My40LTYwLjFsLjMtNC42IDUyLjMtMTEuNWMxMy0yLjYgMTIuMy0yMi43LTIuOS0yMi43LTMuNyAwLTQzLjEgOS4yLTQ5LjQgMTAuNi0yLTUuMi03LjUtMTQuMS0xMy44LTE0LjEtMy4yIDAtNi4zIDMuMi05LjUgNC05LjIgMi42LTMxIDIuOS0yMS41IDIwLjFMMTUuOSAyOTguNWMtNS41IDEuMS04LjkgNi4zLTguOSAxMS44IDAgNiA1LjUgMTAuOSAxMS41IDEwLjkgOCAwIDEzMS4zLTI4LjQgMTQ3LjQtMzIuMiAyLjYgMy4yIDQuNiA2LjMgNy44IDguNiAyMC4xIDE0LjQgNTkuOCA4NS45IDc2LjQgODUuOSAyNC4xIDAgNTgtMjIuNCA3MS4zLTQxLjkgMy4yLTQuMyA2LjktNy41IDEyLjQtNi45IC42IDEzLjgtMzEuNiAzNC4yLTMzIDQzLjctMS40IDEwLjItMSAzNS4yLS4zIDQxLjEgMjYuNyA4LjEgNTItMy42IDc3LjktMi45IDQuMy0yMSAxMC42LTQxLjkgOS44LTYzLjVsLS4zLTkuNWMtMS40LTM0LjItMTAuOS0zOC41LTM0LjgtNTguNi0xLjEtMS4xLTIuNi0yLjYtMy43LTQgMi4yLTEuNCAxLjEtMSA0LjYtMS43IDg4LjUgMCA1Ni4zIDE4My42IDExMS41IDIyOS45IDMzLjEtMTUgNzIuNS0yNy45IDEwMy41LTQ3LjItMjktMjUuNi01Mi42LTQ1LjctNzIuNy03OS45ek0zMDAuMSA0MjguMmwwIDI3LjIgMTEuOC0zLjQtMi45LTIzLjgtOC45IDB6TTIzMS40IDI3Ny44bDI0LjEgNjEuMiAyMS0xMy44LTMxLjMtNTAuOS0xMy44IDMuNXptODQuNCAxNTQuOWwyIDEyLjRjOS0xLjUgNTguNC02LjYgNTguNC0xNC4xIDAtMS40LS42LTMuMi0uOS00LjYtMjYuOCAwLTM2LjkgMy44LTU5LjUgNi4zeiJdCiAgICB9OwogICAgZmFMZXR0ZXJib3hkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxldHRlcmJveGQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTYyZCIsICJNNTIxLjMgMTI4QzU4Ni45IDEyOCA2NDAgMTgxLjEgNjQwIDI0Ni42UzU4Ni45IDM2NS4yIDUyMS4zIDM2NS4yYy00Mi41IDAtNzkuNy0yMi4zLTEwMC43LTU1LjggMTEuNC0xOC4yIDE4LTM5LjcgMTgtNjIuOHMtNi42LTQ0LjYtMTgtNjIuOGwuOC0xLjJjMjAuOC0zMi4zIDU2LjgtNTMuOSA5Ny45LTU0LjZsMiAwek0zMjAgMTI4YzQyLjUgMCA3OS43IDIyLjMgMTAwLjcgNTUuOC0xMS40IDE4LjItMTggMzkuNy0xOCA2Mi44czYuNiA0NC42IDE4IDYyLjhsLS44IDEuMmMtMjAuOCAzMi4zLTU2LjggNTMuOS05Ny45IDU0LjZsLTIgMGMtNDIuNSAwLTc5LjctMjIuMy0xMDAuNy01NS44IDExLjQtMTguMiAxOC0zOS43IDE4LTYyLjhzLTYuNi00NC42LTE4LTYyLjhsLjgtMS4yYzIwLjgtMzIuMyA1Ni44LTUzLjkgOTcuOS01NC42bDIgMHptLTIwMS4zIDBjNDIuNSAwIDc5LjcgMjIuMyAxMDAuNyA1NS44LTExLjQgMTguMi0xOCAzOS43LTE4IDYyLjhzNi42IDQ0LjYgMTggNjIuOGwtLjggMS4yYy0yMC44IDMyLjMtNTYuOCA1My45LTk3LjkgNTQuNmwtMiAwQzUzLjEgMzY1LjEgMCAzMTIuMSAwIDI0Ni42UzUzLjEgMTI4IDExOC43IDEyOHoiXQogICAgfTsKICAgIGZhT3BlcmEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib3BlcmEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI2YSIsICJNMzIxLjkgMzIuN2MtMTcwLjIgMC0yNTIuNiAyMjMuOC0xNDcuNSAzNTUuMSAzNi41IDQ1LjQgODguNiA3NS42IDE0Ny41IDc1LjYgMzYuMyAwIDcwLjMtMTEuMSA5OS40LTMwLjQtNDMuOCAzOS4yLTEwMS45IDYzLTE2NS4zIDYzLTMuOSAwLTggMC0xMS45LS4zLTEzMS41LTYuMS0yMzYuMS0xMTQuNi0yMzYuMS0yNDcuNyAwLTEzNyAxMTEtMjQ4IDI0OC0yNDhsLjggMGM2My4xIC4zIDEyMC43IDI0LjEgMTY0LjQgNjMuMS0yOS0xOS40LTYzLjEtMzAuNC05OS4zLTMwLjR6TTQyMy43IDQzMC40Yy00MC45IDI0LjctOTAuNyAyMy42LTEzMi01LjggNTYuMi0yMC41IDk3LjctOTEuNiA5Ny43LTE3Ni42IDAtODQuNy00MS4yLTE1NS44LTk3LjQtMTc2LjYgNDEuOC0yOS4yIDkxLjItMzAuMyAxMzIuOS01IDEwNS45IDk4LjcgMTA1LjUgMjY1LjctMS4yIDM2NHoiXQogICAgfTsKICAgIGZhV2VpYm8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2VpYm8iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjE4YSIsICJNNDA3IDE3Ny42YzcuNi0yNC0xMy40LTQ2LjgtMzcuNC00MS43LTIyIDQuOC0yOC44LTI4LjEtNy4xLTMyLjggNTAuMS0xMC45IDkyLjMgMzcuMSA3Ni41IDg0LjgtNi44IDIxLjItMzguOCAxMC44LTMyLTEwLjN6TTIxNC44IDQ0Ni43Yy0xMDYuMyAwLTIxNC44LTUxLjQtMjE0LjgtMTM2LjMgMC00NC4zIDI4LTk1LjQgNzYuMy0xNDMuNyA5OS43LTk5LjcgMjAzLjItMTAwLjkgMTczLjYtNS43LTQgMTMuMSAxMi4zIDUuNyAxMi4zIDYgNzkuNS0zMy42IDE0MC41LTE2LjggMTE0IDUxLjQtMy43IDkuNCAxLjEgMTAuOSA4LjMgMTMuMSAxMzUuNyA0Mi4zIDM0LjggMjE1LjItMTY5LjcgMjE1LjJ6TTM1OC41IDMwMC40Yy01LjQtNTUuNy03OC41LTk0LTE2My40LTg1LjctODQuOCA4LjYtMTQ4LjggNjAuMy0xNDMuNCAxMTZzNzguNSA5NCAxNjMuNCA4NS43Yzg0LjgtOC42IDE0OC44LTYwLjMgMTQzLjQtMTE2ek0zNDcuOSAzNS4xYy0yNS45IDUuNi0xNi44IDQzLjcgOC4zIDM4LjMgNzIuMy0xNS4yIDEzNC44IDUyLjggMTExLjcgMTI0LTcuNCAyNC4yIDI5LjEgMzcgMzcuNCAxMiAzMS45LTk5LjgtNTUuMS0xOTUuOS0xNTcuNC0xNzQuM3ptLTc4LjUgMzExYy0xNy4xIDM4LjgtNjYuOCA2MC0xMDkuMSA0Ni4zLTQwLjgtMTMuMS01OC01My40LTQwLjMtODkuNyAxNy43LTM1LjQgNjMuMS01NS40IDEwMy40LTQ1LjEgNDIgMTAuOCA2My4xIDUwLjIgNDYgODguNXptLTg2LjMtMzBjLTEyLjktNS40LTMwIC4zLTM4IDEyLjktOC4zIDEyLjktNC4zIDI4IDguNiAzNCAxMy4xIDYgMzAuOCAuMyAzOS4xLTEyLjkgOC0xMy4xIDMuNy0yOC4zLTkuNy0zNHptMzIuNi0xMy40Yy01LjEtMS43LTExLjQgLjYtMTQuMyA1LjQtMi45IDUuMS0xLjQgMTAuNiAzLjcgMTIuOSA1LjEgMiAxMS43LS4zIDE0LjYtNS40IDIuOC01LjIgMS4xLTEwLjktNC0xMi45eiJdCiAgICB9OwogICAgZmFSZWFkbWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVhZG1lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0ZDUiLCAiTTUyOC4zIDQ2LjVsLTEzOS44IDBjLTQ4LjEgMC04OS45IDMzLjMtMTAwLjQgODAuMy0xMC42LTQ3LTUyLjMtODAuMy0xMDAuNC04MC4zTDQ4IDQ2LjVDMjEuNSA0Ni41IDAgNjggMCA5NC41TDAgMzQwLjNjMCAyNi41IDIxLjUgNDggNDggNDhsODkuNyAwYzEwMi4yIDAgMTMyLjcgMjQuNCAxNDcuMyA3NSAuNyAyLjggNS4yIDIuOCA2IDAgMTQuNy01MC42IDQ1LjItNzUgMTQ3LjMtNzVsODkuNyAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjQ1LjdjMC0yNi40LTIxLjMtNDcuOS00Ny43LTQ4LjF6TTI0MiAzMTEuOWMwIDEuOS0xLjUgMy41LTMuNSAzLjVsLTE2MC4zIDBjLTEuOSAwLTMuNS0xLjUtMy41LTMuNWwwLTIyLjljMC0xLjkgMS41LTMuNSAzLjUtMy41bDE2MC40IDBjMS45IDAgMy41IDEuNSAzLjUgMy41bDAgMjIuOS0uMSAwem0wLTYwLjljMCAxLjktMS41IDMuNS0zLjUgMy41bC0xNjAuMyAwYy0xLjkgMC0zLjUtMS41LTMuNS0zLjVsMC0yMi45YzAtMS45IDEuNS0zLjUgMy41LTMuNWwxNjAuNCAwYzEuOSAwIDMuNSAxLjUgMy41IDMuNWwwIDIyLjktLjEgMHptMC02MC45YzAgMS45LTEuNSAzLjUtMy41IDMuNWwtMTYwLjMgMGMtMS45IDAtMy41LTEuNS0zLjUtMy41bDAtMjIuOWMwLTEuOSAxLjUtMy41IDMuNS0zLjVsMTYwLjQgMGMxLjkgMCAzLjUgMS41IDMuNSAzLjVsMCAyMi45LS4xIDB6TTUwMS4zIDMxMS44YzAgMS45LTEuNSAzLjUtMy41IDMuNWwtMTYwLjMgMGMtMS45IDAtMy41LTEuNS0zLjUtMy41bDAtMjIuOWMwLTEuOSAxLjUtMy41IDMuNS0zLjVsMTYwLjQgMGMxLjkgMCAzLjUgMS41IDMuNSAzLjVsMCAyMi45LS4xIDB6bTAtNjAuOWMwIDEuOS0xLjUgMy41LTMuNSAzLjVsLTE2MC4zIDBjLTEuOSAwLTMuNS0xLjUtMy41LTMuNWwwLTIyLjljMC0xLjkgMS41LTMuNSAzLjUtMy41bDE2MC40IDBjMS45IDAgMy41IDEuNSAzLjUgMy41bDAgMjIuOS0uMSAwem0wLTYwLjljMCAxLjktMS41IDMuNS0zLjUgMy41bC0xNjAuMyAwYy0xLjkgMC0zLjUtMS41LTMuNS0zLjVsMC0yMi44YzAtMS45IDEuNS0zLjUgMy41LTMuNWwxNjAuNCAwYzEuOSAwIDMuNSAxLjUgMy41IDMuNWwwIDIyLjgtLjEgMHoiXQogICAgfTsKICAgIGZhR29sYW5nID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvbGFuZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNDBmIiwgIk00MDAuMSAxOTQuOGMtMTAuOSAyLjgtMTkuOSA0LjMtMjkuMSA3LjYtNy4zIDEuOS0xNC43IDMuOS0yMy4yIDYuMWwtLjYgLjFjLTQuMiAxLjItNC42IDEuMy04LjUtMy4yLTQuNy01LjMtOC4xLTguNy0xNC42LTExLjktMTkuNy05LjYtMzguNy02LjgtNTYuNCA0LjctMjEuMiAxMy43LTMyLjEgMzQtMzEuOCA1OS4yIC4zIDI1IDE3LjQgNDUuNSA0MS4yIDQ4LjkgMjIgMi44IDM5LjgtNC42IDUzLjgtMjAuNSAyLjEtMi42IDQtNS4zIDYuMS04LjMgLjgtMSAxLjUtMi4xIDIuMy0zLjNsLTYwLjEgMGMtNi41IDAtOC4xLTQtNS45LTkuMyA0LTkuNyAxMS41LTI1LjkgMTUuOS0zNCAuOS0xLjggMy4xLTUuOCA2LjktNS44bDEwMS4xIDBjNC41LTEzLjQgMTEuOC0yNi45IDIxLjYtMzkuNyAyMi43LTI5LjkgNDkuMy00NS41IDg3LjItNTIgMzEuOC01LjYgNjEuNy0yLjUgODguOSAxNS45IDI0LjYgMTYuOCAzOS44IDM5LjYgNDMuOSA2OS41IDUuMyA0Mi4xLTYuOSA3Ni4zLTM2LjcgMTA1LjYtMTkuNyAyMC45LTQ0LjkgMzQtNzMuOSAzOS45LTUuNiAxLTExLjEgMS41LTE2LjUgMi0yLjkgLjItNS43IC41LTguNSAuOC0yOC4zLS42LTU0LjItOC43LTc2LTI3LjQtMTUuMy0xMy4zLTI1LjktMjkuNi0zMS4xLTQ4LjUtMy43IDcuMy04IDE0LjQtMTQgMjEuMS0yMS42IDI5LjYtNTAuOSA0OC04Ny45IDUyLjktMzAuNiA0LjEtNTguOS0xLjgtODMuOS0yMC41LTIzLTE3LjUtMzYuMS00MC41LTM5LjUtNjkuMi00LjEtMzQgNS45LTY1LjQgMjYuNC05MS4zIDIyLjItMjkgNTEuNS00Ny40IDg3LjMtNTMuOSAyOS4zLTYuMiA1Ny4zLTEuOSA4Mi42IDE1LjMgMTYuNSAxMC45IDI4LjMgMjUuOCAzNi4xIDQzLjkgMS45IDIuOCAuNiA0LjQtMy4xIDUuM3pNNDguMyAyMDAuNGMtMS4zIDAtMS42LS42LS45LTEuNmw2LjYtOC40Yy42LS45IDIuMi0xLjUgMy40LTEuNWwxMTEuMyAwYzEuMiAwIDEuNSAuOSAuOSAxLjhsLTUuMyA4LjFjLS42IDEtMi4yIDEuOS0zLjEgMS45bC0xMTIuOC0uM3pNMS4yIDIyOS4xYy0xLjIgMC0xLjYtLjctLjktMS42bDYuNS04LjRjLjYtLjkgMi4yLTEuNiAzLjQtMS42bDE0Mi4xIDBjMS4yIDAgMS44IDEgMS41IDEuOWwtMi41IDcuNWMtLjMgMS4yLTEuNSAxLjktMi44IDEuOUwxLjIgMjI5LjF6bTc0LjUgMjYuOGMtLjYgLjktLjMgMS44IC45IDEuOGw2OCAuM2MuOSAwIDIuMi0uOSAyLjItMi4xbC42LTcuNWMwLTEuMy0uNi0yLjItMS45LTIuMmwtNjIuMyAwYy0xLjIgMC0yLjUgLjktMy4xIDEuOWwtNC40IDcuOHptNTAxLjUtMThjLS4yLTIuNi0uMy00LjgtLjctNy01LjYtMzAuOC0zNC00OC4zLTYzLjYtNDEuNC0yOSA2LjUtNDcuNyAyNC45LTU0LjUgNTQuMi01LjYgMjQuMyA2LjIgNDguOSAyOC42IDU4LjkgMTcuMiA3LjUgMzQuMyA2LjYgNTAuOC0xLjkgMjQuNi0xMy42IDM4LTMyLjcgMzkuNi01OS41LS4xLTEuMi0uMS0yLjMtLjItMy4zeiJdCiAgICB9OwogICAgZmFTdGFja0V4Y2hhbmdlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0YWNrLWV4Y2hhbmdlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxOGQiLCAiTTE4LjEgMzMyLjNsNDEyLjcgMCAwIDIyYzAgMzcuNy0yOS4zIDY4LTY1LjMgNjhsLTE5IDAtODYuOCA4OS43IDAtODkuNy0xNzYuMyAwYy0zNiAwLTY1LjMtMzAuMy02NS4zLTY4bDAtMjJ6bTAtMjMuNmw0MTIuNyAwIDAtODUtNDEyLjcgMCAwIDg1em0wLTEwOS40bDQxMi43IDAgMC04NS00MTIuNyAwIDAgODV6TTM2NS40IDBMODMuNCAwYy0zNiAwLTY1LjMgMzAuMy02NS4zIDY3LjdsMCAyMi4zIDQxMi43IDAgMC0yMi4zQzQzMC43IDMwLjMgNDAxLjQgMCAzNjUuNCAweiJdCiAgICB9OwogICAgZmFHdWxwID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImd1bHAiLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFtdLCAiZjNhZSIsICJNMjEwIDM5MS4xbC0xNC4xIDI0LjYtNC42IDgwLjJjMCA4LjktMjguMyAxNi4xLTYzLjEgMTYuMXMtNjMuMS03LjItNjMuMS0xNi4xbC01LjgtNzkuNC0xNC45LTI1LjRjNDEuMiAxNy4zIDEyNiAxNi43IDE2NS42IDB6TTE0IDEzNy44TDI3LjYgMjYzLjNjNS45LTIwIDIwLjgtNDcgNDAtNTUuMiA2LjMtMi43IDEyLjctMi43IDE4LjcgLjkgNS4yIDMgOS42IDkuMyAxMC4xIDExLjggMS4yIDYuNS0yIDkuMS00LjUgOS4xLTMgMC01LjMtNC42LTYuOC03LjMtNC4xLTcuMy0xMC4zLTcuNi0xNi45LTIuOC02LjkgNS0xMi45IDEzLjQtMTcuMSAyMC43LTUuMSA4LjgtOS40IDE4LjUtMTIgMjguMi0xLjUgNS42LTIuOSAxNC42LS42IDE5LjkgMSAyLjIgMi41IDMuNiA0LjkgMy42IDUgMCAxMi4zLTYuNiAxNS44LTEwLjEgNC41LTQuNSAxMC4zLTExLjUgMTIuNS0xNmw1LjItMTUuNWMyLjYtNi44IDkuOS01LjYgOS45IDAgMCAxMC4yLTMuNyAxMy42LTEwIDM0LjctNS44IDE5LjUtNy42IDI1LjgtNy42IDI1LjgtLjcgMi44LTMuNCA3LjUtNi4zIDcuNS0xLjIgMC0yLjEtLjQtMi42LTEuMi0xLTEuNC0uOS01LjMtLjgtNi4zIC4yLTMuMiA2LjMtMjIuMiA3LjMtMjUuMi0yIDIuMi00LjEgNC40LTYuNCA2LjYtNS40IDUuMS0xNC4xIDExLjgtMjEuNSAxMS44LTMuNCAwLTUuNi0uOS03LjctMi40bDcuNiA3OS42YzIgNSAzOS4yIDE3LjEgODguMiAxNy4xIDQ5LjEgMCA4Ni4zLTEyLjIgODguMi0xNy4xbDEwLjktOTQuNmMtNS43IDUuMi0xMi4zIDExLjYtMTkuNiAxNC44LTUuNCAyLjMtMTcuNCAzLjgtMTcuNC01LjcgMC01LjIgOS4xLTE0LjggMTQuNC0yMS41IDEuNC0xLjcgNC43LTUuOSA0LjctOC4xIDAtMi45LTYtMi4yLTExLjcgMi41LTMuMiAyLjctNi4yIDYuMy04LjcgOS43LTQuMyA2LTYuNiAxMS4yLTguNSAxNS41LTYuMiAxNC4yLTQuMSA4LjYtOS4xIDIyLTUgMTMuMy00LjIgMTEuOC01LjIgMTQtLjkgMS45LTIuMiAzLjUtNCA0LjUtMS45IDEtNC41IC45LTYuMS0uMy0uOS0uNi0xLjMtMS45LTEuMy0zLjcgMC0uOSAuMS0xLjggLjMtMi43IDEuNS02LjEgNy44LTE4LjEgMTUtMzQuMyAxLjYtMy43IDEtMi42IC44LTIuMy02LjIgNi0xMC45IDguOS0xNC40IDEwLjUtNS44IDIuNi0xMyAyLjYtMTQuNS00LjEtLjEtLjQtLjEtLjgtLjItMS4yLTExLjggOS4yLTI0LjMgMTEuNy0yMC04LjEtNC42IDguMi0xMi42IDE0LjktMjIuNCAxNC45LTQuMSAwLTcuMS0xLjQtOC42LTUuMS0yLjMtNS41IDEuMy0xNC45IDQuNi0yMy44IDEuNy00LjUgNC05LjkgNy4xLTE2LjIgMS42LTMuNCA0LjItNS40IDcuNi00LjUgLjYgLjIgMS4xIC40IDEuNiAuNyAyLjYgMS44IDEuNiA0LjUgLjMgNy4yLTMuOCA3LjUtNy4xIDEzLTkuMyAyMC44LS45IDMuMy0yIDkgMS41IDkgMi40IDAgNC43LS44IDYuOS0yLjQgNC42LTMuNCA4LjMtOC41IDExLjEtMTMuNSAyLTMuNiA0LjQtOC4zIDUuNi0xMi4zIC41LTEuNyAxLjEtMy4zIDEuOC00LjggMS4xLTIuNSAyLjYtNS4xIDUuMi01LjEgMS4zIDAgMi40IC41IDMuMiAxLjUgMS43IDIuMiAxLjMgNC41IC40IDYuOS0yIDUuNi00LjcgMTAuNi02LjkgMTYuNy0xLjMgMy41LTIuNyA4LTIuNyAxMS43IDAgMy40IDMuNyAyLjYgNi44IDEuMiAyLjQtMS4xIDQuOC0yLjggNi44LTQuNSAxLjItNC45IC45LTMuOCAyNi40LTY4LjIgMS4zLTMuMyAzLjctNC43IDYuMS00LjcgMS4yIDAgMi4yIC40IDMuMiAxLjEgMS43IDEuMyAxLjcgNC4xIDEgNi4yLS43IDEuOS0uNiAxLjMtNC41IDEwLjUtNS4yIDEyLjEtOC42IDIwLjgtMTMuMiAzMS45LTEuOSA0LjYtNy43IDE4LjktOC43IDIyLjMtLjYgMi4yLTEuMyA1LjggMSA1LjggNS40IDAgMTkuMy0xMy4xIDIzLjEtMTcgLjItLjMgLjUtLjQgLjktLjYgLjYtMS45IDEuMi0zLjcgMS43LTUuNSAxLjQtMy44IDIuNy04LjIgNS4zLTExLjMgLjgtMSAxLjctMS42IDIuNy0xLjYgMi44IDAgNC4yIDEuMiA0LjIgNCAwIDEuMS0uNyA1LjEtMS4xIDYuMiAxLjQtMS41IDIuOS0zIDQuNS00LjUgMTUtMTMuOSAyNS43LTYuOCAyNS43IC4yIDAgNy40LTguOSAxNy43LTEzLjggMjMuNC0xLjYgMS45LTQuOSA1LjQtNSA2LjQgMCAxLjMgLjkgMS44IDIuMiAxLjggMiAwIDYuNC0zLjUgOC00LjcgNS0zLjkgMTEuOC05LjkgMTYuNi0xNC4xbDE0LjgtMTM2LjhjLTMwLjUgMTcuMS0xOTcuNiAxNy4yLTIyOC4zIC4yem0yMjkuNy04LjVjMCAyMS0yMzEuMiAyMS0yMzEuMiAwIDAtOC44IDUxLjgtMTUuOSAxMTUuNi0xNS45IDkgMCAxNy44IC4xIDI2LjMgLjRMMTY3IDY1LjEgMjI4LjMgLjZjMS40LTEuNCA1LjgtLjIgOS45IDMuNXM2LjYgNy45IDUuMyA5LjNsLS4xIC4xLTU3LjMgNjAuNS0xMCA0MC43YzM5LjkgMi42IDY3LjYgOC4xIDY3LjYgMTQuNnptLTY5LjQgNC42YzAtLjgtLjktMS41LTIuNS0yLjFsLS4yIC44YzAgMS4zLTUgMi40LTExLjEgMi40cy0xMS4xLTEuMS0xMS4xLTIuNGMwLS4xIDAtLjIgLjEtLjNsLjItLjdjLTEuOCAuNi0zIDEuNC0zIDIuMyAwIDIuMSA2LjIgMy43IDEzLjcgMy43IDcuNyAuMSAxMy45LTEuNiAxMy45LTMuN3oiXQogICAgfTsKICAgIGZhWWVscCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ5ZWxwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxZTkiLCAiTTQyLjkgMjQwLjNsOTkuNiA0OC42YzE5LjIgOS40IDE2LjIgMzcuNS00LjUgNDIuN0wzMC41IDM1OC41Yy0zLjIgLjgtNi40IC45LTkuNiAuM3MtNi4yLTEuOC04LjktMy43LTQuOS00LjMtNi42LTcuMS0yLjctNS45LTMuMS05LjJjLTMuMy0yOC44LS4yLTU3LjkgOS04NS4zIDEtMy4xIDIuNy01LjkgNC45LTguM3M0LjktNC4yIDcuOS01LjUgNi4yLTEuOCA5LjUtMS44IDYuNCAuOSA5LjMgMi4zem00NCAyMzkuM2MyMy44IDE2LjMgNTAuOSAyNy4zIDc5LjQgMzIuMSAzLjIgLjYgNi41IC40IDkuNi0uNHM2LjEtMi4zIDguNi00LjQgNC42LTQuNiA2LTcuNSAyLjMtNi4xIDIuNC05LjRsMy45LTExMC44Yy43LTIxLjMtMjUuNS0zMS45LTM5LjgtMTYuMUw4Mi44IDQ0NS41Yy0yLjIgMi40LTMuOCA1LjMtNC44IDguNHMtMS4zIDYuNC0uOSA5LjYgMS41IDYuMyAzLjEgOS4xIDMuOSA1LjIgNi42IDdsMCAwek0yMzIuMiAzNjkuN2w1OC44IDk0YzEuNyAyLjggNCA1LjEgNi44IDYuOXM1LjggMyA5IDMuNSA2LjUgLjMgOS43LS41IDYuMS0yLjQgOC42LTQuNGMyMi4zLTE4LjQgNDAuMy00MS41IDUyLjctNjcuNiAxLjQtMi45IDIuMS02LjEgMi4yLTkuNHMtLjYtNi41LTEuOS05LjQtMy4yLTUuNy01LjYtNy44LTUuMi0zLjktOC4zLTQuOUwyNTguNyAzMzUuN2MtMjAuMy02LjUtMzcuOCAxNS44LTI2LjUgMzMuOXpNMzgwLjYgMjM3LjRjLTExLjUtMjYuNS0yOC43LTUwLjItNTAuNC02OS4zLTIuNC0yLjEtNS4zLTMuNy04LjQtNC43cy02LjQtMS4yLTkuNi0uOC02LjMgMS41LTkuMSAzLjItNS4xIDQtNi45IDYuN2wtNjIgOTEuOWMtMTEuOSAxNy43IDQuNyA0MC42IDI1LjIgMzQuN0wzNjYgMjY4LjZjMy4xLS45IDYtMi41IDguNS00LjZzNC41LTQuNyA1LjgtNy43IDIuMS02LjIgMi4yLTkuNC0uNi02LjUtMS45LTkuNWwwIDB6TTYyLjEgMzAuMmMtMi44IDEuNC01LjQgMy4zLTcuNCA1LjdzLTMuNiA1LjItNC41IDguMi0xLjIgNi4yLS45IDkuMyAxLjMgNi4xIDIuOSA4LjlMMTU2LjMgMjQyLjZjMTEuNyAyMC4yIDQyLjYgMTEuOSA0Mi42LTExLjRsMC0yMDguM2MwLTMuMS0uNi02LjMtMS44LTkuMnMtMy4xLTUuNS01LjQtNy42LTUtMy44LTgtNC44LTYuMS0xLjQtOS4zLTEuMmMtMzkgMy4xLTc3IDEzLjMtMTEyLjMgMzAuMXoiXQogICAgfTsKICAgIGZhR29mb3JlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvZm9yZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2E3IiwgIk0zNDggMzE5LjhsLTEzLjIgMCAwIDM0LjdjLTI0LjUgMjMuMS01Ni4zIDM1LjgtODkuOSAzNS44LTczLjIgMC0xMzIuNC02MC4yLTEzMi40LTEzNC40IDAtNzQuMSA1OS4yLTEzNC40IDEzMi40LTEzNC40IDM1LjMgMCA2OC42IDE0IDkzLjYgMzkuNGw2Mi4zLTYzLjNjLTQxLjgtNDIuMy05Ny4xLTY1LjYtMTU2LjEtNjUuNi0xMjIuNyAwLTIyMC43IDEwMC42LTIyMC43IDIyNCAwIDEyMi41IDk3IDIyNCAyMjAuNyAyMjQgNjMuMiAwIDEyNC41LTI2LjIgMTcxLTgyLjUtMi0yNy42LTEzLjQtNzcuNy02Ny43LTc3Ljd6TTMzNS45IDIwNy4zbC0xMDYuMyAwIDAgODkgMTE4LjQgMGMzMy41IDAgNjAuNSAxNS4xIDc2IDQxLjhsMC0zMC42YzAtNjUuMi00MC40LTEwMC4yLTg4LjEtMTAwLjJ6Il0KICAgIH07CiAgICBmYUF2aWF0byA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhdmlhdG8iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQyMSIsICJNMTA3LjIgMjgzLjVsLTE5LTQxLjgtNTIuMSAwLTE5IDQxLjgtMTcuMSAwIDYyLjItMTMxLjQgNjIuMiAxMzEuNC0xNy4yIDB6bS00NS05OC4xbC0xOS42IDQyLjUgMzkuMiAwLTE5LjYtNDIuNXpNMTc0LjkgMjg3LjhsLTYyLjItMTMxLjQgMTcuMSAwIDQ1LjEgOTYgNDUuMS05NiAxNyAwLTYyLjEgMTMxLjR6bTgwLjYtNC4zbDAtMTI3LjEgMTUuNSAwIDAgMTI3LjEtMTUuNSAwek00NjQuNiAxNjcuOWwwIDExNS42LTE3LjMgMCAwLTExNS42LTQxLjIgMCAwLTExLjUgOTkuNiAwIDAgMTEuNS00MS4xIDB6TTY0MCAyMTguOGMwIDkuMi0xLjcgMTcuOC01LjEgMjUuOHMtOC4yIDE1LjEtMTQuMiAyMS4xLTEzLjEgMTAuOC0yMS4xIDE0LjItMTYuNiA1LjEtMjUuOCA1LjEtMTcuOC0xLjctMjUuOC01LjEtMTUuMS04LjItMjEuMS0xNC4yLTEwLjgtMTMtMTQuMi0yMS4xYy0zLjQtOC01LjEtMTYuNi01LjEtMjUuOHMxLjctMTcuOCA1LjEtMjUuOCA4LjItMTUuMSAxNC4yLTIxLjEgMTMtOC40IDIxLjEtMTEuOWM4LTMuNCAxNi42LTUuMSAyNS44LTUuMXMxNy44IDEuNyAyNS44IDUuMSAxNS4xIDUuOCAyMS4xIDExLjljNiA2IDEwLjcgMTMuMSAxNC4yIDIxLjEgMy40IDggNS4xIDE2LjYgNS4xIDI1Ljh6bS0xNS41IDBjMC03LjMtMS4zLTE0LTMuOS0yMC4zcy02LjItMTEuNy0xMC44LTE2LjMtMTAtOC4yLTE2LjItMTAuOS0xMi44LTQtMTkuOC00LTEzLjYgMS4zLTE5LjggNC0xMS42IDYuMy0xNi4yIDEwLjktOC4yIDEwLTEwLjggMTYuMy0zLjkgMTMuMS0zLjkgMjAuM2MwIDcuMyAxLjMgMTQgMy45IDIwLjNzNi4yIDExLjcgMTAuOCAxNi4zIDEwIDguMiAxNi4yIDEwLjkgMTIuOCA0IDE5LjggNCAxMy42LTEuMyAxOS44LTQgMTEuNi02LjMgMTYuMi0xMC45IDguMi0xMCAxMC44LTE2LjMgMy45LTEzLjEgMy45LTIwLjN6bS05NC44IDk2LjdsMC02LjMgODguOS0xMC0yNDIuOSAxMy40Yy42LTIuMiAxLjEtNC42IDEuNC03LjIgLjMtMiAuNS00LjIgLjYtNi41bDY0LjgtOC4xLTY0LjkgMS45YzAtLjQtLjEtLjctLjEtMS4xLTIuOC0xNy4yLTI1LjUtMjMuNy0yNS41LTIzLjdsLTEuMS0yNi4zIDIzLjggMCAxOSA0MS44IDE3LjEgMC02Mi4yLTEzMS40LTYyLjIgMTMxLjQgMTcuMSAwIDE5LTQxLjggMjMuNiAwLTEuMSAyNi40cy0yMi43IDYuNS0yNS41IDIzLjdjLS4xIC4zLS4xIC43LS4xIDEuMWwtNjQuOS0xLjkgNjQuOCA4LjFjLjEgMi4zIC4zIDQuNCAuNiA2LjUgLjMgMi42IC44IDUgMS40IDcuMmwtMjQyLjktMTMuNSA4OC45IDEwIDAgNi4zYy01LjkgLjktMTAuNSA2LTEwLjUgMTIuMiAwIDYuOCA1LjYgMTIuNCAxMi40IDEyLjRzMTIuNC01LjYgMTIuNC0xMi40YzAtNi4yLTQuNi0xMS4zLTEwLjUtMTIuMmwwLTUuOCA4MC4zIDkgMCA1LjRjLTUuNyAxLjEtOS45IDYuMi05LjkgMTIuMSAwIDYuOCA1LjYgMTAuMiAxMi40IDEwLjJzMTIuNC0zLjQgMTIuNC0xMC4yYzAtNi00LjMtMTEtOS45LTEyLjFsMC00LjkgMjguNCAzLjIgMCAyMy43LTUuOSAwIDAgMTMuOSA1LjkgMCAwLTYuNiA1IDAgMCA2LjYgNS45IDAgMC0xMy44LTUuOSAwIDAtMjMuMiAzOC4zIDQuM2M4LjEgMTEuNCAxOSAxMy42IDE5IDEzLjZsLS4xIDYuNy01LjEgLjItLjEgMTIuMSA0LjEgMCAuMS01IDUuMiAwIC4xIDUgNC4xIDAtLjEtMTIuMS01LjEtLjItLjEtNi43czEwLjktMi4xIDE5LTEzLjZsMzguMy00LjMgMCAyMy4yLTUuOSAwIDAgMTMuOCA1LjkgMCAwLTYuNiA1IDAgMCA2LjYgNS45IDAgMC0xMy44LTUuOSAwIDAtMjMuNyAyOC40LTMuMiAwIDQuOWMtNS43IDEuMS05LjkgNi4yLTkuOSAxMi4xIDAgNi44IDUuNiAxMC4yIDEyLjQgMTAuMnMxMi40LTMuNCAxMi40LTEwLjJjMC02LTQuMy0xMS05LjktMTIuMWwwLTUuNCA4MC4zLTkgMCA1LjhjLTUuOSAuOS0xMC41IDYtMTAuNSAxMi4yIDAgNi44IDUuNiAxMi40IDEyLjQgMTIuNHMxMi40LTUuNiAxMi40LTEyLjRjLS4yLTYuMy00LjctMTEuNC0xMC43LTEyLjN6TTMyOC45IDIyNy45bDE5LjYtNDIuNSAxOS42IDQyLjUtMTcuOSAwLTEuNy00MC4zLTEuNyA0MC4zLTE3LjkgMHoiXQogICAgfTsKICAgIGZhUGFkbGV0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBhZGxldCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGEwIiwgIk0yOTcuOSAwbC4xIDBjNy42IC4xIDE0LjQgNC43IDE3LjUgMTEuOGwxMzIgMzA4LjUgLjMtLjEgLjIgLjQtMi44IDEwLTQyLjkgMTU4Yy0zLjcgMTYuMi0xOS43IDI2LjMtMzUuOCAyMi42bC02OC40LTE1LjYtNjguNSAxNS42Yy0xNi4xIDMuNy0zMi4xLTYuNC0zNS44LTIyLjZsLTQyLjktMTU4LTIuNy0xMCAuMS0uNCAxMzIuMS0zMDguNGMzLTcgOS45LTExLjYgMTcuNS0xMS44ek0xNjAuMSAzMjIuMWwxMzEgMzkuMSA2LjkgMTIyLjUgNy45LTEyMS41IDEzMC42LTM5LjMgLjItLjEtMTMxIDI1LjEtOC42LTMyMC4yLTUuMiAzMjAuMi0xMzEuOC0yNS44ek00MjYgMjIyLjZsOTQuNC00MSA3My44IDAtMTU3IDI0Ny42IDMxLjYtMTA5LTQyLjgtOTcuNnptMTcxLjUtNDEuMmw0MS40IDc2LjJjNCA3LjUtMy45IDE1LjktMTEuNiAxMi4ybC00Ny42LTIyLjcgMTcuOC02NS43ek0xMjcuMyAzMTguNUwxNTguNyA0MzAgMS42IDE1NC41Yy01LjktMTAuNCA1LjUtMjIgMTUuOS0xNi4ybDE1MS44IDg0LjItNDIuMSA5NnoiXQogICAgfTsKICAgIGZhRWRnZUxlZ2FjeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlZGdlLWxlZ2FjeSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMDc4IiwgIk0tNiAyMjguMmwuNC0uNWMwIC4yIDAgLjMtLjEgLjVsLS4zIDB6bTQ2MC42IDE1LjVjMC00NC03LjgtODQuNS0yOC44LTEyMi40LTQxLTczLjQtMTEzLjYtMTEzLjMtMTk4LjYtMTEzLjMtMTM5LjktLjMtMjE4LjMgMTA1LjItMjMyLjggMjE5LjcgNDIuNC02MS4zIDExNy4xLTEyMS40IDIyMC40LTEyNSAwIDAgMTA5LjcgMCA5OS40IDEwNWwtMTc1LjggMGM2LjQtMzcuNCAxOC41LTU5IDM0LjMtNzguOS03NSAzNC45LTEyMS44IDk2LjEtMTIwLjggMTg4LjMgLjggNzEuNSA1MC4xIDE0NC44IDEyMC44IDE3MiA4My40IDMxLjggMTkyLjggNy4yIDI0MC4xLTIxLjNsMC0xMDQuNGMtODAuOSA1Ni41LTI3MC45IDYwLjktMjcyLjMtNjcuNmwzMTQuMSAwIDAtNTIuMXoiXQogICAgfTsKICAgIGZhU3F1YXJlTGFzdGZtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1sYXN0Zm0iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsibGFzdGZtLXNxdWFyZSJdLCAiZjIwMyIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTIxMC43IDI4MC44Yy0xLjgtNS41LTMuNC0xMC44LTUtMTUuOS0xMi45LTQxLjktMjEtNjguNC01OC02OC40LTIyLjQgMC00NS4xIDE2LjEtNDUuMSA2MS4yIDAgMzUuMiAxOCA1Ny4yIDQzLjMgNTcuMiAyOC42IDAgNDcuNi0yMS4zIDQ3LjYtMjEuM2wxMS43IDMxLjlzLTE5LjggMTkuNC02MS4yIDE5LjRjLTUxLjMgMC03OS45LTMwLjEtNzkuOS04NS44IDAtNTcuOSAyOC42LTkyIDgyLjUtOTIgNjcuOSAwIDc5LjMgMzUuMyA5Ni40IDg4LjQgMS40IDQuNCAyLjkgOC45IDQuNCAxMy41IDguOCAyNi44IDI0LjIgNDYuMiA2MS4yIDQ2LjIgMjQuOSAwIDM4LjEtNS41IDM4LjEtMTkuMSAwLTE3LjUtMTYuOS0yMS4yLTQwLTI2LjQtMy4yLS43LTYuNS0xLjQtOS45LTIuMi0zMC40LTcuMy00Mi41LTIzLjEtNDIuNS00OCAwLTQwIDMyLjMtNTIuNCA2NS4yLTUyLjQgMzcuNCAwIDYwLjEgMTMuNiA2MyA0Ni42bC0zNi43IDQuNGMtMS41LTE1LjgtMTEtMjIuNC0yOC42LTIyLjQtMTYuMSAwLTI2IDcuMy0yNiAxOS44IDAgMTEgNC44IDE3LjYgMjAuOSAyMS4zIDIuMiAuNSA0LjUgMSA2LjcgMS40IDMxLjEgNi41IDY1LjEgMTMuNyA2NS4xIDU2LjEgLjEgMzYuNy0zMC43IDUwLjYtNzYuMSA1MC42LTYzLjQgMC04NS40LTI4LjYtOTcuMS02NC4xeiJdCiAgICB9OwogICAgZmFMYXN0Zm1TcXVhcmUgPSBmYVNxdWFyZUxhc3RmbTsKICAgIGZhR29vZHJlYWRzRyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnb29kcmVhZHMtZyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmM2E5IiwgIk0xMC44IDQwMy4zbDIuOCAwYzEyLjcgMCAyNS41IDAgMzguMiAuMSAxLjYgMCAzLjEtLjQgMy42IDIuMSA3LjEgMzQuOSAzMCA1NC42IDYyLjkgNjMuOSAyNi45IDcuNiA1NC4xIDcuOCA4MS4zIDEuOCAzMy44LTcuNCA1Ni0yOC4zIDY4LTYwLjQgOC0yMS41IDEwLjctNDMuOCAxMS02Ni41IC4xLTUuOCAuMy00Ny0uMi01Mi44bC0uOS0uM2MtLjggMS41LTEuNyAyLjktMi41IDQuNC0yMi4xIDQzLjEtNjEuMyA2Ny40LTEwNS40IDY5LjEtMTAzIDQtMTY5LjQtNTctMTcyLTE3Ni4yLS41LTIzLjcgMS44LTQ2LjkgOC4zLTY5LjcgMjAuNi03MS4xIDc0LjYtMTE4LjIgMTUzLjktMTE4LjggNjEuMy0uNCAxMDEuNSAzOC43IDExNi4yIDcwLjMgLjUgMS4xIDEuMyAyLjMgMi40IDEuOWwwLTYxLjYgNDQuMyAwYzAgMjgwLjMgLjEgMzMyLjIgLjEgMzMyLjItLjEgNzguNS0yNi43IDE0My43LTEwMyAxNjIuMi02OS41IDE2LjktMTU5IDQuOC0xOTYtNTcuMi04LTEzLjUtMTEuOC0yOC4zLTEzLTQ0LjV6TTE1Ny4xIDM2LjVjLTUyLjUtLjUtMTA4LjUgNDAuNy0xMTUgMTMzLjgtNC4xIDU5IDE0LjggMTIyLjIgNzEuNSAxNDguNiAyNy42IDEyLjkgNzQuMyAxNSAxMDguMy04LjcgNDcuNi0zMy4yIDYyLjctOTcgNTQuOC0xNTQtOS43LTcxLjEtNDcuOC0xMjAtMTE5LjYtMTE5Ljd6Il0KICAgIH07CiAgICBmYUNjTWFzdGVyY2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYy1tYXN0ZXJjYXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxZjEiLCAiTTQ4Mi45IDQxMC4zYzAgNi44LTQuNiAxMS43LTExLjIgMTEuNy02LjggMC0xMS4yLTUuMi0xMS4yLTExLjdzNC40LTExLjcgMTEuMi0xMS43YzYuNiAwIDExLjIgNS4yIDExLjIgMTEuN3pNMTcyLjEgMzk4LjZjLTcuMSAwLTExLjIgNS4yLTExLjIgMTEuN1MxNjUgNDIyIDE3Mi4xIDQyMmM2LjUgMCAxMC45LTQuOSAxMC45LTExLjctLjEtNi41LTQuNC0xMS43LTEwLjktMTEuN3ptMTE3LjUtLjNjLTUuNCAwLTguNyAzLjUtOS41IDguN2wxOS4xIDBjLS45LTUuNy00LjQtOC43LTkuNi04Ljd6bTEwNy44IC4zYy02LjggMC0xMC45IDUuMi0xMC45IDExLjdzNC4xIDExLjcgMTAuOSAxMS43IDExLjItNC45IDExLjItMTEuN2MwLTYuNS00LjQtMTEuNy0xMS4yLTExLjd6bTEwNS45IDI2LjFjMCAuMyAuMyAuNSAuMyAxLjEgMCAuMy0uMyAuNS0uMyAxLjEtLjMgLjMtLjMgLjUtLjUgLjgtLjMgLjMtLjUgLjUtMS4xIC41LS4zIC4zLS41IC4zLTEuMSAuMy0uMyAwLS41IDAtMS4xLS4zLS4zIDAtLjUtLjMtLjgtLjUtLjMtLjMtLjUtLjUtLjUtLjgtLjMtLjUtLjMtLjgtLjMtMS4xIDAtLjUgMC0uOCAuMy0xLjEgMC0uNSAuMy0uOCAuNS0xLjEgLjMtLjMgLjUtLjMgLjgtLjUgLjUtLjMgLjgtLjMgMS4xLS4zIC41IDAgLjggMCAxLjEgLjMgLjUgLjMgLjggLjMgMS4xIC41cy4yIC42IC41IDEuMXptLTIuMiAxLjRjLjUgMCAuNS0uMyAuOC0uMyAuMy0uMyAuMy0uNSAuMy0uOHMwLS41LS4zLS44Yy0uMyAwLS41LS4zLTEuMS0uM2wtMS42IDAgMCAzLjUgLjggMCAwLTEuNCAuMyAwIDEuMSAxLjQgLjggMC0xLjEtMS4zek01NzYgODFsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgxYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgxQzAgNTQuNSAyMS41IDMzIDQ4IDMzbDQ4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek02NCAyMjAuNmMwIDc2LjUgNjIuMSAxMzguNSAxMzguNSAxMzguNSAyNy4yIDAgNTMuOS04LjIgNzYuNS0yMy4xLTcyLjktNTkuMy03Mi40LTE3MS4yIDAtMjMwLjUtMjIuNi0xNS00OS4zLTIzLjEtNzYuNS0yMy4xLTc2LjQtLjEtMTM4LjUgNjItMTM4LjUgMTM4LjJ6TTI4OCAzMjkuNGM3MC41LTU1IDcwLjItMTYyLjIgMC0yMTcuNS03MC4yIDU1LjMtNzAuNSAxNjIuNiAwIDIxNy41ek0xNDUuNyA0MDUuN2MwLTguNy01LjctMTQuNC0xNC43LTE0LjctNC42IDAtOS41IDEuNC0xMi44IDYuNS0yLjQtNC4xLTYuNS02LjUtMTIuMi02LjUtMy44IDAtNy42IDEuNC0xMC42IDUuNGwwLTQuNC04LjIgMCAwIDM2LjcgOC4yIDBjMC0xOC45LTIuNS0zMC4yIDktMzAuMiAxMC4yIDAgOC4yIDEwLjIgOC4yIDMwLjJsNy45IDBjMC0xOC4zLTIuNS0zMC4yIDktMzAuMiAxMC4yIDAgOC4yIDEwIDguMiAzMC4ybDguMiAwIDAtMjMtLjIgMHpNMTkwLjYgMzkybC03LjkgMCAwIDQuNGMtMi43LTMuMy02LjUtNS40LTExLjctNS40LTEwLjMgMC0xOC4yIDguMi0xOC4yIDE5LjMgMCAxMS4yIDcuOSAxOS4zIDE4LjIgMTkuMyA1LjIgMCA5LTEuOSAxMS43LTUuNGwwIDQuNiA3LjkgMCAwLTM2Ljh6bTQwLjUgMjUuNmMwLTE1LTIyLjktOC4yLTIyLjktMTUuMiAwLTUuNyAxMS45LTQuOCAxOC41LTEuMWwzLjMtNi41Yy05LjQtNi4xLTMwLjItNi0zMC4yIDguMiAwIDE0LjMgMjIuOSA4LjMgMjIuOSAxNSAwIDYuMy0xMy41IDUuOC0yMC43IC44bC0zLjUgNi4zYzExLjIgNy42IDMyLjYgNiAzMi42LTcuNXptMzUuNCA5LjNsLTIuMi02LjhjLTMuOCAyLjEtMTIuMiA0LjQtMTIuMi00LjFsMC0xNi42IDEzLjEgMCAwLTcuNC0xMy4xIDAgMC0xMS4yLTguMiAwIDAgMTEuMi03LjYgMCAwIDcuMyA3LjYgMCAwIDE2LjdjMCAxNy42IDE3LjMgMTQuNCAyMi42IDEwLjl6bTEzLjMtMTMuNGwyNy41IDBjMC0xNi4yLTcuNC0yMi42LTE3LjQtMjIuNi0xMC42IDAtMTguMiA3LjktMTguMiAxOS4zIDAgMjAuNSAyMi42IDIzLjkgMzMuOCAxNC4ybC0zLjgtNmMtNy44IDYuNC0xOS42IDUuOC0yMS45LTQuOXpNMzM4LjkgMzkyYy00LjYtMi0xMS42LTEuOC0xNS4yIDQuNGwwLTQuNC04LjIgMCAwIDM2LjcgOC4yIDAgMC0yMC43YzAtMTEuNiA5LjUtMTAuMSAxMi44LTguNGwyLjQtNy42em0xMC42IDE4LjNjMC0xMS40IDExLjYtMTUuMSAyMC43LTguNGwzLjgtNi41Yy0xMS42LTkuMS0zMi43LTQuMS0zMi43IDE1IDAgMTkuOCAyMi40IDIzLjggMzIuNyAxNWwtMy44LTYuNWMtOS4yIDYuNS0yMC43IDIuNi0yMC43LTguNnpNNDE2LjIgMzkybC04LjIgMCAwIDQuNGMtOC4zLTExLTI5LjktNC44LTI5LjkgMTMuOSAwIDE5LjIgMjIuNCAyNC43IDI5LjkgMTMuOWwwIDQuNiA4LjIgMCAwLTM2Ljh6bTMzLjcgMGMtMi40LTEuMi0xMS0yLjktMTUuMiA0LjRsMC00LjQtNy45IDAgMCAzNi43IDcuOSAwIDAtMjAuN2MwLTExIDktMTAuMyAxMi44LTguNGwyLjQtNy42em00MC4zLTE0LjlsLTcuOSAwIDAgMTkuM2MtOC4yLTEwLjktMjkuOS01LjEtMjkuOSAxMy45IDAgMTkuNCAyMi41IDI0LjYgMjkuOSAxMy45bDAgNC42IDcuOSAwIDAtNTEuN3ptNy42LTc1LjFsMCA0LjYgLjggMCAwLTQuNiAxLjkgMCAwLS44LTQuNiAwIDAgLjggMS45IDB6bTYuNiAxMjMuOGMwLS41IDAtMS4xLS4zLTEuNi0uMy0uMy0uNS0uOC0uOC0xLjFzLS44LS41LTEuMS0uOGMtLjUgMC0xLjEtLjMtMS42LS4zLS4zIDAtLjggLjMtMS40IC4zLS41IC4zLS44IC41LTEuMSAuOC0uNSAuMy0uOCAuOC0uOCAxLjEtLjMgLjUtLjMgMS4xLS4zIDEuNiAwIC4zIDAgLjggLjMgMS40IDAgLjMgLjMgLjggLjggMS4xIC4zIC4zIC41IC41IDEuMSAuOCAuNSAuMyAxLjEgLjMgMS40IC4zIC41IDAgMS4xIDAgMS42LS4zIC4zLS4zIC44LS41IDEuMS0uOHMuNS0uOCAuOC0xLjFjLjMtLjYgLjMtMS4xIC4zLTEuNHptMy4yLTEyNC43bC0xLjQgMC0xLjYgMy41LTEuNi0zLjUtMS40IDAgMCA1LjQgLjggMCAwLTQuMSAxLjYgMy41IDEuMSAwIDEuNC0zLjUgMCA0LjEgMS4xIDAgMC01LjR6bTQuNC04MC41YzAtNzYuMi02Mi4xLTEzOC4zLTEzOC41LTEzOC4zLTI3LjIgMC01My45IDguMi03Ni41IDIzLjEgNzIuMSA1OS4zIDczLjIgMTcxLjUgMCAyMzAuNSAyMi42IDE1IDQ5LjUgMjMuMSA3Ni41IDIzLjEgNzYuNCAuMSAxMzguNS02MS45IDEzOC41LTEzOC40eiJdCiAgICB9OwogICAgZmFEaXNjb3Vyc2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGlzY291cnNlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzOTMiLCAiTTIyNS45IDMyQzEwMy4zIDMyIDAgMTMwLjUgMCAyNTIuMSAwIDI1NiAuMSA0ODAgLjEgNDgwbDIyNS44LS4yQzM0OC42IDQ3OS44IDQ0OCAzNzcuNSA0NDggMjU1LjlTMzQ4LjYgMzIgMjI1LjkgMzJ6TTIyNCAzODRjLTE5LjQgMC0zNy45LTQuMy01NC40LTEyLjFMODguNSAzOTIgMTExLjQgMzE3Yy05LjgtMTguMS0xNS40LTM4LjktMTUuNC02MSAwLTcwLjcgNTcuMy0xMjggMTI4LTEyOHMxMjggNTcuMyAxMjggMTI4LTU3LjMgMTI4LTEyOCAxMjh6Il0KICAgIH07CiAgICBmYUJsYWNrVGllID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJsYWNrLXRpZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjdlIiwgIk0wIDMybDAgNDQ4IDQ0OCAwIDAtNDQ4LTQ0OCAwek0zMTYuNSAzNTcuMmwtOTIuNSA4OC43LTkyLjUtODguNyA2NC41LTE4NC02NC41LTg2LjYgMTg0LjkgMC02NC40IDg2LjYgNjQuNSAxODR6Il0KICAgIH07CiAgICBmYVNxdWFyZUZhY2Vib29rID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1mYWNlYm9vayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJmYWNlYm9vay1zcXVhcmUiXSwgImYwODIiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsOTguMiAwIDAtMTQ1LjgtNTIuOCAwIDAtNzguMiA1Mi44IDAgMC0zMy43YzAtODcuMSAzOS40LTEyNy41IDEyNS0xMjcuNSAxNi4yIDAgNDQuMiAzLjIgNTUuNyA2LjRsMCA3MC44Yy02LS42LTE2LjUtMS0yOS42LTEtNDIgMC01OC4yIDE1LjktNTguMiA1Ny4ybDAgMjcuOCA4My42IDAtMTQuNCA3OC4yLTY5LjMgMCAwIDE0NS44IDEyOSAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyeiJdCiAgICB9OwogICAgZmFGYWNlYm9va1NxdWFyZSA9IGZhU3F1YXJlRmFjZWJvb2s7CiAgICBmYUJhdHRsZU5ldCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJiYXR0bGUtbmV0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4MzUiLCAiTTQ0OC44IDIyNS42YzI2LjkgLjIgMzUuNi03LjQgMzguOS0xMi40IDEyLjUtMTYuMy03LjEtNDcuNi01Mi44LTcxLjMgMTcuOC0zMy42IDMwLjEtNjMuNyAzNi4zLTg1LjMgMy40LTExLjggMS4xLTE5IC41LTIwLjMtMS43IDEwLjUtMTUuOCA0OC41LTQ4LjIgMTAwLTI1LTExLjItNTYuNS0yMC4xLTkzLjgtMjMuOC04LjktMTYuOS0zNC45LTYzLjktNjAuNS04OC45LTE2LjgtMTYuNS0zMC4zLTIyLjYtNDAuOC0yMy41bDAgMGMtMTMuOC0xLjYtMjIuNyA1LjgtMjcuNCAxMS0xNy4yIDE4LjUtMjQuMyA0OC45LTI1IDg0LjEtNy4yLTEyLjMtMTcuMi0yNC42LTI4LjUtMjUuOWwtLjIgMGMtMjAuNy0zLjUtMzguNCAyOS4yLTM2IDgxLjMtMzguNCAxLjQtNzEgNS44LTkzIDExLjItOS45IDIuNC0xNi4yIDcuMy0xNy44IDkuNyAxLS40IDIyLjQtOS4yIDExMS42LTkuMiA1LjIgNTMgMjkuOCAxMDEuOCAyNiA5My4yLTkuNyAxNS40LTM4LjIgNjIuNC00Ny4zIDk3LjctNS45IDIyLjktNC40IDM3LjYgLjIgNDcuMSA1LjYgMTIuOCAxNi40IDE2LjcgMjMuMiAxOC4zIDI1IDUuNyA1NS40LTMuNiA4Ni43LTIxLjEtNy41IDEyLjgtMTMuOSAyOC41LTkuMSAzOS4zIDcuMyAxOS42IDQ0LjUgMTguNyA4OC40LTkuNCAyMC4yIDMyLjIgNDAuMSA1Ny45IDU1LjcgNzQuMSAyLjYgMi44IDUuNSA1LjIgOC44IDcuMSA1LjEgMy4yIDguNiAzLjQgOC42IDMuNC04LjItNi43LTM0LTM4LTYyLjUtOTEuOCAyMi4yLTE2IDQ1LjctMzguOSA2Ny41LTY5LjMgMTIyLjggNC42IDE0My4zLTI0LjggMTQ4LTMxLjYgMTQuNy0xOS45IDMuNC01Ny40LTU3LjMtOTMuN3pNMzcxIDMzMS44YzIzLjgtMzcuNyAzMC4zLTY3LjggMjkuNC05Mi4zIDI3LjkgMTcuNiA0Ny4yIDM3LjYgNDkuMSA1OC44IDEuMSAxMi45LTguMSAyOS4xLTc4LjUgMzMuNXpNMjE3LjEgMzg3LjdjOS44LTYuMiAxOS41LTEzLjEgMjkuMi0yMC41IDYuNyAxMy4zIDEzLjYgMjYuMSAyMC42IDM4LjItNDAuNiAyMS45LTY4LjggMTIuOC00OS44LTE3Ljd6bTIxNS0xNzEuM2MtMTAuMy01LjMtMjEuMi0xMC4zLTMyLjQtMTUgNy45LTEyLjEgMTUuNS0yNC40IDIyLjctMzYuOSAzOS4xIDI0LjEgNDUuOSA1My4yIDkuNiA1MS45ek0yNzkuNCAzOThjLTUuNS0xMS40LTExLTIzLjUtMTYuNS0zNi40IDQzLjIgMS4zIDYyLjQtMTguNyA2My4zLTIwLjQgMCAuMS0yNSAxNS42LTYyLjUgMTIuMiAzMC42LTI1LjYgNTkuMS01My43IDg1LjEtODQgOC43LTEwLjIgMTctMjAuNiAyNC45LTMxLjEtLjQtLjMtMS41LTMtMTYuNS0xMi01MS43IDYwLjMtMTAyLjMgOTgtMTMyLjggMTE1LjktMjAuNi0xMS4yLTQwLjgtMzEuOC01NS43LTYxLjUtMjAtMzkuOS0zMC04Mi40LTMxLjYtMTE2LjEgMTIuMyAuOSAyNS4zIDIuMiAzOC44IDMuOS0yMi4zIDM2LjgtMTQuNCA2My0xMy41IDY0LjIgMC0uMS0xLTI5LjIgMjAuMS01OS42IDkgNTIuNSAyNCAxMDMuOCA0NC43IDE1Mi44IC45LS40IDEuOCAuOSAxOC43LTguMi0yNi4zLTc0LjUtMzMuOC0xMzguMi0zNC0xNzMuNCAyMC0xMi40IDQ4LjItMTkuOCA4MS42LTE3LjggNDQuNiAyLjcgODYuNCAxNS4yIDExNi4zIDMwLjctNy4xIDEwLjQtMTQuOSAyMS4zLTIzLjMgMzIuNS0yMC43LTM3LjctNDcuMy00My45LTQ4LjktNDMuNyAuMSAwIDI1LjkgMTQuMSA0MS41IDQ3LjItMzcuNS0xMy44LTc2LjEtMjQuNC0xMTUuMy0zMS43LTEzLjEtMi40LTI2LjItNC40LTM5LjQtNi0uMSAuNC0xLjggMS44LTIuMiAyMC4zIDc3LjkgMTQuNSAxMzYuNiAzOS45IDE2Ny4yIDU3LjIgLjcgMjMuNi03IDUxLjYtMjUuNCA3OS42LTI0LjYgMzcuMy01Ni40IDY3LjItODQuOCA4NS40em0yNy40LTI4N2MtNDQuNi0xLjctNzMuNiA3LjQtOTQuNyAyMC43IDItNTIuMyAyMS4zLTc2LjQgMzguMi03NS4zIDE2LjktNC4yIDU0LjkgNTIuMiA1Ni41IDU0LjZ6bS0xMzAuNyAzLjFjLjUgMTIuMSAxLjYgMjQuNiAzLjIgMzcuMy0xNC42LS45LTI4LjctMS4zLTQyLjQtMS4zLS4xIDMuMi0uMS01MSAyNC43LTQ5LjZsLjEgMGM1LjggMS4xIDEwLjYgNi45IDE0LjQgMTMuNnptLTI4LjEgMTYyYzIwLjggMzkuNyA0My4zIDYwLjYgNjUuMyA3Mi4zLTQ2LjggMjQuOC03Ny41IDIwLTg0LjkgNC41LS4yLS4yLTExLjEtMTUuMyAxOS43LTc2LjhsMCAweiJdCiAgICB9OwogICAgZmFCaW1vYmplY3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmltb2JqZWN0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzNzgiLCAiTTQxNiAzMkwzMiAzMkMxNC40IDMyIDAgNDYuNCAwIDY0TDAgNDQ4YzAgMTcuNiAxNC40IDMyIDMyIDMybDM4NCAwYzE3LjYgMCAzMi0xNC40IDMyLTMybDAtMzg0YzAtMTcuNi0xNC40LTMyLTMyLTMyek0zNTIgMjg5LjRjMCA0OS40LTExLjQgODIuNi0xMDMuOCA4Mi42bC0xNi45IDBjLTQ0LjEgMC02Mi40LTE0LjktNzAuNC0zOC44bC0uOSAwIDAgMzQuOC02NCAwIDAtMjMyIDY0IDAgMCA3NC43IDEuMSAwYzQuNi0zMC41IDM5LjctMzguOCA2OS43LTM4LjhsMTcuMyAwYzkyLjQgMCAxMDMuOCAzMy4xIDEwMy44IDgyLjVsMCAzNSAuMSAwem0tNjQtMjguOWwwIDIyLjljMCAyMS43LTMuNCAzMy44LTM4LjQgMzMuOGwtNDUuMyAwYy0yOC45IDAtNDQuMS02LjUtNDQuMS0zNS43bDAtMTljMC0yOS4zIDE1LjItMzUuNyA0NC4xLTM1LjdsNDUuMyAwYzM1LS4yIDM4LjQgMTIgMzguNCAzMy43eiJdCiAgICB9OwogICAgaWNvbnMgPSB7CiAgICAgIGZhU3F1YXJlR2l0aHViLAogICAgICBmYUdpdGh1YlNxdWFyZSwKICAgICAgZmFUaGlua1BlYWtzLAogICAgICBmYUdvb2dsZURyaXZlLAogICAgICBmYUF1dG9wcmVmaXhlciwKICAgICAgZmFTcXVhcmVWaWFkZW8sCiAgICAgIGZhVmlhZGVvU3F1YXJlLAogICAgICBmYUNwYW5lbCwKICAgICAgZmFNZW5kZWxleSwKICAgICAgZmFEcmFmdDJkaWdpdGFsLAogICAgICBmYVJlcGx5ZCwKICAgICAgZmFFbXBpcmUsCiAgICAgIGZhQWNjZXNzaWJsZUljb24sCiAgICAgIGZhUXVvcmEsCiAgICAgIGZhQ2NKY2IsCiAgICAgIGZhRmVkb3JhLAogICAgICBmYUR1b2xpbmdvLAogICAgICBmYUZpcnN0ZHJhZnQsCiAgICAgIGZhRnJlZWJzZCwKICAgICAgZmFPZHlzZWUsCiAgICAgIGZhR2dDaXJjbGUsCiAgICAgIGZhQ2xvdWRmbGFyZSwKICAgICAgZmFIYWNrZXJyYW5rLAogICAgICBmYVNreWF0bGFzLAogICAgICBmYURlc2twcm8sCiAgICAgIGZhUmVzb2x2aW5nLAogICAgICBmYUJsYWNrYmVycnksCiAgICAgIGZhU3RyaXBlUywKICAgICAgZmFTcXVhcmVCZWhhbmNlLAogICAgICBmYUJlaGFuY2VTcXVhcmUsCiAgICAgIGZhU2VydmljZXN0YWNrLAogICAgICBmYVJvY2tldGNoYXQsCiAgICAgIGZhUmViZWwsCiAgICAgIGZhU3F1YXJlV2ViQXdlc29tZSwKICAgICAgZmFMaW5rdHJlZSwKICAgICAgZmFTaW1wbHlidWlsdCwKICAgICAgZmFTdHViYmVyLAogICAgICBmYUFwcGVyLAogICAgICBmYUdvb2dsZVNjaG9sYXIsCiAgICAgIGZhWWFybiwKICAgICAgZmFTdGFja092ZXJmbG93LAogICAgICBmYUJsdWV0b290aCwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNOY0pwLAogICAgICBmYVJlZGRpdCwKICAgICAgZmFDb25uZWN0ZGV2ZWxvcCwKICAgICAgZmFSZXNlYXJjaGdhdGUsCiAgICAgIGZhU2lnbmFsTWVzc2VuZ2VyLAogICAgICBmYVhpbmcsCiAgICAgIGZhU3F1YXJlSnMsCiAgICAgIGZhSnNTcXVhcmUsCiAgICAgIGZhRm9udGljb25zLAogICAgICBmYVVwcywKICAgICAgZmFBbWF6b25QYXksCiAgICAgIGZhUGFuZG9yYSwKICAgICAgZmFPcGVuaWQsCiAgICAgIGZhVnNjbywKICAgICAgZmFVYnVudHUsCiAgICAgIGZhVmlhY29pbiwKICAgICAgZmFaaGlodSwKICAgICAgZmFZYW5kZXgsCiAgICAgIGZhUGl4aXYsCiAgICAgIGZhT3BlbmFpLAogICAgICBmYVNpdGgsCiAgICAgIGZhTmZjRGlyZWN0aW9uYWwsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zQnksCiAgICAgIGZhVW1icmFjbywKICAgICAgZmFIb29saSwKICAgICAgZmFTcXVhcmVHaXQsCiAgICAgIGZhR2l0U3F1YXJlLAogICAgICBmYU9kbm9rbGFzc25pa2ksCiAgICAgIGZhRHJ1cGFsLAogICAgICBmYUJsb2dnZXJCLAogICAgICBmYUludmlzaW9uLAogICAgICBmYUZhY2Vib29rRiwKICAgICAgZmFDZW50b3MsCiAgICAgIGZhQ2NBbWF6b25QYXksCiAgICAgIGZhRWJheSwKICAgICAgZmFDb250YW8sCiAgICAgIGZhRWxsbywKICAgICAgZmFTaXN0cml4LAogICAgICBmYVBlcmlzY29wZSwKICAgICAgZmFFeHBlZGl0ZWRzc2wsCiAgICAgIGZhTmFwc3RlciwKICAgICAgZmFEZWxpY2lvdXMsCiAgICAgIGZhR3VpbGRlZCwKICAgICAgZmFYYm94LAogICAgICBmYVVudGFwcGQsCiAgICAgIGZhR29vZ2xlUGx1c0csCiAgICAgIGZhR2l0aHViQWx0LAogICAgICBmYUdldFBvY2tldCwKICAgICAgZmFHbGlkZSwKICAgICAgZmFCaXR5LAogICAgICBmYVdwZXhwbG9yZXIsCiAgICAgIGZhTWVnYXBvcnQsCiAgICAgIGZhTWRiLAogICAgICBmYVBhZ2U0LAogICAgICBmYVRoZVJlZFlldGksCiAgICAgIGZhSmlyYSwKICAgICAgZmFGZWRleCwKICAgICAgZmFFdmVybm90ZSwKICAgICAgZmFVc2IsCiAgICAgIGZhQW5ncnljcmVhdGl2ZSwKICAgICAgZmFNaXp1bmksCiAgICAgIGZhSXRjaElvLAogICAgICBmYVdpbmRvd3MsCiAgICAgIGZhU3R1bWJsZXVwb24sCiAgICAgIGZhR29vZ2xlLAogICAgICBmYURpc2NvcmQsCiAgICAgIGZhSGFja2VyTmV3cywKICAgICAgZmFFbGV2ZW50eSwKICAgICAgZmExMXR5LAogICAgICBmYVRlYW1zcGVhaywKICAgICAgZmFTdXBwbGUsCiAgICAgIGZhU3F1YXJlVHdpdHRlciwKICAgICAgZmFUd2l0dGVyU3F1YXJlLAogICAgICBmYUZvbnRBd2Vzb21lLAogICAgICBmYUZvbnRBd2Vzb21lRmxhZywKICAgICAgZmFGb250QXdlc29tZUxvZ29GdWxsLAogICAgICBmYVdpcnNpbmRoYW5kd2VyaywKICAgICAgZmFXc2gsCiAgICAgIGZhQ29uZmx1ZW5jZSwKICAgICAgZmFEaWdnLAogICAgICBmYVRocmVhZHMsCiAgICAgIGZhV3ByZXNzciwKICAgICAgZmFSZW5kYWN0LAogICAgICBmYVlvYXN0LAogICAgICBmYU5pbWJsciwKICAgICAgZmFQaXhlbGZlZCwKICAgICAgZmFZYWhvbywKICAgICAgZmFCbHVlc2t5LAogICAgICBmYVNjcmliZCwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNQZCwKICAgICAgZmFFYXJseWJpcmRzLAogICAgICBmYVNxdWFyZU9kbm9rbGFzc25pa2ksCiAgICAgIGZhT2Rub2tsYXNzbmlraVNxdWFyZSwKICAgICAgZmFNYXJrZG93biwKICAgICAgZmFUeXBvMywKICAgICAgZmFKb29tbGEsCiAgICAgIGZhV2VpeGluLAogICAgICBmYUdydW50LAogICAgICBmYVJvY2tybXMsCiAgICAgIGZhVW5zcGxhc2gsCiAgICAgIGZhU3F1YXJlSW5zdGFncmFtLAogICAgICBmYUluc3RhZ3JhbVNxdWFyZSwKICAgICAgZmFGaXJzdE9yZGVyQWx0LAogICAgICBmYUZ1bGNydW0sCiAgICAgIGZhQnJhdmVSZXZlcnNlLAogICAgICBmYUF2aWFuZXgsCiAgICAgIGZhTnM4LAogICAgICBmYVNxdWFyZVBpbnRlcmVzdCwKICAgICAgZmFQaW50ZXJlc3RTcXVhcmUsCiAgICAgIGZhQmx1ZXRvb3RoQiwKICAgICAgZmFHcmlwZmlyZSwKICAgICAgZmFTcXVhcmVHb29nbGVQbHVzLAogICAgICBmYUdvb2dsZVBsdXNTcXVhcmUsCiAgICAgIGZhQXBwU3RvcmUsCiAgICAgIGZhV2l4LAogICAgICBmYUludGVyY29tLAogICAgICBmYVJlYWN0ZXVyb3BlLAogICAgICBmYVdhemUsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zUmVtaXgsCiAgICAgIGZhQmFuZGNhbXAsCiAgICAgIGZhU3F1YXJlV2ViQXdlc29tZVN0cm9rZSwKICAgICAgZmFWaW1lb1YsCiAgICAgIGZhU3RyYXZhLAogICAgICBmYVVuaXJlZ2lzdHJ5LAogICAgICBmYUNjRGluZXJzQ2x1YiwKICAgICAgZmFQaW50ZXJlc3QsCiAgICAgIGZhQWxnb2xpYSwKICAgICAgZmFTdGFja3BhdGgsCiAgICAgIGZhT2N0b3B1c0RlcGxveSwKICAgICAgZmFZYW1tZXIsCiAgICAgIGZhTW9keCwKICAgICAgZmFTcXVhcmVUaHJlYWRzLAogICAgICBmYU9sZFJlcHVibGljLAogICAgICBmYVN1c2UsCiAgICAgIGZhQXBwU3RvcmVJb3MsCiAgICAgIGZhU3F1YXJlRHJpYmJibGUsCiAgICAgIGZhRHJpYmJibGVTcXVhcmUsCiAgICAgIGZhVWlraXQsCiAgICAgIGZhU3VwZXJwb3dlcnMsCiAgICAgIGZhWW91dHViZSwKICAgICAgZmFFbWJlciwKICAgICAgZmFCb290c3RyYXAsCiAgICAgIGZhSXR1bmVzLAogICAgICBmYVNxdWFyZVhpbmcsCiAgICAgIGZhWGluZ1NxdWFyZSwKICAgICAgZmFDc3MzQWx0LAogICAgICBmYVNxdWFyZXNwYWNlLAogICAgICBmYVRyZWxsbywKICAgICAgZmFWaWFkZW8sCiAgICAgIGZhU2VhcmNoZW5naW4sCiAgICAgIGZhUGF5cGFsLAogICAgICBmYVNxdWFyZUJsdWVza3ksCiAgICAgIGZhREFuZERCZXlvbmQsCiAgICAgIGZhTWljcm9zb2Z0LAogICAgICBmYUZseSwKICAgICAgZmFDY1N0cmlwZSwKICAgICAgZmFXb3JkcHJlc3NTaW1wbGUsCiAgICAgIGZhU2VsbHN5LAogICAgICBmYURhc2hjdWJlLAogICAgICBmYUdpdHRlciwKICAgICAgZmFXb2xmUGFja0JhdHRhbGlvbiwKICAgICAgZmFMYXN0Zm0sCiAgICAgIGZhU2hvcHdhcmUsCiAgICAgIGZhQmxvZ2dlciwKICAgICAgZmFFZGdlLAogICAgICBmYUlveGhvc3QsCiAgICAgIGZhU2NobGl4LAogICAgICBmYURBbmRELAogICAgICBmYVZ1ZWpzLAogICAgICBmYU1ldGEsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zU2hhcmUsCiAgICAgIGZhU3R1ZGlvdmluYXJpLAogICAgICBmYUJpdGJ1Y2tldCwKICAgICAgZmFWaywKICAgICAgZmFHaXRodWIsCiAgICAgIGZhQ29kaWVwaWUsCiAgICAgIGZhUGllZFBpcGVyLAogICAgICBmYVJhc3BiZXJyeVBpLAogICAgICBmYUNzczMsCiAgICAgIGZhSHVic3BvdCwKICAgICAgZmFDbXBsaWQsCiAgICAgIGZhRHlhbG9nLAogICAgICBmYUVsZW1lbnRvciwKICAgICAgZmFGaXJzdE9yZGVyLAogICAgICBmYURyaWJiYmxlLAogICAgICBmYUxpbmtlZGluLAogICAgICBmYUNjUGF5cGFsLAogICAgICBmYURobCwKICAgICAgZmFUZXgsCiAgICAgIGZhU2hvcGlmeSwKICAgICAgZmFTcXVhcmVSZWRkaXQsCiAgICAgIGZhUmVkZGl0U3F1YXJlLAogICAgICBmYUNyZWF0aXZlQ29tbW9uc05jLAogICAgICBmYUdhbGFjdGljUmVwdWJsaWMsCiAgICAgIGZhRmFjZWJvb2ssCiAgICAgIGZhR2l0bGFiLAogICAgICBmYVFxLAogICAgICBmYVN0cmlwZSwKICAgICAgZmFEYWlseW1vdGlvbiwKICAgICAgZmFTdGVhbSwKICAgICAgZmFTbmFwY2hhdCwKICAgICAgZmFTbmFwY2hhdEdob3N0LAogICAgICBmYUdhbGFjdGljU2VuYXRlLAogICAgICBmYVBob2VuaXhGcmFtZXdvcmssCiAgICAgIGZhR2l0LAogICAgICBmYU9wdGluTW9uc3RlciwKICAgICAgZmFKZW5raW5zLAogICAgICBmYVNsaWRlc2hhcmUsCiAgICAgIGZhVWJlciwKICAgICAgZmFEaWdpdGFsT2NlYW4sCiAgICAgIGZhU291bmRjbG91ZCwKICAgICAgZmFTcXVhcmVGaWdtYSwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNTYSwKICAgICAgZmFDaHJvbWUsCiAgICAgIGZhVHJhZGVGZWRlcmF0aW9uLAogICAgICBmYVZhYWRpbiwKICAgICAgZmFEZXZpYW50YXJ0LAogICAgICBmYU1lZGl1bSwKICAgICAgZmFNZWRpdW1NLAogICAgICBmYU9wZW5jYXJ0LAogICAgICBmYVlDb21iaW5hdG9yLAogICAgICBmYUxpbmUsCiAgICAgIGZhQW1pbGlhLAogICAgICBmYUFzeW1tZXRyaWssCiAgICAgIGZhUGhhYnJpY2F0b3IsCiAgICAgIGZhQm90cywKICAgICAgZmFWaW5lLAogICAgICBmYU1lZHJ0LAogICAgICBmYU9zaSwKICAgICAgZmFHZywKICAgICAgZmFCdXlzZWxsYWRzLAogICAgICBmYUdvb2dsZVBsdXMsCiAgICAgIGZhU2NyZWVucGFsLAogICAgICBmYUJpdGNvaW4sCiAgICAgIGZhU3dpZnQsCiAgICAgIGZhRmlsZXNQaW53aGVlbCwKICAgICAgZmFMYXJhdmVsLAogICAgICBmYVdwZm9ybXMsCiAgICAgIGZhU3BlYWtlckRlY2ssCiAgICAgIGZhRmxpY2tyLAogICAgICBmYUNjVmlzYSwKICAgICAgZmFVcHdvcmssCiAgICAgIGZhS2FrYW9UYWxrLAogICAgICBmYUZsdXR0ZXIsCiAgICAgIGZhQnVmZmVyLAogICAgICBmYUdyYXRpcGF5LAogICAgICBmYUdvb2dsZVBheSwKICAgICAgZmFBcHBsZSwKICAgICAgZmFUdW1ibHIsCiAgICAgIGZhUGhvZW5peFNxdWFkcm9uLAogICAgICBmYUNlbnRlcmNvZGUsCiAgICAgIGZhRGViaWFuLAogICAgICBmYU1hc3RvZG9uLAogICAgICBmYVNrZXRjaCwKICAgICAgZmFXZWJBd2Vzb21lLAogICAgICBmYVNhc3MsCiAgICAgIGZhU3F1YXJlV2hhdHNhcHAsCiAgICAgIGZhV2hhdHNhcHBTcXVhcmUsCiAgICAgIGZhU2t5cGUsCiAgICAgIGZhQW5ndWxhciwKICAgICAgZmFPcGVuc3VzZSwKICAgICAgZmFEcm9wYm94LAogICAgICBmYURlZXplciwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNTYW1wbGluZywKICAgICAgZmFKZWRpT3JkZXIsCiAgICAgIGZhUlByb2plY3QsCiAgICAgIGZhSW5zdGFsb2QsCiAgICAgIGZhQ2FuYWRpYW5NYXBsZUxlYWYsCiAgICAgIGZhRXRoZXJldW0sCiAgICAgIGZhSG91enosCiAgICAgIGZhVmliZXIsCiAgICAgIGZhS2lja3N0YXJ0ZXIsCiAgICAgIGZhU3F1YXJlS2lja3N0YXJ0ZXIsCiAgICAgIGZhU3BvdGlmeSwKICAgICAgZmFMZWFucHViLAogICAgICBmYUphdmEsCiAgICAgIGZhTmZjU3ltYm9sLAogICAgICBmYVdvZHUsCiAgICAgIGZhU3F1YXJlU3RlYW0sCiAgICAgIGZhU3RlYW1TcXVhcmUsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zTmNFdSwKICAgICAgZmFOcG0sCiAgICAgIGZhQ2xvdWRzY2FsZSwKICAgICAgZmFUaGVtZWNvLAogICAgICBmYUdvb2dsZVBsYXksCiAgICAgIGZhS29ydnVlLAogICAgICBmYVczYywKICAgICAgZmFHcmF2LAogICAgICBmYUF3cywKICAgICAgZmFHbGlkZUcsCiAgICAgIGZhSnNmaWRkbGUsCiAgICAgIGZhS2V5YmFzZSwKICAgICAgZmFMdW1vbkRyb3AsCiAgICAgIGZhV2VlYmx5LAogICAgICBmYURvY2tlciwKICAgICAgZmFNYWdlbnRvLAogICAgICBmYUdpdEFsdCwKICAgICAgZmFGaXJlZm94QnJvd3NlciwKICAgICAgZmFDbG91ZHNtaXRoLAogICAgICBmYVdpemFyZHNPZlRoZUNvYXN0LAogICAgICBmYUNyZWF0aXZlQ29tbW9uc05kLAogICAgICBmYVVzcHMsCiAgICAgIGZhU3F1YXJlTGV0dGVyYm94ZCwKICAgICAgZmFNYW5kYWxvcmlhbiwKICAgICAgZmFTbGFjaywKICAgICAgZmFTbGFja0hhc2gsCiAgICAgIGZhQW5nZWxsaXN0LAogICAgICBmYUFuZHJvaWQsCiAgICAgIGZhTWVldHVwLAogICAgICBmYUZvbnRpY29uc0ZpLAogICAgICBmYVBhbGZlZCwKICAgICAgZmFXcGJlZ2lubmVyLAogICAgICBmYURpYXNwb3JhLAogICAgICBmYVByb2R1Y3RIdW50LAogICAgICBmYVNxdWFyZVVwd29yaywKICAgICAgZmFDdXR0bGVmaXNoLAogICAgICBmYU1lZGFwcHMsCiAgICAgIGZhUGl4LAogICAgICBmYVNxdWFyZVR1bWJsciwKICAgICAgZmFUdW1ibHJTcXVhcmUsCiAgICAgIGZhUmVhY3QsCiAgICAgIGZhSnhsLAogICAgICBmYVNxdWFyZUxpbmtlZGluLAogICAgICBmYUNzcywKICAgICAgZmFIYXNobm9kZSwKICAgICAgZmFSZWRkaXRBbGllbiwKICAgICAgZmFUaWt0b2ssCiAgICAgIGZhV29yZHByZXNzLAogICAgICBmYUlkZWFsLAogICAgICBmYVBpZWRQaXBlclBwLAogICAgICBmYVVzc3VubmFoLAogICAgICBmYUZvcnRBd2Vzb21lQWx0LAogICAgICBmYUJ1cm9tb2JlbGV4cGVydGUsCiAgICAgIGZhQmlsaWJpbGksCiAgICAgIGZhTmVvcywKICAgICAgZmFEZXYsCiAgICAgIGZhSG90amFyLAogICAgICBmYURvY2h1YiwKICAgICAgZmFWaW1lbywKICAgICAgZmFNYXhjZG4sCiAgICAgIGZhU3F1YXJlRm9udEF3ZXNvbWVTdHJva2UsCiAgICAgIGZhRm9udEF3ZXNvbWVBbHQsCiAgICAgIGZhU3BlYWthcCwKICAgICAgZmFGYW50YXN5RmxpZ2h0R2FtZXMsCiAgICAgIGZhTGludXgsCiAgICAgIGZhQ290dG9uQnVyZWF1LAogICAgICBmYUdvb2dsZVdhbGxldCwKICAgICAgZmFGb3Vyc3F1YXJlLAogICAgICBmYVNoaXJ0c2luYnVsaywKICAgICAgZmFNaW50Yml0LAogICAgICBmYVN0YXlsaW5rZWQsCiAgICAgIGZhV2ViZmxvdywKICAgICAgZmFSZW5yZW4sCiAgICAgIGZhUmV2LAogICAgICBmYUtleWNkbiwKICAgICAgZmFIaXJlQUhlbHBlciwKICAgICAgZmFTcXVhcmVIYWNrZXJOZXdzLAogICAgICBmYUhhY2tlck5ld3NTcXVhcmUsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zUGRBbHQsCiAgICAgIGZhT3JjaWQsCiAgICAgIGZhQmVoYW5jZSwKICAgICAgZmFNb25lcm8sCiAgICAgIGZhRmlnbWEsCiAgICAgIGZhSW5zdGFncmFtLAogICAgICBmYVBlcmJ5dGUsCiAgICAgIGZhU3F1YXJlVmltZW8sCiAgICAgIGZhVmltZW9TcXVhcmUsCiAgICAgIGZhUHVzaGVkLAogICAgICBmYU1peGNsb3VkLAogICAgICBmYVlhbmRleEludGVybmF0aW9uYWwsCiAgICAgIGZhSGl2ZSwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNaZXJvLAogICAgICBmYVNxdWFyZVNuYXBjaGF0LAogICAgICBmYVNuYXBjaGF0U3F1YXJlLAogICAgICBmYVRoZW1laXNsZSwKICAgICAgZmFEYXJ0TGFuZywKICAgICAgZmFEZXBsb3lkb2csCiAgICAgIGZhRmxpcGJvYXJkLAogICAgICBmYUJ1eU5MYXJnZSwKICAgICAgZmFXYXRjaG1hbk1vbml0b3JpbmcsCiAgICAgIGZhSGlwcywKICAgICAgZmFDbG91ZHZlcnNpZnksCiAgICAgIGZhR29vZHJlYWRzLAogICAgICBmYVRpZGFsLAogICAgICBmYVVuaXR5LAogICAgICBmYVRlbmNlbnRXZWlibywKICAgICAgZmFGcmVlQ29kZUNhbXAsCiAgICAgIGZhWFR3aXR0ZXIsCiAgICAgIGZhU3RpY2tlck11bGUsCiAgICAgIGZhVHdpdGNoLAogICAgICBmYUtpY2tzdGFydGVySywKICAgICAgZmFDcml0aWNhbFJvbGUsCiAgICAgIGZhU3RlYW1TeW1ib2wsCiAgICAgIGZhTWFpbGNoaW1wLAogICAgICBmYUx1bW9uLAogICAgICBmYU51dHJpdGlvbml4LAogICAgICBmYUNyZWF0aXZlQ29tbW9uc1NhbXBsaW5nUGx1cywKICAgICAgZmFSZWRoYXQsCiAgICAgIGZhU3F1YXJlUGllZFBpcGVyLAogICAgICBmYVBpZWRQaXBlclNxdWFyZSwKICAgICAgZmFXaGF0c2FwcCwKICAgICAgZmFJbWRiLAogICAgICBmYVB5dGhvbiwKICAgICAgZmFDYXNoQXBwLAogICAgICBmYVBpbnRlcmVzdFAsCiAgICAgIGZhV2htY3MsCiAgICAgIGZhSm9nZXQsCiAgICAgIGZhU3F1YXJlWW91dHViZSwKICAgICAgZmFZb3V0dWJlU3F1YXJlLAogICAgICBmYUF0bGFzc2lhbiwKICAgICAgZmFQaWVkUGlwZXJIYXQsCiAgICAgIGZhSW50ZXJuZXRFeHBsb3JlciwKICAgICAgZmFBaXJibmIsCiAgICAgIGZhSnMsCiAgICAgIGZhUXVpbnNjYXBlLAogICAgICBmYUFkdmVyc2FsLAogICAgICBmYUNyZWF0aXZlQ29tbW9ucywKICAgICAgZmFOb3Rpb24sCiAgICAgIGZhQ2hyb21lY2FzdCwKICAgICAgZmFXaWtpcGVkaWFXLAogICAgICBmYVNpdHJveCwKICAgICAgZmFTcXVhcmVHaXRsYWIsCiAgICAgIGZhR2l0bGFiU3F1YXJlLAogICAgICBmYVNob2VsYWNlLAogICAgICBmYVNlbGxjYXN0LAogICAgICBmYU1peCwKICAgICAgZmFDY0FwcGxlUGF5LAogICAgICBmYUJyYXZlLAogICAgICBmYUV0c3ksCiAgICAgIGZhQnRjLAogICAgICBmYUFkbiwKICAgICAgZmFTcXVhcmVYVHdpdHRlciwKICAgICAgZmFTcXVhcmVGb250QXdlc29tZSwKICAgICAgZmFGb3J1bWJlZSwKICAgICAgZmE0Mkdyb3VwLAogICAgICBmYUlubm9zb2Z0LAogICAgICBmYVN0dW1ibGV1cG9uQ2lyY2xlLAogICAgICBmYVN5bWZvbnksCiAgICAgIGZhU2FsZXNmb3JjZSwKICAgICAgZmFTb3VyY2V0cmVlLAogICAgICBmYUxpbmtlZGluSW4sCiAgICAgIGZhSHRtbDUsCiAgICAgIGZhUnVzdCwKICAgICAgZmFIb3JuYmlsbCwKICAgICAgZmFQaHAsCiAgICAgIGZhRGlzcXVzLAogICAgICBmYTUwMHB4LAogICAgICBmYUFmZmlsaWF0ZXRoZW1lLAogICAgICBmYVJlZFJpdmVyLAogICAgICBmYVR3aXR0ZXIsCiAgICAgIGZhRm9ydEF3ZXNvbWUsCiAgICAgIGZhTWl4ZXIsCiAgICAgIGZhTHlmdCwKICAgICAgZmFBcHBsZVBheSwKICAgICAgZmFBcnRzdGF0aW9uLAogICAgICBmYU5vZGVKcywKICAgICAgZmFVbmNoYXJ0ZWQsCiAgICAgIGZhUGxheXN0YXRpb24sCiAgICAgIGZhTWljcm9ibG9nLAogICAgICBmYUdpdGtyYWtlbiwKICAgICAgZmFUZWxlZ3JhbSwKICAgICAgZmFUZWxlZ3JhbVBsYW5lLAogICAgICBmYUl0dW5lc05vdGUsCiAgICAgIGZhTGVzcywKICAgICAgZmFGaXJlZm94LAogICAgICBmYUthZ2dsZSwKICAgICAgZmFGYWNlYm9va01lc3NlbmdlciwKICAgICAgZmFBdWRpYmxlLAogICAgICBmYVBhdHJlb24sCiAgICAgIGZhVm52LAogICAgICBmYVBhZ2VsaW5lcywKICAgICAgZmFBbWF6b24sCiAgICAgIGZhRW52aXJhLAogICAgICBmYUxpbm9kZSwKICAgICAgZmFBY2N1c29mdCwKICAgICAgZmFFcmxhbmcsCiAgICAgIGZhQ2NEaXNjb3ZlciwKICAgICAgZmFTYWZhcmksCiAgICAgIGZhU3BhY2VBd2Vzb21lLAogICAgICBmYU5vZGUsCiAgICAgIGZhQ29kZXBlbiwKICAgICAgZmFSYXZlbHJ5LAogICAgICBmYUFsaXBheSwKICAgICAgZmFDY0FtZXgsCiAgICAgIGZhUGllZFBpcGVyQWx0LAogICAgICBmYUxldHRlcmJveGQsCiAgICAgIGZhT3BlcmEsCiAgICAgIGZhV2VpYm8sCiAgICAgIGZhUmVhZG1lLAogICAgICBmYUdvbGFuZywKICAgICAgZmFTdGFja0V4Y2hhbmdlLAogICAgICBmYUd1bHAsCiAgICAgIGZhWWVscCwKICAgICAgZmFHb2ZvcmUsCiAgICAgIGZhQXZpYXRvLAogICAgICBmYVBhZGxldCwKICAgICAgZmFFZGdlTGVnYWN5LAogICAgICBmYVNxdWFyZUxhc3RmbSwKICAgICAgZmFMYXN0Zm1TcXVhcmUsCiAgICAgIGZhR29vZHJlYWRzRywKICAgICAgZmFDY01hc3RlcmNhcmQsCiAgICAgIGZhRGlzY291cnNlLAogICAgICBmYUJsYWNrVGllLAogICAgICBmYVNxdWFyZUZhY2Vib29rLAogICAgICBmYUZhY2Vib29rU3F1YXJlLAogICAgICBmYUJhdHRsZU5ldCwKICAgICAgZmFCaW1vYmplY3QKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZm9ydGF3ZXNvbWUrZnJlZS1yZWd1bGFyLXN2Zy1pY29uc0A3LjEuMC9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZyZWUtcmVndWxhci1zdmctaWNvbnMvaW5kZXgubWpzCnZhciBwcmVmaXgyLCBmYVNxdWFyZU1pbnVzLCBmYU1pbnVzU3F1YXJlLCBmYUNhbGVuZGFyQ2hlY2ssIGZhRmFjZUtpc3MsIGZhS2lzcywgZmFQYXN0ZSwgZmFGaWxlQ2xpcGJvYXJkLCBmYUhhbmRQb2ludExlZnQsIGZhRmlsZUV4Y2VsLCBmYUVudmVsb3BlLCBmYVNxdWFyZUNhcmV0RG93biwgZmFDYXJldFNxdWFyZURvd24sIGZhVHJ1Y2ssIGZhQmVsbCwgZmFNZXNzYWdlLCBmYUNvbW1lbnRBbHQsIGZhRmFjZURpenp5LCBmYURpenp5LCBmYUNhbGVuZGFyRGF5cywgZmFDYWxlbmRhckFsdCwgZmFIYW5kUG9pbnRVcCwgZmFIYW5kTGl6YXJkLCBmYVNxdWFyZUZ1bGwsIGZhQ2lyY2xlUGF1c2UsIGZhUGF1c2VDaXJjbGUsIGZhSGFyZERyaXZlLCBmYUhkZCwgZmFGaWxlWmlwcGVyLCBmYUZpbGVBcmNoaXZlLCBmYUZsb3BweURpc2ssIGZhU2F2ZSwgZmFGYWNlR3JpblRvbmd1ZVNxdWludCwgZmFHcmluVG9uZ3VlU3F1aW50LCBmYUNhbWVyYSwgZmFDYW1lcmFBbHQsIGZhRmFjZUdyaW5TdGFycywgZmFHcmluU3RhcnMsIGZhRXllLCBmYUZhY2VTYWRUZWFyLCBmYVNhZFRlYXIsIGZhU2hhcmVGcm9tU3F1YXJlLCBmYVNoYXJlU3F1YXJlLCBmYU5vdGVTdGlja3ksIGZhU3RpY2t5Tm90ZSwgZmFIYW5kQmFja0Zpc3QsIGZhSGFuZFJvY2ssIGZhQ2hlc3NRdWVlbiwgZmFGYWNlR3JpblRlYXJzLCBmYUdyaW5UZWFycywgZmFQZW5Ub1NxdWFyZSwgZmFFZGl0LCBmYUZhY2VHcmluQmVhbVN3ZWF0LCBmYUdyaW5CZWFtU3dlYXQsIGZhQ2xvY2ssIGZhQ2xvY2tGb3VyLCBmYUZhY2VMYXVnaFdpbmssIGZhTGF1Z2hXaW5rLCBmYVBhcGVyUGxhbmUsIGZhSGVhcnQsIGZhRm9udEF3ZXNvbWUyLCBmYUZvbnRBd2Vzb21lRmxhZzIsIGZhRm9udEF3ZXNvbWVMb2dvRnVsbDIsIGZhQ2xvbmUsIGZhRm9sZGVyT3BlbiwgZmFXaW5kb3dNaW5pbWl6ZSwgZmFTdGFySGFsZiwgZmFBbGFybUNsb2NrLCBmYU5ld3NwYXBlciwgZmFIb3NwaXRhbCwgZmFIb3NwaXRhbEFsdCwgZmFIb3NwaXRhbFdpZGUsIGZhQ2lyY2xlU3RvcCwgZmFTdG9wQ2lyY2xlLCBmYU9iamVjdFVuZ3JvdXAsIGZhQ29tbWVudCwgZmFDaGVzc1Bhd24sIGZhQ2FsZW5kYXJQbHVzLCBmYUNsaXBib2FyZCwgZmFUaHVtYnNEb3duLCBmYUlkQmFkZ2UsIGZhU3F1YXJlQ2hlY2ssIGZhQ2hlY2tTcXVhcmUsIGZhQ2hlc3NCaXNob3AsIGZhRW52ZWxvcGVPcGVuLCBmYUNpcmNsZVhtYXJrLCBmYVRpbWVzQ2lyY2xlLCBmYVhtYXJrQ2lyY2xlLCBmYVNxdWFyZUNhcmV0VXAsIGZhQ2FyZXRTcXVhcmVVcCwgZmFGaWxlSW1hZ2UsIGZhU3F1YXJlQ2FyZXRSaWdodCwgZmFDYXJldFNxdWFyZVJpZ2h0LCBmYVN1biwgZmFJbWFnZSwgZmFMaWdodGJ1bGIsIGZhQWRkcmVzc0NhcmQsIGZhQ29udGFjdENhcmQsIGZhVmNhcmQsIGZhRmFjZU1laCwgZmFNZWgsIGZhTWFwLCBmYUhhbmRQb2ludERvd24sIGZhRmFjZU1laEJsYW5rLCBmYU1laEJsYW5rLCBmYUZhY2VHcmluVG9uZ3VlLCBmYUdyaW5Ub25ndWUsIGZhRnV0Ym9sLCBmYUZ1dGJvbEJhbGwsIGZhU29jY2VyQmFsbCwgZmFGYWNlU3VycHJpc2UsIGZhU3VycHJpc2UsIGZhRm9sZGVyLCBmYUZvbGRlckJsYW5rLCBmYUNsb3VkLCBmYUNpcmNsZSwgZmFGYWNlR3JpblNxdWludCwgZmFHcmluU3F1aW50LCBmYUNpcmNsZVVzZXIsIGZhVXNlckNpcmNsZSwgZmFSZWN0YW5nbGVMaXN0LCBmYUxpc3RBbHQsIGZhSGFuZCwgZmFIYW5kUGFwZXIsIGZhVGh1bWJzVXAsIGZhQnVpbGRpbmcsIGZhQ2hlc3NSb29rLCBmYUNpcmNsZVF1ZXN0aW9uLCBmYVF1ZXN0aW9uQ2lyY2xlLCBmYUZpbGUsIGZhRmFjZVNhZENyeSwgZmFTYWRDcnksIGZhQ2FsZW5kYXJNaW51cywgZmFGYWNlVGlyZWQsIGZhVGlyZWQsIGZhSGFuZFBvaW50UmlnaHQsIGZhQ2lyY2xlVXAsIGZhQXJyb3dBbHRDaXJjbGVVcCwgZmFIYW5kU2Npc3NvcnMsIGZhR2VtLCBmYVJlY3RhbmdsZVhtYXJrLCBmYVJlY3RhbmdsZVRpbWVzLCBmYVRpbWVzUmVjdGFuZ2xlLCBmYVdpbmRvd0Nsb3NlLCBmYVRyYXNoQ2FuLCBmYVRyYXNoQWx0LCBmYUxpZmVSaW5nLCBmYUNvcHlyaWdodCwgZmFDaXJjbGVMZWZ0LCBmYUFycm93QWx0Q2lyY2xlTGVmdCwgZmFDYWxlbmRhciwgZmFGYWNlRnJvd25PcGVuLCBmYUZyb3duT3BlbiwgZmFDaGFydEJhciwgZmFCYXJDaGFydCwgZmFIb3VzZSwgZmFIb21lLCBmYUhvbWVBbHQsIGZhSG9tZUxnQWx0LCBmYUZhY2VGcm93biwgZmFGcm93biwgZmFVc2VyLCBmYVVzZXJBbHQsIGZhVXNlckxhcmdlLCBmYVNub3dmbGFrZSwgZmFCb29rbWFyaywgZmFTcXVhcmVDYXJldExlZnQsIGZhQ2FyZXRTcXVhcmVMZWZ0LCBmYUhhbmRzaGFrZSwgZmFIYW5kc2hha2VBbHQsIGZhSGFuZHNoYWtlU2ltcGxlLCBmYUZhY2VTbWlsZVdpbmssIGZhU21pbGVXaW5rLCBmYUZhY2VHcmluU3F1aW50VGVhcnMsIGZhR3JpblNxdWludFRlYXJzLCBmYUZpbGVBdWRpbywgZmFDYWxlbmRhclhtYXJrLCBmYUNhbGVuZGFyVGltZXMsIGZhQ2lyY2xlRG93biwgZmFBcnJvd0FsdENpcmNsZURvd24sIGZhRmlsZUxpbmVzLCBmYUZpbGVBbHQsIGZhRmlsZVRleHQsIGZhQ29tbWVudHMsIGZhQ2lyY2xlQ2hlY2ssIGZhQ2hlY2tDaXJjbGUsIGZhTW9vbiwgZmFDbG9zZWRDYXB0aW9uaW5nLCBmYUltYWdlcywgZmFDaXJjbGVSaWdodCwgZmFBcnJvd0FsdENpcmNsZVJpZ2h0LCBmYUlkQ2FyZCwgZmFEcml2ZXJzTGljZW5zZSwgZmFDaXJjbGVQbGF5LCBmYVBsYXlDaXJjbGUsIGZhRmFjZUxhdWdoQmVhbSwgZmFMYXVnaEJlYW0sIGZhQWRkcmVzc0Jvb2ssIGZhQ29udGFjdEJvb2ssIGZhSG91cmdsYXNzLCBmYUhvdXJnbGFzc0VtcHR5LCBmYUhlYWRwaG9uZXMsIGZhSGVhZHBob25lc0FsdCwgZmFIZWFkcGhvbmVzU2ltcGxlLCBmYUZpbGVQb3dlcnBvaW50LCBmYVdpbmRvd01heGltaXplLCBmYUNvbW1lbnREb3RzLCBmYUNvbW1lbnRpbmcsIGZhRmFjZUdyaW5Ub25ndWVXaW5rLCBmYUdyaW5Ub25ndWVXaW5rLCBmYUhvdXJnbGFzc0hhbGYsIGZhSG91cmdsYXNzMiwgZmFDcmVkaXRDYXJkLCBmYUNyZWRpdENhcmRBbHQsIGZhSGFuZFNwb2NrLCBmYUJlbGxTbGFzaCwgZmFTdGFyLCBmYUZsYWcsIGZhTGVtb24sIGZhV2luZG93UmVzdG9yZSwgZmFGYWNlR3JpbkhlYXJ0cywgZmFHcmluSGVhcnRzLCBmYUZhY2VLaXNzQmVhbSwgZmFLaXNzQmVhbSwgZmFGaWxlUGRmLCBmYUZhY2VHcmluV2lkZSwgZmFHcmluQWx0LCBmYUZhY2VMYXVnaFNxdWludCwgZmFMYXVnaFNxdWludCwgZmFGYWNlS2lzc1dpbmtIZWFydCwgZmFLaXNzV2lua0hlYXJ0LCBmYUNvcHksIGZhQ2hlc3NLaW5nLCBmYVNxdWFyZVBsdXMsIGZhUGx1c1NxdWFyZSwgZmFGaWxlQ29kZSwgZmFGYWNlR3JpbldpbmssIGZhR3JpbldpbmssIGZhTW9uZXlCaWxsMSwgZmFNb25leUJpbGxBbHQsIGZhRXllU2xhc2gsIGZhRmlsZVdvcmQsIGZhRmFjZUFuZ3J5LCBmYUFuZ3J5LCBmYUNoZXNzS25pZ2h0LCBmYUZhY2VHcmluQmVhbSwgZmFHcmluQmVhbSwgZmFIYW5kUGVhY2UsIGZhQ29tcGFzcywgZmFTcXVhcmUsIGZhRmFjZUdyaW4sIGZhR3JpbiwgZmFGYWNlU21pbGUsIGZhU21pbGUsIGZhRmFjZVNtaWxlQmVhbSwgZmFTbWlsZUJlYW0sIGZhRm9sZGVyQ2xvc2VkLCBmYUtleWJvYXJkLCBmYUZhY2VSb2xsaW5nRXllcywgZmFNZWhSb2xsaW5nRXllcywgZmFGYWNlR3JpbWFjZSwgZmFHcmltYWNlLCBmYUNpcmNsZURvdCwgZmFEb3RDaXJjbGUsIGZhT2JqZWN0R3JvdXAsIGZhRmFjZUZsdXNoZWQsIGZhRmx1c2hlZCwgZmFTdGFySGFsZlN0cm9rZSwgZmFTdGFySGFsZkFsdCwgZmFGaWxlVmlkZW8sIGZhRmFjZUxhdWdoLCBmYUxhdWdoLCBmYUhhbmRQb2ludGVyLCBmYVJlZ2lzdGVyZWQsIGljb25zMjsKdmFyIGluaXRfZnJlZV9yZWd1bGFyX3N2Z19pY29ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0Bmb3J0YXdlc29tZStmcmVlLXJlZ3VsYXItc3ZnLWljb25zQDcuMS4wL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZnJlZS1yZWd1bGFyLXN2Zy1pY29ucy9pbmRleC5tanMiKCkgewogICAgcHJlZml4MiA9ICJmYXIiOwogICAgZmFTcXVhcmVNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtbWludXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2MTc2NywgIm1pbnVzLXNxdWFyZSJdLCAiZjE0NiIsICJNNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MHpNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTEzNiAyMzJsMTc2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE3NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFNaW51c1NxdWFyZSA9IGZhU3F1YXJlTWludXM7CiAgICBmYUNhbGVuZGFyQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXItY2hlY2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI3NCIsICJNMzI4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAxNjAgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0ek02NCAxMTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI4OGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjg4YzAtOC44LTcuMi0xNi0xNi0xNkw2NCAxMTJ6bTIzMC43IDY1LjljNy44LTEwLjcgMjIuOC0xMy4xIDMzLjUtNS4zIDEwLjcgNy44IDEzLjEgMjIuOCA1LjMgMzMuNUwyMTEuNCAzNzQuMWMtNC4xIDUuNy0xMC41IDkuMy0xNy41IDkuOC03IC41LTEzLjktMi0xOC44LTYuOWwtNTUuOS01NS45Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMzYgMzYgMTA1LjYtMTQ1LjJ6Il0KICAgIH07CiAgICBmYUZhY2VLaXNzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2Uta2lzcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUzNSwgImtpc3MiXSwgImY1OTYiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMjQwIDBsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDEyLjMtNC42IDIzLjUtMTIuMiAzMiA3LjYgOC41IDEyLjIgMTkuNyAxMi4yIDMyIDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptLTk2LTQ4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUtpc3MgPSBmYUZhY2VLaXNzOwogICAgZmFQYXN0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJwYXN0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJmaWxlLWNsaXBib2FyZCJdLCAiZjBlYSIsICJNNjQgNDhsMjI0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDggNDggMCAwLTQ4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDExMiAwIDAtNDgtMTEyIDBjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6bTE3NiA3MmMwLTEzLjMtMTAuNy0yNC0yNC0yNEwxMDQgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTA1LjYgMGM4LjgtOC42IDE5LTE1LjggMzAuMi0yMS4xIC4xLS45IC4yLTEuOSAuMi0yLjl6TTQ0OCA0NjRsLTE2MCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yMjRjMC04LjggNy4yLTE2IDE2LTE2bDEwMS41IDBjNC4yIDAgOC4zIDEuNyAxMS4zIDQuN2w1OC41IDU4LjVjMyAzIDQuNyA3LjEgNC43IDExLjNMNDY0IDQ0OGMwIDguOC03LjIgMTYtMTYgMTZ6TTIyNCAyMjRsMCAyMjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTYwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNjUuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM2wtNTguNS01OC41Yy0xMi0xMi0yOC4zLTE4LjctNDUuMy0xOC43TDI4OCAxNjBjLTM1LjMgMC02NCAyOC43LTY0IDY0eiJdCiAgICB9OwogICAgZmFGaWxlQ2xpcGJvYXJkID0gZmFQYXN0ZTsKICAgIGZhSGFuZFBvaW50TGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBvaW50LWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBhNSIsICJNNjQgMTI4bDE3Ny42IDBjLTEgNS4yLTEuNiAxMC41LTEuNiAxNmwwIDE2LTE3NiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0yMjQgMTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjQgMGM2Ni4zIDAgMTIwIDUzLjcgMTIwIDEyMGwwIDQ4YzAgNTIuNS0zMy43IDk3LjEtODAuNyAxMTMuNCAuNS0zLjEgLjctNi4yIC43LTkuNCAwLTIwLTkuMi0zNy45LTIzLjYtNDkuNyA0LjktOSA3LjYtMTkuNCA3LjYtMzAuMyAwLTE1LjEtNS4zLTI5LTE0LTQwIDguOC0xMSAxNC0yNC45IDE0LTQwbDAtNDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwem0zMi04MGwwIDBjLTE4IDAtMzQuNiA2LTQ4IDE2TDY0IDgwQzI4LjcgODAgMCAxMDguNyAwIDE0NHMyOC43IDY0IDY0IDY0bDgyIDBjLTEuMyA1LjEtMiAxMC41LTIgMTYgMCAyNS4zIDE0LjcgNDcuMiAzNiA1Ny42LTIuNiA3LTQgMTQuNS00IDIyLjQgMCAyMCA5LjIgMzcuOSAyMy42IDQ5LjctNC45IDktNy42IDE5LjQtNy42IDMwLjMgMCAzNS4zIDI4LjcgNjQgNjQgNjRsODggMGM5Mi44IDAgMTY4LTc1LjIgMTY4LTE2OGwwLTQ4YzAtOTIuOC03NS4yLTE2OC0xNjgtMTY4bC0yNCAwek0yNTYgNDAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDY0IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTY0IDB6TTI0MCAyMjRjMCA1LjUgLjcgMTAuOSAyIDE2bC0zNCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDMyIDAgMCAxNnptMjQgNjRsNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwyNCAweiJdCiAgICB9OwogICAgZmFGaWxlRXhjZWwgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1leGNlbCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWMzIiwgIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwem05OS4yIDI2NS42Yy04LTEwLjYtMjMtMTIuOC0zMy42LTQuOHMtMTIuOCAyMy00LjggMzMuNkwxNjIgMzQ0IDEyNC44IDM5My42Yy04IDEwLjYtNS44IDI1LjYgNC44IDMzLjZzMjUuNiA1LjggMzMuNi00LjhMMTkyIDM4NCAyMjAuOCA0MjIuNGM4IDEwLjYgMjMgMTIuOCAzMy42IDQuOHMxMi44LTIzIDQuOC0zMy42TDIyMiAzNDQgMjU5LjIgMjk0LjRjOC0xMC42IDUuOC0yNS42LTQuOC0zMy42cy0yNS42LTUuOC0zMy42IDQuOEwxOTIgMzA0IDE2My4yIDI2NS42eiJdCiAgICB9OwogICAgZmFFbnZlbG9wZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJlbnZlbG9wZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODM4NiwgOTk5MywgNjE0NDNdLCAiZjBlMCIsICJNNjEuNCA2NEMyNy41IDY0IDAgOTEuNSAwIDEyNS40IDAgMTI2LjMgMCAxMjcuMSAuMSAxMjhMMCAxMjggMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTYtLjEgMGMwLS45IC4xLTEuNyAuMS0yLjYgMC0zMy45LTI3LjUtNjEuNC02MS40LTYxLjRMNjEuNCA2NHpNNDY0IDE5Mi4zTDQ2NCAzODRjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQwMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTkxLjcgMTU0LjggMTE3LjRjMzEuNCAyMy45IDc0LjkgMjMuOSAxMDYuNCAwTDQ2NCAxOTIuM3pNNDggMTI1LjRDNDggMTE4IDU0IDExMiA2MS40IDExMmwzODkuMiAwYzcuNCAwIDEzLjQgNiAxMy40IDEzLjQgMCA0LjItMiA4LjItNS4zIDEwLjdMMjgwLjIgMjcxLjVjLTE0LjMgMTAuOC0zNC4xIDEwLjgtNDguNCAwTDUzLjMgMTM2LjFjLTMuMy0yLjUtNS4zLTYuNS01LjMtMTAuN3oiXQogICAgfTsKICAgIGZhU3F1YXJlQ2FyZXREb3duID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1jYXJldC1kb3duIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhcmV0LXNxdWFyZS1kb3duIl0sICJmMTUwIiwgIk0zODQgNDMyYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDB6bTY0LTE2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMHpNMjI0IDM1MmMtNi43IDAtMTMtMi44LTE3LjYtNy43bC0xMDQtMTEyYy02LjUtNy04LjItMTcuMi00LjQtMjUuOVMxMTAuNSAxOTIgMTIwIDE5MmwyMDggMGM5LjUgMCAxOC4yIDUuNyAyMiAxNC40czIuMSAxOC45LTQuNCAyNS45bC0xMDQgMTEyYy00LjUgNC45LTEwLjkgNy43LTE3LjYgNy43eiJdCiAgICB9OwogICAgZmFDYXJldFNxdWFyZURvd24gPSBmYVNxdWFyZUNhcmV0RG93bjsKICAgIGZhVHJ1Y2sgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg2NjYsIDk5NTFdLCAiZjBkMSIsICJNNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI4OGMwIDguOCA3LjIgMTYgMTYgMTZsMy4zIDBjMTAuNC0zNi45IDQ0LjQtNjQgODQuNy02NHM3NC4yIDI3LjEgODQuNyA2NGwxMDIuNiAwYzQuOS0xNy40IDE1LjEtMzIuNyAyOC43LTQzLjlMMzY4IDk2YzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MHptMy4zIDM2OEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMiA1NS40IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdsNDAuNiA0MC42YzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMNTc2IDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMy4zIDBjLTEwLjQgMzYuOS00NC40IDY0LTg0LjcgNjRzLTc0LjItMjcuMS04NC43LTY0bC0xMDIuNiAwYy0xMC40IDM2LjktNDQuNCA2NC04NC43IDY0cy03NC4yLTI3LjEtODQuNy02NHpNNDE2IDI1NmwxMTIgMCAwLTIzLjRjMC00LjItMS43LTguMy00LjctMTEuM2wtNDAuNi00MC42Yy0zLTMtNy4xLTQuNy0xMS4zLTQuN2wtNTUuNCAwIDAgODB6bTAgNDhsMCAzMi40YzIuNi0uMiA1LjMtLjQgOC0uNCA0MC4zIDAgNzQuMiAyNy4xIDg0LjcgNjRsMy4zIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtODAtMTEyIDB6TTE1MiA0NjRhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwem0yNzIgMGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il0KICAgIH07CiAgICBmYUJlbGwgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiYmVsbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODI3NiwgNjE2MDJdLCAiZjBmMyIsICJNMjI0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgOS43QzExOC42IDQ1LjMgNTYgMTE1LjQgNTYgMjAwbDAgMTQuNWMwIDM3LjctMTAgNzQuNy0yOSAxMDcuM0w1LjEgMzU5LjJDMS44IDM2NSAwIDM3MS41IDAgMzc4LjIgMCAzOTkuMSAxNi45IDQxNiAzNy44IDQxNmwzNzIuNCAwYzIwLjkgMCAzNy44LTE2LjkgMzcuOC0zNy44IDAtNi43LTEuOC0xMy4zLTUuMS0xOUw0MjEgMzIxLjdjLTE5LTMyLjYtMjktNjkuNi0yOS0xMDcuM2wwLTE0LjVjMC04NC42LTYyLjYtMTU0LjctMTQ0LTE2Ni4zbDAtOS43YzAtMTMuMy0xMC43LTI0LTI0LTI0ek0zOTIuNCAzNjhsLTMzNi45IDAgMTIuOS0yMi4xQzkxLjcgMzA2IDEwNCAyNjAuNiAxMDQgMjE0LjVsMC0xNC41YzAtNjYuMyA1My43LTEyMCAxMjAtMTIwczEyMCA1My43IDEyMCAxMjBsMCAxNC41YzAgNDYuMiAxMi4zIDkxLjUgMzUuNSAxMzEuNEwzOTIuNCAzNjh6TTE1Ni4xIDQ2NGM5LjkgMjggMzYuNiA0OCA2Ny45IDQ4czU4LTIwIDY3LjktNDhsLTEzNS44IDB6Il0KICAgIH07CiAgICBmYU1lc3NhZ2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAibWVzc2FnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjb21tZW50LWFsdCJdLCAiZjI3YSIsICJNMjAzLjcgNTEyLjlzMCAwIDAgMGwtMzcuOCAyNi43Yy03LjMgNS4yLTE2LjkgNS44LTI0LjkgMS43UzEyOCA1MjkgMTI4IDUyMGwwLTcyLTMyIDBjLTUzIDAtOTYtNDMtOTYtOTZMMCAxMjhDMCA3NSA0MyAzMiA5NiAzMmwzMjAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjI0YzAgNTMtNDMgOTYtOTYgOTZsLTEyMC40IDAtOTEuOSA2NC45em02NC4zLTEwNC4xYzguMS01LjcgMTcuOC04LjggMjcuNy04LjhMNDE2IDQwMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIyNGMwLTI2LjUtMjEuNS00OC00OC00OEw5NiA4MGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAyMjRjMCAyNi41IDIxLjUgNDggNDggNDhsNTYgMGMxMC40IDAgMTkuMyA2LjYgMjIuNiAxNS45IC45IDIuNSAxLjQgNS4yIDEuNCA4LjFsMCA0OS43YzMyLjctMjMuMSA2My4zLTQ0LjcgOTEuOS02NC45eiJdCiAgICB9OwogICAgZmFDb21tZW50QWx0ID0gZmFNZXNzYWdlOwogICAgZmFGYWNlRGl6enkgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1kaXp6eSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJkaXp6eSJdLCAiZjU2NyIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0xMzQuMSAxNTMuOWwyNS45IDI1LjkgMjUuOS0yNS45YzcuOC03LjggMjAuNS03LjggMjguMyAwczcuOCAyMC41IDAgMjguM2wtMjUuOSAyNS45IDI1LjkgMjUuOWM3LjggNy44IDcuOCAyMC41IDAgMjguM3MtMjAuNSA3LjgtMjguMyAwbC0yNS45LTI1LjktMjUuOSAyNS45Yy03LjggNy44LTIwLjUgNy44LTI4LjMgMHMtNy44LTIwLjUgMC0yOC4zbDI1LjktMjUuOS0yNS45LTI1LjljLTcuOC03LjgtNy44LTIwLjUgMC0yOC4zczIwLjUtNy44IDI4LjMgMHptMTkyIDBsMjUuOSAyNS45IDI1LjktMjUuOWM3LjgtNy44IDIwLjUtNy44IDI4LjMgMHM3LjggMjAuNSAwIDI4LjNsLTI1LjkgMjUuOSAyNS45IDI1LjljNy44IDcuOCA3LjggMjAuNSAwIDI4LjNzLTIwLjUgNy44LTI4LjMgMGwtMjUuOS0yNS45LTI1LjkgMjUuOWMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBzLTcuOC0yMC41IDAtMjguM2wyNS45LTI1LjktMjUuOS0yNS45Yy03LjgtNy44LTcuOC0yMC41IDAtMjguM3MyMC41LTcuOCAyOC4zIDB6TTI1NiAyODhhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il0KICAgIH07CiAgICBmYURpenp5ID0gZmFGYWNlRGl6enk7CiAgICBmYUNhbGVuZGFyRGF5cyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1kYXlzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhbGVuZGFyLWFsdCJdLCAiZjA3MyIsICJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MCAxNjAgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0ek0zODQgNDMyYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0LTg4IDAgMCA4MCA3MiAwem0xNi0xMjhsMC04MC04OCAwIDAgODAgODggMHptLTEzNiAwbDAtODAtODAgMCAwIDgwIDgwIDB6bS0xMjggMGwwLTgwLTg4IDAgMCA4MCA4OCAwek00OCAzNTJsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsNzIgMCAwLTgwLTg4IDB6bTEzNiAwbDAgODAgODAgMCAwLTgwLTgwIDB6TTEyMCAxMTJsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDQ4IDM1MiAwIDAtNDhjMC04LjgtNy4yLTE2LTE2LTE2bC0yNjQgMHoiXQogICAgfTsKICAgIGZhQ2FsZW5kYXJBbHQgPSBmYUNhbGVuZGFyRGF5czsKICAgIGZhSGFuZFBvaW50VXAgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wb2ludC11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk3NTddLCAiZjBhNiIsICJNNjQgNjRsMCAxNzcuNmM1LjItMSAxMC41LTEuNiAxNi0xLjZsMTYgMCAwLTE3NmMwLTguOC03LjItMTYtMTYtMTZTNjQgNTUuMiA2NCA2NHpNODAgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDI0YzAgNjYuMyA1My43IDEyMCAxMjAgMTIwbDQ4IDBjNTIuNSAwIDk3LjEtMzMuNyAxMTMuNC04MC43LTMuMSAuNS02LjIgLjctOS40IC43LTIwIDAtMzcuOS05LjItNDkuNy0yMy42LTkgNC45LTE5LjQgNy42LTMwLjMgNy42LTE1LjEgMC0yOS01LjMtNDAtMTQtMTEgOC44LTI0LjkgMTQtNDAgMTRsLTQwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDAgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtODAgMHpNMCAzMjBsMCAwYzAtMTggNi0zNC42IDE2LTQ4TDE2IDY0QzE2IDI4LjcgNDQuNyAwIDgwIDBzNjQgMjguNyA2NCA2NGwwIDgyYzUuMS0xLjMgMTAuNS0yIDE2LTIgMjUuMyAwIDQ3LjIgMTQuNyA1Ny42IDM2IDctMi42IDE0LjUtNCAyMi40LTQgMjAgMCAzNy45IDkuMiA0OS43IDIzLjYgOS00LjkgMTkuNC03LjYgMzAuMy03LjYgMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA4OGMwIDkyLjgtNzUuMiAxNjgtMTY4IDE2OGwtNDggMEM3NS4yIDUxMiAwIDQzNi44IDAgMzQ0bDAtMjR6bTMzNi02NGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NHpNMTYwIDI0MGM1LjUgMCAxMC45IC43IDE2IDJsMC0zNGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDMyIDE2IDB6bTY0IDI0bDAgNDBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMjR6Il0KICAgIH07CiAgICBmYUhhbmRMaXphcmQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1saXphcmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI1OCIsICJNNzIgMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE2OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0bC0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNTIgMGM0LjUgMCA4LjkgMS4zIDEyLjcgMy42bDY0IDQwYzcgNC40IDExLjMgMTIuMSAxMS4zIDIwLjRsMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTEwLjctNDYuOS0yOS4zLTE0NS4xIDBjLTM5LjggMC03Mi0zMi4yLTcyLTcyczMyLjItNzIgNzItNzJsMTA0IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZMNzIgMjA4Yy0zOS44IDAtNzItMzIuMi03Mi03MlMzMi4yIDY0IDcyIDY0bDIwOS42IDBjNDYuNyAwIDkwLjkgMjEuNSAxMTkuNyA1OC4zbDc4LjQgMTAwLjFjMjAuOSAyNi43IDMyLjMgNTkuNyAzMi4zIDkzLjdMNTEyIDQyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTEwNy45YzAtMjMuMi03LjgtNDUuOC0yMi4xLTY0LjFMMzYzLjUgMTUxLjljLTE5LjctMjUuMi00OS45LTM5LjktODEuOS0zOS45TDcyIDExMnoiXQogICAgfTsKICAgIGZhU3F1YXJlRnVsbCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZnVsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODk5NywgMTI4OTk4LCAxMjg5OTksIDEyOWUzLCAxMjkwMDEsIDEyOTAwMiwgMTI5MDAzLCAxMTAzNSwgMTEwMzZdLCAiZjQ1YyIsICJNNDQ4IDQ4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDM4NGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2bDM4NCAwek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAweiJdCiAgICB9OwogICAgZmFDaXJjbGVQYXVzZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtcGF1c2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjA5MiwgInBhdXNlLWNpcmNsZSJdLCAiZjI4YiIsICJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMjQgMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTQ0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNDR6bTExMiAwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTQ0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNDR6Il0KICAgIH07CiAgICBmYVBhdXNlQ2lyY2xlID0gZmFDaXJjbGVQYXVzZTsKICAgIGZhSGFyZERyaXZlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhcmQtZHJpdmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjg0MzYsICJoZGQiXSwgImYwYTAiLCAiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNjJjNS4xLTEuMyAxMC41LTIgMTYtMmwzMjAgMGM1LjUgMCAxMC45IC43IDE2IDJsMC0xNjJjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwek00OCAzMjBsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtOTZjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDMwNGMtOC44IDAtMTYgNy4yLTE2IDE2ek0wIDMyMEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC05NnptMjE2IDQ4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyMC0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYUhkZCA9IGZhSGFyZERyaXZlOwogICAgZmFGaWxlWmlwcGVyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZpbGUtemlwcGVyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImZpbGUtYXJjaGl2ZSJdLCAiZjFjNiIsICJNNjQgNDhsMTEyIDAgMCA4OGMwIDM5LjggMzIuMiA3MiA3MiA3Mmw4OCAwIDAgMjQwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCA2Ny45bDkyLjEgOTIuMS02OC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNjguMXpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNjEuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNDIuNyAxOC43QzIzMC43IDYuNyAyMTQuNSAwIDE5Ny41IDBMNjQgMHpNODAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDE2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em0wIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em02NCA1NmwtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0OGMwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4bDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJ6bS0xNiA2NGExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6Il0KICAgIH07CiAgICBmYUZpbGVBcmNoaXZlID0gZmFGaWxlWmlwcGVyOwogICAgZmFGbG9wcHlEaXNrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZsb3BweS1kaXNrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTkwLCAxMjg0MjYsICJzYXZlIl0sICJmMGM3IiwgIk02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNDIuN2MwLTQuMi0xLjctOC4zLTQuNy0xMS4zTDMyMCA4Ni42IDMyMCAxNzZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2LTMyIDB6bTgwIDBsMCA4MCAxMjggMCAwLTgwLTEyOCAwek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDI0Mi43IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMNDI5LjMgMTI4YzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMNDQ4IDQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTE2MCAzMjBhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAweiJdCiAgICB9OwogICAgZmFTYXZlID0gZmFGbG9wcHlEaXNrOwogICAgZmFGYWNlR3JpblRvbmd1ZVNxdWludCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tdG9uZ3VlLXNxdWludCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU0MSwgImdyaW4tdG9uZ3VlLXNxdWludCJdLCAiZjU4YSIsICJNNDY0IDI1NmMwLTExNC45LTkzLjEtMjA4LTIwOC0yMDhTNDggMTQxLjEgNDggMjU2YzAgNzUuOSA0MC43IDE0Mi40IDEwMS41IDE3OC43LTMuNi0xMC45LTUuNS0yMi42LTUuNS0zNC43bDAtMzcuNWMtMTAuMi0xMi42LTE4LjMtMjYuOS0yMy44LTQyLjQtNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42IDExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC01LjUgMTUuNi0xMy42IDI5LjktMjMuOCA0Mi41bDAgMzcuNWMwIDEyLjEtMS45IDIzLjgtNS41IDM0LjcgNjAuOC0zNi4zIDEwMS41LTEwMi43IDEwMS41LTE3OC43ek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xMjUuOC03NS43Yy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xczEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDIwOCAxMjUuOCAxODAuM3ptMjYzLjYtMjEuMWM0LjUgNi44IDMuMSAxNS45LTMuMSAyMS4xTDM1MyAyMDggMzg2LjIgMjM1LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjV6TTMyMCA0MTZsMC0zNy40YzAtMTQuNy0xMS45LTI2LjYtMjYuNi0yNi42bC0yIDBjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjktMi44IDEyLjYtMjAuOCAxMi42LTIzLjYgMC0yLjUtMTEuMS0xMi4zLTE4LjktMjMuNi0xOC45bC0yIDBjLTE0LjcgMC0yNi42IDExLjktMjYuNiAyNi42bDAgMzcuNGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdCiAgICB9OwogICAgZmFHcmluVG9uZ3VlU3F1aW50ID0gZmFGYWNlR3JpblRvbmd1ZVNxdWludDsKICAgIGZhQ2FtZXJhID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNhbWVyYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMjU4LCAiY2FtZXJhLWFsdCJdLCAiZjAzMCIsICJNMTkzLjEgMzJjLTE4LjcgMC0zNi4yIDkuNC00Ni42IDI0LjlMMTIwLjUgOTYgNjQgOTZDMjguNyA5NiAwIDEyNC43IDAgMTYwTDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0bC01Ni41IDAtMjYtMzkuMUMzNTUuMSA0MS40IDMzNy42IDMyIDMxOC45IDMyTDE5My4xIDMyem0tNi43IDUxLjZjMS41LTIuMiA0LTMuNiA2LjctMy42bDEyNS43IDBjMi43IDAgNS4yIDEuMyA2LjcgMy42bDMzLjIgNDkuOGM0LjUgNi43IDExLjkgMTAuNyAyMCAxMC43bDY5LjMgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyNTZjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQzMmMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmw2OS4zIDBjOCAwIDE1LjUtNCAyMC0xMC43bDMzLjItNDkuOHpNMjU2IDM4NGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6TTE5MiAyNzJhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAweiJdCiAgICB9OwogICAgZmFDYW1lcmFBbHQgPSBmYUNhbWVyYTsKICAgIGZhRmFjZUdyaW5TdGFycyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tc3RhcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzMjEsICJncmluLXN0YXJzIl0sICJmNTg3IiwgIk0wIDI1NmMwLTI5LjYgNS01Ny45IDE0LjItODQuNGwxNy4zIDE2LjktNC42IDI3Yy00LjIgMjQuNCA1LjYgNDYuMiAyMiA1OS45IDkuOCAxMDUuOCA5OC44IDE4OC43IDIwNy4xIDE4OC43czE5Ny40LTgyLjggMjA3LjEtMTg4LjZjMTYuNC0xMy43IDI2LjEtMzUuNCAyMi01OS45bC00LjYtMjcgMTcuMy0xNi45YzkuMiAyNi40IDE0LjIgNTQuOCAxNC4yIDg0LjQgMCAxNDEuNC0xMTQuNiAyNTYtMjU2IDI1NlMwIDM5Ny40IDAgMjU2ek0yNTYgNDhjLTE1LjIgMC0zMCAxLjYtNDQuMyA0LjdMMjAxLjQgMzEuOEMxOTcgMjMgMTkxLjEgMTUuOCAxODQuMiAxMC4yIDIwNyAzLjYgMjMxLjEgMCAyNTYgMHM0OSAzLjYgNzEuOCAxMC4yQzMyMC45IDE1LjggMzE1IDIzIDMxMC42IDMxLjhMMzAwLjMgNTIuN0MyODYgNDkuNiAyNzEuMiA0OCAyNTYgNDh6TTM3Mi4yIDMwMi4zYzExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC0xOS44IDU1LjktNzMuMSA5Ni0xMzUuOCA5Ni02Mi43IDAtMTE2LTQwLTEzNS44LTk1LjktNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42ek0zNTMuNyA1My4xYzUuOS0xMS45IDIyLjgtMTEuOSAyOC43IDBsMjMuMyA0Ny4yIDUyIDcuNmMxMy4xIDEuOSAxOC40IDE4IDguOSAyNy4zbC0zNy43IDM2LjcgOC45IDUxLjhjMi4yIDEzLjEtMTEuNSAyMy0yMy4yIDE2LjlMMzY4IDIxNiAzMjEuNSAyNDAuNWMtMTEuNyA2LjItMjUuNS0zLjgtMjMuMi0xNi45bDguOS01MS44LTM3LjctMzYuN2MtOS41LTkuMy00LjMtMjUuNCA4LjktMjcuM2w1Mi03LjYgMjMuMy00Ny4yem0tMTk1LjMgMGwyMy4zIDQ3LjIgNTIgNy42YzEzLjEgMS45IDE4LjQgMTggOC45IDI3LjNsLTM3LjcgMzYuNyA4LjkgNTEuOGMyLjIgMTMuMS0xMS41IDIzLTIzLjIgMTYuOUwxNDQgMjE2IDk3LjUgMjQwLjVjLTExLjcgNi4yLTI1LjUtMy44LTIzLjItMTYuOWw4LjktNTEuOC0zNy43LTM2LjdjLTkuNS05LjMtNC4zLTI1LjQgOC45LTI3LjNsNTItNy42IDIzLjMtNDcuMmM1LjktMTEuOSAyMi44LTExLjkgMjguNyAweiJdCiAgICB9OwogICAgZmFHcmluU3RhcnMgPSBmYUZhY2VHcmluU3RhcnM7CiAgICBmYUV5ZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJleWUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgwNjVdLCAiZjA2ZSIsICJNMjg4IDgwQzIyMi44IDgwIDE2OS4yIDEwOS42IDEyOC4xIDE0Ny43IDg5LjYgMTgzLjUgNjMgMjI2IDQ5LjQgMjU2IDYzIDI4NiA4OS42IDMyOC41IDEyOC4xIDM2NC4zIDE2OS4yIDQwMi40IDIyMi44IDQzMiAyODggNDMyczExOC44LTI5LjYgMTU5LjktNjcuN0M0ODYuNCAzMjguNSA1MTMgMjg2IDUyNi42IDI1NiA1MTMgMjI2IDQ4Ni40IDE4My41IDQ0Ny45IDE0Ny43IDQwNi44IDEwOS42IDM1My4yIDgwIDI4OCA4MHpNOTUuNCAxMTIuNkMxNDIuNSA2OC44IDIwNy4yIDMyIDI4OCAzMnMxNDUuNSAzNi44IDE5Mi42IDgwLjZjNDYuOCA0My41IDc4LjEgOTUuNCA5MyAxMzEuMSAzLjMgNy45IDMuMyAxNi43IDAgMjQuNi0xNC45IDM1LjctNDYuMiA4Ny43LTkzIDEzMS4xLTQ3LjEgNDMuNy0xMTEuOCA4MC42LTE5Mi42IDgwLjZTMTQyLjUgNDQzLjIgOTUuNCAzOTkuNGMtNDYuOC00My41LTc4LjEtOTUuNC05My0xMzEuMS0zLjMtNy45LTMuMy0xNi43IDAtMjQuNiAxNC45LTM1LjcgNDYuMi04Ny43IDkzLTEzMS4xek0yODggMzM2YzQ0LjIgMCA4MC0zNS44IDgwLTgwIDAtMjkuNi0xNi4xLTU1LjUtNDAtNjkuMy0xLjQgNTkuNy00OS42IDEwNy45LTEwOS4zIDEwOS4zIDEzLjggMjMuOSAzOS43IDQwIDY5LjMgNDB6bS03OS42LTg4LjRjMi41IC4zIDUgLjQgNy42IC40IDM1LjMgMCA2NC0yOC43IDY0LTY0IDAtMi42LS4yLTUuMS0uNC03LjYtMzcuNCAzLjktNjcuMiAzMy43LTcxLjEgNzEuMXptNDUuNi0xMTVjMTAuOC0zIDIyLjItNC41IDMzLjktNC41IDguOCAwIDE3LjUgLjkgMjUuOCAyLjYgLjMgLjEgLjUgLjEgLjggLjIgNTcuOSAxMi4yIDEwMS40IDYzLjcgMTAxLjQgMTI1LjIgMCA3MC43LTU3LjMgMTI4LTEyOCAxMjgtNjEuNiAwLTExMy00My41LTEyNS4yLTEwMS40LTEuOC04LjYtMi44LTE3LjUtMi44LTI2LjYgMC0xMSAxLjQtMjEuOCA0LTMyIC4yLS43IC4zLTEuMyAuNS0xLjkgMTEuOS00My40IDQ2LjEtNzcuNiA4OS41LTg5LjV6Il0KICAgIH07CiAgICBmYUZhY2VTYWRUZWFyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2Utc2FkLXRlYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDYsICJzYWQtdGVhciJdLCAiZjViNCIsICJNNDY0IDI1NmMwLTExNC45LTkzLjEtMjA4LTIwOC0yMDhTNDggMTQxLjEgNDggMjU2YzAgNDEuOCAxMi4zIDgwLjcgMzMuNiAxMTMuMyA4LjIgNDQuNyA0Ny4zIDc4LjYgOTQuMyA3OC43IDI0LjcgMTAuMyA1MS43IDE2IDgwLjEgMTYgMTE0LjkgMCAyMDgtOTMuMSAyMDgtMjA4ek0yODggMzUyYy01LjUgMC0xMC45IC42LTE2IDEuOCAwLS42IDAtMS4yIDAtMS44IDAtMTYuMi00LTMxLjUtMTEuMS00NC45IDguNy0yIDE3LjgtMy4xIDI3LjEtMy4xIDQwLjIgMCA3NS43IDE5LjggOTcuNSA1MCA3LjcgMTAuOCA1LjMgMjUuOC01LjUgMzMuNXMtMjUuOCA1LjMtMzMuNS01LjVjLTEzLjEtMTguMi0zNC40LTMwLTU4LjUtMzB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ni04MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0xODUuNCAyNzYuOGM2LjUgNy44IDEyLjYgMTYuMSAxOC4zIDI0LjYgOSAxMy40IDIwLjMgMzAuMiAyMC4zIDQ3LjQgMCAyOC4zLTIxLjUgNTEuMi00OCA1MS4ycy00OC0yMi45LTQ4LTUxLjJjMC0xNy4yIDExLjItMzQgMjAuMy00Ny40IDUuNy04LjUgMTEuOS0xNi43IDE4LjMtMjQuNiAyLjQtMi45IDUuNy00LjggOS40LTQuOHM3IDEuOSA5LjQgNC44eiJdCiAgICB9OwogICAgZmFTYWRUZWFyID0gZmFGYWNlU2FkVGVhcjsKICAgIGZhU2hhcmVGcm9tU3F1YXJlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNoYXJlLWZyb20tc3F1YXJlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjE1MDksICJzaGFyZS1zcXVhcmUiXSwgImYxNGQiLCAiTTQyNS41IDdjLTYuOS02LjktMTcuMi04LjktMjYuMi01LjJTMzg0LjUgMTQuMyAzODQuNSAyNGwwIDU2LTQ4IDBjLTg4LjQgMC0xNjAgNzEuNi0xNjAgMTYwIDAgNDYuNyAyMC43IDgwLjQgNDMuNiAxMDMuNCA4LjEgOC4yIDE2LjUgMTQuOSAyNC4zIDIwLjQgOS4yIDYuNSAyMS43IDUuNyAzMC4xLTEuOXMxMC4yLTIwIDQuNS0yOS44Yy0zLjYtNi4zLTYuNS0xNC45LTYuNS0yNi43IDAtMzYuMiAyOS4zLTY1LjUgNjUuNS02NS41bDQ2LjUgMCAwIDU2YzAgOS43IDUuOCAxOC41IDE0LjggMjIuMnMxOS4zIDEuNyAyNi4yLTUuMmwxMzYtMTM2YzkuNC05LjQgOS40LTI0LjYgMC0zMy45TDQyNS41IDd6bTcgOTdsMC0yMi4xIDc4LjEgNzguMS03OC4xIDc4LjEgMC0yMi4xYzAtMTMuMy0xMC43LTI0LTI0LTI0TDMzOCAxOTJjLTUwLjkgMC05My45IDMzLjUtMTA4LjMgNzkuNi0zLjMtOS40LTUuMi0xOS44LTUuMi0zMS42IDAtNjEuOSA1MC4xLTExMiAxMTItMTEybDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjR6bS0zMjAtOGMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyNTZjMCA0NC4yIDM1LjggODAgODAgODBsMjU2IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDI0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjQgMHoiXQogICAgfTsKICAgIGZhU2hhcmVTcXVhcmUgPSBmYVNoYXJlRnJvbVNxdWFyZTsKICAgIGZhTm90ZVN0aWNreSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJub3RlLXN0aWNreSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYyMDI2LCAic3RpY2t5LW5vdGUiXSwgImYyNDkiLCAiTTI0MCA0MzJMNjQgNDMyYy04LjggMC0xNi03LjItMTYtMTZMNDggOTZjMC04LjggNy4yLTE2IDE2LTE2bDMyMCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE3Ni04OCAwYy0zOS44IDAtNzIgMzIuMi03MiA3MmwwIDg4ek0zODAuMSAzMjBMMjg4IDQxMi4xIDI4OCAzNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRsNjguMSAwek0wIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTcuNSAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43TDQyOS4zIDMzOC43YzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNMNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZ6Il0KICAgIH07CiAgICBmYVN0aWNreU5vdGUgPSBmYU5vdGVTdGlja3k7CiAgICBmYUhhbmRCYWNrRmlzdCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWJhY2stZmlzdCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJoYW5kLXJvY2siXSwgImYyNTUiLCAiTTk2IDQwMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDQwMHpNNzMuMiAzNTJsNjQuNiAwLTc5LjUtODguM0M1MS43IDI1Ni4zIDQ4IDI0Ni44IDQ4IDIzNi45TDQ4IDIwNGMwLTE2LjEgMTEuOS0yOS41IDI3LjQtMzEuNyAxMS44LTEuNyAyMC42LTExLjggMjAuNi0yMy44TDk2IDcyYzAtMTMuMyAxMC43LTI0IDI0LTI0IDcuMiAwIDEzLjYgMy4xIDE4IDguMSA0LjYgNS4yIDExLjEgOC4xIDE4IDguMXMxMy40LTMgMTgtOC4xYzQuNC01IDEwLjgtOC4xIDE4LTguMSA4LjUgMCAxNS45IDQuNCAyMC4yIDExLjEgNi45IDEwLjcgMjAuOSAxNC4yIDMyIDggMy41LTEuOSA3LjQtMy4xIDExLjgtMy4xIDEwLjYgMCAxOS43IDYuOSAyMi44IDE2LjYgMy44IDExLjcgMTUuOSAxOC43IDI4IDE2IDEuNy0uNCAzLjQtLjYgNS4yLS42IDEzLjMgMCAyNCAxMC43IDI0IDI0bDAgOTIuMmMwIDE0LjQtMy41IDI4LjUtMTAuMiA0MS4ybC01Mi4yIDk4LjYgNTQuMyAwIDQwLjMtNzYuMmMxMC40LTE5LjYgMTUuOC00MS41IDE1LjgtNjMuNmwwLTkyLjJjMC0zOC40LTMwLjEtNjkuOC02OC4xLTcxLjktMTIuOS0xOS4zLTM0LjktMzIuMS01OS45LTMyLjEtNS43IDAtMTEuMiAuNy0xNi41IDEuOS0xMi43LTExLjEtMjkuMy0xNy45LTQ3LjUtMTcuOS0xMy4xIDAtMjUuNCAzLjUtMzYgOS42LTEwLjYtNi4xLTIyLjktOS42LTM2LTkuNi0zOS44IDAtNzIgMzIuMi03MiA3MmwwIDU4LjdDMTkuNyAxNDMgMCAxNzEuMiAwIDIwNGwwIDMyLjljMCAyMS43IDggNDIuNyAyMi42IDU4LjlMNzMuMiAzNTJ6Il0KICAgIH07CiAgICBmYUhhbmRSb2NrID0gZmFIYW5kQmFja0Zpc3Q7CiAgICBmYUNoZXNzUXVlZW4gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2hlc3MtcXVlZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5ODE5XSwgImY0NDUiLCAiTTMyNS4zIDkwLjhjOS4xLTQuOCAyMC42LTMuMyAyOC4yIDQuM2wzOS44IDM5LjggMy43IDMuM2M5LjEgNy4xIDIwLjkgMTAgMzIuNCA3LjdsNDYuNC05LjMgMy41LS40YzgtLjQgMTUuOCAzLjIgMjAuNiA5LjggNS41IDcuNiA2LjEgMTcuNiAxLjYgMjUuOGwtMTEyLjYgMjAyLjYgNTEuNSA3MC45IDEuOCAyLjdjNCA2LjYgNi4yIDE0LjIgNi4yIDIyIDAgMjMuMy0xOC45IDQyLjEtNDIuMSA0Mi4xbC0yOTkuOCAwYy0yMS44IDAtMzkuOC0xNi42LTQxLjktMzcuOGwtLjItNC4zIC4xLTMuM2MuNi03LjcgMy40LTE1LjEgNy45LTIxLjRsNTEuNS03MC45LTExMi41LTIwMi42Yy00LjUtOC4yLTMuOS0xOC4zIDEuNi0yNS44czE0LjktMTEuMiAyNC4xLTkuNGw0Ni40IDkuM2MxMy4xIDIuNiAyNi43LTEuNSAzNi4xLTEwLjlMMTU5LjUgOTUgMTYzIDkyLjJjOC42LTUuOCAyMC4xLTUuNiAyOC41IDEuMWw0MCAzMiAyLjggMi4xYzE0LjQgOS42IDMzLjUgOC45IDQ3LjItMi4xbDQwLTMyIDMuOC0yLjV6TTE2NC43IDQwMGwtNDYuNiA2NCAyNzYuNyAwLTQ2LjYtNjQtMTgzLjYgMHpNMzExLjUgMTYyLjhjLTMwLjEgMjQuMS03Mi4xIDI1LjYtMTAzLjggNC41bC02LjItNC41LTIzLjMtMTguNi0yNC42IDI0LjZjLTE5LjggMTkuOC00Ny43IDI4LjktNzUuMSAyNC44bDg4LjEgMTU4LjUgMTc5LjggMCA4OC0xNTguNWMtMjUuNyAzLjgtNTEuNy0zLjktNzEuMS0yMWwtNC0zLjctMjQuNi0yNC42LTIzLjIgMTguNnpNMjU2LjUgNzJhNDAgNDAgMCAxIDEgMC04MCA0MCA0MCAwIDEgMSAwIDgweiJdCiAgICB9OwogICAgZmFGYWNlR3JpblRlYXJzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi10ZWFycyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODUxNCwgImdyaW4tdGVhcnMiXSwgImY1ODgiLCAiTTUwNC4xIDM1M0M1MTIuOSAzNjcuMiA1MjUuMyAzNzkgNTM5LjggMzg3LjIgNDk1LjEgNDYyIDQxMy40IDUxMiAzMjAgNTEyUzE0NC45IDQ2MiAxMDAuMiAzODcuMmMxNC42LTguMiAyNi45LTIwIDM1LjgtMzQuMyAzNC45IDY2IDEwNC4yIDExMSAxODQuMSAxMTFzMTQ5LjItNDUgMTg0LjEtMTExem0xNi40LTE1Mi41QzQ5Ni4yIDExMi42IDQxNS43IDQ4IDMyMCA0OFMxNDMuOCAxMTIuNiAxMTkuNSAyMDAuNWMtMTAuNi00LjgtMjIuNy02LjgtMzUuNC01bC0xMy40IDEuOUM5Ny4yIDg0LjMgMTk4LjggMCAzMjAgMFM1NDIuOCA4NC4zIDU2OS4zIDE5Ny40bC0xMy40LTEuOWMtMTIuNy0xLjgtMjQuOCAuMi0zNS40IDV6TTQ1NS44IDMyMGMtMTkuOCA1NS45LTczLjEgOTYtMTM1LjggOTYtNjIuNyAwLTExNi00MC0xMzUuOC05NS45LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNiAxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3Ljh6TTIxMiAyMDhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHptMTg4LTI4Yy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4ek02NDAgMzAwLjZjMCAyOC40LTIzIDUxLjQtNTEuNCA1MS40LTI1LjYgMC00Ny4zLTE4LjgtNTAuOS00NC4xTDUzMSAyNjEuMWMtMS41LTEwLjYgNy41LTE5LjYgMTguMS0xOC4xbDQ2LjcgNi43YzI1LjMgMy42IDQ0LjEgMjUuMyA0NC4xIDUwLjl6bS02NDAgMGMwLTI1LjYgMTguOC00Ny4zIDQ0LjEtNTAuOUw5MC45IDI0M2MxMC42LTEuNSAxOS42IDcuNSAxOC4xIDE4LjFsLTYuNyA0Ni43Qzk4LjcgMzMzLjIgNzcgMzUyIDUxLjQgMzUyIDIzIDM1MiAwIDMyOSAwIDMwMC42eiJdCiAgICB9OwogICAgZmFHcmluVGVhcnMgPSBmYUZhY2VHcmluVGVhcnM7CiAgICBmYVBlblRvU3F1YXJlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInBlbi10by1zcXVhcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZWRpdCJdLCAiZjA0NCIsICJNNDQxIDU4LjlMNDUzLjEgNzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlMNDI0IDEzNC4xIDM3Ny45IDg4IDQwNyA1OC45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwek0yMDkuOCAyNTYuMkwzNDQgMTIxLjkgMzkwLjEgMTY4IDI1NS44IDMwMi4yYy0yLjkgMi45LTYuNSA1LTEwLjQgNi4xbC01OC41IDE2LjcgMTYuNy01OC41YzEuMS0zLjkgMy4yLTcuNSA2LjEtMTAuNHpNMzczLjEgMjVMMTc1LjggMjIyLjJjLTguNyA4LjctMTUgMTkuNC0xOC4zIDMxLjFsLTI4LjYgMTAwYy0yLjQgOC40LS4xIDE3LjQgNi4xIDIzLjZzMTUuMiA4LjUgMjMuNiA2LjFsMTAwLTI4LjZjMTEuOC0zLjQgMjIuNS05LjcgMzEuMS0xOC4zTDQ4NyAxMzguOWMyOC4xLTI4LjEgMjguMS03My43IDAtMTAxLjhMNDc0LjkgMjVDNDQ2LjgtMy4xIDQwMS4yLTMuMSAzNzMuMSAyNXpNODggNjRDMzkuNCA2NCAwIDEwMy40IDAgMTUyTDAgNDI0YzAgNDguNiAzOS40IDg4IDg4IDg4bDI3MiAwYzQ4LjYgMCA4OC0zOS40IDg4LTg4bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMjIuMS0xNy45IDQwLTQwIDQwTDg4IDQ2NGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC0yNzJjMC0yMi4xIDE3LjktNDAgNDAtNDBsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggNjR6Il0KICAgIH07CiAgICBmYUVkaXQgPSBmYVBlblRvU3F1YXJlOwogICAgZmFGYWNlR3JpbkJlYW1Td2VhdCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tYmVhbS1zd2VhdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODUxNywgImdyaW4tYmVhbS1zd2VhdCJdLCAiZjU4MyIsICJNNTMwLjIgMTUuOWMtOC44LTEwLjctMTguNS0yMC45LTI5LTMwLTMtMi42LTcuNC0yLjYtMTAuNCAwLTEwLjUgOS4xLTIwLjEgMTkuMy0yOSAzMC0xNC43IDE3LjgtMjkuOCA0MC4xLTI5LjggNjQuMSAwIDM2LjQgMjcuNiA2NCA2NCA2NHM2NC0yNy42IDY0LTY0YzAtMjQtMTUuMi00Ni4zLTI5LjgtNjQuMXptLTEzMiA4LjlDMzY0LjggOC45IDMyNy40IDAgMjg4IDAgMTQ2LjYgMCAzMiAxMTQuNiAzMiAyNTZTMTQ2LjYgNTEyIDI4OCA1MTIgNTQ0IDM5Ny40IDU0NCAyNTZjMC0yNC40LTMuNC00OC05LjgtNzAuNC0xMS45IDQuMi0yNC43IDYuNC0zOC4yIDYuNC0zLjQgMC02LjgtLjEtMTAuMi0uNCA2LjYgMjAuMyAxMC4yIDQxLjkgMTAuMiA2NC40IDAgMTE0LjktOTMuMSAyMDgtMjA4IDIwOFM4MCAzNzAuOSA4MCAyNTYgMTczLjEgNDggMjg4IDQ4YzM0LjggMCA2Ny41IDguNSA5Ni4zIDIzLjYgMS40LTE3LjQgNi45LTMzLjEgMTMuOC00Ni44ek00MjMuOCAzMjBjNC4xLTExLjYtNy44LTIxLjQtMTkuNi0xNy44LTM0LjggMTAuNi03NC4zIDE2LjYtMTE2LjMgMTYuNi00MS45IDAtODEuNC02LTExNi4xLTE2LjUtMTEuOC0zLjYtMjMuNyA2LjEtMTkuNiAxNy44IDE5LjggNTUuOSA3My4xIDk1LjkgMTM1LjggOTUuOSA2Mi43IDAgMTE2LTQwLjEgMTM1LjgtOTZ6TTE4MCAyMDhjMC0xNS41IDEyLjUtMjggMjgtMjhzMjggMTIuNSAyOCAyOGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04YzAtMzcuNi0zMC40LTY4LTY4LTY4cy02OCAzMC40LTY4IDY4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTh6bTE4OC0yOGMxNS41IDAgMjggMTIuNSAyOCAyOGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04YzAtMzcuNi0zMC40LTY4LTY4LTY4cy02OCAzMC40LTY4IDY4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0xNS41IDEyLjUtMjggMjgtMjh6Il0KICAgIH07CiAgICBmYUdyaW5CZWFtU3dlYXQgPSBmYUZhY2VHcmluQmVhbVN3ZWF0OwogICAgZmFDbG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjbG9jayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODMzOSwgImNsb2NrLWZvdXIiXSwgImYwMTciLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMSAtNDE2IDAgMjA4IDIwOCAwIDEgMSA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMCA1MTIgMCAyNTYgMjU2IDAgMSAwIC01MTIgMHpNMjMyIDEyMGwwIDEzNmMwIDggNCAxNS41IDEwLjcgMjBsOTYgNjRjMTEgNy40IDI1LjkgNC40IDMzLjMtNi43czQuNC0yNS45LTYuNy0zMy4zTDI4MCAyNDMuMiAyODAgMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0eiJdCiAgICB9OwogICAgZmFDbG9ja0ZvdXIgPSBmYUNsb2NrOwogICAgZmFGYWNlTGF1Z2hXaW5rID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtbGF1Z2gtd2luayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJsYXVnaC13aW5rIl0sICJmNTljIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTExOC4zIDU4LjJjLTQuMi0xMy43IDcuMS0yNi4yIDIxLjQtMjYuMmwyMzIuNiAwYzE0LjMgMCAyNS42IDEyLjUgMjEuNCAyNi4yLTE4IDU4LjktNzIuOSAxMDEuOC0xMzcuNyAxMDEuOFMxMzYuMyAzNzMuMSAxMTguMyAzMTQuMnpNMTQ0IDE5MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNjQgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBjMC0zMy4xIDI2LjktNjAgNjAtNjBsMTYgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MCAwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjAtOS0yMC0yMC0yMGwtMTYgMGMtMTEgMC0yMCA5LTIwIDIweiJdCiAgICB9OwogICAgZmFMYXVnaFdpbmsgPSBmYUZhY2VMYXVnaFdpbms7CiAgICBmYVBhcGVyUGxhbmUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAicGFwZXItcGxhbmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MTkxM10sICJmMWQ4IiwgIk0yOTAuNSAyODcuN0w0OTEuNCA4Ni45IDM1OSA0NTYuMyAyOTAuNSAyODcuN3pNNDU3LjQgNTNMMjU2LjYgMjUzLjggODggMTg1LjMgNDU3LjQgNTN6TTM4LjEgMjE2LjhsMjA1LjggODMuNiA4My42IDIwNS44YzUuMyAxMy4xIDE4LjEgMjEuNyAzMi4zIDIxLjcgMTQuNyAwIDI3LjgtOS4yIDMyLjgtMjMuMUw1NzAuNiA4YzMuNS05LjggMS0yMC42LTYuMy0yOHMtMTguMi05LjgtMjgtNi4zTDM5LjQgMTUxLjdjLTEzLjkgNS0yMy4xIDE4LjEtMjMuMSAzMi44IDAgMTQuMiA4LjYgMjcgMjEuNyAzMi4zeiJdCiAgICB9OwogICAgZmFIZWFydCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE1MywgMTI4MTU0LCAxMjgxNTUsIDEyODE1NiwgMTI4NDIwLCAxMjkyOTMsIDEyOTI5NCwgMTI5NTA1LCA5ODI5LCAxMDA4NCwgNjE1NzhdLCAiZjAwNCIsICJNMzc4LjkgODBjLTI3LjMgMC01MyAxMy4xLTY5IDM1LjJsLTM0LjQgNDcuNmMtNC41IDYuMi0xMS43IDkuOS0xOS40IDkuOXMtMTQuOS0zLjctMTkuNC05LjlsLTM0LjQtNDcuNmMtMTYtMjIuMS00MS43LTM1LjItNjktMzUuMi00NyAwLTg1LjEgMzguMS04NS4xIDg1LjEgMCA0OS45IDMyIDk4LjQgNjguMSAxNDIuMyA0MS4xIDUwIDkxLjQgOTQgMTI1LjkgMTIwLjMgMy4yIDIuNCA3LjkgNC4yIDE0IDQuMnMxMC44LTEuOCAxNC00LjJjMzQuNS0yNi4zIDg0LjgtNzAuNCAxMjUuOS0xMjAuMyAzNi4yLTQzLjkgNjguMS05Mi40IDY4LjEtMTQyLjMgMC00Ny0zOC4xLTg1LjEtODUuMS04NS4xek0yNzEgODcuMWMyNS0zNC42IDY1LjItNTUuMSAxMDcuOS01NS4xIDczLjUgMCAxMzMuMSA1OS42IDEzMy4xIDEzMy4xIDAgNjguNi00Mi45IDEyOC45LTc5LjEgMTcyLjgtNDQuMSA1My42LTk3LjMgMTAwLjEtMTMzLjggMTI3LjktMTIuMyA5LjQtMjcuNSAxNC4xLTQzLjEgMTQuMXMtMzAuOC00LjctNDMuMS0xNC4xQzE3Ni40IDQzOCAxMjMuMiAzOTEuNSA3OS4xIDMzOCA0Mi45IDI5NC4xIDAgMjMzLjcgMCAxNjUuMSAwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMWwxNSAyMC43IDE1LTIwLjd6Il0KICAgIH07CiAgICBmYUZvbnRBd2Vzb21lMiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmb250LWF3ZXNvbWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjUwMSwgNjI2OTQsICJmb250LWF3ZXNvbWUtZmxhZyIsICJmb250LWF3ZXNvbWUtbG9nby1mdWxsIl0sICJmMmI0IiwgIk05MS43IDk2QzEwNi4zIDg2LjggMTE2IDcwLjUgMTE2IDUyIDExNiAyMy4zIDkyLjcgMCA2NCAwUzEyIDIzLjMgMTIgNTJjMCAxNi43IDcuOCAzMS41IDIwIDQxbDAgNDE5IDQ4IDAgMC02NCAzODkuNiAwYzE0LjYgMCAyNi40LTExLjggMjYuNC0yNi40IDAtMy43LS44LTcuMy0yLjMtMTAuN0w0MzIgMjcyIDQ5My43IDEzMy4xYzEuNS0zLjQgMi4zLTcgMi4zLTEwLjcgMC0xNC42LTExLjgtMjYuNC0yNi40LTI2LjRMOTEuNyA5NnpNODAgNDAwbDAtMjU2IDM1Ni40IDAtNDguMiAxMDguNWMtNS41IDEyLjQtNS41IDI2LjYgMCAzOUw0MzYuNCA0MDAgODAgNDAweiJdCiAgICB9OwogICAgZmFGb250QXdlc29tZUZsYWcyID0gZmFGb250QXdlc29tZTI7CiAgICBmYUZvbnRBd2Vzb21lTG9nb0Z1bGwyID0gZmFGb250QXdlc29tZTI7CiAgICBmYUNsb25lID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNsb25lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNGQiLCAiTTI4OCA0NjRMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZsMC0yMjRjMC04LjggNy4yLTE2IDE2LTE2bDQ4IDAgMC00OC00OCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTQ4LTQ4IDAgMCA0OGMwIDguOC03LjIgMTYtMTYgMTZ6TTIyNCAzMDRjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTIyNGMwLTguOCA3LjItMTYgMTYtMTZsMjI0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjI0YzAgOC44LTcuMiAxNi0xNiAxNmwtMjI0IDB6bS02NC0xNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTIyNGMwLTM1LjMtMjguNy02NC02NC02NEwyMjQgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyMjR6Il0KICAgIH07CiAgICBmYUZvbGRlck9wZW4gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZm9sZGVyLW9wZW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgxOTQsIDEyODQ0OSwgNjE3MTddLCAiZjA3YyIsICJNOTcuNSA0MDBsNTAtMTYwIDM3OS40IDAtNTAgMTYwLTM3OS40IDB6bTE5MC43IDQ4TDQ3NyA0NDhjMjEgMCAzOS42LTEzLjYgNDUuOC0zMy43bDUwLTE2MGM5LjctMzAuOS0xMy40LTYyLjMtNDUuOC02Mi4zbC0zNzkuNCAwYy0yMSAwLTM5LjYgMTMuNi00NS44IDMzLjdMODAuMiAyOTQuNCA4MC4yIDk2YzAtOC44IDcuMi0xNiAxNi0xNmwxMzguNyAwYzMuNSAwIDYuOCAxLjEgOS42IDMuMkwyODIuOSAxMTJjMTMuOCAxMC40IDMwLjcgMTYgNDggMTZsMTE3LjMgMGM4LjggMCAxNiA3LjIgMTYgMTZsNDggMGMwLTM1LjMtMjguNy02NC02NC02NEwzMzAuOSA4MGMtNi45IDAtMTMuNy0yLjItMTkuMi02LjRMMjczLjMgNDQuOEMyNjIuMiAzNi41IDI0OC44IDMyIDIzNC45IDMyTDk2LjIgMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjg4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAweiJdCiAgICB9OwogICAgZmFXaW5kb3dNaW5pbWl6ZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJ3aW5kb3ctbWluaW1pemUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0NjldLCAiZjJkMSIsICJNMCA0MjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNDQ4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhU3RhckhhbGYgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3Rhci1oYWxmIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjE3MzFdLCAiZjA4OSIsICJNMjg1LjctMTUuOGMxMC44IDIuNiAxOC40IDEyLjIgMTguNCAyMy4zbDAgMzg3LjFjMCA5LTUuMSAxNy4zLTEzLjEgMjEuNEwxNDMuOCA0OTFjLTggNC4xLTE3LjcgMy4zLTI1LTJzLTExLTE0LjItOS42LTIzLjJMMTM0LjQgMzA1LjkgMjAgMTkxLjRjLTYuNC02LjQtOC42LTE1LjgtNS44LTI0LjRzMTAuMS0xNC45IDE5LjEtMTYuM0wxOTMuMSAxMjUuMyAyNTguOC0zLjNjNS05LjkgMTYuMi0xNSAyNy0xMi40ek0yNTYuMSAxMDcuNEwyMzAuMyAxNThjLTMuNSA2LjgtMTAgMTEuNi0xNy42IDEyLjhsLTEyNS41IDIwIDg5LjggODkuOWM1LjQgNS40IDcuOSAxMy4xIDYuNyAyMC43bC0xOS44IDEyNS41IDkyLjItNDYuOSAwLTI3Mi42eiJdCiAgICB9OwogICAgZmFBbGFybUNsb2NrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImFsYXJtLWNsb2NrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTIwMF0sICJmMzRlIiwgIk00MDIuNiA1MC4yYy01LjQgMS43LTExLjMgMS44LTE2LjItLjktNS44LTMuMi0xMS44LTYuMi0xNy44LTguOS0xMC40LTQuNy0xMy43LTE4LjMtNC4xLTI0LjYgMTUtOS45IDMzLTE1LjcgNTIuMy0xNS43IDUyLjYgMCA5NS4yIDQyLjYgOTUuMiA5NS4yIDAgMTMuMi0yLjcgMjUuOC03LjYgMzcuMy00LjUgMTAuNS0xOC40IDkuOC0yNC45IC40LTMuOC01LjUtNy44LTEwLjgtMTItMTYtMy41LTQuNC00LjUtMTAuMi0zLjgtMTUuOCAuMi0xLjkgLjQtMy45IC40LTUuOSAwLTI2LjEtMjEuMi00Ny4yLTQ3LjItNDcuMi00LjkgMC05LjcgLjgtMTQuMiAyLjJ6TTMyLjUgMTMyLjljLTYuNSA5LjQtMjAuNSAxMC4xLTI0LjktLjQtNC45LTExLjUtNy42LTI0LjEtNy42LTM3LjMgMC01Mi42IDQyLjYtOTUuMiA5NS4yLTk1LjIgMTkuMyAwIDM3LjMgNS44IDUyLjMgMTUuNyA5LjYgNi4zIDYuMyAxOS45LTQuMSAyNC42LTYuMSAyLjgtMTIgNS43LTE3LjggOC45LTQuOSAyLjctMTAuOSAyLjYtMTYuMiAuOS00LjUtMS40LTkuMi0yLjItMTQuMi0yLjItMjYuMSAwLTQ3LjIgMjEuMi00Ny4yIDQ3LjIgMCAyIC4xIDQgLjQgNS45IC43IDUuNi0uMyAxMS40LTMuOCAxNS44LTQuMiA1LjItOC4yIDEwLjUtMTIgMTZ6TTQzMiAyODhhMTc2IDE3NiAwIDEgMCAtMzUyIDAgMTc2IDE3NiAwIDEgMCAzNTIgMHpNMzk2LjUgNDYyLjVDMzU4LjEgNDkzLjQgMzA5LjIgNTEyIDI1NiA1MTJzLTEwMi4xLTE4LjYtMTQwLjUtNDkuNUw3MyA1MDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNDIuNS00Mi41QzUwLjYgMzkwLjEgMzIgMzQxLjIgMzIgMjg4IDMyIDE2NC4zIDEzMi4zIDY0IDI1NiA2NFM0ODAgMTY0LjMgNDgwIDI4OGMwIDUzLjItMTguNiAxMDIuMS00OS41IDE0MC41TDQ3MyA0NzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDIuNS00Mi41ek0yODAgMTg0bDAgOTQuMSA0MSA0MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00OC00OGMtNC41LTQuNS03LTEwLjYtNy0xN2wwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0eiJdCiAgICB9OwogICAgZmFOZXdzcGFwZXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAibmV3c3BhcGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjQwXSwgImYxZWEiLCAiTTE2OCA4MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAzMDRjMCA4LjQtMS40IDE2LjUtNC4xIDI0TDQ0MCA0MzJjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0zMDRjMC0xMy4zLTEwLjctMjQtMjQtMjRMMTY4IDgwek03MiA0ODBjLTM5LjggMC03Mi0zMi4yLTcyLTcyTDAgMTEyQzAgOTguNyAxMC43IDg4IDI0IDg4czI0IDEwLjcgMjQgMjRsMCAyOTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMwNGMwLTM5LjggMzIuMi03MiA3Mi03MmwyNzIgMGMzOS44IDAgNzIgMzIuMiA3MiA3MmwwIDMwNGMwIDM5LjgtMzIuMiA3Mi03MiA3Mkw3MiA0ODB6TTE5MiAxNTJjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQ4em0xNTIgMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNMjE2IDI1NmwxNzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTAgODBsMTc2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE3NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFIb3NwaXRhbCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJob3NwaXRhbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyNzk3MywgNjI1ODksICJob3NwaXRhbC1hbHQiLCAiaG9zcGl0YWwtd2lkZSJdLCAiZjBmOCIsICJNMTc2IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNDgtNDggMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzJjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTQ4IDAgMC00OGMwLTM1LjMtMjguNy02NC02NC02NEwxNzYgMHpNMTYwIDY0YzAtOC44IDcuMi0xNiAxNi0xNmwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA3MmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw3MiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDI3MmMwIDguOC03LjIgMTYtMTYgMTZsLTE3NiAwIDAtODBjMC0xNy43LTE0LjMtMzItMzItMzJsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgODAtMTc2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI3MmMwLTguOCA3LjItMTYgMTYtMTZsNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTcyek0xMTIgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTk2IDMzNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0zMjAgMGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNi0xMTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNMjY0IDEwNGwwIDMyLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwIDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIgMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDAgMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnoiXQogICAgfTsKICAgIGZhSG9zcGl0YWxBbHQgPSBmYUhvc3BpdGFsOwogICAgZmFIb3NwaXRhbFdpZGUgPSBmYUhvc3BpdGFsOwogICAgZmFDaXJjbGVTdG9wID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1zdG9wIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIwOTQsICJzdG9wLWNpcmNsZSJdLCAiZjI4ZCIsICJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjAgMTkybDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMjggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTQ4IDExMmwwLTk2IDk2IDAgMCA5Ni05NiAweiJdCiAgICB9OwogICAgZmFTdG9wQ2lyY2xlID0gZmFDaXJjbGVTdG9wOwogICAgZmFPYmplY3RVbmdyb3VwID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIm9iamVjdC11bmdyb3VwIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyNDgiLCAiTTQ4LjIgNjYuOGMtLjEtLjgtLjItMS43LS4yLTIuNWwwLS4yYzAtOC44IDcuMi0xNiAxNi0xNiAuOSAwIDEuOSAuMSAyLjggLjIgNy41IDEuMyAxMy4yIDcuOSAxMy4yIDE1LjggMCA4LjgtNy4yIDE2LTE2IDE2LTcuOSAwLTE0LjUtNS43LTE1LjgtMTMuMnpNMCA2NGMwIDI2LjkgMTYuNSA0OS45IDQwIDU5LjNsMCAxMDUuM2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0IDI2LjkgMCA0OS45LTE2LjUgNTkuMy00MGwyMDEuMyAwYzkuNSAyMy41IDMyLjUgNDAgNTkuMyA0MCAzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNsMC0xMDUuM2MyMy41LTkuNSA0MC0zMi41IDQwLTU5LjMgMC0zNS4zLTI4LjctNjQtNjQtNjQtMjYuOSAwLTQ5LjkgMTYuNS01OS4zIDQwTDEyMy4zIDQwQzExMy45IDE2LjUgOTAuOSAwIDY0IDAgMjguNyAwIDAgMjguNyAwIDY0em0zNjggMGExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwek0zMjQuNyA4OGM2LjUgMTYgMTkuMyAyOC45IDM1LjMgMzUuM2wwIDEwNS4zYy0xNiA2LjUtMjguOSAxOS4zLTM1LjMgMzUuM2wtMjAxLjMgMGMtNi41LTE2LTE5LjMtMjguOS0zNS4zLTM1LjNsMC0xMDUuM2MxNi02LjUgMjguOS0xOS4zIDM1LjMtMzUuM2wyMDEuMyAwek0zODQgMjcyYTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnpNODAgMjg4YzAgNy45LTUuNyAxNC41LTEzLjIgMTUuOC0uOCAuMS0xLjcgLjItMi41IC4ybC0uMiAwYy04LjggMC0xNi03LjItMTYtMTYgMC0uOSAuMS0xLjkgLjItMi44IDEuMy03LjUgNy45LTEzLjIgMTUuOC0xMy4yIDguOCAwIDE2IDcuMiAxNiAxNnptNDM2LjctNDBjNi41IDE2IDE5LjMgMjguOSAzNS4zIDM1LjNsMCAxMDUuM2MtMTYgNi41LTI4LjkgMTkuMy0zNS4zIDM1LjNsLTIwMS4zIDBjLTYuNS0xNi0xOS4zLTI4LjktMzUuMy0zNS4zbDAtMjAuNy00OCAwIDAgMjAuN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0IDI2LjkgMCA0OS45LTE2LjUgNTkuMy00MGwyMDEuMyAwYzkuNSAyMy41IDMyLjUgNDAgNTkuMyA0MCAzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNsMC0xMDUuM2MyMy41LTkuNSA0MC0zMi41IDQwLTU5LjMgMC0zNS4zLTI4LjctNjQtNjQtNjQtMjYuOSAwLTQ5LjkgMTYuNS01OS4zIDQwbC01Mi43IDAgMCA5LjZjMTAuNyAxMC45IDE5LjEgMjMuOSAyNC42IDM4LjRsMjggMHptNTkuMy04YTE2IDE2IDAgMSAxIDAtMzIgMTYgMTYgMCAxIDEgMCAzMnpNMjcxLjggNDUwLjdhMTYgMTYgMCAxIDEgLTMxLjUtNS41IDE2IDE2IDAgMSAxIDMxLjUgNS41em0zMDEuNSAxM2MtNy41LTEuMy0xMy4yLTcuOS0xMy4yLTE1LjggMC04LjggNy4yLTE2IDE2LTE2IDcuOSAwIDE0LjUgNS43IDE1LjggMTMuMmwwIC4xYy4xIC45IC4yIDEuOCAuMiAyLjcgMCA4LjgtNy4yIDE2LTE2IDE2LS45IDAtMS45LS4xLTIuOC0uMnoiXQogICAgfTsKICAgIGZhQ29tbWVudCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjb21tZW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDg5LCA2MTY2OV0sICJmMDc1IiwgIk01MS45IDM4NC45QzE5LjMgMzQ0LjYgMCAyOTQuNCAwIDI0MCAwIDEwNy41IDExNC42IDAgMjU2IDBTNTEyIDEwNy41IDUxMiAyNDAgMzk3LjQgNDgwIDI1NiA0ODBjLTM2LjUgMC03MS4yLTcuMi0xMDIuNi0yMEwzNyA1MDkuOWMtMy43IDEuNi03LjUgMi4xLTExLjUgMi4xLTE0LjEgMC0yNS41LTExLjQtMjUuNS0yNS41IDAtNC4zIDEuMS04LjUgMy4xLTEyLjJsNDguOC04OS40em0zNy4zLTMwLjJjMTIuMiAxNS4xIDE0LjEgMzYuMSA0LjggNTMuMmwtMTggMzMuMSA1OC41LTI1LjFjMTEuOC01LjEgMjUuMi01LjIgMzcuMS0uMyAyNS43IDEwLjUgNTQuMiAxNi40IDg0LjMgMTYuNCAxMTcuOCAwIDIwOC04OC44IDIwOC0xOTJTMzczLjggNDggMjU2IDQ4IDQ4IDEzNi44IDQ4IDI0MGMwIDQyLjggMTUuMSA4Mi40IDQxLjIgMTE0Ljd6Il0KICAgIH07CiAgICBmYUNoZXNzUGF3biA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1wYXduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTgyM10sICJmNDQzIiwgIk0xOTItMzJjNjYuMyAwIDEyMCA1My43IDEyMCAxMjAgMCAyNy42LTkuMyA1Mi45LTI0LjkgNzMuMiA5LjggMyAxNi45IDEyLjEgMTYuOSAyMi44IDAgMTMuMy0xMC43IDI0LTI0IDI0bC0uNiAwIDI0LjYgMTYwIDUzLjYgNjdjNi43IDguNCAxMC40IDE4LjggMTAuNCAyOS42IDAgMjYuMi0yMS4yIDQ3LjQtNDcuNCA0Ny40TDYzLjQgNTEyYy0yNi4yIDAtNDcuNC0yMS4yLTQ3LjQtNDcuNCAwLTEwLjggMy43LTIxLjIgMTAuNC0yOS42bDUzLjYtNjcgMjQuNi0xNjAtLjYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjQgMC0xMC44IDcuMS0xOS44IDE2LjktMjIuOC0xNS42LTIwLjMtMjQuOS00NS42LTI0LjktNzMuMiAwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMHpNMTE1LjkgNDAwbC01MS4yIDY0IDI1NC43IDAtNTEuMi02NC0xNTIuMiAwem0zNi4yLTE4NC43bC0yMSAxMzYuNyAxMjEuOSAwLTIxLTEzNi43LTEuMS03LjMtNzcuNiAwLTEuMSA3LjN6TTE5MiAxNmE3MiA3MiAwIDEgMCAwIDE0NCA3MiA3MiAwIDEgMCAwLTE0NHoiXQogICAgfTsKICAgIGZhQ2FsZW5kYXJQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyLXBsdXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI3MSIsICJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MCAxNjAgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0em0wIDExMmwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjg4YzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yODhjMC04LjgtNy4yLTE2LTE2LTE2bC0yNjQgMHptMTA0IDY0YzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDggNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMCAwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDgtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0OCAwIDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUNsaXBib2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyMDNdLCAiZjMyOCIsICJNMjMyIDk2bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6bTAgNDhjMzcuMSAwIDY3LjYtMjggNzEuNi02NEwzMjAgODBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzUyYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA5NmMwLTguOCA3LjItMTYgMTYtMTZsMTYuNCAwYzQgMzYgMzQuNSA2NCA3MS42IDY0bDgwIDB6TTI5MS45IDMyQzI3OSAxMi43IDI1NyAwIDIzMiAwTDE1MiAwYy0yNSAwLTQ3IDEyLjctNTkuOSAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzUyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC0yOC4xIDB6Il0KICAgIH07CiAgICBmYVRodW1ic0Rvd24gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAidGh1bWJzLWRvd24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgwNzgsIDYxNTc2XSwgImYxNjUiLCAiTTM2MCAzMmw3LjQgLjRjMzUgMy42IDYyLjUgMzIuMiA2NC40IDY3LjcgMTcuOCAxMS44IDMwLjEgMzEuNCAzMiA1My45bC4yIDZjMCA1LjctLjcgMTEuMi0yIDE2LjUgMTAuMiAxMS41IDE2LjggMjYuMyAxNy44IDQyLjdsLjIgNC44YzAgMTMuMi0zLjYgMjUuNC05LjggMzYgNC45IDguNCA4LjIgMTcuOSA5LjMgMjhsLjQgOGMwIDM3LjMtMjguMyA2Ny45LTY0LjYgNzEuNmwtNy40IC40LTEwOS43IDAgMTQuMSAzMCAzLjEgNy42YzEyLjUgMzUuNy0xLjggNzUuNS0zNC4yIDk1bC03LjIgMy45Yy0zNy41IDE3LjYtODEuNyAzLjYtMTAyLjYtMzEuMmwtLjYtLjktMi43LTUtLjYtMS4yLTMwLjEtNjRjLTkuNCAxNy44LTI4IDI5LjktNDkuNSAyOS45bC0zMiAwYy0zMC45IDAtNTYtMjUuMS01Ni01NkwwIDE1MmMwLTMwLjkgMjUuMS01NiA1Ni01NmwzMiAwYzEyLjQgMCAyMy45IDQuMSAzMy4yIDExIDEzLjItMjEuNCAzMi0zOS40IDU1LTUxLjZsMTIuMi02LjUgLjctLjMgNi42LTMuMiAuNy0uMyA3LjEtM2MxNi43LTYuNiAzNC41LTkuOSA1Mi42LTkuOUwzNjAgMzJ6TTI1NS45IDgwYy0xMiAwLTIzLjkgMi4zLTM1LjEgNi42bC00LjcgMi01LjMgMi42IDAgMC0xMi4yIDYuNWMtMjkuMiAxNS41LTQ4LjMgNDQuOS01MC43IDc3LjZsLS4yIDggMCAxMTIuOSAuMSA0LjFjLjUgOC4yIDIuNSAxNi4yIDYgMjMuN2w1Ni44IDEyMC45IDIuMSAzLjhjOC40IDEzLjcgMjYgMTkuMSA0MC44IDEyLjJsMi45LTEuNmMxMy03LjggMTguNy0yMy43IDEzLjctMzhsLTEuMi0zLTMwLjItNjQuMmMtMy41LTcuNC0yLjktMTYuMSAxLjUtMjMuMXMxMi0xMS4xIDIwLjItMTEuMWwxNDcuNSAwIDIuNC0uMWMxMS4zLTEuMSAyMC4zLTEwLjEgMjEuNC0yMS40bC4xLTIuNWMwLTcuMS0zLjEtMTMuNS04LjItMTgtNS4yLTQuNi04LjItMTEuMS04LjItMThzMy0xMy40IDguMi0xOGM0LjQtMy45IDcuNC05LjMgOC0xNS4zbC4yLTIuN2MwLTguNC00LjQtMTUuOS0xMS4yLTIwLjItMTAuNy02LjktMTQuMi0yMC45LTgtMzIgMS41LTIuNiAyLjUtNS42IDIuOS04LjZsLjItMy4yYzAtMTAuNi02LjktMTkuNi0xNi42LTIyLjgtMTEuNy0zLjgtMTguNy0xNS45LTE2LTI4IC4yLS45IC4zLTEuOCAuNC0yLjZsLjItMi42YzAtMTIuNC05LjUtMjIuNi0yMS42LTIzLjhMMzYwIDgwIDI1NS45IDgwek01NiAxNDRjLTQuNCAwLTggMy42LTggOGwwIDIyNGMwIDQuNCAzLjYgOCA4IDhsMzIgMGM0LjQgMCA4LTMuNiA4LThsMC0yMjRjMC00LjQtMy42LTgtOC04bC0zMiAweiJdCiAgICB9OwogICAgZmFJZEJhZGdlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImlkLWJhZGdlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYyYzEiLCAiTTI1NiA0OGwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2LTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM4NGMwIDguOCA3LjIgMTYgMTYgMTZsMjU2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzg0YzAtOC44LTcuMi0xNi0xNi0xNmwtNjQgMHpNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek0xNjAgMzIwbDY0IDBjNDQuMiAwIDgwIDM1LjggODAgODAgMCA4LjgtNy4yIDE2LTE2IDE2TDk2IDQxNmMtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwem0tMjQtOTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAweiJdCiAgICB9OwogICAgZmFTcXVhcmVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtY2hlY2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5NzQ1LCA5OTg5LCA2MTUxMCwgImNoZWNrLXNxdWFyZSJdLCAiZjE0YSIsICJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MHptMjMwLjcgODkuOWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjMgMTAuNyA3LjggMTMuMSAyMi44IDUuMyAzMy41TDIxMS40IDM2Ni4xYy00LjEgNS43LTEwLjUgOS4zLTE3LjUgOS44LTcgLjUtMTMuOS0yLTE4LjgtNi45bC01NS45LTU1LjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzNiAzNiAxMDUuNi0xNDUuMnoiXQogICAgfTsKICAgIGZhQ2hlY2tTcXVhcmUgPSBmYVNxdWFyZUNoZWNrOwogICAgZmFDaGVzc0Jpc2hvcCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1iaXNob3AiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFs5ODIxXSwgImY0M2EiLCAiTTIxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwIDgxLjggOTguMWMyNC43IDI5LjYgMzguMiA2NyAzOC4yIDEwNS42IDAgNDMuNy0xNy40IDg1LjctNDguMyAxMTYuNmwtOC42IDguNiA0Ni41IDU4LjJjNi43IDguNCAxMC40IDE4LjggMTAuNCAyOS42IDAgMjYuMi0yMS4yIDQ3LjQtNDcuNCA0Ny40TDQ3LjQgNTEyQzIxLjIgNTEyIDAgNDkwLjggMCA0NjQuNiAwIDQ1My45IDMuNyA0NDMuNCAxMC40IDQzNWw0Ni41LTU4LjItOC42LTguNkMxNy40IDMzNy40IDAgMjk1LjQgMCAyNTEuNyAwIDIxMy4xIDEzLjUgMTc1LjggMzguMiAxNDYuMUwxMjAgNDggMTA0IDQ4QzkwLjcgNDggODAgMzcuMyA4MCAyNFM5MC43IDAgMTA0IDBMMjE2IDB6TTk0LjQgNDA2LjhsLTQ1LjcgNTcuMiAyMjIuNyAwLTQ1LjctNTcuMS01LjUtNi45LTEyMC4zIDAtNS41IDYuOHpNMTU2LjkgNzguN0w3NS4xIDE3Ni44Yy0xNS4zIDE4LjQtMjQuNiA0MS0yNi43IDY0LjdMNDggMjUxLjdjMCAzMSAxMi4zIDYwLjcgMzQuMiA4Mi43bDE3LjcgMTcuNyAxMjAuMiAwYzYuMi02LjIgMTIuMS0xMi4xIDE3LjgtMTcuNyAyMS45LTIxLjkgMzQuMi01MS42IDM0LjItODIuNmwtLjQtMTAuMmMtMS41LTE3LTYuNy0zMy4zLTE1LjItNDhMMjA5IDI0MWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1MS44LTUxLjgtNjMuNy03Ni41LTMuMS0zLjgtMy4xIDMuOHoiXQogICAgfTsKICAgIGZhRW52ZWxvcGVPcGVuID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImVudmVsb3BlLW9wZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjEzNV0sICJmMmI2IiwgIk01MTIgNDE2YzAgMzUuMy0yOC41IDY0LTYzLjkgNjRMNjQgNDgwYy0zNS40IDAtNjQtMjguNy02NC02NEwwIDE2NGMuMS0xNS41IDcuOC0zMCAyMC41LTM4LjhMMjA2LTIuN2MzMC4xLTIwLjcgNjkuOC0yMC43IDk5LjkgMEw0OTEuNSAxMjUuMmMxMi44IDguOCAyMC40IDIzLjMgMjAuNSAzOC44bDAgMjUyek02NCA0MzJsMzg0LjEgMGM4LjggMCAxNS45LTcuMSAxNS45LTE2bDAtMTkxLjctMTU0LjggMTE3LjRjLTMxLjQgMjMuOS03NC45IDIzLjktMTA2LjQgMEw0OCAyMjQuMyA0OCA0MTZjMCA4LjkgNy4yIDE2IDE2IDE2ek00NjMuNiAxNjQuNEwyNzguNyAzNi44Yy0xMy43LTkuNC0zMS43LTkuNC00NS40IDBMNDguNCAxNjQuNCAyMzEuOCAzMDMuNWMxNC4zIDEwLjggMzQuMSAxMC44IDQ4LjQgMEw0NjMuNiAxNjQuNHoiXQogICAgfTsKICAgIGZhQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE1MzIsICJ0aW1lcy1jaXJjbGUiLCAieG1hcmstY2lyY2xlIl0sICJmMDU3IiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NyAxNjdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDU1IDU1LTU1IDU1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNTUtNTUgNTUgNTVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01NS01NSA1NS01NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01NSA1NS01NS01NWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDB6Il0KICAgIH07CiAgICBmYVRpbWVzQ2lyY2xlID0gZmFDaXJjbGVYbWFyazsKICAgIGZhWG1hcmtDaXJjbGUgPSBmYUNpcmNsZVhtYXJrOwogICAgZmFTcXVhcmVDYXJldFVwID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1jYXJldC11cCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYXJldC1zcXVhcmUtdXAiXSwgImYxNTEiLCAiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODB6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0yMjQgNjRjNi43IDAgMTMgMi44IDE3LjYgNy43bDEwNCAxMTJjNi41IDcgOC4yIDE3LjIgNC40IDI1LjlTMzM3LjUgMzIwIDMyOCAzMjBsLTIwOCAwYy05LjUgMC0xOC4yLTUuNy0yMi0xNC40cy0yLjEtMTguOSA0LjQtMjUuOWwxMDQtMTEyYzQuNS00LjkgMTAuOS03LjcgMTcuNi03Ljd6Il0KICAgIH07CiAgICBmYUNhcmV0U3F1YXJlVXAgPSBmYVNxdWFyZUNhcmV0VXA7CiAgICBmYUZpbGVJbWFnZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWltYWdlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NDQzXSwgImYxYzUiLCAiTTE3NiA0OEw2NCA0OGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzg0YzAgOC44IDcuMiAxNiAxNiAxNmwyNTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNDAtODggMGMtMzkuOCAwLTcyLTMyLjItNzItNzJsMC04OHpNMzE2LjEgMTYwTDIyNCA2Ny45IDIyNCAxMzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjguMSAwek0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwxOTcuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDE0MS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6TTI1OS40IDQzMmwtMTM0LjggMGMtMTUuOCAwLTI4LjYtMTIuOC0yOC42LTI4LjYgMC02LjQgMi4xLTEyLjUgNi0xNy42bDY3LjYtODYuOUMxNzUgMjkyIDE4My4zIDI4OCAxOTIgMjg4czE3IDQgMjIuNCAxMC45TDI4MiAzODUuOWMzLjkgNSA2IDExLjIgNiAxNy42IDAgMTUuOC0xMi44IDI4LjYtMjguNiAyOC42ek0xMTIgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhU3F1YXJlQ2FyZXRSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtY2FyZXQtcmlnaHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY2FyZXQtc3F1YXJlLXJpZ2h0Il0sICJmMTUyIiwgIk00MDAgOTZjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMHpNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNMzIwIDI1NmMwIDYuNy0yLjggMTMtNy43IDE3LjZsLTExMiAxMDRjLTcgNi41LTE3LjIgOC4yLTI1LjkgNC40UzE2MCAzNjkuNSAxNjAgMzYwbDAtMjA4YzAtOS41IDUuNy0xOC4yIDE0LjQtMjJzMTguOS0yLjEgMjUuOSA0LjRsMTEyIDEwNGM0LjkgNC41IDcuNyAxMC45IDcuNyAxNy42eiJdCiAgICB9OwogICAgZmFDYXJldFNxdWFyZVJpZ2h0ID0gZmFTcXVhcmVDYXJldFJpZ2h0OwogICAgZmFTdW4gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3VuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTcyOF0sICJmMTg1IiwgIk0yMDAuNi03LjljLTYuNy00LjQtMTUuMS01LjItMjIuNS0yLjJTMTY1LjQtLjUgMTYzLjkgNy4zTDE0MyAxMTAuNiAzOS43IDEzMS40Yy03LjggMS42LTE0LjQgNy0xNy40IDE0LjNzLTIuMiAxNS44IDIuMiAyMi41TDgyLjcgMjU2IDI0LjUgMzQzLjhjLTQuNCA2LjctNS4yIDE1LjEtMi4yIDIyLjVzOS42IDEyLjggMTcuNCAxNC4zTDE0MyA0MDEuNCAxNjMuOSA1MDQuN2MxLjYgNy44IDcgMTQuNCAxNC4zIDE3LjRzMTUuOCAyLjIgMjIuNS0yLjJsODcuOC01OC4yIDg3LjggNTguMmM2LjcgNC40IDE1LjEgNS4yIDIyLjUgMi4yczEyLjgtOS42IDE0LjMtMTcuNGwyMC45LTEwMy4yIDEwMy4yLTIwLjljNy44LTEuNiAxNC40LTcgMTcuNC0xNC4zczIuMi0xNS44LTIuMi0yMi41bC01OC4yLTg3LjggNTguMi04Ny44YzQuNC02LjcgNS4yLTE1LjEgMi4yLTIyLjVzLTkuNi0xMi44LTE3LjQtMTQuM0w0MzMuOCAxMTAuNiA0MTMgNy4zQzQxMS40LS41IDQwNi03IDM5OC42LTEwLjFzLTE1LjgtMi4yLTIyLjUgMi4yTDI4OC40IDUwLjMgMjAwLjYtNy45ek0xODYuOSAxMzUuN2wxNy04My45IDcxLjMgNDcuM2M4IDUuMyAxOC41IDUuMyAyNi41IDBsNzEuMy00Ny4zIDE3IDgzLjljMS45IDkuNSA5LjMgMTYuOCAxOC44IDE4LjhsODMuOSAxNy00Ny4zIDcxLjNjLTUuMyA4LTUuMyAxOC41IDAgMjYuNWw0Ny4zIDcxLjMtODMuOSAxN2MtOS41IDEuOS0xNi45IDkuMy0xOC44IDE4LjhsLTE3IDgzLjktNzEuMy00Ny4zYy04LTUuMy0xOC41LTUuMy0yNi41IDBsLTcxLjMgNDcuMy0xNy04My45Yy0xLjktOS41LTkuMy0xNi45LTE4LjgtMTguOGwtODMuOS0xNyA0Ny4zLTcxLjNjNS4zLTggNS4zLTE4LjUgMC0yNi41bC00Ny4zLTcxLjMgODMuOS0xN2M5LjUtMS45IDE2LjgtOS4zIDE4LjgtMTguOHpNMjM5LjYgMjU2YTQ4LjQgNDguNCAwIDEgMSA5Ni44IDAgNDguNCA0OC40IDAgMSAxIC05Ni44IDB6bTE0NC44IDBhOTYuNCA5Ni40IDAgMSAwIC0xOTIuOCAwIDk2LjQgOTYuNCAwIDEgMCAxOTIuOCAweiJdCiAgICB9OwogICAgZmFJbWFnZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJpbWFnZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDNlIiwgIk02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMjBjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptMTI4IDMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTM2IDcyYzguNSAwIDE2LjQgNC41IDIwLjcgMTEuOGw4MCAxMzZjNC40IDcuNCA0LjQgMTYuNiAuMSAyNC4xUzM1Mi42IDM4NCAzNDQgMzg0bC0yNDAgMGMtOC45IDAtMTcuMi01LTIxLjMtMTIuOXMtMy41LTE3LjUgMS42LTI0LjhsNTYtODBjNC41LTYuNCAxMS44LTEwLjIgMTkuNy0xMC4yczE1LjIgMy44IDE5LjcgMTAuMmwxNy4yIDI0LjYgNDYuNS03OWM0LjMtNy4zIDEyLjItMTEuOCAyMC43LTExLjh6Il0KICAgIH07CiAgICBmYUxpZ2h0YnVsYiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJsaWdodGJ1bGIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxNjFdLCAiZjBlYiIsICJNMjk2LjUgMjkxLjFDMzIxIDI2NS4yIDMzNiAyMzAuNCAzMzYgMTkyIDMzNiAxMTIuNSAyNzEuNSA0OCAxOTIgNDhTNDggMTEyLjUgNDggMTkyYzAgMzguNCAxNSA3My4yIDM5LjUgOTkuMSAyMS4zIDIyLjQgNDQuOSA1NCA1My4zIDkyLjlsMTAyLjQgMGM4LjQtMzkgMzItNzAuNSA1My4zLTkyLjl6bTM0LjggMzNDMzA3LjcgMzQ5IDI4OCAzNzkuNCAyODggNDEzLjdsMCAxOC4zYzAgNDQuMi0zNS44IDgwLTgwIDgwbC0zMiAwYy00NC4yIDAtODAtMzUuOC04MC04MGwwLTE4LjNDOTYgMzc5LjQgNzYuMyAzNDkgNTIuNyAzMjQuMSAyMCAyODkuNyAwIDI0My4yIDAgMTkyIDAgODYgODYgMCAxOTIgMFMzODQgODYgMzg0IDE5MmMwIDUxLjItMjAgOTcuNy01Mi43IDEzMi4xek0xNDQgMTg0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNDguNiAzOS40LTg4IDg4LTg4IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yMi4xIDAtNDAgMTcuOS00MCA0MHoiXQogICAgfTsKICAgIGZhQWRkcmVzc0NhcmQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiYWRkcmVzcy1jYXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjIxNDAsICJjb250YWN0LWNhcmQiLCAidmNhcmQiXSwgImYyYmIiLCAiTTUxMiA4MGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMjBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQzMmMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDk2YzAtOC44IDcuMi0xNiAxNi0xNmw0NDggMHpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjA4IDI0OGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnptLTMyIDQwYy00NC4yIDAtODAgMzUuOC04MCA4MCAwIDguOCA3LjIgMTYgMTYgMTZsMTkyIDBjOC44IDAgMTYtNy4yIDE2LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwbC02NCAwek0zNzYgMTQ0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwIDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMHoiXQogICAgfTsKICAgIGZhQ29udGFjdENhcmQgPSBmYUFkZHJlc3NDYXJkOwogICAgZmFWY2FyZCA9IGZhQWRkcmVzc0NhcmQ7CiAgICBmYUZhY2VNZWggPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1tZWgiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjgsICJtZWgiXSwgImYxMWEiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMSAtNDE2IDAgMjA4IDIwOCAwIDEgMSA0MTYgMHpNMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMiAyNTYgMjU2IDAgMSAwIDAtNTEyek0xNzYgMjQwYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMTkyLTMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTE4NCAzMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFNZWggPSBmYUZhY2VNZWg7CiAgICBmYU1hcCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJtYXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MDYsIDYyMDcyXSwgImYyNzkiLCAiTTUxMiA0OGMwLTguMy00LjMtMTYtMTEuMy0yMC40cy0xNS45LTQuOC0yMy4zLTEuMUwzNTIuNSA4OC4xIDE4MCAyOS40Yy0xMy43LTQuNy0yOC43LTMuOC00MS45IDIuM0wxMy44IDkwLjNDNS40IDk0LjIgMCAxMDIuNyAwIDExMkwwIDQ2NGMwIDguMiA0LjIgMTUuOSAxMS4xIDIwLjNzMTUuNiA0LjkgMjMuMSAxLjRsMTI3LjMtNTkuOSAxNzAuNyA1Ni45YzEzLjcgNC42IDI4LjUgMy43IDQxLjYtMi41bDEyNC40LTU4LjVjOC40LTQgMTMuOC0xMi40IDEzLjgtMjEuN2wwLTM1MnpNMTQ0IDgyLjFsMCAyOTktOTYgNDUuMiAwLTI5OSA5Ni00NS4yem00OCAzMDMuM2wwLTMwMS4xIDEyOCA0My41IDAgMzAwLjMtMTI4LTQyLjd6TTM2OCAxMzRsOTYtNDcuNCAwIDI5OC4yLTk2IDQ1LjIgMC0yOTZ6Il0KICAgIH07CiAgICBmYUhhbmRQb2ludERvd24gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wb2ludC1kb3duIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYwYTciLCAiTTY0IDQ0OGwwLTE3Ny42YzUuMiAxIDEwLjUgMS42IDE2IDEuNmwxNiAwIDAgMTc2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2ek04MCAyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjRjMC02Ni4zIDUzLjctMTIwIDEyMC0xMjBsNDggMGM1Mi41IDAgOTcuMSAzMy43IDExMy40IDgwLjctMy4xLS41LTYuMi0uNy05LjQtLjctMjAgMC0zNy45IDkuMi00OS43IDIzLjYtOS00LjktMTkuNC03LjYtMzAuMy03LjYtMTUuMSAwLTI5IDUuMy00MCAxNC0xMS04LjgtMjQuOS0xNC00MC0xNGwtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC04MCAwek0wIDE5MmwwIDBjMCAxOCA2IDM0LjYgMTYgNDhsMCAyMDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGwwLTgyYzUuMSAxLjMgMTAuNSAyIDE2IDIgMjUuMyAwIDQ3LjItMTQuNyA1Ny42LTM2IDcgMi42IDE0LjUgNCAyMi40IDQgMjAgMCAzNy45LTkuMiA0OS43LTIzLjYgOSA0LjkgMTkuNCA3LjYgMzAuMyA3LjYgMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC04OEMzODQgNzUuMiAzMDguOCAwIDIxNiAwTDE2OCAwQzc1LjIgMCAwIDc1LjIgMCAxNjhsMCAyNHptMzM2IDY0YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNjRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDY0ek0xNjAgMjcyYzUuNSAwIDEwLjktLjcgMTYtMmwwIDM0YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMzIgMTYgMHptNjQtMjRsMC00MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNjRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0yNHoiXQogICAgfTsKICAgIGZhRmFjZU1laEJsYW5rID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtbWVoLWJsYW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTY2LCAibWVoLWJsYW5rIl0sICJmNWE0IiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMCAwIDQxNiAyMDggMjA4IDAgMSAwIDAtNDE2ek01MTIgMjU2YTI1NiAyNTYgMCAxIDEgLTUxMiAwIDI1NiAyNTYgMCAxIDEgNTEyIDB6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhTWVoQmxhbmsgPSBmYUZhY2VNZWhCbGFuazsKICAgIGZhRmFjZUdyaW5Ub25ndWUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXRvbmd1ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUzOSwgImdyaW4tdG9uZ3VlIl0sICJmNTg5IiwgIk00NjQgMjU2YzAtMTE0LjktOTMuMS0yMDgtMjA4LTIwOFM0OCAxNDEuMSA0OCAyNTZjMCA3NC4xIDM4LjggMTM5LjIgOTcuMSAxNzYtLjctNS4yLTEuMS0xMC42LTEuMS0xNmwwLTUzLjVjLTEwLjItMTIuNi0xOC4zLTI2LjktMjMuOC00Mi40LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNiAxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtNS41IDE1LjYtMTMuNiAyOS45LTIzLjggNDIuNWwwIDUzLjVjMCA1LjQtLjQgMTAuOC0xLjEgMTYgNTguNC0zNi44IDk3LjEtMTAxLjkgOTcuMS0xNzZ6bTQ4IDBjMCAxMTYuMy03Ny42IDIxNC42LTE4My45IDI0NS43LTE5LjUgMTYuNC00NC42IDI2LjMtNzIuMSAyNi4zcy01Mi42LTkuOS03Mi4xLTI2LjNDNzcuNiA0NzAuNiAwIDM3Mi4zIDAgMjU2IDAgMTE0LjYgMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NnpNMTc2IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNiAyMDhsMC0zNy40YzAtMTQuNy0xMS45LTI2LjYtMjYuNi0yNi42bC0yIDBjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjktMi44IDEyLjYtMjAuOCAxMi42LTIzLjYgMC0yLjUtMTEuMS0xMi4zLTE4LjktMjMuNi0xOC45bC0yIDBjLTE0LjcgMC0yNi42IDExLjktMjYuNiAyNi42bDAgMzcuNGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdCiAgICB9OwogICAgZmFHcmluVG9uZ3VlID0gZmFGYWNlR3JpblRvbmd1ZTsKICAgIGZhRnV0Ym9sID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZ1dGJvbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk5MTcsICJmdXRib2wtYmFsbCIsICJzb2NjZXItYmFsbCJdLCAiZjFlMyIsICJNMzg3IDIyOC4zYy00LjQtMi44LTcuNi03LTkuMi0xMS45cy0xLjQtMTAuMiAuNS0xNUw0MTEuNiAxMThjLTE5LjktMjIuNC00NC42LTQwLjUtNzIuNC01Mi43bC02OS4xIDU3LjZjLTQgMy4zLTkgNS4xLTE0LjEgNS4xcy0xMC4yLTEuOC0xNC4xLTUuMUwxNzIuOCA2NS4zYy0yNy44IDEyLjItNTIuNSAzMC4zLTcyLjQgNTIuN2wzMy40IDgzLjRjMS45IDQuOCAyLjEgMTAuMSAuNSAxNXMtNC45IDkuMS05LjIgMTEuOUw0OSAyNzYuMmMzIDMwLjkgMTIuNyA1OS43IDI3LjYgODUuMmw4OS43LTZjNS4yLS4zIDEwLjMgMS4xIDE0LjUgNC4yczcuMiA3LjQgOC40IDEyLjVsMjIgODcuMmMxNC40IDMuMiAyOS40IDQuOCA0NC44IDQuOHMzMC4zLTEuNyA0NC44LTQuOGwyMi04Ny4yYzEuMy01IDQuMi05LjQgOC40LTEyLjVzOS4zLTQuNSAxNC41LTQuMmw4OS43IDZjMTUtMjUuNCAyNC43LTU0LjMgMjcuNi04NS4xTDM4NyAyMjguM3pNMjU2IDBhMjU2IDI1NiAwIDEgMSAwIDUxMiAyNTYgMjU2IDAgMSAxIDAtNTEyem02MiAyMjFjOC40IDYuMSAxMS45IDE2LjkgOC43IDI2LjhsLTE4LjMgNTYuM2MtMy4yIDkuOS0xMi40IDE2LjYtMjIuOCAxNi42bC01OS4yIDBjLTEwLjQgMC0xOS42LTYuNy0yMi44LTE2LjZsLTE4LjMtNTYuM2MtMy4yLTkuOSAuMy0yMC43IDguNy0yNi44bDQ3LjktMzQuOGM4LjQtNi4xIDE5LjgtNi4xIDI4LjIgMEwzMTggMjIxeiJdCiAgICB9OwogICAgZmFGdXRib2xCYWxsID0gZmFGdXRib2w7CiAgICBmYVNvY2NlckJhbGwgPSBmYUZ1dGJvbDsKICAgIGZhRmFjZVN1cnByaXNlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2Utc3VycHJpc2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTgsICJzdXJwcmlzZSJdLCAiZjVjMiIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xNzYtODBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptLTQ4IDgwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdCiAgICB9OwogICAgZmFTdXJwcmlzZSA9IGZhRmFjZVN1cnByaXNlOwogICAgZmFGb2xkZXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZm9sZGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTkzLCAxMjg0NDcsIDYxNzE2LCAiZm9sZGVyLWJsYW5rIl0sICJmMDdiIiwgIk02NCA0MDBsMzg0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjQwYzAtOC44LTcuMi0xNi0xNi0xNmwtMTQ5LjMgMGMtMTcuMyAwLTM0LjItNS42LTQ4LTE2TDIxMi4zIDgzLjJjLTIuOC0yLjEtNi4xLTMuMi05LjYtMy4yTDY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2em0zODQgNDhMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDEzOC43IDBjMTMuOCAwIDI3LjMgNC41IDM4LjQgMTIuOGwzOC40IDI4LjhjNS41IDQuMiAxMi4zIDYuNCAxOS4yIDYuNEw0NDggODBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDBjMCAzNS4zLTI4LjcgNjQtNjQgNjR6Il0KICAgIH07CiAgICBmYUZvbGRlckJsYW5rID0gZmFGb2xkZXI7CiAgICBmYUNsb3VkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNsb3VkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTcyOV0sICJmMGMyIiwgIk04MCAxOTJjMC04OC40IDcxLjYtMTYwIDE2MC0xNjAgNDcuMSAwIDg5LjQgMjAuNCAxMTguNyA1Mi43IDEwLjYtMy4xIDIxLjgtNC43IDMzLjMtNC43IDY2LjMgMCAxMjAgNTMuNyAxMjAgMTIwIDAgMTMuMi0yLjEgMjUuOS02LjEgMzcuOCA0MS42IDIxLjEgNzAuMSA2NC4zIDcwLjEgMTE0LjIgMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTMwNCAwYy03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NCAwLTU2LjggMzIuOS0xMDUuOSA4MC43LTEyOS40LS40LTQuOC0uNy05LjctLjctMTQuNnpNMjQwIDgwYy02MS45IDAtMTEyIDUwLjEtMTEyIDExMiAwIDguNCAuOSAxNi42IDIuNyAyNC41IDIuNyAxMi4xLTQuMyAyNC4zLTE2LjEgMjguMS0zOC43IDEyLjQtNjYuNiA0OC43LTY2LjYgOTEuNCAwIDUzIDQzIDk2IDk2IDk2bDMwNCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwIDAtMzcuNC0yNS43LTY4LjktNjAuNS03Ny42LTcuNS0xLjktMTMuNi03LjItMTYuNS0xNC4zcy0yLjEtMTUuMiAyLTIxLjdjNy0xMS4xIDExLTI0LjIgMTEtMzguMyAwLTM5LjgtMzIuMi03Mi03Mi03Mi0xMS4xIDAtMjEuNSAyLjUtMzAuOCA2LjktMTAuNSA1LTIzLjEgMS43LTI5LjgtNy44LTIwLjMtMjguNi01My43LTQ3LjEtOTEuMy00Ny4xeiJdCiAgICB9OwogICAgZmFDaXJjbGUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzA4LCAxMjgzMDksIDEyODk5MiwgMTI4OTkzLCAxMjg5OTQsIDEyODk5NSwgMTI4OTk2LCA5Njc5LCA5ODk4LCA5ODk5LCAxMTA0NCwgNjE3MDgsIDYxOTE1XSwgImYxMTEiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5TcXVpbnQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXNxdWludCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUxOCwgImdyaW4tc3F1aW50Il0sICJmNTg1IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTM3Mi4yIDQ2LjNjMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjZ6bS0yNDkuNi0xNDNjNC41LTYuOCAxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAyMDggMTI1LjggMTgwLjNjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjF6bTI2My42IDIxLjFMMzUzIDIwOCAzODYuMiAyMzUuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXMzLjEgMTUuOS0zLjEgMjEuMXoiXQogICAgfTsKICAgIGZhR3JpblNxdWludCA9IGZhRmFjZUdyaW5TcXVpbnQ7CiAgICBmYUNpcmNsZVVzZXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXVzZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjE0MiwgInVzZXItY2lyY2xlIl0sICJmMmJkIiwgIk00MDYuNSAzOTkuNkMzODcuNCAzNTIuOSAzNDEuNSAzMjAgMjg4IDMyMGwtNjQgMGMtNTMuNSAwLTk5LjQgMzIuOS0xMTguNSA3OS42LTM1LjYtMzcuMy01Ny41LTg3LjktNTcuNS0xNDMuNiAwLTExNC45IDkzLjEtMjA4IDIwOC0yMDhzMjA4IDkzLjEgMjA4IDIwOGMwIDU1LjctMjEuOSAxMDYuMi01Ny41IDE0My42em0tNDAuMSAzMi43QzMzNC40IDQ1Mi40IDI5Ni42IDQ2NCAyNTYgNDY0cy03OC40LTExLjYtMTEwLjUtMzEuN2M3LjMtMzYuNyAzOS43LTY0LjMgNzguNS02NC4zbDY0IDBjMzguOCAwIDcxLjIgMjcuNiA3OC41IDY0LjN6TTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTI3MmE0MCA0MCAwIDEgMSAwLTgwIDQwIDQwIDAgMSAxIDAgODB6bS04OC00MGE4OCA4OCAwIDEgMCAxNzYgMCA4OCA4OCAwIDEgMCAtMTc2IDB6Il0KICAgIH07CiAgICBmYVVzZXJDaXJjbGUgPSBmYUNpcmNsZVVzZXI7CiAgICBmYVJlY3RhbmdsZUxpc3QgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAicmVjdGFuZ2xlLWxpc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGlzdC1hbHQiXSwgImYwMjIiLCAiTTY0IDExMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjU2YzAgOC44IDcuMiAxNiAxNiAxNmwzODQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNTZjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDExMnpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHpNMTYwIDMyMGEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0tMzItOTZhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em0xMDQtNTZsMTYwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0wIDEyOGwxNjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUxpc3RBbHQgPSBmYVJlY3RhbmdsZUxpc3Q7CiAgICBmYUhhbmQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTMwNiwgOTk5NSwgImhhbmQtcGFwZXIiXSwgImYyNTYiLCAiTTI1Ni41IDBjLTI1LjMgMC00Ny4yIDE0LjctNTcuNiAzNi03LTIuNi0xNC41LTQtMjIuNC00LTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMTY1LjUtMi43LTIuN2MtMjUtMjUtNjUuNS0yNS05MC41IDBzLTI1IDY1LjUgMCA5MC41TDEwNyA0MzdjNDggNDggMTEzLjEgNzUgMTgxIDc1bDE2LjUgMGMxLjUgMCAzLS4xIDQuNS0uNCA5MS43LTYuMiAxNjUtNzkuNCAxNzEuMS0xNzEuMSAuMy0xLjUgLjQtMyAuNC00LjVsMC0xNzZjMC0zNS4zLTI4LjctNjQtNjQtNjQtNS41IDAtMTAuOSAuNy0xNiAybDAtMmMwLTM1LjMtMjguNy02NC02NC02NC03LjkgMC0xNS40IDEuNC0yMi40IDQtMTAuNC0yMS4zLTMyLjMtMzYtNTcuNi0zNnptLTE2IDk2LjFsMC0uMSAwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEzNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTM2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTcyLjljLS4xIC42LS4xIDEuMy0uMiAxLjktMy40IDY5LjctNTkuMyAxMjUuNi0xMjkgMTI5LS42IDAtMS4zIC4xLTEuOSAuMkwyODggNDY0QzIzMi45IDQ2NCAxODAgNDQyLjEgMTQxIDQwMy4xTDUzLjIgMzE1LjNjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGw0My43IDQzLjdjNi45IDYuOSAxNy4yIDguOSAyNi4yIDUuMnMxNC44LTEyLjUgMTQuOC0yMi4ybDAtMjIzLjRjMC04LjggNy4yLTE2IDE2LTE2IDguOCAwIDE2IDcuMSAxNiAxNS45bDAgMTM2LjFjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEzNS45eiJdCiAgICB9OwogICAgZmFIYW5kUGFwZXIgPSBmYUhhbmQ7CiAgICBmYVRodW1ic1VwID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInRodW1icy11cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODA3NywgNjE1NzVdLCAiZjE2NCIsICJNMTcxLjUgMzguOEMxOTIuMyA0IDIzNi41LTEwIDI3NCA3LjZsNy4yIDMuOEMzMTYgMzIuMyAzMzAgNzYuNSAzMTIuNCAxMTRsMCAwLTE0LjEgMzAgMTA5LjcgMCA3LjQgLjRjMzYuMyAzLjcgNjQuNiAzNC40IDY0LjYgNzEuNiAwIDEzLjItMy42IDI1LjQtOS44IDM2IDYuMSAxMC42IDkuNyAyMi44IDkuOCAzNiAwIDE4LjMtNi45IDM0LjgtMTggNDcuNSAxLjMgNS4zIDIgMTAuOCAyIDE2LjUgMCAyNS4xLTEyLjkgNDctMzIuMiA1OS45LTEuOSAzNS41LTI5LjQgNjQuMi02NC40IDY3LjdsLTcuNCAuNC0xMDQuMSAwYy0xOCAwLTM1LjktMy40LTUyLjYtOS45bC03LjEtMy0uNy0uMy02LjYtMy4yLS43LS4zLTEyLjItNi41Yy0xMi4zLTYuNS0yMy4zLTE0LjctMzIuOS0yNC4xLTQuMSAyNi45LTI3LjMgNDcuNC01NS4zIDQ3LjRsLTMyIDBjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgMjAwYzAtMzAuOSAyNS4xLTU2IDU2LTU2bDMyIDBjMTAuOCAwIDIwLjkgMy4xIDI5LjUgOC41bDUwLjEtMTA2LjUgLjYtMS4yIDIuNy01IC42LS45ek01NiAxOTJjLTQuNCAwLTggMy42LTggOGwwIDIyNGMwIDQuNCAzLjYgOCA4IDhsMzIgMGM0LjQgMCA4LTMuNiA4LThsMC0yMjRjMC00LjQtMy42LTgtOC04bC0zMiAwek0yNTMuNiA1MWMtMTQuOC02LjktMzIuMy0xLjYtNDAuNyAxMmwtMi4yIDQtNTYuOCAxMjAuOWMtMy41IDcuNS01LjUgMTUuNS02IDIzLjdsLS4xIDQuMiAwIDExMi45IC4yIDcuOWMyLjQgMzIuNyAyMS40IDYyLjEgNTAuNyA3Ny43bDExLjUgNi4xIDYuMyAzLjFjMTIuNCA1LjYgMjUuOCA4LjUgMzkuNCA4LjVsMTA0LjEgMCAyLjQtLjFjMTIuMS0xLjIgMjEuNi0xMS41IDIxLjYtMjMuOWwtLjItMi42Yy0uMS0uOS0uMi0xLjctLjQtMi42LTIuNy0xMi4xIDQuMy0yNC4yIDE2LTI4IDkuNy0zLjEgMTYuNi0xMi4yIDE2LjYtMjIuOCAwLTQuMy0xLjEtOC4yLTMuMS0xMS44LTYuMy0xMS4xLTIuOC0yNS4yIDgtMzIgNi44LTQuMyAxMS4yLTExLjggMTEuMi0yMC4yIDAtNy4xLTMuMS0xMy41LTguMi0xOC01LjItNC42LTguMi0xMS4xLTguMi0xOHMzLTEzLjQgOC4yLTE4YzUuMS00LjUgOC4yLTEwLjkgOC4yLTE4bC0uMS0yLjRjLTEuMS0xMS4zLTEwLjEtMjAuMy0yMS40LTIxLjRsLTIuNC0uMS0xNDcuNSAwYy04LjIgMC0xNS44LTQuMi0yMC4yLTExLjEtNC40LTYuOS01LTE1LjctMS41LTIzLjFMMjY5IDkzLjZjNy0xNSAxLjQtMzIuNy0xMi41LTQxTDI1My42IDUxeiJdCiAgICB9OwogICAgZmFCdWlsZGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyNzk3MCwgNjE2ODddLCAiZjFhZCIsICJNNjQgNDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM4NGMwIDguOCA3LjIgMTYgMTYgMTZsODAgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA4MCA4MCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTM4NGMwLTguOC03LjItMTYtMTYtMTZMNjQgNDh6TTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptOTYgNDhjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjQwIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTk2IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNDQtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhQ2hlc3NSb29rID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNoZXNzLXJvb2siLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5ODIwXSwgImY0NDciLCAiTTM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTM4LjdjMCAxMy44LTQuNSAyNy4zLTEyLjggMzguNGwtMzUuMiA0Ni45IDAgMTEyIDQwLjggNjguMWM0LjcgNy44IDcuMiAxNi43IDcuMiAyNS44IDAgMjcuNy0yMi40IDUwLjEtNTAuMSA1MC4xTDUwLjEgNTEyYy0yNy43IDAtNTAuMS0yMi40LTUwLjEtNTAuMSAwLTkuMSAyLjUtMTggNy4yLTI1LjhMNDggMzY4IDQ4IDI1NiAxMi44IDIwOS4xQzQuNSAxOTggMCAxODQuNSAwIDE3MC43TDAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDM1MiAwek00OC4zIDQ2MC44bC0uMyAxLjFjMCAxLjIgMSAyLjEgMi4xIDIuMWwyODMuOCAwYzEuMiAwIDIuMS0xIDIuMS0yLjFsLS4zLTEuMS0zNi41LTYwLjgtMjE0LjQgMC0zNi41IDYwLjh6TTQ4IDE3MC43YzAgMi42IC42IDUuMSAxLjggNy40bDEuNCAyLjIgMCAwIDM1LjIgNDYuOSA5LjYgMTIuOCAwIDExMiAxOTIgMCAwLTExMiA5LjYtMTIuOCAzNS4yLTQ2LjkgMCAwIDEuNC0yLjJjMS4yLTIuMyAxLjgtNC44IDEuOC03LjRsMC0xMjIuNy02NCAwIDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0yNC02NCAwIDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0yNC02NCAwIDAgMTIyLjd6Il0KICAgIH07CiAgICBmYUNpcmNsZVF1ZXN0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1xdWVzdGlvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTA4LCAicXVlc3Rpb24tY2lyY2xlIl0sICJmMDU5IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI1Ni04MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDQ3LjItMzYgNjcuMi01NiA3NC41bDAgMy44YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtOC4xYzAtMjAuNSAxNC44LTM1LjIgMzAuMS00MC4yIDYuNC0yLjEgMTMuMi01LjUgMTguMi0xMC4zIDQuMy00LjIgNy43LTEwIDcuNy0xOS42IDAtMTcuNy0xNC4zLTMyLTMyLTMyek0yMjQgMzY4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYVF1ZXN0aW9uQ2lyY2xlID0gZmFDaXJjbGVRdWVzdGlvbjsKICAgIGZhRmlsZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MTk2LCAxMjg0NTksIDYxNDYyXSwgImYxNWIiLCAiTTE3NiA0OEw2NCA0OGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzg0YzAgOC44IDcuMiAxNiAxNiAxNmwyNTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNDAtODggMGMtMzkuOCAwLTcyLTMyLjItNzItNzJsMC04OHpNMzE2LjEgMTYwTDIyNCA2Ny45IDIyNCAxMzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjguMSAwek0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwxOTcuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDE0MS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6Il0KICAgIH07CiAgICBmYUZhY2VTYWRDcnkgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zYWQtY3J5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTU3LCAic2FkLWNyeSJdLCAiZjViMyIsICJNNDAwIDQwNi4xTDQwMCAyODhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNTIuNmMtMjguNyAxNS02MS40IDIzLjQtOTYgMjMuNHMtNjcuMy04LjUtOTYtMjMuNEwxNjAgMjg4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTE4LjFDNzIuNiAzNjguMiA0OCAzMTUgNDggMjU2IDQ4IDE0MS4xIDE0MS4xIDQ4IDI1NiA0OHMyMDggOTMuMSAyMDggMjA4YzAgNTktMjQuNiAxMTIuMi02NCAxNTAuMXpNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE1MiAxOTZsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMCA5LTIwIDIwLTIwem0xNzIgMjBjMC0xMSA5LTIwIDIwLTIwbDE2IDBjMTEgMCAyMCA5IDIwIDIwczkgMjAgMjAgMjAgMjAtOSAyMC0yMGMwLTMzLjEtMjYuOS02MC02MC02MGwtMTYgMGMtMzMuMSAwLTYwIDI2LjktNjAgNjAgMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjB6TTIwOCAzMzZsMCAzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4bDAtMzJjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6Il0KICAgIH07CiAgICBmYVNhZENyeSA9IGZhRmFjZVNhZENyeTsKICAgIGZhQ2FsZW5kYXJNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1taW51cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjcyIiwgIk0xMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDE2MCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTAgMTEybC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI4OGMwLTguOC03LjItMTYtMTYtMTZsLTI2NCAwem0zMiAxMzZsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFGYWNlVGlyZWQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS10aXJlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU1NSwgInRpcmVkIl0sICJmNWM4IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ni41IDY0LjNDMTk2LjEgMzAyLjEgMjIzLjggMjg4IDI1NiAyODhzNTkuOSAxNC4xIDc5LjUgMzIuM2MxOSAxNy44IDMyLjUgNDEuNyAzMi41IDYzLjcgMCA1LjQtMi43IDEwLjQtNy4yIDEzLjRzLTEwLjIgMy40LTE1LjIgMS4zbC0xNy4yLTcuNWMtMjIuOC0xMC00Ny41LTE1LjEtNzIuNC0xNS4xcy00OS42IDUuMi03Mi40IDE1LjFsLTE3LjIgNy41Yy00LjkgMi4yLTEwLjcgMS43LTE1LjItMS4zcy03LjItOC03LjItMTMuNGMwLTIyIDEzLjUtNDUuOSAzMi41LTYzLjd6TTEyMi42IDE1OS4yYzQuNS02LjggMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMjA4IDEyNS44IDE4MC4zYy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xem0yNjMuNiAyMS4xTDM1MyAyMDggMzg2LjIgMjM1LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjVzMy4xIDE1LjktMy4xIDIxLjF6Il0KICAgIH07CiAgICBmYVRpcmVkID0gZmFGYWNlVGlyZWQ7CiAgICBmYUhhbmRQb2ludFJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnQtcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBhNCIsICJNNDQ4IDEyOGwtMTc3LjYgMGMxIDUuMiAxLjYgMTAuNSAxLjYgMTZsMCAxNiAxNzYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNnpNMjI0IDE0NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMjQgMGMtNjYuMyAwLTEyMCA1My43LTEyMCAxMjBsMCA0OGMwIDUyLjUgMzMuNyA5Ny4xIDgwLjcgMTEzLjQtLjUtMy4xLS43LTYuMi0uNy05LjQgMC0yMCA5LjItMzcuOSAyMy42LTQ5LjctNC45LTktNy42LTE5LjQtNy42LTMwLjMgMC0xNS4xIDUuMy0yOSAxNC00MC04LjgtMTEtMTQtMjQuOS0xNC00MGwwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtODB6TTE5MiA2NGwwIDBjMTggMCAzNC42IDYgNDggMTZsMjA4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRsLTgyIDBjMS4zIDUuMSAyIDEwLjUgMiAxNiAwIDI1LjMtMTQuNyA0Ny4yLTM2IDU3LjYgMi42IDcgNCAxNC41IDQgMjIuNCAwIDIwLTkuMiAzNy45LTIzLjYgNDkuNyA0LjkgOSA3LjYgMTkuNCA3LjYgMzAuMyAwIDM1LjMtMjguNyA2NC02NCA2NGwtODggMEM3NS4yIDQ0OCAwIDM3Mi44IDAgMjgwbDAtNDhDMCAxMzkuMiA3NS4yIDY0IDE2OCA2NGwyNCAwem02NCAzMzZjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsNjQgMHptMTYtMTc2YzAgNS41LS43IDEwLjktMiAxNmwzNCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0zMiAwIDAgMTZ6bS0yNCA2NGwtNDAgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw2NCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0yNCAweiJdCiAgICB9OwogICAgZmFDaXJjbGVVcCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtdXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTQ2NywgImFycm93LWFsdC1jaXJjbGUtdXAiXSwgImYzNWIiLCAiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptMTEuMy0zODcuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBsLTEwNCAxMDRjLTQuNiA0LjYtNS45IDExLjUtMy41IDE3LjRzOC4zIDkuOSAxNC44IDkuOWw3MiAwIDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDE2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xMDQgNzIgMGM2LjUgMCAxMi4zLTMuOSAxNC44LTkuOXMxLjEtMTIuOS0zLjUtMTcuNGwtMTA0LTEwNHoiXQogICAgfTsKICAgIGZhQXJyb3dBbHRDaXJjbGVVcCA9IGZhQ2lyY2xlVXA7CiAgICBmYUhhbmRTY2lzc29ycyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXNjaXNzb3JzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNTciLCAiTS4yIDI3Ni4zYy0xLjItMzUuMyAyNi40LTY1IDYxLjctNjYuMmwzLjMtLjEtOC4yLTEuOEMyMi41IDIwMC41IC43IDE2Ni4zIDguMyAxMzEuOFM1MC4yIDc1LjUgODQuNyA4My4ybDE3MyAzOC4zYzIuMy0yLjkgNC42LTUuNyA3LjEtOC41bDE4LjQtMjAuM0MyOTkuOSA3NC41IDMyMy41IDY0IDM0OC4zIDY0bDEwLjIgMGM1NC4xIDAgMTA0LjEgMjguNyAxMzEuMyA3NS40bDEuNSAyLjZjMTMuNiAyMy4yIDIwLjcgNDkuNyAyMC43IDc2LjZMNTEyIDM0NGMwIDY2LjMtNTMuNyAxMjAtMTIwIDEyMGwtMTA0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMi44IC4yLTUuNiAuNS04LjMtMTkuNC0xMS0zMi41LTMxLjgtMzIuNS01NS43IDAtLjggMC0xLjYgMC0yLjRMNjYuNCAzMzhjLTM1LjMgMS4yLTY1LTI2LjQtNjYuMi02MS43em02My40LTE4LjJjLTguOCAuMy0xNS43IDcuNy0xNS40IDE2LjZzNy43IDE1LjcgMTYuNSAxNS40bDE2MS41LTUuNmM5LjgtLjMgMTguNyA1LjMgMjIuNyAxNC4yczIuMiAxOS4zLTQuNSAyNi40Yy0yLjggMi45LTQuNCA2LjctNC40IDExIDAgOC44IDcuMiAxNiAxNiAxNiA5LjEgMCAxNy40IDUuMSAyMS41IDEzLjNzMy4yIDE3LjktMi4zIDI1LjFjLTIgMi43LTMuMiA2LTMuMiA5LjYgMCA4LjggNy4yIDE2IDE2IDE2bDEwNCAwYzM5LjggMCA3Mi0zMi4yIDcyLTcybDAtMTI1LjRjMC0xOC40LTQuOS0zNi41LTE0LjItNTIuNGwtMS41LTIuNmMtMTguNi0zMi01Mi44LTUxLjYtODkuOC01MS42bC0xMC4yIDBjLTExLjMgMC0yMiA0LjgtMjkuNiAxMy4xbDAgMC0xOC40IDIwLjNjLS42IC42LTEuMSAxLjMtMS43IDEuOWw1NyAxMy4yYzguNiAyIDE0IDEwLjYgMTIgMTkuMnMtMTAuNiAxNC0xOS4yIDEyTDI2Mi44IDE3MS44IDc0LjMgMTMwYy04LjYtMS45LTE3LjIgMy41LTE5LjEgMTIuMnMzLjUgMTcuMiAxMi4yIDE5LjFsMTg3LjUgNDEuNmMxMC4yIDIuMyAxNy44IDEwLjkgMTguNyAyMS40bC4xIDFjLjYgNi42LTEuNSAxMy4xLTUuOCAxOC4xcy0xMC42IDcuOS0xNy4yIDguMkw2My42IDI1OC4xeiJdCiAgICB9OwogICAgZmFHZW0gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZ2VtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTQyXSwgImYzYTUiLCAiTTE2OC41IDcybDg3LjUgOTMgODcuNS05My0xNzUgMHpNMzgzLjkgOTkuMWwtNzIuMyA3Ni45IDEyOSAwLTU2LjYtNzYuOXptNTAgMTI0LjlMNzguMSAyMjQgMjU2IDQyMC4zIDQzMy45IDIyNHpNNzEuNSAxNzZsMTI5IDAtNzIuMy03Ni45LTU2LjYgNzYuOXptNDM0LjMgNDAuMWwtMjMyIDI1NmMtNC41IDUtMTEgNy45LTE3LjggNy45cy0xMy4yLTIuOS0xNy44LTcuOWwtMjMyLTI1NmMtNy43LTguNS04LjMtMjEuMi0xLjUtMzAuNGwxMTItMTUyYzQuNS02LjEgMTEuNy05LjggMTkuMy05LjhsMjQwIDBjNy42IDAgMTQuOCAzLjYgMTkuMyA5LjhsMTEyIDE1MmM2LjggOS4yIDYuMSAyMS45LTEuNSAzMC40eiJdCiAgICB9OwogICAgZmFSZWN0YW5nbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJyZWN0YW5nbGUteG1hcmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjE2NCwgInJlY3RhbmdsZS10aW1lcyIsICJ0aW1lcy1yZWN0YW5nbGUiLCAid2luZG93LWNsb3NlIl0sICJmNDEwIiwgIk02NCAxMTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI1NmMwIDguOCA3LjIgMTYgMTYgMTZsMzg0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjU2YzAtOC44LTcuMi0xNi0xNi0xNkw2NCAxMTJ6TTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6bTMzNC4xIDQ5LjljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTQ0LjEgNDQuMSA0NC4xIDQ0LjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDQuMS00NC4xLTQ0LjEgNDQuMWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0NC4xLTQ0LjEtNDQuMS00NC4xYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNDQuMSA0NC4xIDQ0LjEtNDQuMWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHoiXQogICAgfTsKICAgIGZhUmVjdGFuZ2xlVGltZXMgPSBmYVJlY3RhbmdsZVhtYXJrOwogICAgZmFUaW1lc1JlY3RhbmdsZSA9IGZhUmVjdGFuZ2xlWG1hcms7CiAgICBmYVdpbmRvd0Nsb3NlID0gZmFSZWN0YW5nbGVYbWFyazsKICAgIGZhVHJhc2hDYW4gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAidHJhc2gtY2FuIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjE0NjAsICJ0cmFzaC1hbHQiXSwgImYyZWQiLCAiTTE2Ni4yLTE2Yy0xMy4zIDAtMjUuMyA4LjMtMzAgMjAuOEwxMjAgNDggMjQgNDhDMTAuNyA0OCAwIDU4LjcgMCA3MlMxMC43IDk2IDI0IDk2bDQwMCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC05NiAwLTE2LjItNDMuMkMzMDcuMS03LjcgMjk1LjItMTYgMjgxLjgtMTZMMTY2LjItMTZ6TTMyIDE0NGwwIDMwNGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMwNC00OCAwIDAgMzA0YzAgOC44LTcuMiAxNi0xNiAxNkw5NiA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMwNC00OCAwem0xNjAgNzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE3NnptMTEyIDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE3NnoiXQogICAgfTsKICAgIGZhVHJhc2hBbHQgPSBmYVRyYXNoQ2FuOwogICAgZmFMaWZlUmluZyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJsaWZlLXJpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFjZCIsICJNMzg1LjEgNDE5LjFDMzQ5LjcgNDQ3LjIgMzA0LjggNDY0IDI1NiA0NjRzLTkzLjctMTYuOC0xMjkuMS00NC45bDgwLjQtODAuNGMxNC4zIDguNCAzMSAxMy4zIDQ4LjggMTMuM3MzNC41LTQuOCA0OC44LTEzLjNsODAuNCA4MC40em02OC4xIC4yQzQ4OS45IDM3NC45IDUxMiAzMTguMSA1MTIgMjU2UzQ4OS45IDEzNy4xIDQ1My4yIDkyLjdMNDY1IDgxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMNDE5LjMgNTguOEMzNzQuOSAyMi4xIDMxOC4xIDAgMjU2IDBTMTM3LjEgMjIuMSA5Mi43IDU4LjhMODEgNDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUzM3LjcgNzEuNiA0NyA4MUw1OC44IDkyLjdDMjIuMSAxMzcuMSAwIDE5My45IDAgMjU2UzIyLjEgMzc0LjkgNTguOCA0MTkuM0w0NyA0MzFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwxMS44LTExLjhDMTM3LjEgNDg5LjkgMTkzLjkgNTEyIDI1NiA1MTJzMTE4LjktMjIuMSAxNjMuMy01OC44TDQzMSA0NjVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xMS44LTExLjh6bS0zNC4xLTM0LjFsLTgwLjQtODAuNGM4LjQtMTQuMyAxMy4zLTMxIDEzLjMtNDguOHMtNC44LTM0LjUtMTMuMy00OC44bDgwLjQtODAuNEM0NDcuMiAxNjIuMyA0NjQgMjA3LjIgNDY0IDI1NnMtMTYuOCA5My43LTQ0LjkgMTI5LjF6TTM4NS4xIDkyLjlsLTgwLjQgODAuNGMtMTQuMy04LjQtMzEtMTMuMy00OC44LTEzLjNzLTM0LjUgNC44LTQ4LjggMTMuM0wxMjYuOSA5Mi45QzE2Mi4zIDY0LjggMjA3LjIgNDggMjU2IDQ4czkzLjcgMTYuOCAxMjkuMSA0NC45ek0xNzMuMyAzMDQuOEw5Mi45IDM4NS4xQzY0LjggMzQ5LjcgNDggMzA0LjggNDggMjU2czE2LjgtOTMuNyA0NC45LTEyOS4xbDgwLjQgODAuNGMtOC40IDE0LjMtMTMuMyAzMS0xMy4zIDQ4LjhzNC44IDM0LjUgMTMuMyA0OC44ek0yMDggMjU2YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6Il0KICAgIH07CiAgICBmYUNvcHlyaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjb3B5cmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxNjldLCAiZjFmOSIsICJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMDUuMSAzMDYuOWMtMjguMS0yOC4xLTI4LjEtNzMuNyAwLTEwMS44czczLjctMjguMSAxMDEuOCAwYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWMtNDYuOS00Ni45LTEyMi44LTQ2LjktMTY5LjcgMHMtNDYuOSAxMjIuOCAwIDE2OS43IDEyMi44IDQ2LjkgMTY5LjcgMGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwYy0yOC4xIDI4LjEtNzMuNyAyOC4xLTEwMS44IDB6Il0KICAgIH07CiAgICBmYUNpcmNsZUxlZnQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTg0MCwgImFycm93LWFsdC1jaXJjbGUtbGVmdCJdLCAiZjM1OSIsICJNNDggMjU2YTIwOCAyMDggMCAxIDEgNDE2IDAgMjA4IDIwOCAwIDEgMSAtNDE2IDB6bTQ2NCAwYTI1NiAyNTYgMCAxIDAgLTUxMiAwIDI1NiAyNTYgMCAxIDAgNTEyIDB6TTEyNC43IDI0NC43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmwxMDQgMTA0YzQuNiA0LjYgMTEuNSA1LjkgMTcuNCAzLjVzOS45LTguMyA5LjktMTQuOGwwLTcyIDEwNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTEwNCAwIDAtNzJjMC02LjUtMy45LTEyLjMtOS45LTE0LjhzLTEyLjktMS4xLTE3LjQgMy41bC0xMDQgMTA0eiJdCiAgICB9OwogICAgZmFBcnJvd0FsdENpcmNsZUxlZnQgPSBmYUNpcmNsZUxlZnQ7CiAgICBmYUNhbGVuZGFyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTk3LCAxMjgxOThdLCAiZjEzMyIsICJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MCAxNjAgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0em0wIDExMmwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNDggMzUyIDAgMC00OGMwLTguOC03LjItMTYtMTYtMTZsLTI2NCAwek00OCAyMjRsMCAxOTJjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE5Mi0zNTIgMHoiXQogICAgfTsKICAgIGZhRmFjZUZyb3duT3BlbiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWZyb3duLW9wZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTAsICJmcm93bi1vcGVuIl0sICJmNTdhIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTE4Mi40IDM4Mi41Yy0xMi40IDUuMi0yNi41LTQuMS0yMS4xLTE2LjQgMTYtMzYuNiA1Mi40LTYyLjEgOTQuOC02Mi4xczc4LjggMjUuNiA5NC44IDYyLjFjNS40IDEyLjMtOC43IDIxLjYtMjEuMSAxNi40LTIyLjQtOS41LTQ3LjQtMTQuOC03My43LTE0LjhzLTUxLjMgNS4zLTczLjcgMTQuOHpNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFGcm93bk9wZW4gPSBmYUZhY2VGcm93bk9wZW47CiAgICBmYUNoYXJ0QmFyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNoYXJ0LWJhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJiYXItY2hhcnQiXSwgImYwODAiLCAiTTQ4IDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgNDIuNyAwIDU2TDAgNDAwYzAgNDQuMiAzNS44IDgwIDgwIDgwbDQwOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDgwIDQzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJMNDggNTZ6bTEwNCA3MmwyMDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwxNTIgODBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjR6bTAgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAwem0wIDExMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjcyIDB6Il0KICAgIH07CiAgICBmYUJhckNoYXJ0ID0gZmFDaGFydEJhcjsKICAgIGZhSG91c2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaG91c2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NjgsIDYzNDk4LCA2MzUwMCwgImhvbWUiLCAiaG9tZS1hbHQiLCAiaG9tZS1sZy1hbHQiXSwgImYwMTUiLCAiTTI0MCA2LjFjOS4xLTguMiAyMi45LTguMiAzMiAwbDIzMiAyMDhjOS45IDguOCAxMC43IDI0IDEuOCAzMy45cy0yNCAxMC43LTMzLjkgMS44bC04LTcuMiAwIDIwNS4zYzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yODggMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0yMDUuMy04IDcuMmMtOS45IDguOC0yNSA4LTMzLjktMS44cy04LTI1IDEuOC0zMy45TDI0MCA2LjF6bTE2IDUwLjFMOTYgMTk5LjcgOTYgNDQ4YzAgOC44IDcuMiAxNiAxNiAxNmw0OCAwIDAtMTA0YzAtMzkuOCAzMi4yLTcyIDcyLTcybDQ4IDBjMzkuOCAwIDcyIDMyLjIgNzIgNzJsMCAxMDQgNDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNDguMy0xNjAtMTQzLjR6TTIwOCA0NjRsOTYgMCAwLTEwNGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMDR6Il0KICAgIH07CiAgICBmYUhvbWUgPSBmYUhvdXNlOwogICAgZmFIb21lQWx0ID0gZmFIb3VzZTsKICAgIGZhSG9tZUxnQWx0ID0gZmFIb3VzZTsKICAgIGZhRmFjZUZyb3duID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZnJvd24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5Nzg1LCAiZnJvd24iXSwgImYxMTkiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMzM0LjcgMzg0LjZDMzE5LjcgMzY5IDI5My42IDM1MiAyNTYgMzUycy02My43IDE3LTc4LjcgMzIuNmMtOS4yIDkuNi0yNC40IDkuOS0zMy45IC43cy05LjktMjQuNC0uNy0zMy45YzIyLjEtMjMgNjAtNDcuNCAxMTMuMy00Ny40czkxLjIgMjQuNCAxMTMuMyA0Ny40YzkuMiA5LjYgOC45IDI0LjgtLjcgMzMuOXMtMjQuOCA4LjktMzMuOS0uN3pNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFGcm93biA9IGZhRmFjZUZyb3duOwogICAgZmFVc2VyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInVzZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgxMDAsIDYyMTQ0LCA2MjQ3MCwgInVzZXItYWx0IiwgInVzZXItbGFyZ2UiXSwgImYwMDciLCAiTTE0NCAxMjhhODAgODAgMCAxIDEgMTYwIDAgODAgODAgMCAxIDEgLTE2MCAwem0yMDggMGExMjggMTI4IDAgMSAwIC0yNTYgMCAxMjggMTI4IDAgMSAwIDI1NiAwek00OCA0ODBjMC03MC43IDU3LjMtMTI4IDEyOC0xMjhsOTYgMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGwwIDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLThjMC05Ny4yLTc4LjgtMTc2LTE3Ni0xNzZsLTk2IDBDNzguOCAzMDQgMCAzODIuOCAwIDQ4MGwwIDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTh6Il0KICAgIH07CiAgICBmYVVzZXJBbHQgPSBmYVVzZXI7CiAgICBmYVVzZXJMYXJnZSA9IGZhVXNlcjsKICAgIGZhU25vd2ZsYWtlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNub3dmbGFrZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEwMDUyLCAxMDA1NF0sICJmMmRjIiwgIk0yODAuMS04YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNzguMS0yMy0yM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw1NyA1NyAwIDc2LjUtNjYuMi0zOC4yLTIwLjktNzcuOGMtMy40LTEyLjgtMTYuNi0yMC40LTI5LjQtMTdTOTUuMiA5OCA5OC43IDExMC44bDguNCAzMS41LTY3LjYtMzlDMjggOTYuNiAxMy4zIDEwMC41IDYuNyAxMTJTNCAxMzguMiAxNS41IDE0NC44bDY3LjYgMzktMzEuNSA4LjRjLTEyLjggMy40LTIwLjQgMTYuNi0xNyAyOS40czE2LjYgMjAuNCAyOS40IDE3bDc3LjgtMjAuOSA2Ni4yIDM4LjItNjYuMiAzOC4yLTc3LjgtMjAuOWMtMTIuOC0zLjQtMjYgNC4yLTI5LjQgMTdzNC4yIDI2IDE3IDI5LjRsMzEuNSA4LjQtNjcuNiAzOUM0IDM3My44IC4xIDM4OC41IDYuNyA0MDBzMjEuMyAxNS40IDMyLjggOC44bDY3LjYtMzktOC40IDMxLjVjLTMuNCAxMi44IDQuMiAyNiAxNyAyOS40czI2LTQuMiAyOS40LTE3bDIwLjktNzcuOCA2Ni4yLTM4LjIgMCA3Ni41LTU3IDU3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMjMtMjMgMCA3OC4xYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03OC4xIDIzIDIzYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTctNTcgMC03Ni41IDY2LjIgMzguMiAyMC45IDc3LjhjMy40IDEyLjggMTYuNiAyMC40IDI5LjQgMTdzMjAuNC0xNi42IDE3LTI5LjRsLTguNC0zMS41IDY3LjYgMzljMTEuNSA2LjYgMjYuMiAyLjcgMzIuOC04LjhzMi43LTI2LjItOC44LTMyLjhsLTY3LjYtMzkgMzEuNS04LjRjMTIuOC0zLjQgMjAuNC0xNi42IDE3LTI5LjRzLTE2LjYtMjAuNC0yOS40LTE3bC03Ny44IDIwLjktNjYuMi0zOC4yIDY2LjItMzguMiA3Ny44IDIwLjljMTIuOCAzLjQgMjYtNC4yIDI5LjQtMTdzLTQuMi0yNi0xNy0yOS40bC0zMS41LTguNCA2Ny42LTM5YzExLjUtNi42IDE1LjQtMjEuMyA4LjgtMzIuOHMtMjEuMy0xNS40LTMyLjgtOC44bC02Ny42IDM5IDguNC0zMS41YzMuNC0xMi44LTQuMi0yNi0xNy0yOS40cy0yNiA0LjItMjkuNCAxN2wtMjAuOSA3Ny44LTY2LjIgMzguMiAwLTc2LjUgNTctNTdjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMjMgMjMgMC03OC4xeiJdCiAgICB9OwogICAgZmFCb29rbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJib29rbWFyayIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODI3OCwgNjE1OTFdLCAiZjAyZSIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA0MTcuMWMwIDI1LjYtMjguNSA0MC44LTQ5LjggMjYuNkwxOTIgNDEyLjggNDkuOCA1MDcuN0MyOC41IDUyMS45IDAgNTA2LjYgMCA0ODEuMUwwIDY0ek02NCA0OGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzg3LjIgMTE3LjQtNzguMmMxNi4xLTEwLjcgMzcuMS0xMC43IDUzLjIgMEwzMzYgNDUxLjIgMzM2IDY0YzAtOC44LTcuMi0xNi0xNi0xNkw2NCA0OHoiXQogICAgfTsKICAgIGZhU3F1YXJlQ2FyZXRMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1jYXJldC1sZWZ0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhcmV0LXNxdWFyZS1sZWZ0Il0sICJmMTkxIiwgIk00OCA0MTZjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMHptMTYgNjRjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwem02NC0yMjRjMC02LjcgMi44LTEzIDcuNy0xNy42bDExMi0xMDRjNy02LjUgMTcuMi04LjIgMjUuOS00LjRTMjg4IDE0Mi41IDI4OCAxNTJsMCAyMDhjMCA5LjUtNS43IDE4LjItMTQuNCAyMnMtMTguOSAyLjEtMjUuOS00LjRsLTExMi0xMDRjLTQuOS00LjUtNy43LTEwLjktNy43LTE3LjZ6Il0KICAgIH07CiAgICBmYUNhcmV0U3F1YXJlTGVmdCA9IGZhU3F1YXJlQ2FyZXRMZWZ0OwogICAgZmFIYW5kc2hha2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZHNoYWtlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI5MzA5LCA2MjY2MiwgImhhbmRzaGFrZS1hbHQiLCAiaGFuZHNoYWtlLXNpbXBsZSJdLCAiZjJiNSIsICJNNTk4LjEgNzUuNGMxMC43LTcuOCAxMy4xLTIyLjggNS4zLTMzLjVzLTIyLjgtMTMuMS0zMy41LTUuM2wtNzQuNSA1NC4yLTkuOS02LjZDNDY1LjggNzEgNDQyLjYgNjQgNDE4LjkgNjRsLTU5LjIgMC0uNCAwLTE0My42IDBjLTI2LjcgMC01Mi41IDguOS03My40IDI1LjFMNzAuMSAzNi42Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM3MtNS40IDI1LjcgNS4zIDMzLjVsODggNjRjOS42IDYuOSAyMi43IDUuOSAzMS4xLTIuNGwzLjktMy45YzEzLjUtMTMuNSAzMS44LTIxLjEgNTAuOS0yMS4xbDQ2LjMgMC05MS43IDkxLjdjLTE1LjYgMTUuNi0xNS42IDQwLjkgMCA1Ni42bC44IC44QzIxOCAzMDggMjk0IDMwOCAzNDAuOSAyNjEuMWwyNy4xLTI3LjEgOTcuOCA5Ny44YzE1LjYgMTUuNiAxNS42IDQwLjkgMCA1Ni42bC05LjggOS44LTMxLTMxYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDI4IDI4Yy0xNy41IDEwLjQtMzcuMiAxNi43LTU3LjYgMTguNUwzMTMgMzk5Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDE1IDE1LTMuOCAwYy0zNi4xIDAtNzAuNy0xNC4zLTk2LjItMzkuOEw2NSAyNzljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlMMTYwLjIgNDQyLjFjMzQuNSAzNC41IDgxLjMgNTMuOSAxMzAuMSA1My45bDUxLjggMCAxIDEgMS0xIDUuNyAwYzQ4LjggMCA5NS42LTE5LjQgMTMwLjEtNTMuOWwxOS45LTE5LjljMS4yLTEuMiAyLjMtMi4zIDMuNC0zLjUgLjctLjUgMS4zLTEuMSAxLjktMS43TDYwOSAzMTNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTMuOCA1My44Yy00LjItMTIuOC0xMS4zLTI0LjktMjEuNS0zNS4xTDM4NSAxODNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC00NC4xIDQ0LjFjLTI2LjUgMjYuNS02OC41IDI4LTk2LjcgNC42bDk4LjctOTguN2MxMy40LTEzLjQgMzEuNi0yMSA1MC42LTIxLjFsOC41IDAgLjIgMCA1MC44IDBjMTQuMiAwIDI4LjEgNC4yIDM5LjkgMTIuMUw0ODIuNyAxNDBjOC40IDUuNiAxOS4zIDUuMyAyNy40LS42bDg4LTY0eiJdCiAgICB9OwogICAgZmFIYW5kc2hha2VBbHQgPSBmYUhhbmRzaGFrZTsKICAgIGZhSGFuZHNoYWtlU2ltcGxlID0gZmFIYW5kc2hha2U7CiAgICBmYUZhY2VTbWlsZVdpbmsgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zbWlsZS13aW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTIxLCAic21pbGUtd2luayJdLCAiZjRkYSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xNzcuMyA2My40QzE5Mi4zIDMzNSAyMTguNCAzNTIgMjU2IDM1MnM2My43LTE3IDc4LjctMzIuNmM5LjItOS42IDI0LjQtOS45IDMzLjktLjdzOS45IDI0LjQgLjcgMzMuOWMtMjIuMSAyMy02MCA0Ny40LTExMy4zIDQ3LjRzLTkxLjItMjQuNC0xMTMuMy00Ny40Yy05LjItOS42LTguOS0yNC44IC43LTMzLjlzMjQuOC04LjkgMzMuOSAuN3pNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNjQgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBjMC0zMy4xIDI2LjktNjAgNjAtNjBsMTYgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MCAwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjAtOS0yMC0yMC0yMGwtMTYgMGMtMTEgMC0yMCA5LTIwIDIweiJdCiAgICB9OwogICAgZmFTbWlsZVdpbmsgPSBmYUZhY2VTbWlsZVdpbms7CiAgICBmYUZhY2VHcmluU3F1aW50VGVhcnMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXNxdWludC10ZWFycyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTMxNSwgImdyaW4tc3F1aW50LXRlYXJzIl0sICJmNTg2IiwgIk00MDMuMSA0MDMuMWM2Ny4yLTY3LjIgNzguOC0xNjguOSAzNC45LTI0OGwzNi43LTUuMmM0LjUtLjYgOC44LTEuNiAxMy4xLTIuOCA0NC42IDk0LjkgMjcuNyAyMTEuNS01MC43IDI5MHMtMTk1LjEgOTUuMy0yOTAgNTAuN2MxLjItNC4yIDIuMS04LjYgMi44LTEzLjFsNS4yLTM2LjdjNzkuMSA0My45IDE4MC44IDMyLjMgMjQ4LTM0Ljl6TTc1IDc1Yzc4LjQtNzguNCAxOTUuMS05NS4zIDI5MC01MC43LTEuMiA0LjItMi4xIDguNi0yLjggMTMuMWwtNS4yIDM2LjdjLTc5LjEtNDMuOS0xODAuOC0zMi4zLTI0OCAzNC45cy03OC44IDE2OC45LTM0LjkgMjQ4bC0zNi43IDUuMmMtNC41IC42LTguOCAxLjYtMTMuMSAyLjgtNDQuNi05NC45LTI3LjctMjExLjUgNTAuNy0yOTB6TTM3MC45IDIwNi41YzUuOC0xMC45IDIxLjEtMTIuNCAyNi40LTEuMyAyNS42IDUzLjUgMTYuMiAxMTkuNi0yOC4yIDE2My45LTQ0LjMgNDQuMy0xMTAuMyA1My43LTE2My44IDI4LjItMTEuMS01LjMtOS42LTIwLjYgMS4zLTI2LjQgMzItMTcuMSA2NC4yLTQwLjggOTMuOC03MC40IDI5LjctMjkuNyA1My40LTYxLjkgNzAuNS05NHpNOTMuMyAyODEuOWMtMS43LTggMi45LTE1LjkgMTAuNi0xOC40bDg0LjYtMjhjNS43LTEuOSAxMi4xLS40IDE2LjMgMy45czUuOCAxMC42IDMuOSAxNi4zbC0yOCA4NC42Yy0yLjYgNy43LTEwLjUgMTIuMy0xOC40IDEwLjZzLTEzLjQtOS0xMi43LTE3LjFsMy45LTQzLjEtNDMuMSAzLjljLTguMSAuNy0xNS41LTQuNy0xNy4xLTEyLjd6TTI5NC42IDExMC40bC0zLjkgNDMuMSA0My4xLTMuOWM4LjEtLjcgMTUuNSA0LjcgMTcuMSAxMi43cy0yLjkgMTUuOS0xMC42IDE4LjRsLTg0LjYgMjhjLTUuNyAxLjktMTIuMSAuNC0xNi4zLTMuOXMtNS44LTEwLjYtMy45LTE2LjNsMjgtODQuNmMyLjYtNy43IDEwLjUtMTIuMyAxOC40LTEwLjZzMTMuNCA5IDEyLjcgMTcuMXpNNTEyIDUxLjRjMCAyNS42LTE4LjggNDcuMy00NC4xIDUwLjlMNDIxLjEgMTA5Yy0xMC42IDEuNS0xOS42LTcuNS0xOC4xLTE4LjFsNi43LTQ2LjdDNDEzLjMgMTguOCA0MzUgMCA0NjAuNiAwIDQ4OSAwIDUxMiAyMyA1MTIgNTEuNHpNNDQuMSA0MDkuN0w5MC45IDQwM2MxMC42LTEuNSAxOS42IDcuNSAxOC4xIDE4LjFsLTYuNyA0Ni43Qzk4LjcgNDkzLjIgNzcgNTEyIDUxLjQgNTEyIDIzIDUxMiAwIDQ4OSAwIDQ2MC42IDAgNDM1IDE4LjggNDEzLjMgNDQuMSA0MDkuN3oiXQogICAgfTsKICAgIGZhR3JpblNxdWludFRlYXJzID0gZmFGYWNlR3JpblNxdWludFRlYXJzOwogICAgZmFGaWxlQXVkaW8gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1hdWRpbyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM3IiwgIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwek0yMjEuOSAyNjcuNmMtNC43IDEwLS4zIDIxLjkgOS43IDI2LjYgMTkuMiA4LjkgMzIuNCAyOC4zIDMyLjQgNTAuOHMtMTMuMiA0MS45LTMyLjQgNTAuOGMtMTAgNC43LTE0LjQgMTYuNi05LjcgMjYuNnMxNi42IDE0LjQgMjYuNiA5LjdDMjgxLjIgNDE2LjggMzA0IDM4My42IDMwNCAzNDVzLTIyLjgtNzEuOS01NS42LTg3LjFjLTEwLTQuNy0yMS45LS4zLTI2LjYgOS43ek0xMDQgMzA1Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDE2IDAgMjcuMiAzNGMzIDMuOCA3LjYgNiAxMi41IDZsLjMgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xMjhjMC04LjgtNy4yLTE2LTE2LTE2bC0uMyAwYy00LjkgMC05LjUgMi4yLTEyLjUgNmwtMjcuMiAzNC0xNiAwek0yMjMuMyAzNzNjOS45LTUuNCAxNi43LTE2IDE2LjctMjguMXMtNi43LTIyLjctMTYuNy0yOC4xYy03LjgtNC4yLTE1LjMgMy4zLTE1LjMgMTIuMWwwIDMyYzAgOC44IDcuNiAxNi4zIDE1LjMgMTIuMXoiXQogICAgfTsKICAgIGZhQ2FsZW5kYXJYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci14bWFyayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYWxlbmRhci10aW1lcyJdLCAiZjI3MyIsICJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MCAxNjAgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0em0wIDExMmwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjg4YzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yODhjMC04LjgtNy4yLTE2LTE2LTE2bC0yNjQgMHptMTcxLjkgOTIuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtMzMuOSAzMy45IDMzLjkgMzMuOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC0zMy45LTMzLjktMzMuOSAzMy45Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMzLjktMzMuOS0zMy45LTMzLjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzMy45IDMzLjkgMzMuOS0zMy45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAweiJdCiAgICB9OwogICAgZmFDYWxlbmRhclRpbWVzID0gZmFDYWxlbmRhclhtYXJrOwogICAgZmFDaXJjbGVEb3duID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1kb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE0NjYsICJhcnJvdy1hbHQtY2lyY2xlLWRvd24iXSwgImYzNTgiLCAiTTI1NiA0NjRhMjA4IDIwOCAwIDEgMSAwLTQxNiAyMDggMjA4IDAgMSAxIDAgNDE2ek0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyIDI1NiAyNTYgMCAxIDAgMC01MTJ6TTI0NC43IDM4Ny4zYzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwbDEwNC0xMDRjNC42LTQuNiA1LjktMTEuNSAzLjUtMTcuNFMzNjYuNSAyNTYgMzYwIDI1NmwtNzIgMCAwLTEwNGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMDQtNzIgMGMtNi41IDAtMTIuMyAzLjktMTQuOCA5LjlzLTEuMSAxMi45IDMuNSAxNy40bDEwNCAxMDR6Il0KICAgIH07CiAgICBmYUFycm93QWx0Q2lyY2xlRG93biA9IGZhQ2lyY2xlRG93bjsKICAgIGZhRmlsZUxpbmVzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZpbGUtbGluZXMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjg0NDEsIDEyODQ2MiwgNjE2ODYsICJmaWxlLWFsdCIsICJmaWxlLXRleHQiXSwgImYxNWMiLCAiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6bTU2IDI1NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFGaWxlQWx0ID0gZmFGaWxlTGluZXM7CiAgICBmYUZpbGVUZXh0ID0gZmFGaWxlTGluZXM7CiAgICBmYUNvbW1lbnRzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNvbW1lbnRzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NDkwLCA2MTY3MF0sICJmMDg2IiwgIk03Ni4yIDI1OC43YzYuMS0xNS4yIDQtMzIuNi01LjYtNDUuOS0xNC41LTIwLjEtMjIuNi00My43LTIyLjYtNjguOCAwLTY2LjggNjAuNS0xMjggMTQ0LTEyOHMxNDQgNjEuMiAxNDQgMTI4LTYwLjUgMTI4LTE0NCAxMjhjLTE1LjkgMC0zMS4xLTIuMy00NS4zLTYuNS0xMC4zLTMuMS0yMS40LTIuNS0zMS40IDEuNWwtNTAuNCAyMC4yIDExLjQtMjguNXpNMCAxNDRjMCAzNS44IDExLjYgNjkuMSAzMS43IDk2LjhMMS45IDMxNS4yYy0xLjMgMy4yLTEuOSA2LjYtMS45IDEwIDAgMTQuOCAxMiAyNi44IDI2LjggMjYuOCAzLjQgMCA2LjgtLjcgMTAtMS45bDk2LjMtMzguNWMxOC42IDUuNSAzOC40IDguNCA1OC45IDguNCAxMDYgMCAxOTItNzguOCAxOTItMTc2UzI5OC0zMiAxOTItMzIgMCA0Ni44IDAgMTQ0ek0zODQgNTEyYzIwLjYgMCA0MC4zLTMgNTguOS04LjRsOTYuMyAzOC41YzMuMiAxLjMgNi42IDEuOSAxMCAxLjkgMTQuOCAwIDI2LjgtMTIgMjYuOC0yNi44IDAtMy40LS43LTYuOC0xLjktMTBsLTI5LjctNzQuNGMyMC0yNy44IDMxLjctNjEuMSAzMS43LTk2LjggMC04Mi40LTYxLjctMTUxLjUtMTQ1LTE3MC43LTEuNiAxNi4zLTUuMSAzMS45LTEwLjEgNDYuOSA2My45IDE0LjggMTA3LjIgNjcuMyAxMDcuMiAxMjMuOSAwIDI1LjEtOC4xIDQ4LjctMjIuNiA2OC44LTkuNiAxMy4zLTExLjcgMzAuNi01LjYgNDUuOWwxMS40IDI4LjUtNTAuNC0yMC4yYy0xMC00LTIxLjEtNC41LTMxLjQtMS41LTE0LjIgNC4yLTI5LjQgNi41LTQ1LjMgNi41LTcyLjIgMC0xMjcuMS00NS43LTE0MC43LTEwMS4yLTE1LjYgMy4yLTMxLjcgNS00OC4xIDUuMiAxNi40IDgxLjkgOTQuNyAxNDQgMTg4LjggMTQ0eiJdCiAgICB9OwogICAgZmFDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTUzMywgImNoZWNrLWNpcmNsZSJdLCAiZjA1OCIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAxIDAtNTEyIDI1NiAyNTYgMCAxIDEgMCA1MTJ6bTAtNDY0YTIwOCAyMDggMCAxIDAgMCA0MTYgMjA4IDIwOCAwIDEgMCAwLTQxNnptNzAuNyAxMjEuOWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjMgMTAuNyA3LjggMTMuMSAyMi44IDUuMyAzMy41TDI0My40IDM2Ni4xYy00LjEgNS43LTEwLjUgOS4zLTE3LjUgOS44LTcgLjUtMTMuOS0yLTE4LjgtNi45bC01NS45LTU1LjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzNiAzNiAxMDUuNi0xNDUuMnoiXQogICAgfTsKICAgIGZhQ2hlY2tDaXJjbGUgPSBmYUNpcmNsZUNoZWNrOwogICAgZmFNb29uID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIm1vb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3NjksIDkyMTRdLCAiZjE4NiIsICJNMjM5LjMgNDguN2MtMTA3LjEgOC41LTE5MS4zIDk4LjEtMTkxLjMgMjA3LjMgMCAxMTQuOSA5My4xIDIwOCAyMDggMjA4IDMzLjMgMCA2NC43LTcuOCA5Mi42LTIxLjctMTAzLjQtMjMuNC0xODAuNi0xMTUuOC0xODAuNi0yMjYuMyAwLTY1LjggMjcuNC0xMjUuMSA3MS4zLTE2Ny4zek0wIDI1NmMwLTE0MS40IDExNC42LTI1NiAyNTYtMjU2IDE5LjQgMCAzOC40IDIuMiA1Ni43IDYuMyA5LjkgMi4yIDE3LjMgMTAuNSAxOC41IDIwLjVzLTQgMTkuOC0xMy4xIDI0LjRjLTYwLjYgMzAuMi0xMDIuMSA5Mi43LTEwMi4xIDE2NC44IDAgMTAxLjYgODIuNCAxODQgMTg0IDE4NCA1IDAgOS45LS4yIDE0LjgtLjYgMTAuMS0uOCAxOS42IDQuOCAyMy44IDE0LjFzMiAyMC4xLTUuMyAyNy4xQzM4Ny4zIDQ4NC44IDMyNC44IDUxMiAyNTYgNTEyIDExNC42IDUxMiAwIDM5Ny40IDAgMjU2eiJdCiAgICB9OwogICAgZmFDbG9zZWRDYXB0aW9uaW5nID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNsb3NlZC1jYXB0aW9uaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyMGEiLCAiTTQ0OCAxMTJjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjU2YzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0MDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI1NmMwLTguOCA3LjItMTYgMTYtMTZsMzg0IDB6TTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0em04OCAxNDRsMzIgMGM0LjQgMCA4IDMuNiA4IDggMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTMwLjktMjUuMS01Ni01Ni01NmwtMzIgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4MGMwIDMwLjkgMjUuMSA1NiA1NiA1NmwzMiAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2IDAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgNC40LTMuNiA4LTggOGwtMzIgMGMtNC40IDAtOC0zLjYtOC04bDAtODBjMC00LjQgMy42LTggOC04em0xNjggOGMwLTQuNCAzLjYtOCA4LThsMzIgMGM0LjQgMCA4IDMuNiA4IDggMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTMwLjktMjUuMS01Ni01Ni01NmwtMzIgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4MGMwIDMwLjkgMjUuMSA1NiA1NiA1NmwzMiAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2IDAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgNC40LTMuNiA4LTggOGwtMzIgMGMtNC40IDAtOC0zLjYtOC04bDAtODB6Il0KICAgIH07CiAgICBmYUltYWdlcyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJpbWFnZXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjMwMiIsICJNNDgwIDgwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDI1NmMwIDguOC03LjIgMTYtMTYgMTZsLTMyMCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDMyMCAwek0xNjAgMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE2MCAzMnptODAgMTEyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTE0MC43IDMuOGMtNC4zLTcuMy0xMi4yLTExLjgtMjAuNy0xMS44cy0xNi40IDQuNS0yMC43IDExLjhsLTQ2LjUgNzktMTcuMi0yNC42Yy00LjUtNi40LTExLjgtMTAuMi0xOS43LTEwLjJzLTE1LjIgMy44LTE5LjcgMTAuMmwtNTYgODBjLTUuMSA3LjMtNS44IDE2LjktMS42IDI0LjhTMTkxLjEgMzIwIDIwMCAzMjBsMjQwIDBjOC42IDAgMTYuNi00LjYgMjAuOC0xMi4xczQuMi0xNi43LS4xLTI0LjFsLTgwLTEzNnpNNDggMTUyYzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMTM4LjcgMCAxNTJMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzYwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZsMC0yOTZ6Il0KICAgIH07CiAgICBmYUNpcmNsZVJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxODM4LCAiYXJyb3ctYWx0LWNpcmNsZS1yaWdodCJdLCAiZjM1YSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAxIC00MTYgMCAyMDggMjA4IDAgMSAxIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAwIDUxMiAwIDI1NiAyNTYgMCAxIDAgLTUxMiAwem0zODcuMyAxMS4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC0xMDQtMTA0Yy00LjYtNC42LTExLjUtNS45LTE3LjQtMy41UzI1NiAxNDUuNSAyNTYgMTUybDAgNzItMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTA0IDAgMCA3MmMwIDYuNSAzLjkgMTIuMyA5LjkgMTQuOHMxMi45IDEuMSAxNy40LTMuNWwxMDQtMTA0eiJdCiAgICB9OwogICAgZmFBcnJvd0FsdENpcmNsZVJpZ2h0ID0gZmFDaXJjbGVSaWdodDsKICAgIGZhSWRDYXJkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImlkLWNhcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MjE0NywgImRyaXZlcnMtbGljZW5zZSJdLCAiZjJjMiIsICJNNDggNDE2bDAtMjU2IDQ4MCAwIDAgMjU2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTkyIDBjMC00NC4yLTM1LjgtODAtODAtODBsLTY0IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwbC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZ6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIwOCAzMTJhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTM3NiAyMDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAweiJdCiAgICB9OwogICAgZmFEcml2ZXJzTGljZW5zZSA9IGZhSWRDYXJkOwogICAgZmFDaXJjbGVQbGF5ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1wbGF5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE0NjksICJwbGF5LWNpcmNsZSJdLCAiZjE0NCIsICJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMTIuNSAxNDcuNWMtNy40LTQuNS0xNi43LTQuNy0yNC4zLS41UzE3NiAxNTkuMyAxNzYgMTY4bDAgMTc2YzAgOC43IDQuNyAxNi43IDEyLjMgMjAuOXMxNi44IDQuMSAyNC4zLS41bDE0NC04OGM3LjEtNC40IDExLjUtMTIuMSAxMS41LTIwLjVzLTQuNC0xNi4xLTExLjUtMjAuNWwtMTQ0LTg4ek0yOTggMjU2bC03NCA0NS4yIDAtOTAuNCA3NCA0NS4yeiJdCiAgICB9OwogICAgZmFQbGF5Q2lyY2xlID0gZmFDaXJjbGVQbGF5OwogICAgZmFGYWNlTGF1Z2hCZWFtID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtbGF1Z2gtYmVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUxMywgImxhdWdoLWJlYW0iXSwgImY1OWEiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTE4LjMgNTguMmMtNC4yLTEzLjcgNy4xLTI2LjIgMjEuNC0yNi4ybDIzMi42IDBjMTQuMyAwIDI1LjYgMTIuNSAyMS40IDI2LjItMTggNTguOS03Mi45IDEwMS44LTEzNy43IDEwMS44UzEzNi4zIDM3My4xIDExOC4zIDMxNC4yek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXQogICAgfTsKICAgIGZhTGF1Z2hCZWFtID0gZmFGYWNlTGF1Z2hCZWFtOwogICAgZmFBZGRyZXNzQm9vayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJhZGRyZXNzLWJvb2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjEzOCwgImNvbnRhY3QtYm9vayJdLCAiZjJiOSIsICJNMzg0IDQ4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDM4NGMwIDguOC03LjIgMTYtMTYgMTZMOTYgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMODAgNjRjMC04LjggNy4yLTE2IDE2LTE2bDI4OCAwek05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI4OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDB6TTI0MCAyNDhhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6bS0zMiA0MGMtNDQuMiAwLTgwIDM1LjgtODAgODAgMCA4LjggNy4yIDE2IDE2IDE2bDE5MiAwYzguOCAwIDE2LTcuMiAxNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MGwtNjQgMHpNNTEyIDgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0ek00OTYgMTkyYy04LjggMC0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2em0xNiAxNDRjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjR6Il0KICAgIH07CiAgICBmYUNvbnRhY3RCb29rID0gZmFBZGRyZXNzQm9vazsKICAgIGZhSG91cmdsYXNzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhvdXJnbGFzcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzkyMDMsIDYyMDMyLCAiaG91cmdsYXNzLWVtcHR5Il0sICJmMjU0IiwgIk0yNCAwQzEwLjcgMCAwIDEwLjcgMCAyNFMxMC43IDQ4IDI0IDQ4bDggMCAwIDE5YzAgNDAuMyAxNiA3OSA0NC41IDEwNy41bDgxLjUgODEuNS04MS41IDgxLjVDNDggMzY2IDMyIDQwNC43IDMyIDQ0NWwwIDE5LTggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtOCAwIDAtMTljMC00MC4zLTE2LTc5LTQ0LjUtMTA3LjVsLTgxLjUtODEuNSA4MS41LTgxLjVDMzM2IDE0NiAzNTIgMTA3LjMgMzUyIDY3bDAtMTkgOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0UzM3My4zIDAgMzYwIDBMMjQgMHpNMTkyIDI4OS45bDgxLjUgODEuNUMyOTMgMzkxIDMwNCA0MTcuNCAzMDQgNDQ1bDAgMTktMjI0IDAgMC0xOWMwLTI3LjYgMTEtNTQgMzAuNS03My41TDE5MiAyODkuOXptMC02Ny45bC04MS41LTgxLjVDOTEgMTIxIDgwIDk0LjYgODAgNjdsMC0xOSAyMjQgMCAwIDE5YzAgMjcuNi0xMSA1NC0zMC41IDczLjVMMTkyIDIyMi4xeiJdCiAgICB9OwogICAgZmFIb3VyZ2xhc3NFbXB0eSA9IGZhSG91cmdsYXNzOwogICAgZmFIZWFkcGhvbmVzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhlYWRwaG9uZXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5MTEsIDYyODYzLCAiaGVhZHBob25lcy1hbHQiLCAiaGVhZHBob25lcy1zaW1wbGUiXSwgImYwMjUiLCAiTTQ4IDIyNGMwLTk3LjIgNzguOC0xNzYgMTc2LTE3NnMxNzYgNzguOCAxNzYgMTc2bDAgNDQuOGMtMTQuMS04LjItMzAuNS0xMi44LTQ4LTEyLjhsLTE2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTI4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDE2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTE2MEM0NDggMTAwLjMgMzQ3LjcgMCAyMjQgMFMwIDEwMC4zIDAgMjI0TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsMTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTEyOGMwLTI2LjUtMjEuNS00OC00OC00OGwtMTYgMGMtMTcuNSAwLTMzLjkgNC43LTQ4IDEyLjhMNDggMjI0em0wIDEyOGMwLTI2LjUgMjEuNS00OCA0OC00OGwxNiAwIDAgMTI4LTE2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMzJ6bTM1MiAwbDAgMzJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2IDAgMC0xMjggMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OHoiXQogICAgfTsKICAgIGZhSGVhZHBob25lc0FsdCA9IGZhSGVhZHBob25lczsKICAgIGZhSGVhZHBob25lc1NpbXBsZSA9IGZhSGVhZHBob25lczsKICAgIGZhRmlsZVBvd2VycG9pbnQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1wb3dlcnBvaW50IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzQiLCAiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6bTg4IDI1NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMjhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2IDI4IDBjMzcuNiAwIDY4LTMwLjQgNjgtNjhzLTMwLjQtNjgtNjgtNjhsLTUyIDB6bTUyIDg4bC0yOCAwIDAtNDAgMjggMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjB6Il0KICAgIH07CiAgICBmYVdpbmRvd01heGltaXplID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIndpbmRvdy1tYXhpbWl6ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQ3MF0sICJmMmQwIiwgIk00OCAyMjRsMCAxNjBjMCA4LjggNy4yIDE2IDE2IDE2bDM4NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE2MC00MTYgMHpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHoiXQogICAgfTsKICAgIGZhQ29tbWVudERvdHMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudC1kb3RzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTcyLCA2MjA3NSwgImNvbW1lbnRpbmciXSwgImY0YWQiLCAiTTAgMjQwYzAgNTQuNCAxOS4zIDEwNC42IDUxLjkgMTQ0LjlMMy4xIDQ3NC4zYy0yIDMuNy0zLjEgNy45LTMuMSAxMi4yIDAgMTQuMSAxMS40IDI1LjUgMjUuNSAyNS41IDQgMCA3LjgtLjYgMTEuNS0yLjFMMTUzLjQgNDYwYzMxLjQgMTIuOSA2Ni4xIDIwIDEwMi42IDIwIDE0MS40IDAgMjU2LTEwNy41IDI1Ni0yNDBTMzk3LjQgMCAyNTYgMCAwIDEwNy41IDAgMjQwek05NCA0MDcuOWM5LjMtMTcuMSA3LjQtMzguMS00LjgtNTMuMi0yNi4xLTMyLjMtNDEuMi03MS45LTQxLjItMTE0LjcgMC0xMDMuMiA5MC4yLTE5MiAyMDgtMTkyczIwOCA4OC44IDIwOCAxOTItOTAuMiAxOTItMjA4IDE5MmMtMzAuMiAwLTU4LjctNS45LTg0LjMtMTYuNC0xMS45LTQuOS0yNS4zLTQuOC0zNy4xIC4zTDc2IDQ0MC45IDk0IDQwNy45ek0xNDQgMjcyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMTQ0LTMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTgwIDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQ29tbWVudGluZyA9IGZhQ29tbWVudERvdHM7CiAgICBmYUZhY2VHcmluVG9uZ3VlV2luayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tdG9uZ3VlLXdpbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDAsICJncmluLXRvbmd1ZS13aW5rIl0sICJmNThiIiwgIk0zNjYuOSA0MzJjLjgtNS4yIDEuMS0xMC42IDEuMS0xNmwwLTUzLjVjMTAuMi0xMi42IDE4LjMtMjYuOSAyMy44LTQyLjUgNC4xLTExLjYtNy44LTIxLjQtMTkuNi0xNy44LTM0LjggMTAuNi03NC4zIDE2LjYtMTE2LjMgMTYuNi00MS45IDAtODEuNC02LTExNi4xLTE2LjUtMTEuOC0zLjYtMjMuNyA2LjEtMTkuNiAxNy44IDUuNSAxNS41IDEzLjYgMjkuOSAyMy44IDQyLjRsMCA1My41YzAgNS40IC40IDEwLjggMS4xIDE2LTU4LjQtMzYuOC05Ny4xLTEwMS45LTk3LjEtMTc2IDAtMTE0LjkgOTMuMS0yMDggMjA4LTIwOHMyMDggOTMuMSAyMDggMjA4YzAgNzQuMS0zOC44IDEzOS4yLTk3LjEgMTc2em0tMzguOCA2OS43QzQzNC40IDQ3MC42IDUxMiAzNzIuMyA1MTIgMjU2IDUxMiAxMTQuNiAzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZDMCAzNzIuMyA3Ny42IDQ3MC42IDE4My45IDUwMS43IDIwMy40IDUxOC4xIDIyOC41IDUyOCAyNTYgNTI4czUyLjYtOS45IDcyLjEtMjYuM3pNMzIwIDM3OC42bDAgMzcuNGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NGwwLTM3LjRjMC0xNC43IDExLjktMjYuNiAyNi42LTI2LjZsMiAwYzExLjMgMCAyMS4xIDcuOSAyMy42IDE4LjkgMi44IDEyLjYgMjAuOCAxMi42IDIzLjYgMCAyLjUtMTEuMSAxMi4zLTE4LjkgMjMuNi0xOC45bDIgMGMxNC43IDAgMjYuNiAxMS45IDI2LjYgMjYuNnpNMTMyIDIzMmMwLTExIDktMjAgMjAtMjBsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMHptMjI4LjQtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMjg4IDIwOGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0xMjggMGE4MCA4MCAwIDEgMCAtMTYwIDAgODAgODAgMCAxIDAgMTYwIDB6Il0KICAgIH07CiAgICBmYUdyaW5Ub25ndWVXaW5rID0gZmFGYWNlR3JpblRvbmd1ZVdpbms7CiAgICBmYUhvdXJnbGFzc0hhbGYgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaG91cmdsYXNzLWhhbGYiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiaG91cmdsYXNzLTIiXSwgImYyNTIiLCAiTTAgMjRDMCAxMC43IDEwLjcgMCAyNCAwTDM2MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04IDAgMCAxOWMwIDQwLjMtMTYgNzktNDQuNSAxMDcuNWwtODEuNSA4MS41IDgxLjUgODEuNUMzMzYgMzY2IDM1MiA0MDQuNyAzNTIgNDQ1bDAgMTkgOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC0xOWMwLTQwLjMgMTYtNzkgNDQuNS0xMDcuNWw4MS41LTgxLjUtODEuNS04MS41QzQ4IDE0NiAzMiAxMDcuMyAzMiA2N2wwLTE5LTggMEMxMC43IDQ4IDAgMzcuMyAwIDI0ek0xMTAuNSAzNzEuNWMtMy45IDMuOS03LjUgOC4xLTEwLjcgMTIuNWwxODQuNCAwYy0zLjItNC40LTYuOC04LjYtMTAuNy0xMi41bC04MS41LTgxLjUtODEuNSA4MS41ek04MC44IDQzMmMtLjUgNC4zLS44IDguNi0uOCAxM2wwIDE5IDIyNCAwIDAtMTljMC00LjQtLjMtOC43LS44LTEzTDgwLjggNDMyek0yNTQuMSAxNjBsLTEyNC4xIDAgNjIuMSA2Mi4xIDYyLjEtNjIuMXptMzkuNy00OEMzMDAuNCA5OC4xIDMwNCA4Mi43IDMwNCA2N2wwLTE5LTIyNCAwIDAgMTljMCAxNS43IDMuNiAzMS4xIDEwLjIgNDVsMjAzLjUgMHoiXQogICAgfTsKICAgIGZhSG91cmdsYXNzMiA9IGZhSG91cmdsYXNzSGFsZjsKICAgIGZhQ3JlZGl0Q2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjcmVkaXQtY2FyZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE3OSwgNjIwODMsICJjcmVkaXQtY2FyZC1hbHQiXSwgImYwOWQiLCAiTTQ0OCAxMTJjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzItNDE2IDAgMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzg0IDB6bTE2IDExMmwwIDE2MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNjAgNDE2IDB6TTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0ek04MCAzNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTE0NCAwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTY0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0eiJdCiAgICB9OwogICAgZmFDcmVkaXRDYXJkQWx0ID0gZmFDcmVkaXRDYXJkOwogICAgZmFIYW5kU3BvY2sgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1zcG9jayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQwNl0sICJmMjU5IiwgIk0xMzguMyA4MC44Yy05LjItMzMuOCAxMC41LTY4LjggNDQuMy03OC40IDM0LTkuNiA2OS40IDEwLjIgNzkgNDQuMkwyOTEuOSAxNTMuNyAzMDUuMSA4NGM2LjYtMzQuNyA0MC4xLTU3LjUgNzQuOC01MC45IDMxLjQgNiA1MyAzMy45IDUyIDY0LjkgMTAtMi42IDIwLjgtMi44IDMxLjUtLjEgMzQuMyA4LjYgNTUuMSA0My4zIDQ2LjYgNzcuNkw0NTQuNyAzOTcuMkM0MzcuOCA0NjQuNyAzNzcuMiA1MTIgMzA3LjYgNTEybC0zMy43IDBjLTU2LjkgMC0xMTIuMi0xOS0xNTcuMi01My45bC05Mi03MS42Yy0yNy45LTIxLjctMzIuOS02MS45LTExLjItODkuOHM2MS45LTMyLjkgODkuOC0xMS4ybDE3IDEzLjItNTEuOC0xMzEuMmMtMTMtMzIuOSAzLjItNzAuMSAzNi04MyAxMS4xLTQuNCAyMi43LTUuNCAzMy43LTMuN3ptNzcuMS0yMS4yYy0yLjQtOC41LTExLjItMTMuNC0xOS43LTExcy0xMy40IDExLjItMTEgMTkuN2w1NC44IDE4Mi40YzMuNSAxMi4zLTMuMyAyNS4yLTE1LjQgMjkuM3MtMjUuMy0yLTMwLTEzLjlMMTQyLjkgMTM4LjFjLTMuMi04LjItMTIuNS0xMi4zLTIwLjgtOXMtMTIuMyAxMi41LTkgMjAuOGw3My4zIDE4NS42YzEyIDMwLjMtMjMuNyA1Ny00OS40IDM3TDczLjggMzIzLjRjLTctNS40LTE3LTQuMi0yMi41IDIuOHMtNC4yIDE3IDIuOCAyMi41bDkyIDcxLjZjMzYuNSAyOC40IDgxLjQgNDMuOCAxMjcuNyA0My44bDMzLjcgMGM0Ny41IDAgODktMzIuNCAxMDAuNS03OC41bDU1LjQtMjIxLjZjMi4xLTguNi0zLjEtMTcuMy0xMS42LTE5LjRzLTE3LjMgMy4xLTE5LjQgMTEuNmwtMjYgMTA0Yy0yLjkgMTEuNy0xMy40IDE5LjktMjUuNSAxOS45LTE2LjUgMC0yOC45LTE1LTI1LjgtMzEuMkwzODMuNyA5OWMxLjctOC43LTQtMTcuMS0xMi43LTE4LjdTMzU0IDg0LjMgMzUyLjMgOTNMMzIwLjUgMjYwYy0yLjIgMTEuNi0xMi40IDIwLTI0LjIgMjAtMTEgMC0yMC43LTcuMy0yMy43LTE3LjlMMjE1LjQgNTkuNnoiXQogICAgfTsKICAgIGZhQmVsbFNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImJlbGwtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgyNzcsIDYxOTQzXSwgImYxZjYiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTg3LjgtODcuOGMxNy41LTMuMyAzMC44LTE4LjcgMzAuOC0zNy4xIDAtNi43LTEuOC0xMy4zLTUuMS0xOUw0ODUgMzIxLjdjLTE5LTMyLjYtMjktNjkuNi0yOS0xMDcuM2wwLTE0LjVjMC04NC42LTYyLjYtMTU0LjctMTQ0LTE2Ni4zbDAtOS43YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgOS43Yy00Mi4yIDYtNzkuNCAyNy44LTEwNS40IDU5LjFMNDEtMjQuOXpNMTkyLjggMTI2LjlDMjE0LjcgOTguNCAyNDkuMiA4MCAyODggODAgMzU0LjMgODAgNDA4IDEzMy43IDQwOCAyMDBsMCAxNC41YzAgNDYuMiAxMi4zIDkxLjUgMzUuNSAxMzEuNGwxMi45IDIyLjEtMjIuNiAwLTI0MS4xLTI0MS4xek0xMzIuNSAzNDUuOWMxOS41LTMzLjQgMzEuMy03MC43IDM0LjYtMTA5bC00Ni43LTQ2LjdjLS4yIDMuMy0uMyA2LjYtLjMgOS45bDAgMTQuNWMwIDM3LjctMTAgNzQuNy0yOSAxMDcuM0w2OS4xIDM1OS4yYy0zLjQgNS44LTUuMSAxMi4zLTUuMSAxOSAwIDIwLjkgMTYuOSAzNy44IDM3LjggMzcuOGwyNDQuNCAwLTQ4LTQ4LTE3OC42IDAgMTIuOS0yMi4xek0yMjAuMSA0NjRjOS45IDI4IDM2LjYgNDggNjcuOSA0OHM1OC0yMCA2Ny45LTQ4bC0xMzUuOCAweiJdCiAgICB9OwogICAgZmFTdGFyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInN0YXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMTA4OCwgNjE0NDZdLCAiZjAwNSIsICJNMjg4LjEtMzJjOSAwIDE3LjMgNS4xIDIxLjQgMTMuMUwzODMgMTI1LjMgNTQyLjkgMTUwLjdjOC45IDEuNCAxNi4zIDcuNyAxOS4xIDE2LjNzLjUgMTgtNS44IDI0LjRMNDQxLjcgMzA1LjkgNDY3IDQ2NS44YzEuNCA4LjktMi4zIDE3LjktOS42IDIzLjJzLTE3IDYuMS0yNSAyTDI4OC4xIDQxNy42IDE0My44IDQ5MWMtOCA0LjEtMTcuNyAzLjMtMjUtMnMtMTEtMTQuMi05LjYtMjMuMkwxMzQuNCAzMDUuOSAyMCAxOTEuNGMtNi40LTYuNC04LjYtMTUuOC01LjgtMjQuNHMxMC4xLTE0LjkgMTkuMS0xNi4zbDE1OS45LTI1LjQgNzMuNi0xNDQuMmM0LjEtOCAxMi40LTEzLjEgMjEuNC0xMy4xem0wIDc2LjhMMjMwLjMgMTU4Yy0zLjUgNi44LTEwIDExLjYtMTcuNiAxMi44bC0xMjUuNSAyMCA4OS44IDg5LjljNS40IDUuNCA3LjkgMTMuMSA2LjcgMjAuN2wtMTkuOCAxMjUuNSAxMTMuMy01Ny42YzYuOC0zLjUgMTQuOS0zLjUgMjEuOCAwbDExMy4zIDU3LjYtMTkuOC0xMjUuNWMtMS4yLTcuNiAxLjMtMTUuMyA2LjctMjAuN2w4OS44LTg5LjktMTI1LjUtMjBjLTcuNi0xLjItMTQuMS02LTE3LjYtMTIuOEwyODguMSA0NC44eiJdCiAgICB9OwogICAgZmFGbGFnID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZsYWciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5ODgsIDYxNzI1XSwgImYwMjQiLCAiTTQ4IDI0QzQ4IDEwLjcgMzcuMyAwIDI0IDBTMCAxMC43IDAgMjRMMCA0ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEwMCA4MC4zLTIwLjFjNDEuMS0xMC4zIDg0LjYtNS41IDEyMi41IDEzLjQgNDQuMiAyMi4xIDk1LjUgMjQuOCAxNDEuNyA3LjRsMzQuNy0xM2MxMi41LTQuNyAyMC44LTE2LjYgMjAuOC0zMGwwLTI3OS43YzAtMjMtMjQuMi0zOC00NC44LTI3LjdsLTkuNiA0LjhjLTQ2LjMgMjMuMi0xMDAuOCAyMy4yLTE0Ny4xIDAtMzUuMS0xNy42LTc1LjQtMjItMTEzLjUtMTIuNUw0OCA1MiA0OCAyNHptMCA3Ny41bDk2LjYtMjQuMmMyNy02LjcgNTUuNS0zLjYgODAuNCA4LjggNTQuOSAyNy40IDExOC43IDI5LjcgMTc1IDYuOGwwIDI0MS44LTI0LjQgOS4xYy0zMy43IDEyLjYtNzEuMiAxMC43LTEwMy40LTUuNC00OC4yLTI0LjEtMTAzLjMtMzAuMS0xNTUuNi0xNy4xbC02OC42IDE3LjIgMC0yMzd6Il0KICAgIH07CiAgICBmYUxlbW9uID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImxlbW9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3ODE5XSwgImYwOTQiLCAiTTM2OCA4MGMtMy4yIDAtNi4yIC40LTguOSAxLjMtMTkuMSA1LjUtNDYuMSAxMC43LTc0LjMgMy4zLTU3LjQtMTQuOS0xMjQuNiA3LjQtMTc0LjcgNTcuNVMzNy43IDI1OS40IDUyLjYgMzE2LjhjNy4zIDI4LjIgMi4yIDU1LjItMy4zIDc0LjMtLjggMi44LTEuMyA1LjgtMS4zIDguOSAwIDE3LjcgMTQuMyAzMiAzMiAzMiAzLjIgMCA2LjItLjQgOC45LTEuMyAxOS4xLTUuNSA0Ni4xLTEwLjcgNzQuMy0zLjMgNTcuNCAxNC45IDEyNC42LTcuNCAxNzQuNy01Ny41czcyLjQtMTE3LjMgNTcuNS0xNzQuN2MtNy4zLTI4LjItMi4yLTU1LjIgMy4zLTc0LjMgLjgtMi44IDEuMy01LjggMS4zLTguOSAwLTE3LjctMTQuMy0zMi0zMi0zMnptMC00OGM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDcuNy0xLjEgMTUuMi0zLjEgMjIuMy00LjYgMTUuOC03LjEgMzIuOS0zIDQ4LjkgMjAuMSA3Ny42LTEwLjkgMTYxLjUtNzAgMjIwLjdzLTE0My4xIDkwLjItMjIwLjcgNzBjLTE2LTQuMS0zMy0xLjYtNDguOSAzLTcuMSAyLTE0LjYgMy4xLTIyLjMgMy4xLTQ0LjIgMC04MC0zNS44LTgwLTgwIDAtNy43IDEuMS0xNS4yIDMuMS0yMi4zIDQuNi0xNS44IDcuMS0zMi45IDMtNDguOS0yMC4xLTc3LjYgMTAuOS0xNjEuNSA3MC0yMjAuN1MyMTkuMyAxOCAyOTYuOCAzOC4xYzE2IDQuMSAzMyAxLjYgNDguOS0zIDcuMS0yIDE0LjYtMy4xIDIyLjMtMy4xek0yNDYuNyAxNjdjLTUyIDE1LjItOTYuNSA1OS43LTExMS43IDExMS43LTMuNyAxMi43LTE3LjEgMjAtMjkuOCAxNi4zUzg1LjIgMjc4IDg5IDI2NS4zYzE5LjgtNjcuNyA3Ni42LTEyNC41IDE0NC4zLTE0NC4zIDEyLjctMy43IDI2LjEgMy42IDI5LjggMTYuM3MtMy42IDI2LjEtMTYuMyAyOS44eiJdCiAgICB9OwogICAgZmFXaW5kb3dSZXN0b3JlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIndpbmRvdy1yZXN0b3JlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyZDIiLCAiTTUxMiA4MEwyMjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2LTQ4IDAgMC0xNmMwLTM1LjMgMjguNy02NCA2NC02NGwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE5MmMwIDM1LjMtMjguNyA2NC02NCA2NGwtNDggMCAwLTQ4IDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTkyYzAtOC44LTcuMi0xNi0xNi0xNnpNMzY4IDI4OGwtMzIwIDAgMCAxMjhjMCA4LjggNy4yIDE2IDE2IDE2bDI4OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTEyOHpNNjQgMTYwbDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyMjRjMC0zNS4zIDI4LjctNjQgNjQtNjR6Il0KICAgIH07CiAgICBmYUZhY2VHcmluSGVhcnRzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi1oZWFydHMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjUsICJncmluLWhlYXJ0cyJdLCAiZjU4NCIsICJNNDY0IDI1NmMwIDExNC45LTkzLjEgMjA4LTIwOCAyMDhTNDggMzcwLjkgNDggMjU2YzAtMy41IC4xLTcuMSAuMy0xMC42LTE0LTEzLjktMjkuNy0zMy4xLTM5LjMtNTYuNy01LjggMjEuNC04LjkgNDQtOC45IDY3LjMgMCAxNDEuNCAxMTQuNiAyNTYgMjU2IDI1NlM1MTIgMzk3LjQgNTEyIDI1NmMwLTIzLjMtMy4xLTQ1LjktOC45LTY3LjMtOS42IDIzLjctMjUuNCA0Mi44LTM5LjMgNTYuNyAuMiAzLjUgLjMgNyAuMyAxMC42ek0zNjggNTguOWMxMS43LTYgMjQuNS05LjYgMzcuNy0xMC42LTQyLjEtMzAuNC05My44LTQ4LjMtMTQ5LjctNDguM1MxNDguNCAxNy45IDEwNi4zIDQ4LjNjMTMuMiAxIDI2IDQuNiAzNy43IDEwLjYgMTMuOC03LjEgMjkuMy0xMC45IDQ1LjEtMTAuOWwyLjkgMGM4LjkgMCAxNy42IDEuMiAyNS44IDMuNSAxMi40LTIuMyAyNS4yLTMuNSAzOC4yLTMuNXMyNS44IDEuMiAzOC4yIDMuNWM4LjItMi4zIDE2LjktMy41IDI1LjgtMy41bDIuOSAwYzE1LjggMCAzMS4zIDMuOCA0NS4xIDEwLjl6bTQuMiAyNDMuNGMtMzQuOCAxMC42LTc0LjMgMTYuNi0xMTYuMyAxNi42LTQxLjkgMC04MS40LTYtMTE2LjEtMTYuNS0xMS44LTMuNi0yMy43IDYuMS0xOS42IDE3LjggMTkuOCA1NS45IDczLjEgOTUuOSAxMzUuOCA5NS45IDYyLjcgMCAxMTYtNDAuMSAxMzUuOC05NiA0LjEtMTEuNi03LjgtMjEuNC0xOS42LTE3Ljh6TTMyMi45IDk2TDMyMCA5NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDggMCA1My40IDY2LjkgOTUuNyA4OSAxMDguMiA0LjQgMi41IDkuNiAyLjUgMTQgMCAyMi4xLTEyLjUgODktNTQuOCA4OS0xMDguMiAwLTI2LjUtMjEuNS00OC00OC00OGwtMi45IDBjLTEzLjUgMC0yNi41IDUuNC0zNiAxNC45bC05LjEgOS4xLTkuMS05LjFjLTkuNS05LjUtMjIuNS0xNC45LTM2LTE0Ljl6bS0xODggMTQuOWMtOS41LTkuNS0yMi41LTE0LjktMzYtMTQuOUw5NiA5NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDggMCA1My40IDY2LjkgOTUuNyA4OSAxMDguMiA0LjQgMi41IDkuNiAyLjUgMTQgMCAyMi4xLTEyLjUgODktNTQuOCA4OS0xMDguMiAwLTI2LjUtMjEuNS00OC00OC00OGwtMi45IDBjLTEzLjUgMC0yNi41IDUuNC0zNiAxNC45bC05LjEgOS4xLTkuMS05LjF6Il0KICAgIH07CiAgICBmYUdyaW5IZWFydHMgPSBmYUZhY2VHcmluSGVhcnRzOwogICAgZmFGYWNlS2lzc0JlYW0gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1raXNzLWJlYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MzcsICJraXNzLWJlYW0iXSwgImY1OTciLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMjQwIDE2bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCAxMi4zLTQuNiAyMy41LTEyLjIgMzIgNy42IDguNSAxMi4yIDE5LjcgMTIuMiAzMiAwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bS02NC05MmMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHptMTMyIDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6Il0KICAgIH07CiAgICBmYUtpc3NCZWFtID0gZmFGYWNlS2lzc0JlYW07CiAgICBmYUZpbGVQZGYgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1wZGYiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFjMSIsICJNMjA4IDQ4TDk2IDQ4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzODRjMCA4LjggNy4yIDE2IDE2IDE2bDgwIDAgMCA0OC04MCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwzMiA2NEMzMiAyOC43IDYwLjcgMCA5NiAwTDIyOS41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzk3LjMgMTQxLjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM2wwIDE0OS41LTQ4IDAgMC0xMjgtODggMGMtMzkuOCAwLTcyLTMyLjItNzItNzJsMC04OHpNMzQ4LjEgMTYwTDI1NiA2Ny45IDI1NiAxMzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjguMSAwek0yNDAgMzgwbDMyIDBjMzMuMSAwIDYwIDI2LjkgNjAgNjBzLTI2LjkgNjAtNjAgNjBsLTEyIDAgMCAyOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC0xMjhjMC0xMSA5LTIwIDIwLTIwem0zMiA4MGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTEyIDAgMCA0MCAxMiAwem05Ni04MGwzMiAwYzI4LjcgMCA1MiAyMy4zIDUyIDUybDAgNjRjMCAyOC43LTIzLjMgNTItNTIgNTJsLTMyIDBjLTExIDAtMjAtOS0yMC0yMGwwLTEyOGMwLTExIDktMjAgMjAtMjB6bTMyIDEyOGM2LjYgMCAxMi01LjQgMTItMTJsMC02NGMwLTYuNi01LjQtMTItMTItMTJsLTEyIDAgMCA4OCAxMiAwem03Ni0xMDhjMC0xMSA5LTIwIDIwLTIwbDQ4IDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC0yOCAwIDAgMjQgMjggMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjBsLTI4IDAgMCA0NGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC0xMjh6Il0KICAgIH07CiAgICBmYUZhY2VHcmluV2lkZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4td2lkZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUxNSwgImdyaW4tYWx0Il0sICJmNTgxIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTM3Mi4yIDQ2LjNjMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjZ6TTIyNCAxOTJjMCAzNS4zLTE0LjMgNjQtMzIgNjRzLTMyLTI4LjctMzItNjQgMTQuMy02NCAzMi02NCAzMiAyOC43IDMyIDY0em05NiA2NGMtMTcuNyAwLTMyLTI4LjctMzItNjRzMTQuMy02NCAzMi02NCAzMiAyOC43IDMyIDY0LTE0LjMgNjQtMzIgNjR6Il0KICAgIH07CiAgICBmYUdyaW5BbHQgPSBmYUZhY2VHcmluV2lkZTsKICAgIGZhRmFjZUxhdWdoU3F1aW50ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtbGF1Z2gtc3F1aW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxhdWdoLXNxdWludCJdLCAiZjU5YiIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xMjUuMiA3Ni40Yy02LjUtMTQgNS0yOC40IDIwLjQtMjguNGwyMjAuOCAwYzE1LjQgMCAyNi44IDE0LjQgMjAuNCAyOC40LTIyLjggNDkuNC03Mi44IDgzLjYtMTMwLjggODMuNnMtMTA3LjktMzQuMi0xMzAuOC04My42em0tMi42LTE3My4yYzQuNS02LjggMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMjA4IDEyNS44IDE4MC4zYy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xem0yNjMuNiAyMS4xTDM1MyAyMDggMzg2LjIgMjM1LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjVzMy4xIDE1LjktMy4xIDIxLjF6Il0KICAgIH07CiAgICBmYUxhdWdoU3F1aW50ID0gZmFGYWNlTGF1Z2hTcXVpbnQ7CiAgICBmYUZhY2VLaXNzV2lua0hlYXJ0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2Uta2lzcy13aW5rLWhlYXJ0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NTM2LCAia2lzcy13aW5rLWhlYXJ0Il0sICJmNTk4IiwgIk0zODYgNDM5LjVjLTI5LjIgMTUuNi02Mi41IDI0LjUtOTggMjQuNS0xMTQuOSAwLTIwOC05My4xLTIwOC0yMDhTMTczLjIgNDggMjg4IDQ4YzExMy4yIDAgMjA1LjIgOTAuNCAyMDcuOSAyMDIuOSAxNC4zIDEuNSAyOC42IDYgNDEuOSAxMy43IDIgMS4yIDQgMi40IDUuOSAzLjcgLjItNC4xIC4zLTguMiAuMy0xMi4zIDAtMTQxLjQtMTE0LjYtMjU2LTI1Ni0yNTZTMzIgMTE0LjYgMzIgMjU2IDE0Ni42IDUxMiAyODggNTEyYzQxLjQgMCA4MC41LTkuOCAxMTUuMS0yNy4zLTUuOC0xMi45LTEyLTI4LjUtMTcuMi00NS4yek0yNTYgMjg4YzAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMzIgMGMyNi41IDAgNDgtMjEuNSA0OC00OCAwLTEyLjMtNC42LTIzLjUtMTIuMi0zMiA3LjYtOC41IDEyLjItMTkuNyAxMi4yLTMyIDAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bS00OC00OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTE1Mi00NGwxNiAwYzExIDAgMjAgOSAyMCAyMHM5IDIwIDIwIDIwIDIwLTkgMjAtMjBjMC0zMy4xLTI2LjktNjAtNjAtNjBsLTE2IDBjLTMzLjEgMC02MCAyNi45LTYwIDYwIDAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwIDktMjAgMjAtMjB6TTU0Mi44IDM1MGMtMi4yLTE4LjMtMTIuOS0zNC42LTI4LjktNDMuOC0yOC4xLTE2LjItNjMuOS02LjYtODAuMSAyMS41bC0yLjcgNC42Yy0yNC41IDQyLjUgNy45IDExNy45IDI0LjQgMTUwLjggNS4xIDEwLjEgMTUuNSAxNi4xIDI2LjggMTUuNSAzNi43LTIuMiAxMTguMi0xMS43IDE0Mi44LTU0LjJsMi43LTQuNmMxNi4yLTI4LjEgNi42LTYzLjktMjEuNS04MC4xLTE2LTkuMi0zNS40LTEwLjQtNTIuNC0zLjFsLTkuOCA0LjItMS4zLTEwLjZ6Il0KICAgIH07CiAgICBmYUtpc3NXaW5rSGVhcnQgPSBmYUZhY2VLaXNzV2lua0hlYXJ0OwogICAgZmFDb3B5ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNvcHkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjBjNSIsICJNMzg0IDMzNmwtMTkyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI1NmMwLTguOCA3LjItMTYgMTYtMTZsMTMzLjUgMGM0LjIgMCA4LjMgMS43IDExLjMgNC43bDU4LjUgNTguNWMzIDMgNC43IDcuMSA0LjcgMTEuM0w0MDAgMzIwYzAgOC44LTcuMiAxNi0xNiAxNnpNMTkyIDM4NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5Ny41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDM3MC43IDE4LjdDMzU4LjcgNi43IDM0Mi41IDAgMzI1LjUgMEwxOTIgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyNTZjMCAzNS4zIDI4LjcgNjQgNjQgNjR6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNi00OCAwIDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwIDAtNDgtMTYgMHoiXQogICAgfTsKICAgIGZhQ2hlc3NLaW5nID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNoZXNzLWtpbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODE4XSwgImY0M2YiLCAiTTIyNC0zMmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDAgMCA4MCAxNjEuOCAwYzIxLjEgMCAzOC4yIDE3LjEgMzguMiAzOC4yIDAgNi40LTEuNiAxMi43LTQuNyAxOC4zTDM1Ny4yIDM3NC41IDQwNS42IDQzNWM2LjcgOC40IDEwLjQgMTguOCAxMC40IDI5LjYgMCAyNi4yLTIxLjIgNDcuNC00Ny40IDQ3LjRMNzkuNCA1MTJjLTI2LjIgMC00Ny40LTIxLjItNDcuNC00Ny40IDAtMTAuOCAzLjctMjEuMiAxMC40LTI5LjZMOTAuOCAzNzQuNSA0LjcgMjE2LjZDMS42IDIxMC45IDAgMjA0LjYgMCAxOTguMiAwIDE3Ny4xIDE3LjEgMTYwIDM4LjIgMTYwbDE2MS44IDAgMC04MC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMTMxLjggNDAwbC0zLjYgNC40LTQ3LjYgNTkuNiAyODYuNiAwLTQ3LjYtNTkuNi0zLjYtNC40LTE4NC4zIDB6bTEuMS00OC41bC4zIC41IDE4MS42IDAgLjMtLjUgNzguMy0xNDMuNS0zMzguNyAwIDc4LjMgMTQzLjV6Il0KICAgIH07CiAgICBmYVNxdWFyZVBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXBsdXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2MTg0NiwgInBsdXMtc3F1YXJlIl0sICJmMGZlIiwgIk02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMjBjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNMjAwIDM0NGwwLTY0LTY0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNjQgMCAwLTY0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA2NCA2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC02NCAwIDAgNjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYVBsdXNTcXVhcmUgPSBmYVNxdWFyZVBsdXM7CiAgICBmYUZpbGVDb2RlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZpbGUtY29kZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM5IiwgIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwek0xNzAuMiAyOTUuNmM4LjYtMTAuMSA3LjUtMjUuMi0yLjYtMzMuOHMtMjUuMi03LjUtMzMuOCAyLjZsLTQ4IDU2Yy03LjcgOS03LjcgMjIuMiAwIDMxLjJsNDggNTZjOC42IDEwLjEgMjMuOCAxMS4yIDMzLjggMi42czExLjItMjMuOCAyLjYtMzMuOGwtMzQuNi00MC40IDM0LjYtNDAuNHptODAtMzEuMmMtOC42LTEwLjEtMjMuOC0xMS4yLTMzLjgtMi42cy0xMS4yIDIzLjgtMi42IDMzLjhsMzQuNiA0MC40LTM0LjYgNDAuNGMtOC42IDEwLjEtNy41IDI1LjIgMi42IDMzLjhzMjUuMiA3LjUgMzMuOC0yLjZsNDgtNTZjNy43LTkgNy43LTIyLjIgMC0zMS4ybC00OC01NnoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5XaW5rID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi13aW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImdyaW4td2luayJdLCAiZjU4YyIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zNzIuMiA0Ni4zYzExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC0xOS44IDU1LjktNzMuMSA5Ni0xMzUuOCA5Ni02Mi43IDAtMTE2LTQwLTEzNS44LTk1LjktNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42ek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2NCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwYy0xMSAwLTIwIDktMjAgMjB6Il0KICAgIH07CiAgICBmYUdyaW5XaW5rID0gZmFGYWNlR3Jpbldpbms7CiAgICBmYU1vbmV5QmlsbDEgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAibW9uZXktYmlsbC0xIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbIm1vbmV5LWJpbGwtYWx0Il0sICJmM2QxIiwgIk0xMTIgMTEyYzAgMzUuMy0yOC43IDY0LTY0IDY0bDAgMTYwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDI4OCAwYzAtMzUuMyAyOC43LTY0IDY0LTY0bDAtMTYwYy0zNS4zIDAtNjQtMjguNy02NC02NGwtMjg4IDB6TTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6bTI1NiAxNmExMTIgMTEyIDAgMSAxIDAgMjI0IDExMiAxMTIgMCAxIDEgMC0yMjR6bS0xNiA0NGMtMTEgMC0yMCA5LTIwIDIwIDAgOS43IDYuOSAxNy43IDE2IDE5LjZsMCA0OC40LTQgMGMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBsNDggMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTQgMCAwLTY4YzAtMTEtOS0yMC0yMC0yMGwtMTYgMHoiXQogICAgfTsKICAgIGZhTW9uZXlCaWxsQWx0ID0gZmFNb25leUJpbGwxOwogICAgZmFFeWVTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJleWUtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjA3MCIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtOTYuNC05Ni40YzIuNy0yLjQgNS40LTQuOCA4LTcuMiA0Ni44LTQzLjUgNzguMS05NS40IDkzLTEzMS4xIDMuMy03LjkgMy4zLTE2LjcgMC0yNC42LTE0LjktMzUuNy00Ni4yLTg3LjctOTMtMTMxLjEtNDcuMS00My43LTExMS44LTgwLjYtMTkyLjYtODAuNi01Ni44IDAtMTA1LjYgMTguMi0xNDYgNDQuMkw0MS0yNC45ek0xNzYuOSAxMTEuMWMzMi4xLTE4LjkgNjkuMi0zMS4xIDExMS4xLTMxLjEgNjUuMiAwIDExOC44IDI5LjYgMTU5LjkgNjcuNyAzOC41IDM1LjcgNjUuMSA3OC4zIDc4LjYgMTA4LjMtMTMuNiAzMC00MC4yIDcyLjUtNzguNiAxMDguMy0zLjEgMi44LTYuMiA1LjYtOS40IDguNEwzOTMuOCAzMjhjMTQtMjAuNSAyMi4yLTQ1LjMgMjIuMi03MiAwLTcwLjctNTcuMy0xMjgtMTI4LTEyOC0yNi43IDAtNTEuNSA4LjItNzIgMjIuMmwtMzkuMS0zOS4xem0xODIgMTgybC0xMDgtMTA4YzExLjEtNS44IDIzLjctOS4xIDM3LjEtOS4xIDQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgMTMuNC0zLjMgMjYtOS4xIDM3LjF6TTEwMy40IDE3My4ybC0zNC0zNGMtMzIuNiAzNi44LTU1IDc1LjgtNjYuOSAxMDQuNS0zLjMgNy45LTMuMyAxNi43IDAgMjQuNiAxNC45IDM1LjcgNDYuMiA4Ny43IDkzIDEzMS4xIDQ3LjEgNDMuNyAxMTEuOCA4MC42IDE5Mi42IDgwLjYgMzcuMyAwIDcxLjItNy45IDEwMS41LTIwLjZMMzUyLjIgNDIyYy0yMCA2LjQtNDEuNCAxMC02NC4yIDEwLTY1LjIgMC0xMTguOC0yOS42LTE1OS45LTY3LjctMzguNS0zNS43LTY1LjEtNzguMy03OC42LTEwOC4zIDEwLjQtMjMuMSAyOC42LTUzLjYgNTQtODIuOHoiXQogICAgfTsKICAgIGZhRmlsZVdvcmQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS13b3JkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzIiLCAiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6bTcxLjMgMjc0LjJjLTMuMi0xMi45LTE2LjItMjAuNy0yOS4xLTE3LjVTODUuNSAyNzMgODguNyAyODUuOGwzMiAxMjhjMi41IDEwLjIgMTEuNCAxNy41IDIxLjkgMTguMXMyMC4xLTUuNyAyMy44LTE1LjVsMjUuNS02OC4xIDI1LjUgNjguMWMzLjcgOS44IDEzLjMgMTYuMSAyMy44IDE1LjVzMTkuNC03LjkgMjEuOS0xOC4xbDMyLTEyOGMzLjItMTIuOS00LjYtMjUuOS0xNy41LTI5LjFzLTI1LjkgNC42LTI5LjEgMTcuNWwtMTMuMyA1My4yLTIwLjktNTUuOEMyMTEgMjYyLjIgMjAyIDI1NiAxOTIgMjU2cy0xOSA2LjItMjIuNSAxNS42bC0yMC45IDU1LjgtMTMuMy01My4yeiJdCiAgICB9OwogICAgZmFGYWNlQW5ncnkgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1hbmdyeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU0NCwgImFuZ3J5Il0sICJmNTU2IiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTAtMTQ0YzI0LjEgMCA0NS40IDExLjggNTguNSAzMCA3LjcgMTAuOCAyMi43IDEzLjIgMzMuNSA1LjVzMTMuMi0yMi43IDUuNS0zMy41Yy0yMS43LTMwLjItNTcuMy01MC05Ny41LTUwcy03NS43IDE5LjgtOTcuNSA1MGMtNy43IDEwLjgtNS4zIDI1LjggNS41IDMzLjVzMjUuOCA1LjMgMzMuNS01LjVjMTMuMS0xOC4yIDM0LjQtMzAgNTguNS0zMHptLTgwLTk2YzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtLjMgOS43IDMuMmMxMC41IDMuNSAyMS44LTIuMiAyNS4zLTEyLjZzLTIuMi0yMS44LTEyLjYtMjUuM2wtOTYtMzJjLTEwLjUtMy41LTIxLjggMi4yLTI1LjMgMTIuNnMyLjIgMjEuOCAxMi42IDI1LjNsMjguOSA5LjZjLTQuMSA1LjQtNi42IDEyLjEtNi42IDE5LjQgMCAxNy43IDE0LjMgMzIgMzIgMzJ6bTE5Mi0zMmMwLTcuMy0yLjQtMTQtNi42LTE5LjRsMjguOS05LjZjMTAuNS0zLjUgMTYuMS0xNC44IDEyLjYtMjUuM3MtMTQuOC0xNi4xLTI1LjMtMTIuNmwtOTYgMzJjLTEwLjUgMy41LTE2LjEgMTQuOC0xMi42IDI1LjNzMTQuOCAxNi4xIDI1LjMgMTIuNmw5LjctMy4yIDAgLjNjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnoiXQogICAgfTsKICAgIGZhQW5ncnkgPSBmYUZhY2VBbmdyeTsKICAgIGZhQ2hlc3NLbmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2hlc3Mta25pZ2h0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTgyMl0sICJmNDQxIiwgIk0yMzItMzJjMTEwLjUgMCAyMDAgODkuNSAyMDAgMjAwbDAgMTI3LjdjMCAxOC45LTYuMSAzNy4xLTE3LjIgNTIuMmwtNS4xIDYuMi0zNi4zIDQwLjcgMzIuMSA0MC4yYzYuNyA4LjQgMTAuNCAxOC44IDEwLjQgMjkuNmwtLjIgNC44Yy0yLjQgMjMuOS0yMi42IDQyLjUtNDcuMSA0Mi41bC0yODkuMiAwLTQuOC0uMmMtMjMuOS0yLjQtNDIuNS0yMi42LTQyLjUtNDcuMSAwLTEwLjggMy43LTIxLjIgMTAuNC0yOS42bDM3LjYtNDcgMC0yNC4zYzAtMjQuMyAxMC4xLTQ3LjYgMjcuOC02NC4ybDYzLjUtNTkuNS0xNy40IDAtLjIgLjJjLTIwLjMgMjAuMy00OS42IDI4LjItNzcuMSAyMS4xbC01LjUtMS42Yy0zMC45LTEwLjMtNTIuMy0zOC01NC45LTcwLjFsLS4yLTYuNCAwLTEuNGMwLTE5LjcgNy4xLTM4LjggMTkuOS01My44bDc2LjEtODguOCAwLTQ3LjEgLjEtMi41QzExMy40LTIyLjYgMTIzLjYtMzIgMTM2LTMybDk2IDB6TTgwLjcgNDY0bDI4Ni42IDAtMzguNC00OC0yMDkuOSAwLTM4LjQgNDh6TTE2MCA0OGMwIDUuNy0yLjEgMTEuMy01LjggMTUuNkw3Mi4zIDE1OS4xQzY3IDE2NS40IDY0IDE3My40IDY0IDE4MS43bDAgMS40IC40IDUuMmMxLjkgMTEuOSAxMC4zIDIxLjkgMjEuOSAyNS44bDQuNSAxLjFjMTAuNSAxLjkgMjEuMy0xLjQgMjktOWw3LjItNy4yIDMuNy0zYzMuOS0yLjYgOC41LTQgMTMuMy00bDg4IDBjOS44IDAgMTguNyA2IDIyLjMgMTUuMnMxLjMgMTkuNi01LjkgMjYuM2wtMTA3LjggMTAxYy04LjEgNy42LTEyLjcgMTguMS0xMi43IDI5LjJsMCA0LjMgMjA1LjIgMCA0MC43LTQ1LjggMi4zLTIuOGM1LjEtNi44IDcuOC0xNS4yIDcuOC0yMy43TDM4NCAxNjhjMC04My45LTY4LjEtMTUyLTE1Mi0xNTJsLTcyIDAgMCAzMnptMzIgNzJhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4eiJdCiAgICB9OwogICAgZmFGYWNlR3JpbkJlYW0gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLWJlYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTYsICJncmluLWJlYW0iXSwgImY1ODIiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMzcyLjIgNDYuM2MxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtMTkuOCA1NS45LTczLjEgOTYtMTM1LjggOTYtNjIuNyAwLTExNi00MC0xMzUuOC05NS45LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNnpNMTc2IDE4MGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHptMTMyIDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6Il0KICAgIH07CiAgICBmYUdyaW5CZWFtID0gZmFGYWNlR3JpbkJlYW07CiAgICBmYUhhbmRQZWFjZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBlYWNlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTk5Nl0sICJmMjViIiwgIk0yMTkgMS40Yy0zNS4yLTMuNy02Ni42IDIxLjgtNzAuMyA1N2wtNi40IDYwLjYtMTcuNC00OS40QzExMy4yIDM2LjMgNzYuNiAxOC44IDQzLjMgMzAuNVMtNy42IDc4LjggNC4xIDExMi4xTDU2LjkgMjYyLjJDNDEuNyAyNzYuNyAzMi4yIDI5Ny4zIDMyLjIgMzIwbDAgMjRjMCA5Mi44IDc1LjIgMTY4IDE2OCAxNjhsNDggMGM5Mi44IDAgMTY4LTc1LjIgMTY4LTE2OGwwLTEyMGMwLTM1LjMtMjguNy02NC02NC02NC03LjkgMC0xNS40IDEuNC0yMi40IDQtMTAuNC0yMS4zLTMyLjMtMzYtNTcuNi0zNi0uNyAwLTEuNSAwLTIuMiAwbDUuOS01Ni4zYzMuNy0zNS4yLTIxLjgtNjYuNi01Ny03MC4zem0tLjIgMTU1LjRjLTYuNiAxMC4xLTEwLjUgMjIuMi0xMC41IDM1LjJsMCA0OGMwIC43IDAgMS40IDAgMi01LjEtMS4zLTEwLjUtMi0xNi0ybC03LjQgMC01LjQtMTUuMyAxNy0xNjEuM2MuOS04LjggOC44LTE1LjIgMTcuNi0xNC4yczE1LjIgOC44IDE0LjIgMTcuNmwtOS41IDkwLjF6TTc5LjYgODUuNmw1NC4zIDE1NC40LTIxLjcgMGMtNCAwLTggLjMtMTEuOSAuOUw0OS40IDk2LjJjLTIuOS04LjMgMS41LTE3LjUgOS44LTIwLjRzMTcuNSAxLjUgMjAuNCA5Ljh6TTI1Ni4yIDE5MmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC00OHptMzguNCAxMDhjMTAuNCAyMS4zIDMyLjMgMzYgNTcuNiAzNiA1LjUgMCAxMC45LS43IDE2LTJsMCAxMGMwIDY2LjMtNTMuNyAxMjAtMTIwIDEyMGwtNDggMGMtNjYuMyAwLTEyMC01My43LTEyMC0xMjBsMC0yNGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw4MCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0uNyAwLTEuNCAwLTIgNS4xIDEuMyAxMC41IDIgMTYgMiA3LjkgMCAxNS40LTEuNCAyMi40LTR6bTczLjYtMjhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC00OGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNDh6Il0KICAgIH07CiAgICBmYUNvbXBhc3MgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY29tcGFzcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTUxN10sICJmMTRlIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTMwNi43IDY5LjFMMTYyLjQgMzgwLjZjLTE5LjQgNy41LTM4LjUtMTEuNi0zMS0zMWw1NS41LTE0NC4zYzMuMy04LjUgOS45LTE1LjEgMTguNC0xOC40bDE0NC4zLTU1LjVjMTkuNC03LjUgMzguNSAxMS42IDMxIDMxTDMyNS4xIDMwNi43Yy0zLjMgOC41LTkuOSAxNS4xLTE4LjQgMTguNHpNMjg4IDI1NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdCiAgICB9OwogICAgZmFTcXVhcmUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTYzMiwgOTcyMywgOTcyNCwgNjE1OTBdLCAiZjBjOCIsICJNMzg0IDgwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyMGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDMyYy04LjggMC0xNi03LjItMTYtMTZMNDggOTZjMC04LjggNy4yLTE2IDE2LTE2bDMyMCAwek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyeiJdCiAgICB9OwogICAgZmFGYWNlR3JpbiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTIsICJncmluIl0sICJmNTgwIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTM3Mi4yIDQ2LjNjMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjZ6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhR3JpbiA9IGZhRmFjZUdyaW47CiAgICBmYUZhY2VTbWlsZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXNtaWxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTc4LCAic21pbGUiXSwgImYxMTgiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTc3LjMgNjMuNEMxOTIuMyAzMzUgMjE4LjQgMzUyIDI1NiAzNTJzNjMuNy0xNyA3OC43LTMyLjZjOS4yLTkuNiAyNC40LTkuOSAzMy45LS43czkuOSAyNC40IC43IDMzLjljLTIyLjEgMjMtNjAgNDcuNC0xMTMuMyA0Ny40cy05MS4yLTI0LjQtMTEzLjMtNDcuNGMtOS4yLTkuNi04LjktMjQuOCAuNy0zMy45czI0LjgtOC45IDMzLjkgLjd6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhU21pbGUgPSBmYUZhY2VTbWlsZTsKICAgIGZhRmFjZVNtaWxlQmVhbSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXNtaWxlLWJlYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjIsICJzbWlsZS1iZWFtIl0sICJmNWI4IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ny4zIDYzLjRDMTkyLjMgMzM1IDIxOC40IDM1MiAyNTYgMzUyczYzLjctMTcgNzguNy0zMi42YzkuMi05LjYgMjQuNC05LjkgMzMuOS0uN3M5LjkgMjQuNCAuNyAzMy45Yy0yMi4xIDIzLTYwIDQ3LjQtMTEzLjMgNDcuNHMtOTEuMi0yNC40LTExMy4zLTQ3LjRjLTkuMi05LjYtOC45LTI0LjggLjctMzMuOXMyNC44LTguOSAzMy45IC43ek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXQogICAgfTsKICAgIGZhU21pbGVCZWFtID0gZmFGYWNlU21pbGVCZWFtOwogICAgZmFGb2xkZXJDbG9zZWQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZm9sZGVyLWNsb3NlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMTg1IiwgIk00NDggNDAwTDY0IDQwMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTQ0IDQxNiAwIDAgMTQ0YzAgOC44LTcuMiAxNi0xNiAxNnptMTYtMjA4bC00MTYgMCAwLTk2YzAtOC44IDcuMi0xNiAxNi0xNmwxMzguNyAwYzMuNSAwIDYuOCAxLjEgOS42IDMuMkwyNTAuNyAxMTJjMTMuOCAxMC40IDMwLjcgMTYgNDggMTZMNDQ4IDEyOGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0OHpNNjQgNDQ4bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjQwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDI5OC43IDgwYy02LjkgMC0xMy43LTIuMi0xOS4yLTYuNEwyNDEuMSA0NC44QzIzMCAzNi41IDIxNi41IDMyIDIwMi43IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjR6Il0KICAgIH07CiAgICBmYUtleWJvYXJkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImtleWJvYXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOWUzXSwgImYxMWMiLCAiTTY0IDExMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjU2YzAgOC44IDcuMiAxNiAxNiAxNmw0NDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNTZjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDExMnpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHpNMTc2IDMyMGwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTIyNCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bS03Mi03MmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2em0xNi05NmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2em02NCA5NmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2em0xNi05NmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2em02NCA5NmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2em0xNi05NmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2em02NCA5NmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2em0xNi05NmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2em02NCA5NmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2em0xNi05NmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFGYWNlUm9sbGluZ0V5ZXMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1yb2xsaW5nLWV5ZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1ODAsICJtZWgtcm9sbGluZy1leWVzIl0sICJmNWE1IiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE3NiAzNzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNMTYwIDI2NGMtMjIuMSAwLTQwLTE3LjktNDAtNDAgMC05LjUgMy4zLTE4LjEgOC44LTI1IDMuMiAxNC4zIDE2IDI1IDMxLjIgMjVzMjgtMTAuNyAzMS4yLTI1YzUuNSA2LjggOC44IDE1LjUgOC44IDI1IDAgMjIuMS0xNy45IDQwLTQwIDQwem0wIDQwYTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0xOTItNDBjLTIyLjEgMC00MC0xNy45LTQwLTQwIDAtOS41IDMuMy0xOC4xIDguOC0yNSAzLjIgMTQuMyAxNiAyNSAzMS4yIDI1czI4LTEwLjcgMzEuMi0yNWM1LjUgNi44IDguOCAxNS41IDguOCAyNSAwIDIyLjEtMTcuOSA0MC00MCA0MHptMCA0MGE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHoiXQogICAgfTsKICAgIGZhTWVoUm9sbGluZ0V5ZXMgPSBmYUZhY2VSb2xsaW5nRXllczsKICAgIGZhRmFjZUdyaW1hY2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmltYWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTU2LCAiZ3JpbWFjZSJdLCAiZjU3ZiIsICJNMjU2IDQ4YTIwOCAyMDggMCAxIDAgMCA0MTYgMjA4IDIwOCAwIDEgMCAwLTQxNnpNNTEyIDI1NmEyNTYgMjU2IDAgMSAxIC01MTIgMCAyNTYgMjU2IDAgMSAxIDUxMiAwek0xNTIgMzUyYzAgMTEuOSA4LjYgMjEuOCAyMCAyMy43bDAtNDcuM2MtMTEuNCAxLjktMjAgMTEuOC0yMCAyMy43em04NCAyNGwwLTQ4LTI0IDAgMCA0OCAyNCAwem02NCAwbDAtNDgtMjQgMCAwIDQ4IDI0IDB6bTQwLS4zYzExLjQtMS45IDIwLTExLjggMjAtMjMuN3MtOC42LTIxLjgtMjAtMjMuN2wwIDQ3LjN6TTE3NiAyODhsMTYwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRsLTE2MCAwYy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0em0wLTExMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdCiAgICB9OwogICAgZmFHcmltYWNlID0gZmFGYWNlR3JpbWFjZTsKICAgIGZhQ2lyY2xlRG90ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1kb3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyODAsICJkb3QtY2lyY2xlIl0sICJmMTkyIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDEgMSAwIDUxMnptMC00NjRhMjA4IDIwOCAwIDEgMCAwIDQxNiAyMDggMjA4IDAgMSAwIDAtNDE2em0wIDMwNGE5NiA5NiAwIDEgMSAwLTE5MiA5NiA5NiAwIDEgMSAwIDE5MnoiXQogICAgfTsKICAgIGZhRG90Q2lyY2xlID0gZmFDaXJjbGVEb3Q7CiAgICBmYU9iamVjdEdyb3VwID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIm9iamVjdC1ncm91cCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMjQ3IiwgIk00MCA2NGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem00OCA1OS4zYzE2LTYuNSAyOC45LTE5LjMgMzUuMy0zNS4zbDMyOS4zIDBjNi41IDE2IDE5LjMgMjguOSAzNS4zIDM1LjNsMCAyNjUuM2MtMTYgNi41LTI4LjkgMTkuMy0zNS4zIDM1LjNsLTMyOS4zIDBjLTYuNS0xNi0xOS4zLTI4LjktMzUuMy0zNS4zbDAtMjY1LjN6TTUxMiAwYy0yNi45IDAtNDkuOSAxNi41LTU5LjMgNDBMMTIzLjMgNDBDMTEzLjkgMTYuNSA5MC45IDAgNjQgMCAyOC43IDAgMCAyOC43IDAgNjQgMCA5MC45IDE2LjUgMTEzLjkgNDAgMTIzLjNsMCAyNjUuM2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0IDI2LjkgMCA0OS45LTE2LjUgNTkuMy00MGwzMjkuMyAwYzkuNSAyMy41IDMyLjUgNDAgNTkuMyA0MCAzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNsMC0yNjUuM2MyMy41LTkuNSA0MC0zMi41IDQwLTU5LjMgMC0zNS4zLTI4LjctNjQtNjQtNjR6TTQ4OCA2NGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek02NCA0MjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em00MjQgMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNMTkyIDE3Nmw4OCAwIDAgNTYtODggMCAwLTU2em0tOC00MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA3MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMDQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTcyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMDQgMHptNzIgMTg0bDAgMjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTA0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC03MmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMjQgMGMwIDE0LjYtMy45IDI4LjItMTAuNyA0MGwyNi43IDAgMCA1Ni04OCAwIDAtMTYuNGMtMi42IC4zLTUuMyAuNC04IC40bC0zMiAweiJdCiAgICB9OwogICAgZmFGYWNlRmx1c2hlZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWZsdXNoZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NjMsICJmbHVzaGVkIl0sICJmNTc5IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDEgLTQxNiAwIDIwOCAyMDggMCAxIDEgNDE2IDB6TTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTIgMjU2IDI1NiAwIDEgMCAwLTUxMnpNMTYwIDI0OGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTIxNi0yNGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek0xOTIgMzUyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEyOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMjggMHpNMTYwIDE3NmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6bTAgMTI4YTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0xNDQtODBhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMTI4IDBhODAgODAgMCAxIDAgLTE2MCAwIDgwIDgwIDAgMSAwIDE2MCAweiJdCiAgICB9OwogICAgZmFGbHVzaGVkID0gZmFGYWNlRmx1c2hlZDsKICAgIGZhU3RhckhhbGZTdHJva2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3Rhci1oYWxmLXN0cm9rZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzdGFyLWhhbGYtYWx0Il0sICJmNWMwIiwgIk0zMDkuNS0xOC45Yy00LjEtOC0xMi40LTEzLjEtMjEuNC0xMy4xcy0xNy4zIDUuMS0yMS40IDEzLjFMMTkzLjEgMTI1LjMgMzMuMiAxNTAuN2MtOC45IDEuNC0xNi4zIDcuNy0xOS4xIDE2LjNzLS41IDE4IDUuOCAyNC40bDExNC40IDExNC41LTI1LjIgMTU5LjljLTEuNCA4LjkgMi4zIDE3LjkgOS42IDIzLjJzMTYuOSA2LjEgMjUgMkwyODguMSA0MTcuNiA0MzIuNCA0OTFjOCA0LjEgMTcuNyAzLjMgMjUtMnMxMS0xNC4yIDkuNi0yMy4yTDQ0MS43IDMwNS45IDU1Ni4xIDE5MS40YzYuNC02LjQgOC42LTE1LjggNS44LTI0LjRzLTEwLjEtMTQuOS0xOS4xLTE2LjNMMzgzIDEyNS4zIDMwOS41LTE4Ljl6TTI2NC4xIDkxLjhsMCAyODQuMS0xMDAuMSA1MC45IDE5LjgtMTI1LjVjMS4yLTcuNi0xLjMtMTUuMy02LjctMjAuN2wtODkuOC04OS45IDEyNS41LTIwYzcuNi0xLjIgMTQuMS02IDE3LjYtMTIuOGwzMy44LTY2LjJ6bTQ4IDI4NC4xbDAtMjg0LjEgMzMuOCA2Ni4yYzMuNSA2LjggMTAgMTEuNiAxNy42IDEyLjhsMTI1LjUgMjAtODkuOCA4OS45Yy01LjQgNS40LTcuOSAxMy4xLTYuNyAyMC43bDE5LjggMTI1LjUtMTAwLjEtNTAuOXoiXQogICAgfTsKICAgIGZhU3RhckhhbGZBbHQgPSBmYVN0YXJIYWxmU3Ryb2tlOwogICAgZmFGaWxlVmlkZW8gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS12aWRlbyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM4IiwgIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwek04MCAyODhsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjQgMzUgMzVjMy4yIDMuMiA3LjUgNSAxMiA1IDkuNCAwIDE3LTcuNiAxNy0xN2wwLTk0LjFjMC05LjQtNy42LTE3LTE3LTE3LTQuNSAwLTguOCAxLjgtMTIgNWwtMzUgMzUgMC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6Il0KICAgIH07CiAgICBmYUZhY2VMYXVnaCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWxhdWdoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxhdWdoIl0sICJmNTk5IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTExOC4zIDU4LjJjLTQuMi0xMy43IDcuMS0yNi4yIDIxLjQtMjYuMmwyMzIuNiAwYzE0LjMgMCAyNS42IDEyLjUgMjEuNCAyNi4yLTE4IDU4LjktNzIuOSAxMDEuOC0xMzcuNyAxMDEuOFMxMzYuMyAzNzMuMSAxMTguMyAzMTQuMnpNMTQ0IDE5MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFMYXVnaCA9IGZhRmFjZUxhdWdoOwogICAgZmFIYW5kUG9pbnRlciA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBvaW50ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI1YSIsICJNMTYwIDY0YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxMzZjMCAxMC4zIDYuNiAxOS41IDE2LjQgMjIuOHMyMC42LS4xIDI2LjgtOC4zYzMtMy45IDcuNi02LjQgMTIuOC02LjQgOC44IDAgMTYgNy4yIDE2IDE2IDAgMTAuMyA2LjYgMTkuNSAxNi40IDIyLjhzMjAuNi0uMSAyNi44LTguM2MzLTMuOSA3LjYtNi40IDEyLjgtNi40IDcuOCAwIDE0LjMgNS42IDE1LjcgMTMgMS42IDguMiA3LjMgMTUuMSAxNS4xIDE4czE2LjcgMS42IDIzLjMtMy42YzIuNy0yLjEgNi4xLTMuNCA5LjktMy40IDguOCAwIDE2IDcuMiAxNiAxNmwwIDEyMGMwIDM5LjgtMzIuMiA3Mi03MiA3MmwtMTE2LjYgMGMtMzcuNCAwLTcyLjQtMTguNy05My4yLTQ5LjlMNTAuNyAzMTIuOWMtNC45LTcuNC0yLjktMTcuMyA0LjQtMjIuMnMxNy4zLTIuOSAyMi4yIDQuNEwxMTYgMzUzLjJjNS45IDguOCAxNi44IDEyLjcgMjYuOSA5LjdzMTctMTIuNCAxNy0yM0wxNjAgNjR6TTE3NiAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDE5Ny43QzkxLjIgMjM4IDU1LjUgMjMyLjggMjguNSAyNTAuNy0uOSAyNzAuNC04LjkgMzEwLjEgMTAuOCAzMzkuNUw3OC4zIDQ0MC44YzI5LjcgNDQuNSA3OS42IDcxLjIgMTMzLjEgNzEuMkwzMjggNTEyYzY2LjMgMCAxMjAtNTMuNyAxMjAtMTIwbDAtMTIwYzAtMzUuMy0yOC43LTY0LTY0LTY0LTQuNSAwLTguOCAuNS0xMyAxLjMtMTEuNy0xNS40LTMwLjItMjUuMy01MS0yNS4zLTYuOSAwLTEzLjUgMS4xLTE5LjcgMy4xLTExLjYtMTYuNC0zMC43LTI3LjEtNTIuMy0yNy4xLTIuNyAwLTUuNCAuMi04IC41TDI0MCA2NGMwLTM1LjMtMjguNy02NC02NC02NHptNDggMzA0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2em00OC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2YzAtOC44LTcuMi0xNi0xNi0xNnptODAgMTZjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtOTZ6Il0KICAgIH07CiAgICBmYVJlZ2lzdGVyZWQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAicmVnaXN0ZXJlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzE3NF0sICJmMjVkIiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIwMCAxNDRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTc2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC01NiAzNC40IDAgNDEgNjguM2M2LjggMTEuNCAyMS42IDE1IDMyLjkgOC4yczE1LTIxLjYgOC4yLTMyLjlsLTMwLjItNTAuM2MyNC42LTExLjUgNDEuNi0zNi40IDQxLjYtNjUuMyAwLTM5LjgtMzIuMi03Mi03Mi03MmwtODAgMHptNzIgOTZsLTQ4IDAgMC00OCA1NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04IDB6Il0KICAgIH07CiAgICBpY29uczIgPSB7CiAgICAgIGZhU3F1YXJlTWludXMsCiAgICAgIGZhTWludXNTcXVhcmUsCiAgICAgIGZhQ2FsZW5kYXJDaGVjaywKICAgICAgZmFGYWNlS2lzcywKICAgICAgZmFLaXNzLAogICAgICBmYVBhc3RlLAogICAgICBmYUZpbGVDbGlwYm9hcmQsCiAgICAgIGZhSGFuZFBvaW50TGVmdCwKICAgICAgZmFGaWxlRXhjZWwsCiAgICAgIGZhRW52ZWxvcGUsCiAgICAgIGZhU3F1YXJlQ2FyZXREb3duLAogICAgICBmYUNhcmV0U3F1YXJlRG93biwKICAgICAgZmFUcnVjaywKICAgICAgZmFCZWxsLAogICAgICBmYU1lc3NhZ2UsCiAgICAgIGZhQ29tbWVudEFsdCwKICAgICAgZmFGYWNlRGl6enksCiAgICAgIGZhRGl6enksCiAgICAgIGZhQ2FsZW5kYXJEYXlzLAogICAgICBmYUNhbGVuZGFyQWx0LAogICAgICBmYUhhbmRQb2ludFVwLAogICAgICBmYUhhbmRMaXphcmQsCiAgICAgIGZhU3F1YXJlRnVsbCwKICAgICAgZmFDaXJjbGVQYXVzZSwKICAgICAgZmFQYXVzZUNpcmNsZSwKICAgICAgZmFIYXJkRHJpdmUsCiAgICAgIGZhSGRkLAogICAgICBmYUZpbGVaaXBwZXIsCiAgICAgIGZhRmlsZUFyY2hpdmUsCiAgICAgIGZhRmxvcHB5RGlzaywKICAgICAgZmFTYXZlLAogICAgICBmYUZhY2VHcmluVG9uZ3VlU3F1aW50LAogICAgICBmYUdyaW5Ub25ndWVTcXVpbnQsCiAgICAgIGZhQ2FtZXJhLAogICAgICBmYUNhbWVyYUFsdCwKICAgICAgZmFGYWNlR3JpblN0YXJzLAogICAgICBmYUdyaW5TdGFycywKICAgICAgZmFFeWUsCiAgICAgIGZhRmFjZVNhZFRlYXIsCiAgICAgIGZhU2FkVGVhciwKICAgICAgZmFTaGFyZUZyb21TcXVhcmUsCiAgICAgIGZhU2hhcmVTcXVhcmUsCiAgICAgIGZhTm90ZVN0aWNreSwKICAgICAgZmFTdGlja3lOb3RlLAogICAgICBmYUhhbmRCYWNrRmlzdCwKICAgICAgZmFIYW5kUm9jaywKICAgICAgZmFDaGVzc1F1ZWVuLAogICAgICBmYUZhY2VHcmluVGVhcnMsCiAgICAgIGZhR3JpblRlYXJzLAogICAgICBmYVBlblRvU3F1YXJlLAogICAgICBmYUVkaXQsCiAgICAgIGZhRmFjZUdyaW5CZWFtU3dlYXQsCiAgICAgIGZhR3JpbkJlYW1Td2VhdCwKICAgICAgZmFDbG9jaywKICAgICAgZmFDbG9ja0ZvdXIsCiAgICAgIGZhRmFjZUxhdWdoV2luaywKICAgICAgZmFMYXVnaFdpbmssCiAgICAgIGZhUGFwZXJQbGFuZSwKICAgICAgZmFIZWFydCwKICAgICAgZmFGb250QXdlc29tZTogZmFGb250QXdlc29tZTIsCiAgICAgIGZhRm9udEF3ZXNvbWVGbGFnOiBmYUZvbnRBd2Vzb21lRmxhZzIsCiAgICAgIGZhRm9udEF3ZXNvbWVMb2dvRnVsbDogZmFGb250QXdlc29tZUxvZ29GdWxsMiwKICAgICAgZmFDbG9uZSwKICAgICAgZmFGb2xkZXJPcGVuLAogICAgICBmYVdpbmRvd01pbmltaXplLAogICAgICBmYVN0YXJIYWxmLAogICAgICBmYUFsYXJtQ2xvY2ssCiAgICAgIGZhTmV3c3BhcGVyLAogICAgICBmYUhvc3BpdGFsLAogICAgICBmYUhvc3BpdGFsQWx0LAogICAgICBmYUhvc3BpdGFsV2lkZSwKICAgICAgZmFDaXJjbGVTdG9wLAogICAgICBmYVN0b3BDaXJjbGUsCiAgICAgIGZhT2JqZWN0VW5ncm91cCwKICAgICAgZmFDb21tZW50LAogICAgICBmYUNoZXNzUGF3biwKICAgICAgZmFDYWxlbmRhclBsdXMsCiAgICAgIGZhQ2xpcGJvYXJkLAogICAgICBmYVRodW1ic0Rvd24sCiAgICAgIGZhSWRCYWRnZSwKICAgICAgZmFTcXVhcmVDaGVjaywKICAgICAgZmFDaGVja1NxdWFyZSwKICAgICAgZmFDaGVzc0Jpc2hvcCwKICAgICAgZmFFbnZlbG9wZU9wZW4sCiAgICAgIGZhQ2lyY2xlWG1hcmssCiAgICAgIGZhVGltZXNDaXJjbGUsCiAgICAgIGZhWG1hcmtDaXJjbGUsCiAgICAgIGZhU3F1YXJlQ2FyZXRVcCwKICAgICAgZmFDYXJldFNxdWFyZVVwLAogICAgICBmYUZpbGVJbWFnZSwKICAgICAgZmFTcXVhcmVDYXJldFJpZ2h0LAogICAgICBmYUNhcmV0U3F1YXJlUmlnaHQsCiAgICAgIGZhU3VuLAogICAgICBmYUltYWdlLAogICAgICBmYUxpZ2h0YnVsYiwKICAgICAgZmFBZGRyZXNzQ2FyZCwKICAgICAgZmFDb250YWN0Q2FyZCwKICAgICAgZmFWY2FyZCwKICAgICAgZmFGYWNlTWVoLAogICAgICBmYU1laCwKICAgICAgZmFNYXAsCiAgICAgIGZhSGFuZFBvaW50RG93biwKICAgICAgZmFGYWNlTWVoQmxhbmssCiAgICAgIGZhTWVoQmxhbmssCiAgICAgIGZhRmFjZUdyaW5Ub25ndWUsCiAgICAgIGZhR3JpblRvbmd1ZSwKICAgICAgZmFGdXRib2wsCiAgICAgIGZhRnV0Ym9sQmFsbCwKICAgICAgZmFTb2NjZXJCYWxsLAogICAgICBmYUZhY2VTdXJwcmlzZSwKICAgICAgZmFTdXJwcmlzZSwKICAgICAgZmFGb2xkZXIsCiAgICAgIGZhRm9sZGVyQmxhbmssCiAgICAgIGZhQ2xvdWQsCiAgICAgIGZhQ2lyY2xlLAogICAgICBmYUZhY2VHcmluU3F1aW50LAogICAgICBmYUdyaW5TcXVpbnQsCiAgICAgIGZhQ2lyY2xlVXNlciwKICAgICAgZmFVc2VyQ2lyY2xlLAogICAgICBmYVJlY3RhbmdsZUxpc3QsCiAgICAgIGZhTGlzdEFsdCwKICAgICAgZmFIYW5kLAogICAgICBmYUhhbmRQYXBlciwKICAgICAgZmFUaHVtYnNVcCwKICAgICAgZmFCdWlsZGluZywKICAgICAgZmFDaGVzc1Jvb2ssCiAgICAgIGZhQ2lyY2xlUXVlc3Rpb24sCiAgICAgIGZhUXVlc3Rpb25DaXJjbGUsCiAgICAgIGZhRmlsZSwKICAgICAgZmFGYWNlU2FkQ3J5LAogICAgICBmYVNhZENyeSwKICAgICAgZmFDYWxlbmRhck1pbnVzLAogICAgICBmYUZhY2VUaXJlZCwKICAgICAgZmFUaXJlZCwKICAgICAgZmFIYW5kUG9pbnRSaWdodCwKICAgICAgZmFDaXJjbGVVcCwKICAgICAgZmFBcnJvd0FsdENpcmNsZVVwLAogICAgICBmYUhhbmRTY2lzc29ycywKICAgICAgZmFHZW0sCiAgICAgIGZhUmVjdGFuZ2xlWG1hcmssCiAgICAgIGZhUmVjdGFuZ2xlVGltZXMsCiAgICAgIGZhVGltZXNSZWN0YW5nbGUsCiAgICAgIGZhV2luZG93Q2xvc2UsCiAgICAgIGZhVHJhc2hDYW4sCiAgICAgIGZhVHJhc2hBbHQsCiAgICAgIGZhTGlmZVJpbmcsCiAgICAgIGZhQ29weXJpZ2h0LAogICAgICBmYUNpcmNsZUxlZnQsCiAgICAgIGZhQXJyb3dBbHRDaXJjbGVMZWZ0LAogICAgICBmYUNhbGVuZGFyLAogICAgICBmYUZhY2VGcm93bk9wZW4sCiAgICAgIGZhRnJvd25PcGVuLAogICAgICBmYUNoYXJ0QmFyLAogICAgICBmYUJhckNoYXJ0LAogICAgICBmYUhvdXNlLAogICAgICBmYUhvbWUsCiAgICAgIGZhSG9tZUFsdCwKICAgICAgZmFIb21lTGdBbHQsCiAgICAgIGZhRmFjZUZyb3duLAogICAgICBmYUZyb3duLAogICAgICBmYVVzZXIsCiAgICAgIGZhVXNlckFsdCwKICAgICAgZmFVc2VyTGFyZ2UsCiAgICAgIGZhU25vd2ZsYWtlLAogICAgICBmYUJvb2ttYXJrLAogICAgICBmYVNxdWFyZUNhcmV0TGVmdCwKICAgICAgZmFDYXJldFNxdWFyZUxlZnQsCiAgICAgIGZhSGFuZHNoYWtlLAogICAgICBmYUhhbmRzaGFrZUFsdCwKICAgICAgZmFIYW5kc2hha2VTaW1wbGUsCiAgICAgIGZhRmFjZVNtaWxlV2luaywKICAgICAgZmFTbWlsZVdpbmssCiAgICAgIGZhRmFjZUdyaW5TcXVpbnRUZWFycywKICAgICAgZmFHcmluU3F1aW50VGVhcnMsCiAgICAgIGZhRmlsZUF1ZGlvLAogICAgICBmYUNhbGVuZGFyWG1hcmssCiAgICAgIGZhQ2FsZW5kYXJUaW1lcywKICAgICAgZmFDaXJjbGVEb3duLAogICAgICBmYUFycm93QWx0Q2lyY2xlRG93biwKICAgICAgZmFGaWxlTGluZXMsCiAgICAgIGZhRmlsZUFsdCwKICAgICAgZmFGaWxlVGV4dCwKICAgICAgZmFDb21tZW50cywKICAgICAgZmFDaXJjbGVDaGVjaywKICAgICAgZmFDaGVja0NpcmNsZSwKICAgICAgZmFNb29uLAogICAgICBmYUNsb3NlZENhcHRpb25pbmcsCiAgICAgIGZhSW1hZ2VzLAogICAgICBmYUNpcmNsZVJpZ2h0LAogICAgICBmYUFycm93QWx0Q2lyY2xlUmlnaHQsCiAgICAgIGZhSWRDYXJkLAogICAgICBmYURyaXZlcnNMaWNlbnNlLAogICAgICBmYUNpcmNsZVBsYXksCiAgICAgIGZhUGxheUNpcmNsZSwKICAgICAgZmFGYWNlTGF1Z2hCZWFtLAogICAgICBmYUxhdWdoQmVhbSwKICAgICAgZmFBZGRyZXNzQm9vaywKICAgICAgZmFDb250YWN0Qm9vaywKICAgICAgZmFIb3VyZ2xhc3MsCiAgICAgIGZhSG91cmdsYXNzRW1wdHksCiAgICAgIGZhSGVhZHBob25lcywKICAgICAgZmFIZWFkcGhvbmVzQWx0LAogICAgICBmYUhlYWRwaG9uZXNTaW1wbGUsCiAgICAgIGZhRmlsZVBvd2VycG9pbnQsCiAgICAgIGZhV2luZG93TWF4aW1pemUsCiAgICAgIGZhQ29tbWVudERvdHMsCiAgICAgIGZhQ29tbWVudGluZywKICAgICAgZmFGYWNlR3JpblRvbmd1ZVdpbmssCiAgICAgIGZhR3JpblRvbmd1ZVdpbmssCiAgICAgIGZhSG91cmdsYXNzSGFsZiwKICAgICAgZmFIb3VyZ2xhc3MyLAogICAgICBmYUNyZWRpdENhcmQsCiAgICAgIGZhQ3JlZGl0Q2FyZEFsdCwKICAgICAgZmFIYW5kU3BvY2ssCiAgICAgIGZhQmVsbFNsYXNoLAogICAgICBmYVN0YXIsCiAgICAgIGZhRmxhZywKICAgICAgZmFMZW1vbiwKICAgICAgZmFXaW5kb3dSZXN0b3JlLAogICAgICBmYUZhY2VHcmluSGVhcnRzLAogICAgICBmYUdyaW5IZWFydHMsCiAgICAgIGZhRmFjZUtpc3NCZWFtLAogICAgICBmYUtpc3NCZWFtLAogICAgICBmYUZpbGVQZGYsCiAgICAgIGZhRmFjZUdyaW5XaWRlLAogICAgICBmYUdyaW5BbHQsCiAgICAgIGZhRmFjZUxhdWdoU3F1aW50LAogICAgICBmYUxhdWdoU3F1aW50LAogICAgICBmYUZhY2VLaXNzV2lua0hlYXJ0LAogICAgICBmYUtpc3NXaW5rSGVhcnQsCiAgICAgIGZhQ29weSwKICAgICAgZmFDaGVzc0tpbmcsCiAgICAgIGZhU3F1YXJlUGx1cywKICAgICAgZmFQbHVzU3F1YXJlLAogICAgICBmYUZpbGVDb2RlLAogICAgICBmYUZhY2VHcmluV2luaywKICAgICAgZmFHcmluV2luaywKICAgICAgZmFNb25leUJpbGwxLAogICAgICBmYU1vbmV5QmlsbEFsdCwKICAgICAgZmFFeWVTbGFzaCwKICAgICAgZmFGaWxlV29yZCwKICAgICAgZmFGYWNlQW5ncnksCiAgICAgIGZhQW5ncnksCiAgICAgIGZhQ2hlc3NLbmlnaHQsCiAgICAgIGZhRmFjZUdyaW5CZWFtLAogICAgICBmYUdyaW5CZWFtLAogICAgICBmYUhhbmRQZWFjZSwKICAgICAgZmFDb21wYXNzLAogICAgICBmYVNxdWFyZSwKICAgICAgZmFGYWNlR3JpbiwKICAgICAgZmFHcmluLAogICAgICBmYUZhY2VTbWlsZSwKICAgICAgZmFTbWlsZSwKICAgICAgZmFGYWNlU21pbGVCZWFtLAogICAgICBmYVNtaWxlQmVhbSwKICAgICAgZmFGb2xkZXJDbG9zZWQsCiAgICAgIGZhS2V5Ym9hcmQsCiAgICAgIGZhRmFjZVJvbGxpbmdFeWVzLAogICAgICBmYU1laFJvbGxpbmdFeWVzLAogICAgICBmYUZhY2VHcmltYWNlLAogICAgICBmYUdyaW1hY2UsCiAgICAgIGZhQ2lyY2xlRG90LAogICAgICBmYURvdENpcmNsZSwKICAgICAgZmFPYmplY3RHcm91cCwKICAgICAgZmFGYWNlRmx1c2hlZCwKICAgICAgZmFGbHVzaGVkLAogICAgICBmYVN0YXJIYWxmU3Ryb2tlLAogICAgICBmYVN0YXJIYWxmQWx0LAogICAgICBmYUZpbGVWaWRlbywKICAgICAgZmFGYWNlTGF1Z2gsCiAgICAgIGZhTGF1Z2gsCiAgICAgIGZhSGFuZFBvaW50ZXIsCiAgICAgIGZhUmVnaXN0ZXJlZAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0Bmb3J0YXdlc29tZStmcmVlLXNvbGlkLXN2Zy1pY29uc0A3LjEuMC9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2luZGV4Lm1qcwp2YXIgcHJlZml4MywgZmEwLCBmYTEsIGZhMiwgZmEzLCBmYTQsIGZhNSwgZmE2LCBmYTcsIGZhOCwgZmE5LCBmYURvbGxhclNpZ24sIGZhRG9sbGFyLCBmYVVzZCwgZmFEb2csIGZhVHJ1Y2tNb3ZpbmcsIGZhUm90YXRlLCBmYVN5bmNBbHQsIGZhU3F1YXJlTWludXMyLCBmYU1pbnVzU3F1YXJlMiwgZmFBbGlnbkp1c3RpZnksIGZhQ2FsZW5kYXJDaGVjazIsIGZhRmFjZUtpc3MyLCBmYUtpc3MyLCBmYUtpdGNoZW5TZXQsIGZhRG5hLCBmYUNoaWxkUmVhY2hpbmcsIGZhUGFzdGUyLCBmYUZpbGVDbGlwYm9hcmQyLCBmYU1ldGVvciwgZmFHZWFycywgZmFDb2dzLCBmYUZpbGVDaXJjbGVQbHVzLCBmYUljaWNsZXMsIGZhQXJyb3dUcmVuZFVwLCBmYUhleGFnb25Ob2Rlc0JvbHQsIGZhUXVlc3Rpb24sIGZhSGFuZHNCb3VuZCwgZmFQZXJzb25XYWxraW5nTHVnZ2FnZSwgZmFGaWxlQXJyb3dEb3duLCBmYUZpbGVEb3dubG9hZCwgZmFQZXJzb25Cb290aCwgZmFMb2N1c3QsIGZhUmlnaHRMb25nLCBmYUxvbmdBcnJvd0FsdFJpZ2h0LCBmYVRydWNrRHJvcGxldCwgZmFIYW5kSG9sZGluZ01lZGljYWwsIGZhSGFuZFBvaW50TGVmdDIsIGZhQ2FsY3VsYXRvciwgZmFNaW51cywgZmFTdWJ0cmFjdCwgZmFBcnJvd1VwWkEsIGZhU29ydEFscGhhVXBBbHQsIGZhTWljcm9waG9uZVNsYXNoLCBmYVNxdWFyZVBlbiwgZmFQZW5TcXVhcmUsIGZhUGVuY2lsU3F1YXJlLCBmYUhhbmRGaXN0LCBmYUZpc3RSYWlzZWQsIGZhQ29tbWVudFNtcywgZmFTbXMsIGZhU2ltQ2FyZCwgZmFTY2FsZUJhbGFuY2VkLCBmYUJhbGFuY2VTY2FsZSwgZmFDYXIsIGZhQXV0b21vYmlsZSwgZmFDcm9wU2ltcGxlLCBmYUNyb3BBbHQsIGZhTWVkYWwsIGZhU2Nyb2xsLCBmYUZpbGVFeGNlbDIsIGZhRmlsdGVyLCBmYURydW0sIGZhTWFwUGluLCBmYVNjYWxlVW5iYWxhbmNlZEZsaXAsIGZhQmFsYW5jZVNjYWxlUmlnaHQsIGZhQXJyb3dzVG9DaXJjbGUsIGZhRW52ZWxvcGUyLCBmYUJhYnksIGZhU3F1YXJlQ2FyZXREb3duMiwgZmFDYXJldFNxdWFyZURvd24yLCBmYVRlbnQsIGZhQSwgZmFQYXJhY2h1dGVCb3gsIGZhQ2FydEFycm93RG93biwgZmFCcmlkZ2VDaXJjbGVFeGNsYW1hdGlvbiwgZmFDbG91ZEFycm93VXAsIGZhQ2xvdWRVcGxvYWQsIGZhQ2xvdWRVcGxvYWRBbHQsIGZhQXQsIGZhSW5kaWFuUnVwZWVTaWduLCBmYUluZGlhblJ1cGVlLCBmYUluciwgZmFUcnVjazIsIGZhQ2hhbGtib2FyZFVzZXIsIGZhQ2hhbGtib2FyZFRlYWNoZXIsIGZhVXNlckNoZWNrLCBmYVVzZXJOaW5qYSwgZmFQbGFudFdpbHQsIGZhV2VpZ2h0U2NhbGUsIGZhV2VpZ2h0LCBmYUNhcmV0UmlnaHQsIGZhRmxvcmluU2lnbiwgZmFCZWxsMiwgZmFMYXJpU2lnbiwgZmFNaWxsU2lnbiwgZmFQZXJzb25Tbm93Ym9hcmRpbmcsIGZhU25vd2JvYXJkaW5nLCBmYVR0eSwgZmFUZWxldHlwZSwgZmFVc2Vyc1JlY3RhbmdsZSwgZmFNb2JpbGUsIGZhTW9iaWxlQW5kcm9pZCwgZmFNb2JpbGVQaG9uZSwgZmFBcnJvd3NUdXJuVG9Eb3RzLCBmYUV4Y2xhbWF0aW9uLCBmYUNodXJjaCwgZmFUb2dnbGVPZmYsIGZhU2hvZVByaW50cywgZmFGaWxlQ2lyY2xlRXhjbGFtYXRpb24sIGZhV2FsbGV0LCBmYU1lc3NhZ2UyLCBmYUNvbW1lbnRBbHQyLCBmYVRyb3BoeSwgZmFGYWNlRGl6enkyLCBmYURpenp5MiwgZmFCYWN0ZXJpYSwgZmFFYXJEZWFmLCBmYURlYWYsIGZhRGVhZm5lc3MsIGZhSGFyZE9mSGVhcmluZywgZmFQZW9wbGVBcnJvd3MsIGZhUGVvcGxlQXJyb3dzTGVmdFJpZ2h0LCBmYUhhbmRzQ2xhcHBpbmcsIGZhVmlydXNDb3ZpZFNsYXNoLCBmYUNhbGVuZGFyRGF5czIsIGZhQ2FsZW5kYXJBbHQyLCBmYURpYW1vbmRUdXJuUmlnaHQsIGZhRGlyZWN0aW9ucywgZmFIYW5kUG9pbnRVcDIsIGZhQmV6aWVyQ3VydmUsIGZhUGVyc29uSGFsZkRyZXNzLCBmYVNxdWFyZVBvbGxIb3Jpem9udGFsLCBmYVBvbGxILCBmYVNjaG9vbENpcmNsZVhtYXJrLCBmYUhhbmRMaXphcmQyLCBmYUNoYWxrYm9hcmQsIGZhQmxhY2tib2FyZCwgZmFVcFJpZ2h0RnJvbVNxdWFyZSwgZmFFeHRlcm5hbExpbmtBbHQsIGZhU3F1YXJlRnVsbDIsIGZhQ2xvdmVyLCBmYVRlZXRoT3BlbiwgZmFCYXJzU3RhZ2dlcmVkLCBmYVJlb3JkZXIsIGZhU3RyZWFtLCBmYVdhcmVob3VzZSwgZmFTd2F0Y2hib29rLCBmYUNhbXBncm91bmQsIGZhUGVyc29uV2Fsa2luZ0Fycm93UmlnaHQsIGZhR2xhc3NlcywgZmFDaXJjbGVQYXVzZTIsIGZhUGF1c2VDaXJjbGUyLCBmYU1lbW9yeSwgZmFHaWZ0LCBmYU1vbmV5QmlsbFdoZWF0LCBmYUR1bmdlb24sIGZhU3VpdGNhc2VNZWRpY2FsLCBmYU1lZGtpdCwgZmFQZXJzb25DYW5lLCBmYUdhdWdlLCBmYURhc2hib2FyZCwgZmFHYXVnZU1lZCwgZmFUYWNob21ldGVyQWx0QXZlcmFnZSwgZmFFbnZlbG9wZU9wZW5UZXh0LCBmYVRvb2xib3gsIGZhUG93ZXJPZmYsIGZhU2lnbmFsLCBmYVNpZ25hbDUsIGZhU2lnbmFsUGVyZmVjdCwgZmFBcnJvd3NTcGluLCBmYUpvaW50LCBmYUJyYWlsbGUsIGZhQmFza2V0U2hvcHBpbmcsIGZhU2hvcHBpbmdCYXNrZXQsIGZhQnJpZGdlLCBmYVBsYW5lQXJyaXZhbCwgZmFDYXNoUmVnaXN0ZXIsIGZhUmluZywgZmFTaGFyZU5vZGVzLCBmYVNoYXJlQWx0LCBmYVBlcnNvbkNpcmNsZUV4Y2xhbWF0aW9uLCBmYUJpbm9jdWxhcnMsIGZhS2lwU2lnbiwgZmFIYXJkRHJpdmUyLCBmYUhkZDIsIGZhUmFua2luZ1N0YXIsIGZhVXNlclRpZSwgZmFFbGxpcHNpcywgZmFFbGxpcHNpc0gsIGZhU3RvcmVTbGFzaCwgZmFQZXJjZW50LCBmYVBlcmNlbnRhZ2UsIGZhRmlsZVppcHBlcjIsIGZhRmlsZUFyY2hpdmUyLCBmYURpc3BsYXksIGZhSWNvbnMsIGZhSGVhcnRNdXNpY0NhbWVyYUJvbHQsIGZhUnVsZXJWZXJ0aWNhbCwgZmFNYXBMb2NhdGlvbkRvdCwgZmFNYXBNYXJrZWRBbHQsIGZhSGVhcnRDcmFjaywgZmFIZWFydEJyb2tlbiwgZmFDb3csIGZhUnNzLCBmYUZlZWQsIGZhTWFnbmlmeWluZ0dsYXNzLCBmYVNlYXJjaCwgZmFDbG91ZE1vb24sIGZhQm94ZXNTdGFja2VkLCBmYUJveGVzLCBmYUJveGVzQWx0LCBmYUNvZGVCcmFuY2gsIGZhQmFuLCBmYUNhbmNlbCwgZmFKdWdEZXRlcmdlbnQsIGZhUmVwbHksIGZhTWFpbFJlcGx5LCBmYVN1blBsYW50V2lsdCwgZmFCYWN0ZXJpdW0sIGZhUmVjb3JkVmlueWwsIGZhRmxvcHB5RGlzazIsIGZhU2F2ZTIsIGZhVG9pbGV0c1BvcnRhYmxlLCBmYU8sIGZhUGFsZXR0ZSwgZmFVbmxvY2ssIGZhRWFyTGlzdGVuLCBmYUFzc2lzdGl2ZUxpc3RlbmluZ1N5c3RlbXMsIGZhQ29kZVB1bGxSZXF1ZXN0LCBmYUtleSwgZmFTa3VsbCwgZmFNYXJzU3Ryb2tlVXAsIGZhTWFyc1N0cm9rZVYsIGZhRmlyZUZsYW1lU2ltcGxlLCBmYUJ1cm4sIGZhVHJlZSwgZmFTbW9nLCBmYVMsIGZhSmVkaSwgZmFQZXJzb25IaWtpbmcsIGZhSGlraW5nLCBmYUFycm93c1VwVG9MaW5lLCBmYU1hcnNEb3VibGUsIGZhVGhlcm1vbWV0ZXIsIGZhUGFpbnRicnVzaCwgZmFQYWludEJydXNoLCBmYU5ldXRlciwgZmFTcXVhcmVQaG9uZUZsaXAsIGZhUGhvbmVTcXVhcmVBbHQsIGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQyLCBmYUdyaW5Ub25ndWVTcXVpbnQyLCBmYUNvbW1lbnREb2xsYXIsIGZhSGlwcG8sIGZhQm93bEZvb2QsIGZhU3F1YXJlVmlydXMsIGZhQ2xvdWRTdW5SYWluLCBmYUFycm93UmlnaHRMb25nLCBmYUxvbmdBcnJvd1JpZ2h0LCBmYUJ1aWxkaW5nVW4sIGZhVGVtcGVyYXR1cmVMb3csIGZhRG9vck9wZW4sIGZhQWxpZ25MZWZ0LCBmYUNhbWVyYTIsIGZhQ2FtZXJhQWx0MiwgZmFVc2Vyc1JheXMsIGZhUmFpbmJvdywgZmFTaXRlbWFwLCBmYUZhY2VHcmluU3RhcnMyLCBmYUdyaW5TdGFyczIsIGZhU29ydFVwLCBmYVNvcnRBc2MsIGZhRXllMiwgZmFDYXJldExlZnQsIGZhQXBwbGVXaG9sZSwgZmFBcHBsZUFsdCwgZmFTY3JvbGxUb3JhaCwgZmFUb3JhaCwgZmFIb3VzZUxvY2ssIGZhQXJyb3dzTGVmdFJpZ2h0VG9MaW5lLCBmYVRyYXNoLCBmYUZhY2VTYWRUZWFyMiwgZmFTYWRUZWFyMiwgZmFGYXgsIGZhUGVyc29uQ2lyY2xlUGx1cywgZmFIYW1zYSwgZmFQZXJzb25DaXJjbGVRdWVzdGlvbiwgZmFDbGlwYm9hcmRDaGVjaywgZmFTaGFyZUZyb21TcXVhcmUyLCBmYVNoYXJlU3F1YXJlMiwgZmFSZWNlaXB0LCBmYUVxdWFscywgZmFDaGV2cm9uVXAsIGZhVmlydXNTbGFzaCwgZmFTbGFzaCwgZmFFeHBhbmQsIGZhTm90ZVN0aWNreTIsIGZhU3RpY2t5Tm90ZTIsIGZhVGFibGVDb2x1bW5zLCBmYUNvbHVtbnMsIGZhUGVyc29uU2hlbHRlciwgZmFDaXJjbGVOb3RjaCwgZmFXYXRlciwgZmFEZWxldGVMZWZ0LCBmYUJhY2tzcGFjZSwgZmFCcm9vbUJhbGwsIGZhUXVpZGRpdGNoLCBmYVF1aWRkaXRjaEJyb29tQmFsbCwgZmFKLCBmYVNodXR0bGVTcGFjZSwgZmFTcGFjZVNodXR0bGUsIGZhWWluWWFuZywgZmFTdG9wLCBmYVRyb3dlbCwgZmFIYW5kQmFja0Zpc3QyLCBmYUhhbmRSb2NrMiwgZmFUZW1wZXJhdHVyZUhpZ2gsIGZhR3JlYXRlclRoYW4sIGZhQ3J1dGNoLCBmYVNlcHRhZ29uLCBmYUhlcHRhZ29uLCBmYVN0cmVldFZpZXcsIGZhV2F2ZVNxdWFyZSwgZmFBbmdsZUxlZnQsIGZhU2NyZXdkcml2ZXIsIGZhVHJhY3RvciwgZmFCcmlkZ2VDaXJjbGVYbWFyaywgZmFWaWFscywgZmFTdGV0aG9zY29wZSwgZmFQb2RjYXN0LCBmYUFycm93VXBSaWdodERvdHMsIGZhQ2hlc3NRdWVlbjIsIGZhQW5jaG9yQ2lyY2xlRXhjbGFtYXRpb24sIGZhRWxsaXBzaXNWZXJ0aWNhbCwgZmFFbGxpcHNpc1YsIGZhSGVhcnRDaXJjbGVFeGNsYW1hdGlvbiwgZmFCdWlsZGluZ0NpcmNsZUV4Y2xhbWF0aW9uLCBmYVBlcnNvbkFycm93VXBGcm9tTGluZSwgZmFOb3RFcXVhbCwgZmFUcmFpblRyYW0sIGZhUGxhbmVEZXBhcnR1cmUsIGZhUmlnaHRUb0JyYWNrZXQsIGZhU2lnbkluQWx0LCBmYVNkQ2FyZCwgZmFIb3VzZUNpcmNsZUV4Y2xhbWF0aW9uLCBmYVNoZWtlbFNpZ24sIGZhSWxzLCBmYVNoZWtlbCwgZmFTaGVxZWwsIGZhU2hlcWVsU2lnbiwgZmFSYWRpbywgZmFIYW5kRG90cywgZmFBbGxlcmdpZXMsIGZhQm9va1NrdWxsLCBmYUJvb2tEZWFkLCBmYVVubG9ja0tleWhvbGUsIGZhVW5sb2NrQWx0LCBmYUZpbGVBcnJvd1VwLCBmYUZpbGVVcGxvYWQsIGZhRmFjZUdyaW5UZWFyczIsIGZhR3JpblRlYXJzMiwgZmFQZW5Ub1NxdWFyZTIsIGZhRWRpdDIsIGZhRWFydGhFdXJvcGUsIGZhR2xvYmVFdXJvcGUsIGZhRmFjZUdyaW5CZWFtU3dlYXQyLCBmYUdyaW5CZWFtU3dlYXQyLCBmYUNpcmNsZUhhbGZTdHJva2UsIGZhQWRqdXN0LCBmYVBlcnNvbk1pbGl0YXJ5VG9QZXJzb24sIGZhVGFibGVDZWxsc0NvbHVtbkxvY2ssIGZhVHJ1Y2tGaWVsZFVuLCBmYUNsb2NrMiwgZmFDbG9ja0ZvdXIyLCBmYUJvb2ssIGZhRmFjZUxhdWdoV2luazIsIGZhTGF1Z2hXaW5rMiwgZmFDbG91ZE1lYXRiYWxsLCBmYUNoYXJ0QXJlYSwgZmFBcmVhQ2hhcnQsIGZhUnVwaWFoU2lnbiwgZmFUZXh0V2lkdGgsIGZhU2F0ZWxsaXRlLCBmYU1hZ25pZnlpbmdHbGFzc01pbnVzLCBmYVNlYXJjaE1pbnVzLCBmYVBlb3BsZUdyb3VwLCBmYVNxdWFyZUJpbmFyeSwgZmFNYXNrc1RoZWF0ZXIsIGZhVGhlYXRlck1hc2tzLCBmYUNhcnRQbHVzLCBmYUhhbmRzQXNsSW50ZXJwcmV0aW5nLCBmYUFtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nLCBmYUFzbEludGVycHJldGluZywgZmFIYW5kc0FtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nLCBmYVRhYmxlQ2VsbHNSb3dVbmxvY2ssIGZhUm9ja2V0LCBmYVNocmltcCwgZmFUZW5nZVNpZ24sIGZhVGVuZ2UsIGZhSG91c2VDaGltbmV5TWVkaWNhbCwgZmFDbGluaWNNZWRpY2FsLCBmYVVzZXJzU2xhc2gsIGZhUGFwZXJQbGFuZTIsIGZhQm9va0F0bGFzLCBmYUF0bGFzLCBmYVRhYmxlLCBmYUhlYXJ0MiwgZmFDaXJjbGVDaGV2cm9uVXAsIGZhQ2hldnJvbkNpcmNsZVVwLCBmYUJhdHRlcnlIYWxmLCBmYUJhdHRlcnkzLCBmYUZvbnRBd2Vzb21lMywgZmFGb250QXdlc29tZUZsYWczLCBmYUZvbnRBd2Vzb21lTG9nb0Z1bGwzLCBmYUhhbmRjdWZmcywgZmFIYXRDb3dib3lTaWRlLCBmYUluZHVzdHJ5LCBmYUxpbmVzTGVhbmluZywgZmFQYXNzcG9ydCwgZmFJbmZpbml0eSwgZmFDbG9uZTIsIGZhRm9yd2FyZCwgZmFNLCBmYVJvYWRTcGlrZXMsIGZhTW91bnRhaW4sIGZhQ2hlc3MsIGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzLCBmYVRlbXBlcmF0dXJlMywgZmFUaGVybW9tZXRlcjMsIGZhVGhlcm1vbWV0ZXJUaHJlZVF1YXJ0ZXJzLCBmYUIsIGZhU2hpZWxkVmlydXMsIGZhTGl0ZWNvaW5TaWduLCBmYURpY2VENiwgZmFHcmlwTGluZXNWZXJ0aWNhbCwgZmFHb2xmQmFsbFRlZSwgZmFHb2xmQmFsbCwgZmFIZXhhZ29uLCBmYUZvbGRlck9wZW4yLCBmYUthYWJhLCBmYUhhbmRIb2xkaW5nLCBmYVNpbmdsZVF1b3RlUmlnaHQsIGZhQm90dGxlRHJvcGxldCwgZmFXaW5kb3dNaW5pbWl6ZTIsIGZhQ2hldnJvblJpZ2h0LCBmYUVnZywgZmFMYW5kbWFya0RvbWUsIGZhTGFuZG1hcmtBbHQsIGZhV29ybSwgZmFVc2VySW5qdXJlZCwgZmFTdHJpa2V0aHJvdWdoLCBmYUJsb2csIGZhU3RvcHdhdGNoMjAsIGZhVHJ1Y2tQaWNrdXAsIGZhU2VlZGxpbmcsIGZhU3Byb3V0LCBmYVRyYW5zZ2VuZGVyLCBmYVRyYW5zZ2VuZGVyQWx0LCBmYVN0YXJIYWxmMiwgZmFQaG90b0ZpbG0sIGZhUGhvdG9WaWRlbywgZmFQdW1wTWVkaWNhbCwgZmFGaXJlLCBmYU1hZ25pZnlpbmdHbGFzc1BsdXMsIGZhU2VhcmNoUGx1cywgZmFGbGFzaywgZmFBbGlnblJpZ2h0LCBmYUNhYmxlQ2FyLCBmYVRyYW0sIGZhS2l0TWVkaWNhbCwgZmFGaXJzdEFpZCwgZmFHcmlwTGluZXMsIGZhQnVyZ2VyLCBmYUhhbWJ1cmdlciwgZmFTbm93bWFuLCBmYUhvdGVsLCBmYVByaW50LCBmYVZvbGxleWJhbGwsIGZhVm9sbGV5YmFsbEJhbGwsIGZhVHJhZmZpY0xpZ2h0LCBmYVBsYW5lQ2lyY2xlQ2hlY2ssIGZhVXNlcnMsIGZhQ2VydGlmaWNhdGUsIGZhQWxhcm1DbG9jazIsIGZhSGVsaWNvcHRlclN5bWJvbCwgZmFIb3VzZUNoaW1uZXlDcmFjaywgZmFIb3VzZURhbWFnZSwgZmFQZXJzb25NaWxpdGFyeVBvaW50aW5nLCBmYURhdGFiYXNlLCBmYU5ld3NwYXBlcjIsIGZhQ2xvdWRSYWluLCBmYU1heGltaXplLCBmYUV4cGFuZEFycm93c0FsdCwgZmFMb2NhdGlvbkFycm93LCBmYUNpdHksIGZhWFJheSwgZmFVbWJyZWxsYUJlYWNoLCBmYUFycm93UmlnaHRUb0JyYWNrZXQsIGZhU2lnbkluLCBmYUhlYWRzZXQsIGZhU3Bsb3RjaCwgZmFVcExvbmcsIGZhTG9uZ0Fycm93QWx0VXAsIGZhSGV4YWdvbk5vZGVzLCBmYUhvc3BpdGFsMiwgZmFIb3NwaXRhbEFsdDIsIGZhSG9zcGl0YWxXaWRlMiwgZmFQZXJzb25IYXJhc3NpbmcsIGZhTW9uZXlCaWxsVHJlbmRVcCwgZmFQZW5SdWxlciwgZmFQZW5jaWxSdWxlciwgZmFSZXBlYXQsIGZhQm9uZSwgZmFGaXJlRmxhbWVDdXJ2ZWQsIGZhRmlyZUFsdCwgZmFCdXNTaW1wbGUsIGZhQnVzQWx0LCBmYVZlbnVzTWFycywgZmFCbGVuZGVyLCBmYVUsIGZhU2hhcmUsIGZhTWFpbEZvcndhcmQsIGZhUGhvbmVGbGlwLCBmYVBob25lQWx0LCBmYVRvaWxldFBvcnRhYmxlLCBmYVBlcnNvblByZWduYW50LCBmYUxlc3NUaGFuLCBmYVN1cGVyc2NyaXB0LCBmYUNpcmNsZVN0b3AyLCBmYVN0b3BDaXJjbGUyLCBmYUFycm93c1VwRG93biwgZmFBcnJvd3NWLCBmYVBvb1N0b3JtLCBmYVBvb0JvbHQsIGZhVmlkZW9TbGFzaCwgZmFTcXVhcmVYbWFyaywgZmFUaW1lc1NxdWFyZSwgZmFYbWFya1NxdWFyZSwgZmFIYW5kSG9sZGluZ0Ryb3BsZXQsIGZhSGFuZEhvbGRpbmdXYXRlciwgZmFXb25TaWduLCBmYUtydywgZmFXb24sIGZhT2JqZWN0VW5ncm91cDIsIGZhQ29tbWVudDIsIGZhSGlsbEF2YWxhbmNoZSwgZmFBcnJvd3NUb0V5ZSwgZmFTbm93cGxvdywgZmFDaGFydEdhbnR0LCBmYVZpZGVvLCBmYVZpZGVvQ2FtZXJhLCBmYUNoZXNzUGF3bjIsIGZhU3luYWdvZ3VlLCBmYUJ1aWxkaW5nQ2lyY2xlQ2hlY2ssIGZhQ2FsZW5kYXJQbHVzMiwgZmFXaGVlbGNoYWlyTW92ZSwgZmFXaGVlbGNoYWlyQWx0LCBmYVVzZXJTaGllbGQsIGZhQm9sZCwgZmFIZWFydFB1bHNlLCBmYUhlYXJ0YmVhdCwgZmFTcXVhcmVSb290VmFyaWFibGUsIGZhU3F1YXJlUm9vdEFsdCwgZmFIYW5kc0J1YmJsZXMsIGZhSGFuZHNXYXNoLCBmYU1hcmtlciwgZmFDbGlwYm9hcmQyLCBmYVBsYWNlT2ZXb3JzaGlwLCBmYUNhbm5hYmlzLCBmYVBlb3BsZVJvb2YsIGZhRGlzZWFzZSwgZmFCb29rQmlibGUsIGZhQmlibGUsIGZhQ2hlc3NCb2FyZCwgZmFNYXJzLCBmYUxhcHRvcCwgZmFVc2VyWG1hcmssIGZhVXNlclRpbWVzLCBmYUZsYWdVc2EsIGZhSGFuZE1pZGRsZUZpbmdlciwgZmFNb3J0YXJQZXN0bGUsIGZhSGVhZFNpZGVDb3VnaCwgZmFQbGFuZUxvY2ssIGZhQmF0dGVyeVRocmVlUXVhcnRlcnMsIGZhQmF0dGVyeTQsIGZhRnJhbmNTaWduLCBmYUZpbHRlckNpcmNsZURvbGxhciwgZmFGdW5uZWxEb2xsYXIsIGZhQ2hlZXNlLCBmYUNpcmNsZUgsIGZhSG9zcGl0YWxTeW1ib2wsIGZhU2Nob29sLCBmYURpY2VGaXZlLCBmYVRvcm5hZG8sIGZhSmV0RmlnaHRlciwgZmFGaWdodGVySmV0LCBmYVRodW1ic0Rvd24yLCBmYUJyb29tLCBmYUZpbGVJbXBvcnQsIGZhQXJyb3dSaWdodFRvRmlsZSwgZmFVdGVuc2lscywgZmFDdXRsZXJ5LCBmYUlkQmFkZ2UyLCBmYVNwaWRlciwgZmFNb2JpbGVSZXRybywgZmFTaWduc1Bvc3QsIGZhTWFwU2lnbnMsIGZhR3JvdXBBcnJvd3NSb3RhdGUsIGZhQXJyb3dzU3BsaXRVcEFuZExlZnQsIGZhRmlsbERyaXAsIGZhU2hpZWxkSGVhcnQsIGZhUGVyc29uU2tpaW5nTm9yZGljLCBmYVNraWluZ05vcmRpYywgZmFTcXVhcmVDaGVjazIsIGZhQ2hlY2tTcXVhcmUyLCBmYUJhdGgsIGZhQmF0aHR1YiwgZmFDaGVzc0Jpc2hvcDIsIGZhUHJlc2NyaXB0aW9uQm90dGxlTWVkaWNhbCwgZmFQcmVzY3JpcHRpb25Cb3R0bGVBbHQsIGZhRHJhd1BvbHlnb24sIGZhVmVjdG9yUG9seWdvbiwgZmFJQ3Vyc29yLCBmYUhlYXJ0Q2lyY2xlUGx1cywgZmFTaGllbGREb2csIGZhR3JlYXRlclRoYW5FcXVhbCwgZmFFbnZlbG9wZU9wZW4yLCBmYU1vdW5kLCBmYVZvaWNlbWFpbCwgZmFWZXN0LCBmYUF1ZGlvRGVzY3JpcHRpb24sIGZhVywgZmFFeWVEcm9wcGVyLCBmYUV5ZURyb3BwZXJFbXB0eSwgZmFFeWVkcm9wcGVyLCBmYUNpcmNsZVhtYXJrMiwgZmFUaW1lc0NpcmNsZTIsIGZhWG1hcmtDaXJjbGUyLCBmYVRyYWlsZXIsIGZhVHVya2lzaExpcmFTaWduLCBmYVRyeSwgZmFUdXJraXNoTGlyYSwgZmFWb2xjYW5vLCBmYVdhbmRTcGFya2xlcywgZmFNaWNyb3Bob25lLCBmYUNyb3duLCBmYVRlbnRBcnJvd1R1cm5MZWZ0LCBmYVRydWNrRmFzdCwgZmFTaGlwcGluZ0Zhc3QsIGZhVXNlclBlbiwgZmFVc2VyRWRpdCwgZmFVc2VyQ2xvY2ssIGZhU2hvd2VyLCBmYVNxdWFyZUNhcmV0VXAyLCBmYUNhcmV0U3F1YXJlVXAyLCBmYU1hcExvY2F0aW9uLCBmYU1hcE1hcmtlZCwgZmFQZW5GYW5jeSwgZmFFdXJvU2lnbiwgZmFFdXIsIGZhRXVybywgZmFIb3VzZUNpcmNsZVhtYXJrLCBmYUxpcmFTaWduLCBmYVllblNpZ24sIGZhQ255LCBmYUpweSwgZmFSbWIsIGZhWWVuLCBmYUJveE9wZW4sIGZhVHJ1Y2tGaWVsZCwgZmFMb2NhdGlvblBpbkxvY2ssIGZhUGVyc29uUHJheWluZywgZmFQcmF5LCBmYUNsaXBib2FyZExpc3QsIGZhU2Fja0RvbGxhciwgZmFNb3VudGFpblN1biwgZmFBcnJvd1VwV2lkZVNob3J0LCBmYVNvcnRBbW91bnRVcCwgZmFVc2Vyc0xpbmUsIGZhU3Rhck9mRGF2aWQsIGZhTm90ZXNNZWRpY2FsLCBmYUF1c3RyYWxTaWduLCBmYUNsaXBib2FyZFVzZXIsIGZhRmlsZUltYWdlMiwgZmFTcXVhcmVDYXJldFJpZ2h0MiwgZmFDYXJldFNxdWFyZVJpZ2h0MiwgZmFWaWFsLCBmYUhlbGljb3B0ZXIsIGZhTWl0dGVuLCBmYUdhc1B1bXAsIGZhRW52ZWxvcGVDaXJjbGVDaGVjaywgZmFQZXJzb25Ta2F0aW5nLCBmYVNrYXRpbmcsIGZhU3VuMiwgZmFCYXNlYmFsbCwgZmFCYXNlYmFsbEJhbGwsIGZhSW1hZ2UyLCBmYU5vdGRlZiwgZmFCYXNrZXRiYWxsLCBmYUJhc2tldGJhbGxCYWxsLCBmYVBlbmNpbCwgZmFQZW5jaWxBbHQsIGZhUGVyc29uV2Fsa2luZ0Fycm93TG9vcExlZnQsIGZhRGljZVNpeCwgZmFBbmdsZXNEb3duLCBmYUFuZ2xlRG91YmxlRG93biwgZmFTeXJpbmdlLCBmYVdoZWF0QXduLCBmYVdoZWF0QWx0LCBmYVBsYW5lVXAsIGZhQWxpZ25DZW50ZXIsIGZhSG9ja2V5UHVjaywgZmFDaXJjbGVBcnJvd0xlZnQsIGZhQXJyb3dDaXJjbGVMZWZ0LCBmYVBsdWdDaXJjbGVCb2x0LCBmYVJlc3Ryb29tLCBmYUFuY2hvckxvY2ssIGZhVGltZWxpbmUsIGZhTGlnaHRidWxiMiwgZmFDaXJjbGVBcnJvd1JpZ2h0LCBmYUFycm93Q2lyY2xlUmlnaHQsIGZhTWFyc0FuZFZlbnVzLCBmYU5ldHdvcmtXaXJlZCwgZmFCdWlsZGluZ1NoaWVsZCwgZmFDb2RlLCBmYUZlYXRoZXJQb2ludGVkLCBmYUZlYXRoZXJBbHQsIGZhRmlsZUNpcmNsZVF1ZXN0aW9uLCBmYVNpZ25hdHVyZSwgZmFFYXJ0aEFtZXJpY2FzLCBmYUVhcnRoLCBmYUVhcnRoQW1lcmljYSwgZmFHbG9iZUFtZXJpY2FzLCBmYUNhcnJvdCwgZmFUZW1wZXJhdHVyZUZ1bGwsIGZhVGVtcGVyYXR1cmU0LCBmYVRoZXJtb21ldGVyNCwgZmFUaGVybW9tZXRlckZ1bGwsIGZhVGFibGVDZWxsc1Jvd0xvY2ssIGZhQm9sdExpZ2h0bmluZywgZmFDbG91ZFNob3dlcnNXYXRlciwgZmFBcnJvd1VwTG9uZywgZmFMb25nQXJyb3dVcCwgZmFBZGRyZXNzQ2FyZDIsIGZhQ29udGFjdENhcmQyLCBmYVZjYXJkMiwgZmFBbmdsZVJpZ2h0LCBmYUZhY2VNZWgyLCBmYU1laDIsIGZhQXJyb3dVcEZyb21Hcm91bmRXYXRlciwgZmFNYXAyLCBmYVVzZXJQbHVzLCBmYVZlbnVzLCBmYURpYWdyYW1TdWNjZXNzb3IsIGZhSGVhZFNpZGVDb3VnaFNsYXNoLCBmYURpYWdyYW1Qcm9qZWN0LCBmYVByb2plY3REaWFncmFtLCBmYVRlcm1pbmFsLCBmYUhvdXNlRmlyZSwgZmFNYXNrLCBmYUh1cnJpY2FuZSwgZmFFYXJ0aEFmcmljYSwgZmFHbG9iZUFmcmljYSwgZmFUaHVtYnRhY2ssIGZhVGh1bWJUYWNrLCBmYUhhbmRQb2ludERvd24yLCBmYUZhY2VNZWhCbGFuazIsIGZhTWVoQmxhbmsyLCBmYVRlbXBlcmF0dXJlRW1wdHksIGZhVGVtcGVyYXR1cmUwLCBmYVRoZXJtb21ldGVyMCwgZmFUaGVybW9tZXRlckVtcHR5LCBmYUJvcmRlck5vbmUsIGZhSGlnaGxpZ2h0ZXIsIGZhTW9uZXlCaWxsV2F2ZSwgZmFUb2lsZXRQYXBlclNsYXNoLCBmYUZpbGVTaGllbGQsIGZhVGV4dEhlaWdodCwgZmFGYWNlR3JpblRvbmd1ZTIsIGZhR3JpblRvbmd1ZTIsIGZhRmlsZVNpZ25hdHVyZSwgZmFCdWlsZGluZ1doZWF0LCBmYVBsdWdDaXJjbGVNaW51cywgZmFGdXRib2wyLCBmYUZ1dGJvbEJhbGwyLCBmYVNvY2NlckJhbGwyLCBmYUNpcmNsZVBsdXMsIGZhUGx1c0NpcmNsZSwgZmFCcmF6aWxpYW5SZWFsU2lnbiwgZmFTdGFyQW5kQ3Jlc2NlbnQsIGZhRmFjZVN1cnByaXNlMiwgZmFTdXJwcmlzZTIsIGZhSG9zcGl0YWxVc2VyLCBmYUFycm93RG93blVwTG9jaywgZmFGb2xkZXIyLCBmYUZvbGRlckJsYW5rMiwgZmFIb2xseUJlcnJ5LCBmYVZlbnVzRG91YmxlLCBmYUNsaXBib2FyZFF1ZXN0aW9uLCBmYUhvdGRvZywgZmFBcnJvd1VwRnJvbUJyYWNrZXQsIGZhTWljcm9zY29wZSwgZmFDbG91ZDIsIGZhQmFzZWJhbGxCYXRCYWxsLCBmYUNhclJlYXIsIGZhQ2FyQWx0LCBmYVRodW1idGFja1NsYXNoLCBmYVRodW1iVGFja1NsYXNoLCBmYVBsdXNNaW51cywgZmFIb3VzZUNpcmNsZUNoZWNrLCBmYUNhbGVuZGFyRGF5LCBmYUNpcmNsZTIsIGZhTW9iaWxlVmlicmF0ZSwgZmFGYWNlR3JpblNxdWludDIsIGZhR3JpblNxdWludDIsIGZhVXNlcnNCZXR3ZWVuTGluZXMsIGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcmssIGZhVGFibGVMaXN0LCBmYVRoTGlzdCwgZmFGbGFza1ZpYWwsIGZhQ2lyY2xlRXhjbGFtYXRpb24sIGZhRXhjbGFtYXRpb25DaXJjbGUsIGZhVGF4aSwgZmFDYWIsIGZhVGV4dFNsYXNoLCBmYVJlbW92ZUZvcm1hdCwgZmFQZW9wbGVQdWxsaW5nLCBmYUJhY2t3YXJkLCBmYUNhckJ1cnN0LCBmYUNhckNyYXNoLCBmYUxpbmssIGZhQ2hhaW4sIGZhQmFja3dhcmRTdGVwLCBmYVN0ZXBCYWNrd2FyZCwgZmFYLCBmYUNpcmNsZVVzZXIyLCBmYVVzZXJDaXJjbGUyLCBmYVJlY3RhbmdsZUxpc3QyLCBmYUxpc3RBbHQyLCBmYUhhbmQyLCBmYUhhbmRQYXBlcjIsIGZhVmFuU2h1dHRsZSwgZmFTaHV0dGxlVmFuLCBmYVN0YWlycywgZmFIb3JzZUhlYWQsIGZhVmF1bHQsIGZhRHJ1bVN0ZWVscGFuLCBmYVRodW1ic1VwMiwgZmFTdGFtcCwgZmFNZW5vcmFoLCBmYUNoaWxkcmVuLCBmYUNoYXJ0TGluZSwgZmFMaW5lQ2hhcnQsIGZhU3F1YXJlRW52ZWxvcGUsIGZhRW52ZWxvcGVTcXVhcmUsIGZhQmFuU21va2luZywgZmFTbW9raW5nQmFuLCBmYVRydWNrRnJvbnQsIGZhQnVpbGRpbmcyLCBmYUJ1bGxzZXllLCBmYUFycm93TGVmdExvbmcsIGZhTG9uZ0Fycm93TGVmdCwgZmFDaGVzc1Jvb2syLCBmYUJsZW5kZXJQaG9uZSwgZmFBcnJvd1R1cm5VcCwgZmFMZXZlbFVwLCBmYUJpY3ljbGUsIGZhQ2lyY2xlQXJyb3dEb3duLCBmYUFycm93Q2lyY2xlRG93biwgZmFHZWFyLCBmYUNvZywgZmFNYXJzQW5kVmVudXNCdXJzdCwgZmFPdHRlciwgZmFDaXJjbGVDaGV2cm9uTGVmdCwgZmFDaGV2cm9uQ2lyY2xlTGVmdCwgZmFDaXJjbGVRdWVzdGlvbjIsIGZhUXVlc3Rpb25DaXJjbGUyLCBmYVdhbGtpZVRhbGtpZSwgZmFVc2VyR3JvdXAsIGZhVXNlckZyaWVuZHMsIGZhSG91c2VDaGltbmV5LCBmYUhvbWVMZywgZmFSaWdodEZyb21CcmFja2V0LCBmYVNpZ25PdXRBbHQsIGZhRmlsZTIsIGZhUGxhbmVTbGFzaCwgZmFDbG91ZFNob3dlcnNIZWF2eSwgZmFQZXJzb25GYWxsaW5nLCBmYVR1cm5Eb3duLCBmYUxldmVsRG93bkFsdCwgZmFVcFJpZ2h0QW5kRG93bkxlZnRGcm9tQ2VudGVyLCBmYUV4cGFuZEFsdCwgZmFVc2VyVGFnLCBmYUhhbmRTcGFya2xlcywgZmFBcnJvd3NUb0RvdCwgZmFGYWNlU2FkQ3J5MiwgZmFTYWRDcnkyLCBmYURvbmdTaWduLCBmYVBlb3BsZUxpbmUsIGZhU3F1YXJlUnNzLCBmYVJzc1NxdWFyZSwgZmFDYWxlbmRhck1pbnVzMiwgZmFDaGFydERpYWdyYW0sIGZhRmFjZVRpcmVkMiwgZmFUaXJlZDIsIGZhSGFuZFBvaW50UmlnaHQyLCBmYUFycm93VXAsIGZhQ3ViZXNTdGFja2VkLCBmYUNoaWxkQ29tYmF0YW50LCBmYUNoaWxkUmlmbGUsIGZhVmVzdFBhdGNoZXMsIGZhTWFydGluaUdsYXNzRW1wdHksIGZhR2xhc3NNYXJ0aW5pLCBmYU1hZ25ldCwgZmFSb2FkQmFycmllciwgZmFDb21wYXNzRHJhZnRpbmcsIGZhRHJhZnRpbmdDb21wYXNzLCBmYVNxdWFyZVBlcnNvbkNvbmZpbmVkLCBmYVBsYXRlV2hlYXQsIGZhU2lnbkhhbmdpbmcsIGZhU2lnbiwgZmFDYXJCYXR0ZXJ5LCBmYUJhdHRlcnlDYXIsIGZhU2hpcnQsIGZhVFNoaXJ0LCBmYVRzaGlydCwgZmFQYXJhZ3JhcGgsIGZhRW52ZWxvcGVzQnVsaywgZmFNYWlsQnVsaywgZmFHdWl0YXIsIGZhU3VpdGNhc2UsIGZhQ2lyY2xlVXAyLCBmYUFycm93QWx0Q2lyY2xlVXAyLCBmYUYsIGZhWG1hcmtzTGluZXMsIGZhRWFydGhPY2VhbmlhLCBmYUdsb2JlT2NlYW5pYSwgZmFDb21tZW50U2xhc2gsIGZhUGxheSwgZmFWaWFsQ2lyY2xlQ2hlY2ssIGZhQnJpZGdlQ2lyY2xlQ2hlY2ssIGZhQ2VkaVNpZ24sIGZhUHV6emxlUGllY2UsIGZhSGVsbWV0VW4sIGZhR2xhc3NXYXRlciwgZmFIZWFydENpcmNsZUJvbHQsIGZhUHVtcFNvYXAsIGZhSGFuZFNjaXNzb3JzMiwgZmFEb2xseSwgZmFEb2xseUJveCwgZmFQYXBlcmNsaXAsIGZhRGVtb2NyYXQsIGZhU3F1YXJlQXJyb3dVcFJpZ2h0LCBmYUV4dGVybmFsTGlua1NxdWFyZSwgZmFGZXJyeSwgZmFNb3NxdWl0bywgZmFCdWlsZGluZ0NpcmNsZUFycm93UmlnaHQsIGZhTGVmdFJpZ2h0LCBmYUFycm93c0FsdEgsIGZhVmlydXMsIGZhR2VtMiwgZmFUb2lsZXQsIGZhU2luZ2xlUXVvdGVMZWZ0LCBmYU1vbmV5QmlsbHMsIGZhVGFibGV0QnV0dG9uLCBmYVJlY3RhbmdsZVhtYXJrMiwgZmFSZWN0YW5nbGVUaW1lczIsIGZhVGltZXNSZWN0YW5nbGUyLCBmYVdpbmRvd0Nsb3NlMiwgZmFXcmVuY2gsIGZhVHJhc2hDYW4yLCBmYVRyYXNoQWx0MiwgZmFUYWJsZUNlbGxzLCBmYVRoLCBmYVJpYmJvbiwgZmFMYW5kbWFya0ZsYWcsIGZhVXBEb3duTGVmdFJpZ2h0LCBmYUFycm93c0FsdCwgZmFDYXJTaWRlLCBmYVRyYXNoQXJyb3dVcCwgZmFUcmFzaFJlc3RvcmUsIGZhTGlmZVJpbmcyLCBmYUNvcHlyaWdodDIsIGZhRmlsZVByZXNjcmlwdGlvbiwgZmFFcmFzZXIsIGZhSG91cmdsYXNzU3RhcnQsIGZhSG91cmdsYXNzMSwgZmFDaXJjbGVMZWZ0MiwgZmFBcnJvd0FsdENpcmNsZUxlZnQyLCBmYUNydXplaXJvU2lnbiwgZmFTbW9raW5nLCBmYVNxdWFyZVBvbGxWZXJ0aWNhbCwgZmFQb2xsLCBmYVBlcnNvbkNpcmNsZU1pbnVzLCBmYUJpb2hhemFyZCwgZmFCZWxsQ29uY2llcmdlLCBmYUNvbmNpZXJnZUJlbGwsIGZhUnVsZXJIb3Jpem9udGFsLCBmYUhvcnNlLCBmYUNhbGVuZGFyMiwgZmFIYW5kc0hvbGRpbmdDaGlsZCwgZmFJdGFsaWMsIGZhS2hhbmRhLCBmYUZhY2VGcm93bk9wZW4yLCBmYUZyb3duT3BlbjIsIGZhQ2hlY2ssIGZhRmluZ2VycHJpbnQsIGZhQ2hhcmdpbmdTdGF0aW9uLCBmYVVzZXJMb2NrLCBmYU1vYmlsZVNjcmVlbkJ1dHRvbiwgZmFNb2JpbGVBbHQsIGZhQW5jaG9yQ2lyY2xlQ2hlY2ssIGZhUGVyc29uV2Fsa2luZ1dpdGhDYW5lLCBmYUJsaW5kLCBmYUZpbGVXYXZlZm9ybSwgZmFGaWxlTWVkaWNhbEFsdCwgZmFIb3VzZUNyYWNrLCBmYUhhdFdpemFyZCwgZmFVc2VyRG9jdG9yLCBmYVVzZXJNZCwgZmFDaGFydEJhcjIsIGZhQmFyQ2hhcnQyLCBmYVNwcmF5Q2FuU3BhcmtsZXMsIGZhQWlyRnJlc2hlbmVyLCBmYUJhaHRTaWduLCBmYVRlbXBlcmF0dXJlQXJyb3dVcCwgZmFUZW1wZXJhdHVyZVVwLCBmYVdlYkF3ZXNvbWUyLCBmYU5vbkJpbmFyeSwgZmFOLCBmYUFycm93c1VwRG93bkxlZnRSaWdodCwgZmFBcnJvd3MsIGZhSG91c2UyLCBmYUhvbWUyLCBmYUhvbWVBbHQyLCBmYUhvbWVMZ0FsdDIsIGZhU3Bpbm5lciwgZmFHYXZlbCwgZmFMZWdhbCwgZmFUaWNrZXRTaW1wbGUsIGZhVGlja2V0QWx0LCBmYURvdmUsIGZhVGFycERyb3BsZXQsIGZhVHJlZUNpdHksIGZhVHVyblVwLCBmYUxldmVsVXBBbHQsIGZhVGVtcGVyYXR1cmVRdWFydGVyLCBmYVRlbXBlcmF0dXJlMSwgZmFUaGVybW9tZXRlcjEsIGZhVGhlcm1vbWV0ZXJRdWFydGVyLCBmYVNsaWRlcnMsIGZhU2xpZGVyc0gsIGZhTW9zcXVlLCBmYUgsIGZhSW5mbywgZmFQZXJzb25XYWxraW5nLCBmYVdhbGtpbmcsIGZhQXJyb3dUdXJuRG93biwgZmFMZXZlbERvd24sIGZhUm9hZCwgZmFTcGlyYWwsIGZhRmFjZUZyb3duMiwgZmFGcm93bjIsIGZhV2luZUdsYXNzRW1wdHksIGZhV2luZUdsYXNzQWx0LCBmYUNsYXBwZXJib2FyZCwgZmFGb3J3YXJkU3RlcCwgZmFTdGVwRm9yd2FyZCwgZmFTcXVhcmVVcFJpZ2h0LCBmYUV4dGVybmFsTGlua1NxdWFyZUFsdCwgZmFCb29rSm91cm5hbFdoaWxscywgZmFKb3VybmFsV2hpbGxzLCBmYUNoYW1wYWduZUdsYXNzZXMsIGZhR2xhc3NDaGVlcnMsIGZhRHVtcHN0ZXIsIGZhSGVhcnRDaXJjbGVYbWFyaywgZmFDb21wdXRlciwgZmFXYW5kTWFnaWMsIGZhTWFnaWMsIGZhQnJhaW4sIGZhQnJpZWZjYXNlTWVkaWNhbCwgZmFIb3VzZU1lZGljYWxDaXJjbGVFeGNsYW1hdGlvbiwgZmFDb2RlQ29tbWl0LCBmYVBlcnNvbkJyZWFzdGZlZWRpbmcsIGZhUGVyc29uUmF5cywgZmFNYW5hdFNpZ24sIGZhU29ydCwgZmFVbnNvcnRlZCwgZmFDaXJjbGVSYWRpYXRpb24sIGZhUmFkaWF0aW9uQWx0LCBmYUxhcHRvcENvZGUsIGZhU2luaywgZmFBcnJvd1VwRnJvbVdhdGVyUHVtcCwgZmFNaWNyb3Bob25lTGluZXNTbGFzaCwgZmFNaWNyb3Bob25lQWx0U2xhc2gsIGZhU2VydmVyLCBmYVVzZXIyLCBmYVVzZXJBbHQyLCBmYVVzZXJMYXJnZTIsIGZhU25vd2ZsYWtlMiwgZmFTa3VsbENyb3NzYm9uZXMsIGZhUGVzb1NpZ24sIGZhV2luZUdsYXNzLCBmYVRlbXBlcmF0dXJlSGFsZiwgZmFUZW1wZXJhdHVyZTIsIGZhVGhlcm1vbWV0ZXIyLCBmYVRoZXJtb21ldGVySGFsZiwgZmFUaWNrZXQsIGZhV2hlYXRBd25DaXJjbGVFeGNsYW1hdGlvbiwgZmFBcnJvd3NUdXJuUmlnaHQsIGZhQ2FuZHlDYW5lLCBmYVdoZWVsY2hhaXIsIGZhU3BlbGxDaGVjaywgZmFWb2x1bWVPZmYsIGZhTHVuZ3MsIGZhQm9va21hcmsyLCBmYUJhcmNvZGUsIGZhTGlzdE9sLCBmYUxpc3QxMiwgZmFMaXN0TnVtZXJpYywgZmFGaWxlQ2lyY2xlWG1hcmssIGZhQ3ViZSwgZmFUYXBlLCBmYUJvbWIsIGZhU2NhbGVVbmJhbGFuY2VkLCBmYUJhbGFuY2VTY2FsZUxlZnQsIGZhU3F1YXJlQ2FyZXRMZWZ0MiwgZmFDYXJldFNxdWFyZUxlZnQyLCBmYVJ1bGVyLCBmYUksIGZhVm9sdW1lWG1hcmssIGZhVm9sdW1lTXV0ZSwgZmFWb2x1bWVUaW1lcywgZmFBcmNod2F5LCBmYVBlcnNvbkRpZ2dpbmcsIGZhRGlnZ2luZywgZmFHYXVnZUhpZ2gsIGZhVGFjaG9tZXRlckFsdCwgZmFUYWNob21ldGVyQWx0RmFzdCwgZmFHZW5kZXJsZXNzLCBmYUNsb3VkU3VuLCBmYUFycm93UmlnaHQsIGZhSGFuZHNoYWtlMiwgZmFIYW5kc2hha2VBbHQyLCBmYUhhbmRzaGFrZVNpbXBsZTIsIGZhUGVyc29uU2tpaW5nLCBmYVNraWluZywgZmFCcmlkZ2VXYXRlciwgZmFCdWlsZGluZ05nbywgZmFJZ2xvbywgZmFDaXJjbGVEb2xsYXJUb1Nsb3QsIGZhRG9uYXRlLCBmYVksIGZhRmFjZVNtaWxlV2luazIsIGZhU21pbGVXaW5rMiwgZmFEaWNlRm91ciwgZmFGYWNlR3JpblNxdWludFRlYXJzMiwgZmFHcmluU3F1aW50VGVhcnMyLCBmYUZpbGVBdWRpbzIsIGZhQXJyb3dzRG93blRvTGluZSwgZmFHLCBmYVZpaGFyYSwgZmFGbGFnQ2hlY2tlcmVkLCBmYUdhdWdlU2ltcGxlLCBmYUdhdWdlU2ltcGxlTWVkLCBmYVRhY2hvbWV0ZXJBdmVyYWdlLCBmYVJpZ2h0TGVmdCwgZmFFeGNoYW5nZUFsdCwgZmFQaWxscywgZmFFeHBsb3Npb24sIGZhQXJyb3dzRG93blRvUGVvcGxlLCBmYVVzZXJzVmlld2ZpbmRlciwgZmFDYXJPbiwgZmFTbGVpZ2gsIGZhRHVtYmJlbGwsIGZhQmFieUNhcnJpYWdlLCBmYUNhcnJpYWdlQmFieSwgZmFLaXdpQmlyZCwgZmFDYWxlbmRhclhtYXJrMiwgZmFDYWxlbmRhclRpbWVzMiwgZmFDaXJjbGVEb3duMiwgZmFBcnJvd0FsdENpcmNsZURvd24yLCBmYUZpbGVNZWRpY2FsLCBmYVhtYXJrLCBmYUNsb3NlLCBmYU11bHRpcGx5LCBmYVJlbW92ZSwgZmFUaW1lcywgZmFTaGFwZXMsIGZhVHJpYW5nbGVDaXJjbGVTcXVhcmUsIGZhRGljZU9uZSwgZmFMb2NrT3BlbiwgZmFQZXBwZXJIb3QsIGZhRHJvcGxldFNsYXNoLCBmYVRpbnRTbGFzaCwgZmFEcm9wbGV0LCBmYVRpbnQsIGZhRmlsZUxpbmVzMiwgZmFGaWxlQWx0MiwgZmFGaWxlVGV4dDIsIGZhQ29tbWVudHNEb2xsYXIsIGZhTWFnbmlmeWluZ0dsYXNzTG9jYXRpb24sIGZhU2VhcmNoTG9jYXRpb24sIGZhRmlsZUludm9pY2UsIGZhUGVudGFnb24sIGZhUmVwdWJsaWNhbiwgZmFTaG9wLCBmYVN0b3JlQWx0LCBmYUZpbG0sIGZhRmlsbUFsdCwgZmFGaWxtU2ltcGxlLCBmYUJ1aWxkaW5nQ2lyY2xlWG1hcmssIGZhQ29tbWVudHMyLCBmYVRhZ3MsIGZhR3VuLCBmYUNpcmNsZUNoZWNrMiwgZmFDaGVja0NpcmNsZTIsIGZhSWRDYXJkQ2xpcCwgZmFJZENhcmRBbHQsIGZhTW9vbjIsIGZhT2lsV2VsbCwgZmFUYWNob2dyYXBoRGlnaXRhbCwgZmFEaWdpdGFsVGFjaG9ncmFwaCwgZmFUYWJsZXQsIGZhVGFibGV0QW5kcm9pZCwgZmFSdWJsZVNpZ24sIGZhUm91YmxlLCBmYVJ1YiwgZmFSdWJsZSwgZmFDbG9zZWRDYXB0aW9uaW5nMiwgZmFQZW4sIGZhUGxhbmUsIGZhSW1hZ2VzMiwgZmFNb2JpbGVTY3JlZW4sIGZhTW9iaWxlQW5kcm9pZEFsdCwgZmFHdWFyYW5pU2lnbiwgZmFCYWdTaG9wcGluZywgZmFTaG9wcGluZ0JhZywgZmFDaXJjbGVSaWdodDIsIGZhQXJyb3dBbHRDaXJjbGVSaWdodDIsIGZhUGhvbmVWb2x1bWUsIGZhVm9sdW1lQ29udHJvbFBob25lLCBmYUN1YmVzLCBmYVBob25lLCBmYVRvcmlpR2F0ZSwgZmFCYWNvbiwgZmFQZXJzb25GYWxsaW5nQnVyc3QsIGZhUXVvdGVSaWdodCwgZmFRdW90ZVJpZ2h0QWx0LCBmYUhvdXNlTWVkaWNhbEZsYWcsIGZhUHJlc2NyaXB0aW9uLCBmYURpY2VUaHJlZSwgZmFCdWlsZGluZ0xvY2ssIGZhSWRDYXJkMiwgZmFEcml2ZXJzTGljZW5zZTIsIGZhQ2lyY2xlUGxheTIsIGZhUGxheUNpcmNsZTIsIGZhRmFjZUxhdWdoQmVhbTIsIGZhTGF1Z2hCZWFtMiwgZmFMZWFmLCBmYUhvdXNlQ2hpbW5leVVzZXIsIGZhUm90YXRlUmlnaHQsIGZhUmVkb0FsdCwgZmFSb3RhdGVGb3J3YXJkLCBmYVRvb3RoLCBmYUhvdXNlQ2hpbW5leVdpbmRvdywgZmFNb3RvcmN5Y2xlLCBmYUJhY2t3YXJkRmFzdCwgZmFGYXN0QmFja3dhcmQsIGZhQWRkcmVzc0Jvb2syLCBmYUNvbnRhY3RCb29rMiwgZmFTYWlsYm9hdCwgZmFCb29rQm9va21hcmssIGZhTWFnbmlmeWluZ0dsYXNzQXJyb3dSaWdodCwgZmFNaWNyb3Bob25lTGluZXMsIGZhTWljcm9waG9uZUFsdCwgZmFSZXBseUFsbCwgZmFNYWlsUmVwbHlBbGwsIGZhVW5pdmVyc2FsQWNjZXNzLCBmYVRvaWxldFBhcGVyLCBmYVRvaWxldFBhcGVyQWx0LCBmYVRvaWxldFBhcGVyQmxhbmssIGZhVnJDYXJkYm9hcmQsIGZhUGl6emFTbGljZSwgZmFTcHJheUNhbiwgZmFWb2x1bWVMb3csIGZhVm9sdW1lRG93biwgZmFDcm9zcywgZmFQZXJzb24sIGZhTWFsZSwgZmFIb3VyZ2xhc3MzLCBmYUhvdXJnbGFzc0VtcHR5MiwgZmFGaXNoLCBmYURydW1zdGlja0JpdGUsIGZhQ2hhcnRTaW1wbGUsIGZhQXRvbSwgZmFQLCBmYUpldEZpZ2h0ZXJVcCwgZmFQbHVnQ2lyY2xlWG1hcmssIGZhU2hlZXRQbGFzdGljLCBmYVYsIGZhTGlzdCwgZmFMaXN0U3F1YXJlcywgZmFTb2xhclBhbmVsLCBmYUxhbmRNaW5lT24sIGZhSGVhZHBob25lczIsIGZhSGVhZHBob25lc0FsdDIsIGZhSGVhZHBob25lc1NpbXBsZTIsIGZhQnVzLCBmYUZpbGVQb3dlcnBvaW50MiwgZmFRdW90ZUxlZnQsIGZhUXVvdGVMZWZ0QWx0LCBmYUNoZXZyb25Eb3duLCBmYUVhcnRoQXNpYSwgZmFHbG9iZUFzaWEsIGZhQ2VudFNpZ24sIGZhU2hpZWxkQ2F0LCBmYVNjaG9vbENpcmNsZUNoZWNrLCBmYU1hcnRpbmlHbGFzcywgZmFHbGFzc01hcnRpbmlBbHQsIGZhUGx1ZywgZmFQYW5vcmFtYSwgZmFDbG9ja1JvdGF0ZUxlZnQsIGZhSGlzdG9yeSwgZmFKYXJXaGVhdCwgZmFDbG91ZEFycm93RG93biwgZmFDbG91ZERvd25sb2FkLCBmYUNsb3VkRG93bmxvYWRBbHQsIGZhVHJ1Y2tSYW1wQm94LCBmYVRydWNrTG9hZGluZywgZmFBbmdsZURvd24sIGZhUGx1Z0NpcmNsZUNoZWNrLCBmYVdpbmRvd01heGltaXplMiwgZmFIYW5kc0hvbGRpbmdDaXJjbGUsIGZhTG9jYXRpb25QaW4sIGZhTWFwTWFya2VyLCBmYUJvd2xpbmdCYWxsLCBmYUNhcnRGbGF0YmVkLCBmYURvbGx5RmxhdGJlZCwgZmFIb3VzZVVzZXIsIGZhSG9tZVVzZXIsIGZhR2hvc3QsIGZhQ29tbWVudE5vZGVzLCBmYVBlcnNvbkFycm93RG93blRvTGluZSwgZmFQbHVnQ2lyY2xlUGx1cywgZmFQZXJzb25Td2ltbWluZywgZmFTd2ltbWVyLCBmYUNvbW1lbnREb3RzMiwgZmFDb21tZW50aW5nMiwgZmFDaGFydFBpZSwgZmFQaWVDaGFydCwgZmFGcm9nLCBmYVdpbmVCb3R0bGUsIGZhSW5ib3gsIGZhU3F1YXJlSCwgZmFIU3F1YXJlLCBmYUhvdXNlTWVkaWNhbCwgZmFDaXJjbGVDaGV2cm9uUmlnaHQsIGZhQ2hldnJvbkNpcmNsZVJpZ2h0LCBmYUZpbGVDc3YsIGZhSGF0Q293Ym95LCBmYUZhY2VHcmluVG9uZ3VlV2luazIsIGZhR3JpblRvbmd1ZVdpbmsyLCBmYUwsIGZhQXJyb3dEb3duU2hvcnRXaWRlLCBmYVNvcnRBbW91bnREZXNjLCBmYVNvcnRBbW91bnREb3duQWx0LCBmYUhvdXJnbGFzc0hhbGYyLCBmYUhvdXJnbGFzczIyLCBmYVNwb29uLCBmYVV0ZW5zaWxTcG9vbiwgZmFDcmVkaXRDYXJkMiwgZmFDcmVkaXRDYXJkQWx0MiwgZmFGaWxlSW52b2ljZURvbGxhciwgZmFTcGFnaGV0dGlNb25zdGVyRmx5aW5nLCBmYVBhc3RhZmFyaWFuaXNtLCBmYU1hcnRpbmlHbGFzc0NpdHJ1cywgZmFDb2NrdGFpbCwgZmFCdWxsaG9ybiwgZmFCb3hUaXNzdWUsIGZhTWF0dHJlc3NQaWxsb3csIGZhQ2hldnJvbkxlZnQsIGZhQ2xvdWRNb29uUmFpbiwgZmFBcnJvd0Rvd24xOSwgZmFTb3J0TnVtZXJpY0FzYywgZmFTb3J0TnVtZXJpY0Rvd24sIGZhSGFuZFNwb2NrMiwgZmFXYW5kTWFnaWNTcGFya2xlcywgZmFNYWdpY1dhbmRTcGFya2xlcywgZmFDb21tZW50TWVkaWNhbCwgZmFCZWxsU2xhc2gyLCBmYUhhbmRzaGFrZVNsYXNoLCBmYUhhbmRzaGFrZUFsdFNsYXNoLCBmYUhhbmRzaGFrZVNpbXBsZVNsYXNoLCBmYUJvdHRsZVdhdGVyLCBmYURpY2VEMjAsIGZhQXJyb3dEb3duWkEsIGZhU29ydEFscGhhRGVzYywgZmFTb3J0QWxwaGFEb3duQWx0LCBmYUJydXNoLCBmYVBlcnNvbldhbGtpbmdEYXNoZWRMaW5lQXJyb3dSaWdodCwgZmFBcnJvd1VwU2hvcnRXaWRlLCBmYVNvcnRBbW91bnRVcEFsdCwgZmFHcmlwVmVydGljYWwsIGZhR3JpZFZlcnRpY2FsLCBmYUNhclR1bm5lbCwgZmFDaGFydENvbHVtbiwgZmFUcnVja0Fycm93UmlnaHQsIGZhVHYsIGZhVGVsZXZpc2lvbiwgZmFUdkFsdCwgZmFTZWN0aW9uLCBmYVBlYWNlLCBmYVN0YXIyLCBmYUZsYWcyLCBmYVRyaWFuZ2xlRXhjbGFtYXRpb24sIGZhRXhjbGFtYXRpb25UcmlhbmdsZSwgZmFXYXJuaW5nLCBmYVNjaG9vbENpcmNsZUV4Y2xhbWF0aW9uLCBmYUdyYWR1YXRpb25DYXAsIGZhTW9ydGFyQm9hcmQsIGZhU3RvcmUsIGZhVXNlckFzdHJvbmF1dCwgZmFCdWlsZGluZ0ZsYWcsIGZhTXVnU2F1Y2VyLCBmYUNvZmZlZSwgZmFMZW1vbjIsIGZhQ2FyYXZhbiwgZmFRLCBmYUxvY2ssIGZhUGFpbnRSb2xsZXIsIGZhVm9sdW1lSGlnaCwgZmFWb2x1bWVVcCwgZmFGb2xkZXJQbHVzLCBmYU1lcmN1cnksIGZhQW5jaG9yLCBmYVNxdWFyZVBhcmtpbmcsIGZhUGFya2luZywgZmFIYW51a2lhaCwgZmFSb3RhdGVMZWZ0LCBmYVJvdGF0ZUJhY2ssIGZhUm90YXRlQmFja3dhcmQsIGZhVW5kb0FsdCwgZmFIZWFkaW5nLCBmYUhlYWRlciwgZmFDcm9zc2hhaXJzLCBmYUNpcmNsZU5vZGVzLCBmYVdpbmRvd1Jlc3RvcmUyLCBmYVIsIGZhRmlsdGVyQ2lyY2xlWG1hcmssIGZhR29wdXJhbSwgZmFIZWFydENpcmNsZU1pbnVzLCBmYVN0YXJPZkxpZmUsIGZhQnVzaW5lc3NUaW1lLCBmYUJyaWVmY2FzZUNsb2NrLCBmYUZpcmVFeHRpbmd1aXNoZXIsIGZhQXJyb3dEb3duTG9uZywgZmFMb25nQXJyb3dEb3duLCBmYVVzZXJNaW51cywgZmFNb25leUNoZWNrLCBmYUhvdXNlTGFwdG9wLCBmYUxhcHRvcEhvdXNlLCBmYURvd25sb2FkLCBmYUNvdWNoLCBmYVJvYWRMb2NrLCBmYVNjaXNzb3JzLCBmYUN1dCwgZmFCdWcsIGZhQXJyb3dSaWdodEZyb21CcmFja2V0LCBmYVNpZ25PdXQsIGZhSGFuZEhvbGRpbmdIYW5kLCBmYVN0cm9vcHdhZmVsLCBmYUNoaWxkLCBmYUljZUNyZWFtLCBmYUNvbXB1dGVyTW91c2UsIGZhTW91c2UsIGZhRmF1Y2V0LCBmYUF3YXJkLCBmYVBlcnNvbkRyb3duaW5nLCBmYUNhbWVyYVJvdGF0ZSwgZmFGYWNlR3JpbkhlYXJ0czIsIGZhR3JpbkhlYXJ0czIsIGZhRmlsZUZyYWdtZW50LCBmYVBlcnNvbk1pbGl0YXJ5UmlmbGUsIGZhVG9nZ2xlT24sIGZhTHVuZ3NWaXJ1cywgZmFUYWJsZVRlbm5pc1BhZGRsZUJhbGwsIGZhUGluZ1BvbmdQYWRkbGVCYWxsLCBmYVRhYmxlVGVubmlzLCBmYUJveGVzUGFja2luZywgZmFQZXJzb25DaGFsa2JvYXJkLCBmYURpY2VUd28sIGZhQXJyb3dSaWdodEFycm93TGVmdCwgZmFFeGNoYW5nZSwgZmFGb290YmFsbCwgZmFGb290YmFsbEJhbGwsIGZhVHJ1Y2tNb25zdGVyLCBmYUFzdGVyaXNrLCBmYUJhdHRlcnlGdWxsLCBmYUJhdHRlcnksIGZhQmF0dGVyeTUsIGZhQ2hpbGREcmVzcywgZmFGYWNlS2lzc0JlYW0yLCBmYUtpc3NCZWFtMiwgZmFUcmFzaENhbkFycm93VXAsIGZhVHJhc2hSZXN0b3JlQWx0LCBmYUZvbnQsIGZhQm9yZUhvbGUsIGZhVmlydXNDb3ZpZCwgZmFGaWxlUGRmMiwgZmFMYW5ndWFnZSwgZmFTaGllbGRIYWx2ZWQsIGZhU2hpZWxkQWx0LCBmYUNhcmV0VXAsIGZhRmlsZVBlbiwgZmFGaWxlRWRpdCwgZmFQZXJzb25CaWtpbmcsIGZhQmlraW5nLCBmYUJvb2tPcGVuUmVhZGVyLCBmYUJvb2tSZWFkZXIsIGZhR2xhc3NXYXRlckRyb3BsZXQsIGZhVG93ZXJCcm9hZGNhc3QsIGZhQnJvYWRjYXN0VG93ZXIsIGZhTWluaW1pemUsIGZhQ29tcHJlc3NBcnJvd3NBbHQsIGZhQXJyb3dSaWdodFRvQ2l0eSwgZmFMYXB0b3BNZWRpY2FsLCBmYUJyZWFkU2xpY2UsIGZhR2xvYmUsIGZhRm9sZGVyTWludXMsIGZhTWFza0ZhY2UsIGZhQm9uZywgZmFSb2FkQnJpZGdlLCBmYUFycm93VXA5MSwgZmFTb3J0TnVtZXJpY1VwQWx0LCBmYU1vdW50YWluQ2l0eSwgZmFBcnJvd0Rvd245MSwgZmFTb3J0TnVtZXJpY0Rlc2MsIGZhU29ydE51bWVyaWNEb3duQWx0LCBmYUZhY2VHcmluV2lkZTIsIGZhR3JpbkFsdDIsIGZhUG9vcCwgZmFEaGFybWFjaGFrcmEsIGZhQmF0dGVyeVF1YXJ0ZXIsIGZhQmF0dGVyeTIsIGZhQW5raCwgZmFEaWFtb25kLCBmYVN1YnNjcmlwdCwgZmFSdXBlZVNpZ24sIGZhUnVwZWUsIGZhUGVyc29uUmlmbGUsIGZhRCwgZmFTcXVhcmVOZmksIGZhVGVldGgsIGZhTWFnbmlmeWluZ0dsYXNzRG9sbGFyLCBmYVNlYXJjaERvbGxhciwgZmFEdW1wc3RlckZpcmUsIGZhVXBsb2FkLCBmYVVzZXJTbGFzaCwgZmFVc2VyQWx0U2xhc2gsIGZhVXNlckxhcmdlU2xhc2gsIGZhQXJyb3dMZWZ0LCBmYVZpYWxWaXJ1cywgZmFDaGVja0RvdWJsZSwgZmFQYXcsIGZhSGVsbWV0U2FmZXR5LCBmYUhhcmRIYXQsIGZhSGF0SGFyZCwgZmFFLCBmYUZhY2VMYXVnaFNxdWludDIsIGZhTGF1Z2hTcXVpbnQyLCBmYURvd25MZWZ0QW5kVXBSaWdodFRvQ2VudGVyLCBmYUNvbXByZXNzQWx0LCBmYUdpZnRzLCBmYUJlZCwgZmFNb25leUJpbGxUcmFuc2ZlciwgZmFQZXJzb25SdW5uaW5nLCBmYVJ1bm5pbmcsIGZhQ2lyY2xlQ2hldnJvbkRvd24sIGZhQ2hldnJvbkNpcmNsZURvd24sIGZhVXNlck51cnNlLCBmYUZhY2VLaXNzV2lua0hlYXJ0MiwgZmFLaXNzV2lua0hlYXJ0MiwgZmFGaWxsLCBmYU1vbmV5QmlsbDFXYXZlLCBmYU1vbmV5QmlsbFdhdmVBbHQsIGZhTGFuZG1hcmssIGZhTXVzaWMsIGZhQm9va01lZGljYWwsIGZhU2h1ZmZsZSwgZmFSYW5kb20sIGZhVW5kZXJsaW5lLCBmYUJ1aWxkaW5nVXNlciwgZmFSb2JvdCwgZmFQbHVzLCBmYUFkZCwgZmFDb3B5MiwgZmFDaGVzc0tpbmcyLCBmYUhvdXNlRmxvb2RXYXRlciwgZmFCaXRjb2luU2lnbiwgZmFCb3gsIGZhU3F1YXJlUGx1czIsIGZhUGx1c1NxdWFyZTIsIGZhQXJyb3dzTGVmdFJpZ2h0LCBmYUFycm93c0gsIGZhRmFuLCBmYUNyb3csIGZhRmlsZUNpcmNsZUNoZWNrLCBmYUxpbmtTbGFzaCwgZmFDaGFpbkJyb2tlbiwgZmFDaGFpblNsYXNoLCBmYVVubGluaywgZmFBcnJvd1JvdGF0ZVJpZ2h0LCBmYUFycm93UmlnaHRSb3RhdGUsIGZhQXJyb3dSb3RhdGVGb3J3YXJkLCBmYVJlZG8sIGZhUGVuQ2xpcCwgZmFQZW5BbHQsIGZhRG9vckNsb3NlZCwgZmFBcnJvd0Rvd25XaWRlU2hvcnQsIGZhU29ydEFtb3VudEFzYywgZmFTb3J0QW1vdW50RG93biwgZmFDYXJldERvd24sIGZhSywgZmFDaGVja1RvU2xvdCwgZmFWb3RlWWVhLCBmYUZpc2hGaW5zLCBmYUNvbXByZXNzLCBmYUFycm93VXBBWiwgZmFTb3J0QWxwaGFVcCwgZmFVc2VyR3JhZHVhdGUsIGZhRmlsZUNvZGUyLCBmYVNvYXAsIGZhUmVjeWNsZSwgZmFGYWNlR3JpbldpbmsyLCBmYUdyaW5XaW5rMiwgZmFXYXRlckxhZGRlciwgZmFMYWRkZXJXYXRlciwgZmFTd2ltbWluZ1Bvb2wsIGZhVG93ZXJDZWxsLCBmYUNvbG9uU2lnbiwgZmFMYXB0b3BGaWxlLCBmYUJhaGFpLCBmYUhheWthbCwgZmFNb25leUJpbGwxMiwgZmFNb25leUJpbGxBbHQyLCBmYUNsb3VkQm9sdCwgZmFUaHVuZGVyc3Rvcm0sIGZhRXRoZXJuZXQsIGZhSHJ5dm5pYVNpZ24sIGZhSHJ5dm5pYSwgZmFFeWVTbGFzaDIsIGZhQ2FydEZsYXRiZWRTdWl0Y2FzZSwgZmFMdWdnYWdlQ2FydCwgZmFSYWRpYXRpb24sIGZhRmlsZVdvcmQyLCBmYUJlZFB1bHNlLCBmYVByb2NlZHVyZXMsIGZhVGVudHMsIGZhTXVnSG90LCBmYUJvbHQsIGZhWmFwLCBmYUphciwgZmFUcnVja1BsYW5lLCBmYUhhbmRIb2xkaW5nSGVhcnQsIGZhQXJyb3dSb3RhdGVMZWZ0LCBmYUFycm93TGVmdFJvdGF0ZSwgZmFBcnJvd1JvdGF0ZUJhY2ssIGZhQXJyb3dSb3RhdGVCYWNrd2FyZCwgZmFVbmRvLCBmYUZhY2VBbmdyeTIsIGZhQW5ncnkyLCBmYUJ1cnN0LCBmYVosIGZhQmFuZGFnZSwgZmFCYW5kQWlkLCBmYVBsYW5lQ2lyY2xlRXhjbGFtYXRpb24sIGZhQnVzU2lkZSwgZmFCdWdzLCBmYUJlZXJNdWdFbXB0eSwgZmFCZWVyLCBmYVBlcnNvbkNpcmNsZUNoZWNrLCBmYVN0YXBsZXIsIGZhSG91c2VNZWRpY2FsQ2lyY2xlQ2hlY2ssIGZhTmFpcmFTaWduLCBmYVdpZmksIGZhV2lmaTMsIGZhV2lmaVN0cm9uZywgZmFNb25leUNoZWNrRG9sbGFyLCBmYU1vbmV5Q2hlY2tBbHQsIGZhRXllTG93VmlzaW9uLCBmYUxvd1Zpc2lvbiwgZmFDaXJjbGVBcnJvd1VwLCBmYUFycm93Q2lyY2xlVXAsIGZhQ2FtZXJhUmV0cm8sIGZhQ2Fwc3VsZXMsIGZhUG9vLCBmYUVsZXZhdG9yLCBmYVRhZywgZmFGaWxlQ2lyY2xlTWludXMsIGZhRG93bkxvbmcsIGZhTG9uZ0Fycm93QWx0RG93biwgZmFDb21wYWN0RGlzYywgZmFTdWl0Y2FzZVJvbGxpbmcsIGZhQm9va1F1cmFuLCBmYVF1cmFuLCBmYVBob25lU2xhc2gsIGZhUm9hZENpcmNsZUNoZWNrLCBmYVNob3BMb2NrLCBmYUltYWdlUG9ydHJhaXQsIGZhUG9ydHJhaXQsIGZhQnJpZGdlTG9jaywgZmFIYW1tZXIsIGZhQXJyb3dVcDE5LCBmYVNvcnROdW1lcmljVXAsIGZhQ2hlc3NLbmlnaHQyLCBmYUhvdXNlRmxvb2RXYXRlckNpcmNsZUFycm93UmlnaHQsIGZhQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZSwgZmFFeHRlcm5hbExpbmssIGZhQXJyb3dEb3duVXBBY3Jvc3NMaW5lLCBmYUZhY2VHcmluQmVhbTIsIGZhR3JpbkJlYW0yLCBmYVJlY3RhbmdsZUFkLCBmYUFkLCBmYUJvb2tUYW5ha2gsIGZhVGFuYWtoLCBmYUhvdFR1YlBlcnNvbiwgZmFIb3RUdWIsIGZhRmlsZUhhbGZEYXNoZWQsIGZhT3V0ZGVudCwgZmFEZWRlbnQsIGZhSGFuZFBlYWNlMiwgZmFIZWFkU2lkZVZpcnVzLCBmYUNvbXBhc3MyLCBmYVBlbk5pYiwgZmFUZW50QXJyb3dzRG93biwgZmFGb3J3YXJkRmFzdCwgZmFGYXN0Rm9yd2FyZCwgZmFDcm9wLCBmYVdoaXNrZXlHbGFzcywgZmFHbGFzc1doaXNrZXksIGZhU3F1YXJlMiwgZmFGYWNlR3JpbjIsIGZhR3JpbjIsIGZhRmlsZUNvbnRyYWN0LCBmYUFuZ2xlVXAsIGZhRmFjZVNtaWxlMiwgZmFTbWlsZTIsIGZhUGVyc29uRHJlc3NCdXJzdCwgZmFEaXZpZGUsIGZhQ29kZUZvcmssIGZhSG91c2VGbGFnLCBmYUJ1aWxkaW5nQ29sdW1ucywgZmFCYW5rLCBmYUluc3RpdHV0aW9uLCBmYU11c2V1bSwgZmFVbml2ZXJzaXR5LCBmYVJ1ZywgZmFDb2RlTWVyZ2UsIGZhSG91c2VUc3VuYW1pLCBmYU1hZ25pZnlpbmdHbGFzc0NoYXJ0LCBmYVVtYnJlbGxhLCBmYUhpbGxSb2Nrc2xpZGUsIGZhVXNlclNlY3JldCwgZmFQYWdlciwgZmFCcmllZmNhc2UsIGZhVHJvd2VsQnJpY2tzLCBmYVNvY2tzLCBmYVQsIGZhTWljcm9jaGlwLCBmYVRydWNrTWVkaWNhbCwgZmFBbWJ1bGFuY2UsIGZhT20sIGZhTW9zcXVpdG9OZXQsIGZhUHJlc2NyaXB0aW9uQm90dGxlLCBmYVVzZXJzR2VhciwgZmFVc2Vyc0NvZywgZmFSb2FkQ2lyY2xlRXhjbGFtYXRpb24sIGZhUGF1c2UsIGZhU3RhZmZTbmFrZSwgZmFSb2RBc2NsZXBpdXMsIGZhUm9kU25ha2UsIGZhU3RhZmZBZXNjdWxhcGl1cywgZmFQaWdneUJhbmssIGZhTW9udW1lbnQsIGZhQW5nbGVzUmlnaHQsIGZhQW5nbGVEb3VibGVSaWdodCwgZmFEZXNrdG9wLCBmYURlc2t0b3BBbHQsIGZhUGxhbmVDaXJjbGVYbWFyaywgZmFSZXR3ZWV0LCBmYVVzZXJHZWFyLCBmYVVzZXJDb2csIGZhQm9yZGVyQWxsLCBmYUNvaW5zLCBmYU1hcnNTdHJva2UsIGZhSGFuZHNoYWtlQW5nbGUsIGZhSGFuZHNIZWxwaW5nLCBmYUFycm93RG93biwgZmFMb2NhdGlvbkRvdCwgZmFNYXBNYXJrZXJBbHQsIGZhUGx1Z0NpcmNsZUV4Y2xhbWF0aW9uLCBmYUNvb2tpZUJpdGUsIGZhU2NyZXdkcml2ZXJXcmVuY2gsIGZhVG9vbHMsIGZhSW5kZW50LCBmYUJhcnMsIGZhTmF2aWNvbiwgZmFIYW5kc1ByYXlpbmcsIGZhUHJheWluZ0hhbmRzLCBmYVZpcnVzZXMsIGZhU2Nob29sRmxhZywgZmFUcmFkZW1hcmssIGZhRmlyZUJ1cm5lciwgZmFGYWNlU21pbGVCZWFtMiwgZmFTbWlsZUJlYW0yLCBmYVRlbnRBcnJvd0xlZnRSaWdodCwgZmFSb3V0ZSwgZmFBbmdsZXNVcCwgZmFBbmdsZURvdWJsZVVwLCBmYUJ1Y2tldCwgZmFMZXNzVGhhbkVxdWFsLCBmYUZvbGRlckNsb3NlZDIsIGZhUGVyc29uVGhyb3VnaFdpbmRvdywgZmFTY2hvb2xMb2NrLCBmYVBlcnNvbkJ1cnN0LCBmYUxlZnRMb25nLCBmYUxvbmdBcnJvd0FsdExlZnQsIGZhTG9jYXRpb25Dcm9zc2hhaXJzLCBmYUxvY2F0aW9uLCBmYVBlcnNvbkRvdHNGcm9tTGluZSwgZmFEaWFnbm9zZXMsIGZhR2F1Z2VTaW1wbGVIaWdoLCBmYVRhY2hvbWV0ZXIsIGZhVGFjaG9tZXRlckZhc3QsIGZhQW5nbGVzTGVmdCwgZmFBbmdsZURvdWJsZUxlZnQsIGZhVXBEb3duLCBmYUFycm93c0FsdFYsIGZhQmF0dGVyeUVtcHR5LCBmYUJhdHRlcnkwLCBmYUtleWJvYXJkMiwgZmFDb29raWUsIGZhU3RvcHdhdGNoLCBmYUVqZWN0LCBmYVNhdGVsbGl0ZURpc2gsIGZhRmFjZVJvbGxpbmdFeWVzMiwgZmFNZWhSb2xsaW5nRXllczIsIGZhTGlzdENoZWNrLCBmYVRhc2tzLCBmYVNhY2tYbWFyaywgZmFIYXNodGFnLCBmYVRyYWluLCBmYUdhbWVwYWQsIGZhRmlsZUV4cG9ydCwgZmFBcnJvd1JpZ2h0RnJvbUZpbGUsIGZhRmFjZUdyaW1hY2UyLCBmYUdyaW1hY2UyLCBmYVRyYWluU3Vid2F5LCBmYVN1YndheSwgZmFDaXJjbGVEb3QyLCBmYURvdENpcmNsZTIsIGZhT2JqZWN0R3JvdXAyLCBmYVNoaXAsIGZhQywgZmFTcXVhcmVQaG9uZSwgZmFQaG9uZVNxdWFyZSwgZmFSdWxlckNvbWJpbmVkLCBmYUFycm93c1JvdGF0ZSwgZmFSZWZyZXNoLCBmYVN5bmMsIGZhUGVyc29uRHJlc3MsIGZhRmVtYWxlLCBmYUJvb2tPcGVuLCBmYUZvbGRlclRyZWUsIGZhQm94QXJjaGl2ZSwgZmFBcmNoaXZlLCBmYVRlbnRBcnJvd0Rvd25Ub0xpbmUsIGZhUXJjb2RlLCBmYURyYWdvbiwgZmFIb3VyZ2xhc3NFbmQsIGZhSG91cmdsYXNzMzIsIGZhR3JpcCwgZmFHcmlkSG9yaXpvbnRhbCwgZmFHcmlwSG9yaXpvbnRhbCwgZmFCb3JkZXJUb3BMZWZ0LCBmYUJvcmRlclN0eWxlLCBmYUxpc3RVbCwgZmFMaXN0RG90cywgZmFQZW9wbGVSb2JiZXJ5LCBmYU1vYmlsZUJ1dHRvbiwgZmFBcnJvd0Rvd25BWiwgZmFTb3J0QWxwaGFBc2MsIGZhU29ydEFscGhhRG93biwgZmFNb25leUJpbGwsIGZhQ2lyY2xlTWludXMsIGZhTWludXNDaXJjbGUsIGZhQXJyb3dQb2ludGVyLCBmYU1vdXNlUG9pbnRlciwgZmFTcXVhcmVTaGFyZU5vZGVzLCBmYVNoYXJlQWx0U3F1YXJlLCBmYVRhYmxlQ2VsbHNMYXJnZSwgZmFUaExhcmdlLCBmYUNhdCwgZmFDYWxlbmRhcldlZWssIGZhQ29kZUNvbXBhcmUsIGZhUm9hZENpcmNsZVhtYXJrLCBmYVBhbGxldCwgZmFDYWtlQ2FuZGxlcywgZmFCaXJ0aGRheUNha2UsIGZhQ2FrZSwgZmFCdWdTbGFzaCwgZmFUYXJwLCBmYURpYWdyYW1QcmVkZWNlc3NvciwgZmFGYWNlRmx1c2hlZDIsIGZhRmx1c2hlZDIsIGZhRGlhZ3JhbU5leHQsIGZhQW5jaG9yQ2lyY2xlWG1hcmssIGZhUGVyc29uQ2lyY2xlWG1hcmssIGZhU3BhLCBmYUJhcnNQcm9ncmVzcywgZmFUYXNrc0FsdCwgZmFIZWFydENpcmNsZUNoZWNrLCBmYU1hcnNTdHJva2VSaWdodCwgZmFNYXJzU3Ryb2tlSCwgZmFUb3dlck9ic2VydmF0aW9uLCBmYVN0ZXJsaW5nU2lnbiwgZmFHYnAsIGZhUG91bmRTaWduLCBmYUZhdWNldERyaXAsIGZhQ2lyY2xlSW5mbywgZmFJbmZvQ2lyY2xlLCBmYUZlYXRoZXIsIGZhQm93bFJpY2UsIGZhU3RhckhhbGZTdHJva2UyLCBmYVN0YXJIYWxmQWx0MiwgZmFUZW1wZXJhdHVyZUFycm93RG93biwgZmFUZW1wZXJhdHVyZURvd24sIGZhTWFza1ZlbnRpbGF0b3IsIGZhRmlsZVZpZGVvMiwgZmFBcnJvd1RyZW5kRG93biwgZmFPaWxDYW4sIGZhUGVvcGxlQ2FycnlCb3gsIGZhUGVvcGxlQ2FycnksIGZhQ2hhaXIsIGZhV2luZCwgZmFMYXllckdyb3VwLCBmYUhlYWRTaWRlTWFzaywgZmFIYW5kcywgZmFTaWduTGFuZ3VhZ2UsIGZhU2lnbmluZywgZmFUYWJsZXRzLCBmYVdlaWdodEhhbmdpbmcsIGZhRGljZSwgZmFTaG9wU2xhc2gsIGZhU3RvcmVBbHRTbGFzaCwgZmFTb3J0RG93biwgZmFTb3J0RGVzYywgZmFQZXNldGFTaWduLCBmYVRhYmxldFNjcmVlbkJ1dHRvbiwgZmFUYWJsZXRBbHQsIGZhSGFuZEhvbGRpbmdEb2xsYXIsIGZhSGFuZEhvbGRpbmdVc2QsIGZhU2hpZWxkLCBmYVNoaWVsZEJsYW5rLCBmYUZhY2VMYXVnaDIsIGZhTGF1Z2gyLCBmYUhhbmRzSG9sZGluZywgZmFDYXJ0U2hvcHBpbmcsIGZhU2hvcHBpbmdDYXJ0LCBmYU9jdGFnb24sIGZhSGFuZFBvaW50ZXIyLCBmYVJlZ2lzdGVyZWQyLCBmYUhvdXNlU2lnbmFsLCBmYUJhbmdsYWRlc2hpVGFrYVNpZ24sIGljb25zMzsKdmFyIGluaXRfZnJlZV9zb2xpZF9zdmdfaWNvbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZm9ydGF3ZXNvbWUrZnJlZS1zb2xpZC1zdmctaWNvbnNANy4xLjAvbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9pbmRleC5tanMiKCkgewogICAgcHJlZml4MyA9ICJmYXMiOwogICAgZmEwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIjAiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiMzAiLCAiTTAgMTkyQzAgMTAzLjYgNzEuNiAzMiAxNjAgMzJzMTYwIDcxLjYgMTYwIDE2MGwwIDEyOGMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMwIDQwOC40IDAgMzIwTDAgMTkyek0xNjAgOTZjLTUzIDAtOTYgNDMtOTYgOTZsMCAxMjhjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTEyOGMwLTUzLTQzLTk2LTk2LTk2eiJdCiAgICB9OwogICAgZmExID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIjEiLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFtdLCAiMzEiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw2NCAwIDAgMzIwLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC0zNTJjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMzJ6Il0KICAgIH07CiAgICBmYTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiMiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICIzMiIsICJNNDggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTcxIDBjNjAuMiAwIDEwOSA0OC44IDEwOSAxMDkgMCA0My44LTI2LjIgODMuMy02Ni40IDEwMC40bC0xMzkuMSA1OUMxMTkgMzE1LjQgOTYgMzUwLjIgOTYgMzg4LjdsMCAyNy4zIDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDY0IDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC01OS4zYzAtNjQuMiAzOC40LTEyMi4yIDk3LjUtMTQ3LjNsMTM5LjEtNTljMTYuNi03LjEgMjcuNC0yMy40IDI3LjQtNDEuNCAwLTI0LjktMjAuMi00NS00NS00NUw4MCA5NkM2Mi4zIDk2IDQ4IDgxLjcgNDggNjR6Il0KICAgIH07CiAgICBmYTMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiMyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICIzMyIsICJNODAgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDExMiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0TDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMmwxNjAgMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOCAwIDM4LjItMTYuOCA3Mi41LTQzLjMgOTYgMjYuNiAyMy41IDQzLjMgNTcuOCA0My4zIDk2IDAgNzAuNy01Ny4zIDEyOC0xMjggMTI4TDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NEw4MCAyODh6Il0KICAgIH07CiAgICBmYTQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiNCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICIzNCIsICJNNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCAyODhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTYgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDIyNC0xOTIgMCAwLTIyNHoiXQogICAgfTsKICAgIGZhNSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICI1IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgIjM1IiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMCAwIDExMiAxMjAgMGM3NS4xIDAgMTM2IDYwLjkgMTM2IDEzNlMyNTkuMSA0ODAgMTg0IDQ4MEwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTUyIDBjMzkuOCAwIDcyLTMyLjIgNzItNzJzLTMyLjItNzItNzItNzJMMzIgMjcyYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDY0eiJdCiAgICB9OwogICAgZmE2ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIjYiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiMzYiLCAiTTI1NiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtODggMGMtNDguNiAwLTg4IDM5LjQtODggODhsMCAzMi4yYzIyLjktMTUuMyA1MC40LTI0LjIgODAtMjQuMmw0OCAwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0UzI4Ny41IDQ4MCAyMDggNDgwbC00OCAwQzgwLjUgNDgwIDE2IDQxNS41IDE2IDMzNmwwLTE1MkMxNiAxMDAuMSA4NC4xIDMyIDE2OCAzMmw4OCAwek04MCAzMzZjMCA0NC4yIDM1LjggODAgODAgODBsNDggMGM0NC4yIDAgODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MGwtNDggMGMtNDQuMiAwLTgwIDM1LjgtODAgODB6Il0KICAgIH07CiAgICBmYTcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiNyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICIzNyIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwyNTYgMGMxMS41IDAgMjIgNi4xIDI3LjcgMTYuMXM1LjcgMjIuMi0uMSAzMi4xbC0yMjQgMzg0Yy04LjkgMTUuMy0yOC41IDIwLjQtNDMuOCAxMS41cy0yMC40LTI4LjUtMTEuNS00My44TDIzMi4zIDk2IDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjR6Il0KICAgIH07CiAgICBmYTggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiOCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICIzOCIsICJNMzA0IDE2MGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOGwtMzIgMGMtNzAuNyAwLTEyOCA1Ny4zLTEyOCAxMjggMCAzNC42IDEzLjcgNjYgMzYgODktMzEuNSAyMy4zLTUyIDYwLjgtNTIgMTAzIDAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4bDY0IDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjggMC00Mi4yLTIwLjUtNzkuNy01Mi0xMDMgMjIuMy0yMyAzNi01NC40IDM2LTg5ek0xNzYuMSAyODhsMTUuOSAwYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0bC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0bDQ4LjEgMHptMC02NEwxNDQgMjI0Yy0zNS4zIDAtNjQtMjguNy02NC02NCAwLTM1LjMgMjguNy02NCA2NC02NGwzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMzUuMy0yOC42IDY0LTY0IDY0eiJdCiAgICB9OwogICAgZmE5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIjkiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiMzkiLCAiTTIwOCAzMjBjMjkuNiAwIDU3LjEtOC45IDgwLTI0LjJsMCAzMi4yYzAgNDguNi0zOS40IDg4LTg4IDg4TDk2IDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMDQgMGM4My45IDAgMTUyLTY4LjEgMTUyLTE1MmwwLTE1Mi4xQzM1MS45IDk2LjQgMjg3LjUgMzIgMjA4IDMybC00OCAwQzgwLjUgMzIgMTYgOTYuNSAxNiAxNzZTODAuNSAzMjAgMTYwIDMyMGw0OCAwem04MC0xNDRjMCA0NC4yLTM1LjggODAtODAgODBsLTQ4IDBjLTQ0LjIgMC04MC0zNS44LTgwLTgwczM1LjgtODAgODAtODBsNDggMGM0NC4yIDAgODAgMzUuOCA4MCA4MHoiXQogICAgfTsKICAgIGZhRG9sbGFyU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb2xsYXItc2lnbiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEyODE3OCwgNjE3ODEsICJkb2xsYXIiLCAidXNkIl0sICIyNCIsICJNMTM2IDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCA1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMTQuOSAwYy0yNC45IDAtNDUuMSAyMC4yLTQ1LjEgNDUuMSAwIDIyLjUgMTYuNSA0MS41IDM4LjcgNDQuN2w5MS42IDEzLjFjNTMuOCA3LjcgOTMuNyA1My43IDkzLjcgMTA4IDAgNjAuMy00OC45IDEwOS4xLTEwOS4xIDEwOS4xbC0xMC45IDAgMCA0MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQwLTcyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTMwLjkgMGMyNC45IDAgNDUuMS0yMC4yIDQ1LjEtNDUuMSAwLTIyLjUtMTYuNS00MS41LTM4LjctNDQuN2wtOTEuNi0xMy4xQzU1LjkgMjczLjUgMTYgMjI3LjQgMTYgMTczLjEgMTYgMTEyLjkgNjQuOSA2NCAxMjUuMSA2NGwxMC45IDAgMC00MHoiXQogICAgfTsKICAgIGZhRG9sbGFyID0gZmFEb2xsYXJTaWduOwogICAgZmFVc2QgPSBmYURvbGxhclNpZ247CiAgICBmYURvZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb2ciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgwMjFdLCAiZjZkMyIsICJNMzIgMTEyYzE2LjYgMCAzMC4yIDEyLjYgMzEuOCAyOC43bC4zIDYuNkM2NS44IDE2My40IDc5LjQgMTc2IDk2IDE3NmwxNzkuMSAwIDE0MC45IDYwLjQgMCAyNDMuNmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMzEuM0MyOTYgMzYxIDI2OC44IDM2OCAyNDAgMzY4cy01Ni03LTgwLTE5LjNMMTYwIDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNDUuNmMtMzcuMy0xMy4yLTY0LTQ4LjYtNjQtOTAuNCAwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzU1LjgtMzJjNy43IDAgMTQuOSAzLjYgMTkuNiA5LjhMMzkyIDAgNDQ0LjEgMGMxMi43IDAgMjQuOSA1LjEgMzMuOSAxNC4xTDQ5NiAzMiA1NTIgMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyNGMwIDQ0LjItMzUuOCA4MC04MCA4MGwtNjQgMC03IDI4LTEyNC43LTUzLjQgMzEuNi0xNDcuMkMzMzQuMy0yMy45IDM0NC4yLTMyIDM1NS44LTMyek00NDggNDRhMjAgMjAgMCAxIDAgMCA0MCAyMCAyMCAwIDEgMCAwLTQweiJdCiAgICB9OwogICAgZmFUcnVja01vdmluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1tb3ZpbmciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjRkZiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQyNGMwIDQ4LjYgMzkuNCA4OCA4OCA4OCAyNS4yIDAgNDgtMTAuNiA2NC0yNy42IDE2IDE3IDM4LjggMjcuNiA2NCAyNy42IDQwLjMgMCA3NC4yLTI3LjEgODQuNy02NGwxMzQuNiAwYzEwLjQgMzYuOSA0NC40IDY0IDg0LjcgNjQgNDMgMCA3OC45LTMwLjkgODYuNS03MS43IDIwLTEwLjggMzMuNS0zMiAzMy41LTU2LjNsMC0xNDYuN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0w1NzYgMTQ2LjdjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdsLTUwLjcgMCAwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek00ODAgMTkybDUwLjcgMCA0NS4zIDQ1LjMgMCA1MC43LTk2IDAgMC05NnpNODggMzg0YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHptMzkyIDQwYTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTIxNiAzODRhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgweiJdCiAgICB9OwogICAgZmFSb3RhdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm90YXRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjYwLCAic3luYy1hbHQiXSwgImYyZjEiLCAiTTQ4MC4xIDE5Mmw3LjkgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTE0NGMwLTkuNy01LjgtMTguNS0xNC44LTIyLjJTNDc3LjkgLjIgNDcxIDdMNDE5LjMgNTguOEMzNzUgMjIuMSAzMTggMCAyNTYgMCAxMjcgMCAyMC4zIDk1LjQgMi42IDIxOS41IC4xIDIzNyAxMi4yIDI1My4yIDI5LjcgMjU1LjdzMzMuNy05LjcgMzYuMi0yNy4xQzc5LjIgMTM1LjUgMTU5LjMgNjQgMjU2IDY0IDMwMC40IDY0IDM0MS4yIDc5IDM3My43IDEwNC4zTDMyNyAxNTFjLTYuOSA2LjktOC45IDE3LjItNS4yIDI2LjJTMzM0LjMgMTkyIDM0NCAxOTJsMTM2LjEgMHptMjkuNCAxMDAuNWMyLjUtMTcuNS05LjctMzMuNy0yNy4xLTM2LjJzLTMzLjcgOS43LTM2LjIgMjcuMWMtMTMuMyA5My05My40IDE2NC41LTE5MC4xIDE2NC41LTQ0LjQgMC04NS4yLTE1LTExNy43LTQwLjNMMTg1IDM2MWM2LjktNi45IDguOS0xNy4yIDUuMi0yNi4yUzE3Ny43IDMyMCAxNjggMzIwTDI0IDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRMMCA0ODhjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yUzM0LjEgNTExLjggNDEgNTA1bDUxLjgtNTEuOEMxMzcgNDg5LjkgMTk0IDUxMiAyNTYgNTEyIDM4NSA1MTIgNDkxLjcgNDE2LjYgNTA5LjQgMjkyLjV6Il0KICAgIH07CiAgICBmYVN5bmNBbHQgPSBmYVJvdGF0ZTsKICAgIGZhU3F1YXJlTWludXMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1taW51cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYxNzY3LCAibWludXMtc3F1YXJlIl0sICJmMTQ2IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem03MiAyMDBsMTc2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE3NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFNaW51c1NxdWFyZTIgPSBmYVNxdWFyZU1pbnVzMjsKICAgIGZhQWxpZ25KdXN0aWZ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFsaWduLWp1c3RpZnkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjAzOSIsICJNNDQ4IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5NmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnptMCAyNTZjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyek0wIDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek00NDggNDQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnoiXQogICAgfTsKICAgIGZhQ2FsZW5kYXJDaGVjazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXItY2hlY2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI3NCIsICJNMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0yMiAxNjEuN2MtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNMMTg5LjEgMzMxLjIgMTM3IDI3OS4xYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDcyIDcyYzUgNSAxMS45IDcuNSAxOC44IDdzMTMuNC00LjEgMTcuNS05LjhMMzQ3LjMgMTk1LjJjNy44LTEwLjcgNS40LTI1LjctNS4zLTMzLjV6Il0KICAgIH07CiAgICBmYUZhY2VLaXNzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWtpc3MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MzUsICJraXNzIl0sICJmNTk2IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjQwIDI4OGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgMTIuMy00LjYgMjMuNS0xMi4yIDMyIDcuNiA4LjUgMTIuMiAxOS43IDEyLjIgMzIgMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0tOTYtODBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhS2lzczIgPSBmYUZhY2VLaXNzMjsKICAgIGZhS2l0Y2hlblNldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJraXRjaGVuLXNldCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTFhIiwgIk0yNDAgMTQ0YTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHptNDQuNCAzMkMyNjkuOSAyNDAuMSAyMTIuNSAyODggMTQ0IDI4OCA2NC41IDI4OCAwIDIyMy41IDAgMTQ0UzY0LjUgMCAxNDQgMGM2OC41IDAgMTI1LjkgNDcuOSAxNDAuNCAxMTJsNzEuOCAwYzguOC05LjggMjEuNi0xNiAzNS44LTE2bDEwNCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4bC0xMDQgMGMtMTQuMiAwLTI3LTYuMi0zNS44LTE2bC03MS44IDB6TTE0NCA4MGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNNDAwIDI0MGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDggOTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjQwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOTYgMCAwLThjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTI4OCA0NjRsMC0xMTIgMjI0IDAgMCAxMTJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OHpNNDggMzIwbDEyOCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4bC0xNiAwYzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnptMTI4IDY0YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwIDAgMzIgMTYgMHpNMjQgNDY0bDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhRG5hID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRuYSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyOTUxNl0sICJmNDcxIiwgIk0zNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMiAwIDU3LjgtMjQuNCAxMDQuOC01Ny40IDE0NC41LTI0LjEgMjguOS01My44IDU1LjEtODMuNiA3OS41IDI5LjggMjQuNSA1OS41IDUwLjYgODMuNiA3OS41IDMzIDM5LjYgNTcuNCA4Ni43IDU3LjQgMTQ0LjUgMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJMNjQgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDk3LjcgMCA0ODBDMCA0MjIuMiAyNC40IDM3NS4yIDU3LjQgMzM1LjUgODEuNSAzMDYuNiAxMTEuMiAyODAuNSAxNDEgMjU2IDExMS4yIDIzMS41IDgxLjUgMjA1LjQgNTcuNCAxNzYuNSAyNC40IDEzNi44IDAgODkuOCAwIDMyIDAgMTQuMyAxNC4zIDAgMzIgMFM2NCAxNC4zIDY0IDMybDI1NiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0yODMuNSAzODRsLTE4Mi45IDBjLTguMiAxMC41LTE1LjEgMjEuMS0yMC42IDMybDIyNC4yIDBjLTUuNi0xMC45LTEyLjUtMjEuNS0yMC42LTMyek0yMzggMzM2Yy0xNC4zLTEzLTI5LjgtMjUuOC00Ni0zOS0xNi4yIDEzLjEtMzEuNyAyNi00NiAzOWw5MiAwek0xMDAuNSAxMjhsMTgyLjkgMGM4LjItMTAuNSAxNS4xLTIxLjEgMjAuNi0zMkw3OS45IDk2YzUuNiAxMC45IDEyLjUgMjEuNSAyMC42IDMyek0xNDYgMTc2YzE0LjMgMTMgMjkuOCAyNS44IDQ2IDM5IDE2LjItMTMuMSAzMS43LTI2IDQ2LTM5bC05MiAweiJdCiAgICB9OwogICAgZmFDaGlsZFJlYWNoaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoaWxkLXJlYWNoaW5nIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU1OWQiLCAiTTI1NiA2NGE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6TTE1Mi45IDE2OS4zYy0yMy43LTguNC00NC41LTI0LjMtNTguOC00NS44TDc0LjYgOTQuMkM2NC44IDc5LjUgNDUgNzUuNiAzMC4zIDg1LjRTMTEuNiAxMTUgMjEuNCAxMjkuOEw0MC45IDE1OWMxOC4xIDI3LjEgNDIuOCA0OC40IDcxLjEgNjIuNEwxMTIgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiAzMiAwIDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI1OC40YzI5LjEtMTQuMiA1NC40LTM2LjIgNzIuNy02NC4ybDE4LjItMjcuOWM5LjYtMTQuOCA1LjQtMzQuNi05LjQtNDQuM3MtMzQuNi01LjUtNDQuMyA5LjRMMjkxIDEyMi40Yy0yMS44IDMzLjQtNTguOSA1My42LTk4LjggNTMuNi0xMi42IDAtMjQuOS0yLTM2LjYtNS44LS45LS4zLTEuOC0uNy0yLjctLjl6Il0KICAgIH07CiAgICBmYVBhc3RlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYXN0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJmaWxlLWNsaXBib2FyZCJdLCAiZjBlYSIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTEyIDAgMC0yMjRjMC02MS45IDUwLjEtMTEyIDExMi0xMTJsNjQgMCAwLTQ4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6TTI0OCAxMTJsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0em00MCA0OGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyMjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTYwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNjUuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM2wtNTguNS01OC41Yy0xMi0xMi0yOC4zLTE4LjctNDUuMy0xOC43TDI4OCAxNjB6Il0KICAgIH07CiAgICBmYUZpbGVDbGlwYm9hcmQyID0gZmFQYXN0ZTI7CiAgICBmYU1ldGVvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtZXRlb3IiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5NzMyXSwgImY3NTMiLCAiTTQ5My43IC45bC0xOTQuMiA3NC43IDIuMy0yOS4zYzEtMTIuOC0xMi44LTIxLjUtMjQtMTUuMUwxMDEuMyAxMzMuNEMzOC42IDE2OS43IDAgMjM2LjYgMCAzMDkgMCA0MjEuMSA5MC45IDUxMiAyMDMgNTEyIDI3NS40IDUxMiAzNDIuMyA0NzMuNCAzNzguNiA0MTAuN0w0ODAuOCAyMzQuM2M2LjUtMTEuMS0yLjItMjUtMTUuMS0yNGwtMjkuMyAyLjMgNzQuNy0xOTQuMmMuNi0xLjUgLjktMy4yIC45LTQuOCAwLTcuNS02LTEzLjUtMTMuNS0xMy41LTEuNyAwLTMuMyAuMy00LjggLjl6TTE5MiAxOTJhMTI4IDEyOCAwIDEgMSAwIDI1NiAxMjggMTI4IDAgMSAxIDAtMjU2em0wIDk2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTE2IDk2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnoiXQogICAgfTsKICAgIGZhR2VhcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2VhcnMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiY29ncyJdLCAiZjA4NSIsICJNNDE1LjkgMjEwLjVjMTIuMi0zLjMgMjUgMi41IDMwLjUgMTMuOEw0NjUgMjYxLjljMTAuMyAxLjQgMjAuNCA0LjIgMjkuOSA4LjFsMzUtMjMuM2MxMC41LTcgMjQuNC01LjYgMzMuMyAzLjNsMTkuMiAxOS4yYzguOSA4LjkgMTAuMyAyMi45IDMuMyAzMy4zbC0yMy4zIDM0LjljMS45IDQuNyAzLjYgOS42IDUgMTQuNyAxLjQgNS4xIDIuMyAxMC4xIDMgMTUuMmwzNy43IDE4LjZjMTEuMyA1LjYgMTcuMSAxOC40IDEzLjggMzAuNWwtNyAyNi4yYy0zLjMgMTIuMS0xNC42IDIwLjMtMjcuMiAxOS41bC00Mi0yLjdjLTYuMyA4LjEtMTMuNiAxNS42LTIxLjkgMjJsMi43IDQxLjljLjggMTIuNi03LjQgMjQtMTkuNSAyNy4ybC0yNi4yIDdjLTEyLjIgMy4zLTI0LjktMi41LTMwLjUtMTMuOGwtMTguNi0zNy42Yy0xMC4zLTEuNC0yMC40LTQuMi0yOS45LTguMWwtMzUgMjMuM2MtMTAuNSA3LTI0LjQgNS42LTMzLjMtMy4zbC0xOS4yLTE5LjJjLTguOS04LjktMTAuMy0yMi44LTMuMy0zMy4zbDIzLjMtMzVjLTEuOS00LjctMy42LTkuNi01LTE0LjdzLTIuMy0xMC4yLTMtMTUuMmwtMzcuNy0xOC42Yy0xMS4zLTUuNi0xNy0xOC40LTEzLjgtMzAuNWw3LTI2LjJjMy4zLTEyLjEgMTQuNi0yMC4zIDI3LjItMTkuNWw0MS45IDIuN2M2LjMtOC4xIDEzLjYtMTUuNiAyMS45LTIybC0yLjctNDEuOGMtLjgtMTIuNiA3LjQtMjQgMTkuNS0yNy4ybDI2LjItN3pNNDQ4LjQgMzQwYTQ0IDQ0IDAgMSAwIC4xIDg4IDQ0IDQ0IDAgMSAwIC0uMS04OHpNMjI0LjktNDUuNWwyNi4yIDdjMTIuMSAzLjMgMjAuMyAxNC43IDE5LjUgMjcuMmwtMi43IDQxLjhjOC4zIDYuNCAxNS42IDEzLjggMjEuOSAyMmw0Mi0yLjdjMTIuNS0uOCAyMy45IDcuNCAyNy4yIDE5LjVsNyAyNi4yYzMuMiAxMi4xLTIuNSAyNC45LTEzLjggMzAuNWwtMzcuNyAxOC42Yy0uNyA1LjEtMS43IDEwLjItMyAxNS4ycy0zLjEgMTAtNSAxNC43bDIzLjMgMzVjNyAxMC41IDUuNiAyNC40LTMuMyAzMy4zTDMwNy4zIDI2MmMtOC45IDguOS0yMi44IDEwLjMtMzMuMyAzLjNMMjM5IDI0MmMtOS41IDMuOS0xOS42IDYuNy0yOS45IDguMWwtMTguNiAzNy42Yy01LjYgMTEuMy0xOC40IDE3LTMwLjUgMTMuOGwtMjYuMi03Yy0xMi4yLTMuMy0yMC4zLTE0LjctMTkuNS0yNy4ybDIuNy00MS45Yy04LjMtNi40LTE1LjYtMTMuOC0yMS45LTIybC00MiAyLjdjLTEyLjUgLjgtMjMuOS03LjQtMjcuMi0xOS41bC03LTI2LjJjLTMuMi0xMi4xIDIuNS0yNC45IDEzLjgtMzAuNWwzNy43LTE4LjZjLjctNS4xIDEuNy0xMC4xIDMtMTUuMiAxLjQtNS4xIDMtMTAgNS0xNC43TDU1LjEgNDYuNWMtNy0xMC41LTUuNi0yNC40IDMuMy0zMy4zTDc3LjYtNmM4LjktOC45IDIyLjgtMTAuMyAzMy4zLTMuM2wzNSAyMy4zYzkuNS0zLjkgMTkuNi02LjcgMjkuOS04LjFsMTguNi0zNy42YzUuNi0xMS4zIDE4LjMtMTcgMzAuNS0xMy44ek0xOTIuNCA4NGE0NCA0NCAwIDEgMCAwIDg4IDQ0IDQ0IDAgMSAwIDAtODh6Il0KICAgIH07CiAgICBmYUNvZ3MgPSBmYUdlYXJzOwogICAgZmFGaWxlQ2lyY2xlUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNpcmNsZS1wbHVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNTg2MDZdLCAiZTQ5NCIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxODAgMGMtMjIuNy0zMS41LTM2LTcwLjItMzYtMTEyIDAtMTAwLjYgNzcuNC0xODMuMiAxNzYtMTkxLjNsMC0zOC4xYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MC43IDE4LjdDMjc4LjcgNi43IDI2Mi41IDAgMjQ1LjUgMEw5NiAwek0zNTcuNSAxNzZMMjY0IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwIDU4LjUgMzU3LjUgMTc2ek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMTYtMjA4bDAgNDggNDggMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNDggMCAwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNDgtNDggMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw0OCAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnoiXQogICAgfTsKICAgIGZhSWNpY2xlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpY2ljbGVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3YWQiLCAiTTc1LjggMzA0LjhMMSAzNS43Qy4zIDMzLjIgMCAzMC43IDAgMjguMiAwIDEyLjYgMTIuNiAwIDI4LjIgMEw0ODIuNCAwYzE2LjMgMCAyOS42IDEzLjIgMjkuNiAyOS42IDAgMS42LS4xIDMuMy0uNCA0LjlMNDM0LjYgNDk2LjFjLTEuNSA5LjItOS41IDE1LjktMTguOCAxNS45LTkuMiAwLTE3LjEtNi42LTE4LjctMTUuNkwzMzYgMTYwIDMwNy4yIDMwMy45Yy0xLjkgOS4zLTEwLjEgMTYuMS0xOS42IDE2LjEtOS4yIDAtMTcuMi02LjItMTkuNC0xNS4xTDI0MCAxOTIgMjEwLjYgMzY4LjJjLTEuNSA5LjEtOS40IDE1LjgtMTguNiAxNS44cy0xNy4xLTYuNy0xOC42LTE1LjhMMTQ0IDE5MiAxMTUuOSAzMDQuM2MtMi4zIDkuMi0xMC42IDE1LjctMjAuMSAxNS43LTkuMyAwLTE3LjUtNi4yLTIwLTE1LjJ6Il0KICAgIH07CiAgICBmYUFycm93VHJlbmRVcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy10cmVuZC11cCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMDk4IiwgIk0zODQgMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODIuNy0xNjkuNCAxNjkuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBMMTkyIDI2OS4zIDU0LjYgNDA2LjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE2MC0xNjBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBMMzIwIDMwNi43IDQ2Ni43IDE2MCAzODQgMTYweiJdCiAgICB9OwogICAgZmFIZXhhZ29uTm9kZXNCb2x0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhleGFnb24tbm9kZXMtYm9sdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNjlhIiwgIk0yNDggMTA2LjZjMTguOS05IDMyLTI4LjMgMzItNTAuNmMwLTMwLjktMjUuMS01Ni01Ni01NnMtNTYgMjUuMS01NiA1NmMwIDIyLjMgMTMuMSA0MS42IDMyIDUwLjZsMCA5OC44Yy0yLjggMS4zLTUuNSAyLjktOCA0LjdsLTgwLjEtNDUuOGMxLjYtMjAuOC04LjYtNDEuNi0yNy45LTUyLjhDNTcuMiA5NiAyMyAxMDUuMiA3LjUgMTMyUzEuMiAxOTMgMjggMjA4LjVjMS4zIC44IDIuNiAxLjUgNCAyLjFsMCA5MC44Yy0xLjMgLjYtMi43IDEuMy00IDIuMUMxLjIgMzE5LTggMzUzLjIgNy41IDM4MFM1Ny4yIDQxNiA4NCA0MDAuNWMxOS4zLTExLjEgMjkuNC0zMiAyNy44LTUyLjhsNTAuNS0yOC45Yy0xMS41LTExLjItMTkuOS0yNS42LTIzLjgtNDEuN0w4OCAzMDYuMWMtMi42LTEuOC01LjItMy4zLTgtNC43bDAtOTAuOGMyLjgtMS4zIDUuNS0yLjkgOC00LjdsODAuMSA0NS44Yy0uMSAxLjQtLjIgMi44LS4yIDQuM2MwIDIyLjMgMTMuMSA0MS42IDMyIDUwLjZsMCA5OC44Yy0xOC45IDktMzIgMjguMy0zMiA1MC42YzAgMzAuOSAyNS4xIDU2IDU2IDU2YzMwLjcgMCA1NS42LTI0LjcgNTYtNTUuMmMtNy41LTEyLjktMTMuNS0yNi44LTE3LjYtNDEuNWMtNC4yLTQtOS4xLTcuMy0xNC40LTkuOWwwLTk4LjhjMi44LTEuMyA1LjUtMi45IDgtNC43bDEwLjUgNmM1LjUtMTUuMyAxMy4xLTI5LjUgMjIuNC00Mi41bC05LjEtNS4yYy4xLTEuNCAuMi0yLjggLjItNC4zYzAtMjIuMy0xMy4xLTQxLjYtMzItNTAuNmwwLTk4Ljh6TTQ0MC41IDEzMkM0MjUgMTA1LjIgMzkwLjggOTYgMzY0IDExMS41Yy0xOS4zIDExLjEtMjkuNCAzMi0yNy44IDUyLjhsLTUwLjYgMjguOWMxMS41IDExLjIgMTkuOSAyNS42IDIzLjggNDEuN0wzNjAgMjA1LjljLjQgLjMgLjggLjYgMS4zIC45YzIxLjctOS41IDQ1LjYtMTQuOCA3MC44LTE0LjhjMiAwIDQgMCA1LjkgLjFjMTIuMS0xNy4zIDEzLjgtNDAuNiAyLjYtNjAuMXpNNDMyIDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTQ3LjktMjI1YzQuMyAzLjcgNS40IDkuOSAyLjYgMTQuOUw0NTIuNCAzNTZsMzUuNiAwYzUuMiAwIDkuOCAzLjMgMTEuNCA4LjJzLS4xIDEwLjMtNC4yIDEzLjRsLTk2IDcyYy00LjUgMy40LTEwLjggMy4yLTE1LjEtLjZzLTUuNC05LjktMi42LTE0LjlMNDExLjYgMzgwIDM3NiAzODBjLTUuMiAwLTkuOC0zLjMtMTEuNC04LjJzLjEtMTAuMyA0LjItMTMuNGw5Ni03MmM0LjUtMy40IDEwLjgtMy4yIDE1LjEgLjZ6Il0KICAgIH07CiAgICBmYVF1ZXN0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInF1ZXN0aW9uIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTAwNjcsIDEwMDY4LCA2MTczNl0sICIzZiIsICJNNjQgMTYwYzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCA0Mi43LTI3LjkgNzguOS02Ni41IDkxLjQtMjguNCA5LjItNjEuNSAzNS4zLTYxLjUgNzYuNmwwIDI0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNGMwLTEuNyAuNi00LjEgMy41LTcuMyAzLTMuMyA3LjktNi41IDEzLjctOC40IDY0LjMtMjAuNyAxMTAuOC04MSAxMTAuOC0xNTIuMyAwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MFMwIDcxLjYgMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnptOTYgMzUyYzIyLjEgMCA0MC0xNy45IDQwLTQwcy0xNy45LTQwLTQwLTQwLTQwIDE3LjktNDAgNDAgMTcuOSA0MCA0MCA0MHoiXQogICAgfTsKICAgIGZhSGFuZHNCb3VuZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kcy1ib3VuZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGY5IiwgIk02NCAzMkM2NCAxNC4zIDQ5LjcgMCAzMiAwUzAgMTQuMyAwIDMyTDAgMjEzLjljMCAxNC4yIDUuMSAyNy45IDE0LjMgMzguN0w5OS42IDM1MiA5NiAzNTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzg0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMuNiAwIDg1LjMtOTkuNWM5LjItMTAuOCAxNC4zLTI0LjUgMTQuMy0zOC43TDU3NiAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDExMi44LTY5LjMgOTIuNGMtNS43IDcuNi0xNi4xIDkuNi0yNC4yIDQuOC05LjctNS43LTEyLjEtMTguNy01LjEtMjcuNUw0NDEgMTgwYzEwLjgtMTMuNSA4LjktMzMuMy00LjQtNDQuNXMtMzMtOS44LTQ0LjUgMy4ybC00Ni43IDUyLjVDMzI5IDIwOS43IDMyMCAyMzMuNCAzMjAgMjU4LjFsMCA5My45LTY0IDAgMC05My45YzAtMjQuNi05LTQ4LjQtMjUuNC02Ni44bC00Ni43LTUyLjVjLTExLjUtMTMtMzEuMy0xNC40LTQ0LjUtMy4yUzEyNC4yIDE2Ni40IDEzNSAxODBsMjcuNiAzNC41YzcgOC44IDQuNyAyMS44LTUuMSAyNy41LTguMSA0LjgtMTguNiAyLjctMjQuMi00LjhMNjQgMTQ0LjggNjQgMzJ6bTY0IDQ0OGwwIDMyIDEyOCAwIDAtMzIgNjQgMCAwIDMyIDEyOCAwIDAtMzIgMzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw5NiA0MzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMHoiXQogICAgfTsKICAgIGZhUGVyc29uV2Fsa2luZ0x1Z2dhZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXdhbGtpbmctbHVnZ2FnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTU0IiwgIk0yNjQuMyAyNGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bS04IDE4MS4zbC0yMi42IDIyLjZjLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDM3LjVjMCAxMi4zLTcgMjMtMTcuMiAyOC40LS45IDQuMi0yLjQgOC40LTQuMyAxMi4zbC02OSAxMzguMS0uOC0uNC0yNy43IDU1LjNjLTkuOSAxOS44LTMzLjkgMjcuOC01My43IDE3LjlMMTQuNiA1MjFjLTE5LjgtOS45LTI3LjgtMzMuOS0xNy45LTUzLjdMNDcuMyAzNjYuM2M5LjktMTkuOCAzMy45LTI3LjggNTMuNy0xNy45bDMwLjcgMTUuMyAyOC4zLTU2LjZjLjMtLjYgLjQtMS4yIC40LTEuOGwwLTE2LjljMC0uMiAwLS4zIDAtLjVsMC0zNy41YzAtMjUuNSAxMC4xLTQ5LjkgMjguMS02Ny45bDM1LjEtMzUuMWMyMi44LTIyLjggNTMuNi0zNS42IDg1LjgtMzUuNiAzNi45IDAgNzEuOCAxNi44IDk0LjggNDUuNkw0MjIuMSAxODBjNi4xIDcuNiAxNS4zIDEyIDI1IDEybDMzLjIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzMuMiAwYy0yOS4yIDAtNTYuNy0xMy4zLTc1LTM2bC0zLjgtNC43IDAgMTE1LjIgMzQuNSAyOS42YzE3LjcgMTUuMiAyOS4zIDM2LjIgMzIuNiA1OS4zTDQ0OCA1MDcuNWMyLjUgMTcuNS05LjcgMzMuNy0yNy4yIDM2LjJzLTMzLjctOS43LTM2LjItMjcuMkwzNzIgNDI4LjRjLTEuMS03LjctNS0xNC43LTEwLjktMTkuOGwtNzEuNC02MS4yYy0yMS4zLTE4LjItMzMuNS00NC45LTMzLjUtNzIuOWwwLTY5LjN6bS4xIDE2NS44YzIuNCAyLjMgNC44IDQuNiA3LjQgNi44bDQ2IDM5LjQtMi4yIDcuNmMtNC41IDE1LjctMTIuOSAzMC0yNC40IDQxLjVsLTY4LjMgNjguM2MtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMjM4IDQyMS4xYzMuOC0zLjggNi42LTguNiA4LjEtMTMuOEwyNTYuNCAzNzF6Il0KICAgIH07CiAgICBmYUZpbGVBcnJvd0Rvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1hcnJvdy1kb3duIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImZpbGUtZG93bmxvYWQiXSwgImY1NmQiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xNzUgNDQxYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDY0LTY0YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTIzIDIzIDAtODYuMWMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDg2LjEtMjMtMjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNjQgNjR6Il0KICAgIH07CiAgICBmYUZpbGVEb3dubG9hZCA9IGZhRmlsZUFycm93RG93bjsKICAgIGZhUGVyc29uQm9vdGggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWJvb3RoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3NTYiLCAiTTQwIDI0QTU2IDU2IDAgMSAxIDE1MiAyNCA1NiA1NiAwIDEgMSA0MCAyNHptNTEuMSA4OGMyMy41IDAgNDUuNSAxMS4zIDU5LjEgMzAuNGw0OC43IDY4LjJjNiA4LjQgMTUuNyAxMy40IDI2IDEzLjRsMzEuMSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMS4xIDBjLTMxIDAtNjAuMS0xNS03OC4xLTQwLjJsLTIuOC0zLjkgMCA4MC4xIDQxLjYgMzEuMkMyMDkuOCAzNzMuMyAyMjQgNDAxLjggMjI0IDQzMmwwIDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODBjMC0xMC4xLTQuNy0xOS42LTEyLjgtMjUuNkw3MC40IDM0OC44QzQ2LjIgMzMwLjcgMzIgMzAyLjIgMzIgMjcybDAtMTAwLjlDMzIgMTM4LjUgNTguNSAxMTIgOTEuMSAxMTJ6TTMyIDUxMmwwLTEzMi43YzMuMSAyLjcgNi4zIDUuNCA5LjYgNy45TDk2IDQyOCA5NiA1MTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJ6bTU0NC04OGwwIDk2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNzItMTY4IDBjLTcuMSAwLTEzLjgtMy4xLTE4LjQtOC42cy02LjUtMTIuNi01LjMtMTkuNmwzMC43LTE3Ni43LTYzLjEtMTM3LjYgMCA3MmMtNS4yLTEtMTAuNS0xLjYtMTYtMS42bC0zMiAwIDAtMTIwYzAtMzAuOSAyNS4xLTU2IDU2LTU2TDUyMCAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2bDAgMzY4ek0yODggMzM2YzUuNSAwIDEwLjgtLjYgMTYtMS42TDMwNCA1MjBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xODQgMzIgMHoiXQogICAgfTsKICAgIGZhTG9jdXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxvY3VzdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTIwIiwgIk0zMjggMzJjMTM3IDAgMjQ4IDExMSAyNDggMjQ4bDAgNDAtLjQgOC4yQzU3MS41IDM2OC41IDUzNy40IDQwMCA0OTYgNDAwbC0xMi4zIDAgMjUuMiA0NC4xYzYuNiAxMS41IDIuNiAyNi4yLTguOSAzMi44cy0yNi4yIDIuNi0zMi43LTguOWwtMzguOC02Ny45LTgwLjQgMC00OC4yIDY5LjdjLTcuNSAxMC45LTIyLjUgMTMuNi0zMy40IDYuMXMtMTMuNi0yMi41LTYuMS0zMy40bDI5LjMtNDIuMy03NC41IDAtNTEuNyA3MC4yYy03LjkgMTAuNy0yMi45IDEyLjktMzMuNiA1LjFzLTEyLjktMjIuOS01LjEtMzMuNmw0MC41LTU1LTQzLTE2LjQtNzkuMyAxMDAuNWMtOC4yIDEwLjQtMjMuMyAxMi4yLTMzLjcgNHMtMTIuMi0yMy4zLTQtMzMuN2wyNDAtMzA0IDIuMS0yLjNjNS4yLTUuMSAxMi41LTcuNSAxOS45LTYuNiA4LjQgMS4xIDE1LjYgNi41IDE4LjkgMTQuM2wyMS43IDUwLjcgNDAuOS01NS41IDIuMS0yLjRjNS4xLTUuMyAxMi41LTggMjAtNy4yIDguNSAxIDE1LjkgNi41IDE5LjMgMTQuNGw0MS44IDk3LjUgNjQuMiAwYzEwLjIgMCAyMCAyIDI5IDUuNS0xNi40LTk0LTk4LjMtMTY1LjUtMTk3LTE2NS41bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE2IDB6TTQ4OCAyOTZhMjQgMjQgMCAxIDAgMCA0OCAyNCAyNCAwIDEgMCAwLTQ4ek00My41IDMzMS4xQzM2LjIgMzIxLjQgMzIgMzA5LjUgMzIgMjk2LjggMzIgMjY1LjUgNTcuNSAyNDAgODguOSAyNDBsMjcuNiAwLTcyLjkgOTEuMXpNMjI1LjEgMjQwbDQ4LjIgMCAxLjQtMS45LTE2LjktMzkuNS0zMi43IDQxLjV6bTEwNy44IDBsNDYuNyAwLTE3LjItNDAtMjkuNSA0MHoiXQogICAgfTsKICAgIGZhUmlnaHRMb25nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJpZ2h0LWxvbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsibG9uZy1hcnJvdy1hbHQtcmlnaHQiXSwgImYzMGIiLCAiTTU2Ni42IDIzMy40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC0xMjggMTI4Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOVMzODQgMzk2LjkgMzg0IDM4NGwwLTY0LTMzNiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTMyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDMzNiAwIDAtNjRjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnMyNS43LTIuMiAzNC45IDYuOWwxMjggMTI4eiJdCiAgICB9OwogICAgZmFMb25nQXJyb3dBbHRSaWdodCA9IGZhUmlnaHRMb25nOwogICAgZmFUcnVja0Ryb3BsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stZHJvcGxldCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNThjIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMuMyAwYzEwLjQgMzYuOSA0NC40IDY0IDg0LjcgNjRzNzQuMi0yNy4xIDg0LjctNjRsMTAyLjYgMGMxMC40IDM2LjkgNDQuNCA2NCA4NC43IDY0czc0LjItMjcuMSA4NC43LTY0bDMuMyAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTQ2LjdjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMNTEyIDE0Ni43Yy0xMi0xMi0yOC4zLTE4LjctNDUuMy0xOC43bC01MC43IDAgMC0zMmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNNTEyIDIzNy4zbDAgNTAuNy05NiAwIDAtOTYgNTAuNyAwIDQ1LjMgNDUuM3pNMTUyIDM4NGE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6bTIzMiA0MGE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwek0yMDggMzA0Yy0zOS44IDAtNzItMzIuMi03Mi03MiAwLTMzLjIgMzQuNS03OCA1NS44LTEwMi40IDguNy0xMCAyMy44LTEwIDMyLjUgMCAyMS4yIDI0LjQgNTUuOCA2OS4xIDU1LjggMTAyLjQgMCA0OC0zMi4yIDcyLTcyIDcyeiJdCiAgICB9OwogICAgZmFIYW5kSG9sZGluZ01lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1ob2xkaW5nLW1lZGljYWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTA1YyIsICJNMjQwIDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA1NiA1NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTU2IDAgMCA1NmMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC01Ni01NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDU2IDAgMC01NnpNNjYuNyAzODRsNDIuNS00Mi41YzI0LTI0IDU2LjYtMzcuNSA5MC41LTM3LjVMMzUyIDMwNGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIuNiAwIDExOS43LTg4LjJjMTcuOC0xMy4xIDQyLjgtOS4zIDU1LjkgOC41czkuMyA0Mi44LTguNSA1NS45TDQzMy4xIDQ4NS41Yy0yMy40IDE3LjItNTEuNiAyNi41LTgwLjcgMjYuNUwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMzQuNyAweiJdCiAgICB9OwogICAgZmFIYW5kUG9pbnRMZWZ0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBvaW50LWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBhNSIsICJNMzIgOTZDMTQuMyA5NiAwIDExMC4zIDAgMTI4czE0LjMgMzIgMzIgMzJsMjA4IDAgMC02NC0yMDggMHpNMTkyIDI4OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwem0tNjQtNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNDggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTk2IDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwem04OC05NmwtLjYgMGM1LjQgOS40IDguNiAyMC4zIDguNiAzMiAwIDEzLjItNCAyNS40LTEwLjggMzUuNiAyNC45IDguNyA0Mi44IDMyLjUgNDIuOCA2MC40IDAgMTEuNy0zLjEgMjIuNi04LjYgMzJsOC42IDBjODguNCAwIDE2MC03MS42IDE2MC0xNjBsMC02MS43YzAtNDIuNC0xNi45LTgzLjEtNDYuOS0xMTMuMWwtMTEuNi0xMS42QzQyOS41IDc3LjUgMzk2LjkgNjQgMzYzIDY0bC0yNyAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDg4YzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBsMC01NmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNTZjMCAzOS44LTMyLjIgNzItNzIgNzJ6Il0KICAgIH07CiAgICBmYUNhbGN1bGF0b3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FsY3VsYXRvciIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODQyNV0sICJmMWVjIiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwek05NiA2NGwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTYgMTY4YTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6bTgwIDI0YTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHptMTI4LTI0YTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6TTg4IDM1MmEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6bTEyOC0yNGEyNCAyNCAwIDEgMSAtNDggMCAyNCAyNCAwIDEgMSA0OCAwem04MCAyNGEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6TTY0IDQyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw4OCA0NDhjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0yMzItMjRjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjQtMjQtMTAuNy0yNC0yNCAxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtaW51cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzgyMTEsIDg3MjIsIDEwMTM0LCAic3VidHJhY3QiXSwgImYwNjgiLCAiTTAgMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYVN1YnRyYWN0ID0gZmFNaW51czsKICAgIGZhQXJyb3dVcFpBID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLXotYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LWFscGhhLXVwLWFsdCJdLCAiZjg4MiIsICJNMTUwLjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTgwIDgwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDk2IDE0MS4zIDk2IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzA2LjcgMjUuNCAyNS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTgwLTgwek0yODggNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNTAuNyAwLTczLjQgNzMuNGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlTMzA3LjEgMjI0IDMyMCAyMjRsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTUwLjcgMCA3My40LTczLjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNDYxIDMyIDQ0OCAzMkwzMjAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek00MTIuNiAyNzMuN0M0MDcuMiAyNjIuOCAzOTYuMSAyNTYgMzg0IDI1NnMtMjMuMiA2LjgtMjguNiAxNy43bC04MCAxNjBjLTcuOSAxNS44LTEuNSAzNSAxNC4zIDQyLjlzMzUgMS41IDQyLjktMTQuM2w3LjItMTQuMyA4OC40IDAgNy4yIDE0LjNjNy45IDE1LjggMjcuMSAyMi4yIDQyLjkgMTQuM3MyMi4yLTI3LjEgMTQuMy00Mi45bC04MC0xNjB6TTM4NCAzNTkuNmwyMC4yIDQwLjQtNDAuNCAwIDIwLjItNDAuNHoiXQogICAgfTsKICAgIGZhU29ydEFscGhhVXBBbHQgPSBmYUFycm93VXBaQTsKICAgIGZhTWljcm9waG9uZVNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pY3JvcGhvbmUtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjEzMSIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0MjQuNyAzNTguOEM0NTguOSAzMjQuMiA0ODAgMjc2LjYgNDgwIDIyNGwwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDBjMCAzOS4zLTE1LjcgNzQuOS00MS4zIDEwMC45TDM1Ni44IDI5MUMzNzMuNiAyNzMuNyAzODQgMjUwIDM4NCAyMjRsMC0xMjhjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZsMCAzMC4yLTE1MS0xNTF6bTI5OC4zIDQzNGwtNDEuNC00MS40Yy0zLjMgLjItNi41IC4zLTkuOCAuMy03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NGwwLTEwLjItNDMuNi00My42Yy0yLjggMy45LTQuNCA4LjctNC40IDEzLjhsMCA0MGMwIDk3LjkgNzMuMyAxNzguNyAxNjggMTkwLjVsMCA0OS41LTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMC00OS41YzkuMy0xLjIgMTguNC0zIDI3LjMtNS40eiJdCiAgICB9OwogICAgZmFTcXVhcmVQZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXBlbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJwZW4tc3F1YXJlIiwgInBlbmNpbC1zcXVhcmUiXSwgImYxNGIiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTMyNS44IDEzOS43bDE0LjQgMTQuNGMxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNmwtMjMuOCAyMy44LTcxLTcxIDIzLjgtMjMuOGMxNS42LTE1LjYgNDAuOS0xNS42IDU2LjYgMHpNMTE5LjkgMjg5bDkxLjUtOTEuNiA3MSA3MS05MS42IDkxLjVjLTQuMSA0LjEtOS4yIDctMTQuOSA4LjRsLTYwLjEgMTVjLTUuNSAxLjQtMTEuMi0uMi0xNS4yLTQuMnMtNS42LTkuNy00LjItMTUuMmwxNS02MC4xYzEuNC01LjYgNC4zLTEwLjggOC40LTE0Ljl6Il0KICAgIH07CiAgICBmYVBlblNxdWFyZSA9IGZhU3F1YXJlUGVuOwogICAgZmFQZW5jaWxTcXVhcmUgPSBmYVNxdWFyZVBlbjsKICAgIGZhSGFuZEZpc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1maXN0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTk5NCwgImZpc3QtcmFpc2VkIl0sICJmNmRlIiwgIk0xNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDExMi02NCAwIDAtMTEyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zMiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMlM5NiA0Ni4zIDk2IDY0bDAgODAtNjQgMCAwLTgwem0xOTIgMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NnptOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6bS05NiA4OGwwLS42YzkuNCA1LjQgMjAuMyA4LjYgMzIgOC42IDEzLjIgMCAyNS40LTQgMzUuNi0xMC44IDguNyAyNC45IDMyLjUgNDIuOCA2MC40IDQyLjggMTEuNyAwIDIyLjYtMy4xIDMyLTguNmwwIDguNmMwIDUyLjMtMjUuMSA5OC44LTY0IDEyOGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xNjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC03OC40Yy0xNy4zLTcuOS0zMy4yLTE4LjgtNDYuOS0zMi41TDM3LjUgMzU3LjVDMTMuNSAzMzMuNSAwIDMwMC45IDAgMjY3bDAtMjdjMC0zNS4zIDI4LjctNjQgNjQtNjRsODggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MGwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw1NiAwYzM5LjggMCA3Mi0zMi4yIDcyLTcyeiJdCiAgICB9OwogICAgZmFGaXN0UmFpc2VkID0gZmFIYW5kRmlzdDsKICAgIGZhQ29tbWVudFNtcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21tZW50LXNtcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzbXMiXSwgImY3Y2QiLCAiTTI1NiA0ODBjMTQxLjQgMCAyNTYtMTA3LjUgMjU2LTI0MFMzOTcuNCAwIDI1NiAwIDAgMTA3LjUgMCAyNDBjMCA1NC4zIDE5LjIgMTA0LjMgNTEuNiAxNDQuNUwyLjggNDc2LjhjLTQuOCA5LTMuMyAyMCAzLjYgMjcuNXMxNy44IDkuOCAyNy4xIDUuOGwxMTguNC01MC43QzE4My43IDQ3Mi42IDIxOC45IDQ4MCAyNTYgNDgwek0xNDAuOCAxNzIuOGwxOS4yIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE5LjIgMGMtNS4zIDAtOS42IDQuMy05LjYgOS42czQuMyA5LjYgOS42IDkuNmMyMyAwIDQxLjYgMTguNiA0MS42IDQxLjZzLTE4LjYgNDEuNi00MS42IDQxLjZsLTI1LjYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwyNS42IDBjNS4zIDAgOS42LTQuMyA5LjYtOS42cy00LjMtOS42LTkuNi05LjZjLTIzIDAtNDEuNi0xOC42LTQxLjYtNDEuNnMxOC42LTQxLjYgNDEuNi00MS42em0xODguOCA0MS42YzAtMjMgMTguNi00MS42IDQxLjYtNDEuNmwxOS4yIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE5LjIgMGMtNS4zIDAtOS42IDQuMy05LjYgOS42czQuMyA5LjYgOS42IDkuNmMyMyAwIDQxLjYgMTguNiA0MS42IDQxLjZzLTE4LjYgNDEuNi00MS42IDQxLjZsLTI1LjYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwyNS42IDBjNS4zIDAgOS42LTQuMyA5LjYtOS42cy00LjMtOS42LTkuNi05LjZjLTIzIDAtNDEuNi0xOC42LTQxLjYtNDEuNnptLTk4LjMtMzMuOGwyNC43IDQxLjEgMjQuNy00MS4xYzMuNy02LjIgMTEuMS05LjEgMTgtNy4yczExLjcgOC4yIDExLjcgMTUuNGwwIDEwMi40YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNDQuNi04LjcgMTQuNWMtMi45IDQuOC04LjEgNy44LTEzLjcgNy44cy0xMC44LTMtMTMuNy03LjhsLTguNy0xNC41IDAgNDQuNmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTEwMi40YzAtNy4yIDQuOC0xMy41IDExLjctMTUuNHMxNC4zIDEgMTggNy4yeiJdCiAgICB9OwogICAgZmFTbXMgPSBmYUNvbW1lbnRTbXM7CiAgICBmYVNpbUNhcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2ltLWNhcmQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjdjNCIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjU4LjcgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyA4MGMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek05NiAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDAgMTI4IDAgMC03Mi05NiAwek02NCA0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsNDggMCAwLTcyLTgwIDAgMCA0MHptMjU2IDBsMC00MC0xMjggMCAwIDcyIDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6bTAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMybC00OCAwIDAgNzIgODAgMCAwLTQweiJdCiAgICB9OwogICAgZmFTY2FsZUJhbGFuY2VkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjYWxlLWJhbGFuY2VkIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbOTg3OCwgImJhbGFuY2Utc2NhbGUiXSwgImYyNGUiLCAiTTM4NCAzMmwxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzOTguNCA5NmMtNS4yIDI1LjgtMjIuOSA0Ny4xLTQ2LjQgNTcuM2wwIDI5NC43IDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zODQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNjAgMCAwLTI5NC43Yy0yMy41LTEwLjMtNDEuMi0zMS42LTQ2LjQtNTcuM0wxMjggOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTI4IDBjMTQuNi0xOS40IDM3LjgtMzIgNjQtMzJzNDkuNCAxMi42IDY0IDMyem01NS42IDI4OEw1ODQuNCAzMjAgNTEyIDE5NS44IDQzOS42IDMyMHpNNTEyIDQxNmMtNjIuOSAwLTExNS4yLTM0LTEyNi03OC45LTIuNi0xMSAxLTIyLjMgNi43LTMyLjFsOTUuMi0xNjMuMmM1LTguNiAxNC4yLTEzLjggMjQuMS0xMy44czE5LjEgNS4zIDI0LjEgMTMuOGw5NS4yIDE2My4yYzUuNyA5LjggOS4zIDIxLjEgNi43IDMyLjEtMTAuOCA0NC44LTYzLjEgNzguOS0xMjYgNzguOXpNMTI2LjggMTk1LjhMNTQuNCAzMjAgMTk5LjMgMzIwIDEyNi44IDE5NS44ek0uOSAzMzcuMWMtMi42LTExIDEtMjIuMyA2LjctMzIuMWw5NS4yLTE2My4yYzUtOC42IDE0LjItMTMuOCAyNC4xLTEzLjhzMTkuMSA1LjMgMjQuMSAxMy44bDk1LjIgMTYzLjJjNS43IDkuOCA5LjMgMjEuMSA2LjcgMzIuMS0xMC44IDQ0LjgtNjMuMSA3OC45LTEyNiA3OC45UzExLjcgMzgyIC45IDMzNy4xeiJdCiAgICB9OwogICAgZmFCYWxhbmNlU2NhbGUgPSBmYVNjYWxlQmFsYW5jZWQ7CiAgICBmYUNhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg2NjQsICJhdXRvbW9iaWxlIl0sICJmMWI5IiwgIk0xMzUuMiAxMTcuNGwtMjYuMSA3NC42IDI5My44IDAtMjYuMS03NC42QzM3Mi4zIDEwNC42IDM2MC4yIDk2IDM0Ni42IDk2TDE2NS40IDk2Yy0xMy42IDAtMjUuNyA4LjYtMzAuMiAyMS40ek0zOS42IDE5Ni44TDc0LjggOTYuM0M4OC4zIDU3LjggMTI0LjYgMzIgMTY1LjQgMzJsMTgxLjIgMGM0MC44IDAgNzcuMSAyNS44IDkwLjYgNjQuM2wzNS4yIDEwMC41YzIzLjIgOS42IDM5LjYgMzIuNSAzOS42IDU5LjJsMCAxOTJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzItMzIwIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMCAyNTZjMC0yNi43IDE2LjQtNDkuNiAzOS42LTU5LjJ6TTEyOCAzMDRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMjg4IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQXV0b21vYmlsZSA9IGZhQ2FyOwogICAgZmFDcm9wU2ltcGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNyb3Atc2ltcGxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNyb3AtYWx0Il0sICJmNTY1IiwgIk0xMjggMzJjMC0xNy43LTE0LjMtMzItMzItMzJTNjQgMTQuMyA2NCAzMmwwIDMyLTMyIDBDMTQuMyA2NCAwIDc4LjMgMCA5NnMxNC4zIDMyIDMyIDMybDMyIDAgMCAyNTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjA4IDAgMC02NC0yMDggMCAwLTM1MnpNMzg0IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtMjA4IDAgMCA2NCAyMDggMCAwIDM1MnoiXQogICAgfTsKICAgIGZhQ3JvcEFsdCA9IGZhQ3JvcFNpbXBsZTsKICAgIGZhTWVkYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWVkYWwiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5NDFdLCAiZjVhMiIsICJNMjI0LjMgMTI4TDEzOS43LTEyLjljLTYuNS0xMC44LTIwLjEtMTQuNy0zMS4zLTkuMUwyMS44IDIxLjNDOS45IDI3LjIgNS4xIDQxLjYgMTEgNTMuNUw4MC42IDE5Mi42Yy0zMC4xIDMzLjktNDguMyA3OC41LTQ4LjMgMTI3LjQgMCAxMDYgODYgMTkyIDE5MiAxOTJzMTkyLTg2IDE5Mi0xOTJjMC00OC45LTE4LjMtOTMuNS00OC4zLTEyNy40TDQzNy42IDUzLjVjNS45LTExLjkgMS4xLTI2LjMtMTAuNy0zMi4yTDM0MC4yLTIyLjFjLTExLjItNS42LTI0LjktMS42LTMxLjMgOS4xTDIyNC4zIDEyOHptMzAuOCAxNDIuNWMxLjQgMi44IDQgNC43IDcgNS4xbDUwLjEgNy4zYzcuNyAxLjEgMTAuNyAxMC41IDUuMiAxNmwtMzYuMyAzNS40Yy0yLjIgMi4yLTMuMiA1LjItMi43IDguM2w4LjYgNDkuOWMxLjMgNy42LTYuNyAxMy41LTEzLjYgOS45bC00NC44LTIzLjZjLTIuNy0xLjQtNi0xLjQtOC43IDBsLTQ0LjggMjMuNmMtNi45IDMuNi0xNC45LTIuMi0xMy42LTkuOWw4LjYtNDkuOWMuNS0zLS41LTYuMS0yLjctOC4zbC0zNi4zLTM1LjRjLTUuNi01LjQtMi41LTE0LjggNS4yLTE2bDUwLjEtNy4zYzMtLjQgNS43LTIuNCA3LTUuMWwyMi40LTQ1LjRjMy40LTcgMTMuMy03IDE2LjggMGwyMi40IDQ1LjR6Il0KICAgIH07CiAgICBmYVNjcm9sbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY3JvbGwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgyMjBdLCAiZjcwZSIsICJNMCAxMTJDMCA3MC41IDMxLjYgMzYuNCA3MiAzMi40bDAtLjQgMjgwIDBjNTMgMCA5NiA0MyA5NiA5NmwwIDE3Ni0xNzYgMGMtMzkuOCAwLTcyIDMyLjItNzIgNzJsMCA2MGMwIDI0LjMtMTkuNyA0NC00NCA0NHMtNDQtMTkuNy00NC00NGwwLTIyOC02NCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTQ4ek0yMzYuOCA0ODBjNy4xLTEzLjEgMTEuMi0yOC4xIDExLjItNDRsMC02MGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwyNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDI0YzAgNDQuMi0zNS44IDgwLTgwIDgwbC0yMjcuMiAwek04MCA4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0OCA2NCAwIDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJ6Il0KICAgIH07CiAgICBmYUZpbGVFeGNlbDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1leGNlbCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWMzIiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTY0IDI2Ni43Yy03LjQtMTEtMjIuMy0xNC0zMy4zLTYuN3MtMTQgMjIuMy02LjcgMzMuM0wxNjMuMiAzNTIgMTI0IDQxMC43Yy03LjQgMTEtNC40IDI1LjkgNi43IDMzLjNzMjUuOSA0LjQgMzMuMy02LjdsMjgtNDIgMjggNDJjNy40IDExIDIyLjMgMTQgMzMuMyA2LjdzMTQtMjIuMyA2LjctMzMuM0wyMjAuOCAzNTIgMjYwIDI5My4zYzcuNC0xMSA0LjQtMjUuOS02LjctMzMuM3MtMjUuOS00LjQtMzMuMyA2LjdsLTI4IDQyLTI4LTQyeiJdCiAgICB9OwogICAgZmFGaWx0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsdGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwYjAiLCAiTTMyIDY0QzE5LjEgNjQgNy40IDcxLjggMi40IDgzLjhTLjIgMTA5LjUgOS40IDExOC42TDE5MiAzMDEuMyAxOTIgNDE2YzAgOC41IDMuNCAxNi42IDkuNCAyMi42bDY0IDY0YzkuMiA5LjIgMjIuOSAxMS45IDM0LjkgNi45UzMyMCA0OTIuOSAzMjAgNDgwbDAtMTc4LjcgMTgyLjYtMTgyLjZjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNDkyLjkgNjQgNDgwIDY0TDMyIDY0eiJdCiAgICB9OwogICAgZmFEcnVtID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRydW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzNDVdLCAiZjU2OSIsICJNNTAxLjIgNzYuMWMxMS4xLTcuMyAxNC4yLTIyLjEgNi45LTMzLjJzLTIyLjEtMTQuMi0zMy4yLTYuOUwzNzAuMiAxMDQuNUMzMzUuOCA5OC43IDI5NyA5NiAyNTYgOTYgMTE0LjYgOTYgMCAxMjggMCAyMDhMMCAzNjhjMCAzMS4zIDI3LjQgNTguOCA3MiA3OC43TDcyIDM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTE5LjRjMzMgOC45IDcxLjEgMTQuNSAxMTIgMTYuMUwyMzIgMzc2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDMuNWM0MC45LTEuNiA3OS03LjIgMTEyLTE2LjFMMzkyIDM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTAyLjdjNDQuNi0xOS45IDcyLTQ3LjQgNzItNzguN2wwLTE2MGMwLTQxLjEtMzAuMi02OS41LTc4LjgtODcuNGw2Ny45LTQ0LjV6TTMwNy40IDE0NS42bC02NC42IDQyLjNjLTExLjEgNy4zLTE0LjIgMjIuMS02LjkgMzMuMnMyMi4xIDE0LjIgMzMuMiA2LjlsMTExLjEtNzIuOGMxNC43IDMuMiAyNy45IDcgMzkuNCAxMS41IDM4LjggMTUuMSA0NC40IDMwLjYgNDQuNCA0MS4zIDAgLjgtMi43IDE3LjItNDYgMzUuOS0zOC45IDE2LjgtOTYgMjguMS0xNjIgMjguMVMxMzIuOSAyNjAuNyA5NCAyNDMuOWMtNDMuMy0xOC43LTQ2LTM1LjEtNDYtMzUuOSAwLTEwLjYgNS42LTI2LjIgNDQuNC00MS4zIDM4LjMtMTQuOSA5NS40LTIyLjcgMTYzLjYtMjIuNyAxOCAwIDM1LjEgLjUgNTEuNCAxLjZ6Il0KICAgIH07CiAgICBmYU1hcFBpbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXAtcGluIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTI4MjA1XSwgImYyNzYiLCAiTTE5MiAyODQuNEMyNTYuMSAyNjkuOSAzMDQgMjEyLjUgMzA0IDE0NCAzMDQgNjQuNSAyMzkuNSAwIDE2MCAwUzE2IDY0LjUgMTYgMTQ0YzAgNjguNSA0Ny45IDEyNS45IDExMiAxNDAuNEwxMjggNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xOTUuNnpNMTY4IDk2Yy0zMC45IDAtNTYgMjUuMS01NiA1NiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTU3LjQgNDYuNi0xMDQgMTA0LTEwNCAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHoiXQogICAgfTsKICAgIGZhU2NhbGVVbmJhbGFuY2VkRmxpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2FsZS11bmJhbGFuY2VkLWZsaXAiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiYmFsYW5jZS1zY2FsZS1yaWdodCJdLCAiZjUxNiIsICJNMTE4LjIgNjIuNEMxMDEuNSA1Ni44IDkyLjQgMzguNiA5OCAyMS45UzEyMS43LTMuOSAxMzguNSAxLjZsMTEzIDM3LjdjMTMuOS0yMy41IDM5LjYtMzkuMyA2OC45LTM5LjMgNDQuMiAwIDgwIDM1LjggODAgODAgMCAzLS4yIDUuOS0uNSA4LjhsMTIyLjYgNDAuOWMxNi44IDUuNiAyNS44IDIzLjcgMjAuMiA0MC41cy0yMy43IDI1LjgtNDAuNSAyMC4yTDM2Ni43IDE0NS4yYy00LjUgMy4yLTkuMyA1LjktMTQuNCA4LjJsMCAzMjYuN2MwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYwIDAgMC0yOTQuN2MtMjEtOS4yLTM3LjItMjctNDQuMi00OWwtMTI1LjktNDJ6TTIwMC44IDI4OEwxMjguMyAxNjMuOCA1NS45IDI4OCAyMDAuOCAyODh6bS03Mi40IDk2Yy02Mi45IDAtMTE1LjItMzQtMTI2LTc4LjktMi42LTExIDEtMjIuMyA2LjctMzIuMWw5NS4yLTE2My4yYzUtOC42IDE0LjItMTMuOCAyNC4xLTEzLjhzMTkuMSA1LjMgMjQuMSAxMy44bDk1LjIgMTYzLjJjNS43IDkuOCA5LjMgMjEuMSA2LjcgMzIuMS0xMC44IDQ0LjgtNjMuMSA3OC45LTEyNiA3OC45em0zODIuOC05Mi4ybC03Mi40IDEyNC4yIDE0NC45IDAtNzIuNC0xMjQuMnptMTI2IDE0MS4zQzYyNi40IDQ3OCA1NzQuMSA1MTIgNTExLjIgNTEycy0xMTUuMi0zNC0xMjYtNzguOWMtMi42LTExIDEtMjIuMyA2LjctMzIuMWw5NS4yLTE2My4yYzUtOC42IDE0LjItMTMuOCAyNC4xLTEzLjhzMTkuMSA1LjMgMjQuMSAxMy44bDk1LjIgMTYzLjJjNS43IDkuOCA5LjMgMjEuMSA2LjcgMzIuMXoiXQogICAgfTsKICAgIGZhQmFsYW5jZVNjYWxlUmlnaHQgPSBmYVNjYWxlVW5iYWxhbmNlZEZsaXA7CiAgICBmYUFycm93c1RvQ2lyY2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy10by1jaXJjbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRiZCIsICJNOS40IDkuNEMyMS45LTMuMSA0Mi4xLTMuMSA1NC42IDkuNEwxMjggODIuNyAxMjggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE4LjcgMC03My40LTczLjRDLTMuMSA0Mi4xLTMuMSAyMS45IDkuNCA5LjR6TTIwMCAyNTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek01MDIuNiA1NC42TDQyOS4zIDEyOCA0NDggMTI4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxOC43IDczLjQtNzMuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zem0tNDUuMyA0NDhMMzg0IDQyOS4zIDM4NCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOC43IDAgNzMuNCA3My40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwek05LjQgNDU3LjRMODIuNyAzODQgNjQgMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE4LjctNzMuNCA3My40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM3oiXQogICAgfTsKICAgIGZhRW52ZWxvcGUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVudmVsb3BlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Mzg2LCA5OTkzLCA2MTQ0M10sICJmMGUwIiwgIk00OCA2NGMtMjYuNSAwLTQ4IDIxLjUtNDggNDggMCAxNS4xIDcuMSAyOS4zIDE5LjIgMzguNGwyMDggMTU2YzE3LjEgMTIuOCA0MC41IDEyLjggNTcuNiAwbDIwOC0xNTZjMTIuMS05LjEgMTkuMi0yMy4zIDE5LjItMzguNCAwLTI2LjUtMjEuNS00OC00OC00OEw0OCA2NHpNMCAxOTZMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xODgtMTk4LjQgMTQ4LjhjLTM0LjEgMjUuNi04MS4xIDI1LjYtMTE1LjIgMEwwIDE5NnoiXQogICAgfTsKICAgIGZhQmFieSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWJ5IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY3N2MiLCAiTTEyMCA4OGE3MiA3MiAwIDEgMSAxNDQgMCA3MiA3MiAwIDEgMSAtMTQ0IDB6TTcuNyAxNDQuNWMxMy0xNy45IDM4LTIxLjggNTUuOS04LjhMOTkuOCAxNjJjMjYuOCAxOS41IDU5LjEgMzAgOTIuMiAzMHM2NS40LTEwLjUgOTIuMi0zMGwzNi4yLTI2LjRjMTcuOS0xMyA0Mi45LTkgNTUuOSA4LjhzOSA0Mi45LTguOCA1NS45bC0zNi4yIDI2LjRjLTEzLjYgOS45LTI4LjEgMTguMi00My4zIDI1bDAgMzYuMy0xOTIgMCAwLTM2LjNjLTE1LjItNi43LTI5LjctMTUuMS00My4zLTI1TDE2LjUgMjAwLjNjLTE3LjktMTMtMjEuOC0zOC04LjgtNTUuOXpNOTcuNSAzMjkuM2w2MC42IDUzLTI2IDM3LjIgMjQuMyAyNC4zYzE1LjYgMTUuNiAxNS42IDQwLjkgMCA1Ni42cy00MC45IDE1LjYtNTYuNiAwbC00OC00OEMzOCA0MzguNiAzNi4xIDQxNyA0Ny4yIDQwMS4xbDUwLjItNzEuOHptMTI4LjUgNTNsNjAuNi01MyA1MC4yIDcxLjhjMTEuMSAxNS45IDkuMiAzNy41LTQuNSA1MS4ybC00OCA0OGMtMTUuNiAxNS42LTQwLjkgMTUuNi01Ni42IDBzLTE1LjYtNDAuOSAwLTU2LjZsMjQuMy0yNC4zLTI2LTM3LjJ6Il0KICAgIH07CiAgICBmYVNxdWFyZUNhcmV0RG93bjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWNhcmV0LWRvd24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY2FyZXQtc3F1YXJlLWRvd24iXSwgImYxNTAiLCAiTTM4NCA0ODBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMHpNMjI0IDM1MmMtNi43IDAtMTMtMi44LTE3LjYtNy43bC0xMDQtMTEyYy02LjUtNy04LjItMTcuMi00LjQtMjUuOVMxMTAuNSAxOTIgMTIwIDE5MmwyMDggMGM5LjUgMCAxOC4yIDUuNyAyMiAxNC40czIuMSAxOC45LTQuNCAyNS45bC0xMDQgMTEyYy00LjUgNC45LTEwLjkgNy43LTE3LjYgNy43eiJdCiAgICB9OwogICAgZmFDYXJldFNxdWFyZURvd24yID0gZmFTcXVhcmVDYXJldERvd24yOwogICAgZmFUZW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU3ZCIsICJNMjYuOSAyMDYuOUwzLjcgNDQ0LjlDMS44IDQ2My43IDE2LjYgNDgwIDM1LjUgNDgwbDE3Mi43IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xMjljMC04LjMgNi43LTE1IDE1LTE1IDUuNSAwIDEwLjYgMyAxMy4yIDcuOWw4Ni4xIDE1OWM4LjQgMTUuNSAyNC42IDI1LjEgNDIuMiAyNS4xbDY0LjEgMGMxOC45IDAgMzMuNy0xNi4zIDMxLjgtMzUuMUw0ODUuNiAyMDcuMWMtMS45LTE5LjYtMTIuOC0zNy4zLTI5LjUtNDcuOEwyODAuOSA0OC4zYy0xNS43LTEwLTM1LjgtOS45LTUxLjUgLjFMNTYuMSAxNTkuMmMtMTYuNSAxMC42LTI3LjMgMjguMi0yOS4yIDQ3Ljd6Il0KICAgIH07CiAgICBmYUEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk3XSwgIjQxIiwgIk0yMjEuNSA1MS43QzIxNi42IDM5LjggMjA0LjkgMzIgMTkyIDMycy0yNC42IDcuOC0yOS41IDE5LjdjLTkzLjMgMjI0LTE0Ni43IDM1Mi0xNjAgMzg0LTYuOCAxNi4zIC45IDM1IDE3LjIgNDEuOHMzNS0uOSA0MS44LTE3LjJsMzEuOC03Ni4zIDE5Ny4zIDAgMzEuOCA3Ni4zYzYuOCAxNi4zIDI1LjUgMjQgNDEuOCAxNy4yczI0LTI1LjUgMTcuMi00MS44Yy0xMy4zLTMyLTY2LjctMTYwLTE2MC0zODR6TTI2NCAzMjBsLTE0NCAwIDcyLTE3Mi44IDcyIDE3Mi44eiJdCiAgICB9OwogICAgZmFQYXJhY2h1dGVCb3ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFyYWNodXRlLWJveCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGNkIiwgIk0xMjggMjI0QzEyOCAxNTIuMiAxNDQuMyA4OC40IDE2OS41IDQzLjQgMTk1LjEtMi40IDIyNi42LTI0IDI1Ni0yNHM2MC45IDIxLjYgODYuNSA2Ny40QzM2Ny43IDg4LjQgMzg0IDE1Mi4yIDM4NCAyMjRsLTEwNCAwIDAgOTYgOCAwYzkuMyAwIDE4LjEgMiAyNiA1LjVsMTE4LjQtMTAxLjUtLjUgMGMwLTc4LjQtMTcuNy0xNTAuNi00Ny42LTIwNC02LjEtMTEtMTIuOS0yMS4zLTIwLjMtMzAuOSA4Ni41IDM1LjkgMTQ3LjggMTE1LjEgMTQ3LjggMjE4LjkgMCA3LTMuMSAxMy43LTguNCAxOC4yTDM0Ny40IDM2MC4xYzMgNy40IDQuNiAxNS40IDQuNiAyMy45bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRjMC04LjQgMS42LTE2LjUgNC42LTIzLjlMOC40IDIyNi4yQzMuMSAyMjEuNyAwIDIxNSAwIDIwOCAwIDEwNC4yIDYxLjMgMjQuOSAxNDcuOC0xMC45IDE0MC41LTEuNCAxMzMuNyA5IDEyNy42IDIwIDk3LjcgNzMuNCA4MCAxNDUuNiA4MCAyMjRsLS41IDAgMTE4LjQgMTAxLjVjOC0zLjUgMTYuOC01LjUgMjYtNS41bDggMCAwLTk2LTEwNCAweiJdCiAgICB9OwogICAgZmFDYXJ0QXJyb3dEb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcnQtYXJyb3ctZG93biIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjE4IiwgIk0wIDhDMC01LjMgMTAuNy0xNiAyNC0xNmw0NS4zIDBjMjcuMSAwIDUwLjMgMTkuNCA1NS4xIDQ2bC40IDIgMTg3LjIgMCAwIDEwMi4xLTMxLTMxYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDcyIDcyYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDcyLTcyYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTMxIDMxIDAtMTAyLjEgMTc3LjQgMGMyMCAwIDM1LjEgMTguMiAzMS40IDM3LjlMNTM3LjggMjM1LjhjLTUuNyAzMC4zLTMyLjEgNTIuMi02Mi45IDUyLjJsLTMwMy42IDAgNS4xIDI4LjNjMi4xIDExLjQgMTIgMTkuNyAyMy42IDE5LjdMNDU2IDMzNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjU1LjkgMGMtMzQuOCAwLTY0LjYtMjQuOS03MC44LTU5LjFMNzcuMiAzOC42Yy0uNy0zLjgtNC02LjYtNy45LTYuNkwyNCAzMkMxMC43IDMyIDAgMjEuMyAwIDh6TTE2MCA0NjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMjI0IDBhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXQogICAgfTsKICAgIGZhQnJpZGdlQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJpZGdlLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGNhIiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsOCAwIDAgNjQtNDAgMCAwIDExMmMzNy42IDkuNCA2NCA0My4yIDY0IDgybDAgOTRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtNTMgNDMtOTYgOTYtOTYgNi40IDAgMTIuNyAuNiAxOC43IDEuOCAzNC43LTQ5LjUgOTIuMi04MS44IDE1Ny4zLTgxLjggMjguNiAwIDU1LjYgNi4yIDgwIDE3LjRsMC02NS40LTQwIDAgMC02NCA4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6TTQyNCA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek0yOTYgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNODggOTZsODAgMCAwIDY0LTgwIDAgMC02NHpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYUNsb3VkQXJyb3dVcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1hcnJvdy11cCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYyMzM4LCAiY2xvdWQtdXBsb2FkIiwgImNsb3VkLXVwbG9hZC1hbHQiXSwgImYwZWUiLCAiTTE0NCA0ODBjLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0IDAtNjMuNCA0MS0xMTcuMiA5Ny45LTEzNi41LTEuMy03LjctMS45LTE1LjUtMS45LTIzLjUgMC03OS41IDY0LjUtMTQ0IDE0NC0xNDQgNTUuNCAwIDEwMy41IDMxLjMgMTI3LjYgNzcuMSAxNC4yLTguMyAzMC44LTEzLjEgNDguNC0xMy4xIDUzIDAgOTYgNDMgOTYgOTYgMCAxNS43LTMuOCAzMC42LTEwLjUgNDMuNyA0NCAyMC4zIDc0LjUgNjQuNyA3NC41IDExNi4zIDAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0zMDQgMHpNMzA1IDE5MWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTcyIDcyYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzEtMzEgMCAxMDIuMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTAyLjEgMzEgMzFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC03Mi03MnoiXQogICAgfTsKICAgIGZhQ2xvdWRVcGxvYWQgPSBmYUNsb3VkQXJyb3dVcDsKICAgIGZhQ2xvdWRVcGxvYWRBbHQgPSBmYUNsb3VkQXJyb3dVcDsKICAgIGZhQXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTk0Nl0sICI0MCIsICJNMjU2IDY0QzE1MCA2NCA2NCAxNTAgNjQgMjU2czg2IDE5MiAxOTIgMTkyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyQzExNC42IDUxMiAwIDM5Ny40IDAgMjU2UzExNC42IDAgMjU2IDAgNTEyIDExNC42IDUxMiAyNTZsMCAzMmMwIDUzLTQzIDk2LTk2IDk2LTI5LjMgMC01NS42LTEzLjItNzMuMi0zMy45LTIyLjggMjEtNTMuMyAzMy45LTg2LjggMzMuOS03MC43IDAtMTI4LTU3LjMtMTI4LTEyOHM1Ny4zLTEyOCAxMjgtMTI4YzI3LjkgMCA1My43IDguOSA3NC43IDI0LjEgNS43LTUgMTMuMS04LjEgMjEuMy04LjEgMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyYzAtMTA2LTg2LTE5Mi0xOTItMTkyem02NCAxOTJhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAweiJdCiAgICB9OwogICAgZmFJbmRpYW5SdXBlZVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaW5kaWFuLXJ1cGVlLXNpZ24iLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsiaW5kaWFuLXJ1cGVlIiwgImluciJdLCAiZTFiYyIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwyNjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNzYuNyAwYzE3LjcgMTkuOCAzMC4xIDQ0LjYgMzQuNyA3Mmw0MiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00MiAwYy0xMC40IDYyLjItNjAuOCAxMTAuOS0xMjMuOCAxMTguOUwyNzQuNiA0MjJjMTQuNCAxMC4zIDE3LjcgMzAuMyA3LjQgNDQuNnMtMzAuMyAxNy43LTQ0LjYgNy40TDEzLjQgMzE0QzIuMSAzMDYtMi43IDI5MS41IDEuNSAyNzguMlMxOC4xIDI1NiAzMiAyNTZsODAgMGMzNS44IDAgNjYuMS0yMy41IDc2LjMtNTZMMjQgMjAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE2NC4zIDBjLTEwLjItMzIuNS00MC41LTU2LTc2LjMtNTZMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHoiXQogICAgfTsKICAgIGZhSW5kaWFuUnVwZWUgPSBmYUluZGlhblJ1cGVlU2lnbjsKICAgIGZhSW5yID0gZmFJbmRpYW5SdXBlZVNpZ247CiAgICBmYVRydWNrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY2NiwgOTk1MV0sICJmMGQxIiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIgNTAuNyAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDU1Ny4zIDE5MmMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDU3NiAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTMuMyAwYy0xMC40IDM2LjktNDQuNCA2NC04NC43IDY0cy03NC4yLTI3LjEtODQuNy02NGwtMTAyLjYgMGMtMTAuNCAzNi45LTQ0LjQgNjQtODQuNyA2NHMtNzQuMi0yNy4xLTg0LjctNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek01MTIgMjg4bDAtNTAuNy00NS4zLTQ1LjMtNTAuNyAwIDAgOTYgOTYgMHpNMTkyIDQyNGE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAwem0yMzIgNDBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdCiAgICB9OwogICAgZmFDaGFsa2JvYXJkVXNlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFsa2JvYXJkLXVzZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiY2hhbGtib2FyZC10ZWFjaGVyIl0sICJmNTFjIiwgIk0xMjggOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzUyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDAtOTYgMCAwLTE2YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE2LTEyOS4xIDBjMTAuOS0xOC44IDE3LjEtNDAuNyAxNy4xLTY0IDAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4LTUuNCAwLTEwLjggLjMtMTYgMWwwLTQ5ek0zMzMgNDQ4Yy01LjEtMjQuMi0xNi4zLTQ2LjEtMzIuMS02NEw2MDggMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yMTEgMHpNNjQgMjcyYTgwIDgwIDAgMSAxIDE2MCAwIDgwIDgwIDAgMSAxIC0xNjAgMHpNMCA0ODBjMC01MyA0My05NiA5Ni05Nmw5NiAwYzUzIDAgOTYgNDMgOTYgOTYgMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhQ2hhbGtib2FyZFRlYWNoZXIgPSBmYUNoYWxrYm9hcmRVc2VyOwogICAgZmFVc2VyQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1jaGVjayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNGZjIiwgIk0yODYgMzA0Yzk4LjUgMCAxNzguMyA3OS44IDE3OC4zIDE3OC4zIDAgMTYuNC0xMy4zIDI5LjctMjkuNyAyOS43TDc4IDUxMmMtMTYuNCAwLTI5LjctMTMuMy0yOS43LTI5LjcgMC05OC41IDc5LjgtMTc4LjMgMTc4LjMtMTc4LjNsNTkuNCAwek01ODUuNyAxMDUuOWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjNzMTMuMSAyMi44IDUuMyAzMy41TDUyMi4xIDI3NC45Yy00LjIgNS43LTEwLjcgOS40LTE3LjcgOS44cy0xNC0yLjItMTguOS03LjNsLTQ2LjQtNDhjLTkuMi05LjUtOS0yNC43IC42LTMzLjkgOS41LTkuMiAyNC43LTguOSAzMy45IC42bDI2LjUgMjcuNCA4NS42LTExNy43ek0yNTYuMyAyNDhhMTIwIDEyMCAwIDEgMSAwLTI0MCAxMjAgMTIwIDAgMSAxIDAgMjQweiJdCiAgICB9OwogICAgZmFVc2VyTmluamEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1uaW5qYSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyOTM5OV0sICJmNTA0IiwgIk0zNTIgMTI4YzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4LTU3LjIgMC0xMDUuNi0zNy41LTEyMi04OS4zLTEuMSAxLjMtMi4yIDIuNi0zLjUgMy44LTE1LjggMTUuOC0zOC44IDIwLjctNTMuNiAyMi4xLTguMSAuOC0xNC42LTUuNy0xMy44LTEzLjggMS40LTE0LjcgNi4zLTM3LjggMjIuMS01My42IDUuOC01LjggMTIuNi0xMC4xIDE5LjYtMTMuNC03LTMuMi0xMy44LTcuNi0xOS42LTEzLjQtMTUuOC0xNS44LTIwLjctMzguOC0yMi4xLTUzLjYtLjgtOC4xIDUuNy0xNC42IDEzLjgtMTMuOCAxNC43IDEuNCAzNy44IDYuMyA1My42IDIyLjEgNC44IDQuOCA4LjcgMTAuNCAxMS43IDE2LjEgMjEuMy00MS4yIDY0LjMtNjkuNCAxMTMuOC02OS40IDcwLjcgMCAxMjggNTcuMyAxMjggMTI4ek0xNDQgMTEyYzAgOC44IDcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkwxNjAgOTZjLTguOCAwLTE2IDcuMi0xNiAxNnptLTEuNCAyMTFsNjcgNTAuMmM4LjUgNi40IDIwLjMgNi40IDI4LjggMGw2Ny01MC4yYzYuNS00LjkgMTUuMi02LjIgMjIuNi0yLjggNjEuNCAyOC4yIDEwNC4xIDkwLjIgMTA0LjEgMTYyLjEgMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdMNDUuNyA1MTJjLTE2LjQgMC0yOS43LTEzLjMtMjkuNy0yOS43IDAtNzIgNDIuNy0xMzQgMTA0LjEtMTYyLjEgNy40LTMuNCAxNi4xLTIuMSAyMi42IDIuOHoiXQogICAgfTsKICAgIGZhUGxhbnRXaWx0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYW50LXdpbHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTVhYSIsICJNMzQ0LTMyYzY2LjMgMCAxMjAgNTMuNyAxMjAgMTIwbDAgNi4yYzI5LjMgMTIuMiA0OCA0MS4zIDQ4IDc2LjkgMCAyNy45LTI1LjMgNzQuOC02NiAxMTEuNy0zLjggMy41LTguOCA1LjMtMTQgNS4zcy0xMC4yLTEuOC0xNC01LjNjLTQwLjctMzYuOC02Ni04My43LTY2LTExMS43IDAtMzUuNiAxOC43LTY0LjcgNDgtNzYuOWwwLTYuMmMwLTMwLjktMjUuMS01Ni01Ni01NnMtNTYgMjUuMS01NiA1NmwwIDQyNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI5NmMwLTMwLjktMjUuMS01Ni01Ni01NnMtNTYgMjUuMS01NiA1NmwwIDM4LjJjMjkuMyAxMi4yIDQ4IDQxLjMgNDggNzYuOSAwIDI3LjktMjUuMyA3NC44LTY2IDExMS43LTMuOCAzLjUtOC44IDUuMy0xNCA1LjNzLTEwLjItMS44LTE0LTUuM0MyNS4zIDQwNS45IDAgMzU5IDAgMzMxLjEgMCAyOTUuNCAxOC43IDI2Ni40IDQ4IDI1NC4yTDQ4IDIxNmMwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMCAyMC4yIDAgMzkuMyA1IDU2IDEzLjhMMjI0IDg4YzAtNjYuMyA1My43LTEyMCAxMjAtMTIweiJdCiAgICB9OwogICAgZmFXZWlnaHRTY2FsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3ZWlnaHQtc2NhbGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsid2VpZ2h0Il0sICJmNDk2IiwgIk0xMTYuNiAxOTJjLTMtMTAuMS00LjYtMjAuOS00LjYtMzIgMC02MS45IDUwLjEtMTEyIDExMi0xMTJTMzM2IDk4LjEgMzM2IDE2MGMwIDExLjEtMS42IDIxLjktNC42IDMybC03MSAwIDI0LjYtNDQuM2M2LjQtMTEuNiAyLjMtMjYuMi05LjMtMzIuNnMtMjYuMi0yLjMtMzIuNiA5LjNsLTM3LjYgNjcuNy04OC44IDB6TTEyOCAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwQzI5My4zIDExLjkgMjYwIDAgMjI0IDBzLTY5LjMgMTEuOS05NiAzMnoiXQogICAgfTsKICAgIGZhV2VpZ2h0ID0gZmFXZWlnaHRTY2FsZTsKICAgIGZhQ2FyZXRSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXJldC1yaWdodCIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJmMGRhIiwgIk0yNDkuMyAyMzUuOGMxMC4yIDEyLjYgOS41IDMxLjEtMi4yIDQyLjhsLTEyOCAxMjhjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzY0LjUgMzk2LjkgNjQuNSAzODRsMC0yNTZjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnMyNS43LTIuMiAzNC45IDYuOWwxMjggMTI4IDIuMiAyLjR6Il0KICAgIH07CiAgICBmYUZsb3JpblNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmxvcmluLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTE4NCIsICJNMzE0LjcgMzJjLTM4LjggMC03My43IDIzLjMtODguNiA1OS4xTDE3MC43IDIyNCA2NCAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsODAgMC00NS4xIDEwOC4zYy01IDExLjktMTYuNiAxOS43LTI5LjUgMTkuN0wzMiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzcuMyAwYzM4LjggMCA3My43LTIzLjMgODguNi01OS4xTDIxMy4zIDI4OCAzMjAgMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC04MCAwIDQ1LjEtMTA4LjNjNS0xMS45IDE2LjYtMTkuNyAyOS41LTE5LjdMMzUyIDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zNy4zIDB6Il0KICAgIH07CiAgICBmYUJlbGwyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJlbGwiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyNzYsIDYxNjAyXSwgImYwZjMiLCAiTTIyNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMuMkMxMTkgNTAgNjQgMTE0LjYgNjQgMTkybDAgMjEuN2MwIDQ4LjEtMTYuNCA5NC44LTQ2LjQgMTMyLjRMNy44IDM1OC4zQzIuNyAzNjQuNiAwIDM3Mi40IDAgMzgwLjUgMCA0MDAuMSAxNS45IDQxNiAzNS41IDQxNmwzNzYuOSAwYzE5LjYgMCAzNS41LTE1LjkgMzUuNS0zNS41IDAtOC4xLTIuNy0xNS45LTcuOC0yMi4ybC05LjgtMTIuMkM0MDAuNCAzMDguNSAzODQgMjYxLjggMzg0IDIxMy43bDAtMjEuN2MwLTc3LjQtNTUtMTQyLTEyOC0xNTYuOGwwLTMuMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMTYyIDQ2NGM3LjEgMjcuNiAzMi4yIDQ4IDYyIDQ4czU0LjktMjAuNCA2Mi00OGwtMTI0IDB6Il0KICAgIH07CiAgICBmYUxhcmlTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxhcmktc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMWM4IiwgIk0xNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQxLjVjNy45LTEgMTUuOS0xLjUgMjQtMS41czE2LjEgLjUgMjQgMS41TDIxNiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNTRjNTguOSAyMy44IDEwMy4yIDc2IDExNi4yIDEzOS43IDMuNSAxNy4zLTcuNyAzNC4yLTI1IDM3LjdzLTM0LjItNy43LTM3LjctMjVjLTYuNy0zMy4yLTI2LjQtNjEuOC01My40LTgwLjJsMCA4MS44YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTAxLjhjLTcuOC0xLjUtMTUuOC0yLjItMjQtMi4ycy0xNi4yIC44LTI0IDIuMkwxNjggMjMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtODEuOGMtMzMuOCAyMy01NiA2MS45LTU2IDEwNS44IDAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4bDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNi45IDBDMTguNSAzNTAgMCAzMDUuMiAwIDI1NiAwIDE3NS40IDQ5LjYgMTA2LjQgMTIwIDc4bDAtNTRjMC0xMy4zIDEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYU1pbGxTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pbGwtc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMWVkIiwgIk0yOTctMjIuMmMxMi4zIDUgMTguMiAxOSAxMy4yIDMxLjNsLTI5IDcxLjNDMzM4LjggODUuMSAzODQgMTMzLjMgMzg0IDE5MmwwIDIwOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTIwOGMwLTI2LjUtMjEuNS00OC00OC00OC02LjQgMC0xMi41IDEuMi0xOCAzLjVsLTMwIDczLjggMCAxNzguN2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTIxLjItNTcuOCAxNDIuMmMtNSAxMi4zLTE5IDE4LjItMzEuMyAxMy4ycy0xOC4yLTE5LTEzLjItMzEuM0wxNjAgMjUxLjMgMTYwIDE5MmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OGwwIDIwOGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQxNy43IDAgNDAwTDAgMTEyYzAtMTcuNyAxNC4zLTMyIDMyLTMyIDEwLjkgMCAyMC41IDUuNCAyNi4zIDEzLjcgMTYtOC43IDM0LjMtMTMuNyA1My43LTEzLjcgMzEuMyAwIDU5LjcgMTIuOSA4MCAzMy42IDkuNi05LjggMjAuOS0xNy44IDMzLjUtMjMuNUwyNjUuOC05YzUtMTIuMyAxOS0xOC4yIDMxLjMtMTMuMnoiXQogICAgfTsKICAgIGZhUGVyc29uU25vd2JvYXJkaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1zbm93Ym9hcmRpbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5MzgsICJzbm93Ym9hcmRpbmciXSwgImY3Y2UiLCAiTTQyNC41IDE2YTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyek0xNjYuNCA0NS41YzEwLjItMTQuNCAzMC4yLTE3LjkgNDQuNi03LjdsMjcyIDE5MmMxNC40IDEwLjIgMTcuOSAzMC4yIDcuNyA0NC42cy0zMC4yIDE3LjktNDQuNiA3LjdsLTkyLjItNjUuMS02Mi4yIDUzLjMgMzIuMSAyNi43YzE4LjIgMTUuMiAyOC44IDM3LjcgMjguOCA2MS41bDAgODcuOCA3Ny41IDE1LjJjNi4yIDEuMiAxMi42IC45IDE4LjctLjhsNDEuMi0xMS44YzEyLjctMy42IDI2IDMuNyAyOS43IDE2LjVzLTMuNyAyNi0xNi41IDI5LjdsLTQxLjIgMTEuOGMtMTMuNCAzLjgtMjcuNCA0LjQtNDEuMSAxLjhMODcuMSA0NDMuM2MtMTcuMi0zLjQtMzMtMTEuOC00NS4zLTI0LjFMMTUuNSAzOTNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwyNi4yIDI2LjJjNS42IDUuNiAxMi44IDkuNCAyMC42IDExbDY0LjIgMTIuNiAwLTEyMy43YzAtMjcuNyAxMi01NCAzMi44LTcyLjJsNjktNjAuNC04OC4yLTYyLjNDMTU5LjYgODAgMTU2LjIgNjAgMTY2LjQgNDUuNXptNTguMSAzNzUuN2w2NCAxMi41IDAtNzUuM2MwLTQuNy0yLjEtOS4zLTUuOC0xMi4zbC01OC4yLTQ4LjUgMCAxMjMuNnoiXQogICAgfTsKICAgIGZhU25vd2JvYXJkaW5nID0gZmFQZXJzb25Tbm93Ym9hcmRpbmc7CiAgICBmYVR0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0dHkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsidGVsZXR5cGUiXSwgImYxZTQiLCAiTTQ1MC4yIDI2Ni44YzE1LjggNi41IDM0LjEgLjMgNDIuNi0xNC42bDIuNC00LjJjMjcuOS00OC45IDIzLjYtMTE4LjgtMzEuMy0xNTQuNS0xMjYtODItMjg5LjYtODItNDE1LjYgMC01NC45IDM1LjctNTkuMyAxMDUuNy0zMS4zIDE1NC41bDIuNCA0LjJjOC41IDE0LjkgMjYuNyAyMS4xIDQyLjYgMTQuNmw4MS45LTMzLjdjMTMuOS01LjcgMjIuNC0xOS45IDIwLjktMzQuOWwtNS4xLTUxYzYyLjUtMjEgMTMwLjgtMTkuOSAxOTIuNiAzLjNsLTQuOCA0Ny43Yy0xLjUgMTUgNyAyOS4yIDIwLjkgMzQuOWw4MS45IDMzLjd6TTMyIDM1MmEzMiAzMiAwIDEgMCA2NCAwIDMyIDMyIDAgMSAwIC02NCAwem05NiAwYTMyIDMyIDAgMSAwIDY0IDAgMzIgMzIgMCAxIDAgLTY0IDB6TTY0IDQxNmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTM1MiAzMmEzMiAzMiAwIDEgMCA2NCAwIDMyIDMyIDAgMSAwIC02NCAwek0yNTYgMzIwYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHptNjQgMzJhMzIgMzIgMCAxIDAgNjQgMCAzMiAzMiAwIDEgMCAtNjQgMHptMTI4LTMyYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHpNMTI4IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTkyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyeiJdCiAgICB9OwogICAgZmFUZWxldHlwZSA9IGZhVHR5OwogICAgZmFVc2Vyc1JlY3RhbmdsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2Vycy1yZWN0YW5nbGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU5NCIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptMjI0IDcyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyem0wIDE1MmM1MyAwIDk2IDQzIDk2IDk2bDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0YzAtNTMgNDMtOTYgOTYtOTZ6bTk2LTY0YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTE2OCAyNzIuM2MtMTUuMiAyMi44LTI0IDUwLjItMjQgNzkuN2wwIDI0YzAgOC40IDEuNCAxNi41IDQuMSAyNGwtNDYuOCAwQzg5LjYgNDAwIDgwIDM5MC40IDgwIDM3OC43TDgwIDM2OGMwLTUwLjMgMzguNy05MS42IDg4LTk1Ljd6TTQyNy45IDQwMGMyLjctNy41IDQuMS0xNS42IDQuMS0yNGwwLTI0YzAtMjkuNS04LjgtNTYuOS0yNC03OS43IDQ5LjMgNC4xIDg4IDQ1LjMgODggOTUuN2wwIDEwLjdjMCAxMS44LTkuNiAyMS4zLTIxLjMgMjEuM2wtNDYuOCAwek05NiAxOTJhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXQogICAgfTsKICAgIGZhTW9iaWxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vYmlsZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODI0MSwgIm1vYmlsZS1hbmRyb2lkIiwgIm1vYmlsZS1waG9uZSJdLCAiZjNjZSIsICJNODAgMEM0NC43IDAgMTYgMjguNyAxNiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw4MCAwem03MiA0MTZsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTW9iaWxlQW5kcm9pZCA9IGZhTW9iaWxlOwogICAgZmFNb2JpbGVQaG9uZSA9IGZhTW9iaWxlOwogICAgZmFBcnJvd3NUdXJuVG9Eb3RzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy10dXJuLXRvLWRvdHMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTRjMSIsICJNMjY1LjQtNi42YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMjg1LjMgNjQgMzUyIDY0YzUzIDAgOTYgNDMgOTYgOTZsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC02Ni43IDAgMjUuNCAyNS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC04MC04MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsODAtODB6bS04Mi43IDI3Mmw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDE2Mi43IDQwMCA5NiA0MDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0ODEuNyAwIDQ2NGwwLTMyYzAtNTMgNDMtOTYgOTYtOTZsNjYuNyAwLTI1LjQtMjUuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMHpNMzIwIDM2OGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTY0IDE2MGE2NCA2NCAwIDEgMSAwLTEyOCA2NCA2NCAwIDEgMSAwIDEyOHoiXQogICAgfTsKICAgIGZhRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbMTI4LCA1MTIsIFsxMDA2OSwgMTAwNzEsIDYxNzM4XSwgIjIxIiwgIk02NCA0MzJjMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDAtNDAtMTcuOS00MC00MGMwLTIyLjEgMTcuOS00MCA0MC00MHpNNjQgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIC42IDAgMS4xIDAgMS43bC0xNiAzMDRjLS45IDE3LTE1IDMwLjMtMzIgMzAuM1MzMyAzNzAuNyAzMiAzNTMuN0wxNiA0OS43YzAtLjYgMC0xLjEgMC0xLjcgMC0yNi41IDIxLjUtNDggNDgtNDh6Il0KICAgIH07CiAgICBmYUNodXJjaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaHVyY2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5OTYyXSwgImY1MWQiLCAiTTI4MC04YzAtMTMuMy0xMC43LTI0LTI0LTI0UzIzMi0yMS4zIDIzMi04bDAgMjQtMzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAwIDAgNDgtOTguNiA2NS44QzEyMCAxODYuNyAxMTIgMjAxLjYgMTEyIDIxNy43bDAgMzguMy03OS44IDQ1LjZDMTIuMyAzMTMgMCAzMzQuMiAwIDM1Ny4xTDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0IDc0LjcgMCA4NS40IDAgMzIwIDBsNjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTkwLjljMC0yMy0xMi4zLTQ0LjItMzIuMi01NS42TDQwMCAyNTYgNDAwIDIxNy43YzAtMTYtOC0zMS0yMS40LTM5LjlsLTk4LjYtNjUuOCAwLTQ4IDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMyIDAgMC0yNHpNMjU2IDMyMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDgwLTEyOCAwIDAtODBjMC0zNS4zIDI4LjctNjQgNjQtNjR6Il0KICAgIH07CiAgICBmYVRvZ2dsZU9mZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b2dnbGUtb2ZmIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyMDQiLCAiTTM4NCAxMjhjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhTNDU0LjcgMzg0IDM4NCAzODRsLTE5MiAwYy03MC43IDAtMTI4LTU3LjMtMTI4LTEyOHM1Ny4zLTEyOCAxMjgtMTI4bDE5MiAwek01NzYgMjU2YzAtMTA2LTg2LTE5Mi0xOTItMTkyTDE5MiA2NEM4NiA2NCAwIDE1MCAwIDI1NlM4NiA0NDggMTkyIDQ0OGwxOTIgMGMxMDYgMCAxOTItODYgMTkyLTE5MnpNMTkyIDMzNmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHoiXQogICAgfTsKICAgIGZhU2hvZVByaW50cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaG9lLXByaW50cyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTRiIiwgIk0yOTYgMTkyYy0yMS4xLTEyLjEtNDIuMy0yNC4yLTcyLTI5LjNsMC0xNDAuM0MyNTcuNyAxMyAzMTEuNCAwIDM1MiAwIDQ0OCAwIDU3NiA0OCA1NzYgMTI4cy0xMTkuNiA5Ni0xNzYgOTZjLTQ4IDAtNzYtMTYtMTA0LTMyek0xMjggMzJsNDggMCAwIDEyOC00OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0ek0yMzIgMzIwYzI4LTE2IDU2LTMyIDEwNC0zMiA1Ni40IDAgMTc2IDE2IDE3NiA5NlMzODQgNTEyIDI4OCA1MTJjLTQwLjUgMC05NC4zLTEzLTEyOC0yMi40bDAtMTQwLjNjMjkuNy01LjIgNTAuOS0xNy4zIDcyLTI5LjR6TTY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGw0OCAwIDAgMTI4LTQ4IDB6Il0KICAgIH07CiAgICBmYUZpbGVDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGViIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFXYWxsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2FsbGV0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1NTUiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xOTJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNzIgMTI4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFM1OC43IDgwIDcyIDgwbDM4NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDY0IDMyek00MTYgMjU2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhTWVzc2FnZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWVzc2FnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjb21tZW50LWFsdCJdLCAiZjI3YSIsICJNMCAzNTJMMCAxMjhDMCA3NSA0MyAzMiA5NiAzMmwzMjAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjI0YzAgNTMtNDMgOTYtOTYgOTZsLTEyMCAwYy01LjIgMC0xMC4yIDEuNy0xNC40IDQuOEwxNjYuNCA1MzkuMmMtNC4yIDMuMS05LjIgNC44LTE0LjQgNC44LTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNzItMzIgMGMtNTMgMC05Ni00My05Ni05NnoiXQogICAgfTsKICAgIGZhQ29tbWVudEFsdDIgPSBmYU1lc3NhZ2UyOwogICAgZmFUcm9waHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJvcGh5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTQyXSwgImYwOTEiLCAiTTE0NC4zIDBsMjI0IDBjMjYuNSAwIDQ4LjEgMjEuOCA0Ny4xIDQ4LjItLjIgNS4zLS40IDEwLjYtLjcgMTUuOGw0OS42IDBjMjYuMSAwIDQ5LjEgMjEuNiA0Ny4xIDQ5LjgtNy41IDEwMy43LTYwLjUgMTYwLjctMTE4IDE5MC41LTE1LjggOC4yLTMxLjkgMTQuMy00Ny4yIDE4LjgtMjAuMiAyOC42LTQxLjIgNDMuNy01Ny45IDUxLjhsMCA3My4xIDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDAgMC03My4xYy0xNi03LjctMzUuOS0yMi01NS4zLTQ4LjMtMTguNC00LjgtMzguNC0xMi4xLTU3LjktMjMuMS01NC4xLTMwLjMtMTAyLjktODcuNC0xMDkuOS0xODkuOS0xLjktMjguMSAyMS00OS43IDQ3LjEtNDkuN2w0OS42IDBjLS4zLTUuMi0uNS0xMC40LS43LTE1LjgtMS0yNi41IDIwLjYtNDguMiA0Ny4xLTQ4LjJ6TTEwMS41IDExMmwtNTIuNCAwYzYuMiA4NC43IDQ1LjEgMTI3LjEgODUuMiAxNDkuNi0xNC40LTM3LjMtMjYuMy04Ni0zMi44LTE0OS42ek0zODAgMjU2LjhjNDAuNS0yMy44IDc3LjEtNjYuMSA4My4zLTE0NC44TDQxMSAxMTJjLTYuMiA2MC45LTE3LjQgMTA4LjItMzEgMTQ0Ljh6Il0KICAgIH07CiAgICBmYUZhY2VEaXp6eTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1kaXp6eSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJkaXp6eSJdLCAiZjU2NyIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTEzNC4xIDE1My45bDI1LjkgMjUuOSAyNS45LTI1LjljNy44LTcuOCAyMC41LTcuOCAyOC4zIDBzNy44IDIwLjUgMCAyOC4zbC0yNS45IDI1LjkgMjUuOSAyNS45YzcuOCA3LjggNy44IDIwLjUgMCAyOC4zcy0yMC41IDcuOC0yOC4zIDBsLTI1LjktMjUuOS0yNS45IDI1LjljLTcuOCA3LjgtMjAuNSA3LjgtMjguMyAwcy03LjgtMjAuNSAwLTI4LjNsMjUuOS0yNS45LTI1LjktMjUuOWMtNy44LTcuOC03LjgtMjAuNSAwLTI4LjNzMjAuNS03LjggMjguMyAwem0xOTIgMGwyNS45IDI1LjkgMjUuOS0yNS45YzcuOC03LjggMjAuNS03LjggMjguMyAwczcuOCAyMC41IDAgMjguM2wtMjUuOSAyNS45IDI1LjkgMjUuOWM3LjggNy44IDcuOCAyMC41IDAgMjguM3MtMjAuNSA3LjgtMjguMyAwbC0yNS45LTI1LjktMjUuOSAyNS45Yy03LjggNy44LTIwLjUgNy44LTI4LjMgMHMtNy44LTIwLjUgMC0yOC4zbDI1LjktMjUuOS0yNS45LTI1LjljLTcuOC03LjgtNy44LTIwLjUgMC0yOC4zczIwLjUtNy44IDI4LjMgMHpNMjU2IDMwNGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHoiXQogICAgfTsKICAgIGZhRGl6enkyID0gZmFGYWNlRGl6enkyOwogICAgZmFCYWN0ZXJpYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWN0ZXJpYSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMDU5IiwgIk0yNTYtMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxMWM4LjYgMi4yIDE2LjkgNS42IDI0LjggMTAuM0wzMTEgN2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTYuMyA2LjNjNC42IDcuOCA4IDE2LjIgMTAuMyAyNC44bDExIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTExIDBjLTIuMiA4LjYtNS42IDE2LjktMTAuMyAyNC44TDM0NSAxNTFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNC4xLTQuMS0zMC4xIDMwLjEgNC4xIDQuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00LjEtNC4xYy0xMCAxMC0yMCAyMC0zMC4xIDMwLjFMMjE3IDI3OWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC02LjMtNi4zYy03LjggNC42LTE2LjIgOC0yNC44IDEwLjNsMCAxMWMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTExYy04LjYtMi4yLTE2LjktNS42LTI0LjgtMTAuM0w3MyAzMTNjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNi4zLTYuM2MtNC42LTcuOC04LTE2LjItMTAuMy0yNC44bC0xMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDExIDBjMi4yLTguNiA1LjYtMTYuOSAxMC4zLTI0LjhMMzkgMTY5Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNC4xIDQuMWMxMC0xMCAyMC0yMCAzMC4xLTMwLjFMMTAzIDEwNWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQuMSA0LjEgMzAuMS0zMC4xLTQuMS00LjFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45UzE5MS42LTIuMyAyMDEgN2w2LjMgNi4zYzcuOC00LjYgMTYuMi04IDI0LjgtMTAuM2wwLTExYzAtMTMuMyAxMC43LTI0IDI0LTI0ek0xMjggMjU2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMjQwIDE0NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0yOTYgNDBsMCAxMWM4LjYgMi4yIDE2LjkgNS42IDI0LjggMTAuM0w1NjcgMTk5YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNi4zIDYuM2M0LjYgNy44IDggMTYuMiAxMC4zIDI0LjhsMTEgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTEgMGMtMi4yIDguNi01LjYgMTYuOS0xMC4zIDI0LjhMNjAxIDM0M2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00LjEtNC4xLTMwLjEgMzAuMSA0LjEgNC4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQuMS00LjFjLTEwIDEwLTIwIDIwLTMwLjEgMzAuMUw0NzMgNDcxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTYuMy02LjNjLTcuOCA0LjYtMTYuMiA4LTI0LjggMTAuM2wwIDExYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTFjLTguNi0yLjItMTYuOS01LjYtMjQuOC0xMC4zTDMyOSA1MDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNi4zLTYuM2MtNC42LTcuOC04LTE2LjItMTAuMy0yNC44bC0xMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDExIDBjMi4yLTguNiA1LjYtMTYuOSAxMC4zLTI0LjhMMjk1IDM2MWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQuMSA0LjFjMTAtMTAgMjAtMjAgMzAuMS0zMC4xTDM1OSAyOTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0LjEgNC4xIDMwLjEtMzAuMS00LjEtNC4xYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNi4zIDYuM2M3LjgtNC42IDE2LjItOCAyNC44LTEwLjNsMC0xMWMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0ek00NDggMzg0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYUVhckRlYWYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWFyLWRlYWYiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZGVhZiIsICJkZWFmbmVzcyIsICJoYXJkLW9mLWhlYXJpbmciXSwgImYyYTQiLCAiTTUwMi42IDU0LjZsLTQwIDQwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w0MC00MGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zem0tMzIwIDMyMGwtMTI4IDEyOGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTI4LTEyOGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zek0yNDAgMTI4Yy01Ny42IDAtMTA1LjEgNDMuNi0xMTEuMyA5OS41LTEuOSAxNy42LTE3LjggMzAuMi0zNS4zIDI4LjNzLTMwLjItMTcuOC0yOC4zLTM1LjNjOS43LTg4IDg0LjMtMTU2LjUgMTc0LjktMTU2LjUgOTcuMiAwIDE3NiA3OC44IDE3NiAxNzYgMCA0Ni0xNy43IDg3LjktNDYuNiAxMTkuMy0xMiAxMy0xNy40IDI0LjgtMTcuNCAzNC43bDAgNi4xYzAgNjEuOS01MC4xIDExMi0xMTIgMTEyLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02LjFjMC0zMi45IDE3LjQtNTkuNiAzNC40LTc4IDE4LjQtMjAgMjkuNi00Ni42IDI5LjYtNzUuOSAwLTYxLjktNTAuMS0xMTItMTEyLTExMnptMCA4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhRGVhZiA9IGZhRWFyRGVhZjsKICAgIGZhRGVhZm5lc3MgPSBmYUVhckRlYWY7CiAgICBmYUhhcmRPZkhlYXJpbmcgPSBmYUVhckRlYWY7CiAgICBmYVBlb3BsZUFycm93cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW9wbGUtYXJyb3dzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInBlb3BsZS1hcnJvd3MtbGVmdC1yaWdodCJdLCAiZTA2OCIsICJNMzIgNjRBNjQgNjQgMCAxIDEgMTYwIDY0IDY0IDY0IDAgMSAxIDMyIDY0ek0wIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwYzMuMiAwIDYuNCAuMiA5LjUgLjdMOTMuMSAyMDUuMUM2NSAyMzMuMiA2NSAyNzguOCA5My4xIDMwNi45bDU2IDU2YzMuNCAzLjQgNyA2LjQgMTAuOSA5bDAgOTIuMWMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xMjAuNkMxMi45IDMzMi40IDAgMzExLjcgMCAyODhsMC02NHpNMzUyIDY0YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHptNjYuOSAxNDEuMWwtNDQuNC00NC40YzMuMS0uNSA2LjMtLjcgOS41LS43bDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA2NGMwIDIzLjctMTIuOSA0NC40LTMyIDU1LjRMNDgwIDQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05Mi4xYzMuOS0yLjYgNy41LTUuNiAxMC45LTlsNTYtNTZjMjguMS0yOC4xIDI4LjEtNzMuNyAwLTEwMS44ek0zMDIuOCAxNzcuOGM5LTMuNyAxOS4zLTEuNyAyNi4yIDUuMmw1NiA1NmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNTYgNTZjLTYuOSA2LjktMTcuMiA4LjktMjYuMiA1LjJTMjg4IDMyMS43IDI4OCAzMTJsMC0yNC02NCAwIDAgMjRjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtNTYtNTZjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDU2LTU2YzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJTMjI0IDE5MC4zIDIyNCAyMDBsMCAyNCA2NCAwIDAtMjRjMC05LjcgNS44LTE4LjUgMTQuOC0yMi4yeiJdCiAgICB9OwogICAgZmFQZW9wbGVBcnJvd3NMZWZ0UmlnaHQgPSBmYVBlb3BsZUFycm93czsKICAgIGZhSGFuZHNDbGFwcGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kcy1jbGFwcGluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMWE4IiwgIk0zNDQgOGwwIDY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRTMzQ0LTUuMyAzNDQgOHpNMjIwIDEwLjdsMzIgNDhjNy40IDExIDQuNCAyNS45LTYuNyAzMy4zcy0yNS45IDQuNC0zMy4zLTYuN2wtMzItNDhjLTcuNC0xMS00LjQtMjUuOSA2LjctMzMuM1MyMTIuNi0uMyAyMjAgMTAuN3pNMTM1IDExOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMEwyOTIuNyAyNDIuN2MxMC4xIDEwLjEgMjcuMyAyLjkgMjcuMy0xMS4zbDAtMzkuNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTUzLjZjMCA1Ny4xLTMwIDExMC03OC45IDEzOS40LTY0IDM4LjQtMTQ1LjggMjguMy0xOTguNS0yNC40TDcgMzYxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNTMgNTNjNi4xIDYuMSAxNiA2LjEgMjIuMSAwczYuMS0xNiAwLTIyLjFMMjMgMjY1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsOTMgOTNjNi4xIDYuMSAxNiA2LjEgMjIuMSAwczYuMS0xNiAwLTIyLjFMNTUgMTg1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMTE3IDExN2M2LjEgNi4xIDE2IDYuMSAyMi4xIDBzNi4xLTE2IDAtMjIuMWwtOTMtOTNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45ek00MzMuMSA0ODQuOWMtMjQuMiAxNC41LTUwLjkgMjIuMS03Ny43IDIzLjEgNDguMS0zOS42IDc2LjYtOTkgNzYuNi0xNjIuNGwwLTk4LjFjOC4yLS4xIDE2LTYuNCAxNi0xNmwwLTM5LjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE1My42YzAgNTcuMS0zMCAxMTAtNzguOSAxMzkuNHpNNDUzLjMgNGMxMSA3LjQgMTQgMjIuMyA2LjcgMzMuM2wtMzIgNDhjLTcuNCAxMS0yMi4zIDE0LTMzLjMgNi43cy0xNC0yMi4zLTYuNy0zMy4zbDMyLTQ4YzcuNC0xMSAyMi4zLTE0IDMzLjMtNi43eiJdCiAgICB9OwogICAgZmFWaXJ1c0NvdmlkU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlydXMtY292aWQtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRhOSIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtODMtODMgMTEuNC0xMS40YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTExLjMgMTEuMy0yMy44LTIzLjhjMTcuOS0yMy41IDI5LjktNTEuNyAzNC4xLTgyLjNsMzMuNiAwIDAgMTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTgwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTYtMzMuNiAwYy00LjItMzAuNy0xNi4zLTU4LjgtMzQuMS04Mi4zbDIzLjgtMjMuOCAxMS4zIDExLjNjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQ0MC43IDQ2LjdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTEuMyAxMS4zLTIzLjggMjMuOEMzNzAuOCA5Ny45IDM0Mi43IDg1LjggMzEyIDgxLjZsMC0zMy42IDE2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMzQxLjMgMCAzMjggMEwyNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNiAwIDAgMzMuNmMtMzAuNyA0LjItNTguOCAxNi4zLTgyLjMgMzQuMUwxNTcuOSA5MiAxNjkuMiA4MC42YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMMTIzLjkgNTguMSA0MS0yNC45ek0xMTMuNiAyMzJsLTMzLjYgMCAwLTE2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2IDMzLjYgMGM0LjIgMzAuNyAxNi4zIDU4LjggMzQuMSA4Mi4zbC0yMy44IDIzLjgtMTEuMy0xMS4zYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDU2LjYgNTYuNmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTExLjMtMTEuMyAyMy44LTIzLjhjMjMuNSAxNy45IDUxLjcgMjkuOSA4Mi4zIDM0LjFsMCAzMy42LTE2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTYgMCAwLTMzLjZjMTMuNC0xLjggMjYuNC01LjIgMzguNy05LjlMMTIzLjUgMTkzLjNjLTQuNyAxMi4zLTggMjUuMi05LjkgMzguN3oiXQogICAgfTsKICAgIGZhQ2FsZW5kYXJEYXlzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1kYXlzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhbGVuZGFyLWFsdCJdLCAiZjA3MyIsICJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek02NCAyNDBsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTI4IDBsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTQ0LTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTY0IDM2OGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNDQtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMTEyIDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6Il0KICAgIH07CiAgICBmYUNhbGVuZGFyQWx0MiA9IGZhQ2FsZW5kYXJEYXlzMjsKICAgIGZhRGlhbW9uZFR1cm5SaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWFtb25kLXR1cm4tcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZGlyZWN0aW9ucyJdLCAiZjVlYiIsICJNMjE1IDE3TDE3IDIxNUM2LjEgMjI1LjkgMCAyNDAuNiAwIDI1NnM2LjEgMzAuMSAxNyA0MUwyMTUgNDk1YzEwLjkgMTAuOSAyNS42IDE3IDQxIDE3czMwLjEtNi4xIDQxLTE3TDQ5NSAyOTdjMTAuOS0xMC45IDE3LTI1LjYgMTctNDFzLTYuMS0zMC4xLTE3LTQxTDI5NyAxN0MyODYuMSA2LjEgMjcxLjQgMCAyNTYgMHMtMzAuMSA2LjEtNDEgMTd6TTM4NSAyNTdsLTcyIDcyYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTc4LjEgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQwYzAtMzkuOCAzMi4yLTcyIDcyLTcybDc4LjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45eiJdCiAgICB9OwogICAgZmFEaXJlY3Rpb25zID0gZmFEaWFtb25kVHVyblJpZ2h0OwogICAgZmFIYW5kUG9pbnRVcDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wb2ludC11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk3NTddLCAiZjBhNiIsICJNMzIgMzJDMzIgMTQuMyA0Ni4zIDAgNjQgMFM5NiAxNC4zIDk2IDMybDAgMjA4LTY0IDAgMC0yMDh6TTIyNCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6bS02NC02NGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE2MCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHptLTk2IDg4bDAtLjZjOS40IDUuNCAyMC4zIDguNiAzMiA4LjYgMTMuMiAwIDI1LjQtNCAzNS42LTEwLjggOC43IDI0LjkgMzIuNSA0Mi44IDYwLjQgNDIuOCAxMS43IDAgMjIuNi0zLjEgMzItOC42bDAgOC42YzAgODguNC03MS42IDE2MC0xNjAgMTYwbC02MS43IDBjLTQyLjQgMC04My4xLTE2LjktMTEzLjEtNDYuOUwzNy41IDQ1My41QzEzLjUgNDI5LjUgMCAzOTYuOSAwIDM2M2wwLTI3YzAtMzUuMyAyOC43LTY0IDY0LTY0bDg4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDBsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsNTYgMGMzOS44IDAgNzItMzIuMiA3Mi03MnoiXQogICAgfTsKICAgIGZhQmV6aWVyQ3VydmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmV6aWVyLWN1cnZlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY1NWIiLCAiTTI5NiAxMzZsMC00OCA0OCAwIDAgNDgtNDggMHpNMjg4IDMyYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDQtMTE4LjQgMEMxMTEuMiA2Mi43IDg5LjMgNDggNjQgNDggMjguNyA0OCAwIDc2LjcgMCAxMTJzMjguNyA2NCA2NCA2NGMyNS4zIDAgNDcuMi0xNC43IDU3LjYtMzZsNjYuOSAwYy01OC45IDM5LjYtOTguOSAxMDUtMTA0IDE4MEw4MCAzMjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zLjMgMGM1LjktNjcgNDguNS0xMjMuNCAxMDcuNS0xNDkuMSA4LjYgMTIuNyAyMy4yIDIxLjEgMzkuOCAyMS4xbDY0IDBjMTYuNiAwIDMxLjEtOC40IDM5LjgtMjEuMSA1OSAyNS43IDEwMS42IDgyLjEgMTA3LjUgMTQ5LjFsLTMuMyAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtNC41IDBjLTUtNzUtNDUuMS0xNDAuNC0xMDQtMTgwbDY2LjkgMGMxMC40IDIxLjMgMzIuMyAzNiA1Ny42IDM2IDM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0Yy0yNS4zIDAtNDcuMiAxNC43LTU3LjYgMzZsLTExOC40IDAgMC00YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwek04OCAzNzZsNDggMCAwIDQ4LTQ4IDAgMC00OHptNDE2IDQ4bDAtNDggNDggMCAwIDQ4LTQ4IDB6Il0KICAgIH07CiAgICBmYVBlcnNvbkhhbGZEcmVzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24taGFsZi1kcmVzcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNTQ4IiwgIk0xNDMuNC0zLjljOS43LTE2LjggMjcuOC0yOC4xIDQ4LjYtMjguMSAzMC45IDAgNTYgMjUuMSA1NiA1NiAwIDI1LjQtMTYuOSA0Ni44LTQwIDUzLjdsMCAwYy01LjEgMS41LTEwLjQgMi4zLTE2IDIuMy0zMC45IDAtNTYtMjUuMS01Ni01NmwwIDBjMC0xMC4xIDIuNy0xOS43IDcuNC0yNy45ek0zMTguMyAyOTkuMUwyNzIgMjM2LjcgMjcyIDUxMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2MCAwLS40IDAtMjM4LjZjMzYuMiA0LjQgNjkuMiAyMy40IDkxLjIgNTNsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42ek0xNzYgMTEzbDAgMzk5YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTI4LTI1LjggMGMtMTAuOSAwLTE4LjYtMTAuNy0xNS4yLTIxLjFsNDMtMTI5LTQ4LjMgNjUuMWMtMTAuNSAxNC4yLTMwLjYgMTcuMi00NC44IDYuNnMtMTcuMi0zMC42LTYuNi00NC44bDcwLjUtOTVjMjItMjkuNiA1NS4xLTQ4LjYgOTEuMi01M3oiXQogICAgfTsKICAgIGZhU3F1YXJlUG9sbEhvcml6b250YWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXBvbGwtaG9yaXpvbnRhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJwb2xsLWgiXSwgImY2ODIiLCAiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0yNTYgMTUyYzAgMTMuMy0xMC43IDI0LTI0IDI0bC0xMTIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHptNzIgODBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTIwOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDIwOCAwek0xOTIgMzYwYzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjR6Il0KICAgIH07CiAgICBmYVBvbGxIID0gZmFTcXVhcmVQb2xsSG9yaXpvbnRhbDsKICAgIGZhU2Nob29sQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2Nob29sLWNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTZkIiwgIk02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI3NiAwYy0xMC41LTE0LjYtMTktMzAuNy0yNS4xLTQ4bC05MC45IDAgMC04OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwYzEgMCAxLjkgMCAyLjkgLjEgMjYuMy03NC42IDk3LjUtMTI4LjEgMTgxLjEtMTI4LjEgMjguNiAwIDU1LjYgNi4yIDgwIDE3LjRsMC0zMy40YzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwLTEyNy45LTExNS4xYy0xOC4zLTE2LjQtNDYtMTYuNC02NC4yIDBMMTI4IDEyOCA2NCAxMjh6bTY0IDI0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyek0xMTIgMjU2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZ6TTI4OCAxMjhhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43bC0zNi43IDM2LjcgMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42eiJdCiAgICB9OwogICAgZmFIYW5kTGl6YXJkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWxpemFyZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjU4IiwgIk0wIDExMkMwIDg1LjUgMjEuNSA2NCA0OCA2NGwyMzguNSAwYzM2LjggMCA3MS4yIDE4IDkyLjEgNDguMmwxMTMuNSAxNjRjMTMgMTguNyAxOS45IDQxIDE5LjkgNjMuOGwwIDc2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEzLjgtNzguMS01MC4yLTE2MS45IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhsMTI4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhMNDggMTYwYy0yNi41IDAtNDgtMjEuNS00OC00OHoiXQogICAgfTsKICAgIGZhQ2hhbGtib2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFsa2JvYXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImJsYWNrYm9hcmQiXSwgImY1MWIiLCAiTTk2IDY0Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw5NiA2NHpNNDgwIDM4NGwtNjQgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTE2MCAwIDAtMjU2IDM4NCAwIDAgMjU2eiJdCiAgICB9OwogICAgZmFCbGFja2JvYXJkID0gZmFDaGFsa2JvYXJkOwogICAgZmFVcFJpZ2h0RnJvbVNxdWFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1cC1yaWdodC1mcm9tLXNxdWFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJleHRlcm5hbC1saW5rLWFsdCJdLCAiZjM1ZCIsICJNMjkwLjQgMTkuOEMyOTUuNCA3LjggMzA3LjEgMCAzMjAgMEw0ODAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE2MGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOUw0MDAgMTU3LjMgMjQ2LjYgMzEwLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDM1NC43IDExMiAyOTcuNCA1NC42Yy05LjItOS4yLTExLjktMjIuOS02LjktMzQuOXpNMCAxNzZjMC00NC4yIDM1LjgtODAgODAtODBsODAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtODAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjU2YzAgOC44IDcuMiAxNiAxNiAxNmwyNTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgODBjMCA0NC4yLTM1LjggODAtODAgODBMODAgNTEyYy00NC4yIDAtODAtMzUuOC04MC04MEwwIDE3NnoiXQogICAgfTsKICAgIGZhRXh0ZXJuYWxMaW5rQWx0ID0gZmFVcFJpZ2h0RnJvbVNxdWFyZTsKICAgIGZhU3F1YXJlRnVsbDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWZ1bGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg5OTcsIDEyODk5OCwgMTI4OTk5LCAxMjllMywgMTI5MDAxLCAxMjkwMDIsIDEyOTAwMywgMTEwMzUsIDExMDM2XSwgImY0NWMiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDQ0OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHoiXQogICAgfTsKICAgIGZhQ2xvdmVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3ZlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMTM5IiwgIk0zMTAuNCAxNkMzNDYuNiAxNiAzNzYgNDUuNCAzNzYgODEuN2wwIDUuMmMwIDExLjItMi43IDIyLjMtNy44IDMyLjJsLTIuMyA0LjItMjAuMSAzMy41Yy0xLjEgMS45LTEuMiAzLjQtMS4xIDQuNSAuMiAxLjMgLjkgMi43IDIuMSAzLjlzMi42IDEuOSAzLjkgMi4xYzEuMSAuMiAyLjYgLjEgNC41LTEuMWwzMy41LTIwLjEgNC4yLTIuM2MxMC01LjEgMjEtNy44IDMyLjItNy44bDUuMiAwYzM2LjIgMCA2NS42IDI5LjQgNjUuNiA2NS43IDAgMTcuNC02LjkgMzQuMS0xOS4yIDQ2LjRsLTEuMyAxLjNjLTMuNyAzLjctMy43IDkuNiAwIDEzLjNsMS4zIDEuM2MxMi4zIDEyLjMgMTkuMiAyOSAxOS4yIDQ2LjQgMCAzNi4yLTI5LjQgNjUuNi02NS42IDY1LjZsLTUuMiAwYy0xMi44IDAtMjUuNS0zLjUtMzYuNS0xMC4xbC0zMy41LTIwLjFjLTEuOS0xLjEtMy40LTEuMi00LjUtMS4xLTEuMyAuMi0yLjcgLjktMy45IDIuMXMtMS45IDIuNi0yLjEgMy45Yy0uMiAxLjEtLjEgMi42IDEuMSA0LjVsMjAuMSAzMy41YzYuNiAxMSAxMC4xIDIzLjYgMTAuMSAzNi41bDAgNS4yYzAgMzYuMi0yOS40IDY1LjYtNjUuNiA2NS42LTE3LjQgMC0zNC4xLTYuOS00Ni40LTE5LjJsLTEuMy0xLjNjLTMuNy0zLjctOS42LTMuNy0xMy4zIDBsLTEuMyAxLjNjLTEyLjMgMTIuMy0yOSAxOS4yLTQ2LjQgMTkuMi0zNi4yIDAtNjUuNi0yOS40LTY1LjctNjUuNmwwLTUuMmMwLTEyLjggMy41LTI1LjUgMTAuMS0zNi41bDIwLjEtMzMuNWMxLjEtMS45IDEuMi0zLjQgMS4xLTQuNS0uMi0xLjMtLjktMi43LTIuMS0zLjlzLTIuNi0xLjktMy45LTIuMWMtLjUtLjEtMS4yLS4xLTEuOSAwbC0yLjUgMS0zMy41IDIwLjFjLTExIDYuNi0yMy42IDEwLjEtMzYuNSAxMC4xbC01LjIgMEM0NS40IDM3NiAxNiAzNDYuNiAxNiAzMTAuNCAxNiAyOTMgMjIuOSAyNzYuMyAzNS4yIDI2NGwxLjMtMS4zIDEuMi0xLjVjMi4xLTMuMSAyLjEtNy4yIDAtMTAuM2wtMS4yLTEuNS0xLjMtMS4zQzIyLjkgMjM1LjggMTYgMjE5LjEgMTYgMjAxLjcgMTYgMTY1LjQgNDUuNCAxMzYgODEuNyAxMzZsNS4yIDBjMTIuOCAwIDI1LjUgMy41IDM2LjUgMTAuMWwzMy41IDIwLjEgMi41IDFjLjcgLjEgMS40IC4xIDEuOSAuMSAxLjMtLjIgMi43LS45IDMuOS0yLjFzMS45LTIuNiAyLjEtMy45Yy4xLS41IC4xLTEuMi0uMS0xLjlsLTEtMi41LTIwLjEtMzMuNWMtNi42LTExLTEwLjEtMjMuNi0xMC4xLTM2LjVsMC01LjJjMC0zNi4yIDI5LjQtNjUuNyA2NS43LTY1LjcgMTcuNCAwIDM0LjEgNi45IDQ2LjQgMTkuMmwxLjMgMS4zYzMuNyAzLjYgOS42IDMuNyAxMy4zIDBsMS4zLTEuMyA0LjgtNC40QzI4MC41IDIxLjMgMjk1LjEgMTYgMzEwLjQgMTZ6Il0KICAgIH07CiAgICBmYVRlZXRoT3BlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZWV0aC1vcGVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2MmYiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZsMCA4MGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTgwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem0wIDI3MmMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTQ4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMwNHptODAtMTYwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0yNHptMTI4IDBjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0ek04MCAxMTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0yNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMzIwIDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0yNHpNNDggMzg0bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJ6bTE0NCA0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZsNjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDI2LjUtMjEuNSA0OC00OCA0OHptMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2bDY0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCAyNi41LTIxLjUgNDgtNDggNDh6bTExMi0xNmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnoiXQogICAgfTsKICAgIGZhQmFyc1N0YWdnZXJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXJzLXN0YWdnZXJlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJyZW9yZGVyIiwgInN0cmVhbSJdLCAiZjU1MCIsICJNMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NGwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAxMjhDMTQuMyAxMjggMCAxMTMuNyAwIDk2ek02NCAyNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMOTYgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDQ4IDQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6Il0KICAgIH07CiAgICBmYVJlb3JkZXIgPSBmYUJhcnNTdGFnZ2VyZWQ7CiAgICBmYVN0cmVhbSA9IGZhQmFyc1N0YWdnZXJlZDsKICAgIGZhV2FyZWhvdXNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndhcmVob3VzZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNDk0IiwgIk0wIDE0Mi4xTDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNDBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMzNy45YzAtMjcuNS0xNy42LTUyLTQzLjgtNjAuN0wzMDMuMiA1LjFjLTkuOS0zLjMtMjAuNS0zLjMtMzAuNCAwTDQzLjggODEuNEMxNy42IDkwLjEgMCAxMTQuNiAwIDE0Mi4xek00NjQgMjU2bC0zNTIgMCAwIDY0IDM1MiAwIDAtNjR6TTExMiA0MTZsMzUyIDAgMC02NC0zNTIgMCAwIDY0em0zNTIgMzJsLTM1MiAwIDAgNjQgMzUyIDAgMC02NHoiXQogICAgfTsKICAgIGZhU3dhdGNoYm9vayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzd2F0Y2hib29rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YzMiLCAiTTAgNDhDMCAyMS41IDIxLjUgMCA0OCAwbDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzNjhjMCA1My00MyA5Ni05NiA5NlMwIDQ2OSAwIDQxNkwwIDQ4ek0yNDAgNDA5LjZsMC0yNzEuNSA0OC4xLTQ4LjFjMTguNy0xOC43IDQ5LjEtMTguNyA2Ny45IDBsNjcuOSA2Ny45YzE4LjcgMTguNyAxOC43IDQ5LjEgMCA2Ny45TDI0MCA0MDkuNnpNMjA1LjUgNTEybDE5Mi0xOTIgNjYuNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTI1OC41IDB6TTgwIDY0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZMODAgNjR6TTY0IDIwOGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek05NiA0NDBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFDYW1wZ3JvdW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbXBncm91bmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5OTc4XSwgImY2YmIiLCAiTTM0NC44IDUyLjNjMTEuMi0xMy43IDkuMi0zMy44LTQuNS00NXMtMzMuOC05LjItNDUgNC41bC0zOS4yIDQ4LTM5LjItNDhDMjA1LjYtMS45IDE4NS40LTQgMTcxLjcgNy4ycy0xNS43IDMxLjQtNC41IDQ1bDQ3LjQgNTgtMjAyIDI0Ni45QzQuNSAzNjcuMSAwIDM3OS42IDAgMzkyLjZMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zOS40YzAtMTIuOS00LjUtMjUuNS0xMi43LTM1LjVsLTIwMi0yNDYuOSA0Ny40LTU4ek0yNTYgMjg4bDExMiAxMjgtMjI0IDAgMTEyLTEyOHoiXQogICAgfTsKICAgIGZhUGVyc29uV2Fsa2luZ0Fycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXdhbGtpbmctYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU1MiIsICJNMTA0LjUgMjRhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwem0tOCAxODEuM0w3My45IDIyNy45Yy02IDYtOS40IDE0LjEtOS40IDIyLjZsMCAzNy41YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzcuNWMwLTI1LjUgMTAuMS00OS45IDI4LjEtNjcuOWwzNS4xLTM1LjFjMjIuOC0yMi44IDUzLjYtMzUuNiA4NS44LTM1LjYgMzYuOSAwIDcxLjggMTYuOCA5NC44IDQ1LjZMMjYyLjMgMTgwYzYuMSA3LjYgMTUuMyAxMiAyNSAxMmwzMy4yIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMzLjIgMGMtMjkuMiAwLTU2LjctMTMuMy03NS0zNmwtMy44LTQuNyAwIDExNS4yIDM0LjUgMjkuNmMxNy43IDE1LjIgMjkuMyAzNi4yIDMyLjYgNTkuM2wxMi42IDg4LjFjMi41IDE3LjUtOS43IDMzLjctMjcuMiAzNi4ycy0zMy43LTkuNy0zNi4yLTI3LjJsLTEyLjYtODguMWMtMS4xLTcuNy01LTE0LjctMTAuOS0xOS44TDEzMCAzNDcuNWMtMjEuMy0xOC4yLTMzLjUtNDQuOS0zMy41LTcyLjlsMC02OS4zek05Ni42IDM3MWMyLjQgMi4zIDQuOCA0LjYgNy40IDYuOGw0NiAzOS40LTIuMiA3LjZjLTQuNSAxNS43LTEyLjkgMzAtMjQuNCA0MS41TDU1LjEgNTM0LjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDY4LjMtNjguM2MzLjgtMy44IDYuNi04LjYgOC4xLTEzLjhMOTYuNiAzNzF6TTUwNS41IDM0NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0xMDIuMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDEwMi4xIDAtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw3MiA3MmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNzIgNzJ6Il0KICAgIH07CiAgICBmYUdsYXNzZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2xhc3NlcyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTMwIiwgIk0xNDMuMyA5NmMtMTQgMC0yNi41IDkuMi0zMC42IDIyLjZMNzAuNCAyNTYgMjI0IDI1NmMxNy43IDAgMzIgMTQuMyAzMiAzMmw2NCAwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDE1My42IDAtNDIuMy0xMzcuNEM0NTkuMiAxMDUuMiA0NDYuOCA5NiA0MzIuNyA5Nkw0MDAgOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIuNyAwYzQyLjEgMCA3OS40IDI3LjUgOTEuOCA2Ny44bDQ1LjQgMTQ3LjVjNC4xIDEzLjIgNi4xIDI2LjkgNi4xIDQwLjdsMCA5NmMwIDUzLTQzIDk2LTk2IDk2bC02NCAwYy01MyAwLTk2LTQzLTk2LTk2bDAtMzItNjQgMCAwIDMyYzAgNTMtNDMgOTYtOTYgOTZsLTY0IDBjLTUzIDAtOTYtNDMtOTYtOTZsMC05NmMwLTEzLjggMi4xLTI3LjUgNi4xLTQwLjdMNTEuNSA5OS44QzYzLjkgNTkuNSAxMDEuMSAzMiAxNDMuMyAzMkwxNzYgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyLjcgMHpNNjQgMzIwbDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0LTEyOCAwem00MTYgOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NC0xMjggMCAwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDB6Il0KICAgIH07CiAgICBmYUNpcmNsZVBhdXNlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtcGF1c2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjA5MiwgInBhdXNlLWNpcmNsZSJdLCAiZjI4YiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIyNCAxOTJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptMTI4IDBsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhUGF1c2VDaXJjbGUyID0gZmFDaXJjbGVQYXVzZTI7CiAgICBmYU1lbW9yeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtZW1vcnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUzOCIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhsMCA3LjRDMCAxNDIuMiA0LjQgMTQ4IDEwLjEgMTUxLjcgMjMuMyAxNjAuMyAzMiAxNzUuMSAzMiAxOTJzLTguNyAzMS43LTIxLjkgNDAuM0M0LjQgMjM2IDAgMjQxLjggMCAyNDguNmwwIDU1LjQgNTEyIDAgMC01NS40YzAtNi44LTQuNC0xMi42LTEwLjEtMTYuMy0xMy4yLTguNi0yMS45LTIzLjQtMjEuOS00MC4zczguNy0zMS43IDIxLjktNDAuM2M1LjctMy43IDEwLjEtOS41IDEwLjEtMTYuM2wwLTcuNGMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNNTEyIDQxNmwwLTY0LTUxMiAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMCAwLTI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAyNCA4OCAwIDAtMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDI0IDg4IDAgMC0yNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMjQgNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnpNMTYwIDE2MGwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptMTI4IDBsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTEyOCAwbDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyeiJdCiAgICB9OwogICAgZmFHaWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdpZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc4NzNdLCAiZjA2YiIsICJNMzIxLjUgNjguOEMzMjkuMSA1NS45IDM0Mi45IDQ4IDM1Ny44IDQ4bDIuMiAwYzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwbC03My4zIDAgMzQuOC01OS4yem0tMTMxIDBsMzQuOCA1OS4yLTczLjMgMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBzMTcuOS00MCA0MC00MGwyLjIgMGMxNC45IDAgMjguOCA3LjkgMzYuMyAyMC44em04OS42LTI0LjNsLTI0LjEgNDEtMjQuMS00MUMyMTUuNyAxNi45IDE4Ni4xIDAgMTU0LjIgMEwxNTIgMGMtNDguNiAwLTg4IDM5LjQtODggODggMCAxNC40IDMuNSAyOCA5LjYgNDBMMzIgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDQ0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJsLTQxLjYgMGM2LjEtMTIgOS42LTI1LjYgOS42LTQwIDAtNDguNi0zOS40LTg4LTg4LTg4bC0yLjIgMGMtMzEuOSAwLTYxLjUgMTYuOS03Ny43IDQ0LjR6TTQ4MCAyNzJsLTIwMCAwIDAgMjA4IDEzNiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTQ0em0tMjQ4IDBsLTIwMCAwIDAgMTQ0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDEzNiAwIDAtMjA4eiJdCiAgICB9OwogICAgZmFNb25leUJpbGxXaGVhdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxsLXdoZWF0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MmEiLCAiTTE3Ni0xNmM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODAgMC04LjggNy4yLTE2IDE2LTE2ek01NiAwbDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMNTYgNDhDNDIuNyA0OCAzMiAzNy4zIDMyIDI0UzQyLjcgMCA1NiAwek0yNCA3MmwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCAxMjBDMTAuNyAxMjAgMCAxMDkuMyAwIDk2UzEwLjcgNzIgMjQgNzJ6bTggOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTI3MiAwYzAtOC44IDcuMi0xNiAxNi0xNiA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODB6TTQwMC0xNmM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODAgMC04LjggNy4yLTE2IDE2LTE2em04MCAxNDRjMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwIDguOCAwIDE2IDcuMiAxNiAxNnpNMzUyIDExMmM4LjggMCAxNiA3LjIgMTYgMTYgMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwem0tOTYgMTZjMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwIDguOCAwIDE2IDcuMiAxNiAxNnpNMCAzMDRjMC0yNi41IDIxLjUtNDggNDgtNDhsNDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNjBjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDMwNHpNNDggNDE2bDAgNDggNDggMGMwLTI2LjUtMjEuNS00OC00OC00OHpNOTYgMzA0bC00OCAwIDAgNDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6TTQ2NCA0MTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDQ4IDAgMC00OHpNNDE2IDMwNGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwwLTQ4LTQ4IDB6bS05NiA4MGE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6Il0KICAgIH07CiAgICBmYUR1bmdlb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHVuZ2VvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNmQ5IiwgIk0zNDcuNSAxNDQuOGM2LjUgNS40IDEyLjUgMTEuMyAxOCAxNy43IDguNyAxMC4yIDIzLjcgMTQgMzUuMSA2LjlsNTQuMS0zMy44YzExLjItNyAxNC43LTIxLjcgNi45LTMyLjItMTUuMy0yMC41LTMzLjUtMzguNi01NC4xLTUzLjgtMTAuNC03LjYtMjQuNy00LjMtMzEuOCA2LjRsLTM1LjEgNTIuNmMtNy44IDExLjYtMy44IDI3LjMgNyAzNi4yek0zMjcuOCA0MS4xYzguNi0xMi45IDIuOS0zMC41LTEyLjItMzQuMS0xOS4xLTQuNi0zOS4xLTctNTkuNi03cy00MC40IDIuNC01OS42IDdjLTE1LjEgMy42LTIwLjggMjEuMi0xMi4yIDM0LjFsNDAgNjBjNS4yIDcuOCAxNC41IDExLjcgMjMuOSAxMS4yIDUuMi0uMyAxMC42LS4zIDE1LjggMCA5LjQgLjUgMTguNy0zLjQgMjMuOS0xMS4ybDQwLTYwek01MC41IDEwMy4zYy03LjkgMTAuNS00LjMgMjUuMyA2LjkgMzIuMmw1NC4xIDMzLjhjMTEuNCA3LjEgMjYuMyAzLjMgMzUuMS02LjkgNS41LTYuNCAxMS41LTEyLjMgMTgtMTcuNyAxMC44LTguOSAxNC44LTI0LjYgNy0zNi4yTDEzNi40IDU1LjljLTcuMS0xMC43LTIxLjUtMTQtMzEuOC02LjQtMjAuNiAxNS4xLTM4LjggMzMuMy01NC4xIDUzLjh6bTYyIDE0MS4xYy44LTkuOS0zLjMtMTkuOS0xMS44LTI1LjFMNDEgMTgyYy0xMi45LTgtMjkuOS0yLjMtMzMuNiAxMi41LTQuOSAxOS43LTcuNSA0MC4zLTcuNSA2MS42bDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtMy45IC4yLTcuOCAuNS0xMS42em0yODcuMSAwYy4zIDMuOCAuNSA3LjcgLjUgMTEuNmwwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yNGMwLTIxLjItMi42LTQxLjgtNy41LTYxLjYtMy42LTE0LjctMjAuNy0yMC41LTMzLjYtMTIuNWwtNTkuNyAzNy4zYy04LjQgNS4zLTEyLjYgMTUuMi0xMS44IDI1LjF6TTg4IDM1MmwtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRMMCA0ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHptNDAwIDBsLTY0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xMTJjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTI4MCAxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAzMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMwNHptLTgwIDMyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNzJ6bTE2MCAwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNzJ6Il0KICAgIH07CiAgICBmYVN1aXRjYXNlTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdWl0Y2FzZS1tZWRpY2FsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbIm1lZGtpdCJdLCAiZjBmYSIsICJNMTkyIDU2bDAgNDAgMTI4IDAgMC00MGMwLTQuNC0zLjYtOC04LThMMjAwIDQ4Yy00LjQgMC04IDMuNi04IDh6bS00OCA4bDAtOGMwLTMwLjkgMjUuMS01NiA1Ni01NkwzMTIgMGMzMC45IDAgNTYgMjUuMSA1NiA1NmwwIDQyNC0yMjQgMCAwLTQxNnpNOTYgMTc2bDAgMzA0LTMyIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTYwYzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyIDAgMCA4MHpNNDE2IDQ4MGwwLTM4NCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0zMiAwek0yNDQgMjA4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzNi0zNiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyNGMwIDguOCA3LjIgMTYgMTYgMTZsMzYgMCAwIDM2YzAgOC44IDcuMiAxNiAxNiAxNmwyNCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTM2IDM2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjRjMC04LjgtNy4yLTE2LTE2LTE2bC0zNiAwIDAtMzZjMC04LjgtNy4yLTE2LTE2LTE2bC0yNCAweiJdCiAgICB9OwogICAgZmFNZWRraXQgPSBmYVN1aXRjYXNlTWVkaWNhbDsKICAgIGZhUGVyc29uQ2FuZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tY2FuZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNTNjIiwgIk0yMzItMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTE0NCAyMzYuN0w5Ny43IDI5OS4xYy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NUMxNDIgMTMyIDE4MS43IDExMiAyMjQgMTEyczgyIDIwIDEwNy4yIDUzLjlsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42TDMwNCAyMzYuNyAzMDQgNTEyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjc1LjN6TTM5MiAzODRjLTQuNCAwLTggMy42LTggOCAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTI4YzAtNC40LTMuNi04LTgtOHoiXQogICAgfTsKICAgIGZhR2F1Z2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2F1Z2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZGFzaGJvYXJkIiwgImdhdWdlLW1lZCIsICJ0YWNob21ldGVyLWFsdC1hdmVyYWdlIl0sICJmNjI0IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zMjAgOTZjMC0yNi45LTE2LjUtNDkuOS00MC01OS4zTDI4MCAxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNzIuN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6TTE0NCAxNzZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0tMTYgODBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMjg4IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNNDAwIDE0NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdCiAgICB9OwogICAgZmFEYXNoYm9hcmQgPSBmYUdhdWdlOwogICAgZmFHYXVnZU1lZCA9IGZhR2F1Z2U7CiAgICBmYVRhY2hvbWV0ZXJBbHRBdmVyYWdlID0gZmFHYXVnZTsKICAgIGZhRW52ZWxvcGVPcGVuVGV4dCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlbnZlbG9wZS1vcGVuLXRleHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjY1OCIsICJNMjg4IDMzLjlMOTYuNCAxNzUuOCAyNTQuNSAyOTNjNS4zIDMuOSAxMS4yIDYuOSAxNy41IDguN0wyNzIgNDY0YzAgNS41IC41IDEwLjggMS4zIDE2TDk2IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0yMzkuOWMwLTIwLjMgOS42LTM5LjQgMjUuOS01MS40TDI1NC41LTIxYzkuNy03LjIgMjEuNC0xMSAzMy41LTExczIzLjggMy45IDMzLjUgMTFMNTE4LjEgMTI0LjdjNy4yIDUuMyAxMy4xIDEyIDE3LjQgMTkuNi0yLjUtLjItNS0uMy03LjUtLjNMNDM2LjYgMTQ0IDI4OCAzMy45ek0zMjAgMjQwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDE2MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjI0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNjAgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0yMjR6bTgwIDE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDk2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTk2IDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNTYgMHoiXQogICAgfTsKICAgIGZhVG9vbGJveCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b29sYm94IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTIwXSwgImY1NTIiLCAiTTE3NiA1NmwwIDQwIDE2MCAwIDAtNDBjMC00LjQtMy42LTgtOC04TDE4NCA0OGMtNC40IDAtOCAzLjYtOCA4ek0xMjggOTZsMC00MGMwLTMwLjkgMjUuMS01NiA1Ni01NkwzMjggMGMzMC45IDAgNTYgMjUuMSA1NiA1NmwwIDQwIDI4LjEgMGMxMi43IDAgMjQuOSA1LjEgMzMuOSAxNC4xbDUxLjkgNTEuOWM5IDkgMTQuMSAyMS4yIDE0LjEgMzMuOWwwIDc2LjEtMTM2IDAgMC0xNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE2LTE0NCAwIDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNi0xMzYgMCAwLTc2LjFjMC0xMi43IDUuMS0yNC45IDE0LjEtMzMuOWw1MS45LTUxLjljOS05IDIxLjItMTQuMSAzMy45LTE0LjFMMTI4IDk2ek0wIDQxNmwwLTk2IDEzNiAwIDAgMTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2IDE0NCAwIDAgMTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2IDEzNiAwIDAgOTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NHoiXQogICAgfTsKICAgIGZhUG93ZXJPZmYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicG93ZXItb2ZmIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTIxMV0sICJmMDExIiwgIk0yODggMGMwLTE3LjctMTQuMy0zMi0zMi0zMlMyMjQtMTcuNyAyMjQgMGwwIDI1NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyTDI4OCAwek0xNDYuMyA5OC40YzE0LjUtMTAuMSAxOC0zMC4xIDcuOS00NC42cy0zMC4xLTE4LTQ0LjYtNy45QzQzLjQgOTIuMSAwIDE2OSAwIDI1NiAwIDM5Ny40IDExNC42IDUxMiAyNTYgNTEyUzUxMiAzOTcuNCA1MTIgMjU2YzAtODctNDMuNC0xNjMuOS0xMDkuNy0yMTAuMS0xNC41LTEwLjEtMzQuNC02LjYtNDQuNiA3LjlzLTYuNiAzNC40IDcuOSA0NC42YzQ5LjggMzQuOCA4Mi4zIDkyLjQgODIuMyAxNTcuNiAwIDEwNi04NiAxOTItMTkyIDE5MlM2NCAzNjIgNjQgMjU2YzAtNjUuMiAzMi41LTEyMi45IDgyLjMtMTU3LjZ6Il0KICAgIH07CiAgICBmYVNpZ25hbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaWduYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNDYsICJzaWduYWwtNSIsICJzaWduYWwtcGVyZmVjdCJdLCAiZjAxMiIsICJNNDg4IDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDAwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MDB6TTM2MCAxMjhjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMzA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMDRjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTI4MCAyNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyMDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTIwOHpNMTUyIDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNNDggMzg0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhU2lnbmFsNSA9IGZhU2lnbmFsOwogICAgZmFTaWduYWxQZXJmZWN0ID0gZmFTaWduYWw7CiAgICBmYUFycm93c1NwaW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXNwaW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRiYiIsICJNNDgxLjcgMjQwLjFjLTE3LjYtMS4yLTMyLjkgMTItMzQuMiAyOS43LTMuMyA0Ny0yMy42IDg5LjQtNTQuOCAxMjFMMzYxIDM1OWMtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMzMjAgMzY2LjMgMzIwIDM3NmwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMTIgMGM5LjcgMCAxOC41LTUuOCAyMi4yLTE0LjhzMS43LTE5LjMtNS4yLTI2LjJsLTM1LTM1YzQxLjctNDIuMiA2OC45LTk4LjggNzMuNC0xNjEuOCAxLjItMTcuNi0xMi0zMi45LTI5LjctMzQuMnpNMzkgNDFMNzQgNzZjLTQxLjcgNDIuMi02OC45IDk4LjgtNzMuNCAxNjEuOC0xLjIgMTcuNiAxMiAzMi45IDI5LjcgMzQuMnMzMi45LTEyIDM0LjItMjkuN2MzLjMtNDcgMjMuNi04OS40IDU0LjgtMTIxTDE1MSAxNTNjNi45IDYuOSAxNy4yIDguOSAyNi4yIDUuMlMxOTIgMTQ1LjcgMTkyIDEzNmwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNEw1NiAwQzQ2LjMgMCAzNy41IDUuOCAzMy44IDE0LjhTMzIuMiAzNC4xIDM5IDQxem0yMDEtMTAuN2MtMS4yIDE3LjYgMTIgMzIuOSAyOS43IDM0LjIgNDcgMy4zIDg5LjQgMjMuNiAxMjEgNTQuOEwzNTkgMTUxYy02LjkgNi45LTguOSAxNy4yLTUuMiAyNi4yUzM2Ni4zIDE5MiAzNzYgMTkybDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTEyYzAtOS43LTUuOC0xOC41LTE0LjgtMjIuMlM0NzcuOSAzMi4yIDQ3MSAzOUw0MzYgNzRjLTQyLjItNDEuNy05OC44LTY4LjktMTYxLjgtNzMuNC0xNy42LTEuMi0zMi45IDEyLTM0LjIgMjkuN3pNNDEgNDczbDM1LTM1YzQyLjIgNDEuNyA5OC44IDY4LjkgMTYxLjggNzMuNCAxNy42IDEuMiAzMi45LTEyIDM0LjItMjkuN3MtMTItMzIuOS0yOS43LTM0LjJjLTQ3LTMuMy04OS40LTIzLjYtMTIxLTU0LjhMMTUzIDM2MWM2LjktNi45IDguOS0xNy4yIDUuMi0yNi4yUzE0NS43IDMyMCAxMzYgMzIwTDI0IDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRMMCA0NTZjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yUzM0LjEgNDc5LjggNDEgNDczeiJdCiAgICB9OwogICAgZmFKb2ludCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJqb2ludCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTk1IiwgIk0zNjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE5YzAgNDAuMyAxNiA3OSA0NC41IDEwNy41bDIxIDIxQzQ2OSAxOTEgNDgwIDIxNy40IDQ4MCAyNDVsMCAxOWMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE5YzAtMTQuOS01LjktMjkuMS0xNi40LTM5LjZsLTIxLTIxQzM1Ny4xIDE0Ni45IDMzNiA5NiAzMzYgNDNsMC0xOWMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNTUyIDI4OGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0xOWMwLTQwLjMtMTYtNzktNDQuNS0xMDcuNWwtMjEtMjFDNDQzIDk3IDQzMiA3MC42IDQzMiA0M2wwLTE5YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxOWMwIDE0LjkgNS45IDI5LjEgMTYuNCAzOS42bDIxIDIxQzU1NC45IDE0MS4xIDU3NiAxOTIgNTc2IDI0NWwwIDE5YzAgMTMuMy0xMC43IDI0LTI0IDI0ek0yOTIuNyAzMjBjNS42IDAgMTAuNyAyLjkgMTMuNiA3LjZMMzk0LjYgNDcxYzEuMyAyLjEgMCA0LjktMi40IDUuMi0xNi4xIDIuNS0zMi40IDMuNy00OC43IDMuN2wtMzguMSAwYy01LjYgMC0xMC43LTIuOS0xMy42LTcuNmwtNzktMTI4LjRjLTYtOS44IDAtMjIuNiAxMS41LTIzLjMgNi43LS40IDEzLjQtLjYgMjAuMi0uNmw0OC4zIDB6TTQ1OS4zIDQ2NS45Yy02LjQgMS0xMi43LTEuOS0xNi4xLTcuNEwzNzQuMSAzNDYuMWMtNi43LTEwLjkgMS41LTI0LjcgMTQuMi0yMi45IDEuMyAuMiAyLjYgLjQgMy44IC42bDEzNi40IDIxYzI3LjMgNC4yIDQ3LjQgMjcuNyA0Ny40IDU1LjNzLTIwLjEgNTEuMS00Ny40IDU1LjNsLTY5LjIgMTAuNnpNMTM4LjcgMzM2YzYuNy0xLjUgMTMuNiAxLjQgMTcuMiA3LjJsNjguOSAxMTJjNi42IDEwLjctMS4yIDI0LjQtMTMuOCAyMy4xLTEzLTEuNC0yNS45LTMuNS0zOC42LTYuNUwzMS4yIDQzOS4yQzEyLjkgNDM1IDAgNDE4LjcgMCA0MDBzMTIuOS0zNSAzMS4yLTM5LjJMMTM4LjcgMzM2eiJdCiAgICB9OwogICAgZmFCcmFpbGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyYWlsbGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjJhMSIsICJNODAgMTQ0YTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0wIDE5MmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMCAxMzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjQgMjQgMTAuNyAyNCAyNC0xMC43IDI0LTI0IDI0em0wIDU2YzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwLTgwIDM1LjgtODAgODAgMzUuOCA4MCA4MCA4MHptMjQ4LTgwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0IDEwLjctMjQgMjQtMjQgMjQgMTAuNyAyNCAyNHptNTYgMGMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MCAzNS44IDgwIDgwIDgwIDgwLTM1LjggODAtODB6TTMwNCAyMzJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0wIDEwNGE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMC0xOTJhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6Il0KICAgIH07CiAgICBmYUJhc2tldFNob3BwaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhc2tldC1zaG9wcGluZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzaG9wcGluZy1iYXNrZXQiXSwgImYyOTEiLCAiTTI4OCAwYzYuNiAwIDEyLjkgMi43IDE3LjQgNy41bDE0NCAxNTIgLjUgLjUgNzguMSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyIDAgMTQuNS05LjYgMjYuNy0yMi44IDMwLjdMNDkxLjEgNDI5LjljLTYuNSAyOS4zLTMyLjUgNTAuMS02Mi41IDUwLjFsLTI4MS4zIDBjLTMwIDAtNTYtMjAuOC02Mi41LTUwLjFsLTQ2LTIwNy4yYy0xMy4yLTMuOS0yMi44LTE2LjItMjIuOC0zMC43IDAtMTcuNyAxNC4zLTMyIDMyLTMybDc4LjEgMCAuNS0uNSAxNDQtMTUyQzI3NS4xIDIuNyAyODEuNCAwIDI4OCAwem0wIDU4LjlMMTkyLjIgMTYwIDM4My44IDE2MCAyODggNTguOXpNMjA4IDI2NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTEyem04MC0yNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMTI4IDI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMTJ6Il0KICAgIH07CiAgICBmYVNob3BwaW5nQmFza2V0ID0gZmFCYXNrZXRTaG9wcGluZzsKICAgIGZhQnJpZGdlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyaWRnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGM4IiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsOCAwIDAgNjQtNDAgMCAwIDExMmMzNy42IDkuNCA2NCA0My4yIDY0IDgybDAgOTRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtOTRjMC0zOC44IDI2LjQtNzIuNiA2NC04MmwwLTExMi00MCAwIDAtNjQgOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyek00MjQgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNMjk2IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTg4IDk2bDgwIDAgMCA2NC04MCAwIDAtNjR6Il0KICAgIH07CiAgICBmYVBsYW5lQXJyaXZhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGFuZS1hcnJpdmFsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NzQ4XSwgImY1YWYiLCAiTTM4Ni42IDE5My4xTDI2NS45IDMuN2MtNC44LTcuNi0xMi42LTEyLjgtMjEuNC0xNC4zbC00My4xLTcuNmMtMTAuOC0xLjktMjAuMiA3LjMtMTguNiAxOC4xbDI0IDE2MS42LTEwNS0xOC41LTMzLjgtNjEuOEM2NC41IDc0LjcgNTguMiA3MC4yIDUxLjEgNjlMMzQgNjZjLTkuOC0xLjctMTguOCA1LjktMTguOCAxNS44bC42IDEwNi4zYy4yIDMwLjkgMjIuNCA1Ny4zIDUyLjkgNjIuN2wxMy41IDIuNCAwIDAgNDE3LjYgNzMuNmMzMC41IDUuNCA1OS41LTE1IDY0LjktNDUuNHMtMTUtNTkuNS00NS40LTY0LjlMMzg2LjYgMTkzLjF6TTIyNCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xMzEuMi0xNS4zYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0NDh6Il0KICAgIH07CiAgICBmYUNhc2hSZWdpc3RlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXNoLXJlZ2lzdGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ODgiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRzMjguNyA2NCA2NCA2NGw0OCAwIDAgMzItNTcgMGMtMzEuNiAwLTU4LjUgMjMuMS02My4zIDU0LjRMMS4xIDM2NC4xQy40IDM2OC44IDAgMzczLjYgMCAzNzguNEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY5LjZjMC00LjgtLjQtOS42LTEuMS0xNC40TDQ4OC4yIDIxNC40QzQ4My41IDE4My4xIDQ1Ni42IDE2MCA0MjUgMTYwbC0yMTcgMCAwLTMyIDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRTMjkxLjMgMCAyNTYgMEw5NiAwem0wIDQ4bDE2MCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2TDk2IDgwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2ek02NCA0MjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsMzM2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMODggNDQ4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptNDgtMTYwYTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHptMTIwLTI0YTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6TTE2MCAzNDRhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4ek0zMjggMjQwYTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6TTI1NiAzNDRhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4ek00MjQgMjQwYTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6TTM1MiAzNDRhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4eiJdCiAgICB9OwogICAgZmFSaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjcwYiIsICJNNjQgMjA4YzAgNy44IDQuNCAxOC43IDE3LjEgMzAuMyA0NS40LTI0LjIgMTA3LjctMzguMyAxNzQuOS0zOC4zczEyOS41IDE0LjEgMTc0LjkgMzguM2MxMi44LTExLjYgMTcuMS0yMi41IDE3LjEtMzAuMyAwLTEyLjMtMTAuOC0zMi00Ny45LTUwLjYtMzUuMi0xNy42LTg2LjEtMjkuNC0xNDQuMS0yOS40cy0xMDguOSAxMS44LTE0NC4xIDI5LjRDNzQuOCAxNzYgNjQgMTk1LjcgNjQgMjA4em0xOTIgNDBjLTQ3IDAtODkuMyA3LjYtMTIyLjkgMTkuNyAzMy4yIDEyLjQgNzUuNyAyMC4zIDEyMi45IDIwLjNzODkuNy03LjggMTIyLjktMjAuM0MzNDUuMyAyNTUuNiAzMDMgMjQ4IDI1NiAyNDh6TTAgMjA4QzAgMTU4LjQgMzkuNCAxMjIuMiA4My4zIDEwMC4yIDEyOS4xIDc3LjMgMTkwLjMgNjQgMjU2IDY0czEyNi45IDEzLjMgMTcyLjcgMzYuMmM0My45IDIyIDgzLjMgNTguMiA4My4zIDEwNy44bDAgOTZjMCA0OS42LTM5LjQgODUuOC04My4zIDEwNy44LTQ1LjkgMjIuOS0xMDcgMzYuMi0xNzIuNyAzNi4yUzEyOS4xIDQzNC43IDgzLjMgNDExLjhDMzkuNCAzODkuOCAwIDM1My42IDAgMzA0bDAtOTZ6Il0KICAgIH07CiAgICBmYVNoYXJlTm9kZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hhcmUtbm9kZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2hhcmUtYWx0Il0sICJmMWUwIiwgIk0zODQgMTkyYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2LTk2IDQzLTk2IDk2YzAgNS40IC41IDEwLjggMS4zIDE2TDE1OS42IDE4NC4xYy0xNi45LTE1LTM5LjItMjQuMS02My42LTI0LjEtNTMgMC05NiA0My05NiA5NnM0MyA5NiA5NiA5NmMyNC40IDAgNDYuNi05LjEgNjMuNi0yNC4xTDI4OS4zIDQwMGMtLjkgNS4yLTEuMyAxMC41LTEuMyAxNiAwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2LTQzLTk2LTk2LTk2Yy0yNC40IDAtNDYuNiA5LjEtNjMuNiAyNC4xTDE5MC43IDI3MmMuOS01LjIgMS4zLTEwLjUgMS4zLTE2cy0uNS0xMC44LTEuMy0xNmwxMjkuNy03Mi4xYzE2LjkgMTUgMzkuMiAyNC4xIDYzLjYgMjQuMXoiXQogICAgfTsKICAgIGZhU2hhcmVBbHQgPSBmYVNoYXJlTm9kZXM7CiAgICBmYVBlcnNvbkNpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUzZiIsICJNMjgwIDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdMMzQxIDI4Ni42YzEyLjgtMTcuNSAyOC41LTMyLjcgNDYuMy00NWwtNTYuMi03NS43QzMwNiAxMzIgMjY2LjMgMTEyIDIyNCAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxNDQgMjM2LjcgMTQ0IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC0xMDBhMjAgMjAgMCAxIDEgMCA0MCAyMCAyMCAwIDEgMSAwLTQwem0wLTE0MGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhQmlub2N1bGFycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiaW5vY3VsYXJzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxZTUiLCAiTTEyOCAzMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzItOTYgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem02NCA5NmwwIDMyMGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNTkuMWMwLTM0LjYgOS40LTY4LjYgMjcuMi05OC4zIDEzLjctMjIuOCAyMi41LTQ4LjIgMjUuOC03NC42TDYwLjUgMTU2YzItMTYgMTUuNi0yOCAzMS44LTI4bDk5LjggMHptMjI3LjggMGMxNi4xIDAgMjkuOCAxMiAzMS44IDI4TDQ1OSAyMTZjMy4zIDI2LjQgMTIuMSA1MS44IDI1LjggNzQuNiAxNy44IDI5LjcgMjcuMiA2My43IDI3LjIgOTguM2wwIDU5LjFjMCAxNy43LTE0LjMgMzItMzIgMzJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyMCA5OS44IDB6TTMyMCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzItOTYgMCAwLTMyem0tMzIgNjRsMCAxNjAtNjQgMCAwLTE2MCA2NCAweiJdCiAgICB9OwogICAgZmFLaXBTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImtpcC1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUxYzQiLCAiTTM0MC44IDg4LjNjMTMuNC0xMS41IDE1LTMxLjcgMy41LTQ1LjFzLTMxLjctMTUtNDUuMS0zLjVMMTI4IDE4Ni40IDEyOCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCA0Ni4zIDY0IDY0bDAgMTY4LTMyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDE2OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTIyLjQgMTcxLjIgMTQ2LjdjMTMuNCAxMS41IDMzLjYgOS45IDQ1LjEtMy41czkuOS0zMy42LTMuNS00NS4xTDE3My4yIDI4MCAzNTIgMjgwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDE3My4yIDIzMiAzNDAuOCA4OC4zeiJdCiAgICB9OwogICAgZmFIYXJkRHJpdmUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhcmQtZHJpdmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjg0MzYsICJoZGQiXSwgImYwYTAiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAyNjAuMUMxOC4xIDI0Ny40IDQwLjIgMjQwIDY0IDI0MGwzMjAgMGMyMy44IDAgNDUuOSA3LjQgNjQgMjAuMUw0NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTQ0OCAzNTJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMjg4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjR6TTIyNCAzODRhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTI4LTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhSGRkMiA9IGZhSGFyZERyaXZlMjsKICAgIGZhUmFua2luZ1N0YXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmFua2luZy1zdGFyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1NjEiLCAiTTMyMS44IDU0LjFMMjk4LjIgNi4zYy0zLjktOC4zLTE2LjEtOC42LTIwLjQgMGwtMjMuNiA0Ny44LTUyLjMgNy41Yy05LjMgMS40LTEzLjMgMTIuOS02LjQgMTkuOGwzOCAzNy05IDUyLjFjLTEuNCA5LjMgOC4yIDE2LjUgMTYuOCAxMi4ybDQ2LjktMjQuOCA0Ni42IDI0LjRjOC42IDQuMyAxOC4zLTIuOSAxNi44LTEyLjJsLTktNTIuMSAzOC0zNi42YzYuOC02LjggMi45LTE4LjMtNi40LTE5LjhsLTUyLjMtNy41ek0yNTYgMjU2Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE2MGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTYwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwek00OCAzMjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwek00MTYgNDMybDAgMzJjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTMyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwYy0yNi41IDAtNDggMjEuNS00OCA0OHoiXQogICAgfTsKICAgIGZhVXNlclRpZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLXRpZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTA4IiwgIk0yMjQgMjQ4YTEyMCAxMjAgMCAxIDEgMC0yNDAgMTIwIDEyMCAwIDEgMSAwIDI0MHptLTMwLjUgNTZsNjEgMGM5LjcgMCAxNy41IDcuOCAxNy41IDE3LjUgMCA0LjItMS41IDguMi00LjIgMTEuNGwtMjcuNCAzMiAzMSAxMTUuMSAuNiAwIDM0LjYtMTM4LjVjMi4yLTguNyAxMS4xLTE0IDE5LjUtMTAuOCA2MS45IDIzLjYgMTA1LjkgODMuNiAxMDUuOSAxNTMuOCAwIDE1LjEtMTIuMyAyNy40LTI3LjQgMjcuNEw0My40IDUxMmMtMTUuMSAwLTI3LjQtMTIuMy0yNy40LTI3LjQgMC03MC4yIDQ0LTEzMC4yIDEwNS45LTE1My44IDguNC0zLjIgMTcuMyAyLjEgMTkuNSAxMC44bDM0LjYgMTM4LjUgLjYgMCAzMS0xMTUuMS0yNy40LTMyYy0yLjctMy4yLTQuMi03LjItNC4yLTExLjQgMC05LjcgNy44LTE3LjUgMTcuNS0xNy41eiJdCiAgICB9OwogICAgZmFFbGxpcHNpcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlbGxpcHNpcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJlbGxpcHNpcy1oIl0sICJmMTQxIiwgIk0wIDI1NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bTE2OCAwYTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptMjI0LTU2YTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyeiJdCiAgICB9OwogICAgZmFFbGxpcHNpc0ggPSBmYUVsbGlwc2lzOwogICAgZmFTdG9yZVNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0b3JlLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwNzEiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU4LjYtNTguNmMxLjEtNCAxLjYtOC4yIDEuNi0xMi41bDAtMTUxLjJjLTEyLjUgNC42LTI2LjEgNy4yLTQwLjUgNy4yLTguMSAwLTE1LjktLjgtMjMuNS0yLjRsMCA2Ni40LTMwLjIgMC0xMzcuNS0xMzcuNWMyLjktMy42IDUuNS03LjQgNy42LTExLjUgMTEuNiAyMiAzNC43IDM3IDYxLjMgMzcgMjYuOCAwIDQ5LjgtMTUuMSA2MS40LTM3LjEgMTEuNCAyMi4xIDM0LjUgMzcuMSA2MC44IDM3LjEgNDUuNiAwIDc4LjQtNDMuNyA2NS42LTg3LjVMNTEzLjggNzIuM0M1MDYuOCA0OC40IDQ4NC45IDMyIDQ2MCAzMkwxMTYgMzJjLTUuNSAwLTEwLjggLjgtMTUuOSAyLjNMNDEtMjQuOXpNMTUxLjUgMjIxLjNMNDguNyAxMTguNiAzOC45IDE1Mi41Yy0xMi44IDQzLjcgMjAgODcuNSA2NS42IDg3LjUgMTguMSAwIDM0LjctNy4xIDQ3LTE4Ljd6TTQxMC4yIDQ4MGwtMTI4LTEyOC0xNTQuMiAwIDAtNjYuNGMtNy42IDEuNi0xNS41IDIuNC0yMy41IDIuNC0xNC40IDAtMjgtMi42LTQwLjUtNy4yTDY0IDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyOTguMiAweiJdCiAgICB9OwogICAgZmFQZXJjZW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcmNlbnQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2MjEwMSwgNjI3ODUsICJwZXJjZW50YWdlIl0sICIyNSIsICJNMTkyIDEyOGE5NiA5NiAwIDEgMCAtMTkyIDAgOTYgOTYgMCAxIDAgMTkyIDB6TTQ0OCAzODRhOTYgOTYgMCAxIDAgLTE5MiAwIDk2IDk2IDAgMSAwIDE5MiAwek00MzguNiA4Ni42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0zODQgMzg0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDM4NC0zODR6Il0KICAgIH07CiAgICBmYVBlcmNlbnRhZ2UgPSBmYVBlcmNlbnQ7CiAgICBmYUZpbGVaaXBwZXIyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtemlwcGVyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImZpbGUtYXJjaGl2ZSJdLCAiZjFjNiIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTY0IDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggNDhDNzQuNyA0OCA2NCA1OC43IDY0IDcyem0wIDk2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em02NCA3MmwtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0OGMwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4bDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJ6bS0xNiA2NGExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6Il0KICAgIH07CiAgICBmYUZpbGVBcmNoaXZlMiA9IGZhRmlsZVppcHBlcjI7CiAgICBmYURpc3BsYXkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGlzcGxheSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMTYzIiwgIk00NDggOTZsMCAyNTYtMzg0IDAgMC0yNTYgMzg0IDB6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzNTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTQ0IDAtMTYgNDgtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNzIgMC0xNi00OCAxNDQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnoiXQogICAgfTsKICAgIGZhSWNvbnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaWNvbnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiaGVhcnQtbXVzaWMtY2FtZXJhLWJvbHQiXSwgImY4NmQiLCAiTTE3NC45IDI3MmMxMC43IDAgMjAuNyA1LjMgMjYuNiAxNC4ybDExLjggMTcuOCAyNi43IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxMTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDM1MmMwLTI2LjUgMjEuNS00OCA0OC00OGwyNi43IDAgMTEuOC0xNy44YzUuOS04LjkgMTUuOS0xNC4yIDI2LjYtMTQuMmw2MS43IDB6bTI3OC42LTEyYzUuNi00LjkgMTMuOS01LjMgMTkuOS0uOXM4LjMgMTIuNCA1LjMgMTkuM0w0NDAuMyAzNjggNDk2IDM2OGM2LjcgMCAxMi42IDQuMSAxNSAxMC40cy42IDEzLjMtNC40IDE3LjdsLTEyOCAxMTJjLTUuNiA0LjktMTMuOSA1LjMtMTkuOSAuOXMtOC4zLTEyLjQtNS4zLTE5LjNsMzguNS04OS43LTU1LjggMGMtNi43IDAtMTIuNi00LjEtMTUtMTAuNHMtLjYtMTMuMyA0LjQtMTcuN2wxMjgtMTEyek0xNDQgMzYwYTQ4IDQ4IDAgMSAwIDAgOTYgNDggNDggMCAxIDAgMC05NnpNNDgzLjggLjRjNi41LTEuMSAxMy4xIC40IDE4LjUgNC40IDYuMSA0LjUgOS43IDExLjcgOS43IDE5LjJsMCAxNTItLjMgNC45Yy0zLjMgMjQuMi0zMC41IDQzLjEtNjMuNyA0My4xLTM1LjMgMC02NC0yMS41LTY0LTQ4czI4LjctNDggNjQtNDhjNS41IDAgMTAuOSAuNiAxNiAxLjZsMC00OS4zLTExMiAzMy42IDAgMTEwLjItLjMgNC45Yy0zLjMgMjQuMi0zMC41IDQzLjEtNjMuNyA0My4xLTM1LjMgMC02NC0yMS41LTY0LTQ4czI4LjctNDggNjQtNDhjNS41IDAgMTAuOSAuNiAxNiAxLjZMMzA0IDcyYzAtMTAuNiA3LTIwIDE3LjEtMjNsMTYwLTQ4IDIuNy0uNnpNMTg4LjkgMEMyMjYgMCAyNTYgMzAgMjU2IDY3LjFsMCA2LjFjMCA1Ni4xLTc1LjIgMTEyLjEtMTEwLjMgMTM1LjMtMTAuOCA3LjEtMjQuNiA3LjEtMzUuNCAwLTM1LjEtMjMuMS0xMTAuMy03OS4yLTExMC4zLTEzNS4zbDAtNi4xQzAgMzAgMzAgMCA2Ny4xIDAgODguMiAwIDEwOCA5LjkgMTIwLjcgMjYuOGw3LjMgOS44IDcuMy05LjhDMTQ4IDkuOSAxNjcuOCAwIDE4OC45IDB6Il0KICAgIH07CiAgICBmYUhlYXJ0TXVzaWNDYW1lcmFCb2x0ID0gZmFJY29uczsKICAgIGZhUnVsZXJWZXJ0aWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJydWxlci12ZXJ0aWNhbCIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJmNTQ4IiwgIk0wIDE2QzAtMTAuNSAyMS41LTMyIDQ4LTMybDE2MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjQtMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTA0IDAgMCA0OC03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDcyIDAgMCA0OC0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMDQgMCAwIDQ4LTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNzIgMCAwIDQ4LTEwNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEwNCAwIDAgMjRjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTQ0Yy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE2eiJdCiAgICB9OwogICAgZmFNYXBMb2NhdGlvbkRvdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXAtbG9jYXRpb24tZG90IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbIm1hcC1tYXJrZWQtYWx0Il0sICJmNWEwIiwgIk01NzYgNDhjMC0xMS4xLTUuNy0yMS40LTE1LjItMjcuMnMtMjEuMi02LjQtMzEuMS0xLjRMNDEzLjUgNzcuNSAyMzQuMSAxNy42Yy04LjEtMi43LTE2LjgtMi4xLTI0LjQgMS43bC0xMjggNjRDNzAuOCA4OC44IDY0IDk5LjkgNjQgMTEybDAgMzUyYzAgMTEuMSA1LjcgMjEuNCAxNS4yIDI3LjJzMjEuMiA2LjQgMzEuMSAxLjRsMTE2LjEtNTguMSAxNzMuMyA1Ny44Yy00LjMtNi40LTguNS0xMy4xLTEyLjYtMTkuOS0xMS0xOC4zLTIxLjktMzkuMy0zMC02MS44bC0xMDEuMi0zMy43IDAtMjg0LjUgMTI4IDQyLjcgMCA5OS4zYzMxLTM1LjggNzctNTguNCAxMjgtNTguNCAyMi42IDAgNDQuMiA0LjQgNjQgMTIuNUw1NzYgNDh6TTUxMiAyMjRjLTY2LjMgMC0xMjAgNTIuOC0xMjAgMTE3LjkgMCA2OC45IDY0LjEgMTUwLjQgOTguNiAxODkuMyAxMS42IDEzIDMxLjMgMTMgNDIuOSAwIDM0LjUtMzguOSA5OC42LTEyMC40IDk4LjYtMTg5LjMgMC02NS4xLTUzLjctMTE3LjktMTIwLTExNy45ek00NzIgMzQ0YTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6Il0KICAgIH07CiAgICBmYU1hcE1hcmtlZEFsdCA9IGZhTWFwTG9jYXRpb25Eb3Q7CiAgICBmYUhlYXJ0Q3JhY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhcnQtY3JhY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNDgsICJoZWFydC1icm9rZW4iXSwgImY3YTkiLCAiTTEzMy4xIDMyYzE3LjMgMCAzNC4yIDMuNCA0OS45IDkuN2w1NC44IDg1LjItNzUuNCA3NS40Yy0xLjUgMS41LTIuNCAzLjYtMi4zIDUuOHMxIDQuMiAyLjYgNS43bDExMiAxMDRjMi45IDIuNyA3LjQgMi45IDEwLjUgLjNzMy44LTcgMS43LTEwLjRsLTYwLjQtOTguMSA5MC43LTc1LjZjMi42LTIuMSAzLjUtNS43IDIuNC04LjhMMjk2LjQgNjAuNkMzMTkuNiA0Mi4zIDM0OC42IDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDExMi4yLTEzOS45IDI0Mi41LTIxMi45IDI5OC4yLTEyLjQgOS40LTI3LjYgMTQuMS00My4xIDE0LjFzLTMwLjgtNC42LTQzLjEtMTQuMUMxMzkuOSA0MTAuMiAwIDI3OS45IDAgMTY3LjdsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzJ6Il0KICAgIH07CiAgICBmYUhlYXJ0QnJva2VuID0gZmFIZWFydENyYWNrOwogICAgZmFDb3cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY293IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MDA0XSwgImY2YzgiLCAiTTk2IDIyNGwwIDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtODguMmM5LjkgNi42IDIwLjYgMTIgMzIgMTYuMWwwIDI0LjJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTE2LjljNS4zIC42IDEwLjYgLjkgMTYgLjlzMTAuNy0uMyAxNi0uOWwwIDE2LjljMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTI0LjJjMTEuNC00IDIyLjEtOS40IDMyLTE2LjFsMCA4OC4yYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xNjAgMzIgMzIgMCA0OS41YzAgOS41IDIuOCAxOC43IDguMSAyNi42TDUzMCA0MjdjOC44IDEzLjEgMjMuNSAyMSAzOS4zIDIxIDIyLjUgMCA0MS45LTE1LjkgNDYuMy0zOGwyMC4zLTEwMS42YzIuNi0xMy0uMy0yNi41LTgtMzcuM2wtMy45LTUuNSAwLTgxLjZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNC40LTUyLjktNzQuMUM0OTYgODYuNSA0NTIuNCA2NCA0MDUuOSA2NEwxNDQgNjRDNzcuNyA2NCAyNCAxMTcuNyAyNCAxODRsMCA1NEM5LjQgMjQ5LjggMCAyNjcuOCAwIDI4OGwwIDE3LjZjMCA4IDYuNCAxNC40IDE0LjQgMTQuNCAzMS44IDAgNTcuNi0yNS44IDU3LjYtNTcuNkw3MiAxODRjMC0yNC4zIDEyLjEtNDUuOCAzMC41LTU4LjktNC4yIDEwLjgtNi41IDIyLjYtNi41IDM0LjlsMCA2NHpNNTYwIDMzNmExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwek0xNjYuNiAxNjYuNmMtNC4yLTQuMi02LjYtMTAtNi42LTE2IDAtMTIuNSAxMC4xLTIyLjYgMjIuNi0yMi42bDE3OC43IDBjMTIuNSAwIDIyLjYgMTAuMSAyMi42IDIyLjYgMCA2LTIuNCAxMS44LTYuNiAxNmwtMjMuNCAyMy40QzMzMi4yIDIxMS44IDMwMi43IDIyNCAyNzIgMjI0cy02MC4yLTEyLjItODEuOS0zMy45bC0yMy40LTIzLjR6Il0KICAgIH07CiAgICBmYVJzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyc3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZmVlZCJdLCAiZjA5ZSIsICJNMCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMiAyMjkuOCAwIDQxNiAxODYuMiA0MTYgNDE2IDAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyQzM4NCAyNTMuNiAyMjYuNCA5NiAzMiA5NiAxNC4zIDk2IDAgODEuNyAwIDY0ek0wIDQxNmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTMyIDE2MGMxNTkuMSAwIDI4OCAxMjguOSAyODggMjg4IDAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyYzAtMTIzLjctMTAwLjMtMjI0LTIyNC0yMjQtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhRmVlZCA9IGZhUnNzOwogICAgZmFNYWduaWZ5aW5nR2xhc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFnbmlmeWluZy1nbGFzcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI2OSwgInNlYXJjaCJdLCAiZjAwMiIsICJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NkMyOTYuMyA0MDEuMSAyNTMuOSA0MTYgMjA4IDQxNiA5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMCA0MTYgOTMuMSA0MTYgMjA4ek0yMDggMzUyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHoiXQogICAgfTsKICAgIGZhU2VhcmNoID0gZmFNYWduaWZ5aW5nR2xhc3M7CiAgICBmYUNsb3VkTW9vbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1tb29uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY2YzMiLCAiTTQ4MCAwYzE0LjYgMCAyOC44IDEuNiA0Mi41IDQuNyA3LjQgMS43IDEzIDcuOCAxMy45IDE1LjRzLTMgMTQuOS05LjggMTguM2MtNDUuNCAyMi42LTc2LjYgNjkuNS03Ni42IDEyMy42IDAgNzYuMiA2MS44IDEzOCAxMzggMTM4IDMuNyAwIDcuNC0uMSAxMS4xLS40IDcuNi0uNiAxNC43IDMuNiAxNy44IDEwLjZzMS41IDE1LjEtMy45IDIwLjRjLTI2IDI1LTU5LjEgNDIuNy05NS45IDQ5LjktMTEuMS0yNS4zLTMwLjItNDYuMy01NC4xLTU5LjgtNy42LTYzLjQtNjEuNi0xMTIuNi0xMjcuMS0xMTIuNi0xMS4yIDAtMjIuMSAxLjUtMzIuNSA0LjItNC44LTQuMi05LjktOC4yLTE1LjItMTEuOC0uMS0yLjgtLjItNS42LS4yLTguNCAwLTEwNiA4Ni0xOTIgMTkyLTE5MnptLS4xIDQzMS45YzAgNDQuMi0zNS44IDgwLTgwIDgwbC0yNzEuOSAwYy01MyAwLTk2LTQzLTk2LTk2IDAtNDcuNiAzNC42LTg3IDgwLTk0LjYtLjQtNTIuOCA0Mi45LTk3LjMgOTYtOTcuMyAzNC45IDAgNjUuNCAxOC42IDgyLjIgNDYuNCAxMy05LjEgMjguOC0xNC40IDQ1LjgtMTQuNCA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDUuOS0uNiAxMS43LTEuOSAxNy4yIDM3LjQgNi43IDY1LjggMzkuNCA2NS44IDc4Ljd6Il0KICAgIH07CiAgICBmYUJveGVzU3RhY2tlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3hlcy1zdGFja2VkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjI2MjUsICJib3hlcyIsICJib3hlcy1hbHQiXSwgImY0NjgiLCAiTTIyNCAwbDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjQgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEyOGMwIDUuNS0uNyAxMC45LTIgMTZsLTI1MiAwYy0xLjMtNS4xLTItMTAuNS0yLTE2bDAtMTI4YzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyIDB6bTk2IDUxMmMtMTEuMiAwLTIxLjgtMi45LTMxLTggOS41LTE2LjUgMTUtMzUuNiAxNS01NmwwLTEyOGMwLTIwLjQtNS41LTM5LjUtMTUtNTYgOS4yLTUuMSAxOS43LTggMzEtOGwzMiAwIDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjQgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEyOGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMTI4IDB6TTAgMzIwYzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyIDAgMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC02NCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTI4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAzMjB6Il0KICAgIH07CiAgICBmYUJveGVzID0gZmFCb3hlc1N0YWNrZWQ7CiAgICBmYUJveGVzQWx0ID0gZmFCb3hlc1N0YWNrZWQ7CiAgICBmYUNvZGVCcmFuY2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29kZS1icmFuY2giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjEyNiIsICJNODAgMTA0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODAtMjRjMCAzMi44LTE5LjcgNjEtNDggNzMuM2wwIDcwLjcgMTc2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yMi43Yy0yOC4zLTEyLjMtNDgtNDAuNS00OC03My4zIDAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAzMi44LTE5LjcgNjEtNDggNzMuM2wwIDIyLjdjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJsLTE3NiAwIDAgNzAuN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zIDAgNDQuMi0zNS44IDgwLTgwIDgwUzAgNDc2LjIgMCA0MzJjMC0zMi44IDE5LjctNjEgNDgtNzMuM2wwLTIwNS4zQzE5LjcgMTQxIDAgMTEyLjggMCA4MCAwIDM1LjggMzUuOCAwIDgwIDBzODAgMzUuOCA4MCA4MHptMjMyIDBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNODAgNDU2YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhQmFuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODY4MywgImNhbmNlbCJdLCAiZjA1ZSIsICJNMzY3LjIgNDEyLjVMOTkuNSAxNDQuOGMtMjIuNCAzMS40LTM1LjUgNjkuOC0zNS41IDExMS4yIDAgMTA2IDg2IDE5MiAxOTIgMTkyIDQxLjUgMCA3OS45LTEzLjEgMTExLjItMzUuNXptNDUuMy00NS4zYzIyLjQtMzEuNCAzNS41LTY5LjggMzUuNS0xMTEuMiAwLTEwNi04Ni0xOTItMTkyLTE5Mi00MS41IDAtNzkuOSAxMy4xLTExMS4yIDM1LjVMNDEyLjUgMzY3LjJ6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6Il0KICAgIH07CiAgICBmYUNhbmNlbCA9IGZhQmFuOwogICAgZmFKdWdEZXRlcmdlbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAianVnLWRldGVyZ2VudCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNTE5IiwgIk05NiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjQgOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDg4IDk2Qzc0LjcgOTYgNjQgODUuMyA2NCA3MlM3NC43IDQ4IDg4IDQ4bDggMCAwLTI0ek0wIDI1NmMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOGwxMjggMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGwwIDE5MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjU2em0yNTYgMGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnoiXQogICAgfTsKICAgIGZhUmVwbHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVwbHkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTcxNCwgIm1haWwtcmVwbHkiXSwgImYzZTUiLCAiTTIwNC4yIDE4LjRjMTIgNSAxOS44IDE2LjYgMTkuOCAyOS42bDAgODAgMTEyIDBjOTcuMiAwIDE3NiA3OC44IDE3NiAxNzYgMCAxMTMuMy04MS41IDE2My45LTEwMC4yIDE3NC4xLTIuNSAxLjQtNS4zIDEuOS04LjEgMS45LTEwLjkgMC0xOS43LTguOS0xOS43LTE5LjcgMC03LjUgNC4zLTE0LjQgOS44LTE5LjUgOS40LTguOCAyMi4yLTI2LjQgMjIuMi01Ni43IDAtNTMtNDMtOTYtOTYtOTZsLTk2IDAgMCA4MGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOWwtMTYwLTE2MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsMTYwLTE2MGM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOXoiXQogICAgfTsKICAgIGZhTWFpbFJlcGx5ID0gZmFSZXBseTsKICAgIGZhU3VuUGxhbnRXaWx0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN1bi1wbGFudC13aWx0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1N2EiLCAiTTE2MCAwYy01LjUgMC0xMC42IDIuOC0xMy41IDcuNGwtMS4xIDIuMS0yNC44IDU1LjQtNTYuNy0yMS43Yy01LjktMi4yLTEyLjUtLjgtMTcgMy43UzQxIDU4IDQzLjIgNjMuOWwyMS43IDU2LjctNTUuNCAyNC44QzMuNyAxNDggMCAxNTMuNyAwIDE2MHMzLjcgMTIgOS41IDE0LjZsNTUuNCAyNC44LTIxLjcgNTYuN2MtMi4yIDUuOS0uOCAxMi41IDMuNyAxN3MxMS4xIDUuOSAxNyAzLjdsNTYuNy0yMS43IDI0LjggNTUuNGMyLjYgNS44IDguMyA5LjUgMTQuNiA5LjVzMTItMy43IDE0LjYtOS41bDI0LjgtNTUuNCA1Ni44IDIxLjdjNS45IDIuMiAxMi41IC44IDE3LTMuN3M1LjktMTEuMSAzLjctMTdsLTIxLjctNTYuNyA1NS40LTI0LjhjNS44LTIuNiA5LjUtOC4zIDkuNS0xNC42cy0zLjctMTItOS41LTE0LjZsLTU1LjQtMjQuOCAyMS43LTU2LjcgLjctMi4yYzEuMi01LjMtLjQtMTAuOS00LjMtMTQuOHMtOS41LTUuNS0xNC44LTQuM2wtMi4yIC43LTU2LjggMjEuNy0yNC44LTU1LjRDMTcyIDMuNyAxNjYuMyAwIDE2MCAwem0wIDk2YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4em0zMiA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0zNzYgMTZsMCA1My40Yy0xNC44IDcuNy0yNCAyMy4xLTI0IDQ0LjYgMCAxNi44IDE2IDQ0IDM3LjQgNjcuMiA1LjggNi4yIDE1LjUgNi4yIDIxLjIgMCAyMS40LTIzLjMgMzcuNC01MC42IDM3LjQtNjcuMiAwLTIxLjUtOS4yLTM3LTI0LTQ0LjZsMC01My40YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwbDAgMjIuN2MtOS44LTQuMy0yMC42LTYuNy0zMi02LjctNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyMS40Yy0xNC44IDcuNi0yNCAyMy4xLTI0IDQ0LjYgMCAxNi44IDE2IDQ0IDM3LjQgNjcuMiA1LjggNi4yIDE1LjUgNi4yIDIxLjIgMCAyMS40LTIzLjMgMzcuNC01MC42IDM3LjQtNjcuMiAwLTIxLjUtOS4yLTM3LTI0LTQ0LjZsMC0yMS40YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNzYtNDI0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTc2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEwNCAwIDAtMjcyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6Il0KICAgIH07CiAgICBmYUJhY3Rlcml1bSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWN0ZXJpdW0iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTA1YSIsICJNNDA4IDE2YzAtMTMuMy0xMC43LTI0LTI0LTI0UzM2MCAyLjcgMzYwIDE2bDAgMjMuNGMtMTMuOSA1LjMtMjYuOSAxMy41LTM4LjIgMjQuNUwzMDUgNDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTYuOCAxNi44LTMwLjEgMzAuMS0xNi44LTE2LjhjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTYuOCAxNi44Yy0xMCAxMC0yMCAyMC0zMC4xIDMwLjFMMTc3IDE3NWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxNi44IDE2LjgtMzAuMSAzMC4xLTE2LjgtMTYuOGMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxNi44IDE2LjhjLTExIDExLjMtMTkuMiAyNC4zLTI0LjUgMzguMkw0OCAzMjhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTYuMyAwYzEuMyAxOC4zIDcuMSAzNi40IDE3LjQgNTIuNEw3MSA0MzljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwxMC42LTEwLjZjMTYgMTAuMyAzNC4xIDE2LjEgNTIuNCAxNy40bDAgMTYuM2MwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjMuNGMxMy45LTUuMyAyNi45LTEzLjUgMzguMi0yNC41TDI3MSA0NjVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xNi44LTE2LjggMzAuMS0zMC4xIDE2LjggMTYuOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTE2LjgtMTYuOGMxMC0xMCAyMC0yMCAzMC4xLTMwLjFMMzk5IDMzN2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTE2LjgtMTYuOCAzMC4xLTMwLjEgMTYuOCAxNi44YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTYuOC0xNi44YzExLTExLjMgMTkuMi0yNC4zIDI0LjUtMzguMmwyMy40IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE2LjMgMGMtMS4zLTE4LjMtNy4xLTM2LjQtMTcuNC01Mi40TDUwNSA3M2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDQ2MC40IDQ5LjdjLTE2LTEwLjMtMzQuMS0xNi4xLTUyLjQtMTcuNEw0MDggMTZ6TTE2MCAzNTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMjcyIDI0MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVJlY29yZFZpbnlsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJlY29yZC12aW55bCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmOGQ5IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNTYtOTZhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6bTAgMjQwYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC0xMTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFGbG9wcHlEaXNrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmbG9wcHktZGlzayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODE5MCwgMTI4NDI2LCAic2F2ZSJdLCAiZjBjNyIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI0Mi43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDM1MiA1MC43QzM0MCAzOC43IDMyMy43IDMyIDMwNi43IDMyTDY0IDMyem0zMiA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xNjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NHpNMjI0IDI4OGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHoiXQogICAgfTsKICAgIGZhU2F2ZTIgPSBmYUZsb3BweURpc2syOwogICAgZmFUb2lsZXRzUG9ydGFibGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9pbGV0cy1wb3J0YWJsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTg0IiwgIk02NCAwbDk2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNi0yMjQgMCAwLTE2QzAgMjguNyAyOC43IDAgNjQgMHpNMCAxMjhsMjI0IDAgMCAzNjBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04LTEyOCAwIDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNFMwIDUwMS4zIDAgNDg4TDAgMTI4ek0xMjggMjQ4bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMjQgMCAwLTk2LTI0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0ek0zNTIgMGw5NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTYtMjI0IDAgMC0xNmMwLTM1LjMgMjguNy02NCA2NC02NHpNMjg4IDEyOGwyMjQgMCAwIDM2MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTgtMTI4IDAgMCA4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMzYwek00MTYgMjQ4bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMjQgMCAwLTk2LTI0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0eiJdCiAgICB9OwogICAgZmFPID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm8iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMTFdLCAiNGYiLCAiTTIyNCA5NmExNjAgMTYwIDAgMSAwIDAgMzIwIDE2MCAxNjAgMCAxIDAgMC0zMjB6TTQ0OCAyNTZhMjI0IDIyNCAwIDEgMSAtNDQ4IDAgMjI0IDIyNCAwIDEgMSA0NDggMHoiXQogICAgfTsKICAgIGZhUGFsZXR0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYWxldHRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTEyXSwgImY1M2YiLCAiTTUxMiAyNTZjMCAuOSAwIDEuOCAwIDIuNy0uNCAzNi41LTMzLjYgNjEuMy03MC4xIDYxLjNMMzQ0IDMyMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDggMCAzLjQgLjQgNi43IDEgOS45IDIuMSAxMC4yIDYuNSAyMCAxMC44IDI5LjkgNi4xIDEzLjggMTIuMSAyNy41IDEyLjEgNDIgMCAzMS44LTIxLjYgNjAuNy01My40IDYyLTMuNSAuMS03IC4yLTEwLjYgLjItMTQxLjQgMC0yNTYtMTE0LjYtMjU2LTI1NlMxMTQuNiAwIDI1NiAwIDUxMiAxMTQuNiA1MTIgMjU2ek0xMjggMjg4YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTAtOTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0yODggOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptOTYgOTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFVbmxvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidW5sb2NrIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4Mjc1XSwgImYwOWMiLCAiTTEyOCA5NmMwLTM1LjMgMjguNy02NCA2NC02NCAzMS43IDAgNTggMjMgNjMuMSA1My4zIDIuOSAxNy40IDE5LjQgMjkuMiAzNi45IDI2LjNzMjkuMi0xOS40IDI2LjMtMzYuOUMzMDguMSAxNC4xIDI1NS41LTMyIDE5Mi0zMiAxMjEuMy0zMiA2NCAyNS4zIDY0IDk2bDAgNjRjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0xOTIgMCAwLTY0eiJdCiAgICB9OwogICAgZmFFYXJMaXN0ZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWFyLWxpc3RlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhc3Npc3RpdmUtbGlzdGVuaW5nLXN5c3RlbXMiXSwgImYyYTIiLCAiTTM3OS42IC4zYy04LjkgMS4yLTE3LjIgNi4yLTIyLjQgMTQuMS02LjggMTAuNC03IDI0LjEtLjQgMzQuNiA1LjYgOC45IDE1LjUgMTIuNyAyMy44IDE4LjUgNy41IDUuMiAxNy42IDEzLjIgMjcuNyAyNC4yIDIwIDIxLjcgMzkuNSA1NC4zIDM5LjUgMTAwLjMgMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTY2LTI4LjUtMTEzLjQtNTYuNS0xNDMuNy0xMy45LTE1LjEtMjcuOC0yNi4xLTM4LjMtMzMuMy0xMS03LjYtMjMuNS0xNi42LTM3LjYtMTQuN3pNMjQwIDEyOGMtNTcuNiAwLTEwNS4xIDQzLjYtMTExLjMgOTkuNS0xLjkgMTcuNi0xNy44IDMwLjItMzUuMyAyOC4zcy0zMC4yLTE3LjgtMjguMy0zNS4zYzkuNy04OCA4NC4zLTE1Ni41IDE3NC45LTE1Ni41IDk3LjIgMCAxNzYgNzguOCAxNzYgMTc2IDAgNDYtMTcuNyA4Ny45LTQ2LjYgMTE5LjMtMTIgMTMtMTcuNCAyNC44LTE3LjQgMzQuN2wwIDYuMWMwIDYxLjktNTAuMSAxMTItMTEyIDExMi0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNi4xYzAtMzIuOSAxNy40LTU5LjYgMzQuNC03OCAxOC40LTIwIDI5LjYtNDYuNiAyOS42LTc1LjkgMC02MS45LTUwLjEtMTEyLTExMi0xMTJ6TTAgNDgwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2MC05NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTg2LjYgMzYxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0ek0yNDAgMjA4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdCiAgICB9OwogICAgZmFBc3Npc3RpdmVMaXN0ZW5pbmdTeXN0ZW1zID0gZmFFYXJMaXN0ZW47CiAgICBmYUNvZGVQdWxsUmVxdWVzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb2RlLXB1bGwtcmVxdWVzdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMTNjIiwgIk0zMjggMjRjMC05LjctNS44LTE4LjUtMTQuOC0yMi4yUzI5My45IC4yIDI4NyA3TDIzMSA2M2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNTYgNTZjNi45IDYuOSAxNy4yIDguOSAyNi4yIDUuMlMzMjggMTQ1LjcgMzI4IDEzNmwwLTI0IDI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyMTQuN2MtMjguMyAxMi4zLTQ4IDQwLjUtNDggNzMuMyAwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMzIuOC0xOS43LTYxLTQ4LTczLjNMNDQ4IDE0NGMwLTUzLTQzLTk2LTk2LTk2bC0yNCAwIDAtMjR6TTcyIDgwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTU2IDczLjNjMjguMy0xMi4zIDQ4LTQwLjUgNDgtNzMuMyAwLTQ0LjItMzUuOC04MC04MC04MFMxNiAzNS44IDE2IDgwYzAgMzIuOCAxOS43IDYxIDQ4IDczLjNsMCAyMDUuM2MtMjguMyAxMi4zLTQ4IDQwLjUtNDggNzMuMyAwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMzIuOC0xOS43LTYxLTQ4LTczLjNsMC0yMDUuM3pNNzIgNDMyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTM0NC0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYUtleSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJrZXkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNzNdLCAiZjA4NCIsICJNMzM2IDM1MmM5Ny4yIDAgMTc2LTc4LjggMTc2LTE3NlM0MzMuMiAwIDMzNiAwIDE2MCA3OC44IDE2MCAxNzZjMCAxOC43IDIuOSAzNi44IDguMyA1My43TDcgMzkxYy00LjUgNC41LTcgMTAuNi03IDE3bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQwIDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00MCA0MCAwYzYuNCAwIDEyLjUtMi41IDE3LTdsMzMuMy0zMy4zYzE2LjkgNS40IDM1IDguMyA1My43IDguM3pNMzc2IDk2YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHoiXQogICAgfTsKICAgIGZhU2t1bGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2t1bGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxMjhdLCAiZjU0YyIsICJNNDE2IDQyNy40YzU4LjUtNDQgOTYtMTExLjYgOTYtMTg3LjQgMC0xMzIuNS0xMTQuNi0yNDAtMjU2LTI0MFMwIDEwNy41IDAgMjQwYzAgNzUuOCAzNy41IDE0My40IDk2IDE4Ny40TDk2IDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDY0IDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgMzIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM2LjZ6TTk2IDI1NmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6bTI1Ni02NGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHoiXQogICAgfTsKICAgIGZhTWFyc1N0cm9rZVVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnMtc3Ryb2tlLXVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTg5NiwgIm1hcnMtc3Ryb2tlLXYiXSwgImYyMmEiLCAiTTE5MiAyNTZhMTEyIDExMiAwIDEgMCAwIDIyNCAxMTIgMTEyIDAgMSAwIDAtMjI0ek0xNiAzNjhjMC04Ni4zIDYyLjEtMTU4LjEgMTQ0LjEtMTczLjEtLjEtLjktLjEtMS45LS4xLTIuOWwwLTE2LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTYxLjQtMjggMjIuNGMtMTMuOCAxMS0zMy45IDguOC00NS01cy04LjgtMzMuOSA1LTQ1bDgwLTY0YzExLjctOS4zIDI4LjMtOS4zIDQwIDBsODAgNjRjMTMuOCAxMSAxNiAzMS4yIDUgNDVzLTMxLjIgMTYtNDUgNWwtMjgtMjIuNCAwIDYxLjQgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDE2YzAgMSAwIDEuOS0uMSAyLjkgODIgMTUgMTQ0LjEgODYuOCAxNDQuMSAxNzMuMSAwIDk3LjItNzguOCAxNzYtMTc2IDE3NlMxNiA0NjUuMiAxNiAzNjh6Il0KICAgIH07CiAgICBmYU1hcnNTdHJva2VWID0gZmFNYXJzU3Ryb2tlVXA7CiAgICBmYUZpcmVGbGFtZVNpbXBsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaXJlLWZsYW1lLXNpbXBsZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJidXJuIl0sICJmNDZhIiwgIk0zNzIuNSAyNTYuNWwtLjctMS45QzMzNy44IDE2MC44IDI4MiA3Ni41IDIwOS4xIDguNWwtMy4zLTNDMjAyLjEgMiAxOTcuMSAwIDE5MiAwcy0xMC4xIDItMTMuOCA1LjVsLTMuMyAzQzEwMiA3Ni41IDQ2LjIgMTYwLjggMTIuMiAyNTQuNmwtLjcgMS45QzMuOSAyNzcuMyAwIDI5OS40IDAgMzIxLjYgMCA0MjYuNyA4Ni44IDUxMiAxOTIgNTEyczE5Mi04NS4zIDE5Mi0xOTAuNGMwLTIyLjItMy45LTQ0LjItMTEuNS02NS4xem0tOTAuOCA0OS41YzQuMSA5LjMgNi4yIDE5LjQgNi4yIDI5LjUgMCA1My00MyA5Ni41LTk2IDk2LjVzLTk2LTQzLjUtOTYtOTYuNWMwLTEwLjEgMi4xLTIwLjMgNi4yLTI5LjVsMS45LTQuM2MxNS44LTM1LjQgMzcuOS02Ny43IDY1LjMtOTUuMWw4LjktOC45YzMuNi0zLjYgOC41LTUuNiAxMy42LTUuNnMxMCAyIDEzLjYgNS42bDguOSA4LjljMjcuNCAyNy40IDQ5LjYgNTkuNyA2NS4zIDk1LjFsMS45IDQuM3oiXQogICAgfTsKICAgIGZhQnVybiA9IGZhRmlyZUZsYW1lU2ltcGxlOwogICAgZmFUcmVlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyZWUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc3OTRdLCAiZjFiYiIsICJNMjI0LTMyYzcgMCAxMy43IDMuMSAxOC4zIDguNWwxMzYgMTYwYzYuMSA3LjEgNy40IDE3LjEgMy41IDI1LjZTMzY5LjQgMTc2IDM2MCAxNzZsLTI0LjkgMCA3NS4yIDg4LjVjNi4xIDcuMSA3LjQgMTcuMSAzLjUgMjUuNlM0MDEuNCAzMDQgMzkyIDMwNGwtMzguNSAwIDg4LjggMTA0LjVjNi4xIDcuMSA3LjQgMTcuMSAzLjUgMjUuNlM0MzMuNCA0NDggNDI0IDQ0OGwtMTY4IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0LTE2OCAwYy05LjQgMC0xNy45LTUuNC0yMS44LTEzLjlzLTIuNi0xOC41IDMuNS0yNS42TDk0LjUgMzA0IDU2IDMwNGMtOS40IDAtMTcuOS01LjQtMjEuOC0xMy45cy0yLjYtMTguNSAzLjUtMjUuNkwxMTIuOSAxNzYgODggMTc2Yy05LjQgMC0xNy45LTUuNC0yMS44LTEzLjlzLTIuNi0xOC41IDMuNS0yNS42bDEzNi0xNjBDMjEwLjMtMjguOSAyMTctMzIgMjI0LTMyeiJdCiAgICB9OwogICAgZmFTbW9nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNtb2ciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjc1ZiIsICJNMTc2IDI4OEM5Ni41IDI4OCAzMiAyMjMuNSAzMiAxNDRTOTYuNSAwIDE3NiAwYzI3LjIgMCA1Mi42IDcuNSA3NC4zIDIwLjYgMjAuMS0xMyA0NC0yMC42IDY5LjctMjAuNiA0Ny40IDAgODguNyAyNS43IDExMC45IDY0bDEuMSAwYzYxLjkgMCAxMTIgNTAuMSAxMTIgMTEyIDAgNjAuMy00Ny42IDEwOS40LTEwNy4yIDExMS45LTIyLjYgMjAtNTIuMyAzMi4xLTg0LjggMzIuMS0zMi41IDAtNjIuMS0xMi4xLTg0LjctMzJMMTc2IDI4OHpNNTEyIDM5MmMwIDEzLjMtMTAuNyAyNC0yNCAyNEwyNCA0MTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjR6TTg4IDQ2NGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0xNzYgMGwyODggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjg4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYVMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzExNV0sICI1MyIsICJNMCAxNTcuNUMwIDg4LjIgNTYuMiAzMiAxMjUuNSAzMkwyNzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMTI1LjUgOTZjLTM0IDAtNjEuNSAyNy41LTYxLjUgNjEuNSAwIDMxIDIzLjEgNTcuMiA1My45IDYxTDIxMC4xIDIzMEMyNzIuOSAyMzcuOSAzMjAgMjkxLjIgMzIwIDM1NC41IDMyMCA0MjMuOCAyNjMuOCA0ODAgMTk0LjUgNDgwTDQ4IDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNDYuNSAwYzM0IDAgNjEuNS0yNy41IDYxLjUtNjEuNSAwLTMxLTIzLjEtNTcuMi01My45LTYxTDEwOS45IDI4MkM0Ny4xIDI3NC4xIDAgMjIwLjggMCAxNTcuNXoiXQogICAgfTsKICAgIGZhSmVkaSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJqZWRpIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2NjkiLCAiTTI0NiAzMTUuN2wtMjEuMi0zMS45Yy0yLjEtMy4yLTEuNy03LjQgMS0xMC4xczYuOS0zLjEgMTAuMS0xbDI5LjUgMTkuN2MyLjEgMS40IDQuOS0uMSA1LTIuNkwyNzkuNyA4Yy4xLTQuNSAzLjgtOCA4LjMtOHM4LjEgMy41IDguMyA4bDkuNCAyODEuOWMuMSAyLjUgMi45IDMuOSA1IDIuNmwyOS41LTE5LjdjMy4yLTIuMSA3LjQtMS43IDEwLjEgMXMzLjEgNi45IDEgMTAuMUwzMzAgMzE1LjdjLTEuMyAxLjktLjIgNC41IDIgNC45bDM3LjYgNy41YzMuNyAuNyA2LjQgNCA2LjQgNy44cy0yLjcgNy4xLTYuNCA3LjhMMzMyIDM1MS40Yy0yLjIgLjQtMy4zIDMtMiA0LjlsMjEuMiAzMS45YzIuMSAzLjIgMS43IDcuNC0xIDEwLjFzLTYuOSAzLjEtMTAuMSAxbC0yNi4zLTE3LjZjLTIuMi0xLjQtNS4xIC4yLTUgMi44bDIuMSA2MS41YzU5LjgtMTAuOCAxMDUuMS02My4xIDEwNS4xLTEyNiAwLTM3LTE1LjctNzAuNC00MC44LTkzLjctNy02LjUtNi41LTE4LjYgMS0yNC40IDM0LTI2LjMgNTUuOC02Ny41IDU1LjgtMTEzLjkgMC0xNi44LTIuOS0zMy04LjItNDgtNC42LTEzIDEwLjItMzAgMjEuNC0yMiA1My41IDM4IDkyLjcgOTQuOCAxMDcuOCAxNjAuNyAuNSAyLjEtLjIgNC4zLTEuNyA1LjlsLTI4LjQgMjguNGMtNCA0LTEuMiAxMC45IDQuNSAxMC45bDI2IDBjMy40IDAgNi4yIDIuNiA2LjMgNiAuMSAzLjMgLjIgNi42IC4yIDEwIDAgMTcuNS0xLjcgMzQuNy00LjggNTEuMy0uMiAxLjItLjkgMi40LTEuNyAzLjNsLTQ2LjUgNDYuNWMtNCA0LTEuMiAxMC45IDQuNSAxMC45bDE0LjYgMGM0LjYgMCA3LjcgNC44IDUuNyA5LTQ0LjUgODkuNS0xMzYuOSAxNTEtMjQzLjcgMTUxUzg4LjggNDUwLjUgNDQuMyAzNjFjLTIuMS00LjIgMS05IDUuNy05bDE0LjYgMGM1LjcgMCA4LjYtNi45IDQuNS0xMC45TDIyLjYgMjk0LjZjLS45LS45LTEuNS0yLTEuNy0zLjMtMy4yLTE2LjYtNC44LTMzLjgtNC44LTUxLjMgMC0zLjMgLjEtNi43IC4yLTEwIC4xLTMuNCAyLjktNiA2LjMtNmwyNiAwYzUuNyAwIDguNi02LjkgNC41LTEwLjlMMjQuNiAxODQuNmMtMS41LTEuNS0yLjItMy44LTEuNy01LjkgMTUuMi02NiA1NC4zLTEyMi44IDEwNy44LTE2MC43IDExLjMtOCAyNiA4LjkgMjEuNCAyMi01LjMgMTUtOC4yIDMxLjItOC4yIDQ4IDAgNDYuMyAyMS45IDg3LjUgNTUuOCAxMTMuOSA3LjUgNS44IDggMTcuOSAxIDI0LjQtMjUuMSAyMy40LTQwLjggNTYuNy00MC44IDkzLjcgMCA2Mi45IDQ1LjQgMTE1LjIgMTA1LjEgMTI2bDIuMS02MS41Yy4xLTIuNi0yLjgtNC4yLTUtMi44bC0yNi4zIDE3LjZjLTMuMiAyLjEtNy40IDEuNy0xMC4xLTFzLTMuMS02LjktMS0xMC4xTDI0NiAzNTYuM2MxLjMtMS45IC4yLTQuNS0yLTQuOWwtMzcuNi03LjVjLTMuNy0uNy02LjQtNC02LjQtNy44czIuNy03LjEgNi40LTcuOGwzNy42LTcuNWMyLjItLjQgMy4zLTMgMi00Ljl6Il0KICAgIH07CiAgICBmYVBlcnNvbkhpa2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24taGlraW5nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImhpa2luZyJdLCAiZjZlYyIsICJNMTkyLTMyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyek0xMjggMTczLjZjMC0zNCAyNy42LTYxLjYgNjEuNi02MS42IDIwLjMgMCAzOS43IDguMSA1NCAyMi40bDQ4LjIgNDguMmM2IDYgMTQuMSA5LjQgMjIuNiA5LjRsMzcuNSAwYzUuOCAwIDExLjMgMS42IDE2IDQuM2wwLTc2LjNjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwMGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTI2OC4zYy00LjcgMi43LTEwLjIgNC4zLTE2IDQuM2wtMzcuNSAwYy0yNS41IDAtNDkuOS0xMC4xLTY3LjktMjguMWwtNi42LTYuNiAwIDEwOS4yIDM0LjUgMjkuNmMxNy43IDE1LjIgMjkuMyAzNi4yIDMyLjYgNTkuM2wxMi42IDg4LjFjMi41IDE3LjUtOS43IDMzLjctMjcuMiAzNi4ycy0zMy43LTkuNy0zNi4yLTI3LjJsLTEyLjYtODguMWMtMS4xLTcuNy01LTE0LjctMTAuOS0xOS44bC03MS40LTYxLjJjLTIxLjMtMTguMi0zMy41LTQ0LjktMzMuNS03Mi45bDAtMTAxem0tNC44IDIwMy43YzIuMyAyLjMgNC43IDQuNCA3LjEgNi41bDQ0LjkgMzguNWMtMy42IDguNC04LjUgMTYuMy0xNC40IDIzLjRMODguNiA1MzIuNWMtMTEuMyAxMy42LTMxLjUgMTUuNC00NS4xIDQuMXMtMTUuNC0zMS41LTQuMS00NS4xbDcyLjMtODYuN2MyLjYtMy4xIDQuNS02LjYgNS44LTEwLjRsNS43LTE3LjF6TTAgMTYwYzAtMzUuMyAyOC43LTY0IDY0LTY0IDE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2eiJdCiAgICB9OwogICAgZmFIaWtpbmcgPSBmYVBlcnNvbkhpa2luZzsKICAgIGZhQXJyb3dzVXBUb0xpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXVwLXRvLWxpbmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTRjMiIsICJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NGwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMlM0MzMuNyAwIDQxNiAwTDMyIDB6bTg2LjYgMTM3LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw2NCAyMzcuMyA2NCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI0Mi43IDkuNCA5LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjR6bTI1NiAwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsOS40LTkuNCAwIDI0Mi43YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNDIuNyA5LjQgOS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0eiJdCiAgICB9OwogICAgZmFNYXJzRG91YmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnMtZG91YmxlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbOTg5MV0sICJmMjI3IiwgIk0yODggMzJjMC0xNy43IDE0LjMtMzIgMzItMzJMNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC01MC43LTk1IDk1YzE5LjUgMjguNCAzMSA2Mi43IDMxIDk5LjggMCA5Ny4yLTc4LjggMTc2LTE3NiAxNzZTMCA0MDEuMiAwIDMwNCA3OC44IDEyOCAxNzYgMTI4YzM3IDAgNzEuNCAxMS40IDk5LjggMzFsOTUtOTUtNTAuNyAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTc2IDQxNmExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6bTE2MCA2NGMtNi44IDAtMTMuNC0uNC0yMC0xLjEgMjMuNi0xOC45IDQzLjMtNDIuNSA1Ny42LTY5LjQgNDMuMy0xNS41IDc0LjQtNTYuOSA3NC40LTEwNS41IDAtMjUuMi04LjMtNDguNS0yMi40LTY3LjIgNy4xIDIuMSAxNC42IDMuMiAyMi40IDMuMiAxNyAwIDMyLjctNS4zIDQ1LjctMTQuMyAxMS43IDIzLjYgMTguMyA1MC4yIDE4LjMgNzguMyAwIDk3LjItNzguOCAxNzYtMTc2IDE3NnpNNTI4IDE1Ny4zTDUyOCAzMmMwLTExLjQtMi40LTIyLjItNi43LTMyTDYwOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNTAuNy00OCA0OHoiXQogICAgfTsKICAgIGZhVGhlcm1vbWV0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGhlcm1vbWV0ZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQ5MSIsICJNOTYgMzgyLjFsMC04OC44YzAtMTQuOSA1LjktMjkuMSAxNi40LTM5LjZsMjEuNy0yMS43IDQxIDQxYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNDEtNDEgNDYuMS00Ni4xIDQxIDQxYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNDEtNDEgNDYuMS00Ni4xIDQxIDQxYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNDEtNDEgNy44LTcuOGMxOS40LTE5LjQgNDUuNi0zMC4yIDczLTMwLjIgNTcgMCAxMDMuMiA0Ni4yIDEwMy4yIDEwMy4yIDAgMjcuNC0xMC45IDUzLjYtMzAuMiA3M0wyNTguMyAzOTkuNmMtMTAuNSAxMC41LTI0LjcgMTYuNC0zOS42IDE2LjRsLTg4LjggMC04OSA4OWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBTLTIuMyA0ODAuNCA3IDQ3MWw4OS04OXoiXQogICAgfTsKICAgIGZhUGFpbnRicnVzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYWludGJydXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4Mzk2LCAicGFpbnQtYnJ1c2giXSwgImYxZmMiLCAiTTQ4MC41IDEwLjNMMjU5LjEgMTU4Yy0yOS4xIDE5LjQtNDcuNiA1MC45LTUwLjYgODUuMyA2Mi4zIDEyLjggMTExLjQgNjEuOSAxMjQuMyAxMjQuMyAzNC41LTMgNjUuOS0yMS41IDg1LjMtNTAuNkw1NjUuNyA5NS41YzYuNy0xMC4xIDEwLjMtMjEuOSAxMC4zLTM0LjEgMC0zMy45LTI3LjUtNjEuNC02MS40LTYxLjQtMTIuMSAwLTI0IDMuNi0zNC4xIDEwLjN6TTI4OCA0MDBjMC02MS45LTUwLjEtMTEyLTExMi0xMTJTNjQgMzM4LjEgNjQgNDAwYzAgMy45IC4yIDcuOCAuNiAxMS42IDEuOCAxNy41LTEwLjIgMzYuNC0yNy44IDM2LjRMMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE0NCAwYzYxLjkgMCAxMTItNTAuMSAxMTItMTEyeiJdCiAgICB9OwogICAgZmFQYWludEJydXNoID0gZmFQYWludGJydXNoOwogICAgZmFOZXV0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibmV1dGVyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTkwNl0sICJmMjJjIiwgIk04MCAxNzZhMTEyIDExMiAwIDEgMSAyMjQgMCAxMTIgMTEyIDAgMSAxIC0yMjQgMHpNMjIzLjkgMzQ5LjFDMzA1LjkgMzM0LjEgMzY4IDI2Mi4zIDM2OCAxNzYgMzY4IDc4LjggMjg5LjIgMCAxOTIgMFMxNiA3OC44IDE2IDE3NmMwIDg2LjMgNjIuMSAxNTguMSAxNDQuMSAxNzMuMS0uMSAxLS4xIDEuOS0uMSAyLjlsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTEgMC0xLjktLjEtMi45eiJdCiAgICB9OwogICAgZmFTcXVhcmVQaG9uZUZsaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXBob25lLWZsaXAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsicGhvbmUtc3F1YXJlLWFsdCJdLCAiZjg3YiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptMjMyIDk2LjdsMi44IC44YzMyLjMgOC44IDU5LjkgNDAuMSA1MS44IDc4LjItMTguNSA4Ny41LTg3LjQgMTU2LjMtMTc0LjkgMTc0LjktMzguMSA4LjEtNjkuNC0xOS41LTc4LjItNTEuOGwtLjgtMi44Yy0yLjctOS44IDIuNC0yMC4xIDExLjgtMjRsNDguNy0yMC4zYzguMy0zLjQgMTcuOC0xLjEgMjMuNSA1LjlsMTkuMyAyMy42YzM1LjEtMTcuNCA2My40LTQ2LjYgNzkuNi04Mi40bC0yMi4xLTE4Yy02LjktNS43LTkuMy0xNS4yLTUuOS0yMy41bDIwLjMtNDguN2MzLjktOS40IDE0LjItMTQuNCAyNC0xMS44eiJdCiAgICB9OwogICAgZmFQaG9uZVNxdWFyZUFsdCA9IGZhU3F1YXJlUGhvbmVGbGlwOwogICAgZmFGYWNlR3JpblRvbmd1ZVNxdWludDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXRvbmd1ZS1zcXVpbnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDEsICJncmluLXRvbmd1ZS1zcXVpbnQiXSwgImY1OGEiLCAiTTAgMjU2YzAgMTA0LjQgNjIuNSAxOTQuMiAxNTIuMiAyMzQuMS01LjMtMTMtOC4yLTI3LjItOC4yLTQyLjFsMC02MS43Yy0xNi45LTE2LjUtMzAuMS0zNi43LTM4LjMtNTkuMy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjFjMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTguMyAyMi42LTIxLjUgNDIuOC0zOC4zIDU5LjNsMCA2MS43YzAgMTQuOS0yLjkgMjkuMS04LjIgNDIuMSA4OS43LTM5LjggMTUyLjItMTI5LjYgMTUyLjItMjM0LjEgMC0xNDEuNC0xMTQuNi0yNTYtMjU2LTI1NlMwIDExNC42IDAgMjU2em0xMjUuOC05MS43Yy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xczEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDE5MiAxMjUuOCAxNjQuM3ptMjYzLjYtMjEuMWM0LjUgNi44IDMuMSAxNS45LTMuMSAyMS4xTDM1MyAxOTIgMzg2LjIgMjE5LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjV6TTMyMCA0NDhsMC00NS40YzAtMTQuNy0xMS45LTI2LjYtMjYuNi0yNi42bC0yIDBjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjktMi44IDEyLjYtMjAuOCAxMi42LTIzLjYgMC0yLjUtMTEuMS0xMi4zLTE4LjktMjMuNi0xOC45bC0yIDBjLTE0LjcgMC0yNi42IDExLjktMjYuNiAyNi42bDAgNDUuNGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdCiAgICB9OwogICAgZmFHcmluVG9uZ3VlU3F1aW50MiA9IGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQyOwogICAgZmFDb21tZW50RG9sbGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbW1lbnQtZG9sbGFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2NTEiLCAiTTI1NiA0ODBjMTQxLjQgMCAyNTYtMTA3LjUgMjU2LTI0MFMzOTcuNCAwIDI1NiAwIDAgMTA3LjUgMCAyNDBjMCA1NC4zIDE5LjIgMTA0LjMgNTEuNiAxNDQuNUwyLjggNDc2LjhjLTQuOCA5LTMuMyAyMCAzLjYgMjcuNXMxNy44IDkuOCAyNy4xIDUuOGwxMTguNC01MC43QzE4My43IDQ3Mi42IDIxOC45IDQ4MCAyNTYgNDgwem00LTM1MmMxMSAwIDIwIDkgMjAgMjBsMCA0IDggMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjBsLTQ3LjUgMGMtNi45IDAtMTIuNSA1LjYtMTIuNSAxMi41IDAgNi4xIDQuNCAxMS4zIDEwLjQgMTIuM2w0MS43IDdjMjUuMyA0LjIgNDMuOSAyNi4xIDQzLjkgNTEuOCAwIDI2LjEtMTkgNDcuNy00NCA1MS44bDAgNC43YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTQtMjQgMGMtMTEgMC0yMC05LTIwLTIwczktMjAgMjAtMjBsNTUuNSAwYzYuOSAwIDEyLjUtNS42IDEyLjUtMTIuNSAwLTYuMS00LjQtMTEuMy0xMC40LTEyLjNsLTQxLjctN2MtMjUuMy00LjItNDMuOS0yNi4xLTQzLjktNTEuOCAwLTI4LjggMjMuMi01Mi4yIDUyLTUyLjVsMC00YzAtMTEgOS0yMCAyMC0yMHoiXQogICAgfTsKICAgIGZhSGlwcG8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGlwcG8iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjk0MzVdLCAiZjZlZCIsICJNNDA3IDQ3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDE3LjIgMTcuMmMxLjktLjEgMy45LS4yIDUuOC0uMmwzMiAwYzExLjIgMCAyMS45IDIuMyAzMS42IDYuNUw1NDMgNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDU2NCAxMDEuOWM3LjYgMTIuMiAxMiAyNi43IDEyIDQyLjEgMCAxMC4yIDcuNCAxOC44IDE2LjcgMjMgMjcuOSAxMi41IDQ3LjMgNDAuNSA0Ny4zIDczIDAgMjYuMi0xMi42IDQ5LjQtMzIgNjRsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2LTY0IDAgMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE3LjZjLTExLjgtMi40LTIyLjctNy40LTMyLTE0LjQtMS41LTEuMS0yLjktMi4zLTQuMy0zLjUtMTctMTQuNy0yNy43LTM2LjQtMjcuNy02MC41IDAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2YzAgNDQuNyAyNi4yIDgzLjIgNjQgMTAxLjJsMCAxMC44YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC03NmMtMTkuOCA3LjctNDEuNCAxMi02NCAxMnMtNDQuMi00LjMtNjQtMTJsMCA3NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMTguOS0xOC4xIDQwLjdjLTUuNCAxMi4xLTE5LjYgMTcuNi0zMS43IDEyLjJTLTMuMyAzNjIuNCAyLjEgMzUwLjNMMjQgMzAwLjljNS4zLTExLjkgOC0yNC43IDgtMzcuNyAwLTEwNy41IDg1LjItMTk1LjIgMTkxLjgtMTk5LjFsLjItLjEgNjQgMGM0MS43IDAgODMuNCAxMi4xIDExNy4yIDI1LjcgMS43LTEuOCAzLjUtMy42IDUuMy01LjJMNDA3IDgxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXptNzMgMTg1YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bTg4IDI0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHpNNDgwIDE0NGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem00OCAxNmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6Il0KICAgIH07CiAgICBmYUJvd2xGb29kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvd2wtZm9vZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGM2IiwgIk0wIDE3NmMwLTM1LjMgMjguNy02NCA2NC02NCAuNSAwIDEuMSAwIDEuNiAwIDcuNC0zNi41IDM5LjctNjQgNzguNC02NCAxNSAwIDI5IDQuMSA0MC45IDExLjIgMTMuMy0yNS43IDQwLjEtNDMuMiA3MS4xLTQzLjJzNTcuOCAxNy42IDcxLjEgNDMuMmMxMi03LjEgMjYtMTEuMiA0MC45LTExLjIgMzguNyAwIDcxIDI3LjUgNzguNCA2NCAuNSAwIDEuMSAwIDEuNiAwIDM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMTEuNy0zLjEgMjIuNi04LjYgMzJMOC42IDIwOEMzLjEgMTk4LjYgMCAxODcuNyAwIDE3NnpNMCAyODMuNEMwIDI2OC4zIDEyLjMgMjU2IDI3LjQgMjU2bDQ1Ny4xIDBjMTUuMSAwIDI3LjQgMTIuMyAyNy40IDI3LjQgMCA3MC41LTQ0LjQgMTMwLjctMTA2LjcgMTU0LjFMNDAzLjUgNDUyYy0yIDE2LTE1LjYgMjgtMzEuOCAyOGwtMjMxLjUgMGMtMTYuMSAwLTI5LjgtMTItMzEuOC0yOGwtMS44LTE0LjRDNDQuNCA0MTQuMSAwIDM1My45IDAgMjgzLjR6Il0KICAgIH07CiAgICBmYVNxdWFyZVZpcnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS12aXJ1cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNTc4IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem0xNjAgODBjMTMuMyAwIDI0IDEwLjcgMjQgMjQgMCAyMi45IDI3LjcgMzQuNCA0My45IDE4LjIgOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy0xNi4yIDE2LjItNC43IDQzLjkgMTguMiA0My45IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yMi45IDAtMzQuNCAyNy43LTE4LjIgNDMuOSA5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwYy0xNi4yLTE2LjItNDMuOS00LjctNDMuOSAxOC4yIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMjIuOS0yNy43LTM0LjQtNDMuOS0xOC4yLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjljMTYuMi0xNi4yIDQuNy00My45LTE4LjItNDMuOS0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzIyLjkgMCAzNC40LTI3LjcgMTguMi00My45LTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGMxNi4yIDE2LjIgNDMuOSA0LjcgNDMuOS0xOC4yIDAtMTMuMyAxMC43LTI0IDI0LTI0ek0xOTIgMjQ4YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODggNDBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhQ2xvdWRTdW5SYWluID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLXN1bi1yYWluIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI3NzgyXSwgImY3NDMiLCAiTTMwMy4yLTMuMmMtMS4xLTUuMi00LjYtOS41LTkuNS0xMS42cy0xMC41LTEuNS0xNC45IDEuNEwyMDggMzMuNiAxMzcuMy0xMy4zYy00LjQtMi45LTEwLTMuNS0xNC45LTEuNHMtOC41IDYuNC05LjUgMTEuNkw5NiA4MCAxMi44IDk2LjhjLTUuMiAxLjEtOS41IDQuNi0xMS42IDkuNXMtMS41IDEwLjUgMS40IDE0LjlMNDkuNiAxOTIgMi43IDI2Mi43Yy0yLjkgNC40LTMuNSAxMC0xLjQgMTQuOXM2LjQgOC41IDExLjYgOS41TDk2IDMwNCAxMTIuOCAzODcuMmMxLjEgNS4yIDQuNiA5LjUgOS41IDExLjZzMTAuNSAxLjUgMTQuOS0xLjRsNjcuMy00NC42Yy0xNS44LTE5LjQtMjYtNDMuNS0yOC4yLTY5LjktMzcuNS0xMy4xLTY0LjQtNDguNy02NC40LTkwLjcgMC01MyA0My05NiA5Ni05NiAyMS43IDAgNDEuOCA3LjIgNTcuOCAxOS40IDE1LjUtMTcuNiAzNi45LTMwIDYxLjEtMzRMMzIwIDgwIDMwMy4yLTMuMnpNMjQzIDE1OS4xYy04LjgtOS4zLTIxLjItMTUuMS0zNS0xNS4xLTI2LjUgMC00OCAyMS41LTQ4IDQ4IDAgMTcgOC45IDMyIDIyLjIgNDAuNSAxMC4yLTMxLjQgMzIuMS01Ny40IDYwLjctNzNsLjEtLjR6TTMwNCAzNTJsMTkyIDBjNDQuMiAwIDgwLTM1LjggODAtODAgMC0zMy45LTIxLjEtNjIuOS01MC45LTc0LjUgMS45LTYuOCAyLjktMTQgMi45LTIxLjUgMC00NC4yLTM1LjgtODAtODAtODAtMzAuOCAwLTU3LjUgMTcuNC03MC45IDQyLjgtOS4zLTYuOC0yMC43LTEwLjgtMzMuMS0xMC44LTMwLjkgMC01NiAyNS4xLTU2IDU2IDAgMy4yIC4zIDYuNCAuOCA5LjQtMzYuOSA3LjEtNjQuOCAzOS42LTY0LjggNzguNiAwIDQ0LjIgMzUuOCA4MCA4MCA4MHptLTE5IDQ5LjFjLTEyLjYtNC4yLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuNCA2NC4xYy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDIxLjQtNjQuMWM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjR6bTEyMCAwYy0xMi42LTQuMi0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjQgNjQuMWMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS40LTY0LjFjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40em0xMjAgMGMtMTIuNi00LjItMjYuMiAyLjYtMzAuNCAxNS4ybC0yMS40IDY0LjFjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuNC02NC4xYzQuMi0xMi42LTIuNi0yNi4yLTE1LjItMzAuNHoiXQogICAgfTsKICAgIGZhQXJyb3dSaWdodExvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcmlnaHQtbG9uZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJsb25nLWFycm93LXJpZ2h0Il0sICJmMTc4IiwgIk01NjYuNiAyNzguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMNDY2LjcgMjI0IDMyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw0MzQuNyAwLTczLjQgNzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4eiJdCiAgICB9OwogICAgZmFMb25nQXJyb3dSaWdodCA9IGZhQXJyb3dSaWdodExvbmc7CiAgICBmYUJ1aWxkaW5nVW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctdW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRkOSIsICJNMzIgNjRDMzIgMjguNyA2MC43IDAgOTYgMEwzNTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI3Mi0xMTIgMGMtMjAuOSAwLTM5LjUgMTAuMS01MS4yIDI1LjYtOC02LTE4LTkuNi0yOC44LTkuNi0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0IDY0IDAgMCA0OC0xNDQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMzIgNjR6TTE0NCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0xMTIgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTQ0IDIyNGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0xMTIgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNNDI3LjQgMzgwLjVjOS0yLjEgMTguMyAyLjIgMjIuNSAxMC41bDI2LjEgNTIuMiAwLTQzLjNjMC0xMSA5LTIwIDIwLTIwczIwIDkgMjAgMjBsMCAxMjhjMCA5LjMtNi40IDE3LjMtMTUuNCAxOS41cy0xOC4zLTIuMi0yMi41LTEwLjVMNDUyIDQ4NC43IDQ1MiA1MjhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtMTI4YzAtOS4zIDYuNC0xNy4zIDE1LjQtMTkuNXpNMzI0IDQwMGwwIDk2YzAgNi42IDUuNCAxMiAxMiAxMnMxMi01LjQgMTItMTJsMC05NmMwLTExIDktMjAgMjAtMjBzMjAgOSAyMCAyMGwwIDk2YzAgMjguNy0yMy4zIDUyLTUyIDUycy01Mi0yMy4zLTUyLTUybDAtOTZjMC0xMSA5LTIwIDIwLTIwczIwIDkgMjAgMjB6Il0KICAgIH07CiAgICBmYVRlbXBlcmF0dXJlTG93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLWxvdyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzZiIiwgIk05NiA5NmMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgMTY0LjdjMjkuNSAyNi40IDQ4IDY0LjcgNDggMTA3LjMgMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTNDggNDQ3LjUgNDggMzY4YzAtNDIuNiAxOC41LTgxIDQ4LTEwNy4zTDk2IDk2em05NiAzMzZjMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zbDAtMjguN2MwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDI4LjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NHpNNDY0IDgwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTM1MiA4MGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6Il0KICAgIH07CiAgICBmYURvb3JPcGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRvb3Itb3BlbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTJiIiwgIk0yODggNjRsNjQgMCAwIDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0bC05NiAwIDAgMC0xNjAgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQxNnpNMTYwIDI1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdCiAgICB9OwogICAgZmFBbGlnbkxlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYWxpZ24tbGVmdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDM2IiwgIk0yODggNjRjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NFMxNC4zIDMyIDMyIDMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyem0wIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiAzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTAgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQ0OCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyeiJdCiAgICB9OwogICAgZmFDYW1lcmEyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbWVyYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMjU4LCAiY2FtZXJhLWFsdCJdLCAiZjAzMCIsICJNMTQ5LjEgNjQuOEwxMzguNyA5NiA2NCA5NkMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTc0LjcgMC0xMC40LTMxLjJDMzU2LjQgNDUuMiAzMzguMSAzMiAzMTcuNCAzMkwxOTQuNiAzMmMtMjAuNyAwLTM5IDEzLjItNDUuNSAzMi44ek0yNTYgMTkyYTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyeiJdCiAgICB9OwogICAgZmFDYW1lcmFBbHQyID0gZmFDYW1lcmEyOwogICAgZmFVc2Vyc1JheXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlcnMtcmF5cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTkzIiwgIk0zMS0zM0MyMS43LTIzLjYgMjEuNy04LjQgMzEgMUw4NyA1N2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNjUtMzNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwek02MDktMzNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDUxOSAyM2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwTDYwOSAxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45ek02NSA1NDVsNTYtNTZjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEwzMSA1MTFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMHptNTQ0IDBjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlsLTU2LTU2Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDU2IDU2YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwek0zMjAgMjA4YTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4em0wIDMyYy02MS45IDAtMTEyIDUwLjEtMTEyIDExMmwwIDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC04YzAtNjEuOS01MC4xLTExMi0xMTItMTEyem0yMTYtODBhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwek00NTEuMiAyNjAuNEM0NjkuNCAyODYuMyA0ODAgMzE3LjkgNDgwIDM1MmwwIDhjMCA4LjQtMS40IDE2LjUtNC4xIDI0bDc4LjggMGMxMS44IDAgMjEuMy05LjYgMjEuMy0yMS4zbDAtMTAuN2MwLTUzLTQzLTk2LTk2LTk2LTEwIDAtMTkuNyAxLjUtMjguOCA0LjR6bS0yNjIuNCAwYy05LjEtMi45LTE4LjgtNC40LTI4LjgtNC40LTUzIDAtOTYgNDMtOTYgOTZsMCAxMC43YzAgMTEuOCA5LjYgMjEuMyAyMS4zIDIxLjNsNzguOCAwYy0yLjctNy41LTQuMS0xNS42LTQuMS0yNGwwLThjMC0zNC4xIDEwLjYtNjUuNyAyOC44LTkxLjZ6TTIxNiAxNjBhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAweiJdCiAgICB9OwogICAgZmFSYWluYm93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJhaW5ib3ciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjc3NTJdLCAiZjc1YiIsICJNMzIwIDk2QzE3OC42IDk2IDY0IDIxMC42IDY0IDM1MmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDMzLjcgMCA0MTZsMC02NEMwIDE3NS4zIDE0My4zIDMyIDMyMCAzMlM2NDAgMTc1LjMgNjQwIDM1MmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRDNTc2IDIxMC42IDQ2MS40IDk2IDMyMCA5NnptMCAxMTJjLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0bDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTExNC45IDkzLjEtMjA4IDIwOC0yMDhzMjA4IDkzLjEgMjA4IDIwOGwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC03OS41LTY0LjUtMTQ0LTE0NC0xNDR6TTI4OCAzNTJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyeiJdCiAgICB9OwogICAgZmFTaXRlbWFwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNpdGVtYXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBlOCIsICJNMTkyIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOCAwIDAgNjQgMTIwIDBjMzkuOCAwIDcyIDMyLjIgNzIgNzJsMCA1NiA4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw4IDAgMC01NmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMTIwIDAgMCA4MCA4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw4IDAgMC04MC0xMjAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA1NiA4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw4IDAgMC01NmMwLTM5LjggMzIuMi03MiA3Mi03MmwxMjAgMCAwLTY0LTggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5TdGFyczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXN0YXJzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzIxLCAiZ3Jpbi1zdGFycyJdLCAiZjU4NyIsICJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2IDAtMjQuNC0zLjQtNDguMS05LjgtNzAuNSAxOC42LTM2LjEtMi43LTgzLjYtNDYuNy05MC00Ni45LTU4LjMtMTE4LjktOTUuNS0xOTkuNS05NS41UzEwMy40IDM3LjMgNTYuNSA5NS41Yy00NCA2LjQtNjUuMyA1My45LTQ2LjcgOTAtNi40IDIyLjQtOS44IDQ2LTkuOCA3MC41IDAgMTQxLjQgMTE0LjYgMjU2IDI1NiAyNTZ6TTM4Ni43IDMyNC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSA0MDQuMiAxMDUuNyAzNDIuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xem0tMzEuNi0yMzFjNS4zLTEwLjcgMjAuNS0xMC43IDI1LjggMGwyMC45IDQyLjQgNDYuNyA2LjhjMTEuOCAxLjcgMTYuNSAxNi4yIDggMjQuNWwtMzMuOCAzMyA4IDQ2LjZjMiAxMS43LTEwLjMgMjAuNy0yMC45IDE1LjJsLTQxLjgtMjItNDEuOCAyMmMtMTAuNSA1LjUtMjIuOS0zLjQtMjAuOS0xNS4ybDgtNDYuNi0zMy44LTMzYy04LjUtOC4zLTMuOC0yMi44IDgtMjQuNWw0Ni43LTYuOCAyMC45LTQyLjR6bS0xOTguMiAwbDIwLjkgNDIuNCA0Ni43IDYuOGMxMS44IDEuNyAxNi41IDE2LjIgOCAyNC41bC0zMy44IDMzIDggNDYuNmMyIDExLjctMTAuMyAyMC43LTIwLjkgMTUuMmwtNDEuOC0yMi00MS44IDIyYy0xMC41IDUuNS0yMi45LTMuNC0yMC45LTE1LjJsOC00Ni42LTMzLjgtMzNjLTguNS04LjMtMy44LTIyLjggOC0yNC41bDQ2LjctNi44IDIwLjktNDIuNGM1LjMtMTAuNyAyMC41LTEwLjcgMjUuOCAweiJdCiAgICB9OwogICAgZmFHcmluU3RhcnMyID0gZmFGYWNlR3JpblN0YXJzMjsKICAgIGZhU29ydFVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNvcnQtdXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsic29ydC1hc2MiXSwgImYwZGUiLCAiTTMyIDIyNGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOFMuMiAxNzguNSA5LjQgMTY5LjRsMTYwLTE2MGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxNjAgMTYwYzkuMiA5LjIgMTEuOSAyMi45IDYuOSAzNC45UzM2NC45IDIyNCAzNTIgMjI0TDMyIDIyNHoiXQogICAgfTsKICAgIGZhU29ydEFzYyA9IGZhU29ydFVwOwogICAgZmFFeWUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImV5ZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODA2NV0sICJmMDZlIiwgIk0yODggMzJjLTgwLjggMC0xNDUuNSAzNi44LTE5Mi42IDgwLjYtNDYuOCA0My41LTc4LjEgOTUuNC05MyAxMzEuMS0zLjMgNy45LTMuMyAxNi43IDAgMjQuNiAxNC45IDM1LjcgNDYuMiA4Ny43IDkzIDEzMS4xIDQ3LjEgNDMuNyAxMTEuOCA4MC42IDE5Mi42IDgwLjZzMTQ1LjUtMzYuOCAxOTIuNi04MC42YzQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjEgMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjYtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMS00Ny4xLTQzLjctMTExLjgtODAuNi0xOTIuNi04MC42ek0xNDQgMjU2YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE0NC02NGMwIDM1LjMtMjguNyA2NC02NCA2NC0xMS41IDAtMjIuMy0zLTMxLjctOC40LTEgMTAuOS0uMSAyMi4xIDIuOSAzMy4yIDEzLjcgNTEuMiA2Ni40IDgxLjYgMTE3LjYgNjcuOXM4MS42LTY2LjQgNjcuOS0xMTcuNmMtMTIuMi00NS43LTU1LjUtNzQuOC0xMDEuMS03MC44IDUuMyA5LjMgOC40IDIwLjEgOC40IDMxLjd6Il0KICAgIH07CiAgICBmYUNhcmV0TGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXJldC1sZWZ0IiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbXSwgImYwZDkiLCAiTTcuNyAyMzUuOGMtMTAuMyAxMi42LTkuNSAzMS4xIDIuMiA0Mi44bDEyOCAxMjhjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlzMTkuOC0xNi42IDE5LjgtMjkuNmwwLTI1NmMwLTEyLjktNy44LTI0LjYtMTkuOC0yOS42cy0yNS43LTIuMi0zNC45IDYuOWwtMTI4IDEyOC0yLjIgMi40eiJdCiAgICB9OwogICAgZmFBcHBsZVdob2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFwcGxlLXdob2xlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3ODIyLCAxMjc4MjMsICJhcHBsZS1hbHQiXSwgImY1ZDEiLCAiTTIyNCAxMTJjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwbDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA0NC4yLTM1LjggODAtODAgODBsLTE2IDB6TTAgMjg4YzAtNzYuMyAzNS43LTE2MCAxMTItMTYwIDI3LjMgMCA1OS43IDEwLjMgODIuNyAxOS4zIDE4LjggNy4zIDM5LjkgNy4zIDU4LjcgMCAyMi45LTguOSA1NS40LTE5LjMgODIuNy0xOS4zIDc2LjMgMCAxMTIgODMuNyAxMTIgMTYwIDAgMTI4LTgwIDIyNC0xNjAgMjI0LTE2LjUgMC0zOC4xLTYuNi01MS41LTExLjMtOC4xLTIuOC0xNi45LTIuOC0yNSAwLTEzLjQgNC43LTM1IDExLjMtNTEuNSAxMS4zLTgwIDAtMTYwLTk2LTE2MC0yMjR6Il0KICAgIH07CiAgICBmYUFwcGxlQWx0ID0gZmFBcHBsZVdob2xlOwogICAgZmFTY3JvbGxUb3JhaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY3JvbGwtdG9yYWgiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsidG9yYWgiXSwgImY2YTAiLCAiTTAgNDhDMCAyMS41IDIxLjUgMCA0OCAwIDY4LjkgMCA4Ni43IDEzLjQgOTMuMyAzMmwzODkuNSAwYzYuNi0xOC42IDI0LjQtMzIgNDUuMy0zMiAyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQxNmMwIDI2LjUtMjEuNSA0OC00OCA0OC0yMC45IDAtMzguNy0xMy40LTQ1LjMtMzJMOTMuMyA0ODBjLTYuNiAxOC42LTI0LjQgMzItNDUuMyAzMi0yNi41IDAtNDgtMjEuNS00OC00OEwwIDQ4ek0xNzcuOSAzMDFjLTEuMiAyLTEuOSA0LjItMS45IDYuNiAwIDYuOSA1LjYgMTIuNSAxMi41IDEyLjVsNTYuOSAwIDMwLjUgNDkuMmMyLjYgNC4yIDcuMiA2LjggMTIuMiA2LjhzOS42LTIuNiAxMi4yLTYuOGwzMC41LTQ5LjIgNTYuOSAwYzYuOSAwIDEyLjUtNS42IDEyLjUtMTIuNSAwLTIuMy0uNi00LjYtMS45LTYuNmwtMjcuOC00NSAyNy44LTQ1YzEuMi0yIDEuOS00LjIgMS45LTYuNiAwLTYuOS01LjYtMTIuNS0xMi41LTEyLjVsLTU2LjkgMC0zMC41LTQ5LjJjLTIuNi00LjItNy4yLTYuOC0xMi4yLTYuOHMtOS42IDIuNi0xMi4yIDYuOGwtMzAuNSA0OS4yLTU2LjkgMGMtNi45IDAtMTIuNSA1LjYtMTIuNSAxMi41IDAgMi4zIC42IDQuNiAxLjkgNi42bDI3LjggNDUtMjcuOCA0NXoiXQogICAgfTsKICAgIGZhVG9yYWggPSBmYVNjcm9sbFRvcmFoOwogICAgZmFIb3VzZUxvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtbG9jayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTEwIiwgIk01MjggMjI0LjFjNDQuMiAwIDgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwek0yNjguNiA2LjVjMTIuMi05LjMgMjkuNy04LjcgNDEuMiAybDE4NSAxNzEuOEM0NDAuMiAxOTUgNDAwIDI0NC44IDQwMCAzMDRsMCAyNC40Yy0xOS42IDE3LjYtMzIgNDMuMS0zMiA3MS41bDAgOTZjMCA1LjUgLjUgMTAuOSAxLjMgMTYuMUwxNDQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDggMi40LTJ6TTI3MiAzMjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTYgOTYgMCAwLTg3LjNjMC0xNi41IDctMzEuNSAxOC40LTQyLjEtOC43LTktMjAuOS0xNC42LTM0LjQtMTQuNmwtMzIgMHptMjU2LTQ3LjljLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOWMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhQXJyb3dzTGVmdFJpZ2h0VG9MaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy1sZWZ0LXJpZ2h0LXRvLWxpbmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRiYSIsICJNMzIgOTZDMTQuMyA5NiAwIDExMC4zIDAgMTI4TDAgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNTZjMC0xNy43LTE0LjMtMzItMzItMzJ6TTM5MC42IDM0Mi42bDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC02NC02NGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOS40IDkuNC0xMzMuNSAwIDkuNC05LjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy02IDYtOS40IDE0LjEtOS40IDIyLjZzMy40IDE2LjYgOS40IDIyLjZsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOS40LTkuNCAxMzMuNSAwLTkuNCA5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDB6TTU3NiAxMjhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI1NnoiXQogICAgfTsKICAgIGZhVHJhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhc2giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFmOCIsICJNMTM2LjcgNS45TDEyOCAzMiAzMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDAtOC43LTI2LjFDMzA2LjktNy4yIDI5NC43LTE2IDI4MC45LTE2TDE2Ny4xLTE2Yy0xMy44IDAtMjYgOC44LTMwLjQgMjEuOXpNNDE2IDE0NEwzMiAxNDQgNTMuMSA0NjcuMUM1NC43IDQ5Mi40IDc1LjcgNTEyIDEwMSA1MTJMMzQ3IDUxMmMyNS4zIDAgNDYuMy0xOS42IDQ3LjktNDQuOUw0MTYgMTQ0eiJdCiAgICB9OwogICAgZmFGYWNlU2FkVGVhcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zYWQtdGVhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU0NiwgInNhZC10ZWFyIl0sICJmNWI0IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNzEgOThjNS41LTEuMyAxMS4xLTIgMTctMiAyNC4xIDAgNDUuNCAxMS44IDU4LjUgMzAgNy43IDEwLjggMjIuNyAxMy4yIDMzLjUgNS41czEzLjItMjIuNyA1LjUtMzMuNWMtMjEuNy0zMC4yLTU3LjMtNTAtOTcuNS01MC0xMi41IDAtMjQuNiAxLjktMzUuOSA1LjUgOS44IDEyLjcgMTYuNSAyNy45IDE4LjkgNDQuNnpNMTc2IDI0MGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTE5Mi0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0xODUuNCAyOTIuOGMtMi40LTIuOS01LjctNC44LTkuNC00LjhzLTcgMS45LTkuNCA0LjhjLTYuNSA3LjgtMTIuNiAxNi4xLTE4LjMgMjQuNi05IDEzLjQtMjAuMyAzMC4yLTIwLjMgNDcuNCAwIDI4LjMgMjEuNSA1MS4yIDQ4IDUxLjJzNDgtMjIuOSA0OC01MS4yYzAtMTcuMi0xMS4yLTM0LTIwLjMtNDcuNC01LjctOC41LTExLjktMTYuNy0xOC4zLTI0LjZ6Il0KICAgIH07CiAgICBmYVNhZFRlYXIyID0gZmFGYWNlU2FkVGVhcjI7CiAgICBmYUZheCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYXgiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMjQsIDEyODQzOV0sICJmMWFjIiwgIk0xNjAgNjRsMCA4MCA2NCAwIDAtODAgMTQ2LjcgMCA0NS4zIDQ1LjMgMCAzNC43IDY0IDAgMC0zNC43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDQxNiAxOC43QzQwNCA2LjcgMzg3LjcgMCAzNzAuNyAwTDIyNCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NHpNMzIgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMkwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjg4YzAtMTcuNy0xNC4zLTMyLTMyLTMybC00OCAwem00NDggNjRsLTMyMCAwIDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyek0yMjQgMjg4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTAgOTZhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNMzM2IDI2NGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTMxMiAzODRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNNDI0IDI2NGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTQwMCAzODRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhUGVyc29uQ2lyY2xlUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tY2lyY2xlLXBsdXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU0MSIsICJNMjgwIDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdMMzQxIDI4Ni42YzEyLjgtMTcuNSAyOC41LTMyLjcgNDYuMy00NWwtNTYuMi03NS43QzMwNiAxMzIgMjY2LjMgMTEyIDIyNCAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxNDQgMjM2LjcgMTQ0IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMTYtMjA4bDAgNDggNDggMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNDggMCAwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNDgtNDggMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw0OCAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnoiXQogICAgfTsKICAgIGZhSGFtc2EgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFtc2EiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjY2NSIsICJNMzQuNiAyODhMODAgMjg4YzguOCAwIDE2LTcuMiAxNi0xNkw5NiA3MmMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMTMyYzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtMTY0YzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAxNjRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC0xMzJjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MGwwIDIwMGMwIDguOCA3LjIgMTYgMTYgMTZsNDUuNCAwYzE5LjEgMCAzNC42IDE1LjUgMzQuNiAzNC42IDAgOC42LTMuMiAxNi45LTkgMjMuM0w0MTYuNiA0NDFjLTQxLjEgNDUuMi05OS40IDcxLTE2MC42IDcxUzEzNi42IDQ4Ni4yIDk1LjQgNDQxTDkgMzQ1LjljLTUuOC02LjQtOS0xNC43LTktMjMuMyAwLTE5LjEgMTUuNS0zNC42IDM0LjYtMzQuNnpNMjU2IDI4OGMtMzguNCAwLTc2LjggMzUuOC05MC42IDUwLjItMy42IDMuNy01LjQgOC43LTUuNCAxMy44czEuOCAxMC4xIDUuNCAxMy44QzE3OS4yIDM4MC4yIDIxNy42IDQxNiAyNTYgNDE2czc2LjgtMzUuOCA5MC42LTUwLjJjMy42LTMuNyA1LjQtOC43IDUuNC0xMy44cy0xLjgtMTAuMS01LjQtMTMuOEMzMzIuOCAzMjMuOCAyOTQuNCAyODggMjU2IDI4OHptMCAzMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVBlcnNvbkNpcmNsZVF1ZXN0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jaXJjbGUtcXVlc3Rpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU0MiIsICJNMjgwIDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdMMzQxIDI4Ni42YzEyLjgtMTcuNSAyOC41LTMyLjcgNDYuMy00NWwtNTYuMi03NS43QzMwNiAxMzIgMjY2LjMgMTEyIDIyNCAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxNDQgMjM2LjcgMTQ0IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC0xMDBhMjAgMjAgMCAxIDEgMCA0MCAyMCAyMCAwIDEgMSAwLTQwem0wLTEwMGMtMTEuNiAwLTIxLjMgOC4yLTIzLjUgMTkuMi0xLjggOC43LTEwLjIgMTQuMy0xOC45IDEyLjVzLTE0LjMtMTAuMi0xMi41LTE4LjljNS4yLTI1LjYgMjcuOC00NC44IDU0LjktNDQuOCAzMC45IDAgNTYgMjUuMSA1NiA1NiAwIDE5LjgtMTEuNyAzNy44LTI5LjggNDUuOWwtMTAuNCA0LjZjLTEuMiA3LjctNy44IDEzLjUtMTUuOCAxMy41LTguOCAwLTE2LTcuMi0xNi0xNiAwLTExLjIgNi42LTIxLjMgMTYuOC0yNS45bDEyLjQtNS41YzYuNi0yLjkgMTAuOC05LjQgMTAuOC0xNi42IDAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFDbGlwYm9hcmRDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQtY2hlY2siLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjQ2YyIsICJNMjU2IDBjMjMuNyAwIDQ0LjQgMTIuOSA1NS40IDMybDguNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzUyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmw4LjYgMEM4My42IDEyLjkgMTA0LjMgMCAxMjggMEwyNTYgMHptMjYuOSAyMTIuNmMtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNsLTg1LjYgMTE3LjctMjYuNS0yNy40Yy05LjItOS41LTI0LjQtOS44LTMzLjktLjZzLTkuOCAyNC40LS42IDMzLjlsNDYuNCA0OGM0LjkgNS4xIDExLjggNy44IDE4LjkgNy4zczEzLjYtNC4xIDE3LjgtOS44TDI4OC4yIDI0Ni4xYzcuOC0xMC43IDUuNC0yNS43LTUuMy0zMy41ek0xMzYgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMTM2IDY0eiJdCiAgICB9OwogICAgZmFTaGFyZUZyb21TcXVhcmUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoYXJlLWZyb20tc3F1YXJlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjE1MDksICJzaGFyZS1zcXVhcmUiXSwgImYxNGQiLCAiTTM4NC41IDI0bDAgNzItNjQgMGMtNzkuNSAwLTE0NCA2NC41LTE0NCAxNDQgMCA5My40IDgyLjggMTM0LjggMTAwLjYgMTQyLjYgMi4yIDEgNC42IDEuNCA3LjEgMS40bDIuNSAwYzkuOCAwIDE3LjgtOCAxNy44LTE3LjggMC04LjMtNS45LTE1LjUtMTIuOC0yMC4zLTguOS02LjItMTkuMi0xOC4yLTE5LjItNDAuNSAwLTQ1IDM2LjUtODEuNSA4MS41LTgxLjVsMzAuNSAwIDAgNzJjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yczE5LjMgMS43IDI2LjItNS4ybDEzNi0xMzZjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlMNDI1LjUgN2MtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMzODQuNSAxNC4zIDM4NC41IDI0em0tMjcyIDcyYy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDI1NmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGwyNTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0yNTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNiAweiJdCiAgICB9OwogICAgZmFTaGFyZVNxdWFyZTIgPSBmYVNoYXJlRnJvbVNxdWFyZTI7CiAgICBmYVJlY2VpcHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVjZWlwdCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyOTUzNF0sICJmNTQzIiwgIk0xNCAyLjJDMjIuNS0xLjcgMzIuNS0uMyAzOS42IDUuOEw4MCA0MC40IDEyMC40IDUuOGM5LTcuNyAyMi4zLTcuNyAzMS4yIDBMMTkyIDQwLjQgMjMyLjQgNS44YzktNy43IDIyLjItNy43IDMxLjIgMEwzMDQgNDAuNCAzNDQuNCA1LjhjNy4xLTYuMSAxNy4xLTcuNSAyNS42LTMuNlMzODQgMTQuNiAzODQgMjRsMCA0NjRjMCA5LjQtNS41IDE3LjktMTQgMjEuOHMtMTguNSAyLjUtMjUuNi0zLjZsLTQwLjQtMzQuNi00MC40IDM0LjZjLTkgNy43LTIyLjIgNy43LTMxLjIgMGwtNDAuNC0zNC42LTQwLjQgMzQuNmMtOSA3LjctMjIuMyA3LjctMzEuMiAwTDgwIDQ3MS42IDM5LjYgNTA2LjJjLTcuMSA2LjEtMTcuMSA3LjUtMjUuNiAzLjZTMCA0OTcuNCAwIDQ4OEwwIDI0QzAgMTQuNiA1LjUgNi4xIDE0IDIuMnpNMTA0IDEzNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTc2IDB6TTgwIDM1MmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTc2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em0yNC0xMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE3NiAweiJdCiAgICB9OwogICAgZmFFcXVhbHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXF1YWxzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjI3NjRdLCAiM2QiLCAiTTMyIDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAxMjh6bTAgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyMHoiXQogICAgfTsKICAgIGZhQ2hldnJvblVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXZyb24tdXAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjA3NyIsICJNMjAxLjQgMTA1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTkyIDE5MmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwyMjQgMTczLjMgNTQuNiAzNDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTkyLTE5MnoiXQogICAgfTsKICAgIGZhVmlydXNTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aXJ1cy1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMDc1IiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC04OC42LTg4LjZjMS43LTEyLjEtMi0yNC44LTExLjMtMzQtMzEuMi0zMS4yLTkuMS04NC41IDM1LTg0LjUgMjIuMSAwIDQwLTE3LjkgNDAtNDBzLTE3LjktNDAtNDAtNDBjLTQ0LjEgMC02Ni4xLTUzLjMtMzUtODQuNSAxNS42LTE1LjYgMTUuNi00MC45IDAtNTYuNnMtNDAuOS0xNS42LTU2LjYgMGMtMzEuMiAzMS4yLTg0LjUgOS4xLTg0LjUtMzUgMC0yMi4xLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBjMCA0NC4xLTUzLjMgNjYuMS04NC41IDM1LTkuMy05LjMtMjItMTMtMzQtMTEuM0w0MS0yNC45ek03MiAyMTZjLTIyLjEgMC00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDBjNDQuMSAwIDY2LjEgNTMuMyAzNSA4NC41LTE1LjYgMTUuNi0xNS42IDQwLjkgMCA1Ni42czQwLjkgMTUuNiA1Ni42IDBjMzEuMi0zMS4yIDg0LjUtOS4xIDg0LjUgMzUgMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MGMwLTIxLjQgMTIuNi0zNy42IDI5LjEtNDUuMWwtMjQwLTI0MEMxMDkuNiAyMDMuNCA5My40IDIxNiA3MiAyMTZ6Il0KICAgIH07CiAgICBmYVNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3MTUiLCAiTTctMjVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBMNTY5IDUwM2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDcgOUMtMi4zLS40LTIuMy0xNS42IDctMjV6Il0KICAgIH07CiAgICBmYUV4cGFuZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJleHBhbmQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjA2NSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NCA2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyek02NCAzNTJjMC0xNy43LTE0LjMtMzItMzItMzJTMCAzMzQuMyAwIDM1MmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC02NHpNMzIwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDAgMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTk2IDB6TTQ0OCAzNTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA2NC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NnoiXQogICAgfTsKICAgIGZhTm90ZVN0aWNreTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibm90ZS1zdGlja3kiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2MjAyNiwgInN0aWNreS1ub3RlIl0sICJmMjQ5IiwgIk02NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyMTMuNWMwIDE3LTYuNyAzMy4zLTE4LjcgNDUuM0wzMjIuNyA0NjEuM2MtMTIgMTItMjguMyAxOC43LTQ1LjMgMTguN0w2NCA0ODB6TTM4OS41IDMwNEwyOTYgMzA0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDkzLjUgMTE3LjUtMTE3LjV6Il0KICAgIH07CiAgICBmYVN0aWNreU5vdGUyID0gZmFOb3RlU3RpY2t5MjsKICAgIGZhVGFibGVDb2x1bW5zID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlLWNvbHVtbnMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY29sdW1ucyJdLCAiZjBkYiIsICJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTY0IDY0bDAgMjU2IDEyOCAwIDAtMjU2LTEyOCAwem0zMjAgMGwtMTI4IDAgMCAyNTYgMTI4IDAgMC0yNTZ6Il0KICAgIH07CiAgICBmYUNvbHVtbnMgPSBmYVRhYmxlQ29sdW1uczsKICAgIGZhUGVyc29uU2hlbHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tc2hlbHRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTRmIiwgIk0yNzEuOSA0LjJjLTkuOC01LjYtMjEuOS01LjYtMzEuOCAwbC0yMjQgMTI4QzYuMiAxMzcuOSAwIDE0OC41IDAgMTYwTDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJMNjQgMTc4LjYgMjU2IDY4LjkgNDQ4IDE3OC42IDQ0OCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyMGMwLTExLjUtNi4yLTIyLjEtMTYuMS0yNy44bC0yMjQtMTI4ek0yNTYgMjA4YTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHptLTggMTkybDE2IDAgMCA4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTc0LjUgMjYuOSA0OS45YzYuMyAxMS43IDIwLjggMTYgMzIuNSA5LjhzMTYtMjAuOCA5LjgtMzIuNWwtMzMuMi02MS43QzMyOS43IDI0NS4xIDI5NC40IDIyNCAyNTYgMjI0cy03My43IDIxLjEtOTEuOSA1NC45bC0zMy4yIDYxLjdjLTYuMyAxMS43LTEuOSAyNi4yIDkuOCAzMi41czI2LjIgMS45IDMyLjUtOS44TDIwMCAzMTMuNSAyMDAgNDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04OHoiXQogICAgfTsKICAgIGZhQ2lyY2xlTm90Y2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLW5vdGNoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxY2UiLCAiTTIyMi43IDMyLjFjNSAxNi45LTQuNiAzNC44LTIxLjUgMzkuOC03OS4zIDIzLjYtMTM3LjEgOTcuMS0xMzcuMSAxODQuMSAwIDEwNiA4NiAxOTIgMTkyIDE5MnMxOTItODYgMTkyLTE5MmMwLTg2LjktNTcuOC0xNjAuNC0xMzcuMS0xODQuMS0xNi45LTUtMjYuNi0yMi45LTIxLjUtMzkuOHMyMi45LTI2LjYgMzkuOC0yMS41QzQzNC45IDQyLjEgNTEyIDE0MCA1MTIgMjU2IDUxMiAzOTcuNCAzOTcuNCA1MTIgMjU2IDUxMlMwIDM5Ny40IDAgMjU2YzAtMTE2IDc3LjEtMjEzLjkgMTgyLjktMjQ1LjQgMTYuOS01IDM0LjggNC42IDM5LjggMjEuNXoiXQogICAgfTsKICAgIGZhV2F0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2F0ZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjc3MyIsICJNNDEwLjYgMTI0LjFjMjAuNyAxNS42IDQ2IDMwLjcgNzQuMiAzNC41IDEzLjEgMS44IDI1LjItNy41IDI3LTIwLjZzLTcuNS0yNS4yLTIwLjYtMjdjLTE1LjktMi4xLTMzLjItMTEuMy01MS43LTI1LjItMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMTguNSAxMy45LTM1LjggMjMuMS01MS43IDI1LjItMTMuMSAxLjgtMjIuNCAxMy44LTIwLjYgMjdzMTMuOCAyMi40IDI3IDIwLjZjMjguMi0zLjggNTMuNi0xOC45IDc0LjItMzQuNSAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwem0wIDE0NGMyMC43IDE1LjYgNDYgMzAuNyA3NC4yIDM0LjUgMTMuMSAxLjggMjUuMi03LjUgMjctMjAuNnMtNy41LTI1LjItMjAuNi0yN2MtMTUuOS0yLjEtMzMuMi0xMS4zLTUxLjctMjUuMi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0xOC41IDEzLjktMzUuOCAyMy4xLTUxLjcgMjUuMi0xMy4xIDEuNy0yMi40IDEzLjgtMjAuNiAyN3MxMy44IDIyLjQgMjcgMjAuNmMyOC4yLTMuOCA1My42LTE4LjkgNzQuMi0zNC41IDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1LjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDB6bS03MS4yIDE0NGMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyMC43IDE1LjYgNDYgMzAuNyA3NC4yIDM0LjUgMTMuMSAxLjggMjUuMi03LjUgMjctMjAuNnMtNy41LTI1LjItMjAuNi0yN2MtMTUuOS0yLjEtMzMuMi0xMS4zLTUxLjctMjUuMi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0xOC41IDEzLjktMzUuOCAyMy4xLTUxLjcgMjUuMi0xMy4xIDEuOC0yMi40IDEzLjgtMjAuNiAyN3MxMy44IDIyLjQgMjcgMjAuNmMyOC4yLTMuOCA1My42LTE4LjkgNzQuMi0zNC41IDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1Ljl6Il0KICAgIH07CiAgICBmYURlbGV0ZUxlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGVsZXRlLWxlZnQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFs5MDAzLCAiYmFja3NwYWNlIl0sICJmNTVhIiwgIk01NzYgMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDIwNS4zIDY0Yy0xNyAwLTMzLjMgNi43LTQ1LjMgMTguN0w5LjQgMjMzLjRjLTYgNi05LjQgMTQuMS05LjQgMjIuNnMzLjQgMTYuNiA5LjQgMjIuNkwxNjAgNDI5LjNjMTIgMTIgMjguMyAxOC43IDQ1LjMgMTguN0w1MTIgNDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2ek0yODQuMSAxODguMWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwzMy45IDMzLjkgMzMuOS0zMy45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtMzMuOSAzMy45IDMzLjkgMzMuOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC0zMy45LTMzLjktMzMuOSAzMy45Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMzLjktMzMuOS0zMy45LTMzLjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45eiJdCiAgICB9OwogICAgZmFCYWNrc3BhY2UgPSBmYURlbGV0ZUxlZnQ7CiAgICBmYUJyb29tQmFsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicm9vbS1iYWxsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInF1aWRkaXRjaCIsICJxdWlkZGl0Y2gtYnJvb20tYmFsbCJdLCAiZjQ1OCIsICJNNDk2IDU0NGE4MCA4MCAwIDEgMSAwLTE2MCA4MCA4MCAwIDEgMSAwIDE2MHpNMTA2LjggMjc3LjJjMzAuNi0zMC42IDczLjEtNDUuOSAxMTUuOC00Mi4yTDM0MSAzNTMuM2MzLjcgNDIuOC0xMS42IDg1LjItNDIuMiAxMTUuOS0yNy40IDI3LjQtNjQuNiA0Mi44LTEwMy4zIDQyLjhMMjIuMSA1MTJjLTEyLjIgMC0yMi4xLTkuOS0yMi4xLTIyLjEgMC02LjMgMi43LTEyLjMgNy4zLTE2LjVMMTMzLjcgMzU5LjdjNC4yLTMuNy0uNC0xMC40LTUuNC03LjlMNzcuMiAzNzcuNGMtNi4xIDMtMTMuMi0xLjQtMTMuMi04LjIgMC0zMS41IDEyLjUtNjEuOCAzNC44LTg0bDgtOHptNDE3LTI3MGMxMi42LTEwLjMgMzEuMS05LjUgNDIuOCAyLjJzMTIuNCAzMC4yIDIuMiA0Mi44bC0yLjIgMi40LTE5MiAxOTIgMzQuOCAzNC43YzQuMiA0LjIgNi42IDEwIDYuNiAxNiAwIDEyLjUtMTAuMSAyMi42LTIyLjYgMjIuNmwtMjkuMSAwLTEwOC4zLTEwOC4zIDAtMjkuMWMwLTEyLjUgMTAuMS0yMi42IDIyLjYtMjIuNiA2IDAgMTEuOCAyLjQgMTYgNi42bDM0LjggMzQuNyAxOTItMTkyIDIuNC0yLjJ6Il0KICAgIH07CiAgICBmYVF1aWRkaXRjaCA9IGZhQnJvb21CYWxsOwogICAgZmFRdWlkZGl0Y2hCcm9vbUJhbGwgPSBmYUJyb29tQmFsbDsKICAgIGZhSiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJqIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTA2XSwgIjRhIiwgIk0yODggMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNTZjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBTMCA0MDguNCAwIDMyMGwwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMmMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFTaHV0dGxlU3BhY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2h1dHRsZS1zcGFjZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzcGFjZS1zaHV0dGxlIl0sICJmMTk3IiwgIk0wIDM2OGwwIDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDUwIDBjNDAuNiAwIDgwLjQtMTEgMTE1LjItMzEuOWwxMzMuNS04MC4xLTkzLjMgMC02NC45IDM4LjljLTE0IDguNC0yOC45IDE0LjctNDQuNSAxOWwwLTY2LjRjOS43LTUuNiAxNy44LTEzLjcgMjMuNC0yMy40bDE5OC44IDBjNjcuMSAwIDEyNy44LTIwLjYgMTcwLjMtNzAuNiA0LjYtNS40IDQuNi0xMy4zIDAtMTguOC00Mi41LTUwLjEtMTAzLjItNzAuNi0xNzAuMy03MC42bC0xOTguOCAwYy01LjYtOS43LTEzLjctMTcuOC0yMy40LTIzLjRsMC02Ni40YzE1LjYgNC4yIDMwLjYgMTAuNiA0NC41IDE5bDY0LjkgMzguOSA5My4zIDAtMTMzLjUtODAuMUMxNzguNCA0MyAxMzguNiAzMiA5OCAzMkw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgMzY4em05NiAwbDAgNjQtNDggMCAwLTY0IDQ4IDB6TTk2IDgwbDAgNjQtNDggMCAwLTY0IDQ4IDB6TTQxNiAyMjRjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYVNwYWNlU2h1dHRsZSA9IGZhU2h1dHRsZVNwYWNlOwogICAgZmFZaW5ZYW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInlpbi15YW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTc3NV0sICJmNmFkIiwgIk0yMjQgMTYwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTMyIDM1MmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTAtNDQ4YzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2LTk2IDQzLTk2IDk2IDQzIDk2IDk2IDk2QzE1MCA0NDggNjQgMzYyIDY0IDI1NlMxNTAgNjQgMjU2IDY0ek0yMjQgMzUyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYVN0b3AgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3RvcCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzkyMDldLCAiZjA0ZCIsICJNNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMyeiJdCiAgICB9OwogICAgZmFUcm93ZWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJvd2VsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1ODkiLCAiTTQwNy45IDE4MS40TDI3Ny4zIDMxMiAzNDIuNiAzNzcuNGM3LjkgNy45IDExLjEgMTkuNCA4LjQgMzAuM3MtMTAuOCAxOS42LTIxLjUgMjIuOWwtMjU2IDgwYy0xMS40IDMuNS0yMy44IC41LTMyLjItNy45cy0xMS41LTIwLjgtNy45LTMyLjJsODAtMjU2YzMuMy0xMC43IDEyLTE4LjkgMjIuOS0yMS41czIyLjQgLjUgMzAuMyA4LjRMMjMyIDI2Ni43IDM2Mi42IDEzNi4xYy0xNC4zLTE0LjYtMTQuMi0zOCAuMy01Mi41bDk1LjQtOTUuNGMyNi45LTI2LjkgNzAuNS0yNi45IDk3LjUgMHMyNi45IDcwLjUgMCA5Ny41bC05NS40IDk1LjRjLTE0LjUgMTQuNS0zNy45IDE0LjYtNTIuNSAuM3oiXQogICAgfTsKICAgIGZhSGFuZEJhY2tGaXN0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWJhY2stZmlzdCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJoYW5kLXJvY2siXSwgImYyNTUiLCAiTTcuNCAyNTMuNkMyLjYgMjQ1LjkgMCAyMzcuMSAwIDIyOGwwLTM2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDE2IDAgMC04MGMwLTI2LjUgMjEuNS00OCA0OC00OCAxNy4zIDAgMzIuNCA5LjEgNDAuOSAyMi44IDQuMy0yMi4xIDIzLjgtMzguOCA0Ny4xLTM4LjggMjMuNCAwIDQyLjkgMTYuOCA0Ny4xIDM4LjkgNy4zLTQuNCAxNS44LTYuOSAyNC45LTYuOSAyMi4xIDAgNDAuOCAxNSA0Ni4zIDM1LjQgNS41LTIuMiAxMS40LTMuNCAxNy43LTMuNCAyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2LjljMCA5LjktMi4zIDE5LjctNi44IDI4LjZsLTM5LjYgNzkuMWMtMTAuOCAyMS43LTMzIDM1LjQtNTcuMiAzNS40TDk2IDM1MmMtMTYuNSAwLTMxLjgtOC40LTQwLjYtMjIuNGwtNDgtNzZ6TTMyIDQ4MGwwLTQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDhjMCAxNy43LTE0LjMgMzItMzIgMzJMNjQgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhSGFuZFJvY2syID0gZmFIYW5kQmFja0Zpc3QyOwogICAgZmFUZW1wZXJhdHVyZUhpZ2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVtcGVyYXR1cmUtaGlnaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzY5IiwgIk05NiA5NmMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgMTY0LjdjMjkuNSAyNi40IDQ4IDY0LjcgNDggMTA3LjMgMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTNDggNDQ3LjUgNDggMzY4YzAtNDIuNiAxOC41LTgxIDQ4LTEwNy4zTDk2IDk2em05NiAzMzZjMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zTDIxNiA5NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIxMi43Yy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjR6TTQ2NCA4MGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zNTIgODBhODAgODAgMCAxIDEgMTYwIDAgODAgODAgMCAxIDEgLTE2MCAweiJdCiAgICB9OwogICAgZmFHcmVhdGVyVGhhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJncmVhdGVyLXRoYW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2Mjc2OV0sICIzZSIsICJNMzQuOSA1MC42Yy03LjQgMTYtLjQgMzUuMSAxNS42IDQyLjVMNDAzLjYgMjU2IDUwLjYgNDE5Yy0xNiA3LjQtMjMuMSAyNi40LTE1LjYgNDIuNXMyNi40IDIzIDQyLjUgMTUuNmw0MTYtMTkyYzExLjMtNS4yIDE4LjYtMTYuNiAxOC42LTI5LjFzLTcuMy0yMy44LTE4LjYtMjkuMUw3Ny40IDM1Yy0xNi03LjQtMzUuMS0uNC00Mi41IDE1LjZ6Il0KICAgIH07CiAgICBmYUNydXRjaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjcnV0Y2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdmNyIsICJNMjk3LjQgOS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTEuNC0xLjQtMTU4LjYgMTU4LjZjLTE4IDE4LTQyLjQgMjguMS02Ny45IDI4LjFsLTU5IDBjLTguNSAwLTE2LjYgMy40LTIyLjYgOS40LTYxLjcgNjEuNy05Mi44IDkyLjgtOTMuMyA5My4zLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE2LTE2IDAgMCA3Ny4zLTc3LjNjNi02IDkuNC0xNC4xIDkuNC0yMi42bDAtNTljMC0yNS41IDEwLjEtNDkuOSAyOC4xLTY3LjlMMjk4LjcgNTYgMjk3LjQgNTQuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjN6TTM0NCAxMDEuM0wyNjEuMyAxODQgMzI4IDI1MC43IDQxMC43IDE2OCAzNDQgMTAxLjN6bS0xMjggMTI4bC0zMC42IDMwLjZjLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDUzLjUgNTMuNSAwYzguNSAwIDE2LjYtMy40IDIyLjYtOS40TDI4Mi43IDI5NiAyMTYgMjI5LjN6Il0KICAgIH07CiAgICBmYVNlcHRhZ29uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNlcHRhZ29uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImhlcHRhZ29uIl0sICJlODIwIiwgIk0yNjcuNC0zMS41YzE1LjktNS41IDMzLjUtNC42IDQ4LjggMi43bDE3Mi40IDgzIDYuMyAzLjVjMTQuMiA5IDI0LjUgMjMuMyAyOC4zIDM5LjlsNDIuNiAxODYuNSAxLjIgNy4yYzEuNiAxNC4zLTEuNyAyOC44LTkuNCA0MS4xbC00LjIgNS45LTExOS4zIDE0OS42Yy0xMi4xIDE1LjItMzAuNiAyNC4xLTUwIDI0LjFsLTE5MS4zIDBjLTE5LjUgMC0zNy45LTguOS01MC0yNC4xTDIzLjUgMzM4LjRjLTEyLjEtMTUuMi0xNi43LTM1LjItMTIuMy01NC4ybDQyLjYtMTg2LjUgMi03YzUuNi0xNS45IDE3LjItMjkgMzIuNi0zNi40bDE3Mi40LTgzIDYuNy0yLjd6Il0KICAgIH07CiAgICBmYUhlcHRhZ29uID0gZmFTZXB0YWdvbjsKICAgIGZhU3RyZWV0VmlldyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdHJlZXQtdmlldyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjFkIiwgIk0yNTYgMGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNMjI0IDE2MGw2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNDhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTEuOCAwLTExLjEgOTkuNWMtMS44IDE2LjItMTUuNSAyOC41LTMxLjggMjguNWwtMzguNyAwYy0xNi4zIDAtMzAtMTIuMy0zMS44LTI4LjVsLTExLjEtOTkuNS0xLjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC00OGMwLTM1LjMgMjguNy02NCA2NC02NHpNNDEyLjQgNDAwLjJjLTE2LjEtNC4yLTM0LjgtNy42LTU1LjQtMTAuMmw1LjMtNDcuN2MyMi43IDIuOSA0My43IDYuNyA2Mi4xIDExLjUgMjIuNCA1LjggNDIuNiAxMy4zIDU3LjggMjMuMyAxNC43IDkuNiAyOS44IDI0LjkgMjkuOCA0N3MtMTUuMSAzNy40LTI5LjggNDdjLTE1LjIgOS45LTM1LjUgMTcuNS01Ny44IDIzLjMtNDUuMSAxMS43LTEwNS4zIDE3LjgtMTY4LjQgMTcuOHMtMTIzLjMtNi4xLTE2OC40LTE3LjhDNjUuMiA0ODguNCA0NSA0ODAuOSAyOS44IDQ3MSAxNS4xIDQ2MS40IDAgNDQ2LjEgMCA0MjRzMTUuMS0zNy40IDI5LjgtNDdjMTUuMi05LjkgMzUuNS0xNy41IDU3LjgtMjMuMyAxOC41LTQuOCAzOS41LTguNiA2Mi4xLTExLjVMMTU1IDM5MGMtMjAuNiAyLjYtMzkuMyA2LjEtNTUuNCAxMC4yLTU2LjYgMTQuNi01Ni42IDMyLjkgMCA0Ny41IDM5LjkgMTAuMyA5NS44IDE2LjIgMTU2LjQgMTYuMnMxMTYuNS01LjkgMTU2LjQtMTYuMmM1Ni42LTE0LjYgNTYuNi0zMi45IDAtNDcuNXoiXQogICAgfTsKICAgIGZhV2F2ZVNxdWFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3YXZlLXNxdWFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmODNlIiwgIk02NCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI4OCA5NiAwIDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI4OC05NiAwIDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC0xMjh6Il0KICAgIH07CiAgICBmYUFuZ2xlTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmdsZS1sZWZ0IiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbODI0OV0sICJmMTA0IiwgIk05LjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w3Ny4zIDI1NiAyMTQuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MHoiXQogICAgfTsKICAgIGZhU2NyZXdkcml2ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2NyZXdkcml2ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjk2OTFdLCAiZjU0YSIsICJNMzUyLjEgMTQ2LjdsMC00OS42YzAtMTAuNyA1LjMtMjAuNyAxNC4yLTI2LjZMNDg1LjItOC43YzYuMy00LjIgMTQuOC0zLjQgMjAuMiAybDQ1LjQgNDUuNWM1LjQgNS40IDYuMiAxMy44IDIgMjAuMkw0NzMuNiAxNzcuOGMtNS45IDguOS0xNS45IDE0LjItMjYuNiAxNC4ybC00OS42IDAtOTAuNyA5MC43YzE1IDMzLjMgOC45IDczLjktMTguNSAxMDEuM0wxNjIuMSA1MTAuMWMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBMMzQuMSA0NDkuOWMtMTguNy0xOC43LTE4LjctNDkuMSAwLTY3LjlMMTYwLjEgMjU2YzI3LjQtMjcuNCA2Ny45LTMzLjYgMTAxLjMtMTguNWw5MC43LTkwLjd6Il0KICAgIH07CiAgICBmYVRyYWN0b3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhY3RvciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY2OF0sICJmNzIyIiwgIk0xNjAgOTZsMCA5NiAxMzMuNCAwLTU3LjYtOTYtNzUuOCAwek05NiAyMjNMOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTA3LjggMGMyMi41IDAgNDMuMyAxMS44IDU0LjkgMzEuMWw3Ny40IDEyOC45IDY0IDAgMC03MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNzIgNDggMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQxLjVjMCAxNC4yLTYuMyAyNy44LTE3LjMgMzYuOWwtMzUgMjkuMmMyNi41IDE1LjIgNDQuMyA0My43IDQ0LjMgNzYuNCAwIDQ4LjYtMzkuNCA4OC04OCA4OHMtODgtMzkuNC04OC04OGMwLTE0LjQgMy41LTI4IDkuNi00MGwtMTAxLjIgMGMtMyAxMy40LTcuOSAyNi0xNC40IDM3LjcgNy43IDkuNCA3LjIgMjMuNC0xLjYgMzIuMmwtMjIuNiAyMi42Yy04LjggOC44LTIyLjcgOS4zLTMyLjIgMS42LTkuMyA1LjItMTkuMyA5LjMtMjkuOCAxMi4zLTEuMiAxMi4xLTExLjQgMjEuNi0yMy45IDIxLjZsLTMyIDBjLTEyLjQgMC0yMi43LTkuNS0yMy45LTIxLjYtMTAuNS0zLTIwLjQtNy4yLTI5LjgtMTIuMy05LjQgNy43LTIzLjQgNy4yLTMyLjItMS42TDM1LjUgNDUzLjhjLTguOC04LjgtOS4zLTIyLjctMS42LTMyLjItNS4yLTkuMy05LjMtMTkuMy0xMi4zLTI5LjgtMTIuMS0xLjItMjEuNi0xMS40LTIxLjYtMjMuOWwwLTMyYzAtMTIuNCA5LjUtMjIuNyAyMS42LTIzLjkgMy0xMC41IDcuMi0yMC40IDEyLjMtMjkuOC03LjctOS40LTcuMi0yMy40IDEuNi0zMi4ybDIyLjYtMjIuNmM4LjgtOC44IDIyLjctOS4zIDMyLjItMS42IDEuOS0xIDMuNy0yIDUuNy0zem02NCA2NWE2NCA2NCAwIDEgMCAwIDEyOCA2NCA2NCAwIDEgMCAwLTEyOHpNNDQwIDQyNGE0MCA0MCAwIDEgMCA4MCAwIDQwIDQwIDAgMSAwIC04MCAweiJdCiAgICB9OwogICAgZmFCcmlkZ2VDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmlkZ2UtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0Y2IiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw4IDAgMCA2NC00MCAwIDAgMTEyYzM3LjYgOS40IDY0IDQzLjIgNjQgODJsMCA5NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC01MyA0My05NiA5Ni05NiA2LjQgMCAxMi43IC42IDE4LjcgMS44IDM0LjctNDkuNSA5Mi4yLTgxLjggMTU3LjMtODEuOCAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTY1LjQtNDAgMCAwLTY0IDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnpNNDI0IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTI5NiA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek04OCA5Nmw4MCAwIDAgNjQtODAgMCAwLTY0ek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN2wtMzYuNyAzNi43IDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXQogICAgfTsKICAgIGZhVmlhbHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlhbHMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQ5MyIsICJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NGwwIDM1MmMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMzUyIDY0IDAgMCAzNTJjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTM1MmMxNy43IDAgMzItMTQuMyAzMi0zMlM0OTcuNyAwIDQ4MCAwTDMyIDB6TTE2MCA2NGwwIDEyOC02NCAwIDAtMTI4IDY0IDB6bTI1NiAwbDAgMTI4LTY0IDAgMC0xMjggNjQgMHoiXQogICAgfTsKICAgIGZhU3RldGhvc2NvcGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3RldGhvc2NvcGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjk2NThdLCAiZjBmMSIsICJNMzIgNDhDMzIgMjEuNSA1My41IDAgODAgMGw0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMTI4YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0xMjgtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMjM4LjMgMCAyNTYgMGw0OCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTQ0YzAgNzcuNC01NSAxNDItMTI4IDE1Ni44bDAgMTkuMmMwIDYxLjkgNTAuMSAxMTIgMTEyIDExMnMxMTItNTAuMSAxMTItMTEybDAtODUuNWMtMzcuMy0xMy4yLTY0LTQ4LjctNjQtOTAuNSAwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2YzAgNDEuOC0yNi43IDc3LjQtNjQgOTAuNWwwIDg1LjVjMCA5Ny4yLTc4LjggMTc2LTE3NiAxNzZTMTYwIDQ2NS4yIDE2MCAzNjhsMC0xOS4yQzg3IDMzNCAzMiAyNjkuNCAzMiAxOTJMMzIgNDh6TTQ4MCAyMjRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFQb2RjYXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBvZGNhc3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJjZSIsICJNMzM2IDM1OS44YzM5LjEtMzIuMyA2NC04MS4xIDY0LTEzNS44IDAtOTcuMi03OC44LTE3Ni0xNzYtMTc2UzQ4IDEyNi44IDQ4IDIyNEM0OCAyNzguNyA3Mi45IDMyNy41IDExMiAzNTkuOCAxMTIuNCAzNzcuNCAxMTUuMiA0MDAuMiAxMTguNCA0MjEuNiA0OCAzODMuOSAwIDMwOS41IDAgMjI0IDAgMTAwLjMgMTAwLjMgMCAyMjQgMFM0NDggMTAwLjMgNDQ4IDIyNGMwIDg1LjYtNDggMTU5LjktMTE4LjUgMTk3LjYgMy4zLTIxLjQgNi00NC4yIDYuNC02MS44em0tMTQtNTMuNGMtOC4zLTEyLjYtMTkuMi0yMS42LTMwLjQtMjcuOC0yLjEtMS4xLTQuMi0yLjItNi4zLTMuMiAxMS43LTEzLjkgMTguOC0zMS45IDE4LjgtNTEuNSAwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGMwIDE5LjYgNy4xIDM3LjYgMTguOCA1MS41LTIuMSAxLTQuMiAyLTYuMyAzLjItMTEuMiA2LjItMjIuMSAxNS4yLTMwLjQgMjcuOC0xOC44LTIyLjMtMzAuMS01MS0zMC4xLTgyLjQgMC03MC43IDU3LjMtMTI4IDEyOC0xMjhzMTI4IDU3LjMgMTI4IDEyOGMwIDMxLjQtMTEuMyA2MC4yLTMwLjEgODIuNHpNMjI0IDMxMmMzMi45IDAgNjQgOC42IDY0IDQzLjggMCAzMy0xMi45IDEwNC4xLTIwLjYgMTMyLjktNS4xIDE5LTI0LjUgMjMuNC00My40IDIzLjRzLTM4LjItNC40LTQzLjQtMjMuNGMtNy44LTI4LjUtMjAuNi05OS43LTIwLjYtMTMyLjggMC0zNS4xIDMxLjEtNDMuOCA2NC00My44em0wLTEyOGE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6Il0KICAgIH07CiAgICBmYUFycm93VXBSaWdodERvdHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtcmlnaHQtZG90cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGI3IiwgIk05NiAzMkM3OC4zIDMyIDY0IDQ2LjMgNjQgNjRTNzguMyA5NiA5NiA5NkwxMTQuNyA5NiA5LjQgMjAxLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTYwIDE0MS4zIDE2MCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDMyek00MDMuOCA3MC4xYTM4LjEgMzguMSAwIDEgMCA3Ni4yIDAgMzguMSAzOC4xIDAgMSAwIC03Ni4yIDB6TTI3OS43IDE5NC4yYTM4LjEgMzguMSAwIDEgMCA3Ni4yIDAgMzguMSAzOC4xIDAgMSAwIC03Ni4yIDB6bTE2Mi4yLTM4LjFhMzguMSAzOC4xIDAgMSAwIDAgNzYuMiAzOC4xIDM4LjEgMCAxIDAgMC03Ni4yek0xNTYuMiAzMTcuOGEzOC4xIDM4LjEgMCAxIDAgNzYuMiAwIDM4LjEgMzguMSAwIDEgMCAtNzYuMiAwem0xNjEuNi0zOC4xYTM4LjEgMzguMSAwIDEgMCAwIDc2LjIgMzguMSAzOC4xIDAgMSAwIDAtNzYuMnptODYuMSAzOC4xYTM4LjEgMzguMSAwIDEgMCA3Ni4yIDAgMzguMSAzOC4xIDAgMSAwIC03Ni4yIDB6TTcwLjEgNDAzLjhhMzguMSAzOC4xIDAgMSAwIDAgNzYuMiAzOC4xIDM4LjEgMCAxIDAgMC03Ni4yem04Ni4xIDM4LjFhMzguMSAzOC4xIDAgMSAwIDc2LjIgMCAzOC4xIDM4LjEgMCAxIDAgLTc2LjIgMHptMTYxLjYtMzguMWEzOC4xIDM4LjEgMCAxIDAgMCA3Ni4yIDM4LjEgMzguMSAwIDEgMCAwLTc2LjJ6bTg2LjEgMzguMWEzOC4xIDM4LjEgMCAxIDAgNzYuMiAwIDM4LjEgMzguMSAwIDEgMCAtNzYuMiAweiJdCiAgICB9OwogICAgZmFDaGVzc1F1ZWVuMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1xdWVlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk4MTldLCAiZjQ0NSIsICJNMjU2IDgwYTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNNS41IDE4NUwxMjggMzg0IDcxLjggNDU0LjNjLTUgNi4zLTcuOCAxNC4xLTcuOCAyMi4yIDAgMTkuNiAxNS45IDM1LjUgMzUuNSAzNS41bDMxMi45IDBjMTkuNiAwIDM1LjUtMTUuOSAzNS41LTM1LjUgMC04LjEtMi43LTE1LjktNy44LTIyLjJMMzg0IDM4NCA1MDYuNSAxODVjMy42LTUuOSA1LjUtMTIuNyA1LjUtMTkuNmwwLS42YzAtMjAuMy0xNi41LTM2LjgtMzYuOC0zNi44LTcuMyAwLTE0LjQgMi4yLTIwLjQgNi4ybC0xNi45IDExLjNjLTEyLjcgOC41LTI5LjYgNi44LTQwLjQtNGwtMzQuMS0zNC4xQzM1Ni4xIDEwMC4xIDM0Ni4yIDk2IDMzNiA5NnMtMjAuMSA0LjEtMjcuMyAxMS4zbC0zMC4xIDMwLjFjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC0zMC4xLTMwLjFDMTk2LjEgMTAwLjEgMTg2LjIgOTYgMTc2IDk2cy0yMC4xIDQuMS0yNy4zIDExLjNsLTM0LjEgMzQuMWMtMTAuOCAxMC44LTI3LjcgMTIuNS00MC40IDRMNTcuMyAxMzQuMmMtNi4xLTQtMTMuMi02LjItMjAuNC02LjItMjAuMyAwLTM2LjggMTYuNS0zNi44IDM2LjhsMCAuNmMwIDYuOSAxLjkgMTMuNyA1LjUgMTkuNnoiXQogICAgfTsKICAgIGZhQW5jaG9yQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYW5jaG9yLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGFiIiwgIk0zMjAuNSA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0tMzItOTZjLTUzIDAtOTYgNDMtOTYgOTYgMCA0MS44IDI2LjcgNzcuNCA2NCA5MC41bDAgMjU3LjljLTYyLjktMTQuMy0xMTAuMi02OS43LTExMS45LTEzNi41bDE2LjEgMTQuMWMxMCA4LjcgMjUuMSA3LjcgMzMuOS0yLjNzNy43LTI1LjEtMi4zLTMzLjlsLTY0LTU2Yy05LTcuOS0yMi42LTcuOS0zMS42IDBsLTY0IDU2Yy0xMCA4LjctMTEgMjMuOS0yLjMgMzMuOXMyMy45IDExIDMzLjkgMi4zbDE2LjItMTQuMmMyLjEgMTEzLjEgOTQuNCAyMDQuMSAyMDggMjA0LjEgMTYuNiAwIDMyLjctMS45IDQ4LjItNS42LTIwLjMtMzAuNS0zMi4yLTY3LTMyLjItMTA2LjQgMC0yNy4zIDUuNy01My4zIDE2LTc2LjlsMC0xMzYuNmMzNy4zLTEzLjIgNjQtNDguNyA2NC05MC41IDAtNTMtNDMtOTYtOTYtOTZ6bTIwOCA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFFbGxpcHNpc1ZlcnRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVsbGlwc2lzLXZlcnRpY2FsIiwKICAgICAgaWNvbjogWzEyOCwgNTEyLCBbImVsbGlwc2lzLXYiXSwgImYxNDIiLCAiTTY0IDE0NGE1NiA1NiAwIDEgMSAwLTExMiA1NiA1NiAwIDEgMSAwIDExMnptMCAyMjRjMzAuOSAwIDU2IDI1LjEgNTYgNTZzLTI1LjEgNTYtNTYgNTYtNTYtMjUuMS01Ni01NiAyNS4xLTU2IDU2LTU2em01Ni0xMTJjMCAzMC45LTI1LjEgNTYtNTYgNTZzLTU2LTI1LjEtNTYtNTYgMjUuMS01NiA1Ni01NiA1NiAyNS4xIDU2IDU2eiJdCiAgICB9OwogICAgZmFFbGxpcHNpc1YgPSBmYUVsbGlwc2lzVmVydGljYWw7CiAgICBmYUhlYXJ0Q2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhcnQtY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZmUiLCAiTTI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN0MyOTYgNTIuNSAzMzYuMiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxNy42LTMuNCAzNS42LTkuNSA1My43LTIxLjgtOC42LTQ1LjYtMTMuNC03MC41LTEzLjQtMTA2IDAtMTkyIDg2LTE5MiAxOTIgMCAyOC41IDYuMiA1NS42IDE3LjQgODAtLjUgMC0uOSAwLTEuNCAwLTE1LjUgMC0zMC44LTQuNi00My4xLTE0LjEtNzMtNTUuNy0yMTIuOS0xODYtMjEyLjktMjk4LjJsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6TTQzMiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0wIDIyOGEyMCAyMCAwIDEgMCAwLTQwIDIwIDIwIDAgMSAwIDAgNDB6bTAtMTgwYy04LjggMC0xNiA3LjItMTYgMTZsMCA4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtODBjMC04LjgtNy4yLTE2LTE2LTE2eiJdCiAgICB9OwogICAgZmFCdWlsZGluZ0NpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGQzIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0xMC41LTE0LjYtMTktMzAuNy0yNS4xLTQ4bC03NC45IDAgMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzIgMCA0IC4yIDUuOSAuNSA2LTIzLjYgMTYuMy00NS40IDMwLjEtNjQuNWwtNCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0YzI3LjUtMTkuOCA2MC4zLTMyLjQgOTYtMzUuNEw0MTYgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgMHptMzIgMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI3MiA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xMjggMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFQZXJzb25BcnJvd1VwRnJvbUxpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWFycm93LXVwLWZyb20tbGluZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTM5IiwgIk0xOTItMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTMxOC4zIDI5OS4xbC00Ni4zLTYyLjQgMCAyNDMuMyAyNzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1NDRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsODAgMCAwLTI0My4zLTQ2LjMgNjIuNGMtMTAuNSAxNC4yLTMwLjYgMTcuMi00NC44IDYuNnMtMTcuMi0zMC42LTYuNi00NC44bDcwLjUtOTVDMTEwIDEzMiAxNDkuNyAxMTIgMTkyIDExMnM4MiAyMCAxMDcuMiA1My45bDcwLjUgOTVjMTAuNSAxNC4yIDcuNiAzNC4yLTYuNiA0NC44cy0zNC4yIDcuNi00NC44LTYuNnpNMjA4IDQ4MGwwLTEyOGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDEyOCAzMiAwek01NjYuNiAxMDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBMNDk2IDc3LjMgNDk2IDIyNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE0Ni43LTI1LjQgMjUuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsODAtODBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjN6Il0KICAgIH07CiAgICBmYU5vdEVxdWFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm5vdC1lcXVhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTNlIiwgIk0zNzguNiA4MS44YzkuOC0xNC43IDUuOC0zNC42LTguOS00NC40cy0zNC42LTUuOC00NC40IDguOUwyNzAuOSAxMjggMzIgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE5Ni4yIDAtODUuMyAxMjgtMTEwLjkgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2OC4yIDAtMzAuOCA0Ni4yYy05LjggMTQuNy01LjggMzQuNiA4LjkgNDQuNHMzNC42IDUuOCA0NC40LTguOUwxNzcuMSAzODQgNDE2IDM4NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTk2LjIgMCA4NS4zLTEyOCAxMTAuOSAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02OC4yIDAgMzAuOC00Ni4yeiJdCiAgICB9OwogICAgZmFUcmFpblRyYW0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhaW4tdHJhbSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODY1MF0sICJlNWI0IiwgIk0wIDhDMC01LjMgMTAuNy0xNiAyNC0xNmwzMzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtOC0xMjAgMCAwIDY0IDQwIDBjNTMgMCA5NiA0MyA5NiA5NmwwIDE2MGMwIDMxLjItMTQuOSA1OS0zOCA3Ni41bDY0LjMgNzZjOC42IDEwLjEgNy4zIDI1LjMtMi44IDMzLjhzLTI1LjMgNy4zLTMzLjgtMi44bC03NC42LTg4LjFjLTMuNiAuNC03LjMgLjYtMTEuMSAuNmwtMTI4IDBjLTMuOCAwLTcuNS0uMi0xMS4xLS42TDQyLjMgNTM1LjVjLTguNiAxMC4xLTIzLjcgMTEuNC0zMy44IDIuOHMtMTEuNC0yMy43LTIuOC0zMy44bDY0LjMtNzZDNDYuOSA0MTEgMzIgMzgzLjIgMzIgMzUybDAtMTYwYzAtNTMgNDMtOTYgOTYtOTZsNDAgMCAwLTY0LTEyMCAwIDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNFMwIDUzLjMgMCA0MEwwIDh6TTEyOCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTI4IDB6bTMyIDE5MmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem05NiAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYVBsYW5lRGVwYXJ0dXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYW5lLWRlcGFydHVyZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODc0N10sICJmNWIwIiwgIk0zNzIgMTQzLjlMMTcyLjcgNDAuMmMtOC00LjEtMTcuMy00LjgtMjUuNy0xLjdsLTQxLjEgMTVjLTEwLjMgMy43LTEzLjggMTYuNC03LjEgMjVMMjAwLjMgMjA2LjQgMTAwLjEgMjQyLjggNDAgMjA2LjJjLTYuMi0zLjgtMTMuOC00LjUtMjAuNy0yLjFMMyAyMTAuMWMtOS40IDMuNC0xMy40IDE0LjUtOC4zIDIzLjFsNTMuNiA5MS44YzE1LjYgMjYuNyA0OC4xIDM4LjQgNzcuMSAyNy44bDEyLjktNC43IDAgMCAzOTguNC0xNDVjMjkuMS0xMC42IDQ0LTQyLjcgMzMuNS03MS44cy00Mi43LTQ0LTcxLjgtMzMuNUwzNzIgMTQzLjl6TTMyLjIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDUxMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01MTIgMHoiXQogICAgfTsKICAgIGZhUmlnaHRUb0JyYWNrZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmlnaHQtdG8tYnJhY2tldCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzaWduLWluLWFsdCJdLCAiZjJmNiIsICJNMzQ1IDI3M2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOUwyMDEgOTVjLTYuOS02LjktMTcuMi04LjktMjYuMi01LjJTMTYwIDEwMi4zIDE2MCAxMTJsMCA4MC0xMTIgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMTIgMCAwIDgwYzAgOS43IDUuOCAxOC41IDE0LjggMjIuMnMxOS4zIDEuNyAyNi4yLTUuMkwzNDUgMjczem03IDE0M2MtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzUzIDAgOTYtNDMgOTYtOTZsMC0yNTZjMC01My00My05Ni05Ni05NmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAweiJdCiAgICB9OwogICAgZmFTaWduSW5BbHQgPSBmYVJpZ2h0VG9CcmFja2V0OwogICAgZmFTZENhcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2QtY2FyZCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmN2MyIiwgIk0zODQgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMMTI1LjMgMEMxMDguMyAwIDkyIDYuNyA4MCAxOC43TDE4LjcgODBDNi43IDkyIDAgMTA4LjMgMCAxMjUuM0wwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NHpNMTYwIDg4bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0em04OCAwbDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0em04OCAwbDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0eiJdCiAgICB9OwogICAgZmFIb3VzZUNpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTBhIiwgIk00OTYgNTQ0YTE0NCAxNDQgMCAxIDEgMC0yODggMTQ0IDE0NCAwIDEgMSAwIDI4OHpNMjY4LjYgNi41YzEyLjItOS4zIDI5LjctOC43IDQxLjIgMmwyMTcuNiAyMDJjLTEwLjItMS43LTIwLjctMi42LTMxLjMtMi42LTc4LjYgMC0xNDYuMSA0Ny4yLTE3NS44IDExNC44LTUuMS0xLjgtMTAuNS0yLjgtMTYuMi0yLjhsLTMyIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTYgOTEgMGM2LjEgMTcuMyAxNC42IDMzLjQgMjUuMSA0OEwxNDQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDggMi40LTJ6TTQ5NiA0NDRhMjAgMjAgMCAxIDAgMCA0MCAyMCAyMCAwIDEgMCAwLTQwem0wLTE0MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgODBjMCA4LjggNy4yIDE2IDE2IDE2IDguOCAwIDE2LTcuMiAxNi0xNmwwLTgwYzAtOC44LTcuMi0xNi0xNi0xNnoiXQogICAgfTsKICAgIGZhU2hla2VsU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGVrZWwtc2lnbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzgzNjIsICJpbHMiLCAic2hla2VsIiwgInNoZXFlbCIsICJzaGVxZWwtc2lnbiJdLCAiZjIwYiIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzUyIDEyOCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhMMzIgMzJ6TTMyMCA0ODBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhsMC0yODhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTEyOCAwIDAtMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2MCAweiJdCiAgICB9OwogICAgZmFJbHMgPSBmYVNoZWtlbFNpZ247CiAgICBmYVNoZWtlbCA9IGZhU2hla2VsU2lnbjsKICAgIGZhU2hlcWVsID0gZmFTaGVrZWxTaWduOwogICAgZmFTaGVxZWxTaWduID0gZmFTaGVrZWxTaWduOwogICAgZmFSYWRpbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyYWRpbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI1MV0sICJmOGQ3IiwgIk00OTQuOCAxNWMxMi43LTMuNyAyMC0xNy4xIDE2LjMtMjkuOFM0OTQtMzQuOCA0ODEuMy0zMUw1MS44IDk0LjlDNDIuNCA5Ny42IDMzLjkgMTAyLjEgMjYuNiAxMDggMTAuNSAxMTkuNyAwIDEzOC42IDAgMTYwTDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDIxOC41IDk2IDQ5NC44IDE1ek0zNjggMjA4YTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwek02NCAyNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTEyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMODggMjcyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMCA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw4OCAzNjhjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFIYW5kRG90cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWRvdHMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYWxsZXJnaWVzIl0sICJmNDYxIiwgIk0yODggMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0xNzZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyNzJjMCAxLjUgMCAzLjEgLjEgNC42TDY3LjYgMjgzYy0xNi0xNS4yLTQxLjMtMTQuNi01Ni42IDEuNFMtMy42IDMyNS43IDEyLjQgMzQxTDEyNC44IDQ0OGM0My4xIDQxLjEgMTAwLjQgNjQgMTYwIDY0bDE5LjIgMGM5Ny4yIDAgMTc2LTc4LjggMTc2LTE3NmwwLTIwOGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDExMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTIwOHpNMjAwIDM1MmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0xMjAtNTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em00MCA4OGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0tODggMjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdCiAgICB9OwogICAgZmFBbGxlcmdpZXMgPSBmYUhhbmREb3RzOwogICAgZmFCb29rU2t1bGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9vay1za3VsbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJib29rLWRlYWQiXSwgImY2YjciLCAiTTk2IDUxMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTY2LjdjMTguNi02LjYgMzItMjQuNCAzMi00NS4zbDAtMjg4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDk2IDBDNDMgMCAwIDQzIDAgOTZMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NnpNNjQgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI1NiAwIDAgNjQtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0yNzIgMTYzLjJsMCAxMi44YzAgOC44LTcuMiAxNi0xNiAxNmwtNjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTIuOGMtMTkuNC0xMS43LTMyLTMwLjMtMzItNTEuMiAwLTM1LjMgMzUuOC02NCA4MC02NHM4MCAyOC43IDgwIDY0YzAgMjAuOS0xMi42IDM5LjUtMzIgNTEuMnpNMjA4IDExMmExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem00OCAxNmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bTc0LjIgOTUuN2M0LjYgMTAuMSAuMSAyMS45LTkuOSAyNi41bC00Ny45IDIxLjggNDcuOSAyMS44YzEwLjEgNC42IDE0LjUgMTYuNCA5LjkgMjYuNXMtMTYuNCAxNC41LTI2LjUgOS45TDIyNCAyOTQgMTQ0LjMgMzMwLjJjLTEwLjEgNC42LTIxLjkgLjEtMjYuNS05LjlzLS4xLTIxLjkgOS45LTI2LjVsNDcuOS0yMS44LTQ3LjktMjEuOGMtMTAuMS00LjYtMTQuNS0xNi40LTkuOS0yNi41czE2LjQtMTQuNSAyNi41LTkuOUwyMjQgMjUwIDMwMy43IDIxMy44YzEwLjEtNC42IDIxLjktLjEgMjYuNSA5Ljl6Il0KICAgIH07CiAgICBmYUJvb2tEZWFkID0gZmFCb29rU2t1bGw7CiAgICBmYVVubG9ja0tleWhvbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidW5sb2NrLWtleWhvbGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsidW5sb2NrLWFsdCJdLCAiZjEzZSIsICJNMTkyIDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDY0IDE5MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyMjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsMC02NGMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOCA2My41IDAgMTE2LjEgNDYuMSAxMjYuMiAxMDYuNyAyLjkgMTcuNC04LjggMzMuOS0yNi4zIDM2LjlzLTMzLjktOC44LTM2LjktMjYuM0MyNTAgNTUuMSAyMjMuNyAzMiAxOTIgMzJ6bTQwIDMyOGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAweiJdCiAgICB9OwogICAgZmFVbmxvY2tBbHQgPSBmYVVubG9ja0tleWhvbGU7CiAgICBmYUZpbGVBcnJvd1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtYXJyb3ctdXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZmlsZS11cGxvYWQiXSwgImY1NzQiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0yMDkgMjYzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtNjQgNjRjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwyMy0yMyAwIDg2LjFjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTg2LjEgMjMgMjNjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02NC02NHoiXQogICAgfTsKICAgIGZhRmlsZVVwbG9hZCA9IGZhRmlsZUFycm93VXA7CiAgICBmYUZhY2VHcmluVGVhcnMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi10ZWFycyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODUxNCwgImdyaW4tdGVhcnMiXSwgImY1ODgiLCAiTTU1NC44IDIwMy40bDE2LjMgMi4zQzU0Ny43IDg4LjQgNDQ0LjIgMCAzMjAgMFM5Mi4zIDg4LjQgNjguOSAyMDUuN2wxNi4zLTIuM2MzNy01LjMgNjguNiAyNi40IDYzLjQgNjMuNGwtNi43IDQ2LjdjLTQuMSAyOS0yMS42IDUzLjItNDUuOCA2Ni44IDQzLjcgNzguNSAxMjcuNiAxMzEuNyAyMjMuOCAxMzEuN3MxODAuMS01My4xIDIyMy44LTEzMS43Yy0yNC4xLTEzLjUtNDEuNi0zNy44LTQ1LjgtNjYuOGwtNi43LTQ2LjdjLTUuMy0zNyAyNi40LTY4LjYgNjMuNC02My40ek00NzAuMyAzMjYuOUM0NDcuOSAzODguMiAzODkuMSA0MzIgMzIwIDQzMlMxOTIuMSAzODguMiAxNjkuNyAzMjYuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xYzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMXpNMjEyIDIwOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4em0xODgtMjhjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6TTY0MCAzMDAuNmMwLTI1LjYtMTguOC00Ny4zLTQ0LjEtNTAuOUw1NDkuMSAyNDNjLTEwLjYtMS41LTE5LjYgNy41LTE4LjEgMTguMWw2LjcgNDYuN2MzLjYgMjUuMyAyNS4zIDQ0LjEgNTAuOSA0NC4xIDI4LjQgMCA1MS40LTIzIDUxLjQtNTEuNHptLTY0MCAwQzAgMzI5IDIzIDM1MiA1MS40IDM1MiA3NyAzNTIgOTguNyAzMzMuMiAxMDIuMyAzMDcuOWw2LjctNDYuN2MxLjUtMTAuNi03LjUtMTkuNi0xOC4xLTE4LjFsLTQ2LjcgNi43QzE4LjggMjUzLjMgMCAyNzUgMCAzMDAuNnoiXQogICAgfTsKICAgIGZhR3JpblRlYXJzMiA9IGZhRmFjZUdyaW5UZWFyczI7CiAgICBmYVBlblRvU3F1YXJlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW4tdG8tc3F1YXJlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImVkaXQiXSwgImYwNDQiLCAiTTQ3MS42IDIxLjdjLTIxLjktMjEuOS01Ny4zLTIxLjktNzkuMiAwTDM2OCA0Ni4xIDQ2NS45IDE0NCA0OTAuMyAxMTkuNmMyMS45LTIxLjkgMjEuOS01Ny4zIDAtNzkuMkw0NzEuNiAyMS43em0tMjk5LjIgMjIwYy02LjEgNi4xLTEwLjggMTMuNi0xMy41IDIxLjlsLTI5LjYgODguOGMtMi45IDguNi0uNiAxOC4xIDUuOCAyNC42czE1LjkgOC43IDI0LjYgNS44bDg4LjgtMjkuNmM4LjItMi43IDE1LjctNy40IDIxLjktMTMuNUw0MzIgMTc3LjkgMzM0LjEgODAgMTcyLjQgMjQxLjd6TTk2IDY0QzQzIDY0IDAgMTA3IDAgMTYwTDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJMOTYgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDk2IDY0eiJdCiAgICB9OwogICAgZmFFZGl0MiA9IGZhUGVuVG9TcXVhcmUyOwogICAgZmFFYXJ0aEV1cm9wZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlYXJ0aC1ldXJvcGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZ2xvYmUtZXVyb3BlIl0sICJmN2EyIiwgIk0yNTYuMiA0OGMxMTQuOCAuMSAyMDcuOCA5My4yIDIwNy44IDIwOCAwIDIyLjEtMy40IDQzLjQtOS44IDYzLjQtMiAuNC00LjEgLjYtNi4yIC42bC0yLjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTI5LjMtMjkuM2MtNi02LTkuNC0xNC4xLTkuNC0yMi42bDAtNTAuN2MwLTguOCA3LjItMTYgMTYtMTZzMTYtNy4yIDE2LTE2LTcuMi0xNi0xNi0xNmwtMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnMtNy4yIDE2LTE2IDE2bC0yNS40IDBjLTEyLjUgMC0yMi42LTEwLjEtMjIuNi0yMi42IDAtNiAyLjQtMTEuOCA2LjYtMTZsNzAuMS03MC4xYzIuMS0yLjEgMy4zLTUgMy4zLTggMC02LjItNS4xLTExLjMtMTEuMy0xMS4zbC0xNC4xIDBjLTEyLjUgMC0yMi42LTEwLjEtMjIuNi0yMi42IDAtNiAyLjQtMTEuOCA2LjYtMTZsMjMuMS0yMy4xYy44LS44IDEuNi0xLjUgMi41LTIuMnpNNDM4LjQgMzU2LjFjLTMyLjggNTkuNi05My45IDEwMS40LTE2NS4yIDEwNy4yLS43LTIuMy0xLjEtNC44LTEuMS03LjMgMC0xMy4zLTEwLjctMjQtMjQtMjRsLTI2LjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTI5LjMtMjkuM2MtNi02LTkuNC0xNC4xLTkuNC0yMi42bDAtNjYuN2MwLTE3LjcgMTQuMy0zMiAzMi0zMmw5OC43IDBjOC41IDAgMTYuNiAzLjQgMjIuNiA5LjRsMjkuMyAyOS4zYzYgNiAxNC4xIDkuNCAyMi42IDkuNGw1LjUgMGM4LjUgMCAxNi42IDMuNCAyMi42IDkuNGwxNiAxNmM0LjIgNC4yIDEwIDYuNiAxNiA2LjYgNC44IDAgOS4zIDEuNSAxMyA0LjF6TTI1NiA1MTJsMjYuMi0xLjNjLTguNiAuOS0xNy4zIDEuMy0yNi4yIDEuM3ptMjYuMi0xLjNDNDExLjMgNDk3LjYgNTEyIDM4OC42IDUxMiAyNTYgNTEyIDExNC42IDM5Ny40IDAgMjU2IDBsMCAwQzExNC42IDAgMCAxMTQuNiAwIDI1NiAwIDM4My41IDkzLjIgNDg5LjMgMjE1LjMgNTA4LjggMjI4LjUgNTEwLjkgMjQyLjEgNTEyIDI1NiA1MTJ6TTE4Ny4zIDEyMy4zbC0zMiAzMmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzMi0zMmM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6Il0KICAgIH07CiAgICBmYUdsb2JlRXVyb3BlID0gZmFFYXJ0aEV1cm9wZTsKICAgIGZhRmFjZUdyaW5CZWFtU3dlYXQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi1iZWFtLXN3ZWF0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NTE3LCAiZ3Jpbi1iZWFtLXN3ZWF0Il0sICJmNTgzIiwgIk01NDYuMi0uMWMxNC43IDE3LjggMjkuOCA0MC4xIDI5LjggNjQuMSAwIDM2LjQtMjcuNiA2NC02NCA2NHMtNjQtMjcuNi02NC02NGMwLTI0IDE1LjItNDYuMyAyOS44LTY0LjEgOC44LTEwLjcgMTguNS0yMC44IDI5LTMwIDMtMi42IDcuNC0yLjYgMTAuNCAwIDEwLjUgOS4xIDIwLjEgMTkuMyAyOSAzMHpNMjg4IDBjNDIuNSAwIDgyLjYgMTAuNCAxMTcuOCAyOC43LTMuNiAxMC45LTUuOCAyMi43LTUuOCAzNS4zIDAgNjIuOSA0OS4xIDExMiAxMTIgMTEyIDYuNCAwIDEyLjctLjUgMTguOC0xLjUgOC42IDI1LjYgMTMuMiA1MyAxMy4yIDgxLjUgMCAxNDEuNC0xMTQuNiAyNTYtMjU2IDI1NlMzMiAzOTcuNCAzMiAyNTYgMTQ2LjYgMCAyODggMHpNNDE4LjcgMzA4LjlDMzc5LjUgMzIxLjEgMzM1LjEgMzI4IDI4OCAzMjhzLTkxLjUtNi45LTEzMC43LTE5LjFjLTExLjktMy43LTIzLjkgNi4zLTE5LjYgMTguMSAyMi40IDYxLjMgODEuMyAxMDUuMSAxNTAuMyAxMDUuMXMxMjcuOS00My44IDE1MC4zLTEwNS4xYzQuMy0xMS44LTcuNy0yMS44LTE5LjYtMTguMXpNMjA4IDE4MGMxNS41IDAgMjggMTIuNSAyOCAyOGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04YzAtMzcuNi0zMC40LTY4LTY4LTY4cy02OCAzMC40LTY4IDY4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0xNS41IDEyLjUtMjggMjgtMjh6bTEzMiAyOGMwLTE1LjUgMTIuNS0yOCAyOC0yOHMyOCAxMi41IDI4IDI4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0zNy42LTMwLjQtNjgtNjgtNjhzLTY4IDMwLjQtNjggNjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOHoiXQogICAgfTsKICAgIGZhR3JpbkJlYW1Td2VhdDIgPSBmYUZhY2VHcmluQmVhbVN3ZWF0MjsKICAgIGZhQ2lyY2xlSGFsZlN0cm9rZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtaGFsZi1zdHJva2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5NjgwLCAiYWRqdXN0Il0sICJmMDQyIiwgIk00NDggMjU2YzAtMTA2LTg2LTE5Mi0xOTItMTkybDAgMzg0YzEwNiAwIDE5Mi04NiAxOTItMTkyek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdCiAgICB9OwogICAgZmFBZGp1c3QgPSBmYUNpcmNsZUhhbGZTdHJva2U7CiAgICBmYVBlcnNvbk1pbGl0YXJ5VG9QZXJzb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLW1pbGl0YXJ5LXRvLXBlcnNvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTRjIiwgIk03MSAxMi41Yy04LjYgMS0xNSA4LjItMTUgMTYuOCAwIDkuMyA3LjUgMTYuOCAxNi43IDE2LjlsMTExLjQgMGM4LjgtLjEgMTUuOS03LjIgMTUuOS0xNkwyMDAgMTZjMC05LjUtOC4zLTE3LTE3LjgtMTUuOUw3MSAxMi41ek0xODkuNSA3OC4xbC0xMjIuOSAwYy0xLjYgNS43LTIuNSAxMS43LTIuNSAxNy45IDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC02LjItLjktMTIuMi0yLjUtMTcuOXpNMzIgMjU2bDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMS44IDAgMy41LS4xIDUuMi0uNEw1MyAyMDguNkM0MC4xIDIyMC4zIDMyIDIzNy4yIDMyIDI1NnptMTkwLjIgNDIuNWMxLjEtMy4zIDEuOC02LjggMS44LTEwLjVsMC0zMmMwLTM1LjMtMjguNy02NC02NC02NGwtNjQgMGMtMy43IDAtNy40IC4zLTEwLjkgLjlMMjIyLjIgMjk4LjV6TTM4NCAxNjBhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6bS0zMiAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwek0yMTUuOCA0NTAuMWM1LjItNC42IDguMi0xMS4xIDguMi0xOC4xcy0zLTEzLjUtOC4yLTE4LjFsLTY0LTU2Yy03LjEtNi4yLTE3LjEtNy43LTI1LjctMy44UzExMiAzNjYuNiAxMTIgMzc2bDAgMzItODggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4OCAwIDAgMzJjMCA5LjQgNS41IDE4IDE0LjEgMjEuOXMxOC42IDIuNCAyNS43LTMuOGw2NC01NnpNMjg4IDQzMS45YzAgNi45IDMgMTMuNSA4LjEgMTguMWw2NCA1Ni40YzcuMSA2LjIgMTcuMSA3LjggMjUuNyAzLjlTNDAwIDQ5Ny44IDQwMCA0ODguNGwwLTMyLjQgODggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODggMCAwLTMyYzAtOS40LTUuNS0xOC0xNC4xLTIxLjlzLTE4LjYtMi40LTI1LjcgMy44bC02NCA1NmMtNS4yIDQuNS04LjIgMTEuMS04LjIgMTh6Il0KICAgIH07CiAgICBmYVRhYmxlQ2VsbHNDb2x1bW5Mb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlLWNlbGxzLWNvbHVtbi1sb2NrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU2NzgiLCAiTTI1NiAyMjRsMCAxOTIgNjQgMCAwLTE5Mi02NCAwem0yNTYtNzljLTQ2LjcgNS44LTg1LjYgMzYuOC0xMDIuNyA3OWwtMjUuMyAwIDAgOTAuOGMtMTAuMSAxNS4yLTE2IDMzLjQtMTYgNTMuMWwwIDk2YzAgNS41IC41IDEwLjkgMS4zIDE2LjFMMTI4IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMNjQgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA0OXpNMTI4IDIyNGwwIDE5MiA2NCAwIDAtMTkyLTY0IDB6bTQzMiA0OC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNNDE2IDM2OGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXQogICAgfTsKICAgIGZhVHJ1Y2tGaWVsZFVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLWZpZWxkLXVuIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1OGUiLCAiTTk2IDMyQzYwLjcgMzIgMzIgNjAuNyAzMiA5NmwwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDAgNDhjMCAyMS4xIDEzLjcgMzkuMSAzMi42IDQ1LjUtLjQgMy40LS42IDctLjYgMTAuNSAwIDQ4LjYgMzkuNCA4OCA4OCA4OHM4OC0zOS40IDg4LTg4YzAtMi43LS4xLTUuNC0uNC04bDE0NC43IDBjLS4yIDIuNi0uNCA1LjMtLjQgOCAwIDQ4LjYgMzkuNCA4OCA4OCA4OHM4OC0zOS40IDg4LTg4YzAtMi43LS4xLTUuNC0uNC04bC40IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtMjQuNyAwLTEuNy00LjItNDMuOC0xMDYuM2MtMTIuMy0zMC00MS42LTQ5LjUtNzQtNDkuNWwtNDAuNCAwQzM2NC40IDQ0LjkgMzQzLjcgMzIgMzIwIDMyTDk2IDMyek0zODQgMjI0bDAtOTYgMzEuOSAwYzYuNSAwIDEyLjMgMy45IDE0LjggOS45bDM1LjQgODYuMS04Mi4xIDB6TTE1MiAzNTJhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0yODAgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMjU2LjYgMTMyLjlsMjcuNCA0MSAwLTI5LjljMC0xMSA5LTIwIDIwLTIwczIwIDkgMjAgMjBsMCA5NmMwIDguOC01LjggMTYuNi0xNC4yIDE5LjFzLTE3LjUtLjctMjIuNC04bC0yNy40LTQxIDAgMjkuOWMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC05NmMwLTguOCA1LjgtMTYuNiAxNC4yLTE5LjFzMTcuNSAuNyAyMi40IDh6TTEzMiAxNDRsMCA2NGMwIDYuNiA1LjQgMTIgMTIgMTJzMTItNS40IDEyLTEybDAtNjRjMC0xMSA5LTIwIDIwLTIwczIwIDkgMjAgMjBsMCA2NGMwIDI4LjctMjMuMyA1Mi01MiA1MnMtNTItMjMuMy01Mi01MmwwLTY0YzAtMTEgOS0yMCAyMC0yMHMyMCA5IDIwIDIweiJdCiAgICB9OwogICAgZmFDbG9jazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzMzksICJjbG9jay1mb3VyIl0sICJmMDE3IiwgIk0yNTYgMGEyNTYgMjU2IDAgMSAxIDAgNTEyIDI1NiAyNTYgMCAxIDEgMC01MTJ6TTIzMiAxMjBsMCAxMzZjMCA4IDQgMTUuNSAxMC43IDIwbDk2IDY0YzExIDcuNCAyNS45IDQuNCAzMy4zLTYuN3M0LjQtMjUuOS02LjctMzMuM0wyODAgMjQzLjIgMjgwIDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHoiXQogICAgfTsKICAgIGZhQ2xvY2tGb3VyMiA9IGZhQ2xvY2syOwogICAgZmFCb29rID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyMTJdLCAiZjAyZCIsICJNMzg0IDUxMkw5NiA1MTJjLTUzIDAtOTYtNDMtOTYtOTZMMCA5NkMwIDQzIDQzIDAgOTYgMEw0MDAgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDI4OGMwIDIwLjktMTMuNCAzOC43LTMyIDQ1LjNsMCA2Ni43YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwek05NiAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjU2IDAgMC02NC0yNTYgMHptMzItMjMyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNzYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTI0IDcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNzYgMHoiXQogICAgfTsKICAgIGZhRmFjZUxhdWdoV2luazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1sYXVnaC13aW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxhdWdoLXdpbmsiXSwgImY1OWMiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xMDEuNiAzMTRjLTMuNy0xMy43IDcuNS0yNiAyMS43LTI2bDI2NS40IDBjMTQuMiAwIDI1LjQgMTIuMyAyMS43IDI2LTE4LjUgNjgtODAuNiAxMTgtMTU0LjQgMTE4UzEyMCAzODIgMTAxLjYgMzE0ek0xNDQgMTkyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2NCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwYy0xMSAwLTIwIDktMjAgMjB6Il0KICAgIH07CiAgICBmYUxhdWdoV2luazIgPSBmYUZhY2VMYXVnaFdpbmsyOwogICAgZmFDbG91ZE1lYXRiYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLW1lYXRiYWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3M2IiLCAiTTAgMjI0YzAgNTMgNDMgOTYgOTYgOTZsMjYuOSAwYzMuNS0xMi4xIDEwLjEtMjMuMyAxOS4yLTMyLjRsMS40LTEuNGMxNS0xNSAzNS4zLTIyLjkgNTYuMS0yMi4yIDE0LjItMTUuMSAzNC4yLTIzLjkgNTUuNC0yMy45bDIgMGMyMS4xIDAgNDEuMSA4LjggNTUuNCAyMy45IDIwLjgtLjYgNDEuMSA3LjMgNTYuMSAyMi4ybDEuNCAxLjRjOS4yIDkuMiAxNS43IDIwLjQgMTkuMiAzMi40bDI2LjkgMGM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NmMtLjUgMC0xLjEgMC0xLjYgMCAxLjEtNS4yIDEuNi0xMC41IDEuNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MC0yNC4zIDAtNDYuMSAxMC45LTYwLjggMjgtMTguNy0zNS43LTU2LjEtNjAtOTkuMi02MC02MS45IDAtMTEyIDUwLjEtMTEyIDExMiAwIDcuMSAuNyAxNC4xIDEuOSAyMC44LTM4LjMgMTIuNi02NS45IDQ4LjctNjUuOSA5MS4yek0xNTYuNSA0MjQuM2M5LjUgNi4zIDE0LjIgMTcuNyAxMS45IDI4LjgtMS44IDkuMiAxIDE4LjcgNy43IDI1LjNsMS40IDEuNGM2LjYgNi42IDE2LjEgOS41IDI1LjMgNy43IDExLjEtMi4yIDIyLjUgMi41IDI4LjggMTEuOSA1LjIgNy44IDE0IDEyLjUgMjMuMyAxMi41bDIgMGM5LjQgMCAxOC4xLTQuNyAyMy4zLTEyLjUgNi4zLTkuNSAxNy43LTE0LjIgMjguOC0xMS45IDkuMiAxLjggMTguNy0xIDI1LjMtNy43bDEuNC0xLjRjNi42LTYuNiA5LjUtMTYuMSA3LjctMjUuMy0yLjItMTEuMSAyLjUtMjIuNSAxMS45LTI4LjggNy44LTUuMiAxMi41LTE0IDEyLjUtMjMuM2wwLTJjMC05LjQtNC43LTE4LjEtMTIuNS0yMy4zLTkuNS02LjMtMTQuMi0xNy43LTExLjktMjguOCAxLjgtOS4yLTEtMTguNy03LjctMjUuM2wtMS40LTEuNGMtNi42LTYuNi0xNi4xLTkuNS0yNS4zLTcuNy0xMS4xIDIuMi0yMi41LTIuNS0yOC44LTExLjktNS4yLTcuOC0xNC0xMi41LTIzLjMtMTIuNWwtMiAwYy05LjQgMC0xOC4xIDQuNy0yMy4zIDEyLjUtNi4zIDkuNS0xNy43IDE0LjItMjguOCAxMS45LTkuMi0xLjgtMTguNyAxLTI1LjMgNy43bC0xLjQgMS40Yy02LjYgNi42LTkuNSAxNi4xLTcuNyAyNS4zIDIuMiAxMS4xLTIuNSAyMi41LTExLjkgMjguOC03LjggNS4yLTEyLjUgMTQtMTIuNSAyMy4zbDAgMmMwIDkuNCA0LjcgMTguMSAxMi41IDIzLjN6TTQ4IDQ0OGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bTQxNiAwYTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnoiXQogICAgfTsKICAgIGZhQ2hhcnRBcmVhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYXJ0LWFyZWEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYXJlYS1jaGFydCJdLCAiZjFmZSIsICJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMzZjMCA4LjggNy4yIDE2IDE2IDE2bDQwMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDgwIDQ4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnpNMjQwIDk2YzYuNyAwIDEzLjEgMi44IDE3LjcgNy44TDMyOC44IDE4MS4zIDM3NSAxMzVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNjQgNjRjNC41IDQuNSA3IDEwLjYgNyAxN2wwIDExMmMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMzA0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMTEyYzAtNiAyLjMtMTEuOCA2LjMtMTYuMmw4OC05NmM0LjUtNSAxMS03LjggMTcuNy03Ljh6Il0KICAgIH07CiAgICBmYUFyZWFDaGFydCA9IGZhQ2hhcnRBcmVhOwogICAgZmFSdXBpYWhTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJ1cGlhaC1zaWduIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUyM2QiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsODAgMGM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NCAwIDU0LjMtMzAgMTAxLjUtNzQuNCAxMjYuMWw0MSAxMzYuN2M1LjEgMTYuOS00LjUgMzQuOC0yMS41IDM5LjhzLTM0LjgtNC41LTM5LjgtMjEuNUwxMjAuMSAzMTkuOGMtMi43IC4xLTUuNCAuMi04LjEgLjJsLTQ4IDAgMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OEwwIDY0ek02NCAyNTZsNDggMGM0NC4yIDAgODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MGwtNDggMCAwIDE2MHptMjU2LTMybDgwIDBjNjEuOSAwIDExMiA1MC4xIDExMiAxMTJTNDYxLjkgNDQ4IDQwMCA0NDhsLTQ4IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptODAgMTYwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4bC00OCAwIDAgOTYgNDggMHoiXQogICAgfTsKICAgIGZhVGV4dFdpZHRoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRleHQtd2lkdGgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjAzNSIsICJNNDAgMEMxNy45IDAgMCAxNy45IDAgNDBMMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgMTI4IDAgMCAxNjAtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTE2MCAxMjggMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC01NmMwLTIyLjEtMTcuOS00MC00MC00MEw0MCAwem03OC42IDQwNi42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOS40LTkuNCAyMjkuNSAwLTkuNCA5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5LjQgOS40LTIyOS41IDAgOS40LTkuNHoiXQogICAgfTsKICAgIGZhU2F0ZWxsaXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNhdGVsbGl0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODc1Ml0sICJmN2JmIiwgIk0xOTkgN2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw4OS40IDg5LjQgNTUtNTVjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsNDggNDhjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTU1IDU1IDg5LjQgODkuNGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtOTYgOTZjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwbC04OS40LTg5LjQtMTUuNSAxNS41YzExLjQgMjQuNiAxNy44IDUyIDE3LjggODAuOSAwIDMxLjctNy43IDYxLjUtMjEuMiA4Ny44LTQuNyA5LTE2LjcgMTAuMy0yMy44IDMuMWwtOTYuMy05Ni4zLTYwIDYwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w2MC02MC05Ni4zLTk2LjNjLTcuMi03LjItNS45LTE5LjIgMy4xLTIzLjggMjYuMy0xMy42IDU2LjItMjEuMiA4Ny44LTIxLjIgMjguOSAwIDU2LjMgNi40IDgwLjkgMTcuOEwxOTIuNCAyMjYuMyAxMDMgMTM3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOUwxOTkgN3ptMTcgNTAuOWwtNjIuMSA2Mi4xIDcyLjQgNzIuNCA2Mi4xLTYyLjEtNzIuNC03Mi40ek0zOTIgMzU4LjFsNjIuMS02Mi4xLTcyLjQtNzIuNC02Mi4xIDYyLjEgNzIuNCA3Mi40eiJdCiAgICB9OwogICAgZmFNYWduaWZ5aW5nR2xhc3NNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYWduaWZ5aW5nLWdsYXNzLW1pbnVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNlYXJjaC1taW51cyJdLCAiZjAxMCIsICJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NkMyOTYuMyA0MDEuMSAyNTMuOSA0MTYgMjA4IDQxNiA5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMCA0MTYgOTMuMSA0MTYgMjA4ek0xMzYgMTg0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXQogICAgfTsKICAgIGZhU2VhcmNoTWludXMgPSBmYU1hZ25pZnlpbmdHbGFzc01pbnVzOwogICAgZmFQZW9wbGVHcm91cCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW9wbGUtZ3JvdXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUzMyIsICJNMjU2IDBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6bTk2IDMxMmMwIDI1LTEyLjcgNDctMzIgNTkuOWwwIDkyLjFjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTIuMUMxNzIuNyAzNTkgMTYwIDMzNyAxNjAgMzEybDAtNDBjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDQwek05NiAzMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnptMTYgMjQwbDAgMzJjMCAzMi41IDEyLjEgNjIuMSAzMiA4NC43bDAgNzUuM2MwIDEuMiAwIDIuNSAuMSAzLjctOC41IDcuNi0xOS43IDEyLjMtMzIuMSAxMi4zbC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTU2LjZDMTIuOSAzNjQuNCAwIDM0My43IDAgMzIwbDAtMzJjMC01MyA0My05NiA5Ni05NiAxMi43IDAgMjQuOCAyLjUgMzUuOSA2LjktMTIuNiAyMS40LTE5LjkgNDYuNC0xOS45IDczLjF6TTM2OCA0NjRsMC03NS4zYzE5LjktMjIuNSAzMi01Mi4yIDMyLTg0LjdsMC0zMmMwLTI2LjctNy4zLTUxLjYtMTkuOS03My4xIDExLjEtNC41IDIzLjItNi45IDM1LjktNi45IDUzIDAgOTYgNDMgOTYgOTZsMCAzMmMwIDIzLjctMTIuOSA0NC40LTMyIDU1LjRsMCA1Ni42YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0xMi4zIDAtMjMuNi00LjYtMzIuMS0xMi4zIDAtMS4yIC4xLTIuNSAuMS0zLjd6TTQxNiAzMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnoiXQogICAgfTsKICAgIGZhU3F1YXJlQmluYXJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1iaW5hcnkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTY5YiIsICJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTE0NCA0Yy0yNC4zIDAtNDQgMTkuNy00NCA0NGwwIDQ4YzAgMjQuMyAxOS43IDQ0IDQ0IDQ0bDMyIDBjMjQuMyAwIDQ0LTE5LjcgNDQtNDRsMC00OGMwLTI0LjMtMTkuNy00NC00NC00NGwtMzIgMHptLTQgNDRjMC0yLjIgMS44LTQgNC00bDMyIDBjMi4yIDAgNCAxLjggNCA0bDAgNDhjMCAyLjItMS44IDQtNCA0bC0zMiAwYy0yLjIgMC00LTEuOC00LTRsMC00OHptMTQwLTQ0Yy0xMSAwLTIwIDktMjAgMjAgMCA5LjcgNi45IDE3LjcgMTYgMTkuNmwwIDc2LjRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC05NmMwLTExLTktMjAtMjAtMjBsLTE2IDB6TTEzMiAyOTZjMCA5LjcgNi45IDE3LjcgMTYgMTkuNmwwIDc2LjRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC05NmMwLTExLTktMjAtMjAtMjBsLTE2IDBjLTExIDAtMjAgOS0yMCAyMHptOTYgMjRsMCA0OGMwIDI0LjMgMTkuNyA0NCA0NCA0NGwzMiAwYzI0LjMgMCA0NC0xOS43IDQ0LTQ0bDAtNDhjMC0yNC4zLTE5LjctNDQtNDQtNDRsLTMyIDBjLTI0LjMgMC00NCAxOS43LTQ0IDQ0em00NC00bDMyIDBjMi4yIDAgNCAxLjggNCA0bDAgNDhjMCAyLjItMS44IDQtNCA0bC0zMiAwYy0yLjIgMC00LTEuOC00LTRsMC00OGMwLTIuMiAxLjgtNCA0LTR6Il0KICAgIH07CiAgICBmYU1hc2tzVGhlYXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXNrcy10aGVhdGVyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTE3LCAidGhlYXRlci1tYXNrcyJdLCAiZjYzMCIsICJNLTUgMTE4TDIzLjUgMjc5LjdjMTQgNzkuNSA3Ni4zIDE0MS44IDE1NS44IDE1NS44bDEyLjcgMi4yYy0xNi41LTI4LjYtMjcuMS02MC43LTMwLjYtOTQuNWwtMjQuMSA0LjNjLTkuNyAxLjctMTguOC01LjgtMTYuOS0xNS41IDQuOC0yNC43IDE5LjEtNDYuNiAzOS43LTYwLjlsMC03NC42Yy0xLjQgLjgtMyAxLjMtNC43IDEuNmwtNjMgMTEuMWMtOC43IDEuNS0xNy4zLTQuNC0xNS45LTEzLjEgMy4xLTE5LjYgMTguNC0zNiAzOS4xLTM5LjcgMTcuMi0zIDMzLjkgMy41IDQ0LjYgMTUuOGwwLTIyLjdjMC0yMi41IDYuOS01Mi40IDMyLjMtNzMuNCAyNi0yMS41IDY3LjctNDMuOSAxMjQuOS01NC4yLTMwLjUtMTYuMy04Ni4zLTMyLTE2My44LTE4LjQtODAuMyAxNC4yLTEyOCA1MC4xLTE1MC4xIDc2LjEtOSAxMC41LTEwLjggMjQuOS04LjQgMzguNXpNMjA4IDEzOC43bDAgMTc0LjhjMCA4MC43IDUwLjUgMTUyLjkgMTI2LjQgMTgwLjRMMzYyLjEgNTA0YzE0LjEgNS4xIDI5LjYgNS4xIDQzLjcgMEw0MzMuNiA0OTRDNTA5LjUgNDY2LjQgNTYwIDM5NC4zIDU2MCAzMTMuNWwwLTE3NC44YzAtNi45LTIuMS0xMy44LTctMTguNi0yMi42LTIyLjUtNzguMi01Ni0xNjktNTZzLTE0Ni40IDMzLjYtMTY5IDU2Yy00LjkgNC45LTcgMTEuNy03IDE4LjZ6bTY2LjEgMTg3LjFjLTEuNC03IDctMTEgMTIuNy02LjYgMjYuOSAyMC42IDYwLjYgMzIuOSA5Ny4yIDMyLjlzNzAuMi0xMi4zIDk3LjItMzIuOWM1LjctNC40IDE0LjEtLjQgMTIuNyA2LjYtMTAuMSA1MS40LTU1LjUgOTAuMy0xMDkuOSA5MC4zcy05OS44LTM4LjgtMTA5LjktOTAuM3ptLjUtMTAxLjVDMjgxLjIgMjA1LjUgMjk5IDE5MiAzMjAgMTkyczM4LjkgMTMuNSA0NS40IDMyLjNjMi45IDguNC00LjUgMTUuNy0xMy40IDE1LjdsLTY0IDBjLTguOCAwLTE2LjMtNy40LTEzLjQtMTUuN3pNNDgwIDI0MGwtNjQgMGMtOC44IDAtMTYuMy03LjQtMTMuNC0xNS43IDYuNS0xOC44IDI0LjQtMzIuMyA0NS40LTMyLjNzMzguOSAxMy41IDQ1LjQgMzIuM2MyLjkgOC40LTQuNSAxNS43LTEzLjQgMTUuN3oiXQogICAgfTsKICAgIGZhVGhlYXRlck1hc2tzID0gZmFNYXNrc1RoZWF0ZXI7CiAgICBmYUNhcnRQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcnQtcGx1cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjE3IiwgIk0wIDhDMC01LjMgMTAuNy0xNiAyNC0xNmw0NS4zIDBjMjcuMSAwIDUwLjMgMTkuNCA1NS4xIDQ2bC40IDIgNDEyLjcgMGMyMCAwIDM1LjEgMTguMiAzMS40IDM3LjlMNTM3LjggMjM1LjhjLTUuNyAzMC4zLTMyLjEgNTIuMi02Mi45IDUyLjJsLTMwMy42IDAgNS4xIDI4LjNjMi4xIDExLjQgMTIgMTkuNyAyMy42IDE5LjdMNDU2IDMzNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjU1LjkgMGMtMzQuOCAwLTY0LjYtMjQuOS03MC44LTU5LjFMNzcuMiAzOC42Yy0uNy0zLjgtNC02LjYtNy45LTYuNkwyNCAzMkMxMC43IDMyIDAgMjEuMyAwIDh6TTE2MCA0NjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMjI0IDBhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMzM2IDc4LjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMzMuNi0zMy42IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzMuNiAwIDAgMzMuNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzMuNiAzMy42IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMzLjYgMCAwLTMzLjZjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYUhhbmRzQXNsSW50ZXJwcmV0aW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLWFzbC1pbnRlcnByZXRpbmciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiYW1lcmljYW4tc2lnbi1sYW5ndWFnZS1pbnRlcnByZXRpbmciLCAiYXNsLWludGVycHJldGluZyIsICJoYW5kcy1hbWVyaWNhbi1zaWduLWxhbmd1YWdlLWludGVycHJldGluZyJdLCAiZjJhMyIsICJNMTU2LjYgNDYuM2M3LjktMTUuOCAxLjUtMzUtMTQuMy00Mi45cy0zNS0xLjUtNDIuOSAxNC4zTDEzLjUgMTg5LjRDNC42IDIwNy4yIDAgMjI2LjggMCAyNDYuN0wwIDI1NmMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOGw4MCAwIDAtLjNjMzUuMi0yLjcgNjUuNC0yMi44IDgyLjEtNTEuNyA4LjgtMTUuMyAzLjYtMzQuOS0xMS43LTQzLjdzLTM0LjktMy42LTQzLjcgMTEuN2MtNyAxMi0xOS45IDIwLTM0LjcgMjAtMjIuMSAwLTQwLTE3LjktNDAtNDBzMTcuOS00MCA0MC00MGMxNC44IDAgMjcuNyA4IDM0LjcgMjAgOC44IDE1LjMgMjguNCAyMC41IDQzLjcgMTEuN3MyMC41LTI4LjQgMTEuNy00My43Yy0xMi44LTIyLjEtMzMuNi0zOS4xLTU4LjQtNDcuMWw4MC44LTIyYzE3LTQuNiAyNy4xLTIyLjIgMjIuNS0zOS4zcy0yMi4yLTI3LjEtMzkuMy0yMi41bC0xMDAuNyAyNy41IDgxLjYtNjhjMTMuNi0xMS4zIDE1LjQtMzEuNSA0LjEtNDUuMVMyNDkuMS0zLjkgMjM1LjUgNy40bC0xMDEuOSA4NC45IDIzLTQ2ek00ODMuNCA0NjUuN2MtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDg1LjktMTcxLjdjOC45LTE3LjggMTMuNS0zNy40IDEzLjUtNTcuMmwwLTkuM2MwLTcwLjctNTcuMy0xMjgtMTI4LTEyOGwtODAgMCAwIC4zYy0zNS4yIDIuNy02NS40IDIyLjgtODIuMSA1MS43LTguOSAxNS4zLTMuNiAzNC45IDExLjcgNDMuN3MzNC45IDMuNiA0My43LTExLjdjNy0xMiAxOS45LTIwIDM0LjctMjAgMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDBjLTE0LjggMC0yNy43LTgtMzQuNy0yMC04LjktMTUuMy0yOC40LTIwLjUtNDMuNy0xMS43cy0yMC41IDI4LjQtMTEuNyA0My43YzEyLjggMjIuMSAzMy42IDM5LjEgNTguNCA0Ny4xbC04MC44IDIyYy0xNy4xIDQuNi0yNy4xIDIyLjItMjIuNSAzOS4zczIyLjIgMjcuMSAzOS4zIDIyLjVsMTAwLjctMjcuNS04MS42IDY4Yy0xMy42IDExLjMtMTUuNCAzMS41LTQuMSA0NS4xczMxLjUgMTUuNCA0NS4xIDQuMWwxMDEuOS04NC45LTIzIDQ2eiJdCiAgICB9OwogICAgZmFBbWVyaWNhblNpZ25MYW5ndWFnZUludGVycHJldGluZyA9IGZhSGFuZHNBc2xJbnRlcnByZXRpbmc7CiAgICBmYUFzbEludGVycHJldGluZyA9IGZhSGFuZHNBc2xJbnRlcnByZXRpbmc7CiAgICBmYUhhbmRzQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcgPSBmYUhhbmRzQXNsSW50ZXJwcmV0aW5nOwogICAgZmFUYWJsZUNlbGxzUm93VW5sb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlLWNlbGxzLXJvdy11bmxvY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTY5MSIsICJNMjU2IDIyNGwwIDE5MiA2NCAwIDAtMTkyLTY0IDB6bTI1Ni03OWMtNDYuNyA1LjgtODUuNiAzNi44LTEwMi43IDc5bC0yNS4zIDAgMCA5MC44Yy0xMC4xIDE1LjItMTYgMzMuNC0xNiA1My4xbDAgOTZjMCA1LjUgLjUgMTAuOSAxLjMgMTYuMUwxMjggNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEw2NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDQ5ek0xMjggMjI0bDAgMTkyIDY0IDAgMC0xOTItNjQgMHptNDMyIDQ4Yy0uMS0xNy42LTE0LjQtMzEuOS0zMi0zMS45LTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDcuOSA5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODAgNDQuMiAwIDc5LjkgMzUuOCA4MCA3OS45bC00OCAweiJdCiAgICB9OwogICAgZmFSb2NrZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9ja2V0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxMzUiLCAiTTEyOCAzMjBMMjQuNSAzMjBjLTI0LjkgMC00MC4yLTI3LjEtMjcuNC00OC41TDUwIDE4My4zQzU4LjcgMTY4LjggNzQuMyAxNjAgOTEuMiAxNjBsOTUgMGM3Ni4xLTEyOC45IDE4OS42LTEzNS40IDI2NS41LTEyNC4zIDEyLjggMS45IDIyLjggMTEuOSAyNC42IDI0LjYgMTEuMSA3NS45IDQuNiAxODkuNC0xMjQuMyAyNjUuNWwwIDk1YzAgMTYuOS04LjggMzIuNS0yMy4zIDQxLjJsLTg4LjIgNTIuOWMtMjEuMyAxMi44LTQ4LjUtMi42LTQ4LjUtMjcuNEwxOTIgMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0uMSAwek00MDAgMTYwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il0KICAgIH07CiAgICBmYVNocmltcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaHJpbXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk0MjRdLCAiZTQ0OCIsICJNNzIgMzJDMzIuMiAzMiAwIDY0LjIgMCAxMDQgMCAxNDEuOSAyOS4zIDE3Mi45IDY2LjQgMTc1LjggNzcuNiAyNTcuMiAxNDcuNCAzMjAgMjMyIDMyMGw1NiAwIDAtMTkyLTIxNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNFM1OC43IDgwIDcyIDgwbDM4NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDcyIDMyek0yMjQgNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDcyIDAgMC03Mi4yLTY0LjEtMjIuNGMtMTIuNS00LjQtMjYuMiAyLjItMzAuNiAxNC43czIuMiAyNi4yIDE0LjcgMzAuNmw0LjUgMS42QzIzMyA0MzMuOSAyMjQgNDQzLjkgMjI0IDQ1NnptMTI4IDIzLjNjMzYuNC0zLjMgNjkuNS0xNy42IDk2LjEtMzkuNmwtODYuNS0zNC42Yy0zIDEuOC02LjIgMy4yLTkuNiA0LjNsMCA2OS45ek00NzIuNiA0MTVjMjQuNi0zMC4zIDM5LjQtNjguOSAzOS40LTExMSAwLTEyLjMtMS4zLTI0LjMtMy43LTM1LjlMMzgyLjggMzU1LjFjLjggMy40IDEuMiA3IDEuMiAxMC42IDAgNC42LS43IDktMS45IDEzLjFMNDcyLjYgNDE1ek0zMzYgMTI4bC0xNiAwIDAgMTkyIDE4LjMgMGM5LjkgMCAxOS4xIDMuMiAyNi42IDguNWwxMzMuNS05Mi40QzQ3MS44IDE3Mi42IDQwOS4xIDEyOCAzMzYgMTI4ek0xNjggMTkyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il0KICAgIH07CiAgICBmYVRlbmdlU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW5nZS1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbODM3NiwgInRlbmdlIl0sICJmN2Q3IiwgIk0wIDU2QzAgNDIuNyAxMC43IDMyIDI0IDMybDMzNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDgwQzEwLjcgODAgMCA2OS4zIDAgNTZ6TTAgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMjggMCAwIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI1Ni0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYVRlbmdlID0gZmFUZW5nZVNpZ247CiAgICBmYUhvdXNlQ2hpbW5leU1lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtY2hpbW5leS1tZWRpY2FsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNsaW5pYy1tZWRpY2FsIl0sICJmN2YyIiwgIk0yMzQuMiA4LjZjMTIuMy0xMS40IDMxLjMtMTEuNCA0My41IDBMMzY4IDkyLjMgMzY4IDgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMDEuNSAzNy44IDM1LjFjOS42IDkgMTIuOCAyMi45IDggMzUuMVM0OTMuMiAyNzIgNDgwIDI3MmwtMTYgMCAwIDE3NmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMjg4IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOHpNMjI0IDI0OGwwIDQwLTQwIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0MCAwIDAgNDBjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNDAgNDAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTQwIDAgMC00MGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnoiXQogICAgfTsKICAgIGZhQ2xpbmljTWVkaWNhbCA9IGZhSG91c2VDaGltbmV5TWVkaWNhbDsKICAgIGZhVXNlcnNTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2Vycy1zbGFzaCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMDczIiwgIk03My0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMyOS43LS4zIDM5IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUwzMjEuOCAyMjRjNTYuNi0xIDEwMi4yLTQ3LjIgMTAyLjItMTA0IDAtNTcuNC00Ni42LTEwNC0xMDQtMTA0LTU2LjggMC0xMDMgNDUuNi0xMDQgMTAyLjJMNzMtMjQuOXpNNTEyIDI4OGMtMTcuMiAwLTMzLjcgMy40LTQ4LjcgOS42bDE3MCAxNzBjNC4yLTUuNCA2LjctMTIuMiA2LjctMTkuNmwwLTMyYzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4ek01OS45IDk3LjdjLTIxLjUgMTIuNS0zNS45IDM1LjctMzUuOSA2Mi4zIDAgMzkuOCAzMi4yIDcyIDcyIDcyIDI2LjYgMCA0OS44LTE0LjQgNjIuMy0zNS45TDU5LjkgOTcuN3pNMjUwLjIgMjg4QzE5Ni44IDMxMy45IDE2MCAzNjguNyAxNjAgNDMybDAgMTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjUwLjIgMC0xOTItMTkyek0xMjggMjg4QzU3LjMgMjg4IDAgMzQ1LjMgMCA0MTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw4Ni43IDBjLTQuMy05LjgtNi43LTIwLjYtNi43LTMybDAtMTZjMC01My4yIDIwLTEwMS44IDUyLjktMTM4LjYtMTEuNy0zLjUtMjQuMS01LjQtMzYuOS01LjR6TTYxNiAxNjBhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAweiJdCiAgICB9OwogICAgZmFQYXBlclBsYW5lMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYXBlci1wbGFuZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYxOTEzXSwgImYxZDgiLCAiTTUzNi40LTI2LjNjOS44LTMuNSAyMC42LTEgMjggNi4zczkuOCAxOC4yIDYuMyAyOGwtMTc4IDQ5Ni45Yy01IDEzLjktMTguMSAyMy4xLTMyLjggMjMuMS0xNC4yIDAtMjctOC42LTMyLjMtMjEuN2wtNjQuMi0xNThjLTQuNS0xMS0yLjUtMjMuNiA1LjItMzIuNmw5NC41LTExMi40YzUuMS02LjEgNC43LTE1LS45LTIwLjZzLTE0LjYtNi0yMC42LS45TDIyOS4yIDI3Ni4xYy05LjEgNy42LTIxLjYgOS42LTMyLjYgNS4yTDM4LjEgMjE2LjhjLTEzLjEtNS4zLTIxLjctMTguMS0yMS43LTMyLjMgMC0xNC43IDkuMi0yNy44IDIzLjEtMzIuOGw0OTYuOS0xNzh6Il0KICAgIH07CiAgICBmYUJvb2tBdGxhcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLWF0bGFzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImF0bGFzIl0sICJmNTU4IiwgIk05NiA1MTJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02Ni43YzE4LjYtNi42IDMyLTI0LjQgMzItNDUuM2wwLTI4OGMwLTI2LjUtMjEuNS00OC00OC00OEw5NiAwQzQzIDAgMCA0MyAwIDk2TDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZ6TTY0IDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNTYgMCAwIDY0LTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMzEwLjYgMjA4TDI3OSAyMDhjLTEuNCAyMy4xLTYgNDQuMi0xMi42IDYxLjIgMjIuNy0xMi41IDM5LjQtMzQuOCA0NC4yLTYxLjJ6bS0xNzMuMSAwYzQuOCAyNi40IDIxLjUgNDguNyA0NC4yIDYxLjItNi43LTE3LTExLjItMzgtMTIuNi02MS4ybC0zMS42IDB6bTc2LjQgNTVjNC41IDkuNiA4LjIgMTMuOCAxMC4yIDE1LjUgMi0xLjcgNS43LTUuOCAxMC4yLTE1LjUgNi4yLTEzLjQgMTEuMS0zMi41IDEyLjctNTVsLTQ1LjggMGMxLjYgMjIuNSA2LjUgNDEuNiAxMi43IDU1em0tMTIuNy04N2w0NS44IDBjLTEuNi0yMi41LTYuNS00MS42LTEyLjctNTUtNC41LTkuNi04LjItMTMuOC0xMC4yLTE1LjUtMiAxLjctNS43IDUuOC0xMC4yIDE1LjUtNi4yIDEzLjQtMTEuMSAzMi41LTEyLjcgNTV6bTEwOS41IDBjLTQuOC0yNi40LTIxLjUtNDguNy00NC4yLTYxLjIgNi43IDE3IDExLjIgMzggMTIuNiA2MS4ybDMxLjYgMHpNMTY5IDE3NmMxLjQtMjMuMSA2LTQ0LjIgMTIuNi02MS4yLTIyLjcgMTIuNS0zOS40IDM0LjgtNDQuMiA2MS4ybDMxLjYgMHpNOTYgMTkyYTEyOCAxMjggMCAxIDEgMjU2IDAgMTI4IDEyOCAwIDEgMSAtMjU2IDB6Il0KICAgIH07CiAgICBmYUF0bGFzID0gZmFCb29rQXRsYXM7CiAgICBmYVRhYmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwY2UiLCAiTTI1NiAxNjBsMCA5NiAxMjggMCAwLTk2LTEyOCAwem0tNjQgMGwtMTI4IDAgMCA5NiAxMjggMCAwLTk2ek0wIDMyMEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC05NnptMzg0IDBsLTEyOCAwIDAgOTYgMTI4IDAgMC05NnpNMTkyIDQxNmwwLTk2LTEyOCAwIDAgOTYgMTI4IDB6Il0KICAgIH07CiAgICBmYUhlYXJ0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE1MywgMTI4MTU0LCAxMjgxNTUsIDEyODE1NiwgMTI4NDIwLCAxMjkyOTMsIDEyOTI5NCwgMTI5NTA1LCA5ODI5LCAxMDA4NCwgNjE1NzhdLCAiZjAwNCIsICJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDExMi4yLTEzOS45IDI0Mi41LTIxMi45IDI5OC4yLTEyLjQgOS40LTI3LjYgMTQuMS00My4xIDE0LjFzLTMwLjgtNC42LTQzLjEtMTQuMUMxMzkuOSA0MTAuMiAwIDI3OS45IDAgMTY3LjdsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6Il0KICAgIH07CiAgICBmYUNpcmNsZUNoZXZyb25VcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtY2hldnJvbi11cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjaGV2cm9uLWNpcmNsZS11cCJdLCAiZjEzOSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM3NyAyNzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtODctODctODcgODdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMMjM5IDE2N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMEwzNzcgMjcxeiJdCiAgICB9OwogICAgZmFDaGV2cm9uQ2lyY2xlVXAgPSBmYUNpcmNsZUNoZXZyb25VcDsKICAgIGZhQmF0dGVyeUhhbGYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmF0dGVyeS1oYWxmIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImJhdHRlcnktMyJdLCAiZjI0MiIsICJNNTI4IDEyOGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyMjRjMCA4LjgtNy4yIDE2LTE2IDE2bC00MTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjI0YzAtOC44IDcuMi0xNiAxNi0xNmw0MTYgMHpNMTEyIDY0Yy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDIyNGMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0MTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsMC00OGMwLTQ0LjItMzUuOC04MC04MC04MEwxMTIgNjR6bTU2IDExMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFCYXR0ZXJ5MyA9IGZhQmF0dGVyeUhhbGY7CiAgICBmYUZvbnRBd2Vzb21lMyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb250LWF3ZXNvbWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjUwMSwgNjI2OTQsICJmb250LWF3ZXNvbWUtZmxhZyIsICJmb250LWF3ZXNvbWUtbG9nby1mdWxsIl0sICJmMmI0IiwgIk05MS43IDk2QzEwNi4zIDg2LjggMTE2IDcwLjUgMTE2IDUyIDExNiAyMy4zIDkyLjcgMCA2NCAwUzEyIDIzLjMgMTIgNTJjMCAxNi43IDcuOCAzMS41IDIwIDQxbDAgNDE5IDY0IDAgMC02NCAzNzMuNiAwYzE0LjYgMCAyNi40LTExLjggMjYuNC0yNi40IDAtMy43LS44LTcuMy0yLjMtMTAuN0w0MzIgMjcyIDQ5My43IDEzMy4xYzEuNS0zLjQgMi4zLTcgMi4zLTEwLjcgMC0xNC42LTExLjgtMjYuNC0yNi40LTI2LjRMOTEuNyA5NnoiXQogICAgfTsKICAgIGZhRm9udEF3ZXNvbWVGbGFnMyA9IGZhRm9udEF3ZXNvbWUzOwogICAgZmFGb250QXdlc29tZUxvZ29GdWxsMyA9IGZhRm9udEF3ZXNvbWUzOwogICAgZmFIYW5kY3VmZnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZGN1ZmZzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZjgiLCAiTTMyMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyIDMyLTE0LjMgMzItMzJ6TTE5MiA2NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTE1MiA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNmMwIDEgLjEgMS45IC4yIDIuOS03NC43IDI2LjMtMTI4LjIgOTcuNS0xMjguMiAxODEuMSAwIDEwNiA4NiAxOTIgMTkyIDE5MnMxOTItODYgMTkyLTE5MmMwLTgzLjctNTMuNS0xNTQuOC0xMjguMi0xODEuMSAuMS0uOSAuMi0xLjkgLjItMi45bDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTgwIDB6TTY0IDMyMGExMjggMTI4IDAgMSAxIDI1NiAwIDEyOCAxMjggMCAxIDEgLTI1NiAwem00NDggMGMwIDY2LjktNTEuMyAxMjEuOC0xMTYuNiAxMjcuNS0xNC4zIDIyLjgtMzIuNCA0My4xLTUzLjQgNTkuOSAxMy41IDMgMjcuNiA0LjYgNDIgNC42IDEwNiAwIDE5Mi04NiAxOTItMTkyIDAtODMuNy01My41LTE1NC44LTEyOC4yLTE4MS4xIC4xLS45IC4yLTEuOSAuMi0yLjlsMC0xNmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtODAgMGMtMTIuMyAwLTIyLjQgOS4yLTIzLjggMjEuMSAzMC4zIDE5LjIgNTYuMSA0NSA3NS4yIDc1LjQgNjUuNCA1LjggMTE2LjYgNjAuNiAxMTYuNiAxMjcuNXpNMzg0IDY0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhSGF0Q293Ym95U2lkZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYXQtY293Ym95LXNpZGUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjhjMSIsICJNNjQwIDM4OC4zYzAgMTYuOS03LjEgMzIuMi0xOC40IDQzLjFsLTM1LTIzLjMtMjkyLjctMTk1LjFjLTM2LjEtMjQuMS03OC42LTM2LjktMTIyLTM2LjlsLTMuOSAwYy0yLjcgMC01LjQgMC04IC4xbDIyLjItMTAwYzUuNy0yNS44IDI4LjYtNDQuMSA1NS00NC4xIDEyLjIgMCAyNC4xIDQgMzMuOCAxMS4zbDQuNyAzLjVjMjYuMyAxOS43IDYyLjQgMTkuNyA4OC42IDBsNC43LTMuNWM5LjgtNy4zIDIxLjYtMTEuMyAzMy44LTExLjMgMjYuNCAwIDQ5LjMgMTguMyA1NSA0NC4xbDMzIDE0OC41QzU3NC41IDIzMi4zIDY0MCAzMDIuNiA2NDAgMzg4LjN6TTE3MS45IDIyNGMzMy45IDAgNjcuMSAxMCA5NS40IDI4LjlMNTYwIDQ0OCA1NiA0NDhjLTMwLjkgMC01Ni0yNS4xLTU2LTU2IDAtOTIuOCA3NS4yLTE2OCAxNjgtMTY4bDMuOSAweiJdCiAgICB9OwogICAgZmFJbmR1c3RyeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbmR1c3RyeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjc1IiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQxNiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjc5LjhjMC0xOC4yLTE5LjQtMjkuNy0zNS40LTIxLjFsLTE1Ni42IDg0LjMgMC02My4yYzAtMTguMi0xOS40LTI5LjctMzUuNC0yMS4xTDEyOCAyMTUuNCAxMjggNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMzJ6Il0KICAgIH07CiAgICBmYUxpbmVzTGVhbmluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaW5lcy1sZWFuaW5nIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU1MWUiLCAiTTE5MC40IDc0LjFjNS42LTE2LjgtMy41LTM0LjktMjAuMi00MC41cy0zNC45IDMuNS00MC41IDIwLjJsLTEyOCAzODRjLTUuNiAxNi44IDMuNSAzNC45IDIwLjIgNDAuNXMzNC45LTMuNSA0MC41LTIwLjJsMTI4LTM4NHptNzAuOS00MS43Yy0xNy40LTIuOS0zMy45IDguOS0zNi44IDI2LjNsLTY0IDM4NGMtMi45IDE3LjQgOC45IDMzLjkgMjYuMyAzNi44czMzLjktOC45IDM2LjgtMjYuM2w2NC0zODRjMi45LTE3LjQtOC45LTMzLjktMjYuMy0zNi44ek0zNTIgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zODRjMC0xNy43LTE0LjMtMzItMzItMzJ6Il0KICAgIH07CiAgICBmYVBhc3Nwb3J0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhc3Nwb3J0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1YWIiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHpNOTYgNDA4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTI3OC42IDIwOGMtNC44IDI2LjQtMjEuNSA0OC43LTQ0LjIgNjEuMiA2LjctMTcgMTEuMi0zOCAxMi42LTYxLjJsMzEuNiAwem0tMTczLjEgMGwzMS42IDBjMS40IDIzLjEgNiA0NC4yIDEyLjYgNjEuMi0yMi43LTEyLjUtMzkuNC0zNC44LTQ0LjItNjEuMnptNzYuNCA1NWMtNi4yLTEzLjQtMTEuMS0zMi41LTEyLjctNTVsNDUuOCAwYy0xLjYgMjIuNS02LjUgNDEuNi0xMi43IDU1LTQuNSA5LjYtOC4yIDEzLjgtMTAuMiAxNS41LTItMS43LTUuNy01LjgtMTAuMi0xNS41em0wLTE0MmM0LjUtOS42IDguMi0xMy44IDEwLjItMTUuNSAyIDEuNyA1LjcgNS44IDEwLjIgMTUuNSA2LjIgMTMuNCAxMS4xIDMyLjUgMTIuNyA1NWwtNDUuOCAwYzEuNi0yMi41IDYuNS00MS42IDEyLjctNTV6bTk2LjcgNTVMMjQ3IDE3NmMtMS40LTIzLjEtNi00NC4yLTEyLjYtNjEuMiAyMi43IDEyLjUgMzkuNCAzNC44IDQ0LjIgNjEuMnpNMTM3IDE3NmwtMzEuNiAwYzQuOC0yNi40IDIxLjUtNDguNyA0NC4yLTYxLjItNi43IDE3LTExLjIgMzgtMTIuNiA2MS4yem0xODMgMTZhMTI4IDEyOCAwIDEgMCAtMjU2IDAgMTI4IDEyOCAwIDEgMCAyNTYgMHoiXQogICAgfTsKICAgIGZhSW5maW5pdHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaW5maW5pdHkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFs4NzM0LCA5ODU0XSwgImY1MzQiLCAiTTAgMjU2YzAtODguNCA3MS42LTE2MCAxNjAtMTYwIDUwLjQgMCA5Ny44IDIzLjcgMTI4IDY0bDMyIDQyLjcgMzItNDIuN2MzMC4yLTQwLjMgNzcuNi02NCAxMjgtNjQgODguNCAwIDE2MCA3MS42IDE2MCAxNjBTNTY4LjQgNDE2IDQ4MCA0MTZjLTUwLjQgMC05Ny44LTIzLjctMTI4LTY0bC0zMi00Mi43LTMyIDQyLjdjLTMwLjIgNDAuMy03Ny42IDY0LTEyOCA2NC04OC40IDAtMTYwLTcxLjYtMTYwLTE2MHptMjgwIDBsLTQzLjItNTcuNmMtMTguMS0yNC4yLTQ2LjYtMzguNC03Ni44LTM4LjQtNTMgMC05NiA0My05NiA5NnM0MyA5NiA5NiA5NmMzMC4yIDAgNTguNy0xNC4yIDc2LjgtMzguNEwyODAgMjU2em04MCAwbDQzLjIgNTcuNmMxOC4xIDI0LjIgNDYuNiAzOC40IDc2LjggMzguNCA1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NmMtMzAuMiAwLTU4LjcgMTQuMi03Ni44IDM4LjRMMzYwIDI1NnoiXQogICAgfTsKICAgIGZhQ2xvbmUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb25lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNGQiLCAiTTI4OCA0NDhsLTIyNCAwIDAtMjI0IDQ4IDAgMC02NC00OCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTQ4LTY0IDAgMCA0OHptLTY0LTk2bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDIyNCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDIyNGMwIDM1LjMgMjguNyA2NCA2NCA2NHoiXQogICAgfTsKICAgIGZhRm9yd2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb3J3YXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTE5M10sICJmMDRlIiwgIk0zNzEuNyA0My4xQzM2MC4xIDMyIDM0MyAyOC45IDMyOC4zIDM1LjJTMzA0IDU2IDMwNCA3MmwwIDEzNi4zLTE3Mi4zLTE2NS4xQzEyMC4xIDMyIDEwMyAyOC45IDg4LjMgMzUuMlM2NCA1NiA2NCA3MmwwIDM2OGMwIDE2IDkuNiAzMC41IDI0LjMgMzYuOHMzMS44IDMuMiA0My40LTcuOUwzMDQgMzAzLjcgMzA0IDQ0MGMwIDE2IDkuNiAzMC41IDI0LjMgMzYuOHMzMS44IDMuMiA0My40LTcuOWwxOTItMTg0YzcuOS03LjUgMTIuMy0xOCAxMi4zLTI4LjlzLTQuNS0yMS4zLTEyLjMtMjguOWwtMTkyLTE4NHoiXQogICAgfTsKICAgIGZhTSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTA5XSwgIjRkIiwgIk0yMi43IDMzLjRjMTMuNS00LjEgMjguMSAxLjEgMzUuOSAxMi45TDIyNCAyOTQuMyAzODkuNCA0Ni4zYzcuOC0xMS43IDIyLjQtMTcgMzUuOS0xMi45UzQ0OCA0OS45IDQ0OCA2NGwwIDM4NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI3OC4zLTEzMy40IDIwMC4xYy01LjkgOC45LTE1LjkgMTQuMi0yNi42IDE0LjJzLTIwLjctNS4zLTI2LjYtMTQuMkw2NCAxNjkuNyA2NCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OEwwIDY0QzAgNDkuOSA5LjIgMzcuNSAyMi43IDMzLjR6Il0KICAgIH07CiAgICBmYVJvYWRTcGlrZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9hZC1zcGlrZXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU2OCIsICJNNjQgMTE2LjhjMC0xNS44IDIwLjUtMjIgMjkuMy04LjlsOTguNyAxNDggMC0xMzkuMmMwLTE1LjggMjAuNS0yMiAyOS4zLTguOWw5OC43IDE0OCAwLTEzOS4yYzAtMTUuOCAyMC41LTIyIDI5LjMtOC45bDk4LjcgMTQ4IDAtMTM5LjJjMC0xNS44IDIwLjUtMjIgMjkuMy04LjlMNjA2LjggMzAyLjJjMTQuMiAyMS4zLTEuMSA0OS44LTI2LjYgNDkuOEw2NCAzNTIgNjQgMTE2Ljh6TTMyIDM4NGw1NzYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYU1vdW50YWluID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vdW50YWluIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTU2XSwgImY2ZmMiLCAiTTI1Ni41IDBjMTQuNyAwIDI4LjIgOC4xIDM1LjIgMjFsMjE2IDQwMGM2LjcgMTIuNCA2LjQgMjcuNC0uOCAzOS41LTcuMiAxMi4xLTIwLjMgMTkuNS0zNC4zIDE5LjVsLTQzMiAwYy0xNC4xIDAtMjcuMS03LjQtMzQuMy0xOS41cy03LjUtMjcuMS0uOC0zOS41bDIxNi00MDAgMi45LTQuNkMyMzEuNyA2LjIgMjQzLjYgMCAyNTYuNSAwek0xNzAuNCAyNDkuOWwyNi44IDI2LjhjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNDMuMy00My4zYzYtNiAxNC4xLTkuNCAyMi42LTkuNGw0Mi44IDAtNzIuMS0xMzMuNS04Ni4xIDE1OS40eiJdCiAgICB9OwogICAgZmFDaGVzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDM5IiwgIk0xNjggNTZsMCA0MC03OC4xIDBjLTE0LjMgMC0yNS45IDExLjYtMjUuOSAyNS45IDAgNCAuOSA4IDIuNyAxMS42bDMzLjQgNjYuOGMtMTEuNCAxLjgtMjAuMiAxMS43LTIwLjIgMjMuNyAwIDEzLjMgMTAuNyAyNCAyNCAyNGw1LjYgMC0xMy42IDEzNi01Ni4yIDcwLjNjLTUgNi4zLTcuOCAxNC4xLTcuOCAyMi4yIDAgMTkuNiAxNS45IDM1LjUgMzUuNSAzNS41bDI0OC45IDBjMTkuNiAwIDM1LjUtMTUuOSAzNS41LTM1LjUgMC04LjEtMi43LTE1LjktNy44LTIyLjJMMjg4IDM4NCAyNzQuNCAyNDggMjgwIDI0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNCAwLTExLjktOC43LTIxLjktMjAuMi0yMy43bDMzLjQtNjYuOGMxLjgtMy42IDIuNy03LjYgMi43LTExLjYgMC0xNC4zLTExLjYtMjUuOS0yNS45LTI1LjlsLTc4LjEgMCAwLTQwIDE2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMjQ1LjMgOCAyMzIgOGwtMTYgMCAwLTE2YzAtMTMuMy0xMC43LTI0LTI0LTI0UzE2OC0yMS4zIDE2OC04bDAgMTYtMTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNiAwek0zMjUuOCAyNzkuNmw4LjUgODUuNSA0Ny40IDU5LjIgNC4yIDUuN2M5LjIgMTMuNyAxNC4xIDI5LjkgMTQuMSA0Ni41IDAgMTIuNy0yLjggMjQuOC03LjkgMzUuNWw4My4xIDBjMjAuMyAwIDM2LjgtMTYuNSAzNi44LTM2LjggMC03LjMtMi4yLTE0LjQtNi4yLTIwLjRsLTI1LjgtMzguNyAwLTY0IDEzLjMtMTMuM2MxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDUxMiAxOTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxNi0zMiAwIDAtMTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDIyLjQtMTAuMiA0Mi40LTI2LjIgNTUuNnoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLXRocmVlLXF1YXJ0ZXJzIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbInRlbXBlcmF0dXJlLTMiLCAidGhlcm1vbWV0ZXItMyIsICJ0aGVybW9tZXRlci10aHJlZS1xdWFydGVycyJdLCAiZjJjOCIsICJNMTYwIDBDMTA3IDAgNjQgNDMgNjQgOTZsMCAxNjQuN0MzNC41IDI4NyAxNiAzMjUuNCAxNiAzNjggMTYgNDQ3LjUgODAuNSA1MTIgMTYwIDUxMnMxNDQtNjQuNSAxNDQtMTQ0YzAtNDIuNi0xOC41LTgxLTQ4LTEwNy4zTDI1NiA5NmMwLTUzLTQzLTk2LTk2LTk2em02NCAzNjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0yNi45IDE2LjUtNDkuOSA0MC01OS4zTDEzNiAxNTJjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDE1Ni43YzIzLjUgOS41IDQwIDMyLjUgNDAgNTkuM3oiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmUzID0gZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnM7CiAgICBmYVRoZXJtb21ldGVyMyA9IGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzOwogICAgZmFUaGVybW9tZXRlclRocmVlUXVhcnRlcnMgPSBmYVRlbXBlcmF0dXJlVGhyZWVRdWFydGVyczsKICAgIGZhQiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbOThdLCAiNDIiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjggMC00Ni41LTI0LjgtODcuMy02Mi0xMDkuNyAxOC43LTIyLjMgMzAtNTEgMzAtODIuMyAwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEwzMiAzMnpNMTYwIDIyNGwtOTYgMCAwLTEyOCA5NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0ek02NCAyODhsMTI4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRsLTEyOCAwIDAtMTI4eiJdCiAgICB9OwogICAgZmFTaGllbGRWaXJ1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGllbGQtdmlydXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA2YyIsICJNMjUzLjQgMi45QzI0OS4yIDEgMjQ0LjcgMCAyNDAgMHMtOS4yIDEtMTMuNCAyLjlMMzguMyA4Mi44Yy0yMiA5LjMtMzguNCAzMS0zOC4zIDU3LjIgLjUgOTkuMiA0MS4zIDI4MC43IDIxMy42IDM2My4yIDE2LjcgOCAzNi4xIDggNTIuOCAwIDE3Mi40LTgyLjUgMjEzLjItMjY0IDIxMy42LTM2My4yIC4xLTI2LjItMTYuMy00Ny45LTM4LjMtNTcuMkwyNTMuNCAyLjl6TTI0MCAxMjhjMTMuMyAwIDI0IDEwLjcgMjQgMjQgMCAyMi45IDI3LjcgMzQuNCA0My45IDE4LjIgOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy0xNi4yIDE2LjItNC43IDQzLjkgMTguMiA0My45IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yMi45IDAtMzQuNCAyNy43LTE4LjIgNDMuOSA5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwYy0xNi4yLTE2LjItNDMuOS00LjctNDMuOSAxOC4yIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMjIuOS0yNy43LTM0LjQtNDMuOS0xOC4yLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjljMTYuMi0xNi4yIDQuNy00My45LTE4LjItNDMuOS0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzIyLjkgMCAzNC40LTI3LjcgMTguMi00My45LTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGMxNi4yIDE2LjIgNDMuOSA0LjcgNDMuOS0xOC4yIDAtMTMuMyAxMC43LTI0IDI0LTI0ek0yMDggMjY0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODggNDBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhTGl0ZWNvaW5TaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpdGVjb2luLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTFkMyIsICJNMTI4IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzY0IDQ2LjMgNjQgNjRsMCAxNTcuOS0zOC42IDExYy0xMi43IDMuNi0yMC4xIDE2LjktMTYuNSAyOS43czE2LjkgMjAuMSAyOS43IDE2LjVMNjQgMjcxLjggNjQgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDI1NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yMjQgMCAwLTE2Mi41IDEzNC42LTM4LjVjMTIuNy0zLjYgMjAuMS0xNi45IDE2LjUtMjkuN3MtMTYuOS0yMC4xLTI5LjctMTYuNUwxMjggMjAzLjYgMTI4IDY0eiJdCiAgICB9OwogICAgZmFEaWNlRDYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGljZS1kNiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNmQxIiwgIk0yMjQuNCA4LjNDMjQ0LTIuOCAyNjgtMi44IDI4Ny42IDguM2wxNzYgOTkuN2MyMCAxMS40IDMyLjQgMzIuNiAzMi40IDU1LjdsMCAxOTcuNGMwIDIzLTEyLjQgNDQuMy0zMi40IDU1LjdsLTE3NiA5OS43Yy0xOS42IDExLjEtNDMuNiAxMS4xLTYzLjEgMGwtMTc2LTk5LjdDMjguNCA0MDUuNSAxNiAzODQuMiAxNiAzNjEuMmwwLTE5Ny40YzAtMjMgMTIuNC00NC4zIDMyLjQtNTUuN2wxNzYtOTkuN3pNMTAyLjYgMTU1LjZjLTguOC0zLjEtMTguOCAuMy0yMy44IDguNnMtMy4yIDE4LjcgMy42IDI1bDMuMiAyLjQgMTUwLjIgOTAuMiAwIDE0OC43YzAgMTEgOSAyMCAyMCAyMCAxMSAwIDIwLTkgMjAtMjBsMC0xNDguNyAxNTAuMy05MC4yYzkuNS01LjcgMTIuNi0xOCA2LjktMjcuNHMtMTgtMTIuNS0yNy40LTYuOWwtMTQ5LjcgODkuOC0xNDkuNy04OS44LTMuNy0xLjd6Il0KICAgIH07CiAgICBmYUdyaXBMaW5lc1ZlcnRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdyaXAtbGluZXMtdmVydGljYWwiLAogICAgICBpY29uOiBbMTkyLCA1MTIsIFtdLCAiZjdhNSIsICJNNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkw2NCA2NHptMTI4IDBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM4NHoiXQogICAgfTsKICAgIGZhR29sZkJhbGxUZWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ29sZi1iYWxsLXRlZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJnb2xmLWJhbGwiXSwgImY0NTAiLCAiTTI5OC41IDM4NC4xYzEyLjEgMS4yIDIxLjUgMTEuNSAyMS41IDIzLjlzLTkuNCAyMi42LTIxLjUgMjMuOWwtMi41IC4xLTgwIDAgMCA4OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTg4LTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0IDAtMTIuNCA5LjQtMjIuNiAyMS41LTIzLjlsMi41LS4xIDIwOCAwIDIuNSAuMXpNMTkyIDBjMTA2IDAgMTkyIDg2IDE5MiAxOTIgMCA1Ny40LTI1LjIgMTA4LjgtNjUuMSAxNDRMNjUuMSAzMzZDMjUuMiAzMDAuOCAwIDI0OS40IDAgMTkyIDAgODYgODYgMCAxOTIgMHptMzIgMjQwYy03LjcgMC0xNC4yIDUuNS0xNS43IDEyLjhsLS42IDYuNGMtMS4zIDYuMy02LjIgMTEuMi0xMi41IDEyLjVsLTYuNCAuNmMtNy4zIDEuNS0xMi44IDgtMTIuOCAxNS43IDAgOC44IDcuMiAxNiAxNiAxNiAyNi41IDAgNDgtMjEuNSA0OC00OCAwLTguOC03LjItMTYtMTYtMTZ6bTY0LTY0Yy03LjcgMC0xNC4yIDUuNS0xNS43IDEyLjhsLS42IDYuNGMtMS4zIDYuMy02LjIgMTEuMi0xMi41IDEyLjVsLTYuNCAuNmMtNy4zIDEuNS0xMi44IDgtMTIuOCAxNS43IDAgOC44IDcuMiAxNiAxNiAxNiAyNi41IDAgNDgtMjEuNSA0OC00OCAwLTguOC03LjItMTYtMTYtMTZ6bS04MC0xNmMtNy43IDAtMTQuMiA1LjUtMTUuNyAxMi44bC0uNiA2LjRjLTEuMyA2LjMtNi4yIDExLjItMTIuNSAxMi41bC02LjQgLjZjLTcuMyAxLjUtMTIuOCA4LTEyLjggMTUuNyAwIDguOCA3LjIgMTYgMTYgMTYgMjYuNSAwIDQ4LTIxLjUgNDgtNDggMC04LjgtNy4yLTE2LTE2LTE2eiJdCiAgICB9OwogICAgZmFHb2xmQmFsbCA9IGZhR29sZkJhbGxUZWU7CiAgICBmYUhleGFnb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGV4YWdvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzExMDQzXSwgImYzMTIiLCAiTTMzLjUgMjIwLjNjLTEyLjcgMjIuMi0xMi43IDQ5LjQgMCA3MS41bDk2LjIgMTY4LjFjMTIuOCAyMi40IDM2LjcgMzYuMiA2Mi41IDM2LjJsMTkxLjYgMGMyNS44IDAgNDkuNy0xMy44IDYyLjUtMzYuMmw5Ni4yLTE2OC4xYzEyLjctMjIuMiAxMi43LTQ5LjQgMC03MS41TDQ0Ni4zIDUyLjJDNDMzLjUgMjkuOCA0MDkuNiAxNiAzODMuOCAxNkwxOTIuMiAxNmMtMjUuOCAwLTQ5LjcgMTMuOC02Mi41IDM2LjJMMzMuNSAyMjAuM3oiXQogICAgfTsKICAgIGZhRm9sZGVyT3BlbjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9sZGVyLW9wZW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgxOTQsIDEyODQ0OSwgNjE3MTddLCAiZjA3YyIsICJNNTYgMjI1LjZMMzIuNCAyOTYuMiAzMi40IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDEzOC43IDBjMTMuOCAwIDI3LjMgNC41IDM4LjQgMTIuOGwzOC40IDI4LjhjNS41IDQuMiAxMi4zIDYuNCAxOS4yIDYuNGwxMTcuMyAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTYtMzY1LjQgMGMtNDEuMyAwLTc4IDI2LjQtOTEuMSA2NS42ek00NzcuOCA0NDhMOTkgNDQ4Yy0zMi44IDAtNTUuOS0zMi4xLTQ1LjUtNjMuMmw0OC0xNDRDMTA4IDIyMS4yIDEyNi40IDIwOCAxNDcgMjA4bDM3OC44IDBjMzIuOCAwIDU1LjkgMzIuMSA0NS41IDYzLjJsLTQ4IDE0NGMtNi41IDE5LjYtMjQuOSAzMi44LTQ1LjUgMzIuOHoiXQogICAgfTsKICAgIGZhS2FhYmEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAia2FhYmEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzMzFdLCAiZjY2YiIsICJNMjU2IDUxLjNMOTIuOCAxMTIuNCAyNDcuNSAxNzEuMWM1LjUgMi4xIDExLjUgMi4xIDE3IDBMNDE5LjIgMTEyLjQgMjU2IDUxLjN6TTAgMTI5LjNjMC0yMCAxMi40LTM3LjkgMzEuMS00NC45bDIwOC03OGMxMC45LTQuMSAyMi44LTQuMSAzMy43IDBsMjA4IDc4YzE4LjcgNyAzMS4xIDI0LjkgMzEuMSA0NC45bDAgMzYtMjUzLjIgOTZjLTEuOCAuNy0zLjggLjctNS43IDBsLTI1My4yLTk2IDAtMzZ6bTAgMTQwbDAtNTIuNyAyMzYuMSA4OS42YzEyLjggNC45IDI2LjkgNC45IDM5LjcgMGwyMzYuMS04OS42IDAgNTIuNy0xMjggNDguNiAwIDUxLjMgMTI4LTQ4LjYgMCA2Mi4yYzAgMjAtMTIuNCAzNy45LTMxLjEgNDQuOWwtMjA4IDc4Yy0xMC45IDQuMS0yMi44IDQuMS0zMy43IDBsLTIwOC03OEMxMi40IDQyMC43IDAgNDAyLjcgMCAzODIuN2wwLTYyLjIgMTI4IDQ4LjYgMC01MS4zLTEyOC00OC42ek0yMzYuMSA0MTAuMWMxMi44IDQuOSAyNi45IDQuOSAzOS43IDBsNjAuMS0yMi44IDAtNTEuMy03Ny4yIDI5LjNjLTEuOCAuNy0zLjggLjctNS43IDBsLTc3LjItMjkuMyAwIDUxLjMgNjAuMSAyMi44eiJdCiAgICB9OwogICAgZmFIYW5kSG9sZGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWhvbGRpbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRiZCIsICJNNjYuNyAzODRsNDIuNS00Mi41YzI0LTI0IDU2LjYtMzcuNSA5MC41LTM3LjVMMzUyIDMwNGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIuNiAwIDExOS43LTg4LjJjMTcuOC0xMy4xIDQyLjgtOS4zIDU1LjkgOC41czkuMyA0Mi44LTguNSA1NS45TDQzMy4xIDQ4NS41Yy0yMy40IDE3LjItNTEuNiAyNi41LTgwLjcgMjYuNUwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMzQuNyAweiJdCiAgICB9OwogICAgZmFTaW5nbGVRdW90ZVJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNpbmdsZS1xdW90ZS1yaWdodCIsCiAgICAgIGljb246IFsxOTIsIDUxMiwgW10sICJlODFjIiwgIk02NCA0MTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOCAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2bDAtOC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMzZjMCA2Ni4zLTUzLjcgMTIwLTEyMCAxMjBsLTggMHoiXQogICAgfTsKICAgIGZhQm90dGxlRHJvcGxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3R0bGUtZHJvcGxldCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlNGM0IiwgIk04MCAwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxMDMuM2M2NC45IDIwLjQgMTEyIDgxIDExMiAxNTIuN2wwIDE5MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1NDRjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjg4YzAtNzEuNiA0Ny4xLTEzMi4zIDExMi0xNTIuN0wxMTIgMzJDOTQuMyAzMiA4MCAxNy43IDgwIDB6bTgwIDQxNmMzNS4zIDAgNjQtMzIuNCA2NC02NCAwLTIxLjItMjguOS02NC41LTQ3LjktOTAuNi04LjEtMTEuMS0yNC4yLTExLjEtMzIuMyAwLTE5IDI2LjEtNDcuOSA2OS40LTQ3LjkgOTAuNiAwIDMxLjYgMjguNyA2NCA2NCA2NHoiXQogICAgfTsKICAgIGZhV2luZG93TWluaW1pemUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndpbmRvdy1taW5pbWl6ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQ2OV0sICJmMmQxIiwgIk0wIDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFDaGV2cm9uUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hldnJvbi1yaWdodCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzkwMDJdLCAiZjA1NCIsICJNMzExLjEgMjMzLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTE5MiAxOTJjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDI0My4yIDI1NiA3My45IDg2LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTkyIDE5MnoiXQogICAgfTsKICAgIGZhRWdnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVnZyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyOTM3MF0sICJmN2ZiIiwgIk0xOTIgNDk2Qzg2IDQ5NiAwIDM5NCAwIDI4OCAwIDE3NiA2NCAxNiAxOTIgMTZTMzg0IDE3NiAzODQgMjg4YzAgMTA2LTg2IDIwOC0xOTIgMjA4ek0xNTQuOCAxMzRjNi41LTYgNy0xNi4xIDEtMjIuNnMtMTYuMS03LTIyLjYtMWMtMjMuOSAyMS44LTQxLjEgNTIuNy01Mi4zIDg0LjItMTEuMiAzMS42LTE2LjkgNjUuMS0xNi45IDkzLjUgMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmMwLTI0LjUgNS01NC40IDE1LjEtODIuOCAxMC4xLTI4LjUgMjUtNTQuMSA0My43LTcxLjJ6Il0KICAgIH07CiAgICBmYUxhbmRtYXJrRG9tZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYW5kbWFyay1kb21lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxhbmRtYXJrLWFsdCJdLCAiZjc1MiIsICJNMjU2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyIDAgLjkgMCAxLjggLjEgMi42LTgwLjUgMTMuNC0xNDQgNzYuOS0xNTcuNSAxNTcuNEw2NCAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMCAxNjAtNTEuMiAzOC40QzQuNyA0NjAuNCAwIDQ2OS45IDAgNDgwIDAgNDk3LjcgMTQuMyA1MTIgMzIgNTEybDQ0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyIDAtMTAuMS00LjctMTkuNi0xMi44LTI1LjZMNDQ4IDQxNiA0NDggMjU2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yLjcgMGMtMTMuNS04MC40LTc3LTE0My45LTE1Ny41LTE1Ny40IC4xLS45IC4xLTEuNyAuMS0yLjYgMC0xNy43LTE0LjMtMzItMzItMzJ6bTgwIDI1Nmw2NCAwIDAgMTYwLTY0IDAgMC0xNjB6TTIyNCA0MTZsMC0xNjAgNjQgMCAwIDE2MC02NCAwek0xMTIgMjU2bDY0IDAgMCAxNjAtNjQgMCAwLTE2MHoiXQogICAgfTsKICAgIGZhTGFuZG1hcmtBbHQgPSBmYUxhbmRtYXJrRG9tZTsKICAgIGZhV29ybSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3b3JtIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU1OTkiLCAiTTIyNCA5NmMwLTUzIDQzLTk2IDk2LTk2bDM4LjQgMEM0MDcuOSAwIDQ0OCA0MC4xIDQ0OCA4OS42TDQ0OCAzNzZjMCA3NS4xLTYwLjkgMTM2LTEzNiAxMzZTMTc2IDQ1MS4xIDE3NiAzNzZsMC04MGMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGwwIDE2OGMwIDI2LjUtMjEuNSA0OC00OCA0OFMwIDQ5MC41IDAgNDY0TDAgMjk2YzAtNzUuMSA2MC45LTEzNiAxMzYtMTM2czEzNiA2MC45IDEzNiAxMzZsMCA4MGMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwbDAtMTg0LTMyIDBjLTUzIDAtOTYtNDMtOTYtOTZ6bTE0NC04YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYVVzZXJJbmp1cmVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItaW5qdXJlZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNzI4IiwgIk0yNDIuNyA4MEwzMzQgODBjLTEwLjctMjQuNi0yOS41LTQ0LjktNTIuOS01Ny42TDI0Mi43IDgwem0tLjktNzAuN0MyMzYgOC40IDIzMCA4IDIyNCA4IDE3NC44IDggMTMyLjUgMzcuNiAxMTQgODBsODAuNiAwIDQ3LjEtNzAuN3pNMjI0IDI0OGM2Ni4zIDAgMTIwLTUzLjcgMTIwLTEyMGwtMjQwIDBjMCA2Ni4zIDUzLjcgMTIwIDEyMCAxMjB6TTk4LjcgMzQxLjhDNDkuMyAzNzAuMiAxNiA0MjMuNSAxNiA0ODQuNiAxNiA0OTkuNyAyOC4zIDUxMiA0My40IDUxMmwxNTEgMC05NS44LTE3MC4yem00NS4xLTE3LjdsNDIuNyA3NS45IDg1LjUgMGM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDExLjQtMi40IDIyLjItNi43IDMybDU5LjIgMGMxNS4xIDAgMjcuNC0xMi4zIDI3LjQtMjcuNCAwLTkwLjktNzMuNy0xNjQuNi0xNjQuNi0xNjQuNmwtODYuOSAwYy0xMi42IDAtMjQuOSAxLjQtMzYuNyA0LjF6TTIxMy41IDQ0OGwzNiA2NCAyMi41IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTU4LjUgMHoiXQogICAgfTsKICAgIGZhU3RyaWtldGhyb3VnaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdHJpa2V0aHJvdWdoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwY2MiLCAiTTk2IDE1Ny41Qzk2IDg4LjIgMTUyLjIgMzIgMjIxLjUgMzJMMzY4IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDIyMS41IDk2Yy0zNCAwLTYxLjUgMjcuNS02MS41IDYxLjUgMCAzMSAyMy4xIDU3LjIgNTMuOSA2MWw0NC4xIDUuNSAyMjIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsODMuMSAwQzEwMyAyMDQuNiA5NiAxODEuOCA5NiAxNTcuNXpNMzQ5LjIgMzM2bDY1LjUgMGMuOSA2LjEgMS40IDEyLjIgMS40IDE4LjUgMCA2OS4zLTU2LjIgMTI1LjUtMTI1LjUgMTI1LjVMMTQ0IDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNDYuNSAwYzM0IDAgNjEuNS0yNy41IDYxLjUtNjEuNSAwLTYuNC0xLTEyLjctMi44LTE4LjV6Il0KICAgIH07CiAgICBmYUJsb2cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmxvZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzgxIiwgIk0yMjQgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjQgMTQ1LjggMCAyNjQgMTE4LjIgMjY0IDI2NCAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTExOS4zLTk2LjctMjE2LTIxNi0yMTYtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTgwIDk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjI0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDgtMjEuNS00OC00OC00OGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNjRjMC04LjggNy4yLTE2IDE2LTE2IDc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0UzI1NS41IDUxMiAxNzYgNTEyIDMyIDQ0Ny41IDMyIDM2OGwwLTIyNGMwLTI2LjUgMjEuNS00OCA0OC00OHptMTY4IDBjOTIuOCAwIDE2OCA3NS4yIDE2OCAxNjggMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC02Ni4zLTUzLjctMTIwLTEyMC0xMjAtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhU3RvcHdhdGNoMjAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3RvcHdhdGNoLTIwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwNmYiLCAiTTE2OC41IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDI1LjNjLTEwOCAxMS45LTE5MiAxMDMuNS0xOTIgMjE0LjcgMCAxMTkuMyA5Ni43IDIxNiAyMTYgMjE2czIxNi05Ni43IDIxNi0yMTZjMC0zOS44LTEwLjgtNzcuMS0yOS42LTEwOS4ybDI4LjItMjguMmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMjMuNCAyMy40Yy0zMi45LTMwLjItNzUuMi01MC4zLTEyMi01NS41bDAtMjUuMyAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMTIgMHptLTYwIDI0MGMwLTI4LjcgMjMuMy01MiA1Mi01MnM1MiAyMy4zIDUyIDUybDAgMy44YzAgMTEuNy0zLjIgMjMuMS05LjMgMzNsLTQzLjggNzEuMiAzMy4xIDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC01Ny44IDBjLTE0LjUgMC0yNi4yLTExLjctMjYuMi0yNi4yIDAtNC45IDEuMy05LjYgMy45LTEzLjhsNTYuNy05Mi4xYzIuMi0zLjYgMy40LTcuOCAzLjQtMTIuMWwwLTMuOGMwLTYuNi01LjQtMTItMTItMTJzLTEyIDUuNC0xMiAxMmMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjB6bTE4MC01MmMyOC43IDAgNTIgMjMuMyA1MiA1MmwwIDk2YzAgMjguNy0yMy4zIDUyLTUyIDUycy01Mi0yMy4zLTUyLTUybDAtOTZjMC0yOC43IDIzLjMtNTIgNTItNTJ6bS0xMiA1MmwwIDk2YzAgNi42IDUuNCAxMiAxMiAxMnMxMi01LjQgMTItMTJsMC05NmMwLTYuNi01LjQtMTItMTItMTJzLTEyIDUuNC0xMiAxMnoiXQogICAgfTsKICAgIGZhVHJ1Y2tQaWNrdXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stcGlja3VwIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NzYzXSwgImY2M2MiLCAiTTM2My44IDk2bDU3LjYgOTYtMTMzLjQgMCAwLTk2IDc1LjggMHpNNDk2IDE5Mkw0MTguNiA2My4xQzQwNy4xIDQzLjggMzg2LjIgMzIgMzYzLjggMzJMMjU2IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDEyOC0xNDQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMi40IDBjLS4yIDIuNi0uNCA1LjMtLjQgOCAwIDQ4LjYgMzkuNCA4OCA4OCA4OHM4OC0zOS40IDg4LTg4YzAtMi43LS4xLTUuNC0uNC04bDE2MC43IDBjLS4yIDIuNi0uNCA1LjMtLjQgOCAwIDQ4LjYgMzkuNCA4OCA4OCA4OHM4OC0zOS40IDg4LTg4YzAtMi43LS4xLTUuNC0uNC04bDMyLjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwek0xMTIgMzkyYTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6bTM3Ni00MGE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6Il0KICAgIH07CiAgICBmYVNlZWRsaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNlZWRsaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzkzLCAic3Byb3V0Il0sICJmNGQ4IiwgIk01MTIgMzJDNTEyIDE0MC4xIDQzNS40IDIzMC4zIDMzMy42IDI1MS40IDMyNS43IDE5My4zIDI5OS42IDE0MSAyNjEuMSAxMDAuNSAzMDEuMiA0MCAzNjkuOSAwIDQ0OCAwbDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTAgOTZDMCA3OC4zIDE0LjMgNjQgMzIgNjRsMzIgMGMxMjMuNyAwIDIyNCAxMDAuMyAyMjQgMjI0bDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwQzEwMC4zIDMyMCAwIDIxOS43IDAgOTZ6Il0KICAgIH07CiAgICBmYVNwcm91dCA9IGZhU2VlZGxpbmc7CiAgICBmYVRyYW5zZ2VuZGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyYW5zZ2VuZGVyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTg5NSwgInRyYW5zZ2VuZGVyLWFsdCJdLCAiZjIyNSIsICJNMTI4LTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDk3LjkgMzIgMTM2IDcwLjEgMTUxIDU1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtMTUgMTUgMTQuMiAxNC4yYzI3LjktMjMuOCA2NC4yLTM4LjIgMTAzLjgtMzguMiAzNi43IDAgNzAuNiAxMi40IDk3LjYgMzMuMkw0NjYuNyAzMiA0NDggMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTguNy04NC40IDg0LjRjMTMgMjMuMSAyMC40IDQ5LjkgMjAuNCA3OC4zIDAgNzcuNC01NSAxNDItMTI4IDE1Ni44bDAgMzUuMiAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC0zNS4yYy03My0xNC44LTEyOC03OS40LTEyOC0xNTYuOCAwLTMxLjQgOS02MC43IDI0LjctODUuNGwtMTYuNy0xNi43LTE1IDE1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDE1LTE1LTM4LjEtMzguMSAwIDMwLjFjMCAxNy43LTE0LjMgMzItMzIgMzJTMCAxMTMuNyAwIDk2TDAgMEMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwek0yODggMzM2YTk2IDk2IDAgMSAwIDAtMTkyIDk2IDk2IDAgMSAwIDAgMTkyeiJdCiAgICB9OwogICAgZmFUcmFuc2dlbmRlckFsdCA9IGZhVHJhbnNnZW5kZXI7CiAgICBmYVN0YXJIYWxmMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFyLWhhbGYiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MTczMV0sICJmMDg5IiwgIk0zMDQuMSA3LjZjMC0xMS4xLTcuNi0yMC43LTE4LjQtMjMuM3MtMjEuOSAyLjUtMjcgMTIuNEwxOTMuMSAxMjUuMyAzMy4yIDE1MC43Yy04LjkgMS40LTE2LjMgNy43LTE5LjEgMTYuM3MtLjUgMTggNS44IDI0LjRsMTE0LjQgMTE0LjUtMjUuMiAxNTkuOWMtMS40IDguOSAyLjMgMTcuOSA5LjYgMjMuMnMxNi45IDYuMSAyNSAyTDI5MSA0MTYuMWM4LTQuMSAxMy4xLTEyLjQgMTMuMS0yMS40bDAtMzg3LjF6Il0KICAgIH07CiAgICBmYVBob3RvRmlsbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwaG90by1maWxtIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbInBob3RvLXZpZGVvIl0sICJmODdjIiwgIk0xOTIgNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRMNTc2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTMyMCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTIyNHpNMzIwIDk2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTE1Ni41IDExLjVDNDcyLjEgMTAwLjQgNDY0LjQgOTYgNDU2IDk2cy0xNi4xIDQuNC0yMC41IDExLjVsLTU0IDg4LjMtMTcuOS0yNS42Yy00LjUtNi40LTExLjgtMTAuMi0xOS43LTEwLjJzLTE1LjIgMy44LTE5LjcgMTAuMmwtNTYgODBjLTUuMSA3LjMtNS44IDE2LjktMS42IDI0LjhTMjc5LjEgMjg4IDI4OCAyODhsMjU2IDBjOC43IDAgMTYuNy00LjcgMjAuOS0xMi4zczQuMS0xNi44LS41LTI0LjNsLTg4LTE0NHpNMTQ0IDEyOGwwIDE2MGMwIDYxLjkgNTAuMSAxMTIgMTEyIDExMmwxOTIgMCAwIDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxOTJjMC0zNS4zIDI4LjctNjQgNjQtNjRsODAgMHpNNTIgMTk2bDAgMjRjMCA4LjggNy4yIDE2IDE2IDE2bDI0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjRjMC04LjgtNy4yLTE2LTE2LTE2bC0yNCAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyNGMwIDguOCA3LjIgMTYgMTYgMTZsMjQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNGMwLTguOC03LjItMTYtMTYtMTZsLTI0IDB6bTAgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI0YzAgOC44IDcuMiAxNiAxNiAxNmwyNCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0YzAtOC44LTcuMi0xNi0xNi0xNmwtMjQgMHoiXQogICAgfTsKICAgIGZhUGhvdG9WaWRlbyA9IGZhUGhvdG9GaWxtOwogICAgZmFQdW1wTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwdW1wLW1lZGljYWwiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZTA2YSIsICJNOTYgMGwwIDgwIDEyOCAwIDAtMjQgNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNFMzMDkuMyA4IDI5NiA4bC03MiAwIDAtOGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMEMxMTAuMy0zMiA5Ni0xNy43IDk2IDB6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMTI4em02NCAxMjBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQwIDAgMCA0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDB6Il0KICAgIH07CiAgICBmYUZpcmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlyZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODI5M10sICJmMDZkIiwgIk0xNjAuNS0yNi40YzkuMy03LjggMjMtNy41IDMxLjkgLjkgMTIuMyAxMS42IDIzLjMgMjQuNCAzMy45IDM3LjQgMTMuNSAxNi41IDI5LjcgMzguMyA0NS4zIDY0LjIgNS4yLTYuOCAxMC0xMi44IDE0LjItMTcuOSAxLjEtMS4zIDIuMi0yLjcgMy4zLTQuMSA3LjktOS44IDE3LjctMjIuMSAzMC44LTIyLjEgMTMuNCAwIDIyLjggMTEuOSAzMC44IDIyLjEgMS4zIDEuNyAyLjYgMy4zIDMuOSA0LjggMTAuMyAxMi40IDI0IDMwLjMgMzcuNyA1Mi40IDI3LjIgNDMuOSA1NS42IDEwNi40IDU1LjYgMTc2LjYgMCAxMjMuNy0xMDAuMyAyMjQtMjI0IDIyNFMwIDQxMS43IDAgMjg4YzAtOTEuMSA0MS4xLTE3MCA4MC41LTIyNSAxOS45LTI3LjcgMzkuNy00OS45IDU0LjYtNjUuMSA4LjItOC40IDE2LjUtMTYuNyAyNS41LTI0LjJ6TTIyNS43IDQxNmMyNS4zIDAgNDcuNy03IDY4LjgtMjEgNDIuMS0yOS40IDUzLjQtODguMiAyOC4xLTEzNC40LTQuNS05LTE2LTkuNi0yMi41LTJsLTI1LjIgMjkuM2MtNi42IDcuNi0xOC41IDcuNC0yNC43LS41LTE3LjMtMjIuMS00OS4xLTYyLjQtNjUuMy04My01LjQtNi45LTE1LjItOC0yMS41LTEuOS0xOC4zIDE3LjgtNTEuNSA1Ni44LTUxLjUgMTA0LjMgMCA2OC42IDUwLjYgMTA5LjIgMTEzLjcgMTA5LjJ6Il0KICAgIH07CiAgICBmYU1hZ25pZnlpbmdHbGFzc1BsdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFnbmlmeWluZy1nbGFzcy1wbHVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNlYXJjaC1wbHVzIl0sICJmMDBlIiwgIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTIwOCAxMTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDgtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwIDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQ4IDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhU2VhcmNoUGx1cyA9IGZhTWFnbmlmeWluZ0dsYXNzUGx1czsKICAgIGZhRmxhc2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmxhc2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjBjMyIsICJNMjg4IDBMMTI4IDBDMTEwLjMgMCA5NiAxNC4zIDk2IDMyczE0LjMgMzIgMzIgMzJMMTI4IDIxNS41IDcuNSA0MjYuM0MyLjYgNDM1IDAgNDQ0LjcgMCA0NTQuNyAwIDQ4Ni40IDI1LjYgNTEyIDU3LjMgNTEybDMzMy40IDBjMzEuNiAwIDU3LjMtMjUuNiA1Ny4zLTU3LjMgMC0xMC0yLjYtMTkuOC03LjUtMjguNEwzMjAgMjE1LjUgMzIwIDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyUzMzNy43IDAgMzIwIDBMMjg4IDB6TTE5MiAyMTUuNWwwLTE1MS41IDY0IDAgMCAxNTEuNWMwIDExLjEgMi45IDIyLjEgOC40IDMxLjhsNDEuNiA3Mi43LTE2NCAwIDQxLjYtNzIuN2M1LjUtOS43IDguNC0yMC42IDguNC0zMS44eiJdCiAgICB9OwogICAgZmFBbGlnblJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFsaWduLXJpZ2h0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwMzgiLCAiTTQ0OCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkwxOTIgOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6bTAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnpNMCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDQ4IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6Il0KICAgIH07CiAgICBmYUNhYmxlQ2FyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhYmxlLWNhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODY3MywgNTc1NTEsICJ0cmFtIl0sICJmN2RhIiwgIk0yODgtMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0xNjAgMjRhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMzIgMjg4YzAtMzUuMyAyOC43LTY0IDY0LTY0bDEzNiAwIDAtOTYuMi0xOTMuNCA1NS4zYy0xMi43IDMuNi0yNi0zLjctMjkuNy0xNi41czMuNy0yNiAxNi41LTI5LjdsMjI0LTY0IDAgMCAyMjQtNjRjMTIuNy0zLjYgMjYgMy43IDI5LjcgMTYuNXMtMy43IDI2LTE2LjUgMjkuN2wtMjA2LjYgNTkgMCAxMDkuOSAxMzYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE2MGMwIDM1LjMtMjguNyA2NC02NCA2NEw5NiA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTYwem04MCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsNTYgMCAwLTk2LTU2IDB6bTE4NCA5NmwwLTk2LTgwIDAgMCA5NiA4MCAwem00OCAwbDU2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2bC01NiAwIDAgOTZ6Il0KICAgIH07CiAgICBmYVRyYW0gPSBmYUNhYmxlQ2FyOwogICAgZmFLaXRNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImtpdC1tZWRpY2FsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImZpcnN0LWFpZCJdLCAiZjQ3OSIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTYgMCAwLTM4NC0xNiAwem02NCAwbDAgMzg0IDI1NiAwIDAtMzg0LTI1NiAwek00NDggNDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0xNiAwIDAgMzg0IDE2IDB6TTIyNCAxODRjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQwIDAgMCA0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDB6Il0KICAgIH07CiAgICBmYUZpcnN0QWlkID0gZmFLaXRNZWRpY2FsOwogICAgZmFHcmlwTGluZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3JpcC1saW5lcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmN2E0IiwgIk0zMiAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMjg4em0wLTEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAxNjB6Il0KICAgIH07CiAgICBmYUJ1cmdlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidXJnZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiaGFtYnVyZ2VyIl0sICJmODA1IiwgIk00OCAzODRjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDQ0LjIgMzUuOCA4MCA4MCA4MGwyODggMGM0NC4yIDAgODAtMzUuOCA4MC04MCAwLTguOC03LjItMTYtMTYtMTZMNDggMzg0ek0zMiAyMDJjMCAxMi4yIDkuOSAyMiAyMiAyMkw0NTggMjI0YzEyLjIgMCAyMi05LjkgMjItMjIgMC0xNy4yLTIuNi0zNC40LTEwLjgtNDkuNS0yMi4yLTQwLjgtODIuMy0xMjAuNS0yMTMuMi0xMjAuNVM2NSAxMTEuNiA0Mi44IDE1Mi41QzM0LjYgMTY3LjYgMzIgMTg0LjggMzIgMjAyek0wIDMwNGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAyNzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0yNTYgNzJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0xMjAgMTI4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTI0OC0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYUhhbWJ1cmdlciA9IGZhQnVyZ2VyOwogICAgZmFTbm93bWFuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNub3dtYW4iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFs5NzMxLCA5OTI0XSwgImY3ZDAiLCAiTTQwMyAyMTEuN2MzMi4yLTI0LjkgNTMtNjMuOSA1My0xMDcuNyAwLTc1LjEtNjAuOS0xMzYtMTM2LTEzNlMxODQgMjguOSAxODQgMTA0YzAgNDMuOSAyMC44IDgyLjkgNTMgMTA3LjctMzIuMiAxNi4zLTU5IDQxLjgtNzYuOCA3My4xTDExMiAyNjQuMiAxMTIgMjI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTkuNi0yMi41LTkuN2MtMTIuMi01LjItMjYuMyAuNC0zMS41IDEyLjZzLjQgMjYuMyAxMi42IDMxLjVjMzYuMSAxNS41IDc1LjkgMzIuNSAxMTkuNCA1MS4yLTMuOSAxNC45LTYgMzAuNi02IDQ2LjcgMCA3MCAzOS4xIDEzMC44IDk2LjYgMTYxLjkgNy45IDQuMyAxNi45IDYuMSAyNS45IDYuMWwxMjMgMGM5IDAgMTgtMS44IDI1LjktNi4xIDU3LjUtMzEuMSA5Ni42LTkyIDk2LjYtMTYxLjkgMC0xNi4yLTIuMS0zMS44LTYtNDYuNyA0My41LTE4LjcgODMuNC0zNS43IDExOS40LTUxLjIgMTIuMi01LjIgMTcuOC0xOS4zIDEyLjYtMzEuNXMtMTkuMy0xNy44LTMxLjUtMTIuNmwtMjIuNSA5LjcgMC0xOS42YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDAuMi00OC4yIDIwLjZjLTE3LjktMzEuMy00NC42LTU2LjgtNzYuOC03My4xek0yOTYgNDE2YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTI0LTEyMGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTI0OCA4MGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek0zNjggNTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0yOTIuMiAxNTkuM2MtMi43LTQuOC00LjItMTAuMi00LjItMTUuNyAwLTE3LjUgMTQuMi0zMS42IDMxLjYtMzEuNmwuOCAwYzE3LjUgMCAzMS42IDE0LjIgMzEuNiAzMS42IDAgNS41LTEuNCAxMC45LTQuMiAxNS43TDMyNyAxOTUuOGMtMy4xIDUuNC0xMC44IDUuNC0xMy45IDBsLTIwLjktMzYuNnoiXQogICAgfTsKICAgIGZhSG90ZWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG90ZWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NzZdLCAiZjU5NCIsICJNMTYgMjRDMTYgMTAuNyAyNi43IDAgNDAgMEw0NzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOCAwIDAgNDE2IDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw0MCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOCAwIDAtNDE2LTggMEMyNi43IDQ4IDE2IDM3LjMgMTYgMjR6bTIwOCA4OGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xMjggOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptOTYgMTEybDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTM1MiA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0xMTIgMjA4bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTI0MC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0yODggMzg0bDQzLjggMGM5LjkgMCAxNy41LTkgMTQtMTguMi0xMy44LTM2LjEtNDguOC02MS44LTg5LjctNjEuOHMtNzUuOSAyNS43LTg5LjcgNjEuOGMtMy41IDkuMiA0LjEgMTguMiAxNCAxOC4ybDQzLjggMCAwIDgwIDY0IDAgMC04MHoiXQogICAgfTsKICAgIGZhUHJpbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicHJpbnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0MjQsIDEyODQzOCwgOTExM10sICJmMDJmIiwgIk02NCA2NEM2NCAyOC43IDkyLjcgMCAxMjggMEwzNDEuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43bDQyLjUgNDIuNWMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zbDAgMzcuNS0zODQgMCAwLTgwek0wIDI1NmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTI1NiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZ6TTEyOCA0MTZsMCAzMiAyNTYgMCAwLTk2LTI1NiAwIDAgNjR6TTQ1NiAyNzJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhVm9sbGV5YmFsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2b2xsZXliYWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTUyLCAidm9sbGV5YmFsbC1iYWxsIl0sICJmNDVmIiwgIk01MTIgMjU4LjljLTIzLjQgOC00Ny44IDEzLjEtNzIuNiAxNS4xIDUuOS05OC42LTMwLjctMTkxLjEtOTQuOS0yNTguMyA5Ny44IDM2IDE2Ny41IDEzMCAxNjcuNSAyNDAuMyAwIDEgMCAxLjkgMCAyLjl6bS01LjkgNTJjLTUuMiAyMy43LTEzLjYgNDYuMi0yNC45IDY2LjktOTQuNyA1Mi4yLTIxNCA1MC0zMDguNC0xMy42IDIxLjctMzEuMyA0OS44LTU4LjkgODMuOC04MC41IDc5LjUgNDEuNiAxNjguNSA0OS4xIDI0OS41IDI3LjF6TTI3OS43IDI0MS42Yy0zLjctODkuNy00MS43LTE3MC41LTEwMS4zLTIyOS43IDIyLjMtNy4xIDQ2LTExLjIgNzAuNS0xMS45IDkyLjUgNTUuOSAxNTAuMyAxNjAuMyAxNDIuNCAyNzMuOC0zOC0zLjItNzUuOS0xMy43LTExMS42LTMyLjN6TTEzMC41IDMyLjhDMTQ5LjEgNDkuMSAxNjUuOCA2Ny43IDE3OS45IDg4LjIgOTEuNSAxMzIuMyAyOS43IDIxMC4zIDMuNyAyOTkuNSAxLjMgMjg1LjMgMCAyNzAuOCAwIDI1NiAwIDE2MC4yIDUyLjYgNzYuNyAxMzAuNSAzMi44em03My40IDk3YzE2LjMgMzQuNSAyNi4xIDcyLjYgMjcuOSAxMTIuOC03NS44IDQ4LTEyNi44IDEyMS4zLTE0OC4zIDIwMi41LTE3LjYtMTYuMS0zMy0zNC42LTQ1LjUtNTUgMi4xLTEwOC4xIDYzLjctMjEwLjQgMTY1LjktMjYwLjN6TTI1NiA1MTJjLTQ3LjcgMC05Mi4zLTEzLTEzMC41LTM1LjcgNC44LTI0LjMgMTIuNi00OCAyMy4yLTcwLjQgODIuNCA1NC40IDE4MC44IDY4LjkgMjcxIDQ3LTQ0LjQgMzctMTAxLjUgNTkuMi0xNjMuNyA1OS4yeiJdCiAgICB9OwogICAgZmFWb2xsZXliYWxsQmFsbCA9IGZhVm9sbGV5YmFsbDsKICAgIGZhVHJhZmZpY0xpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyYWZmaWMtbGlnaHQiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMjg2NzhdLCAiZjYzNyIsICJNNjQtMzJDMjguNy0zMiAwLTMuMyAwIDMyTDAgMzg0YzAgODguNCA3MS42IDE2MCAxNjAgMTYwczE2MC03MS42IDE2MC0xNjBsMC0zNTJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQtMzJ6bTk2IDM5MmMzMC45IDAgNTYgMjUuMSA1NiA1NnMtMjUuMSA1Ni01NiA1Ni01Ni0yNS4xLTU2LTU2IDI1LjEtNTYgNTYtNTZ6bTU2LTEwNGE1NiA1NiAwIDEgMSAtMTEyIDAgNTYgNTYgMCAxIDEgMTEyIDB6TTE2MCAxNTJhNTYgNTYgMCAxIDEgMC0xMTIgNTYgNTYgMCAxIDEgMCAxMTJ6Il0KICAgIH07CiAgICBmYVBsYW5lQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbmUtY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NTUiLCAiTTIzMiAyNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI3LjMgNzggNzEuNWMtNjkuMyAyOS0xMTggOTcuNC0xMTggMTc3LjIgMCA0OS4zIDE4LjYgOTQuMyA0OS4xIDEyOC4zTDI4OCA1MTIgMTc5LjkgNTM5Yy0xMC4xIDIuNS0xOS45LTUuMS0xOS45LTE1LjVsMC0xOS44YzAtNC45IDIuMi05LjUgNi0xMi41bDY2LTUyLjggMC05OS43LTE2Mi45IDU0LjNDNTguNyAzOTYuNCA0OCAzODguNyA0OCAzNzcuOGwwLTQzLjdjMC05IDMuOC0xNy41IDEwLjQtMjMuNkwyMzIgMTUxLjMgMjMyIDI0ek0zNTIgNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIwMS40LTYwLjljLTcuMS01LjItMTcuMi0zLjYtMjIuNCAzLjVsLTUzIDcyLjktMjYuOC0yNi44Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDQwIDQwYzMuMyAzLjMgNy45IDUgMTIuNiA0LjZzOC45LTIuOCAxMS43LTYuNWw2NC04OGM1LjItNy4xIDMuNi0xNy4yLTMuNS0yMi4zeiJdCiAgICB9OwogICAgZmFVc2VycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VycyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMGMwIiwgIk0zMjAgMTZhMTA0IDEwNCAwIDEgMSAwIDIwOCAxMDQgMTA0IDAgMSAxIDAtMjA4ek05NiA4OGE3MiA3MiAwIDEgMSAwIDE0NCA3MiA3MiAwIDEgMSAwLTE0NHpNMCA0MTZjMC03MC43IDU3LjMtMTI4IDEyOC0xMjggMTIuOCAwIDI1LjIgMS45IDM2LjkgNS40LTMyLjkgMzYuOC01Mi45IDg1LjQtNTIuOSAxMzguNmwwIDE2YzAgMTEuNCAyLjQgMjIuMiA2LjcgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyem01MjEuMyA2NGM0LjMtOS44IDYuNy0yMC42IDYuNy0zMmwwLTE2YzAtNTMuMi0yMC0xMDEuOC01Mi45LTEzOC42IDExLjctMy41IDI0LjEtNS40IDM2LjktNS40IDcwLjcgMCAxMjggNTcuMyAxMjggMTI4bDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTg2LjcgMHpNNDcyIDE2MGE3MiA3MiAwIDEgMSAxNDQgMCA3MiA3MiAwIDEgMSAtMTQ0IDB6TTE2MCA0MzJjMC04OC40IDcxLjYtMTYwIDE2MC0xNjBzMTYwIDcxLjYgMTYwIDE2MGwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNnoiXQogICAgfTsKICAgIGZhQ2VydGlmaWNhdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2VydGlmaWNhdGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjBhMyIsICJNMjM5LjItOGMtNi4xLTYuMi0xNS04LjctMjMuNC02LjRTMjAwLjktNS42IDE5OC44IDIuOEwxODMuNSA2M2MtMS4xIDQuNC01LjYgNy05LjkgNS43TDExMy44IDUxLjljLTguNC0yLjQtMTcuNCAwLTIzLjUgNi4xcy04LjUgMTUuMS02LjEgMjMuNWwxNi45IDU5LjhjMS4yIDQuMy0xLjQgOC44LTUuNyA5LjlMMzUuMSAxNjYuNWMtOC40IDIuMS0xNSA4LjctMTcuMyAxNy4xcy4yIDE3LjMgNi40IDIzLjRsNDQuNSA0My4zYzMuMiAzLjEgMy4yIDguMyAwIDExLjVMMjQuMyAzMDUuMWMtNi4yIDYuMS04LjcgMTUtNi40IDIzLjRzOC45IDE0LjkgMTcuMyAxNy4xbDYwLjIgMTUuM2M0LjQgMS4xIDcgNS42IDUuNyA5LjlMODQuMiA0MzAuNWMtMi40IDguNCAwIDE3LjQgNi4xIDIzLjVzMTUuMSA4LjUgMjMuNSA2LjFsNTkuOC0xNi45YzQuMy0xLjIgOC44IDEuNCA5LjkgNS43bDE1LjMgNjAuMmMyLjEgOC40IDguNyAxNSAxNy4xIDE3LjNzMTcuMy0uMiAyMy40LTYuNGw0My4zLTQ0LjVjMy4xLTMuMiA4LjMtMy4yIDExLjUgMEwzMzcuMyA1MjBjNi4xIDYuMiAxNSA4LjcgMjMuNCA2LjRzMTQuOS04LjkgMTcuMS0xNy4zTDM5My4xIDQ0OWMxLjEtNC40IDUuNi03IDkuOS01LjdsNTkuOCAxNi45YzguNCAyLjQgMTcuNCAwIDIzLjUtNi4xczguNS0xNS4xIDYuMS0yMy41bC0xNi45LTU5LjhjLTEuMi00LjMgMS40LTguOCA1LjctOS45bDYwLjItMTUuM2M4LjQtMi4xIDE1LTguNyAxNy4zLTE3LjFzLS4yLTE3LjQtNi40LTIzLjRsLTQ0LjUtNDMuM2MtMy4yLTMuMS0zLjItOC4zIDAtMTEuNWw0NC41LTQzLjNjNi4yLTYuMSA4LjctMTUgNi40LTIzLjRzLTguOS0xNC45LTE3LjMtMTcuMWwtNjAuMi0xNS4zYy00LjQtMS4xLTctNS42LTUuNy05LjlsMTYuOS01OS44YzIuNC04LjQgMC0xNy40LTYuMS0yMy41cy0xNS4xLTguNS0yMy41LTYuMUw0MDMgNjguOGMtNC4zIDEuMi04LjgtMS40LTkuOS01LjdMMzc3LjggMi44Yy0yLjEtOC40LTguNy0xNS0xNy4xLTE3LjNzLTE3LjMgLjItMjMuNCA2LjRMMjk0IDM2LjVjLTMuMSAzLjItOC4zIDMuMi0xMS41IDBMMjM5LjItOHoiXQogICAgfTsKICAgIGZhQWxhcm1DbG9jazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYWxhcm0tY2xvY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5MjAwXSwgImYzNGUiLCAiTTUwNC40IDEzMi41Yy00LjUgMTAuNS0xOC40IDkuOC0yNC45IC40LTI3LjgtNDAtNjYuMS03Mi4yLTExMS05Mi42LTEwLjQtNC43LTEzLjctMTguMy00LjEtMjQuNiAxNS05LjkgMzMtMTUuNyA1Mi4zLTE1LjcgNTIuNiAwIDk1LjIgNDIuNiA5NS4yIDk1LjIgMCAxMy4yLTIuNyAyNS44LTcuNiAzNy4zem0tNDcxLjkgLjRjLTYuNSA5LjQtMjAuNSAxMC4xLTI0LjktLjQtNC45LTExLjUtNy42LTI0LjEtNy42LTM3LjMgMC01Mi42IDQyLjYtOTUuMiA5NS4yLTk1LjIgMTkuMyAwIDM3LjMgNS44IDUyLjMgMTUuNyA5LjYgNi4zIDYuMyAxOS45LTQuMSAyNC42LTQ0LjggMjAuNC04My4xIDUyLjYtMTExIDkyLjZ6TTM5MC4yIDQ2Ny40QzM1Mi44IDQ5NS40IDMwNi4zIDUxMiAyNTYgNTEycy05Ni44LTE2LjYtMTM0LjEtNDQuNkw4Ni42IDUwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2wzNS4yLTM1LjJDNDguNiAzODQuOCAzMiAzMzguMyAzMiAyODggMzIgMTY0LjMgMTMyLjMgNjQgMjU2IDY0UzQ4MCAxNjQuMyA0ODAgMjg4YzAgNTAuMy0xNi42IDk2LjgtNDQuNiAxMzQuMmwzNS4yIDM1LjJjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTM1LjItMzUuMnpNMjgwIDE4NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDEwNGMwIDYuNCAyLjUgMTIuNSA3IDE3bDU2IDU2YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNDktNDkgMC05NC4xeiJdCiAgICB9OwogICAgZmFIZWxpY29wdGVyU3ltYm9sID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlbGljb3B0ZXItc3ltYm9sIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MDIiLCAiTTQ0NS40IDIyNGw2NC43IDBDNDk1LjYgMTA4LjIgNDAzLjggMTYuNCAyODggMmwwIDY0LjdDMzY4LjQgODAuMSA0MzEuOSAxNDMuNiA0NDUuNCAyMjR6TTUxMCAyODhsLTY0LjcgMEM0MzEuOSAzNjguNCAzNjguNCA0MzEuOSAyODggNDQ1LjNsMCA2NC43YzExNS44LTE0LjQgMjA3LjYtMTA2LjIgMjIyLTIyMnpNMiAyODhDMTYuNCA0MDMuOCAxMDguMiA0OTUuNiAyMjQgNTEwbDAtNjQuN0MxNDMuNiA0MzEuOSA4MC4yIDM2OC40IDY2LjcgMjg4TDIgMjg4em0wLTY0bDY0LjcgMEM4MC4yIDE0My42IDE0My42IDgwLjEgMjI0IDY2LjdMMjI0IDJDMTA4LjIgMTYuNCAxNi40IDEwOC4yIDIgMjI0em0yMDYtNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDk2IDAgMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjQtOTYgMCAwLTY0eiJdCiAgICB9OwogICAgZmFIb3VzZUNoaW1uZXlDcmFjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1jaGltbmV5LWNyYWNrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImhvdXNlLWRhbWFnZSJdLCAiZjZmMSIsICJNMjM0LjIgOC42YzEyLjMtMTEuNCAzMS4zLTExLjQgNDMuNSAwTDM2OCA5Mi4zIDM2OCA4MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTAxLjUgMzcuOCAzNS4xYzkuNiA5IDEyLjggMjIuOSA4IDM1LjFTNDkzLjIgMjcyIDQ4MCAyNzJsLTE2IDAgMCAxNzZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTEwNS42IDAtMzguNC02NCA4MC44LTY3LjNjNy44LTYuNSA3LjYtMTguNi0uNC0yNC45TDIxOC42IDI2My4yYy0xNC42LTExLjUtMzMuOCA3LTIyLjggMjJMMjU2IDM2OCAxNzAuNSA0MzkuMmMtNi4xIDUtNy41IDEzLjgtMy41IDIwLjVsMzEuMyA1Mi4yLTg2LjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4eiJdCiAgICB9OwogICAgZmFIb3VzZURhbWFnZSA9IGZhSG91c2VDaGltbmV5Q3JhY2s7CiAgICBmYVBlcnNvbk1pbGl0YXJ5UG9pbnRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLW1pbGl0YXJ5LXBvaW50aW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NGEiLCAiTTIxNC45IDE0LjFDMjAyIDE1LjIgMTkyIDI2IDE5MiAzOSAxOTIgNTIuOCAyMDMuMiA2NCAyMTcgNjRsMTUxIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzAuNkMzODQgOCAzNzYgLjcgMzY2LjcgMS40TDIxNC45IDE0LjF6TTIwOCAxMTJjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTUuNS0uNi0xMC44LTEuNi0xNkwyMDkuNiA5NmMtMSA1LjItMS42IDEwLjUtMS42IDE2ek00MCAyMjRjLTIyLjEgMC00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDBsMTUyIDAgMCA4OS40IDE2Mi44LTE2Mi44Yy0xMy4zLTQuMy0yNy4zLTYuNS00MS42LTYuNUw0MCAyMjR6bTM0NS43IDIwLjlsLTE3MS4xIDE3MS4xIDE2OS40IDAgMC00Ni4zIDUzLjYgOTAuNmMxMS4yIDE5IDM1LjggMjUuMyA1NC44IDE0LjFzMjUuMy0zNS44IDE0LjEtNTQuOEw0MzAuMyAyOTAuOGMtMTEuMi0xOS0yNi42LTM0LjUtNDQuNi00NS45ek0xOTIgNDQ4bDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMi0xOTIgMHoiXQogICAgfTsKICAgIGZhRGF0YWJhc2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGF0YWJhc2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFjMCIsICJNNDQ4IDIwNS44Yy0xNC44IDkuOC0zMS44IDE3LjctNDkuNSAyNC00NyAxNi44LTEwOC43IDI2LjItMTc0LjUgMjYuMlM5Ni40IDI0Ni41IDQ5LjUgMjI5LjhjLTE3LjYtNi4zLTM0LjctMTQuMi00OS41LTI0TDAgMjg4YzAgNDQuMiAxMDAuMyA4MCAyMjQgODBzMjI0LTM1LjggMjI0LTgwbDAtODIuMnptMC03Ny44bDAtNDhDNDQ4IDM1LjggMzQ3LjcgMCAyMjQgMFMwIDM1LjggMCA4MGwwIDQ4YzAgNDQuMiAxMDAuMyA4MCAyMjQgODBzMjI0LTM1LjggMjI0LTgwek0zOTguNSAzODkuOEMzNTEuNiA0MDYuNSAyODkuOSA0MTYgMjI0IDQxNlM5Ni40IDQwNi41IDQ5LjUgMzg5LjhjLTE3LjYtNi4zLTM0LjctMTQuMi00OS41LTI0TDAgNDMyYzAgNDQuMiAxMDAuMyA4MCAyMjQgODBzMjI0LTM1LjggMjI0LTgwbDAtNjYuMmMtMTQuOCA5LjgtMzEuOCAxNy43LTQ5LjUgMjR6Il0KICAgIH07CiAgICBmYU5ld3NwYXBlcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibmV3c3BhcGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjQwXSwgImYxZWEiLCAiTTAgNDE2TDAgMTIwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAyODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNEw5NiA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0ek0xNjAgMTI4bDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMjQgMjQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNDAgMHptLTI0LTcyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDI0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTM2MCAxNzZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNjQgMHoiXQogICAgfTsKICAgIGZhQ2xvdWRSYWluID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLXJhaW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3ODMsIDk5MjZdLCAiZjczZCIsICJNOTYgMzIwYy01MyAwLTk2LTQzLTk2LTk2IDAtNDIuNSAyNy42LTc4LjYgNjUuOS05MS4yLTEuMy02LjctMS45LTEzLjctMS45LTIwLjggMC02MS45IDUwLjEtMTEyIDExMi0xMTIgNDMuMSAwIDgwLjUgMjQuMyA5OS4yIDYwIDE0LjctMTcuMSAzNi41LTI4IDYwLjgtMjggNDQuMiAwIDgwIDM1LjggODAgODAgMCA1LjUtLjYgMTAuOC0xLjYgMTYgLjUgMCAxLjEgMCAxLjYgMCA1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5Nkw5NiAzMjB6bTEuNiA2OC4yYzEuMS0yLjUgMy42LTQuMiA2LjQtNC4yczUuMyAxLjYgNi40IDQuMmwzMC4yIDY4LjJjMi4yIDUuMSAzLjQgMTAuNSAzLjQgMTYgMCAyMS45LTE4LjEgMzkuNi00MCAzOS42cy00MC0xNy43LTQwLTM5LjZjMC01LjUgMS4yLTExIDMuNC0xNmwzMC4yLTY4LjJ6bTE1MiAwYzEuMS0yLjUgMy42LTQuMiA2LjQtNC4yczUuMyAxLjYgNi40IDQuMmwzMC4yIDY4LjJjMi4yIDUuMSAzLjQgMTAuNSAzLjQgMTYgMCAyMS45LTE4LjEgMzkuNi00MCAzOS42cy00MC0xNy43LTQwLTM5LjZjMC01LjUgMS4yLTExIDMuNC0xNmwzMC4yLTY4LjJ6bTEyMS44IDY4LjJsMzAuMi02OC4yYzEuMS0yLjUgMy42LTQuMiA2LjQtNC4yczUuMyAxLjYgNi40IDQuMmwzMC4yIDY4LjJjMi4yIDUuMSAzLjQgMTAuNSAzLjQgMTYgMCAyMS45LTE4LjEgMzkuNi00MCAzOS42cy00MC0xNy43LTQwLTM5LjZjMC01LjUgMS4yLTExIDMuNC0xNnoiXQogICAgfTsKICAgIGZhTWF4aW1pemUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWF4aW1pemUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZXhwYW5kLWFycm93cy1hbHQiXSwgImYzMWUiLCAiTTE2OCAzMkwyNCAzMkMxMC43IDMyIDAgNDIuNyAwIDU2TDAgMjAwYzAgOS43IDUuOCAxOC41IDE0LjggMjIuMlMzNC4xIDIyMy44IDQxIDIxN2w0MC00MCA3OSA3OS03OSA3OS00MC00MGMtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMwIDMwMi4zIDAgMzEyTDAgNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDE0NCAwYzkuNyAwIDE4LjUtNS44IDIyLjItMTQuOHMxLjctMTkuMy01LjItMjYuMmwtNDAtNDAgNzktNzkgNzkgNzktNDAgNDBjLTYuOSA2LjktOC45IDE3LjItNS4yIDI2LjJTMjcwLjMgNDgwIDI4MCA0ODBsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xNDRjMC05LjctNS44LTE4LjUtMTQuOC0yMi4ycy0xOS4zLTEuNy0yNi4yIDUuMmwtNDAgNDAtNzktNzkgNzktNzkgNDAgNDBjNi45IDYuOSAxNy4yIDguOSAyNi4yIDUuMlM0NDggMjA5LjcgNDQ4IDIwMGwwLTE0NGMwLTEzLjMtMTAuNy0yNC0yNC0yNEwyODAgMzJjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOFMyNTYuMiA2Ni4xIDI2MyA3M2w0MCA0MC03OSA3OS03OS03OSA0MC00MGM2LjktNi45IDguOS0xNy4yIDUuMi0yNi4yUzE3Ny43IDMyIDE2OCAzMnoiXQogICAgfTsKICAgIGZhRXhwYW5kQXJyb3dzQWx0ID0gZmFNYXhpbWl6ZTsKICAgIGZhTG9jYXRpb25BcnJvdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsb2NhdGlvbi1hcnJvdyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTI0IiwgIk00NzcuOSA3NS41YzQuNS0xMS44IDEuNy0yNS4yLTcuMi0zNC4xcy0yMi4zLTExLjgtMzQuMS03LjJsLTQxNiAxNjBDNy45IDE5OS0uMyAyMTEuMiAwIDIyNC43czkuMSAyNS40IDIxLjkgMjkuNmwxNzYuOCA1OC45IDU4LjkgMTc2LjhjNC4zIDEyLjggMTYuMSAyMS42IDI5LjYgMjEuOXMyNS43LTcuOSAzMC42LTIwLjVsMTYwLTQxNnoiXQogICAgfTsKICAgIGZhQ2l0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXR5IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTYxXSwgImY2NGYiLCAiTTMyMCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDMyLTQ4IDAgMC03MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDcyLTY0IDAgMC03MkM5NiAxMC43IDg1LjMgMCA3MiAwUzQ4IDEwLjcgNDggMjRsMCA3NGMtMjcuNiA3LjEtNDggMzIuMi00OCA2MkwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MmMwLTM1LjMtMjguNy02NC02NC02NGwtNjQgMCAwLTEyOGMwLTM1LjMtMjguNy02NC02NC02NEwzMjAgMHptNjQgMTEybDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZ6bS0xNiA4MGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwem0xNiAxMTJsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnptMTEyLTE2YzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDB6TTI1NiAzMDRsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnpNMjQwIDE5MmM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwek0xMjggMzA0bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZ6TTExMiAxOTJjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMHoiXQogICAgfTsKICAgIGZhWFJheSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ4LXJheSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDk3IiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDQ0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMzIwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0em0yODAgNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNi02NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY0IDAgMCA0OC04MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDAgMCA0OC02NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY0IDAgMCAxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYgNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNjQgMCAwLTQ4IDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwIDAgMC00OCA2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC02NCAwIDAtMTZ6Il0KICAgIH07CiAgICBmYVVtYnJlbGxhQmVhY2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidW1icmVsbGEtYmVhY2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NThdLCAiZjVjYSIsICJNNDk3LjUgMzQxLjFjLTUuOSAxNi43LTI1LjMgMjMtNDEuMSAxNS4xbC0xNzguMi04OS4xLTEuNiAzLjItODguOCAxNzcuNyAyOTIuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4NC4yIDAgMTAzLjItMjA2LjMgMS42LTMuMi0xNjUuNC04Mi43Yy0xNS44LTcuOS0yMi40LTI3LjMtMTIuNS00MiA0NS45LTY4LjYgMTI0LjEtMTEzLjggMjEyLjktMTEzLjggMTQxLjQgMCAyNTYgMTE0LjYgMjU2IDI1NiAwIDI5LjgtNS4xIDU4LjUtMTQuNSA4NS4xeiJdCiAgICB9OwogICAgZmFBcnJvd1JpZ2h0VG9CcmFja2V0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXJpZ2h0LXRvLWJyYWNrZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2lnbi1pbiJdLCAiZjA5MCIsICJNMzUyIDk2bDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMjU2YzAtNTMtNDMtOTYtOTYtOTZsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bS05LjQgMTgyLjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDI0Mi43IDIyNCAzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjEwLjcgMC03My40IDczLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOHoiXQogICAgfTsKICAgIGZhU2lnbkluID0gZmFBcnJvd1JpZ2h0VG9CcmFja2V0OwogICAgZmFIZWFkc2V0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYWRzZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjU5MCIsICJNMjI0IDY0Yy03OSAwLTE0NC43IDU3LjMtMTU3LjcgMTMyLjcgOS4zLTMgMTkuMy00LjcgMjkuNy00LjdsMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNiAwYy01MyAwLTk2LTQzLTk2LTk2bDAtNjRDMCAxMDAuMyAxMDAuMyAwIDIyNCAwUzQ0OCAxMDAuMyA0NDggMjI0bDAgMTY4LjFjMCA2Ni4zLTUzLjggMTIwLTEyMC4xIDEyMGwtODcuOS0uMS0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAwIDQwIDBjMzkuOCAwIDcyLTMyLjIgNzItNzJsMC0yMC45Yy0xNC4xIDguMi0zMC41IDEyLjgtNDggMTIuOGwtMTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTI2LjUgMjEuNS00OCA0OC00OGwxNiAwYzEwLjQgMCAyMC4zIDEuNiAyOS43IDQuNy0xMy03NS4zLTc4LjYtMTMyLjctMTU3LjctMTMyLjd6Il0KICAgIH07CiAgICBmYVNwbG90Y2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Bsb3RjaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWJjIiwgIk0yMDguNSA2Mi4zbDI4LjEtMzYuOUMyNDguOCA5LjQgMjY3LjggMCAyODggMCAzMTYuNSAwIDM0MS42IDE4LjcgMzQ5LjggNDZsMTcuOCA1OS40YzEwLjMgMzQuNCAzNi4xIDYyIDY5LjggNzQuNmwzOS44IDE0LjljMjAuOSA3LjkgMzQuOCAyNy45IDM0LjggNTAuMiAwIDE2LjktNy45IDMyLjgtMjEuNSA0Mi45bC02Ny4zIDUwLjVjLTI0LjMgMTguMi0zNy4yIDQ3LjktMzMuOCA3OC4xbDIuNSAyMi43YzQuMyAzOC43LTI2IDcyLjYtNjUgNzIuNi0xNC44IDAtMjkuMy01LjEtNDAuOS0xNC4zbC01NS4zLTQ0LjNjLTQuNS0zLjYtOS4zLTYuNy0xNC41LTkuMi0xNS44LTcuOS0zMy43LTEwLjQtNTEtNy4zTDgyLjQgNDUxLjljLTM0LjYgNi4zLTY2LjQtMjAuMy02Ni40LTU1LjQgMC0xMy4yIDQuNy0yNiAxMy4xLTM2LjJsMTEuMi0xMy40YzE0LjYtMTcuNCAyMi42LTM5LjQgMjIuNi02Mi4xIDAtMTguOC01LjUtMzcuMi0xNS44LTUzTDguOCAxNzMuNUMzLjEgMTY0LjcgMCAxNTQuNCAwIDE0My45IDAgMTEwLjUgMzAuMSA4NS4xIDYzIDkwLjdsNTEuMyA4LjdjMzUuOSA2LjEgNzIuMi04LjIgOTQuMi0zNy4xeiJdCiAgICB9OwogICAgZmFVcExvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXAtbG9uZyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWyJsb25nLWFycm93LWFsdC11cCJdLCAiZjMwYyIsICJNMTM3LjQtMjIuNmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxMjggMTI4YzkuMiA5LjIgMTEuOSAyMi45IDYuOSAzNC45UzMwMC45IDE2MCAyODggMTYwbC02NCAwIDAgMzM2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTMzNi02NCAwYy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44Uy4yIDExNC41IDkuNCAxMDUuNGwxMjgtMTI4eiJdCiAgICB9OwogICAgZmFMb25nQXJyb3dBbHRVcCA9IGZhVXBMb25nOwogICAgZmFIZXhhZ29uTm9kZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGV4YWdvbi1ub2RlcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjk5IiwgIk0yNDggMTA2LjZjMTguOS05IDMyLTI4LjMgMzItNTAuNmMwLTMwLjktMjUuMS01Ni01Ni01NnMtNTYgMjUuMS01NiA1NmMwIDIyLjMgMTMuMSA0MS42IDMyIDUwLjZsMCA5OC44Yy0yLjggMS4zLTUuNSAyLjktOCA0LjdsLTgwLjEtNDUuOGMxLjYtMjAuOC04LjYtNDEuNi0yNy45LTUyLjhDNTcuMiA5NiAyMyAxMDUuMiA3LjUgMTMyUzEuMiAxOTMgMjggMjA4LjVjMS4zIC44IDIuNiAxLjUgNCAyLjFsMCA5MC44Yy0xLjMgLjYtMi43IDEuMy00IDIuMUMxLjIgMzE5LTggMzUzLjIgNy41IDM4MFM1Ny4yIDQxNiA4NCA0MDAuNWMxOS4zLTExLjEgMjkuNC0zMiAyNy44LTUyLjhsNTAuNS0yOC45Yy0xMS41LTExLjItMTkuOS0yNS42LTIzLjgtNDEuN0w4OCAzMDYuMWMtMi42LTEuOC01LjItMy4zLTgtNC43bDAtOTAuOGMyLjgtMS4zIDUuNS0yLjkgOC00LjdsODAuMSA0NS44Yy0uMSAxLjQtLjIgMi44LS4yIDQuM2MwIDIyLjMgMTMuMSA0MS42IDMyIDUwLjZsMCA5OC44Yy0xOC45IDktMzIgMjguMy0zMiA1MC42YzAgMzAuOSAyNS4xIDU2IDU2IDU2czU2LTI1LjEgNTYtNTZjMC0yMi4zLTEzLjEtNDEuNi0zMi01MC42bDAtOTguOGMyLjgtMS4zIDUuNS0yLjkgOC00LjdsODAuMSA0NS44Yy0xLjYgMjAuOCA4LjYgNDEuNiAyNy44IDUyLjhjMjYuOCAxNS41IDYxIDYuMyA3Ni41LTIwLjVzNi4zLTYxLTIwLjUtNzYuNWMtMS4zLS44LTIuNy0xLjUtNC0yLjFsMC05MC44YzEuNC0uNiAyLjctMS4zIDQtMi4xYzI2LjgtMTUuNSAzNi00OS43IDIwLjUtNzYuNVMzOTAuOCA5NiAzNjQgMTExLjVjLTE5LjMgMTEuMS0yOS40IDMyLTI3LjggNTIuOGwtNTAuNiAyOC45YzExLjUgMTEuMiAxOS45IDI1LjYgMjMuOCA0MS43TDM2MCAyMDUuOWMyLjYgMS44IDUuMiAzLjMgOCA0LjdsMCA5MC44Yy0yLjggMS4zLTUuNSAyLjktOCA0LjZsLTgwLjEtNDUuOGMuMS0xLjQgLjItMi44IC4yLTQuM2MwLTIyLjMtMTMuMS00MS42LTMyLTUwLjZsMC05OC44eiJdCiAgICB9OwogICAgZmFIb3NwaXRhbDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG9zcGl0YWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5NzMsIDYyNTg5LCAiaG9zcGl0YWwtYWx0IiwgImhvc3BpdGFsLXdpZGUiXSwgImYwZjgiLCAiTTEyOCA2NGMwLTM1LjMgMjguNy02NCA2NC02NEwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0IDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwIDAtNjR6TTI3MiAzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgODAgOTYgMCAwLTgwYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0zMiAwek0xMjggMzY4bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZ6TTExMiAyNTZjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMHpNNTEyIDM2OGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2ek00OTYgMjU2YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6TTI2NCAxMDRsMCAzMi0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMCAwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyIDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwIDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZ6Il0KICAgIH07CiAgICBmYUhvc3BpdGFsQWx0MiA9IGZhSG9zcGl0YWwyOwogICAgZmFIb3NwaXRhbFdpZGUyID0gZmFIb3NwaXRhbDI7CiAgICBmYVBlcnNvbkhhcmFzc2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24taGFyYXNzaW5nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1NDkiLCAiTTE5MiA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTU5LjQgMzA0LjVMODggMjU2LjkgODggNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjggMTYgMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjQ0LjcgNDcuNCA1Ny4xYzExLjMgMTMuNiAzMS41IDE1LjUgNDUuMSA0LjJzMTUuNS0zMS41IDQuMi00NS4xbC03My43LTg4LjljLTE4LjItMjItNDUuMy0zNC43LTczLjktMzQuN2wtMzUuOSAwYy0zMy43IDAtNjQuOSAxNy43LTgyLjMgNDYuNmwtNTguMyA5N2MtOS4xIDE1LjEtNC4yIDM0LjggMTAuOSA0My45czM0LjggNC4yIDQzLjktMTAuOXpNNDgwIDI0MGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek00NjQgMzQ0bDAgNTguNy00MS40LTQxLjRjLTcuMy03LjMtMTcuNi0xMC42LTI3LjgtOXMtMTguOSA4LjEtMjMuNSAxNy4zbC00OCA5NmMtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDI4LjEtNTYuMyA1NC43IDU0LjdjMTIuNCAxMi40IDI5LjEgMTkuMyA0Ni42IDE5LjMgMzYuNCAwIDY1LjktMjkuNSA2NS45LTY1LjlMNTc2IDM0NGMwLTMwLjktMjUuMS01Ni01Ni01NnMtNTYgMjUuMS01NiA1NnpNMjg4IDQ4YzAgOC44IDcuMiAxNiAxNiAxNmw1NiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bS0uOCA0OS43Yy03LjktNC0xNy41LS43LTIxLjUgNy4ycy0uNyAxNy41IDcuMiAyMS41bDQ4IDI0YzcuOSA0IDE3LjUgLjcgMjEuNS03LjJzLjctMTcuNS03LjItMjEuNWwtNDgtMjR6Il0KICAgIH07CiAgICBmYU1vbmV5QmlsbFRyZW5kVXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9uZXktYmlsbC10cmVuZC11cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTI5IiwgIk00ODAgOGMwLTEzLjMtMTAuNy0yNC0yNC0yNEwzNTQuMi0xNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0My45IDAtMTExLjMgMTExLjMtOTUuMS04MS41Yy05LTcuNy0yMi4yLTcuNy0zMS4yIDBsLTExMiA5NmMtMTAuMSA4LjYtMTEuMiAyMy44LTIuNiAzMy44czIzLjggMTEuMiAzMy44IDIuNmw5Ni40LTgyLjYgOTYuNCA4Mi42YzkuNSA4LjIgMjMuNyA3LjYgMzIuNi0xLjNsMTI3LTEyNyAwIDQzLjljMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNEw0ODAgOHpNNDggMjU2Yy0yNi41IDAtNDggMjEuNS00OCA0OEwwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw0MTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE2MGMwLTI2LjUtMjEuNS00OC00OC00OEw0OCAyNTZ6bTQ3LjMgNTZjLTMuNCAyMC4xLTE5LjIgMzYtMzkuNCAzOS40LTQuNCAuNy04LTIuOS04LTcuM2wwLTMyYzAtNC40IDMuNi04IDgtOGwzMiAwYzQuNCAwIDguMSAzLjYgNy4zIDh6bTAgMTQ0LjFjLjcgNC40LTIuOSA4LTcuMyA4bC0zMiAwYy00LjQgMC04LTMuNi04LThsMC0zMmMwLTQuNCAzLjYtOC4xIDgtNy4zIDIwLjEgMy40IDM2IDE5LjIgMzkuNCAzOS40ek00NTYgNDE2LjdjNC40LS43IDggMi45IDggNy4zbDAgMzJjMCA0LjQtMy42IDgtOCA4bC0zMiAwYy00LjQgMC04LjEtMy42LTcuMy04IDMuNC0yMC4xIDE5LjItMzYgMzkuNC0zOS40ek00MTYuNyAzMTJjLS43LTQuNCAyLjktOCA3LjMtOGwzMiAwYzQuNCAwIDggMy42IDggOGwwIDMyYzAgNC40LTMuNiA4LjEtOCA3LjMtMjAuMS0zLjQtMzYtMTkuMi0zOS40LTM5LjR6TTE5MiAzODRhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAweiJdCiAgICB9OwogICAgZmFQZW5SdWxlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW4tcnVsZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsicGVuY2lsLXJ1bGVyIl0sICJmNWFlIiwgIk00MDQgMGMxOS4yIDAgMzcuNiA3LjYgNTEuMSAyMS4ybDM1LjcgMzUuN0M1MDQuNCA3MC40IDUxMiA4OC44IDUxMiAxMDhzLTcuNiAzNy42LTIxLjIgNTEuMUw0NDUuOSAyMDQgMzA4IDY2LjEgMzUyLjkgMjEuMkMzNjYuNCA3LjYgMzg0LjggMCA0MDQgMHpNNTguOSAzMTUuMUwyNzQuMSAxMDAgNDEyIDIzNy45IDE5Ni45IDQ1My4xYy0xMC43IDEwLjctMjQuMSAxOC41LTM4LjcgMjIuNkwzMC40IDUxMS4xYy04LjMgMi4zLTE3LjMgMC0yMy40LTYuMnMtOC41LTE1LjEtNi4yLTIzLjRMMzYuNCAzNTMuOGM0LjEtMTQuNiAxMS44LTI3LjkgMjIuNi0zOC43ek0yMjUuNCA4MC44TDgwLjggMjI1LjQgMTEuNyAxNTYuM2MtMTUuNi0xNS42LTE1LjYtNDAuOSAwLTU2LjZsODgtODhjMTUuNi0xNS42IDQwLjktMTUuNiA1Ni42IDBsNS45IDUuOS01Ni4zIDU2LjNjLTcuOCA3LjgtNy44IDIwLjUgMCAyOC4zczIwLjUgNy44IDI4LjMgMGw1Ni4zLTU2LjMgMzQuOSAzNC45ek00MzEuMiAyODYuNmwzNC45IDM0LjktNTYuMyA1Ni4zYy03LjggNy44LTcuOCAyMC41IDAgMjguM3MyMC41IDcuOCAyOC4zIDBsNTYuMy01Ni4zIDUuOSA1LjljMTUuNiAxNS42IDE1LjYgNDAuOSAwIDU2LjZsLTg4IDg4Yy0xNS42IDE1LjYtNDAuOSAxNS42LTU2LjYgMGwtNjkuMS02OS4xIDE0NC42LTE0NC42eiJdCiAgICB9OwogICAgZmFQZW5jaWxSdWxlciA9IGZhUGVuUnVsZXI7CiAgICBmYVJlcGVhdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZXBlYXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNTddLCAiZjM2MyIsICJNNDcwLjYgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOVMzNTIgMTkuMSAzNTIgMzJsMCAzMi0xNjAgMEM4NiA2NCAwIDE1MCAwIDI1NiAwIDI3My43IDE0LjMgMjg4IDMyIDI4OHMzMi0xNC4zIDMyLTMyYzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4bDE2MCAwIDAgMzJjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnMyNS43IDIuMiAzNC45LTYuOWw2NC02NHpNNDEuNCAzOTMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlTMTYwIDQ5Mi45IDE2MCA0ODBsMC0zMiAxNjAgMGMxMDYgMCAxOTItODYgMTkyLTE5MiAwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOGwtMTYwIDAgMC0zMmMwLTEyLjktNy44LTI0LjYtMTkuOC0yOS42cy0yNS43LTIuMi0zNC45IDYuOWwtNjQgNjR6Il0KICAgIH07CiAgICBmYUJvbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9uZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyOTQ2MF0sICJmNWQ3IiwgIk0xOTcuNCAxNjBjLTMuOSAwLTcuMi0yLjgtOC4xLTYuNi0xMC4yLTQyLjEtNDguMS03My40LTkzLjMtNzMuNC01MyAwLTk2IDQzLTk2IDk2IDAgMjkuMSAxMi45IDU1LjEgMzMuMyA3Mi43IDQuMyAzLjcgNC4zIDEwLjggMCAxNC41LTIwLjQgMTcuNi0zMy4zIDQzLjctMzMuMyA3Mi43IDAgNTMgNDMgOTYgOTYgOTYgNDUuMiAwIDgzLjEtMzEuMyA5My4zLTczLjQgLjktMy44IDQuMi02LjYgOC4xLTYuNmwyNDUuMSAwYzMuOSAwIDcuMiAyLjggOC4xIDYuNiAxMC4yIDQyLjEgNDguMSA3My40IDkzLjMgNzMuNCA1MyAwIDk2LTQzIDk2LTk2IDAtMjkuMS0xMi45LTU1LjEtMzMuMy03Mi43LTQuMy0zLjctNC4zLTEwLjggMC0xNC41IDIwLjQtMTcuNiAzMy4zLTQzLjcgMzMuMy03Mi43IDAtNTMtNDMtOTYtOTYtOTYtNDUuMiAwLTgzLjEgMzEuMy05My4zIDczLjQtLjkgMy44LTQuMiA2LjYtOC4xIDYuNmwtMjQ1LjEgMHoiXQogICAgfTsKICAgIGZhRmlyZUZsYW1lQ3VydmVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpcmUtZmxhbWUtY3VydmVkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImZpcmUtYWx0Il0sICJmN2U0IiwgIk0xNTMuNiAyOS45bDE2LTIxLjNDMTczLjYgMy4yIDE4MCAwIDE4Ni43IDAgMTk4LjQgMCAyMDggOS42IDIwOCAyMS4zbDAgMjIuMWMwIDEzLjEgNS40IDI1LjcgMTQuOSAzNC43TDMwNy42IDE1OUMzNTYuNCAyMDUuNiAzODQgMjcwLjIgMzg0IDMzNy43IDM4NCA0MzQgMzA2IDUxMiAyMDkuNyA1MTJMMTkyIDUxMkM4NiA1MTIgMCA0MjYgMCAzMjBsMC0zLjhjMC00OC44IDE5LjQtOTUuNiA1My45LTEzMC4xbDMuNS0zLjVjNC4yLTQuMiAxMC02LjYgMTYtNi42IDEyLjUgMCAyMi42IDEwLjEgMjIuNiAyMi42TDk2IDI4OGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0bDAtMy45YzAtMTgtNy4yLTM1LjMtMTkuOS00OGwtMzguNi0zOC42Yy0yNC0yNC0zNy41LTU2LjctMzcuNS05MC43IDAtMjcuNyA5LTU0LjggMjUuNi03Ni45eiJdCiAgICB9OwogICAgZmFGaXJlQWx0ID0gZmFGaXJlRmxhbWVDdXJ2ZWQ7CiAgICBmYUJ1c1NpbXBsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidXMtc2ltcGxlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImJ1cy1hbHQiXSwgImY1NWUiLCAiTTk2IDBDNDMgMCAwIDQzIDAgOTZMMCAzODRjMCAyOS44IDIwLjQgNTQuOSA0OCA2MmwwIDM0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMiAxOTIgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zNGMyNy42LTcuMSA0OC0zMi4yIDQ4LTYybDAtMjg4YzAtNTMtNDMtOTYtOTYtOTZMOTYgMHpNNjQgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJMOTYgMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2ek05NiAzMjBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0yNTYgMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUJ1c0FsdCA9IGZhQnVzU2ltcGxlOwogICAgZmFWZW51c01hcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmVudXMtbWFycyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzk4OTJdLCAiZjIyOCIsICJNNDgwLTY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMlM0NjIuMyAwIDQ4MCAwTDUzMC43IDAgNDc0IDU2LjdjLTI2LjMtMTUuNy01Ny4xLTI0LjctOTAtMjQuNy0zNS40IDAtNjguNCAxMC41LTk2IDI4LjUtMjcuNi0xOC02MC42LTI4LjUtOTYtMjguNS05Ny4yIDAtMTc2IDc4LjgtMTc2IDE3NiAwIDg2LjMgNjIuMSAxNTguMSAxNDQgMTczLjFsMCAzNC45LTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMzQuOWMyMy4zLTQuMyA0NC45LTEzLjEgNjQtMjUuNiAyNy42IDE4IDYwLjYgMjguNSA5NiAyOC41IDk3LjIgMCAxNzYtNzguOCAxNzYtMTc2IDAtNDEuMS0xNC4xLTc5LTM3LjgtMTA5TDU3NiA0NS4zIDU3NiA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDQ4MC02NHpNMzM2IDMwOS4yYzIwLjItMjguNiAzMi02My41IDMyLTEwMS4ycy0xMS44LTcyLjYtMzItMTAxLjJjMTQuNi02LjkgMzAuOC0xMC44IDQ4LTEwLjggNjEuOSAwIDExMiA1MC4xIDExMiAxMTJTNDQ1LjkgMzIwIDM4NCAzMjBjLTE3LjIgMC0zMy41LTMuOS00OC0xMC44ek0yODggMTUwLjNjMTAuMiAxNi45IDE2IDM2LjYgMTYgNTcuN3MtNS44IDQwLjktMTYgNTcuN2MtMTAuMi0xNi45LTE2LTM2LjYtMTYtNTcuN3M1LjgtNDAuOSAxNi01Ny43em0tNDgtNDMuNWMtMjAuMiAyOC42LTMyIDYzLjUtMzIgMTAxLjJzMTEuOCA3Mi42IDMyIDEwMS4yYy0xNC41IDYuOS0zMC44IDEwLjgtNDggMTAuOC02MS45IDAtMTEyLTUwLjEtMTEyLTExMlMxMzAuMSA5NiAxOTIgOTZjMTcuMiAwIDMzLjUgMy45IDQ4IDEwLjh6Il0KICAgIH07CiAgICBmYUJsZW5kZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmxlbmRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTE3IiwgIk0wIDU2QzAgMjUuMSAyNS4xIDAgNTYgMEw0MzcuNiAwYzIxLjMgMCAzNi42IDIwLjMgMzAuOCA0MC44TDQ1Ny4xIDgwIDM0NCA4MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw5OS40IDAtMTguMyA2NC04MS4xIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNjcuNCAwLTI3LjQgOTYtMjU2IDAtOS4xLTk2LTYyLjkgMGMtMzAuOSAwLTU2LTI1LjEtNTYtNTZMMCA1NnpNMTE0LjMgMTkyTDEwMC42IDQ4IDU2IDQ4Yy00LjQgMC04IDMuNi04IDhsMCAxMjhjMCA0LjQgMy42IDggOCA4bDU4LjMgMHpNMTM2IDM4NGwyNDAgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDQ4YzAgMjIuMS0xNy45IDQwLTQwIDQwbC0yNDAgMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MHptMTIwIDg4YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhVSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTE3XSwgIjU1IiwgIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDIyNGMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOHMxMjgtNTcuMyAxMjgtMTI4bDAtMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAyMjRjMCAxMDYtODYgMTkyLTE5MiAxOTJTMCAzOTQgMCAyODhMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnoiXQogICAgfTsKICAgIGZhU2hhcmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hhcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibWFpbC1mb3J3YXJkIl0sICJmMDY0IiwgIk0zMDcuOCAxOC40Yy0xMiA1LTE5LjggMTYuNi0xOS44IDI5LjZsMCA4MC0xMTIgMGMtOTcuMiAwLTE3NiA3OC44LTE3NiAxNzYgMCAxMTMuMyA4MS41IDE2My45IDEwMC4yIDE3NC4xIDIuNSAxLjQgNS4zIDEuOSA4LjEgMS45IDEwLjkgMCAxOS43LTguOSAxOS43LTE5LjcgMC03LjUtNC4zLTE0LjQtOS44LTE5LjUtOS40LTguOC0yMi4yLTI2LjQtMjIuMi01Ni43IDAtNTMgNDMtOTYgOTYtOTZsOTYgMCAwIDgwYzAgMTIuOSA3LjggMjQuNiAxOS44IDI5LjZzMjUuNyAyLjIgMzQuOS02LjlsMTYwLTE2MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MGMtOS4yLTkuMi0yMi45LTExLjktMzQuOS02Ljl6Il0KICAgIH07CiAgICBmYU1haWxGb3J3YXJkID0gZmFTaGFyZTsKICAgIGZhUGhvbmVGbGlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBob25lLWZsaXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzODEsICJwaG9uZS1hbHQiXSwgImY4NzkiLCAiTTM1MS44IDI1YzcuOC0xOC44IDI4LjQtMjguOSA0OC4xLTIzLjVsNS41IDEuNWM2NC42IDE3LjYgMTE5LjggODAuMiAxMDMuNyAxNTYuNC0zNy4xIDE3NS0xNzQuOCAzMTIuNy0zNDkuOCAzNDkuOC03Ni4zIDE2LjItMTM4LjgtMzkuMS0xNTYuNC0xMDMuN2wtMS41LTUuNWMtNS40LTE5LjcgNC43LTQwLjMgMjMuNS00OC4xbDk3LjMtNDAuNWMxNi41LTYuOSAzNS42LTIuMSA0NyAxMS44bDM4LjYgNDcuMmM3MC4zLTM0LjkgMTI2LjgtOTMuMyAxNTkuMy0xNjQuOWwtNDQuMS0zNi4xYy0xMy45LTExLjMtMTguNi0zMC40LTExLjgtNDdMMzUxLjggMjV6Il0KICAgIH07CiAgICBmYVBob25lQWx0ID0gZmFQaG9uZUZsaXA7CiAgICBmYVRvaWxldFBvcnRhYmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvaWxldC1wb3J0YWJsZSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlNTgzIiwgIk0wIDY0bDAgMTYgMzIwIDAgMC0xNmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwQzI4LjcgMCAwIDI4LjcgMCA2NHptMjQgNjRMMCAxMjggMCA0ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTggMjI0IDAgMCA4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zNjAtMjk2IDB6bTIyNCA5NmwyNCAwIDAgOTYtMjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhUGVyc29uUHJlZ25hbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXByZWduYW50IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUzMWUiLCAiTTE5MiA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnptODAgMzIxLjJjOC42LTQuNSAxNi44LTEwIDI0LjMtMTYuNWw0LTMuNGMyMi42LTE5LjQgMzUuNy00Ny43IDM1LjctNzcuNiAwLTM1LjktMTguOC02OS4xLTQ5LjYtODcuNmwtMzAuNC0xOC4yIDAtMS44YzAtNDYuNS0zNy43LTg0LjEtODQuMS04NC4xLTI4LjEgMC01NC40IDE0LjEtNzAgMzcuNUwyMS40IDI3MC4yYy05LjggMTQuNy01LjggMzQuNiA4LjkgNDQuNHMzNC42IDUuOCA0NC40LTguOWwyOS00My41LTMwLjUgMTEzLjVjLTIuNiA5LjYtLjYgMTkuOSA1LjUgMjcuOFM5NCA0MTYgMTA0IDQxNmw4IDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTYgMzIgMCAwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMTAuOHoiXQogICAgfTsKICAgIGZhTGVzc1RoYW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGVzcy10aGFuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjI3NzRdLCAiM2MiLCAiTTQ3Ny4xIDUwLjZjNy40IDE2IC40IDM1LjEtMTUuNiA0Mi41TDEwOC40IDI1NiA0NjEuNCA0MTljMTYgNy40IDIzIDI2LjQgMTUuNiA0Mi41cy0yNi40IDIzLTQyLjUgMTUuNmwtNDE2LTE5MkM3LjMgMjc5LjggMCAyNjguNSAwIDI1NlM3LjMgMjMyLjIgMTguNiAyMjdsNDE2LTE5MmMxNi03LjQgMzUuMS0uNCA0Mi41IDE1LjZ6Il0KICAgIH07CiAgICBmYVN1cGVyc2NyaXB0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN1cGVyc2NyaXB0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxMmIiLCAiTTU0NCAzMmMwLTExLjEtNS43LTIxLjQtMTUuMi0yNy4ycy0yMS4yLTYuNC0zMS4xLTEuNGwtMzIgMTZDNDQ5LjkgMjcuMyA0NDMuNSA0Ni41IDQ1MS40IDYyLjMgNDU3IDczLjUgNDY4LjMgODAgNDgwIDgwbDAgODBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTEyOHpNOTYgNjRDNzguMyA2NCA2NCA3OC4zIDY0IDk2czE0LjMgMzIgMzIgMzJsMTUuMyAwIDg5LjYgMTI4LTg5LjYgMTI4LTE1LjMgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwYzEwLjQgMCAyMC4yLTUuMSAyNi4yLTEzLjZMMjQwIDMxMS44IDMyNS44IDQzNC40YzYgOC42IDE1LjggMTMuNiAyNi4yIDEzLjZsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUuMyAwLTg5LjYtMTI4IDg5LjYtMTI4IDE1LjMgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMGMtMTAuNCAwLTIwLjIgNS4xLTI2LjIgMTMuNkwyNDAgMjAwLjIgMTU0LjIgNzcuNkMxNDguMiA2OS4xIDEzOC40IDY0IDEyOCA2NEw5NiA2NHoiXQogICAgfTsKICAgIGZhQ2lyY2xlU3RvcDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXN0b3AiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjA5NCwgInN0b3AtY2lyY2xlIl0sICJmMjhkIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTkyIDE2MGwxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFTdG9wQ2lyY2xlMiA9IGZhQ2lyY2xlU3RvcDI7CiAgICBmYUFycm93c1VwRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtdXAtZG93biIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgWyJhcnJvd3MtdiJdLCAiZjA3ZCIsICJNMTUwLjYtMjIuNmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDk2IDc3LjMgOTYgNDM0LjcgNTQuNiAzOTMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOTYgOTZjNiA2IDE0LjEgOS40IDIyLjYgOS40czE2LjYtMy40IDIyLjYtOS40bDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC00MS40IDQxLjQgMC0zNTcuNSA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZ6Il0KICAgIH07CiAgICBmYUFycm93c1YgPSBmYUFycm93c1VwRG93bjsKICAgIGZhUG9vU3Rvcm0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicG9vLXN0b3JtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInBvby1ib2x0Il0sICJmNzVhIiwgIk0yNjguOS0zMS44Yy01LjUtLjctMTEgMS40LTE0LjUgNS43cy00LjYgMTAuMS0yLjggMTUuM2MyLjggOC4yIDQuMyAxNi45IDQuMyAyNi4xIDAgMjEuNy04LjUgMzcuMi0yMS45IDQ3LjYtMTMuOSAxMC44LTM0LjEgMTctNTguMSAxN2wtMjQgMGMtNDguNiAwLTg4IDM5LjQtODggODggMCAxNC44IDMuNyAyOC44IDEwLjIgNDEuMS00MiA2LjYtNzQuMiA0My03NC4yIDg2LjkgMCA0Ni42IDM2LjIgODQuNyA4MS45IDg3LjggMy4xLTEyLjQgOS45LTIzLjggMTkuNi0zMi41TDI0Mi43IDIyNWMxMi4yLTEwLjkgMjgtMTcgNDQuNC0xNyA0NC42IDAgNzYuNSA0MyA2My43IDg1LjdsLTEyLjcgNDIuNGMyOC44IDEuMiA1Mi43IDIxLjEgNTkuOCA0Ny45bDI2LjIgMGM0OC42IDAgODgtMzkuNCA4OC04OCAwLTQzLjktMzIuMS04MC4zLTc0LjItODYuOSA2LjUtMTIuMyAxMC4yLTI2LjIgMTAuMi00MS4xIDAtNDguNi0zOS40LTg4LTg4LTg4bC05LjQgMGMuOS01LjQgMS40LTEwLjkgMS40LTE2LjYgMC00OC43LTM2LjEtODguOS04My4xLTk1LjJ6TTE0NC42IDQxNmw2MS44IDAtMzEuMiAxMDQuMWMtMy42IDExLjkgNS4zIDIzLjkgMTcuOCAyMy45IDQuNiAwIDktMS43IDEyLjQtNC43TDM0Ni41IDQxMi45YzMuNS0zLjEgNS41LTcuNiA1LjUtMTIuNCAwLTkuMi03LjQtMTYuNi0xNi42LTE2LjZsLTYxLjggMCAzMS4yLTEwNC4xYzMuNi0xMS45LTUuMy0yMy45LTE3LjgtMjMuOS00LjYgMC05IDEuNy0xMi40IDQuN0wxMzMuNSAzODcuMWMtMy41IDMuMS01LjUgNy42LTUuNSAxMi40IDAgOS4yIDcuNCAxNi42IDE2LjYgMTYuNnoiXQogICAgfTsKICAgIGZhUG9vQm9sdCA9IGZhUG9vU3Rvcm07CiAgICBmYVZpZGVvU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlkZW8tc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRlMiIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTUzLTE1MyAwLTIyMi4yYzAtMzUuMy0yOC43LTY0LTY0LTY0TDEyOS44IDY0IDQxLTI0Ljl6TTMyIDEyOGwwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGM3LjggMCAxNS4zLTEuNCAyMi4yLTRMMzYgMTA1LjhjLTIuNiA2LjktNCAxNC40LTQgMjIuMnpNNDY0IDMzNmw3My41IDU4LjhjNC4yIDMuNCA5LjQgNS4yIDE0LjggNS4yIDEzLjEgMCAyMy43LTEwLjYgMjMuNy0yMy43bDAtMjQwLjZjMC0xMy4xLTEwLjYtMjMuNy0yMy43LTIzLjctNS40IDAtMTAuNiAxLjgtMTQuOCA1LjJMNDY0IDE3NiA0NjQgMzM2eiJdCiAgICB9OwogICAgZmFTcXVhcmVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUteG1hcmsiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMDA2MiwgInRpbWVzLXNxdWFyZSIsICJ4bWFyay1zcXVhcmUiXSwgImYyZDMiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTcxIDEzNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw1NSA1NSA1NS01NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTU1IDU1IDU1IDU1YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTU1LTU1LTU1IDU1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU1LTU1LTU1LTU1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXoiXQogICAgfTsKICAgIGZhVGltZXNTcXVhcmUgPSBmYVNxdWFyZVhtYXJrOwogICAgZmFYbWFya1NxdWFyZSA9IGZhU3F1YXJlWG1hcms7CiAgICBmYUhhbmRIb2xkaW5nRHJvcGxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWhvbGRpbmctZHJvcGxldCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJoYW5kLWhvbGRpbmctd2F0ZXIiXSwgImY0YzEiLCAiTTI3NS41IDYuNkwyMDkuMiAxMDNDMTk4IDExOS4zIDE5MiAxMzguNiAxOTIgMTU4LjNsMCAxLjdjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTEuN2MwLTE5LjgtNi0zOS0xNy4yLTU1LjNMMzAwLjUgNi42QzI5Ny43IDIuNSAyOTMgMCAyODggMHMtOS43IDIuNS0xMi41IDYuNnpNMTA5LjMgMzQxLjVMNjYuNyAzODQgMzIgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMC41IDBjMjkgMCA1Ny4zLTkuMyA4MC43LTI2LjVsMTI2LjYtOTMuM2MxNy44LTEzLjEgMjEuNi0zOC4xIDguNS01NS45cy0zOC4xLTIxLjYtNTUuOS04LjVMMzkyLjYgNDE2IDI4MCA0MTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUyLjIgMGMtMzMuOSAwLTY2LjUgMTMuNS05MC41IDM3LjV6Il0KICAgIH07CiAgICBmYUhhbmRIb2xkaW5nV2F0ZXIgPSBmYUhhbmRIb2xkaW5nRHJvcGxldDsKICAgIGZhV29uU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3b24tc2lnbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzgzNjEsICJrcnciLCAid29uIl0sICJmMTU5IiwgIk02Mi40IDUzLjlDNTYuOCAzNy4xIDM4LjcgMjguMSAyMS45IDMzLjZTLTMuOSA1Ny40IDEuNyA3NC4xTDU2LjkgMjQwIDMyIDI0MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MC45IDAgNTYuNyAxNzAuMWM0LjUgMTMuNSAxNy40IDIyLjQgMzEuNiAyMS45czI2LjQtMTAuNCAyOS44LTI0LjJMMjMzIDI4OCAyNzkgMjg4IDMyMSA0NTUuOGMzLjQgMTMuOCAxNS42IDIzLjcgMjkuOCAyNC4yczI3LjEtOC40IDMxLjYtMjEuOUw0MzkuMSAyODggNDgwIDI4OGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjQuOSAwIDU1LjMtMTY1LjljNS42LTE2LjgtMy41LTM0LjktMjAuMi00MC41cy0zNC45IDMuNS00MC41IDIwLjJsLTYyIDE4Ni4xLTU0LjYgMC00NS45LTE4My44QzI4My41IDQyIDI3MC43IDMyIDI1NiAzMnMtMjcuNSAxMC0zMSAyNC4yTDE3OSAyNDAgMTI0LjQgMjQwIDYyLjQgNTMuOXptNzggMjM0LjFsMjYuNiAwLTExLjQgNDUuNi0xNS4yLTQ1LjZ6TTI0NSAyNDBsMTEtNDQuMSAxMSA0NC4xLTIyIDB6bTEwMCA0OGwyNi42IDAtMTUuMiA0NS42LTExLjQtNDUuNnoiXQogICAgfTsKICAgIGZhS3J3ID0gZmFXb25TaWduOwogICAgZmFXb24gPSBmYVdvblNpZ247CiAgICBmYU9iamVjdFVuZ3JvdXAyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm9iamVjdC11bmdyb3VwIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyNDgiLCAiTTMyIDExOS40QzEyLjkgMTA4LjQgMCA4Ny43IDAgNjQgMCAyOC43IDI4LjcgMCA2NCAwIDg3LjcgMCAxMDguNCAxMi45IDExOS40IDMybDIwOS4xIDBjMTEuMS0xOS4xIDMxLjctMzIgNTUuNC0zMiAzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDIzLjctMTIuOSA0NC40LTMyIDU1LjRsMCAxMTMuMWMxOS4xIDExLjEgMzIgMzEuNyAzMiA1NS40IDAgMzUuMy0yOC43IDY0LTY0IDY0LTIzLjcgMC00NC40LTEyLjktNTUuNC0zMmwtMjA5LjEgMGMtMTEuMSAxOS4xLTMxLjcgMzItNTUuNCAzMi0zNS4zIDAtNjQtMjguNy02NC02NCAwLTIzLjcgMTIuOS00NC40IDMyLTU1LjRsMC0xMTMuMXpNMTE5LjQgOTZjLTUuNiA5LjctMTMuNyAxNy44LTIzLjQgMjMuNGwwIDExMy4xYzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNGwyMDkuMSAwYzUuNi05LjcgMTMuNy0xNy44IDIzLjQtMjMuNGwwLTExMy4xYy05LjctNS42LTE3LjgtMTMuNy0yMy40LTIzLjRMMTE5LjQgOTZ6TTU0NCAyNzkuNGMtOS43LTUuNi0xNy44LTEzLjctMjMuNC0yMy40bC0yOS4yIDBjLTUuMy0xNy43LTE0LjgtMzMuNS0yNy40LTQ2LjRsMC0xNy42IDU2LjYgMGMxMS4xLTE5LjEgMzEuNy0zMiA1NS40LTMyIDM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNGwwIDExMy4xYzE5LjEgMTEuMSAzMiAzMS43IDMyIDU1LjQgMCAzNS4zLTI4LjcgNjQtNjQgNjQtMjMuNyAwLTQ0LjQtMTIuOS01NS40LTMybC0yMDkuMSAwYy0xMS4xIDE5LjEtMzEuNyAzMi01NS40IDMyLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNGwwLTI0LjYgNjQgMCAwIDI0LjZjOS43IDUuNiAxNy44IDEzLjcgMjMuNCAyMy40bDIwOS4xIDBjNS42LTkuNyAxMy43LTE3LjggMjMuNC0yMy40bDAtMTEzLjF6Il0KICAgIH07CiAgICBmYUNvbW1lbnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbW1lbnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0ODksIDYxNjY5XSwgImYwNzUiLCAiTTUxMiAyNDBjMCAxMzIuNS0xMTQuNiAyNDAtMjU2IDI0MC0zNy4xIDAtNzIuMy03LjQtMTA0LjEtMjAuN0wzMy41IDUxMC4xYy05LjQgNC0yMC4yIDEuNy0yNy4xLTUuOFMtMiA0ODUuOCAyLjggNDc2LjhsNDguOC05Mi4yQzE5LjIgMzQ0LjMgMCAyOTQuMyAwIDI0MCAwIDEwNy41IDExNC42IDAgMjU2IDBTNTEyIDEwNy41IDUxMiAyNDB6Il0KICAgIH07CiAgICBmYUhpbGxBdmFsYW5jaGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGlsbC1hdmFsYW5jaGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUwNyIsICJNNDQwLjEgNDAxLjljMzQuMiAyMy4xIDgxLjEgMTkuNSAxMTEuNC0xMC44IDM0LjQtMzQuNCAzNC40LTkwLjEgMC0xMjQuNS0yNy44LTI3LjgtNjkuNS0zMy4xLTEwMi42LTE2LTExLjggNi4xLTE2LjQgMjAuNi0xMC4zIDMyLjNzMjAuNiAxNi40IDMyLjMgMTAuM2MxNS4xLTcuOCAzNC01LjMgNDYuNiA3LjMgMTUuNiAxNS42IDE1LjYgNDAuOSAwIDU2LjZzLTQwLjkgMTUuNi01Ni42IDBsLTgxLjctODEuN2MyMi4zLTE0LjIgMzcuMS0zOS4xIDM3LjEtNjcuNSAwLTMzLjktMjEuMS02Mi45LTUwLjktNzQuNSAxLjktNi44IDIuOS0xNCAyLjktMjEuNSAwLTQ0LjItMzUuOC04MC04MC04MC0yNy4zIDAtNTEuNSAxMy43LTY1LjkgMzQuNi01LjgtMjAtMjQuMi0zNC42LTQ2LjEtMzQuNi0yNi41IDAtNDggMjEuNS00OCA0OCAwIDQgLjUgNy45IDEuNCAxMS42TDQ0MC4xIDQwMS45ek00ODAuNCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0wIDEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTY4LjcgODdDNDMuNSA2MS44IC40IDc5LjcgLjQgMTE1LjNMLjQgNDMyYzAgNDQuMiAzNS44IDgwIDgwIDgwbDMxNi43IDBjMzUuNiAwIDUzLjUtNDMuMSAyOC4zLTY4LjNMNjguNyA4N3oiXQogICAgfTsKICAgIGZhQXJyb3dzVG9FeWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXRvLWV5ZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGJmIiwgIk0xNzYgNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAzOC4xLTYzLTYzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMyMS43IDU1LjYgMzEgNjVsNjMgNjMtMzguMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDk2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC05NnptMCA0MDBsMC05NmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtOTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzOC4xIDAtNjMgNjNjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw2My02MyAwIDM4LjFjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHptMzEyIDI0YzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMzguMSA2MyA2M2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTYzLTYzIDM4LjEgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtOTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHpNNDY0IDU2bDAgOTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsOTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzguMSAwIDYzLTYzYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTYzIDYzIDAtMzguMWMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHpNMzIwIDEyMGMtNTcuMyAwLTk5LjQgMzQtMTI1LjYgNjQuMy0yMCAyMy4xLTMyLjQgNDUuOC0zNy42IDU2LjEtMi41IDUtNC45IDkuNy00LjkgMTUuNnMyLjMgMTAuNiA0LjkgMTUuNmM1LjIgMTAuMyAxNy42IDMzIDM3LjYgNTYuMSAyNi4yIDMwLjMgNjguMiA2NC4zIDEyNS42IDY0LjNzOTkuNC0zNCAxMjUuNi02NC4zYzIwLTIzLjEgMzIuNC00NS44IDM3LjYtNTYuMSAyLjUtNSA0LjktOS43IDQuOS0xNS42cy0yLjMtMTAuNi00LjktMTUuNmMtNS4yLTEwLjMtMTcuNi0zMy0zNy42LTU2LjEtMjYuMi0zMC4zLTY4LjItNjQuMy0xMjUuNi02NC4zek0yNTYgMjU2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHoiXQogICAgfTsKICAgIGZhU25vd3Bsb3cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic25vd3Bsb3ciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjdkMiIsICJNMTI4IDE2MGwwLTk2YzAtMzUuMyAyOC43LTY0IDY0LTY0TDI5Ni40IDBjMjQuMiAwIDQ2LjQgMTMuNyA1Ny4yIDM1LjRsODcuNiAxNzUuMWM0LjQgOC45IDYuOCAxOC43IDYuOCAyOC42bDAgNTYuOSA4MCAwIDAtODBjMC00OC42IDM5LjQtODggODgtODggMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTIyLjEgMC00MCAxNy45LTQwIDQwbDAgMjA4YzAgMjIuMSAxNy45IDQwIDQwIDQwIDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy00OC42IDAtODgtMzkuNC04OC04OGwwLTgwLTYzIDBjOS41IDE2LjUgMTUgMzUuNiAxNSA1NiAwIDYxLjktNTAuMSAxMTItMTEyIDExMmwtMjI0IDBjLTYxLjkgMC0xMTItNTAuMS0xMTItMTEyIDAtMzAuNSAxMi4yLTU4LjIgMzItNzguNEw2NCAyMjRjMC0zNS4zIDI4LjctNjQgNjQtNjR6bTkxLjcgMzQuOWw0My42IDI5LjEgMTEzLjIgMC04MC0xNjAtMTA0LjQgMCAwIDEwOC44IDI3LjcgMjIuMXpNNDE2IDQwMGMwLTI2LjUtMjEuNS00OC00OC00OGwtMjI0IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDhsMjI0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6bS0yODAgMGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0yMTYtMjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0yMzIgNDAwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il0KICAgIH07CiAgICBmYUNoYXJ0R2FudHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtZ2FudHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTBlNCIsICJNNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCA0MDBjMCA0NC4yIDM1LjggODAgODAgODBsNDAwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMODAgNDE2Yy04LjggMC0xNi03LjItMTYtMTZMNjQgNjR6bTk2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMHptNjQgMTEyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMjggMHpNMzg0IDI4OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAweiJdCiAgICB9OwogICAgZmFWaWRlbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aWRlbyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ2aWRlby1jYW1lcmEiXSwgImYwM2QiLCAiTTk2IDY0Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw5NiA2NHpNNDY0IDMzNmw3My41IDU4LjhjNC4yIDMuNCA5LjQgNS4yIDE0LjggNS4yIDEzLjEgMCAyMy43LTEwLjYgMjMuNy0yMy43bDAtMjQwLjZjMC0xMy4xLTEwLjYtMjMuNy0yMy43LTIzLjctNS40IDAtMTAuNiAxLjgtMTQuOCA1LjJMNDY0IDE3NiA0NjQgMzM2eiJdCiAgICB9OwogICAgZmFWaWRlb0NhbWVyYSA9IGZhVmlkZW87CiAgICBmYUNoZXNzUGF3bjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlc3MtcGF3biIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk4MjNdLCAiZjQ0MyIsICJNMTkyLTMyYzY2LjMgMCAxMjAgNTMuNyAxMjAgMTIwIDAgMjctOC45IDUxLjktMjQgNzIgMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEwLjcgMCAyNi43IDE2MCA1Ni4yIDcwLjNjNSA2LjMgNy44IDE0LjEgNy44IDIyLjIgMCAxOS42LTE1LjkgMzUuNS0zNS41IDM1LjVMNTEuNSA1MTJjLTE5LjYgMC0zNS41LTE1LjktMzUuNS0zNS41IDAtOC4xIDIuNy0xNS45IDcuOC0yMi4yTDgwIDM4NCAxMDYuNyAyMjQgOTYgMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyYy0xNS4xLTIwLjEtMjQtNDUtMjQtNzIgMC02Ni4zIDUzLjctMTIwIDEyMC0xMjB6Il0KICAgIH07CiAgICBmYVN5bmFnb2d1ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzeW5hZ29ndWUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgzMzNdLCAiZjY5YiIsICJNMTYgODBjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NGwwIDMyLTEyOCAwIDAtMzJ6bTAgMzY4bDAtMjg4IDEyOCAwIDEyNi4yLTg0LjJjMTAuNy03LjIgMjQuOC03LjIgMzUuNSAwbDEyNi4yIDg0LjIgMTI4IDAgMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMODAgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NHpNNTYwIDExMmwtMTI4IDAgMC0zMmMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0bDAgMzJ6TTIyNCAzODRsMCA4MCAxMjggMCAwLTgwYzAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0em02NC0xNTJhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdCiAgICB9OwogICAgZmFCdWlsZGluZ0NpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGQyIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0xMC41LTE0LjYtMTktMzAuNy0yNS4xLTQ4bC03NC45IDAgMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzIgMCA0IC4yIDUuOSAuNSA2LTIzLjYgMTYuMy00NS40IDMwLjEtNjQuNWwtNCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0YzI3LjUtMTkuOCA2MC4zLTMyLjQgOTYtMzUuNEw0MTYgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgMHptMzIgMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI3MiA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xMjggMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTU3NiA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdCiAgICB9OwogICAgZmFDYWxlbmRhclBsdXMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyLXBsdXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI3MSIsICJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem05NiAxOTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDgtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwIDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQ4IDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhV2hlZWxjaGFpck1vdmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2hlZWxjaGFpci1tb3ZlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbIndoZWVsY2hhaXItYWx0Il0sICJlMmNlIiwgIk0zMTIgNTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0yMDUuNCAxMjQuMWMtNi40LTUuMi0xNS42LTQuNy0yMS40IDEuMWwtMzMuNCAzMy40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wxMzguOCA4MGMyOS0yOSA3NS4yLTMxLjQgMTA3LTUuNWw4MS4zIDY2YzIxLjQgMTcuNCAyMy44IDQ5LjIgNS4yIDY5LjVsLTQxLjggNDYgOTggMGMzMC4zIDAgNTMgMjcuNyA0Ny4xIDU3LjRMNDA3LjQgNDU0LjNjLTMuNSAxNy4zLTIwLjMgMjguNi0zNy43IDI1LjFzLTI4LjYtMjAuMy0yNS4xLTM3LjdMMzY5IDMyMCAzMTYuOCAzMjBjMi4xIDEwLjMgMy4yIDIxIDMuMiAzMiAwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMwIDQ0MC40IDAgMzUyIDcxLjYgMTkyIDE2MCAxOTJjNiAwIDExLjkgLjMgMTcuOCAxbDUwLjQtNTAuNC0yMi43LTE4LjV6TTE2MCA0NDhhOTYgOTYgMCAxIDAgMC0xOTIgOTYgOTYgMCAxIDAgMCAxOTJ6Il0KICAgIH07CiAgICBmYVdoZWVsY2hhaXJBbHQgPSBmYVdoZWVsY2hhaXJNb3ZlOwogICAgZmFVc2VyU2hpZWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItc2hpZWxkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1MDUiLCAiTTIyNCAyNDhhMTIwIDEyMCAwIDEgMCAwLTI0MCAxMjAgMTIwIDAgMSAwIDAgMjQwem0tMjkuNyA1NkM5NS44IDMwNCAxNiAzODMuOCAxNiA0ODIuMyAxNiA0OTguNyAyOS4zIDUxMiA0NS43IDUxMmwyNTEuNSAwQzI2MSA0NjkuNCAyNDAgNDE0LjUgMjQwIDM1Ni40bDAtMzEuMWMwLTcuMyAxLTE0LjUgMi45LTIxLjNsLTQ4LjYgMHptMjUxIDE4NC41bC0xMy4zIDYuMyAwLTE4OC4xIDk2IDMyIDAgMTkuNmMwIDU1LjgtMzIuMiAxMDYuNS04Mi43IDEzMC4zek00MjEuOSAyNTkuNWwtMTEyIDM3LjNjLTEzLjEgNC40LTIxLjkgMTYuNi0yMS45IDMwLjRsMCAzMS4xYzAgNzQuNCA0MyAxNDIuMSAxMTAuMiAxNzMuN2wxOC41IDguN2M0LjggMi4yIDEwIDMuNCAxNS4yIDMuNHMxMC41LTEuMiAxNS4yLTMuNGwxOC41LTguN0M1MzMgNTAwLjMgNTc2IDQzMi42IDU3NiAzNTguMmwwLTMxLjFjMC0xMy44LTguOC0yNi0yMS45LTMwLjRsLTExMi0zNy4zYy02LjYtMi4yLTEzLjctMi4yLTIwLjIgMHoiXQogICAgfTsKICAgIGZhQm9sZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib2xkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYwMzIiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5NmwzMiAwIDAgMzIwLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjI0IDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjggMC00Ni41LTI0LjgtODcuMy02Mi0xMDkuNyAxOC43LTIyLjMgMzAtNTEgMzAtODIuMyAwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEwzMiAzMnpNMjg4IDE2MGMwIDM1LjMtMjguNyA2NC02NCA2NGwtOTYgMCAwLTEyOCA5NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0ek0xMjggNDE2bDAtMTI4IDEyOCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0bC0xMjggMHoiXQogICAgfTsKICAgIGZhSGVhcnRQdWxzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydC1wdWxzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJoZWFydGJlYXQiXSwgImYyMWUiLCAiTTI1NiAxMDcuOUwyNDEgODcuMUMyMTYgNTIuNSAxNzUuOSAzMiAxMzMuMSAzMiA1OS42IDMyIDAgOTEuNiAwIDE2NS4xbDAgMi42YzAgMjMuNiA2LjIgNDggMTYuNiA3Mi4zbDEwNiAwYzMuMiAwIDYuMS0xLjkgNy40LTQuOWwzMS44LTc2LjNjMy43LTguOCAxMi4zLTE0LjYgMjEuOC0xNC44czE4LjMgNS40IDIyLjIgMTQuMWw1MS4zIDExMy45IDQxLjQtODIuOGM0LjEtOC4xIDEyLjQtMTMuMyAyMS41LTEzLjNzMTcuNCA1LjEgMjEuNSAxMy4zbDIzLjIgNDYuM2MxLjQgMi43IDQuMSA0LjQgNy4yIDQuNGwxMjMuNiAwYzEwLjUtMjQuMyAxNi42LTQ4LjcgMTYuNi03Mi4zbDAtMi42QzUxMiA5MS42IDQ1Mi40IDMyIDM3OC45IDMyIDMzNi4yIDMyIDI5NiA1Mi41IDI3MSA4Ny4xbC0xNSAyMC43ek00NjkuNiAyODhsLTk3LjggMGMtMjEuMiAwLTQwLjYtMTItNTAuMS0zMWwtMS43LTMuNC00Mi41IDg1LjFjLTQuMSA4LjMtMTIuNyAxMy41LTIyIDEzLjNzLTE3LjYtNS43LTIxLjQtMTQuMWwtNDkuMy0xMDkuNS0xMC41IDI1LjJjLTguNyAyMC45LTI5LjEgMzQuNS01MS43IDM0LjVsLTgwLjIgMGM0Ny4yIDczLjggMTIzIDE0MS43IDE3MC40IDE3Ny45IDEyLjQgOS40IDI3LjYgMTQuMSA0My4xIDE0LjFzMzAuOC00LjYgNDMuMS0xNC4xQzM0Ni42IDQyOS43IDQyMi40IDM2MS44IDQ2OS42IDI4OHoiXQogICAgfTsKICAgIGZhSGVhcnRiZWF0ID0gZmFIZWFydFB1bHNlOwogICAgZmFTcXVhcmVSb290VmFyaWFibGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXJvb3QtdmFyaWFibGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsic3F1YXJlLXJvb3QtYWx0Il0sICJmNjk4IiwgIk0yODIuNiA3OC4xYzgtMjcuMyAzMy00Ni4xIDYxLjQtNDYuMWwyMDAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzNDQgOTYgMjM4LjcgNDU3Yy0zLjYgMTIuMy0xNC4xIDIxLjItMjYuOCAyMi44cy0yNS4xLTQuNi0zMS41LTE1LjZMNzcuNiAyODggMzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDQ1LjYgMGMyMi44IDAgNDMuOCAxMi4xIDU1LjMgMzEuOGw2NS4yIDExMS44IDg0LjQtMjg5LjV6TTM5My40IDIzMy40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDQxLjQgNDEuNCA0MS40LTQxLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtNDEuNCA0MS40IDQxLjQgNDEuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtNDEuNC00MS40LTQxLjQgNDEuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsNDEuNC00MS40LTQxLjQtNDEuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjN6Il0KICAgIH07CiAgICBmYVNxdWFyZVJvb3RBbHQgPSBmYVNxdWFyZVJvb3RWYXJpYWJsZTsKICAgIGZhSGFuZHNCdWJibGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLWJ1YmJsZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiaGFuZHMtd2FzaCJdLCAiZTA1ZSIsICJNMzg0IDY0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptOTYgMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMTI4IDQ2NGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0wIDE2MGwuMSA3Mi42YzAgNDQuOCAxNy42IDg3LjEgNDcuOSAxMTguNCAuMy03NyA0MC4xLTE0OC40IDEwNS40LTE4OS4zbDEuOS0xLjJjLTIuNS0zLjctMi44LTguNi0uNC0xMi43bDYyLTEwNy40YzYuNi0xMS41IDIuNy0yNi4yLTguOC0zMi44UzE4MiA1IDE3NS40IDE2LjVsLTY4IDExNy44IDAgMCAwIDAtNDMuMyA3NSAwLTQ5LjNjMC0xNy43LTE0LjQtMzItMzItMzJTMCAxNDIuNCAwIDE2MHptMjEzLjYtMzUuOWMxNC4xLTguOCAyOS44LTEyLjcgNDUuMi0xMi4xbDM2LjUtNjMuM2M2LjYtMTEuNSAyLjctMjYuMi04LjgtMzIuOHMtMjYuMi0yLjctMzIuOCA4LjhsLTY3LjEgMTE2LjIgMjctMTYuOXptODYuNS0zNS43bC0xNi40IDI4LjRjMTUuMSA1LjUgMjguNiAxNS42IDM4LjMgMjkuN2wxOS43LTM0LjJjNi42LTExLjUgMi43LTI2LjItOC44LTMyLjhzLTI2LjItMi43LTMyLjggOC44em00Ni40IDYzLjdsLTEyLjUgMjEuN2MyIDguNiAyLjUgMTcuNSAxLjcgMjYuMWw0LjMgMCAwIDAgMzQuNCAwIDEzLjctMjMuOGM2LjYtMTEuNSAyLjctMjYuMi04LjgtMzIuOHMtMjYuMi0yLjctMzIuOCA4Ljh6TTI4My4xIDE3NWMtOS40LTE1LTI5LjEtMTkuNS00NC4xLTEwLjJsLTYwLjIgMzcuNkMxMjcuMyAyMzQuNyA5NiAyOTEuMiA5NiAzNTJsMCA4YzAgOC45IC44IDE3LjYgMi4yIDI2LjEgMzUuNCA4LjIgNjEuOCA0MCA2MS44IDc3LjkgMCA2LjMtLjcgMTIuNS0yLjEgMTguNCAyNS4yIDE4LjYgNTYuNCAyOS42IDkwLjEgMjkuNmwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtOTIgMGMtNi42IDAtMTItNS40LTEyLTEyczUuNC0xMiAxMi0xMmwxMjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTI0IDBjLTYuNiAwLTEyLTUuNC0xMi0xMnM1LjQtMTIgMTItMTJsMTU2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE1NiAwYy02LjYgMC0xMi01LjQtMTItMTJzNS40LTEyIDEyLTEybDEyNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMzYgMCAwIDAgMCAwLTkzLjIgMCA0Ni4yLTI4LjljMTUtOS40IDE5LjUtMjkuMSAxMC4yLTQ0LjF6Il0KICAgIH07CiAgICBmYUhhbmRzV2FzaCA9IGZhSGFuZHNCdWJibGVzOwogICAgZmFNYXJrZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFya2VyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YTEiLCAiTTQwOC44IDBjLTI3LjQgMC01My42IDEwLjktNzMgMzAuMkwzMTguMSA0OCAzMDUgMzQuOWMtMjguMS0yOC4xLTczLjctMjguMS0xMDEuOCAwTDEwMyAxMzVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMEwyMzcuMSA2OC45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDI4NC4xIDgxLjkgMTg0IDE4Mi4xIDMyOS45IDMyOCA0ODEuOCAxNzYuMmMxOS40LTE5LjQgMzAuMi00NS42IDMwLjItNzMgMC01Ny00Ni4yLTEwMy4yLTEwMy4yLTEwMy4yek0xMDIuNCAyNjMuN2MtNDkuOSA0OS45LTgzLjMgMTE0LTk1LjUgMTgzLjVMLjQgNDgzLjhDLTEgNDkxLjYgMS41IDQ5OS40IDcgNTA1czEzLjQgOCAyMS4xIDYuN2wzNi43LTYuNWM2OS41LTEyLjMgMTMzLjYtNDUuNiAxODMuNS05NS41TDI5NiAzNjEuOSAxNTAuMSAyMTYgMTAyLjQgMjYzLjd6Il0KICAgIH07CiAgICBmYUNsaXBib2FyZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xpcGJvYXJkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MjAzXSwgImYzMjgiLCAiTTMyMCAzMmwtOC42IDBDMzAwLjQgMTIuOSAyNzkuNyAwIDI1NiAwTDEyOCAwQzEwNC4zIDAgODMuNiAxMi45IDcyLjYgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM1MmMwLTM1LjMtMjguNy02NC02NC02NHpNMTM2IDExMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTEyIDB6Il0KICAgIH07CiAgICBmYVBsYWNlT2ZXb3JzaGlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYWNlLW9mLXdvcnNoaXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjY3ZiIsICJNMTYwIDc5bDAgODEtNDQuOCAzMy42QzEwMy4xIDIwMi43IDk2IDIxNi45IDk2IDIzMmwwIDQwLTYwLjYgMzAuM0MxMy43IDMxMy4yIDAgMzM1LjMgMCAzNTkuNkwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NCA3NC43IDAgODUuNCAwIDMyMCAwbDY0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC04OC40YzAtMjQuMi0xMy43LTQ2LjQtMzUuNC01Ny4yTDQxNiAyNzIgNDE2IDIzMmMwLTE1LjEtNy4xLTI5LjMtMTkuMi0zOC40TDM1MiAxNjAgMzUyIDc5YzAtOS41LTQuMi0xOC41LTExLjUtMjQuNkwyNzEuNC0zLjJjLTguOS03LjQtMjEuOC03LjQtMzAuNyAwTDE3MS41IDU0LjRDMTY0LjIgNjAuNSAxNjAgNjkuNSAxNjAgNzl6bTk2IDI0MWMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDgwLTEyOCAwIDAtODBjMC0zNS4zIDI4LjctNjQgNjQtNjR6Il0KICAgIH07CiAgICBmYUNhbm5hYmlzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbm5hYmlzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1NWYiLCAiTTI1NiAwYzUuMyAwIDEwLjMgMi43IDEzLjMgNy4xIDE1LjggMjMuNSAzNi43IDYzLjcgNDkuMiAxMDkgNy4zIDI2LjQgMTEuOCA1NS4zIDEwLjMgODQgMTEuNi04LjkgMjMuNy0xNi43IDM1LjktMjMuNyA0MS0yMy4zIDg0LjQtMzYuOSAxMTIuMi00Mi41IDUuMi0xIDEwLjcgLjYgMTQuNCA0LjRzNS40IDkuMiA0LjQgMTQuNWMtNS42IDI3LjctMTkuMyA3MC45LTQyLjcgMTExLjctOS4xIDE1LjktMTkuOSAzMS43LTMyLjUgNDYuMyAyNy45IDYuNiA1Mi41IDE3LjIgNjcuMyAyNS40IDUuMSAyLjggOC4yIDguMiA4LjIgMTRzLTMuMiAxMS4yLTguMiAxNGMtMTUuMiA4LjQtNDAuOSAxOS41LTY5LjggMjYuMS0yMC4yIDQuNi00Mi45IDcuMi02NS4yIDQuNmw4LjMgMzMuMmMxLjUgNi4xLS42IDEyLjUtNS41IDE2LjRzLTExLjYgNC42LTE3LjIgMS44TDI4MCA0MTcuMiAyODAgNDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNzAuOC01OC41IDI5LjFjLTUuNiAyLjgtMTIuMyAyLjEtMTcuMi0xLjhzLTctMTAuMy01LjUtMTYuNGw4LjMtMzMuMmMtMjIuMiAyLjYtNDUgMC02NS4yLTQuNi0yOC45LTYuNi01NC41LTE3LjYtNjkuOC0yNi4xLTUuMS0yLjgtOC4yLTguMi04LjItMTRzMy4yLTExLjIgOC4yLTE0bDYuMi0zLjNjMTUtNy42IDM2LjgtMTYuNCA2MS4xLTIyLjItMTIuNS0xNC41LTIzLjMtMzAuNC0zMi40LTQ2LjItMjMuNC00MC44LTM3LjEtODQtNDIuNy0xMTEuNy0xLjEtNS4yIC42LTEwLjcgNC40LTE0LjVzOS4yLTUuNCAxNC40LTQuNGMyNy45IDUuNSA3MS4yIDE5LjIgMTEyLjIgNDIuNSAxMi4yIDYuOSAyNC4zIDE0LjggMzUuOCAyMy43LTEuNC0yOC43IDMuMS01Ny42IDEwLjMtODQgMTIuNS00NS4zIDMzLjQtODUuNSA0OS4yLTEwOWwxLjItMS42QzI0Ni45IDIgMjUxLjMgMCAyNTYgMHoiXQogICAgfTsKICAgIGZhUGVvcGxlUm9vZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW9wbGUtcm9vZiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTM3IiwgIk0zMDIuMy0xMi42Yy05LTQuNS0xOS42LTQuNS0yOC42IDBsLTI1NiAxMjhDMS45IDEyMy4zLTQuNSAxNDIuNSAzLjQgMTU4LjNzMjcuMSAyMi4yIDQyLjkgMTQuM0wyODggNTEuOCA1MjkuNyAxNzIuNmMxNS44IDcuOSAzNSAxLjUgNDIuOS0xNC4zczEuNS0zNS0xNC4zLTQyLjlsLTI1Ni0xMjh6TTI4OCAyNzJhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6bTAgNDhjLTUzIDAtOTYgNDMtOTYgOTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyYzAtNTMtNDMtOTYtOTYtOTZ6TTE2MCAyNTZhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHptMzUyIDBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMTEyIDMzNmMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAzMy4xYzAgMTcgMTMuOCAzMC45IDMwLjkgMzAuOWw4Ny44IDBjLTQuMy05LjgtNi43LTIwLjYtNi43LTMybDAtNDhjMC0xOC40IDMuNS0zNiA5LjgtNTIuMi0xMi4yLTcuNS0yNi41LTExLjgtNDEuOC0xMS44ek00MjUuNCA0ODBsODcuOCAwYzE3IDAgMzAuOS0xMy44IDMwLjktMzAuOWwwLTMzLjFjMC00NC4yLTM1LjgtODAtODAtODAtMTUuMyAwLTI5LjYgNC4zLTQxLjggMTEuOCA2LjMgMTYuMiA5LjggMzMuOCA5LjggNTIuMmwwIDQ4YzAgMTEuNC0yLjQgMjIuMi02LjcgMzJ6Il0KICAgIH07CiAgICBmYURpc2Vhc2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGlzZWFzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2ZhIiwgIk0yMzYuNSAyOS40TDIyNCA0OGMtMjAgMzAtNTMuNiA0OC04OS43IDQ4TDY4IDk2Yy0zNy41IDAtNjcuOSAzMC40LTY3LjkgNjcuOSAwIDE4IDcuMiAzNS4yIDE5LjkgNDcuOWwyNyAyN2MxMSAxMSAxNy4yIDI1LjkgMTcuMiA0MS41IDAgMTUuOC02LjQgMzAuOS0xNy43IDQyTDMzLjQgMzM1LjFjLTExLjEgMTAuOC0xNy4zIDI1LjctMTcuMyA0MS4yIDAgMzYuOCAzNC4xIDY0LjIgNzAuMSA1Ni4ybDYyLjMtMTMuOGM3LjctMS43IDE1LjctMi42IDIzLjYtMi42IDMyLjggMCA2NC4yIDE0LjYgODUuMiAzOS44bDMwLjUgMzYuNmMxMC40IDEyLjQgMjUuNyAxOS42IDQxLjkgMTkuNiAzMC4xIDAgNTQuNS0yNC40IDU0LjUtNTQuNWwwLTUxLjJjMC00MS40IDI1LjQtNzguNSA2NC05My41bDIyLjItOC42YzI1LjItOS44IDQxLjgtMzQuMSA0MS44LTYxLjEgMC0yNi40LTE1LjktNTAuMy00MC4zLTYwLjVMNDI5IDE2NC44Yy0zMy4yLTEzLjktNTcuNi00My02NS41LTc4LjFsLTcuOS0zNS4yYy02LjgtMzAuMS0zMy41LTUxLjUtNjQuMy01MS41LTIyIDAtNDIuNiAxMS01NC44IDI5LjR6TTE2MCAxOTJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em05NiAwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTMyIDk2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhQm9va0JpYmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2stYmlibGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiYmlibGUiXSwgImY2NDciLCAiTTk2IDUxMmMtNTMgMC05Ni00My05Ni05NkwwIDk2QzAgNDMgNDMgMCA5NiAwTDQwMCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjg4YzAgMjAuOS0xMy40IDM4LjctMzIgNDUuM2wwIDY2LjdjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMOTYgNTEyem0wLTEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyNTYgMCAwLTY0LTI1NiAwek0xOTIgODBsMCA0OC00OCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsNDggMCAwIDExMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xMTIgNDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTQ4IDAgMC00OGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnoiXQogICAgfTsKICAgIGZhQmlibGUgPSBmYUJvb2tCaWJsZTsKICAgIGZhQ2hlc3NCb2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1ib2FyZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDNjIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem02NCA2NGwwIDY0IDY0IDAgMC02NCA2NCAwIDAgNjQgNjQgMCAwLTY0IDY0IDAgMCA2NC02NCAwIDAgNjQgNjQgMCAwIDY0LTY0IDAgMCA2NCA2NCAwIDAgNjQtNjQgMCAwLTY0LTY0IDAgMCA2NC02NCAwIDAtNjQtNjQgMCAwIDY0LTY0IDAgMC02NCA2NCAwIDAtNjQtNjQgMCAwLTY0IDY0IDAgMC02NC02NCAwIDAtNjQgNjQgMHptNjQgMTI4bDY0IDAgMC02NC02NCAwIDAgNjR6bTAgNjRsMC02NC02NCAwIDAgNjQgNjQgMHptNjQgMGwtNjQgMCAwIDY0IDY0IDAgMC02NHptMCAwbDY0IDAgMC02NC02NCAwIDAgNjR6Il0KICAgIH07CiAgICBmYU1hcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFycyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3OTRdLCAiZjIyMiIsICJNMzIwIDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyTDQ4MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNTAuNy05NSA5NWMxOS41IDI4LjQgMzEgNjIuNyAzMSA5OS44IDAgOTcuMi03OC44IDE3Ni0xNzYgMTc2UzMyIDQwMS4yIDMyIDMwNCAxMTAuOCAxMjggMjA4IDEyOGMzNyAwIDcxLjQgMTEuNCA5OS44IDMxbDk1LTk1LTUwLjcgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTIwOCA0MTZhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0eiJdCiAgICB9OwogICAgZmFMYXB0b3AgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGFwdG9wIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MTg3XSwgImYxMDkiLCAiTTEyOCAzMkM5Mi43IDMyIDY0IDYwLjcgNjQgOTZsMCAyNDAgNjQgMCAwLTI0MCAzODQgMCAwIDI0MCA2NCAwIDAtMjQwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDEyOCAzMnpNMTkuMiAzODRDOC42IDM4NCAwIDM5Mi42IDAgNDAzLjIgMCA0NDUuNiAzNC40IDQ4MCA3Ni44IDQ4MGw0ODYuNCAwYzQyLjQgMCA3Ni44LTM0LjQgNzYuOC03Ni44IDAtMTAuNi04LjYtMTkuMi0xOS4yLTE5LjJMMTkuMiAzODR6Il0KICAgIH07CiAgICBmYVVzZXJYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbInVzZXItdGltZXMiXSwgImYyMzUiLCAiTTEzNi40IDEyOGExMjAgMTIwIDAgMSAxIDI0MCAwIDEyMCAxMjAgMCAxIDEgLTI0MCAwem0tODggMzU0LjNjMC05OC41IDc5LjgtMTc4LjMgMTc4LjMtMTc4LjNsNTkuNCAwYzk4LjUgMCAxNzguMyA3OS44IDE3OC4zIDE3OC4zIDAgMTYuNC0xMy4zIDI5LjctMjkuNyAyOS43TDc4LjEgNTEyYy0xNi40IDAtMjkuNy0xMy4zLTI5LjctMjkuN3pNNjEyLjMgMTI0LjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTMzLjkgMzMuOSAzMy45IDMzLjljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMzMuOS0zMy45LTMzLjkgMzMuOWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMy45LTMzLjktMzMuOS0zMy45Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMzMuOSAzMy45IDMzLjktMzMuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHoiXQogICAgfTsKICAgIGZhVXNlclRpbWVzID0gZmFVc2VyWG1hcms7CiAgICBmYUZsYWdVc2EgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmxhZy11c2EiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjc0ZCIsICJNMzIgMEM0OS43IDAgNjQgMTQuMyA2NCAzMmwwIDE2IDY5LTE3LjJjMzguMS05LjUgNzguMy01LjEgMTEzLjUgMTIuNSA0Ni4zIDIzLjIgMTAwLjggMjMuMiAxNDcuMSAwbDkuNi00LjhDNDIzLjggMjguMSA0NDggNDMuMSA0NDggNjYuMWwwIDM2LjEtNDQuNyAxNi4yYy00Mi44IDE1LjYtOTAgMTMuOS0xMzEuNi00LjZsLTE2LjEtNy4yYy0yMC4zLTktNDEuOC0xNC43LTYzLjYtMTYuOWwwIDMyLjJjMTcuNCAyLjEgMzQuNCA2LjcgNTAuNiAxMy45bDE2LjEgNy4yYzQ5LjIgMjEuOSAxMDUgMjMuOCAxNTUuNiA1LjRsMzMuNy0xMi4zIDAgNjItNDQuNyAxNi4yYy00Mi44IDE1LjYtOTAgMTMuOS0xMzEuNi00LjZsLTE2LjEtNy4yYy00MC4yLTE3LjktODUtMjIuNS0xMjguMS0xMy4zbC02My41IDEzLjYgMCAzMi43IDcwLjItMTUuMWMzNi40LTcuOCA3NC4zLTMuOSAxMDguNCAxMS4zbDE2LjEgNy4yYzQ5LjIgMjEuOSAxMDUgMjMuOCAxNTUuNiA1LjRsMzMuNy0xMi4zIDAgNjEuOS00NC43IDE2LjJjLTQyLjggMTUuNi05MCAxMy45LTEzMS42LTQuNmwtMTYuMS03LjJjLTQwLjItMTcuOS04NS0yMi41LTEyOC4xLTEzLjNsLTYzLjUgMTMuNiAwIDMyLjcgNzAuMi0xNS4xYzM2LjQtNy44IDc0LjMtMy45IDEwOC40IDExLjNsMTYuMSA3LjJjNDkuMiAyMS45IDEwNSAyMy44IDE1NS42IDUuNGwzMy43LTEyLjMgMCAzMy41YzAgMTMuMy04LjMgMjUuMy0yMC44IDMwbC0zNC43IDEzYy00Ni4yIDE3LjMtOTcuNiAxNC42LTE0MS43LTcuNC0zNy45LTE5LTgxLjQtMjMuNy0xMjIuNS0xMy40TDY0IDQwMCA2NCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0OTcuNyAwIDQ4MEwwIDMyQzAgMTQuMyAxNC4zIDAgMzIgMHptODAgOTZhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHptMzIgMGExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bS0zMiA0OGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem0zMiAwYTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnoiXQogICAgfTsKICAgIGZhSGFuZE1pZGRsZUZpbmdlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLW1pZGRsZS1maW5nZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjg0MDVdLCAiZjgwNiIsICJNMjMyIDBjLTIyLjEgMC00MCAxNy45LTQwIDQwbDAgMTY0LjJjLTguNS03LjYtMTkuNy0xMi4yLTMyLTEyLjItMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTU1LjdjLTIgMS40LTMuOSAzLTUuOCA0LjVMNTUgMjg0LjhDNDAuNCAyOTcgMzIgMzE1IDMyIDMzNEwzMiAzNzJjMCAzOCAxNi45IDc0IDQ2LjEgOTguM2w1LjQgNC41YzI4LjggMjQgNjUgMzcuMSAxMDIuNCAzNy4xTDMwNCA1MTJjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhsMC05NmMwLTI2LjUtMjEuNS00OC00OC00OC0xMi40IDAtMjMuNiA0LjctMzIuMSAxMi4zLTEuOS0yNC44LTIyLjYtNDQuMy00Ny45LTQ0LjMtMTIuMyAwLTIzLjUgNC42LTMyIDEyLjJMMjcyIDQwYzAtMjIuMS0xNy45LTQwLTQwLTQweiJdCiAgICB9OwogICAgZmFNb3J0YXJQZXN0bGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9ydGFyLXBlc3RsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWE3IiwgIk01MDQuMyAxMS4xQzQ5My4zLTEuNiA0NzQuNS0zLjcgNDYxIDYuMkwyNTIuMyAxNjAgMzk3LjMgMTYwIDUwMi42IDU0LjZjMTEuOC0xMS44IDEyLjYtMzAuOCAxLjYtNDMuNXpNMzIgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyYzAgODIuNSA0My40IDE0Ny43IDEyMy45IDE3Ni4yLTExLjEgMTMuOS0xOS40IDMwLjMtMjMuOSA0OC4xLTQuNCAxNy4xIDEwLjQgMzEuNyAyOC4xIDMxLjdsMTkyIDBjMTcuNyAwIDMyLjQtMTQuNiAyOC4xLTMxLjctNC41LTE3LjgtMTIuOC0zNC4xLTIzLjktNDguMSA4MC41LTI4LjYgMTIzLjktOTMuNyAxMjMuOS0xNzYuMiAxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAxOTJ6Il0KICAgIH07CiAgICBmYUhlYWRTaWRlQ291Z2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhZC1zaWRlLWNvdWdoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwNjEiLCAiTTk2IDUxMmw2NCAwYzUzIDAgOTYtNDMgOTYtOTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZsMSAwYzI2IDAgNDctMjEgNDctNDcgMC0xMS0zLjktMjEuNi0xMC45LTMwLjFMMjczLjMgMjAwQzI3MS40IDE5Ny42IDI3MC4xIDE5NC43IDI2OS43IDE5MS43IDI1NCA4My4zIDE2MC43IDAgNDggMCA0MC40IDAgMzIuOSAuNCAyNS40IDEuMSAxMC41IDIuNiAwIDE1LjkgMCAzMC45TDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDB6bTE2LTMyMGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem02My4xIDIzNy4ybC00MS41LTMuNWMtMTIuMi0xLTIxLjYtMTEuMi0yMS42LTIzLjQgMC0xMC44IDcuMy0yMC4yIDE3LjgtMjIuOGw0MC40LTEwLjFjMTkuMi00LjggMzcuOCA5LjcgMzcuOCAyOS41IDAgMTcuOC0xNS4yIDMxLjgtMzIuOSAzMC4zek00ODAgMzEyYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptLTQwIDI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bS02NCA0OGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwem0xMjggMGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek00ODAgNTA0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptLTQwLTcyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYVBsYW5lTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGFuZS1sb2NrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NTgiLCAiTTIzMiAyNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI3LjMgODIuMSA3NS4yQzQwOS43IDI0OC4xIDQwMCAyNzQuOSA0MDAgMzA0bDAgMjQuNGMtNy4zIDYuNi0xMy42IDE0LjItMTguNyAyMi43bC0zNy4zLTEyLjQgMCA5OS43IDI0IDE5LjIgMCAzOC4zYzAgMTMuNSAyLjggMjYuNCA3LjggMzguMUwyODggNTEyIDE3OS45IDUzOWMtMTAuMSAyLjUtMTkuOS01LjEtMTkuOS0xNS41bDAtMTkuOGMwLTQuOSAyLjItOS41IDYtMTIuNWw2Ni01Mi44IDAtOTkuNy0xNjIuOSA1NC4zQzU4LjcgMzk2LjQgNDggMzg4LjcgNDggMzc3LjhsMC00My43YzAtOSAzLjgtMTcuNSAxMC40LTIzLjZMMjMyIDE1MS4zIDIzMiAyNHpNNTYwIDMwNC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNNDE2IDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXQogICAgfTsKICAgIGZhQmF0dGVyeVRocmVlUXVhcnRlcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmF0dGVyeS10aHJlZS1xdWFydGVycyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJiYXR0ZXJ5LTQiXSwgImYyNDEiLCAiTTUyOCAxMjhjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjI0YzAgOC44LTcuMiAxNi0xNiAxNmwtNDE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTIyNGMwLTguOCA3LjItMTYgMTYtMTZsNDE2IDB6TTExMiA2NGMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyMjRjMCA0NC4yIDM1LjggODAgODAgODBsNDE2IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC00OGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybDAtNDhjMC00NC4yLTM1LjgtODAtODAtODBMMTEyIDY0em01NiAxMTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDIyNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0bC0yMjQgMHoiXQogICAgfTsKICAgIGZhQmF0dGVyeTQgPSBmYUJhdHRlcnlUaHJlZVF1YXJ0ZXJzOwogICAgZmFGcmFuY1NpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZnJhbmMtc2lnbiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlMThmIiwgIk04MCAzMkM2Mi4zIDMyIDQ4IDQ2LjMgNDggNjRsMCAyNTYtMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNCAwIDAgODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTgwIDg4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTg4IDAgMC02NCAxNDQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTQ0IDAgMC05NiAxNzYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw4MCAzMnoiXQogICAgfTsKICAgIGZhRmlsdGVyQ2lyY2xlRG9sbGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbHRlci1jaXJjbGUtZG9sbGFyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImZ1bm5lbC1kb2xsYXIiXSwgImY2NjIiLCAiTTMyIDY0QzE5LjEgNjQgNy40IDcxLjggMi40IDgzLjhTLjIgMTA5LjUgOS40IDExOC42TDE5MiAzMDEuMyAxOTIgNDE2YzAgOC41IDMuNCAxNi42IDkuNCAyMi42bDY0IDY0YzIuNSAyLjUgNS4zIDQuNSA4LjMgNi0yMS4yLTMwLjktMzMuNi02OC4zLTMzLjYtMTA4LjYgMC05OS40IDc1LjUtMTgxLjEgMTcyLjMtMTkxbDkwLjQtOTAuNGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0OTIuOSA2NCA0ODAgNjRMMzIgNjR6TTU3NiA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHpNNDE2IDMyMGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgOCAxNiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC00NS44IDBjLTUuNiAwLTEwLjIgNC42LTEwLjIgMTAuMiAwIDQuOSAzLjUgOS4xIDguMyAxMGw0NSA4LjJjMjAgMy42IDM0LjYgMjEuMSAzNC42IDQxLjUgMCAyMy4zLTE4LjkgNDIuMi00Mi4yIDQyLjJsLTUuOCAwIDAgOGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw1My44IDBjNS42IDAgMTAuMi00LjYgMTAuMi0xMC4yIDAtNC45LTMuNS05LjEtOC4zLTEwbC00NS04LjJjLTIwLTMuNi0zNC42LTIxLjEtMzQuNi00MS41IDAtMjIuNiAxNy43LTQxIDQwLTQyLjFsMC04LjF6Il0KICAgIH07CiAgICBmYUZ1bm5lbERvbGxhciA9IGZhRmlsdGVyQ2lyY2xlRG9sbGFyOwogICAgZmFDaGVlc2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlZXNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ZWYiLCAiTTUxMiAyNDAuMmwwIDE1LjgtNTEyIDBjMC0yMCAxMC0zOC43IDI2LjYtNDkuOEwyNzQuOSA0MC43YzguNi01LjcgMTguNi04LjcgMjguOS04LjcgMTE1IDAgMjA4LjIgOTMuMiAyMDguMiAyMDguMnptMCA2My44bDAgMTEyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xMTIgNTEyIDB6Il0KICAgIH07CiAgICBmYUNpcmNsZUggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWgiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5NDA1LCAiaG9zcGl0YWwtc3ltYm9sIl0sICJmNDdlIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptOTYtMzQ0bDAgMTc2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNjQtOTYgMCAwIDY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTc2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA2NCA5NiAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhSG9zcGl0YWxTeW1ib2wgPSBmYUNpcmNsZUg7CiAgICBmYVNjaG9vbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2hvb2wiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5NzldLCAiZjU0OSIsICJNMCAxOTJjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjQgMCAxMjcuOS0xMTUuMWMxOC4zLTE2LjQgNDYtMTYuNCA2NC4yIDBMNDQ4IDEyOCA1MTIgMTI4YzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxOTJ6TTIyNCAzNzZsMCA4OCAxMjggMCAwLTg4YzAtMjIuMS0xNy45LTQwLTQwLTQwbC00OCAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MHptLTExMiA4YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6bTE2LTE0NGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2ek00OTYgMzg0YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6bTE2LTE0NGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2ek0yODggMjU2YTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4eiJdCiAgICB9OwogICAgZmFEaWNlRml2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWNlLWZpdmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODYwXSwgImY1MjMiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTY0IDk2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNOTYgMzUyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTIyNCAyMjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NC02NGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0zMiAxNjBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFUb3JuYWRvID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvcm5hZG8iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc3ODZdLCAiZjc2ZiIsICJNMCAzMkwwIDQ1LjZDMCA2Mi43IDEuNyA3OS42IDUgOTZsMzUyLjggMGMzLjItNi45IDcuNS0xMy4zIDEzLTE4LjhsMzguNi0zOC42YzQuMi00LjIgNi42LTEwIDYuNi0xNiAwLTEyLjUtMTAuMS0yMi42LTIyLjYtMjIuNkwzMiAwQzE0LjMgMCAwIDE0LjMgMCAzMnpNMzU1LjcgMTQ0bC0zMzYgMGMxMi40IDI5LjcgMzAuMiA1Ni44IDUyLjcgODBsMzM5LjYgMC00Ny4yLTYyLjljLTMuOS01LjItNy0xMS05LjItMTcuMXpNMjQyLjYgMzM0LjdjOC4yIDQuOCAxNS44IDEwLjcgMjIuNSAxNy4zTDQ0NSAzNTJjMi05LjggMy0xOS45IDMtMzAuMSAwLTE3LjEtMi45LTM0LTguNi00OS45TDEzNiAyNzIgMjQyLjYgMzM0Ljd6TTI5NC4zIDQwMGM1LjMgMTcgNi41IDM1LjIgMy42IDUzbC01LjkgMzUuN2MtMiAxMi4yIDcuNCAyMy40IDE5LjggMjMuNCA1LjMgMCAxMC40LTIuMSAxNC4yLTUuOWw3OC4yLTc4LjJjOC41LTguNSAxNS44LTE3LjggMjEuOS0yNy45bC0xMzEuOCAweiJdCiAgICB9OwogICAgZmFKZXRGaWdodGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImpldC1maWdodGVyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImZpZ2h0ZXItamV0Il0sICJmMGZiIiwgIk00OTYuMiAyMDYuOGMtMTAuNy00LjUtMjIuMi02LjgtMzMuOC02LjhMMzYyIDIwMCAyNDggNDggMjk2IDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0UzMwOS4zIDAgMjk2IDBMMTUyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOCAwIDAgMTUyLTU0LjQgMC01Mi44LTY2Yy0zLTMuOC03LjYtNi0xMi41LTZMMTYgMTI4Yy04LjggMC0xNiA3LjItMTYgMTZsMCA4OCA0MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00MCAwIDAgODhjMCA4LjggNy4yIDE2IDE2IDE2bDI0LjMgMGM0LjkgMCA5LjUtMi4yIDEyLjUtNmw1Mi44LTY2IDU0LjQgMCAwIDE1Mi04IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMTE0LTE1MiAxMDAuNCAwYzExLjYgMCAyMy4xLTIuMyAzMy44LTYuOGw2NS0yNy4xYzguOS0zLjcgMTQuOC0xMi41IDE0LjgtMjIuMnMtNS44LTE4LjQtMTQuOC0yMi4ybC02NS0yNy4xeiJdCiAgICB9OwogICAgZmFGaWdodGVySmV0ID0gZmFKZXRGaWdodGVyOwogICAgZmFUaHVtYnNEb3duMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aHVtYnMtZG93biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODA3OCwgNjE1NzZdLCAiZjE2NSIsICJNMzg0IDMyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgNi4zLTEuMyAxMi4yLTMuNCAxNy43IDIwLjQgNS41IDM1LjQgMjQuMSAzNS40IDQ2LjMgMCA5LjEtMi42IDE3LjYtNyAyNC45IDIyLjIgNC4yIDM5IDIzLjcgMzkgNDcuMSAwIDE5LjctMTEuOSAzNi42LTI4LjkgNDQgMTcgNy40IDI4LjkgMjQuMyAyOC45IDQ0IDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNjAgMCAyOC4yIDcwLjRjMi41IDYuMyAzLjggMTMuMSAzLjggMTkuOWwwIDQuMmMwIDI3LjMtMjIuMSA0OS40LTQ5LjQgNDkuNC0xOC43IDAtMzUuOC0xMC42LTQ0LjItMjcuM0wxNzAuMSAzNTYuM2MtNi43LTEzLjMtMTAuMS0yOC0xMC4xLTQyLjlsMC0xODYuNmMwLTE5LjQgOC45LTM3LjggMjQtNTBsMTIuMi05LjdDMjI0LjYgNDQuNCAyNTkuOCAzMiAyOTYuMSAzMkwzODQgMzJ6TTgwIDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC00OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw0OCAweiJdCiAgICB9OwogICAgZmFCcm9vbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicm9vbSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyOTUyOV0sICJmNTFhIiwgIk01NjYuNiA1NC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xOTIgMTkyLTM0LjctMzQuN2MtNC4yLTQuMi0xMC02LjYtMTYtNi42LTEyLjUgMC0yMi42IDEwLjEtMjIuNiAyMi42bDAgMjkuMSAxMDguMyAxMDguMyAyOS4xIDBjMTIuNSAwIDIyLjYtMTAuMSAyMi42LTIyLjYgMC02LTIuNC0xMS44LTYuNi0xNmwtMzQuNy0zNC43IDE5Mi0xOTJ6TTM0MS4xIDM1My40TDIyMi42IDIzNC45Yy00Mi43LTMuNy04NS4yIDExLjctMTE1LjggNDIuM2wtOCA4Yy0yMi4zIDIyLjMtMzQuOCA1Mi41LTM0LjggODQgMCA2LjggNy4xIDExLjIgMTMuMiA4LjJsNTEuMS0yNS41YzUtMi41IDkuNSA0LjEgNS40IDcuOUw3LjMgNDczLjRDMi43IDQ3Ny42IDAgNDgzLjYgMCA0ODkuOSAwIDUwMi4xIDkuOSA1MTIgMjIuMSA1MTJsMTczLjMgMGMzOC44IDAgNzUuOS0xNS40IDEwMy40LTQyLjggMzAuNi0zMC42IDQ1LjktNzMuMSA0Mi4zLTExNS44eiJdCiAgICB9OwogICAgZmFGaWxlSW1wb3J0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtaW1wb3J0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImFycm93LXJpZ2h0LXRvLWZpbGUiXSwgImY1NmYiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0bDAgMjQwIDE4Mi4xIDAtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw3MiA3MmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNzIgNzJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzEtMzEtMTgyLjEgMCAwIDk2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjc3LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjU4LjcgMTguN0MyNDYuNyA2LjcgMjMwLjUgMCAyMTMuNSAwTDY0IDB6TTMyNS41IDE3NkwyMzIgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyMDggNTguNSAzMjUuNSAxNzZ6Il0KICAgIH07CiAgICBmYUFycm93UmlnaHRUb0ZpbGUgPSBmYUZpbGVJbXBvcnQ7CiAgICBmYVV0ZW5zaWxzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInV0ZW5zaWxzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3ODYwLCA2MTY4NSwgImN1dGxlcnkiXSwgImYyZTciLCAiTTYzLjkgMTQuNEM2My4xIDYuMiA1Ni4yIDAgNDggMHMtMTUuMSA2LjItMTYgMTQuM0wxNy45IDE0OS43Yy0xLjMgNi0xLjkgMTIuMS0xLjkgMTguMiAwIDQ1LjkgMzUuMSA4My42IDgwIDg3LjdMOTYgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yMjQuNGM0NC45LTQuMSA4MC00MS44IDgwLTg3LjcgMC02LjEtLjYtMTIuMi0xLjktMTguMkwyMjMuOSAxNC4zQzIyMy4xIDYuMiAyMTYuMiAwIDIwOCAwcy0xNS4xIDYuMi0xNS45IDE0LjRMMTc4LjUgMTQ5LjljLS42IDUuNy01LjQgMTAuMS0xMS4xIDEwLjEtNS44IDAtMTAuNi00LjQtMTEuMi0xMC4yTDE0My45IDE0LjZDMTQzLjIgNi4zIDEzNi4zIDAgMTI4IDBzLTE1LjIgNi4zLTE1LjkgMTQuNkw5OS44IDE0OS44Yy0uNSA1LjgtNS40IDEwLjItMTEuMiAxMC4yLTUuOCAwLTEwLjYtNC40LTExLjEtMTAuMUw2My45IDE0LjR6TTQ0OCAwQzQzMiAwIDMyMCAzMiAzMjAgMTc2bDAgMTEyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyIDAgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTQ0OGMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhQ3V0bGVyeSA9IGZhVXRlbnNpbHM7CiAgICBmYUlkQmFkZ2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImlkLWJhZGdlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYyYzEiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6bTk2IDM1Mmw2NCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNkw5NiA0NDhjLTguOCAwLTE2LTcuMi0xNi0xNiAwLTQ0LjIgMzUuOC04MCA4MC04MHptLTI0LTk2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMTUyIDY0bDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYVNwaWRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcGlkZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzNzVdLCAiZjcxNyIsICJNMzY5LjMtMzFjMTEuOS0zLjUgMjQuNCAyLjcgMjkgMTMuOWwuOCAyLjMgNDAgMTM2YzIuNSA4LjQgLjEgMTcuNS02LjEgMjMuN2wtNjQuMSA2NC4xIDc2LjQtMjAuOCAxOS45LTU5LjggLjktMi4zYzUtMTEuMSAxNy43LTE2LjggMjkuNS0xMi45IDExLjggMy45IDE4LjUgMTYuMSAxNS44IDI4bC0uNyAyLjQtMjQgNzJjLTIuNSA3LjYtOC43IDEzLjQtMTYuNSAxNS42bC05MS4xIDI0LjggOTEuMSAyNC44YzcuNyAyLjEgMTMuOSA4IDE2LjUgMTUuNmwyNCA3MiAuNyAyLjRjMi43IDExLjktNC4xIDI0LjEtMTUuOCAyOC0xMS44IDMuOS0yNC41LTEuOC0yOS41LTEyLjlsLS45LTIuMy0xOS45LTU5LjgtNzYuNC0yMC44IDY0LjEgNjQuMWM2LjEgNi4xIDguNSAxNS4xIDYuMiAyMy40bC00MCAxNDQtLjggMi4zYy00LjQgMTEuMy0xNi44IDE3LjctMjguOCAxNC40LTEyLTMuMy0xOS4zLTE1LjItMTcuMi0yNy4ybC41LTIuNCAzNi4yLTEzMC41LTM3LjItMzcuMkMzNTEgNDA2IDMwOC40IDQ0OCAyNTYgNDQ4cy05NS00Mi05Ni05NC4xbC0zNyAzNyAzNiAxMjIuMyAuNiAyLjRjMi4yIDExLjktNC45IDIzLjktMTYuOCAyNy40LTExLjkgMy41LTI0LjQtMi43LTI5LTEzLjlsLS44LTIuMy00MC0xMzZjLTIuNS04LjQtLjEtMTcuNSA2LjEtMjMuOGw2NC4xLTY0LjEtNzYuNCAyMC44LTE5LjkgNTkuOC0uOSAyLjNjLTUgMTEuMS0xNy43IDE2LjgtMjkuNSAxMi45cy0xOC41LTE2LjEtMTUuOC0yOGwuNy0yLjQgMjQtNzJjMi41LTcuNiA4LjctMTMuNCAxNi41LTE1LjZsOTEuMS0yNC44LTkxLjEtMjQuOGMtNy43LTIuMS0xMy45LTgtMTYuNS0xNS42bC0yNC03Mi0uNy0yLjRjLTIuNy0xMS45IDQuMS0yNC4xIDE1LjgtMjhzMjQuNSAxLjggMjkuNSAxMi45bC45IDIuMyAxOS45IDU5LjggNzYuNCAyMC44LTY0LjEtNjQuMWMtNi4yLTYuMi04LjUtMTUuMy02LjEtMjMuN2w0MC0xMzYgLjgtMi4zYzQuNi0xMS4zIDE3LjEtMTcuNCAyOS0xMy45IDExLjkgMy41IDE5IDE1LjUgMTYuOCAyNy40bC0uNiAyLjQtMzYgMTIyLjMgNTMgNTNjMS00My4zIDM2LjQtNzguMSA3OS45LTc4LjFzNzguOSAzNC44IDc5LjkgNzguMmw1My4xLTUzLjEtMzYtMTIyLjMtLjYtMi40Yy0yLjItMTIgNC45LTIzLjkgMTYuOC0yNy40eiJdCiAgICB9OwogICAgZmFNb2JpbGVSZXRybyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb2JpbGUtcmV0cm8iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTUyNyIsICJNMTYgNjRDMTYgMjguNyA0NC43IDAgODAgMEwzMDQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw4MCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDE2IDY0em04MCA5NmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTEyOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptOCAxOTJhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yNCA3MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNCAxMC43IDI0IDI0IDI0IDI0LTEwLjcgMjQtMjR6bTY0LTcyYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMjQgNzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjQgMTAuNyAyNCAyNCAyNCAyNC0xMC43IDI0LTI0em02NC03MmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTI0IDcyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0IDEwLjcgMjQgMjQgMjQgMjQtMTAuNyAyNC0yNHpNMTY4IDQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6Il0KICAgIH07CiAgICBmYVNpZ25zUG9zdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaWducy1wb3N0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbIm1hcC1zaWducyJdLCAiZjI3NyIsICJNMjU2LjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi0xNjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNjAgMCAwIDY0LTE1My40IDBjLTQuMiAwLTguMyAxLjctMTEuMyA0LjdsLTQ4IDQ4Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmw0OCA0OGMzIDMgNy4xIDQuNyAxMS4zIDQuN2wxNTMuNCAwIDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTE2MCAwIDAtNjQgMTUzLjQgMGM0LjIgMCA4LjMtMS43IDExLjMtNC43bDQ4LTQ4YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC00OC00OGMtMy0zLTcuMS00LjctMTEuMy00LjdsLTE1My40IDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhTWFwU2lnbnMgPSBmYVNpZ25zUG9zdDsKICAgIGZhR3JvdXBBcnJvd3NSb3RhdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3JvdXAtYXJyb3dzLXJvdGF0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGY2IiwgIk0zNy42IDEyMi4zYy0xMS41IDE4LjctMjAuNiAzOS0yNyA2MC41LTUgMTYuOSA0LjYgMzQuOCAyMS41IDM5LjhzMzQuOC00LjYgMzkuOC0yMS41YzE4LjQtNjEuOSA2Ny4zLTExMC44IDEyOS4yLTEyOS4yIDE2LjktNSAyNi42LTIyLjkgMjEuNS0zOS44UzE5OS44IDUuNiAxODIuOSAxMC42QzE2MS40IDE3IDE0MS4xIDI2LjEgMTIyLjMgMzcuNiAxMTIuMyAxNS40IDg5LjkgMCA2NCAwIDI4LjcgMCAwIDI4LjcgMCA2NCAwIDg5LjkgMTUuNCAxMTIuMyAzNy42IDEyMi4zem00MzYuNyAwYzIyLjItMTAgMzcuNi0zMi40IDM3LjYtNTguMyAwLTM1LjMtMjguNy02NC02NC02NC0yNS45IDAtNDguMyAxNS40LTU4LjMgMzcuNi0xOC43LTExLjUtMzktMjAuNi02MC41LTI3LTE2LjktNS0zNC44IDQuNi0zOS44IDIxLjVzNC42IDM0LjggMjEuNSAzOS44YzYxLjkgMTguNCAxMTAuOCA2Ny4zIDEyOS4yIDEyOS4yIDUgMTYuOSAyMi45IDI2LjYgMzkuOCAyMS41czI2LjYtMjIuOSAyMS41LTM5LjhjLTYuNC0yMS41LTE1LjUtNDEuOC0yNy02MC41ek01MTIgNDQ4YzAtMjUuOS0xNS40LTQ4LjMtMzcuNi01OC4zIDExLjUtMTguNyAyMC42LTM5IDI3LTYwLjUgNS0xNi45LTQuNi0zNC44LTIxLjUtMzkuOHMtMzQuOCA0LjYtMzkuOCAyMS41Yy0xOC40IDYxLjktNjcuMyAxMTAuOC0xMjkuMiAxMjkuMi0xNi45IDUtMjYuNiAyMi45LTIxLjUgMzkuOHMyMi45IDI2LjYgMzkuOCAyMS41YzIxLjUtNi40IDQxLjgtMTUuNSA2MC41LTI3IDEwIDIyLjIgMzIuNCAzNy42IDU4LjMgMzcuNiAzNS4zIDAgNjQtMjguNyA2NC02NHpNMzcuNiAzODkuN2MtMjIuMiAxMC0zNy42IDMyLjQtMzcuNiA1OC4zIDAgMzUuMyAyOC43IDY0IDY0IDY0IDI1LjkgMCA0OC4zLTE1LjQgNTguMy0zNy42IDE4LjcgMTEuNSAzOSAyMC42IDYwLjUgMjcgMTYuOSA1IDM0LjgtNC42IDM5LjgtMjEuNXMtNC42LTM0LjgtMjEuNS0zOS44Yy02MS45LTE4LjQtMTEwLjgtNjcuMy0xMjkuMi0xMjkuMi01LTE2LjktMjIuOS0yNi42LTM5LjgtMjEuNVM1LjYgMzEyLjIgMTAuNiAzMjkuMWM2LjQgMjEuNSAxNS41IDQxLjggMjcgNjAuNXpNMjU2IDE5MmMxNS42IDAgMzAgNS42IDQxLjEgMTQuOWwtMTUuMyAxNS4zYy02LjYgNi42LTEuOSAxNy44IDcuNCAxNy44bDYwLjUgMGM1LjcgMCAxMC40LTQuNyAxMC40LTEwLjRsMC02MC41YzAtOS4zLTExLjItMTMuOS0xNy44LTcuNGwtMTEuMiAxMS4yYy0xOS44LTE3LjktNDYuMi0yOC45LTc1LjEtMjguOS00My42IDAtODEuMyAyNC45LTk5LjggNjEuMS02IDExLjgtMS40IDI2LjMgMTAuNCAzMi4zczI2LjMgMS40IDMyLjMtMTAuNGMxMC42LTIwLjggMzIuMi0zNC45IDU3LTM0Ljl6bTU4LjYgOTMuMWMtMTAuNiAyMC44LTMyLjIgMzQuOS01NyAzNC45LTE1LjcgMC0zMC01LjYtNDEuMS0xNC45bDE1LjMtMTUuM2M2LjYtNi42IDEuOS0xNy44LTcuNC0xNy44TDE2NCAyNzJjLTUuNyAwLTEwLjQgNC43LTEwLjQgMTAuNGwwIDYwLjVjMCA5LjMgMTEuMiAxMy45IDE3LjggNy40bDExLjItMTEuMmMxOS44IDE3LjkgNDYuMiAyOC45IDc1LjEgMjguOSA0My42IDAgODEuMy0yNC45IDk5LjgtNjEuMSA2LTExLjggMS40LTI2LjMtMTAuNC0zMi4zcy0yNi4zLTEuNC0zMi4zIDEwLjR6Il0KICAgIH07CiAgICBmYUFycm93c1NwbGl0VXBBbmRMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy1zcGxpdC11cC1hbmQtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGJjIiwgIk0zNDIuNi0yMi42Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNDEuNC00MS40IDAgMTk1LjljLTE4LjgtMTAuOS00MC43LTE3LjEtNjQtMTcuMWwtMTE0LjcgMCA0MS40LTQxLjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDEwOS4zIDMyMCAyMjQgMzIwYzM1LjMgMCA2NCAyOC43IDY0IDY0IDAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4bDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzA2LjcgNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2eiJdCiAgICB9OwogICAgZmFGaWxsRHJpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxsLWRyaXAiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjU3NiIsICJNMzA5LjcgNzEuNmwtNjQuNCA2NC40IDMzLjQgMzMuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtMzMuNC0zMy40LTk2LjQgOTYuNGMtMi45IDIuOS01LjEgNi41LTYuMyAxMC4zbDMyMS41IDAgNTMuNy01My43YzQuOS00LjkgNy42LTExLjUgNy42LTE4LjNzLTIuNy0xMy41LTcuNi0xOC4zTDM0Ni4zIDcxLjZDMzQxLjUgNjYuNyAzMzQuOSA2NCAzMjggNjRzLTEzLjUgMi43LTE4LjMgNy42ek01OC4zIDIzMi40bDk2LjQtOTYuNC00OS40LTQ5LjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMjAwIDkwLjcgMjY0LjQgMjYuM0MyODEuMyA5LjUgMzA0LjEgMCAzMjggMHM0Ni43IDkuNSA2My42IDI2LjNMNTE3LjcgMTUyLjRDNTM0LjUgMTY5LjMgNTQ0IDE5Mi4xIDU0NCAyMTZzLTkuNSA0Ni43LTI2LjMgNjMuNkwzMTEuNiA0ODUuN0MyOTQuNyA1MDIuNSAyNzEuOSA1MTIgMjQ4IDUxMnMtNDYuNy05LjUtNjMuNi0yNi4zTDU4LjMgMzU5LjZDNDEuNSAzNDIuNyAzMiAzMTkuOSAzMiAyOTZzOS41LTQ2LjcgMjYuMy02My42ek01MTIgNTQ0Yy0zNS4zIDAtNjQtMjguNy02NC02NCAwLTI1LjIgMzIuNi03OS42IDUxLjItMTA4LjcgNi05LjQgMTkuNS05LjQgMjUuNSAwIDE4LjcgMjkuMSA1MS4yIDgzLjUgNTEuMiAxMDguNyAwIDM1LjMtMjguNyA2NC02NCA2NHoiXQogICAgfTsKICAgIGZhU2hpZWxkSGVhcnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hpZWxkLWhlYXJ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NzQiLCAiTTI2OS40IDIuOUMyNjUuMiAxIDI2MC43IDAgMjU2IDBzLTkuMiAxLTEzLjQgMi45TDU0LjMgODIuOGMtMjIgOS4zLTM4LjQgMzEtMzguMyA1Ny4yIC41IDk5LjIgNDEuMyAyODAuNyAyMTMuNiAzNjMuMiAxNi43IDggMzYuMSA4IDUyLjggMCAxNzIuNC04Mi41IDIxMy4yLTI2NCAyMTMuNi0zNjMuMiAuMS0yNi4yLTE2LjMtNDcuOS0zOC4zLTU3LjJMMjY5LjQgMi45ek0yNDkuNiAxODMuNWw2LjQgOC41IDYuNC04LjVjMTEuMS0xNC44IDI4LjUtMjMuNSA0Ni45LTIzLjUgMzIuNCAwIDU4LjcgMjYuMyA1OC43IDU4LjdsMCA1LjNjMCA0OS4xLTY1LjggOTguMS05Ni41IDExOC4zLTkuNSA2LjItMjEuNSA2LjItMzAuOSAwLTMwLjctMjAuMi05Ni41LTY5LjMtOTYuNS0xMTguM2wwLTUuM2MwLTMyLjQgMjYuMy01OC43IDU4LjctNTguNyAxOC41IDAgMzUuOSA4LjcgNDYuOSAyMy41eiJdCiAgICB9OwogICAgZmFQZXJzb25Ta2lpbmdOb3JkaWMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXNraWluZy1ub3JkaWMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsic2tpaW5nLW5vcmRpYyJdLCAiZjdjYSIsICJNNDI0LjggMTZhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6bTk5LjggMTkzLjdjNy42IDE1LjIgMS45IDMzLjYtMTIuNiA0MmwwIDE4MC4zLTMyIDAgMC0xNjQuMi0xMC4xIDVjLTI3LjQgMTMuNy02MC43IDYuMS03OS40LTE4LjJsLTE5LjYtMjUuNS0zOS41IDY4LjggMjQuOCAxMi40YzI5LjUgMTQuNyA0Mi45IDQ5LjUgMzEuMSA4MC4ybC0yOC4yIDczLjQgMTQ5LjQgMGM3LjkgMCAxNS42LTIuMyAyMi4yLTYuN2w3LjktNS4zYzExLTcuNCAyNS45LTQuNCAzMy4zIDYuN3M0LjQgMjUuOS02LjcgMzMuM2wtNy45IDUuM0M1NDMgNTA2LjkgNTI2IDUxMiA1MDguNiA1MTJsLTE4OS4xIDBjLS41IDAtMSAwLTEuNSAwTDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4OCAwYzAtOC4yIDMuMS0xNi40IDkuNC0yMi42bDc0LjEtNzQuMSAxMC4yLTM1LjljMTEuMyAxOC4zIDI3LjcgMzMuOCA0OC40IDQ0LjJsNC44IDIuNC0xLjkgNi44Yy0zIDEwLjUtOC42IDIwLTE2LjMgMjcuN2wtNTEuNSA1MS41IDEwMS4zIDAgMzcuMS05Ni40LTU1LjYtMjcuOEMyMzAuNCAzMTkgMjE1LjMgMjY3IDIzOS4zIDIyNy4xbDM3LjctNjIuNy0yNy43LTcuN2MtOS0yLjUtMTguMSAzLjItMjAgMTIuM2wtNS45IDI5LjNjLTMuMSAxNS42LTE3LjEgMjYuMy0zMi41IDI1LjdsLTEzMCAyMDgtMzcuNyAwIDE0MC42LTIyNWMtMy40LTYuMy00LjYtMTMuOC0zLjEtMjEuM2w1LjktMjkuM2M5LjEtNDUuNiA1NS4xLTczLjggOTkuOS02MS40bDMyLjUgOWM0Ni43IDEzIDg4IDQwLjggMTE3LjYgNzkuM2wyNC45IDMyLjMgNDAuNC0yMC4yYzE1LjgtNy45IDM1LTEuNSA0Mi45IDE0LjN6Il0KICAgIH07CiAgICBmYVNraWluZ05vcmRpYyA9IGZhUGVyc29uU2tpaW5nTm9yZGljOwogICAgZmFTcXVhcmVDaGVjazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWNoZWNrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTc0NSwgOTk4OSwgNjE1MTAsICJjaGVjay1zcXVhcmUiXSwgImYxNGEiLCAiTTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTM0MiAxNDUuN2MtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNMMTg5LjEgMzE1LjIgMTM3IDI2My4xYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDcyIDcyYzUgNSAxMS45IDcuNSAxOC44IDdzMTMuNC00LjEgMTcuNS05LjhMMzQ3LjMgMTc5LjJjNy44LTEwLjcgNS40LTI1LjctNS4zLTMzLjV6Il0KICAgIH07CiAgICBmYUNoZWNrU3F1YXJlMiA9IGZhU3F1YXJlQ2hlY2syOwogICAgZmFCYXRoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhdGgiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg3MDUsICJiYXRodHViIl0sICJmMmNkIiwgIk05NiA3Ny4zYzAtNy4zIDUuOS0xMy4zIDEzLjMtMTMuMyAzLjUgMCA2LjkgMS40IDkuNCAzLjlsMTQuOSAxNC45Yy0zLjYgOS4xLTUuNSAxOC45LTUuNSAyOS4yIDAgMTkuOSA3LjIgMzggMTkuMiA1Mi01LjMgOS4yLTQgMjEuMSAzLjggMjkgOS40IDkuNCAyNC42IDkuNCAzMy45IDBMMjg5IDg5YzkuNC05LjQgOS40LTI0LjYgMC0zMy45LTcuOC03LjktMTkuOC05LjEtMjktMy44LTE0LTEyLTMyLjEtMTkuMi01Mi0xOS4yLTEwLjMgMC0yMC4yIDItMjkuMiA1LjVMMTYzLjkgMjIuNkMxNDkuNCA4LjEgMTI5LjcgMCAxMDkuMyAwIDY2LjYgMCAzMiAzNC42IDMyIDc3LjNMMzIgMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDAgNDhjMCAyOC40IDEyLjQgNTQgMzIgNzEuNkw2NCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2IDI1NiAwIDAgMTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTQwLjRjMTkuNi0xNy42IDMyLTQzLjEgMzItNzEuNmwwLTQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDk2IDI1NiA5NiA3Ny4zeiJdCiAgICB9OwogICAgZmFCYXRodHViID0gZmFCYXRoOwogICAgZmFDaGVzc0Jpc2hvcDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlc3MtYmlzaG9wIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbOTgyMV0sICJmNDNhIiwgIk02NCAzODRMNDguMyAzNjguM0MxNy40IDMzNy40IDAgMjk1LjQgMCAyNTEuNyAwIDIxMy4xIDEzLjUgMTc1LjggMzguMiAxNDYuMUwxMDYuNyA2NCA5NiA2NEM3OC4zIDY0IDY0IDQ5LjcgNjQgMzJTNzguMyAwIDk2IDBMMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEwLjcgMCA0Ny42IDU3LjEtODUuOSA4NS45Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsODIuMy04Mi4zYzE4LjcgMjcuMyAyOC43IDU5LjcgMjguNyA5MyAwIDQzLjctMTcuNCA4NS43LTQ4LjMgMTE2LjZMMjU2IDM4NCAzMTIuMiA0NTQuM2M1IDYuMyA3LjggMTQuMSA3LjggMjIuMiAwIDE5LjYtMTUuOSAzNS41LTM1LjUgMzUuNUwzNS41IDUxMmMtMTkuNiAwLTM1LjUtMTUuOS0zNS41LTM1LjUgMC04LjEgMi43LTE1LjkgNy44LTIyLjJMNjQgMzg0eiJdCiAgICB9OwogICAgZmFQcmVzY3JpcHRpb25Cb3R0bGVNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInByZXNjcmlwdGlvbi1ib3R0bGUtbWVkaWNhbCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJwcmVzY3JpcHRpb24tYm90dGxlLWFsdCJdLCAiZjQ4NiIsICJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBMMzUyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0TDAgMzJ6TTMyIDE0NGwzMjAgMCAwIDMwNGMwIDM1LjMtMjguNyA2NC02NCA2NEw5NiA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzA0ek0xNjAgMjQ4bDAgNDAtNDAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDQwIDAgMCA0MGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC00MCA0MCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtNDAgMCAwLTQwYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdCiAgICB9OwogICAgZmFQcmVzY3JpcHRpb25Cb3R0bGVBbHQgPSBmYVByZXNjcmlwdGlvbkJvdHRsZU1lZGljYWw7CiAgICBmYURyYXdQb2x5Z29uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRyYXctcG9seWdvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzU4MDU1LCAidmVjdG9yLXBvbHlnb24iXSwgImY1ZWUiLCAiTTY0IDBjMjMuNyAwIDQ0LjQgMTIuOSA1NS40IDMybDI3My4xIDBjMTEuMS0xOS4xIDMxLjctMzIgNTUuNC0zMiAzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDM0LTI2LjUgNjEuOC02MCA2My45bC0yLjEgMi45LTcxLjUgOTkuMWMzLjYgOCA1LjYgMTYuOSA1LjYgMjYuMnMtMiAxOC4yLTUuNiAyNi4ybDIuMiAzLjEgNjkuMyA5NiAyLjEgMi45YzMzLjUgMi4xIDYwIDI5LjkgNjAgNjMuOSAwIDM1LjMtMjguNyA2NC02NCA2NC0yMy43IDAtNDQuNC0xMi45LTU1LjQtMzJsLTI3My4xIDBjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzItMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yMy43IDEyLjktNDQuNCAzMi01NS40bDAtMjczLjFDMTIuOSAxMDguNCAwIDg3LjcgMCA2NCAwIDI4LjcgMjguNyAwIDY0IDB6TTM5NC4yIDQxMy40bC02NS41LTkwLjYtMi4yLTMuMWMtMi4xIC4yLTQuMyAuMy02LjUgLjMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGMyLjIgMCA0LjQgLjEgNi41IC4zbDY3LjctOTMuN2MtLjYtLjktMS4xLTEuNy0xLjYtMi42TDExOS40IDk2Yy01LjYgOS43LTEzLjcgMTcuOC0yMy40IDIzLjRsMCAyNzMuMWM5LjcgNS42IDE3LjggMTMuNyAyMy40IDIzLjRsMjczLjEgMGMuNS0uOSAxLjEtMS44IDEuNi0yLjZ6Il0KICAgIH07CiAgICBmYVZlY3RvclBvbHlnb24gPSBmYURyYXdQb2x5Z29uOwogICAgZmFJQ3Vyc29yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImktY3Vyc29yIiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbXSwgImYyNDYiLCAiTS4xIDI5LjNDLTEuNCA0NyAxMS43IDYyLjQgMjkuMyA2My45bDggLjdDNzAuNSA2Ny4zIDk2IDk1IDk2IDEyOC4zbDAgOTUuNy0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCA5NS43YzAgMzMuMy0yNS41IDYxLTU4LjcgNjMuOGwtOCAuN0MxMS43IDQ0OS42LTEuNCA0NjUgLjEgNDgyLjdTMTcgNTEzLjQgMzQuNyA1MTEuOWw4LS43YzM0LjEtMi44IDY0LjItMTguOSA4NS40LTQyLjkgMjEuMiAyNCA1MS4yIDQwIDg1LjQgNDIuOWw4IC43YzE3LjYgMS41IDMzLjEtMTEuNiAzNC41LTI5LjJzLTExLjYtMzMuMS0yOS4yLTM0LjVsLTgtLjdDMTg1LjUgNDQ0LjcgMTYwIDQxNyAxNjAgMzgzLjdsMC05NS43IDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC05NS43YzAtMzMuMyAyNS41LTYxIDU4LjctNjMuOGw4LS43YzE3LjYtMS41IDMwLjctMTYuOSAyOS4yLTM0LjVTMjM5LTEuNCAyMjEuMyAuMWwtOCAuN2MtMzQuMSAyLjgtNjQuMiAxOC45LTg1LjQgNDIuOS0yMS4yLTI0LTUxLjItNDAtODUuNC00Mi45bC04LS43QzE3LTEuNCAxLjYgMTEuNyAuMSAyOS4zeiJdCiAgICB9OwogICAgZmFIZWFydENpcmNsZVBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhcnQtY2lyY2xlLXBsdXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUwMCIsICJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDE3LjYtMy40IDM1LjYtOS41IDUzLjctMjEuOC04LjYtNDUuNi0xMy40LTcwLjUtMTMuNC0xMDYgMC0xOTIgODYtMTkyIDE5MiAwIDI4LjUgNi4yIDU1LjYgMTcuNCA4MC0uNSAwLS45IDAtMS40IDAtMTUuNSAwLTMwLjgtNC42LTQzLjEtMTQuMS03My01NS43LTIxMi45LTE4Ni0yMTIuOS0yOTguMmwwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXpNNDMyIDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTE2IDgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNDgtNDggMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw0OCAwIDAgNDhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTQ4IDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTQ4IDAgMC00OHoiXQogICAgfTsKICAgIGZhU2hpZWxkRG9nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoaWVsZC1kb2ciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU3MyIsICJNMjY5LjQgMi45QzI2NS4yIDEgMjYwLjcgMCAyNTYgMHMtOS4yIDEtMTMuNCAyLjlMNTQuMyA4Mi44Yy0yMiA5LjMtMzguNCAzMS0zOC4zIDU3LjIgLjUgOTkuMiA0MS4zIDI4MC43IDIxMy42IDM2My4yIDE2LjcgOCAzNi4xIDggNTIuOCAwIDE3Mi40LTgyLjUgMjEzLjItMjY0IDIxMy42LTM2My4yIC4xLTI2LjItMTYuMy00Ny45LTM4LjMtNTcuMkwyNjkuNCAyLjl6TTE2MC45IDI4Ni4yYzQuOCAxLjIgOS45IDEuOCAxNS4xIDEuOCAzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY0IDQ0LjIgMGMxMi4xIDAgMjMuMiA2LjggMjguNiAxNy43bDcuMiAxNC4zIDY0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA0NC4yLTM1LjggODAtODAgODBsLTQ4IDAgMCA1MC43YzAgNy4zLTUuOSAxMy4zLTEzLjMgMTMuMy0xLjggMC0zLjYtLjQtNS4yLTEuMWwtOTguNy00Mi4zYy02LjYtMi44LTEwLjgtOS4zLTEwLjgtMTYuNCAwLTIuOCAuNi01LjUgMS45LThsMTUtMzB6TTE2MCAxNjBsNDggMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDhjMC04LjggNy4yLTE2IDE2LTE2em0xMjggNDhhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHoiXQogICAgfTsKICAgIGZhR3JlYXRlclRoYW5FcXVhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJncmVhdGVyLXRoYW4tZXF1YWwiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjUzMiIsICJNMjEuOSA5NC40QzUuMSA4OC44LTMuOSA3MC42IDEuNyA1My45UzI1LjQgMjguMSA0Mi4xIDMzLjZsMzg0IDEyOEM0MzkuMiAxNjYgNDQ4IDE3OC4yIDQ0OCAxOTJzLTguOCAyNi0yMS45IDMwLjRsLTM4NCAxMjhjLTE2LjggNS42LTM0LjktMy41LTQwLjUtMjAuMnMzLjUtMzQuOSAyMC4yLTQwLjVMMzE0LjggMTkyIDIxLjkgOTQuNHpNNDE2IDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDB6Il0KICAgIH07CiAgICBmYUVudmVsb3BlT3BlbjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZW52ZWxvcGUtb3BlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTM1XSwgImYyYjYiLCAiTTY0LjQgMTc1LjhMMjU2IDMzLjkgNDQ3LjYgMTc1LjggMjg5LjUgMjkzYy05LjcgNy4yLTIxLjQgMTEtMzMuNSAxMXMtMjMuOC0zLjktMzMuNS0xMUw2NC40IDE3NS44ek0yNTYtMzJjLTEyLjEgMC0yMy44IDMuOS0zMy41IDExTDI1LjkgMTI0LjdDOS42IDEzNi44IDAgMTU1LjggMCAxNzYuMUwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTIzOS45YzAtMjAuMy05LjYtMzkuNC0yNS45LTUxLjRMMjg5LjUtMjFjLTkuNy03LjItMjEuNC0xMS0zMy41LTExeiJdCiAgICB9OwogICAgZmFNb3VuZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb3VuZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTJkIiwgIk0xMTIuNCAxNzkuMkMxNDIgMTI3LjcgMTk2LjggOTYgMjU2LjIgOTZzMTE0LjIgMzEuNyAxNDMuOSA4My4yTDUwOC43IDM2OGMxMi4zIDIxLjMtMy4xIDQ4LTI3LjcgNDhMMzEuNSA0MTZjLTI0LjYgMC00MC0yNi42LTI3LjctNDhMMTEyLjQgMTc5LjJ6Il0KICAgIH07CiAgICBmYVZvaWNlbWFpbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2b2ljZW1haWwiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjg5NyIsICJNMTQ0IDE2MGE4MCA4MCAwIDEgMSAwIDE2MCA4MCA4MCAwIDEgMSAwLTE2MHpNMjYzLjggMzIwYzE1LjMtMjIuOSAyNC4yLTUwLjQgMjQuMi04MCAwLTc5LjUtNjQuNS0xNDQtMTQ0LTE0NFMwIDE2MC41IDAgMjQwIDY0LjUgMzg0IDE0NCAzODRsMzUyIDBjNzkuNSAwIDE0NC02NC41IDE0NC0xNDRTNTc1LjUgOTYgNDk2IDk2IDM1MiAxNjAuNSAzNTIgMjQwYzAgMjkuNiA4LjkgNTcuMSAyNC4yIDgwbC0xMTIuNSAwek00OTYgMTYwYTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYweiJdCiAgICB9OwogICAgZmFWZXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZlc3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA4NSIsICJNMjAwIDQ2NGwwLTE3MC4xYzAtMy45LS41LTcuOC0xLjQtMTEuNkwxNDQuNCA2NS40QzE2Mi4xIDc3LjIgMTg4LjIgODggMjI0IDg4czYxLjktMTAuOCA3OS42LTIyLjZMMjQ5LjQgMjgyLjNjLTEgMy44LTEuNCA3LjctMS40IDExLjZMMjQ4IDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMDQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE5My41YzAtOS41LTIuOC0xOC43LTguMS0yNi42bC00Ny45LTcxLjhjLTUuMy03LjktOC4xLTE3LjEtOC4xLTI2LjZMMzg0IDQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zLjUgMGMtLjMgMC0uNiAwLTEgMC0uNiAwLTEuMiAwLTEuOCAwLTE4LjggMC0zNC4xIDkuNy00NC4xIDE4LjgtOS4zIDguNC0yOC41IDIxLjItNjEuNyAyMS4ycy01Mi40LTEyLjgtNjEuNy0yMS4yYy0xMC05LjEtMjUuMy0xOC44LTQ0LjEtMTguOC0uNiAwLTEuMiAwLTEuOCAwLS4zIDAtLjYgMC0xIDBMMTEyIDBDODUuNSAwIDY0IDIxLjUgNjQgNDhsMCA5Ny41YzAgOS41LTIuOCAxOC43LTguMSAyNi42TDguMSAyNDMuOUMyLjggMjUxLjggMCAyNjEuMSAwIDI3MC41TDAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEwNCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4eiJdCiAgICB9OwogICAgZmFBdWRpb0Rlc2NyaXB0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImF1ZGlvLWRlc2NyaXB0aW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyOWUiLCAiTTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6bTk2IDk2bDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNCA0OCAwIDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEwNGMwLTM1LjMtMjguNy02NC02NC02NGwtMTYgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjR6bTQ4IDMybDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzItNDggMHptMTUyLTk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE0NGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzM5LjggMCA3Mi0zMi4yIDcyLTcybDAtNDhjMC0zOS44LTMyLjItNzItNzItNzJsLTQ4IDB6bTQ4IDE0NGwtMjQgMCAwLTk2IDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHoiXQogICAgfTsKICAgIGZhVyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTE5XSwgIjU3IiwgIk0yMC44IDM0YzE2LjUtNi4yIDM1IDIuMiA0MS4yIDE4LjdMMTcyLjIgMzQ2LjcgMjU3LjMgNTVjNC0xMy43IDE2LjUtMjMgMzAuNy0yM3MyNi43IDkuNCAzMC43IDIzTDQwMy44IDM0Ni43IDUxNCA1Mi44YzYuMi0xNi41IDI0LjYtMjQuOSA0MS4yLTE4LjdTNTgwLjIgNTguNyA1NzQgNzUuMmwtMTQ0IDM4NGMtNC44IDEyLjktMTcuNCAyMS4zLTMxLjIgMjAuN3MtMjUuNy05LjgtMjkuNS0yM0wyODggMTc4LjMgMjA2LjcgNDU3Yy0zLjkgMTMuMi0xNS44IDIyLjUtMjkuNSAyM3MtMjYuMy03LjgtMzEuMi0yMC43TDIgNzUuMkMtNC4yIDU4LjcgNC4yIDQwLjIgMjAuOCAzNHoiXQogICAgfTsKICAgIGZhRXllRHJvcHBlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJleWUtZHJvcHBlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJleWUtZHJvcHBlci1lbXB0eSIsICJleWVkcm9wcGVyIl0sICJmMWZiIiwgIk0zNDEuNiAyOS4ybC0xMDEuNiAxMDEuNi05LjQtOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTkuNC05LjQgMTAxLjYtMTAxLjZjMzktMzkgMzktMTAyLjIgMC0xNDEuMXMtMTAyLjItMzktMTQxLjEgMHpNNTUuNCAzMjMuM2MtMTUgMTUtMjMuNCAzNS40LTIzLjQgNTYuNmwwIDQyLjQtMjYuNiAzOS45Yy04LjUgMTIuNy02LjggMjkuNiA0IDQwLjRzMjcuNyAxMi41IDQwLjQgNGwzOS45LTI2LjYgNDIuNCAwYzIxLjIgMCA0MS42LTguNCA1Ni42LTIzLjRsMTA5LjQtMTA5LjQtNDUuMy00NS4zLTEwOS40IDEwOS40Yy0zIDMtNy4xIDQuNy0xMS4zIDQuN2wtMzYuMSAwIDAtMzYuMWMwLTQuMiAxLjctOC4zIDQuNy0xMS4zbDEwOS40LTEwOS40LTQ1LjMtNDUuMy0xMDkuNCAxMDkuNHoiXQogICAgfTsKICAgIGZhRXllRHJvcHBlckVtcHR5ID0gZmFFeWVEcm9wcGVyOwogICAgZmFFeWVkcm9wcGVyID0gZmFFeWVEcm9wcGVyOwogICAgZmFDaXJjbGVYbWFyazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE1MzIsICJ0aW1lcy1jaXJjbGUiLCAieG1hcmstY2lyY2xlIl0sICJmMDU3IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTY3IDE2N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw1NSA1NSA1NS01NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTU1IDU1IDU1IDU1YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTU1LTU1LTU1IDU1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU1LTU1LTU1LTU1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXoiXQogICAgfTsKICAgIGZhVGltZXNDaXJjbGUyID0gZmFDaXJjbGVYbWFyazI7CiAgICBmYVhtYXJrQ2lyY2xlMiA9IGZhQ2lyY2xlWG1hcmsyOwogICAgZmFUcmFpbGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyYWlsZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTA0MSIsICJNMzIgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTYgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjk2LjQgMGMuMiAyLjYgLjQgNS4zIC40IDggMCA0OC42LTM5LjQgODgtODggODhzLTg4LTM5LjQtODgtODhjMC0yLjcgLjEtNS40IC40LThMOTYgNDE2Yy0zNS4zIDAtNjQtMjguNy02NC02NEwzMiA5NnptNDA4IDE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE2MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYwYzAtMTMuMy0xMC43LTI0LTI0LTI0ek0xMTIgMTM2bDAgMTYwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6bTE3Ni0yNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNjBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMjY0IDQyNGE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAweiJdCiAgICB9OwogICAgZmFUdXJraXNoTGlyYVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHVya2lzaC1saXJhLXNpZ24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidHJ5IiwgInR1cmtpc2gtbGlyYSJdLCAiZTJiYiIsICJNMTYwIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDMuNiAxMjEuNC0zNC43YzEyLjctMy42IDI2IDMuNyAyOS43IDE2LjVzLTMuNyAyNi0xNi41IDI5LjdsLTEzNC42IDM4LjUgMCA0Ni4xIDEyMS40LTM0LjdjMTIuNy0zLjYgMjYgMy43IDI5LjcgMTYuNXMtMy43IDI2LTE2LjUgMjkuN2wtMTM0LjYgMzguNSAwIDE2Mi41IDcyIDBjNTMgMCA5Ni00MyA5Ni05NiAwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyYzAgODguNC03MS42IDE2MC0xNjAgMTYwbC0xMDQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNzYuMi0yNS40IDcuM2MtMTIuNyAzLjYtMjYtMy43LTI5LjctMTYuNXMzLjctMjYgMTYuNS0yOS43bDM4LjYtMTEgMC00Ni4xLTI1LjQgNy4zYy0xMi43IDMuNi0yNi0zLjctMjkuNy0xNi41czMuNy0yNiAxNi41LTI5LjdsMzguNi0xMSAwLTYxLjljMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVRyeSA9IGZhVHVya2lzaExpcmFTaWduOwogICAgZmFUdXJraXNoTGlyYSA9IGZhVHVya2lzaExpcmFTaWduOwogICAgZmFWb2xjYW5vID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZvbGNhbm8iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3NTVdLCAiZjc3MCIsICJNMTYwIDE0NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGMxNS43IDAgMzAgNS42IDQxLjIgMTUgMTEuMi0xOC42IDMxLjYtMzEgNTQuOC0zMXM0My42IDEyLjQgNTQuOCAzMWMxMS4xLTkuNCAyNS41LTE1IDQxLjItMTUgMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRjLTE0LjcgMC0yOC4zLTUtMzkuMS0xMy4zbC0zMiA0OEMyNzUuMyAxODcgMjY2IDE5MiAyNTYgMTkycy0xOS4zLTUtMjQuOS0xMy4zbC0zMi00OEMxODguMyAxMzkgMTc0LjcgMTQ0IDE2MCAxNDR6TTE0NCAzNTJsNDguNC0yNC4yYzEwLjItNS4xIDIxLjYtNy44IDMzLTcuOCAxOS42IDAgMzguNCA3LjggNTIuMiAyMS42bDMyLjUgMzIuNWM2LjMgNi4zIDE0LjkgOS45IDIzLjggOS45IDExLjMgMCAyMS44LTUuNiAyOC0xNWw5LjctMTQuNi01OS02Ni4zYy05LjEtMTAuMi0yMi4yLTE2LjEtMzUuOS0xNi4xbC00MS44IDBjLTEzLjcgMC0yNi44IDUuOS0zNS45IDE2LjFsLTU5LjkgNjcuNCA0LjctMy41em0xOS40LTk1LjhjMTguMi0yMC41IDQ0LjMtMzIuMiA3MS44LTMyLjJsNDEuOCAwYzI3LjQgMCA1My41IDExLjcgNzEuOCAzMi4ybDE1MC4yIDE2OWM4LjUgOS41IDEzLjIgMjEuOSAxMy4yIDM0LjcgMCAyOC44LTIzLjQgNTIuMi01Mi4yIDUyLjJMNTIuMiA1MTJDMjMuNCA1MTIgMCA0ODguNiAwIDQ1OS44IDAgNDQ3LjEgNC43IDQzNC43IDEzLjIgNDI1LjJsMTUwLjItMTY5eiJdCiAgICB9OwogICAgZmFXYW5kU3BhcmtsZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2FuZC1zcGFya2xlcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzJiIiwgIk00NjQgNi4xYzkuNS04LjUgMjQtOC4xIDMzIC45bDggOGM5IDkgOS40IDIzLjUgLjkgMzNsLTg1LjggOTUuOWMtMi42IDIuOS00LjEgNi43LTQuMSAxMC43bDAgMjEuNGMwIDguOC03LjIgMTYtMTYgMTZsLTE1LjggMGMtNC42IDAtOC45IDEuOS0xMS45IDUuM0wxMDAuNyA1MDAuOWMtNi4zIDcuMS0xNS4zIDExLjEtMjQuOCAxMS4xLTguOCAwLTE3LjMtMy41LTIzLjUtOS44TDkuNyA0NTkuN2MtNi4yLTYuMi05LjctMTQuNy05LjctMjMuNSAwLTkuNSA0LTE4LjUgMTEuMS0yNC44bDExMS42LTk5LjhjMy40LTMgNS4zLTcuNCA1LjMtMTEuOWwwLTI3LjZjMC04LjggNy4yLTE2IDE2LTE2bDM0LjYgMGMzLjkgMCA3LjctMS41IDEwLjctNC4xTDQ2NCA2LjF6TTQzMiAyODhjMy42IDAgNi43IDIuNCA3LjcgNS44bDE0LjggNTEuNyA1MS43IDE0LjhjMy40IDEgNS44IDQuMSA1LjggNy43cy0yLjQgNi43LTUuOCA3LjdsLTUxLjcgMTQuOC0xNC44IDUxLjdjLTEgMy40LTQuMSA1LjgtNy43IDUuOHMtNi43LTIuNC03LjctNS44bC0xNC44LTUxLjctNTEuNy0xNC44Yy0zLjQtMS01LjgtNC4xLTUuOC03LjdzMi40LTYuNyA1LjgtNy43bDUxLjctMTQuOCAxNC44LTUxLjdjMS0zLjQgNC4xLTUuOCA3LjctNS44ek04Ny43IDY5LjhsMTQuOCA1MS43IDUxLjcgMTQuOGMzLjQgMSA1LjggNC4xIDUuOCA3LjdzLTIuNCA2LjctNS44IDcuN2wtNTEuNyAxNC44LTE0LjggNTEuN2MtMSAzLjQtNC4xIDUuOC03LjcgNS44cy02LjctMi40LTcuNy01LjhMNTcuNSAxNjYuNSA1LjggMTUxLjdjLTMuNC0xLTUuOC00LjEtNS44LTcuN3MyLjQtNi43IDUuOC03LjdsNTEuNy0xNC44IDE0LjgtNTEuN2MxLTMuNCA0LjEtNS44IDcuNy01LjhzNi43IDIuNCA3LjcgNS44ek0yMDggMGMzLjcgMCA2LjkgMi41IDcuOCA2LjFsNi44IDI3LjMgMjcuMyA2LjhjMy42IC45IDYuMSA0LjEgNi4xIDcuOHMtMi41IDYuOS02LjEgNy44bC0yNy4zIDYuOC02LjggMjcuM2MtLjkgMy42LTQuMSA2LjEtNy44IDYuMXMtNi45LTIuNS03LjgtNi4xbC02LjgtMjcuMy0yNy4zLTYuOGMtMy42LS45LTYuMS00LjEtNi4xLTcuOHMyLjUtNi45IDYuMS03LjhsMjcuMy02LjggNi44LTI3LjNjLjktMy42IDQuMS02LjEgNy44LTYuMXoiXQogICAgfTsKICAgIGZhTWljcm9waG9uZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtaWNyb3Bob25lIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxMzAiLCAiTTE5MiAwQzEzOSAwIDk2IDQzIDk2IDk2bDAgMTI4YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0xMjhjMC01My00My05Ni05Ni05NnpNNDggMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMTcwLjcgMCAxODRsMCA0MGMwIDk3LjkgNzMuMyAxNzguNyAxNjggMTkwLjVsMCA0OS41LTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMC00OS41Yzk0LjctMTEuOCAxNjgtOTIuNiAxNjgtMTkwLjVsMC00MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwYzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0UzQ4IDMwMy41IDQ4IDIyNGwwLTQweiJdCiAgICB9OwogICAgZmFDcm93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjcm93biIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODA4MV0sICJmNTIxIiwgIk0zMTMgODcuMmM5LjItNy4zIDE1LTE4LjYgMTUtMzEuMiAwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDEyLjYgNS45IDIzLjkgMTUgMzEuMkwxOTQuNiAxOTQuOGMtMTAgMTUuNy0zMS4zIDE5LjYtNDYuMiA4LjRMODguOSAxNTguN2M0LjUtNi40IDcuMS0xNC4zIDcuMS0yMi43IDAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwYzAgMjEuOCAxNy41IDM5LjYgMzkuMiA0MEw4Ny44IDM5My41YzQuNyAzMS4zIDMxLjYgNTQuNSA2My4zIDU0LjVsMjczLjggMGMzMS43IDAgNTguNi0yMy4yIDYzLjMtNTQuNUw1MjAuOCAxNzZjMjEuNy0uNCAzOS4yLTE4LjIgMzkuMi00MCAwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDguNCAyLjYgMTYuMyA3LjEgMjIuN2wtNTkuNCA0NC42Yy0xNC45IDExLjItMzYuMiA3LjMtNDYuMi04LjRMMzEzIDg3LjJ6Il0KICAgIH07CiAgICBmYVRlbnRBcnJvd1R1cm5MZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbnQtYXJyb3ctdHVybi1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1ODAiLCAiTS0uNSAxMTNsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0zMS0zMSAzNTAuMSAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI0YzAtNDguNi0zOS40LTg4LTg4LTg4bC0zNTAuMSAwIDMxLTMxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45UzgwLjktMi4zIDcxLjUgN0wtLjUgNzljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45ek02MC4zIDI5Mi42TDM3LjEgNDc2Yy0yLjQgMTkuMSAxMi41IDM2IDMxLjcgMzZsMTU0LjUgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTExNy40YzAtNS45IDQuNy0xMC42IDEwLjYtMTAuNiA0IDAgNy43IDIuMyA5LjUgNS45bDY4LjIgMTM2LjVjNS40IDEwLjggMTYuNSAxNy43IDI4LjYgMTcuN2w3MS45IDBjMTkuMyAwIDM0LjItMTYuOSAzMS43LTM2TDQ1Mi43IDI5Mi43Yy0xLjItOS43LTYuOS0xOC40LTE1LjMtMjMuNEwyNzEuOSAxNjkuOWMtMTAuMi02LjEtMjIuOS02LjEtMzMuMSAuMUw3NS40IDI2OS4zYy04LjMgNS4xLTEzLjkgMTMuNy0xNS4xIDIzLjN6Il0KICAgIH07CiAgICBmYVRydWNrRmFzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1mYXN0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbInNoaXBwaW5nLWZhc3QiXSwgImY0OGIiLCAiTTY0IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIgNTAuNyAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDYyMS4zIDE5MmMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDY0MCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTMuMyAwYy0xMC40IDM2LjktNDQuNCA2NC04NC43IDY0cy03NC4yLTI3LjEtODQuNy02NGwtMTAyLjYgMGMtMTAuNCAzNi45LTQ0LjQgNjQtODQuNyA2NHMtNzQuMi0yNy4xLTg0LjctNjRsLTMuMyAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTQ4LTQwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMjQgMjQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDI0IDE0NGMtMTMuMyAwLTI0LTEwLjctMjQtMjRTMTAuNyA5NiAyNCA5Nmw0MCAwek01NzYgMjg4bDAtNTAuNy00NS4zLTQ1LjMtNTAuNyAwIDAgOTYgOTYgMHpNMjU2IDQyNGE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAwem0yMzIgNDBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdCiAgICB9OwogICAgZmFTaGlwcGluZ0Zhc3QgPSBmYVRydWNrRmFzdDsKICAgIGZhVXNlclBlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLXBlbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJ1c2VyLWVkaXQiXSwgImY0ZmYiLCAiTTI1Ni4xIDI0OGExMjAgMTIwIDAgMSAwIDAtMjQwIDEyMCAxMjAgMCAxIDAgMCAyNDB6bS0yOS43IDU2Yy05OC41IDAtMTc4LjMgNzkuOC0xNzguMyAxNzguMyAwIDE2LjQgMTMuMyAyOS43IDI5LjcgMjkuN2wxOTYuNSAwIDEwLjktNTQuNWM0LjMtMjEuNyAxNS00MS42IDMwLjYtNTcuMmw2Ny4zLTY3LjNjLTI4LTE4LjMtNjEuNC0yOC45LTk3LjQtMjguOWwtNTkuNCAwek0zMzIuMyA0NjYuOWwtMTEuOSA1OS42Yy0uMiAuOS0uMyAxLjktLjMgMi45IDAgOCA2LjUgMTQuNiAxNC42IDE0LjYgMSAwIDEuOS0uMSAyLjktLjNsNTkuNi0xMS45YzEyLjQtMi41IDIzLjgtOC42IDMyLjctMTcuNWwxMTguOS0xMTguOS04MC04MC0xMTguOSAxMTguOWMtOC45IDguOS0xNSAyMC4zLTE3LjUgMzIuN3ptMjY3LjgtMTIzYzIyLjEtMjIuMSAyMi4xLTU3LjkgMC04MHMtNTcuOS0yMi4xLTgwIDBsLTI4LjggMjguOCA4MCA4MCAyOC44LTI4Ljh6Il0KICAgIH07CiAgICBmYVVzZXJFZGl0ID0gZmFVc2VyUGVuOwogICAgZmFVc2VyQ2xvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1jbG9jayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGZkIiwgIk0yMjQgOGExMjAgMTIwIDAgMSAxIDAgMjQwIDEyMCAxMjAgMCAxIDEgMC0yNDB6TTE5NC4zIDMwNGw1OS40IDBjMy45IDAgNy45IC4xIDExLjggLjQtMTYuMiAyOC4yLTI1LjUgNjAuOC0yNS41IDk1LjYgMCA0MS44IDEzLjQgODAuNSAzNiAxMTJMNDUuNyA1MTJDMjkuMyA1MTIgMTYgNDk4LjcgMTYgNDgyLjMgMTYgMzgzLjggOTUuOCAzMDQgMTk0LjMgMzA0ek0yODggNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE0NC04MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2bDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTMyIDAgMC00OGMwLTguOC03LjItMTYtMTYtMTZ6Il0KICAgIH07CiAgICBmYVNob3dlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaG93ZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg3MDNdLCAiZjJjYyIsICJNNjQgMTMxLjljMC0xOS44IDE2LjEtMzUuOSAzNS45LTM1LjkgOS41IDAgMTguNiAzLjggMjUuNCAxMC41bDE2LjIgMTYuMmMtMjEgMzguOS0xNy40IDg3LjUgMTAuOSAxMjNMMTUxIDI0N2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwTDM0NSAxMjFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMS4zIDEuM2MtMzUuNS0yOC4zLTg0LjEtMzEuOS0xMjMtMTAuOUwxNzAuNSA2MS4zQzE1MS44IDQyLjUgMTI2LjQgMzIgOTkuOSAzMiA0NC43IDMyIDAgNzYuNyAwIDEzMS45TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMTYuMXpNMjU2IDM1MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTY0IDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTAtMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptNjQgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMC0xMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em02NCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0zMi0zMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYVNxdWFyZUNhcmV0VXAyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1jYXJldC11cCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYXJldC1zcXVhcmUtdXAiXSwgImYxNTEiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIyNCAxNjBjNi43IDAgMTMgMi44IDE3LjYgNy43bDEwNCAxMTJjNi41IDcgOC4yIDE3LjIgNC40IDI1LjlTMzM3LjUgMzIwIDMyOCAzMjBsLTIwOCAwYy05LjUgMC0xOC4yLTUuNy0yMi0xNC40cy0yLjEtMTguOSA0LjQtMjUuOWwxMDQtMTEyYzQuNS00LjkgMTAuOS03LjcgMTcuNi03Ljd6Il0KICAgIH07CiAgICBmYUNhcmV0U3F1YXJlVXAyID0gZmFTcXVhcmVDYXJldFVwMjsKICAgIGZhTWFwTG9jYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFwLWxvY2F0aW9uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbIm1hcC1tYXJrZWQiXSwgImY1OWYiLCAiTTU3NiA0OGMwLTExLjEtNS43LTIxLjQtMTUuMi0yNy4ycy0yMS4yLTYuNC0zMS4xLTEuNEw0MTMuNSA3Ny41IDIzNC4xIDE3LjZjLTguMS0yLjctMTYuOC0yLjEtMjQuNCAxLjdsLTEyOCA2NEM3MC44IDg4LjggNjQgOTkuOSA2NCAxMTJsMCAzNTJjMCAxMS4xIDUuNyAyMS40IDE1LjIgMjcuMnMyMS4yIDYuNCAzMS4xIDEuNGwxMTYuMS01OC4xIDE3My4zIDU3LjhjLTQuMy02LjQtOC41LTEzLjEtMTIuNi0xOS45LTExLTE4LjMtMjEuOS0zOS4zLTMwLTYxLjhsLTEwMS4yLTMzLjcgMC0yODQuNSAxMjggNDIuNyAwIDk5LjNjMzEtMzUuOCA3Ny01OC40IDEyOC01OC40IDIyLjYgMCA0NC4yIDQuNCA2NCAxMi41TDU3NiA0OHpNMzkyIDM0MS45YzAgNjguOSA2NC4xIDE1MC40IDk4LjYgMTg5LjMgMTEuNiAxMyAzMS4zIDEzIDQyLjkgMCAzNC41LTM4LjkgOTguNi0xMjAuNCA5OC42LTE4OS4zIDAtNjUuMS01My43LTExNy45LTEyMC0xMTcuOVMzOTIgMjc2LjggMzkyIDM0MS45eiJdCiAgICB9OwogICAgZmFNYXBNYXJrZWQgPSBmYU1hcExvY2F0aW9uOwogICAgZmFQZW5GYW5jeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW4tZmFuY3kiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzOTUsIDEwMDAyXSwgImY1YWMiLCAiTTM3My41IDI3LjFjMTUtMTcuMiAzNi43LTI3LjEgNTkuNi0yNy4xIDQzLjYgMCA3OSAzNS40IDc5IDc5IDAgMjIuOC05LjkgNDQuNi0yNy4xIDU5LjZMMjgzLjcgMzEzLjggMjczIDMwMyAyMDkgMjM5IDE5OC4yIDIyOC4zIDM3My41IDI3LjF6TTE2MS4xIDI1OUMxNjIgMjYwIDE4OCAyODYgMjM5IDMzN2wxMy45IDEzLjktMTcuMSA3NC4yYy0zLjkgMTcuMS0xNi45IDMwLjctMzMuOCAzNS40bC0xNjkuOCA0Ny41IDkyLjMtOTIuM2MxLjIgLjEgMi4zIC4yIDMuNSAuMiAxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyYzAgMS4yIC4xIDIuNCAuMiAzLjVMMy45IDQ3OS44IDUxLjUgMzEwYzQuNy0xNi45IDE4LjMtMjkuOSAzNS40LTMzLjhMMTYxLjEgMjU5eiJdCiAgICB9OwogICAgZmFFdXJvU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJldXJvLXNpZ24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs4MzY0LCAiZXVyIiwgImV1cm8iXSwgImYxNTMiLCAiTTczLjMgMTkyQzEwMC44IDk5LjUgMTg2LjUgMzIgMjg4IDMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDBjLTY1LjYgMC0xMjIgMzkuNS0xNDYuNyA5NkwyNzIgMTkyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDMuMiAwYy0uNSA1LjMtLjggMTAuNi0uOCAxNnMuMyAxMC43IC44IDE2TDI3MiAyNzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTEzMC43IDBjMjQuNyA1Ni41IDgxLjEgOTYgMTQ2LjcgOTZsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTAxLjUgMC0xODcuMi02Ny41LTIxNC43LTE2MEw0MCAzMjBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQuNiAwYy0uNy0xMC41LS43LTIxLjUgMC0zMkw0MCAyNDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMzMuMyAweiJdCiAgICB9OwogICAgZmFFdXIgPSBmYUV1cm9TaWduOwogICAgZmFFdXJvID0gZmFFdXJvU2lnbjsKICAgIGZhSG91c2VDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUwYiIsICJNNDk2IDU0NGExNDQgMTQ0IDAgMSAxIDAtMjg4IDE0NCAxNDQgMCAxIDEgMCAyODh6TTI2OC42IDYuNWMxMi4yLTkuMyAyOS43LTguNyA0MS4yIDJsMjE3LjYgMjAyYy0xMC4yLTEuNy0yMC43LTIuNi0zMS4zLTIuNi03OC42IDAtMTQ2LjIgNDcuMi0xNzUuOSAxMTQuOC01LTEuOC0xMC41LTIuOC0xNi4xLTIuOGwtMzIgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NiA5MC45IDBjNi4xIDE3LjMgMTQuNiAzMy40IDI1LjIgNDhMMTQ0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4IDIuNC0yek01NTUuMyAzNDAuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBsLTM2LjcgMzYuNy0zNi43LTM2LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsMzYuNyAzNi43LTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDM2LjctMzYuNyAzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC0zNi43LTM2LjcgMzYuNy0zNi43YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42eiJdCiAgICB9OwogICAgZmFMaXJhU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaXJhLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4MzU2XSwgImYxOTUiLCAiTTg0LjkgMjU2bC0yOC40IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTEuNiAwQzUzLjIgMTI0LjcgMTE2LjggNDIgMjA3LjYgNDJsOC4yIDBjMzMuNiAwIDY2LjIgMTEuMyA5Mi41IDMyLjJsMTYuMSAxMi43YzEzLjkgMTEgMTYuMiAzMS4xIDUuMiA0NXMtMzEuMSAxNi4yLTQ1IDUuMmwtMTYuMS0xMi43Yy0xNS0xMS45LTMzLjYtMTguNC01Mi44LTE4LjRsLTguMiAwYy01My44IDAtOTAuMSA1Mi45LTczLjUgMTAybDE2Mi40IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NS4xIDBjMi4zIDEwLjYgMy42IDIxLjMgMy45IDMybDE0MS4yIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMTUwIDMzNmMtNC44IDE4LjYtMTIuNiAzNi41LTIzLjYgNTIuOWwtMTguMSAyNy4xIDIxMi4yIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI3MiAwYy0xMS44IDAtMjIuNi02LjUtMjguMi0xNi45cy01LTIzIDEuNi0zMi45bDUxLjItNzYuOGMzLjctNS42IDYuOS0xMS40IDkuNC0xNy40bC0yNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDM0LjggMGMtLjUtMTAuOC0yLjYtMjEuNi02LjQtMzJ6Il0KICAgIH07CiAgICBmYVllblNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAieWVuLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxNjUsICJjbnkiLCAianB5IiwgInJtYiIsICJ5ZW4iXSwgImYxNTciLCAiTTc0LjkgNDYuN2MtOS42LTE0LjktMjkuNC0xOS4yLTQ0LjItOS42UzExLjUgNjYuNCAyMS4xIDgxLjNMMTQzLjcgMjcyIDg4IDI3MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwIDAgMzItNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwIDAgNDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTQ4IDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTcyIDAgMC0zMiA3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC01NS43IDAgMTIyLjYtMTkwLjdjOS42LTE0LjkgNS4zLTM0LjctOS42LTQ0LjJzLTM0LjctNS4zLTQ0LjIgOS42TDE5MiAyMjguOCA3NC45IDQ2Ljd6Il0KICAgIH07CiAgICBmYUNueSA9IGZhWWVuU2lnbjsKICAgIGZhSnB5ID0gZmFZZW5TaWduOwogICAgZmFSbWIgPSBmYVllblNpZ247CiAgICBmYVllbiA9IGZhWWVuU2lnbjsKICAgIGZhQm94T3BlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3gtb3BlbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDllIiwgIk01NjAuMyAyMzcuMmMxMC40IDExLjggMjguMyAxNC40IDQxLjggNS41IDE0LjctOS44IDE4LjctMjkuNyA4LjktNDQuNGwtNDgtNzJjLTIuOC00LjItNi42LTcuNy0xMS4xLTEwLjJMMzUxLjQgNC43Yy0xOS4zLTEwLjctNDIuOC0xMC43LTYyLjIgMEw4OC44IDExNmMtNS40IDMtOS43IDcuNC0xMi42IDEyLjhMMjcuNyAyMTguN2MtMTIuNiAyMy40LTMuOCA1Mi41IDE5LjYgNjUuMWwzMyAxNy43IDAgNTMuM2MwIDIzIDEyLjQgNDQuMyAzMi40IDU1LjdsMTc2IDk5LjdjMTkuNiAxMS4xIDQzLjUgMTEuMSA2My4xIDBsMTc2LTk5LjdjMjAuMS0xMS40IDMyLjQtMzIuNiAzMi40LTU1LjdsMC0xMTcuNXptLTI0MC05LjhMMTcwLjIgMTQ0IDMyMC4zIDYwLjYgNDcwLjQgMTQ0IDMyMC4zIDIyNy40em0tNDEuNSA1MC4ybC0yMS4zIDQ2LjItMTY1LjgtODguOCAyNS40LTQ3LjIgMTYxLjcgODkuOHoiXQogICAgfTsKICAgIGZhVHJ1Y2tGaWVsZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1maWVsZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNThkIiwgIk0zMiA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwyMjQgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJsNDAuNCAwYzMyLjQgMCA2MS42IDE5LjYgNzQgNDkuNWw0My44IDEwNi4zIDEuNyA0LjIgMjQuNyAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLS40IDBjLjIgMi42IC40IDUuMyAuNCA4IDAgNDguNi0zOS40IDg4LTg4IDg4cy04OC0zOS40LTg4LTg4YzAtMi43IC4xLTUuNCAuNC04bC0xNDQuNyAwYy4yIDIuNiAuNCA1LjMgLjQgOCAwIDQ4LjYtMzkuNCA4OC04OCA4OHMtODgtMzkuNC04OC04OGMwLTMuNiAuMi03LjEgLjYtMTAuNS0xOS02LjQtMzIuNi0yNC40LTMyLjYtNDUuNWwwLTQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDAtMzJ6bTM1MiAzMmwwIDk2IDgyLjEgMC0zNS40LTg2LjFjLTIuNS02LTguMy05LjktMTQuOC05LjlMMzg0IDEyOHpNMTkyIDM5MmE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAwem0yODAgNDBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdCiAgICB9OwogICAgZmFMb2NhdGlvblBpbkxvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibG9jYXRpb24tcGluLWxvY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUxZiIsICJNMCAxODguNkMwIDg0LjQgODYgMCAxOTIgMCAyOTQuMSAwIDM3Ny42IDc4LjMgMzgzLjYgMTc3IDMyMC43IDE4NS4xIDI3MiAyMzguOCAyNzIgMzA0bDAgMjQuNGMtMTkuNiAxNy42LTMyIDQzLjEtMzIgNzEuNWwwIDc1LjdjLTkuOSAxMS42LTE4LjkgMjEuNy0yNi40IDI5LjgtMTEuOCAxMi44LTMxLjUgMTIuOC00My4zIDAtNTAuMi01NC41LTE3MC40LTE5Ny41LTE3MC40LTMxNi44ek0xOTIgMjU2YTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4em0yNDAgNDguMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTI4OCA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il0KICAgIH07CiAgICBmYVBlcnNvblByYXlpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXByYXlpbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjg3MjAsICJwcmF5Il0sICJmNjgzIiwgIk0zMjAgNjRhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAwek0yMDAuNyAyNjRsMjIuOSAzMS41YzYuNSA4LjkgMTYuMyAxNC43IDI3LjIgMTYuMXMyMS45LTEuNyAzMC40LTguN2w4OC03MmMxNy4xLTE0IDE5LjYtMzkuMiA1LjYtNTYuM3MtMzkuMi0xOS42LTU2LjMtNS42bC01NS4yIDQ1LjItMjYuMi0zNmMtMTUuNi0yMS41LTQwLjYtMzQuMi02Ny4yLTM0LjItMzAuOSAwLTU5LjIgMTcuMS03My42IDQ0LjRMNDcuOCAyODAuOWMtMjAuMiAzOC41LTkuNCA4NS45IDI1LjYgMTExLjhMMTI2LjYgNDMyIDQwIDQzMmMtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGwyMDggMGMxNy4zIDAgMzIuNi0xMS4xIDM4LTI3LjVzLS4zLTM0LjQtMTQuMi00NC43bC0xMTYuMS04NS44IDQ1LTkweiJdCiAgICB9OwogICAgZmFQcmF5ID0gZmFQZXJzb25QcmF5aW5nOwogICAgZmFDbGlwYm9hcmRMaXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsaXBib2FyZC1saXN0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY0NmQiLCAiTTMxMS40IDMybDguNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzUyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmw4LjYgMEM4My42IDEyLjkgMTA0LjMgMCAxMjggMEwyNTYgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJ6TTI0OCAxMTJjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMTM2IDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDExMiAwek0xMjggMjU2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTMyIDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMCAxMjhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNOTYgNDE2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhU2Fja0RvbGxhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzYWNrLWRvbGxhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE3Nl0sICJmODFkIiwgIk0zMjggMTEybC0xNDQgMC0zNy4zLTc0LjVjLTEuOC0zLjYtMi43LTcuNi0yLjctMTEuNiAwLTE0LjMgMTEuNi0yNS45IDI1LjktMjUuOUwzNDIuMSAwYzE0LjMgMCAyNS45IDExLjYgMjUuOSAyNS45IDAgNC0uOSA4LTIuNyAxMS42TDMyOCAxMTJ6TTE2OS42IDE2MGwxNzIuOCAwIDQ4LjcgNDAuNkM0NTcuNiAyNTYgNDk2IDMzOCA0OTYgNDI0LjUgNDk2IDQ3Mi44IDQ1Ni44IDUxMiA0MDguNSA1MTJsLTMwNS4xIDBDNTUuMiA1MTIgMTYgNDcyLjggMTYgNDI0LjUgMTYgMzM4IDU0LjQgMjU2IDEyMC45IDIwMC42TDE2OS42IDE2MHpNMjYwIDIyNGMtMTEgMC0yMCA5LTIwIDIwbDAgNGMtMjguOCAuMy01MiAyMy43LTUyIDUyLjUgMCAyNS43IDE4LjUgNDcuNiA0My45IDUxLjhsNDEuNyA3YzYgMSAxMC40IDYuMiAxMC40IDEyLjMgMCA2LjktNS42IDEyLjUtMTIuNSAxMi41TDIxNiAzODRjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDI0IDAgMCA0YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNC43YzI1LTQuMSA0NC0yNS43IDQ0LTUxLjggMC0yNS43LTE4LjUtNDcuNi00My45LTUxLjhsLTQxLjctN2MtNi0xLTEwLjQtNi4yLTEwLjQtMTIuMyAwLTYuOSA1LjYtMTIuNSAxMi41LTEyLjVsNDcuNSAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtOCAwIDAtNGMwLTExLTktMjAtMjAtMjB6Il0KICAgIH07CiAgICBmYU1vdW50YWluU3VuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vdW50YWluLXN1biIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTJmIiwgIk0yNTYuNSAwYzE0LjcgMCAyOC4yIDguMSAzNS4yIDIxbDIxNiA0MDBjNi43IDEyLjQgNi40IDI3LjQtLjggMzkuNS03LjIgMTIuMS0yMC4zIDE5LjUtMzQuMyAxOS41bC00MzIgMGMtMTQuMSAwLTI3LjEtNy40LTM0LjMtMTkuNXMtNy41LTI3LjEtLjgtMzkuNWwyMTYtNDAwIDIuOS00LjZDMjMxLjcgNi4yIDI0My42IDAgMjU2LjUgMHpNMTcwLjQgMjQ5LjlsMjYuOCAyNi44YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwbDQzLjMtNDMuM2M2LTYgMTQuMS05LjQgMjIuNi05LjRsNDIuOCAwLTcyLjEtMTMzLjUtODYuMSAxNTkuNHpNNDk2LjUgMTYwYTgwIDgwIDAgMSAxIDAtMTYwIDgwIDgwIDAgMSAxIDAgMTYweiJdCiAgICB9OwogICAgZmFBcnJvd1VwV2lkZVNob3J0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLXdpZGUtc2hvcnQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsic29ydC1hbW91bnQtdXAiXSwgImYxNjEiLCAiTTE1MC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw5NiAxNDEuMyA5NiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMwNi43IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NnpNMzIwIDQ4MGwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0wLTEyOGw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0wLTEyOGwxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTAtMTI4bDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnoiXQogICAgfTsKICAgIGZhU29ydEFtb3VudFVwID0gZmFBcnJvd1VwV2lkZVNob3J0OwogICAgZmFVc2Vyc0xpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlcnMtbGluZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTkyIiwgIk0yMjQgMTI4YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNMTc2IDMzNmMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMnMxMTIgNTAuMSAxMTIgMTEybDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtOHpNMzkyIDE0NGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bTI3LjIgMTAwLjRjOS4xLTIuOSAxOC44LTQuNCAyOC44LTQuNCA1MyAwIDk2IDQzIDk2IDk2bDAgMTAuN2MwIDExLjgtOS42IDIxLjMtMjEuMyAyMS4zbC03OC44IDBjMi43LTcuNSA0LjEtMTUuNiA0LjEtMjRsMC04YzAtMzQuMS0xMC42LTY1LjctMjguOC05MS42em0tMjYyLjQgMGMtMTguMiAyNi0yOC44IDU3LjUtMjguOCA5MS42bDAgOGMwIDguNCAxLjQgMTYuNSA0LjEgMjRsLTc4LjggMEM0MS42IDM2OCAzMiAzNTguNCAzMiAzNDYuN0wzMiAzMzZjMC01MyA0My05NiA5Ni05NiAxMCAwIDE5LjcgMS41IDI4LjggNC40ek03MiAxNDRhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0wIDQ0MGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw1MjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA0NjRjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFTdGFyT2ZEYXZpZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFyLW9mLWRhdmlkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTAwMTddLCAiZjY5YSIsICJNNDE1LjkgMzExLjlsLTI3LjggNDguMSA1NS43IDAtMjcuOC00OC4xek0zODMuNiAyNTZsLTYwLjItMTA0LTEzNC44IDAtNjAuMiAxMDQgNjAuMiAxMDQgMTM0LjggMCA2MC4yLTEwNHptNjQuNyAwbDU4LjQgMTAwLjljMy41IDYgNS4zIDEyLjggNS4zIDE5LjcgMCAyMS43LTE3LjYgMzkuNC0zOS40IDM5LjRsLTExNyAwLTYxLjMgMTA1LjhDMjg2LjUgNTM1LjYgMjcxLjggNTQ0IDI1NiA1NDRzLTMwLjUtOC40LTM4LjQtMjIuMmwtNjEuMy0xMDUuOC0xMTcgMGMtMjEuNyAwLTM5LjQtMTcuNi0zOS40LTM5LjQgMC02LjkgMS44LTEzLjcgNS4zLTE5LjdMNjMuNyAyNTYgNS4zIDE1NS4xQzEuOCAxNDkuMSAwIDE0Mi4zIDAgMTM1LjQgMCAxMTMuNiAxNy42IDk2IDM5LjQgOTZsMTE3IDAgNjEuMy0xMDUuOEMyMjUuNS0yMy42IDI0MC4yLTMyIDI1Ni0zMnMzMC41IDguNCAzOC40IDIyLjJsNjEuMyAxMDUuOCAxMTcgMGMyMS43IDAgMzkuNCAxNy42IDM5LjQgMzkuNCAwIDYuOS0xLjggMTMuNy01LjMgMTkuN0w0NDguMyAyNTZ6TTM4OC4xIDE1MmwyNy44IDQ4LjEgMjcuOC00OC4xLTU1LjcgMHpNMjkxIDk2bC0zNS02MC40LTM1IDYwLjQgNzAgMHpNMTIzLjkgMTUybC01NS43IDAgMjcuOCA0OC4xIDI3LjgtNDguMXpNOTYuMSAzMTEuOWwtMjcuOCA0OC4xIDU1LjcgMC0yNy44LTQ4LjF6TTIyMSA0MTZsMzUgNjAuNCAzNS02MC40LTcwIDB6Il0KICAgIH07CiAgICBmYU5vdGVzTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJub3Rlcy1tZWRpY2FsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ODEiLCAiTTk2IDM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxODEuNSAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43TDQ5My4zIDI5MC43YzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNMNTEyIDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE2MCAwQzEyNC43IDAgOTYgMjguNyA5NiA2NGwwIDI4OHpNMjg4IDExMmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQ4IDQ4IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC00OCAwIDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC00OC00OCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDggMCAwLTQ4YzAtOC44IDcuMi0xNiAxNi0xNnpNNDggMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMTA2LjcgMCAxMjBMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZsMC0zMjh6Il0KICAgIH07CiAgICBmYUF1c3RyYWxTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImF1c3RyYWwtc2lnbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMGE5IiwgIk0yNjYuNSAyNDBsLTg1IDAgNDIuNS0xMDYuNCA0Mi41IDEwNi40em02OC45IDBMMjYyLjkgNTguM0MyNTYuNSA0Mi40IDI0MS4xIDMyIDIyNCAzMnMtMzIuNSAxMC40LTM4LjkgMjYuM0wxMTIuNiAyNDAgMzIgMjQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDYxLjQgMC0xOS4yIDQ4LTQyLjMgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyMy4xIDAtMjAuOCA1Mi4xYy02LjYgMTYuNCAxLjQgMzUgMTcuOSA0MS42czM1LTEuNCA0MS42LTE3LjlsMzAuMy03NS45IDIwMCAwIDMwLjMgNzUuOWM2LjYgMTYuNCAyNS4yIDI0LjQgNDEuNiAxNy45czI0LjQtMjUuMiAxNy45LTQxLjZMMzkyLjkgMzg0IDQxNiAzODRjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQyLjMgMC0xOS4yLTQ4IDYxLjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAuNiAwem0tNDkuNyA0OGwxOS4yIDQ4LTE2MS42IDAgMTkuMi00OCAxMjMuMyAweiJdCiAgICB9OwogICAgZmFDbGlwYm9hcmRVc2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsaXBib2FyZC11c2VyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY3ZjMiLCAiTTMxMS40IDMybDguNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzUyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmw4LjYgMEM4My42IDEyLjkgMTA0LjMgMCAxMjggMEwyNTYgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJ6TTI0OCAxMTJjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMTM2IDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDExMiAwek0xOTIgMzQ0YTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyek05OC4zIDQxM2MtMTIuOSAxNS42IDIuMiAzNSAyMi40IDM1bDE0Mi41IDBjMjAuMiAwIDM1LjMtMTkuNCAyMi40LTM1LTE0LjctMTcuNy0zNi45LTI5LTYxLjctMjlsLTY0IDBjLTI0LjggMC00NyAxMS4zLTYxLjcgMjl6Il0KICAgIH07CiAgICBmYUZpbGVJbWFnZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1pbWFnZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODQ0M10sICJmMWM1IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTI4IDI1NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek05Mi42IDQ0OGwxOTguOCAwYzE1LjggMCAyOC42LTEyLjggMjguNi0yOC42IDAtNy4zLTIuOC0xNC40LTcuOS0xOS43TDIxNS4zIDI5Ny45Yy02LTYuMy0xNC40LTkuOS0yMy4yLTkuOWwtLjMgMGMtOC44IDAtMTcuMSAzLjYtMjMuMiA5LjlMNzEuOSAzOTkuN0M2Ni44IDQwNSA2NCA0MTIuMSA2NCA0MTkuNCA2NCA0MzUuMiA3Ni44IDQ0OCA5Mi42IDQ0OHoiXQogICAgfTsKICAgIGZhU3F1YXJlQ2FyZXRSaWdodDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWNhcmV0LXJpZ2h0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhcmV0LXNxdWFyZS1yaWdodCJdLCAiZjE1MiIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTMyMCAyNTZjMCA2LjctMi44IDEzLTcuNyAxNy42bC0xMTIgMTA0Yy03IDYuNS0xNy4yIDguMi0yNS45IDQuNFMxNjAgMzY5LjUgMTYwIDM2MGwwLTIwOGMwLTkuNSA1LjctMTguMiAxNC40LTIyczE4LjktMi4xIDI1LjkgNC40bDExMiAxMDRjNC45IDQuNSA3LjcgMTAuOSA3LjcgMTcuNnoiXQogICAgfTsKICAgIGZhQ2FyZXRTcXVhcmVSaWdodDIgPSBmYVNxdWFyZUNhcmV0UmlnaHQyOwogICAgZmFWaWFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZpYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MTRdLCAiZjQ5MiIsICJNMzQyLjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0wzMDYuNyA2NCAyOC4xIDM0Mi42QzEwLjEgMzYwLjYgMCAzODUgMCA0MTAuNUwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2bDUuNSAwYzI1LjUgMCA0OS45LTEwLjEgNjcuOS0yOC4xbDI3OC42LTI3OC42IDkuNCA5LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MHpNMjA1LjMgMjU2bDE0Ni43LTE0Ni43IDUwLjcgNTAuNy05NiA5Ni0xMDEuNSAweiJdCiAgICB9OwogICAgZmFIZWxpY29wdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlbGljb3B0ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg2NDFdLCAiZjUzMyIsICJNMTc2IDMyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE1MiAwIDAgNDgtMjIwLjggMC0zMi44LTM5LjRDNjkuOSA4My4yIDYzLjEgODAgNTYgODBMMjQgODBDMTUuNyA4MCA4IDg0LjMgMy42IDkxLjRzLTQuOCAxNS45LTEuMSAyMy40bDQ4IDk2QzU0LjYgMjE4LjkgNjIuOSAyMjQgNzIgMjI0bDEwNy44IDAgMTA0IDE0My4xYzE1LjEgMjAuNyAzOS4xIDMyLjkgNjQuNyAzMi45bDc1LjUgMGM3NS4xIDAgMTM2LTYwLjkgMTM2LTEzNlM0OTkuMSAxMjggNDI0IDEyOGwtNDggMCAwLTQ4IDE1MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDE3NiAzMnpNMzc2IDE5Mmw0OCAwYzM5LjggMCA3MiAzMi4yIDcyIDcycy0zMi4yIDcyLTcyIDcybC00OCAwIDAtMTQ0ek01NTIgNDE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNCAwIDQuNC0zLjYgOC04IDhsLTI3MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI3MiAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2IDAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFNaXR0ZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWl0dGVuIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3YjUiLCAiTTM1MiAzODRMNjQgMzg0IDUuNCAxNzguOUMxLjggMTY2LjQgMCAxNTMuNCAwIDE0MC4zIDAgNjIuOCA2Mi44IDAgMTQwLjMgMGwzLjQgMGM2NiAwIDEyMy41IDQ0LjkgMTM5LjUgMTA4LjlsMzEuNCAxMjUuOCAxNy42LTIwLjFDMzQ0LjggMjAwLjIgMzYyLjkgMTkyIDM4MiAxOTJsMi44IDBjMzQuOSAwIDYzLjMgMjguMyA2My4zIDYzLjMgMCAxNS45LTYgMzEuMi0xNi44IDQyLjlMMzUyIDM4NHpNMzIgNDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI4OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJMNjQgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2eiJdCiAgICB9OwogICAgZmFHYXNQdW1wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdhcy1wdW1wIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTk4MV0sICJmNTJmIiwgIk0zMiA2NEMzMiAyOC43IDYwLjcgMCA5NiAwTDI1NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTkyIDggMGM0OC42IDAgODggMzkuNCA4OCA4OGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNTRjLTI3LjYtNy4xLTQ4LTMyLjItNDgtNjJsMC01OS41LTI1LjgtMjguM2MtOC45LTkuOC04LjItMjUgMS42LTMzLjlzMjUtOC4yIDMzLjkgMS42bDcxLjcgNzguOGM5LjQgMTAuMyAxNC42IDIzLjcgMTQuNiAzNy43TDUxMiAzNzZjMCAzOS44LTMyLjIgNzItNzIgNzJzLTcyLTMyLjItNzItNzJsMC0zMmMwLTIyLjEtMTcuOS00MC00MC00MGwtOCAwIDAgMTYxLjRjOS4zIDMuMyAxNiAxMi4yIDE2IDIyLjYgMCAxMy4zLTEwLjcgMjQtMjQgMjRMNDAgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNCAwLTEwLjUgNi43LTE5LjMgMTYtMjIuNkwzMiA2NHpNOTYgODBsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZsMTI4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtOTZjMC04LjgtNy4yLTE2LTE2LTE2TDExMiA2NGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdCiAgICB9OwogICAgZmFFbnZlbG9wZUNpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVudmVsb3BlLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGU4IiwgIk02NCAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhsNDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA4MS40Yy0yNC40LTExLjItNTEuNC0xNy40LTgwLTE3LjQtODcuNyAwLTE2MS43IDU4LjgtMTg0LjcgMTM5LjItNy4xLTEuMy0xNC4xLTQuMi0yMC4xLTguOGwtMjA4LTE1NkM3MS4xIDE0MS4zIDY0IDEyNy4xIDY0IDExMnpNMzA0IDM2OGMwIDI4LjYgNi4yIDU1LjYgMTcuNCA4MEwxMjggNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE4OCAxOTguNCAxNDguOGMxMi42IDkuNCAyNi45IDE1LjQgNDEuNyAxNy45IDAgMS44LS4xIDMuNS0uMSA1LjN6bTQ4IDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjAxLjQtNjAuOWMtNy4xLTUuMi0xNy4yLTMuNi0yMi40IDMuNWwtNTMgNzIuOS0yNi44LTI2LjhjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjMy4zIDMuMyA3LjkgNSAxMi42IDQuNnM4LjktMi44IDExLjctNi41bDY0LTg4YzUuMi03LjEgMy42LTE3LjItMy41LTIyLjN6Il0KICAgIH07CiAgICBmYVBlcnNvblNrYXRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXNrYXRpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2thdGluZyJdLCAiZjdjNSIsICJNMzY4IDU2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMTI4IDEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxNTAuMSAwYzQ5LjkgMCA3NC45IDYwLjMgMzkuNiA5NS42bC02My45IDYzLjkgNjkuOCAzMWMxNy4zIDcuNyAyOC41IDI0LjkgMjguNSA0My45bDAgODUuNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTc1LjItODIuNC0zNi42Yy00MS0xOC4yLTUxLTcyLTE5LjMtMTAzLjdsNDAuNC00MC40LTk4LjcgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTg5LjQgMzYxLjRsNzUuOS03NS45YzcuNyAxOS43IDIxLjYgMzcuMyA0MSA0OS42bC03MS42IDcxLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zem0zNDYuNSA4Ny4xYzguNiAyLjEgMTMuOCAxMC44IDExLjYgMTkuNGwtLjQgMS43Yy02LjIgMjQuOS0yOC42IDQyLjQtNTQuMyA0Mi40TDMwNCA1MTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsODguOCAwYzExIDAgMjAuNi03LjUgMjMuMy0xOC4ybC40LTEuN2MyLjEtOC42IDEwLjgtMTMuOCAxOS40LTExLjZ6TTE0My4yIDQ4Ni4zbC02LjIgMy4xYy0yMS42IDEwLjgtNDcuNiA2LjYtNjQuNi0xMC41TDEyLjcgNDE5LjNjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGw1OS42IDU5LjZjNy4zIDcuMyAxOC41IDkuMSAyNy43IDQuNWw2LjItMy4xYzcuOS00IDE3LjUtLjcgMjEuNSA3LjJzLjcgMTcuNS03LjIgMjEuNXoiXQogICAgfTsKICAgIGZhU2thdGluZyA9IGZhUGVyc29uU2thdGluZzsKICAgIGZhU3VuMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5NzI4XSwgImYxODUiLCAiTTE3OC4yLTEwLjFjNy40LTMuMSAxNS44LTIuMiAyMi41IDIuMmw4Ny44IDU4LjIgODcuOC01OC4yYzYuNy00LjQgMTUuMS01LjIgMjIuNS0yLjJTNDExLjQtLjUgNDEzIDcuM2wyMC45IDEwMy4yIDEwMy4yIDIwLjljNy44IDEuNiAxNC40IDcgMTcuNCAxNC4zczIuMiAxNS44LTIuMiAyMi41bC01OC4yIDg3LjggNTguMiA4Ny44YzQuNCA2LjcgNS4yIDE1LjEgMi4yIDIyLjVzLTkuNiAxMi44LTE3LjQgMTQuM0w0MzMuOCA0MDEuNCA0MTMgNTA0LjdjLTEuNiA3LjgtNyAxNC40LTE0LjMgMTcuNHMtMTUuOCAyLjItMjIuNS0yLjJsLTg3LjgtNTguMi04Ny44IDU4LjJjLTYuNyA0LjQtMTUuMSA1LjItMjIuNSAyLjJzLTEyLjgtOS42LTE0LjMtMTcuNEwxNDMgNDAxLjQgMzkuNyAzODAuNWMtNy44LTEuNi0xNC40LTctMTcuNC0xNC4zcy0yLjItMTUuOCAyLjItMjIuNUw4Mi43IDI1NiAyNC41IDE2OC4yYy00LjQtNi43LTUuMi0xNS4xLTIuMi0yMi41czkuNi0xMi44IDE3LjQtMTQuM0wxNDMgMTEwLjYgMTYzLjkgNy4zYzEuNi03LjggNy0xNC40IDE0LjMtMTcuNHpNMjA3LjYgMjU2YTgwLjQgODAuNCAwIDEgMSAxNjAuOCAwIDgwLjQgODAuNCAwIDEgMSAtMTYwLjggMHptMjA4LjggMGExMjguNCAxMjguNCAwIDEgMCAtMjU2LjggMCAxMjguNCAxMjguNCAwIDEgMCAyNTYuOCAweiJdCiAgICB9OwogICAgZmFCYXNlYmFsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXNlYmFsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTM1OCwgOTkxOCwgImJhc2ViYWxsLWJhbGwiXSwgImY0MzMiLCAiTTIzMi40IDEuMWMtMTIyLjIgMTEuNC0yMTkuNSAxMDguNy0yMzAuOSAyMzAuOSAxNi4yLS4xIDMyLTEuOCA0Ny4yLTUgMTMtMi43IDI1LjcgNS41IDI4LjQgMTguNXMtNS41IDI1LjctMTguNSAyOC40Yy0xOC40IDMuOS0zNy42IDYtNTcuMSA2LjEgMTEuNCAxMjIuMiAxMDguNyAyMTkuNSAyMzAuOSAyMzAuOSAuMS0xOS41IDIuMi0zOC43IDYuMS01Ny4xIDIuNy0xMyAxNS41LTIxLjMgMjguNC0xOC41czIxLjMgMTUuNSAxOC41IDI4LjRjLTMuMiAxNS4yLTQuOSAzMS01IDQ3LjIgMTIyLjItMTEuNCAyMTkuNS0xMDguNyAyMzAuOS0yMzAuOS0xNi4yIC4xLTMyIDEuOC00Ny4yIDUtMTMgMi43LTI1LjctNS41LTI4LjQtMTguNXM1LjUtMjUuNyAxOC41LTI4LjRjMTguNC0zLjkgMzcuNi02IDU3LjEtNi4xLTExLjQtMTIyLjItMTA4LjctMjE5LjUtMjMwLjktMjMwLjktLjEgMTkuNS0yLjIgMzguNy02LjEgNTcuMS0yLjcgMTMtMTUuNSAyMS4zLTI4LjQgMTguNXMtMjEuMy0xNS41LTE4LjUtMjguNGMzLjItMTUuMiA0LjktMzEgNS00Ny4yem0yLjggMTUxLjRjLTIxLjQgMzIuOS00OS41IDYwLjktODIuMyA4Mi4zLTExLjEgNy4yLTI2IDQuMS0zMy4yLTdzLTQuMS0yNiA3LTMzLjJjMjcuMi0xNy43IDUwLjUtNDEgNjguMy02OC4zIDcuMi0xMS4xIDIyLjEtMTQuMyAzMy4yLTdzMTQuMyAyMi4xIDcgMzMuMnpNMzkzLjEgMjg0LjJjNy4yIDExLjEgNC4xIDI2LTcgMzMuMi0yNy4yIDE3LjctNTAuNSA0MS02OC4zIDY4LjMtNy4yIDExLjEtMjIuMSAxNC4zLTMzLjIgN3MtMTQuMy0yMi4xLTctMzMuMmMyMS40LTMyLjkgNDkuNS02MC45IDgyLjMtODIuMyAxMS4xLTcuMiAyNi00LjEgMzMuMiA3eiJdCiAgICB9OwogICAgZmFCYXNlYmFsbEJhbGwgPSBmYUJhc2ViYWxsOwogICAgZmFJbWFnZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaW1hZ2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjAzZSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNjQgODBhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2ek0yNzIgMjI0YzguNCAwIDE2LjEgNC40IDIwLjUgMTEuNWw4OCAxNDRjNC41IDcuNCA0LjcgMTYuNyAuNSAyNC4zUzM2OC43IDQxNiAzNjAgNDE2TDg4IDQxNmMtOC45IDAtMTcuMi01LTIxLjMtMTIuOXMtMy41LTE3LjUgMS42LTI0LjhsNTYtODBjNC41LTYuNCAxMS44LTEwLjIgMTkuNy0xMC4yczE1LjIgMy44IDE5LjcgMTAuMmwyNi40IDM3LjggNjEuNC0xMDAuNWM0LjQtNy4xIDEyLjEtMTEuNSAyMC41LTExLjV6Il0KICAgIH07CiAgICBmYU5vdGRlZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJub3RkZWYiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTFmZSIsICJNNjQgMzkwLjNMMTUzLjUgMjU2IDY0IDEyMS43IDY0IDM5MC4zek0xMDIuNSA0NDhMMjgxLjUgNDQ4IDE5MiAzMTMuNyAxMDIuNSA0NDh6bTEyOC0xOTJMMzIwIDM5MC4zIDMyMCAxMjEuNyAyMzAuNSAyNTZ6TTI4MS41IDY0TDEwMi41IDY0IDE5MiAxOTguMyAyODEuNSA2NHpNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBMMzM2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0MTZjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDQ4eiJdCiAgICB9OwogICAgZmFCYXNrZXRiYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhc2tldGJhbGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5MzYsICJiYXNrZXRiYWxsLWJhbGwiXSwgImY0MzQiLCAiTTkyLjcgNTguOGw3OC40IDc4LjRjMTguMi0yNSAyOC45LTU1LjkgMjguOS04OS4yIDAtMTQuMS0xLjktMjcuNy01LjUtNDAuNi0zOCA5LjQtNzIuNiAyNy4yLTEwMS44IDUxLjR6TTU4LjggOTIuN2MtMjQuMiAyOS4yLTQyIDYzLjgtNTEuNCAxMDEuOCAxMi45IDMuNiAyNi41IDUuNSA0MC42IDUuNSAzMy4zIDAgNjQuMS0xMC43IDg5LjItMjguOUw1OC44IDkyLjd6TTI1NiAwYy00LjYgMC05LjIgLjEtMTMuNyAuNCAzLjcgMTUuMyA1LjcgMzEuMiA1LjcgNDcuNiAwIDQ2LjYtMTUuOSA4OS40LTQyLjYgMTIzLjRMMjU2IDIyMi4xIDQxOS4zIDU4LjhDMzc0LjkgMjIuMSAzMTguMSAwIDI1NiAwek00OCAyNDhjLTE2LjQgMC0zMi40LTItNDcuNi01LjctLjIgNC41LS40IDkuMS0uNCAxMy43IDAgNjIuMSAyMi4xIDExOC45IDU4LjggMTYzLjNMMjIyLjEgMjU2IDE3MS40IDIwNS40QzEzNy40IDIzMi4xIDk0LjYgMjQ4IDQ4IDI0OHptNDYzLjYgMjEuN2MuMi00LjUgLjQtOS4xIC40LTEzLjcgMC02Mi4xLTIyLjEtMTE4LjktNTguOC0xNjMuM0wyODkuOSAyNTYgMzQwLjYgMzA2LjZjMzQtMjYuNyA3Ni45LTQyLjYgMTIzLjQtNDIuNiAxNi40IDAgMzIuNCAyIDQ3LjYgNS43em0tNy4xIDQ3LjhjLTEyLjktMy42LTI2LjUtNS41LTQwLjYtNS41LTMzLjMgMC02NC4xIDEwLjctODkuMiAyOC45bDc4LjQgNzguNGMyNC4yLTI5LjIgNDItNjMuOCA1MS40LTEwMS44ek0zNDAuOSAzNzQuOGMtMTguMiAyNS0yOC45IDU1LjktMjguOSA4OS4yIDAgMTQuMSAxLjkgMjcuNyA1LjUgNDAuNiAzOC05LjQgNzIuNi0yNy4yIDEwMS44LTUxLjRsLTc4LjQtNzguNHptLTM0LjMtMzQuM0wyNTYgMjg5LjkgOTIuNyA0NTMuMmM0NC4zIDM2LjcgMTAxLjIgNTguOCAxNjMuMyA1OC44IDQuNiAwIDkuMi0uMSAxMy43LS40LTMuNy0xNS4zLTUuNy0zMS4yLTUuNy00Ny42IDAtNDYuNiAxNS45LTg5LjQgNDIuNi0xMjMuNHoiXQogICAgfTsKICAgIGZhQmFza2V0YmFsbEJhbGwgPSBmYUJhc2tldGJhbGw7CiAgICBmYVBlbmNpbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW5jaWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5OTk5LCA2MTUwNCwgInBlbmNpbC1hbHQiXSwgImYzMDMiLCAiTTM2LjQgMzUzLjJjNC4xLTE0LjYgMTEuOC0yNy45IDIyLjYtMzguN2wxODEuMi0xODEuMiAzMy45LTMzLjljMTYuNiAxNi42IDUxLjMgNTEuMyAxMDQgMTA0bDMzLjkgMzMuOS0zMy45IDMzLjktMTgxLjIgMTgxLjJjLTEwLjcgMTAuNy0yNC4xIDE4LjUtMzguNyAyMi42TDMwLjQgNTEwLjZjLTguMyAyLjMtMTcuMyAwLTIzLjQtNi4yUy0xLjQgNDg5LjMgLjkgNDgxTDM2LjQgMzUzLjJ6bTU1LjYtMy43Yy00LjQgNC43LTcuNiAxMC40LTkuMyAxNi42bC0yNC4xIDg2LjkgODYuOS0yNC4xYzYuNC0xLjggMTIuMi01LjEgMTctOS43TDkxLjkgMzQ5LjV6bTM1NC0xNDYuMWMtMTYuNi0xNi42LTUxLjMtNTEuMy0xMDQtMTA0TDMwOCA2NS41QzMzNC41IDM5IDM0OS40IDI0LjEgMzUyLjkgMjAuNiAzNjYuNCA3IDM4NC44LS42IDQwNC0uNlM0NDEuNiA3IDQ1NS4xIDIwLjZsMzUuNyAzNS43QzUwNC40IDY5LjkgNTEyIDg4LjMgNTEyIDEwNy40cy03LjYgMzcuNi0yMS4yIDUxLjFjLTMuNSAzLjUtMTguNCAxOC40LTQ0LjkgNDQuOXoiXQogICAgfTsKICAgIGZhUGVuY2lsQWx0ID0gZmFQZW5jaWw7CiAgICBmYVBlcnNvbldhbGtpbmdBcnJvd0xvb3BMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi13YWxraW5nLWFycm93LWxvb3AtbGVmdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTUxIiwgIk0xNjAgODBhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTczLjQgMjI3LjlsMjIuNi0yMi42IDAgNjkuM2MwIDI4IDEyLjIgNTQuNyAzMy41IDcyLjlsNzEuNCA2MS4yYzUuOSA1LjEgOS44IDEyLjEgMTAuOSAxOS44bDEyLjYgODguMWMyLjUgMTcuNSAxOC43IDI5LjcgMzYuMiAyNy4yczI5LjctMTguNyAyNy4yLTM2LjJsLTEyLjYtODguMWMtMy4zLTIzLjEtMTQuOS00NC4xLTMyLjYtNTkuM2wtMzQuNS0yOS42IDAtMTE1LjIgMy44IDQuN2MxOC4yIDIyLjggNDUuOCAzNiA3NSAzNmwzMy4yIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMzLjIgMGMtOS43IDAtMTguOS00LjQtMjUtMTJsLTE3LjktMjIuNGMtMjMtMjguOC01Ny45LTQ1LjYtOTQuOC00NS42LTMyLjIgMC02My4xIDEyLjgtODUuOCAzNS42TDI4LjEgMTgyLjZDMTAuMSAyMDAuNiAwIDIyNSAwIDI1MC41TDAgMjg4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNy41YzAtOC41IDMuNC0xNi42IDkuNC0yMi42ek04NS44IDQwNy4zYy0xLjUgNS4yLTQuMyAxMC04LjEgMTMuOEw5LjQgNDg5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNjguMy02OC4zYzExLjUtMTEuNSAxOS45LTI1LjggMjQuNC00MS41bDIuMi03LjYtNDYtMzkuNGMtMi41LTIuMi01LTQuNC03LjQtNi44TDg1LjggNDA3LjN6TTM1OSAzMzVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDcyIDcyYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMzEtMzEgMTAyLjEgMGMxLjIgMCAyLjQtLjEgMy41LS4zIDU2LjEtMy45IDEwMC41LTUwLjYgMTAwLjUtMTA3LjcgMC01OS42LTQ4LjQtMTA4LTEwOC0xMDhsLTkyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOTIgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MHMtMjYuOSA2MC02MCA2MGwtOTguMSAwIDMxLTMxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTcyIDcyeiJdCiAgICB9OwogICAgZmFEaWNlU2l4ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpY2Utc2l4IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTg2MV0sICJmNTI2IiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptMTYwIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTEyOCAyODhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0zMiA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zMjAgMTkyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMzIgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzIwIDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUFuZ2xlc0Rvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYW5nbGVzLWRvd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiYW5nbGUtZG91YmxlLWRvd24iXSwgImYxMDMiLCAiTTIxNC42IDQ3MC42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTYwLTE2MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEwxOTIgNDAyLjcgMzI5LjQgMjY1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMTYwIDE2MHptMTYwLTM1MmwtMTYwIDE2MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTE2MC0xNjBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMTkyIDIxMC43IDMyOS40IDczLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3oiXQogICAgfTsKICAgIGZhQW5nbGVEb3VibGVEb3duID0gZmFBbmdsZXNEb3duOwogICAgZmFTeXJpbmdlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN5cmluZ2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgxMzddLCAiZjQ4ZSIsICJNNDk3LjUtMTdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTUgMTUtNDYuMSA0Ni4xLTYzLTYzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDcgNy03OC4xIDc4LjEgNDEgNDFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDEtNDEtNDYuMSA0Ni4xIDQxIDQxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQxLTQxLTM3LjcgMzcuN2MtMTAuNSAxMC41LTE2LjQgMjQuNy0xNi40IDM5LjZsMCA4OC44LTU3IDU3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNTctNTcgODguOCAwYzE0LjkgMCAyOS4xLTUuOSAzOS42LTE2LjRsMjI5LjctMjI5LjcgNyA3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNjMtNjMgNDYuMS00Ni4xIDE1IDE1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNjQtNjR6Il0KICAgIH07CiAgICBmYVdoZWF0QXduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndoZWF0LWF3biIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ3aGVhdC1hbHQiXSwgImUyY2QiLCAiTTc5LjcgMjM0LjZjNi4yLTQuMSAxNC43LTMuNCAyMC4xIDIuMWw0Ni4xIDQ2LjEgNi4xIDYuN2MxOS43IDIzLjggMjYuMyA1NSAxOS4yIDgzLjkgMzEuNy03LjcgNjYuMiAxIDkwLjYgMjUuM2w0Ni4xIDQ2LjFjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcuNCA3LjRjLTM3LjUgMzcuNS05OC4zIDM3LjUtMTM1LjggMEwxMzQuMSA0NDQuMyA0OS40IDUyOWMtOS40IDkuNC0yNC41IDkuNC0zMy45IDAtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsODQuNy04NC43LTMwLjUtMzAuNWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMXptMTA0LTEwNGM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDQ2LjEgNDYuMSA2LjEgNi43YzE5LjcgMjMuOCAyNi4zIDU1IDE5LjIgODMuOSAzMS43LTcuNyA2Ni4yIDEgOTAuNiAyNS4zbDQ2LjEgNDYuMWM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtNy40IDcuNGMtMzcuNSAzNy41LTk4LjMgMzcuNS0xMzUuOCAwbC05NC45LTk0LjljLTM3LjUtMzcuNS0zNy41LTk4LjMgMC0xMzUuN2w3LjQtNy40IDIuNS0yLjF6TTQ5NS4yIDE1YzkuNC05LjQgMjQuNi05LjQgMzQgMCA4LjggOC44IDkuMyAyMi43IDEuNiAzMi4yTDUyOS4yIDQ5IDQxNC43IDE2My40YzcuNyAxIDE1LjIgMyAyMi41IDUuOUw0OTUuNSAxMTFjOS40LTkuNCAyNC42LTkuNCAzNCAwIDguOCA4LjggOS4zIDIyLjcgMS42IDMyLjFsLTEuNyAxLjgtNTIuNyA1Mi43IDM5IDM5YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03LjQgNy40Yy0zNy41IDM3LjUtOTguMyAzNy41LTEzNS44IDBsLTk0LjktOTQuOWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMWM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDM5IDM5IDUyLjctNTIuN2M5LjQtOS40IDI0LjYtOS40IDM0IDAgOC44IDguOCA5LjMgMjIuNyAxLjYgMzIuMWwtMS43IDEuOC01OC4zIDU4LjNjMi44IDcuMSA0LjcgMTQuNSA1LjcgMjIuMUw0OTUuMiAxNXoiXQogICAgfTsKICAgIGZhV2hlYXRBbHQgPSBmYVdoZWF0QXduOwogICAgZmFQbGFuZVVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYW5lLXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUyMmQiLCAiTTIwMCAyNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI3LjMgMTczLjYgMTU5LjJjNi42IDYuMSAxMC40IDE0LjYgMTAuNCAyMy42bDAgNDMuN2MwIDEwLjktMTAuNyAxOC42LTIxLjEgMTUuMmwtMTYyLjktNTQuMyAwIDk5LjcgNjYgNTIuOGMzLjggMyA2IDcuNiA2IDEyLjVsMCAxOS44YzAgMTAuNC05LjggMTgtMTkuOSAxNS41TDI1NiA1MTIgMTQ3LjkgNTM5Yy0xMC4xIDIuNS0xOS45LTUuMS0xOS45LTE1LjVsMC0xOS44YzAtNC45IDIuMi05LjUgNi0xMi41bDY2LTUyLjggMC05OS43LTE2Mi45IDU0LjNDMjYuNyAzOTYuNCAxNiAzODguNyAxNiAzNzcuOGwwLTQzLjdjMC05IDMuOC0xNy41IDEwLjQtMjMuNkwyMDAgMTUxLjMgMjAwIDI0eiJdCiAgICB9OwogICAgZmFBbGlnbkNlbnRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbGlnbi1jZW50ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjAzNyIsICJNMzUyIDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDEyOCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnptOTYgMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnpNMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMzUyIDMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTkyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6Il0KICAgIH07CiAgICBmYUhvY2tleVB1Y2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG9ja2V5LXB1Y2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQ1MyIsICJNMjU2IDI1NkMxMTQuNiAyNTYgMCAyMTMgMCAxNjBzMTE0LjYtOTYgMjU2LTk2IDI1NiA0MyAyNTYgOTYtMTE0LjYgOTYtMjU2IDk2ek0wIDM1MkwwIDI0Mi43YzE2LjkgMTIuMyAzNyAyMi4yIDU4LjEgMzAuMSA1MyAxOS45IDEyMyAzMS4yIDE5Ny45IDMxLjJzMTQ0LjktMTEuMyAxOTcuOS0zMS4yYzIxLjItNy45IDQxLjItMTcuOCA1OC4xLTMwLjFMNTEyIDM1MmMwIDUzLTExNC42IDk2LTI1NiA5NlMwIDQwNSAwIDM1MnoiXQogICAgfTsKICAgIGZhQ2lyY2xlQXJyb3dMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1hcnJvdy1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFycm93LWNpcmNsZS1sZWZ0Il0sICJmMGE4IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTM1IDIzOWw4MC04MGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTM5IDM5IDE1MC4xIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE1MC4xIDAgMzkgMzljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtODAtODBjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45eiJdCiAgICB9OwogICAgZmFBcnJvd0NpcmNsZUxlZnQgPSBmYUNpcmNsZUFycm93TGVmdDsKICAgIGZhUGx1Z0NpcmNsZUJvbHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1Zy1jaXJjbGUtYm9sdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTViIiwgIk0xOTItMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiAxMjggMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNDguN2MtOTguNiA4LjEtMTc2IDkwLjctMTc2IDE5MS4zIDAgMjcuMyA1LjcgNTMuMyAxNiA3Ni45bDAgMy4xYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjYuN0MxNjUuMiAzOTguMSA5NiAzMTkuMSA5NiAyMjRsMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTNzguMyA5NiA5NiA5Nmw2NCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTM1MiA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTc3LjQtNzdjLTUuOC00LjItMTMuOC00LTE5LjQgLjVsLTgwIDY0Yy01LjMgNC4yLTcuNCAxMS40LTUuMSAxNy44UzQzMy4yIDQxNiA0NDAgNDE2bDMyLjkgMC0xNS45IDQyLjRjLTIuNSA2LjctLjIgMTQuMyA1LjYgMTguNnMxMy44IDQgMTkuNC0uNWw4MC02NGM1LjMtNC4yIDcuNC0xMS40IDUuMS0xNy44UzU1OC44IDM4NCA1NTIgMzg0bC0zMi45IDAgMTUuOS00Mi40YzIuNS02LjcgLjItMTQuMy01LjYtMTguNnoiXQogICAgfTsKICAgIGZhUmVzdHJvb20gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVzdHJvb20iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjdiZCIsICJNODAgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptNDAgMzA0bDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTU0LjhjLTguMSA5LjItMjEuMSAxMy4yLTMzLjUgOS40LTE2LjktNS4zLTI2LjMtMjMuMi0yMS00MC4xbDI5LjctOTUuMkM0NC40IDE1Ni45IDgzLjYgMTI4IDEyOCAxMjhzODMuNiAyOC45IDk2LjggNzEuMmwyOS43IDk1LjJjNS4zIDE2LjktNC4xIDM0LjgtMjEgNDAuMS0xMi40IDMuOS0yNS40LS4yLTMzLjUtOS40TDIwMCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjgtMTYgMHpNMzIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0NjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00NjRjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTQ2NCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek00NDAgNDgwbDAtOTYtMTcuOCAwYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMWw5LTI2LjljLTMuMiAwLTYuNC0uNS05LjUtMS41LTE2LjktNS4zLTI2LjMtMjMuMi0yMS00MC4xbDI5LjctOTUuMkM0MjguNCAxNTYuOSA0NjcuNiAxMjggNTEyIDEyOHM4My42IDI4LjkgOTYuOCA3MS4ybDI5LjcgOTUuMmM1LjMgMTYuOS00LjEgMzQuOC0yMSA0MC4xLTMuMiAxLTYuNCAxLjUtOS41IDEuNWw5IDI2LjljMy41IDEwLjQtNC4zIDIxLjEtMTUuMiAyMS4xbC0xNy44IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2LTE2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhQW5jaG9yTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmNob3ItbG9jayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGFkIiwgIk0zMjAuNSA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0tMzItOTZjLTUzIDAtOTYgNDMtOTYgOTYgMCA0MS44IDI2LjcgNzcuNCA2NCA5MC41bDAgMjU3LjljLTYyLjktMTQuMy0xMTAuMi02OS43LTExMS45LTEzNi41bDE2LjEgMTQuMWMxMCA4LjcgMjUuMSA3LjcgMzMuOS0yLjNzNy43LTI1LjEtMi4zLTMzLjlsLTY0LTU2Yy05LTcuOS0yMi42LTcuOS0zMS42IDBsLTY0IDU2Yy0xMCA4LjctMTEgMjMuOS0yLjMgMzMuOXMyMy45IDExIDMzLjkgMi4zbDE2LjItMTQuMmMyLjEgMTEzLjEgOTQuNCAyMDQuMSAyMDggMjA0LjEgMjguMyAwIDU1LjQtNS43IDgwLTE1LjlsMC0uMiAwLTcyLjJjLTE0LjQgOS42LTMwLjYgMTYuNy00OCAyMC43bDAtMjU3LjljMzcuMy0xMy4yIDY0LTQ4LjcgNjQtOTAuNSAwLTUzLTQzLTk2LTk2LTk2em0yNzIgMzA0LjFsMCA0Ny45LTY0IDAgMC00Ny45YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTQxNi41IDQwMGwwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEyOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yMC45LTEzLjQtMzguNy0zMi00NS4zbDAtNTAuNmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGwwIDUwLjZjLTE4LjYgNi42LTMyIDI0LjQtMzIgNDUuM3oiXQogICAgfTsKICAgIGZhVGltZWxpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGltZWxpbmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTI5YyIsICJNMTYwIDE2OS4zYzI4LjMtMTIuMyA0OC00MC41IDQ4LTczLjMgMC00NC4yLTM1LjgtODAtODAtODBTNDggNTEuOCA0OCA5NmMwIDMyLjggMTkuNyA2MSA0OCA3My4zbDAgNTQuNy02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIyNCAwIDAgNTQuN2MtMjguMyAxMi4zLTQ4IDQwLjUtNDggNzMuMyAwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMzIuOC0xOS43LTYxLTQ4LTczLjNsMC01NC43IDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwIDAtNTQuN2MyOC4zLTEyLjMgNDgtNDAuNSA0OC03My4zIDAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwYzAgMzIuOCAxOS43IDYxIDQ4IDczLjNsMCA1NC43LTI1NiAwIDAtNTQuN3oiXQogICAgfTsKICAgIGZhTGlnaHRidWxiMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaWdodGJ1bGIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxNjFdLCAiZjBlYiIsICJNMjkyLjkgMzg0YzcuMy0yMi4zIDIxLjktNDIuNSAzOC40LTU5LjkgMzIuNy0zNC40IDUyLjctODAuOSA1Mi43LTEzMi4xIDAtMTA2LTg2LTE5Mi0xOTItMTkyUzAgODYgMCAxOTJjMCA1MS4yIDIwIDk3LjcgNTIuNyAxMzIuMSAxNi41IDE3LjQgMzEuMiAzNy42IDM4LjQgNTkuOWwyMDEuNyAwek0yODggNDMybC0xOTIgMCAwIDE2YzAgNDQuMiAzNS44IDgwIDgwIDgwbDMyIDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC0xNnpNMTg0IDExMmMtMzkuOCAwLTcyIDMyLjItNzIgNzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC02Ni4zIDUzLjctMTIwIDEyMC0xMjAgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6Il0KICAgIH07CiAgICBmYUNpcmNsZUFycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWFycm93LXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFycm93LWNpcmNsZS1yaWdodCJdLCAiZjBhOSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTQxLTE1OWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzOS0zOS0xNTAuMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE1MC4xIDAtMzktMzljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw4MCA4MGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtODAgODB6Il0KICAgIH07CiAgICBmYUFycm93Q2lyY2xlUmlnaHQgPSBmYUNpcmNsZUFycm93UmlnaHQ7CiAgICBmYU1hcnNBbmRWZW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXJzLWFuZC12ZW51cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk4OTNdLCAiZjIyNCIsICJNMzY4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTEyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zNC43LTYzIDYzYzE5LjUgMjguNCAzMSA2Mi43IDMxIDk5LjggMCA4Ni4zLTYyLjEgMTU4LjEtMTQ0IDE3My4xbDAgMzQuOSAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC0zNC45Yy04MS45LTE1LTE0NC04Ni44LTE0NC0xNzMuMSAwLTk3LjIgNzguOC0xNzYgMTc2LTE3NiAzNyAwIDcxLjQgMTEuNCA5OS44IDMxbDYzLTYzLTM0LjcgMHpNMzUyIDIwOGExMTIgMTEyIDAgMSAwIC0yMjQgMCAxMTIgMTEyIDAgMSAwIDIyNCAweiJdCiAgICB9OwogICAgZmFOZXR3b3JrV2lyZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibmV0d29yay13aXJlZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNmZmIiwgIk0yNDggODhsODAgMCAwIDQ4LTgwIDAgMC00OHptLTgtNTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsMTYgMCAwIDMyLTIyNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDAgMCAzMi0xNiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDk2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtMTYgMCAwLTMyIDE5MiAwIDAgMzItMTYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw5NiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTE2IDAgMC0zMiA5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yMjQgMCAwLTMyIDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtOTYgMHpNNDQ4IDM3Nmw4IDAgMCA0OC04MCAwIDAtNDggNzIgMHptLTI1NiAwbDggMCAwIDQ4LTgwIDAgMC00OCA3MiAweiJdCiAgICB9OwogICAgZmFCdWlsZGluZ1NoaWVsZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy1zaGllbGQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRkOCIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMDEuMiAwYy0xMi41LTE0LjctMjMuMi0zMC44LTMxLjgtNDhsLTg5LjUgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDAgMC0yNi43YzAtMTguMSA2LjEtMzUuMiAxNi42LTQ4LjgtLjQtMS40LS42LTIuOS0uNi00LjVsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxIDg2LjctMjguOWMzLjEtMSA2LjItMS44IDkuMy0yLjVMNDE2IDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDB6bTMyIDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNzIgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTI4IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek00NDUuMyA0ODguNWwtMTMuMyA2LjMgMC0xODguMSA5NiAzMiAwIDE5LjZjMCA1NS44LTMyLjIgMTA2LjUtODIuNyAxMzAuM3pNNDIxLjkgMjU5LjVsLTExMiAzNy4zYy0xMy4xIDQuNC0yMS45IDE2LjYtMjEuOSAzMC40bDAgMzEuMWMwIDc0LjQgNDMgMTQyLjEgMTEwLjIgMTczLjdsMTguNSA4LjdjNC44IDIuMiAxMCAzLjQgMTUuMiAzLjRzMTAuNS0xLjIgMTUuMi0zLjRsMTguNS04LjdDNTMzIDUwMC4zIDU3NiA0MzIuNiA1NzYgMzU4LjJsMC0zMS4xYzAtMTMuOC04LjgtMjYtMjEuOS0zMC40bC0xMTItMzcuM2MtNi42LTIuMi0xMy43LTIuMi0yMC4yIDB6Il0KICAgIH07CiAgICBmYUNvZGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29kZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMTIxIiwgIk0zNjAuOCAxLjJjLTE3LTQuOS0zNC43IDUtMzkuNiAyMmwtMTI4IDQ0OGMtNC45IDE3IDUgMzQuNyAyMiAzOS42czM0LjctNSAzOS42LTIybDEyOC00NDhjNC45LTE3LTUtMzQuNy0yMi0zOS42em02NC42IDEzNi4xYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w3My40IDczLjQtNzMuNCA3My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC05Ni05NmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDB6bS0yNzQuNyAwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMNzcuMyAyNTYgMTUwLjYgMTgyLjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjN6Il0KICAgIH07CiAgICBmYUZlYXRoZXJQb2ludGVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZlYXRoZXItcG9pbnRlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJmZWF0aGVyLWFsdCJdLCAiZjU2YiIsICJNNDc1LjMgLjFjOS45LS44IDE5LjYgMyAyNi42IDEwczEwLjggMTYuNyAxMCAyNi42Yy00IDQ5LjMtMTcuNCAxMjYuMi00Ni4zIDE5OS43LTEuOCA0LjUtNS41IDcuOS0xMC4yIDkuM0wzNzQuNSAyNzBjLTMuOSAxLjItNi41IDQuNy02LjUgOC44IDAgNS4xIDQuMSA5LjIgOS4yIDkuMmwzOC42IDBjMTIgMCAxOS43IDEyLjggMTMuNSAyMy4xLTQgNi43LTguMyAxMy4yLTEyLjcgMTkuNi0yIDIuOS01IDUtOC40IDYuMUwzMTAuNSAzNjZjLTMuOSAxLjItNi41IDQuNy02LjUgOC44IDAgNS4xIDQuMSA5LjIgOS4yIDkuMmwxNiAwYzE0LjYgMCAyMSAxNy40IDguOCAyNS40LTY4IDQ1LTEzNy43IDQzLjMtMTgyLjQgMzEuMy0xMi43LTMuNC0yNC05LjktMzQuNC0xNy45TDQ4IDQ5NmMtOC44IDguOC0yMy4yIDguOC0zMiAwcy04LjgtMjMuMiAwLTMybDgwLTgwIC41IC41Yy43LTEuMyAxLjYtMi41IDIuNy0zLjZMMjU2IDIyNGM4LjgtOC44IDguOC0yMy4yIDAtMzJzLTIzLjItOC44LTMyIDBMODkuNyAzMjYuMmMtOC45IDguOS0yNCA0LjQtMjUtOC4yLTQuMy01My4yIDkuMy0xMjMuMSA3Mi42LTE4Ni40IDkxLjEtOTEuMSAyNTQuMi0xMjQuNyAzMzcuOS0xMzEuNXoiXQogICAgfTsKICAgIGZhRmVhdGhlckFsdCA9IGZhRmVhdGhlclBvaW50ZWQ7CiAgICBmYUZpbGVDaXJjbGVRdWVzdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNpcmNsZS1xdWVzdGlvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGVmIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTAwYy0xMS42IDAtMjEuMyA4LjItMjMuNSAxOS4yLTEuOCA4LjctMTAuMiAxNC4zLTE4LjkgMTIuNXMtMTQuMy0xMC4yLTEyLjUtMTguOWM1LjItMjUuNiAyNy44LTQ0LjggNTQuOS00NC44IDMwLjkgMCA1NiAyNS4xIDU2IDU2IDAgMTkuOC0xMS43IDM3LjgtMjkuOCA0NS45bC0xMC40IDQuNmMtMS4yIDcuNy03LjggMTMuNS0xNS44IDEzLjUtOC44IDAtMTYtNy4yLTE2LTE2IDAtMTEuMiA2LjYtMjEuMyAxNi44LTI1LjlsMTIuNC01LjVjNi42LTIuOSAxMC44LTkuNCAxMC44LTE2LjYgMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYVNpZ25hdHVyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaWduYXR1cmUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjViNyIsICJNMTkyIDEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNy44YzAgMjcuNy0yLjQgNTUuMy03LjEgODIuNWwtODQuNCAyNS4zYy00MC42IDEyLjItNjguNCA0OS42LTY4LjQgOTJsMCAzMi40LTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNzIuNSAwYzQuMiAzNiAzNC44IDY0IDcyIDY0IDI2IDAgNTAtMTMuOSA2Mi45LTM2LjVsMTMuOS0yNC4zYzI2LjgtNDcgNDYuNS05Ny43IDU4LjQtMTUwLjVsOTQuNC0yOC4zLTEyLjUgMzcuNWMtMy4zIDkuOC0xLjYgMjAuNSA0LjQgMjguOFM0MDUuNyAzMjAgNDE2IDMyMGwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtODMuNiAwIDE4LTUzLjljMy44LTExLjMgLjktMjMuOC03LjQtMzIuNHMtMjAuNy0xMS44LTMyLjItOC40TDMxNi40IDE5OC4xYzIuNC0yMC43IDMuNi00MS40IDMuNi02Mi4zbDAtNy44YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2bDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyem0tOS4yIDE3N2w0OS0xNC43Yy0xMC40IDMzLjgtMjQuNSA2Ni40LTQyLjEgOTcuMmwtMTMuOSAyNC4zYy0xLjUgMi42LTQuMyA0LjMtNy40IDQuMy00LjcgMC04LjUtMy44LTguNS04LjVsMC03MS45YzAtMTQuMSA5LjMtMjYuNiAyMi44LTMwLjd6TTYxNiA0MTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI5Mi45IDBjLTYuNSAxNi4zLTEzLjcgMzIuMy0yMS42IDQ4TDYxNiA0MTZ6Il0KICAgIH07CiAgICBmYUVhcnRoQW1lcmljYXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWFydGgtYW1lcmljYXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3NTgsICJlYXJ0aCIsICJlYXJ0aC1hbWVyaWNhIiwgImdsb2JlLWFtZXJpY2FzIl0sICJmNTdkIiwgIk01NS43IDE5OS43bDMwLjkgMzAuOWM2IDYgMTQuMSA5LjQgMjIuNiA5LjRsMjEuNSAwYzguNSAwIDE2LjYgMy40IDIyLjYgOS40bDI5LjMgMjkuM2M2IDYgOS40IDE0LjEgOS40IDIyLjZsMCAzNy41YzAgOC41IDMuNCAxNi42IDkuNCAyMi42bDEzLjMgMTMuM2M2IDYgOS40IDE0LjEgOS40IDIyLjZsMCAxOC43YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yLjdjMC04LjUgMy40LTE2LjYgOS40LTIyLjZsNDUuMy00NS4zYzYtNiA5LjQtMTQuMSA5LjQtMjIuNmwwLTM0LjdjMC0xNy43LTE0LjMtMzItMzItMzJsLTgyLjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTE2LTE2Yy00LjItNC4yLTYuNi0xMC02LjYtMTYgMC0xMi41IDEwLjEtMjIuNiAyMi42LTIyLjZsMzQuNyAwYzEyLjUgMCAyMi42LTEwLjEgMjIuNi0yMi42IDAtNi0yLjQtMTEuOC02LjYtMTZsLTE5LjctMTkuN0MyNDIgMTMwIDI0MCAxMjUuMSAyNDAgMTIwczItMTAgNS43LTEzLjdsMTcuMy0xNy4zYzUuOC01LjggOS4xLTEzLjcgOS4xLTIxLjkgMC03LjItMi40LTEzLjctNi40LTE4LjktMy4yLS4xLTYuNC0uMi05LjYtLjItOTUuNCAwLTE3NS43IDY0LjItMjAwLjMgMTUxLjd6TTQ2NCAyNTZjMC0zNC42LTguNC02Ny4yLTIzLjQtOTUuOC02LjQgLjktMTIuNyAzLjktMTcuOSA5LjFsLTEzLjQgMTMuNGMtNiA2LTkuNCAxNC4xLTkuNCAyMi42bDAgMzQuN2MwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNC4xIDBjMi41IDAgNS0uMyA3LjMtLjggLjQtNSAuNS0xMC4xIC41LTE1LjJ6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6Il0KICAgIH07CiAgICBmYUVhcnRoID0gZmFFYXJ0aEFtZXJpY2FzOwogICAgZmFFYXJ0aEFtZXJpY2EgPSBmYUVhcnRoQW1lcmljYXM7CiAgICBmYUdsb2JlQW1lcmljYXMgPSBmYUVhcnRoQW1lcmljYXM7CiAgICBmYUNhcnJvdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXJyb3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjkzNjVdLCAiZjc4NyIsICJNNDUzLjEtMzYuN0w0NDAuOS0yNC42Yy0zMS4yIDMxLjItMzEuMiA4MS45IDAgMTEzLjEgMTUuNiAxNS42IDMxLjIgMzEuMiA0Ni45IDQ2LjkgMzEuMiAzMS4yIDgxLjkgMzEuMiAxMTMuMSAwbDEyLjEtMTIuMWM2LjItNi4yIDYuMi0xNi40IDAtMjIuNkw2MDAuOSA4OC42Yy0zMS4yLTMxLjItODEuOS0zMS4yLTExMy4xIDAgMzEuMi0zMS4yIDMxLjItODEuOSAwLTExMy4xTDQ3NS43LTM2LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwek0zMzEuNiA5NmMtNDUuMiAwLTg3LjEgMjAuNC0xMTUgNTQuM0wyNzMuMyAyMDdjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEwxOTEuNiAxOTMuMiA2Ny4yIDQ2Ni44Yy01LjUgMTIuMS0yLjkgMjYuNCA2LjUgMzUuOXMyMy43IDEyIDM1LjkgNi41bDE0MS42LTY0LjQtNDMuOC00My44Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNTYuNSA1Ni41IDk1LjMtNDMuM2M1My4xLTI0LjEgODcuMi03Ny4xIDg3LjItMTM1LjUgMC04Mi4yLTY2LjYtMTQ4LjgtMTQ4LjgtMTQ4Ljh6Il0KICAgIH07CiAgICBmYVRlbXBlcmF0dXJlRnVsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW1wZXJhdHVyZS1mdWxsIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbInRlbXBlcmF0dXJlLTQiLCAidGhlcm1vbWV0ZXItNCIsICJ0aGVybW9tZXRlci1mdWxsIl0sICJmMmM3IiwgIk0xNjAgMEMxMDcgMCA2NCA0MyA2NCA5NmwwIDE2NC43QzM0LjUgMjg3IDE2IDMyNS40IDE2IDM2OCAxNiA0NDcuNSA4MC41IDUxMiAxNjAgNTEyczE0NC02NC41IDE0NC0xNDRjMC00Mi42LTE4LjUtODEtNDgtMTA3LjNMMjU2IDk2YzAtNTMtNDMtOTYtOTYtOTZ6bTY0IDM2OGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NGMwLTI2LjkgMTYuNS00OS45IDQwLTU5LjNMMTM2IDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAyMTIuN2MyMy41IDkuNSA0MCAzMi41IDQwIDU5LjN6Il0KICAgIH07CiAgICBmYVRlbXBlcmF0dXJlNCA9IGZhVGVtcGVyYXR1cmVGdWxsOwogICAgZmFUaGVybW9tZXRlcjQgPSBmYVRlbXBlcmF0dXJlRnVsbDsKICAgIGZhVGhlcm1vbWV0ZXJGdWxsID0gZmFUZW1wZXJhdHVyZUZ1bGw7CiAgICBmYVRhYmxlQ2VsbHNSb3dMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlLWNlbGxzLXJvdy1sb2NrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU2N2EiLCAiTTI1NiAyODhsMC02NCAxNTMuMyAwYzE3LjEtNDIuMiA1Ni03My4yIDEwMi43LTc5bDAtNDljMC0zNS4zLTI4LjctNjQtNjQtNjRMMTI4IDMyQzkyLjcgMzIgNjQgNjAuNyA2NCA5NmwwIDMyMGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNDEuMyAwYy0uOS01LjItMS4zLTEwLjYtMS4zLTE2LjFsMC00Ny45LTExMiAwIDAtNjQgMTEzLjMgMGMzLjctMjIgMTQuOC00MS40IDMwLjctNTUuNmwwLTguNC0xNDQgMHptMC0xOTJsMTkyIDAgMCA2NC0xOTIgMCAwLTY0ek01NjAgMjcyLjFsMCA0Ny45LTY0IDAgMC00Ny45YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTQxNiAzNjhsMCA5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTk2YzAtMjAuOS0xMy40LTM4LjctMzItNDUuM2wwLTUwLjZjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBsMCA1MC42Yy0xOC42IDYuNi0zMiAyNC40LTMyIDQ1LjN6Il0KICAgIH07CiAgICBmYUJvbHRMaWdodG5pbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9sdC1saWdodG5pbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTBiNyIsICJNMCAyNTZMMjguNSAyOGMyLTE2IDE1LjYtMjggMzEuOC0yOEwyMjguOSAwYzE1IDAgMjcuMSAxMi4xIDI3LjEgMjcuMSAwIDMuMi0uNiA2LjUtMS43IDkuNUwyMDggMTYwIDM0Ny4zIDE2MGMyMC4yIDAgMzYuNyAxNi40IDM2LjcgMzYuNyAwIDcuNC0yLjIgMTQuNi02LjQgMjAuN2wtMTkyLjIgMjgxYy01LjkgOC42LTE1LjYgMTMuNy0yNS45IDEzLjdsLTIuOSAwYy0xNS43IDAtMjguNS0xMi44LTI4LjUtMjguNSAwLTIuMyAuMy00LjYgLjktNi45TDE3NiAyODggMzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhQ2xvdWRTaG93ZXJzV2F0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQtc2hvd2Vycy13YXRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGU0IiwgIk0yNzkuMiA1NS43QzI2My45IDIyLjggMjMwLjYgMCAxOTIgMCAxMzkgMCA5NiA0MyA5NiA5NiA2MC43IDk2IDMyIDEyNC43IDMyIDE2MHMyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0bC0xLjYgMGMtNy40LTM2LjUtMzkuNy02NC03OC40LTY0LTIyLjIgMC00Mi4zIDkuMS01Ni44IDIzLjd6TTQxMC42IDQ3Ni4xYzIwLjcgMTUuNiA0NiAzMC43IDc0LjIgMzQuNSAxMy4xIDEuOCAyNS4yLTcuNSAyNy0yMC42cy03LjUtMjUuMi0yMC42LTI3Yy0xNS45LTIuMS0zMy4yLTExLjMtNTEuNy0yNS4yLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNzLTMwLjUtOC4yLTU0LjUtMjYuM2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTE4LjUgMTMuOS0zNS44IDIzLjEtNTEuNyAyNS4yLTEzLjEgMS44LTIyLjQgMTMuOC0yMC42IDI3czEzLjggMjIuNCAyNyAyMC42YzI4LjItMy44IDUzLjYtMTguOSA3NC4yLTM0LjUgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOWMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMHpNMTAwLjEgMzAzLjZjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40cy0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjMgNjRDMjkgMzY1IDM1LjggMzc4LjYgNDguNCAzODIuOHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuMy02NHptMTIwIDBjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40cy0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjMgNjRjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuMy02NHptMTEyIDBjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40cy0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjMgNjRjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuMy02NHptMTIwIDBjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40cy0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjMgNjRjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuMy02NHoiXQogICAgfTsKICAgIGZhQXJyb3dVcExvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtbG9uZyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWyJsb25nLWFycm93LXVwIl0sICJmMTc2IiwgIk0xODIuNi0yMi42Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTI4IDEyOGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxMjggNzcuMyAxMjggNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC00MzQuNyA3My40IDczLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOHoiXQogICAgfTsKICAgIGZhTG9uZ0Fycm93VXAgPSBmYUFycm93VXBMb25nOwogICAgZmFBZGRyZXNzQ2FyZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYWRkcmVzcy1jYXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjIxNDAsICJjb250YWN0LWNhcmQiLCAidmNhcmQiXSwgImYyYmIiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTgwIDI1Nmw2NCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNkw4MCAzODRjLTguOCAwLTE2LTcuMi0xNi0xNiAwLTQ0LjIgMzUuOC04MCA4MC04MHptLTI0LTk2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptMjQwLTQ4bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMTIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMCA5NmwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTEyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUNvbnRhY3RDYXJkMiA9IGZhQWRkcmVzc0NhcmQyOwogICAgZmFWY2FyZDIgPSBmYUFkZHJlc3NDYXJkMjsKICAgIGZhQW5nbGVSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmdsZS1yaWdodCIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgWzgyNTBdLCAiZjEwNSIsICJNMjQ3LjEgMjMzLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTE2MCAxNjBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDE3OS4yIDI1NiA0MS45IDExOC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjB6Il0KICAgIH07CiAgICBmYUZhY2VNZWgyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtbWVoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTI4LCAibWVoIl0sICJmMTFhIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTc2IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0xNzYgMzIwbDE2MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNjAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTWVoMiA9IGZhRmFjZU1laDI7CiAgICBmYUFycm93VXBGcm9tR3JvdW5kV2F0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtZnJvbS1ncm91bmQtd2F0ZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRiNSIsICJNMzAzIDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsODggODhjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDctNDcgMCAyNzguMWMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTI3OC4xLTQ3IDQ3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDMwMyA3ek0yNDAgMTkybDAgMTYzLjFjLTEwLjYtMi4yLTIxLjMtMy4yLTMyLTMuMS0zMi41IC4yLTY0LjkgMTAuNy05Mi4zIDMxLjQtOC44IDYuNi0xNS45IDEwLjktMjEuNyAxMy41bC0uOCAuNGMtMy43IDEuNy02LjQgMi45LTkuOCAuMy02LTQuNS0xMi42LTgtMTkuMy0xMC40TDY0IDI0MGMwLTI2LjUgMjEuNS00OCA0OC00OGwxMjggMHptMzM2IDQ4bDAgMTU1LjJjLTEuMSAuOC0yLjIgMS41LTMuMyAyLjQtNC4xIDMuMS04LjMgLjgtMTIuNi0xLjUtLjYtLjMtMS4yLS42LTEuOC0xLTUuMi0yLjctMTEuMS02LjYtMTgtMTEuNy0yOC4xLTIxLjEtNjEuMy0zMS42LTk0LjQtMzEuNC0xNS41IC4xLTMxIDIuNS00NiA3LjNsMC0xNjcuMyAxMjggMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNNDAzLjQgNDc2LjFDMzc5LjEgNDk0LjMgMzUxLjEgNTEyIDMyMCA1MTJzLTU5LjEtMTcuNy04My40LTM1LjljLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAwLTIzLjggMTcuOS01NC4xIDM1LjUtODguMSAzNS4zLTIwLjQtLjEtNDAuNy02LjctNTkuOC0yMS4xLTEwLjYtOC0xMi43LTIzLTQuNy0zMy42czIzLTEyLjcgMzMuNi00LjdjMTEuMyA4LjUgMjEuNiAxMS40IDMxLjIgMTEuNSAxNy42IC4xIDM3LjMtOS40IDU4LjktMjUuNyAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMjQgMTguMSA0MC43IDI2LjMgNTQuNSAyNi4zczMwLjUtOC4yIDU0LjUtMjYuM2MzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTYuOSAxMi43IDMyLjkgMjEuNSA0Ny44IDI0LjYgMTMuNyAyLjggMjcuNCAuOSA0Mi4zLTEwLjMgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOSAyNS42LTQuNyAzMy42Yy0yNi40IDE5LjktNTQuMiAyNC40LTgwLjcgMTkuMS0yNS4zLTUuMS00OC4xLTE4LjktNjcuMi0zMy4zLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAweiJdCiAgICB9OwogICAgZmFNYXAyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUwNiwgNjIwNzJdLCAiZjI3OSIsICJNNTEyIDQ4YzAtMTEuMS01LjctMjEuNC0xNS4yLTI3LjJzLTIxLjItNi40LTMxLjEtMS40TDM0OS41IDc3LjUgMTcwLjEgMTcuNmMtOC4xLTIuNy0xNi44LTIuMS0yNC40IDEuN2wtMTI4IDY0QzYuOCA4OC44IDAgOTkuOSAwIDExMkwwIDQ2NGMwIDExLjEgNS43IDIxLjQgMTUuMiAyNy4yczIxLjIgNi40IDMxLjEgMS40bDExNi4xLTU4LjEgMTc5LjQgNTkuOGM4LjEgMi43IDE2LjggMi4xIDI0LjQtMS43bDEyOC02NGMxMC44LTUuNCAxNy43LTE2LjUgMTcuNy0yOC42bDAtMzUyek0xOTIgMzc2LjlsMC0yODQuNSAxMjggNDIuNyAwIDI4NC41LTEyOC00Mi43eiJdCiAgICB9OwogICAgZmFVc2VyUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLXBsdXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjIzNCIsICJNMTM2IDEyOGExMjAgMTIwIDAgMSAxIDI0MCAwIDEyMCAxMjAgMCAxIDEgLTI0MCAwek00OCA0ODIuM0M0OCAzODMuOCAxMjcuOCAzMDQgMjI2LjMgMzA0bDU5LjQgMGM5OC41IDAgMTc4LjMgNzkuOCAxNzguMyAxNzguMyAwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0w3Ny43IDUxMkM2MS4zIDUxMiA0OCA0OTguNyA0OCA0ODIuM3pNNTQ0IDk2YzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDggNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMCAwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDgtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0OCAwIDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYVZlbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZlbnVzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTc5Ml0sICJmMjIxIiwgIk04MCAxNzZhMTEyIDExMiAwIDEgMSAyMjQgMCAxMTIgMTEyIDAgMSAxIC0yMjQgMHpNMjIzLjkgMzQ5LjFDMzA1LjkgMzM0LjEgMzY4IDI2Mi4zIDM2OCAxNzYgMzY4IDc4LjggMjg5LjIgMCAxOTIgMFMxNiA3OC44IDE2IDE3NmMwIDg2LjMgNjIuMSAxNTguMSAxNDQuMSAxNzMuMS0uMSAxLS4xIDEuOS0uMSAyLjlsMCA2NC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTY0YzAtMSAwLTEuOS0uMS0yLjl6Il0KICAgIH07CiAgICBmYURpYWdyYW1TdWNjZXNzb3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGlhZ3JhbS1zdWNjZXNzb3IiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTQ3YSIsICJNMjg5LjIgMTM3LjljMi41LTYgOC4zLTkuOSAxNC44LTkuOWw0MCAwIDAtMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTk4IDBjMS4zIDUuMSAyIDEwLjUgMiAxNmwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC05NiAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDI1NiAwYzM5LjggMCA3MiAzMi4yIDcyIDcybDAgMjQgNDAgMGM2LjUgMCAxMi4zIDMuOSAxNC44IDkuOXMxLjEgMTIuOS0zLjUgMTcuNGwtNjQgNjRjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwbC02NC02NGMtNC42LTQuNi01LjktMTEuNS0zLjUtMTcuNHpNMzg0IDQ4MEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NHpNMTYwIDE2MGwwLTY0LTk2IDAgMCA2NCA5NiAweiJdCiAgICB9OwogICAgZmFIZWFkU2lkZUNvdWdoU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhZC1zaWRlLWNvdWdoLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwNjIiLCAiTTUzNS0yNC45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOUw0MSA1MzcuMWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwyNS0yNSAwLTQ0Ny4yYzAtMTUgMTAuNS0yOC4zIDI1LjQtMjkuOCA3LjQtLjcgMTQuOS0xLjEgMjIuNi0xLjEgMTEyLjcgMCAyMDYgODMuMyAyMjEuNyAxOTEuNyAuNCAzIDEuNyA1LjkgMy42IDguM2wyLjIgMi42IDIyNy41LTIyNy41ek0xMzMuOCA1MTJMMjg4IDM1Ny44IDI4OCA0MTZjMCA1My00MyA5Ni05NiA5NmwtNTguMiAwek0xNzYgMjI0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMzM2IDQwYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptLTg4IDcyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bS02NCA0OGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0xMjggMGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0yNCA3MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bS04OC0yNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFEaWFncmFtUHJvamVjdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWFncmFtLXByb2plY3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsicHJvamVjdC1kaWFncmFtIl0sICJmNTQyIiwgIk0wIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNiAxMjggMCAwLTE2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNi0xMjggMCAwIDE2YzAgNy4zLTEuNyAxNC4zLTQuNiAyMC41bDY4LjYgOTEuNSA4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTk2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC03LjMgMS43LTE0LjMgNC42LTIwLjVMMTI4IDIyNCA0OCAyMjRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODB6Il0KICAgIH07CiAgICBmYVByb2plY3REaWFncmFtID0gZmFEaWFncmFtUHJvamVjdDsKICAgIGZhVGVybWluYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVybWluYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjEyMCIsICJNOS40IDExOC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTE2MCAxNjBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDE0Ni43IDI1NiA5LjQgMTE4LjZ6TTIyNCAzODRsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFIb3VzZUZpcmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtZmlyZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTBjIiwgIk00NDggMTkyYzE0LjEgLjQgMjMuOCAxMS40IDMyLjcgMjEuNyAyIDIuMyA0IDQuNiA2IDYuN2wxOSAxOS45IDEyLjItMTMuOGM1LjQtNi4xIDEzLjMtOC45IDIwLjktOC45IDcuMiAwIDE0LjMgMi42IDE5LjkgNy44IDE5LjcgMTguMyAzOS44IDQzLjIgNTUgNzAuNiAxNS4xIDI3LjIgMjYuMiA1OC4yIDI2LjIgODguMiAwIDg4LjctNzEuMyAxNTkuOC0xNjAgMTU5LjgtODkuNiAwLTE2MC03MS4zLTE2MC0xNTkuOCAwLTM3LjMgMTYtNzMuNCAzNi44LTEwNC41IDIwLjktMzEuMyA0Ny41LTU5IDcwLjktODAuMSA1LjctNS4yIDEzLjEtNy43IDIwLjMtNy41ek0yNjguNiA2LjVjMTIuMi05LjMgMjkuNy04LjcgNDEuMiAybDE0Ny41IDEzN2MtMTkuMi00LjMtNDAgLjUtNTUuNSAxNC40LTM2LjQgMzIuNi02Ny43IDY5LjgtOTAuMyAxMDYuNC0xMC4zIDE2LjYtMTkuNyAzNC45LTI2LjggNTMuN0wyNzIgMzIwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2IDY0LjYgMGM3LjMgMTcuMiAxNi44IDMzLjQgMjguMiA0OEwxNDQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDggMi40LTJ6TTQ4OS4zIDM0My43Yy01LjQtNC43LTEzLjEtNC43LTE4LjUgMC0xNy43IDE1LjQtNTQuNyA1MS45LTU0LjcgODguNCAwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0YzAtMzYuNS0zNy03My01NC43LTg4LjR6Il0KICAgIH07CiAgICBmYU1hc2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFzayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNmZhIiwgIk0yODggNjRDNjQgNjQgMCAxNjAgMCAyNzJTODAgNDQ4IDE3NiA0NDhsOC40IDBjMjQuMiAwIDQ2LjQtMTMuNyA1Ny4yLTM1LjRsMjMuMi00Ni4zYzQuNC04LjggMTMuMy0xNC4zIDIzLjItMTQuM3MxOC44IDUuNSAyMy4yIDE0LjNsMjMuMiA0Ni4zYzEwLjggMjEuNyAzMyAzNS40IDU3LjIgMzUuNGw4LjQgMGM5NiAwIDE3Ni02NCAxNzYtMTc2UzUxMiA2NCAyODggNjR6TTk2IDI1NmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6bTMyMC02NGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHoiXQogICAgfTsKICAgIGZhSHVycmljYW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImh1cnJpY2FuZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNzUxIiwgIk0wIDIwOEMwIDEwNC40IDc1LjcgMTguNSAxNzQuOSAyLjYgMTg0IDEuMiAxOTIgOC42IDE5MiAxNy45bDAgNjMuM2MwIDguNCA2LjUgMTUuMyAxNC43IDE2LjUgMTAwLjMgMTQuOSAxNzcuMyAxMDEuMyAxNzcuMyAyMDUuNyAwIDEwMy42LTc1LjcgMTg5LjUtMTc0LjkgMjA1LjQtOS4yIDEuNS0xNy4xLTUuOS0xNy4xLTE1LjJsMC02My4zQzE5MiA0MjEuOSAxODUuNSA0MTUgMTc3LjMgNDEzLjcgNzcgMzk4LjkgMCAzMTIuNCAwIDIwOHptMjg4IDQ4YTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHptLTk2LTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhRWFydGhBZnJpY2EgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWFydGgtYWZyaWNhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzU3LCAiZ2xvYmUtYWZyaWNhIl0sICJmNTdjIiwgIk00NDcuNiAxNzVjLTMxLjYtNzQuNi0xMDUuNS0xMjctMTkxLjYtMTI3LTIyLjEgMC00My40IDMuNS02My40IDkuOC0uNCAyLS42IDQuMS0uNiA2LjJsMCA3My40YzAgMTIuNSAxMC4xIDIyLjYgMjIuNiAyMi42IDYgMCAxMS44LTIuNCAxNi02LjZsMTYtMTZjNi02IDE0LjEtOS40IDIyLjYtOS40bDUuNSAwYzI4LjUgMCA0Mi44IDM0LjUgMjIuNiA1NC42LTYgNi0xNC4xIDkuNC0yMi42IDkuNGwtNjEuNSAwYy04LjUgMC0xNi42IDMuNC0yMi42IDkuNGwtMjEuMyAyMS4zYy02IDYtOS40IDE0LjEtOS40IDIyLjZsMCA0Mi43YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyLjcgMGM4LjUgMCAxNi42LTMuNCAyMi42LTkuNGwyOS4zLTI5LjNjNi02IDkuNC0xNC4xIDkuNC0yMi42bDAtMTguN2MwLTguOCA3LjItMTYgMTYtMTZzMTYtNy4yIDE2LTE2bDAtMzQuN2MwLTguNS0zLjQtMTYuNi05LjQtMjIuNmwtMTYtMTZjLTQuMi00LjItNi42LTEwLTYuNi0xNiAwLTEyLjUgMTAuMS0yMi42IDIyLjYtMjIuNmw0NSAwYzEyLjQgMCAyMi43LTcuMSAyOC0xN3pNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHoiXQogICAgfTsKICAgIGZhR2xvYmVBZnJpY2EgPSBmYUVhcnRoQWZyaWNhOwogICAgZmFUaHVtYnRhY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGh1bWJ0YWNrIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MjA0LCAxMjgzOTIsICJ0aHVtYi10YWNrIl0sICJmMDhkIiwgIk0zMiAzMkMzMiAxNC4zIDQ2LjMgMCA2NCAwTDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yOS41IDAgMTAuMyAxMzQuMWMzNy4xIDIxLjIgNjUuOCA1Ni40IDc4LjIgOTkuN2wzLjggMTMuNGMyLjggOS43IC44IDIwLTUuMiAyOC4xUzM2MiAzNTIgMzUyIDM1MkwzMiAzNTJjLTEwIDAtMTkuNS00LjctMjUuNS0xMi43cy04LTE4LjQtNS4yLTI4LjFMNSAyOTcuOGMxMi40LTQzLjMgNDEtNzguNSA3OC4yLTk5LjdMOTMuNSA2NCA2NCA2NEM0Ni4zIDY0IDMyIDQ5LjcgMzIgMzJ6TTE2MCA0MDBsNjQgMCAwIDExMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTExMnoiXQogICAgfTsKICAgIGZhVGh1bWJUYWNrID0gZmFUaHVtYnRhY2s7CiAgICBmYUhhbmRQb2ludERvd24yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnQtZG93biIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMGE3IiwgIk0zMiA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIwOC02NCAwIDAgMjA4ek0yMjQgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0em0tNjQgNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyem0xNjAtOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjR6bS05Ni04OGwwIC42YzkuNC01LjQgMjAuMy04LjYgMzItOC42IDEzLjIgMCAyNS40IDQgMzUuNiAxMC44IDguNy0yNC45IDMyLjUtNDIuOCA2MC40LTQyLjggMTEuNyAwIDIyLjYgMy4xIDMyIDguNmwwLTguNkMzODQgNzEuNiAzMTIuNCAwIDIyNCAwTDE2Mi4zIDBDMTE5LjggMCA3OS4xIDE2LjkgNDkuMSA0Ni45TDM3LjUgNTguNUMxMy41IDgyLjUgMCAxMTUuMSAwIDE0OWwwIDI3YzAgMzUuMyAyOC43IDY0IDY0IDY0bDg4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBzLTE3LjktNDAtNDAtNDBsLTU2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsNTYgMGMzOS44IDAgNzIgMzIuMiA3MiA3MnoiXQogICAgfTsKICAgIGZhRmFjZU1laEJsYW5rMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLW1laC1ibGFuayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU2NiwgIm1laC1ibGFuayJdLCAiZjVhNCIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMjA4LTQ4YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTEyOCAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYU1laEJsYW5rMiA9IGZhRmFjZU1laEJsYW5rMjsKICAgIGZhVGVtcGVyYXR1cmVFbXB0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW1wZXJhdHVyZS1lbXB0eSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWyJ0ZW1wZXJhdHVyZS0wIiwgInRoZXJtb21ldGVyLTAiLCAidGhlcm1vbWV0ZXItZW1wdHkiXSwgImYyY2IiLCAiTTY0IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFMxNiA0NDcuNSAxNiAzNjhjMC00Mi42IDE4LjUtODEgNDgtMTA3LjNMNjQgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NC02NCAyOC43LTY0IDY0IDI4LjcgNjQgNjQgNjR6Il0KICAgIH07CiAgICBmYVRlbXBlcmF0dXJlMCA9IGZhVGVtcGVyYXR1cmVFbXB0eTsKICAgIGZhVGhlcm1vbWV0ZXIwID0gZmFUZW1wZXJhdHVyZUVtcHR5OwogICAgZmFUaGVybW9tZXRlckVtcHR5ID0gZmFUZW1wZXJhdHVyZUVtcHR5OwogICAgZmFCb3JkZXJOb25lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvcmRlci1ub25lIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY4NTAiLCAiTTMyIDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMiAzMi0xNC4zIDMyLTMyLTE0LjMtMzItMzItMzJ6TTE2MCAzMmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6TTI4OCA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzIgMzItMTQuMyAzMi0zMi0xNC4zLTMyLTMyLTMyek0xNjAgNDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzIgMTQuMyAzMiAzMiAzMnpNMjg4IDMyYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHpNNDE2IDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyIDE0LjMgMzIgMzIgMzJ6bTAtMzg0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMzIgMzJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0ek00MTYgMzUyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMzIgMTYwYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHptMCAxOTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek00MTYgMTYwYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHoiXQogICAgfTsKICAgIGZhSGlnaGxpZ2h0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGlnaGxpZ2h0ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjU5MSIsICJNMzE1IDMxNUw0NzMuNCA5OS45IDQ0NC4xIDcwLjYgMjI5IDIyOSAzMTUgMzE1em0tMTg3IDVsMCAwIDAtNzEuN2MwLTE1LjMgNy4yLTI5LjYgMTkuNS0zOC42TDQyMC42IDguNEM0MjggMi45IDQzNyAwIDQ0Ni4yIDAgNDU3LjYgMCA0NjguNSA0LjUgNDc2LjYgMTIuNmw1NC44IDU0LjhjOC4xIDguMSAxMi42IDE5IDEyLjYgMzAuNSAwIDkuMi0yLjkgMTguMi04LjQgMjUuNkwzMzQuNCAzOTYuNWMtOSAxMi4zLTIzLjQgMTkuNS0zOC42IDE5LjVsLTcxLjcgMC0yNS40IDI1LjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC01MC43LTUwLjdjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zTDEyOCAzMjB6TTcgNDY2LjNsNTEuNy01MS43IDcwLjYgNzAuNi0xOS43IDE5LjdjLTQuNSA0LjUtMTAuNiA3LTE3IDdMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQuN2MwLTYuNCAyLjUtMTIuNSA3LTE3eiJdCiAgICB9OwogICAgZmFNb25leUJpbGxXYXZlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vbmV5LWJpbGwtd2F2ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTNhIiwgIk0wIDQxOS42TDAgMTA5LjVjMC0yMy4yIDI0LjEtMzguNiA0Ni4zLTMyIDg3LjcgMjYuMiAxNDkuNyA1LjUgMjEyLjEtMTUuMyA2NC41LTIxLjUgMTI5LjQtNDMuMSAyMjMuMy0xMy4xIDE4LjUgNS45IDMwLjMgMjMuOCAzMC4zIDQzLjNsMCAzMTAuMWMwIDIzLjItMjQuMSAzOC42LTQ2LjIgMzItODcuNy0yNi4yLTE0OS44LTUuNS0yMTIuMSAxNS4zLTY0LjUgMjEuNS0xMjkuNCA0My4xLTIyMy4zIDEzLjEtMTguNS01LjktMzAuMy0yMy44LTMwLjMtNDMuM3pNMzM2IDI1NmMwLTUzLTM1LjgtOTYtODAtOTZzLTgwIDQzLTgwIDk2IDM1LjggOTYgODAgOTYgODAtNDMgODAtOTZ6TTEyMCA0MTMuNmM0LjQgMCA3LjktMy44IDcuMi04LjEtNC42LTI3LjgtMjctNDkuNS01NS4yLTUzLTQuNC0uNS04IDMuMS04IDcuNWwwIDM5LjljMCAzLjYgMi40IDYuOCA2IDcuNyAxNy45IDQuMiAzNC4zIDYuMSA1MCA2LjF6bTMxOC41LTUxLjFjNSAuOCA5LjUtMyA5LjUtOGwwLTQyLjZjMC00LjQtMy42LTguMS04LTcuNS0yNS4yIDMuMS00NS45IDIwLjktNTMuMiA0NC42LTEuNCA0LjcgMi4zIDkuMSA3LjIgOS4yIDE0LjIgLjQgMjkgMS43IDQ0LjQgNC4zek00NDggMTUybDAtMzkuOWMwLTMuNi0yLjUtNi44LTYtNy43LTE3LjktNC4yLTM0LjMtNi4xLTUwLTYuMS00LjQgMC03LjkgMy44LTcuMiA4LjEgNC42IDI3LjggMjcgNDkuNSA1NS4yIDUzIDQuNCAuNSA4LTMuMSA4LTcuNXpNMTI1LjIgMTYyLjljMS40LTQuNy0yLjMtOS4xLTcuMi05LjItMTQuMi0uNC0yOS0xLjctNDQuNC00LjMtNS0uOC05LjUgMy05LjUgOEw2NCAyMDBjMCA0LjQgMy42IDguMSA4IDcuNSAyNS4yLTMuMSA0NS45LTIwLjkgNTMuMi00NC42eiJdCiAgICB9OwogICAgZmFUb2lsZXRQYXBlclNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvaWxldC1wYXBlci1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMDcyIiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC05NC41LTk0LjVjNDAuMi0yMyA2OS41LTk2LjkgNjkuNS0xODQuNiAwLTEwNi00My0xOTItOTYtMTkycy05NiA4Ni05NiAxOTJjMCAyNC4xIDIuMiA0Ny4yIDYuMyA2OC40TDMwNCAyMzguMiAzMDQgMjI0YzAtNTguOSAxMS44LTExNC41IDMzLjItMTU3LjIgNS45LTExLjcgMTMuMS0yMy43IDIxLjktMzQuOEwxMjggMzJjLTguMyAwLTE2LjQgMi4xLTI0LjEgNi4xbC02My02M3pNMzIgMjI0bDAgMjY0YzAgMzAuOSAyNS4xIDU2IDU2IDU2bDE2MCAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2bDAtMTE0LjItMjU2LTI1NkMzNy45IDE0OC4yIDMyIDE4NC43IDMyIDIyNHptNDE2IDY0Yy0xNy43IDAtMzItMjguNy0zMi02NHMxNC4zLTY0IDMyLTY0IDMyIDI4LjcgMzIgNjQtMTQuMyA2NC0zMiA2NHoiXQogICAgfTsKICAgIGZhRmlsZVNoaWVsZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXNoaWVsZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGYwIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIwMS4yIDBDMjYxIDQ2OS40IDI0MCA0MTQuNSAyNDAgMzU2LjRsMC0zMS4xYzAtMzQuNCAyMi02NSA1NC43LTc1LjlsMTEyLTM3LjNjMy4xLTEgNi4yLTEuOCA5LjMtMi41bDAtMzkuMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnptODcuOCAzMTIuNWwtMTMuMyA2LjMgMC0xODguMSA5NiAzMiAwIDE5LjZjMCA1NS44LTMyLjIgMTA2LjUtODIuNyAxMzAuM3pNNDIxLjkgMjU5LjVsLTExMiAzNy4zYy0xMy4xIDQuNC0yMS45IDE2LjYtMjEuOSAzMC40bDAgMzEuMWMwIDc0LjQgNDMgMTQyLjEgMTEwLjIgMTczLjdsMTguNSA4LjdjNC44IDIuMiAxMCAzLjQgMTUuMiAzLjRzMTAuNS0xLjIgMTUuMi0zLjRsMTguNS04LjdDNTMzIDUwMC4zIDU3NiA0MzIuNiA1NzYgMzU4LjJsMC0zMS4xYzAtMTMuOC04LjgtMjYtMjEuOS0zMC40bC0xMTItMzcuM2MtNi42LTIuMi0xMy43LTIuMi0yMC4yIDB6Il0KICAgIH07CiAgICBmYVRleHRIZWlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGV4dC1oZWlnaHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjAzNCIsICJNNDAgMzJDMTcuOSAzMiAwIDQ5LjkgMCA3MmwwIDU2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiA2NCAwIDAgMzIwLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0zMjAgNjQgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC01NmMwLTIyLjEtMTcuOS00MC00MC00MEw0MCAzMnpNNDM4LjYgMzYxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC05LjQgOS40IDAtMjI5LjUgOS40IDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC02NC02NGMtNi02LTE0LjEtOS40LTIyLjYtOS40cy0xNi42IDMuNC0yMi42IDkuNGwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsOS40LTkuNCAwIDIyOS41LTkuNC05LjR6Il0KICAgIH07CiAgICBmYUZhY2VHcmluVG9uZ3VlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tdG9uZ3VlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTM5LCAiZ3Jpbi10b25ndWUiXSwgImY1ODkiLCAiTTAgMjU2YzAgMTA0LjQgNjIuNSAxOTQuMiAxNTIuMiAyMzQuMS01LjMtMTMtOC4yLTI3LjItOC4yLTQyLjFsMC02MS43Yy0xNi45LTE2LjUtMzAuMS0zNi43LTM4LjMtNTkuMy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjFjMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTguMyAyMi42LTIxLjUgNDIuOC0zOC4zIDU5LjNsMCA2MS43YzAgMTQuOS0yLjkgMjkuMS04LjIgNDIuMSA4OS43LTM5LjggMTUyLjItMTI5LjYgMTUyLjItMjM0LjEgMC0xNDEuNC0xMTQuNi0yNTYtMjU2LTI1NlMwIDExNC42IDAgMjU2em0xNzYtODBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTYgMjQwbDAtNDUuNGMwLTE0LjctMTEuOS0yNi42LTI2LjYtMjYuNmwtMiAwYy0xMS4zIDAtMjEuMSA3LjktMjMuNiAxOC45LTIuOCAxMi42LTIwLjggMTIuNi0yMy42IDAtMi41LTExLjEtMTIuMy0xOC45LTIzLjYtMTguOWwtMiAwYy0xNC43IDAtMjYuNiAxMS45LTI2LjYgMjYuNmwwIDQ1LjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHoiXQogICAgfTsKICAgIGZhR3JpblRvbmd1ZTIgPSBmYUZhY2VHcmluVG9uZ3VlMjsKICAgIGZhRmlsZVNpZ25hdHVyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXNpZ25hdHVyZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNTczIiwgIk02NC4xIDY0YzAtMzUuMyAyOC43LTY0IDY0LTY0TDI3Ny42IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMNDI5LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM2wwIDk3LjUtMTMyIDEzMi00Mi4xIDAtMTYuMS01My42Yy00LjctMTUuNy0xOS4xLTI2LjQtMzUuNS0yNi40LTExLjMgMC0yMS45IDUuMS0yOC45IDEzLjlMMTMzLjMgNDA5Yy04LjMgMTAuMy02LjYgMjUuNSAzLjcgMzMuN3MyNS41IDYuNiAzMy43LTMuOGw0Ny4xLTU4LjggMTUuMiA1MC43YzMgMTAuMiAxMi40IDE3LjEgMjMgMTcuMWwzMS41IDBjLS45IDMuMS0xLjcgNi4zLTIuMyA5LjVsLTEwLjkgNTQuNS0xNDYuMiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTM4NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRsOTMuNSAwLTExNy41LTExNy41em02MC4yIDQwOC40YzIuNS0xMi40IDguNi0yMy44IDE3LjUtMzIuN2wxMTguOS0xMTguOSA4MCA4MC0xMTguOSAxMTguOWMtOC45IDguOS0yMC4zIDE1LTMyLjcgMTcuNWwtNTkuNiAxMS45Yy0uOSAuMi0xLjkgLjMtMi45IC4zLTggMC0xNC42LTYuNS0xNC42LTE0LjYgMC0xIC4xLTEuOSAuMy0yLjlsMTEuOS01OS42em0yNjcuOC0xMjNsLTI4LjggMjguOC04MC04MCAyOC44LTI4LjhjMjIuMS0yMi4xIDU3LjktMjIuMSA4MCAwczIyLjEgNTcuOSAwIDgweiJdCiAgICB9OwogICAgZmFCdWlsZGluZ1doZWF0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLXdoZWF0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZGIiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjQ5LjMgMGMtNi0xNC44LTkuMy0zMS05LjMtNDggMC0xNy43IDcuMi0zMy43IDE4LjgtNDUuMy0xMS45LTE5LjQtMTguOC00Mi4zLTE4LjgtNjYuNyAwLTE3LjcgNy4yLTMzLjcgMTguOC00NS4zLTExLjktMTkuNC0xOC44LTQyLjMtMTguOC02Ni43IDAtMjUuMiAxNC41LTQ2LjkgMzUuNi01Ny40LTIuNC03LjEtMy42LTE0LjctMy42LTIyLjZsMC0zMkMzNjggOTYuNyAzODggNzAuMSA0MTUuOSA2MC4xIDQxMy45IDI2LjYgMzg2IDAgMzUyIDBMOTYgMHpNMjA4IDM1MmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgODAtOTYgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xMjggMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI3MiA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xMjggMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTE0NC0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em0zNTIgMGwtMTYgMGMtNDQuMiAwLTgwIDM1LjgtODAgODAgMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjNDQuMiAwIDgwLTM1LjggODAtODAgMC04LjgtNy4yLTE2LTE2LTE2em0xNiAxMjhjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYy00NC4yIDAtODAgMzUuOC04MCA4MCAwIDguOCA3LjIgMTYgMTYgMTZsMTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MHptMCAxMTJjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYy00NC4yIDAtODAgMzUuOC04MCA4MCAwIDguOCA3LjIgMTYgMTYgMTZsMTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MHpNNDk2IDUyOGMwLTQ0LjItMzUuOC04MC04MC04MGwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2IDAgNDQuMiAzNS44IDgwIDgwIDgwbDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2em0tMTYtOTZjOC44IDAgMTYtNy4yIDE2LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwbC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTYgMCA0NC4yIDM1LjggODAgODAgODBsMTYgMHptMTYtMTI4YzAtNDQuMi0zNS44LTgwLTgwLTgwbC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTYgMCA0NC4yIDM1LjggODAgODAgODBsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZ6TTUxMiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEwNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHptOTYgNjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzJ6TTQ0MCAxMDRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMyYzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFQbHVnQ2lyY2xlTWludXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1Zy1jaXJjbGUtbWludXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU1ZSIsICJNMTkyLTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgMTI4IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTYgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDQ4LjdjLTk4LjYgOC4xLTE3NiA5MC43LTE3NiAxOTEuMyAwIDI3LjMgNS43IDUzLjMgMTYgNzYuOWwwIDMuMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY2LjdDMTY1LjIgMzk4LjEgOTYgMzE5LjEgOTYgMjI0bDAtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzc4LjMgOTYgOTYgOTZsNjQgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zNTIgNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIyNCAwYzAtOC44LTcuMi0xNi0xNi0xNmwtMTI4IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMTI4IDBjOC44IDAgMTYtNy4yIDE2LTE2eiJdCiAgICB9OwogICAgZmFGdXRib2wyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZ1dGJvbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk5MTcsICJmdXRib2wtYmFsbCIsICJzb2NjZXItYmFsbCJdLCAiZjFlMyIsICJNNDE3LjMgMzYwLjFsLTcxLjYtNC44Yy01LjItLjMtMTAuMyAxLjEtMTQuNSA0LjJzLTcuMiA3LjQtOC40IDEyLjVsLTE3LjYgNjkuNkMyODkuNSA0NDUuOCAyNzMgNDQ4IDI1NiA0NDhzLTMzLjUtMi4yLTQ5LjItNi40TDE4OS4yIDM3MmMtMS4zLTUtNC4zLTkuNC04LjQtMTIuNXMtOS4zLTQuNS0xNC41LTQuMmwtNzEuNiA0LjhjLTE3LjYtMjcuMi0yOC41LTU5LjItMzAuNC05My42TDEyNSAyMjguM2M0LjQtMi44IDcuNi03IDkuMi0xMS45czEuNC0xMC4yLS41LTE1bC0yNi43LTY2LjZDMTI4IDEwOS4yIDE1NS4zIDg5IDE4Ni43IDc2LjlsNTUuMiA0NmM0IDMuMyA5IDUuMSAxNC4xIDUuMXMxMC4yLTEuOCAxNC4xLTUuMWw1NS4yLTQ2YzMxLjMgMTIuMSA1OC43IDMyLjMgNzkuNiA1Ny45bC0yNi43IDY2LjZjLTEuOSA0LjgtMi4xIDEwLjEtLjUgMTVzNC45IDkuMSA5LjIgMTEuOWw2MC43IDM4LjJjLTEuOSAzNC40LTEyLjggNjYuNC0zMC40IDkzLjZ6TTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0xNC4xLTMyNS43Yy04LjQtNi4xLTE5LjgtNi4xLTI4LjIgMEwxOTQgMjIxYy04LjQgNi4xLTExLjkgMTYuOS04LjcgMjYuOGwxOC4zIDU2LjNjMy4yIDkuOSAxMi40IDE2LjYgMjIuOCAxNi42bDU5LjIgMGMxMC40IDAgMTkuNi02LjcgMjIuOC0xNi42bDE4LjMtNTYuM2MzLjItOS45LS4zLTIwLjctOC43LTI2LjhsLTQ3LjktMzQuOHoiXQogICAgfTsKICAgIGZhRnV0Ym9sQmFsbDIgPSBmYUZ1dGJvbDI7CiAgICBmYVNvY2NlckJhbGwyID0gZmFGdXRib2wyOwogICAgZmFDaXJjbGVQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1wbHVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInBsdXMtY2lyY2xlIl0sICJmMDU1IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjMyIDM0NGwwLTY0LTY0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNjQgMCAwLTY0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA2NCA2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC02NCAwIDAgNjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYVBsdXNDaXJjbGUgPSBmYUNpcmNsZVBsdXM7CiAgICBmYUJyYXppbGlhblJlYWxTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyYXppbGlhbi1yZWFsLXNpZ24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTQ2YyIsICJNNDAwIDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNDguOSAwYy0yNiAwLTQ3LjEgMjEuMS00Ny4xIDQ3LjEgMCAyMi41IDE1LjkgNDEuOCAzNy45IDQ2LjJsMzIuOCA2LjZjNTEuOSAxMC40IDg5LjMgNTYgODkuMyAxMDkgMCA1MC42LTMzLjggOTMuMy04MCAxMDYuN2wwIDIwLjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0LjkgMGMyNiAwIDQ3LjEtMjEuMSA0Ny4xLTQ3LjEgMC0yMi41LTE1LjktNDEuOC0zNy45LTQ2LjJsLTMyLjgtNi42Yy01MS45LTEwLjQtODkuMy01Ni04OS4zLTEwOSAwLTUwLjYgMzMuOC05My4yIDgwLTEwNi43TDM2OCA0OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmw4MCAwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgNTQuMy0zMCAxMDEuNS03NC40IDEyNi4xbDQxIDEzNi43YzUuMSAxNi45LTQuNSAzNC44LTIxLjUgMzkuOHMtMzQuOC00LjUtMzkuOC0yMS41TDEyMC4xIDMxOS44Yy0yLjcgLjEtNS40IC4yLTguMSAuMmwtNDggMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ2NS43IDAgNDQ4TDAgNjR6TTY0IDI1Nmw0OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwbC00OCAwIDAgMTYweiJdCiAgICB9OwogICAgZmFTdGFyQW5kQ3Jlc2NlbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Rhci1hbmQtY3Jlc2NlbnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5NzcwXSwgImY2OTkiLCAiTTAgMjU2YzAtMTQxLjQgMTE0LjYtMjU2IDI1Ni0yNTYgMzMgMCA2NC42IDYuMyA5My42IDE3LjcgNy40IDIuOSAxMS41IDEwLjcgOS44IDE4LjRzLTguOCAxMy0xNi43IDEyLjRjLTQuOC0uMy05LjctLjUtMTQuNi0uNS0xMTQuOSAwLTIwOCA5My4xLTIwOCAyMDhzOTMuMSAyMDggMjA4IDIwOGM0LjkgMCA5LjgtLjIgMTQuNi0uNSA3LjktLjUgMTUgNC43IDE2LjcgMTIuNHMtMi40IDE1LjUtOS44IDE4LjRDMzIwLjYgNTA1LjcgMjg5IDUxMiAyNTYgNTEyIDExNC42IDUxMiAwIDM5Ny40IDAgMjU2ek0zNzUuNCAxMzcuNGMzLjUtNy4xIDEzLjctNy4xIDE3LjIgMGwzMS41IDYzLjhjMS40IDIuOCA0LjEgNC44IDcuMiA1LjNsNzAuNCAxMC4yYzcuOSAxLjEgMTEgMTAuOCA1LjMgMTYuNGwtNTAuOSA0OS42Yy0yLjMgMi4yLTMuMyA1LjQtMi44IDguNWwxMiA3MC4xYzEuMyA3LjgtNi45IDEzLjgtMTMuOSAxMC4xbC02My0zMy4xYy0yLjgtMS41LTYuMS0xLjUtOC45IDBsLTYzIDMzLjFjLTcgMy43LTE1LjMtMi4zLTEzLjktMTAuMWwxMi03MC4xYy41LTMuMS0uNS02LjMtMi44LTguNUwyNjEgMjMzLjFjLTUuNy01LjYtMi42LTE1LjIgNS4zLTE2LjRsNzAuNC0xMC4yYzMuMS0uNSA1LjgtMi40IDcuMi01LjNsMzEuNS02My44eiJdCiAgICB9OwogICAgZmFGYWNlU3VycHJpc2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Utc3VycHJpc2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTgsICJzdXJwcmlzZSJdLCAiZjVjMiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE3NiAxNzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptLTQ4IDgwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdCiAgICB9OwogICAgZmFTdXJwcmlzZTIgPSBmYUZhY2VTdXJwcmlzZTI7CiAgICBmYUhvc3BpdGFsVXNlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3NwaXRhbC11c2VyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY4MGQiLCAiTTY0IDY0QzY0IDI4LjcgOTIuNyAwIDEyOCAwTDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTIxLjNjLTQ2LjkgMTktODAgNjUtODAgMTE4LjcgMCAyNy43IDguOCA1My40IDIzLjggNzQuNC01MS41IDIxLTg3LjggNzEuNi04Ny44IDEzMC43IDAgMSAwIDEuOSAwIDIuOWwtMTc2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDY0IDY0ek0yMDggNDAwbDAgNjQgNTMuNCAwYzcuMi0yOS40IDIxLjMtNTYuMSA0MC40LTc4LjMtNi4xLTE5LjUtMjQuMy0zMy43LTQ1LjgtMzMuNy0yNi41IDAtNDggMjEuNS00OCA0OHpNMjQ4IDg4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMi0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMCAwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyIDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwIDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwek00MTYgMzA0YTgwIDgwIDAgMSAxIDE2MCAwIDgwIDgwIDAgMSAxIC0xNjAgMHpNMzUyIDUxMmMwLTUzIDQzLTk2IDk2LTk2bDk2IDBjNTMgMCA5NiA0MyA5NiA5NiAwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjI0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFBcnJvd0Rvd25VcExvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctZG93bi11cC1sb2NrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0YjAiLCAiTTI2Mi42IDQyMi42bC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDI1LjQgMjUuNCAwLTExNC43LTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMjU2IDAgMC0xMTQuNy0yNS40IDI1LjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDgwLTgwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDgwIDgwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC0yNS40LTI1LjQgMCA5NC44Yy0yNS4zIDIwLjMtNDIuOCA1MC4xLTQ3IDgzLjlsLTE0NSAwIDAgMTE0LjcgMjUuNC0yNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6TTE5MiAzMmwwIDE0NC02NCAwIDAtMTQ0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTQ5NiAzMDQuMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTM1MiA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il0KICAgIH07CiAgICBmYUZvbGRlcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9sZGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTkzLCAxMjg0NDcsIDYxNzE2LCAiZm9sZGVyLWJsYW5rIl0sICJmMDdiIiwgIk02NCA0NDhsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNDBjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjk4LjcgODBjLTYuOSAwLTEzLjctMi4yLTE5LjItNi40TDI0MS4xIDQ0LjhDMjMwIDM2LjUgMjE2LjUgMzIgMjAyLjcgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NHoiXQogICAgfTsKICAgIGZhRm9sZGVyQmxhbmsyID0gZmFGb2xkZXIyOwogICAgZmFIb2xseUJlcnJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvbGx5LWJlcnJ5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3YWEiLCAiTTI1Ni4yIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptLTgwIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMjc3IDM4My44YzEgLjEgMi4xIC4yIDMuMiAuMiAzOS44IDAgNzIgMzIuMiA3MiA3MmwwIDIyLjdjMCAxNi40IDE2IDI3LjkgMzEuNiAyMi44bDEyLjgtNC4zYzE4LTYgMzcuMy02LjUgNTUuNi0xLjVsMTkuNCA1LjNjMTcuOSA0LjkgMzQuNC0xMS42IDI5LjUtMjkuNUw0OTUuOSA0NTJjLTUtMTguMy00LjQtMzcuNiAxLjUtNTUuNmw0LjMtMTIuOGM1LjItMTUuNS02LjQtMzEuNi0yMi44LTMxLjYtMzQuNiAwLTYyLjctMjguMS02Mi43LTYyLjdsMC0zMmMwLTE2LjQtMTYtMjcuOS0zMS42LTIyLjhsLTEyLjggNC4zYy0xOCA2LTM3LjMgNi41LTU1LjYgMS41bC0yOS42LTguMWMtMi45LS44LTUuOS0xLTguNy0uNyA0LjIgOS43IDUuOCAyMC44IDMuNyAzMi4zbC02LjMgMzQuOGMtMS41IDguNC0xLjQgMTcgLjUgMjUuM2w1LjMgMjMuOWMyLjggMTIuNyAxLjEgMjUuMi00IDM1Ljl6TTEyNy44IDIzNC41Yy0xNS41LTUuMi0zMS42IDYuNC0zMS42IDIyLjhsMCAzMmMwIDM0LjYtMjguMSA2Mi43LTYyLjcgNjIuNy0xNi40IDAtMjcuOSAxNi0yMi44IDMxLjZMMTUgMzk2LjRjNiAxOCA2LjUgMzcuMyAxLjUgNTUuNmwtNS4zIDE5LjRDNi40IDQ4OS40IDIyLjggNTA1LjggNDAuNyA1MDFsMTkuNC01LjNjMTguMy01IDM3LjYtNC41IDU1LjYgMS41bDEyLjggNC4zYzE1LjUgNS4yIDMxLjYtNi40IDMxLjYtMjIuOGwwLTMyYzAtMzQuNiAyOC4xLTYyLjcgNjIuNy02Mi43IDE2LjQgMCAyNy45LTE2IDIyLjgtMzEuNmwtNC4zLTEyLjhjLTYtMTgtNi41LTM3LjMtMS41LTU1LjZsNS4zLTE5LjRjNC45LTE3LjktMTEuNi0zNC40LTI5LjUtMjkuNWwtMTkuNCA1LjNjLTE4LjMgNS0zNy42IDQuNC01NS42LTEuNWwtMTIuOC00LjN6TTM4NC4yIDE0NGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAweiJdCiAgICB9OwogICAgZmFWZW51c0RvdWJsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2ZW51cy1kb3VibGUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFs5ODkwXSwgImYyMjYiLCAiTTE5MiAyODhhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0ek0zNjggMTc2YzAgODYuMy02Mi4xIDE1OC4xLTE0NC4xIDE3My4xIC4xIDEgLjEgMS45IC4xIDIuOWwwIDY0IDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTY0YzAtMSAwLTEuOSAuMS0yLjktODItMTUtMTQ0LjEtODYuOC0xNDQuMS0xNzMuMSAwLTk3LjIgNzguOC0xNzYgMTc2LTE3NlMzNjggNzguOCAzNjggMTc2ek0zNTcuNSAzMjdjMTQuNC0xNS44IDI2LjYtMzMuNyAzNi4xLTUzLjEgMTYuMSA5IDM0LjcgMTQuMSA1NC41IDE0LjEgNjEuOSAwIDExMi01MC4xIDExMi0xMTJTNTA5LjkgNjQgNDQ4IDY0Yy0xOS44IDAtMzguMyA1LjEtNTQuNSAxNC4xLTkuNS0xOS40LTIxLjYtMzcuMy0zNi4xLTUzLjEgMjYuNC0xNS45IDU3LjQtMjUgOTAuNS0yNSA5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NiAwIDg2LjMtNjIuMSAxNTguMS0xNDQuMSAxNzMuMSAuMSAuOSAuMSAxLjkgLjEgMi45bDAgNjQgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwIDAtNjRjMC0xIDAtMS45IC4xLTIuOS0yMS4xLTMuOS00MC45LTExLjUtNTguNi0yMi4yeiJdCiAgICB9OwogICAgZmFDbGlwYm9hcmRRdWVzdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQtcXVlc3Rpb24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTRlMyIsICJNMzExLjQgMzJsOC42IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzNTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDguNiAwQzgzLjYgMTIuOSAxMDQuMyAwIDEyOCAwTDI1NiAwYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMnpNMjQ4IDExMmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwxMzYgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDB6TTE5MiAyNDhjMTYuMSAwIDI5LjIgMTMuMSAyOS4yIDI5LjIgMCA4LjctMy4xIDEzLjktNi45IDE3LjctNC41IDQuNC0xMC43IDcuNS0xNi44IDkuNS0xNC45IDUtMjkuNSAxOS4zLTI5LjUgMzkuNSAwIDEzLjMgMTAuNyAyNCAyNCAyNCAxMS41IDAgMjEuMi04LjEgMjMuNS0xOSAxOS4yLTcuMSA1My43LTI2LjMgNTMuNy03MS44IDAtNDIuNi0zNC42LTc3LjItNzcuMi03Ny4ycy03Ny4yIDM0LjYtNzcuMiA3Ny4yYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xNi4xIDEzLjEtMjkuMiAyOS4yLTI5LjJ6bTI4IDE2OGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOCAxMi41IDI4IDI4IDI4IDI4LTEyLjUgMjgtMjh6Il0KICAgIH07CiAgICBmYUhvdGRvZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3Rkb2ciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3ODldLCAiZjgwZiIsICJNMjg4IDBjLTIwLjUgMC00MC4xIDguMS01NC42IDIyLjZMMjIuNiAyMzMuNEM4LjEgMjQ3LjkgMCAyNjcuNSAwIDI4OCAwIDMwMC4yIDIuOSAzMTIuMSA4LjIgMzIyLjdMMzIyLjcgOC4yQzMxMi4xIDIuOSAzMDAuMiAwIDI4OCAwek0yMjQgNTEyYzIwLjUgMCA0MC4xLTguMSA1NC42LTIyLjZMNDg5LjQgMjc4LjZjMTQuNS0xNC41IDIyLjYtMzQuMSAyMi42LTU0LjYgMC0xMi4yLTIuOS0yNC4xLTguMi0zNC43TDE4OS4zIDUwMy44YzEwLjcgNS40IDIyLjYgOC4yIDM0LjcgOC4yek00NTYuNiAxNjguNmMzMS4yLTMxLjIgMzEuMi04MS45IDAtMTEzLjFzLTgxLjktMzEuMi0xMTMuMSAwbC0yODggMjg4Yy0zMS4yIDMxLjItMzEuMiA4MS45IDAgMTEzLjFzODEuOSAzMS4yIDExMy4xIDBsMjg4LTI4OHoiXQogICAgfTsKICAgIGZhQXJyb3dVcEZyb21CcmFja2V0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLWZyb20tYnJhY2tldCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMDlhIiwgIk0yNDYuNiA5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE5MiAxMDkuMyAxOTIgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yMTAuNyA3My40IDczLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOHpNNjQgMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgMzM0LjMgMCAzNTJsMCA2NGMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NHoiXQogICAgfTsKICAgIGZhTWljcm9zY29wZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtaWNyb3Njb3BlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzAwXSwgImY2MTAiLCAiTTE3NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDIwOGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNjQgMzIgMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOFMzOTAuNyA0NDggMzIwIDQ0OEwzMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2LjkgMGMzMC40LTM0IDQ4LjktNzguOCA0OC45LTEyOCAwLTEwNi04Ni0xOTItMTkyLTE5MmwtMzIgMCAwLTgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDE3NiAwek0xMjAgMzUyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNzYgMHoiXQogICAgfTsKICAgIGZhQ2xvdWQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTcyOV0sICJmMGMyIiwgIk0wIDMzNmMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NGwzMDQgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOCAwLTUxLjYtMzAuNS05Ni4xLTc0LjUtMTE2LjMgNi43LTEzLjEgMTAuNS0yOCAxMC41LTQzLjcgMC01My00My05Ni05Ni05Ni0xNy43IDAtMzQuMiA0LjgtNDguNCAxMy4xLTI0LjEtNDUuOC03Mi4yLTc3LjEtMTI3LjYtNzcuMS03OS41IDAtMTQ0IDY0LjUtMTQ0IDE0NCAwIDggLjcgMTUuOSAxLjkgMjMuNS01Ni45IDE5LjItOTcuOSA3My4xLTk3LjkgMTM2LjV6Il0KICAgIH07CiAgICBmYUJhc2ViYWxsQmF0QmFsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXNlYmFsbC1iYXQtYmFsbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNDMyIiwgIk00NjQuMSA1NDRhODAgODAgMCAxIDEgMC0xNjAgODAgODAgMCAxIDEgMCAxNjB6bTguNC01NzZjMTUuMSAwIDI5LjcgNS44IDQwLjcgMTYuMmw0Ny4yIDQ0LjhjMTIuNiAxMiAxOS4xIDI5IDE3LjUgNDYuMy0xLjIgMTMuMy03IDI1LjgtMTYuNSAzNS4yTDM2My4xIDMwOWMtNy4zIDcuMy0xNS43IDEzLjQtMjUgMThMMjA2IDM5M2MtOS4yIDQuNi0xNy43IDEwLjctMjUgMThsLTkyIDkyIDEuNyAxLjhjNy43IDkuNCA3LjEgMjMuMy0xLjcgMzIuMXMtMjIuNyA5LjMtMzIuMSAxLjdsLTEuOC0xLjctNDgtNDgtMS43LTEuOGMtNy43LTkuNC03LjEtMjMuMyAxLjctMzIuMXMyMi43LTkuMyAzMi4xLTEuN2wxLjggMS43IDkyLTkyYzcuMy03LjMgMTMuNC0xNS43IDE4LTI1bDY2LjEtMTMyLjFjNC42LTkuMiAxMC43LTE3LjcgMTgtMjVMNDMwLjgtMTQuN0M0NDEuOS0yNS44IDQ1Ni45LTMyIDQ3Mi41LTMyeiJdCiAgICB9OwogICAgZmFDYXJSZWFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhci1yZWFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNhci1hbHQiXSwgImY1ZGUiLCAiTTE2NS40IDk2bDE4MS4yIDBjMTMuNiAwIDI1LjcgOC42IDMwLjIgMjEuNGwyNi4xIDc0LjYtMjkzLjggMCAyNi4xLTc0LjZjNC41LTEyLjggMTYuNi0yMS40IDMwLjItMjEuNHptLTkwLjYgLjNMMzkuNiAxOTYuOEMxNi40IDIwNi40IDAgMjI5LjMgMCAyNTZsMCA5NmMwIDIzLjcgMTIuOSA0NC40IDMyIDU1LjRMMzIgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMiAyNTYgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC00MC42YzE5LjEtMTEuMSAzMi0zMS43IDMyLTU1LjRsMC05NmMwLTI2LjctMTYuNC00OS42LTM5LjYtNTkuMkw0MzcuMiA5Ni4zQzQyMy43IDU3LjggMzg3LjQgMzIgMzQ2LjYgMzJMMTY1LjQgMzJjLTQwLjggMC03Ny4xIDI1LjgtOTAuNiA2NC4zek0yMDggMjg4bDk2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC05NiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTQ4IDI4MGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwzMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0zMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMzYwLTI0bDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTMyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUNhckFsdCA9IGZhQ2FyUmVhcjsKICAgIGZhVGh1bWJ0YWNrU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGh1bWJ0YWNrLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInRodW1iLXRhY2stc2xhc2giXSwgImU2OGYiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDE3LjggMzUyIDQ0OCAzNTJjMTAgMCAxOS41LTQuNyAyNS41LTEyLjdzOC0xOC40IDUuMi0yOC4xTDQ3NSAyOTcuOGMtMTIuNC00My4zLTQxLTc4LjUtNzguMi05OS43TDM4Ni41IDY0IDQxNiA2NGMxNy43IDAgMzItMTQuMyAzMi0zMlM0MzMuNyAwIDQxNiAwTDE2MCAwYy03LjQgMC0xNC4xIDIuNS0xOS41IDYuNkwxOTAuMSA1Ni4zIDE4NS4zIDExOS40IDQxLTI0Ljl6TTI4Mi4yIDM1MkwxNDkuNyAyMTkuNmMtMjIuNyAyMC41LTM5LjggNDcuNC00OC43IDc4LjNsLTMuOCAxMy40Yy0yLjggOS43LS44IDIwIDUuMiAyOC4xUzExOCAzNTIgMTI4IDM1MmwxNTQuMiAwek0yNTYgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMTItNjQgMCAwIDExMnoiXQogICAgfTsKICAgIGZhVGh1bWJUYWNrU2xhc2ggPSBmYVRodW1idGFja1NsYXNoOwogICAgZmFQbHVzTWludXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1cy1taW51cyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNDNjIiwgIk0yMjQgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxMjgtMTI4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTI4IDAgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTI4IDAgMC0xMjh6TTAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6Il0KICAgIH07CiAgICBmYUhvdXNlQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MDkiLCAiTTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMSAwLTI4OCAxNDQgMTQ0IDAgMSAxIDAgMjg4ek0yNjguNiA2LjVjMTIuMi05LjMgMjkuNy04LjcgNDEuMiAybDIxNy42IDIwMmMtMTAuMi0xLjctMjAuNy0yLjYtMzEuMy0yLjYtNzguNiAwLTE0Ni4xIDQ3LjItMTc1LjggMTE0LjgtNS4xLTEuOC0xMC41LTIuOC0xNi4yLTIuOGwtMzIgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NiA5MSAwYzYuMSAxNy4zIDE0LjYgMzMuNCAyNS4xIDQ4TDE0NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOCAyLjQtMnpNNTUzLjQgMzM5LjFjLTcuMS01LjItMTcuMS0zLjYtMjIuMyAzLjVsLTUzIDcyLjgtMjYuNy0yNi44Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMC02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmw0MCA0MGMzLjMgMy4zIDcuOSA1IDEyLjYgNC43czguOS0yLjggMTEuNy02LjZsNjQtODhjNS4yLTcuMSAzLjYtMTcuMS0zLjUtMjIuM3oiXQogICAgfTsKICAgIGZhQ2FsZW5kYXJEYXkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXItZGF5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3ODMiLCAiTTEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgMTI4IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzIgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMCAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAweiJdCiAgICB9OwogICAgZmFDaXJjbGUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODMwOCwgMTI4MzA5LCAxMjg5OTIsIDEyODk5MywgMTI4OTk0LCAxMjg5OTUsIDEyODk5NiwgOTY3OSwgOTg5OCwgOTg5OSwgMTEwNDQsIDYxNzA4LCA2MTkxNV0sICJmMTExIiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdCiAgICB9OwogICAgZmFNb2JpbGVWaWJyYXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vYmlsZS12aWJyYXRlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU4MTYiLCAiTTM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0xOTIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zODRjMC0zNS4zIDI4LjctNjQgNjQtNjRMMzg0IDB6TTI0OCA0MTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMHpNNDguOCAxMzMuNGM5LjQtNy43IDIzLjMtNy4xIDMyLjEgMS43IDkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC0zMSAzMSAyNS40IDI1LjQgMi45IDMuMmM2LjMgNy43IDkuOCAxNy40IDkuOCAyNy40IDAgMTEuNS00LjYgMjIuNS0xMi43IDMwLjZsLTI1LjQgMjUuNCAzMSAzMSAxLjcgMS44YzcuNyA5LjQgNy4xIDIzLjMtMS43IDMyLjFzLTIyLjcgOS4zLTMyLjEgMS43TDQ3IDM3NyAxMi43IDM0Mi42QzUuNiAzMzUuNSAxLjIgMzI2LjIgLjIgMzE2LjNMMCAzMTIgLjIgMzA3LjdjMS05LjkgNS40LTE5LjIgMTIuNS0yNi4zTDM4LjEgMjU2IDEyLjcgMjMwLjZDNS42IDIyMy41IDEuMiAyMTQuMiAuMiAyMDQuM0wwIDIwMCAuMiAxOTUuN2MxLTkuOSA1LjQtMTkuMiAxMi41LTI2LjNMNDcgMTM1IDQ4LjggMTMzLjR6TTQ5NSAxMzVjOC44LTguOCAyMi43LTkuMyAzMi4xLTEuN2wxLjggMS43IDM0LjMgMzQuM2M3LjEgNy4xIDExLjUgMTYuNCAxMi41IDI2LjNsLjIgNC4zLS4yIDQuM2MtMSA5LjktNS40IDE5LjItMTIuNSAyNi4zbC0yNS40IDI1LjQgMjUuNCAyNS40YzcuMSA3LjEgMTEuNSAxNi40IDEyLjUgMjYuM2wuMiA0LjMtLjIgNC4zYy0xIDkuOS01LjQgMTkuMi0xMi41IDI2LjNsLTM0LjMgMzQuMy0xLjggMS43Yy05LjQgNy43LTIzLjMgNy4xLTMyLjEtMS43cy05LjMtMjIuNy0xLjctMzIuMWwxLjctMS44IDMxLTMxLTI1LjQtMjUuNGMtOC4xLTguMS0xMi43LTE5LjEtMTIuNy0zMC42IDAtMTAgMy41LTE5LjcgOS44LTI3LjRsMi45LTMuMiAyNS40LTI1LjQtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45eiJdCiAgICB9OwogICAgZmFGYWNlR3JpblNxdWludDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXNxdWludCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUxOCwgImdyaW4tc3F1aW50Il0sICJmNTg1IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzg2LjcgMzA4LjljMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTIyLjQgNjEuMy04MS4zIDEwNS4xLTE1MC4zIDEwNS4xUzEyOC4xIDM4OC4yIDEwNS43IDMyNi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjF6TTEyMi42IDE0My4yYzQuNS02LjggMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMTkyIDEyNS44IDE2NC4zYy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xem0yNjMuNiAyMS4xTDM1MyAxOTIgMzg2LjIgMjE5LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjVzMy4xIDE1LjktMy4xIDIxLjF6Il0KICAgIH07CiAgICBmYUdyaW5TcXVpbnQyID0gZmFGYWNlR3JpblNxdWludDI7CiAgICBmYVVzZXJzQmV0d2VlbkxpbmVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXJzLWJldHdlZW4tbGluZXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU5MSIsICJNMjQgMTZsNTI4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNjRDMTAuNyA2NCAwIDUzLjMgMCA0MFMxMC43IDE2IDI0IDE2em0wIDQ0OGw1MjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6TTM5MiAxOTJhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwem0yNy4yIDEwMC40YzkuMS0yLjkgMTguOC00LjQgMjguOC00LjQgNTMgMCA5NiA0MyA5NiA5NmwwIDEwLjdjMCAxMS44LTkuNiAyMS4zLTIxLjMgMjEuM2wtNzguOCAwYzIuNy03LjUgNC4xLTE1LjYgNC4xLTI0bDAtOGMwLTM0LjEtMTAuNi02NS43LTI4LjgtOTEuNnptLTI2Mi40IDBDMTM4LjYgMzE4LjMgMTI4IDM0OS45IDEyOCAzODRsMCA4YzAgOC40IDEuNCAxNi41IDQuMSAyNGwtNzguOCAwQzQxLjYgNDE2IDMyIDQwNi40IDMyIDM5NC43TDMyIDM4NGMwLTUzIDQzLTk2IDk2LTk2IDEwIDAgMTkuNyAxLjUgMjguOCA0LjR6TTcyIDE5MmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bTE1Mi0xNmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTE3NiAzODRjMC02MS45IDUwLjEtMTEyIDExMi0xMTJzMTEyIDUwLjEgMTEyIDExMmwwIDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTE3NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTh6Il0KICAgIH07CiAgICBmYUhvdXNlTWVkaWNhbENpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLW1lZGljYWwtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MTMiLCAiTTMwOS44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTNTAuOCAyNzIgNjQgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTk2IDBjLTIxLjItMjkuNS0zNC4zLTY1LjMtMzUuOS0xMDRMMjcyIDQwOGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCAyMCAwYzM0LjktNDguNSA5MS43LTgwIDE1Ni04MCAxMC43IDAgMjEuMSAuOSAzMS4zIDIuNUwzMDkuOCA4LjZ6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0yMi42LTE0NGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZMNTE4LjYgNDAweiJdCiAgICB9OwogICAgZmFUYWJsZUxpc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtbGlzdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ0aC1saXN0Il0sICJmMDBiIiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptNjQgMGwwIDY0IDY0IDAgMC02NC02NCAwem0zMjAgMGwtMTkyIDAgMCA2NCAxOTIgMCAwLTY0ek02NCAyMjRsMCA2NCA2NCAwIDAtNjQtNjQgMHptMzIwIDBsLTE5MiAwIDAgNjQgMTkyIDAgMC02NHpNNjQgMzUybDAgNjQgNjQgMCAwLTY0LTY0IDB6bTMyMCAwbC0xOTIgMCAwIDY0IDE5MiAwIDAtNjR6Il0KICAgIH07CiAgICBmYVRoTGlzdCA9IGZhVGFibGVMaXN0OwogICAgZmFGbGFza1ZpYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmxhc2stdmlhbCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGYzIiwgIk0xODQuNiA0MTEuNWMtMy4xIDcuMy01LjQgMTQuOS02LjggMjIuNi0xNC41IDguOC0zMS41IDEzLjktNDkuOCAxMy45LTUzIDAtOTYtNDMtOTYtOTZMMzIgNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMlMxNC4zIDAgMzIgMEwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDI1NS42LTM5LjQgOTEuOXpNOTYgNjRsMCAxMjggNjQgMCAwLTEyOC02NCAwek0zNTIgMEw1MTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDE1My40IDkxLjMgMjEzYzIuMyA1LjQgMy44IDExLjEgNC40IDE3bC4zIC42LS4zIDBjLjIgMS44IC4zIDMuNiAuMyA1LjQgMCAzMi4zLTI2LjIgNTguNi01OC42IDU4LjZsLTI2Ni45IDBjLTMyLjMgMC01OC42LTI2LjItNTguNi01OC42IDAtMS44IC4xLTMuNiAuMy01LjRsLS4zIDAgLjMtLjZjLjYtNS44IDIuMS0xMS42IDQuNC0xN0wzMjAgMjE3LjQgMzIwIDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlMzMDIuMyAwIDMyMCAwbDMyIDB6TTQ1My4yIDI0Mi42Yy0zLjQtOC01LjItMTYuNS01LjItMjUuMmwwLTE1My40LTY0IDAgMCAxNTMuNGMwIDguNy0xLjggMTcuMi01LjIgMjUuMmwtMzMuMiA3Ny40IDE0MC43IDAtMzMuMi03Ny40eiJdCiAgICB9OwogICAgZmFDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZXhjbGFtYXRpb24tY2lyY2xlIl0sICJmMDZhIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDEgMSAwIDUxMnptMC0xOTJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wLTE5MmMtMTguMiAwLTMyLjcgMTUuNS0zMS40IDMzLjdsNy40IDEwNGMuOSAxMi42IDExLjQgMjIuMyAyMy45IDIyLjMgMTIuNiAwIDIzLTkuNyAyMy45LTIyLjNsNy40LTEwNGMxLjMtMTguMi0xMy4xLTMzLjctMzEuNC0zMy43eiJdCiAgICB9OwogICAgZmFFeGNsYW1hdGlvbkNpcmNsZSA9IGZhQ2lyY2xlRXhjbGFtYXRpb247CiAgICBmYVRheGkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGF4aSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODY2MiwgImNhYiJdLCAiZjFiYSIsICJNMTkyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItOC45IDBjLTQyIDAtNzkuMSAyNy4zLTkxLjYgNjcuNGwtMjMgNzMuNUMxNC41IDIxOS4xIDAgMjQzLjkgMCAyNzJMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyIDMyMCAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE3NmMwLTI4LjEtMTQuNS01Mi45LTM2LjQtNjcuMWwtMjMtNzMuNUM0NDAuMSA5MS4zIDQwMi45IDY0IDM2MC45IDY0bC04LjkgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE5MiAwek0xNTEuMSAxMjhsMjA5LjkgMGMxNCAwIDI2LjQgOS4xIDMwLjUgMjIuNWwxMyA0MS41LTI5Ni45IDAgMTMtNDEuNWM0LjItMTMuNCAxNi41LTIyLjUgMzAuNS0yMi41ek05NiAyNzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0yODggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhQ2FiID0gZmFUYXhpOwogICAgZmFUZXh0U2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGV4dC1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJyZW1vdmUtZm9ybWF0Il0sICJmODdkIiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDMyMi43IDI1Ni45IDM2OC4yIDk2IDQ3MSA5NiA0NjUgMTIwLjJjLTQuMyAxNy4xIDYuMSAzNC41IDIzLjMgMzguOHMzNC41LTYuMSAzOC44LTIzLjNsMTEtNDQuMUM1NDUuNiA2MS4zIDUyMi43IDMyIDQ5MS41IDMybC0zMTkgMGMtMTkuOCAwLTM3LjMgMTIuMS00NC41IDMwLjFsLTg3LTg3ek0xODAuNCAxMTQuNWw0LjYtMTguNSAxMTYuNyAwLTMwLjggMTA5LTkwLjUtOTAuNXpNMjQxIDMxMC44TDIxMS4zIDQxNiAxNjAgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00Mi4yIDAgMTUuMS01My4zLTUxLjktNTEuOXoiXQogICAgfTsKICAgIGZhUmVtb3ZlRm9ybWF0ID0gZmFUZXh0U2xhc2g7CiAgICBmYVBlb3BsZVB1bGxpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVvcGxlLXB1bGxpbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUzNSIsICJNODAgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyIDkuOCAwIDE4LjUtNC40IDI0LjQtMTEuMkw4MC40IDQ4NS4zYzIuOSAxNy40IDE5LjQgMjkuMiAzNi44IDI2LjNzMjkuMi0xOS40IDI2LjMtMzYuOGwtMjAuNS0xMjIuNyAxNS43IDAgMzAgMTM0LjljMy44IDE3LjMgMjAuOSAyOC4xIDM4LjIgMjQuM3MyOC4xLTIwLjkgMjQuMy0zOC4ybC01Ny4zLTI1OCAxMTYuMyA1My44Yy41IC4zIDEuMSAuNSAxLjYgLjcgOC42IDMuNiAxOCAzLjEgMjUuOS0uNyAzLjQtMS42IDYuNi0zLjkgOS4zLTYuNyAzLjEtMy4yIDUuNS03IDcuMS0xMS40IC4xLS4zIC4yLS43IC4zLTFsMi41LTcuNWM1LjctMTcuMSAxOC4zLTMwLjkgMzQuNy0zOC4ybDgtMy41YzEtLjQgMS45LS44IDIuOS0xLjJsLTE2LjkgNjMuNWMtNS42IDIxLjEtLjEgNDMuNiAxNC43IDU5LjdsNzAuNyA3Ny4xIDIyIDg4LjFjNC4zIDE3LjEgMjEuNyAyNy42IDM4LjggMjMuM3MyNy42LTIxLjcgMjMuMy0zOC44bC0yMy05Mi4xYy0xLjktNy44LTUuOC0xNC45LTExLjItMjAuOGwtNDkuNS01NCAxOS4zLTY1LjUgOS42IDIzYzQuNCAxMC42IDEyLjUgMTkuMyAyMi44IDI0LjVsMjYuNyAxMy4zYzE1LjggNy45IDM1IDEuNSA0Mi45LTE0LjNzMS41LTM1LTE0LjMtNDIuOWwtMjEuNC0xMC43LTE1LjMtMzYuOGMtMTcuMS00MS4xLTU3LjMtNjcuOS0xMDEuOS02Ny45LTIyLjggMC00NS4zIDQuOC02Ni4xIDE0bC04IDMuNWMtMjQuNCAxMC45LTQ0LjYgMjktNTguMSA1MS42TDE1Ny4zIDEzNi45QzE0NC43IDEzMSAxMzAuOSAxMjggMTE3IDEyOGwtNTMgMHpNNDY0IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMzQ5LjcgMzM1LjZsLTI1IDYyLjQtNTkuNCA1OS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDM3Mi4zIDQ0MWM0LjYtNC42IDguMi0xMC4xIDEwLjYtMTYuMWwxNC41LTM2LjItNDAuNy00NC40Yy0yLjUtMi43LTQuOC01LjYtNy04LjZ6Il0KICAgIH07CiAgICBmYUJhY2t3YXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhY2t3YXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTE5NF0sICJmMDRhIiwgIk0yMDQuMyA0My4xQzIxNS45IDMyIDIzMyAyOC45IDI0Ny43IDM1LjJTMjcyIDU2IDI3MiA3MmwwIDEzNi4zIDE3Mi4zLTE2NS4xQzQ1NS45IDMyIDQ3MyAyOC45IDQ4Ny43IDM1LjJTNTEyIDU2IDUxMiA3MmwwIDM2OGMwIDE2LTkuNiAzMC41LTI0LjMgMzYuOHMtMzEuOCAzLjItNDMuNC03LjlMMjcyIDMwMy43IDI3MiA0NDBjMCAxNi05LjYgMzAuNS0yNC4zIDM2LjhzLTMxLjggMy4yLTQzLjQtNy45bC0xOTItMTg0QzQuNSAyNzcuMyAwIDI2Ni45IDAgMjU2czQuNS0yMS4zIDEyLjMtMjguOWwxOTItMTg0eiJdCiAgICB9OwogICAgZmFDYXJCdXJzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXItYnVyc3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiY2FyLWNyYXNoIl0sICJmNWUxIiwgIk0yMzIgMTYuMWwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHpNMzIgMTY4LjFsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHpNMjgxLjUgNzAuNmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGwzMy45LTMzLjljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEwyODEuNSAzNi42Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXptLTE4MSAyMTVsMzMuOS0zMy45YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMNjYuNiAyNTEuNmMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwek02Ni42IDIuN2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsMzMuOSAzMy45YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUwxMDAuNSAyLjdDOTEuMS02LjcgNzYtNi43IDY2LjYgMi43ek0zNTIuOSAxNzUuNEw1MDUgMjE2LjJjNi40IDEuNyAxMS4xIDcuMyAxMS44IDEzLjlsNy4yIDc0LTIzMS41LTYyIDQzLjItNjAuNWMzLjktNS40IDEwLjctNy45IDE3LjItNi4yek0yMjMuNiAyMjguNWwtMi4xIDIuOWMtMjEuNyA1LjUtMzkuOSAyMi4zLTQ2LjEgNDUuNS00LjEgMTUuNS0xMi40IDQ2LjQtMjQuOCA5Mi43bC04LjMgMzAuOWMtNC42IDE3LjEgNS42IDM0LjYgMjIuNiAzOS4ybDE1LjUgNC4xYzE3LjEgNC42IDM0LjYtNS42IDM5LjItMjIuNmw4LjMtMzAuOSAyNzguMiA3NC41LTguMyAzMC45Yy00LjYgMTcuMSA1LjYgMzQuNiAyMi42IDM5LjJsMTUuNSA0LjFjMTcuMSA0LjYgMzQuNi01LjYgMzkuMi0yMi42IDQuMS0xNS41IDEyLjQtNDYuNCAyNC44LTkyLjdsOC4zLTMwLjljNi4yLTIzLjItMS4xLTQ2LjgtMTcuMi02Mi41bC0uMy0zLjYtMTAtMTAzYy0zLjItMzMuMi0yNi43LTYwLjktNTguOS02OS41TDM2OS41IDExMy42Yy0zMi4yLTguNi02Ni40IDMuNi04NS44IDMwLjhsLTYwLjIgODQuMnptNDguNyA1Ny44YTMyIDMyIDAgMSAxIC0xNi42IDYxLjggMzIgMzIgMCAxIDEgMTYuNi02MS44em0yMDguMSA4OC45YTMyIDMyIDAgMSAxIDYxLjggMTYuNiAzMiAzMiAwIDEgMSAtNjEuOC0xNi42eiJdCiAgICB9OwogICAgZmFDYXJDcmFzaCA9IGZhQ2FyQnVyc3Q7CiAgICBmYUxpbmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGluayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODI3OSwgImNoYWluIl0sICJmMGMxIiwgIk00MTkuNSA5NmMtMTYuNiAwLTMyLjcgNC41LTQ2LjggMTIuNy0xNS44LTE2LTM0LjItMjkuNC01NC41LTM5LjUgMjguMi0yNCA2NC4xLTM3LjIgMTAxLjMtMzcuMiA4Ni40IDAgMTU2LjUgNzAgMTU2LjUgMTU2LjUgMCA0MS41LTE2LjUgODEuMy00NS44IDExMC42bC03MS4xIDcxLjFjLTI5LjMgMjkuMy02OS4xIDQ1LjgtMTEwLjYgNDUuOC04Ni40IDAtMTU2LjUtNzAtMTU2LjUtMTU2LjUgMC0xLjUgMC0zIC4xLTQuNSAuNS0xNy43IDE1LjItMzEuNiAzMi45LTMxLjFzMzEuNiAxNS4yIDMxLjEgMzIuOWMwIC45IDAgMS44IDAgMi42IDAgNTEuMSA0MS40IDkyLjUgOTIuNSA5Mi41IDI0LjUgMCA0OC05LjcgNjUuNC0yNy4xbDcxLjEtNzEuMWMxNy4zLTE3LjMgMjcuMS00MC45IDI3LjEtNjUuNCAwLTUxLjEtNDEuNC05Mi41LTkyLjUtOTIuNXpNMjc1LjIgMTczLjNjLTEuOS0uOC0zLjgtMS45LTUuNS0zLjEtMTIuNi02LjUtMjctMTAuMi00Mi4xLTEwLjItMjQuNSAwLTQ4IDkuNy02NS40IDI3LjFMOTEuMSAyNTguMmMtMTcuMyAxNy4zLTI3LjEgNDAuOS0yNy4xIDY1LjQgMCA1MS4xIDQxLjQgOTIuNSA5Mi41IDkyLjUgMTYuNSAwIDMyLjYtNC40IDQ2LjctMTIuNiAxNS44IDE2IDM0LjIgMjkuNCA1NC42IDM5LjUtMjguMiAyMy45LTY0IDM3LjItMTAxLjMgMzcuMi04Ni40IDAtMTU2LjUtNzAtMTU2LjUtMTU2LjUgMC00MS41IDE2LjUtODEuMyA0NS44LTExMC42bDcxLjEtNzEuMWMyOS4zLTI5LjMgNjkuMS00NS44IDExMC42LTQ1LjggODYuNiAwIDE1Ni41IDcwLjYgMTU2LjUgMTU2LjkgMCAxLjMgMCAyLjYgMCAzLjktLjQgMTcuNy0xNS4xIDMxLjYtMzIuOCAzMS4ycy0zMS42LTE1LjEtMzEuMi0zMi44YzAtLjggMC0xLjUgMC0yLjMgMC0zMy43LTE4LTYzLjMtNDQuOC03OS42eiJdCiAgICB9OwogICAgZmFDaGFpbiA9IGZhTGluazsKICAgIGZhQmFja3dhcmRTdGVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhY2t3YXJkLXN0ZXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsic3RlcC1iYWNrd2FyZCJdLCAiZjA0OCIsICJNMzYzIDM2LjhjLTEyLjktNy0yOC43LTYuMy00MSAxLjhMNjQgMjA4LjEgNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE0NC4xIDI1OCAxNjkuNmMxMi4zIDguMSAyOCA4LjggNDEgMS44czIxLTIwLjUgMjEtMzUuMmwwLTM2OGMwLTE0LjctOC4xLTI4LjItMjEtMzUuMnoiXQogICAgfTsKICAgIGZhU3RlcEJhY2t3YXJkID0gZmFCYWNrd2FyZFN0ZXA7CiAgICBmYVggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAieCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyMF0sICI1OCIsICJNMzc2LjYgODQuNWMxMS4zLTEzLjYgOS41LTMzLjgtNC4xLTQ1LjFzLTMzLjgtOS41LTQ1LjEgNC4xTDE5MiAyMDYgNTYuNiA0My41QzQ1LjMgMjkuOSAyNS4xIDI4LjEgMTEuNSAzOS40Uy0zLjkgNzAuOSA3LjQgODQuNUwxNTAuMyAyNTYgNy40IDQyNy41Yy0xMS4zIDEzLjYtOS41IDMzLjggNC4xIDQ1LjFzMzMuOCA5LjUgNDUuMS00LjFMMTkyIDMwNiAzMjcuNCA0NjguNWMxMS4zIDEzLjYgMzEuNSAxNS40IDQ1LjEgNC4xczE1LjQtMzEuNSA0LjEtNDUuMUwyMzMuNyAyNTYgMzc2LjYgODQuNXoiXQogICAgfTsKICAgIGZhQ2lyY2xlVXNlcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXVzZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjE0MiwgInVzZXItY2lyY2xlIl0sICJmMmJkIiwgIk0zOTkgMzg0LjJDMzc2LjkgMzQ1LjggMzM1LjQgMzIwIDI4OCAzMjBsLTY0IDBjLTQ3LjQgMC04OC45IDI1LjgtMTExIDY0LjIgMzUuMiAzOS4yIDg2LjIgNjMuOCAxNDMgNjMuOHMxMDcuOC0yNC43IDE0My02My44ek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNTYgMTZhNzIgNzIgMCAxIDAgMC0xNDQgNzIgNzIgMCAxIDAgMCAxNDR6Il0KICAgIH07CiAgICBmYVVzZXJDaXJjbGUyID0gZmFDaXJjbGVVc2VyMjsKICAgIGZhUmVjdGFuZ2xlTGlzdDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVjdGFuZ2xlLWxpc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGlzdC1hbHQiXSwgImYwMjIiLCAiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0em05NiAyNTZhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHptLTMyLTk2YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptMTIwLTU2bDE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMCAxMjhsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFMaXN0QWx0MiA9IGZhUmVjdGFuZ2xlTGlzdDI7CiAgICBmYUhhbmQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzMDYsIDk5OTUsICJoYW5kLXBhcGVyIl0sICJmMjU2IiwgIk0yODggMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0xNzZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyNzJjMCAxLjUgMCAzLjEgLjEgNC42TDY3LjYgMjgzYy0xNi0xNS4yLTQxLjMtMTQuNi01Ni42IDEuNFMtMy42IDMyNS43IDEyLjQgMzQxTDEyNC44IDQ0OGM0My4xIDQxLjEgMTAwLjQgNjQgMTYwIDY0bDE5LjIgMGM5Ny4yIDAgMTc2LTc4LjggMTc2LTE3NmwwLTIwOGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDExMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTIwOHoiXQogICAgfTsKICAgIGZhSGFuZFBhcGVyMiA9IGZhSGFuZDI7CiAgICBmYVZhblNodXR0bGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmFuLXNodXR0bGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg2NTYsICJzaHV0dGxlLXZhbiJdLCAiZjViNiIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzMzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsLjQgMGM0IDQ0LjkgNDEuNyA4MCA4Ny42IDgwczgzLjYtMzUuMSA4Ny42LTgwbDEwNC43IDBjNCA0NC45IDQxLjcgODAgODcuNiA4MCA0Ni4xIDAgODMuOS0zNS40IDg3LjctODAuNSAzMS43LTMuOCA1Ni4zLTMwLjggNTYuMy02My41bDAtMTAxLjNjMC0xMy44LTQuNS0yNy4zLTEyLjgtMzguNGwtODAtMTA2LjdDNDcxLjEgNzMuNSA0NTIuMSA2NCA0MzIgNjRMNjQgNjR6TTUwNCAyMjRsLTEyMCAwIDAtOTYgNDggMCA3MiA5NnpNNjQgMjI0bDAtOTYgOTYgMCAwIDk2LTk2IDB6bTE2MCAwbDAtOTYgOTYgMCAwIDk2LTk2IDB6TTM5MiAzOTJhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMTUyIDM1MmE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6Il0KICAgIH07CiAgICBmYVNodXR0bGVWYW4gPSBmYVZhblNodXR0bGU7CiAgICBmYVN0YWlycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFpcnMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTI4OSIsICJNMzg0IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwIDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5NiAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDAgMC05NnoiXQogICAgfTsKICAgIGZhSG9yc2VIZWFkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvcnNlLWhlYWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdhYiIsICJNMCA0NjRMMCAzMTYuOUMwIDIwOC41IDY4LjMgMTExLjggMTcwLjUgNzUuNkwzNDAuMiAxNS41YzIxLjQtNy42IDQzLjggOC4zIDQzLjggMzAuOSAwIDExLTUuNSAyMS4yLTE0LjYgMjcuM0wzMzYgOTZjNDguMSAwIDkxLjIgMjkuOCAxMDguMSA3NC45bDQ4LjYgMTI5LjVjMTEuOCAzMS40IDQuMSA2Ni44LTE5LjYgOTAuNS0xNiAxNi0zNy44IDI1LjEtNjAuNSAyNS4xbC0zLjQgMGMtMjYuMSAwLTUwLjktMTEuNi02Ny42LTMxLjdsLTMyLjMtMzguN2MtMTEuNyA0LjEtMjQuMiA2LjQtMzcuMyA2LjRsLS4xIDBjLTYuMyAwLTEyLjUtLjUtMTguNi0xLjUtMy42LS42LTcuMi0xLjQtMTAuNy0yLjNsMCAwYy0yOC45LTcuOC01My4xLTI2LjgtNjcuOC01Mi4yLTQuNC03LjctMTQuMi0xMC4zLTIxLjktNS44cy0xMC4zIDE0LjItNS44IDIxLjljMjQgNDEuNSA2OC4zIDcwIDExOS4zIDcxLjlsNDcuMiA3MC44YzQgNi4xIDYuMiAxMy4yIDYuMiAyMC40IDAgMjAuMy0xNi41IDM2LjgtMzYuOCAzNi44TDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6TTMyOCAyMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFWYXVsdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2YXVsdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMmM1IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0IDAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMjU2IDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjU2IDI1NmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6TTY0IDI1NmExMjggMTI4IDAgMSAxIDI1NiAwIDEyOCAxMjggMCAxIDEgLTI1NiAwem0zODQtNDhjMCAxNy44LTkuNyAzMy4zLTI0IDQxLjZsMCA3OC40YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNzguNGMtMTQuMy04LjMtMjQtMjMuOC0yNC00MS42IDAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh6Il0KICAgIH07CiAgICBmYURydW1TdGVlbHBhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkcnVtLXN0ZWVscGFuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1NmEiLCAiTTI4OCAzMmMxNTkuMSAwIDI4OCA0OCAyODggMTI4bDAgMTkyYzAgODAtMTI4LjkgMTI4LTI4OCAxMjhTMCA0MzIgMCAzNTJMMCAxNjBDMCA4MCAxMjguOSAzMiAyODggMzJ6TTUyOCAxNjBjMC05LjktOC0yOS45LTU1LTQ5LjgtMTguNi03LjktNDAuOS0xNC40LTY2LTE5LjRsLTI3LjggNDMuNmMtNy4zIDExLjUtMTEuMiAyNC44LTExLjIgMzguNCAwIDE3LjUgNi40IDM0LjQgMTguMSA0Ny41bDkuOCAxMWMyOS44LTUuMiA1NS45LTEyLjUgNzcuMi0yMS41IDQ3LjEtMTkuOSA1NS0zOS45IDU1LTQ5Ljh6TTM0OS4yIDIzNy4zYy04LTI2LjItMzIuNC00NS4zLTYxLjItNDUuM3MtNTMuMyAxOS4xLTYxLjIgNDUuM2MxOS40IDEuNyAzOS45IDIuNyA2MS4yIDIuN3M0MS44LS45IDYxLjItMi43ek0xNjkgOTAuOGMtMjUuMiA1LTQ3LjQgMTEuNi02NiAxOS40LTQ3LjEgMTkuOS01NSAzOS45LTU1IDQ5LjhzOCAyOS45IDU1IDQ5LjhjMjEuMyA5IDQ3LjQgMTYuMyA3Ny4yIDIxLjVsOS44LTExYzExLjYtMTMuMSAxOC4xLTMwIDE4LjEtNDcuNSAwLTEzLjYtMy45LTI2LjktMTEuMi0zOC40TDE2OSA5MC44em01Ni4zLThjLS45IDQuMy0xLjQgOC43LTEuNCAxMy4yIDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC00LjUtLjUtOS0xLjQtMTMuMi0xOS44LTEuOC00MC44LTIuOC02Mi42LTIuOHMtNDIuOCAxLTYyLjYgMi44eiJdCiAgICB9OwogICAgZmFUaHVtYnNVcDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGh1bWJzLXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MDc3LCA2MTU3NV0sICJmMTY0IiwgIk04MCAxNjBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTQ4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDAgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDQ4IDB6TTI3MC42IDE2QzI5Ny45IDE2IDMyMCAzOC4xIDMyMCA2NS40bDAgNC4yYzAgNi44LTEuMyAxMy42LTMuOCAxOS45TDI4OCAxNjAgNDQ4IDE2MGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDE5LjctMTEuOSAzNi42LTI4LjkgNDQgMTcgNy40IDI4LjkgMjQuMyAyOC45IDQ0IDAgMjMuNC0xNi44IDQyLjktMzkgNDcuMSA0LjQgNy4zIDcgMTUuOCA3IDI0LjkgMCAyMi4yLTE1IDQwLjgtMzUuNCA0Ni4zIDIuMiA1LjUgMy40IDExLjUgMy40IDE3LjcgMCAyNi41LTIxLjUgNDgtNDggNDhsLTg3LjkgMGMtMzYuMyAwLTcxLjYtMTIuNC05OS45LTM1LjFMMTg0IDQzNS4yYy0xNS4yLTEyLjEtMjQtMzAuNS0yNC01MGwwLTE4Ni42YzAtMTQuOSAzLjUtMjkuNiAxMC4xLTQyLjlMMjI2LjMgNDMuM0MyMzQuNyAyNi42IDI1MS44IDE2IDI3MC42IDE2eiJdCiAgICB9OwogICAgZmFTdGFtcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFtcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWJmIiwgIk0zMTIgMjAxLjhjMC0xNy40IDkuMi0zMy4yIDE5LjktNDcgMTIuNi0xNi4yIDIwLjEtMzYuNiAyMC4xLTU4LjggMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZjMCAyMi4xIDcuNSA0Mi41IDIwLjEgNTguOCAxMC43IDEzLjggMTkuOSAyOS42IDE5LjkgNDcgMCAyOS45LTI0LjMgNTQuMi01NC4yIDU0LjJMMTEyIDI1NmMtNjEuOSAwLTExMiA1MC4xLTExMiAxMTIgMCAyNi41IDIxLjUgNDggNDggNDhsNDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDggMC02MS45LTUwLjEtMTEyLTExMi0xMTJsLTMzLjggMGMtMjkuOSAwLTU0LjItMjQuMy01NC4yLTU0LjJ6TTU2IDQ2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw1NiA0NjR6Il0KICAgIH07CiAgICBmYU1lbm9yYWggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWVub3JhaCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNjc2IiwgIk0yMC44IDcuNEMyMi44IDIuOSAyNy4xIDAgMzIgMHM5LjIgMi45IDExLjIgNy40TDYxLjMgNDkuN2MxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFMNjQgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA4MS43IDAgNjRsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xTDIwLjggNy40em05NiAwQzExOC44IDIuOSAxMjMuMSAwIDEyOCAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMWwwIDEuMmMwIDE3LjctMTQuMyAzMi0zMiAzMlM5NiA4MS43IDk2IDY0bDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMUwxMTYuOCA3LjR6bTc3LjggNDIuNEwyMTIuOCA3LjRDMjE0LjggMi45IDIxOS4xIDAgMjI0IDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMXpNMzA4LjggNy40QzMxMC44IDIuOSAzMTUuMSAwIDMyMCAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMWwwIDEuMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjFMMzA4LjggNy40em03Ny44IDQyLjRMNDA0LjggNy40QzQwNi44IDIuOSA0MTEuMSAwIDQxNiAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMWwwIDEuMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjF6TTUwMC44IDcuNEM1MDIuOCAyLjkgNTA3LjEgMCA1MTIgMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFsMCAxLjJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xTDUwMC44IDcuNHptNzcuOCA0Mi40TDU5Ni44IDcuNEM1OTguOCAyLjkgNjAzLjEgMCA2MDggMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFsMCAxLjJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xek0zMiAxMjhjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTkyIDAgMC0xNjBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE2MCAxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTI4YzAgNTMtNDMgOTYtOTYgOTZsLTE5MiAwIDAgNjQgMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyMCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDEyOCAwIDAtNjQtMTkyIDBjLTUzIDAtOTYtNDMtOTYtOTZMMCAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjgtNjQgMCAwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOC02NCAwIDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOC02NCAwIDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyem05NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4LTY0IDAgMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUNoaWxkcmVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoaWxkcmVuIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZTEiLCAiTTE2MC41IDBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6bS03MiA0ODBsMC04MC0xNy44IDBjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xTDg2LjcgMjg1LjUgNTggMzIzLjNjLTEwLjcgMTQuMS0zMC44IDE2LjgtNDQuOCA2LjJTLTMuNyAyOTguNyA3IDI4NC43TDY1LjkgMjA3YzIyLjQtMjkuNiA1Ny41LTQ3IDk0LjYtNDdzNzIuMiAxNy40IDk0LjYgNDdMMzE0IDI4NC43YzEwLjcgMTQuMSA3LjkgMzQuMi02LjIgNDQuOHMtMzQuMiA3LjktNDQuOC02LjJsLTI4LjctMzcuOCAzMS4xIDkzLjRjMy41IDEwLjQtNC4zIDIxLjEtMTUuMiAyMS4xbC0xNy44IDAgMCA4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTgwLTE2IDAgMCA4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnpNNDgwLjUgMGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptLTggMzg0bDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNzkuNS0xMi45IDIwLjVjLTkuNCAxNS0yOS4yIDE5LjQtNDQuMSAxMHMtMTkuNC0yOS4yLTEwLTQ0LjFsNTEuNy04Mi4xYzE3LjYtMjcuOSA0OC4zLTQ0LjkgODEuMi00NC45bDEyLjMgMGMzMyAwIDYzLjcgMTYuOSA4MS4yIDQ0LjlMNjE5LjYgMjg3YzkuNCAxNSA0LjkgMzQuNy0xMCA0NC4xcy0zNC43IDQuOS00NC4xLTEwbC0xMi45LTIwLjUgMCAxNzkuNWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2LTE2IDB6Il0KICAgIH07CiAgICBmYUNoYXJ0TGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFydC1saW5lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxpbmUtY2hhcnQiXSwgImYyMDEiLCAiTTY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDAwYzAgNDQuMiAzNS44IDgwIDgwIDgwbDQwMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDgwIDQxNmMtOC44IDAtMTYtNy4yLTE2LTE2TDY0IDY0em00MDYuNiA4Ni42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDMyMCAyMTAuNyAyNjIuNiAxNTMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDczLjQtNzMuNCA1Ny40IDU3LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOHoiXQogICAgfTsKICAgIGZhTGluZUNoYXJ0ID0gZmFDaGFydExpbmU7CiAgICBmYVNxdWFyZUVudmVsb3BlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1lbnZlbG9wZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJlbnZlbG9wZS1zcXVhcmUiXSwgImYxOTkiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIwOS4xIDI2Ny45TDEwOC40IDIwNy40Yy03LjctNC42LTEyLjQtMTIuOS0xMi40LTIxLjkgMC0xNC4xIDExLjQtMjUuNSAyNS41LTI1LjVsMjA0LjkgMGMxNC4xIDAgMjUuNSAxMS40IDI1LjUgMjUuNSAwIDktNC43IDE3LjMtMTIuNCAyMS45TDIzOC45IDI2Ny45Yy00LjUgMi43LTkuNiA0LjEtMTQuOSA0LjFzLTEwLjQtMS40LTE0LjktNC4xek0zNTIgMjM3LjNsMCA4Mi43YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC04Mi43IDk2LjcgNThDMjAyLjEgMzAxIDIxMyAzMDQgMjI0IDMwNHMyMS45LTMgMzEuMy04LjdsOTYuNy01OHoiXQogICAgfTsKICAgIGZhRW52ZWxvcGVTcXVhcmUgPSBmYVNxdWFyZUVudmVsb3BlOwogICAgZmFCYW5TbW9raW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhbi1zbW9raW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Njg1LCAic21va2luZy1iYW4iXSwgImY1NGQiLCAiTTk5LjUgMTQ0LjhsNzkuMiA3OS4yLTUwLjcgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNDYuNyAwIDkyLjUgOTIuNWMtMzEuNCAyMi40LTY5LjggMzUuNS0xMTEuMiAzNS41LTEwNiAwLTE5Mi04Ni0xOTItMTkyIDAtNDEuNSAxMy4xLTc5LjkgMzUuNS0xMTEuMnpNMzMzLjMgMjg4bC0zMi0zMiA4Mi43IDAgMCAzMi01MC43IDB6bTMyIDMybDE4LjcgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDI2OS4zIDIyNCAxNDQuOCA5OS41YzMxLjQtMjIuNCA2OS44LTM1LjUgMTExLjItMzUuNSAxMDYgMCAxOTIgODYgMTkyIDE5MiAwIDQxLjUtMTMuMSA3OS45LTM1LjUgMTExLjJMMzY1LjMgMzIwek0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjcyIDk2Yy04LjggMC0xNiA3LjItMTYgMTYgMCAyNi41IDIxLjUgNDggNDggNDhsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzNy4yIDE2IDE2IDE2IDE2LTcuMiAxNi0xNmMwLTI2LjUtMjEuNS00OC00OC00OGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2cy03LjItMTYtMTYtMTZ6Il0KICAgIH07CiAgICBmYVNtb2tpbmdCYW4gPSBmYUJhblNtb2tpbmc7CiAgICBmYVRydWNrRnJvbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stZnJvbnQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTJiNyIsICJNMCAxMTJDMCA2Ny44IDM1LjggMzIgODAgMzJsMjg4IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCAyNTZjMCAyNi4yLTEyLjYgNDkuNC0zMiA2NGwwIDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyLTE5MiAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNDhDMTIuNiA0MTcuNCAwIDM5NC4yIDAgMzY4TDAgMTEyem05NiA4MGwwIDY0IDI1NiAwIDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTE5MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMzIgMTYwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTIyNCAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyNzk3MCwgNjE2ODddLCAiZjFhZCIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpNMTc2IDM1MmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgODAtOTYgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek05NiAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjQwIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTk2IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNDQtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhQnVsbHNleWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVsbHNleWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjE0MCIsICJNNDQ4IDI1NmExOTIgMTkyIDAgMSAwIC0zODQgMCAxOTIgMTkyIDAgMSAwIDM4NCAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNTYgODBhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTAtMjI0YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHpNMjI0IDI1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdCiAgICB9OwogICAgZmFBcnJvd0xlZnRMb25nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWxlZnQtbG9uZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJsb25nLWFycm93LWxlZnQiXSwgImYxNzciLCAiTTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTI4IDEyOGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDEwOS4zIDI4OCA1NDQgMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00MzQuNyAwIDczLjQtNzMuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTI4IDEyOHoiXQogICAgfTsKICAgIGZhTG9uZ0Fycm93TGVmdCA9IGZhQXJyb3dMZWZ0TG9uZzsKICAgIGZhQ2hlc3NSb29rMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1yb29rIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTgyMF0sICJmNDQ3IiwgIk0wIDMyTDAgMTMzLjVjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNMNjQgMjI0IDY0IDM4NCA3LjggNDU0LjNDMi43IDQ2MC42IDAgNDY4LjQgMCA0NzYuNSAwIDQ5Ni4xIDE1LjkgNTEyIDM1LjUgNTEybDMxMi45IDBjMTkuNiAwIDM1LjUtMTUuOSAzNS41LTM1LjUgMC04LjEtMi43LTE1LjktNy44LTIyLjJsLTU2LjItNzAuMyAwLTE2MCA0NS4zLTQ1LjNjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0wzODQgMzJjMC0xNy43LTE0LjMtMzItMzItMzJMMzIwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItNDggMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE3NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTQ4IDAgMC0zMkM5NiAxNC4zIDgxLjcgMCA2NCAwTDMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyeiJdCiAgICB9OwogICAgZmFCbGVuZGVyUGhvbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmxlbmRlci1waG9uZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNmI2IiwgIk0xNTEuNCAxMy4yYzEwLjIgNS44IDE0LjUgMTguNCAxMCAyOS4zTDEzOC4yIDk4LjhjLTMuOSA5LjYtMTMuNyAxNS40LTI0IDE0LjRsLTIwLjItMkM3OC43IDE1Mi45IDc4IDE5OC45IDkxLjkgMjQxLjFsMjIuNC0yLjJjMTAuMy0xIDIwIDQuOCAyNCAxNC40bDIzLjIgNTYuM2M0LjUgMTAuOSAuMiAyMy40LTEwIDI5LjNsLTIuOSAxLjZjLTMzLjYgMTkuMi04MS43IDE2LjItMTA2LjItMjEuNi01Ni4zLTg2LjYtNTYuMy0xOTkuMSAwLTI4NS43IDI0LjYtMzcuNyA3Mi43LTQwLjcgMTA2LjItMjEuNmwyLjkgMS42ek0yMjQgMzM2TDE5My43IDE3LjVDMTkyLjggOC4xIDIwMC4yIDAgMjA5LjYgMGwzMjQgMGMyMS4zIDAgMzYuNiAyMC4zIDMwLjggNDAuOEw1NTMuMSA4MCA0NDAgODBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOTkuNCAwLTE4LjMgNjQtODEuMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY3LjQgMC0yNy40IDk2LTI1NiAwem04IDQ4bDI0MCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTI0MCAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwem0xMjAgODhhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFBcnJvd1R1cm5VcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy10dXJuLXVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImxldmVsLXVwIl0sICJmMTQ4IiwgIk0zMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMzA2LjcgNzMuNCA3My40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE2MCAxMDkuMyAxNjAgNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAweiJdCiAgICB9OwogICAgZmFMZXZlbFVwID0gZmFBcnJvd1R1cm5VcDsKICAgIGZhQmljeWNsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiaWN5Y2xlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NjkwXSwgImYyMDYiLCAiTTMzMS43IDQzLjNDMzM2IDM2LjMgMzQzLjcgMzIgMzUyIDMybDEwNCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC02NS42IDAgNzIuMiAxNDguNGMxMC43LTIuOSAyMS45LTQuNCAzMy40LTQuNCA3MC43IDAgMTI4IDU3LjMgMTI4IDEyOHMtNTcuMyAxMjgtMTI4IDEyOC0xMjgtNTcuMy0xMjgtMTI4YzAtNDIgMjAuMi03OS4yIDUxLjQtMTAyLjZsLTIwLjQtNDEuOS03My41IDE0N2MtMi4zIDQuOC02LjMgOC44LTExLjQgMTEuMi0uNiAuMy0xLjIgLjUtMS44IC43LTIuOSAxLjEtNS45IDEuNi04LjkgMS41TDI3MSAzNjhjLTcuOSA2My4xLTYxLjcgMTEyLTEyNyAxMTItNzAuNyAwLTEyOC01Ny4zLTEyOC0xMjhTNzMuMyAyMjQgMTQ0IDIyNGMxMC44IDAgMjEuMiAxLjMgMzEuMiAzLjhsMjguNS01Ni45LTExLjUtMjYuOS00MC4yIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNTYgMGM5LjYgMCAxOC4zIDUuNyAyMi4xIDE0LjVsMTQuMyAzMy41IDEyMy43IDAtMzcuNy03Ny41Yy0zLjYtNy40LTMuMi0xNi4yIDEuMi0yMy4yek0yMjguNSAyMjguN2wtNDUuNiA5MS4zIDg0LjggMC0zOS4xLTkxLjN6TTMwNS43IDI4N2w0Ny41LTk1LTg4LjIgMCA0MC43IDk1em0xNjguNyA3NS41bC0yOS43LTYxYy0xMi44IDEzLTIwLjcgMzAuOC0yMC43IDUwLjUgMCAzOS44IDMyLjIgNzIgNzIgNzJzNzItMzIuMiA3Mi03Mi0zMi4yLTcyLTcyLTcyYy0yLjcgMC01LjUgLjItOC4xIC41bDI5LjcgNjFjNS44IDExLjkgLjggMjYuMy0xMS4xIDMyLjFzLTI2LjMgLjgtMzIuMS0xMS4xek0xNDkuMiAzNjhjLTIwLjIgMC0zMy40LTIxLjMtMjQuMy0zOS40bDI0LjItNDguNWMtMS43LS4xLTMuNC0uMi01LjEtLjItMzkuOCAwLTcyIDMyLjItNzIgNzJzMzIuMiA3MiA3MiA3MmMzNC4zIDAgNjIuOS0yMy45IDcwLjItNTZsLTY1IDB6Il0KICAgIH07CiAgICBmYUNpcmNsZUFycm93RG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtYXJyb3ctZG93biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhcnJvdy1jaXJjbGUtZG93biJdLCAiZjBhYiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIzOSAzNzdsLTgwLTgwYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMzkgMzkgMC0xNTAuMWMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTUwLjEgMzktMzljOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC04MCA4MGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDB6Il0KICAgIH07CiAgICBmYUFycm93Q2lyY2xlRG93biA9IGZhQ2lyY2xlQXJyb3dEb3duOwogICAgZmFHZWFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdlYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5ODgxLCAiY29nIl0sICJmMDEzIiwgIk0xOTUuMSA5LjVDMTk4LjEtNS4zIDIxMS4yLTE2IDIyNi40LTE2bDU5LjggMGMxNS4yIDAgMjguMyAxMC43IDMxLjMgMjUuNUwzMzIgNzkuNWMxNC4xIDYgMjcuMyAxMy43IDM5LjMgMjIuOGw2Ny44LTIyLjVjMTQuNC00LjggMzAuMiAxLjIgMzcuOCAxNC40bDI5LjkgNTEuOGM3LjYgMTMuMiA0LjkgMjkuOC02LjUgMzkuOUw0NDcgMjMzLjNjLjkgNy40IDEuMyAxNSAxLjMgMjIuN3MtLjUgMTUuMy0xLjMgMjIuN2w1My40IDQ3LjVjMTEuNCAxMC4xIDE0IDI2LjggNi41IDM5LjlsLTI5LjkgNTEuOGMtNy42IDEzLjEtMjMuNCAxOS4yLTM3LjggMTQuNGwtNjcuOC0yMi41Yy0xMi4xIDkuMS0yNS4zIDE2LjctMzkuMyAyMi44bC0xNC40IDY5LjljLTMuMSAxNC45LTE2LjIgMjUuNS0zMS4zIDI1LjVsLTU5LjggMGMtMTUuMiAwLTI4LjMtMTAuNy0zMS4zLTI1LjVsLTE0LjQtNjkuOWMtMTQuMS02LTI3LjItMTMuNy0zOS4zLTIyLjhMNzMuNSA0MzIuM2MtMTQuNCA0LjgtMzAuMi0xLjItMzcuOC0xNC40TDUuOCAzNjYuMWMtNy42LTEzLjItNC45LTI5LjggNi41LTM5LjlsNTMuNC00Ny41Yy0uOS03LjQtMS4zLTE1LTEuMy0yMi43cy41LTE1LjMgMS4zLTIyLjdMMTIuMyAxODUuOGMtMTEuNC0xMC4xLTE0LTI2LjgtNi41LTM5LjlMMzUuNyA5NC4xYzcuNi0xMy4yIDIzLjQtMTkuMiAzNy44LTE0LjRsNjcuOCAyMi41YzEyLjEtOS4xIDI1LjMtMTYuNyAzOS4zLTIyLjhMMTk1LjEgOS41ek0yNTYuMyAzMzZhODAgODAgMCAxIDAgLS42LTE2MCA4MCA4MCAwIDEgMCAuNiAxNjB6Il0KICAgIH07CiAgICBmYUNvZyA9IGZhR2VhcjsKICAgIGZhTWFyc0FuZFZlbnVzQnVyc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFycy1hbmQtdmVudXMtYnVyc3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUyMyIsICJNNDY0LTMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDM0LjcgMC02MyA2M2MtMjguNC0xOS41LTYyLjctMzEtOTkuOC0zMS05Ny4yIDAtMTc2IDc4LjgtMTc2IDE3NiAwIDg2LjMgNjIuMSAxNTguMSAxNDQgMTczLjFsMCAzNC45LTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMzQuOWM4MS45LTE1IDE0NC04Ni44IDE0NC0xNzMuMSAwLTM3LTExLjQtNzEuNC0zMS05OS44bDYzLTYzIDAgMzQuN2MwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTEyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDQ5Ni02NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTM2OCA5NmExMTIgMTEyIDAgMSAxIDAgMjI0IDExMiAxMTIgMCAxIDEgMC0yMjR6TTE5MC45LTIxLjlDMTg4LjQtMjggMTgyLjYtMzIgMTc2LTMycy0xMi40IDQtMTQuOSAxMC4xbC0yOS40IDc0LTc2LjItMjMuMWMtNi4zLTEuOS0xMy4xIC4yLTE3LjIgNS4zUzMzLjggNDYuNSAzNyA1Mi4ybDM5LjUgNjkuMS02NS42IDQ1LjFjLTUuNCAzLjctOCAxMC4zLTYuNSAxNi43czYuNyAxMS4yIDEzLjEgMTIuMmw3OC43IDEyLjItNS42IDc5LjRjLS41IDYuNSAzLjEgMTIuNyA5IDE1LjVzMTIuOSAxLjggMTcuOC0yLjZMMTUyLjEgMjY4Yy01LjMtMTkuMS04LjEtMzkuMi04LjEtNjAgMC02NS40IDI4LTEyNC4yIDcyLjYtMTY1LjFMMTkwLjktMjEuOXoiXQogICAgfTsKICAgIGZhT3R0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAib3R0ZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjk0NDZdLCAiZjcwMCIsICJNMTgxLjUgMTk3LjFsMTIuOSA2LjRjNS45IDMgMTIuNCA0LjUgMTkuMSA0LjUgMjMuNSAwIDQyLjYtMTkuMSA0Mi42LTQyLjZsMC0yMS40YzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDIxLjRjMCAyMy41IDE5LjEgNDIuNiA0Mi42IDQyLjYgNi42IDAgMTMuMS0xLjUgMTkuMS00LjUgOS4zLTQuNyAxNi40LTguMiAyMS4yLTEwLjZMMTM1LjEgMTg1Yy00LjUtMy03LjEtOC03LjEtMTMuM2wwLTMuN2MwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMy43YzAgNS4zLTIuNyAxMC4zLTcuMSAxMy4zbC0xMS44IDcuOSA4LjQgNC4yem0tOC42IDQ5LjRsLTEyLjktNi40LTEyLjkgNi40Yy0xMi42IDYuMy0yNi41IDkuNi00MC41IDkuNi0zLjYgMC03LjEtLjItMTAuNi0uNmwwIC42YzAgMzUuMyAyOC43IDY0IDY0IDY0bDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMTYwIDAgMC02NGMwLTIzLjcgMTIuOS00NC40IDMyLTU1LjQgOS40LTUuNCAyMC4zLTguNiAzMi04LjZsMC0xNmMwLTI2LjUgMjEuNS00OCA0OC00OCA4LjggMCAxNiA3LjIgMTYgMTZsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtOTkuN2MwLTQ4LjItMzAuOC05MS03Ni42LTEwNi4zbC04LjUtMi44Yy04LTIuNy0xMi42LTExLjEtMTAuNC0xOS4zczEwLjMtMTMuMiAxOC42LTExLjZsMTkuOSA0QzU3NiA4Ni4xIDY0MCAxNjQuMiA2NDAgMjU0LjlsMCAxLjEgMCAwYzAgMTIzLjctMTAwLjMgMjI0LTIyNCAyMjRsLTE2MC42IDBDMTMyIDQ4MCAzMiAzODAgMzIgMjU2LjZsMC0zOS44Yy0xMC4xLTE0LjYtMTYtMzIuMy0xNi01MS40bDAtMjEuNCAwLTEuNEM2LjcgMTM5LjMgMCAxMzAuNSAwIDEyMCAwIDEwNi43IDEwLjcgOTYgMjQgOTZsMi44IDBDNDQuOCA1OC4yIDgzLjMgMzIgMTI4IDMybDY0IDBjNDQuNyAwIDgzLjIgMjYuMiAxMDEuMiA2NGwyLjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNCAwIDEwLjUtNi43IDE5LjMtMTYgMjIuNmwwIDEuNCAwIDIxLjRjMCAxLjQgMCAyLjgtLjEgNC4zIDEyLTYuMiAyNS43LTkuNiA0MC4xLTkuNmw4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA4IDU2LjQgMGMtMTUuMiAxNy0yNC40IDM5LjQtMjQuNCA2NGwtMzIgMGMtNDIuMyAwLTc4LjItMjcuNC05MS02NS4zLTUuMSAuOS0xMC4zIDEuMy0xNS42IDEuMy0xNC4xIDAtMjcuOS0zLjMtNDAuNS05LjZ6TTk2IDEyOGExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6bTExMiAxNmExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAweiJdCiAgICB9OwogICAgZmFDaXJjbGVDaGV2cm9uTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtY2hldnJvbi1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNoZXZyb24tY2lyY2xlLWxlZnQiXSwgImYxMzciLCAiTTUxMiAyNTZhMjU2IDI1NiAwIDEgMCAtNTEyIDAgMjU2IDI1NiAwIDEgMCA1MTIgMHpNMjcxIDEzNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTg3IDg3IDg3IDg3YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMMTY3IDI3M2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlMMjcxIDEzNXoiXQogICAgfTsKICAgIGZhQ2hldnJvbkNpcmNsZUxlZnQgPSBmYUNpcmNsZUNoZXZyb25MZWZ0OwogICAgZmFDaXJjbGVRdWVzdGlvbjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXF1ZXN0aW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxMDgsICJxdWVzdGlvbi1jaXJjbGUiXSwgImYwNTkiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTMzNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDQ3LjItMzYgNjcuMi01NiA3NC41bDAgMy44YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtOC4xYzAtMjAuNSAxNC44LTM1LjIgMzAuMS00MC4yIDYuNC0yLjEgMTMuMi01LjUgMTguMi0xMC4zIDQuMy00LjIgNy43LTEwIDcuNy0xOS42IDAtMTcuNy0xNC4zLTMyLTMyLTMyek0yMjQgMzY4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYVF1ZXN0aW9uQ2lyY2xlMiA9IGZhQ2lyY2xlUXVlc3Rpb24yOwogICAgZmFXYWxraWVUYWxraWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2Fsa2llLXRhbGtpZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmOGVmIiwgIk04OC0zMmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDcyIDQ4IDBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwzMiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2MC45YzAgOS45LTIuMyAxOS43LTYuOCAyOC42bC0yMC4yIDQwLjRjLTMuMyA2LjctNS4xIDE0LTUuMSAyMS41bDAgODQuN2MwIDM1LjMtMjguNyA2NC02NCA2NEw5NiA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtODQuN2MwLTcuNS0xLjctMTQuOC01LjEtMjEuNUw2LjggMzAxLjVDMi4zIDI5Mi42IDAgMjgyLjggMCAyNzIuOUwwIDExMkMwIDg1LjUgMjEuNSA2NCA0OCA2NGwxNiAwIDAtNzJjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTMyIDE3NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFVc2VyR3JvdXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1ncm91cCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODEwMSwgInVzZXItZnJpZW5kcyJdLCAiZjUwMCIsICJNNjQgMTI4YTExMiAxMTIgMCAxIDEgMjI0IDAgMTEyIDExMiAwIDEgMSAtMjI0IDB6TTAgNDY0YzAtOTcuMiA3OC44LTE3NiAxNzYtMTc2czE3NiA3OC44IDE3NiAxNzZsMCA2YzAgMjMuMi0xOC44IDQyLTQyIDQyTDQyIDUxMmMtMjMuMiAwLTQyLTE4LjgtNDItNDJsMC02ek00MzIgNjRhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6bTAgMjQwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0bDAgMjIuNGMwIDIzLTE4LjYgNDEuNi00MS42IDQxLjZsLTE0NC44IDBjNi42LTEyLjUgMTAuNC0yNi44IDEwLjQtNDJsMC02YzAtNTEuNS0xNy40LTk4LjktNDYuNS0xMzYuNyAyMi42LTE0LjcgNDkuNi0yMy4zIDc4LjUtMjMuM3oiXQogICAgfTsKICAgIGZhVXNlckZyaWVuZHMgPSBmYVVzZXJHcm91cDsKICAgIGZhSG91c2VDaGltbmV5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWNoaW1uZXkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MzQ5OSwgImhvbWUtbGciXSwgImUzYWYiLCAiTTIzNC4yIDguNmMxMi4zLTExLjQgMzEuMy0xMS40IDQzLjUgMEwzNjggOTIuMyAzNjggODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEwMS41IDM3LjggMzUuMWM5LjYgOSAxMi44IDIyLjkgOCAzNS4xUzQ5My4yIDI3MiA0ODAgMjcybC0xNiAwIDAgMTc2YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yODggMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4ek0yNDAgMzIwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2IDEyOCAwIDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTMyIDB6Il0KICAgIH07CiAgICBmYUhvbWVMZyA9IGZhSG91c2VDaGltbmV5OwogICAgZmFSaWdodEZyb21CcmFja2V0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJpZ2h0LWZyb20tYnJhY2tldCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzaWduLW91dC1hbHQiXSwgImYyZjUiLCAiTTUwNSAyNzNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlMMzYxIDk1Yy02LjktNi45LTE3LjItOC45LTI2LjItNS4yUzMyMCAxMDIuMyAzMjAgMTEybDAgODAtMTEyIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMzJjMCAyNi41IDIxLjUgNDggNDggNDhsMTEyIDAgMCA4MGMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJzMTkuMyAxLjcgMjYuMi01LjJMNTA1IDI3M3pNMTYwIDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDk2IDMyQzQzIDMyIDAgNzUgMCAxMjhMMCAzODRjMCA1MyA0MyA5NiA5NiA5Nmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAweiJdCiAgICB9OwogICAgZmFTaWduT3V0QWx0ID0gZmFSaWdodEZyb21CcmFja2V0OwogICAgZmFGaWxlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MTk2LCAxMjg0NTksIDYxNDYyXSwgImYxNWIiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjc3LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjU4LjcgMTguN0MyNDYuNyA2LjcgMjMwLjUgMCAyMTMuNSAwTDY0IDB6TTMyNS41IDE3NkwyMzIgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyMDggNTguNSAzMjUuNSAxNzZ6Il0KICAgIH07CiAgICBmYVBsYW5lU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbmUtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTA2OSIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTgzLjQtMTgzLjQgNy4xLTcuNyAxMjcuMyAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2cy0yNS4xLTU2LTU2LTU2TDM5Mi43IDIwMCAyMzMuNSAyNi40QzIyNy41IDE5LjggMjE4LjkgMTYgMjA5LjkgMTZsLTQzLjcgMGMtMTAuOSAwLTE4LjYgMTAuNy0xNS4yIDIxLjFMMTc1LjEgMTA5LjIgNDEtMjQuOXpNMTMwLjIgMjAwbC0yNC42IDAtNTIuOC02NmMtMy0zLjgtNy42LTYtMTIuNS02bC0xOS44IDBjLTEwLjQgMC0xOCA5LjgtMTUuNSAxOS45TDMyIDI1NiA1IDM2NC4xQzIuNCAzNzQuMiAxMC4xIDM4NCAyMC41IDM4NGwxOS44IDBjNC45IDAgOS41LTIuMiAxMi41LTZsNTIuOC02NiA5OS43IDAtNTQuMyAxNjIuOWMtMy41IDEwLjQgNC4zIDIxLjEgMTUuMiAyMS4xbDQzLjcgMGM5IDAgMTcuNS0zLjggMjMuNi0xMC40TDMyMC43IDM5MC41IDEzMC4yIDIwMHoiXQogICAgfTsKICAgIGZhQ2xvdWRTaG93ZXJzSGVhdnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQtc2hvd2Vycy1oZWF2eSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzQwIiwgIk05NiAzMjBjLTUzIDAtOTYtNDMtOTYtOTYgMC00Mi41IDI3LjYtNzguNiA2NS45LTkxLjItMS4zLTYuNy0xLjktMTMuNy0xLjktMjAuOCAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMiA0My4xIDAgODAuNSAyNC4zIDk5LjIgNjAgMTQuNy0xNy4xIDM2LjUtMjggNjAuOC0yOCA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDUuNS0uNiAxMC44LTEuNiAxNiAuNSAwIDEuMSAwIDEuNiAwIDUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2TDk2IDMyMHptNi44IDc5LjZsLTMyIDk2QzY2LjYgNTA4LjIgNTMgNTE1IDQwLjQgNTEwLjhTMjEgNDkzIDI1LjIgNDgwLjRsMzItOTZDNjEuNCAzNzEuOCA3NSAzNjUgODcuNiAzNjkuMlMxMDcgMzg3IDEwMi44IDM5OS42em0xMjAgMGwtMzIgOTZjLTQuMiAxMi42LTE3LjggMTkuNC0zMC40IDE1LjJTMTQxIDQ5MyAxNDUuMiA0ODAuNGwzMi05NmM0LjItMTIuNiAxNy44LTE5LjQgMzAuNC0xNS4yUzIyNyAzODcgMjIyLjggMzk5LjZ6bTExMiAwbC0zMiA5NmMtNC4yIDEyLjYtMTcuOCAxOS40LTMwLjQgMTUuMlMyNTMgNDkzIDI1Ny4yIDQ4MC40bDMyLTk2YzQuMi0xMi42IDE3LjgtMTkuNCAzMC40LTE1LjJTMzM5IDM4NyAzMzQuOCAzOTkuNnptMTIwIDBsLTMyIDk2Yy00LjIgMTIuNi0xNy44IDE5LjQtMzAuNCAxNS4yUzM3MyA0OTMgMzc3LjIgNDgwLjRsMzItOTZjNC4yLTEyLjYgMTcuOC0xOS40IDMwLjQtMTUuMlM0NTkgMzg3IDQ1NC44IDM5OS42eiJdCiAgICB9OwogICAgZmFQZXJzb25GYWxsaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1mYWxsaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NDYiLCAiTTMyMCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDUuNGMwIDQ1LTIzLjYgODYuNi02Mi4xIDEwOS44bC00LjYgMi44QzEzMS40IDE4NC43IDk2IDI0Ny4xIDk2IDMxNC42TDk2IDM4NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjkuNGMwLTE2LjcgMy4zLTMzIDkuNC00OEwzNTkuMiA1MDAuMmMxMS4xIDEzLjcgMzEuMyAxNS44IDQ1IDQuN3MxNS44LTMxLjMgNC43LTQ1TDI5NS4yIDMyMCA0MDAgMzIwIDQzOC40IDM3MS4yYzEwLjYgMTQuMSAzMC43IDE3IDQ0LjggNi40czE3LTMwLjcgNi40LTQ0LjhsLTQzLjItNTcuNkM0MzcuMyAyNjMuMSA0MjMuMSAyNTYgNDA4IDI1NmwtODkgMC02Mi45LTc1LjVjNDAuMy0zNiA2My45LTg3LjkgNjMuOS0xNDMuMWwwLTUuNHpNMTA0IDE0NGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnoiXQogICAgfTsKICAgIGZhVHVybkRvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHVybi1kb3duIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTA1NDksICJsZXZlbC1kb3duLWFsdCJdLCAiZjNiZSIsICJNMTY5LjQgNTAyLjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVMzMzIuOSAzMjAgMzIwIDMyMGwtNjQgMCAwLTE2MEMyNTYgNzEuNiAxODQuNCAwIDk2IDBMMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJMMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYwLTY0IDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDEyOCAxMjh6Il0KICAgIH07CiAgICBmYUxldmVsRG93bkFsdCA9IGZhVHVybkRvd247CiAgICBmYVVwUmlnaHRBbmREb3duTGVmdEZyb21DZW50ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXAtcmlnaHQtYW5kLWRvd24tbGVmdC1mcm9tLWNlbnRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJleHBhbmQtYWx0Il0sICJmNDI0IiwgIk0zNDQgMEw0ODggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE0NGMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC0zOS0zOS04NyA4N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTMyLTMyYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw4Ny04Ny0zOS0zOWMtNi45LTYuOS04LjktMTcuMi01LjItMjYuMlMzMzQuMyAwIDM0NCAwek0xNjggNTEyTDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMCAzNDRjMC05LjcgNS44LTE4LjUgMTQuOC0yMi4yUzM0LjEgMzIwLjIgNDEgMzI3bDM5IDM5IDg3LTg3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDMyIDMyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC04NyA4NyAzOSAzOWM2LjkgNi45IDguOSAxNy4yIDUuMiAyNi4yUzE3Ny43IDUxMiAxNjggNTEyeiJdCiAgICB9OwogICAgZmFFeHBhbmRBbHQgPSBmYVVwUmlnaHRBbmREb3duTGVmdEZyb21DZW50ZXI7CiAgICBmYVVzZXJUYWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci10YWciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjUwNyIsICJNMjU2LjEgOGExMjAgMTIwIDAgMSAxIDAgMjQwIDEyMCAxMjAgMCAxIDEgMC0yNDB6TTIyNi40IDMwNGw1OS40IDBjNi43IDAgMTMuMiAuNCAxOS43IDEuMS0uOSA0LjktMS40IDkuOS0xLjQgMTVsMCA5Mi4xYzAgMjUuNSAxMC4xIDQ5LjkgMjguMSA2Ny45bDMxLjkgMzEuOS0yODYuMyAwYy0xNi40IDAtMjkuNy0xMy4zLTI5LjctMjkuNyAwLTk4LjUgNzkuOC0xNzguMyAxNzguMy0xNzguM3pNMzUyLjEgNDEyLjJsMC05Mi4xYzAtMTcuNyAxNC4zLTMyIDMyLTMybDkyLjEgMGMxMi43IDAgMjQuOSA1LjEgMzMuOSAxNC4xbDk2IDk2YzE4LjcgMTguNyAxOC43IDQ5LjEgMCA2Ny45bC03Ni4xIDc2LjFjLTE4LjcgMTguNy00OS4xIDE4LjctNjcuOSAwbC05Ni05NmMtOS05LTE0LjEtMjEuMi0xNC4xLTMzLjl6bTEwNC00NC4yYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYUhhbmRTcGFya2xlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXNwYXJrbGVzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUwNWQiLCAiTTMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjA4YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0xNzZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE3NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMTEyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNzguMmMtMTkuMiA1LjQtMzQuNyAyMC40LTQwLjQgNDAuM2wtNi41IDIyLjctMjIuNyA2LjVjLTI1LjIgNy4yLTQyLjUgMzAuMi00Mi41IDU2LjQgMCAyMi4xIDEyLjQgNDIgMzEuNCA1MS45LTI3LjUgMTcuOC02MC4yIDI4LjEtOTUuNCAyOC4xbC0xOS4yIDBjLTU5LjYgMC0xMTYuOS0yMi45LTE2MC02NEw3Ni40IDM0MWMtMTYtMTUuMi0xNi42LTQwLjYtMS40LTU2LjZzNDAuNi0xNi42IDU2LjYtMS40bDYwLjUgNTcuNmMwLTEuNS0uMS0zLjEtLjEtNC42bDAtMjcyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNzZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTIwOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptLTcuMyAzMjYuNmMtMS4xLTMuOS00LjctNi42LTguNy02LjZzLTcuNiAyLjctOC43IDYuNmwtNy4zIDI1LjQtMjUuNCA3LjNjLTMuOSAxLjEtNi42IDQuNy02LjYgOC43czIuNyA3LjYgNi42IDguN2wyNS40IDcuMyA3LjMgMjUuNGMxLjEgMy45IDQuNyA2LjYgOC43IDYuNnM3LjYtMi43IDguNy02LjZsNy4zLTI1LjQgMjUuNC03LjNjMy45LTEuMSA2LjYtNC43IDYuNi04LjdzLTIuNy03LjYtNi42LTguN2wtMjUuNC03LjMtNy4zLTI1LjR6TTEwNCAxMjBsNDguMyAxMy44YzQuNiAxLjMgNy43IDUuNSA3LjcgMTAuMnMtMy4xIDguOS03LjcgMTAuMkwxMDQgMTY4IDkwLjIgMjE2LjNjLTEuMyA0LjYtNS41IDcuNy0xMC4yIDcuN3MtOC45LTMuMS0xMC4yLTcuN0w1NiAxNjggNy43IDE1NC4yQzMuMSAxNTIuOSAwIDE0OC43IDAgMTQ0czMuMS04LjkgNy43LTEwLjJMNTYgMTIwIDY5LjggNzEuN0M3MS4xIDY3LjEgNzUuMyA2NCA4MCA2NHM4LjkgMy4xIDEwLjIgNy43TDEwNCAxMjB6TTU4NCA0MDhsNDguMyAxMy44YzQuNiAxLjMgNy43IDUuNSA3LjcgMTAuMnMtMy4xIDguOS03LjcgMTAuMkw1ODQgNDU2IDU3MC4yIDUwNC4zYy0xLjMgNC42LTUuNSA3LjctMTAuMiA3LjdzLTguOS0zLjEtMTAuMi03LjdMNTM2IDQ1NiA0ODcuNyA0NDIuMmMtNC42LTEuMy03LjctNS41LTcuNy0xMC4yczMuMS04LjkgNy43LTEwLjJMNTM2IDQwOCA1NDkuOCAzNTkuN2MxLjMtNC42IDUuNS03LjcgMTAuMi03LjdzOC45IDMuMSAxMC4yIDcuN0w1ODQgNDA4eiJdCiAgICB9OwogICAgZmFBcnJvd3NUb0RvdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtdG8tZG90IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YmUiLCAiTTI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgMzIgMGMxMi45IDAgMjQuNiA3LjggMjkuNiAxOS44czIuMiAyNS43LTYuOSAzNC45bC02NCA2NGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTY0LTY0Yy05LjItOS4yLTExLjktMjIuOS02LjktMzQuOVMxNzkuMSA2NCAxOTIgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xNjkuNCAzOTMuNGw2NC02NGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw2NCA2NGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOVMzMzIuOSA0NDggMzIwIDQ0OGwtMzIgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMzIgMGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOHMtMi4yLTI1LjcgNi45LTM0Ljl6TTMyIDIyNGwzMiAwIDAtMzJjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnMyNS43LTIuMiAzNC45IDYuOWw2NCA2NGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtNjQgNjRjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzY0IDMzMi45IDY0IDMyMGwwLTMyLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTI5Ny40IDU0LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDY0LTY0YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45UzQ0OCAxNzkuMSA0NDggMTkybDAgMzIgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDMyYzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45bC02NC02NHpNMjU2IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUZhY2VTYWRDcnkyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Utc2FkLWNyeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU1NywgInNhZC1jcnkiXSwgImY1YjMiLCAiTTM1MiA0OTMuNGMtMjkuNiAxMi02Mi4xIDE4LjYtOTYgMTguNnMtNjYuNC02LjYtOTYtMTguNkwxNjAgMjk2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTcxLjdDNDQuNCA0MjEuNiAwIDM0NCAwIDI1NiAwIDExNC42IDExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTZjMCA4OC00NC40IDE2NS42LTExMiAyMTEuN0w0MDAgMjk2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTk3LjR6TTE1MiAxOTZsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMCA5LTIwIDIwLTIwem0xNzIgMjBjMC0xMSA5LTIwIDIwLTIwbDE2IDBjMTEgMCAyMCA5IDIwIDIwczkgMjAgMjAgMjAgMjAtOSAyMC0yMGMwLTMzLjEtMjYuOS02MC02MC02MGwtMTYgMGMtMzMuMSAwLTYwIDI2LjktNjAgNjAgMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjB6TTIwOCAzMzZsMCAzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4bDAtMzJjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6Il0KICAgIH07CiAgICBmYVNhZENyeTIgPSBmYUZhY2VTYWRDcnkyOwogICAgZmFEb25nU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb25nLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTE2OSIsICJNMjg4LTE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTEwNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEwNCAwIDAgNzIuMmMtMjIuOS0xNS4zLTUwLjQtMjQuMi04MC0yNC4yLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0Uzk2LjUgNDMyIDE3NiA0MzJjMzAgMCA1Ny44LTkuMSA4MC44LTI0LjggMy4zIDE0LjIgMTYgMjQuOCAzMS4yIDI0LjggMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMDQgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDAgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek05NiAyODhhODAgODAgMCAxIDEgMTYwIDAgODAgODAgMCAxIDEgLTE2MCAwek0yNCA0NjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzM2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMjQgNDY0eiJdCiAgICB9OwogICAgZmFQZW9wbGVMaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlb3BsZS1saW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MzQiLCAiTTI4OCAwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4em05NiAzMTJjMCAyNS0xMi43IDQ3LTMyIDU5LjlsMCA0NC4xLTEyOCAwIDAtNDQuMUMyMDQuNyAzNTkgMTkyIDMzNyAxOTIgMzEybDAtNDBjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDQwem0xNiAxMDRsMC0yNy4zYzE5LjktMjIuNSAzMi01Mi4yIDMyLTg0LjdsMC0zMmMwLTI2LjctNy4zLTUxLjYtMTkuOS03My4xIDExLjEtNC41IDIzLjItNi45IDM1LjktNi45IDUzIDAgOTYgNDMgOTYgOTZsMCAzMmMwIDIzLjctMTIuOSA0NC40LTMyIDU1LjRsMCA0MC42LTExMiAwek02NCAzNzUuNEM0NC45IDM2NC40IDMyIDM0My43IDMyIDMyMGwwLTMyYzAtNTMgNDMtOTYgOTYtOTYgMTIuNyAwIDI0LjggMi41IDM1LjkgNi45LTEyLjYgMjEuNC0xOS45IDQ2LjQtMTkuOSA3My4xbDAgMzJjMCAzMi41IDEyLjEgNjIuMSAzMiA4NC43bDAgMjcuMy0xMTIgMCAwLTQwLjZ6TTEyOCAzMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnptMzIwIDBhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTI0IDQ2NGw1MjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYVNxdWFyZVJzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcnNzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInJzcy1zcXVhcmUiXSwgImYxNDMiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTk2IDEzNmMwLTEzLjMgMTAuNy0yNCAyNC0yNCAxMzcgMCAyNDggMTExIDI0OCAyNDggMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xMTAuNS04OS41LTIwMC0yMDAtMjAwLTEzLjMgMC0yNC0xMC43LTI0LTI0em0wIDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0IDgzLjkgMCAxNTIgNjguMSAxNTIgMTUyIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNTcuNC00Ni42LTEwNC0xMDQtMTA0LTEzLjMgMC0yNC0xMC43LTI0LTI0em0wIDEyMGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdCiAgICB9OwogICAgZmFSc3NTcXVhcmUgPSBmYVNxdWFyZVJzczsKICAgIGZhQ2FsZW5kYXJNaW51czIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXItbWludXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI3MiIsICJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0yNCAyNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFDaGFydERpYWdyYW0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtZGlhZ3JhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNjk1IiwgIk04MCAzMkM1My41IDMyIDMyIDUzLjUgMzIgODBzMjEuNSA0OCA0OCA0OGwxNTIgMCAwIDQwLTQ4IDQ4LTcyIDBjLTM5LjggMC03MiAzMi4yLTcyIDcybDAgNjQtOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOCAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsNzIgMCA0OCA0OCAwIDQwLTggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTggMCAwLTQwIDQ4LTQ4IDcyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA2NC04IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC04IDAgMC02NGMwLTM5LjgtMzIuMi03Mi03Mi03MmwtNzIgMC00OC00OCAwLTQwIDE1MiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4TDgwIDMyeiJdCiAgICB9OwogICAgZmFGYWNlVGlyZWQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtdGlyZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTUsICJ0aXJlZCJdLCAiZjVjOCIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NC43IDMyOC43YzIyLTIyIDUzLjktNDAuNyA5MS4zLTQwLjdzNjkuMyAxOC43IDkxLjMgNDAuN2MxMS4xIDExLjEgMjAuMSAyMy40IDI2LjQgMzUuNCA2LjIgMTEuNyAxMC4zIDI0LjQgMTAuMyAzNS45IDAgNS4yLTIuNiAxMC4yLTYuOSAxMy4ycy05LjggMy43LTE0LjcgMS44bC0yMC41LTcuN2MtMjYuOS0xMC4xLTU1LjUtMTUuMy04NC4zLTE1LjNsLTMuMiAwYy0yOC44IDAtNTcuMyA1LjItODQuMyAxNS4zTDE0OS42IDQxNWMtNC45IDEuOC0xMC40IDEuMi0xNC43LTEuOFMxMjggNDA1LjIgMTI4IDQwMGMwLTExLjYgNC4yLTI0LjIgMTAuMy0zNS45IDYuMy0xMiAxNS4zLTI0LjMgMjYuNC0zNS40ek0xMjIuNiAxNTkuMmM0LjUtNi44IDEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDIwOCAxMjUuOCAxODAuM2MtNi4yLTUuMi03LjYtMTQuMy0zLjEtMjEuMXptMjYzLjYgMjEuMUwzNTMgMjA4IDM4Ni4yIDIzNS43YzYuMiA1LjIgNy42IDE0LjMgMy4xIDIxLjFzLTEzLjMgOS4yLTIwLjYgNS41bC03OS42LTQwYy01LjQtMi43LTguOC04LjItOC44LTE0LjNzMy40LTExLjYgOC44LTE0LjNsNzkuNi00MGM3LjMtMy42IDE2LjEtMS4zIDIwLjYgNS41czMuMSAxNS45LTMuMSAyMS4xeiJdCiAgICB9OwogICAgZmFUaXJlZDIgPSBmYUZhY2VUaXJlZDI7CiAgICBmYUhhbmRQb2ludFJpZ2h0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBvaW50LXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwYTQiLCAiTTQ4MCA5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjA4IDAgMC02NCAyMDggMHpNMzIwIDI4OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2NCAwem02NC02NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNDggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyek0yODggMzg0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDB6bS04OC05NmwuNiAwYy01LjQgOS40LTguNiAyMC4zLTguNiAzMiAwIDEzLjIgNCAyNS40IDEwLjggMzUuNi0yNC45IDguNy00Mi44IDMyLjUtNDIuOCA2MC40IDAgMTEuNyAzLjEgMjIuNiA4LjYgMzJsLTguNiAwQzcxLjYgNDQ4IDAgMzc2LjQgMCAyODhsMC02MS43YzAtNDIuNCAxNi45LTgzLjEgNDYuOS0xMTMuMWwxMS42LTExLjZDODIuNSA3Ny41IDExNS4xIDY0IDE0OSA2NGwyNyAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgODhjMCAyMi4xLTE3LjkgNDAtNDAgNDBzLTQwLTE3LjktNDAtNDBsMC01NmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDU2YzAgMzkuOCAzMi4yIDcyIDcyIDcyeiJdCiAgICB9OwogICAgZmFBcnJvd1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbODU5M10sICJmMDYyIiwgIk0yMTQuNiAxNy40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxNjAgMTE3LjMgMTYwIDQ4OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzcwLjcgMTA1LjQgMTA1LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MHoiXQogICAgfTsKICAgIGZhQ3ViZXNTdGFja2VkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImN1YmVzLXN0YWNrZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRlNiIsICJNMTkyIDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NHptMzIgMzUybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTkyIDBsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zMjAgMTkybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptLTE4Mi42LTMuOWMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw0NS4zIDQ1LjNjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTQ1LjMgNDUuM2MtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBMOTIuMSAyNzguNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsNDUuMy00NS4zek0zMiAzODRsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFDaGlsZENvbWJhdGFudCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGlsZC1jb21iYXRhbnQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiY2hpbGQtcmlmbGUiXSwgImU0ZTAiLCAiTTE3Ni41IDEyOGE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHptLTE2IDM1MmwwLTk2IDMyIDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTkyLjIgMjAuOSAzMy4yYzkuNCAxNSAyOS4yIDE5LjQgNDQuMSAxMHMxOS40LTI5LjIgMTAtNDQuMWwtMzkuOS02My4zQzI2Ni44IDE4NCAyMjMuMyAxNjAgMTc2LjUgMTYwUzg2LjIgMTg0IDYxLjMgMjIzLjZMMjEuNCAyODdjLTkuNCAxNS00LjkgMzQuNyAxMCA0NC4xczM0LjcgNC45IDQ0LjEtMTBsMjAuOS0zMy4yIDAgMTkyLjJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpNNDQ4LjUgMGwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwwIDEwMC4zYy05LjYgNS41LTE2IDE1LjktMTYgMjcuN2wwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE0NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNiAwIDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2bDU5LjUgMGMxMC40IDAgMTgtOS44IDE1LjUtMTkuOWwtMjMtOTIuMSA0NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtNDggMCAwLTI2LjcgNTMuMS0xNy43YzYuNS0yLjIgMTAuOS04LjMgMTAuOS0xNS4ybDAtODQuNWMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDU2LTE2IDUuMyAwLTEwOS4zYzAtMTEuOC02LjQtMjIuMi0xNi0yNy43bDAtMTE2LjNjMC04LjgtNy4yLTE2LTE2LTE2eiJdCiAgICB9OwogICAgZmFDaGlsZFJpZmxlID0gZmFDaGlsZENvbWJhdGFudDsKICAgIGZhVmVzdFBhdGNoZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmVzdC1wYXRjaGVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwODYiLCAiTTIwMCAyOTMuOUwyMDAgNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAyNzAuNWMwLTkuNSAyLjgtMTguNyA4LjEtMjYuNmw0Ny45LTcxLjhjNS4zLTcuOSA4LjEtMTcuMSA4LjEtMjYuNkw2NCA0OEM2NCAyMS41IDg1LjUgMCAxMTIgMGwzLjUgMGMuMyAwIC42IDAgMSAwIC42IDAgMS4yIDAgMS44IDAgMTguOCAwIDM0LjEgOS43IDQ0LjEgMTguOCA5LjMgOC40IDI4LjUgMjEuMiA2MS43IDIxLjJzNTIuNC0xMi44IDYxLjctMjEuMmMxMC05LjEgMjUuMy0xOC44IDQ0LjEtMTguOCAuNiAwIDEuMiAwIDEuOCAwIC4zIDAgLjYgMCAxIDBMMzM2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5Ny41YzAgOS41IDIuOCAxOC43IDguMSAyNi42bDQ3LjkgNzEuOGM1LjMgNy45IDguMSAxNy4xIDguMSAyNi42TDQ0OCA0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEwNCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE3MC4xYzAtMy45IC41LTcuOCAxLjQtMTEuNkwzMDMuNiA2NS40QzI4NS45IDc3LjIgMjU5LjggODggMjI0IDg4cy02MS45LTEwLjgtNzkuNi0yMi42bDU0LjIgMjE2LjhjMSAzLjggMS40IDcuNyAxLjQgMTEuNnpNOTYgNDU2YTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHpNNjMuNSAyNTUuNWMtNC43IDQuNy00LjcgMTIuMyAwIDE3TDc5IDI4OCA2My41IDMwMy41Yy00LjcgNC43LTQuNyAxMi4zIDAgMTdzMTIuMyA0LjcgMTcgMEw5NiAzMDUgMTExLjUgMzIwLjVjNC43IDQuNyAxMi4zIDQuNyAxNyAwczQuNy0xMi4zIDAtMTdMMTEzIDI4OCAxMjguNSAyNzIuNWM0LjctNC43IDQuNy0xMi4zIDAtMTdzLTEyLjMtNC43LTE3IDBMOTYgMjcxIDgwLjUgMjU1LjVjLTQuNy00LjctMTIuMy00LjctMTcgMHpNMzA0IDI4MGwwIDQwYzAgOC44IDcuMiAxNiAxNiAxNmw0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04IDAgMC04YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0eiJdCiAgICB9OwogICAgZmFNYXJ0aW5pR2xhc3NFbXB0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXJ0aW5pLWdsYXNzLWVtcHR5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImdsYXNzLW1hcnRpbmkiXSwgImYwMDAiLCAiTTMyIDMyQzE5LjEgMzIgNy40IDM5LjggMi40IDUxLjhTLjIgNzcuNSA5LjQgODYuNmwyMTQuNiAyMTQuNiAwIDE0Ni43LTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC0xNDYuNyAyMTQuNi0yMTQuNmM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0OTIuOSAzMiA0ODAgMzJMMzIgMzJ6TTI1NiAyNDIuN0wxMDkuMyA5NiA0MDIuNyA5NiAyNTYgMjQyLjd6Il0KICAgIH07CiAgICBmYUdsYXNzTWFydGluaSA9IGZhTWFydGluaUdsYXNzRW1wdHk7CiAgICBmYU1hZ25ldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYWduZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjk1MjJdLCAiZjA3NiIsICJNMCAxNzZMMCAyODhDMCA0MTEuNyAxMDAuMyA1MTIgMjI0IDUxMlM0NDggNDExLjcgNDQ4IDI4OGwwLTExMi0xMjggMCAwIDExMmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NmwwLTExMi0xMjggMHptMC00OGwxMjggMCAwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRsMCA2NHptMzIwIDBsMTI4IDAgMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NHoiXQogICAgfTsKICAgIGZhUm9hZEJhcnJpZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9hZC1iYXJyaWVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NjIiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkw2NCAyNjYuMyAxNDkuMiA5NiA2NCA5NiA2NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNDA1LjIgOTZsLTc0LjMgMC01LjQgMTAuNy05MC42IDE4MS4zIDc0LjMgMCA1LjQtMTAuNyA5MC42LTE4MS4zek0zNjIuOCAyODhsNzQuMyAwIDUuNC0xMC43IDkwLjYtMTgxLjMtNzQuMyAwLTUuNCAxMC43LTkwLjYgMTgxLjN6TTIwMi44IDk2bC01LjQgMTAuNy05MC42IDE4MS4zIDc0LjMgMCA1LjQtMTAuNyA5MC42LTE4MS4zLTc0LjMgMHptMjg4IDE5Mmw4NS4yIDAgMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDUzLjctODUuMiAxNzAuM3oiXQogICAgfTsKICAgIGZhQ29tcGFzc0RyYWZ0aW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbXBhc3MtZHJhZnRpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZHJhZnRpbmctY29tcGFzcyJdLCAiZjU2OCIsICJNOTkuMyAyNTYuMWw2OS40LTExOS45Yy01LjYtMTIuMi04LjgtMjUuOC04LjgtNDAuMiAwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2YzAgMTQuMy0zLjEgMjcuOS04LjggNDAuMmw0NC40IDc2LjdjLTIzLjEgMjYtNTMuNyA0NS4xLTg4LjQgNTMuOEwyNTYgMTkxLjkgMTg3LjkgMzA5LjVjMjEuNSA2LjggNDQuMyAxMC41IDY4LjEgMTAuNSA3MC43IDAgMTMzLjgtMzIuNyAxNzQuOS04NCAxMS4xLTEzLjggMzEuMi0xNiA0NS01czE2IDMxLjIgNSA0NWMtNTIuNyA2NS44LTEzMy45IDEwOC0yMjQuOCAxMDgtMzUuNCAwLTY5LjQtNi40LTEwMC43LTE4LjFMOTguNyA0NjMuN0M5NCA0NzEuOCA4NyA0NzguNCA3OC42IDQ4Mi42TDIzLjIgNTEwLjNjLTUgMi41LTEwLjkgMi4yLTE1LjYtLjdTMCA1MDEuNSAwIDQ5NmwwLTU1LjRjMC04LjQgMi4yLTE2LjcgNi41LTI0LjFsNjAtMTAzLjdjLTEyLjgtMTEuMi0yNC42LTIzLjUtMzUuMy0zNi44LTExLjEtMTMuOC04LjgtMzMuOSA1LTQ1czMzLjktOC44IDQ1IDVjNS43IDcuMSAxMS44IDEzLjggMTguMiAyMC4xek0zODEuMSA0MDcuOWMzMi41LTEzIDYyLjQtMzEgODguOS01Mi45bDM1LjYgNjEuNWM0LjIgNy4zIDYuNSAxNS42IDYuNSAyNC4xbDAgNTUuNGMwIDUuNS0yLjkgMTAuNy03LjYgMTMuNnMtMTAuNiAzLjItMTUuNiAuN2wtNTUuNC0yNy43Yy04LjQtNC4yLTE1LjQtMTAuOC0yMC4xLTE4LjlsLTMyLjMtNTUuOHpNMjU2IDEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYURyYWZ0aW5nQ29tcGFzcyA9IGZhQ29tcGFzc0RyYWZ0aW5nOwogICAgZmFTcXVhcmVQZXJzb25Db25maW5lZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGVyc29uLWNvbmZpbmVkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU1NzciLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTk2IDExMmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem04MCAxMDRjMC0zMC45IDI1LjEtNTYgNTYtNTZzNTYgMjUuMSA1NiA1NmwwIDEwMi4xYzAgMzYuNC0yOS41IDY1LjktNjUuOSA2NS45LTE3LjUgMC0zNC4zLTYuOS00Ni42LTE5LjNsLTU0LjctNTQuNy0yOC4xIDU2LjNjLTcuOSAxNS44LTI3LjEgMjIuMi00Mi45IDE0LjNzLTIyLjItMjcuMS0xNC4zLTQyLjlsNDgtOTZjNC42LTkuMiAxMy4zLTE1LjYgMjMuNS0xNy4zczIwLjUgMS43IDI3LjggOWw0MS40IDQxLjQgMC01OC43eiJdCiAgICB9OwogICAgZmFQbGF0ZVdoZWF0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYXRlLXdoZWF0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NWEiLCAiTTE3NiAzMmM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNi00NC4yIDAtODAtMzUuOC04MC04MGwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnpNNTYgNjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRTNDIuNyA2NCA1NiA2NHpNMjQgMTM2bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDE4NGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptOCA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjcyIDQ4YzAtOC44IDcuMi0xNiAxNi0xNiA0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNi00NC4yIDAtODAtMzUuOC04MC04MGwwLTE2ek00MDAgMzJjNDQuMiAwIDgwIDM1LjggODAgODBsMCAxNmMwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODBsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2MGwwIDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwIDguOCAwIDE2IDcuMiAxNiAxNnpNMzUyIDE3NmM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDQ0LjItMzUuOCA4MC04MCA4MC04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MHptLTk2IDE2bDAgMTZjMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC00NC4yIDM1LjgtODAgODAtODAgOC44IDAgMTYgNy4yIDE2IDE2ek0zLjUgMzQ3LjZDMS42IDMzMi45IDEzIDMyMCAyNy44IDMyMGw0NTYuNCAwYzE0LjggMCAyNi4yIDEyLjkgMjQuNCAyNy42LTYuMyA1MC4yLTQ0LjQgODkuNC05Mi42IDk4LjRsMCAyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yYy00OC4yLTktODYuMy00OC4yLTkyLjUtOTguNHoiXQogICAgfTsKICAgIGZhU2lnbkhhbmdpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2lnbi1oYW5naW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNpZ24iXSwgImY0ZDkiLCAiTTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAzNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzUyIDAgMCAzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zNTItMzIgMEMxNC4zIDEyOCAwIDExMy43IDAgOTZTMTQuMyA2NCAzMiA2NGwzMiAwIDAtMzJDNjQgMTQuMyA3OC4zIDAgOTYgMHpNMjA4IDE3NmwyNDAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE0NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjQwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTQ0YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFTaWduID0gZmFTaWduSGFuZ2luZzsKICAgIGZhQ2FyQmF0dGVyeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXItYmF0dGVyeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJiYXR0ZXJ5LWNhciJdLCAiZjVkZiIsICJNODAgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmw5NiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDE2IDB6TTM5MiAxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAzMi0zMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMyIDAgMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzIgMzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzIgMCAwLTMyek02NCAyNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggMjE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHoiXQogICAgfTsKICAgIGZhQmF0dGVyeUNhciA9IGZhQ2FyQmF0dGVyeTsKICAgIGZhU2hpcnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hpcnQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjgwODUsICJ0LXNoaXJ0IiwgInRzaGlydCJdLCAiZjU1MyIsICJNMzIwLjIgMTEyYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDUzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w2MTcuNiAxNjkuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtNTAuNyA1MC43Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtNDEuNC00MS40IDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0xOTIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0yMjQtNDEuNCA0MS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMEwyMi45IDIxNC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM0wxNDEuNSA1MC43YzEyLTEyIDI4LjMtMTguNyA0NS4zLTE4LjdsNTMuNSAwYzAgNDQuMiAzNS44IDgwIDgwIDgweiJdCiAgICB9OwogICAgZmFUU2hpcnQgPSBmYVNoaXJ0OwogICAgZmFUc2hpcnQgPSBmYVNoaXJ0OwogICAgZmFQYXJhZ3JhcGggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFyYWdyYXBoIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTgyXSwgImYxZGQiLCAiTTE2MCAwTDQxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDE2LTQ4IDAgMCA0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNjAtNDggMEM3MS42IDMyMCAwIDI0OC40IDAgMTYwUzcxLjYgMCAxNjAgMHoiXQogICAgfTsKICAgIGZhRW52ZWxvcGVzQnVsayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlbnZlbG9wZXMtYnVsayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJtYWlsLWJ1bGsiXSwgImY2NzQiLCAiTTExMiAwQzg1LjUgMCA2NCAyMS41IDY0IDQ4bDAgMTYwIDgwIDAgMC0zMmMwLTUzIDQzLTk2IDk2LTk2bDIwOCAwIDAtMzJjMC0yNi41LTIxLjUtNDgtNDgtNDhMMTEyIDB6TTI0MCAxMjhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMzIgODAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMTEyIDE2MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTkyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yODggMHptMjAwIDY0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNDggMjU2Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDEwLjQgMTU2LjYgODYuMmMxLjEgLjYgMi4yIC45IDMuNCAuOXMyLjQtLjMgMy40LS45TDMyMCAzMTQuNCAzMjAgMzA0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDI1NnpNMzIwIDM2OS4yTDE4Ni42IDQ0Mi42Yy04LjEgNC41LTE3LjMgNi44LTI2LjYgNi44cy0xOC40LTIuNC0yNi42LTYuOEwwIDM2OS4yIDAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDIyNCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTQuOHoiXQogICAgfTsKICAgIGZhTWFpbEJ1bGsgPSBmYUVudmVsb3Blc0J1bGs7CiAgICBmYUd1aXRhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJndWl0YXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdhNiIsICJNNDY1IDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDM4MyA1NWMtMi40IDIuNC00LjMgNS4zLTUuNSA4LjVsLTE1LjQgNDEtNzcuNSA3Ny42Yy00NS4xLTI5LjQtOTkuMy0zMC4yLTEzMSAxLjYtMTEgMTEtMTggMjQuNi0yMS40IDM5LjYtMy43IDE2LjYtMTkuMSAzMC43LTM2LjEgMzEuNi0yNS42IDEuMy00OS4zIDEwLjctNjcuMyAyOC42LTQ0LjggNDQuOC0zNi40IDEyNS44IDE4LjcgMTgwLjlTMTgzLjYgNTI4IDIyOC40IDQ4My4yYzE3LjktMTcuOSAyNy40LTQxLjcgMjguNi02Ny4zIC45LTE3IDE1LTMyLjMgMzEuNi0zNi4xIDE1LTMuNCAyOC42LTEwLjUgMzkuNi0yMS40IDMxLjgtMzEuOCAzMS04NS45IDEuNi0xMzFsNzcuNi03Ny42IDQxLTE1LjRjMy4yLTEuMiA2LjEtMy4xIDguNS01LjVsNDgtNDhjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlMNDY1IDd6TTIwOCAyNTZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2eiJdCiAgICB9OwogICAgZmFTdWl0Y2FzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdWl0Y2FzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTUyM10sICJmMGYyIiwgIk0yMDAgNDhsMTEyIDBjNC40IDAgOCAzLjYgOCA4bDAgNDAtMTI4IDAgMC00MGMwLTQuNCAzLjYtOCA4LTh6bS01NiA4bDAgNDI0IDIyNCAwIDAtNDI0YzAtMzAuOS0yNS4xLTU2LTU2LTU2TDIwMCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NnpNNDE2IDk2bDAgMzg0IDMyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTMyIDB6TTk2IDQ4MGwwLTM4NC0zMiAwQzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMiAweiJdCiAgICB9OwogICAgZmFDaXJjbGVVcDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE0NjcsICJhcnJvdy1hbHQtY2lyY2xlLXVwIl0sICJmMzViIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptMTEuMy0zODcuM2wxMDQgMTA0YzQuNiA0LjYgNS45IDExLjUgMy41IDE3LjRTMzY2LjUgMjU2IDM2MCAyNTZsLTU2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05Ni01NiAwYy02LjUgMC0xMi4zLTMuOS0xNC44LTkuOXMtMS4xLTEyLjkgMy41LTE3LjRsMTA0LTEwNGM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHoiXQogICAgfTsKICAgIGZhQXJyb3dBbHRDaXJjbGVVcDIgPSBmYUNpcmNsZVVwMjsKICAgIGZhRiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTAyXSwgIjQ2IiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjAgMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwIDAtMTI4IDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyeiJdCiAgICB9OwogICAgZmFYbWFya3NMaW5lcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ4bWFya3MtbGluZXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU5YSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDU3NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyem0wIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1NzYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0MTZ6TTcgMTY3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw1NSA1NS01NSA1NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU1LTU1IDU1IDU1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTUtNTUgNTUtNTVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTUgNTUtNTUtNTVjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwek0yNjUgMTY3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDU1IDU1LTU1IDU1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNTUtNTUgNTUgNTVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01NS01NSA1NS01NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01NSA1NS01NS01NXpNNDU1IDE2N2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNTUgNTUtNTUgNTVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw1NS01NSA1NSA1NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU1LTU1IDU1LTU1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTU1IDU1LTU1LTU1Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHoiXQogICAgfTsKICAgIGZhRWFydGhPY2VhbmlhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVhcnRoLW9jZWFuaWEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZ2xvYmUtb2NlYW5pYSJdLCAiZTQ3YiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE5MiAxNTAuNmMwLTEyLjUgMTAuMS0yMi42IDIyLjYtMjIuNmw0MS40IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE4LjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTE2LTE2Yy00LjItNC4yLTYuNi0xMC02LjYtMTZ6TTQzMiAyNTZjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTQxMS4zIDM3OS4zbC0zMiAzMmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzMi0zMmM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6TTIyNCA0MzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnptLTk2LTgwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE4LjdjMC04LjUgMy40LTE2LjYgOS40LTIyLjZsNDgtNDhjNC4yLTQuMiAxMC02LjYgMTYtNi42bDYuNiAwYzguOCAwIDE2IDcuMiAxNiAxNnM3LjIgMTYgMTYgMTYgMTYtNy4yIDE2LTE2IDcuMi0xNiAxNi0xNmw2LjYgMGM2IDAgMTEuOCAyLjQgMTYgNi42bDQ4IDQ4YzYgNiA5LjQgMTQuMSA5LjQgMjIuNmwwIDUwLjdjMCAxNy43LTE0LjMgMzItMzIgMzJsLTUwLjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTEzLjMtMTMuM2MtNi02LTE0LjEtOS40LTIyLjYtOS40TDEyOCAzNTJ6Il0KICAgIH07CiAgICBmYUdsb2JlT2NlYW5pYSA9IGZhRWFydGhPY2VhbmlhOwogICAgZmFDb21tZW50U2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudC1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGIzIiwgIk00MS0yNUMzMS42LTM0LjMgMTYuNC0zNC4zIDctMjVTLTIuMy0uNCA3IDlMNTM1IDUzN2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTk2LjYtOTYuNmM0NC40LTQzLjIgNzEuNi0xMDEuOCA3MS42LTE2Ni41IDAtMTMyLjUtMTE0LjYtMjQwLTI1Ni0yNDAtNjMgMC0xMjAuOCAyMS40LTE2NS40IDU2LjhMNDEtMjV6bTE5LjQgMTU1QzQyLjIgMTYzIDMyIDIwMC4zIDMyIDIzOS45IDMyIDI5NC4yIDUxLjIgMzQ0LjIgODMuNiAzODQuNEwzNC44IDQ3Ni43Yy00LjggOS0zLjMgMjAgMy42IDI3LjVTNTYuMSA1MTQgNjUuNSA1MTBsMTE4LjQtNTAuN2MzMS44IDEzLjMgNjcuMSAyMC43IDEwNC4xIDIwLjcgMzYuNCAwIDcwLjktNy4xIDEwMi4zLTE5LjlMNjAuMyAxMzAuMXoiXQogICAgfTsKICAgIGZhUGxheSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGF5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTY1NF0sICJmMDRiIiwgIk05MS4yIDM2LjljLTEyLjQtNi44LTI3LjQtNi41LTM5LjYgLjdTMzIgNTcuOSAzMiA3MmwwIDM2OGMwIDE0LjEgNy41IDI3LjIgMTkuNiAzNC40czI3LjIgNy41IDM5LjYgLjdsMzM2LTE4NGMxMi44LTcgMjAuOC0yMC41IDIwLjgtMzUuMXMtOC0yOC4xLTIwLjgtMzUuMWwtMzM2LTE4NHoiXQogICAgfTsKICAgIGZhVmlhbENpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZpYWwtY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1OTYiLCAiTTMyIDMyQzMyIDE0LjMgNDYuMyAwIDY0IDBMMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxNjEuNGMtNjYuMSAzMC4zLTExMiA5Ny4xLTExMiAxNzQuNiAwIDM5LjcgMTIgNzYuNiAzMi43IDEwNy4yLTEwLjMgMy4xLTIxLjMgNC44LTMyLjcgNC44LTYxLjkgMC0xMTItNTAuMS0xMTItMTEyTDY0IDY0QzQ2LjMgNjQgMzIgNDkuNyAzMiAzMnptOTYgMzJsMCAxMjggOTYgMCAwLTEyOC05NiAwem05NiAzMzZhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjAxLjQtNjAuOWMtNy4xLTUuMi0xNy4yLTMuNi0yMi40IDMuNWwtNTMgNzIuOS0yNi44LTI2LjhjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjMy4zIDMuMyA3LjkgNSAxMi42IDQuNnM4LjktMi44IDExLjctNi41bDY0LTg4YzUuMi03LjEgMy42LTE3LjItMy41LTIyLjN6Il0KICAgIH07CiAgICBmYUJyaWRnZUNpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyaWRnZS1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRjOSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDggMCAwIDY0LTQwIDAgMCAxMTJjMzcuNiA5LjQgNjQgNDMuMiA2NCA4MmwwIDk0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTUzIDQzLTk2IDk2LTk2IDYuNCAwIDEyLjcgLjYgMTguNyAxLjggMzQuNy00OS41IDkyLjItODEuOCAxNTcuMy04MS44IDI4LjYgMCA1NS42IDYuMiA4MCAxNy40bDAtNjUuNC00MCAwIDAtNjQgOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyek00MjQgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNMjk2IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTg4IDk2bDgwIDAgMCA2NC04MCAwIDAtNjR6TTU3NiA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdCiAgICB9OwogICAgZmFDZWRpU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjZWRpLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTBkZiIsICJNMjMyIDMyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjYuNUM4OC44IDczLjkgMTYgMTU2LjQgMTYgMjU2Uzg4LjggNDM4LjEgMTg0IDQ1My41bDAgMjYuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjQuNmM0Ni44LTMuNyA4OS4xLTIzLjYgMTIxLjMtNTMuOSAxMi45LTEyLjEgMTMuNC0zMi40IDEuMy00NS4ycy0zMi40LTEzLjQtNDUuMi0xLjNjLTIwLjcgMTkuNi00Ny42IDMyLjctNzcuMyAzNi4ybDAtMjcwLjFjMjkuOCAzLjUgNTYuNiAxNi42IDc3LjMgMzYuMiAxMi45IDEyLjEgMzMuMSAxMS41IDQ1LjItMS4zczExLjUtMzMuMS0xLjMtNDUuMkMzMjEuMSA4MC4yIDI3OC44IDYwLjMgMjMyIDU2LjZMMjMyIDMyem0tNDggOTEuOGwwIDI2NC40QzEyNC4zIDM3My44IDgwIDMyMC4xIDgwIDI1NnM0NC4zLTExNy44IDEwNC0xMzIuMnoiXQogICAgfTsKICAgIGZhUHV6emxlUGllY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicHV6emxlLXBpZWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTEzXSwgImYxMmUiLCAiTTIyNCAwYzM1LjMgMCA2NCAyMS41IDY0IDQ4IDAgMTAuNC00LjQgMjAtMTIgMjcuOS02LjYgNi45LTEyIDE1LjMtMTIgMjQuOSAwIDE1IDEyLjIgMjcuMiAyNy4yIDI3LjJsNDQuOCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDQuOGMwIDE1IDEyLjIgMjcuMiAyNy4yIDI3LjIgOS41IDAgMTgtNS40IDI0LjktMTIgNy45LTcuNSAxNy41LTEyIDI3LjktMTIgMjYuNSAwIDQ4IDI4LjcgNDggNjRzLTIxLjUgNjQtNDggNjRjLTEwLjQgMC0yMC4xLTQuNC0yNy45LTEyLTYuOS02LjYtMTUuMy0xMi0yNC45LTEyLTE1IDAtMjcuMiAxMi4yLTI3LjIgMjcuMkwzODQgNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC01Ni44IDBjLTEyLjggMC0yMy4yLTEwLjQtMjMuMi0yMy4yIDAtOS4yIDUuOC0xNy4zIDEzLjItMjIuOCAxMS42LTguNyAxOC44LTIwLjcgMTguOC0zNCAwLTI2LjUtMjguNy00OC02NC00OHMtNjQgMjEuNS02NCA0OGMwIDEzLjMgNy4yIDI1LjMgMTguOCAzNCA3LjQgNS41IDEzLjIgMTMuNSAxMy4yIDIyLjggMCAxMi44LTEwLjQgMjMuMi0yMy4yIDIzLjJMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDM0My4yYzAtMTIuOCAxMC40LTIzLjIgMjMuMi0yMy4yIDkuMiAwIDE3LjMgNS44IDIyLjggMTMuMiA4LjcgMTEuNiAyMC43IDE4LjggMzQgMTguOCAyNi41IDAgNDgtMjguNyA0OC02NHMtMjEuNS02NC00OC02NGMtMTMuMyAwLTI1LjMgNy4yLTM0IDE4LjgtNS41IDcuNC0xMy41IDEzLjItMjIuOCAxMy4yLTEyLjggMC0yMy4yLTEwLjQtMjMuMi0yMy4yTDAgMTc2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDEwOC44IDBjMTUgMCAyNy4yLTEyLjIgMjcuMi0yNy4yIDAtOS41LTUuNC0xOC0xMi0yNC45LTcuNS03LjktMTItMTcuNS0xMi0yNy45IDAtMjYuNSAyOC43LTQ4IDY0LTQ4eiJdCiAgICB9OwogICAgZmFIZWxtZXRVbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWxtZXQtdW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUwMyIsICJNNDc5LjUgMjI0QzQ3MS4yIDk4LjkgMzY3LjIgMCAyNDAgMCAxMDcuNSAwIDAgMTA3LjUgMCAyNDBsMCA1Ni4zQzAgMzQ0LjggMzkuMiAzODQgODcuNyAzODRsMTI3LjMgMCAxMjguNiAxMjEuNGM0LjUgNC4yIDEwLjQgNi42IDE2LjUgNi42bDk2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTg2LjUgMC0xLjUtMS41IDAtMTc0LjUgMTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLS41IDB6TTMyMCA0MTcuMmwtNzgtNzMuNyAzMi40LTU1LjUgNDUuNiAwIDAgMTI5LjJ6TTI4NS4zIDEwMy4xbDM0LjcgNTIgMC00My4yYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA5NmMwIDcuMS00LjYgMTMuMy0xMS40IDE1LjNzLTE0LS42LTE3LjktNi40bC0zNC43LTUyIDAgNDMuMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTk2YzAtNy4xIDQuNi0xMy4zIDExLjQtMTUuM3MxNCAuNiAxNy45IDYuNHpNMTYwIDExMmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNjRjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhsMC02NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2eiJdCiAgICB9OwogICAgZmFHbGFzc1dhdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdsYXNzLXdhdGVyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU0ZjQiLCAiTTMyIDBDMjMuMSAwIDE0LjYgMy43IDguNiAxMC4yUy0uNiAyNS40IC4xIDM0LjNMMjguOSA0MzcuN2MzIDQxLjkgMzcuOCA3NC4zIDc5LjggNzQuM2wxNjYuNiAwYzQyIDAgNzYuOC0zMi40IDc5LjgtNzQuM0wzODMuOSAzNC4zYy42LTguOS0yLjQtMTcuNi04LjUtMjQuMVMzNjAuOSAwIDM1MiAwTDMyIDB6TTczIDE1Ni41bC02LjYtOTIuNSAyNTEuMyAwLTYuNiA5Mi41LTI0LjIgMTIuMWMtMTkuNCA5LjctNDIuMiA5LjctNjEuNiAwLTIwLjktMTAuNC00NS41LTEwLjQtNjYuNCAwLTE5LjQgOS43LTQyLjIgOS43LTYxLjYgMEw3MyAxNTYuNXoiXQogICAgfTsKICAgIGZhSGVhcnRDaXJjbGVCb2x0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYXJ0LWNpcmNsZS1ib2x0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZmMiLCAiTTI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN0MyOTYgNTIuNSAzMzYuMiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxNy42LTMuNCAzNS42LTkuNSA1My43LTIxLjgtOC42LTQ1LjYtMTMuNC03MC41LTEzLjQtMTA2IDAtMTkyIDg2LTE5MiAxOTIgMCAyOC41IDYuMiA1NS42IDE3LjQgODAtLjUgMC0uOSAwLTEuNCAwLTE1LjUgMC0zMC44LTQuNi00My4xLTE0LjEtNzMtNTUuNy0yMTIuOS0xODYtMjEyLjktMjk4LjJsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6TTI4OCA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTc3LjQtNzdjLTUuOC00LjItMTMuOC00LTE5LjQgLjVsLTgwIDY0Yy01LjMgNC4yLTcuNCAxMS40LTUuMSAxNy44UzM2OS4yIDQxNiAzNzYgNDE2bDMyLjkgMC0xNS45IDQyLjRjLTIuNSA2LjctLjIgMTQuMyA1LjYgMTguNnMxMy44IDQgMTkuNC0uNWw4MC02NGM1LjMtNC4yIDcuNC0xMS40IDUuMS0xNy44UzQ5NC44IDM4NCA0ODggMzg0bC0zMi45IDAgMTUuOS00Mi40YzIuNS02LjcgLjItMTQuMy01LjYtMTguNnoiXQogICAgfTsKICAgIGZhUHVtcFNvYXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicHVtcC1zb2FwIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImUwNmIiLCAiTTk2IDBsMCA4MCAxMjggMCAwLTI0IDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMzA5LjMgOCAyOTYgOGwtNzIgMCAwLThjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDBDMTEwLjMtMzIgOTYtMTcuNyA5NiAwek02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDEyOHpNMjI0IDM0NGMwIDM1LjMtMjguNyA1Ni02NCA1NnMtNjQtMjAuNy02NC01NmMwLTMyLjUgMzctODAuOSA1MC45LTk3LjkgMy4yLTMuOSA4LjEtNi4xIDEzLjEtNi4xczkuOSAyLjIgMTMuMSA2LjFDMTg3IDI2My4xIDIyNCAzMTEuNSAyMjQgMzQ0eiJdCiAgICB9OwogICAgZmFIYW5kU2Npc3NvcnMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtc2Npc3NvcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI1NyIsICJNNDAgMjA4Yy0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwbDE4MC4yIDBjLTcuNiA4LjUtMTIuMiAxOS43LTEyLjIgMzIgMCAyNS4zIDE5LjUgNDYgNDQuMyA0Ny45LTcuNyA4LjUtMTIuMyAxOS44LTEyLjMgMzIuMSAwIDI2LjUgMjEuNSA0OCA0OCA0OGw5NiAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4bDAtMTEzLjFjMC00MC4yLTE2LTc4LjgtNDQuNC0xMDcuMy0yMi44LTIyLjgtNTMuNi0zNS42LTg1LjgtMzUuNkwzMzYgNjRjLTIxLjMgMC0zOS4zIDEzLjktNDUuNiAzMy4xbDc0LjUgMjMuN2M4LjQgMi43IDEzLjEgMTEuNyAxMC40IDIwLjFzLTExLjcgMTMuMS0yMC4xIDEwLjRsLTY3LjEtMjEuNCAwIC4xLTIwNC02NC4xQzYyLjkgNTkuMiA0MC41IDcwLjkgMzMuOSA5MnM1LjEgNDMuNSAyNi4yIDUwLjJMMjY5LjUgMjA4IDQwIDIwOHoiXQogICAgfTsKICAgIGZhRG9sbHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG9sbHkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiZG9sbHktYm94Il0sICJmNDcyIiwgIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDcyLjkgMCA5Mi4xIDI3Ni4yYy0yMi41IDE3LjYtMzcgNDUtMzcgNzUuOCAwIDUzIDQzIDk2IDk2IDk2IDUyLjQgMCA5NS4xLTQyIDk2LTk0LjNsMjAyLjEtNjcuNGMxNi44LTUuNiAyNS44LTIzLjcgMjAuMi00MC41cy0yMy43LTI1LjgtNDAuNS0yMC4yTDMzMS44IDM1N2MtMTcuMi0yMi4xLTQzLjktMzYuNS03NC0zN0wxNjUuNyA0My44QzE1Ni45IDE3LjYgMTMyLjUgMCAxMDQuOSAwTDMyIDB6TTIwOCA0MTZhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMjgwLjUgODkuM2MtMjUuMiA4LjItMzkgMzUuMy0zMC44IDYwLjVsMzkuNiAxMjEuN2M4LjIgMjUuMiAzNS4zIDM5IDYwLjUgMzAuOGwxMjEuNy0zOS42YzI1LjItOC4yIDM5LTM1LjMgMzAuOC02MC41TDQ2Mi44IDgwLjVjLTguMi0yNS4yLTM1LjMtMzktNjAuNS0zMC44TDI4MC41IDg5LjN6Il0KICAgIH07CiAgICBmYURvbGx5Qm94ID0gZmFEb2xseTsKICAgIGZhUGFwZXJjbGlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhcGVyY2xpcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODIwNl0sICJmMGM2IiwgIk0yMjQuNiAxMi44YzU2LjItNTYuMiAxNDcuNC01Ni4yIDIwMy42IDBzNTYuMiAxNDcuNCAwIDIwMy42bC0xNjQgMTY0Yy0zNC40IDM0LjQtOTAuMSAzNC40LTEyNC41IDBzLTM0LjQtOTAuMSAwLTEyNC41TDI5Mi41IDEwMy4zYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMTg1IDMwMS4zYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMTY0LTE2NGMzMS4yLTMxLjIgMzEuMi04MS45IDAtMTEzLjFzLTgxLjktMzEuMi0xMTMuMSAwbC0xNjQgMTY0Yy01My4xIDUzLjEtNTMuMSAxMzkuMiAwIDE5Mi4zczEzOS4yIDUzLjEgMTkyLjMgMEw0MjguMyAyODQuM2MxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zTDM0My40IDQ1OS42Yy03OC4xIDc4LjEtMjA0LjcgNzguMS0yODIuOCAwcy03OC4xLTIwNC43IDAtMjgyLjhsMTY0LTE2NHoiXQogICAgfTsKICAgIGZhRGVtb2NyYXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGVtb2NyYXQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjc0NyIsICJNNjQgMzJjMC04LjkgMy44LTIwLjkgNi4yLTI3LjMgMS0yLjggMy44LTQuNyA2LjgtNC43IDEuOSAwIDMuOCAuNyA1LjIgMi4xTDEyOCA0NS43IDE3My44IDIuMWMxLjQtMS4zIDMuMi0yLjEgNS4yLTIuMSAzIDAgNS44IDEuOCA2LjggNC43IDIuNCA2LjUgNi4yIDE4LjQgNi4yIDI3LjMgMCAyNi41LTIxLjkgNDItMjkuNSA0Ni42bDc2LjIgNzIuNmM2IDUuNyAxMy45IDguOCAyMi4xIDguOGwyMTkuMiAwIDMyIDBjNDAuMyAwIDc4LjIgMTkgMTAyLjQgNTEuMmwxOS4yIDI1LjZjMTAuNiAxNC4xIDcuNyAzNC4yLTYuNCA0NC44cy0zNC4yIDcuNy00NC44LTYuNGwtMTkuMi0yNS42Yy01LjMtNy0xMS44LTEyLjgtMTkuMi0xN2wwIDg3LjQtMzUyIDAtNDAuNC05NC4zYy0zLjktOS4yLTE1LjMtMTIuNi0yMy42LTdsLTQyLjEgMjhjLTkuMSA2LjEtMTkuNyA5LjMtMzAuNyA5LjNsLTIgMEMyMy45IDI1NiAwIDIzMi4xIDAgMjAyLjcgMCAxOTAuNiA0LjEgMTc4LjkgMTEuNyAxNjkuNEw4Ny42IDc0LjZDNzguMSA2Ny40IDY0IDUzLjIgNjQgMzJ6TTU0NCAzNTJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjQtMTYwIDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMjggMzUyIDB6TTI1NiAyODBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yNDgtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMzY4IDI4MGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il0KICAgIH07CiAgICBmYVNxdWFyZUFycm93VXBSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtYXJyb3ctdXAtcmlnaHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZXh0ZXJuYWwtbGluay1zcXVhcmUiXSwgImYxNGMiLCAiTTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTI3MiAyOTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMTEyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTQuMSAwLTEwMyAxMDNjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwxMDMtMTAzIDAgNTQuMXoiXQogICAgfTsKICAgIGZhRXh0ZXJuYWxMaW5rU3F1YXJlID0gZmFTcXVhcmVBcnJvd1VwUmlnaHQ7CiAgICBmYUZlcnJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZlcnJ5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZWEiLCAiTTIyNCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMkwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDQ4IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCAxMjgtLjEgMGMuMSAuNyAuMSAxLjMgLjEgMiAwIDMwLjItNy42IDU5LjgtMjIgODYuM2wtMTIuNyAyMy4zLS42IDFjLTIyLjMtMTEuMy00Ni41LTE2LjgtNzAuOC0xNi43LTMyLjUgLjItNjQuOSAxMC43LTkyLjQgMzEuNC0yMi4xIDE2LjYtMjkuMSAxNi42LTUxLjIgMC0yOC4xLTIxLjEtNjEuMy0zMS42LTk0LjQtMzEuNC0yMy42IC4yLTQ3LjEgNS43LTY4LjcgMTYuN2wtLjYtMS0xMi43LTIzLjNjLTE0LjQtMjYuNS0yMi01Ni4yLTIyLTg2LjMgMC0uNyAwLTEuNCAuMS0ybC0uMSAwIDAtMTI4YzAtNDQuMiAzNS44LTgwIDgwLTgwbDQ4IDAgMC0zMnpNMTYwIDI1NmwzMjAgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZsLTI4OCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTJ6TTQwMy40IDQ3Ni4xQzM3OS4xIDQ5NC4zIDM1MS4xIDUxMiAzMjAgNTEycy01OS4xLTE3LjctODMuNC0zNS45Yy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0yMy44IDE3LjktNTQuMSAzNS41LTg4LjEgMzUuMy0yMC40LS4xLTQwLjctNi43LTU5LjgtMjEuMS0xMC42LTgtMTIuNy0yMy00LjctMzMuNnMyMy0xMi43IDMzLjYtNC43YzExLjMgOC41IDIxLjYgMTEuNCAzMS4yIDExLjUgMTcuNiAuMSAzNy4zLTkuNCA1OC45LTI1LjcgMzguNC0yOSA5MC41LTI5IDEyOSAwIDI0IDE4LjEgNDAuNyAyNi4zIDU0LjUgMjYuM3MzMC41LTguMiA1NC41LTI2LjNjMzguNC0yOSA5MC41LTI5IDEyOSAwIDE2LjkgMTIuNyAzMi45IDIxLjUgNDcuOCAyNC42IDEzLjcgMi44IDI3LjQgLjkgNDIuMy0xMC4zIDEwLjYtOCAyNS42LTUuOSAzMy42IDQuN3M1LjkgMjUuNi00LjcgMzMuNmMtMjYuNCAxOS45LTU0LjIgMjQuNC04MC43IDE5LjEtMjUuMy01LjEtNDguMS0xOC45LTY3LjItMzMuMy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMHoiXQogICAgfTsKICAgIGZhTW9zcXVpdG8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9zcXVpdG8iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUyYiIsICJNMTc4LjUgNDk1LjJjLTcuNSA5LjYtMjEgMTIuMS0zMS4zIDUuM1MxMzMuNSA0ODAgMTM4LjkgNDY5bDEuMi0yLjIgMzYuMi01OCAwLTQxIC4zLTRjLjYtMy45IDIuMi03LjcgNC42LTEwLjlsMzkuMy01Mi4yLTY2LjIgNTkuNWMtMTcgMTUuMy0zOSAyMy43LTYxLjkgMjMuOGwtOC4xIDBjLTQ2LjYgMC04NC40LTM3LjgtODQuNC04NC40IDAtNDMgMzIuNC03OS4yIDc1LjEtODMuOWwxMzAuNS0xNC41LTQ0LjgtMzguMy0yLjQtMi40Yy01LjMtNi03LjMtMTQuNC01LjMtMjIuM2wxMy4zLTUzLjQtMjUuOS0zOC45LTEuMy0yLjFjLTUuOC0xMC44LTIuNy0yNC42IDcuNC0zMS43IDEwLjEtNy4xIDIzLjctNS4xIDMxLjQgNC4zbDEuNSAyIDMyIDQ4IDEuNCAyLjJjMi44IDUuMyAzLjUgMTEuNiAyLjEgMTcuNmwtMTIuMyA0OS4yIDUzLjMgNDUuNyAwLTI4LjhjMC0xMS44IDYuNS0yMi4xIDE2LTI3LjdsMC02MC41IC4zLTMuM2MxLjUtNy4zIDgtMTIuNyAxNS43LTEyLjdzMTQuMiA1LjUgMTUuNyAxMi43bC4zIDMuMiAwIDYwLjVjOS42IDUuNSAxNiAxNS44IDE2IDI3LjdsMCAyOC45IDUzLjQtNDUuOC0xMi4zLTQ5LjJjLTEuNS01LjktLjctMTIuMiAyLjEtMTcuNmwxLjQtMi4yIDMyLTQ4IDEuNS0yYzcuNy05LjQgMjEuMy0xMS41IDMxLjQtNC4zIDEwLjEgNy4xIDEzLjEgMjAuOSA3LjQgMzEuN2wtMS4zIDIuMS0yNS45IDM4LjkgMTMuMyA1My40YzIgOC0uMSAxNi4zLTUuMyAyMi4zbC0yLjQgMi40LTQ0LjcgMzguMyAxMzAuNSAxNC41YzQyLjggNC44IDc1LjEgNDAuOSA3NS4xIDgzLjkgMCA0Ni42LTM3LjggODQuNC04NC40IDg0LjRsLTguMSAwYy0yMi44IDAtNDQuOS04LjUtNjEuOS0yMy44bC02Ni4xLTU5LjUgMzkuMiA1Mi4yYzIuNCAzLjIgNCA3IDQuNiAxMC45bC4zIDQgMCA0MSAzNi4yIDU4IDEuMiAyLjFjNS40IDExIDIgMjQuNy04LjMgMzEuNXMtMjMuOCA0LjQtMzEuMy01LjNsLTEuNC0yLTQwLTY0LTEuNi0zLjFjLTEuNC0zLjEtMi4xLTYuNi0yLjEtMTAuMWwwLTM5LjgtMzIuNC00My4xIDAgNzQuN2MwIDE3LjctMTQuMyAzMi0zMiAzMi0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTc0LjYtMzIuMyA0MyAwIDM5LjhjMCAzLjUtLjcgNi45LTIuMSAxMC4xbC0xLjYgMy4xLTQwIDY0LTEuNCAyeiJdCiAgICB9OwogICAgZmFCdWlsZGluZ0NpcmNsZUFycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctY2lyY2xlLWFycm93LXJpZ2h0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZDEiLCAiTTMyIDY0QzMyIDI4LjcgNjAuNyAwIDk2IDBMMzUyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNDQuN2MtMzUuNyAyLjktNjguNSAxNS42LTk2IDM1LjRsMC00YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDQgMGMtMTMuOCAxOS4yLTI0LjEgNDEtMzAuMSA2NC41LTEuOS0uNC0zLjktLjUtNS45LS41bC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDgwIDc0LjkgMGM2LjEgMTcuMyAxNC42IDMzLjQgMjUuMSA0OEw5NiA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDMyIDY0ek0xNDQgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMTEyIDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTE0NCAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNMjg4IDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0xNDAuNy02Ny4zYy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmwyOC43IDI4LjctODkuNCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDg5LjQgMC0yOC43IDI4LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGw1Ni01NmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNmwtNTYtNTZjLTYuMi02LjItMTYuNC02LjItMjIuNiAweiJdCiAgICB9OwogICAgZmFMZWZ0UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGVmdC1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzg1OTYsICJhcnJvd3MtYWx0LWgiXSwgImYzMzciLCAiTTUwMi42IDQwNi42bC05NiA5NmMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTMzUyIDQ5Mi45IDM1MiA0ODBsMC02NC0zMjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMjAgMCAwLTY0YzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjN6TTkuNCAxNTAuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsOTYtOTZjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlTMTYwIDE5LjEgMTYwIDMybDAgNjQgMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyMCAwIDAgNjRjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTk2LTk2eiJdCiAgICB9OwogICAgZmFBcnJvd3NBbHRIID0gZmFMZWZ0UmlnaHQ7CiAgICBmYVZpcnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZpcnVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwNzQiLCAiTTI5NiA0MGMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDQ0LjEtNTMuMyA2Ni4xLTg0LjUgMzUtMTUuNi0xNS42LTQwLjktMTUuNi01Ni42IDBzLTE1LjYgNDAuOSAwIDU2LjZjMzEuMiAzMS4yIDkuMSA4NC41LTM1IDg0LjUtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGM0NC4xIDAgNjYuMSA1My4zIDM1IDg0LjUtMTUuNiAxNS42LTE1LjYgNDAuOSAwIDU2LjZzNDAuOSAxNS42IDU2LjYgMGMzMS4yLTMxLjIgODQuNS05LjEgODQuNSAzNSAwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwYzAtNDQuMSA1My4zLTY2LjEgODQuNS0zNSAxNS42IDE1LjYgNDAuOSAxNS42IDU2LjYgMHMxNS42LTQwLjkgMC01Ni42Yy0zMS4yLTMxLjItOS4xLTg0LjUgMzUtODQuNSAyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MGMtNDQuMSAwLTY2LjEtNTMuMy0zNS04NC41IDE1LjYtMTUuNiAxNS42LTQwLjkgMC01Ni42cy00MC45LTE1LjYtNTYuNiAwQzM0OS4zIDEwNi4xIDI5NiA4NC4xIDI5NiA0MHpNMTYwIDIyNGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNjAgMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFHZW0yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdlbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE0Ml0sICJmM2E1IiwgIk0xMTYuNyAzMy44YzQuNS02LjEgMTEuNy05LjggMTkuMy05LjhsMjQwIDBjNy42IDAgMTQuOCAzLjYgMTkuMyA5LjhsMTEyIDE1MmM2LjggOS4yIDYuMSAyMS45LTEuNSAzMC40bC0yMzIgMjU2Yy00LjUgNS0xMSA3LjktMTcuOCA3LjlzLTEzLjItMi45LTE3LjgtNy45bC0yMzItMjU2Yy03LjctOC41LTguMy0yMS4yLTEuNS0zMC40bDExMi0xNTJ6bTM4LjUgMzkuOGMtMy4zIDIuNS00LjIgNy0yLjEgMTAuNUwyMTAuNSAxNzkuOCA2My4zIDE5MmMtNC4xIC4zLTcuMyAzLjgtNy4zIDhzMy4yIDcuNiA3LjMgOGwxOTIgMTZjLjQgMCAuOSAwIDEuMyAwbDE5Mi0xNmM0LjEtLjMgNy4zLTMuOCA3LjMtOHMtMy4yLTcuNi03LjMtOGwtMTQ3LjItMTIuMyA1Ny40LTk1LjZjMi4xLTMuNSAxLjItOC4xLTIuMS0xMC41cy03LjktMi0xMC43IDFMMjU2IDE3Mi4yIDE2NS45IDc0LjZjLTIuOC0zLTcuNC0zLjQtMTAuNy0xeiJdCiAgICB9OwogICAgZmFUb2lsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9pbGV0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4NzAxXSwgImY3ZDgiLCAiTTI0IDBDMTAuNyAwIDAgMTAuNyAwIDI0UzEwLjcgNDggMjQgNDhsOCAwIDAgMTQ4LjljLTEuOSAxLjQtMy44IDIuOS01LjYgNC40LTE1LjUgMTMuMi0yNi40IDMxLjYtMjYuNCA1NC42IDAgNDYuOSAxNC4zIDg0LjEgMzcgMTEyLjUgMTQuMiAxNy43IDMxLjEgMzEuMyA0OC41IDQxLjhMNjUuNiA0NjkuOWMtMy4zIDkuOC0xLjYgMjAuNSA0LjQgMjguOFM4NS43IDUxMiA5NiA1MTJsMjU2IDBjMTAuMyAwIDE5LjktNC45IDI2LTEzLjNzNy43LTE5LjEgNC40LTI4LjhsLTE5LjgtNTkuNWMxNy40LTEwLjUgMzQuMy0yNC4xIDQ4LjUtNDEuOCAyMi43LTI4LjQgMzctNjUuNSAzNy0xMTIuNSAwLTIzLjEtMTAuOS00MS41LTI2LjQtNTQuNi0xLjgtMS41LTMuNy0zLTUuNi00LjRsMC0xNDguOSA4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTNDM3LjMgMCA0MjQgMEwyNCAwek05NiA4MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2ek0yMjQgMjg4Yy04OC40IDAtMTYwLTE0LjMtMTYwLTMyczcxLjYtMzIgMTYwLTMyIDE2MCAxNC4zIDE2MCAzMi03MS42IDMyLTE2MCAzMnoiXQogICAgfTsKICAgIGZhU2luZ2xlUXVvdGVMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNpbmdsZS1xdW90ZS1sZWZ0IiwKICAgICAgaWNvbjogWzE5MiwgNTEyLCBbXSwgImU4MWIiLCAiTTEyOCA5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDggNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIxNkMwIDE0OS43IDUzLjcgOTYgMTIwIDk2bDggMHoiXQogICAgfTsKICAgIGZhTW9uZXlCaWxscyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxscyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMWYzIiwgIk0xNjAgMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjI0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM1MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE2MCAzMnptMTc2IDk2YTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwek0xNjAgMTUybDAtNDhjMC00LjQgMy42LTggOC04bDQ4IDBjNC40IDAgOC4xIDMuNiA3LjUgOC0zLjYgMjktMjYuNiA1MS45LTU1LjUgNTUuNS00LjQgLjUtOC0zLjEtOC03LjV6bTAgMTEyYzAtNC40IDMuNi04LjEgOC03LjUgMjkgMy42IDUxLjkgMjYuNiA1NS41IDU1LjUgLjUgNC40LTMuMSA4LTcuNSA4bC00OCAwYy00LjQgMC04LTMuNi04LThsMC00OHpNNTA0IDE1OS41Yy0yOS0zLjYtNTEuOS0yNi42LTU1LjUtNTUuNS0uNS00LjQgMy4xLTggNy41LThsNDggMGM0LjQgMCA4IDMuNiA4IDhsMCA0OGMwIDQuNC0zLjYgOC4xLTggNy41ek01MTIgMjY0bDAgNDhjMCA0LjQtMy42IDgtOCA4bC00OCAwYy00LjQgMC04LjEtMy42LTcuNS04IDMuNi0yOSAyNi42LTUxLjkgNTUuNS01NS41IDQuNC0uNSA4IDMuMSA4IDcuNXpNNDggMTUyYzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMTM4LjcgMCAxNTJMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzkyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMNjQgNDMyYy04LjggMC0xNi03LjItMTYtMTZsMC0yNjR6Il0KICAgIH07CiAgICBmYVRhYmxldEJ1dHRvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YWJsZXQtYnV0dG9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxMGEiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6TTIyNCA0MDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFSZWN0YW5nbGVYbWFyazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVjdGFuZ2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxNjQsICJyZWN0YW5nbGUtdGltZXMiLCAidGltZXMtcmVjdGFuZ2xlIiwgIndpbmRvdy1jbG9zZSJdLCAiZjQxMCIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6TTE2NyAxNjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNTUgNTUgNTUtNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC01NSA1NSA1NSA1NWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC01NS01NS01NSA1NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1NS01NS01NS01NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYVJlY3RhbmdsZVRpbWVzMiA9IGZhUmVjdGFuZ2xlWG1hcmsyOwogICAgZmFUaW1lc1JlY3RhbmdsZTIgPSBmYVJlY3RhbmdsZVhtYXJrMjsKICAgIGZhV2luZG93Q2xvc2UyID0gZmFSZWN0YW5nbGVYbWFyazI7CiAgICBmYVdyZW5jaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3cmVuY2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgyOTVdLCAiZjBhZCIsICJNNTA5LjQgOTguNmM3LjYtNy42IDIwLjMtNS43IDI0LjEgNC4zIDYuOCAxNy43IDEwLjUgMzcgMTAuNSA1Ny4xIDAgODguNC03MS42IDE2MC0xNjAgMTYwLTE3LjUgMC0zNC40LTIuOC01MC4yLThMMTQ2LjkgNDk4LjljLTI4LjEgMjguMS03My43IDI4LjEtMTAxLjggMHMtMjguMS03My43IDAtMTAxLjhMMjMyIDIxMC4yYy01LjItMTUuOC04LTMyLjYtOC01MC4yIDAtODguNCA3MS42LTE2MCAxNjAtMTYwIDIwLjEgMCAzOS40IDMuNyA1Ny4xIDEwLjUgMTAgMy44IDExLjggMTYuNSA0LjMgMjQuMWwtODguNyA4OC43Yy0zIDMtNC43IDcuMS00LjcgMTEuM2wwIDQxLjRjMCA4LjggNy4yIDE2IDE2IDE2bDQxLjQgMGM0LjIgMCA4LjMtMS43IDExLjMtNC43bDg4LjctODguN3oiXQogICAgfTsKICAgIGZhVHJhc2hDYW4yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyYXNoLWNhbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYxNDYwLCAidHJhc2gtYWx0Il0sICJmMmVkIiwgIk0xMzYuNyA1LjlDMTQxLjEtNy4yIDE1My4zLTE2IDE2Ny4xLTE2bDExMy45IDBjMTMuOCAwIDI2IDguOCAzMC40IDIxLjlMMzIwIDMyIDQxNiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJsOTYgMCA4LjctMjYuMXpNMzIgMTQ0bDM4NCAwIDAgMzA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMDR6bTg4IDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE5MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTkyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxOTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE5MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTkyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xOTJjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYVRyYXNoQWx0MiA9IGZhVHJhc2hDYW4yOwogICAgZmFUYWJsZUNlbGxzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlLWNlbGxzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRoIl0sICJmMDBhIiwgIk0zODQgOTZsMCA2NC02NCAwIDAtNjQgNjQgMHptMCAxMjhsMCA2NC02NCAwIDAtNjQgNjQgMHptMCAxMjhsMCA2NC02NCAwIDAtNjQgNjQgMHpNMjU2IDI4OGwtNjQgMCAwLTY0IDY0IDAgMCA2NHptLTY0IDY0bDY0IDAgMCA2NC02NCAwIDAtNjR6bS02NC02NGwtNjQgMCAwLTY0IDY0IDAgMCA2NHpNNjQgMzUybDY0IDAgMCA2NC02NCAwIDAtNjR6bTAtMTkybDAtNjQgNjQgMCAwIDY0LTY0IDB6bTEyOCAwbDAtNjQgNjQgMCAwIDY0LTY0IDB6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6Il0KICAgIH07CiAgICBmYVRoID0gZmFUYWJsZUNlbGxzOwogICAgZmFSaWJib24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmliYm9uIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI3ODk1XSwgImY0ZDYiLCAiTTIzNS4xIDBjMzMuNCAwIDY0LjUgMTcuNCA4MS45IDQ1LjkgMS4yIDIgMTMgMjEuMyAzNS4zIDU3LjggMjEuMSAzNC41IDE4LjMgNzguNS03IDExMEwyNzguMyAyOTcuNyAzNjQuNSA0MDZjNS41IDYuOSA0LjQgMTYuOS0yLjUgMjIuNWwtODAgNjRjLTYuOSA1LjUtMTcgNC40LTIyLjUtMi41TDM4LjYgMjEzLjhDMTMuMyAxODIuMyAxMC41IDEzOC4zIDMxLjYgMTAzLjggNTQgNjcuMiA2NS43IDQ3LjkgNjcgNDUuOSA4NC40IDE3LjQgMTE1LjQgMCAxNDguOSAwbDg2LjMgMHpNMTkyIDE4OS4ybDQ4LjYtNjEuMi05Ny4zIDAgNDguNiA2MS4yek03NSAzMzYuMmw4Ni4yIDEwNy44LTM2LjggNDZjLTUuNSA2LjktMTUuNiA4LTIyLjUgMi41bC04MC02NGMtNi45LTUuNS04LTE1LjYtMi41LTIyLjVMNzUgMzM2LjJ6Il0KICAgIH07CiAgICBmYUxhbmRtYXJrRmxhZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYW5kbWFyay1mbGFnIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MWMiLCAiTTM1Mi0zMkwyNDAtMzJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE0NC0xNzYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNiAwIDAgMjI0LTUxLjIgMzguNEM0LjcgNDYwLjQgMCA0NjkuOSAwIDQ4MCAwIDQ5Ny43IDE0LjMgNTEyIDMyIDUxMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMiAwLTEwLjEtNC43LTE5LjYtMTIuOC0yNS42bC01MS4yLTM4LjQgMC0yMjQgMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTkyIDAgMC02NCA4MCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNnptNDggMjI0bDAgMjI0LTY0IDAgMC0yMjQgNjQgMHptLTExMiAwbDAgMjI0LTY0IDAgMC0yMjQgNjQgMHptLTExMiAwbDAgMjI0LTY0IDAgMC0yMjQgNjQgMHoiXQogICAgfTsKICAgIGZhVXBEb3duTGVmdFJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVwLWRvd24tbGVmdC1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhcnJvd3MtYWx0Il0sICJmMGIyIiwgIk0yNzguNiA5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlTMTc5LjEgMTI4IDE5MiAxMjhsMzIgMCAwIDk2LTk2IDAgMC0zMmMwLTEyLjktNy44LTI0LjYtMTkuOC0yOS42cy0yNS43LTIuMi0zNC45IDYuOWwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzkuMiA5LjIgMjIuOSAxMS45IDM0LjkgNi45UzEyOCAzMzIuOSAxMjggMzIwbDAtMzIgOTYgMCAwIDk2LTMyIDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzMzMi45IDM4NCAzMjAgMzg0bC0zMiAwIDAtOTYgOTYgMCAwIDMyYzAgMTIuOSA3LjggMjQuNiAxOS44IDI5LjZzMjUuNyAyLjIgMzQuOS02LjlsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOVMzODQgMTc5LjEgMzg0IDE5MmwwIDMyLTk2IDAgMC05NiAzMiAwYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTY0LTY0eiJdCiAgICB9OwogICAgZmFBcnJvd3NBbHQgPSBmYVVwRG93bkxlZnRSaWdodDsKICAgIGZhQ2FyU2lkZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXItc2lkZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODY2M10sICJmNWU0IiwgIk0xNDcgMTA2LjdsLTI5LjggODUuMyAxMjIuOSAwIDAtOTYtNzcuOSAwYy02LjggMC0xMi45IDQuMy0xNS4xIDEwLjd6TTQ4LjYgMTkzLjlMODYuNSA4NS42Qzk3LjggNTMuNSAxMjguMSAzMiAxNjIuMSAzMkwzNjAgMzJjMjUuMiAwIDQ4LjkgMTEuOSA2NCAzMmw5Ni4yIDEyOC4zQzU4Ny4xIDE5Ni41IDY0MCAyNTIuMSA2NDAgMzIwbDAgMTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTE2LjQgMGMtNCA0NC45LTQxLjcgODAtODcuNiA4MHMtODMuNi0zNS4xLTg3LjYtODBsLTE0NC43IDBjLTQgNDQuOS00MS43IDgwLTg3LjYgODBzLTgzLjYtMzUuMS04Ny42LTgwbC0uNCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTgwYzAtMzAuMSAyMC43LTU1LjMgNDguNi02Mi4xek00NDAgMTkybC02Ny4yLTg5LjZjLTMtNC03LjgtNi40LTEyLjgtNi40bC03MiAwIDAgOTYgMTUyIDB6TTE1MiA0MzJhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwem0zNjAtNDBhNDAgNDAgMCAxIDAgLTgwIDAgNDAgNDAgMCAxIDAgODAgMHoiXQogICAgfTsKICAgIGZhVHJhc2hBcnJvd1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyYXNoLWFycm93LXVwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRyYXNoLXJlc3RvcmUiXSwgImY4MjkiLCAiTTE2Ny4xLTE2bDExMy45IDBjMTMuOCAwIDI2IDguOCAzMC40IDIxLjlMMzIwIDMyIDQxNiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJsOTYgMCA4LjctMjYuMUMxNDEuMS03LjIgMTUzLjMtMTYgMTY3LjEtMTZ6TTMyIDE0NGwzODQgMC0yMS4xIDMyMy4xQzM5My4zIDQ5Mi40IDM3Mi4zIDUxMiAzNDcgNTEyTDEwMSA1MTJjLTI1LjMgMC00Ni4zLTE5LjYtNDcuOS00NC45TDMyIDE0NHptMjA5IDc5Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtNzIgNzJjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwzMS0zMSAwIDEwMi4xYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDIuMSAzMSAzMWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTcyLTcyeiJdCiAgICB9OwogICAgZmFUcmFzaFJlc3RvcmUgPSBmYVRyYXNoQXJyb3dVcDsKICAgIGZhTGlmZVJpbmcyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpZmUtcmluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWNkIiwgIk0zNjcuMiA0MTIuNUMzMzUuOSA0MzQuOSAyOTcuNSA0NDggMjU2IDQ0OHMtNzkuOS0xMy4xLTExMS4yLTM1LjVsNTgtNThjMTUuOCA4LjYgMzQgMTMuNSA1My4zIDEzLjVzMzcuNC00LjkgNTMuMy0xMy41bDU4IDU4em05MC43IC44YzMzLjgtNDMuNCA1NC05OCA1NC0xNTcuM1M0OTEuOCAxNDIuMSA0NTggOTguN2M5LTEyLjUgNy45LTMwLjEtMy40LTQxLjNTNDI1LjggNDUgNDEzLjMgNTRDMzY5LjkgMjAuMiAzMTUuMyAwIDI1NiAwUzE0Mi4xIDIwLjIgOTguNyA1NGMtMTIuNS05LTMwLjEtNy45LTQxLjMgMy40UzQ1IDg2LjIgNTQgOTguN0MyMC4yIDE0Mi4xIDAgMTk2LjcgMCAyNTZTMjAuMiAzNjkuOSA1NCA0MTMuM2MtOSAxMi41LTcuOSAzMC4xIDMuNCA0MS4zUzg2LjIgNDY3IDk4LjcgNDU4YzQzLjQgMzMuOCA5OCA1NCAxNTcuMyA1NHMxMTMuOS0yMC4yIDE1Ny4zLTU0YzEyLjUgOSAzMC4xIDcuOSA0MS4zLTMuNHMxMi40LTI4LjggMy40LTQxLjN6bS00NS41LTQ2LjFsLTU4LTU4YzguNi0xNS44IDEzLjUtMzQgMTMuNS01My4zcy00LjktMzcuNC0xMy41LTUzLjNsNTgtNThDNDM0LjkgMTc2LjEgNDQ4IDIxNC41IDQ0OCAyNTZzLTEzLjEgNzkuOS0zNS41IDExMS4yek0zNjcuMiA5OS41bC01OCA1OGMtMTUuOC04LjYtMzQtMTMuNS01My4zLTEzLjVzLTM3LjQgNC45LTUzLjMgMTMuNWwtNTgtNThDMTc2LjEgNzcuMSAyMTQuNSA2NCAyNTYgNjRzNzkuOSAxMy4xIDExMS4yIDM1LjV6TTE1Ny41IDMwOS4zbC01OCA1OEM3Ny4xIDMzNS45IDY0IDI5Ny41IDY0IDI1NnMxMy4xLTc5LjkgMzUuNS0xMTEuMmw1OCA1OGMtOC42IDE1LjgtMTMuNSAzNC0xMy41IDUzLjNzNC45IDM3LjQgMTMuNSA1My4zek0yMDggMjU2YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6Il0KICAgIH07CiAgICBmYUNvcHlyaWdodDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29weXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTY5XSwgImYxZjkiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMDUuMSAzMDYuOWMyOC4xIDI4LjEgNzMuNyAyOC4xIDEwMS44IDAgOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy00Ni45IDQ2LjktMTIyLjggNDYuOS0xNjkuNyAwcy00Ni45LTEyMi44IDAtMTY5LjcgMTIyLjgtNDYuOSAxNjkuNyAwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBjLTI4LjEtMjguMS03My43LTI4LjEtMTAxLjggMHMtMjguMSA3My43IDAgMTAxLjh6Il0KICAgIH07CiAgICBmYUZpbGVQcmVzY3JpcHRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1wcmVzY3JpcHRpb24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjU3MiIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTg4IDE5MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwIDIyLjUgMCA1OC40IDU1LTMzLjQgMzEuNmMtOS42IDkuMS0xMC4xIDI0LjMtLjkgMzMuOXMyNC4zIDEwLjEgMzMuOSAuOWwzNS40LTMzLjUgMzUuNiAzMy41YzkuNyA5LjEgMjQuOCA4LjYgMzMuOS0xczguNi0yNC44LTEtMzMuOWwtMzMuNi0zMS42IDMzLjYtMzEuOGM5LjYtOS4xIDEwLjEtMjQuMyAuOS0zMy45cy0yNC4zLTEwLjEtMzMuOS0uOWwtMzUuNyAzMy43LTQwLjktMzguNWMxMi45LTExLjcgMjEuMS0yOC42IDIxLjEtNDcuNSAwLTM1LjMtMjguNy02NC02NC02NGwtNTYgMHptMzIgODBsLTggMCAwLTMyIDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTI0IDB6Il0KICAgIH07CiAgICBmYUVyYXNlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlcmFzZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjEyZCIsICJNMTc4LjUgNDE2bDEyMyAwIDY1LjMtNjUuMy0xNzMuNS0xNzMuNS0xMjYuNyAxMjYuNyAxMTIgMTEyek0yMjQgNDgwbC00NS41IDBjLTE3IDAtMzMuMy02LjctNDUuMy0xOC43TDE3IDM0NUM2LjEgMzM0LjEgMCAzMTkuNCAwIDMwNHM2LjEtMzAuMSAxNy00MUwyNjMgMTdDMjczLjkgNi4xIDI4OC42IDAgMzA0IDBzMzAuMSA2LjEgNDEgMTdMNTI3IDE5OWMxMC45IDEwLjkgMTcgMjUuNiAxNyA0MXMtNi4xIDMwLjEtMTcgNDFsLTEzNSAxMzUgMTIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI4OCAweiJdCiAgICB9OwogICAgZmFIb3VyZ2xhc3NTdGFydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VyZ2xhc3Mtc3RhcnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiaG91cmdsYXNzLTEiXSwgImYyNTEiLCAiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsMCAxMWMwIDQyLjQgMTYuOSA4My4xIDQ2LjkgMTEzLjFsNjcuOSA2Ny45LTY3LjkgNjcuOUM0OC45IDM1My45IDMyIDM5NC42IDMyIDQzN2wwIDExYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTFjMC00Mi40LTE2LjktODMuMS00Ni45LTExMy4xbC02Ny45LTY3LjkgNjcuOS02Ny45YzMwLTMwIDQ2LjktNzAuNyA0Ni45LTExMy4xbDAtMTFjMTcuNyAwIDMyLTE0LjMgMzItMzJTMzY5LjcgMCAzNTIgMEwzMiAwek0yODggNDM3bDAgMTEtMTkyIDAgMC0xMWMwLTI1LjUgMTAuMS00OS45IDI4LjEtNjcuOWw2Ny45LTY3LjkgNjcuOSA2Ny45YzE4IDE4IDI4LjEgNDIuNCAyOC4xIDY3Ljl6Il0KICAgIH07CiAgICBmYUhvdXJnbGFzczEgPSBmYUhvdXJnbGFzc1N0YXJ0OwogICAgZmFDaXJjbGVMZWZ0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxODQwLCAiYXJyb3ctYWx0LWNpcmNsZS1sZWZ0Il0sICJmMzU5IiwgIk01MTIgMjU2YTI1NiAyNTYgMCAxIDAgLTUxMiAwIDI1NiAyNTYgMCAxIDAgNTEyIDB6TTEyNC43IDI0NC43bDEwNC0xMDRjNC42LTQuNiAxMS41LTUuOSAxNy40LTMuNXM5LjkgOC4zIDkuOSAxNC44bDAgNTYgOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgNTZjMCA2LjUtMy45IDEyLjMtOS45IDE0LjhzLTEyLjkgMS4xLTE3LjQtMy41bC0xMDQtMTA0Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnoiXQogICAgfTsKICAgIGZhQXJyb3dBbHRDaXJjbGVMZWZ0MiA9IGZhQ2lyY2xlTGVmdDI7CiAgICBmYUNydXplaXJvU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjcnV6ZWlyby1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUxNTIiLCAiTTI0MCA5NmMtODguNCAwLTE2MCA3MS42LTE2MCAxNjAgMCA3MS42IDQ3LjEgMTMyLjMgMTEyIDE1Mi43TDE5MiAyNTZjMC0xMy4zIDEwLjctMjQgMjQtMjQgMTIuOCAwIDIzLjMgMTAuMSAyNCAyMi43IDE1LjUtOS41IDMzLjUtMTQuNyA1Mi4zLTE0LjdsMTEuOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMS44IDBjLTE4LjggMC0zNi4xIDEwLTQ1LjQgMjYuMy00LjUgNy45LTYuOSAxNi44LTYuOSAyNS45bDAgNzUuOGM0Mi41IDAgODEuMS0xNi42IDEwOS44LTQzLjYgMTIuOS0xMi4xIDMzLjEtMTEuNSA0NS4yIDEuM3MxMS41IDMzLjEtMS4zIDQ1LjJDMzUzLjcgNDU2LjggMjk5LjUgNDgwIDI0MCA0ODAgMTE2LjMgNDgwIDE2IDM3OS43IDE2IDI1NlMxMTYuMyAzMiAyNDAgMzJjNTkuNSAwIDExMy43IDIzLjIgMTUzLjcgNjEuMSAxMi45IDEyLjEgMTMuNCAzMi40IDEuMyA0NS4ycy0zMi40IDEzLjQtNDUuMiAxLjNDMzIxLjEgMTEyLjYgMjgyLjUgOTYgMjQwIDk2eiJdCiAgICB9OwogICAgZmFTbW9raW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNtb2tpbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg2ODRdLCAiZjQ4ZCIsICJNMzYwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxOWMwIDQwLjMgMTYgNzkgNDQuNSAxMDcuNWwyMSAyMUM0NjkgMTkxIDQ4MCAyMTcuNCA0ODAgMjQ1bDAgMTljMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xOWMwLTE0LjktNS45LTI5LjEtMTYuNC0zOS42bC0yMS0yMUMzNTcuMSAxNDYuOSAzMzYgOTYgMzM2IDQzbDAtMTljMC0xMy4zIDEwLjctMjQgMjQtMjR6TTU1MiAyODhjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMTljMC00MC4zLTE2LTc5LTQ0LjUtMTA3LjVsLTIxLTIxQzQ0MyA5NyA0MzIgNzAuNiA0MzIgNDNsMC0xOWMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTljMCAxNC45IDUuOSAyOS4xIDE2LjQgMzkuNmwyMSAyMUM1NTQuOSAxNDEuMSA1NzYgMTkyIDU3NiAyNDVsMCAxOWMwIDEzLjMtMTAuNyAyNC0yNCAyNHpNMzIwIDQ0OGw5NiAwIDAtMzItOTYgMCAwIDMyek0wIDQxNmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMnptNTc2LTQwbDAgMTEyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTEyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il0KICAgIH07CiAgICBmYVNxdWFyZVBvbGxWZXJ0aWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcG9sbC12ZXJ0aWNhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJwb2xsIl0sICJmNjgxIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem01NiAxOTJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxMTJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMTJjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTE4NCA4OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OHpNMjI0IDEyOGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDIwOGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTIwOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhUG9sbCA9IGZhU3F1YXJlUG9sbFZlcnRpY2FsOwogICAgZmFQZXJzb25DaXJjbGVNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tY2lyY2xlLW1pbnVzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NDAiLCAiTTI4MCAyNGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6bTI0IDIxMi43TDM0MSAyODYuNmMxMi44LTE3LjUgMjguNS0zMi43IDQ2LjMtNDVsLTU2LjItNzUuN0MzMDYgMTMyIDI2Ni4zIDExMiAyMjQgMTEycy04MiAyMC0xMDcuMiA1My45bC03MC41IDk1Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZMMTQ0IDIzNi43IDE0NCA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNzUuM3pNNjQwIDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tNjQgMGMwIDguOC03LjIgMTYtMTYgMTZsLTEyOCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDEyOCAwYzguOCAwIDE2IDcuMiAxNiAxNnoiXQogICAgfTsKICAgIGZhQmlvaGF6YXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJpb2hhemFyZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzk3NjNdLCAiZjc4MCIsICJNMjYwIDEyLjZjMC04LjMtNy42LTE0LjUtMTUuNS0xMi4xLTYwLjkgMTguOC0xMDUuMSA3NS44LTEwNS4xIDE0My4xIDAgMjUuMSA2LjEgNDguNyAxNyA2OS41LTIxIDEuOC00MiA4LjItNjEuNSAxOS41LTU3LjkgMzMuNi04NC44IDEwMC4yLTcwLjkgMTYyLjUgMS45IDguNCAxMS40IDEyIDE4LjkgNy42IDUtMi45IDcuNi04LjYgNy4xLTE0LjQtLjMtMy4zLS40LTYuNi0uNC0xMC4xIDAtMTIzLjUgMTg0LjQtMTIzLjUgMTg0LjQgMCAwIDg4LjQtOTQuNSAxMTMuNi0xNDguMiA3NS40LTQuNS0zLjItMTAuNS0zLjktMTUuMy0xLjEtNyA0LjEtOC42IDEzLjYtMi43IDE5LjEgNDYuNiA0My44IDExOCA1My45IDE3Ni4xIDIwLjIgMTcuOS0xMC40IDMyLjgtMjMuOSA0NC41LTM5LjQgMTEuNyAxNS42IDI2LjYgMjkuMSA0NC41IDM5LjQgNTguMSAzMy43IDEyOS41IDIzLjYgMTc2LjEtMjAuMiA1LjktNS41IDQuMy0xNS4xLTIuNy0xOS4xLTQuOC0yLjgtMTAuOC0yLjEtMTUuMyAxLjEtNTMuNyAzOC4yLTE0OC4yIDEzLTE0OC4yLTc1LjQgMC0xMjMuNSAxODQuNC0xMjMuNSAxODQuNCAwIDAgMy40LS4xIDYuOC0uNCAxMC4xLS41IDUuOCAyLjEgMTEuNSA3LjEgMTQuNCA3LjQgNC4zIDE3IC44IDE4LjktNy42IDEzLjktNjIuMi0xMy0xMjguOS03MC45LTE2Mi41LTE5LjUtMTEuMy00MC40LTE3LjctNjEuNS0xOS41IDEwLjktMjAuOCAxNy00NC40IDE3LTY5LjUgMC02Ny4zLTQ0LjItMTI0LjMtMTA1LjEtMTQzLjEtNy45LTIuNC0xNS41IDMuOC0xNS41IDEyLjEgMCA1LjkgNCAxMSA5LjUgMTMuMiA4My40IDMzLjYgNzAuOCAxNzguNC0zNy44IDE3OC40UzE2Ny4xIDU5LjQgMjUwLjUgMjUuOGM1LjUtMi4yIDkuNS03LjMgOS41LTEzLjJ6TTI0OC40IDI4OGE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwek00MzUgMzE3LjdjLTE2LjIgMC0zMS40IDUuNS00Mi4xIDE1LTEwLjEgOS4xLTE4LjEgMjMuNC0xOC4xIDQ1LjYgMCAyMS4xIDcuMiAzNSAxNi41IDQ0LjEgMzIuMi0yNC42IDU1LjUtNjAuNSA2My45LTEwMS44LTYuMy0xLjktMTMuMi0zLTIwLjItM3pNMjAyIDM3OC4zYzAtMjIuMy04LTM2LjYtMTguMS00NS42LTEwLjctOS42LTI1LjktMTUtNDIuMS0xNS03IDAtMTMuOSAxLTIwLjIgMyA4LjQgNDEuMyAzMS42IDc3LjIgNjMuOSAxMDEuOCA5LjQtOS4xIDE2LjUtMjMuMSAxNi41LTQ0LjJ6bTQxLjItMjI0LjNjOSAxMC4yIDIzLjIgMTguMiA0NS4yIDE4LjJzMzYuMi04IDQ1LjItMTguMmM2LjctNy42IDExLjUtMTcuNSAxMy42LTI4LjQtMTguMy02LjgtMzguMi0xMC41LTU4LjgtMTAuNXMtNDAuNSAzLjctNTguOCAxMC41YzIuMiAxMC45IDYuOSAyMC44IDEzLjYgMjguNXoiXQogICAgfTsKICAgIGZhQmVsbENvbmNpZXJnZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiZWxsLWNvbmNpZXJnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODcxOCwgImNvbmNpZXJnZS1iZWxsIl0sICJmNTYyIiwgIk0yMTYgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTYgMCAwIDMzLjNDMTI0LjggMTU2LjcgNDAuMiAyNDMuNyAzMi42IDM1Mmw0NDYuOSAwQzQ3MS44IDI0My43IDM4Ny4yIDE1Ni43IDI4MCAxNDUuM2wwLTMzLjMgMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMHpNMjQgNDAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDI0IDQwMHoiXQogICAgfTsKICAgIGZhQ29uY2llcmdlQmVsbCA9IGZhQmVsbENvbmNpZXJnZTsKICAgIGZhUnVsZXJIb3Jpem9udGFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJ1bGVyLWhvcml6b250YWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjU0NyIsICJNNDggMzg0Yy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE3NmMwLTI2LjUgMjEuNS00OCA0OC00OGwyNCAwIDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDQgNDggMCAwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MiA0OCAwIDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDQgNDggMCAwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MiA0OCAwIDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDQgMjQgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2MGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCAzODR6Il0KICAgIH07CiAgICBmYUhvcnNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvcnNlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDE0XSwgImY2ZjAiLCAiTTQ0OCAyMzguMWwwLTc4LjEgMTYgMCA5LjggMTkuNmMxMi41IDI1LjEgNDIuMiAzNi40IDY4LjMgMjYgMjAuNS04LjIgMzMuOS0yOCAzMy45LTUwLjFMNTc2IDgwYzAtMTkuMS04LjQtMzYuMy0yMS43LTQ4bDUuNyAwYzguOCAwIDE2LTcuMiAxNi0xNlM1NjguOCAwIDU2MCAwTDQ0OCAwQzM3Ny4zIDAgMzIwIDU3LjMgMzIwIDEyOGwtMTcxLjIgMEMxMTguMSAxMjggOTEuMiAxNDQuMyA3Ni4zIDE2OC44IDMzLjIgMTc0LjUgMCAyMTEuNCAwIDI1NmwwIDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC01NmMwLTEzLjQgNi42LTI1LjIgMTYuNy0zMi41IDEuNiAxMyA2LjMgMjUuNCAxMy42IDM2LjRsMjguMiA0Mi40YzguMyAxMi40IDYuNCAyOC43LTEuMiA0MS42LTE2LjUgMjgtMjAuNiA2Mi4yLTEwIDkzLjlsMTcuNSA1Mi40YzQuNCAxMy4xIDE2LjYgMjEuOSAzMC40IDIxLjlsMzMuNyAwYzIxLjggMCAzNy4zLTIxLjQgMzAuNC00Mi4xbC0yMC44LTYyLjVjLTIuMS02LjQtLjUtMTMuNCA0LjMtMTguMmwxMi43LTEyLjdjMTMuMi0xMy4yIDIwLjYtMzEuMSAyMC42LTQ5LjcgMC0yLjMtLjEtNC42LS4zLTYuOWw4NCAyNGM0LjEgMS4yIDguMiAyLjEgMTIuMyAyLjhMMzIwIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTY0LjNjMTkuMi0xOS4yIDMxLjUtNDUuNyAzMi03NS43bDAgMCAwLTEuOXpNNDk2IDY0YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnoiXQogICAgfTsKICAgIGZhQ2FsZW5kYXIyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTk3LCAxMjgxOThdLCAiZjEzMyIsICJNMTI4IDBDMTEwLjMgMCA5NiAxNC4zIDk2IDMybDAgMzItMzIgMEMyOC43IDY0IDAgOTIuNyAwIDEyOGwwIDQ4IDQ0OCAwIDAtNDhjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTMyIDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDMyLTEyOCAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTAgMjI0TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyLTQ0OCAweiJdCiAgICB9OwogICAgZmFIYW5kc0hvbGRpbmdDaGlsZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kcy1ob2xkaW5nLWNoaWxkIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZmEiLCAiTTMyMC0zMmE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6TTQwIDY0YzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgMTYwLjJjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNsNTEuMSA1MS4xYzguMyA4LjMgMjEuMyA5LjYgMzEgMy4xIDEyLjktOC42IDE0LjctMjYuOSAzLjctMzcuOC03LjMtNy4zLTIzLjEtMjMuMS00Ny4yLTQ3LjItMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGMyNC4xIDI0LjEgMzkuOSAzOS45IDQ3LjIgNDcuMmwwIDAgMjUuMyAyNS4zYzIxIDIxIDMyLjggNDkuNSAzMi44IDc5LjJsMCA3OC45YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC02Ni43IDBjLTE3IDAtMzMuMy02LjctNDUuMy0xOC43TDI4LjEgMzkzLjRDMTAuMSAzNzUuNCAwIDM1MSAwIDMyNS41TDAgMTA0QzAgODEuOSAxNy45IDY0IDQwIDY0em01NjAgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDIyMS41YzAgMjUuNS0xMC4xIDQ5LjktMjguMSA2Ny45TDUxMiA0OTMuM2MtMTIgMTItMjguMyAxOC43LTQ1LjMgMTguN0w0MDAgNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTc4LjljMC0yOS43IDExLjgtNTguMiAzMi44LTc5LjJsMjUuMy0yNS4zIDAgMGM3LjMtNy4zIDIzLjEtMjMuMSA0Ny4yLTQ3LjIgMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2MtMjQuMSAyNC4xLTM5LjkgMzkuOS00Ny4yIDQ3LjItMTEgMTEtOS4yIDI5LjIgMy43IDM3LjggOS43IDYuNSAyMi43IDUuMiAzMS0zLjFsNTEuMS01MS4xYzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNMNTYwIDEwNGMwLTIyLjEgMTcuOS00MCA0MC00MHpNMzg0LjUgMTQ5bC0xOS44LTE2LjcgMTEuMSA4OC44YzEuNiAxMy4yLTcuNyAyNS4xLTIwLjggMjYuOHMtMjUuMS03LjctMjYuOC0yMC44bC00LjQtMzUtNy42IDAtNC40IDM1Yy0xLjYgMTMuMi0xMy42IDIyLjUtMjYuOCAyMC44cy0yMi41LTEzLjYtMjAuOC0yNi44bDExLjEtODguOC0xOS44IDE2LjdjLTEwLjEgOC42LTI1LjMgNy4zLTMzLjgtMi44cy03LjMtMjUuMyAyLjgtMzMuOGwyNy45LTIzLjZDMjcxLjMgNzIuOCAyOTUuMyA2NCAzMjAgNjRzNDguNyA4LjggNjcuNiAyNC43bDI3LjkgMjMuNmMxMC4xIDguNiAxMS40IDIzLjcgMi44IDMzLjhzLTIzLjcgMTEuNC0zMy44IDIuOHoiXQogICAgfTsKICAgIGZhSXRhbGljID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIml0YWxpYyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMDMzIiwgIk0xMjggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTU4LjcgMC0xMzMuMyAzMjAgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNTguNyAwIDEzMy4zLTMyMC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhS2hhbmRhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImtoYW5kYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3NzJdLCAiZjY2ZCIsICJNMjQwLjcgOGM4LjktNy40IDIxLjgtNy40IDMwLjcgMGwzNy44IDMxLjVjOC43IDcuMyAxMS4xIDE5LjYgNiAyOS42LTEuMiAyLjQtMi44IDUuNS00LjYgOS4yIDM0LjIgMTkuMiA1Ny4zIDU1LjggNTcuMyA5Ny44cy0yMy4xIDc4LjYtNTcuMyA5Ny44YzEuOCAzLjcgMy4zIDYuOCA0LjYgOS4yIDUuMSAxMCAyLjcgMjIuMy02IDI5LjZsLTM3LjIgMzEgMCAxOS44YzIyLjktMTUuNyA0OC40LTMzLjMgNzYuNy01Mi43IDQyLjgtMjkuNCA2OC40LTc4IDY4LjQtMTMwbDAtMTEuMWMwLTIzLjktNy4xLTQ3LjMtMjAuNC02Ny4yLTUuMS03LjctNC42LTE3LjggMS43LTI0LjYgNi42LTcuMSAxNy4yLTguMSAyNS4yLTIuOCAyNy41IDE4LjEgODkuNCA2Ny41IDg5LjQgMTQ5LjEgMCA0Ni41LTIwLjIgODguNi00MS44IDEyMC40LTIxLjYgMzItNDUuNiA1NS01NS4zIDYzLjgtNy44IDcuMS0xOSA3LjktMjcuNiAzbC03MC44LTQwLjMtMzIuNyAyMi41IDQ1LjUgMzEuM2MxLjgtLjQgMy43LS43IDUuNy0uNyAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMTIuMiAwLTIyLjMtOS4xLTIzLjgtMjFsLTQwLjItMjcuNiAwIDI4LjljOS42IDUuNSAxNiAxNS45IDE2IDI3LjcgMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJjMC0xMS44IDYuNC0yMi4yIDE2LTI3LjdsMC0yOC4xLTQwLjMgMjcuN2MtMS44IDExLjQtMTEuOCAyMC4xLTIzLjcgMjAuMS0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzIuMiAwIDQuNCAuMyA2LjUgLjlsNDUuOC0zMS41LTMyLjctMjIuNS03MC44IDQwLjNjLTguNyA0LjktMTkuOCA0LjEtMjcuNi0zLTkuNy04LjgtMzMuNy0zMS45LTU1LjMtNjMuOC0yMS41LTMxLjgtNDEuOC03My45LTQxLjgtMTIwLjQgMC04MS43IDYxLjktMTMxLjEgODkuNC0xNDkuMSA4LjEtNS4zIDE4LjYtNC4zIDI1LjIgMi44IDYuNCA2LjkgNi44IDE3IDEuNyAyNC42LTEzLjMgMTkuOS0yMC40IDQzLjMtMjAuNCA2Ny4ybDAgMTEuMWMwIDUxLjkgMjUuNiAxMDAuNiA2OC40IDEzMCAyOC40IDE5LjYgNTMuNyAzNi45IDc1LjYgNTJsMC0xOS4xLTM3LjItMzFjLTguNy03LjMtMTEuMS0xOS42LTYtMjkuNiAxLjItMi40IDIuOC01LjUgNC42LTkuMi0zNC4yLTE5LjItNTcuMy01NS44LTU3LjMtOTcuOHMyMy4xLTc4LjYgNTcuMy05Ny44Yy0xLjgtMy43LTMuMy02LjgtNC42LTkuMi01LjEtMTAtMi43LTIyLjMgNi0yOS42TDI0MC43IDh6TTIyMC4zIDEyMi45Yy0xNyAxMS41LTI4LjIgMzEtMjguMiA1My4xczExLjIgNDEuNiAyOC4yIDUzLjFjNi44LTE5LjIgMTEuOC0zOC40IDExLjgtNTMuMXMtNC45LTMzLjktMTEuOC01My4xem03MS41IDEwNi4yYzE3LTExLjUgMjguMi0zMSAyOC4yLTUzLjFzLTExLjItNDEuNi0yOC4yLTUzLjFjLTYuOCAxOS4yLTExLjggMzguNC0xMS44IDUzLjFzNC45IDMzLjkgMTEuOCA1My4xeiJdCiAgICB9OwogICAgZmFGYWNlRnJvd25PcGVuMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWZyb3duLW9wZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTAsICJmcm93bi1vcGVuIl0sICJmNTdhIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTc2IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0xODIuNCAzODIuNWMtMTIuNCA1LjItMjYuNS00LjEtMjEuMS0xNi40IDE2LTM2LjYgNTIuNC02Mi4xIDk0LjgtNjIuMXM3OC44IDI1LjYgOTQuOCA2Mi4xYzUuNCAxMi4zLTguNyAyMS42LTIxLjEgMTYuNC0yMi40LTkuNS00Ny40LTE0LjgtNzMuNy0xNC44cy01MS4zIDUuMy03My43IDE0Ljh6Il0KICAgIH07CiAgICBmYUZyb3duT3BlbjIgPSBmYUZhY2VGcm93bk9wZW4yOwogICAgZmFDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVjayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEwMDAzLCAxMDAwNF0sICJmMDBjIiwgIk00MzQuOCA3MC4xYzE0LjMgMTAuNCAxNy41IDMwLjQgNy4xIDQ0LjdsLTI1NiAzNTJjLTUuNSA3LjYtMTQgMTIuMy0yMy40IDEzLjFzLTE4LjUtMi43LTI1LjEtOS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDEwMS41IDEwMS41IDIzNC0zMjEuN2MxMC40LTE0LjMgMzAuNC0xNy41IDQ0LjctNy4xeiJdCiAgICB9OwogICAgZmFGaW5nZXJwcmludCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaW5nZXJwcmludCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTc3IiwgIk00OCAyNTZjMC0xMTQuOSA5My4xLTIwOCAyMDgtMjA4IDYzLjEgMCAxMTkuNiAyOC4xIDE1Ny44IDcyLjUgOC42IDEwLjEgMjMuOCAxMS4yIDMzLjggMi42czExLjItMjMuOCAyLjYtMzMuOEM0MDMuMyAzNC42IDMzMy43IDAgMjU2IDAgMTE0LjYgMCAwIDExNC42IDAgMjU2bDAgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwem00NTguNS01Mi45Yy0yLjctMTMtMTUuNS0yMS4zLTI4LjQtMTguNXMtMjEuMyAxNS41LTE4LjUgMjguNGMyLjkgMTMuOSA0LjUgMjguMyA0LjUgNDMuMWwwIDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MGMwLTE4LjEtMS45LTM1LjgtNS41LTUyLjl6TTI1NiA4MGMtMTkgMC0zNy40IDMtNTQuNSA4LjYtMTUuMiA1LTE4LjcgMjMuNy04LjMgMzUuOSA3LjEgOC4zIDE4LjggMTAuOCAyOS40IDcuOSAxMC42LTIuOSAyMS44LTQuNCAzMy40LTQuNCA3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGwwIDI0LjljMCAyNS4yLTEuNSA1MC4zLTQuNCA3NS4zLTEuNyAxNC42IDkuNCAyNy44IDI0LjIgMjcuOCAxMS44IDAgMjEuOS04LjYgMjMuMy0yMC4zIDMuMy0yNy40IDUtNTUgNS04Mi43bDAtMjQuOWMwLTk3LjItNzguOC0xNzYtMTc2LTE3NnpNMTUwLjcgMTQ4LjdjLTkuMS0xMC42LTI1LjMtMTEuNC0zMy45LS40LTIzLjEgMjkuOC0zNi44IDY3LjEtMzYuOCAxMDcuN2wwIDI0LjljMCAyNC4yLTIuNiA0OC40LTcuOCA3MS45LTMuNCAxNS42IDcuOSAzMS4xIDIzLjkgMzEuMSAxMC41IDAgMTkuOS03IDIyLjItMTcuMyA2LjQtMjguMSA5LjctNTYuOCA5LjctODUuOGwwLTI0LjljMC0yNy4yIDguNS01Mi40IDIyLjktNzMuMSA3LjItMTAuNCA4LTI0LjYtLjItMzQuMnpNMjU2IDE2MGMtNTMgMC05NiA0My05NiA5NmwwIDI0LjljMCAzNS45LTQuNiA3MS41LTEzLjggMTA2LjEtMy44IDE0LjMgNi43IDI5IDIxLjUgMjkgOS41IDAgMTcuOS02LjIgMjAuNC0xNS40IDEwLjUtMzkgMTUuOS03OS4yIDE1LjktMTE5LjdsMC0yNC45YzAtMjguNyAyMy4zLTUyIDUyLTUyczUyIDIzLjMgNTIgNTJsMCAyNC45YzAgMzYuMy0zLjUgNzIuNC0xMC40IDEwNy45LTIuNyAxMy45IDcuNyAyNy4yIDIxLjggMjcuMiAxMC4yIDAgMTktNyAyMS0xNyA3LjctMzguOCAxMS42LTc4LjMgMTEuNi0xMTguMWwwLTI0LjljMC01My00My05Ni05Ni05NnptMjQgOTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNC45YzAgNTkuOS0xMSAxMTkuMy0zMi41IDE3NS4ybC01LjkgMTUuM2MtNC44IDEyLjQgMS40IDI2LjMgMTMuOCAzMXMyNi4zLTEuNCAzMS0xMy44bDUuOS0xNS4zQzI2Ny45IDQxMS45IDI4MCAzNDYuNyAyODAgMjgwLjlsMC0yNC45eiJdCiAgICB9OwogICAgZmFDaGFyZ2luZ1N0YXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcmdpbmctc3RhdGlvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNWU3IiwgIk02NCA2NEM2NCAyOC43IDkyLjcgMCAxMjggMEwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIyNGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDEyYzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtMTI3LjdjLTMyLjUtMTAuMi01Ni00MC41LTU2LTc2LjNsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMCAwLTQ4YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA0OCAzMiAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDQ4IDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCAzNS44LTIzLjUgNjYuMS01NiA3Ni4zTDUyMCAzODBjMCAzNy42LTMwLjQgNjgtNjggNjhzLTY4LTMwLjQtNjgtNjhsMC0xMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwwIDEyOS40YzkuMyAzLjMgMTYgMTIuMiAxNiAyMi42IDAgMTMuMy0xMC43IDI0LTI0IDI0TDcyIDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjQgMC0xMC41IDYuNy0xOS4zIDE2LTIyLjZMNjQgNjR6bTgyLjcgMTI1LjdsMzkgMC0yMC45IDY2LjljLTIuNCA3LjYgMy4zIDE1LjQgMTEuMyAxNS40IDIuOSAwIDUuNi0xIDcuOC0yLjlsOTQuNi04MmMzLjEtMi43IDQuOS02LjYgNC45LTEwLjcgMC03LjgtNi4zLTE0LjEtMTQuMS0xNC4xbC0zOSAwIDIwLjktNjYuOWMyLjQtNy42LTMuMy0xNS40LTExLjMtMTUuNC0yLjkgMC01LjYgMS03LjggMi45bC05NC42IDgyYy0zLjEgMi43LTQuOSA2LjYtNC45IDEwLjcgMCA3LjggNi4zIDE0LjEgMTQuMSAxNC4xeiJdCiAgICB9OwogICAgZmFVc2VyTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWxvY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjUwMiIsICJNMjI0IDhhMTIwIDEyMCAwIDEgMSAwIDI0MCAxMjAgMTIwIDAgMSAxIDAtMjQwek0xOTQuMyAzMDRsNTkuNCAwYzI5LjcgMCA1Ny43IDcuMyA4Mi4zIDIwLjFsMCA0LjNjLTE5LjYgMTcuNi0zMiA0My4xLTMyIDcxLjVsMCA5NmMwIDUuNSAuNSAxMC45IDEuMyAxNi4xTDQ1LjcgNTEyQzI5LjMgNTEyIDE2IDQ5OC43IDE2IDQ4Mi4zIDE2IDM4My44IDk1LjggMzA0IDE5NC4zIDMwNHptMzAxLjcgLjFjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45ek0zNTIgNDAwYzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2eiJdCiAgICB9OwogICAgZmFNb2JpbGVTY3JlZW5CdXR0b24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9iaWxlLXNjcmVlbi1idXR0b24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsibW9iaWxlLWFsdCJdLCAiZjNjZCIsICJNMTYgNjRDMTYgMjguNyA0NC43IDAgODAgMEwzMDQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw4MCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDE2IDY0em02NCAwbDAgMzA0IDIyNCAwIDAtMzA0LTIyNCAwek0xOTIgNDcyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzIgMTQuMyAzMiAzMiAzMnoiXQogICAgfTsKICAgIGZhTW9iaWxlQWx0ID0gZmFNb2JpbGVTY3JlZW5CdXR0b247CiAgICBmYUFuY2hvckNpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuY2hvci1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRhYSIsICJNMzIwIDk2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6TTI4OCAwYy01MyAwLTk2IDQzLTk2IDk2IDAgNDEuOCAyNi43IDc3LjQgNjQgOTAuNWwwIDI1Ny45Yy02Mi45LTE0LjMtMTEwLjItNjkuNy0xMTEuOS0xMzYuNWwxNi4xIDE0LjFjMTAgOC43IDI1LjEgNy43IDMzLjktMi4zczcuNy0yNS4xLTIuMy0zMy45bC02NC01NmMtOS03LjktMjIuNi03LjktMzEuNiAwbC02NCA1NmMtMTAgOC43LTExIDIzLjktMi4zIDMzLjlzMjMuOSAxMSAzMy45IDIuM0w4MCAzMDcuOWMyLjEgMTEzLjEgOTQuNCAyMDQuMSAyMDggMjA0LjEgMTYuNiAwIDMyLjctMS45IDQ4LjItNS42LTIwLjMtMzAuNS0zMi4yLTY3LTMyLjItMTA2LjQgMC0yNy4zIDUuNy01My4zIDE2LTc2LjlsMC0xMzYuNmMzNy4zLTEzLjIgNjQtNDguNyA2NC05MC41IDAtNTMtNDMtOTYtOTYtOTZ6TTY0MCA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdCiAgICB9OwogICAgZmFQZXJzb25XYWxraW5nV2l0aENhbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXdhbGtpbmctd2l0aC1jYW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImJsaW5kIl0sICJmMjlkIiwgIk0yMjQtMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTE2MCAyMDUuM2wtMjIuNiAyMi42Yy02IDYtOS40IDE0LjEtOS40IDIyLjZsMCAzNy41YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzcuNWMwLTI1LjUgMTAuMS00OS45IDI4LjEtNjcuOWwzNC40LTM0LjRjMjMuMi0yMy4yIDU0LjYtMzYuMiA4Ny4zLTM2LjIgMzYuMSAwIDcwLjMgMTUuOCA5My44IDQzLjFsNjguNiA4MGMxMS41IDEzLjQgOS45IDMzLjYtMy41IDQ1LjFzLTMzLjYgOS45LTQ1LjEtMy41bC01NS43LTY1IDAgMTE4LjYgMzQuNSAyOS42YzE3LjcgMTUuMiAyOS4zIDM2LjIgMzIuNiA1OS4zbDEyLjYgODguMWMyLjUgMTcuNS05LjcgMzMuNy0yNy4yIDM2LjJzLTMzLjctOS43LTM2LjItMjcuMmwtMTIuNi04OC4xYy0xLjEtNy43LTUtMTQuNy0xMC45LTE5LjhsLTcxLjQtNjEuMmMtMjEuMy0xOC4yLTMzLjUtNDQuOS0zMy41LTcyLjlsMC02OS4zem0uMSAxNjUuOGMyLjQgMi4zIDQuOCA0LjYgNy40IDYuOGw0NiAzOS40LTIuMiA3LjZjLTQuNSAxNS43LTEyLjkgMzAtMjQuNCA0MS41bC02OC4zIDY4LjNjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDY4LjMtNjguM2MzLjgtMy44IDYuNi04LjYgOC4xLTEzLjhMMTYwLjEgMzcxem0yMzMuNS02Mi4yYzEwLjYtOCAyNS42LTUuOCAzMy42IDQuOGwxNDQgMTkyYzggMTAuNiA1LjggMjUuNi00LjggMzMuNnMtMjUuNiA1LjgtMzMuNi00LjhsLTE0NC0xOTJjLTgtMTAuNi01LjgtMjUuNiA0LjgtMzMuNnoiXQogICAgfTsKICAgIGZhQmxpbmQgPSBmYVBlcnNvbldhbGtpbmdXaXRoQ2FuZTsKICAgIGZhRmlsZVdhdmVmb3JtID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtd2F2ZWZvcm0iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZmlsZS1tZWRpY2FsLWFsdCJdLCAiZjQ3OCIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTk2IDYwLjMgMCA0OC44IDYyLjdjNS4xIDYuNiAxMy4zIDEwIDIxLjYgOS4xczE1LjUtNi4xIDE5LjEtMTMuNmw0Mi45LTkxLjIgOS45IDE5LjhjNC4xIDguMSAxMi40IDEzLjMgMjEuNSAxMy4zbDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTU3LjIgMC0yNS40LTUwLjdjLTQuMS04LjItMTIuNi0xMy40LTIxLjgtMTMuM3MtMTcuNSA1LjUtMjEuNCAxMy44bC00Ny4zIDEwMC42LTMyLTQxLjFDODYuNCAzMDcuNCA3OS40IDMwNCA3MiAzMDRMMCAzMDQgMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41eiJdCiAgICB9OwogICAgZmFGaWxlTWVkaWNhbEFsdCA9IGZhRmlsZVdhdmVmb3JtOwogICAgZmFIb3VzZUNyYWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWNyYWNrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUzYjEiLCAiTTI3Ny44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTMTguOCAyNzIgMzIgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODYuNCAwLTMxLjMtNTIuMmMtNC4xLTYuOC0yLjYtMTUuNSAzLjUtMjAuNUwyNTYgMzY4IDE5NS44IDI4NS4yYy0xMC45LTE1IDguMi0zMy41IDIyLjgtMjJsMTE3LjkgOTIuNmM4IDYuMyA4LjIgMTguNCAuNCAyNC45TDI1NiA0NDggMjk0LjQgNTEyIDQwMCA1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNzYgMTYgMGMxMy4yIDAgMjUtOC4xIDI5LjgtMjAuM3MxLjYtMjYuMi04LTM1LjFsLTIyNC0yMDh6Il0KICAgIH07CiAgICBmYUhhdFdpemFyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYXQtd2l6YXJkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2ZTgiLCAiTTY0IDQwMGw4NS43LTIwOC4yYzE3LTQxLjMgNDcuOC03NS4zIDg3LjItOTYuM0wzODMuOCAxNy4yYzEyLjMtNi42IDI2LjUgNC43IDIzIDE4LjJMMzY5LjYgMTc3LjhjLTEuMSA0LjEtMS42IDguMy0xLjYgMTIuNiAwIDYuMyAxLjIgMTIuNiAzLjYgMTguNWw3Ni40IDE5MS4xLTIwNy4xIDAgMTEuOC0zNS40IDQwLjQtMTMuNWM2LjUtMi4yIDEwLjktOC4zIDEwLjktMTUuMnMtNC40LTEzLTEwLjktMTUuMmwtNDAuNC0xMy41LTEzLjUtNDAuNEMyMzcgMjYwLjQgMjMwLjkgMjU2IDIyNCAyNTZzLTEzIDQuNC0xNS4yIDEwLjlsLTEzLjUgNDAuNC00MC40IDEzLjVDMTQ4LjQgMzIzIDE0NCAzMjkuMSAxNDQgMzM2czQuNCAxMyAxMC45IDE1LjJsNDAuNCAxMy41IDExLjggMzUuNC0xNDMuMSAwek0yNzkuNiAxNDEuNWMtMS4xLTMuMy00LjEtNS41LTcuNi01LjVzLTYuNSAyLjItNy42IDUuNWwtNi43IDIwLjItMjAuMiA2LjdjLTMuMyAxLjEtNS41IDQuMS01LjUgNy42czIuMiA2LjUgNS41IDcuNmwyMC4yIDYuNyA2LjcgMjAuMmMxLjEgMy4zIDQuMSA1LjUgNy42IDUuNXM2LjUtMi4yIDcuNi01LjVsNi43LTIwLjIgMjAuMi02LjdjMy4zLTEuMSA1LjUtNC4xIDUuNS03LjZzLTIuMi02LjUtNS41LTcuNmwtMjAuMi02LjctNi43LTIwLjJ6TTMyIDQ0OGw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVVzZXJEb2N0b3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1kb2N0b3IiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidXNlci1tZCJdLCAiZjBmMCIsICJNMjI0IDhhMTIwIDEyMCAwIDEgMCAwIDI0MCAxMjAgMTIwIDAgMSAwIDAtMjQwem02MCAzMTIuOGMtNS40LS41LTExLS44LTE2LjYtLjhsLTg2LjkgMGMtNS42IDAtMTEuMSAuMy0xNi42IC44bDAgNjcuNWMxNi41IDcuNiAyOCAyNC4zIDI4IDQzLjYgMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhjMC0xOS40IDExLjUtMzYuMSAyOC00My42bDAtNTguNEM2MSAzNTMgMTYgNDEzLjYgMTYgNDg0LjYgMTYgNDk5LjcgMjguMyA1MTIgNDMuNCA1MTJsMzYxLjEgMGMxNS4xIDAgMjcuNC0xMi4zIDI3LjQtMjcuNCAwLTcxLTQ1LTEzMS41LTEwOC0xNTQuNmwwIDM3LjRjMjMuMyA4LjIgNDAgMzAuNSA0MCA1Ni42bDAgMzJjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtMzJjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwbDAgMzJjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtMzJjMC0yNi4xIDE2LjctNDguMyA0MC01Ni42bDAtNDYuNnoiXQogICAgfTsKICAgIGZhVXNlck1kID0gZmFVc2VyRG9jdG9yOwogICAgZmFDaGFydEJhcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtYmFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImJhci1jaGFydCJdLCAiZjA4MCIsICJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMzZjMCA4LjggNy4yIDE2IDE2IDE2bDQwMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDgwIDQ4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnptMzIgODBsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDExMmwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUJhckNoYXJ0MiA9IGZhQ2hhcnRCYXIyOwogICAgZmFTcHJheUNhblNwYXJrbGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwcmF5LWNhbi1zcGFya2xlcyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJhaXItZnJlc2hlbmVyIl0sICJmNWQwIiwgIk0xNjAgMzJsMCA4MCAxMjggMCAwLTgwYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE5MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMCAxMjhjLTUzIDAtOTYgNDMtOTYgOTZsMCAyMDhjMCAyNi41IDIxLjUgNDggNDggNDhsMjI0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yMDhjMC01My00My05Ni05Ni05NmwtMTI4IDB6bTY0IDk2YTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwek00NDggNDhjMC0xLjQtMS0zLTIuMi0zLjZMNDE2IDMyIDQwMy42IDIuMkM0MDMgMSA0MDEuNCAwIDQwMCAwcy0zIDEtMy42IDIuMkwzODQgMzIgMzU0LjIgNDQuNGMtMS4yIC42LTIuMiAyLjItMi4yIDMuNiAwIDEuNCAxIDMgMi4yIDMuNkwzODQgNjQgMzk2LjQgOTMuOEMzOTcgOTUgMzk4LjYgOTYgNDAwIDk2czMtMSAzLjYtMi4yTDQxNiA2NCA0NDUuOCA1MS42QzQ0NyA1MSA0NDggNDkuNCA0NDggNDh6bTc2LjQgNDUuOEM1MjUgOTUgNTI2LjYgOTYgNTI4IDk2czMtMSAzLjYtMi4yTDU0NCA2NCA1NzMuOCA1MS42YzEuMi0uNiAyLjItMi4yIDIuMi0zLjYgMC0xLjQtMS0zLTIuMi0zLjZMNTQ0IDMyIDUzMS42IDIuMkM1MzEgMSA1MjkuNCAwIDUyOCAwcy0zIDEtMy42IDIuMkw1MTIgMzIgNDgyLjIgNDQuNGMtMS4yIC42LTIuMiAyLjItMi4yIDMuNiAwIDEuNCAxIDMgMi4yIDMuNkw1MTIgNjQgNTI0LjQgOTMuOHptNy4yIDEwMC40Yy0uNi0xLjItMi4yLTIuMi0zLjYtMi4ycy0zIDEtMy42IDIuMkw1MTIgMjI0IDQ4Mi4yIDIzNi40Yy0xLjIgLjYtMi4yIDIuMi0yLjIgMy42IDAgMS40IDEgMyAyLjIgMy42TDUxMiAyNTYgNTI0LjQgMjg1LjhjLjYgMS4yIDIuMiAyLjIgMy42IDIuMnMzLTEgMy42LTIuMkw1NDQgMjU2IDU3My44IDI0My42YzEuMi0uNiAyLjItMi4yIDIuMi0zLjYgMC0xLjQtMS0zLTIuMi0zLjZMNTQ0IDIyNCA1MzEuNiAxOTQuMnpNNTEyIDE0NGMwLTEuNC0xLTMtMi4yLTMuNkw0ODAgMTI4IDQ2Ny42IDk4LjJDNDY3IDk3IDQ2NS40IDk2IDQ2NCA5NnMtMyAxLTMuNiAyLjJMNDQ4IDEyOCA0MTguMiAxNDAuNGMtMS4yIC42LTIuMiAyLjItMi4yIDMuNiAwIDEuNCAxIDMgMi4yIDMuNkw0NDggMTYwIDQ2MC40IDE4OS44Yy42IDEuMiAyLjIgMi4yIDMuNiAyLjJzMy0xIDMuNi0yLjJMNDgwIDE2MCA1MDkuOCAxNDcuNmMxLjItLjYgMi4yLTIuMiAyLjItMy42eiJdCiAgICB9OwogICAgZmFBaXJGcmVzaGVuZXIgPSBmYVNwcmF5Q2FuU3BhcmtsZXM7CiAgICBmYUJhaHRTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhaHQtc2lnbiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlMGFjIiwgIk0xMzYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0MC03NC40IDBDMTYuOCA2NCAwIDgwLjggMCAxMDEuNkwwIDQwNi4zYzAgMjMgMTguNyA0MS43IDQxLjcgNDEuN2w3MC4zIDAgMCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDAgNDggMGM2MS45IDAgMTEyLTUwLjEgMTEyLTExMiAwLTQwLjEtMjEuMS03NS4zLTUyLjctOTUuMSAxMy4xLTE4LjMgMjAuNy00MC43IDIwLjctNjQuOSAwLTYxLjktNTAuMS0xMTItMTEyLTExMmwtMTYgMCAwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0ek0xMTIgMTI4bDAgOTYtNDggMCAwLTk2IDQ4IDB6bTQ4IDk2bDAtOTYgMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OGwtMTYgMHptLTQ4IDY0bDAgOTYtNDggMCAwLTk2IDQ4IDB6bTQ4IDk2bDAtOTYgNDggMGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OGwtNDggMHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVBcnJvd1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLWFycm93LXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInRlbXBlcmF0dXJlLXVwIl0sICJlMDQwIiwgIk02NC41IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NHMtMTQ0LTY0LjUtMTQ0LTE0NGMwLTQyLjYgMTguNS04MSA0OC0xMDcuM0w2NC41IDk2em05NiAzMzZjMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zbDAtMjEyLjdjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyMTIuN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0ek00MzkuMSA5LjRsNjQgNjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTkuNC05LjQgMCAxNzguN2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE3OC43LTkuNCA5LjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDY0LTY0YzYtNiAxNC4xLTkuNCAyMi42LTkuNHMxNi42IDMuNCAyMi42IDkuNHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVVcCA9IGZhVGVtcGVyYXR1cmVBcnJvd1VwOwogICAgZmFXZWJBd2Vzb21lMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3ZWItYXdlc29tZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNjgyIiwgIk0zNzIuMiA1MmMwIDIwLjktMTIuNCAzOS0zMC4yIDQ3LjJMNDQ4IDE5MiA1NTIuNCAxNzEuMWMtNS4zLTcuNy04LjQtMTcuMS04LjQtMjcuMSAwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4YzAgMjYtMjAuNiA0Ny4xLTQ2LjQgNDhMNDgxIDQ0Mi4zYy0xMC4zIDIzLTMzLjIgMzcuNy01OC40IDM3LjdsLTIwNS4yIDBjLTI1LjIgMC00OC0xNC44LTU4LjQtMzcuN0w0Ni40IDE5MkMyMC42IDE5MS4xIDAgMTcwIDAgMTQ0IDAgMTE3LjUgMjEuNSA5NiA0OCA5NnM0OCAyMS41IDQ4IDQ4YzAgMTAuMS0zLjEgMTkuNC04LjQgMjcuMUwxOTIgMTkyIDI5OC4xIDk5LjFjLTE3LjctOC4zLTMwLTI2LjMtMzAtNDcuMSAwLTI4LjcgMjMuMy01MiA1Mi01MnM1MiAyMy4zIDUyIDUyeiJdCiAgICB9OwogICAgZmFOb25CaW5hcnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibm9uLWJpbmFyeSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlODA3IiwgIk0xOTIgNTQ0Yy05Ny4yIDAtMTc2LTc4LjgtMTc2LTE3NiAwLTg2LjMgNjIuMS0xNTggMTQ0LTE3M2wwLTQ3LjItNDkuNyAyNC44LTMgMS4zYy0xNS4yIDUuNy0zMi41LS44LTM5LjktMTUuNy03LjQtMTQuOC0yLjItMzIuNiAxMS41LTQxLjNsMi44LTEuNiAzOC44LTE5LjQtMzguOC0xOS40Yy0xNS44LTcuOS0yMi4yLTI3LjEtMTQuMy00Mi45IDcuNC0xNC44IDI0LjgtMjEuNCA0MC0xNS42bDMgMS4zIDQ5LjcgMjQuOCAwLTQ0LjJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDQ0LjIgNDkuNy0yNC44IDMtMS4zYzE1LjItNS44IDMyLjUgLjggMzkuOSAxNS42czIuMiAzMi43LTExLjUgNDEuM2wtMi44IDEuNi0zOC43IDE5LjQgMzguNyAxOS4zYzE1LjggNy45IDIyLjIgMjcuMSAxNC4zIDQyLjktNy40IDE0LjgtMjQuNyAyMS40LTM5LjkgMTUuNmwtMy0xLjMtNDkuNy0yNC44IDAgNDcuMmM4MS45IDE1LjEgMTQ0IDg2LjggMTQ0IDE3MyAwIDk3LjItNzguOCAxNzYtMTc2IDE3NnptMC02NGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6Il0KICAgIH07CiAgICBmYU4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzExMF0sICI0ZSIsICJNMjEuMSAzMy45YzEyLjctNC42IDI2LjktLjcgMzUuNSA5LjZMMzIwIDM1OS42IDMyMCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzg0YzAgMTMuNS04LjQgMjUuNS0yMS4xIDMwLjFzLTI2LjkgLjctMzUuNS05LjZMNjQgMTUyLjQgNjQgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NEMwIDUwLjUgOC40IDM4LjUgMjEuMSAzMy45eiJdCiAgICB9OwogICAgZmFBcnJvd3NVcERvd25MZWZ0UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXVwLWRvd24tbGVmdC1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhcnJvd3MiXSwgImYwNDciLCAiTTI3OC42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDkuNC05LjQgMCAxMTQuNy0xMTQuNyAwIDkuNC05LjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05LjQtOS40IDExNC43IDAgMCAxMTQuNy05LjQtOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtOS40IDkuNCAwLTExNC43IDExNC43IDAtOS40IDkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDkuNCA5LjQtMTE0LjcgMCAwLTExNC43IDkuNCA5LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjR6Il0KICAgIH07CiAgICBmYUFycm93cyA9IGZhQXJyb3dzVXBEb3duTGVmdFJpZ2h0OwogICAgZmFIb3VzZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NjgsIDYzNDk4LCA2MzUwMCwgImhvbWUiLCAiaG9tZS1hbHQiLCAiaG9tZS1sZy1hbHQiXSwgImYwMTUiLCAiTTI3Ny44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTMTguOCAyNzIgMzIgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjg4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNzYgMTYgMGMxMy4yIDAgMjUtOC4xIDI5LjgtMjAuM3MxLjYtMjYuMi04LTM1LjFsLTIyNC0yMDh6TTI0MCAzMjBsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2LTEyOCAwIDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDh6Il0KICAgIH07CiAgICBmYUhvbWUyID0gZmFIb3VzZTI7CiAgICBmYUhvbWVBbHQyID0gZmFIb3VzZTI7CiAgICBmYUhvbWVMZ0FsdDIgPSBmYUhvdXNlMjsKICAgIGZhU3Bpbm5lciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcGlubmVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxMTAiLCAiTTIwOCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0wIDQxNmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek00OCAyMDhhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0zNjggNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNNzUgMzY5LjFBNDggNDggMCAxIDEgMTQyLjkgNDM3IDQ4IDQ4IDAgMSAxIDc1IDM2OS4xek03NSA3NUE0OCA0OCAwIDEgMSAxNDIuOSAxNDIuOSA0OCA0OCAwIDEgMSA3NSA3NXpNNDM3IDM2OS4xQTQ4IDQ4IDAgMSAxIDM2OS4xIDQzNyA0OCA0OCAwIDEgMSA0MzcgMzY5LjF6Il0KICAgIH07CiAgICBmYUdhdmVsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdhdmVsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImxlZ2FsIl0sICJmMGUzIiwgIk0xNjkuNiAxNTMuNGwtMTguNy0xOC43Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM0wyNjUuNi0yNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwTDMyOS42LTYuNmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM0wyMTQuOSAxNTMuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDB6TTI3NiAyMTEuN2wtMzEuNC0zMS40IDExMi0xMTIgMTE5LjQgMTE5LjQtMTEyIDExMi0zMS40LTMxLjQtMjMyIDIzMmMtMTUuNiAxNS42LTQwLjkgMTUuNi01Ni42IDBzLTE1LjYtNDAuOSAwLTU2LjZsMjMyLTIzMnpNMzkwLjkgMzc0LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zTDUwNS42IDIxNC42YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE4LjcgMTguN2MxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM0w0NTQuOSAzOTMuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTE4LjctMTguN3oiXQogICAgfTsKICAgIGZhTGVnYWwgPSBmYUdhdmVsOwogICAgZmFUaWNrZXRTaW1wbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGlja2V0LXNpbXBsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ0aWNrZXQtYWx0Il0sICJmM2ZmIiwgIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgOC44LTcuNCAxNS43LTE1LjcgMTguNi0xOC44IDYuNS0zMi4zIDI0LjQtMzIuMyA0NS40czEzLjUgMzguOSAzMi4zIDQ1LjRjOC4zIDIuOSAxNS43IDkuOCAxNS43IDE4LjZsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRDMCAzMTEuMiA3LjQgMzA0LjMgMTUuNyAzMDEuNCAzNC41IDI5NC45IDQ4IDI3NyA0OCAyNTZzLTEzLjUtMzguOS0zMi4zLTQ1LjRDNy40IDIwNy43IDAgMjAwLjggMCAxOTJsMC02NHoiXQogICAgfTsKICAgIGZhVGlja2V0QWx0ID0gZmFUaWNrZXRTaW1wbGU7CiAgICBmYURvdmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG92ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODMzMF0sICJmNGJhIiwgIk00OTYgNjRjMTMuMiAwIDIwLjcgMTUuMSAxMi44IDI1LjZMNDgwIDEyOCA0ODAgMzA0YzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0bC0xMTIgMC00Ni4zIDQ2LjNjLTEwLjQgMTAuNC0yNi41IDEyLjQtMzkuMSA0LjhMNDEuNSA0NDAuOWMtMTctMTAuMi0xNS0zNS41IDMuNC00Mi45TDE2MCAzNTJDMjMuOCAzMTEuMSA3LjUgMTY5LjggMjIgOTUuNyAyNS42IDc3LjkgNDUuMyA3MS40IDYxLjMgODAuMkwzMjAgMjI0IDMyMCAxNDRjMC00NC4yIDM1LjgtODAgODAtODBsOTYgMHptLTk2IDU2YTI0IDI0IDAgMSAwIDAgNDggMjQgMjQgMCAxIDAgMC00OHpNMTgyLjUtOS42YzEyLjQtMTMuNyAzMy4zLTguOSA0Mi41IDcuMWw1Ni40IDk4LjNjLTUuOCAxNC40LTkuMiAzMC4xLTkuNCA0Ni41TDEzOC4xIDY4YzEwLjEtMzEuNiAyNy01OC40IDQ0LjQtNzcuNnoiXQogICAgfTsKICAgIGZhVGFycERyb3BsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFycC1kcm9wbGV0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1N2MiLCAiTTI1NiAxNjBjMzUuMyAwIDY0LTI2LjkgNjQtNjAgMC0yNC0zMy43LTcwLjEtNTIuMi05My41LTYuMS03LjctMTcuNS03LjctMjMuNiAwLTE4LjUgMjMuNC01Mi4yIDY5LjUtNTIuMiA5My41IDAgMzMuMSAyOC43IDYwIDY0IDYwek0zNjggOTZjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJTMTQ0IDE1Ny45IDE0NCA5NmMwLTExLjEgMS42LTIxLjkgNC42LTMyTDY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI3Ny41IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdMNDkzLjMgMzIyLjdjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0w1MTIgMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0bC04NC42IDBjMyAxMC4xIDQuNiAyMC45IDQuNiAzMnptODUuNSAxNzZMMzM2IDM4OS41IDMzNiAyOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsOTMuNSAwek05NiAxMjhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFUcmVlQ2l0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmVlLWNpdHkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU4NyIsICJNMjg4IDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0OCA0OCAwIDAtNzJjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDcyIDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzMjBjMCAyNi41LTIxLjUgNDgtNDggNDhsLTI1NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTQxNnptNjQgNjRsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTYgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNMzUyIDMwNGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek01MjggMTkyYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTUxMiAzMDRsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNOTYgNDgwbDAtMTYwLTE2IDBjLTQ0LjIgMC04MC0zNS44LTgwLTgwIDAtMjYuNyAxMy4xLTUwLjMgMzMuMi02NC45LS44LTQuOS0xLjItMTAtMS4yLTE1LjEgMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDk2YzAgMzUuMy0yOC43IDY0LTY0IDY0bDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFUdXJuVXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHVybi11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEwNTQ4LCAibGV2ZWwtdXAtYWx0Il0sICJmM2JmIiwgIk0xNjkuNCA5LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTI4IDEyOGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOVMzMzIuOSAxOTIgMzIwIDE5MmwtNjQgMCAwIDE2MGMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MGwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTYwLTY0IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45bDEyOC0xMjh6Il0KICAgIH07CiAgICBmYUxldmVsVXBBbHQgPSBmYVR1cm5VcDsKICAgIGZhVGVtcGVyYXR1cmVRdWFydGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLXF1YXJ0ZXIiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsidGVtcGVyYXR1cmUtMSIsICJ0aGVybW9tZXRlci0xIiwgInRoZXJtb21ldGVyLXF1YXJ0ZXIiXSwgImYyY2EiLCAiTTE2MCAwQzEwNyAwIDY0IDQzIDY0IDk2bDAgMTY0LjdDMzQuNSAyODcgMTYgMzI1LjQgMTYgMzY4IDE2IDQ0Ny41IDgwLjUgNTEyIDE2MCA1MTJzMTQ0LTY0LjUgMTQ0LTE0NGMwLTQyLjYtMTguNS04MS00OC0xMDcuM0wyNTYgOTZjMC01My00My05Ni05Ni05NnptNjQgMzY4YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0YzAtMjYuOSAxNi41LTQ5LjkgNDAtNTkuM2wwLTI4LjdjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDI4LjdjMjMuNSA5LjUgNDAgMzIuNSA0MCA1OS4zeiJdCiAgICB9OwogICAgZmFUZW1wZXJhdHVyZTEgPSBmYVRlbXBlcmF0dXJlUXVhcnRlcjsKICAgIGZhVGhlcm1vbWV0ZXIxID0gZmFUZW1wZXJhdHVyZVF1YXJ0ZXI7CiAgICBmYVRoZXJtb21ldGVyUXVhcnRlciA9IGZhVGVtcGVyYXR1cmVRdWFydGVyOwogICAgZmFTbGlkZXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNsaWRlcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2xpZGVycy1oIl0sICJmMWRlIiwgIk0zMiA2NEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJsODYuNyAwYzEyLjMgMjguMyA0MC41IDQ4IDczLjMgNDhzNjEtMTkuNyA3My4zLTQ4TDQ4MCAxMjhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMjY1LjMgNjRDMjUzIDM1LjcgMjI0LjggMTYgMTkyIDE2cy02MSAxOS43LTczLjMgNDhMMzIgNjR6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI0Ni43IDBjMTIuMyAyOC4zIDQwLjUgNDggNzMuMyA0OHM2MS0xOS43IDczLjMtNDhsNTQuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01NC43IDBjLTEyLjMtMjguMy00MC41LTQ4LTczLjMtNDhzLTYxIDE5LjctNzMuMyA0OEwzMiAyMjR6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDU0LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4czYxLTE5LjcgNzMuMy00OEw0ODAgNDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yNDYuNyAwYy0xMi4zLTI4LjMtNDAuNS00OC03My4zLTQ4cy02MSAxOS43LTczLjMgNDhMMzIgMzg0eiJdCiAgICB9OwogICAgZmFTbGlkZXJzSCA9IGZhU2xpZGVyczsKICAgIGZhTW9zcXVlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vc3F1ZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODMzMl0sICJmNjc4IiwgIk0xNzQuOCAyMjRsMjI2LjQgMGM0My41IDAgNzguOC0zNS4zIDc4LjgtNzguOCAwLTI1LjUtMTIuMy00OS40LTMzLjEtNjQuMkwyOTcuMy0yNS40Yy01LjYtMy45LTEzLTMuOS0xOC41IDBMMTI5LjEgODFDMTA4LjMgOTUuOCA5NiAxMTkuNyA5NiAxNDUuMiA5NiAxODguNyAxMzEuMyAyMjQgMTc0LjggMjI0ek01MTIgNTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDgtNDQ4IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDIwNi4zIDAgMjI0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwek0yNDAgMzg0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCA4MC05NiAwIDAtODB6Il0KICAgIH07CiAgICBmYUggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEwNF0sICI0OCIsICJNMzIwIDI4OGwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzg0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTYwLTI1NiAwIDAtMTYwYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjAgMjU2IDB6Il0KICAgIH07CiAgICBmYUluZm8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaW5mbyIsCiAgICAgIGljb246IFsxOTIsIDUxMiwgW10sICJmMTI5IiwgIk00OCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek0wIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjU2IDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC0yMjQtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYVBlcnNvbldhbGtpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXdhbGtpbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjg2OTQsICJ3YWxraW5nIl0sICJmNTU0IiwgIk0xOTIgODBhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTEwNS40IDIyNy45bDIyLjYtMjIuNiAwIDY5LjNjMCAyOCAxMi4yIDU0LjcgMzMuNSA3Mi45bDcxLjQgNjEuMmM1LjkgNS4xIDkuOCAxMi4xIDEwLjkgMTkuOGwxMi42IDg4LjFjMi41IDE3LjUgMTguNyAyOS43IDM2LjIgMjcuMnMyOS43LTE4LjcgMjcuMi0zNi4ybC0xMi42LTg4LjFjLTMuMy0yMy4xLTE0LjktNDQuMS0zMi42LTU5LjNsLTM0LjUtMjkuNiAwLTExNS4yIDMuOCA0LjdjMTguMiAyMi44IDQ1LjggMzYgNzUgMzZsMzMuMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMy4yIDBjLTkuNyAwLTE4LjktNC40LTI1LTEybC0xNy45LTIyLjRjLTIzLTI4LjgtNTcuOS00NS42LTk0LjgtNDUuNi0zMi4yIDAtNjMuMSAxMi44LTg1LjggMzUuNkw2MC4xIDE4Mi42QzQyLjEgMjAwLjYgMzIgMjI1IDMyIDI1MC41TDMyIDI4OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzcuNWMwLTguNSAzLjQtMTYuNiA5LjQtMjIuNnptMTIuNCAxNzkuNGMtMS41IDUuMi00LjMgMTAtOC4xIDEzLjhMNDEuNCA0ODkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2OC4zLTY4LjNjMTEuNS0xMS41IDE5LjktMjUuOCAyNC40LTQxLjVsMi4yLTcuNi00Ni0zOS40Yy0yLjUtMi4yLTUtNC40LTcuNC02LjhsLTEwLjQgMzYuMnoiXQogICAgfTsKICAgIGZhV2Fsa2luZyA9IGZhUGVyc29uV2Fsa2luZzsKICAgIGZhQXJyb3dUdXJuRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy10dXJuLWRvd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsibGV2ZWwtZG93biJdLCAiZjE0OSIsICJNMzIgNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMlMxNC4zIDAgMzIgMGw5NiAwYzUzIDAgOTYgNDMgOTYgOTZsMCAzMDYuNyA3My40LTczLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMTI4IDEyOGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTEyOC0xMjhjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMTYwIDQwMi43IDE2MCA5NmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiA2NHoiXQogICAgfTsKICAgIGZhTGV2ZWxEb3duID0gZmFBcnJvd1R1cm5Eb3duOwogICAgZmFSb2FkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvYWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg3MzldLCAiZjAxOCIsICJNMjIzLjkgMzJsLTc2LjIgMGMtMjkuNCAwLTU1LjEgMjAuMS02Mi4xIDQ4LjZMMS40IDQyMC41Qy02LjEgNDUwLjcgMTYuOCA0ODAgNDggNDgwbDE3NS45IDAgMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNjQgMTc2LjEgMGMzMS4yIDAgNTQuMS0yOS4zIDQ2LjYtNTkuNUw0MjYuNSA4MC42QzQxOS40IDUyLjEgMzkzLjggMzIgMzY0LjMgMzJsLTc2LjQgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6bTY0IDE5MmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhU3BpcmFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwaXJhbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlODBhIiwgIk0xMTUuNSA3LjRjMTMuNi0xMS4zIDMzLjgtOS41IDQ1LjEgNC4xczkuNSAzMy44LTQuMSA0NS4xQzEwMC4yIDEwMy41IDY0IDE3NS4yIDY0IDI1NiA2NCAzNjIgMTUwIDQ0OCAyNTYgNDQ4czE5Mi04NiAxOTItMTkyYzAtNzUuMS02MC45LTEzNi0xMzYtMTM2UzE3NiAxODAuOSAxNzYgMjU2YzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJjMC00OC42IDM5LjQtODggODgtODhzODggMzkuNCA4OCA4OGMwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFMxMTIgMzM1LjUgMTEyIDI1NmMwLTExMC41IDg5LjUtMjAwIDIwMC0yMDBzMjAwIDg5LjUgMjAwIDIwMGMwIDE0MS40LTExNC42IDI1Ni0yNTYgMjU2UzAgMzk3LjQgMCAyNTZDMCAxNTUuOCA0NSA2Ni4xIDExNS41IDcuNHoiXQogICAgfTsKICAgIGZhRmFjZUZyb3duMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWZyb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTc4NSwgImZyb3duIl0sICJmMTE5IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptOTAuNi0xMTMuOWMtMjAuNC0yOC01My40LTQ2LjEtOTAuNi00Ni4xcy03MC4yIDE4LjEtOTAuNiA0Ni4xYy03LjggMTAuNy0yMi44IDEzLjEtMzMuNSA1LjNzLTEzLjEtMjIuOC01LjMtMzMuNUMxNTUuNyAzMzAgMjAyLjggMzA0IDI1NiAzMDRzMTAwLjMgMjYgMTI5LjQgNjUuOWM3LjggMTAuNyA1LjQgMjUuNy01LjMgMzMuNXMtMjUuNyA1LjQtMzMuNS01LjN6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhRnJvd24yID0gZmFGYWNlRnJvd24yOwogICAgZmFXaW5lR2xhc3NFbXB0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aW5lLWdsYXNzLWVtcHR5IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbIndpbmUtZ2xhc3MtYWx0Il0sICJmNWNlIiwgIk02NCAwQzQ4LjcgMCAzNS42IDEwLjggMzIuNiAyNS43TDMuMiAxNzNDMS4xIDE4My41IDAgMTk0LjIgMCAyMDVsMCAzYzAgNzcuNCA1NSAxNDIgMTI4IDE1Ni44bDAgMTE1LjItNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTExNS4yQzI2NSAzNTAgMzIwIDI4NS40IDMyMCAyMDhsMC0zYzAtMTAuNy0xLjEtMjEuNC0zLjItMzJMMjg3LjQgMjUuN0MyODQuNCAxMC44IDI3MS4zIDAgMjU2IDBMNjQgMHptMS45IDE4NS42TDkwLjIgNjQgMjI5LjggNjQgMjU0LjEgMTg1LjZjMS4zIDYuNCAxLjkgMTIuOSAxLjkgMTkuNGwwIDNjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZsMC0zYzAtNi41IC42LTEzIDEuOS0xOS40eiJdCiAgICB9OwogICAgZmFXaW5lR2xhc3NBbHQgPSBmYVdpbmVHbGFzc0VtcHR5OwogICAgZmFDbGFwcGVyYm9hcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xhcHBlcmJvYXJkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUxMzEiLCAiTTQ0OCA2NGMyIDAgMy45IC4xIDUuOCAuM2wtOTUuNyA5NS43IDY3LjkgMCA3Mi03MmM4LjggMTEgMTQgMjQuOSAxNCA0MGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDcwLjEgMC05NiA5NiA2Ny45IDAgOTUtOTUgMS0xIDkyLjEgMC05NiA5NiA2Ny45IDAgOTUtOTUgMS0xIDg2LjEgMHoiXQogICAgfTsKICAgIGZhRm9yd2FyZFN0ZXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9yd2FyZC1zdGVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbInN0ZXAtZm9yd2FyZCJdLCAiZjA1MSIsICJNMjEgMzYuOGMxMi45LTcgMjguNy02LjMgNDEgMS44TDMyMCAyMDguMSAzMjAgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDM4NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE0NC4xLTI1OCAxNjkuNmMtMTIuMyA4LjEtMjggOC44LTQxIDEuOFMwIDQ1NC43IDAgNDQwTDAgNzJDMCA1Ny4zIDguMSA0My44IDIxIDM2Ljh6Il0KICAgIH07CiAgICBmYVN0ZXBGb3J3YXJkID0gZmFGb3J3YXJkU3RlcDsKICAgIGZhU3F1YXJlVXBSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtdXAtcmlnaHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs4NTk5LCAiZXh0ZXJuYWwtbGluay1zcXVhcmUtYWx0Il0sICJmMzYwIiwgIk0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwek0xNjggMTYwYy05LjcgMC0xOC41IDUuOC0yMi4yIDE0LjhzLTEuNyAxOS4zIDUuMiAyNi4ybDM1IDM1LTY3IDY3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWwyNCAyNGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw2Ny02NyAzNSAzNWM2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yUzMyMCAzMjEuNyAzMjAgMzEybDAtMTI4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xMjggMHoiXQogICAgfTsKICAgIGZhRXh0ZXJuYWxMaW5rU3F1YXJlQWx0ID0gZmFTcXVhcmVVcFJpZ2h0OwogICAgZmFCb29rSm91cm5hbFdoaWxscyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLWpvdXJuYWwtd2hpbGxzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImpvdXJuYWwtd2hpbGxzIl0sICJmNjZhIiwgIk05NiA1MTJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02Ni43YzE4LjYtNi42IDMyLTI0LjQgMzItNDUuM2wwLTI4OGMwLTI2LjUtMjEuNS00OC00OC00OEw5NiAwQzQzIDAgMCA0MyAwIDk2TDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZ6TTY0IDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNTYgMCAwIDY0LTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMjc0LjEgOTkuMmMyLjYtMi42IDYuNy0zLjEgOS45LTEuMSAzMi4xIDIwIDUzLjQgNTUuNiA1My40IDk2LjIgMCA2Mi42LTUwLjcgMTEzLjMtMTEzLjMgMTEzLjNTMTEwLjcgMjU2LjkgMTEwLjcgMTk0LjNjMC00MC42IDIxLjQtNzYuMiA1My40LTk2LjIgMy4xLTIgNy4yLTEuNSA5LjkgMS4xczMuMSA2LjcgMS4yIDkuOGMtNS4yIDguNi04LjIgMTguNy04LjIgMjkuNSAwIDE1LjEgNS45IDI4LjggMTUuNSAzOS4xIDIuNSAyLjcgMi45IDYuNyAuOSA5LjctNC43IDcuNC03LjQgMTYuMS03LjQgMjUuNSAwIDIxLjYgMTQuMyAzOS45IDM0IDQ1LjlsMS0yNC44Yy03LjEtNC40LTExLjgtMTIuMi0xMS44LTIxLjEgMC05LjYgNS41LTE4IDEzLjUtMjIuMWwzLjMtODEuOGMuMi00LjMgMy43LTcuNyA4LTcuN3M3LjggMy40IDggNy43bDMuMyA4MS44YzggNC4xIDEzLjUgMTIuNCAxMy41IDIyLjEgMCA4LjktNC43IDE2LjctMTEuOCAyMS4xbDEgMjQuOGMxOS42LTYgMzMuOS0yNC4xIDM0LTQ1LjZsMC0uNmMtLjEtOS4zLTIuNy0xNy45LTcuNC0yNS4yLTEuOS0zLjEtMS42LTcuMSAuOS05LjcgOS42LTEwLjIgMTUuNS0yMy45IDE1LjUtMzkuMSAwLTEwLjgtMy0yMC45LTguMi0yOS41LTEuOS0zLjItMS40LTcuMiAxLjItOS44eiJdCiAgICB9OwogICAgZmFKb3VybmFsV2hpbGxzID0gZmFCb29rSm91cm5hbFdoaWxsczsKICAgIGZhQ2hhbXBhZ25lR2xhc3NlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFtcGFnbmUtZ2xhc3NlcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyOTM0NiwgImdsYXNzLWNoZWVycyJdLCAiZjc5ZiIsICJNMTU1LjYgMTcuM0MxNjMgMyAxNzkuOS0zLjYgMTk1IDEuOWwxMjUgNDUuNiAxMjUtNDUuNmMxNS4xLTUuNSAzMiAxLjEgMzkuNCAxNS40bDc4LjggMTUyLjljMjguOCA1NS44IDEwLjMgMTIyLjMtMzguNSAxNTYuNmwzMS4zIDg2LjIgNDEtMTVjMTYuNi02IDM1IDIuNSA0MSAxOS4xcy0yLjUgMzUtMTkuMSA0MWMtNDcuNCAxNy4zLTk0LjggMzQuNS0xNDIuMiA1MS44LTE2LjYgNi4xLTM1LTIuNS00MS0xOS4xczIuNS0zNSAxOS4xLTQxbDQxLTE1LTMxLjMtODYuMmMtNTkuNCA1LjItMTE2LjItMzMuOS0xMzAtOTUuMmwtMTQuNi02NC43LTE0LjYgNjQuN2MtMTMuOCA2MS4zLTcwLjYgMTAwLjQtMTMwIDk1LjJsLTMxLjMgODYuMiA0MSAxNWMxNi42IDYuMSAyNS4yIDI0LjQgMTkuMSA0MXMtMjQuNCAyNS4yLTQxIDE5LjFjLTQ3LjQtMTcuMy05NC44LTM0LjYtMTQyLjItNTEuOC0xNi42LTYuMS0yNS4yLTI0LjQtMTkuMS00MVMyNi4zIDM5MiA0Mi45IDM5OGw0MSAxNSAzMS4zLTg2LjJDNjYuNSAyOTIuNSA0OC4xIDIyNiA3Ni45IDE3MC4yTDE1NS42IDE3LjN6bTQ0IDU0LjRsLTI3LjIgNTIuOCA4OS4yIDMyLjUgMTMuMS01Ny45LTc1LjEtMjcuNHptMjQwLjkgMGwtNzUuMSAyNy40IDEzLjEgNTcuOSA4OS4yLTMyLjUtMjcuMi01Mi44eiJdCiAgICB9OwogICAgZmFHbGFzc0NoZWVycyA9IGZhQ2hhbXBhZ25lR2xhc3NlczsKICAgIGZhRHVtcHN0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHVtcHN0ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjc5MyIsICJNMTMyLjMgNjRMMTA2LjcgMTkyIDI0IDE5MmMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00LjFjMC0yLjYgLjQtNS4xIDEuMi03LjZMMjYuNSA4MC40QzI5LjggNzAuNiAzOSA2NCA0OS4zIDY0bDgzIDB6bTIzLjQgMTI4bDI1LjYtMTI4IDgyLjcgMCAwIDEyOC0xMDguMyAwek0zMTIgNjRsODIuNyAwIDI1LjYgMTI4LTEwOC4zIDAgMC0xMjh6bTEzMS43IDBsODMgMGMxMC4zIDAgMTkuNSA2LjYgMjIuOCAxNi40bDI1LjMgNzUuOWMuOCAyLjQgMS4yIDUgMS4yIDcuNmwwIDQuMWMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtODIuNyAwLTI1LjYtMTI4ek0yNS43IDI0MGw1MjQuNyAwYy0uNCAyLjEtMTMuMyA3My40LTM4LjkgMjEzLjctMyAxNi4zLTE3LjkgMjcuNi0zNC40IDI2LjFTNDQ4IDQ2NC42IDQ0OCA0NDhsMC0xNi0zMjAgMCAwIDE2YzAgMTYuNi0xMi42IDMwLjQtMjkuMSAzMS45UzY3LjUgNDcwIDY0LjUgNDUzLjdDMzkgMzEzLjMgMjYgMjQyLjEgMjUuNyAyNDB6Il0KICAgIH07CiAgICBmYUhlYXJ0Q2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhcnQtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MDEiLCAiTTI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN0MyOTYgNTIuNSAzMzYuMiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxNy42LTMuNCAzNS42LTkuNSA1My43LTIxLjgtOC42LTQ1LjYtMTMuNC03MC41LTEzLjQtMTA2IDAtMTkyIDg2LTE5MiAxOTIgMCAyOC41IDYuMiA1NS42IDE3LjQgODAtLjUgMC0uOSAwLTEuNCAwLTE1LjUgMC0zMC44LTQuNi00My4xLTE0LjEtNzMtNTUuNy0yMTIuOS0xODYtMjEyLjktMjk4LjJsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6TTQzMiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em01OS4zIDEwNy4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBsLTM2LjcgMzYuNy0zNi43LTM2LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsMzYuNyAzNi43LTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDM2LjctMzYuNyAzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC0zNi43LTM2LjcgMzYuNy0zNi43eiJdCiAgICB9OwogICAgZmFDb21wdXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21wdXRlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGU1IiwgIk0zNDguOCAzMkMzNDAuNyA0Ni4xIDMzNiA2Mi41IDMzNiA4MGwwIDE2LTI3MiAwIDAgMjI0IDI3MiAwIDAgNjQtMjcyIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjg0LjggMHpNMzM2IDQzMmMwIDE3LjUgNC43IDMzLjkgMTIuOCA0OEwxMjAgNDgwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDIxNiAwek00MzIgMzJsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0zNTJjMC0yNi41IDIxLjUtNDggNDgtNDh6bTI0IDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMHptNTYgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYVdhbmRNYWdpYyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3YW5kLW1hZ2ljIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbIm1hZ2ljIl0sICJmMGQwIiwgIk0zOTguNSAxMi4ybC04OC4yIDg4LjIgMTAxLjMgMTAxLjMgODguMi04OC4yQzUwNy42IDEwNS42IDUxMiA5NSA1MTIgODRzLTQuNC0yMS42LTEyLjItMjkuNUw0NTcuNSAxMi4yQzQ0OS42IDQuNCA0MzkgMCA0MjggMHMtMjEuNiA0LjQtMjkuNSAxMi4yek0yNzYuNCAxMzQuM0wxMi4yIDM5OC41QzQuNCA0MDYuNCAwIDQxNyAwIDQyOHM0LjQgMjEuNiAxMi4yIDI5LjVsNDIuMyA0Mi4zQzYyLjQgNTA3LjYgNzMgNTEyIDg0IDUxMnMyMS42LTQuNCAyOS41LTEyLjJMMzc3LjcgMjM1LjYgMjc2LjQgMTM0LjN6Il0KICAgIH07CiAgICBmYU1hZ2ljID0gZmFXYW5kTWFnaWM7CiAgICBmYUJyYWluID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyYWluIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTA0XSwgImY1ZGMiLCAiTTEyMCA1NmMwLTMwLjkgMjUuMS01NiA1Ni01NmwyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0yOS44IDAtNTQuOS0yMC40LTYyLTQ4LS43IDAtMS4zIDAtMiAwLTQ0LjIgMC04MC0zNS44LTgwLTgwIDAtMTggNi0zNC42IDE2LTQ4LTE5LjQtMTQuNi0zMi0zNy44LTMyLTY0IDAtMzAuOSAxNy42LTU3LjggNDMuMi03MS4xLTcuMS0xMi0xMS4yLTI2LTExLjItNDAuOSAwLTQ0LjIgMzUuOC04MCA4MC04MGwwLTI0em0yNzIgMGwwIDI0YzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgMTUtNC4xIDI5LTExLjIgNDAuOSAyNS43IDEzLjMgNDMuMiA0MC4xIDQzLjIgNzEuMSAwIDI2LjItMTIuNiA0OS40LTMyIDY0IDEwIDEzLjQgMTYgMzAgMTYgNDggMCA0NC4yLTM1LjggODAtODAgODAtLjcgMC0xLjMgMC0yIDAtNy4xIDI3LjYtMzIuMiA0OC02MiA0OGwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC00NDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMjQgMGMzMC45IDAgNTYgMjUuMSA1NiA1NnoiXQogICAgfTsKICAgIGZhQnJpZWZjYXNlTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmllZmNhc2UtbWVkaWNhbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDY5IiwgIk0yMDAgNDhsMTEyIDBjNC40IDAgOCAzLjYgOCA4bDAgNDAtMTI4IDAgMC00MGMwLTQuNCAzLjYtOCA4LTh6bS01NiA4bDAgNDAtODAgMEMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTgwIDAgMC00MGMwLTMwLjktMjUuMS01Ni01Ni01NkwyMDAgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6bTgwIDE2MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhSG91c2VNZWRpY2FsQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtbWVkaWNhbC1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUxMiIsICJNMzA5LjggOC42Yy0xMi4zLTExLjQtMzEuMy0xMS40LTQzLjUgMGwtMjI0IDIwOGMtOS42IDktMTIuOCAyMi45LTggMzUuMVM1MC44IDI3MiA2NCAyNzJsMTYgMCAwIDE3NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTYgMGMtMjEuMi0yOS41LTM0LjMtNjUuMy0zNS45LTEwNEwyNzIgNDA4Yy04LjggMC0xNi03LjItMTYtMTZsMC00MC00MCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDAgMCAwLTQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQwIDIwIDBjMzQuOS00OC41IDkxLjctODAgMTU2LTgwIDEwLjcgMCAyMS4xIC45IDMxLjMgMi41TDMwOS44IDguNnpNNDk2IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYUNvZGVDb21taXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29kZS1jb21taXQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjM4NiIsICJNMjg4IDMzNmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMTU2LjgtNDhDNDMwIDM2MSAzNjUuNCA0MTYgMjg4IDQxNlMxNDYgMzYxIDEzMS4yIDI4OEwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTkuMiAwQzE0NiAxNTEgMjEwLjYgOTYgMjg4IDk2czE0MiA1NSAxNTYuOCAxMjhsOTkuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05OS4yIDB6Il0KICAgIH07CiAgICBmYVBlcnNvbkJyZWFzdGZlZWRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWJyZWFzdGZlZWRpbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTUzYSIsICJNMjI0IDBhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6TTQzNi44IDM4Mi44TDM3My41IDQ2MmMtMTYuNiAyMC43LTQ2LjggMjQuMS02Ny41IDcuNS0xNy42LTE0LjEtMjIuNy0zOC4xLTEzLjUtNTcuN2wtLjctLjFjLTM4LjktNS42LTc0LjMtMjUuMS05OS43LTU0LjhsMC0zNi44YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDhjMCAuOCAwIDEuNiAuMSAyLjRsMTAxLjQgNTAuN2MyMy43IDExLjkgMzMuMyA0MC43IDIxLjUgNjQuNHMtNDAuNyAzMy4zLTY0LjQgMjEuNUwyNy4yIDQyNy4zYy0xLjEtLjUtMi4yLTEuMS0zLjMtMS43LTQuOS0yLjgtOS4yLTYuNC0xMi42LTEwLjYtNC42LTUuNC03LjgtMTEuNy05LjYtMTguNC0zLjMtMTItMS45LTI1LjIgNC44LTM2LjYgLjYtMS4xIDEuMy0yLjIgMi0zLjJMNzUuNiAyNTYuMWMyNi43LTQwLjEgNzEuNy02NC4xIDExOS44LTY0LjFsNzUuMiAwYzQ2LjUgMCA5MC4xIDIyLjUgMTE3LjIgNjAuM2w1MC43IDcwLjljMi4yIDMgNCA2LjEgNS41IDkuNCAyLjkgNi43IDQuMyAxMy44IDQgMjAuOC0uMyAxMC42LTQuMiAyMS0xMS4yIDI5LjR6TTMyMCAzMzJhNDQgNDQgMCAxIDAgLTg4IDAgNDQgNDQgMCAxIDAgODggMHoiXQogICAgfTsKICAgIGZhUGVyc29uUmF5cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tcmF5cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTRkIiwgIk0zMTIuNSAyNGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6bTI0IDIxMi43bDQ2LjMgNjIuNGMxMC41IDE0LjIgMzAuNiAxNy4yIDQ0LjggNi42czE3LjItMzAuNiA2LjYtNDQuOGwtNzAuNS05NUMzMzguNSAxMzIgMjk4LjggMTEyIDI1Ni41IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42bDQ2LjMtNjIuNCAwIDI3NS4zYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTcuNSA3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw4MCA4MGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDEuNSA3QzMyLjEtMi4zIDE2LjktMi4zIDcuNSA3em00NjQgMGwtODAgODBjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw4MC04MGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwek03LjUgNTA1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDgwLTgwYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTgwIDgwYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXptNDY0IDBjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC04MC04MGMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw4MCA4MHoiXQogICAgfTsKICAgIGZhTWFuYXRTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hbmF0LXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTFkNSIsICJNMTkyIDMyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQxLjVDNzMuMyAxMDkuMyAwIDE5MC4xIDAgMjg4TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC02Mi41IDQ0LjgtMTE0LjUgMTA0LTEyNS44TDE2OCA0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI5My44YzU5LjIgMTEuMiAxMDQgNjMuMyAxMDQgMTI1LjhsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTk3LjktNzMuMy0xNzguNy0xNjgtMTkwLjVMMjE2IDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFTb3J0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNvcnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsidW5zb3J0ZWQiXSwgImYwZGMiLCAiTTIuNCAyMDQuMmM1IDEyIDE2LjYgMTkuOCAyOS42IDE5LjhsMzIwIDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjBjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45em0wIDEwMy41Yy01IDEyLTIuMiAyNS43IDYuOSAzNC45bDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVMzNjQuOSAyODggMzUyIDI4OEwzMiAyODhjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5Ljh6Il0KICAgIH07CiAgICBmYVVuc29ydGVkID0gZmFTb3J0OwogICAgZmFDaXJjbGVSYWRpYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXJhZGlhdGlvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3NjIsICJyYWRpYXRpb24tYWx0Il0sICJmN2JhIiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem04MCAwbDY0LjMgMGM4LjcgMCAxNS43LTcuMSAxNy4zLTE1LjYgNC40LTI0LjQgMTguMS00NS41IDM3LjItNTkuNyA3LjQtNS41IDEwLjYtMTUuNiA2LTIzLjZsLTMyLjUtNTYuM2MtNC4zLTcuNS0xMy45LTEwLjMtMjEuMi01LjUtNDguMiAzMS41LTgxLjMgODQuMi04Ni4zIDE0NC44LS43IDguOCA2LjUgMTYgMTUuMyAxNnptMTM3LjkgODkuOGMtOC41LTMuNy0xOC44LTEuNC0yMy41IDYuNmwtMzEgNTMuOGMtNC4zIDcuNS0xLjkgMTcuMiA1LjggMjEuMSAyNi4xIDEzLjIgNTUuNSAyMC43IDg2LjggMjAuN3M2MC43LTcuNSA4Ni44LTIwLjdjNy43LTMuOSAxMC4xLTEzLjYgNS44LTIxLjFsLTMxLTUzLjhjLTQuNi04LTE1LTEwLjMtMjMuNS02LjYtMTEuNyA1LTI0LjUgNy44LTM4LjEgNy44cy0yNi40LTIuOC0zOC4xLTcuOHpNMzUwLjQgMjQwLjRjMS42IDguNiA4LjUgMTUuNiAxNy4zIDE1LjZsNjQuMyAwYzguOCAwIDE2LjEtNy4yIDE1LjMtMTYtNS02MC42LTM4LjEtMTEzLjItODYuMy0xNDQuOC03LjMtNC44LTE2LjgtMi0yMS4yIDUuNUwzMDcuMyAxNTdjLTQuNiA4LTEuNCAxOC4xIDYgMjMuNiAxOS4xIDE0LjIgMzIuNyAzNS40IDM3LjIgNTkuN3pNMjU2IDMwNS43YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnoiXQogICAgfTsKICAgIGZhUmFkaWF0aW9uQWx0ID0gZmFDaXJjbGVSYWRpYXRpb247CiAgICBmYUxhcHRvcENvZGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGFwdG9wLWNvZGUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjVmYyIsICJNNjQgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDAtNjQgMCAwLTI0MC0zODQgMCAwIDI0MC02NCAwIDAtMjQwek0wIDQwMy4yQzAgMzkyLjYgOC42IDM4NCAxOS4yIDM4NGw2MDEuNiAwYzEwLjYgMCAxOS4yIDguNiAxOS4yIDE5LjIgMCA0Mi40LTM0LjQgNzYuOC03Ni44IDc2LjhMNzYuOCA0ODBDMzQuNCA0ODAgMCA0NDUuNiAwIDQwMy4yek0yODEgMjA5bC0zMSAzMSAzMSAzMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00OC00OGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNDgtNDhjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45ek0zOTMgMTc1bDQ4IDQ4YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC00OCA0OGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAweiJdCiAgICB9OwogICAgZmFTaW5rID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNpbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA2ZCIsICJNMjg4IDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzIgMTQuMyAzMiAzMiAzMiAzMi0xNC4zIDMyLTMyYzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2bDAgMTkyLTY0IDAgMC00MGMwLTMwLjktMjUuMS01Ni01Ni01NmwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwYzQuNCAwIDggMy42IDggOGwwIDQwLTgwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMCA2NGMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC02NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtODAgMCAwLTQwYzAtNC40IDMuNi04IDgtOGw1NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC01NiAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDQwLTY0IDAgMC0xOTJ6Il0KICAgIH07CiAgICBmYUFycm93VXBGcm9tV2F0ZXJQdW1wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLWZyb20td2F0ZXItcHVtcCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGI2IiwgIk0xNDQgMzJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTc2LTE2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNzkuNmMxNy42LTIgMzYgMi41IDUxLjMgMTQgMy40IDIuNiA2LjEgMS40IDkuOC0uM2wuOC0uNGM1LjctMi42IDEyLjktNi45IDIxLjctMTMuNSAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjMtMzEuNCAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjQgMjIuMSAxNi42IDI5LjEgMTYuNiA1MS4yIDAgMjcuNS0yMC43IDU5LjktMzEuMiA5Mi40LTMxLjQgMzMuMS0uMiA2Ni4zIDEwLjIgOTQuNCAzMS40IDYuOSA1LjIgMTIuOCA5IDE4IDExLjcgLjYgLjMgMS4yIC42IDEuOCAxIDQuMiAyLjMgOC41IDQuNiAxMi42IDEuNSAxMC43LTguMSAyMi45LTEyLjcgMzUuMy0xNC4xbDAtNzkuNWMwLTI2LjUtMjEuNS00OC00OC00OGwtNTYgMCAwLTE0Mi4xIDQ3IDQ3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0OTcgMzljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC04OCA4OGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDQ3LTQ3IDAgMTQyLjEtMTM2IDAgMC0xNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhMMTQ0IDMyek00NzQuNiA0NzYuMWMxOSAxNC40IDQxLjkgMjguMiA2Ny4yIDMzLjMgMjYuNSA1LjQgNTQuMyAuOCA4MC43LTE5LjEgMTAuNi04IDEyLjctMjMgNC43LTMzLjZzLTIzLTEyLjctMzMuNi00LjdjLTE0LjkgMTEuMi0yOC42IDEzLjEtNDIuMyAxMC4zLTE0LjktMy0zMC45LTExLjktNDcuOC0yNC42LTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNzLTMwLjUtOC4yLTU0LjUtMjYuM2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTIxLjYgMTYuMy00MS4zIDI1LjgtNTguOSAyNS43LTkuNi0uMS0xOS45LTMtMzEuMi0xMS41LTEwLjYtOC0yNS42LTUuOS0zMy42IDQuN1M3IDQ4Mi4zIDE3LjYgNDkwLjNjMTkuMSAxNC40IDM5LjQgMjEgNTkuOCAyMS4xIDMzLjkgLjIgNjQuMy0xNy40IDg4LjEtMzUuMyAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAweiJdCiAgICB9OwogICAgZmFNaWNyb3Bob25lTGluZXNTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtaWNyb3Bob25lLWxpbmVzLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbIm1pY3JvcGhvbmUtYWx0LXNsYXNoIl0sICJmNTM5IiwgIk03LTI0LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMTUxIDE1MSAwLTMwLjJjMC01MyA0My05NiA5Ni05NiA1MC4zIDAgOTEuNiAzOC43IDk1LjcgODhMMzI4IDg4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDU2IDAgMCA0OC01NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDU1LjcgMGMtMS45IDIyLjktMTEuOCA0My40LTI2LjkgNTlsMzMuOSAzMy45YzI1LjUtMjYgNDEuMy02MS42IDQxLjMtMTAwLjlsMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDBjMCA1Mi42LTIxLjEgMTAwLjItNTUuMyAxMzQuOEw1NjkgNTAzLjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEw3IDkuMUMtMi4zLS4zLTIuMy0xNS41IDctMjQuOXpNMjk3LjggMzY3LjdsNDEuNCA0MS40Yy04LjggMi40LTE3LjkgNC4zLTI3LjMgNS40bDAgNDkuNSA0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0OCAwIDAtNDkuNUMxNjkuMyA0MDIuNyA5NiAzMjEuOSA5NiAyMjRsMC00MGMwLTUuMSAxLjYtOS45IDQuNC0xMy44bDQzLjYgNDMuNiAwIDEwLjJjMCA3OS41IDY0LjUgMTQ0IDE0NCAxNDQgMy4zIDAgNi42LS4xIDkuOC0uM3oiXQogICAgfTsKICAgIGZhTWljcm9waG9uZUFsdFNsYXNoID0gZmFNaWNyb3Bob25lTGluZXNTbGFzaDsKICAgIGZhU2VydmVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNlcnZlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjMzIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptMjE2IDcyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNTYgMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNNjQgMjg4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMjg4em0yMTYgNzJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em01NiAyNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFVc2VyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTAwLCA2MjE0NCwgNjI0NzAsICJ1c2VyLWFsdCIsICJ1c2VyLWxhcmdlIl0sICJmMDA3IiwgIk0yMjQgMjQ4YTEyMCAxMjAgMCAxIDAgMC0yNDAgMTIwIDEyMCAwIDEgMCAwIDI0MHptLTI5LjcgNTZDOTUuOCAzMDQgMTYgMzgzLjggMTYgNDgyLjMgMTYgNDk4LjcgMjkuMyA1MTIgNDUuNyA1MTJsMzU2LjYgMGMxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuNyAwLTk4LjUtNzkuOC0xNzguMy0xNzguMy0xNzguM2wtNTkuNCAweiJdCiAgICB9OwogICAgZmFVc2VyQWx0MiA9IGZhVXNlcjI7CiAgICBmYVVzZXJMYXJnZTIgPSBmYVVzZXIyOwogICAgZmFTbm93Zmxha2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNub3dmbGFrZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEwMDUyLCAxMDA1NF0sICJmMmRjIiwgIk0yODguMiAwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjIuMS0xNS0xNWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw0OSA0OSAwIDcwLjYtNjEuMi0zNS4zLTE3LjktNjYuOWMtMy40LTEyLjgtMTYuNi0yMC40LTI5LjQtMTdTOTUuMyA5OCA5OC43IDExMC44bDUuNSAyMC41LTUzLjctMzFDMzUuMiA5MS41IDE1LjYgOTYuNyA2LjggMTEycy0zLjYgMzQuOSAxMS43IDQzLjdsNTMuNyAzMS0yMC41IDUuNWMtMTIuOCAzLjQtMjAuNCAxNi42LTE3IDI5LjRzMTYuNiAyMC40IDI5LjQgMTdsNjYuOS0xNy45IDYxLjIgMzUuMy02MS4yIDM1LjMtNjYuOS0xNy45Yy0xMi44LTMuNC0yNiA0LjItMjkuNCAxN3M0LjIgMjYgMTcgMjkuNGwyMC41IDUuNS01My43IDMxQzMuMiAzNjUuMS0yIDM4NC43IDYuOCA0MDBzMjguNCAyMC42IDQzLjcgMTEuN2w1My43LTMxLTUuNSAyMC41Yy0zLjQgMTIuOCA0LjIgMjYgMTcgMjkuNHMyNi00LjIgMjkuNC0xN2wxNy45LTY2LjkgNjEuMi0zNS4zIDAgNzAuNi00OSA0OWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDE1LTE1IDAgNjIuMWMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjIuMSAxNSAxNWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTQ5LTQ5IDAtNzAuNiA2MS4yIDM1LjMgMTcuOSA2Ni45YzMuNCAxMi44IDE2LjYgMjAuNCAyOS40IDE3czIwLjQtMTYuNiAxNy0yOS40bC01LjUtMjAuNSA1My43IDMxYzE1LjMgOC44IDM0LjkgMy42IDQzLjctMTEuN3MzLjYtMzQuOS0xMS43LTQzLjdsLTUzLjctMzEgMjAuNS01LjVjMTIuOC0zLjQgMjAuNC0xNi42IDE3LTI5LjRzLTE2LjYtMjAuNC0yOS40LTE3bC02Ni45IDE3LjktNjEuMi0zNS4zIDYxLjItMzUuMyA2Ni45IDE3LjljMTIuOCAzLjQgMjYtNC4yIDI5LjQtMTdzLTQuMi0yNi0xNy0yOS40bC0yMC41LTUuNSA1My43LTMxYzE1LjMtOC44IDIwLjYtMjguNCAxMS43LTQzLjdzLTI4LjQtMjAuNS00My43LTExLjdsLTUzLjcgMzEgNS41LTIwLjVjMy40LTEyLjgtNC4yLTI2LTE3LTI5LjRzLTI2IDQuMi0yOS40IDE3bC0xNy45IDY2LjktNjEuMiAzNS4zIDAtNzAuNiA0OS00OWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0xNSAxNSAwLTYyLjF6Il0KICAgIH07CiAgICBmYVNrdWxsQ3Jvc3Nib25lcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJza3VsbC1jcm9zc2JvbmVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MzY5LCA5NzYwXSwgImY3MTQiLCAiTTM4NCAxNDRDMzg0IDY0LjUgMzEyLjQgMCAyMjQgMFM2NCA2NC41IDY0IDE0NGMwIDQ3LjEgMjUuMSA4OC45IDY0IDExNS4ybDAgMjguOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTI4LjhjMzguOS0yNi4zIDY0LTY4LjEgNjQtMTE1LjJ6TTE2MCAxMjhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em05NiAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek00NDUuNSAzMzkuN2MtNi44LTE2LjMtMjUuNS0yNC00MS44LTE3LjJMMjI0IDM5Ny4zIDQ0LjMgMzIyLjVjLTE2LjMtNi44LTM1IC45LTQxLjggMTcuMnMuOSAzNSAxNy4yIDQxLjhMMTQwLjggNDMyIDE5LjcgNDgyLjVDMy40IDQ4OS4zLTQuMyA1MDggMi41IDUyNC4zczI1LjUgMjQgNDEuOCAxNy4yTDIyNCA0NjYuNyA0MDMuNyA1NDEuNWMxNi4zIDYuOCAzNS0uOSA0MS44LTE3LjJzLS45LTM1LTE3LjItNDEuOEwzMDcuMiA0MzIgNDI4LjMgMzgxLjVjMTYuMy02LjggMjQtMjUuNSAxNy4yLTQxLjh6Il0KICAgIH07CiAgICBmYVBlc29TaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlc28tc2lnbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMjIyIiwgIk0xMTIgMzJDOTQuMyAzMiA4MCA0Ni4zIDgwIDY0bDAgNjQtMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNCAwIDAgMzItMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNCAwIDAgMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiA5NiAwYzY1LjYgMCAxMjItMzkuNSAxNDYuNy05NmwzNy4zIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI0LjggMGMuNS01LjMgLjgtMTAuNiAuOC0xNnMtLjMtMTAuNy0uOC0xNmwyNC44IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTM3LjMgMEMzNjIgNzEuNSAzMDUuNiAzMiAyNDAgMzJMMTEyIDMyem0xOTkuNiA5NmwtMTY3LjYgMCAwLTMyIDk2IDBjMjguNCAwIDU0IDEyLjQgNzEuNiAzMnpNMTQ0IDE3NmwxOTAuNyAwYy45IDUuMiAxLjMgMTAuNSAxLjMgMTZzLS41IDEwLjgtMS4zIDE2bC0xOTAuNyAwIDAtMzJ6bTE2Ny42IDgwYy0xNy42IDE5LjYtNDMuMSAzMi03MS42IDMybC05NiAwIDAtMzIgMTY3LjYgMHoiXQogICAgfTsKICAgIGZhV2luZUdsYXNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndpbmUtZ2xhc3MiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMjc4NjNdLCAiZjRlMyIsICJNMzIuNiAyNS43QzM1LjYgMTAuOCA0OC43IDAgNjQgMEwyNTYgMGMxNS4zIDAgMjguNCAxMC44IDMxLjQgMjUuN0wzMTYuOCAxNzNjMi4xIDEwLjUgMy4yIDIxLjIgMy4yIDMybDAgM2MwIDc3LjQtNTUgMTQyLTEyOCAxNTYuOGwwIDExNS4yIDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNjQgNTQ0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDAgMC0xMTUuMkM1NSAzNTAgMCAyODUuNCAwIDIwOGwwLTNjMC0xMC43IDEuMS0yMS40IDMuMi0zMkwzMi42IDI1Ljd6TTc3LjQgMTI4bDE2NS4xIDAtMTIuOC02NC0xMzkuNSAwLTEyLjggNjR6Il0KICAgIH07CiAgICBmYVRlbXBlcmF0dXJlSGFsZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW1wZXJhdHVyZS1oYWxmIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTI3Nzc3LCAidGVtcGVyYXR1cmUtMiIsICJ0aGVybW9tZXRlci0yIiwgInRoZXJtb21ldGVyLWhhbGYiXSwgImYyYzkiLCAiTTE2MCAwQzEwNyAwIDY0IDQzIDY0IDk2bDAgMTY0LjdDMzQuNSAyODcgMTYgMzI1LjQgMTYgMzY4IDE2IDQ0Ny41IDgwLjUgNTEyIDE2MCA1MTJzMTQ0LTY0LjUgMTQ0LTE0NGMwLTQyLjYtMTguNS04MS00OC0xMDcuM0wyNTYgOTZjMC01My00My05Ni05Ni05NnptNjQgMzY4YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0YzAtMjYuOSAxNi41LTQ5LjkgNDAtNTkuM2wwLTkyLjdjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDkyLjdjMjMuNSA5LjUgNDAgMzIuNSA0MCA1OS4zeiJdCiAgICB9OwogICAgZmFUZW1wZXJhdHVyZTIgPSBmYVRlbXBlcmF0dXJlSGFsZjsKICAgIGZhVGhlcm1vbWV0ZXIyID0gZmFUZW1wZXJhdHVyZUhhbGY7CiAgICBmYVRoZXJtb21ldGVySGFsZiA9IGZhVGVtcGVyYXR1cmVIYWxmOwogICAgZmFUaWNrZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGlja2V0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTAzXSwgImYxNDUiLCAiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4bDAgNjRDMCAyMDAuOCA3LjQgMjA3LjcgMTUuNyAyMTAuNiAzNC41IDIxNy4xIDQ4IDIzNSA0OCAyNTZzLTEzLjUgMzguOS0zMi4zIDQ1LjRDNy40IDMwNC4zIDAgMzExLjIgMCAzMjBsMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY0YzAtOC44LTcuNC0xNS43LTE1LjctMTguNi0xOC44LTYuNS0zMi4zLTI0LjQtMzIuMy00NS40czEzLjUtMzguOSAzMi4zLTQ1LjRjOC4zLTIuOSAxNS43LTkuOCAxNS43LTE4LjZsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNNDE2IDMzNmwwLTE2MC0yNTYgMCAwIDE2MCAyNTYgMHpNMTEyIDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyODggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjg4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTkyeiJdCiAgICB9OwogICAgZmFXaGVhdEF3bkNpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndoZWF0LWF3bi1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU5OCIsICJNNDk2IDU3NmExNDQgMTQ0IDAgMSAxIDAtMjg4IDE0NCAxNDQgMCAxIDEgMCAyODh6TTgxIDUyOWMtOS40IDkuMy0yNC41IDkuMy0zMy45IDAtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlMODEgNTI5em0zMC4yLTI5NC40YzYuMi00LjEgMTQuNy0zLjQgMjAuMSAyLjFsNDYuMSA0Ni4xIDYuMSA2LjdjMTkuNyAyMy44IDI2LjMgNTUgMTkuMyA4My45IDMxLjctNy43IDY2LjIgMSA5MC42IDI1LjNsMTIgMTJjLS44IDctMS4yIDE0LjItMS4yIDIxLjQgMCAyMCAzIDM5LjMgOC43IDU3LjQtMzYuOCAyMS44LTg1IDE3LTExNi42LTE0LjdMMTY1LjYgNDQ0LjMgODEgNTI5QzY5LjcgNTE3LjcgNTguNCA1MDYuMyA0NyA0OTVsODQuNy04NC43LTMwLjUtMzAuNWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMXpNNDk2IDQ3NmEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6bTAtMTQwYy04LjggMC0xNiA3LjItMTYgMTZsMCA4MGMwIDguOCA3LjIgMTYgMTYgMTYgOC44IDAgMTYtNy4yIDE2LTE2bDAtODBjMC04LjgtNy4yLTE2LTE2LTE2ek0yMTUuMiAxMzAuNmM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDQ2LjEgNDYuMSA2LjEgNi43YzE5LjcgMjMuOCAyNi4zIDU1IDE5LjMgODMuOSAyNC4yLTUuOSA1MC4xLTIuMSA3MS45IDEwLjgtMzIuMiAyNC45LTU2LjIgNTkuOC02Ny40IDEwMC4xLTMuOC0yLjgtNy41LTYtMTEtOS41bC05NC45LTk0LjljLTM3LjUtMzcuNS0zNy41LTk4LjMgMC0xMzUuN2w3LjQtNy40IDIuNS0yLjF6TTUyNi43IDE1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwIDguOCA4LjggOS4zIDIyLjcgMS43IDMyLjFMNTYwLjYgNDkgNDQ2LjIgMTYzLjRjNy43IDEgMTUuMyAzIDIyLjUgNS45TDUyNyAxMTFjOS40LTkuNCAyNC42LTkuNCAzNCAwIDguOCA4LjggOS4zIDIyLjcgMS42IDMyLjFsLTEuNyAxLjgtNTIuNyA1Mi43IDM5IDM5YzMuMiAzLjIgNC43IDcuNCA0LjcgMTEuNi0xNy43LTUuNC0zNi41LTguMy01NS45LTguMy0zNC4yIDAtNjYuMyA4LjktOTQuMSAyNC42bC05Mi43LTkyLjdjLTM3LjUtMzcuNS0zNy41LTk4LjMgMC0xMzUuOGw3LjQtNy40IDIuNS0yLjFjNi4yLTQuMSAxNC43LTMuNCAyMC4xIDIuMWwzOSAzOSA1Mi43LTUyLjdjOS40LTkuNCAyNC42LTkuNCAzNCAwIDguOCA4LjggOS4zIDIyLjcgMS42IDMyLjFMNDY1IDQ5IDQwNi43IDEwNy4zYzIuOCA3LjEgNC43IDE0LjUgNS44IDIyLjFMNTI2LjcgMTV6Il0KICAgIH07CiAgICBmYUFycm93c1R1cm5SaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtdHVybi1yaWdodCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNGMwIiwgIk0zMTMuNC02LjZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wzMzguNyAxMjggMTI4IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDI0MS43IDAgMjI0bDAtMzJDMCAxMjEuMyA1Ny4zIDY0IDEyOCA2NGwyMTAuNyAwLTI1LjQtMjUuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjN6bS05NiAyNTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyNDIuNyAzODQgOTYgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhsMC0zMmMwLTUzIDQzLTk2IDk2LTk2bDE0Ni43IDAtMjUuNC0yNS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3oiXQogICAgfTsKICAgIGZhQ2FuZHlDYW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbmR5LWNhbmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjc4NiIsICJNNDIxLjggMzkuNkM0NTIgODUuMiA0NTYuNSAxNDIuOSA0MzUuMSAxOTJsLTE2NS40IDAgNDEuNC00MS40Yy44LS44IDEuNS0xLjYgMi4yLTIuNEw0MjEuOCAzOS42ek0yNjggMTAyLjljLS44IC43LTEuNiAxLjQtMi40IDIuMmwtMjguMSAyOC4xYy0yNSAyNS02NS41IDI1LTkwLjUgMHMtMjUtNjUuNSAwLTkwLjVMMTc1IDE0LjZDMjI5LjktNDAuMiAzMTQuNS00Ni43IDM3Ni41LTUuNkwyNjggMTAyLjl6TTEyNS43IDMzNmw4MC04MCAxODEgMC04Mi41IDgyLjUgMC0yLjUtMTc4LjUgMHptMTE3IDY0TDE0MS40IDUwMS4zYy0yNSAyNS02NS41IDI1LTkwLjUgMHMtMjUtNjUuNSAwLTkwLjVsMTAuNy0xMC43IDE4MSAweiJdCiAgICB9OwogICAgZmFXaGVlbGNoYWlyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndoZWVsY2hhaXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjE5MyIsICJNMTM2IDQwYTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMTE3LjkgMTk3LjZsMTIuNiA2M2MtMzguNiAxMi40LTY2LjUgNDguNy02Ni41IDkxLjQgMCA1MyA0MyA5NiA5NiA5NiAzNS42IDAgNjYuNy0xOS40IDgzLjMtNDguMiAyLjMgLjEgNC42IC4yIDcgLjJsNC4xIDBjMSAwIDIuMSAwIDMuMSAwbDU1LjIgMGMtMjAuNCA2NC45LTgxIDExMi0xNTIuNyAxMTItODguNCAwLTE2MC03MS42LTE2MC0xNjAgMC03My44IDUwLTEzNS45IDExNy45LTE1NC40em0xNDguNi0yOC4xbDIzLjcgMTE4LjUgNjAuNSAwYzMzLjMgMCA2My4yIDIwLjcgNzQuOSA1MS45bDI1LjUgNjggMTguNy02LjJjMTYuOC01LjYgMzQuOSAzLjUgNDAuNSAyMC4ycy0zLjUgMzQuOS0yMC4yIDQwLjVsLTQ4IDE2Yy0xNi4zIDUuNC0zNC0zLTQwLjEtMTkuMWwtMzYuMy05Ni45Yy0yLjMtNi4yLTguMy0xMC40LTE1LTEwLjRsLTg2LjEgMGMtLjQgMC0uOCAwLTEuMyAwbC0xMy4xIDBjLTMwLjUgMC01Ni44LTIxLjUtNjIuOC01MS40TDE2NS4zIDE4OS43Yy02LjQtMzEuOSAxOC02MS43IDUwLjYtNjEuNyAyNC42IDAgNDUuOCAxNy40IDUwLjYgNDEuNXoiXQogICAgfTsKICAgIGZhU3BlbGxDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcGVsbC1jaGVjayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmODkxIiwgIk0xMjAgMzJjLTQ4LjYgMC04OCAzOS40LTg4IDg4bDAgMTY4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NCA2NCAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2OGMwLTQ4LjYtMzkuNC04OC04OC04OGwtMTYgMHptNDAgMTI4bC02NCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwek0zMDQgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjI0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDcyIDBjNDguNiAwIDg4LTM5LjQgODgtODggMC0yMy42LTkuMy00NS0yNC40LTYwLjggMTAuMy0xNC40IDE2LjQtMzIuMSAxNi40LTUxLjIgMC00OC42LTM5LjQtODgtODgtODhsLTY0IDB6bTY0IDExMmwtMzIgMCAwLTQ4IDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6TTMzNiAyNTZsMC00OCA0MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00MCAwem0yMzMgODRjMTEtMTMuOCA4LjgtMzMuOS01LTQ1cy0zMy45LTguOC00NSA1bC0xMDUuNyAxMzIuMS0zOC43LTM4LjdjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzYuNCA2LjQgMTUuMyA5LjggMjQuNCA5LjNzMTcuNS00LjkgMjMuMi0xMkw1NjkgMzQweiJdCiAgICB9OwogICAgZmFWb2x1bWVPZmYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidm9sdW1lLW9mZiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMDI2IiwgIk05NiAzNTJsLTQ4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDhsNDggMCAxMzQuMS0xMTkuMmM2LjQtNS43IDE0LjYtOC44IDIzLjEtOC44IDE5LjIgMCAzNC44IDE1LjYgMzQuOCAzNC44bDAgMzc4LjRjMCAxOS4yLTE1LjYgMzQuOC0zNC44IDM0LjgtOC41IDAtMTYuNy0zLjEtMjMuMS04LjhMOTYgMzUyeiJdCiAgICB9OwogICAgZmFMdW5ncyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsdW5ncyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyOTcyOV0sICJmNjA0IiwgIk0zMjAgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxNDEuOS0zMiAxOS4yIDAtMTE2LjdjMC0yNC41LTE5LjktNDQuNC00NC40LTQ0LjQtMTIuNSAwLTI0LjQgNS4zLTMyLjggMTQuNWwtMjYuNCAyOUM0Mi45IDE2MC44IDAgMjcxLjggMCAzODdsMCAzMC41YzAgNTIuMiA0Mi4zIDk0LjUgOTQuNSA5NC41IDIyIDAgNDMuNy01LjEgNjMuNC0xNWw1LTIuNWMzNy40LTE4LjcgNjEtNTYuOSA2MS05OC44bDAtMTI4IDY0LTM4LjQgNjQgMzguNCAwIDEyOGMwIDQxLjggMjMuNiA4MC4xIDYxIDk4LjhsNSAyLjVjMTkuNyA5LjggNDEuNCAxNSA2My40IDE1IDUyLjIgMCA5NC41LTQyLjMgOTQuNS05NC41bDAtNi4yYzAtMTExLjEtMzYuNy0yMTktMTA0LjQtMzA3TDQyOC45IDQ4LjdjLTguMS0xMC42LTIwLjctMTYuNy0zNC0xNi43LTIzLjcgMC00Mi45IDE5LjItNDIuOSA0Mi45bDAgMTE4LjItMzItMTkuMiAwLTE0MS45eiJdCiAgICB9OwogICAgZmFCb29rbWFyazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9va21hcmsiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyNzgsIDYxNTkxXSwgImYwMmUiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDgwYzAgMTEuNSA2LjIgMjIuMiAxNi4yIDI3LjhzMjIuMyA1LjUgMzIuMi0uNEwxOTIgNDIxLjMgMzM1LjUgNTA3LjRjOS45IDUuOSAyMi4yIDYuMSAzMi4yIC40UzM4NCA0OTEuNSAzODQgNDgwbDAtNDE2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6Il0KICAgIH07CiAgICBmYUJhcmNvZGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFyY29kZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDJhIiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJMNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJ6bTg4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDAwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MDBjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTcyIDMybDAgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zODRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6bTIwOC04bDAgNDAwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6bS05NiAwbDAgNDAwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6Il0KICAgIH07CiAgICBmYUxpc3RPbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaXN0LW9sIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxpc3QtMS0yIiwgImxpc3QtbnVtZXJpYyJdLCAiZjBjYiIsICJNMCA3MkMwIDU4LjggMTAuNyA0OCAyNCA0OGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTA0IDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTk2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQgMCAwLTgwLTI0IDBDMTAuNyA5NiAwIDg1LjMgMCA3MnpNMzAuNCAzMDEuMkM0MS44IDI5Mi42IDU1LjcgMjg4IDcwIDI4OGw0LjkgMGMzMy43IDAgNjEuMSAyNy40IDYxLjEgNjEuMSAwIDE5LjYtOS40IDM3LjktMjUuMiA0OS40bC0yNCAxNy41IDMzLjIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOTAuNyAwQzEzLjEgNDY0IDAgNDUwLjkgMCA0MzQuNyAwIDQyNS4zIDQuNSA0MTYuNSAxMi4xIDQxMWw3MC41LTUxLjNjMy40LTIuNSA1LjQtNi40IDUuNC0xMC42IDAtNy4yLTUuOS0xMy4xLTEzLjEtMTMuMUw3MCAzMzZjLTMuOSAwLTcuNyAxLjMtMTAuOCAzLjZMMzguNCAzNTUuMmMtMTAuNiA4LTI1LjYgNS44LTMzLjYtNC44Uy0xIDMyNC44IDkuNiAzMTYuOGwyMC44LTE1LjZ6TTIyNCA2NGwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTYwbDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxNjBsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFMaXN0MTIgPSBmYUxpc3RPbDsKICAgIGZhTGlzdE51bWVyaWMgPSBmYUxpc3RPbDsKICAgIGZhRmlsZUNpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1YTEiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTIyLjctMzEuNS0zNi03MC4yLTM2LTExMiAwLTEwMC42IDc3LjQtMTgzLjIgMTc2LTE5MS4zbDAtMzguMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdsLTM2LjcgMzYuNyAzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6Il0KICAgIH07CiAgICBmYUN1YmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3ViZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWIyIiwgIk0yMjQuMy0yLjVjMTkuOC0xMS40IDQ0LjItMTEuNCA2NCAwTDQ2NC4yIDk5YzE5LjggMTEuNCAzMiAzMi42IDMyIDU1LjRsMCAyMDNjMCAyMi45LTEyLjIgNDQtMzIgNTUuNEwyODguMyA1MTQuNWMtMTkuOCAxMS40LTQ0LjIgMTEuNC02NCAwTDQ4LjUgNDEzYy0xOS44LTExLjQtMzItMzIuNi0zMi01NS40bDAtMjAzYzAtMjIuOSAxMi4yLTQ0IDMyLTU1LjRMMjI0LjMtMi41em0yMDcuOCAzNjBsMC0xNjYuMS0xNDMuOCA4MyAwIDE2Ni4xIDE0My44LTgzeiJdCiAgICB9OwogICAgZmFUYXBlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhcGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRkYiIsICJNNDEyLjggNDE2YzQxLjUtNDAuNyA2Ny4yLTk3LjMgNjcuMi0xNjAgMC0xMjMuNy0xMDAuMy0yMjQtMjI0LTIyNFMzMiAxMzIuMyAzMiAyNTYgMTMyLjMgNDgwIDI1NiA0ODBsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEzMS4yIDB6TTI1NiAxNjBhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6bTQ4IDk2YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il0KICAgIH07CiAgICBmYUJvbWIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9tYiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODE2M10sICJmMWUyIiwgIk00ODAtMTZjNi45IDAgMTMgNC40IDE1LjIgMTAuOWwxMy41IDQwLjQgNDAuNCAxMy41QzU1NS42IDUxIDU2MCA1Ny4xIDU2MCA2NHMtNC40IDEzLTEwLjkgMTUuMmwtNDAuNCAxMy41LTEzLjUgNDAuNEM0OTMgMTM5LjYgNDg2LjkgMTQ0IDQ4MCAxNDRzLTEzLTQuNC0xNS4yLTEwLjlsLTEzLjUtNDAuNC00MC40LTEzLjVDNDA0LjQgNzcgNDAwIDcwLjkgNDAwIDY0czQuNC0xMyAxMC45LTE1LjJsNDAuNC0xMy41IDEzLjUtNDAuNEM0NjctMTEuNiA0NzMuMS0xNiA0ODAtMTZ6TTMyMS40IDk3LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTEwLjkgMTAuOWM3LjkgMjIgMTIuMiA0NS43IDEyLjIgNzAuNSAwIDExNC45LTkzLjEgMjA4LTIwOCAyMDhTMzIgNDE4LjkgMzIgMzA0IDEyNS4xIDk2IDI0MCA5NmMyNC43IDAgNDguNSA0LjMgNzAuNSAxMi4zbDEwLjktMTAuOXpNMTQ0IDMwNGMwLTUzIDQzLTk2IDk2LTk2IDEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0Yy03OS41IDAtMTQ0IDY0LjUtMTQ0IDE0NCAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0eiJdCiAgICB9OwogICAgZmFTY2FsZVVuYmFsYW5jZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2NhbGUtdW5iYWxhbmNlZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJiYWxhbmNlLXNjYWxlLWxlZnQiXSwgImY1MTUiLCAiTTUxOS44IDYyLjRjMTYuOC01LjYgMjUuOC0yMy43IDIwLjItNDAuNVM1MTYuMy0zLjkgNDk5LjYgMS42bC0xMTMgMzcuN2MtMTMuOS0yMy41LTM5LjYtMzkuMy02OC45LTM5LjMtNDQuMiAwLTgwIDM1LjgtODAgODAgMCAzIC4yIDUuOSAuNSA4LjhMMTE1LjYgMTI5LjZjLTE2LjggNS42LTI1LjggMjMuNy0yMC4yIDQwLjVzMjMuNyAyNS44IDQwLjUgMjAuMmwxMzUuNS00NS4yYzQuNSAzLjIgOS4zIDUuOSAxNC40IDguMmwwIDMyNi43YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNjAgMCAwLTI5NC43YzIxLTkuMiAzNy4yLTI3IDQ0LjItNDlsMTI1LjktNDJ6TTQzNy4zIDI4OGw3Mi40LTEyNC4yIDcyLjQgMTI0LjItMTQ0LjkgMHptNzIuNCA5NmM2Mi45IDAgMTE1LjItMzQgMTI2LTc4LjkgMi42LTExLTEtMjIuMy02LjctMzIuMUw1MzMuOCAxMDkuOGMtNS04LjYtMTQuMi0xMy44LTI0LjEtMTMuOHMtMTkuMSA1LjMtMjQuMSAxMy44TDM5MC40IDI3My4xYy01LjcgOS44LTkuMyAyMS4xLTYuNyAzMi4xIDEwLjggNDQuOCA2My4xIDc4LjkgMTI2IDc4Ljl6TTEyNi44IDI5MS44bDcyLjQgMTI0LjItMTQ0LjkgMCA3Mi40LTEyNC4yek0uOSA0MzMuMUMxMS43IDQ3OCA2NCA1MTIgMTI2LjggNTEyczExNS4yLTM0IDEyNi03OC45YzIuNi0xMS0xLTIyLjMtNi43LTMyLjFMMTUwLjkgMjM3LjhjLTUtOC42LTE0LjItMTMuOC0yNC4xLTEzLjhzLTE5LjEgNS4zLTI0LjEgMTMuOEw3LjYgNDAxLjFjLTUuNyA5LjgtOS4zIDIxLjEtNi43IDMyLjF6Il0KICAgIH07CiAgICBmYUJhbGFuY2VTY2FsZUxlZnQgPSBmYVNjYWxlVW5iYWxhbmNlZDsKICAgIGZhU3F1YXJlQ2FyZXRMZWZ0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtY2FyZXQtbGVmdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYXJldC1zcXVhcmUtbGVmdCJdLCAiZjE5MSIsICJNMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNnpNMTI4IDI1NmMwLTYuNyAyLjgtMTMgNy43LTE3LjZsMTEyLTEwNGM3LTYuNSAxNy4yLTguMiAyNS45LTQuNFMyODggMTQyLjUgMjg4IDE1MmwwIDIwOGMwIDkuNS01LjcgMTguMi0xNC40IDIycy0xOC45IDIuMS0yNS45LTQuNGwtMTEyLTEwNGMtNC45LTQuNS03LjctMTAuOS03LjctMTcuNnoiXQogICAgfTsKICAgIGZhQ2FyZXRTcXVhcmVMZWZ0MiA9IGZhU3F1YXJlQ2FyZXRMZWZ0MjsKICAgIGZhUnVsZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVsZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgyMDddLCAiZjU0NSIsICJNMjA5LjEgNTE2LjJjLTE4LjcgMTguNy00OS4xIDE4LjctNjcuOSAwTDI4LjEgNDAzLjFjLTE4LjctMTguNy0xOC43LTQ5LjEgMC02Ny45bDE3LTE3IDczLjUgNzMuNWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTczLjUtNzMuNSAzMy45LTMzLjkgNTAuOSA1MC45YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTAuOS01MC45IDMzLjktMzMuOSA3My41IDczLjVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC03My41LTczLjUgMzMuOS0zMy45IDUwLjkgNTAuOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTUwLjktNTAuOSAzMy45LTMzLjkgNzMuNSA3My41YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNzMuNS03My41IDE3LTE3YzE4LjctMTguNyA0OS4xLTE4LjcgNjcuOSAwTDU0OC41IDEwOC45YzE4LjcgMTguNyAxOC43IDQ5LjEgMCA2Ny45TDIwOS4xIDUxNi4yeiJdCiAgICB9OwogICAgZmFJID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImkiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMDVdLCAiNDkiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw5NiAwIDAgMzIwLTk2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjU2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDAgMC0zMjAgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnoiXQogICAgfTsKICAgIGZhVm9sdW1lWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidm9sdW1lLXhtYXJrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInZvbHVtZS1tdXRlIiwgInZvbHVtZS10aW1lcyJdLCAiZjZhOSIsICJNNDggMzUybDQ4IDAgMTM0LjEgMTE5LjJjNi40IDUuNyAxNC42IDguOCAyMy4xIDguOCAxOS4yIDAgMzQuOC0xNS42IDM0LjgtMzQuOGwwLTM3OC40YzAtMTkuMi0xNS42LTM0LjgtMzQuOC0zNC44LTguNSAwLTE2LjcgMy4xLTIzLjEgOC44TDk2IDE2MCA0OCAxNjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDh6TTM2NyAxNzVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDQ3IDQ3LTQ3IDQ3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNDctNDcgNDcgNDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC00Ny00NyA0Ny00N2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC00NyA0Ny00Ny00N2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDB6Il0KICAgIH07CiAgICBmYVZvbHVtZU11dGUgPSBmYVZvbHVtZVhtYXJrOwogICAgZmFWb2x1bWVUaW1lcyA9IGZhVm9sdW1lWG1hcms7CiAgICBmYUFyY2h3YXkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJjaHdheSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTU3IiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsNDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6bTAgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwIDAtMTI4YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxMjggMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0yNzItNDQ4IDAgMCAyNzJ6Il0KICAgIH07CiAgICBmYVBlcnNvbkRpZ2dpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWRpZ2dpbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiZGlnZ2luZyJdLCAiZjg1ZSIsICJNMjA4IDQwYTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMTAuNSAxODEuM2M1LjktMTEuOSAyMC4zLTE2LjcgMzIuMi0xMC43bDI0LjYgMTIuMyAxMi4yLTIwLjRjMTguOS0zMS41IDUzLjItNTAuNSA4OS42LTUwLjUgNDYuMiAwIDg3LjcgMzAuNSAxMDAuNSA3NS40bDMyLjIgMTEyLjcgOTIuOSA0Ni40IDI1LjgtNDNjNS44LTkuNiAxNi4yLTE1LjUgMjcuNC0xNS41czIxLjcgNS45IDI3LjQgMTUuNWw5NiAxNjBjNS45IDkuOSA2LjEgMjIuMiAuNCAzMi4yUzU1NS41IDUxMiA1NDQgNTEybC0xOTIgMGMtMTEuNSAwLTIyLjItNi4yLTI3LjgtMTYuMnMtNS41LTIyLjMgLjQtMzIuMkwzNzAgMzg3LjggMjEuMyAyMTMuNWMtMTEuOS01LjktMTYuNy0yMC4zLTEwLjctMzIuMnpNOTQuMyAzMDcuNGwxMTIgNTZjMTAuOCA1LjQgMTcuNyAxNi41IDE3LjcgMjguNmwwIDg4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjguMi02MS4zLTMwLjctMzYuMyAxMDljLTUuNiAxNi44LTIzLjcgMjUuOC00MC41IDIwLjJTLTMuOSA0ODYuNiAxLjcgNDY5LjlsNDgtMTQ0YzIuOS04LjggOS41LTE1LjkgMTguMS0xOS40czE4LjMtMy4yIDI2LjYgLjl6Il0KICAgIH07CiAgICBmYURpZ2dpbmcgPSBmYVBlcnNvbkRpZ2dpbmc7CiAgICBmYUdhdWdlSGlnaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnYXVnZS1oaWdoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjI0NjEsICJ0YWNob21ldGVyLWFsdCIsICJ0YWNob21ldGVyLWFsdC1mYXN0Il0sICJmNjI1IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0yODggOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMjU2IDQxNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTE2LjItNi0zMS4xLTE2LTQyLjNsNjkuNS0xMzguOWM1LjktMTEuOSAxLjEtMjYuMy0xMC43LTMyLjJzLTI2LjMtMS4xLTMyLjIgMTAuN0wyNjEuMSAyODguMmMtMS43LS4xLTMuNC0uMi01LjEtLjItMzUuMyAwLTY0IDI4LjctNjQgNjRzMjguNyA2NCA2NCA2NHpNMTc2IDE0NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek05NiAyODhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0zNTItMzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiXQogICAgfTsKICAgIGZhVGFjaG9tZXRlckFsdCA9IGZhR2F1Z2VIaWdoOwogICAgZmFUYWNob21ldGVyQWx0RmFzdCA9IGZhR2F1Z2VIaWdoOwogICAgZmFHZW5kZXJsZXNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdlbmRlcmxlc3MiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjIyZCIsICJNMTkyIDEyOGExMjggMTI4IDAgMSAxIDAgMjU2IDEyOCAxMjggMCAxIDEgMC0yNTZ6bTAgMzIwYTE5MiAxOTIgMCAxIDAgMC0zODQgMTkyIDE5MiAwIDEgMCAwIDM4NHoiXQogICAgfTsKICAgIGZhQ2xvdWRTdW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQtc3VuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTkyNV0sICJmNmM0IiwgIk00NTMuNi0xNC44YzQuOSAyIDguNSA2LjQgOS41IDExLjZMNDgwIDgwIDU2My4yIDk2LjhjNS4yIDEuMSA5LjUgNC42IDExLjYgOS41czEuNSAxMC41LTEuNCAxNC45bC00Ni45IDcwLjcgNDYuOSA3MC43YzIuOSA0LjQgMy41IDEwIDEuNCAxNC45cy02LjQgOC41LTExLjYgOS41TDUwMSAyOTkuN2MtMTEuOS04LjctMjUuMS0xNS42LTM5LjQtMjAuNC0yLjUtMTIuNy02LjgtMjQuNy0xMi43LTM1LjcgOS41LTE0LjkgMTUuMS0zMi42IDE1LjEtNTEuNyAwLTUzLTQzLTk2LTk2LTk2LTQ3LjkgMC04Ny42IDM1LjEtOTQuOCA4MC45LTI2LjUtMjAuMy01OS41LTMyLjUtOTUuNC0zMi45bC0xNS4xLTIyLjdjLTIuOS00LjQtMy41LTEwLTEuNC0xNC45czYuNC04LjUgMTEuNi05LjVMMjU2IDgwIDI3Mi44LTMuMmMxLjEtNS4yIDQuNi05LjUgOS41LTExLjZzMTAuNS0xLjUgMTQuOSAxLjRMMzY4IDMzLjYgNDM4LjctMTMuM2M0LjQtMi45IDEwLTMuNSAxNC45LTEuNHpNNDE2IDE5MmMwIDMuOC0uNCA3LjUtMS4zIDExLjEtMjEuNy0xNy00OS0yNy4xLTc4LjctMjcuMS00LjYgMC05LjEgLjItMTMuNSAuNyA2LjQtMTkgMjQuNC0zMi43IDQ1LjUtMzIuNyAyNi41IDAgNDggMjEuNSA0OCA0OHpNOTYgNTEyYy01MyAwLTk2LTQzLTk2LTk2IDAtNDIuNSAyNy42LTc4LjYgNjUuOS05MS4yLTEuMy02LjctMS45LTEzLjctMS45LTIwLjggMC02MS45IDUwLjEtMTEyIDExMi0xMTIgNDMuMSAwIDgwLjUgMjQuMyA5OS4yIDYwIDE0LjctMTcuMSAzNi41LTI4IDYwLjgtMjggNDQuMiAwIDgwIDM1LjggODAgODAgMCA1LjUtLjYgMTAuOC0xLjYgMTYgLjUgMCAxLjEgMCAxLjYgMCA1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5Nkw5NiA1MTJ6Il0KICAgIH07CiAgICBmYUFycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs4NTk0XSwgImYwNjEiLCAiTTUwMi42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w0MDIuNyAyMjQgMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM3MC43IDAtMTA1LjQgMTA1LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MHoiXQogICAgfTsKICAgIGZhSGFuZHNoYWtlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kc2hha2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjkzMDksIDYyNjYyLCAiaGFuZHNoYWtlLWFsdCIsICJoYW5kc2hha2Utc2ltcGxlIl0sICJmMmI1IiwgIk0yNjguOSA4NS4yTDE1Mi4zIDIxNC44Yy00LjYgNS4xLTQuNCAxMyAuNSAxNy45IDMwLjUgMzAuNSA4MCAzMC41IDExMC41IDBsMzEuOC0zMS44YzQuMi00LjIgOS41LTYuNSAxNC45LTYuOSA2LjgtLjYgMTMuOCAxLjcgMTkgNi45TDUwNS42IDM3NiA1NzYgMzIwIDU3NiAzMiA0NjQgOTYgNDQwLjIgODAuMUM0MjQuNCA2OS42IDQwNS45IDY0IDM4Ni45IDY0bC03MC40IDBjLTEuMSAwLTIuMyAwLTMuNCAuMS0xNi45IC45LTMyLjggOC41LTQ0LjIgMjEuMXpNMTE2LjYgMTgyLjdMMjIzLjQgNjQgMTgzLjggNjRjLTI1LjUgMC00OS45IDEwLjEtNjcuOSAyOC4xTDExMiA5NiAwIDMyIDAgMzIwIDE1Ni40IDQ1MC4zYzIzIDE5LjIgNTIgMjkuNyA4MS45IDI5LjdsMTUuNyAwLTctN2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQxIDQxIDkgMGMxOS4xIDAgMzcuOC00LjMgNTQuOC0xMi4zTDM1OSA0NDFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzMiAzMiAxNy41LTE3LjVjOC45LTguOSAxMS41LTIxLjggNy42LTMzLjFsLTEzNy45LTEzNi44LTE0LjkgMTQuOWMtNDkuMyA0OS4zLTEyOS4xIDQ5LjMtMTc4LjQgMC0yMy0yMy0yMy45LTU5LjktMi4yLTg0eiJdCiAgICB9OwogICAgZmFIYW5kc2hha2VBbHQyID0gZmFIYW5kc2hha2UyOwogICAgZmFIYW5kc2hha2VTaW1wbGUyID0gZmFIYW5kc2hha2UyOwogICAgZmFQZXJzb25Ta2lpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXNraWluZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzk5NzUsICJza2lpbmciXSwgImY3YzkiLCAiTTQxNiA1NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTIuNyAzMDAuOWM2LjEtMTEuOCAyMC42LTE2LjMgMzIuNC0xMC4ybDE5Ny44IDEwMi43IDYyLjMtODcuMi04Mi05Mi4yYy0xMS0xMi40LTE2LjItMjcuNS0xNi4yLTQyLjRsMTExLjYgNTMuNCA0Mi45IDQ4LjJjMTQuOSAxNi43IDE2LjIgNDEuNiAzLjIgNTkuOGwtNjQuNCA5MC4yIDEyOC4zIDY2LjZjMTMuNiA3LjEgMjkuOCA3LjIgNDMuNiAuM2wxNS4yLTcuNmMxMS45LTUuOSAyNi4zLTEuMSAzMi4yIDEwLjdzMS4xIDI2LjMtMTAuNyAzMi4ybC0xNS4yIDcuNmMtMjcuNSAxMy43LTU5LjkgMTMuNS04Ny4yLS43TDEyLjkgMzMzLjNDMS4yIDMyNy4yLTMuNCAzMTIuNyAyLjcgMzAwLjl6TTEwMyA0OS42bDE4IDguNyA4LjctMTcuNGM0LTcuOSAxMy42LTExLjEgMjEuNS03LjJzMTEuMSAxMy42IDcuMiAyMS41bC04LjUgMTcgODQuOCA0MSAuNC0uMiA3Ni4xLTMzLjhjMzEuMy0xMy45IDY3LjktLjcgODMuMiAyOS45bDI4LjkgNTcuOCA2OC43IDI3LjVjMTYuNCA2LjYgMjQuNCAyNS4yIDE3LjggNDEuNnMtMjUuMiAyNC40LTQxLjYgMTcuOEwzOTMuOCAyMjRjLTEwLjktNC40LTE5LjgtMTIuNi0yNS4xLTIzLjFsLTExLjUtMjMuMWMtMTYuNCA5LjQtMjUuOSAxNC44LTI4LjUgMTYuM2wtNy42LTMuNy0xODUuNi04OS42LTkuMiAxOC4zYy00IDcuOS0xMy42IDExLjEtMjEuNSA3LjJzLTExLjEtMTMuNi03LjItMjEuNWw5LTE3LjktMTcuNi04LjVDODEuMSA3NC42IDc3LjggNjUgODEuNiA1N1M5NSA0NS43IDEwMyA0OS42eiJdCiAgICB9OwogICAgZmFTa2lpbmcgPSBmYVBlcnNvblNraWluZzsKICAgIGZhQnJpZGdlV2F0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJpZGdlLXdhdGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0Y2UiLCAiTTY0IDY0bDUxMiAwIDAgMTEyYy0zNy42IDkuNC02NCA0My4yLTY0IDgybDAgNzYuNGMtMjEtOS43LTQzLjUtMTQuNS02Ni0xNC40LTEwIC4xLTIwLjEgMS4xLTMwIDMuMWwwLTM1LjFjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZsMCAzMi43Yy01LjMtLjUtMTAuNy0uOC0xNi0uNy0yNy43IC4yLTU1LjQgNy44LTgwIDIzbDAtODVjMC0zOC44LTI2LjQtNzIuNi02NC04Mkw2NCA2NHpNNDAzLjQgNDQ0LjFDMzc5LjEgNDYyLjMgMzUxLjEgNDgwIDMyMCA0ODBzLTU5LjEtMTcuNy04My40LTM1LjljLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAwLTIzLjggMTcuOS01NC4xIDM1LjUtODguMSAzNS4zLTIwLjQtLjEtNDAuNy02LjctNTkuOC0yMS4xLTEwLjYtOC0xMi43LTIzLTQuNy0zMy42czIzLTEyLjcgMzMuNi00LjdjMTEuMyA4LjUgMjEuNiAxMS40IDMxLjIgMTEuNSAxNy42IC4xIDM3LjMtOS40IDU4LjktMjUuNyAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMjQgMTguMSA0MC43IDI2LjMgNTQuNSAyNi4zczMwLjUtOC4yIDU0LjUtMjYuM2MzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTYuOSAxMi43IDMyLjkgMjEuNSA0Ny44IDI0LjYgMTMuNyAyLjggMjcuNCAuOSA0Mi4zLTEwLjMgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOSAyNS42LTQuNyAzMy42Yy0yNi40IDE5LjktNTQuMiAyNC40LTgwLjcgMTkuMS0yNS4zLTUuMS00OC4xLTE4LjktNjcuMi0zMy4zLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAweiJdCiAgICB9OwogICAgZmFCdWlsZGluZ05nbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy1uZ28iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRkNyIsICJNMTI4IDBDOTIuNyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDggMCAwLTExMmMwLTM1LjMgMjguNy02NCA2NC02NGwyMDggMCAwLTI3MmMwLTM1LjMtMjguNy02NC02NC02NEwxMjggMHptMzIgMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTMwNCA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xNjAgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTE0NC0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek01MjAgMzgwYy0yNC4zIDAtNDQgMTkuNy00NCA0NGwwIDgwYzAgMjQuMyAxOS43IDQ0IDQ0IDQ0bDE2IDBjMjQuMyAwIDQ0LTE5LjcgNDQtNDRsMC04MGMwLTI0LjMtMTkuNy00NC00NC00NGwtMTYgMHptLTQgNDRjMC0yLjIgMS44LTQgNC00bDE2IDBjMi4yIDAgNCAxLjggNCA0bDAgODBjMCAyLjItMS44IDQtNCA0bC0xNiAwYy0yLjIgMC00LTEuOC00LTRsMC04MHptLTE2OCAwbDAgODBjMCAyNC4zIDE5LjcgNDQgNDQgNDRsMTYgMGMyNC4zIDAgNDQtMTkuNyA0NC00NGwwLTI0YzAtMTEtOS0yMC0yMC0yMGwtOCAwYy0xMSAwLTIwIDktMjAgMjAgMCA2LjUgMy4xIDEyLjQgOCAxNmwwIDhjMCAyLjItMS44IDQtNCA0bC0xNiAwYy0yLjIgMC00LTEuOC00LTRsMC04MGMwLTIuMiAxLjgtNCA0LTRsMjAuNCAwYzEuOSA5LjEgOS45IDE2IDE5LjYgMTYgMTEgMCAyMC05IDIwLTIwIDAtMTkuOS0xNi4xLTM2LTM2LTM2bC0yNCAwYy0yNC4zIDAtNDQgMTkuNy00NCA0NHptLTkwLjEtMzIuOWMtNC4xLTguMy0xMy41LTEyLjctMjIuNS0xMC41UzIyMCAzOTAuNyAyMjAgNDAwbDAgMTI4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNDMuMyAyNi4xIDUyLjJjNC4xIDguMyAxMy41IDEyLjcgMjIuNSAxMC41UzMyNCA1MzcuMyAzMjQgNTI4bDAtMTI4YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMGwwIDQzLjMtMjYuMS01Mi4yeiJdCiAgICB9OwogICAgZmFJZ2xvbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpZ2xvbyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmN2FlIiwgIk0zMjAgMzMuOGwwIDEyNi4yLTI3MS41IDBjNTEuNy03Ny4yIDEzOS42LTEyOCAyMzkuNS0xMjggMTAuOCAwIDIxLjUgLjYgMzIgMS44ek0zNjggMTYwbDAtMTE2LjdjNjYgMTkgMTIyLjIgNjEgMTU5LjUgMTE2LjdMMzY4IDE2MHpNMjIuNiAyMDhsNzMuNCAwIDAgMTEyLTk2IDBjMC0zOS43IDgtNzcuNiAyMi42LTExMnpNMTc2IDMyMGwtMzIgMCAwLTExMiAyODggMCAwIDExMi0zMiAwIDAgNDggMTc2IDAgMCA2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNjQgMTc2IDAgMC00OHptMzA0IDBsMC0xMTIgNzMuNCAwQzU2OCAyNDIuNCA1NzYgMjgwLjMgNTc2IDMyMGwtOTYgMHpNMjg4IDI4OGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA4MCAxMjggMCAwLTgwYzAtMzUuMy0yOC43LTY0LTY0LTY0eiJdCiAgICB9OwogICAgZmFDaXJjbGVEb2xsYXJUb1Nsb3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWRvbGxhci10by1zbG90IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImRvbmF0ZSJdLCAiZjRiOSIsICJNOTYgMjI0YTE5MiAxOTIgMCAxIDEgMzg0IDAgMTkyIDE5MiAwIDEgMSAtMzg0IDB6bTE3Ni05MmwwIDRjLTI4LjggLjMtNTIgMjMuNy01MiA1Mi41IDAgMjUuNyAxOC41IDQ3LjYgNDMuOSA1MS44bDQxLjcgN2M2IDEgMTAuNCA2LjIgMTAuNCAxMi4zIDAgNi45LTUuNiAxMi41LTEyLjUgMTIuNUwyNDggMjcyYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGwyNCAwIDAgNGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTQuN2MyNS00LjEgNDQtMjUuNyA0NC01MS44IDAtMjUuNy0xOC41LTQ3LjYtNDMuOS01MS44bC00MS43LTdjLTYtMS0xMC40LTYuMi0xMC40LTEyLjMgMC02LjkgNS42LTEyLjUgMTIuNS0xMi41bDQ3LjUgMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTggMCAwLTRjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwek00OCAzNDRsMCAxMDRjMCA4LjggNy4yIDE2IDE2IDE2bDQ0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAzNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhRG9uYXRlID0gZmFDaXJjbGVEb2xsYXJUb1Nsb3Q7CiAgICBmYVkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAieSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyMV0sICI1OSIsICJNNTggNDUuNEM0Ny44IDMxIDI3LjggMjcuNyAxMy40IDM4Uy00LjMgNjguMiA2IDgyLjZMMTYwIDI5OC4zIDE2MCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE0OS43IDE1NC0yMTUuN2MxMC4zLTE0LjQgNi45LTM0LjQtNy40LTQ0LjZTMzM2LjIgMzEgMzI2IDQ1LjRMMTkyIDIzMi45IDU4IDQ1LjR6Il0KICAgIH07CiAgICBmYUZhY2VTbWlsZVdpbmsyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Utc21pbGUtd2luayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUyMSwgInNtaWxlLXdpbmsiXSwgImY0ZGEiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjUuNCAzMjEuOWMyMC40IDI4IDUzLjQgNDYuMSA5MC42IDQ2LjFzNzAuMi0xOC4xIDkwLjYtNDYuMWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjNzMTMuMSAyMi44IDUuMyAzMy41QzM1Ni4zIDM5MCAzMDkuMiA0MTYgMjU2IDQxNnMtMTAwLjMtMjYtMTI5LjQtNjUuOWMtNy44LTEwLjctNS40LTI1LjcgNS4zLTMzLjVzMjUuNy01LjQgMzMuNSA1LjN6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTY0IDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwYzAtMzMuMSAyNi45LTYwIDYwLTYwbDE2IDBjMzMuMSAwIDYwIDI2LjkgNjAgNjAgMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwLTktMjAtMjAtMjBsLTE2IDBjLTExIDAtMjAgOS0yMCAyMHoiXQogICAgfTsKICAgIGZhU21pbGVXaW5rMiA9IGZhRmFjZVNtaWxlV2luazI7CiAgICBmYURpY2VGb3VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpY2UtZm91ciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4NTldLCAiZjUyNCIsICJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTE2MCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0xMjggMzg0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMzUyIDE2MGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zMjAgMzg0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5TcXVpbnRUZWFyczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXNxdWludC10ZWFycyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyOTMxNSwgImdyaW4tc3F1aW50LXRlYXJzIl0sICJmNTg2IiwgIk01NjAgMzUuNGMwIDI1LjYtMTguOCA0Ny4zLTQ0LjEgNTAuOUw0NjkuMSA5M2MtMTAuNiAxLjUtMTkuNi03LjUtMTguMS0xOC4xbDYuNy00Ni43QzQ2MS4zIDIuOCA0ODMtMTYgNTA4LjYtMTYgNTM3LTE2IDU2MCA3IDU2MCAzNS40ek00MDMuNSA2OC4xYy02IDQyLjIgMzAuMiA3OC40IDcyLjQgNzIuNGwzNy44LTUuNEM1NjUuNyAyMzIgNTUwLjggMzU1LjMgNDY5IDQzN3MtMjA1IDk2LjYtMzAxLjkgNDQuN2w1LjQtMzcuOGM2LTQyLjItMzAuMi03OC40LTcyLjQtNzIuNGwtMzcuOCA1LjRDMTAuMyAyODAgMjUuMiAxNTYuNyAxMDcgNzVTMzEyLTIxLjcgNDA4LjkgMzAuM2wtNS40IDM3Ljh6TTQxNy44IDIwMWMtMTkuMSAzNi40LTQ1LjYgNzIuNy03OC45IDEwNnMtNjkuNiA1OS44LTEwNiA3OC45Yy0xMS4xIDUuOC0xMi40IDIxLjQtMS4xIDI2LjYgNTkuMiAyNy41IDEzMS44IDE2LjggMTgwLjYtMzJzNTkuNS0xMjEuNCAzMi0xODAuNmMtNS4zLTExLjMtMjAuOC0xMC0yNi42IDEuMXpNMTEzLjkgMjcwLjZjMS43IDggOSAxMy40IDE3LjEgMTIuN2w0My4xLTMuOS0zLjkgNDMuMWMtLjcgOC4xIDQuNyAxNS41IDEyLjcgMTcuMXMxNS45LTIuOSAxOC40LTEwLjZsMjgtODQuNmMxLjktNS43IC40LTEyLjEtMy45LTE2LjNzLTEwLjYtNS44LTE2LjMtMy45bC04NC42IDI4Yy03LjcgMi42LTEyLjMgMTAuNS0xMC42IDE4LjV6TTMxNS4yIDk5LjFjLjctOC4xLTQuNy0xNS41LTEyLjctMTcuMXMtMTUuOSAyLjktMTguNSAxMC42bC0yOCA4NC42Yy0xLjkgNS43LS40IDEyLjEgMy45IDE2LjNzMTAuNiA1LjggMTYuMyAzLjlsODQuNi0yOGM3LjctMi42IDEyLjMtMTAuNSAxMC42LTE4LjRzLTktMTMuNC0xNy4xLTEyLjdsLTQzLjEgMy45IDMuOS00My4xek02MC4xIDQyNS43bDQ2LjctNi43YzEwLjYtMS41IDE5LjYgNy41IDE4LjEgMTguMWwtNi43IDQ2LjdDMTE0LjcgNTA5LjIgOTMgNTI4IDY3LjQgNTI4IDM5IDUyOCAxNiA1MDUgMTYgNDc2LjYgMTYgNDUxIDM0LjggNDI5LjMgNjAuMSA0MjUuN3oiXQogICAgfTsKICAgIGZhR3JpblNxdWludFRlYXJzMiA9IGZhRmFjZUdyaW5TcXVpbnRUZWFyczI7CiAgICBmYUZpbGVBdWRpbzIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1hdWRpbyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM3IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXptNTMuOCAxODUuMmMtOS4xLTYuMy0yMS41LTQuMS0yNy44IDVzLTQuMSAyMS41IDUgMjcuOGMyMy45IDE2LjcgMzkuNCA0NC4zIDM5LjQgNzUuNXMtMTUuNiA1OC45LTM5LjQgNzUuNWMtOS4xIDYuMy0xMS4zIDE4LjgtNSAyNy44czE4LjggMTEuMyAyNy44IDVjMzQuMS0yMy44IDU2LjYtNjMuNSA1Ni42LTEwOC4zUzI5NiAyNjcuNSAyNjEuOCAyNDMuN3pNODAgMzEyYy04LjggMC0xNiA3LjItMTYgMTZsMCA0OGMwIDguOCA3LjIgMTYgMTYgMTZsMjQgMCAyNy4yIDM0YzMgMy44IDcuNiA2IDEyLjUgNmwuMyAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTEyOGMwLTguOC03LjItMTYtMTYtMTZsLS4zIDBjLTQuOSAwLTkuNSAyLjItMTIuNSA2bC0yNy4yIDM0LTI0IDB6bTEyOCA3Mi4yYzAgMTAuNyAxMC41IDE4LjIgMTguOSAxMS42IDEyLjktMTAuMyAyMS4xLTI2LjEgMjEuMS00My44cy04LjItMzMuNS0yMS4xLTQzLjhjLTguNC02LjctMTguOSAuOS0xOC45IDExLjZsMCA2NC41eiJdCiAgICB9OwogICAgZmFBcnJvd3NEb3duVG9MaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy1kb3duLXRvLWxpbmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRiOCIsICJNMjE0LjYgMzEwLjZsLTY0IDY0Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtNjQtNjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMjc0LjcgOTYgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDI0Mi43IDkuNC05LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3ptMjU2IDBsLTY0IDY0Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtNjQtNjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsOS40IDkuNCAwLTI0Mi43YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAyNDIuNyA5LjQtOS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6TTMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1MTJ6Il0KICAgIH07CiAgICBmYUcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEwM10sICI0NyIsICJNMjI0IDk2QzEzNS42IDk2IDY0IDE2Ny42IDY0IDI1NnM3MS42IDE2MCAxNjAgMTYwYzc3LjQgMCAxNDItNTUgMTU2LjgtMTI4TDI1NiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTQ0IDBjMjUuOCAwIDQ5LjYgMjEuNCA0Ny4yIDUwLjYtOS41IDExNS0xMDUuOCAyMDUuNC0yMjMuMiAyMDUuNC0xMjMuNyAwLTIyNC0xMDAuMy0yMjQtMjI0UzEwMC4zIDMyIDIyNCAzMmM1Ny40IDAgMTA5LjcgMjEuNiAxNDkuMyA1NyAxMy4yIDExLjggMTQuMyAzMiAyLjUgNDUuMnMtMzIgMTQuMy00NS4yIDIuNUMzMDIuMyAxMTEuNCAyNjUgOTYgMjI0IDk2eiJdCiAgICB9OwogICAgZmFWaWhhcmEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmloYXJhIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2YTciLCAiTTI3My42LTMuMmM4LjUtNi40IDIwLjMtNi40IDI4LjggMEw0NDMuMiAxMDIuNGM4LjMgNi4yIDE4LjQgOS42IDI4LjggOS42IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNCAwIDAgNDggNTguNyA2NCAxMy4zIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMCAwIDQ4IDI0LjQgMzIgMTUuNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00MCAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0xMjggMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMTI4IDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTQwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjIuMSAwIDE3LjktMzIgMC00OC04IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTMuMyAwIDU4LjctNjQgMC00OC0yNCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzEwLjQgMCAyMC41LTMuNCAyOC44LTkuNkwyNzMuNi0zLjJ6TTEyOCAzNjhsMzIwIDAgMC00OC0zMjAgMCAwIDQ4ek0zODQgMTYwbC0xOTIgMCAwIDQ4IDE5MiAwIDAtNDh6Il0KICAgIH07CiAgICBmYUZsYWdDaGVja2VyZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmxhZy1jaGVja2VyZWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5MzddLCAiZjExZSIsICJNMzIgMEM0OS43IDAgNjQgMTQuMyA2NCAzMmwwIDE2IDY5LTE3LjJjMzguMS05LjUgNzguMy01LjEgMTEzLjUgMTIuNSA0Ni4zIDIzLjIgMTAwLjggMjMuMiAxNDcuMSAwbDkuNi00LjhDNDIzLjggMjguMSA0NDggNDMuMSA0NDggNjYuMWwwIDI3OS43YzAgMTMuMy04LjMgMjUuMy0yMC44IDMwbC0zNC43IDEzYy00Ni4yIDE3LjMtOTcuNiAxNC42LTE0MS43LTcuNC0zNy45LTE5LTgxLjQtMjMuNy0xMjIuNS0xMy40TDY0IDM4NCA2NCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0OTcuNyAwIDQ4MEwwIDMyQzAgMTQuMyAxNC4zIDAgMzIgMHpNNjQgMTg3LjFsNjQtMTMuOSAwIDY1LjUtNjQgMTMuOSAwIDY1LjUgNDguOC0xMi4yYzUuMS0xLjMgMTAuMS0yLjQgMTUuMi0zLjNsMC02My45IDM4LjktOC40YzguMy0xLjggMTYuNy0yLjUgMjUuMS0yLjFsMC02NGMxMy42IC40IDI3LjIgMi42IDQwLjQgNi40bDIzLjYgNi45IDAgNjYuNy00MS43LTEyLjNjLTcuMy0yLjEtMTQuOC0zLjQtMjIuMy0zLjhsMCA3MS40YzIxLjggMS45IDQzLjMgNi43IDY0IDE0LjRsMC02OS44IDIyLjcgNi43YzEzLjUgNCAyNy4zIDYuNCA0MS4zIDcuNGwwLTY0LjJjLTcuOC0uOC0xNS42LTIuMy0yMy4yLTQuNWwtNDAuOC0xMiAwLTYyYy0xMy0zLjgtMjUuOC04LjgtMzguMi0xNS04LjItNC4xLTE2LjktNy0yNS44LTguOGwwIDcyLjRjLTEzLS40LTI2IC44LTM4LjcgMy42bC0yNS4zIDUuNSAwLTc1LjItNjQgMTYgMCA3My4xek0zMjAgMzM1LjdjMTYuOCAxLjUgMzMuOS0uNyA1MC02LjhsMTQtNS4yIDAtNzEuNy03LjkgMS44Yy0xOC40IDQuMy0zNy4zIDUuNy01Ni4xIDQuNWwwIDc3LjR6bTY0LTE0OS40bDAtNzAuOGMtMjAuOSA2LjEtNDIuNCA5LjEtNjQgOS4xbDAgNjkuNGMxMy45IDEuNCAyOCAuNSA0MS43LTIuNmwyMi4zLTUuMnoiXQogICAgfTsKICAgIGZhR2F1Z2VTaW1wbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2F1Z2Utc2ltcGxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImdhdWdlLXNpbXBsZS1tZWQiLCAidGFjaG9tZXRlci1hdmVyYWdlIl0sICJmNjI5IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zMjAgOTZjMC0yNi45LTE2LjUtNDkuOS00MC01OS4zTDI4MCAxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNzIuN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6Il0KICAgIH07CiAgICBmYUdhdWdlU2ltcGxlTWVkID0gZmFHYXVnZVNpbXBsZTsKICAgIGZhVGFjaG9tZXRlckF2ZXJhZ2UgPSBmYUdhdWdlU2ltcGxlOwogICAgZmFSaWdodExlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmlnaHQtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJleGNoYW5nZS1hbHQiXSwgImYzNjIiLCAiTTUwMi42IDE1MC42bC05NiA5NmMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTMzUyIDIzNi45IDM1MiAyMjRsMC02NC0zMjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyA5NiAzMiA5NmwzMjAgMCAwLTY0YzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjN6bS0zOTcuMyAzNTJsLTk2LTk2Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w5Ni05NmM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOVMxNjAgMjc1LjEgMTYwIDI4OGwwIDY0IDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMjAgMCAwIDY0YzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45eiJdCiAgICB9OwogICAgZmFFeGNoYW5nZUFsdCA9IGZhUmlnaHRMZWZ0OwogICAgZmFQaWxscyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwaWxscyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDg0IiwgIk02NCAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDExMi05NiAwIDAtMTEyek0xNzYgMzY4YzAtNDguNyAxOC4xLTkzLjIgNDgtMTI3bDAtMTI5QzIyNCA1MC4xIDE3My45IDAgMTEyIDBTMCA1MC4xIDAgMTEyTDAgNDAwYzAgNjEuOSA1MC4xIDExMiAxMTIgMTEyIDM3LjMgMCA3MC4zLTE4LjIgOTAuNy00Ni4zLTE3LTI4LjYtMjYuNy02Mi0yNi43LTk3Ljd6bTY0LjcgNjcuNGM0LjYgOC43IDE2LjMgOS43IDIzLjMgMi43TDQzOC4xIDI2NGM3LTcgNi0xOC43LTIuNy0yMy4zLTIwLjEtMTAuNy00My0xNi43LTY3LjQtMTYuNy03OS41IDAtMTQ0IDY0LjUtMTQ0IDE0NCAwIDI0LjMgNiA0Ny4zIDE2LjcgNjcuNHpNMjk3LjkgNDcyYy03IDctNiAxOC43IDIuNyAyMy4zIDIwLjEgMTAuNyA0MyAxNi43IDY3LjQgMTYuNyA3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NCAwLTI0LjMtNi00Ny4zLTE2LjctNjcuNC00LjYtOC43LTE2LjMtOS43LTIzLjMtMi43TDI5Ny45IDQ3MnoiXQogICAgfTsKICAgIGZhRXhwbG9zaW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImV4cGxvc2lvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGU5IiwgIk0yNTYtMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0em0wIDE2MGMxMi40IDAgMjIuNyA5LjQgMjMuOSAyMS43TDI5My40IDI5MS42IDQ2Ny42IDExLjNjNi43LTEwLjcgMjAuNS0xNC41IDMxLjctOC41czE1LjggMTkuNSAxMC42IDMxTDM3Mi44IDMzOC42YzIuMiAyLjMgNC4zIDQuNyA2LjMgNy4xbDk3LjItNTQuN2MxMC41LTUuOSAyMy42LTMuMSAzMC45IDYuNHM2LjMgMjMtMi4yIDMxLjVsLTg3IDg3LTcxLjQgMGMtMTMuMi0zNy4zLTQ4LjctNjQtOTAuNS02NHMtNzcuNCAyNi43LTkwLjUgNjRsLTc5LjYgMC03NS41LTUyLjNDLjYgMzU3LTIuOCAzNDQuMSAyLjQgMzMzLjVzMTcuNC0xNS45IDI4LjctMTIuNGw5Ny4yIDMwLjRjMy0zLjkgNi4xLTcuNiA5LjQtMTEuM0w3NS40IDIzNi4zYy02LjEtMTAuMS0zLjktMjMuMSA1LjEtMzAuN3MyMi4yLTcuNSAzMS4xIC4xTDIxNCAyOTMuNmMxLjUtLjQgMy0uOCA0LjUtMS4xbDEzLjYtMTQyLjdjMS4yLTEyLjMgMTEuNS0yMS43IDIzLjktMjEuN3pNMzIgNDY0bDQ1NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDB6Il0KICAgIH07CiAgICBmYUFycm93c0Rvd25Ub1Blb3BsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtZG93bi10by1wZW9wbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRiOSIsICJNMTEzIDE1M2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMTUgODlDNS43IDc5LjYgNS43IDY0LjQgMTUgNTVTMzkuNiA0NS43IDQ5IDU1TDcyIDc4LjEgNzItOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgODYuMSAyMy0yM2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTY0IDY0em0zMjAgMGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMzM1IDg5Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMjMgMjMgMC04Ni4xYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA4Ni4xIDIzLTIzYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNjQgNjR6TTI1NiAxOTJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6bTAgMTYwYzUzIDAgOTYgNDMgOTYgOTZsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjMC01MyA0My05NiA5Ni05NnpNMzIgMjg4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTM1MiAwYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTgwIDM2OGMxNS4zIDAgMjkuNiA0LjMgNDEuOCAxMS44LTYuMyAxNi4yLTkuOCAzMy44LTkuOCA1Mi4ybDAgNDhjMCAxMS40IDIuNCAyMi4yIDYuNyAzMmwtODcuOCAwQzEzLjggNTEyIDAgNDk4LjIgMCA0ODEuMUwwIDQ0OGMwLTQ0LjIgMzUuOC04MCA4MC04MHpNMzkzLjMgNTEyYzQuMy05LjggNi43LTIwLjYgNi43LTMybDAtNDhjMC0xOC40LTMuNS0zNi05LjgtNTIuMiAxMi4yLTcuNSAyNi41LTExLjggNDEuOC0xMS44IDQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMzMuMWMwIDE3LTEzLjggMzAuOS0zMC45IDMwLjlsLTg3LjggMHoiXQogICAgfTsKICAgIGZhVXNlcnNWaWV3ZmluZGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXJzLXZpZXdmaW5kZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU5NSIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRsMCA3MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNzJjMC04LjggNy4yLTE2IDE2LTE2bDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMTQ5LjMgMCAxMzYgMEw2NCAwek00NDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MmMwLTM1LjMtMjguNy02NC02NC02NEw0NDAgMHpNNDggMzc2YzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMzYyLjcgMCAzNzZsMCA3MmMwIDM1LjMgMjguNyA2NCA2NCA2NGw3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC03MiAwYy04LjggMC0xNi03LjItMTYtMTZsMC03MnptNTI4IDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA3MmMwIDguOC03LjIgMTYtMTYgMTZsLTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNzIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTcyek0yODggMjE2YTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyem0wIDQwYy01MyAwLTk2IDQzLTk2IDk2bDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yNGMwLTUzLTQzLTk2LTk2LTk2em0xOTItNjRhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMTY4IDI3Mi4zYy00OS4zIDQuMS04OCA0NS4zLTg4IDk1LjdsMCAxMC43YzAgMTEuOCA5LjYgMjEuMyAyMS4zIDIxLjNsNDYuOCAwYy0yLjctNy41LTQuMS0xNS42LTQuMS0yNGwwLTI0YzAtMjkuNSA4LjgtNTYuOSAyNC03OS43ek00MjcuOSA0MDBsNDYuOCAwYzExLjggMCAyMS4zLTkuNiAyMS4zLTIxLjNsMC0xMC43YzAtNTAuMy0zOC43LTkxLjYtODgtOTUuNyAxNS4yIDIyLjggMjQgNTAuMiAyNCA3OS43bDAgMjRjMCA4LjQtMS40IDE2LjUtNC4xIDI0ek0xOTIgMTkyYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il0KICAgIH07CiAgICBmYUNhck9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhci1vbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNGRkIiwgIk0yNDgtOGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMyMDAtMjEuMyAyMDAtOGwwIDY0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC02NHpNMTQ1LjMgMjA4bDE1Ny41IDBjNi43IDAgMTIuNiA0LjEgMTUgMTAuNGwyNi4xIDY5LjYtMjM5LjYgMCAyNi4xLTY5LjZjMi4zLTYuMiA4LjMtMTAuNCAxNS0xMC40ek0zNCAyOTIuOGwtMS4zIDMuNEMxMy4yIDMwNy4xIDAgMzI4IDAgMzUyTDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMiAyODggMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0yNC0xMy4yLTQ0LjktMzIuOC01NS45bC0xLjMtMy40LTM2LjMtOTYuOWMtMTEuNy0zMS4yLTQxLjYtNTEuOS03NC45LTUxLjlsLTE1Ny41IDBjLTMzLjMgMC02My4yIDIwLjctNzQuOSA1MS45TDM0IDI5Mi44ek05NiAzMzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0yMjQgMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNNyA3Qy0yLjMgMTYuNC0yLjMgMzEuNiA3IDQxTDU1IDg5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwUzk4LjMgNjQuNCA4OSA1NUw0MSA3QzMxLjYtMi4zIDE2LjQtMi4zIDcgN3pNNDA3IDdMMzU5IDU1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNDgtNDhjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlTNDE2LjQtMi4zIDQwNyA3eiJdCiAgICB9OwogICAgZmFTbGVpZ2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2xlaWdoIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY3Y2MiLCAiTTY0IDMyQzQ2LjMgMzIgMzIgNDYuMyAzMiA2NFM0Ni4zIDk2IDY0IDk2bDAgMTYwYzAgNDEuOCAyNi43IDc3LjQgNjQgOTAuNWwwIDY5LjUtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1MDQgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLThjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC04MCAwIDAtNjRjNTMgMCA5Ni00MyA5Ni05NmwwLTk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyYzAgMzUuMy0yOC43IDY0LTY0IDY0bC00OC45IDBjLTQ4LjUgMC05Mi44LTI3LjQtMTE0LjUtNzAuOGwtMjUuMi01MC41QzIzNy43IDU5LjQgMTkzLjQgMzIgMTQ0LjkgMzJMNjQgMzJ6TTQzMiA0MTZsLTI1NiAwIDAtNjQgMjU2IDAgMCA2NHoiXQogICAgfTsKICAgIGZhRHVtYmJlbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHVtYmJlbGwiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQ0YiIsICJNOTYgMTEyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCAxMTIgMjU2IDAgMC0xMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDE2IDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDQ4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNiAwIDAgMTZjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhsMC0xMTItMjU2IDAgMCAxMTJjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhsMC0xNi0xNiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDAtNDhjMC0yNi41IDIxLjUtNDggNDgtNDhsMTYgMCAwLTE2eiJdCiAgICB9OwogICAgZmFCYWJ5Q2FycmlhZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFieS1jYXJyaWFnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjYXJyaWFnZS1iYWJ5Il0sICJmNzdkIiwgIk02NCAyMDhsMCA4MGMwIDUzIDQzIDk2IDk2IDk2bDE5MiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0xMTIgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA1Ni0zMzYgMHptLjItNDhsMjIzLjggMCAwLTEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMkwyMzIgMEMxNDEuOSAwIDY4LjQgNzAuOSA2NC4yIDE2MHpNMTYwIDQ2NGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwem0yODggMGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAweiJdCiAgICB9OwogICAgZmFDYXJyaWFnZUJhYnkgPSBmYUJhYnlDYXJyaWFnZTsKICAgIGZhS2l3aUJpcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAia2l3aS1iaXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1MzUiLCAiTTI5MS4yIDM4OC40YzMxLjItMTguOCA2NC43LTM2LjQgMTAxLjEtMzYuNGw1NS43IDBjNC42IDAgOS4xLS4yIDEzLjYtLjdsODUuMyAxMjEuOWM0IDUuNyAxMS4zIDguMiAxNy45IDYuMVM1NzYgNDcxIDU3NiA0NjRsMC0yNDBjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhsLTU1LjcgMEMzNTUuOSA5NiAzMjIuNCA3OC40IDI5MS4yIDU5LjYgMjYyLjMgNDIuMSAyMjguMyAzMiAxOTIgMzIgODYgMzIgMCAxMTggMCAyMjQgMCAyOTUuMSAzOC42IDM1Ny4xIDk2IDM5MC4zTDk2IDQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDZjMTUuMyAzLjkgMzEuNCA2IDQ4IDYgNS40IDAgMTAuNy0uMiAxNi0uN2wwIDQwLjdjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTUwLjljMTIuNC00LjQgMjQuMi0xMCAzNS4yLTE2Ljd6TTQ0OCAyMDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdCiAgICB9OwogICAgZmFDYWxlbmRhclhtYXJrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci14bWFyayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYWxlbmRhci10aW1lcyJdLCAiZjI3MyIsICJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0yOTEuOSAyMjAuMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTMzLjkgMzMuOS0zMy45LTMzLjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzMuOSAzMy45LTMzLjkgMzMuOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDMzLjktMzMuOSAzMy45IDMzLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0zMy45LTMzLjkgMzMuOS0zMy45YzkuNC05LjQgOS40LTI0LjYgMC0zMy45eiJdCiAgICB9OwogICAgZmFDYWxlbmRhclRpbWVzMiA9IGZhQ2FsZW5kYXJYbWFyazI7CiAgICBmYUNpcmNsZURvd24yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1kb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE0NjYsICJhcnJvdy1hbHQtY2lyY2xlLWRvd24iXSwgImYzNTgiLCAiTTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTIgMjU2IDI1NiAwIDEgMCAwLTUxMnpNMjQ0LjcgMzg3LjNsLTEwNC0xMDRjLTQuNi00LjYtNS45LTExLjUtMy41LTE3LjRzOC4zLTkuOSAxNC44LTkuOWw1NiAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDU2IDBjNi41IDAgMTIuMyAzLjkgMTQuOCA5LjlzMS4xIDEyLjktMy41IDE3LjRsLTEwNCAxMDRjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAweiJdCiAgICB9OwogICAgZmFBcnJvd0FsdENpcmNsZURvd24yID0gZmFDaXJjbGVEb3duMjsKICAgIGZhRmlsZU1lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1tZWRpY2FsIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY0NzciLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xNjAgMjgwbDAgNDAtNDAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDQwIDAgMCA0MGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC00MCA0MCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtNDAgMCAwLTQwYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdCiAgICB9OwogICAgZmFYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ4bWFyayIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODQ3MywgMTAwMDUsIDEwMDA2LCAxMDA2MCwgMjE1LCAiY2xvc2UiLCAibXVsdGlwbHkiLCAicmVtb3ZlIiwgInRpbWVzIl0sICJmMDBkIiwgIk01NS4xIDczLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDE0Ny4yIDI1NiA5LjkgMzkzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTkyLjUgMzAxLjMgMzI5LjkgNDM4LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wyMzcuOCAyNTYgMzc1LjEgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMTkyLjUgMjEwLjcgNTUuMSA3My40eiJdCiAgICB9OwogICAgZmFDbG9zZSA9IGZhWG1hcms7CiAgICBmYU11bHRpcGx5ID0gZmFYbWFyazsKICAgIGZhUmVtb3ZlID0gZmFYbWFyazsKICAgIGZhVGltZXMgPSBmYVhtYXJrOwogICAgZmFTaGFwZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hhcGVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInRyaWFuZ2xlLWNpcmNsZS1zcXVhcmUiXSwgImY2MWYiLCAiTTI1NiAwYzExLjIgMCAyMS43IDUuOSAyNy40IDE1LjVsOTYgMTYwYzUuOSA5LjkgNi4xIDIyLjIgLjQgMzIuMlMzNjMuNSAyMjQgMzUyIDIyNGwtMTkyIDBjLTExLjUgMC0yMi4yLTYuMi0yNy44LTE2LjJzLTUuNS0yMi4zIC40LTMyLjJsOTYtMTYwQzIzNC4zIDUuOSAyNDQuOCAwIDI1NiAwek0xMjggMjcyYTExMiAxMTIgMCAxIDEgMCAyMjQgMTEyIDExMiAwIDEgMSAwLTIyNHptMjAwIDE2bDExMiAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgMTEyYzAgMjIuMS0xNy45IDQwLTQwIDQwbC0xMTIgMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC0xMTJjMC0yMi4xIDE3LjktNDAgNDAtNDB6Il0KICAgIH07CiAgICBmYVRyaWFuZ2xlQ2lyY2xlU3F1YXJlID0gZmFTaGFwZXM7CiAgICBmYURpY2VPbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGljZS1vbmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODU2XSwgImY1MjUiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIyNCAyMjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFMb2NrT3BlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsb2NrLW9wZW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjNjMSIsICJNMzg0IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzJjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhTMzIwIDI1LjMgMzIwIDk2bDAgNjQtMTYwIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjI0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0zMiAwIDAtNjR6Il0KICAgIH07CiAgICBmYVBlcHBlckhvdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXBwZXItaG90IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI3Nzk4XSwgImY4MTYiLCAiTTU0NSA2NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDQ3OC45IDYzLjJDNDUyLjMgNDMuNiA0MTkuNSAzMiAzODQgMzIgMzQ4LjkgMzIgMzE2LjUgNDMuMyAyOTAuMSA2Mi40IDI3NC4xIDc0LjEgMjg0LjIgOTYgMzA0IDk2bDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjRjMCAxOS44IDIxLjkgMjkuOSAzMy42IDEzLjkgMTkuMS0yNi40IDMwLjQtNTguOCAzMC40LTkzLjkgMC0zNS41LTExLjYtNjguMy0zMS4yLTk0LjlMNTQ1IDY1ek0yNzAgMTM1LjVsLTE1OS42IDIyOEMxMDEuMyAzNzYuNCA4Ni43IDM4NCA3MSAzODRsLTcgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OGwyNy4xIDBjNjUuNyAwIDEyOS43LTIwLjIgMTgzLjUtNTcuOEw0NDAuNSAzMDYuMUM0MzUgMjk1LjkgNDMyIDI4NC4yIDQzMiAyNzJsLTU2IDBjLTM5LjggMC03Mi0zMi4yLTcyLTcybDAtNTZjLTEyLjIgMC0yMy45LTMtMzQtOC41eiJdCiAgICB9OwogICAgZmFEcm9wbGV0U2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHJvcGxldC1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ0aW50LXNsYXNoIl0sICJmNWM3IiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQ2My42IDM5Ny44YzEwLjUtMjMuOCAxNi40LTUwLjEgMTYuNC03Ny44IDAtOTEuMi0xMzAuMi0yNzQuMS0xNjYuNi0zMjMuNS01LjktOC0xNS4yLTEyLjUtMjUuMi0xMi41bC0uNCAwYy0xMCAwLTE5LjMgNC41LTI1LjIgMTIuNS0xNS42IDIxLjItNDguNSA2Ni45LTgwLjkgMTE5LjRMNDEtMjQuOXptOTIgMjI3LjdjLTIxLjYgNDMuOC0zNyA4NS45LTM3IDExNy4yIDAgMTA2IDg2IDE5MiAxOTIgMTkyIDQzLjQgMCA4My40LTE0LjQgMTE1LjUtMzguNkwxMzMgMjAyLjh6Il0KICAgIH07CiAgICBmYVRpbnRTbGFzaCA9IGZhRHJvcGxldFNsYXNoOwogICAgZmFEcm9wbGV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRyb3BsZXQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxNjcsICJ0aW50Il0sICJmMDQzIiwgIk0xOTIgNTEyQzg2IDUxMiAwIDQyNiAwIDMyMCAwIDIyOC44IDEzMC4yIDQ1LjkgMTY2LjYtMy41IDE3Mi41LTExLjUgMTgxLjgtMTYgMTkxLjgtMTZsLjQgMGMxMCAwIDE5LjMgNC41IDI1LjIgMTIuNSAzNi40IDQ5LjQgMTY2LjYgMjMyLjMgMTY2LjYgMzIzLjUgMCAxMDYtODYgMTkyLTE5MiAxOTJ6TTExMiAzMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRjMCA3NS4xIDYwLjkgMTM2IDEzNiAxMzYgMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRjLTQ4LjYgMC04OC0zOS40LTg4LTg4eiJdCiAgICB9OwogICAgZmFUaW50ID0gZmFEcm9wbGV0OwogICAgZmFGaWxlTGluZXMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtbGluZXMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjg0NDEsIDEyODQ2MiwgNjE2ODYsICJmaWxlLWFsdCIsICJmaWxlLXRleHQiXSwgImYxNWMiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xMjAgMjU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il0KICAgIH07CiAgICBmYUZpbGVBbHQyID0gZmFGaWxlTGluZXMyOwogICAgZmFGaWxlVGV4dDIgPSBmYUZpbGVMaW5lczI7CiAgICBmYUNvbW1lbnRzRG9sbGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbW1lbnRzLWRvbGxhciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNjUzIiwgIk0xOTIgMzIwYzEwNiAwIDE5Mi03OC44IDE5Mi0xNzZTMjk4LTMyIDE5Mi0zMiAwIDQ2LjggMCAxNDRjMCAzOS42IDE0LjMgNzYuMiAzOC40IDEwNS42TDIuOCAzMTYuOEMtMi4xIDMyNi4xLS40IDMzNy41IDcgMzQ1czE4LjkgOS4yIDI4LjIgNC4yTDExNi44IDMwNmMyMy4xIDkgNDguNSAxNCA3NS4yIDE0em0zLjIgNDhjMTYuNCA4MS45IDk0LjcgMTQ0IDE4OC44IDE0NCAyNi43IDAgNTIuMS01IDc1LjItMTRsODEuNiA0My4yYzkuMyA0LjkgMjAuNyAzLjIgMjguMi00LjJzOS4yLTE4LjkgNC4yLTI4LjJsLTM1LjYtNjcuMmMyNC4xLTI5LjQgMzguNC02NiAzOC40LTEwNS42IDAtODIuNC02MS43LTE1MS41LTE0NS0xNzAuNy0xMS41IDExNS44LTExNS44IDIwMS4yLTIzNS44IDIwMi43ek0xOTYgMzJjMTEgMCAyMCA5IDIwIDIwbDAgNCA4IDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC00Ny41IDBjLTYuOSAwLTEyLjUgNS42LTEyLjUgMTIuNSAwIDYuMSA0LjQgMTEuMyAxMC40IDEyLjNsNDEuNyA3YzI1LjMgNC4yIDQzLjkgMjYuMSA0My45IDUxLjggMCAyNi4xLTE5IDQ3LjctNDQgNTEuOGwwIDQuN2MwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC00LTI0IDBjLTExIDAtMjAtOS0yMC0yMHM5LTIwIDIwLTIwbDU1LjUgMGM2LjkgMCAxMi41LTUuNiAxMi41LTEyLjUgMC02LjEtNC40LTExLjMtMTAuNC0xMi4zbC00MS43LTdjLTI1LjMtNC4yLTQzLjktMjYuMS00My45LTUxLjggMC0yOC44IDIzLjItNTIuMiA1Mi01Mi41bDAtNGMwLTExIDktMjAgMjAtMjB6Il0KICAgIH07CiAgICBmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hZ25pZnlpbmctZ2xhc3MtbG9jYXRpb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2VhcmNoLWxvY2F0aW9uIl0sICJmNjg5IiwgIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTI4OCAxNzZjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCA0OC44IDQ2LjUgMTExLjYgNjguNiAxMzguNiA2IDcuMyAxNi44IDcuMyAyMi43IDAgMjIuMS0yNyA2OC42LTg5LjggNjguNi0xMzguNnptLTExMiAwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYVNlYXJjaExvY2F0aW9uID0gZmFNYWduaWZ5aW5nR2xhc3NMb2NhdGlvbjsKICAgIGZhRmlsZUludm9pY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1pbnZvaWNlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1NzAiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjc3LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjU4LjcgMTguN0MyNDYuNyA2LjcgMjMwLjUgMCAyMTMuNSAwTDY0IDB6TTMyNS41IDE3NkwyMzIgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyMDggNTguNSAzMjUuNSAxNzZ6TTY0IDM4NGwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJMOTYgNDE2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNODggNjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRTNzQuNyA2NCA4OCA2NHptMCA5Nmw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFQZW50YWdvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW50YWdvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNzkwIiwgIk0zMTYuNC0zLjFjLTE2LjgtMTIuMi0zOS42LTEyLjItNTYuNCAwTDM1LjMgMTYwLjJjLTE2LjggMTIuMi0yMy45IDMzLjktMTcuNCA1My43bDg1LjggMjY0LjFjNi40IDE5LjggMjQuOSAzMy4yIDQ1LjcgMzMuMmwyNzcuNyAwYzIwLjggMCAzOS4yLTEzLjQgNDUuNy0zMy4ybDg1LjgtMjY0LjFjNi40LTE5LjgtLjYtNDEuNC0xNy40LTUzLjdMMzE2LjQtMy4xeiJdCiAgICB9OwogICAgZmFSZXB1YmxpY2FuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJlcHVibGljYW4iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjc1ZSIsICJNMCAxOTJDMCAxMDMuNiA3MS42IDMyIDE2MCAzMmwyMjQgMGM4OC40IDAgMTYwIDcxLjYgMTYwIDE2MGwwIDY0LTU0NCAwIDAtNjR6bTE1Mi0zMmEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwem0yMzIgMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4ek0yODAgMTYwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTEyOCAyODhsNDE2IDAgMCAxMTJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA0OGMwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGwwLTQ4LTMyIDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NC0xOTIgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2MCAxMjggMHoiXQogICAgfTsKICAgIGZhU2hvcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaG9wIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInN0b3JlLWFsdCJdLCAiZjU0ZiIsICJNMjEuNSAxODEuMUw3OC4zIDY3LjRDODkuMiA0NS43IDExMS4zIDMyIDEzNS42IDMybDMwNC45IDBjMjQuMiAwIDQ2LjQgMTMuNyA1Ny4yIDM1LjRsNTYuOCAxMTMuN2MzLjYgNy4yIDUuNSAxNS4xIDUuNSAyMy4yIDAgMjcuMy0yMS4yIDQ5LjctNDggNTEuNkw1MTIgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTkyLTk2IDAgMCAxNzZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE5MiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE3Ni4xYy0yNi44LTEuOS00OC0yNC4zLTQ4LTUxLjYgMC04IDEuOS0xNiA1LjUtMjMuMnpNMTI4IDI1NmwwIDExMmMwIDguOCA3LjIgMTYgMTYgMTZsMTI4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTEyLTE2MCAweiJdCiAgICB9OwogICAgZmFTdG9yZUFsdCA9IGZhU2hvcDsKICAgIGZhRmlsbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxtIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3OTAyLCA2MjM2OCwgImZpbG0tYWx0IiwgImZpbG0tc2ltcGxlIl0sICJmMDA4IiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNNDggMzY4bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTMwNC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek00OCAyNDBsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMzA0LTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTQ4IDExMmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2ek0zNTIgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHoiXQogICAgfTsKICAgIGZhRmlsbUFsdCA9IGZhRmlsbTsKICAgIGZhRmlsbVNpbXBsZSA9IGZhRmlsbTsKICAgIGZhQnVpbGRpbmdDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRkNCIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxODAgMGMtMTAuNS0xNC42LTE5LTMwLjctMjUuMS00OGwtNzQuOSAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMyIDAgNCAuMiA1LjkgLjUgNi0yMy42IDE2LjMtNDUuNCAzMC4xLTY0LjVsLTQgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNGMyNy41LTE5LjggNjAuMy0zMi40IDk2LTM1LjRMNDE2IDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDB6bTMyIDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNzIgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTI4IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMjIuNi0xNDRsMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42TDQ1NC42IDQwMHoiXQogICAgfTsKICAgIGZhQ29tbWVudHMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbW1lbnRzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NDkwLCA2MTY3MF0sICJmMDg2IiwgIk0zODQgMTQ0YzAgOTcuMi04NiAxNzYtMTkyIDE3Ni0yNi43IDAtNTIuMS01LTc1LjItMTRMMzUuMiAzNDkuMmMtOS4zIDQuOS0yMC43IDMuMi0yOC4yLTQuMnMtOS4yLTE4LjktNC4yLTI4LjJsMzUuNi02Ny4yQzE0LjMgMjIwLjIgMCAxODMuNiAwIDE0NCAwIDQ2LjggODYtMzIgMTkyLTMyUzM4NCA0Ni44IDM4NCAxNDR6bTAgMzY4Yy05NC4xIDAtMTcyLjQtNjIuMS0xODguOC0xNDQgMTIwLTEuNSAyMjQuMy04Ni45IDIzNS44LTIwMi43IDgzLjMgMTkuMiAxNDUgODguMyAxNDUgMTcwLjcgMCAzOS42LTE0LjMgNzYuMi0zOC40IDEwNS42bDM1LjYgNjcuMmM0LjkgOS4zIDMuMiAyMC43LTQuMiAyOC4ycy0xOC45IDkuMi0yOC4yIDQuMkw0NTkuMiA0OThjLTIzLjEgOS00OC41IDE0LTc1LjIgMTR6Il0KICAgIH07CiAgICBmYVRhZ3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFncyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMDJjIiwgIk00MDEuMiAzOS4xTDU0OS40IDE4OS40YzI3LjcgMjguMSAyNy43IDczLjEgMCAxMDEuMkwzOTMgNDQ4LjljLTkuMyA5LjQtMjQuNSA5LjUtMzMuOSAuMnMtOS41LTI0LjUtLjItMzMuOUw1MTUuMyAyNTYuOGM5LjItOS4zIDkuMi0yNC40IDAtMzMuN0wzNjcgNzIuOWMtOS4zLTkuNC05LjItMjQuNiAuMi0zMy45czI0LjYtOS4yIDMzLjkgLjJ6TTMyLjEgMjI5LjVMMzIuMSA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwxMzMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43bDE0NCAxNDRjMjUgMjUgMjUgNjUuNSAwIDkwLjVMMjg1LjQgNDE4LjdjLTI1IDI1LTY1LjUgMjUtOTAuNSAwbC0xNDQtMTQ0Yy0xMi0xMi0xOC43LTI4LjMtMTguNy00NS4zem0xNDQtODUuNWEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdCiAgICB9OwogICAgZmFHdW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3VuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUxOWIiLCAiTTUyOCA1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDgtNDQ4IDBDMTQuMyA2NCAwIDc4LjMgMCA5NkwwIDIwOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMCAwYzIwLjggMCAzNi4xIDE5LjYgMzEgMzkuOEwzMyA0NDAuMmMtMi40IDkuNi0uMiAxOS43IDUuOCAyNy41UzU0LjEgNDgwIDY0IDQ4MGw5NiAwYzE0LjcgMCAyNy41LTEwIDMxLTI0LjJMMjE3IDM1MiAzMjEuNCAzNTJjMjMuNyAwIDQ0LjgtMTQuOSA1Mi43LTM3LjJsMjYuNy03NC44IDMxLjEgMGM4LjUgMCAxNi42LTMuNCAyMi42LTkuNGwyMi42LTIyLjYgNjYuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtODBjMC0xNy43LTE0LjMtMzItMzItMzJsLTE2IDAgMC04ek0zMjEuNCAzMDRsLTkyLjUgMCAxNi02NCAxMDUgMC0yMSA1OC43Yy0xLjEgMy4yLTQuMiA1LjMtNy41IDUuM3pNODAgMTI4bDM4NCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2TDgwIDE2MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhQ2lyY2xlQ2hlY2syID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxNTMzLCAiY2hlY2stY2lyY2xlIl0sICJmMDU4IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDEgMSAwIDUxMnpNMzc0IDE0NS43Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM0wyMjEuMSAzMTUuMiAxNjkgMjYzLjFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjNSA1IDExLjggNy41IDE4LjggN3MxMy40LTQuMSAxNy41LTkuOEwzNzkuMyAxNzkuMmM3LjgtMTAuNyA1LjQtMjUuNy01LjMtMzMuNXoiXQogICAgfTsKICAgIGZhQ2hlY2tDaXJjbGUyID0gZmFDaXJjbGVDaGVjazI7CiAgICBmYUlkQ2FyZENsaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaWQtY2FyZC1jbGlwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImlkLWNhcmQtYWx0Il0sICJmNDdmIiwgIk0yNTYtMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0LTEyOCAwIDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTY0IDMybDExMiAwIDAgMzJjMCAyNi41IDIxLjUgNDggNDggNDhsMTI4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zMiAxMTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJ6TTE3NiA0MDBjMCA4LjggNy4yIDE2IDE2IDE2bDE5MiAwYzguOCAwIDE2LTcuMiAxNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MGwtNjQgMGMtNDQuMiAwLTgwIDM1LjgtODAgODB6TTI4OCAyODBhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6Il0KICAgIH07CiAgICBmYUlkQ2FyZEFsdCA9IGZhSWRDYXJkQ2xpcDsKICAgIGZhTW9vbjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9vbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc2OSwgOTIxNF0sICJmMTg2IiwgIk0yNTYgMEMxMTQuNiAwIDAgMTE0LjYgMCAyNTZTMTE0LjYgNTEyIDI1NiA1MTJjNjguOCAwIDEzMS4zLTI3LjIgMTc3LjMtNzEuNCA3LjMtNyA5LjQtMTcuOSA1LjMtMjcuMXMtMTMuNy0xNC45LTIzLjgtMTQuMWMtNC45IC40LTkuOCAuNi0xNC44IC42LTEwMS42IDAtMTg0LTgyLjQtMTg0LTE4NCAwLTcyLjEgNDEuNS0xMzQuNiAxMDIuMS0xNjQuOCA5LjEtNC41IDE0LjMtMTQuMyAxMy4xLTI0LjRTMzIyLjYgOC41IDMxMi43IDYuM0MyOTQuNCAyLjIgMjc1LjQgMCAyNTYgMHoiXQogICAgfTsKICAgIGZhT2lsV2VsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJvaWwtd2VsbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTMyIiwgIk01MjguMyA2MS4zYy0xMS40LTQyLjctNTUuMy02OC05OC01Ni42TDQxNC45IDguOEMzOTcuOCAxMy40IDM4Ny43IDMxIDM5Mi4zIDQ4bDI0LjUgOTEuNC0xMDguMiAyOC4xLTYuMy0xOC4xQzI5Ny43IDEzNi42IDI4NS42IDEyOCAyNzIgMTI4cy0yNS43IDguNi0zMC4yIDIxLjRsLTEzLjYgMzktMTMyLjIgMzQuMyAwLTM4LjZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNjQtMTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTM3LjMgMC02MS40LTE3NS40LTYyLjIgMTYuMSAyMi4xIDYzLjItNjYuNiAwIDE5LjktNTYuOS03NC42IDE5LjMtNDYuNyAxMzMuNS00MS4zIDAgMC0xNTkuMiAzMzcuNC04Ny41IDI1LjIgOTRjNC42IDE3LjEgMjIuMSAyNy4yIDM5LjIgMjIuNmwxNS41LTQuMWM0Mi43LTExLjQgNjgtNTUuMyA1Ni42LTk4TDUyOC4zIDYxLjN6TTIwNS4xIDQ0OGwxNi44LTQ4IDEwMC4yIDAgMTYuOCA0OC0xMzMuOCAweiJdCiAgICB9OwogICAgZmFUYWNob2dyYXBoRGlnaXRhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YWNob2dyYXBoLWRpZ2l0YWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiZGlnaXRhbC10YWNob2dyYXBoIl0sICJmNTY2IiwgIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em02NCAzMmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNODggMzUyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEzNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDg4IDM1MnptMjU2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAwek00OTYgMTkyYTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpNODggMzEyYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMTA0LTI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bTU2IDI0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhRGlnaXRhbFRhY2hvZ3JhcGggPSBmYVRhY2hvZ3JhcGhEaWdpdGFsOwogICAgZmFUYWJsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGV0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRhYmxldC1hbmRyb2lkIl0sICJmM2ZiIiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwek0xODQgNDAwbDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYVRhYmxldEFuZHJvaWQgPSBmYVRhYmxldDsKICAgIGZhUnVibGVTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJ1YmxlLXNpZ24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs4MzgxLCAicm91YmxlIiwgInJ1YiIsICJydWJsZSJdLCAiZjE1OCIsICJNMTEyIDMyQzk0LjMgMzIgODAgNDYuMyA4MCA2NGwwIDIwOC00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDAgMCA0OC00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgMTUyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE1MiAwIDAtNDggMTEyIDBjNzkuNSAwIDE0NC02NC41IDE0NC0xNDRTMzM1LjUgMzIgMjU2IDMyTDExMiAzMnpNMjU2IDI1NmwtMTEyIDAgMC0xNjAgMTEyIDBjNDQuMiAwIDgwIDM1LjggODAgODBzLTM1LjggODAtODAgODB6Il0KICAgIH07CiAgICBmYVJvdWJsZSA9IGZhUnVibGVTaWduOwogICAgZmFSdWIgPSBmYVJ1YmxlU2lnbjsKICAgIGZhUnVibGUgPSBmYVJ1YmxlU2lnbjsKICAgIGZhQ2xvc2VkQ2FwdGlvbmluZzIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvc2VkLWNhcHRpb25pbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjIwYSIsICJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptMTUyIDgwbDMyIDBjNC40IDAgOCAzLjYgOCA4IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zMC45LTI1LjEtNTYtNTYtNTZsLTMyIDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgODBjMCAzMC45IDI1LjEgNTYgNTYgNTZsMzIgMGMzMC45IDAgNTYtMjUuMSA1Ni01NiAwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDQuNC0zLjYgOC04IDhsLTMyIDBjLTQuNCAwLTgtMy42LTgtOGwwLTgwYzAtNC40IDMuNi04IDgtOHptMTY4IDhjMC00LjQgMy42LTggOC04bDMyIDBjNC40IDAgOCAzLjYgOCA4IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zMC45LTI1LjEtNTYtNTYtNTZsLTMyIDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgODBjMCAzMC45IDI1LjEgNTYgNTYgNTZsMzIgMGMzMC45IDAgNTYtMjUuMSA1Ni01NiAwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDQuNC0zLjYgOC04IDhsLTMyIDBjLTQuNCAwLTgtMy42LTgtOGwwLTgweiJdCiAgICB9OwogICAgZmFQZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Mzk0XSwgImYzMDQiLCAiTTM1Mi45IDIxLjJMMzA4IDY2LjEgNDQ1LjkgMjA0IDQ5MC44IDE1OS4xQzUwNC40IDE0NS42IDUxMiAxMjcuMiA1MTIgMTA4cy03LjYtMzcuNi0yMS4yLTUxLjFMNDU1LjEgMjEuMkM0NDEuNiA3LjYgNDIzLjIgMCA0MDQgMHMtMzcuNiA3LjYtNTEuMSAyMS4yek0yNzQuMSAxMDBMNTguOSAzMTUuMWMtMTAuNyAxMC43LTE4LjUgMjQuMS0yMi42IDM4LjdMLjkgNDgxLjZjLTIuMyA4LjMgMCAxNy4zIDYuMiAyMy40czE1LjEgOC41IDIzLjQgNi4ybDEyNy44LTM1LjVjMTQuNi00LjEgMjcuOS0xMS44IDM4LjctMjIuNkw0MTIgMjM3LjkgMjc0LjEgMTAweiJdCiAgICB9OwogICAgZmFQbGFuZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGFuZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMDcyIiwgIk01MjAgMjAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2cy0yNS4xIDU2LTU2IDU2bC0xMjcuMyAwLTE1OS4yIDE3My42Yy02LjEgNi42LTE0LjYgMTAuNC0yMy42IDEwLjRsLTQzLjcgMGMtMTAuOSAwLTE4LjYtMTAuNy0xNS4yLTIxLjFsNTQuMy0xNjIuOS05OS43IDAtNTIuOCA2NmMtMyAzLjgtNy42IDYtMTIuNSA2bC0xOS44IDBjLTEwLjQgMC0xOC05LjgtMTUuNS0xOS45TDMyIDI1NiA1IDE0Ny45QzIuNCAxMzcuOCAxMC4xIDEyOCAyMC41IDEyOGwxOS44IDBjNC45IDAgOS41IDIuMiAxMi41IDZsNTIuOCA2NiA5OS43IDAtNTQuMy0xNjIuOUMxNDcuNiAyNi43IDE1NS4zIDE2IDE2Ni4yIDE2bDQzLjcgMGM5IDAgMTcuNSAzLjggMjMuNiAxMC40TDM5Mi43IDIwMCA1MjAgMjAweiJdCiAgICB9OwogICAgZmFJbWFnZXMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImltYWdlcyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMzAyIiwgIk05NiA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMzIwIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDk2IDk2ek0yNCAxMjhjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyOTZjMCA4LjggNy4yIDE2IDE2IDE2bDM2MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxNTJjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTE2OCAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTE5Ni41IDExLjVjLTQuNC03LjEtMTIuMS0xMS41LTIwLjUtMTEuNXMtMTYuMSA0LjQtMjAuNSAxMS41bC01Ni4zIDkyLjEtMjQuNS0zMC42Yy00LjYtNS43LTExLjQtOS0xOC43LTlzLTE0LjIgMy4zLTE4LjcgOWwtNjQgODBjLTUuOCA3LjItNi45IDE3LjEtMi45IDI1LjRTMTc0LjggMzUyIDE4NCAzNTJsMjcyIDBjOC43IDAgMTYuNy00LjcgMjAuOS0xMi4zczQuMS0xNi44LS41LTI0LjNsLTg4LTE0NHoiXQogICAgfTsKICAgIGZhTW9iaWxlU2NyZWVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vYmlsZS1zY3JlZW4iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsibW9iaWxlLWFuZHJvaWQtYWx0Il0sICJmM2NmIiwgIk0xNiA2NEMxNiAyOC43IDQ0LjcgMCA4MCAwTDMwNCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDgwIDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMTYgNjR6TTEyOCA0NDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTMwNCA2NGwtMjI0IDAgMCAzMDQgMjI0IDAgMC0zMDR6Il0KICAgIH07CiAgICBmYU1vYmlsZUFuZHJvaWRBbHQgPSBmYU1vYmlsZVNjcmVlbjsKICAgIGZhR3VhcmFuaVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3VhcmFuaS1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUxOWEiLCAiTTE5MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQxLjVDNzMuMyA3Ny4zIDAgMTU4LjEgMCAyNTZTNzMuMyA0MzQuNyAxNjggNDQ2LjVsMCA0MS41YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MS41Yzk0LjctMTEuOCAxNjgtOTIuNiAxNjgtMTkwLjUgMC0xNy43LTE0LjMtMzItMzItMzJsLTEzNiAwIDAtOTMuOGMyNS4zIDQuOCA0Ny45IDE3IDY1LjYgMzQuMyAxMi42IDEyLjQgMzIuOSAxMi4yIDQ1LjMtLjRzMTIuMi0zMi45LS41LTQ1LjNDMjk3LjIgOTAuMiAyNTguOCA3MC44IDIxNiA2NS41TDIxNiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMTY4IDEzMC4ybDAgMjUxLjVDMTA4LjggMzcwLjUgNjQgMzE4LjUgNjQgMjU2czQ0LjgtMTE0LjUgMTA0LTEyNS44em00OCAyNTEuNWwwLTkzLjggMTAwIDBjLTEyLjMgNDcuNi01MS4yIDg0LjUtMTAwIDkzLjh6Il0KICAgIH07CiAgICBmYUJhZ1Nob3BwaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhZy1zaG9wcGluZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJzaG9wcGluZy1iYWciXSwgImYyOTAiLCAiTTE2MCA4MGMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0bDAgNDgtMTI4IDAgMC00OHptLTQ4IDQ4bC02NCAwYy0yNi41IDAtNDggMjEuNS00OCA0OEwwIDM4NGMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0yMDhjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDAgMC00OGMwLTYxLjktNTAuMS0xMTItMTEyLTExMlMxMTIgMTguMSAxMTIgODBsMCA0OHptMjQgNDhhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0xNTIgMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhU2hvcHBpbmdCYWcgPSBmYUJhZ1Nob3BwaW5nOwogICAgZmFDaXJjbGVSaWdodDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE4MzgsICJhcnJvdy1hbHQtY2lyY2xlLXJpZ2h0Il0sICJmMzVhIiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAwIDUxMiAwIDI1NiAyNTYgMCAxIDAgLTUxMiAwem0zODcuMyAxMS4zbC0xMDQgMTA0Yy00LjYgNC42LTExLjUgNS45LTE3LjQgMy41UzI1NiAzNjYuNSAyNTYgMzYwbDAtNTYtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwIDAtNTZjMC02LjUgMy45LTEyLjMgOS45LTE0LjhzMTIuOS0xLjEgMTcuNCAzLjVsMTA0IDEwNGM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnoiXQogICAgfTsKICAgIGZhQXJyb3dBbHRDaXJjbGVSaWdodDIgPSBmYUNpcmNsZVJpZ2h0MjsKICAgIGZhUGhvbmVWb2x1bWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGhvbmUtdm9sdW1lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInZvbHVtZS1jb250cm9sLXBob25lIl0sICJmMmEwIiwgIk0zNDQtMzJjMTI4LjEgMCAyMzIgMTAzLjkgMjMyIDIzMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTEwMS42LTgyLjQtMTg0LTE4NC0xODQtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptOCAxOTJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0zMjAgODhjMC0xMy4zIDEwLjctMjQgMjQtMjQgNzUuMSAwIDEzNiA2MC45IDEzNiAxMzYgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00OC42LTM5LjQtODgtODgtODgtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTE0NC4xIDEuNGMxOS43LTUuNCA0MC4zIDQuNyA0OC4xIDIzLjVsNDAuNSA5Ny4zYzYuOSAxNi41IDIuMSAzNS42LTExLjggNDdsLTQ0LjEgMzYuMWMzMi41IDcxLjYgODkgMTMwIDE1OS4zIDE2NC45TDM3NC43IDMyM2MxMS4zLTEzLjkgMzAuNC0xOC42IDQ3LTExLjhMNTE5IDM1MS44YzE4LjggNy44IDI4LjkgMjguNCAyMy41IDQ4LjFsLTEuNSA1LjVDNTIzLjQgNDcwLjEgNDYwLjkgNTI1LjMgMzg0LjYgNTA5LjIgMjA5LjYgNDcyLjEgNzEuOSAzMzQuNCAzNC44IDE1OS40IDE4LjcgODMuMSA3My45IDIwLjYgMTM4LjUgMi45bDUuNS0xLjV6Il0KICAgIH07CiAgICBmYVZvbHVtZUNvbnRyb2xQaG9uZSA9IGZhUGhvbmVWb2x1bWU7CiAgICBmYUN1YmVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImN1YmVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYjMiLCAiTTI4NC0xLjNjLTE3LjMtMTAtMzguNy0xMC01NiAwTDE0My44IDQ3LjNjLTE3LjMgMTAtMjggMjguNS0yOCA0OC41bDAgMTAxLjktODguMyA1MWMtMTcuMyAxMC0yOCAyOC41LTI4IDQ4LjVsMCA5Ny4zYzAgMjAgMTAuNyAzOC41IDI4IDQ4LjVsODQuMyA0OC42YzE3LjMgMTAgMzguNyAxMCA1NiAwbDg4LjMtNTEgODguMyA1MWMxNy4zIDEwIDM4LjcgMTAgNTYgMEw0ODQuNSA0NDNjMTcuMy0xMCAyOC0yOC41IDI4LTQ4LjVsMC05Ny4zYzAtMjAtMTAuNy0zOC41LTI4LTQ4LjVsLTg4LjMtNTEgMC0xMDEuOWMwLTIwLTEwLjctMzguNS0yOC00OC41TDI4NC0xLjN6TTIzMiAyOTIuNmwwIDEwNi41LTg4LjMgNTFjLTEuMiAuNy0yLjYgMS4xLTQgMS4xbDAtMTA1LjMgOTIuMy01My4zem0yMzEuNCAuNmMuNyAxLjIgMS4xIDIuNiAxLjEgNGwwIDk3LjNjMCAyLjktMS41IDUuNS00IDYuOWwtODQuMyA0OC42Yy0xLjIgLjctMi42IDEuMS00IDEuMWwwLTEwNS4zIDkxLjItNTIuNnpNMzQ4LjMgOTUuOGwwIDEwMS45LTkyLjMgNTMuMyAwLTEwNi41IDkxLjItNTIuNmMuNyAxLjIgMS4xIDIuNiAxLjEgNHoiXQogICAgfTsKICAgIGZhUGhvbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGhvbmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMjIsIDEyODM3OV0sICJmMDk1IiwgIk0xNjAuMiAyNUMxNTIuMyA2LjEgMTMxLjctMy45IDExMi4xIDEuNGwtNS41IDEuNWMtNjQuNiAxNy42LTExOS44IDgwLjItMTAzLjcgMTU2LjQgMzcuMSAxNzUgMTc0LjggMzEyLjcgMzQ5LjggMzQ5LjggNzYuMyAxNi4yIDEzOC44LTM5LjEgMTU2LjQtMTAzLjdsMS41LTUuNWM1LjQtMTkuNy00LjctNDAuMy0yMy41LTQ4LjFsLTk3LjMtNDAuNWMtMTYuNS02LjktMzUuNi0yLjEtNDcgMTEuOGwtMzguNiA0Ny4yQzIzMy45IDMzNS40IDE3Ny4zIDI3NyAxNDQuOCAyMDUuM0wxODkgMTY5LjNjMTMuOS0xMS4zIDE4LjYtMzAuNCAxMS44LTQ3TDE2MC4yIDI1eiJdCiAgICB9OwogICAgZmFUb3JpaUdhdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9yaWktZ2F0ZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk5NjFdLCAiZjZhMSIsICJNMCA5NkwwIDI4LjVDMCAyMS42IDUuNiAxNiAxMi41IDE2IDE0LjggMTYgMTcgMTYuNiAxOSAxNy44TDU4IDQxLjJDODIuOSA1Ni4xIDExMS4zIDY0IDE0MC4zIDY0bDE2Ny40IDBjMjkgMCA1Ny41LTcuOSA4Mi4zLTIyLjhsMzktMjMuNGMxLjktMS4yIDQuMi0xLjggNi40LTEuOCA2LjkgMCAxMi41IDUuNiAxMi41IDEyLjVMNDQ4IDk2YzAgMzUuMy0yOC43IDY0LTY0IDY0bDAgNjQgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYgMCAwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE5Mi0xOTIgMCAwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE5Mi0xNiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDAgMC02NEMyOC43IDE2MCAwIDEzMS4zIDAgOTZ6TTEyOCAyMjRsNjQgMCAwLTY0LTY0IDAgMCA2NHptMTI4IDBsNjQgMCAwLTY0LTY0IDAgMCA2NHoiXQogICAgfTsKICAgIGZhQmFjb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFjb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjkzNjNdLCAiZjdlNSIsICJNNTU3IDk2LjdjMTQuNCAxNC40IDEyLjQgMzguNC00LjMgNTAuMmwtNjQuNiA0NS43Yy00My43IDMwLjktNzkuMiA3MS45LTEwMy40IDExOS42bC0yNS4zIDQ5LjhjLTI1LjEgNDkuMy02Mi4xIDkxLjUtMTA3LjggMTIyLjZsLTc0LjEgNTAuNmMtMTMuMSA4LjktMzAuNyA3LjMtNDEuOC0zLjlsLTQ0LjktNDQuOSA4Ni41LTY2LjVjNDIuMy0zMi41IDc2LjctNzQuMyAxMDAuNi0xMjJsMjQuNS00OS4xYzI0LjUtNDkgNjEuOC05MC42IDEwNy45LTEyMC4ybDEwOC43LTY5LjkgMzggMzh6TTQ4NC4yIDIzLjlMMzg0LjMgODguMmMtNTMuNCAzNC4zLTk2LjUgODIuNC0xMjQuOSAxMzkuMWwtMjQuNSA0OS4xYy0yMC42IDQxLjMtNTAuMyA3Ny4zLTg2LjkgMTA1LjRsLTkxLjQgNzAuMy0zNi45LTM2LjljLTE0LjQtMTQuNC0xMi40LTM4LjQgNC4zLTUwLjJsNjQuNi00NS43YzQzLjctMzAuOSA3OS4yLTcxLjkgMTAzLjQtMTE5LjZsMjUuMy00OS44QzI0Mi4zIDEwMC44IDI3OS4zIDU4LjYgMzI1IDI3LjRsNzQuMS01MC42YzEzLjEtOC45IDMwLjYtNy4zIDQxLjggMy45bDQzLjMgNDMuM3oiXQogICAgfTsKICAgIGZhUGVyc29uRmFsbGluZ0J1cnN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1mYWxsaW5nLWJ1cnN0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1NDciLCAiTTI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNS40YzAgNTUuMi0yMy43IDEwNy02My45IDE0My4xbDYyLjkgNzUuNSA4OSAwYzE1LjEgMCAyOS4zIDcuMSAzOC40IDE5LjJsNDMuMiA1Ny42YzEwLjYgMTQuMSA3LjcgMzQuMi02LjQgNDQuOHMtMzQuMiA3LjctNDQuOC02LjRMMzY4IDMyMCAyNjMuMiAzMjAgMzc2LjggNDU5LjhjMTEuMSAxMy43IDkuMSAzMy45LTQuNyA0NXMtMzMuOSA5LjEtNDUtNC43TDEzNy40IDI2Ni42Yy02LjEgMTUtOS40IDMxLjMtOS40IDQ4bDAgNjkuNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY5LjRjMC02Ny40IDM1LjQtMTI5LjkgOTMuMi0xNjQuNmw0LjYtMi44QzIwMC40IDEyNCAyMjQgODIuNCAyMjQgMzcuNGwwLTUuNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTYgODhBNTYgNTYgMCAxIDEgMTI4IDg4IDU2IDU2IDAgMSAxIDE2IDg4em0zNzYtNy45YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQ4em0xMDQgMTUyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDB6bS01NC41LTk3LjVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDMzLjktMzMuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTMzLjkgMzMuOWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDB6Il0KICAgIH07CiAgICBmYVF1b3RlUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicXVvdGUtcmlnaHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs4MjIxLCAicXVvdGUtcmlnaHQtYWx0Il0sICJmMTBlIiwgIk00NDggMjk2YzAgNjYuMy01My43IDEyMC0xMjAgMTIwbC04IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOCAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2bDAtOC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMzZ6bS0yNTYgMGMwIDY2LjMtNTMuNyAxMjAtMTIwIDEyMGwtOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDggMGMzMC45IDAgNTYtMjUuMSA1Ni01NmwwLTgtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTM2eiJdCiAgICB9OwogICAgZmFRdW90ZVJpZ2h0QWx0ID0gZmFRdW90ZVJpZ2h0OwogICAgZmFIb3VzZU1lZGljYWxGbGFnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLW1lZGljYWwtZmxhZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTE0IiwgIk00ODAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDAgMCAyODhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC00NDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTI2Ny41IDU5LjFMNDAwIDE4Ni45IDQwMCA1MDMuNGMtOS40IDUuNC0yMC4zIDguNi0zMiA4LjZsLTI1NiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE0NC0xOS45IDBDMTIuNiAzMDQgMCAyOTEuNCAwIDI3NS45IDAgMjY4LjMgMy4xIDI2MSA4LjYgMjU1LjdMMjEyLjUgNTkuMUMyMTkuOSA1MiAyMjkuNyA0OCAyNDAgNDhzMjAuMSA0IDI3LjUgMTEuMXpNMjA0LjggMjU2LjhsMCA0NC00NCAwYy05LjcgMC0xNy42IDcuOS0xNy42IDE3LjZsMCAzNS4yYzAgOS43IDcuOSAxNy42IDE3LjYgMTcuNmw0NCAwIDAgNDRjMCA5LjcgNy45IDE3LjYgMTcuNiAxNy42bDM1LjIgMGM5LjcgMCAxNy42LTcuOSAxNy42LTE3LjZsMC00NCA0NCAwYzkuNyAwIDE3LjYtNy45IDE3LjYtMTcuNmwwLTM1LjJjMC05LjctNy45LTE3LjYtMTcuNi0xNy42bC00NCAwIDAtNDRjMC05LjctNy45LTE3LjYtMTcuNi0xNy42bC0zNS4yIDBjLTkuNyAwLTE3LjYgNy45LTE3LjYgMTcuNnoiXQogICAgfTsKICAgIGZhUHJlc2NyaXB0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInByZXNjcmlwdGlvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNWIxIiwgIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMkwwIDI4OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjQgNTAuNyAwIDEyOCAxMjgtMTA1LjQgMTA1LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMjg4IDM5Ny4zIDM5My40IDUwMi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMzMzLjMgMzUyIDQzOC42IDI0Ni42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDI4OCAzMDYuNyAyMDIuMiAyMjAuOUMyNTEuNCAyMDkuMSAyODggMTY0LjggMjg4IDExMiAyODggNTAuMSAyMzcuOSAwIDE3NiAwTDMyIDB6TTE3NiAxNjBsLTExMiAwIDAtOTYgMTEyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDh6Il0KICAgIH07CiAgICBmYURpY2VUaHJlZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWNlLXRocmVlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTg1OF0sICJmNTI3IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem02NCA5NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTY0IDEyOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xMjggNjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFCdWlsZGluZ0xvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctbG9jayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGQ2IiwgIk0zMiA2NEMzMiAyOC43IDYwLjcgMCA5NiAwTDM1MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTIxLjNjLTQ2LjkgMTktODAgNjUtODAgMTE4LjdsMCAyNC40Yy0xOS42IDE3LjYtMzIgNDMuMS0zMiA3MS41bDAgOTZjMCA1LjUgLjUgMTAuOSAxLjMgMTYuMUw5NiA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDMyIDY0ek0xNzYgMzg0bDAgODAgODAgMCAwLTY0LjFjMC0xMy43IDEuOS0yNyA1LjUtMzkuNi01LjctNS4yLTEzLjItOC4zLTIxLjUtOC4zbC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMzA3IDIyNC4zYy0xLS4yLTItLjMtMy0uM2wtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDE2LjcgMGMyLjEtMjIuOCA4LjQtNDQuMyAxOC4zLTYzLjd6TTE0NCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0xMTIgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTQ0IDIyNGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0zNTIgODAuMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTM1MiA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il0KICAgIH07CiAgICBmYUlkQ2FyZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaWQtY2FyZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYyMTQ3LCAiZHJpdmVycy1saWNlbnNlIl0sICJmMmMyIiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDQ0OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0TDAgOTZ6bTAgNDhsNTc2IDAgMCAyNzJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE0NHpNMjQ3LjMgNDE2YzIwLjIgMCAzNS4zLTE5LjQgMjIuNC0zNS0xNC43LTE3LjctMzYuOS0yOS02MS43LTI5bC02NCAwYy0yNC44IDAtNDcgMTEuMy02MS43IDI5LTEyLjkgMTUuNiAyLjIgMzUgMjIuNCAzNWwxNDIuNSAwek0xNzYgMzEyYTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyek0zNjAgMjA4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMTIgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTEyIDB6Il0KICAgIH07CiAgICBmYURyaXZlcnNMaWNlbnNlMiA9IGZhSWRDYXJkMjsKICAgIGZhQ2lyY2xlUGxheTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXBsYXkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTQ2OSwgInBsYXktY2lyY2xlIl0sICJmMTQ0IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0xODguMyAxNDcuMWMtNy42IDQuMi0xMi4zIDEyLjMtMTIuMyAyMC45bDAgMTc2YzAgOC43IDQuNyAxNi43IDEyLjMgMjAuOXMxNi44IDQuMSAyNC4zLS41bDE0NC04OGM3LjEtNC40IDExLjUtMTIuMSAxMS41LTIwLjVzLTQuNC0xNi4xLTExLjUtMjAuNWwtMTQ0LTg4Yy03LjQtNC41LTE2LjctNC43LTI0LjMtLjV6Il0KICAgIH07CiAgICBmYVBsYXlDaXJjbGUyID0gZmFDaXJjbGVQbGF5MjsKICAgIGZhRmFjZUxhdWdoQmVhbTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1sYXVnaC1iZWFtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTEzLCAibGF1Z2gtYmVhbSJdLCAiZjU5YSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTEwMS42IDMxNGMtMy43LTEzLjcgNy41LTI2IDIxLjctMjZsMjY1LjQgMGMxNC4yIDAgMjUuNCAxMi4zIDIxLjcgMjYtMTguNSA2OC04MC42IDExOC0xNTQuNCAxMThTMTIwIDM4MiAxMDEuNiAzMTR6TTE3NiAxNjRjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6bTEzMiAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4eiJdCiAgICB9OwogICAgZmFMYXVnaEJlYW0yID0gZmFGYWNlTGF1Z2hCZWFtMjsKICAgIGZhTGVhZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsZWFmIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwNmMiLCAiTTQ3MS4zIDYuN0M0NzcuNyAuNiA0ODctMS42IDQ5NS42IDEuMiA1MDUuNCA0LjUgNTEyIDEzLjcgNTEyIDI0bDAgMTg2LjljMCAxMzEuMi0xMDguMSAyMzcuMS0yMzguOCAyMzcuMS03NyAwLTE0My40LTQ5LjUtMTY3LjUtMTE4LjctMzUuNCAzMC44LTU3LjcgNzYuMS01Ny43IDEyNi43IDAgMTMuMy0xMC43IDI0LTI0IDI0UzAgNDY5LjMgMCA0NTZDMCAzODEuMSAzOC4yIDMxNS4xIDk2LjEgMjc2LjMgMTMxLjQgMjUyLjcgMTczLjUgMjQwIDIxNiAyNDBsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMGMtMzkuNyAwLTc3LjMgOC44LTExMSAyNC41IDIzLjMtNzAgODkuMi0xMjAuNSAxNjctMTIwLjUgNjYuNCAwIDExNS44LTIyLjEgMTQ4LjctNDQgMTkuMi0xMi44IDM1LjUtMjguMSA1MC43LTQ1LjN6Il0KICAgIH07CiAgICBmYUhvdXNlQ2hpbW5leVVzZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtY2hpbW5leS11c2VyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwNjUiLCAiTTIzNC4yIDguNmMxMi4zLTExLjQgMzEuMy0xMS40IDQzLjUgMEwzNjggOTIuMyAzNjggODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEwMS41IDM3LjggMzUuMWM5LjYgOSAxMi44IDIyLjkgOCAzNS4xUzQ5My4yIDI3MiA0ODAgMjcybC0xNiAwIDAgMTc2YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yODggMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4ek0zMTIgMjU2YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHpNMTQ0IDQzMmMwIDguOCA3LjIgMTYgMTYgMTZsMTkyIDBjOC44IDAgMTYtNy4yIDE2LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwbC02NCAwYy00NC4yIDAtODAgMzUuOC04MCA4MHoiXQogICAgfTsKICAgIGZhUm90YXRlUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm90YXRlLXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInJlZG8tYWx0IiwgInJvdGF0ZS1mb3J3YXJkIl0sICJmMmY5IiwgIk00ODggMTkybC0xNDQgMGMtOS43IDAtMTguNS01LjgtMjIuMi0xNC44cy0xLjctMTkuMyA1LjItMjYuMmw0Ni43LTQ2LjdjLTc1LjMtNTguNi0xODQuMy01My4zLTI1My41IDE1LjktNzUgNzUtNzUgMTk2LjUgMCAyNzEuNXMxOTYuNSA3NSAyNzEuNSAwYzguMi04LjIgMTUuNS0xNi45IDIxLjktMjYuMSAxMC4xLTE0LjUgMzAuMS0xOCA0NC42LTcuOXMxOCAzMC4xIDcuOSA0NC42Yy04LjUgMTIuMi0xOC4yIDIzLjgtMjkuMSAzNC43LTEwMCAxMDAtMjYyLjEgMTAwLTM2MiAwUy0yNSAxNzUgNzUgNzVjOTQuMy05NC4zIDI0My43LTk5LjYgMzQ0LjMtMTYuMkw0NzEgN2M2LjktNi45IDE3LjItOC45IDI2LjItNS4yUzUxMiAxNC4zIDUxMiAyNGwwIDE0NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHoiXQogICAgfTsKICAgIGZhUmVkb0FsdCA9IGZhUm90YXRlUmlnaHQ7CiAgICBmYVJvdGF0ZUZvcndhcmQgPSBmYVJvdGF0ZVJpZ2h0OwogICAgZmFUb290aCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b290aCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyOTQ2M10sICJmNWM5IiwgIk0xNDUgNS43TDIyNCAzMiAzMDMgNS43QzMxNC4zIDEuOSAzMjYgMCAzMzcuOSAwIDM5OC43IDAgNDQ4IDQ5LjMgNDQ4IDExMC4xbDAgNjguNWMwIDI5LjQtOS41IDU4LjEtMjcuMiA4MS42bC0xLjEgMS41Yy0xMi45IDE3LjItMjEuMyAzNy40LTI0LjMgNTguN0wzNzMuNyA0NzEuOWMtMy4zIDIzLTIzIDQwLjEtNDYuMiA0MC4xLTIyLjggMC00Mi4zLTE2LjUtNDYtMzlMMjYxLjMgMzUxLjZjLTMtMTguMi0xOC44LTMxLjYtMzcuMy0zMS42cy0zNC4yIDEzLjQtMzcuMyAzMS42TDE2Ni41IDQ3M2MtMy44IDIyLjUtMjMuMiAzOS00NiAzOS0yMy4yIDAtNDIuOS0xNy4xLTQ2LjItNDAuMUw1Mi42IDMyMC41Yy0zLTIxLjMtMTEuNC00MS41LTI0LjMtNTguN2wtMS4xLTEuNUM5LjUgMjM2LjcgMCAyMDguMSAwIDE3OC43bDAtNjguNUMwIDQ5LjMgNDkuMyAwIDExMC4xIDAgMTIyIDAgMTMzLjcgMS45IDE0NSA1Ljd6Il0KICAgIH07CiAgICBmYUhvdXNlQ2hpbW5leVdpbmRvdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1jaGltbmV5LXdpbmRvdyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDBkIiwgIk0yMzQuMiA4LjZjMTIuMy0xMS40IDMxLjMtMTEuNCA0My41IDBMMzY4IDkyLjMgMzY4IDgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMDEuNSAzNy44IDM1LjFjOS42IDkgMTIuOCAyMi45IDggMzUuMVM0OTMuMiAyNzIgNDgwIDI3MmwtMTYgMCAwIDE3NmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMjg4IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOHpNMjE2IDIyNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTgwIDB6Il0KICAgIH07CiAgICBmYU1vdG9yY3ljbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW90b3JjeWNsZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyNzk0OV0sICJmMjFjIiwgIk0yODAgMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTYuNiAwIDIyLjUgNDguNy05NS4xIDcxLjNjLTMzLjQtMjUuMS03NS00MC0xMjAtNDBsLTU2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTYgMGM3OC41IDAgMTQzLjIgNTkuNiAxNTEuMiAxMzZsLTI1LjQgMGMtMTEuMi01OS4yLTYzLjMtMTA0LTEyNS44LTEwNC03MC43IDAtMTI4IDU3LjMtMTI4IDEyOFM3My4zIDQ4MCAxNDQgNDgwYzYyLjUgMCAxMTQuNS00NC44IDEyNS44LTEwNGw1MC4yIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yMi41YzAtNDUuMSAyNS43LTg1LjQgNjUuNS0xMDcuN2wxMi4xIDI2LjFjLTMyLjQgMjMuMi01My41IDYxLjItNTMuNSAxMDQuMSAwIDcwLjcgNTcuMyAxMjggMTI4IDEyOHMxMjgtNTcuMyAxMjgtMTI4LTU3LjMtMTI4LTEyOC0xMjhjLTEwLjcgMC0yMSAxLjMtMzAuOSAzLjhMNDMzLjggMTYwIDQ4OCAxNjBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNTMuMyAwYy02LjkgMC0xMy43IDIuMi0xOS4yIDYuNGwtMTcuMSAxMi44LTI0LjYtNTMuM0MzNjkuOSAyMS40IDM2MS40IDE2IDM1MiAxNmwtNzIgMHpNNDQ1LjggMzAwLjRsMjguNCA2MS42YzUuNiAxMiAxOS44IDE3LjMgMzEuOCAxMS43czE3LjMtMTkuOCAxMS43LTMxLjhsLTI4LjUtNjEuNmMyLjItLjIgNC40LS4zIDYuNy0uMyAzOS44IDAgNzIgMzIuMiA3MiA3MnMtMzIuMiA3Mi03MiA3Mi03Mi0zMi4yLTcyLTcyYzAtMjAuMiA4LjMtMzguNSAyMS44LTUxLjZ6TTE0NCA0MjRjLTM5LjggMC03Mi0zMi4yLTcyLTcyczMyLjItNzIgNzItNzJjMzEuMyAwIDU4IDIwIDY3LjkgNDhMMTQ0IDMyOGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw2Ny45IDBjLTkuOSAyOC0zNi42IDQ4LTY3LjkgNDh6Il0KICAgIH07CiAgICBmYUJhY2t3YXJkRmFzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWNrd2FyZC1mYXN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTE5OCwgImZhc3QtYmFja3dhcmQiXSwgImYwNDkiLCAiTTQ5Mi4yIDQ3Ny42Yy0xMiA1LTI1LjcgMi4yLTM0LjktNi45TDI4OCAzMDEuMyAyODggNDQ4YzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45TDY0IDMwMS4zIDY0IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ2NS43IDAgNDQ4TDAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJTNjQgNDYuMyA2NCA2NEw2NCAyMTAuNyAyMzMuNCA0MS40YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45UzI4OCA1MS4xIDI4OCA2NGwwIDE0Ni43IDE2OS40LTE2OS40YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45UzUxMiA1MS4xIDUxMiA2NGwwIDM4NGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42eiJdCiAgICB9OwogICAgZmFGYXN0QmFja3dhcmQgPSBmYUJhY2t3YXJkRmFzdDsKICAgIGZhQWRkcmVzc0Jvb2syID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFkZHJlc3MtYm9vayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTM4LCAiY29udGFjdC1ib29rIl0sICJmMmI5IiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI4OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDB6TTIwOCAyODhsNjQgMGM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTZsLTE5MiAwYy04LjggMC0xNi03LjItMTYtMTYgMC00NC4yIDM1LjgtODAgODAtODB6bS0yNC05NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTUxMiA4MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NHptMCAxMjhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjR6TTQ5NiAzMjBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NGMwLTguOC03LjItMTYtMTYtMTZ6Il0KICAgIH07CiAgICBmYUNvbnRhY3RCb29rMiA9IGZhQWRkcmVzc0Jvb2syOwogICAgZmFTYWlsYm9hdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzYWlsYm9hdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNDQ1IiwgIk0yNDAgMzUuOWwwIDM0OC4xLTIyNCAwYy04LjggMC0xNiA3LjItMTYgMTYgMCA2MS45IDUwLjEgMTEyIDExMiAxMTJsMjg4IDBjNjEuOSAwIDExMi01MC4xIDExMi0xMTIgMC04LjgtNy4yLTE2LTE2LTE2bC0yMDggMCAwLTQ4IDE2MS43IDBjMTIuOSAwIDIwLjUtMTQuNCAxMy4yLTI1TDI2OS4yIDI2LjljLTguOS0xMy0yOS4yLTYuNy0yOS4yIDl6TTE5MiAzMjBsMC0xODQuMmMwLTE2LjEtMjEtMjIuMS0yOS42LTguNUw0Ny4zIDMxMS41Yy02LjcgMTAuNyAxIDI0LjUgMTMuNiAyNC41TDE3NiAzMzZjOC44IDAgMTYtNy4yIDE2LTE2eiJdCiAgICB9OwogICAgZmFCb29rQm9va21hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9vay1ib29rbWFyayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMGJiIiwgIk05NiA1MTJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02Ni43YzE4LjYtNi42IDMyLTI0LjQgMzItNDUuM2wwLTI4OGMwLTI2LjUtMjEuNS00OC00OC00OGwtNDggMCAwIDE2OS40YzAgMTIuNS0xMC4xIDIyLjYtMjIuNiAyMi42LTYgMC0xMS44LTIuNC0xNi02LjZMMjcyIDE0NCAyMzAuNiAxODUuNGMtNC4yIDQuMi0xMCA2LjYtMTYgNi42LTEyLjUgMC0yMi42LTEwLjEtMjIuNi0yMi42TDE5MiAwIDk2IDBDNDMgMCAwIDQzIDAgOTZMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NnpNNjQgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI1NiAwIDAgNjQtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFNYWduaWZ5aW5nR2xhc3NBcnJvd1JpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hZ25pZnlpbmctZ2xhc3MtYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUyMSIsICJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NkMyOTYuMyA0MDEuMSAyNTMuOSA0MTYgMjA4IDQxNiA5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMCA0MTYgOTMuMSA0MTYgMjA4ek0zMDUgMjI1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45bC03Mi03MmMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzMSAzMS0xMDIuMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEwMi4xIDAtMzEgMzFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3Mi03MnoiXQogICAgfTsKICAgIGZhTWljcm9waG9uZUxpbmVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pY3JvcGhvbmUtbGluZXMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjc4OTcsICJtaWNyb3Bob25lLWFsdCJdLCAiZjNjOSIsICJNOTYgOTZjMC01MyA0My05NiA5Ni05NiA1MC4zIDAgOTEuNiAzOC43IDk1LjcgODhMMjMyIDg4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDU2IDAgMCA0OC01NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDU1LjcgMGMtNC4xIDQ5LjMtNDUuMyA4OC05NS43IDg4LTUzIDAtOTYtNDMtOTYtOTZMOTYgOTZ6TTI0IDE2MGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwYzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0czE0NC02NC41IDE0NC0xNDRsMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDBjMCA5Ny45LTczLjMgMTc4LjctMTY4IDE5MC41bDAgNDkuNSA0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0OCAwIDAtNDkuNUM3My4zIDQwMi43IDAgMzIxLjkgMCAyMjRsMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTWljcm9waG9uZUFsdCA9IGZhTWljcm9waG9uZUxpbmVzOwogICAgZmFSZXBseUFsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZXBseS1hbGwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsibWFpbC1yZXBseS1hbGwiXSwgImYxMjIiLCAiTTMzMi4yIDE4LjRjMTIgNSAxOS44IDE2LjYgMTkuOCAyOS42bDAgODAgNDggMGM5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NiAwIDExMy4zLTgxLjUgMTYzLjktMTAwLjIgMTc0LjEtMi41IDEuNC01LjMgMS45LTguMSAxLjktMTAuOSAwLTE5LjctOC45LTE5LjctMTkuNyAwLTcuNSA0LjMtMTQuNCA5LjgtMTkuNSA5LjQtOC44IDIyLjItMjYuNCAyMi4yLTU2LjcgMC01My00My05Ni05Ni05NmwtMzIgMCAwIDgwYzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45bC0xNjAtMTYwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2wxNjAtMTYwYzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45ek0yMDUuNiAyMy4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45TDU0LjYgMjA4IDIwNS42IDM1OC45YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMMTAgMjMxLjJjLTYuNC02LTEwLTE0LjQtMTAtMjMuMnMzLjYtMTcuMiAxMC0yMy4yTDE3MS42IDIzLjFjOS40LTkuNCAyNC42LTkuNCAzMy45IDB6Il0KICAgIH07CiAgICBmYU1haWxSZXBseUFsbCA9IGZhUmVwbHlBbGw7CiAgICBmYVVuaXZlcnNhbEFjY2VzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1bml2ZXJzYWwtYWNjZXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyOWEiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE2MS41LTg2LjFjLTEyLjItNS4yLTI2LjMgLjQtMzEuNSAxMi42cy40IDI2LjMgMTIuNiAzMS41bDExLjkgNS4xYzE3LjMgNy40IDM1LjIgMTIuOSA1My42IDE2LjNsMCA1MC4xYzAgNC4zLS43IDguNi0yLjEgMTIuNmwtMjguNyA4Ni4xYy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDI0LjQtNzMuMmMxLjMtMy44IDQuOC02LjQgOC44LTYuNHM3LjYgMi42IDguOCA2LjRsMjQuNCA3My4yYzQuMiAxMi42IDE3LjggMTkuNCAzMC40IDE1LjJTMzM5IDM5NyAzMzQuOCAzODQuNGwtMjguNy04Ni4xYy0xLjQtNC4xLTIuMS04LjMtMi4xLTEyLjZsMC01MC4xYzE4LjQtMy41IDM2LjMtOC45IDUzLjYtMTYuM2wxMS45LTUuMWMxMi4yLTUuMiAxNy44LTE5LjMgMTIuNi0zMS41cy0xOS4zLTE3LjgtMzEuNS0xMi42TDMzOC43IDE3NWMtMjYuMSAxMS4yLTU0LjIgMTctODIuNyAxN3MtNTYuNS01LjgtODIuNy0xN2wtMTEuOS01LjF6TTI1NiAxNjBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdCiAgICB9OwogICAgZmFUb2lsZXRQYXBlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b2lsZXQtcGFwZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MzEsIDYzMjYzLCAidG9pbGV0LXBhcGVyLWFsdCIsICJ0b2lsZXQtcGFwZXItYmxhbmsiXSwgImY3MWUiLCAiTTMyNy4xIDMyYy04LjggMTEuMS0xNiAyMy4xLTIxLjkgMzQuOC0yMS40IDQyLjctMzMuMiA5OC40LTMzLjIgMTU3LjJsMCAyNjRjMCAzMC45LTI1LjEgNTYtNTYgNTZMNTYgNTQ0Yy0zMC45IDAtNTYtMjUuMS01Ni01NkwwIDIyNEMwIDExOCA0MyAzMiA5NiAzMmwyMzEuMSAwek00MTYgNDE2Yy01MyAwLTk2LTg2LTk2LTE5MnM0My0xOTIgOTYtMTkyIDk2IDg2IDk2IDE5Mi00MyAxOTItOTYgMTkyem0wLTEyOGMxNy43IDAgMzItMjguNyAzMi02NHMtMTQuMy02NC0zMi02NC0zMiAyOC43LTMyIDY0IDE0LjMgNjQgMzIgNjR6Il0KICAgIH07CiAgICBmYVRvaWxldFBhcGVyQWx0ID0gZmFUb2lsZXRQYXBlcjsKICAgIGZhVG9pbGV0UGFwZXJCbGFuayA9IGZhVG9pbGV0UGFwZXI7CiAgICBmYVZyQ2FyZGJvYXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZyLWNhcmRib2FyZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNzI5IiwgIk01MTIgOTZMNjQgOTZDMjguNyA5NiAwIDEyNC43IDAgMTYwTDAgMzUyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDExNy41IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdsMzMuOS0zMy45YzcuMi03LjIgMTcuMS0xMS4zIDI3LjMtMTEuM3MyMC4xIDQuMSAyNy4zIDExLjNsMzMuOSAzMy45YzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdMNTEyIDQxNmMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MmMwLTM1LjMtMjguNy02NC02NC02NHpNODAgMjQwYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHptMzUyLTY0YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdCiAgICB9OwogICAgZmFQaXp6YVNsaWNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBpenphLXNsaWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4MTgiLCAiTTE2OS43IC45Yy0yMi44LTEuNi00MS45IDE0LTQ3LjUgMzQuN0wxMTIuNSA3MkMyOTMuMyA3Mi4zIDQzOS43IDIxOC43IDQ0MCAzOTkuNWwzNi40LTkuN2MyMC44LTUuNSAzNi4zLTI0LjcgMzQuNy00Ny41LTEyLjYtMTgyLjgtMTU4LjYtMzI4LjgtMzQxLjQtMzQxLjR6bTIyMiA0MTEuNWMuMi00LjEgLjMtOC4yIC4zLTEyLjQgMC0xNTQuNi0xMjUuNC0yODAtMjgwLTI4MC00LjEgMC04LjMgLjEtMTIuNCAuM0wuNSA0OTEuOWMtMS41IDUuNSAuMSAxMS40IDQuMSAxNS40czkuOSA1LjYgMTUuNCA0LjFsMzcxLjYtOTkuMXpNMTc2IDIwOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTY0IDEyOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek05NiAzODRhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhU3ByYXlDYW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3ByYXktY2FuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1YmQiLCAiTTE5MiAwbDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA4MC0xMjggMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek02NCAyNTZjMC01MyA0My05NiA5Ni05NmwxMjggMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjA4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0yMjQgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0yMDh6bTI0MCA4MGE4MCA4MCAwIDEgMCAtMTYwIDAgODAgODAgMCAxIDAgMTYwIDB6TTMyMCA2NGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek00NDggMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0zMiA2NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTUxMiAyNTZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNNDQ4IDEyOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVZvbHVtZUxvdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2b2x1bWUtbG93IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MjY0LCAidm9sdW1lLWRvd24iXSwgImYwMjciLCAiTTQ4IDM1Mmw0OCAwIDEzNC4xIDExOS4yYzYuNCA1LjcgMTQuNiA4LjggMjMuMSA4LjggMTkuMiAwIDM0LjgtMTUuNiAzNC44LTM0LjhsMC0zNzguNGMwLTE5LjItMTUuNi0zNC44LTM0LjgtMzQuOC04LjUgMC0xNi43IDMuMS0yMy4xIDguOEw5NiAxNjAgNDggMTYwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4ek0zODAuNiAxODEuNWMtMTAuMy04LjQtMjUuNC02LjgtMzMuOCAzLjVzLTYuOCAyNS40IDMuNSAzMy44QzM2MS4xIDIyNy42IDM2OCAyNDEgMzY4IDI1NnMtNi45IDI4LjQtMTcuNyAzNy4zYy0xMC4zIDguNC0xMS44IDIzLjUtMy41IDMzLjhzMjMuNSAxMS44IDMzLjggMy41QzQwMi4xIDMxMi45IDQxNiAyODYuMSA0MTYgMjU2cy0xMy45LTU2LjktMzUuNS03NC41eiJdCiAgICB9OwogICAgZmFWb2x1bWVEb3duID0gZmFWb2x1bWVMb3c7CiAgICBmYUNyb3NzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNyb3NzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MzI3LCAxMDAxM10sICJmNjU0IiwgIk0xNzYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA4MC04MCAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDgwIDAgMCAyMDhjMCAyNi41IDIxLjUgNDggNDggNDhsMzIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIwOCA4MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzJjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTgwIDAgMC04MGMwLTI2LjUtMjEuNS00OC00OC00OEwxNzYgMHoiXQogICAgfTsKICAgIGZhUGVyc29uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyOTQ4NSwgIm1hbGUiXSwgImYxODMiLCAiTTI0OCAyNGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6bTI0IDIxMi43bDQ2LjMgNjIuNGMxMC41IDE0LjIgMzAuNiAxNy4yIDQ0LjggNi42czE3LjItMzAuNiA2LjYtNDQuOGwtNzAuNS05NUMyNzQgMTMyIDIzNC4zIDExMiAxOTIgMTEycy04MiAyMC0xMDcuMiA1My45bC03MC41IDk1Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZMMTEyIDIzNi43IDExMiA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNzUuM3oiXQogICAgfTsKICAgIGZhTWFsZSA9IGZhUGVyc29uOwogICAgZmFIb3VyZ2xhc3MzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXJnbGFzcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzkyMDMsIDYyMDMyLCAiaG91cmdsYXNzLWVtcHR5Il0sICJmMjU0IiwgIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEwzNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDExYzAgNDIuNC0xNi45IDgzLjEtNDYuOSAxMTMuMWwtNjcuOSA2Ny45IDY3LjkgNjcuOWMzMCAzMCA0Ni45IDcwLjcgNDYuOSAxMTMuMWwwIDExYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwwLTExYzAtNDIuNCAxNi45LTgzLjEgNDYuOS0xMTMuMWw2Ny45LTY3LjktNjcuOS02Ny45QzQ4LjkgMTU4LjEgMzIgMTE3LjQgMzIgNzVsMC0xMUMxNC4zIDY0IDAgNDkuNyAwIDMyek05NiA2NGwwIDExYzAgMjUuNSAxMC4xIDQ5LjkgMjguMSA2Ny45bDY3LjkgNjcuOSA2Ny45LTY3LjljMTgtMTggMjguMS00Mi40IDI4LjEtNjcuOWwwLTExLTE5MiAwem0wIDM4NGwxOTIgMCAwLTExYzAtMjUuNS0xMC4xLTQ5LjktMjguMS02Ny45bC02Ny45LTY3LjktNjcuOSA2Ny45Yy0xOCAxOC0yOC4xIDQyLjQtMjguMSA2Ny45bDAgMTF6Il0KICAgIH07CiAgICBmYUhvdXJnbGFzc0VtcHR5MiA9IGZhSG91cmdsYXNzMzsKICAgIGZhRmlzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDMxXSwgImY1NzgiLCAiTTE4MC41IDE0MS41QzIxOS43IDEwOC41IDI3Mi42IDgwIDMzNiA4MHMxMTYuMyAyOC41IDE1NS41IDYxLjVjMzkuMSAzMyA2Ni45IDcyLjQgODEgOTkuOCA0LjcgOS4yIDQuNyAyMC4xIDAgMjkuMy0xNC4xIDI3LjQtNDEuOSA2Ni44LTgxIDk5LjgtMzkuMiAzMy4xLTkyIDYxLjUtMTU1LjUgNjEuNXMtMTE2LjMtMjguNS0xNTUuNS02MS41Yy0xNi4yLTEzLjctMzAuNS0yOC41LTQyLjctNDMuMUw0OC4xIDM3OS42Yy0xMi41IDcuMy0yOC40IDUuMy0zOC43LTQuOXMtMTIuNC0yNi01LjMtMzguNkw1MCAyNTYgNC4yIDE3NS45Yy03LjItMTIuNi01LTI4LjQgNS4zLTM4LjZzMjYuMS0xMi4yIDM4LjctNC45bDg5LjcgNTIuM2MxMi4yLTE0LjYgMjYuNS0yOS40IDQyLjctNDMuMXpNNDQ4IDI1NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdCiAgICB9OwogICAgZmFEcnVtc3RpY2tCaXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRydW1zdGljay1iaXRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2ZDciLCAiTTE2MCAyNjUuMmMwIDguNS0zLjQgMTYuNi05LjQgMjIuNmwtMjYuOCAyNi44Yy0xMi4zIDEyLjMtMzIuNSAxMS40LTQ5LjQgNy4yLTQuNi0xLjEtOS41LTEuOC0xNC41LTEuOC0zMy4xIDAtNjAgMjYuOS02MCA2MHMyNi45IDYwIDYwIDYwYzYuMyAwIDEyIDUuNyAxMiAxMiAwIDMzLjEgMjYuOSA2MCA2MCA2MHM2MC0yNi45IDYwLTYwYzAtNS0uNi05LjgtMS44LTE0LjUtNC4yLTE2LjktNS4yLTM3LjEgNy4yLTQ5LjRsMjYuOC0yNi44YzYtNiAxNC4xLTkuNCAyMi42LTkuNGw4OS4yIDBjNi4zIDAgMTIuNC0uMyAxOC41LTEgMTEuOS0xLjIgMTYuNC0xNS41IDEwLjgtMjYtOC41LTE1LjgtMTMuMy0zMy44LTEzLjMtNTMgMC02MS45IDUwLjEtMTEyIDExMi0xMTIgOCAwIDE1LjcgLjggMjMuMiAyLjQgMTEuNyAyLjUgMjQuMS01LjkgMjItMTcuNi0xNC43LTgyLjMtODYuNy0xNDQuOC0xNzMuMi0xNDQuOC05Ny4yIDAtMTc2IDc4LjgtMTc2IDE3NmwwIDg5LjJ6Il0KICAgIH07CiAgICBmYUNoYXJ0U2ltcGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYXJ0LXNpbXBsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNDczIiwgIk0xOTIgODBjMC0yNi41IDIxLjUtNDggNDgtNDhsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0zNTJ6TTAgMjcyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNjBjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMjcyek00MzIgOTZsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDI4OGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0yODhjMC0yNi41IDIxLjUtNDggNDgtNDh6Il0KICAgIH07CiAgICBmYUF0b20gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXRvbSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4ODNdLCAiZjVkMiIsICJNMjI0IDM5OC44Yy0xMS44IDUuMS0yMy40IDkuNy0zNC45IDEzLjUgMTYuNyAzMy44IDMxIDM1LjcgMzQuOSAzNS43czE4LjEtMS45IDM0LjktMzUuN2MtMTEuNC0zLjktMjMuMS04LjQtMzQuOS0xMy41ek00MTQgMjU2YzMzIDQ1LjIgNDQuMyA5MC45IDIzLjYgMTI4LTIwLjIgMzYuMy02Mi41IDQ5LjMtMTE1LjIgNDMuMi0yMiA1Mi4xLTU1LjcgODQuOC05OC40IDg0LjhzLTc2LjQtMzIuNy05OC40LTg0LjhDNzIuOSA0MzMuMyAzMC42IDQyMC4zIDEwLjQgMzg0LTEwLjMgMzQ2LjkgMSAzMDEuMiAzNCAyNTYgMSAyMTAuOC0xMC4zIDE2NS4xIDEwLjQgMTI4IDMwLjYgOTEuNyA3Mi45IDc4LjcgMTI1LjYgODQuOCAxNDcuNiAzMi43IDE4MS4yIDAgMjI0IDBzNzYuNCAzMi43IDk4LjQgODQuOGM1Mi43LTYuMSA5NSA2LjggMTE1LjIgNDMuMiAyMC43IDM3LjEgOS40IDgyLjgtMjMuNiAxMjh6bS02NS44IDY3LjRjLTEuNyAxNC4yLTMuOSAyOC02LjcgNDEuMiAzMS44IDEuNCAzOC42LTguNyA0MC4yLTExLjcgMi4zLTQuMiA3LTE3LjktMTEuOS00OC4xLTYuOCA2LjMtMTQgMTIuNS0yMS42IDE4LjZ6bS02LjctMTc1LjljMi44IDEzLjEgNSAyNi45IDYuNyA0MS4yIDcuNiA2LjEgMTQuOCAxMi4zIDIxLjYgMTguNiAxOC45LTMwLjIgMTQuMi00NCAxMS45LTQ4LjEtMS42LTIuOS04LjQtMTMtNDAuMi0xMS43ek0yNTguOSA5OS43QzI0Mi4xIDY1LjkgMjI3LjkgNjQgMjI0IDY0cy0xOC4xIDEuOS0zNC45IDM1LjdjMTEuNCAzLjkgMjMuMSA4LjQgMzQuOSAxMy41IDExLjgtNS4xIDIzLjQtOS43IDM0LjktMTMuNXptLTE1OSA4OC45YzEuNy0xNC4zIDMuOS0yOCA2LjctNDEuMi0zMS44LTEuNC0zOC42IDguNy00MC4yIDExLjctMi4zIDQuMi03IDE3LjkgMTEuOSA0OC4xIDYuOC02LjMgMTQtMTIuNSAyMS42LTE4LjZ6TTc4LjIgMzA0LjhjLTE4LjkgMzAuMi0xNC4yIDQ0LTExLjkgNDguMSAxLjYgMi45IDguNCAxMyA0MC4yIDExLjctMi44LTEzLjEtNS0yNi45LTYuNy00MS4yLTcuNi02LjEtMTQuOC0xMi4zLTIxLjYtMTguNnpNMzA0IDI1NmE4MCA4MCAwIDEgMCAtMTYwIDAgODAgODAgMCAxIDAgMTYwIDB6bS04MC0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzExMl0sICI1MCIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwxMjggMGM4OC40IDAgMTYwIDcxLjYgMTYwIDE2MFMyNDguNCAzNTIgMTYwIDM1MmwtOTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NHpNNjQgMjg4bDk2IDBjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZsLTk2IDAgMCAxOTJ6Il0KICAgIH07CiAgICBmYUpldEZpZ2h0ZXJVcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJqZXQtZmlnaHRlci11cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTE4IiwgIk0yMDYuOCA0Ny44QzIwMi4zIDU4LjUgMjAwIDcwIDIwMCA4MS42bDAgMTAwLjQtMTUyIDExNCAwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMjM0LjcgMCAyNDhMMCAzOTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTggMTUyIDAgMCA1NC40LTY2IDUyLjhjLTMuOCAzLTYgNy42LTYgMTIuNWwwIDI0LjNjMCA4LjggNy4yIDE2IDE2IDE2bDg4IDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgODggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNC4zYzAtNC45LTIuMi05LjUtNi0xMi41bC02Ni01Mi44IDAtNTQuNCAxNTIgMCAwIDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE0NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQ4LTE1Mi0xMTQgMC0xMDAuNGMwLTExLjYtMi4zLTIzLjEtNi44LTMzLjhsLTI3LjEtNjVDMjc0LjQtMjYuMiAyNjUuNy0zMiAyNTYtMzJzLTE4LjQgNS44LTIyLjIgMTQuOGwtMjcuMSA2NXoiXQogICAgfTsKICAgIGZhUGx1Z0NpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsdWctY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NjAiLCAiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNDk2IDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTU5LjMgMTA3LjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMGwtMzYuNyAzNi43LTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmwzNi43IDM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzYuNy0zNi43IDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTM2LjctMzYuNyAzNi43LTM2Ljd6Il0KICAgIH07CiAgICBmYVNoZWV0UGxhc3RpYyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGVldC1wbGFzdGljIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU1NzEiLCAiTTAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE0OS41IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdMMzY1LjMgMzg2LjdjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0wzODQgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDh6bTIwOCA1LjVsMC05My41YzAtMTMuMyAxMC43LTI0IDI0LTI0bDkzLjUgMC0xMTcuNSAxMTcuNXpNMTUzIDEwNWwtNDggNDhjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNDgtNDhjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45em05NiAzMkwxMzcgMjQ5Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDIxNSAxMDNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45eiJdCiAgICB9OwogICAgZmFWID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInYiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMThdLCAiNTYiLCAiTTE5LjcgMzQuNWMxNi4zLTYuOCAzNSAuOSA0MS44IDE3LjJMMTkyIDM2NC44IDMyMi41IDUxLjdjNi44LTE2LjMgMjUuNS0yNCA0MS44LTE3LjJzMjQgMjUuNSAxNy4yIDQxLjhsLTE2MCAzODRjLTUgMTEuOS0xNi42IDE5LjctMjkuNSAxOS43cy0yNC42LTcuOC0yOS41LTE5LjdMMi41IDc2LjNjLTYuOC0xNi4zIC45LTM1IDE3LjItNDEuOHoiXQogICAgfTsKICAgIGZhTGlzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaXN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxpc3Qtc3F1YXJlcyJdLCAiZjAzYSIsICJNNDAgNDhDMjYuNyA0OCAxNiA1OC43IDE2IDcybDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0TDQwIDQ4ek0xOTIgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMTkyIDY0em0wIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjg4IDB6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yODggMHpNMTYgMjMybDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNNDAgMzY4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNDggMHoiXQogICAgfTsKICAgIGZhTGlzdFNxdWFyZXMgPSBmYUxpc3Q7CiAgICBmYVNvbGFyUGFuZWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic29sYXItcGFuZWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjViYSIsICJNMTIxLjggMzJjLTMwIDAtNTYgMjAuOC02Mi41IDUwLjFMOS42IDMwNi4xQy43IDM0Ni4xIDMxLjEgMzg0IDcyIDM4NGwxODQuMSAwIDAgNjQtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTY0IDE4NC4xIDBjNDAuOSAwIDcxLjQtMzcuOSA2Mi41LTc3LjlsLTQ5LjgtMjI0QzUxMC40IDUyLjggNDg0LjUgMzIgNDU0LjUgMzJMMTIxLjggMzJ6TTI0NS42IDk2bDg1LjIgMCA3LjMgODgtOTkuOCAwIDcuMy04OHptLTU1LjUgODhsLTg3LjggMCAxOS42LTg4IDc1LjYgMC03LjMgODh6TTkxLjYgMjMybDk0LjUgMC03LjMgODgtMTA2LjcgMCAxOS42LTg4em0xNDIuNiAwbDEwNy44IDAgNy4zIDg4LTEyMi41IDAgNy4zLTg4em0xNTYgMGw5NC41IDAgMTkuNiA4OC0xMDYuNyAwLTcuMy04OHpNNDc0IDE4NGwtODcuOCAwLTcuMy04OCA3NS42IDAgMTkuNiA4OHoiXQogICAgfTsKICAgIGZhTGFuZE1pbmVPbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYW5kLW1pbmUtb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUxYiIsICJNMzEyIDBsMCAxMjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRMMjY0IDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpNMTYwIDI4OGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OEw4MCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDhsODAgMCAwLTMyek0xMiAxMTQuN2M3LjQtMTEgMjIuMy0xNCAzMy4zLTYuN2w5NiA2NGMxMSA3LjQgMTQgMjIuMyA2LjcgMzMuM3MtMjIuMyAxNC0zMy4zIDYuN2wtOTYtNjRjLTExLTcuNC0xNC0yMi4zLTYuNy0zMy4zek01MzAuNyAxMDhjMTEtNy40IDI1LjktNC40IDMzLjMgNi43czQuNCAyNS45LTYuNyAzMy4zbC05NiA2NGMtMTEgNy40LTI1LjkgNC40LTMzLjMtNi43cy00LjQtMjUuOSA2LjctMzMuM2w5Ni02NHoiXQogICAgfTsKICAgIGZhSGVhZHBob25lczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhZHBob25lcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzkxMSwgNjI4NjMsICJoZWFkcGhvbmVzLWFsdCIsICJoZWFkcGhvbmVzLXNpbXBsZSJdLCAiZjAyNSIsICJNNjQgMjI0YzAtODguNCA3MS42LTE2MCAxNjAtMTYwczE2MCA3MS42IDE2MCAxNjBsMCAzNy41Yy0xMC0zLjUtMjAuOC01LjUtMzItNS41bC0xNiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDEyOGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxNiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0xNjBDNDQ4IDEwMC4zIDM0Ny43IDAgMjI0IDBTMCAxMDAuMyAwIDIyNEwwIDM4NGMwIDUzIDQzIDk2IDk2IDk2bDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xMjhjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTE2IDBjLTExLjIgMC0yMiAxLjktMzIgNS41TDY0IDIyNHoiXQogICAgfTsKICAgIGZhSGVhZHBob25lc0FsdDIgPSBmYUhlYWRwaG9uZXMyOwogICAgZmFIZWFkcGhvbmVzU2ltcGxlMiA9IGZhSGVhZHBob25lczI7CiAgICBmYUJ1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjg2NTNdLCAiZjIwNyIsICJNOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDM4NGMwIDI5LjggMjAuNCA1NC45IDQ4IDYybDAgMzRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyIDE5MiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTM0YzI3LjYtNy4xIDQ4LTMyLjIgNDgtNjJsMC0yODhjMC01My00My05Ni05Ni05Nkw5NiAwek02NCAxNzZjMC0xNy43IDE0LjMtMzIgMzItMzJsMTA0IDAgMCAxMTItMTA0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNDh6bTE4NCA4MGwwLTExMiAxMDQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMDQgMHpNOTYgMzIwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMjU2IDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0xNTIgNzJjMC0xMy4zIDEwLjctMjQgMjQtMjRsOTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYUZpbGVQb3dlcnBvaW50MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXBvd2VycG9pbnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFjNCIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTE1MiAyNTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTQ0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNCAyNCAwYzM5LjggMCA3Mi0zMi4yIDcyLTcycy0zMi4yLTcyLTcyLTcybC00OCAwem00OCA5NmwtMjQgMCAwLTQ4IDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6Il0KICAgIH07CiAgICBmYVF1b3RlTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJxdW90ZS1sZWZ0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbODIyMCwgInF1b3RlLWxlZnQtYWx0Il0sICJmMTBkIiwgIk0wIDIxNkMwIDE0OS43IDUzLjcgOTYgMTIwIDk2bDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDggNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIxNnptMjU2IDBjMC02Ni4zIDUzLjctMTIwIDEyMC0xMjBsOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04IDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgOCA2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTM2eiJdCiAgICB9OwogICAgZmFRdW90ZUxlZnRBbHQgPSBmYVF1b3RlTGVmdDsKICAgIGZhQ2hldnJvbkRvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hldnJvbi1kb3duIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwNzgiLCAiTTIwMS40IDQwNi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE5Mi0xOTJjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjI0IDMzOC43IDU0LjYgMTY5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE5MiAxOTJ6Il0KICAgIH07CiAgICBmYUVhcnRoQXNpYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlYXJ0aC1hc2lhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzU5LCAiZ2xvYmUtYXNpYSJdLCAiZjU3ZSIsICJNNTAgMjg0LjhjNC4yIDIuMSA5IDMuMiAxNCAzLjJsNTAuNyAwYzguNSAwIDE2LjYgMy40IDIyLjYgOS40bDEzLjMgMTMuM2M2IDYgMTQuMSA5LjQgMjIuNiA5LjRsMTguNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQtMTAuNyAyNC0yNGwwLTQyLjdjMC04LjUgMy40LTE2LjYgOS40LTIyLjZsMTMuMy0xMy4zYzYtNiA5LjQtMTQuMSA5LjQtMjIuNkwzMDQgNTdjMC0xLjItLjEtMi4zLS4yLTMuNS0xNS40LTMuNi0zMS40LTUuNS00Ny44LTUuNS0xMTQuOSAwLTIwOCA5My4xLTIwOCAyMDggMCA5LjggLjcgMTkuNCAyIDI4Ljh6bTQwMy4zIDM3LjNjLTMuMi0xLjQtNi43LTIuMS0xMC41LTIuMUw0MzIgMzIwYy04LjggMC0xNi03LjItMTYtMTZzLTcuMi0xNi0xNi0xNmwtMzQuNyAwYy04LjUgMC0xNi42IDMuNC0yMi42IDkuNGwtNDUuMyA0NS4zYy02IDYtOS40IDE0LjEtOS40IDIyLjZsMCAxOC43YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE4LjcgMGM4LjUgMCAxNi42IDMuNCAyMi42IDkuNCAyLjIgMi4yIDQuNyA0LjEgNy4zIDUuNSAzOS4zLTI1LjQgNjkuNS02My42IDg0LjYtMTA4Ljh6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTEyOCAzNjhjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMjcyIDI1NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNnptNDgtMTEybDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2eiJdCiAgICB9OwogICAgZmFHbG9iZUFzaWEgPSBmYUVhcnRoQXNpYTsKICAgIGZhQ2VudFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2VudC1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUzZjUiLCAiTTIwOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjUuNGM0My42IDUuMiA4MyAyNC41IDExMy4zIDUzLjEgMTIuOSAxMi4xIDEzLjQgMzIuNCAxLjMgNDUuMnMtMzIuNCAxMy40LTQ1LjIgMS4zYy0yNC40LTIzLTU3LjItMzcuMS05My4zLTM3LjEtNzUuMSAwLTEzNiA2MC45LTEzNiAxMzZzNjAuOSAxMzYgMTM2IDEzNmMzNi4yIDAgNjktMTQuMSA5My4zLTM3LjEgMTIuOS0xMi4xIDMzLjEtMTEuNSA0NS4yIDEuM3MxMS41IDMzLjEtMS4zIDQ1LjJDMzIzIDQzMC4xIDI4My42IDQ0OS40IDI0MCA0NTQuNmwwIDI1LjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yOEM4NC43IDQzMy41IDE2IDM1Mi44IDE2IDI1NlM4NC43IDc4LjUgMTc2IDYwbDAtMjhjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVNoaWVsZENhdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGllbGQtY2F0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NzIiLCAiTTI2OS40IDIuOUMyNjUuMiAxIDI2MC43IDAgMjU2IDBzLTkuMiAxLTEzLjQgMi45TDU0LjMgODIuOGMtMjIgOS4zLTM4LjQgMzEtMzguMyA1Ny4yIC41IDk5LjIgNDEuMyAyODAuNyAyMTMuNiAzNjMuMiAxNi43IDggMzYuMSA4IDUyLjggMCAxNzIuNC04Mi41IDIxMy4yLTI2NCAyMTMuNi0zNjMuMiAuMS0yNi4yLTE2LjMtNDcuOS0zOC4zLTU3LjJMMjY5LjQgMi45ek0xNjAgMTU0LjRjMC01LjggNC43LTEwLjQgMTAuNC0xMC40bC4yIDBjMy40IDAgNi41IDEuNiA4LjUgNC4zbDQwIDUzLjNjMyA0IDcuOCA2LjQgMTIuOCA2LjRsNDggMGM1IDAgOS44LTIuNCAxMi44LTYuNGw0MC01My4zYzItMi43IDUuMi00LjMgOC41LTQuM2wuMiAwYzUuOCAwIDEwLjQgNC43IDEwLjQgMTAuNEwzNTIgMjcyYzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2bDAtMTE3LjZ6TTIxNiAyODhhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyem05Ni0xNmExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAweiJdCiAgICB9OwogICAgZmFTY2hvb2xDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2hvb2wtY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NmIiLCAiTTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjc2IDBjLTEwLjUtMTQuNi0xOS0zMC43LTI1LjEtNDhsLTkwLjkgMCAwLTg4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMSAwIDEuOSAwIDIuOSAuMSAyNi4zLTc0LjYgOTcuNS0xMjguMSAxODEuMS0xMjguMSAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTMzLjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDAtMTI3LjktMTE1LjFjLTE4LjMtMTYuNC00Ni0xNi40LTY0LjIgMEwxMjggMTI4IDY0IDEyOHptNjQgMjQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJ6TTExMiAyNTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNnpNMjg4IDEyOGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNNjQwIDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il0KICAgIH07CiAgICBmYU1hcnRpbmlHbGFzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXJ0aW5pLWdsYXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3ODY0LCAiZ2xhc3MtbWFydGluaS1hbHQiXSwgImY1N2IiLCAiTTIuNCA1MS44QzcuNCAzOS44IDE5LjEgMzIgMzIgMzJsNDQ4IDBjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOUwyODggMzAxLjMgMjg4IDQ0OCAzNTIgNDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2NCAwIDAtMTQ2LjctMjE0LjYtMjE0LjZDLjIgNzcuNS0yLjUgNjMuNyAyLjQgNTEuOHpNMzU0LjcgMTQ0bDQ4LTQ4LTI5My41IDAgNDggNDggMTk3LjUgMHoiXQogICAgfTsKICAgIGZhR2xhc3NNYXJ0aW5pQWx0ID0gZmFNYXJ0aW5pR2xhc3M7CiAgICBmYVBsdWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1ZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODI2OF0sICJmMWU2IiwgIk0xMjgtMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiAxMjggMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNjRjMCA5NS4xLTY5LjIgMTc0LjEtMTYwIDE4OS4zbDAgNjYuN2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY2LjdDMTAxLjIgMzk4LjEgMzIgMzE5LjEgMzIgMjI0bDAtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzE0LjMgOTYgMzIgOTZsNjQgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFQYW5vcmFtYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYW5vcmFtYSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMjA5IiwgIk00My45IDQ4QzE5LjcgNDggMCA2Ny43IDAgOTEuOUwwIDQyMC4xYzAgMjQuMyAxOS43IDQzLjkgNDMuOSA0My45IDUuNSAwIDEwLjctMSAxNS43LTIuOSAxMi45LTQuOSAxMDMuNC0zNy4xIDIyOC40LTM3LjFzMjE1LjUgMzIuMyAyMjguNCAzNy4xYzUgMS45IDEwLjIgMi45IDE1LjcgMi45IDI0LjMgMCA0My45LTE5LjcgNDMuOS00My45bDAtMzI4LjJjMC0yNC4zLTE5LjctNDMuOS00My45LTQzLjktNS41IDAtMTAuNyAxLTE1LjcgMi45LTEyLjkgNC45LTEwMy40IDM3LjEtMjI4LjQgMzcuMVM3Mi41IDU1LjcgNTkuNiA1MC45QzU0LjYgNDkgNDkuNCA0OCA0My45IDQ4ek03MiAxNzZhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHptMjY0LjEtMTZjNy41IDAgMTQuNiAzLjYgMTkuMSA5LjZMNDc5LjcgMzM2LjJjNS45IDcuOSA2LjQgMTguNSAxLjMgMjYuOXMtMTQuOCAxMi44LTI0LjUgMTEuMWMtNDUuOC03LjgtMTAzLjMtMTQuMi0xNjguNC0xNC4yLTY1LjYgMC0xMjMuNCA2LjUtMTY5LjMgMTQuNC05LjggMS43LTE5LjctMi45LTI0LjctMTEuNXMtNC4zLTE5LjQgMS45LTI3LjJMMTY1LjMgMjQ5YzQuNi01LjcgMTEuNS05IDE4LjctOXMxNC4yIDMuMyAxOC43IDlsMjcuNSAzNC40IDg2LjctMTEzLjljNC42LTYgMTEuNy05LjUgMTkuMi05LjV6Il0KICAgIH07CiAgICBmYUNsb2NrUm90YXRlTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG9jay1yb3RhdGUtbGVmdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJoaXN0b3J5Il0sICJmMWRhIiwgIk0yODggNjRjMTA2IDAgMTkyIDg2IDE5MiAxOTJTMzk0IDQ0OCAyODggNDQ4Yy02NS4yIDAtMTIyLjktMzIuNS0xNTcuNi04Mi4zLTEwLjEtMTQuNS0zMC4xLTE4LTQ0LjYtNy45cy0xOCAzMC4xLTcuOSA0NC42QzEyNC4xIDQ2OC42IDIwMSA1MTIgMjg4IDUxMiA0MjkuNCA1MTIgNTQ0IDM5Ny40IDU0NCAyNTZTNDI5LjQgMCAyODggMEMyMDIuMyAwIDEyNi41IDQyLjEgODAgMTA2LjdMODAgODBjMC0xNy43LTE0LjMtMzItMzItMzJTMTYgNjIuMyAxNiA4MGwwIDExMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNC42IDBjLjUgMCAxIDAgMS41IDBsODYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzguMyAwQzE1NC45IDEwMi42IDIxNyA2NCAyODggNjR6bTI0IDg4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTA0YzAgNi40IDIuNSAxMi41IDcgMTdsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02NS02NSAwLTk0LjF6Il0KICAgIH07CiAgICBmYUhpc3RvcnkgPSBmYUNsb2NrUm90YXRlTGVmdDsKICAgIGZhSmFyV2hlYXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiamFyLXdoZWF0IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImU1MTciLCAiTTMyLThjMC0xMy4zIDEwLjctMjQgMjQtMjRsMjA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMNTYgMTZDNDIuNyAxNiAzMiA1LjMgMzItOHpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptMTEyIDMybC00Mi4yIDBjLTMuMiAwLTUuOCAyLjYtNS44IDUuOCAwIDMyLjEgMjYgNTguMiA1OC4yIDU4LjJsNzUuNiAwYzMyLjEgMCA1OC4yLTI2IDU4LjItNTguMiAwLTMuMi0yLjYtNS44LTUuOC01LjhMMjA4IDE2MGMtMTkuMSAwLTM2LjMgOC40LTQ4IDIxLjctMTEuNy0xMy4zLTI4LjktMjEuNy00OC0yMS43em00OCAxMTcuN2MtMTEuNy0xMy4zLTI4LjktMjEuNy00OC0yMS43bC00Mi4yIDBjLTMuMiAwLTUuOCAyLjYtNS44IDUuOCAwIDMyLjEgMjYgNTguMiA1OC4yIDU4LjJsNzUuNiAwYzMyLjEgMCA1OC4yLTI2IDU4LjItNTguMiAwLTMuMi0yLjYtNS44LTUuOC01LjhMMjA4IDI1NmMtMTkuMSAwLTM2LjMgOC40LTQ4IDIxLjd6TTExMiAzNTJsLTQyLjIgMGMtMy4yIDAtNS44IDIuNi01LjggNS44IDAgMzIuMSAyNiA1OC4yIDU4LjIgNTguMmwyMS44IDAgMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMzIgMjEuOCAwYzMyLjEgMCA1OC4yLTI2IDU4LjItNTguMiAwLTMuMi0yLjYtNS44LTUuOC01LjhMMjA4IDM1MmMtMTkuMSAwLTM2LjMgOC40LTQ4IDIxLjctMTEuNy0xMy4zLTI4LjktMjEuNy00OC0yMS43eiJdCiAgICB9OwogICAgZmFDbG91ZEFycm93RG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1hcnJvdy1kb3duIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjIzMzcsICJjbG91ZC1kb3dubG9hZCIsICJjbG91ZC1kb3dubG9hZC1hbHQiXSwgImYwZWQiLCAiTTE0NCA0ODBjLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0IDAtNjMuNCA0MS0xMTcuMiA5Ny45LTEzNi41LTEuMy03LjctMS45LTE1LjUtMS45LTIzLjUgMC03OS41IDY0LjUtMTQ0IDE0NC0xNDQgNTUuNCAwIDEwMy41IDMxLjMgMTI3LjYgNzcuMSAxNC4yLTguMyAzMC44LTEzLjEgNDguNC0xMy4xIDUzIDAgOTYgNDMgOTYgOTYgMCAxNS43LTMuOCAzMC42LTEwLjUgNDMuNyA0NCAyMC4zIDc0LjUgNjQuNyA3NC41IDExNi4zIDAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0zMDQgMHpNMzc3IDMxM2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0zMSAzMSAwLTEwMi4xYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTAyLjEtMzEtMzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNzItNzJ6Il0KICAgIH07CiAgICBmYUNsb3VkRG93bmxvYWQgPSBmYUNsb3VkQXJyb3dEb3duOwogICAgZmFDbG91ZERvd25sb2FkQWx0ID0gZmFDbG91ZEFycm93RG93bjsKICAgIGZhVHJ1Y2tSYW1wQm94ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLXJhbXAtYm94IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInRydWNrLWxvYWRpbmciXSwgImY0ZGUiLCAiTTQwMCAzMmMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyNDguMi0yOTcuMiA4OS4yQzUuOSA0NTQuNC0zLjcgNDcyLjMgMS40IDQ4OS4yczIyLjkgMjYuNSAzOS44IDIxLjVsMzE1LjUtOTQuNiA0My43IDBjLS4yIDIuNi0uNCA1LjMtLjQgOCAwIDQ4LjYgMzkuNCA4OCA4OCA4OHM4OC0zOS40IDg4LTg4bDAtMzkyLTE3NiAwek01MjggNDI0YzAgMjIuMS0xNy45IDQwLTQwIDQwcy00MC0xNy45LTQwLTQwIDE3LjktNDAgNDAtNDBjMjIuMSAwIDM5LjkgMTcuOSA0MCAzOS45bDAgLjF6TTUxLjkgMTQ5LjVDMTguMSAxNTkuOC0uOSAxOTUuNiA5LjQgMjI5LjRsMjguMSA5MS44QzQ3LjggMzU1IDgzLjYgMzc0IDExNy40IDM2My43bDkxLjgtMjguMWMzMy44LTEwLjMgNTIuOC00Ni4xIDQyLjUtNzkuOWwtMjguMS05MS44Yy0xMC4zLTMzLjgtNDYuMS01Mi44LTc5LjktNDIuNUw1MS45IDE0OS41eiJdCiAgICB9OwogICAgZmFUcnVja0xvYWRpbmcgPSBmYVRydWNrUmFtcEJveDsKICAgIGZhQW5nbGVEb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlLWRvd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4OTY0XSwgImYxMDciLCAiTTE2OS40IDM3NC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMTkyIDMwNi43IDU0LjYgMTY5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjB6Il0KICAgIH07CiAgICBmYVBsdWdDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVnLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTVjIiwgIk0xOTItMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiAxMjggMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNDguN2MtOTguNiA4LjEtMTc2IDkwLjctMTc2IDE5MS4zIDAgMjcuMyA1LjcgNTMuMyAxNiA3Ni45bDAgMy4xYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjYuN0MxNjUuMiAzOTguMSA5NiAzMTkuMSA5NiAyMjRsMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTNzguMyA5NiA5NiA5Nmw2NCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTM1MiA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjAxLjQtNjAuOWMtNy4xLTUuMi0xNy4yLTMuNi0yMi40IDMuNWwtNTMgNzIuOS0yNi44LTI2LjhjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjMy4zIDMuMyA3LjkgNSAxMi42IDQuNnM4LjktMi44IDExLjctNi41bDY0LTg4YzUuMi03LjEgMy42LTE3LjItMy41LTIyLjN6Il0KICAgIH07CiAgICBmYVdpbmRvd01heGltaXplMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aW5kb3ctbWF4aW1pemUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0NzBdLCAiZjJkMCIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6bTI0IDY0bDMzNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDg4IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhSGFuZHNIb2xkaW5nQ2lyY2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLWhvbGRpbmctY2lyY2xlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZmIiLCAiTTMyMCAwYTEyOCAxMjggMCAxIDEgMCAyNTYgMTI4IDEyOCAwIDEgMSAwLTI1NnpNNDAgNjRjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCAxNjAuMmMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM2w1MS4xIDUxLjFjOC4zIDguMyAyMS4zIDkuNiAzMSAzLjEgMTIuOS04LjYgMTQuNy0yNi45IDMuNy0zNy44LTcuMy03LjMtMjMuMS0yMy4xLTQ3LjItNDcuMi0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwYzI0LjEgMjQuMSAzOS45IDM5LjkgNDcuMiA0Ny4ybDAgMCAyNS4zIDI1LjNjMjEgMjEgMzIuOCA0OS41IDMyLjggNzkuMmwwIDc4LjljMCAyNi41LTIxLjUgNDgtNDggNDhsLTY2LjcgMGMtMTcgMC0zMy4zLTYuNy00NS4zLTE4LjdMMjguMSAzOTMuNEMxMC4xIDM3NS40IDAgMzUxIDAgMzI1LjVMMCAxMDRDMCA4MS45IDE3LjkgNjQgNDAgNjR6bTU2MCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgMjIxLjVjMCAyNS41LTEwLjEgNDkuOS0yOC4xIDY3LjlMNTEyIDQ5My4zYy0xMiAxMi0yOC4zIDE4LjctNDUuMyAxOC43TDQwMCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNzguOWMwLTI5LjcgMTEuOC01OC4yIDMyLjgtNzkuMmwyNS4zLTI1LjMgMCAwYzcuMy03LjMgMjMuMS0yMy4xIDQ3LjItNDcuMiAxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zYy0yNC4xIDI0LjEtMzkuOSAzOS45LTQ3LjIgNDcuMi0xMSAxMS05LjIgMjkuMiAzLjcgMzcuOCA5LjcgNi41IDIyLjcgNS4yIDMxLTMuMWw1MS4xLTUxLjFjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0w1NjAgMTA0YzAtMjIuMSAxNy45LTQwIDQwLTQweiJdCiAgICB9OwogICAgZmFMb2NhdGlvblBpbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsb2NhdGlvbi1waW4iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsibWFwLW1hcmtlciJdLCAiZjA0MSIsICJNMTkyIDBDODYgMCAwIDg0LjQgMCAxODguNiAwIDMwNy45IDEyMC4yIDQ1MC45IDE3MC40IDUwNS40IDE4Mi4yIDUxOC4yIDIwMS44IDUxOC4yIDIxMy42IDUwNS40IDI2My44IDQ1MC45IDM4NCAzMDcuOSAzODQgMTg4LjYgMzg0IDg0LjQgMjk4IDAgMTkyIDB6Il0KICAgIH07CiAgICBmYU1hcE1hcmtlciA9IGZhTG9jYXRpb25QaW47CiAgICBmYUJvd2xpbmdCYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvd2xpbmctYmFsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDM2IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjQwIDgwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMjA4IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0tNjQtNjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFDYXJ0RmxhdGJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXJ0LWZsYXRiZWQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiZG9sbHktZmxhdGJlZCJdLCAiZjQ3NCIsICJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NGwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDI4OGMwIDM5LjggMjkuMSA3Mi44IDY3LjEgNzktMiA1LjMtMy4xIDExLTMuMSAxNyAwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4YzAtNS42LTEtMTEtMi43LTE2bDE5Ny41IDBjLTEuOCA1LTIuNyAxMC40LTIuNyAxNiAwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4YzAtNS42LTEtMTEtMi43LTE2bDM0LjcgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNDAwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI4OEMxMjggMzUuOCA5Mi4yIDAgNDggMEwzMiAwek0yMjQgNjRjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTc2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDI0MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTc2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDIyNCA2NHoiXQogICAgfTsKICAgIGZhRG9sbHlGbGF0YmVkID0gZmFDYXJ0RmxhdGJlZDsKICAgIGZhSG91c2VVc2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLXVzZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiaG9tZS11c2VyIl0sICJlMWIwIiwgIk0yNzcuOCA4LjZjLTEyLjMtMTEuNC0zMS4zLTExLjQtNDMuNSAwbC0yMjQgMjA4Yy05LjYgOS0xMi44IDIyLjktOCAzNS4xUzE4LjggMjcyIDMyIDI3MmwxNiAwIDAgMTc2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI4OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTc2IDE2IDBjMTMuMiAwIDI1LTguMSAyOS44LTIwLjNzMS42LTI2LjItOC0zNS4xbC0yMjQtMjA4ek0yMDAgMjU2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMTQ0IDQzMmMwLTQ0LjIgMzUuOC04MCA4MC04MGw2NCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNmwtMTkyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnoiXQogICAgfTsKICAgIGZhSG9tZVVzZXIgPSBmYUhvdXNlVXNlcjsKICAgIGZhR2hvc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2hvc3QiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxMjNdLCAiZjZlMiIsICJNNDAuMSA0NjcuMWwtMTEuMiA5QzI1LjcgNDc4LjYgMjEuOCA0ODAgMTcuOCA0ODAgOCA0ODAgMCA0NzIgMCA0NjIuMkwwIDE5MkMwIDg2IDg2IDAgMTkyIDBTMzg0IDg2IDM4NCAxOTJsMCAyNzAuMmMwIDkuOC04IDE3LjgtMTcuOCAxNy44LTQgMC03LjktMS40LTExLjEtMy45bC0xMS4yLTljLTEzLjQtMTAuNy0zMi44LTktNDQuMSAzLjlMMjY5LjMgNTA2Yy0zLjMgMy44LTguMiA2LTEzLjMgNnMtOS45LTIuMi0xMy4zLTZsLTI2LjYtMzAuNWMtMTIuNy0xNC42LTM1LjQtMTQuNi00OC4yIDBMMTQxLjMgNTA2Yy0zLjMgMy44LTguMiA2LTEzLjMgNnMtOS45LTIuMi0xMy4zLTZMODQuMiA0NzFjLTExLjMtMTIuOS0zMC43LTE0LjYtNDQuMS0zLjl6TTE2MCAxOTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptOTYgMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFDb21tZW50Tm9kZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudC1ub2RlcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNjk2IiwgIk00ODAgMjA4QzUwMy43IDIwOCA1MjUuNiAyMTUuMyA1NDMuNyAyMjcuOSA1MzYuOSAxMDAuOSA0MjUgMCAyODggMCAxNDYuNiAwIDMyIDEwNy41IDMyIDI0MCAzMiAyOTQuMyA1MS4yIDM0NC4zIDgzLjYgMzg0LjVMMzQuOCA0NzYuOGMtNC44IDktMy4zIDIwIDMuNiAyNy41czE3LjggOS44IDI3LjEgNS44bDExOC40LTUwLjdjMjcuMiAxMS40IDU2LjkgMTguNCA4OC4xIDIwLjIgLjEtMTguOSA0LjktMzggMTUtNTUuNSAxNy4xLTI5LjcgNDUuOC00OC41IDc3LTU0LjJsOS4yLTE2Yy0zLjQtMTAuNy01LjItMjItNS4yLTMzLjggMC02MS45IDUwLjEtMTEyIDExMi0xMTJ6TTMyOC42IDQ0OGMtMTcuNyAzMC42LTcuMiA2OS43IDIzLjQgODcuNHM2OS43IDcuMiA4Ny40LTIzLjRjMS41LTIuNiAyLjgtNS4zIDMuOS04bDczLjMgMGMxLjEgMi43IDIuNCA1LjQgMy45IDggMTcuNyAzMC42IDU2LjggNDEuMSA4Ny40IDIzLjRzNDEuMS01Ni44IDIzLjQtODcuNGMtMTMuNC0yMy4yLTM5LjEtMzQuOC02NC0zMS40bC0xNy42LTMwLjdjLTExIDExLjctMjUgMjAuNi00MC42IDI1LjZsMTYuNSAyOC45Yy0zLjggNC44LTYuOCAxMC05IDE1LjZsLTczLjQgMGMtMi4yLTUuNi01LjMtMTAuOC05LTE1LjZsMzMtNTcuN2M0LjEgLjggOC40IDEuMyAxMi44IDEuMyAzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NC02NCAyOC43LTY0IDY0YzAgMTMuNCA0LjEgMjUuOCAxMS4yIDM2LjFsLTM0LjYgNjAuNWMtMjUtMy40LTUwLjYgOC4zLTY0IDMxLjR6Il0KICAgIH07CiAgICBmYVBlcnNvbkFycm93RG93blRvTGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tYXJyb3ctZG93bi10by1saW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MzgiLCAiTTE5Mi0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMzE4LjMgMjk5LjFsLTQ2LjMtNjIuNCAwIDI0My4zIDI3MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDU0NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4MCAwIDAtMjQzLjMtNDYuMyA2Mi40Yy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NUMxMTAgMTMyIDE0OS43IDExMiAxOTIgMTEyczgyIDIwIDEwNy4yIDUzLjlsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42ek0xNzYgNDgwbDMyIDAgMC0xMjhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCAxMjh6TTU2Ni42IDE2Ni42bC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDQzMiAxNDYuNyA0MzIgMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTQ2LjcgMjUuNC0yNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6Il0KICAgIH07CiAgICBmYVBsdWdDaXJjbGVQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsdWctY2lyY2xlLXBsdXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU1ZiIsICJNMTkyLTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgMTI4IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTYgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDQ4LjdjLTk4LjYgOC4xLTE3NiA5MC43LTE3NiAxOTEuMyAwIDI3LjMgNS43IDUzLjMgMTYgNzYuOWwwIDMuMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY2LjdDMTY1LjIgMzk4LjEgOTYgMzE5LjEgOTYgMjI0bDAtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzc4LjMgOTYgOTYgOTZsNjQgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek00OTYgMjU2YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMTYgODBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA0OC00OCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDQ4IDAgMCA0OGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNDggNDggMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtNDggMCAwLTQ4eiJdCiAgICB9OwogICAgZmFQZXJzb25Td2ltbWluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tc3dpbW1pbmciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjc5NDYsICJzd2ltbWVyIl0sICJmNWM0IiwgIk01NTIgMTUyYTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHpNMjkzLjQgMTk4LjJsLTg4LjYgNzMuOWMxLjEgMCAyLjItLjEgMy4zLS4xIDMzLjEtLjIgNjYuMyAxMC4yIDk0LjQgMzEuNCAyMi4xIDE2LjYgMjkuMSAxNi42IDUxLjIgMCAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjQtMzEuNCA0LjggMCA5LjcgLjIgMTQuNSAuNi04LjMtMzAtMjQuMy01Ny43LTQ2LjgtODAuMi0xOC40LTE4LjQtNDAuNi0zMi43LTY1LTQxLjhsLTY4LjYtMjUuN2MtMjcuNC0xMC4zLTU4LTcuNS04My4xIDcuNmwtNTMuNSAzMi4xYy0xNS4yIDkuMS0yMC4xIDI4LjctMTEgNDMuOXMyOC43IDIwLjEgNDMuOSAxMUwyMzAgMTg3LjNjOC40LTUgMTguNi01LjkgMjcuNy0yLjVsMzUuNyAxMy40em0xMTAgMTgxLjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdTNyAzODYuMyAxNy42IDM5NC4zYzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOXoiXQogICAgfTsKICAgIGZhU3dpbW1lciA9IGZhUGVyc29uU3dpbW1pbmc7CiAgICBmYUNvbW1lbnREb3RzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21tZW50LWRvdHMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNzIsIDYyMDc1LCAiY29tbWVudGluZyJdLCAiZjRhZCIsICJNMjU2IDQ4MGMxNDEuNCAwIDI1Ni0xMDcuNSAyNTYtMjQwUzM5Ny40IDAgMjU2IDAgMCAxMDcuNSAwIDI0MGMwIDU0LjMgMTkuMiAxMDQuMyA1MS42IDE0NC41TDIuOCA0NzYuOGMtNC44IDktMy4zIDIwIDMuNiAyNy41czE3LjggOS44IDI3LjEgNS44bDExOC40LTUwLjdDMTgzLjcgNDcyLjYgMjE4LjkgNDgwIDI1NiA0ODB6TTEyOCAyMDhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTk2IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYUNvbW1lbnRpbmcyID0gZmFDb21tZW50RG90czI7CiAgICBmYUNoYXJ0UGllID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYXJ0LXBpZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJwaWUtY2hhcnQiXSwgImYyMDAiLCAiTTUxMi40IDI0MGwtMTc2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTc2YzAtMTcuNyAxNC40LTMyLjIgMzEuOS0yOS45IDEwNyAxNC4yIDE5MS44IDk5IDIwNiAyMDYgMi4zIDE3LjUtMTIuMiAzMS45LTI5LjkgMzEuOXpNMjIyLjYgMzcuMmMxOC4xLTMuOCAzMy44IDExIDMzLjggMjkuNWwwIDE5Ny4zYzAgNS42IDIgMTEgNS41IDE1LjNMMzk0IDQzOC43YzExLjcgMTQuMSA5LjIgMzUuNC02LjkgNDQuMS0zNC4xIDE4LjYtNzMuMiAyOS4yLTExNC43IDI5LjItMTMyLjUgMC0yNDAtMTA3LjUtMjQwLTI0MCAwLTExNS41IDgxLjUtMjExLjkgMTkwLjItMjM0Ljh6TTQ3Ny44IDI4OGw2NCAwYzE4LjUgMCAzMy4zIDE1LjcgMjkuNSAzMy44LTEwLjIgNDguNC0zNSA5MS40LTY5LjYgMTI0LjItMTIuMyAxMS43LTMxLjYgOS4yLTQyLjQtMy45TDM3NC45IDM0MC40Yy0xNy4zLTIwLjktMi40LTUyLjQgMjQuNi01Mi40bDc4LjIgMHoiXQogICAgfTsKICAgIGZhUGllQ2hhcnQgPSBmYUNoYXJ0UGllOwogICAgZmFGcm9nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZyb2ciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjUyZSIsICJNMzY4IDMyYzQxLjcgMCA3NS45IDMxLjggNzkuNyA3Mi41bDg1LjYgMjYuM2MyNS40IDcuOCA0Mi44IDMxLjMgNDIuOCA1Ny45IDAgMjEuOC0xMS43IDQxLjktMzAuNyA1Mi43bC0xNDQuNSA4Mi4xIDkyLjUgOTIuNSA1MC43IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDBjLTguNSAwLTE2LjYtMy40LTIyLjYtOS40TDM0Ni45IDM2MC4yYzExLjctMzYgMy4yLTc3LjEtMjUuNC0xMDUuNy00MC42LTQwLjYtMTA2LjMtNDAuNi0xNDYuOS0uMUwxMDEgMzI0LjRjLTYuNCA2LjEtNi43IDE2LjItLjYgMjIuNnMxNi4yIDYuNiAyMi42IC42bDczLjgtNzAuMiAuMS0uMSAuMS0uMWMzLjUtMy41IDcuMy02LjYgMTEuMy05LjIgMjcuOS0xOC41IDY1LjktMTUuNCA5MC41IDkuMiAyNC43IDI0LjcgMjcuNyA2Mi45IDkgOTAuOS0yLjYgMy44LTUuNiA3LjUtOSAxMC45TDI2MS44IDQxNiAzNTIgNDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDY0IDQ4MEMyOC43IDQ4MCAwIDQ1MS4zIDAgNDE2IDAgMjQ5LjYgMTI3IDExMi45IDI4OS4zIDk3LjUgMjk2LjIgNjAuMiAzMjguOCAzMiAzNjggMzJ6bTAgMTA0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhV2luZUJvdHRsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aW5lLWJvdHRsZSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmNzJmIiwgIk04MC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyIDAgMTEuOC02LjQgMjIuMi0xNiAyNy43bDAgMTQ1LjZjNTYuNSAyNC43IDk2IDgxLjEgOTYgMTQ2LjdsMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTc2Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDI4OGMwLTY1LjYgMzkuNS0xMjIgOTYtMTQ2LjdMOTYtNC4zQzg2LjQtOS44IDgwLTIwLjIgODAtMzJ6TTk2IDI4OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMjg4eiJdCiAgICB9OwogICAgZmFJbmJveCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbmJveCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMDFjIiwgIk05MS44IDMyQzU5LjkgMzIgMzIuOSA1NS40IDI4LjQgODYuOUwuNiAyODEuMmMtLjQgMy0uNiA2LS42IDkuMUwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTEyNS43YzAtMy0uMi02LjEtLjYtOS4xTDQ4My42IDg2LjlDNDc5LjEgNTUuNCA0NTIuMSAzMiA0MjAuMiAzMkw5MS44IDMyem0wIDY0bDMyOC41IDAgMjcuNCAxOTItNTkuOSAwYy0xMi4xIDAtMjMuMiA2LjgtMjguNiAxNy43bC0xNC4zIDI4LjZjLTUuNCAxMC44LTE2LjUgMTcuNy0yOC42IDE3LjdsLTEyMC40IDBjLTEyLjEgMC0yMy4yLTYuOC0yOC42LTE3LjdsLTE0LjMtMjguNmMtNS40LTEwLjgtMTYuNS0xNy43LTI4LjYtMTcuN0w2NC4zIDI4OCA5MS44IDk2eiJdCiAgICB9OwogICAgZmFTcXVhcmVIID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1oIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImgtc3F1YXJlIl0sICJmMGZkIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0zMjAgMTY4bDAgMTc2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNjQtOTYgMCAwIDY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTc2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA2NCA5NiAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhSFNxdWFyZSA9IGZhU3F1YXJlSDsKICAgIGZhSG91c2VNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLW1lZGljYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTNiMiIsICJNMjc3LjggOC42Yy0xMi4zLTExLjQtMzEuMy0xMS40LTQzLjUgMGwtMjI0IDIwOGMtOS42IDktMTIuOCAyMi45LTggMzUuMVMxOC44IDI3MiAzMiAyNzJsMTYgMCAwIDE3NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyODggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE3NiAxNiAwYzEzLjIgMCAyNS04LjEgMjkuOC0yMC4zczEuNi0yNi4yLTgtMzUuMWwtMjI0LTIwOHpNMjI0IDI0OGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhQ2lyY2xlQ2hldnJvblJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1jaGV2cm9uLXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNoZXZyb24tY2lyY2xlLXJpZ2h0Il0sICJmMTM4IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAwIDUxMiAwIDI1NiAyNTYgMCAxIDAgLTUxMiAwek0yNDEgMzc3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDg3LTg3LTg3LTg3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBMMzQ1IDIzOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOUwyNDEgMzc3eiJdCiAgICB9OwogICAgZmFDaGV2cm9uQ2lyY2xlUmlnaHQgPSBmYUNpcmNsZUNoZXZyb25SaWdodDsKICAgIGZhRmlsZUNzdiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNzdiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNmRkIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDgwIDAgMC0xMTJjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTc2IDAgMC0xNjUuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNMjY0IDM4MGMtMjQuMyAwLTQ0IDE5LjctNDQgNDRsMCA4MGMwIDI0LjMgMTkuNyA0NCA0NCA0NGwxNiAwYzI0LjMgMCA0NC0xOS43IDQ0LTQ0bDAtOGMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjBsMCA4YzAgMi4yLTEuOCA0LTQgNGwtMTYgMGMtMi4yIDAtNC0xLjgtNC00bDAtODBjMC0yLjIgMS44LTQgNC00bDE2IDBjMi4yIDAgNCAxLjggNCA0bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0yNC4zLTE5LjctNDQtNDQtNDRsLTE2IDB6bTEzNiAwYy0yOC43IDAtNTIgMjMuMy01MiA1MnMyMy4zIDUyIDUyIDUyYzYuNiAwIDEyIDUuNCAxMiAxMnMtNS40IDEyLTEyIDEybC0zMiAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGwzMiAwYzI4LjcgMCA1Mi0yMy4zIDUyLTUycy0yMy4zLTUyLTUyLTUyYy02LjYgMC0xMi01LjQtMTItMTJzNS40LTEyIDEyLTEybDI0IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC0yNCAwem05NiAwYy0xMSAwLTIwIDktMjAgMjBsMCAzMS42YzAgMzUuNSAxMC41IDcwLjMgMzAuMiA5OS44bDUuMSA3LjdjMy43IDUuNiAxMCA4LjkgMTYuNiA4LjlzMTIuOS0zLjMgMTYuNi04LjlsNS4xLTcuN2MxOS43LTI5LjYgMzAuMi02NC4zIDMwLjItOTkuOGwwLTMxLjZjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwbDAgMzEuNmMwIDE5LjYtNC4xIDM4LjktMTIgNTYuNy03LjktMTcuOC0xMi0zNy4xLTEyLTU2LjdsMC0zMS42YzAtMTEtOS0yMC0yMC0yMHoiXQogICAgfTsKICAgIGZhSGF0Q293Ym95ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhdC1jb3dib3kiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjhjMCIsICJNMTgyLjIgNzYuMUwxMzAuOCAzMDcuNUMxNDUuNSAzMjQuOSAxNjcuNCAzMzYgMTkyIDMzNmwyNTYgMGMyNC42IDAgNDYuNS0xMS4xIDYxLjItMjguNUw0NTcuOCA3Ni4xYy01LjctMjUuOC0yOC42LTQ0LjEtNTUtNDQuMS0xMi4yIDAtMjQuMSA0LTMzLjggMTEuM2wtNC43IDMuNWMtMjYuMyAxOS43LTYyLjQgMTkuNy04OC42IDBMMjcxIDQzLjNjLTkuOC03LjMtMjEuNi0xMS4zLTMzLjgtMTEuMy0yNi40IDAtNDkuMyAxOC4zLTU1IDQ0LjF6TTY0IDI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDIzOC4zIDAgMjU2QzAgMzYyIDg2IDQ0OCAxOTIgNDQ4bDI1NiAwYzEwNiAwIDE5Mi04NiAxOTItMTkyIDAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0yNTYgMGMtNzAuNyAwLTEyOC01Ny4zLTEyOC0xMjh6Il0KICAgIH07CiAgICBmYUZhY2VHcmluVG9uZ3VlV2luazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXRvbmd1ZS13aW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTQwLCAiZ3Jpbi10b25ndWUtd2luayJdLCAiZjU4YiIsICJNMTUyLjIgNDkwLjFDNjIuNSA0NTAuMiAwIDM2MC40IDAgMjU2IDAgMTE0LjYgMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NmMwIDEwNC40LTYyLjUgMTk0LjItMTUyLjIgMjM0LjEgNS4zLTEzIDguMi0yNy4yIDguMi00Mi4xbDAtNjEuN2MxNi45LTE2LjUgMzAuMS0zNi43IDM4LjMtNTkuMyA0LjMtMTEuOC03LjctMjEuOC0xOS42LTE4LjEtMzkuMiAxMi4yLTgzLjcgMTkuMS0xMzAuNyAxOS4xcy05MS41LTYuOS0xMzAuNy0xOS4xYy0xMS45LTMuNy0yMy45IDYuMy0xOS42IDE4LjEgOC4zIDIyLjYgMjEuNSA0Mi44IDM4LjMgNTkuM2wwIDYxLjdjMCAxNC45IDIuOSAyOS4xIDguMiA0Mi4xek0xNTIgMjEybDE2IDBjMTEgMCAyMCA5IDIwIDIwczkgMjAgMjAgMjAgMjAtOSAyMC0yMGMwLTMzLjEtMjYuOS02MC02MC02MGwtMTYgMGMtMzMuMSAwLTYwIDI2LjktNjAgNjAgMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjAgOS0yMCAyMC0yMHptMTg0IDYwYTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4ek0zMjAgNDAyLjZsMCA0NS40YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0bDAtNDUuNGMwLTE0LjcgMTEuOS0yNi42IDI2LjYtMjYuNmwyIDBjMTEuMyAwIDIxLjEgNy45IDIzLjYgMTguOSAyLjggMTIuNiAyMC44IDEyLjYgMjMuNiAwIDIuNS0xMS4xIDEyLjMtMTguOSAyMy42LTE4LjlsMiAwYzE0LjcgMCAyNi42IDExLjkgMjYuNiAyNi42ek0zMzYgMTg0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXQogICAgfTsKICAgIGZhR3JpblRvbmd1ZVdpbmsyID0gZmFGYWNlR3JpblRvbmd1ZVdpbmsyOwogICAgZmFMID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImwiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMDhdLCAiNGMiLCAiTTY0IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzUyIDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDY0IDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMzIgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUFycm93RG93blNob3J0V2lkZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLXNob3J0LXdpZGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsic29ydC1hbW91bnQtZGVzYyIsICJzb3J0LWFtb3VudC1kb3duLWFsdCJdLCAiZjg4NCIsICJNMjQ2LjYgMzc0LjZsLTk2IDk2Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMzcwLjcgOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMwNi43IDQxLjQtNDEuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zek0zMjAgMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxMjhsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxMjhsMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDEyOGwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjI0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVNvcnRBbW91bnREZXNjID0gZmFBcnJvd0Rvd25TaG9ydFdpZGU7CiAgICBmYVNvcnRBbW91bnREb3duQWx0ID0gZmFBcnJvd0Rvd25TaG9ydFdpZGU7CiAgICBmYUhvdXJnbGFzc0hhbGYyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXJnbGFzcy1oYWxmIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImhvdXJnbGFzcy0yIl0sICJmMjUyIiwgIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDAgMTFjMCA0Mi40IDE2LjkgODMuMSA0Ni45IDExMy4xbDY3LjkgNjcuOS02Ny45IDY3LjlDNDguOSAzNTMuOSAzMiAzOTQuNiAzMiA0MzdsMCAxMWMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTExYzAtNDIuNC0xNi45LTgzLjEtNDYuOS0xMTMuMWwtNjcuOS02Ny45IDY3LjktNjcuOWMzMC0zMCA0Ni45LTcwLjcgNDYuOS0xMTMuMWwwLTExYzE3LjcgMCAzMi0xNC4zIDMyLTMyUzM2OS43IDAgMzUyIDBMMzIgMHpNOTYgNzVsMC0xMSAxOTIgMCAwIDExYzAgMTktNS42IDM3LjQtMTYgNTNMMTEyIDEyOGMtMTAuMy0xNS42LTE2LTM0LTE2LTUzem0xNiAzMDljMy41LTUuMyA3LjYtMTAuMyAxMi4xLTE0LjlsNjcuOS02Ny45IDY3LjkgNjcuOWM0LjYgNC42IDguNiA5LjYgMTIuMiAxNC45TDExMiAzODR6Il0KICAgIH07CiAgICBmYUhvdXJnbGFzczIyID0gZmFIb3VyZ2xhc3NIYWxmMjsKICAgIGZhU3Bvb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Bvb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzNDgsIDYxODczLCAidXRlbnNpbC1zcG9vbiJdLCAiZjJlNSIsICJNMjQ1LjggMjIwLjljLTE0LjUtMTcuNi0yMS44LTM5LjItMjEuOC02MC44IDAtODAuMiA5Ni0xNjAuMiAxOTItMTYwLjIgNTMgMCA5NiA0MyA5NiA5NiAwIDk2LTgwIDE5Mi0xNjAuMiAxOTItMjEuNiAwLTQzLjItNy4zLTYwLjgtMjEuOEw1NC42IDUwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyNDUuOCAyMjAuOXoiXQogICAgfTsKICAgIGZhVXRlbnNpbFNwb29uID0gZmFTcG9vbjsKICAgIGZhQ3JlZGl0Q2FyZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3JlZGl0LWNhcmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNzksIDYyMDgzLCAiY3JlZGl0LWNhcmQtYWx0Il0sICJmMDlkIiwgIk0wIDEyOGwwIDMyIDUxMiAwIDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjh6bTAgODBMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNzYtNTEyIDB6TTY0IDM2MGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMTQ0IDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsNjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYUNyZWRpdENhcmRBbHQyID0gZmFDcmVkaXRDYXJkMjsKICAgIGZhRmlsZUludm9pY2VEb2xsYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1pbnZvaWNlLWRvbGxhciIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNTcxIiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNNjQgODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw4OCA2NEM3NC43IDY0IDY0IDc0LjcgNjQgODh6bTAgOTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTExMiA3NmwwIDRjLTI4LjggLjMtNTIgMjMuNy01MiA1Mi41IDAgMjUuNyAxOC41IDQ3LjYgNDMuOSA1MS44bDQxLjcgN2M2IDEgMTAuNCA2LjIgMTAuNCAxMi4zIDAgNi45LTUuNiAxMi41LTEyLjUgMTIuNUwxNTIgNDAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGwyNCAwIDAgNGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTQuN2MyNS00LjEgNDQtMjUuNyA0NC01MS44IDAtMjUuNy0xOC41LTQ3LjYtNDMuOS01MS44bC00MS43LTdjLTYtMS0xMC40LTYuMi0xMC40LTEyLjMgMC02LjkgNS42LTEyLjUgMTIuNS0xMi41bDQ3LjUgMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTggMCAwLTRjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIweiJdCiAgICB9OwogICAgZmFTcGFnaGV0dGlNb25zdGVyRmx5aW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwYWdoZXR0aS1tb25zdGVyLWZseWluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJwYXN0YWZhcmlhbmlzbSJdLCAiZjY3YiIsICJNMjA4IDY0YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDBjMCAxNi4yLTYgMzEuMS0xNiA0Mi4zbDE1LjYgMzEuMmMxOC43LTYgMzkuOS05LjUgNjQuNC05LjVzNDUuOCAzLjUgNjQuNCA5LjVMNDAwIDEwNi4zYy0xMC0xMS4zLTE2LTI2LjEtMTYtNDIuMyAwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0LTI4LjcgNjQtNjQgNjRjLTEuNyAwLTMuNC0uMS01LjEtLjJMNDI3LjggMTU4YzIxLjEgMTMuNiAzNy43IDMwLjIgNTEuNCA0Ni40IDcuMSA4LjMgMTMuNSAxNi42IDE5LjMgMjRsMS40IDEuOGM2LjMgOC4xIDExLjYgMTQuOCAxNi43IDIwLjQgMTAuNyAxMS43IDE2LjEgMTMuNCAxOS40IDEzLjQgMi41IDAgNC4zLS42IDcuMS0zLjMgMy43LTMuNSA3LjEtOC44IDEyLjUtMTcuNGwuNi0uOWM0LjYtNy40IDExLTE3LjYgMTkuNC0yNS43IDkuNy05LjMgMjIuOS0xNi43IDQwLjQtMTYuNyAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMi41IDAtNC4zIC42LTcuMSAzLjMtMy43IDMuNS03LjEgOC44LTEyLjUgMTcuNGwtLjYgLjljLTQuNiA3LjQtMTEgMTcuNi0xOS40IDI1LjctOS43IDkuMy0yMi45IDE2LjctNDAuNCAxNi43LTE4LjUgMC0zMi45LTguNS00NC4zLTE4LjYtMy4xIDQtNi42IDguMy0xMC41IDEyLjcgMS40IDQuMyAyLjggOC41IDQgMTIuNSAuOSAzIDEuOCA1LjggMi42IDguNiAzIDkuOCA1LjUgMTguMiA4LjYgMjUuOSAzLjkgOS44IDcuNCAxNS40IDEwLjggMTguNSAyLjYgMi40IDUuOSA0LjMgMTIuOCA0LjMgOC43IDAgMTYuOS00LjIgMzMuNy0xMy4yIDE1LTggMzUuNy0xOC44IDYyLjMtMTguOCAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMTMuNCAwLTI0LjcgNS4yLTM5LjcgMTMuMi0xIC42LTIuMSAxLjEtMy4yIDEuNy0xMy4xIDcuMS0zMS42IDE3LjEtNTMuMSAxNy4xLTE4LjQgMC0zMy42LTYuMS00NS41LTE3LjItMTEuMS0xMC4zLTE3LjktMjMuNy0yMi43LTM2LTMuNi05LTYuNy0xOS4xLTkuNS0yOC41LTE2LjQgMTIuMy0zNi4xIDIzLjYtNTguOSAzMS4zIDMuNiAxMC44IDguNCAyMy41IDE0LjQgMzYuMiA3LjUgMTUuOSAxNi4yIDMwLjQgMjUuOCA0MC41IDkuNiAxMC4yIDE3LjcgMTMuNyAyNC41IDEzLjcgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTI1LjIgMC00NS0xMy41LTU5LjUtMjguOC0xNC41LTE1LjQtMjUuNy0zNC45LTM0LjItNTMtOC0xNy0xNC4xLTMzLjgtMTguMy00Ni45LTUuMiAuNC0xMC42IC42LTE2IC42cy0xMC44LS4yLTE2LS42Yy00LjIgMTMtMTAuMyAyOS45LTE4LjMgNDYuOS04LjUgMTguMS0xOS44IDM3LjYtMzQuMiA1My0xNC40IDE1LjMtMzQuMyAyOC44LTU5LjUgMjguOC0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzYuOCAwIDE1LTMuNSAyNC41LTEzLjcgOS41LTEwLjEgMTguMy0yNC42IDI1LjgtNDAuNSA1LjktMTIuNiAxMC43LTI1LjQgMTQuNC0zNi4yLTIyLjgtNy43LTQyLjUtMTktNTguOS0zMS4zLTIuOSA5LjQtNiAxOS41LTkuNSAyOC41LTQuOCAxMi4yLTExLjYgMjUuNi0yMi43IDM2LTExLjkgMTEuMS0yNy4xIDE3LjItNDUuNSAxNy4yLTEzLjEgMC0yNC41LTQuMS0zMy44LTguOS03LjktNC0xNS43LTkuMi0yMi4xLTEzLjVsMCAwLTIuNC0xLjZjLTE1LjMtMTAuMi0yNS44LTE2LTM3LjctMTYtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyOC4xIDAgNDkuNiAxNC4yIDY0LjMgMjRsMi40IDEuNmM2LjkgNC42IDEyLjEgOC4xIDE3LjIgMTAuNyA1LjUgMi44IDkuMSAzLjYgMTIgMy42IDYuOCAwIDEwLjItMS45IDEyLjgtNC4zIDMuNC0zLjIgNy04LjggMTAuOC0xOC41IDMtNy43IDUuNi0xNi4xIDguNi0yNS45IC44LTIuNyAxLjctNS42IDIuNi04LjYgMS4yLTQgMi42LTguMiA0LTEyLjUtMy45LTQuNS03LjQtOC44LTEwLjUtMTIuNy0xMS40IDEwLjEtMjUuOSAxOC42LTQ0LjMgMTguNi0xNy41IDAtMzAuNy03LjQtNDAuNC0xNi43LTguNC04LjEtMTQuOC0xOC4zLTE5LjQtMjUuN2wtLjYtLjljLTUuNC04LjYtOC44LTEzLjktMTIuNS0xNy40LTIuOC0yLjctNC42LTMuMy03LjEtMy4zLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMTcuNSAwIDMwLjcgNy40IDQwLjQgMTYuNyA4LjQgOC4xIDE0LjggMTguMyAxOS40IDI1LjdsLjYgLjljNS40IDguNiA4LjggMTMuOSAxMi41IDE3LjQgMi44IDIuNyA0LjYgMy4zIDcuMSAzLjMgMy4zIDAgOC43LTEuNyAxOS40LTEzLjQgNS4xLTUuNiAxMC40LTEyLjMgMTYuNy0yMC40bDEuNC0xLjhjNS44LTcuNCAxMi4yLTE1LjcgMTkuMy0yNCAxMy44LTE2LjIgMzAuMy0zMi44IDUxLjQtNDYuNGwtMTUuMS0zMC4yYy0xLjcgLjEtMy40IC4yLTUuMSAuMi0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0IDY0IDI4LjcgNjQgNjR6bTIwOCAwYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6Il0KICAgIH07CiAgICBmYVBhc3RhZmFyaWFuaXNtID0gZmFTcGFnaGV0dGlNb25zdGVyRmx5aW5nOwogICAgZmFNYXJ0aW5pR2xhc3NDaXRydXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFydGluaS1nbGFzcy1jaXRydXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiY29ja3RhaWwiXSwgImY1NjEiLCAiTTU3NiA4MGMwLTQ0LjItMzUuOC04MC04MC04MC0xOCAwLTM0LjYgNi00OCAxNmwtODEgMGMyMy42LTQ3LjQgNzIuNS04MCAxMjktODAgNzkuNSAwIDE0NCA2NC41IDE0NCAxNDRTNTc1LjUgMjI0IDQ5NiAyMjRjLTYuNSAwLTEzLS40LTE5LjMtMS4zbDY0LTc0LjdjMS4xLTEuMyAyLjItMi43IDMuMy00LjEgMTkuNC0xNC42IDMyLTM3LjggMzItNjR6TTY2LjkgODIuNkM3Mi4yIDcxLjMgODMuNSA2NCA5NiA2NGwzODQgMGMxMi41IDAgMjMuOCA3LjMgMjkuMSAxOC42czMuNCAyNC43LTQuOCAzNC4ybC0xODQuMyAyMTUgMCAxMTYuMiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2NCAwIDAtMTE2LjItMTg0LjMtMjE1Yy04LjEtOS41LTEwLTIyLjgtNC44LTM0LjJ6TTE2NS42IDEyOEwyODggMjcwLjggNDEwLjQgMTI4IDE2NS42IDEyOHoiXQogICAgfTsKICAgIGZhQ29ja3RhaWwgPSBmYU1hcnRpbmlHbGFzc0NpdHJ1czsKICAgIGZhQnVsbGhvcm4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVsbGhvcm4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMjYsIDEyODM2M10sICJmMGExIiwgIk00NjEuMiAxOC45QzQ3Mi43IDI0IDQ4MCAzNS40IDQ4MCA0OGwwIDQxNmMwIDEyLjYtNy4zIDI0LTE4LjggMjkuMXMtMjQuOCAzLjItMzQuMy01LjFsLTQ2LjYtNDAuN2MtNDMuNi0zOC4xLTk4LjctNjAuMy0xNTYuNC02M2wwIDk1LjdjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZDNTcuMyAzODQgMCAzMjYuNyAwIDI1NlM1Ny4zIDEyOCAxMjggMTI4bDg0LjUgMGM2MS44LS4yIDEyMS40LTIyLjcgMTY3LjktNjMuM2w0Ni42LTQwLjdjOS40LTguMyAyMi45LTEwLjIgMzQuMy01LjF6TTIyNCAzMjBsMCAuMmM3MC4zIDIuNyAxMzcuOCAyOC41IDE5MiA3My40bDAtMjc1LjNjLTU0LjIgNDQuOS0xMjEuNyA3MC43LTE5MiA3My40TDIyNCAzMjB6Il0KICAgIH07CiAgICBmYUJveFRpc3N1ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3gtdGlzc3VlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwNWIiLCAiTTEwMy45IDMybDE2MSAwYzEzLjggMCAyNiA4LjggMzAuNCAyMS45bDE3LjQgNTIuMmM0LjQgMTMuMSAxNi42IDIxLjkgMzAuNCAyMS45bDYwLjUgMGMyMS44IDAgMzcuMyAyMS40IDMwLjQgNDIuMUwzODQgMzIwIDEyOCAzMjAgNzIuNyA3MC45QzY4LjIgNTEgODMuNCAzMiAxMDMuOSAzMnpNNDggMjU2bDE2LjYgMCAxNi41IDc0LjRDODYgMzUyLjQgMTA1LjUgMzY4IDEyOCAzNjhsMjU2IDBjMjAuNyAwIDM5LTEzLjIgNDUuNS0zMi44bDI2LjQtNzkuMiA4LjEgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDEyOGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMzA0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4eiJdCiAgICB9OwogICAgZmFNYXR0cmVzc1BpbGxvdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXR0cmVzcy1waWxsb3ciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUyNSIsICJNMjU2IDY0TDY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwIDAtMzg0em00OCAzODRsMjA4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTIwOCAwIDAgMzg0ek02NCAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xOTJ6Il0KICAgIH07CiAgICBmYUNoZXZyb25MZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXZyb24tbGVmdCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzkwMDFdLCAiZjA1MyIsICJNOS40IDIzMy40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxOTIgMTkyYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMNzcuMyAyNTYgMjQ2LjYgODYuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTkyIDE5MnoiXQogICAgfTsKICAgIGZhQ2xvdWRNb29uUmFpbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1tb29uLXJhaW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjczYyIsICJNNDQ4IDBjLTY4LjYgMC0xMjcuMSA0My4xLTE0OS44IDEwMy44IDE3LjEgMTQuMSAyOS42IDMzLjUgMzQuOSA1NS44IDM5LjkgMjEuNyA2Ni45IDYzLjkgNjYuOSAxMTIuNSAwIDEzLjUtMi4xIDI2LjUtNS45IDM4LjcgMTYuOSA2IDM1IDkuMyA1My45IDkuMyA0MyAwIDgyLjEtMTcgMTEwLjgtNDQuNiA0LjYtNC40IDUuOS0xMS4yIDMuMy0xN3MtOC42LTkuMy0xNC45LTguOGMtMyAuMi02LjEgLjQtOS4yIC40LTYzLjUgMC0xMTUtNTEuNS0xMTUtMTE1IDAtNDUuMSAyNi04NC4yIDYzLjgtMTAzIDUuNy0yLjggOS04LjkgOC4yLTE1LjJTNDg5LjYgNS4zIDQ4My40IDMuOUM0NzIgMS40IDQ2MC4yIDAgNDQ4IDB6TTI3MiAzNTJjNDQuMiAwIDgwLTM1LjggODAtODAgMC0zOS0yNy45LTcxLjUtNjQuOC03OC42IC41LTMuMSAuOC02LjIgLjgtOS40IDAtMzAuOS0yNS4xLTU2LTU2LTU2LTEyLjQgMC0yMy45IDQtMzMuMSAxMC44LTEzLjQtMjUuNS00MC4xLTQyLjgtNzAuOS00Mi44LTQ0LjIgMC04MCAzNS44LTgwIDgwIDAgNy40IDEgMTQuNiAyLjkgMjEuNS0yOS44IDExLjYtNTAuOSA0MC42LTUwLjkgNzQuNSAwIDQ0LjIgMzUuOCA4MCA4MCA4MGwxOTIgMHpNNjkgNDAxLjFjLTEyLjYtNC4yLTI2LjIgMi42LTMwLjQgMTUuMkwxNy4yIDQ4MC40QzEzIDQ5MyAxOS44IDUwNi42IDMyLjQgNTEwLjhzMjYuMi0yLjYgMzAuNC0xNS4ybDIxLjQtNjQuMWM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjR6bTEyMCAwYy0xMi42LTQuMi0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjQgNjQuMWMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS40LTY0LjFjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40em0xMjAgMGMtMTIuNi00LjItMjYuMiAyLjYtMzAuNCAxNS4ybC0yMS40IDY0LjFjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuNC02NC4xYzQuMi0xMi42LTIuNi0yNi4yLTE1LjItMzAuNHoiXQogICAgfTsKICAgIGZhQXJyb3dEb3duMTkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctZG93bi0xLTkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic29ydC1udW1lcmljLWFzYyIsICJzb3J0LW51bWVyaWMtZG93biJdLCAiZjE2MiIsICJNNDE4LjcgMzhjOC4zIDYgMTMuMyAxNS43IDEzLjMgMjZsMCA5NiAxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDAgMC01MS42LTUuOSAyYy0xNi44IDUuNi0zNC45LTMuNS00MC41LTIwLjJzMy41LTM0LjkgMjAuMi00MC41bDQ4LTE2YzkuOC0zLjMgMjAuNS0xLjYgMjguOCA0LjR6TTM2NS4xIDQzMC42bDExLjctMThjLTMyLjktOS45LTU2LjgtNDAuNS01Ni44LTc2LjYgMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDIyLjktNi42IDQ1LjMtMTkuMSA2NC41bC00Mi4xIDY0LjljLTkuNiAxNC44LTI5LjQgMTkuMS00NC4zIDkuNHMtMTkuMS0yOS40LTkuNC00NC4zek00MjQgMzM2YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTE1MC42IDQ3MC42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMzcwLjcgOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMwNi43IDQxLjQtNDEuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC05NiA5NnoiXQogICAgfTsKICAgIGZhU29ydE51bWVyaWNBc2MgPSBmYUFycm93RG93bjE5OwogICAgZmFTb3J0TnVtZXJpY0Rvd24gPSBmYUFycm93RG93bjE5OwogICAgZmFIYW5kU3BvY2syID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtc3BvY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0MDZdLCAiZjI1OSIsICJNMjE0LjkgMjMuN0MyMTAuMyA2LjYgMTkyLjgtMy41IDE3NS43IDEuMXMtMjcuMiAyMi4xLTIyLjYgMzkuMkwyMDYgMjM3LjhjMi41IDkuMi00LjUgMTguMi0xNCAxOC4yLTYuNCAwLTEyLTQuMi0xMy45LTEwLjNMMTM0LjYgMTAyLjdjLTUuMS0xNi45LTIzLTI2LjQtMzkuOS0yMS4zcy0yNi40IDIzLTIxLjMgMzkuOWw2Mi44IDIwNi40YzIuNCA3LjktNy4yIDEzLjgtMTMuMiA4LjFMNjcuNiAyODNjLTE2LTE1LjItNDEuMy0xNC42LTU2LjYgMS40Uy0zLjYgMzI1LjcgMTIuNCAzNDFMMTI0LjggNDQ4YzQzLjEgNDEuMSAxMDAuNCA2NCAxNjAgNjRsMTkuMSAwYy4xIDAgLjEtLjEgLjEtLjFzLjEtLjEgLjEtLjFjNTguMy0zLjUgMTA4LjYtNDMuMiAxMjUuMy05OS43bDgxLjItMjc1YzUtMTYuOS00LjctMzQuNy0yMS42LTM5LjhzLTM0LjcgNC43LTM5LjggMjEuNkw0MTEuNSAyNDcuMWMtMS42IDUuMy02LjQgOC45LTEyIDguOS03LjkgMC0xMy44LTcuMy0xMi4yLTE1LjFsMzYtMTcwLjNjMy43LTE3LjMtNy40LTM0LjMtMjQuNy0zNy45cy0zNC4zIDcuNC0zNy45IDI0LjdMMzIzLjEgMjM1LjFjLTIuNiAxMi4yLTEzLjMgMjAuOS0yNS44IDIwLjktMTEuOSAwLTIyLjQtOC0yNS40LTE5LjVsLTU3LTIxMi44eiJdCiAgICB9OwogICAgZmFXYW5kTWFnaWNTcGFya2xlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3YW5kLW1hZ2ljLXNwYXJrbGVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbIm1hZ2ljLXdhbmQtc3BhcmtsZXMiXSwgImUyY2EiLCAiTTI2My40LTI3TDI3OC4yIDkuOCAzMTUgMjQuNmMzIDEuMiA1IDQuMiA1IDcuNHMtMiA2LjItNSA3LjRMMjc4LjIgNTQuMiAyNjMuNCA5MWMtMS4yIDMtNC4yIDUtNy40IDVzLTYuMi0yLTcuNC01TDIzMy44IDU0LjIgMTk3IDM5LjRjLTMtMS4yLTUtNC4yLTUtNy40czItNi4yIDUtNy40TDIzMy44IDkuOCAyNDguNi0yN2MxLjItMyA0LjItNSA3LjQtNXM2LjIgMiA3LjQgNXpNMTEwLjcgNDEuN2wyMS41IDUwLjEgNTAuMSAyMS41YzUuOSAyLjUgOS43IDguMyA5LjcgMTQuN3MtMy44IDEyLjItOS43IDE0LjdsLTUwLjEgMjEuNS0yMS41IDUwLjFjLTIuNSA1LjktOC4zIDkuNy0xNC43IDkuN3MtMTIuMi0zLjgtMTQuNy05LjdMNTkuOCAxNjQuMiA5LjcgMTQyLjdDMy44IDE0MC4yIDAgMTM0LjQgMCAxMjhzMy44LTEyLjIgOS43LTE0LjdMNTkuOCA5MS44IDgxLjMgNDEuN0M4My44IDM1LjggODkuNiAzMiA5NiAzMnMxMi4yIDMuOCAxNC43IDkuN3pNNDY0IDMwNGM2LjQgMCAxMi4yIDMuOCAxNC43IDkuN2wyMS41IDUwLjEgNTAuMSAyMS41YzUuOSAyLjUgOS43IDguMyA5LjcgMTQuN3MtMy44IDEyLjItOS43IDE0LjdsLTUwLjEgMjEuNS0yMS41IDUwLjFjLTIuNSA1LjktOC4zIDkuNy0xNC43IDkuN3MtMTIuMi0zLjgtMTQuNy05LjdsLTIxLjUtNTAuMS01MC4xLTIxLjVjLTUuOS0yLjUtOS43LTguMy05LjctMTQuN3MzLjgtMTIuMiA5LjctMTQuN2w1MC4xLTIxLjUgMjEuNS01MC4xYzIuNS01LjkgOC4zLTkuNyAxNC43LTkuN3pNNDYwIDBjMTEgMCAyMS42IDQuNCAyOS41IDEyLjJsNDIuMyA0Mi4zQzUzOS42IDYyLjQgNTQ0IDczIDU0NCA4NHMtNC40IDIxLjYtMTIuMiAyOS41bC04OC4yIDg4LjItMTAxLjMtMTAxLjMgODguMi04OC4yQzQzOC40IDQuNCA0NDkgMCA0NjAgMHpNNDQuMiAzOTguNUwzMDguNCAxMzQuMyA0MDkuNyAyMzUuNiAxNDUuNSA0OTkuOEMxMzcuNiA1MDcuNiAxMjcgNTEyIDExNiA1MTJzLTIxLjYtNC40LTI5LjUtMTIuMkw0NC4yIDQ1Ny41QzM2LjQgNDQ5LjYgMzIgNDM5IDMyIDQyOHM0LjQtMjEuNiAxMi4yLTI5LjV6Il0KICAgIH07CiAgICBmYU1hZ2ljV2FuZFNwYXJrbGVzID0gZmFXYW5kTWFnaWNTcGFya2xlczsKICAgIGZhQ29tbWVudE1lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudC1tZWRpY2FsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ZjUiLCAiTTI1NiA0ODBjMTQxLjQgMCAyNTYtMTA3LjUgMjU2LTI0MFMzOTcuNCAwIDI1NiAwIDAgMTA3LjUgMCAyNDBjMCA1NC4zIDE5LjIgMTA0LjMgNTEuNiAxNDQuNUwyLjggNDc2LjhjLTQuOCA5LTMuMyAyMCAzLjYgMjcuNXMxNy44IDkuOCAyNy4xIDUuOGwxMTguNC01MC43QzE4My43IDQ3Mi42IDIxOC45IDQ4MCAyNTYgNDgwek0yMTcuNiAxNTMuNmMwLTEwLjYgOC42LTE5LjIgMTkuMi0xOS4ybDM4LjQgMGMxMC42IDAgMTkuMiA4LjYgMTkuMiAxOS4ybDAgNDggNDggMGMxMC42IDAgMTkuMiA4LjYgMTkuMiAxOS4ybDAgMzguNGMwIDEwLjYtOC42IDE5LjItMTkuMiAxOS4ybC00OCAwIDAgNDhjMCAxMC42LTguNiAxOS4yLTE5LjIgMTkuMmwtMzguNCAwYy0xMC42IDAtMTkuMi04LjYtMTkuMi0xOS4ybDAtNDgtNDggMGMtMTAuNiAwLTE5LjItOC42LTE5LjItMTkuMmwwLTM4LjRjMC0xMC42IDguNi0xOS4yIDE5LjItMTkuMmw0OCAwIDAtNDh6Il0KICAgIH07CiAgICBmYUJlbGxTbGFzaDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmVsbC1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODI3NywgNjE5NDNdLCAiZjFmNiIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtODcuNS04Ny41YzE3LjItMi40IDMwLjUtMTcuMyAzMC41LTM1LjIgMC04LjEtMi43LTE1LjktNy44LTIyLjJsLTkuOC0xMi4yQzQ2NC40IDMwOC41IDQ0OCAyNjEuOCA0NDggMjEzLjdsMC0yMS43YzAtNzcuNC01NS0xNDItMTI4LTE1Ni44bDAtMy4yYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMy4yYy0zOC42IDcuOC03Mi4yIDI5LjYtOTUuMiA1OS43TDQxLTI0Ljl6bTg3IDIzOC41YzAgNDguMS0xNi40IDk0LjgtNDYuNCAxMzIuNGwtOS44IDEyLjJjLTUgNi4zLTcuOCAxNC4xLTcuOCAyMi4yIDAgMTkuNiAxNS45IDM1LjUgMzUuNSAzNS41bDIzNS4zIDAtMjA2LjktMjA2LjkgMCA0LjV6TTI4OCA1MTJjMjkuOCAwIDU0LjktMjAuNCA2Mi00OGwtMTI0IDBjNy4xIDI3LjYgMzIuMiA0OCA2MiA0OHoiXQogICAgfTsKICAgIGZhSGFuZHNoYWtlU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZHNoYWtlLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNTc0MzksICJoYW5kc2hha2UtYWx0LXNsYXNoIiwgImhhbmRzaGFrZS1zaW1wbGUtc2xhc2giXSwgImUwNjAiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTI4OC0yODggMTQuMi0xNC4yYzQuMi00LjIgOS41LTYuNSAxNC45LTYuOSA2LjgtLjYgMTMuOCAxLjcgMTkgNi45TDUwNS42IDM3NiA1NzYgMzIwIDU3NiAzMiA0NjQgOTYgNDQwLjIgODAuMUM0MjQuNCA2OS42IDQwNS45IDY0IDM4Ni45IDY0bC03MC40IDBjLTEuMSAwLTIuMyAwLTMuNCAuMS0xNi45IC45LTMyLjggOC41LTQ0LjIgMjEuMWwtNTUuOCA2Mi4xLTM0LTM0IDQ0LjMtNDkuMi0zOS43IDBjLTE1LjMgMC0zMC4xIDMuNi00My41IDEwLjRMNDEtMjQuOXpNMCA2OS44TDAgMzIwIDE1Ni40IDQ1MC4zYzIzIDE5LjIgNTIgMjkuNyA4MS45IDI5LjdsMTUuNyAwLTctN2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQxIDQxIDkgMGMyMi4yIDAgNDMuOC01LjggNjIuOC0xNi40TDAgNjkuOHoiXQogICAgfTsKICAgIGZhSGFuZHNoYWtlQWx0U2xhc2ggPSBmYUhhbmRzaGFrZVNsYXNoOwogICAgZmFIYW5kc2hha2VTaW1wbGVTbGFzaCA9IGZhSGFuZHNoYWtlU2xhc2g7CiAgICBmYUJvdHRsZVdhdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvdHRsZS13YXRlciIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlNGM1IiwgIk0xMTItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMEM5NC4zIDMyIDgwIDE3LjcgODAgMHMxNC4zLTMyIDMyLTMyek0xNiAxNDRjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTYwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAyNC4xLTEzLjMgNDUuMS0zMyA1NiAxOS43IDEwLjkgMzMgMzEuOSAzMyA1NnMtMTMuMyA0NS4xLTMzIDU2YzE5LjcgMTAuOSAzMyAzMS45IDMzIDU2cy0xMy4zIDQ1LjEtMzMgNTZjMTkuNyAxMC45IDMzIDMxLjkgMzMgNTYgMCAzNS4zLTI4LjcgNjQtNjQgNjRMODAgNTQ0Yy0zNS4zIDAtNjQtMjguNy02NC02NCAwLTI0LjEgMTMuMy00NS4xIDMzLTU2LTE5LjctMTAuOS0zMy0zMS45LTMzLTU2czEzLjMtNDUuMSAzMy01NmMtMTkuNy0xMC45LTMzLTMxLjktMzMtNTZzMTMuMy00NS4xIDMzLTU2Yy0xOS43LTEwLjktMzMtMzEuOS0zMy01NnoiXQogICAgfTsKICAgIGZhRGljZUQyMCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWNlLWQyMCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNmNmIiwgIk0yMjQuNC04LjJjMTkuNi0xMS4xIDQzLjYtMTEuMSA2My4xIDBsMTkyIDEwOC44YzIwIDExLjQgMzIuNCAzMi42IDMyLjQgNTUuN2wwIDIxNS42YzAgMjMtMTIuNCA0NC4zLTMyLjQgNTUuN2wtMTkyIDEwOC44Yy0xOS42IDExLjEtNDMuNiAxMS4xLTYzLjEgMEwzMi40IDQyNy41QzEyLjQgNDE2LjEgMCAzOTQuOCAwIDM3MS44TDAgMTU2LjJjMC0yMyAxMi40LTQ0LjMgMzIuNC01NS43TDIyNC40LTguMnptNTIgNzMuMkMyNjcgNDkuOCAyNDUgNDkuOCAyMzUuNiA2NWwtNzYuNiAxMjMuNy04NS40LTQ2LjMtMy44LTEuNmMtOC45LTIuNy0xOC44IDEuMS0yMy40IDkuNnMtMi40IDE4LjkgNC43IDI0LjhsMy4zIDIuMyA4My40IDQ1LjItNzQuNiAxMjAuNkM1NS4zIDM1Ni4yIDYxIDM3MyA3NSAzNzguNGwxNjEgNjEuOSAwIDM5LjdjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC0zOS43IDE2MS02MS45YzE0LTUuNCAxOS43LTIyLjIgMTEuOC0zNWwtNzQuNy0xMjAuNiA4My40LTQ1LjJjOS43LTUuMyAxMy4zLTE3LjQgOC4xLTI3LjFzLTE3LjQtMTMuMy0yNy4xLTguMUwzNTMgMTg4LjcgMjc2LjQgNjV6bS00NyAzMjkuOWwtMTIyLTQ2LjkgNTQuNS04OC4xIDY3LjUgMTM1ek00MDQuNiAzNDhsLTEyMiA0Ni45IDY3LjUtMTM1IDU0LjUgODguMXpNMzE5LjMgMjMyTDI1NiAzNTguNiAxOTIuNyAyMzIgMzE5LjMgMjMyek0zMDggMTkybC0xMDQuMSAwIDUyLTg0IDUyIDg0eiJdCiAgICB9OwogICAgZmFBcnJvd0Rvd25aQSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLXotYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LWFscGhhLWRlc2MiLCAic29ydC1hbHBoYS1kb3duLWFsdCJdLCAiZjg4MSIsICJNMjMwLjYgMzkwLjZsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtODAtODBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMzcwLjcgOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMwNi43IDI1LjQtMjUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zek0yODggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOUwzOTcuMyAxNjAgNDQ4IDE2MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45TDM3MC44IDk2IDMyMCA5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQxMi42IDI3My43bDgwIDE2MGM3LjkgMTUuOCAxLjUgMzUtMTQuMyA0Mi45cy0zNSAxLjUtNDIuOS0xNC4zbC03LjItMTQuMy04OC40IDAtNy4yIDE0LjNjLTcuOSAxNS44LTI3LjEgMjIuMi00Mi45IDE0LjNzLTIyLjItMjcuMS0xNC4zLTQyLjlsODAtMTYwYzUuNC0xMC44IDE2LjUtMTcuNyAyOC42LTE3LjdzMjMuMiA2LjggMjguNiAxNy43ek0zODQgMzU5LjZsLTIwLjIgNDAuNCA0MC40IDAtMjAuMi00MC40eiJdCiAgICB9OwogICAgZmFTb3J0QWxwaGFEZXNjID0gZmFBcnJvd0Rvd25aQTsKICAgIGZhU29ydEFscGhhRG93bkFsdCA9IGZhQXJyb3dEb3duWkE7CiAgICBmYUJydXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJydXNoIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1NWQiLCAiTTE2Mi40IDZjLTEuNS0zLjYtNS02LTguOS02bC0xOSAwYy0zLjkgMC03LjUgMi40LTguOSA2TDEwNC45IDU3LjdjLTMuMiA4LTE0LjYgOC0xNy44IDBMNjYuNCA2Yy0xLjUtMy42LTUtNi04LjktNkw0OCAwQzIxLjUgMCAwIDIxLjUgMCA0OGwwIDIwOCAzODQgMCAwLTIwOGMwLTI2LjUtMjEuNS00OC00OC00OEwyMzAuNSAwYy0zLjkgMC03LjUgMi40LTguOSA2TDIwMC45IDU3LjdjLTMuMiA4LTE0LjYgOC0xNy44IDBMMTYyLjQgNnpNMCAzMDRsMCAxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw2NCAwIDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGwwLTY0IDY0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNi0zODQgMHpNMTkyIDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNiAxNiA3LjIgMTYgMTYtNy4yIDE2LTE2IDE2eiJdCiAgICB9OwogICAgZmFQZXJzb25XYWxraW5nRGFzaGVkTGluZUFycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXdhbGtpbmctZGFzaGVkLWxpbmUtYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU1MyIsICJNMTYwIDgwYTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyek03My40IDIyNy45bDIyLjYtMjIuNiAwIDY5LjNjMCAyOCAxMi4yIDU0LjcgMzMuNSA3Mi45bDcxLjQgNjEuMmM1LjkgNS4xIDkuOCAxMi4xIDEwLjkgMTkuOGwxMi42IDg4LjFjMi41IDE3LjUgMTguNyAyOS43IDM2LjIgMjcuMnMyOS43LTE4LjcgMjcuMi0zNi4ybC0xMi42LTg4LjFjLTMuMy0yMy4xLTE0LjktNDQuMS0zMi42LTU5LjNsLTM0LjUtMjkuNiAwLTExNS4yIDMuOCA0LjdjMTguMiAyMi44IDQ1LjggMzYgNzUgMzZsMzMuMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMy4yIDBjLTkuNyAwLTE4LjktNC40LTI1LTEybC0xNy45LTIyLjRjLTIzLTI4LjgtNTcuOS00NS42LTk0LjgtNDUuNi0zMi4yIDAtNjMuMSAxMi44LTg1LjggMzUuNkwyOC4xIDE4Mi42QzEwLjEgMjAwLjYgMCAyMjUgMCAyNTAuNUwwIDI4OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzcuNWMwLTguNSAzLjQtMTYuNiA5LjQtMjIuNnpNODUuOCA0MDcuM2MtMS41IDUuMi00LjMgMTAtOC4xIDEzLjhMOS40IDQ4OS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDY4LjMtNjguM2MxMS41LTExLjUgMTkuOS0yNS44IDI0LjQtNDEuNWwyLjItNy42LTQ2LTM5LjRjLTIuNS0yLjItNS00LjQtNy40LTYuOEw4NS44IDQwNy4zek00MzIgOGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMzODQtNS4zIDM4NCA4bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMyem0wIDEyOGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMnpNNDA4IDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzJjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTI0IDE1MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMnpNNjA5IDI3M2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtNzItNzJjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzEgMzEtMTAyLjEgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMDIuMSAwLTMxIDMxYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNzItNzJ6Il0KICAgIH07CiAgICBmYUFycm93VXBTaG9ydFdpZGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtc2hvcnQtd2lkZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzb3J0LWFtb3VudC11cC1hbHQiXSwgImY4ODUiLCAiTTMyMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwem0wIDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAwem0wIDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYwIDB6bTAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yMjQgMHpNMTUwLjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDk2IDE0MS4zIDk2IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzA2LjcgNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2eiJdCiAgICB9OwogICAgZmFTb3J0QW1vdW50VXBBbHQgPSBmYUFycm93VXBTaG9ydFdpZGU7CiAgICBmYUdyaXBWZXJ0aWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJncmlwLXZlcnRpY2FsIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbImdyaWQtdmVydGljYWwiXSwgImY1OGUiLCAiTTEyOCA0MGMwLTIyLjEtMTcuOS00MC00MC00MEw0MCAwQzE3LjkgMCAwIDE3LjkgMCA0MEwwIDg4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OHptMCAxOTJjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwbDAgNDhjMCAyMi4xIDE3LjkgNDAgNDAgNDBsNDggMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTQ4ek0wIDQyNGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OGMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDB6TTMyMCA0MGMwLTIyLjEtMTcuOS00MC00MC00MEwyMzIgMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCA0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGw0OCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDh6TTE5MiAyMzJsMCA0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGw0OCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDhjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwek0zMjAgNDI0YzAtMjIuMS0xNy45LTQwLTQwLTQwbC00OCAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OHoiXQogICAgfTsKICAgIGZhR3JpZFZlcnRpY2FsID0gZmFHcmlwVmVydGljYWw7CiAgICBmYUNhclR1bm5lbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXItdHVubmVsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0ZGUiLCAiTTI1NiAwQzExNC42IDAgMCAxMTQuNiAwIDI1NkwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0Mi44IDBjLTYuNi01LjktMTAuOC0xNC40LTEwLjgtMjRsMC0xMTMuMWMwLTEzLjUgMy4xLTI2LjggOS0zOC45bDM5LjctODAuOGM5LjQtMTkuMSAyOC45LTMxLjMgNTAuMi0zMS4zTDMxNyAyMjRjMjEuMyAwIDQwLjggMTIuMSA1MC4yIDMxLjNMNDA3IDMzNmM1LjkgMTIuMSA5IDI1LjQgOSAzOC45TDQxNiA0ODhjMCA5LjYtNC4yIDE4LjEtMTAuOCAyNGw0Mi44IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xOTJDNTEyIDExNC42IDM5Ny40IDAgMjU2IDB6TTM2Mi44IDUxMmMtNi42LTUuOS0xMC44LTE0LjQtMTAuOC0yNGwwLTI0LTE5MiAwIDAgMjRjMCA5LjYtNC4yIDE4LjEtMTAuOCAyNGwyMTMuNyAwem0tMTc1LTIzNS41bC0yOS4zIDU5LjUgMTk0LjkgMC0yOS4zLTU5LjVjLTEuMy0yLjctNC4xLTQuNS03LjItNC41TDE5NSAyNzJjLTMgMC01LjggMS43LTcuMiA0LjV6TTE3NiA0MjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0xODQtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhQ2hhcnRDb2x1bW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtY29sdW1uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwZTMiLCAiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzM2YzAgOC44IDcuMiAxNiAxNiAxNmw0MDAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw4MCA0ODBjLTQ0LjIgMC04MC0zNS44LTgwLTgwTDAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJ6TTE0NCAyMjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xNDQtNjRsMCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNjBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptODAgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek01MTIgOTZsMCAyMjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yMjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhVHJ1Y2tBcnJvd1JpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLWFycm93LXJpZ2h0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1OGIiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMy4zIDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NHM3NC4yLTI3LjEgODQuNy02NGwxMDIuNiAwYzEwLjQgMzYuOSA0NC40IDY0IDg0LjcgNjRzNzQuMi0yNy4xIDg0LjctNjRsMy4zIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNDYuN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0w1MTIgMTQ2LjdjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdsLTUwLjcgMCAwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek01MTIgMjM3LjNsMCA1MC43LTk2IDAgMC05NiA1MC43IDAgNDUuMyA0NS4zek0xNTIgMzg0YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHptMjMyIDQwYTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTMwNSAyMjVsLTcyIDcyYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTEwMi4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTAyLjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45eiJdCiAgICB9OwogICAgZmFUdiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0diIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYzNzE3LCAidGVsZXZpc2lvbiIsICJ0di1hbHQiXSwgImYyNmMiLCAiTTY0IDk2bDAgMjQwIDQ0OCAwIDAtMjQwLTQ0OCAwek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDQ0OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjQwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQwMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNMTYwIDQ0OGwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVRlbGV2aXNpb24gPSBmYVR2OwogICAgZmFUdkFsdCA9IGZhVHY7CiAgICBmYVNlY3Rpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2VjdGlvbiIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJlNDQ3IiwgIk0xMTAgMEM0OS4yIDAgMCA0OS4yIDAgMTEwIDAgMTMzLjcgNy42IDE1NS44IDIwLjUgMTc0IDcuNiAxOTIgMCAyMTQuMSAwIDIzOCAwIDI5MS43IDM4LjkgMzM3LjYgOTEuOSAzNDYuNGw2MS43IDEwLjNjMjIuMiAzLjcgMzguNCAyMi45IDM4LjQgNDUuMyAwIDI1LjQtMjAuNiA0Ni00NiA0NmwtOTggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5OCAwYzYwLjcgMCAxMTAtNDkuMiAxMTAtMTEwIDAtMjMuNy03LjYtNDUuOS0yMC41LTY0IDEyLjktMTggMjAuNS00MC4xIDIwLjUtNjQgMC01My44LTM4LjktOTkuNi05MS45LTEwOC41bC02MS43LTEwLjNDODAuMiAxNTEuNiA2NCAxMzIuNCA2NCAxMTAgNjQgODQuNiA4NC42IDY0IDExMCA2NGw5OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyUzIyNS43IDAgMjA4IDBMMTEwIDB6bTc0LjcgMjk5LjFjLTYuNS0yLjQtMTMuNC00LjMtMjAuNS01LjVsLTYxLjctMTAuM2MtMjIuMi0zLjctMzguNC0yMi45LTM4LjQtNDUuMyAwLTkuMiAyLjctMTcuOCA3LjQtMjUgNi41IDIuNCAxMy40IDQuMyAyMC41IDUuNWw2MS43IDEwLjNjMjIuMiAzLjcgMzguNCAyMi45IDM4LjQgNDUuMyAwIDkuMi0yLjcgMTcuOC03LjQgMjV6Il0KICAgIH07CiAgICBmYVBlYWNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlYWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTc3NF0sICJmNjdjIiwgIk0yMjQgNDQ1LjNsMC0xMjEuOC05NC4zIDc3LjFjMjYuMSAyMi44IDU4LjUgMzguNyA5NC4zIDQ0Ljd6TTg5LjIgMzUxLjFMMjI0IDI0MC44IDIyNCA2Ni43Yy05MC44IDE1LjItMTYwIDk0LjItMTYwIDE4OS4zIDAgMzQuNiA5LjIgNjcuMSAyNS4yIDk1LjF6bTI5My4xIDQ5LjVsLTk0LjMtNzcuMSAwIDEyMS44YzM1LjctNiA2OC4xLTIxLjkgOTQuMy00NC43em00MC42LTQ5LjVjMTYtMjggMjUuMi02MC41IDI1LjItOTUuMSAwLTk1LjEtNjkuMi0xNzQuMS0xNjAtMTg5LjNsMCAxNzQuMiAxMzQuOCAxMTAuM3pNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHoiXQogICAgfTsKICAgIGZhU3RhcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3RhciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzExMDg4LCA2MTQ0Nl0sICJmMDA1IiwgIk0zMDkuNS0xOC45Yy00LjEtOC0xMi40LTEzLjEtMjEuNC0xMy4xcy0xNy4zIDUuMS0yMS40IDEzLjFMMTkzLjEgMTI1LjMgMzMuMiAxNTAuN2MtOC45IDEuNC0xNi4zIDcuNy0xOS4xIDE2LjNzLS41IDE4IDUuOCAyNC40bDExNC40IDExNC41LTI1LjIgMTU5LjljLTEuNCA4LjkgMi4zIDE3LjkgOS42IDIzLjJzMTYuOSA2LjEgMjUgMkwyODguMSA0MTcuNiA0MzIuNCA0OTFjOCA0LjEgMTcuNyAzLjMgMjUtMnMxMS0xNC4yIDkuNi0yMy4yTDQ0MS43IDMwNS45IDU1Ni4xIDE5MS40YzYuNC02LjQgOC42LTE1LjggNS44LTI0LjRzLTEwLjEtMTQuOS0xOS4xLTE2LjNMMzgzIDEyNS4zIDMwOS41LTE4Ljl6Il0KICAgIH07CiAgICBmYUZsYWcyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZsYWciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5ODgsIDYxNzI1XSwgImYwMjQiLCAiTTY0IDMyQzY0IDE0LjMgNDkuNyAwIDMyIDBTMCAxNC4zIDAgMzJMMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyMS42IDYyLjctMTguOGM0MS45LTEyLjYgODcuMS04LjcgMTI2LjIgMTAuOSA0Mi43IDIxLjQgOTIuNSAyNCAxMzcuMiA3LjJsMzcuMS0xMy45YzEyLjUtNC43IDIwLjgtMTYuNiAyMC44LTMwbDAtMjQ3LjdjMC0yMy0yNC4yLTM4LTQ0LjgtMjcuN2wtMTEuOCA1LjljLTQ0LjkgMjIuNS05Ny44IDIyLjUtMTQyLjggMC0zNi40LTE4LjItNzguMy0yMS44LTExNy4yLTEwLjFMNjQgNTQuNCA2NCAzMnoiXQogICAgfTsKICAgIGZhVHJpYW5nbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmlhbmdsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk4ODgsICJleGNsYW1hdGlvbi10cmlhbmdsZSIsICJ3YXJuaW5nIl0sICJmMDcxIiwgIk0yNTYgMGMxNC43IDAgMjguMiA4LjEgMzUuMiAyMWwyMTYgNDAwYzYuNyAxMi40IDYuNCAyNy40LS44IDM5LjVTNDg2LjEgNDgwIDQ3MiA0ODBMNDAgNDgwYy0xNC4xIDAtMjcuMi03LjQtMzQuNC0xOS41cy03LjUtMjcuMS0uOC0zOS41bDIxNi00MDBjNy0xMi45IDIwLjUtMjEgMzUuMi0yMXptMCAzNTJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wLTE5MmMtMTguMiAwLTMyLjcgMTUuNS0zMS40IDMzLjdsNy40IDEwNGMuOSAxMi41IDExLjQgMjIuMyAyMy45IDIyLjMgMTIuNiAwIDIzLTkuNyAyMy45LTIyLjNsNy40LTEwNGMxLjMtMTguMi0xMy4xLTMzLjctMzEuNC0zMy43eiJdCiAgICB9OwogICAgZmFFeGNsYW1hdGlvblRyaWFuZ2xlID0gZmFUcmlhbmdsZUV4Y2xhbWF0aW9uOwogICAgZmFXYXJuaW5nID0gZmFUcmlhbmdsZUV4Y2xhbWF0aW9uOwogICAgZmFTY2hvb2xDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2hvb2wtY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NmMiLCAiTTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjc2IDBjLTEwLjUtMTQuNi0xOS0zMC43LTI1LjEtNDhsLTkwLjkgMCAwLTg4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMSAwIDEuOSAwIDIuOSAuMSAyNi4zLTc0LjYgOTcuNS0xMjguMSAxODEuMS0xMjguMSAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTMzLjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDAtMTI3LjktMTE1LjFjLTE4LjMtMTYuNC00Ni0xNi40LTY0LjIgMEwxMjggMTI4IDY0IDEyOHptNjQgMjQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJ6TTExMiAyNTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNnpNMjg4IDEyOGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNNDk2IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYUdyYWR1YXRpb25DYXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3JhZHVhdGlvbi1jYXAiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc4OTEsICJtb3J0YXItYm9hcmQiXSwgImYxOWQiLCAiTTQ4IDE5NS44bDIwOS4yIDg2LjFjOS44IDQgMjAuMiA2LjEgMzAuOCA2LjFzMjEtMi4xIDMwLjgtNi4xbDI0Mi40LTk5LjhjOS0zLjcgMTQuOC0xMi40IDE0LjgtMjIuMXMtNS44LTE4LjQtMTQuOC0yMi4xTDMxOC44IDM4LjFDMzA5IDM0LjEgMjk4LjYgMzIgMjg4IDMycy0yMSAyLjEtMzAuOCA2LjFMMTQuOCAxMzcuOUM1LjggMTQxLjYgMCAxNTAuMyAwIDE2MEwwIDQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjYwLjJ6bTQ4IDcxLjdMOTYgMzg0YzAgNTMgODYgOTYgMTkyIDk2czE5Mi00MyAxOTItOTZsMC0xMTYuNi0xNDIuOSA1OC45Yy0xNS42IDYuNC0zMi4yIDkuNy00OS4xIDkuN3MtMzMuNS0zLjMtNDkuMS05LjdMOTYgMjY3LjR6Il0KICAgIH07CiAgICBmYU1vcnRhckJvYXJkID0gZmFHcmFkdWF0aW9uQ2FwOwogICAgZmFTdG9yZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdG9yZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTRlIiwgIk0zMC43IDcyLjNDMzcuNiA0OC40IDU5LjUgMzIgODQuNCAzMmwzNDQgMGMyNC45IDAgNDYuOCAxNi40IDUzLjggNDAuM2wyMy40IDgwLjJjMTIuOCA0My43LTIwLjEgODcuNS02NS42IDg3LjUtMjYuMyAwLTQ5LjQtMTQuOS02MC44LTM3LjEtMTEuNiAyMS45LTM0LjYgMzcuMS02MS40IDM3LjEtMjYuNiAwLTQ5LjctMTUtNjEuMy0zNy0xMS42IDIyLTM0LjcgMzctNjEuMyAzNy0yNi44IDAtNDkuOC0xNS4xLTYxLjQtMzcuMS0xMS40IDIyLjEtMzQuNSAzNy4xLTYwLjggMzcuMS00NS42IDAtNzguNC00My43LTY1LjYtODcuNUwzMC43IDcyLjN6TTk2LjQgMzUybDMyMCAwIDAtNjYuNGM3LjYgMS42IDE1LjUgMi40IDIzLjUgMi40IDE0LjMgMCAyOC0yLjYgNDAuNS03LjJsMCAxNTEuMmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzUyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTUxLjJjMTIuNSA0LjYgMjYuMSA3LjIgNDAuNSA3LjIgOC4xIDAgMTUuOS0uOCAyMy41LTIuNGwwIDY2LjR6Il0KICAgIH07CiAgICBmYVVzZXJBc3Ryb25hdXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1hc3Ryb25hdXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjRmYiIsICJNMjI0IDMzNmM3NC42IDAgMTM4LjQtNDYuNCAxNjQtMTEybDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTgwYzAtMTMuMy0xMC43LTI0LTI0LTI0bC00IDBDMzYyLjQgMzAuNCAyOTguNi0xNiAyMjQtMTZTODUuNiAzMC40IDYwIDk2bC00IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNCAwYzI1LjYgNjUuNiA4OS40IDExMiAxNjQgMTEyek0yMDggODBsMzIgMGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NmwtMzIgMGMtNTMgMC05Ni00My05Ni05NnM0My05NiA5Ni05NnpNMTYgNDg0LjZDMTYgNDk5LjcgMjguMyA1MTIgNDMuNCA1MTJsNTIuNiAwIDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0OCA1Mi42IDBjMTUuMSAwIDI3LjQtMTIuMyAyNy40LTI3LjQgMC01OS44LTMxLjktMTEyLjItNzkuNi0xNDEtMzYuNCAyNS41LTgwLjYgNDAuNC0xMjguNCA0MC40cy05Mi0xNC45LTEyOC40LTQwLjRDNDcuOSAzNzIuNCAxNiA0MjQuOCAxNiA0ODQuNnpNMTgzLjMgMTQxLjVjLS45LTMuMy0zLjktNS41LTcuMy01LjVzLTYuNCAyLjItNy4zIDUuNWwtNiAyMS4yLTIxLjIgNmMtMy4zIC45LTUuNSAzLjktNS41IDcuM3MyLjIgNi40IDUuNSA3LjNsMjEuMiA2IDYgMjEuMmMuOSAzLjMgMy45IDUuNSA3LjMgNS41czYuNC0yLjIgNy4zLTUuNWw2LTIxLjIgMjEuMi02YzMuMy0uOSA1LjUtMy45IDUuNS03LjNzLTIuMi02LjQtNS41LTcuM2wtMjEuMi02LTYtMjEuMnpNMTUyIDQ4OGwwIDI0IDQ4IDAgMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptMTIwLTI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDI0IDQ4IDAgMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhQnVpbGRpbmdGbGFnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLWZsYWciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRkNSIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpNMTc2IDM1MmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgODAtOTYgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek05NiAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjQwIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTk2IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNDQtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNDY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yODggMTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMkw0OTYgMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6Il0KICAgIH07CiAgICBmYU11Z1NhdWNlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtdWctc2F1Y2VyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImNvZmZlZSJdLCAiZjBmNCIsICJNNjQgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMzUyIDBjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhTNTE4LjcgMjg4IDQ0OCAyODhjMCA1My00MyA5Ni05NiA5NmwtMTkyIDBjLTUzIDAtOTYtNDMtOTYtOTZMNjQgNjR6bTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NGwwIDEyOGMzNS4zIDAgNjQtMjguNyA2NC02NHpNNjQgNDQ4bDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDY0IDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhQ29mZmVlID0gZmFNdWdTYXVjZXI7CiAgICBmYUxlbW9uMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsZW1vbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzgxOV0sICJmMDk0IiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjQtNi42IDAtMTMgMS0xOSAyLjktMjIuNSA3LTQ4LjEgMTQuOS03MSA5LTc1LjItMTkuMS0xNTYuNCAxMS0yMTMuNyA2OC4zUy03LjIgMjUwLjggMTEuOSAzMjZjNS44IDIyLjktMiA0OC40LTkgNzEtMS45IDYtMi45IDEyLjQtMi45IDE5IDAgMzUuMyAyOC43IDY0IDY0IDY0IDYuNiAwIDEzLTEgMTkuMS0yLjkgMjIuNS03IDQ4LjEtMTQuOSA3MS05IDc1LjIgMTkuMSAxNTYuNC0xMSAyMTMuNy02OC4zUzQ1NS4yIDI2MS4yIDQzNi4xIDE4NmMtNS44LTIyLjkgMi00OC40IDktNzEgMS45LTYgMi45LTEyLjQgMi45LTE5LjF6TTIyMi43IDE0M2MtNTIgMTUuMi05Ni41IDU5LjctMTExLjcgMTExLjctMy43IDEyLjctMTcuMSAyMC0yOS44IDE2LjNTNjEuMiAyNTQgNjUgMjQxLjNjMTkuOC02Ny43IDc2LjYtMTI0LjUgMTQ0LjMtMTQ0LjMgMTIuNy0zLjcgMjYuMSAzLjYgMjkuOCAxNi4zcy0zLjYgMjYuMS0xNi4zIDI5Ljh6Il0KICAgIH07CiAgICBmYUNhcmF2YW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FyYXZhbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmOGZmIiwgIk0zMiA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGwwIDE5MiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yOTYuNCAwYy4yIDIuNiAuNCA1LjMgLjQgOCAwIDQ4LjYtMzkuNCA4OC04OCA4OHMtODgtMzkuNC04OC04OGMwLTIuNyAuMS01LjQgLjQtOEw5NiA0MTZjLTM1LjMgMC02NC0yOC43LTY0LTY0TDMyIDk2ek0zNTIgMzUybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC00OC0yNCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDI0IDAgMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJ6TTE2MCAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwem02NCAzMzZhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdCiAgICB9OwogICAgZmFRID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMTNdLCAiNTEiLCAiTTY0IDI1NmMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MCAyOC45IDAgNTYtNy43IDc5LjQtMjEuMWwtNzItODYuNGMtMTEuMy0xMy42LTkuNS0zMy44IDQuMS00NS4xczMzLjgtOS41IDQ1LjEgNC4xbDcwLjkgODUuMWMyMC40LTI2LjggMzIuNS02MC4zIDMyLjUtOTYuNiAwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MFM2NCAxNjcuNiA2NCAyNTZ6TTM0NC45IDQ0NC42QzMxMCA0NjcgMjY4LjUgNDgwIDIyNCA0ODAgMTAwLjMgNDgwIDAgMzc5LjcgMCAyNTZTMTAwLjMgMzIgMjI0IDMyIDQ0OCAxMzIuMyA0NDggMjU2YzAgNTYuMS0yMC42IDEwNy40LTU0LjcgMTQ2LjdsNDcuMyA1Ni44YzExLjMgMTMuNiA5LjUgMzMuOC00LjEgNDUuMXMtMzMuOCA5LjUtNDUuMS00LjFsLTQ2LjYtNTUuOXoiXQogICAgfTsKICAgIGZhTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsb2NrIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4Mjc0XSwgImYwMjMiLCAiTTEyOCA5NmwwIDY0IDEyOCAwIDAtNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjR6TTY0IDE2MGwwLTY0QzY0IDI1LjMgMTIxLjMtMzIgMTkyLTMyUzMyMCAyNS4zIDMyMCA5NmwwIDY0YzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyMjRjMC0zNS4zIDI4LjctNjQgNjQtNjR6Il0KICAgIH07CiAgICBmYVBhaW50Um9sbGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhaW50LXJvbGxlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWFhIiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwzNTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwxNiAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgOTZjMCA0NC4yLTM1LjggODAtODAgODBsLTE2MCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxOC43YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTE4LjdjMC00NC4yIDM1LjgtODAgODAtODBsMTYwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtOTZjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDE5MmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHoiXQogICAgfTsKICAgIGZhVm9sdW1lSGlnaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2b2x1bWUtaGlnaCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODI2NiwgInZvbHVtZS11cCJdLCAiZjAyOCIsICJNNTMzLjYgMzIuNWMtMTAuMy04LjQtMjUuNC02LjgtMzMuOCAzLjVzLTYuOCAyNS40IDMuNSAzMy44QzU1Ny41IDExMy44IDU5MiAxODAuOCA1OTIgMjU2cy0zNC41IDE0Mi4yLTg4LjcgMTg2LjNjLTEwLjMgOC40LTExLjggMjMuNS0zLjUgMzMuOHMyMy41IDExLjggMzMuOCAzLjVDNTk4LjUgNDI2LjcgNjQwIDM0Ni4yIDY0MCAyNTZTNTk4LjUgODUuMiA1MzMuNiAzMi41ek00NzMuMSAxMDdjLTEwLjMtOC40LTI1LjQtNi44LTMzLjggMy41cy02LjggMjUuNCAzLjUgMzMuOEM0NzUuMyAxNzAuNyA0OTYgMjEwLjkgNDk2IDI1NnMtMjAuNyA4NS4zLTUzLjIgMTExLjhjLTEwLjMgOC40LTExLjggMjMuNS0zLjUgMzMuOHMyMy41IDExLjggMzMuOCAzLjVjNDMuMi0zNS4yIDcwLjktODguOSA3MC45LTE0OXMtMjcuNy0xMTMuOC03MC45LTE0OXptLTYwLjUgNzQuNWMtMTAuMy04LjQtMjUuNC02LjgtMzMuOCAzLjVzLTYuOCAyNS40IDMuNSAzMy44QzM5My4xIDIyNy42IDQwMCAyNDEgNDAwIDI1NnMtNi45IDI4LjQtMTcuNyAzNy4zYy0xMC4zIDguNC0xMS44IDIzLjUtMy41IDMzLjhzMjMuNSAxMS44IDMzLjggMy41QzQzNC4xIDMxMi45IDQ0OCAyODYuMSA0NDggMjU2cy0xMy45LTU2LjktMzUuNC03NC41ek04MCAzNTJsNDggMCAxMzQuMSAxMTkuMmM2LjQgNS43IDE0LjYgOC44IDIzLjEgOC44IDE5LjIgMCAzNC44LTE1LjYgMzQuOC0zNC44bDAtMzc4LjRjMC0xOS4yLTE1LjYtMzQuOC0zNC44LTM0LjgtOC41IDAtMTYuNyAzLjEtMjMuMSA4LjhMMTI4IDE2MCA4MCAxNjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDh6Il0KICAgIH07CiAgICBmYVZvbHVtZVVwID0gZmFWb2x1bWVIaWdoOwogICAgZmFGb2xkZXJQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZvbGRlci1wbHVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2NWUiLCAiTTUxMiAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDEzOC43IDBjMTMuOCAwIDI3LjMgNC41IDM4LjQgMTIuOGwzOC40IDI4LjhjNS41IDQuMiAxMi4zIDYuNCAxOS4yIDYuNEw0NDggODBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDB6TTI1NiAxNjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDgtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwIDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQ4IDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhTWVyY3VyeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtZXJjdXJ5IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTc5MV0sICJmMjIzIiwgIk0xMTctNEMxMDYtMTcuOCA4NS44LTIwIDcyLjEtOXMtMTYgMzEuMi01IDQ1Qzc0LjkgNDUuNyA4My43IDU0LjUgOTMuNSA2Mi4xIDQ2LjcgOTMuNyAxNiAxNDcuMyAxNiAyMDggMTYgMjk0LjMgNzguMSAzNjYuMSAxNjAgMzgxLjFsMCAzNC45LTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMzQuOWM4MS45LTE1IDE0NC04Ni44IDE0NC0xNzMuMSAwLTYwLjctMzAuNy0xMTQuMy03Ny41LTE0NS45IDkuOC03LjcgMTguNy0xNi40IDI2LjQtMjYuMSAxMS4xLTEzLjggOC44LTMzLjktNS00NVMyNzgtMTcuOCAyNjctNGMtMTcuNiAyMi00NC43IDM2LTc1IDM2UzEzNC43IDE4IDExNy00em03NSAzMjRjLTYxLjkgMC0xMTItNTAuMS0xMTItMTEyUzEzMC4xIDk2IDE5MiA5NiAzMDQgMTQ2LjEgMzA0IDIwOGMwIDYxLjgtNTAuMSAxMTItMTExLjkgMTEybC0uMSAweiJdCiAgICB9OwogICAgZmFBbmNob3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYW5jaG9yIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTg3NV0sICJmMTNkIiwgIk0yODggNjRhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0ek0xOTIgOTZjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmMwIDQxLjgtMjYuNyA3Ny40LTY0IDkwLjVsMCAyNTcuOWM2Mi45LTE0LjMgMTEwLjItNjkuNyAxMTEuOS0xMzYuNWwtMTYuMSAxNC4xYy0xMCA4LjctMjUuMSA3LjctMzMuOS0yLjNzLTcuNy0yNS4xIDIuMy0zMy45bDY0LTU2YzktNy45IDIyLjYtNy45IDMxLjYgMGw2NCA1NmMxMCA4LjcgMTEgMjMuOSAyLjMgMzMuOXMtMjMuOSAxMS0zMy45IDIuM0w0OTYgMzA3LjlDNDkzLjkgNDIxIDQwMS42IDUxMiAyODggNTEyUzgyLjEgNDIxIDgwIDMwNy45TDYzLjggMzIyLjFjLTEwIDguNy0yNS4xIDcuNy0zMy45LTIuM3MtNy43LTI1LjEgMi4zLTMzLjlsNjQtNTZjOS03LjkgMjIuNi03LjkgMzEuNiAwbDY0IDU2YzEwIDguNyAxMSAyMy45IDIuMyAzMy45cy0yMy45IDExLTMzLjkgMi4zbC0xNi4xLTE0LjFjMS44IDY2LjggNDkuMSAxMjIuMiAxMTEuOSAxMzYuNWwwLTI1Ny45Yy0zNy4zLTEzLjItNjQtNDguNy02NC05MC41eiJdCiAgICB9OwogICAgZmFTcXVhcmVQYXJraW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1wYXJraW5nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3MzU5LCAicGFya2luZyJdLCAiZjU0MCIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMTkyIDI1Nmw0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00OCAwIDAgNjR6bTQ4IDY0bC00OCAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xODRjMC0yMi4xIDE3LjktNDAgNDAtNDBsNzIgMGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NnoiXQogICAgfTsKICAgIGZhUGFya2luZyA9IGZhU3F1YXJlUGFya2luZzsKICAgIGZhSGFudWtpYWggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFudWtpYWgiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjgzMzRdLCAiZjZlNiIsICJNMzE0LjIgMy4zYy01LjEgOC44LTE4LjIgMzMuMy0xOC4yIDUyLjcgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zem0tMjg4IDQ4QzIxLjEgNjAuMSA4IDg0LjYgOCAxMDQgOCAxMTcuMyAxOC43IDEyOCAzMiAxMjhzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zek04OCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zQzEwMS4xIDYwLjEgODggODQuNiA4OCAxMDR6bTgyLjItNTIuN2MtNS4xIDguOC0xOC4yIDMzLjMtMTguMiA1Mi43IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM3pNMjE2IDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDMjI5LjEgNjAuMSAyMTYgODQuNiAyMTYgMTA0ek0zOTQuMiA1MS4zYy01LjEgOC44LTE4LjIgMzMuMy0xOC4yIDUyLjcgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zek00NDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM0M0NTMuMSA2MC4xIDQ0MCA4NC42IDQ0MCAxMDR6bTgyLjItNTIuN2MtNS4xIDguOC0xOC4yIDMzLjMtMTguMiA1Mi43IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM3pNNTg0IDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDNTk3LjEgNjAuMSA1ODQgODQuNiA1ODQgMTA0ek0xMTIgMTYwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTIgMzIgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZ6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMiAzMiAwIDAtMTEyYzAtOC44LTcuMi0xNi0xNi0xNnptNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTEyIDMyIDAgMC0xMTJjMC04LjgtNy4yLTE2LTE2LTE2em0xNjAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTEyIDMyIDAgMC0xMTJjMC04LjgtNy4yLTE2LTE2LTE2em02NCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTIgMzIgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZ6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMiAzMiAwIDAtMTEyYzAtOC44LTcuMi0xNi0xNi0xNnpNMzUyIDE0NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE3Ni0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDE3NC4zIDAgMTkybDAgOTZjMCA1MyA0MyA5NiA5NiA5NmwxOTIgMCAwIDY0LTEyOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMjggMCAwLTY0IDE5MiAwYzUzIDAgOTYtNDMgOTYtOTZsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xOTIgMCAwLTE3NnoiXQogICAgfTsKICAgIGZhUm90YXRlTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb3RhdGUtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJyb3RhdGUtYmFjayIsICJyb3RhdGUtYmFja3dhcmQiLCAidW5kby1hbHQiXSwgImYyZWEiLCAiTTI0IDE5MmwxNDQgMGM5LjcgMCAxOC41LTUuOCAyMi4yLTE0LjhzMS43LTE5LjMtNS4yLTI2LjJsLTQ2LjctNDYuN2M3NS4zLTU4LjYgMTg0LjMtNTMuMyAyNTMuNSAxNS45IDc1IDc1IDc1IDE5Ni41IDAgMjcxLjVzLTE5Ni41IDc1LTI3MS41IDBjLTEwLjItMTAuMi0xOS0yMS4zLTI2LjQtMzMtOS41LTE0LjktMjkuMy0xOS4zLTQ0LjItOS44cy0xOS4zIDI5LjMtOS44IDQ0LjJDNDkuNyA0MDguNyA2MS40IDQyMy41IDc1IDQzNyAxNzUgNTM3IDMzNyA1MzcgNDM3IDQzN1M1MzcgMTc1IDQzNyA3NUMzNDIuOC0xOS4zIDE5My4zLTI0LjcgOTIuNyA1OC44TDQxIDdDMzQuMSAuMiAyMy44LTEuOSAxNC44IDEuOFMwIDE0LjMgMCAyNEwwIDE2OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHoiXQogICAgfTsKICAgIGZhUm90YXRlQmFjayA9IGZhUm90YXRlTGVmdDsKICAgIGZhUm90YXRlQmFja3dhcmQgPSBmYVJvdGF0ZUxlZnQ7CiAgICBmYVVuZG9BbHQgPSBmYVJvdGF0ZUxlZnQ7CiAgICBmYUhlYWRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhZGluZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJoZWFkZXIiXSwgImYxZGMiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYgMCAwIDExMiAyMjQgMCAwLTExMi0xNiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE2IDAgMCAzMjAgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwIDAtMTQ0LTIyNCAwIDAgMTQ0IDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYgMCAwLTMyMC0xNiAwQzE0LjMgOTYgMCA4MS43IDAgNjR6Il0KICAgIH07CiAgICBmYUhlYWRlciA9IGZhSGVhZGluZzsKICAgIGZhQ3Jvc3NoYWlycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjcm9zc2hhaXJzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYwNWIiLCAiTTI4OC0xNmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE4LjNjOTguMSAxNCAxNzUuNyA5MS42IDE4OS43IDE4OS43bDE4LjMgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTguMyAwYy0xNCA5OC4xLTkxLjYgMTc1LjctMTg5LjcgMTg5LjdsMCAxOC4zYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTguM0MxNTcuOSA0NjMuNyA4MC4zIDM4Ni4xIDY2LjMgMjg4TDQ4IDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxOC4zIDBDODAuMyAxMjUuOSAxNTcuOSA0OC4zIDI1NiAzNC4zTDI1NiAxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTMxLjIgMjg4YzEyLjcgNjIuNyA2Mi4xIDExMi4xIDEyNC44IDEyNC44bDAtMTIuOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTIuOGM2Mi43LTEyLjcgMTEyLjEtNjIuMSAxMjQuOC0xMjQuOEw0MzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDEyLjggMEM0MzIuMSAxNjEuMyAzODIuNyAxMTEuOSAzMjAgOTkuMmwwIDEyLjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMi44QzE5My4zIDExMS45IDE0My45IDE2MS4zIDEzMS4yIDIyNGwxMi44IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEyLjggMHpNMjg4IDIwOGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6Il0KICAgIH07CiAgICBmYUNpcmNsZU5vZGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1ub2RlcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGUyIiwgIk00MTguNCAxNTcuOWMzNS4zLTguMyA2MS42LTQwIDYxLjYtNzcuOSAwLTQ0LjItMzUuOC04MC04MC04MC00My40IDAtNzguNyAzNC41LTgwIDc3LjVMMTM2LjIgMTUxLjFDMTIxLjcgMTM2LjggMTAxLjkgMTI4IDgwIDEyOCAzNS44IDEyOCAwIDE2My44IDAgMjA4czM1LjggODAgODAgODBjMTIuMiAwIDIzLjgtMi43IDM0LjEtNy42TDI1OS43IDQwNy44Yy0yLjQgNy42LTMuNyAxNS44LTMuNyAyNC4yIDAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0yNy43LTE0LTUyLjEtMzUuNC02Ni40bDM3LjgtMjA3Ljd6TTE1Ni4zIDIzMi4yYzIuMi02LjkgMy41LTE0LjIgMy43LTIxLjdsMTgzLjgtNzMuNWMzLjYgMy41IDcuNCA2LjcgMTEuNiA5LjVMMzE3LjYgMzU0LjFjLTUuNSAxLjMtMTAuOCAzLjEtMTUuOCA1LjVMMTU2LjMgMjMyLjJ6Il0KICAgIH07CiAgICBmYVdpbmRvd1Jlc3RvcmUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndpbmRvdy1yZXN0b3JlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyZDIiLCAiTTUxMiA5NkwxNjAgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTQ4IDAgMC02NCA0OCAwIDAtMTkyek0wIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NGwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE5MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjI0em02NCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwyNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw4OCAyNDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0eiJdCiAgICB9OwogICAgZmFSID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInIiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMTRdLCAiNTIiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCA5NS4zIDAgMTAyLjQgMTQ2LjRjMTAuMSAxNC41IDMwLjEgMTggNDQuNiA3LjlzMTgtMzAuMSA3LjktNDQuNkwyMzAuMSAzMDkuNUMyODIuOCAyODguMSAzMjAgMjM2LjQgMzIwIDE3NiAzMjAgOTYuNSAyNTUuNSAzMiAxNzYgMzJMMzIgMzJ6TTE3NiAyNTZsLTExMiAwIDAtMTYwIDExMiAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwcy0zNS44IDgwLTgwIDgweiJdCiAgICB9OwogICAgZmFGaWx0ZXJDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWx0ZXItY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUxN2IiLCAiTTMyIDY0QzE5LjEgNjQgNy40IDcxLjggMi40IDgzLjhTLjIgMTA5LjUgOS40IDExOC42TDE5MiAzMDEuMyAxOTIgNDE2YzAgOC41IDMuNCAxNi42IDkuNCAyMi42bDY0IDY0YzIuNSAyLjUgNS4zIDQuNSA4LjMgNi0yMS4yLTMwLjktMzMuNi02OC4zLTMzLjYtMTA4LjYgMC05OS40IDc1LjUtMTgxLjEgMTcyLjMtMTkxbDkwLjQtOTAuNGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0OTIuOSA2NCA0ODAgNjRMMzIgNjR6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43bC0zNi43IDM2LjcgMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42eiJdCiAgICB9OwogICAgZmFHb3B1cmFtID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdvcHVyYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjY2NCIsICJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA4IDQwIDAgMC04YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA4IDQ4IDAgMC04YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA4IDQwIDAgMC04YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMzZjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA4MGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDEyOGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtNDggMCAwLTIyNC0zMiAwIDAtMTI4LTQ4IDAgMCAxMjggMzIgMCAwIDIyNC0yMjQgMCAwLTIyNCAzMiAwIDAtMTI4LTQ4IDAgMCAxMjgtMzIgMCAwIDIyNC00OCAwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDMzNmMwLTI2LjUgMjEuNS00OCA0OC00OGwwLTgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4TDk2IDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0ek0yNTYgMjA4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4IDY0IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMjA4IDQwMGwwIDY0IDk2IDAgMC02NGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHpNMjU2IDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyIDY0IDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhSGVhcnRDaXJjbGVNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydC1jaXJjbGUtbWludXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRmZiIsICJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDE3LjYtMy40IDM1LjYtOS41IDUzLjctMjEuOC04LjYtNDUuNi0xMy40LTcwLjUtMTMuNC0xMDYgMC0xOTIgODYtMTkyIDE5MiAwIDI4LjUgNi4yIDU1LjYgMTcuNCA4MC0uNSAwLS45IDAtMS40IDAtMTUuNSAwLTMwLjgtNC42LTQzLjEtMTQuMS03My01NS43LTIxMi45LTE4Ni0yMTIuOS0yOTguMmwwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXpNMjg4IDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMjQgMGMwLTguOC03LjItMTYtMTYtMTZsLTEyOCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDEyOCAwYzguOCAwIDE2LTcuMiAxNi0xNnoiXQogICAgfTsKICAgIGZhU3Rhck9mTGlmZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFyLW9mLWxpZmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjYyMSIsICJNMjA4LjUgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE0MC45IDEyMi03MC40YzE1LjMtOC44IDM0LjktMy42IDQzLjcgMTEuN2wxNiAyNy43YzguOCAxNS4zIDMuNiAzNC45LTExLjcgNDMuN2wtMTIyIDcwLjQgMTIyIDcwLjRjMTUuMyA4LjggMjAuNiAyOC40IDExLjcgNDMuN2wtMTYgMjcuN2MtOC44IDE1LjMtMjguNCAyMC42LTQzLjcgMTEuN2wtMTIyLTcwLjQgMCAxNDAuOWMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNDAuOS0xMjIgNzAuNGMtMTUuMyA4LjgtMzQuOSAzLjYtNDMuNy0xMS43bC0xNi0yNy43Yy04LjgtMTUuMy0zLjYtMzQuOSAxMS43LTQzLjdsMTIyLTcwLjQtMTIyLTcwLjRjLTE1LjMtOC44LTIwLjUtMjguNC0xMS43LTQzLjdsMTYtMjcuN2M4LjgtMTUuMyAyOC40LTIwLjUgNDMuNy0xMS43bDEyMiA3MC40IDAtMTQwLjl6Il0KICAgIH07CiAgICBmYUJ1c2luZXNzVGltZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidXNpbmVzcy10aW1lIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImJyaWVmY2FzZS1jbG9jayJdLCAiZjY0YSIsICJNMjY0IDQ4bDExMiAwYzQuNCAwIDggMy42IDggOGwwIDQwLTEyOCAwIDAtNDBjMC00LjQgMy42LTggOC04em0tNTYgOGwwIDQwLTgwIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgOTYgMzA1IDBjMzMuOC0yOS45IDc4LjMtNDggMTI3LTQ4IDI4LjYgMCA1NS42IDYuMiA4MCAxNy40bDAtNjUuNGMwLTM1LjMtMjguNy02NC02NC02NGwtODAgMCAwLTQwYzAtMzAuOS0yNS4xLTU2LTU2LTU2TDI2NCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NnptODAgMjk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2LTE5MiAwIDAgMTEyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5My40IDBjLTExLjItMjQuNC0xNy40LTUxLjQtMTcuNC04MCAwLTE2LjYgMi4xLTMyLjcgNi00OGwtMjIgMHptMzUyIDQ4YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6TTQ5NiAzMjBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDggMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNDggMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNjRjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFCcmllZmNhc2VDbG9jayA9IGZhQnVzaW5lc3NUaW1lOwogICAgZmFGaXJlRXh0aW5ndWlzaGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpcmUtZXh0aW5ndWlzaGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTE5XSwgImYxMzQiLCAiTTUxMiAzMmMwLTkuNi00LjMtMTguNy0xMS43LTI0LjdTNDgzLjEtMS4zIDQ3My43IC42bC0xNjAgMzJDMzAxLjUgMzUuMSAyOTIgNDQuMyAyODkgNTZsLTY1IDAgMC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMkwxNjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyOC40Yy01NS4zIDEyLjMtMTAxLjMgNDkuNS0xMjUuNSA5OS4xLTUuOCAxMS45LS45IDI2LjMgMTEuMSAzMi4xczI2LjMgLjkgMzIuMS0xMS4xQzYyIDE0Ni45IDkxLjggMTIxLjEgMTI4IDExMGwwIDI4LjhjLTM3LjggMTgtNjQgNTYuNS02NCAxMDEuMmwwIDEyOCAyMjQgMCAwLTEyOGMwLTQ0LjctMjYuMi04My4yLTY0LTEwMS4ybDAtMzQuOCA2NSAwYzMgMTEuNyAxMi41IDIwLjkgMjQuNyAyMy40bDE2MCAzMmM5LjQgMS45IDE5LjEtLjYgMjYuNi02LjZTNTEyIDEzNy42IDUxMiAxMjhsMC05NnpNMjg4IDQ0OGwwLTMyLTIyNCAwIDAgMzJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsOTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NHoiXQogICAgfTsKICAgIGZhQXJyb3dEb3duTG9uZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLWxvbmciLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsibG9uZy1hcnJvdy1kb3duIl0sICJmMTc1IiwgIk0xMzcuNCA1MzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDE5MiA0MzQuNyAxOTIgMGMwLTE3LjctMTQuMy0zMi0zMi0zMlMxMjgtMTcuNyAxMjggMGwwIDQzNC43LTczLjQtNzMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTI4IDEyOHoiXQogICAgfTsKICAgIGZhTG9uZ0Fycm93RG93biA9IGZhQXJyb3dEb3duTG9uZzsKICAgIGZhVXNlck1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItbWludXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjUwMyIsICJNMTM2IDEyOGExMjAgMTIwIDAgMSAxIDI0MCAwIDEyMCAxMjAgMCAxIDEgLTI0MCAwek00OCA0ODIuM0M0OCAzODMuOCAxMjcuOCAzMDQgMjI2LjMgMzA0bDU5LjQgMGM5OC41IDAgMTc4LjMgNzkuOCAxNzguMyAxNzguMyAwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0w3Ny43IDUxMkM2MS4zIDUxMiA0OCA0OTguNyA0OCA0ODIuM3pNNDcyIDE2OGwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYU1vbmV5Q2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9uZXktY2hlY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUzYyIsICJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHpNOTYgMzEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTI0LTEzNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjcyIDB6Il0KICAgIH07CiAgICBmYUhvdXNlTGFwdG9wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWxhcHRvcCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJsYXB0b3AtaG91c2UiXSwgImUwNjYiLCAiTTQ0OCAyNDBsMTkuOSAwYzE1LjUgMCAyOC4xLTEyLjYgMjguMS0yOC4xIDAtNy42LTMuMS0xNC45LTguNi0yMC4yTDI4My41LTQuOUMyNzYuMS0xMiAyNjYuMy0xNiAyNTYtMTZzLTIwLjEgNC0yNy41IDExLjFMMjQuNiAxOTEuN0MxOS4xIDE5NyAxNiAyMDQuMyAxNiAyMTEuOSAxNiAyMjcuNCAyOC42IDI0MCA0NC4xIDI0MGwxOS45IDAgMCAxNDRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODUuNyAwYzcuNC02LjYgMTYuNC0xMS40IDI2LjMtMTRsMC0xMzBjMC01LjUgLjctMTAuOSAyLTE2bC0xMCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyNCAxNDQgMHpNMzUyIDM1MmwxNjAgMCAwIDEyOC0xNjAgMCAwLTEyOHptLTY0LTMybDAgMTYwLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDI2LjUgMjEuNSA0OCA0OCA0OGwyODggMGMyNi41IDAgNDgtMjEuNSA0OC00OCAwLTguOC03LjItMTYtMTYtMTZsLTMyIDAgMC0xNjBjMC0xNy43LTE0LjMtMzItMzItMzJsLTIyNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnoiXQogICAgfTsKICAgIGZhTGFwdG9wSG91c2UgPSBmYUhvdXNlTGFwdG9wOwogICAgZmFEb3dubG9hZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb3dubG9hZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDE5IiwgIk0yNTYgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMTAuNy00MS40LTQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDI1NiAyNDIuNyAyNTYgMzJ6TTY0IDMyMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzMmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC00Ni45IDAtNTYuNiA1Ni42Yy0zMS4yIDMxLjItODEuOSAzMS4yLTExMy4xIDBMMTEwLjkgMzIwIDY0IDMyMHptMzA0IDU2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXQogICAgfTsKICAgIGZhQ291Y2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY291Y2giLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjRiOCIsICJNMTQ0IDI3MkMxNDQgMjI0LjcgMTA5LjggMTg1LjQgNjQuOCAxNzcuNSA3MiAxMTMuNiAxMjYuMiA2NCAxOTIgNjRsMjU2IDBjNjUuOCAwIDEyMCA0OS42IDEyNy4yIDExMy41LTQ1IDgtNzkuMiA0Ny4yLTc5LjIgOTQuNWwwIDMyLTM1MiAwIDAtMzJ6TTAgMzg0TDAgMjcyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCA4MCA0NDggMCAwLTgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCAxMTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NHoiXQogICAgfTsKICAgIGZhUm9hZExvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9hZC1sb2NrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1NjciLCAiTTI1NiAzMmwtNzYuMyAwYy0yOS40IDAtNTUuMSAyMC4xLTYyLjEgNDguNkwzMy40IDQyMC41QzI1LjkgNDUwLjcgNDguOCA0ODAgODAgNDgwbDE3NS45IDAgMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMiA2LjEgMCAxMS44IDEuNyAxNi43IDQuNyAyLjgtMjMuOSAxNC4zLTQ1LjEgMzEuNC02MC4zbDAtMjQuNGMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOCA2LjIgMCAxMi40IC40IDE4LjQgMS4zTDQ1OC41IDgwLjZDNDUxLjQgNTIuMSA0MjUuOCAzMiAzOTYuMyAzMmwtNzYuNCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHptNjQgMTkybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem0xNzYgODAuMWwwIDQ3LjktNjQgMCAwLTQ3LjljMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNMzUyIDQwMGwwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEyOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yMC45LTEzLjQtMzguNy0zMi00NS4zbDAtNTAuNmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGwwIDUwLjZjLTE4LjYgNi42LTMyIDI0LjQtMzIgNDUuM3oiXQogICAgfTsKICAgIGZhU2Npc3NvcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2Npc3NvcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5OTg0LCA5OTg2LCA5OTg4LCAiY3V0Il0sICJmMGM0IiwgIk0xOTIgMjU2bC0zOS41IDM5LjVjLTEyLjYtNC45LTI2LjItNy41LTQwLjUtNy41LTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEyczUwLjEgMTEyIDExMiAxMTIgMTEyLTUwLjEgMTEyLTExMmMwLTE0LjMtMi43LTI3LjktNy41LTQwLjVMNDk5LjIgNzYuOGM3LjEtNy4xIDcuMS0xOC41IDAtMjUuNi0yOC4zLTI4LjMtNzQuMS0yOC4zLTEwMi40IDBMMjU2IDE5MiAyMTYuNSAxNTIuNWM0LjktMTIuNiA3LjUtMjYuMiA3LjUtNDAuNSAwLTYxLjktNTAuMS0xMTItMTEyLTExMlMwIDUwLjEgMCAxMTIgNTAuMSAyMjQgMTEyIDIyNGMxNC4zIDAgMjcuOS0yLjcgNDAuNS03LjVMMTkyIDI1NnptOTcuOSA5Ny45TDM5Ni44IDQ2MC44YzI4LjMgMjguMyA3NC4xIDI4LjMgMTAyLjQgMCA3LjEtNy4xIDcuMS0xOC41IDAtMjUuNmwtMTQ1LjMtMTQ1LjMtNjQgNjR6TTY0IDExMmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem00OCAyNDBhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2eiJdCiAgICB9OwogICAgZmFDdXQgPSBmYVNjaXNzb3JzOwogICAgZmFCdWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVnIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxODgiLCAiTTE5MiA5NmMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgMy42YzAgMTUuNy0xMi43IDI4LjQtMjguNCAyOC40bC0xMzUuMSAwYy0xNS43IDAtMjguNC0xMi43LTI4LjQtMjguNGwwLTMuNnptMzQ1LjYgMTIuOGMxMC42IDE0LjEgNy43IDM0LjItNi40IDQ0LjhsLTk3LjggNzMuM2M1LjMgOC45IDkuMyAxOC43IDExLjggMjkuMWw5OC44IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDAgMCAzMmMwIDIuNi0uMSA1LjMtLjIgNy45bDgzLjQgNjIuNWMxNC4xIDEwLjYgMTcgMzAuNyA2LjQgNDQuOHMtMzAuNyAxNy00NC44IDYuNGwtNjMuMS00Ny4zYy0yMy4yIDQ0LjItNjYuNSA3Ni4yLTExNy43IDgzLjlMMzEyIDI4MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIzMC4yYy01MS4yLTcuNy05NC41LTM5LjctMTE3LjctODMuOUw4My4yIDQ3My42Yy0xNC4xIDEwLjYtMzQuMiA3LjctNDQuOC02LjRzLTcuNy0zNC4yIDYuNC00NC44bDgzLjQtNjIuNWMtLjEtMi42LS4yLTUuMi0uMi03LjlsMC0zMi05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk4LjggMGMyLjUtMTAuNCA2LjUtMjAuMiAxMS44LTI5LjFMNDQuOCAxNTMuNmMtMTQuMS0xMC42LTE3LTMwLjctNi40LTQ0LjhzMzAuNy0xNyA0NC44LTYuNEwxOTIgMTg0YzEyLjMtNS4xIDI1LjgtOCA0MC04bDExMiAwYzE0LjIgMCAyNy43IDIuOCA0MCA4bDEwOC44LTgxLjZjMTQuMS0xMC42IDM0LjItNy43IDQ0LjggNi40eiJdCiAgICB9OwogICAgZmFBcnJvd1JpZ2h0RnJvbUJyYWNrZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcmlnaHQtZnJvbS1icmFja2V0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNpZ24tb3V0Il0sICJmMDhiIiwgIk0xNjAgOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMOTYgMzJDNDMgMzIgMCA3NSAwIDEyOEwwIDM4NGMwIDUzIDQzIDk2IDk2IDk2bDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDB6TTUwMi42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w0MDIuNyAyMjQgMTkyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyMTAuNyAwLTczLjQgNzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4eiJdCiAgICB9OwogICAgZmFTaWduT3V0ID0gZmFBcnJvd1JpZ2h0RnJvbUJyYWNrZXQ7CiAgICBmYUhhbmRIb2xkaW5nSGFuZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWhvbGRpbmctaGFuZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGY3IiwgIk00NjYuOCAxODYuNWw0Mi41LTQyLjUgMzQuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMjIzLjYgMTZjLTI5IDAtNTcuMyA5LjMtODAuNyAyNi41TDE2LjMgMTM1LjhjLTE3LjggMTMuMS0yMS42IDM4LjEtOC41IDU1LjlzMzguMSAyMS42IDU1LjkgOC41TDE4My40IDExMiAyOTYgMTEyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC03MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE1Mi4yIDBjMzMuOSAwIDY2LjUtMTMuNSA5MC41LTM3LjV6bS0zNTcuNSAxMzlMNjYuNyAzNjggMzIgMzY4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMC41IDBjMjkgMCA1Ny4zLTkuMyA4MC43LTI2LjVsMTI2LjYtOTMuM2MxNy44LTEzLjEgMjEuNi0zOC4xIDguNS01NS45cy0zOC4xLTIxLjYtNTUuOS04LjVMMzkyLjYgNDAwIDI4MCA0MDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUyLjIgMGMtMzMuOSAwLTY2LjUgMTMuNS05MC41IDM3LjV6Il0KICAgIH07CiAgICBmYVN0cm9vcHdhZmVsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0cm9vcHdhZmVsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1NTEiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTMxMi42IDYzLjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwTDI1NiA5Ny42IDIyMi4xIDYzLjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsMzMuOSAzMy45LTQ1LjMgNDUuMy01Ni42LTU2LjZjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNTYuNiA1Ni42LTQ1LjMgNDUuMy0zMy45LTMzLjljLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZMOTcuNiAyNTYgNjMuNyAyODkuOWMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDMzLjktMzMuOSA0NS4zIDQ1LjMtNTYuNiA1Ni42Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsNTYuNi01Ni42IDQ1LjMgNDUuMy0zMy45IDMzLjljLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGwzMy45LTMzLjkgMzMuOSAzMy45YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtMzMuOS0zMy45IDQ1LjMtNDUuMyA1Ni42IDU2LjZjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC01Ni42LTU2LjYgNDUuMy00NS4zIDMzLjkgMzMuOWM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTMzLjktMzMuOSAzMy45LTMzLjljNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMGwtMzMuOSAzMy45LTQ1LjMtNDUuMyA1Ni42LTU2LjZjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMGwtNTYuNiA1Ni42LTQ1LjMtNDUuMyAzMy45LTMzLjljNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6TTE0Mi45IDI1Nmw0NS4zLTQ1LjMgNDUuMyA0NS4zLTQ1LjMgNDUuMy00NS4zLTQ1LjN6bTY3LjkgNjcuOWw0NS4zLTQ1LjMgNDUuMyA0NS4zLTQ1LjMgNDUuMy00NS4zLTQ1LjN6TTI3OC42IDI1Nmw0NS4zLTQ1LjMgNDUuMyA0NS4zLTQ1LjMgNDUuMy00NS4zLTQ1LjN6bTIyLjYtNjcuOWwtNDUuMyA0NS4zLTQ1LjMtNDUuMyA0NS4zLTQ1LjMgNDUuMyA0NS4zeiJdCiAgICB9OwogICAgZmFDaGlsZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGlsZCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMWFlIiwgIk05NiA2NEE2NCA2NCAwIDEgMSAyMjQgNjQgNjQgNjQgMCAxIDEgOTYgNjR6bTQ4IDMyMGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyTDgwIDI4Ny44IDU5LjEgMzIxYy05LjQgMTUtMjkuMiAxOS40LTQ0LjEgMTBTLTQuNSAzMDEuOSA0LjkgMjg3bDM5LjktNjMuM0M2OS43IDE4NCAxMTMuMiAxNjAgMTYwIDE2MHM5MC4zIDI0IDExNS4yIDYzLjZMMzE1LjEgMjg3YzkuNCAxNSA0LjkgMzQuNy0xMCA0NC4xcy0zNC43IDQuOS00NC4xLTEwTDI0MCAyODcuOCAyNDAgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTYtMzIgMHoiXQogICAgfTsKICAgIGZhSWNlQ3JlYW0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaWNlLWNyZWFtIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI3ODQ4XSwgImY4MTAiLCAiTTMzNS4xIDE2MGMuNi01LjMgLjktMTAuNiAuOS0xNiAwLTc5LjUtNjQuNS0xNDQtMTQ0LTE0NFM0OCA2NC41IDQ4IDE0NGMwIDUuNCAuMyAxMC43IC45IDE2bC0uOSAwYy0yNi41IDAtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4bDI4OCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4bC0uOSAwek02NCAzMDRMMTY5LjIgNTI5LjVjNC4xIDguOCAxMyAxNC41IDIyLjggMTQuNXMxOC42LTUuNyAyMi44LTE0LjVMMzIwIDMwNCA2NCAzMDR6Il0KICAgIH07CiAgICBmYUNvbXB1dGVyTW91c2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tcHV0ZXItbW91c2UiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjg0MzMsICJtb3VzZSJdLCAiZjhjYyIsICJNMCAxOTJsMTY4IDAgMC0xOTItOCAwQzcxLjYgMCAwIDcxLjYgMCAxNjBsMCAzMnptMCA0OEwwIDM1MmMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MGw2NCAwYzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwbDAtMTEyLTM4NCAwem0zODQtNDhsMC0zMkMzODQgNzEuNiAzMTIuNCAwIDIyNCAwbC04IDAgMCAxOTIgMTY4IDB6Il0KICAgIH07CiAgICBmYU1vdXNlID0gZmFDb21wdXRlck1vdXNlOwogICAgZmFGYXVjZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmF1Y2V0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwMDUiLCAiTTE5MiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDAgMCA2NCAxOC43IDBjOC41IDAgMTYuNiAzLjQgMjIuNiA5LjRsMjIuNiAyMi42IDMyIDBjODguNCAwIDE2MCA3MS42IDE2MCAxNjAgMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMycy0xNC4zLTMyLTMyLTMybC0zNi4xIDBjLTIwLjIgMjktNTMuOSA0OC05MS45IDQ4cy03MS43LTE5LTkxLjktNDhMMzIgMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDAgMjIuNi0yMi42YzYtNiAxNC4xLTkuNCAyMi42LTkuNGwxOC43IDAgMC02NC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDY0IDk2IDY0bDk2IDB6Il0KICAgIH07CiAgICBmYUF3YXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImF3YXJkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1NTkiLCAiTTI0NS45LTI1LjljLTEzLjQtOC4yLTMwLjMtOC4yLTQzLjcgMC0yNC40IDE0LjktMzkuNSAxOC45LTY4LjEgMTguMy0xNS43LS40LTMwLjMgOC4xLTM3LjkgMjEuOS0xMy43IDI1LjEtMjQuOCAzNi4yLTQ5LjkgNDkuOS0xMy44IDcuNS0yMi4yIDIyLjItMjEuOSAzNy45IC43IDI4LjYtMy40IDQzLjctMTguMyA2OC4xLTguMiAxMy40LTguMiAzMC4zIDAgNDMuNyAxNC45IDI0LjQgMTguOSAzOS41IDE4LjMgNjguMS0uNCAxNS43IDguMSAzMC4zIDIxLjkgMzcuOSAyMi4xIDEyLjEgMzMuMyAyMi4xIDQ1LjEgNDEuNUw0Mi43IDQ1OC41Yy01LjkgMTEuOS0xLjEgMjYuMyAxMC43IDMyLjJsODYgNDNjMTEuNSA1LjcgMjUuNSAxLjQgMzEuNy05LjhsNTIuOC05NS4xIDUyLjggOTUuMWM2LjIgMTEuMiAyMC4yIDE1LjYgMzEuNyA5LjhsODYtNDNjMTEuOS01LjkgMTYuNy0yMC4zIDEwLjctMzIuMmwtNDguNi05Ny4yYzExLjctMTkuNCAyMy0yOS40IDQ1LjEtNDEuNSAxMy44LTcuNSAyMi4yLTIyLjIgMjEuOS0zNy45LS43LTI4LjYgMy40LTQzLjcgMTguMy02OC4xIDguMi0xMy40IDguMi0zMC4zIDAtNDMuNy0xNC45LTI0LjQtMTguOS0zOS41LTE4LjMtNjguMSAuNC0xNS43LTguMS0zMC4zLTIxLjktMzcuOS0yNS4xLTEzLjctMzYuMi0yNC44LTQ5LjktNDkuOS03LjUtMTMuOC0yMi4yLTIyLjItMzcuOS0yMS45LTI4LjYgLjctNDMuNy0zLjQtNjguMS0xOC4zek0yMjQgOTZhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6Il0KICAgIH07CiAgICBmYVBlcnNvbkRyb3duaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1kcm93bmluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTQ1IiwgIk0yNjQgODhhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMzMuOSA2NS42YzE2LjgtNS42IDM0LjkgMy41IDQwLjUgMjAuMmwxMC45IDMyLjhjOS40IDI4LjMgMzMuMiA0OS41IDYyLjUgNTUuNiA1LjYgMS4yIDExLjMgMS44IDE3LjEgMS44bDg4IDBjMTcuMiAwIDM0LjMtMi44IDUwLjYtOC4ybDExNC40LTM4LjFjMTYuOC01LjYgMzQuOSAzLjUgNDAuNSAyMC4ycy0zLjUgMzQuOS0yMC4yIDQwLjVMNDIzLjcgMjI4LjVjLTguNCAyLjgtMTcgNS4xLTI1LjcgNi45bC0yNi41IDg4LjNjLTYuMSAzLjQtMTIuMSA3LjMtMTcuOSAxMS43LTIyLjEgMTYuNi0yOS4xIDE2LjYtNTEuMiAwLTI2LjItMTkuNy01Ni45LTMwLjItODcuOC0zMS4zbDIwLjItNjcuMmMtNTEuNS0xMC43LTkzLjUtNDguMS0xMTAuMi05OGwtMTAuOS0zMi44Yy01LjYtMTYuOCAzLjUtMzQuOSAyMC4yLTQwLjV6TTQwMy40IDQxMi4xQzM3OS4xIDQzMC4zIDM1MS4xIDQ0OCAzMjAgNDQ4cy01OS4xLTE3LjctODMuNC0zNS45Yy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0yMy44IDE3LjktNTQuMSAzNS41LTg4LjEgMzUuMy0yMC40LS4xLTQwLjctNi43LTU5LjgtMjEuMS0xMC42LTgtMTIuNy0yMy00LjctMzMuNnMyMy0xMi43IDMzLjYtNC43YzExLjMgOC41IDIxLjYgMTEuNCAzMS4yIDExLjUgMTcuNiAuMSAzNy4zLTkuNCA1OC45LTI1LjcgMzguNC0yOSA5MC41LTI5IDEyOSAwIDI0IDE4LjEgNDAuNyAyNi4zIDU0LjUgMjYuM3MzMC41LTguMiA1NC41LTI2LjNjMzguNC0yOSA5MC41LTI5IDEyOSAwIDE2LjkgMTIuNyAzMi45IDIxLjUgNDcuOCAyNC42IDEzLjcgMi44IDI3LjQgLjkgNDIuMy0xMC4zIDEwLjYtOCAyNS42LTUuOSAzMy42IDQuN3M1LjkgMjUuNi00LjcgMzMuNmMtMjYuNCAxOS45LTU0LjIgMjQuNC04MC43IDE5LjEtMjUuMy01LjEtNDguMS0xOC45LTY3LjItMzMuMy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMHoiXQogICAgfTsKICAgIGZhQ2FtZXJhUm90YXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbWVyYS1yb3RhdGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTBkOCIsICJNMTM4LjcgOTZsMTAuNC0zMS4yQzE1NS42IDQ1LjIgMTczLjkgMzIgMTk0LjYgMzJsMTIyLjggMGMyMC43IDAgMzkgMTMuMiA0NS41IDMyLjhMMzczLjMgOTYgNDQ4IDk2YzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjRsNzQuNyAwek05NiAzMDUuOWMwIDMuOSAxLjQgNy43IDQgMTAuNmw0OCA1NGM2LjQgNy4yIDE3LjYgNy4yIDIzLjkgMGw0OC01NGMyLjYtMi45IDQtNi43IDQtMTAuNmwwLTEuOWMwLTguOC03LjItMTYtMTYtMTZsLTI0IDBjMC0zOS44IDMyLjItNzIgNzItNzIgNC40IDAgOC43IC40IDEyLjkgMS4ybDM0LjktMzkuM2MtMTQuNi02LjQtMzAuOC05LjktNDcuOC05LjktNjYuMyAwLTEyMCA1My43LTEyMCAxMjBsLTI0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDEuOXptMTk2LTQ2LjVjLTIuNiAyLjktNCA2LjctNCAxMC42bDAgMS45YzAgOC44IDcuMiAxNiAxNiAxNmwyNCAwYzAgMzkuOC0zMi4yIDcyLTcyIDcyLTQuNCAwLTguNy0uNC0xMi45LTEuMmwtMzQuOSAzOS4zYzE0LjcgNi40IDMwLjggOS45IDQ3LjggOS45IDY2LjMgMCAxMjAtNTMuNyAxMjAtMTIwbDI0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMS45YzAtMy45LTEuNC03LjctNC0xMC42bC00OC01NGMtNi40LTcuMi0xNy42LTcuMi0yMy45IDBsLTQ4IDU0eiJdCiAgICB9OwogICAgZmFGYWNlR3JpbkhlYXJ0czIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLWhlYXJ0cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUyNSwgImdyaW4taGVhcnRzIl0sICJmNTg0IiwgIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTYgMC0yMy4zLTMuMS00NS45LTguOS02Ny4zIDUuNS0xMy41IDguOS0yOC40IDguOS00NC43IDAtNTMtNDMtOTYtOTYtOTZsLTIuOSAwYy0yLjUgMC01IC4xLTcuNCAuMy00Mi4xLTMwLjQtOTMuOC00OC4zLTE0OS43LTQ4LjNTMTQ4LjQgMTcuOSAxMDYuMyA0OC4zYy0yLjUtLjItNC45LS4zLTcuNC0uM0w5NiA0OGMtNTMgMC05NiA0My05NiA5NiAwIDE2LjMgMy41IDMxLjIgOC45IDQ0LjctNS44IDIxLjQtOC45IDQ0LTguOSA2Ny4zIDAgMTQxLjQgMTE0LjYgMjU2IDI1NiAyNTZ6TTM4Ni43IDMyNC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSA0MDQuMiAxMDUuNyAzNDIuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xek0zMjIuOSA5NmMxMy41IDAgMjYuNSA1LjQgMzYgMTQuOWw5LjEgOS4xIDkuMS05LjFjOS41LTkuNSAyMi41LTE0LjkgMzYtMTQuOWwyLjkgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDUzLjQtNjYuOSA5NS43LTg5IDEwOC4yLTQuNCAyLjUtOS42IDIuNS0xNCAwLTIyLjEtMTIuNS04OS01NC44LTg5LTEwOC4yIDAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDIuOSAwem0tMTg4IDE0LjlsOS4xIDkuMSA5LjEtOS4xYzkuNS05LjUgMjIuNS0xNC45IDM2LTE0LjlsMi45IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCA1My40LTY2LjkgOTUuNy04OSAxMDguMi00LjQgMi41LTkuNiAyLjUtMTQgMC0yMi4xLTEyLjUtODktNTQuOC04OS0xMDguMiAwLTI2LjUgMjEuNS00OCA0OC00OGwyLjkgMGMxMy41IDAgMjYuNSA1LjQgMzYgMTQuOXoiXQogICAgfTsKICAgIGZhR3JpbkhlYXJ0czIgPSBmYUZhY2VHcmluSGVhcnRzMjsKICAgIGZhRmlsZUZyYWdtZW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtZnJhZ21lbnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTY5NyIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRsMCAyNDAgMTI4IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCAxMjggMTEyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzcuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNTguNyAxOC43QzI0Ni43IDYuNyAyMzAuNSAwIDIxMy41IDBMNjQgMHpNMzI1LjUgMTc2TDIzMiAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDIwOCA1OC41IDMyNS41IDE3NnpNMzIgMzUyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMHoiXQogICAgfTsKICAgIGZhUGVyc29uTWlsaXRhcnlSaWZsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tbWlsaXRhcnktcmlmbGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTU0YiIsICJNMTI4IDM5YzAtMTMgMTAtMjMuOCAyMi45LTI0LjlMMzAyLjcgMS40QzMxMiAuNyAzMjAgOCAzMjAgMTcuNEwzMjAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2TDE1MyA2NGMtMTMuOCAwLTI1LTExLjItMjUtMjV6bTE3LjYgNTdsMTU2LjggMGMxIDUuMiAxLjYgMTAuNSAxLjYgMTYgMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBjMC01LjUgLjYtMTAuOCAxLjYtMTZ6bTIyOCAzNjQuM0wzMjAgMzY5LjcgMzIwIDQ4MGMwIDEuMy0uMSAyLjUtLjIgMy44TDE0NS41IDIzNC45YzE2LjYtNy4xIDM0LjYtMTAuOSA1My4zLTEwLjlsNTAuNCAwYzE1LjkgMCAzMS4zIDIuOCA0NS44IDcuOUwzODkuOSA2Ny43Yy03LjctNC40LTEwLjMtMTQuMi01LjktMjEuOXMxNC4yLTEwLjMgMjEuOS01LjlsMjcuNyAxNmM3LjcgNC40IDEwLjMgMTQuMiA1LjkgMjEuOWwtNTUuNSA5Ni4xIDEuNiAuOWMxNS4zIDguOCAyMC42IDI4LjQgMTEuNyA0My43TDM2MC43IDI4MmMyIDIuOCAzLjkgNS44IDUuNyA4LjhsNzYuMSAxMjguOGMxMS4yIDE5IDQuOSA0My41LTE0LjEgNTQuOHMtNDMuNSA0LjktNTQuOC0xNC4xek0yODggNTEybC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMTAuMy01My42IDkwLjZjLTExLjIgMTktMzUuOCAyNS4zLTU0LjggMTQuMVMtNS43IDQzOC43IDUuNiA0MTkuN0w4MS43IDI5MC44YzkuNC0xNS44IDIxLjctMjkuMyAzNi00MEwyOTkuMSA1MTBjLTMuNSAxLjMtNy4yIDItMTEuMSAyek0yNjQgMzIwYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhVG9nZ2xlT24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9nZ2xlLW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyMDUiLCAiTTE5MiA2NEM4NiA2NCAwIDE1MCAwIDI1NlM4NiA0NDggMTkyIDQ0OGwxOTIgMGMxMDYgMCAxOTItODYgMTkyLTE5MlM0OTAgNjQgMzg0IDY0TDE5MiA2NHptMTkyIDk2YTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyeiJdCiAgICB9OwogICAgZmFMdW5nc1ZpcnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImx1bmdzLXZpcnVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwNjciLCAiTTI4OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE1MS4zYzkuNi00LjggMjAuNS03LjUgMzItNy41czIyLjQgMi43IDMyIDcuNUwzMjAgMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTQ1MC4xIDQ1MWM4IDE4LjMgOC4xIDM5LjIgLjIgNTcuNSAxMC4yIDIuMyAyMC42IDMuNSAzMS4yIDMuNSA1Mi4yIDAgOTQuNS00Mi4zIDk0LjUtOTQuNWwwLTYuMmMwLTExMS4xLTM2LjctMjE5LTEwNC40LTMwN0w0MjguOSA0OC43Yy04LjEtMTAuNi0yMC43LTE2LjctMzQtMTYuNy0yMy43IDAtNDIuOSAxOS4yLTQyLjkgNDIuOWwwIDEzOS45YzEuMiAyLjIgMi4yIDQuNiAzLjEgNi45IDI2LjQtMTEuNiA1OC4zLTYuNiA3OS45IDE1czI2LjYgNTMuNiAxNSA3OS45QzQ3NyAzMjcuMiA0OTYgMzUzLjMgNDk2IDM4My44cy0xOSA1Ni43LTQ1LjkgNjcuMXpNMjIwLjkgMjIxLjhjLjktMi40IDItNC43IDMuMS02LjlsMC0xMzguNWMwLTI0LjUtMTkuOS00NC40LTQ0LjQtNDQuNC0xMi41IDAtMjQuNCA1LjMtMzIuOCAxNC41bC0yNi40IDI5QzQyLjkgMTYwLjggMCAyNzEuOCAwIDM4N2wwIDMwLjVjMCA1Mi4yIDQyLjMgOTQuNSA5NC41IDk0LjUgMTAuNSAwIDIxLTEuMiAzMS4yLTMuNS03LjktMTguMy03LjgtMzkuMyAuMi01Ny41LTI2LjktMTAuNC00NS45LTM2LjYtNDUuOS02Ny4xczE5LTU2LjcgNDUuOS02Ny4xYy0xMS42LTI2LjQtNi42LTU4LjMgMTUtNzkuOXM1My42LTI2LjYgNzkuOS0xNXpNMTUyIDQwOGMyOC44IDAgNDMuMiAzNC44IDIyLjkgNTUuMi05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBjMjAuNC0yMC40IDU1LjItNS45IDU1LjIgMjIuOSAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMjguOCAzNC44LTQzLjIgNTUuMi0yMi45IDkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWMtMjAuNC0yMC40LTUuOS01NS4yIDIyLjktNTUuMiAxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGMtMjguOCAwLTQzLjItMzQuOC0yMi45LTU1LjIgOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGMtMjAuNCAyMC40LTU1LjIgNS45LTU1LjItMjIuOSAwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDI4LjgtMzQuOCA0My4yLTU1LjIgMjIuOS05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45YzIwLjQgMjAuNCA1LjkgNTUuMi0yMi45IDU1LjItMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHptMTA0LTgwYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNDAgODhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlLXRlbm5pcy1wYWRkbGUtYmFsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk1NSwgInBpbmctcG9uZy1wYWRkbGUtYmFsbCIsICJ0YWJsZS10ZW5uaXMiXSwgImY0NWQiLCAiTTk3IDEyN2w2Ny40LTY3LjRjMzguMi0zOC4yIDkwLTU5LjYgMTQ0LTU5LjYgMTEyLjUgMCAyMDMuNyA5MS4yIDIwMy43IDIwMy42IDAgNDYuNC0xNS44IDkxLjEtNDQuNSAxMjctMjMuNi0xNi44LTUyLjQtMjYuNy04My41LTI2LjctMzEuMSAwLTU5LjkgOS45LTgzLjQgMjYuNkw5NyAxMjd6TTI0MCA0NDhjMCA5LjcgMSAxOS4xIDIuOCAyOC4yLTE5LjgtNS4yLTM4LTE1LjUtNTIuNy0zMC4yLTEyLjItMTIuMi0zMS45LTEyLjItNDQuMSAwTDk2LjYgNDk1LjRjLTEwLjYgMTAuNi0yNSAxNi42LTQwIDE2LjYtMzEuMiAwLTU2LjYtMjUuMy01Ni42LTU2LjYgMC0xNSA2LTI5LjQgMTYuNi00MGw0OS40LTQ5LjRjMTIuMi0xMi4yIDEyLjItMzEuOSAwLTQ0LjEtMjEuNy0yMS43LTMzLjktNTEuMi0zMy45LTgxLjkgMC0yOS40IDExLjEtNTcuNiAzMS4xLTc5TDI2Ni42IDM2NC42QzI0OS45IDM4OC4xIDI0MCA0MTYuOSAyNDAgNDQ4em0xNDQtOTZhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6Il0KICAgIH07CiAgICBmYVBpbmdQb25nUGFkZGxlQmFsbCA9IGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsOwogICAgZmFUYWJsZVRlbm5pcyA9IGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsOwogICAgZmFCb3hlc1BhY2tpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm94ZXMtcGFja2luZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGM3IiwgIk0yMDggMGw4MCAwIDAgNTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTU2IDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0MTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEwOC44IDBjOC4yLTE0LjEgMTIuOC0zMC41IDEyLjgtNDhsMC0xNjBjMTAtMTMuNCAxNi0zMCAxNi00OGwwLTMyYzAtNDQuMi0zNS44LTgwLTgwLTgwbC0xNzYgMCAwLTk2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4ek0zMiAzMzZsMzIwIDAgMCAxMjhjMCAyNi41LTIxLjUgNDgtNDggNDhMODAgNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTEyOHpNNDggMTkybDI4OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJMNDggMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFQZXJzb25DaGFsa2JvYXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jaGFsa2JvYXJkIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1M2QiLCAiTTE5MiA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNMTc2IDUxMmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMzYgMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2IDAgMC00OCAxOTIgMCAwIDE5Mi0xOTIgMCAwLTMyLTY0IDAgMCA0OGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyMjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIyNGMwLTI2LjUtMjEuNS00OC00OC00OEwzNjggMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NC0xMjIuNyAwYy00NS42IDAtODguNSAyMS42LTExNS42IDU4LjJMMTQuMyAyNjAuOWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDExMiAyMzYuNyAxMTIgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6Il0KICAgIH07CiAgICBmYURpY2VUd28gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGljZS10d28iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODU3XSwgImY1MjgiLCAiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek0zNTIgMzUyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTEyOCAxOTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFBcnJvd1JpZ2h0QXJyb3dMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXJpZ2h0LWFycm93LWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs4NjQ0LCAiZXhjaGFuZ2UiXSwgImYwZWMiLCAiTTUwMi42IDE1MC42bC05NiA5NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMNDAyLjcgMTYwIDMyIDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyA5NiAzMiA5NmwzNzAuNyAwLTQxLjQtNDEuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3ptLTM5Ny4zIDM1MmwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDk2LTk2YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMTA5LjMgMzUyIDQ4MCAzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM3MC43IDAgNDEuNCA0MS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAweiJdCiAgICB9OwogICAgZmFFeGNoYW5nZSA9IGZhQXJyb3dSaWdodEFycm93TGVmdDsKICAgIGZhRm9vdGJhbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9vdGJhbGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NDQsICJmb290YmFsbC1iYWxsIl0sICJmNDRlIiwgIk0yNjEuMSAyMi42Yy04OSAxOC0xNTAuNSA2My40LTE5MCAxMjMuOS0yMy4zIDM1LjYtMzguMSA3NS4zLTQ2LjcgMTE1LjVMMjUxLjkgNDg5LjRjODktMTggMTUwLjUtNjMuNCAxOTAuMS0xMjMuOSAyMy4zLTM1LjYgMzguMS03NS4zIDQ2LjctMTE1LjVMMjYxLjEgMjIuNnptMjM2IDE2OC4xYzMuMi00Mi4zIC43LTgzLjMtNC44LTExOC43LTQuNC0yNy44LTI2LjgtNDgtNTMuMS01MS42LTQzLTUuOS04Mi4yLTcuNS0xMTcuOC01LjRMNDk3LjEgMTkwLjZ6TTE5MS43IDQ5Ny4xTDE1LjkgMzIxLjRjLTMuMiA0Mi4zLS43IDgzLjMgNC44IDExOC43IDQuNCAyNy44IDI2LjggNDggNTMuMSA1MS42IDQzIDUuOSA4Mi4yIDcuNSAxMTcuOCA1LjR6TTI3MS41IDE0M2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw2NCA2NGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC02NC02NGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6bS02NCA2NGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw2NCA2NGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC02NC02NGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6bS02NCA2NGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw2NCA2NGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC02NC02NGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYUZvb3RiYWxsQmFsbCA9IGZhRm9vdGJhbGw7CiAgICBmYVRydWNrTW9uc3RlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1tb25zdGVyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2M2IiLCAiTTMzNiA5Nmw0OCA2NC0xMjggMCAwLTY0IDgwIDB6bTEyOCA2NEwzODcuMiA1Ny42QzM3NS4xIDQxLjUgMzU2LjEgMzIgMzM2IDMyTDIyNCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA5Ni0xNDQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NGMwIDE4LjEgMTAuMSAzMy45IDI0LjkgNDIuMS0uNSA1LjcgMS4xIDExLjYgNC43IDE2LjQtMy43IDYuOS02LjggMTQuMS05IDIxLjgtMTEuNiAxLjctMjAuNiAxMS43LTIwLjYgMjMuOGwwIDE2YzAgMTIuMSA4LjkgMjIuMSAyMC42IDIzLjggMi4yIDcuNiA1LjMgMTQuOSA5IDIxLjgtNyA5LjQtNi4zIDIyLjggMi4zIDMxLjNsMTEuMyAxMS4zYzguNiA4LjYgMjEuOSA5LjMgMzEuMyAyLjIgNi44IDMuNyAxNC4xIDYuOCAyMS43IDkgMS43IDExLjYgMTEuNyAyMC42IDIzLjggMjAuNmwxNiAwYzEyLjEgMCAyMi4xLTguOSAyMy44LTIwLjYgNy42LTIuMiAxNC45LTUuMyAyMS43LTkgOS40IDcgMjIuOCA2LjMgMzEuMy0yLjJsMTEuMy0xMS4zYzguNi04LjYgOS4zLTIxLjkgMi4zLTMxLjMgMy43LTYuOCA2LjgtMTQuMSA5LTIxLjcgMTEuNi0xLjcgMjAuNi0xMS43IDIwLjYtMjMuOGwwLTE2YzAtMTIuMS04LjktMjIuMS0yMC42LTIzLjgtMi4yLTcuNi01LjMtMTQuOS05LTIxLjcgMi40LTMuMiAzLjktNi44IDQuNS0xMC41bDExNC4yIDBjLjYgMy43IDIuMSA3LjMgNC41IDEwLjUtMy43IDYuOS02LjggMTQuMS05IDIxLjgtMTEuNiAxLjctMjAuNiAxMS43LTIwLjYgMjMuOGwwIDE2YzAgMTIuMSA4LjkgMjIuMSAyMC42IDIzLjggMi4yIDcuNiA1LjMgMTQuOSA5IDIxLjgtNyA5LjQtNi4zIDIyLjggMi4yIDMxLjNsMTEuMyAxMS4zYzguNSA4LjYgMjEuOSA5LjMgMzEuMyAyLjIgNi44IDMuNyAxNC4xIDYuOCAyMS43IDkgMS43IDExLjYgMTEuNyAyMC42IDIzLjggMjAuNmwxNiAwYzEyLjEgMCAyMi4xLTguOSAyMy44LTIwLjYgNy42LTIuMiAxNC45LTUuMyAyMS44LTkgOS40IDcgMjIuOCA2LjMgMzEuMy0yLjJsMTEuMy0xMS4zYzguNi04LjYgOS4zLTIxLjkgMi4yLTMxLjMgMy43LTYuOCA2LjgtMTQuMSA5LTIxLjcgMTEuNi0xLjcgMjAuNi0xMS43IDIwLjYtMjMuOGwwLTE2YzAtMTIuMS04LjktMjIuMS0yMC42LTIzLjgtMi4yLTcuNi01LjMtMTQuOS05LTIxLjcgMy42LTQuOCA1LjItMTAuNyA0LjctMTYuNCAxNC44LTguMiAyNC45LTIzLjkgMjQuOS00Mi4xbDAtNjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDB6TTEyOCAzMzZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0yNzIgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXQogICAgfTsKICAgIGZhQXN0ZXJpc2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXN0ZXJpc2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMDAzMywgNjE1NDVdLCAiMmEiLCAiTTIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTY4LjYgMTQ0LTgzLjFjMTUuMy04LjggMzQuOS0zLjYgNDMuNyAxMS43czMuNiAzNC45LTExLjcgNDMuN0wyODggMjU2IDQzMiAzMzkuMWMxNS4zIDguOCAyMC42IDI4LjQgMTEuNyA0My43cy0yOC40IDIwLjYtNDMuNyAxMS43TDI1NiAzMTEuNCAyNTYgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTY4LjYtMTQ0IDgzLjFjLTE1LjMgOC44LTM0LjkgMy42LTQzLjctMTEuN1MuNyAzNDggMTYgMzM5LjFMMTYwIDI1NiAxNiAxNzIuOUMuNyAxNjQtNC41IDE0NC41IDQuMyAxMjkuMVMzMi43IDEwOC42IDQ4IDExNy40TDE5MiAyMDAuNiAxOTIgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUJhdHRlcnlGdWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhdHRlcnktZnVsbCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODI2NywgImJhdHRlcnkiLCAiYmF0dGVyeS01Il0sICJmMjQwIiwgIk01MjggMTI4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDIyNGMwIDguOC03LjIgMTYtMTYgMTZsLTQxNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yMjRjMC04LjggNy4yLTE2IDE2LTE2bDQxNiAwek0xMTIgNjRjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjI0YzAgNDQuMiAzNS44IDgwIDgwIDgwbDQxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwwLTQ4YzAtNDQuMi0zNS44LTgwLTgwLTgwTDExMiA2NHptNTYgMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwzMDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMzA0IDB6Il0KICAgIH07CiAgICBmYUJhdHRlcnkgPSBmYUJhdHRlcnlGdWxsOwogICAgZmFCYXR0ZXJ5NSA9IGZhQmF0dGVyeUZ1bGw7CiAgICBmYUNoaWxkRHJlc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hpbGQtZHJlc3MiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZTU5YyIsICJNMjI0IDY0QTY0IDY0IDAgMSAwIDk2IDY0IDY0IDY0IDAgMSAwIDIyNCA2NHpNODggNDAwbDAgODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTgwIDE2IDAgMCA4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtODAgMTcuOCAwYzEwLjkgMCAxOC42LTEwLjcgMTUuMi0yMS4xbC0zMS4xLTkzLjQgMjguNyAzNy44YzEwLjcgMTQuMSAzMC44IDE2LjggNDQuOCA2LjJzMTYuOC0zMC43IDYuMi00NC44TDI1NC42IDIwN2MtMjIuNC0yOS42LTU3LjUtNDctOTQuNi00N3MtNzIuMiAxNy40LTk0LjYgNDdMNi41IDI4NC43Yy0xMC43IDE0LjEtNy45IDM0LjIgNi4yIDQ0LjhzMzQuMiA3LjkgNDQuOC02LjJMODYuMiAyODUuNSA1NSAzNzguOUM1MS42IDM4OS4zIDU5LjMgNDAwIDcwLjIgNDAwTDg4IDQwMHoiXQogICAgfTsKICAgIGZhRmFjZUtpc3NCZWFtMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWtpc3MtYmVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUzNywgImtpc3MtYmVhbSJdLCAiZjU5NyIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTI0MCAyODhsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDEyLjMtNC42IDIzLjUtMTIuMiAzMiA3LjYgOC41IDEyLjIgMTkuNyAxMi4yIDMyIDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpNMTc2IDE4MGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHptMTMyIDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6Il0KICAgIH07CiAgICBmYUtpc3NCZWFtMiA9IGZhRmFjZUtpc3NCZWFtMjsKICAgIGZhVHJhc2hDYW5BcnJvd1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyYXNoLWNhbi1hcnJvdy11cCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ0cmFzaC1yZXN0b3JlLWFsdCJdLCAiZjgyYSIsICJNMTY3LjEtMTZsMTEzLjkgMGMxMy44IDAgMjYgOC44IDMwLjQgMjEuOUwzMjAgMzIgNDE2IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMmw5NiAwIDguNy0yNi4xQzE0MS4xLTcuMiAxNTMuMy0xNiAxNjcuMS0xNnpNMzIgMTQ0bDM4NCAwIDAgMzA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMDR6bTIwOSA3OWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTcyIDcyYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzEtMzEgMCAxMDIuMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTAyLjEgMzEgMzFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC03Mi03MnoiXQogICAgfTsKICAgIGZhVHJhc2hSZXN0b3JlQWx0ID0gZmFUcmFzaENhbkFycm93VXA7CiAgICBmYUZvbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9udCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMDMxIiwgIk0yODUuMSA1MC43QzI3OS45IDM5LjMgMjY4LjUgMzIgMjU2IDMycy0yMy45IDcuMy0yOS4xIDE4LjdMNTkuNSA0MTYgNDggNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTYuMSAwIDIyLTQ4IDIwOC4zIDAgMjIgNDgtNi4xIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTEuNSAwLTE2Ny40LTM2NS4zek0zMzAuOCAzMDRMMTgxLjIgMzA0IDI1NiAxNDAuOCAzMzAuOCAzMDR6Il0KICAgIH07CiAgICBmYUJvcmVIb2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvcmUtaG9sZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGMzIiwgIk0yNTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyMzIuNmMtMTkuMSAxMS4xLTMyIDMxLjctMzIgNTUuNCAwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0YzAtMjMuNy0xMi45LTQ0LjQtMzItNTUuNEwyODggMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTAgMzg0bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzJjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQ4IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTQ0YzAgNjEuOS01MC4xIDExMi0xMTIgMTEyUzE0NCAzODEuOSAxNDQgMzIwbDAtMTQ0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC00OCAwYy0yNi41IDAtNDggMjEuNS00OCA0OEwwIDM4NHoiXQogICAgfTsKICAgIGZhVmlydXNDb3ZpZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aXJ1cy1jb3ZpZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGE4IiwgIk0xOTIgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMCAwIDMzLjZjMzAuNyA0LjIgNTguOCAxNi4zIDgyLjMgMzQuMUwzODYuMSA5MiAzNzQuOCA4MC42Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNTYuNiA1Ni42YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTExLjMtMTEuMy0yMy44IDIzLjhjMTcuOSAyMy41IDI5LjkgNTEuNyAzNC4xIDgyLjNsMzMuNiAwIDAtMTZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDgwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTYtMzMuNiAwYy00LjIgMzAuNy0xNi4zIDU4LjgtMzQuMSA4Mi4zbDIzLjggMjMuOCAxMS4zLTExLjNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC01Ni42IDU2LjZjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMTEuMy0xMS4zLTIzLjgtMjMuOGMtMjMuNSAxNy45LTUxLjcgMjkuOS04Mi4zIDM0LjFsMCAzMy42IDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTYgMCAwLTMzLjZjLTMwLjctNC4yLTU4LjgtMTYuMy04Mi4zLTM0LjFsLTIzLjggMjMuOCAxMS4zIDExLjNjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEw0Ni43IDQwOC43Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMTEuMyAxMS4zIDIzLjgtMjMuOEM5Ny45IDMzOC44IDg1LjggMzEwLjcgODEuNiAyODBsLTMzLjYgMCAwIDE2YzAgMTMuMy0xMC43IDI0LTI0IDI0UzAgMzA5LjMgMCAyOTZsMC04MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTYgMzMuNiAwYzQuMi0zMC43IDE2LjMtNTguOCAzNC4xLTgyLjNMOTIgMTI1LjkgODAuNiAxMzcuMmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1Ni42LTU2LjZjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDEyNS45IDkyIDE0OS43IDExNS43YzIzLjUtMTcuOSA1MS43LTI5LjkgODIuMy0zNC4xbDAtMzMuNi0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMzIgMjAwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTk2IDk2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhRmlsZVBkZjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1wZGYiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFjMSIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw4MCAwIDAtMTEyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDE3NiAwIDAtMTY1LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTI0MCAzODBjLTExIDAtMjAgOS0yMCAyMGwwIDEyOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTI4IDEyIDBjMzMuMSAwIDYwLTI2LjkgNjAtNjBzLTI2LjktNjAtNjAtNjBsLTMyIDB6bTMyIDgwbC0xMiAwIDAtNDAgMTIgMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjB6bTk2LTgwYy0xMSAwLTIwIDktMjAgMjBsMCAxMjhjMCAxMSA5IDIwIDIwIDIwbDMyIDBjMjguNyAwIDUyLTIzLjMgNTItNTJsMC02NGMwLTI4LjctMjMuMy01Mi01Mi01MmwtMzIgMHptMjAgMTI4bDAtODggMTIgMGM2LjYgMCAxMiA1LjQgMTIgMTJsMCA2NGMwIDYuNi01LjQgMTItMTIgMTJsLTEyIDB6bTg4LTEwOGwwIDEyOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTQ0IDI4IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC0yOCAwIDAtMjQgMjggMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTQ4IDBjLTExIDAtMjAgOS0yMCAyMHoiXQogICAgfTsKICAgIGZhTGFuZ3VhZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGFuZ3VhZ2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFhYiIsICJNMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOS42IDAtOC40IDIzLjFjLTE2LjQgNDUuMi00MS4xIDg2LjUtNzIuMiAxMjIgMTQuMiA4LjggMjkgMTYuNiA0NC40IDIzLjVsNTAuNCAyMi40IDYyLjItMTQwYzUuMS0xMS42IDE2LjYtMTkgMjkuMi0xOXMyNC4xIDcuNCAyOS4yIDE5bDEyOCAyODhjNy4yIDE2LjItLjEgMzUuMS0xNi4yIDQyLjJzLTM1LjEtLjEtNDIuMi0xNi4ybC0yMC00NS0xNTcuNSAwLTIwIDQ1Yy03LjIgMTYuMi0yNi4xIDIzLjQtNDIuMiAxNi4ycy0yMy40LTI2LjEtMTYuMi00Mi4ybDM5LjgtODkuNS01MC40LTIyLjRjLTIzLTEwLjItNDUtMjIuNC02NS44LTM2LjQtMjEuMyAxNy4yLTQ0LjYgMzIuMi02OS41IDQ0LjdMNzguMyAzODAuNmMtMTUuOCA3LjktMzUgMS41LTQyLjktMTQuM3MtMS41LTM1IDE0LjMtNDIuOWwzNC41LTE3LjNjMTYuMy04LjIgMzEuOC0xNy43IDQ2LjQtMjguMy0xMy44LTEyLjctMjYuOC0yNi40LTM4LjktNDAuOUw4MS42IDIyNC43Yy0xMS4zLTEzLjYtOS41LTMzLjggNC4xLTQ1LjFzMzMuOC05LjUgNDUuMSA0LjFsMTAuMiAxMi4yYzExLjUgMTMuOSAyNC4xIDI2LjggMzcuNCAzOC43IDI3LjUtMzAuNCA0OS4yLTY2LjEgNjMuNS0xMDUuNGwuNS0xLjItMjEwLjMgMEMxNC4zIDEyOCAwIDExMy43IDAgOTZTMTQuMyA2NCAzMiA2NGw5NiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTQxNiAyNzAuOEwzNjUuNyAzODQgNDY2LjMgMzg0IDQxNiAyNzAuOHoiXQogICAgfTsKICAgIGZhU2hpZWxkSGFsdmVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoaWVsZC1oYWx2ZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2hpZWxkLWFsdCJdLCAiZjNlZCIsICJNMjU2IDBjNC42IDAgOS4yIDEgMTMuNCAyLjlMNDU3LjggODIuOGMyMiA5LjMgMzguNCAzMSAzOC4zIDU3LjItLjUgOTkuMi00MS4zIDI4MC43LTIxMy42IDM2My4yLTE2LjcgOC0zNi4xIDgtNTIuOCAwLTE3Mi40LTgyLjUtMjEzLjEtMjY0LTIxMy42LTM2My4yLS4xLTI2LjIgMTYuMy00Ny45IDM4LjMtNTcuMkwyNDIuNyAyLjlDMjQ2LjkgMSAyNTEuNCAwIDI1NiAwem0wIDY2LjhsMCAzNzguMWMxMzgtNjYuOCAxNzUuMS0yMTQuOCAxNzYtMzAzLjRsLTE3Ni03NC42IDAgMHoiXQogICAgfTsKICAgIGZhU2hpZWxkQWx0ID0gZmFTaGllbGRIYWx2ZWQ7CiAgICBmYUNhcmV0VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FyZXQtdXAiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjBkOCIsICJNMTQwLjMgMTM1LjJjMTIuNi0xMC4zIDMxLjEtOS41IDQyLjggMi4ybDEyOCAxMjhjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlTMzAxLjQgMzIwIDI4OC41IDMyMGwtMjU2IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhTLjcgMjc0LjUgOS45IDI2NS40bDEyOC0xMjggMi40LTIuMnoiXQogICAgfTsKICAgIGZhRmlsZVBlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXBlbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODIyMSwgImZpbGUtZWRpdCJdLCAiZjMxYyIsICJNMTI4LjEgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTQ2LjIgMCAxMC45LTU0LjVjNC4zLTIxLjcgMTUtNDEuNiAzMC42LTU3LjJsMTMyLjItMTMyLjIgMC05Ny41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDMyMi44IDE4LjdDMzEwLjggNi43IDI5NC41IDAgMjc3LjYgMEwxMjguMSAwek0zODkuNiAxNzZsLTkzLjUgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC05My41IDExNy41IDExNy41ek0zMzIuMyA0NjYuOWwtMTEuOSA1OS42Yy0uMiAuOS0uMyAxLjktLjMgMi45IDAgOCA2LjUgMTQuNiAxNC42IDE0LjYgMSAwIDEuOS0uMSAyLjktLjNsNTkuNi0xMS45YzEyLjQtMi41IDIzLjgtOC42IDMyLjctMTcuNWwxMTguOS0xMTguOS04MC04MC0xMTguOSAxMTguOWMtOC45IDguOS0xNSAyMC4zLTE3LjUgMzIuN3ptMjY3LjgtMTIzYzIyLjEtMjIuMSAyMi4xLTU3LjkgMC04MHMtNTcuOS0yMi4xLTgwIDBsLTI4LjggMjguOCA4MCA4MCAyOC44LTI4Ljh6Il0KICAgIH07CiAgICBmYUZpbGVFZGl0ID0gZmFGaWxlUGVuOwogICAgZmFQZXJzb25CaWtpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWJpa2luZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY5MiwgImJpa2luZyJdLCAiZjg0YSIsICJNMzY4IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptMjcuMiA2NGwtNjEuOC00OC44Yy0xNy4zLTEzLjYtNDEuNy0xMy44LTU5LjEtLjNsLTgzLjEgNjQuMmMtMzAuNyAyMy44LTI4LjUgNzAuOCA0LjMgOTEuNkwyNTYgMzA1LjEgMjU2IDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTAuNy01LjMtMjAuNy0xNC4yLTI2LjZMMjYzIDIzMi45IDMyMy4zIDE4NC40IDM2NCAyMTdjNS43IDQuNSAxMi43IDcgMjAgN2w2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01Mi44IDB6TTExMiA1MTJhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0em0zNTIgMGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6Il0KICAgIH07CiAgICBmYUJpa2luZyA9IGZhUGVyc29uQmlraW5nOwogICAgZmFCb29rT3BlblJlYWRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLW9wZW4tcmVhZGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImJvb2stcmVhZGVyIl0sICJmNWRhIiwgIk0yNTYgMTUyYTg4IDg4IDAgMSAwIDAtMTc2IDg4IDg4IDAgMSAwIDAgMTc2em0wIDI5OC43bDAtMTQ5LjNjMTYuMy02LjggMzIuOS0xMy43IDQ5LjctMjAuNyAzOS0xNi4yIDgwLjgtMjQuNiAxMjMuMS0yNC42bDE5LjIgMCAwIDE2MC0xOS4yIDBjLTU5LjEgMC0xMTcuNyAxMS43LTE3Mi4zIDM0LjVsLS41IC4yek0yNTYgMjMybC0yNS4xLTEwLjVDMTg0LjEgMjAyIDEzMy45IDE5MiA4My4yIDE5Mkw0OCAxOTJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4TDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDM1LjIgMGM1MC43IDAgMTAwLjkgMTAgMTQ3LjcgMjkuNWwxMi44IDUuM2M3LjkgMy4zIDE2LjcgMy4zIDI0LjYgMGwxMi44LTUuM2M0Ni44LTE5LjUgOTctMjkuNSAxNDcuNy0yOS41bDM1LjIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE5MmMwLTI2LjUtMjEuNS00OC00OC00OGwtMzUuMiAwYy01MC43IDAtMTAwLjkgMTAtMTQ3LjcgMjkuNUwyNTYgMjMyeiJdCiAgICB9OwogICAgZmFCb29rUmVhZGVyID0gZmFCb29rT3BlblJlYWRlcjsKICAgIGZhR2xhc3NXYXRlckRyb3BsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2xhc3Mtd2F0ZXItZHJvcGxldCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNGY1IiwgIk0zMiAwQzIzLjEgMCAxNC42IDMuNyA4LjYgMTAuMlMtLjYgMjUuNCAuMSAzNC4zTDI4LjkgNDM3LjdjMyA0MS45IDM3LjggNzQuMyA3OS44IDc0LjNsMTY2LjYgMGM0MiAwIDc2LjgtMzIuNCA3OS44LTc0LjNMMzgzLjkgMzQuM2MuNi04LjktMi40LTE3LjYtOC41LTI0LjFTMzYwLjkgMCAzNTIgMEwzMiAwek04MyAyOTcuNUw2Ni40IDY0IDMxNy42IDY0IDMwMSAyOTcuNSAyODggMzA0Yy0yMC4xIDEwLjEtNDMuOSAxMC4xLTY0IDBzLTQzLjktMTAuMS02NCAwLTQzLjkgMTAuMS02NCAwbC0xMy02LjV6TTI1NiAxOTZjMC0yNC0zMy43LTcwLjEtNTIuMi05My41LTYuMS03LjctMTcuNS03LjctMjMuNiAwLTE4LjUgMjMuNC01Mi4yIDY5LjUtNTIuMiA5My41IDAgMzMuMSAyOC43IDYwIDY0IDYwczY0LTI2LjkgNjQtNjB6Il0KICAgIH07CiAgICBmYVRvd2VyQnJvYWRjYXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvd2VyLWJyb2FkY2FzdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJicm9hZGNhc3QtdG93ZXIiXSwgImY1MTkiLCAiTTg3LjkgMTEuNWMtMTEuMy02LjktMjYuMS0zLjItMzMgOC4xLTI0LjggNDEtMzkgODkuMS0zOSAxNDAuNHMxNC4yIDk5LjQgMzkgMTQwLjRjNi45IDExLjMgMjEuNiAxNSAzMyA4LjFzMTUtMjEuNiA4LjEtMzNDNzUuNyAyNDEuOSA2NCAyMDIuMyA2NCAxNjBTNzUuNyA3OC4xIDk2LjEgNDQuNGM2LjktMTEuMyAzLjItMjYuMS04LjEtMzN6bTQwMC4xIDBjLTExLjMgNi45LTE1IDIxLjYtOC4xIDMzIDIwLjQgMzMuNyAzMi4xIDczLjMgMzIuMSAxMTUuNnMtMTEuNyA4MS45LTMyLjEgMTE1LjZjLTYuOSAxMS4zLTMuMiAyNi4xIDguMSAzM3MyNi4xIDMuMiAzMy04LjFjMjQuOC00MSAzOS04OS4xIDM5LTE0MC40UzU0NS44IDYwLjYgNTIxIDE5LjZjLTYuOS0xMS4zLTIxLjYtMTUtMzMtOC4xek0zMjAgMjE1LjRjMTkuMS0xMS4xIDMyLTMxLjcgMzItNTUuNCAwLTM1LjMtMjguNy02NC02NC02NHMtNjQgMjguNy02NCA2NGMwIDIzLjcgMTIuOSA0NC40IDMyIDU1LjRMMjU2IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjY0LjZ6TTE4MC4yIDkxYzcuMi0xMS4yIDMuOS0yNi03LjItMzMuMnMtMjYtMy45LTMzLjIgNy4yYy0xNy42IDI3LjQtMjcuOCA2MC0yNy44IDk1czEwLjIgNjcuNiAyNy44IDk1YzcuMiAxMS4yIDIyIDE0LjQgMzMuMiA3LjJzMTQuNC0yMiA3LjItMzMuMmMtMTIuOC0xOS45LTIwLjItNDMuNi0yMC4yLTY5czcuNC00OS4xIDIwLjItNjl6TTQzNi4yIDY1Yy03LjItMTEuMi0yMi0xNC40LTMzLjItNy4ycy0xNC40IDIyLTcuMiAzMy4yYzEyLjggMTkuOSAyMC4yIDQzLjYgMjAuMiA2OXMtNy40IDQ5LjEtMjAuMiA2OWMtNy4yIDExLjItMy45IDI2IDcuMiAzMy4yczI2IDMuOSAzMy4yLTcuMmMxNy42LTI3LjQgMjcuOC02MCAyNy44LTk1cy0xMC4yLTY3LjYtMjcuOC05NXoiXQogICAgfTsKICAgIGZhQnJvYWRjYXN0VG93ZXIgPSBmYVRvd2VyQnJvYWRjYXN0OwogICAgZmFNaW5pbWl6ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtaW5pbWl6ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjb21wcmVzcy1hcnJvd3MtYWx0Il0sICJmNzhjIiwgIk00NTYgMjI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0xNDRjMC05LjcgNS44LTE4LjUgMTQuOC0yMi4yUzMyMi4xIDMyLjIgMzI5IDM5bDQwIDQwIDczLjQtNzMuNEM0NDYgMiA0NTAuOSAwIDQ1NiAwczEwIDIgMTMuNyA1LjdsMzYuNyAzNi43QzUxMCA0NiA1MTIgNTAuOSA1MTIgNTZzLTIgMTAtNS43IDEzLjdMNDMzIDE0MyA0NzMgMTgzYzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJTNDY1LjcgMjI0IDQ1NiAyMjR6bTAgNjRjOS43IDAgMTguNSA1LjggMjIuMiAxNC44czEuNyAxOS4zLTUuMiAyNi4ybC00MCA0MCA3My40IDczLjRjMy42IDMuNiA1LjcgOC41IDUuNyAxMy43cy0yIDEwLTUuNyAxMy43bC0zNi43IDM2LjdDNDY2IDUxMCA0NjEuMSA1MTIgNDU2IDUxMnMtMTAtMi0xMy43LTUuN0wzNjkgNDMzIDMyOSA0NzNjLTYuOSA2LjktMTcuMiA4LjktMjYuMiA1LjJTMjg4IDQ2NS43IDI4OCA0NTZsMC0xNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTQ0IDB6bS0yNTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE0NGMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC00MC00MC03My40IDczLjRDNjYgNTEwIDYxLjEgNTEyIDU2IDUxMnMtMTAtMi0xMy43LTUuN0w1LjcgNDY5LjdDMiA0NjYgMCA0NjEuMSAwIDQ1NnMyLTEwIDUuNy0xMy43TDc5IDM2OSAzOSAzMjljLTYuOS02LjktOC45LTE3LjItNS4yLTI2LjJTNDYuMyAyODggNTYgMjg4bDE0NCAwek01NiAyMjRjLTkuNyAwLTE4LjUtNS44LTIyLjItMTQuOFMzMi4yIDE4OS45IDM5IDE4M0w3OSAxNDMgNS43IDY5LjdDMiA2NiAwIDYxLjEgMCA1NlMyIDQ2IDUuNyA0Mi4zTDQyLjMgNS43QzQ2IDIgNTAuOSAwIDU2IDBTNjYgMiA2OS43IDUuN0wxNDMgNzkgMTgzIDM5YzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJTMjI0IDQ2LjMgMjI0IDU2bDAgMTQ0YzAgMTMuMy0xMC43IDI0LTI0IDI0TDU2IDIyNHoiXQogICAgfTsKICAgIGZhQ29tcHJlc3NBcnJvd3NBbHQgPSBmYU1pbmltaXplOwogICAgZmFBcnJvd1JpZ2h0VG9DaXR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXJpZ2h0LXRvLWNpdHkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRiMyIsICJNMjg4IDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA4MCA0OCAwIDAtNzJjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDcyIDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyODhjMCAyNi41LTIxLjUgNDgtNDggNDhsLTI1NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTQxNnptNjQgNjRsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTYgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNMzUyIDMwNGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNzYtODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNNTEyIDMzNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNTMgMTY3bDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC03MiA3MmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0xMDIuMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDEwMi4xIDAtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMHoiXQogICAgfTsKICAgIGZhTGFwdG9wTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYXB0b3AtbWVkaWNhbCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmODEyIiwgIk02NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI0MC02NCAwIDAtMjQwLTM4NCAwIDAgMjQwLTY0IDAgMC0yNDB6TTAgNDAzLjJDMCAzOTIuNiA4LjYgMzg0IDE5LjIgMzg0bDYwMS42IDBjMTAuNiAwIDE5LjIgOC42IDE5LjIgMTkuMiAwIDQyLjQtMzQuNCA3Ni44LTc2LjggNzYuOEw3Ni44IDQ4MEMzNC40IDQ4MCAwIDQ0NS42IDAgNDAzLjJ6TTI4OCAxNjBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQwIDAgMCA0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDB6Il0KICAgIH07CiAgICBmYUJyZWFkU2xpY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJlYWQtc2xpY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdlYyIsICJNNjQgNDMybDAtMTc2Yy0zNS4zIDAtNjQtMjguNy02NC02NCAwLTIxNi41IDUxMi0yMTYuNSA1MTIgMCAwIDM1LjMtMjguNyA2NC02NCA2NGwwIDE3NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjg4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4eiJdCiAgICB9OwogICAgZmFHbG9iZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnbG9iZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc2MF0sICJmMGFjIiwgIk0zNTEuOSAyODBsLTE5MC45IDBjMi45IDY0LjUgMTcuMiAxMjMuOSAzNy41IDE2Ny40IDExLjQgMjQuNSAyMy43IDQxLjggMzUuMSA1Mi40IDExLjIgMTAuNSAxOC45IDEyLjIgMjIuOSAxMi4yczExLjctMS43IDIyLjktMTIuMmMxMS40LTEwLjYgMjMuNy0yOCAzNS4xLTUyLjQgMjAuMy00My41IDM0LjYtMTAyLjkgMzcuNS0xNjcuNHpNMTYwLjkgMjMybDE5MC45IDBDMzQ5IDE2Ny41IDMzNC43IDEwOC4xIDMxNC40IDY0LjYgMzAzIDQwLjIgMjkwLjcgMjIuOCAyNzkuMyAxMi4yIDI2OC4xIDEuNyAyNjAuNCAwIDI1Ni40IDBzLTExLjcgMS43LTIyLjkgMTIuMmMtMTEuNCAxMC42LTIzLjcgMjgtMzUuMSA1Mi40LTIwLjMgNDMuNS0zNC42IDEwMi45LTM3LjUgMTY3LjR6bS00OCAwQzExNi40IDE0Ni40IDEzOC41IDY2LjkgMTcwLjggMTQuNyA3OC43IDQ3LjMgMTAuOSAxMzEuMiAxLjUgMjMybDExMS40IDB6TTEuNSAyODBjOS40IDEwMC44IDc3LjIgMTg0LjcgMTY5LjMgMjE3LjMtMzIuMy01Mi4yLTU0LjQtMTMxLjctNTcuOS0yMTcuM0wxLjUgMjgwem0zOTguNCAwYy0zLjUgODUuNi0yNS42IDE2NS4xLTU3LjkgMjE3LjMgOTIuMS0zMi43IDE1OS45LTExNi41IDE2OS4zLTIxNy4zbC0xMTEuNCAwem0xMTEuNC00OEM1MDEuOSAxMzEuMiA0MzQuMSA0Ny4zIDM0MiAxNC43IDM3NC4zIDY2LjkgMzk2LjQgMTQ2LjQgMzk5LjkgMjMybDExMS40IDB6Il0KICAgIH07CiAgICBmYUZvbGRlck1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZvbGRlci1taW51cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjVkIiwgIk00NDggNDQ4TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwxMzguNyAwYzEzLjggMCAyNy4zIDQuNSAzOC40IDEyLjhsMzguNCAyOC44YzUuNSA0LjIgMTIuMyA2LjQgMTkuMiA2LjRMNDQ4IDgwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjQwYzAgMzUuMy0yOC43IDY0LTY0IDY0ek0xODQgMjQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXQogICAgfTsKICAgIGZhTWFza0ZhY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFzay1mYWNlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUxZDciLCAiTTMyMCA2NGMtMjcuMiAwLTUzLjggOC03Ni40IDIzLjFsLTM3LjEgMjQuOGMtMTUuOCAxMC41LTM0LjMgMTYuMS01My4zIDE2LjFMNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDc4LjdjMCA2Mi42IDQ1LjIgMTE2IDEwNyAxMjYuM2w5Ny45IDE2LjNjMzMgMjIgNzIuNiAzNC43IDExNS4xIDM0LjdzODIuMi0xMi44IDExNS4xLTM0LjdMNTMzIDM5Ni45YzYxLjctMTAuMyAxMDctNjMuNyAxMDctMTI2LjNsMC03OC43YzAtMzUuMy0yOC43LTY0LTY0LTY0bC04OS4yIDBjLTE5IDAtMzcuNS01LjYtNTMuMy0xNi4xTDM5Ni40IDg3LjFDMzczLjggNzIgMzQ3LjIgNjQgMzIwIDY0ek0xMzUuOSAzMzYuOWwtMTguNC0zLjFDODYuNiAzMjguNyA2NCAzMDIgNjQgMjcwLjdsMC03OC43IDQ4IDAgMCA0OGMwIDM1IDguNiA2Ny45IDIzLjkgOTYuOXptMzg2LjYtMy4xbC0xOC40IDMuMUM1MTkuNCAzMDcuOSA1MjggMjc1IDUyOCAyNDBsMC00OCA0OCAwIDAgNzguN2MwIDMxLjMtMjIuNiA1OC01My41IDYzLjF6TTE5MiAyMzJjMC0xMy4zIDEwLjctMjQgMjQtMjRsMjA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTIwOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptNTYgNTZsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFCb25nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjU1YyIsICJNNDQ4LjUgMzg0YzAgNDEuNS0xMy4xIDc5LjktMzUuNSAxMTEuMy03LjkgMTEuMS0yMS4yIDE2LjctMzQuOCAxNi43bC0yNDMuMyAwYy0xMy43IDAtMjYuOS01LjYtMzQuOC0xNi43LTIyLjQtMzEuNC0zNS41LTY5LjgtMzUuNS0xMTEuMyAwLTcxLjEgMzguNi0xMzMuMSA5Ni0xNjYuM2wwLTE1My43Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMTUzLjdjMTQuMiA4LjIgMjcuMiAxOC4yIDM4LjggMjkuNmwzOS4zLTM5LjMtNy03Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBjMTYgMTYgMzIgMzIgNDggNDggOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNy03LTQzLjMgNDMuM2MxNy4zIDI4LjkgMjcuMyA2Mi42IDI3LjMgOTguOHpNMjg4LjUgNjRsLTY0IDAgMCAxOTAuNi0zMiAxOC41Yy0xOS41IDExLjMtMzUuNyAyNy41LTQ2LjkgNDYuOWwyMjEuOCAwYy0xMS4yLTE5LjQtMjcuNC0zNS42LTQ2LjktNDYuOWwtMzItMTguNSAwLTE5MC42eiJdCiAgICB9OwogICAgZmFSb2FkQnJpZGdlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvYWQtYnJpZGdlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1NjMiLCAiTTMyIDMybDIwOCAwIDAgNjQtMjQgMCAwIDY0IDI0IDAgMCAxMjkuM2MtNDUuNCA3LjYtODAgNDcuMS04MCA5NC43bDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTRjMC0zOC44LTI2LjQtNzIuNi02NC04MmwwLTExMiA0MCAwIDAtNjQtOCAwQzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMnpNODggOTZsMCA2NCA4MCAwIDAtNjQtODAgMHpNMzM2IDMybDcyIDAgMCA3MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNzIgNzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtNzIgMCAwLTcyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNzItNzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0zNTJjMC0yNi41IDIxLjUtNDggNDgtNDh6bTk2IDE2MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYUFycm93VXA5MSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC05LTEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic29ydC1udW1lcmljLXVwLWFsdCJdLCAiZjg4NyIsICJNMTUwLjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDk2IDE0MS4zIDk2IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzA2LjcgNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2ek0zNjUuMSAyMDYuNmMtOS42IDE0LjgtNS40IDM0LjYgOS40IDQ0LjNzMzQuNiA1LjQgNDQuMy05LjRsNDIuMS02NC45YzEyLjQtMTkuMiAxOS4xLTQxLjYgMTkuMS02NC41IDAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwYzAgMzYuMSAyMy45IDY2LjcgNTYuOCA3Ni42bC0xMS43IDE4ek0zNzYgMTEyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTQyLjcgMTgyYy04LjMtNi0xOS4xLTcuNy0yOC44LTQuNGwtNDggMTZjLTE2LjggNS42LTI1LjggMjMuNy0yMC4yIDQwLjVzMjMuNyAyNS44IDQwLjUgMjAuMmw1LjktMiAwIDUxLjYtMTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNiAwIDAtOTZjMC0xMC4zLTQuOS0xOS45LTEzLjMtMjZ6Il0KICAgIH07CiAgICBmYVNvcnROdW1lcmljVXBBbHQgPSBmYUFycm93VXA5MTsKICAgIGZhTW91bnRhaW5DaXR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vdW50YWluLWNpdHkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUyZSIsICJNMjU2LjMgNDhjMC0yNi41IDIxLjUtNDggNDgtNDhsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQ4IDQ4IDAgMC03MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNzIgMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDMyMGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtNzcuOCAwYzQtMTUuNCAyLjQtMzIuNi02LjctNDguMkwzNTQuNiAyNTYgMzY4LjMgMjU2YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtNi4xIDAtMTEuNCAzLjQtMTQuMSA4LjVsLTQyLjYtNzNjLTYtMTAuMi0xNC4xLTE4LTIzLjMtMjMuM2wwLTU2LjJ6bTY0IDY0bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2MCA5NmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNiA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0tMjcyLTY0LjdsLTY1LjEgMTExLjYgMzMuMSAzMy4xIDQ4LTQ4IDQwLjQgMC01Ni40LTk2Ljd6bS0yNy42LTQ3LjljMTIuMy0yMS4yIDQyLjktMjEuMiA1NS4zIDBMNDIwLjMgNDYzLjljMTIuNCAyMS4zLTIuOSA0OC4xLTI3LjYgNDguMUw1NiA1MTJjLTI0LjcgMC00MC4xLTI2LjgtMjcuNi00OC4xTDE5Ni43IDE3NS40eiJdCiAgICB9OwogICAgZmFBcnJvd0Rvd245MSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLTktMSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LW51bWVyaWMtZGVzYyIsICJzb3J0LW51bWVyaWMtZG93bi1hbHQiXSwgImY4ODYiLCAiTTIzMC42IDM5MC42bC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDM3MC43IDk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDYuNyAyNS40LTI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3ptMTM0LjUtMTg0bDExLjctMThjLTMyLjktOS45LTU2LjgtNDAuNS01Ni44LTc2LjYgMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDIyLjktNi42IDQ1LjMtMTkuMSA2NC41bC00Mi4xIDY0LjljLTkuNiAxNC44LTI5LjQgMTkuMS00NC4zIDkuNHMtMTkuMS0yOS40LTkuNC00NC4zek00MjQgMTEyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bS01LjMgMTgyYzguMyA2IDEzLjMgMTUuNyAxMy4zIDI2bDAgOTYgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwIDAtNTEuNi01LjkgMmMtMTYuOCA1LjYtMzQuOS0zLjUtNDAuNS0yMC4yczMuNS0zNC45IDIwLjItNDAuNWw0OC0xNmM5LjgtMy4zIDIwLjUtMS42IDI4LjggNC40eiJdCiAgICB9OwogICAgZmFTb3J0TnVtZXJpY0Rlc2MgPSBmYUFycm93RG93bjkxOwogICAgZmFTb3J0TnVtZXJpY0Rvd25BbHQgPSBmYUFycm93RG93bjkxOwogICAgZmFGYWNlR3JpbldpZGUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi13aWRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTE1LCAiZ3Jpbi1hbHQiXSwgImY1ODEiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0zODYuNyAzMDguOWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtMjIuNCA2MS4zLTgxLjMgMTA1LjEtMTUwLjMgMTA1LjFTMTI4LjEgMzg4LjIgMTA1LjcgMzI2LjljLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMXpNMjA4IDE5MmMwIDM1LjMtMTQuMyA2NC0zMiA2NHMtMzItMjguNy0zMi02NCAxNC4zLTY0IDMyLTY0IDMyIDI4LjcgMzIgNjR6bTEyOCA2NGMtMTcuNyAwLTMyLTI4LjctMzItNjRzMTQuMy02NCAzMi02NCAzMiAyOC43IDMyIDY0LTE0LjMgNjQtMzIgNjR6Il0KICAgIH07CiAgICBmYUdyaW5BbHQyID0gZmFGYWNlR3JpbldpZGUyOwogICAgZmFQb29wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBvb3AiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjYxOSIsICJNMjU0LjQgNi42YzMuNS00LjMgOS02LjUgMTQuNS01LjcgNDYuOSA2LjMgODMuMSA0Ni41IDgzLjEgOTUuMSAwIDExLjItMS45IDIyLTUuNSAzMmw1LjUgMGMzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDE5LjEtOC40IDM2LjMtMjEuNyA0OGwxMy43IDBjMzkuOCAwIDcyIDMyLjIgNzIgNzIgMCAyMy4yLTExIDQzLjgtMjggNTcgMzQuMSA1LjcgNjAgMzUuMyA2MCA3MSAwIDM5LjgtMzIuMiA3Mi03MiA3Mkw3MiA1MTJjLTM5LjggMC03Mi0zMi4yLTcyLTcyIDAtMzUuNyAyNS45LTY1LjMgNjAtNzEtMTctMTMuMi0yOC0zMy44LTI4LTU3IDAtMzkuOCAzMi4yLTcyIDcyLTcybDEzLjcgMGMtMTMuMy0xMS43LTIxLjctMjguOS0yMS43LTQ4IDAtMzUuMyAyOC43LTY0IDY0LTY0bDE2LjIgMGM0NC4xLS4xIDc5LjgtMzUuOSA3OS44LTgwIDAtOS4yLTEuNS0xNy45LTQuMy0yNi4xLTEuOC01LjItLjgtMTEuMSAyLjgtMTUuNHoiXQogICAgfTsKICAgIGZhRGhhcm1hY2hha3JhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRoYXJtYWNoYWtyYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3ODRdLCAiZjY1NSIsICJNMzM3LjggMjA1LjdsNDguNi00Mi41YzEzLjggMTkuMyAyMy40IDQxLjkgMjcuNCA2Ni4ybC02NC40IDQuM2MtMi40LTEwLjEtNi40LTE5LjUtMTEuNi0yOHptMTQwLjEgMTkuNWMtNS4zLTM4LjgtMjAuNi03NC41LTQzLjItMTA0LjNsLjgtLjdDNDQ5IDEwOC40IDQ0OS43IDg3LjYgNDM3IDc1cy0zMy40LTEyLTQ1LjIgMS41bC0uNyAuOGMtMjkuOC0yMi42LTY1LjUtMzcuOS0xMDQuMy00My4ybC4xLTEuMWMxLjItMTcuOS0xMy0zMy0zMC45LTMzcy0zMi4xIDE1LjItMzAuOSAzM2wuMSAxLjFjLTM4LjggNS4zLTc0LjUgMjAuNi0xMDQuMyA0My4ybC0uNy0uOEMxMDguNCA2MyA4Ny42IDYyLjMgNzUgNzVzLTEyIDMzLjQgMS41IDQ1LjJsLjggLjdjLTIyLjYgMjkuOC0zNy45IDY1LjUtNDMuMiAxMDQuM2wtMS4xLS4xYy0xNy45LTEuMi0zMyAxMy0zMyAzMC45czE1LjIgMzIuMSAzMyAzMC45bDEuMS0uMWM1LjMgMzguOCAyMC42IDc0LjUgNDMuMiAxMDQuM2wtLjggLjdDNjMgNDAzLjYgNjIuMyA0MjQuNCA3NSA0MzdzMzMuNCAxMiA0NS4yLTEuNWwuNy0uOGMyOS44IDIyLjYgNjUuNSAzNy45IDEwNC4zIDQzLjJsLS4xIDEuMWMtMS4yIDE3LjkgMTMgMzMgMzAuOSAzM3MzMi4xLTE1LjIgMzAuOS0zM2wtLjEtMS4xYzM4LjgtNS4zIDc0LjUtMjAuNiAxMDQuMy00My4ybC43IC44YzExLjggMTMuNSAzMi41IDE0LjIgNDUuMiAxLjVzMTItMzMuNC0xLjUtNDUuMmwtLjgtLjdjMjIuNi0yOS44IDM3LjktNjUuNSA0My4yLTEwNC4zbDEuMSAuMWMxNy45IDEuMiAzMy0xMyAzMy0zMC45cy0xNS4yLTMyLjEtMzMtMzAuOWwtMS4xIC4xek0xNjMuMiAxMjUuNmMxOS4zLTEzLjggNDEuOS0yMy40IDY2LjItMjcuNWw0LjMgNjQuNGMtMTAgMi40LTE5LjUgNi40LTI4IDExLjZsLTQyLjUtNDguNnptLTY1IDEwMy44YzQuMS0yNC40IDEzLjctNDYuOSAyNy41LTY2LjJsNDguNiA0Mi41Yy01LjMgOC41LTkuMiAxOC0xMS42IDI4bC02NC40LTQuM3ptMjcuNSAxMTkuNGMtMTMuOC0xOS4zLTIzLjQtNDEuOS0yNy41LTY2LjJsNjQuNC00LjNjMi40IDEwLjEgNi40IDE5LjUgMTEuNiAyOGwtNDguNiA0Mi41em0xMDMuOCA2NWMtMjQuNC00LjEtNDYuOS0xMy43LTY2LjItMjcuNGw0Mi41LTQ4LjZjOC41IDUuMyAxOCA5LjIgMjggMTEuNmwtNC4zIDY0LjR6bTExOS40LTI3LjRjLTE5LjMgMTMuOC00MS45IDIzLjQtNjYuMiAyNy40bC00LjMtNjQuNGMxMC0yLjQgMTkuNS02LjQgMjgtMTEuNmw0Mi41IDQ4LjZ6bTY1LTEwMy44Yy00LjEgMjQuNC0xMy43IDQ2LjktMjcuNCA2Ni4ybC00OC42LTQyLjVjNS4zLTguNiA5LjItMTggMTEuNi0yOGw2NC40IDQuM3ptLTY1LTE1Ni45bC00Mi41IDQ4LjZjLTguNi01LjMtMTgtOS4yLTI4LTExLjZsNC4zLTY0LjRjMjQuNCA0LjEgNDYuOSAxMy43IDY2LjIgMjcuNXpNMjU2IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUJhdHRlcnlRdWFydGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhdHRlcnktcXVhcnRlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJiYXR0ZXJ5LTIiXSwgImYyNDMiLCAiTTUyOCAxMjhjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjI0YzAgOC44LTcuMiAxNi0xNiAxNmwtNDE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTIyNGMwLTguOCA3LjItMTYgMTYtMTZsNDE2IDB6TTExMiA2NGMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyMjRjMCA0NC4yIDM1LjggODAgODAgODBsNDE2IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC00OGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybDAtNDhjMC00NC4yLTM1LjgtODAtODAtODBMMTEyIDY0em01NiAxMTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTY0IDB6Il0KICAgIH07CiAgICBmYUJhdHRlcnkyID0gZmFCYXR0ZXJ5UXVhcnRlcjsKICAgIGZhQW5raCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmtoIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbOTc2NV0sICJmNjQ0IiwgIk05NiAxMjhjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NGMwIDQxLjYtMjAuNyA3Ni42LTQ2LjYgMTA0LjEtNS45IDYuMi0xMS44IDExLjgtMTcuNCAxNi43LTUuNi00LjktMTEuNS0xMC41LTE3LjQtMTYuNy0yNS45LTI3LjUtNDYuNi02Mi42LTQ2LjYtMTA0LjF6TTE2MCAwQzg5LjMgMCAzMiA1Ny4zIDMyIDEyOCAzMiAxODAuNCA1My41IDIyMy41IDc4LjggMjU2TDMyIDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwIDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjAgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNDYuOCAwQzI2Ni41IDIyMy41IDI4OCAxODAuNCAyODggMTI4IDI4OCA1Ny4zIDIzMC43IDAgMTYwIDB6Il0KICAgIH07CiAgICBmYURpYW1vbmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGlhbW9uZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk4MzBdLCAiZjIxOSIsICJNMTcgMjE1TDIxNSAxN0MyMjUuOSA2LjEgMjQwLjYgMCAyNTYgMHMzMC4xIDYuMSA0MSAxN0w0OTUgMjE1YzEwLjkgMTAuOSAxNyAyNS42IDE3IDQxcy02LjEgMzAuMS0xNyA0MUwyOTcgNDk1Yy0xMC45IDEwLjktMjUuNiAxNy00MSAxN3MtMzAuMS02LjEtNDEtMTdMMTcgMjk3QzYuMSAyODYuMSAwIDI3MS40IDAgMjU2czYuMS0zMC4xIDE3LTQxeiJdCiAgICB9OwogICAgZmFTdWJzY3JpcHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Vic2NyaXB0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxMmMiLCAiTTk2IDY0Qzc4LjMgNjQgNjQgNzguMyA2NCA5NnMxNC4zIDMyIDMyIDMybDE1LjMgMCA4OS42IDEyOC04OS42IDEyOC0xNS4zIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMGMxMC40IDAgMjAuMi01LjEgMjYuMi0xMy42TDI0MCAzMTEuOCAzMjUuOCA0MzQuNGM2IDguNiAxNS44IDEzLjYgMjYuMiAxMy42bDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE1LjMgMC04OS42LTEyOCA4OS42LTEyOCAxNS4zIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDBjLTEwLjQgMC0yMC4yIDUuMS0yNi4yIDEzLjZMMjQwIDIwMC4yIDE1NC4yIDc3LjZDMTQ4LjIgNjkuMSAxMzguNCA2NCAxMjggNjRMOTYgNjR6TTU0NCAzMjBjMC0xMS4xLTUuNy0yMS40LTE1LjItMjcuMnMtMjEuMi02LjQtMzEuMS0xLjRsLTMyIDE2Yy0xNS44IDcuOS0yMi4yIDI3LjEtMTQuMyA0Mi45IDUuNiAxMS4yIDE2LjkgMTcuNyAyOC42IDE3LjdsMCA4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTI4eiJdCiAgICB9OwogICAgZmFSdXBlZVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVwZWUtc2lnbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzgzNjAsICJydXBlZSJdLCAiZjE1NiIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmw4MCAwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgNTQuMy0zMCAxMDEuNS03NC40IDEyNi4xbDQxIDEzNi43YzUuMSAxNi45LTQuNSAzNC44LTIxLjUgMzkuOHMtMzQuOC00LjUtMzkuOC0yMS41TDEyMC4xIDMxOS44Yy0yLjcgLjEtNS40IC4yLTguMSAuMmwtNDggMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ2NS43IDAgNDQ4TDAgNjR6TTY0IDI1Nmw0OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwbC00OCAwIDAgMTYwem0yODUuMS0zMmwzNC45IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM0LjkgMGMtNy4yIDAtMTMuMSA1LjktMTMuMSAxMy4xIDAgNS43IDMuNyAxMC43IDkuMSAxMi41bDQ5LjQgMTUuOWMzMS45IDEwLjMgNTMuNSAzOS45IDUzLjUgNzMuNCAwIDQyLjYtMzQuNSA3Ny4xLTc3LjEgNzcuMUwzMjAgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDUwLjkgMGM3LjIgMCAxMy4xLTUuOSAxMy4xLTEzLjEgMC01LjctMy43LTEwLjctOS4xLTEyLjVsLTQ5LjQtMTUuOWMtMzEuOS0xMC4zLTUzLjUtMzkuOS01My41LTczLjQgMC00Mi42IDM0LjUtNzcuMSA3Ny4xLTc3LjF6Il0KICAgIH07CiAgICBmYVJ1cGVlID0gZmFSdXBlZVNpZ247CiAgICBmYVBlcnNvblJpZmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1yaWZsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTRlIiwgIk00MTYgMEwzODQgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwwIDEwMC4zYy05LjYgNS41LTE2IDE1LjktMTYgMjcuN2wwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE0NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNiAwIDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2bDU5LjUgMGMxMC40IDAgMTgtOS44IDE1LjUtMTkuOWwtMjMtOTIuMSA0NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtNDggMCAwLTI2LjcgNTMuMS0xNy43YzYuNS0yLjIgMTAuOS04LjMgMTAuOS0xNS4ybDAtODQuNWMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDU2LTE2IDUuMyAwLTEwOS4zYzAtMTEuOC02LjQtMjIuMi0xNi0yNy43TDQzMiAxNmMwLTguOC03LjItMTYtMTYtMTZ6TTIyNCAyMDhDMTE4IDIwOCAzMiAyOTQgMzIgNDAwbDAgNDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTQ4YzAtMzIuNSAxMi4xLTYyLjEgMzItODQuN2wwIDE5Ni43IDE2MCAwIDAtMjkzLjFjLTIwLTcuMS00MS42LTEwLjktNjQtMTAuOXpNMjgwIDg4YTcyIDcyIDAgMSAwIC0xNDQgMCA3MiA3MiAwIDEgMCAxNDQgMHoiXQogICAgfTsKICAgIGZhRCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTAwXSwgIjQ0IiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDEyOCAwYzEyMy43IDAgMjI0IDEwMC4zIDIyNCAyMjRTMjgzLjcgNDgwIDE2MCA0ODBMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDY0ek02NCA5NmwwIDMyMCA5NiAwYzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwUzI0OC40IDk2IDE2MCA5Nkw2NCA5NnoiXQogICAgfTsKICAgIGZhU3F1YXJlTmZpID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1uZmkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTU3NiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNOTMgMTcyLjNsMzUgNjMgMC01MS40YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxNDRjMCAxMC45LTcuNCAyMC41LTE4IDIzLjJzLTIxLjctMi0yNy0xMS42bC0zNS02MyAwIDUxLjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNDRjMC0xMC45IDcuNC0yMC41IDE4LTIzLjJzMjEuNyAyIDI3IDExLjZ6TTIwOCAxODRjMC0xMy4zIDEwLjctMjQgMjQtMjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNTYgMCAwIDMyIDQwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQwIDAgMCA0MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE0NHptMTkyIDBsMCAxNDRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhVGVldGggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVldGgiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjYyZSIsICJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTE0NCAyMDhsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMjRjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6bTEyOCAwbDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4ek04MCAxNzZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyem0zMjAgMzJsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6TTQ4IDMzNmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNnptMTQ0IDQ4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC02NCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNmMwIDI2LjUgMjEuNSA0OCA0OCA0OHptMTI4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4em0xMTItMTZjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyeiJdCiAgICB9OwogICAgZmFNYWduaWZ5aW5nR2xhc3NEb2xsYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFnbmlmeWluZy1nbGFzcy1kb2xsYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2VhcmNoLWRvbGxhciJdLCAiZjY4OCIsICJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NkMyOTYuMyA0MDEuMSAyNTMuOSA0MTYgMjA4IDQxNiA5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMCA0MTYgOTMuMSA0MTYgMjA4ek0yMTIgOTZjLTExIDAtMjAgOS0yMCAyMGwwIDRjLTI4LjggLjMtNTIgMjMuNy01MiA1Mi41IDAgMjUuNyAxOC41IDQ3LjYgNDMuOSA1MS44bDQxLjcgN2M2IDEgMTAuNCA2LjIgMTAuNCAxMi4zIDAgNi45LTUuNiAxMi41LTEyLjUgMTIuNUwxNjggMjU2Yy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGwyNCAwIDAgNGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTQuN2MyNS00LjEgNDQtMjUuNyA0NC01MS44IDAtMjUuNy0xOC41LTQ3LjYtNDMuOS01MS44bC00MS43LTdjLTYtMS0xMC40LTYuMi0xMC40LTEyLjMgMC02LjkgNS42LTEyLjUgMTIuNS0xMi41bDQ3LjUgMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTggMCAwLTRjMC0xMS05LTIwLTIwLTIweiJdCiAgICB9OwogICAgZmFTZWFyY2hEb2xsYXIgPSBmYU1hZ25pZnlpbmdHbGFzc0RvbGxhcjsKICAgIGZhRHVtcHN0ZXJGaXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImR1bXBzdGVyLWZpcmUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjc5NCIsICJNMTY0LjMgNjRMMTM4LjcgMTkyIDU2IDE5MmMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00LjFjMC0yLjYgLjQtNS4xIDEuMi03LjZMNTguNSA4MC40QzYxLjggNzAuNiA3MSA2NCA4MS4zIDY0bDgzIDB6bTIzLjQgMTI4bDI1LjYtMTI4IDgyLjcgMCAwIDEyOC0xMDguMyAwek0zNDQgNjRsODIuNyAwIDE2IDgwYy0xNC43IC4yLTI5LjMgNS41LTQwLjkgMTUuOS0xMS41IDEwLjMtMjIuNSAyMS0zMi44IDMyLjFsLTI0LjkgMCAwLTEyOHpNOTYgMjQwbDIzMy4yIDBjLTYuNCA4LjgtMTIuMyAxNy42LTE3LjcgMjYuMy0yMS40IDM0LjctMzkuNSA3Ni4xLTM5LjUgMTE1LjggMCAxNy4xIDIuMSAzMy44IDYgNDkuOWwtMTIwLjQgMCAxLjkgMTAuM2MzLjIgMTcuNC04LjQgMzQtMjUuOCAzNy4ycy0zNC04LjQtMzcuMi0yNS44QzcxIDMxMy4zIDU4IDI0Mi4xIDU3LjcgMjQwTDk2IDI0MHptNTEyLTcyYzAgMTEtNy40IDIwLjMtMTcuNSAyMy4xLS45LS44LTEuNy0xLjYtMi42LTIuNC0yMS44LTIwLTU0LjMtMjEuOC03OC01LjUtNC4yLTQuMy04LjUtOC41LTEyLjktMTIuNmwtMjEuMy0xMDYuNiA4MyAwYzEwLjMgMCAxOS41IDYuNiAyMi44IDE2LjRsMjUuMyA3NS45Yy44IDIuNCAxLjIgNSAxLjIgNy42bDAgNC4xek01MDUuNyAyNDAuM0w1MTggMjI2LjVjNS40LTYuMSAxMy4zLTguOCAyMC45LTguOSA3LjIgMCAxNC4zIDIuNiAxOS45IDcuOCAxOS43IDE4LjMgMzkuOCA0My4yIDU1IDcwLjYgMTUuMSAyNy4yIDI2LjIgNTguMSAyNi4yIDg4LjEgMCA4OC43LTcxLjMgMTU5LjgtMTYwIDE1OS44LTg5LjYgMC0xNjAtNzEuMy0xNjAtMTU5LjggMC0zNy4zIDE2LTczLjQgMzYuOC0xMDQuNSAyMC45LTMxLjMgNDcuNS01OSA3MC45LTgwLjIgNS43LTUuMiAxMy4xLTcuNyAyMC4zLTcuNXMxMy40IDMuMiAxOC44IDcuNWMxNC40IDExLjQgMzguOSA0MC43IDM4LjkgNDAuN3pNNTQ0IDQzMi4yYzAtMzYuNS0zNy03My01NC44LTg4LjQtNS40LTQuNy0xMy4xLTQuNy0xOC41IDAtMTcuNyAxNS40LTU0LjggNTEuOS01NC44IDg4LjQgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHoiXQogICAgfTsKICAgIGZhVXBsb2FkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVwbG9hZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDkzIiwgIk0yNTYgMTA5LjNMMjU2IDMyMGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTIxMC43LTQxLjQgNDEuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsOTYtOTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMjU2IDEwOS4zek0yMjQgNDAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDgwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzJjMC0zNS4zIDI4LjctNjQgNjQtNjRsODAgMGMwIDQ0LjIgMzUuOCA4MCA4MCA4MHptMTQ0IDI0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhVXNlclNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MjcxNCwgInVzZXItYWx0LXNsYXNoIiwgInVzZXItbGFyZ2Utc2xhc2giXSwgImY1MDYiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMMzExLjUgMjQ1LjdjNTUtMTAuOSA5Ni41LTU5LjUgOTYuNS0xMTcuNyAwLTY2LjMtNTMuNy0xMjAtMTIwLTEyMC01OC4yIDAtMTA2LjggNDEuNS0xMTcuNyA5Ni41TDQxLTI0Ljl6TTIzNS42IDMwNS40QzE0Ny45IDMxNi42IDgwIDM5MS41IDgwIDQ4Mi4zIDgwIDQ5OC43IDkzLjMgNTEyIDEwOS43IDUxMmwzMzIuNSAwLTIwNi42LTIwNi42eiJdCiAgICB9OwogICAgZmFVc2VyQWx0U2xhc2ggPSBmYVVzZXJTbGFzaDsKICAgIGZhVXNlckxhcmdlU2xhc2ggPSBmYVVzZXJTbGFzaDsKICAgIGZhQXJyb3dMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs4NTkyXSwgImYwNjAiLCAiTTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDEwOS4zIDI4OCA0ODAgMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zNzAuNyAwIDEwNS40LTEwNS40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYweiJdCiAgICB9OwogICAgZmFWaWFsVmlydXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlhbC12aXJ1cyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTk3IiwgIk02NCAzMkM2NCAxNC4zIDc4LjMgMCA5NiAwTDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMTUxLjdjLTE4LjUgMC0zNyA3LTUxLjEgMjEuMS0yMS42IDIxLjYtMjYuNiA1My42LTE1IDc5LjktMjYuOSAxMC40LTQ1LjkgMzYuNi00NS45IDY3LjFzMTkgNTYuNyA0NS45IDY3LjFjLTcuMyAxNi41LTggMzUuMi0yLjMgNTIuMi0xMy40IDUuNy0yOC4yIDguOC00My42IDguOC02MS45IDAtMTEyLTUwLjEtMTEyLTExMkw5NiA2NEM3OC4zIDY0IDY0IDQ5LjcgNjQgMzJ6bTk2IDMybDAgMTI4IDk2IDAgMC0xMjgtOTYgMHpNMjgwIDQwOGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyOC44IDAgNDMuMi0zNC44IDIyLjktNTUuMi05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBjMjAuNCAyMC40IDU1LjIgNS45IDU1LjItMjIuOSAwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0YzAgMjguOCAzNC44IDQzLjIgNTUuMiAyMi45IDkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWMtMjAuNCAyMC40LTUuOSA1NS4yIDIyLjkgNTUuMiAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjguOCAwLTQzLjIgMzQuOC0yMi45IDU1LjIgOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMjAuNC0yMC40LTU1LjItNS45LTU1LjIgMjIuOSAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTI4LjgtMzQuOC00My4yLTU1LjItMjIuOS05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45YzIwLjQtMjAuNCA1LjktNTUuMi0yMi45LTU1LjJ6bTEwNC0zMmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTg4IDQwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYUNoZWNrRG91YmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZWNrLWRvdWJsZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNTYwIiwgIk0yNDkuOSA2Ni44YzEwLjQtMTQuMyA3LjItMzQuMy03LjEtNDQuN3MtMzQuMy03LjItNDQuNyA3LjFsLTEwNiAxNDUuNy0zNy41LTM3LjVjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzYuNiA2LjYgMTUuOCAxMCAyNS4xIDkuM3MxNy45LTUuNSAyMy40LTEzLjFsMTI4LTE3NnptMTI4IDEzNmMxMC40LTE0LjMgNy4yLTM0LjMtNy4xLTQ0LjdzLTM0LjMtNy4yLTQ0LjcgNy4xbC0xNzAgMjMzLjctNjkuNS02OS41Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmM2LjYgNi42IDE1LjggMTAgMjUuMSA5LjNzMTcuOS01LjUgMjMuNC0xMy4xbDE5Mi0yNjR6Il0KICAgIH07CiAgICBmYVBhdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYXciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFiMCIsICJNMjM0LjUgOTIuOWMxNC4zIDQyLjktLjMgODYuMi0zMi42IDk2LjhzLTcwLjEtMTUuNi04NC40LTU4LjUgLjMtODYuMiAzMi42LTk2LjggNzAuMSAxNS42IDg0LjQgNTguNXpNMTAwLjQgMTk4LjZjMTguOSAzMi40IDE0LjMgNzAuMS0xMC4yIDg0LjFzLTU5LjctLjktNzguNS0zMy4zLTE0LjMtNzAuMSAxMC4yLTg0LjEgNTkuNyAuOSA3OC41IDMzLjN6TTY5LjIgNDAxLjJDMTIxLjYgMjU5LjkgMjE0LjcgMjI0IDI1NiAyMjRzMTM0LjQgMzUuOSAxODYuOCAxNzcuMmMzLjYgOS43IDUuMiAyMC4xIDUuMiAzMC41bDAgMS42YzAgMjUuOC0yMC45IDQ2LjctNDYuNyA0Ni43LTExLjUgMC0yMi45LTEuNC0zNC00LjJsLTg4LTIyYy0xNS4zLTMuOC0zMS4zLTMuOC00Ni42IDBsLTg4IDIyYy0xMS4xIDIuOC0yMi41IDQuMi0zNCA0LjItMjUuOCAwLTQ2LjctMjAuOS00Ni43LTQ2LjdsMC0xLjZjMC0xMC40IDEuNi0yMC44IDUuMi0zMC41ek00MjEuOCAyODIuN2MtMjQuNS0xNC0yOS4xLTUxLjctMTAuMi04NC4xczU0LTQ3LjMgNzguNS0zMy4zIDI5LjEgNTEuNyAxMC4yIDg0LjEtNTQgNDcuMy03OC41IDMzLjN6TTMxMC4xIDE4OS43Yy0zMi4zLTEwLjYtNDYuOS01My45LTMyLjYtOTYuOHM1Mi4xLTY5LjEgODQuNC01OC41IDQ2LjkgNTMuOSAzMi42IDk2LjgtNTIuMSA2OS4xLTg0LjQgNTguNXoiXQogICAgfTsKICAgIGZhSGVsbWV0U2FmZXR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlbG1ldC1zYWZldHkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiaGFyZC1oYXQiLCAiaGF0LWhhcmQiXSwgImY4MDciLCAiTTM1MiAyNjRsMC0yMDBjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjAwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTg1LjlDOTAgMTA5LjggMzIgMTkxLjggMzIgMjg4bDAgNjQgNTEyIDAgMC02NGMtMS05NS4yLTU4LjQtMTc3LjctMTQ0LTIwOS44TDQwMCAyNjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjR6TTQwIDQwMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGw0OTYgMGMyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MEw0MCA0MDB6Il0KICAgIH07CiAgICBmYUhhcmRIYXQgPSBmYUhlbG1ldFNhZmV0eTsKICAgIGZhSGF0SGFyZCA9IGZhSGVsbWV0U2FmZXR5OwogICAgZmFFID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImUiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMDFdLCAiNDUiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjU2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTIyNCAwIDAtMTI4IDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNjAgMCAwLTEyOCAyMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnoiXQogICAgfTsKICAgIGZhRmFjZUxhdWdoU3F1aW50MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWxhdWdoLXNxdWludCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJsYXVnaC1zcXVpbnQiXSwgImY1OWIiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xMDcuNyAzMzIuMUMxMDIgMzE4IDExMy40IDMwNCAxMjguNiAzMDRsMjU0LjkgMGMxNS4yIDAgMjYuNiAxNCAyMC45IDI4LjEtMjMuOCA1OC42LTgxLjIgOTkuOS0xNDguMyA5OS45cy0xMjQuNi00MS4zLTE0OC4zLTk5Ljl6bTE1LTE4OC44YzQuNS02LjggMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMTkyIDEyNS44IDE2NC4zYy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xem0yNjMuNiAyMS4xTDM1MyAxOTIgMzg2LjIgMjE5LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjVzMy4xIDE1LjktMy4xIDIxLjF6Il0KICAgIH07CiAgICBmYUxhdWdoU3F1aW50MiA9IGZhRmFjZUxhdWdoU3F1aW50MjsKICAgIGZhRG93bkxlZnRBbmRVcFJpZ2h0VG9DZW50ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG93bi1sZWZ0LWFuZC11cC1yaWdodC10by1jZW50ZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY29tcHJlc3MtYWx0Il0sICJmNDIyIiwgIk00MzkuNSA3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDMyIDMyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC04NyA4NyAzOSAzOWM2LjkgNi45IDguOSAxNy4yIDUuMiAyNi4yUzQ1MC4yIDI0MCA0NDAuNSAyNDBsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTE0NGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJzMTkuMy0xLjcgMjYuMiA1LjJsMzkgMzkgODctODd6TTcyLjUgMjcybDE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTQ0YzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTM5LTM5LTg3IDg3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtMzItMzJjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDg3LTg3LTM5LTM5Yy02LjktNi45LTguOS0xNy4yLTUuMi0yNi4yUzYyLjggMjcyIDcyLjUgMjcyeiJdCiAgICB9OwogICAgZmFDb21wcmVzc0FsdCA9IGZhRG93bkxlZnRBbmRVcFJpZ2h0VG9DZW50ZXI7CiAgICBmYUdpZnRzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdpZnRzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3OWMiLCAiTTIwMi0zMC42YzEyLjUgNC40IDE5IDE4LjEgMTQuNiAzMC42bC04LjIgMjMuMSAyNS40LTE4LjVjMTAuNy03LjggMjUuNy01LjQgMzMuNSA1LjNzNS40IDI1LjctNS4zIDMzLjVMMjMzLjggNjQgMjcyIDY0YzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMi4xYy01NC43IDEwLjQtOTYgNTguNC05NiAxMTZsMCAxLjljMCA4LjkgMSAxNy41IDIuOCAyNS45LTExLjkgMTcuOC0xOC44IDM5LjEtMTguOCA2Mi4xbDAgMTI4YzAgMjMuOCA3LjQgNDUuOSAyMC4xIDY0TDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRsMzguMiAwLTI4LjMtMjAuNkM0Ny4yIDM1LjYgNDQuOCAyMC42IDUyLjYgOS45Uzc1LjQtMy4yIDg2LjEgNC42bDI3LjQgMjAtOC4zLTI1QzEwMS0xMyAxMDcuOC0yNi42IDEyMC40LTMwLjhzMjYuMiAyLjYgMzAuNCAxNS4ybDkuOSAyOS44IDEwLjctMzAuMmM0LjQtMTIuNSAxOC4xLTE5IDMwLjYtMTQuNnpNNDg5LjkgMjA4Yy03LjUgMC0xNC41IDMuOC0xOC42IDEwLjFMNDQ2LjkgMjU2IDQ4OCAyNTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xLjljMC0xMi4yLTkuOS0yMi4xLTIyLjEtMjIuMXpNMzg1LjEgMjU2bC0yNC40LTM3LjljLTQuMS02LjMtMTEuMS0xMC4xLTE4LjYtMTAuMS0xMi4yIDAtMjIuMSA5LjktMjIuMSAyMi4xbDAgMS45YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQxLjEgMHpNMjgxLjkgMjY4LjVjLTYuMy0xMC43LTkuOS0yMy4yLTkuOS0zNi41bDAtMS45YzAtMzguNyAzMS40LTcwLjEgNzAuMS03MC4xIDIzLjggMCA0NiAxMi4xIDU4LjkgMzIuMWwxNSAyMy4yIDE1LTIzLjJjMTIuOS0yMCAzNS4xLTMyLjEgNTguOS0zMi4xIDM4LjcgMCA3MC4xIDMxLjQgNzAuMSA3MC4xbDAgMS45YzAgMTMuMy0zLjYgMjUuOC05LjkgMzYuNSAxNS43IDExLjcgMjUuOSAzMC40IDI1LjkgNTEuNWwwIDEyOGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNzIgMCAwLTIwOC00OCAwIDAgMjA4LTcyIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTI4YzAtMjEuMSAxMC4yLTM5LjggMjUuOS01MS41eiJdCiAgICB9OwogICAgZmFCZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmVkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NzE2XSwgImYyMzYiLCAiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjI0IDIyNCAwIDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE2MCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyMjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NC00NDggMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptODAgMTYwYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHoiXQogICAgfTsKICAgIGZhTW9uZXlCaWxsVHJhbnNmZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9uZXktYmlsbC10cmFuc2ZlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTI4IiwgIk0zMSAxMDVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45TDEwMy0xYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtMzEgMzEgNjcuNyAwIDAgMCAzMzguMyAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTc4LjItNS4xLTUuMWMtMjguMS0yOC4xLTczLjctMjguMS0xMDEuOCAwLTI3LjIgMjcuMi0yOC4xIDcwLjYtMi44IDk4LjlsNjcuNyAwLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTcyIDcyYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTQwNi4xIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc4LjIgNS4xIDUuMWMyOC4xIDI4LjEgNzMuNyAyOC4xIDEwMS44IDAgMjcuMi0yNy4yIDI4LjEtNzAuNiAyLjgtOTguOWwtNjcuNyAwIDMxIDMxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMMzEgMTA1ek00MTYgMjU2YTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHptODgtNjQuNWM0LjQgLjUgOC0zLjEgOC03LjVsMC00OGMwLTQuNC0zLjYtOC04LThsLTQ4IDBjLTQuNCAwLTguMSAzLjYtNy41IDggMy42IDI5IDI2LjYgNTEuOSA1NS41IDU1LjV6bS0zNjggMTI5Yy00LjQtLjUtOCAzLjEtOCA3LjVsMCA0OGMwIDQuNCAzLjYgOCA4IDhsNDggMGM0LjQgMCA4LjEtMy42IDcuNS04LTMuNi0yOS0yNi42LTUxLjktNTUuNS01NS41eiJdCiAgICB9OwogICAgZmFQZXJzb25SdW5uaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1ydW5uaW5nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3OTM5LCAicnVubmluZyJdLCAiZjcwYyIsICJNMjU2LjUtMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTEyMy42IDE3NmMtMy4zIDAtNi4yIDItNy40IDVMOTQuMiAyMzUuOWMtNi42IDE2LjQtMjUuMiAyNC40LTQxLjYgMTcuOHMtMjQuNC0yNS4yLTE3LjgtNDEuNmwyMS45LTU0LjlDNjcuNyAxMjkuOSA5NC4xIDExMiAxMjMuNiAxMTJsOTcuMyAwYzI4LjUgMCA1NC44IDE1LjEgNjkuMSAzOS43bDMyLjggNTYuMyA2MS42IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTYxLjYgMGMtMjIuOCAwLTQzLjgtMTIuMS01NS4zLTMxLjhsLTEwLTE3LjEtMjAuNyA3MC40IDc1LjQgMjIuNmMyNy43IDguMyA0MS44IDM5IDMwLjEgNjUuNUwyODUuNyA1MDljLTcuMiAxNi4yLTI2LjEgMjMuNC00Mi4yIDE2LjJzLTIzLjQtMjYuMS0xNi4yLTQyLjJsNDkuMi0xMTAuOC05NS45LTI4LjhjLTMyLjctOS44LTUyLTQzLjctNDMuNy03Ni44bDIyLjctOTAuNi0zNS45IDB6bS04IDE4MWMxMy4zIDE0LjkgMzAuNyAyNi4zIDUxLjIgMzIuNGw0LjcgMS40LTYuOSAxOS4zYy01LjggMTYuMy0xNiAzMC44LTI5LjMgNDEuOEw1Mi45IDUxOS44Yy0xMy42IDExLjItMzMuOCA5LjMtNDUtNC4zcy05LjMtMzMuOCA0LjMtNDVsODIuNC02Ny45YzQuNS0zLjcgNy44LTguNSA5LjgtMTMuOUwxMTUuNiAzNTd6Il0KICAgIH07CiAgICBmYVJ1bm5pbmcgPSBmYVBlcnNvblJ1bm5pbmc7CiAgICBmYUNpcmNsZUNoZXZyb25Eb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1jaGV2cm9uLWRvd24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY2hldnJvbi1jaXJjbGUtZG93biJdLCAiZjEzYSIsICJNMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMiAyNTYgMjU2IDAgMSAwIDAtNTEyek0xMzUgMjQxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsODcgODcgODctODdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDI3MyAzNDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwTDEzNSAyNDF6Il0KICAgIH07CiAgICBmYUNoZXZyb25DaXJjbGVEb3duID0gZmFDaXJjbGVDaGV2cm9uRG93bjsKICAgIGZhVXNlck51cnNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItbnVyc2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjgyZiIsICJNOTYgNDQuOWMwLTEyLjcgNy41LTI0LjIgMTkuMi0yOS4zbDk2LTQyYzguMi0zLjYgMTcuNS0zLjYgMjUuNyAwbDk2IDQyQzM0NC41IDIwLjcgMzUyIDMyLjIgMzUyIDQ0LjlsMCA5OS4xYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4Uzk2IDIxNC43IDk2IDE0NGwwLTk5LjF6TTMwNCAxMjhsLTExMS42IDAtLjQgMC00OCAwIDAgMTZjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGwwLTE2ek0yMDggMTZsMCAxNi0xNiAwYy00LjQgMC04IDMuNi04IDhsMCAxNmMwIDQuNCAzLjYgOCA4IDhsMTYgMCAwIDE2YzAgNC40IDMuNiA4IDggOGwxNiAwYzQuNCAwIDgtMy42IDgtOGwwLTE2IDE2IDBjNC40IDAgOC0zLjYgOC04bDAtMTZjMC00LjQtMy42LTgtOC04bC0xNiAwIDAtMTZjMC00LjQtMy42LTgtOC04TDIxNiA4Yy00LjQgMC04IDMuNi04IDh6TTE0Mi42IDMyM2MtNi41LTQuOS0xNS4yLTYuMi0yMi42LTIuOC02MS40IDI4LjItMTA0LjEgOTAuMi0xMDQuMSAxNjIuMSAwIDE2LjQgMTMuMyAyOS43IDI5LjcgMjkuN2wzNTYuNiAwYzE2LjQgMCAyOS43LTEzLjMgMjkuNy0yOS43IDAtNzItNDIuNy0xMzQtMTA0LjEtMTYyLjEtNy40LTMuNC0xNi4xLTIuMS0yMi42IDIuOGwtNjcgNTAuMmMtOC41IDYuNC0yMC4zIDYuNC0yOC44IDBsLTY3LTUwLjJ6Il0KICAgIH07CiAgICBmYUZhY2VLaXNzV2lua0hlYXJ0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWtpc3Mtd2luay1oZWFydCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODUzNiwgImtpc3Mtd2luay1oZWFydCJdLCAiZjU5OCIsICJNNTQzLjcgMjY4LjNjLjItNC4xIC4zLTguMiAuMy0xMi4zIDAtMTQxLjQtMTE0LjYtMjU2LTI1Ni0yNTZTMzIgMTE0LjYgMzIgMjU2IDE0Ni42IDUxMiAyODggNTEyYzQxLjQgMCA4MC41LTkuOCAxMTUuMS0yNy4zLTcuNi0xNy4xLTE2LjEtMzguOC0yMS44LTYxLjctNy43LTMwLjUtMTQuMS03Ni4yIDguMi0xMTQuN2wyLjctNC42YzI5LjUtNTEgOTQuNy02OC41IDE0NS43LTM5IDIgMS4yIDQgMi40IDUuOSAzLjd6TTI0MCAzMDRjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCAxMi4zLTQuNiAyMy41LTEyLjIgMzIgNy42IDguNSAxMi4yIDE5LjcgMTIuMiAzMiAwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnpNMjA4IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTE1MiAyMGMtMTEgMC0yMCA5LTIwIDIwcy05IDIwLTIwIDIwLTIwLTktMjAtMjBjMC0zMy4xIDI2LjktNjAgNjAtNjBsMTYgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MCAwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjAtOS0yMC0yMC0yMGwtMTYgMHpNNTQyLjggMzUwYy0yLjItMTguMy0xMi45LTM0LjYtMjguOS00My44LTI4LjEtMTYuMi02My45LTYuNi04MC4xIDIxLjVsLTIuNyA0LjZjLTI0LjUgNDIuNSA3LjkgMTE3LjkgMjQuNCAxNTAuOCA1LjEgMTAuMSAxNS41IDE2LjEgMjYuOCAxNS41IDM2LjctMi4yIDExOC4yLTExLjcgMTQyLjgtNTQuMmwyLjctNC42YzE2LjItMjguMSA2LjYtNjMuOS0yMS41LTgwLjEtMTYtOS4yLTM1LjQtMTAuNC01Mi40LTMuMWwtOS44IDQuMi0xLjMtMTAuNnoiXQogICAgfTsKICAgIGZhS2lzc1dpbmtIZWFydDIgPSBmYUZhY2VLaXNzV2lua0hlYXJ0MjsKICAgIGZhRmlsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1NzUiLCAiTTI5NiA2NGM2LjkgMCAxMy41IDIuNyAxOC4zIDcuNkw0NDAuNCAxOTcuN2M0LjkgNC45IDcuNiAxMS41IDcuNiAxOC4zcy0yLjcgMTMuNS03LjYgMTguM0wzODYuNyAyODggNjUuMyAyODhjMS4zLTMuOSAzLjQtNy40IDYuMy0xMC4zbDk2LjQtOTYuNCAzMy40IDMzLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wyMTMuMyAxMzYgMjc3LjcgNzEuNmM0LjktNC45IDExLjUtNy42IDE4LjMtNy42ek0xMjIuNyAxMzZMMjYuMyAyMzIuNEM5LjUgMjQ5LjMgMCAyNzIuMSAwIDI5NnM5LjUgNDYuNyAyNi4zIDYzLjZMMTUyLjQgNDg1LjdDMTY5LjMgNTAyLjUgMTkyLjEgNTEyIDIxNiA1MTJzNDYuNy05LjUgNjMuNi0yNi4zTDQ4NS43IDI3OS42QzUwMi41IDI2Mi43IDUxMiAyMzkuOSA1MTIgMjE2cy05LjUtNDYuNy0yNi4zLTYzLjZMMzU5LjYgMjYuM0MzNDIuNyA5LjUgMzE5LjkgMCAyOTYgMHMtNDYuNyA5LjUtNjMuNiAyNi4zTDE2OCA5MC43IDExOC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDEyMi43IDEzNnoiXQogICAgfTsKICAgIGZhTW9uZXlCaWxsMVdhdmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9uZXktYmlsbC0xLXdhdmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibW9uZXktYmlsbC13YXZlLWFsdCJdLCAiZjUzYiIsICJNMCAxMDkuNUwwIDQxOS42YzAgMTkuNCAxMS44IDM3LjMgMzAuMyA0My4zIDk0IDMwIDE1OC44IDguNCAyMjMuMy0xMy4xIDYyLjQtMjAuOCAxMjQuNC00MS41IDIxMi4xLTE1LjMgMjIuMiA2LjYgNDYuMi04LjggNDYuMi0zMmwwLTMxMC4xYzAtMTkuNC0xMS44LTM3LjMtMzAuMy00My4zLTk0LTMwLTE1OC44LTguNC0yMjMuMyAxMy4xLTYyLjQgMjAuOC0xMjQuNCA0MS41LTIxMi4xIDE1LjMtMjIuMi02LjYtNDYuMyA4LjgtNDYuMyAzMnpNMjU2IDM2OGMtNTMgMC05Ni01MC4xLTk2LTExMnM0My0xMTIgOTYtMTEyIDk2IDUwLjEgOTYgMTEyLTQzIDExMi05NiAxMTJ6TTEyNy4xIDQwNS41Yy43IDQuNC0yLjggOC4xLTcuMiA4LjEtMTUuNyAwLTMyLjEtMS44LTUwLTYuMS0zLjUtLjgtNi00LTYtNy43TDY0IDM2MGMwLTQuNCAzLjYtOC4xIDgtNy41IDI4LjEgMy41IDUwLjYgMjUuMiA1NS4yIDUzek00NDggMzU0LjZjMCA1LTQuNiA4LjgtOS41IDgtMTUuNC0yLjUtMzAuMi0zLjktNDQuNC00LjMtNC45LS4xLTguNy00LjUtNy4yLTkuMiA3LjMtMjMuNyAyOC00MS40IDUzLjItNDQuNiA0LjQtLjUgOCAzLjEgOCA3LjVsMCA0Mi42em0tOC0xOTUuMWMtMjguMS0zLjUtNTAuNi0yNS4yLTU1LjItNTMtLjctNC40IDIuOC04LjEgNy4yLTguMSAxNS43IDAgMzIuMSAxLjggNTAgNi4xIDMuNSAuOCA2IDQgNiA3LjdsMCAzOS45YzAgNC40LTMuNiA4LjEtOCA3LjV6bS0zMjIuMS01LjhjNC45IC4xIDguNyA0LjUgNy4yIDkuMi03LjMgMjMuNy0yOCA0MS40LTUzLjIgNDQuNi00LjQgLjUtOC0zLjEtOC03LjVsMC00Mi42YzAtNSA0LjYtOC44IDkuNS04IDE1LjQgMi41IDMwLjIgMy45IDQ0LjQgNC4zek0yNDAgMTg4Yy0xMSAwLTIwIDktMjAgMjAgMCA5LjcgNi45IDE3LjcgMTYgMTkuNmwwIDQ4LjQtNCAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGw0OCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtNCAwIDAtNjhjMC0xMS05LTIwLTIwLTIwbC0xNiAweiJdCiAgICB9OwogICAgZmFNb25leUJpbGxXYXZlQWx0ID0gZmFNb25leUJpbGwxV2F2ZTsKICAgIGZhTGFuZG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGFuZG1hcmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NjNdLCAiZjY2ZiIsICJNMjM4LjcgNS4xYzEwLjUtNi44IDI0LjEtNi44IDM0LjYgMGwyMjQgMTQ0YzExLjkgNy43IDE3LjQgMjIuMyAxMy40IDM1LjlzLTE2LjUgMjMtMzAuNyAyM2wtMzIgMCAwIDIwOCA1MS4yIDM4LjRjOC4xIDYgMTIuOCAxNS41IDEyLjggMjUuNiAwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyIDAtMTAuMSA0LjctMTkuNiAxMi44LTI1LjZsNTEuMi0zOC40IDAgMCAwLTIwOC0zMiAwYy0xNC4yIDAtMjYuNy05LjQtMzAuNy0yM3MxLjUtMjguMyAxMy40LTM1LjlsMjI0LTE0NHpNMzM2IDIwOGwwIDIwOCA2NCAwIDAtMjA4LTY0IDB6TTIyNCA0MTZsNjQgMCAwLTIwOC02NCAwIDAgMjA4ek0xMTIgMjA4bDAgMjA4IDY0IDAgMC0yMDgtNjQgMHoiXQogICAgfTsKICAgIGZhTXVzaWMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibXVzaWMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5MjVdLCAiZjAwMSIsICJNNDY4IDdjNy42IDYuMSAxMiAxNS4zIDEyIDI1bDAgMzA0YzAgNDQuMi00MyA4MC05NiA4MHMtOTYtMzUuOC05Ni04MCA0My04MCA5Ni04MGMxMS4yIDAgMjIgMS42IDMyIDQuNmwwLTExNi43LTIyNCA0OS44IDAgMjA2LjNjMCA0NC4yLTQzIDgwLTk2IDgwcy05Ni0zNS44LTk2LTgwIDQzLTgwIDk2LTgwYzExLjIgMCAyMiAxLjYgMzIgNC42TDEyOCA5NmMwLTE1IDEwLjQtMjggMjUuMS0zMS4ybDI4OC02NGM5LjUtMi4xIDE5LjQgLjIgMjcgNi4zeiJdCiAgICB9OwogICAgZmFCb29rTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLW1lZGljYWwiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjdlNiIsICJNOTYgNTEybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtNjYuN2MxOC42LTYuNiAzMi0yNC40IDMyLTQ1LjNsMC0yODhjMC0yNi41LTIxLjUtNDgtNDgtNDhMOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2ek02NCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjU2IDAgMCA2NC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTE5MiAxMjBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQwIDAgMCA0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDB6Il0KICAgIH07CiAgICBmYVNodWZmbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2h1ZmZsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI1NiwgInJhbmRvbSJdLCAiZjA3NCIsICJNNDAzLjggMzQuNGMxMi01IDI1LjctMi4yIDM0LjkgNi45bDY0IDY0YzYgNiA5LjQgMTQuMSA5LjQgMjIuNnMtMy40IDE2LjYtOS40IDIyLjZsLTY0IDY0Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOVMzODQgMjA0LjkgMzg0IDE5MmwwLTMyLTMyIDBjLTEwLjEgMC0xOS42IDQuNy0yNS42IDEyLjhsLTMyLjQgNDMuMi00MC01My4zIDIxLjItMjguM0MyOTMuMyAxMTAuMiAzMjEuOCA5NiAzNTIgOTZsMzIgMCAwLTMyYzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZ6TTE1NCAyOTZsNDAgNTMuMy0yMS4yIDI4LjNDMTU0LjcgNDAxLjggMTI2LjIgNDE2IDk2IDQxNmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2NCAwYzEwLjEgMCAxOS42LTQuNyAyNS42LTEyLjhMMTU0IDI5NnpNNDM4LjYgNDcwLjZjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzM4NCA0NjAuOSAzODQgNDQ4bDAtMzItMzIgMGMtMzAuMiAwLTU4LjctMTQuMi03Ni44LTM4LjRMMTIxLjYgMTcyLjhjLTYtOC4xLTE1LjUtMTIuOC0yNS42LTEyLjhsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzE0LjMgOTYgMzIgOTZsNjQgMGMzMC4yIDAgNTguNyAxNC4yIDc2LjggMzguNEwzMjYuNCAzMzkuMmM2IDguMSAxNS41IDEyLjggMjUuNiAxMi44bDMyIDAgMC0zMmMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDY0IDY0YzYgNiA5LjQgMTQuMSA5LjQgMjIuNnMtMy40IDE2LjYtOS40IDIyLjZsLTY0IDY0eiJdCiAgICB9OwogICAgZmFSYW5kb20gPSBmYVNodWZmbGU7CiAgICBmYVVuZGVybGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1bmRlcmxpbmUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjBjZCIsICJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBMOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlMxMTMuNyA2NCA5NiA2NGwwIDE2MGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMlMyNzAuMyAwIDI4OCAwbDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxNjBjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBTMzIgMzEyLjQgMzIgMjI0TDMyIDY0QzE0LjMgNjQgMCA0OS43IDAgMzJ6TTAgNDgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nVXNlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy11c2VyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZGEiLCAiTTY0IDY0QzY0IDI4LjcgOTIuNyAwIDEyOCAwTDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTIxLjNjLTQ2LjkgMTktODAgNjUtODAgMTE4LjcgMCAyNy43IDguOCA1My40IDIzLjggNzQuNC01MS41IDIxLTg3LjggNzEuNi04Ny44IDEzMC43IDAgMSAwIDEuOSAwIDIuOWwtMTc2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDY0IDY0ek0yMDggNDAwbDAgNjQgNTMuNCAwYzcuMi0yOS40IDIxLjMtNTYuMSA0MC40LTc4LjMtNi4xLTE5LjUtMjQuMy0zMy43LTQ1LjgtMzMuNy0yNi41IDAtNDggMjEuNS00OCA0OHpNMzM5IDIyNC4zYy0xLS4yLTItLjMtMy0uM2wtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDE2LjcgMGMyLjEtMjIuOCA4LjQtNDQuMyAxOC4zLTYzLjd6TTE3NiA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0xMTIgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTc2IDIyNGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0yNDAgODBhODAgODAgMCAxIDEgMTYwIDAgODAgODAgMCAxIDEgLTE2MCAwek0zNTIgNTEyYzAtNTMgNDMtOTYgOTYtOTZsOTYgMGM1MyAwIDk2IDQzIDk2IDk2IDAgMTcuNy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYVJvYm90ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvYm90IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI5MzAyXSwgImY1NDQiLCAiTTM1MiAwYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzI4OC0xNy43IDI4OCAwbDAgNjQtOTYgMGMtNTMgMC05NiA0My05NiA5NmwwIDIyNGMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0yMjRjMC01My00My05Ni05Ni05NmwtOTYgMCAwLTY0ek0xNjAgMzY4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTMyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0xMjAgMGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwzMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0zMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMTIwIDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMzIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTIyNCAxNzZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0xNDQgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNNjQgMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgMjA2LjMgMCAyMjRsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTZ6bTU0NC0zMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJ6Il0KICAgIH07CiAgICBmYVBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEwMTMzLCA2MTU0MywgImFkZCJdLCAiMmIiLCAiTTI1NiA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE2MC0xNjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNjAgMCAwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwIDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNjAgMCAwLTE2MHoiXQogICAgfTsKICAgIGZhQWRkID0gZmFQbHVzOwogICAgZmFDb3B5MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb3B5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwYzUiLCAiTTE5MiAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTIwMC42YzAtMTcuNC03LjEtMzQuMS0xOS43LTQ2LjJMMzcwLjYgMTcuOEMzNTguNyA2LjQgMzQyLjggMCAzMjYuMyAwTDE5MiAwek02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTYtNjQgMCAwIDE2LTE5MiAwIDAtMjU2IDE2IDAgMC02NC0xNiAweiJdCiAgICB9OwogICAgZmFDaGVzc0tpbmcyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXNzLWtpbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODE4XSwgImY0M2YiLCAiTTIyNC0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCA2NCAxNTMuOCAwYzIxLjEgMCAzOC4yIDE3LjEgMzguMiAzOC4yIDAgNi40LTEuNiAxMi43LTQuNyAxOC4zTDM1MiAzODQgNDA4LjIgNDU0LjNjNSA2LjMgNy44IDE0LjEgNy44IDIyLjIgMCAxOS42LTE1LjkgMzUuNS0zNS41IDM1LjVMNjcuNSA1MTJjLTE5LjYgMC0zNS41LTE1LjktMzUuNS0zNS41IDAtOC4xIDIuNy0xNS45IDcuOC0yMi4yTDk2IDM4NCA0LjcgMjE2LjZDMS42IDIxMC45IDAgMjA0LjYgMCAxOTguMiAwIDE3Ny4xIDE3LjEgMTYwIDM4LjIgMTYwbDE1My44IDAgMC02NC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhSG91c2VGbG9vZFdhdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWZsb29kLXdhdGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MGUiLCAiTTQ5NiAyMDhsNC41IDBjMTUuMiAwIDI3LjUtMTIuMyAyNy41LTI3LjUgMC03LjktMy40LTE1LjUtOS40LTIwLjdMMzQ4IDEwLjVDMzQwLjMgMy43IDMzMC4zIDAgMzIwIDBzLTIwLjMgMy43LTI4IDEwLjVMMTIxLjQgMTU5LjhjLTYgNS4yLTkuNCAxMi44LTkuNCAyMC43IDAgMTUuMiAxMi4zIDI3LjUgMjcuNSAyNy41bDQuNSAwIDAgOTQuNGMyMC4zLTkuNCA0Mi4xLTE0LjIgNjQtMTQuNCAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjQgMjIuMSAxNi42IDI5LjEgMTYuNiA1MS4yIDAgMjcuNS0yMC43IDU5LjktMzEuMiA5Mi40LTMxLjQgMTYuOS0uMSAzMy44IDIuNiA1MCA4bDAtODh6bS0yMjQtOGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDh6TTQ3NC42IDQxMi4xYzE5IDE0LjQgNDEuOSAyOC4yIDY3LjIgMzMuMyAyNi41IDUuNCA1NC4zIC44IDgwLjctMTkuMSAxMC42LTggMTIuNy0yMyA0LjctMzMuNnMtMjMtMTIuNy0zMy42LTQuN2MtMTQuOSAxMS4yLTI4LjYgMTMuMS00Mi4zIDEwLjMtMTQuOS0zLTMwLjktMTEuOS00Ny44LTI0LjYtMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjEuNiAxNi4zLTQxLjMgMjUuOC01OC45IDI1LjctOS42LS4xLTE5LjktMy0zMS4yLTExLjUtMTAuNi04LTI1LjYtNS45LTMzLjYgNC43UzcgNDE4LjMgMTcuNiA0MjYuM2MxOS4xIDE0LjQgMzkuNCAyMSA1OS44IDIxLjEgMzMuOSAuMiA2NC4zLTE3LjQgODguMS0zNS4zIDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1LjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDB6bS03MS4yIDk2YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDE5IDE0LjQgNDEuOSAyOC4yIDY3LjIgMzMuMyAyNi41IDUuNCA1NC4zIC44IDgwLjctMTkuMSAxMC42LTggMTIuNy0yMyA0LjctMzMuNnMtMjMtMTIuNy0zMy42LTQuN2MtMTQuOSAxMS4yLTI4LjYgMTMuMS00Mi4zIDEwLjMtMTQuOS0zLTMwLjktMTEuOS00Ny44LTI0LjYtMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjEuNiAxNi4zLTQxLjMgMjUuOC01OC45IDI1LjctOS42LS4xLTE5LjktMy0zMS4yLTExLjUtMTAuNi04LTI1LjYtNS45LTMzLjYgNC43UzcgNTE0LjMgMTcuNiA1MjIuM2MxOS4xIDE0LjQgMzkuNCAyMSA1OS44IDIxLjEgMzMuOSAuMiA2NC4zLTE3LjQgODguMS0zNS4zIDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1Ljl6Il0KICAgIH07CiAgICBmYUJpdGNvaW5TaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJpdGNvaW4tc2lnbiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlMGI0IiwgIk02NCAyNEM2NCAxMC43IDc0LjcgMCA4OCAwczI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQxLjFjNTQuMyA3LjggOTYgNTQuNCA5NiAxMTAuOSAwIDI0LjItNy43IDQ2LjYtMjAuNyA2NC45IDMxLjcgMTkuOCA1Mi43IDU1IDUyLjcgOTUuMSAwIDYxLjktNTAuMSAxMTItMTEyIDExMmwtMTYgMCAwIDQwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDAtMzIgMCAwIDQwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDAtMjIuMyAwQzE4LjcgNDQ4IDAgNDI5LjMgMCA0MDYuM0wwIDEwMS42QzAgODAuOCAxNi44IDY0IDM3LjYgNjRMNjQgNjQgNjQgMjR6bTAgMjAwbDExMiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4bC0xMTIgMCAwIDk2em0xMTIgNjRsLTExMiAwIDAgOTYgMTQ0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhsLTMyIDB6Il0KICAgIH07CiAgICBmYUJveCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyMzBdLCAiZjQ2NiIsICJNMzY5LjQgMTI4bC0zNC4zLTQ4LTIyMi4xIDAtMzQuMyA0OCAyOTAuNyAwek0wIDE0OC41YzAtMTMuMyA0LjItMjYuMyAxMS45LTM3LjJMNjAuOSA0Mi44QzcyLjkgMjYgOTIuMyAxNiAxMTIuOSAxNmwyMjIuMSAwYzIwLjcgMCA0MC4xIDEwIDUyLjEgMjYuOGw0OC45IDY4LjVjNy44IDEwLjkgMTEuOSAyMy45IDExLjkgMzcuMkw0NDggNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxNDguNXoiXQogICAgfTsKICAgIGZhU3F1YXJlUGx1czIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXBsdXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2MTg0NiwgInBsdXMtc3F1YXJlIl0sICJmMGZlIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yMDAgMzQ0bDAtNjQtNjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw2NCAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDY0IDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTY0IDAgMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhUGx1c1NxdWFyZTIgPSBmYVNxdWFyZVBsdXMyOwogICAgZmFBcnJvd3NMZWZ0UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLWxlZnQtcmlnaHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiYXJyb3dzLWgiXSwgImYwN2UiLCAiTTQ3MC42IDM3NC42bDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC05Ni05NmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNDEuNCA0MS40LTM1Ny41IDAgNDEuNC00MS40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtNiA2LTkuNCAxNC4xLTkuNCAyMi42czMuNCAxNi42IDkuNCAyMi42bDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTQxLjQtNDEuNCAzNTcuNSAwLTQxLjQgNDEuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMHoiXQogICAgfTsKICAgIGZhQXJyb3dzSCA9IGZhQXJyb3dzTGVmdFJpZ2h0OwogICAgZmFGYW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4NjMiLCAiTTE2MCAxNDRjMC03OS41IDY0LjUtMTQ0IDE0NC0xNDQgOC44IDAgMTYgNy4yIDE2IDE2bDAgMTUyLjJjMTUtNS4zIDMxLjItOC4yIDQ4LTguMiA3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NCAwIDguOC03LjIgMTYtMTYgMTZsLTE1Mi4yIDBjNS4zIDE1IDguMiAzMS4yIDguMiA0OCAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NC04LjggMC0xNi03LjItMTYtMTZsMC0xNTIuMmMtMTUgNS4zLTMxLjIgOC4yLTQ4IDguMi03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NCAwLTguOCA3LjItMTYgMTYtMTZsMTUyLjIgMGMtNS4zLTE1LTguMi0zMS4yLTguMi00OHptOTYgMTQ0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQ3JvdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjcm93IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY1MjAiLCAiTTQ1Ni41IDBjLTQ4LjYgMC04OCAzOS40LTg4IDg4bDAgMzYtMzU1LjIgMjY2LjRDLS44IDQwMS0zLjcgNDIxIDYuOSA0MzUuMnMzMC42IDE3IDQ0LjggNi40bDc2LjgtNTcuNiAxMzEuMyAwIDQ2LjYgMTEzLjEgMSAyLjJjNS43IDEwLjcgMTguOCAxNS41IDMwLjMgMTAuOHMxNy4zLTE3LjMgMTMuOS0yOWwtLjgtMi4zLTM5LjEtOTQuOSA0MC45IDBjMS4xIDAgMi4yIDAgMy4yIDBsNDYuNiAxMTMuMiAxIDIuMmM1LjcgMTAuNyAxOC44IDE1LjUgMzAuMyAxMC44czE3LjMtMTcuMyAxMy45LTI5bC0uOC0yLjMtNDItMTAyQzQ4NS4zIDM1NC4xIDU0NC41IDI4MCA1NDQuNSAxOTJsMC03MiA4MC41LTIwLjFjOC42LTIuMSAxMy44LTEwLjggMTEuNi0xOS40LTcuMS0yOC41LTMyLjctNDguNS02Mi4xLTQ4LjVsLTUwLjEgMEM1MDguMiAxMi41IDQ4My44IDAgNDU2LjUgMHptMCA2NGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYUZpbGVDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNWEwIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTU3NiA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdCiAgICB9OwogICAgZmFMaW5rU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGluay1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJjaGFpbi1icm9rZW4iLCAiY2hhaW4tc2xhc2giLCAidW5saW5rIl0sICJmMTI3IiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xMjItMTIyYzQuMi0zLjQgOC4zLTcuMSAxMi4xLTEwLjlsNzEuMS03MS4xYzI5LjMtMjkuMyA0NS44LTY5LjEgNDUuOC0xMTAuNiAwLTg2LjQtNzAtMTU2LjUtMTU2LjUtMTU2LjUtMzcuMyAwLTczLjEgMTMuMy0xMDEuMyAzNy4yIDIwLjMgMTAuMSAzOC43IDIzLjUgNTQuNSAzOS41IDE0LjEtOC4zIDMwLjItMTIuNyA0Ni44LTEyLjcgNTEuMSAwIDkyLjUgNDEuNCA5Mi41IDkyLjUgMCAyNC41LTkuNyA0OC0yNy4xIDY1LjRsLTcxLjEgNzEuMWMtMy45IDMuOS04LjEgNy40LTEyLjYgMTAuNWwtNDcuNS00Ny41YzE2LjUtLjkgMjkuNy0xNC40IDMwLjItMzEuMSAwLTEuMyAwLTIuNiAwLTMuOSAwLTg2LjMtNjkuOS0xNTYuOS0xNTYuNS0xNTYuOS0xOS4yIDAtMzcuOSAzLjUtNTUuNSAxMC4yTDQxLTI0Ljl6TTIyNS45IDE2MGMuNiAwIDEuMSAwIDEuNyAwIDE1LjEgMCAyOS41IDMuNyA0Mi4xIDEwLjIgMS44IDEuMiAzLjYgMi4zIDUuNSAzLjEgMjYuOCAxNi4zIDQ0LjggNDUuOSA0NC44IDc5LjYgMCAuNCAwIC44IDAgMS4yTDIyNS45IDE2MHpNMzQ2LjIgNDE2TDE5MiAyNjEuOGMxLjIgODQuNiA2OS42IDE1Mi45IDE1NC4xIDE1NC4xek0xMzkuNyAyMDkuNWwtNDUuMy00NS4zLTQ4LjYgNDguNmMtMjkuMyAyOS4zLTQ1LjggNjkuMS00NS44IDExMC42IDAgODYuNCA3MCAxNTYuNSAxNTYuNSAxNTYuNSAzNy4yIDAgNzMuMS0xMy4zIDEwMS4zLTM3LjItMjAuMy0xMC4xLTM4LjgtMjMuNS01NC42LTM5LjUtMTQgOC4yLTMwLjEgMTIuNi00Ni43IDEyLjYtNTEuMSAwLTkyLjUtNDEuNC05Mi41LTkyLjUgMC0yNC41IDkuNy00OCAyNy4xLTY1LjRsNDguNi00OC42eiJdCiAgICB9OwogICAgZmFDaGFpbkJyb2tlbiA9IGZhTGlua1NsYXNoOwogICAgZmFDaGFpblNsYXNoID0gZmFMaW5rU2xhc2g7CiAgICBmYVVubGluayA9IGZhTGlua1NsYXNoOwogICAgZmFBcnJvd1JvdGF0ZVJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXJvdGF0ZS1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzg2MzUsICJhcnJvdy1yaWdodC1yb3RhdGUiLCAiYXJyb3ctcm90YXRlLWZvcndhcmQiLCAicmVkbyJdLCAiZjAxZSIsICJNNDM2LjcgNzQuN0w0NDggODUuNCA0NDggMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNDcuOSAwLTcuNi03LjJjLS4yLS4yLS40LS40LS42LS42LTc1LTc1LTE5Ni41LTc1LTI3MS41IDBzLTc1IDE5Ni41IDAgMjcxLjUgMTk2LjUgNzUgMjcxLjUgMGM4LjItOC4yIDE1LjUtMTYuOSAyMS45LTI2LjEgMTAuMS0xNC41IDMwLjEtMTggNDQuNi03LjlzMTggMzAuMSA3LjkgNDQuNmMtOC41IDEyLjItMTguMiAyMy44LTI5LjEgMzQuNy0xMDAgMTAwLTI2Mi4xIDEwMC0zNjIgMFMtMjUgMTc1IDc1IDc1Yzk5LjktOTkuOSAyNjEuNy0xMDAgMzYxLjctLjN6Il0KICAgIH07CiAgICBmYUFycm93UmlnaHRSb3RhdGUgPSBmYUFycm93Um90YXRlUmlnaHQ7CiAgICBmYUFycm93Um90YXRlRm9yd2FyZCA9IGZhQXJyb3dSb3RhdGVSaWdodDsKICAgIGZhUmVkbyA9IGZhQXJyb3dSb3RhdGVSaWdodDsKICAgIGZhUGVuQ2xpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW4tY2xpcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJwZW4tYWx0Il0sICJmMzA1IiwgIk00MDQgMGMxOS4yIDAgMzcuNiA3LjYgNTEuMSAyMS4ybDM1LjcgMzUuN0M1MDQuNCA3MC40IDUxMiA4OC44IDUxMiAxMDhzLTcuNiAzNy42LTIxLjIgNTEuMUw0NDUuOSAyMDQgMzA4IDY2LjEgMzUyLjkgMjEuMkMzNjYuNCA3LjYgMzg0LjggMCA0MDQgMHpNMjc0LjEgMTAwbDAgMCAxMzcuOSAxMzcuOS0yMTUuMSAyMTUuMWMtMTAuNyAxMC43LTI0LjEgMTguNS0zOC43IDIyLjZMMzAuNCA1MTEuMWMtOC4zIDIuMy0xNy4zIDAtMjMuNC02LjJzLTguNS0xNS4xLTYuMi0yMy40TDM2LjQgMzUzLjhjNC4xLTE0LjYgMTEuOC0yNy45IDIyLjYtMzguN0wyNDAuMSAxMzMuOSAyMjMgMTE2LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDg5IDIxN2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUwxNTUuMSA4Mi45YzI4LjEtMjguMSA3My43LTI4LjEgMTAxLjggMEwyNzQuMSAxMDB6Il0KICAgIH07CiAgICBmYVBlbkFsdCA9IGZhUGVuQ2xpcDsKICAgIGZhRG9vckNsb3NlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb29yLWNsb3NlZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODY4Ml0sICJmNTJhIiwgIk0zMiA2NEMzMiAyOC43IDYwLjcgMCA5NiAwTDM1MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkwzMiA2NHpNMzIwIDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUFycm93RG93bldpZGVTaG9ydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLXdpZGUtc2hvcnQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsic29ydC1hbW91bnQtYXNjIiwgInNvcnQtYW1vdW50LWRvd24iXSwgImYxNjAiLCAiTTI0Ni42IDM3NC42bC05NiA5NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTk2LTk2Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDM3MC43IDk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDYuNyA0MS40LTQxLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pNMzIwIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwem0wLTEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwem0wLTEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYwIDB6bTAtMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyMCA5NnoiXQogICAgfTsKICAgIGZhU29ydEFtb3VudEFzYyA9IGZhQXJyb3dEb3duV2lkZVNob3J0OwogICAgZmFTb3J0QW1vdW50RG93biA9IGZhQXJyb3dEb3duV2lkZVNob3J0OwogICAgZmFDYXJldERvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FyZXQtZG93biIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMGQ3IiwgIk0xNDAuMyAzNzYuOGMxMi42IDEwLjIgMzEuMSA5LjUgNDIuOC0yLjJsMTI4LTEyOGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVMzMDEuNCAxOTIgMjg4LjUgMTkybC0yNTYgMGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOFMuNyAyMzcuNSA5LjkgMjQ2LjZsMTI4IDEyOCAyLjQgMi4yeiJdCiAgICB9OwogICAgZmFLID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImsiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMDddLCAiNGIiLCAiTTMxMSA4Ni4zYzEyLjMtMTIuNyAxMi0zMi45LS43LTQ1LjJzLTMyLjktMTItNDUuMiAuN0MxNDMuNCAxNjcuMiA3Ni40IDIzNi4zIDY0IDI0OUw2NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTA3IDY0LjctNjYuNyAxMzMgMTkyYzEwLjEgMTQuNSAzMCAxOC4xIDQ0LjUgOC4xczE4LjEtMzAgOC4xLTQ0LjVMMTc0LjEgMjI3LjQgMzExIDg2LjN6Il0KICAgIH07CiAgICBmYUNoZWNrVG9TbG90ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZWNrLXRvLXNsb3QiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsidm90ZS15ZWEiXSwgImY3NzIiLCAiTTU1MiAyODhjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxMDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDMxMmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTA0YzAgOC44IDcuMiAxNiAxNiAxNmw0NDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xMDRjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTQxNiAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMjU2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDk2IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDI1NiAwem0tMzcuMSA4NC42Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM2wtODUuNiAxMTcuNy0yNi41LTI3LjRjLTkuMi05LjUtMjQuNC05LjgtMzMuOS0uNi05LjUgOS4yLTkuOCAyNC40LS42IDMzLjlsNDYuNCA0OGM0LjkgNS4xIDExLjggNy44IDE4LjkgNy4zczEzLjYtNC4xIDE3LjgtOS44TDM4NC4yIDE1MC4xYzcuOC0xMC43IDUuNC0yNS43LTUuMy0zMy41eiJdCiAgICB9OwogICAgZmFWb3RlWWVhID0gZmFDaGVja1RvU2xvdDsKICAgIGZhRmlzaEZpbnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlzaC1maW5zIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZjIiLCAiTTI3NS4yIDM4LjRjLTEwLjYtOC0yNS04LjUtMzYuMy0xLjVTMjIyIDU3LjMgMjI0LjYgNzAuM2w5LjcgNDguNmMtMTkuNCA5LTM2LjkgMTkuOS01Mi40IDMxLjUtMTUuMyAxMS41LTI5IDIzLjktNDAuNyAzNi4zTDQ4LjEgMTMyLjRjLTEyLjUtNy4zLTI4LjQtNS4zLTM4LjcgNC45cy0xMi40IDI2LTUuMyAzOC42TDUwIDI1NiA0LjIgMzM2LjFjLTcuMiAxMi42LTUgMjguNCA1LjMgMzguNnMyNi4xIDEyLjIgMzguNyA0LjlsOTMuMS01NC4zYzExLjggMTIuMyAyNS40IDI0LjggNDAuNyAzNi4zIDE1LjUgMTEuNiAzMyAyMi41IDUyLjQgMzEuNWwtOS43IDQ4LjZjLTIuNiAxMyAzLjEgMjYuMyAxNC4zIDMzLjNzMjUuNiA2LjUgMzYuMy0xLjVsNzcuNi01OC4yYzU0LjktNCAxMDEuNS0yNyAxMzcuMi01My44IDM5LjItMjkuNCA2Ny4yLTY0LjcgODEuNi04OS41IDUuOC05LjkgNS44LTIyLjIgMC0zMi4xLTE0LjQtMjQuOC00Mi41LTYwLjEtODEuNi04OS41LTM1LjgtMjYuOC04Mi4zLTQ5LjgtMTM3LjItNTMuOEwyNzUuMiAzOC40ek0zODQgMjU2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYUNvbXByZXNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbXByZXNzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwNjYiLCAiTTE2MCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlM5NiA0Ni4zIDk2IDY0bDAgNjQtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtOTZ6TTMyIDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAwek0zNTIgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwIDAtNjR6TTMyMCAzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDB6Il0KICAgIH07CiAgICBmYUFycm93VXBBWiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC1hLXoiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic29ydC1hbHBoYS11cCJdLCAiZjE1ZSIsICJNNDEyLjYgNDkuN0M0MDcuMiAzOC44IDM5Ni4xIDMyIDM4NCAzMnMtMjMuMiA2LjgtMjguNiAxNy43Yy01MC43IDEwMS4zLTc3LjMgMTU0LjctODAgMTYwLTcuOSAxNS44LTEuNSAzNSAxNC4zIDQyLjlzMzUgMS41IDQyLjktMTQuM2w3LjItMTQuMyA4OC40IDAgNy4yIDE0LjNjNy45IDE1LjggMjcuMSAyMi4yIDQyLjkgMTQuM3MyMi4yLTI3LjEgMTQuMy00Mi45Yy0yLjctNS4zLTI5LjMtNTguNy04MC0xNjB6TTM4NCAxMzUuNmwyMC4yIDQwLjQtNDAuNCAwIDIwLjItNDAuNHpNMjg4IDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw1MC43IDAtNzMuNCA3My40Yy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOVMzMDcuMSA0ODAgMzIwIDQ4MGwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNTAuNyAwIDczLjQtNzMuNGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0NjAuOSAyODggNDQ4IDI4OGwtMTI4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtODAgODBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyAyNS40IDI1LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtODAtODB6Il0KICAgIH07CiAgICBmYVNvcnRBbHBoYVVwID0gZmFBcnJvd1VwQVo7CiAgICBmYVVzZXJHcmFkdWF0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWdyYWR1YXRlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1MDEiLCAiTTI0MS4zLTEzYy0xMS40LTIuMy0yMy4xLTIuMy0zNC41IDBMMTkuMyAyNC41QzguMSAyNi43IDAgMzYuNiAwIDQ4IDAgNTguMyA2LjUgNjcuMyAxNiA3MC42TDE2IDE0NCAuMyAyMjIuNmMtLjIgLjktLjMgMS45LS4zIDIuOSAwIDggNi41IDE0LjYgMTQuNiAxNC42bDM0LjkgMGM4IDAgMTQuNi02LjUgMTQuNi0xNC42IDAtMS0uMS0xLjktLjMtMi45TDQ4IDE0NCA0OCA3Ny4zIDk2IDg2LjkgOTYgMTQ0YzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4czEyOC01Ny4zIDEyOC0xMjhsMC01Ny4xIDc2LjctMTUuM0M0MzkuOSA2OS4zIDQ0OCA1OS40IDQ0OCA0OHMtOC4xLTIxLjMtMTkuMy0yMy41TDI0MS4zLTEzek0yMjQgMjI0Yy00NC4yIDAtODAtMzUuOC04MC04MGwxNjAgMGMwIDQ0LjItMzUuOCA4MC04MCA4MHpNMTIwLjEgMzIwLjFDNTguNyAzNDguMyAxNiA0MTAuMyAxNiA0ODIuMyAxNiA0OTguNyAyOS4zIDUxMiA0NS43IDUxMmwxNTQuMyAwIDAtMTQ2LTU3LjQtNDNjLTYuNS00LjktMTUuMi02LjItMjIuNi0yLjh6TTI0OCA1MTJsMTU0LjMgMGMxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuNyAwLTcyLTQyLjctMTM0LTEwNC4xLTE2Mi4xLTcuNC0zLjQtMTYuMS0yLjEtMjIuNiAyLjhsLTU3LjQgNDMgMCAxNDZ6Il0KICAgIH07CiAgICBmYUZpbGVDb2RlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNvZGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFjOSIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTE1NC4yIDI5NS42YzguNi0xMC4xIDcuNS0yNS4yLTIuNi0zMy44cy0yNS4yLTcuNS0zMy44IDIuNmwtNDggNTZjLTcuNyA5LTcuNyAyMi4yIDAgMzEuMmw0OCA1NmM4LjYgMTAuMSAyMy44IDExLjIgMzMuOCAyLjZzMTEuMi0yMy44IDIuNi0zMy44bC0zNC42LTQwLjQgMzQuNi00MC40em0xMTItMzEuMmMtOC42LTEwLjEtMjMuOC0xMS4yLTMzLjgtMi42cy0xMS4yIDIzLjgtMi42IDMzLjhsMzQuNiA0MC40LTM0LjYgNDAuNGMtOC42IDEwLjEtNy41IDI1LjIgMi42IDMzLjhzMjUuMiA3LjUgMzMuOC0yLjZsNDgtNTZjNy43LTkgNy43LTIyLjIgMC0zMS4ybC00OC01NnoiXQogICAgfTsKICAgIGZhU29hcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzb2FwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTMyXSwgImUwNmUiLCAiTTIwOC0zMmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6TTMyMCA5NmE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNMzUyIDBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNOTYgMTYwbDExMiAwYzAgMjMuOCA3LjQgNDUuOSAyMC4xIDY0TDE2MCAyMjRjLTUzIDAtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZsMTkyIDBjNTMgMCA5Ni00MyA5Ni05NiAwLTM1LjEtMTguOS02NS45LTQ3LTgyLjYgMTktMTkuOCAzMC43LTQ2LjYgMzEtNzYuMSA0NS40IDcuNiA4MCA0Ny4xIDgwIDk0LjdsMCAxMjhjMCA1My00MyA5Ni05NiA5Nkw5NiA0ODBjLTUzIDAtOTYtNDMtOTYtOTZMMCAyNTZjMC01MyA0My05NiA5Ni05NnptNjQgMTEybDE5MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4bC0xOTIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHoiXQogICAgfTsKICAgIGZhUmVjeWNsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZWN5Y2xlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTg0MiwgOTg1MCwgOTg1MV0sICJmMWI4IiwgIk0xNTIuMyA2MEMxOTguNS0yMCAzMTQtMjAgMzYwLjIgNjBsMzcuMyA2NC42IDI3LjctMTZjOC40LTQuOSAxOC45LTQuMiAyNi42IDEuN3MxMS4xIDE1LjkgOC42IDI1LjNMNDM2LjkgMjIzYy0zLjQgMTIuOC0xNi42IDIwLjQtMjkuNCAxN2wtODcuNC0yMy40Yy05LjQtMi41LTE2LjMtMTAuNC0xNy42LTIwczMuNC0xOS4xIDExLjgtMjMuOWwyNy43LTE2LTM3LjMtNjQuNmMtMjEuNi0zNy4zLTc1LjQtMzcuMy05NyAwbC01LjMgOS4xYy04LjggMTUuMy0yOC40IDIwLjUtNDMuNyAxMS43UzEzOC4yIDg0LjUgMTQ3IDY5LjFsNS4zLTkuMXpNNDQ5LjcgMjc5LjFjMTUuMy04LjggMzQuOS0zLjYgNDMuNyAxMS43bDUuMyA5LjFjNDYuMiA4MC0xMS41IDE4MC0xMDMuOSAxODBsLTc0LjYgMCAwIDMyYzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw2NC02NGM2LjktNi45IDE3LjItOC45IDI2LjItNS4yczE0LjggMTIuNSAxNC44IDIyLjJsMCAzMiA3NC42IDBjNDMuMSAwIDcwLjEtNDYuNyA0OC41LTg0bC01LjMtOS4xYy04LjgtMTUuMy0zLjYtMzQuOSAxMS43LTQzLjd6TTUxIDIzNS40bC0yNy43LTE2Yy04LjQtNC45LTEzLjEtMTQuMy0xMS44LTIzLjlzOC4yLTE3LjUgMTcuNi0yMEwxMTYuNSAxNTJjMTIuOC0zLjQgMjYgNC4yIDI5LjQgMTdsMjMuNCA4Ny40YzIuNSA5LjQtLjkgMTkuMy04LjYgMjUuM3MtMTguMiA2LjYtMjYuNiAxLjdsLTI3LjctMTYtMzcuMyA2NC42Yy0yMS42IDM3LjMgNS40IDg0IDQ4LjUgODRsMTAuNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMC42IDBDMjUuMyA0ODAtMzIuNCAzODAgMTMuOCAzMDBMNTEgMjM1LjR6Il0KICAgIH07CiAgICBmYUZhY2VHcmluV2luazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXdpbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZ3Jpbi13aW5rIl0sICJmNThjIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzg2LjcgMzA4LjljMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTIyLjQgNjEuMy04MS4zIDEwNS4xLTE1MC4zIDEwNS4xUzEyOC4xIDM4OC4yIDEwNS43IDMyNi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjF6TTMyOCAxOTZjLTExIDAtMjAgOS0yMCAyMHMtOSAyMC0yMCAyMC0yMC05LTIwLTIwYzAtMzMuMSAyNi45LTYwIDYwLTYwbDE2IDBjMzMuMSAwIDYwIDI2LjkgNjAgNjAgMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwLTktMjAtMjAtMjBsLTE2IDB6TTE3NiAxNzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFHcmluV2luazIgPSBmYUZhY2VHcmluV2luazI7CiAgICBmYVdhdGVyTGFkZGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndhdGVyLWxhZGRlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJsYWRkZXItd2F0ZXIiLCAic3dpbW1pbmctcG9vbCJdLCAiZjVjNSIsICJNMzc0LjUgNDA1LjdjMzguNC0yOSA5MC41LTI5IDEyOSAwIDE2LjkgMTIuNyAzMi45IDIxLjUgNDcuOCAyNC42IDEzLjcgMi44IDI3LjQgLjkgNDIuMy0xMC4zIDEwLjYtOCAyNS42LTUuOSAzMy42IDQuN3M1LjggMjUuNy00LjggMzMuNmMtMjYuNCAxOS45LTU0LjIgMjQuNC04MC43IDE5LjEtMjUuMy01LjEtNDguMS0xOC45LTY3LjItMzMuMy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0yNC4yIDE4LjMtNTIuMyAzNS45LTgzLjQgMzUuOXMtNTkuMS0xNy43LTgzLjMtMzUuOWMtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDAtMjMuOCAxNy45LTU0LjEgMzUuNS04OC4xIDM1LjMtMjAuNC0uMS00MC43LTYuNy01OS44LTIxLjEtMTAuNi04LTEyLjctMjMtNC43LTMzLjZzMjMtMTIuNyAzMy42LTQuN2MxMS4zIDguNSAyMS42IDExLjQgMzEuMiAxMS41IDE3LjYgLjEgMzcuMy05LjQgNTguOS0yNS43IDM4LjQtMjkgOTAuNi0yOSAxMjkgMCAyNCAxOC4xIDQwLjcgMjYuMyA1NC41IDI2LjNzMzAuNS04LjIgNTQuNS0yNi4zek01MTEuOCAzMmM0OC4zIDAgODkgMzYgOTUgODMuOWwxIDguMmMyLjIgMTcuNS0xMC4yIDMzLjUtMjcuOCAzNS43cy0zMy41LTEwLjItMzUuNy0yNy44bC0xLTguMmMtMi0xNS45LTE1LjUtMjcuOC0zMS41LTI3LjgtMTcuNSAwLTMxLjggMTQuMi0zMS44IDMxLjhsMCAyMTEuOGMtMjMuMS01LjEtNDQuOS00LjQtNjQtLjRsMC01MS4yLTE5MiAwIDAgNDguN2MtNS4zLS41LTEwLjctLjgtMTYtLjctMTYuMiAuMS0zMi40IDIuNy00OCA4bDAtMjE2LjJjMC01Mi45IDQyLjktOTUuOCA5NS43LTk1LjggNDguMyAwIDg5IDM2IDk1IDgzLjlsMSA4LjJjMi4yIDE3LjUtMTAuMiAzMy41LTI3LjggMzUuN3MtMzMuNS0xMC4yLTM1LjctMjcuOGwtMS04LjJjLTItMTUuOS0xNS41LTI3LjgtMzEuNS0yNy44LTE3LjUgMC0zMS43IDE0LjItMzEuNyAzMS44bDAgOTYuMiAxOTIgMCAwLTk2LjJDNDE2IDc0LjkgNDU4LjkgMzIgNTExLjggMzJ6Il0KICAgIH07CiAgICBmYUxhZGRlcldhdGVyID0gZmFXYXRlckxhZGRlcjsKICAgIGZhU3dpbW1pbmdQb29sID0gZmFXYXRlckxhZGRlcjsKICAgIGZhVG93ZXJDZWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvd2VyLWNlbGwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU4NSIsICJNNTkuNiA5LjhDNDcuMyA0LjggMzMuMyAxMC43IDI4LjQgMjMgMTUuMiA1NS41IDggOTAuOSA4IDEyOHM3LjIgNzIuNSAyMC40IDEwNWM1IDEyLjMgMTkgMTguMiAzMS4zIDEzLjJzMTguMi0xOSAxMy4yLTMxLjNDNjIgMTg4LjIgNTYgMTU4LjggNTYgMTI4czYtNjAuMiAxNi45LTg3YzUtMTIuMy0xLTI2LjMtMTMuMi0zMS4zem00NTYuOCAwYy0xMi4zIDUtMTguMiAxOS0xMy4yIDMxLjMgMTAuOSAyNi44IDE2LjkgNTYuMiAxNi45IDg3cy02IDYwLjItMTYuOSA4N2MtNSAxMi4zIDEgMjYuMyAxMy4yIDMxLjNzMjYuMy0xIDMxLjMtMTMuMmMxMy4xLTMyLjUgMjAuNC02Ny45IDIwLjQtMTA1cy03LjItNzIuNS0yMC40LTEwNWMtNS0xMi4zLTE5LTE4LjItMzEuMy0xMy4yek0zNDAuMSAxNjUuMmM3LjUtMTAuNSAxMS45LTIzLjMgMTEuOS0zNy4yIDAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0YzAgMTMuOSA0LjQgMjYuNyAxMS45IDM3LjJMOTguOSA0NjYuOGMtNy4zIDE2LjEtLjIgMzUuMSAxNS45IDQyLjRzMzUuMSAuMiA0Mi40LTE1LjlsMjAuNi00NS4yIDIyMC42IDAgMjAuNiA0NS4yYzcuMyAxNi4xIDI2LjMgMjMuMiA0Mi40IDE1LjlzMjMuMi0yNi4zIDE1LjktNDIuNEwzNDAuMSAxNjUuMnpNMzc2LjUgNDAwbC0xNzcgMCAyMS44LTQ4IDEzMy4zIDAgMjEuOCA0OHpNMjg4IDIwNS4zbDQ0LjggOTguNy04OS43IDAgNDQuOC05OC43ek0xNjMuMyA3My42YzUuMy0xMi4xLS4yLTI2LjMtMTIuNC0zMS42cy0yNi4zIC4yLTMxLjYgMTIuNEMxMDkuNSA3NyAxMDQgMTAxLjkgMTA0IDEyOHM1LjUgNTEgMTUuMyA3My42YzUuMyAxMi4xIDE5LjUgMTcuNyAzMS42IDEyLjRzMTcuNy0xOS41IDEyLjQtMzEuNkMxNTYgMTY1LjggMTUyIDE0Ny40IDE1MiAxMjhzNC0zNy44IDExLjMtNTQuNHpNNDU2LjcgNTQuNGMtNS4zLTEyLjEtMTkuNS0xNy43LTMxLjYtMTIuNHMtMTcuNyAxOS41LTEyLjQgMzEuNkM0MjAgOTAuMiA0MjQgMTA4LjYgNDI0IDEyOHMtNCAzNy44LTExLjMgNTQuNGMtNS4zIDEyLjEgLjIgMjYuMyAxMi40IDMxLjZzMjYuMy0uMiAzMS42LTEyLjRDNDY2LjUgMTc5IDQ3MiAxNTQuMSA0NzIgMTI4cy01LjUtNTEtMTUuMy03My42eiJdCiAgICB9OwogICAgZmFDb2xvblNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29sb24tc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMTQwIiwgIk0yMTMuOCA4LjdjMTIuOSAzLjIgMjAuNyAxNi4yIDE3LjUgMjkuMWwtNC42IDE4LjVjMTUuNCAuOCAzMC40IDMuNCA0NC43IDcuNWw5LjQtMzcuNkMyODMuOSAxMy4zIDI5NyA1LjUgMzA5LjggOC43UzMzMC41IDI1IDMyNy4zIDM3LjhMMzE2IDgyLjhjMTMuNSA3LjggMjYgMTcuMSAzNy4yIDI3LjggMTIuOSAxMi4xIDEzLjQgMzIuNCAxLjMgNDUuMnMtMzIuNCAxMy40LTQ1LjIgMS4zYy0zLjEtMi45LTYuNC01LjgtOS44LTguNEwyMzkuMiAzOTBjMjYuOS00LjYgNTEuMS0xNy4xIDcwLjEtMzUuMSAxMi45LTEyLjEgMzMuMS0xMS41IDQ1LjIgMS4zczExLjUgMzMuMS0xLjMgNDUuMmMtMzQuMyAzMi4zLTgwIDUyLjgtMTMwLjUgNTQuNGwtNy41IDI5LjljLTMuMiAxMi45LTE2LjIgMjAuNy0yOS4xIDE3LjVzLTIwLjctMTYuMi0xNy41LTI5LjFsNS42LTIyLjVjLTE1LTMuMi0yOS40LTgtNDIuOS0xNC40bC0xMi4xIDQ4LjVjLTMuMiAxMi45LTE2LjIgMjAuNy0yOS4xIDE3LjVTNjkuNSA0ODcgNzIuNyA0NzQuMmwxNi02My45QzQ0LjMgMzczLjYgMTYgMzE4LjEgMTYgMjU2IDE2IDE1OS4yIDg0LjggNzguNCAxNzYuMyA2MGw4LjQtMzMuOEMxODcuOSAxMy4zIDIwMSA1LjUgMjEzLjggOC43ek0xNTggMTMyLjljLTQ2LjEgMjEuOC03OCA2OC43LTc4IDEyMy4xIDAgMzAuNSAxMCA1OC42IDI2LjkgODEuM0wxNTggMTMyLjl6TTE0Ny40IDM3My40YzEzIDcuNiAyNy4zIDEzLjEgNDIuNSAxNi4xbDY1LjktMjYzLjZjLTEyLjYtMy44LTI1LjktNS45LTM5LjgtNS45LTEuOCAwLTMuNSAwLTUuMyAuMUwxNDcuNCAzNzMuNHoiXQogICAgfTsKICAgIGZhTGFwdG9wRmlsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYXB0b3AtZmlsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTFkIiwgIk02NCA2NEM2NCAyOC43IDkyLjcgMCAxMjggMEw0MTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDQ4LTY0IDAgMC00OC0yODggMCAwIDE5MiAxMTIgMCAwIDk2LTE2My4yIDBDMzQuNCAzNTIgMCAzMTcuNiAwIDI3NS4yIDAgMjY0LjYgOC42IDI1NiAxOS4yIDI1Nkw2NCAyNTYgNjQgNjR6TTUyOS45IDI1Ny45YzkgOSAxNC4xIDIxLjIgMTQuMSAzMy45TDU0NCA0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2MCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTI1NmMwLTI2LjUgMjEuNS00OCA0OC00OGw3Ni4xIDBjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMSAyMCAyMCA0Ny45IDQ3LjkgODMuOSA4My45ek00MTYgMjcyYzAgOC44IDcuMiAxNiAxNiAxNmw2MC4xIDAtNzYuMS03Ni4xIDAgNjAuMXoiXQogICAgfTsKICAgIGZhQmFoYWkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFoYWkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiaGF5a2FsIl0sICJmNjY2IiwgIk0yODguNC04YzEzLjIgMCAyNSA4LjEgMjkuOCAyMC40bDMxLjkgODIgNzcuMi00Mi4zYzExLjYtNi4zIDI1LjgtNC45IDM1LjkgMy41czE0IDIyLjMgOS43IDM0LjhsLTI4LjIgODMuMyA4Ni4zIDE3LjJjMTIuOSAyLjYgMjMgMTIuOCAyNS4zIDI1LjhzLTMuNiAyNi4xLTE0LjkgMzIuOWwtNzUuMiA0NS43IDU1IDY4LjZjOC4zIDEwLjMgOS4zIDI0LjYgMi43IDM2cy0xOS41IDE3LjYtMzIuNiAxNS42bC04Ny0xMy4zLTIgODhjLS4zIDEzLjItOC42IDI0LjgtMjEgMjkuNHMtMjYuMyAxLTM1LTlsLTU4LTY2LjEtNTggNjYuMWMtOC43IDkuOS0yMi42IDEzLjUtMzUgOXMtMjAuOC0xNi4yLTIxLTI5LjRsLTItODgtODcgMTMuM2MtMTMgMi0yNi00LjItMzIuNi0xNS42cy01LjUtMjUuNyAyLjctMzZsNTUtNjguNi03NS4yLTQ1LjdjLTExLjMtNi44LTE3LjItMTkuOS0xNC45LTMyLjlzMTIuMy0yMy4yIDI1LjMtMjUuOGw4Ni4zLTE3LjItMjguMi04My4zYy00LjItMTIuNS0uNC0yNi4zIDkuNy0zNC44czI0LjQtOS45IDM1LjktMy41bDc3LjEgNDIuMyAzMS45LTgyQzI2My4zIC4xIDI3NS4yLTggMjg4LjQtOHptMCAxMjAuMkwyNzMgMTUxLjZjLTMuMyA4LjYtMTAuMiAxNS4zLTE4LjkgMTguNXMtMTguMiAyLjQtMjYuMy0ybC0zNy0yMC4zIDEzLjYgNDBjMyA4LjcgMiAxOC4zLTIuNiAyNi4zcy0xMi40IDEzLjYtMjEuNSAxNS40bC00MS40IDguMyAzNi4xIDIxLjljNy45IDQuOCAxMy4zIDEyLjcgMTQuOSAyMS44cy0uOCAxOC40LTYuNSAyNS42bC0yNi40IDMzIDQxLjgtNi40YzkuMS0xLjQgMTguNCAxLjIgMjUuNCA3LjFzMTEuMiAxNC42IDExLjQgMjMuOGwuOSA0Mi4yIDI3LjktMzEuOGM2LjEtNi45IDE0LjgtMTAuOSAyNC4xLTEwLjlzMTggNCAyNC4xIDEwLjlsMjcuOSAzMS44IC45LTQyLjJjLjItOS4yIDQuNC0xNy45IDExLjQtMjMuOHMxNi4zLTguNSAyNS40LTcuMWw0MS44IDYuNC0yNi40LTMzYy01LjgtNy4yLTguMi0xNi41LTYuNi0yNS42czctMTcgMTQuOS0yMS44bDM2LjEtMjEuOS00MS40LTguM2MtOS0xLjgtMTYuOS03LjQtMjEuNS0xNS40cy01LjUtMTcuNi0yLjYtMjYuM2wxMy42LTQwLTM3IDIwLjNjLTguMSA0LjQtMTcuNyA1LjItMjYuMyAycy0xNS41LTkuOS0xOC45LTE4LjVsLTE1LjMtMzkuNHoiXQogICAgfTsKICAgIGZhSGF5a2FsID0gZmFCYWhhaTsKICAgIGZhTW9uZXlCaWxsMTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9uZXktYmlsbC0xIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbIm1vbmV5LWJpbGwtYWx0Il0sICJmM2QxIiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptMTkyIDgwYTExMiAxMTIgMCAxIDEgMCAyMjQgMTEyIDExMiAwIDEgMSAwLTIyNHpNNjQgMTg0bDAtNDhjMC00LjQgMy42LTggOC04bDQ4IDBjNC40IDAgOC4xIDMuNiA3LjUgOC0zLjYgMjktMjYuNiA1MS45LTU1LjUgNTUuNS00LjQgLjUtOC0zLjEtOC03LjV6bTAgMTQ0YzAtNC40IDMuNi04LjEgOC03LjUgMjkgMy42IDUxLjkgMjYuNiA1NS41IDU1LjUgLjUgNC40LTMuMSA4LTcuNSA4bC00OCAwYy00LjQgMC04LTMuNi04LThsMC00OHpNNDQwIDE5MS41Yy0yOS0zLjYtNTEuOS0yNi42LTU1LjUtNTUuNS0uNS00LjQgMy4xLTggNy41LThsNDggMGM0LjQgMCA4IDMuNiA4IDhsMCA0OGMwIDQuNC0zLjYgOC4xLTggNy41ek00NDggMzI4bDAgNDhjMCA0LjQtMy42IDgtOCA4bC00OCAwYy00LjQgMC04LjEtMy42LTcuNS04IDMuNi0yOSAyNi42LTUxLjkgNTUuNS01NS41IDQuNC0uNSA4IDMuMSA4IDcuNXpNMjQwIDE4OGMtMTEgMC0yMCA5LTIwIDIwIDAgOS43IDYuOSAxNy43IDE2IDE5LjZsMCA0OC40LTQgMGMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBsNDggMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTQgMCAwLTY4YzAtMTEtOS0yMC0yMC0yMGwtMTYgMHoiXQogICAgfTsKICAgIGZhTW9uZXlCaWxsQWx0MiA9IGZhTW9uZXlCaWxsMTI7CiAgICBmYUNsb3VkQm9sdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1ib2x0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3Nzg1LCAidGh1bmRlcnN0b3JtIl0sICJmNzZjIiwgIk0wIDIyNGMwIDUzIDQzIDk2IDk2IDk2bDM4LjYgMCAxMjQuMS0xMTFjMTIuMi0xMC45IDI4LTE3IDQ0LjQtMTcgNDQuNiAwIDc2LjUgNDMgNjMuNyA4NS43TDM1NC4xIDMyMCA0MTYgMzIwYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0uNSAwLTEuMSAwLTEuNiAwIDEuMS01LjIgMS42LTEwLjUgMS42LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwLTI0LjMgMC00Ni4xIDEwLjktNjAuOCAyOC0xOC43LTM1LjctNTYuMS02MC05OS4yLTYwLTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEyIDAgNy4xIC43IDE0LjEgMS45IDIwLjgtMzguMyAxMi42LTY1LjkgNDguNy02NS45IDkxLjJ6TTE2MC42IDQwMGw2MS44IDAtMzEuMiAxMDQuMWMtMy42IDExLjkgNS4zIDIzLjkgMTcuOCAyMy45IDQuNiAwIDktMS43IDEyLjQtNC43TDM2Mi41IDM5Ni45YzMuNS0zLjEgNS41LTcuNiA1LjUtMTIuNCAwLTkuMi03LjQtMTYuNi0xNi42LTE2LjZsLTYxLjggMCAzMS4yLTEwNC4xYzMuNi0xMS45LTUuMy0yMy45LTE3LjgtMjMuOS00LjYgMC05IDEuNy0xMi40IDQuN0wxNDkuNSAzNzEuMWMtMy41IDMuMS01LjUgNy42LTUuNSAxMi40IDAgOS4yIDcuNCAxNi42IDE2LjYgMTYuNnoiXQogICAgfTsKICAgIGZhVGh1bmRlcnN0b3JtID0gZmFDbG91ZEJvbHQ7CiAgICBmYUV0aGVybmV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImV0aGVybmV0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3OTYiLCAiTTAgMjI0TDAgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDAgMC0xMDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEwNCA2NCAwIDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDQgNjQgMCAwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTA0IDY0IDAgMC0xMDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEwNCAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJsLTMyIDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMkwxNjAgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnoiXQogICAgfTsKICAgIGZhSHJ5dm5pYVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaHJ5dm5pYS1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbODM3MiwgImhyeXZuaWEiXSwgImY2ZjIiLCAiTTMzNiAxNDkuNEMzMzYgNzcgMjY4LjUgMjMuNSAxOTggNDAuMUw5My4yIDY0LjlDNzYgNjguOSA2NS40IDg2LjIgNjkuNCAxMDMuNHMyMS4zIDI3LjkgMzguNSAyMy44bDEwNC44LTI0LjdjMzAuMy03LjEgNTkuMyAxNS44IDU5LjMgNDYuOSAwIDE3LjYtOS42IDMzLjgtMjUgNDIuM2wtLjcgLjQtMjIyLjMgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzIuNCAwYzUuNS0xMy4zIDguNC0yNy44IDguNC00Mi42ek0zNjAgMjcyTDI0IDI3MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMy4zIDBjLTYuMSAxMy40LTkuMyAyOC4xLTkuMyA0My4zIDAgNjQuMSA1Ni45IDExMy40IDEyMC40IDEwNC4ybDEzNy45LTE5LjljMTcuNS0yLjUgMjkuNi0xOC43IDI3LjEtMzYuMnMtMTguOC0yOS42LTM2LjItMjcuMUwxNTkuMiA0MDQuMmMtMjQuOSAzLjYtNDcuMi0xNS43LTQ3LjItNDAuOSAwLTE1LjEgOC4yLTI4LjkgMjEuNC0zNi4ybDEzLTcuMSAyMTMuNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFIcnl2bmlhID0gZmFIcnl2bmlhU2lnbjsKICAgIGZhRXllU2xhc2gyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImV5ZS1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMDcwIiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC05Ni40LTk2LjRjMi43LTIuNCA1LjQtNC44IDgtNy4yIDQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjEgMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjYtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMS00Ny4xLTQzLjctMTExLjgtODAuNi0xOTIuNi04MC42LTU2LjggMC0xMDUuNiAxOC4yLTE0NiA0NC4yTDQxLTI0Ljl6TTIwNC41IDEzOC43YzIzLjUtMTYuOCA1Mi40LTI2LjcgODMuNS0yNi43IDc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgMzEuMS05LjkgNTkuOS0yNi43IDgzLjVsLTM0LjctMzQuN2MxMi43LTIxLjQgMTctNDcuNyAxMC4xLTczLjctMTMuNy01MS4yLTY2LjQtODEuNi0xMTcuNi02Ny45LTguNiAyLjMtMTYuNyA1LjctMjQgMTBsLTM0LjctMzQuN3pNMzI1LjMgMzk1LjFjLTExLjkgMy4yLTI0LjQgNC45LTM3LjMgNC45LTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0IDAtMTIuOSAxLjctMjUuNCA0LjktMzcuM0w2OS40IDEzOS4yYy0zMi42IDM2LjgtNTUgNzUuOC02Ni45IDEwNC41LTMuMyA3LjktMy4zIDE2LjcgMCAyNC42IDE0LjkgMzUuNyA0Ni4yIDg3LjcgOTMgMTMxLjEgNDcuMSA0My43IDExMS44IDgwLjYgMTkyLjYgODAuNiAzNy4zIDAgNzEuMi03LjkgMTAxLjUtMjAuNmwtNjQuMi02NC4yeiJdCiAgICB9OwogICAgZmFDYXJ0RmxhdGJlZFN1aXRjYXNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcnQtZmxhdGJlZC1zdWl0Y2FzZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJsdWdnYWdlLWNhcnQiXSwgImY1OWQiLCAiTTAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDQ4IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDQwMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zNC43IDBjMS44IDUgMi43IDEwLjQgMi43IDE2IDAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtNS42IDEtMTEgMi43LTE2bC0xOTcuNSAwYzEuOCA1IDIuNyAxMC40IDIuNyAxNiAwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGMwLTYgMS4xLTExLjcgMy4xLTE3LTM4LjEtNi4yLTY3LjEtMzkuMi02Ny4xLTc5TDY0IDgwYzAtOC44LTcuMi0xNi0xNi0xNkwzMiA2NEMxNC4zIDY0IDAgNDkuNyAwIDMyek0xNzYgMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDMyIDAgMC0yNGMwLTMwLjkgMjUuMS01NiA1Ni01Nmw2NCAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2bDAgMjQgMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE0NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjQwIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTQ0ek0zODQgOTZsMC0yNGMwLTQuNC0zLjYtOC04LThsLTY0IDBjLTQuNCAwLTggMy42LTggOGwwIDI0IDgwIDB6Il0KICAgIH07CiAgICBmYUx1Z2dhZ2VDYXJ0ID0gZmFDYXJ0RmxhdGJlZFN1aXRjYXNlOwogICAgZmFSYWRpYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmFkaWF0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3YjkiLCAiTTQ0Ni4yIDM0LjVjLTE0LjItMTAuMS0zMy41LTQuNi00Mi4yIDEwLjVMMzMxLjYgMTcwLjNjMzEuMyAxNS44IDUyLjggNDguMyA1Mi44IDg1LjdsMTQ0IDBjMTcuNyAwIDMyLjItMTQuNCAzMC4xLTMxLjktOS4xLTc4LjEtNTEuNC0xNDYuMS0xMTIuMy0xODkuNnpNMTcyLjcgNDQuOUMxNjQgMjkuOCAxNDQuNyAyNC4zIDEzMC41IDM0LjUgNjkuNiA3Ny45IDI3LjMgMTQ1LjkgMTguMiAyMjQuMSAxNi4xIDI0MS42IDMwLjcgMjU2IDQ4LjMgMjU2bDE0NCAwYzAtMzcuNSAyMS41LTY5LjkgNTIuOC04NS43TDE3Mi43IDQ0Ljl6bS05LjQgNDE2LjhjLTguNyAxNS4xLTMuOCAzNC41IDEyIDQxLjggMzQuNCAxNS43IDcyLjcgMjQuNSAxMTMgMjQuNXM3OC42LTguOCAxMTMtMjQuNWMxNS44LTcuMiAyMC43LTI2LjcgMTItNDEuOEwzNDEgMzM2LjNjLTE1LjEgOS45LTMzLjIgMTUuNy01Mi42IDE1LjdzLTM3LjUtNS44LTUyLjYtMTUuN0wxNjMuMyA0NjEuN3pNMjg4LjMgMzA0YTQ4IDQ4IDAgMSAwIC0uNy05NiA0OCA0OCAwIDEgMCAuNyA5NnoiXQogICAgfTsKICAgIGZhRmlsZVdvcmQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtd29yZCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWMyIiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTM1LjQgMjc0LjhjLTIuOS0xMi45LTE1LjctMjEuMS0yOC42LTE4LjJzLTIxLjEgMTUuNy0xOC4yIDI4LjZsMzIgMTQ0YzIuMyAxMC41IDExLjQgMTguMiAyMi4yIDE4LjhzMjAuNi02LjEgMjQtMTYuNGwyNS4yLTc1LjcgMjUuMiA3NS43YzMuNCAxMC4yIDEzLjIgMTYuOSAyNCAxNi40czE5LjktOC4yIDIyLjItMTguOGwzMi0xNDRjMi45LTEyLjktNS4zLTI1LjgtMTguMi0yOC42cy0yNS44IDUuMy0yOC42IDE4LjJsLTEzLjIgNTkuNC0yMC42LTYxLjhjLTMuMy05LjgtMTIuNC0xNi40LTIyLjgtMTYuNHMtMTkuNSA2LjYtMjIuOCAxNi40bC0yMC42IDYxLjgtMTMuMi01OS40eiJdCiAgICB9OwogICAgZmFCZWRQdWxzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiZWQtcHVsc2UiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsicHJvY2VkdXJlcyJdLCAiZjQ4NyIsICJNNTMxLjItMjIuNEw1NzIgMzIgNjE2IDMyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC01NiAwYy03LjYgMC0xNC43LTMuNi0xOS4yLTkuNmwtMjQuMS0zMi4xLTQ3IDk5LjljLTMuNyA3LjgtMTEuMyAxMy4xLTE5LjkgMTMuN3MtMTYuOS0zLjQtMjEuNy0xMC42TDM4Ny4yIDgwIDM0NCA4MGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw1NiAwYzggMCAxNS41IDQgMjAgMTAuN2wyNC40IDM2LjYgNDUuOS05Ny41YzMuNi03LjYgMTAuOS0xMi44IDE5LjMtMTMuN3MxNi42IDIuNyAyMS42IDkuNXpNMzIwIDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5LjUgMCAyNi42IDM5LjljMTQuNCAyMS42IDM5LjMgMzMuOCA2NS4yIDMxLjlzNDguOC0xNy42IDU5LjgtNDEuMUw1MjcgMTI5LjJjNDUuOSA3LjIgODEgNDYuOSA4MSA5NC44bDAgMjI0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjQtNDQ4IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMkwzMiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMlM5NiA0Ni4zIDk2IDY0bDAgMjI0IDIyNCAwIDAtMTI4ek0xNDQgMTkyYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHoiXQogICAgfTsKICAgIGZhUHJvY2VkdXJlcyA9IGZhQmVkUHVsc2U7CiAgICBmYVRlbnRzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbnRzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1ODIiLCAiTTUzOS45IDM1MmwtOTUuNiAwLTguNC02Ni4xYy0yLjktMjMuMi0xNS45LTQzLjktMzUuNC01Ni44TDI1Mi4yIDEzMS41Yy0xOC0xMS45LTM5LjctMTUuNy02MC4xLTExLjUgMi41LTQuMyA1LjktNy45IDEwLjEtMTAuN0wzNTAuNiAxMS42YzEwLjctNyAyNC41LTcgMzUuMiAwbDE0OC40IDk3LjdjNy44IDUuMSAxMyAxMy40IDE0LjIgMjIuN2wyMy4zIDE4NGMyLjQgMTkuMS0xMi41IDM2LTMxLjcgMzZ6TTQuOCA0NzZsMjMuMy0xODRjMS4yLTkuMyA2LjMtMTcuNiAxNC4yLTIyLjdsMTQ4LjQtOTcuN2MxMC43LTcgMjQuNS03IDM1LjIgMGwxNDguNCA5Ny43YzcuOCA1LjEgMTMgMTMuNCAxNC4yIDIyLjdsMjMuMyAxODRjMi40IDE5LjEtMTIuNSAzNi0zMS43IDM2bC00OS43IDBjLTExLjIgMC0yMS41LTUuOC0yNy4zLTE1LjRsLTc3LTEyNi43Yy0xLjctMi44LTQuOC00LjYtOC4xLTQuNi01LjMgMC05LjUgNC4zLTkuNSA5LjVsMCAxMDUuMmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzNi41IDUxMmMtMTkuMyAwLTM0LjItMTYuOS0zMS43LTM2eiJdCiAgICB9OwogICAgZmFNdWdIb3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibXVnLWhvdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzk3NDldLCAiZjdiNiIsICJNMTUyLTE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNCAwIDM4LjkgMjMuNCA1OS40IDM5LjEgNzMuMWwxLjEgMWMxNi4zIDE0LjMgMjMuOCAyMS44IDIzLjggMzcuOSAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzguOS0yMy40LTU5LjQtMzkuMS03My4xbC0xLjEtMUMxODMuNSAzMS43IDE3NiAyNC4xIDE3NiA4IDE3Ni01LjMgMTY1LjMtMTYgMTUyLTE2ek05NiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTkyYzAgNTMgNDMgOTYgOTYgOTZsMTkyIDBjNDEuOCAwIDc3LjQtMjYuNyA5MC41LTY0bDUuNSAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4UzUxOC43IDE5MiA0NDggMTkyTDk2IDE5MnpNNDQ4IDM4NGwwLTEyOGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NHpNMjg4IDhjMC0xMy4zLTEwLjctMjQtMjQtMjRTMjQwLTUuMyAyNDAgOGMwIDM4LjkgMjMuNCA1OS40IDM5LjEgNzMuMWwxLjEgMWMxNi4zIDE0LjMgMjMuOCAyMS44IDIzLjggMzcuOSAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzguOS0yMy40LTU5LjQtMzkuMS03My4xbC0xLjEtMUMyOTUuNSAzMS43IDI4OCAyNC4xIDI4OCA4eiJdCiAgICB9OwogICAgZmFCb2x0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvbHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODg5LCAiemFwIl0sICJmMGU3IiwgIk0zMzguOC05LjljMTEuOSA4LjYgMTYuMyAyNC4yIDEwLjkgMzcuOEwyNzEuMyAyMjQgNDE2IDIyNGMxMy41IDAgMjUuNSA4LjQgMzAuMSAyMS4xcy43IDI2LjktOS42IDM1LjVsLTI4OCAyNDBjLTExLjMgOS40LTI3LjQgOS45LTM5LjMgMS4zcy0xNi4zLTI0LjItMTAuOS0zNy44TDE3Ni43IDI4OCAzMiAyODhjLTEzLjUgMC0yNS41LTguNC0zMC4xLTIxLjFzLS43LTI2LjkgOS42LTM1LjVsMjg4LTI0MGMxMS4zLTkuNCAyNy40LTkuOSAzOS4zLTEuM3oiXQogICAgfTsKICAgIGZhWmFwID0gZmFCb2x0OwogICAgZmFKYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiamFyIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImU1MTYiLCAiTTMyLThjMC0xMy4zIDEwLjctMjQgMjQtMjRsMjA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMNTYgMTZDNDIuNyAxNiAzMiA1LjMgMzItOHpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptOTYgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDE5MnoiXQogICAgfTsKICAgIGZhVHJ1Y2tQbGFuZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1wbGFuZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNThmIiwgIk0xNDQgNDhjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDMyMGMwIDMyLjUgMTIuMSA2Mi4xIDMyIDg0LjdsMCAyNy4zYzAgNy4xIC45IDE0LjEgMi43IDIwLjdMMTkyIDQ4MCA4My45IDUwN0M3My44IDUwOS42IDY0IDUwMS45IDY0IDQ5MS41bDAtMTkuOGMwLTQuOSAyLjItOS41IDYtMTIuNWw3NC01OS4yIDAtNTcuNi0xMjIuMSA0OC44QzExLjQgMzk1LjQgMCAzODcuNyAwIDM3Ni40bDAtNDRjMC04IDMtMTUuNiA4LjMtMjEuNUwxNDQgMTYxLjYgMTQ0IDQ4em0yMjQgODBsMTkyIDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCAxNjBjMCAyNi4yLTEyLjYgNDkuNC0zMiA2NGwwIDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMTYwIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTQ4Yy0xOS40LTE0LjYtMzItMzcuOC0zMi02NGwwLTE2MGMwLTQ0LjIgMzUuOC04MCA4MC04MHptMCAxNzZsMTkyIDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTI4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJ6bTAgODhhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yMTYtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhSGFuZEhvbGRpbmdIZWFydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWhvbGRpbmctaGVhcnQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRiZSIsICJNMjc5LjYgMzFDMjY1LjUgMTEuNSAyNDIuOSAwIDIxOC45IDAgMTc3LjUgMCAxNDQgMzMuNSAxNDQgNzQuOWwwIDIuNGMwIDY0LjQgODIgMTMzLjQgMTIyLjIgMTYzLjMgMTMgOS43IDMwLjUgOS43IDQzLjUgMCA0MC4yLTMwIDEyMi4yLTk4LjkgMTIyLjItMTYzLjNsMC0yLjRjMC00MS40LTMzLjUtNzQuOS03NC45LTc0LjktMjQgMC00Ni42IDExLjUtNjAuNyAzMUwyODggNDIuNyAyNzkuNiAzMXpNMTA5LjMgMzQxLjVMNjYuNyAzODQgMzIgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMC41IDBjMjkgMCA1Ny4zLTkuMyA4MC43LTI2LjVsMTI2LjYtOTMuM2MxNy44LTEzLjEgMjEuNi0zOC4xIDguNS01NS45cy0zOC4xLTIxLjYtNTUuOS04LjVMMzkyLjYgNDE2IDI4MCA0MTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUyLjIgMGMtMzMuOSAwLTY2LjUgMTMuNS05MC41IDM3LjV6Il0KICAgIH07CiAgICBmYUFycm93Um90YXRlTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1yb3RhdGUtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzg2MzQsICJhcnJvdy1sZWZ0LXJvdGF0ZSIsICJhcnJvdy1yb3RhdGUtYmFjayIsICJhcnJvdy1yb3RhdGUtYmFja3dhcmQiLCAidW5kbyJdLCAiZjBlMiIsICJNMjU2IDY0Yy01Ni44IDAtMTA3LjkgMjQuNy0xNDMuMSA2NGw0Ny4xIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMTkyYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDMyQzAgMTQuMyAxNC4zIDAgMzIgMFM2NCAxNC4zIDY0IDMybDAgNTQuN0MxMTAuOSAzMy42IDE3OS41IDAgMjU2IDAgMzk3LjQgMCA1MTIgMTE0LjYgNTEyIDI1NlMzOTcuNCA1MTIgMjU2IDUxMmMtODcgMC0xNjMuOS00My40LTIxMC4xLTEwOS43LTEwLjEtMTQuNS02LjYtMzQuNCA3LjktNDQuNnMzNC40LTYuNiA0NC42IDcuOWMzNC44IDQ5LjggOTIuNCA4Mi4zIDE1Ny42IDgyLjMgMTA2IDAgMTkyLTg2IDE5Mi0xOTJTMzYyIDY0IDI1NiA2NHoiXQogICAgfTsKICAgIGZhQXJyb3dMZWZ0Um90YXRlID0gZmFBcnJvd1JvdGF0ZUxlZnQ7CiAgICBmYUFycm93Um90YXRlQmFjayA9IGZhQXJyb3dSb3RhdGVMZWZ0OwogICAgZmFBcnJvd1JvdGF0ZUJhY2t3YXJkID0gZmFBcnJvd1JvdGF0ZUxlZnQ7CiAgICBmYVVuZG8gPSBmYUFycm93Um90YXRlTGVmdDsKICAgIGZhRmFjZUFuZ3J5MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWFuZ3J5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTQ0LCAiYW5ncnkiXSwgImY1NTYiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTI1NiAzNjhjMjQuMSAwIDQ1LjQgMTEuOCA1OC41IDMwIDcuNyAxMC44IDIyLjcgMTMuMiAzMy41IDUuNXMxMy4yLTIyLjcgNS41LTMzLjVjLTIxLjctMzAuMi01Ny4zLTUwLTk3LjUtNTBzLTc1LjcgMTkuOC05Ny41IDUwYy03LjcgMTAuOC01LjMgMjUuOCA1LjUgMzMuNXMyNS44IDUuMyAzMy41LTUuNWMxMy4xLTE4LjIgMzQuNC0zMCA1OC41LTMwem0tODAtOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0uMyA5LjcgMy4yYzEwLjUgMy41IDIxLjgtMi4yIDI1LjMtMTIuNnMtMi4yLTIxLjgtMTIuNi0yNS4zbC05Ni0zMmMtMTAuNS0zLjUtMjEuOCAyLjItMjUuMyAxMi42czIuMiAyMS44IDEyLjYgMjUuM2wyOC45IDkuNmMtNC4xIDUuNC02LjYgMTIuMS02LjYgMTkuNCAwIDE3LjcgMTQuMyAzMiAzMiAzMnptMTkyLTMyYzAtNy4zLTIuNC0xNC02LjYtMTkuNGwyOC45LTkuNmMxMC41LTMuNSAxNi4xLTE0LjggMTIuNi0yNS4zcy0xNC44LTE2LjEtMjUuMy0xMi42bC05NiAzMmMtMTAuNSAzLjUtMTYuMSAxNC44LTEyLjYgMjUuM3MxNC44IDE2LjEgMjUuMyAxMi42bDkuNy0zLjIgMCAuM2MwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyeiJdCiAgICB9OwogICAgZmFBbmdyeTIgPSBmYUZhY2VBbmdyeTI7CiAgICBmYUJ1cnN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1cnN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0ZGMiLCAiTTM3LjYgNC4yQzI4LTIuMyAxNS4yLTEuMSA3IDdTLTIuMyAyOCA0LjIgMzcuNmwxMTIgMTYzLjMtOTkuNiAzMi4zQzYuNyAyMzYuNCAwIDI0NS42IDAgMjU2czYuNyAxOS42IDE2LjYgMjIuOGwxMDMuMSAzMy40LTUyLjkgMTAwLjZjLTQuOSA5LjMtMy4yIDIwLjcgNC4zIDI4LjFzMTguOCA5LjIgMjguMSA0LjNsMTAwLjYtNTIuOSAzMy40IDEwMy4xYzMuMiA5LjkgMTIuNCAxNi42IDIyLjggMTYuNnMxOS42LTYuNyAyMi44LTE2LjZsMzMuNC0xMDMuMSAxMDAuNiA1Mi45YzkuMyA0LjkgMjAuNyAzLjIgMjguMS00LjNzOS4yLTE4LjggNC4zLTI4LjFsLTUyLjktMTAwLjYgMTAzLjEtMzMuNGM5LjktMy4yIDE2LjYtMTIuNCAxNi42LTIyLjhzLTYuNy0xOS42LTE2LjYtMjIuOGwtMTA2LjUtMzQuNSAyNS43LTcwLjRjMy4yLTguOCAxLTE4LjYtNS42LTI1LjJzLTE2LjQtOC44LTI1LjItNS42bC03MC40IDI1LjctMzQuNS0xMDYuNUMyNzUuNiA2LjcgMjY2LjQgMCAyNTYgMHMtMTkuNiA2LjctMjIuOCAxNi42TDIwMC45IDExNi4yIDM3LjYgNC4yeiJdCiAgICB9OwogICAgZmFaID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInoiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjJdLCAiNWEiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsMzIwIDBjMTIuNCAwIDIzLjcgNy4yIDI5IDE4LjRzMy42IDI0LjUtNC40IDM0LjFMMTAwLjMgNDE2IDM1MiA0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xMi40IDAtMjMuNy03LjItMjktMTguNHMtMy42LTI0LjUgNC40LTM0LjFMMjgzLjcgOTYgMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHoiXQogICAgfTsKICAgIGZhQmFuZGFnZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYW5kYWdlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI5NjU3LCAiYmFuZC1haWQiXSwgImY0NjIiLCAiTTQ2NCA0MTZsNDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MmMwLTM1LjMtMjguNy02NC02NC02NGwtNDggMCAwIDMyMHpNNDE2IDk2bC0yNTYgMCAwIDMyMCAyNTYgMCAwLTMyMHpNNjQgOTZDMjguNyA5NiAwIDEyNC43IDAgMTYwTDAgMzUyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ4IDAgMC0zMjAtNDggMHpNMjE2IDIwOGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0xMjAtMjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0yMTYgMzA0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyMC0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYUJhbmRBaWQgPSBmYUJhbmRhZ2U7CiAgICBmYVBsYW5lQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbmUtY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NTYiLCAiTTIzMiAyNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI3LjMgNzggNzEuNWMtNjkuMyAyOS0xMTggOTcuNC0xMTggMTc3LjIgMCA0OS4zIDE4LjYgOTQuMyA0OS4xIDEyOC4zTDI4OCA1MTIgMTc5LjkgNTM5Yy0xMC4xIDIuNS0xOS45LTUuMS0xOS45LTE1LjVsMC0xOS44YzAtNC45IDIuMi05LjUgNi0xMi41bDY2LTUyLjggMC05OS43LTE2Mi45IDU0LjNDNTguNyAzOTYuNCA0OCAzODguNyA0OCAzNzcuOGwwLTQzLjdjMC05IDMuOC0xNy41IDEwLjQtMjMuNkwyMzIgMTUxLjMgMjMyIDI0ek00OTYgMjU2YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMCAyMjhhMjAgMjAgMCAxIDAgMC00MCAyMCAyMCAwIDEgMCAwIDQwem0wLTE4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgODBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTgwYzAtOC44LTcuMi0xNi0xNi0xNnoiXQogICAgfTsKICAgIGZhQnVzU2lkZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidXMtc2lkZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlODFkIiwgIk00ODAgMGM4OC40IDAgMTYwIDcxLjYgMTYwIDE2MGwwIDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNS42IDBjLTEzLjIgMzcuMy00OC42IDY0LTkwLjQgNjRzLTc3LjMtMjYuNy05MC40LTY0bC0xMzkuMSAwYy0xMy4yIDM3LjMtNDguNyA2NC05MC40IDY0cy03Ny4yLTI2LjctOTAuNC02NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA0MyA0MyAwIDk2IDBMNDgwIDB6TTE2MCAzNjhhNDggNDggMCAxIDAgMCA5NiA0OCA0OCAwIDEgMCAwLTk2em0zMjAgMGE0OCA0OCAwIDEgMCAwIDk2IDQ4IDQ4IDAgMSAwIDAtOTZ6bTAtMzA0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtNTMtNDMtOTYtOTYtOTZ6TTI0OCAyMjRsMTA0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTA0IDAgMCAxNjB6TTk2IDY0Qzc4LjMgNjQgNjQgNzguMyA2NCA5NmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEwNCAwIDAtMTYwLTEwNCAweiJdCiAgICB9OwogICAgZmFCdWdzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1Z3MiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRkMCIsICJNNDQ3LjUgMTc0LjZjOC44LTguNCAyMi43LTguOSAzMi4yLS44czExIDIxLjkgNC4xIDMxLjlsLTEuNSAxLjktMjMgMjYuN2MyNi43IDEzLjUgNDYuMyAzOS4xIDUxLjQgNjkuNmwyNS4zIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTI0IDAgMCAzMiAyNCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNS4zIDBjLTcuNiA0NS40LTQ3LjEgODAtOTQuNyA4MHMtODctMzQuNi05NC43LTgwTDI5NiA0MzJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQgMCAwLTMyLTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjUuMyAwYzUuMS0zMC41IDI0LjctNTYuMSA1MS40LTY5LjZsLTIyLjktMjYuN2MtOC42LTEwLjEtNy41LTI1LjIgMi42LTMzLjhzMjUuMi03LjUgMzMuOCAyLjZsMjkuOCAzNC44IDI5LjgtMzQuOCAxLjctMS44em0tMjU2LTE5MmM4LjgtOC40IDIyLjctOC45IDMyLjItLjhzMTEgMjEuOSA0LjEgMzEuOWwtMS41IDEuOS0yMyAyNi43QzIzMCA1NS45IDI0OS41IDgxLjUgMjU0LjcgMTEybDI1LjMgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjQgMCAwIDMyIDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTI1LjMgMGMtNy42IDQ1LjQtNDcuMSA4MC05NC43IDgwcy04Ny0zNC42LTk0LjctODBMNDAgMjQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDI0IDAgMC0zMi0yNCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDI1LjMgMEM3MC41IDgxLjUgOTAgNTUuOSAxMTYuNyA0Mi40TDkzLjggMTUuNkM4NS4yIDUuNiA4Ni4zLTkuNiA5Ni40LTE4LjJzMjUuMi03LjUgMzMuOCAyLjZsMjkuOCAzNC44IDI5LjgtMzQuOCAxLjctMS44eiJdCiAgICB9OwogICAgZmFCZWVyTXVnRW1wdHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmVlci1tdWctZW1wdHkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiYmVlciJdLCAiZjBmYyIsICJNNjQgODBjMC0yNi41IDIxLjUtNDggNDgtNDhsMjg4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNiA2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTA4LjJjMCAyNC4yLTEzLjcgNDYuNC0zNS40IDU3LjJMNDQ4IDM3MS44IDQ0OCAzODRjMCA1My00MyA5Ni05NiA5NmwtMTkyIDBjLTUzIDAtOTYtNDMtOTYtOTZMNjQgODB6TTQ0OCAzMDAuMmw2NC0zMiAwLTEwOC4yLTY0IDAgMCAxNDAuMnpNMTkyIDE1MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjA4em04OCAwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjA4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yMDh6bTg4IDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyMDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTIwOHoiXQogICAgfTsKICAgIGZhQmVlciA9IGZhQmVlck11Z0VtcHR5OwogICAgZmFQZXJzb25DaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1M2UiLCAiTTI4MCAyNGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6bTI0IDIxMi43TDM0MSAyODYuNmMxMi44LTE3LjUgMjguNS0zMi43IDQ2LjMtNDVsLTU2LjItNzUuN0MzMDYgMTMyIDI2Ni4zIDExMiAyMjQgMTEycy04MiAyMC0xMDcuMiA1My45bC03MC41IDk1Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZMMTQ0IDIzNi43IDE0NCA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNzUuM3pNNjQwIDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il0KICAgIH07CiAgICBmYVN0YXBsZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3RhcGxlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNWFmIiwgIk02NDAgMjk5LjNMNjQwIDQzMmMwIDI2LjUtMjEuNSA0OC00OCA0OEw2NCA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDAgMC00OC0zNTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMTYuNi0zMC4yLTUuNGMtMTkuNi0zLjUtMzMuOC0yMC41LTMzLjgtNDAuNCAwLTguOSAyLjktMTcuNSA4LjItMjQuNmwzNS42LTQ3LjVjMzIuOC00My44IDg0LjQtNjkuNiAxMzkuMS02OS42IDI3IDAgNTMuNiA2LjMgNzcuOCAxOC40TDU4Ni45IDIxMy41QzYxOS41IDIyOS43IDY0MCAyNjMgNjQwIDI5OS4zek00NDggMzA0bDAtMTYtMzIwLTU3LjEgMCA3My4xIDMyMCAweiJdCiAgICB9OwogICAgZmFIb3VzZU1lZGljYWxDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1tZWRpY2FsLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTExIiwgIk0zMDkuOCA4LjZjLTEyLjMtMTEuNC0zMS4zLTExLjQtNDMuNSAwbC0yMjQgMjA4Yy05LjYgOS0xMi44IDIyLjktOCAzNS4xUzUwLjggMjcyIDY0IDI3MmwxNiAwIDAgMTc2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5NiAwYy0yMS4yLTI5LjUtMzQuMy02NS4zLTM1LjktMTA0TDI3MiA0MDhjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgMjAgMGMzNC45LTQ4LjUgOTEuNy04MCAxNTYtODAgMTAuNyAwIDIxLjEgLjkgMzEuMyAyLjVMMzA5LjggOC42ek02NDAgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS04Ni42LTYwLjljNy4xIDUuMiA4LjcgMTUuMiAzLjUgMjIuM2wtNjQgODhjLTIuOCAzLjgtNyA2LjItMTEuNyA2LjVzLTkuMy0xLjMtMTIuNi00LjZsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMjYuOCAyNi44IDUzLTcyLjljNS4yLTcuMSAxNS4yLTguNyAyMi40LTMuNXoiXQogICAgfTsKICAgIGZhTmFpcmFTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm5haXJhLXNpZ24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTFmNiIsICJNMTIyLjYgNDYuM2MtNy44LTExLjctMjIuNC0xNy0zNS45LTEyLjlTNjQgNDkuOSA2NCA2NGwwIDE5Mi0zMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMyIDAgMCAxNDRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE0NCA4OS41IDAgMTA3LjggMTYxLjhjNy44IDExLjcgMjIuNCAxNyAzNS45IDEyLjlTMzg0IDQ2Mi4xIDM4NCA0NDhsMC0xNDQgMzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzIgMCAwLTE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE5Mi01Ny41IDAtMTM5LjgtMjA5Ljd6TTI5NC41IDMwNGwyNS41IDAgMCAzOC4zLTI1LjUtMzguM3pNMTg1LjUgMjU2bC01Ny41IDAgMC04Ni4zIDU3LjUgODYuM3oiXQogICAgfTsKICAgIGZhV2lmaSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aWZpIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbIndpZmktMyIsICJ3aWZpLXN0cm9uZyJdLCAiZjFlYiIsICJNMjg4IDk2Yy05MC45IDAtMTczLjIgMzYtMjMzLjcgOTQuNi0xMi43IDEyLjMtMzMgMTItNDUuMi0uN3MtMTItMzMgLjctNDUuMkM4MS43IDc0LjkgMTc5LjkgMzIgMjg4IDMyUzQ5NC4zIDc0LjkgNTY2LjMgMTQ0LjdjMTIuNyAxMi4zIDEzIDMyLjYgLjcgNDUuMnMtMzIuNiAxMy00NS4yIC43QzQ2MS4yIDEzMiAzNzguOSA5NiAyODggOTZ6TTI0MCA0MzJhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMTY4IDMyNi4yYy0xMS43IDEzLjMtMzEuOSAxNC41LTQ1LjIgMi44cy0xNC41LTMxLjktMi44LTQ1LjJDMTYxIDIzNy40IDIyMS4xIDIwOCAyODggMjA4czEyNyAyOS40IDE2OCA3NS44YzExLjcgMTMuMyAxMC40IDMzLjUtMi44IDQ1LjJzLTMzLjUgMTAuNC00NS4yLTIuOEMzNzguNiAyOTIuOSAzMzUuOCAyNzIgMjg4IDI3MnMtOTAuNiAyMC45LTEyMCA1NC4yeiJdCiAgICB9OwogICAgZmFXaWZpMyA9IGZhV2lmaTsKICAgIGZhV2lmaVN0cm9uZyA9IGZhV2lmaTsKICAgIGZhTW9uZXlDaGVja0RvbGxhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1jaGVjay1kb2xsYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibW9uZXktY2hlY2stYWx0Il0sICJmNTNkIiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNMjk2IDI4OGwxMjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTI4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bS0yNC04OGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxMjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTI4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek0xNDggMTQ0YzExIDAgMjAgOSAyMCAyMGwwIDQgOCAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMGwtNDcuNSAwYy02LjkgMC0xMi41IDUuNi0xMi41IDEyLjUgMCA2LjEgNC40IDExLjMgMTAuNCAxMi4zbDQxLjcgN2MyNS4zIDQuMiA0My45IDI2LjEgNDMuOSA1MS44IDAgMjYuMS0xOSA0Ny43LTQ0IDUxLjhsMCA0LjdjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtNC0yNCAwYy0xMSAwLTIwLTktMjAtMjBzOS0yMCAyMC0yMGw1NS41IDBjNi45IDAgMTIuNS01LjYgMTIuNS0xMi41IDAtNi4xLTQuNC0xMS4zLTEwLjQtMTIuM2wtNDEuNy03Qzk0LjUgMjY4IDc2IDI0Ni4xIDc2IDIyMC41IDc2IDE5MS43IDk5LjIgMTY4LjMgMTI4IDE2OGwwLTRjMC0xMSA5LTIwIDIwLTIweiJdCiAgICB9OwogICAgZmFNb25leUNoZWNrQWx0ID0gZmFNb25leUNoZWNrRG9sbGFyOwogICAgZmFFeWVMb3dWaXNpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXllLWxvdy12aXNpb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsibG93LXZpc2lvbiJdLCAiZjJhOCIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtOTYuNC05Ni40YzIuNy0yLjQgNS40LTQuOCA4LTcuMiA0Ni44LTQzLjUgNzguMS05NS40IDkzLTEzMS4xIDMuMy03LjkgMy4zLTE2LjcgMC0yNC42LTE0LjktMzUuNy00Ni4yLTg3LjctOTMtMTMxLjEtNDcuMS00My43LTExMS44LTgwLjYtMTkyLjYtODAuNi01Ni44IDAtMTA1LjYgMTguMi0xNDYgNDQuMkw0MS0yNC45ek0yMDQuNSAxMzguN2MyMy41LTE2LjggNTIuNC0yNi43IDgzLjUtMjYuNyA3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NCAwIDMxLjEtOS45IDU5LjktMjYuNyA4My41bC0zNC43LTM0LjdjMTIuNy0yMS40IDE3LTQ3LjcgMTAuMS03My43LTEzLjctNTEuMi02Ni40LTgxLjYtMTE3LjYtNjcuOS04LjYgMi4zLTE2LjcgNS43LTI0IDEwbC0zNC43LTM0Ljd6TTg4IDE1Ny45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45TDMyOC4yIDQ2NmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMODggMTU3Ljl6TTQ1LjcgMjUxLjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlMMTgxLjkgNDU1LjVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQ1LjcgMjUxLjN6Il0KICAgIH07CiAgICBmYUxvd1Zpc2lvbiA9IGZhRXllTG93VmlzaW9uOwogICAgZmFDaXJjbGVBcnJvd1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1hcnJvdy11cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhcnJvdy1jaXJjbGUtdXAiXSwgImYwYWEiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0xNy0zNzdsODAgODBjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMzktMzkgMCAxNTAuMWMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE1MC4xLTM5IDM5Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDgwLTgwYzkuNC05LjQgMjQuNi05LjQgMzMuOSAweiJdCiAgICB9OwogICAgZmFBcnJvd0NpcmNsZVVwID0gZmFDaXJjbGVBcnJvd1VwOwogICAgZmFDYW1lcmFSZXRybyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYW1lcmEtcmV0cm8iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNDddLCAiZjA4MyIsICJNMCA0MTZsMC0yMDggMTM2LjIgMGMxMy41LTIwLjIgMzItMzYuOCA1My43LTQ4TDAgMTYwIDAgMTI1LjdjMC0zNS4zIDI4LjctNjQgNjQtNjRsLjEgMEM2NS4zIDQ1LjEgNzkuMSAzMiA5NiAzMmwzMiAwYzE2LjkgMCAzMC43IDEzLjEgMzEuOSAyOS43bDMyLjEgMCA1MS4yLTIzLjhjOC40LTMuOSAxNy42LTYgMjYuOS02TDQ0OCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0LTE5MCAwYzIxLjcgMTEuMiA0MC4yIDI3LjggNTMuNyA0OGwxMzYuMiAwIDAgMjA4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjR6TTI1NiAxOTJhOTYuMSA5Ni4xIDAgMSAwIDAgMTkyLjEgOTYuMSA5Ni4xIDAgMSAwIDAtMTkyLjF6Il0KICAgIH07CiAgICBmYUNhcHN1bGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcHN1bGVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0NmIiLCAiTTk2IDExMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMTEyLTk2IDAgMC0xMTJ6bS02NCAwbDAgMjg4YzAgNjEuOSA1MC4xIDExMiAxMTIgMTEyczExMi01MC4xIDExMi0xMTJsMC0xMDUuOCAxMTYuMyAxNjkuNWMzNS41IDUxLjcgMTA1LjMgNjQuMyAxNTYgMjguMXM2My0xMDcuNSAyNy41LTE1OS4yTDQyNy4zIDE0NS4zYy0zNS41LTUxLjctMTA1LjMtNjQuMy0xNTYtMjguMS01LjYgNC0xMC43IDguNC0xNS4zIDEzLjFsMC0xOC4zQzI1NiA1MC4xIDIwNS45IDAgMTQ0IDBTMzIgNTAuMSAzMiAxMTJ6TTI5Ni42IDI0MC4yYy0xNi0yMy4zLTEwLTU1LjMgMTEuOS03MSAyMS4yLTE1LjEgNTAuNS0xMC4zIDY2IDEyLjJsNjcgOTcuNi03OS45IDU1LjktNjUtOTQuOHoiXQogICAgfTsKICAgIGZhUG9vID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBvbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE2OV0sICJmMmZlIiwgIk0yNjguOSAuOWMtNS41LS43LTExIDEuNC0xNC41IDUuN3MtNC42IDEwLjEtMi44IDE1LjRjMi44IDguMiA0LjMgMTYuOSA0LjMgMjYuMSAwIDQ0LjEtMzUuNyA3OS45LTc5LjggODBMMTYwIDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjQgMCAxOS4xIDguNCAzNi4zIDIxLjcgNDhMMTA0IDI0MGMtMzkuOCAwLTcyIDMyLjItNzIgNzIgMCAyMy4yIDExIDQzLjggMjggNTctMzQuMSA1LjctNjAgMzUuMy02MCA3MSAwIDM5LjggMzIuMiA3MiA3MiA3MmwzNjggMGMzOS44IDAgNzItMzIuMiA3Mi03MiAwLTM1LjctMjUuOS02NS4zLTYwLTcxIDE3LTEzLjIgMjgtMzMuOCAyOC01NyAwLTM5LjgtMzIuMi03Mi03Mi03MmwtMTMuNyAwYzEzLjMtMTEuNyAyMS43LTI4LjkgMjEuNy00OCAwLTM1LjMtMjguNy02NC02NC02NGwtNS41IDBjMy41LTEwIDUuNS0yMC44IDUuNS0zMiAwLTQ4LjYtMzYuMi04OC44LTgzLjEtOTUuMXpNMTkyIDI1NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTk2IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTY0IDEwOC4zYzAgMi40LS43IDQuOC0yLjIgNi43LTguMiAxMC41LTM5LjUgNDUtOTMuOCA0NXMtODUuNi0zNC42LTkzLjgtNDVjLTEuNS0xLjktMi4yLTQuMy0yLjItNi43IDAtNi44IDUuNS0xMi4zIDEyLjMtMTIuM2wxNjcuNCAwYzYuOCAwIDEyLjMgNS41IDEyLjMgMTIuM3oiXQogICAgfTsKICAgIGZhRWxldmF0b3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWxldmF0b3IiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTE2ZCIsICJNMjkyLjctNC43bDY0IDY0YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwbDY0LTY0YzQuNi00LjYgNS45LTExLjUgMy41LTE3LjRTNDM4LjUtMzIgNDMyLTMyTDMwNC0zMmMtNi41IDAtMTIuMyAzLjktMTQuOCA5LjlzLTEuMSAxMi45IDMuNSAxNy40em0tMTYwLTIyLjZsLTY0IDY0Yy00LjYgNC42LTUuOSAxMS41LTMuNSAxNy40UzczLjUgNjQgODAgNjRsMTI4IDBjNi41IDAgMTIuMy0zLjkgMTQuOC05LjlzMS4xLTEyLjktMy41LTE3LjRsLTY0LTY0Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAxMjh6bTk2IDk2YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpNODAgNDAwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDY0IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNnptMTkyIDBjMC0yNi41IDIxLjUtNDggNDgtNDhsNjQgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2em0zMi0xMjhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXQogICAgfTsKICAgIGZhVGFnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk5MV0sICJmMDJiIiwgIk0zMi41IDk2bDAgMTQ5LjVjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNsMTkyIDE5MmMyNSAyNSA2NS41IDI1IDkwLjUgMEw0ODMuMiAzMzMuM2MyNS0yNSAyNS02NS41IDAtOTAuNWwtMTkyLTE5MkMyNzkuMiAzOC43IDI2MyAzMiAyNDYgMzJMOTYuNSAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjR6bTExMiAxNmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUZpbGVDaXJjbGVNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNpcmNsZS1taW51cyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGVkIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTU3NiA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTY0IDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0xMjggMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxMjggMGM4LjggMCAxNiA3LjIgMTYgMTZ6Il0KICAgIH07CiAgICBmYURvd25Mb25nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRvd24tbG9uZyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWyJsb25nLWFycm93LWFsdC1kb3duIl0sICJmMzA5IiwgIk0xMzcuNCA1MzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzMwMC45IDM1MiAyODggMzUybC02NCAwIDAtMzM2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zMiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDMzNi02NCAwYy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44Uy4yIDM5Ny41IDkuNCA0MDYuNmwxMjggMTI4eiJdCiAgICB9OwogICAgZmFMb25nQXJyb3dBbHREb3duID0gZmFEb3duTG9uZzsKICAgIGZhQ29tcGFjdERpc2MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tcGFjdC1kaXNjIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTkxLCAxMjgxOTIsIDEyODQ0MF0sICJmNTFmIiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNTYgMzJhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em0tOTYtMzJhOTYgOTYgMCAxIDAgMTkyIDAgOTYgOTYgMCAxIDAgLTE5MiAwem0tNTYtMTZjMC0zMi40IDE2LjMtNjYuNiA0Mi44LTkzLjJTMjA3LjYgMTA0IDI0MCAxMDRjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRjLTQ3LjkgMC05My43IDIzLjUtMTI3LjEgNTYuOVM1NiAxOTIuMSA1NiAyNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHoiXQogICAgfTsKICAgIGZhU3VpdGNhc2VSb2xsaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN1aXRjYXNlLXJvbGxpbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjVjMSIsICJNMTQ0IDI0YzAtNC40IDMuNi04IDgtOGw4MCAwYzQuNCAwIDggMy42IDggOGwwIDcyLTk2IDAgMC03MnpNMzIwIDk2bC0zMiAwIDAtNzJjMC0zMC45LTI1LjEtNTYtNTYtNTZsLTgwIDBDMTIxLjEtMzIgOTYtNi45IDk2IDI0bDAgNzItMzIgMEMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjQgMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwxMjggMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjg4YzAtMzUuMy0yOC43LTY0LTY0LTY0ek0xMjAgMjA4bDE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMCAxMjhsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFCb29rUXVyYW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9vay1xdXJhbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJxdXJhbiJdLCAiZjY4NyIsICJNNjQgNTEybDI4OCAwYzUzIDAgOTYtNDMgOTYtOTZsMC0zMjBjMC01My00My05Ni05Ni05Nkw0OCAwQzIxLjUgMCAwIDIxLjUgMCA0OEwwIDMzNmMwIDIwLjkgMTMuNCAzOC43IDMyIDQ1LjNMMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDB6TTM1MiAzODRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI1NiAwIDAtNjQgMjU2IDB6TTI3My4xIDE0NC40YzIuNS02LjEgMTEuMi02LjEgMTMuNyAwbDEwLjMgMjQuOCAyNi44IDIuMWM2LjYgLjUgOS4yIDguNyA0LjIgMTNMMzA3LjggMjAxLjkgMzE0IDIyOGMxLjUgNi40LTUuNSAxMS41LTExLjEgOC4xbC0yMi45LTE0LTIyLjkgMTRjLTUuNiAzLjQtMTIuNi0xLjYtMTEuMS04LjFsNi4yLTI2LjEtMjAuNC0xNy41Yy01LTQuMy0yLjMtMTIuNSA0LjItMTNsMjYuOC0yLjEgMTAuMy0yNC44ek0xMDAgMTkyYzAtNjguNSA1NS41LTEyNCAxMjQtMTI0IDIzLjggMCA0Ni4xIDYuNyA2NSAxOC40IDQuOCAyLjkgNi45IDguOCA1IDE0LjFzLTcuMSA4LjYtMTIuNyA4Yy0zLjEtLjMtNi4yLS41LTkuNC0uNS00Ni40IDAtODQgMzcuNi04NCA4NHMzNy42IDg0IDg0IDg0YzMuMiAwIDYuMy0uMiA5LjQtLjUgNS42LS42IDEwLjggMi43IDEyLjcgOHMtLjMgMTEuMi01IDE0LjFjLTE4LjkgMTEuNy00MS4yIDE4LjQtNjUgMTguNC02OC41IDAtMTI0LTU1LjUtMTI0LTEyNHoiXQogICAgfTsKICAgIGZhUXVyYW4gPSBmYUJvb2tRdXJhbjsKICAgIGZhUGhvbmVTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwaG9uZS1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmM2RkIiwgIk01MzUtMjQuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMNDEgNTM3LjFjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMMTQxLjUgMzY4LjZDODkuMiAzMTAuNSA1MS42IDIzOC44IDM0LjggMTU5LjQgMTguNyA4My4xIDczLjkgMjAuNiAxMzguNSAyLjlsNS41LTEuNWMxOS43LTUuNCA0MC4zIDQuNyA0OC4xIDIzLjVsNDAuNSA5Ny4zYzYuOSAxNi41IDIuMSAzNS42LTExLjggNDdsLTQ0LjEgMzYuMWMxMi45IDI4LjUgMjkuNiA1NC44IDQ5LjUgNzguNUw1MzUtMjQuOXptLTE1MC40IDUzNGMtNjMtMTMuNC0xMjEuMy0zOS44LTE3MS43LTc2LjNMMjk3LjggMzQ4YzEyLjIgOC4yIDI1IDE1LjYgMzguMyAyMi4yTDM3NC43IDMyM2MxMS4zLTEzLjkgMzAuNC0xOC42IDQ3LTExLjhMNTE5IDM1MS44YzE4LjggNy44IDI4LjkgMjguNCAyMy41IDQ4LjFsLTEuNSA1LjVjLTE3LjYgNjQuNi04MC4yIDExOS44LTE1Ni40IDEwMy43eiJdCiAgICB9OwogICAgZmFSb2FkQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9hZC1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU2NCIsICJNMjg4IDMybC03Ni4zIDBjLTI5LjQgMC01NS4xIDIwLjEtNjIuMSA0OC42TDY1LjQgNDIwLjVDNTcuOSA0NTAuNyA4MC44IDQ4MCAxMTIgNDgwbDIwOS40IDBjLTExLjItMjQuNC0xNy40LTUxLjQtMTcuNC04MCAwLTI4LjYgNi4yLTU1LjcgMTcuNC04MC0uNSAwLTEgMC0xLjUgMC0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA0OWMzNS4yLTM5LjkgODYuNy02NSAxNDQtNjUgOSAwIDE3LjggLjYgMjYuNSAxLjhsLTMyLTEyOS4yQzQ4My40IDUyLjEgNDU3LjggMzIgNDI4LjMgMzJsLTc2LjQgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6TTY0MCA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdCiAgICB9OwogICAgZmFTaG9wTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaG9wLWxvY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRhNSIsICJNMjEuNSAxODEuMUw3OC4zIDY3LjRDODkuMiA0NS43IDExMS4zIDMyIDEzNS42IDMybDMwNC45IDBjMjQuMiAwIDQ2LjQgMTMuNyA1Ny4yIDM1LjRsNTUuNiAxMTEuMWMtOC4yLTEuNi0xNi42LTIuNS0yNS4yLTIuNS01My43IDAtOTkuNyAzMy4xLTExOC43IDgwbC01Ny4zIDAgMCAxNzZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE5MiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE3Ni4xYy0yNi44LTEuOS00OC0yNC4zLTQ4LTUxLjYgMC04IDEuOS0xNiA1LjUtMjMuMnpNMTI4IDI1NmwwIDExMmMwIDguOCA3LjIgMTYgMTYgMTZsMTI4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTEyLTE2MCAwem00MzIgNDguMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTQxNiA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il0KICAgIH07CiAgICBmYUltYWdlUG9ydHJhaXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaW1hZ2UtcG9ydHJhaXQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsicG9ydHJhaXQiXSwgImYzZTAiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHpNODAgMzY4YzAgOC44IDcuMiAxNiAxNiAxNmwxOTIgMGM4LjggMCAxNi03LjIgMTYtMTYgMC00NC4yLTM1LjgtODAtODAtODBsLTY0IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwek0xOTIgMjQ4YTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyeiJdCiAgICB9OwogICAgZmFQb3J0cmFpdCA9IGZhSW1hZ2VQb3J0cmFpdDsKICAgIGZhQnJpZGdlTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmlkZ2UtbG9jayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGNjIiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDQ0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04IDAgMCAzMi4yYzEzLjggLjYgMjcuMiAyLjggNDAgNi40bDAgNTAuN2MtMTQuOC02LTMxLTkuMy00OC05LjMtNzAuNyAwLTEyOCA1Ny4zLTEyOCAxMjhsMCAyNC40Yy0uNCAuMy0uNyAuNi0xLjEgMS0xNy4zLTI1LTQ2LjItNDEuMy03OC45LTQxLjMtNTMgMC05NiA0My05NiA5NmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk0YzAtMzguOC0yNi40LTcyLjYtNjQtODJsMC0xMTIgNDAgMCAwLTY0LTggMEMxNC4zIDk2IDAgODEuNyAwIDY0em00MjQgNjguNmwwLTM2LjYtODAgMCAwIDY0IDE4LjggMGMxOC4yLTEyLjggMzguOS0yMi4yIDYxLjItMjcuNHpNMjE2IDk2bDAgNjQgODAgMCAwLTY0LTgwIDB6bS00OCAwbC04MCAwIDAgNjQgODAgMCAwLTY0ek00OTYgMzA0LjFjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45ek0zNTIgNDAwYzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2eiJdCiAgICB9OwogICAgZmFIYW1tZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFtbWVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4Mjk2XSwgImY2ZTMiLCAiTTI0Ni45IDE4LjNMMjcxIDMuOGMyMS42LTEzIDQ2LjMtMTkuOCA3MS41LTE5LjggMzYuOCAwIDcyLjIgMTQuNiA5OC4yIDQwLjdsNjMuOSA2My45YzE1IDE1IDIzLjQgMzUuNCAyMy40IDU2LjZsMCAzMC45IDE5LjcgMTkuNyAwIDBjMTUuNi0xNS42IDQwLjktMTUuNiA1Ni42IDBzMTUuNiA0MC45IDAgNTYuNmwtNjQgNjRjLTE1LjYgMTUuNi00MC45IDE1LjYtNTYuNiAwcy0xNS42LTQwLjkgMC01Ni42TDQ2NCAyNDAgNDMzLjEgMjQwYy0yMS4yIDAtNDEuNi04LjQtNTYuNi0yMy40bC00OS4xLTQ5LjFjLTE1LTE1LTIzLjQtMzUuNC0yMy40LTU2LjZsMC0xMi43YzAtMTEuMi01LjktMjEuNy0xNS41LTI3LjRsLTQxLjYtMjVjLTEwLjQtNi4yLTEwLjQtMjEuMiAwLTI3LjR6TTUwLjcgNDAyLjdsMjIyLjEtMjIyLjEgOTAuNSA5MC41LTIyMi4xIDIyMi4xYy0yNSAyNS02NS41IDI1LTkwLjUgMHMtMjUtNjUuNSAwLTkwLjV6Il0KICAgIH07CiAgICBmYUFycm93VXAxOSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC0xLTkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic29ydC1udW1lcmljLXVwIl0sICJmMTYzIiwgIk0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZ6TTQxOC43IDM4Yy04LjMtNi0xOS4xLTcuNy0yOC44LTQuNGwtNDggMTZjLTE2LjggNS42LTI1LjggMjMuNy0yMC4yIDQwLjVzMjMuNyAyNS44IDQwLjUgMjAuMmw1LjktMiAwIDUxLjYtMTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNiAwIDAtOTZjMC0xMC4zLTQuOS0xOS45LTEzLjMtMjZ6TTM2NS4xIDQzMC42Yy05LjYgMTQuOC01LjQgMzQuNiA5LjQgNDQuM3MzNC42IDUuNCA0NC4zLTkuNGw0Mi4xLTY0LjljMTIuNC0xOS4yIDE5LjEtNDEuNiAxOS4xLTY0LjUgMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCAzNi4xIDIzLjkgNjYuNyA1Ni44IDc2LjZsLTExLjcgMTh6TTM3NiAzMzZhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhU29ydE51bWVyaWNVcCA9IGZhQXJyb3dVcDE5OwogICAgZmFDaGVzc0tuaWdodDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlc3Mta25pZ2h0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTgyMl0sICJmNDQxIiwgIk0xOTItMzJjMTA2IDAgMTkyIDg2IDE5MiAxOTJsMCAxMzMuNWMwIDE3LTYuOCAzMy4yLTE4LjcgNDUuMkwzMjAgMzg0IDM3MC44IDQzNC43YzguNSA4LjUgMTMuMiAyMCAxMy4yIDMyIDAgMjUtMjAuMyA0NS4yLTQ1LjIgNDUuM0w0NS4zIDUxMmMtMjUgMC00NS4yLTIwLjMtNDUuMi00NS4zIDAtMTIgNC44LTIzLjUgMTMuMi0zMkw2NCAzODQgNjQgMzQ5LjRjMC0xOC43IDguMi0zNi40IDIyLjMtNDguNmw4OS43LTc2LjgtNDggMC0xMi4xIDEyLjFjLTEyLjcgMTIuNy0zMCAxOS45LTQ4IDE5LjktMzcuNSAwLTY3LjktMzAuNC02Ny45LTY3LjlsMC04LjdjMC0yMi44IDguMi00NC45IDIzLjEtNjIuM0w5NiAzMiA5NiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDB6TTE2MCA3MmEyNCAyNCAwIDEgMCAwIDQ4IDI0IDI0IDAgMSAwIDAtNDh6Il0KICAgIH07CiAgICBmYUhvdXNlRmxvb2RXYXRlckNpcmNsZUFycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtZmxvb2Qtd2F0ZXItY2lyY2xlLWFycm93LXJpZ2h0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MGYiLCAiTTI4OC41IDExMmExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwek0xNDEuMiA0NC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDU2IDU2YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC01NiA1NmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwyOC43LTI4LjctODkuNCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDg5LjQgMC0yOC43LTI4LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42ek0zMzYuNSAxMTJjMCA3MS4xLTM4LjYgMTMzLjEtOTYgMTY2LjNsMCAxMi44YzIyLjEgNC41IDQzLjQgMTMuOSA2Mi40IDI4LjIgMjIuMSAxNi42IDI5LjEgMTYuNiA1MS4yIDAgMjcuNS0yMC43IDU5LjktMzEuMiA5Mi40LTMxLjQgMzMuMS0uMiA2Ni4zIDEwLjIgOTQuNCAzMS40IDYuOSA1LjIgMTIuOCA5IDE4IDExLjcgLjYgLjMgMS4yIC42IDEuOCAxIDQuMiAyLjMgOC41IDQuNiAxMi42IDEuNSA2LTQuNSAxMi42LTggMTkuMy0xMC40bDAtMTE1LjIgNC41IDBjMTUuMiAwIDI3LjUtMTIuMyAyNy41LTI3LjUgMC03LjktMy40LTE1LjUtOS40LTIwLjdMNDQ0LjUgMTAuNUM0MzYuOCAzLjcgNDI2LjggMCA0MTYuNSAwcy0yMC4zIDMuNy0yOCAxMC41TDMyOS45IDYxLjhjNC4zIDE2IDYuNiAzMi44IDYuNiA1MC4yem0zMiA4OGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDh6TTQ3NS4xIDQxMi4xYzE5IDE0LjQgNDEuOSAyOC4yIDY3LjIgMzMuMyAyNi41IDUuNCA1NC4zIC44IDgwLjctMTkuMSAxMC42LTggMTIuNy0yMyA0LjctMzMuNnMtMjMtMTIuNy0zMy42LTQuN2MtMTQuOSAxMS4yLTI4LjYgMTMuMS00Mi4zIDEwLjMtMTQuOS0zLTMwLjktMTEuOS00Ny44LTI0LjYtMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM1MyOTAgMzkxLjggMjY2IDM3My43Yy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjEuNiAxNi4zLTQxLjMgMjUuOC01OC45IDI1LjctOS42LS4xLTE5LjktMy0zMS4yLTExLjUtMTAuNi04LTI1LjYtNS45LTMzLjYgNC43cy01LjkgMjUuNiA0LjcgMzMuNmMxOS4xIDE0LjQgMzkuNCAyMSA1OS44IDIxLjEgMzMuOSAuMiA2NC4zLTE3LjQgODguMS0zNS4zIDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1LjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDB6bS03MS4yIDk2YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDE5IDE0LjQgNDEuOSAyOC4yIDY3LjIgMzMuMyAyNi41IDUuNCA1NC4zIC44IDgwLjctMTkuMSAxMC42LTggMTIuNy0yMyA0LjctMzMuNnMtMjMtMTIuNy0zMy42LTQuN2MtMTQuOSAxMS4yLTI4LjYgMTMuMS00Mi4zIDEwLjMtMTQuOS0zLTMwLjktMTEuOS00Ny44LTI0LjYtMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM1MyOTAgNDg3LjggMjY2IDQ2OS43Yy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjEuNiAxNi4zLTQxLjMgMjUuOC01OC45IDI1LjctOS42LS4xLTE5LjktMy0zMS4yLTExLjUtMTAuNi04LTI1LjYtNS45LTMzLjYgNC43cy01LjkgMjUuNiA0LjcgMzMuNmMxOS4xIDE0LjQgMzkuNCAyMSA1OS44IDIxLjEgMzMuOSAuMiA2NC4zLTE3LjQgODguMS0zNS4zIDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1Ljl6Il0KICAgIH07CiAgICBmYUFycm93VXBSaWdodEZyb21TcXVhcmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtcmlnaHQtZnJvbS1zcXVhcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZXh0ZXJuYWwtbGluayJdLCAiZjA4ZSIsICJNMzIwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsODIuNyAwLTIwMS40IDIwMS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDQ0OCAxMDkuMyA0NDggMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC0xNy43LTE0LjMtMzItMzItMzJMMzIwIDB6TTgwIDk2QzM1LjggOTYgMCAxMzEuOCAwIDE3NkwwIDQzMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGwyNTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTgwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2TDgwIDQ0OGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmw4MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDgwIDk2eiJdCiAgICB9OwogICAgZmFFeHRlcm5hbExpbmsgPSBmYUFycm93VXBSaWdodEZyb21TcXVhcmU7CiAgICBmYUFycm93RG93blVwQWNyb3NzTGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLXVwLWFjcm9zcy1saW5lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YWYiLCAiTTI2NS40IDEwNS40bDk2LTk2YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDk2IDk2YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC00MS40LTQxLjQgMCAxMTQuNyA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMjAgMCAwIDExNC43IDQxLjQtNDEuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC05NiA5NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTk2LTk2Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDQwMi43IDk2IDI4OCAzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIwIDAgMC0xMTQuNy00MS40IDQxLjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zek00MTYgMzM2bDAgMTQ0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTQ0IDY0IDB6TTk2IDE3Nkw5NiAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTQ0LTY0IDB6Il0KICAgIH07CiAgICBmYUZhY2VHcmluQmVhbTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLWJlYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTYsICJncmluLWJlYW0iXSwgImY1ODIiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0zODYuNyAzMDguOWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtMjIuNCA2MS4zLTgxLjMgMTA1LjEtMTUwLjMgMTA1LjFTMTI4LjEgMzg4LjIgMTA1LjcgMzI2LjljLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMXpNMTc2IDE4MGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHptMTMyIDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6Il0KICAgIH07CiAgICBmYUdyaW5CZWFtMiA9IGZhRmFjZUdyaW5CZWFtMjsKICAgIGZhUmVjdGFuZ2xlQWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVjdGFuZ2xlLWFkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFkIl0sICJmNjQxIiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNNDE2IDE4NGwwIDE0NGMwIDEzLjMtMTAuNyAyNC0yNCAyNC03LjEgMC0xMy41LTMuMS0xNy45LTgtMTAuMiA1LjEtMjEuOCA4LTM0LjEgOC00MiAwLTc2LTM0LTc2LTc2czM0LTc2IDc2LTc2YzkuOSAwIDE5LjMgMS45IDI4IDUuM2wwLTIxLjNjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHptLTQ4IDkyYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6TTE2MCAyMDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyIDQ4IDAgMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDB6bTMyIDk2bC00OCAwIDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMDRjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEwNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTI0eiJdCiAgICB9OwogICAgZmFBZCA9IGZhUmVjdGFuZ2xlQWQ7CiAgICBmYUJvb2tUYW5ha2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9vay10YW5ha2giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidGFuYWtoIl0sICJmODI3IiwgIk0zNTIgNTEyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwwLTY2LjdDMTMuNCAzNzQuNyAwIDM1Ni45IDAgMzM2TDAgNDhDMCAyMS41IDIxLjUgMCA0OCAwTDM1MiAwYzUzIDAgOTYgNDMgOTYgOTZsMCAzMjBjMCA1My00MyA5Ni05NiA5NnptMzItOTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTI1NiAwIDAgNjQgMjU2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6TTExMy45IDIyOWMtMS4yIDItMS45IDQuMi0xLjkgNi42IDAgNi45IDUuNiAxMi41IDEyLjUgMTIuNWw1Ni45IDAgMzAuNSA0OS4yYzIuNiA0LjIgNy4yIDYuOCAxMi4yIDYuOHM5LjYtMi42IDEyLjItNi44bDMwLjUtNDkuMiA1Ni45IDBjNi45IDAgMTIuNS01LjYgMTIuNS0xMi41IDAtMi4zLS42LTQuNi0xLjktNi42bC0yNy44LTQ1IDI3LjgtNDVjMS4yLTIgMS45LTQuMiAxLjktNi42IDAtNi45LTUuNi0xMi41LTEyLjUtMTIuNWwtNTYuOSAwLTMwLjUtNDkuMkMyMzMuNiA2Ni42IDIyOSA2NCAyMjQgNjRzLTkuNiAyLjYtMTIuMiA2LjhsLTMwLjUgNDkuMi01Ni45IDBjLTYuOSAwLTEyLjUgNS42LTEyLjUgMTIuNSAwIDIuMyAuNiA0LjYgMS45IDYuNmwyNy44IDQ1LTI3LjggNDV6Il0KICAgIH07CiAgICBmYVRhbmFraCA9IGZhQm9va1RhbmFraDsKICAgIGZhSG90VHViUGVyc29uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdC10dWItcGVyc29uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImhvdC10dWIiXSwgImY1OTMiLCAiTTI0MCA0MGMwIDEzLjYgNS44IDI2LjUgMTUuOCAzNS42bDI2LjUgMjMuOGMyNCAyMS42IDM3LjcgNTIuMyAzNy43IDg0LjYgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xOC43LTcuOS0zNi40LTIxLjgtNDguOWwtMjYuNS0yMy44QzIwMy41IDkzLjEgMTkyIDY3LjIgMTkyIDQwIDE5MiAyNi43IDIwMi43IDE2IDIxNiAxNnMyNCAxMC43IDI0IDI0ek0wIDMzNmwwLTgwYzAtMzUuMyAyOC43LTY0IDY0LTY0bDE5LjcgMGM4LjEgMCAxNi4yIDEuNiAyMy44IDQuNmwxMzcuMSA1NC44YzcuNiAzIDE1LjYgNC42IDIzLjggNC42TDM4NCAyNTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDMzNnptOTYtMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTgwYzAtMTMuMy0xMC43LTI0LTI0LTI0em0xNTIgMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODB6bTEwNC0yNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTMyOCAxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNCAwIDEzLjYgNS44IDI2LjUgMTUuOCAzNS42bDI2LjUgMjMuOGMyNCAyMS42IDM3LjcgNTIuMyAzNy43IDg0LjYgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xOC43LTcuOS0zNi40LTIxLjgtNDguOWwtMjYuNS0yMy44QzMxNS41IDkzLjEgMzA0IDY3LjIgMzA0IDQwIDMwNCAyNi43IDMxNC43IDE2IDMyOCAxNnpNNjQgNDBhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6Il0KICAgIH07CiAgICBmYUhvdFR1YiA9IGZhSG90VHViUGVyc29uOwogICAgZmFGaWxlSGFsZkRhc2hlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWhhbGYtZGFzaGVkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU2OTgiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0bDAgMjU2IDM4NCAwIDAtMTQ5LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjU4LjcgMTguN0MyNDYuNyA2LjcgMjMwLjUgMCAyMTMuNSAwTDY0IDB6TTMyNS41IDE3NkwyMzIgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyMDggNTguNSAzMjUuNSAxNzZ6TTAgMzUybDAgNjQgNjQgMCAwLTY0LTY0IDB6TTY0IDUxMmwwLTY0LTY0IDBjMCAzNS4zIDI4LjcgNjQgNjQgNjR6bTMyIDBsODAgMCAwLTY0LTgwIDAgMCA2NHptMTEyIDBsODAgMCAwLTY0LTgwIDAgMCA2NHptMTEyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsLTY0IDAgMCA2NHptNjQtMTYwbC02NCAwIDAgNjQgNjQgMCAwLTY0eiJdCiAgICB9OwogICAgZmFPdXRkZW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm91dGRlbnQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZGVkZW50Il0sICJmMDNiIiwgIk0uNCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzg0IDBDMTQuOCA5NiAuNCA4MS43IC40IDY0em0xOTIgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTMyIDk2bDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpNLjQgNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zODQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TS43IDI2OC42Yy04LjItNi40LTguMi0xOC45IDAtMjUuM2wxMDEuOS03OS4zYzEwLjUtOC4yIDI1LjgtLjcgMjUuOCAxMi42bDAgMTU4LjZjMCAxMy4zLTE1LjMgMjAuOC0yNS44IDEyLjZMLjcgMjY4LjZ6Il0KICAgIH07CiAgICBmYURlZGVudCA9IGZhT3V0ZGVudDsKICAgIGZhSGFuZFBlYWNlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBlYWNlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTk5Nl0sICJmMjViIiwgIk0xOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDIwOC02NCAwIDAtMjA4YzAtMTcuNyAxNC4zLTMyIDMyLTMyem05NiAxNjBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyem02NCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHpNNjEuMyA1MS4yTDE0My45IDI0MCA3NC4xIDI0MCAyLjcgNzYuOEMtNC40IDYwLjYgMyA0MS44IDE5LjIgMzQuN1M1NC4yIDM1IDYxLjMgNTEuMnptMjcgMjIxLjNsLS4yLS41IDk1LjkgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MGwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw1NiAwYzM5LjggMCA3Mi0zMi4yIDcyLTcybDAtLjZjOS40IDUuNCAyMC4zIDguNiAzMiA4LjYgMTMuMiAwIDI1LjQtNCAzNS42LTEwLjggOC43IDI0LjkgMzIuNSA0Mi44IDYwLjQgNDIuOCAxMS43IDAgMjIuNi0zLjEgMzItOC42bDAgOC42YzAgODguNC03MS42IDE2MC0xNjAgMTYwbC02MS43IDBjLTQyLjQgMC04My4xLTE2LjktMTEzLjEtNDYuOUw2OS41IDQ1My41QzQ1LjUgNDI5LjUgMzIgMzk2LjkgMzIgMzYzbDAtMjdjMC0zMi43IDI0LjYtNTkuNyA1Ni4zLTYzLjV6Il0KICAgIH07CiAgICBmYUhlYWRTaWRlVmlydXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhZC1zaWRlLXZpcnVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwNjQiLCAiTTMyOS43IDQ0OGMtNS4xIDAtOS43IDMuNy05LjcgOC44bDAgNy4yYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNjAgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC02My42YzAtMTIuNi01LjEtMjQuNS0xMy4xLTM0LjItMzEuOC0zOC43LTUwLjktODguMi01MC45LTE0Mi4yIDAtMTIzLjcgMTAwLjMtMjI0IDIyNC0yMjQgMTEyLjcgMCAyMDYgODMuMyAyMjEuNyAxOTEuNyAuNCAzIDEuNyA1LjkgMy42IDguM2wzNS44IDQyLjljNyA4LjQgMTAuOSAxOS4xIDEwLjkgMzAuMSAwIDI1LjktMjEgNDctNDcgNDdsLTEgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTM4LjMgMHpNMjI0IDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNCAwIDIyLjktMjcuNyAzNC40LTQzLjkgMTguMi05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45YzE2LjIgMTYuMiA0LjcgNDMuOS0xOC4yIDQzLjktMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGMyMi45IDAgMzQuNCAyNy43IDE4LjIgNDMuOS05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBjMTYuMi0xNi4yIDQzLjktNC43IDQzLjkgMTguMiAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMjIuOSAyNy43LTM0LjQgNDMuOS0xOC4yIDkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWMtMTYuMi0xNi4yLTQuNy00My45IDE4LjItNDMuOSAxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGMtMjIuOSAwLTM0LjQtMjcuNy0xOC4yLTQzLjkgOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGMtMTYuMiAxNi4yLTQzLjkgNC43LTQzLjktMTguMiAwLTEzLjMtMTAuNy0yNC0yNC0yNHptLTMyIDg4YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNDAgODhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhQ29tcGFzczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tcGFzcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTUxN10sICJmMTRlIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptNTAuNy0xODYuOUwxNjIuNCAzODAuNmMtMTkuNCA3LjUtMzguNS0xMS42LTMxLTMxbDU1LjUtMTQ0LjNjMy4zLTguNSA5LjktMTUuMSAxOC40LTE4LjRsMTQ0LjMtNTUuNWMxOS40LTcuNSAzOC41IDExLjYgMzEgMzFMMzI1LjEgMzA2LjdjLTMuMiA4LjUtOS45IDE1LjEtMTguNCAxOC40ek0yODggMjU2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYVBlbk5pYiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW4tbmliIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTAwMDFdLCAiZjVhZCIsICJNMzY4LjUgMTguM2wtNTAuMSA1MC4xIDEyNS4zIDEyNS4zIDUwLjEtNTAuMWMyMS45LTIxLjkgMjEuOS01Ny4zIDAtNzkuMkw0NDcuNyAxOC4zYy0yMS45LTIxLjktNTcuMy0yMS45LTc5LjIgMHpNMjc5LjMgOTcuMmwtLjUgLjEtMTQ0LjEgNDMuMmMtMTkuOSA2LTM1LjcgMjEuMi00Mi4zIDQxTDMuOCA0NDUuOGMtMi45IDguNy0xLjkgMTguMiAyLjUgMjZMMTYxLjcgMzE2LjRjLTEuMS00LTEuNi04LjEtMS42LTEyLjQgMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OC0yMS41IDQ4LTQ4IDQ4Yy00LjMgMC04LjUtLjYtMTIuNC0xLjZMNDAuMyA1MDUuN2M3LjggNC40IDE3LjIgNS40IDI2IDIuNWwyNjQuMy04OC42YzE5LjctNi42IDM1LTIyLjQgNDEtNDIuM2w0My4yLTE0NC4xIC4xLS41LTEzNS41LTEzNS41eiJdCiAgICB9OwogICAgZmFUZW50QXJyb3dzRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW50LWFycm93cy1kb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1ODEiLCAiTTE4NS41IDEyMWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0zMSAzMSAwLTEwMi4xYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTAyLjEtMzEtMzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNzItNzJ6bTI0OCA3Mmw3Mi03MmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0zMSAzMSAwLTEwMi4xYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTAyLjEtMzEtMzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDB6TTYwLjMgMjkyLjZMMzcuMSA0NzZjLTIuNCAxOS4xIDEyLjUgMzYgMzEuNyAzNmwxNTQuNSAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTE3LjRjMC01LjkgNC43LTEwLjYgMTAuNi0xMC42IDQgMCA3LjcgMi4zIDkuNSA1LjlsNjguMiAxMzYuNWM1LjQgMTAuOCAxNi41IDE3LjcgMjguNiAxNy43bDcxLjkgMGMxOS4zIDAgMzQuMi0xNi45IDMxLjctMzZMNDUyLjcgMjkyLjdjLTEuMi05LjctNi45LTE4LjQtMTUuMy0yMy40TDI3MS45IDE2OS45Yy0xMC4yLTYuMS0yMi45LTYuMS0zMy4xIC4xTDc1LjQgMjY5LjNjLTguMyA1LjEtMTMuOSAxMy43LTE1LjEgMjMuM3oiXQogICAgfTsKICAgIGZhRm9yd2FyZEZhc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9yd2FyZC1mYXN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTE5NywgImZhc3QtZm9yd2FyZCJdLCAiZjA1MCIsICJNMTkuOCA0NzcuNmMxMiA1IDI1LjcgMi4yIDM0LjktNi45TDIyNCAzMDEuMyAyMjQgNDQ4YzAgMTIuOSA3LjggMjQuNiAxOS44IDI5LjZzMjUuNyAyLjIgMzQuOS02LjlMNDQ4IDMwMS4zIDQ0OCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE0Ni43LTE2OS40LTE2OS40Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOVMyMjQgNTEuMSAyMjQgNjRMMjI0IDIxMC43IDU0LjYgNDEuNGMtOS4yLTkuMi0yMi45LTExLjktMzQuOS02LjlTMCA1MS4xIDAgNjRMMCA0NDhjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnoiXQogICAgfTsKICAgIGZhRmFzdEZvcndhcmQgPSBmYUZvcndhcmRGYXN0OwogICAgZmFDcm9wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNyb3AiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjEyNSIsICJNNDQ4IDEwOS4zbDU0LjYtNTQuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEw0MDIuNyA2NCAxNzYgNjQgMTc2IDEyOCAzMzguNyAxMjggMTI4IDMzOC43IDEyOCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCAxNC4zIDY0IDMybDAgMzItMzIgMEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJsMzIgMCAwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMDggMCAwLTY0LTE2Mi43IDAgMjEwLjctMjEwLjcgMCAzMDYuN2MwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTI3NC43eiJdCiAgICB9OwogICAgZmFXaGlza2V5R2xhc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2hpc2tleS1nbGFzcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyOTM0NywgImdsYXNzLXdoaXNrZXkiXSwgImY3YTAiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCAzNTJjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhsMTkyIDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhsMC0yODhjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMzJ6TTY0IDI1NmwwLTE2MCAzMjAgMCAwIDE2MC0zMjAgMHoiXQogICAgfTsKICAgIGZhR2xhc3NXaGlza2V5ID0gZmFXaGlza2V5R2xhc3M7CiAgICBmYVNxdWFyZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTYzMiwgOTcyMywgOTcyNCwgNjE1OTBdLCAiZjBjOCIsICJNNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMyeiJdCiAgICB9OwogICAgZmFGYWNlR3JpbjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTEyLCAiZ3JpbiJdLCAiZjU4MCIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4Ni43IDMwOC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSAzODguMiAxMDUuNyAzMjYuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUdyaW4yID0gZmFGYWNlR3JpbjI7CiAgICBmYUZpbGVDb250cmFjdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNvbnRyYWN0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1NmMiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek04OCA2NEM3NC43IDY0IDY0IDc0LjcgNjQgODhzMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDg4IDY0em0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6bTcwLjMgMTYwYy0xMS4zIDAtMjEuOSA1LjEtMjguOSAxMy45TDY5LjMgNDA5Yy04LjMgMTAuMy02LjYgMjUuNSAzLjcgMzMuN3MyNS41IDYuNiAzMy43LTMuOGw0Ny4xLTU4LjggMTUuMiA1MC43YzMgMTAuMiAxMi40IDE3LjEgMjMgMTcuMWwxMDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODYuMSAwLTE2LjEtNTMuNmMtNC43LTE1LjctMTkuMS0yNi40LTM1LjUtMjYuNHoiXQogICAgfTsKICAgIGZhQW5nbGVVcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmdsZS11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzg5NjNdLCAiZjEwNiIsICJNMTY5LjQgMTM3LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwxOTIgMjA1LjMgNTQuNiAzNDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTYwLTE2MHoiXQogICAgfTsKICAgIGZhRmFjZVNtaWxlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXNtaWxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTc4LCAic21pbGUiXSwgImYxMTgiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjUuNCAzMjEuOWMyMC40IDI4IDUzLjQgNDYuMSA5MC42IDQ2LjFzNzAuMi0xOC4xIDkwLjYtNDYuMWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjNzMTMuMSAyMi44IDUuMyAzMy41QzM1Ni4zIDM5MCAzMDkuMiA0MTYgMjU2IDQxNnMtMTAwLjMtMjYtMTI5LjQtNjUuOWMtNy44LTEwLjctNS40LTI1LjcgNS4zLTMzLjVzMjUuNy01LjQgMzMuNSA1LjN6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhU21pbGUyID0gZmFGYWNlU21pbGUyOwogICAgZmFQZXJzb25EcmVzc0J1cnN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1kcmVzcy1idXJzdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTQ0IiwgIk0yMDggNDAuMWMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjR6TTggMTQ0LjFjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTkyLjUgMTQxLjRsMzMuOS0zMy45YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMNjYuNiAyNTEuNmMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwek02Ni42IDIuN2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsMzMuOSAzMy45YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUwxMDAuNSAyLjdDOTEuMS02LjcgNzYtNi43IDY2LjYgMi43ek0zNTIgODBhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTI0Ni4yIDM4NGwyNS44IDAgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAzMiAwIDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjggMjUuOCAwYzEwLjkgMCAxOC42LTEwLjcgMTUuMi0yMS4xbC00My0xMjkgNDguMyA2NS4xYzEwLjUgMTQuMiAzMC42IDE3LjIgNDQuOCA2LjZzMTcuMi0zMC42IDYuNi00NC44bC03MC41LTk1QzQzNCAxMzIgMzk0LjMgMTEyIDM1MiAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNmw0OC4zLTY1LjEtNDMgMTI5Yy0zLjUgMTAuNCA0LjMgMjEuMSAxNS4yIDIxLjF6Il0KICAgIH07CiAgICBmYURpdmlkZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaXZpZGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMDEzNSwgMjQ3XSwgImY1MjkiLCAiTTIyNCA0OGE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMCAyNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTY4IDQwOGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6Il0KICAgIH07CiAgICBmYUNvZGVGb3JrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvZGUtZm9yayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMTNiIiwgIk04MCAxMDRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em04MC0yNGMwIDMyLjgtMTkuNyA2MS00OCA3My4zbDAgMjIuN2MwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIyLjdjLTI4LjMtMTIuMy00OC00MC41LTQ4LTczLjMgMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDMyLjgtMTkuNyA2MS00OCA3My4zbDAgMjIuN2MwIDYxLjktNTAuMSAxMTItMTEyIDExMmwtMzIgMCAwIDcwLjdjMjguMyAxMi4zIDQ4IDQwLjUgNDggNzMuMyAwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTMyLjggMTkuNy02MSA0OC03My4zbDAtNzAuNy0zMiAwQzk4LjEgMjg4IDQ4IDIzNy45IDQ4IDE3NmwwLTIyLjdDMTkuNyAxNDEgMCAxMTIuOCAwIDgwIDAgMzUuOCAzNS44IDAgODAgMHM4MCAzNS44IDgwIDgwem0yMDggMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4ek0yNDggNDMyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYUhvdXNlRmxhZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1mbGFnIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MGQiLCAiTTQ3MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDI4OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTQ0OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMjgzLjUgNTkuMWwxMDAuNSA5Ni45IDAgMzU2LTI1NiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE0NC0xOS45IDBjLTE1LjUgMC0yOC4xLTEyLjYtMjguMS0yOC4xIDAtNy42IDMuMS0xNC45IDguNi0yMC4yTDIyOC41IDU5LjFDMjM1LjkgNTIgMjQ1LjcgNDggMjU2IDQ4czIwLjEgNCAyNy41IDExLjF6TTIzMiAyNTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC00OCAweiJdCiAgICB9OwogICAgZmFCdWlsZGluZ0NvbHVtbnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctY29sdW1ucyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJiYW5rIiwgImluc3RpdHV0aW9uIiwgIm11c2V1bSIsICJ1bml2ZXJzaXR5Il0sICJmMTljIiwgIk0yNzEuOSAyMC4yYy05LjgtNS42LTIxLjktNS42LTMxLjggMGwtMjI0IDEyOGMtMTIuNiA3LjItMTguOCAyMi0xNS4xIDM2UzE3LjUgMjA4IDMyIDIwOGwzMiAwIDAgMjA4IDAgMC01MS4yIDM4LjRDNC43IDQ2MC40IDAgNDY5LjkgMCA0ODAgMCA0OTcuNyAxNC4zIDUxMiAzMiA1MTJsNDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzIgMC0xMC4xLTQuNy0xOS42LTEyLjgtMjUuNmwtNTEuMi0zOC40IDAtMjA4IDMyIDBjMTQuNSAwIDI3LjItOS44IDMwLjktMjMuOHMtMi41LTI4LjgtMTUuMS0zNmwtMjI0LTEyOHpNNDAwIDIwOGwwIDIwOC02NCAwIDAtMjA4IDY0IDB6bS0xMTIgMGwwIDIwOC02NCAwIDAtMjA4IDY0IDB6bS0xMTIgMGwwIDIwOC02NCAwIDAtMjA4IDY0IDB6TTI1NiA5NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUJhbmsgPSBmYUJ1aWxkaW5nQ29sdW1uczsKICAgIGZhSW5zdGl0dXRpb24gPSBmYUJ1aWxkaW5nQ29sdW1uczsKICAgIGZhTXVzZXVtID0gZmFCdWlsZGluZ0NvbHVtbnM7CiAgICBmYVVuaXZlcnNpdHkgPSBmYUJ1aWxkaW5nQ29sdW1uczsKICAgIGZhUnVnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJ1ZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTY5IiwgIk0yNCA2NGw1NiAwIDAgMzg0LTU2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOCAwIDAtNDAtOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDggMCAwLTMyLTggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC0zMi04IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOCAwIDAtNDAtOCAwQzEwLjcgMTEyIDAgMTAxLjMgMCA4OFMxMC43IDY0IDI0IDY0em0xMDQgMGwzMjAgMCAwIDM4NC0zMjAgMCAwLTM4NHpNNTc2IDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0bC04IDAgMCA0MCA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMCAwIDMyIDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOCAwIDAgMzIgOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04IDAgMCA0MCA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTU2IDAgMC0zODQgNTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhQ29kZU1lcmdlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvZGUtbWVyZ2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM4NyIsICJNODAgNTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0zMi40IDk3LjJjMjgtMTIuNCA0Ny42LTQwLjUgNDcuNi03My4yIDAtNDQuMi0zNS44LTgwLTgwLTgwUzAgMzUuOCAwIDgwYzAgMzIuOCAxOS43IDYxIDQ4IDczLjNsMCAyMDUuM0MxOS43IDM3MSAwIDM5OS4yIDAgNDMyIDAgNDc2LjIgMzUuOCA1MTIgODAgNTEyczgwLTM1LjggODAtODBjMC0zMi44LTE5LjctNjEtNDgtNzMuM2wwLTg2LjZjMjYuNyAyMC4xIDYwIDMyIDk2IDMybDg2LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4IDQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwYy0zMi44IDAtNjEgMTkuNy03My4zIDQ4TDIwOCAyNDBjLTQ5LjkgMC05MS0zOC4xLTk1LjYtODYuOHpNODAgNDA4YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMzQ0IDI3MmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFIb3VzZVRzdW5hbWkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtdHN1bmFtaSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTE1IiwgIk0yODggMTZDMTU1LjUgMTYgNDggMTIzLjUgNDggMjU2UzE1NS41IDQ5NiAyODggNDk2YzcuNCAwIDE5LjctMi4zIDMzLjctNy4zIDEzLjgtNC45IDI3LjEtMTEuNyAzNi43LTE4LjkgMzguNC0yOSA5MC41LTI5IDEyOSAwIDE1LjQgMTEuNiAzNS4zIDIxLjEgNTUgMjQuNCAxOS41IDMuMyAzNyAuNCA1MS4xLTEwLjIgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOSAyNS42LTQuNyAzMy42Yy0yNy4zIDIwLjUtNTkuMiAyNC04Ny45IDE5LjItMjguNS00LjgtNTUuNC0xOC03NS45LTMzLjQtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDAtMTQuNSAxMC45LTMyLjQgMTkuNy00OS41IDI1LjgtMTYuOCA2LTM0LjkgMTAuMS00OS45IDEwLjFsLS4xIDBDMTI4LjkgNTQzLjkgMCA0MTUgMCAyNTYgMCA5Ni45IDEyOC45LTMyIDI4OC0zMiAzMDEuMy0zMiAzMTItMjEuMyAzMTItOHMtMTAuNyAyNC0yNCAyNHptNDQuOCAxNjYuNGw5Ni03MmMxMS40LTguNSAyNy4xLTguNSAzOC41IDBsOTUuNSA3MmM4IDYgMTIuNyAxNS41IDEyLjcgMjUuNWwuMyAxMjEuNWMtMi4yIDEuMy00LjMgMi42LTYuNCA0LjItNC4zIDMuMS04LjcgLjgtMTMuMi0xLjVsLTEuMi0uNi0uNy0uM2MtNS40LTIuNy0xMS43LTYuNi0xOC45LTExLjctMjkuNS0yMS4xLTY0LjMtMzEuNi05OS4xLTMxLjQtMzQuMSAuMi02OC4xIDEwLjctOTcgMzEuNC03LjggNS42LTEzLjggOS4zLTE5LjMgMTEuMkwzMjAgMjA4YzAtMTAuMSA0LjctMTkuNiAxMi44LTI1LjZ6bTU0LjYgMjI5LjdjLTE0LjUgMTAuOS0zMi40IDE5LjctNDkuNSAyNS44LTE2LjggNi0zNC45IDEwLjEtNDkuOSAxMC4xLTEwNiAwLTE5Mi04Ni0xOTItMTkyUzE4MiA2NCAyODggNjRjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0czY0LjUgMTQ0IDE0NCAxNDRjNy40IDAgMTkuNy0yLjMgMzMuNy03LjMgMTMuOC00LjkgMjcuMS0xMS43IDM2LjctMTguOSAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTUuNCAxMS42IDM1LjMgMjEuMSA1NSAyNC40IDE5LjUgMy4zIDM3IC40IDUxLjEtMTAuMiAxMC42LTggMjUuNi01LjkgMzMuNiA0LjdzNS45IDI1LjYtNC43IDMzLjZjLTI3LjMgMjAuNS01OS4yIDI0LTg3LjkgMTkuMi0yOC41LTQuOC01NS40LTE4LTc1LjktMzMuNC0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMHoiXQogICAgfTsKICAgIGZhTWFnbmlmeWluZ0dsYXNzQ2hhcnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFnbmlmeWluZy1nbGFzcy1jaGFydCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTIyIiwgIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6bS0zMTIgOGwwIDY0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC02NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptODAtOTZsMCAxNjBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptODAgNjRsMCA5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtOTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6Il0KICAgIH07CiAgICBmYVVtYnJlbGxhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVtYnJlbGxhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwZTkiLCAiTTI1Ni0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDJjMTI2LjMgMTUuNyAyMjQgMTIzLjUgMjI0IDI1NCAwIDMuOC0uMSA3LjUtLjIgMTEuMy0uMyA2LjktNSAxMi44LTExLjcgMTQuN3MtMTMuOC0uNy0xNy42LTYuNWMtMTQuNC0yMS40LTM4LjgtMzUuNS02Ni41LTM1LjUtMjkuMyAwLTU0LjkgMTUuNy02OC45IDM5LjMtMi43IDQuNi03LjYgNy42LTEzIDcuOHMtMTAuNS0yLjItMTMuNy02LjVjLTE0LjYtMTkuOC0zOC0zMi42LTY0LjUtMzIuNnMtNDkuOSAxMi44LTY0LjUgMzIuNmMtMy4yIDQuMy04LjMgNi44LTEzLjcgNi41cy0xMC4yLTMuMi0xMy03LjhjLTE0LTIzLjYtMzkuNi0zOS4zLTY4LjktMzkuMy0yNy43IDAtNTIuMSAxNC4xLTY2LjUgMzUuNS0zLjkgNS43LTExIDguNC0xNy42IDYuNVMuNSAyNzQuMiAuMiAyNjcuM0MuMSAyNjMuNSAwIDI1OS44IDAgMjU2IDAgMTI1LjUgOTcuNyAxNy43IDIyNCAybDAtMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMzIgMzYwbDAgMTAyLjZjMCA0NS0zNi41IDgxLjQtODEuNCA4MS40LTMwLjggMC01OS0xNy40LTcyLjgtNDVsLTIuMy00LjdjLTcuOS0xNS44LTEuNS0zNSAxNC4zLTQyLjlzMzUtMS41IDQyLjkgMTQuM2wyLjMgNC43YzMgNS45IDkgOS42IDE1LjYgOS42IDkuNiAwIDE3LjQtNy44IDE3LjQtMTcuNEwyMjQgMzI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6Il0KICAgIH07CiAgICBmYUhpbGxSb2Nrc2xpZGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGlsbC1yb2Nrc2xpZGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUwOCIsICJNMjUyLjQgMTAzLjhsMjcgNDhjMi44IDUgOC4yIDguMiAxMy45IDguMmw1My4zIDBjNS44IDAgMTEuMS0zLjEgMTMuOS04LjJsMjctNDhjMi43LTQuOSAyLjctMTAuOCAwLTE1LjdsLTI3LTQ4Yy0yLjgtNS04LjItOC4yLTEzLjktOC4ybC01My4zIDBjLTUuOCAwLTExLjEgMy4xLTEzLjkgOC4ybC0yNyA0OGMtMi43IDQuOS0yLjcgMTAuOCAwIDE1Ljd6TTY4LjMgODdDNDMuMSA2MS44IDAgNzkuNyAwIDExNS4zTDAgNDMyYzAgNDQuMiAzNS44IDgwIDgwIDgwbDMxNi43IDBjMzUuNiAwIDUzLjUtNDMuMSAyOC4zLTY4LjNMNjguMyA4N3pNNTA0LjIgNDAzLjZjNC45IDIuNyAxMC44IDIuNyAxNS43IDBsNDgtMjdjNS0yLjggOC4yLTguMiA4LjItMTMuOWwwLTUzLjNjMC01LjgtMy4xLTExLjEtOC4yLTEzLjlsLTQ4LTI3Yy00LjktMi43LTEwLjgtMi43LTE1LjcgMGwtNDggMjdjLTUgMi44LTguMiA4LjItOC4yIDEzLjlsMCA1My4zYzAgNS44IDMuMSAxMS4xIDguMiAxMy45bDQ4IDI3ek0xOTIgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzg0IDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYVVzZXJTZWNyZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1zZWNyZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgzNzNdLCAiZjIxYiIsICJNMTcxLTE2Yy0zNi40IDAtNTcuOCA1OC4zLTY4LjMgMTEyTDcyIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCAzMmMwIDE3IDMuMyAzMy4yIDkuMyA0OGwtOS4zIDAgMCAwLTIwLjUgMGMtMTUuMiAwLTI3LjUgMTIuMy0yNy41IDI3LjUgMCAzIC41IDUuOSAxLjQgOC43bDI4LjkgODYuNkM0MC4yIDM3OS42IDE2IDQyOC4xIDE2IDQ4Mi4zIDE2IDQ5OC43IDI5LjMgNTEyIDQ1LjcgNTEybDM1Ni42IDBjMTYuNCAwIDI5LjctMTMuMyAyOS43LTI5LjcgMC01NC4yLTI0LjItMTAyLjctNjIuMy0xMzUuNGwyOC45LTg2LjZjLjktMi44IDEuNC01LjcgMS40LTguNyAwLTE1LjItMTIuMy0yNy41LTI3LjUtMjcuNWwtMjAuNSAwIDAgMC05LjMgMGM2LTE0LjggOS4zLTMxIDkuMy00OGwwLTMyIDI0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMwLjcgMGMtMTAuNC01My43LTMxLjktMTEyLTY4LjMtMTEyLTkuNiAwLTE5IDMuOS0yNy41IDguMi04LjIgNC4xLTE4LjQgNy44LTI1LjUgNy44cy0xNy4zLTMuNy0yNS41LTcuOEMxOTAtMTIuMSAxODAuNi0xNiAxNzEtMTZ6bTkzLjcgNDg0LjRsLTI0LjgtNzAuOSAyNy45LTMyLjVjMi43LTMuMiA0LjItNy4yIDQuMi0xMS40IDAtOS43LTcuOC0xNy41LTE3LjUtMTcuNWwtNjEgMGMtOS43IDAtMTcuNSA3LjgtMTcuNSAxNy41IDAgNC4yIDEuNSA4LjIgNC4yIDExLjRsMjcuOSAzMi41LTI0LjggNzAuOS01Ny0xODAuNCAzNS43IDBjMTguNCAxMC4yIDM5LjUgMTYgNjIgMTZzNDMuNi01LjggNjItMTZsMzUuNyAwLTU3IDE4MC40ek0yMjQgMjU2Yy0zNC43IDAtNjQuMi0yMi4xLTc1LjMtNTMgNS43IDMuMiAxMi4zIDUgMTkuMyA1bDEyLjQgMGMxNi41IDAgMzEuMS0xMC42IDM2LjMtMjYuMiAyLjMtNyAxMi4yLTcgMTQuNSAwIDUuMiAxNS42IDE5LjkgMjYuMiAzNi4zIDI2LjJsMTIuNCAwYzcgMCAxMy42LTEuOCAxOS4zLTUtMTEuMSAzMC45LTQwLjYgNTMtNzUuMyA1M3oiXQogICAgfTsKICAgIGZhUGFnZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFnZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMjNdLCAiZjgxNSIsICJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptNjQgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTg4IDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwem0xMjggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAweiJdCiAgICB9OwogICAgZmFCcmllZmNhc2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJpZWZjYXNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTg4XSwgImYwYjEiLCAiTTIwMCA0OGwxMTIgMGM0LjQgMCA4IDMuNiA4IDhsMCA0MC0xMjggMCAwLTQwYzAtNC40IDMuNi04IDgtOHptLTU2IDhsMCA0MC04MCAwQzI4LjcgOTYgMCAxMjQuNyAwIDE2MGwwIDk2IDUxMiAwIDAtOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTgwIDAgMC00MGMwLTMwLjktMjUuMS01Ni01Ni01NkwyMDAgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6TTUxMiAzMDRsLTE5MiAwIDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYtMTkyIDAgMCAxMTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xMTJ6Il0KICAgIH07CiAgICBmYVRyb3dlbEJyaWNrcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cm93ZWwtYnJpY2tzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1OGEiLCAiTTIyNCAzMmMwLTExLjUtNi4yLTIyLjItMTYuMi0yNy44cy0yMi4zLTUuNS0zMi4yIC40bC0xNjAgOTZDNS45IDEwNi4zIDAgMTE2LjggMCAxMjhzNS45IDIxLjcgMTUuNSAyNy40bDE2MCA5NmM5LjkgNS45IDIyLjIgNi4xIDMyLjIgLjRTMjI0IDIzNS41IDIyNCAyMjRsMC02NCAyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjU2IDAgMC02NHptOTYgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTE2MCAwek0wIDQxNmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTIyNC0zMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0yNTYgMHoiXQogICAgfTsKICAgIGZhU29ja3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic29ja3MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MTBdLCAiZjY5NiIsICJNMjUyLjggMEwxNzYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNiAxMTIgMCAwLTE2YzAtMTcuNSA0LjctMzMuOSAxMi44LTQ4ek0xMjggMTEybDAgMTI4YzAgMjAuMS05LjUgMzkuMS0yNS42IDUxLjJsLTY0IDQ4Yy0yNC4yIDE4LjEtMzguNCA0Ni42LTM4LjQgNzYuOCAwIDUzIDQzIDk2IDk2IDk2IDE1LjQgMCAzMC41LTMuNyA0NC0xMC43LTE3LjYtMjMuOS0yOC01My40LTI4LTg1LjMgMC00NS4zIDIxLjMtODggNTcuNi0xMTUuMmw2NC00OGM0LTMgNi40LTcuOCA2LjQtMTIuOGwwLTEyOC0xMTIgMHptMTYwIDBsMCAxMjhjMCAyMC4xLTkuNSAzOS4xLTI1LjYgNTEuMmwtNjQgNDhjLTI0LjIgMTguMS0zOC40IDQ2LjYtMzguNCA3Ni44IDAgNTMgNDMgOTYgOTYgOTYgMjAuOCAwIDQxLTYuNyA1Ny42LTE5LjJsMTE1LjItODYuNEM0NjEgMzgyLjIgNDgwIDM0NC4zIDQ4MCAzMDRsMC0xOTItMTkyIDB6TTQ4MCA2NGwwLTE2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDMzNiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE2IDE5MiAweiJdCiAgICB9OwogICAgZmFUID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMTZdLCAiNTQiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5NmwxMjggMCAwIDM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzUyIDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyeiJdCiAgICB9OwogICAgZmFNaWNyb2NoaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWljcm9jaGlwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyZGIiLCAiTTE3NiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwIDAgNTYtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwIDAgNTYtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwYzAgMzUuMyAyOC43IDY0IDY0IDY0bDAgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwIDU2IDAgMCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDAgNTYgMCAwIDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MGMzNS4zIDAgNjQtMjguNyA2NC02NGw0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00MCAwIDAtNTYgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDAgMCAwLTU2IDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQwIDBjMC0zNS4zLTI4LjctNjQtNjQtNjRsMC00MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwLTU2IDAgMC00MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwLTU2IDAgMC00MHpNMTYwIDEyOGwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xNiA0OGwwIDE2MCAxNjAgMCAwLTE2MC0xNjAgMHoiXQogICAgfTsKICAgIGZhVHJ1Y2tNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLW1lZGljYWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg2NTcsICJhbWJ1bGFuY2UiXSwgImYwZjkiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMy4zIDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NHM3NC4yLTI3LjEgODQuNy02NGwxMDIuNiAwYzEwLjQgMzYuOSA0NC40IDY0IDg0LjcgNjRzNzQuMi0yNy4xIDg0LjctNjRsMy4zIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNDYuN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0w1MTIgMTQ2LjdjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdsLTUwLjcgMCAwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek01MTIgMjM3LjNsMCA1MC43LTk2IDAgMC05NiA1MC43IDAgNDUuMyA0NS4zek0xNTIgMzg0YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHptMjMyIDQwYTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTE3NiAxMzZjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQwIDAgMCA0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDB6Il0KICAgIH07CiAgICBmYUFtYnVsYW5jZSA9IGZhVHJ1Y2tNZWRpY2FsOwogICAgZmFPbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJvbSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODMyOV0sICJmNjc5IiwgIk0zODguNyA0LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBsMTYgMTZjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTE2IDE2Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtMTYtMTZjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42bDE2LTE2ek0xNzYgMTYwYy0xMC44IDAtMjAuOCAzLjYtMjguOCA5LjYtMTQuMSAxMC42LTM0LjIgNy44LTQ0LjgtNi40cy03LjgtMzQuMiA2LjQtNDQuOGMxOC43LTE0LjEgNDItMjIuNCA2Ny4yLTIyLjQgNjEuOSAwIDExMiA1MC4xIDExMiAxMTIgMCAxNy4yLTMuOSAzMy41LTEwLjggNDhsNDkuNyAwYzEyLjcgMCAyNC45LTUgMzMuOS0xNC4xbDIwLjctMjAuN2MxOC43LTE4LjcgNDQuMS0yOS4zIDcwLjYtMjkuMyA1NS4yIDAgOTkuOSA0NC43IDk5LjkgOTkuOWwwIDk2LjFjMCA1NS4yLTQ0LjggMTAwLTEwMCAxMDBTMzUyIDQ0My4yIDM1MiAzODhsMC00YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA0YzAgMTkuOSAxNi4xIDM2IDM2IDM2czM2LTE2LjEgMzYtMzZsMC05Ni4xYzAtMTkuOC0xNi4xLTM1LjktMzUuOS0zNS45LTkuNSAwLTE4LjYgMy44LTI1LjQgMTAuNWwtMjAuNyAyMC43Yy0yMSAyMS00OS40IDMyLjgtNzkuMSAzMi44bC0yNi44IDBjMTIuNiAxOS42IDE5LjkgNDIuOCAxOS45IDY4IDAgNzUuMi02NSAxMzItMTQwIDEzMlM0MCA0NjMuMiA0MCAzODhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmMwIDM1LjMgMzEuNyA2OCA3NiA2OHM3Ni0zMi43IDc2LTY4LTMxLjctNjgtNzYtNjhsLTIwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OHpNMzM3LjEgNjAuMWMtMTEtMTMuOC0zMS4xLTE2LjItNDUtNS4ycy0xNi4yIDMxLjEtNS4yIDQ1QzMxMi42IDEzMi4yIDM1NC40IDE1MiA0MDAgMTUyczg3LjQtMTkuOCAxMTMuMS01Mi4xYzExLTEzLjggOC43LTM0LTUuMi00NXMtMzQtOC43LTQ1IDUuMkM0NTAuMyA3NiA0MjcuNSA4OCA0MDAgODhzLTUwLjMtMTItNjIuOS0yNy45eiJdCiAgICB9OwogICAgZmFNb3NxdWl0b05ldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb3NxdWl0by1uZXQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUyYyIsICJNNTc2IDM1MmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE2IDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDAgMCA0OCAxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwIDAgMTYtLjEgMi41QzU5OC42IDU2Ni42IDU4OC40IDU3NiA1NzYgNTc2cy0yMi42LTkuNC0yMy45LTIxLjVsLS4xLTIuNSAwLTE2LTQ4IDAgMCAxNi0uMSAyLjVDNTAyLjYgNTY2LjYgNDkyLjQgNTc2IDQ4MCA1NzZzLTIyLjYtOS40LTIzLjktMjEuNWwtLjEtMi41IDAtMTYtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNiAwIDAtNDgtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNiAwIDAtMTZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDE2IDQ4IDAgMC0xNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNDI5LjkgMTYuM2M3LjctOS40IDIxLjMtMTEuNSAzMS40LTQuMyAxMC4xIDcuMSAxMy4xIDIwLjkgNy40IDMxLjdsLTEuMyAyLjEtMjUuOSAzOC45IDEzLjMgNTMuNGMyIDgtLjEgMTYuMy01LjMgMjIuM2wtMi40IDIuNC00NC43IDM4LjMgMTMwLjUgMTQuNWM0Mi44IDQuOCA3NS4xIDQwLjkgNzUuMSA4My45IDAgMy45LS40IDcuNy0uOSAxMS41LTcuMy0zLjUtMTUuMy01LjgtMjMuOC02LjdMNTc2IDMwNGMtMTguNSAwLTM1LjMgNy00OCAxOC40LTExLTkuOS0yNS4xLTE2LjUtNDAuNi0xOC4xTDQ4MCAzMDRjLTMwLjMgMC01Ni4xIDE4LjctNjYuOCA0NS4yLTEyLjUgNS0yMy4yIDEzLjQtMzEuMSAyNGwtMzAuMi00MC4xIDAgNzQuN2MwIDE3LjctMTQuMyAzMi0zMiAzMi0xNi42IDAtMzAuMi0xMi42LTMxLjgtMjguN2wtLjItMy4zIDAtNzQuNi0zMi4zIDQzIDAgMzkuOGMwIDMuNS0uNyA2LjktMi4xIDEwLjFsLTEuNiAzLjEtNDAgNjQtMS40IDJjLTcuNSA5LjYtMjEgMTIuMS0zMS4zIDUuMy0xMC4zLTYuOC0xMy43LTIwLjUtOC4zLTMxLjVsMS4yLTIuMiAzNi4yLTU4IDAtNDEgLjMtNGMuNi0zLjkgMi4yLTcuNyA0LjYtMTAuOWwzOS4zLTUyLjItNjYuMiA1OS41Yy0xNyAxNS4zLTM5IDIzLjctNjEuOSAyMy44bC04LjEgMGMtNDYuNiAwLTg0LjQtMzcuOC04NC40LTg0LjQgMC00MyAzMi40LTc5LjIgNzUuMS04My45bDEzMC41LTE0LjUtNDQuNy0zOC4zLTIuNC0yLjRjLTUuMi02LTcuMy0xNC40LTUuMy0yMi4zbDEzLjMtNTMuNC0yNS45LTM4LjktMS4yLTIuMWMtNS43LTEwLjgtMi43LTI0LjYgNy40LTMxLjcgMTAuMS03LjEgMjMuNy01LjEgMzEuNCA0LjNsMS41IDIgMzIgNDggMS40IDIuMmMyLjggNS4zIDMuNSAxMS42IDIuMSAxNy42bC0xMi4zIDQ5LjIgNTMuMyA0NS43IDAtMjguOCAuMi0zLjJjMS4xLTEwLjQgNy4yLTE5LjQgMTUuOC0yNC40bDAtNjAuNSAuMy0zLjJjMS41LTcuMyA4LTEyLjcgMTUuNy0xMi44IDcuNyAwIDE0LjIgNS41IDE1LjcgMTIuOGwuMyAzLjIgMCA2MC41YzguNyA1IDE0LjggMTQgMTUuOCAyNC40bC4yIDMuMiAwIDI4LjkgNTMuNC00NS43LTEyLjMtNDkuMmMtMS41LTUuOS0uNy0xMi4yIDIuMS0xNy42bDEuNC0yLjIgMzItNDggMS41LTJ6TTUwNCA0ODhsNDggMCAwLTQ4LTQ4IDAgMCA0OHoiXQogICAgfTsKICAgIGZhUHJlc2NyaXB0aW9uQm90dGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInByZXNjcmlwdGlvbi1ib3R0bGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjQ4NSIsICJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBMMzUyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0TDAgMzJ6TTMyIDE0NGwzMjAgMCAwIDMwNGMwIDM1LjMtMjguNyA2NC02NCA2NEw5NiA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTcyIDAgMC00OCA3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC03MiAwIDAtNDggNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNzIgMCAwLTY0eiJdCiAgICB9OwogICAgZmFVc2Vyc0dlYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlcnMtZ2VhciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJ1c2Vycy1jb2ciXSwgImY1MDkiLCAiTTMyMCAyMjRhMTA0IDEwNCAwIDEgMCAwLTIwOCAxMDQgMTA0IDAgMSAwIDAgMjA4ek05NiAyMzJhNzIgNzIgMCAxIDAgMC0xNDQgNzIgNzIgMCAxIDAgMCAxNDR6TTAgNDE2bDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsODYuNyAwYy00LjMtOS44LTYuNy0yMC42LTYuNy0zMmwwLTE2YzAtNTMuMiAyMC0xMDEuOCA1Mi45LTEzOC42LTExLjctMy41LTI0LjEtNS40LTM2LjktNS40LTcwLjcgMC0xMjggNTcuMy0xMjggMTI4ek02MTYgMTYwYTcyIDcyIDAgMSAwIC0xNDQgMCA3MiA3MiAwIDEgMCAxNDQgMHpNMTYwIDQzMmwwIDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE1Ni44IDBjLTcuMS0yMS42LTYuMy00NC40IDEwLjctNjQtMTQtMTYuMi0yMC41LTM5LjctMTEuNC02My4zIDYuNi0xNy4xIDE1LjktMzMuMSAyNy40LTQ3LjMgNS40LTYuNiAxMS42LTExLjcgMTguMy0xNS40LTIyLjEtMTEuNS00Ny4yLTE4LTczLjgtMTgtODguNCAwLTE2MCA3MS42LTE2MCAxNjB6bTQ2NC42LTQ0LjFjNi4zLTMuNiA5LjUtMTEuMSA2LjgtMTgtNC44LTEyLjQtMTEuNS0yNC4xLTE5LjktMzQuNC00LjYtNS43LTEyLjctNi43LTE5LTMtMjEuOCAxMi42LTQ4LjYtMi44LTQ4LjYtMjguMSAwLTcuMy00LjktMTMuOC0xMi4xLTE0LjktMTIuOS0yLTI2LjgtMi0zOS43IDAtNy4yIDEuMS0xMi4xIDcuNi0xMi4xIDE0LjkgMCAyNS4yLTI2LjggNDAuNy00OC42IDI4LjEtNi4zLTMuNi0xNC40LTIuNi0xOSAzLTguNCAxMC4zLTE1LjEgMjItMTkuOSAzNC40LTIuNiA2LjggLjUgMTQuMyA2LjggMTcuOSAyMS45IDEyLjYgMjEuOSA0My41IDAgNTYuMi02LjMgMy42LTkuNSAxMS4xLTYuOCAxNy45IDQuOCAxMi40IDExLjUgMjQuMSAxOS45IDM0LjQgNC42IDUuNyAxMi43IDYuNyAxOSAzIDIxLjgtMTIuNiA0OC42IDIuOSA0OC42IDI4LjEgMCA3LjMgNC45IDEzLjggMTIuMSAxNC45IDEyLjkgMiAyNi44IDIgMzkuNyAwIDcuMi0xLjEgMTIuMS03LjYgMTIuMS0xNC45IDAtMjUuMiAyNi44LTQwLjcgNDguNi0yOC4xIDYuMyAzLjYgMTQuNCAyLjYgMTktMyA4LjQtMTAuMyAxNS4xLTIyIDE5LjktMzQuNCAyLjYtNi44LS41LTE0LjMtNi44LTE3LjktMjEuOS0xMi42LTIxLjktNDMuNSAwLTU2LjJ6TTQ3MiA0MTZhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHoiXQogICAgfTsKICAgIGZhVXNlcnNDb2cgPSBmYVVzZXJzR2VhcjsKICAgIGZhUm9hZENpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvYWQtY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NjUiLCAiTTI4OCAzMmwtNzYuMyAwYy0yOS40IDAtNTUuMSAyMC4xLTYyLjEgNDguNkw2NS40IDQyMC41QzU3LjkgNDUwLjcgODAuOCA0ODAgMTEyIDQ4MGwyMDkuNCAwYy0xMS4yLTI0LjQtMTcuNC01MS40LTE3LjQtODAgMC0yOC42IDYuMi01NS43IDE3LjQtODAtLjUgMC0xIDAtMS41IDAtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNDljMzUuMi0zOS45IDg2LjctNjUgMTQ0LTY1IDkgMCAxNy44IC42IDI2LjUgMS44bC0zMi0xMjkuMkM0ODMuNCA1Mi4xIDQ1Ny44IDMyIDQyOC4zIDMybC03Ni40IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0ek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC0xMDBhMjAgMjAgMCAxIDEgMCA0MCAyMCAyMCAwIDEgMSAwLTQwem0wLTE0MGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhUGF1c2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGF1c2UiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5MjA4XSwgImYwNGMiLCAiTTQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1MmMwLTI2LjUtMjEuNS00OC00OC00OEw0OCAzMnptMjI0IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMzUyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDB6Il0KICAgIH07CiAgICBmYVN0YWZmU25ha2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3RhZmYtc25ha2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsicm9kLWFzY2xlcGl1cyIsICJyb2Qtc25ha2UiLCAic3RhZmYtYWVzY3VsYXBpdXMiXSwgImU1NzkiLCAiTTE5MiAzMmwwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiA2NCAwYzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2bC0xNiAwIDAtNjQgMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwIDE5MiAzMiAwYzUzIDAgOTYgNDMgOTYgOTYgMCA0Ny42LTM0LjYgODcuMS04MCA5NC43bDAtNjdjOS42LTUuNSAxNi0xNS45IDE2LTI3LjcgMC0xNy43LTE0LjMtMzItMzItMzJsLTMyIDAgMCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC02NC0zMiAwYy01MyAwLTk2LTQzLTk2LTk2IDAtNDcuNiAzNC42LTg3LjEgODAtOTQuN2wwIDY3Yy05LjYgNS41LTE2IDE1LjktMTYgMjcuNyAwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwIDAtMTkyLTcyLjYgMGMtMTEuMSAxOS4xLTMxLjcgMzItNTUuNCAzMmwtMTYgMEMyMS41IDEyOCAwIDEwNi41IDAgODBTMjEuNSAzMiA0OCAzMmwxNDQgMHoiXQogICAgfTsKICAgIGZhUm9kQXNjbGVwaXVzID0gZmFTdGFmZlNuYWtlOwogICAgZmFSb2RTbmFrZSA9IGZhU3RhZmZTbmFrZTsKICAgIGZhU3RhZmZBZXNjdWxhcGl1cyA9IGZhU3RhZmZTbmFrZTsKICAgIGZhUGlnZ3lCYW5rID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBpZ2d5LWJhbmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRkMyIsICJNMjg4LTMyYTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyek00OCAzMDRjMC03MC4xIDQ3LTEzMS40IDExNy4xLTE2NC45IDI1LjMgNDEuMyA3MC45IDY4LjkgMTIyLjkgNjguOSA1NS43IDAgMTA0LjEtMzEuNyAxMjgtNzggMTUuOC0xMS4zIDM1LjEtMTggNTYtMThsMTkuNSAwYzEwLjQgMCAxOCA5LjggMTUuNSAxOS45bC0xNy4xIDY4LjNjOS45IDEyLjQgMTguMiAyNS43IDI0LjQgMzkuOGwyMS43IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxMTJjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQwIDBjLTE2LjUgMjItMzguNSAzOS42LTY0IDUwLjdsMCAyOS4zYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMyAwYy0xNC4zIDAtMjYuOC05LjUtMzAuOC0yMy4ybC03LjEtMjQuOC04Mi4zIDAtNy4xIDI0LjhDMjM1LjggNTAyLjUgMjIzLjMgNTEyIDIwOSA1MTJsLTMzIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjkuM0M4Ny41IDQyNiA0OCAzNjkuNiA0OCAzMDR6bTM3NiAxNmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il0KICAgIH07CiAgICBmYU1vbnVtZW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vbnVtZW50IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1YTYiLCAiTTIwOS0zM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMOTUgNDdjLTQuMSA0LjEtNi41IDkuNC03IDE1LjFMNTguNCA0NDggNDggNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMC40IDAtMjkuNy0zODUuOGMtLjQtNS43LTIuOS0xMS4xLTctMTUuMUwyMDktMzN6TTEyOCAyOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYUFuZ2xlc1JpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlcy1yaWdodCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzE4NywgImFuZ2xlLWRvdWJsZS1yaWdodCJdLCAiZjEwMSIsICJNNDM5LjEgMjc4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDM3MS4yIDI1NiAyMzMuOSAzOTMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwem0tMzUyIDE2MGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0wxNzkuMiAyNTYgNDEuOSAzOTMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMHoiXQogICAgfTsKICAgIGZhQW5nbGVEb3VibGVSaWdodCA9IGZhQW5nbGVzUmlnaHQ7CiAgICBmYURlc2t0b3AgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGVza3RvcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQyMSwgNjE3MDQsICJkZXNrdG9wLWFsdCJdLCAiZjM5MCIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNDQgMC0xNiA0OC03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC03MiAwLTE2LTQ4IDE0NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek05NiA5NmwzMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMkw5NiAzMjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFEZXNrdG9wQWx0ID0gZmFEZXNrdG9wOwogICAgZmFQbGFuZUNpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYW5lLWNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTU3IiwgIk0yMzIgMjRjMC0zMC45IDI1LjEtNTYgNTYtNTZzNTYgMjUuMSA1NiA1NmwwIDEyNy4zIDc4IDcxLjVjLTY5LjMgMjktMTE4IDk3LjQtMTE4IDE3Ny4yIDAgNDkuMyAxOC42IDk0LjMgNDkuMSAxMjguM0wyODggNTEyIDE3OS45IDUzOWMtMTAuMSAyLjUtMTkuOS01LjEtMTkuOS0xNS41bDAtMTkuOGMwLTQuOSAyLjItOS41IDYtMTIuNWw2Ni01Mi44IDAtOTkuNy0xNjIuOSA1NC4zQzU4LjcgMzk2LjQgNDggMzg4LjcgNDggMzc3LjhsMC00My43YzAtOSAzLjgtMTcuNSAxMC40LTIzLjZMMjMyIDE1MS4zIDIzMiAyNHpNNDk2IDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTU5LjMgMTA3LjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMGwtMzYuNyAzNi43LTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmwzNi43IDM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzYuNy0zNi43IDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTM2LjctMzYuNyAzNi43LTM2Ljd6Il0KICAgIH07CiAgICBmYVJldHdlZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmV0d2VldCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMDc5IiwgIk0xMTguNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45UzE5LjEgMTYwIDMyIDE2MGwzMiAwIDAgMjI0YzAgNTMgNDMgOTYgOTYgOTZsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTIyNCAzMiAwYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTY0LTY0ek00NTcuNCA0NzAuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw2NC02NGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM1NTYuOSAzNTIgNTQ0IDM1MmwtMzIgMCAwLTIyNGMwLTUzLTQzLTk2LTk2LTk2TDI4OCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDIyNC0zMiAwYy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44cy0yLjIgMjUuNyA2LjkgMzQuOWw2NCA2NHoiXQogICAgfTsKICAgIGZhVXNlckdlYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1nZWFyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbInVzZXItY29nIl0sICJmNGZlIiwgIk0yNTYuNSA4YTEyMCAxMjAgMCAxIDEgMCAyNDAgMTIwIDEyMCAwIDEgMSAwLTI0MHpNMjI2LjcgMzA0bDU5LjQgMCAxLjUgMGMtMTIuOSAyNi44LTcuOCA1OC4yIDExLjUgNzkuNS0yMC4yIDIyLjMtMjQuOCA1NS44LTkuNCA4My40bDIyLjUgNDAuNGMuOSAxLjYgMS45IDMuMiAyLjkgNC43bC0yMzcgMGMtMTYuNCAwLTI5LjctMTMuMy0yOS43LTI5LjcgMC05OC41IDc5LjgtMTc4LjMgMTc4LjMtMTc4LjN6bTIwNS45LTU2LjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDYuMWMwIDE4LjkgMjQuMSAzMi44IDQwLjUgMjMuNGw1LTIuOWMxMS42LTYuNyAyNi41LTIuNiAzMyA5LjFsMjIuNCA0MC4yYzYuMiAxMS4yIDIuNiAyNS4yLTguMiAzMmwtNC43IDIuOWMtMTYuMiAxMC4xLTE2LjIgMzkuOSAwIDUwLjFsNC42IDIuOWMxMC44IDYuOCAxNC41IDIwLjggOC4zIDMyTDYwNyA0ODMuOGMtNi41IDExLjctMjEuNCAxNS45LTMzIDkuMWwtNC45LTIuOWMtMTYuNC05LjUtNDAuNSA0LjUtNDAuNSAyMy40bDAgNi4xYzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTUuOWMwLTE5LTI0LjItMzMtNDAuNy0yMy41bC00LjggMi44Yy0xMS42IDYuNy0yNi40IDIuNi0zMy05LjFsLTIyLjYtNDAuNGMtNi4yLTExLjItMi42LTI1LjMgOC4zLTMyLjFsNC40LTIuN2MxNi4zLTEwLjEgMTYuMy00MC4xIDAtNTAuMmwtNC41LTIuOGMtMTAuOS02LjgtMTQuNS0yMC45LTguMy0zMi4xbDIyLjUtNDAuM2M2LjUtMTEuNyAyMS40LTE1LjggMzIuOS05LjFsNC44IDIuOGMxNi41IDkuNSA0MC43LTQuNSA0MC43LTIzLjVsMC01Ljl6bTk5LjkgMTM2LjJhNTIgNTIgMCAxIDAgLTEwNCAwIDUyIDUyIDAgMSAwIDEwNCAweiJdCiAgICB9OwogICAgZmFVc2VyQ29nID0gZmFVc2VyR2VhcjsKICAgIGZhQm9yZGVyQWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvcmRlci1hbGwiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjg0YyIsICJNMzg0IDk2bDAgMTI4LTEyOCAwIDAtMTI4IDEyOCAwem0wIDE5MmwwIDEyOC0xMjggMCAwLTEyOCAxMjggMHpNMTkyIDIyNGwtMTI4IDAgMC0xMjggMTI4IDAgMCAxMjh6TTY0IDI4OGwxMjggMCAwIDEyOC0xMjggMCAwLTEyOHpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnoiXQogICAgfTsKICAgIGZhQ29pbnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29pbnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUxZSIsICJNMTI4IDk2bDAtMTZjMC00NC4yIDg2LTgwIDE5Mi04MFM1MTIgMzUuOCA1MTIgODBsMCAxNmMwIDMwLjYtNDEuMyA1Ny4yLTEwMiA3MC43LTIuNC0yLjgtNC45LTUuNS03LjQtOC0xNS41LTE1LjMtMzUuNS0yNi45LTU2LjQtMzUuNS00MS45LTE3LjUtOTYuNS0yNy4xLTE1NC4yLTI3LjEtMjEuOSAwLTQzLjMgMS40LTYzLjggNC4xLS4yLTEuMy0uMi0yLjctLjItNC4xek00MzIgMzUzbDAtNDYuMmMxNS4xLTMuOSAyOS4zLTguNSA0Mi4yLTEzLjkgMTMuMi01LjUgMjYuMS0xMi4yIDM3LjgtMjAuM2wwIDE1LjRjMCAyNi44LTMxLjUgNTAuNS04MCA2NXptMC05NmwwLTMzYzAtNC41LS40LTguOC0xLTEzIDE1LjUtMy45IDMwLTguNiA0My4yLTE0LjJzMjYuMS0xMi4yIDM3LjgtMjAuM2wwIDE1LjRjMCAyNi44LTMxLjUgNTAuNS04MCA2NXpNMCAyNDBsMC0xNmMwLTQ0LjIgODYtODAgMTkyLTgwczE5MiAzNS44IDE5MiA4MGwwIDE2YzAgNDQuMi04NiA4MC0xOTIgODBTMCAyODQuMiAwIDI0MHptMzg0IDk2YzAgNDQuMi04NiA4MC0xOTIgODBTMCAzODAuMiAwIDMzNmwwLTE1LjRjMTEuNiA4LjEgMjQuNSAxNC43IDM3LjggMjAuMyA0MS45IDE3LjUgOTYuNSAyNy4xIDE1NC4yIDI3LjFzMTEyLjMtOS43IDE1NC4yLTI3LjFjMTMuMi01LjUgMjYuMS0xMi4yIDM3LjgtMjAuM2wwIDE1LjR6bTAgODAuNmwwIDE1LjRjMCA0NC4yLTg2IDgwLTE5MiA4MFMwIDQ3Ni4yIDAgNDMybDAtMTUuNGMxMS42IDguMSAyNC41IDE0LjcgMzcuOCAyMC4zIDQxLjkgMTcuNSA5Ni41IDI3LjEgMTU0LjIgMjcuMXMxMTIuMy05LjcgMTU0LjItMjcuMWMxMy4yLTUuNSAyNi4xLTEyLjIgMzcuOC0yMC4zeiJdCiAgICB9OwogICAgZmFNYXJzU3Ryb2tlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnMtc3Ryb2tlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTg5NF0sICJmMjI5IiwgIk00MTYtMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTAuNyAwLTU4LjcgNTguNy0xNy40LTE3LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE3LjQgMTcuNC0yMyAyM2MtMjguNC0xOS41LTYyLjctMzEtOTkuOC0zMS05Ny4yIDAtMTc2IDc4LjgtMTc2IDE3NnM3OC44IDE3NiAxNzYgMTc2IDE3Ni03OC44IDE3Ni0xNzZjMC0zNy0xMS40LTcxLjQtMzEtOTkuOGwyMy0yMyAxNy40IDE3LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w0NTMuMyAxMzYgNTEyIDc3LjMgNTEyIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyTDU3NiAwYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDQxNi0zMnpNMTI4IDMwNGExMTIgMTEyIDAgMSAxIDIyNCAwIDExMiAxMTIgMCAxIDEgLTIyNCAweiJdCiAgICB9OwogICAgZmFIYW5kc2hha2VBbmdsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kc2hha2UtYW5nbGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiaGFuZHMtaGVscGluZyJdLCAiZjRjNCIsICJNMjY4LjkgNTMuMkwxNTIuMyAxODIuOGMtNC42IDUuMS00LjQgMTMgLjUgMTcuOSAzMC41IDMwLjUgODAgMzAuNSAxMTAuNSAwbDMxLjgtMzEuOGM0LjItNC4yIDkuNS02LjUgMTQuOS02LjkgNi44LS42IDEzLjggMS43IDE5IDYuOUw1MDUuNiAzNDQgNTc2IDI4OCA1NzYgMCA0NjQgNjQgNDQwLjIgNDguMUM0MjQuNCAzNy42IDQwNS45IDMyIDM4Ni45IDMybC03MC40IDBjLTEuMSAwLTIuMyAwLTMuNCAuMS0xNi45IC45LTMyLjggOC41LTQ0LjIgMjEuMXpNMTE2LjYgMTUwLjdMMjIzLjQgMzIgMTgzLjggMzJjLTI1LjUgMC00OS45IDEwLjEtNjcuOSAyOC4xTDAgMTkyIDAgNTQ0IDE0NCA0MDggMTU2LjQgNDE4LjNjMjMgMTkuMiA1MiAyOS43IDgxLjkgMjkuN2wxNS43IDAtNy03Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNDEgNDEgOSAwYzE5LjEgMCAzNy44LTQuMyA1NC44LTEyLjNMMzU5IDQwOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDMyIDMyIDE3LjUtMTcuNWM4LjktOC45IDExLjUtMjEuOCA3LjYtMzMuMWwtMTM3LjktMTM2LjgtMTQuOSAxNC45Yy00OS4zIDQ5LjMtMTI5LjEgNDkuMy0xNzguNCAwLTIzLTIzLTIzLjktNTkuOS0yLjItODR6Il0KICAgIH07CiAgICBmYUhhbmRzSGVscGluZyA9IGZhSGFuZHNoYWtlQW5nbGU7CiAgICBmYUFycm93RG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbODU5NV0sICJmMDYzIiwgIk0xNjkuNCA1MDIuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCA0MDIuNyAyMjQgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzNzAuNy0xMDUuNC0xMDUuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MHoiXQogICAgfTsKICAgIGZhTG9jYXRpb25Eb3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibG9jYXRpb24tZG90IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbIm1hcC1tYXJrZXItYWx0Il0sICJmM2M1IiwgIk0wIDE4OC42QzAgODQuNCA4NiAwIDE5MiAwUzM4NCA4NC40IDM4NCAxODguNmMwIDExOS4zLTEyMC4yIDI2Mi4zLTE3MC40IDMxNi44LTExLjggMTIuOC0zMS41IDEyLjgtNDMuMyAwLTUwLjItNTQuNS0xNzAuNC0xOTcuNS0xNzAuNC0zMTYuOHpNMTkyIDI1NmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHoiXQogICAgfTsKICAgIGZhTWFwTWFya2VyQWx0ID0gZmFMb2NhdGlvbkRvdDsKICAgIGZhUGx1Z0NpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsdWctY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NWQiLCAiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNDk2IDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTAgMjI4YTIwIDIwIDAgMSAwIDAtNDAgMjAgMjAgMCAxIDAgMCA0MHptMC0xODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDgwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC04MGMwLTguOC03LjItMTYtMTYtMTZ6Il0KICAgIH07CiAgICBmYUNvb2tpZUJpdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29va2llLWJpdGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjU2NCIsICJNMjU3LjUgMjcuNmMtLjgtNS40LTQuOS05LjgtMTAuMy0xMC42LTIyLjEtMy4xLTQ0LjYgLjktNjQuNCAxMS40bC03NCAzOS41Qzg5LjEgNzguNCA3My4yIDk0LjkgNjMuNCAxMTVMMjYuNyAxOTAuNmMtOS44IDIwLjEtMTMgNDIuOS05LjEgNjQuOWwxNC41IDgyLjhjMy45IDIyLjEgMTQuNiA0Mi4zIDMwLjcgNTcuOWw2MC4zIDU4LjRjMTYuMSAxNS42IDM2LjYgMjUuNiA1OC43IDI4LjdsODMgMTEuN2MyMi4xIDMuMSA0NC42LS45IDY0LjQtMTEuNGw3NC0zOS41YzE5LjctMTAuNSAzNS42LTI3IDQ1LjQtNDcuMmwzNi43LTc1LjVjOS44LTIwLjEgMTMtNDIuOSA5LjEtNjQuOS0uOS01LjMtNS4zLTkuMy0xMC42LTEwLjEtNTEuNS04LjItOTIuOC00Ny4xLTEwNC41LTk3LjQtMS44LTcuNi04LTEzLjQtMTUuNy0xNC42LTU0LjYtOC43LTk3LjctNTItMTA2LjItMTA2Ljh6TTIwOCAxNDRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0xNDQgMzM2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTIyNC02NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVNjcmV3ZHJpdmVyV3JlbmNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjcmV3ZHJpdmVyLXdyZW5jaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ0b29scyJdLCAiZjdkOSIsICJNNzAuOC02LjdjNS40LTUuNCAxMy44LTYuMiAyMC4yLTJMMjA5LjkgNzAuNWM4LjkgNS45IDE0LjIgMTUuOSAxNC4yIDI2LjZsMCA0OS42IDkwLjggOTAuOGMzMy4zLTE1IDczLjktOC45IDEwMS4yIDE4LjVMNTQyLjIgMzgyLjFjMTguNyAxOC43IDE4LjcgNDkuMSAwIDY3LjlsLTYwLjEgNjAuMWMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBMMjg4LjEgMzg0Yy0yNy40LTI3LjQtMzMuNS02Ny45LTE4LjUtMTAxLjJsLTkwLjgtOTAuOC00OS42IDBjLTEwLjcgMC0yMC43LTUuMy0yNi42LTE0LjJMMjMuNCA1OC45Yy00LjItNi4zLTMuNC0xNC44IDItMjAuMkw3MC44LTYuN3ptMTQ1IDMwMy41Yy02LjMgMzYuOSAyLjMgNzUuOSAyNi4yIDEwNy4ybC05NC45IDk1Yy0yOC4xIDI4LjEtNzMuNyAyOC4xLTEwMS44IDBzLTI4LjEtNzMuNyAwLTEwMS44bDEzNS40LTEzNS41IDM1LjIgMzUuMXpNMzg0LjEgMGMyMC4xIDAgMzkuNCAzLjcgNTcuMSAxMC41IDEwIDMuOCAxMS44IDE2LjUgNC4zIDI0LjFMMzg4LjggOTEuM2MtMyAzLTQuNyA3LjEtNC43IDExLjNsMCA0MS40YzAgOC44IDcuMiAxNiAxNiAxNmw0MS40IDBjNC4yIDAgOC4zLTEuNyAxMS4zLTQuN2w1Ni43LTU2LjdjNy42LTcuNSAyMC4zLTUuNyAyNC4xIDQuMyA2LjggMTcuNyAxMC41IDM3IDEwLjUgNTcuMSAwIDQzLjItMTcuMiA4Mi4zLTQ1IDExMS4xbC00OS4xLTQ5LjFjLTMzLjEtMzMtNzguNS00NS43LTEyMS4xLTM4LjRsLTU2LjgtNTYuOCAwLTI5LjctLjItNWMtLjgtMTIuNC00LjQtMjQuMy0xMC41LTM0LjkgMjkuNC0zNSA3My40LTU3LjIgMTIyLjctNTcuM3oiXQogICAgfTsKICAgIGZhVG9vbHMgPSBmYVNjcmV3ZHJpdmVyV3JlbmNoOwogICAgZmFJbmRlbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaW5kZW50IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwM2MiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHpNMTkyIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem0zMiA5NmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6TTAgNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTEyNy44IDI2OC42TDI1LjggMzQ3LjlDMTUuMyAzNTYuMSAwIDM0OC42IDAgMzM1LjNMMCAxNzYuN2MwLTEzLjMgMTUuMy0yMC44IDI1LjgtMTIuNmwxMDEuOSA3OS4zYzguMiA2LjQgOC4yIDE4LjkgMCAyNS4zeiJdCiAgICB9OwogICAgZmFCYXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhcnMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsibmF2aWNvbiJdLCAiZjBjOSIsICJNMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NGwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAxMjhDMTQuMyAxMjggMCAxMTMuNyAwIDk2ek0wIDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00NDggNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhTmF2aWNvbiA9IGZhQmFyczsKICAgIGZhSGFuZHNQcmF5aW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLXByYXlpbmciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsicHJheWluZy1oYW5kcyJdLCAiZjY4NCIsICJNMjI0IDI5NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTExMi42IDg4LjItMTE5LjdjMTMuMS0xNy44IDkuMy00Mi44LTguNS01NS45cy00Mi44LTkuMy01NS45IDguNUwxMDYuNSAxNDIuOUM4OS4zIDE2Ni4yIDgwIDE5NC41IDgwIDIyMy42bDAgMTEwLjctNTguMSAxOS40QzguOCAzNTggMCAzNzAuMiAwIDM4NGwwIDk2YzAgMTAgNC43IDE5LjUgMTIuNyAyNS41czE4LjQgOCAyOC4xIDUuMmwxNTQuNC00NC4xYzU1LTE1LjcgOTIuOC02NS45IDkyLjgtMTIzLjFMMjg4IDIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDcyem0xOTIgMGwwLTcyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTE5LjZjMCA1Ny4yIDM3LjkgMTA3LjQgOTIuOCAxMjMuMWwxNTQuNCA0NC4xYzkuNyAyLjggMjAgLjggMjguMS01LjJTNjQwIDQ5MCA2NDAgNDgwbDAtOTZjMC0xMy44LTguOC0yNi0yMS45LTMwLjRsLTU4LjEtMTkuNCAwLTExMC43YzAtMjktOS4zLTU3LjMtMjYuNS04MC43TDQ0MC4yIDE2LjNDNDI3LjEtMS41IDQwMi4xLTUuMyAzODQuMyA3LjhzLTIxLjYgMzguMS04LjUgNTUuOUw0NjQgMTgzLjQgNDY0IDI5NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhUHJheWluZ0hhbmRzID0gZmFIYW5kc1ByYXlpbmc7CiAgICBmYVZpcnVzZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlydXNlcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMDc2IiwgIk0xOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMiAwIDMwLjUgMzYuOSA0NS44IDU4LjUgMjQuMiAxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zYy0yMS42IDIxLjYtNi4zIDU4LjUgMjQuMiA1OC41IDE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyYy0zMC41IDAtNDUuOCAzNi45LTI0LjIgNTguNSAxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGMtMjEuNi0yMS42LTU4LjUtNi4zLTU4LjUgMjQuMiAwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmMwLTMwLjUtMzYuOS00NS44LTU4LjUtMjQuMi0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0M3Ny44IDI2MC45IDYyLjUgMjI0IDMyIDIyNCAxNC4zIDIyNCAwIDIwOS43IDAgMTkyczE0LjMtMzIgMzItMzJjMzAuNSAwIDQ1LjgtMzYuOSAyNC4yLTU4LjUtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEMxMjMuMSA3Ny44IDE2MCA2Mi41IDE2MCAzMiAxNjAgMTQuMyAxNzQuMyAwIDE5MiAwek0xNDQgMTc2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMTI4IDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTI0OCA0MGMwIDIyLjkgMjcuNyAzNC40IDQzLjkgMTguMiA5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjljLTE2LjIgMTYuMi00LjcgNDMuOSAxOC4yIDQzLjkgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTIyLjkgMC0zNC40IDI3LjctMTguMiA0My45IDkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBjLTE2LjItMTYuMi00My45LTQuNy00My45IDE4LjIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0yMi45LTI3LjctMzQuNC00My45LTE4LjItOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWMxNi4yLTE2LjIgNC43LTQzLjktMTguMi00My45LTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMjIuOSAwIDM0LjQtMjcuNyAxOC4yLTQzLjktOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwYzE2LjIgMTYuMiA0My45IDQuNyA0My45LTE4LjIgMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpNNTA0IDM4NGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFTY2hvb2xGbGFnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjaG9vbC1mbGFnIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1NmUiLCAiTTI1Ni04YzAtMTMuMyAxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTcyIDAgMCAxOS4yIDEyOCA3Ni44IDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwIDEyOC03Ni44IDAtOTEuMnpNMjQwIDM4NGwwIDgwIDk2IDAgMC04MGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHpNMTEyIDQxNmM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwem0xNi0xNDRsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnpNNDk2IDQxNmM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwem0xNi0xNDRsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnptLTIyNCAwYTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnoiXQogICAgfTsKICAgIGZhVHJhZGVtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyYWRlbWFyayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzg0ODJdLCAiZjI1YyIsICJNMzQ2LjYgMTEwLjJjLTcuOC0xMS43LTIyLjQtMTctMzUuOS0xMi45UzI4OCAxMTMuOSAyODggMTI4bDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNTAuMyA2OS40IDEwNC4xYzUuOSA4LjkgMTUuOSAxNC4yIDI2LjYgMTQuMnMyMC43LTUuMyAyNi42LTE0LjJMNTQ0IDIzMy43IDU0NCAzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI1NmMwLTE0LjEtOS4yLTI2LjUtMjIuNy0zMC42cy0yOC4xIDEuMS0zNS45IDEyLjlMNDQ4IDI2Mi4zIDM0Ni42IDExMC4yek0zMiA5NkMxNC4zIDk2IDAgMTEwLjMgMCAxMjhzMTQuMyAzMiAzMiAzMmw2NCAwIDAgMjI0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yMjQgNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA5NnoiXQogICAgfTsKICAgIGZhRmlyZUJ1cm5lciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaXJlLWJ1cm5lciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGYxIiwgIk0yODEuNyA0OC4zTDI5NCAzNC41YzUuNC02LjEgMTMuMy04LjggMjAuOS04LjkgNy4yIDAgMTQuMyAyLjYgMTkuOSA3LjggMTkuNyAxOC4zIDM5LjggNDMuMiA1NSA3MC42IDE1LjEgMjcuMiAyNi4yIDU4LjEgMjYuMiA4OC4xIDAgODguNy03MS4zIDE1OS44LTE2MCAxNTkuOC04OS42IDAtMTYwLTcxLjMtMTYwLTE1OS44IDAtMzcuMyAxNi03My40IDM2LjgtMTA0LjUgMjAuOS0zMS4zIDQ3LjUtNTkgNzAuOS04MC4yIDUuNy01LjIgMTMuMS03LjcgMjAuMy03LjVzMTMuNCAzLjIgMTguOCA3LjVjMTQuNCAxMS40IDM4LjkgNDAuNyAzOC45IDQwLjd6TTMyMCAyNDAuMmMwLTM2LjUtMzctNzMtNTQuOC04OC40LTUuNC00LjctMTMuMS00LjctMTguNSAwLTE3LjcgMTUuNC01NC44IDUxLjktNTQuOCA4OC40IDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6TTkyLjggMzIwYzM3LjcgNDguMyA5Ni4xIDgwIDE2My4yIDgwIDY2LjUgMCAxMjUuMS0zMS43IDE2My04MGw0NSAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNjRjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTY0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDQ0LjggMHpNNDU2IDQwMGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFGYWNlU21pbGVCZWFtMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXNtaWxlLWJlYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjIsICJzbWlsZS1iZWFtIl0sICJmNWI4IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTY1LjQgMzIxLjljMjAuNCAyOCA1My40IDQ2LjEgOTAuNiA0Ni4xczcwLjItMTguMSA5MC42LTQ2LjFjNy44LTEwLjcgMjIuOC0xMy4xIDMzLjUtNS4zczEzLjEgMjIuOCA1LjMgMzMuNUMzNTYuMyAzOTAgMzA5LjIgNDE2IDI1NiA0MTZzLTEwMC4zLTI2LTEyOS40LTY1LjljLTcuOC0xMC43LTUuNC0yNS43IDUuMy0zMy41czI1LjctNS40IDMzLjUgNS4zek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXQogICAgfTsKICAgIGZhU21pbGVCZWFtMiA9IGZhRmFjZVNtaWxlQmVhbTI7CiAgICBmYVRlbnRBcnJvd0xlZnRSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW50LWFycm93LWxlZnQtcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU3ZiIsICJNLS41IDExM2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNzItNzJjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC0zMSAzMSAzMTAuMSAwIDU0LjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC03MiA3MmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0xMDIuMSAwLS4xIDAtMjYyIDAgMzEgMzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNzItNzJ6TTM3LjEgNDc2TDYwLjMgMjkyLjZjMS4yLTkuNyA2LjgtMTguMyAxNS4xLTIzLjNMMjM4LjggMTcwYzEwLjItNi4yIDIyLjktNi4yIDMzLjEtLjFsMTY1LjUgOTkuNGM4LjQgNSAxNCAxMy43IDE1LjMgMjMuNEw0NzUuOSA0NzZjMi40IDE5LjEtMTIuNSAzNi0zMS43IDM2bC03MS45IDBjLTEyLjEgMC0yMy4yLTYuOC0yOC42LTE3LjdMMjc1LjQgMzU3LjljLTEuOC0zLjYtNS41LTUuOS05LjUtNS45LTUuOSAwLTEwLjYgNC43LTEwLjYgMTAuNmwwIDExNy40YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDY4LjggNTEyYy0xOS4zIDAtMzQuMi0xNi45LTMxLjctMzZ6Il0KICAgIH07CiAgICBmYVJvdXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvdXRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZDciLCAiTTUxMiA5NmMwIDUwLjItNTkuMSAxMjUuMS04NC42IDE1NS0zLjggNC40LTkuNCA2LjEtMTQuNSA1TDMyMCAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NmwtMjc2LjQgMGM4LjctOS45IDE5LjMtMjIuNiAzMC0zNi44IDYuMy04LjQgMTIuOC0xNy42IDE5LTI3LjJMNDE2IDQ0OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMGMtNTMgMC05Ni00My05Ni05NnM0My05NiA5Ni05NmwzOS44IDBjLTIxLTMxLjUtMzkuOC02Ny43LTM5LjgtOTYgMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NnpNMTE3LjEgNDg5LjFjLTMuOCA0LjMtNy4yIDguMS0xMC4xIDExLjNsLTEuOCAyLS4yLS4yYy02IDQuNi0xNC42IDQtMjAtMS44LTI1LjItMjcuNC04NS05Ny45LTg1LTE0OC40IDAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCAzMC0yMS4xIDY3LTQzLjUgOTcuOS0xMC43IDE0LjctMjEuNyAyOC0zMC44IDM4LjVsLS42IC43ek0xMjggMzUyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTQxNiAxMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFBbmdsZXNVcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmdsZXMtdXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiYW5nbGUtZG91YmxlLXVwIl0sICJmMTAyIiwgIk0yMTQuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxOTIgMTA5LjMgMzI5LjQgMjQ2LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MHptMTYwIDM1MmwtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTkyIDMwMS4zIDMyOS40IDQzOC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjN6Il0KICAgIH07CiAgICBmYUFuZ2xlRG91YmxlVXAgPSBmYUFuZ2xlc1VwOwogICAgZmFCdWNrZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVja2V0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU0Y2YiLCAiTTQ0My43IDIwOGMyLjcgNC43IDQuMyAxMC4yIDQuMyAxNiAwIDE3LjctMTQuMyAzMi0zMiAzMmwtNS4xIDAtMjIuNCAyMTNjLTIuNiAyNC40LTIzLjIgNDMtNDcuOCA0M2wtMjMzLjYgMGMtMjQuNiAwLTQ1LjItMTguNS00Ny44LTQzTDM3LjEgMjU2IDMyIDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzIgMC01LjggMS42LTExLjMgNC4zLTE2bDQzOS40IDB6TTIyNC0xNmM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NGwwIDMyLTQ4IDAgMC0zMmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmwwIDMyLTQ4IDAgMC0zMkM4MCA0OC41IDE0NC41LTE2IDIyNC0xNnoiXQogICAgfTsKICAgIGZhTGVzc1RoYW5FcXVhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsZXNzLXRoYW4tZXF1YWwiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjUzNyIsICJNNDI2LjEgOTQuNGMxNi44LTUuNiAyNS44LTIzLjcgMjAuMi00MC41cy0yMy43LTI1LjgtNDAuNS0yMC4ybC0zODQgMTI4QzguOCAxNjYgMCAxNzguMiAwIDE5MnM4LjggMjYgMjEuOSAzMC40bDM4NCAxMjhjMTYuOCA1LjYgMzQuOS0zLjUgNDAuNS0yMC4ycy0zLjUtMzQuOS0yMC4yLTQwLjVMMTMzLjIgMTkyIDQyNi4xIDk0LjR6TTMyIDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0MTZ6Il0KICAgIH07CiAgICBmYUZvbGRlckNsb3NlZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9sZGVyLWNsb3NlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMTg1IiwgIk00NDggNDQ4TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYgNTEyIDAgMCAxNzZjMCAzNS4zLTI4LjcgNjQtNjQgNjR6bTY0LTI4OEwwIDE2MCAwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDEzOC43IDBjMTMuOCAwIDI3LjMgNC41IDM4LjQgMTIuOGwzOC40IDI4LjhjNS41IDQuMiAxMi4zIDYuNCAxOS4yIDYuNEw0NDggODBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNnoiXQogICAgfTsKICAgIGZhUGVyc29uVGhyb3VnaFdpbmRvdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tdGhyb3VnaC13aW5kb3ciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTVhOSIsICJNNjQgNjRsMjI0IDAgMCA5LjhjMCAzOS0yMy43IDc0LTU5LjkgODguNC02MC41IDI0LjItMTAwLjEgODIuNy0xMDAuMSAxNDcuOWwwIDczLjgtNjQgMCAwLTMyMHptMjg4IDBsMjI0IDAgMCAzMjAtNjcuNyAwLTMuNy00LjUtNzUuMi05MC4yYy05LjEtMTAuOS0yMi42LTE3LjMtMzYuOS0xNy4zbC03MS4xIDAtNDEtNjMuMWMtLjMtLjUtLjYtMS0xLTEuNCA0NC43LTI5IDcyLjUtNzkgNzIuNS0xMzMuNmwwLTkuOHptNzMgMzIwbC0yNi42IDAgNDIuNyA2NCAxNTAuOSAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4TDAgNDAwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDI2MC4yIDAgMzMuMiA0OS44YzkuOCAxNC43IDI5LjcgMTguNyA0NC40IDguOXMxOC43LTI5LjcgOC45LTQ0LjRsLTg0LjItMTI2LjIgNzQuNiAwIDQwIDQ4em0tMTU5LjUgMGwtNzMuNSAwIDAtNzMuOGMwLTEwLjIgMS42LTIwLjEgNC43LTI5LjVMMjY1LjUgMzg0ek0xOTIgMTI4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il0KICAgIH07CiAgICBmYVNjaG9vbExvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2Nob29sLWxvY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU2ZiIsICJNMCAxOTJjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjQgMCAxMjcuOS0xMTUuMWMxOC4zLTE2LjQgNDYtMTYuNCA2NC4yIDBMNDQ4IDEyOCA1MTIgMTI4YzMzIDAgNjAuMiAyNSA2My42IDU3LjItMTQuNy01LjktMzAuOC05LjItNDcuNi05LjItNzAuNyAwLTEyOCA1Ny4zLTEyOCAxMjhsMCAyNC40Yy0xOS42IDE3LjYtMzIgNDMuMS0zMiA3MS41bDAgOTZjMCA1LjUgLjUgMTAuOSAxLjMgMTYuMUw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTkyek0zMzIuMyAzNDEuNWMtNi0zLjUtMTIuOS01LjUtMjAuMy01LjVsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwbDAgODggOTYgMCAwLTY0LjFjMC0yMC44IDQuNC00MC41IDEyLjMtNTguNHpNMTEyIDM4NGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwem0xNi0xNDRsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnptMjI0LTQ4YTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpNNTYwIDM1MmwwLTQ3LjljMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDB6bS0xMTIgMi43bDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zeiJdCiAgICB9OwogICAgZmFQZXJzb25CdXJzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tYnVyc3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUzYiIsICJNMjA0IDQwLjFjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0ek00IDE0NC4xYzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek05Ni41IDI4NS41Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMzLjktMzMuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMOTYuNSAyODUuNXpNNjIuNiAyLjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMzMuOSAzMy45YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMNjIuNiAzNi42Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpNMzUyLjQtMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTQ3OC43IDI5OS4xbC00Ni4zLTYyLjQgMCAyNzUuM2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI3NS4zLTQ2LjMgNjIuNGMtMTAuNSAxNC4yLTMwLjYgMTcuMi00NC44IDYuNnMtMTcuMi0zMC42LTYuNi00NC44bDcwLjUtOTVjMjUuMi0zMy45IDY1LTUzLjkgMTA3LjItNTMuOXM4MiAyMCAxMDcuMiA1My45bDcwLjUgOTVjMTAuNSAxNC4yIDcuNiAzNC4yLTYuNiA0NC44cy0zNC4yIDcuNi00NC44LTYuNnoiXQogICAgfTsKICAgIGZhTGVmdExvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGVmdC1sb25nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImxvbmctYXJyb3ctYWx0LWxlZnQiXSwgImYzMGEiLCAiTTkuNCAyNzguNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsMTI4LTEyOGM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOVMxOTIgMTE1LjEgMTkyIDEyOGwwIDY0IDMzNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMzNiAwIDAgNjRjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTEyOC0xMjh6Il0KICAgIH07CiAgICBmYUxvbmdBcnJvd0FsdExlZnQgPSBmYUxlZnRMb25nOwogICAgZmFMb2NhdGlvbkNyb3NzaGFpcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibG9jYXRpb24tY3Jvc3NoYWlycyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJsb2NhdGlvbiJdLCAiZjYwMSIsICJNMjg4LTE2YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTguM2M5OC4xIDE0IDE3NS43IDkxLjYgMTg5LjcgMTg5LjdsMTguMyAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOC4zIDBjLTE0IDk4LjEtOTEuNiAxNzUuNy0xODkuNyAxODkuN2wwIDE4LjNjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xOC4zQzE1Ny45IDQ2My43IDgwLjMgMzg2LjEgNjYuMyAyODhMNDggMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE4LjMgMEM4MC4zIDEyNS45IDE1Ny45IDQ4LjMgMjU2IDM0LjNMMjU2IDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xMjggMjU2YTE2MCAxNjAgMCAxIDAgMzIwIDAgMTYwIDE2MCAwIDEgMCAtMzIwIDB6bTE2MC05NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnoiXQogICAgfTsKICAgIGZhTG9jYXRpb24gPSBmYUxvY2F0aW9uQ3Jvc3NoYWlyczsKICAgIGZhUGVyc29uRG90c0Zyb21MaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1kb3RzLWZyb20tbGluZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJkaWFnbm9zZXMiXSwgImY0NzAiLCAiTTE4NCA3MmE3MiA3MiAwIDEgMSAxNDQgMCA3MiA3MiAwIDEgMSAtMTQ0IDB6TTE2MCAyOTkuM2MtMTkuOSAyMi42LTMyIDUyLjItMzIgODQuN2wwIDMyLTY0IDAgMC0zMmMwLTEwNiA4Ni0xOTIgMTkyLTE5MnMxOTIgODYgMTkyIDE5MmwwIDMyLTY0IDAgMC0zMmMwLTMyLjUtMTIuMS02Mi4xLTMyLTg0LjdsMCAxMTYuNy0xOTIgMCAwLTExNi43ek0yMzIgMzg0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODgtMTA0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTI0IDQ2NGw0NjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6TTY0IDE4NGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem00MjQgNzJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdCiAgICB9OwogICAgZmFEaWFnbm9zZXMgPSBmYVBlcnNvbkRvdHNGcm9tTGluZTsKICAgIGZhR2F1Z2VTaW1wbGVIaWdoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdhdWdlLXNpbXBsZS1oaWdoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE2NjgsICJ0YWNob21ldGVyIiwgInRhY2hvbWV0ZXItZmFzdCJdLCAiZjYyYSIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMzIwIDk2YzAtMTYuMi02LTMxLjEtMTYtNDIuM2w2OS41LTEzOC45YzUuOS0xMS45IDEuMS0yNi4zLTEwLjctMzIuMnMtMjYuMy0xLjEtMzIuMiAxMC43TDI2MS4xIDI4OC4yYy0xLjctLjEtMy40LS4yLTUuMS0uMi0zNS4zIDAtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0IDY0LTI4LjcgNjQtNjR6Il0KICAgIH07CiAgICBmYVRhY2hvbWV0ZXIgPSBmYUdhdWdlU2ltcGxlSGlnaDsKICAgIGZhVGFjaG9tZXRlckZhc3QgPSBmYUdhdWdlU2ltcGxlSGlnaDsKICAgIGZhQW5nbGVzTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmdsZXMtbGVmdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzE3MSwgImFuZ2xlLWRvdWJsZS1sZWZ0Il0sICJmMTAwIiwgIk05LjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w3Ny4zIDI1NiAyMTQuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MHptMzUyLTE2MGwtMTYwIDE2MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDI2OS4zIDI1NiA0MDYuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMHoiXQogICAgfTsKICAgIGZhQW5nbGVEb3VibGVMZWZ0ID0gZmFBbmdsZXNMZWZ0OwogICAgZmFVcERvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXAtZG93biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzg1OTcsIDExMDIxLCAiYXJyb3dzLWFsdC12Il0sICJmMzM4IiwgIk00MDYuNiA1MDIuNmw5Ni05NmM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0OTIuOSAzNTIgNDgwIDM1MmwtNjQgMCAwLTMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDMyMC02NCAwYy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44cy0yLjIgMjUuNyA2LjkgMzQuOWw5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHpNMTUwLjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45UzE5LjEgMTYwIDMyIDE2MGw2NCAwIDAgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMjAgNjQgMGMxMi45IDAgMjQuNi03LjggMjkuNi0xOS44czIuMi0yNS43LTYuOS0zNC45bC05Ni05NnoiXQogICAgfTsKICAgIGZhQXJyb3dzQWx0ViA9IGZhVXBEb3duOwogICAgZmFCYXR0ZXJ5RW1wdHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmF0dGVyeS1lbXB0eSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJiYXR0ZXJ5LTAiXSwgImYyNDQiLCAiTTExMiAxNjBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDIyNGMwIDguOCA3LjIgMTYgMTYgMTZsNDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjI0YzAtOC44LTcuMi0xNi0xNi0xNmwtNDE2IDB6TTMyIDE3NmMwLTQ0LjIgMzUuOC04MCA4MC04MGw0MTYgMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsMCA0OGMwIDQ0LjItMzUuOCA4MC04MCA4MGwtNDE2IDBjLTQ0LjIgMC04MC0zNS44LTgwLTgwbDAtMjI0eiJdCiAgICB9OwogICAgZmFCYXR0ZXJ5MCA9IGZhQmF0dGVyeUVtcHR5OwogICAgZmFLZXlib2FyZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAia2V5Ym9hcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5ZTNdLCAiZjExYyIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6bTE2IDY0bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0xNzYgMTI4bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTE2MCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYgODBsMjI0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0yMjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MC0xNzZjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYgODBsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnptODAtODBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYgODBsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnptODAtODBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYgODBsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhQ29va2llID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvb2tpZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzg1MF0sICJmNTYzIiwgIk0yNDcuMiAxN2MtMjIuMS0zLjEtNDQuNiAuOS02NC40IDExLjRsLTc0IDM5LjVDODkuMSA3OC40IDczLjIgOTQuOSA2My40IDExNUwyNi43IDE5MC42Yy05LjggMjAuMS0xMyA0Mi45LTkuMSA2NC45bDE0LjUgODIuOGMzLjkgMjIuMSAxNC42IDQyLjMgMzAuNyA1Ny45bDYwLjMgNTguNGMxNi4xIDE1LjYgMzYuNiAyNS42IDU4LjcgMjguN2w4MyAxMS43YzIyLjEgMy4xIDQ0LjYtLjkgNjQuNC0xMS40bDc0LTM5LjVjMTkuNy0xMC41IDM1LjYtMjcgNDUuNC00Ny4ybDM2LjctNzUuNWM5LjgtMjAuMSAxMy00Mi45IDkuMS02NC45bC0xNC42LTgyLjhjLTMuOS0yMi4xLTE0LjYtNDIuMy0zMC43LTU3LjlMMzg4LjkgNTcuNWMtMTYuMS0xNS42LTM2LjYtMjUuNi01OC43LTI4LjdMMjQ3LjIgMTd6TTIwOCAxNDRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0xNDQgMzM2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTIyNC02NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVN0b3B3YXRjaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdG9wd2F0Y2giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5MjAxXSwgImYyZjIiLCAiTTE2OC41IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDI1LjNjLTEwOCAxMS45LTE5MiAxMDMuNS0xOTIgMjE0LjcgMCAxMTkuMyA5Ni43IDIxNiAyMTYgMjE2czIxNi05Ni43IDIxNi0yMTZjMC0zOS44LTEwLjgtNzcuMS0yOS42LTEwOS4ybDI4LjItMjguMmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMjMuNCAyMy40Yy0zMi45LTMwLjItNzUuMi01MC4zLTEyMi01NS41bDAtMjUuMyAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMTIgMHptODAgMTg0bDAgMTA0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il0KICAgIH07CiAgICBmYUVqZWN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVqZWN0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTE2N10sICJmMDUyIiwgIk0yMjQgMzJjMTMuNSAwIDI2LjMgNS42IDM1LjQgMTUuNmwxNzYgMTkyYzEyLjkgMTQgMTYuMiAzNC4zIDguNiA1MS44UzQxOSAzMjAgNDAwIDMyMEw0OCAzMjBjLTE5IDAtMzYuMy0xMS4yLTQzLjktMjguN3MtNC4zLTM3LjcgOC42LTUxLjhsMTc2LTE5MkMxOTcuNyAzNy42IDIxMC41IDMyIDIyNCAzMnpNMCA0MzJjMC0yNi41IDIxLjUtNDggNDgtNDhsMzUyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OHoiXQogICAgfTsKICAgIGZhU2F0ZWxsaXRlRGlzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzYXRlbGxpdGUtZGlzaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODIyNV0sICJmN2MwIiwgIk0yMzIgMGMxNTQuNiAwIDI4MCAxMjUuNCAyODAgMjgwIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTI4LjEtMTAzLjktMjMyLTIzMi0yMzItMTMuMyAwLTI0LTEwLjctMjQtMjRTMjE4LjcgMCAyMzIgMHpNMjA4IDEyMGMwLTEzLjMgMTAuNy0yNCAyNC0yNCAxMDEuNiAwIDE4NCA4Mi40IDE4NCAxODQgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC03NS4xLTYwLjktMTM2LTEzNi0xMzYtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTI2LjQgMTQyLjdjOC44LTE3LjkgMzIuNC0xOS45IDQ2LjUtNS44bDEyOC41IDEyOC41IDMyLTMyYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTMyIDMyIDEyOC41IDEyOC41YzE0LjEgMTQuMSAxMiAzNy42LTUuOCA0Ni41LTM0LjIgMTYuOS03Mi42IDI2LjQtMTEzLjMgMjYuNC0xNDEuNCAwLTI1Ni0xMTQuNi0yNTYtMjU2IDAtNDAuNyA5LjUtNzkuMiAyNi40LTExMy4zeiJdCiAgICB9OwogICAgZmFGYWNlUm9sbGluZ0V5ZXMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Utcm9sbGluZy1leWVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTgwLCAibWVoLXJvbGxpbmctZXllcyJdLCAiZjVhNSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE5MiAzNTJsMTI4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTEyOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0zMi0xMjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0yNiAxNS41LTQ4LjQgMzcuOC01OC40LTMuNyA1LjItNS44IDExLjYtNS44IDE4LjQgMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTYuOS0yLjItMTMuMi01LjgtMTguNCAyMi4zIDEwIDM3LjggMzIuNCAzNy44IDU4LjR6bTEyOCA2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yNiAxNS41LTQ4LjQgMzcuOC01OC40LTMuNyA1LjItNS44IDExLjYtNS44IDE4LjQgMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTYuOS0yLjItMTMuMi01LjgtMTguNCAyMi4zIDEwIDM3LjggMzIuNCAzNy44IDU4LjQgMCAzNS4zLTI4LjcgNjQtNjQgNjR6Il0KICAgIH07CiAgICBmYU1laFJvbGxpbmdFeWVzMiA9IGZhRmFjZVJvbGxpbmdFeWVzMjsKICAgIGZhTGlzdENoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpc3QtY2hlY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsidGFza3MiXSwgImYwYWUiLCAiTTEzMy44IDM2LjNjMTAuOSA3LjYgMTMuNSAyMi42IDUuOSAzMy40bC01NiA4MGMtNC4xIDUuOC0xMC41IDkuNS0xNy42IDEwLjFTNTIgMTU4IDQ3IDE1M0w3IDExM0MtMi4zIDEwMy42LTIuMyA4OC40IDcgNzlTMzEuNiA2OS43IDQxIDc5bDE5LjggMTkuOCAzOS42LTU2LjZjNy42LTEwLjkgMjIuNi0xMy41IDMzLjQtNS45em0wIDE2MGMxMC45IDcuNiAxMy41IDIyLjYgNS45IDMzLjRsLTU2IDgwYy00LjEgNS44LTEwLjUgOS41LTE3LjYgMTAuMVM1MiAzMTggNDcgMzEzTDcgMjczYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMTkuOCAxOS44IDM5LjYtNTYuNmM3LjYtMTAuOSAyMi42LTEzLjUgMzMuNC01Ljl6TTIyNCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjI0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem0wIDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjI0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0xNjAgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI4OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yODggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTY0IDM3NmE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6Il0KICAgIH07CiAgICBmYVRhc2tzID0gZmFMaXN0Q2hlY2s7CiAgICBmYVNhY2tYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzYWNrLXhtYXJrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NmEiLCAiTTMyOCAxMTJsLTE0NCAwLTM3LjMtNzQuNWMtMS44LTMuNi0yLjctNy42LTIuNy0xMS42IDAtMTQuMyAxMS42LTI1LjkgMjUuOS0yNS45TDM0Mi4xIDBjMTQuMyAwIDI1LjkgMTEuNiAyNS45IDI1LjkgMCA0LS45IDgtMi43IDExLjZMMzI4IDExMnpNMTY5LjYgMTYwbDE3Mi44IDAgNDguNyA0MC42QzQ1Ny42IDI1NiA0OTYgMzM4IDQ5NiA0MjQuNSA0OTYgNDcyLjggNDU2LjggNTEyIDQwOC41IDUxMmwtMzA1LjEgMEM1NS4yIDUxMiAxNiA0NzIuOCAxNiA0MjQuNSAxNiAzMzggNTQuNCAyNTYgMTIwLjkgMjAwLjZMMTY5LjYgMTYwek0zMjMuOSAyODQuMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTMzLjkgMzMuOS0zMy45LTMzLjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzMuOSAzMy45LTMzLjkgMzMuOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDMzLjktMzMuOSAzMy45IDMzLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0zMy45LTMzLjkgMzMuOS0zMy45YzkuNC05LjQgOS40LTI0LjYgMC0zMy45eiJdCiAgICB9OwogICAgZmFIYXNodGFnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhc2h0YWciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjA5OF0sICIyMyIsICJNMjE0LjcgLjdjMTcuMyAzLjcgMjguMyAyMC43IDI0LjYgMzhsLTE5LjEgODkuMyAxMjYuNSAwIDIyLTEwMi43QzM3Mi40IDggMzg5LjQtMyA0MDYuNyAuN3MyOC4zIDIwLjcgMjQuNiAzOEw0MTIuMiAxMjggNDgwIDEyOGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtODEuNiAwLTI3LjQgMTI4IDY3LjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtODEuNiAwLTIyIDEwMi43Yy0zLjcgMTcuMy0yMC43IDI4LjMtMzggMjQuNnMtMjguMy0yMC43LTI0LjYtMzhsMTkuMS04OS4zLTEyNi41IDAtMjIgMTAyLjdjLTMuNyAxNy4zLTIwLjcgMjguMy0zOCAyNC42cy0yOC4zLTIwLjctMjQuNi0zOEw5OS44IDM4NCAzMiAzODRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsODEuNiAwIDI3LjQtMTI4LTY3LjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4MS42IDAgMjItMTAyLjdDMTgwLjQgOCAxOTcuNC0zIDIxNC43IC43ek0yMDYuNCAxOTJsLTI3LjQgMTI4IDEyNi41IDAgMjcuNC0xMjgtMTI2LjUgMHoiXQogICAgfTsKICAgIGZhVHJhaW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhaW4iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjg2NDZdLCAiZjIzOCIsICJNMCA5NkMwIDQzIDQzIDAgOTYgMEwyODggMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjU2YzAgNDAuMS0yNC42IDc0LjUtNTkuNSA4OC44bDUzLjkgNjMuN2M4LjYgMTAuMSA3LjMgMjUuMy0yLjggMzMuOHMtMjUuMyA3LjMtMzMuOC0yLjhsLTc0LTg3LjUtMTUxLjMgMC03NCA4Ny41Yy04LjYgMTAuMS0yMy43IDExLjQtMzMuOCAyLjhzLTExLjQtMjMuNy0yLjgtMzMuOGw1My45LTYzLjdDMjQuNiA0MjYuNSAwIDM5Mi4xIDAgMzUyTDAgOTZ6bTY0IDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMkw5NiA5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTE5MiAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFHYW1lcGFkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdhbWVwYWQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjExYiIsICJNNDQ4IDY0YzEwNiAwIDE5MiA4NiAxOTIgMTkyUzU1NCA0NDggNDQ4IDQ0OGwtMjU2IDBDODYgNDQ4IDAgMzYyIDAgMjU2Uzg2IDY0IDE5MiA2NGwyNTYgMHpNMTkyIDE3NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAzMi0zMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMyIDAgMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzIgMzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzIgMCAwLTMyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0yNDAgOTZhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em02NC05NmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6Il0KICAgIH07CiAgICBmYUZpbGVFeHBvcnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1leHBvcnQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiYXJyb3ctcmlnaHQtZnJvbS1maWxlIl0sICJmNTZlIiwgIk05Ni41IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtOTYgNzguMSAwLTMxIDMxYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNzItNzJjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlsLTcyLTcyYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDMxIDMxLTc4LjEgMCAwLTEzMy41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MS4yIDE4LjdDMjc5LjIgNi43IDI2MyAwIDI0NiAwTDk2LjUgMHpNMzU4IDE3NmwtOTMuNSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAuNSA1OC41IDM1OCAxNzZ6TTIyNC41IDMyOGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxMDQgMCAwIDQ4LTEwNCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhQXJyb3dSaWdodEZyb21GaWxlID0gZmFGaWxlRXhwb3J0OwogICAgZmFGYWNlR3JpbWFjZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmltYWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTU2LCAiZ3JpbWFjZSJdLCAiZjU3ZiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTQwMCAzNTJjMCAyNS4yLTE5LjQgNDUuOC00NCA0Ny44bDAtOTUuN2MyNC42IDIgNDQgMjIuNyA0NCA0Ny44ek0yNzYgMzA0bDQwIDAgMCA5Ni00MCAwIDAtOTZ6bS04MCA5NmwwLTk2IDQwIDAgMCA5Ni00MCAwem0tNDAtOTUuOGwwIDk1LjdjLTI0LjYtMi00NC0yMi43LTQ0LTQ3LjhzMTkuNC00NS44IDQ0LTQ3Ljh6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhR3JpbWFjZTIgPSBmYUZhY2VHcmltYWNlMjsKICAgIGZhVHJhaW5TdWJ3YXkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhaW4tc3Vid2F5IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbInN1YndheSJdLCAiZjIzOSIsICJNMCA5NkMwIDQzIDQzIDAgOTYgMEwyODggMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjU2YzAgNDAuMS0yNC42IDc0LjUtNTkuNSA4OC44bDUzLjkgNjMuN2M4LjYgMTAuMSA3LjMgMjUuMy0yLjggMzMuOHMtMjUuMyA3LjMtMzMuOC0yLjhsLTc0LTg3LjUtMTUxLjMgMC03NCA4Ny41Yy04LjYgMTAuMS0yMy43IDExLjQtMzMuOCAyLjhzLTExLjQtMjMuNy0yLjgtMzMuOGw1My45LTYzLjdDMjQuNiA0MjYuNSAwIDM5Mi4xIDAgMzUyTDAgOTZ6bTY0IDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsNzIgMCAwLTE2MC03MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMjE2IDI1Nmw3MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTcyIDAgMCAxNjB6TTk2IDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTIyNC0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdCiAgICB9OwogICAgZmFTdWJ3YXkgPSBmYVRyYWluU3Vid2F5OwogICAgZmFDaXJjbGVEb3QyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1kb3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyODAsICJkb3QtY2lyY2xlIl0sICJmMTkyIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptMC0zNTJhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6Il0KICAgIH07CiAgICBmYURvdENpcmNsZTIgPSBmYUNpcmNsZURvdDI7CiAgICBmYU9iamVjdEdyb3VwMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJvYmplY3QtZ3JvdXAiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjI0NyIsICJNMzIgMTE5LjRDMTIuOSAxMDguNCAwIDg3LjcgMCA2NCAwIDI4LjcgMjguNyAwIDY0IDAgODcuNyAwIDEwOC40IDEyLjkgMTE5LjQgMzJsMzM3LjEgMGMxMS4xLTE5LjEgMzEuNy0zMiA1NS40LTMyIDM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNGwwIDI3My4xYzE5LjEgMTEuMSAzMiAzMS43IDMyIDU1LjQgMCAzNS4zLTI4LjcgNjQtNjQgNjQtMjMuNyAwLTQ0LjQtMTIuOS01NS40LTMybC0zMzcuMSAwYy0xMS4xIDE5LjEtMzEuNyAzMi01NS40IDMyLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNGwwLTI3My4xem00NDggMGMtOS43LTUuNi0xNy44LTEzLjctMjMuNC0yMy40TDExOS40IDk2Yy01LjYgOS43LTEzLjcgMTcuOC0yMy40IDIzLjRsMCAyNzMuMWM5LjcgNS42IDE3LjggMTMuNyAyMy40IDIzLjRsMzM3LjEgMGM1LjYtOS43IDEzLjctMTcuOCAyMy40LTIzLjRsMC0yNzMuMXpNMTQ0IDE3NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NHpNMjU2IDMyMGwzMiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTEyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTZ6Il0KICAgIH07CiAgICBmYVNoaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hpcCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODY3NF0sICJmMjFhIiwgIk0yNzIgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNi0xNiAwYy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDEwOC44LTIxLjYgOC42Yy0xNC44IDUuOS0yMi41IDIyLjQtMTcuNCAzNy41IDEwLjQgMzEuMyAyNi44IDU5LjMgNDcuNyA4My4xIDIwLjEtOS4yIDQxLjctMTMuOSA2My4zLTE0IDMzLjEtLjIgNjYuMyAxMC4yIDk0LjQgMzEuNGwxLjYgMS4yIDAtMjE1LTEwNCA0MS42IDAtODMuMmMwLTguOCA3LjItMTYgMTYtMTZsMjI0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODMuMi0xMDQtNDEuNiAwIDIxNSAxLjYtMS4yYzI3LjUtMjAuNyA1OS45LTMxLjIgOTIuNC0zMS40IDIyLjMtLjEgNDQuNiA0LjUgNjUuMyAxNCAyMC45LTIzLjcgMzcuMy01MS44IDQ3LjctODMuMSA1LTE1LjItMi42LTMxLjYtMTcuNC0zNy41TDUxMiAyNTIuOCA1MTIgMTQ0YzAtNDQuMi0zNS44LTgwLTgwLTgwbC0xNiAwIDAtMTZjMC0yNi41LTIxLjUtNDgtNDgtNDhMMjcyIDB6TTQwMy40IDQ3Ni4xYzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDE5IDE0LjQgNDEuOSAyOC4yIDY3LjIgMzMuMyAyNi41IDUuNCA1NC4zIC44IDgwLjctMTkuMSAxMC42LTggMTIuNy0yMyA0LjctMzMuNnMtMjMtMTIuNy0zMy42LTQuN2MtMTQuOSAxMS4yLTI4LjYgMTMuMS00Mi4zIDEwLjMtMTQuOS0zLTMwLjktMTEuOS00Ny44LTI0LjYtMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjEuNiAxNi4zLTQxLjMgMjUuOC01OC45IDI1LjctOS42LS4xLTE5LjktMy0zMS4yLTExLjUtMTAuNi04LTI1LjYtNS45LTMzLjYgNC43UzcgNDgyLjMgMTcuNiA0OTAuM2MxOS4xIDE0LjQgMzkuNCAyMSA1OS44IDIxLjEgMzMuOSAuMiA2NC4zLTE3LjQgODguMS0zNS4zIDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1Ljl6Il0KICAgIH07CiAgICBmYUMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk5XSwgIjQzIiwgIk0zMjkuMSAxNDIuOWMtNjIuNS02Mi41LTE1NS44LTYyLjUtMjE4LjMgMHMtNjIuNSAxNjMuOCAwIDIyNi4zIDE1NS44IDYyLjUgMjE4LjMgMGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zYy04Ny41IDg3LjUtMjIxLjMgODcuNS0zMDguOCAwcy04Ny41LTIyOS4zIDAtMzE2LjggMjIxLjMtODcuNSAzMDguOCAwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAweiJdCiAgICB9OwogICAgZmFTcXVhcmVQaG9uZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGhvbmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsicGhvbmUtc3F1YXJlIl0sICJmMDk4IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem04OCA5Ni43YzkuOC0yLjcgMjAuMSAyLjQgMjQgMTEuOGwyMC4zIDQ4LjdjMy40IDguMyAxLjEgMTcuOC01LjkgMjMuNWwtMjIuMSAxOGMxNi4yIDM1LjggNDQuNSA2NSA3OS42IDgyLjRsMTkuMy0yMy42YzUuNy02LjkgMTUuMi05LjMgMjMuNS01LjlsNDguNyAyMC4zYzkuNCAzLjkgMTQuNCAxNC4yIDExLjggMjRsLS44IDIuOGMtOC44IDMyLjMtNDAuMSA1OS45LTc4LjIgNTEuOC04Ny41LTE4LjUtMTU2LjMtODcuNC0xNzQuOS0xNzQuOS04LjEtMzguMSAxOS41LTY5LjQgNTEuOC03OC4ybDIuOC0uOHoiXQogICAgfTsKICAgIGZhUGhvbmVTcXVhcmUgPSBmYVNxdWFyZVBob25lOwogICAgZmFSdWxlckNvbWJpbmVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJ1bGVyLWNvbWJpbmVkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1NDYiLCAiTTEgNDQxLjdDNS41IDQ2My41IDI0LjggNDgwIDQ4IDQ4MGwzNTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC00OCAwIDAgNzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC03Mi02NCAwIDAgNzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC03Mi03MiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDcyIDAgMC02NC03MiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDcyIDAgMC00OGMwLTI2LjUtMjEuNS00OC00OC00OEw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyYzAgMy4zIC4zIDYuNiAxIDkuN3oiXQogICAgfTsKICAgIGZhQXJyb3dzUm90YXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy1yb3RhdGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0NzIsICJyZWZyZXNoIiwgInN5bmMiXSwgImYwMjEiLCAiTTY1LjkgMjI4LjVjMTMuMy05MyA5My40LTE2NC41IDE5MC4xLTE2NC41IDUzIDAgMTAxIDIxLjUgMTM1LjggNTYuMiAuMiAuMiAuNCAuNCAuNiAuNmw3LjYgNy4yLTQ3LjkgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDUzLjQtMTEuMy0xMC43QzM5MC41IDI4LjYgMzI2LjUgMCAyNTYgMCAxMjcgMCAyMC4zIDk1LjQgMi42IDIxOS41IC4xIDIzNyAxMi4yIDI1My4yIDI5LjcgMjU1LjdzMzMuNy05LjcgMzYuMi0yNy4xem00NDMuNSA2NGMyLjUtMTcuNS05LjctMzMuNy0yNy4xLTM2LjJzLTMzLjcgOS43LTM2LjIgMjcuMWMtMTMuMyA5My05My40IDE2NC41LTE5MC4xIDE2NC41LTUzIDAtMTAxLTIxLjUtMTM1LjgtNTYuMi0uMi0uMi0uNC0uNC0uNi0uNmwtNy42LTcuMiA0Ny45IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzIwYy04LjUgMC0xNi43IDMuNC0yMi43IDkuNVMtLjEgMzQzLjcgMCAzNTIuM2wxIDEyN2MuMSAxNy43IDE0LjYgMzEuOSAzMi4zIDMxLjdTNjUuMiA0OTYuNCA2NSA0NzguN2wtLjQtNTEuNSAxMC43IDEwLjFjNDYuMyA0Ni4xIDExMC4yIDc0LjcgMTgwLjcgNzQuNyAxMjkgMCAyMzUuNy05NS40IDI1My40LTIxOS41eiJdCiAgICB9OwogICAgZmFSZWZyZXNoID0gZmFBcnJvd3NSb3RhdGU7CiAgICBmYVN5bmMgPSBmYUFycm93c1JvdGF0ZTsKICAgIGZhUGVyc29uRHJlc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWRyZXNzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImZlbWFsZSJdLCAiZjE4MiIsICJNMTM2IDI0YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMTEyIDM4NGwtMjUuOCAwYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMWw0My0xMjktNDguMyA2NS4xYy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NUMxMTAgMTMyIDE0OS43IDExMiAxOTIgMTEyczgyIDIwIDEwNy4yIDUzLjlsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42TDI3MCAyMzQgMzEzIDM2Mi45YzMuNSAxMC40LTQuMyAyMS4xLTE1LjIgMjEuMWwtMjUuOCAwIDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTI4LTMyIDAgMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjh6Il0KICAgIH07CiAgICBmYUZlbWFsZSA9IGZhUGVyc29uRHJlc3M7CiAgICBmYUJvb2tPcGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2stb3BlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODIxNCwgMTI4MzY2XSwgImY1MTgiLCAiTTI1NiAxNDEuM2wwIDMwOS4zIC41LS4yQzMxMS4xIDQyNy43IDM2OS43IDQxNiA0MjguOCA0MTZsMTkuMiAwIDAtMzIwLTE5LjIgMGMtNDIuMiAwLTg0LjEgOC40LTEyMy4xIDI0LjYtMTYuOCA3LTMzLjQgMTMuOS00OS43IDIwLjd6TTIzMC45IDYxLjVMMjU2IDcyIDI4MS4xIDYxLjVDMzI3LjkgNDIgMzc4LjEgMzIgNDI4LjggMzJMNDY0IDMyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zNS4yIDBjLTUwLjcgMC0xMDAuOSAxMC0xNDcuNyAyOS41bC0xMi44IDUuM2MtNy45IDMuMy0xNi43IDMuMy0yNC42IDBsLTEyLjgtNS4zQzE4NC4xIDQ5MCAxMzMuOSA0ODAgODMuMiA0ODBMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDM1LjIgMGM1MC43IDAgMTAwLjkgMTAgMTQ3LjcgMjkuNXoiXQogICAgfTsKICAgIGZhRm9sZGVyVHJlZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb2xkZXItdHJlZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmODAyIiwgIk00OCAyNEM0OCAxMC43IDM3LjMgMCAyNCAwUzAgMTAuNyAwIDI0TDAgMzkyYzAgMzAuOSAyNS4xIDU2IDU2IDU2bDE4NCAwIDAtNDgtMTg0IDBjLTQuNCAwLTgtMy42LTgtOGwwLTIzMiAxOTIgMCAwLTQ4LTE5MiAwIDAtODh6TTMzNiAyMjRsMTkyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NmMwLTI2LjUtMjEuNS00OC00OC00OGwtODIuNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtOC42LTguNmMtOS05LTIxLjItMTQuMS0zMy45LTE0LjFMMzM2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTI4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4em0wIDI4OGwxOTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC04Mi43IDBjLTguNSAwLTE2LjYtMy40LTIyLjYtOS40bC04LjYtOC42Yy05LTktMjEuMi0xNC4xLTMzLjktMTQuMUwzMzYgMjg4Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDEyOGMwIDI2LjUgMjEuNSA0OCA0OCA0OHoiXQogICAgfTsKICAgIGZhQm94QXJjaGl2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3gtYXJjaGl2ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhcmNoaXZlIl0sICJmMTg3IiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDQ0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgMTI4QzE0LjMgMTI4IDAgMTEzLjcgMCA5NkwwIDY0ek0zMiAxNzZsNDQ4IDAgMCAyNDBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTI0MHptMTUyIDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXQogICAgfTsKICAgIGZhQXJjaGl2ZSA9IGZhQm94QXJjaGl2ZTsKICAgIGZhVGVudEFycm93RG93blRvTGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW50LWFycm93LWRvd24tdG8tbGluZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTdlIiwgIk0xODUgMTIxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTMxIDMxIDAtMTAyLjFDMTIwIDIuNyAxMDkuMy04IDk2LThTNzIgMi43IDcyIDE2bDAgMTAyLjEtMzEtMzFDMzEuNiA3Ny43IDE2LjQgNzcuNyA3IDg3Uy0yLjMgMTExLjYgNyAxMjFsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNzItNzJ6TTE1NS44IDI2MC42TDEzMi4xIDQ0OCAzMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzIgMC0yLjgtLjQtNS41LTEtOEw1NDguMiAyNjAuN2MtMS4yLTkuNy02LjktMTguNC0xNS4zLTIzLjRMMzY3LjQgMTM3LjljLTEwLjItNi4xLTIyLjktNi4xLTMzLjEgLjFMMTcwLjkgMjM3LjNjLTguMyA1LjEtMTMuOSAxMy43LTE1LjEgMjMuM3pNNDQ4IDQ0OGwtOTcuMSAwIDAtMTQ5LjRjMC01LjkgNC43LTEwLjYgMTAuNi0xMC42IDQgMCA3LjcgMi4zIDkuNSA1LjlMNDQ4IDQ0OHoiXQogICAgfTsKICAgIGZhUXJjb2RlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInFyY29kZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDI5IiwgIk02NCAxNjBsNjQgMCAwLTY0LTY0IDAgMCA2NHpNMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTk2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODB6TTY0IDQxNmw2NCAwIDAtNjQtNjQgMCAwIDY0ek0wIDMzNmMwLTI2LjUgMjEuNS00OCA0OC00OGw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTk2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6TTMyMCA5NmwwIDY0IDY0IDAgMC02NC02NCAwek0zMDQgMzJsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC05NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4ek0yODggMzUyYTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptMCA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMi0zMi0xNC4zLTMyLTMyIDE0LjMtMzIgMzItMzJ6bTk2IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzItMTQuMyAzMi0zMiAzMi0zMi0xNC4zLTMyLTMyem0zMi05NmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bS0zMiAzMmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAweiJdCiAgICB9OwogICAgZmFEcmFnb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHJhZ29uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MDA5XSwgImY2ZDUiLCAiTTM1MiAxMjQuNWwtNTEuOS0xM2MtNi41LTEuNi0xMS4zLTcuMS0xMi0xMy44czIuOC0xMy4xIDguNy0xNi4xbDQwLjgtMjAuNC00My4zLTMyLjVjLTUuNS00LjEtNy44LTExLjMtNS42LTE3LjlTMjk3LjEgMCAzMDQgMEw0NjQgMGMzMC4yIDAgNTguNyAxNC4yIDc2LjggMzguNGw1Ny42IDc2LjhjNi4yIDguMyA5LjYgMTguNCA5LjYgMjguOCAwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjEuNSAwYy0xNyAwLTMzLjMtNi43LTQ1LjMtMTguN2wtMTMuMy0xMy4zLTMyIDAgMCAyMS41YzAgMjQuOCAxMi44IDQ3LjkgMzMuOCA2MS4xbDEwNi42IDY2LjZjMzIuMSAyMC4xIDUxLjYgNTUuMiA1MS42IDkzLjEgMCA2MC42LTQ5LjEgMTA5LjgtMTA5LjggMTA5LjhMMzIuMyA1MTJjLTMuMyAwLTYuNi0uNC05LjYtMS40LTkuMi0yLjgtMTYuNy05LjYtMjAuNC0xOC42LTEuMy0zLjMtMi4yLTYuOS0yLjMtMTAuNy0uMi0zLjcgLjMtNy4zIDEuMy0xMC43IDIuOC05LjIgOS42LTE2LjcgMTguNi0yMC40IDMtMS4yIDYuMi0yIDkuNS0yLjJMNDMzLjMgNDEyYzguMy0uNyAxNC43LTcuNyAxNC43LTE2LjEgMC00LjMtMS43LTguNC00LjctMTEuNGwtNDQuNC00NC40Yy0zMC0zMC00Ni45LTcwLjctNDYuOS0xMTMuMWwwLTEwMi41ek01MTIgNzIuM2MwLS4xIDAtLjIgMC0uM3MwLS4yIDAtLjNsMCAuNnptLTEuMyA3LjRMNDY0LjMgNjguMWMtLjIgMS4zLS4zIDIuNi0uMyAzLjkgMCAxMy4zIDEwLjcgMjQgMjQgMjQgMTAuNiAwIDE5LjUtNi44IDIyLjctMTYuM3pNMTMwLjkgMTE2LjVjMTYuMy0xNC41IDQwLjQtMTYuMiA1OC41LTQuMWwxMzAuNiA4NyAwIDI3LjVjMCAzMi44IDguNCA2NC44IDI0IDkzbC0yMzIgMGMtNi43IDAtMTIuNy00LjItMTUtMTAuNHMtLjUtMTMuMyA0LjYtMTcuN0wxNzEgMjMyLjMgMTguNCAyNTUuOGMtNyAxLjEtMTMuOS0yLjYtMTYuOS05Uy4xIDIzMi44IDUuNCAyMjhMMTMwLjkgMTE2LjV6Il0KICAgIH07CiAgICBmYUhvdXJnbGFzc0VuZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VyZ2xhc3MtZW5kIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbODk4NywgImhvdXJnbGFzcy0zIl0sICJmMjUzIiwgIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDAgMTFjMCA0Mi40IDE2LjkgODMuMSA0Ni45IDExMy4xbDY3LjkgNjcuOS02Ny45IDY3LjlDNDguOSAzNTMuOSAzMiAzOTQuNiAzMiA0MzdsMCAxMWMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTExYzAtNDIuNC0xNi45LTgzLjEtNDYuOS0xMTMuMWwtNjcuOS02Ny45IDY3LjktNjcuOWMzMC0zMCA0Ni45LTcwLjcgNDYuOS0xMTMuMWwwLTExYzE3LjcgMCAzMi0xNC4zIDMyLTMyUzM2OS43IDAgMzUyIDBMMzIgMHpNOTYgNzVsMC0xMSAxOTIgMCAwIDExYzAgMjUuNS0xMC4xIDQ5LjktMjguMSA2Ny45bC02Ny45IDY3LjktNjcuOS02Ny45QzEwNi4xIDEyNC45IDk2IDEwMC40IDk2IDc1eiJdCiAgICB9OwogICAgZmFIb3VyZ2xhc3MzMiA9IGZhSG91cmdsYXNzRW5kOwogICAgZmFHcmlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdyaXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs1ODExOSwgImdyaWQtaG9yaXpvbnRhbCIsICJncmlwLWhvcml6b250YWwiXSwgImY1OGQiLCAiTTg4IDk2YzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMHpNMjgwIDIyNGwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDB6bTE5MiAwbC00OCAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MHptMCAxOTJsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDQ4YzAgMjIuMS0xNy45IDQwLTQwIDQwek0yODAgMjg4YzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMHpNODggNDE2bC00OCAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MHoiXQogICAgfTsKICAgIGZhR3JpZEhvcml6b250YWwgPSBmYUdyaXA7CiAgICBmYUdyaXBIb3Jpem9udGFsID0gZmFHcmlwOwogICAgZmFCb3JkZXJUb3BMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvcmRlci10b3AtbGVmdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJib3JkZXItc3R5bGUiXSwgImY4NTMiLCAiTTAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNTIgMzUyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQ0OHptMTI4IDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMi0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzJ6bTEyOCAwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzItMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyem0xNjAgMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyek0zODQgMTkyYTMyIDMyIDAgMSAwIDY0IDAgMzIgMzIgMCAxIDAgLTY0IDB6bTMyIDE2MGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUJvcmRlclN0eWxlID0gZmFCb3JkZXJUb3BMZWZ0OwogICAgZmFMaXN0VWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGlzdC11bCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJsaXN0LWRvdHMiXSwgImYwY2EiLCAiTTQ4IDE0NGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTE5MiA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwxOTIgNjR6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yODggMHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI4OCAwek00OCA0NjRhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek05NiAyNTZhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXQogICAgfTsKICAgIGZhTGlzdERvdHMgPSBmYUxpc3RVbDsKICAgIGZhUGVvcGxlUm9iYmVyeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW9wbGUtcm9iYmVyeSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTM2IiwgIk00ODguMiA1OS4xQzQ3OC4xIDk5LjYgNDQxLjcgMTI4IDQwMCAxMjhzLTc4LjEtMjguNC04OC4yLTY4LjlMMzAzIDI0LjJDMjk4LjggNy4xIDI4MS40LTMuMyAyNjQuMiAxUzIzNi43IDIyLjYgMjQxIDM5LjhsOC43IDM0LjljMTEgNDQgNDAuMiA3OS42IDc4LjMgOTkuNkwzMjggNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjggMTYgMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzA1LjdjMzguMS0yMCA2Ny4zLTU1LjYgNzguMy05OS42TDU1OSAzOS44YzQuMy0xNy4xLTYuMS0zNC41LTIzLjMtMzguOFM1MDEuMiA3LjEgNDk3IDI0LjJsLTguNyAzNC45ek00MDAgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek04MCA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bS04IDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDk2IDAgLjYgMCAxOTEuNGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4IDE2IDAgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIyNy4zIDEzIDIwLjVjNS45IDkuMiAxNi4xIDE0LjkgMjcgMTQuOWw0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMC40IDAtMzcuNC01OC45QzE1Ny42IDE0MiAxMzIuMSAxMjggMTA0LjcgMTI4TDcyIDEyOHoiXQogICAgfTsKICAgIGZhTW9iaWxlQnV0dG9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vYmlsZS1idXR0b24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjEwYiIsICJNODAgMEM0NC43IDAgMTYgMjguNyAxNiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw4MCAwek0xOTIgNDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyIDMyIDE0LjMgMzIgMzItMTQuMyAzMi0zMiAzMnoiXQogICAgfTsKICAgIGZhQXJyb3dEb3duQVogPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctZG93bi1hLXoiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic29ydC1hbHBoYS1hc2MiLCAic29ydC1hbHBoYS1kb3duIl0sICJmMTVkIiwgIk0yMzAuNiAzOTAuNmwtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC04MC04MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEw5NiAzNzAuNyA5NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzA2LjcgMjUuNC0yNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6bTE4Mi0zNDAuOWM1MC43IDEwMS4zIDc3LjMgMTU0LjcgODAgMTYwIDcuOSAxNS44IDEuNSAzNS0xNC4zIDQyLjlzLTM1IDEuNS00Mi45LTE0LjNsLTcuMi0xNC4zLTg4LjQgMC03LjIgMTQuM2MtNy45IDE1LjgtMjcuMSAyMi4yLTQyLjkgMTQuM3MtMjIuMi0yNy4xLTE0LjMtNDIuOWMyLjctNS4zIDI5LjMtNTguNyA4MC0xNjAgNS40LTEwLjggMTYuNS0xNy43IDI4LjYtMTcuN3MyMy4yIDYuOCAyOC42IDE3Ljd6TTM4NCAxMzUuNmwtMjAuMiA0MC40IDQwLjQgMC0yMC4yLTQwLjR6TTI4OCAzMjBjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOUwzOTcuMyA0MTYgNDQ4IDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45bDczLjQtNzMuNC01MC43IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFTb3J0QWxwaGFBc2MgPSBmYUFycm93RG93bkFaOwogICAgZmFTb3J0QWxwaGFEb3duID0gZmFBcnJvd0Rvd25BWjsKICAgIGZhTW9uZXlCaWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vbmV5LWJpbGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBkNiIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6bTE5MiA5NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnptMTkyIDI0YzAgNC40LTMuNiA4LjEtOCA3LjUtMjktMy42LTUxLjktMjYuNi01NS41LTU1LjUtLjUtNC40IDMuMS04IDcuNS04bDQ4IDBjNC40IDAgOCAzLjYgOCA4bDAgNDh6TTY0IDMyOGMwLTQuNCAzLjYtOC4xIDgtNy41IDI5IDMuNiA1MS45IDI2LjYgNTUuNSA1NS41IC41IDQuNC0zLjEgOC03LjUgOGwtNDggMGMtNC40IDAtOC0zLjYtOC04bDAtNDh6bTgtMTM2LjVjLTQuNCAuNS04LTMuMS04LTcuNWwwLTQ4YzAtNC40IDMuNi04IDgtOGw0OCAwYzQuNCAwIDguMSAzLjYgNy41IDgtMy42IDI5LTI2LjYgNTEuOS01NS41IDU1LjV6bTM2OCAxMjljNC40LS41IDggMy4xIDggNy41bDAgNDhjMCA0LjQtMy42IDgtOCA4bC00OCAwYy00LjQgMC04LjEtMy42LTcuNS04IDMuNi0yOSAyNi42LTUxLjkgNTUuNS01NS41eiJdCiAgICB9OwogICAgZmFDaXJjbGVNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtbWludXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibWludXMtY2lyY2xlIl0sICJmMDU2IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTY4IDIzMmwxNzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYU1pbnVzQ2lyY2xlID0gZmFDaXJjbGVNaW51czsKICAgIGZhQXJyb3dQb2ludGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXBvaW50ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsibW91c2UtcG9pbnRlciJdLCAiZjI0NSIsICJNNzcuMyAyLjVjOC4xLTQuMSAxNy45LTMuMiAyNS4xIDIuM2wzMjAgMjM5LjljOC4zIDYuMiAxMS42IDE3IDguNCAyNi44cy0xMi40IDE2LjQtMjIuOCAxNi40bC0xNTIuMyAwIDg4LjkgMTc3LjdjNy45IDE1LjggMS41IDM1LTE0LjMgNDIuOXMtMzUgMS41LTQyLjktMTQuM2wtODguOS0xNzcuNy05MS4zIDEyMS44Yy02LjIgOC4zLTE3IDExLjYtMjYuOCA4LjRTNjQgNDM0LjMgNjQgNDI0TDY0IDI0YzAtOS4xIDUuMS0xNy40IDEzLjMtMjEuNXoiXQogICAgfTsKICAgIGZhTW91c2VQb2ludGVyID0gZmFBcnJvd1BvaW50ZXI7CiAgICBmYVNxdWFyZVNoYXJlTm9kZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXNoYXJlLW5vZGVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInNoYXJlLWFsdC1zcXVhcmUiXSwgImYxZTEiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTM2OCAxNjBjMCAzNS4zLTI4LjcgNjQtNjQgNjQtMTUuNCAwLTI5LjUtNS40LTQwLjYtMTQuNWwtODUuMyA0Ni41IDg1LjMgNDYuNWMxMS05LjEgMjUuMi0xNC41IDQwLjYtMTQuNSAzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NC02NC0yOC43LTY0LTY0YzAtMi41IC4xLTQuOSAuNC03LjNMMTU4LjUgMzAwYy0xMS43IDEyLjMtMjguMiAyMC00Ni41IDIwLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRjMTguMyAwIDM0LjggNy43IDQ2LjUgMjBsODEuOS00NC43Yy0uMy0yLjQtLjQtNC45LS40LTcuMyAwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0eiJdCiAgICB9OwogICAgZmFTaGFyZUFsdFNxdWFyZSA9IGZhU3F1YXJlU2hhcmVOb2RlczsKICAgIGZhVGFibGVDZWxsc0xhcmdlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlLWNlbGxzLWxhcmdlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRoLWxhcmdlIl0sICJmMDA5IiwgIk0zODQgOTZsLTEyOCAwIDAgMTI4IDEyOCAwIDAtMTI4em02NCAxMjhsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTI4ek02NCAyODhsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6bTEyOC02NGwwLTEyOC0xMjggMCAwIDEyOCAxMjggMHptNjQgNjRsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6Il0KICAgIH07CiAgICBmYVRoTGFyZ2UgPSBmYVRhYmxlQ2VsbHNMYXJnZTsKICAgIGZhQ2F0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODAwOF0sICJmNmJlIiwgIk02NCA5NmM1MyAwIDk2IDQzIDk2IDk2bDAgODUuOGMyOS43LTQ0LjcgNzcuOC03Ni4yIDEzMy40LTg0IDI1LjYgNjAgODUuMiAxMDIuMSAxNTQuNiAxMDIuMSAxMC45IDAgMjEuNi0xLjEgMzItMy4xTDQ4MCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNDAuOC0xMzYgMTA4LjggNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTQ0IDBjLTUzIDAtOTYtNDMtOTYtOTZsMC0yMjRjMC0xNi42LTEyLjYtMzAuMi0yOC43LTMxLjhsLTYuNi0uM0M0NC42IDE1OC4yIDMyIDE0NC42IDMyIDEyOCAzMiAxMTAuMyA0Ni4zIDk2IDY0IDk2ek01MzMuOCAzLjJDNTQ0LjItNS41IDU2MCAxLjkgNTYwIDE1LjVMNTYwIDEyOGMwIDYxLjktNTAuMSAxMTItMTEyIDExMlMzMzYgMTg5LjkgMzM2IDEyOGwwLTExMi41YzAtMTMuNiAxNS44LTIxIDI2LjItMTIuM0w0MTYgNDggNDgwIDQ4IDUzMy44IDMuMnpNNDAwIDEwOGEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6bTk2IDBhMjAgMjAgMCAxIDAgMCA0MCAyMCAyMCAwIDEgMCAwLTQweiJdCiAgICB9OwogICAgZmFDYWxlbmRhcldlZWsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXItd2VlayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNzg0IiwgIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTAgMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTE5MiAweiJdCiAgICB9OwogICAgZmFDb2RlQ29tcGFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb2RlLWNvbXBhcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTEzYSIsICJNMTk4LjggMS44YzktMy43IDE5LjMtMS43IDI2LjIgNS4ybDU2IDU2YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC01NiA1NmMtNi45IDYuOS0xNy4yIDguOS0yNi4yIDUuMlMxODQgMTQ1LjcgMTg0IDEzNmwwLTI0LTI0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjE0LjdjMjguMyAxMi4zIDQ4IDQwLjUgNDggNzMuMyAwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTMyLjggMTkuNy02MSA0OC03My4zTDY0IDE0NGMwLTUzIDQzLTk2IDk2LTk2bDI0IDAgMC0yNGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJ6TTM5MiA4MGEyNCAyNCAwIDEgMCA0OCAwIDI0IDI0IDAgMSAwIC00OCAwem0tOCA3My4zYy0yOC4zLTEyLjMtNDgtNDAuNS00OC03My4zIDAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAzMi44LTE5LjcgNjEtNDggNzMuM0w0NDggMzY4YzAgNTMtNDMgOTYtOTYgOTZsLTI0IDAgMCAyNGMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC01Ni01NmMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNTYtNTZjNi45LTYuOSAxNy4yLTguOSAyNi4yLTUuMlMzMjggMzY2LjMgMzI4IDM3NmwwIDI0IDI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yMTQuN3pNNzIgNDMyYTI0IDI0IDAgMSAwIDQ4IDAgMjQgMjQgMCAxIDAgLTQ4IDB6Il0KICAgIH07CiAgICBmYVJvYWRDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb2FkLWNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTY2IiwgIk0yODcuOSAzMmwtNzYuMiAwYy0yOS40IDAtNTUuMSAyMC4xLTYyLjEgNDguNkw2NS40IDQyMC41QzU3LjkgNDUwLjcgODAuOCA0ODAgMTEyIDQ4MGwyMDkuNCAwYy0xMS4yLTI0LjQtMTcuNC01MS40LTE3LjQtODAgMC0yOC42IDYuMi01NS43IDE3LjQtODAtLjUgMC0xIDAtMS42IDAtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNDkuMmMzNS4yLTQwIDg2LjctNjUuMiAxNDQuMi02NS4yIDkgMCAxNy44IC42IDI2LjQgMS44bC0zMi0xMjkuMkM0ODMuNCA1Mi4xIDQ1Ny44IDMyIDQyOC4zIDMybC03Ni41IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0ek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN2wtMzYuNyAzNi43IDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXQogICAgfTsKICAgIGZhUGFsbGV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhbGxldCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNDgyIiwgIk0zMiAzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDY0LTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC02NCAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyMHptOTYgNjRsMTI4IDAgMCA2NC0xMjggMCAwLTY0em0xOTIgMGwxMjggMCAwIDY0LTEyOCAwIDAtNjR6Il0KICAgIH07CiAgICBmYUNha2VDYW5kbGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNha2UtY2FuZGxlcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzg3NCwgImJpcnRoZGF5LWNha2UiLCAiY2FrZSJdLCAiZjFmZCIsICJNODYuNC0xMC41TDYxLjggMzEuNkM1OCAzOC4xIDU2IDQ1LjYgNTYgNTMuMkw1NiA1NmMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwbDAtMi44YzAtNy42LTItMTUtNS44LTIxLjZMMTA1LjYtMTAuNWMtMi0zLjQtNS43LTUuNS05LjYtNS41cy03LjYgMi4xLTkuNiA1LjV6bTEyOCAwTDE4OS44IDMxLjZjLTMuOCA2LjUtNS44IDE0LTUuOCAyMS42bDAgMi44YzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBsMC0yLjhjMC03LjYtMi0xNS01LjgtMjEuNkwyMzMuNi0xMC41Yy0yLTMuNC01LjctNS41LTkuNi01LjVzLTcuNiAyLjEtOS42IDUuNXpNMzE3LjggMzEuNmMtMy44IDYuNS01LjggMTQtNS44IDIxLjZsMCAyLjhjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MGwwLTIuOGMwLTcuNi0yLTE1LTUuOC0yMS42TDM2MS42LTEwLjVjLTItMy40LTUuNy01LjUtOS42LTUuNXMtNy42IDIuMS05LjYgNS41TDMxNy44IDMxLjZ6TTEyOCAxNjBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA1My41QzI2LjcgMjI2LjYgMCAyNjIuMiAwIDMwNGwwIDIwLjhjMjAuOSAxLjMgNDEuNiA3LjMgNjAuMyAxOGw3LjEgNC4xYzI2LjMgMTUgNTguOSAxMy40IDgzLjYtNC4yIDQzLjctMzEuMiAxMDIuMy0zMS4yIDE0NiAwIDI0LjYgMTcuNiA1Ny4zIDE5LjMgODMuNiA0LjJsNy4xLTQuMWMxOC43LTEwLjcgMzkuMy0xNi43IDYwLjMtMThsMC0yMC44YzAtNDEuOC0yNi43LTc3LjQtNjQtOTAuNWwwLTUzLjVjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0OC02NCAwIDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0OC02NCAwIDAtNDh6TTQ0OCAzNzNjLTEyLjcgMS4yLTI1LjEgNS0zNi41IDExLjVsLTcuMSA0LjFjLTQyLjYgMjQuMy05NS40IDIxLjctMTM1LjMtNi44LTI3LTE5LjMtNjMuMi0xOS4zLTkwLjIgMC0zOS45IDI4LjUtOTIuNyAzMS4yLTEzNS4zIDYuOGwtNy4xLTQuMUMyNS4xIDM3OCAxMi43IDM3NC4xIDAgMzczbDAgNzVjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC03NXoiXQogICAgfTsKICAgIGZhQmlydGhkYXlDYWtlID0gZmFDYWtlQ2FuZGxlczsKICAgIGZhQ2FrZSA9IGZhQ2FrZUNhbmRsZXM7CiAgICBmYUJ1Z1NsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1Zy1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNDkwIiwgIk03LTI0LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBMMjQxLjggMTc2IDM0NCAxNzZjMTQuMiAwIDI3LjcgMi44IDQwIDhsMTA4LjgtODEuNmMxNC4xLTEwLjYgMzQuMi03LjcgNDQuOCA2LjRzNy43IDM0LjItNi40IDQ0LjhsLTk3LjggNzMuM2M1LjMgOC45IDkuMyAxOC43IDExLjggMjkuMWw5OC44IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDAgMCAzMmMwIDkuNS0uOCAxOC43LTIuNCAyNy44TDU2OSA1MDMuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDcgOS4xQy0yLjMtLjMtMi4zLTE1LjUgNy0yNC45ek0zOTguMiA0NjhjLTIzLjIgMjIuMS01MyAzNy4yLTg2LjIgNDIuMmwwLTEyOC40IDg2LjIgODYuMnpNMjY0IDMzMy44bDAgMTc2LjRjLTUxLjItNy43LTk0LjUtMzkuNy0xMTcuNy04My45TDgzLjIgNDczLjZjLTE0LjEgMTAuNi0zNC4yIDcuNy00NC44LTYuNHMtNy43LTM0LjIgNi40LTQ0LjhsODMuNC02Mi41Yy0uMS0yLjYtLjItNS4yLS4yLTcuOWwwLTMyLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTguOCAwYzMuMy0xMy45IDkuMy0yNi43IDE3LjYtMzcuOEwyNjQgMzMzLjh6TTM1NS42IDEyOGwtODIuNCAwLTcyLjMtNzIuM0MyMTYuMSAyMi44IDI0OS40IDAgMjg4IDAgMzQxIDAgMzg0IDQzIDM4NCA5NmwwIDMuNmMwIDE1LjctMTIuNyAyOC40LTI4LjQgMjguNHoiXQogICAgfTsKICAgIGZhVGFycCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YXJwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1N2IiLCAiTTQ0OCA2NGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE0OS41YzAgMTctNi43IDMzLjMtMTguNyA0NS4zTDM4Ni43IDQyOS4zYy0xMiAxMi0yOC4zIDE4LjctNDUuMyAxOC43TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDB6bTUuNSAyMDhMMzYwIDI3MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA5My41IDExNy41LTExNy41ek05NiAxOTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFEaWFncmFtUHJlZGVjZXNzb3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGlhZ3JhbS1wcmVkZWNlc3NvciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNDc3IiwgIk0yODkuMiAxMzcuOWMyLjUtNiA4LjMtOS45IDE0LjgtOS45bDQwIDAgMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtOTggMGMxLjMgNS4xIDIgMTAuNSAyIDE2bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTk2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjU2IDBjMzkuOCAwIDcyIDMyLjIgNzIgNzJsMCAyNCA0MCAwYzYuNSAwIDEyLjMgMy45IDE0LjggOS45czEuMSAxMi45LTMuNSAxNy40bC02NCA2NGMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTY0LTY0Yy00LjYtNC42LTUuOS0xMS41LTMuNS0xNy40ek0zODQgMzUybC0zMjAgMCAwIDY0IDMyMCAwIDAtNjR6bTY0IDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0eiJdCiAgICB9OwogICAgZmFGYWNlRmx1c2hlZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1mbHVzaGVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTYzLCAiZmx1c2hlZCJdLCAiZjU3OSIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMTY4IDM5MmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMjggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTI4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em0tOC05NmE3MiA3MiAwIDEgMCAwLTE0NCA3MiA3MiAwIDEgMCAwIDE0NHptMjY0LTcyYTcyIDcyIDAgMSAwIC0xNDQgMCA3MiA3MiAwIDEgMCAxNDQgMHptLTI4OCAwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTE5MiAwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il0KICAgIH07CiAgICBmYUZsdXNoZWQyID0gZmFGYWNlRmx1c2hlZDI7CiAgICBmYURpYWdyYW1OZXh0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpYWdyYW0tbmV4dCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNDc2IiwgIk0zODQgMjI0YzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NmwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDEyOCAwIDAgNjQtMzIgMGMtNi41IDAtMTIuMyAzLjktMTQuOCA5LjlzLTEuMSAxMi45IDMuNSAxNy40bDY0IDY0YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwbDY0LTY0YzQuNi00LjYgNS45LTExLjUgMy41LTE3LjRTMjk0LjUgMjg4IDI4OCAyODhsLTMyIDAgMC02NCAxMjggMHpNNjQgMjg4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTM0IDBjNS42IDIxLjctLjUgNDUuMS0xNi43IDYxLjNsLTY0IDY0Yy0yNSAyNS02NS41IDI1LTkwLjUgMGwtNjQtNjRDOTguNiAzMzMuMSA5Mi40IDMwOS43IDk4IDI4OGwtMzQgMHoiXQogICAgfTsKICAgIGZhQW5jaG9yQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYW5jaG9yLWNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGFjIiwgIk0zMjAuNSA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0tMzItOTZjLTUzIDAtOTYgNDMtOTYgOTYgMCA0MS44IDI2LjcgNzcuNCA2NCA5MC41bDAgMjU3LjljLTYyLjktMTQuMy0xMTAuMi02OS43LTExMS45LTEzNi41bDE2LjEgMTQuMWMxMCA4LjcgMjUuMSA3LjcgMzMuOS0yLjNzNy43LTI1LjEtMi4zLTMzLjlsLTY0LTU2Yy05LTcuOS0yMi42LTcuOS0zMS42IDBsLTY0IDU2Yy0xMCA4LjctMTEgMjMuOS0yLjMgMzMuOXMyMy45IDExIDMzLjkgMi4zbDE2LjItMTQuMmMyLjEgMTEzLjEgOTQuNCAyMDQuMSAyMDggMjA0LjEgMTYuNiAwIDMyLjctMS45IDQ4LjItNS42LTIwLjMtMzAuNS0zMi4yLTY3LTMyLjItMTA2LjQgMC0yNy4zIDUuNy01My4zIDE2LTc2LjlsMC0xMzYuNmMzNy4zLTEzLjIgNjQtNDguNyA2NC05MC41IDAtNTMtNDMtOTYtOTYtOTZ6bTIwOCA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43bC0zNi43IDM2LjcgMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42eiJdCiAgICB9OwogICAgZmFQZXJzb25DaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NDMiLCAiTTI4MCAyNGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6bTI0IDIxMi43TDM0MSAyODYuNmMxMi44LTE3LjUgMjguNS0zMi43IDQ2LjMtNDVsLTU2LjItNzUuN0MzMDYgMTMyIDI2Ni4zIDExMiAyMjQgMTEycy04MiAyMC0xMDcuMiA1My45bC03MC41IDk1Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZMMTQ0IDIzNi43IDE0NCA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNzUuM3pNNDk2IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTIyLjYtMTQ0bDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNkw1MTguNiA0MDB6Il0KICAgIH07CiAgICBmYVNwYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcGEiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjViYiIsICJNMTY5LjcgMjI3LjVjMzQuMyAxOC43IDY0LjUgNDQuMSA4OC44IDc0LjUgMTEuMSAxMy45IDIxIDI4LjkgMjkuNCA0NC44IDguNS0xNS45IDE4LjMtMzAuOCAyOS40LTQ0LjggMjQuMy0zMC41IDU0LjUtNTUuOSA4OC44LTc0LjUgNDEuNy0yMi43IDg5LjQtMzUuNSAxMzkuNy0zNS41bDkuOSAwYzExLjEgMCAyMC4xIDkgMjAuMSAyMC4xIDAgMTQ4LTExOS45IDI2Ny45LTI2Ny45IDI2Ny45bC00MC4yIDBDMTE5LjkgNDgwIDAgMzYwLjEgMCAyMTIuMSAwIDIwMSA5IDE5MiAyMC4xIDE5Mmw5LjkgMGM1MC40IDAgOTguMSAxMi44IDEzOS43IDM1LjV6TTMwMy45IDM4YzE2LjkgMTUuOSA2MS40IDYzLjQgODkgMTQyLjMtNDAuMSAyMC4yLTc1LjggNDguMi0xMDQuOSA4Mi4xLTI5LjItMzMuOS02NC44LTYxLjgtMTA0LjktODIuMSAyNy42LTc4LjkgNzIuMi0xMjYuNCA4OS0xNDIuMyA0LjMtNC4xIDEwLTYgMTUuOS02czExLjYgMiAxNS45IDZ6Il0KICAgIH07CiAgICBmYUJhcnNQcm9ncmVzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXJzLXByb2dyZXNzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRhc2tzLWFsdCJdLCAiZjgyOCIsICJNMjg4IDE2MGw5NiAwIDAtNjQtOTYgMCAwIDY0ek0wIDE2MEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDM1MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggMjI0Yy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE2ek0xNjAgNDE2bDIyNCAwIDAtNjQtMjI0IDAgMCA2NHpNMCA0MTZsMC04MGMwLTI2LjUgMjEuNS00OCA0OC00OGwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNnoiXQogICAgfTsKICAgIGZhVGFza3NBbHQgPSBmYUJhcnNQcm9ncmVzczsKICAgIGZhSGVhcnRDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydC1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRmZCIsICJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDE3LjYtMy40IDM1LjYtOS41IDUzLjctMjEuOC04LjYtNDUuNi0xMy40LTcwLjUtMTMuNC0xMDYgMC0xOTIgODYtMTkyIDE5MiAwIDI4LjUgNi4yIDU1LjYgMTcuNCA4MC0uNSAwLS45IDAtMS40IDAtMTUuNSAwLTMwLjgtNC42LTQzLjEtMTQuMS03My01NS43LTIxMi45LTE4Ni0yMTIuOS0yOTguMmwwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXpNMjg4IDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMDEuNC02MC45Yy03LjEtNS4yLTE3LjItMy42LTIyLjQgMy41bC01MyA3Mi45LTI2LjgtMjYuOGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGMzLjMgMy4zIDcuOSA1IDEyLjYgNC42czguOS0yLjggMTEuNy02LjVsNjQtODhjNS4yLTcuMSAzLjYtMTcuMi0zLjUtMjIuM3oiXQogICAgfTsKICAgIGZhTWFyc1N0cm9rZVJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnMtc3Ryb2tlLXJpZ2h0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbOTg5NywgIm1hcnMtc3Ryb2tlLWgiXSwgImYyMmIiLCAiTTMyMC41IDI1NmExMTIgMTEyIDAgMSAwIC0yMjQgMCAxMTIgMTEyIDAgMSAwIDIyNCAwek0yMDguNSA4MGM4Ni4zIDAgMTU4LjEgNjIuMSAxNzMuMSAxNDQuMSAxLS4xIDEuOS0uMSAyLjktLjFsMTYgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiA2MS40IDAtMjIuNC0yOGMtMTEtMTMuOC04LjgtMzMuOSA1LTQ1czMzLjktOC44IDQ1IDVsNjQgODBjOS4zIDExLjcgOS4zIDI4LjMgMCA0MGwtNjQgODBjLTExIDEzLjgtMzEuMiAxNi00NSA1cy0xNi0zMS4yLTUtNDVsMjIuNC0yOC02MS40IDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTE2IDBjLTEgMC0xLjkgMC0yLjktLjEtMTUgODItODYuOCAxNDQuMS0xNzMuMSAxNDQuMS05Ny4yIDAtMTc2LTc4LjgtMTc2LTE3NnM3OC44LTE3NiAxNzYtMTc2eiJdCiAgICB9OwogICAgZmFNYXJzU3Ryb2tlSCA9IGZhTWFyc1N0cm9rZVJpZ2h0OwogICAgZmFUb3dlck9ic2VydmF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvd2VyLW9ic2VydmF0aW9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU1ODYiLCAiTTIwOS43IDMuNGM5LTQuNSAxOS42LTQuNSAyOC42IDBsMTYwIDgwYzE1LjggNy45IDIyLjIgMjcuMSAxNC4zIDQyLjktNS42IDExLjItMTYuOSAxNy43LTI4LjYgMTcuN2wwIDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMyAwIDMyIDE5MiA0NSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0NSAwIDMyLTE5Mi0xMyAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTgwYy0xMS43IDAtMjMtNi41LTI4LjYtMTcuNy03LjktMTUuOC0xLjUtMzUgMTQuMy00Mi45bDE2MC04MHpNMzEwLjcgNDQ4bC04Ni43LTYxLjktODYuNyA2MS45IDE3My40IDB6bS0xNTMtMTkybC0zLjUgMjEuMiA2OS45IDQ5LjkgNjkuOS00OS45LTMuNS0yMS4yLTEzMi43IDB6bS0xMi4zIDczLjlsLTEwLjEgNjAuNiA0Ny41LTMzLjktMzcuNC0yNi43em0xMTkuOSAyNi43bDQ3LjUgMzMuOS0xMC4xLTYwLjYtMzcuNCAyNi43ek0xNTIgMTI4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXQogICAgfTsKICAgIGZhU3RlcmxpbmdTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0ZXJsaW5nLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxNjMsICJnYnAiLCAicG91bmQtc2lnbiJdLCAiZjE1NCIsICJNOTEuMyAyODhsLTM0LjggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyMS40IDBDMzcuMyAxNDcuMyAxMDUuMSA0MiAyMDcuNiA0Mmw4LjIgMGMzMy42IDAgNjYuMiAxMS4zIDkyLjUgMzIuMmwxNi4xIDEyLjdjMTMuOSAxMSAxNi4yIDMxLjEgNS4yIDQ1cy0zMS4xIDE2LjItNDUgNS4ybC0xNi4xLTEyLjdjLTE1LTExLjktMzMuNi0xOC40LTUyLjgtMTguNGwtOC4yIDBjLTU3LjMgMC05NC43IDU5LjktNjkuNyAxMTEuNCAzLjYgNy40IDYuNiAxNC45IDkuMSAyMi42bDE0OS41IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0MS4yIDBjMSAzNS4zLTguNyA3MC42LTI4LjkgMTAwLjlsLTE4LjEgMjcuMSAyMTIuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNzIgMGMtMTEuOCAwLTIyLjYtNi41LTI4LjItMTYuOXMtNS0yMyAxLjYtMzIuOWw1MS4yLTc2LjhjMTMuMS0xOS42IDE5LjItNDIuNiAxOC4yLTY1LjR6Il0KICAgIH07CiAgICBmYUdicCA9IGZhU3RlcmxpbmdTaWduOwogICAgZmFQb3VuZFNpZ24gPSBmYVN0ZXJsaW5nU2lnbjsKICAgIGZhRmF1Y2V0RHJpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYXVjZXQtZHJpcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODY4OF0sICJlMDA2IiwgIk0yMjQgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyTDk2IDY0Qzc4LjMgNjQgNjQgNzguMyA2NCA5NnMxNC4zIDMyIDMyIDMybDk2IDAgMCA2NC0xOC43IDBjLTguNSAwLTE2LjYgMy40LTIyLjYgOS40TDEyOCAyMjQgMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEwMC4xIDBjMjAuMiAyOSA1My45IDQ4IDkxLjkgNDhzNzEuNy0xOSA5MS45LTQ4bDM2LjEgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzIgMC04OC40LTcxLjYtMTYwLTE2MC0xNjBsLTMyIDAtMjIuNi0yMi42Yy02LTYtMTQuMS05LjQtMjIuNi05LjRsLTE4LjcgMCAwLTY0IDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDBjMC0xNy43LTE0LjMtMzItMzItMzJ6TTQzNi44IDQ1NS40bC0xOC4yIDQyLjRjLTEuOCA0LjEtMi43IDguNi0yLjcgMTMuMWwwIDEuMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMS4yYzAtNC41LS45LTguOS0yLjctMTMuMWwtMTguMi00Mi40Yy0xLjktNC41LTYuMy03LjQtMTEuMi03LjRzLTkuMiAyLjktMTEuMiA3LjR6Il0KICAgIH07CiAgICBmYUNpcmNsZUluZm8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWluZm8iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiaW5mby1jaXJjbGUiXSwgImYwNWEiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMjQgMTYwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bS04IDY0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA4OCA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQgMCAwLTY0LTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUluZm9DaXJjbGUgPSBmYUNpcmNsZUluZm87CiAgICBmYUZlYXRoZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmVhdGhlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTcxOF0sICJmNTJkIiwgIk0zNTIgMGM0MSAwIDgwLjMgMTYuMyAxMDkuMiA0NS4ybDUuNSA1LjVjMjkgMjkgNDUuMyA2OC4zIDQ1LjMgMTA5LjIgMCAyNC4xLTUuNyA0Ny42LTE2LjIgNjguOC0xLjkgMy43LTUuMyA2LjUtOS4zIDcuN0wzNzQuNSAyNzBjLTMuOSAxLjItNi41IDQuNy02LjUgOC44IDAgNS4xIDQuMSA5LjIgOS4yIDkuMmwzMi4yIDBjMTQuMyAwIDIxLjQgMTcuMiAxMS4zIDI3LjNsLTIyLjQgMjIuNGMtMS45IDEuOS00LjIgMy4yLTYuNyA0bC04MSAyNC4zYy0zLjkgMS4yLTYuNSA0LjctNi41IDguOCAwIDUuMSA0LjEgOS4yIDkuMiA5LjIgMTMuMiAwIDE4LjkgMTUuNyA3LjggMjIuOS00MS4xIDI2LjYtODkuMyA0MS4xLTEzOSA0MS4xbC04NiAwLTQ4IDQ4Yy04LjggOC44LTIzLjIgOC44LTMyIDBzLTguOC0yMy4yIDAtMzJMMjU2IDIyNGM4LjgtOC44IDguOC0yMy4yIDAtMzJzLTIzLjItOC44LTMyIDBMNzkuNSAzMzYuNWMtNS43IDUuNy0xNS41IDEuNy0xNS41LTYuNCAwLTY3LjkgMjctMTMzIDc1LTE4MUwyNDIuOCA0NS4yQzI3MS43IDE2LjMgMzExIDAgMzUyIDB6Il0KICAgIH07CiAgICBmYUJvd2xSaWNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvd2wtcmljZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMmViIiwgIk0xNzYgNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTI0IDQ4bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6TTU2IDE2MGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0wIDI4My40QzAgMjY4LjMgMTIuMyAyNTYgMjcuNCAyNTZsNDU3LjEgMGMxNS4xIDAgMjcuNCAxMi4zIDI3LjQgMjcuNCAwIDcwLjUtNDQuNCAxMzAuNy0xMDYuNyAxNTQuMUw0MDMuNSA0NTJjLTIgMTYtMTUuNiAyOC0zMS44IDI4bC0yMzEuNSAwYy0xNi4xIDAtMjkuOC0xMi0zMS44LTI4bC0xLjgtMTQuNEM0NC40IDQxNC4xIDAgMzUzLjkgMCAyODMuNHpNMjI0IDE4NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptLTk2IDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTEwNCA4OGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0yMTYgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTI5NiA4OGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0xMjAgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTM5MiA4OGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0yOTYgMTZsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhU3RhckhhbGZTdHJva2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0YXItaGFsZi1zdHJva2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsic3Rhci1oYWxmLWFsdCJdLCAiZjVjMCIsICJNMjg4LjEgMzUzLjZjMTAgMCAxOS45IDIuMyAyOSA3bDc0LjQgMzcuOS0xMy04Mi41Yy0zLjItMjAuMiAzLjUtNDAuNyAxNy45LTU1LjJsNTktNTkuMS04Mi41LTEzLjFjLTIwLjItMy4yLTM3LjctMTUuOS00Ny0zNC4xbC0zOC03NC40IDAgMjczLjZ6TTQ1Ny40IDQ4OWMtNy4zIDUuMy0xNyA2LjEtMjUgMkwyODguMSA0MTcuNiAxNDMuOCA0OTFjLTggNC4xLTE3LjcgMy4zLTI1LTJzLTExLTE0LjItOS42LTIzLjJMMTM0LjQgMzA1LjkgMjAgMTkxLjRjLTYuNC02LjQtOC42LTE1LjgtNS44LTI0LjRzMTAuMS0xNC45IDE5LjEtMTYuM2wxNTkuOS0yNS40IDczLjYtMTQ0LjJjNC4xLTggMTIuNC0xMy4xIDIxLjQtMTMuMXMxNy4zIDUuMSAyMS40IDEzLjFMMzgzIDEyNS4zIDU0Mi45IDE1MC43YzguOSAxLjQgMTYuMyA3LjcgMTkuMSAxNi4zcy41IDE4LTUuOCAyNC40TDQ0MS43IDMwNS45IDQ2NyA0NjUuOGMxLjQgOC45LTIuMyAxNy45LTkuNiAyMy4yeiJdCiAgICB9OwogICAgZmFTdGFySGFsZkFsdDIgPSBmYVN0YXJIYWxmU3Ryb2tlMjsKICAgIGZhVGVtcGVyYXR1cmVBcnJvd0Rvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVtcGVyYXR1cmUtYXJyb3ctZG93biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJ0ZW1wZXJhdHVyZS1kb3duIl0sICJlMDNmIiwgIk02NC41IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NHMtMTQ0LTY0LjUtMTQ0LTE0NGMwLTQyLjYgMTguNS04MSA0OC0xMDcuM0w2NC41IDk2em05NiAzMzZjMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zbDAtMjguN2MwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDI4LjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NHpNNDM5LjEgMzEwLjZjLTYgNi0xNC4xIDkuNC0yMi42IDkuNHMtMTYuNi0zLjQtMjIuNi05LjRsLTY0LTY0Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDkuNCA5LjQgMC0xNzguN2MwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTc4LjcgOS40LTkuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC02NCA2NHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVEb3duID0gZmFUZW1wZXJhdHVyZUFycm93RG93bjsKICAgIGZhTWFza1ZlbnRpbGF0b3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFzay12ZW50aWxhdG9yIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MjQiLCAiTTE1Mi4yIDE5MmMtMTUuNCAzOC4zLTI0LjIgNzcuMi0yNC4yIDEwOC44IDAgMTMuMyAxLjUgMjYuMiA0LjQgMzguN2wtMTctMy40Yy0yOS45LTYtNTEuNC0zMi4yLTUxLjQtNjIuOGwwLTgxLjMgODguMiAwem0zMi45LTY0TDY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA4MS4zYzAgNjEgNDMuMSAxMTMuNSAxMDIuOSAxMjUuNWw2Ni4zIDEzLjNjMTguNyAyMi4xIDQyLjkgNDAgNzAuOCA1MS44bDAtODcuOGMtMTAuMS0xNC4yLTE2LTMxLjMtMTYtNDkuNyAwLTQ5LjUgNDMtMTM0LjQgOTYtMTM0LjQgNTIuNSAwIDk2IDg0LjkgOTYgMTM0LjQgMCAxOC40LTUuOSAzNS40LTE2IDQ5LjZsMCA4Ny43YzI3LjYtMTEuOCA1MS43LTI5LjYgNzAuNC01MS42bDY2LjctMTMuM2M1OS44LTEyIDEwMi45LTY0LjUgMTAyLjktMTI1LjVsMC04MS4zYzAtMzUuMy0yOC43LTY0LTY0LTY0bC0xMjEuNSAwYy0zNC44LTU0LjItODIuNS05Ni0xMzQuNS05Ni01Mi42IDAtMTAwLjIgNDEuOC0xMzQuOSA5NnptMzAyLjUgNjRsODguNCAwIDAgODEuM2MwIDMwLjUtMjEuNSA1Ni44LTUxLjQgNjIuOGwtMTcgMy40YzIuOS0xMi40IDQuNS0yNS40IDQuNS0zOC43IDAtMzEuNi04LjktNzAuNS0yNC40LTEwOC44ek0yODggMzIwbDAgMTkyIDY0IDAgMC0xOTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6Il0KICAgIH07CiAgICBmYUZpbGVWaWRlbzIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS12aWRlbyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM4IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNODAgMzA0bDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTI0IDM1IDM1YzMuMiAzLjIgNy41IDUgMTIgNSA5LjQgMCAxNy03LjYgMTctMTdsMC05NC4xYzAtOS40LTcuNi0xNy0xNy0xNy00LjUgMC04LjggMS44LTEyIDVsLTM1IDM1IDAtMjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTk2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyeiJdCiAgICB9OwogICAgZmFBcnJvd1RyZW5kRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy10cmVuZC1kb3duIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwOTciLCAiTTM4NCAzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xNjBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA4Mi43LTE2OS40LTE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMEwxOTIgMjQyLjcgNTQuNiAxMDUuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMEwzMjAgMjA1LjMgNDY2LjcgMzUyIDM4NCAzNTJ6Il0KICAgIH07CiAgICBmYU9pbENhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJvaWwtY2FuIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY2MTMiLCAiTTMyMCAxMjhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMTkyIDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCAzMi0xNzYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NC44YzAgMTkgMTEuMiAzNi4yIDI4LjUgNDMuOWw2Ny41IDMwIDAgMjEuM2MwIDI2LjUgMjEuNSA0OCA0OCA0OGwyNTkuMSAwYzE4LjQgMCAzNS44LTcuOSA0OC0yMS43TDYzMy41IDE4Ny43YzEyLjMtMTMuOS0uMy0zNS40LTE4LjQtMzEuNUw0NDggMTkyIDM5Ny41IDE2Ni44Yy04LjktNC40LTE4LjctNi44LTI4LjYtNi44bC04MC45IDAgMC0zMiAzMiAwek05NiAyMDhsMCA4Ni4xLTQ4LTIxLjMgMC02NC44IDQ4IDB6Il0KICAgIH07CiAgICBmYVBlb3BsZUNhcnJ5Qm94ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlb3BsZS1jYXJyeS1ib3giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsicGVvcGxlLWNhcnJ5Il0sICJmNGNlIiwgIk02NC0zMkE1NiA1NiAwIDEgMSA2NCA4MCA1NiA1NiAwIDEgMSA2NC0zMnpNMCAxNzEuMWMwLTMyLjYgMjYuNS01OS4xIDU5LjEtNTkuMSAyMy41IDAgNDUuNSAxMS4zIDU5LjEgMzAuNGw0OC43IDY4LjJjNS44IDguMiAxNS4xIDEzLjEgMjUuMSAxMy40bDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMxMC0uMyAxOS4zLTUuMiAyNS4xLTEzLjRsNDguNy02OC4yYzEzLjYtMTkuMSAzNS42LTMwLjQgNTkuMS0zMC40IDMyLjYgMCA1OS4xIDI2LjUgNTkuMSA1OS4xTDU3NiAyNzJjMCAzMC4yLTE0LjIgNTguNy0zOC40IDc2LjhsLTc2LjggNTcuNmMtOC4xIDYtMTIuOCAxNS41LTEyLjggMjUuNmwwIDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODBjMC0zMC4yIDE0LjItNTguNyAzOC40LTc2LjhsNDEuNi0zMS4yIDAtODAuMS0yLjggMy45Yy0xOCAyNS4yLTQ3LjEgNDAuMi03OC4xIDQwLjJMMzUyIDI4OGMtLjYgMC0xLjMgMC0xLjktLjEtLjYgMC0xLjMgLjEtMS45IC4xbC0xMjAuNCAwYy0uNiAwLTEuMyAwLTEuOS0uMS0uNiAwLTEuMyAuMS0xLjkgLjFsLTMxLjEgMGMtMzEgMC02MC4xLTE1LTc4LjEtNDAuMmwtMi44LTMuOSAwIDgwLjEgNDEuNiAzMS4yQzE3Ny44IDM3My4zIDE5MiA0MDEuOCAxOTIgNDMybDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04MGMwLTEwLjEtNC43LTE5LjYtMTIuOC0yNS42TDM4LjQgMzQ4LjhDMTQuMiAzMzAuNyAwIDMwMi4yIDAgMjcyTDAgMTcxLjF6TTAgMzc5LjNjMy4xIDIuNyA2LjMgNS40IDkuNiA3LjlMNjQgNDI4IDY0IDUxMmMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDUyOS43IDAgNTEyTDAgMzc5LjN6TTU2OCAyNGE1NiA1NiAwIDEgMSAtMTEyIDAgNTYgNTYgMCAxIDEgMTEyIDB6bTggNDg4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODQgNTQuNC00MC44YzMuMy0yLjUgNi41LTUuMSA5LjYtNy45TDU3NiA1MTJ6Il0KICAgIH07CiAgICBmYVBlb3BsZUNhcnJ5ID0gZmFQZW9wbGVDYXJyeUJveDsKICAgIGZhQ2hhaXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhaXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjk2ODFdLCAiZjZjMCIsICJNMTUyIDI1NmwwLTE4MS44Yy0yNC41IDIwLjUtNDAgNTEuNC00MCA4NS44bDAgOTYgNDAgMHptNDggMGw0OCAwIDAtMjA1LjRjLTcuNy0xLjctMTUuOC0yLjYtMjQtMi42cy0xNi4zIC45LTI0IDIuNkwyMDAgMjU2ek0yOTYgNzQuMmwwIDE4MS44IDQwIDAgMC05NmMwLTM0LjQtMTUuNS02NS4yLTQwLTg1Ljh6TTMyIDI1NmwzMiAwIDAtOTZDNjQgNzEuNiAxMzUuNiAwIDIyNCAwUzM4NCA3MS42IDM4NCAxNjBsMCA5NiAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2LTI1NiAwIDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhV2luZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aW5kIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3MmUiLCAiTTI4OCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDMyIDExMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMjggMGM0OC42IDAgODgtMzkuNCA4OC04OFM0MDguNiAwIDM2MCAwTDMyMCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptNjQgMzUyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZMMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMTI4IDUxMmw0MCAwYzQ4LjYgMCA4OC0zOS40IDg4LTg4cy0zOS40LTg4LTg4LTg4TDMyIDMzNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnoiXQogICAgfTsKICAgIGZhTGF5ZXJHcm91cCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYXllci1ncm91cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWZkIiwgIk0yMzIuNSA1LjJjMTQuOS02LjkgMzIuMS02LjkgNDcgMGwyMTguNiAxMDFjOC41IDMuOSAxMy45IDEyLjQgMTMuOSAyMS44cy01LjQgMTcuOS0xMy45IDIxLjhsLTIxOC42IDEwMWMtMTQuOSA2LjktMzIuMSA2LjktNDcgMEwxMy45IDE0OS44QzUuNCAxNDUuOCAwIDEzNy4zIDAgMTI4czUuNC0xNy45IDEzLjktMjEuOEwyMzIuNSA1LjJ6TTQ4LjEgMjE4LjRsMTY0LjMgNzUuOWMyNy43IDEyLjggNTkuNiAxMi44IDg3LjMgMGwxNjQuMy03NS45IDM0LjEgMTUuOGM4LjUgMy45IDEzLjkgMTIuNCAxMy45IDIxLjhzLTUuNCAxNy45LTEzLjkgMjEuOGwtMjE4LjYgMTAxYy0xNC45IDYuOS0zMi4xIDYuOS00NyAwTDEzLjkgMjc3LjhDNS40IDI3My44IDAgMjY1LjMgMCAyNTZzNS40LTE3LjkgMTMuOS0yMS44bDM0LjEtMTUuOHpNMTMuOSAzNjIuMmwzNC4xLTE1LjggMTY0LjMgNzUuOWMyNy43IDEyLjggNTkuNiAxMi44IDg3LjMgMGwxNjQuMy03NS45IDM0LjEgMTUuOGM4LjUgMy45IDEzLjkgMTIuNCAxMy45IDIxLjhzLTUuNCAxNy45LTEzLjkgMjEuOGwtMjE4LjYgMTAxYy0xNC45IDYuOS0zMi4xIDYuOS00NyAwTDEzLjkgNDA1LjhDNS40IDQwMS44IDAgMzkzLjMgMCAzODRzNS40LTE3LjkgMTMuOS0yMS44eiJdCiAgICB9OwogICAgZmFIZWFkU2lkZU1hc2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhZC1zaWRlLW1hc2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA2MyIsICJNNDQ1LjkgMTkzYy0uMS0uNC0uMi0uOS0uMi0xLjMtMTUuNy0xMDguNC0xMDguOS0xOTEuNy0yMjEuNy0xOTEuNy04NSAwLTE1OSA0Ny40LTE5Ni45IDExNy4yTDI4My4zIDI4OCA0NTYgMjg4IDQ0Mi45IDMzNiAzMzYgMzM2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDk4LjIgMC04LjcgMzItODkuNSAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDgwLjYgMGMtNi43IDE5LjEtMjQuOCAzMi00NS4zIDMyTDI4OCA0NjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTA0LjUtMjQ3LjUtMTY1QzMgMTgyLjEgMCAyMDIuNyAwIDIyNCAwIDI3OCAxOS4xIDMyNy41IDUwLjkgMzY2LjIgNTguOSAzNzUuOSA2NCAzODcuOCA2NCA0MDAuNEw2NCA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsMTI3LjMgMCAuNyAwIDEzMS4zIDBjNDQuOSAwIDgzLjgtMzEuMSA5My42LTc0LjlsMzMuOS0xNTAuM2MzLjMtMTQuNC0uMy0yOS41LTkuNy00MUw0NDUuOSAxOTN6TTI4OCAxOTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhSGFuZHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZHMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2lnbi1sYW5ndWFnZSIsICJzaWduaW5nIl0sICJmMmE3IiwgIk01MTIgMTYwbC0uMSA3Mi42YzAgNDQuOC0xNy42IDg3LjEtNDcuOSAxMTguNC0uMy03Ny00MC4xLTE0OC40LTEwNS40LTE4OS4zbC0xLjktMS4yYzIuNS0zLjcgMi44LTguNiAuNC0xMi43bC02Mi0xMDcuNGMtNi42LTExLjUtMi43LTI2LjIgOC44LTMyLjhTMzMwIDUgMzM2LjYgMTYuNWw2OCAxMTcuOCAwIDAgMCAwIDQzLjMgNzUgLjEtNDkuM2MwLTE3LjcgMTQuNC0zMiAzMi0zMnMzMiAxNC40IDMyIDMyek0yOTguNCAxMjQuMmMtMTQuMS04LjgtMjkuOC0xMi43LTQ1LjItMTIuMUwyMTYuNyA0OC44Yy02LjYtMTEuNS0yLjctMjYuMiA4LjgtMzIuOHMyNi4yLTIuNyAzMi44IDguOGw2Ny4xIDExNi4yLTI3LTE2Ljl6TTIxMS45IDg4LjVsMTYuNCAyOC40Yy0xNS4xIDUuNS0yOC42IDE1LjYtMzguMyAyOS43bC0xOS43LTM0LjJjLTYuNi0xMS41LTIuNy0yNi4yIDguOC0zMi44czI2LjItMi43IDMyLjggOC44em0tNDYuNCA2My43bDEyLjUgMjEuN2MtMiA4LjYtMi41IDE3LjUtMS43IDI2LjFsLTQuMyAwIDAgMC0zNC40IDAtMTMuNy0yMy44Yy02LjYtMTEuNS0yLjctMjYuMiA4LjgtMzIuOHMyNi4yLTIuNyAzMi44IDguOHpNMjI4LjkgMTc1YzkuNC0xNSAyOS4xLTE5LjUgNDQuMS0xMC4ybDYwLjIgMzcuNkMzODQuNyAyMzQuNyA0MTYgMjkxLjIgNDE2IDM1MmwwIDhjMCA4My45LTY4LjEgMTUyLTE1MiAxNTJMODggNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDkyIDBjNi42IDAgMTItNS40IDEyLTEycy01LjQtMTItMTItMTJMNTYgNDQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDEyNCAwYzYuNiAwIDEyLTUuNCAxMi0xMnMtNS40LTEyLTEyLTEyTDI0IDM2OGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNTYgMGM2LjYgMCAxMi01LjQgMTItMTJzLTUuNC0xMi0xMi0xMkw1NiAyOTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTM2IDAgMCAwIDAgMCA5My4yIDAtNDYuMi0yOC45Yy0xNS05LjQtMTkuNS0yOS4xLTEwLjItNDQuMXoiXQogICAgfTsKICAgIGZhU2lnbkxhbmd1YWdlID0gZmFIYW5kczsKICAgIGZhU2lnbmluZyA9IGZhSGFuZHM7CiAgICBmYVRhYmxldHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGV0cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDkwIiwgIk00OTUuMyA3Ni42Yy00LjYtOC43LTE2LjMtOS43LTIzLjMtMi43TDI5Ny45IDI0OGMtNyA3LTYgMTguNyAyLjcgMjMuMyAyMC4xIDEwLjcgNDMgMTYuNyA2Ny40IDE2LjcgNzkuNSAwIDE0NC02NC41IDE0NC0xNDQgMC0yNC4zLTYtNDcuMy0xNi43LTY3LjR6TTI0MC43IDIxMS40YzQuNiA4LjcgMTYuMyA5LjcgMjMuMyAyLjdMNDM4LjEgNDBjNy03IDYtMTguNy0yLjctMjMuMy0yMC4xLTEwLjctNDMtMTYuNy02Ny40LTE2LjctNzkuNSAwLTE0NCA2NC41LTE0NCAxNDQgMCAyNC4zIDYgNDcuMyAxNi43IDY3LjR6TTE0NCAyMjRDNzkuMiAyMjQgMjQuNCAyNjYuOCA2LjMgMzI1LjYgMy40IDMzNS4xIDExIDM0NCAyMC45IDM0NGwyNDYuMiAwYzkuOSAwIDE3LjUtOC45IDE0LjYtMTguNC0uOS0zLTEuOS01LjktMy04LjctMzcuNC0xOC4xLTY4LTQ4LTg3LTg0LjgtMTQuOS01LjItMzAuOS04LjEtNDcuNi04LjF6TTI4MS43IDQxMC40YzIuOS05LjUtNC43LTE4LjQtMTQuNi0xOC40TDIwLjkgMzkyQzExIDM5MiAzLjQgNDAwLjkgNi4zIDQxMC40IDI0LjQgNDY5LjIgNzkuMiA1MTIgMTQ0IDUxMnMxMTkuNi00Mi44IDEzNy43LTEwMS42eiJdCiAgICB9OwogICAgZmFXZWlnaHRIYW5naW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndlaWdodC1oYW5naW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1Y2QiLCAiTTIyNCA5NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xMjIuNSAzMmMzLjUtMTAgNS41LTIwLjggNS41LTMyIDAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMTEuMiAxLjkgMjIgNS41IDMybC0yMS44IDBjLTI4LjMgMC01My4yIDE4LjUtNjEuMyA0NS42TDIuNCA0NDAuMkMuOCA0NDUuNCAwIDQ1MC44IDAgNDU2LjIgMCA0ODcgMjUgNTEyIDU1LjggNTEybDQwMC40IDBjMzAuOCAwIDU1LjgtMjUgNTUuOC01NS44IDAtNS40LS44LTEwLjgtMi40LTE2bC04MC0yNjYuNWMtOC4xLTI3LjEtMzMtNDUuNi02MS4zLTQ1LjZsLTIxLjggMHoiXQogICAgfTsKICAgIGZhRGljZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTIyXSwgImY1MjIiLCAiTTE0MS40IDIuM0MxMDMtOCA2My41IDE0LjggNTMuMyA1My4yTDIuNSAyNDIuN0MtNy44IDI4MS4xIDE1IDMyMC42IDUzLjQgMzMwLjlsMTg5LjUgNTAuOGMzOC40IDEwLjMgNzcuOS0xMi41IDg4LjItNTAuOWw1MC44LTE4OS41YzEwLjMtMzguNC0xMi41LTc3LjktNTAuOS04OC4yTDE0MS40IDIuM3ptMjMgMjA1LjdhMzIgMzIgMCAxIDEgNTUuNC0zMiAzMiAzMiAwIDEgMSAtNTUuNCAzMnpNNzkuMiAyMjAuM2EzMiAzMiAwIDEgMSAzMiA1NS40IDMyIDMyIDAgMSAxIC0zMi01NS40em0xODUgOTYuNGEzMiAzMiAwIDEgMSAtMzItNTUuNCAzMiAzMiAwIDEgMSAzMiA1NS40em05LTIwOC40YTMyIDMyIDAgMSAxIDMyIDU1LjQgMzIgMzIgMCAxIDEgLTMyLTU1LjR6bS0xMjEgMTQuNGEzMiAzMiAwIDEgMSAtMzItNTUuNCAzMiAzMiAwIDEgMSAzMiA1NS40ek00MTggMTkyTDM3Ny40IDM0My4yYy0xNy4yIDY0LTgzIDEwMi0xNDcgODQuOWwtMzguMy0xMC4zIDAgMzAuMmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MmMwLTM1LjMtMjguNy02NC02NC02NEw0MTggMTkyeiJdCiAgICB9OwogICAgZmFTaG9wU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hvcC1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzdG9yZS1hbHQtc2xhc2giXSwgImUwNzAiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU3LTU3IDAtMTkwLjNjMjYuOC0xLjkgNDgtMjQuMyA0OC01MS42IDAtOC0xLjktMTYtNS41LTIzLjJMNDk3LjcgNjcuNEM0ODYuOCA0NS43IDQ2NC43IDMyIDQ0MC40IDMyTDEzNS42IDMyYy0xMC43IDAtMjEgMi43LTMwLjIgNy42TDQxLTI0Ljl6TTMyMS44IDI1Nkw0NDggMjU2IDQ0OCAzODIuMiAzMjEuOCAyNTZ6TTM1MiA0MjEuOGwtNjQtNjQgMCAxMC4yYzAgOC44LTcuMiAxNi0xNiAxNmwtMTI4IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTExMiA1OC4yIDAtMTM0LjgtMTM0LjgtMjkuOSA1OS45Yy0zLjYgNy4yLTUuNSAxNS4xLTUuNSAyMy4yIDAgMjcuMyAyMS4yIDQ5LjcgNDggNTEuNkw2NCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsMTkyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xMC4yeiJdCiAgICB9OwogICAgZmFTdG9yZUFsdFNsYXNoID0gZmFTaG9wU2xhc2g7CiAgICBmYVNvcnREb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNvcnQtZG93biIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJzb3J0LWRlc2MiXSwgImYwZGQiLCAiTTMyIDI4OGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOFMuMiAzMzMuNSA5LjQgMzQyLjZsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzM2NC45IDI4OCAzNTIgMjg4TDMyIDI4OHoiXQogICAgfTsKICAgIGZhU29ydERlc2MgPSBmYVNvcnREb3duOwogICAgZmFQZXNldGFTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlc2V0YS1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUyMjEiLCAiTTExMiAzMkM5NC4zIDMyIDgwIDQ2LjMgODAgNjRsMCAxMDQtMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNCAwIDAgMjMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiA5NiAwYzgwLjIgMCAxNDYuNi01OSAxNTguMi0xMzZsMjUuOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNS44IDBDMzg2LjYgOTEgMzIwLjIgMzIgMjQwIDMyTDExMiAzMnpNMzMzIDE2OGwtMTg5IDAgMC03MiA5NiAwYzQ0LjcgMCA4Mi4zIDMwLjYgOTMgNzJ6TTE0NCAyMTZsMTg5IDBjLTEwLjcgNDEuNC00OC4yIDcyLTkzIDcybC05NiAwIDAtNzJ6Il0KICAgIH07CiAgICBmYVRhYmxldFNjcmVlbkJ1dHRvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YWJsZXQtc2NyZWVuLWJ1dHRvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ0YWJsZXQtYWx0Il0sICJmM2ZhIiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6TTI1NiA0MzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzg0IDY0bC0zMjAgMCAwIDI4OCAzMjAgMCAwLTI4OHoiXQogICAgfTsKICAgIGZhVGFibGV0QWx0ID0gZmFUYWJsZXRTY3JlZW5CdXR0b247CiAgICBmYUhhbmRIb2xkaW5nRG9sbGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtaG9sZGluZy1kb2xsYXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiaGFuZC1ob2xkaW5nLXVzZCJdLCAiZjRjMCIsICJNMjg4LTE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDEyLTEuOCAwYy0zNi42IDAtNjYuMiAyOS43LTY2LjIgNjYuMiAwIDMzLjQgMjQuOSA2MS42IDU4IDY1LjdsNjEgNy42YzUuMSAuNiA5IDUgOSAxMC4yIDAgNS43LTQuNiAxMC4yLTEwLjIgMTAuMkwyNDAgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOHMxMi41IDI4IDI4IDI4bDI0IDAgMCAxMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTIgMS44IDBjMzYuNiAwIDY2LjItMjkuNyA2Ni4yLTY2LjIgMC0zMy40LTI0LjktNjEuNi01OC02NS43bC02MS03LjZjLTUuMS0uNi05LTUtOS0xMC4yIDAtNS43IDQuNi0xMC4yIDEwLjItMTAuMkwzMjggNzZjMTUuNSAwIDI4LTEyLjUgMjgtMjhzLTEyLjUtMjgtMjgtMjhsLTE2IDAgMC0xMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMTA5LjMgMzQxLjVMNjYuNyAzODQgMzIgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMC41IDBjMjkgMCA1Ny4zLTkuMyA4MC43LTI2LjVsMTI2LjYtOTMuM2MxNy44LTEzLjEgMjEuNi0zOC4xIDguNS01NS45cy0zOC4xLTIxLjYtNTUuOS04LjVMMzkyLjYgNDE2IDI4MCA0MTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUyLjIgMGMtMzMuOSAwLTY2LjUgMTMuNS05MC41IDM3LjV6Il0KICAgIH07CiAgICBmYUhhbmRIb2xkaW5nVXNkID0gZmFIYW5kSG9sZGluZ0RvbGxhcjsKICAgIGZhU2hpZWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoaWVsZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODczNywgInNoaWVsZC1ibGFuayJdLCAiZjEzMiIsICJNMjU2IDBjNC42IDAgOS4yIDEgMTMuNCAyLjlMNDU3LjggODIuOGMyMiA5LjMgMzguNCAzMSAzOC4zIDU3LjItLjUgOTkuMi00MS4zIDI4MC43LTIxMy42IDM2My4yLTE2LjcgOC0zNi4xIDgtNTIuOCAwLTE3Mi40LTgyLjUtMjEzLjEtMjY0LTIxMy42LTM2My4yLS4xLTI2LjIgMTYuMy00Ny45IDM4LjMtNTcuMkwyNDIuNyAyLjlDMjQ2LjkgMSAyNTEuNCAwIDI1NiAweiJdCiAgICB9OwogICAgZmFTaGllbGRCbGFuayA9IGZhU2hpZWxkOwogICAgZmFGYWNlTGF1Z2gyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtbGF1Z2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGF1Z2giXSwgImY1OTkiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xMDEuNiAzMTRjLTMuNy0xMy43IDcuNS0yNiAyMS43LTI2bDI2NS40IDBjMTQuMiAwIDI1LjQgMTIuMyAyMS43IDI2LTE4LjUgNjgtODAuNiAxMTgtMTU0LjQgMTE4UzEyMCAzODIgMTAxLjYgMzE0ek0xNDQgMTkyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUxhdWdoMiA9IGZhRmFjZUxhdWdoMjsKICAgIGZhSGFuZHNIb2xkaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLWhvbGRpbmciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjRjMiIsICJNODAgMTA0YzAtMjIuMS0xNy45LTQwLTQwLTQwUzAgODEuOSAwIDEwNEwwIDMyNS41YzAgMjUuNSAxMC4xIDQ5LjkgMjguMSA2Ny45TDEyOCA0OTMuM2MxMiAxMiAyOC4zIDE4LjcgNDUuMyAxOC43bDY2LjcgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTc4LjljMC0yOS43LTExLjgtNTguMi0zMi44LTc5LjJsLTI1LjMtMjUuMyAwIDBjLTcuMy03LjMtMjMuMS0yMy4xLTQ3LjItNDcuMi0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2MyNC4xIDI0LjEgMzkuOSAzOS45IDQ3LjIgNDcuMiAxMSAxMSA5LjIgMjkuMi0zLjcgMzcuOC05LjcgNi41LTIyLjcgNS4yLTMxLTMuMUw5OC43IDMwOS41Yy0xMi0xMi0xOC43LTI4LjMtMTguNy00NS4zTDgwIDEwNHptNDgwIDBsMCAxNjAuMmMwIDE3LTYuNyAzMy4zLTE4LjcgNDUuM2wtNTEuMSA1MS4xYy04LjMgOC4zLTIxLjMgOS42LTMxIDMuMS0xMi45LTguNi0xNC43LTI2LjktMy43LTM3LjggNy4zLTcuMyAyMy4xLTIzLjEgNDcuMi00Ny4yIDEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwYy0yNC4xIDI0LjEtMzkuOSAzOS45LTQ3LjIgNDcuMmwwIDAtMjUuMyAyNS4zYy0yMSAyMS0zMi44IDQ5LjUtMzIuOCA3OS4ybDAgNzguOWMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2Ni43IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdsOTkuOS05OS45YzE4LTE4IDI4LjEtNDIuNCAyOC4xLTY3LjlMNjQwIDEwNGMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MHoiXQogICAgfTsKICAgIGZhQ2FydFNob3BwaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcnQtc2hvcHBpbmciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjg3MjIsICJzaG9wcGluZy1jYXJ0Il0sICJmMDdhIiwgIk0yNC0xNkMxMC43LTE2IDAtNS4zIDAgOFMxMC43IDMyIDI0IDMybDQ1LjMgMGMzLjkgMCA3LjIgMi44IDcuOSA2LjZsNTIuMSAyODYuM2M2LjIgMzQuMiAzNiA1OS4xIDcwLjggNTkuMUw0NTYgMzg0YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNTUuOSAwYy0xMS42IDAtMjEuNS04LjMtMjMuNi0xOS43bC01LjEtMjguMyAzMDMuNiAwYzMwLjggMCA1Ny4yLTIxLjkgNjIuOS01Mi4yTDU2OC45IDY5LjlDNTcyLjYgNTAuMiA1NTcuNSAzMiA1MzcuNCAzMmwtNDEyLjcgMC0uNC0yYy00LjgtMjYuNi0yOC00Ni01NS4xLTQ2TDI0LTE2ek0yMDggNTEyYTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptMjI0IDBhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2eiJdCiAgICB9OwogICAgZmFTaG9wcGluZ0NhcnQgPSBmYUNhcnRTaG9wcGluZzsKICAgIGZhT2N0YWdvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJvY3RhZ29uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzIxXSwgImYzMDYiLCAiTTE4OC42IC4xYy0xNyAwLTMzLjMgNi43LTQ1LjMgMTguN0wxOS4yIDE0M0M3LjIgMTU1IC41IDE3MS4yIC41IDE4OC4ybDAgMTM1LjZjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNMMTQzLjQgNDkzLjJjMTIgMTIgMjguMyAxOC43IDQ1LjMgMTguN2wxMzUuNiAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43TDQ5My42IDM2OWMxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zbDAtMTM1LjZjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMzY5LjUgMTguOGMtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN0wxODguNiAuMXoiXQogICAgfTsKICAgIGZhSGFuZFBvaW50ZXIyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjVhIiwgIk0xMjggNDBjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MGwwIDE0OC4yYzguNS03LjYgMTkuNy0xMi4yIDMyLTEyLjIgMjAuNiAwIDM4LjIgMTMgNDUgMzEuMiA4LjgtOS4zIDIxLjItMTUuMiAzNS0xNS4yIDI1LjMgMCA0NiAxOS41IDQ3LjkgNDQuMyA4LjUtNy43IDE5LjgtMTIuMyAzMi4xLTEyLjMgMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxMTJjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTg1LjMgMGMtNSAwLTkuOS0uMy0xNC43LTEtNTUuMy01LjYtMTA2LjItMzQtMTQwLTc5TDggMzM2Yy0xMy4zLTE3LjctOS43LTQyLjcgOC01NnM0Mi43LTkuNyA1NiA4bDU2IDc0LjcgMC0zMjIuN3pNMjQwIDMwNGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05NnptNDgtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05NmMwLTguOC03LjItMTYtMTYtMTZ6bTgwIDE2YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2eiJdCiAgICB9OwogICAgZmFSZWdpc3RlcmVkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZWdpc3RlcmVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTc0XSwgImYyNWQiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMDAgMTQ0bDgwIDBjMzkuOCAwIDcyIDMyLjIgNzIgNzIgMCAyOC45LTE3IDUzLjgtNDEuNiA2NS4zbDMwLjIgNTAuM2M2LjggMTEuNCAzLjEgMjYuMS04LjIgMzIuOXMtMjYuMSAzLjEtMzIuOS04LjJsLTQxLTY4LjMtMzQuNCAwIDAgNTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNzZjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTcyIDk2bDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNTYgMCAwIDQ4IDQ4IDB6Il0KICAgIH07CiAgICBmYUhvdXNlU2lnbmFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLXNpZ25hbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMDEyIiwgIk01MTUuOSAyNDBsLTE5LjkgMCAwIDE0NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMTM3IDBjLTI0LTkxLjctOTMuNS0xNjUtMTgzLTE5NC4zbDAtMTMuNy0xOS45IDBjLTE1LjUgMC0yOC4xLTEyLjYtMjguMS0yOC4xIDAtNy42IDMuMS0xNC45IDguNi0yMC4yTDI3Ni41LTQuOUMyODMuOS0xMiAyOTMuNy0xNiAzMDQtMTZzMjAuMSA0IDI3LjUgMTEuMUw1MzUuNCAxOTEuN2M1LjUgNS4zIDguNiAxMi42IDguNiAyMC4yIDAgMTUuNS0xMi42IDI4LjEtMjguMSAyOC4xek0yODAgMTkyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNDggMHpNMjQgMjg4YzEyOC4xIDAgMjMyIDEwMy45IDIzMiAyMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xMDEuNi04Mi40LTE4NC0xODQtMTg0LTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTggMTkyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMCA0MDhjMC0xMy4zIDEwLjctMjQgMjQtMjQgNzUuMSAwIDEzNiA2MC45IDEzNiAxMzYgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00OC42LTM5LjQtODgtODgtODgtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYUJhbmdsYWRlc2hpVGFrYVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFuZ2xhZGVzaGktdGFrYS1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUyZTYiLCAiTTM2IDMyLjNDMTguNCAzMC4xIDIuNCA0Mi41IC4zIDYwUzEwLjUgOTMuNiAyOCA5NS44bDcuOSAxYzE2IDIgMjggMTUuNiAyOCAzMS44bDAgMzEuNS00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDAgMCAxNzZjMCA1MyA0MyA5NiA5NiA5NmwzMiAwYzEwNiAwIDE5Mi04NiAxOTItMTkybDAtMzJjMC01My00My05Ni05Ni05NmwtMTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTc2IDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQwIDAgMC0zMS41QzEyOCA4MC4xIDkyIDM5LjIgNDMuOSAzMy4ybC03LjktMXoiXQogICAgfTsKICAgIGljb25zMyA9IHsKICAgICAgZmEwLAogICAgICBmYTEsCiAgICAgIGZhMiwKICAgICAgZmEzLAogICAgICBmYTQsCiAgICAgIGZhNSwKICAgICAgZmE2LAogICAgICBmYTcsCiAgICAgIGZhOCwKICAgICAgZmE5LAogICAgICBmYURvbGxhclNpZ24sCiAgICAgIGZhRG9sbGFyLAogICAgICBmYVVzZCwKICAgICAgZmFEb2csCiAgICAgIGZhVHJ1Y2tNb3ZpbmcsCiAgICAgIGZhUm90YXRlLAogICAgICBmYVN5bmNBbHQsCiAgICAgIGZhU3F1YXJlTWludXM6IGZhU3F1YXJlTWludXMyLAogICAgICBmYU1pbnVzU3F1YXJlOiBmYU1pbnVzU3F1YXJlMiwKICAgICAgZmFBbGlnbkp1c3RpZnksCiAgICAgIGZhQ2FsZW5kYXJDaGVjazogZmFDYWxlbmRhckNoZWNrMiwKICAgICAgZmFGYWNlS2lzczogZmFGYWNlS2lzczIsCiAgICAgIGZhS2lzczogZmFLaXNzMiwKICAgICAgZmFLaXRjaGVuU2V0LAogICAgICBmYURuYSwKICAgICAgZmFDaGlsZFJlYWNoaW5nLAogICAgICBmYVBhc3RlOiBmYVBhc3RlMiwKICAgICAgZmFGaWxlQ2xpcGJvYXJkOiBmYUZpbGVDbGlwYm9hcmQyLAogICAgICBmYU1ldGVvciwKICAgICAgZmFHZWFycywKICAgICAgZmFDb2dzLAogICAgICBmYUZpbGVDaXJjbGVQbHVzLAogICAgICBmYUljaWNsZXMsCiAgICAgIGZhQXJyb3dUcmVuZFVwLAogICAgICBmYUhleGFnb25Ob2Rlc0JvbHQsCiAgICAgIGZhUXVlc3Rpb24sCiAgICAgIGZhSGFuZHNCb3VuZCwKICAgICAgZmFQZXJzb25XYWxraW5nTHVnZ2FnZSwKICAgICAgZmFGaWxlQXJyb3dEb3duLAogICAgICBmYUZpbGVEb3dubG9hZCwKICAgICAgZmFQZXJzb25Cb290aCwKICAgICAgZmFMb2N1c3QsCiAgICAgIGZhUmlnaHRMb25nLAogICAgICBmYUxvbmdBcnJvd0FsdFJpZ2h0LAogICAgICBmYVRydWNrRHJvcGxldCwKICAgICAgZmFIYW5kSG9sZGluZ01lZGljYWwsCiAgICAgIGZhSGFuZFBvaW50TGVmdDogZmFIYW5kUG9pbnRMZWZ0MiwKICAgICAgZmFDYWxjdWxhdG9yLAogICAgICBmYU1pbnVzLAogICAgICBmYVN1YnRyYWN0LAogICAgICBmYUFycm93VXBaQSwKICAgICAgZmFTb3J0QWxwaGFVcEFsdCwKICAgICAgZmFNaWNyb3Bob25lU2xhc2gsCiAgICAgIGZhU3F1YXJlUGVuLAogICAgICBmYVBlblNxdWFyZSwKICAgICAgZmFQZW5jaWxTcXVhcmUsCiAgICAgIGZhSGFuZEZpc3QsCiAgICAgIGZhRmlzdFJhaXNlZCwKICAgICAgZmFDb21tZW50U21zLAogICAgICBmYVNtcywKICAgICAgZmFTaW1DYXJkLAogICAgICBmYVNjYWxlQmFsYW5jZWQsCiAgICAgIGZhQmFsYW5jZVNjYWxlLAogICAgICBmYUNhciwKICAgICAgZmFBdXRvbW9iaWxlLAogICAgICBmYUNyb3BTaW1wbGUsCiAgICAgIGZhQ3JvcEFsdCwKICAgICAgZmFNZWRhbCwKICAgICAgZmFTY3JvbGwsCiAgICAgIGZhRmlsZUV4Y2VsOiBmYUZpbGVFeGNlbDIsCiAgICAgIGZhRmlsdGVyLAogICAgICBmYURydW0sCiAgICAgIGZhTWFwUGluLAogICAgICBmYVNjYWxlVW5iYWxhbmNlZEZsaXAsCiAgICAgIGZhQmFsYW5jZVNjYWxlUmlnaHQsCiAgICAgIGZhQXJyb3dzVG9DaXJjbGUsCiAgICAgIGZhRW52ZWxvcGU6IGZhRW52ZWxvcGUyLAogICAgICBmYUJhYnksCiAgICAgIGZhU3F1YXJlQ2FyZXREb3duOiBmYVNxdWFyZUNhcmV0RG93bjIsCiAgICAgIGZhQ2FyZXRTcXVhcmVEb3duOiBmYUNhcmV0U3F1YXJlRG93bjIsCiAgICAgIGZhVGVudCwKICAgICAgZmFBLAogICAgICBmYVBhcmFjaHV0ZUJveCwKICAgICAgZmFDYXJ0QXJyb3dEb3duLAogICAgICBmYUJyaWRnZUNpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYUNsb3VkQXJyb3dVcCwKICAgICAgZmFDbG91ZFVwbG9hZCwKICAgICAgZmFDbG91ZFVwbG9hZEFsdCwKICAgICAgZmFBdCwKICAgICAgZmFJbmRpYW5SdXBlZVNpZ24sCiAgICAgIGZhSW5kaWFuUnVwZWUsCiAgICAgIGZhSW5yLAogICAgICBmYVRydWNrOiBmYVRydWNrMiwKICAgICAgZmFDaGFsa2JvYXJkVXNlciwKICAgICAgZmFDaGFsa2JvYXJkVGVhY2hlciwKICAgICAgZmFVc2VyQ2hlY2ssCiAgICAgIGZhVXNlck5pbmphLAogICAgICBmYVBsYW50V2lsdCwKICAgICAgZmFXZWlnaHRTY2FsZSwKICAgICAgZmFXZWlnaHQsCiAgICAgIGZhQ2FyZXRSaWdodCwKICAgICAgZmFGbG9yaW5TaWduLAogICAgICBmYUJlbGw6IGZhQmVsbDIsCiAgICAgIGZhTGFyaVNpZ24sCiAgICAgIGZhTWlsbFNpZ24sCiAgICAgIGZhUGVyc29uU25vd2JvYXJkaW5nLAogICAgICBmYVNub3dib2FyZGluZywKICAgICAgZmFUdHksCiAgICAgIGZhVGVsZXR5cGUsCiAgICAgIGZhVXNlcnNSZWN0YW5nbGUsCiAgICAgIGZhTW9iaWxlLAogICAgICBmYU1vYmlsZUFuZHJvaWQsCiAgICAgIGZhTW9iaWxlUGhvbmUsCiAgICAgIGZhQXJyb3dzVHVyblRvRG90cywKICAgICAgZmFFeGNsYW1hdGlvbiwKICAgICAgZmFDaHVyY2gsCiAgICAgIGZhVG9nZ2xlT2ZmLAogICAgICBmYVNob2VQcmludHMsCiAgICAgIGZhRmlsZUNpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYVdhbGxldCwKICAgICAgZmFNZXNzYWdlOiBmYU1lc3NhZ2UyLAogICAgICBmYUNvbW1lbnRBbHQ6IGZhQ29tbWVudEFsdDIsCiAgICAgIGZhVHJvcGh5LAogICAgICBmYUZhY2VEaXp6eTogZmFGYWNlRGl6enkyLAogICAgICBmYURpenp5OiBmYURpenp5MiwKICAgICAgZmFCYWN0ZXJpYSwKICAgICAgZmFFYXJEZWFmLAogICAgICBmYURlYWYsCiAgICAgIGZhRGVhZm5lc3MsCiAgICAgIGZhSGFyZE9mSGVhcmluZywKICAgICAgZmFQZW9wbGVBcnJvd3MsCiAgICAgIGZhUGVvcGxlQXJyb3dzTGVmdFJpZ2h0LAogICAgICBmYUhhbmRzQ2xhcHBpbmcsCiAgICAgIGZhVmlydXNDb3ZpZFNsYXNoLAogICAgICBmYUNhbGVuZGFyRGF5czogZmFDYWxlbmRhckRheXMyLAogICAgICBmYUNhbGVuZGFyQWx0OiBmYUNhbGVuZGFyQWx0MiwKICAgICAgZmFEaWFtb25kVHVyblJpZ2h0LAogICAgICBmYURpcmVjdGlvbnMsCiAgICAgIGZhSGFuZFBvaW50VXA6IGZhSGFuZFBvaW50VXAyLAogICAgICBmYUJlemllckN1cnZlLAogICAgICBmYVBlcnNvbkhhbGZEcmVzcywKICAgICAgZmFTcXVhcmVQb2xsSG9yaXpvbnRhbCwKICAgICAgZmFQb2xsSCwKICAgICAgZmFTY2hvb2xDaXJjbGVYbWFyaywKICAgICAgZmFIYW5kTGl6YXJkOiBmYUhhbmRMaXphcmQyLAogICAgICBmYUNoYWxrYm9hcmQsCiAgICAgIGZhQmxhY2tib2FyZCwKICAgICAgZmFVcFJpZ2h0RnJvbVNxdWFyZSwKICAgICAgZmFFeHRlcm5hbExpbmtBbHQsCiAgICAgIGZhU3F1YXJlRnVsbDogZmFTcXVhcmVGdWxsMiwKICAgICAgZmFDbG92ZXIsCiAgICAgIGZhVGVldGhPcGVuLAogICAgICBmYUJhcnNTdGFnZ2VyZWQsCiAgICAgIGZhUmVvcmRlciwKICAgICAgZmFTdHJlYW0sCiAgICAgIGZhV2FyZWhvdXNlLAogICAgICBmYVN3YXRjaGJvb2ssCiAgICAgIGZhQ2FtcGdyb3VuZCwKICAgICAgZmFQZXJzb25XYWxraW5nQXJyb3dSaWdodCwKICAgICAgZmFHbGFzc2VzLAogICAgICBmYUNpcmNsZVBhdXNlOiBmYUNpcmNsZVBhdXNlMiwKICAgICAgZmFQYXVzZUNpcmNsZTogZmFQYXVzZUNpcmNsZTIsCiAgICAgIGZhTWVtb3J5LAogICAgICBmYUdpZnQsCiAgICAgIGZhTW9uZXlCaWxsV2hlYXQsCiAgICAgIGZhRHVuZ2VvbiwKICAgICAgZmFTdWl0Y2FzZU1lZGljYWwsCiAgICAgIGZhTWVka2l0LAogICAgICBmYVBlcnNvbkNhbmUsCiAgICAgIGZhR2F1Z2UsCiAgICAgIGZhRGFzaGJvYXJkLAogICAgICBmYUdhdWdlTWVkLAogICAgICBmYVRhY2hvbWV0ZXJBbHRBdmVyYWdlLAogICAgICBmYUVudmVsb3BlT3BlblRleHQsCiAgICAgIGZhVG9vbGJveCwKICAgICAgZmFQb3dlck9mZiwKICAgICAgZmFTaWduYWwsCiAgICAgIGZhU2lnbmFsNSwKICAgICAgZmFTaWduYWxQZXJmZWN0LAogICAgICBmYUFycm93c1NwaW4sCiAgICAgIGZhSm9pbnQsCiAgICAgIGZhQnJhaWxsZSwKICAgICAgZmFCYXNrZXRTaG9wcGluZywKICAgICAgZmFTaG9wcGluZ0Jhc2tldCwKICAgICAgZmFCcmlkZ2UsCiAgICAgIGZhUGxhbmVBcnJpdmFsLAogICAgICBmYUNhc2hSZWdpc3RlciwKICAgICAgZmFSaW5nLAogICAgICBmYVNoYXJlTm9kZXMsCiAgICAgIGZhU2hhcmVBbHQsCiAgICAgIGZhUGVyc29uQ2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhQmlub2N1bGFycywKICAgICAgZmFLaXBTaWduLAogICAgICBmYUhhcmREcml2ZTogZmFIYXJkRHJpdmUyLAogICAgICBmYUhkZDogZmFIZGQyLAogICAgICBmYVJhbmtpbmdTdGFyLAogICAgICBmYVVzZXJUaWUsCiAgICAgIGZhRWxsaXBzaXMsCiAgICAgIGZhRWxsaXBzaXNILAogICAgICBmYVN0b3JlU2xhc2gsCiAgICAgIGZhUGVyY2VudCwKICAgICAgZmFQZXJjZW50YWdlLAogICAgICBmYUZpbGVaaXBwZXI6IGZhRmlsZVppcHBlcjIsCiAgICAgIGZhRmlsZUFyY2hpdmU6IGZhRmlsZUFyY2hpdmUyLAogICAgICBmYURpc3BsYXksCiAgICAgIGZhSWNvbnMsCiAgICAgIGZhSGVhcnRNdXNpY0NhbWVyYUJvbHQsCiAgICAgIGZhUnVsZXJWZXJ0aWNhbCwKICAgICAgZmFNYXBMb2NhdGlvbkRvdCwKICAgICAgZmFNYXBNYXJrZWRBbHQsCiAgICAgIGZhSGVhcnRDcmFjaywKICAgICAgZmFIZWFydEJyb2tlbiwKICAgICAgZmFDb3csCiAgICAgIGZhUnNzLAogICAgICBmYUZlZWQsCiAgICAgIGZhTWFnbmlmeWluZ0dsYXNzLAogICAgICBmYVNlYXJjaCwKICAgICAgZmFDbG91ZE1vb24sCiAgICAgIGZhQm94ZXNTdGFja2VkLAogICAgICBmYUJveGVzLAogICAgICBmYUJveGVzQWx0LAogICAgICBmYUNvZGVCcmFuY2gsCiAgICAgIGZhQmFuLAogICAgICBmYUNhbmNlbCwKICAgICAgZmFKdWdEZXRlcmdlbnQsCiAgICAgIGZhUmVwbHksCiAgICAgIGZhTWFpbFJlcGx5LAogICAgICBmYVN1blBsYW50V2lsdCwKICAgICAgZmFCYWN0ZXJpdW0sCiAgICAgIGZhUmVjb3JkVmlueWwsCiAgICAgIGZhRmxvcHB5RGlzazogZmFGbG9wcHlEaXNrMiwKICAgICAgZmFTYXZlOiBmYVNhdmUyLAogICAgICBmYVRvaWxldHNQb3J0YWJsZSwKICAgICAgZmFPLAogICAgICBmYVBhbGV0dGUsCiAgICAgIGZhVW5sb2NrLAogICAgICBmYUVhckxpc3RlbiwKICAgICAgZmFBc3Npc3RpdmVMaXN0ZW5pbmdTeXN0ZW1zLAogICAgICBmYUNvZGVQdWxsUmVxdWVzdCwKICAgICAgZmFLZXksCiAgICAgIGZhU2t1bGwsCiAgICAgIGZhTWFyc1N0cm9rZVVwLAogICAgICBmYU1hcnNTdHJva2VWLAogICAgICBmYUZpcmVGbGFtZVNpbXBsZSwKICAgICAgZmFCdXJuLAogICAgICBmYVRyZWUsCiAgICAgIGZhU21vZywKICAgICAgZmFTLAogICAgICBmYUplZGksCiAgICAgIGZhUGVyc29uSGlraW5nLAogICAgICBmYUhpa2luZywKICAgICAgZmFBcnJvd3NVcFRvTGluZSwKICAgICAgZmFNYXJzRG91YmxlLAogICAgICBmYVRoZXJtb21ldGVyLAogICAgICBmYVBhaW50YnJ1c2gsCiAgICAgIGZhUGFpbnRCcnVzaCwKICAgICAgZmFOZXV0ZXIsCiAgICAgIGZhU3F1YXJlUGhvbmVGbGlwLAogICAgICBmYVBob25lU3F1YXJlQWx0LAogICAgICBmYUZhY2VHcmluVG9uZ3VlU3F1aW50OiBmYUZhY2VHcmluVG9uZ3VlU3F1aW50MiwKICAgICAgZmFHcmluVG9uZ3VlU3F1aW50OiBmYUdyaW5Ub25ndWVTcXVpbnQyLAogICAgICBmYUNvbW1lbnREb2xsYXIsCiAgICAgIGZhSGlwcG8sCiAgICAgIGZhQm93bEZvb2QsCiAgICAgIGZhU3F1YXJlVmlydXMsCiAgICAgIGZhQ2xvdWRTdW5SYWluLAogICAgICBmYUFycm93UmlnaHRMb25nLAogICAgICBmYUxvbmdBcnJvd1JpZ2h0LAogICAgICBmYUJ1aWxkaW5nVW4sCiAgICAgIGZhVGVtcGVyYXR1cmVMb3csCiAgICAgIGZhRG9vck9wZW4sCiAgICAgIGZhQWxpZ25MZWZ0LAogICAgICBmYUNhbWVyYTogZmFDYW1lcmEyLAogICAgICBmYUNhbWVyYUFsdDogZmFDYW1lcmFBbHQyLAogICAgICBmYVVzZXJzUmF5cywKICAgICAgZmFSYWluYm93LAogICAgICBmYVNpdGVtYXAsCiAgICAgIGZhRmFjZUdyaW5TdGFyczogZmFGYWNlR3JpblN0YXJzMiwKICAgICAgZmFHcmluU3RhcnM6IGZhR3JpblN0YXJzMiwKICAgICAgZmFTb3J0VXAsCiAgICAgIGZhU29ydEFzYywKICAgICAgZmFFeWU6IGZhRXllMiwKICAgICAgZmFDYXJldExlZnQsCiAgICAgIGZhQXBwbGVXaG9sZSwKICAgICAgZmFBcHBsZUFsdCwKICAgICAgZmFTY3JvbGxUb3JhaCwKICAgICAgZmFUb3JhaCwKICAgICAgZmFIb3VzZUxvY2ssCiAgICAgIGZhQXJyb3dzTGVmdFJpZ2h0VG9MaW5lLAogICAgICBmYVRyYXNoLAogICAgICBmYUZhY2VTYWRUZWFyOiBmYUZhY2VTYWRUZWFyMiwKICAgICAgZmFTYWRUZWFyOiBmYVNhZFRlYXIyLAogICAgICBmYUZheCwKICAgICAgZmFQZXJzb25DaXJjbGVQbHVzLAogICAgICBmYUhhbXNhLAogICAgICBmYVBlcnNvbkNpcmNsZVF1ZXN0aW9uLAogICAgICBmYUNsaXBib2FyZENoZWNrLAogICAgICBmYVNoYXJlRnJvbVNxdWFyZTogZmFTaGFyZUZyb21TcXVhcmUyLAogICAgICBmYVNoYXJlU3F1YXJlOiBmYVNoYXJlU3F1YXJlMiwKICAgICAgZmFSZWNlaXB0LAogICAgICBmYUVxdWFscywKICAgICAgZmFDaGV2cm9uVXAsCiAgICAgIGZhVmlydXNTbGFzaCwKICAgICAgZmFTbGFzaCwKICAgICAgZmFFeHBhbmQsCiAgICAgIGZhTm90ZVN0aWNreTogZmFOb3RlU3RpY2t5MiwKICAgICAgZmFTdGlja3lOb3RlOiBmYVN0aWNreU5vdGUyLAogICAgICBmYVRhYmxlQ29sdW1ucywKICAgICAgZmFDb2x1bW5zLAogICAgICBmYVBlcnNvblNoZWx0ZXIsCiAgICAgIGZhQ2lyY2xlTm90Y2gsCiAgICAgIGZhV2F0ZXIsCiAgICAgIGZhRGVsZXRlTGVmdCwKICAgICAgZmFCYWNrc3BhY2UsCiAgICAgIGZhQnJvb21CYWxsLAogICAgICBmYVF1aWRkaXRjaCwKICAgICAgZmFRdWlkZGl0Y2hCcm9vbUJhbGwsCiAgICAgIGZhSiwKICAgICAgZmFTaHV0dGxlU3BhY2UsCiAgICAgIGZhU3BhY2VTaHV0dGxlLAogICAgICBmYVlpbllhbmcsCiAgICAgIGZhU3RvcCwKICAgICAgZmFUcm93ZWwsCiAgICAgIGZhSGFuZEJhY2tGaXN0OiBmYUhhbmRCYWNrRmlzdDIsCiAgICAgIGZhSGFuZFJvY2s6IGZhSGFuZFJvY2syLAogICAgICBmYVRlbXBlcmF0dXJlSGlnaCwKICAgICAgZmFHcmVhdGVyVGhhbiwKICAgICAgZmFDcnV0Y2gsCiAgICAgIGZhU2VwdGFnb24sCiAgICAgIGZhSGVwdGFnb24sCiAgICAgIGZhU3RyZWV0VmlldywKICAgICAgZmFXYXZlU3F1YXJlLAogICAgICBmYUFuZ2xlTGVmdCwKICAgICAgZmFTY3Jld2RyaXZlciwKICAgICAgZmFUcmFjdG9yLAogICAgICBmYUJyaWRnZUNpcmNsZVhtYXJrLAogICAgICBmYVZpYWxzLAogICAgICBmYVN0ZXRob3Njb3BlLAogICAgICBmYVBvZGNhc3QsCiAgICAgIGZhQXJyb3dVcFJpZ2h0RG90cywKICAgICAgZmFDaGVzc1F1ZWVuOiBmYUNoZXNzUXVlZW4yLAogICAgICBmYUFuY2hvckNpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYUVsbGlwc2lzVmVydGljYWwsCiAgICAgIGZhRWxsaXBzaXNWLAogICAgICBmYUhlYXJ0Q2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhQnVpbGRpbmdDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFQZXJzb25BcnJvd1VwRnJvbUxpbmUsCiAgICAgIGZhTm90RXF1YWwsCiAgICAgIGZhVHJhaW5UcmFtLAogICAgICBmYVBsYW5lRGVwYXJ0dXJlLAogICAgICBmYVJpZ2h0VG9CcmFja2V0LAogICAgICBmYVNpZ25JbkFsdCwKICAgICAgZmFTZENhcmQsCiAgICAgIGZhSG91c2VDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFTaGVrZWxTaWduLAogICAgICBmYUlscywKICAgICAgZmFTaGVrZWwsCiAgICAgIGZhU2hlcWVsLAogICAgICBmYVNoZXFlbFNpZ24sCiAgICAgIGZhUmFkaW8sCiAgICAgIGZhSGFuZERvdHMsCiAgICAgIGZhQWxsZXJnaWVzLAogICAgICBmYUJvb2tTa3VsbCwKICAgICAgZmFCb29rRGVhZCwKICAgICAgZmFVbmxvY2tLZXlob2xlLAogICAgICBmYVVubG9ja0FsdCwKICAgICAgZmFGaWxlQXJyb3dVcCwKICAgICAgZmFGaWxlVXBsb2FkLAogICAgICBmYUZhY2VHcmluVGVhcnM6IGZhRmFjZUdyaW5UZWFyczIsCiAgICAgIGZhR3JpblRlYXJzOiBmYUdyaW5UZWFyczIsCiAgICAgIGZhUGVuVG9TcXVhcmU6IGZhUGVuVG9TcXVhcmUyLAogICAgICBmYUVkaXQ6IGZhRWRpdDIsCiAgICAgIGZhRWFydGhFdXJvcGUsCiAgICAgIGZhR2xvYmVFdXJvcGUsCiAgICAgIGZhRmFjZUdyaW5CZWFtU3dlYXQ6IGZhRmFjZUdyaW5CZWFtU3dlYXQyLAogICAgICBmYUdyaW5CZWFtU3dlYXQ6IGZhR3JpbkJlYW1Td2VhdDIsCiAgICAgIGZhQ2lyY2xlSGFsZlN0cm9rZSwKICAgICAgZmFBZGp1c3QsCiAgICAgIGZhUGVyc29uTWlsaXRhcnlUb1BlcnNvbiwKICAgICAgZmFUYWJsZUNlbGxzQ29sdW1uTG9jaywKICAgICAgZmFUcnVja0ZpZWxkVW4sCiAgICAgIGZhQ2xvY2s6IGZhQ2xvY2syLAogICAgICBmYUNsb2NrRm91cjogZmFDbG9ja0ZvdXIyLAogICAgICBmYUJvb2ssCiAgICAgIGZhRmFjZUxhdWdoV2luazogZmFGYWNlTGF1Z2hXaW5rMiwKICAgICAgZmFMYXVnaFdpbms6IGZhTGF1Z2hXaW5rMiwKICAgICAgZmFDbG91ZE1lYXRiYWxsLAogICAgICBmYUNoYXJ0QXJlYSwKICAgICAgZmFBcmVhQ2hhcnQsCiAgICAgIGZhUnVwaWFoU2lnbiwKICAgICAgZmFUZXh0V2lkdGgsCiAgICAgIGZhU2F0ZWxsaXRlLAogICAgICBmYU1hZ25pZnlpbmdHbGFzc01pbnVzLAogICAgICBmYVNlYXJjaE1pbnVzLAogICAgICBmYVBlb3BsZUdyb3VwLAogICAgICBmYVNxdWFyZUJpbmFyeSwKICAgICAgZmFNYXNrc1RoZWF0ZXIsCiAgICAgIGZhVGhlYXRlck1hc2tzLAogICAgICBmYUNhcnRQbHVzLAogICAgICBmYUhhbmRzQXNsSW50ZXJwcmV0aW5nLAogICAgICBmYUFtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nLAogICAgICBmYUFzbEludGVycHJldGluZywKICAgICAgZmFIYW5kc0FtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nLAogICAgICBmYVRhYmxlQ2VsbHNSb3dVbmxvY2ssCiAgICAgIGZhUm9ja2V0LAogICAgICBmYVNocmltcCwKICAgICAgZmFUZW5nZVNpZ24sCiAgICAgIGZhVGVuZ2UsCiAgICAgIGZhSG91c2VDaGltbmV5TWVkaWNhbCwKICAgICAgZmFDbGluaWNNZWRpY2FsLAogICAgICBmYVVzZXJzU2xhc2gsCiAgICAgIGZhUGFwZXJQbGFuZTogZmFQYXBlclBsYW5lMiwKICAgICAgZmFCb29rQXRsYXMsCiAgICAgIGZhQXRsYXMsCiAgICAgIGZhVGFibGUsCiAgICAgIGZhSGVhcnQ6IGZhSGVhcnQyLAogICAgICBmYUNpcmNsZUNoZXZyb25VcCwKICAgICAgZmFDaGV2cm9uQ2lyY2xlVXAsCiAgICAgIGZhQmF0dGVyeUhhbGYsCiAgICAgIGZhQmF0dGVyeTMsCiAgICAgIGZhRm9udEF3ZXNvbWU6IGZhRm9udEF3ZXNvbWUzLAogICAgICBmYUZvbnRBd2Vzb21lRmxhZzogZmFGb250QXdlc29tZUZsYWczLAogICAgICBmYUZvbnRBd2Vzb21lTG9nb0Z1bGw6IGZhRm9udEF3ZXNvbWVMb2dvRnVsbDMsCiAgICAgIGZhSGFuZGN1ZmZzLAogICAgICBmYUhhdENvd2JveVNpZGUsCiAgICAgIGZhSW5kdXN0cnksCiAgICAgIGZhTGluZXNMZWFuaW5nLAogICAgICBmYVBhc3Nwb3J0LAogICAgICBmYUluZmluaXR5LAogICAgICBmYUNsb25lOiBmYUNsb25lMiwKICAgICAgZmFGb3J3YXJkLAogICAgICBmYU0sCiAgICAgIGZhUm9hZFNwaWtlcywKICAgICAgZmFNb3VudGFpbiwKICAgICAgZmFDaGVzcywKICAgICAgZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnMsCiAgICAgIGZhVGVtcGVyYXR1cmUzLAogICAgICBmYVRoZXJtb21ldGVyMywKICAgICAgZmFUaGVybW9tZXRlclRocmVlUXVhcnRlcnMsCiAgICAgIGZhQiwKICAgICAgZmFTaGllbGRWaXJ1cywKICAgICAgZmFMaXRlY29pblNpZ24sCiAgICAgIGZhRGljZUQ2LAogICAgICBmYUdyaXBMaW5lc1ZlcnRpY2FsLAogICAgICBmYUdvbGZCYWxsVGVlLAogICAgICBmYUdvbGZCYWxsLAogICAgICBmYUhleGFnb24sCiAgICAgIGZhRm9sZGVyT3BlbjogZmFGb2xkZXJPcGVuMiwKICAgICAgZmFLYWFiYSwKICAgICAgZmFIYW5kSG9sZGluZywKICAgICAgZmFTaW5nbGVRdW90ZVJpZ2h0LAogICAgICBmYUJvdHRsZURyb3BsZXQsCiAgICAgIGZhV2luZG93TWluaW1pemU6IGZhV2luZG93TWluaW1pemUyLAogICAgICBmYUNoZXZyb25SaWdodCwKICAgICAgZmFFZ2csCiAgICAgIGZhTGFuZG1hcmtEb21lLAogICAgICBmYUxhbmRtYXJrQWx0LAogICAgICBmYVdvcm0sCiAgICAgIGZhVXNlckluanVyZWQsCiAgICAgIGZhU3RyaWtldGhyb3VnaCwKICAgICAgZmFCbG9nLAogICAgICBmYVN0b3B3YXRjaDIwLAogICAgICBmYVRydWNrUGlja3VwLAogICAgICBmYVNlZWRsaW5nLAogICAgICBmYVNwcm91dCwKICAgICAgZmFUcmFuc2dlbmRlciwKICAgICAgZmFUcmFuc2dlbmRlckFsdCwKICAgICAgZmFTdGFySGFsZjogZmFTdGFySGFsZjIsCiAgICAgIGZhUGhvdG9GaWxtLAogICAgICBmYVBob3RvVmlkZW8sCiAgICAgIGZhUHVtcE1lZGljYWwsCiAgICAgIGZhRmlyZSwKICAgICAgZmFNYWduaWZ5aW5nR2xhc3NQbHVzLAogICAgICBmYVNlYXJjaFBsdXMsCiAgICAgIGZhRmxhc2ssCiAgICAgIGZhQWxpZ25SaWdodCwKICAgICAgZmFDYWJsZUNhciwKICAgICAgZmFUcmFtLAogICAgICBmYUtpdE1lZGljYWwsCiAgICAgIGZhRmlyc3RBaWQsCiAgICAgIGZhR3JpcExpbmVzLAogICAgICBmYUJ1cmdlciwKICAgICAgZmFIYW1idXJnZXIsCiAgICAgIGZhU25vd21hbiwKICAgICAgZmFIb3RlbCwKICAgICAgZmFQcmludCwKICAgICAgZmFWb2xsZXliYWxsLAogICAgICBmYVZvbGxleWJhbGxCYWxsLAogICAgICBmYVRyYWZmaWNMaWdodCwKICAgICAgZmFQbGFuZUNpcmNsZUNoZWNrLAogICAgICBmYVVzZXJzLAogICAgICBmYUNlcnRpZmljYXRlLAogICAgICBmYUFsYXJtQ2xvY2s6IGZhQWxhcm1DbG9jazIsCiAgICAgIGZhSGVsaWNvcHRlclN5bWJvbCwKICAgICAgZmFIb3VzZUNoaW1uZXlDcmFjaywKICAgICAgZmFIb3VzZURhbWFnZSwKICAgICAgZmFQZXJzb25NaWxpdGFyeVBvaW50aW5nLAogICAgICBmYURhdGFiYXNlLAogICAgICBmYU5ld3NwYXBlcjogZmFOZXdzcGFwZXIyLAogICAgICBmYUNsb3VkUmFpbiwKICAgICAgZmFNYXhpbWl6ZSwKICAgICAgZmFFeHBhbmRBcnJvd3NBbHQsCiAgICAgIGZhTG9jYXRpb25BcnJvdywKICAgICAgZmFDaXR5LAogICAgICBmYVhSYXksCiAgICAgIGZhVW1icmVsbGFCZWFjaCwKICAgICAgZmFBcnJvd1JpZ2h0VG9CcmFja2V0LAogICAgICBmYVNpZ25JbiwKICAgICAgZmFIZWFkc2V0LAogICAgICBmYVNwbG90Y2gsCiAgICAgIGZhVXBMb25nLAogICAgICBmYUxvbmdBcnJvd0FsdFVwLAogICAgICBmYUhleGFnb25Ob2RlcywKICAgICAgZmFIb3NwaXRhbDogZmFIb3NwaXRhbDIsCiAgICAgIGZhSG9zcGl0YWxBbHQ6IGZhSG9zcGl0YWxBbHQyLAogICAgICBmYUhvc3BpdGFsV2lkZTogZmFIb3NwaXRhbFdpZGUyLAogICAgICBmYVBlcnNvbkhhcmFzc2luZywKICAgICAgZmFNb25leUJpbGxUcmVuZFVwLAogICAgICBmYVBlblJ1bGVyLAogICAgICBmYVBlbmNpbFJ1bGVyLAogICAgICBmYVJlcGVhdCwKICAgICAgZmFCb25lLAogICAgICBmYUZpcmVGbGFtZUN1cnZlZCwKICAgICAgZmFGaXJlQWx0LAogICAgICBmYUJ1c1NpbXBsZSwKICAgICAgZmFCdXNBbHQsCiAgICAgIGZhVmVudXNNYXJzLAogICAgICBmYUJsZW5kZXIsCiAgICAgIGZhVSwKICAgICAgZmFTaGFyZSwKICAgICAgZmFNYWlsRm9yd2FyZCwKICAgICAgZmFQaG9uZUZsaXAsCiAgICAgIGZhUGhvbmVBbHQsCiAgICAgIGZhVG9pbGV0UG9ydGFibGUsCiAgICAgIGZhUGVyc29uUHJlZ25hbnQsCiAgICAgIGZhTGVzc1RoYW4sCiAgICAgIGZhU3VwZXJzY3JpcHQsCiAgICAgIGZhQ2lyY2xlU3RvcDogZmFDaXJjbGVTdG9wMiwKICAgICAgZmFTdG9wQ2lyY2xlOiBmYVN0b3BDaXJjbGUyLAogICAgICBmYUFycm93c1VwRG93biwKICAgICAgZmFBcnJvd3NWLAogICAgICBmYVBvb1N0b3JtLAogICAgICBmYVBvb0JvbHQsCiAgICAgIGZhVmlkZW9TbGFzaCwKICAgICAgZmFTcXVhcmVYbWFyaywKICAgICAgZmFUaW1lc1NxdWFyZSwKICAgICAgZmFYbWFya1NxdWFyZSwKICAgICAgZmFIYW5kSG9sZGluZ0Ryb3BsZXQsCiAgICAgIGZhSGFuZEhvbGRpbmdXYXRlciwKICAgICAgZmFXb25TaWduLAogICAgICBmYUtydywKICAgICAgZmFXb24sCiAgICAgIGZhT2JqZWN0VW5ncm91cDogZmFPYmplY3RVbmdyb3VwMiwKICAgICAgZmFDb21tZW50OiBmYUNvbW1lbnQyLAogICAgICBmYUhpbGxBdmFsYW5jaGUsCiAgICAgIGZhQXJyb3dzVG9FeWUsCiAgICAgIGZhU25vd3Bsb3csCiAgICAgIGZhQ2hhcnRHYW50dCwKICAgICAgZmFWaWRlbywKICAgICAgZmFWaWRlb0NhbWVyYSwKICAgICAgZmFDaGVzc1Bhd246IGZhQ2hlc3NQYXduMiwKICAgICAgZmFTeW5hZ29ndWUsCiAgICAgIGZhQnVpbGRpbmdDaXJjbGVDaGVjaywKICAgICAgZmFDYWxlbmRhclBsdXM6IGZhQ2FsZW5kYXJQbHVzMiwKICAgICAgZmFXaGVlbGNoYWlyTW92ZSwKICAgICAgZmFXaGVlbGNoYWlyQWx0LAogICAgICBmYVVzZXJTaGllbGQsCiAgICAgIGZhQm9sZCwKICAgICAgZmFIZWFydFB1bHNlLAogICAgICBmYUhlYXJ0YmVhdCwKICAgICAgZmFTcXVhcmVSb290VmFyaWFibGUsCiAgICAgIGZhU3F1YXJlUm9vdEFsdCwKICAgICAgZmFIYW5kc0J1YmJsZXMsCiAgICAgIGZhSGFuZHNXYXNoLAogICAgICBmYU1hcmtlciwKICAgICAgZmFDbGlwYm9hcmQ6IGZhQ2xpcGJvYXJkMiwKICAgICAgZmFQbGFjZU9mV29yc2hpcCwKICAgICAgZmFDYW5uYWJpcywKICAgICAgZmFQZW9wbGVSb29mLAogICAgICBmYURpc2Vhc2UsCiAgICAgIGZhQm9va0JpYmxlLAogICAgICBmYUJpYmxlLAogICAgICBmYUNoZXNzQm9hcmQsCiAgICAgIGZhTWFycywKICAgICAgZmFMYXB0b3AsCiAgICAgIGZhVXNlclhtYXJrLAogICAgICBmYVVzZXJUaW1lcywKICAgICAgZmFGbGFnVXNhLAogICAgICBmYUhhbmRNaWRkbGVGaW5nZXIsCiAgICAgIGZhTW9ydGFyUGVzdGxlLAogICAgICBmYUhlYWRTaWRlQ291Z2gsCiAgICAgIGZhUGxhbmVMb2NrLAogICAgICBmYUJhdHRlcnlUaHJlZVF1YXJ0ZXJzLAogICAgICBmYUJhdHRlcnk0LAogICAgICBmYUZyYW5jU2lnbiwKICAgICAgZmFGaWx0ZXJDaXJjbGVEb2xsYXIsCiAgICAgIGZhRnVubmVsRG9sbGFyLAogICAgICBmYUNoZWVzZSwKICAgICAgZmFDaXJjbGVILAogICAgICBmYUhvc3BpdGFsU3ltYm9sLAogICAgICBmYVNjaG9vbCwKICAgICAgZmFEaWNlRml2ZSwKICAgICAgZmFUb3JuYWRvLAogICAgICBmYUpldEZpZ2h0ZXIsCiAgICAgIGZhRmlnaHRlckpldCwKICAgICAgZmFUaHVtYnNEb3duOiBmYVRodW1ic0Rvd24yLAogICAgICBmYUJyb29tLAogICAgICBmYUZpbGVJbXBvcnQsCiAgICAgIGZhQXJyb3dSaWdodFRvRmlsZSwKICAgICAgZmFVdGVuc2lscywKICAgICAgZmFDdXRsZXJ5LAogICAgICBmYUlkQmFkZ2U6IGZhSWRCYWRnZTIsCiAgICAgIGZhU3BpZGVyLAogICAgICBmYU1vYmlsZVJldHJvLAogICAgICBmYVNpZ25zUG9zdCwKICAgICAgZmFNYXBTaWducywKICAgICAgZmFHcm91cEFycm93c1JvdGF0ZSwKICAgICAgZmFBcnJvd3NTcGxpdFVwQW5kTGVmdCwKICAgICAgZmFGaWxsRHJpcCwKICAgICAgZmFTaGllbGRIZWFydCwKICAgICAgZmFQZXJzb25Ta2lpbmdOb3JkaWMsCiAgICAgIGZhU2tpaW5nTm9yZGljLAogICAgICBmYVNxdWFyZUNoZWNrOiBmYVNxdWFyZUNoZWNrMiwKICAgICAgZmFDaGVja1NxdWFyZTogZmFDaGVja1NxdWFyZTIsCiAgICAgIGZhQmF0aCwKICAgICAgZmFCYXRodHViLAogICAgICBmYUNoZXNzQmlzaG9wOiBmYUNoZXNzQmlzaG9wMiwKICAgICAgZmFQcmVzY3JpcHRpb25Cb3R0bGVNZWRpY2FsLAogICAgICBmYVByZXNjcmlwdGlvbkJvdHRsZUFsdCwKICAgICAgZmFEcmF3UG9seWdvbiwKICAgICAgZmFWZWN0b3JQb2x5Z29uLAogICAgICBmYUlDdXJzb3IsCiAgICAgIGZhSGVhcnRDaXJjbGVQbHVzLAogICAgICBmYVNoaWVsZERvZywKICAgICAgZmFHcmVhdGVyVGhhbkVxdWFsLAogICAgICBmYUVudmVsb3BlT3BlbjogZmFFbnZlbG9wZU9wZW4yLAogICAgICBmYU1vdW5kLAogICAgICBmYVZvaWNlbWFpbCwKICAgICAgZmFWZXN0LAogICAgICBmYUF1ZGlvRGVzY3JpcHRpb24sCiAgICAgIGZhVywKICAgICAgZmFFeWVEcm9wcGVyLAogICAgICBmYUV5ZURyb3BwZXJFbXB0eSwKICAgICAgZmFFeWVkcm9wcGVyLAogICAgICBmYUNpcmNsZVhtYXJrOiBmYUNpcmNsZVhtYXJrMiwKICAgICAgZmFUaW1lc0NpcmNsZTogZmFUaW1lc0NpcmNsZTIsCiAgICAgIGZhWG1hcmtDaXJjbGU6IGZhWG1hcmtDaXJjbGUyLAogICAgICBmYVRyYWlsZXIsCiAgICAgIGZhVHVya2lzaExpcmFTaWduLAogICAgICBmYVRyeSwKICAgICAgZmFUdXJraXNoTGlyYSwKICAgICAgZmFWb2xjYW5vLAogICAgICBmYVdhbmRTcGFya2xlcywKICAgICAgZmFNaWNyb3Bob25lLAogICAgICBmYUNyb3duLAogICAgICBmYVRlbnRBcnJvd1R1cm5MZWZ0LAogICAgICBmYVRydWNrRmFzdCwKICAgICAgZmFTaGlwcGluZ0Zhc3QsCiAgICAgIGZhVXNlclBlbiwKICAgICAgZmFVc2VyRWRpdCwKICAgICAgZmFVc2VyQ2xvY2ssCiAgICAgIGZhU2hvd2VyLAogICAgICBmYVNxdWFyZUNhcmV0VXA6IGZhU3F1YXJlQ2FyZXRVcDIsCiAgICAgIGZhQ2FyZXRTcXVhcmVVcDogZmFDYXJldFNxdWFyZVVwMiwKICAgICAgZmFNYXBMb2NhdGlvbiwKICAgICAgZmFNYXBNYXJrZWQsCiAgICAgIGZhUGVuRmFuY3ksCiAgICAgIGZhRXVyb1NpZ24sCiAgICAgIGZhRXVyLAogICAgICBmYUV1cm8sCiAgICAgIGZhSG91c2VDaXJjbGVYbWFyaywKICAgICAgZmFMaXJhU2lnbiwKICAgICAgZmFZZW5TaWduLAogICAgICBmYUNueSwKICAgICAgZmFKcHksCiAgICAgIGZhUm1iLAogICAgICBmYVllbiwKICAgICAgZmFCb3hPcGVuLAogICAgICBmYVRydWNrRmllbGQsCiAgICAgIGZhTG9jYXRpb25QaW5Mb2NrLAogICAgICBmYVBlcnNvblByYXlpbmcsCiAgICAgIGZhUHJheSwKICAgICAgZmFDbGlwYm9hcmRMaXN0LAogICAgICBmYVNhY2tEb2xsYXIsCiAgICAgIGZhTW91bnRhaW5TdW4sCiAgICAgIGZhQXJyb3dVcFdpZGVTaG9ydCwKICAgICAgZmFTb3J0QW1vdW50VXAsCiAgICAgIGZhVXNlcnNMaW5lLAogICAgICBmYVN0YXJPZkRhdmlkLAogICAgICBmYU5vdGVzTWVkaWNhbCwKICAgICAgZmFBdXN0cmFsU2lnbiwKICAgICAgZmFDbGlwYm9hcmRVc2VyLAogICAgICBmYUZpbGVJbWFnZTogZmFGaWxlSW1hZ2UyLAogICAgICBmYVNxdWFyZUNhcmV0UmlnaHQ6IGZhU3F1YXJlQ2FyZXRSaWdodDIsCiAgICAgIGZhQ2FyZXRTcXVhcmVSaWdodDogZmFDYXJldFNxdWFyZVJpZ2h0MiwKICAgICAgZmFWaWFsLAogICAgICBmYUhlbGljb3B0ZXIsCiAgICAgIGZhTWl0dGVuLAogICAgICBmYUdhc1B1bXAsCiAgICAgIGZhRW52ZWxvcGVDaXJjbGVDaGVjaywKICAgICAgZmFQZXJzb25Ta2F0aW5nLAogICAgICBmYVNrYXRpbmcsCiAgICAgIGZhU3VuOiBmYVN1bjIsCiAgICAgIGZhQmFzZWJhbGwsCiAgICAgIGZhQmFzZWJhbGxCYWxsLAogICAgICBmYUltYWdlOiBmYUltYWdlMiwKICAgICAgZmFOb3RkZWYsCiAgICAgIGZhQmFza2V0YmFsbCwKICAgICAgZmFCYXNrZXRiYWxsQmFsbCwKICAgICAgZmFQZW5jaWwsCiAgICAgIGZhUGVuY2lsQWx0LAogICAgICBmYVBlcnNvbldhbGtpbmdBcnJvd0xvb3BMZWZ0LAogICAgICBmYURpY2VTaXgsCiAgICAgIGZhQW5nbGVzRG93biwKICAgICAgZmFBbmdsZURvdWJsZURvd24sCiAgICAgIGZhU3lyaW5nZSwKICAgICAgZmFXaGVhdEF3biwKICAgICAgZmFXaGVhdEFsdCwKICAgICAgZmFQbGFuZVVwLAogICAgICBmYUFsaWduQ2VudGVyLAogICAgICBmYUhvY2tleVB1Y2ssCiAgICAgIGZhQ2lyY2xlQXJyb3dMZWZ0LAogICAgICBmYUFycm93Q2lyY2xlTGVmdCwKICAgICAgZmFQbHVnQ2lyY2xlQm9sdCwKICAgICAgZmFSZXN0cm9vbSwKICAgICAgZmFBbmNob3JMb2NrLAogICAgICBmYVRpbWVsaW5lLAogICAgICBmYUxpZ2h0YnVsYjogZmFMaWdodGJ1bGIyLAogICAgICBmYUNpcmNsZUFycm93UmlnaHQsCiAgICAgIGZhQXJyb3dDaXJjbGVSaWdodCwKICAgICAgZmFNYXJzQW5kVmVudXMsCiAgICAgIGZhTmV0d29ya1dpcmVkLAogICAgICBmYUJ1aWxkaW5nU2hpZWxkLAogICAgICBmYUNvZGUsCiAgICAgIGZhRmVhdGhlclBvaW50ZWQsCiAgICAgIGZhRmVhdGhlckFsdCwKICAgICAgZmFGaWxlQ2lyY2xlUXVlc3Rpb24sCiAgICAgIGZhU2lnbmF0dXJlLAogICAgICBmYUVhcnRoQW1lcmljYXMsCiAgICAgIGZhRWFydGgsCiAgICAgIGZhRWFydGhBbWVyaWNhLAogICAgICBmYUdsb2JlQW1lcmljYXMsCiAgICAgIGZhQ2Fycm90LAogICAgICBmYVRlbXBlcmF0dXJlRnVsbCwKICAgICAgZmFUZW1wZXJhdHVyZTQsCiAgICAgIGZhVGhlcm1vbWV0ZXI0LAogICAgICBmYVRoZXJtb21ldGVyRnVsbCwKICAgICAgZmFUYWJsZUNlbGxzUm93TG9jaywKICAgICAgZmFCb2x0TGlnaHRuaW5nLAogICAgICBmYUNsb3VkU2hvd2Vyc1dhdGVyLAogICAgICBmYUFycm93VXBMb25nLAogICAgICBmYUxvbmdBcnJvd1VwLAogICAgICBmYUFkZHJlc3NDYXJkOiBmYUFkZHJlc3NDYXJkMiwKICAgICAgZmFDb250YWN0Q2FyZDogZmFDb250YWN0Q2FyZDIsCiAgICAgIGZhVmNhcmQ6IGZhVmNhcmQyLAogICAgICBmYUFuZ2xlUmlnaHQsCiAgICAgIGZhRmFjZU1laDogZmFGYWNlTWVoMiwKICAgICAgZmFNZWg6IGZhTWVoMiwKICAgICAgZmFBcnJvd1VwRnJvbUdyb3VuZFdhdGVyLAogICAgICBmYU1hcDogZmFNYXAyLAogICAgICBmYVVzZXJQbHVzLAogICAgICBmYVZlbnVzLAogICAgICBmYURpYWdyYW1TdWNjZXNzb3IsCiAgICAgIGZhSGVhZFNpZGVDb3VnaFNsYXNoLAogICAgICBmYURpYWdyYW1Qcm9qZWN0LAogICAgICBmYVByb2plY3REaWFncmFtLAogICAgICBmYVRlcm1pbmFsLAogICAgICBmYUhvdXNlRmlyZSwKICAgICAgZmFNYXNrLAogICAgICBmYUh1cnJpY2FuZSwKICAgICAgZmFFYXJ0aEFmcmljYSwKICAgICAgZmFHbG9iZUFmcmljYSwKICAgICAgZmFUaHVtYnRhY2ssCiAgICAgIGZhVGh1bWJUYWNrLAogICAgICBmYUhhbmRQb2ludERvd246IGZhSGFuZFBvaW50RG93bjIsCiAgICAgIGZhRmFjZU1laEJsYW5rOiBmYUZhY2VNZWhCbGFuazIsCiAgICAgIGZhTWVoQmxhbms6IGZhTWVoQmxhbmsyLAogICAgICBmYVRlbXBlcmF0dXJlRW1wdHksCiAgICAgIGZhVGVtcGVyYXR1cmUwLAogICAgICBmYVRoZXJtb21ldGVyMCwKICAgICAgZmFUaGVybW9tZXRlckVtcHR5LAogICAgICBmYUJvcmRlck5vbmUsCiAgICAgIGZhSGlnaGxpZ2h0ZXIsCiAgICAgIGZhTW9uZXlCaWxsV2F2ZSwKICAgICAgZmFUb2lsZXRQYXBlclNsYXNoLAogICAgICBmYUZpbGVTaGllbGQsCiAgICAgIGZhVGV4dEhlaWdodCwKICAgICAgZmFGYWNlR3JpblRvbmd1ZTogZmFGYWNlR3JpblRvbmd1ZTIsCiAgICAgIGZhR3JpblRvbmd1ZTogZmFHcmluVG9uZ3VlMiwKICAgICAgZmFGaWxlU2lnbmF0dXJlLAogICAgICBmYUJ1aWxkaW5nV2hlYXQsCiAgICAgIGZhUGx1Z0NpcmNsZU1pbnVzLAogICAgICBmYUZ1dGJvbDogZmFGdXRib2wyLAogICAgICBmYUZ1dGJvbEJhbGw6IGZhRnV0Ym9sQmFsbDIsCiAgICAgIGZhU29jY2VyQmFsbDogZmFTb2NjZXJCYWxsMiwKICAgICAgZmFDaXJjbGVQbHVzLAogICAgICBmYVBsdXNDaXJjbGUsCiAgICAgIGZhQnJhemlsaWFuUmVhbFNpZ24sCiAgICAgIGZhU3RhckFuZENyZXNjZW50LAogICAgICBmYUZhY2VTdXJwcmlzZTogZmFGYWNlU3VycHJpc2UyLAogICAgICBmYVN1cnByaXNlOiBmYVN1cnByaXNlMiwKICAgICAgZmFIb3NwaXRhbFVzZXIsCiAgICAgIGZhQXJyb3dEb3duVXBMb2NrLAogICAgICBmYUZvbGRlcjogZmFGb2xkZXIyLAogICAgICBmYUZvbGRlckJsYW5rOiBmYUZvbGRlckJsYW5rMiwKICAgICAgZmFIb2xseUJlcnJ5LAogICAgICBmYVZlbnVzRG91YmxlLAogICAgICBmYUNsaXBib2FyZFF1ZXN0aW9uLAogICAgICBmYUhvdGRvZywKICAgICAgZmFBcnJvd1VwRnJvbUJyYWNrZXQsCiAgICAgIGZhTWljcm9zY29wZSwKICAgICAgZmFDbG91ZDogZmFDbG91ZDIsCiAgICAgIGZhQmFzZWJhbGxCYXRCYWxsLAogICAgICBmYUNhclJlYXIsCiAgICAgIGZhQ2FyQWx0LAogICAgICBmYVRodW1idGFja1NsYXNoLAogICAgICBmYVRodW1iVGFja1NsYXNoLAogICAgICBmYVBsdXNNaW51cywKICAgICAgZmFIb3VzZUNpcmNsZUNoZWNrLAogICAgICBmYUNhbGVuZGFyRGF5LAogICAgICBmYUNpcmNsZTogZmFDaXJjbGUyLAogICAgICBmYU1vYmlsZVZpYnJhdGUsCiAgICAgIGZhRmFjZUdyaW5TcXVpbnQ6IGZhRmFjZUdyaW5TcXVpbnQyLAogICAgICBmYUdyaW5TcXVpbnQ6IGZhR3JpblNxdWludDIsCiAgICAgIGZhVXNlcnNCZXR3ZWVuTGluZXMsCiAgICAgIGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcmssCiAgICAgIGZhVGFibGVMaXN0LAogICAgICBmYVRoTGlzdCwKICAgICAgZmFGbGFza1ZpYWwsCiAgICAgIGZhQ2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhRXhjbGFtYXRpb25DaXJjbGUsCiAgICAgIGZhVGF4aSwKICAgICAgZmFDYWIsCiAgICAgIGZhVGV4dFNsYXNoLAogICAgICBmYVJlbW92ZUZvcm1hdCwKICAgICAgZmFQZW9wbGVQdWxsaW5nLAogICAgICBmYUJhY2t3YXJkLAogICAgICBmYUNhckJ1cnN0LAogICAgICBmYUNhckNyYXNoLAogICAgICBmYUxpbmssCiAgICAgIGZhQ2hhaW4sCiAgICAgIGZhQmFja3dhcmRTdGVwLAogICAgICBmYVN0ZXBCYWNrd2FyZCwKICAgICAgZmFYLAogICAgICBmYUNpcmNsZVVzZXI6IGZhQ2lyY2xlVXNlcjIsCiAgICAgIGZhVXNlckNpcmNsZTogZmFVc2VyQ2lyY2xlMiwKICAgICAgZmFSZWN0YW5nbGVMaXN0OiBmYVJlY3RhbmdsZUxpc3QyLAogICAgICBmYUxpc3RBbHQ6IGZhTGlzdEFsdDIsCiAgICAgIGZhSGFuZDogZmFIYW5kMiwKICAgICAgZmFIYW5kUGFwZXI6IGZhSGFuZFBhcGVyMiwKICAgICAgZmFWYW5TaHV0dGxlLAogICAgICBmYVNodXR0bGVWYW4sCiAgICAgIGZhU3RhaXJzLAogICAgICBmYUhvcnNlSGVhZCwKICAgICAgZmFWYXVsdCwKICAgICAgZmFEcnVtU3RlZWxwYW4sCiAgICAgIGZhVGh1bWJzVXA6IGZhVGh1bWJzVXAyLAogICAgICBmYVN0YW1wLAogICAgICBmYU1lbm9yYWgsCiAgICAgIGZhQ2hpbGRyZW4sCiAgICAgIGZhQ2hhcnRMaW5lLAogICAgICBmYUxpbmVDaGFydCwKICAgICAgZmFTcXVhcmVFbnZlbG9wZSwKICAgICAgZmFFbnZlbG9wZVNxdWFyZSwKICAgICAgZmFCYW5TbW9raW5nLAogICAgICBmYVNtb2tpbmdCYW4sCiAgICAgIGZhVHJ1Y2tGcm9udCwKICAgICAgZmFCdWlsZGluZzogZmFCdWlsZGluZzIsCiAgICAgIGZhQnVsbHNleWUsCiAgICAgIGZhQXJyb3dMZWZ0TG9uZywKICAgICAgZmFMb25nQXJyb3dMZWZ0LAogICAgICBmYUNoZXNzUm9vazogZmFDaGVzc1Jvb2syLAogICAgICBmYUJsZW5kZXJQaG9uZSwKICAgICAgZmFBcnJvd1R1cm5VcCwKICAgICAgZmFMZXZlbFVwLAogICAgICBmYUJpY3ljbGUsCiAgICAgIGZhQ2lyY2xlQXJyb3dEb3duLAogICAgICBmYUFycm93Q2lyY2xlRG93biwKICAgICAgZmFHZWFyLAogICAgICBmYUNvZywKICAgICAgZmFNYXJzQW5kVmVudXNCdXJzdCwKICAgICAgZmFPdHRlciwKICAgICAgZmFDaXJjbGVDaGV2cm9uTGVmdCwKICAgICAgZmFDaGV2cm9uQ2lyY2xlTGVmdCwKICAgICAgZmFDaXJjbGVRdWVzdGlvbjogZmFDaXJjbGVRdWVzdGlvbjIsCiAgICAgIGZhUXVlc3Rpb25DaXJjbGU6IGZhUXVlc3Rpb25DaXJjbGUyLAogICAgICBmYVdhbGtpZVRhbGtpZSwKICAgICAgZmFVc2VyR3JvdXAsCiAgICAgIGZhVXNlckZyaWVuZHMsCiAgICAgIGZhSG91c2VDaGltbmV5LAogICAgICBmYUhvbWVMZywKICAgICAgZmFSaWdodEZyb21CcmFja2V0LAogICAgICBmYVNpZ25PdXRBbHQsCiAgICAgIGZhRmlsZTogZmFGaWxlMiwKICAgICAgZmFQbGFuZVNsYXNoLAogICAgICBmYUNsb3VkU2hvd2Vyc0hlYXZ5LAogICAgICBmYVBlcnNvbkZhbGxpbmcsCiAgICAgIGZhVHVybkRvd24sCiAgICAgIGZhTGV2ZWxEb3duQWx0LAogICAgICBmYVVwUmlnaHRBbmREb3duTGVmdEZyb21DZW50ZXIsCiAgICAgIGZhRXhwYW5kQWx0LAogICAgICBmYVVzZXJUYWcsCiAgICAgIGZhSGFuZFNwYXJrbGVzLAogICAgICBmYUFycm93c1RvRG90LAogICAgICBmYUZhY2VTYWRDcnk6IGZhRmFjZVNhZENyeTIsCiAgICAgIGZhU2FkQ3J5OiBmYVNhZENyeTIsCiAgICAgIGZhRG9uZ1NpZ24sCiAgICAgIGZhUGVvcGxlTGluZSwKICAgICAgZmFTcXVhcmVSc3MsCiAgICAgIGZhUnNzU3F1YXJlLAogICAgICBmYUNhbGVuZGFyTWludXM6IGZhQ2FsZW5kYXJNaW51czIsCiAgICAgIGZhQ2hhcnREaWFncmFtLAogICAgICBmYUZhY2VUaXJlZDogZmFGYWNlVGlyZWQyLAogICAgICBmYVRpcmVkOiBmYVRpcmVkMiwKICAgICAgZmFIYW5kUG9pbnRSaWdodDogZmFIYW5kUG9pbnRSaWdodDIsCiAgICAgIGZhQXJyb3dVcCwKICAgICAgZmFDdWJlc1N0YWNrZWQsCiAgICAgIGZhQ2hpbGRDb21iYXRhbnQsCiAgICAgIGZhQ2hpbGRSaWZsZSwKICAgICAgZmFWZXN0UGF0Y2hlcywKICAgICAgZmFNYXJ0aW5pR2xhc3NFbXB0eSwKICAgICAgZmFHbGFzc01hcnRpbmksCiAgICAgIGZhTWFnbmV0LAogICAgICBmYVJvYWRCYXJyaWVyLAogICAgICBmYUNvbXBhc3NEcmFmdGluZywKICAgICAgZmFEcmFmdGluZ0NvbXBhc3MsCiAgICAgIGZhU3F1YXJlUGVyc29uQ29uZmluZWQsCiAgICAgIGZhUGxhdGVXaGVhdCwKICAgICAgZmFTaWduSGFuZ2luZywKICAgICAgZmFTaWduLAogICAgICBmYUNhckJhdHRlcnksCiAgICAgIGZhQmF0dGVyeUNhciwKICAgICAgZmFTaGlydCwKICAgICAgZmFUU2hpcnQsCiAgICAgIGZhVHNoaXJ0LAogICAgICBmYVBhcmFncmFwaCwKICAgICAgZmFFbnZlbG9wZXNCdWxrLAogICAgICBmYU1haWxCdWxrLAogICAgICBmYUd1aXRhciwKICAgICAgZmFTdWl0Y2FzZSwKICAgICAgZmFDaXJjbGVVcDogZmFDaXJjbGVVcDIsCiAgICAgIGZhQXJyb3dBbHRDaXJjbGVVcDogZmFBcnJvd0FsdENpcmNsZVVwMiwKICAgICAgZmFGLAogICAgICBmYVhtYXJrc0xpbmVzLAogICAgICBmYUVhcnRoT2NlYW5pYSwKICAgICAgZmFHbG9iZU9jZWFuaWEsCiAgICAgIGZhQ29tbWVudFNsYXNoLAogICAgICBmYVBsYXksCiAgICAgIGZhVmlhbENpcmNsZUNoZWNrLAogICAgICBmYUJyaWRnZUNpcmNsZUNoZWNrLAogICAgICBmYUNlZGlTaWduLAogICAgICBmYVB1enpsZVBpZWNlLAogICAgICBmYUhlbG1ldFVuLAogICAgICBmYUdsYXNzV2F0ZXIsCiAgICAgIGZhSGVhcnRDaXJjbGVCb2x0LAogICAgICBmYVB1bXBTb2FwLAogICAgICBmYUhhbmRTY2lzc29yczogZmFIYW5kU2Npc3NvcnMyLAogICAgICBmYURvbGx5LAogICAgICBmYURvbGx5Qm94LAogICAgICBmYVBhcGVyY2xpcCwKICAgICAgZmFEZW1vY3JhdCwKICAgICAgZmFTcXVhcmVBcnJvd1VwUmlnaHQsCiAgICAgIGZhRXh0ZXJuYWxMaW5rU3F1YXJlLAogICAgICBmYUZlcnJ5LAogICAgICBmYU1vc3F1aXRvLAogICAgICBmYUJ1aWxkaW5nQ2lyY2xlQXJyb3dSaWdodCwKICAgICAgZmFMZWZ0UmlnaHQsCiAgICAgIGZhQXJyb3dzQWx0SCwKICAgICAgZmFWaXJ1cywKICAgICAgZmFHZW06IGZhR2VtMiwKICAgICAgZmFUb2lsZXQsCiAgICAgIGZhU2luZ2xlUXVvdGVMZWZ0LAogICAgICBmYU1vbmV5QmlsbHMsCiAgICAgIGZhVGFibGV0QnV0dG9uLAogICAgICBmYVJlY3RhbmdsZVhtYXJrOiBmYVJlY3RhbmdsZVhtYXJrMiwKICAgICAgZmFSZWN0YW5nbGVUaW1lczogZmFSZWN0YW5nbGVUaW1lczIsCiAgICAgIGZhVGltZXNSZWN0YW5nbGU6IGZhVGltZXNSZWN0YW5nbGUyLAogICAgICBmYVdpbmRvd0Nsb3NlOiBmYVdpbmRvd0Nsb3NlMiwKICAgICAgZmFXcmVuY2gsCiAgICAgIGZhVHJhc2hDYW46IGZhVHJhc2hDYW4yLAogICAgICBmYVRyYXNoQWx0OiBmYVRyYXNoQWx0MiwKICAgICAgZmFUYWJsZUNlbGxzLAogICAgICBmYVRoLAogICAgICBmYVJpYmJvbiwKICAgICAgZmFMYW5kbWFya0ZsYWcsCiAgICAgIGZhVXBEb3duTGVmdFJpZ2h0LAogICAgICBmYUFycm93c0FsdCwKICAgICAgZmFDYXJTaWRlLAogICAgICBmYVRyYXNoQXJyb3dVcCwKICAgICAgZmFUcmFzaFJlc3RvcmUsCiAgICAgIGZhTGlmZVJpbmc6IGZhTGlmZVJpbmcyLAogICAgICBmYUNvcHlyaWdodDogZmFDb3B5cmlnaHQyLAogICAgICBmYUZpbGVQcmVzY3JpcHRpb24sCiAgICAgIGZhRXJhc2VyLAogICAgICBmYUhvdXJnbGFzc1N0YXJ0LAogICAgICBmYUhvdXJnbGFzczEsCiAgICAgIGZhQ2lyY2xlTGVmdDogZmFDaXJjbGVMZWZ0MiwKICAgICAgZmFBcnJvd0FsdENpcmNsZUxlZnQ6IGZhQXJyb3dBbHRDaXJjbGVMZWZ0MiwKICAgICAgZmFDcnV6ZWlyb1NpZ24sCiAgICAgIGZhU21va2luZywKICAgICAgZmFTcXVhcmVQb2xsVmVydGljYWwsCiAgICAgIGZhUG9sbCwKICAgICAgZmFQZXJzb25DaXJjbGVNaW51cywKICAgICAgZmFCaW9oYXphcmQsCiAgICAgIGZhQmVsbENvbmNpZXJnZSwKICAgICAgZmFDb25jaWVyZ2VCZWxsLAogICAgICBmYVJ1bGVySG9yaXpvbnRhbCwKICAgICAgZmFIb3JzZSwKICAgICAgZmFDYWxlbmRhcjogZmFDYWxlbmRhcjIsCiAgICAgIGZhSGFuZHNIb2xkaW5nQ2hpbGQsCiAgICAgIGZhSXRhbGljLAogICAgICBmYUtoYW5kYSwKICAgICAgZmFGYWNlRnJvd25PcGVuOiBmYUZhY2VGcm93bk9wZW4yLAogICAgICBmYUZyb3duT3BlbjogZmFGcm93bk9wZW4yLAogICAgICBmYUNoZWNrLAogICAgICBmYUZpbmdlcnByaW50LAogICAgICBmYUNoYXJnaW5nU3RhdGlvbiwKICAgICAgZmFVc2VyTG9jaywKICAgICAgZmFNb2JpbGVTY3JlZW5CdXR0b24sCiAgICAgIGZhTW9iaWxlQWx0LAogICAgICBmYUFuY2hvckNpcmNsZUNoZWNrLAogICAgICBmYVBlcnNvbldhbGtpbmdXaXRoQ2FuZSwKICAgICAgZmFCbGluZCwKICAgICAgZmFGaWxlV2F2ZWZvcm0sCiAgICAgIGZhRmlsZU1lZGljYWxBbHQsCiAgICAgIGZhSG91c2VDcmFjaywKICAgICAgZmFIYXRXaXphcmQsCiAgICAgIGZhVXNlckRvY3RvciwKICAgICAgZmFVc2VyTWQsCiAgICAgIGZhQ2hhcnRCYXI6IGZhQ2hhcnRCYXIyLAogICAgICBmYUJhckNoYXJ0OiBmYUJhckNoYXJ0MiwKICAgICAgZmFTcHJheUNhblNwYXJrbGVzLAogICAgICBmYUFpckZyZXNoZW5lciwKICAgICAgZmFCYWh0U2lnbiwKICAgICAgZmFUZW1wZXJhdHVyZUFycm93VXAsCiAgICAgIGZhVGVtcGVyYXR1cmVVcCwKICAgICAgZmFXZWJBd2Vzb21lOiBmYVdlYkF3ZXNvbWUyLAogICAgICBmYU5vbkJpbmFyeSwKICAgICAgZmFOLAogICAgICBmYUFycm93c1VwRG93bkxlZnRSaWdodCwKICAgICAgZmFBcnJvd3MsCiAgICAgIGZhSG91c2U6IGZhSG91c2UyLAogICAgICBmYUhvbWU6IGZhSG9tZTIsCiAgICAgIGZhSG9tZUFsdDogZmFIb21lQWx0MiwKICAgICAgZmFIb21lTGdBbHQ6IGZhSG9tZUxnQWx0MiwKICAgICAgZmFTcGlubmVyLAogICAgICBmYUdhdmVsLAogICAgICBmYUxlZ2FsLAogICAgICBmYVRpY2tldFNpbXBsZSwKICAgICAgZmFUaWNrZXRBbHQsCiAgICAgIGZhRG92ZSwKICAgICAgZmFUYXJwRHJvcGxldCwKICAgICAgZmFUcmVlQ2l0eSwKICAgICAgZmFUdXJuVXAsCiAgICAgIGZhTGV2ZWxVcEFsdCwKICAgICAgZmFUZW1wZXJhdHVyZVF1YXJ0ZXIsCiAgICAgIGZhVGVtcGVyYXR1cmUxLAogICAgICBmYVRoZXJtb21ldGVyMSwKICAgICAgZmFUaGVybW9tZXRlclF1YXJ0ZXIsCiAgICAgIGZhU2xpZGVycywKICAgICAgZmFTbGlkZXJzSCwKICAgICAgZmFNb3NxdWUsCiAgICAgIGZhSCwKICAgICAgZmFJbmZvLAogICAgICBmYVBlcnNvbldhbGtpbmcsCiAgICAgIGZhV2Fsa2luZywKICAgICAgZmFBcnJvd1R1cm5Eb3duLAogICAgICBmYUxldmVsRG93biwKICAgICAgZmFSb2FkLAogICAgICBmYVNwaXJhbCwKICAgICAgZmFGYWNlRnJvd246IGZhRmFjZUZyb3duMiwKICAgICAgZmFGcm93bjogZmFGcm93bjIsCiAgICAgIGZhV2luZUdsYXNzRW1wdHksCiAgICAgIGZhV2luZUdsYXNzQWx0LAogICAgICBmYUNsYXBwZXJib2FyZCwKICAgICAgZmFGb3J3YXJkU3RlcCwKICAgICAgZmFTdGVwRm9yd2FyZCwKICAgICAgZmFTcXVhcmVVcFJpZ2h0LAogICAgICBmYUV4dGVybmFsTGlua1NxdWFyZUFsdCwKICAgICAgZmFCb29rSm91cm5hbFdoaWxscywKICAgICAgZmFKb3VybmFsV2hpbGxzLAogICAgICBmYUNoYW1wYWduZUdsYXNzZXMsCiAgICAgIGZhR2xhc3NDaGVlcnMsCiAgICAgIGZhRHVtcHN0ZXIsCiAgICAgIGZhSGVhcnRDaXJjbGVYbWFyaywKICAgICAgZmFDb21wdXRlciwKICAgICAgZmFXYW5kTWFnaWMsCiAgICAgIGZhTWFnaWMsCiAgICAgIGZhQnJhaW4sCiAgICAgIGZhQnJpZWZjYXNlTWVkaWNhbCwKICAgICAgZmFIb3VzZU1lZGljYWxDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFDb2RlQ29tbWl0LAogICAgICBmYVBlcnNvbkJyZWFzdGZlZWRpbmcsCiAgICAgIGZhUGVyc29uUmF5cywKICAgICAgZmFNYW5hdFNpZ24sCiAgICAgIGZhU29ydCwKICAgICAgZmFVbnNvcnRlZCwKICAgICAgZmFDaXJjbGVSYWRpYXRpb24sCiAgICAgIGZhUmFkaWF0aW9uQWx0LAogICAgICBmYUxhcHRvcENvZGUsCiAgICAgIGZhU2luaywKICAgICAgZmFBcnJvd1VwRnJvbVdhdGVyUHVtcCwKICAgICAgZmFNaWNyb3Bob25lTGluZXNTbGFzaCwKICAgICAgZmFNaWNyb3Bob25lQWx0U2xhc2gsCiAgICAgIGZhU2VydmVyLAogICAgICBmYVVzZXI6IGZhVXNlcjIsCiAgICAgIGZhVXNlckFsdDogZmFVc2VyQWx0MiwKICAgICAgZmFVc2VyTGFyZ2U6IGZhVXNlckxhcmdlMiwKICAgICAgZmFTbm93Zmxha2U6IGZhU25vd2ZsYWtlMiwKICAgICAgZmFTa3VsbENyb3NzYm9uZXMsCiAgICAgIGZhUGVzb1NpZ24sCiAgICAgIGZhV2luZUdsYXNzLAogICAgICBmYVRlbXBlcmF0dXJlSGFsZiwKICAgICAgZmFUZW1wZXJhdHVyZTIsCiAgICAgIGZhVGhlcm1vbWV0ZXIyLAogICAgICBmYVRoZXJtb21ldGVySGFsZiwKICAgICAgZmFUaWNrZXQsCiAgICAgIGZhV2hlYXRBd25DaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFBcnJvd3NUdXJuUmlnaHQsCiAgICAgIGZhQ2FuZHlDYW5lLAogICAgICBmYVdoZWVsY2hhaXIsCiAgICAgIGZhU3BlbGxDaGVjaywKICAgICAgZmFWb2x1bWVPZmYsCiAgICAgIGZhTHVuZ3MsCiAgICAgIGZhQm9va21hcms6IGZhQm9va21hcmsyLAogICAgICBmYUJhcmNvZGUsCiAgICAgIGZhTGlzdE9sLAogICAgICBmYUxpc3QxMiwKICAgICAgZmFMaXN0TnVtZXJpYywKICAgICAgZmFGaWxlQ2lyY2xlWG1hcmssCiAgICAgIGZhQ3ViZSwKICAgICAgZmFUYXBlLAogICAgICBmYUJvbWIsCiAgICAgIGZhU2NhbGVVbmJhbGFuY2VkLAogICAgICBmYUJhbGFuY2VTY2FsZUxlZnQsCiAgICAgIGZhU3F1YXJlQ2FyZXRMZWZ0OiBmYVNxdWFyZUNhcmV0TGVmdDIsCiAgICAgIGZhQ2FyZXRTcXVhcmVMZWZ0OiBmYUNhcmV0U3F1YXJlTGVmdDIsCiAgICAgIGZhUnVsZXIsCiAgICAgIGZhSSwKICAgICAgZmFWb2x1bWVYbWFyaywKICAgICAgZmFWb2x1bWVNdXRlLAogICAgICBmYVZvbHVtZVRpbWVzLAogICAgICBmYUFyY2h3YXksCiAgICAgIGZhUGVyc29uRGlnZ2luZywKICAgICAgZmFEaWdnaW5nLAogICAgICBmYUdhdWdlSGlnaCwKICAgICAgZmFUYWNob21ldGVyQWx0LAogICAgICBmYVRhY2hvbWV0ZXJBbHRGYXN0LAogICAgICBmYUdlbmRlcmxlc3MsCiAgICAgIGZhQ2xvdWRTdW4sCiAgICAgIGZhQXJyb3dSaWdodCwKICAgICAgZmFIYW5kc2hha2U6IGZhSGFuZHNoYWtlMiwKICAgICAgZmFIYW5kc2hha2VBbHQ6IGZhSGFuZHNoYWtlQWx0MiwKICAgICAgZmFIYW5kc2hha2VTaW1wbGU6IGZhSGFuZHNoYWtlU2ltcGxlMiwKICAgICAgZmFQZXJzb25Ta2lpbmcsCiAgICAgIGZhU2tpaW5nLAogICAgICBmYUJyaWRnZVdhdGVyLAogICAgICBmYUJ1aWxkaW5nTmdvLAogICAgICBmYUlnbG9vLAogICAgICBmYUNpcmNsZURvbGxhclRvU2xvdCwKICAgICAgZmFEb25hdGUsCiAgICAgIGZhWSwKICAgICAgZmFGYWNlU21pbGVXaW5rOiBmYUZhY2VTbWlsZVdpbmsyLAogICAgICBmYVNtaWxlV2luazogZmFTbWlsZVdpbmsyLAogICAgICBmYURpY2VGb3VyLAogICAgICBmYUZhY2VHcmluU3F1aW50VGVhcnM6IGZhRmFjZUdyaW5TcXVpbnRUZWFyczIsCiAgICAgIGZhR3JpblNxdWludFRlYXJzOiBmYUdyaW5TcXVpbnRUZWFyczIsCiAgICAgIGZhRmlsZUF1ZGlvOiBmYUZpbGVBdWRpbzIsCiAgICAgIGZhQXJyb3dzRG93blRvTGluZSwKICAgICAgZmFHLAogICAgICBmYVZpaGFyYSwKICAgICAgZmFGbGFnQ2hlY2tlcmVkLAogICAgICBmYUdhdWdlU2ltcGxlLAogICAgICBmYUdhdWdlU2ltcGxlTWVkLAogICAgICBmYVRhY2hvbWV0ZXJBdmVyYWdlLAogICAgICBmYVJpZ2h0TGVmdCwKICAgICAgZmFFeGNoYW5nZUFsdCwKICAgICAgZmFQaWxscywKICAgICAgZmFFeHBsb3Npb24sCiAgICAgIGZhQXJyb3dzRG93blRvUGVvcGxlLAogICAgICBmYVVzZXJzVmlld2ZpbmRlciwKICAgICAgZmFDYXJPbiwKICAgICAgZmFTbGVpZ2gsCiAgICAgIGZhRHVtYmJlbGwsCiAgICAgIGZhQmFieUNhcnJpYWdlLAogICAgICBmYUNhcnJpYWdlQmFieSwKICAgICAgZmFLaXdpQmlyZCwKICAgICAgZmFDYWxlbmRhclhtYXJrOiBmYUNhbGVuZGFyWG1hcmsyLAogICAgICBmYUNhbGVuZGFyVGltZXM6IGZhQ2FsZW5kYXJUaW1lczIsCiAgICAgIGZhQ2lyY2xlRG93bjogZmFDaXJjbGVEb3duMiwKICAgICAgZmFBcnJvd0FsdENpcmNsZURvd246IGZhQXJyb3dBbHRDaXJjbGVEb3duMiwKICAgICAgZmFGaWxlTWVkaWNhbCwKICAgICAgZmFYbWFyaywKICAgICAgZmFDbG9zZSwKICAgICAgZmFNdWx0aXBseSwKICAgICAgZmFSZW1vdmUsCiAgICAgIGZhVGltZXMsCiAgICAgIGZhU2hhcGVzLAogICAgICBmYVRyaWFuZ2xlQ2lyY2xlU3F1YXJlLAogICAgICBmYURpY2VPbmUsCiAgICAgIGZhTG9ja09wZW4sCiAgICAgIGZhUGVwcGVySG90LAogICAgICBmYURyb3BsZXRTbGFzaCwKICAgICAgZmFUaW50U2xhc2gsCiAgICAgIGZhRHJvcGxldCwKICAgICAgZmFUaW50LAogICAgICBmYUZpbGVMaW5lczogZmFGaWxlTGluZXMyLAogICAgICBmYUZpbGVBbHQ6IGZhRmlsZUFsdDIsCiAgICAgIGZhRmlsZVRleHQ6IGZhRmlsZVRleHQyLAogICAgICBmYUNvbW1lbnRzRG9sbGFyLAogICAgICBmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uLAogICAgICBmYVNlYXJjaExvY2F0aW9uLAogICAgICBmYUZpbGVJbnZvaWNlLAogICAgICBmYVBlbnRhZ29uLAogICAgICBmYVJlcHVibGljYW4sCiAgICAgIGZhU2hvcCwKICAgICAgZmFTdG9yZUFsdCwKICAgICAgZmFGaWxtLAogICAgICBmYUZpbG1BbHQsCiAgICAgIGZhRmlsbVNpbXBsZSwKICAgICAgZmFCdWlsZGluZ0NpcmNsZVhtYXJrLAogICAgICBmYUNvbW1lbnRzOiBmYUNvbW1lbnRzMiwKICAgICAgZmFUYWdzLAogICAgICBmYUd1biwKICAgICAgZmFDaXJjbGVDaGVjazogZmFDaXJjbGVDaGVjazIsCiAgICAgIGZhQ2hlY2tDaXJjbGU6IGZhQ2hlY2tDaXJjbGUyLAogICAgICBmYUlkQ2FyZENsaXAsCiAgICAgIGZhSWRDYXJkQWx0LAogICAgICBmYU1vb246IGZhTW9vbjIsCiAgICAgIGZhT2lsV2VsbCwKICAgICAgZmFUYWNob2dyYXBoRGlnaXRhbCwKICAgICAgZmFEaWdpdGFsVGFjaG9ncmFwaCwKICAgICAgZmFUYWJsZXQsCiAgICAgIGZhVGFibGV0QW5kcm9pZCwKICAgICAgZmFSdWJsZVNpZ24sCiAgICAgIGZhUm91YmxlLAogICAgICBmYVJ1YiwKICAgICAgZmFSdWJsZSwKICAgICAgZmFDbG9zZWRDYXB0aW9uaW5nOiBmYUNsb3NlZENhcHRpb25pbmcyLAogICAgICBmYVBlbiwKICAgICAgZmFQbGFuZSwKICAgICAgZmFJbWFnZXM6IGZhSW1hZ2VzMiwKICAgICAgZmFNb2JpbGVTY3JlZW4sCiAgICAgIGZhTW9iaWxlQW5kcm9pZEFsdCwKICAgICAgZmFHdWFyYW5pU2lnbiwKICAgICAgZmFCYWdTaG9wcGluZywKICAgICAgZmFTaG9wcGluZ0JhZywKICAgICAgZmFDaXJjbGVSaWdodDogZmFDaXJjbGVSaWdodDIsCiAgICAgIGZhQXJyb3dBbHRDaXJjbGVSaWdodDogZmFBcnJvd0FsdENpcmNsZVJpZ2h0MiwKICAgICAgZmFQaG9uZVZvbHVtZSwKICAgICAgZmFWb2x1bWVDb250cm9sUGhvbmUsCiAgICAgIGZhQ3ViZXMsCiAgICAgIGZhUGhvbmUsCiAgICAgIGZhVG9yaWlHYXRlLAogICAgICBmYUJhY29uLAogICAgICBmYVBlcnNvbkZhbGxpbmdCdXJzdCwKICAgICAgZmFRdW90ZVJpZ2h0LAogICAgICBmYVF1b3RlUmlnaHRBbHQsCiAgICAgIGZhSG91c2VNZWRpY2FsRmxhZywKICAgICAgZmFQcmVzY3JpcHRpb24sCiAgICAgIGZhRGljZVRocmVlLAogICAgICBmYUJ1aWxkaW5nTG9jaywKICAgICAgZmFJZENhcmQ6IGZhSWRDYXJkMiwKICAgICAgZmFEcml2ZXJzTGljZW5zZTogZmFEcml2ZXJzTGljZW5zZTIsCiAgICAgIGZhQ2lyY2xlUGxheTogZmFDaXJjbGVQbGF5MiwKICAgICAgZmFQbGF5Q2lyY2xlOiBmYVBsYXlDaXJjbGUyLAogICAgICBmYUZhY2VMYXVnaEJlYW06IGZhRmFjZUxhdWdoQmVhbTIsCiAgICAgIGZhTGF1Z2hCZWFtOiBmYUxhdWdoQmVhbTIsCiAgICAgIGZhTGVhZiwKICAgICAgZmFIb3VzZUNoaW1uZXlVc2VyLAogICAgICBmYVJvdGF0ZVJpZ2h0LAogICAgICBmYVJlZG9BbHQsCiAgICAgIGZhUm90YXRlRm9yd2FyZCwKICAgICAgZmFUb290aCwKICAgICAgZmFIb3VzZUNoaW1uZXlXaW5kb3csCiAgICAgIGZhTW90b3JjeWNsZSwKICAgICAgZmFCYWNrd2FyZEZhc3QsCiAgICAgIGZhRmFzdEJhY2t3YXJkLAogICAgICBmYUFkZHJlc3NCb29rOiBmYUFkZHJlc3NCb29rMiwKICAgICAgZmFDb250YWN0Qm9vazogZmFDb250YWN0Qm9vazIsCiAgICAgIGZhU2FpbGJvYXQsCiAgICAgIGZhQm9va0Jvb2ttYXJrLAogICAgICBmYU1hZ25pZnlpbmdHbGFzc0Fycm93UmlnaHQsCiAgICAgIGZhTWljcm9waG9uZUxpbmVzLAogICAgICBmYU1pY3JvcGhvbmVBbHQsCiAgICAgIGZhUmVwbHlBbGwsCiAgICAgIGZhTWFpbFJlcGx5QWxsLAogICAgICBmYVVuaXZlcnNhbEFjY2VzcywKICAgICAgZmFUb2lsZXRQYXBlciwKICAgICAgZmFUb2lsZXRQYXBlckFsdCwKICAgICAgZmFUb2lsZXRQYXBlckJsYW5rLAogICAgICBmYVZyQ2FyZGJvYXJkLAogICAgICBmYVBpenphU2xpY2UsCiAgICAgIGZhU3ByYXlDYW4sCiAgICAgIGZhVm9sdW1lTG93LAogICAgICBmYVZvbHVtZURvd24sCiAgICAgIGZhQ3Jvc3MsCiAgICAgIGZhUGVyc29uLAogICAgICBmYU1hbGUsCiAgICAgIGZhSG91cmdsYXNzOiBmYUhvdXJnbGFzczMsCiAgICAgIGZhSG91cmdsYXNzRW1wdHk6IGZhSG91cmdsYXNzRW1wdHkyLAogICAgICBmYUZpc2gsCiAgICAgIGZhRHJ1bXN0aWNrQml0ZSwKICAgICAgZmFDaGFydFNpbXBsZSwKICAgICAgZmFBdG9tLAogICAgICBmYVAsCiAgICAgIGZhSmV0RmlnaHRlclVwLAogICAgICBmYVBsdWdDaXJjbGVYbWFyaywKICAgICAgZmFTaGVldFBsYXN0aWMsCiAgICAgIGZhViwKICAgICAgZmFMaXN0LAogICAgICBmYUxpc3RTcXVhcmVzLAogICAgICBmYVNvbGFyUGFuZWwsCiAgICAgIGZhTGFuZE1pbmVPbiwKICAgICAgZmFIZWFkcGhvbmVzOiBmYUhlYWRwaG9uZXMyLAogICAgICBmYUhlYWRwaG9uZXNBbHQ6IGZhSGVhZHBob25lc0FsdDIsCiAgICAgIGZhSGVhZHBob25lc1NpbXBsZTogZmFIZWFkcGhvbmVzU2ltcGxlMiwKICAgICAgZmFCdXMsCiAgICAgIGZhRmlsZVBvd2VycG9pbnQ6IGZhRmlsZVBvd2VycG9pbnQyLAogICAgICBmYVF1b3RlTGVmdCwKICAgICAgZmFRdW90ZUxlZnRBbHQsCiAgICAgIGZhQ2hldnJvbkRvd24sCiAgICAgIGZhRWFydGhBc2lhLAogICAgICBmYUdsb2JlQXNpYSwKICAgICAgZmFDZW50U2lnbiwKICAgICAgZmFTaGllbGRDYXQsCiAgICAgIGZhU2Nob29sQ2lyY2xlQ2hlY2ssCiAgICAgIGZhTWFydGluaUdsYXNzLAogICAgICBmYUdsYXNzTWFydGluaUFsdCwKICAgICAgZmFQbHVnLAogICAgICBmYVBhbm9yYW1hLAogICAgICBmYUNsb2NrUm90YXRlTGVmdCwKICAgICAgZmFIaXN0b3J5LAogICAgICBmYUphcldoZWF0LAogICAgICBmYUNsb3VkQXJyb3dEb3duLAogICAgICBmYUNsb3VkRG93bmxvYWQsCiAgICAgIGZhQ2xvdWREb3dubG9hZEFsdCwKICAgICAgZmFUcnVja1JhbXBCb3gsCiAgICAgIGZhVHJ1Y2tMb2FkaW5nLAogICAgICBmYUFuZ2xlRG93biwKICAgICAgZmFQbHVnQ2lyY2xlQ2hlY2ssCiAgICAgIGZhV2luZG93TWF4aW1pemU6IGZhV2luZG93TWF4aW1pemUyLAogICAgICBmYUhhbmRzSG9sZGluZ0NpcmNsZSwKICAgICAgZmFMb2NhdGlvblBpbiwKICAgICAgZmFNYXBNYXJrZXIsCiAgICAgIGZhQm93bGluZ0JhbGwsCiAgICAgIGZhQ2FydEZsYXRiZWQsCiAgICAgIGZhRG9sbHlGbGF0YmVkLAogICAgICBmYUhvdXNlVXNlciwKICAgICAgZmFIb21lVXNlciwKICAgICAgZmFHaG9zdCwKICAgICAgZmFDb21tZW50Tm9kZXMsCiAgICAgIGZhUGVyc29uQXJyb3dEb3duVG9MaW5lLAogICAgICBmYVBsdWdDaXJjbGVQbHVzLAogICAgICBmYVBlcnNvblN3aW1taW5nLAogICAgICBmYVN3aW1tZXIsCiAgICAgIGZhQ29tbWVudERvdHM6IGZhQ29tbWVudERvdHMyLAogICAgICBmYUNvbW1lbnRpbmc6IGZhQ29tbWVudGluZzIsCiAgICAgIGZhQ2hhcnRQaWUsCiAgICAgIGZhUGllQ2hhcnQsCiAgICAgIGZhRnJvZywKICAgICAgZmFXaW5lQm90dGxlLAogICAgICBmYUluYm94LAogICAgICBmYVNxdWFyZUgsCiAgICAgIGZhSFNxdWFyZSwKICAgICAgZmFIb3VzZU1lZGljYWwsCiAgICAgIGZhQ2lyY2xlQ2hldnJvblJpZ2h0LAogICAgICBmYUNoZXZyb25DaXJjbGVSaWdodCwKICAgICAgZmFGaWxlQ3N2LAogICAgICBmYUhhdENvd2JveSwKICAgICAgZmFGYWNlR3JpblRvbmd1ZVdpbms6IGZhRmFjZUdyaW5Ub25ndWVXaW5rMiwKICAgICAgZmFHcmluVG9uZ3VlV2luazogZmFHcmluVG9uZ3VlV2luazIsCiAgICAgIGZhTCwKICAgICAgZmFBcnJvd0Rvd25TaG9ydFdpZGUsCiAgICAgIGZhU29ydEFtb3VudERlc2MsCiAgICAgIGZhU29ydEFtb3VudERvd25BbHQsCiAgICAgIGZhSG91cmdsYXNzSGFsZjogZmFIb3VyZ2xhc3NIYWxmMiwKICAgICAgZmFIb3VyZ2xhc3MyOiBmYUhvdXJnbGFzczIyLAogICAgICBmYVNwb29uLAogICAgICBmYVV0ZW5zaWxTcG9vbiwKICAgICAgZmFDcmVkaXRDYXJkOiBmYUNyZWRpdENhcmQyLAogICAgICBmYUNyZWRpdENhcmRBbHQ6IGZhQ3JlZGl0Q2FyZEFsdDIsCiAgICAgIGZhRmlsZUludm9pY2VEb2xsYXIsCiAgICAgIGZhU3BhZ2hldHRpTW9uc3RlckZseWluZywKICAgICAgZmFQYXN0YWZhcmlhbmlzbSwKICAgICAgZmFNYXJ0aW5pR2xhc3NDaXRydXMsCiAgICAgIGZhQ29ja3RhaWwsCiAgICAgIGZhQnVsbGhvcm4sCiAgICAgIGZhQm94VGlzc3VlLAogICAgICBmYU1hdHRyZXNzUGlsbG93LAogICAgICBmYUNoZXZyb25MZWZ0LAogICAgICBmYUNsb3VkTW9vblJhaW4sCiAgICAgIGZhQXJyb3dEb3duMTksCiAgICAgIGZhU29ydE51bWVyaWNBc2MsCiAgICAgIGZhU29ydE51bWVyaWNEb3duLAogICAgICBmYUhhbmRTcG9jazogZmFIYW5kU3BvY2syLAogICAgICBmYVdhbmRNYWdpY1NwYXJrbGVzLAogICAgICBmYU1hZ2ljV2FuZFNwYXJrbGVzLAogICAgICBmYUNvbW1lbnRNZWRpY2FsLAogICAgICBmYUJlbGxTbGFzaDogZmFCZWxsU2xhc2gyLAogICAgICBmYUhhbmRzaGFrZVNsYXNoLAogICAgICBmYUhhbmRzaGFrZUFsdFNsYXNoLAogICAgICBmYUhhbmRzaGFrZVNpbXBsZVNsYXNoLAogICAgICBmYUJvdHRsZVdhdGVyLAogICAgICBmYURpY2VEMjAsCiAgICAgIGZhQXJyb3dEb3duWkEsCiAgICAgIGZhU29ydEFscGhhRGVzYywKICAgICAgZmFTb3J0QWxwaGFEb3duQWx0LAogICAgICBmYUJydXNoLAogICAgICBmYVBlcnNvbldhbGtpbmdEYXNoZWRMaW5lQXJyb3dSaWdodCwKICAgICAgZmFBcnJvd1VwU2hvcnRXaWRlLAogICAgICBmYVNvcnRBbW91bnRVcEFsdCwKICAgICAgZmFHcmlwVmVydGljYWwsCiAgICAgIGZhR3JpZFZlcnRpY2FsLAogICAgICBmYUNhclR1bm5lbCwKICAgICAgZmFDaGFydENvbHVtbiwKICAgICAgZmFUcnVja0Fycm93UmlnaHQsCiAgICAgIGZhVHYsCiAgICAgIGZhVGVsZXZpc2lvbiwKICAgICAgZmFUdkFsdCwKICAgICAgZmFTZWN0aW9uLAogICAgICBmYVBlYWNlLAogICAgICBmYVN0YXI6IGZhU3RhcjIsCiAgICAgIGZhRmxhZzogZmFGbGFnMiwKICAgICAgZmFUcmlhbmdsZUV4Y2xhbWF0aW9uLAogICAgICBmYUV4Y2xhbWF0aW9uVHJpYW5nbGUsCiAgICAgIGZhV2FybmluZywKICAgICAgZmFTY2hvb2xDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFHcmFkdWF0aW9uQ2FwLAogICAgICBmYU1vcnRhckJvYXJkLAogICAgICBmYVN0b3JlLAogICAgICBmYVVzZXJBc3Ryb25hdXQsCiAgICAgIGZhQnVpbGRpbmdGbGFnLAogICAgICBmYU11Z1NhdWNlciwKICAgICAgZmFDb2ZmZWUsCiAgICAgIGZhTGVtb246IGZhTGVtb24yLAogICAgICBmYUNhcmF2YW4sCiAgICAgIGZhUSwKICAgICAgZmFMb2NrLAogICAgICBmYVBhaW50Um9sbGVyLAogICAgICBmYVZvbHVtZUhpZ2gsCiAgICAgIGZhVm9sdW1lVXAsCiAgICAgIGZhRm9sZGVyUGx1cywKICAgICAgZmFNZXJjdXJ5LAogICAgICBmYUFuY2hvciwKICAgICAgZmFTcXVhcmVQYXJraW5nLAogICAgICBmYVBhcmtpbmcsCiAgICAgIGZhSGFudWtpYWgsCiAgICAgIGZhUm90YXRlTGVmdCwKICAgICAgZmFSb3RhdGVCYWNrLAogICAgICBmYVJvdGF0ZUJhY2t3YXJkLAogICAgICBmYVVuZG9BbHQsCiAgICAgIGZhSGVhZGluZywKICAgICAgZmFIZWFkZXIsCiAgICAgIGZhQ3Jvc3NoYWlycywKICAgICAgZmFDaXJjbGVOb2RlcywKICAgICAgZmFXaW5kb3dSZXN0b3JlOiBmYVdpbmRvd1Jlc3RvcmUyLAogICAgICBmYVIsCiAgICAgIGZhRmlsdGVyQ2lyY2xlWG1hcmssCiAgICAgIGZhR29wdXJhbSwKICAgICAgZmFIZWFydENpcmNsZU1pbnVzLAogICAgICBmYVN0YXJPZkxpZmUsCiAgICAgIGZhQnVzaW5lc3NUaW1lLAogICAgICBmYUJyaWVmY2FzZUNsb2NrLAogICAgICBmYUZpcmVFeHRpbmd1aXNoZXIsCiAgICAgIGZhQXJyb3dEb3duTG9uZywKICAgICAgZmFMb25nQXJyb3dEb3duLAogICAgICBmYVVzZXJNaW51cywKICAgICAgZmFNb25leUNoZWNrLAogICAgICBmYUhvdXNlTGFwdG9wLAogICAgICBmYUxhcHRvcEhvdXNlLAogICAgICBmYURvd25sb2FkLAogICAgICBmYUNvdWNoLAogICAgICBmYVJvYWRMb2NrLAogICAgICBmYVNjaXNzb3JzLAogICAgICBmYUN1dCwKICAgICAgZmFCdWcsCiAgICAgIGZhQXJyb3dSaWdodEZyb21CcmFja2V0LAogICAgICBmYVNpZ25PdXQsCiAgICAgIGZhSGFuZEhvbGRpbmdIYW5kLAogICAgICBmYVN0cm9vcHdhZmVsLAogICAgICBmYUNoaWxkLAogICAgICBmYUljZUNyZWFtLAogICAgICBmYUNvbXB1dGVyTW91c2UsCiAgICAgIGZhTW91c2UsCiAgICAgIGZhRmF1Y2V0LAogICAgICBmYUF3YXJkLAogICAgICBmYVBlcnNvbkRyb3duaW5nLAogICAgICBmYUNhbWVyYVJvdGF0ZSwKICAgICAgZmFGYWNlR3JpbkhlYXJ0czogZmFGYWNlR3JpbkhlYXJ0czIsCiAgICAgIGZhR3JpbkhlYXJ0czogZmFHcmluSGVhcnRzMiwKICAgICAgZmFGaWxlRnJhZ21lbnQsCiAgICAgIGZhUGVyc29uTWlsaXRhcnlSaWZsZSwKICAgICAgZmFUb2dnbGVPbiwKICAgICAgZmFMdW5nc1ZpcnVzLAogICAgICBmYVRhYmxlVGVubmlzUGFkZGxlQmFsbCwKICAgICAgZmFQaW5nUG9uZ1BhZGRsZUJhbGwsCiAgICAgIGZhVGFibGVUZW5uaXMsCiAgICAgIGZhQm94ZXNQYWNraW5nLAogICAgICBmYVBlcnNvbkNoYWxrYm9hcmQsCiAgICAgIGZhRGljZVR3bywKICAgICAgZmFBcnJvd1JpZ2h0QXJyb3dMZWZ0LAogICAgICBmYUV4Y2hhbmdlLAogICAgICBmYUZvb3RiYWxsLAogICAgICBmYUZvb3RiYWxsQmFsbCwKICAgICAgZmFUcnVja01vbnN0ZXIsCiAgICAgIGZhQXN0ZXJpc2ssCiAgICAgIGZhQmF0dGVyeUZ1bGwsCiAgICAgIGZhQmF0dGVyeSwKICAgICAgZmFCYXR0ZXJ5NSwKICAgICAgZmFDaGlsZERyZXNzLAogICAgICBmYUZhY2VLaXNzQmVhbTogZmFGYWNlS2lzc0JlYW0yLAogICAgICBmYUtpc3NCZWFtOiBmYUtpc3NCZWFtMiwKICAgICAgZmFUcmFzaENhbkFycm93VXAsCiAgICAgIGZhVHJhc2hSZXN0b3JlQWx0LAogICAgICBmYUZvbnQsCiAgICAgIGZhQm9yZUhvbGUsCiAgICAgIGZhVmlydXNDb3ZpZCwKICAgICAgZmFGaWxlUGRmOiBmYUZpbGVQZGYyLAogICAgICBmYUxhbmd1YWdlLAogICAgICBmYVNoaWVsZEhhbHZlZCwKICAgICAgZmFTaGllbGRBbHQsCiAgICAgIGZhQ2FyZXRVcCwKICAgICAgZmFGaWxlUGVuLAogICAgICBmYUZpbGVFZGl0LAogICAgICBmYVBlcnNvbkJpa2luZywKICAgICAgZmFCaWtpbmcsCiAgICAgIGZhQm9va09wZW5SZWFkZXIsCiAgICAgIGZhQm9va1JlYWRlciwKICAgICAgZmFHbGFzc1dhdGVyRHJvcGxldCwKICAgICAgZmFUb3dlckJyb2FkY2FzdCwKICAgICAgZmFCcm9hZGNhc3RUb3dlciwKICAgICAgZmFNaW5pbWl6ZSwKICAgICAgZmFDb21wcmVzc0Fycm93c0FsdCwKICAgICAgZmFBcnJvd1JpZ2h0VG9DaXR5LAogICAgICBmYUxhcHRvcE1lZGljYWwsCiAgICAgIGZhQnJlYWRTbGljZSwKICAgICAgZmFHbG9iZSwKICAgICAgZmFGb2xkZXJNaW51cywKICAgICAgZmFNYXNrRmFjZSwKICAgICAgZmFCb25nLAogICAgICBmYVJvYWRCcmlkZ2UsCiAgICAgIGZhQXJyb3dVcDkxLAogICAgICBmYVNvcnROdW1lcmljVXBBbHQsCiAgICAgIGZhTW91bnRhaW5DaXR5LAogICAgICBmYUFycm93RG93bjkxLAogICAgICBmYVNvcnROdW1lcmljRGVzYywKICAgICAgZmFTb3J0TnVtZXJpY0Rvd25BbHQsCiAgICAgIGZhRmFjZUdyaW5XaWRlOiBmYUZhY2VHcmluV2lkZTIsCiAgICAgIGZhR3JpbkFsdDogZmFHcmluQWx0MiwKICAgICAgZmFQb29wLAogICAgICBmYURoYXJtYWNoYWtyYSwKICAgICAgZmFCYXR0ZXJ5UXVhcnRlciwKICAgICAgZmFCYXR0ZXJ5MiwKICAgICAgZmFBbmtoLAogICAgICBmYURpYW1vbmQsCiAgICAgIGZhU3Vic2NyaXB0LAogICAgICBmYVJ1cGVlU2lnbiwKICAgICAgZmFSdXBlZSwKICAgICAgZmFQZXJzb25SaWZsZSwKICAgICAgZmFELAogICAgICBmYVNxdWFyZU5maSwKICAgICAgZmFUZWV0aCwKICAgICAgZmFNYWduaWZ5aW5nR2xhc3NEb2xsYXIsCiAgICAgIGZhU2VhcmNoRG9sbGFyLAogICAgICBmYUR1bXBzdGVyRmlyZSwKICAgICAgZmFVcGxvYWQsCiAgICAgIGZhVXNlclNsYXNoLAogICAgICBmYVVzZXJBbHRTbGFzaCwKICAgICAgZmFVc2VyTGFyZ2VTbGFzaCwKICAgICAgZmFBcnJvd0xlZnQsCiAgICAgIGZhVmlhbFZpcnVzLAogICAgICBmYUNoZWNrRG91YmxlLAogICAgICBmYVBhdywKICAgICAgZmFIZWxtZXRTYWZldHksCiAgICAgIGZhSGFyZEhhdCwKICAgICAgZmFIYXRIYXJkLAogICAgICBmYUUsCiAgICAgIGZhRmFjZUxhdWdoU3F1aW50OiBmYUZhY2VMYXVnaFNxdWludDIsCiAgICAgIGZhTGF1Z2hTcXVpbnQ6IGZhTGF1Z2hTcXVpbnQyLAogICAgICBmYURvd25MZWZ0QW5kVXBSaWdodFRvQ2VudGVyLAogICAgICBmYUNvbXByZXNzQWx0LAogICAgICBmYUdpZnRzLAogICAgICBmYUJlZCwKICAgICAgZmFNb25leUJpbGxUcmFuc2ZlciwKICAgICAgZmFQZXJzb25SdW5uaW5nLAogICAgICBmYVJ1bm5pbmcsCiAgICAgIGZhQ2lyY2xlQ2hldnJvbkRvd24sCiAgICAgIGZhQ2hldnJvbkNpcmNsZURvd24sCiAgICAgIGZhVXNlck51cnNlLAogICAgICBmYUZhY2VLaXNzV2lua0hlYXJ0OiBmYUZhY2VLaXNzV2lua0hlYXJ0MiwKICAgICAgZmFLaXNzV2lua0hlYXJ0OiBmYUtpc3NXaW5rSGVhcnQyLAogICAgICBmYUZpbGwsCiAgICAgIGZhTW9uZXlCaWxsMVdhdmUsCiAgICAgIGZhTW9uZXlCaWxsV2F2ZUFsdCwKICAgICAgZmFMYW5kbWFyaywKICAgICAgZmFNdXNpYywKICAgICAgZmFCb29rTWVkaWNhbCwKICAgICAgZmFTaHVmZmxlLAogICAgICBmYVJhbmRvbSwKICAgICAgZmFVbmRlcmxpbmUsCiAgICAgIGZhQnVpbGRpbmdVc2VyLAogICAgICBmYVJvYm90LAogICAgICBmYVBsdXMsCiAgICAgIGZhQWRkLAogICAgICBmYUNvcHk6IGZhQ29weTIsCiAgICAgIGZhQ2hlc3NLaW5nOiBmYUNoZXNzS2luZzIsCiAgICAgIGZhSG91c2VGbG9vZFdhdGVyLAogICAgICBmYUJpdGNvaW5TaWduLAogICAgICBmYUJveCwKICAgICAgZmFTcXVhcmVQbHVzOiBmYVNxdWFyZVBsdXMyLAogICAgICBmYVBsdXNTcXVhcmU6IGZhUGx1c1NxdWFyZTIsCiAgICAgIGZhQXJyb3dzTGVmdFJpZ2h0LAogICAgICBmYUFycm93c0gsCiAgICAgIGZhRmFuLAogICAgICBmYUNyb3csCiAgICAgIGZhRmlsZUNpcmNsZUNoZWNrLAogICAgICBmYUxpbmtTbGFzaCwKICAgICAgZmFDaGFpbkJyb2tlbiwKICAgICAgZmFDaGFpblNsYXNoLAogICAgICBmYVVubGluaywKICAgICAgZmFBcnJvd1JvdGF0ZVJpZ2h0LAogICAgICBmYUFycm93UmlnaHRSb3RhdGUsCiAgICAgIGZhQXJyb3dSb3RhdGVGb3J3YXJkLAogICAgICBmYVJlZG8sCiAgICAgIGZhUGVuQ2xpcCwKICAgICAgZmFQZW5BbHQsCiAgICAgIGZhRG9vckNsb3NlZCwKICAgICAgZmFBcnJvd0Rvd25XaWRlU2hvcnQsCiAgICAgIGZhU29ydEFtb3VudEFzYywKICAgICAgZmFTb3J0QW1vdW50RG93biwKICAgICAgZmFDYXJldERvd24sCiAgICAgIGZhSywKICAgICAgZmFDaGVja1RvU2xvdCwKICAgICAgZmFWb3RlWWVhLAogICAgICBmYUZpc2hGaW5zLAogICAgICBmYUNvbXByZXNzLAogICAgICBmYUFycm93VXBBWiwKICAgICAgZmFTb3J0QWxwaGFVcCwKICAgICAgZmFVc2VyR3JhZHVhdGUsCiAgICAgIGZhRmlsZUNvZGU6IGZhRmlsZUNvZGUyLAogICAgICBmYVNvYXAsCiAgICAgIGZhUmVjeWNsZSwKICAgICAgZmFGYWNlR3Jpbldpbms6IGZhRmFjZUdyaW5XaW5rMiwKICAgICAgZmFHcmluV2luazogZmFHcmluV2luazIsCiAgICAgIGZhV2F0ZXJMYWRkZXIsCiAgICAgIGZhTGFkZGVyV2F0ZXIsCiAgICAgIGZhU3dpbW1pbmdQb29sLAogICAgICBmYVRvd2VyQ2VsbCwKICAgICAgZmFDb2xvblNpZ24sCiAgICAgIGZhTGFwdG9wRmlsZSwKICAgICAgZmFCYWhhaSwKICAgICAgZmFIYXlrYWwsCiAgICAgIGZhTW9uZXlCaWxsMTogZmFNb25leUJpbGwxMiwKICAgICAgZmFNb25leUJpbGxBbHQ6IGZhTW9uZXlCaWxsQWx0MiwKICAgICAgZmFDbG91ZEJvbHQsCiAgICAgIGZhVGh1bmRlcnN0b3JtLAogICAgICBmYUV0aGVybmV0LAogICAgICBmYUhyeXZuaWFTaWduLAogICAgICBmYUhyeXZuaWEsCiAgICAgIGZhRXllU2xhc2g6IGZhRXllU2xhc2gyLAogICAgICBmYUNhcnRGbGF0YmVkU3VpdGNhc2UsCiAgICAgIGZhTHVnZ2FnZUNhcnQsCiAgICAgIGZhUmFkaWF0aW9uLAogICAgICBmYUZpbGVXb3JkOiBmYUZpbGVXb3JkMiwKICAgICAgZmFCZWRQdWxzZSwKICAgICAgZmFQcm9jZWR1cmVzLAogICAgICBmYVRlbnRzLAogICAgICBmYU11Z0hvdCwKICAgICAgZmFCb2x0LAogICAgICBmYVphcCwKICAgICAgZmFKYXIsCiAgICAgIGZhVHJ1Y2tQbGFuZSwKICAgICAgZmFIYW5kSG9sZGluZ0hlYXJ0LAogICAgICBmYUFycm93Um90YXRlTGVmdCwKICAgICAgZmFBcnJvd0xlZnRSb3RhdGUsCiAgICAgIGZhQXJyb3dSb3RhdGVCYWNrLAogICAgICBmYUFycm93Um90YXRlQmFja3dhcmQsCiAgICAgIGZhVW5kbywKICAgICAgZmFGYWNlQW5ncnk6IGZhRmFjZUFuZ3J5MiwKICAgICAgZmFBbmdyeTogZmFBbmdyeTIsCiAgICAgIGZhQnVyc3QsCiAgICAgIGZhWiwKICAgICAgZmFCYW5kYWdlLAogICAgICBmYUJhbmRBaWQsCiAgICAgIGZhUGxhbmVDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFCdXNTaWRlLAogICAgICBmYUJ1Z3MsCiAgICAgIGZhQmVlck11Z0VtcHR5LAogICAgICBmYUJlZXIsCiAgICAgIGZhUGVyc29uQ2lyY2xlQ2hlY2ssCiAgICAgIGZhU3RhcGxlciwKICAgICAgZmFIb3VzZU1lZGljYWxDaXJjbGVDaGVjaywKICAgICAgZmFOYWlyYVNpZ24sCiAgICAgIGZhV2lmaSwKICAgICAgZmFXaWZpMywKICAgICAgZmFXaWZpU3Ryb25nLAogICAgICBmYU1vbmV5Q2hlY2tEb2xsYXIsCiAgICAgIGZhTW9uZXlDaGVja0FsdCwKICAgICAgZmFFeWVMb3dWaXNpb24sCiAgICAgIGZhTG93VmlzaW9uLAogICAgICBmYUNpcmNsZUFycm93VXAsCiAgICAgIGZhQXJyb3dDaXJjbGVVcCwKICAgICAgZmFDYW1lcmFSZXRybywKICAgICAgZmFDYXBzdWxlcywKICAgICAgZmFQb28sCiAgICAgIGZhRWxldmF0b3IsCiAgICAgIGZhVGFnLAogICAgICBmYUZpbGVDaXJjbGVNaW51cywKICAgICAgZmFEb3duTG9uZywKICAgICAgZmFMb25nQXJyb3dBbHREb3duLAogICAgICBmYUNvbXBhY3REaXNjLAogICAgICBmYVN1aXRjYXNlUm9sbGluZywKICAgICAgZmFCb29rUXVyYW4sCiAgICAgIGZhUXVyYW4sCiAgICAgIGZhUGhvbmVTbGFzaCwKICAgICAgZmFSb2FkQ2lyY2xlQ2hlY2ssCiAgICAgIGZhU2hvcExvY2ssCiAgICAgIGZhSW1hZ2VQb3J0cmFpdCwKICAgICAgZmFQb3J0cmFpdCwKICAgICAgZmFCcmlkZ2VMb2NrLAogICAgICBmYUhhbW1lciwKICAgICAgZmFBcnJvd1VwMTksCiAgICAgIGZhU29ydE51bWVyaWNVcCwKICAgICAgZmFDaGVzc0tuaWdodDogZmFDaGVzc0tuaWdodDIsCiAgICAgIGZhSG91c2VGbG9vZFdhdGVyQ2lyY2xlQXJyb3dSaWdodCwKICAgICAgZmFBcnJvd1VwUmlnaHRGcm9tU3F1YXJlLAogICAgICBmYUV4dGVybmFsTGluaywKICAgICAgZmFBcnJvd0Rvd25VcEFjcm9zc0xpbmUsCiAgICAgIGZhRmFjZUdyaW5CZWFtOiBmYUZhY2VHcmluQmVhbTIsCiAgICAgIGZhR3JpbkJlYW06IGZhR3JpbkJlYW0yLAogICAgICBmYVJlY3RhbmdsZUFkLAogICAgICBmYUFkLAogICAgICBmYUJvb2tUYW5ha2gsCiAgICAgIGZhVGFuYWtoLAogICAgICBmYUhvdFR1YlBlcnNvbiwKICAgICAgZmFIb3RUdWIsCiAgICAgIGZhRmlsZUhhbGZEYXNoZWQsCiAgICAgIGZhT3V0ZGVudCwKICAgICAgZmFEZWRlbnQsCiAgICAgIGZhSGFuZFBlYWNlOiBmYUhhbmRQZWFjZTIsCiAgICAgIGZhSGVhZFNpZGVWaXJ1cywKICAgICAgZmFDb21wYXNzOiBmYUNvbXBhc3MyLAogICAgICBmYVBlbk5pYiwKICAgICAgZmFUZW50QXJyb3dzRG93biwKICAgICAgZmFGb3J3YXJkRmFzdCwKICAgICAgZmFGYXN0Rm9yd2FyZCwKICAgICAgZmFDcm9wLAogICAgICBmYVdoaXNrZXlHbGFzcywKICAgICAgZmFHbGFzc1doaXNrZXksCiAgICAgIGZhU3F1YXJlOiBmYVNxdWFyZTIsCiAgICAgIGZhRmFjZUdyaW46IGZhRmFjZUdyaW4yLAogICAgICBmYUdyaW46IGZhR3JpbjIsCiAgICAgIGZhRmlsZUNvbnRyYWN0LAogICAgICBmYUFuZ2xlVXAsCiAgICAgIGZhRmFjZVNtaWxlOiBmYUZhY2VTbWlsZTIsCiAgICAgIGZhU21pbGU6IGZhU21pbGUyLAogICAgICBmYVBlcnNvbkRyZXNzQnVyc3QsCiAgICAgIGZhRGl2aWRlLAogICAgICBmYUNvZGVGb3JrLAogICAgICBmYUhvdXNlRmxhZywKICAgICAgZmFCdWlsZGluZ0NvbHVtbnMsCiAgICAgIGZhQmFuaywKICAgICAgZmFJbnN0aXR1dGlvbiwKICAgICAgZmFNdXNldW0sCiAgICAgIGZhVW5pdmVyc2l0eSwKICAgICAgZmFSdWcsCiAgICAgIGZhQ29kZU1lcmdlLAogICAgICBmYUhvdXNlVHN1bmFtaSwKICAgICAgZmFNYWduaWZ5aW5nR2xhc3NDaGFydCwKICAgICAgZmFVbWJyZWxsYSwKICAgICAgZmFIaWxsUm9ja3NsaWRlLAogICAgICBmYVVzZXJTZWNyZXQsCiAgICAgIGZhUGFnZXIsCiAgICAgIGZhQnJpZWZjYXNlLAogICAgICBmYVRyb3dlbEJyaWNrcywKICAgICAgZmFTb2NrcywKICAgICAgZmFULAogICAgICBmYU1pY3JvY2hpcCwKICAgICAgZmFUcnVja01lZGljYWwsCiAgICAgIGZhQW1idWxhbmNlLAogICAgICBmYU9tLAogICAgICBmYU1vc3F1aXRvTmV0LAogICAgICBmYVByZXNjcmlwdGlvbkJvdHRsZSwKICAgICAgZmFVc2Vyc0dlYXIsCiAgICAgIGZhVXNlcnNDb2csCiAgICAgIGZhUm9hZENpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYVBhdXNlLAogICAgICBmYVN0YWZmU25ha2UsCiAgICAgIGZhUm9kQXNjbGVwaXVzLAogICAgICBmYVJvZFNuYWtlLAogICAgICBmYVN0YWZmQWVzY3VsYXBpdXMsCiAgICAgIGZhUGlnZ3lCYW5rLAogICAgICBmYU1vbnVtZW50LAogICAgICBmYUFuZ2xlc1JpZ2h0LAogICAgICBmYUFuZ2xlRG91YmxlUmlnaHQsCiAgICAgIGZhRGVza3RvcCwKICAgICAgZmFEZXNrdG9wQWx0LAogICAgICBmYVBsYW5lQ2lyY2xlWG1hcmssCiAgICAgIGZhUmV0d2VldCwKICAgICAgZmFVc2VyR2VhciwKICAgICAgZmFVc2VyQ29nLAogICAgICBmYUJvcmRlckFsbCwKICAgICAgZmFDb2lucywKICAgICAgZmFNYXJzU3Ryb2tlLAogICAgICBmYUhhbmRzaGFrZUFuZ2xlLAogICAgICBmYUhhbmRzSGVscGluZywKICAgICAgZmFBcnJvd0Rvd24sCiAgICAgIGZhTG9jYXRpb25Eb3QsCiAgICAgIGZhTWFwTWFya2VyQWx0LAogICAgICBmYVBsdWdDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFDb29raWVCaXRlLAogICAgICBmYVNjcmV3ZHJpdmVyV3JlbmNoLAogICAgICBmYVRvb2xzLAogICAgICBmYUluZGVudCwKICAgICAgZmFCYXJzLAogICAgICBmYU5hdmljb24sCiAgICAgIGZhSGFuZHNQcmF5aW5nLAogICAgICBmYVByYXlpbmdIYW5kcywKICAgICAgZmFWaXJ1c2VzLAogICAgICBmYVNjaG9vbEZsYWcsCiAgICAgIGZhVHJhZGVtYXJrLAogICAgICBmYUZpcmVCdXJuZXIsCiAgICAgIGZhRmFjZVNtaWxlQmVhbTogZmFGYWNlU21pbGVCZWFtMiwKICAgICAgZmFTbWlsZUJlYW06IGZhU21pbGVCZWFtMiwKICAgICAgZmFUZW50QXJyb3dMZWZ0UmlnaHQsCiAgICAgIGZhUm91dGUsCiAgICAgIGZhQW5nbGVzVXAsCiAgICAgIGZhQW5nbGVEb3VibGVVcCwKICAgICAgZmFCdWNrZXQsCiAgICAgIGZhTGVzc1RoYW5FcXVhbCwKICAgICAgZmFGb2xkZXJDbG9zZWQ6IGZhRm9sZGVyQ2xvc2VkMiwKICAgICAgZmFQZXJzb25UaHJvdWdoV2luZG93LAogICAgICBmYVNjaG9vbExvY2ssCiAgICAgIGZhUGVyc29uQnVyc3QsCiAgICAgIGZhTGVmdExvbmcsCiAgICAgIGZhTG9uZ0Fycm93QWx0TGVmdCwKICAgICAgZmFMb2NhdGlvbkNyb3NzaGFpcnMsCiAgICAgIGZhTG9jYXRpb24sCiAgICAgIGZhUGVyc29uRG90c0Zyb21MaW5lLAogICAgICBmYURpYWdub3NlcywKICAgICAgZmFHYXVnZVNpbXBsZUhpZ2gsCiAgICAgIGZhVGFjaG9tZXRlciwKICAgICAgZmFUYWNob21ldGVyRmFzdCwKICAgICAgZmFBbmdsZXNMZWZ0LAogICAgICBmYUFuZ2xlRG91YmxlTGVmdCwKICAgICAgZmFVcERvd24sCiAgICAgIGZhQXJyb3dzQWx0ViwKICAgICAgZmFCYXR0ZXJ5RW1wdHksCiAgICAgIGZhQmF0dGVyeTAsCiAgICAgIGZhS2V5Ym9hcmQ6IGZhS2V5Ym9hcmQyLAogICAgICBmYUNvb2tpZSwKICAgICAgZmFTdG9wd2F0Y2gsCiAgICAgIGZhRWplY3QsCiAgICAgIGZhU2F0ZWxsaXRlRGlzaCwKICAgICAgZmFGYWNlUm9sbGluZ0V5ZXM6IGZhRmFjZVJvbGxpbmdFeWVzMiwKICAgICAgZmFNZWhSb2xsaW5nRXllczogZmFNZWhSb2xsaW5nRXllczIsCiAgICAgIGZhTGlzdENoZWNrLAogICAgICBmYVRhc2tzLAogICAgICBmYVNhY2tYbWFyaywKICAgICAgZmFIYXNodGFnLAogICAgICBmYVRyYWluLAogICAgICBmYUdhbWVwYWQsCiAgICAgIGZhRmlsZUV4cG9ydCwKICAgICAgZmFBcnJvd1JpZ2h0RnJvbUZpbGUsCiAgICAgIGZhRmFjZUdyaW1hY2U6IGZhRmFjZUdyaW1hY2UyLAogICAgICBmYUdyaW1hY2U6IGZhR3JpbWFjZTIsCiAgICAgIGZhVHJhaW5TdWJ3YXksCiAgICAgIGZhU3Vid2F5LAogICAgICBmYUNpcmNsZURvdDogZmFDaXJjbGVEb3QyLAogICAgICBmYURvdENpcmNsZTogZmFEb3RDaXJjbGUyLAogICAgICBmYU9iamVjdEdyb3VwOiBmYU9iamVjdEdyb3VwMiwKICAgICAgZmFTaGlwLAogICAgICBmYUMsCiAgICAgIGZhU3F1YXJlUGhvbmUsCiAgICAgIGZhUGhvbmVTcXVhcmUsCiAgICAgIGZhUnVsZXJDb21iaW5lZCwKICAgICAgZmFBcnJvd3NSb3RhdGUsCiAgICAgIGZhUmVmcmVzaCwKICAgICAgZmFTeW5jLAogICAgICBmYVBlcnNvbkRyZXNzLAogICAgICBmYUZlbWFsZSwKICAgICAgZmFCb29rT3BlbiwKICAgICAgZmFGb2xkZXJUcmVlLAogICAgICBmYUJveEFyY2hpdmUsCiAgICAgIGZhQXJjaGl2ZSwKICAgICAgZmFUZW50QXJyb3dEb3duVG9MaW5lLAogICAgICBmYVFyY29kZSwKICAgICAgZmFEcmFnb24sCiAgICAgIGZhSG91cmdsYXNzRW5kLAogICAgICBmYUhvdXJnbGFzczM6IGZhSG91cmdsYXNzMzIsCiAgICAgIGZhR3JpcCwKICAgICAgZmFHcmlkSG9yaXpvbnRhbCwKICAgICAgZmFHcmlwSG9yaXpvbnRhbCwKICAgICAgZmFCb3JkZXJUb3BMZWZ0LAogICAgICBmYUJvcmRlclN0eWxlLAogICAgICBmYUxpc3RVbCwKICAgICAgZmFMaXN0RG90cywKICAgICAgZmFQZW9wbGVSb2JiZXJ5LAogICAgICBmYU1vYmlsZUJ1dHRvbiwKICAgICAgZmFBcnJvd0Rvd25BWiwKICAgICAgZmFTb3J0QWxwaGFBc2MsCiAgICAgIGZhU29ydEFscGhhRG93biwKICAgICAgZmFNb25leUJpbGwsCiAgICAgIGZhQ2lyY2xlTWludXMsCiAgICAgIGZhTWludXNDaXJjbGUsCiAgICAgIGZhQXJyb3dQb2ludGVyLAogICAgICBmYU1vdXNlUG9pbnRlciwKICAgICAgZmFTcXVhcmVTaGFyZU5vZGVzLAogICAgICBmYVNoYXJlQWx0U3F1YXJlLAogICAgICBmYVRhYmxlQ2VsbHNMYXJnZSwKICAgICAgZmFUaExhcmdlLAogICAgICBmYUNhdCwKICAgICAgZmFDYWxlbmRhcldlZWssCiAgICAgIGZhQ29kZUNvbXBhcmUsCiAgICAgIGZhUm9hZENpcmNsZVhtYXJrLAogICAgICBmYVBhbGxldCwKICAgICAgZmFDYWtlQ2FuZGxlcywKICAgICAgZmFCaXJ0aGRheUNha2UsCiAgICAgIGZhQ2FrZSwKICAgICAgZmFCdWdTbGFzaCwKICAgICAgZmFUYXJwLAogICAgICBmYURpYWdyYW1QcmVkZWNlc3NvciwKICAgICAgZmFGYWNlRmx1c2hlZDogZmFGYWNlRmx1c2hlZDIsCiAgICAgIGZhRmx1c2hlZDogZmFGbHVzaGVkMiwKICAgICAgZmFEaWFncmFtTmV4dCwKICAgICAgZmFBbmNob3JDaXJjbGVYbWFyaywKICAgICAgZmFQZXJzb25DaXJjbGVYbWFyaywKICAgICAgZmFTcGEsCiAgICAgIGZhQmFyc1Byb2dyZXNzLAogICAgICBmYVRhc2tzQWx0LAogICAgICBmYUhlYXJ0Q2lyY2xlQ2hlY2ssCiAgICAgIGZhTWFyc1N0cm9rZVJpZ2h0LAogICAgICBmYU1hcnNTdHJva2VILAogICAgICBmYVRvd2VyT2JzZXJ2YXRpb24sCiAgICAgIGZhU3RlcmxpbmdTaWduLAogICAgICBmYUdicCwKICAgICAgZmFQb3VuZFNpZ24sCiAgICAgIGZhRmF1Y2V0RHJpcCwKICAgICAgZmFDaXJjbGVJbmZvLAogICAgICBmYUluZm9DaXJjbGUsCiAgICAgIGZhRmVhdGhlciwKICAgICAgZmFCb3dsUmljZSwKICAgICAgZmFTdGFySGFsZlN0cm9rZTogZmFTdGFySGFsZlN0cm9rZTIsCiAgICAgIGZhU3RhckhhbGZBbHQ6IGZhU3RhckhhbGZBbHQyLAogICAgICBmYVRlbXBlcmF0dXJlQXJyb3dEb3duLAogICAgICBmYVRlbXBlcmF0dXJlRG93biwKICAgICAgZmFNYXNrVmVudGlsYXRvciwKICAgICAgZmFGaWxlVmlkZW86IGZhRmlsZVZpZGVvMiwKICAgICAgZmFBcnJvd1RyZW5kRG93biwKICAgICAgZmFPaWxDYW4sCiAgICAgIGZhUGVvcGxlQ2FycnlCb3gsCiAgICAgIGZhUGVvcGxlQ2FycnksCiAgICAgIGZhQ2hhaXIsCiAgICAgIGZhV2luZCwKICAgICAgZmFMYXllckdyb3VwLAogICAgICBmYUhlYWRTaWRlTWFzaywKICAgICAgZmFIYW5kcywKICAgICAgZmFTaWduTGFuZ3VhZ2UsCiAgICAgIGZhU2lnbmluZywKICAgICAgZmFUYWJsZXRzLAogICAgICBmYVdlaWdodEhhbmdpbmcsCiAgICAgIGZhRGljZSwKICAgICAgZmFTaG9wU2xhc2gsCiAgICAgIGZhU3RvcmVBbHRTbGFzaCwKICAgICAgZmFTb3J0RG93biwKICAgICAgZmFTb3J0RGVzYywKICAgICAgZmFQZXNldGFTaWduLAogICAgICBmYVRhYmxldFNjcmVlbkJ1dHRvbiwKICAgICAgZmFUYWJsZXRBbHQsCiAgICAgIGZhSGFuZEhvbGRpbmdEb2xsYXIsCiAgICAgIGZhSGFuZEhvbGRpbmdVc2QsCiAgICAgIGZhU2hpZWxkLAogICAgICBmYVNoaWVsZEJsYW5rLAogICAgICBmYUZhY2VMYXVnaDogZmFGYWNlTGF1Z2gyLAogICAgICBmYUxhdWdoOiBmYUxhdWdoMiwKICAgICAgZmFIYW5kc0hvbGRpbmcsCiAgICAgIGZhQ2FydFNob3BwaW5nLAogICAgICBmYVNob3BwaW5nQ2FydCwKICAgICAgZmFPY3RhZ29uLAogICAgICBmYUhhbmRQb2ludGVyOiBmYUhhbmRQb2ludGVyMiwKICAgICAgZmFSZWdpc3RlcmVkOiBmYVJlZ2lzdGVyZWQyLAogICAgICBmYUhvdXNlU2lnbmFsLAogICAgICBmYUJhbmdsYWRlc2hpVGFrYVNpZ24KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjMuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvY2pzL2x1Y2lkZS5qcwp2YXIgcmVxdWlyZV9sdWNpZGUgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2My4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9janMvbHVjaWRlLmpzIihleHBvcnRzKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgZGVmYXVsdEF0dHJpYnV0ZXMgPSB7CiAgICAgIHhtbG5zOiAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLAogICAgICB3aWR0aDogMjQsCiAgICAgIGhlaWdodDogMjQsCiAgICAgIHZpZXdCb3g6ICIwIDAgMjQgMjQiLAogICAgICBmaWxsOiAibm9uZSIsCiAgICAgIHN0cm9rZTogImN1cnJlbnRDb2xvciIsCiAgICAgICJzdHJva2Utd2lkdGgiOiAyLAogICAgICAic3Ryb2tlLWxpbmVjYXAiOiAicm91bmQiLAogICAgICAic3Ryb2tlLWxpbmVqb2luIjogInJvdW5kIgogICAgfTsKICAgIHZhciBjcmVhdGVTVkdFbGVtZW50ID0gKFt0YWcsIGF0dHJzLCBjaGlsZHJlbjJdKSA9PiB7CiAgICAgIGNvbnN0IGVsZW1lbnQ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsIHRhZyk7CiAgICAgIE9iamVjdC5rZXlzKGF0dHJzKS5mb3JFYWNoKChuYW1lKSA9PiB7CiAgICAgICAgZWxlbWVudDQuc2V0QXR0cmlidXRlKG5hbWUsIFN0cmluZyhhdHRyc1tuYW1lXSkpOwogICAgICB9KTsKICAgICAgaWYgKGNoaWxkcmVuMj8ubGVuZ3RoKSB7CiAgICAgICAgY2hpbGRyZW4yLmZvckVhY2goKGNoaWxkKSA9PiB7CiAgICAgICAgICBjb25zdCBjaGlsZEVsZW1lbnQgPSBjcmVhdGVTVkdFbGVtZW50KGNoaWxkKTsKICAgICAgICAgIGVsZW1lbnQ0LmFwcGVuZENoaWxkKGNoaWxkRWxlbWVudCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgfTsKICAgIHZhciBjcmVhdGVFbGVtZW50MyA9IChpY29uTm9kZSwgY3VzdG9tQXR0cnMgPSB7fSkgPT4gewogICAgICBjb25zdCB0YWcgPSAic3ZnIjsKICAgICAgY29uc3QgYXR0cnMgPSB7CiAgICAgICAgLi4uZGVmYXVsdEF0dHJpYnV0ZXMsCiAgICAgICAgLi4uY3VzdG9tQXR0cnMKICAgICAgfTsKICAgICAgcmV0dXJuIGNyZWF0ZVNWR0VsZW1lbnQoW3RhZywgYXR0cnMsIGljb25Ob2RlXSk7CiAgICB9OwogICAgdmFyIGhhc0ExMXlQcm9wID0gKHByb3BzKSA9PiB7CiAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBwcm9wcykgewogICAgICAgIGlmIChwcm9wLnN0YXJ0c1dpdGgoImFyaWEtIikgfHwgcHJvcCA9PT0gInJvbGUiIHx8IHByb3AgPT09ICJ0aXRsZSIpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdmFyIG1lcmdlQ2xhc3NlcyA9ICguLi5jbGFzc2VzKSA9PiBjbGFzc2VzLmZpbHRlcigoY2xhc3NOYW1lLCBpbmRleDIsIGFycmF5KSA9PiB7CiAgICAgIHJldHVybiBCb29sZWFuKGNsYXNzTmFtZSkgJiYgY2xhc3NOYW1lLnRyaW0oKSAhPT0gIiIgJiYgYXJyYXkuaW5kZXhPZihjbGFzc05hbWUpID09PSBpbmRleDI7CiAgICB9KS5qb2luKCIgIikudHJpbSgpOwogICAgdmFyIHRvQ2FtZWxDYXNlID0gKHN0cmluZzMpID0+IHN0cmluZzMucmVwbGFjZSgKICAgICAgL14oW0EtWl0pfFtccy1fXSsoXHcpL2csCiAgICAgIChtYXRjaDIsIHAxLCBwMjIpID0+IHAyMiA/IHAyMi50b1VwcGVyQ2FzZSgpIDogcDEudG9Mb3dlckNhc2UoKQogICAgKTsKICAgIHZhciB0b1Bhc2NhbENhc2UgPSAoc3RyaW5nMykgPT4gewogICAgICBjb25zdCBjYW1lbENhc2UgPSB0b0NhbWVsQ2FzZShzdHJpbmczKTsKICAgICAgcmV0dXJuIGNhbWVsQ2FzZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGNhbWVsQ2FzZS5zbGljZSgxKTsKICAgIH07CiAgICB2YXIgZ2V0QXR0cnMgPSAoZWxlbWVudDQpID0+IEFycmF5LmZyb20oZWxlbWVudDQuYXR0cmlidXRlcykucmVkdWNlKChhdHRycywgYXR0cikgPT4gewogICAgICBhdHRyc1thdHRyLm5hbWVdID0gYXR0ci52YWx1ZTsKICAgICAgcmV0dXJuIGF0dHJzOwogICAgfSwge30pOwogICAgdmFyIGdldENsYXNzTmFtZXMgPSAoYXR0cnMpID0+IHsKICAgICAgaWYgKHR5cGVvZiBhdHRycyA9PT0gInN0cmluZyIpIHJldHVybiBhdHRyczsKICAgICAgaWYgKCFhdHRycyB8fCAhYXR0cnMuY2xhc3MpIHJldHVybiAiIjsKICAgICAgaWYgKGF0dHJzLmNsYXNzICYmIHR5cGVvZiBhdHRycy5jbGFzcyA9PT0gInN0cmluZyIpIHsKICAgICAgICByZXR1cm4gYXR0cnMuY2xhc3Muc3BsaXQoIiAiKTsKICAgICAgfQogICAgICBpZiAoYXR0cnMuY2xhc3MgJiYgQXJyYXkuaXNBcnJheShhdHRycy5jbGFzcykpIHsKICAgICAgICByZXR1cm4gYXR0cnMuY2xhc3M7CiAgICAgIH0KICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHZhciByZXBsYWNlRWxlbWVudCA9IChlbGVtZW50NCwgeyBuYW1lQXR0ciwgaWNvbnM6IGljb25zNiwgYXR0cnMgfSkgPT4gewogICAgICBjb25zdCBpY29uTmFtZSA9IGVsZW1lbnQ0LmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgIGlmIChpY29uTmFtZSA9PSBudWxsKSByZXR1cm47CiAgICAgIGNvbnN0IENvbXBvbmVudE5hbWUgPSB0b1Bhc2NhbENhc2UoaWNvbk5hbWUpOwogICAgICBjb25zdCBpY29uTm9kZSA9IGljb25zNltDb21wb25lbnROYW1lXTsKICAgICAgaWYgKCFpY29uTm9kZSkgewogICAgICAgIHJldHVybiBjb25zb2xlLndhcm4oCiAgICAgICAgICBgJHtlbGVtZW50NC5vdXRlckhUTUx9IGljb24gbmFtZSB3YXMgbm90IGZvdW5kIGluIHRoZSBwcm92aWRlZCBpY29ucyBvYmplY3QuYAogICAgICAgICk7CiAgICAgIH0KICAgICAgY29uc3QgZWxlbWVudEF0dHJzID0gZ2V0QXR0cnMoZWxlbWVudDQpOwogICAgICBjb25zdCBhcmlhUHJvcHMgPSBoYXNBMTF5UHJvcChlbGVtZW50QXR0cnMpID8ge30gOiB7ICJhcmlhLWhpZGRlbiI6ICJ0cnVlIiB9OwogICAgICBjb25zdCBpY29uQXR0cnMgPSB7CiAgICAgICAgLi4uZGVmYXVsdEF0dHJpYnV0ZXMsCiAgICAgICAgImRhdGEtbHVjaWRlIjogaWNvbk5hbWUsCiAgICAgICAgLi4uYXJpYVByb3BzLAogICAgICAgIC4uLmF0dHJzLAogICAgICAgIC4uLmVsZW1lbnRBdHRycwogICAgICB9OwogICAgICBjb25zdCBlbGVtZW50Q2xhc3NOYW1lcyA9IGdldENsYXNzTmFtZXMoZWxlbWVudEF0dHJzKTsKICAgICAgY29uc3QgY2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lcyhhdHRycyk7CiAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBtZXJnZUNsYXNzZXMoCiAgICAgICAgImx1Y2lkZSIsCiAgICAgICAgYGx1Y2lkZS0ke2ljb25OYW1lfWAsCiAgICAgICAgLi4uZWxlbWVudENsYXNzTmFtZXMsCiAgICAgICAgLi4uY2xhc3NOYW1lCiAgICAgICk7CiAgICAgIGlmIChjbGFzc05hbWVzKSB7CiAgICAgICAgT2JqZWN0LmFzc2lnbihpY29uQXR0cnMsIHsKICAgICAgICAgIGNsYXNzOiBjbGFzc05hbWVzCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgY29uc3Qgc3ZnRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQzKGljb25Ob2RlLCBpY29uQXR0cnMpOwogICAgICByZXR1cm4gZWxlbWVudDQucGFyZW50Tm9kZT8ucmVwbGFjZUNoaWxkKHN2Z0VsZW1lbnQsIGVsZW1lbnQ0KTsKICAgIH07CiAgICB2YXIgQUFycm93RG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEyIDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTZWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE2IDQuMDM5LTkuNjlhLjUuNSAwIDAgMSAuOTIzIDBMMTEgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zMDQgMTNoNi4zOTIiIH1dCiAgICBdOwogICAgdmFyIEFBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTEgNC00IDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNlY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMTYgNC4wMzktOS42OWEuNS41IDAgMCAxIC45MjMgMEwxMSAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjMwNCAxM2g2LjM5MiIgfV0KICAgIF07CiAgICB2YXIgQUxhcmdlU21hbGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxNiAyLjUzNi03LjMyOGExLjAyIDEuMDIgMSAwIDEgMS45MjggMEwyMiAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS42OTcgMTRoNS42MDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAxNiA0LjAzOS05LjY5YS41LjUgMCAwIDEgLjkyMyAwTDExIDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuMzA0IDEzaDYuMzkyIiB9XQogICAgXTsKICAgIHZhciBBY3Rpdml0eSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDEyaC0yLjQ4YTIgMiAwIDAgMC0xLjkzIDEuNDZsLTIuMzUgOC4zNmEuMjUuMjUgMCAwIDEtLjQ4IDBMOS4yNCAyLjE4YS4yNS4yNSAwIDAgMC0uNDggMGwtMi4zNSA4LjM2QTIgMiAwIDAgMSA0LjQ5IDEySDIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEFjY2Vzc2liaWxpdHkgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICI0IiwgcjogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggMTkgMS03LTYgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDggMy0zIDUuNSAzLTIuMzYgMy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuMjQgMTQuNWE1IDUgMCAwIDAgNi44OCA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjc2IDE3LjVhNSA1IDAgMCAwLTYuODgtNiIgfV0KICAgIF07CiAgICB2YXIgQWlyVmVudCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE3LjVhMi41IDIuNSAwIDEgMS00IDIuMDNWMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NWEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjYgMTUuNTcyQTIgMiAwIDEgMCAxMCAxN3YtNSIgfV0KICAgIF07CiAgICB2YXIgQWxhcm1DbG9ja0NoZWNrID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDMgMiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDYtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzggMTguNyA0IDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjY0IDE4LjY3IDIwIDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTMgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgQWlycGxheSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTdINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJoLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTUgNSA2SDdaIiB9XQogICAgXTsKICAgIHZhciBBbGFybUNsb2NrTWludXMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMyIsIHI6ICI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMyAyIDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNi0zLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zOCAxOC43IDQgMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNjQgMTguNjcgMjAgMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM2g2IiB9XQogICAgXTsKICAgIHZhciBBbGFybUNsb2NrT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNi44NyA2Ljg3YTggOCAwIDEgMCAxMS4yNiAxMS4yNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS45IDE0LjI1YTggOCAwIDAgMC05LjE1LTkuMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNi0zLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4yNiAxOC42NyA0IDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDQgMiA2IiB9XQogICAgXTsKICAgIHZhciBBbGFybUNsb2NrUGx1cyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEzIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzIDIgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA2LTMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjM4IDE4LjcgNCAyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy42NCAxOC42NyAyMCAyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMHY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTNoNiIgfV0KICAgIF07CiAgICB2YXIgQWxhcm1DbG9jayA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEzIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXY0bDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDMgMiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDYtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzggMTguNyA0IDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjY0IDE4LjY3IDIwIDIxIiB9XQogICAgXTsKICAgIHZhciBBbGFybVNtb2tlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjFjMC0yLjUgMi0yLjUgMi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDIxYzAtMi41IDItMi41IDItNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA4LS44IDNhMS4yNSAxLjI1IDAgMCAxLTEuMiAxSDdhMS4yNSAxLjI1IDAgMCAxLTEuMi0xTDUgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAzYTEgMSAwIDAgMSAxIDF2MmEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY0YTEgMSAwIDAgMSAxLTF6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjFjMC0yLjUgMi0yLjUgMi01IiB9XQogICAgXTsKICAgIHZhciBBbGJ1bSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMTEgMyAxMSAxMSAxNCA4IDE3IDExIDE3IDMiIH1dCiAgICBdOwogICAgdmFyIEFsaWduQ2VudGVySG9yaXpvbnRhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTZ2NGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMnYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA4VjRhMiAyIDAgMCAwLTItMkg2YTIgMiAwIDAgMC0yIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNnYxYTIgMiAwIDAgMS0yIDJoLTJhMiAyIDAgMCAxLTItMnYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA4VjdjMC0xLjEuOS0yIDItMmgyYTIgMiAwIDAgMSAyIDJ2MSIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25FbmRIb3Jpem9udGFsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjE2IiwgeDogIjQiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiOSIsIHg6ICIxNCIsIHk6ICI5Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIySDIiIH1dCiAgICBdOwogICAgdmFyIEFsaWduQ2VudGVyVmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTBINGEyIDIgMCAwIDEtMi0yVjZjMC0xLjEuOS0yIDItMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEwaDRhMiAyIDAgMCAwIDItMlY2YTIgMiAwIDAgMC0yLTJoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMEg3YTIgMiAwIDAgMS0yLTJ2LTJjMC0xLjEuOS0yIDItMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0aDFhMiAyIDAgMCAxIDIgMnYyYTIgMiAwIDAgMS0yIDJoLTEiIH1dCiAgICBdOwogICAgdmFyIEFsaWduRW5kVmVydGljYWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjYiLCB4OiAiMiIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjkiLCBoZWlnaHQ6ICI2IiwgeDogIjkiLCB5OiAiMTQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjJWMiIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZUNlbnRlciA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNCIsIHg6ICI0IiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjE0IiwgeTogIjciLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjJ2LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgN1YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjJ2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA1VjIiIH1dCiAgICBdOwogICAgdmFyIEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVFbmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTQiLCB4OiAiNCIsIHk6ICI1Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMCIsIHg6ICIxNCIsIHk6ICI3Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMnYyMCIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZVN0YXJ0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjE0IiwgeDogIjQiLCB5OiAiNSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTAiLCB4OiAiMTQiLCB5OiAiNyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnYyMCIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUNlbnRlciA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjE2IiwgeTogIjciLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyMCIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUVuZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjEyIiwgeTogIjciLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMnYyMCIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeVN0YXJ0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjE0IiwgeDogIjYiLCB5OiAiNSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTAiLCB4OiAiMTYiLCB5OiAiNyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDJ2MjAiIH1dCiAgICBdOwogICAgdmFyIEFsaWduSG9yaXpvbnRhbFNwYWNlQXJvdW5kID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjkiLCB5OiAiNyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIyVjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjJWMiIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25Ib3Jpem9udGFsU3BhY2VCZXR3ZWVuID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjE0IiwgeDogIjMiLCB5OiAiNSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTAiLCB4OiAiMTUiLCB5OiAiNyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMnYyMCIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25TdGFydEhvcml6b250YWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTYiLCB4OiAiNCIsIHk6ICI2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICI5IiwgeDogIjE0IiwgeTogIjYiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMkgyIiB9XQogICAgXTsKICAgIHZhciBBbGlnblN0YXJ0VmVydGljYWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI5IiwgaGVpZ2h0OiAiNiIsIHg6ICI2IiwgeTogIjE0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiNiIsIHg6ICI2IiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAydjIwIiB9XQogICAgXTsKICAgIHZhciBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUNlbnRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE3aC0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDdoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxN0gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgN0gyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNSIsIHk6ICIxNCIsIHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICI2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICI0Iiwgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIEFsaWduVmVydGljYWxEaXN0cmlidXRlRW5kID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICI2IiwgeDogIjUiLCB5OiAiMTQiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2IiwgeDogIjciLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIwaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoMjAiIH1dCiAgICBdOwogICAgdmFyIEFsaWduVmVydGljYWxEaXN0cmlidXRlU3RhcnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjYiLCB4OiAiNSIsIHk6ICIxNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCB4OiAiNyIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTRoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA0aDIwIiB9XQogICAgXTsKICAgIHZhciBBbGlnblZlcnRpY2FsSnVzdGlmeUNlbnRlciA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiNiIsIHg6ICI1IiwgeTogIjE2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiNiIsIHg6ICI3IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyMCIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25WZXJ0aWNhbEp1c3RpZnlFbmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjYiLCB4OiAiNSIsIHk6ICIxMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCB4OiAiNyIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjJoMjAiIH1dCiAgICBdOwogICAgdmFyIEFsaWduVmVydGljYWxKdXN0aWZ5U3RhcnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjYiLCB4OiAiNSIsIHk6ICIxNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCB4OiAiNyIsIHk6ICI2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMmgyMCIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25WZXJ0aWNhbFNwYWNlQXJvdW5kID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2IiwgeDogIjciLCB5OiAiOSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyMEgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDRIMiIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25WZXJ0aWNhbFNwYWNlQmV0d2VlbiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiNiIsIHg6ICI1IiwgeTogIjE1Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiNiIsIHg6ICI3IiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDNoMjAiIH1dCiAgICBdOwogICAgdmFyIEFtcGVyc2FuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaDMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuNSAxMmE4IDggMCAwIDEtOCA4QTQuNSA0LjUgMCAwIDEgNSAxNS41YzAtNiA4LTQgOC04LjVhMyAzIDAgMSAwLTYgMGMwIDMgMi41IDguNSAxMiAxMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQW1idWxhbmNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTBINiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOFY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjExYTEgMSAwIDAgMCAxIDFoMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOSAxOGgyYTEgMSAwIDAgMCAxLTF2LTMuMjhhMSAxIDAgMCAwLS42ODQtLjk0OGwtMS45MjMtLjY0MWExIDEgMCAwIDEtLjU3OC0uNTAybC0xLjUzOS0zLjA3NkExIDEgMCAwIDAgMTYuMzgyIDhIMTQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOGg2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjE4IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3IiwgY3k6ICIxOCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBBbXBlcnNhbmRzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMCAxN2MtNS0zLTctNy03LTlhMiAyIDAgMCAxIDQgMGMwIDIuNS01IDIuNS01IDYgMCAxLjcgMS4zIDMgMyAzIDIuOCAwIDUtMi4yIDUtNSIgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0yMiAxN2MtNS0zLTctNy03LTlhMiAyIDAgMCAxIDQgMGMwIDIuNS01IDIuNS01IDYgMCAxLjcgMS4zIDMgMyAzIDIuOCAwIDUtMi4yIDUtNSIgfQogICAgICBdCiAgICBdOwogICAgdmFyIEFtcGhvcmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjUuNjMyYzAgLjQyNC0uMjcyLjc5NS0uNjUzLjk4MkE2IDYgMCAwIDAgNiAxNGMuMDA2IDQgMyA3IDUgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA1SDhhMiAyIDAgMCAwIDAgNGguNjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1LjYzMmMwIC40MjQuMjcyLjc5NS42NTIuOTgyQTYgNiAwIDAgMSAxOCAxNGMwIDQtMyA3LTUgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA1aDJhMiAyIDAgMCAxIDAgNGgtLjY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIySDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyaDYiIH1dCiAgICBdOwogICAgdmFyIEFuY2hvciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgMTMgMi0xYTkgOSAwIDAgMS0xOCAwbDIgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDExaDYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBBbmdyeSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2cy0xLjUtMi00LTItNCAyLTQgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjUgOCAxMCA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDkgMi41LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBoLjAxIiB9XQogICAgXTsKICAgIHZhciBBbm5veWVkID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDloMiIgfV0KICAgIF07CiAgICB2YXIgQW50ZW5uYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTIgNyAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTIgNS0xMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxMiA1LTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDEyIDUtMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC41IDdoMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZ2NiIgfV0KICAgIF07CiAgICB2YXIgQW52aWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEwSDZhNCA0IDAgMCAxLTQtNCAxIDEgMCAwIDEgMS0xaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA1YTEgMSAwIDAgMSAxLTFoMTNhMSAxIDAgMCAxIDEgMSA3IDcgMCAwIDEtNyA3SDhhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMnY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEydjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMGEzIDMgMCAwIDEgMy0zaDhhMyAzIDAgMCAxIDMgMyAxIDEgMCAwIDEtMSAxSDZhMSAxIDAgMCAxLTEtMSIgfV0KICAgIF07CiAgICB2YXIgQXBlcnR1cmUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4zMSA4IDUuNzQgOS45NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjY5IDhoMTEuNDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNy4zOCAxMiA1Ljc0LTkuOTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS42OSAxNiAzLjk1IDYuMDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuMzEgMTZIMi44MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi42MiAxMi01Ljc0IDkuOTQiIH1dCiAgICBdOwogICAgdmFyIEFwcFdpbmRvd01hYyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTYiLCB4OiAiMiIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOGguMDEiIH1dCiAgICBdOwogICAgdmFyIEFwcFdpbmRvdyA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI0Iiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDhoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA0djQiIH1dCiAgICBdOwogICAgdmFyIEFwcGxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNi41MjhWM2ExIDEgMCAwIDEgMS0xaDAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguMjM3IDIxQTE1IDE1IDAgMCAwIDIyIDExYTYgNiAwIDAgMC0xMC00LjQ3MkE2IDYgMCAwIDAgMiAxMWExNS4xIDE1LjEgMCAwIDAgMy43NjMgMTAgMyAzIDAgMCAwIDMuNjQ4LjY0OCA1LjUgNS41IDAgMCAxIDUuMTc4IDBBMyAzIDAgMCAwIDE4LjIzNyAyMSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQXJjaGl2ZVJlc3RvcmUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjUiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgOHYxMWEyIDIgMCAwIDAgMiAyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgOHYxMWEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTUgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnY5IiB9XQogICAgXTsKICAgIHZhciBBcmNoaXZlWCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiNSIsIHg6ICIyIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA4djExYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSAxNyA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDEyIDUgNSIgfV0KICAgIF07CiAgICB2YXIgQXJjaGl2ZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiNSIsIHg6ICIyIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA4djExYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEyaDQiIH1dCiAgICBdOwogICAgdmFyIEFybWNoYWlyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgOVY2YTIgMiAwIDAgMC0yLTJIN2EyIDIgMCAwIDAtMiAydjMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxNmEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJ2LTVhMiAyIDAgMCAwLTQgMHYxLjVhLjUuNSAwIDAgMS0uNS41aC05YS41LjUgMCAwIDEtLjUtLjVWMTFhMiAyIDAgMCAwLTQgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE4djIiIH1dCiAgICBdOwogICAgdmFyIEFycm93QmlnRG93bkRhc2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSAxMWExIDEgMCAwIDAgMSAxaDIuOTM5YTEgMSAwIDAgMSAuNzUgMS44MTFsLTYuODM1IDYuODM2YTEuMjA3IDEuMjA3IDAgMCAxLTEuNzA3IDBMNC4zMSAxMy44MWExIDEgMCAwIDEgLjc1LTEuODExSDhhMSAxIDAgMCAwIDEtMVY5YTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDRoNiIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dCaWdEb3duID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMTFhMSAxIDAgMCAwIDEgMWgyLjkzOWExIDEgMCAwIDEgLjc1IDEuODExbC02LjgzNSA2LjgzNmExLjIwNyAxLjIwNyAwIDAgMS0xLjcwNyAwTDQuMzEgMTMuODFhMSAxIDAgMCAxIC43NS0xLjgxMUg4YTEgMSAwIDAgMCAxLTFWNWExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEFycm93QmlnTGVmdERhc2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMyA5YTEgMSAwIDAgMS0xLTFWNS4wNjFhMSAxIDAgMCAwLTEuODExLS43NWwtNi44MzUgNi44MzZhMS4yMDcgMS4yMDcgMCAwIDAgMCAxLjcwN2w2LjgzNSA2LjgzNWExIDEgMCAwIDAgMS44MTEtLjc1VjE2YTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDAgMS0xdi00YTEgMSAwIDAgMC0xLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDl2NiIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dCaWdMZWZ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMgOWExIDEgMCAwIDEtMS0xVjUuMDYxYTEgMSAwIDAgMC0xLjgxMS0uNzVsLTYuODM1IDYuODM2YTEuMjA3IDEuMjA3IDAgMCAwIDAgMS43MDdsNi44MzUgNi44MzVhMSAxIDAgMCAwIDEuODExLS43NVYxNmExIDEgMCAwIDEgMS0xaDZhMSAxIDAgMCAwIDEtMXYtNGExIDEgMCAwIDAtMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQXJyb3dCaWdSaWdodERhc2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSA5YTEgMSAwIDAgMCAxLTFWNS4wNjFhMSAxIDAgMCAxIDEuODExLS43NWw2LjgzNiA2LjgzNmExLjIwNyAxLjIwNyAwIDAgMSAwIDEuNzA3bC02LjgzNiA2LjgzNWExIDEgMCAwIDEtMS44MTEtLjc1VjE2YTEgMSAwIDAgMC0xLTFIOWExIDEgMCAwIDEtMS0xdi00YTEgMSAwIDAgMSAxLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgOXY2IiB9XQogICAgXTsKICAgIHZhciBBcnJvd0JpZ1JpZ2h0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgOWExIDEgMCAwIDAgMS0xVjUuMDYxYTEgMSAwIDAgMSAxLjgxMS0uNzVsNi44MzYgNi44MzZhMS4yMDcgMS4yMDcgMCAwIDEgMCAxLjcwN2wtNi44MzYgNi44MzVhMSAxIDAgMCAxLTEuODExLS43NVYxNmExIDEgMCAwIDAtMS0xSDVhMSAxIDAgMCAxLTEtMXYtNGExIDEgMCAwIDEgMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQXJyb3dCaWdVcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTNhMSAxIDAgMCAwLTEtMUg1LjA2MWExIDEgMCAwIDEtLjc1LTEuODExbDYuODM2LTYuODM1YTEuMjA3IDEuMjA3IDAgMCAxIDEuNzA3IDBsNi44MzUgNi44MzVhMSAxIDAgMCAxLS43NSAxLjgxMUgxNmExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAxLTEgMWgtNGExIDEgMCAwIDEtMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQXJyb3dCaWdVcERhc2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDEzYTEgMSAwIDAgMC0xLTFINS4wNjFhMSAxIDAgMCAxLS43NS0xLjgxMWw2LjgzNi02LjgzNWExLjIwNyAxLjIwNyAwIDAgMSAxLjcwNyAwbDYuODM1IDYuODM1YTEgMSAwIDAgMS0uNzUgMS44MTFIMTZhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMS0xIDFoLTRhMSAxIDAgMCAxLTEtMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMGg2IiB9XQogICAgXTsKICAgIHZhciBBcnJvd0Rvd24wMSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwVjQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxNSIsIHk6ICI0Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiNiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMHYtNmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMGg0IiB9XQogICAgXTsKICAgIHZhciBBcnJvd0Rvd24xMCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTBWNGgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMGg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiMTQiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICI2Iiwgcnk6ICIyIiB9XQogICAgXTsKICAgIHZhciBBcnJvd0Rvd25BWiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgOGgtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMFY2LjVhMi41IDIuNSAwIDAgMSA1IDBWMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTRoNWwtNSA2aDUiIH1dCiAgICBdOwogICAgdmFyIEFycm93RG93bkZyb21MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgM0g1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxVjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxNSA2IDYgNi02IiB9XQogICAgXTsKICAgIHZhciBBcnJvd0Rvd25MZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNyA3IDE3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE3SDdWNyIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dEb3duTmFycm93V2lkZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgNGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDhoNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMmgxMCIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dEb3duUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDcgMTAgMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgN3YxMEg3IiB9XQogICAgXTsKICAgIHZhciBBcnJvd0Rvd25Ub0RvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgOS03IDctNy03IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjIxIiwgcjogIjEiIH1dCiAgICBdOwogICAgdmFyIEFycm93RG93blVwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxNiA0IDQgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjBWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSA4LTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNHYxNiIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dEb3duVG9MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTdWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDExIDYgNiA2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjFINSIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dEb3duV2lkZU5hcnJvdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgNGgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSA4aDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTJoNCIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dEb3duWkEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDE2IDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDRoNWwtNSA2aDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjB2LTMuNWEyLjUgMi41IDAgMCAxIDUgMFYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxOGgtNSIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNXYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAxMi03IDctNy03IiB9XQogICAgXTsKICAgIHZhciBBcnJvd0xlZnRGcm9tTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgNi02IDYgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTlWNSIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dMZWZ0UmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDMgNCA3bDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDdoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMjEgNC00LTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxN0g0IiB9XQogICAgXTsKICAgIHZhciBBcnJvd0xlZnRUb0xpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE5VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgNi02IDYgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoMTQiIH1dCiAgICBdOwogICAgdmFyIEFycm93TGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDE5LTctNyA3LTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTJINSIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dSaWdodEZyb21MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEySDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTggNi02LTYtNiIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dSaWdodExlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAzIDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgN0g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMjEtNC00IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE3aDE2IiB9XQogICAgXTsKICAgIHZhciBBcnJvd1JpZ2h0VG9MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSAxOCA2LTYtNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDV2MTQiIH1dCiAgICBdOwogICAgdmFyIEFycm93UmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEyaDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDUgNyA3LTcgNyIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dVcDAxID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiNCIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjYiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjB2LTZoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjBoNCIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dVcDEwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEwVjRoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBoNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE1IiwgeTogIjE0Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiNiIsIHJ5OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dVcEFaID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDhoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBWNi41YTIuNSAyLjUgMCAwIDEgNSAwVjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE0aDVsLTUgNmg1IiB9XQogICAgXTsKICAgIHZhciBBcnJvd1VwRG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE2LTQgNC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjBWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDggNC00IDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDR2MTYiIH1dCiAgICBdOwogICAgdmFyIEFycm93VXBGcm9tRG90ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNSA5IDctNyA3IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZWMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIyMSIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBBcnJvd1VwRnJvbUxpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCA5LTYtNi02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxaDE0IiB9XQogICAgXTsKICAgIHZhciBBcnJvd1VwTGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTdWN2gxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNyA3IDciIH1dCiAgICBdOwogICAgdmFyIEFycm93VXBOYXJyb3dXaWRlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTZoNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyMGgxMCIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dVcFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA3aDEwdjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTcgMTcgNyIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dVcFRvTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM2gxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxMy02LTYtNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2MTQiIH1dCiAgICBdOwogICAgdmFyIEFycm93VXBXaWRlTmFycm93ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE2aDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjBoNCIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dVcFpBID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDRoNWwtNSA2aDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjB2LTMuNWEyLjUgMi41IDAgMCAxIDUgMFYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxOGgtNSIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTIgNy03IDcgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOVY1IiB9XQogICAgXTsKICAgIHZhciBBcnJvd3NVcEZyb21MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNCA2IDMtMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxN1YzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDYgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxN1YzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMjFoMTYiIH1dCiAgICBdOwogICAgdmFyIEFzdGVyaXNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnYxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy4xOTYgOSA2LjgwNCAxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjgwNCA5IDEwLjM5MiA2IiB9XQogICAgXTsKICAgIHZhciBBdFNpZ24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDh2NWEzIDMgMCAwIDAgNiAwdi0xYTEwIDEwIDAgMSAwLTQgOCIgfV0KICAgIF07CiAgICB2YXIgQXRvbSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAuMiAyMC4yYzIuMDQtMi4wMy4wMi03LjM2LTQuNS0xMS45LTQuNTQtNC41Mi05Ljg3LTYuNTQtMTEuOS00LjUtMi4wNCAyLjAzLS4wMiA3LjM2IDQuNSAxMS45IDQuNTQgNC41MiA5Ljg3IDYuNTQgMTEuOSA0LjVaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjcgMTUuN2M0LjUyLTQuNTQgNi41NC05Ljg3IDQuNS0xMS45LTIuMDMtMi4wNC03LjM2LS4wMi0xMS45IDQuNS00LjUyIDQuNTQtNi41NCA5Ljg3LTQuNSAxMS45IDIuMDMgMi4wNCA3LjM2LjAyIDExLjktNC41WiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQXVkaW9MaW5lcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTB2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDZ2MTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA4djciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNXYxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMHYzIiB9XQogICAgXTsKICAgIHZhciBBd2FyZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE1LjQ3NyAxMi44OSAxLjUxNSA4LjUyNmEuNS41IDAgMCAxLS44MS40N2wtMy41OC0yLjY4N2ExIDEgMCAwIDAtMS4xOTcgMGwtMy41ODYgMi42ODZhLjUuNSAwIDAgMS0uODEtLjQ2OWwxLjUxNC04LjUyNiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI4IiwgcjogIjYiIH1dCiAgICBdOwogICAgdmFyIEF1ZGlvV2F2ZWZvcm0gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDEzYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDEgNCAwdjEzYTIgMiAwIDAgMCA0IDBWNGEyIDIgMCAwIDEgNCAwdjEzYTIgMiAwIDAgMCA0IDB2LTRhMiAyIDAgMCAxIDItMiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQXhlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTItOC4zODEgOC4zOGExIDEgMCAwIDEtMy4wMDEtM0wxMSA5IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1IDE1LjVhLjUuNSAwIDAgMCAuNS41QTYuNSA2LjUgMCAwIDAgMjIgOS41YS41LjUgMCAwIDAtLjUtLjVoLTEuNjcyYTIgMiAwIDAgMS0xLjQxNC0uNTg2bC01LjA2Mi01LjA2MmExLjIwNSAxLjIwNSAwIDAgMC0xLjcwNCAwTDkuMzUyIDUuNjQ4YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRsNS4wNjIgNS4wNjJBMiAyIDAgMCAxIDE1IDEzLjgyOHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEF4aXMzZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjUgMTAuNSAxNSA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHYxNWExIDEgMCAwIDAgMSAxaDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuMjkzIDE5LjcwNyA2IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTUgMS41LTEuNSIgfV0KICAgIF07CiAgICB2YXIgQmFieSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2Yy41LjMgMS4yLjUgMiAuNXMxLjUtLjIgMi0uNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMmguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuMzggNi44MTNBOSA5IDAgMCAxIDIwLjggMTAuMmEyIDIgMCAwIDEgMCAzLjYgOSA5IDAgMCAxLTE3LjYgMCAyIDIgMCAwIDEgMC0zLjZBOSA5IDAgMCAxIDEyIDNjMiAwIDMuNSAxLjEgMy41IDIuNXMtLjkgMi41LTIgMi41Yy0uOCAwLTEuNS0uNC0xLjUtMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEyaC4wMSIgfV0KICAgIF07CiAgICB2YXIgQmFja3BhY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEwYTQgNCAwIDAgMSA0LTRoOGE0IDQgMCAwIDEgNCA0djEwYTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjJ2LTZhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDZWNGEyIDIgMCAwIDEgMi0yaDJhMiAyIDAgMCAxIDIgMnYyIiB9XQogICAgXTsKICAgIHZhciBCYWRnZUFsZXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI4IiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIuMDEiLCB5MTogIjE2IiwgeTI6ICIxNiIgfV0KICAgIF07CiAgICB2YXIgQmFkZ2VDZW50ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3YxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS40IDEwYTQgNCAwIDEgMCAwIDQiIH1dCiAgICBdOwogICAgdmFyIEJhZGdlQ2hlY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEyIDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIEJhZGdlRG9sbGFyU2lnbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoLTZhMiAyIDAgMSAwIDAgNGg0YTIgMiAwIDEgMSAwIDRIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY2IiB9XQogICAgXTsKICAgIHZhciBCYWRnZUV1cm8gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOS40YTQgNCAwIDEgMCAwIDUuMiIgfV0KICAgIF07CiAgICB2YXIgQmFkZ2VJbmRpYW5SdXBlZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyAxNy01LTFoMWE0IDQgMCAwIDAgMC04IiB9XQogICAgXTsKICAgIHZhciBCYWRnZUluZm8gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjE2IiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIuMDEiLCB5MTogIjgiLCB5MjogIjgiIH1dCiAgICBdOwogICAgdmFyIEJhZGdlSmFwYW5lc2VZZW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDggMyAzdjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTEgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE2aDYiIH1dCiAgICBdOwogICAgdmFyIEJhZGdlTWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI4IiwgeDI6ICIxNiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XQogICAgXTsKICAgIHZhciBCYWRnZVBlcmNlbnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1aC4wMSIgfV0KICAgIF07CiAgICB2YXIgQmFkZ2VQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI4IiwgeTI6ICIxNiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI4IiwgeDI6ICIxNiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XQogICAgXTsKICAgIHZhciBCYWRnZVBvdW5kU3RlcmxpbmcgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTZWOS41YTIuNSAyLjUgMCAwIDEgNSAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTZoNyIgfV0KICAgIF07CiAgICB2YXIgQmFkZ2VRdWVzdGlvbk1hcmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIuMDEiLCB5MTogIjE3IiwgeTI6ICIxNyIgfV0KICAgIF07CiAgICB2YXIgQmFkZ2VSdXNzaWFuUnVibGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE2aDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMmg1YTIgMiAwIDEgMCAwLTRoLTN2OSIgfV0KICAgIF07CiAgICB2YXIgQmFkZ2VTd2lzc0ZyYW5jID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTdWOGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEyaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNmg0IiB9XQogICAgXTsKICAgIHZhciBCYWRnZVR1cmtpc2hMaXJhID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgN3YxMGE1IDUgMCAwIDAgNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDgtNiAzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzYiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJhZGdlWCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICI5IiwgeTE6ICI5IiwgeTI6ICIxNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICIxNSIsIHkxOiAiOSIsIHkyOiAiMTUiIH1dCiAgICBdOwogICAgdmFyIEJhZGdlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJhZ2dhZ2VDbGFpbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE4SDZhMiAyIDAgMCAxLTItMlY3YTIgMiAwIDAgMC0yLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRWNGEyIDIgMCAwIDAtMi0yaC0xYTIgMiAwIDAgMC0yIDJ2MTAiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTMiLCBoZWlnaHQ6ICI4IiwgeDogIjgiLCB5OiAiNiIsIHJ4OiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIyMCIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiMjAiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQmFsbG9vbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2djFhMiAyIDAgMCAwIDIgMmgxYTIgMiAwIDAgMSAyIDJ2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2YTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGMwIDQtMy41IDgtNiA4cy02LTQtNi04YTYgNiAwIDAgMSAxMiAwIiB9XQogICAgXTsKICAgIHZhciBCYW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjkyOSA0LjkyOSAxOS4wNyAxOS4wNzEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIEJhbmFuYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTNjMy41LTIgOC0yIDEwIDJhNS41IDUuNSAwIDAgMSA4IDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNS4xNSAxNy44OWM1LjUyLTEuNTIgOC42NS02Ljg5IDctMTJDMTEuNTUgNCAxMS41IDIgMTMgMmMzLjIyIDAgNSA1LjUgNSA4IDAgNi41LTQuMiAxMi0xMC40OSAxMkM1LjExIDIyIDIgMjIgMiAyMGMwLTEuNSAxLjE0LTEuNTUgMy4xNS0yLjExWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQmFua25vdGVBcnJvd0Rvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxOSAzIDMgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoLjAxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEJhbmRhZ2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMC4wMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTQuMDFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwLjAxaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNC4wMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNnYxMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNnYxMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNiIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxMiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQmFua25vdGVBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDIydi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE5LTMtMy0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmguMDEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQmFua25vdGVYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTcgNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxNy01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmguMDEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQmFua25vdGUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoLjAxTTE4IDEyaC4wMSIgfV0KICAgIF07CiAgICB2YXIgQmFycmVsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgM2E0MSA0MSAwIDAgMCAwIDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDNhNDEgNDEgMCAwIDEgMCAxOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAzYTIgMiAwIDAgMSAxLjY4LjkyIDE1LjI1IDE1LjI1IDAgMCAxIDAgMTYuMTZBMiAyIDAgMCAxIDE3IDIxSDdhMiAyIDAgMCAxLTEuNjgtLjkyIDE1LjI1IDE1LjI1IDAgMCAxIDAtMTYuMTZBMiAyIDAgMCAxIDcgM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy44NCAxN2gxNi4zMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjg0IDdoMTYuMzIiIH1dCiAgICBdOwogICAgdmFyIEJhcmNvZGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDV2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA1djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDV2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNXYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1djE0IiB9XQogICAgXTsKICAgIHZhciBCYXNlbGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMjBoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxNiA2LTEyIDYgMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XQogICAgXTsKICAgIHZhciBCYXRoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNCA4IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTl2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTl2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDUgNy42MjEgMy42MjFBMi4xMjEgMi4xMjEgMCAwIDAgNCA1djEyYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtNSIgfV0KICAgIF07CiAgICB2YXIgQmF0dGVyeUZ1bGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwdjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTR2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMHY0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI2Iiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBCYXR0ZXJ5TG93ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTR2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNHYtNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNiIsIHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxMiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQmF0dGVyeUNoYXJnaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgNy0zIDVoNGwtMyA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0Ljg1NiA2SDE2YTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAyaC0yLjkzNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01LjE0IDE4SDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMi45MzYiIH1dCiAgICBdOwogICAgdmFyIEJhdHRlcnlNZWRpdW0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE0di00IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI2Iiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBCYXR0ZXJ5UGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDl2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi41NDMgNkgxNmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMmgtMy42MDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTR2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNjA2IDE4SDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMy42MDYiIH1dCiAgICBdOwogICAgdmFyIEJhdHRlcnlXYXJuaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTdoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDd2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA2aDJhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTR2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDIiIH1dCiAgICBdOwogICAgdmFyIEJhdHRlcnkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0gMjIgMTQgTCAyMiAxMCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNiIsIHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxMiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQmVha2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNC41IDNoMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAzdjE2YTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNGgxMiIgfV0KICAgIF07CiAgICB2YXIgQmVhbk9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOWMtLjY0LjY0LTEuNTIxLjk1NC0yLjQwMiAxLjE2NUE2IDYgMCAwIDAgOCAyMmExMy45NiAxMy45NiAwIDAgMCA5LjktNC4xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjc1IDUuMDkzQTYgNiAwIDAgMSAyMiA4YzAgMi40MTEtLjYxIDQuNjgtMS42ODMgNi42NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01LjM0MSAxMC42MmE0IDQgMCAwIDAgNi40ODcgMS4yMDhNMTAuNjIgNS4zNDFhNC4wMTUgNC4wMTUgMCAwIDEgMi4wMzkgMi4wNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIEJlYW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4xNjUgNi41OThDOS45NTQgNy40NzggOS42NCA4LjM2IDkgOWMtLjY0LjY0LTEuNTIxLjk1NC0yLjQwMiAxLjE2NUE2IDYgMCAwIDAgOCAyMmM3LjczMiAwIDE0LTYuMjY4IDE0LTE0YTYgNiAwIDAgMC0xMS44MzUtMS40MDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuMzQxIDEwLjYyYTQgNCAwIDEgMCA1LjI3OS01LjI4IiB9XQogICAgXTsKICAgIHZhciBCZWREb3VibGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIwdi04YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBWNmEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA0djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGgyMCIgfV0KICAgIF07CiAgICB2YXIgQmVkU2luZ2xlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMHYtOGEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEwVjZhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOGgxOCIgfV0KICAgIF07CiAgICB2YXIgQmVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOGgxOGEyIDIgMCAwIDEgMiAydjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTdoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4djkiIH1dCiAgICBdOwogICAgdmFyIEJlZWYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNi40IDEzLjdBNi41IDYuNSAwIDEgMCA2LjI4IDYuNmMtMS4xIDMuMTMtLjc4IDMuOS0zLjE4IDYuMDhBMyAzIDAgMCAwIDUgMThjNCAwIDguNC0xLjggMTEuNC00LjMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTguNSA2IDIuMTkgNC41YTYuNDggNi40OCAwIDAgMS0yLjI5IDcuMkMxNS40IDIwLjIgMTEgMjIgNyAyMmEzIDMgMCAwIDEtMi42OC0xLjY2TDIuNCAxNi41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIuNSIsIGN5OiAiOC41IiwgcjogIjIuNSIgfV0KICAgIF07CiAgICB2YXIgQmVlck9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEzdjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTEuNDdWOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMWgxYTMgMyAwIDAgMSAyLjc0NSA0LjIxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA4djEyYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0ydi0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNTM2IDcuNTM1QzYuNzY2IDcuNjQ5IDYuMTU0IDggNS41IDhhMi41IDIuNSAwIDAgMS0xLjc2OC00LjI2OCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjcyNyAzLjIwNEM5LjMwNiAyLjc2NyA5Ljg4NSAyIDExIDJjMS41NiAwIDIgMS41IDMgMS41czEuNzItLjUgMi41LS41YTEgMSAwIDEgMSAwIDVjLS43OCAwLTEuNS0uNS0yLjUtLjVhMy4xNDkgMy4xNDkgMCAwIDAtLjg0Mi4xMiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE0LjZWMTgiIH1dCiAgICBdOwogICAgdmFyIEJlZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMWgxYTMgMyAwIDAgMSAwIDZoLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEydjYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQgNy41Yy0xIDAtMS40NC41LTMgLjVzLTItLjUtMy0uNS0xLjcyLjUtMi41LjVhMi41IDIuNSAwIDAgMSAwLTVjLjc4IDAgMS41Ny41IDIuNS41UzkuNDQgMiAxMSAyczIgMS41IDMgMS41IDEuNzItLjUgMi41LS41YTIuNSAyLjUgMCAwIDEgMCA1Yy0uNzggMC0xLjUtLjUtMi41LS41WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDh2MTJhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJWOCIgfV0KICAgIF07CiAgICB2YXIgQmVsbERvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjI2OCAyMWEyIDIgMCAwIDAgMy40NjQgMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy45MTYgMi4zMTRBNiA2IDAgMCAwIDYgOGMwIDQuNDk5LTEuNDExIDUuOTU2LTIuNzQgNy4zMjdBMSAxIDAgMCAwIDQgMTdoMTZhMSAxIDAgMCAwIC43NC0xLjY3MyA5IDkgMCAwIDEtLjU4NS0uNjY1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjgiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgQmVsbEVsZWN0cmljID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguNTE4IDE3LjM0N0E3IDcgMCAwIDEgMTQgMTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguOCA0QTExIDExIDAgMCAxIDIwIDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aC4wMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjIwIiwgY3k6ICIxNiIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICI3IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNCIsIHk6ICIxNiIsIHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBCZWxsTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4yNjggMjFhMiAyIDAgMCAwIDMuNDY0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOGg2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjI0MyAzLjc1N0E2IDYgMCAwIDAgNiA4YzAgNC40OTktMS40MTEgNS45NTYtMi43MzggNy4zMjZBMSAxIDAgMCAwIDQgMTdoMTZhMSAxIDAgMCAwIC43NC0xLjY3M0E5LjQgOS40IDAgMCAxIDE4LjY2NyAxMiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQmVsbFBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4yNjggMjFhMiAyIDAgMCAwIDMuNDY0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDV2NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC4wMDIgMTQuNDY0YTkgOSAwIDAgMCAuNzM4Ljg2M0ExIDEgMCAwIDEgMjAgMTdINGExIDEgMCAwIDEtLjc0LTEuNjczQzQuNTkgMTMuOTU2IDYgMTIuNDk5IDYgOGE2IDYgMCAwIDEgOC43NS01LjMzMiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQmVsbE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjI2OCAyMWEyIDIgMCAwIDAgMy40NjQgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxN0g0YTEgMSAwIDAgMS0uNzQtMS42NzNDNC41OSAxMy45NTYgNiAxMi40OTkgNiA4YTYgNiAwIDAgMSAuMjU4LTEuNzQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjY2OCAzLjAxQTYgNiAwIDAgMSAxOCA4YzAgMi42ODcuNzcgNC42NTMgMS43MDcgNi4wNSIgfV0KICAgIF07CiAgICB2YXIgQmVsbFJpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4yNjggMjFhMiAyIDAgMCAwIDMuNDY0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgOGMwLTIuMy0uOC00LjMtMi02IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuMjYyIDE1LjMyNkExIDEgMCAwIDAgNCAxN2gxNmExIDEgMCAwIDAgLjc0LTEuNjczQzE5LjQxIDEzLjk1NiAxOCAxMi40OTkgMTggOEE2IDYgMCAwIDAgNiA4YzAgNC40OTktMS40MTEgNS45NTYtMi43MzggNy4zMjYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyQzIuOCAzLjcgMiA1LjcgMiA4IiB9XQogICAgXTsKICAgIHZhciBCZWxsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMjY4IDIxYTIgMiAwIDAgMCAzLjQ2NCAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuMjYyIDE1LjMyNkExIDEgMCAwIDAgNCAxN2gxNmExIDEgMCAwIDAgLjc0LTEuNjczQzE5LjQxIDEzLjk1NiAxOCAxMi40OTkgMTggOEE2IDYgMCAwIDAgNiA4YzAgNC40OTktMS40MTEgNS45NTYtMi43MzggNy4zMjYiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJldHdlZW5Ib3Jpem9udGFsRW5kID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTMiLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxNS0zLTMgMy0zIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEzIiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjE0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBCZXR3ZWVuSG9yaXpvbnRhbFN0YXJ0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTMiLCBoZWlnaHQ6ICI3IiwgeDogIjgiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDkgMyAzLTMgMyIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMyIsIGhlaWdodDogIjciLCB4OiAiOCIsIHk6ICIxNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQmV0d2VlblZlcnRpY2FsU3RhcnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiMTMiLCB4OiAiMyIsIHk6ICI4Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDItMyAzLTMtMyIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiMTMiLCB4OiAiMTQiLCB5OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQmV0d2VlblZlcnRpY2FsRW5kID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjEzIiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDIyIDMtMyAzIDMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjEzIiwgeDogIjE0IiwgeTogIjMiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIEJpY2Vwc0ZsZXhlZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjQwOSAxMy4wMTdBNSA1IDAgMCAxIDIyIDE1YzAgMy44NjYtNCA3LTkgNy00LjA3NyAwLTguMTUzLS44Mi0xMC4zNzEtMi40NjItLjQyNi0uMzE2LS42MzEtLjgzMi0uNjItMS4zNjJDMi4xMTggMTIuNzIzIDIuNjI3IDIgMTAgMmEzIDMgMCAwIDEgMyAzIDIgMiAwIDAgMS0yIDJjLTEuMTA1IDAtMS42NC0uNDQ0LTItMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNGE1IDUgMCAwIDAtNy41ODQgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05Ljk2NCA2LjgyNUM4LjAxOSA3Ljk3NyA5LjUgMTMgOCAxNSIgfV0KICAgIF07CiAgICB2YXIgQmlrZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTguNSIsIGN5OiAiMTcuNSIsIHI6ICIzLjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1LjUiLCBjeTogIjE3LjUiLCByOiAiMy41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjUiLCByOiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNy41VjE0bC0zLTMgNC0zIDIgM2gyIiB9XQogICAgXTsKICAgIHZhciBCaW5hcnkgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjE0IiwgeTogIjE0Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjYiLCB5OiAiNCIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjYiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNGgydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNGgydjYiIH1dCiAgICBdOwogICAgdmFyIEJpb2hhemFyZCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExLjkiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjcgMy40Yy0uOSAyLjUgMCA1LjIgMi4yIDYuN0M2LjUgOSAzLjcgOS42IDIgMTEuNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjkgMTAuMSAxLjQuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy4zIDMuNGMuOSAyLjUgMCA1LjItMi4yIDYuNyAyLjQtMS4yIDUuMi0uNiA2LjkgMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjEgMTAuMS0xLjQuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi43IDIwLjhjLTIuNi0uNC00LjYtMi42LTQuNy01LjMtLjIgMi42LTIuMSA0LjgtNC43IDUuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMy45djEuNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy41IDUuNGMtMS0uMi0yLS4yLTMgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNi40Yy43LS43IDEuMi0xLjYgMS41LTIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01LjUgMTMuOWMuMy45LjggMS44IDEuNSAyLjUiIH1dCiAgICBdOwogICAgdmFyIEJpcmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjQgMThIMTJhOCA4IDAgMCAwIDgtOFY3YTQgNCAwIDAgMC03LjI4LTIuM0wyIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDcgMiAuNS0yIC41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE4djMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTcuNzVWMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxOGE2IDYgMCAwIDAgMy44NC0xMC42MSIgfV0KICAgIF07CiAgICB2YXIgQmlub2N1bGFycyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgN1Y0YTEgMSAwIDAgMC0xLTFoLTJhMSAxIDAgMCAwLTEgMXYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIxYTIgMiAwIDAgMCAyLTJ2LTMuODUxYzAtMS4zOS0yLTIuOTYyLTItNC44MjlWOGExIDEgMCAwIDAtMS0xaC00YTEgMSAwIDAgMC0xIDF2MTFhMiAyIDAgMCAwIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNIDIyIDE2IEwgMiAxNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDIxYTIgMiAwIDAgMS0yLTJ2LTMuODUxYzAtMS4zOSAyLTIuOTYyIDItNC44MjlWOGExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXYxMWEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDdWNGExIDEgMCAwIDAtMS0xSDZhMSAxIDAgMCAwLTEgMXYzIiB9XQogICAgXTsKICAgIHZhciBCaXJkaG91c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE4IDEuOTU2LTExLjQ2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDggNy44Mi01LjYxNWEyIDIgMCAwIDEgMi4zNiAwTDIxIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOGgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE4IDUuMDQ0IDYuNTMyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEJpdGNvaW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS43NjcgMTkuMDg5YzQuOTI0Ljg2OCA2LjE0LTYuMDI1IDEuMjE2LTYuODk0bS0xLjIxNiA2Ljg5NEw1Ljg2IDE4LjA0N201LjkwOCAxLjA0Mi0uMzQ3IDEuOTdtMS41NjMtOC44NjRjNC45MjQuODY5IDYuMTQtNi4wMjUgMS4yMTUtNi44OTNtLTEuMjE1IDYuODkzLTMuOTQtLjY5NG01LjE1NS02LjJMOC4yOSA0LjI2bTUuOTA4IDEuMDQyLjM0OC0xLjk3TTcuNDggMjAuMzY0bDMuMTI2LTE3LjcyNyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQmxlbmQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjkiLCByOiAiNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICIxNSIsIHI6ICI3IiB9XQogICAgXTsKICAgIHZhciBCbGluZHMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDNoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgN0g4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDExSDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTloMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDN2MTQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICIxOSIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBCbG9ja3MgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMCAyMlY3YTEgMSAwIDAgMC0xLTFINGEyIDIgMCAwIDAtMiAydjEyYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtNWExIDEgMCAwIDAtMS0xSDIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInJlY3QiLCB7IHg6ICIxNCIsIHk6ICIyIiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQmx1ZXRvb3RoQ29ubmVjdGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNyA3IDEwIDEwLTUgNVYybDUgNUw3IDE3IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE4IiwgeDI6ICIyMSIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB4MjogIjYiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgICB2YXIgQmx1ZXRvb3RoT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTctNSA1VjEybC01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjUgOS41IDE3IDdsLTUtNXY0LjUiIH1dCiAgICBdOwogICAgdmFyIEJsdWV0b290aFNlYXJjaGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgNyAxMCAxMC01IDVWMmw1IDVMNyAxNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC44MyAxNC44M2E0IDQgMCAwIDAgMC01LjY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEyaC4wMSIgfV0KICAgIF07CiAgICB2YXIgQmx1ZXRvb3RoID0gW1sicGF0aCIsIHsgZDogIm03IDcgMTAgMTAtNSA1VjJsNSA1TDcgMTciIH1dXTsKICAgIHZhciBCb2xkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmg5YTQgNCAwIDAgMSAwIDhIN2ExIDEgMCAwIDEtMS0xVjVhMSAxIDAgMCAxIDEtMWg3YTQgNCAwIDAgMSAwIDgiIH1dCiAgICBdOwogICAgdmFyIEJvbHQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNCIgfV0KICAgIF07CiAgICB2YXIgQm9tYiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjEzIiwgcjogIjkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xNC4zNSA0LjY1IDE2LjMgMi43YTIuNDEgMi40MSAwIDAgMSAzLjQgMGwxLjYgMS42YTIuNCAyLjQgMCAwIDEgMCAzLjRsLTEuOTUgMS45NSIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMi0xLjUgMS41IiB9XQogICAgXTsKICAgIHZhciBCb25lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgMTBjLjctLjcgMS42OSAwIDIuNSAwYTIuNSAyLjUgMCAxIDAgMC01IC41LjUgMCAwIDEtLjUtLjUgMi41IDIuNSAwIDEgMC01IDBjMCAuODEuNyAxLjggMCAyLjVsLTcgN2MtLjcuNy0xLjY5IDAtMi41IDBhMi41IDIuNSAwIDAgMCAwIDVjLjI4IDAgLjUuMjIuNS41YTIuNSAyLjUgMCAxIDAgNSAwYzAtLjgxLS43LTEuOCAwLTIuNVoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJvb2tBID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDEzIDQtNyA0IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4xIDExaDUuNyIgfV0KICAgIF07CiAgICB2YXIgQm9va0FsZXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTNoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXQogICAgXTsKICAgIHZhciBCb29rQXVkaW8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOHYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4djMiIH1dCiAgICBdOwogICAgdmFyIEJvb2tDaGVjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA5LjUgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgQm9va0NvcHkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDdhMiAyIDAgMCAwLTIgMnYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01LjgwMyAxOEg1YTIgMiAwIDAgMCAwIDRoOS41YS41LjUgMCAwIDAgLjUtLjVWMjEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk05IDE1VjRhMiAyIDAgMCAxIDItMmg5LjVhLjUuNSAwIDAgMSAuNS41djE0YS41LjUgMCAwIDEtLjUuNUgxMWEyIDIgMCAwIDEgMC00aDEwIiB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQm9va0Rhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aDEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMmgxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmgxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNSAyMkgxOWExIDEgMCAwIDAgMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjUgMkgxOWExIDEgMCAwIDEgMSAxdjEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNHYzaC0yLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgOC41VjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBWOC41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTkuNVYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDQuNUEyLjUgMi41IDAgMCAxIDYuNSAySDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMkg2LjVhMSAxIDAgMCAxIDAtNUg4IiB9XQogICAgXTsKICAgIHZhciBCb29rRG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzVjciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEwIDMgMyAzLTMiIH1dCiAgICBdOwogICAgdmFyIEJvb2tIZWFkcGhvbmVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEydi0yYTQgNCAwIDAgMSA4IDB2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiMTIiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgQm9va0hlYXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjYyIDkuOEEyLjI1IDIuMjUgMCAxIDEgMTIgNi44MzZhMi4yNSAyLjI1IDAgMSAxIDMuMzggMi45NjZsLTIuNjI2IDIuODU2YS45OTguOTk4IDAgMCAxLTEuNTA3IDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBCb29rSW1hZ2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxMy43LTIuMS0yLjFhMiAyIDAgMCAwLTIuOCAwTDkuNyAxNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjgiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQm9va0tleSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDMgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDItNC41IDQuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA3Ljg5OFYyMWExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMmg3Ljg0NCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE0IiwgY3k6ICI4IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEJvb2tMb2NrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNlY0YTIgMiAwIDEgMC00IDB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNXY2YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTIiLCB5OiAiNiIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjUiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIEJvb2tNYXJrZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjhsMy0zIDMgM1YyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJvb2tNaW51cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMGg2IiB9XQogICAgXTsKICAgIHZhciBCb29rT3BlbkNoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjFWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMiAyIDIgNC00IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDZWNGExIDEgMCAwIDAtMS0xaC01YTQgNCAwIDAgMC00IDQgNCA0IDAgMCAwLTQtNEgzYTEgMSAwIDAgMC0xIDF2MTNhMSAxIDAgMCAwIDEgMWg2YTMgMyAwIDAgMSAzIDMgMyAzIDAgMCAxIDMtM2g2YTEgMSAwIDAgMCAxLTF2LTEuMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQm9va09wZW5UZXh0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3YxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDE4YTEgMSAwIDAgMS0xLTFWNGExIDEgMCAwIDEgMS0xaDVhNCA0IDAgMCAxIDQgNCA0IDQgMCAwIDEgNC00aDVhMSAxIDAgMCAxIDEgMXYxM2ExIDEgMCAwIDEtMSAxaC02YTMgMyAwIDAgMC0zIDMgMyAzIDAgMCAwLTMtM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGgyIiB9XQogICAgXTsKICAgIHZhciBCb29rT3BlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2MTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxOGExIDEgMCAwIDEtMS0xVjRhMSAxIDAgMCAxIDEtMWg1YTQgNCAwIDAgMSA0IDQgNCA0IDAgMCAxIDQtNGg1YTEgMSAwIDAgMSAxIDF2MTNhMSAxIDAgMCAxLTEgMWgtNmEzIDMgMCAwIDAtMyAzIDMgMyAwIDAgMC0zLTN6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBCb29rUGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTBoNiIgfV0KICAgIF07CiAgICB2YXIgQm9va1NlYXJjaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIySDUuNWExIDEgMCAwIDEgMC01aDQuNTAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIyLTEuODc5LTEuODc4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA1LjUgMkgxOGExIDEgMCAwIDEgMSAxdjgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgQm9va1RleHQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDdoNiIgfV0KICAgIF07CiAgICB2YXIgQm9va1R5cGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxM2g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4VjZIOHYyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJvb2tVcDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM1Y3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDJoMWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDUgMy0zIDMgMyIgfV0KICAgIF07CiAgICB2YXIgQm9va1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTNWNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMy0zIDMgMyIgfV0KICAgIF07CiAgICB2YXIgQm9va1VzZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxM2EzIDMgMCAxIDAtNiAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBCb29rWCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgNy01IDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjUgNyA1IDUiIH1dCiAgICBdOwogICAgdmFyIEJvb2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXQogICAgXTsKICAgIHZhciBCb29rbWFya0NoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgM2EyIDIgMCAwIDEgMiAydjE1YTEgMSAwIDAgMS0xLjQ5Ni44NjhsLTQuNTEyLTIuNTc4YTIgMiAwIDAgMC0xLjk4NCAwbC00LjUxMiAyLjU3OEExIDEgMCAwIDEgNSAyMFY1YTIgMiAwIDAgMSAyLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgQm9va21hcmtNaW51cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEwSDkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgM2EyIDIgMCAwIDEgMiAydjE1YTEgMSAwIDAgMS0xLjQ5Ni44NjhsLTQuNTEyLTIuNTc4YTIgMiAwIDAgMC0xLjk4NCAwbC00LjUxMiAyLjU3OEExIDEgMCAwIDEgNSAyMFY1YTIgMiAwIDAgMSAyLTJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBCb29rbWFya1ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDcuNS01IDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgM2EyIDIgMCAwIDEgMiAydjE1YTEgMSAwIDAgMS0xLjQ5Ni44NjhsLTQuNTEyLTIuNTc4YTIgMiAwIDAgMC0xLjk4NCAwbC00LjUxMiAyLjU3OEExIDEgMCAwIDEgNSAyMFY1YTIgMiAwIDAgMSAyLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSA3LjUgNSA1IiB9XQogICAgXTsKICAgIHZhciBCb29rbWFya1BsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBIOSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAzYTIgMiAwIDAgMSAyIDJ2MTVhMSAxIDAgMCAxLTEuNDk2Ljg2OGwtNC41MTItMi41NzhhMiAyIDAgMCAwLTEuOTg0IDBsLTQuNTEyIDIuNTc4QTEgMSAwIDAgMSA1IDIwVjVhMiAyIDAgMCAxIDItMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJvb2ttYXJrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgM2EyIDIgMCAwIDEgMiAydjE1YTEgMSAwIDAgMS0xLjQ5Ni44NjhsLTQuNTEyLTIuNTc4YTIgMiAwIDAgMC0xLjk4NCAwbC00LjUxMiAyLjU3OEExIDEgMCAwIDEgNSAyMFY1YTIgMiAwIDAgMSAyLTJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBCb29tQm94ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA5VjVhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDh2MSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiOSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjE1IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMTUiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQm90TWVzc2FnZVNxdWFyZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZWMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDExdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEyaDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTZhMiAyIDAgMCAxLTIgMkg4LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgNCAyMC4yODZWOGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTF2MiIgfV0KICAgIF07CiAgICB2YXIgQm90T2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNjcgOEgxOGEyIDIgMCAwIDEgMiAydjQuMzMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE0aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjIgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOEg2YTIgMiAwIDAgMC0yIDJ2OGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAxLjQxNC0uNTg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTN2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjY3IDRIMTJ2Mi4zMyIgfV0KICAgIF07CiAgICB2YXIgQm90ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOFY0SDgiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxMiIsIHg6ICI0IiwgeTogIjgiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE0aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTN2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEzdjIiIH1dCiAgICBdOwogICAgdmFyIEJvdHRsZVdpbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMCAzYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhNiA2IDAgMCAwIDEuMiAzLjZsLjYuOEE2IDYgMCAwIDEgMTcgMTN2OGExIDEgMCAwIDEtMSAxSDhhMSAxIDAgMCAxLTEtMXYtOGE2IDYgMCAwIDEgMS4yLTMuNmwuNi0uOEE2IDYgMCAwIDAgMTAgNXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTNoLTRhMSAxIDAgMCAwLTEgMXYzYTEgMSAwIDAgMCAxIDFoNCIgfV0KICAgIF07CiAgICB2YXIgQm93QXJyb3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC41NzUgMTEuMDgyYTEzIDEzIDAgMCAxIDEuMDQ4IDkuMDI3IDEuMTcgMS4xNyAwIDAgMS0xLjkxNC41OTdMMTQgMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMCAzLjI5IDYuMjlhMS4xNyAxLjE3IDAgMCAxIC42LTEuOTEgMTMgMTMgMCAwIDEgOS4wMyAxLjA1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMTRhMS43IDEuNyAwIDAgMC0xLjIwNy41bC0yLjY0NiAyLjY0NkEuNS41IDAgMCAwIDMuNSAxOEg1YTEgMSAwIDAgMSAxIDF2MS41YS41LjUgMCAwIDAgLjg1NC4zNTRMOS41IDE4LjIwN0ExLjcgMS43IDAgMCAwIDEwIDE3di0yYTEgMSAwIDAgMC0xLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNzA3IDE0LjI5MyAyMSAzIiB9XQogICAgXTsKICAgIHZhciBCb3ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSA4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMy4zIDcgOC43IDUgOC43LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJWMTIiIH1dCiAgICBdOwogICAgdmFyIEJveGVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi45NyAxMi45MkEyIDIgMCAwIDAgMiAxNC42M3YzLjI0YTIgMiAwIDAgMCAuOTcgMS43MWwzIDEuOGEyIDIgMCAwIDAgMi4wNiAwTDEyIDE5di01LjVsLTUtMy00LjAzIDIuNDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTYuNS00Ljc0LTIuODUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxNi41IDUtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE2LjV2NS4xNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiAxMy41VjE5bDMuOTcgMi4zOGEyIDIgMCAwIDAgMi4wNiAwbDMtMS44YTIgMiAwIDAgMCAuOTctMS43MXYtMy4yNGEyIDIgMCAwIDAtLjk3LTEuNzFMMTcgMTAuNWwtNSAzWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxNi41LTUtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxNi41IDQuNzQtMi44NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNi41djUuMTciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy45NyA0LjQyQTIgMiAwIDAgMCA3IDYuMTN2NC4zN2w1IDMgNS0zVjYuMTNhMiAyIDAgMCAwLS45Ny0xLjcxbC0zLTEuOGEyIDIgMCAwIDAtMi4wNiAwbC0zIDEuOFoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOCA3LjI2IDUuMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgOCA0Ljc0LTIuODUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTMuNVY4IiB9XQogICAgXTsKICAgIHZhciBCcmFjZXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDNIN2EyIDIgMCAwIDAtMiAydjVhMiAyIDAgMCAxLTIgMiAyIDIgMCAwIDEgMiAydjVjMCAxLjEuOSAyIDIgMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDIxaDFhMiAyIDAgMCAwIDItMnYtNWMwLTEuMS45LTIgMi0yYTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDAtMi0yaC0xIiB9XQogICAgXTsKICAgIHZhciBCcmFja2V0cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoM2ExIDEgMCAwIDEgMSAxdjE2YTEgMSAwIDAgMS0xIDFoLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMUg1YTEgMSAwIDAgMS0xLTFWNGExIDEgMCAwIDEgMS0xaDMiIH1dCiAgICBdOwogICAgdmFyIEJyYWluQ2lyY3VpdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTIgNWEzIDMgMCAxIDAtNS45OTcuMTI1IDQgNCAwIDAgMC0yLjUyNiA1Ljc3IDQgNCAwIDAgMCAuNTU2IDYuNTg4QTQgNCAwIDEgMCAxMiAxOFoiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTNhNC41IDQuNSAwIDAgMCAzLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4wMDMgNS4xMjVBMyAzIDAgMCAwIDYuNDAxIDYuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjQ3NyAxMC44OTZhNCA0IDAgMCAxIC41ODUtLjM5NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4YTQgNCAwIDAgMS0xLjk2Ny0uNTE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThoNmEyIDIgMCAwIDEgMiAydjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhWNWEyIDIgMCAwIDEgMi0yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjEzIiwgcjogIi41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjMiLCByOiAiLjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiMjEiLCByOiAiLjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiOCIsIHI6ICIuNSIgfV0KICAgIF07CiAgICB2YXIgQnJhaW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEzYTQuMTcgNC4xNyAwIDAgMS0zLTQgNC4xNyA0LjE3IDAgMCAxLTMgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41OTggNi41QTMgMyAwIDEgMCAxMiA1YTMgMyAwIDEgMC01LjU5OCAxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOTk3IDUuMTI1YTQgNCAwIDAgMSAyLjUyNiA1Ljc3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE4YTQgNCAwIDAgMCAyLTcuNDY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5Ljk2NyAxNy40ODNBNCA0IDAgMSAxIDEyIDE4YTQgNCAwIDEgMS03Ljk2Ny0uNTE3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMThhNCA0IDAgMCAxLTItNy40NjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4wMDMgNS4xMjVhNCA0IDAgMCAwLTIuNTI2IDUuNzciIH1dCiAgICBdOwogICAgdmFyIEJyaWNrV2FsbEZpcmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzdjIuMTA3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3IDljMSAzIDIuNSAzLjUgMy41IDQuNUE1IDUgMCAwIDEgMjIgMTdhNSA1IDAgMCAxLTEwIDBjMC0uMyAwLS42LjEtLjlhMiAyIDAgMSAwIDMuMy0yQzEzIDExLjUgMTYgOSAxNyA5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDguMjc0VjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgzLjkzOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDUuMjUzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWg4LjIyOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE1djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzdjYiIH1dCiAgICBdOwogICAgdmFyIEJyYWluQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAuODUyIDE0Ljc3Mi0uMzgzLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMC44NTIgOS4yMjgtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjE0OCAxNC43NzIuMzgyLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy41MzEgOC4zMDUtLjM4My45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNzcyIDEwLjg1Mi45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC43NzIgMTMuMTQ4LjkyMy4zODMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuNTk4IDYuNUEzIDMgMCAxIDAgMTIgNWEzIDMgMCAwIDAtNS42My0xLjQ0NiAzIDMgMCAwIDAtLjM2OCAxLjU3MSA0IDQgMCAwIDAtMi41MjUgNS43NzEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOTk4IDUuMTI1YTQgNCAwIDAgMSAyLjUyNSA1Ljc3MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS41MDUgMTAuMjk0YTQgNCAwIDAgMS0xLjUgNy43MDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00LjAzMiAxNy40ODNBNCA0IDAgMCAwIDExLjQ2NCAyMGMuMTgtLjMxMS44OTItLjMxMSAxLjA3MiAwYTQgNCAwIDAgMCA3LjQzMi0yLjUxNiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC41IDEwLjI5MUE0IDQgMCAwIDAgNiAxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjAwMiA1LjEyNWEzIDMgMCAwIDAgLjQgMS4zNzUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4yMjggMTAuODUyLS45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjIyOCAxMy4xNDgtLjkyMy4zODMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgQnJpY2tXYWxsU2hpZWxkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXYxLjI1OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzdjUuNDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOS4xMThWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDUuNzUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgMTcuNWMwIDIuNDk5LTEuNzUgMy43NDktMy44MyA0LjQ3NGEuNS41IDAgMCAxLS4zMzUtLjAwNWMtMi4wODUtLjcyLTMuODM1LTEuOTctMy44MzUtNC40N1YxNGEuNS41IDAgMCAxIC41LS40OTljMSAwIDIuMjUtLjYgMy4xMi0xLjM2YS42LjYgMCAwIDEgLjc2LS4wMDFjLjg3NS43NjUgMi4xMiAxLjM2IDMuMTIgMS4zNmEuNS41IDAgMCAxIC41LjV6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDloMTIuMTQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTV2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDN2NiIgfV0KICAgIF07CiAgICB2YXIgQnJpY2tXYWxsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE1djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgM3Y2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTV2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDN2NiIgfV0KICAgIF07CiAgICB2YXIgQnJpZWZjYXNlQnVzaW5lc3MgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNlY0YTIgMiAwIDAgMC0yLTJoLTRhMiAyIDAgMCAwLTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEzYTE4LjE1IDE4LjE1IDAgMCAxLTIwIDAiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjYiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIEJyaWVmY2FzZUNvbnZleW9yQmVsdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDIwSDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTZWNGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYxMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjQiLCB5OiAiNiIsIHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxMCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQnJpZWZjYXNlTWVkaWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDExdjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTNoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNlY0YTIgMiAwIDAgMC0yLTJoLTRhMiAyIDAgMCAwLTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDZ2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA2djE0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBCcmllZmNhc2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMFY0YTIgMiAwIDAgMC0yLTJoLTRhMiAyIDAgMCAwLTIgMnYxNiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQnJ1c2hDbGVhbmluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIyLTEtNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOSAxNGExIDEgMCAwIDAgMS0xdi0xYTIgMiAwIDAgMC0yLTJoLTNhMSAxIDAgMCAxLTEtMVY0YTIgMiAwIDAgMC00IDB2NWExIDEgMCAwIDEtMSAxSDZhMiAyIDAgMCAwLTIgMnYxYTEgMSAwIDAgMCAxIDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTRINWwtMS45NzMgNi43NjdBMSAxIDAgMCAwIDQgMjJoMTZhMSAxIDAgMCAwIC45NzMtMS4yMzN6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMjIgMS00IiB9XQogICAgXTsKICAgIHZhciBCcmluZ1RvRnJvbnQgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiOCIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjgiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjBhMiAyIDAgMCAwIDIgMmg0YTIgMiAwIDAgMCAyLTJ2LTRhMiAyIDAgMCAwLTItMiIgfV0KICAgIF07CiAgICB2YXIgQnJ1c2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSAxMCAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi41IDIxQTMuNSAzLjUgMCAxIDAgMyAxNy41YTIuNjIgMi42MiAwIDAgMS0uNzA4IDEuNzkyQTEgMSAwIDAgMCAzIDIxeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05Ljk2OSAxNy4wMzEgMjEuMzc4IDUuNjI0YTEgMSAwIDAgMC0zLjAwMi0zLjAwMkw2Ljk2NyAxNC4wMzEiIH1dCiAgICBdOwogICAgdmFyIEJ1YmJsZXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjAwMSAxNS4wODVBMS41IDEuNSAwIDAgMSA5IDE2LjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOC41IiwgY3k6ICI4LjUiLCByOiAiMy41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNy41IiwgY3k6ICIxNi41IiwgcjogIjUuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjcuNSIsIGN5OiAiNC41IiwgcjogIjIuNSIgfV0KICAgIF07CiAgICB2YXIgQnVnT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2LTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuMTIgMy44OCAxNiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDcuMTNWNmEzIDMgMCAwIDAtNS4xNC0yLjFMOCAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEyLjM0VjExYTQgNCAwIDAgMC00LTRoLTEuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNWE0IDQgMCAwIDEtMy41NSAzLjk3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEzaC0zLjM0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjFhNCA0IDAgMCAxIDMuODEtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEzSDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy43IDcuN0E0IDQgMCAwIDAgNiAxMXYzYTYgNiAwIDAgMCAxMS4xMyAzLjEzIiB9XQogICAgXTsKICAgIHZhciBCdWdQbGF5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTkuNjU1QTYgNiAwIDAgMSA2IDE0di0zYTQgNCAwIDAgMSA0LTRoNGE0IDQgMCAwIDEgNCAzLjk3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDE1LjAwM2ExIDEgMCAwIDEgMS41MTctLjg1OWw0Ljk5NyAyLjk5N2ExIDEgMCAwIDEgMCAxLjcxOGwtNC45OTcgMi45OTdhMSAxIDAgMCAxLTEuNTE3LS44NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuMTIgMy44OCAxNiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVhNCA0IDAgMCAxLTMuNTUgMy45NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIxYTQgNCAwIDAgMSAzLjgxLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1YTQgNCAwIDAgMCAzLjU1IDMuOTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxM0gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMiAxLjg4IDEuODgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA3LjEzVjZhMyAzIDAgMSAxIDYgMHYxLjEzIiB9XQogICAgXTsKICAgIHZhciBCdWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYtOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA3YTQgNCAwIDAgMSA0IDR2M2E2IDYgMCAwIDEtMTIgMHYtM2E0IDQgMCAwIDEgNC00eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4xMiAzLjg4IDE2IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMjFhNCA0IDAgMCAwLTMuODEtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1YTQgNCAwIDAgMS0zLjU1IDMuOTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTNoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMWE0IDQgMCAwIDEgMy44MS00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWE0IDQgMCAwIDAgMy41NSAzLjk3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTNIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDIgMS44OCAxLjg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNy4xM1Y2YTMgMyAwIDEgMSA2IDB2MS4xMyIgfV0KICAgIF07CiAgICB2YXIgQnVpbGRpbmcyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjF2LTNhMiAyIDAgMCAwLTQgMHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTBINGEyIDIgMCAwIDAtMiAydjdhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0yVjlhMiAyIDAgMCAwLTItMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIxVjVhMiAyIDAgMCAxIDItMmg4YTIgMiAwIDAgMSAyIDJ2MTYiIH1dCiAgICBdOwogICAgdmFyIEJ1aWxkaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMnYtM2ExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXYzIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNCIsIHk6ICIyIiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjIwIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBCdXNGcm9udCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNiAyIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDctMi0xIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMTYiLCB4OiAiNCIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTFoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTl2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMXYtMiIgfV0KICAgIF07CiAgICB2YXIgQnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMTkuNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCAxOGgzcy41LTEuNy44LTIuOGMuMS0uNC4yLS44LjItMS4yIDAtLjQtLjEtLjgtLjItMS4ybC0xLjQtNUMyMC4xIDYuOCAxOS4xIDYgMTggNkg0YTIgMiAwIDAgMC0yIDJ2MTBoMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjE4IiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOGg1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE4IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIENhYmxlQ2FyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgM2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiA5IDIwLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJWNi41IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMTAiLCB4OiAiNCIsIHk6ICIxMiIsIHJ4OiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEydjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE3aDE2IiB9XQogICAgXTsKICAgIHZhciBDYWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE5YTEgMSAwIDAgMS0xLTF2LTJhMiAyIDAgMCAxIDItMmgyYTIgMiAwIDAgMSAyIDJ2MmExIDEgMCAwIDEtMSAxeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMXYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNFY2LjVhMSAxIDAgMCAwLTcgMHYxMWExIDEgMCAwIDEtNyAwVjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDIxdi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBhMiAyIDAgMCAxLTItMlY2YTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMSAxdjJhMiAyIDAgMCAxLTIgMnoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA1VjMiIH1dCiAgICBdOwogICAgdmFyIENha2VTbGljZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEzSDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTdIMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm03LjIgNy45LTMuMzg4IDIuNUEyIDIgMCAwIDAgMyAxMi4wMVYyMGExIDEgMCAwIDAgMSAxaDE2YTEgMSAwIDAgMCAxLTF2LTguNjU0YzAtMi0yLjQ0LTYuMDI2LTYuNDQtOC4wMjZhMSAxIDAgMCAwLTEuMDgyLjA1N0wxMC40IDUuNiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjciLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQ2FrZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIxdi04YTIgMiAwIDAgMC0yLTJINmEyIDIgMCAwIDAtMiAydjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNnMuNS0xIDItMSAyLjUgMiA0IDIgMi41LTIgNC0yIDIuNSAyIDQgMiAyLTEgMi0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA4djMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDh2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDRoLjAxIiB9XQogICAgXTsKICAgIHZhciBDYWxjdWxhdG9yID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIyMCIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiMTYiLCB5MTogIjYiLCB5MjogIjYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTYiLCB4MjogIjE2IiwgeTE6ICIxNCIsIHkyOiAiMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMThoLjAxIiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhcjEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxNGgxdjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjQiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyQXJyb3dEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTggNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTR2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMS4zNTRWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDcuMzQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyQXJyb3dVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIydi04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDExLjM0M1Y2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhckNoZWNrMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNFY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIwIDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE2IDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyQ2xvY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNHYyLjJsMS42IDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDcuNVY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxNiIsIHI6ICI2IiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhckNvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjIyOCAxNi44NTItLjkyMy0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjIyOCAxOS4xNDgtLjkyMy4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2LjQ3IDE0LjMwNS4zODIuOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAyMC43NzItLjM4My45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMTQ4IDE1LjIyOC4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS41MyAyMS42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiAxNi44NTIuOTI0LS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDE5LjE0OC45MjQuMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEwLjU5MlY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyRGF5cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE4aC4wMSIgfV0KICAgIF07CiAgICB2YXIgQ2FsZW5kYXJGb2xkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAyMGEyIDIgMCAwIDAgMiAyaDEwYTIuNCAyLjQgMCAwIDAgMS43MDYtLjcwNmwzLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDIxIDE2VjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDIydi01YTEgMSAwIDAgMSAxLTFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0KICAgIF07CiAgICB2YXIgQ2FsZW5kYXJIZWFydCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjEyNyAyMkg1YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2NS4xMjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQuNjIgMTguOEEyLjI1IDIuMjUgMCAxIDEgMTggMTUuODM2YTIuMjUgMi4yNSAwIDEgMSAzLjM4IDIuOTY2bC0yLjYyNiAyLjg1NmEuOTk4Ljk5OCAwIDAgMS0xLjUwNyAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0KICAgIF07CiAgICB2YXIgQ2FsZW5kYXJNaW51czIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNmg0IiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhck1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTVWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDguNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhck9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuMiA0LjJBMiAyIDAgMCAwIDMgNnYxNGEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAxLjgyLTEuMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTUuNVY2YTIgMiAwIDAgMC0yLTJIOS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTBoLTUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyUGx1czIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djQiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyUGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE5aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTIuNTk4VjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg4LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0KICAgIF07CiAgICB2YXIgQ2FsZW5kYXJSYW5nZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE0aC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE4SDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMThoLjAxIiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhclNlYXJjaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMS43NVY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNy4yNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAyMi0xLjg3NS0xLjg3NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyU3luYyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEwdjRoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSAxNCAxLjUzNS0xLjYwNWE1IDUgMCAwIDEgOCAxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE4LTEuNTM1IDEuNjA1YTUgNSAwIDAgMS04LTEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAyMnYtNGgtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA4LjVWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDQuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyWDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTNWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMiA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTcgNSA1IiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhclggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMTQgNCA0IiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhcnMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUuNzI2IDIxLjAxQTIgMiAwIDAgMSAxNCAyMkg0YTIgMiAwIDAgMS0yLTJWMTBhMiAyIDAgMCAxIDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxM2gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOGgxNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiMyIsIHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQ2FtZXJhT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuNTY0IDE0LjU1OGEzIDMgMCAxIDEtNC4xMjItNC4xMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIwSDRhMiAyIDAgMCAxLTItMlY5YTIgMiAwIDAgMSAyLTJoMS45OTdhMiAyIDAgMCAwIC44MTktLjE3NSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjY5NSA0LjAyNEEyIDIgMCAwIDEgMTAuMDA0IDRoMy45OTNhMiAyIDAgMCAxIDEuNzYgMS4wNWwuNDg2LjlBMiAyIDAgMCAwIDE4LjAwMyA3SDIwYTIgMiAwIDAgMSAyIDJ2Ny4zNDQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIENhbWVyYSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjk5NyA0YTIgMiAwIDAgMSAxLjc2IDEuMDVsLjQ4Ni45QTIgMiAwIDAgMCAxOC4wMDMgN0gyMGEyIDIgMCAwIDEgMiAydjlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWOWEyIDIgMCAwIDEgMi0yaDEuOTk3YTIgMiAwIDAgMCAxLjc1OS0xLjA0OGwuNDg5LS45MDRBMiAyIDAgMCAxIDEwLjAwNCA0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMyIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBDYW5keUNhbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTUuNyAyMWEyIDIgMCAwIDEtMy41LTJsOC42LTE0YTYgNiAwIDAgMSAxMC40IDYgMiAyIDAgMSAxLTMuNDY0LTIgMiAyIDAgMSAwLTMuNDY0LTJaIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy43NSA3IDE1IDIuMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC45IDQuOCAxMyA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuOSA5LjcgMiA0LjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC45IDE0LjcgNyAxOC45IiB9XQogICAgXTsKICAgIHZhciBDYW5keU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwdjcuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS44MDIgNi4xNDVhNSA1IDAgMCAxIDYuMDUzIDYuMDUzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDYuMXYyLjI0MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS41IDE1LjU3MS0uOTY0Ljk2NGE1IDUgMCAwIDEtNy4wNzEgMCA1IDUgMCAwIDEgMC03LjA3bC45NjQtLjk2NSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiA3VjNhMSAxIDAgMCAxIDEuNzA3LS43MDcgMi41IDIuNSAwIDAgMCAyLjE1Mi43MTcgMSAxIDAgMCAxIDEuMTMxIDEuMTMxIDIuNSAyLjUgMCAwIDAgLjcxNyAyLjE1MkExIDEgMCAwIDEgMjEgOGgtNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOCAxN3Y0YTEgMSAwIDAgMS0xLjcwNy43MDcgMi41IDIuNSAwIDAgMC0yLjE1Mi0uNzE3IDEgMSAwIDAgMS0xLjEzMS0xLjEzMSAyLjUgMi41IDAgMCAwLS43MTctMi4xNTJBMSAxIDAgMCAxIDMgMTZoNCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQ2FuZHkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA3djEwLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNi4xVjE3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2IDdWM2ExIDEgMCAwIDEgMS43MDctLjcwNyAyLjUgMi41IDAgMCAwIDIuMTUyLjcxNyAxIDEgMCAwIDEgMS4xMzEgMS4xMzEgMi41IDIuNSAwIDAgMCAuNzE3IDIuMTUyQTEgMSAwIDAgMSAyMSA4aC00IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjUzNiA3LjQ2NWE1IDUgMCAwIDAtNy4wNzIgMGwtMiAyYTUgNSAwIDAgMCAwIDcuMDcgNSA1IDAgMCAwIDcuMDcyIDBsMi0yYTUgNSAwIDAgMCAwLTcuMDciCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOCAxN3Y0YTEgMSAwIDAgMS0xLjcwNy43MDcgMi41IDIuNSAwIDAgMC0yLjE1Mi0uNzE3IDEgMSAwIDAgMS0xLjEzMS0xLjEzMSAyLjUgMi41IDAgMCAwLS43MTctMi4xNTJBMSAxIDAgMCAxIDMgMTZoNCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQ2FubmFiaXNPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMnYtNGMxLjUgMS41IDMuNSAzIDYgMyAwLTEuNS0uNS0zLjUtMi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjk4OCA4LjMyN0MxMy45MDIgNi4wNTQgMTMuMzY1IDMuODIgMTIgMmE5LjMgOS4zIDAgMCAwLTEuNDQ1IDIuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy4zNzUgMTEuNzI1QzE4Ljg4MiAxMC41MyAyMSA3Ljg0MSAyMSA2Yy0yLjMyNCAwLTUuMDggMS4yOTYtNi42NjIgMi42ODQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjAyNCAxNS4zNzhBMTUgMTUgMCAwIDAgMjIgMTVjLS40MjYtMS4yNzktMi42Ny0yLjU1Ny00LjI1LTIuOTA3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYuOTk1IDYuOTkyQzUuNzE0IDYuNCA0LjI5IDYgMyA2YzAgMiAyLjUgNSA0IDYtMS41IDAtNC41IDEuNS01IDMgMy41IDEuNSA2IDEgNiAxLTEuNSAxLjUtMiAzLjUtMiA1IDIuNSAwIDQuNS0xLjUgNi0zIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBDYW5uYWJpcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi00IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMTJjLTEuNSAwLTQuNSAxLjUtNSAzIDMuNSAxLjUgNiAxIDYgMS0xLjUgMS41LTIgMy41LTIgNSAyLjUgMCA0LjUtMS41IDYtMyAxLjUgMS41IDMuNSAzIDYgMyAwLTEuNS0uNS0zLjUtMi01IDAgMCAyLjUuNSA2LTEtLjUtMS41LTMuNS0zLTUtMyAxLjUtMSA0LTQgNC02LTIuNSAwLTUuNSAxLjUtNyAzIDAtMi41LS41LTUtMi03LTEuNSAyLTIgNC41LTIgNy0xLjUtMS41LTQuNS0zLTctMyAwIDIgMi41IDUgNCA2IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBDYXB0aW9uc09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUgNUgxOWEyIDIgMCAwIDEgMiAydjguNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMWgtLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTlINWEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAxIDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVoMi41IiB9XQogICAgXTsKICAgIHZhciBDYXB0aW9ucyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTQiLCB4OiAiMyIsIHk6ICI1Iiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVoNE0xNSAxNWgyTTcgMTFoMk0xMyAxMWg0IiB9XQogICAgXTsKICAgIHZhciBDYXJGcm9udCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDgtMiAyLTEuNS0zLjdBMiAyIDAgMCAwIDE1LjY0NiA1SDguNGEyIDIgMCAwIDAtMS45MDMgMS4yNTdMNSAxMCAzIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiOCIsIHg6ICIzIiwgeTogIjEwIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTh2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxOHYyIiB9XQogICAgXTsKICAgIHZhciBDYXJUYXhpRnJvbnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgOC0yIDItMS41LTMuN0EyIDIgMCAwIDAgMTUuNjQ2IDVIOC40YTIgMiAwIDAgMC0xLjkwMyAxLjI1N0w1IDEwIDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNGguMDEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICI4IiwgeDogIjMiLCB5OiAiMTAiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE4djIiIH1dCiAgICBdOwogICAgdmFyIENhciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5IDE3aDJjLjYgMCAxLS40IDEtMXYtM2MwLS45LS43LTEuNy0xLjUtMS45QzE4LjcgMTAuNiAxNiAxMCAxNiAxMHMtMS4zLTEuNC0yLjItMi4zYy0uNS0uNC0xLjEtLjctMS44LS43SDVjLS42IDAtMS4xLjQtMS40LjlsLTEuNCAyLjlBMy43IDMuNyAwIDAgMCAyIDEydjRjMCAuNi40IDEgMSAxaDIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3IiwgY3k6ICIxNyIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdoNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxNyIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBDYXJhdmFuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTlWOWE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHY4YTIgMiAwIDAgMCAyIDJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloM2ExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE3djFhMSAxIDAgMCAxLTEgMUgxMHYtOWExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXY5IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMTkiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQ2FyZFNpbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQuMTcyIDJhMiAyIDAgMCAxIDEuNDE0LjU4NmwzLjgyOCAzLjgyOEEyIDIgMCAwIDEgMjAgNy44MjhWMjBhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0aDgiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI4IiwgeTogIjEwIiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQ2Fycm90ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi4yNyAyMS43czkuODctMy41IDEyLjczLTYuMzZhNC41IDQuNSAwIDAgMC02LjM2LTYuMzdDNS43NyAxMS44NCAyLjI3IDIxLjcgMi4yNyAyMS43ek04LjY0IDE0bC0yLjA1LTIuMDRNMTUuMzQgMTVsLTIuNDYtMi40NiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA5cy0xLjMzLTItMy41LTJDMTYuODYgNyAxNSA5IDE1IDlzMS4zMyAyIDMuNSAyUzIyIDkgMjIgOXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMnMtMiAxLjMzLTIgMy41UzE1IDkgMTUgOXMyLTEuODQgMi0zLjVDMTcgMy4zMyAxNSAyIDE1IDJ6IiB9XQogICAgXTsKICAgIHZhciBDYXNlTG93ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5djciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNnYxMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3LjUiLCBjeTogIjEyLjUiLCByOiAiMy41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNi41IiwgY3k6ICIxMi41IiwgcjogIjMuNSIgfV0KICAgIF07CiAgICB2YXIgQ2FzZVNlbnNpdGl2ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMTYgNC4wMzktOS42OWEuNS41IDAgMCAxIC45MjMgMEwxMSAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA5djciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zMDQgMTNoNi4zOTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOC41IiwgY3k6ICIxMi41IiwgcjogIjMuNSIgfV0KICAgIF07CiAgICB2YXIgQ2FzZVVwcGVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xNSAxMWg0LjVhMSAxIDAgMCAxIDAgNWgtNGEuNS41IDAgMCAxLS41LS41di05YS41LjUgMCAwIDEgLjUtLjVoM2ExIDEgMCAwIDEgMCA1IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE2IDQuMDM5LTkuNjlhLjUuNSAwIDAgMSAuOTIzIDBMMTEgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zMDQgMTNoNi4zOTIiIH1dCiAgICBdOwogICAgdmFyIENhc3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDhWNmEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMmgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyYTkgOSAwIDAgMSA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNmE1IDUgMCAwIDEgNCA0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIiLCB4MjogIjIuMDEiLCB5MTogIjIwIiwgeTI6ICIyMCIgfV0KICAgIF07CiAgICB2YXIgQ2Fzc2V0dGVUYXBlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4IiwgY3k6ICIxMCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxMCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMjAgLjctMi45QTEuNCAxLjQgMCAwIDEgOC4xIDE2aDcuOGExLjQgMS40IDAgMCAxIDEuNCAxbC43IDMiIH1dCiAgICBdOwogICAgdmFyIENhdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDVjLjY3IDAgMS4zNS4wOSAyIC4yNiAxLjc4LTIgNS4wMy0yLjg0IDYuNDItMi4yNiAxLjQuNTgtLjQyIDctLjQyIDcgLjU3IDEuMDcgMSAyLjI0IDEgMy40NEMyMSAxNy45IDE2Ljk3IDIxIDEyIDIxcy05LTMtOS03LjU2YzAtMS4yNS41LTIuNCAxLTMuNDQgMCAwLTEuODktNi40Mi0uNS03IDEuMzktLjU4IDQuNzIuMjMgNi41IDIuMjNBOS4wNCA5LjA0IDAgMCAxIDEyIDVaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuMjUgMTYuMjVoMS41TDEyIDE3bC0uNzUtLjc1WiIgfV0KICAgIF07CiAgICB2YXIgQ2FzdGxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDVWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMXYtM2EzIDMgMCAwIDAtNiAwdjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggM3Y4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDVINiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMUgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDl2MTBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDN2OCIgfV0KICAgIF07CiAgICB2YXIgQ2N0diA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTYuNzUgMTJoMy42MzJhMSAxIDAgMCAxIC44OTQgMS40NDdsLTIuMDM0IDQuMDY5YTEgMSAwIDAgMS0xLjcwOC4xMzRsLTIuMTI0LTIuOTciIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjEwNiA5LjA1M2ExIDEgMCAwIDEgLjQ0NyAxLjM0MWwtMy4xMDYgNi4yMTFhMSAxIDAgMCAxLTEuMzQyLjQ0N0wzLjYxIDEyLjNhMi45MiAyLjkyIDAgMCAxLTEuMy0zLjkxTDMuNjkgNS42YTIuOTIgMi45MiAwIDAgMSAzLjkyLTEuM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOWgzLjc2YTIgMiAwIDAgMCAxLjgtMS4xTDkgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMXYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDloLjAxIiB9XQogICAgXTsKICAgIHZhciBDaGFydEFyZWEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03IDExLjIwN2EuNS41IDAgMCAxIC4xNDYtLjM1M2wyLTJhLjUuNSAwIDAgMSAuNzA4IDBsMy4yOTIgMy4yOTJhLjUuNSAwIDAgMCAuNzA4IDBsNC4yOTItNC4yOTJhLjUuNSAwIDAgMSAuODU0LjM1M1YxNmExIDEgMCAwIDEtMSAxSDhhMSAxIDAgMCAxLTEtMXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIENoYXJ0QmFyQmlnID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI3IiwgeTogIjEzIiwgd2lkdGg6ICI5IiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjciLCB5OiAiNSIsIHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICI0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBDaGFydEJhckRlY3JlYXNpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDExaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNmgxMiIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRCYXJJbmNyZWFzaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTZoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA2aDMiIH1dCiAgICBdOwogICAgdmFyIENoYXJ0QmFyU3RhY2tlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEzdjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICIxMyIsIHdpZHRoOiAiOSIsIGhlaWdodDogIjQiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI3IiwgeTogIjUiLCB3aWR0aDogIjEyIiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRDYW5kbGVzdGljayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNXY0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjQiLCBoZWlnaHQ6ICI2IiwgeDogIjciLCB5OiAiOSIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM3YyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjQiLCBoZWlnaHQ6ICI4IiwgeDogIjE1IiwgeTogIjUiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTN2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRDb2x1bW5CaWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE1IiwgeTogIjUiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICIxMiIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjciLCB5OiAiOCIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjkiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIENoYXJ0QmFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTFoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA2aDMiIH1dCiAgICBdOwogICAgdmFyIENoYXJ0Q29sdW1uRGVjcmVhc2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE3VjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTd2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxN1Y1IiB9XQogICAgXTsKICAgIHZhciBDaGFydENvbHVtbkluY3JlYXNpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxN1Y5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE3VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxN3YtMyIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRDb2x1bW5TdGFja2VkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTNINyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA5aC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiNSIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjEyIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICI4Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiOSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRDb2x1bW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxN1Y5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE3VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxN3YtMyIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRMaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgOS01IDUtNC00LTMgMyIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRHYW50dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDZoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTFoNyIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnROZXR3b3JrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuMTEgNy42NjQgMS43OCAyLjY3MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4xNjIgMTIuNzg4LTMuMzI0IDEuNDI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDQtNi4wNiAxLjUxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI2IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjE1IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIENoYXJ0Tm9BeGVzQ29sdW1uRGVjcmVhc2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDIxdi02IiB9XQogICAgXTsKICAgIHZhciBDaGFydE5vQXhlc0NvbHVtbkluY3JlYXNpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxdi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxVjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjFWMyIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnROb0F4ZXNDb2x1bW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxdi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxVjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjFWOSIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnROb0F4ZXNHYW50dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNWgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE5aDgiIH1dCiAgICBdOwogICAgdmFyIENoYXJ0Tm9BeGVzQ29tYmluZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNnY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0djciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTB2MTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMy04LjY0NiA4LjY0NmEuNS41IDAgMCAxLS43MDggMEw5LjM1NCA4LjM1NGEuNS41IDAgMCAwLS43MDcgMEwyIDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTh2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0djciIH1dCiAgICBdOwogICAgdmFyIENoYXJ0UGllID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMTJjLjU1MiAwIDEuMDA1LS40NDkuOTUtLjk5OGExMCAxMCAwIDAgMC04Ljk1My04Ljk1MWMtLjU1LS4wNTUtLjk5OC4zOTgtLjk5OC45NXY4YTEgMSAwIDAgMCAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjIxIDE1Ljg5QTEwIDEwIDAgMSAxIDggMi44MyIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRTY2F0dGVyID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjcuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOC41IiwgY3k6ICI1LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEuNSIsIGN5OiAiMTEuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjE2LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTcuNSIsIGN5OiAiMTQuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dCiAgICBdOwogICAgdmFyIENoYXJ0U3BsaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmMuNS0yIDEuNS03IDQtNyAyIDAgMiAzIDQgMyAyLjUgMCA0LjUtNSA1LTciIH1dCiAgICBdOwogICAgdmFyIENoZWNrQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2IDcgMTdsLTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxMC03LjUgNy41TDEzIDE2IiB9XQogICAgXTsKICAgIHZhciBDaGVjayA9IFtbInBhdGgiLCB7IGQ6ICJNMjAgNiA5IDE3bC01LTUiIH1dXTsKICAgIHZhciBDaGVja0xpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA0TDkgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTlMMyAxOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1TDQgMTAiIH1dCiAgICBdOwogICAgdmFyIENoZWZIYXQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAyMWExIDEgMCAwIDAgMS0xdi01LjM1YzAtLjQ1Ny4zMTYtLjg0NC43MjctMS4wNDFhNCA0IDAgMCAwLTIuMTM0LTcuNTg5IDUgNSAwIDAgMC05LjE4NiAwIDQgNCAwIDAgMC0yLjEzNCA3LjU4OGMuNDExLjE5OC43MjcuNTg1LjcyNyAxLjA0MVYyMGExIDEgMCAwIDAgMSAxWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE3aDEyIiB9XQogICAgXTsKICAgIHZhciBDaGVycnkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE3YTUgNSAwIDAgMCAxMCAwYzAtMi43Ni0yLjUtNS01LTMtMi41LTItNSAuMjQtNSAzWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN2E1IDUgMCAwIDAgMTAgMGMwLTIuNzYtMi41LTUtNS0zLTIuNS0yLTUgLjI0LTUgM1oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNGMzLjIyLTIuOTEgNC4yOS04Ljc1IDUtMTIgMS42NiAyLjM4IDQuOTQgOSA1IDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDljLTQuMjkgMC03LjE0LTIuMzMtMTAtNyA1LjcxIDAgMTAgNC42NyAxMCA3WiIgfV0KICAgIF07CiAgICB2YXIgQ2hlc3NCaXNob3AgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIwYTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFINmExIDEgMCAwIDEtMS0xeiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSAxOGMxLjUtLjYxNSAzLTIuNDYxIDMtNC45MjNDMTggOC43NjkgMTQuNSA0LjQ2MiAxMiAyIDkuNSA0LjQ2MiA2IDguNzcgNiAxMy4wNzcgNiAxNS41MzkgNy41IDE3LjM4NSA5IDE4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDctMi41IDIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDJoNiIgfV0KICAgIF07CiAgICB2YXIgQ2hlc3NLaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyMGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDVhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNi43IDE4LTEtMUM0LjM1IDE1LjY4MiAzIDE0LjA5IDMgMTJhNSA1IDAgMCAxIDQuOTUtNWMxLjU4NCAwIDIuNy40NTUgNC4wNSAxLjgxOEMxMy4zNSA3LjQ1NSAxNC40NjYgNyAxNi4wNSA3QTUgNSAwIDAgMSAyMSAxMmMwIDIuMDgyLTEuMzU5IDMuNjczLTIuNyA1bC0xIDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2Ni44MTgiIH1dCiAgICBdOwogICAgdmFyIENoZXNzS25pZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMGEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDZhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYuNSAxOGMxLTIgMi41LTUgMi41LTlhNyA3IDAgMCAwLTctN0g2LjYzNWExIDEgMCAwIDAtLjc2OCAxLjY0TDcgNWwtMi4zMiA1LjgwMmEyIDIgMCAwIDAgLjk1IDIuNTI2bDIuODcgMS40NTYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNSAxLjQyNS0xLjQyNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyA4IDEuNTMtMS41MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjcxMyAxMi4xODUgNyAxOCIgfV0KICAgIF07CiAgICB2YXIgQ2hlc3NQYXduID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMGEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDZhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSAxMCAxLjUgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEwaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTggMS41LTgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNiIsIHI6ICI0IiB9XQogICAgXTsKICAgIHZhciBDaGVzc1F1ZWVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyMGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDVhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuNDc0IDUuOTQzIDEuNTY3IDUuMzRhMSAxIDAgMCAwIDEuNzUuMzI4bDIuNjE2LTMuNDAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDktMyA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuNTk0IDguMjA5IDIuNjE1IDMuNDAzYTEgMSAwIDAgMCAxLjc1LS4zMjlsMS41NjctNS4zNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE4IDQgOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI0IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiNyIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiNyIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBDaGVzc1Jvb2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIwYTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFINmExIDEgMCAwIDEtMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE4LTEtOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDJ2NWEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNGgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDE4IDEtOSIgfV0KICAgIF07CiAgICB2YXIgQ2hldnJvbkRvd24gPSBbWyJwYXRoIiwgeyBkOiAibTYgOSA2IDYgNi02IiB9XV07CiAgICB2YXIgQ2hldnJvbkZpcnN0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTgtNi02IDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDZ2MTIiIH1dCiAgICBdOwogICAgdmFyIENoZXZyb25MYXN0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxOCA2LTYtNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDZ2MTIiIH1dCiAgICBdOwogICAgdmFyIENoZXZyb25MZWZ0ID0gW1sicGF0aCIsIHsgZDogIm0xNSAxOC02LTYgNi02IiB9XV07CiAgICB2YXIgQ2hldnJvblJpZ2h0ID0gW1sicGF0aCIsIHsgZDogIm05IDE4IDYtNi02LTYiIH1dXTsKICAgIHZhciBDaGV2cm9uc0Rvd25VcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMjAgNS01IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDQgNSA1IDUtNSIgfV0KICAgIF07CiAgICB2YXIgQ2hldnJvblVwID0gW1sicGF0aCIsIHsgZDogIm0xOCAxNS02LTYtNiA2IiB9XV07CiAgICB2YXIgQ2hldnJvbnNEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNyA2IDUgNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxMyA1IDUgNS01IiB9XQogICAgXTsKICAgIHZhciBDaGV2cm9uc0xlZnRSaWdodEVsbGlwc2lzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyA3IDUgNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyA3LTUgNSA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmguMDEiIH1dCiAgICBdOwogICAgdmFyIENoZXZyb25zTGVmdFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA3LTUgNSA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNyA1IDUtNSA1IiB9XQogICAgXTsKICAgIHZhciBDaGV2cm9uc0xlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSAxNy01LTUgNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDE3LTUtNSA1LTUiIH1dCiAgICBdOwogICAgdmFyIENoZXZyb25zUmlnaHRMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgMTctNS01IDUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDE3IDUtNS01LTUiIH1dCiAgICBdOwogICAgdmFyIENoZXZyb25zUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDE3IDUtNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgMTcgNS01LTUtNSIgfV0KICAgIF07CiAgICB2YXIgQ2hldnJvbnNVcERvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDE1IDUgNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyA5IDUtNSA1IDUiIH1dCiAgICBdOwogICAgdmFyIENoZXZyb25zVXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxMS01LTUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE4LTUtNS01IDUiIH1dCiAgICBdOwogICAgdmFyIENocm9taXVtID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuODggMjEuOTQgMTUuNDYgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEuMTcgOEgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjk1IDYuMDYgOC41NCAxNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XQogICAgXTsKICAgIHZhciBDaHVyY2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxdi0zYTIgMiAwIDAgMC00IDB2MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xOCA5IDMuNTIgMi4xNDdhMSAxIDAgMCAxIC40OC44NTRWMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJ2LTYuOTk5YTEgMSAwIDAgMSAuNDgtLjg1NEw2IDkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMVY3YTEgMSAwIDAgMSAuMzc2LS43ODJsNS0zLjk5OWExIDEgMCAwIDEgMS4yNDkuMDAxbDUgNEExIDEgMCAwIDEgMTggN3YxNCIgfV0KICAgIF07CiAgICB2YXIgQ2lnYXJldHRlT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJIM2ExIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAwIDEgMWgxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA4YzAtMi41LTItMi41LTItNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0uNS44NjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgOGMwLTIuNS0yLTIuNS0yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMnY0IiB9XQogICAgXTsKICAgIHZhciBDaWdhcmV0dGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMkgzYTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxaDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDhjMC0yLjUtMi0yLjUtMi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE2YTEgMSAwIDAgMCAxLTF2LTJhMSAxIDAgMCAwLTEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA4YzAtMi41LTItMi41LTItNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEydjQiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZUFsZXJ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI4IiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIuMDEiLCB5MTogIjE2IiwgeTI6ICIxNiIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQXJyb3dEb3duID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTIgNCA0IDQtNCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQXJyb3dMZWZ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgOC00IDQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEySDgiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZUFycm93T3V0RG93bkxlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyYTEwIDEwIDAgMSAxIDEwIDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMjIgMTAtMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMkgydi02IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVBcnJvd091dERvd25SaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIyYTEwIDEwIDAgMSAxIDEwLTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIyIDEyIDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE2djZoLTYiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZUFycm93T3V0VXBMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4VjJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMTAgMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMkExMCAxMCAwIDEgMSAyIDEyIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVBcnJvd091dFVwUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMkExMCAxMCAwIDEgMSAxMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIgMTIgMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMmg2djYiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZUFycm93UmlnaHQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNiA0LTQtNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQXJyb3dVcCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDEyLTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZWOCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQ2hlY2tCaWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS44MDEgMTBBMTAgMTAgMCAxIDEgMTcgMy4zMzUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMSAzIDNMMjIgNCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQ2hlY2sgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEyIDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZUNoZXZyb25MZWZ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTYtNC00IDQtNCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQ2hldnJvbkRvd24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMC00IDQtNC00IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVDaGV2cm9uUmlnaHQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCA4IDQgNC00IDQiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZUNoZXZyb25VcCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTQgNC00IDQgNCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlRGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMSAyLjE4MmExMCAxMCAwIDAgMSAzLjggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy45IDIxLjgxOGExMCAxMCAwIDAgMS0zLjggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy42MDkgMy43MjFhMTAgMTAgMCAwIDEgMi42OSAyLjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi4xODIgMTMuOWExMCAxMCAwIDAgMSAwLTMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4yNzkgMTcuNjA5YTEwIDEwIDAgMCAxLTIuNyAyLjY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjgxOCAxMC4xYTEwIDEwIDAgMCAxIDAgMy44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuNzIxIDYuMzkxYTEwIDEwIDAgMCAxIDIuNy0yLjY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzkxIDIwLjI3OWExMCAxMCAwIDAgMS0yLjY5LTIuNyIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlRGl2aWRlID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiMTYiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjE2IiwgeTI6ICIxNiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjgiLCB5MjogIjgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZURvbGxhclNpZ24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4aC02YTIgMiAwIDEgMCAwIDRoNGEyIDIgMCAxIDEgMCA0SDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThWNiIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlRG90RGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMSAyLjE4YTkuOTMgOS45MyAwIDAgMSAzLjggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy42IDMuNzFhOS45NSA5Ljk1IDAgMCAxIDIuNjkgMi43IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjgyIDEwLjFhOS45MyA5LjkzIDAgMCAxIDAgMy44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjI5IDE3LjZhOS45NSA5Ljk1IDAgMCAxLTIuNyAyLjY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjkgMjEuODJhOS45NCA5Ljk0IDAgMCAxLTMuOCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNCAyMC4yOWE5Ljk1IDkuOTUgMCAwIDEtMi42OS0yLjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi4xOCAxMy45YTkuOTMgOS45MyAwIDAgMSAwLTMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjcxIDYuNGE5Ljk1IDkuOTUgMCAwIDEgMi43LTIuNjkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlRG90ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlRWxsaXBzaXMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoLjAxIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVFcXVhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNGgxMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlRmFkaW5nQXJyb3dVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJhMTAgMTAgMCAwIDEgNy4zOCAxNi43NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMi00LTQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2VjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi41IDguODc1YTEwIDEwIDAgMCAwLS41IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi44MyAxNmExMCAxMCAwIDAgMCAyLjQzIDMuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjYzNiA1LjIzNWExMCAxMCAwIDAgMSAuODkxLS44NTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC42NDQgMjEuNDJhMTAgMTAgMCAwIDAgNy42MzEtLjM4IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVGYWRpbmdQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmExMCAxMCAwIDAgMSA3LjM4IDE2Ljc1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuNSA4Ljg3NWExMCAxMCAwIDAgMC0uNSAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuODMgMTZhMTAgMTAgMCAwIDAgMi40MyAzLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC42MzYgNS4yMzVhMTAgMTAgMCAwIDEgLjg5MS0uODU3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNjQ0IDIxLjQyYTEwIDEwIDAgMCAwIDcuNjMxLS4zOCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlR2F1Z2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS42IDIuN2ExMCAxMCAwIDEgMCA1LjcgNS43IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNCAxMC42IDE5IDUiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZU1pbnVzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC4zNSAyLjY5QTEwIDEwIDAgMCAxIDIxLjMgMTUuNjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuMDggMTkuMDhBMTAgMTAgMCAxIDEgNC45MiA0LjkyIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVQYXJraW5nT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIuNjU2IDdIMTNhMyAzIDAgMCAxIDIuOTg0IDMuMzA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEzSDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuMDcxIDE5LjA3MUExIDEgMCAwIDEgNC45MyA0LjkzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjM1NyAyLjY4N2ExMCAxMCAwIDAgMSAxMi45NTYgMTIuOTU2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdWOSIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlUGFya2luZyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdWN2g0YTMgMyAwIDAgMSAwIDZIOSIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlUGF1c2UgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMCIsIHgyOiAiMTAiLCB5MTogIjE1IiwgeTI6ICI5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE0IiwgeDI6ICIxNCIsIHkxOiAiMTUiLCB5MjogIjkiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZVBlcmNlbnQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1aC4wMSIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlUGlsZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE5IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjEyIiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiMTkiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjQiLCBjeTogIjE5IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4IiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVQbGF5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSA5LjAwM2ExIDEgMCAwIDEgMS41MTctLjg1OWw0Ljk5NyAyLjk5N2ExIDEgMCAwIDEgMCAxLjcxOGwtNC45OTcgMi45OTdBMSAxIDAgMCAxIDkgMTQuOTk2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlUGx1cyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZVBvd2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuOTk4IDkuMDAzYTUgNSAwIDEgMCA4LS4wMDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZVBvdW5kU3RlcmxpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNlY5LjVhMSAxIDAgMCAxIDUgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmg3IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVRdWVzdGlvbk1hcmsgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN2guMDEiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZVNsYXNoMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIgMiAyMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlU2xhc2ggPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICIxNSIsIHkxOiAiMTUiLCB5MjogIjkiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZVNtYWxsID0gW1siY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI2IiB9XV07CiAgICB2YXIgQ2lyY2xlU3RhciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjA1MSA3LjYxNmExIDEgMCAwIDEgMS45MDkuMDI0bC43MzcgMS40NTJhMSAxIDAgMCAwIC43MzcuNTM1bDEuNjM0LjI1NmExIDEgMCAwIDEgLjU4OCAxLjgwNmwtMS4xNzIgMS4xNjhhMSAxIDAgMCAwLS4yODIuODY2bC4yNTkgMS42MTNhMSAxIDAgMCAxLTEuNTQxIDEuMTM0bC0xLjQ2NS0uNzVhMSAxIDAgMCAwLS45MTIgMGwtMS40NjUuNzVhMSAxIDAgMCAxLTEuNTM5LTEuMTMzbC4yNTgtMS42MTNhMSAxIDAgMCAwLS4yODItLjg2N2wtMS4xNTYtMS4xNTJhMSAxIDAgMCAxIC41NzItMS44MjJsMS42MzMtLjI1NmExIDEgMCAwIDAgLjczNy0uNTM1eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlU3RvcCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiOSIsIHk6ICI5Iiwgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlVXNlclJvdW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjBhNiA2IDAgMCAwLTEyIDAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlVXNlciA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMC42NjJWMTlhMiAyIDAgMCAxIDItMmg2YTIgMiAwIDAgMSAyIDJ2MS42NjIiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZVggPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDkgNiA2IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGUgPSBbWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XV07CiAgICB2YXIgQ2lyY3VpdEJvYXJkID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgOWg0YTIgMiAwIDAgMCAyLTJWMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjkiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxdi00YTIgMiAwIDAgMSAyLTJoNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICIxNSIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBDaXRydXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTIxLjY2IDE3LjY3YTEuMDggMS4wOCAwIDAgMS0uMDQgMS42QTEyIDEyIDAgMCAxIDQuNzMgMi4zOGExLjEgMS4xIDAgMCAxIDEuNjEtLjA0eiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuNjUgMTUuNjZBOCA4IDAgMCAxIDguMzUgNC4zNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxMC01LjUgNS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE3Ljg1VjEwSDYuMTUiIH1dCiAgICBdOwogICAgdmFyIENsYXBwZXJib2FyZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjIgNiAzIDExbC0uOS0yLjRjLS4zLTEuMS4zLTIuMiAxLjMtMi41bDEzLjUtNGMxLjEtLjMgMi4yLjMgMi41IDEuM1oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi4yIDUuMyAzLjEgMy45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyLjQgMy40IDMuMSA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTFoMTh2OGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMloiIH1dCiAgICBdOwogICAgdmFyIENsaXBib2FyZENsb2NrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2Mi4ybDEuNiAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydi44MzIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA0SDZhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMTYiLCByOiAiNiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiMiIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIENsaXBib2FyZENoZWNrID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCB4OiAiOCIsIHk6ICIyIiwgcng6ICIxIiwgcnk6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTQgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgQ2xpcGJvYXJkQ29weSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDRINmEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE0SDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDEwLTQgNCA0IDQiIH1dCiAgICBdOwogICAgdmFyIENsaXBib2FyZExpc3QgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNCIsIHg6ICI4IiwgeTogIjIiLCByeDogIjEiLCByeTogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTFoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTZoLjAxIiB9XQogICAgXTsKICAgIHZhciBDbGlwYm9hcmRNaW51cyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE0aDYiIH1dCiAgICBdOwogICAgdmFyIENsaXBib2FyZFBhc3RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTRoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MS4zNDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTggNC00LTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDRINmEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDEuNzkzLTEuMTEzIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiOCIsIHk6ICIyIiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQ2xpcGJvYXJkUGVuTGluZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDRINmEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNGgyYTIgMiAwIDAgMSAxLjczIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGgxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjM3OCAxMi42MjZhMSAxIDAgMCAwLTMuMDA0LTMuMDA0bC00LjAxIDQuMDEyYTIgMiAwIDAgMC0uNTA2Ljg1NGwtLjgzNyAyLjg3YS41LjUgMCAwIDAgLjYyLjYybDIuODctLjgzN2EyIDIgMCAwIDAgLjg1NC0uNTA2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQ2xpcGJvYXJkUGVuID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCB4OiAiOCIsIHk6ICIyIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJoLTUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEzLjVWNmEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuMzc4IDE1LjYyNmExIDEgMCAxIDAtMy4wMDQtMy4wMDRsLTUuMDEgNS4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBDbGlwYm9hcmRQbHVzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCB4OiAiOCIsIHk6ICIyIiwgcng6ICIxIiwgcnk6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTRoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3YtNiIgfV0KICAgIF07CiAgICB2YXIgQ2xpcGJvYXJkVHlwZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEydi0xaDZ2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxN2gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDExdjYiIH1dCiAgICBdOwogICAgdmFyIENsaXBib2FyZFggPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNCIsIHg6ICI4IiwgeTogIjIiLCByeDogIjEiLCByeTogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTEtNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEgNiA2IiB9XQogICAgXTsKICAgIHZhciBDbGlwYm9hcmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNCIsIHg6ICI4IiwgeTogIjIiLCByeDogIjEiLCByeTogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDIiIH1dCiAgICBdOwogICAgdmFyIENsb2NrMSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NmwyLTQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIENsb2NrMTAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsLTQtMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2sxMSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NmwtMi00IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDbG9jazEyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDbG9jazIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsNC0yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDbG9jazQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsNCAyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDbG9jazMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZoNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2s1ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDIgNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2s2ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnYxMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2s3ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bC0yIDQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIENsb2NrOCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NmwtNCAyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDbG9jazkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZIOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2tBcnJvd0Rvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsMiAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjMzNyAyMS45OTRhMTAgMTAgMCAxIDEgOS41ODgtOC43NjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTggNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNHY4IiB9XQogICAgXTsKICAgIHZhciBDbG9ja0FsZXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDQgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMnY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIxaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS4yNSA4LjJBMTAgMTAgMCAxIDAgMTYgMjEuMTYiIH1dCiAgICBdOwogICAgdmFyIENsb2NrQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsNCAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyYTEwIDEwIDAgMSAwLTExIDkuOTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTYtNS41IDUuNUwxNCAxOSIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2tBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDEuNTYuNzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuMjI3IDIxLjkyNWExMCAxMCAwIDEgMSA4Ljc2Ny05LjU4OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIydi04IiB9XQogICAgXTsKICAgIHZhciBDbG9ja0ZhZGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJhMTAgMTAgMCAwIDEgNy4zOCAxNi43NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsNCAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuNSA4Ljg3NWExMCAxMCAwIDAgMC0uNSAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuODMgMTZhMTAgMTAgMCAwIDAgMi40MyAzLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC42MzYgNS4yMzVhMTAgMTAgMCAwIDEgLjg5MS0uODU3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNjQ0IDIxLjQyYTEwIDEwIDAgMCAwIDcuNjMxLS4zOCIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2tQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDMuNjQ0IDEuODIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE5aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS45MiAxMy4yNjdhMTAgMTAgMCAxIDAtOC42NTMgOC42NTMiIH1dCiAgICBdOwogICAgdmFyIENsb2NrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDQgMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2xvc2VkQ2FwdGlvbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDkuMTdhMyAzIDAgMSAwIDAgNS42NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA5LjE3YTMgMyAwIDEgMCAwIDUuNjYiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjUiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIENsb3VkQWxlcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxOGguNWExIDEgMCAwIDAgMC05aC0xLjc5QTcgNyAwIDEgMCA3IDE3LjcwOCIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRCYWNrdXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNS4yNTFBNC41IDQuNSAwIDAgMCAxNy41IDhoLTEuNzlBNyA3IDAgMSAwIDMgMTMuNjA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTF2NGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTlhNSA1IDAgMCAwIDktMyA0LjUgNC41IDAgMCAwLTQuNS00LjUgNC44MiA0LjgyIDAgMCAwLTMuNDEgMS40MUw3IDE1IiB9XQogICAgXTsKICAgIHZhciBDbG91ZENoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTUtNS41IDUuNUw5IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTcuNzQzQTcgNyAwIDEgMSAxNS43MSAxMGgxLjc5YTQuNSA0LjUgMCAwIDEgMS41IDguNzQyIiB9XQogICAgXTsKICAgIHZhciBDbG91ZENvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwLjg1MiAxOS43NzItLjM4My45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuMTQ4IDE0LjIyOC4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy4xNDggMTkuNzcyYTMgMyAwIDEgMC0yLjI5Ni01LjU0NGwtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjUzIDIwLjY5Ni0uMzgyLS45MjRhMyAzIDAgMSAxLTIuMjk2LTUuNTQ0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0Ljc3MiAxNS44NTIuOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNzcyIDE4LjE0OC45MjMuMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuMiAxNS4xYTcgNyAwIDEgMSA5LjkzLTkuODU4QTcgNyAwIDAgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjUgOC4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuMjI4IDE1Ljg1Mi0uOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4yMjggMTguMTQ4LS45MjMuMzgzIiB9XQogICAgXTsKICAgIHZhciBDbG91ZERvd25sb2FkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTN2OGwtNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDIxIDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjM5MyAxNS4yNjlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNDM2IDguMjg0IiB9XQogICAgXTsKICAgIHZhciBDbG91ZERyaXp6bGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxdjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZ2MSIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRGb2cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE3SDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjFIOSIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRIYWlsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNC44OTlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjI0MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMmguMDEiIH1dCiAgICBdOwogICAgdmFyIENsb3VkTGlnaHRuaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNi4zMjZBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIC41IDguOTczIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzIDEyLTMgNWg0bC0zIDUiIH1dCiAgICBdOwogICAgdmFyIENsb3VkTW9vblJhaW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyMHYyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjM3NiAxNC41MTJhNiA2IDAgMCAwIDMuNDYxLTQuMTI3Yy4xNDgtLjYyNS0uNjU5LS45Ny0xLjI0OC0uNzE0YTQgNCAwIDAgMS01LjI1OS01LjI2Yy4yNTUtLjU4OS0uMDktMS4zOTUtLjcxNi0xLjI0OGE2IDYgMCAwIDAtNC41OTQgNS4zNiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIwYTUgNSAwIDEgMSA4LjktNEgxM2EzIDMgMCAwIDEgMiA1LjI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTl2MiIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRNb29uID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTZhMyAzIDAgMCAxIDAgNkg3YTUgNSAwIDEgMSA0LjktNnoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguMzc2IDE0LjUxMmE2IDYgMCAwIDAgMy40NjEtNC4xMjdjLjE0OC0uNjI1LS42NTktLjk3LTEuMjQ4LS43MTRhNCA0IDAgMCAxLTUuMjU5LTUuMjZjLjI1NS0uNTg5LS4wOS0xLjM5NS0uNzE2LTEuMjQ4YTYgNiAwIDAgMC00LjU5NCA1LjM2IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBDbG91ZE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjk0IDUuMjc0QTcgNyAwIDAgMSAxNS43MSAxMGgxLjc5YTQuNSA0LjUgMCAwIDEgNC4yMjIgNi4wNTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguNzk2IDE4LjgxQTQuNSA0LjUgMCAwIDEgMTcuNSAxOUg5QTcgNyAwIDAgMSA1Ljc5IDUuNzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICAgIHZhciBDbG91ZFJhaW5XaW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNC44OTlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjI0MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjIgMjIgMy03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTMtMyA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDEzLTMgNyIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRSYWluID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNC44OTlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjI0MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNHY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNnY2IiB9XQogICAgXTsKICAgIHZhciBDbG91ZFNub3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE5aC4wMSIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRTdW5SYWluID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQuOTMgNC45MyAxLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4wNyA0LjkzLTEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS45NDcgMTIuNjVhNCA0IDAgMCAwLTUuOTI1LTQuMTI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjBhNSA1IDAgMSAxIDguOS00SDEzYTMgMyAwIDAgMSAyIDUuMjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE5djIiIH1dCiAgICBdOwogICAgdmFyIENsb3VkU3VuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQuOTMgNC45MyAxLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4wNyA0LjkzLTEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS45NDcgMTIuNjVhNCA0IDAgMCAwLTUuOTI1LTQuMTI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIySDdhNSA1IDAgMSAxIDQuOS02SDEzYTMgMyAwIDAgMSAwIDZaIiB9XQogICAgXTsKICAgIHZhciBDbG91ZFN5bmMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxOC0xLjUzNSAxLjYwNWE1IDUgMCAwIDEtOC0xLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjJ2LTRoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuOTk2IDE1LjI1MUE0LjUgNC41IDAgMCAwIDE3LjQ5NSA4aC0xLjc5YTcgNyAwIDEgMC0xMi43MDkgNS42MDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMHY0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxNCAxLjUzNS0xLjYwNWE1IDUgMCAwIDEgOCAxLjUiIH1dCiAgICBdOwogICAgdmFyIENsb3VkVXBsb2FkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTcgNC00IDQgNCIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWQgPSBbWyJwYXRoIiwgeyBkOiAiTTE3LjUgMTlIOWE3IDcgMCAxIDEgNi43MS05aDEuNzlhNC41IDQuNSAwIDEgMSAwIDlaIiB9XV07CiAgICB2YXIgQ2xvdWR5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNSAxMmExIDEgMCAxIDEgMCA5SDkuMDA2YTcgNyAwIDEgMSA2LjcwMi05eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS44MzIgOUEzIDMgMCAwIDAgMTkgN2gtMi4yMDdhNS41IDUuNSAwIDAgMC0xMC43Mi42MSIgfV0KICAgIF07CiAgICB2YXIgQ2x1YiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTcuMjggOS4wNWE1LjUgNS41IDAgMSAwLTEwLjU2IDBBNS41IDUuNSAwIDEgMCAxMiAxNy42NmE1LjUgNS41IDAgMSAwIDUuMjgtOC42WiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTcuNjZMMTIgMjIiIH1dCiAgICBdOwogICAgdmFyIENsb3ZlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjE3IDcuODMgMiAyMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00LjAyIDEyYTIuODI3IDIuODI3IDAgMSAxIDMuODEtNC4xN0EyLjgyNyAyLjgyNyAwIDEgMSAxMiA0LjAyYTIuODI3IDIuODI3IDAgMSAxIDQuMTcgMy44MUEyLjgyNyAyLjgyNyAwIDEgMSAxOS45OCAxMmEyLjgyNyAyLjgyNyAwIDEgMS0zLjgxIDQuMTdBMi44MjcgMi44MjcgMCAxIDEgMTIgMTkuOThhMi44MjcgMi44MjcgMCAxIDEtNC4xNy0zLjgxQTEgMSAwIDEgMSA0IDEyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuODMgNy44MyA4LjM0IDguMzQiIH1dCiAgICBdOwogICAgdmFyIENvZGVYbWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNiA0LTQtNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgOC00IDQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgNC01IDE2IiB9XQogICAgXTsKICAgIHZhciBDb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTggNi02LTYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDYtNiA2IDYgNiIgfV0KICAgIF07CiAgICB2YXIgQ29kZXBlbiA9IFsKICAgICAgWyJwb2x5Z29uIiwgeyBwb2ludHM6ICIxMiAyIDIyIDguNSAyMiAxNS41IDEyIDIyIDIgMTUuNSAyIDguNSAxMiAyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMjIiLCB5MjogIjE1LjUiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIyMiA4LjUgMTIgMTUuNSAyIDguNSIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjIgMTUuNSAxMiA4LjUgMjIgMTUuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIiLCB5MjogIjguNSIgfV0KICAgIF07CiAgICB2YXIgQ29kZXNhbmRib3ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICI3LjUgNC4yMSAxMiA2LjgxIDE2LjUgNC4yMSIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjcuNSAxOS43OSA3LjUgMTQuNiAzIDEyIiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMjEgMTIgMTYuNSAxNC42IDE2LjUgMTkuNzkiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIzLjI3IDYuOTYgMTIgMTIuMDEgMjAuNzMgNi45NiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIyLjA4IiwgeTI6ICIxMiIgfV0KICAgIF07CiAgICB2YXIgQ29mZmVlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2MiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiA4YTEgMSAwIDAgMSAxIDF2OGE0IDQgMCAwIDEtNCA0SDdhNCA0IDAgMCAxLTQtNFY5YTEgMSAwIDAgMSAxLTFoMTRhNCA0IDAgMSAxIDAgOGgtMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDJ2MiIgfV0KICAgIF07CiAgICB2YXIgQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTAuMjcgNyAzLjM0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDEzLjczLTQgNi45MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMC42Ni0xLTEuNzMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMy4zNC0xIDEuNzMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjY2IDE3LTEuNzMtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC42NiA3LTEuNzMgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zLjM0IDE3IDEuNzMtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zLjM0IDcgMS43MyAxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiOCIgfV0KICAgIF07CiAgICB2YXIgQ29pbnMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjgiLCByOiAiNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC4wOSAxMC4zN0E2IDYgMCAxIDEgMTAuMzQgMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA2aDF2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi43MSAxMy44OC43LjcxLTIuODIgMi44MiIgfV0KICAgIF07CiAgICB2YXIgQ29sdW1uczIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzdjE4IiB9XQogICAgXTsKICAgIHZhciBDb2x1bW5zM0NvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4zIDE5LjYgMS0uNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjcuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS4yIDE2LjktLjktLjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuNiAyMS43LjMtLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuOCAxNS4zLS40LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMSAxNS4yLjMtLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuNiAyMS43LS40LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNyAxNi44IDEtLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEuNyAxOS40LS45LS4zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBDb2x1bW5zNCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNSAzdjE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuNSAzdjE4IiB9XQogICAgXTsKICAgIHZhciBDb2x1bW5zMyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjE4IiB9XQogICAgXTsKICAgIHZhciBDb21iaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM2ExIDEgMCAwIDEgMSAxdjVhMSAxIDAgMCAxLTEgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzYTEgMSAwIDAgMSAxIDF2NWExIDEgMCAwIDEtMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTUgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMjEgMy0zSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE0IiwgeTogIjE0Iiwgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMyIsIHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIENvbW1hbmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA2djEyYTMgMyAwIDEgMCAzLTNINmEzIDMgMCAxIDAgMyAzVjZhMyAzIDAgMSAwLTMgM2gxMmEzIDMgMCAxIDAtMy0zIiB9XQogICAgXTsKICAgIHZhciBDb21wYXNzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTYuMjQgNy43Ni0xLjgwNCA1LjQxMWEyIDIgMCAwIDEtMS4yNjUgMS4yNjVMNy43NiAxNi4yNGwxLjgwNC01LjQxMWEyIDIgMCAwIDEgMS4yNjUtMS4yNjV6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDb21wb25lbnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS41MzYgMTEuMjkzYTEgMSAwIDAgMCAwIDEuNDE0bDIuMzc2IDIuMzc3YTEgMSAwIDAgMCAxLjQxNCAwbDIuMzc3LTIuMzc3YTEgMSAwIDAgMCAwLTEuNDE0bC0yLjM3Ny0yLjM3N2ExIDEgMCAwIDAtMS40MTQgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi4yOTcgMTEuMjkzYTEgMSAwIDAgMCAwIDEuNDE0bDIuMzc3IDIuMzc3YTEgMSAwIDAgMCAxLjQxNCAwbDIuMzc3LTIuMzc3YTEgMSAwIDAgMCAwLTEuNDE0TDYuMDg4IDguOTE2YTEgMSAwIDAgMC0xLjQxNCAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjkxNiAxNy45MTJhMSAxIDAgMCAwIDAgMS40MTVsMi4zNzcgMi4zNzZhMSAxIDAgMCAwIDEuNDE0IDBsMi4zNzctMi4zNzZhMSAxIDAgMCAwIDAtMS40MTVsLTIuMzc3LTIuMzc2YTEgMSAwIDAgMC0xLjQxNCAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjkxNiA0LjY3NGExIDEgMCAwIDAgMCAxLjQxNGwyLjM3NyAyLjM3NmExIDEgMCAwIDAgMS40MTQgMGwyLjM3Ny0yLjM3NmExIDEgMCAwIDAgMC0xLjQxNGwtMi4zNzctMi4zNzdhMSAxIDAgMCAwLTEuNDE0IDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBDb21wdXRlciA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiOCIsIHg6ICI1IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI4IiwgeDogIjIiLCB5OiAiMTQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4aDYiIH1dCiAgICBdOwogICAgdmFyIENvbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC45IDE4LjU1LTgtMTUuOThhMSAxIDAgMCAwLTEuOCAwbC04IDE1Ljk4IiB9XSwKICAgICAgWyJlbGxpcHNlIiwgeyBjeDogIjEyIiwgY3k6ICIxOSIsIHJ4OiAiOSIsIHJ5OiAiMyIgfV0KICAgIF07CiAgICB2YXIgQ29uY2llcmdlQmVsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjBhMSAxIDAgMCAxLTEtMXYtMWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNmE4IDggMCAxIDAtMTYgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA0djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNGg0IiB9XQogICAgXTsKICAgIHZhciBDb25zdHJ1Y3Rpb24gPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNiIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI4Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE0djciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNHY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDN2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDN2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNCAyLjMgNi4zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDYgNy43IDcuNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDYgOCA4IiB9XQogICAgXTsKICAgIHZhciBDb250YWN0Um91bmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOTE1IDIyYTYgNiAwIDAgMC0xMiAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjQiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIENvbnRhY3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMnYtMmEyIDIgMCAwIDEgMi0yaDZhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcjogIjMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjQiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIENvbnRhaW5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDcuN2MwLS42LS40LTEuMi0uOC0xLjVsLTYuMy0zLjlhMS43MiAxLjcyIDAgMCAwLTEuNyAwbC0xMC4zIDZjLS41LjItLjkuOC0uOSAxLjR2Ni42YzAgLjUuNCAxLjIuOCAxLjVsNi4zIDMuOWExLjcyIDEuNzIgMCAwIDAgMS43IDBsMTAuMy02Yy41LS4zLjktMSAuOS0xLjVaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIxLjlWMTRMMi4xIDkuMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNCAxMS45LTYuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOS44di04LjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTcuNVY5LjQiIH1dCiAgICBdOwogICAgdmFyIENvbnRyYXN0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThhNiA2IDAgMCAwIDAtMTJ2MTJ6IiB9XQogICAgXTsKICAgIHZhciBDb29raWUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyYTEwIDEwIDAgMSAwIDEwIDEwIDQgNCAwIDAgMS01LTUgNCA0IDAgMCAxLTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjUgOC41di4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNS41di4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTd2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTR2LjAxIiB9XQogICAgXTsKICAgIHZhciBDb29raW5nUG90ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMnY4YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0ydi04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQgOCAxNi00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguODYgNi43OC0uNDUtMS44MWEyIDIgMCAwIDEgMS40NS0yLjQzbDEuOTQtLjQ4YTIgMiAwIDAgMSAyLjQzIDEuNDZsLjQ1IDEuOCIgfV0KICAgIF07CiAgICB2YXIgQ29weUNoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTUgMiAyIDQtNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjE0IiwgeDogIjgiLCB5OiAiOCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIiIH1dCiAgICBdOwogICAgdmFyIENvcHlTbGFzaCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxOCIsIHkxOiAiMTgiLCB5MjogIjEyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiMTQiLCB4OiAiOCIsIHk6ICI4Iiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTZjLTEuMSAwLTItLjktMi0yVjRjMC0xLjEuOS0yIDItMmgxMGMxLjEgMCAyIC45IDIgMiIgfV0KICAgIF07CiAgICB2YXIgQ29weU1pbnVzID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjE4IiwgeTE6ICIxNSIsIHkyOiAiMTUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIxNCIsIHg6ICI4IiwgeTogIjgiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNmMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDIgLjkgMiAyIiB9XQogICAgXTsKICAgIHZhciBDb3B5UGx1cyA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIxNSIsIHkxOiAiMTIiLCB5MjogIjE4IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxOCIsIHkxOiAiMTUiLCB5MjogIjE1IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiMTQiLCB4OiAiOCIsIHk6ICI4Iiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTZjLTEuMSAwLTItLjktMi0yVjRjMC0xLjEuOS0yIDItMmgxMGMxLjEgMCAyIC45IDIgMiIgfV0KICAgIF07CiAgICB2YXIgQ29weVggPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTgiLCB5MTogIjEyIiwgeTI6ICIxOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTgiLCB5MTogIjE4IiwgeTI6ICIxMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjE0IiwgeDogIjgiLCB5OiAiOCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIiIH1dCiAgICBdOwogICAgdmFyIENvcHkgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjE0IiwgeDogIjgiLCB5OiAiOCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIiIH1dCiAgICBdOwogICAgdmFyIENvcHlsZWZ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4xNyAxNC44M2E0IDQgMCAxIDAgMC01LjY2IiB9XQogICAgXTsKICAgIHZhciBDb3B5cmlnaHQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC44MyAxNC44M2E0IDQgMCAxIDEgMC01LjY2IiB9XQogICAgXTsKICAgIHZhciBDb3JuZXJEb3duUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxMCA1IDUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHY3YTQgNCAwIDAgMCA0IDRoMTIiIH1dCiAgICBdOwogICAgdmFyIENvcm5lckRvd25MZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgNHY3YTQgNCAwIDAgMS00IDRINCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEwLTUgNSA1IDUiIH1dCiAgICBdOwogICAgdmFyIENvcm5lckxlZnREb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTUtNSA1LTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA0aC03YTQgNCAwIDAgMC00IDR2MTIiIH1dCiAgICBdOwogICAgdmFyIENvcm5lckxlZnRVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDkgOSA0IDQgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMGgtN2E0IDQgMCAwIDEtNC00VjQiIH1dCiAgICBdOwogICAgdmFyIENvcm5lclJpZ2h0RG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE1IDUgNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0aDdhNCA0IDAgMCAxIDQgNHYxMiIgfV0KICAgIF07CiAgICB2YXIgQ29ybmVyUmlnaHRVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDkgNS01IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIwaDdhNCA0IDAgMCAwIDQtNFY0IiB9XQogICAgXTsKICAgIHZhciBDb3JuZXJVcExlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMHYtN2E0IDQgMCAwIDAtNC00SDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNCA0IDlsNS01IiB9XQogICAgXTsKICAgIHZhciBDb3JuZXJVcFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTQgNS01LTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIwdi03YTQgNCAwIDAgMSA0LTRoMTIiIH1dCiAgICBdOwogICAgdmFyIENwdSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE3aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA3aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxN2gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDdoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAydjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI0IiwgeTogIjQiLCB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMTYiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI4IiwgeTogIjgiLCB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBDcmVhdGl2ZUNvbW1vbnMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5LjNhMi44IDIuOCAwIDAgMC0zLjUgMSAzLjEgMy4xIDAgMCAwIDAgMy40IDIuNyAyLjcgMCAwIDAgMy41IDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgOS4zYTIuOCAyLjggMCAwIDAtMy41IDEgMy4xIDMuMSAwIDAgMCAwIDMuNCAyLjcgMi43IDAgMCAwIDMuNSAxIiB9XQogICAgXTsKICAgIHZhciBDcmVkaXRDYXJkID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjEwIiwgeTI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ3JvaXNzYW50ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMiAxOEg0Ljc3NGExLjUgMS41IDAgMCAxLTEuMzUyLS45NyAxMSAxMSAwIDAgMSAuMTMyLTYuNDg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEwLjJWNC43NzRhMS41IDEuNSAwIDAgMC0uOTctMS4zNTIgMTEgMTEgMCAwIDAtNi40ODYuMTMyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDVhNCAzIDAgMCAxIDQgMyAyIDIgMCAwIDEtMiAyIDEwIDEwIDAgMCAwLTUuMTM5IDEuNDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxOGEzIDQgMCAwIDAgMyA0IDIgMiAwIDAgMCAyLTIgMTAgMTAgMCAwIDEgMS40Mi01LjE0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguNzA5IDIuNTU0YTEwIDEwIDAgMCAwLTYuMTU1IDYuMTU1IDEuNSAxLjUgMCAwIDAgLjY3NiAxLjYyNmw5LjgwNyA1LjQyYTIgMiAwIDAgMCAyLjcxOC0yLjcxOGwtNS40Mi05LjgwN2ExLjUgMS41IDAgMCAwLTEuNjI2LS42NzYiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIENyb3AgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDJ2MTRhMiAyIDAgMCAwIDIgMmgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMlY4YTIgMiAwIDAgMC0yLTJIMiIgfV0KICAgIF07CiAgICB2YXIgQ3Jvc3MgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDlhMiAyIDAgMCAwLTIgMnYyYTIgMiAwIDAgMCAyIDJoNGExIDEgMCAwIDEgMSAxdjRhMiAyIDAgMCAwIDIgMmgyYTIgMiAwIDAgMCAyLTJ2LTRhMSAxIDAgMCAxIDEtMWg0YTIgMiAwIDAgMCAyLTJ2LTJhMiAyIDAgMCAwLTItMmgtNGExIDEgMCAwIDEtMS0xVjRhMiAyIDAgMCAwLTItMmgtMmEyIDIgMCAwIDAtMiAydjRhMSAxIDAgMCAxLTEgMXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIENyb3NzaGFpciA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIyIiwgeDI6ICIxOCIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjIiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjYiLCB5MjogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIyMiIsIHkyOiAiMTgiIH1dCiAgICBdOwogICAgdmFyIENyb3duID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuNTYyIDMuMjY2YS41LjUgMCAwIDEgLjg3NiAwTDE1LjM5IDguODdhMSAxIDAgMCAwIDEuNTE2LjI5NEwyMS4xODMgNS41YS41LjUgMCAwIDEgLjc5OC41MTlsLTIuODM0IDEwLjI0NmExIDEgMCAwIDEtLjk1Ni43MzRINS44MWExIDEgMCAwIDEtLjk1Ny0uNzM0TDIuMDIgNi4wMmEuNS41IDAgMCAxIC43OTgtLjUxOWw0LjI3NiAzLjY2NGExIDEgMCAwIDAgMS41MTYtLjI5NHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWgxNCIgfV0KICAgIF07CiAgICB2YXIgQ3Vib2lkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMjEuMTIgNi40LTYuMDUtNC4wNmEyIDIgMCAwIDAtMi4xNy0uMDVMMi45NSA4LjQxYTIgMiAwIDAgMC0uOTUgMS43djUuODJhMiAyIDAgMCAwIC44OCAxLjY2bDYuMDUgNC4wN2EyIDIgMCAwIDAgMi4xNy4wNWw5Ljk1LTYuMTJhMiAyIDAgMCAwIC45NS0xLjdWOC4wNmEyIDIgMCAwIDAtLjg4LTEuNjZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIydi04TDIuMjUgOS4xNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNCAxMS43Ny02Ljg3IiB9XQogICAgXTsKICAgIHZhciBDdXBTb2RhID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNiA4IDEuNzUgMTIuMjhhMiAyIDAgMCAwIDIgMS43Mmg0LjU0YTIgMiAwIDAgMCAyLTEuNzJMMTggOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDhoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNWE2LjQ3IDYuNDcgMCAwIDEgNSAwIDYuNDcgNi40NyAwIDAgMCA1IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgOCAxLTZoMiIgfV0KICAgIF07CiAgICB2YXIgQ3VycmVuY3kgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI4IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB4MjogIjYiLCB5MTogIjMiLCB5MjogIjYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjEiLCB4MjogIjE4IiwgeTE6ICIzIiwgeTI6ICI2IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB4MjogIjYiLCB5MTogIjIxIiwgeTI6ICIxOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMSIsIHgyOiAiMTgiLCB5MTogIjIxIiwgeTI6ICIxOCIgfV0KICAgIF07CiAgICB2YXIgQ3lsaW5kZXIgPSBbCiAgICAgIFsiZWxsaXBzZSIsIHsgY3g6ICIxMiIsIGN5OiAiNSIsIHJ4OiAiOSIsIHJ5OiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDV2MTRhOSAzIDAgMCAwIDE4IDBWNSIgfV0KICAgIF07CiAgICB2YXIgRGFtID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTEuMzFjMS4xNy41NiAxLjU0IDEuNjkgMy41IDEuNjkgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjc1IDE4Yy4zNS41IDEuNDUgMSAyLjc1IDEgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgM2ExIDEgMCAwIDAtMSAxdjE2YTEgMSAwIDAgMCAxIDFoNGExIDEgMCAwIDAgMS0xTDEwIDRhMSAxIDAgMCAwLTEtMXoiIH1dCiAgICBdOwogICAgdmFyIERhdGFiYXNlQmFja3VwID0gWwogICAgICBbImVsbGlwc2UiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByeDogIjkiLCByeTogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmE5IDMgMCAwIDAgNSAyLjY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDkuM1Y1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNXYxNGE5IDMgMCAwIDAgNi40NyAyLjg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjRoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAyMGE1IDUgMCAwIDAgOS0zIDQuNSA0LjUgMCAwIDAtNC41LTQuNWMtMS4zMyAwLTIuNTQuNTQtMy40MSAxLjQxTDEyIDE2IiB9XQogICAgXTsKICAgIHZhciBEYXRhYmFzZVphcCA9IFsKICAgICAgWyJlbGxpcHNlIiwgeyBjeDogIjEyIiwgY3k6ICI1Iiwgcng6ICI5Iiwgcnk6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNVYxOUE5IDMgMCAwIDAgMTUgMjEuODQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNVY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyTDE4IDE3SDIyTDE5IDIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJBOSAzIDAgMCAwIDE0LjU5IDE0Ljg3IiB9XQogICAgXTsKICAgIHZhciBEYXRhYmFzZSA9IFsKICAgICAgWyJlbGxpcHNlIiwgeyBjeDogIjEyIiwgY3k6ICI1Iiwgcng6ICI5Iiwgcnk6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNVYxOUE5IDMgMCAwIDAgMjEgMTlWNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyQTkgMyAwIDAgMCAyMSAxMiIgfV0KICAgIF07CiAgICB2YXIgRGVjaW1hbHNBcnJvd0xlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyAyMS0zLTMgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4SDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTFoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNiIsIHk6ICIzIiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMi41IiB9XQogICAgXTsKICAgIHZhciBEZWNpbWFsc0Fycm93UmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxOGgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMSAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTFoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiMyIsIHdpZHRoOiAiNSIsIGhlaWdodDogIjgiLCByeDogIjIuNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjYiLCB5OiAiMyIsIHdpZHRoOiAiNSIsIGhlaWdodDogIjgiLCByeDogIjIuNSIgfV0KICAgIF07CiAgICB2YXIgRGVsZXRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAgNWEyIDIgMCAwIDAtMS4zNDQuNTE5bC02LjMyOCA1Ljc0YTEgMSAwIDAgMCAwIDEuNDgxbDYuMzI4IDUuNzQxQTIgMiAwIDAgMCAxMCAxOWgxMGEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgOSA2IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggOS02IDYiIH1dCiAgICBdOwogICAgdmFyIERlc3NlcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4xNjIgMy4xNjdBMTAgMTAgMCAwIDAgMiAxM2EyIDIgMCAwIDAgNCAwdi0xYTIgMiAwIDAgMSA0IDB2NGEyIDIgMCAwIDAgNCAwdi00YTIgMiAwIDAgMSA0IDB2MWEyIDIgMCAwIDAgNC0uMDA2IDEwIDEwIDAgMCAwLTguMTYxLTkuODI2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjgwNCAxNC44NjlhOSA5IDAgMCAxLTE3LjYwOCAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjQiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgRGlhbWV0ZXIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiNSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNDggMy42NmExMCAxMCAwIDAgMSAxMy44NiAxMy44NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjQxIDYuNDEgMTEuMTggMTEuMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy42NiA2LjQ4YTEwIDEwIDAgMCAwIDEzLjg2IDEzLjg2IiB9XQogICAgXTsKICAgIHZhciBEaWFtb25kTWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjcgMTAuM2EyLjQxIDIuNDEgMCAwIDAgMCAzLjQxbDcuNTkgNy41OWEyLjQxIDIuNDEgMCAwIDAgMy40MSAwbDcuNTktNy41OWEyLjQxIDIuNDEgMCAwIDAgMC0zLjQxTDEzLjcgMi43MWEyLjQxIDIuNDEgMCAwIDAtMy40MSAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dCiAgICBdOwogICAgdmFyIERpYW1vbmRQZXJjZW50ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi43IDEwLjNhMi40MSAyLjQxIDAgMCAwIDAgMy40MWw3LjU5IDcuNTlhMi40MSAyLjQxIDAgMCAwIDMuNDEgMGw3LjU5LTcuNTlhMi40MSAyLjQxIDAgMCAwIDAtMy40MUwxMy43IDIuNzFhMi40MSAyLjQxIDAgMCAwLTMuNDEgMFoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4yIDkuMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSA5LjUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjcgMTQuOGguMDEiIH1dCiAgICBdOwogICAgdmFyIERpYW1vbmRQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNyAxMC4zYTIuNDEgMi40MSAwIDAgMCAwIDMuNDFsNy41OSA3LjU5YTIuNDEgMi40MSAwIDAgMCAzLjQxIDBsNy41OS03LjU5YTIuNDEgMi40MSAwIDAgMCAwLTMuNDFMMTMuNyAyLjcxYTIuNDEgMi40MSAwIDAgMC0zLjQxIDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0KICAgIF07CiAgICB2YXIgRGlhbW9uZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNyAxMC4zYTIuNDEgMi40MSAwIDAgMCAwIDMuNDFsNy41OSA3LjU5YTIuNDEgMi40MSAwIDAgMCAzLjQxIDBsNy41OS03LjU5YTIuNDEgMi40MSAwIDAgMCAwLTMuNDFsLTcuNTktNy41OWEyLjQxIDIuNDEgMCAwIDAtMy40MSAwWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRGljZTEgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dCiAgICBdOwogICAgdmFyIERpY2UyID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNWguMDEiIH1dCiAgICBdOwogICAgdmFyIERpY2UzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTZoLjAxIiB9XQogICAgXTsKICAgIHZhciBEaWNlNCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoLjAxIiB9XQogICAgXTsKICAgIHZhciBEaWNlNSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0KICAgIF07CiAgICB2YXIgRGljZTYgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmguMDEiIH1dCiAgICBdOwogICAgdmFyIERpY2VzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICIxMiIsIHg6ICIyIiwgeTogIjEwIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjkyIDE0IDMuNS0zLjVhMi4yNCAyLjI0IDAgMCAwIDAtM2wtNS00LjkyYTIuMjQgMi4yNCAwIDAgMC0zIDBMMTAgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOWguMDEiIH1dCiAgICBdOwogICAgdmFyIERpZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzdjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTBoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWgxNCIgfV0KICAgIF07CiAgICB2YXIgRGlzYzIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0KICAgIF07CiAgICB2YXIgRGlzYzMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyYzAtMS43LjctMy4yIDEuOC00LjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmMwIDEuNy0uNyAzLjItMS44IDQuMiIgfV0KICAgIF07CiAgICB2YXIgRGlzYyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIERpc2NBbGJ1bSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XQogICAgXTsKICAgIHZhciBEaXZpZGUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI2IiwgcjogIjEiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNSIsIHgyOiAiMTkiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxOCIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBEbmFPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyYy0xLjM1IDEuNS0yLjA5MiAzLTIuNSA0LjVMMTQgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyA2LTIuODkxLTIuODkxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTVjMy4zMzMtMyA2LjY2Ny0zIDEwLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDkgLjg5MS44OTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgOWMtMS41IDEuMzUtMyAyLjA5Mi00LjUgMi41bC0xLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4xMDkgMTQuMTA5IDQgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi41IDEyLjUgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTggMi44OTEgMi44OTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMmMxLjM1LTEuNSAyLjA5Mi0zIDIuNS00LjVMMTAgMTYiIH1dCiAgICBdOwogICAgdmFyIERuYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE2IDEuNSAxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgOC0xLjUtMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDJjLTEuNzk4IDEuOTk4LTIuNTE4IDMuOTk1LTIuODA3IDUuOTkzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2LjUgMTAuNSAxIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgNi0yLjg5MS0yLjg5MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE1YzYuNjY3LTYgMTMuMzMzIDAgMjAtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCA5IC44OTEuODkxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuMTA5IDE0LjEwOSA0IDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuNSAxMi41IDEgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDE4IDIuODkxIDIuODkxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjJjMS43OTgtMS45OTggMi41MTgtMy45OTUgMi44MDctNS45OTMiIH1dCiAgICBdOwogICAgdmFyIERvY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDhoMjAiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNmgxMiIgfV0KICAgIF07CiAgICB2YXIgRG9nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuMjUgMTYuMjVoMS41TDEyIDE3eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNHYuNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00LjQyIDExLjI0N0ExMy4xNTIgMTMuMTUyIDAgMCAwIDQgMTQuNTU2QzQgMTguNzI4IDcuNTgyIDIxIDEyIDIxczgtMi4yNzIgOC02LjQ0NGExMS43MDIgMTEuNzAyIDAgMCAwLS40OTMtMy4zMDkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNHYuNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjUgOC41Yy0uMzg0IDEuMDUtMS4wODMgMi4wMjgtMi4zNDQgMi41LTEuOTMxLjcyMi0zLjU3Ni0uMjk3LTMuNjU2LTEtLjExMy0uOTk0IDEuMTc3LTYuNTMgNC03IDEuOTIzLS4zMjEgMy42NTEuODQ1IDMuNjUxIDIuMjM1QTcuNDk3IDcuNDk3IDAgMCAxIDE0IDUuMjc3YzAtMS4zOSAxLjg0NC0yLjU5OCAzLjc2Ny0yLjI3NyAyLjgyMy40NyA0LjExMyA2LjAwNiA0IDctLjA4LjcwMy0xLjcyNSAxLjcyMi0zLjY1NiAxLTEuMjYxLS40NzItMS44NTUtMS40NS0yLjIzOS0yLjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIERvbGxhclNpZ24gPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIiLCB5MjogIjIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDVIOS41YTMuNSAzLjUgMCAwIDAgMCA3aDVhMy41IDMuNSAwIDAgMSAwIDdINiIgfV0KICAgIF07CiAgICB2YXIgRG9udXQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC41IDEwYTIuNSAyLjUgMCAwIDEtMi40LTNIMThhMi45NSAyLjk1IDAgMCAxLTIuNi00LjQgMTAgMTAgMCAxIDAgNi4zIDcuMWMtLjMuMi0uOC4zLTEuMi4zIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIERvb3JDbG9zZWRMb2NrZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOVY2YTIgMiAwIDAgMC0yLTJIOGEyIDIgMCAwIDAtMiAydjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjBoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxN3YtMmEyIDIgMCAxIDAtNCAwdjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxNCIsIHk6ICIxNyIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjUiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIERvb3JDbG9zZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjBWNmEyIDIgMCAwIDAtMi0ySDhhMiAyIDAgMCAwLTIgMnYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIwaDIwIiB9XQogICAgXTsKICAgIHZhciBEb29yT3BlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIwSDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgNC41NjJ2MTYuMTU3YTEgMSAwIDAgMCAxLjI0Mi45N0wxOSAyMFY1LjU2MmEyIDIgMCAwIDAtMS41MTUtMS45NGwtNC0xQTIgMiAwIDAgMCAxMSA0LjU2MXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgNEg4YTIgMiAwIDAgMC0yIDJ2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIwaC0zIiB9XQogICAgXTsKICAgIHZhciBEb3QgPSBbWyJjaXJjbGUiLCB7IGN4OiAiMTIuMSIsIGN5OiAiMTIuMSIsIHI6ICIxIiB9XV07CiAgICB2YXIgRG93bmxvYWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxMCA1IDUgNS01IiB9XQogICAgXTsKICAgIHZhciBEcmFmdGluZ0NvbXBhc3MgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMi45OSA2Ljc0IDEuOTMgMy40NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS4xMzYgMTJhMTAgMTAgMCAwIDEtMTQuMjcxIDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtMi4xNi0zLjg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMjEgOC4wMi0xNC4yNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI1IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIERyYW1hID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNSAxMy4xaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA1YzAgOS00IDEyLTYgMTJzLTYtMy02LTEyYzAtMiAyLTMgNi0zczYgMSA2IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNCA5LjljLS44LjgtMiAuOC0yLjggMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4xIDcuMUM5IDcuMiA3LjcgNy43IDYgOC42Yy0zLjUgMi00LjcgMy45LTMuNyA1LjYgNC41IDcuOCA5LjUgOC40IDExLjIgNy40LjktLjUgMS45LTIuMSAxLjktNC43IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMSAxNi41Yy4zLTEuMSAxLjQtMS43IDIuNC0xLjQiIH1dCiAgICBdOwogICAgdmFyIERyaWJiYmxlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuMTMgNS4wOUMxNS4yMiA5LjE0IDEwIDEwLjQ0IDIuMjUgMTAuOTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEuNzUgMTIuODRjLTYuNjItMS40MS0xMi4xNCAxLTE2LjM4IDYuMzIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41NiAyLjc1YzQuMzcgNiA2IDkuNDIgOCAxNy43MiIgfV0KICAgIF07CiAgICB2YXIgRHJpbGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxOGExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg1YTMgMyAwIDAgMS0zLTMgMSAxIDAgMCAxIDEtMXoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMgMTBINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg5YTEgMSAwIDAgMSAxIDF2NmExIDEgMCAwIDEtMSAxbC0uODEgMy4yNDJhMSAxIDAgMCAxLS45Ny43NThIOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA0aDNhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTAtMiA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTggMi04IiB9XQogICAgXTsKICAgIHZhciBEcm9uZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwIDcgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNC0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTAgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE0IDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4yMDUgNC4xMzlhNCA0IDAgMSAxIDUuNDM5IDUuODYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjYzNyAxNGE0IDQgMCAxIDEtNS40MzIgNS44NjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4zNjcgMTBhNCA0IDAgMSAxIDUuNDM4LTUuODYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNzk1IDE5Ljg2MmE0IDQgMCAxIDEtNS40MjktNS44NzMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxMCIsIHk6ICI4Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgRHJvcGxldE9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjcxNSAxMy4xODZDMTguMjkgMTEuODU4IDE3LjM4NCAxMC42MDcgMTYgOS41Yy0yLTEuNi0zLjUtNC00LTYuNWExMC43IDEwLjcgMCAwIDEtLjg4NCAyLjU4NiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC43OTUgOC43OTdBMTEgMTEgMCAwIDEgOCA5LjVDNiAxMS4xIDUgMTMgNSAxNWE3IDcgMCAwIDAgMTMuMjIyIDMuMjA4IiB9XQogICAgXTsKICAgIHZhciBEcm9wbGV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMjJhNyA3IDAgMCAwIDctN2MwLTItMS0zLjktMy01LjVzLTMuNS00LTQtNi41Yy0uNSAyLjUtMiA0LjktNCA2LjVDNiAxMS4xIDUgMTMgNSAxNWE3IDcgMCAwIDAgNyA3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRHJvcGxldHMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03IDE2LjNjMi4yIDAgNC0xLjgzIDQtNC4wNSAwLTEuMTYtLjU3LTIuMjYtMS43MS0zLjE5UzcuMjkgNi43NSA3IDUuM2MtLjI5IDEuNDUtMS4xNCAyLjg0LTIuMjkgMy43NlMzIDExLjEgMyAxMi4yNWMwIDIuMjIgMS44IDQuMDUgNCA0LjA1eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi41NiA2LjZBMTAuOTcgMTAuOTcgMCAwIDAgMTQgMy4wMmMuNSAyLjUgMiA0LjkgNCA2LjVzMyAzLjUgMyA1LjVhNi45OCA2Ljk4IDAgMCAxLTExLjkxIDQuOTciCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIERydW0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDItOCA4IiB9XSwKICAgICAgWyJlbGxpcHNlIiwgeyBjeDogIjEyIiwgY3k6ICI5Iiwgcng6ICIxMCIsIHJ5OiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEzLjR2Ny45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTMuNHY3LjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA5djhhMTAgNSAwIDAgMCAyMCAwVjkiIH1dCiAgICBdOwogICAgdmFyIERydW1zdGljayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjQgMTUuNjNhNy44NzUgNiAxMzUgMSAxIDYuMjMtNi4yMyA0LjUgMy40MyAxMzUgMCAwLTYuMjMgNi4yMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjI5IDEyLjcxLTIuNiAyLjZhMi41IDIuNSAwIDEgMC0xLjY1IDQuNjVBMi41IDIuNSAwIDEgMCA4LjcgMTguM2wyLjU5LTIuNTkiIH1dCiAgICBdOwogICAgdmFyIER1bWJiZWxsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuNTk2IDEyLjc2OGEyIDIgMCAxIDAgMi44MjktMi44MjlsLTEuNzY4LTEuNzY3YTIgMiAwIDAgMCAyLjgyOC0yLjgyOWwtMi44MjgtMi44MjhhMiAyIDAgMCAwLTIuODI5IDIuODI4bC0xLjc2Ny0xLjc2OGEyIDIgMCAxIDAtMi44MjkgMi44Mjl6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIuNSAyMS41IDEuNC0xLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuMSAzLjkgMS40LTEuNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01LjM0MyAyMS40ODVhMiAyIDAgMSAwIDIuODI5LTIuODI4bDEuNzY3IDEuNzY4YTIgMiAwIDEgMCAyLjgyOS0yLjgyOWwtNi4zNjQtNi4zNjRhMiAyIDAgMSAwLTIuODI5IDIuODI5bDEuNzY4IDEuNzY3YTIgMiAwIDAgMC0yLjgyOCAyLjgyOXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS42IDE0LjQgNC44LTQuOCIgfV0KICAgIF07CiAgICB2YXIgRWFyT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOC41YTMuNSAzLjUgMCAxIDAgNyAwYzAtMS41Ny45Mi0yLjUyIDIuMDQtMy40NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDguNWMwLS43NS4xMy0xLjQ3LjM2LTIuMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC44IDMuMTVBNi41IDYuNSAwIDAgMSAxOSA4LjVjMCAxLjYzLS40NCAyLjgxLTEuMDkgMy43NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi41IDZBMi41IDIuNSAwIDAgMSAxNSA4LjVNMTAgMTNhMiAyIDAgMCAwIDEuODItMS4xOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIEVhciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOC41YTYuNSA2LjUgMCAxIDEgMTMgMGMwIDYtNiA2LTYgMTBhMy41IDMuNSAwIDEgMS03IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOC41YTIuNSAyLjUgMCAwIDAtNSAwdjFhMiAyIDAgMSAxIDAgNCIgfV0KICAgIF07CiAgICB2YXIgRWFydGggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS41NCAxNUgxN2EyIDIgMCAwIDAtMiAydjQuNTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk03IDMuMzRWNWEzIDMgMCAwIDAgMyAzYTIgMiAwIDAgMSAyIDJjMCAxLjEuOSAyIDIgMmEyIDIgMCAwIDAgMi0yYzAtMS4xLjktMiAyLTJoMy4xNyIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjEuOTVWMThhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDEtMi0ydi0xYTIgMiAwIDAgMC0yLTJIMi4wNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgRWFydGhMb2NrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAzLjM0VjVhMyAzIDAgMCAwIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyMS45NVYxOGEyIDIgMCAwIDAtMi0yIDIgMiAwIDAgMS0yLTJ2LTFhMiAyIDAgMCAwLTItMkgyLjA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjU0IDE1SDE3YTIgMiAwIDAgMC0yIDJ2NC41NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyYTEwIDEwIDAgMSAwIDkuNTQgMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgNlY0YTIgMiAwIDEgMC00IDB2MiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHg6ICIxNCIsIHk6ICI2Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBFY2xpcHNlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmE3IDcgMCAxIDAgMTAgMTAiIH1dCiAgICBdOwogICAgdmFyIEVnZ0ZyaWVkID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMS41IiwgY3k6ICIxMi41IiwgcjogIjMuNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDhjMC0zLjUgMi41LTYgNi41LTYgNSAwIDQuODMgMyA3LjUgNXM1IDIgNSA2YzAgNC41LTIuNSA2LjUtNyA2LjUtMi41IDAtMi41IDIuNS02IDIuNXMtNy0yLTctNS41YzAtMyAxLjUtMyAxLjUtNUMzLjUgMTAgMyA5IDMgOFoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEVnZ09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNC4zNDdWMTRjMC02LTQtMTItOC0xMi0xLjA3OCAwLTIuMTU3LjQzNi0zLjE1NyAxLjE5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMjA2IDYuMjFDNC44NzEgOC40IDQgMTEuMiA0IDE0YTggOCAwIDAgMCAxNC41NjggNC41NjgiIH1dCiAgICBdOwogICAgdmFyIEVnZyA9IFtbInBhdGgiLCB7IGQ6ICJNMTIgMkM4IDIgNCA4IDQgMTRhOCA4IDAgMCAwIDE2IDBjMC02LTQtMTItOC0xMiIgfV1dOwogICAgdmFyIEVsbGlwc2lzVmVydGljYWwgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxOSIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBFbGxpcHNpcyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTIiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjEyIiwgcjogIjEiIH1dCiAgICBdOwogICAgdmFyIEVxdWFsQXBwcm94aW1hdGVseSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTVhNi41IDYuNSAwIDAgMSA3IDAgNi41IDYuNSAwIDAgMCA3IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA5YTYuNSA2LjUgMCAwIDEgNyAwIDYuNSA2LjUgMCAwIDAgNyAwIiB9XQogICAgXTsKICAgIHZhciBFcXVhbE5vdCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjUiLCB4MjogIjE5IiwgeTE6ICI5IiwgeTI6ICI5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjUiLCB4MjogIjE5IiwgeTE6ICIxNSIsIHkyOiAiMTUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTkiLCB4MjogIjUiLCB5MTogIjUiLCB5MjogIjE5IiB9XQogICAgXTsKICAgIHZhciBFcXVhbCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjUiLCB4MjogIjE5IiwgeTE6ICI5IiwgeTI6ICI5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjUiLCB4MjogIjE5IiwgeTE6ICIxNSIsIHkyOiAiMTUiIH1dCiAgICBdOwogICAgdmFyIEVyYXNlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDIxSDhhMiAyIDAgMCAxLTEuNDItLjU4N2wtMy45OTQtMy45OTlhMiAyIDAgMCAxIDAtMi44MjhsMTAtMTBhMiAyIDAgMCAxIDIuODI5IDBsNS45OTkgNmEyIDIgMCAwIDEgMCAyLjgyOEwxMi44MzQgMjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNS4wODIgMTEuMDkgOC44MjggOC44MjgiIH1dCiAgICBdOwogICAgdmFyIEV0aGVybmV0UG9ydCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJtMTUgMjAgMy0zaDJhMiAyIDAgMCAwIDItMlY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjlhMiAyIDAgMCAwIDIgMmgybDMgM3oiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDh2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA4djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOHYxIiB9XQogICAgXTsKICAgIHZhciBFdXJvID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMGgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0aDkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xOSA2YTcuNyA3LjcgMCAwIDAtNS4yLTJBNy45IDcuOSAwIDAgMCA2IDEyYzAgNC40IDMuNSA4IDcuOCA4IDIgMCAzLjgtLjggNS4yLTIiIH0KICAgICAgXQogICAgXTsKICAgIHZhciBFdkNoYXJnZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM2gyYTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDAgNCAwdi02Ljk5OGEyIDIgMCAwIDAtLjU5LTEuNDJMMTggNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3aDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEtMiAzaDNsLTIgMyIgfV0KICAgIF07CiAgICB2YXIgRXhwYW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTUgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDkgNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE2djVoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOFYzaC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTZ2NWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMjEgNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOFYzaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5IDMgMyIgfV0KICAgIF07CiAgICB2YXIgRXh0ZXJuYWxMaW5rID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM2g2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTQgMjEgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2IiB9XQogICAgXTsKICAgIHZhciBFeWVDbG9zZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxOC0uNzIyLTMuMjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4YTEwLjY0NSAxMC42NDUgMCAwIDAgMjAgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxNS0xLjcyNi0yLjA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQgMTUgMS43MjYtMi4wNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE4IC43MjItMy4yNSIgfV0KICAgIF07CiAgICB2YXIgRXllT2ZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuNzMzIDUuMDc2YTEwLjc0NCAxMC43NDQgMCAwIDEgMTEuMjA1IDYuNTc1IDEgMSAwIDAgMSAwIC42OTYgMTAuNzQ3IDEwLjc0NyAwIDAgMS0xLjQ0NCAyLjQ5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjA4NCAxNC4xNThhMyAzIDAgMCAxLTQuMjQyLTQuMjQyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjQ3OSAxNy40OTlhMTAuNzUgMTAuNzUgMCAwIDEtMTUuNDE3LTUuMTUxIDEgMSAwIDAgMSAwLS42OTYgMTAuNzUgMTAuNzUgMCAwIDEgNC40NDYtNS4xNDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICAgIHZhciBFeWUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjA2MiAxMi4zNDhhMSAxIDAgMCAxIDAtLjY5NiAxMC43NSAxMC43NSAwIDAgMSAxOS44NzYgMCAxIDEgMCAwIDEgMCAuNjk2IDEwLjc1IDEwLjc1IDAgMCAxLTE5Ljg3NiAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIEZhY2Vib29rID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMmgtM2E1IDUgMCAwIDAtNSA1djNIN3Y0aDN2OGg0di04aDNsMS00aC00VjdhMSAxIDAgMCAxIDEtMWgzeiIgfV0KICAgIF07CiAgICB2YXIgRmFjdG9yeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxOWEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJWOC41YS41LjUgMCAwIDAtLjc2OS0uNDIybC00LjQ2MiAyLjg0NEEuNS41IDAgMCAxIDE1IDEwLjV2LTJhLjUuNSAwIDAgMC0uNzY5LS40MjJMOS43NyAxMC45MjJBLjUuNSAwIDAgMSA5IDEwLjVWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmguMDEiIH1dCiAgICBdOwogICAgdmFyIEZhbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjgyNyAxNi4zNzlhNi4wODIgNi4wODIgMCAwIDEtOC42MTgtNy4wMDJsNS40MTIgMS40NWE2LjA4MiA2LjA4MiAwIDAgMSA3LjAwMi04LjYxOGwtMS40NSA1LjQxMmE2LjA4MiA2LjA4MiAwIDAgMSA4LjYxOCA3LjAwMmwtNS40MTItMS40NWE2LjA4MiA2LjA4MiAwIDAgMS03LjAwMiA4LjYxOGwxLjQ1LTUuNDEyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnYuMDEiIH1dCiAgICBdOwogICAgdmFyIEZhc3RGb3J3YXJkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAyIDE4eiIgfV0KICAgIF07CiAgICB2YXIgRmVuY2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDMgMiA1djE1YzAgLjYuNCAxIDEgMWgyYy42IDAgMS0uNCAxLTFWNVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDMtMiAydjE1YzAgLjYuNCAxIDEgMWgyYy42IDAgMS0uNCAxLTFWNVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgMy0yIDJ2MTVjMCAuNi40IDEgMSAxaDJjLjYgMCAxLS40IDEtMVY1WiIgfV0KICAgIF07CiAgICB2YXIgRmVhdGhlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjY3IDE5YTIgMiAwIDAgMCAxLjQxNi0uNTg4bDYuMTU0LTYuMTcyYTYgNiAwIDAgMC04LjQ5LTguNDlMNS41ODYgOS45MTRBMiAyIDAgMCAwIDUgMTEuMzI4VjE4YTEgMSAwIDAgMCAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDggMiAyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41IDE1SDkiIH1dCiAgICBdOwogICAgdmFyIEZlcnJpc1doZWVsID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi44IDE1LTMuNSAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjcgNy0zLjUgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjggOSAzLjMgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43IDE3LTMuNS0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMjIgMy04IDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTguN2E5IDkgMCAxIDAtMTIgMCIgfV0KICAgIF07CiAgICB2YXIgRmlnbWEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDUuNUEzLjUgMy41IDAgMCAxIDguNSAySDEydjdIOC41QTMuNSAzLjUgMCAwIDEgNSA1LjV6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJoMy41YTMuNSAzLjUgMCAxIDEgMCA3SDEyVjJ6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyLjVhMy41IDMuNSAwIDEgMSA3IDAgMy41IDMuNSAwIDEgMS03IDB6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTkuNUEzLjUgMy41IDAgMCAxIDguNSAxNkgxMnYzLjVhMy41IDMuNSAwIDEgMS03IDB6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuNUEzLjUgMy41IDAgMCAxIDguNSA5SDEydjdIOC41QTMuNSAzLjUgMCAwIDEgNSAxMi41eiIgfV0KICAgIF07CiAgICB2YXIgRmlsZUFyY2hpdmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy42NTkgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYxMS41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMnYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4di0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggN1Y2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMjAiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgRmlsZUF4aXMzZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE4IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwdjhoOCIgfV0KICAgIF07CiAgICB2YXIgRmlsZUJhZGdlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMgMjJoNWEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjMuMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTcuNjkgMTYuNDc5IDEuMjkgNC44OGEuNS41IDAgMCAxLS42OTguNTkxbC0xLjg0My0uODQ5YTEgMSAwIDAgMC0uODc5LjAwMWwtMS44NDYuODVhLjUuNSAwIDAgMS0uNjkyLS41OTNsMS4yOS00Ljg4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTQiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgRmlsZUJveCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0LjUgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYzLjgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS43IDE0LjIgNyAxN2wtNC43LTIuOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDEzLjFhMiAyIDAgMCAwLS45OTkgMS43NnYzLjI0YTIgMiAwIDAgMCAuOTY5IDEuNzhMNiAyMS43YTIgMiAwIDAgMCAyLjAzLjAxTDExIDE5LjlhMiAyIDAgMCAwIDEtMS43NlYxNC45YTIgMiAwIDAgMC0uOTctMS43OEw4IDExLjNhMiAyIDAgMCAwLTIuMDMtLjAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE3djUiIH1dCiAgICBdOwogICAgdmFyIEZpbGVCcmFjZXNDb3JuZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNCAyMmg0YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2NiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTRhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMS0xIDEgMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMCAxIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMmExIDEgMCAwIDAgMS0xdi0yYTEgMSAwIDAgMSAxLTEgMSAxIDAgMCAxLTEtMXYtMmExIDEgMCAwIDAtMS0xIiB9XQogICAgXTsKICAgIHZhciBGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTh2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTh2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTh2LTYiIH1dCiAgICBdOwogICAgdmFyIEZpbGVDaGFydENvbHVtbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4di0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4di02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE4di0zIiB9XQogICAgXTsKICAgIHZhciBGaWxlQnJhY2VzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEyYTEgMSAwIDAgMC0xIDF2MWExIDEgMCAwIDEtMSAxIDEgMSAwIDAgMSAxIDF2MWExIDEgMCAwIDAgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE4YTEgMSAwIDAgMCAxLTF2LTFhMSAxIDAgMCAxIDEtMSAxIDEgMCAwIDEtMS0xdi0xYTEgMSAwIDAgMC0xLTEiIH1dCiAgICBdOwogICAgdmFyIEZpbGVDaGFydExpbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTMtMy41IDMuNS0yLTJMOCAxNyIgfV0KICAgIF07CiAgICB2YXIgRmlsZUNoYXJ0UGllID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuOTQxIDIySDE4YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDRsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2My41MTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjAxNyAxMS41MTJhNiA2IDAgMSAwIDguNDY2IDguNDc1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTZhMSAxIDAgMCAxLTEtMXYtNGMwLS41NTIuNDUtMS4wMDguOTk1LS45MTdhNiA2IDAgMCAxIDQuOTIyIDQuOTIyYy4wOTEuNTQ0LS4zNjUuOTk1LS45MTcuOTk1eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRmlsZUNoZWNrQ29ybmVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuNSAyMkg2YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAyMCAyIDIgNC00IiB9XQogICAgXTsKICAgIHZhciBGaWxlQ2hlY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNSAyIDIgNC00IiB9XQogICAgXTsKICAgIHZhciBGaWxlQ2xvY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiAyMmgyYTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2Mi44NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2Mi4ybDEuNiAxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMTYiLCByOiAiNiIgfV0KICAgIF07CiAgICB2YXIgRmlsZUNvZGVDb3JuZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDEyLjE1VjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyaC0zLjM1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxNi0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMjIgMy0zLTMtMyIgfV0KICAgIF07CiAgICB2YXIgRmlsZUNvZGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTIuNSA4IDE1bDIgMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEyLjUgMiAyLjUtMiAyLjUiIH1dCiAgICBdOwogICAgdmFyIEZpbGVDb2cgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy44NSAyMkgxOGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLS41ODYtMS40MTRsLTQtNEEyIDIgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2Ni42IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMy4zMDUgMTkuNTMuOTIzLS4zODIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC4yMjggMTYuODUyLS45MjQtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01Ljg1MiAxNS4yMjgtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuODUyIDIwLjc3Mi0uMzgzLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjE0OCAxNS4yMjguMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41MyAyMS42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNzczIDE2Ljg1Mi45MjItLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05Ljc3MyAxOS4xNDguOTIyLjM4MyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjE4IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIEZpbGVEaWZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTNWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE3aDYiIH1dCiAgICBdOwogICAgdmFyIEZpbGVEaWdpdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNmgydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjJoNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMTYiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBGaWxlRG93biA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOHYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDMgMyAzLTMiIH1dCiAgICBdOwogICAgdmFyIEZpbGVFeGNsYW1hdGlvblBvaW50ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA5djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTdoLjAxIiB9XQogICAgXTsKICAgIHZhciBGaWxlSGVhZHBob25lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCA2LjgzNVY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtLjM0MyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMiAxOWEyIDIgMCAwIDEgNCAwdjFhMiAyIDAgMCAxLTQgMHYtNGE2IDYgMCAwIDEgMTIgMHY0YTIgMiAwIDAgMS00IDB2LTFhMiAyIDAgMCAxIDQgMCIgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZpbGVIZWFydCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzIDIyaDVhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnY3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy42MiAxOC44QTIuMjUgMi4yNSAwIDEgMSA3IDE1LjgzNmEyLjI1IDIuMjUgMCAxIDEgMy4zOCAyLjk2NmwtMi42MjYgMi44NTZhMSAxIDAgMCAxLTEuNTA3IDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGaWxlSW1hZ2UgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxNy0xLjI5Ni0xLjI5NmEyLjQxIDIuNDEgMCAwIDAtMy40MDggMEw5IDIyIiB9XQogICAgXTsKICAgIHZhciBGaWxlSW5wdXQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDExVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMnYtMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTVoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxOCAzLTMtMy0zIiB9XQogICAgXTsKICAgIHZhciBGaWxlS2V5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuNjUgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYxMC4xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMTUgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDE0LTQuNTg2IDQuNTg2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMjAiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgRmlsZUxvY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDkuOFY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTd2LTJhMiAyIDAgMCAwLTQgMHYyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI1IiwgeDogIjMiLCB5OiAiMTciLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIEZpbGVNaW51c0Nvcm5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDE0VjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOGg2IiB9XQogICAgXTsKICAgIHZhciBGaWxlTXVzaWMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS42NSAyMkgxOGEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjEwLjM1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMHYtN2wzIDEuNDc0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMjAiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgRmlsZU1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTVoNiIgfV0KICAgIF07CiAgICB2YXIgRmlsZU91dHB1dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQuMjI2IDIwLjkyNUEyIDIgMCAwIDAgNiAyMmgxMmEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjMuMTI3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxMS0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxNy0zLTNoMTAiIH1dCiAgICBdOwogICAgdmFyIEZpbGVQZW5MaW5lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTguMjI2IDUuMjI2LTIuNTItMi41MkEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtLjM1MSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggMTIuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGgxIiB9XQogICAgXTsKICAgIHZhciBGaWxlUGVuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuNjU5IDIySDE4YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2OS4zNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjM3OCAxMi42MjJhMSAxIDAgMCAxIDMgMy4wMDNMOC4zNiAyMC42MzdhMiAyIDAgMCAxLS44NTQuNTA2bC0yLjg2Ny44MzdhLjUuNSAwIDAgMS0uNjItLjYybC44MzYtMi44NjlhMiAyIDAgMCAxIC41MDYtLjg1M3oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZpbGVQbGF5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjAzMyAxMy40NGEuNjQ3LjY0NyAwIDAgMSAwIDEuMTJsLTQuMDY1IDIuMzUyYS42NDUuNjQ1IDAgMCAxLS45NjgtLjU2di00LjcwNGEuNjQ1LjY0NSAwIDAgMSAuOTY3LS41NnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZpbGVQbHVzQ29ybmVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMzUgMjJINmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHY1LjM1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNnY2IiB9XQogICAgXTsKICAgIHZhciBGaWxlUGx1cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTh2LTYiIH1dCiAgICBdOwogICAgdmFyIEZpbGVRdWVzdGlvbk1hcmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjEgOWEzIDMgMCAwIDEgNS44MiAxYzAgMi0zIDMtMyAzIiB9XQogICAgXTsKICAgIHZhciBGaWxlU2NhbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEwVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA0bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoNC4zNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0YTIgMiAwIDAgMC0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjJhMiAyIDAgMCAxLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNGEyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIyYTIgMiAwIDAgMCAyLTIiIH1dCiAgICBdOwogICAgdmFyIEZpbGVTZWFyY2hDb3JuZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS4xIDIySDZhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OSAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2My4yNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIyLTIuODgtMi44OCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxNyIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBGaWxlU2VhcmNoID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEuNSIsIGN5OiAiMTQuNSIsIHI6ICIyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuMyAxNi4zIDE1IDE4IiB9XQogICAgXTsKICAgIHZhciBGaWxlU2lnbmFsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjUgMTMuNWEyLjUgMi41IDAgMCAxIDAgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMmE1IDUgMCAwIDEgMCA2IiB9XQogICAgXTsKICAgIHZhciBGaWxlU2xpZGVycyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTF2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE3aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTZ2MiIgfV0KICAgIF07CiAgICB2YXIgRmlsZVNwcmVhZHNoZWV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTNoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM2gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTdoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxN2gyIiB9XQogICAgXTsKICAgIHZhciBGaWxlU3RhY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyMWExIDEgMCAwIDEtMSAxSDRhMSAxIDAgMCAxLTEtMXYtOGExIDEgMCAwIDEgMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2YTEgMSAwIDAgMS0xIDFIOWExIDEgMCAwIDEtMS0xVjhhMSAxIDAgMCAxIDEtMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSA2YTIgMiAwIDAgMC0uNTg2LTEuNDE0bC0yLTJBMiAyIDAgMCAwIDE3IDJoLTNhMSAxIDAgMCAwLTEgMXY4YTEgMSAwIDAgMCAxIDFoNmExIDEgMCAwIDAgMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRmlsZVN5bWxpbmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDExVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMnYtM2EyIDIgMCAwIDEgMi0yaDciCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxOCAzLTMtMy0zIiB9XQogICAgXTsKICAgIHZhciBGaWxlVGVybWluYWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxNiAyLTItMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4aDQiIH1dCiAgICBdOwogICAgdmFyIEZpbGVUZXh0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDlIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxM0g4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE3SDgiIH1dCiAgICBdOwogICAgdmFyIEZpbGVUeXBlQ29ybmVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMjJoNmEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE2di0xLjVhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgLjUuNVYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNHY4IiB9XQogICAgXTsKICAgIHZhciBGaWxlVHlwZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxOGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM3YtLjVhLjUuNSAwIDAgMSAuNS0uNWg1YS41LjUgMCAwIDEgLjUuNXYuNSIgfV0KICAgIF07CiAgICB2YXIgRmlsZVVwID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTUtMy0zLTMgMyIgfV0KICAgIF07CiAgICB2YXIgRmlsZVVzZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjJhNCA0IDAgMCAwLTggMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNSIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBGaWxlVmlkZW9DYW1lcmEgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDEyVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIm0xMCAxNy44NDMgMy4wMzMtMS43NTVhLjY0LjY0IDAgMCAxIC45NjcuNTZ2NC43MDRhLjY1LjY1IDAgMCAxLS45NjcuNTZMMTAgMjAuMTU3IiB9CiAgICAgIF0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNiIsIHg6ICIzIiwgeTogIjE2Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBGaWxlVm9sdW1lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAxMS41NVY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtMS45NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1YTUgNSAwIDAgMSAwIDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOCAxNC41MDJhLjUuNSAwIDAgMC0uODI2LS4zODFsLTEuODkzIDEuNjMxYTEgMSAwIDAgMS0uNjUxLjI0M0gzLjVhLjUuNSAwIDAgMC0uNS41MDF2My4wMDZhLjUuNSAwIDAgMCAuNS41MDFoMS4xMjlhMSAxIDAgMCAxIC42NTIuMjQzbDEuODkzIDEuNjMzYS41LjUgMCAwIDAgLjgyNi0uMzh6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGaWxlWENvcm5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDIySDZhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE3IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxNy01IDUiIH1dCiAgICBdOwogICAgdmFyIEZpbGVYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgMTIuNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDEyLjUgNSA1IiB9XQogICAgXTsKICAgIHZhciBGaWxlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XQogICAgXTsKICAgIHZhciBGaWxlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDJoLTRhMiAyIDAgMCAwLTIgMnYxMWEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjcwNiAyLjcwNkEyLjQgMi40IDAgMCAwIDE1IDJ2NWExIDEgMCAwIDAgMSAxaDVhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDdhMiAyIDAgMCAwLTIgMnYxMWEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDEuNzMyLTEiIH1dCiAgICBdOwogICAgdmFyIEZpbG0gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3LjVoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTYuNWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNy41aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTYuNWg0IiB9XQogICAgXTsKICAgIHZhciBGaW5nZXJwcmludFBhdHRlcm4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMGEyIDIgMCAwIDAtMiAyYzAgMS4wMi0uMSAyLjUxLS4yNiA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEzLjEyYzAgMi4zOCAwIDYuMzgtMSA4Ljg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjI5IDIxLjAyYy4xMi0uNi40My0yLjMuNS0zLjAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJhMTAgMTAgMCAwIDEgMTgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS44IDE2Yy4yLTIgLjEzMS01LjM1NCAwLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxOS41QzUuNSAxOCA2IDE1IDYgMTJhNiA2IDAgMCAxIC4zNC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNjUgMjJjLjIxLS42Ni40NS0xLjMyLjU3LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA2LjhhNiA2IDAgMCAxIDkgNS4ydjIiIH1dCiAgICBdOwogICAgdmFyIEZpcmVFeHRpbmd1aXNoZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA2LjVWM2ExIDEgMCAwIDAtMS0xaC0yYTEgMSAwIDAgMC0xIDF2My41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMThoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAzaC0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDNhNiA2IDAgMCAwLTYgNnYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEzaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTBhNCA0IDAgMCAwLTggMHYxMGEyIDIgMCAwIDAgMiAyaDRhMiAyIDAgMCAwIDItMloiIH1dCiAgICBdOwogICAgdmFyIEZpc2hPZmYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCAxMi40N3YuMDNtMC0uNXYuNDdtLS40NzUgNS4wNTZBNi43NDQgNi43NDQgMCAwIDEgMTUgMThjLTMuNTYgMC03LjU2LTIuNTMtOC41LTYgLjM0OC0xLjI4IDEuMTE0LTIuNDMzIDIuMTIxLTMuMzhtMy40NDQtMi4wODhBOC44MDIgOC44MDIgMCAwIDEgMTUgNmMzLjU2IDAgNi4wNiAyLjU0IDcgNi0uMzA5IDEuMTQtLjc4NiAyLjE3Ny0xLjQxMyAzLjA1OCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03IDEwLjY3QzcgOCA1LjU4IDUuOTcgMi43MyA1LjVjLTEgMS41LTEgNSAuMjMgNi41LTEuMjQgMS41LTEuMjQgNS0uMjMgNi41QzUuNTggMTguMDMgNyAxNiA3IDEzLjMzbTcuNDgtNC4zNzJBOS43NyA5Ljc3IDAgMCAxIDE2IDYuMDdtMCAxMS44NmE5Ljc3IDkuNzcgMCAwIDEtMS43MjgtMy42MTgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTYuMDEgMTcuOTMtLjIzIDEuNEEyIDIgMCAwIDEgMTMuOCAyMUg5LjVhNS45NiA1Ljk2IDAgMCAwIDEuNDktMy45OE04LjUzIDNoNS4yN2EyIDIgMCAwIDEgMS45OCAxLjY3bC4yMyAxLjRNMiAybDIwIDIwIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGaXNoU3ltYm9sID0gW1sicGF0aCIsIHsgZDogIk0yIDE2czktMTUgMjAtNEMxMSAyMyAyIDggMiA4IiB9XV07CiAgICB2YXIgRmlzaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYuNSAxMmMuOTQtMy40NiA0Ljk0LTYgOC41LTYgMy41NiAwIDYuMDYgMi41NCA3IDYtLjk0IDMuNDctMy40NCA2LTcgNnMtNy41Ni0yLjUzLTguNS02WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMnYuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNy45M2E5Ljc3IDkuNzcgMCAwIDEgMC0xMS44NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03IDEwLjY3QzcgOCA1LjU4IDUuOTcgMi43MyA1LjVjLTEgMS41LTEgNSAuMjMgNi41LTEuMjQgMS41LTEuMjQgNS0uMjMgNi41QzUuNTggMTguMDMgNyAxNiA3IDEzLjMzIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjQ2IDcuMjZDMTAuMiA1Ljg4IDkuMTcgNC4yNCA4IDNoNS44YTIgMiAwIDAgMSAxLjk4IDEuNjdsLjIzIDEuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi4wMSAxNy45My0uMjMgMS40QTIgMiAwIDAgMSAxMy44IDIxSDkuNWE1Ljk2IDUuOTYgMCAwIDAgMS40OS0zLjk4IiB9XQogICAgXTsKICAgIHZhciBGaXNoaW5nSG9vayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjU4NiAxMS40MTQtNS45MyA1LjkzYTEgMSAwIDAgMS04LThsMy4xMzctMy4xMzdhLjcwNy43MDcgMCAwIDEgMS4yMDcuNVYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC40MTQgOC41ODYgMjIgNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxMCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBGbGFnT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZjLTMgMC01LTItOC0yYTYgNiAwIDAgMC00IDEuNTI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIyVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy42NTYgMkg4YzMgMCA1IDIgNy4zMzMgMnEyIDAgMy4wNjctLjhBMSAxIDAgMCAxIDIwIDR2MTAuMzQ3IiB9XQogICAgXTsKICAgIHZhciBGbGFnVHJpYW5nbGVMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjJWMi44YS44LjggMCAwIDAtMS4xNy0uNzFMNS40NSA3Ljc4YS44LjggMCAwIDAgMCAxLjQ0TDE4IDE1LjUiIH1dCiAgICBdOwogICAgdmFyIEZsYWdUcmlhbmdsZVJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMlYyLjhhLjguOCAwIDAgMSAxLjE3LS43MWwxMS4zOCA1LjY5YS44LjggMCAwIDEgMCAxLjQ0TDYgMTUuNSIgfV0KICAgIF07CiAgICB2YXIgRmxhZyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMjJWNGExIDEgMCAwIDEgLjQtLjhBNiA2IDAgMCAxIDggMmMzIDAgNSAyIDcuMzMzIDJxMiAwIDMuMDY3LS44QTEgMSAwIDAgMSAyMCA0djEwYTEgMSAwIDAgMS0uNC44QTYgNiAwIDAgMSAxNiAxNmMtMyAwLTUtMi04LTJhNiA2IDAgMCAwLTQgMS41MjgiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZsYW1lS2luZGxpbmcgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiAyYzEgMyAyLjUgMy41IDMuNSA0LjVBNSA1IDAgMCAxIDE3IDEwYTUgNSAwIDEgMS0xMCAwYzAtLjMgMC0uNi4xLS45YTIgMiAwIDEgMCAzLjMtMkM4IDQuNSAxMSAyIDEyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMjIgMTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDE4IDE0IDQiIH1dCiAgICBdOwogICAgdmFyIEZsYW1lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgM3ExIDQgNCA2LjV0MyA1LjVhMSAxIDAgMCAxLTE0IDAgNSA1IDAgMCAxIDEtMyAxIDEgMCAwIDAgNSAwYzAtMi0xLjUtMy0xLjUtNXEwLTIgMi41LTQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZsYXNobGlnaHRPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS42NTIgNkgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM3YxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTYgMTZ2NGEyIDIgMCAwIDEtMiAyaC00YTIgMiAwIDAgMS0yLTJ2LThhNCA0IDAgMCAwLS44LTIuNGwtLjYtLjhBMyAzIDAgMCAxIDYgN1Y2IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy42NDkgMkgxN2ExIDEgMCAwIDEgMSAxdjRhMyAzIDAgMCAxLS42IDEuOGwtLjYuOGE0IDQgMCAwIDAtLjU1IDEuMDA3IiB9XQogICAgXTsKICAgIHZhciBGbGFzaGxpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTN2MSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAyYTEgMSAwIDAgMSAxIDF2NGEzIDMgMCAwIDEtLjYgMS44bC0uNi44QTQgNCAwIDAgMCAxNiAxMnY4YTIgMiAwIDAgMS0yIDJIMTBhMiAyIDAgMCAxLTItMnYtOGE0IDQgMCAwIDAtLjgtMi40bC0uNi0uOEEzIDMgMCAwIDEgNiA3VjNhMSAxIDAgMCAxIDEtMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA2aDEyIiB9XQogICAgXTsKICAgIHZhciBGbGFza0NvbmljYWxPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjIuMzQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2Ni4zNDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIwYTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMS43NTUtMi45Nmw1LjIyNy05LjU2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjQ1MyAxNUgxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjUgMmg3IiB9XQogICAgXTsKICAgIHZhciBGbGFza0NvbmljYWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNCAydjZhMiAyIDAgMCAwIC4yNDUuOTZsNS41MSAxMC4wOEEyIDIgMCAwIDEgMTggMjJINmEyIDIgMCAwIDEtMS43NTUtMi45Nmw1LjUxLTEwLjA4QTIgMiAwIDAgMCAxMCA4VjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi40NTMgMTVoMTEuMDk0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAyaDciIH1dCiAgICBdOwogICAgdmFyIEZsYXNrUm91bmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjYuMjkyYTcgNyAwIDEgMCA0IDBWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE1aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAyaDciIH1dCiAgICBdOwogICAgdmFyIEZsaXBIb3Jpem9udGFsMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgNyA1IDUtNSA1VjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgNy01IDUgNSA1VjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dCiAgICBdOwogICAgdmFyIEZsaXBIb3Jpem9udGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzSDVhMiAyIDAgMCAwLTIgMnYxNGMwIDEuMS45IDIgMiAyaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgM2gzYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMmgtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MiIgfV0KICAgIF07CiAgICB2YXIgRmxpcFZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOFY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTZ2M2EyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEySDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMmgtMiIgfV0KICAgIF07CiAgICB2YXIgRmxvd2VyMiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDVhMyAzIDAgMSAxIDMgM20tMy0zYTMgMyAwIDEgMC0zIDNtMy0zdjFNOSA4YTMgMyAwIDEgMCAzIDNNOSA4aDFtNSAwYTMgMyAwIDEgMS0zIDNtMy0zaC0xbS0yIDN2LTEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIyYzQuMiAwIDctMS42NjcgNy01LTQuMiAwLTcgMS42NjctNyA1WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMmMtNC4yIDAtNy0xLjY2Ny03LTUgNC4yIDAgNyAxLjY2NyA3IDVaIiB9XQogICAgXTsKICAgIHZhciBGbGlwVmVydGljYWwyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMy01IDUtNS01aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDIxLTUtNS01IDVoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMkgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEySDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTJoLTIiIH1dCiAgICBdOwogICAgdmFyIEZsb3dlciA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMTYuNUE0LjUgNC41IDAgMSAxIDcuNSAxMiA0LjUgNC41IDAgMSAxIDEyIDcuNWE0LjUgNC41IDAgMSAxIDQuNSA0LjUgNC41IDQuNSAwIDEgMS00LjUgNC41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDcuNVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNSAxMkg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjUgMTJIMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTYuNVYxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDggMS44OCAxLjg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjEyIDkuODggMTYgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE2IDEuODgtMS44OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4xMiAxNC4xMiAxNiAxNiIgfV0KICAgIF07CiAgICB2YXIgRm9jdXMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0KICAgIF07CiAgICB2YXIgRm9sZFZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOFYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE5LTMtMy0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNS0zIDMtMy0zIiB9XQogICAgXTsKICAgIHZhciBGb2xkSG9yaXpvbnRhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMmgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA5LTMgMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxNSAzLTMtMy0zIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJBcmNoaXZlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNSIsIGN5OiAiMTkiLCByOiAiMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC45IDE5LjhBMiAyIDAgMCAwIDIyIDE4VjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMmg1LjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTF2LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTd2LTIiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlckNsb2NrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2Mi4ybDEuNiAxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxNiIsIHI6ICI2IiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJDaGVjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEzIDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlckNsb3NlZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwaDIwIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJDb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTAuNSA4IDEzbDIgMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEwLjUgMiAyLjUtMiAyLjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGb2xkZXJDb2cgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4zIDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45OGEyIDIgMCAwIDEgMS42OS45bC42NiAxLjJBMiAyIDAgMCAwIDEyIDZoOGEyIDIgMCAwIDEgMiAydjMuMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4zMDUgMTkuNTMuOTIzLS4zODIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMjI4IDE2Ljg1Mi0uOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuODUyIDE1LjIyOC0uMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuODUyIDIwLjc3Mi0uMzgzLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4xNDggMTUuMjI4LjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjUzIDIxLjY5Ni0uMzgyLS45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDE2Ljg1Mi45MjQtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgMTkuMTQ4LjkyNC4zODMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyRG90ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAyMGgxNmEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45M2EyIDIgMCAwIDEtMS42Ni0uOWwtLjgyLTEuMkEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2MwIDEuMS45IDIgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMyIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJEb3duID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTMtMyAzLTMtMyIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyR2l0MiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE5YTUgNSAwIDAgMS01LTV2OCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEzIiwgY3k6ICIxMiIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMjAiLCBjeTogIjE5IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlckhlYXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuNjM4IDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2My40MTciCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQuNjIgMTguOEEyLjI1IDIuMjUgMCAxIDEgMTggMTUuODM2YTIuMjUgMi4yNSAwIDEgMSAzLjM4IDIuOTY2bC0yLjYyNiAyLjg1NmEuOTk4Ljk5OCAwIDAgMS0xLjUwNyAweiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRm9sZGVyR2l0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTNoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEzaDMiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlcklucHV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5VjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEzaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTYgMy0zLTMtMyIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyS2FuYmFuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAyMGgxNmEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45M2EyIDIgMCAwIDEtMS42Ni0uOWwtLjgyLTEuMkEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2MwIDEuMS45IDIgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwdjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMHY2IiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJMb2NrID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjUiLCB4OiAiMTQiLCB5OiAiMTciLCByeDogIjEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYyLjUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTd2LTJhMiAyIDAgMSAwLTQgMHYyIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJLZXkgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIyMCIsIHI6ICIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwIDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2MiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxNC00LjUgNC41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE1IDEgMSIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEzaDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGb2xkZXJPcGVuRG90ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNiAxNCAxLjQ1LTIuOUEyIDIgMCAwIDEgOS4yNCAxMEgyMGEyIDIgMCAwIDEgMS45NCAyLjVsLTEuNTUgNmEyIDIgMCAwIDEtMS45NCAxLjVINGEyIDIgMCAwIDEtMi0yVjVjMC0xLjEuOS0yIDItMmgzLjkzYTIgMiAwIDAgMSAxLjY2LjlsLjgyIDEuMmEyIDIgMCAwIDAgMS42Ni45SDE4YTIgMiAwIDAgMSAyIDJ2MiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE0IiwgY3k6ICIxNSIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJPcGVuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNiAxNCAxLjUtMi45QTIgMiAwIDAgMSA5LjI0IDEwSDIwYTIgMiAwIDAgMSAxLjk0IDIuNWwtMS41NCA2YTIgMiAwIDAgMS0xLjk1IDEuNUg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgxOGEyIDIgMCAwIDEgMiAydjIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZvbGRlck91dHB1dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgNy41VjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMS41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTNoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxMC0zIDMgMyAzIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJQZW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDExLjVWNWEyIDIgMCAwIDEgMi0yaDMuOWMuNyAwIDEuMy4zIDEuNy45bC44IDEuMmMuNC42IDEgLjkgMS43LjlIMjBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAyaC05LjUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMzc4IDEzLjYyNmExIDEgMCAxIDAtMy4wMDQtMy4wMDRsLTUuMDEgNS4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGb2xkZXJQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTB2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEzaDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGb2xkZXJSb290ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAyMGgxNmEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45M2EyIDIgMCAwIDEtMS42Ni0uOWwtLjgyLTEuMkEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2MwIDEuMS45IDIgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMyIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1djUiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlclNlYXJjaDIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjExLjUiLCBjeTogIjEyLjUiLCByOiAiMi41IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy4zIDE0LjMgMTUgMTYiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlclNlYXJjaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjcgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnY0LjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtMS45LTEuOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxNyIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJTeW1saW5rID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5LjM1VjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtM2EyIDIgMCAwIDEgMi0yaDciCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxNiAzLTMtMy0zIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJTeW5jID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSAyMEg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAydi41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjRoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNCAxLjUzNS0xLjYwNWE1IDUgMCAwIDEgOCAxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjJ2LTRoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTgtMS41MzUgMS42MDVhNSA1IDAgMCAxLTgtMS41IiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJUcmVlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTBhMSAxIDAgMCAwIDEtMVY2YTEgMSAwIDAgMC0xLTFoLTIuNWExIDEgMCAwIDEtLjgtLjRsLS45LTEuMkExIDEgMCAwIDAgMTUgM2gtMmExIDEgMCAwIDAtMSAxdjVhMSAxIDAgMCAwIDEgMVoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjFhMSAxIDAgMCAwIDEtMXYtM2ExIDEgMCAwIDAtMS0xaC0yLjlhMSAxIDAgMCAxLS44OC0uNTVsLS40Mi0uODVhMSAxIDAgMCAwLS45Mi0uNkgxM2ExIDEgMCAwIDAtMSAxdjVhMSAxIDAgMCAwIDEgMVoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1YTIgMiAwIDAgMCAyIDJoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTNhMiAyIDAgMCAwIDIgMmgzIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJVcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMHY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTMgMy0zIDMgMyIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyWCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjUgMTAuNSA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSAxMC41LTUgNSIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGb2xkZXJzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgNWEyIDIgMCAwIDEgMiAydjdhMiAyIDAgMCAxLTIgMkg5YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDIuNWExLjUgMS41IDAgMCAxIDEuMi42bC42LjhhMS41IDEuNSAwIDAgMCAxLjIuNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA4LjI2OGEyIDIgMCAwIDAtMSAxLjczOFYxOWEyIDIgMCAwIDAgMiAyaDExYTIgMiAwIDAgMCAxLjczMi0xIiB9XQogICAgXTsKICAgIHZhciBGb290cHJpbnRzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAxNnYtMi4zOEM0IDExLjUgMi45NyAxMC41IDMgOGMuMDMtMi43MiAxLjQ5LTYgNC41LTZDOS4zNyAyIDEwIDMuOCAxMCA1LjVjMCAzLjExLTIgNS42Ni0yIDguNjhWMTZhMiAyIDAgMSAxLTQgMFoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjB2LTIuMzhjMC0yLjEyIDEuMDMtMy4xMiAxLTUuNjItLjAzLTIuNzItMS40OS02LTQuNS02QzE0LjYzIDYgMTQgNy44IDE0IDkuNWMwIDMuMTEgMiA1LjY2IDIgOC42OFYyMGEyIDIgMCAxIDAgNCAwWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxN2g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTNoNCIgfV0KICAgIF07CiAgICB2YXIgRm9ya2xpZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMkg1YTIgMiAwIDAgMC0yIDJ2NSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEzIiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE5aDNtNS0xN3YxN2g2TTYgMTJWN2MwLTEuMS45LTIgMi0yaDNsNSA1IiB9XQogICAgXTsKICAgIHZhciBGb3JtID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMmgxMCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjQiLCB5OiAiMTgiLCB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjQiLCB5OiAiNiIsIHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICI0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBGb3J3YXJkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTcgNS01LTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE4di0yYTQgNCAwIDAgMSA0LTRoMTIiIH1dCiAgICBdOwogICAgdmFyIEZyYW1lID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMjIiLCB4MjogIjIiLCB5MTogIjYiLCB5MjogIjYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjIiLCB4MjogIjIiLCB5MTogIjE4IiwgeTI6ICIxOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI2IiwgeDI6ICI2IiwgeTE6ICIyIiwgeTI6ICIyMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxOCIsIHgyOiAiMTgiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICAgIHZhciBGcmFtZXIgPSBbWyJwYXRoIiwgeyBkOiAiTTUgMTZWOWgxNFYySDVsMTQgMTRoLTdtLTcgMCA3IDd2LTdtLTcgMGg3IiB9XV07CiAgICB2YXIgRnJvd24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNnMtMS41LTItNC0yLTQgMi00IDIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiOS4wMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dCiAgICBdOwogICAgdmFyIEZ1ZWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM2gyYTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDAgNCAwdi02Ljk5OGEyIDIgMCAwIDAtLjU5LTEuNDJMMTggNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDExIiB9XQogICAgXTsKICAgIHZhciBGdWxsc2NyZWVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiOCIsIHg6ICI3IiwgeTogIjgiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIEZ1bm5lbFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy4zNTQgM0gzYTEgMSAwIDAgMC0uNzQyIDEuNjdsNy4yMjUgNy45ODlBMiAyIDAgMCAxIDEwIDE0djZhMSAxIDAgMCAwIC41NTMuODk1bDIgMUExIDEgMCAwIDAgMTQgMjF2LTdhMiAyIDAgMCAxIC41MTctMS4zNDFsMS4yMTgtMS4zNDgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDN2NiIgfV0KICAgIF07CiAgICB2YXIgRnVubmVsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAgMjBhMSAxIDAgMCAwIC41NTMuODk1bDIgMUExIDEgMCAwIDAgMTQgMjF2LTdhMiAyIDAgMCAxIC41MTctMS4zNDFMMjEuNzQgNC42N0ExIDEgMCAwIDAgMjEgM0gzYTEgMSAwIDAgMC0uNzQyIDEuNjdsNy4yMjUgNy45ODlBMiAyIDAgMCAxIDEwIDE0eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRnVubmVsWCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjUzMSAzSDNhMSAxIDAgMCAwLS43NDIgMS42N2w3LjIyNSA3Ljk4OUEyIDIgMCAwIDEgMTAgMTR2NmExIDEgMCAwIDAgLjU1My44OTVsMiAxQTEgMSAwIDAgMCAxNCAyMXYtN2EyIDIgMCAwIDEgLjUxNy0xLjM0MWwuNDI3LS40NzMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuNSAzLjUgNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxLjUgMy41LTUgNSIgfV0KICAgIF07CiAgICB2YXIgR2FsbGVyeUhvcml6b250YWxFbmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA1djE0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEyIiwgaGVpZ2h0OiAiMTgiLCB4OiAiMTAiLCB5OiAiMyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgR2FsbGVyeUhvcml6b250YWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDN2MTgiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICIxOCIsIHg6ICI2IiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgM3YxOCIgfV0KICAgIF07CiAgICB2YXIgR2FsbGVyeVRodW1ibmFpbHMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE0IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjFoMSIgfV0KICAgIF07CiAgICB2YXIgR2FsbGVyeVZlcnRpY2FsRW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgNmgxNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgeDogIjMiLCB5OiAiMTAiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIEdhbGxlcnlWZXJ0aWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMmgxOCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgeDogIjMiLCB5OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIyaDE4IiB9XQogICAgXTsKICAgIHZhciBHYW1lcGFkMiA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjEwIiwgeTE6ICIxMSIsIHkyOiAiMTEiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiOCIsIHkxOiAiOSIsIHkyOiAiMTMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjE1LjAxIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTgiLCB4MjogIjE4LjAxIiwgeTE6ICIxMCIsIHkyOiAiMTAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuMzIgNUg2LjY4YTQgNCAwIDAgMC0zLjk3OCAzLjU5Yy0uMDA2LjA1Mi0uMDEuMTAxLS4wMTcuMTUyQzIuNjA0IDkuNDE2IDIgMTQuNDU2IDIgMTZhMyAzIDAgMCAwIDMgM2MxIDAgMS41LS41IDItMWwxLjQxNC0xLjQxNEEyIDIgMCAwIDEgOS44MjggMTZoNC4zNDRhMiAyIDAgMCAxIDEuNDE0LjU4NkwxNyAxOGMuNS41IDEgMSAyIDFhMyAzIDAgMCAwIDMtM2MwLTEuNTQ1LS42MDQtNi41ODQtLjY4NS03LjI1OC0uMDA3LS4wNS0uMDExLS4xLS4wMTctLjE1MUE0IDQgMCAwIDAgMTcuMzIgNXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEdhbWVwYWREaXJlY3Rpb25hbCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjE0NiAxNS44NTRhMS4yMDcgMS4yMDcgMCAwIDEgMS43MDggMGwxLjU2IDEuNTZBMiAyIDAgMCAxIDE1IDE4LjgyOFYyMWExIDEgMCAwIDEtMSAxaC00YTEgMSAwIDAgMS0xLTF2LTIuMTcyYTIgMiAwIDAgMSAuNTg2LTEuNDE0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOC44MjggMTVhMiAyIDAgMCAxLTEuNDE0LS41ODZsLTEuNTYtMS41NmExLjIwNyAxLjIwNyAwIDAgMSAwLTEuNzA4bDEuNTYtMS41NkEyIDIgMCAwIDEgMTguODI4IDlIMjFhMSAxIDAgMCAxIDEgMXY0YTEgMSAwIDAgMS0xIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYuNTg2IDE0LjQxNEEyIDIgMCAwIDEgNS4xNzIgMTVIM2ExIDEgMCAwIDEtMS0xdi00YTEgMSAwIDAgMSAxLTFoMi4xNzJhMiAyIDAgMCAxIDEuNDE0LjU4NmwxLjU2IDEuNTZhMS4yMDcgMS4yMDcgMCAwIDEgMCAxLjcwOHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSAzYTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMSAxdjIuMTcyYTIgMiAwIDAgMS0uNTg2IDEuNDE0bC0xLjU2IDEuNTZhMS4yMDcgMS4yMDcgMCAwIDEtMS43MDggMGwtMS41Ni0xLjU2QTIgMiAwIDAgMSA5IDUuMTcyeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgR2FtZXBhZCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjEwIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiOCIsIHkxOiAiMTAiLCB5MjogIjE0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIxNS4wMSIsIHkxOiAiMTMiLCB5MjogIjEzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE4IiwgeDI6ICIxOC4wMSIsIHkxOiAiMTEiLCB5MjogIjExIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTIiLCB4OiAiMiIsIHk6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBHYXVnZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDE0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjM0IDE5YTEwIDEwIDAgMSAxIDE3LjMyIDAiIH1dCiAgICBdOwogICAgdmFyIEdhdmVsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTMtOC4zODEgOC4zOGExIDEgMCAwIDEtMy4wMDEtM2w4LjM4NC04LjM4MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNiA2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEuNSAxMC41LTgtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDggNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguNSA3LjUgOCA4IiB9XQogICAgXTsKICAgIHZhciBHZW0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC41IDMgOCA5bDQgMTMgNC0xMy0yLjUtNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAzYTIgMiAwIDAgMSAxLjYuOGwzIDRhMiAyIDAgMCAxIC4wMTMgMi4zODJsLTcuOTkgMTAuOTg2YTIgMiAwIDAgMS0zLjI0NyAwbC03Ljk5LTEwLjk4NkEyIDIgMCAwIDEgMi40IDcuOGwyLjk5OC0zLjk5N0EyIDIgMCAwIDEgNyAzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloMjAiIH1dCiAgICBdOwogICAgdmFyIEdlb3JnaWFuTGFyaSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjUgMjFhNy41IDcuNSAwIDEgMSA3LjM1LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTJWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIxaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJWMyIgfV0KICAgIF07CiAgICB2YXIgR2hvc3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmE4IDggMCAwIDAtOCA4djEybDMtMyAyLjUgMi41TDEyIDE5bDIuNSAyLjVMMTcgMTlsMyAzVjEwYTggOCAwIDAgMC04LTh6IiB9XQogICAgXTsKICAgIHZhciBHaWZ0ID0gWwogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjgiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEydjdhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJ2LTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy41IDhhMi41IDIuNSAwIDAgMSAwLTVBNC44IDggMCAwIDEgMTIgOGE0LjggOCAwIDAgMSA0LjUtNSAyLjUgMi41IDAgMCAxIDAgNSIgfV0KICAgIF07CiAgICB2YXIgR2l0QnJhbmNoTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA2YTkgOSAwIDAgMC05IDlWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOGgtNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBHaXRCcmFuY2hQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAzdjEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDlhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIxYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNmE5IDkgMCAwIDAtOSA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE1djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMThoLTYiIH1dCiAgICBdOwogICAgdmFyIEdpdEJyYW5jaCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjYiLCB5MTogIjMiLCB5MjogIjE1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjE4IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOWE5IDkgMCAwIDEtOSA5IiB9XQogICAgXTsKICAgIHZhciBHaXRDb21taXRIb3Jpem9udGFsID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIzIiwgeDI6ICI5IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjIxIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dCiAgICBdOwogICAgdmFyIEdpdENvbW1pdFZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3Y2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTV2NiIgfV0KICAgIF07CiAgICB2YXIgR2l0Q29tcGFyZUFycm93cyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZoNWEyIDIgMCAwIDEgMiAydjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS0zLTMgMy0zIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjE4IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThIN2EyIDIgMCAwIDEtMi0yVjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNSAzIDMtMyAzIiB9XQogICAgXTsKICAgIHZhciBHaXRDb21wYXJlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA2aDNhMiAyIDAgMCAxIDIgMnY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE4SDhhMiAyIDAgMCAxLTItMlY5IiB9XQogICAgXTsKICAgIHZhciBHaXRGb3JrID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOXYyYzAgLjYtLjQgMS0xIDFIN2MtLjYgMC0xLS40LTEtMVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjMiIH1dCiAgICBdOwogICAgdmFyIEdpdEdyYXBoID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA5djYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE1LjdBOSA5IDAgMCAwIDE5IDkiIH1dCiAgICBdOwogICAgdmFyIEdpdE1lcmdlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIxVjlhOSA5IDAgMCAwIDkgOSIgfV0KICAgIF07CiAgICB2YXIgR2l0UHVsbFJlcXVlc3RBcnJvdyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgOXYxMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDktMy0zIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2aDVhMiAyIDAgMCAxIDIgMnY3IiB9XQogICAgXTsKICAgIHZhciBHaXRQdWxsUmVxdWVzdENsb3NlZCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOXYxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSA5LTYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMS41VjE1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIEdpdFB1bGxSZXF1ZXN0Q3JlYXRlQXJyb3cgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDl2MTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS0zLTMgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZoNWEyIDIgMCAwIDEgMiAydjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTV2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOGgtNiIgfV0KICAgIF07CiAgICB2YXIgR2l0UHVsbFJlcXVlc3RDcmVhdGUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDl2MTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNmgzYTIgMiAwIDAgMSAyIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE4aC02IiB9XQogICAgXTsKICAgIHZhciBHaXRQdWxsUmVxdWVzdERyYWZ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTF2LTEiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNiIsIHkxOiAiOSIsIHkyOiAiMjEiIH1dCiAgICBdOwogICAgdmFyIEdpdFB1bGxSZXF1ZXN0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA2aDNhMiAyIDAgMCAxIDIgMnY3IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjYiLCB5MTogIjkiLCB5MjogIjIxIiB9XQogICAgXTsKICAgIHZhciBHaXRodWIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSAyMnYtNGE0LjggNC44IDAgMCAwLTEtMy41YzMgMCA2LTIgNi01LjUuMDgtMS4yNS0uMjctMi40OC0xLTMuNS4yOC0xLjE1LjI4LTIuMzUgMC0zLjUgMCAwLTEgMC0zIDEuNS0yLjY0LS41LTUuMzYtLjUtOCAwQzYgMiA1IDIgNSAyYy0uMyAxLjE1LS4zIDIuMzUgMCAzLjVBNS40MDMgNS40MDMgMCAwIDAgNCA5YzAgMy41IDMgNS41IDYgNS41LS4zOS40OS0uNjggMS4wNS0uODUgMS42NS0uMTcuNi0uMjIgMS4yMy0uMTUgMS44NXY0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMThjLTQuNTEgMi01LTItNy0yIiB9XQogICAgXTsKICAgIHZhciBHaXRsYWIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0yMiAxMy4yOS0zLjMzLTEwYS40Mi40MiAwIDAgMC0uMTQtLjE4LjM4LjM4IDAgMCAwLS4yMi0uMTEuMzkuMzkgMCAwIDAtLjIzLjA3LjQyLjQyIDAgMCAwLS4xNC4xOGwtMi4yNiA2LjY3SDguMzJMNi4xIDMuMjZhLjQyLjQyIDAgMCAwLS4xLS4xOC4zOC4zOCAwIDAgMC0uMjYtLjA4LjM5LjM5IDAgMCAwLS4yMy4wNy40Mi40MiAwIDAgMC0uMTQuMThMMiAxMy4yOWEuNzQuNzQgMCAwIDAgLjI3LjgzTDEyIDIxbDkuNjktNi44OGEuNzEuNzEgMCAwIDAgLjMxLS44M1oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEdsYXNzV2F0ZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01LjExNiA0LjEwNEExIDEgMCAwIDEgNi4xMSAzaDExLjc4YTEgMSAwIDAgMSAuOTk0IDEuMTA1TDE3LjE5IDIwLjIxQTIgMiAwIDAgMSAxNS4yIDIySDguOGEyIDIgMCAwIDEtMi0xLjc5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyYTUgNSAwIDAgMSA2IDAgNSA1IDAgMCAwIDYgMCIgfV0KICAgIF07CiAgICB2YXIgR2xhc3NlcyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTUiLCByOiAiNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxNSIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE1YTIgMiAwIDAgMC0yLTIgMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yLjUgMTMgNSA3Yy43LTEuMyAxLjQtMiAzLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEuNSAxMyAxOSA3Yy0uNy0xLjMtMS41LTItMy0yIiB9XQogICAgXTsKICAgIHZhciBHbG9iZVggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAzIDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIwQTEwIDEwIDAgMSAxIDEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDQtMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMy01IDUiIH1dCiAgICBdOwogICAgdmFyIEdsb2JlTG9jayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjY4NiAxNUExNC41IDE0LjUgMCAwIDEgMTIgMjJhMTQuNSAxNC41IDAgMCAxIDAtMjAgMTAgMTAgMCAxIDAgOS41NDIgMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmg4LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgNlY0YTIgMiAwIDEgMC00IDB2MiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHg6ICIxNCIsIHk6ICI2Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBHbG9iZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyMCIgfV0KICAgIF07CiAgICB2YXIgR29hbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzVjJsOCA0LTggNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC41NjEgMTAuMjIyYTkgOSAwIDEgMS0xMi41NS01LjI5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMDAyIDkuOTk3YTUgNSAwIDEgMCA4LjkgMi4wMiIgfV0KICAgIF07CiAgICB2YXIgR3B1ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNWgxOGEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMkgyLjI2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTd2M2ExIDEgMCAwIDAgMSAxaDVhMSAxIDAgMCAwIDEtMXYtMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxMSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMTEiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgR3JhZHVhdGlvbkNhcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjQyIDEwLjkyMmExIDEgMCAwIDAtLjAxOS0xLjgzOEwxMi44MyA1LjE4YTIgMiAwIDAgMC0xLjY2IDBMMi42IDkuMDhhMSAxIDAgMCAwIDAgMS44MzJsOC41NyAzLjkwOGEyIDIgMCAwIDAgMS42NiAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMHY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTIuNVYxNmE2IDMgMCAwIDAgMTIgMHYtMy41IiB9XQogICAgXTsKICAgIHZhciBHcmFwZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDVWMmwtNS44OSA1Ljg5IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYuNiIsIGN5OiAiMTUuODkiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjguMTEiLCBjeTogIjcuNCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIuMzUiLCBjeTogIjExLjY1IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMy45MSIsIGN5OiAiNS44NSIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTguMTUiLCBjeTogIjEwLjA5IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2LjU2IiwgY3k6ICIxMy4yIiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMC44IiwgY3k6ICIxNy40NCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgR3JpZDJ4MkNoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgM3YxN2ExIDEgMCAwIDEtMSAxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY2YTEgMSAwIDAgMS0xIDFIMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxOSAyIDIgNC00IiB9XQogICAgXTsKICAgIHZhciBHcmlkMngyUGx1cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDN2MTdhMSAxIDAgMCAxLTEgMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2NmExIDEgMCAwIDEtMSAxSDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMnYtNiIgfV0KICAgIF07CiAgICB2YXIgR3JpZDN4MiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDN2MTgiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIEdyaWQyeDJYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgM3YxN2ExIDEgMCAwIDEtMSAxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY2YTEgMSAwIDAgMS0xIDFIMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNiA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMjEgNS01IiB9XQogICAgXTsKICAgIHZhciBHcmlkMngyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBHcmlkM3gzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzdjE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dCiAgICBdOwogICAgdmFyIEdyaXBIb3Jpem9udGFsID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjkiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjkiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjE1IiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxNSIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBHcmlwVmVydGljYWwgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI1IiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIxOSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNSIsIGN5OiAiNSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjE5IiwgcjogIjEiIH1dCiAgICBdOwogICAgdmFyIEdyaXAgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI1IiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiNSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiNSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTIiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTkiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxOSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgR3JvdXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWMwLTEuMS45LTIgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYzEuMSAwIDIgLjkgMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmMwIDEuMS0uOSAyLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVjLTEuMSAwLTItLjktMi0ydi0yIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI1IiwgeDogIjciLCB5OiAiNyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNSIsIHg6ICIxMCIsIHk6ICIxMiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgR3VpdGFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEuOSAxMi4xIDQuNTE0LTQuNTE0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwLjEgMi4zYTEgMSAwIDAgMC0xLjQgMGwtMS4xMTQgMS4xMTRBMiAyIDAgMCAwIDE3IDQuODI4djEuMzQ0YTIgMiAwIDAgMS0uNTg2IDEuNDE0QTIgMiAwIDAgMSAxNy44MjggN2gxLjM0NGEyIDIgMCAwIDAgMS40MTQtLjU4NkwyMS43IDUuM2ExIDEgMCAwIDAgMC0xLjR6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMTYgMiAyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguMjMgOS44NUEzIDMgMCAwIDEgMTEgOGE1IDUgMCAwIDEgNSA1IDMgMyAwIDAgMS0xLjg1IDIuNzdsLS45Mi4zOEEyIDIgMCAwIDAgMTIgMThhNCA0IDAgMCAxLTQgNCA2IDYgMCAwIDEtNi02IDQgNCAwIDAgMSA0LTQgMiAyIDAgMCAwIDEuODUtMS4yM3oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhhbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjE0NCAyMS4xNDRBNy4yNzQgMTAuNDQ1IDQ1IDEgMCAyLjg1NiAxMC44NTYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMy4xNDQgMjEuMTQ0QTcuMjc0IDQuMzY1IDQ1IDAgMCAyLjg1NiAxMC44NTZhNy4yNzQgNC4zNjUgNDUgMCAwIDEwLjI4OCAxMC4yODgiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjU2NSAxMC40MzUgMTguNiA4LjRhMi41MDEgMi41MDEgMCAxIDAgMS42NS00LjY1IDIuNSAyLjUgMCAxIDAtNC42NiAxLjY2bC0yLjAyNCAyLjAyNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjUgMTYuNS0xLTEiIH1dCiAgICBdOwogICAgdmFyIEhhbWJ1cmdlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2SDRhMiAyIDAgMSAxIDAtNGgxNmEyIDIgMCAxIDEgMCA0aC00LjI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTJhMiAyIDAgMCAxLTItMiA5IDcgMCAwIDEgMTggMCAyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTZhMiAyIDAgMCAwLTIgMiAzIDMgMCAwIDAgMyAzaDEyYTMgMyAwIDAgMCAzLTMgMiAyIDAgMCAwLTItMnEwIDAgMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuNjcgMTIgNi4xMyA0LjZhMiAyIDAgMCAwIDIuOC0uNGwzLjE1LTQuMiIgfV0KICAgIF07CiAgICB2YXIgSGFtbWVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTItOS4zNzMgOS4zNzNhMSAxIDAgMCAxLTMuMDAxLTNMMTIgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNSA0LTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMjEuNSAxMS41LTEuOTE0LTEuOTE0QTIgMiAwIDAgMSAxOSA4LjE3MnYtLjM0NGEyIDIgMCAwIDAtLjU4Ni0xLjQxNGwtMS42NTctMS42NTdBNiA2IDAgMCAwIDEyLjUxNiAzSDlsMS4yNDMgMS4yNDNBNiA2IDAgMCAxIDEyIDguNDg1VjEwbDIgMmgxLjE3MmEyIDIgMCAwIDEgMS40MTQuNTg2TDE4LjUgMTQuNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSGFuZENvaW5zID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTVoMmEyIDIgMCAxIDAgMC00aC0zYy0uNiAwLTEuMS4yLTEuNC42TDMgMTciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNyAyMSAxLjYtMS40Yy4zLS40LjgtLjYgMS40LS42aDRjMS4xIDAgMi4xLS40IDIuOC0xLjJsNC42LTQuNGEyIDIgMCAwIDAtMi43NS0yLjkxbC00LjIgMy45IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMTYgNiA2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjkiLCByOiAiMi45IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiNSIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBIYW5kRmlzdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjAzNSAxNy4wMTJhMyAzIDAgMCAwLTMtM2wtLjMxMS0uMDAyYS43Mi43MiAwIDAgMS0uNTA1LTEuMjI5bDEuMTk1LTEuMTk1QTIgMiAwIDAgMSAxMC44MjggMTFIMTJhMiAyIDAgMCAwIDAtNEg5LjI0M2EzIDMgMCAwIDAtMi4xMjIuODc5bC0yLjcwNyAyLjcwN0E0LjgzIDQuODMgMCAwIDAgMyAxNGE4IDggMCAwIDAgOCA4aDJhOCA4IDAgMCAwIDgtOFY3YTIgMiAwIDEgMC00IDB2MmEyIDIgMCAxIDAgNCAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjg4OCA5LjY2MkEyIDIgMCAwIDAgMTcgOFY1QTIgMiAwIDEgMCAxMyA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNUEyIDIgMCAxIDAgNSA1VjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgN1Y0QTIgMiAwIDEgMSAxMyA0VjcuMjY4IiB9XQogICAgXTsKICAgIHZhciBIYW5kR3JhYiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExLjVWOWEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDJ2MS40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwVjhhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOS45VjlhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNGEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTFhMiAyIDAgMSAxIDQgMHYzYTggOCAwIDAgMS04IDhoLTRhOCA4IDAgMCAxLTgtOCAyIDIgMCAxIDEgNCAwIiB9XQogICAgXTsKICAgIHZhciBIYW5kSGVhcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxNGgyYTIgMiAwIDAgMCAwLTRoLTNjLS42IDAtMS4xLjItMS40LjZMMyAxNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNC40NSAxMy4zOSA1LjA1LTQuNjk0QzIwLjE5NiA4IDIxIDYuODUgMjEgNS43NWEyLjc1IDIuNzUgMCAwIDAtNC43OTctMS44MzcuMjc2LjI3NiAwIDAgMS0uNDA2IDBBMi43NSAyLjc1IDAgMCAwIDExIDUuNzVjMCAxLjIuODAyIDIuMjQ4IDEuNSAyLjk0NkwxNiAxMS45NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE1IDYgNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAibTcgMjAgMS42LTEuNGMuMy0uNC44LS42IDEuNC0uNmg0YzEuMSAwIDIuMS0uNCAyLjgtMS4ybDQuNi00LjRhMSAxIDAgMCAwLTIuNzUtMi45MSIgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhhbmRIZWxwaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTJoMmEyIDIgMCAxIDAgMC00aC0zYy0uNiAwLTEuMS4yLTEuNC42TDMgMTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNyAxOCAxLjYtMS40Yy4zLS40LjgtLjYgMS40LS42aDRjMS4xIDAgMi4xLS40IDIuOC0xLjJsNC42LTQuNGEyIDIgMCAwIDAtMi43NS0yLjkxbC00LjIgMy45IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMTMgNiA2IiB9XQogICAgXTsKICAgIHZhciBIYW5kTWV0YWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMi41VjEwYTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnYxLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTFWOWEyIDIgMCAxIDAtNCAwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTAuNVY1YTIgMiAwIDEgMC00IDB2OSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm03IDE1LTEuNzYtMS43NmEyIDIgMCAwIDAtMi44MyAyLjgybDMuNiAzLjZDNy41IDIxLjE0IDkuMiAyMiAxMiAyMmgyYTggOCAwIDAgMCA4LThWN2EyIDIgMCAxIDAtNCAwdjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhhbmRQbGF0dGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM1YyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE1LjQgMTcuNCAzLjItMi44YTIgMiAwIDEgMSAyLjggMi45bC0zLjYgMy4zYy0uNy44LTEuNyAxLjItMi44IDEuMmgtNGMtMS4xIDAtMi4xLS40LTIuOC0xLjJsLTEuMzAyLTEuNDY0QTEgMSAwIDAgMCA2LjE1MSAxOUg1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTRoMTJhMiAyIDAgMCAxIDAgNGgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEwaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTBhNyA3IDAgMCAxIDE0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxNHY2YTEgMSAwIDAgMS0xIDFIMiIgfV0KICAgIF07CiAgICB2YXIgSGFuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExVjZhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwVjRhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTAuNVY2YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnY4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4IDhhMiAyIDAgMSAxIDQgMHY2YTggOCAwIDAgMS04IDhoLTJjLTIuOCAwLTQuNS0uODYtNS45OS0yLjM0bC0zLjYtMy42YTIgMiAwIDAgMSAyLjgzLTIuODJMNyAxNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSGFuZGJhZyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuMDQ4IDE4LjU2NkEyIDIgMCAwIDAgNCAyMWgxNmEyIDIgMCAwIDAgMS45NTItMi40MzRsLTItOUEyIDIgMCAwIDAgMTggOEg2YTIgMiAwIDAgMC0xLjk1MiAxLjU2NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMVY2YTQgNCAwIDAgMSA4IDB2NSIgfV0KICAgIF07CiAgICB2YXIgSGFuZHNoYWtlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgMTcgMiAyYTEgMSAwIDEgMCAzLTMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTQgMTQgMi41IDIuNWExIDEgMCAxIDAgMy0zbC0zLjg4LTMuODhhMyAzIDAgMCAwLTQuMjQgMGwtLjg4Ljg4YTEgMSAwIDEgMS0zLTNsMi44MS0yLjgxYTUuNzkgNS43OSAwIDAgMSA3LjA2LS44N2wuNDcuMjhhMiAyIDAgMCAwIDEuNDIuMjVMMjEgNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzIDEgMTFoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzIDIgMTRsNi41IDYuNWExIDEgMCAxIDAgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNGg4IiB9XQogICAgXTsKICAgIHZhciBIYXJkRHJpdmVEb3dubG9hZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA2LTQgNC00LTQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI4IiwgeDogIjIiLCB5OiAiMTQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMThoLjAxIiB9XQogICAgXTsKICAgIHZhciBIYXJkRHJpdmVVcGxvYWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA2LTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiOCIsIHg6ICIyIiwgeTogIjE0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMThoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE4aC4wMSIgfV0KICAgIF07CiAgICB2YXIgSGFyZERyaXZlID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMjIiLCB4MjogIjIiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01LjQ1IDUuMTEgMiAxMnY2YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNmwtMy40NS02Ljg5QTIgMiAwIDAgMCAxNi43NiA0SDcuMjRhMiAyIDAgMCAwLTEuNzkgMS4xMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNi4wMSIsIHkxOiAiMTYiLCB5MjogIjE2IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEwIiwgeDI6ICIxMC4wMSIsIHkxOiAiMTYiLCB5MjogIjE2IiB9XQogICAgXTsKICAgIHZhciBIYXJkSGF0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTBWNWExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDZhNiA2IDAgMCAxIDYgNnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTV2LTNhNiA2IDAgMCAxIDYtNiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMTUiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgSGFzaCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjQiLCB4MjogIjIwIiwgeTE6ICI5IiwgeTI6ICI5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjQiLCB4MjogIjIwIiwgeTE6ICIxNSIsIHkyOiAiMTUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTAiLCB4MjogIjgiLCB5MTogIjMiLCB5MjogIjIxIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE2IiwgeDI6ICIxNCIsIHkxOiAiMyIsIHkyOiAiMjEiIH1dCiAgICBdOwogICAgdmFyIEhhdEdsYXNzZXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOGEyIDIgMCAwIDAtNCAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE5IDExLTIuMTEtNi42NTdhMiAyIDAgMCAwLTIuNzUyLTEuMTQ4bC0xLjI3Ni42MUEyIDIgMCAwIDEgMTIgNEg4LjVhMiAyIDAgMCAwLTEuOTI1IDEuNDU2TDUgMTEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMWgyMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgSGF6ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuMiA2LjIgMS40IDEuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEzaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTNoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNy40IDcuNiAxLjQtMS40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE3SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjFIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxM2E0IDQgMCAwIDAtOCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDVWMi41IiB9XQogICAgXTsKICAgIHZhciBIZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEySDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTVWOSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNCAxNC41YS41LjUgMCAwIDAgLjUuNWgxYTIuNSAyLjUgMCAwIDAgMi41LTIuNXYtMUEyLjUgMi41IDAgMCAwIDE1LjUgOWgtMWEuNS41IDAgMCAwLS41LjV6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTVWOSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNSIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgSGRtaVBvcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTIyIDlhMSAxIDAgMCAwLTEtMUgzYTEgMSAwIDAgMC0xIDF2NGExIDEgMCAwIDAgMSAxaDFsMiAyaDEybDItMmgxYTEgMSAwIDAgMCAxLTFaIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjUgMTJoOSIgfV0KICAgIF07CiAgICB2YXIgSGVhZGluZzEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTIgMy0ydjgiIH1dCiAgICBdOwogICAgdmFyIEhlYWRpbmcyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMThWNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE4aC00YzAtNCA0LTMgNC02IDAtMS41LTItMi41LTQtMSIgfV0KICAgIF07CiAgICB2YXIgSGVhZGluZzMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNSAxMC41YzEuNy0xIDMuNSAwIDMuNSAxLjVhMiAyIDAgMCAxLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNy41YzIgMS41IDQgLjMgNC0xLjVhMiAyIDAgMCAwLTItMiIgfV0KICAgIF07CiAgICB2YXIgSGVhZGluZzQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEwdjNhMSAxIDAgMCAwIDEgMWgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEwdjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMThWNiIgfV0KICAgIF07CiAgICB2YXIgSGVhZGluZzYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTYiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMGMtMiAyLTMgMy41LTMgNiIgfV0KICAgIF07CiAgICB2YXIgSGVhZGluZzUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTN2LTNoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNy43Yy40LjIuOC4zIDEuMy4zIDEuNSAwIDIuNy0xLjEgMi43LTIuNVMxOS44IDEzIDE4LjMgMTNIMTciIH1dCiAgICBdOwogICAgdmFyIEhlYWRpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjBWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMFY0IiB9XQogICAgXTsKICAgIHZhciBIZWFkcGhvbmVPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNGgtMS4zNDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4xMjggMy40N0E5IDkgMCAwIDEgMjEgMTJ2My4zNDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjQxNCAyMC40MTRBMiAyIDAgMCAxIDE5IDIxaC0xYTIgMiAwIDAgMS0yLTJ2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNGgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtN2E5IDkgMCAwIDEgMi42MzYtNi4zNjQiIH1dCiAgICBdOwogICAgdmFyIEhlYWRwaG9uZXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDE0aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi03YTkgOSAwIDAgMSAxOCAwdjdhMiAyIDAgMCAxLTIgMmgtMWEyIDIgMCAwIDEtMi0ydi0zYTIgMiAwIDAgMSAyLTJoMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSGVhZHNldCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMTFoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTVabTAgMGE5IDkgMCAxIDEgMTggMG0wIDB2NWEyIDIgMCAwIDEtMiAyaC0xYTIgMiAwIDAgMS0yLTJ2LTNhMiAyIDAgMCAxIDItMmgzWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNnYyYTQgNCAwIDAgMS00IDRoLTUiIH1dCiAgICBdOwogICAgdmFyIEhlYXJ0Q3JhY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi40MDkgNS44MjRjLS43MDIuNzkyLTEuMTUgMS40OTYtMS40MTUgMi4xNjZsMi4xNTMgMi4xNTZhLjUuNSAwIDAgMSAwIC43MDdsLTIuMjkzIDIuMjkzYS41LjUgMCAwIDAgMCAuNzA3TDEyIDE1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjUwOCAyMC4zMTNhMiAyIDAgMCAxLTMgLjAxOUw1IDE1Yy0xLjUtMS41LTMtMy4yLTMtNS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzcuNi42IDAgMCAwIC44MTguMDAxQTUuNSA1LjUgMCAwIDEgMjIgOS41YzAgMi4yOS0xLjUgNC0zIDUuNXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhlYXJ0SGFuZHNoYWtlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuNDE0IDE0LjQxNEMyMSAxMi44MjggMjIgMTEuNSAyMiA5LjVhNS41IDUuNSAwIDAgMC05LjU5MS0zLjY3Ni42LjYgMCAwIDEtLjgxOC4wMDFBNS41IDUuNSAwIDAgMCAyIDkuNWMwIDIuMyAxLjUgNCAzIDUuNWw1LjUzNSA1LjM2MmEyIDIgMCAwIDAgMi44NzkuMDUyIDIuMTIgMi4xMiAwIDAgMC0uMDA0LTMgMi4xMjQgMi4xMjQgMCAxIDAgMy0zIDIuMTI0IDIuMTI0IDAgMCAwIDMuMDA0IDAgMiAyIDAgMCAwIDAtMi44MjhsLTEuODgxLTEuODgyYTIuNDEgMi40MSAwIDAgMC0zLjQwOSAwbC0xLjcxIDEuNzFhMiAyIDAgMCAxLTIuODI4IDAgMiAyIDAgMCAxIDAtMi44MjhsMi44MjMtMi43NjIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhlYXJ0TWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNC44NzYgMTguOTktMS4zNjggMS4zMjNhMiAyIDAgMCAxLTMgLjAxOUw1IDE1Yy0xLjUtMS41LTMtMy4yLTMtNS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzYuNTYuNTYgMCAwIDAgLjgxOCAwQTUuNDkgNS40OSAwIDAgMSAyMiA5LjVhNS4yIDUuMiAwIDAgMS0uMjQ0IDEuNTcyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1aDYiIH1dCiAgICBdOwogICAgdmFyIEhlYXJ0T2ZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuNSA0Ljg5M2E1LjUgNS41IDAgMCAxIDEuMDkxLjkzMS41Ni41NiAwIDAgMCAuODE4IDBBNS40OSA1LjQ5IDAgMCAxIDIyIDkuNWMwIDEuODcyLTEuMDAyIDMuMzU2LTIuMTg3IDQuNjU1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE2Ljk2NyAxNi45NjctMy40NTkgMy4zNDZhMiAyIDAgMCAxLTMgLjAxOUw1IDE1Yy0xLjUtMS41LTMtMy4yLTMtNS41YTUuNSA1LjUgMCAwIDEgMi43NDctNC43NjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICAgIHZhciBIZWFydFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNC40NzkgMTkuMzc0LS45NzEuOTM5YTIgMiAwIDAgMS0zIC4wMTlMNSAxNWMtMS41LTEuNS0zLTMuMi0zLTUuNWE1LjUgNS41IDAgMCAxIDkuNTkxLTMuNjc2LjU2LjU2IDAgMCAwIC44MTggMEE1LjQ5IDUuNDkgMCAwIDEgMjIgOS41YTUuMiA1LjIgMCAwIDEtLjIxOSAxLjQ5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJ2NiIgfV0KICAgIF07CiAgICB2YXIgSGVhcnRQdWxzZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzYuNTYuNTYgMCAwIDAgLjgxOCAwQTUuNDkgNS40OSAwIDAgMSAyMiA5LjVjMCAyLjI5LTEuNSA0LTMgNS41bC01LjQ5MiA1LjMxM2EyIDIgMCAwIDEtMyAuMDE5TDUgMTVjLTEuNS0xLjUtMy0zLjItMy01LjUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4yMiAxM0g5LjVsLjUtMSAyIDQuNSAyLTcgMS41IDMuNWg1LjI3IiB9XQogICAgXTsKICAgIHZhciBIZWFydCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzYuNTYuNTYgMCAwIDAgLjgxOCAwQTUuNDkgNS40OSAwIDAgMSAyMiA5LjVjMCAyLjI5LTEuNSA0LTMgNS41bC01LjQ5MiA1LjMxM2EyIDIgMCAwIDEtMyAuMDE5TDUgMTVjLTEuNS0xLjUtMy0zLjItMy01LjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhlYXRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDhjMi0zLTItMyAwLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUuNSA4YzItMy0yLTMgMC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDZhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjB2MiIgfV0KICAgIF07CiAgICB2YXIgSGV4YWdvbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSGVsaWNvcHRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM3Y4YTIgMiAwIDAgMCAyIDJoNS44NjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxN2E0IDQgMCAwIDAgNC00IDggNiAwIDAgMC04LTYgNiA1IDAgMCAwLTYgNXYzYTIgMiAwIDAgMCAyIDJ6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTB2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDNoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMWgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEzSDIiIH1dCiAgICBdOwogICAgdmFyIEhpZ2hsaWdodGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMS02IDZ2M2g5bDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxMi00LjYgNC42YTIgMiAwIDAgMS0yLjggMGwtNS4yLTUuMmEyIDIgMCAwIDEgMC0yLjhMMTQgNCIgfV0KICAgIF07CiAgICB2YXIgSGlzdG9yeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2NWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2NWw0IDIiIH1dCiAgICBdOwogICAgdmFyIEhvcE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjgyIDE2LjEyYzEuNjkuNiAzLjkxLjc5IDUuMTguODUuMjguMDEuNTMtLjA5LjctLjI3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTEuMTQgMjAuNTdjLjUyLjI0IDIuNDQgMS4xMiA0LjA4IDEuMzcuNDYuMDYuODYtLjI1LjktLjcxLjEyLTEuNTItLjMtMy40My0uNS00LjI4IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi4xMyAyMS4wNWMxLjY1LjYzIDMuNjguODQgNC44Ny45MWEuOS45IDAgMCAwIC43LS4yNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTE3Ljk5IDUuNTJhMjAuODMgMjAuODMgMCAwIDEgMy4xNSA0LjUuOC44IDAgMCAxLS42OCAxLjEzYy0xLjE3LjEtMi41LjAyLTMuOS0uMjUiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjU3IDExLjE0Yy4yNC41MiAxLjEyIDIuNDQgMS4zNyA0LjA4LjA0LjMtLjA4LjU5LS4zMS43NSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00LjkzIDQuOTNhMTAgMTAgMCAwIDAtLjY3IDEzLjRjLjM1LjQzLjk2LjQgMS4xNy0uMTIuNjktMS43MSAxLjA3LTUuMDcgMS4wNy02LjcxIDEuMzQuNDUgMy4xLjkgNC44OC42MmEuODUuODUgMCAwIDAgLjQ4LS4yNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTUuNTIgMTcuOTljMS4wNS45NSAyLjkxIDIuNDIgNC41IDMuMTVhLjguOCAwIDAgMCAxLjEzLS42OGMuMi0yLjM0LS4zMy01LjMtMS41Ny04LjI4IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjM1IDIuNjhhMTAgMTAgMCAwIDEgOS45OCAxLjU4Yy40My4zNS40Ljk2LS4xMiAxLjE3LTEuNS42LTQuMy45OC02LjA3IDEuMDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICAgIHZhciBIb3AgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTEwLjgyIDE2LjEyYzEuNjkuNiAzLjkxLjc5IDUuMTguODUuNTUuMDMgMS0uNDIuOTctLjk3LS4wNi0xLjI3LS4yNi0zLjUtLjg1LTUuMTgiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjUgNi41YzEuNjQgMCA1LS4zOCA2LjcxLTEuMDcuNTItLjIuNTUtLjgyLjEyLTEuMTdBMTAgMTAgMCAwIDAgNC4yNiAxOC4zM2MuMzUuNDMuOTYuNCAxLjE3LS4xMi42OS0xLjcxIDEuMDctNS4wNyAxLjA3LTYuNzEgMS4zNC40NSAzLjEuOSA0Ljg4LjYyYS44OC44OCAwIDAgMCAuNzMtLjc0Yy4zLTIuMTQtLjE1LTMuNS0uNjEtNC44OCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTE1LjYyIDE2Ljk1Yy4yLjg1LjYyIDIuNzYuNSA0LjI4YS43Ny43NyAwIDAgMS0uOS43IDE2LjY0IDE2LjY0IDAgMCAxLTQuMDgtMS4zNiIgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xNi4xMyAyMS4wNWMxLjY1LjYzIDMuNjguODQgNC44Ny45MWEuOS45IDAgMCAwIC45Ni0uOTYgMTcuNjggMTcuNjggMCAwIDAtLjktNC44NyIgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xNi45NCAxNS42MmMuODYuMiAyLjc3LjYyIDQuMjkuNWEuNzcuNzcgMCAwIDAgLjctLjkgMTYuNjQgMTYuNjQgMCAwIDAtMS4zNi00LjA4IiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTE3Ljk5IDUuNTJhMjAuODIgMjAuODIgMCAwIDEgMy4xNSA0LjUuOC44IDAgMCAxLS42OCAxLjEzYy0yLjMzLjItNS4zLS4zMi04LjI3LTEuNTciIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuOTMgNC45MyAzIDNhLjcuNyAwIDAgMSAwLTEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOS41OCAxMi4xOGMxLjI0IDIuOTggMS43NyA1Ljk1IDEuNTcgOC4yOGEuOC44IDAgMCAxLTEuMTMuNjggMjAuODIgMjAuODIgMCAwIDEtNC41LTMuMTUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhvc3BpdGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxdi0zYTIgMiAwIDAgMC00IDB2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA5aC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExaDJhMiAyIDAgMCAxIDIgMnY2YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi05YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMVY1YTIgMiAwIDAgMC0yLTJIOGEyIDIgMCAwIDAtMiAydjE2IiB9XQogICAgXTsKICAgIHZhciBIb3RlbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIydi02LjU3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDExaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNS40M1YyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNmE1IDUgMCAwIDAtNiAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDExaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDExaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDdoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNCIsIHk6ICIyIiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjIwIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBIb3VyZ2xhc3MgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIyaDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMmgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMnYtNC4xNzJhMiAyIDAgMCAwLS41ODYtMS40MTRMMTIgMTJsLTQuNDE0IDQuNDE0QTIgMiAwIDAgMCA3IDE3LjgyOFYyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDJ2NC4xNzJhMiAyIDAgMCAwIC41ODYgMS40MTRMMTIgMTJsNC40MTQtNC40MTRBMiAyIDAgMCAwIDE3IDYuMTcyVjIiIH1dCiAgICBdOwogICAgdmFyIEhvdXNlSGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjYyIDEzLjhBMi4yNSAyLjI1IDAgMSAxIDEyIDEwLjgzNmEyLjI1IDIuMjUgMCAxIDEgMy4zOCAyLjk2NmwtMi42MjYgMi44NTZhLjk5OC45OTggMCAwIDEtMS41MDcgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxMGEyIDIgMCAwIDEgLjcwOS0xLjUyOGw3LTZhMiAyIDAgMCAxIDIuNTgyIDBsNyA2QTIgMiAwIDAgMSAyMSAxMHY5YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSG91c2VQbHVnID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJWOC45NjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTJWOC45NjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTJhMSAxIDAgMCAxIDEgMXYyYTIgMiAwIDAgMS0yIDJoLTRhMiAyIDAgMCAxLTItMnYtMmExIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjUgMjFINWEyIDIgMCAwIDEtMi0ydi05YTIgMiAwIDAgMSAuNzA5LTEuNTI4bDctNmEyIDIgMCAwIDEgMi41ODIgMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjlhMiAyIDAgMCAxLTIgMmgtNWEyIDIgMCAwIDEtMi0ydi0yIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBIb3VzZVdpZmkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjUgMTMuODY2YTQgNCAwIDAgMSA1IC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN2guMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxMGEyIDIgMCAwIDEgLjcwOS0xLjUyOGw3LTZhMiAyIDAgMCAxIDIuNTgyIDBsNyA2QTIgMiAwIDAgMSAyMSAxMHY5YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEwLjc1NGE4IDggMCAwIDEgMTAgMCIgfV0KICAgIF07CiAgICB2YXIgSG91c2VQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuMzUgMjFINWEyIDIgMCAwIDEtMi0ydi05YTIgMiAwIDAgMSAuNzEtMS41M2w3LTZhMiAyIDAgMCAxIDIuNTggMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjIuMzUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuOCAxMi40QTEgMSAwIDAgMCAxNCAxMmgtNGExIDEgMCAwIDAtMSAxdjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMThoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNXY2IiB9XQogICAgXTsKICAgIHZhciBJY2VDcmVhbUJvd2wgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTEyIDE3YzUgMCA4LTIuNjkgOC02SDRjMCAzLjMxIDMgNiA4IDZtLTQgNGg4bS00LTN2M001LjE0IDExYTMuNSAzLjUgMCAxIDEgNi43MSAwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi4xNCAxMWEzLjUgMy41IDAgMSAxIDYuNzEgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS41IDYuNWEzLjUgMy41IDAgMSAwLTcgMCIgfV0KICAgIF07CiAgICB2YXIgSG91c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMXYtOGExIDEgMCAwIDAtMS0xaC00YTEgMSAwIDAgMC0xIDF2OCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDEwYTIgMiAwIDAgMSAuNzA5LTEuNTI4bDctNmEyIDIgMCAwIDEgMi41ODIgMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBJY2VDcmVhbUNvbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDExIDQuMDggMTAuMzVhMSAxIDAgMCAwIDEuODQgMEwxNyAxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA3QTUgNSAwIDAgMCA3IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgN2EyIDIgMCAwIDEgMCA0SDdhMiAyIDAgMCAxIDAtNCIgfV0KICAgIF07CiAgICB2YXIgSWRDYXJkTGFueWFyZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjUgOGgtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAyLTEgMmgzYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuODk5IDIyQTUgNSAwIDAgMCA3LjEgMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAyIDMgNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNSIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBJZENhcmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4xNyAxNWEzIDMgMCAwIDEgNS42NiAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiMTEiLCByOiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNSIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgSW1hZ2VEb3duID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuMyAyMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2MTBsLTMuMS0zLjFhMiAyIDAgMCAwLTIuODE0LjAxNEw2IDIxIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE5IDMgM3YtNS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDIyIDMtMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjkiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgSW1hZ2VNaW51cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDl2MTBhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDciIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTYiLCB4MjogIjIyIiwgeTE6ICI1IiwgeTI6ICI1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE1LTMuMDg2LTMuMDg2YTIgMiAwIDAgMC0yLjgyOCAwTDYgMjEiIH1dCiAgICBdOwogICAgdmFyIEltYWdlT2ZmID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjQxIDEwLjQxYTIgMiAwIDEgMS0yLjgzLTIuODMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTMuNSIsIHgyOiAiNiIsIHkxOiAiMTMuNSIsIHkyOiAiMjEiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTgiLCB4MjogIjIxIiwgeTE6ICIxMiIsIHkyOiAiMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy41OSAzLjU5QTEuOTkgMS45OSAwIDAgMCAzIDV2MTRhMiAyIDAgMCAwIDIgMmgxNGMuNTUgMCAxLjA1Mi0uMjIgMS40MS0uNTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTVWNWEyIDIgMCAwIDAtMi0ySDkiIH1dCiAgICBdOwogICAgdmFyIEltYWdlUGxheSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1IDE1LjAwM2ExIDEgMCAwIDEgMS41MTctLjg1OWw0Ljk5NyAyLjk5N2ExIDEgMCAwIDEgMCAxLjcxOGwtNC45OTcgMi45OTdhMSAxIDAgMCAxLTEuNTE3LS44NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTIuMTdWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAyMSA1LTUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI5IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEltYWdlUGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTEuNVYxOWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE1LTMuMDg2LTMuMDg2YTIgMiAwIDAgMC0yLjgyOCAwTDYgMjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI5IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEltYWdlVXAgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4zIDIxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxMGwtMy4xLTMuMWEyIDIgMCAwIDAtMi44MTQuMDE0TDYgMjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTkuNSAzLTMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIydi01LjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI5IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEltYWdlVXBzY2FsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoNXY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIxaDJhMiAyIDAgMCAwIDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAyMSA0LjE0NC00LjE0NGExLjIxIDEuMjEgMCAwIDEgMS43MTIgMEwxMyAxOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDNoMyIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMTEiLCB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiMTAiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIEltYWdlMiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE1LTMuMDg2LTMuMDg2YTIgMiAwIDAgMC0yLjgyOCAwTDYgMjEiIH1dCiAgICBdOwogICAgdmFyIEltYWdlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDExLTEuMjk2LTEuMjk2YTIuNCAyLjQgMCAwIDAtMy40MDggMEwxMSAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDhhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDEwYTIgMiAwIDAgMCAyLTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMyIsIGN5OiAiNyIsIHI6ICIxIiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiMiIsIHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgSW1wb3J0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDExIDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA1SDRhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC00IiB9XQogICAgXTsKICAgIHZhciBJbmRpYW5SdXBlZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgM2gxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDhoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxMyA4LjUgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEzaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM2M2LjY2NyAwIDYuNjY3LTEwIDAtMTAiIH1dCiAgICBdOwogICAgdmFyIEluZmluaXR5MiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTZjNSAwIDctOCAxMi04YTQgNCAwIDAgMSAwIDhjLTUgMC03LTgtMTItOGE0IDQgMCAxIDAgMCA4IiB9XQogICAgXTsKICAgIHZhciBJbmZvMiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDhoLjAxIiB9XQogICAgXTsKICAgIHZhciBJbmJveCA9IFsKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMjIgMTIgMTYgMTIgMTQgMTUgMTAgMTUgOCAxMiAyIDEyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTUuNDUgNS4xMSAyIDEydjZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi02bC0zLjQ1LTYuODlBMiAyIDAgMCAwIDE2Ljc2IDRINy4yNGEyIDIgMCAwIDAtMS43OSAxLjExeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSW5zcGVjdGlvblBhbmVsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxN2guMDEiIH1dCiAgICBdOwogICAgdmFyIEl0YWxpYyA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIxMCIsIHkxOiAiNCIsIHkyOiAiNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNCIsIHgyOiAiNSIsIHkxOiAiMjAiLCB5MjogIjIwIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICI5IiwgeTE6ICI0IiwgeTI6ICIyMCIgfV0KICAgIF07CiAgICB2YXIgSW5zdGFncmFtID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIyMCIsIHg6ICIyIiwgeTogIjIiLCByeDogIjUiLCByeTogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTEuMzdBNCA0IDAgMSAxIDEyLjYzIDggNCA0IDAgMCAxIDE2IDExLjM3eiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNy41IiwgeDI6ICIxNy41MSIsIHkxOiAiNi41IiwgeTI6ICI2LjUiIH1dCiAgICBdOwogICAgdmFyIEl0ZXJhdGlvbkNjdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE0IDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTBhOCA4IDAgMSAwLTggOGg4IiB9XQogICAgXTsKICAgIHZhciBJdGVyYXRpb25DdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBhOCA4IDAgMSAxIDggOEg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMjItNC00IDQtNCIgfV0KICAgIF07CiAgICB2YXIgSmFwYW5lc2VZZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA5LjVWMjFtMC0xMS41TDYgM202IDYuNUwxOCAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTVoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMWgxMiIgfV0KICAgIF07CiAgICB2YXIgS2FuYmFuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzdjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzdjE4IiB9XQogICAgXTsKICAgIHZhciBLYXlhayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE3YTEgMSAwIDAgMC0xIDF2MWEyIDIgMCAxIDAgMi0yeiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC45NyAzLjYxYS40NS40NSAwIDAgMC0uNTgtLjU4QzEwLjIgNi42IDYuNiAxMC4yIDMuMDMgMjAuMzlhLjQ1LjQ1IDAgMCAwIC41OC41OEMxMy44IDE3LjQgMTcuNCAxMy44IDIwLjk3IDMuNjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi43MDcgNi43MDcgMTAuNTg2IDEwLjU4NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDVhMiAyIDAgMSAwLTIgMmgxYTEgMSAwIDAgMCAxLTF6IiB9XQogICAgXTsKICAgIHZhciBKb3lzdGljayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjJhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0ydi0yWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE1di0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1VjkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNiIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBLZXlSb3VuZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNTg2IDE3LjQxNEEyIDIgMCAwIDAgMiAxOC44MjhWMjFhMSAxIDAgMCAwIDEgMWgzYTEgMSAwIDAgMCAxLTF2LTFhMSAxIDAgMCAxIDEtMWgxYTEgMSAwIDAgMCAxLTF2LTFhMSAxIDAgMCAxIDEtMWguMTcyYTIgMiAwIDAgMCAxLjQxNC0uNTg2bC44MTQtLjgxNGE2LjUgNi41IDAgMSAwLTQtNHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNi41IiwgY3k6ICI3LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XQogICAgXTsKICAgIHZhciBLZXlTcXVhcmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi40IDIuN2EyLjUgMi41IDAgMCAxIDMuNCAwbDUuNSA1LjVhMi41IDIuNSAwIDAgMSAwIDMuNGwtMy43IDMuN2EyLjUgMi41IDAgMCAxLTMuNCAwTDguNyA5LjhhMi41IDIuNSAwIDAgMSAwLTMuNHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgNyAzIDMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtOS40IDEwLjYtNi44MTQgNi44MTRBMiAyIDAgMCAwIDIgMTguODI4VjIxYTEgMSAwIDAgMCAxIDFoM2ExIDEgMCAwIDAgMS0xdi0xYTEgMSAwIDAgMSAxLTFoMWExIDEgMCAwIDAgMS0xdi0xYTEgMSAwIDAgMSAxLTFoLjE3MmEyIDIgMCAwIDAgMS40MTQtLjU4NmwuODE0LS44MTQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEtleTIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS41IDcuNSAyLjMgMi4zYTEgMSAwIDAgMCAxLjQgMGwyLjEtMi4xYTEgMSAwIDAgMCAwLTEuNEwxOSA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDItOS42IDkuNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjcuNSIsIGN5OiAiMTUuNSIsIHI6ICI1LjUiIH1dCiAgICBdOwogICAgdmFyIEtleWJvYXJkTXVzaWMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDhoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJ2NCIgfV0KICAgIF07CiAgICB2YXIgS2V5Ym9hcmRPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0gMjAgNCBBMiAyIDAgMCAxIDIyIDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNIDIyIDYgTCAyMiAxNi40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0gNyAxNiBMIDE2IDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTSA5LjY5IDQgTCAyMCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMEg0YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmguMDEiIH1dCiAgICBdOwogICAgdmFyIEtleWJvYXJkMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE2aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTYiLCB4OiAiMiIsIHk6ICI0Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBMYW1wQ2VpbGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC44MjkgMTUuOTk4YTMgMyAwIDEgMS01LjY1OCAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwLjkyIDE0LjYwNkExIDEgMCAwIDEgMjAgMTZINGExIDEgMCAwIDEtLjkyLTEuMzk0bDMtN0ExIDEgMCAwIDEgNyA3aDEwYTEgMSAwIDAgMSAuOTIuNjA2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTGFtcERlc2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4yOTMgMi4yOTNhMSAxIDAgMCAxIDEuNDE0IDBsMi41IDIuNSA1Ljk5NCAxLjIyN2ExIDEgMCAwIDEgLjUwNiAxLjY4N2wtNyA3YTEgMSAwIDAgMS0xLjY4Ny0uNTA2bC0xLjIyNy01Ljk5NC0yLjUtMi41YTEgMSAwIDAgMSAwLTEuNDE0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4yMDcgNC43OTMtMy40MTQgMy40MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFINGExIDEgMCAwIDEtMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjA4NiA2LjUtNC43OTMgNC43OTNhMSAxIDAgMCAwLS4xOCAxLjE3TDcgMTgiIH1dCiAgICBdOwogICAgdmFyIExhbXBGbG9vciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjEyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjkyOSA3LjYyOUExIDEgMCAwIDEgMTcgOUg3YTEgMSAwIDAgMS0uOTI4LTEuMzcxbDItNUExIDEgMCAwIDEgOSAyaDZhMSAxIDAgMCAxIC45MjguNjI5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIyaDYiIH1dCiAgICBdOwogICAgdmFyIExhbXBXYWxsVXAgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS45MjkgOS42MjlBMSAxIDAgMCAxIDE5IDExSDlhMSAxIDAgMCAxLS45MjgtMS4zNzFsMi01QTEgMSAwIDAgMSAxMSA0aDZhMSAxIDAgMCAxIC45MjguNjI5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE1YTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDEtMiAySDVhMSAxIDAgMCAxLTEtMXYtNGExIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4aDRhMiAyIDAgMCAwIDItMnYtNSIgfV0KICAgIF07CiAgICB2YXIgTGFtcFdhbGxEb3duID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuOTI5IDE4LjYyOUExIDEgMCAwIDEgMTkgMjBIOWExIDEgMCAwIDEtLjkyOC0xLjM3MWwyLTVBMSAxIDAgMCAxIDExIDEzaDZhMSAxIDAgMCAxIC45MjguNjI5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDNhMiAyIDAgMCAxIDIgMnYyYTIgMiAwIDAgMS0yIDJINWExIDEgMCAwIDEtMS0xVjRhMSAxIDAgMCAxIDEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA2aDRhMiAyIDAgMCAxIDIgMnY1IiB9XQogICAgXTsKICAgIHZhciBMYW1wID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJ2NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00LjA3NyAxMC42MTVBMSAxIDAgMCAwIDUgMTJoMTRhMSAxIDAgMCAwIC45MjMtMS4zODVsLTMuMDc3LTcuMzg0QTIgMiAwIDAgMCAxNSAySDlhMiAyIDAgMCAwLTEuODQ2IDEuMjNaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjBhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDlhMSAxIDAgMCAxLTEtMXoiIH1dCiAgICBdOwogICAgdmFyIExhbmRQbG90ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgOCA2LTMtNi0zdjEwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTggMTEuOTktNS41IDMuMTRhMSAxIDAgMCAwIDAgMS43NGw4LjUgNC44NmEyIDIgMCAwIDAgMiAwbDguNS00Ljg2YTEgMSAwIDAgMCAwLTEuNzRMMTYgMTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi40OSAxMi44NSAxMS4wMiA2LjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNTEgMTIuODUgNi41IDE5LjE1IiB9XQogICAgXTsKICAgIHZhciBMYW5kbWFyayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE4di03IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjEyIDIuMTk4YTIgMiAwIDAgMSAxLjc2LjAwNmw3Ljg2NiAzLjg0N2MuNDc2LjIzMy4zMS45NDktLjIyLjk0OUgzLjQ3NGMtLjUzIDAtLjY5NS0uNzE2LS4yMi0uOTQ5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOHYtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxOHYtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIyaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTh2LTciIH1dCiAgICBdOwogICAgdmFyIExhbmd1YWdlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgOCA2IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNCAxNCA2LTYgMi0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNWgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAyMi01LTEwLTUgMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMThoNiIgfV0KICAgIF07CiAgICB2YXIgTGFwdG9wTWluaW1hbENoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMGgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEwIDIgMiA0LTQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjQiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTIiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIExhcHRvcE1pbmltYWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgeDogIjMiLCB5OiAiNCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMjAiLCB5MjogIjIwIiB9XQogICAgXTsKICAgIHZhciBMYXB0b3AgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCA1YTIgMiAwIDAgMSAyIDJ2OC41MjZhMiAyIDAgMCAwIC4yMTIuODk3bDEuMDY4IDIuMTI3YTEgMSAwIDAgMS0uOSAxLjQ1SDMuNjJhMSAxIDAgMCAxLS45LTEuNDVsMS4wNjgtMi4xMjdBMiAyIDAgMCAwIDQgMTUuNTI2VjdhMiAyIDAgMCAxIDItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuMDU0IDE1Ljk4N0gzLjk0NiIgfV0KICAgIF07CiAgICB2YXIgTGFzc29TZWxlY3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIyYTUgNSAwIDAgMS0yLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNi45M2MuOTYuNDMgMS45Ni43NCAyLjk5LjkxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMy4zNCAxNEE2LjggNi44IDAgMCAxIDIgMTBjMC00LjQyIDQuNDgtOCAxMC04czEwIDMuNTggMTAgOGE3LjE5IDcuMTkgMCAwIDEtLjMzIDIiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMThhMiAyIDAgMSAwIDAtNCAyIDIgMCAwIDAgMCA0eiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC4zMyAyMmgtLjA5YS4zNS4zNSAwIDAgMS0uMjQtLjMydi0xMGEuMzQuMzQgMCAwIDEgLjMzLS4zNGMuMDggMCAuMTUuMDMuMjEuMDhsNy4zNCA2YS4zMy4zMyAwIDAgMS0uMjEuNTloLTQuNDlsLTIuNTcgMy44NWEuMzUuMzUgMCAwIDEtLjI4LjE0eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTGFzc28gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjcwNCAxNC40NjdhMTAgOCAwIDEgMSAzLjExNSAyLjM3NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIyYTUgNSAwIDAgMS0yLTMuOTk0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTYiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgTGF1Z2ggPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxM2E2IDYgMCAwIDEtNiA1IDYgNiAwIDAgMS02LTVoMTJaIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkiLCB4MjogIjkuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjE1LjAxIiwgeTE6ICI5IiwgeTI6ICI5IiB9XQogICAgXTsKICAgIHZhciBMYXllcnMyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMgMTMuNzRhMiAyIDAgMCAxLTIgMEwyLjUgOC44N2ExIDEgMCAwIDEgMC0xLjc0TDExIDIuMjZhMiAyIDAgMCAxIDIgMGw4LjUgNC44N2ExIDEgMCAwIDEgMCAxLjc0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0yMCAxNC4yODUgMS41Ljg0NWExIDEgMCAwIDEgMCAxLjc0TDEzIDIxLjc0YTIgMiAwIDAgMS0yIDBsLTguNS00Ljg3YTEgMSAwIDAgMSAwLTEuNzRsMS41LS44NDUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIExheWVyczMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi44MyAyLjE4YTIgMiAwIDAgMC0xLjY2IDBMMi42IDYuMDhhMSAxIDAgMCAwIDAgMS44M2w4LjU4IDMuOTFhMiAyIDAgMCAwIDEuNjYgMGw4LjU4LTMuOWExIDEgMCAwIDAgMC0xLjgzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyYTEgMSAwIDAgMCAuNTguOTFsOC42IDMuOTFhMiAyIDAgMCAwIDEuNjUgMGw4LjU4LTMuOUExIDEgMCAwIDAgMjIgMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxN2ExIDEgMCAwIDAgLjU4LjkxbDguNiAzLjkxYTIgMiAwIDAgMCAxLjY1IDBsOC41OC0zLjlBMSAxIDAgMCAwIDIyIDE3IiB9XQogICAgXTsKICAgIHZhciBMYXllcnNQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuODMgMi4xOGEyIDIgMCAwIDAtMS42NiAwTDIuNiA2LjA4YTEgMSAwIDAgMCAwIDEuODNsOC41OCAzLjkxYTIgMiAwIDAgMCAuODMuMTggMiAyIDAgMCAwIC44My0uMThsOC41OC0zLjlhMSAxIDAgMCAwIDAtMS44MzF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE3aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTR2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyYTEgMSAwIDAgMCAuNTguOTFsOC42IDMuOTFhMiAyIDAgMCAwIC44MjUuMTc4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTdhMSAxIDAgMCAwIC41OC45MWw4LjYgMy45MWEyIDIgMCAwIDAgMS42NSAwbDIuMTE2LS45NjIiIH1dCiAgICBdOwogICAgdmFyIExheW91dERhc2hib2FyZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI5IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNSIsIHg6ICIxNCIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI5IiwgeDogIjE0IiwgeTogIjEyIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI1IiwgeDogIjMiLCB5OiAiMTYiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIExheW91dEdyaWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMTQiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIxNCIsIHk6ICIxNCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjE0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBMYXlvdXRMaXN0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMTQiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNGg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDloNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNWg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIwaDciIH1dCiAgICBdOwogICAgdmFyIExheW91dFBhbmVsTGVmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMTQiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIxNCIsIHk6ICIxNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgTGF5b3V0UGFuZWxUb3AgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjciLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMTQiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMTQiLCB5OiAiMTQiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIExheW91dFRlbXBsYXRlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI5IiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjE0Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjUiLCBoZWlnaHQ6ICI3IiwgeDogIjE2IiwgeTogIjE0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBMZWFmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMSAyMEE3IDcgMCAwIDEgOS44IDYuMUMxNS41IDUgMTcgNC40OCAxOSAyYzEgMiAyIDQuMTggMiA4IDAgNS41LTQuNzggMTAtMTAgMTBaIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYzAtMyAxLjg1LTUuMzYgNS4wOC02QzkuNSAxNC41MiAxMiAxMyAxMyAxMiIgfV0KICAgIF07CiAgICB2YXIgTGVhZnlHcmVlbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMjJjMS4yNS0uOTg3IDIuMjctMS45NzUgMy45LTIuMmE1LjU2IDUuNTYgMCAwIDEgMy44IDEuNSA0IDQgMCAwIDAgNi4xODctMi4zNTMgMy41IDMuNSAwIDAgMCAzLjY5LTUuMTE2QTMuNSAzLjUgMCAwIDAgMjAuOTUgOCAzLjUgMy41IDAgMSAwIDE2IDMuMDVhMy41IDMuNSAwIDAgMC01LjgzMSAxLjM3MyAzLjUgMy41IDAgMCAwLTUuMTE2IDMuNjkgNCA0IDAgMCAwLTIuMzQ4IDYuMTU1QzMuNDk5IDE1LjQyIDQuNDA5IDE2LjcxMiA0LjIgMTguMSAzLjkyNiAxOS43NDMgMy4wMTQgMjAuNzMyIDIgMjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMiAxNyA3IiB9XQogICAgXTsKICAgIHZhciBMZWN0ZXJuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgMTJoM2EyIDIgMCAwIDAgMS45MDItMS4zOGwxLjA1Ni0zLjMzM0ExIDEgMCAwIDAgMjEgNkgzYTEgMSAwIDAgMC0uOTU4IDEuMjg3bDEuMDU2IDMuMzM0QTIgMiAwIDAgMCA1IDEyaDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNlYzYTEgMSAwIDAgMC0xLTFoLTMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjEyIiwgeDogIjgiLCB5OiAiMTAiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIExpYnJhcnlCaWcgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgM3YxOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC40IDE4LjljLjIuNS0uMSAxLjEtLjYgMS4zbC0xLjkuN2MtLjUuMi0xLjEtLjEtMS4zLS42TDExLjEgNS4xYy0uMi0uNS4xLTEuMS42LTEuM2wxLjktLjdjLjUtLjIgMS4xLjEgMS4zLjZaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBMaWJyYXJ5MiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDYgNCAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOHYxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDR2MTYiIH1dCiAgICBdOwogICAgdmFyIExpZmVCdW95ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45MyA0LjkzIDQuMjQgNC4yNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC44MyA5LjE3IDQuMjQtNC4yNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC44MyAxNC44MyA0LjI0IDQuMjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4xNyAxNC44My00LjI0IDQuMjQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNCIgfV0KICAgIF07CiAgICB2YXIgTGlnYXR1cmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMmgydjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjBWOGE0IDQgMCAwIDEgNy40NjQtMiIgfV0KICAgIF07CiAgICB2YXIgTGlnaHRidWxiT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuOCAxMS4yYy44LS45IDEuMi0yIDEuMi0zLjJhNiA2IDAgMCAwLTkuMy01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjMgNi4zYTQuNjcgNC42NyAwIDAgMCAxLjIgNS4yYy43LjcgMS4zIDEuNSAxLjUgMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMThoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMmg0IiB9XQogICAgXTsKICAgIHZhciBMaWdodGJ1bGIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSAxNGMuMi0xIC43LTEuNyAxLjUtMi41IDEtLjkgMS41LTIuMiAxLjUtMy41QTYgNiAwIDAgMCA2IDhjMCAxIC4yIDIuMiAxLjUgMy41LjcuNyAxLjMgMS41IDEuNSAyLjUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIyaDQiIH1dCiAgICBdOwogICAgdmFyIExpbmVTcXVpZ2dsZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNyAzLjVjNS0yIDcgMi41IDMgNEMxLjUgMTAgMiAxNSA1IDE2YzUgMiA5LTEwIDE0LTdzLjUgMTMuNS00IDEyYy01LTIuNS41LTExIDYtMiIgfQogICAgICBdCiAgICBdOwogICAgdmFyIExpbmsyT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN0g3QTUgNSAwIDAgMSA3IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgN2gyYTUgNSAwIDAgMSA0IDgiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiMTIiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIExpbmsgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxM2E1IDUgMCAwIDAgNy41NC41NGwzLTNhNSA1IDAgMCAwLTcuMDctNy4wN2wtMS43MiAxLjcxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDExYTUgNSAwIDAgMC03LjU0LS41NGwtMyAzYTUgNSAwIDAgMCA3LjA3IDcuMDdsMS43MS0xLjcxIiB9XQogICAgXTsKICAgIHZhciBMaW5rMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdIN0E1IDUgMCAwIDEgNyA3aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgN2gyYTUgNSAwIDEgMSAwIDEwaC0yIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE2IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dCiAgICBdOwogICAgdmFyIExpc3RDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE5SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTggMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgTGlua2VkaW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4YTYgNiAwIDAgMSA2IDZ2N2gtNHYtN2EyIDIgMCAwIDAtMi0yIDIgMiAwIDAgMC0yIDJ2N2gtNHYtN2E2IDYgMCAwIDEgNi02eiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiMTIiLCB4OiAiMiIsIHk6ICI5IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiNCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBMaXN0Q2hlY2tzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTloOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDE3IDIgMiA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA3IDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIExpc3RDaGV2cm9uc0Rvd25VcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE5aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNSAzIDMgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE5IDMtMyAzIDMiIH1dCiAgICBdOwogICAgdmFyIExpc3RDaGV2cm9uc1VwRG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE5aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOCAzLTMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE2IDMgMyAzLTMiIH1dCiAgICBdOwogICAgdmFyIExpc3RDb2xsYXBzZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDVoMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJoMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTloMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxMCAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMjAgMy0zLTMtMyIgfV0KICAgIF07CiAgICB2YXIgTGlzdEVuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNi0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDV2MTJhMiAyIDAgMCAxLTIgMmgtNiIgfV0KICAgIF07CiAgICB2YXIgTGlzdEZpbHRlclBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA1SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE5aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDhWMiIgfV0KICAgIF07CiAgICB2YXIgTGlzdEZpbHRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNWgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTloNiIgfV0KICAgIF07CiAgICB2YXIgTGlzdEluZGVudERlY3JlYXNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMkgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOUgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDgtNCA0IDQgNCIgfV0KICAgIF07CiAgICB2YXIgTGlzdEluZGVudEluY3JlYXNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMkgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOUgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDggNCA0LTQgNCIgfV0KICAgIF07CiAgICB2YXIgTGlzdE1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMmgtNiIgfV0KICAgIF07CiAgICB2YXIgTGlzdE11c2ljID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNlY1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE2IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIExpc3RQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA5djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJoLTYiIH1dCiAgICBdOwogICAgdmFyIExpc3RSZXN0YXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE5SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThhNSA1IDAgMCAwIDktMyA0LjUgNC41IDAgMCAwLTQuNS00LjVjLTEuMzMgMC0yLjU0LjU0LTMuNDEgMS40MUwxMSAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMHY0aDQiIH1dCiAgICBdOwogICAgdmFyIExpc3RPcmRlcmVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgNWgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMmgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxOWgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDRoMXY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNSAyMEgzLjRjMC0xIDIuNi0xLjkyNSAyLjYtMy41YTEuNSAxLjUgMCAwIDAtMi42LTEuMDIiIH1dCiAgICBdOwogICAgdmFyIExpc3RTdGFydCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOWgxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA4LTMtMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTlWN2EyIDIgMCAwIDAtMi0yaC02IiB9XQogICAgXTsKICAgIHZhciBMaXN0VG9kbyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE5aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxNyAyIDIgNC00IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICI0Iiwgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgTGlzdFRyZWUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDVoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxOWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBhMiAyIDAgMCAwIDIgMmgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNXYxMmEyIDIgMCAwIDAgMiAyaDMiIH1dCiAgICBdOwogICAgdmFyIExpc3RWaWRlbyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE5SDMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMTIuMDAzYTEgMSAwIDAgMSAxLjUxNy0uODU5bDQuOTk3IDIuOTk3YTEgMSAwIDAgMSAwIDEuNzE4bC00Ljk5NyAyLjk5N2ExIDEgMCAwIDEtMS41MTctLjg2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTGlzdFggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjUgOS41IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC41IDkuNS01IDUiIH1dCiAgICBdOwogICAgdmFyIExpc3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNWgxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTloMTMiIH1dCiAgICBdOwogICAgdmFyIExvYWRlckNpcmNsZSA9IFtbInBhdGgiLCB7IGQ6ICJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiIH1dXTsKICAgIHZhciBMb2FkZXJQaW53aGVlbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyYTEgMSAwIDAgMS0xMCAwIDEgMSAwIDAgMC0xMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjAuN2ExIDEgMCAxIDEgNS04LjcgMSAxIDAgMSAwIDUtOC42IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMy4zYTEgMSAwIDEgMSA1IDguNiAxIDEgMCAxIDAgNSA4LjYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIExvYWRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi4yIDcuOCAyLjktMi45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuMiAxNi4yIDIuOSAyLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTh2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkgMTkuMSAyLjktMi45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkgNC45IDIuOSAyLjkiIH1dCiAgICBdOwogICAgdmFyIExvY2F0ZUZpeGVkID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiNSIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIyMiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMiIsIHkyOiAiNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjE5IiwgeTI6ICIyMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI3IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIExvY2F0ZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE5djMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4Ljg5IDEzLjI0YTcgNyAwIDAgMC04LjEzLTguMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTJoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuMDUgNy4wNWE3IDcgMCAwIDAgOS45IDkuOSIgfV0KICAgIF07CiAgICB2YXIgTG9ja0tleWhvbGVPcGVuID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTYiLCByOiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgeDogIjMiLCB5OiAiMTAiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMFY3YTUgNSAwIDAgMSA5LjMzLTIuNSIgfV0KICAgIF07CiAgICB2YXIgTG9jYXRlID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiNSIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIyMiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMiIsIHkyOiAiNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjE5IiwgeTI6ICIyMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI3IiB9XQogICAgXTsKICAgIHZhciBMb2NrS2V5aG9sZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE2IiwgcjogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjEwIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBWN2E1IDUgMCAwIDEgMTAgMHYzIiB9XQogICAgXTsKICAgIHZhciBMb2NrT3BlbiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTEiLCB4OiAiMyIsIHk6ICIxMSIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDExVjdhNSA1IDAgMCAxIDkuOS0xIiB9XQogICAgXTsKICAgIHZhciBMb2NrID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxMSIsIHg6ICIzIiwgeTogIjExIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTFWN2E1IDUgMCAwIDEgMTAgMHY0IiB9XQogICAgXTsKICAgIHZhciBMb2dJbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE3IDUtNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzaDRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyaC00IiB9XQogICAgXTsKICAgIHZhciBMb2dPdXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNyA1LTUtNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEySDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDQiIH1dCiAgICBdOwogICAgdmFyIExvZ3MgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE5aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTloOCIgfV0KICAgIF07CiAgICB2YXIgTG9sbGlwb3AgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjExIiwgY3k6ICIxMSIsIHI6ICI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIxLTQuMy00LjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTFhMiAyIDAgMCAwIDQgMCA0IDQgMCAwIDAtOCAwIDYgNiAwIDAgMCAxMiAwIiB9XQogICAgXTsKICAgIHZhciBMdWdnYWdlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOFY0YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIwaDQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMjAiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjIwIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIE1haWxDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEzVjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTkgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgTWFnbmV0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTUgNCA0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuMzUyIDEwLjY0OGExLjIwNSAxLjIwNSAwIDAgMCAwIDEuNzA0bDIuMjk2IDIuMjk2YTEuMjA1IDEuMjA1IDAgMCAwIDEuNzA0IDBsNi4wMjktNi4wMjlhMSAxIDAgMSAxIDMgM2wtNi4wMjkgNi4wMjlhMS4yMDUgMS4yMDUgMCAwIDAgMCAxLjcwNGwyLjI5NiAyLjI5NmExLjIwNSAxLjIwNSAwIDAgMCAxLjcwNCAwbDYuMzY1LTYuMzY3QTEgMSAwIDAgMCA4LjcxNiA0LjI4MnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSA4IDQgNCIgfV0KICAgIF07CiAgICB2YXIgTWFpbE1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTVWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMmMwIDEuMS45IDIgMiAyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOWg2IiB9XQogICAgXTsKICAgIHZhciBNYWlsT3BlbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjIgOC40Yy41LjM4LjguOTcuOCAxLjZ2MTBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWMTBhMiAyIDAgMCAxIC44LTEuNmw4LTZhMiAyIDAgMCAxIDIuNCAwbDggNloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTAtOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDEwIiB9XQogICAgXTsKICAgIHZhciBNYWlsUGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEzVjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOWg2IiB9XQogICAgXTsKICAgIHZhciBNYWlsUXVlc3Rpb25NYXJrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTAuNVY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjEyYzAgMS4xLjkgMiAyIDJoMTIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA3LTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE1LjI4Yy4yLS40LjUtLjguOS0xYTIuMSAyLjEgMCAwIDEgMi42LjRjLjMuNC41LjguNSAxLjMgMCAxLjMtMiAyLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMnYuMDEiIH1dCiAgICBdOwogICAgdmFyIE1haWxTZWFyY2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMi41VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg3LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMWEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZaIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMjItMS41LTEuNSIgfV0KICAgIF07CiAgICB2YXIgTWFpbFdhcm5pbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMC41VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMnYuMDEiIH1dCiAgICBdOwogICAgdmFyIE1haWxYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTNWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMmMwIDEuMS45IDIgMiAyaDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxNyA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMTctNCA0IiB9XQogICAgXTsKICAgIHZhciBNYWlsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk5MSA1LjcyN2EyIDIgMCAwIDEtMi4wMDkgMEwyIDciIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjQiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTYiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIE1haWxzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJ2LThhMiAyIDAgMCAxIDEtMS43MzIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNS41LTYuNDE5IDQuMTc5YTIgMiAwIDAgMS0yLjE2MiAwTDcgNS41IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICIzIiwgd2lkdGg6ICIxNSIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBNYWlsYm94ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTdhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWOS41QzIgNyA0IDUgNi41IDVIMThjMi4yIDAgNCAxLjggNCA0djhaIiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMTUsOSAxOCw5IDE4LDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNSA1QzkgNSAxMSA3IDExIDkuNVYxN2EyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjciLCB5MTogIjEwIiwgeTI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgTWFwTWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMSAxOS0xLjEwNi0uNTUyYTIgMiAwIDAgMC0xLjc4OCAwbC0zLjY1OSAxLjgzQTEgMSAwIDAgMSAzIDE5LjM4MVY2LjYxOGExIDEgMCAwIDEgLjU1My0uODk0bDQuNTUzLTIuMjc3YTIgMiAwIDAgMSAxLjc4OCAwbDQuMjEyIDIuMTA2YTIgMiAwIDAgMCAxLjc4OCAwbDMuNjU5LTEuODNBMSAxIDAgMCAxIDIxIDQuNjE5VjE0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDUuNzY0VjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE4aC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMy4yMzZ2MTUiIH1dCiAgICBdOwogICAgdmFyIE1hcFBpbkNoZWNrSW5zaWRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTBjMCA0Ljk5My01LjUzOSAxMC4xOTMtNy4zOTkgMTEuNzk5YTEgMSAwIDAgMS0xLjIwMiAwQzkuNTM5IDIwLjE5MyA0IDE0Ljk5MyA0IDEwYTggOCAwIDAgMSAxNiAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgTWFwUGluQ2hlY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS40MyAxMi45MzVjLjM1Ny0uOTY3LjU3LTEuOTU1LjU3LTIuOTM1YTggOCAwIDAgMC0xNiAwYzAgNC45OTMgNS41MzkgMTAuMTkzIDcuMzk5IDExLjc5OWExIDEgMCAwIDAgMS4yMDIgMCAzMi4xOTcgMzIuMTk3IDAgMCAwIC44MTMtLjcyOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE4IDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIE1hcFBpbkhvdXNlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMjJhMSAxIDAgMCAxLTEtMXYtNGExIDEgMCAwIDEgLjQ0NS0uODMybDMtMmExIDEgMCAwIDEgMS4xMSAwbDMgMkExIDEgMCAwIDEgMjIgMTd2NGExIDEgMCAwIDEtMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMGE4IDggMCAwIDAtMTYgMGMwIDQuOTkzIDUuNTM5IDEwLjE5MyA3LjM5OSAxMS43OTlhMSAxIDAgMCAwIC42MDEuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMnYtMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICIxMCIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBNYXBQaW5NaW51c0luc2lkZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEwYzAgNC45OTMtNS41MzkgMTAuMTkzLTcuMzk5IDExLjc5OWExIDEgMCAwIDEtMS4yMDIgMEM5LjUzOSAyMC4xOTMgNCAxNC45OTMgNCAxMGE4IDggMCAwIDEgMTYgMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwaDYiIH1dCiAgICBdOwogICAgdmFyIE1hcFBpbk1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguOTc3IDE0QzE5LjYgMTIuNzAxIDIwIDExLjM0MyAyMCAxMGE4IDggMCAwIDAtMTYgMGMwIDQuOTkzIDUuNTM5IDEwLjE5MyA3LjM5OSAxMS43OTlhMSAxIDAgMCAwIDEuMjAyIDAgMzIgMzIgMCAwIDAgLjgyNC0uNzM4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThoNiIgfV0KICAgIF07CiAgICB2YXIgTWFwUGluT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIuNzUgNy4wOWEzIDMgMCAwIDEgMi4xNiAyLjE2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjA3MiAxNy4wNzJjLTEuNjM0IDIuMTctMy41MjcgMy45MTItNC40NzEgNC43MjdhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDEuNDMyLTQuNTY4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjQ3NSAyLjgxOEE4IDggMCAwIDEgMjAgMTBjMCAxLjE4My0uMzEgMi4zNzctLjgxIDMuNTMzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMTMgOS4xM2EzIDMgMCAwIDAgMy43NCAzLjc0IiB9XQogICAgXTsKICAgIHZhciBNYXBQaW5QZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy45NyA5LjMwNEE4IDggMCAwIDAgMiAxMGMwIDQuNjkgNC44ODcgOS41NjIgNy4wMjIgMTEuNDY4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjM3OCAxNi42MjZhMSAxIDAgMCAwLTMuMDA0LTMuMDA0bC00LjAxIDQuMDEyYTIgMiAwIDAgMC0uNTA2Ljg1NGwtLjgzNyAyLjg3YS41LjUgMCAwIDAgLjYyLjYybDIuODctLjgzN2EyIDIgMCAwIDAgLjg1NC0uNTA2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICIxMCIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBNYXBQaW5QbHVzSW5zaWRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTBjMCA0Ljk5My01LjUzOSAxMC4xOTMtNy4zOTkgMTEuNzk5YTEgMSAwIDAgMS0xLjIwMiAwQzkuNTM5IDIwLjE5MyA0IDE0Ljk5MyA0IDEwYTggOCAwIDAgMSAxNiAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwaDYiIH1dCiAgICBdOwogICAgdmFyIE1hcFBpblBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS45MTQgMTEuMTA1QTcuMjk4IDcuMjk4IDAgMCAwIDIwIDEwYTggOCAwIDAgMC0xNiAwYzAgNC45OTMgNS41MzkgMTAuMTkzIDcuMzk5IDExLjc5OWExIDEgMCAwIDAgMS4yMDIgMCAzMiAzMiAwIDAgMCAuODI0LS43MzgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE1djYiIH1dCiAgICBdOwogICAgdmFyIE1hcFBpblhJbnNpZGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxMGMwIDQuOTkzLTUuNTM5IDEwLjE5My03LjM5OSAxMS43OTlhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDE2IDAiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSA3LjUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSA3LjUgNSA1IiB9XQogICAgXTsKICAgIHZhciBNYXBQaW5YID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuNzUyIDExLjkwMUE3Ljc4IDcuNzggMCAwIDAgMjAgMTBhOCA4IDAgMCAwLTE2IDBjMCA0Ljk5MyA1LjUzOSAxMC4xOTMgNy4zOTkgMTEuNzk5YTEgMSAwIDAgMCAxLjIwMiAwIDE5IDE5IDAgMCAwIC4wOS0uMDc3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEuNSAxNS41LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMS41IDIwLjUtNS01IiB9XQogICAgXTsKICAgIHZhciBNYXBQaW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxMGMwIDQuOTkzLTUuNTM5IDEwLjE5My03LjM5OSAxMS43OTlhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDE2IDAiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgTWFwUGlubmVkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTggOGMwIDMuNjEzLTMuODY5IDcuNDI5LTUuMzkzIDguNzk1YTEgMSAwIDAgMS0xLjIxNCAwQzkuODcgMTUuNDI5IDYgMTEuNjEzIDYgOGE2IDYgMCAwIDEgMTIgMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI4IiwgcjogIjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOC43MTQgMTRoLTMuNzFhMSAxIDAgMCAwLS45NDguNjgzbC0yLjAwNCA2QTEgMSAwIDAgMCAzIDIyaDE4YTEgMSAwIDAgMCAuOTQ4LTEuMzE2bC0yLTZhMSAxIDAgMCAwLS45NDktLjY4NGgtMy43MTIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIE1hcFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMSAxOS0xLjEwNi0uNTUyYTIgMiAwIDAgMC0xLjc4OCAwbC0zLjY1OSAxLjgzQTEgMSAwIDAgMSAzIDE5LjM4MVY2LjYxOGExIDEgMCAwIDEgLjU1My0uODk0bDQuNTUzLTIuMjc3YTIgMiAwIDAgMSAxLjc4OCAwbDQuMjEyIDIuMTA2YTIgMiAwIDAgMCAxLjc4OCAwbDMuNjU5LTEuODNBMSAxIDAgMCAxIDIxIDQuNjE5VjEyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDUuNzY0VjEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE1djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMThoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzLjIzNnYxNSIgfV0KICAgIF07CiAgICB2YXIgTWFwMiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0LjEwNiA1LjU1M2EyIDIgMCAwIDAgMS43ODggMGwzLjY1OS0xLjgzQTEgMSAwIDAgMSAyMSA0LjYxOXYxMi43NjRhMSAxIDAgMCAxLS41NTMuODk0bC00LjU1MyAyLjI3N2EyIDIgMCAwIDEtMS43ODggMGwtNC4yMTItMi4xMDZhMiAyIDAgMCAwLTEuNzg4IDBsLTMuNjU5IDEuODNBMSAxIDAgMCAxIDMgMTkuMzgxVjYuNjE4YTEgMSAwIDAgMSAuNTUzLS44OTRsNC41NTMtMi4yNzdhMiAyIDAgMCAxIDEuNzg4IDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDUuNzY0djE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMy4yMzZ2MTUiIH1dCiAgICBdOwogICAgdmFyIE1hcnNTdHJva2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA2IDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTcuNzUgNy43NSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjE1IiwgcjogIjYiIH1dCiAgICBdOwogICAgdmFyIE1hcnMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzaDV2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTYuNzUgNi43NSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICIxNCIsIHI6ICI2IiB9XQogICAgXTsKICAgIHZhciBNYXJ0aW5pID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDExdjExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDMtNyA4LTctOFoiIH1dCiAgICBdOwogICAgdmFyIE1heGltaXplMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDNoNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtNyA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMjEgNy03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFIM3YtNiIgfV0KICAgIF07CiAgICB2YXIgTWF4aW1pemUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDNINWEyIDIgMCAwIDAtMiAydjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOFY1YTIgMiAwIDAgMC0yLTJoLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNnYzYTIgMiAwIDAgMCAyIDJoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMWgzYTIgMiAwIDAgMCAyLTJ2LTMiIH1dCiAgICBdOwogICAgdmFyIE1lZGFsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy4yMSAxNSAyLjY2IDcuMTRhMiAyIDAgMCAxIC4xMy0yLjJMNC40IDIuOEEyIDIgMCAwIDEgNiAyaDEyYTIgMiAwIDAgMSAxLjYuOGwxLjYgMi4xNGEyIDIgMCAwIDEgLjE0IDIuMkwxNi43OSAxNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMiA1LjEyIDIuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyAxMiA1Ljg4LTkuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDdoOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNyIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4di0yaC0uNSIgfV0KICAgIF07CiAgICB2YXIgTWVnYXBob25lT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuNjM2IDZBMTMgMTMgMCAwIDAgMTkuNCAzLjIgMSAxIDAgMCAxIDIxIDR2MTEuMzQ0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjM3OCAxNC4zNTdBMTMgMTMgMCAwIDAgMTEgMTRINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE0YTEyIDEyIDAgMCAwIDIuNCA3LjIgMiAyIDAgMCAwIDMuMi0yLjRBOCA4IDAgMCAxIDEwIDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOHY2IiB9XQogICAgXTsKICAgIHZhciBNZWdhcGhvbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSA2YTEzIDEzIDAgMCAwIDguNC0yLjhBMSAxIDAgMCAxIDIxIDR2MTJhMSAxIDAgMCAxLTEuNi44QTEzIDEzIDAgMCAwIDExIDE0SDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTRhMTIgMTIgMCAwIDAgMi40IDcuMiAyIDIgMCAwIDAgMy4yLTIuNEE4IDggMCAwIDEgMTAgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA2djgiIH1dCiAgICBdOwogICAgdmFyIE1laCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE2IiwgeTE6ICIxNSIsIHkyOiAiMTUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiOS4wMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dCiAgICBdOwogICAgdmFyIE1lbW9yeVN0aWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTh2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTh2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMWgxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTh2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuNSAxMUgyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE4di0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOHYtMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNiIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxMCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgTWVudSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNWgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTloMTYiIH1dCiAgICBdOwogICAgdmFyIE1lcmdlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYxMC4zYTQgNCAwIDAgMS0xLjE3MiAyLjg3Mkw0IDIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDIyLTUtNSIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZUNpcmNsZUNvZGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCA5LTMgMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTUgMy0zLTMtMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTWVzc2FnZUNpcmNsZURhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjEgMi4xODJhMTAgMTAgMCAwIDEgMy44IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuOSAyMS44MThhMTAgMTAgMCAwIDEtMy44IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNjA5IDMuNzJhMTAgMTAgMCAwIDEgMi42OSAyLjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi4xODIgMTMuOWExMCAxMCAwIDAgMSAwLTMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4yOCAxNy42MWExMCAxMCAwIDAgMS0yLjcgMi42OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS44MTggMTAuMWExMCAxMCAwIDAgMSAwIDMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjcyMSA2LjM5MWExMCAxMCAwIDAgMSAyLjctMi42OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjE2MyAyMS4xMTctMi45MDYuODVhMSAxIDAgMCAxLTEuMjM2LTEuMTY5bC45NjUtMi45OCIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZUNpcmNsZUhlYXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy44MjggMTMuMDdBMyAzIDAgMCAxIDEyIDguNzY0YTMgMyAwIDAgMSA1LjAwNCAyLjIyNCAzIDMgMCAwIDEtLjgzMiAyLjA4M2wtMy40NDcgMy42MmExIDEgMCAwIDEtMS40NS0uMDAxeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTWVzc2FnZUNpcmNsZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00LjkzIDQuOTI5YTEwIDEwIDAgMCAwLTEuOTM4IDExLjQxMiAyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMCAwIDExLjMwMi0xLjk4OSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjM1IDIuNjlBMTAgMTAgMCAwIDEgMjEuMyAxNS42NSIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZUNpcmNsZU1vcmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLjAxIiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlQ2lyY2xlUGx1cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VDaXJjbGVRdWVzdGlvbk1hcmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN2guMDEiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VDaXJjbGVSZXBseSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE1LTMtMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMmg4YTIgMiAwIDAgMSAyIDJ2MSIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZUNpcmNsZVdhcm5pbmcgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZoLjAxIiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlQ2lyY2xlWCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDktNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgOSA2IDYiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VDaXJjbGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZUNvZGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgOC0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE0IDMtMy0zLTMiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVEYXNoZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE2djUuMjg2YS43MS43MSAwIDAgMCAxLjIxMi41MDJsMS4xNDktMS4xNDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTlhMiAyIDAgMCAwIDItMnYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDZWNWEyIDIgMCAwIDAtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgM2EyIDIgMCAwIDAtMiAydjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggM2gyIiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlU3F1YXJlRGlmZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDE3YTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMjEuMjg2VjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDloNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djQiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVEb3QgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi43IDNINGEyIDIgMCAwIDAtMiAydjE2LjI4NmEuNzEuNzEgMCAwIDAgMS4yMTIuNTAybDIuMjAyLTIuMjAyQTIgMiAwIDAgMSA2LjgyOCAxOUgyMGEyIDIgMCAwIDAgMi0ydi00LjciCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiNiIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlU3F1YXJlSGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy41IDkuNWMwIC42ODcuMjY1IDEuMzgzLjY5NyAxLjg0NGwzLjAwOSAzLjI2NGExLjE0IDEuMTQgMCAwIDAgLjQwNy4zMTQgMSAxIDAgMCAwIC43ODMtLjAwNCAxLjE0IDEuMTQgMCAwIDAgLjM5OC0uMzFsMy4wMDgtMy4yNjRBMi43NyAyLjc3IDAgMCAwIDE2LjUgOS41IDIuNSAyLjUgMCAwIDAgMTIgOGEyLjUgMi41IDAgMCAwLTQuNSAxLjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVMb2NrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgOC41VjVhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTYuMjg2YS43MS43MSAwIDAgMCAxLjIxMi41MDJsMi4yMDItMi4yMDJBMiAyIDAgMCAxIDYuODI4IDE5SDEwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE1di0yYTIgMiAwIDAgMC00IDB2MiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE0IiwgeTogIjE1Iiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZU1vcmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDExaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDExaC4wMSIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZU9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5IDE5SDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43LjcgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMS4xODQtMS44MjYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNjU2IDNIMjBhMiAyIDAgMCAxIDIgMnYxMS4zNDQiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDExaDYiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVRdW90ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0YTIgMiAwIDAgMCAyLTJWOGgtMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNGEyIDIgMCAwIDAgMi0yVjhIOCIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZVJlcGx5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDgtMyAzIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNHYtMWEyIDIgMCAwIDAtMi0ySDciIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVTaGFyZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDNINGEyIDIgMCAwIDAtMiAydjE2LjI4NmEuNzEuNzEgMCAwIDAgMS4yMTIuNTAybDIuMjAyLTIuMjAyQTIgMiAwIDAgMSA2LjgyOCAxOUgyMGEyIDIgMCAwIDAgMi0ydi00IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDkgNi02IiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlU3F1YXJlVGV4dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDE3YTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMjEuMjg2VjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDExaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDdoOCIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZVdhcm5pbmcgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2NCIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZVggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSA4LjUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSA4LjUgNSA1IiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlU3F1YXJlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBNZXNzYWdlc1NxdWFyZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2IDEwYTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMTQuMjg2VjRhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCA5YTIgMiAwIDAgMSAyIDJ2MTAuMjg2YS43MS43MSAwIDAgMS0xLjIxMi41MDJsLTIuMjAyLTIuMjAyQTIgMiAwIDAgMCAxNy4xNzIgMTlIMTBhMiAyIDAgMCAxLTItMnYtMSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTWljT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTl2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA5LjM0VjVhMyAzIDAgMCAwLTUuNjgtMS4zMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi45NSAxNi45NUE3IDcgMCAwIDEgNSAxMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC44OSAxMy4yM0E3IDcgMCAwIDAgMTkgMTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOXYzYTMgMyAwIDAgMCA1LjEyIDIuMTIiIH1dCiAgICBdOwogICAgdmFyIE1pY1ZvY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgNy42MDEtNS45OTQgOC4xOWExIDEgMCAwIDAgLjEgMS4yOThsLjgxNy44MThhMSAxIDAgMCAwIDEuMzE0LjA4N0wxNS4wOSAxMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNi41IDIxLjE3NEMxNS41IDIwLjUgMTQuMzcyIDIwIDEzIDIwYy0yLjA1OCAwLTMuOTI4IDIuMzU2LTYgMi0yLjA3Mi0uMzU2LTIuNzc1LTMuMzY5LTEuNS00LjUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiNyIsIHI6ICI1IiB9XQogICAgXTsKICAgIHZhciBNaWMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOXYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEwdjJhNyA3IDAgMCAxLTE0IDB2LTIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI5IiwgeTogIjIiLCB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMyIsIHJ4OiAiMyIgfV0KICAgIF07CiAgICB2YXIgTWljcm9jaGlwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxN2g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDdoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA2aDIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI2IiwgeTogIjIiLCB3aWR0aDogIjEyIiwgaGVpZ2h0OiAiMjAiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIE1pY3Jvc2NvcGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMmgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMmE3IDcgMCAxIDAgMC0xNGgtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE0aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMmEyIDIgMCAwIDEtMi0yVjZoNnY0YTIgMiAwIDAgMS0yIDJaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZWM2ExIDEgMCAwIDAtMS0xSDlhMSAxIDAgMCAwLTEgMXYzIiB9XQogICAgXTsKICAgIHZhciBNaWNyb3dhdmUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE1IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNyIsIHg6ICI2IiwgeTogIjgiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOHY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTl2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxOXYyIiB9XQogICAgXTsKICAgIHZhciBNaWxlc3RvbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM3Y4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDZhMSAxIDAgMCAwLTEgMXY1YTEgMSAwIDAgMCAxIDFoMTNhMiAyIDAgMCAwIDEuMTUyLS4zNjVsMy40MjQtMi4zMTdhMSAxIDAgMCAwIDAtMS42MzVsLTMuNDI0LTIuMzE4QTIgMiAwIDAgMCAxNyA2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTWlsa09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMmg4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMnYxLjM0M00xNSAydjIuNzg5YTQgNCAwIDAgMCAuNjcyIDIuMjE5bC42NTYuOTg0YTQgNCAwIDAgMSAuNjcyIDIuMjJ2MS4xMzFNNy44IDcuOGwtLjEyOC4xOTJBNCA0IDAgMCAwIDcgMTAuMjEyVjIwYTIgMiAwIDAgMCAyIDJoNmEyIDIgMCAwIDAgMi0ydi0zIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVhNi40NyA2LjQ3IDAgMCAxIDUgMCA2LjQ3MiA2LjQ3MiAwIDAgMCAzLjQzNS40MzUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICAgIHZhciBNaWxrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyaDgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSAydjIuNzg5YTQgNCAwIDAgMS0uNjcyIDIuMjE5bC0uNjU2Ljk4NEE0IDQgMCAwIDAgNyAxMC4yMTJWMjBhMiAyIDAgMCAwIDIgMmg2YTIgMiAwIDAgMCAyLTJ2LTkuNzg5YTQgNCAwIDAgMC0uNjcyLTIuMjE5bC0uNjU2LS45ODRBNCA0IDAgMCAxIDE1IDQuNzg4VjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNWE2LjQ3MiA2LjQ3MiAwIDAgMSA1IDAgNi40NyA2LjQ3IDAgMCAwIDUgMCIgfV0KICAgIF07CiAgICB2YXIgTWluaW1pemUyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTAgNy03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEwaC02VjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAyMSA3LTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNGg2djYiIH1dCiAgICBdOwogICAgdmFyIE1pbmltaXplID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzdjNhMiAyIDAgMCAxLTIgMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDhoLTNhMiAyIDAgMCAxLTItMlYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTZoM2EyIDIgMCAwIDEgMiAydjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjF2LTNhMiAyIDAgMCAxIDItMmgzIiB9XQogICAgXTsKICAgIHZhciBNaW51cyA9IFtbInBhdGgiLCB7IGQ6ICJNNSAxMmgxNCIgfV1dOwogICAgdmFyIE1vbml0b3JDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMiAyIDQtNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0KICAgIF07CiAgICB2YXIgTW9uaXRvckNsb3VkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTNhMyAzIDAgMSAxIDIuODMtNEgxNGEyIDIgMCAwIDEgMCA0eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMyIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgTW9uaXRvckNvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuMzA1IDcuNTMuOTIzLS4zODIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMjI4IDQuODUyLS45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi44NTIgMy4yMjgtLjM4My0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiA4Ljc3Mi0uMzgzLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4xNDggMy4yMjguMzgzLS45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuNTMgOS42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiA0Ljg1Mi45MjQtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgNy4xNDguOTI0LjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxM3YyYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICI2IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIE1vbml0b3JEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTNWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxMC0zIDMtMy0zIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XQogICAgXTsKICAgIHZhciBNb25pdG9yT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxN0g0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMS4xODQtMS44MjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjY1NiAzSDIwYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLS4yOTMgMS4wNDIiIH1dCiAgICBdOwogICAgdmFyIE1vbml0b3JEb3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyLjMwN1YxNWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoOC42OTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjYiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgTW9uaXRvclBhdXNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTNWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM1Y3IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XQogICAgXTsKICAgIHZhciBNb25pdG9yUGxheSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjAzMyA5LjQ0YS42NDcuNjQ3IDAgMCAxIDAgMS4xMmwtNC4wNjUgMi4zNTJhLjY0NS42NDUgMCAwIDEtLjk2OC0uNTZWNy42NDhhLjY0NS42NDUgMCAwIDEgLjk2Ny0uNTZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIzIiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBNb25pdG9yU3BlYWtlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuNSAyMEg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDloLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiMTYiLCB4OiAiMTIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDZINGEyIDIgMCAwIDAtMiAydjZhMiAyIDAgMCAwIDIgMmg0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjE1IiwgcjogIjEiIH1dCiAgICBdOwogICAgdmFyIE1vbml0b3JTdG9wID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxaDgiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjMiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI5IiwgeTogIjciLCB3aWR0aDogIjYiLCBoZWlnaHQ6ICI2Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBNb25pdG9yU21hcnRwaG9uZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDhWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnY3YTIgMiAwIDAgMCAyIDJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxOXYtMy45NiAzLjE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTloNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTAiLCB4OiAiMTYiLCB5OiAiMTIiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIE1vbml0b3JVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM1Y3IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XQogICAgXTsKICAgIHZhciBNb25pdG9yWCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgMTIuNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDEyLjUgNS01IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XQogICAgXTsKICAgIHZhciBNb25pdG9yID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiMTYiLCB5MTogIjIxIiwgeTI6ICIyMSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjE3IiwgeTI6ICIyMSIgfV0KICAgIF07CiAgICB2YXIgTW9vbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwLjk4NSAxMi40ODZhOSA5IDAgMSAxLTkuNDczLTkuNDcyYy40MDUtLjAyMi42MTcuNDYuNDAyLjgwM2E2IDYgMCAwIDAgOC4yNjggOC4yNjhjLjM0NC0uMjE1LjgyNS0uMDA0LjgwMy40MDEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIE1vb25TdGFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDN2NCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC45ODUgMTIuNDg2YTkgOSAwIDEgMS05LjQ3My05LjQ3MmMuNDA1LS4wMjIuNjE3LjQ2LjQwMi44MDNhNiA2IDAgMCAwIDguMjY4IDguMjY4Yy4zNDQtLjIxNS44MjUtLjAwNC44MDMuNDAxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBNb3RvcmJpa2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNC0xLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA5IDYgMmEyIDIgMCAwIDEgMi0yaDJhMiAyIDAgMCAxIDEuOTkgMS44MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE3aDNhMSAxIDAgMCAwIDEtMSA2IDYgMCAwIDEgNi02IDEgMSAwIDAgMCAxLTF2LS43NUE1IDUgMCAwIDAgMTcgNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxNyIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTciLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgTW91bnRhaW5Tbm93ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAzIDQgOCA1LTUgNSAxNUgyTDggM3oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4xNCAxNS4wOGMyLjYyLTEuNTcgNS4yNC0xLjQzIDcuODYuNDIgMi43NCAxLjk0IDUuNDkgMiA4LjIzLjE5IiB9XQogICAgXTsKICAgIHZhciBNb3VudGFpbiA9IFtbInBhdGgiLCB7IGQ6ICJtOCAzIDQgOCA1LTUgNSAxNUgyTDggM3oiIH1dXTsKICAgIHZhciBNb3VzZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2LjM0MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC4yMTggMTguMjE4QTcgNyAwIDAgMSA1IDE1VjlhNyA3IDAgMCAxIC43ODItMy4yMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTMuMzQzVjlBNyA3IDAgMCAwIDguNTYgMi45MDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjIgMiAyIiB9XQogICAgXTsKICAgIHZhciBNb3VzZVBvaW50ZXIyT2ZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTUuNTUgOC40NSA1LjEzOCAyLjA4N2EuNS41IDAgMCAxLS4wNjMuOTQ3bC02LjEyNCAxLjU4YTIgMiAwIDAgMC0xLjQzOCAxLjQzNWwtMS41NzkgNi4xMjZhLjUuNSAwIDAgMS0uOTQ3LjA2M0w4LjQ1IDE1LjU1MSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyIDIgMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi44MTYgMTEuNTI4LTIuNzc5LTYuODRhLjQ5NS40OTUgMCAwIDEgLjY1MS0uNjUxbDYuODQgMi43NzkiIH1dCiAgICBdOwogICAgdmFyIE1vdXNlUG9pbnRlcjIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00LjAzNyA0LjY4OGEuNDk1LjQ5NSAwIDAgMSAuNjUxLS42NTFsMTYgNi41YS41LjUgMCAwIDEtLjA2My45NDdsLTYuMTI0IDEuNThhMiAyIDAgMCAwLTEuNDM4IDEuNDM1bC0xLjU3OSA2LjEyNmEuNS41IDAgMCAxLS45NDcuMDYzeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTW91c2VQb2ludGVyQmFuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi4wMzQgMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDRMOC4yMDQgNy41NDVhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjYgMy40NDNhLjUuNSAwIDAgMS0uOTQ0LjAzM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMTYiLCByOiAiNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMS44IDExLjggOC40IDguNCIgfV0KICAgIF07CiAgICB2YXIgTW91c2VQb2ludGVyQ2xpY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA0LjEgMTIgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01LjEgOC0yLjktLjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxMi0xLjkgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjIgMi4yIDggNS4xIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkuMDM3IDkuNjlhLjQ5OC40OTggMCAwIDEgLjY1My0uNjUzbDExIDQuNWEuNS41IDAgMCAxLS4wNzQuOTQ5bC00LjM0OSAxLjA0MWExIDEgMCAwIDAtLjc0LjczOWwtMS4wNCA0LjM1YS41LjUgMCAwIDEtLjk1LjA3NHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIE1vdXNlUG9pbnRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjU4NiAxMi41ODYgMTkgMTkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy42ODggMy4wMzdhLjQ5Ny40OTcgMCAwIDAtLjY1MS42NTFsNi41IDE1Ljk5OWEuNTAxLjUwMSAwIDAgMCAuOTQ3LS4wNjJsMS41NjktNi4wODNhMiAyIDAgMCAxIDEuNDQ4LTEuNDc5bDYuMTI0LTEuNTc5YS41LjUgMCAwIDAgLjA2My0uOTQ3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTW91c2UgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjUiLCB5OiAiMiIsIHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIyMCIsIHJ4OiAiNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djQiIH1dCiAgICBdOwogICAgdmFyIE1vdmUzZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM3YxNmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDE5IDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDYgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNiAzIDMtMyAzIiB9XQogICAgXTsKICAgIHZhciBNb3ZlRGlhZ29uYWwyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTN2NmgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDExVjVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDUgMTQgMTQiIH1dCiAgICBdOwogICAgdmFyIE1vdmVEaWFnb25hbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE5SDV2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNWg2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgNSA1IDE5IiB9XQogICAgXTsKICAgIHZhciBNb3ZlRG93blJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTNWMTlIMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA1TDE5IDE5IiB9XQogICAgXTsKICAgIHZhciBNb3ZlRG93bkxlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxOUg1VjEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDVMNSAxOSIgfV0KICAgIF07CiAgICB2YXIgTW92ZURvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4TDEyIDIyTDE2IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJWMjIiIH1dCiAgICBdOwogICAgdmFyIE1vdmVIb3Jpem9udGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggOCA0IDQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiA4LTQgNCA0IDQiIH1dCiAgICBdOwogICAgdmFyIE1vdmVSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDhMMjIgMTJMMTggMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMkgyMiIgfV0KICAgIF07CiAgICB2YXIgTW92ZUxlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDhMMiAxMkw2IDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJIMjIiIH1dCiAgICBdOwogICAgdmFyIE1vdmVVcExlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDExVjVIMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA1TDE5IDE5IiB9XQogICAgXTsKICAgIHZhciBNb3ZlVXBSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDVIMTlWMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgNUw1IDE5IiB9XQogICAgXTsKICAgIHZhciBNb3ZlVXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDZMMTIgMkwxNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJWMjIiIH1dCiAgICBdOwogICAgdmFyIE1vdmVWZXJ0aWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxOCA0IDQgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggNiA0LTQgNCA0IiB9XQogICAgXTsKICAgIHZhciBNb3ZlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxOS0zIDMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDkgMyAzLTMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgOS0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgNSAzLTMgMyAzIiB9XQogICAgXTsKICAgIHZhciBNdXNpYzIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjE4IiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThWMmw3IDQiIH1dCiAgICBdOwogICAgdmFyIE11c2ljMyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE4IiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThWMiIgfV0KICAgIF07CiAgICB2YXIgTXVzaWM0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOFY1bDEyLTJ2MTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA5IDEyLTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE2IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIE5hdmlnYXRpb24yT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4zMSA5LjMxIDUgMjFsNy00IDcgNC0xLjE3LTMuMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuNTMgOC44OCAxMiAybC0xLjE3IDMuMTciIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICAgIHZhciBNdXNpYyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMThWNWwxMi0ydjEzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxNiIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBOYXZpZ2F0aW9uMiA9IFtbInBvbHlnb24iLCB7IHBvaW50czogIjEyIDIgMTkgMjEgMTIgMTcgNSAyMSAxMiAyIiB9XV07CiAgICB2YXIgTmF2aWdhdGlvbk9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNDMgOC40MyAzIDExbDggMiAyIDggMi41Ny01LjQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjM5IDExLjczIDIyIDJsLTkuNzMgNC42MSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIE5hdmlnYXRpb24gPSBbWyJwb2x5Z29uIiwgeyBwb2ludHM6ICIzIDExIDIyIDIgMTMgMjEgMTEgMTMgMyAxMSIgfV1dOwogICAgdmFyIE5ldHdvcmsgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjE2IiwgeTogIjE2Iiwgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMTYiLCB3aWR0aDogIjYiLCBoZWlnaHQ6ICI2Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiOSIsIHk6ICIyIiwgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE2di0zYTEgMSAwIDAgMSAxLTFoMTJhMSAxIDAgMCAxIDEgMXYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyVjgiIH1dCiAgICBdOwogICAgdmFyIE5ld3NwYXBlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE4aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE0aC04IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMjJoMTZhMiAyIDAgMCAwIDItMlY0YTIgMiAwIDAgMC0yLTJIOGEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMS00IDB2LTlhMiAyIDAgMCAxIDItMmgyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjEwIiwgeTogIjYiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIE5mYyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOC4zMmE3LjQzIDcuNDMgMCAwIDEgMCA3LjM2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNDYgNi4yMWExMS43NiAxMS43NiAwIDAgMSAwIDExLjU4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjkxIDQuMWExNS45MSAxNS45MSAwIDAgMSAuMDEgMTUuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi4zNyAyYTIwLjE2IDIwLjE2IDAgMCAxIDAgMjAiIH1dCiAgICBdOwogICAgdmFyIE5vbkJpbmFyeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41IDQgNyA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguNSA4IDctNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNyIsIHI6ICI1IiB9XQogICAgXTsKICAgIHZhciBOb3RlYm9va1RhYnMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDZoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMThoNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjIwIiwgeDogIjQiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAydjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDdoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMmg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE3aDUiIH1dCiAgICBdOwogICAgdmFyIE5vdGVib29rUGVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJ2LTcuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDZoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMThoNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggNS42MjZhMSAxIDAgMSAwLTMuMDA0LTMuMDA0bC01LjAxIDUuMDEyYTIgMiAwIDAgMC0uNTA2Ljg1NGwtLjgzNyAyLjg3YS41LjUgMCAwIDAgLjYyLjYybDIuODctLjgzN2EyIDIgMCAwIDAgLjg1NC0uNTA2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTm90ZWJvb2tUZXh0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA2aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTRoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE4aDQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIyMCIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS41IDhoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjUgMTJIMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS41IDE2SDE0IiB9XQogICAgXTsKICAgIHZhciBOb3RlYm9vayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMjAiLCB4OiAiNCIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2MjAiIH1dCiAgICBdOwogICAgdmFyIE5vdGVwYWRUZXh0RGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTh2MmEyIDIgMCAwIDEtMiAyaC0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjJINmEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTR2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA4VjZhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTBoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGg1IiB9XQogICAgXTsKICAgIHZhciBOb3RlcGFkVGV4dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxOCIsIHg6ICI0IiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTRoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4aDUiIH1dCiAgICBdOwogICAgdmFyIE51dE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDRWMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01IDEwdjRhNy4wMDQgNy4wMDQgMCAwIDAgNS4yNzcgNi43ODdjLjQxMi4xMDQuODAyLjI5MiAxLjEwMi41OTJMMTIgMjJsLjYyMS0uNjIxYy4zLS4zLjY5LS40ODggMS4xMDItLjU5MmE3LjAxIDcuMDEgMCAwIDAgNC4xMjUtMi45MzkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTB2My4zNDMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMTJjLTEuMzQ5LS41NzMtMS45MDUtMS4wMDUtMi41LTItLjU0Ni45MDItMS4wNDggMS4zNTMtMi41IDItMS4wMTgtLjY0NC0xLjQ2LTEuMDgtMi0yLTEuMDI4LjcxLTEuNjkuOTE4LTMgMSAxLjA4MS0xLjA0OCAxLjc1Ny0yLjAzIDItMyAuMTk0LS43NzYuODQtMS41NTEgMS43OS0yLjIxbTExLjY1NCA1Ljk5N2MuODg3LS40NTcgMS4yOC0uODkxIDEuNTU2LTEuNzg3IDEuMDMyLjkxNiAxLjY4MyAxLjE1NyAzIDEtMS4yOTctMS4wMzYtMS43NTgtMi4wMy0yLTMtLjUtMi00LTQtOC00LS43NCAwLTEuNDYxLjA2OC0yLjE1LjE5MiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIE51dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDRWMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01IDEwdjRhNy4wMDQgNy4wMDQgMCAwIDAgNS4yNzcgNi43ODdjLjQxMi4xMDQuODAyLjI5MiAxLjEwMi41OTJMMTIgMjJsLjYyMS0uNjIxYy4zLS4zLjY5LS40ODggMS4xMDItLjU5MkE3LjAwMyA3LjAwMyAwIDAgMCAxOSAxNHYtNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiA0QzggNCA0LjUgNiA0IDhjLS4yNDMuOTctLjkxOSAxLjk1Mi0yIDMgMS4zMS0uMDgyIDEuOTcyLS4yOSAzLTEgLjU0LjkyLjk4MiAxLjM1NiAyIDIgMS40NTItLjY0NyAxLjk1NC0xLjA5OCAyLjUtMiAuNTk1Ljk5NSAxLjE1MSAxLjQyNyAyLjUgMiAxLjMxLS42MjEgMS44NjItMS4wNTggMi41LTIgLjYyOS45NzcgMS4xNjIgMS40MjMgMi41IDIgMS4yMDktLjU0OCAxLjY4LS45NjcgMi0yIDEuMDMyLjkxNiAxLjY4MyAxLjE1NyAzIDEtMS4yOTctMS4wMzYtMS43NTgtMi4wMy0yLTMtLjUtMi00LTQtOC00WiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgT2N0YWdvbkFsZXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2NCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS4zMTIgMmEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NmwtNC42ODgtNC42ODhBMiAyIDAgMCAxIDIgMTUuMzEyVjguNjg4YTIgMiAwIDAgMSAuNTg2LTEuNDE0bDQuNjg4LTQuNjg4QTIgMiAwIDAgMSA4LjY4OCAyeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgT2N0YWdvbk1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi41ODYgMTYuNzI2QTIgMiAwIDAgMSAyIDE1LjMxMlY4LjY4OGEyIDIgMCAwIDEgLjU4Ni0xLjQxNGw0LjY4OC00LjY4OEEyIDIgMCAwIDEgOC42ODggMmg2LjYyNGEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XQogICAgXTsKICAgIHZhciBPY3RhZ29uUGF1c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE1VjkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi41ODYgMTYuNzI2QTIgMiAwIDAgMSAyIDE1LjMxMlY4LjY4OGEyIDIgMCAwIDEgLjU4Ni0xLjQxNGw0LjY4OC00LjY4OEEyIDIgMCAwIDEgOC42ODggMmg2LjYyNGEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIE9jdGFnb25YID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi41ODYgMTYuNzI2QTIgMiAwIDAgMSAyIDE1LjMxMlY4LjY4OGEyIDIgMCAwIDEgLjU4Ni0xLjQxNGw0LjY4OC00LjY4OEEyIDIgMCAwIDEgOC42ODggMmg2LjYyNGEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA5IDYgNiIgfV0KICAgIF07CiAgICB2YXIgT2N0YWdvbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNTg2IDE2LjcyNkEyIDIgMCAwIDEgMiAxNS4zMTJWOC42ODhhMiAyIDAgMCAxIC41ODYtMS40MTRsNC42ODgtNC42ODhBMiAyIDAgMCAxIDguNjg4IDJoNi42MjRhMiAyIDAgMCAxIDEuNDE0LjU4Nmw0LjY4OCA0LjY4OEEyIDIgMCAwIDEgMjIgOC42ODh2Ni42MjRhMiAyIDAgMCAxLS41ODYgMS40MTRsLTQuNjg4IDQuNjg4YTIgMiAwIDAgMS0xLjQxNC41ODZIOC42ODhhMiAyIDAgMCAxLTEuNDE0LS41ODZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBPbWVnYSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMjBoNC41YS41LjUgMCAwIDAgLjUtLjV2LS4yODJhLjUyLjUyIDAgMCAwLS4yNDctLjQzNyA4IDggMCAxIDEgOC40OTQtLjAwMS41Mi41MiAwIDAgMC0uMjQ3LjQzOHYuMjgyYS41LjUgMCAwIDAgLjUuNUgyMSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgT3B0aW9uID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzaDZsNiAxOGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDNoNyIgfV0KICAgIF07CiAgICB2YXIgT3JiaXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4zNDEgNi40ODRBMTAgMTAgMCAwIDEgMTAuMjY2IDIxLjg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuNjU5IDE3LjUxNkExMCAxMCAwIDAgMSAxMy43NCAyLjE1MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjUiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjE5IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIE9yaWdhbWkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMlY0YTEgMSAwIDAgMSAxLTFoNi4yOTdhMSAxIDAgMCAxIC42NTEgMS43NTlsLTQuNjk2IDQuMDI1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJtMTIgMjEtNy40MTQtNy40MTRBMiAyIDAgMCAxIDQgMTIuMTcyVjYuNDE1YTEuMDAyIDEuMDAyIDAgMCAxIDEuNzA3LS43MDdMMjAgMjAuMDA5IiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMi4yMTQgMy4zODEgOC40MTQgMTQuOTY2YTEgMSAwIDAgMS0uMTY3IDEuMTk5bC0xLjE2OCAxLjE2M2ExIDEgMCAwIDEtLjcwNi4yOTFINi4zNTFhMSAxIDAgMCAxLS42MjUtLjIxOUwzLjI1IDE4LjhhMSAxIDAgMCAxIC42MzEtMS43ODFsNC4xNjUuMDI3IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQYWNrYWdlMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNi43NiAzYTIgMiAwIDAgMSAxLjggMS4xbDIuMjMgNC40NzlhMiAyIDAgMCAxIC4yMS44OTFWMTlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOS40NzJhMiAyIDAgMCAxIC4yMTEtLjg5NEw1LjQ1IDQuMUEyIDIgMCAwIDEgNy4yNCAzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjA1NCA5LjAxM2gxNy44OTMiIH1dCiAgICBdOwogICAgdmFyIFBhY2thZ2VDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE2IDIgMiA0LTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMTBWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDItMS4xNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03LjUgNC4yNyA5IDUuMTUiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIzLjI5IDcgMTIgMTIgMjAuNzEgNyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgICB2YXIgUGFja2FnZU1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxMFY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsMi0xLjE0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuNSA0LjI3IDkgNS4xNSIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjMuMjkgNyAxMiAxMiAyMC43MSA3IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMjIiLCB5MjogIjEyIiB9XQogICAgXTsKICAgIHZhciBQYWNrYWdlT3BlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi05IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjE3IDIuMjFhMS42NyAxLjY3IDAgMCAxIDEuNjMgMEwyMSA0LjU3YTEuOTMgMS45MyAwIDAgMSAwIDMuMzZMOC44MiAxNC43OWExLjY1NSAxLjY1NSAwIDAgMS0xLjY0IDBMMyAxMi40M2ExLjkzIDEuOTMgMCAwIDEgMC0zLjM2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM3YzLjg3YTIuMDYgMi4wNiAwIDAgMS0xLjExIDEuODNsLTYgMy4wOGExLjkzIDEuOTMgMCAwIDEtMS43OCAwbC02LTMuMDhBMi4wNiAyLjA2IDAgMCAxIDQgMTYuODdWMTMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMTIuNDNhMS45MyAxLjkzIDAgMCAwIDAtMy4zNkw4LjgzIDIuMmExLjY0IDEuNjQgMCAwIDAtMS42MyAwTDMgNC41N2ExLjkzIDEuOTMgMCAwIDAgMCAzLjM2bDEyLjE4IDYuODZhMS42MzYgMS42MzYgMCAwIDAgMS42MyAweiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGFja2FnZVBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEzdjYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMTBWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDItMS4xNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03LjUgNC4yNyA5IDUuMTUiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIzLjI5IDcgMTIgMTIgMjAuNzEgNyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgICB2YXIgUGFja2FnZVNlYXJjaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDEwVjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGwyLTEuMTQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNy41IDQuMjcgOSA1LjE1IiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMy4yOSA3IDEyIDEyIDIwLjcxIDciIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIyMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOC41IiwgY3k6ICIxNS41IiwgcjogIjIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4yNyAxNy4yNyAyMiAxOSIgfV0KICAgIF07CiAgICB2YXIgUGFja2FnZVggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxMFY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsMi0xLjE0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuNSA0LjI3IDkgNS4xNSIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjMuMjkgNyAxMiAxMiAyMC43MSA3IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMjIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDEzIDUgNW0tNSAwIDUtNSIgfV0KICAgIF07CiAgICB2YXIgUGFja2FnZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDIxLjczYTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzN6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIyVjEyIiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMy4yOSA3IDEyIDEyIDIwLjcxIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNy41IDQuMjcgOSA1LjE1IiB9XQogICAgXTsKICAgIHZhciBQYWludEJ1Y2tldCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDcgNiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4Ljk5MiAxMkgyLjA0MSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4xNDUgMTguMzhBMy4zNCAzLjM0IDAgMCAxIDIwIDE2LjVhMy4zIDMuMyAwIDAgMS0xLjE0NSAxLjg4Yy0uNTc1LjQ2LS44NTUgMS4wMi0uODU1IDEuNTk1QTIgMiAwIDAgMCAyMCAyMmEyIDIgMCAwIDAgMi0yLjAyNWMwLS41OC0uMjg1LTEuMTMtLjg1NS0xLjU5NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm04LjUgNC41IDIuMTQ4LTIuMTQ4YTEuMjA1IDEuMjA1IDAgMCAxIDEuNzA0IDBsNy4yOTYgNy4yOTZhMS4yMDUgMS4yMDUgMCAwIDEgMCAxLjcwNGwtNy41OTIgNy41OTJhMy42MTUgMy42MTUgMCAwIDEtNS4xMTIgMGwtMy44ODgtMy44ODhhMy42MTUgMy42MTUgMCAwIDEgMC01LjExMkw1LjY3IDcuMzMiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFBhaW50Um9sbGVyID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICI2IiwgeDogIjIiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNnYtMmEyIDIgMCAwIDEgMi0yaDhhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMC0yLTJoLTIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNCIsIGhlaWdodDogIjYiLCB4OiAiOCIsIHk6ICIxNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgUGFpbnRicnVzaFZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyYTEgMSAwIDAgMSAxIDF2OUg2VjNhMSAxIDAgMCAxIDEtMXoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAxMmExIDEgMCAwIDAtMSAxdjFhMiAyIDAgMCAwIDIgMmgyYTEgMSAwIDAgMSAxIDF2Mi45YTIgMiAwIDEgMCA0IDBWMTdhMSAxIDAgMCAxIDEtMWgyYTIgMiAwIDAgMCAyLTJ2LTFhMSAxIDAgMCAwLTEtMSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGFpbnRicnVzaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjYyMiAxNy44OTctMTAuNjgtMi45MTMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguMzc2IDIuNjIyYTEgMSAwIDEgMSAzLjAwMiAzLjAwMkwxNy4zNiA5LjY0M2EuNS41IDAgMCAwIDAgLjcwN2wuOTQ0Ljk0NGEyLjQxIDIuNDEgMCAwIDEgMCAzLjQwOGwtLjk0NC45NDRhLjUuNSAwIDAgMS0uNzA3IDBMOC4zNTQgNy4zNDhhLjUuNSAwIDAgMSAwLS43MDdsLjk0NC0uOTQ0YTIuNDEgMi40MSAwIDAgMSAzLjQwOCAwbC45NDQuOTQ0YS41LjUgMCAwIDAgLjcwNyAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDhjLTEuODA0IDIuNzEtMy45NyAzLjQ2LTYuNTgzIDMuOTQ4YS41MDcuNTA3IDAgMCAwLS4zMDIuODE5bDcuMzIgOC44ODNhMSAxIDAgMCAwIDEuMTg1LjIwNEMxMi43MzUgMjAuNDA1IDE2IDE2Ljc5MiAxNiAxNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGFsZXR0ZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDIyYTEgMSAwIDAgMSAwLTIwIDEwIDkgMCAwIDEgMTAgOSA1IDUgMCAwIDEtNSA1aC0yLjI1YTEuNzUgMS43NSAwIDAgMC0xLjQgMi44bC4zLjRhMS43NSAxLjc1IDAgMCAxLTEuNCAyLjh6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTMuNSIsIGN5OiAiNi41IiwgcjogIi41IiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3LjUiLCBjeTogIjEwLjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNi41IiwgY3k6ICIxMi41IiwgcjogIi41IiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjguNSIsIGN5OiAiNy41IiwgcjogIi41IiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0KICAgIF07CiAgICB2YXIgUGFuZGEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS4yNSAxNy4yNWgxLjVMMTIgMTh6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDEyIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2LjVhLjUuNSAwIDAgMC0uNS0uNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC42OSA5LjY3YTQuNSA0LjUgMCAxIDAtNy4wNC01LjUgOC4zNSA4LjM1IDAgMCAwLTMuMyAwIDQuNSA0LjUgMCAxIDAtNy4wNCA1LjVDMi40OSAxMS4yIDIgMTIuODggMiAxNC41IDIgMTkuNDcgNi40OCAyMiAxMiAyMnMxMC0yLjUzIDEwLTcuNWMwLTEuNjItLjQ4LTMuMy0xLjMtNC44MyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDYuNWEuNDk1LjQ5NSAwIDAgMSAuNS0uNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEyLTIgMiIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxCb3R0b21DbG9zZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOC0zIDMtMy0zIiB9XQogICAgXTsKICAgIHZhciBQYW5lbEJvdHRvbURhc2hlZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE1aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTVoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNWgxIiB9XQogICAgXTsKICAgIHZhciBQYW5lbEJvdHRvbU9wZW4gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMy0zIDMgMyIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxMZWZ0Q2xvc2UgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTUtMy0zIDMtMyIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxCb3R0b20gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDE4IiB9XQogICAgXTsKICAgIHZhciBQYW5lbExlZnREYXNoZWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOXYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOXYxIiB9XQogICAgXTsKICAgIHZhciBQYW5lbExlZnRPcGVuID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzdjE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDkgMyAzLTMgMyIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxMZWZ0UmlnaHREYXNoZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMFY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1di0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDIxdi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDVWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwVjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNXYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxdi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNVYzIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBQYW5lbExlZnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDN2MTgiIH1dCiAgICBdOwogICAgdmFyIFBhbmVsUmlnaHRDbG9zZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA5IDMgMy0zIDMiIH1dCiAgICBdOwogICAgdmFyIFBhbmVsUmlnaHREYXNoZWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE5djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDl2MSIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxSaWdodCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dCiAgICBdOwogICAgdmFyIFBhbmVsUmlnaHRPcGVuID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNS0zLTMgMy0zIiB9XQogICAgXTsKICAgIHZhciBQYW5lbFRvcEJvdHRvbURhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE1aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE1aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDloMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aDEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFBhbmVsVG9wQ2xvc2UgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDloMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNiAzLTMgMyAzIiB9XQogICAgXTsKICAgIHZhciBQYW5lbFRvcERhc2hlZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDloMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA5aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aDEiIH1dCiAgICBdOwogICAgdmFyIFBhbmVsVG9wT3BlbiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxNC0zIDMtMy0zIiB9XQogICAgXTsKICAgIHZhciBQYW5lbFRvcCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxOCIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxzTGVmdEJvdHRvbSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1aDEyIiB9XQogICAgXTsKICAgIHZhciBQYW5lbHNSaWdodEJvdHRvbSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YxOCIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxzVG9wTGVmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxVjkiIH1dCiAgICBdOwogICAgdmFyIFBhcGVyY2xpcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE2IDYtOC40MTQgOC41ODZhMiAyIDAgMCAwIDIuODI5IDIuODI5bDguNDE0LTguNTg2YTQgNCAwIDEgMC01LjY1Ny01LjY1N2wtOC4zNzkgOC41NTFhNiA2IDAgMSAwIDguNDg1IDguNDg1bDguMzc5LTguNTUxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQYXJlbnRoZXNlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFzLTQtMy00LTkgNC05IDQtOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzczQgMyA0IDktNCA5LTQgOSIgfV0KICAgIF07CiAgICB2YXIgUGFya2luZ01ldGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTVoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE5djMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuMjgyIDE5YTEgMSAwIDAgMCAuOTQ4LS42OGwyLjM3LTYuOTg4YTcgNyAwIDEgMC0xMy4yIDBsMi4zNyA2Ljk4OGExIDEgMCAwIDAgLjk0OC42OHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5YTMgMyAwIDEgMSA2IDAiIH1dCiAgICBdOwogICAgdmFyIFBhcnR5UG9wcGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNS44IDExLjMgMiAyMmwxMC43LTMuNzkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyMGguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMjIgMi0yLjI0Ljc1YTIuOSAyLjkgMCAwIDAtMS45NiAzLjEyYy4xLjg2LS41NyAxLjYzLTEuNDUgMS42M2gtLjM4Yy0uODYgMC0xLjYuNi0xLjc2IDEuNDRMMTQgMTAiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTMtLjgyLS4zM2MtLjg2LS4zNC0xLjgyLjItMS45OCAxLjExYy0uMTEuNy0uNzIgMS4yMi0xLjQzIDEuMjJIMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgMiAuMzMuODJjLjM0Ljg2LS4yIDEuODItMS4xMSAxLjk4QzkuNTIgNC45IDkgNS41MiA5IDYuMjNWNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSAxM2MxLjkzIDEuOTMgMi44MyA0LjE3IDIgNS0uODMuODMtMy4wNy0uMDctNS0yLTEuOTMtMS45My0yLjgzLTQuMTctMi01IC44My0uODMgMy4wNy4wNyA1IDJaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQYXVzZSA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMTQiLCB5OiAiMyIsIHdpZHRoOiAiNSIsIGhlaWdodDogIjE4Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNSIsIHk6ICIzIiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiMTgiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIFBhd1ByaW50ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiNCIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjgiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjIwIiwgY3k6ICIxNiIsIHI6ICIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTBhNSA1IDAgMCAxIDUgNXYzLjVhMy41IDMuNSAwIDAgMS02Ljg0IDEuMDQ1UTYuNTIgMTcuNDggNC40NiAxNi44NEEzLjUgMy41IDAgMCAxIDUuNSAxMFoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFBjQ2FzZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiMjAiLCB4OiAiNSIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDZoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwaDYiIH1dCiAgICBdOwogICAgdmFyIFBlbkxpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAyMWg4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjE3NCA2LjgxMmExIDEgMCAwIDAtMy45ODYtMy45ODdMMy44NDIgMTYuMTc0YTIgMiAwIDAgMC0uNS44M2wtMS4zMjEgNC4zNTJhLjUuNSAwIDAgMCAuNjIzLjYyMmw0LjM1My0xLjMyYTIgMiAwIDAgMCAuODMtLjQ5N3oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFBlbk9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTEwIDEwLTYuMTU3IDYuMTYyYTIgMiAwIDAgMC0uNS44MzNsLTEuMzIyIDQuMzZhLjUuNSAwIDAgMCAuNjIyLjYyNGw0LjM1OC0xLjMyM2EyIDIgMCAwIDAgLjgzLS41TDE0IDEzLjk4MiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMi44MjkgNy4xNzIgNC4zNTktNC4zNDZhMSAxIDAgMSAxIDMuOTg2IDMuOTg2bC00LjM1MyA0LjM1MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogICAgdmFyIFBlblRvb2wgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS43MDcgMjEuMjkzYTEgMSAwIDAgMS0xLjQxNCAwbC0xLjU4Ni0xLjU4NmExIDEgMCAwIDEgMC0xLjQxNGw1LjU4Ni01LjU4NmExIDEgMCAwIDEgMS40MTQgMGwxLjU4NiAxLjU4NmExIDEgMCAwIDEgMCAxLjQxNHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTggMTMtMS4zNzUtNi44NzRhMSAxIDAgMCAwLS43NDYtLjc3NkwzLjIzNSAyLjAyOGExIDEgMCAwIDAtMS4yMDcgMS4yMDdMNS4zNSAxNS44NzlhMSAxIDAgMCAwIC43NzYuNzQ2TDEzIDE4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIuMyAyLjMgNy4yODYgNy4yODYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgUGVuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGVuY2lsTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIxaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNSA0IDQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGVuY2lsT2ZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTAgMTAtNi4xNTcgNi4xNjJhMiAyIDAgMCAwLS41LjgzM2wtMS4zMjIgNC4zNmEuNS41IDAgMCAwIC42MjIuNjI0bDQuMzU4LTEuMzIzYTIgMiAwIDAgMCAuODMtLjVMMTQgMTMuOTgyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyLjgyOSA3LjE3MiA0LjM1OS00LjM0NmExIDEgMCAxIDEgMy45ODYgMy45ODZsLTQuMzUzIDQuMzUzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDUgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgICB2YXIgUGVuY2lsUnVsZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA3IDguNyAyLjdhMi40MSAyLjQxIDAgMCAwLTMuNCAwTDIuNyA1LjNhMi40MSAyLjQxIDAgMCAwIDAgMy40TDcgMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNiAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTEgNC4zIDQuM2MuOTQuOTQuOTQgMi40NiAwIDMuNGwtMi42IDIuNmMtLjk0Ljk0LTIuNDYuOTQtMy40IDBMMTEgMTciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA1IDQgNCIgfV0KICAgIF07CiAgICB2YXIgUGVuY2lsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA1IDQgNCIgfV0KICAgIF07CiAgICB2YXIgUGVudGFnb24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC44MyAyLjM4YTIgMiAwIDAgMSAyLjM0IDBsOCA1Ljc0YTIgMiAwIDAgMSAuNzMgMi4yNWwtMy4wNCA5LjI2YTIgMiAwIDAgMS0xLjkgMS4zN0g3LjA0YTIgMiAwIDAgMS0xLjktMS4zN0wyLjEgMTAuMzdhMiAyIDAgMCAxIC43My0yLjI1eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGVyY2VudCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICI1IiwgeTE6ICI1IiwgeTI6ICIxOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYuNSIsIGN5OiAiNi41IiwgcjogIjIuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3LjUiLCBjeTogIjE3LjUiLCByOiAiMi41IiB9XQogICAgXTsKICAgIHZhciBQZXJzb25TdGFuZGluZyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByOiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDIwIDMtNiAzIDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiA4IDYgMiA2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTB2NCIgfV0KICAgIF07CiAgICB2YXIgUGhpbGlwcGluZVBlc28gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMUg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDdINCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxVjRhMSAxIDAgMCAxIDEtMWg0YTEgMSAwIDAgMSAwIDEySDciIH1dCiAgICBdOwogICAgdmFyIFBob25lQ2FsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDJhOSA5IDAgMCAxIDkgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA2YTUgNSAwIDAgMSA1IDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuODMyIDE2LjU2OGExIDEgMCAwIDAgMS4yMTMtLjMwM2wuMzU1LS40NjVBMiAyIDAgMCAxIDE3IDE1aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJBMTggMTggMCAwIDEgMiA0YTIgMiAwIDAgMSAyLTJoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLS44IDEuNmwtLjQ2OC4zNTFhMSAxIDAgMCAwLS4yOTIgMS4yMzMgMTQgMTQgMCAwIDAgNi4zOTIgNi4zODQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFBob25lRm9yd2FyZGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDIgNCA0LTQgNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy44MzIgMTYuNTY4YTEgMSAwIDAgMCAxLjIxMy0uMzAzbC4zNTUtLjQ2NUEyIDIgMCAwIDEgMTcgMTVoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCA2LjM5MiA2LjM4NCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGhvbmVJbmNvbWluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2Nmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDItNiA2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjgzMiAxNi41NjhhMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyQTE4IDE4IDAgMCAxIDIgNGEyIDIgMCAwIDEgMi0yaDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0uOCAxLjZsLS40NjguMzUxYTEgMSAwIDAgMC0uMjkyIDEuMjMzIDE0IDE0IDAgMCAwIDYuMzkyIDYuMzg0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQaG9uZU1pc3NlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDItNiA2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjgzMiAxNi41NjhhMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyQTE4IDE4IDAgMCAxIDIgNGEyIDIgMCAwIDEgMi0yaDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0uOCAxLjZsLS40NjguMzUxYTEgMSAwIDAgMC0uMjkyIDEuMjMzIDE0IDE0IDAgMCAwIDYuMzkyIDYuMzg0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQaG9uZU9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjEgMTMuOWExNCAxNCAwIDAgMCAzLjczMiAyLjY2OCAxIDEgMCAwIDAgMS4yMTMtLjMwM2wuMzU1LS40NjVBMiAyIDAgMCAxIDE3IDE1aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDIgMTggMTggMCAwIDEtMTIuNzI4LTUuMjcyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIgMiAyMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00Ljc2IDEzLjU4MkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCAuMjQ0LjQ3MyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGhvbmVPdXRnb2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDggNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDhWMmgtNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy44MzIgMTYuNTY4YTEgMSAwIDAgMCAxLjIxMy0uMzAzbC4zNTUtLjQ2NUEyIDIgMCAwIDEgMTcgMTVoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCA2LjM5MiA2LjM4NCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGhvbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy44MzIgMTYuNTY4YTEgMSAwIDAgMCAxLjIxMy0uMzAzbC4zNTUtLjQ2NUEyIDIgMCAwIDEgMTcgMTVoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCA2LjM5MiA2LjM4NCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGkgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICI5IiwgeTE6ICI0IiwgeTI6ICIyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDdjMC0xLjcgMS4zLTMgMy0zaDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIwYy0xLjcgMC0zLTEuMy0zLTNWNCIgfV0KICAgIF07CiAgICB2YXIgUGlhbm8gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOC41IDhjLTEuNCAwLTIuNi0uOC0zLjItMkE2Ljg3IDYuODcgMCAwIDAgMiA5djExYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtOC41QzIyIDkuNiAyMC40IDggMTguNSA4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTRoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE0djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNHY0IiB9XQogICAgXTsKICAgIHZhciBQaWNrYXhlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTMtOC4zODEgOC4zOGExIDEgMCAwIDEtMy4wMDEtM0wxMSA5Ljk5OSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS45NzMgNC4wMjdBMTMgMTMgMCAwIDAgNS45MDIgMi4zNzNjLTEuMzk4LjM0Mi0xLjA5MiAyLjE1OC4yNzcgMi42MDFhMTkuOSAxOS45IDAgMCAxIDUuODIyIDMuMDI0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjAwMSAxMS45OTlhMTkuOSAxOS45IDAgMCAxIDMuMDI0IDUuODI0Yy40NDQgMS4zNjkgMi4yNiAxLjY3NiAyLjYwMy4yNzhBMTMgMTMgMCAwIDAgMjAgOC4wNjkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguMzUyIDMuMzUyYTEuMjA1IDEuMjA1IDAgMCAwLTEuNzA0IDBsLTUuMjk2IDUuMjk2YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRsMi4yOTYgMi4yOTZhMS4yMDUgMS4yMDUgMCAwIDAgMS43MDQgMGw1LjI5Ni01LjI5NmExLjIwNSAxLjIwNSAwIDAgMCAwLTEuNzA0eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGljdHVyZUluUGljdHVyZTIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTBjMCAxLjEuOSAyIDIgMmg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiNyIsIHg6ICIxMiIsIHk6ICIxMyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgUGljdHVyZUluUGljdHVyZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoNlY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgNCA2IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTBWN2EyIDIgMCAwIDAtMi0yaC03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTR2MmEyIDIgMCAwIDAgMiAyaDMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxMiIsIHk6ICIxNCIsIHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI3Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBQaWdneUJhbmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSAxN2gzdjJhMSAxIDAgMCAwIDEgMWgyYTEgMSAwIDAgMCAxLTF2LTNhMy4xNiAzLjE2IDAgMCAwIDItMmgxYTEgMSAwIDAgMCAxLTF2LTJhMSAxIDAgMCAwLTEtMWgtMWE1IDUgMCAwIDAtMi00VjNhNCA0IDAgMCAwLTMuMiAxLjZsLS4zLjRIMTFhNiA2IDAgMCAwLTYgNnYxYTUgNSAwIDAgMCAyIDR2M2ExIDEgMCAwIDAgMSAxaDJhMSAxIDAgMCAwIDEtMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOHYxYTIgMiAwIDAgMCAyIDJoMSIgfV0KICAgIF07CiAgICB2YXIgUGlsY3Jvd0xlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzdjExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDloLTNhMyAzIDAgMCAxIDAtNmg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDN2MTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMThIMmw0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAyMi00LTQiIH1dCiAgICBdOwogICAgdmFyIFBpbGNyb3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgNEg5LjVhNC41IDQuNSAwIDAgMCAwIDlIMTMiIH1dCiAgICBdOwogICAgdmFyIFBpbGNyb3dSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDN2MTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOUg3YTEgMSAwIDAgMSAwLTZoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzdjExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDE0IDQgNEgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE4LTQgNCIgfV0KICAgIF07CiAgICB2YXIgUGlsbEJvdHRsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExaC00YTEgMSAwIDAgMC0xIDF2NWExIDEgMCAwIDAgMSAxaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA3djEzYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjciIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICI1IiwgeDogIjQiLCB5OiAiMiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgUGlsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwLjUgMjAuNSAxMC0xMGE0Ljk1IDQuOTUgMCAxIDAtNy03bC0xMCAxMGE0Ljk1IDQuOTUgMCAxIDAgNyA3WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjUgOC41IDcgNyIgfV0KICAgIF07CiAgICB2YXIgUGluT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA5LjM0VjdhMSAxIDAgMCAxIDEtMSAyIDIgMCAwIDAgMC00SDcuODkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOXYxLjc2YTIgMiAwIDAgMS0xLjExIDEuNzlsLTEuNzguOUEyIDIgMCAwIDAgNSAxNS4yNFYxNmExIDEgMCAwIDAgMSAxaDExIiB9XQogICAgXTsKICAgIHZhciBQaW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTAuNzZhMiAyIDAgMCAxLTEuMTEgMS43OWwtMS43OC45QTIgMiAwIDAgMCA1IDE1LjI0VjE2YTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMXYtLjc2YTIgMiAwIDAgMC0xLjExLTEuNzlsLTEuNzgtLjlBMiAyIDAgMCAxIDE1IDEwLjc2VjdhMSAxIDAgMCAxIDEtMSAyIDIgMCAwIDAgMC00SDhhMiAyIDAgMCAwIDAgNCAxIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGlwZXR0ZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTEyIDktOC40MTQgOC40MTRBMiAyIDAgMCAwIDMgMTguODI4djEuMzQ0YTIgMiAwIDAgMS0uNTg2IDEuNDE0QTIgMiAwIDAgMSAzLjgyOCAyMWgxLjM0NGEyIDIgMCAwIDAgMS40MTQtLjU4NkwxNSAxMiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCA5IC40LjRhMSAxIDAgMSAxLTMgM2wtMy44LTMuOGExIDEgMCAxIDEgMy0zbC40LjQgMy40LTMuNGExIDEgMCAxIDEgMyAzeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIyIC40MTQtLjQxNCIgfV0KICAgIF07CiAgICB2YXIgUGl6emEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNC0xIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNzUgMTguMjUtMS4yNSAxLjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljc3NSA1LjY1NGExNS42OCAxNS42OCAwIDAgMC0xMi4xMjEgMTIuMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguOCA5LjNhMSAxIDAgMCAwIDIuMSA3LjciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuOTY0IDIwLjczMmExIDEgMCAwIDEtMS4yMzIgMS4yMzJsLTE4LTVhMSAxIDAgMCAxLS42OTUtMS4yMzJBMTkuNjggMTkuNjggMCAwIDEgMTUuNzMyIDIuMDM3YTEgMSAwIDAgMSAxLjIzMi42OTV6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQbGFuZUxhbmRpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIyaDIwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuNzcgMTAuNzcgMiA5bDItNC41IDEuMS41NWMuNTUuMjguOS44NC45IDEuNDVzLjM1IDEuMTcuOSAxLjQ1TDggOC41bDMtNiAxLjA1LjUzYTIgMiAwIDAgMSAxLjA5IDEuNTJsLjcyIDUuNGEyIDIgMCAwIDAgMS4wOSAxLjUybDQuNCAyLjJjLjQyLjIyLjc4LjU1IDEuMDEuOTZsLjYgMS4wM2MuNDkuODgtLjA2IDEuOTgtMS4wNiAyLjFsLTEuMTguMTVjLS40Ny4wNi0uOTUtLjAyLTEuMzctLjI0TDQuMjkgMTEuMTVhMiAyIDAgMCAxLS41Mi0uMzhaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQbGFuZVRha2VvZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIyaDIwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYuMzYgMTcuNCA0IDE3bC0yLTQgMS4xLS41NWEyIDIgMCAwIDEgMS44IDBsLjE3LjFhMiAyIDAgMCAwIDEuOCAwTDggMTIgNSA2bC45LS40NWEyIDIgMCAwIDEgMi4wOS4ybDQuMDIgM2EyIDIgMCAwIDAgMi4xLjJsNC4xOS0yLjA2YTIuNDEgMi40MSAwIDAgMSAxLjczLS4xN0wyMSA3YTEuNCAxLjQgMCAwIDEgLjg3IDEuOTlsLS4zOC43NmMtLjIzLjQ2LS42Ljg0LTEuMDcgMS4wOEw3LjU4IDE3LjJhMiAyIDAgMCAxLTEuMjIuMThaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQbGF5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk01IDVhMiAyIDAgMCAxIDMuMDA4LTEuNzI4bDExLjk5NyA2Ljk5OGEyIDIgMCAwIDEgLjAwMyAzLjQ1OGwtMTIgN0EyIDIgMCAwIDEgNSAxOXoiIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQbGFuZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjggMTkuMiAxNiAxMWwzLjUtMy41QzIxIDYgMjEuNSA0IDIxIDNjLTEtLjUtMyAwLTQuNSAxLjVMMTMgOCA0LjggNi4yYy0uNS0uMS0uOS4xLTEuMS41bC0uMy41Yy0uMi41LS4xIDEgLjMgMS4zTDkgMTJsLTIgM0g0bC0xIDEgMyAyIDIgMyAxLTF2LTNsMy0yIDMuNSA1LjNjLjMuNC44LjUgMS4zLjNsLjUtLjJjLjQtLjMuNi0uNy41LTEuMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFBsdWcyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA4aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTFWOGgxMnYzYTYgNiAwIDEgMS0xMiAwWiIgfV0KICAgIF07CiAgICB2YXIgUGx1ZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDhWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA4YTEgMSAwIDAgMSAxIDF2NGE0IDQgMCAwIDEtNCA0aC00YTQgNCAwIDAgMS00LTRWOWExIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDhWMiIgfV0KICAgIF07CiAgICB2YXIgUGx1Z1phcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMyAyMC4zYTIuNCAyLjQgMCAwIDAgMy40IDBMMTIgMThsLTYtNi0yLjMgMi4zYTIuNCAyLjQgMCAwIDAgMCAzLjRaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMjIgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNSAxMy41IDEwIDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUgMTYuNSAxMyAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAzLTQgNGg2bC00IDQiIH1dCiAgICBdOwogICAgdmFyIFBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEyaDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDV2MTQiIH1dCiAgICBdOwogICAgdmFyIFBvY2tldEtuaWZlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAydjFjMCAxIDIgMSAyIDJTMyA2IDMgN3MyIDEgMiAyLTIgMS0yIDIgMiAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC44MyA4LjgzYTQgNCAwIDAgMC01LjY2LTUuNjZsLTEyIDEyYTQgNCAwIDEgMCA1LjY2IDUuNjZaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExLjY2VjIyYTQgNCAwIDAgMCA0LTRWNiIgfV0KICAgIF07CiAgICB2YXIgUG9kY2FzdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE3YTEgMSAwIDEgMC0yIDBsLjUgNC41YTAuNSAwLjUgMCAwIDAgMSAweiIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuODUgMTguNThhOSA5IDAgMSAwLTkuNyAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTRhNSA1IDAgMSAxIDggMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMSIsIHI6ICIxIiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0KICAgIF07CiAgICB2YXIgUG9pbnRlck9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDQuNVY0YTIgMiAwIDAgMC0yLjQxLTEuOTU3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjkgOC40YTIgMiAwIDAgMC0xLjI2LTEuMjk1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjcgMTYuMkE4IDggMCAwIDAgMjIgMTR2LTNhMiAyIDAgMSAwLTQgMHYtMWEyIDIgMCAwIDAtMy42My0xLjE1OCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAibTcgMTUtMS44LTEuOGEyIDIgMCAwIDAtMi43OSAyLjg2TDYgMTkuN2E3Ljc0IDcuNzQgMCAwIDAgNiAyLjNoMmE4IDggMCAwIDAgNS42NTctMi4zNDMiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNnY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgICB2YXIgUG9ja2V0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgM2EyIDIgMCAwIDEgMiAydjZhMSAxIDAgMCAxLTIwIDBWNWEyIDIgMCAwIDEgMi0yeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDEwIDQgNCA0LTQiIH1dCiAgICBdOwogICAgdmFyIFBvaW50ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNGE4IDggMCAwIDEtOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExdi0xYTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMFY5YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDkuNVY0YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnYxMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCAxMWEyIDIgMCAxIDEgNCAwdjNhOCA4IDAgMCAxLTggOGgtMmMtMi44IDAtNC41LS44Ni01Ljk5LTIuMzRsLTMuNi0zLjZhMiAyIDAgMCAxIDIuODMtMi44Mkw3IDE1IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQb3Bjb3JuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGEyIDIgMCAwIDAgMC00IDIgMiAwIDAgMC00IDAgMiAyIDAgMCAwLTQgMCAyIDIgMCAwIDAtNCAwIDIgMiAwIDAgMCAwIDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjIgOSA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDIyIDEtMTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgOGMuNSAwIC45LjQuOCAxbC0yLjYgMTJjLS4xLjUtLjcgMS0xLjIgMUg3Yy0uNiAwLTEuMS0uNC0xLjItMUwzLjIgOWMtLjEtLjYuMy0xIC44LTFaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQb3BzaWNsZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTguNiAxNC40Yy44LS44LjgtMiAwLTIuOGwtOC4xLTguMWE0Ljk1IDQuOTUgMCAxIDAtNy4xIDcuMWw4LjEgOC4xYy45LjcgMi4xLjcgMi45LS4xWiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMjItNS41LTUuNSIgfV0KICAgIF07CiAgICB2YXIgUG91bmRTdGVybGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDdjMC01LjMzMy04LTUuMzMzLTggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA3djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjFoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxM2gxMCIgfV0KICAgIF07CiAgICB2YXIgUG93ZXJPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC4zNiA2LjY0QTkgOSAwIDAgMSAyMC43NyAxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjE2IDYuMTZhOSA5IDAgMSAwIDEyLjY4IDEyLjY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogICAgdmFyIFBvd2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC40IDYuNmE5IDkgMCAxIDEtMTIuNzcuMDQiIH1dCiAgICBdOwogICAgdmFyIFByZXNlbnRhdGlvbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgM2gyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAzdjExYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAyMSA1LTUgNSA1IiB9XQogICAgXTsKICAgIHZhciBQcmludGVyQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy41IDIySDdhMSAxIDAgMCAxLTEtMXYtNmExIDEgMCAwIDEgMS0xaDEwYTEgMSAwIDAgMSAxIDF2LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTkgMiAyIDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4SDRhMiAyIDAgMCAxLTItMnYtNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDlWM2ExIDEgMCAwIDEgMS0xaDEwYTEgMSAwIDAgMSAxIDF2NiIgfV0KICAgIF07CiAgICB2YXIgUHJpbnRlclggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi41MzEgMjJIN2ExIDEgMCAwIDEtMS0xdi02YTEgMSAwIDAgMSAxLTFoNi4zNzciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuNSAxNi41IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi41IDIxLjUgNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMThINGEyIDIgMCAwIDEtMi0ydi01YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnYxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA5VjNhMSAxIDAgMCAxIDEtMWgxMGExIDEgMCAwIDEgMSAxdjYiIH1dCiAgICBdOwogICAgdmFyIFByaW50ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4SDRhMiAyIDAgMCAxLTItMnYtNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NWEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOVYzYTEgMSAwIDAgMSAxLTFoMTBhMSAxIDAgMCAxIDEgMXY2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNiIsIHk6ICIxNCIsIHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICI4Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBQcm9qZWN0b3IgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDcgMyA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNlYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzIDcgMi0yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiMTMiLCByOiAiMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTExLjgzIDEySDIwYTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtNGEyIDIgMCAwIDEgMi0yaDIuMTciIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2aDIiIH1dCiAgICBdOwogICAgdmFyIFByb3BvcnRpb25zID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloMTNhMiAyIDAgMCAxIDIgMnY5IiB9XQogICAgXTsKICAgIHZhciBQdXp6bGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS4zOSA0LjM5YTEgMSAwIDAgMCAxLjY4LS40NzQgMi41IDIuNSAwIDEgMSAzLjAxNCAzLjAxNSAxIDEgMCAwIDAtLjQ3NCAxLjY4bDEuNjgzIDEuNjgyYTIuNDE0IDIuNDE0IDAgMCAxIDAgMy40MTRMMTkuNjEgMTUuMzlhMSAxIDAgMCAxLTEuNjgtLjQ3NCAyLjUgMi41IDAgMSAwLTMuMDE0IDMuMDE1IDEgMSAwIDAgMSAuNDc0IDEuNjhsLTEuNjgzIDEuNjgyYTIuNDE0IDIuNDE0IDAgMCAxLTMuNDE0IDBMOC42MSAxOS42MWExIDEgMCAwIDAtMS42OC40NzQgMi41IDIuNSAwIDEgMS0zLjAxNC0zLjAxNSAxIDEgMCAwIDAgLjQ3NC0xLjY4bC0xLjY4My0xLjY4MmEyLjQxNCAyLjQxNCAwIDAgMSAwLTMuNDE0TDQuMzkgOC42MWExIDEgMCAwIDEgMS42OC40NzQgMi41IDIuNSAwIDEgMCAzLjAxNC0zLjAxNSAxIDEgMCAwIDEtLjQ3NC0xLjY4bDEuNjgzLTEuNjgyYTIuNDE0IDIuNDE0IDAgMCAxIDMuNDE0IDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQeXJhbWlkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi41IDE2Ljg4YTEgMSAwIDAgMS0uMzItMS40M2w5LTEzLjAyYTEgMSAwIDAgMSAxLjY0IDBsOSAxMy4wMWExIDEgMCAwIDEtLjMyIDEuNDRsLTguNTEgNC44NmEyIDIgMCAwIDEtMS45OCAwWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIwIiB9XQogICAgXTsKICAgIHZhciBRckNvZGUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiNSIsIHg6ICIzIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNSIsIGhlaWdodDogIjUiLCB4OiAiMTYiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiNSIsIHg6ICIzIiwgeTogIjE2Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE2aC0zYTIgMiAwIDAgMC0yIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAyMXYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3YzYTIgMiAwIDAgMS0yIDJINyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNnYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMnYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjF2LTEiIH1dCiAgICBdOwogICAgdmFyIFF1b3RlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgM2EyIDIgMCAwIDAtMiAydjZhMiAyIDAgMCAwIDIgMiAxIDEgMCAwIDEgMSAxdjFhMiAyIDAgMCAxLTIgMiAxIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAwIDEgMSA2IDYgMCAwIDAgNi02VjVhMiAyIDAgMCAwLTItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNSAzYTIgMiAwIDAgMC0yIDJ2NmEyIDIgMCAwIDAgMiAyIDEgMSAwIDAgMSAxIDF2MWEyIDIgMCAwIDEtMiAyIDEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxIDYgNiAwIDAgMCA2LTZWNWEyIDIgMCAwIDAtMi0yeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUmFiYml0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTZhMyAzIDAgMCAxIDIuMjQgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTggMjFoLThhNCA0IDAgMCAxLTQtNCA3IDcgMCAwIDEgNy03aC4yTDkuNiA2LjRhMSAxIDAgMSAxIDIuOC0yLjhMMTUuOCA3aC4yYzMuMyAwIDYgMi43IDYgNnYxYTIgMiAwIDAgMS0yIDJoLTFhMyAzIDAgMCAwLTMgMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA4LjU0VjRhMiAyIDAgMSAwLTQgMHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNjEyIDEyLjUyNGEzIDMgMCAxIDAtMS42IDQuMyIgfV0KICAgIF07CiAgICB2YXIgUmFkYXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS4wNyA0LjkzQTEwIDEwIDAgMCAwIDYuOTkgMy4zNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuMjkgOS42MkExMCAxMCAwIDEgMCAyMS4zMSA4LjM1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjI0IDcuNzZBNiA2IDAgMSAwIDguMjMgMTYuNjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljk5IDExLjY2QTYgNiAwIDAgMSAxNS43NyAxNi42NyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjQxIDEwLjU5IDUuNjYtNS42NiIgfV0KICAgIF07CiAgICB2YXIgUmFkaWF0aW9uID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDE1LjQ2NDFhNCA0IDAgMCAxLTQgMEw3LjUyNzg2IDE5Ljc0NTk3IEEgMSAxIDAgMCAwIDcuOTkzMDMgMjEuMTYyMTEgMTAgMTAgMCAwIDAgMTYuMDA2OTcgMjEuMTYyMTEgMSAxIDAgMCAwIDE2LjQ3MjE0IDE5Ljc0NTk3eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiAxMmE0IDQgMCAwIDAtMi0zLjQ2NGwyLjQ3Mi00LjI4MmExIDEgMCAwIDEgMS40Ni0uMzA1IDEwIDEwIDAgMCAxIDQuMDA2IDYuOTRBMSAxIDAgMCAxIDIxIDEyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04IDEyYTQgNCAwIDAgMSAyLTMuNDY0TDcuNTI4IDQuMjU0YTEgMSAwIDAgMC0xLjQ2LS4zMDUgMTAgMTAgMCAwIDAtNC4wMDYgNi45NEExIDEgMCAwIDAgMyAxMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFJhZGljYWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDEyaDMuMjhhMSAxIDAgMCAxIC45NDguNjg0bDIuMjk4IDcuOTM0YS41LjUgMCAwIDAgLjk2LS4wNDRMMTMuODIgNC43NzFBMSAxIDAgMCAxIDE0Ljc5MiA0SDIxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBSYWRpb1JlY2VpdmVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxNnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE2djIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI4IiwgeDogIjIiLCB5OiAiOCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmguMDEiIH1dCiAgICBdOwogICAgdmFyIFJhZGlvVG93ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjkgMTYuMUMxIDEyLjIgMSA1LjggNC45IDEuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjggNC43YTYuMTQgNi4xNCAwIDAgMC0uOCA3LjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjIgNC44YzIgMiAyLjI2IDUuMTEuOCA3LjQ3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjEgMS45YTkuOTYgOS45NiAwIDAgMSAwIDE0LjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS41IDE4aDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAyMiA0LTExIDQgMTEiIH1dCiAgICBdOwogICAgdmFyIFJhZGlvID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuMjQ3IDcuNzYxYTYgNiAwIDAgMSAwIDguNDc4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjA3NSA0LjkzM2ExMCAxMCAwIDAgMSAwIDE0LjEzNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjkyNSAxOS4wNjdhMTAgMTAgMCAwIDEgMC0xNC4xMzQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy43NTMgMTYuMjM5YTYgNiAwIDAgMSAwLTguNDc4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIFJhZGl1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjM0IDE3LjUyYTEwIDEwIDAgMSAwLTIuODIgMi44MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjQxIDEzLjQxIDQuMTggNC4xOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBSYWlsU3ltYm9sID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxNWgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDloMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMjAtNS01IDYtNi01LTUiIH1dCiAgICBdOwogICAgdmFyIFJhaW5ib3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxN2ExMCAxMCAwIDAgMC0yMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTdhNiA2IDAgMCAxIDEyIDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTdhMiAyIDAgMCAxIDQgMCIgfV0KICAgIF07CiAgICB2YXIgUmF0aW8gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMiIsIGhlaWdodDogIjIwIiwgeDogIjYiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgUmF0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMjJINGEyIDIgMCAwIDEgMC00aDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjIzNiAxOGEzIDMgMCAwIDAtMi4yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOWguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYuODIgMy45NGEzIDMgMCAxIDEgMy4yMzcgNC44NjhsMS44MTUgMi41ODdhMS41IDEuNSAwIDAgMS0xLjUgMi4xbC0yLjg3Mi0uNDUzYTMgMyAwIDAgMC0zLjUgMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA0Ljk4OGEzIDMgMCAxIDAtNS4yIDIuMDUyQTcgNyAwIDAgMCA0IDE0LjAxNSA0IDQgMCAwIDAgOCAxOCIgfV0KICAgIF07CiAgICB2YXIgUmVjZWlwdENlbnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDFaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDYuNXYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA5LjRhNCA0IDAgMSAwIDAgNS4yIiB9XQogICAgXTsKICAgIHZhciBSZWNlaXB0RXVybyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDkuNWE0IDQgMCAxIDAgMCA1LjIiIH1dCiAgICBdOwogICAgdmFyIFJlY2VpcHRJbmRpYW5SdXBlZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA3aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTcuNSA4IDE1aDFhNCA0IDAgMCAwIDAtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDExaDgiIH1dCiAgICBdOwogICAgdmFyIFJlY2VpcHRKYXBhbmVzZVllbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTAgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgNyAzIDN2Ny41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTFoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1aDYiIH1dCiAgICBdOwogICAgdmFyIFJlY2VpcHRQb3VuZFN0ZXJsaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAydjIwbDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxIDItMSAyIDFWMmwtMiAxLTItMS0yIDEtMi0xLTIgMS0yLTEtMiAxWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEzaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTdWOS41YTIuNSAyLjUgMCAwIDEgNSAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTdoNyIgfV0KICAgIF07CiAgICB2YXIgUmVjZWlwdFJ1c3NpYW5SdWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTFoNWEyIDIgMCAxIDAgMC00aC0zdjEwIiB9XQogICAgXTsKICAgIHZhciBSZWNlaXB0VGV4dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE2SDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOEg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEySDgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAzYTEgMSAwIDAgMSAxLTEgMS4zIDEuMyAwIDAgMSAuNy4ybC45MzMuNmExLjMgMS4zIDAgMCAwIDEuNCAwbC45MzQtLjZhMS4zIDEuMyAwIDAgMSAxLjQgMGwuOTMzLjZhMS4zIDEuMyAwIDAgMCAxLjQgMGwuOTMzLS42YTEuMyAxLjMgMCAwIDEgMS40IDBsLjkzNC42YTEuMyAxLjMgMCAwIDAgMS40IDBsLjkzMy0uNkExLjMgMS4zIDAgMCAxIDE5IDJhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxIDEuMyAxLjMgMCAwIDEtLjctLjJsLS45MzMtLjZhMS4zIDEuMyAwIDAgMC0xLjQgMGwtLjkzNC42YTEuMyAxLjMgMCAwIDEtMS40IDBsLS45MzMtLjZhMS4zIDEuMyAwIDAgMC0xLjQgMGwtLjkzMy42YTEuMyAxLjMgMCAwIDEtMS40IDBsLS45MzQtLjZhMS4zIDEuMyAwIDAgMC0xLjQgMGwtLjkzMy42YTEuMyAxLjMgMCAwIDEtLjcuMiAxIDEgMCAwIDEtMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUmVjZWlwdFN3aXNzRnJhbmMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDFaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE3VjdoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoNSIgfV0KICAgIF07CiAgICB2YXIgUmVjZWlwdFR1cmtpc2hMaXJhID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNi41djExYTUuNSA1LjUgMCAwIDAgNS41LTUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA4LTYgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDF6IiB9XQogICAgXTsKICAgIHZhciBSZWNlaXB0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAydjIwbDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxIDItMSAyIDFWMmwtMiAxLTItMS0yIDEtMi0xLTIgMS0yLTEtMiAxWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4aC02YTIgMiAwIDEgMCAwIDRoNGEyIDIgMCAxIDEgMCA0SDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTcuNXYtMTEiIH1dCiAgICBdOwogICAgdmFyIFJlY3RhbmdsZUNpcmNsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDR2MTZIM2ExIDEgMCAwIDEtMS0xVjVhMSAxIDAgMCAxIDEtMXoiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNCIsIGN5OiAiMTIiLCByOiAiOCIgfV0KICAgIF07CiAgICB2YXIgUmVjdGFuZ2xlRWxsaXBzaXMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoLjAxIiB9XQogICAgXTsKICAgIHZhciBSZWN0YW5nbGVHb2dnbGVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgNmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMmgtNGEyIDIgMCAwIDEtMS42LS44bC0xLjYtMi4xM2ExIDEgMCAwIDAtMS42IDBMOS42IDE3LjJBMiAyIDAgMCAxIDggMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFJlY3RhbmdsZUhvcml6b250YWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgUmVjdGFuZ2xlVmVydGljYWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMiIsIGhlaWdodDogIjIwIiwgeDogIjYiLCB5OiAiMiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgUmVjeWNsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTlINC44MTVhMS44MyAxLjgzIDAgMCAxLTEuNTctLjg4MSAxLjc4NSAxLjc4NSAwIDAgMS0uMDA0LTEuNzg0TDcuMTk2IDkuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxOWg4LjIwM2ExLjgzIDEuODMgMCAwIDAgMS41NTYtLjg5IDEuNzg0IDEuNzg0IDAgMCAwIDAtMS43NzVsLTEuMjI2LTIuMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTYtMyAzIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjI5MyAxMy41OTYgNy4xOTYgOS41IDMuMSAxMC41OTgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtOS4zNDQgNS44MTEgMS4wOTMtMS44OTJBMS44MyAxLjgzIDAgMCAxIDExLjk4NSAzYTEuNzg0IDEuNzg0IDAgMCAxIDEuNTQ2Ljg4OGwzLjk0MyA2Ljg0MyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy4zNzggOS42MzMgNC4wOTYgMS4wOTggMS4wOTctNC4wOTYiIH1dCiAgICBdOwogICAgdmFyIFJlZG8yID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTQgNS01LTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA5SDkuNUE1LjUgNS41IDAgMCAwIDQgMTQuNUE1LjUgNS41IDAgMCAwIDkuNSAyMEgxMyIgfV0KICAgIF07CiAgICB2YXIgUmVkb0RvdCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE3IiwgcjogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgN3Y2aC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTdhOSA5IDAgMCAxIDktOSA5IDkgMCAwIDEgNiAyLjNsMyAyLjciIH1dCiAgICBdOwogICAgdmFyIFJlZG8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA3djZoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxN2E5IDkgMCAwIDEgOS05IDkgOSAwIDAgMSA2IDIuM2wzIDIuNyIgfV0KICAgIF07CiAgICB2YXIgUmVmcmVzaENjd0RvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyYTkgOSAwIDAgMC05LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjVoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDAgMCA5IDkgOS43NSA5Ljc1IDAgMCAwIDYuNzQtMi43NEwyMSAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmg1djUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgUmVmcmVzaENjdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyYTkgOSAwIDAgMC05LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjVoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDAgMCA5IDkgOS43NSA5Ljc1IDAgMCAwIDYuNzQtMi43NEwyMSAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmg1djUiIH1dCiAgICBdOwogICAgdmFyIFJlZnJlc2hDd09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDhMMTguNzQgNS43NEE5Ljc1IDkuNzUgMCAwIDAgMTIgM0MxMSAzIDEwLjAzIDMuMTYgOS4xMyAzLjQ3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTZIM3Y1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJDMyA5LjUxIDQgNy4yNiA1LjY0IDUuNjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxNiAyLjI2IDIuMjZBOS43NSA5Ljc1IDAgMCAwIDEyIDIxYzIuNDkgMCA0Ljc0LTEgNi4zNi0yLjY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyYzAgMS0uMTYgMS45Ny0uNDcgMi44NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAzdjVoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjIgMiAyIiB9XQogICAgXTsKICAgIHZhciBSZWZyZXNoQ3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDAgMSA5LTkgOS43NSA5Ljc1IDAgMCAxIDYuNzQgMi43NEwyMSA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDN2NWgtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMmE5IDkgMCAwIDEtOSA5IDkuNzUgOS43NSAwIDAgMS02Ljc0LTIuNzRMMyAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2SDN2NSIgfV0KICAgIF07CiAgICB2YXIgUmVmcmlnZXJhdG9yID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA2YTQgNCAwIDAgMSA0LTRoNmE0IDQgMCAwIDEgNCA0djE0YTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0yVjZaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTBoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgN3Y2IiB9XQogICAgXTsKICAgIHZhciBSZWdleCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDN2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuNjcgNS41IDguNjYgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMi42NyAxMC41IDguNjYtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE3YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjJhMiAyIDAgMCAwIDIgMmgyYTIgMiAwIDAgMCAyLTJ2LTJ6IiB9XQogICAgXTsKICAgIHZhciBSZW1vdmVGb3JtYXR0aW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA3VjRoMTZ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIwaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNCA4IDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE1IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxNS01IDUiIH1dCiAgICBdOwogICAgdmFyIFJlcGVhdDEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyIDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMXYtMWE0IDQgMCAwIDEgNC00aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMjItNC00IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxM3YxYTQgNCAwIDAgMS00IDRIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMGgxdjQiIH1dCiAgICBdOwogICAgdmFyIFJlcGVhdDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDkgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxOEg3YTIgMiAwIDAgMS0yLTJWNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxNS0zIDMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDZoNmEyIDIgMCAwIDEgMiAydjEwIiB9XQogICAgXTsKICAgIHZhciBSZXBlYXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyIDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMXYtMWE0IDQgMCAwIDEgNC00aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMjItNC00IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxM3YxYTQgNCAwIDAgMS00IDRIMyIgfV0KICAgIF07CiAgICB2YXIgUmVwbGFjZUFsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0YTEgMSAwIDAgMSAxIDF2NWExIDEgMCAwIDEtMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDRhMSAxIDAgMCAxIDEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMGExIDEgMCAwIDEtMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE0YTEgMSAwIDAgMSAxIDF2NWExIDEgMCAwIDEtMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDRhMSAxIDAgMCAwLTEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5YTEgMSAwIDAgMS0xIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA3IDMgMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMFY1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMTQiLCB3aWR0aDogIjciLCBoZWlnaHQ6ICI3Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBSZXBsYWNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNGExIDEgMCAwIDEgMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEwYTEgMSAwIDAgMS0xLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNGExIDEgMCAwIDAtMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDlhMSAxIDAgMCAxLTEgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDcgMyAzIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEwVjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIxNCIsIHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIFJlcGx5QWxsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTctNS01IDUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOHYtMmE0IDQgMCAwIDAtNC00SDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxNy01LTUgNS01IiB9XQogICAgXTsKICAgIHZhciBSZXBseSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4di0yYTQgNCAwIDAgMC00LTRINCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE3LTUtNSA1LTUiIH1dCiAgICBdOwogICAgdmFyIFJld2luZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZhMiAyIDAgMCAwLTMuNDE0LTEuNDE0bC02IDZhMiAyIDAgMCAwIDAgMi44MjhsNiA2QTIgMiAwIDAgMCAxMiAxOHoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgNmEyIDIgMCAwIDAtMy40MTQtMS40MTRsLTYgNmEyIDIgMCAwIDAgMCAyLjgyOGw2IDZBMiAyIDAgMCAwIDIyIDE4eiIgfV0KICAgIF07CiAgICB2YXIgUm9ja2V0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNC41IDE2LjVjLTEuNSAxLjI2LTIgNS0yIDVzMy43NC0uNSA1LTJjLjcxLS44NC43LTIuMTMtLjA5LTIuOTFhMi4xOCAyLjE4IDAgMCAwLTIuOTEtLjA5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMiAxNS0zLTNhMjIgMjIgMCAwIDEgMi0zLjk1QTEyLjg4IDEyLjg4IDAgMCAxIDIyIDJjMCAyLjcyLS43OCA3LjUtNiAxMWEyMi4zNSAyMi4zNSAwIDAgMS00IDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJINHMuNTUtMy4wMyAyLTRjMS42Mi0xLjA4IDUgMCA1IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTV2NXMzLjAzLS41NSA0LTJjMS4wOC0xLjYyIDAtNSAwLTUiIH1dCiAgICBdOwogICAgdmFyIFJvY2tpbmdDaGFpciA9IFsKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMy41IDIgNi41IDEyLjUgMTggMTIuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5LjUiLCB4MjogIjUuNSIsIHkxOiAiMTIuNSIsIHkyOiAiMjAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjE4LjUiLCB5MTogIjEyLjUiLCB5MjogIjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuNzUgMThhMTMgMTMgMCAwIDAgMTguNSAwIiB9XQogICAgXTsKICAgIHZhciBSaWJib24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMS4yMkMxMSA5Ljk5NyAxMCA5IDEwIDhhMiAyIDAgMCAxIDQgMGMwIDEtLjk5OCAyLjAwMi0yLjAxIDMuMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTggMi41Ny0zLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4yNDMgOS4wMTZhNyA3IDAgMCAxIDExLjUwNy0uMDA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMzUgMTQuNTMgMTIgMTEuMjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOS4zNSAxNC41M0M3LjcyOCAxMi4yNDYgNiAxMC4yMjEgNiA3YTYgNSAwIDAgMSAxMiAwYy0uMDA1IDMuMjItMS43NzggNS4yMzUtMy40MyA3LjVsMy41NTcgNC41MjdhMSAxIDAgMCAxLS4yMDMgMS40M2wtMS44OTQgMS4zNmExIDEgMCAwIDEtMS4zODQtLjIxNUwxMiAxOGwtMi42NzkgMy41OTNhMSAxIDAgMCAxLTEuMzkuMjEzbC0xLjg2NS0xLjM1M2ExIDEgMCAwIDEtLjIwMy0xLjQyMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFJvbGxlckNvYXN0ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE5VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTlWNi44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE5di03LjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE5di02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE5VjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOVY5YTQgNCAwIDAgMSA0LTRjMiAwIDQgMS4zMyA2IDRzNCA0IDYgNGE0IDQgMCAxIDAtMy02LjY1IiB9XQogICAgXTsKICAgIHZhciBSb3RhdGUzZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjQ2NiA3LjVDMTUuNjQzIDQuMjM3IDEzLjk1MiAyIDEyIDIgOS4yMzkgMiA3IDYuNDc3IDcgMTJzMi4yMzkgMTAgNSAxMGMuMzQyIDAgLjY3Ny0uMDY5IDEtLjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMTk0IDEzLjcwNyAzLjgxNCAxLjg2LTEuODYgMy44MTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkgMTUuNTdjLTEuODA0Ljg4NS00LjI3NCAxLjQzLTcgMS40My01LjUyMyAwLTEwLTIuMjM5LTEwLTVzNC40NzctNSAxMC01YzQuODM4IDAgOC44NzMgMS43MTggOS44IDQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFJvc2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMGgtMWE0IDQgMCAxIDEgNC00di41MzQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNmgxYTQgNCAwIDAgMSAxLjQyIDcuNzRsLTIuMjkuODdhNiA2IDAgMCAxLTUuMzM5LTEwLjY4bDIuMDY5LTEuMzEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00LjUgMTdjMi44LS41IDQuNCAwIDUuNS44czEuOCAyLjIgMi4zIDMuN2MtMiAuNC0zLjUuNC00LjgtLjMtMS4yLS42LTIuMy0xLjktMy00LjIiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNzcgMTJDNCAxNSAyIDIyIDIgMjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiOCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBSb3RhdGVDY3dLZXkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDkuNSAxIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuNSA4LjUtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc0IDkuNzQgMCAwIDAtNi43NCAyLjc0TDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2NWg1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjE0IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIFJvdGF0ZUNjd1NxdWFyZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDlWN2EyIDIgMCAwIDAtMi0yaC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDItMyAzIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxM3Y1YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAxIDItMmgyIiB9XQogICAgXTsKICAgIHZhciBSb3RhdGVDY3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDEgMCA5LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjVoNSIgfV0KICAgIF07CiAgICB2YXIgUm90YXRlQ3dTcXVhcmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA1SDZhMiAyIDAgMCAwLTIgMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgOCAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIiB9XQogICAgXTsKICAgIHZhciBSb3RhdGVDdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyYTkgOSAwIDEgMS05LTljMi41MiAwIDQuOTMgMSA2Ljc0IDIuNzRMMjEgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAzdjVoLTUiIH1dCiAgICBdOwogICAgdmFyIFJvdXRlT2ZmID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOSIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTloOC41Yy40IDAgLjktLjEgMS4zLS4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuMiA1LjJBMy41IDMuNTMgMCAwIDAgNi41IDEySDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNS4zYTMuNSAzLjUgMCAwIDAtMy4zLTMuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA1aC00LjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiNSIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBSb3V0ZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTkiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE5aDguNWEzLjUgMy41IDAgMCAwIDAtN2gtMTFhMy41IDMuNSAwIDAgMSAwLTdIMTUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiNSIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBSb3V0ZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjgiLCB4OiAiMiIsIHk6ICIxNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjAxIDE4SDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMDEgMThIMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTB2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy44NCA3LjE3YTQgNCAwIDAgMC01LjY2IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuNjYgNC4zNGE4IDggMCAwIDAtMTEuMzEgMCIgfV0KICAgIF07CiAgICB2YXIgUm93czIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XQogICAgXTsKICAgIHZhciBSb3dzMyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNUgzIiB9XQogICAgXTsKICAgIHZhciBSc3MgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDExYTkgOSAwIDAgMSA5IDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0YTE2IDE2IDAgMCAxIDE2IDE2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgUm93czQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA3LjVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE2LjVIMyIgfV0KICAgIF07CiAgICB2YXIgUnVsZXJEaW1lbnNpb25MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTV2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTV2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTV2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4VjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgNkgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDhWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE1di0zIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIxMiIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI4Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBSdWxlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjMgMTUuM2EyLjQgMi40IDAgMCAxIDAgMy40bC0yLjYgMi42YTIuNCAyLjQgMCAwIDEtMy40IDBMMi43IDguN2EyLjQxIDIuNDEgMCAwIDEgMC0zLjRsMi42LTIuNmEyLjQxIDIuNDEgMCAwIDEgMy40IDBaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgMTIuNSAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEuNSA5LjUgMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguNSA2LjUgMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjUgMTUuNSAyLTIiIH1dCiAgICBdOwogICAgdmFyIFNhaWxib2F0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnYxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIyYTQgNCAwIDAgMS00LTQgMSAxIDAgMCAxIDEtMWgxNmExIDEgMCAwIDEgMSAxIDQgNCAwIDAgMS00IDR6IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNOS4xNTkgMi40NmExIDEgMCAwIDEgMS41MjEtLjE5M2w5Ljk3NyA4Ljk4QTEgMSAwIDAgMSAyMCAxM0g0YTEgMSAwIDAgMS0uODI0LTEuNTY3eiIgfQogICAgICBdCiAgICBdOwogICAgdmFyIFJ1c3NpYW5SdWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTFoOGE0IDQgMCAwIDAgMC04SDl2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNWg4IiB9XQogICAgXTsKICAgIHZhciBTYWxhZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjFhOSA5IDAgMCAwIDktOUgzYTkgOSAwIDAgMCA5IDlaIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjM4IDEyYTIuNCAyLjQgMCAwIDEtLjQtNC43NyAyLjQgMi40IDAgMCAxIDMuMi0yLjc3IDIuNCAyLjQgMCAwIDEgMy40Ny0uNjMgMi40IDIuNCAwIDAgMSAzLjM3IDMuMzcgMi40IDIuNCAwIDAgMS0xLjEgMy43IDIuNTEgMi41MSAwIDAgMSAuMDMgMS4xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzIDEyIDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC45IDcuMjVBMy45OSAzLjk5IDAgMCAwIDQgMTBjMCAuNzMuMiAxLjQxLjU0IDIiIH1dCiAgICBdOwogICAgdmFyIFNhbmR3aWNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMi4zNyAxMS4yMjMgOC4zNzItNi43NzdhMiAyIDAgMCAxIDIuNTE2IDBsOC4zNzEgNi43NzciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTVhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTUuMjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNWExIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAwIDEgMWg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuNjcgMTUgNi4xMyA0LjZhMiAyIDAgMCAwIDIuOC0uNGwzLjE1LTQuMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjQiLCB4OiAiMiIsIHk6ICIxMSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgU2F0ZWxsaXRlRGlzaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBhNy4zMSA3LjMxIDAgMCAwIDEwIDEwWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxM2E2IDYgMCAwIDAtNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEzQTEwIDEwIDAgMCAwIDExIDMiIH1dCiAgICBdOwogICAgdmFyIFNhdGVsbGl0ZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTEzLjUgNi41LTMuMTQ4LTMuMTQ4YTEuMjA1IDEuMjA1IDAgMCAwLTEuNzA0IDBMNi4zNTIgNS42NDhhMS4yMDUgMS4yMDUgMCAwIDAgMCAxLjcwNEw5LjUgMTAuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi41IDcuNSAxOSA1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE3LjUgMTAuNSAzLjE0OCAzLjE0OGExLjIwNSAxLjIwNSAwIDAgMSAwIDEuNzA0bC0yLjI5NiAyLjI5NmExLjIwNSAxLjIwNSAwIDAgMS0xLjcwNCAwTDEzLjUgMTQuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxYTYgNiAwIDAgMC02LTYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOS4zNTIgMTAuNjQ4YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRsMi4yOTYgMi4yOTZhMS4yMDUgMS4yMDUgMCAwIDAgMS43MDQgMGw0LjI5Ni00LjI5NmExLjIwNSAxLjIwNSAwIDAgMCAwLTEuNzA0bC0yLjI5Ni0yLjI5NmExLjIwNSAxLjIwNSAwIDAgMC0xLjcwNCAweiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU2F1ZGlSaXlhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDE5LjUtNS41IDEuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC41IDR2MTEuMjJhMSAxIDAgMCAwIDEuMjQyLjk3TDIwIDE1LjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMi45NzggMTkuMzUxIDUuNTQ5LTEuMzYzQTIgMiAwIDAgMCAxMCAxNlYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEwIDQgMTMuNSIgfV0KICAgIF07CiAgICB2YXIgU2F2ZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEzSDhhMSAxIDAgMCAwLTEgMXY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDhoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMXYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuNDEgMjAuNDFBMiAyIDAgMCAxIDE5IDIxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAuNTktMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yOS41IDExLjVzNSA1IDQgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDNoNi4yYTIgMiAwIDAgMSAxLjQuNmwzLjggMy44YTIgMiAwIDAgMSAuNiAxLjRWMTUiIH1dCiAgICBdOwogICAgdmFyIFNhdmVBbGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjNhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE4di02YTEgMSAwIDAgMC0xLTFoLTZhMSAxIDAgMCAwLTEgMXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIySDRhMiAyIDAgMCAxLTItMlY2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTggMThhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOS4xNzJhMiAyIDAgMCAxIDEuNDE0LjU4NmwyLjgyOCAyLjgyOEEyIDIgMCAwIDEgMjIgNi44MjhWMTZhMiAyIDAgMCAxLTIuMDEgMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNhdmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS4yIDNhMiAyIDAgMCAxIDEuNC42bDMuOCAzLjhhMiAyIDAgMCAxIC42IDEuNFYxOWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIxdi03YTEgMSAwIDAgMC0xLTFIOGExIDEgMCAwIDAtMSAxdjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAzdjRhMSAxIDAgMCAwIDEgMWg3IiB9XQogICAgXTsKICAgIHZhciBTY2FsZTNkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA3djExYTEgMSAwIDAgMCAxIDFoMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNS4yOTMgMTguNzA3IDExIDEzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjE5IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICI1IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIFNjYWxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA4IDMgOGE1IDUgMCAwIDEtNiAwelY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN2gxYTE3IDE3IDAgMCAwIDgtMiAxNyAxNyAwIDAgMCA4IDJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDggMyA4YTUgNSAwIDAgMS02IDB6VjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMWgxMCIgfV0KICAgIF07CiAgICB2YXIgU2NhbGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDNINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNUg5di01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoNXY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDMgOSAxNSIgfV0KICAgIF07CiAgICB2YXIgU2NhbkJhcmNvZGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA3djEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgN3YxMCIgfV0KICAgIF07CiAgICB2YXIgU2NhbkV5ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4Ljk0NCAxMi4zM2ExIDEgMCAwIDAgMC0uNjYgNy41IDcuNSAwIDAgMC0xMy44ODggMCAxIDEgMCAwIDAgMCAuNjYgNy41IDcuNSAwIDAgMCAxMy44ODggMCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU2NhbkZhY2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNHMxLjUgMiA0IDIgNC0yIDQtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDloLjAxIiB9XQogICAgXTsKICAgIHZhciBTY2FuSGVhcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk03LjgyOCAxMy4wN0EzIDMgMCAwIDEgMTIgOC43NjRhMyAzIDAgMCAxIDQuMTcyIDQuMzA2bC0zLjQ0NyAzLjYyYTEgMSAwIDAgMS0xLjQ0OSAweiIgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNjYW5MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoMTAiIH1dCiAgICBdOwogICAgdmFyIFNjYW5RckNvZGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMnY0YTEgMSAwIDAgMS0xIDFoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA4VjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjciLCB5OiAiNyIsIHdpZHRoOiAiNSIsIGhlaWdodDogIjUiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIFNjYW5TZWFyY2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNi0xLjktMS45IiB9XQogICAgXTsKICAgIHZhciBTY2FuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIiB9XQogICAgXTsKICAgIHZhciBTY2FuVGV4dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDhoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTZoNiIgfV0KICAgIF07CiAgICB2YXIgU2Nob29sID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjF2LTNhMiAyIDAgMCAwLTQgMHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDV2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNCA2IDcuMTA2LTMuNzlhMiAyIDAgMCAxIDEuNzg4IDBMMjAgNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm02IDExLTMuNTIgMi4xNDdhMSAxIDAgMCAwLS40OC44NTRWMTlhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi01YTEgMSAwIDAgMC0uNDgtLjg1M0wxOCAxMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDV2MTYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOSIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBTY2lzc29ycyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMTIgOC4xMiAxMiAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA0IDguMTIgMTUuODgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjggMTQuOCAyMCAyMCIgfV0KICAgIF07CiAgICB2YXIgU2Npc3NvcnNMaW5lRGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNS40MiA5LjQyIDggMTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICI4IiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgNi04LjU4IDguNTgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICIxNiIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjggMTQuOCAxNCAxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMmgtMiIgfV0KICAgIF07CiAgICB2YXIgU2Nvb3RlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDRoLTMuNWwyIDExLjA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuOTUgMTdoNS4xNDJjLjUyMyAwIC45NS0uNDA2IDEuMDYzLS45MTZhNi41IDYuNSAwIDAgMSA1LjM0NS01LjAwOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5LjUiLCBjeTogIjE3LjUiLCByOiAiMi41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNC41IiwgY3k6ICIxNy41IiwgcjogIjIuNSIgfV0KICAgIF07CiAgICB2YXIgU2NyZWVuU2hhcmVPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAzSDRhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMy01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMyA1IDUiIH1dCiAgICBdOwogICAgdmFyIFNjcmVlblNoYXJlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDggNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoNXY1IiB9XQogICAgXTsKICAgIHZhciBTY3JvbGxUZXh0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTJoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOGgtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxN1Y1YTIgMiAwIDAgMC0yLTJINCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04IDIxaDEyYTIgMiAwIDAgMCAyLTJ2LTFhMSAxIDAgMCAwLTEtMUgxMWExIDEgMCAwIDAtMSAxdjFhMiAyIDAgMSAxLTQgMFY1YTIgMiAwIDEgMC00IDB2MmExIDEgMCAwIDAgMSAxaDMiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNjcm9sbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE3VjVhMiAyIDAgMCAwLTItMkg0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTggMjFoMTJhMiAyIDAgMCAwIDItMnYtMWExIDEgMCAwIDAtMS0xSDExYTEgMSAwIDAgMC0xIDF2MWEyIDIgMCAxIDEtNCAwVjVhMiAyIDAgMSAwLTQgMHYyYTEgMSAwIDAgMCAxIDFoMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU2VhcmNoQWxlcnQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjExIiwgY3k6ICIxMSIsIHI6ICI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIxLTQuMy00LjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE1aC4wMSIgfV0KICAgIF07CiAgICB2YXIgU2VhcmNoQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDExIDIgMiA0LTQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMS00LjMtNC4zIiB9XQogICAgXTsKICAgIHZhciBTZWFyY2hDb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgMTMuNSAyLTIuNS0yLTIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMS00LjMtNC4zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOC41IDcgMTFsMiAyLjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiOCIgfV0KICAgIF07CiAgICB2YXIgU2VhcmNoU2xhc2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy41IDguNS01IDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMS00LjMtNC4zIiB9XQogICAgXTsKICAgIHZhciBTZWFyY2hYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNSA4LjUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguNSA4LjUgNSA1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtNC4zLTQuMyIgfV0KICAgIF07CiAgICB2YXIgU2VhcmNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtNC4zNC00LjM0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjgiIH1dCiAgICBdOwogICAgdmFyIFNlY3Rpb24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA1YTQgMyAwIDAgMC04IDBjMCA0IDggMyA4IDdhNCAzIDAgMCAxLTggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE5YTQgMyAwIDAgMCA4IDBjMC00LTgtMy04LTdhNCAzIDAgMCAxIDggMCIgfV0KICAgIF07CiAgICB2YXIgU2VuZEhvcml6b250YWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjcxNCAzLjA0OGEuNDk4LjQ5OCAwIDAgMC0uNjgzLjYyN2wyLjg0MyA3LjYyN2EyIDIgMCAwIDEgMCAxLjM5NmwtMi44NDIgNy42MjdhLjQ5OC40OTggMCAwIDAgLjY4Mi42MjdsMTgtOC41YS41LjUgMCAwIDAgMC0uOTA0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDE2IiB9XQogICAgXTsKICAgIHZhciBTZW5kVG9CYWNrID0gWwogICAgICBbInJlY3QiLCB7IHg6ICIxNCIsIHk6ICIxNCIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjgiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjIiLCB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTR2MWEyIDIgMCAwIDAgMiAyaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgN2gxYTIgMiAwIDAgMSAyIDJ2MSIgfV0KICAgIF07CiAgICB2YXIgU2VuZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0LjUzNiAyMS42ODZhLjUuNSAwIDAgMCAuOTM3LS4wMjRsNi41LTE5YS40OTYuNDk2IDAgMCAwLS42MzUtLjYzNWwtMTkgNi41YS41LjUgMCAwIDAtLjAyNC45MzdsNy45MyAzLjE4YTIgMiAwIDAgMSAxLjExMiAxLjExeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMS44NTQgMi4xNDctMTAuOTQgMTAuOTM5IiB9XQogICAgXTsKICAgIHZhciBTZXBhcmF0b3JIb3Jpem9udGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTYtNCA0LTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggOCA0LTQgNCA0IiB9XQogICAgXTsKICAgIHZhciBTZXBhcmF0b3JWZXJ0aWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTYgNC00LTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDgtNCA0IDQgNCIgfV0KICAgIF07CiAgICB2YXIgU2VydmVyQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAuODUyIDE0Ljc3Mi0uMzgzLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy4xNDggMTQuNzcyYTMgMyAwIDEgMC0yLjI5Ni01LjU0NGwtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjE0OCA5LjIyOC4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy41MyAxNS42OTYtLjM4Mi0uOTI0YTMgMyAwIDEgMS0yLjI5Ni01LjU0NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC43NzIgMTAuODUyLjkyMy0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0Ljc3MiAxMy4xNDguOTIzLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjUgMTBINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMmgtLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC41IDE0SDRhMiAyIDAgMCAwLTIgMnY0YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNGEyIDIgMCAwIDAtMi0yaC0uNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuMjI4IDEwLjg1Mi0uOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4yMjggMTMuMTQ4LS45MjMuMzgzIiB9XQogICAgXTsKICAgIHZhciBTZXJ2ZXJDcmFzaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTBINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE0SDRhMiAyIDAgMCAwLTIgMnY0YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNGEyIDIgMCAwIDAtMi0yaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgNi00IDZoNmwtNCA2IiB9XQogICAgXTsKICAgIHZhciBTZXJ2ZXJPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDJoMTNhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTAgMi41IDIuNUMyIDIgMiAyLjUgMiA1djNhMiAyIDAgMCAwIDIgMmg2eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxN3YtMWEyIDIgMCAwIDAtMi0yaC0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTRhMiAyIDAgMCAwLTIgMnY0YTIgMiAwIDAgMCAyIDJoMTYuNWwxLS41LjUuNS04LThINHoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICAgIHZhciBTZXJ2ZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjgiLCB4OiAiMiIsIHk6ICIyIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiOCIsIHg6ICIyIiwgeTogIjE0Iiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjYuMDEiLCB5MTogIjYiLCB5MjogIjYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNi4wMSIsIHkxOiAiMTgiLCB5MjogIjE4IiB9XQogICAgXTsKICAgIHZhciBTZXR0aW5nczIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxN0g1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDdoLTkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTciLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjciLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgU2V0dGluZ3MgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjY3MSA0LjEzNmEyLjM0IDIuMzQgMCAwIDEgNC42NTkgMCAyLjM0IDIuMzQgMCAwIDAgMy4zMTkgMS45MTUgMi4zNCAyLjM0IDAgMCAxIDIuMzMgNC4wMzMgMi4zNCAyLjM0IDAgMCAwIDAgMy44MzEgMi4zNCAyLjM0IDAgMCAxLTIuMzMgNC4wMzMgMi4zNCAyLjM0IDAgMCAwLTMuMzE5IDEuOTE1IDIuMzQgMi4zNCAwIDAgMS00LjY1OSAwIDIuMzQgMi4zNCAwIDAgMC0zLjMyLTEuOTE1IDIuMzQgMi4zNCAwIDAgMS0yLjMzLTQuMDMzIDIuMzQgMi4zNCAwIDAgMCAwLTMuODMxQTIuMzQgMi4zNCAwIDAgMSA2LjM1IDYuMDUxYTIuMzQgMi4zNCAwIDAgMCAzLjMxOS0xLjkxNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBTaGFwZXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjMgMTBhLjcuNyAwIDAgMS0uNjI2LTEuMDc5TDExLjQgM2EuNy43IDAgMCAxIDEuMTk4LS4wNDNMMTYuMyA4LjlhLjcuNyAwIDAgMS0uNTcyIDEuMVoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjE0Iiwgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3LjUiLCBjeTogIjE3LjUiLCByOiAiMy41IiB9XQogICAgXTsKICAgIHZhciBTaGFyZTIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICI1IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE5IiwgcjogIjMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOC41OSIsIHgyOiAiMTUuNDIiLCB5MTogIjEzLjUxIiwgeTI6ICIxNy40OSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNS40MSIsIHgyOiAiOC41OSIsIHkxOiAiNi41MSIsIHkyOiAiMTAuNDkiIH1dCiAgICBdOwogICAgdmFyIFNoYXJlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA2LTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMnY4YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtOCIgfV0KICAgIF07CiAgICB2YXIgU2hlZXQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIzIiwgeDI6ICIyMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIzIiwgeDI6ICIyMSIsIHkxOiAiMTUiLCB5MjogIjE1IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkiLCB4MjogIjkiLCB5MTogIjkiLCB5MjogIjIxIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIxNSIsIHkxOiAiOSIsIHkyOiAiMjEiIH1dCiAgICBdOwogICAgdmFyIFNoZWxsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQgMTFhMiAyIDAgMSAxLTQgMCA0IDQgMCAwIDEgOCAwIDYgNiAwIDAgMS0xMiAwIDggOCAwIDAgMSAxNiAwIDEwIDEwIDAgMSAxLTIwIDAgMTEuOTMgMTEuOTMgMCAwIDEgMi40Mi03LjIyIDIgMiAwIDEgMSAzLjE2IDIuNDQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNoaWVsZEFsZXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2aC4wMSIgfV0KICAgIF07CiAgICB2YXIgU2hpZWxkQmFuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC4yNDMgNS4yMSAxNC4zOSAxMi40NzIiIH1dCiAgICBdOwogICAgdmFyIFNoaWVsZENoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMiAyIDIgNC00IiB9XQogICAgXTsKICAgIHZhciBTaGllbGRFbGxpcHNpcyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmguMDEiIH1dCiAgICBdOwogICAgdmFyIFNoaWVsZE1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMmg2IiB9XQogICAgXTsKICAgIHZhciBTaGllbGRPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNSA1YTEgMSAwIDAgMC0xIDF2N2MwIDUgMy41IDcuNSA3LjY3IDguOTRhMSAxIDAgMCAwIC42Ny4wMWMyLjM1LS44MiA0LjQ4LTEuOTcgNS45LTMuNzEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOS4zMDkgMy42NTJBMTIuMjUyIDEyLjI1MiAwIDAgMCAxMS4yNCAyLjI4YTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXY3YTkuNzg0IDkuNzg0IDAgMCAxLS4wOCAxLjI2NCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU2hpZWxkSGFsZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIyVjIiIH1dCiAgICBdOwogICAgdmFyIFNoaWVsZFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXY2IiB9XQogICAgXTsKICAgIHZhciBTaGllbGRRdWVzdGlvbk1hcmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjEgOWEzIDMgMCAwIDEgNS44MiAxYzAgMi0zIDMtMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0KICAgIF07CiAgICB2YXIgU2hpZWxkWCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgOS41LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjUgOS41IDUgNSIgfV0KICAgIF07CiAgICB2YXIgU2hpZWxkVXNlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzc2IDE4LjkxYTYgNiAwIDAgMSAxMS4yNDkuMDAzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcjogIjQiIH1dCiAgICBdOwogICAgdmFyIFNoaWVsZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTaGlwV2hlZWwgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2Ny41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDUtNS4yMyA1LjIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyaC03LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgMTktNS4yMy01LjIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0LjVWMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMjMgMTMuNzcgNSAxOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjUgMTJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4yMyAxMC4yMyA1IDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMi41IiB9XQogICAgXTsKICAgIHZhciBTaGlwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTAuMTg5VjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxM1Y3YTIgMiAwIDAgMC0yLTJIN2EyIDIgMCAwIDAtMiAydjYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuMzggMjBBMTEuNiAxMS42IDAgMCAwIDIxIDE0bC04LjE4OC0zLjYzOWEyIDIgMCAwIDAtMS42MjQgMEwzIDE0YTExLjYgMTEuNiAwIDAgMCAyLjgxIDcuNzYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiAyMWMuNi41IDEuMiAxIDIuNSAxIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMXMxLjIgMSAyLjUgMWMyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNoaXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAuMzggMy40NiAxNiAyYTQgNCAwIDAgMS04IDBMMy42MiAzLjQ2YTIgMiAwIDAgMC0xLjM0IDIuMjNsLjU4IDMuNDdhMSAxIDAgMCAwIC45OS44NEg2djEwYzAgMS4xLjkgMiAyIDJoOGEyIDIgMCAwIDAgMi0yVjEwaDIuMTVhMSAxIDAgMCAwIC45OS0uODRsLjU4LTMuNDdhMiAyIDAgMCAwLTEuMzQtMi4yM3oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNob3BwaW5nQmFnID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTBhNCA0IDAgMCAxLTggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjEwMyA2LjAzNGgxNy43OTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy40IDUuNDY3YTIgMiAwIDAgMC0uNCAxLjJWMjBhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yVjYuNjY3YTIgMiAwIDAgMC0uNC0xLjJsLTItMi42NjdBMiAyIDAgMCAwIDE3IDJIN2EyIDIgMCAwIDAtMS42Ljh6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTaG9wcGluZ0Jhc2tldCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDExLTEgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAxMS00LTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMWgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zLjUgMTEgMS42IDcuNGEyIDIgMCAwIDAgMiAxLjZoOS44YTIgMiAwIDAgMCAyLTEuNmwxLjctNy40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNSAxNS41aDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTEgNC03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEgMSA5IiB9XQogICAgXTsKICAgIHZhciBTaG9wcGluZ0NhcnQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjIxIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMjEiLCByOiAiMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTIuMDUgMi4wNWgybDIuNjYgMTIuNDJhMiAyIDAgMCAwIDIgMS41OGg5Ljc4YTIgMiAwIDAgMCAxLjk1LTEuNTdsMS42NS03LjQzSDUuMTIiIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTaG93ZXJIZWFkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNCA0IDIuNSAyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNSA2LjVhNC45NSA0Ljk1IDAgMCAwLTcgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA1IDUgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTd2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2di4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxM3YuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTB2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIwdi4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNHYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTF2LjAxIiB9XQogICAgXTsKICAgIHZhciBTaHJlZGRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxM1Y0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2NSIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMnYtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOXYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMHYtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEzaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjB2LTMiIH1dCiAgICBdOwogICAgdmFyIFNob3ZlbCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjU2IDQuNTZhMS41IDEuNSAwIDAgMSAwIDIuMTIybC0uNDcuNDdhMyAzIDAgMCAxLTQuMjEyLS4wMyAzIDMgMCAwIDEgMC00LjI0M2wuNDQtLjQ0YTEuNSAxLjUgMCAwIDEgMi4xMjEgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAyMmExIDEgMCAwIDEtMS0xdi0zLjU4NmExIDEgMCAwIDEgLjI5My0uNzA3bDMuMzU1LTMuMzU1YTEuMjA1IDEuMjA1IDAgMCAxIDEuNzA0IDBsMy4yOTYgMy4yOTZhMS4yMDUgMS4yMDUgMCAwIDEgMCAxLjcwNGwtMy4zNTUgMy4zNTVhMSAxIDAgMCAxLS43MDcuMjkzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDcuODc5LTcuODc4IiB9XQogICAgXTsKICAgIHZhciBTaHJpbXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMjJjLjUtLjUgMS4xMi0xIDIuNS0xLTEuMzggMC0yLS41LTIuNS0xIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDJhMy4yOCAzLjI4IDAgMCAxLTMuMjI3IDEuNzk4bC02LjE3LS41NjFBMi4zODcgMi4zODcgMCAxIDAgNC4zODcgOEgxNS41YTEgMSAwIDAgMSAwIDEzIDEgMSAwIDAgMCAwLTVIMTJhNyA3IDAgMCAxLTctN1Y4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDhhOC41IDguNSAwIDAgMSAwIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZjMiAwIDQuNS00IDQtNiIgfV0KICAgIF07CiAgICB2YXIgU2hyaW5rID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTUgNiA2bS02LTZ2NC44bTAtNC44aDQuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE5LjhWMTVtMCAwSDQuMk05IDE1bC02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNC4yVjltMCAwaDQuOE0xNSA5bDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDQuMlY5bTAgMEg0LjJNOSA5IDMgMyIgfV0KICAgIF07CiAgICB2YXIgU2hydWIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMnYtNS4xNzJhMiAyIDAgMCAwLS41ODYtMS40MTRMOS41IDEzLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuNSAxNC41IDEyIDE3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDguOEE2IDYgMCAwIDEgMTMuOCAyMEgxMEE2LjUgNi41IDAgMCAxIDcgOGE1IDUgMCAwIDEgMTAgMHoiIH1dCiAgICBdOwogICAgdmFyIFNodWZmbGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNCA0IDQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDIgNCA0LTQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE4aDEuOTczYTQgNCAwIDAgMCAzLjMtMS43bDUuNDU0LTguNmE0IDQgMCAwIDEgMy4zLTEuN0gyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDZoMS45NzJhNCA0IDAgMCAxIDMuNiAyLjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMThoLTYuMDQxYTQgNCAwIDAgMS0zLjMtMS44bC0uMzU5LS40NSIgfV0KICAgIF07CiAgICB2YXIgU2lnbWEgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCA3VjVhMSAxIDAgMCAwLTEtMUg2LjVhLjUuNSAwIDAgMC0uNC44bDQuNSA2YTIgMiAwIDAgMSAwIDIuNGwtNC41IDZhLjUuNSAwIDAgMCAuNC44SDE3YTEgMSAwIDAgMCAxLTF2LTIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNpZ25hbEhpZ2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwdi00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdi04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIwVjgiIH1dCiAgICBdOwogICAgdmFyIFNpZ25hbExvdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjB2LTQiIH1dCiAgICBdOwogICAgdmFyIFNpZ25hbE1lZGl1bSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjB2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2LTgiIH1dCiAgICBdOwogICAgdmFyIFNpZ25hbFplcm8gPSBbWyJwYXRoIiwgeyBkOiAiTTIgMjBoLjAxIiB9XV07CiAgICB2YXIgU2lnbmFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMFY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDR2MTYiIH1dCiAgICBdOwogICAgdmFyIFNpZ25hdHVyZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTIxIDE3LTIuMTU2LTEuODY4QS41LjUgMCAwIDAgMTggMTUuNXYuNWExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTFjMC0yLjU0NS0zLjk5MS0zLjk3LTguNS00YTEgMSAwIDAgMCAwIDVjNC4xNTMgMCA0Ljc0NS0xMS4yOTUgNS43MDgtMTMuNWEyLjUgMi41IDAgMSAxIDMuMzEgMy4yODQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMWgxOCIgfV0KICAgIF07CiAgICB2YXIgU2lnbnBvc3RCaWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5SDRMMiA3bDItMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDVoNmwyIDItMiAyaC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIyVjRhMiAyIDAgMSAxIDQgMHYxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIyaDgiIH1dCiAgICBdOwogICAgdmFyIFNpZ25wb3N0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzdjMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTggNmEyIDIgMCAwIDEgMS4zODcuNTZsMi4zMDcgMi4yMmExIDEgMCAwIDEgMCAxLjQ0bC0yLjMwNyAyLjIyQTIgMiAwIDAgMSAxOCAxM0g2YTIgMiAwIDAgMS0xLjM4Ny0uNTZsLTIuMzA2LTIuMjJhMSAxIDAgMCAxIDAtMS40NGwyLjMwNi0yLjIyQTIgMiAwIDAgMSA2IDZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTaXJlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTh2LTZhNSA1IDAgMSAxIDEwIDB2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxYTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMXYtMWEyIDIgMCAwIDAtMi0ySDdhMiAyIDAgMCAwLTIgMnoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC41IDQuNSAxOCA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45MjkgNC45MjkuNzA3LjcwNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnY2IiB9XQogICAgXTsKICAgIHZhciBTa2lwQmFjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3Ljk3MSA0LjI4NUEyIDIgMCAwIDEgMjEgNnYxMmEyIDIgMCAwIDEtMy4wMjkgMS43MTVsLTkuOTk3LTUuOTk4YTIgMiAwIDAgMS0uMDAzLTMuNDMyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIwVjQiIH1dCiAgICBdOwogICAgdmFyIFNraXBGb3J3YXJkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNHYxNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTYuMDI5IDQuMjg1QTIgMiAwIDAgMCAzIDZ2MTJhMiAyIDAgMCAwIDMuMDI5IDEuNzE1bDkuOTk3LTUuOTk4YTIgMiAwIDAgMCAuMDAzLTMuNDMyeiIgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNrdWxsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuNSAxNy0uNS0xLS41IDFoMXoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMjJhMSAxIDAgMCAwIDEtMXYtMWEyIDIgMCAwIDAgMS41Ni0zLjI1IDggOCAwIDEgMC0xMS4xMiAwQTIgMiAwIDAgMCA4IDIwdjFhMSAxIDAgMCAwIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNSIsIGN5OiAiMTIiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjEyIiwgcjogIjEiIH1dCiAgICBdOwogICAgdmFyIFNsYWNrID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMyIsIGhlaWdodDogIjgiLCB4OiAiMTMiLCB5OiAiMiIsIHJ4OiAiMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDguNVYxMGgxLjVBMS41IDEuNSAwIDEgMCAxOSA4LjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMyIsIGhlaWdodDogIjgiLCB4OiAiOCIsIHk6ICIxNCIsIHJ4OiAiMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTUuNVYxNEgzLjVBMS41IDEuNSAwIDEgMCA1IDE1LjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjMiLCB4OiAiMTQiLCB5OiAiMTMiLCByeDogIjEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS41IDE5SDE0djEuNWExLjUgMS41IDAgMSAwIDEuNS0xLjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjMiLCB4OiAiMiIsIHk6ICI4Iiwgcng6ICIxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDVIMTBWMy41QTEuNSAxLjUgMCAxIDAgOC41IDUiIH1dCiAgICBdOwogICAgdmFyIFNsYXNoID0gW1sicGF0aCIsIHsgZDogIk0yMiAyIDIgMjIiIH1dXTsKICAgIHZhciBTbGlkZXJzVmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjF2LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOFYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE2aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTJWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMXYtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxMFYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjF2LTciIH1dCiAgICBdOwogICAgdmFyIFNsaWNlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgMTYuNTg2VjE5YTEgMSAwIDAgMS0xIDFIMkwxOC4zNyAzLjYzYTEgMSAwIDEgMSAzIDNsLTkuNjYzIDkuNjYzYTEgMSAwIDAgMS0xLjQxNCAwTDggMTQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNsaWRlcnNIb3Jpem9udGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE5SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJoLTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTloLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNWgtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwdjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMkgzIiB9XQogICAgXTsKICAgIHZhciBTbWFydHBob25lQ2hhcmdpbmcgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjIwIiwgeDogIjUiLCB5OiAiMiIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi42NjcgOCAxMCAxMmg0bC0yLjY2NyA0IiB9XQogICAgXTsKICAgIHZhciBTbWFydHBob25lID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIyMCIsIHg6ICI1IiwgeTogIjIiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThoLjAxIiB9XQogICAgXTsKICAgIHZhciBTbWFydHBob25lTmZjID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA4LjMyYTcuNDMgNy40MyAwIDAgMSAwIDcuMzYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuNDYgNi4yMWExMS43NiAxMS43NiAwIDAgMSAwIDExLjU4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjkxIDQuMWExNS45MSAxNS45MSAwIDAgMSAuMDEgMTUuOCIgfV0KICAgIF07CiAgICB2YXIgU21pbGVQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTF2MWExMCAxMCAwIDEgMS05LTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTRzMS41IDIgNCAyIDQtMiA0LTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiOS4wMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDJ2NiIgfV0KICAgIF07CiAgICB2YXIgU21pbGUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0czEuNSAyIDQgMiA0LTIgNC0yIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkiLCB4MjogIjkuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjE1LjAxIiwgeTE6ICI5IiwgeTI6ICI5IiB9XQogICAgXTsKICAgIHZhciBTbmFpbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTNhNiA2IDAgMSAwIDEyIDAgNCA0IDAgMSAwLTggMCAyIDIgMCAwIDAgNCAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjEzIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWgxMmM0LjQgMCA4LTMuNiA4LThWN2EyIDIgMCAxIDAtNCAwdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMyAxOS4xIDUuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAzIDIwLjkgNS4yIiB9XQogICAgXTsKICAgIHZhciBTbm93Zmxha2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAyMC0xLjI1LTIuNUw2IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDQgOC43NSA2LjUgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDIwIDEuMjUtMi41TDE4IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDQgMS4yNSAyLjVMMTggNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMS0zLTZoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMy0zIDYgMS41IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmg2LjVMMTAgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxMC0xLjUgMiAxLjUgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMmgtNi41TDE0IDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQgMTAgMS41IDJMNCAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDIxIDMtNi0xLjUtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDMgMyA2aDQiIH1dCiAgICBdOwogICAgdmFyIFNvYXBEaXNwZW5zZXJEcm9wbGV0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuNSAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMkg3YTIgMiAwIDAgMC0yIDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuMjkgMTQuNzZBNi42NyA2LjY3IDAgMCAxIDE3IDExYTYuNiA2LjYgMCAwIDEtMi4yOSAzLjc2Yy0xLjE1LjkyLTEuNzEgMi4wNC0xLjcxIDMuMTkgMCAyLjIyIDEuOCA0LjA1IDQgNC4wNXM0LTEuODMgNC00LjA1YzAtMS4xNi0uNTctMi4yNi0xLjcxLTMuMTkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS42MDcgMjFINmEyIDIgMCAwIDEtMi0ydi03YTIgMiAwIDAgMSAyLTJoN1Y3YTEgMSAwIDAgMC0xLTFIOWExIDEgMCAwIDAtMSAxdjMiIH1dCiAgICBdOwogICAgdmFyIFNvZmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA5VjZhMiAyIDAgMCAwLTItMkg2YTIgMiAwIDAgMC0yIDJ2MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE2YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNWEyIDIgMCAwIDAtNCAwdjEuNWEuNS41IDAgMCAxLS41LjVoLTExYS41LjUgMCAwIDEtLjUtLjVWMTFhMiAyIDAgMCAwLTQgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNHY5IiB9XQogICAgXTsKICAgIHZhciBTb2xhclBhbmVsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjI4IDE0LTQuNTYgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMi0xLjU1OC00SDQuNTU4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTB2MiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02LjI0NSAxNS4wNEEyIDIgMCAwIDEgOCAxNGgxMmExIDEgMCAwIDEgLjg2NCAxLjUwNWwtMy4xMSA1LjQ1N0EyIDIgMCAwIDEgMTYgMjJINGExIDEgMCAwIDEtLjg2My0xLjUwNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyYTQgNCAwIDAgMS00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC42NiA3LjY2IDEuNDEgMS40MSIgfV0KICAgIF07CiAgICB2YXIgU291cCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxYTkgOSAwIDAgMCA5LTlIM2E5IDkgMCAwIDAgOSA5WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjUgMTIgMjIgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi4yNSAzYy4yNy4xLjguNTMuNzUgMS4zNi0uMDYuODMtLjkzIDEuMi0xIDIuMDItLjA1Ljc4LjM0IDEuMjQuNzMgMS42MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS4yNSAzYy4yNy4xLjguNTMuNzQgMS4zNi0uMDUuODMtLjkzIDEuMi0uOTggMi4wMi0uMDYuNzguMzMgMS4yNC43MiAxLjYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMjUgM2MuMjcuMS44LjUzLjc1IDEuMzYtLjA2LjgzLS45MyAxLjItMSAyLjAyLS4wNS43OC4zNCAxLjI0Ljc0IDEuNjIiIH1dCiAgICBdOwogICAgdmFyIFNwYWNlID0gW1sicGF0aCIsIHsgZDogIk0yMiAxN3YxYzAgLjUtLjUgMS0xIDFIM2MtLjUgMC0xLS41LTEtMXYtMSIgfV1dOwogICAgdmFyIFNwYWRlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTh2NCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE0LjQ5OWE1LjUgNS41IDAgMCAwIDkuNTkxIDMuNjc1LjYuNiAwIDAgMSAuODE4LjAwMUE1LjUgNS41IDAgMCAwIDIyIDE0LjVjMC0yLjI5LTEuNS00LTMtNS41bC01LjQ5Mi01LjMxMmEyIDIgMCAwIDAtMy0uMDJMNSA4Ljk5OWMtMS41IDEuNS0zIDMuMi0zIDUuNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU3BhcmtsZXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS4wMTcgMi44MTRhMSAxIDAgMCAxIDEuOTY2IDBsMS4wNTEgNS41NThhMiAyIDAgMCAwIDEuNTk0IDEuNTk0bDUuNTU4IDEuMDUxYTEgMSAwIDAgMSAwIDEuOTY2bC01LjU1OCAxLjA1MWEyIDIgMCAwIDAtMS41OTQgMS41OTRsLTEuMDUxIDUuNTU4YTEgMSAwIDAgMS0xLjk2NiAwbC0xLjA1MS01LjU1OGEyIDIgMCAwIDAtMS41OTQtMS41OTRsLTUuNTU4LTEuMDUxYTEgMSAwIDAgMSAwLTEuOTY2bDUuNTU4LTEuMDUxYTIgMiAwIDAgMCAxLjU5NC0xLjU5NHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDRoLTQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICIyMCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBTcGFya2xlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMDE3IDIuODE0YTEgMSAwIDAgMSAxLjk2NiAwbDEuMDUxIDUuNTU4YTIgMiAwIDAgMCAxLjU5NCAxLjU5NGw1LjU1OCAxLjA1MWExIDEgMCAwIDEgMCAxLjk2NmwtNS41NTggMS4wNTFhMiAyIDAgMCAwLTEuNTk0IDEuNTk0bC0xLjA1MSA1LjU1OGExIDEgMCAwIDEtMS45NjYgMGwtMS4wNTEtNS41NThhMiAyIDAgMCAwLTEuNTk0LTEuNTk0bC01LjU1OC0xLjA1MWExIDEgMCAwIDEgMC0xLjk2Nmw1LjU1OC0xLjA1MWEyIDIgMCAwIDAgMS41OTQtMS41OTR6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTcGVha2VyID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIyMCIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNmguMDEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTQiLCByOiAiNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNGguMDEiIH1dCiAgICBdOwogICAgdmFyIFNwZWVjaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguOCAyMHYtNC4xbDEuOS4yYTIuMyAyLjMgMCAwIDAgMi4xNjQtMi4xVjguM0E1LjM3IDUuMzcgMCAwIDAgMiA4LjI1YzAgMi44LjY1NiAzLjA1NCAxIDQuNTVhNS43NyA1Ljc3IDAgMCAxIC4wMjkgMi43NThMMiAyMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS44IDE3LjhhNy41IDcuNSAwIDAgMCAuMDAzLTEwLjYwMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNWEzLjUgMy41IDAgMCAwLS4wMjUtNC45NzUiIH1dCiAgICBdOwogICAgdmFyIFNwZWxsQ2hlY2syID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxNiA2LTEyIDYgMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMjFjMS4xIDAgMS4xLTEgMi4zLTFzMS4xIDEgMi4zIDFjMS4xIDAgMS4xLTEgMi4zLTEgMS4xIDAgMS4xIDEgMi4zIDEgMS4xIDAgMS4xLTEgMi4zLTEgMS4xIDAgMS4xIDEgMi4zIDEgMS4xIDAgMS4xLTEgMi4zLTEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNwZWxsQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDE2IDYtMTIgNiAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMjAgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgU3BsaW5lUG9pbnRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjAzNCAxMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDNsLTMuNDQ0IDEuMDY4YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY3IDMuNDQzYS41LjUgMCAwIDEtLjk0My4wMzN6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTdBMTIgMTIgMCAwIDEgMTcgNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICI1IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxOSIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBTcGxpbmUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICI1IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTdBMTIgMTIgMCAwIDEgMTcgNSIgfV0KICAgIF07CiAgICB2YXIgU3BsaXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzaDV2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDNIM3Y1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi04LjNhNCA0IDAgMCAwLTEuMTcyLTIuODcyTDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5IDYtNiIgfV0KICAgIF07CiAgICB2YXIgU3Bvb2wgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAxMy40NCA0LjQ0MiAxNy4wODJBMiAyIDAgMCAwIDQuOTgyIDIxSDE5YTIgMiAwIDAgMCAuNTU4LTMuOTIxbC0xLjExNS0uMzJBMiAyIDAgMCAxIDE3IDE0LjgzN1Y3LjY2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTcgMTAuNTYgMTIuNTU4LTMuNjQyQTIgMiAwIDAgMCAxOS4wMTggM0g1YTIgMiAwIDAgMC0uNTU4IDMuOTIxbDEuMTE1LjMyQTIgMiAwIDAgMSA3IDkuMTYzdjcuMTc4IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTcG90bGlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS4yOTUgMTkuNTYyIDE2IDIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE2IDMuNzU4IDIuMDk4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDEyLjUgMy4wMjYtLjU5OCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03LjYxIDYuM2EzIDMgMCAwIDAtMy45MiAxLjNsLTEuMzggMi43OWEzIDMgMCAwIDAgMS4zIDMuOTFsNi44OSAzLjU5N2ExIDEgMCAwIDAgMS4zNDItLjQ0N2wzLjEwNi02LjIxMWExIDEgMCAwIDAtLjQ0Ny0xLjM0MXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA5VjIiIH1dCiAgICBdOwogICAgdmFyIFNwcmF5Q2FuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDdoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA5aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDExaC4wMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiNCIsIHg6ICIxNSIsIHk6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDkgMiAydjEwYzAgLjYtLjQgMS0xIDFoLTZjLS42IDAtMS0uNC0xLTFWMTFsMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzIDE0IDgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyAxOSA4LTIiIH1dCiAgICBdOwogICAgdmFyIFNwcm91dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDkuNTM2VjdhNCA0IDAgMCAxIDQtNGgxLjVhLjUuNSAwIDAgMSAuNS41VjVhNCA0IDAgMCAxLTQgNCA0IDQgMCAwIDAtNCA0YzAgMiAxIDMgMSA1YTUgNSAwIDAgMS0xIDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA5YTUgNSAwIDAgMSA4IDQgNSA1IDAgMCAxLTgtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxaDE0IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBcnJvd0Rvd25MZWZ0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgOC04IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZIOFY4IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBY3Rpdml0eSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEyaC0ybC0yIDUtMi0xMC0yIDVINyIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dEb3duUmlnaHQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDggOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDh2OEg4IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBcnJvd0Rvd24gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxMiA0IDQgNC00IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBcnJvd0xlZnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA4LTQgNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJIOCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dPdXREb3duTGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIxaDZhMiAyIDAgMCAwIDItMlY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAyMSA5LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMUgzdi02IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBcnJvd091dERvd25SaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIxLTktOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNXY2aC02IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBcnJvd091dFVwTGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDNoNmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMyA5IDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5VjNoNiIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dPdXRVcFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTN2NmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTkgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzaDZ2NiIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dVcExlZnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2VjhoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNiA4IDgiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZUFycm93UmlnaHQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTYgNC00LTQtNCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dVcFJpZ2h0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4aDh2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE2IDgtOCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dVcCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDEyLTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZWOCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXN0ZXJpc2sgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41IDE0IDctNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjUgMTAgNyA0IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVCb3R0b21EYXNoZWRTY2lzc29ycyA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjUiLCB5MTogIjMiLCB4MjogIjE5IiwgeTI6ICIzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB5MTogIjUiLCB4MjogIjMiLCB5MjogIjE5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIxIiwgeTE6ICI1IiwgeDI6ICIyMSIsIHkyOiAiMTkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHkxOiAiMjEiLCB4MjogIjEwIiwgeTI6ICIyMSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNCIsIHkxOiAiMjEiLCB4MjogIjE1IiwgeTI6ICIyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0gMyA1IEEyIDIgMCAwIDEgNSAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTSAxOSAzIEEyIDIgMCAwIDEgMjEgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0gNSAyMSBBMiAyIDAgMCAxIDMgMTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNIDIxIDE5IEEyIDIgMCAwIDEgMTkgMjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4LjUiLCBjeTogIjguNSIsIHI6ICIxLjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOS41NjA2NiIsIHkxOiAiOS41NjA2NiIsIHgyOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE3IiwgeTE6ICIxNyIsIHgyOiAiMTQuODIiLCB5MjogIjE0LjgyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOC41IiwgY3k6ICIxNS41IiwgcjogIjEuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5LjU2MDY2IiwgeTE6ICIxNC40MzkzNCIsIHgyOiAiMTciLCB5MjogIjciIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZUNoYXJ0R2FudHQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDhoNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTZoNSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQ2hlY2tCaWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMC42NTZWMTlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDEyLjM0NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDExIDMgM0wyMiA0IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVDaGVjayA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTIgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQ2hldnJvbkRvd24gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMC00IDQtNC00IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVDaGV2cm9uTGVmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE2LTQtNCA0LTQiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZUNoZXZyb25SaWdodCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDggNCA0LTQgNCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQ2hldnJvblVwID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxNCA0LTQgNCA0IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVDb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgOS0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE1IDMtMy0zLTMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZURhc2hlZEJvdHRvbUNvZGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5LjUgOCAxMmwyIDIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDkuNSAyIDIuNS0yIDIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxYTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxaDEiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZURhc2hlZEJvdHRvbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMWgxIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVEYXNoZWRNb3VzZVBvaW50ZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi4wMzQgMTIuNjgxYS40OTguNDk4IDAgMCAxIC42NDctLjY0N2w5IDMuNWEuNS41IDAgMCAxLS4wMzMuOTQzbC0zLjQ0NCAxLjA2OGExIDEgMCAwIDAtLjY2LjY2bC0xLjA2NyAzLjQ0M2EuNS41IDAgMCAxLS45NDMuMDMzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDNhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzYTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM2gxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOXYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTR2MSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlRGFzaGVkS2FuYmFuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA3djciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDd2OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDNhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDNoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgM2EyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE5YTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTR2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDl2MSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlRGFzaGVkVG9wU29saWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTlhMiAyIDAgMCAxLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlRGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzYTIgMiAwIDAgMC0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgM2EyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE5YTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM2gxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE0djEiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZURpdmlkZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE2IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIxNiIsIHkyOiAiMTYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI4IiwgeTI6ICI4IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVEb3QgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVFcXVhbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNGgxMCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlRnVuY3Rpb24gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE3YzIgMCAyLjgtMSAyLjgtMi44VjEwYzAtMiAxLTMuMyAzLjItMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDExLjJoNS43IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVLYW5iYW4gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDd2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgN3Y5IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVMaWJyYXJ5ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA3djEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNyAyIDEwIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVNID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk04IDE2VjguNWEuNS41IDAgMCAxIC45LS4zbDIuNyAzLjU5OWEuNS41IDAgMCAwIC44IDBsMi43LTMuNmEuNS41IDAgMCAxIC45LjNWMTYiIH0KICAgICAgXSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVNZW51ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA4aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmgxMCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlTWludXMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZU1vdXNlUG9pbnRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjAzNCAxMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDNsLTMuNDQ0IDEuMDY4YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY3IDMuNDQzYS41LjUgMCAwIDEtLjk0My4wMzN6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVQYXJraW5nT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMy42IDMuNkEyIDIgMCAwIDEgNSAzaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLS41OSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOC43VjE5YTIgMiAwIDAgMCAyIDJoMTAuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTNhMyAzIDAgMSAwIDAtNkg5djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN3YtMi4zIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVQYXJraW5nID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN1Y3aDRhMyAzIDAgMCAxIDAgNkg5IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVQYXVzZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEwIiwgeDI6ICIxMCIsIHkxOiAiMTUiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTQiLCB4MjogIjE0IiwgeTE6ICIxNSIsIHkyOiAiOSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlUGVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM0g1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0ydi03IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjM3NSAyLjYyNWExIDEgMCAwIDEgMyAzbC05LjAxMyA5LjAxNGEyIDIgMCAwIDEtLjg1My41MDVsLTIuODczLjg0YS41LjUgMCAwIDEtLjYyLS42MmwuODQtMi44NzNhMiAyIDAgMCAxIC41MDYtLjg1MnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNxdWFyZVBlcmNlbnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1aC4wMSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlUGkgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDdoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgN3YxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxN2EyIDIgMCAwIDEtMi0yVjciIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVBpbGNyb3cgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMkg5LjVhMi41IDIuNSAwIDAgMSAwLTVIMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3YxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA3djEwIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVQbGF5ID0gWwogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSA5LjAwM2ExIDEgMCAwIDEgMS41MTctLjg1OWw0Ljk5NyAyLjk5N2ExIDEgMCAwIDEgMCAxLjcxOGwtNC45OTcgMi45OTdBMSAxIDAgMCAxIDkgMTQuOTk2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU3F1YXJlUGx1cyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVBvd2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuOTk4IDkuMDAzYTUgNSAwIDEgMCA4LS4wMDUiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVJhZGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaDJsMiA1IDItMTBoNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMyIsIHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlUm91bmRDb3JuZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMWE4IDggMCAwIDAtOC04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDQiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVNjaXNzb3JzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4LjUiLCBjeTogIjguNSIsIHI6ICIxLjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOS41NjA2NiIsIHkxOiAiOS41NjA2NiIsIHgyOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE3IiwgeTE6ICIxNyIsIHgyOiAiMTQuODIiLCB5MjogIjE0LjgyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOC41IiwgY3k6ICIxNS41IiwgcjogIjEuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5LjU2MDY2IiwgeTE6ICIxNC40MzkzNCIsIHgyOiAiMTciLCB5MjogIjciIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVNpZ21hID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOC45VjdIOGw0IDUtNCA1aDh2LTEuOSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlU2xhc2ggPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICIxNSIsIHkxOiAiMTUiLCB5MjogIjkiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVNwbGl0SG9yaXpvbnRhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTlINWMtMSAwLTItMS0yLTJWN2MwLTEgMS0yIDItMmgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVoM2MxIDAgMiAxIDIgMnYxMGMwIDEtMSAyLTIgMmgtMyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjQiLCB5MjogIjIwIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVTcGxpdFZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA4VjVjMC0xIDEtMiAyLTJoMTBjMSAwIDIgMSAyIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNnYzYzAgMS0xIDItMiAySDdjLTEgMC0yLTEtMi0ydi0zIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjQiLCB4MjogIjIwIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVNxdWFyZSA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiOCIsIHk6ICI4Iiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlU3RhY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEwYy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoNGMxLjEgMCAyIC45IDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNmMtMS4xIDAtMi0uOS0yLTJ2LTRjMC0xLjEuOS0yIDItMmg0YzEuMSAwIDIgLjkgMiAyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4IiwgeDogIjE0IiwgeTogIjE0Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVTdGFyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMDM1IDcuNjlhMSAxIDAgMCAxIDEuOTA5LjAyNGwuNzM3IDEuNDUyYTEgMSAwIDAgMCAuNzM3LjUzNWwxLjYzNC4yNTZhMSAxIDAgMCAxIC41ODggMS44MDZsLTEuMTcyIDEuMTY4YTEgMSAwIDAgMC0uMjgyLjg2NmwuMjU5IDEuNjEzYTEgMSAwIDAgMS0xLjU0MSAxLjEzNGwtMS40NjUtLjc1YTEgMSAwIDAgMC0uOTEyIDBsLTEuNDY1Ljc1YTEgMSAwIDAgMS0xLjUzOS0xLjEzM2wuMjU4LTEuNjEzYTEgMSAwIDAgMC0uMjgyLS44NjZsLTEuMTU2LTEuMTUzYTEgMSAwIDAgMSAuNTcyLTEuODIybDEuNjMzLS4yNTZhMSAxIDAgMCAwIC43MzctLjUzNXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVN0b3AgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjkiLCB5OiAiOSIsIHdpZHRoOiAiNiIsIGhlaWdodDogIjYiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVRlcm1pbmFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxMSAyLTItMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEzaDQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVVzZXJSb3VuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIxYTYgNiAwIDAgMC0xMiAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcjogIjQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVVzZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjF2LTJhMiAyIDAgMCAxIDItMmg2YTIgMiAwIDAgMSAyIDJ2MiIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlWCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDktNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgOSA2IDYiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZSA9IFtbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dXTsKICAgIHZhciBTcXVhcmVzRXhjbHVkZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2IDEydjJhMiAyIDAgMCAxLTIgMkg5YTEgMSAwIDAgMC0xIDF2M2EyIDIgMCAwIDAgMiAyaDEwYTIgMiAwIDAgMCAyLTJWMTBhMiAyIDAgMCAwLTItMmgwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTZhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnYzYTEgMSAwIDAgMS0xIDFoLTVhMiAyIDAgMCAwLTIgMnYyIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTcXVhcmVzSW50ZXJzZWN0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjJhMiAyIDAgMCAxLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyYTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMFY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNGEyIDIgMCAwIDEgMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDhhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIwYTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNmEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTBhMiAyIDAgMCAxIDItMmg1YTEgMSAwIDAgMSAxIDF2NWEyIDIgMCAwIDEtMiAySDlhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyaDIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZXNTdWJ0cmFjdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIyYTIgMiAwIDAgMS0yLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjJoLTIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgNGEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDNhMSAxIDAgMCAwIDEtMXYtNWEyIDIgMCAwIDEgMi0yaDVhMSAxIDAgMCAwIDEtMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgOGEyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjBhMiAyIDAgMCAxLTIgMiIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlc1VuaXRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAxNmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjNhMSAxIDAgMCAwIDEgMWgzYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkgxMGEyIDIgMCAwIDEtMi0ydi0zYTEgMSAwIDAgMC0xLTF6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTcXVpcmNsZURhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjc3IDMuMDQzYTM0IDM0IDAgMCAwLTMuNTQgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy43NzEgMjAuOTU2YTMzIDMzIDAgMCAxLTMuNTQxLjAwMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4xOCAxNy43NGMtLjUxIDEuMTUtMS4yOSAxLjkzLTIuNDM5IDIuNDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuMTggNi4yNTljLS41MS0xLjE0OC0xLjI5MS0xLjkyOS0yLjQ0LTIuNDM4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjk1NyAxMC4yM2EzMyAzMyAwIDAgMSAwIDMuNTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4wNDMgMTAuMjNhMzQgMzQgMCAwIDAgLjAwMSAzLjU0MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjI2IDIwLjE3OWMtMS4xNS0uNTA4LTEuOTMtMS4yOS0yLjQ0LTIuNDM4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMjYgMy44MmMtMS4xNDkuNTEtMS45MyAxLjI5MS0yLjQ0IDIuNDQiIH1dCiAgICBdOwogICAgdmFyIFNxdWlyY2xlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM2M3LjIgMCA5IDEuOCA5IDlzLTEuOCA5LTkgOS05LTEuOC05LTkgMS44LTkgOS05IiB9XQogICAgXTsKICAgIHZhciBTcXVpcnJlbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjIzNiAyMmEzIDMgMCAwIDAtMi4yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjBhMyAzIDAgMCAxIDMtM2gxYTIgMiAwIDAgMCAyLTJ2LTJhNCA0IDAgMCAwLTQtNFY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEzaC4wMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCA2YTQgNCAwIDAgMC00IDQgNyA3IDAgMCAwLTcgN2MwLTUgNC01IDQtMTAuNWE0LjUgNC41IDAgMSAwLTkgMCAyLjUgMi41IDAgMCAwIDUgMEM3IDEwIDMgMTEgMyAxN2MwIDIuOCAyLjIgNSA1IDVoMTAiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFN0YW1wID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTNWOC41QzE0IDcgMTUgNyAxNSA1YTMgMyAwIDAgMC02IDBjMCAyIDEgMiAxIDMuNVYxMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxNS41YTIuNSAyLjUgMCAwIDAtMi41LTIuNWgtMTFBMi41IDIuNSAwIDAgMCA0IDE1LjVWMTdhMSAxIDAgMCAwIDEgMWgxNGExIDEgMCAwIDAgMS0xeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIyaDE0IiB9XQogICAgXTsKICAgIHZhciBTdGFySGFsZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDE4LjMzOGEyLjEgMi4xIDAgMCAwLS45ODcuMjQ0TDYuMzk2IDIxLjAxYS41My41MyAwIDAgMS0uNzctLjU2bC44ODEtNS4xMzlhMi4xMiAyLjEyIDAgMCAwLS42MTEtMS44NzlMMi4xNiA5Ljc5NWEuNTMuNTMgMCAwIDEgLjI5NC0uOTA2bDUuMTY1LS43NTVhMi4xMiAyLjEyIDAgMCAwIDEuNTk3LTEuMTZsMi4zMDktNC42NzlBLjUzLjUzIDAgMCAxIDEyIDIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFN0YXJPZmYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMC4zNDQgNC42ODggMS4xODEtMi4zOTNhLjUzLjUzIDAgMCAxIC45NSAwbDIuMzEgNC42NzlhMi4xMiAyLjEyIDAgMCAwIDEuNTk1IDEuMTZsNS4xNjYuNzU2YS41My41MyAwIDAgMSAuMjk0LjkwNGwtMy4yMzcgMy4xNTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTcuOTQ1IDE3Ljk0NS40MyAyLjUwNWEuNTMuNTMgMCAwIDEtLjc3MS41NmwtNC42MTgtMi40MjhhMi4xMiAyLjEyIDAgMCAwLTEuOTczIDBMNi4zOTYgMjEuMDFhLjUzLjUzIDAgMCAxLS43Ny0uNTZsLjg4MS01LjEzOWEyLjEyIDIuMTIgMCAwIDAtLjYxMS0xLjg3OUwyLjE2IDkuNzk1YS41My41MyAwIDAgMSAuMjk0LS45MDZsNS4xNjUtLjc1NWE4IDggMCAwIDAgLjQtLjA5OSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogICAgdmFyIFN0YXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS41MjUgMi4yOTVhLjUzLjUzIDAgMCAxIC45NSAwbDIuMzEgNC42NzlhMi4xMjMgMi4xMjMgMCAwIDAgMS41OTUgMS4xNmw1LjE2Ni43NTZhLjUzLjUzIDAgMCAxIC4yOTQuOTA0bC0zLjczNiAzLjYzOGEyLjEyMyAyLjEyMyAwIDAgMC0uNjExIDEuODc4bC44ODIgNS4xNGEuNTMuNTMgMCAwIDEtLjc3MS41NmwtNC42MTgtMi40MjhhMi4xMjIgMi4xMjIgMCAwIDAtMS45NzMgMEw2LjM5NiAyMS4wMWEuNTMuNTMgMCAwIDEtLjc3LS41NmwuODgxLTUuMTM5YTIuMTIyIDIuMTIyIDAgMCAwLS42MTEtMS44NzlMMi4xNiA5Ljc5NWEuNTMuNTMgMCAwIDEgLjI5NC0uOTA2bDUuMTY1LS43NTVhMi4xMjIgMi4xMjIgMCAwIDAgMS41OTctMS4xNnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFN0ZXRob3Njb3BlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM0g0YTIgMiAwIDAgMC0yIDJ2NGE2IDYgMCAwIDAgMTIgMFY1YTIgMiAwIDAgMC0yLTJoLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWE2IDYgMCAwIDAgMTIgMHYtMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjIwIiwgY3k6ICIxMCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBTdGVwQmFjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjk3MSA0LjI4NUEyIDIgMCAwIDEgMTcgNnYxMmEyIDIgMCAwIDEtMy4wMjkgMS43MTVsLTkuOTk3LTUuOTk4YTIgMiAwIDAgMS0uMDAzLTMuNDMyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAyMFY0IiB9XQogICAgXTsKICAgIHZhciBTdGVwRm9yd2FyZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTAuMDI5IDQuMjg1QTIgMiAwIDAgMCA3IDZ2MTJhMiAyIDAgMCAwIDMuMDI5IDEuNzE1bDkuOTk3LTUuOTk4YTIgMiAwIDAgMCAuMDAzLTMuNDMyeiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA0djE2IiB9XQogICAgXTsKICAgIHZhciBTdGlja2VyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgOWEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTUgM0g1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTNoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNnMuOCAxIDIgMWMxLjMgMCAyLTEgMi0xIiB9XQogICAgXTsKICAgIHZhciBTdGlja3lOb3RlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgOWEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTUgM0g1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjVhMSAxIDAgMCAwIDEgMWg1IiB9XQogICAgXTsKICAgIHZhciBTdG9uZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjI2NCAyLjIwNUE0IDQgMCAwIDAgNi40MiA0LjIxMWwtNCA4YTQgNCAwIDAgMCAxLjM1OSA1LjExN2w2IDRhNCA0IDAgMCAwIDQuNDM4IDBsNi00YTQgNCAwIDAgMCAxLjU3Ni00LjU5MmwtMi02YTQgNCAwIDAgMC0yLjUzLTIuNTN6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjk5IDIyIDE0IDEybDcuODIyIDMuMTg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEyIDguNDcgMi4zMDIiIH1dCiAgICBdOwogICAgdmFyIFN0cmV0Y2hIb3Jpem9udGFsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjYiLCB4OiAiMiIsIHk6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgU3RvcmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMXYtNWExIDEgMCAwIDAtMS0xaC00YTEgMSAwIDAgMC0xIDF2NSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNy43NzQgMTAuMzFhMS4xMiAxLjEyIDAgMCAwLTEuNTQ5IDAgMi41IDIuNSAwIDAgMS0zLjQ1MSAwIDEuMTIgMS4xMiAwIDAgMC0xLjU0OCAwIDIuNSAyLjUgMCAwIDEtMy40NTIgMCAxLjEyIDEuMTIgMCAwIDAtMS41NDkgMCAyLjUgMi41IDAgMCAxLTMuNzctMy4yNDhsMi44ODktNC4xODRBMiAyIDAgMCAxIDcgMmgxMGEyIDIgMCAwIDEgMS42NTMuODczbDIuODk1IDQuMTkyYTIuNSAyLjUgMCAwIDEtMy43NzQgMy4yNDQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMC45NVYxOWEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJ2LTguMDUiIH1dCiAgICBdOwogICAgdmFyIFN0cmV0Y2hWZXJ0aWNhbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIyMCIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjIwIiwgeDogIjE0IiwgeTogIjIiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFN0cmlrZXRocm91Z2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0SDlhMyAzIDAgMCAwLTIuODMgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMmE0IDQgMCAwIDEgMCA4SDYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNCIsIHgyOiAiMjAiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgICB2YXIgU3Vic2NyaXB0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNCA1IDggOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA1LTggOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxOWgtNGMwLTEuNS40NC0yIDEuNS0yLjVTMjAgMTUuMzMgMjAgMTRjMC0uNDctLjE3LS45My0uNDgtMS4yOWEyLjExIDIuMTEgMCAwIDAtMi42Mi0uNDRjLS40Mi4yNC0uNzQuNjItLjkgMS4wNyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU3VuRGltID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjY1NyA2LjM0M2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNjU3IDE3LjY1N2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zNDMgMTcuNjU3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjM0MyA2LjM0M2guMDEiIH1dCiAgICBdOwogICAgdmFyIFN1bk1lZGl1bSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEyaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTguMzY0IDUuNjM2LS43MDcuNzA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuMzQzIDE3LjY1Ny0uNzA3LjcwNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01LjYzNiA1LjYzNi43MDcuNzA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjY1NyAxNy42NTcuNzA3LjcwNyIgfV0KICAgIF07CiAgICB2YXIgU3VuTW9vbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC44MzcgMTYuMzg1YTYgNiAwIDEgMS03LjIyMy03LjIyMmMuNjI0LS4xNDcuOTcuNjYuNzE1IDEuMjQ4YTQgNCAwIDAgMCA1LjI2IDUuMjU5Yy41ODktLjI1NSAxLjM5Ni4wOSAxLjI0OC43MTUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJhNCA0IDAgMCAwLTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA1LTEuMjU2IDEuMjU2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEyaDIiIH1dCiAgICBdOwogICAgdmFyIFN1blNub3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMXYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA0VjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOWEzIDMgMCAwIDAgMCA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDIwIDEuMjUtMi41TDE4IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDQgMS4yNSAyLjVMMTggNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMS0zLTYgMS41LTNIMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMy0zIDYgMS41IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDEwLTEuNSAyIDEuNSAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMuNjQgMTguMzYuNy0uNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjM0IDYuMzQtLjctLjciIH1dCiAgICBdOwogICAgdmFyIFN1bnJpc2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45MyAxMC45MyAxLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMDcgMTAuOTMtMS40MSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIySDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThhNCA0IDAgMCAwLTggMCIgfV0KICAgIF07CiAgICB2YXIgU3VuID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkzIDQuOTMgMS40MSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjY2IDE3LjY2IDEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjM0IDE3LjY2LTEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4wNyA0LjkzLTEuNDEgMS40MSIgfV0KICAgIF07CiAgICB2YXIgU3Vuc2V0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTBWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkzIDEwLjkzIDEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMThoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4wNyAxMC45My0xLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA2LTQgNC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThhNCA0IDAgMCAwLTggMCIgfV0KICAgIF07CiAgICB2YXIgU3VwZXJzY3JpcHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDE5IDgtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxOS04LTgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTJoLTRjMC0xLjUuNDQyLTIgMS41LTIuNVMyMCA4LjMzNCAyMCA3LjAwMmMwLS40NzItLjE3LS45My0uNDg0LTEuMjlhMi4xMDUgMi4xMDUgMCAwIDAtMi42MTctLjQzNmMtLjQyLjIzOS0uNzM4LjYxNC0uODk5IDEuMDYiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFN3YXRjaEJvb2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxN2E0IDQgMCAwIDEtOCAwVjVhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjcgMTNIMTlhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJINyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0gNyAxN2guMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIm0xMSA4IDIuMy0yLjNhMi40IDIuNCAwIDAgMSAzLjQwNC4wMDRMMTguNiA3LjZhMi40IDIuNCAwIDAgMSAuMDI2IDMuNDM0TDkuOSAxOS44IiB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU3dpc3NGcmFuYyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIxVjNoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE2aDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOS41aDciIH1dCiAgICBdOwogICAgdmFyIFN3aXRjaENhbWVyYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE5SDRhMiAyIDAgMCAxLTItMlY3YTIgMiAwIDAgMSAyLTJoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA1aDdhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAyaC01IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggMjItMy0zIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDIgMyAzLTMgMyIgfV0KICAgIF07CiAgICB2YXIgU3dvcmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSAxOS02LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAyMS0yLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxNi00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS41IDE3LjUgMjEgNlYzaC0zTDYuNSAxNC41IiB9XQogICAgXTsKICAgIHZhciBTd29yZHMgPSBbCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjE0LjUgMTcuNSAzIDYgMyAzIDYgMyAxNy41IDE0LjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTMiLCB4MjogIjE5IiwgeTE6ICIxOSIsIHkyOiAiMTMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTYiLCB4MjogIjIwIiwgeTE6ICIxNiIsIHkyOiAiMjAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTkiLCB4MjogIjIxIiwgeTE6ICIyMSIsIHkyOiAiMTkiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIxNC41IDYuNSAxOCAzIDIxIDMgMjEgNiAxNy41IDkuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI1IiwgeDI6ICI5IiwgeTE6ICIxNCIsIHkyOiAiMTgiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNyIsIHgyOiAiNCIsIHkxOiAiMTciLCB5MjogIjIwIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB4MjogIjUiLCB5MTogIjE5IiwgeTI6ICIyMSIgfV0KICAgIF07CiAgICB2YXIgU3lyaW5nZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDIgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDcgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDkgOC43IDE5LjNjLTEgMS0yLjUgMS0zLjQgMGwtLjYtLjZjLTEtMS0xLTIuNSAwLTMuNEwxNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTktMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDQgNiA2IiB9XQogICAgXTsKICAgIHZhciBUYWJsZTIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDNINWEyIDIgMCAwIDAtMiAydjRtNi02aDEwYTIgMiAwIDAgMSAyIDJ2NE05IDN2MThtMCAwaDEwYTIgMiAwIDAgMCAyLTJWOU05IDIxSDVhMiAyIDAgMCAxLTItMlY5bTAgMGgxOCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgVGFibGVDZWxsc01lcmdlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjF2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBUYWJsZUNlbGxzU3BsaXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBUYWJsZUNvbHVtbnNTcGxpdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDNoNmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNWgtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAzaC0yYTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDloLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzdjE4IiB9XQogICAgXTsKICAgIHZhciBUYWJsZU9mQ29udGVudHMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOWguMDEiIH1dCiAgICBdOwogICAgdmFyIFRhYmxlUHJvcGVydGllcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE1SDMiIH1dCiAgICBdOwogICAgdmFyIFRhYmxlUm93c1NwbGl0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTBoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMnYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEwaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIydi02YTIgMiAxMzUgMCAxIDItMmgxNGEyIDIgNDUgMCAxIDIgMnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMnYyYTIgMiA0NSAwIDAgMiAyaDE0YTIgMiAxMzUgMCAwIDItMlYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTBoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIydi04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMnY0IiB9XQogICAgXTsKICAgIHZhciBUYWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dCiAgICBdOwogICAgdmFyIFRhYmxldFNtYXJ0cGhvbmUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjE0IiwgeDogIjMiLCB5OiAiOCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDRhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjE2YTIgMiAwIDAgMS0yIDJoLTIuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4aC4wMSIgfV0KICAgIF07CiAgICB2YXIgVGFibGV0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIyMCIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyLjAxIiwgeTE6ICIxOCIsIHkyOiAiMTgiIH1dCiAgICBdOwogICAgdmFyIFRhYmxldHMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjciLCByOiAiNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxNyIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMuNDYgMTAuNTQgNy4wOC03LjA4IiB9XQogICAgXTsKICAgIHZhciBUYWcyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuNTg2IDIuNTg2QTIgMiAwIDAgMCAxMS4xNzIgMkg0YTIgMiAwIDAgMC0yIDJ2Ny4xNzJhMiAyIDAgMCAwIC41ODYgMS40MTRsOC43MDQgOC43MDRhMi40MjYgMi40MjYgMCAwIDAgMy40MiAwbDYuNTgtNi41OGEyLjQyNiAyLjQyNiAwIDAgMCAwLTMuNDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNy41IiwgY3k6ICI3LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XQogICAgXTsKICAgIHZhciBUYWdzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuMTcyIDJhMiAyIDAgMCAxIDEuNDE0LjU4Nmw2LjcxIDYuNzFhMi40IDIuNCAwIDAgMSAwIDMuNDA4bC00LjU5MiA0LjU5MmEyLjQgMi40IDAgMCAxLTMuNDA4IDBsLTYuNzEtNi43MUEyIDIgMCAwIDEgNiA5LjE3MlYzYTEgMSAwIDAgMSAxLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgN3Y2LjE3MmEyIDIgMCAwIDAgLjU4NiAxLjQxNGw2LjcxIDYuNzFhMi40IDIuNCAwIDAgMCAzLjE5MS4xOTMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMC41IiwgY3k6ICI2LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XQogICAgXTsKICAgIHZhciBUYWxseTEgPSBbWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV1dOwogICAgdmFyIFRhbGx5MiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDR2MTYiIH1dCiAgICBdOwogICAgdmFyIFRhbGx5MyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNHYxNiIgfV0KICAgIF07CiAgICB2YXIgVGFsbHk0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDR2MTYiIH1dCiAgICBdOwogICAgdmFyIFRhbGx5NSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDYgMiAxOCIgfV0KICAgIF07CiAgICB2YXIgVGFuZ2VudCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjQiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS41OSA1LjQxIDUuNDEgMTUuNTkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICIxNyIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIycy00LTktMS41LTExLjVTMjIgMTIgMjIgMTIiIH1dCiAgICBdOwogICAgdmFyIFRhcmdldCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgVGVsZXNjb3BlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTAuMDY1IDEyLjQ5My02LjE4IDEuMzE4YS45MzQuOTM0IDAgMCAxLTEuMTA4LS43MDJsLS41MzctMi4xNWExLjA3IDEuMDcgMCAwIDEgLjY5MS0xLjI2NWwxMy41MDQtNC40NCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy41NiAxMS43NDcgNC4zMzItLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAyMS0zLjEwNS02LjIxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjQ4NSA1Ljk0YTIgMiAwIDAgMSAxLjQ1NS0yLjQyNWwxLjA5LS4yNzJhMSAxIDAgMCAxIDEuMjEyLjcyN2wxLjUxNSA2LjA2YTEgMSAwIDAgMS0uNzI3IDEuMjEzbC0xLjA5LjI3MmEyIDIgMCAwIDEtMi40MjUtMS40NTV6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuMTU4IDguNjMzIDEuMTE0IDQuNDU2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMjEgMy4xMDUtNi4yMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMyIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBUZW50VHJlZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiNCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDUgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxMCAzLTMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE0VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRIN2wtNSA4aDIwWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNCA1IDgiIH1dCiAgICBdOwogICAgdmFyIFRlbnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjUgMjEgMTQgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC41IDIxIDEwIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUuNSAyMSAxMiAxNWwtMy41IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWgyMCIgfV0KICAgIF07CiAgICB2YXIgVGVybWluYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQgMTcgNi02LTYtNiIgfV0KICAgIF07CiAgICB2YXIgVGVzdFR1YmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC41IDJ2MTcuNWMwIDEuNC0xLjEgMi41LTIuNSAyLjVjLTEuNCAwLTIuNS0xLjEtMi41LTIuNVYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAyaDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuNSAxNmgtNSIgfV0KICAgIF07CiAgICB2YXIgVGVzdFR1YmVEaWFnb25hbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDcgNi44MiAyMS4xOGEyLjgzIDIuODMgMCAwIDEtMy45OS0uMDFhMi44MyAyLjgzIDAgMCAxIDAtNEwxNyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2SDQiIH1dCiAgICBdOwogICAgdmFyIFRlc3RUdWJlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMnYxNy41QTIuNSAyLjUgMCAwIDEgNi41IDIyQTIuNSAyLjUgMCAwIDEgNCAxOS41VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMnYxNy41YTIuNSAyLjUgMCAwIDEtMi41IDIuNWEyLjUgMi41IDAgMCAxLTIuNS0yLjVWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDJoNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyaDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNkg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE2aC01IiB9XQogICAgXTsKICAgIHZhciBUZXh0QWxpZ25DZW50ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTJINyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxOUg1IiB9XQogICAgXTsKICAgIHZhciBUZXh0QWxpZ25FbmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJIOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOUg3IiB9XQogICAgXTsKICAgIHZhciBUZXh0QWxpZ25KdXN0aWZ5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOWgxOCIgfV0KICAgIF07CiAgICB2YXIgVGV4dEFsaWduU3RhcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxOUgzIiB9XQogICAgXTsKICAgIHZhciBUZXh0Q3Vyc29ySW5wdXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMGgtMWEyIDIgMCAwIDEtMi0yIDIgMiAwIDAgMS0yIDJINiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA4aDdhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJoLTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxNkg0YTIgMiAwIDAgMS0yLTJ2LTRhMiAyIDAgMCAxIDItMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNGgxYTIgMiAwIDAgMSAyIDIgMiAyIDAgMCAxIDItMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNnYxMiIgfV0KICAgIF07CiAgICB2YXIgVGV4dEN1cnNvciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIyaC0xYTQgNCAwIDAgMS00LTRWNmE0IDQgMCAwIDEgNC00aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMmgxYTQgNCAwIDAgMCA0LTR2LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyaDFhNCA0IDAgMCAxIDQgNHYxIiB9XQogICAgXTsKICAgIHZhciBUZXh0SW5pdGlhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxMiAzLjU1My03LjcyNGEuNS41IDAgMCAxIC44OTQgMEwxMSAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjkyIDEwaDYuMTYiIH1dCiAgICBdOwogICAgdmFyIFRleHRRdW90ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE5SDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMnY3IiB9XQogICAgXTsKICAgIHZhciBUZXh0U2VhcmNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTlIMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxNSIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE5LTEuOS0xLjkiIH1dCiAgICBdOwogICAgdmFyIFRleHRTZWxlY3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDNoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzYTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTR2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOWEyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM2EyIDIgMCAwIDAtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgOGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDNoMSIgfV0KICAgIF07CiAgICB2YXIgVGV4dFdyYXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNi0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoMTQuNWExIDEgMCAwIDEgMCA3SDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVoMTgiIH1dCiAgICBdOwogICAgdmFyIFRoZWF0ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwczMtMyAzLTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTBzLTMtMy0zLTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMmMwIDQuNC0zLjYgOC04IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMmMwIDQuNCAzLjYgOCA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMHMyIDIgMiA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEwcy0yIDItMiA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIydi0xYTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjJ2LTFhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MSIgfV0KICAgIF07CiAgICB2YXIgVGhlcm1vbWV0ZXJTbm93Zmxha2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAyMC0xLjI1LTIuNUw2IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDQgOC43NSA2LjUgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjU4NSAxNUgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDYuNUwxMCA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE0LjU0YTQgNCAwIDEgMS00IDBWNGEyIDIgMCAwIDEgNCAweiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDEwIDEuNSAyTDQgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAyMSAzLTYtMS41LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAzIDMgNmgyIiB9XQogICAgXTsKICAgIHZhciBUaGVybW9tZXRlclN1biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4YTQgNCAwIDAgMC0xLjY0NSA3LjY0NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTQuNTRhNCA0IDAgMSAxLTQgMFY0YTIgMiAwIDAgMSA0IDB6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQuOTMgNC45MyAxLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi4zNCAxNy42Ni0xLjQxIDEuNDEiIH1dCiAgICBdOwogICAgdmFyIFRoZXJtb21ldGVyID0gW1sicGF0aCIsIHsgZDogIk0xNCA0djEwLjU0YTQgNCAwIDEgMS00IDBWNGEyIDIgMCAwIDEgNCAwWiIgfV1dOwogICAgdmFyIFRodW1ic0Rvd24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDE4LjEyIDEwIDE0SDQuMTdhMiAyIDAgMCAxLTEuOTItMi41NmwyLjMzLThBMiAyIDAgMCAxIDYuNSAySDIwYTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAyaC0yLjc2YTIgMiAwIDAgMC0xLjc5IDEuMTFMMTIgMjJhMy4xMyAzLjEzIDAgMCAxLTMtMy44OFoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRWMiIgfV0KICAgIF07CiAgICB2YXIgVGh1bWJzVXAgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSA1Ljg4IDE0IDEwaDUuODNhMiAyIDAgMCAxIDEuOTIgMi41NmwtMi4zMyA4QTIgMiAwIDAgMSAxNy41IDIySDRhMiAyIDAgMCAxLTItMnYtOGEyIDIgMCAwIDEgMi0yaDIuNzZhMiAyIDAgMCAwIDEuNzktMS4xMUwxMiAyYTMuMTMgMy4xMyAwIDAgMSAzIDMuODhaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTB2MTIiIH1dCiAgICBdOwogICAgdmFyIFRpY2tldENoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEyIDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIFRpY2tldE1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEyaDYiIH1dCiAgICBdOwogICAgdmFyIFRpY2tldFBlcmNlbnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDlhMyAzIDAgMSAxIDAgNnYyYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtMmEzIDMgMCAxIDEgMC02VjdhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTVoLjAxIiB9XQogICAgXTsKICAgIHZhciBUaWNrZXRQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXY2IiB9XQogICAgXTsKICAgIHZhciBUaWNrZXRTbGFzaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOWEzIDMgMCAwIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDAgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDE0LjUgNS01IiB9XQogICAgXTsKICAgIHZhciBUaWNrZXRYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjUgMTQuNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDkuNSA1IDUiIH1dCiAgICBdOwogICAgdmFyIFRpY2tldCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOWEzIDMgMCAwIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDAgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNXYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE3djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTF2MiIgfV0KICAgIF07CiAgICB2YXIgVGlja2V0c1BsYW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuNSAxN2gxLjIyN2EyIDIgMCAwIDAgMS4zNDUtLjUyTDE4IDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDEzLjUgMy43OTQuNTA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMuMTczIDguMTggMTEtNWEyIDIgMCAwIDEgMi42NDcuOTkzTDE4LjU2IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMFY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTR2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE5djIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjgiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTMiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFRpbWVyT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNiAxMWE4IDggMCAwIDAgMS43IDguNyA4IDggMCAwIDAgOC43IDEuNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjQgNy40YTggOCAwIDAgMSAxMC4zIDEgOCA4IDAgMCAxIC45IDEwLjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydi0yIiB9XQogICAgXTsKICAgIHZhciBUaW1lclJlc2V0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTNhOCA4IDAgMCAxIDgtNyA4IDggMCAxIDEtNS4zIDE0TDQgMTcuNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE3SDR2NSIgfV0KICAgIF07CiAgICB2YXIgVGltZXIyID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMTAiLCB4MjogIjE0IiwgeTE6ICIyIiwgeTI6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxNSIsIHkxOiAiMTQiLCB5MjogIjExIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE0IiwgcjogIjgiIH1dCiAgICBdOwogICAgdmFyIFRpY2tldHMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0zLjE3MyA4LjE4IDExLTVhMiAyIDAgMCAxIDIuNjQ3Ljk5M0wxOC41NiA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTBWOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOXYyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI4Iiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEzIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBUb2dnbGVMZWZ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICI1Iiwgcng6ICI3IiB9XQogICAgXTsKICAgIHZhciBUb2dnbGVSaWdodCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjciIH1dCiAgICBdOwogICAgdmFyIFRvaWxldCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMTJoMTNhMSAxIDAgMCAxIDEgMSA1IDUgMCAwIDEtNSA1aC0uNTk4YS41LjUgMCAwIDAtLjQyNC43NjVsMS41NDQgMi40N2EuNS41IDAgMCAxLS40MjQuNzY1SDUuNDAyYS41LjUgMCAwIDEtLjQyNC0uNzY1TDcgMTgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGE1IDUgMCAwIDEtNS01VjRhMiAyIDAgMCAxIDItMmg4YTIgMiAwIDAgMSAyIDJ2OCIgfV0KICAgIF07CiAgICB2YXIgVG9vbENhc2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNWg0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE0LjgxNyAxMC45OTUtLjk3MS0xLjQ1IDEuMDM0LTEuMjMyYTIgMiAwIDAgMC0yLjAyNS0zLjIzOGwtMS44Mi4zNjRMOS45MSAzLjg4NWEyIDIgMCAwIDAtMy42MjUuNzQ4TDYuMTQxIDYuNTVsLTEuNzI1LjQyNmEyIDIgMCAwIDAtLjE5IDMuNzU2bC42NTcuMjciCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTguODIyIDEwLjk5NSAyLjI2LTUuMzhhMSAxIDAgMCAwLS41NTctMS4zMThMMTYuOTU0IDIuOWExIDEgMCAwIDAtMS4yODEuNTMzbC0uOTI0IDIuMTIyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTIuMDA2QTEgMSAwIDAgMSA0Ljk5NCAxMUgxOWExIDEgMCAwIDEgMSAxdjdhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJ6IiB9XQogICAgXTsKICAgIHZhciBUb29sYm94ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJ2NCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiA2YTIgMiAwIDAgMSAxLjQxNC41ODZsNCA0QTIgMiAwIDAgMSAyMiAxMnY3YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi03YTIgMiAwIDAgMSAuNTg2LTEuNDE0bDQtNEEyIDIgMCAwIDEgOCA2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA2VjRhMiAyIDAgMCAwLTItMmgtNGEyIDIgMCAwIDAtMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEydjQiIH1dCiAgICBdOwogICAgdmFyIFRvcm5hZG8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA0SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOEg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEySDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjBIOSIgfV0KICAgIF07CiAgICB2YXIgVG9ydXMgPSBbCiAgICAgIFsiZWxsaXBzZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTEiLCByeDogIjMiLCByeTogIjIiIH1dLAogICAgICBbImVsbGlwc2UiLCB7IGN4OiAiMTIiLCBjeTogIjEyLjUiLCByeDogIjEwIiwgcnk6ICI4LjUiIH1dCiAgICBdOwogICAgdmFyIFRvdWNocGFkT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuNjU2IDE0SDIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTRoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIwSDRhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS42NTYgNEgyMGEyIDIgMCAwIDEgMiAydjEwLjM0NCIgfV0KICAgIF07CiAgICB2YXIgVG91Y2hwYWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdi02IiB9XQogICAgXTsKICAgIHZhciBUb3dlckNvbnRyb2wgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC4yIDEyLjI3IDIwIDZINGwxLjggNi4yN2ExIDEgMCAwIDAgLjk1LjczaDEwLjVhMSAxIDAgMCAwIC45Ni0uNzNaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTN2OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMnYtOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDYgMSA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDYtMSA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAyaC0yIiB9XQogICAgXTsKICAgIHZhciBUb3lCcmljayA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTIiLCB4OiAiMyIsIHk6ICI4Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDhWNWMwLS42LS40LTEtMS0xSDZhMSAxIDAgMCAwLTEgMXYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDhWNWMwLS42LS40LTEtMS0xaC0zYTEgMSAwIDAgMC0xIDF2MyIgfV0KICAgIF07CiAgICB2YXIgVHJhY3RvciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDExIDExIC45YTEgMSAwIDAgMSAuOCAxLjFsLS42NjUgNC4xNThhMSAxIDAgMCAxLS45ODguODQySDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE4aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDVhMSAxIDAgMCAwLTEgMXY1LjU3MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDRoOC4xMjlhMSAxIDAgMCAxIC45OS44NjNMMTMgMTEuMjQ2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTFWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE1aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwLjFWNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiMTUiLCByOiAiNSIgfV0KICAgIF07CiAgICB2YXIgVHJhZmZpY0NvbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi4wNSAxMC45NjZhNSAyLjUgMCAwIDEtOC4xIDAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTYuOTIzIDE0LjA0OSA0LjQ4IDIuMDRhMSAxIDAgMCAxIC4wMDEgMS44MzFsLTguNTc0IDMuOWEyIDIgMCAwIDEtMS42NiAwbC04LjU3NC0zLjkxYTEgMSAwIDAgMSAwLTEuODNsNC40ODQtMi4wNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi45NDkgMTQuMTRhNSAyLjUgMCAxIDEtOS45IDBMMTAuMDYzIDMuNWEyIDIgMCAwIDEgMy44NzQgMHoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4xOTQgNi41N2E1IDIuNSAwIDAgMCA1LjYxIDAiIH1dCiAgICBdOwogICAgdmFyIFRyYWluRnJvbnRUdW5uZWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIyVjEyYTEwIDEwIDAgMSAxIDIwIDB2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNi44djEuNGEzIDIuOCAwIDEgMS02IDBWNi44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE1aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTlhNCA0IDAgMCAxLTQtNHYtM2E2IDYgMCAxIDEgMTIgMHYzYTQgNCAwIDAgMS00IDRaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTktMiAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE5IDIgMyIgfV0KICAgIF07CiAgICB2YXIgVHJhaW5Gcm9udCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMy4xVjdhNCA0IDAgMCAwIDggMFYzLjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNS0xLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTUgMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTljLTIuOCAwLTUtMi4yLTUtNXYtNGE4IDggMCAwIDEgMTYgMHY0YzAgMi44LTIuMiA1LTUgNVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxOS0yIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTkgMiAzIiB9XQogICAgXTsKICAgIHZhciBUcmFpblRyYWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNyAxNyAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMTQgOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTEgOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggOCA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgNSA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMiA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMiAyMiA3IiB9XQogICAgXTsKICAgIHZhciBUcmFuc2dlbmRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjBoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMmg0djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDcuMTcgNy4xNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDUuMzU1VjJoMy4zNTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMi03LjE3IDcuMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA1IDUgOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XQogICAgXTsKICAgIHZhciBUcmFtRnJvbnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjE2IiwgeDogIjQiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDExaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE5LTIgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAyMi0yLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTVoLjAxIiB9XQogICAgXTsKICAgIHZhciBUcmFzaDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDExdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgNnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNmgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDZWNGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYyIiB9XQogICAgXTsKICAgIHZhciBUcmFzaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDZ2MTRhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDZoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA2VjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MiIgfV0KICAgIF07CiAgICB2YXIgVHJlZURlY2lkdW91cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTggMTlhNCA0IDAgMCAxLTIuMjQtNy4zMkEzLjUgMy41IDAgMCAxIDkgNi4wM1Y2YTMgMyAwIDEgMSA2IDB2LjA0YTMuNSAzLjUgMCAwIDEgMy4yNCA1LjY1QTQgNCAwIDAgMSAxNiAxOVoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTl2MyIgfV0KICAgIF07CiAgICB2YXIgVHJlZVBhbG0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA4YzAtMi43Ni0yLjQ2LTUtNS41LTVTMiA1LjI0IDIgOGgybDEtMSAxIDFoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA3LjE0QTUuODIgNS44MiAwIDAgMSAxNi41IDZjMy4wNCAwIDUuNSAyLjI0IDUuNSA1aC0zbC0xLTEtMSAxaC0zIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTUuODkgOS43MWMtMi4xNSAyLjE1LTIuMyA1LjQ3LS4zNSA3LjQzbDQuMjQtNC4yNS43LS43LjcxLS43MSAyLjEyLTIuMTJjLTEuOTUtMS45Ni01LjI3LTEuOC03LjQyLjM1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE1LjVjLjUgMi41LS4xNyA0LjUtMSA2LjVoNGMyLTUuNS0uNS0xMi0xLTE0IiB9XQogICAgXTsKICAgIHZhciBUcmVlUGluZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE3IDE0IDMgMy4zYTEgMSAwIDAgMS0uNyAxLjdINC43YTEgMSAwIDAgMS0uNy0xLjdMNyAxNGgtLjNhMSAxIDAgMCAxLS43LTEuN0w5IDloLS4yQTEgMSAwIDAgMSA4IDcuM0wxMiAzbDQgNC4zYTEgMSAwIDAgMS0uOCAxLjdIMTVsMyAzLjNhMSAxIDAgMCAxLS43IDEuN0gxN1oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTMiIH1dCiAgICBdOwogICAgdmFyIFRyZW5kaW5nRG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE3aDZ2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTctOC41LTguNS01IDVMMiA3IiB9XQogICAgXTsKICAgIHZhciBUcmVsbG8gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIzIiwgaGVpZ2h0OiAiOSIsIHg6ICI3IiwgeTogIjciIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMyIsIGhlaWdodDogIjUiLCB4OiAiMTQiLCB5OiAiNyIgfV0KICAgIF07CiAgICB2YXIgVHJlZXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMHYuMkEzIDMgMCAwIDEgOC45IDE2SDVhMyAzIDAgMCAxLTEtNS44VjEwYTMgMyAwIDAgMSA2IDBaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxOXYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDE5aDguM2ExIDEgMCAwIDAgLjctMS43TDE4IDE0aC4zYTEgMSAwIDAgMCAuNy0xLjdMMTYgOWguMmExIDEgMCAwIDAgLjgtMS43TDEzIDNsLTEuNCAxLjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFRyZW5kaW5nVXBEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuODI4IDE0LjgyOCAyMSAyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNnY1aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtOSA5LTQtNC02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOFYzaC01IiB9XQogICAgXTsKICAgIHZhciBUcmVuZGluZ1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgN2g2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04LjUgOC41LTUtNUwyIDE3IiB9XQogICAgXTsKICAgIHZhciBUcmlhbmdsZUFsZXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEuNzMgMTgtOC0xNGEyIDIgMCAwIDAtMy40OCAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0KICAgIF07CiAgICB2YXIgVHJpYW5nbGVEYXNoZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4xNyA0LjE5M2EyIDIgMCAwIDEgMy42NjYuMDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuODc0IDcuNzQzIDEgMS43MzIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTguODQ5IDEyLjk1MiAxIDEuNzMyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjgyNCAxOC4xOGEyIDIgMCAwIDEtMS44MzUgMi44MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4wMjQgMjFhMiAyIDAgMCAxLTEuODM5LTIuODM5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuMTM2IDEyLjk1Mi0xIDEuNzMyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjEwMiA3Ljc0My0xIDEuNzMyIiB9XQogICAgXTsKICAgIHZhciBUcmlhbmdsZVJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMThhMiAyIDAgMCAxLTIgMkgzYy0xLjEgMC0xLjMtLjYtLjQtMS4zTDIwLjQgNC4zYy45LS43IDEuNi0uNCAxLjYuN1oiIH1dCiAgICBdOwogICAgdmFyIFRyaWFuZ2xlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNzMgNGEyIDIgMCAwIDAtMy40NiAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTNaIiB9XQogICAgXTsKICAgIHZhciBUcm9waHkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNC42NnYxLjYyNmEyIDIgMCAwIDEtLjk3NiAxLjY5NkE1IDUgMCAwIDAgNyAyMS45NzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTQuNjZ2MS42MjZhMiAyIDAgMCAwIC45NzYgMS42OTZBNSA1IDAgMCAxIDE3IDIxLjk3OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA5aDEuNWExIDEgMCAwIDAgMC01SDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMjJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA5YTYgNiAwIDAgMCAxMiAwVjNhMSAxIDAgMCAwLTEtMUg3YTEgMSAwIDAgMC0xIDF6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOUg0LjVhMSAxIDAgMCAxIDAtNUg2IiB9XQogICAgXTsKICAgIHZhciBUcnVja0VsZWN0cmljID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTlWN2EyIDIgMCAwIDAtMi0ySDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTlIOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxOWgyYTEgMSAwIDAgMCAxLTF2LTMuNjVhMSAxIDAgMCAwLS4yMi0uNjJMMTguMyA5LjM4YTEgMSAwIDAgMC0uNzgtLjM4SDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTN2NWExIDEgMCAwIDAgMSAxaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAzIDIuMTUgNS4xNWEuNDk1LjQ5NSAwIDAgMCAuMzUuODZoMi4xNWEuNDcuNDcgMCAwIDEgLjM1Ljg2TDMgOS4wMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiMTkiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgVHJ1Y2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOFY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjExYTEgMSAwIDAgMCAxIDFoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxOEg5IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTkgMThoMmExIDEgMCAwIDAgMS0xdi0zLjY1YTEgMSAwIDAgMC0uMjItLjYyNGwtMy40OC00LjM1QTEgMSAwIDAgMCAxNy41MiA4SDE0IiB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxOCIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiMTgiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgVHVya2lzaExpcmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA0IDUgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA4LjUtMTAgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmE5IDkgMCAwIDEtOSA5VjMiIH1dCiAgICBdOwogICAgdmFyIFR1cm50YWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEyLjAxaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA4djRhOCA4IDAgMCAxLTEuMDcgNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICIxMiIsIHI6ICI0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI0Iiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBUdXJ0bGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMiAxMCAyIDR2M2ExIDEgMCAwIDAgMSAxaDJhMSAxIDAgMCAwIDEtMXYtM2E4IDggMCAxIDAtMTYgMHYzYTEgMSAwIDAgMCAxIDFoMmExIDEgMCAwIDAgMS0xdi0zbDItNGg0WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjgyIDcuOSA4IDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjE4IDcuOSAxMiAxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi45MyAxMEgyMGEyIDIgMCAwIDEgMCA0SDIiIH1dCiAgICBdOwogICAgdmFyIFR2TWluaW1hbFBsYXkgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS4wMzMgOS40NGEuNjQ3LjY0NyAwIDAgMSAwIDEuMTJsLTQuMDY1IDIuMzUyYS42NDUuNjQ1IDAgMCAxLS45NjgtLjU2VjcuNjQ4YS42NDUuNjQ1IDAgMCAxIC45NjctLjU2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxaDEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBUdk1pbmltYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxaDEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBUdiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDItNSA1LTUtNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE1IiwgeDogIjIiLCB5OiAiNyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgVHdpdGNoID0gW1sicGF0aCIsIHsgZDogIk0yMSAySDN2MTZoNXY0bDQtNGg1bDQtNFYyem0tMTAgOVY3bTUgNFY3IiB9XV07CiAgICB2YXIgVHdpdHRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDRzLS43IDIuMS0yIDMuNGMxLjYgMTAtOS40IDE3LjMtMTggMTEuNiAyLjIuMSA0LjQtLjYgNi0yQzMgMTUuNS41IDkuNiAzIDVjMi4yIDIuNiA1LjYgNC4xIDkgNC0uOS00LjIgNC02LjYgNy0zLjggMS4xIDAgMy0xLjIgMy0xLjJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBUeXBlT3V0bGluZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDE2LjVhLjUuNSAwIDAgMCAuNS41aC41YTIgMiAwIDAgMSAwIDRIOWEyIDIgMCAwIDEgMC00aC41YS41LjUgMCAwIDAgLjUtLjV2LTlhLjUuNSAwIDAgMC0uNS0uNWgtM2EuNS41IDAgMCAwLS41LjVWOGEyIDIgMCAwIDEtNCAwVjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTQgMHYtLjVhLjUuNSAwIDAgMC0uNS0uNWgtM2EuNS41IDAgMCAwLS41LjVaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBVbWJyZWxsYU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzdjdhMiAyIDAgMCAwIDQgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguNjU2IDEzaDIuMzM2YTEgMSAwIDAgMCAuOTctMS4yNzQgMTAuMjg0IDEwLjI4NCAwIDAgMC0xMi4wNy03LjUxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01Ljk2MSA1Ljk1N2ExMC4yOCAxMC4yOCAwIDAgMC0zLjkyMiA1Ljc2OUExIDEgMCAwIDAgMyAxM2gxMCIgfV0KICAgIF07CiAgICB2YXIgVW1icmVsbGEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM3Y3YTIgMiAwIDAgMCA0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjk5MiAxM2ExIDEgMCAwIDAgLjk3LTEuMjc0IDEwLjI4NCAxMC4yODQgMCAwIDAtMTkuOTIzIDBBMSAxIDAgMCAwIDMgMTN6IiB9XQogICAgXTsKICAgIHZhciBUeXBlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDdWNWExIDEgMCAwIDEgMS0xaDE0YTEgMSAwIDAgMSAxIDF2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIwaDYiIH1dCiAgICBdOwogICAgdmFyIFVuZGVybGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNHY2YTYgNiAwIDAgMCAxMiAwVjQiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNCIsIHgyOiAiMjAiLCB5MTogIjIwIiwgeTI6ICIyMCIgfV0KICAgIF07CiAgICB2YXIgVW5kbzIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE0IDQgOWw1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA5aDEwLjVhNS41IDUuNSAwIDAgMSA1LjUgNS41YTUuNSA1LjUgMCAwIDEtNS41IDUuNUgxMSIgfV0KICAgIF07CiAgICB2YXIgVW5kb0RvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3YTkgOSAwIDAgMC0xNS02LjdMMyAxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDd2Nmg2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE3IiwgcjogIjEiIH1dCiAgICBdOwogICAgdmFyIFVuZG8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDd2Nmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3YTkgOSAwIDAgMC05LTkgOSA5IDAgMCAwLTYgMi4zTDMgMTMiIH1dCiAgICBdOwogICAgdmFyIFVuZm9sZEhvcml6b250YWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAxNSAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgOS0zIDMgMyAzIiB9XQogICAgXTsKICAgIHZhciBVbmdyb3VwID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjYiLCB4OiAiNSIsIHk6ICI0Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI2IiwgeDogIjExIiwgeTogIjE0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBVbmZvbGRWZXJ0aWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDhWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEySDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxOS0zIDMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDUtMy0zLTMgMyIgfV0KICAgIF07CiAgICB2YXIgVW5pdmVyc2l0eSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxdi0zYTIgMiAwIDAgMC00IDB2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTZoLjAxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDdhMSAxIDAgMCAwLTEtMWgtMmEyIDIgMCAwIDEtMS4xNDMtLjM1OUwxMy4xNDMgMi4zNmEyIDIgMCAwIDAtMi4yODYtLjAwMUw2LjE0MyA1LjY0QTIgMiAwIDAgMSA1IDZIM2ExIDEgMCAwIDAtMSAxdjEyYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNmguMDEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgVW5saW5rMiA9IFtbInBhdGgiLCB7IGQ6ICJNMTUgN2gyYTUgNSAwIDAgMSAwIDEwaC0ybS02IDBIN0E1IDUgMCAwIDEgNyA3aDIiIH1dXTsKICAgIHZhciBVbmxpbmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xOC44NCAxMi4yNSAxLjcyLTEuNzFoLS4wMmE1LjAwNCA1LjAwNCAwIDAgMC0uMTItNy4wNyA1LjAwNiA1LjAwNiAwIDAgMC02Ljk1IDBsLTEuNzIgMS43MSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAibTUuMTcgMTEuNzUtMS43MSAxLjcxYTUuMDA0IDUuMDA0IDAgMCAwIC4xMiA3LjA3IDUuMDA2IDUuMDA2IDAgMCAwIDYuOTUgMGwxLjcxLTEuNzEiIH0KICAgICAgXSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjgiLCB5MTogIjIiLCB5MjogIjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiNSIsIHkxOiAiOCIsIHkyOiAiOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNiIsIHgyOiAiMTYiLCB5MTogIjE5IiwgeTI6ICIyMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxOSIsIHgyOiAiMjIiLCB5MTogIjE2IiwgeTI6ICIxNiIgfV0KICAgIF07CiAgICB2YXIgVW5wbHVnID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgNSAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyMiAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zIDIwLjNhMi40IDIuNCAwIDAgMCAzLjQgMEwxMiAxOGwtNi02LTIuMyAyLjNhMi40IDIuNCAwIDAgMCAwIDMuNFoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy41IDEzLjUgMTAgMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuNSAxNi41IDEzIDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDYgNiA2IDIuMy0yLjNhMi40IDIuNCAwIDAgMCAwLTMuNGwtMi42LTIuNmEyLjQgMi40IDAgMCAwLTMuNCAwWiIgfV0KICAgIF07CiAgICB2YXIgVXBsb2FkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyA4LTUtNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIgfV0KICAgIF07CiAgICB2YXIgVXNiID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiNyIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiMjAiLCByOiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjcgMTkuMyAxOSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtMyAxIDIgMloiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4yNiA3LjY4IDUgMTJsMiA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE0IDUgMiAzLjUtMy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDEyIDEtMSAxIDEtMSAxWiIgfV0KICAgIF07CiAgICB2YXIgVXNlckNoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTEgMiAyIDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiNyIsIHI6ICI0IiB9XQogICAgXTsKICAgIHZhciBVc2VyQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTVINmE0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuMzA1IDE2LjUzLjkyMy0uMzgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjIyOCAxMy44NTItLjkyMy0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAxMi4yMjgtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAxNy43NzItLjM4My45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMTQ4IDEyLjIyOC4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS41MyAxOC42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiAxMy44NTIuOTI0LS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDE2LjE0OC45MjQuMzgzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE1IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI3IiwgcjogIjQiIH1dCiAgICBdOwogICAgdmFyIFVzZXJMb2NrID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiNyIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjMgMTVIN2E0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTUuNVYxNGEyIDIgMCAwIDEgNCAwdjEuNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHg6ICIxMyIsIHk6ICIxNiIsIHJ4OiAiLjg5OSIgfV0KICAgIF07CiAgICB2YXIgVXNlck1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjF2LTJhNCA0IDAgMCAwLTQtNEg2YTQgNCAwIDAgMC00IDR2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjciLCByOiAiNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMiIsIHgyOiAiMTYiLCB5MTogIjExIiwgeTI6ICIxMSIgfV0KICAgIF07CiAgICB2YXIgVXNlclBlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjUgMTVIN2E0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMzc4IDE2LjYyNmExIDEgMCAwIDAtMy4wMDQtMy4wMDRsLTQuMDEgNC4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjciLCByOiAiNCIgfV0KICAgIF07CiAgICB2YXIgVXNlclBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiNyIsIHI6ICI0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIxOSIsIHkxOiAiOCIsIHkyOiAiMTQiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjIiLCB4MjogIjE2IiwgeTE6ICIxMSIsIHkyOiAiMTEiIH1dCiAgICBdOwogICAgdmFyIFVzZXJSb3VuZENoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWE4IDggMCAwIDEgMTMuMjkyLTYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE5IDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIFVzZXJSb3VuZENvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjMwNSAxOS41My45MjMtLjM4MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS4yMjggMTYuODUyLS45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi44NTIgMTUuMjI4LS4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi44NTIgMjAuNzcyLS4zODMuOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjE0OCAxNS4yMjguMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuNTMgMjEuNjk2LS4zODItLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYTggOCAwIDAgMSAxMC40MzQtNy42MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgMTYuODUyLjkyNC0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiAxOS4xNDguOTI0LjM4MyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI4IiwgcjogIjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgVXNlclJvdW5kTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYTggOCAwIDAgMSAxMy4yOTItNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI4IiwgcjogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTloLTYiIH1dCiAgICBdOwogICAgdmFyIFVzZXJSb3VuZFBlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFhOCA4IDAgMCAxIDEwLjgyMS03LjQ4NyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggMTYuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICI1IiB9XQogICAgXTsKICAgIHZhciBVc2VyUm91bmRQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWE4IDggMCAwIDEgMTMuMjkyLTYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTloLTYiIH1dCiAgICBdOwogICAgdmFyIFVzZXJSb3VuZFNlYXJjaCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjgiLCByOiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYTggOCAwIDAgMSAxMC40MzQtNy42MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDIyLTEuOS0xLjkiIH1dCiAgICBdOwogICAgdmFyIFVzZXJSb3VuZFggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYTggOCAwIDAgMSAxMS44NzMtNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI4IiwgcjogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTcgNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE3LTUgNSIgfV0KICAgIF07CiAgICB2YXIgVXNlclJvdW5kID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOCIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIxYTggOCAwIDAgMC0xNiAwIiB9XQogICAgXTsKICAgIHZhciBVc2VyU2VhcmNoID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiNyIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjMgMTVIN2E0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTciLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMS0xLjktMS45IiB9XQogICAgXTsKICAgIHZhciBVc2VyU3RhciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjA1MSAxMi42MTZhMSAxIDAgMCAxIDEuOTA5LjAyNGwuNzM3IDEuNDUyYTEgMSAwIDAgMCAuNzM3LjUzNWwxLjYzNC4yNTZhMSAxIDAgMCAxIC41ODggMS44MDZsLTEuMTcyIDEuMTY4YTEgMSAwIDAgMC0uMjgyLjg2NmwuMjU5IDEuNjEzYTEgMSAwIDAgMS0xLjU0MSAxLjEzNGwtMS40NjUtLjc1YTEgMSAwIDAgMC0uOTEyIDBsLTEuNDY1Ljc1YTEgMSAwIDAgMS0xLjUzOS0xLjEzM2wuMjU4LTEuNjEzYTEgMSAwIDAgMC0uMjgyLS44NjZsLTEuMTU2LTEuMTUzYTEgMSAwIDAgMSAuNTcyLTEuODIybDEuNjMzLS4yNTZhMSAxIDAgMCAwIC43MzctLjUzNXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNUg3YTQgNCAwIDAgMC00IDR2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI3IiwgcjogIjQiIH1dCiAgICBdOwogICAgdmFyIFVzZXJYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjF2LTJhNCA0IDAgMCAwLTQtNEg2YTQgNCAwIDAgMC00IDR2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjciLCByOiAiNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNyIsIHgyOiAiMjIiLCB5MTogIjgiLCB5MjogIjEzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIyIiwgeDI6ICIxNyIsIHkxOiAiOCIsIHkyOiAiMTMiIH1dCiAgICBdOwogICAgdmFyIFVzZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMXYtMmE0IDQgMCAwIDAtNC00SDlhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjciLCByOiAiNCIgfV0KICAgIF07CiAgICB2YXIgVXNlcnNSb3VuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIxYTggOCAwIDAgMC0xNiAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjgiLCByOiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyMGMwLTMuMzctMi02LjUtNC04YTUgNSAwIDAgMC0uNDUtOC4zIiB9XQogICAgXTsKICAgIHZhciBVc2VycyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINmE0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMy4xMjhhNCA0IDAgMCAxIDAgNy43NDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjF2LTJhNCA0IDAgMCAwLTMtMy44NyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjciLCByOiAiNCIgfV0KICAgIF07CiAgICB2YXIgVXRlbnNpbHNDcm9zc2VkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMi0yLjMgMi4zYTMgMyAwIDAgMCAwIDQuMmwxLjggMS44YTMgMyAwIDAgMCA0LjIgMEwyMiA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1IDMuMyAzLjNhNC4yIDQuMiAwIDAgMCAwIDZsNy4zIDcuM2MuNy43IDIgLjcgMi44IDBMMTUgMTVabTAgMCA3IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMi4xIDIxLjggNi40LTYuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA1LTcgNyIgfV0KICAgIF07CiAgICB2YXIgVXRlbnNpbHMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDJ2N2MwIDEuMS45IDIgMiAyaDRhMiAyIDAgMCAwIDItMlYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMnYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNVYyYTUgNSAwIDAgMC01IDV2NmMwIDEuMS45IDIgMiAyaDNabTAgMHY3IiB9XQogICAgXTsKICAgIHZhciBVdGlsaXR5UG9sZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA1aDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDN2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAzdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgNS03IDctNy03IiB9XQogICAgXTsKICAgIHZhciBWYW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMyA2djVhMSAxIDAgMCAwIDEgMWg2LjEwMmExIDEgMCAwIDEgLjcxMi4yOThsLjg5OC45MWExIDEgMCAwIDEgLjI4OC43MDJWMTdhMSAxIDAgMCAxLTEgMWgtMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE4SDNhMSAxIDAgMCAxLTEtMVY4YTIgMiAwIDAgMSAyLTJoMTJjMS4xIDAgMi4xLjggMi40IDEuOGwxLjE3NiA0LjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOGg1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE4IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3IiwgY3k6ICIxOCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBWYXJpYWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFzLTQtMy00LTkgNC05IDQtOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzczQgMyA0IDktNCA5LTQgOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiOSIsIHkxOiAiOSIsIHkyOiAiMTUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiMTUiLCB5MTogIjkiLCB5MjogIjE1IiB9XQogICAgXTsKICAgIHZhciBWYXVsdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNy41IiwgY3k6ICI3LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuOSA3LjkgMi43IDIuNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2LjUiLCBjeTogIjcuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNCAxMC42IDIuNy0yLjciIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjE2LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuOSAxNi4xIDIuNy0yLjciIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNi41IiwgY3k6ICIxNi41IiwgcjogIi41IiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy40IDEzLjQgMi43IDIuNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBWZWN0b3JTcXVhcmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS41IDdhMjQgMjQgMCAwIDEgMCAxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjUgN2EyNCAyNCAwIDAgMCAwIDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTkuNWEyNCAyNCAwIDAgMCAxMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNC41YTI0IDI0IDAgMCAxIDEwIDAiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxNyIsIHk6ICIxNyIsIHdpZHRoOiAiNSIsIGhlaWdodDogIjUiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxNyIsIHk6ICIyIiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMTciLCB3aWR0aDogIjUiLCBoZWlnaHQ6ICI1Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIyIiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgVmVnYW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4cTYgMCA2LTYtNiAwLTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy40MSAzLjU5YTEwIDEwIDAgMSAwIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDJhMjYuNiAyNi42IDAgMCAxIDEwIDIwYy45LTYuODIgMS41LTkuNSA0LTE0IiB9XQogICAgXTsKICAgIHZhciBWZW5ldGlhbk1hc2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMWMtMS41IDAtMi41LjUtMyAyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgNmEyIDIgMCAwIDAtMiAydjRhNSA1IDAgMCAwIDUgNSA4IDggMCAwIDEgNSAyIDggOCAwIDAgMSA1LTIgNSA1IDAgMCAwIDUtNVY4YTIgMiAwIDAgMC0yLTJoLTNhOCA4IDAgMCAwLTUgMiA4IDggMCAwIDAtNS0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDExYzEuNSAwIDIuNS41IDMgMiIgfV0KICAgIF07CiAgICB2YXIgVmVudXNBbmRNYXJzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDJoNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDItNS40NiA1LjQ2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcjogIjUiIH1dCiAgICBdOwogICAgdmFyIFZlbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTV2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE5aDYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOSIsIHI6ICI2IiB9XQogICAgXTsKICAgIHZhciBWaWJyYXRlT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMiA4IDIgMi0yIDIgMiAyLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA4LTIgMiAyIDItMiAyIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDh2MTBjMCAuNTUuNDUgMSAxIDFoNmMuNTUgMCAxLS40NSAxLTF2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTAuMzRWNmMwLS41NS0uNDUtMS0xLTFoLTQuMzQiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICAgIHZhciBWaWJyYXRlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMiA4IDIgMi0yIDIgMiAyLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA4LTIgMiAyIDItMiAyIDIgMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiMTQiLCB4OiAiOCIsIHk6ICI1Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBWaWRlb09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjY2IDZIMTRhMiAyIDAgMCAxIDIgMnYyLjVsNS4yNDgtMy4wNjJBLjUuNSAwIDAgMSAyMiA3Ljg3djguMTk2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgICB2YXIgVmlkZW8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMyA1LjIyMyAzLjQ4MmEuNS41IDAgMCAwIC43NzctLjQxNlY3Ljg3YS41LjUgMCAwIDAtLjc1Mi0uNDMyTDE2IDEwLjUiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjYiLCB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiMTIiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFZpZGVvdGFwZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTYiLCB4OiAiMiIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOGgyMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjE0IiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE0IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIFZpZXcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDdWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguOTQ0IDEyLjMzYTEgMSAwIDAgMCAwLS42NiA3LjUgNy41IDAgMCAwLTEzLjg4OCAwIDEgMSAwIDAgMCAwIC42NiA3LjUgNy41IDAgMCAwIDEzLjg4OCAwIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBWb2ljZW1haWwgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTIiLCByOiAiNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI2IiwgeDI6ICIxOCIsIHkxOiAiMTYiLCB5MjogIjE2IiB9XQogICAgXTsKICAgIHZhciBWb2xsZXliYWxsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuMSA3LjFhMTYuNTUgMTYuNTUgMCAwIDEgMTAuOSA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyYTEyLjYgMTIuNiAwIDAgMS04LjcgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi44IDEzLjZhMTYuNTUgMTYuNTUgMCAwIDEtOSA3LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuNyAxN2ExMi44IDEyLjggMCAwIDAtOC43LTUgMTMuMyAxMy4zIDAgMCAxIDAtMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zIDMuOGExNi41NSAxNi41NSAwIDAgMCAxLjkgMTEuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgVm9sdW1lMSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDQuNzAyYS43MDUuNzA1IDAgMCAwLTEuMjAzLS40OThMNi40MTMgNy41ODdBMS40IDEuNCAwIDAgMSA1LjQxNiA4SDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMi40MTZhMS40IDEuNCAwIDAgMSAuOTk3LjQxM2wzLjM4MyAzLjM4NEEuNzA1LjcwNSAwIDAgMCAxMSAxOS4yOTh6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDlhNSA1IDAgMCAxIDAgNiIgfV0KICAgIF07CiAgICB2YXIgVm9sdW1lMiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDQuNzAyYS43MDUuNzA1IDAgMCAwLTEuMjAzLS40OThMNi40MTMgNy41ODdBMS40IDEuNCAwIDAgMSA1LjQxNiA4SDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMi40MTZhMS40IDEuNCAwIDAgMSAuOTk3LjQxM2wzLjM4MyAzLjM4NEEuNzA1LjcwNSAwIDAgMCAxMSAxOS4yOTh6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDlhNSA1IDAgMCAxIDAgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS4zNjQgMTguMzY0YTkgOSAwIDAgMCAwLTEyLjcyOCIgfV0KICAgIF07CiAgICB2YXIgVm9sdW1lT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOWE1IDUgMCAwIDEgLjk1IDIuMjkzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjM2NCA1LjYzNmE5IDkgMCAwIDEgMS44ODkgOS45NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNyA3LS41ODcuNTg3QTEuNCAxLjQgMCAwIDEgNS40MTYgOEgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDIuNDE2YTEuNCAxLjQgMCAwIDEgLjk5Ny40MTNsMy4zODMgMy4zODRBLjcwNS43MDUgMCAwIDAgMTEgMTkuMjk4VjExIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuODI4IDQuMTcyQS42ODYuNjg2IDAgMCAxIDExIDQuNjU3di42ODYiIH1dCiAgICBdOwogICAgdmFyIFZvbHVtZVggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSA0LjcwMmEuNzA1LjcwNSAwIDAgMC0xLjIwMy0uNDk4TDYuNDEzIDcuNTg3QTEuNCAxLjQgMCAwIDEgNS40MTYgOEgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDIuNDE2YTEuNCAxLjQgMCAwIDEgLjk5Ny40MTNsMy4zODMgMy4zODRBLjcwNS43MDUgMCAwIDAgMTEgMTkuMjk4eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMiIsIHgyOiAiMTYiLCB5MTogIjkiLCB5MjogIjE1IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE2IiwgeDI6ICIyMiIsIHkxOiAiOSIsIHkyOiAiMTUiIH1dCiAgICBdOwogICAgdmFyIFZvbHVtZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDQuNzAyYS43MDUuNzA1IDAgMCAwLTEuMjAzLS40OThMNi40MTMgNy41ODdBMS40IDEuNCAwIDAgMSA1LjQxNiA4SDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMi40MTZhMS40IDEuNCAwIDAgMSAuOTk3LjQxM2wzLjM4MyAzLjM4NEEuNzA1LjcwNSAwIDAgMCAxMSAxOS4yOTh6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBWb3RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMiAyIDIgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgN2MwLTEuMS45LTIgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MTJINVY3WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOUgyIiB9XQogICAgXTsKICAgIHZhciBXYWxsZXRDYXJkcyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0zIDExaDNjLjggMCAxLjYuMyAyLjEuOWwxLjEuOWMxLjYgMS42IDQuMSAxLjYgNS43IDBsMS4xLS45Yy41LS41IDEuMy0uOSAyLjEtLjlIMjEiIH0KICAgICAgXQogICAgXTsKICAgIHZhciBXYWxsZXRNaW5pbWFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgN2gxMmEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNCIgfV0KICAgIF07CiAgICB2YXIgV2FsbGV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkgN1Y0YTEgMSAwIDAgMC0xLTFINWEyIDIgMCAwIDAgMCA0aDE1YTEgMSAwIDAgMSAxIDF2NGgtM2EyIDIgMCAwIDAgMCA0aDNhMSAxIDAgMCAwIDEtMXYtMmExIDEgMCAwIDAtMS0xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNXYxNGEyIDIgMCAwIDAgMiAyaDE1YTEgMSAwIDAgMCAxLTF2LTQiIH1dCiAgICBdOwogICAgdmFyIFdhbGxwYXBlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTcgNi4xLTYuMWEyIDIgMCAwIDEgMi44MS4wMUwyMiAxNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjkiLCByOiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMyIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgV2FuZFNwYXJrbGVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMjEuNjQgMy42NC0xLjI4LTEuMjhhMS4yMSAxLjIxIDAgMCAwLTEuNzIgMEwyLjM2IDE4LjY0YTEuMjEgMS4yMSAwIDAgMCAwIDEuNzJsMS4yOCAxLjI4YTEuMiAxLjIgMCAwIDAgMS43MiAwTDIxLjY0IDUuMzZhMS4yIDEuMiAwIDAgMCAwLTEuNzIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgNyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA2djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA4SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTZoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgM0g5IiB9XQogICAgXTsKICAgIHZhciBXYW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNFYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE2di0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDloMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy44IDExLjggMTkgMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOCA2LjIgMTkgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDIxIDktOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi4yIDYuMiAxMSA1IiB9XQogICAgXTsKICAgIHZhciBXYXJlaG91c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMVYxMGExIDEgMCAwIDAtMS0xSDdhMSAxIDAgMCAwLTEgMXYxMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAxLjEzMi0xLjgwM2w3Ljk1LTMuOTc0YTIgMiAwIDAgMSAxLjgzNyAwbDcuOTQ4IDMuOTc0QTIgMiAwIDAgMSAyMiA4eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEzaDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTdoMTIiIH1dCiAgICBdOwogICAgdmFyIFdhc2hpbmdNYWNoaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA2aDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNmguMDEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIyMCIsIHg6ICIzIiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGEyLjUgMi41IDAgMCAwIDAtNSAyLjUgMi41IDAgMCAxIDAtNSIgfV0KICAgIF07CiAgICB2YXIgV2F0Y2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMHYyLjJsMS42IDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuMTMgNy42Ni0uODEtNC4wNWEyIDIgMCAwIDAtMi0xLjYxaC0yLjY4YTIgMiAwIDAgMC0yIDEuNjFsLS43OCA0LjA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuODggMTYuMzYuOCA0YTIgMiAwIDAgMCAyIDEuNjFoMi43MmEyIDIgMCAwIDAgMi0xLjYxbC44MS00LjA1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjYiIH1dCiAgICBdOwogICAgdmFyIFdhdmVzQXJyb3dEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTBMMTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA2TDEyIDEwTDggNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE1QzIuNiAxNS41IDMuMiAxNiA0LjUgMTZDNyAxNiA3IDE0IDkuNSAxNEMxMi4xIDE0IDExLjkgMTYgMTQuNSAxNkMxNyAxNiAxNyAxNCAxOS41IDE0QzIwLjggMTQgMjEuNCAxNC41IDIyIDE1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMjFDMi42IDIxLjUgMy4yIDIyIDQuNSAyMkM3IDIyIDcgMjAgOS41IDIwQzEyLjEgMjAgMTEuOSAyMiAxNC41IDIyQzE3IDIyIDE3IDIwIDE5LjUgMjBDMjAuOCAyMCAyMS40IDIwLjUgMjIgMjEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFdhdmVzTGFkZGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgNWEyIDIgMCAwIDAtMiAydjExIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMThjLjYuNSAxLjIgMSAyLjUgMSAyLjUgMCAyLjUtMiA1LTIgMi42IDAgMi40IDIgNSAyIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEzaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgOWgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDVhMiAyIDAgMCAwLTIgMnYxMSIgfV0KICAgIF07CiAgICB2YXIgV2F2ZXNBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMTVjLjYuNSAxLjIgMSAyLjUgMSAyLjUgMCAyLjUtMiA1LTIgMi42IDAgMi40IDIgNSAyIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDIxYy42LjUgMS4yIDEgMi41IDEgMi41IDAgMi41LTIgNS0yIDIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDQtNCA0IDQiIH1dCiAgICBdOwogICAgdmFyIFdhdmVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0yIDZjLjYuNSAxLjIgMSAyLjUgMUM3IDcgNyA1IDkuNSA1YzIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMTJjLjYuNSAxLjIgMSAyLjUgMSAyLjUgMCAyLjUtMiA1LTIgMi42IDAgMi40IDIgNSAyIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE4Yy42LjUgMS4yIDEgMi41IDEgMi41IDAgMi41LTIgNS0yIDIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFdheXBvaW50cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwLjU4NiA1LjQxNC01LjE3MiA1LjE3MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOC41ODYgMTMuNDE0LTUuMTcyIDUuMTcyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoMTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMjAiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI0IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjQiLCBjeTogIjEyIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIFdlYmNhbSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi00IiB9XQogICAgXTsKICAgIHZhciBXZWJob29rT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTdoLTVjLTEuMDktLjAyLTEuOTQuOTItMi41IDEuOUEzIDMgMCAxIDEgMi41NyAxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDMuNGE0IDQgMCAwIDEgNi41Mi42NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDE3IDMuMS01LjhhMi41IDIuNSAwIDAgMCAuMDU3LTIuMDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuMyAyMC4zYTQgNCAwIDAgMS0yLjMuNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC42IDEzYTQgNCAwIDAgMSAzLjM1NyAzLjQxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA2IC42IDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICAgIHZhciBXZWJob29rID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTYuOThoLTUuOTljLTEuMSAwLTEuOTUuOTQtMi40OCAxLjlBNCA0IDAgMCAxIDIgMTdjLjAxLS43LjItMS40LjU3LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxNyAzLjEzLTUuNzhjLjUzLS45Ny4xLTIuMTgtLjUtMy4xYTQgNCAwIDEgMSA2Ljg5LTQuMDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgNiAzLjEzIDUuNzNDMTUuNjYgMTIuNyAxNi45IDEzIDE4IDEzYTQgNCAwIDAgMSAwIDgiIH1dCiAgICBdOwogICAgdmFyIFdlaWdodFRpbGRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNi41IDhhMiAyIDAgMCAwLTEuOTA2IDEuNDZMMi4xIDE4LjVBMiAyIDAgMCAwIDQgMjFoMTZhMiAyIDAgMCAwIDEuOTI1LTIuNTRMMTkuNCA5LjVBMiAyIDAgMCAwIDE3LjQ4IDh6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuOTk5IDE1YTIuNSAyLjUgMCAwIDEgNCAwIDIuNSAyLjUgMCAwIDAgNCAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgV2VpZ2h0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNSIsIHI6ICIzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYuNSA4YTIgMiAwIDAgMC0xLjkwNSAxLjQ2TDIuMSAxOC41QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjkyNS0yLjU0TDE5LjQgOS41QTIgMiAwIDAgMCAxNy40OCA4WiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgV2hlYXRPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIyIDEwLTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDgtMS4xNyAxLjE3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMy40NyAxMi41MyA1IDExbDEuNTMgMS41M2EzLjUgMy41IDAgMCAxIDAgNC45NEw1IDE5bC0xLjUzLTEuNTNhMy41IDMuNSAwIDAgMSAwLTQuOTRaIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDgtLjUzLjUzYTMuNSAzLjUgMCAwIDAgMCA0Ljk0TDkgMTVsMS41My0xLjUzYy41NS0uNTUuODgtMS4yNS45OC0xLjk3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjkxIDUuMjZjLjE1LS4yNi4zNC0uNTEuNTYtLjczTDEzIDNsMS41MyAxLjUzYTMuNSAzLjUgMCAwIDEgLjI4IDQuNjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMmgydjJhNCA0IDAgMCAxLTQgNGgtMlY2YTQgNCAwIDAgMSA0LTRaIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjQ3IDE3LjQ3IDEzIDE5bC0xLjUzIDEuNTNhMy41IDMuNSAwIDAgMS00Ljk0IDBMNSAxOWwxLjUzLTEuNTNhMy41IDMuNSAwIDAgMSA0Ljk0IDBaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE2LS41My41M2EzLjUgMy41IDAgMCAxLTQuOTQgMEw5IDE1bDEuNTMtMS41M2EzLjQ5IDMuNDkgMCAwIDEgMS45Ny0uOTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguNzQgMTMuMDljLjI2LS4xNS41MS0uMzQuNzMtLjU2TDIxIDExbC0xLjUzLTEuNTNhMy41IDMuNSAwIDAgMC00LjYyLS4yOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIFdob2xlV29yZCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiMTIiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5djYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTIiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA3djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTd2MWMwIC41LS41IDEtMSAxSDNjLS41IDAtMS0uNS0xLTF2LTEiIH1dCiAgICBdOwogICAgdmFyIFdoZWF0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMiAxNiA4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMy40NyAxMi41MyA1IDExbDEuNTMgMS41M2EzLjUgMy41IDAgMCAxIDAgNC45NEw1IDE5bC0xLjUzLTEuNTNhMy41IDMuNSAwIDAgMSAwLTQuOTRaIiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTcuNDcgOC41MyA5IDdsMS41MyAxLjUzYTMuNSAzLjUgMCAwIDEgMCA0Ljk0TDkgMTVsLTEuNTMtMS41M2EzLjUgMy41IDAgMCAxIDAtNC45NFoiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTEuNDcgNC41MyAxMyAzbDEuNTMgMS41M2EzLjUgMy41IDAgMCAxIDAgNC45NEwxMyAxMWwtMS41My0xLjUzYTMuNSAzLjUgMCAwIDEgMC00Ljk0WiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMmgydjJhNCA0IDAgMCAxLTQgNGgtMlY2YTQgNCAwIDAgMSA0LTRaIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjQ3IDE3LjQ3IDEzIDE5bC0xLjUzIDEuNTNhMy41IDMuNSAwIDAgMS00Ljk0IDBMNSAxOWwxLjUzLTEuNTNhMy41IDMuNSAwIDAgMSA0Ljk0IDBaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjQ3IDEzLjQ3IDE3IDE1bC0xLjUzIDEuNTNhMy41IDMuNSAwIDAgMS00Ljk0IDBMOSAxNWwxLjUzLTEuNTNhMy41IDMuNSAwIDAgMSA0Ljk0IDBaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5LjQ3IDkuNDcgMjEgMTFsLTEuNTMgMS41M2EzLjUgMy41IDAgMCAxLTQuOTQgMEwxMyAxMWwxLjUzLTEuNTNhMy41IDMuNSAwIDAgMSA0Ljk0IDBaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBXaWZpQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuMzA1IDE5LjUzLjkyMy0uMzgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjIyOCAxNi44NTItLjkyMy0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAxNS4yMjgtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAyMC43NzItLjM4My45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMTQ4IDE1LjIyOC4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS41MyAyMS42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNy44MmExNSAxNSAwIDAgMSAyMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiAxNi44NTIuOTI0LS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDE5LjE0OC45MjQuMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTEuODU4YTEwIDEwIDAgMCAxIDExLjUtMS43ODUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDE1LjQyOWE1IDUgMCAwIDEgMi40MTMtMS4zMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBXaWZpSGlnaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEyLjg1OWExMCAxMCAwIDAgMSAxNCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAxNi40MjlhNSA1IDAgMCAxIDcgMCIgfV0KICAgIF07CiAgICB2YXIgV2lmaUxvdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjUgMTYuNDI5YTUgNSAwIDAgMSA3IDAiIH1dCiAgICBdOwogICAgdmFyIFdpZmlPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDE2LjQyOWE1IDUgMCAwIDEgNyAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuODU5YTEwIDEwIDAgMCAxIDUuMTctMi42OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxMi44NTlhMTAgMTAgMCAwIDAtMi4wMDctMS41MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4LjgyYTE1IDE1IDAgMCAxIDQuMTc3LTIuNjQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDguODJhMTUgMTUgMCAwIDAtMTEuMjg4LTMuNzY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgICB2YXIgV2lmaVN5bmMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS45NjUgMTAuMTA1djRMMTMuNSAxMi41YTUgNSAwIDAgMSA4IDEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS45NjUgMTQuMTA1aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOTY1IDE4LjEwNWg0TDIwLjQzIDE5LjcxYTUgNSAwIDAgMS04LTEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDguODJhMTUgMTUgMCAwIDEgMjAgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS45NjUgMjIuMTA1di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuODZhMTAgMTAgMCAwIDEgMy0yLjAzMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjUgMTYuNDI5aC4wMSIgfV0KICAgIF07CiAgICB2YXIgV2lmaVplcm8gPSBbWyJwYXRoIiwgeyBkOiAiTTEyIDIwaC4wMSIgfV1dOwogICAgdmFyIFdpZmlQZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDguODJhMTUgMTUgMCAwIDEgMjAgMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggMTYuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxMi44NTlhMTAgMTAgMCAwIDEgMTAuNS0yLjIyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjUgMTYuNDI5YTUgNSAwIDAgMSAzLTEuNDA2IiB9XQogICAgXTsKICAgIHZhciBXaWZpID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOC44MmExNSAxNSAwIDAgMSAyMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuODU5YTEwIDEwIDAgMCAxIDE0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDE2LjQyOWE1IDUgMCAwIDEgNyAwIiB9XQogICAgXTsKICAgIHZhciBXaW5kQXJyb3dEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjggMjEuNkEyIDIgMCAxIDAgMTQgMThIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41IDEwYTIuNSAyLjUgMCAxIDEgMiA0SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiA2IDQgNCA0LTQiIH1dCiAgICBdOwogICAgdmFyIFdpbmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi44IDE5LjZBMiAyIDAgMSAwIDE0IDE2SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNSA4YTIuNSAyLjUgMCAxIDEgMiA0SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS44IDQuNEEyIDIgMCAxIDEgMTEgOEgyIiB9XQogICAgXTsKICAgIHZhciBXaW5lT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBoM203IDBoLTEuMzQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1djciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy4zMDcgNy4zMDdBMTIuMzMgMTIuMzMgMCAwIDAgNyAxMGE1IDUgMCAwIDAgNy4zOTEgNC4zOTFNOC42MzggMi45ODFDOC43NSAyLjY2OCA4Ljg3MiAyLjM0IDkgMmg2YzEuNSA0IDIgNiAyIDggMCAuNDA3LS4wNS44MDktLjE0NSAxLjE5OCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIFdpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMGgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNXY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1YTUgNSAwIDAgMCA1LTVjMC0yLS41LTQtMi04SDljLTEuNSA0LTIgNi0yIDhhNSA1IDAgMCAwIDUgNVoiIH1dCiAgICBdOwogICAgdmFyIFdvcm0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAxMi0xLjUgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS42MyAxOC44MSAyMiAyMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02LjQ3IDguMjNhMS42OCAxLjY4IDAgMCAxIDIuNDQgMS45M2wtLjY0IDIuMDhhNi43NiA2Ljc2IDAgMCAwIDEwLjE2IDcuNjdsLjQyLS4yN2ExIDEgMCAxIDAtMi43My00LjIxbC0uNDIuMjdhMS43NiAxLjc2IDAgMCAxLTIuNjMtMS45OWwuNjQtMi4wOEE2LjY2IDYuNjYgMCAwIDAgMy45NCAzLjlsLS43LjRhMSAxIDAgMSAwIDIuNTUgNC4zNHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFdvcmtmbG93ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTF2NGEyIDIgMCAwIDAgMiAyaDQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjgiLCB4OiAiMTMiLCB5OiAiMTMiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFdyZW5jaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0LjcgNi4zYTEgMSAwIDAgMCAwIDEuNGwxLjYgMS42YTEgMSAwIDAgMCAxLjQgMGwzLjEwNi0zLjEwNWMuMzItLjMyMi44NjMtLjIyLjk4My4yMThhNiA2IDAgMCAxLTguMjU5IDcuMDU3bC03LjkxIDcuOTFhMSAxIDAgMCAxLTIuOTk5LTNsNy45MS03LjkxYTYgNiAwIDAgMSA3LjA1Ny04LjI1OWMuNDM4LjEyLjU0LjY2Mi4yMTkuOTg0eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgWCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDYgNiAxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDYgMTIgMTIiIH1dCiAgICBdOwogICAgdmFyIFlvdXR1YmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjUgMTdhMjQuMTIgMjQuMTIgMCAwIDEgMC0xMCAyIDIgMCAwIDEgMS40LTEuNCA0OS41NiA0OS41NiAwIDAgMSAxNi4yIDBBMiAyIDAgMCAxIDIxLjUgN2EyNC4xMiAyNC4xMiAwIDAgMSAwIDEwIDIgMiAwIDAgMS0xLjQgMS40IDQ5LjU1IDQ5LjU1IDAgMCAxLTE2LjIgMEEyIDIgMCAwIDEgMi41IDE3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE1IDUtMy01LTN6IiB9XQogICAgXTsKICAgIHZhciBaYXBPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC41MTMgNC44NTYgMTMuMTIgMi4xN2EuNS41IDAgMCAxIC44Ni40NmwtMS4zNzcgNC4zMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUuNjU2IDEwSDIwYTEgMSAwIDAgMSAuNzggMS42M2wtMS43MiAxLjc3MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNi4yNzMgMTYuMjczIDEwLjg4IDIxLjgzYS41LjUgMCAwIDEtLjg2LS40NmwxLjkyLTYuMDJBMSAxIDAgMCAwIDExIDE0SDRhMSAxIDAgMCAxLS43OC0xLjYzbDQuNTA3LTQuNjQzIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgICB2YXIgWmFwID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAxNGExIDEgMCAwIDEtLjc4LTEuNjNsOS45LTEwLjJhLjUuNSAwIDAgMSAuODYuNDZsLTEuOTIgNi4wMkExIDEgMCAwIDAgMTMgMTBoN2ExIDEgMCAwIDEgLjc4IDEuNjNsLTkuOSAxMC4yYS41LjUgMCAwIDEtLjg2LS40NmwxLjkyLTYuMDJBMSAxIDAgMCAwIDExIDE0eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgWm9vbUluID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMSIsIHgyOiAiMTYuNjUiLCB5MTogIjIxIiwgeTI6ICIxNi42NSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMSIsIHgyOiAiMTEiLCB5MTogIjgiLCB5MjogIjE0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE0IiwgeTE6ICIxMSIsIHkyOiAiMTEiIH1dCiAgICBdOwogICAgdmFyIFpvb21PdXQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjExIiwgY3k6ICIxMSIsIHI6ICI4IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIxIiwgeDI6ICIxNi42NSIsIHkxOiAiMjEiLCB5MjogIjE2LjY1IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE0IiwgeTE6ICIxMSIsIHkyOiAiMTEiIH1dCiAgICBdOwogICAgdmFyIGljb25zQW5kQWxpYXNlcyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuZnJlZXplKHsKICAgICAgX19wcm90b19fOiBudWxsLAogICAgICBBQXJyb3dEb3duLAogICAgICBBQXJyb3dVcCwKICAgICAgQUxhcmdlU21hbGwsCiAgICAgIEFjY2Vzc2liaWxpdHksCiAgICAgIEFjdGl2aXR5LAogICAgICBBY3Rpdml0eVNxdWFyZTogU3F1YXJlQWN0aXZpdHksCiAgICAgIEFpclZlbnQsCiAgICAgIEFpcnBsYXksCiAgICAgIEFsYXJtQ2hlY2s6IEFsYXJtQ2xvY2tDaGVjaywKICAgICAgQWxhcm1DbG9jaywKICAgICAgQWxhcm1DbG9ja0NoZWNrLAogICAgICBBbGFybUNsb2NrTWludXMsCiAgICAgIEFsYXJtQ2xvY2tPZmYsCiAgICAgIEFsYXJtQ2xvY2tQbHVzLAogICAgICBBbGFybU1pbnVzOiBBbGFybUNsb2NrTWludXMsCiAgICAgIEFsYXJtUGx1czogQWxhcm1DbG9ja1BsdXMsCiAgICAgIEFsYXJtU21va2UsCiAgICAgIEFsYnVtLAogICAgICBBbGVydENpcmNsZTogQ2lyY2xlQWxlcnQsCiAgICAgIEFsZXJ0T2N0YWdvbjogT2N0YWdvbkFsZXJ0LAogICAgICBBbGVydFRyaWFuZ2xlOiBUcmlhbmdsZUFsZXJ0LAogICAgICBBbGlnbkNlbnRlcjogVGV4dEFsaWduQ2VudGVyLAogICAgICBBbGlnbkNlbnRlckhvcml6b250YWwsCiAgICAgIEFsaWduQ2VudGVyVmVydGljYWwsCiAgICAgIEFsaWduRW5kSG9yaXpvbnRhbCwKICAgICAgQWxpZ25FbmRWZXJ0aWNhbCwKICAgICAgQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZUNlbnRlciwKICAgICAgQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZUVuZCwKICAgICAgQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZVN0YXJ0LAogICAgICBBbGlnbkhvcml6b250YWxKdXN0aWZ5Q2VudGVyLAogICAgICBBbGlnbkhvcml6b250YWxKdXN0aWZ5RW5kLAogICAgICBBbGlnbkhvcml6b250YWxKdXN0aWZ5U3RhcnQsCiAgICAgIEFsaWduSG9yaXpvbnRhbFNwYWNlQXJvdW5kLAogICAgICBBbGlnbkhvcml6b250YWxTcGFjZUJldHdlZW4sCiAgICAgIEFsaWduSnVzdGlmeTogVGV4dEFsaWduSnVzdGlmeSwKICAgICAgQWxpZ25MZWZ0OiBUZXh0QWxpZ25TdGFydCwKICAgICAgQWxpZ25SaWdodDogVGV4dEFsaWduRW5kLAogICAgICBBbGlnblN0YXJ0SG9yaXpvbnRhbCwKICAgICAgQWxpZ25TdGFydFZlcnRpY2FsLAogICAgICBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUNlbnRlciwKICAgICAgQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVFbmQsCiAgICAgIEFsaWduVmVydGljYWxEaXN0cmlidXRlU3RhcnQsCiAgICAgIEFsaWduVmVydGljYWxKdXN0aWZ5Q2VudGVyLAogICAgICBBbGlnblZlcnRpY2FsSnVzdGlmeUVuZCwKICAgICAgQWxpZ25WZXJ0aWNhbEp1c3RpZnlTdGFydCwKICAgICAgQWxpZ25WZXJ0aWNhbFNwYWNlQXJvdW5kLAogICAgICBBbGlnblZlcnRpY2FsU3BhY2VCZXR3ZWVuLAogICAgICBBbWJ1bGFuY2UsCiAgICAgIEFtcGVyc2FuZCwKICAgICAgQW1wZXJzYW5kcywKICAgICAgQW1waG9yYSwKICAgICAgQW5jaG9yLAogICAgICBBbmdyeSwKICAgICAgQW5ub3llZCwKICAgICAgQW50ZW5uYSwKICAgICAgQW52aWwsCiAgICAgIEFwZXJ0dXJlLAogICAgICBBcHBXaW5kb3csCiAgICAgIEFwcFdpbmRvd01hYywKICAgICAgQXBwbGUsCiAgICAgIEFyY2hpdmUsCiAgICAgIEFyY2hpdmVSZXN0b3JlLAogICAgICBBcmNoaXZlWCwKICAgICAgQXJlYUNoYXJ0OiBDaGFydEFyZWEsCiAgICAgIEFybWNoYWlyLAogICAgICBBcnJvd0JpZ0Rvd24sCiAgICAgIEFycm93QmlnRG93bkRhc2gsCiAgICAgIEFycm93QmlnTGVmdCwKICAgICAgQXJyb3dCaWdMZWZ0RGFzaCwKICAgICAgQXJyb3dCaWdSaWdodCwKICAgICAgQXJyb3dCaWdSaWdodERhc2gsCiAgICAgIEFycm93QmlnVXAsCiAgICAgIEFycm93QmlnVXBEYXNoLAogICAgICBBcnJvd0Rvd24sCiAgICAgIEFycm93RG93bjAxLAogICAgICBBcnJvd0Rvd24xMCwKICAgICAgQXJyb3dEb3duQVosCiAgICAgIEFycm93RG93bkF6OiBBcnJvd0Rvd25BWiwKICAgICAgQXJyb3dEb3duQ2lyY2xlOiBDaXJjbGVBcnJvd0Rvd24sCiAgICAgIEFycm93RG93bkZyb21MaW5lLAogICAgICBBcnJvd0Rvd25MZWZ0LAogICAgICBBcnJvd0Rvd25MZWZ0RnJvbUNpcmNsZTogQ2lyY2xlQXJyb3dPdXREb3duTGVmdCwKICAgICAgQXJyb3dEb3duTGVmdEZyb21TcXVhcmU6IFNxdWFyZUFycm93T3V0RG93bkxlZnQsCiAgICAgIEFycm93RG93bkxlZnRTcXVhcmU6IFNxdWFyZUFycm93RG93bkxlZnQsCiAgICAgIEFycm93RG93bk5hcnJvd1dpZGUsCiAgICAgIEFycm93RG93blJpZ2h0LAogICAgICBBcnJvd0Rvd25SaWdodEZyb21DaXJjbGU6IENpcmNsZUFycm93T3V0RG93blJpZ2h0LAogICAgICBBcnJvd0Rvd25SaWdodEZyb21TcXVhcmU6IFNxdWFyZUFycm93T3V0RG93blJpZ2h0LAogICAgICBBcnJvd0Rvd25SaWdodFNxdWFyZTogU3F1YXJlQXJyb3dEb3duUmlnaHQsCiAgICAgIEFycm93RG93blNxdWFyZTogU3F1YXJlQXJyb3dEb3duLAogICAgICBBcnJvd0Rvd25Ub0RvdCwKICAgICAgQXJyb3dEb3duVG9MaW5lLAogICAgICBBcnJvd0Rvd25VcCwKICAgICAgQXJyb3dEb3duV2lkZU5hcnJvdywKICAgICAgQXJyb3dEb3duWkEsCiAgICAgIEFycm93RG93blphOiBBcnJvd0Rvd25aQSwKICAgICAgQXJyb3dMZWZ0LAogICAgICBBcnJvd0xlZnRDaXJjbGU6IENpcmNsZUFycm93TGVmdCwKICAgICAgQXJyb3dMZWZ0RnJvbUxpbmUsCiAgICAgIEFycm93TGVmdFJpZ2h0LAogICAgICBBcnJvd0xlZnRTcXVhcmU6IFNxdWFyZUFycm93TGVmdCwKICAgICAgQXJyb3dMZWZ0VG9MaW5lLAogICAgICBBcnJvd1JpZ2h0LAogICAgICBBcnJvd1JpZ2h0Q2lyY2xlOiBDaXJjbGVBcnJvd1JpZ2h0LAogICAgICBBcnJvd1JpZ2h0RnJvbUxpbmUsCiAgICAgIEFycm93UmlnaHRMZWZ0LAogICAgICBBcnJvd1JpZ2h0U3F1YXJlOiBTcXVhcmVBcnJvd1JpZ2h0LAogICAgICBBcnJvd1JpZ2h0VG9MaW5lLAogICAgICBBcnJvd1VwLAogICAgICBBcnJvd1VwMDEsCiAgICAgIEFycm93VXAxMCwKICAgICAgQXJyb3dVcEFaLAogICAgICBBcnJvd1VwQXo6IEFycm93VXBBWiwKICAgICAgQXJyb3dVcENpcmNsZTogQ2lyY2xlQXJyb3dVcCwKICAgICAgQXJyb3dVcERvd24sCiAgICAgIEFycm93VXBGcm9tRG90LAogICAgICBBcnJvd1VwRnJvbUxpbmUsCiAgICAgIEFycm93VXBMZWZ0LAogICAgICBBcnJvd1VwTGVmdEZyb21DaXJjbGU6IENpcmNsZUFycm93T3V0VXBMZWZ0LAogICAgICBBcnJvd1VwTGVmdEZyb21TcXVhcmU6IFNxdWFyZUFycm93T3V0VXBMZWZ0LAogICAgICBBcnJvd1VwTGVmdFNxdWFyZTogU3F1YXJlQXJyb3dVcExlZnQsCiAgICAgIEFycm93VXBOYXJyb3dXaWRlLAogICAgICBBcnJvd1VwUmlnaHQsCiAgICAgIEFycm93VXBSaWdodEZyb21DaXJjbGU6IENpcmNsZUFycm93T3V0VXBSaWdodCwKICAgICAgQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZTogU3F1YXJlQXJyb3dPdXRVcFJpZ2h0LAogICAgICBBcnJvd1VwUmlnaHRTcXVhcmU6IFNxdWFyZUFycm93VXBSaWdodCwKICAgICAgQXJyb3dVcFNxdWFyZTogU3F1YXJlQXJyb3dVcCwKICAgICAgQXJyb3dVcFRvTGluZSwKICAgICAgQXJyb3dVcFdpZGVOYXJyb3csCiAgICAgIEFycm93VXBaQSwKICAgICAgQXJyb3dVcFphOiBBcnJvd1VwWkEsCiAgICAgIEFycm93c1VwRnJvbUxpbmUsCiAgICAgIEFzdGVyaXNrLAogICAgICBBc3Rlcmlza1NxdWFyZTogU3F1YXJlQXN0ZXJpc2ssCiAgICAgIEF0U2lnbiwKICAgICAgQXRvbSwKICAgICAgQXVkaW9MaW5lcywKICAgICAgQXVkaW9XYXZlZm9ybSwKICAgICAgQXdhcmQsCiAgICAgIEF4ZSwKICAgICAgQXhpczNEOiBBeGlzM2QsCiAgICAgIEF4aXMzZCwKICAgICAgQmFieSwKICAgICAgQmFja3BhY2ssCiAgICAgIEJhZGdlLAogICAgICBCYWRnZUFsZXJ0LAogICAgICBCYWRnZUNlbnQsCiAgICAgIEJhZGdlQ2hlY2ssCiAgICAgIEJhZGdlRG9sbGFyU2lnbiwKICAgICAgQmFkZ2VFdXJvLAogICAgICBCYWRnZUhlbHA6IEJhZGdlUXVlc3Rpb25NYXJrLAogICAgICBCYWRnZUluZGlhblJ1cGVlLAogICAgICBCYWRnZUluZm8sCiAgICAgIEJhZGdlSmFwYW5lc2VZZW4sCiAgICAgIEJhZGdlTWludXMsCiAgICAgIEJhZGdlUGVyY2VudCwKICAgICAgQmFkZ2VQbHVzLAogICAgICBCYWRnZVBvdW5kU3RlcmxpbmcsCiAgICAgIEJhZGdlUXVlc3Rpb25NYXJrLAogICAgICBCYWRnZVJ1c3NpYW5SdWJsZSwKICAgICAgQmFkZ2VTd2lzc0ZyYW5jLAogICAgICBCYWRnZVR1cmtpc2hMaXJhLAogICAgICBCYWRnZVgsCiAgICAgIEJhZ2dhZ2VDbGFpbSwKICAgICAgQmFsbG9vbiwKICAgICAgQmFuLAogICAgICBCYW5hbmEsCiAgICAgIEJhbmRhZ2UsCiAgICAgIEJhbmtub3RlLAogICAgICBCYW5rbm90ZUFycm93RG93biwKICAgICAgQmFua25vdGVBcnJvd1VwLAogICAgICBCYW5rbm90ZVgsCiAgICAgIEJhckNoYXJ0OiBDaGFydE5vQXhlc0NvbHVtbkluY3JlYXNpbmcsCiAgICAgIEJhckNoYXJ0MjogQ2hhcnROb0F4ZXNDb2x1bW4sCiAgICAgIEJhckNoYXJ0MzogQ2hhcnRDb2x1bW4sCiAgICAgIEJhckNoYXJ0NDogQ2hhcnRDb2x1bW5JbmNyZWFzaW5nLAogICAgICBCYXJDaGFydEJpZzogQ2hhcnRDb2x1bW5CaWcsCiAgICAgIEJhckNoYXJ0SG9yaXpvbnRhbDogQ2hhcnRCYXIsCiAgICAgIEJhckNoYXJ0SG9yaXpvbnRhbEJpZzogQ2hhcnRCYXJCaWcsCiAgICAgIEJhcmNvZGUsCiAgICAgIEJhcnJlbCwKICAgICAgQmFzZWxpbmUsCiAgICAgIEJhdGgsCiAgICAgIEJhdHRlcnksCiAgICAgIEJhdHRlcnlDaGFyZ2luZywKICAgICAgQmF0dGVyeUZ1bGwsCiAgICAgIEJhdHRlcnlMb3csCiAgICAgIEJhdHRlcnlNZWRpdW0sCiAgICAgIEJhdHRlcnlQbHVzLAogICAgICBCYXR0ZXJ5V2FybmluZywKICAgICAgQmVha2VyLAogICAgICBCZWFuLAogICAgICBCZWFuT2ZmLAogICAgICBCZWQsCiAgICAgIEJlZERvdWJsZSwKICAgICAgQmVkU2luZ2xlLAogICAgICBCZWVmLAogICAgICBCZWVyLAogICAgICBCZWVyT2ZmLAogICAgICBCZWxsLAogICAgICBCZWxsRG90LAogICAgICBCZWxsRWxlY3RyaWMsCiAgICAgIEJlbGxNaW51cywKICAgICAgQmVsbE9mZiwKICAgICAgQmVsbFBsdXMsCiAgICAgIEJlbGxSaW5nLAogICAgICBCZXR3ZWVuSG9yaXpvbmFsRW5kOiBCZXR3ZWVuSG9yaXpvbnRhbEVuZCwKICAgICAgQmV0d2Vlbkhvcml6b25hbFN0YXJ0OiBCZXR3ZWVuSG9yaXpvbnRhbFN0YXJ0LAogICAgICBCZXR3ZWVuSG9yaXpvbnRhbEVuZCwKICAgICAgQmV0d2Vlbkhvcml6b250YWxTdGFydCwKICAgICAgQmV0d2VlblZlcnRpY2FsRW5kLAogICAgICBCZXR3ZWVuVmVydGljYWxTdGFydCwKICAgICAgQmljZXBzRmxleGVkLAogICAgICBCaWtlLAogICAgICBCaW5hcnksCiAgICAgIEJpbm9jdWxhcnMsCiAgICAgIEJpb2hhemFyZCwKICAgICAgQmlyZCwKICAgICAgQmlyZGhvdXNlLAogICAgICBCaXRjb2luLAogICAgICBCbGVuZCwKICAgICAgQmxpbmRzLAogICAgICBCbG9ja3MsCiAgICAgIEJsdWV0b290aCwKICAgICAgQmx1ZXRvb3RoQ29ubmVjdGVkLAogICAgICBCbHVldG9vdGhPZmYsCiAgICAgIEJsdWV0b290aFNlYXJjaGluZywKICAgICAgQm9sZCwKICAgICAgQm9sdCwKICAgICAgQm9tYiwKICAgICAgQm9uZSwKICAgICAgQm9vaywKICAgICAgQm9va0EsCiAgICAgIEJvb2tBbGVydCwKICAgICAgQm9va0F1ZGlvLAogICAgICBCb29rQ2hlY2ssCiAgICAgIEJvb2tDb3B5LAogICAgICBCb29rRGFzaGVkLAogICAgICBCb29rRG93biwKICAgICAgQm9va0hlYWRwaG9uZXMsCiAgICAgIEJvb2tIZWFydCwKICAgICAgQm9va0ltYWdlLAogICAgICBCb29rS2V5LAogICAgICBCb29rTG9jaywKICAgICAgQm9va01hcmtlZCwKICAgICAgQm9va01pbnVzLAogICAgICBCb29rT3BlbiwKICAgICAgQm9va09wZW5DaGVjaywKICAgICAgQm9va09wZW5UZXh0LAogICAgICBCb29rUGx1cywKICAgICAgQm9va1NlYXJjaCwKICAgICAgQm9va1RlbXBsYXRlOiBCb29rRGFzaGVkLAogICAgICBCb29rVGV4dCwKICAgICAgQm9va1R5cGUsCiAgICAgIEJvb2tVcCwKICAgICAgQm9va1VwMiwKICAgICAgQm9va1VzZXIsCiAgICAgIEJvb2tYLAogICAgICBCb29rbWFyaywKICAgICAgQm9va21hcmtDaGVjaywKICAgICAgQm9va21hcmtNaW51cywKICAgICAgQm9va21hcmtQbHVzLAogICAgICBCb29rbWFya1gsCiAgICAgIEJvb21Cb3gsCiAgICAgIEJvdCwKICAgICAgQm90TWVzc2FnZVNxdWFyZSwKICAgICAgQm90T2ZmLAogICAgICBCb3R0bGVXaW5lLAogICAgICBCb3dBcnJvdywKICAgICAgQm94LAogICAgICBCb3hTZWxlY3Q6IFNxdWFyZURhc2hlZCwKICAgICAgQm94ZXMsCiAgICAgIEJyYWNlcywKICAgICAgQnJhY2tldHMsCiAgICAgIEJyYWluLAogICAgICBCcmFpbkNpcmN1aXQsCiAgICAgIEJyYWluQ29nLAogICAgICBCcmlja1dhbGwsCiAgICAgIEJyaWNrV2FsbEZpcmUsCiAgICAgIEJyaWNrV2FsbFNoaWVsZCwKICAgICAgQnJpZWZjYXNlLAogICAgICBCcmllZmNhc2VCdXNpbmVzcywKICAgICAgQnJpZWZjYXNlQ29udmV5b3JCZWx0LAogICAgICBCcmllZmNhc2VNZWRpY2FsLAogICAgICBCcmluZ1RvRnJvbnQsCiAgICAgIEJydXNoLAogICAgICBCcnVzaENsZWFuaW5nLAogICAgICBCdWJibGVzLAogICAgICBCdWcsCiAgICAgIEJ1Z09mZiwKICAgICAgQnVnUGxheSwKICAgICAgQnVpbGRpbmcsCiAgICAgIEJ1aWxkaW5nMiwKICAgICAgQnVzLAogICAgICBCdXNGcm9udCwKICAgICAgQ2FibGUsCiAgICAgIENhYmxlQ2FyLAogICAgICBDYWtlLAogICAgICBDYWtlU2xpY2UsCiAgICAgIENhbGN1bGF0b3IsCiAgICAgIENhbGVuZGFyLAogICAgICBDYWxlbmRhcjEsCiAgICAgIENhbGVuZGFyQXJyb3dEb3duLAogICAgICBDYWxlbmRhckFycm93VXAsCiAgICAgIENhbGVuZGFyQ2hlY2ssCiAgICAgIENhbGVuZGFyQ2hlY2syLAogICAgICBDYWxlbmRhckNsb2NrLAogICAgICBDYWxlbmRhckNvZywKICAgICAgQ2FsZW5kYXJEYXlzLAogICAgICBDYWxlbmRhckZvbGQsCiAgICAgIENhbGVuZGFySGVhcnQsCiAgICAgIENhbGVuZGFyTWludXMsCiAgICAgIENhbGVuZGFyTWludXMyLAogICAgICBDYWxlbmRhck9mZiwKICAgICAgQ2FsZW5kYXJQbHVzLAogICAgICBDYWxlbmRhclBsdXMyLAogICAgICBDYWxlbmRhclJhbmdlLAogICAgICBDYWxlbmRhclNlYXJjaCwKICAgICAgQ2FsZW5kYXJTeW5jLAogICAgICBDYWxlbmRhclgsCiAgICAgIENhbGVuZGFyWDIsCiAgICAgIENhbGVuZGFycywKICAgICAgQ2FtZXJhLAogICAgICBDYW1lcmFPZmYsCiAgICAgIENhbmRsZXN0aWNrQ2hhcnQ6IENoYXJ0Q2FuZGxlc3RpY2ssCiAgICAgIENhbmR5LAogICAgICBDYW5keUNhbmUsCiAgICAgIENhbmR5T2ZmLAogICAgICBDYW5uYWJpcywKICAgICAgQ2FubmFiaXNPZmYsCiAgICAgIENhcHRpb25zLAogICAgICBDYXB0aW9uc09mZiwKICAgICAgQ2FyLAogICAgICBDYXJGcm9udCwKICAgICAgQ2FyVGF4aUZyb250LAogICAgICBDYXJhdmFuLAogICAgICBDYXJkU2ltLAogICAgICBDYXJyb3QsCiAgICAgIENhc2VMb3dlciwKICAgICAgQ2FzZVNlbnNpdGl2ZSwKICAgICAgQ2FzZVVwcGVyLAogICAgICBDYXNzZXR0ZVRhcGUsCiAgICAgIENhc3QsCiAgICAgIENhc3RsZSwKICAgICAgQ2F0LAogICAgICBDY3R2LAogICAgICBDaGFydEFyZWEsCiAgICAgIENoYXJ0QmFyLAogICAgICBDaGFydEJhckJpZywKICAgICAgQ2hhcnRCYXJEZWNyZWFzaW5nLAogICAgICBDaGFydEJhckluY3JlYXNpbmcsCiAgICAgIENoYXJ0QmFyU3RhY2tlZCwKICAgICAgQ2hhcnRDYW5kbGVzdGljaywKICAgICAgQ2hhcnRDb2x1bW4sCiAgICAgIENoYXJ0Q29sdW1uQmlnLAogICAgICBDaGFydENvbHVtbkRlY3JlYXNpbmcsCiAgICAgIENoYXJ0Q29sdW1uSW5jcmVhc2luZywKICAgICAgQ2hhcnRDb2x1bW5TdGFja2VkLAogICAgICBDaGFydEdhbnR0LAogICAgICBDaGFydExpbmUsCiAgICAgIENoYXJ0TmV0d29yaywKICAgICAgQ2hhcnROb0F4ZXNDb2x1bW4sCiAgICAgIENoYXJ0Tm9BeGVzQ29sdW1uRGVjcmVhc2luZywKICAgICAgQ2hhcnROb0F4ZXNDb2x1bW5JbmNyZWFzaW5nLAogICAgICBDaGFydE5vQXhlc0NvbWJpbmVkLAogICAgICBDaGFydE5vQXhlc0dhbnR0LAogICAgICBDaGFydFBpZSwKICAgICAgQ2hhcnRTY2F0dGVyLAogICAgICBDaGFydFNwbGluZSwKICAgICAgQ2hlY2ssCiAgICAgIENoZWNrQ2hlY2ssCiAgICAgIENoZWNrQ2lyY2xlOiBDaXJjbGVDaGVja0JpZywKICAgICAgQ2hlY2tDaXJjbGUyOiBDaXJjbGVDaGVjaywKICAgICAgQ2hlY2tMaW5lLAogICAgICBDaGVja1NxdWFyZTogU3F1YXJlQ2hlY2tCaWcsCiAgICAgIENoZWNrU3F1YXJlMjogU3F1YXJlQ2hlY2ssCiAgICAgIENoZWZIYXQsCiAgICAgIENoZXJyeSwKICAgICAgQ2hlc3NCaXNob3AsCiAgICAgIENoZXNzS2luZywKICAgICAgQ2hlc3NLbmlnaHQsCiAgICAgIENoZXNzUGF3biwKICAgICAgQ2hlc3NRdWVlbiwKICAgICAgQ2hlc3NSb29rLAogICAgICBDaGV2cm9uRG93biwKICAgICAgQ2hldnJvbkRvd25DaXJjbGU6IENpcmNsZUNoZXZyb25Eb3duLAogICAgICBDaGV2cm9uRG93blNxdWFyZTogU3F1YXJlQ2hldnJvbkRvd24sCiAgICAgIENoZXZyb25GaXJzdCwKICAgICAgQ2hldnJvbkxhc3QsCiAgICAgIENoZXZyb25MZWZ0LAogICAgICBDaGV2cm9uTGVmdENpcmNsZTogQ2lyY2xlQ2hldnJvbkxlZnQsCiAgICAgIENoZXZyb25MZWZ0U3F1YXJlOiBTcXVhcmVDaGV2cm9uTGVmdCwKICAgICAgQ2hldnJvblJpZ2h0LAogICAgICBDaGV2cm9uUmlnaHRDaXJjbGU6IENpcmNsZUNoZXZyb25SaWdodCwKICAgICAgQ2hldnJvblJpZ2h0U3F1YXJlOiBTcXVhcmVDaGV2cm9uUmlnaHQsCiAgICAgIENoZXZyb25VcCwKICAgICAgQ2hldnJvblVwQ2lyY2xlOiBDaXJjbGVDaGV2cm9uVXAsCiAgICAgIENoZXZyb25VcFNxdWFyZTogU3F1YXJlQ2hldnJvblVwLAogICAgICBDaGV2cm9uc0Rvd24sCiAgICAgIENoZXZyb25zRG93blVwLAogICAgICBDaGV2cm9uc0xlZnQsCiAgICAgIENoZXZyb25zTGVmdFJpZ2h0LAogICAgICBDaGV2cm9uc0xlZnRSaWdodEVsbGlwc2lzLAogICAgICBDaGV2cm9uc1JpZ2h0LAogICAgICBDaGV2cm9uc1JpZ2h0TGVmdCwKICAgICAgQ2hldnJvbnNVcCwKICAgICAgQ2hldnJvbnNVcERvd24sCiAgICAgIENocm9tZTogQ2hyb21pdW0sCiAgICAgIENocm9taXVtLAogICAgICBDaHVyY2gsCiAgICAgIENpZ2FyZXR0ZSwKICAgICAgQ2lnYXJldHRlT2ZmLAogICAgICBDaXJjbGUsCiAgICAgIENpcmNsZUFsZXJ0LAogICAgICBDaXJjbGVBcnJvd0Rvd24sCiAgICAgIENpcmNsZUFycm93TGVmdCwKICAgICAgQ2lyY2xlQXJyb3dPdXREb3duTGVmdCwKICAgICAgQ2lyY2xlQXJyb3dPdXREb3duUmlnaHQsCiAgICAgIENpcmNsZUFycm93T3V0VXBMZWZ0LAogICAgICBDaXJjbGVBcnJvd091dFVwUmlnaHQsCiAgICAgIENpcmNsZUFycm93UmlnaHQsCiAgICAgIENpcmNsZUFycm93VXAsCiAgICAgIENpcmNsZUNoZWNrLAogICAgICBDaXJjbGVDaGVja0JpZywKICAgICAgQ2lyY2xlQ2hldnJvbkRvd24sCiAgICAgIENpcmNsZUNoZXZyb25MZWZ0LAogICAgICBDaXJjbGVDaGV2cm9uUmlnaHQsCiAgICAgIENpcmNsZUNoZXZyb25VcCwKICAgICAgQ2lyY2xlRGFzaGVkLAogICAgICBDaXJjbGVEaXZpZGUsCiAgICAgIENpcmNsZURvbGxhclNpZ24sCiAgICAgIENpcmNsZURvdCwKICAgICAgQ2lyY2xlRG90RGFzaGVkLAogICAgICBDaXJjbGVFbGxpcHNpcywKICAgICAgQ2lyY2xlRXF1YWwsCiAgICAgIENpcmNsZUZhZGluZ0Fycm93VXAsCiAgICAgIENpcmNsZUZhZGluZ1BsdXMsCiAgICAgIENpcmNsZUdhdWdlLAogICAgICBDaXJjbGVIZWxwOiBDaXJjbGVRdWVzdGlvbk1hcmssCiAgICAgIENpcmNsZU1pbnVzLAogICAgICBDaXJjbGVPZmYsCiAgICAgIENpcmNsZVBhcmtpbmcsCiAgICAgIENpcmNsZVBhcmtpbmdPZmYsCiAgICAgIENpcmNsZVBhdXNlLAogICAgICBDaXJjbGVQZXJjZW50LAogICAgICBDaXJjbGVQaWxlLAogICAgICBDaXJjbGVQbGF5LAogICAgICBDaXJjbGVQbHVzLAogICAgICBDaXJjbGVQb3VuZFN0ZXJsaW5nLAogICAgICBDaXJjbGVQb3dlciwKICAgICAgQ2lyY2xlUXVlc3Rpb25NYXJrLAogICAgICBDaXJjbGVTbGFzaCwKICAgICAgQ2lyY2xlU2xhc2gyLAogICAgICBDaXJjbGVTbGFzaGVkOiBDaXJjbGVTbGFzaDIsCiAgICAgIENpcmNsZVNtYWxsLAogICAgICBDaXJjbGVTdGFyLAogICAgICBDaXJjbGVTdG9wLAogICAgICBDaXJjbGVVc2VyLAogICAgICBDaXJjbGVVc2VyUm91bmQsCiAgICAgIENpcmNsZVgsCiAgICAgIENpcmN1aXRCb2FyZCwKICAgICAgQ2l0cnVzLAogICAgICBDbGFwcGVyYm9hcmQsCiAgICAgIENsaXBib2FyZCwKICAgICAgQ2xpcGJvYXJkQ2hlY2ssCiAgICAgIENsaXBib2FyZENsb2NrLAogICAgICBDbGlwYm9hcmRDb3B5LAogICAgICBDbGlwYm9hcmRFZGl0OiBDbGlwYm9hcmRQZW4sCiAgICAgIENsaXBib2FyZExpc3QsCiAgICAgIENsaXBib2FyZE1pbnVzLAogICAgICBDbGlwYm9hcmRQYXN0ZSwKICAgICAgQ2xpcGJvYXJkUGVuLAogICAgICBDbGlwYm9hcmRQZW5MaW5lLAogICAgICBDbGlwYm9hcmRQbHVzLAogICAgICBDbGlwYm9hcmRTaWduYXR1cmU6IENsaXBib2FyZFBlbkxpbmUsCiAgICAgIENsaXBib2FyZFR5cGUsCiAgICAgIENsaXBib2FyZFgsCiAgICAgIENsb2NrLAogICAgICBDbG9jazEsCiAgICAgIENsb2NrMTAsCiAgICAgIENsb2NrMTEsCiAgICAgIENsb2NrMTIsCiAgICAgIENsb2NrMiwKICAgICAgQ2xvY2szLAogICAgICBDbG9jazQsCiAgICAgIENsb2NrNSwKICAgICAgQ2xvY2s2LAogICAgICBDbG9jazcsCiAgICAgIENsb2NrOCwKICAgICAgQ2xvY2s5LAogICAgICBDbG9ja0FsZXJ0LAogICAgICBDbG9ja0Fycm93RG93biwKICAgICAgQ2xvY2tBcnJvd1VwLAogICAgICBDbG9ja0NoZWNrLAogICAgICBDbG9ja0ZhZGluZywKICAgICAgQ2xvY2tQbHVzLAogICAgICBDbG9zZWRDYXB0aW9uLAogICAgICBDbG91ZCwKICAgICAgQ2xvdWRBbGVydCwKICAgICAgQ2xvdWRCYWNrdXAsCiAgICAgIENsb3VkQ2hlY2ssCiAgICAgIENsb3VkQ29nLAogICAgICBDbG91ZERvd25sb2FkLAogICAgICBDbG91ZERyaXp6bGUsCiAgICAgIENsb3VkRm9nLAogICAgICBDbG91ZEhhaWwsCiAgICAgIENsb3VkTGlnaHRuaW5nLAogICAgICBDbG91ZE1vb24sCiAgICAgIENsb3VkTW9vblJhaW4sCiAgICAgIENsb3VkT2ZmLAogICAgICBDbG91ZFJhaW4sCiAgICAgIENsb3VkUmFpbldpbmQsCiAgICAgIENsb3VkU25vdywKICAgICAgQ2xvdWRTdW4sCiAgICAgIENsb3VkU3VuUmFpbiwKICAgICAgQ2xvdWRTeW5jLAogICAgICBDbG91ZFVwbG9hZCwKICAgICAgQ2xvdWR5LAogICAgICBDbG92ZXIsCiAgICAgIENsdWIsCiAgICAgIENvZGUsCiAgICAgIENvZGUyOiBDb2RlWG1sLAogICAgICBDb2RlU3F1YXJlOiBTcXVhcmVDb2RlLAogICAgICBDb2RlWG1sLAogICAgICBDb2RlcGVuLAogICAgICBDb2Rlc2FuZGJveCwKICAgICAgQ29mZmVlLAogICAgICBDb2csCiAgICAgIENvaW5zLAogICAgICBDb2x1bW5zOiBDb2x1bW5zMiwKICAgICAgQ29sdW1uczIsCiAgICAgIENvbHVtbnMzLAogICAgICBDb2x1bW5zM0NvZywKICAgICAgQ29sdW1uczQsCiAgICAgIENvbHVtbnNTZXR0aW5nczogQ29sdW1uczNDb2csCiAgICAgIENvbWJpbmUsCiAgICAgIENvbW1hbmQsCiAgICAgIENvbXBhc3MsCiAgICAgIENvbXBvbmVudCwKICAgICAgQ29tcHV0ZXIsCiAgICAgIENvbmNpZXJnZUJlbGwsCiAgICAgIENvbmUsCiAgICAgIENvbnN0cnVjdGlvbiwKICAgICAgQ29udGFjdCwKICAgICAgQ29udGFjdDI6IENvbnRhY3RSb3VuZCwKICAgICAgQ29udGFjdFJvdW5kLAogICAgICBDb250YWluZXIsCiAgICAgIENvbnRyYXN0LAogICAgICBDb29raWUsCiAgICAgIENvb2tpbmdQb3QsCiAgICAgIENvcHksCiAgICAgIENvcHlDaGVjaywKICAgICAgQ29weU1pbnVzLAogICAgICBDb3B5UGx1cywKICAgICAgQ29weVNsYXNoLAogICAgICBDb3B5WCwKICAgICAgQ29weWxlZnQsCiAgICAgIENvcHlyaWdodCwKICAgICAgQ29ybmVyRG93bkxlZnQsCiAgICAgIENvcm5lckRvd25SaWdodCwKICAgICAgQ29ybmVyTGVmdERvd24sCiAgICAgIENvcm5lckxlZnRVcCwKICAgICAgQ29ybmVyUmlnaHREb3duLAogICAgICBDb3JuZXJSaWdodFVwLAogICAgICBDb3JuZXJVcExlZnQsCiAgICAgIENvcm5lclVwUmlnaHQsCiAgICAgIENwdSwKICAgICAgQ3JlYXRpdmVDb21tb25zLAogICAgICBDcmVkaXRDYXJkLAogICAgICBDcm9pc3NhbnQsCiAgICAgIENyb3AsCiAgICAgIENyb3NzLAogICAgICBDcm9zc2hhaXIsCiAgICAgIENyb3duLAogICAgICBDdWJvaWQsCiAgICAgIEN1cFNvZGEsCiAgICAgIEN1cmx5QnJhY2VzOiBCcmFjZXMsCiAgICAgIEN1cnJlbmN5LAogICAgICBDeWxpbmRlciwKICAgICAgRGFtLAogICAgICBEYXRhYmFzZSwKICAgICAgRGF0YWJhc2VCYWNrdXAsCiAgICAgIERhdGFiYXNlWmFwLAogICAgICBEZWNpbWFsc0Fycm93TGVmdCwKICAgICAgRGVjaW1hbHNBcnJvd1JpZ2h0LAogICAgICBEZWxldGUsCiAgICAgIERlc3NlcnQsCiAgICAgIERpYW1ldGVyLAogICAgICBEaWFtb25kLAogICAgICBEaWFtb25kTWludXMsCiAgICAgIERpYW1vbmRQZXJjZW50LAogICAgICBEaWFtb25kUGx1cywKICAgICAgRGljZTEsCiAgICAgIERpY2UyLAogICAgICBEaWNlMywKICAgICAgRGljZTQsCiAgICAgIERpY2U1LAogICAgICBEaWNlNiwKICAgICAgRGljZXMsCiAgICAgIERpZmYsCiAgICAgIERpc2MsCiAgICAgIERpc2MyLAogICAgICBEaXNjMywKICAgICAgRGlzY0FsYnVtLAogICAgICBEaXZpZGUsCiAgICAgIERpdmlkZUNpcmNsZTogQ2lyY2xlRGl2aWRlLAogICAgICBEaXZpZGVTcXVhcmU6IFNxdWFyZURpdmlkZSwKICAgICAgRG5hLAogICAgICBEbmFPZmYsCiAgICAgIERvY2ssCiAgICAgIERvZywKICAgICAgRG9sbGFyU2lnbiwKICAgICAgRG9udXQsCiAgICAgIERvb3JDbG9zZWQsCiAgICAgIERvb3JDbG9zZWRMb2NrZWQsCiAgICAgIERvb3JPcGVuLAogICAgICBEb3QsCiAgICAgIERvdFNxdWFyZTogU3F1YXJlRG90LAogICAgICBEb3dubG9hZCwKICAgICAgRG93bmxvYWRDbG91ZDogQ2xvdWREb3dubG9hZCwKICAgICAgRHJhZnRpbmdDb21wYXNzLAogICAgICBEcmFtYSwKICAgICAgRHJpYmJibGUsCiAgICAgIERyaWxsLAogICAgICBEcm9uZSwKICAgICAgRHJvcGxldCwKICAgICAgRHJvcGxldE9mZiwKICAgICAgRHJvcGxldHMsCiAgICAgIERydW0sCiAgICAgIERydW1zdGljaywKICAgICAgRHVtYmJlbGwsCiAgICAgIEVhciwKICAgICAgRWFyT2ZmLAogICAgICBFYXJ0aCwKICAgICAgRWFydGhMb2NrLAogICAgICBFY2xpcHNlLAogICAgICBFZGl0OiBTcXVhcmVQZW4sCiAgICAgIEVkaXQyOiBQZW4sCiAgICAgIEVkaXQzOiBQZW5MaW5lLAogICAgICBFZ2csCiAgICAgIEVnZ0ZyaWVkLAogICAgICBFZ2dPZmYsCiAgICAgIEVsbGlwc2lzLAogICAgICBFbGxpcHNpc1ZlcnRpY2FsLAogICAgICBFcXVhbCwKICAgICAgRXF1YWxBcHByb3hpbWF0ZWx5LAogICAgICBFcXVhbE5vdCwKICAgICAgRXF1YWxTcXVhcmU6IFNxdWFyZUVxdWFsLAogICAgICBFcmFzZXIsCiAgICAgIEV0aGVybmV0UG9ydCwKICAgICAgRXVybywKICAgICAgRXZDaGFyZ2VyLAogICAgICBFeHBhbmQsCiAgICAgIEV4dGVybmFsTGluaywKICAgICAgRXllLAogICAgICBFeWVDbG9zZWQsCiAgICAgIEV5ZU9mZiwKICAgICAgRmFjZWJvb2ssCiAgICAgIEZhY3RvcnksCiAgICAgIEZhbiwKICAgICAgRmFzdEZvcndhcmQsCiAgICAgIEZlYXRoZXIsCiAgICAgIEZlbmNlLAogICAgICBGZXJyaXNXaGVlbCwKICAgICAgRmlnbWEsCiAgICAgIEZpbGUsCiAgICAgIEZpbGVBcmNoaXZlLAogICAgICBGaWxlQXVkaW86IEZpbGVIZWFkcGhvbmUsCiAgICAgIEZpbGVBdWRpbzI6IEZpbGVIZWFkcGhvbmUsCiAgICAgIEZpbGVBeGlzM0Q6IEZpbGVBeGlzM2QsCiAgICAgIEZpbGVBeGlzM2QsCiAgICAgIEZpbGVCYWRnZSwKICAgICAgRmlsZUJhZGdlMjogRmlsZUJhZGdlLAogICAgICBGaWxlQmFyQ2hhcnQ6IEZpbGVDaGFydENvbHVtbkluY3JlYXNpbmcsCiAgICAgIEZpbGVCYXJDaGFydDI6IEZpbGVDaGFydENvbHVtbiwKICAgICAgRmlsZUJveCwKICAgICAgRmlsZUJyYWNlcywKICAgICAgRmlsZUJyYWNlc0Nvcm5lciwKICAgICAgRmlsZUNoYXJ0Q29sdW1uLAogICAgICBGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nLAogICAgICBGaWxlQ2hhcnRMaW5lLAogICAgICBGaWxlQ2hhcnRQaWUsCiAgICAgIEZpbGVDaGVjaywKICAgICAgRmlsZUNoZWNrMjogRmlsZUNoZWNrQ29ybmVyLAogICAgICBGaWxlQ2hlY2tDb3JuZXIsCiAgICAgIEZpbGVDbG9jaywKICAgICAgRmlsZUNvZGUsCiAgICAgIEZpbGVDb2RlMjogRmlsZUNvZGVDb3JuZXIsCiAgICAgIEZpbGVDb2RlQ29ybmVyLAogICAgICBGaWxlQ29nLAogICAgICBGaWxlQ29nMjogRmlsZUNvZywKICAgICAgRmlsZURpZmYsCiAgICAgIEZpbGVEaWdpdCwKICAgICAgRmlsZURvd24sCiAgICAgIEZpbGVFZGl0OiBGaWxlUGVuLAogICAgICBGaWxlRXhjbGFtYXRpb25Qb2ludCwKICAgICAgRmlsZUhlYWRwaG9uZSwKICAgICAgRmlsZUhlYXJ0LAogICAgICBGaWxlSW1hZ2UsCiAgICAgIEZpbGVJbnB1dCwKICAgICAgRmlsZUpzb246IEZpbGVCcmFjZXMsCiAgICAgIEZpbGVKc29uMjogRmlsZUJyYWNlc0Nvcm5lciwKICAgICAgRmlsZUtleSwKICAgICAgRmlsZUtleTI6IEZpbGVLZXksCiAgICAgIEZpbGVMaW5lQ2hhcnQ6IEZpbGVDaGFydExpbmUsCiAgICAgIEZpbGVMb2NrLAogICAgICBGaWxlTG9jazI6IEZpbGVMb2NrLAogICAgICBGaWxlTWludXMsCiAgICAgIEZpbGVNaW51czI6IEZpbGVNaW51c0Nvcm5lciwKICAgICAgRmlsZU1pbnVzQ29ybmVyLAogICAgICBGaWxlTXVzaWMsCiAgICAgIEZpbGVPdXRwdXQsCiAgICAgIEZpbGVQZW4sCiAgICAgIEZpbGVQZW5MaW5lLAogICAgICBGaWxlUGllQ2hhcnQ6IEZpbGVDaGFydFBpZSwKICAgICAgRmlsZVBsYXksCiAgICAgIEZpbGVQbHVzLAogICAgICBGaWxlUGx1czI6IEZpbGVQbHVzQ29ybmVyLAogICAgICBGaWxlUGx1c0Nvcm5lciwKICAgICAgRmlsZVF1ZXN0aW9uOiBGaWxlUXVlc3Rpb25NYXJrLAogICAgICBGaWxlUXVlc3Rpb25NYXJrLAogICAgICBGaWxlU2NhbiwKICAgICAgRmlsZVNlYXJjaCwKICAgICAgRmlsZVNlYXJjaDI6IEZpbGVTZWFyY2hDb3JuZXIsCiAgICAgIEZpbGVTZWFyY2hDb3JuZXIsCiAgICAgIEZpbGVTaWduYWwsCiAgICAgIEZpbGVTaWduYXR1cmU6IEZpbGVQZW5MaW5lLAogICAgICBGaWxlU2xpZGVycywKICAgICAgRmlsZVNwcmVhZHNoZWV0LAogICAgICBGaWxlU3RhY2ssCiAgICAgIEZpbGVTeW1saW5rLAogICAgICBGaWxlVGVybWluYWwsCiAgICAgIEZpbGVUZXh0LAogICAgICBGaWxlVHlwZSwKICAgICAgRmlsZVR5cGUyOiBGaWxlVHlwZUNvcm5lciwKICAgICAgRmlsZVR5cGVDb3JuZXIsCiAgICAgIEZpbGVVcCwKICAgICAgRmlsZVVzZXIsCiAgICAgIEZpbGVWaWRlbzogRmlsZVBsYXksCiAgICAgIEZpbGVWaWRlbzI6IEZpbGVWaWRlb0NhbWVyYSwKICAgICAgRmlsZVZpZGVvQ2FtZXJhLAogICAgICBGaWxlVm9sdW1lLAogICAgICBGaWxlVm9sdW1lMjogRmlsZVNpZ25hbCwKICAgICAgRmlsZVdhcm5pbmc6IEZpbGVFeGNsYW1hdGlvblBvaW50LAogICAgICBGaWxlWCwKICAgICAgRmlsZVgyOiBGaWxlWENvcm5lciwKICAgICAgRmlsZVhDb3JuZXIsCiAgICAgIEZpbGVzLAogICAgICBGaWxtLAogICAgICBGaWx0ZXI6IEZ1bm5lbCwKICAgICAgRmlsdGVyWDogRnVubmVsWCwKICAgICAgRmluZ2VycHJpbnQ6IEZpbmdlcnByaW50UGF0dGVybiwKICAgICAgRmluZ2VycHJpbnRQYXR0ZXJuLAogICAgICBGaXJlRXh0aW5ndWlzaGVyLAogICAgICBGaXNoLAogICAgICBGaXNoT2ZmLAogICAgICBGaXNoU3ltYm9sLAogICAgICBGaXNoaW5nSG9vaywKICAgICAgRmxhZywKICAgICAgRmxhZ09mZiwKICAgICAgRmxhZ1RyaWFuZ2xlTGVmdCwKICAgICAgRmxhZ1RyaWFuZ2xlUmlnaHQsCiAgICAgIEZsYW1lLAogICAgICBGbGFtZUtpbmRsaW5nLAogICAgICBGbGFzaGxpZ2h0LAogICAgICBGbGFzaGxpZ2h0T2ZmLAogICAgICBGbGFza0NvbmljYWwsCiAgICAgIEZsYXNrQ29uaWNhbE9mZiwKICAgICAgRmxhc2tSb3VuZCwKICAgICAgRmxpcEhvcml6b250YWwsCiAgICAgIEZsaXBIb3Jpem9udGFsMiwKICAgICAgRmxpcFZlcnRpY2FsLAogICAgICBGbGlwVmVydGljYWwyLAogICAgICBGbG93ZXIsCiAgICAgIEZsb3dlcjIsCiAgICAgIEZvY3VzLAogICAgICBGb2xkSG9yaXpvbnRhbCwKICAgICAgRm9sZFZlcnRpY2FsLAogICAgICBGb2xkZXIsCiAgICAgIEZvbGRlckFyY2hpdmUsCiAgICAgIEZvbGRlckNoZWNrLAogICAgICBGb2xkZXJDbG9jaywKICAgICAgRm9sZGVyQ2xvc2VkLAogICAgICBGb2xkZXJDb2RlLAogICAgICBGb2xkZXJDb2csCiAgICAgIEZvbGRlckNvZzI6IEZvbGRlckNvZywKICAgICAgRm9sZGVyRG90LAogICAgICBGb2xkZXJEb3duLAogICAgICBGb2xkZXJFZGl0OiBGb2xkZXJQZW4sCiAgICAgIEZvbGRlckdpdCwKICAgICAgRm9sZGVyR2l0MiwKICAgICAgRm9sZGVySGVhcnQsCiAgICAgIEZvbGRlcklucHV0LAogICAgICBGb2xkZXJLYW5iYW4sCiAgICAgIEZvbGRlcktleSwKICAgICAgRm9sZGVyTG9jaywKICAgICAgRm9sZGVyTWludXMsCiAgICAgIEZvbGRlck9wZW4sCiAgICAgIEZvbGRlck9wZW5Eb3QsCiAgICAgIEZvbGRlck91dHB1dCwKICAgICAgRm9sZGVyUGVuLAogICAgICBGb2xkZXJQbHVzLAogICAgICBGb2xkZXJSb290LAogICAgICBGb2xkZXJTZWFyY2gsCiAgICAgIEZvbGRlclNlYXJjaDIsCiAgICAgIEZvbGRlclN5bWxpbmssCiAgICAgIEZvbGRlclN5bmMsCiAgICAgIEZvbGRlclRyZWUsCiAgICAgIEZvbGRlclVwLAogICAgICBGb2xkZXJYLAogICAgICBGb2xkZXJzLAogICAgICBGb290cHJpbnRzLAogICAgICBGb3JrS25pZmU6IFV0ZW5zaWxzLAogICAgICBGb3JrS25pZmVDcm9zc2VkOiBVdGVuc2lsc0Nyb3NzZWQsCiAgICAgIEZvcmtsaWZ0LAogICAgICBGb3JtLAogICAgICBGb3JtSW5wdXQ6IFJlY3RhbmdsZUVsbGlwc2lzLAogICAgICBGb3J3YXJkLAogICAgICBGcmFtZSwKICAgICAgRnJhbWVyLAogICAgICBGcm93biwKICAgICAgRnVlbCwKICAgICAgRnVsbHNjcmVlbiwKICAgICAgRnVuY3Rpb25TcXVhcmU6IFNxdWFyZUZ1bmN0aW9uLAogICAgICBGdW5uZWwsCiAgICAgIEZ1bm5lbFBsdXMsCiAgICAgIEZ1bm5lbFgsCiAgICAgIEdhbGxlcnlIb3Jpem9udGFsLAogICAgICBHYWxsZXJ5SG9yaXpvbnRhbEVuZCwKICAgICAgR2FsbGVyeVRodW1ibmFpbHMsCiAgICAgIEdhbGxlcnlWZXJ0aWNhbCwKICAgICAgR2FsbGVyeVZlcnRpY2FsRW5kLAogICAgICBHYW1lcGFkLAogICAgICBHYW1lcGFkMiwKICAgICAgR2FtZXBhZERpcmVjdGlvbmFsLAogICAgICBHYW50dENoYXJ0OiBDaGFydE5vQXhlc0dhbnR0LAogICAgICBHYW50dENoYXJ0U3F1YXJlOiBTcXVhcmVDaGFydEdhbnR0LAogICAgICBHYXVnZSwKICAgICAgR2F1Z2VDaXJjbGU6IENpcmNsZUdhdWdlLAogICAgICBHYXZlbCwKICAgICAgR2VtLAogICAgICBHZW9yZ2lhbkxhcmksCiAgICAgIEdob3N0LAogICAgICBHaWZ0LAogICAgICBHaXRCcmFuY2gsCiAgICAgIEdpdEJyYW5jaE1pbnVzLAogICAgICBHaXRCcmFuY2hQbHVzLAogICAgICBHaXRDb21taXQ6IEdpdENvbW1pdEhvcml6b250YWwsCiAgICAgIEdpdENvbW1pdEhvcml6b250YWwsCiAgICAgIEdpdENvbW1pdFZlcnRpY2FsLAogICAgICBHaXRDb21wYXJlLAogICAgICBHaXRDb21wYXJlQXJyb3dzLAogICAgICBHaXRGb3JrLAogICAgICBHaXRHcmFwaCwKICAgICAgR2l0TWVyZ2UsCiAgICAgIEdpdFB1bGxSZXF1ZXN0LAogICAgICBHaXRQdWxsUmVxdWVzdEFycm93LAogICAgICBHaXRQdWxsUmVxdWVzdENsb3NlZCwKICAgICAgR2l0UHVsbFJlcXVlc3RDcmVhdGUsCiAgICAgIEdpdFB1bGxSZXF1ZXN0Q3JlYXRlQXJyb3csCiAgICAgIEdpdFB1bGxSZXF1ZXN0RHJhZnQsCiAgICAgIEdpdGh1YiwKICAgICAgR2l0bGFiLAogICAgICBHbGFzc1dhdGVyLAogICAgICBHbGFzc2VzLAogICAgICBHbG9iZSwKICAgICAgR2xvYmUyOiBFYXJ0aCwKICAgICAgR2xvYmVMb2NrLAogICAgICBHbG9iZVgsCiAgICAgIEdvYWwsCiAgICAgIEdwdSwKICAgICAgR3JhYjogSGFuZEdyYWIsCiAgICAgIEdyYWR1YXRpb25DYXAsCiAgICAgIEdyYXBlLAogICAgICBHcmlkOiBHcmlkM3gzLAogICAgICBHcmlkMlgyOiBHcmlkMngyLAogICAgICBHcmlkMlgyQ2hlY2s6IEdyaWQyeDJDaGVjaywKICAgICAgR3JpZDJYMlBsdXM6IEdyaWQyeDJQbHVzLAogICAgICBHcmlkMlgyWDogR3JpZDJ4MlgsCiAgICAgIEdyaWQyeDIsCiAgICAgIEdyaWQyeDJDaGVjaywKICAgICAgR3JpZDJ4MlBsdXMsCiAgICAgIEdyaWQyeDJYLAogICAgICBHcmlkM1gzOiBHcmlkM3gzLAogICAgICBHcmlkM3gyLAogICAgICBHcmlkM3gzLAogICAgICBHcmlwLAogICAgICBHcmlwSG9yaXpvbnRhbCwKICAgICAgR3JpcFZlcnRpY2FsLAogICAgICBHcm91cCwKICAgICAgR3VpdGFyLAogICAgICBIYW0sCiAgICAgIEhhbWJ1cmdlciwKICAgICAgSGFtbWVyLAogICAgICBIYW5kLAogICAgICBIYW5kQ29pbnMsCiAgICAgIEhhbmRGaXN0LAogICAgICBIYW5kR3JhYiwKICAgICAgSGFuZEhlYXJ0LAogICAgICBIYW5kSGVscGluZywKICAgICAgSGFuZE1ldGFsLAogICAgICBIYW5kUGxhdHRlciwKICAgICAgSGFuZGJhZywKICAgICAgSGFuZHNoYWtlLAogICAgICBIYXJkRHJpdmUsCiAgICAgIEhhcmREcml2ZURvd25sb2FkLAogICAgICBIYXJkRHJpdmVVcGxvYWQsCiAgICAgIEhhcmRIYXQsCiAgICAgIEhhc2gsCiAgICAgIEhhdEdsYXNzZXMsCiAgICAgIEhhemUsCiAgICAgIEhkLAogICAgICBIZG1pUG9ydCwKICAgICAgSGVhZGluZywKICAgICAgSGVhZGluZzEsCiAgICAgIEhlYWRpbmcyLAogICAgICBIZWFkaW5nMywKICAgICAgSGVhZGluZzQsCiAgICAgIEhlYWRpbmc1LAogICAgICBIZWFkaW5nNiwKICAgICAgSGVhZHBob25lT2ZmLAogICAgICBIZWFkcGhvbmVzLAogICAgICBIZWFkc2V0LAogICAgICBIZWFydCwKICAgICAgSGVhcnRDcmFjaywKICAgICAgSGVhcnRIYW5kc2hha2UsCiAgICAgIEhlYXJ0TWludXMsCiAgICAgIEhlYXJ0T2ZmLAogICAgICBIZWFydFBsdXMsCiAgICAgIEhlYXJ0UHVsc2UsCiAgICAgIEhlYXRlciwKICAgICAgSGVsaWNvcHRlciwKICAgICAgSGVscENpcmNsZTogQ2lyY2xlUXVlc3Rpb25NYXJrLAogICAgICBIZWxwaW5nSGFuZDogSGFuZEhlbHBpbmcsCiAgICAgIEhleGFnb24sCiAgICAgIEhpZ2hsaWdodGVyLAogICAgICBIaXN0b3J5LAogICAgICBIb21lOiBIb3VzZSwKICAgICAgSG9wLAogICAgICBIb3BPZmYsCiAgICAgIEhvc3BpdGFsLAogICAgICBIb3RlbCwKICAgICAgSG91cmdsYXNzLAogICAgICBIb3VzZSwKICAgICAgSG91c2VIZWFydCwKICAgICAgSG91c2VQbHVnLAogICAgICBIb3VzZVBsdXMsCiAgICAgIEhvdXNlV2lmaSwKICAgICAgSWNlQ3JlYW06IEljZUNyZWFtQ29uZSwKICAgICAgSWNlQ3JlYW0yOiBJY2VDcmVhbUJvd2wsCiAgICAgIEljZUNyZWFtQm93bCwKICAgICAgSWNlQ3JlYW1Db25lLAogICAgICBJZENhcmQsCiAgICAgIElkQ2FyZExhbnlhcmQsCiAgICAgIEltYWdlOiBJbWFnZTIsCiAgICAgIEltYWdlRG93biwKICAgICAgSW1hZ2VNaW51cywKICAgICAgSW1hZ2VPZmYsCiAgICAgIEltYWdlUGxheSwKICAgICAgSW1hZ2VQbHVzLAogICAgICBJbWFnZVVwLAogICAgICBJbWFnZVVwc2NhbGUsCiAgICAgIEltYWdlcywKICAgICAgSW1wb3J0LAogICAgICBJbmJveCwKICAgICAgSW5kZW50OiBMaXN0SW5kZW50SW5jcmVhc2UsCiAgICAgIEluZGVudERlY3JlYXNlOiBMaXN0SW5kZW50RGVjcmVhc2UsCiAgICAgIEluZGVudEluY3JlYXNlOiBMaXN0SW5kZW50SW5jcmVhc2UsCiAgICAgIEluZGlhblJ1cGVlLAogICAgICBJbmZpbml0eTogSW5maW5pdHkyLAogICAgICBJbmZvOiBJbmZvMiwKICAgICAgSW5zcGVjdDogU3F1YXJlTW91c2VQb2ludGVyLAogICAgICBJbnNwZWN0aW9uUGFuZWwsCiAgICAgIEluc3RhZ3JhbSwKICAgICAgSXRhbGljLAogICAgICBJdGVyYXRpb25DY3csCiAgICAgIEl0ZXJhdGlvbkN3LAogICAgICBKYXBhbmVzZVllbiwKICAgICAgSm95c3RpY2ssCiAgICAgIEthbmJhbiwKICAgICAgS2FuYmFuU3F1YXJlOiBTcXVhcmVLYW5iYW4sCiAgICAgIEthbmJhblNxdWFyZURhc2hlZDogU3F1YXJlRGFzaGVkS2FuYmFuLAogICAgICBLYXlhaywKICAgICAgS2V5OiBLZXkyLAogICAgICBLZXlSb3VuZCwKICAgICAgS2V5U3F1YXJlLAogICAgICBLZXlib2FyZDogS2V5Ym9hcmQyLAogICAgICBLZXlib2FyZE11c2ljLAogICAgICBLZXlib2FyZE9mZiwKICAgICAgTGFtcCwKICAgICAgTGFtcENlaWxpbmcsCiAgICAgIExhbXBEZXNrLAogICAgICBMYW1wRmxvb3IsCiAgICAgIExhbXBXYWxsRG93biwKICAgICAgTGFtcFdhbGxVcCwKICAgICAgTGFuZFBsb3QsCiAgICAgIExhbmRtYXJrLAogICAgICBMYW5ndWFnZXMsCiAgICAgIExhcHRvcCwKICAgICAgTGFwdG9wMjogTGFwdG9wTWluaW1hbCwKICAgICAgTGFwdG9wTWluaW1hbCwKICAgICAgTGFwdG9wTWluaW1hbENoZWNrLAogICAgICBMYXNzbywKICAgICAgTGFzc29TZWxlY3QsCiAgICAgIExhdWdoLAogICAgICBMYXllcnM6IExheWVyczMsCiAgICAgIExheWVyczIsCiAgICAgIExheWVyczMsCiAgICAgIExheWVyc1BsdXMsCiAgICAgIExheW91dDogUGFuZWxzVG9wTGVmdCwKICAgICAgTGF5b3V0RGFzaGJvYXJkLAogICAgICBMYXlvdXRHcmlkLAogICAgICBMYXlvdXRMaXN0LAogICAgICBMYXlvdXRQYW5lbExlZnQsCiAgICAgIExheW91dFBhbmVsVG9wLAogICAgICBMYXlvdXRUZW1wbGF0ZSwKICAgICAgTGVhZiwKICAgICAgTGVhZnlHcmVlbiwKICAgICAgTGVjdGVybiwKICAgICAgTGV0dGVyVGV4dDogVGV4dEluaXRpYWwsCiAgICAgIExpYnJhcnk6IExpYnJhcnkyLAogICAgICBMaWJyYXJ5QmlnLAogICAgICBMaWJyYXJ5U3F1YXJlOiBTcXVhcmVMaWJyYXJ5LAogICAgICBMaWZlQnVveSwKICAgICAgTGlnYXR1cmUsCiAgICAgIExpZ2h0YnVsYiwKICAgICAgTGlnaHRidWxiT2ZmLAogICAgICBMaW5lQ2hhcnQ6IENoYXJ0TGluZSwKICAgICAgTGluZVNxdWlnZ2xlLAogICAgICBMaW5rLAogICAgICBMaW5rMiwKICAgICAgTGluazJPZmYsCiAgICAgIExpbmtlZGluLAogICAgICBMaXN0LAogICAgICBMaXN0Q2hlY2ssCiAgICAgIExpc3RDaGVja3MsCiAgICAgIExpc3RDaGV2cm9uc0Rvd25VcCwKICAgICAgTGlzdENoZXZyb25zVXBEb3duLAogICAgICBMaXN0Q29sbGFwc2UsCiAgICAgIExpc3RFbmQsCiAgICAgIExpc3RGaWx0ZXIsCiAgICAgIExpc3RGaWx0ZXJQbHVzLAogICAgICBMaXN0SW5kZW50RGVjcmVhc2UsCiAgICAgIExpc3RJbmRlbnRJbmNyZWFzZSwKICAgICAgTGlzdE1pbnVzLAogICAgICBMaXN0TXVzaWMsCiAgICAgIExpc3RPcmRlcmVkLAogICAgICBMaXN0UGx1cywKICAgICAgTGlzdFJlc3RhcnQsCiAgICAgIExpc3RTdGFydCwKICAgICAgTGlzdFRvZG8sCiAgICAgIExpc3RUcmVlLAogICAgICBMaXN0VmlkZW8sCiAgICAgIExpc3RYLAogICAgICBMb2FkZXIsCiAgICAgIExvYWRlcjI6IExvYWRlckNpcmNsZSwKICAgICAgTG9hZGVyQ2lyY2xlLAogICAgICBMb2FkZXJQaW53aGVlbCwKICAgICAgTG9jYXRlLAogICAgICBMb2NhdGVGaXhlZCwKICAgICAgTG9jYXRlT2ZmLAogICAgICBMb2NhdGlvbkVkaXQ6IE1hcFBpblBlbiwKICAgICAgTG9jaywKICAgICAgTG9ja0tleWhvbGUsCiAgICAgIExvY2tLZXlob2xlT3BlbiwKICAgICAgTG9ja09wZW4sCiAgICAgIExvZ0luLAogICAgICBMb2dPdXQsCiAgICAgIExvZ3MsCiAgICAgIExvbGxpcG9wLAogICAgICBMdWdnYWdlLAogICAgICBNU3F1YXJlOiBTcXVhcmVNLAogICAgICBNYWduZXQsCiAgICAgIE1haWwsCiAgICAgIE1haWxDaGVjaywKICAgICAgTWFpbE1pbnVzLAogICAgICBNYWlsT3BlbiwKICAgICAgTWFpbFBsdXMsCiAgICAgIE1haWxRdWVzdGlvbjogTWFpbFF1ZXN0aW9uTWFyaywKICAgICAgTWFpbFF1ZXN0aW9uTWFyaywKICAgICAgTWFpbFNlYXJjaCwKICAgICAgTWFpbFdhcm5pbmcsCiAgICAgIE1haWxYLAogICAgICBNYWlsYm94LAogICAgICBNYWlscywKICAgICAgTWFwOiBNYXAyLAogICAgICBNYXBNaW51cywKICAgICAgTWFwUGluLAogICAgICBNYXBQaW5DaGVjaywKICAgICAgTWFwUGluQ2hlY2tJbnNpZGUsCiAgICAgIE1hcFBpbkhvdXNlLAogICAgICBNYXBQaW5NaW51cywKICAgICAgTWFwUGluTWludXNJbnNpZGUsCiAgICAgIE1hcFBpbk9mZiwKICAgICAgTWFwUGluUGVuLAogICAgICBNYXBQaW5QbHVzLAogICAgICBNYXBQaW5QbHVzSW5zaWRlLAogICAgICBNYXBQaW5YLAogICAgICBNYXBQaW5YSW5zaWRlLAogICAgICBNYXBQaW5uZWQsCiAgICAgIE1hcFBsdXMsCiAgICAgIE1hcnMsCiAgICAgIE1hcnNTdHJva2UsCiAgICAgIE1hcnRpbmksCiAgICAgIE1heGltaXplLAogICAgICBNYXhpbWl6ZTIsCiAgICAgIE1lZGFsLAogICAgICBNZWdhcGhvbmUsCiAgICAgIE1lZ2FwaG9uZU9mZiwKICAgICAgTWVoLAogICAgICBNZW1vcnlTdGljaywKICAgICAgTWVudSwKICAgICAgTWVudVNxdWFyZTogU3F1YXJlTWVudSwKICAgICAgTWVyZ2UsCiAgICAgIE1lc3NhZ2VDaXJjbGUsCiAgICAgIE1lc3NhZ2VDaXJjbGVDb2RlLAogICAgICBNZXNzYWdlQ2lyY2xlRGFzaGVkLAogICAgICBNZXNzYWdlQ2lyY2xlSGVhcnQsCiAgICAgIE1lc3NhZ2VDaXJjbGVNb3JlLAogICAgICBNZXNzYWdlQ2lyY2xlT2ZmLAogICAgICBNZXNzYWdlQ2lyY2xlUGx1cywKICAgICAgTWVzc2FnZUNpcmNsZVF1ZXN0aW9uOiBNZXNzYWdlQ2lyY2xlUXVlc3Rpb25NYXJrLAogICAgICBNZXNzYWdlQ2lyY2xlUXVlc3Rpb25NYXJrLAogICAgICBNZXNzYWdlQ2lyY2xlUmVwbHksCiAgICAgIE1lc3NhZ2VDaXJjbGVXYXJuaW5nLAogICAgICBNZXNzYWdlQ2lyY2xlWCwKICAgICAgTWVzc2FnZVNxdWFyZSwKICAgICAgTWVzc2FnZVNxdWFyZUNvZGUsCiAgICAgIE1lc3NhZ2VTcXVhcmVEYXNoZWQsCiAgICAgIE1lc3NhZ2VTcXVhcmVEaWZmLAogICAgICBNZXNzYWdlU3F1YXJlRG90LAogICAgICBNZXNzYWdlU3F1YXJlSGVhcnQsCiAgICAgIE1lc3NhZ2VTcXVhcmVMb2NrLAogICAgICBNZXNzYWdlU3F1YXJlTW9yZSwKICAgICAgTWVzc2FnZVNxdWFyZU9mZiwKICAgICAgTWVzc2FnZVNxdWFyZVBsdXMsCiAgICAgIE1lc3NhZ2VTcXVhcmVRdW90ZSwKICAgICAgTWVzc2FnZVNxdWFyZVJlcGx5LAogICAgICBNZXNzYWdlU3F1YXJlU2hhcmUsCiAgICAgIE1lc3NhZ2VTcXVhcmVUZXh0LAogICAgICBNZXNzYWdlU3F1YXJlV2FybmluZywKICAgICAgTWVzc2FnZVNxdWFyZVgsCiAgICAgIE1lc3NhZ2VzU3F1YXJlLAogICAgICBNaWMsCiAgICAgIE1pYzI6IE1pY1ZvY2FsLAogICAgICBNaWNPZmYsCiAgICAgIE1pY1ZvY2FsLAogICAgICBNaWNyb2NoaXAsCiAgICAgIE1pY3Jvc2NvcGUsCiAgICAgIE1pY3Jvd2F2ZSwKICAgICAgTWlsZXN0b25lLAogICAgICBNaWxrLAogICAgICBNaWxrT2ZmLAogICAgICBNaW5pbWl6ZSwKICAgICAgTWluaW1pemUyLAogICAgICBNaW51cywKICAgICAgTWludXNDaXJjbGU6IENpcmNsZU1pbnVzLAogICAgICBNaW51c1NxdWFyZTogU3F1YXJlTWludXMsCiAgICAgIE1vbml0b3IsCiAgICAgIE1vbml0b3JDaGVjaywKICAgICAgTW9uaXRvckNsb3VkLAogICAgICBNb25pdG9yQ29nLAogICAgICBNb25pdG9yRG90LAogICAgICBNb25pdG9yRG93biwKICAgICAgTW9uaXRvck9mZiwKICAgICAgTW9uaXRvclBhdXNlLAogICAgICBNb25pdG9yUGxheSwKICAgICAgTW9uaXRvclNtYXJ0cGhvbmUsCiAgICAgIE1vbml0b3JTcGVha2VyLAogICAgICBNb25pdG9yU3RvcCwKICAgICAgTW9uaXRvclVwLAogICAgICBNb25pdG9yWCwKICAgICAgTW9vbiwKICAgICAgTW9vblN0YXIsCiAgICAgIE1vcmVIb3Jpem9udGFsOiBFbGxpcHNpcywKICAgICAgTW9yZVZlcnRpY2FsOiBFbGxpcHNpc1ZlcnRpY2FsLAogICAgICBNb3RvcmJpa2UsCiAgICAgIE1vdW50YWluLAogICAgICBNb3VudGFpblNub3csCiAgICAgIE1vdXNlLAogICAgICBNb3VzZU9mZiwKICAgICAgTW91c2VQb2ludGVyLAogICAgICBNb3VzZVBvaW50ZXIyLAogICAgICBNb3VzZVBvaW50ZXIyT2ZmLAogICAgICBNb3VzZVBvaW50ZXJCYW4sCiAgICAgIE1vdXNlUG9pbnRlckNsaWNrLAogICAgICBNb3VzZVBvaW50ZXJTcXVhcmVEYXNoZWQ6IFNxdWFyZURhc2hlZE1vdXNlUG9pbnRlciwKICAgICAgTW92ZSwKICAgICAgTW92ZTNEOiBNb3ZlM2QsCiAgICAgIE1vdmUzZCwKICAgICAgTW92ZURpYWdvbmFsLAogICAgICBNb3ZlRGlhZ29uYWwyLAogICAgICBNb3ZlRG93biwKICAgICAgTW92ZURvd25MZWZ0LAogICAgICBNb3ZlRG93blJpZ2h0LAogICAgICBNb3ZlSG9yaXpvbnRhbCwKICAgICAgTW92ZUxlZnQsCiAgICAgIE1vdmVSaWdodCwKICAgICAgTW92ZVVwLAogICAgICBNb3ZlVXBMZWZ0LAogICAgICBNb3ZlVXBSaWdodCwKICAgICAgTW92ZVZlcnRpY2FsLAogICAgICBNdXNpYywKICAgICAgTXVzaWMyLAogICAgICBNdXNpYzMsCiAgICAgIE11c2ljNCwKICAgICAgTmF2aWdhdGlvbiwKICAgICAgTmF2aWdhdGlvbjIsCiAgICAgIE5hdmlnYXRpb24yT2ZmLAogICAgICBOYXZpZ2F0aW9uT2ZmLAogICAgICBOZXR3b3JrLAogICAgICBOZXdzcGFwZXIsCiAgICAgIE5mYywKICAgICAgTm9uQmluYXJ5LAogICAgICBOb3RlYm9vaywKICAgICAgTm90ZWJvb2tQZW4sCiAgICAgIE5vdGVib29rVGFicywKICAgICAgTm90ZWJvb2tUZXh0LAogICAgICBOb3RlcGFkVGV4dCwKICAgICAgTm90ZXBhZFRleHREYXNoZWQsCiAgICAgIE51dCwKICAgICAgTnV0T2ZmLAogICAgICBPY3RhZ29uLAogICAgICBPY3RhZ29uQWxlcnQsCiAgICAgIE9jdGFnb25NaW51cywKICAgICAgT2N0YWdvblBhdXNlLAogICAgICBPY3RhZ29uWCwKICAgICAgT21lZ2EsCiAgICAgIE9wdGlvbiwKICAgICAgT3JiaXQsCiAgICAgIE9yaWdhbWksCiAgICAgIE91dGRlbnQ6IExpc3RJbmRlbnREZWNyZWFzZSwKICAgICAgUGFja2FnZSwKICAgICAgUGFja2FnZTIsCiAgICAgIFBhY2thZ2VDaGVjaywKICAgICAgUGFja2FnZU1pbnVzLAogICAgICBQYWNrYWdlT3BlbiwKICAgICAgUGFja2FnZVBsdXMsCiAgICAgIFBhY2thZ2VTZWFyY2gsCiAgICAgIFBhY2thZ2VYLAogICAgICBQYWludEJ1Y2tldCwKICAgICAgUGFpbnRSb2xsZXIsCiAgICAgIFBhaW50YnJ1c2gsCiAgICAgIFBhaW50YnJ1c2gyOiBQYWludGJydXNoVmVydGljYWwsCiAgICAgIFBhaW50YnJ1c2hWZXJ0aWNhbCwKICAgICAgUGFsZXR0ZSwKICAgICAgUGFsbXRyZWU6IFRyZWVQYWxtLAogICAgICBQYW5kYSwKICAgICAgUGFuZWxCb3R0b20sCiAgICAgIFBhbmVsQm90dG9tQ2xvc2UsCiAgICAgIFBhbmVsQm90dG9tRGFzaGVkLAogICAgICBQYW5lbEJvdHRvbUluYWN0aXZlOiBQYW5lbEJvdHRvbURhc2hlZCwKICAgICAgUGFuZWxCb3R0b21PcGVuLAogICAgICBQYW5lbExlZnQsCiAgICAgIFBhbmVsTGVmdENsb3NlLAogICAgICBQYW5lbExlZnREYXNoZWQsCiAgICAgIFBhbmVsTGVmdEluYWN0aXZlOiBQYW5lbExlZnREYXNoZWQsCiAgICAgIFBhbmVsTGVmdE9wZW4sCiAgICAgIFBhbmVsTGVmdFJpZ2h0RGFzaGVkLAogICAgICBQYW5lbFJpZ2h0LAogICAgICBQYW5lbFJpZ2h0Q2xvc2UsCiAgICAgIFBhbmVsUmlnaHREYXNoZWQsCiAgICAgIFBhbmVsUmlnaHRJbmFjdGl2ZTogUGFuZWxSaWdodERhc2hlZCwKICAgICAgUGFuZWxSaWdodE9wZW4sCiAgICAgIFBhbmVsVG9wLAogICAgICBQYW5lbFRvcEJvdHRvbURhc2hlZCwKICAgICAgUGFuZWxUb3BDbG9zZSwKICAgICAgUGFuZWxUb3BEYXNoZWQsCiAgICAgIFBhbmVsVG9wSW5hY3RpdmU6IFBhbmVsVG9wRGFzaGVkLAogICAgICBQYW5lbFRvcE9wZW4sCiAgICAgIFBhbmVsc0xlZnRCb3R0b20sCiAgICAgIFBhbmVsc0xlZnRSaWdodDogQ29sdW1uczMsCiAgICAgIFBhbmVsc1JpZ2h0Qm90dG9tLAogICAgICBQYW5lbHNUb3BCb3R0b206IFJvd3MzLAogICAgICBQYW5lbHNUb3BMZWZ0LAogICAgICBQYXBlcmNsaXAsCiAgICAgIFBhcmVudGhlc2VzLAogICAgICBQYXJraW5nQ2lyY2xlOiBDaXJjbGVQYXJraW5nLAogICAgICBQYXJraW5nQ2lyY2xlT2ZmOiBDaXJjbGVQYXJraW5nT2ZmLAogICAgICBQYXJraW5nTWV0ZXIsCiAgICAgIFBhcmtpbmdTcXVhcmU6IFNxdWFyZVBhcmtpbmcsCiAgICAgIFBhcmtpbmdTcXVhcmVPZmY6IFNxdWFyZVBhcmtpbmdPZmYsCiAgICAgIFBhcnR5UG9wcGVyLAogICAgICBQYXVzZSwKICAgICAgUGF1c2VDaXJjbGU6IENpcmNsZVBhdXNlLAogICAgICBQYXVzZU9jdGFnb246IE9jdGFnb25QYXVzZSwKICAgICAgUGF3UHJpbnQsCiAgICAgIFBjQ2FzZSwKICAgICAgUGVuLAogICAgICBQZW5Cb3g6IFNxdWFyZVBlbiwKICAgICAgUGVuTGluZSwKICAgICAgUGVuT2ZmLAogICAgICBQZW5TcXVhcmU6IFNxdWFyZVBlbiwKICAgICAgUGVuVG9vbCwKICAgICAgUGVuY2lsLAogICAgICBQZW5jaWxMaW5lLAogICAgICBQZW5jaWxPZmYsCiAgICAgIFBlbmNpbFJ1bGVyLAogICAgICBQZW50YWdvbiwKICAgICAgUGVyY2VudCwKICAgICAgUGVyY2VudENpcmNsZTogQ2lyY2xlUGVyY2VudCwKICAgICAgUGVyY2VudERpYW1vbmQ6IERpYW1vbmRQZXJjZW50LAogICAgICBQZXJjZW50U3F1YXJlOiBTcXVhcmVQZXJjZW50LAogICAgICBQZXJzb25TdGFuZGluZywKICAgICAgUGhpbGlwcGluZVBlc28sCiAgICAgIFBob25lLAogICAgICBQaG9uZUNhbGwsCiAgICAgIFBob25lRm9yd2FyZGVkLAogICAgICBQaG9uZUluY29taW5nLAogICAgICBQaG9uZU1pc3NlZCwKICAgICAgUGhvbmVPZmYsCiAgICAgIFBob25lT3V0Z29pbmcsCiAgICAgIFBpLAogICAgICBQaVNxdWFyZTogU3F1YXJlUGksCiAgICAgIFBpYW5vLAogICAgICBQaWNrYXhlLAogICAgICBQaWN0dXJlSW5QaWN0dXJlLAogICAgICBQaWN0dXJlSW5QaWN0dXJlMiwKICAgICAgUGllQ2hhcnQ6IENoYXJ0UGllLAogICAgICBQaWdneUJhbmssCiAgICAgIFBpbGNyb3csCiAgICAgIFBpbGNyb3dMZWZ0LAogICAgICBQaWxjcm93UmlnaHQsCiAgICAgIFBpbGNyb3dTcXVhcmU6IFNxdWFyZVBpbGNyb3csCiAgICAgIFBpbGwsCiAgICAgIFBpbGxCb3R0bGUsCiAgICAgIFBpbiwKICAgICAgUGluT2ZmLAogICAgICBQaXBldHRlLAogICAgICBQaXp6YSwKICAgICAgUGxhbmUsCiAgICAgIFBsYW5lTGFuZGluZywKICAgICAgUGxhbmVUYWtlb2ZmLAogICAgICBQbGF5LAogICAgICBQbGF5Q2lyY2xlOiBDaXJjbGVQbGF5LAogICAgICBQbGF5U3F1YXJlOiBTcXVhcmVQbGF5LAogICAgICBQbHVnLAogICAgICBQbHVnMiwKICAgICAgUGx1Z1phcCwKICAgICAgUGx1Z1phcDI6IFBsdWdaYXAsCiAgICAgIFBsdXMsCiAgICAgIFBsdXNDaXJjbGU6IENpcmNsZVBsdXMsCiAgICAgIFBsdXNTcXVhcmU6IFNxdWFyZVBsdXMsCiAgICAgIFBvY2tldCwKICAgICAgUG9ja2V0S25pZmUsCiAgICAgIFBvZGNhc3QsCiAgICAgIFBvaW50ZXIsCiAgICAgIFBvaW50ZXJPZmYsCiAgICAgIFBvcGNvcm4sCiAgICAgIFBvcHNpY2xlLAogICAgICBQb3VuZFN0ZXJsaW5nLAogICAgICBQb3dlciwKICAgICAgUG93ZXJDaXJjbGU6IENpcmNsZVBvd2VyLAogICAgICBQb3dlck9mZiwKICAgICAgUG93ZXJTcXVhcmU6IFNxdWFyZVBvd2VyLAogICAgICBQcmVzZW50YXRpb24sCiAgICAgIFByaW50ZXIsCiAgICAgIFByaW50ZXJDaGVjaywKICAgICAgUHJpbnRlclgsCiAgICAgIFByb2plY3RvciwKICAgICAgUHJvcG9ydGlvbnMsCiAgICAgIFB1enpsZSwKICAgICAgUHlyYW1pZCwKICAgICAgUXJDb2RlLAogICAgICBRdW90ZSwKICAgICAgUmFiYml0LAogICAgICBSYWRhciwKICAgICAgUmFkaWF0aW9uLAogICAgICBSYWRpY2FsLAogICAgICBSYWRpbywKICAgICAgUmFkaW9SZWNlaXZlciwKICAgICAgUmFkaW9Ub3dlciwKICAgICAgUmFkaXVzLAogICAgICBSYWlsU3ltYm9sLAogICAgICBSYWluYm93LAogICAgICBSYXQsCiAgICAgIFJhdGlvLAogICAgICBSZWNlaXB0LAogICAgICBSZWNlaXB0Q2VudCwKICAgICAgUmVjZWlwdEV1cm8sCiAgICAgIFJlY2VpcHRJbmRpYW5SdXBlZSwKICAgICAgUmVjZWlwdEphcGFuZXNlWWVuLAogICAgICBSZWNlaXB0UG91bmRTdGVybGluZywKICAgICAgUmVjZWlwdFJ1c3NpYW5SdWJsZSwKICAgICAgUmVjZWlwdFN3aXNzRnJhbmMsCiAgICAgIFJlY2VpcHRUZXh0LAogICAgICBSZWNlaXB0VHVya2lzaExpcmEsCiAgICAgIFJlY3RhbmdsZUNpcmNsZSwKICAgICAgUmVjdGFuZ2xlRWxsaXBzaXMsCiAgICAgIFJlY3RhbmdsZUdvZ2dsZXMsCiAgICAgIFJlY3RhbmdsZUhvcml6b250YWwsCiAgICAgIFJlY3RhbmdsZVZlcnRpY2FsLAogICAgICBSZWN5Y2xlLAogICAgICBSZWRvLAogICAgICBSZWRvMiwKICAgICAgUmVkb0RvdCwKICAgICAgUmVmcmVzaENjdywKICAgICAgUmVmcmVzaENjd0RvdCwKICAgICAgUmVmcmVzaEN3LAogICAgICBSZWZyZXNoQ3dPZmYsCiAgICAgIFJlZnJpZ2VyYXRvciwKICAgICAgUmVnZXgsCiAgICAgIFJlbW92ZUZvcm1hdHRpbmcsCiAgICAgIFJlcGVhdCwKICAgICAgUmVwZWF0MSwKICAgICAgUmVwZWF0MiwKICAgICAgUmVwbGFjZSwKICAgICAgUmVwbGFjZUFsbCwKICAgICAgUmVwbHksCiAgICAgIFJlcGx5QWxsLAogICAgICBSZXdpbmQsCiAgICAgIFJpYmJvbiwKICAgICAgUm9ja2V0LAogICAgICBSb2NraW5nQ2hhaXIsCiAgICAgIFJvbGxlckNvYXN0ZXIsCiAgICAgIFJvc2UsCiAgICAgIFJvdGF0ZTNEOiBSb3RhdGUzZCwKICAgICAgUm90YXRlM2QsCiAgICAgIFJvdGF0ZUNjdywKICAgICAgUm90YXRlQ2N3S2V5LAogICAgICBSb3RhdGVDY3dTcXVhcmUsCiAgICAgIFJvdGF0ZUN3LAogICAgICBSb3RhdGVDd1NxdWFyZSwKICAgICAgUm91dGUsCiAgICAgIFJvdXRlT2ZmLAogICAgICBSb3V0ZXIsCiAgICAgIFJvd3M6IFJvd3MyLAogICAgICBSb3dzMiwKICAgICAgUm93czMsCiAgICAgIFJvd3M0LAogICAgICBSc3MsCiAgICAgIFJ1bGVyLAogICAgICBSdWxlckRpbWVuc2lvbkxpbmUsCiAgICAgIFJ1c3NpYW5SdWJsZSwKICAgICAgU2FpbGJvYXQsCiAgICAgIFNhbGFkLAogICAgICBTYW5kd2ljaCwKICAgICAgU2F0ZWxsaXRlLAogICAgICBTYXRlbGxpdGVEaXNoLAogICAgICBTYXVkaVJpeWFsLAogICAgICBTYXZlLAogICAgICBTYXZlQWxsLAogICAgICBTYXZlT2ZmLAogICAgICBTY2FsZSwKICAgICAgU2NhbGUzRDogU2NhbGUzZCwKICAgICAgU2NhbGUzZCwKICAgICAgU2NhbGluZywKICAgICAgU2NhbiwKICAgICAgU2NhbkJhcmNvZGUsCiAgICAgIFNjYW5FeWUsCiAgICAgIFNjYW5GYWNlLAogICAgICBTY2FuSGVhcnQsCiAgICAgIFNjYW5MaW5lLAogICAgICBTY2FuUXJDb2RlLAogICAgICBTY2FuU2VhcmNoLAogICAgICBTY2FuVGV4dCwKICAgICAgU2NhdHRlckNoYXJ0OiBDaGFydFNjYXR0ZXIsCiAgICAgIFNjaG9vbCwKICAgICAgU2Nob29sMjogVW5pdmVyc2l0eSwKICAgICAgU2Npc3NvcnMsCiAgICAgIFNjaXNzb3JzTGluZURhc2hlZCwKICAgICAgU2Npc3NvcnNTcXVhcmU6IFNxdWFyZVNjaXNzb3JzLAogICAgICBTY2lzc29yc1NxdWFyZURhc2hlZEJvdHRvbTogU3F1YXJlQm90dG9tRGFzaGVkU2Npc3NvcnMsCiAgICAgIFNjb290ZXIsCiAgICAgIFNjcmVlblNoYXJlLAogICAgICBTY3JlZW5TaGFyZU9mZiwKICAgICAgU2Nyb2xsLAogICAgICBTY3JvbGxUZXh0LAogICAgICBTZWFyY2gsCiAgICAgIFNlYXJjaEFsZXJ0LAogICAgICBTZWFyY2hDaGVjaywKICAgICAgU2VhcmNoQ29kZSwKICAgICAgU2VhcmNoU2xhc2gsCiAgICAgIFNlYXJjaFgsCiAgICAgIFNlY3Rpb24sCiAgICAgIFNlbmQsCiAgICAgIFNlbmRIb3Jpem9uYWw6IFNlbmRIb3Jpem9udGFsLAogICAgICBTZW5kSG9yaXpvbnRhbCwKICAgICAgU2VuZFRvQmFjaywKICAgICAgU2VwYXJhdG9ySG9yaXpvbnRhbCwKICAgICAgU2VwYXJhdG9yVmVydGljYWwsCiAgICAgIFNlcnZlciwKICAgICAgU2VydmVyQ29nLAogICAgICBTZXJ2ZXJDcmFzaCwKICAgICAgU2VydmVyT2ZmLAogICAgICBTZXR0aW5ncywKICAgICAgU2V0dGluZ3MyLAogICAgICBTaGFwZXMsCiAgICAgIFNoYXJlLAogICAgICBTaGFyZTIsCiAgICAgIFNoZWV0LAogICAgICBTaGVsbCwKICAgICAgU2hpZWxkLAogICAgICBTaGllbGRBbGVydCwKICAgICAgU2hpZWxkQmFuLAogICAgICBTaGllbGRDaGVjaywKICAgICAgU2hpZWxkQ2xvc2U6IFNoaWVsZFgsCiAgICAgIFNoaWVsZEVsbGlwc2lzLAogICAgICBTaGllbGRIYWxmLAogICAgICBTaGllbGRNaW51cywKICAgICAgU2hpZWxkT2ZmLAogICAgICBTaGllbGRQbHVzLAogICAgICBTaGllbGRRdWVzdGlvbjogU2hpZWxkUXVlc3Rpb25NYXJrLAogICAgICBTaGllbGRRdWVzdGlvbk1hcmssCiAgICAgIFNoaWVsZFVzZXIsCiAgICAgIFNoaWVsZFgsCiAgICAgIFNoaXAsCiAgICAgIFNoaXBXaGVlbCwKICAgICAgU2hpcnQsCiAgICAgIFNob3BwaW5nQmFnLAogICAgICBTaG9wcGluZ0Jhc2tldCwKICAgICAgU2hvcHBpbmdDYXJ0LAogICAgICBTaG92ZWwsCiAgICAgIFNob3dlckhlYWQsCiAgICAgIFNocmVkZGVyLAogICAgICBTaHJpbXAsCiAgICAgIFNocmluaywKICAgICAgU2hydWIsCiAgICAgIFNodWZmbGUsCiAgICAgIFNpZGViYXI6IFBhbmVsTGVmdCwKICAgICAgU2lkZWJhckNsb3NlOiBQYW5lbExlZnRDbG9zZSwKICAgICAgU2lkZWJhck9wZW46IFBhbmVsTGVmdE9wZW4sCiAgICAgIFNpZ21hLAogICAgICBTaWdtYVNxdWFyZTogU3F1YXJlU2lnbWEsCiAgICAgIFNpZ25hbCwKICAgICAgU2lnbmFsSGlnaCwKICAgICAgU2lnbmFsTG93LAogICAgICBTaWduYWxNZWRpdW0sCiAgICAgIFNpZ25hbFplcm8sCiAgICAgIFNpZ25hdHVyZSwKICAgICAgU2lnbnBvc3QsCiAgICAgIFNpZ25wb3N0QmlnLAogICAgICBTaXJlbiwKICAgICAgU2tpcEJhY2ssCiAgICAgIFNraXBGb3J3YXJkLAogICAgICBTa3VsbCwKICAgICAgU2xhY2ssCiAgICAgIFNsYXNoLAogICAgICBTbGFzaFNxdWFyZTogU3F1YXJlU2xhc2gsCiAgICAgIFNsaWNlLAogICAgICBTbGlkZXJzOiBTbGlkZXJzVmVydGljYWwsCiAgICAgIFNsaWRlcnNIb3Jpem9udGFsLAogICAgICBTbGlkZXJzVmVydGljYWwsCiAgICAgIFNtYXJ0cGhvbmUsCiAgICAgIFNtYXJ0cGhvbmVDaGFyZ2luZywKICAgICAgU21hcnRwaG9uZU5mYywKICAgICAgU21pbGUsCiAgICAgIFNtaWxlUGx1cywKICAgICAgU25haWwsCiAgICAgIFNub3dmbGFrZSwKICAgICAgU29hcERpc3BlbnNlckRyb3BsZXQsCiAgICAgIFNvZmEsCiAgICAgIFNvbGFyUGFuZWwsCiAgICAgIFNvcnRBc2M6IEFycm93VXBOYXJyb3dXaWRlLAogICAgICBTb3J0RGVzYzogQXJyb3dEb3duV2lkZU5hcnJvdywKICAgICAgU291cCwKICAgICAgU3BhY2UsCiAgICAgIFNwYWRlLAogICAgICBTcGFya2xlLAogICAgICBTcGFya2xlcywKICAgICAgU3BlYWtlciwKICAgICAgU3BlZWNoLAogICAgICBTcGVsbENoZWNrLAogICAgICBTcGVsbENoZWNrMiwKICAgICAgU3BsaW5lLAogICAgICBTcGxpbmVQb2ludGVyLAogICAgICBTcGxpdCwKICAgICAgU3BsaXRTcXVhcmVIb3Jpem9udGFsOiBTcXVhcmVTcGxpdEhvcml6b250YWwsCiAgICAgIFNwbGl0U3F1YXJlVmVydGljYWw6IFNxdWFyZVNwbGl0VmVydGljYWwsCiAgICAgIFNwb29sLAogICAgICBTcG90bGlnaHQsCiAgICAgIFNwcmF5Q2FuLAogICAgICBTcHJvdXQsCiAgICAgIFNxdWFyZSwKICAgICAgU3F1YXJlQWN0aXZpdHksCiAgICAgIFNxdWFyZUFycm93RG93biwKICAgICAgU3F1YXJlQXJyb3dEb3duTGVmdCwKICAgICAgU3F1YXJlQXJyb3dEb3duUmlnaHQsCiAgICAgIFNxdWFyZUFycm93TGVmdCwKICAgICAgU3F1YXJlQXJyb3dPdXREb3duTGVmdCwKICAgICAgU3F1YXJlQXJyb3dPdXREb3duUmlnaHQsCiAgICAgIFNxdWFyZUFycm93T3V0VXBMZWZ0LAogICAgICBTcXVhcmVBcnJvd091dFVwUmlnaHQsCiAgICAgIFNxdWFyZUFycm93UmlnaHQsCiAgICAgIFNxdWFyZUFycm93VXAsCiAgICAgIFNxdWFyZUFycm93VXBMZWZ0LAogICAgICBTcXVhcmVBcnJvd1VwUmlnaHQsCiAgICAgIFNxdWFyZUFzdGVyaXNrLAogICAgICBTcXVhcmVCb3R0b21EYXNoZWRTY2lzc29ycywKICAgICAgU3F1YXJlQ2hhcnRHYW50dCwKICAgICAgU3F1YXJlQ2hlY2ssCiAgICAgIFNxdWFyZUNoZWNrQmlnLAogICAgICBTcXVhcmVDaGV2cm9uRG93biwKICAgICAgU3F1YXJlQ2hldnJvbkxlZnQsCiAgICAgIFNxdWFyZUNoZXZyb25SaWdodCwKICAgICAgU3F1YXJlQ2hldnJvblVwLAogICAgICBTcXVhcmVDb2RlLAogICAgICBTcXVhcmVEYXNoZWQsCiAgICAgIFNxdWFyZURhc2hlZEJvdHRvbSwKICAgICAgU3F1YXJlRGFzaGVkQm90dG9tQ29kZSwKICAgICAgU3F1YXJlRGFzaGVkS2FuYmFuLAogICAgICBTcXVhcmVEYXNoZWRNb3VzZVBvaW50ZXIsCiAgICAgIFNxdWFyZURhc2hlZFRvcFNvbGlkLAogICAgICBTcXVhcmVEaXZpZGUsCiAgICAgIFNxdWFyZURvdCwKICAgICAgU3F1YXJlRXF1YWwsCiAgICAgIFNxdWFyZUZ1bmN0aW9uLAogICAgICBTcXVhcmVHYW50dENoYXJ0OiBTcXVhcmVDaGFydEdhbnR0LAogICAgICBTcXVhcmVLYW5iYW4sCiAgICAgIFNxdWFyZUxpYnJhcnksCiAgICAgIFNxdWFyZU0sCiAgICAgIFNxdWFyZU1lbnUsCiAgICAgIFNxdWFyZU1pbnVzLAogICAgICBTcXVhcmVNb3VzZVBvaW50ZXIsCiAgICAgIFNxdWFyZVBhcmtpbmcsCiAgICAgIFNxdWFyZVBhcmtpbmdPZmYsCiAgICAgIFNxdWFyZVBhdXNlLAogICAgICBTcXVhcmVQZW4sCiAgICAgIFNxdWFyZVBlcmNlbnQsCiAgICAgIFNxdWFyZVBpLAogICAgICBTcXVhcmVQaWxjcm93LAogICAgICBTcXVhcmVQbGF5LAogICAgICBTcXVhcmVQbHVzLAogICAgICBTcXVhcmVQb3dlciwKICAgICAgU3F1YXJlUmFkaWNhbCwKICAgICAgU3F1YXJlUm91bmRDb3JuZXIsCiAgICAgIFNxdWFyZVNjaXNzb3JzLAogICAgICBTcXVhcmVTaWdtYSwKICAgICAgU3F1YXJlU2xhc2gsCiAgICAgIFNxdWFyZVNwbGl0SG9yaXpvbnRhbCwKICAgICAgU3F1YXJlU3BsaXRWZXJ0aWNhbCwKICAgICAgU3F1YXJlU3F1YXJlLAogICAgICBTcXVhcmVTdGFjaywKICAgICAgU3F1YXJlU3RhciwKICAgICAgU3F1YXJlU3RvcCwKICAgICAgU3F1YXJlVGVybWluYWwsCiAgICAgIFNxdWFyZVVzZXIsCiAgICAgIFNxdWFyZVVzZXJSb3VuZCwKICAgICAgU3F1YXJlWCwKICAgICAgU3F1YXJlc0V4Y2x1ZGUsCiAgICAgIFNxdWFyZXNJbnRlcnNlY3QsCiAgICAgIFNxdWFyZXNTdWJ0cmFjdCwKICAgICAgU3F1YXJlc1VuaXRlLAogICAgICBTcXVpcmNsZSwKICAgICAgU3F1aXJjbGVEYXNoZWQsCiAgICAgIFNxdWlycmVsLAogICAgICBTdGFtcCwKICAgICAgU3RhciwKICAgICAgU3RhckhhbGYsCiAgICAgIFN0YXJPZmYsCiAgICAgIFN0YXJzOiBTcGFya2xlcywKICAgICAgU3RlcEJhY2ssCiAgICAgIFN0ZXBGb3J3YXJkLAogICAgICBTdGV0aG9zY29wZSwKICAgICAgU3RpY2tlciwKICAgICAgU3RpY2t5Tm90ZSwKICAgICAgU3RvbmUsCiAgICAgIFN0b3BDaXJjbGU6IENpcmNsZVN0b3AsCiAgICAgIFN0b3JlLAogICAgICBTdHJldGNoSG9yaXpvbnRhbCwKICAgICAgU3RyZXRjaFZlcnRpY2FsLAogICAgICBTdHJpa2V0aHJvdWdoLAogICAgICBTdWJzY3JpcHQsCiAgICAgIFN1YnRpdGxlczogQ2FwdGlvbnMsCiAgICAgIFN1biwKICAgICAgU3VuRGltLAogICAgICBTdW5NZWRpdW0sCiAgICAgIFN1bk1vb24sCiAgICAgIFN1blNub3csCiAgICAgIFN1bnJpc2UsCiAgICAgIFN1bnNldCwKICAgICAgU3VwZXJzY3JpcHQsCiAgICAgIFN3YXRjaEJvb2ssCiAgICAgIFN3aXNzRnJhbmMsCiAgICAgIFN3aXRjaENhbWVyYSwKICAgICAgU3dvcmQsCiAgICAgIFN3b3JkcywKICAgICAgU3lyaW5nZSwKICAgICAgVGFibGUsCiAgICAgIFRhYmxlMiwKICAgICAgVGFibGVDZWxsc01lcmdlLAogICAgICBUYWJsZUNlbGxzU3BsaXQsCiAgICAgIFRhYmxlQ29sdW1uc1NwbGl0LAogICAgICBUYWJsZUNvbmZpZzogQ29sdW1uczNDb2csCiAgICAgIFRhYmxlT2ZDb250ZW50cywKICAgICAgVGFibGVQcm9wZXJ0aWVzLAogICAgICBUYWJsZVJvd3NTcGxpdCwKICAgICAgVGFibGV0LAogICAgICBUYWJsZXRTbWFydHBob25lLAogICAgICBUYWJsZXRzLAogICAgICBUYWc6IFRhZzIsCiAgICAgIFRhZ3MsCiAgICAgIFRhbGx5MSwKICAgICAgVGFsbHkyLAogICAgICBUYWxseTMsCiAgICAgIFRhbGx5NCwKICAgICAgVGFsbHk1LAogICAgICBUYW5nZW50LAogICAgICBUYXJnZXQsCiAgICAgIFRlbGVzY29wZSwKICAgICAgVGVudCwKICAgICAgVGVudFRyZWUsCiAgICAgIFRlcm1pbmFsLAogICAgICBUZXJtaW5hbFNxdWFyZTogU3F1YXJlVGVybWluYWwsCiAgICAgIFRlc3RUdWJlLAogICAgICBUZXN0VHViZTI6IFRlc3RUdWJlRGlhZ29uYWwsCiAgICAgIFRlc3RUdWJlRGlhZ29uYWwsCiAgICAgIFRlc3RUdWJlcywKICAgICAgVGV4dDogVGV4dEFsaWduU3RhcnQsCiAgICAgIFRleHRBbGlnbkNlbnRlciwKICAgICAgVGV4dEFsaWduRW5kLAogICAgICBUZXh0QWxpZ25KdXN0aWZ5LAogICAgICBUZXh0QWxpZ25TdGFydCwKICAgICAgVGV4dEN1cnNvciwKICAgICAgVGV4dEN1cnNvcklucHV0LAogICAgICBUZXh0SW5pdGlhbCwKICAgICAgVGV4dFF1b3RlLAogICAgICBUZXh0U2VhcmNoLAogICAgICBUZXh0U2VsZWN0LAogICAgICBUZXh0U2VsZWN0aW9uOiBUZXh0U2VsZWN0LAogICAgICBUZXh0V3JhcCwKICAgICAgVGhlYXRlciwKICAgICAgVGhlcm1vbWV0ZXIsCiAgICAgIFRoZXJtb21ldGVyU25vd2ZsYWtlLAogICAgICBUaGVybW9tZXRlclN1biwKICAgICAgVGh1bWJzRG93biwKICAgICAgVGh1bWJzVXAsCiAgICAgIFRpY2tldCwKICAgICAgVGlja2V0Q2hlY2ssCiAgICAgIFRpY2tldE1pbnVzLAogICAgICBUaWNrZXRQZXJjZW50LAogICAgICBUaWNrZXRQbHVzLAogICAgICBUaWNrZXRTbGFzaCwKICAgICAgVGlja2V0WCwKICAgICAgVGlja2V0cywKICAgICAgVGlja2V0c1BsYW5lLAogICAgICBUaW1lcjogVGltZXIyLAogICAgICBUaW1lck9mZiwKICAgICAgVGltZXJSZXNldCwKICAgICAgVG9nZ2xlTGVmdCwKICAgICAgVG9nZ2xlUmlnaHQsCiAgICAgIFRvaWxldCwKICAgICAgVG9vbENhc2UsCiAgICAgIFRvb2xib3gsCiAgICAgIFRvcm5hZG8sCiAgICAgIFRvcnVzLAogICAgICBUb3VjaHBhZCwKICAgICAgVG91Y2hwYWRPZmYsCiAgICAgIFRvd2VyQ29udHJvbCwKICAgICAgVG95QnJpY2ssCiAgICAgIFRyYWN0b3IsCiAgICAgIFRyYWZmaWNDb25lLAogICAgICBUcmFpbjogVHJhbUZyb250LAogICAgICBUcmFpbkZyb250LAogICAgICBUcmFpbkZyb250VHVubmVsLAogICAgICBUcmFpblRyYWNrLAogICAgICBUcmFtRnJvbnQsCiAgICAgIFRyYW5zZ2VuZGVyLAogICAgICBUcmFzaCwKICAgICAgVHJhc2gyLAogICAgICBUcmVlRGVjaWR1b3VzLAogICAgICBUcmVlUGFsbSwKICAgICAgVHJlZVBpbmUsCiAgICAgIFRyZWVzLAogICAgICBUcmVsbG8sCiAgICAgIFRyZW5kaW5nRG93biwKICAgICAgVHJlbmRpbmdVcCwKICAgICAgVHJlbmRpbmdVcERvd24sCiAgICAgIFRyaWFuZ2xlLAogICAgICBUcmlhbmdsZUFsZXJ0LAogICAgICBUcmlhbmdsZURhc2hlZCwKICAgICAgVHJpYW5nbGVSaWdodCwKICAgICAgVHJvcGh5LAogICAgICBUcnVjaywKICAgICAgVHJ1Y2tFbGVjdHJpYywKICAgICAgVHVya2lzaExpcmEsCiAgICAgIFR1cm50YWJsZSwKICAgICAgVHVydGxlLAogICAgICBUdiwKICAgICAgVHYyOiBUdk1pbmltYWwsCiAgICAgIFR2TWluaW1hbCwKICAgICAgVHZNaW5pbWFsUGxheSwKICAgICAgVHdpdGNoLAogICAgICBUd2l0dGVyLAogICAgICBUeXBlLAogICAgICBUeXBlT3V0bGluZSwKICAgICAgVW1icmVsbGEsCiAgICAgIFVtYnJlbGxhT2ZmLAogICAgICBVbmRlcmxpbmUsCiAgICAgIFVuZG8sCiAgICAgIFVuZG8yLAogICAgICBVbmRvRG90LAogICAgICBVbmZvbGRIb3Jpem9udGFsLAogICAgICBVbmZvbGRWZXJ0aWNhbCwKICAgICAgVW5ncm91cCwKICAgICAgVW5pdmVyc2l0eSwKICAgICAgVW5saW5rLAogICAgICBVbmxpbmsyLAogICAgICBVbmxvY2s6IExvY2tPcGVuLAogICAgICBVbmxvY2tLZXlob2xlOiBMb2NrS2V5aG9sZU9wZW4sCiAgICAgIFVucGx1ZywKICAgICAgVXBsb2FkLAogICAgICBVcGxvYWRDbG91ZDogQ2xvdWRVcGxvYWQsCiAgICAgIFVzYiwKICAgICAgVXNlciwKICAgICAgVXNlcjI6IFVzZXJSb3VuZCwKICAgICAgVXNlckNoZWNrLAogICAgICBVc2VyQ2hlY2syOiBVc2VyUm91bmRDaGVjaywKICAgICAgVXNlckNpcmNsZTogQ2lyY2xlVXNlciwKICAgICAgVXNlckNpcmNsZTI6IENpcmNsZVVzZXJSb3VuZCwKICAgICAgVXNlckNvZywKICAgICAgVXNlckNvZzI6IFVzZXJSb3VuZENvZywKICAgICAgVXNlckxvY2ssCiAgICAgIFVzZXJNaW51cywKICAgICAgVXNlck1pbnVzMjogVXNlclJvdW5kTWludXMsCiAgICAgIFVzZXJQZW4sCiAgICAgIFVzZXJQbHVzLAogICAgICBVc2VyUGx1czI6IFVzZXJSb3VuZFBsdXMsCiAgICAgIFVzZXJSb3VuZCwKICAgICAgVXNlclJvdW5kQ2hlY2ssCiAgICAgIFVzZXJSb3VuZENvZywKICAgICAgVXNlclJvdW5kTWludXMsCiAgICAgIFVzZXJSb3VuZFBlbiwKICAgICAgVXNlclJvdW5kUGx1cywKICAgICAgVXNlclJvdW5kU2VhcmNoLAogICAgICBVc2VyUm91bmRYLAogICAgICBVc2VyU2VhcmNoLAogICAgICBVc2VyU3F1YXJlOiBTcXVhcmVVc2VyLAogICAgICBVc2VyU3F1YXJlMjogU3F1YXJlVXNlclJvdW5kLAogICAgICBVc2VyU3RhciwKICAgICAgVXNlclgsCiAgICAgIFVzZXJYMjogVXNlclJvdW5kWCwKICAgICAgVXNlcnMsCiAgICAgIFVzZXJzMjogVXNlcnNSb3VuZCwKICAgICAgVXNlcnNSb3VuZCwKICAgICAgVXRlbnNpbHMsCiAgICAgIFV0ZW5zaWxzQ3Jvc3NlZCwKICAgICAgVXRpbGl0eVBvbGUsCiAgICAgIFZhbiwKICAgICAgVmFyaWFibGUsCiAgICAgIFZhdWx0LAogICAgICBWZWN0b3JTcXVhcmUsCiAgICAgIFZlZ2FuLAogICAgICBWZW5ldGlhbk1hc2ssCiAgICAgIFZlbnVzLAogICAgICBWZW51c0FuZE1hcnMsCiAgICAgIFZlcmlmaWVkOiBCYWRnZUNoZWNrLAogICAgICBWaWJyYXRlLAogICAgICBWaWJyYXRlT2ZmLAogICAgICBWaWRlbywKICAgICAgVmlkZW9PZmYsCiAgICAgIFZpZGVvdGFwZSwKICAgICAgVmlldywKICAgICAgVm9pY2VtYWlsLAogICAgICBWb2xsZXliYWxsLAogICAgICBWb2x1bWUsCiAgICAgIFZvbHVtZTEsCiAgICAgIFZvbHVtZTIsCiAgICAgIFZvbHVtZU9mZiwKICAgICAgVm9sdW1lWCwKICAgICAgVm90ZSwKICAgICAgV2FsbGV0LAogICAgICBXYWxsZXQyOiBXYWxsZXRNaW5pbWFsLAogICAgICBXYWxsZXRDYXJkcywKICAgICAgV2FsbGV0TWluaW1hbCwKICAgICAgV2FsbHBhcGVyLAogICAgICBXYW5kLAogICAgICBXYW5kMjogV2FuZFNwYXJrbGVzLAogICAgICBXYW5kU3BhcmtsZXMsCiAgICAgIFdhcmVob3VzZSwKICAgICAgV2FzaGluZ01hY2hpbmUsCiAgICAgIFdhdGNoLAogICAgICBXYXZlcywKICAgICAgV2F2ZXNBcnJvd0Rvd24sCiAgICAgIFdhdmVzQXJyb3dVcCwKICAgICAgV2F2ZXNMYWRkZXIsCiAgICAgIFdheXBvaW50cywKICAgICAgV2ViY2FtLAogICAgICBXZWJob29rLAogICAgICBXZWJob29rT2ZmLAogICAgICBXZWlnaHQsCiAgICAgIFdlaWdodFRpbGRlLAogICAgICBXaGVhdCwKICAgICAgV2hlYXRPZmYsCiAgICAgIFdob2xlV29yZCwKICAgICAgV2lmaSwKICAgICAgV2lmaUNvZywKICAgICAgV2lmaUhpZ2gsCiAgICAgIFdpZmlMb3csCiAgICAgIFdpZmlPZmYsCiAgICAgIFdpZmlQZW4sCiAgICAgIFdpZmlTeW5jLAogICAgICBXaWZpWmVybywKICAgICAgV2luZCwKICAgICAgV2luZEFycm93RG93biwKICAgICAgV2luZSwKICAgICAgV2luZU9mZiwKICAgICAgV29ya2Zsb3csCiAgICAgIFdvcm0sCiAgICAgIFdyYXBUZXh0OiBUZXh0V3JhcCwKICAgICAgV3JlbmNoLAogICAgICBYLAogICAgICBYQ2lyY2xlOiBDaXJjbGVYLAogICAgICBYT2N0YWdvbjogT2N0YWdvblgsCiAgICAgIFhTcXVhcmU6IFNxdWFyZVgsCiAgICAgIFlvdXR1YmUsCiAgICAgIFphcCwKICAgICAgWmFwT2ZmLAogICAgICBab29tSW4sCiAgICAgIFpvb21PdXQKICAgIH0pOwogICAgdmFyIGNyZWF0ZUljb25zID0gKHsKICAgICAgaWNvbnM6IGljb25zNiA9IHt9LAogICAgICBuYW1lQXR0ciA9ICJkYXRhLWx1Y2lkZSIsCiAgICAgIGF0dHJzID0ge30sCiAgICAgIHJvb3Q6IHJvb3Q2ID0gZG9jdW1lbnQsCiAgICAgIGluVGVtcGxhdGVzCiAgICB9ID0ge30pID0+IHsKICAgICAgaWYgKCFPYmplY3QudmFsdWVzKGljb25zNikubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgIlBsZWFzZSBwcm92aWRlIGFuIGljb25zIG9iamVjdC5cbklmIHlvdSB3YW50IHRvIHVzZSBhbGwgdGhlIGljb25zIHlvdSBjYW4gaW1wb3J0IGl0IGxpa2U6XG4gYGltcG9ydCB7IGNyZWF0ZUljb25zLCBpY29ucyB9IGZyb20gJ2x1Y2lkZSc7XG5sdWNpZGUuY3JlYXRlSWNvbnMoe2ljb25zfSk7YCIKICAgICAgICApOwogICAgICB9CiAgICAgIGlmICh0eXBlb2Ygcm9vdDYgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJgY3JlYXRlSWNvbnMoKWAgb25seSB3b3JrcyBpbiBhIGJyb3dzZXIgZW52aXJvbm1lbnQuIik7CiAgICAgIH0KICAgICAgY29uc3QgZWxlbWVudHNUb1JlcGxhY2UgPSBBcnJheS5mcm9tKHJvb3Q2LnF1ZXJ5U2VsZWN0b3JBbGwoYFske25hbWVBdHRyfV1gKSk7CiAgICAgIGVsZW1lbnRzVG9SZXBsYWNlLmZvckVhY2goKGVsZW1lbnQ0KSA9PiByZXBsYWNlRWxlbWVudChlbGVtZW50NCwgeyBuYW1lQXR0ciwgaWNvbnM6IGljb25zNiwgYXR0cnMgfSkpOwogICAgICBpZiAoaW5UZW1wbGF0ZXMpIHsKICAgICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBBcnJheS5mcm9tKHJvb3Q2LnF1ZXJ5U2VsZWN0b3JBbGwoInRlbXBsYXRlIikpOwogICAgICAgIHRlbXBsYXRlcy5mb3JFYWNoKAogICAgICAgICAgKHRlbXBsYXRlKSA9PiBjcmVhdGVJY29ucyh7CiAgICAgICAgICAgIGljb25zOiBpY29uczYsCiAgICAgICAgICAgIG5hbWVBdHRyLAogICAgICAgICAgICBhdHRycywKICAgICAgICAgICAgcm9vdDogdGVtcGxhdGUuY29udGVudCwKICAgICAgICAgICAgaW5UZW1wbGF0ZXMKICAgICAgICAgIH0pCiAgICAgICAgKTsKICAgICAgfQogICAgICBpZiAobmFtZUF0dHIgPT09ICJkYXRhLWx1Y2lkZSIpIHsKICAgICAgICBjb25zdCBkZXByZWNhdGVkRWxlbWVudHMgPSByb290Ni5xdWVyeVNlbGVjdG9yQWxsKCJbaWNvbi1uYW1lXSIpOwogICAgICAgIGlmIChkZXByZWNhdGVkRWxlbWVudHMubGVuZ3RoID4gMCkgewogICAgICAgICAgY29uc29sZS53YXJuKAogICAgICAgICAgICAiW0x1Y2lkZV0gU29tZSBpY29ucyB3ZXJlIGZvdW5kIHdpdGggdGhlIG5vdyBkZXByZWNhdGVkIGljb24tbmFtZSBhdHRyaWJ1dGUuIFRoZXNlIHdpbGwgc3RpbGwgYmUgcmVwbGFjZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBidXQgd2lsbCBubyBsb25nZXIgYmUgc3VwcG9ydGVkIGluIHYxLjAgYW5kIHlvdSBzaG91bGQgc3dpdGNoIHRvIGRhdGEtbHVjaWRlIgogICAgICAgICAgKTsKICAgICAgICAgIEFycmF5LmZyb20oZGVwcmVjYXRlZEVsZW1lbnRzKS5mb3JFYWNoKAogICAgICAgICAgICAoZWxlbWVudDQpID0+IHJlcGxhY2VFbGVtZW50KGVsZW1lbnQ0LCB7IG5hbWVBdHRyOiAiaWNvbi1uYW1lIiwgaWNvbnM6IGljb25zNiwgYXR0cnMgfSkKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgZXhwb3J0cy5BQXJyb3dEb3duID0gQUFycm93RG93bjsKICAgIGV4cG9ydHMuQUFycm93VXAgPSBBQXJyb3dVcDsKICAgIGV4cG9ydHMuQUxhcmdlU21hbGwgPSBBTGFyZ2VTbWFsbDsKICAgIGV4cG9ydHMuQWNjZXNzaWJpbGl0eSA9IEFjY2Vzc2liaWxpdHk7CiAgICBleHBvcnRzLkFjdGl2aXR5ID0gQWN0aXZpdHk7CiAgICBleHBvcnRzLkFjdGl2aXR5U3F1YXJlID0gU3F1YXJlQWN0aXZpdHk7CiAgICBleHBvcnRzLkFpclZlbnQgPSBBaXJWZW50OwogICAgZXhwb3J0cy5BaXJwbGF5ID0gQWlycGxheTsKICAgIGV4cG9ydHMuQWxhcm1DaGVjayA9IEFsYXJtQ2xvY2tDaGVjazsKICAgIGV4cG9ydHMuQWxhcm1DbG9jayA9IEFsYXJtQ2xvY2s7CiAgICBleHBvcnRzLkFsYXJtQ2xvY2tDaGVjayA9IEFsYXJtQ2xvY2tDaGVjazsKICAgIGV4cG9ydHMuQWxhcm1DbG9ja01pbnVzID0gQWxhcm1DbG9ja01pbnVzOwogICAgZXhwb3J0cy5BbGFybUNsb2NrT2ZmID0gQWxhcm1DbG9ja09mZjsKICAgIGV4cG9ydHMuQWxhcm1DbG9ja1BsdXMgPSBBbGFybUNsb2NrUGx1czsKICAgIGV4cG9ydHMuQWxhcm1NaW51cyA9IEFsYXJtQ2xvY2tNaW51czsKICAgIGV4cG9ydHMuQWxhcm1QbHVzID0gQWxhcm1DbG9ja1BsdXM7CiAgICBleHBvcnRzLkFsYXJtU21va2UgPSBBbGFybVNtb2tlOwogICAgZXhwb3J0cy5BbGJ1bSA9IEFsYnVtOwogICAgZXhwb3J0cy5BbGVydENpcmNsZSA9IENpcmNsZUFsZXJ0OwogICAgZXhwb3J0cy5BbGVydE9jdGFnb24gPSBPY3RhZ29uQWxlcnQ7CiAgICBleHBvcnRzLkFsZXJ0VHJpYW5nbGUgPSBUcmlhbmdsZUFsZXJ0OwogICAgZXhwb3J0cy5BbGlnbkNlbnRlciA9IFRleHRBbGlnbkNlbnRlcjsKICAgIGV4cG9ydHMuQWxpZ25DZW50ZXJIb3Jpem9udGFsID0gQWxpZ25DZW50ZXJIb3Jpem9udGFsOwogICAgZXhwb3J0cy5BbGlnbkNlbnRlclZlcnRpY2FsID0gQWxpZ25DZW50ZXJWZXJ0aWNhbDsKICAgIGV4cG9ydHMuQWxpZ25FbmRIb3Jpem9udGFsID0gQWxpZ25FbmRIb3Jpem9udGFsOwogICAgZXhwb3J0cy5BbGlnbkVuZFZlcnRpY2FsID0gQWxpZ25FbmRWZXJ0aWNhbDsKICAgIGV4cG9ydHMuQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZUNlbnRlciA9IEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVDZW50ZXI7CiAgICBleHBvcnRzLkFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVFbmQgPSBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlRW5kOwogICAgZXhwb3J0cy5BbGlnbkhvcml6b250YWxEaXN0cmlidXRlU3RhcnQgPSBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlU3RhcnQ7CiAgICBleHBvcnRzLkFsaWduSG9yaXpvbnRhbEp1c3RpZnlDZW50ZXIgPSBBbGlnbkhvcml6b250YWxKdXN0aWZ5Q2VudGVyOwogICAgZXhwb3J0cy5BbGlnbkhvcml6b250YWxKdXN0aWZ5RW5kID0gQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUVuZDsKICAgIGV4cG9ydHMuQWxpZ25Ib3Jpem9udGFsSnVzdGlmeVN0YXJ0ID0gQWxpZ25Ib3Jpem9udGFsSnVzdGlmeVN0YXJ0OwogICAgZXhwb3J0cy5BbGlnbkhvcml6b250YWxTcGFjZUFyb3VuZCA9IEFsaWduSG9yaXpvbnRhbFNwYWNlQXJvdW5kOwogICAgZXhwb3J0cy5BbGlnbkhvcml6b250YWxTcGFjZUJldHdlZW4gPSBBbGlnbkhvcml6b250YWxTcGFjZUJldHdlZW47CiAgICBleHBvcnRzLkFsaWduSnVzdGlmeSA9IFRleHRBbGlnbkp1c3RpZnk7CiAgICBleHBvcnRzLkFsaWduTGVmdCA9IFRleHRBbGlnblN0YXJ0OwogICAgZXhwb3J0cy5BbGlnblJpZ2h0ID0gVGV4dEFsaWduRW5kOwogICAgZXhwb3J0cy5BbGlnblN0YXJ0SG9yaXpvbnRhbCA9IEFsaWduU3RhcnRIb3Jpem9udGFsOwogICAgZXhwb3J0cy5BbGlnblN0YXJ0VmVydGljYWwgPSBBbGlnblN0YXJ0VmVydGljYWw7CiAgICBleHBvcnRzLkFsaWduVmVydGljYWxEaXN0cmlidXRlQ2VudGVyID0gQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVDZW50ZXI7CiAgICBleHBvcnRzLkFsaWduVmVydGljYWxEaXN0cmlidXRlRW5kID0gQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVFbmQ7CiAgICBleHBvcnRzLkFsaWduVmVydGljYWxEaXN0cmlidXRlU3RhcnQgPSBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZVN0YXJ0OwogICAgZXhwb3J0cy5BbGlnblZlcnRpY2FsSnVzdGlmeUNlbnRlciA9IEFsaWduVmVydGljYWxKdXN0aWZ5Q2VudGVyOwogICAgZXhwb3J0cy5BbGlnblZlcnRpY2FsSnVzdGlmeUVuZCA9IEFsaWduVmVydGljYWxKdXN0aWZ5RW5kOwogICAgZXhwb3J0cy5BbGlnblZlcnRpY2FsSnVzdGlmeVN0YXJ0ID0gQWxpZ25WZXJ0aWNhbEp1c3RpZnlTdGFydDsKICAgIGV4cG9ydHMuQWxpZ25WZXJ0aWNhbFNwYWNlQXJvdW5kID0gQWxpZ25WZXJ0aWNhbFNwYWNlQXJvdW5kOwogICAgZXhwb3J0cy5BbGlnblZlcnRpY2FsU3BhY2VCZXR3ZWVuID0gQWxpZ25WZXJ0aWNhbFNwYWNlQmV0d2VlbjsKICAgIGV4cG9ydHMuQW1idWxhbmNlID0gQW1idWxhbmNlOwogICAgZXhwb3J0cy5BbXBlcnNhbmQgPSBBbXBlcnNhbmQ7CiAgICBleHBvcnRzLkFtcGVyc2FuZHMgPSBBbXBlcnNhbmRzOwogICAgZXhwb3J0cy5BbXBob3JhID0gQW1waG9yYTsKICAgIGV4cG9ydHMuQW5jaG9yID0gQW5jaG9yOwogICAgZXhwb3J0cy5BbmdyeSA9IEFuZ3J5OwogICAgZXhwb3J0cy5Bbm5veWVkID0gQW5ub3llZDsKICAgIGV4cG9ydHMuQW50ZW5uYSA9IEFudGVubmE7CiAgICBleHBvcnRzLkFudmlsID0gQW52aWw7CiAgICBleHBvcnRzLkFwZXJ0dXJlID0gQXBlcnR1cmU7CiAgICBleHBvcnRzLkFwcFdpbmRvdyA9IEFwcFdpbmRvdzsKICAgIGV4cG9ydHMuQXBwV2luZG93TWFjID0gQXBwV2luZG93TWFjOwogICAgZXhwb3J0cy5BcHBsZSA9IEFwcGxlOwogICAgZXhwb3J0cy5BcmNoaXZlID0gQXJjaGl2ZTsKICAgIGV4cG9ydHMuQXJjaGl2ZVJlc3RvcmUgPSBBcmNoaXZlUmVzdG9yZTsKICAgIGV4cG9ydHMuQXJjaGl2ZVggPSBBcmNoaXZlWDsKICAgIGV4cG9ydHMuQXJlYUNoYXJ0ID0gQ2hhcnRBcmVhOwogICAgZXhwb3J0cy5Bcm1jaGFpciA9IEFybWNoYWlyOwogICAgZXhwb3J0cy5BcnJvd0JpZ0Rvd24gPSBBcnJvd0JpZ0Rvd247CiAgICBleHBvcnRzLkFycm93QmlnRG93bkRhc2ggPSBBcnJvd0JpZ0Rvd25EYXNoOwogICAgZXhwb3J0cy5BcnJvd0JpZ0xlZnQgPSBBcnJvd0JpZ0xlZnQ7CiAgICBleHBvcnRzLkFycm93QmlnTGVmdERhc2ggPSBBcnJvd0JpZ0xlZnREYXNoOwogICAgZXhwb3J0cy5BcnJvd0JpZ1JpZ2h0ID0gQXJyb3dCaWdSaWdodDsKICAgIGV4cG9ydHMuQXJyb3dCaWdSaWdodERhc2ggPSBBcnJvd0JpZ1JpZ2h0RGFzaDsKICAgIGV4cG9ydHMuQXJyb3dCaWdVcCA9IEFycm93QmlnVXA7CiAgICBleHBvcnRzLkFycm93QmlnVXBEYXNoID0gQXJyb3dCaWdVcERhc2g7CiAgICBleHBvcnRzLkFycm93RG93biA9IEFycm93RG93bjsKICAgIGV4cG9ydHMuQXJyb3dEb3duMDEgPSBBcnJvd0Rvd24wMTsKICAgIGV4cG9ydHMuQXJyb3dEb3duMTAgPSBBcnJvd0Rvd24xMDsKICAgIGV4cG9ydHMuQXJyb3dEb3duQVogPSBBcnJvd0Rvd25BWjsKICAgIGV4cG9ydHMuQXJyb3dEb3duQXogPSBBcnJvd0Rvd25BWjsKICAgIGV4cG9ydHMuQXJyb3dEb3duQ2lyY2xlID0gQ2lyY2xlQXJyb3dEb3duOwogICAgZXhwb3J0cy5BcnJvd0Rvd25Gcm9tTGluZSA9IEFycm93RG93bkZyb21MaW5lOwogICAgZXhwb3J0cy5BcnJvd0Rvd25MZWZ0ID0gQXJyb3dEb3duTGVmdDsKICAgIGV4cG9ydHMuQXJyb3dEb3duTGVmdEZyb21DaXJjbGUgPSBDaXJjbGVBcnJvd091dERvd25MZWZ0OwogICAgZXhwb3J0cy5BcnJvd0Rvd25MZWZ0RnJvbVNxdWFyZSA9IFNxdWFyZUFycm93T3V0RG93bkxlZnQ7CiAgICBleHBvcnRzLkFycm93RG93bkxlZnRTcXVhcmUgPSBTcXVhcmVBcnJvd0Rvd25MZWZ0OwogICAgZXhwb3J0cy5BcnJvd0Rvd25OYXJyb3dXaWRlID0gQXJyb3dEb3duTmFycm93V2lkZTsKICAgIGV4cG9ydHMuQXJyb3dEb3duUmlnaHQgPSBBcnJvd0Rvd25SaWdodDsKICAgIGV4cG9ydHMuQXJyb3dEb3duUmlnaHRGcm9tQ2lyY2xlID0gQ2lyY2xlQXJyb3dPdXREb3duUmlnaHQ7CiAgICBleHBvcnRzLkFycm93RG93blJpZ2h0RnJvbVNxdWFyZSA9IFNxdWFyZUFycm93T3V0RG93blJpZ2h0OwogICAgZXhwb3J0cy5BcnJvd0Rvd25SaWdodFNxdWFyZSA9IFNxdWFyZUFycm93RG93blJpZ2h0OwogICAgZXhwb3J0cy5BcnJvd0Rvd25TcXVhcmUgPSBTcXVhcmVBcnJvd0Rvd247CiAgICBleHBvcnRzLkFycm93RG93blRvRG90ID0gQXJyb3dEb3duVG9Eb3Q7CiAgICBleHBvcnRzLkFycm93RG93blRvTGluZSA9IEFycm93RG93blRvTGluZTsKICAgIGV4cG9ydHMuQXJyb3dEb3duVXAgPSBBcnJvd0Rvd25VcDsKICAgIGV4cG9ydHMuQXJyb3dEb3duV2lkZU5hcnJvdyA9IEFycm93RG93bldpZGVOYXJyb3c7CiAgICBleHBvcnRzLkFycm93RG93blpBID0gQXJyb3dEb3duWkE7CiAgICBleHBvcnRzLkFycm93RG93blphID0gQXJyb3dEb3duWkE7CiAgICBleHBvcnRzLkFycm93TGVmdCA9IEFycm93TGVmdDsKICAgIGV4cG9ydHMuQXJyb3dMZWZ0Q2lyY2xlID0gQ2lyY2xlQXJyb3dMZWZ0OwogICAgZXhwb3J0cy5BcnJvd0xlZnRGcm9tTGluZSA9IEFycm93TGVmdEZyb21MaW5lOwogICAgZXhwb3J0cy5BcnJvd0xlZnRSaWdodCA9IEFycm93TGVmdFJpZ2h0OwogICAgZXhwb3J0cy5BcnJvd0xlZnRTcXVhcmUgPSBTcXVhcmVBcnJvd0xlZnQ7CiAgICBleHBvcnRzLkFycm93TGVmdFRvTGluZSA9IEFycm93TGVmdFRvTGluZTsKICAgIGV4cG9ydHMuQXJyb3dSaWdodCA9IEFycm93UmlnaHQ7CiAgICBleHBvcnRzLkFycm93UmlnaHRDaXJjbGUgPSBDaXJjbGVBcnJvd1JpZ2h0OwogICAgZXhwb3J0cy5BcnJvd1JpZ2h0RnJvbUxpbmUgPSBBcnJvd1JpZ2h0RnJvbUxpbmU7CiAgICBleHBvcnRzLkFycm93UmlnaHRMZWZ0ID0gQXJyb3dSaWdodExlZnQ7CiAgICBleHBvcnRzLkFycm93UmlnaHRTcXVhcmUgPSBTcXVhcmVBcnJvd1JpZ2h0OwogICAgZXhwb3J0cy5BcnJvd1JpZ2h0VG9MaW5lID0gQXJyb3dSaWdodFRvTGluZTsKICAgIGV4cG9ydHMuQXJyb3dVcCA9IEFycm93VXA7CiAgICBleHBvcnRzLkFycm93VXAwMSA9IEFycm93VXAwMTsKICAgIGV4cG9ydHMuQXJyb3dVcDEwID0gQXJyb3dVcDEwOwogICAgZXhwb3J0cy5BcnJvd1VwQVogPSBBcnJvd1VwQVo7CiAgICBleHBvcnRzLkFycm93VXBBeiA9IEFycm93VXBBWjsKICAgIGV4cG9ydHMuQXJyb3dVcENpcmNsZSA9IENpcmNsZUFycm93VXA7CiAgICBleHBvcnRzLkFycm93VXBEb3duID0gQXJyb3dVcERvd247CiAgICBleHBvcnRzLkFycm93VXBGcm9tRG90ID0gQXJyb3dVcEZyb21Eb3Q7CiAgICBleHBvcnRzLkFycm93VXBGcm9tTGluZSA9IEFycm93VXBGcm9tTGluZTsKICAgIGV4cG9ydHMuQXJyb3dVcExlZnQgPSBBcnJvd1VwTGVmdDsKICAgIGV4cG9ydHMuQXJyb3dVcExlZnRGcm9tQ2lyY2xlID0gQ2lyY2xlQXJyb3dPdXRVcExlZnQ7CiAgICBleHBvcnRzLkFycm93VXBMZWZ0RnJvbVNxdWFyZSA9IFNxdWFyZUFycm93T3V0VXBMZWZ0OwogICAgZXhwb3J0cy5BcnJvd1VwTGVmdFNxdWFyZSA9IFNxdWFyZUFycm93VXBMZWZ0OwogICAgZXhwb3J0cy5BcnJvd1VwTmFycm93V2lkZSA9IEFycm93VXBOYXJyb3dXaWRlOwogICAgZXhwb3J0cy5BcnJvd1VwUmlnaHQgPSBBcnJvd1VwUmlnaHQ7CiAgICBleHBvcnRzLkFycm93VXBSaWdodEZyb21DaXJjbGUgPSBDaXJjbGVBcnJvd091dFVwUmlnaHQ7CiAgICBleHBvcnRzLkFycm93VXBSaWdodEZyb21TcXVhcmUgPSBTcXVhcmVBcnJvd091dFVwUmlnaHQ7CiAgICBleHBvcnRzLkFycm93VXBSaWdodFNxdWFyZSA9IFNxdWFyZUFycm93VXBSaWdodDsKICAgIGV4cG9ydHMuQXJyb3dVcFNxdWFyZSA9IFNxdWFyZUFycm93VXA7CiAgICBleHBvcnRzLkFycm93VXBUb0xpbmUgPSBBcnJvd1VwVG9MaW5lOwogICAgZXhwb3J0cy5BcnJvd1VwV2lkZU5hcnJvdyA9IEFycm93VXBXaWRlTmFycm93OwogICAgZXhwb3J0cy5BcnJvd1VwWkEgPSBBcnJvd1VwWkE7CiAgICBleHBvcnRzLkFycm93VXBaYSA9IEFycm93VXBaQTsKICAgIGV4cG9ydHMuQXJyb3dzVXBGcm9tTGluZSA9IEFycm93c1VwRnJvbUxpbmU7CiAgICBleHBvcnRzLkFzdGVyaXNrID0gQXN0ZXJpc2s7CiAgICBleHBvcnRzLkFzdGVyaXNrU3F1YXJlID0gU3F1YXJlQXN0ZXJpc2s7CiAgICBleHBvcnRzLkF0U2lnbiA9IEF0U2lnbjsKICAgIGV4cG9ydHMuQXRvbSA9IEF0b207CiAgICBleHBvcnRzLkF1ZGlvTGluZXMgPSBBdWRpb0xpbmVzOwogICAgZXhwb3J0cy5BdWRpb1dhdmVmb3JtID0gQXVkaW9XYXZlZm9ybTsKICAgIGV4cG9ydHMuQXdhcmQgPSBBd2FyZDsKICAgIGV4cG9ydHMuQXhlID0gQXhlOwogICAgZXhwb3J0cy5BeGlzM0QgPSBBeGlzM2Q7CiAgICBleHBvcnRzLkF4aXMzZCA9IEF4aXMzZDsKICAgIGV4cG9ydHMuQmFieSA9IEJhYnk7CiAgICBleHBvcnRzLkJhY2twYWNrID0gQmFja3BhY2s7CiAgICBleHBvcnRzLkJhZGdlID0gQmFkZ2U7CiAgICBleHBvcnRzLkJhZGdlQWxlcnQgPSBCYWRnZUFsZXJ0OwogICAgZXhwb3J0cy5CYWRnZUNlbnQgPSBCYWRnZUNlbnQ7CiAgICBleHBvcnRzLkJhZGdlQ2hlY2sgPSBCYWRnZUNoZWNrOwogICAgZXhwb3J0cy5CYWRnZURvbGxhclNpZ24gPSBCYWRnZURvbGxhclNpZ247CiAgICBleHBvcnRzLkJhZGdlRXVybyA9IEJhZGdlRXVybzsKICAgIGV4cG9ydHMuQmFkZ2VIZWxwID0gQmFkZ2VRdWVzdGlvbk1hcms7CiAgICBleHBvcnRzLkJhZGdlSW5kaWFuUnVwZWUgPSBCYWRnZUluZGlhblJ1cGVlOwogICAgZXhwb3J0cy5CYWRnZUluZm8gPSBCYWRnZUluZm87CiAgICBleHBvcnRzLkJhZGdlSmFwYW5lc2VZZW4gPSBCYWRnZUphcGFuZXNlWWVuOwogICAgZXhwb3J0cy5CYWRnZU1pbnVzID0gQmFkZ2VNaW51czsKICAgIGV4cG9ydHMuQmFkZ2VQZXJjZW50ID0gQmFkZ2VQZXJjZW50OwogICAgZXhwb3J0cy5CYWRnZVBsdXMgPSBCYWRnZVBsdXM7CiAgICBleHBvcnRzLkJhZGdlUG91bmRTdGVybGluZyA9IEJhZGdlUG91bmRTdGVybGluZzsKICAgIGV4cG9ydHMuQmFkZ2VRdWVzdGlvbk1hcmsgPSBCYWRnZVF1ZXN0aW9uTWFyazsKICAgIGV4cG9ydHMuQmFkZ2VSdXNzaWFuUnVibGUgPSBCYWRnZVJ1c3NpYW5SdWJsZTsKICAgIGV4cG9ydHMuQmFkZ2VTd2lzc0ZyYW5jID0gQmFkZ2VTd2lzc0ZyYW5jOwogICAgZXhwb3J0cy5CYWRnZVR1cmtpc2hMaXJhID0gQmFkZ2VUdXJraXNoTGlyYTsKICAgIGV4cG9ydHMuQmFkZ2VYID0gQmFkZ2VYOwogICAgZXhwb3J0cy5CYWdnYWdlQ2xhaW0gPSBCYWdnYWdlQ2xhaW07CiAgICBleHBvcnRzLkJhbGxvb24gPSBCYWxsb29uOwogICAgZXhwb3J0cy5CYW4gPSBCYW47CiAgICBleHBvcnRzLkJhbmFuYSA9IEJhbmFuYTsKICAgIGV4cG9ydHMuQmFuZGFnZSA9IEJhbmRhZ2U7CiAgICBleHBvcnRzLkJhbmtub3RlID0gQmFua25vdGU7CiAgICBleHBvcnRzLkJhbmtub3RlQXJyb3dEb3duID0gQmFua25vdGVBcnJvd0Rvd247CiAgICBleHBvcnRzLkJhbmtub3RlQXJyb3dVcCA9IEJhbmtub3RlQXJyb3dVcDsKICAgIGV4cG9ydHMuQmFua25vdGVYID0gQmFua25vdGVYOwogICAgZXhwb3J0cy5CYXJDaGFydCA9IENoYXJ0Tm9BeGVzQ29sdW1uSW5jcmVhc2luZzsKICAgIGV4cG9ydHMuQmFyQ2hhcnQyID0gQ2hhcnROb0F4ZXNDb2x1bW47CiAgICBleHBvcnRzLkJhckNoYXJ0MyA9IENoYXJ0Q29sdW1uOwogICAgZXhwb3J0cy5CYXJDaGFydDQgPSBDaGFydENvbHVtbkluY3JlYXNpbmc7CiAgICBleHBvcnRzLkJhckNoYXJ0QmlnID0gQ2hhcnRDb2x1bW5CaWc7CiAgICBleHBvcnRzLkJhckNoYXJ0SG9yaXpvbnRhbCA9IENoYXJ0QmFyOwogICAgZXhwb3J0cy5CYXJDaGFydEhvcml6b250YWxCaWcgPSBDaGFydEJhckJpZzsKICAgIGV4cG9ydHMuQmFyY29kZSA9IEJhcmNvZGU7CiAgICBleHBvcnRzLkJhcnJlbCA9IEJhcnJlbDsKICAgIGV4cG9ydHMuQmFzZWxpbmUgPSBCYXNlbGluZTsKICAgIGV4cG9ydHMuQmF0aCA9IEJhdGg7CiAgICBleHBvcnRzLkJhdHRlcnkgPSBCYXR0ZXJ5OwogICAgZXhwb3J0cy5CYXR0ZXJ5Q2hhcmdpbmcgPSBCYXR0ZXJ5Q2hhcmdpbmc7CiAgICBleHBvcnRzLkJhdHRlcnlGdWxsID0gQmF0dGVyeUZ1bGw7CiAgICBleHBvcnRzLkJhdHRlcnlMb3cgPSBCYXR0ZXJ5TG93OwogICAgZXhwb3J0cy5CYXR0ZXJ5TWVkaXVtID0gQmF0dGVyeU1lZGl1bTsKICAgIGV4cG9ydHMuQmF0dGVyeVBsdXMgPSBCYXR0ZXJ5UGx1czsKICAgIGV4cG9ydHMuQmF0dGVyeVdhcm5pbmcgPSBCYXR0ZXJ5V2FybmluZzsKICAgIGV4cG9ydHMuQmVha2VyID0gQmVha2VyOwogICAgZXhwb3J0cy5CZWFuID0gQmVhbjsKICAgIGV4cG9ydHMuQmVhbk9mZiA9IEJlYW5PZmY7CiAgICBleHBvcnRzLkJlZCA9IEJlZDsKICAgIGV4cG9ydHMuQmVkRG91YmxlID0gQmVkRG91YmxlOwogICAgZXhwb3J0cy5CZWRTaW5nbGUgPSBCZWRTaW5nbGU7CiAgICBleHBvcnRzLkJlZWYgPSBCZWVmOwogICAgZXhwb3J0cy5CZWVyID0gQmVlcjsKICAgIGV4cG9ydHMuQmVlck9mZiA9IEJlZXJPZmY7CiAgICBleHBvcnRzLkJlbGwgPSBCZWxsOwogICAgZXhwb3J0cy5CZWxsRG90ID0gQmVsbERvdDsKICAgIGV4cG9ydHMuQmVsbEVsZWN0cmljID0gQmVsbEVsZWN0cmljOwogICAgZXhwb3J0cy5CZWxsTWludXMgPSBCZWxsTWludXM7CiAgICBleHBvcnRzLkJlbGxPZmYgPSBCZWxsT2ZmOwogICAgZXhwb3J0cy5CZWxsUGx1cyA9IEJlbGxQbHVzOwogICAgZXhwb3J0cy5CZWxsUmluZyA9IEJlbGxSaW5nOwogICAgZXhwb3J0cy5CZXR3ZWVuSG9yaXpvbmFsRW5kID0gQmV0d2Vlbkhvcml6b250YWxFbmQ7CiAgICBleHBvcnRzLkJldHdlZW5Ib3Jpem9uYWxTdGFydCA9IEJldHdlZW5Ib3Jpem9udGFsU3RhcnQ7CiAgICBleHBvcnRzLkJldHdlZW5Ib3Jpem9udGFsRW5kID0gQmV0d2Vlbkhvcml6b250YWxFbmQ7CiAgICBleHBvcnRzLkJldHdlZW5Ib3Jpem9udGFsU3RhcnQgPSBCZXR3ZWVuSG9yaXpvbnRhbFN0YXJ0OwogICAgZXhwb3J0cy5CZXR3ZWVuVmVydGljYWxFbmQgPSBCZXR3ZWVuVmVydGljYWxFbmQ7CiAgICBleHBvcnRzLkJldHdlZW5WZXJ0aWNhbFN0YXJ0ID0gQmV0d2VlblZlcnRpY2FsU3RhcnQ7CiAgICBleHBvcnRzLkJpY2Vwc0ZsZXhlZCA9IEJpY2Vwc0ZsZXhlZDsKICAgIGV4cG9ydHMuQmlrZSA9IEJpa2U7CiAgICBleHBvcnRzLkJpbmFyeSA9IEJpbmFyeTsKICAgIGV4cG9ydHMuQmlub2N1bGFycyA9IEJpbm9jdWxhcnM7CiAgICBleHBvcnRzLkJpb2hhemFyZCA9IEJpb2hhemFyZDsKICAgIGV4cG9ydHMuQmlyZCA9IEJpcmQ7CiAgICBleHBvcnRzLkJpcmRob3VzZSA9IEJpcmRob3VzZTsKICAgIGV4cG9ydHMuQml0Y29pbiA9IEJpdGNvaW47CiAgICBleHBvcnRzLkJsZW5kID0gQmxlbmQ7CiAgICBleHBvcnRzLkJsaW5kcyA9IEJsaW5kczsKICAgIGV4cG9ydHMuQmxvY2tzID0gQmxvY2tzOwogICAgZXhwb3J0cy5CbHVldG9vdGggPSBCbHVldG9vdGg7CiAgICBleHBvcnRzLkJsdWV0b290aENvbm5lY3RlZCA9IEJsdWV0b290aENvbm5lY3RlZDsKICAgIGV4cG9ydHMuQmx1ZXRvb3RoT2ZmID0gQmx1ZXRvb3RoT2ZmOwogICAgZXhwb3J0cy5CbHVldG9vdGhTZWFyY2hpbmcgPSBCbHVldG9vdGhTZWFyY2hpbmc7CiAgICBleHBvcnRzLkJvbGQgPSBCb2xkOwogICAgZXhwb3J0cy5Cb2x0ID0gQm9sdDsKICAgIGV4cG9ydHMuQm9tYiA9IEJvbWI7CiAgICBleHBvcnRzLkJvbmUgPSBCb25lOwogICAgZXhwb3J0cy5Cb29rID0gQm9vazsKICAgIGV4cG9ydHMuQm9va0EgPSBCb29rQTsKICAgIGV4cG9ydHMuQm9va0FsZXJ0ID0gQm9va0FsZXJ0OwogICAgZXhwb3J0cy5Cb29rQXVkaW8gPSBCb29rQXVkaW87CiAgICBleHBvcnRzLkJvb2tDaGVjayA9IEJvb2tDaGVjazsKICAgIGV4cG9ydHMuQm9va0NvcHkgPSBCb29rQ29weTsKICAgIGV4cG9ydHMuQm9va0Rhc2hlZCA9IEJvb2tEYXNoZWQ7CiAgICBleHBvcnRzLkJvb2tEb3duID0gQm9va0Rvd247CiAgICBleHBvcnRzLkJvb2tIZWFkcGhvbmVzID0gQm9va0hlYWRwaG9uZXM7CiAgICBleHBvcnRzLkJvb2tIZWFydCA9IEJvb2tIZWFydDsKICAgIGV4cG9ydHMuQm9va0ltYWdlID0gQm9va0ltYWdlOwogICAgZXhwb3J0cy5Cb29rS2V5ID0gQm9va0tleTsKICAgIGV4cG9ydHMuQm9va0xvY2sgPSBCb29rTG9jazsKICAgIGV4cG9ydHMuQm9va01hcmtlZCA9IEJvb2tNYXJrZWQ7CiAgICBleHBvcnRzLkJvb2tNaW51cyA9IEJvb2tNaW51czsKICAgIGV4cG9ydHMuQm9va09wZW4gPSBCb29rT3BlbjsKICAgIGV4cG9ydHMuQm9va09wZW5DaGVjayA9IEJvb2tPcGVuQ2hlY2s7CiAgICBleHBvcnRzLkJvb2tPcGVuVGV4dCA9IEJvb2tPcGVuVGV4dDsKICAgIGV4cG9ydHMuQm9va1BsdXMgPSBCb29rUGx1czsKICAgIGV4cG9ydHMuQm9va1NlYXJjaCA9IEJvb2tTZWFyY2g7CiAgICBleHBvcnRzLkJvb2tUZW1wbGF0ZSA9IEJvb2tEYXNoZWQ7CiAgICBleHBvcnRzLkJvb2tUZXh0ID0gQm9va1RleHQ7CiAgICBleHBvcnRzLkJvb2tUeXBlID0gQm9va1R5cGU7CiAgICBleHBvcnRzLkJvb2tVcCA9IEJvb2tVcDsKICAgIGV4cG9ydHMuQm9va1VwMiA9IEJvb2tVcDI7CiAgICBleHBvcnRzLkJvb2tVc2VyID0gQm9va1VzZXI7CiAgICBleHBvcnRzLkJvb2tYID0gQm9va1g7CiAgICBleHBvcnRzLkJvb2ttYXJrID0gQm9va21hcms7CiAgICBleHBvcnRzLkJvb2ttYXJrQ2hlY2sgPSBCb29rbWFya0NoZWNrOwogICAgZXhwb3J0cy5Cb29rbWFya01pbnVzID0gQm9va21hcmtNaW51czsKICAgIGV4cG9ydHMuQm9va21hcmtQbHVzID0gQm9va21hcmtQbHVzOwogICAgZXhwb3J0cy5Cb29rbWFya1ggPSBCb29rbWFya1g7CiAgICBleHBvcnRzLkJvb21Cb3ggPSBCb29tQm94OwogICAgZXhwb3J0cy5Cb3QgPSBCb3Q7CiAgICBleHBvcnRzLkJvdE1lc3NhZ2VTcXVhcmUgPSBCb3RNZXNzYWdlU3F1YXJlOwogICAgZXhwb3J0cy5Cb3RPZmYgPSBCb3RPZmY7CiAgICBleHBvcnRzLkJvdHRsZVdpbmUgPSBCb3R0bGVXaW5lOwogICAgZXhwb3J0cy5Cb3dBcnJvdyA9IEJvd0Fycm93OwogICAgZXhwb3J0cy5Cb3ggPSBCb3g7CiAgICBleHBvcnRzLkJveFNlbGVjdCA9IFNxdWFyZURhc2hlZDsKICAgIGV4cG9ydHMuQm94ZXMgPSBCb3hlczsKICAgIGV4cG9ydHMuQnJhY2VzID0gQnJhY2VzOwogICAgZXhwb3J0cy5CcmFja2V0cyA9IEJyYWNrZXRzOwogICAgZXhwb3J0cy5CcmFpbiA9IEJyYWluOwogICAgZXhwb3J0cy5CcmFpbkNpcmN1aXQgPSBCcmFpbkNpcmN1aXQ7CiAgICBleHBvcnRzLkJyYWluQ29nID0gQnJhaW5Db2c7CiAgICBleHBvcnRzLkJyaWNrV2FsbCA9IEJyaWNrV2FsbDsKICAgIGV4cG9ydHMuQnJpY2tXYWxsRmlyZSA9IEJyaWNrV2FsbEZpcmU7CiAgICBleHBvcnRzLkJyaWNrV2FsbFNoaWVsZCA9IEJyaWNrV2FsbFNoaWVsZDsKICAgIGV4cG9ydHMuQnJpZWZjYXNlID0gQnJpZWZjYXNlOwogICAgZXhwb3J0cy5CcmllZmNhc2VCdXNpbmVzcyA9IEJyaWVmY2FzZUJ1c2luZXNzOwogICAgZXhwb3J0cy5CcmllZmNhc2VDb252ZXlvckJlbHQgPSBCcmllZmNhc2VDb252ZXlvckJlbHQ7CiAgICBleHBvcnRzLkJyaWVmY2FzZU1lZGljYWwgPSBCcmllZmNhc2VNZWRpY2FsOwogICAgZXhwb3J0cy5CcmluZ1RvRnJvbnQgPSBCcmluZ1RvRnJvbnQ7CiAgICBleHBvcnRzLkJydXNoID0gQnJ1c2g7CiAgICBleHBvcnRzLkJydXNoQ2xlYW5pbmcgPSBCcnVzaENsZWFuaW5nOwogICAgZXhwb3J0cy5CdWJibGVzID0gQnViYmxlczsKICAgIGV4cG9ydHMuQnVnID0gQnVnOwogICAgZXhwb3J0cy5CdWdPZmYgPSBCdWdPZmY7CiAgICBleHBvcnRzLkJ1Z1BsYXkgPSBCdWdQbGF5OwogICAgZXhwb3J0cy5CdWlsZGluZyA9IEJ1aWxkaW5nOwogICAgZXhwb3J0cy5CdWlsZGluZzIgPSBCdWlsZGluZzI7CiAgICBleHBvcnRzLkJ1cyA9IEJ1czsKICAgIGV4cG9ydHMuQnVzRnJvbnQgPSBCdXNGcm9udDsKICAgIGV4cG9ydHMuQ2FibGUgPSBDYWJsZTsKICAgIGV4cG9ydHMuQ2FibGVDYXIgPSBDYWJsZUNhcjsKICAgIGV4cG9ydHMuQ2FrZSA9IENha2U7CiAgICBleHBvcnRzLkNha2VTbGljZSA9IENha2VTbGljZTsKICAgIGV4cG9ydHMuQ2FsY3VsYXRvciA9IENhbGN1bGF0b3I7CiAgICBleHBvcnRzLkNhbGVuZGFyID0gQ2FsZW5kYXI7CiAgICBleHBvcnRzLkNhbGVuZGFyMSA9IENhbGVuZGFyMTsKICAgIGV4cG9ydHMuQ2FsZW5kYXJBcnJvd0Rvd24gPSBDYWxlbmRhckFycm93RG93bjsKICAgIGV4cG9ydHMuQ2FsZW5kYXJBcnJvd1VwID0gQ2FsZW5kYXJBcnJvd1VwOwogICAgZXhwb3J0cy5DYWxlbmRhckNoZWNrID0gQ2FsZW5kYXJDaGVjazsKICAgIGV4cG9ydHMuQ2FsZW5kYXJDaGVjazIgPSBDYWxlbmRhckNoZWNrMjsKICAgIGV4cG9ydHMuQ2FsZW5kYXJDbG9jayA9IENhbGVuZGFyQ2xvY2s7CiAgICBleHBvcnRzLkNhbGVuZGFyQ29nID0gQ2FsZW5kYXJDb2c7CiAgICBleHBvcnRzLkNhbGVuZGFyRGF5cyA9IENhbGVuZGFyRGF5czsKICAgIGV4cG9ydHMuQ2FsZW5kYXJGb2xkID0gQ2FsZW5kYXJGb2xkOwogICAgZXhwb3J0cy5DYWxlbmRhckhlYXJ0ID0gQ2FsZW5kYXJIZWFydDsKICAgIGV4cG9ydHMuQ2FsZW5kYXJNaW51cyA9IENhbGVuZGFyTWludXM7CiAgICBleHBvcnRzLkNhbGVuZGFyTWludXMyID0gQ2FsZW5kYXJNaW51czI7CiAgICBleHBvcnRzLkNhbGVuZGFyT2ZmID0gQ2FsZW5kYXJPZmY7CiAgICBleHBvcnRzLkNhbGVuZGFyUGx1cyA9IENhbGVuZGFyUGx1czsKICAgIGV4cG9ydHMuQ2FsZW5kYXJQbHVzMiA9IENhbGVuZGFyUGx1czI7CiAgICBleHBvcnRzLkNhbGVuZGFyUmFuZ2UgPSBDYWxlbmRhclJhbmdlOwogICAgZXhwb3J0cy5DYWxlbmRhclNlYXJjaCA9IENhbGVuZGFyU2VhcmNoOwogICAgZXhwb3J0cy5DYWxlbmRhclN5bmMgPSBDYWxlbmRhclN5bmM7CiAgICBleHBvcnRzLkNhbGVuZGFyWCA9IENhbGVuZGFyWDsKICAgIGV4cG9ydHMuQ2FsZW5kYXJYMiA9IENhbGVuZGFyWDI7CiAgICBleHBvcnRzLkNhbGVuZGFycyA9IENhbGVuZGFyczsKICAgIGV4cG9ydHMuQ2FtZXJhID0gQ2FtZXJhOwogICAgZXhwb3J0cy5DYW1lcmFPZmYgPSBDYW1lcmFPZmY7CiAgICBleHBvcnRzLkNhbmRsZXN0aWNrQ2hhcnQgPSBDaGFydENhbmRsZXN0aWNrOwogICAgZXhwb3J0cy5DYW5keSA9IENhbmR5OwogICAgZXhwb3J0cy5DYW5keUNhbmUgPSBDYW5keUNhbmU7CiAgICBleHBvcnRzLkNhbmR5T2ZmID0gQ2FuZHlPZmY7CiAgICBleHBvcnRzLkNhbm5hYmlzID0gQ2FubmFiaXM7CiAgICBleHBvcnRzLkNhbm5hYmlzT2ZmID0gQ2FubmFiaXNPZmY7CiAgICBleHBvcnRzLkNhcHRpb25zID0gQ2FwdGlvbnM7CiAgICBleHBvcnRzLkNhcHRpb25zT2ZmID0gQ2FwdGlvbnNPZmY7CiAgICBleHBvcnRzLkNhciA9IENhcjsKICAgIGV4cG9ydHMuQ2FyRnJvbnQgPSBDYXJGcm9udDsKICAgIGV4cG9ydHMuQ2FyVGF4aUZyb250ID0gQ2FyVGF4aUZyb250OwogICAgZXhwb3J0cy5DYXJhdmFuID0gQ2FyYXZhbjsKICAgIGV4cG9ydHMuQ2FyZFNpbSA9IENhcmRTaW07CiAgICBleHBvcnRzLkNhcnJvdCA9IENhcnJvdDsKICAgIGV4cG9ydHMuQ2FzZUxvd2VyID0gQ2FzZUxvd2VyOwogICAgZXhwb3J0cy5DYXNlU2Vuc2l0aXZlID0gQ2FzZVNlbnNpdGl2ZTsKICAgIGV4cG9ydHMuQ2FzZVVwcGVyID0gQ2FzZVVwcGVyOwogICAgZXhwb3J0cy5DYXNzZXR0ZVRhcGUgPSBDYXNzZXR0ZVRhcGU7CiAgICBleHBvcnRzLkNhc3QgPSBDYXN0OwogICAgZXhwb3J0cy5DYXN0bGUgPSBDYXN0bGU7CiAgICBleHBvcnRzLkNhdCA9IENhdDsKICAgIGV4cG9ydHMuQ2N0diA9IENjdHY7CiAgICBleHBvcnRzLkNoYXJ0QXJlYSA9IENoYXJ0QXJlYTsKICAgIGV4cG9ydHMuQ2hhcnRCYXIgPSBDaGFydEJhcjsKICAgIGV4cG9ydHMuQ2hhcnRCYXJCaWcgPSBDaGFydEJhckJpZzsKICAgIGV4cG9ydHMuQ2hhcnRCYXJEZWNyZWFzaW5nID0gQ2hhcnRCYXJEZWNyZWFzaW5nOwogICAgZXhwb3J0cy5DaGFydEJhckluY3JlYXNpbmcgPSBDaGFydEJhckluY3JlYXNpbmc7CiAgICBleHBvcnRzLkNoYXJ0QmFyU3RhY2tlZCA9IENoYXJ0QmFyU3RhY2tlZDsKICAgIGV4cG9ydHMuQ2hhcnRDYW5kbGVzdGljayA9IENoYXJ0Q2FuZGxlc3RpY2s7CiAgICBleHBvcnRzLkNoYXJ0Q29sdW1uID0gQ2hhcnRDb2x1bW47CiAgICBleHBvcnRzLkNoYXJ0Q29sdW1uQmlnID0gQ2hhcnRDb2x1bW5CaWc7CiAgICBleHBvcnRzLkNoYXJ0Q29sdW1uRGVjcmVhc2luZyA9IENoYXJ0Q29sdW1uRGVjcmVhc2luZzsKICAgIGV4cG9ydHMuQ2hhcnRDb2x1bW5JbmNyZWFzaW5nID0gQ2hhcnRDb2x1bW5JbmNyZWFzaW5nOwogICAgZXhwb3J0cy5DaGFydENvbHVtblN0YWNrZWQgPSBDaGFydENvbHVtblN0YWNrZWQ7CiAgICBleHBvcnRzLkNoYXJ0R2FudHQgPSBDaGFydEdhbnR0OwogICAgZXhwb3J0cy5DaGFydExpbmUgPSBDaGFydExpbmU7CiAgICBleHBvcnRzLkNoYXJ0TmV0d29yayA9IENoYXJ0TmV0d29yazsKICAgIGV4cG9ydHMuQ2hhcnROb0F4ZXNDb2x1bW4gPSBDaGFydE5vQXhlc0NvbHVtbjsKICAgIGV4cG9ydHMuQ2hhcnROb0F4ZXNDb2x1bW5EZWNyZWFzaW5nID0gQ2hhcnROb0F4ZXNDb2x1bW5EZWNyZWFzaW5nOwogICAgZXhwb3J0cy5DaGFydE5vQXhlc0NvbHVtbkluY3JlYXNpbmcgPSBDaGFydE5vQXhlc0NvbHVtbkluY3JlYXNpbmc7CiAgICBleHBvcnRzLkNoYXJ0Tm9BeGVzQ29tYmluZWQgPSBDaGFydE5vQXhlc0NvbWJpbmVkOwogICAgZXhwb3J0cy5DaGFydE5vQXhlc0dhbnR0ID0gQ2hhcnROb0F4ZXNHYW50dDsKICAgIGV4cG9ydHMuQ2hhcnRQaWUgPSBDaGFydFBpZTsKICAgIGV4cG9ydHMuQ2hhcnRTY2F0dGVyID0gQ2hhcnRTY2F0dGVyOwogICAgZXhwb3J0cy5DaGFydFNwbGluZSA9IENoYXJ0U3BsaW5lOwogICAgZXhwb3J0cy5DaGVjayA9IENoZWNrOwogICAgZXhwb3J0cy5DaGVja0NoZWNrID0gQ2hlY2tDaGVjazsKICAgIGV4cG9ydHMuQ2hlY2tDaXJjbGUgPSBDaXJjbGVDaGVja0JpZzsKICAgIGV4cG9ydHMuQ2hlY2tDaXJjbGUyID0gQ2lyY2xlQ2hlY2s7CiAgICBleHBvcnRzLkNoZWNrTGluZSA9IENoZWNrTGluZTsKICAgIGV4cG9ydHMuQ2hlY2tTcXVhcmUgPSBTcXVhcmVDaGVja0JpZzsKICAgIGV4cG9ydHMuQ2hlY2tTcXVhcmUyID0gU3F1YXJlQ2hlY2s7CiAgICBleHBvcnRzLkNoZWZIYXQgPSBDaGVmSGF0OwogICAgZXhwb3J0cy5DaGVycnkgPSBDaGVycnk7CiAgICBleHBvcnRzLkNoZXNzQmlzaG9wID0gQ2hlc3NCaXNob3A7CiAgICBleHBvcnRzLkNoZXNzS2luZyA9IENoZXNzS2luZzsKICAgIGV4cG9ydHMuQ2hlc3NLbmlnaHQgPSBDaGVzc0tuaWdodDsKICAgIGV4cG9ydHMuQ2hlc3NQYXduID0gQ2hlc3NQYXduOwogICAgZXhwb3J0cy5DaGVzc1F1ZWVuID0gQ2hlc3NRdWVlbjsKICAgIGV4cG9ydHMuQ2hlc3NSb29rID0gQ2hlc3NSb29rOwogICAgZXhwb3J0cy5DaGV2cm9uRG93biA9IENoZXZyb25Eb3duOwogICAgZXhwb3J0cy5DaGV2cm9uRG93bkNpcmNsZSA9IENpcmNsZUNoZXZyb25Eb3duOwogICAgZXhwb3J0cy5DaGV2cm9uRG93blNxdWFyZSA9IFNxdWFyZUNoZXZyb25Eb3duOwogICAgZXhwb3J0cy5DaGV2cm9uRmlyc3QgPSBDaGV2cm9uRmlyc3Q7CiAgICBleHBvcnRzLkNoZXZyb25MYXN0ID0gQ2hldnJvbkxhc3Q7CiAgICBleHBvcnRzLkNoZXZyb25MZWZ0ID0gQ2hldnJvbkxlZnQ7CiAgICBleHBvcnRzLkNoZXZyb25MZWZ0Q2lyY2xlID0gQ2lyY2xlQ2hldnJvbkxlZnQ7CiAgICBleHBvcnRzLkNoZXZyb25MZWZ0U3F1YXJlID0gU3F1YXJlQ2hldnJvbkxlZnQ7CiAgICBleHBvcnRzLkNoZXZyb25SaWdodCA9IENoZXZyb25SaWdodDsKICAgIGV4cG9ydHMuQ2hldnJvblJpZ2h0Q2lyY2xlID0gQ2lyY2xlQ2hldnJvblJpZ2h0OwogICAgZXhwb3J0cy5DaGV2cm9uUmlnaHRTcXVhcmUgPSBTcXVhcmVDaGV2cm9uUmlnaHQ7CiAgICBleHBvcnRzLkNoZXZyb25VcCA9IENoZXZyb25VcDsKICAgIGV4cG9ydHMuQ2hldnJvblVwQ2lyY2xlID0gQ2lyY2xlQ2hldnJvblVwOwogICAgZXhwb3J0cy5DaGV2cm9uVXBTcXVhcmUgPSBTcXVhcmVDaGV2cm9uVXA7CiAgICBleHBvcnRzLkNoZXZyb25zRG93biA9IENoZXZyb25zRG93bjsKICAgIGV4cG9ydHMuQ2hldnJvbnNEb3duVXAgPSBDaGV2cm9uc0Rvd25VcDsKICAgIGV4cG9ydHMuQ2hldnJvbnNMZWZ0ID0gQ2hldnJvbnNMZWZ0OwogICAgZXhwb3J0cy5DaGV2cm9uc0xlZnRSaWdodCA9IENoZXZyb25zTGVmdFJpZ2h0OwogICAgZXhwb3J0cy5DaGV2cm9uc0xlZnRSaWdodEVsbGlwc2lzID0gQ2hldnJvbnNMZWZ0UmlnaHRFbGxpcHNpczsKICAgIGV4cG9ydHMuQ2hldnJvbnNSaWdodCA9IENoZXZyb25zUmlnaHQ7CiAgICBleHBvcnRzLkNoZXZyb25zUmlnaHRMZWZ0ID0gQ2hldnJvbnNSaWdodExlZnQ7CiAgICBleHBvcnRzLkNoZXZyb25zVXAgPSBDaGV2cm9uc1VwOwogICAgZXhwb3J0cy5DaGV2cm9uc1VwRG93biA9IENoZXZyb25zVXBEb3duOwogICAgZXhwb3J0cy5DaHJvbWUgPSBDaHJvbWl1bTsKICAgIGV4cG9ydHMuQ2hyb21pdW0gPSBDaHJvbWl1bTsKICAgIGV4cG9ydHMuQ2h1cmNoID0gQ2h1cmNoOwogICAgZXhwb3J0cy5DaWdhcmV0dGUgPSBDaWdhcmV0dGU7CiAgICBleHBvcnRzLkNpZ2FyZXR0ZU9mZiA9IENpZ2FyZXR0ZU9mZjsKICAgIGV4cG9ydHMuQ2lyY2xlID0gQ2lyY2xlOwogICAgZXhwb3J0cy5DaXJjbGVBbGVydCA9IENpcmNsZUFsZXJ0OwogICAgZXhwb3J0cy5DaXJjbGVBcnJvd0Rvd24gPSBDaXJjbGVBcnJvd0Rvd247CiAgICBleHBvcnRzLkNpcmNsZUFycm93TGVmdCA9IENpcmNsZUFycm93TGVmdDsKICAgIGV4cG9ydHMuQ2lyY2xlQXJyb3dPdXREb3duTGVmdCA9IENpcmNsZUFycm93T3V0RG93bkxlZnQ7CiAgICBleHBvcnRzLkNpcmNsZUFycm93T3V0RG93blJpZ2h0ID0gQ2lyY2xlQXJyb3dPdXREb3duUmlnaHQ7CiAgICBleHBvcnRzLkNpcmNsZUFycm93T3V0VXBMZWZ0ID0gQ2lyY2xlQXJyb3dPdXRVcExlZnQ7CiAgICBleHBvcnRzLkNpcmNsZUFycm93T3V0VXBSaWdodCA9IENpcmNsZUFycm93T3V0VXBSaWdodDsKICAgIGV4cG9ydHMuQ2lyY2xlQXJyb3dSaWdodCA9IENpcmNsZUFycm93UmlnaHQ7CiAgICBleHBvcnRzLkNpcmNsZUFycm93VXAgPSBDaXJjbGVBcnJvd1VwOwogICAgZXhwb3J0cy5DaXJjbGVDaGVjayA9IENpcmNsZUNoZWNrOwogICAgZXhwb3J0cy5DaXJjbGVDaGVja0JpZyA9IENpcmNsZUNoZWNrQmlnOwogICAgZXhwb3J0cy5DaXJjbGVDaGV2cm9uRG93biA9IENpcmNsZUNoZXZyb25Eb3duOwogICAgZXhwb3J0cy5DaXJjbGVDaGV2cm9uTGVmdCA9IENpcmNsZUNoZXZyb25MZWZ0OwogICAgZXhwb3J0cy5DaXJjbGVDaGV2cm9uUmlnaHQgPSBDaXJjbGVDaGV2cm9uUmlnaHQ7CiAgICBleHBvcnRzLkNpcmNsZUNoZXZyb25VcCA9IENpcmNsZUNoZXZyb25VcDsKICAgIGV4cG9ydHMuQ2lyY2xlRGFzaGVkID0gQ2lyY2xlRGFzaGVkOwogICAgZXhwb3J0cy5DaXJjbGVEaXZpZGUgPSBDaXJjbGVEaXZpZGU7CiAgICBleHBvcnRzLkNpcmNsZURvbGxhclNpZ24gPSBDaXJjbGVEb2xsYXJTaWduOwogICAgZXhwb3J0cy5DaXJjbGVEb3QgPSBDaXJjbGVEb3Q7CiAgICBleHBvcnRzLkNpcmNsZURvdERhc2hlZCA9IENpcmNsZURvdERhc2hlZDsKICAgIGV4cG9ydHMuQ2lyY2xlRWxsaXBzaXMgPSBDaXJjbGVFbGxpcHNpczsKICAgIGV4cG9ydHMuQ2lyY2xlRXF1YWwgPSBDaXJjbGVFcXVhbDsKICAgIGV4cG9ydHMuQ2lyY2xlRmFkaW5nQXJyb3dVcCA9IENpcmNsZUZhZGluZ0Fycm93VXA7CiAgICBleHBvcnRzLkNpcmNsZUZhZGluZ1BsdXMgPSBDaXJjbGVGYWRpbmdQbHVzOwogICAgZXhwb3J0cy5DaXJjbGVHYXVnZSA9IENpcmNsZUdhdWdlOwogICAgZXhwb3J0cy5DaXJjbGVIZWxwID0gQ2lyY2xlUXVlc3Rpb25NYXJrOwogICAgZXhwb3J0cy5DaXJjbGVNaW51cyA9IENpcmNsZU1pbnVzOwogICAgZXhwb3J0cy5DaXJjbGVPZmYgPSBDaXJjbGVPZmY7CiAgICBleHBvcnRzLkNpcmNsZVBhcmtpbmcgPSBDaXJjbGVQYXJraW5nOwogICAgZXhwb3J0cy5DaXJjbGVQYXJraW5nT2ZmID0gQ2lyY2xlUGFya2luZ09mZjsKICAgIGV4cG9ydHMuQ2lyY2xlUGF1c2UgPSBDaXJjbGVQYXVzZTsKICAgIGV4cG9ydHMuQ2lyY2xlUGVyY2VudCA9IENpcmNsZVBlcmNlbnQ7CiAgICBleHBvcnRzLkNpcmNsZVBpbGUgPSBDaXJjbGVQaWxlOwogICAgZXhwb3J0cy5DaXJjbGVQbGF5ID0gQ2lyY2xlUGxheTsKICAgIGV4cG9ydHMuQ2lyY2xlUGx1cyA9IENpcmNsZVBsdXM7CiAgICBleHBvcnRzLkNpcmNsZVBvdW5kU3RlcmxpbmcgPSBDaXJjbGVQb3VuZFN0ZXJsaW5nOwogICAgZXhwb3J0cy5DaXJjbGVQb3dlciA9IENpcmNsZVBvd2VyOwogICAgZXhwb3J0cy5DaXJjbGVRdWVzdGlvbk1hcmsgPSBDaXJjbGVRdWVzdGlvbk1hcms7CiAgICBleHBvcnRzLkNpcmNsZVNsYXNoID0gQ2lyY2xlU2xhc2g7CiAgICBleHBvcnRzLkNpcmNsZVNsYXNoMiA9IENpcmNsZVNsYXNoMjsKICAgIGV4cG9ydHMuQ2lyY2xlU2xhc2hlZCA9IENpcmNsZVNsYXNoMjsKICAgIGV4cG9ydHMuQ2lyY2xlU21hbGwgPSBDaXJjbGVTbWFsbDsKICAgIGV4cG9ydHMuQ2lyY2xlU3RhciA9IENpcmNsZVN0YXI7CiAgICBleHBvcnRzLkNpcmNsZVN0b3AgPSBDaXJjbGVTdG9wOwogICAgZXhwb3J0cy5DaXJjbGVVc2VyID0gQ2lyY2xlVXNlcjsKICAgIGV4cG9ydHMuQ2lyY2xlVXNlclJvdW5kID0gQ2lyY2xlVXNlclJvdW5kOwogICAgZXhwb3J0cy5DaXJjbGVYID0gQ2lyY2xlWDsKICAgIGV4cG9ydHMuQ2lyY3VpdEJvYXJkID0gQ2lyY3VpdEJvYXJkOwogICAgZXhwb3J0cy5DaXRydXMgPSBDaXRydXM7CiAgICBleHBvcnRzLkNsYXBwZXJib2FyZCA9IENsYXBwZXJib2FyZDsKICAgIGV4cG9ydHMuQ2xpcGJvYXJkID0gQ2xpcGJvYXJkOwogICAgZXhwb3J0cy5DbGlwYm9hcmRDaGVjayA9IENsaXBib2FyZENoZWNrOwogICAgZXhwb3J0cy5DbGlwYm9hcmRDbG9jayA9IENsaXBib2FyZENsb2NrOwogICAgZXhwb3J0cy5DbGlwYm9hcmRDb3B5ID0gQ2xpcGJvYXJkQ29weTsKICAgIGV4cG9ydHMuQ2xpcGJvYXJkRWRpdCA9IENsaXBib2FyZFBlbjsKICAgIGV4cG9ydHMuQ2xpcGJvYXJkTGlzdCA9IENsaXBib2FyZExpc3Q7CiAgICBleHBvcnRzLkNsaXBib2FyZE1pbnVzID0gQ2xpcGJvYXJkTWludXM7CiAgICBleHBvcnRzLkNsaXBib2FyZFBhc3RlID0gQ2xpcGJvYXJkUGFzdGU7CiAgICBleHBvcnRzLkNsaXBib2FyZFBlbiA9IENsaXBib2FyZFBlbjsKICAgIGV4cG9ydHMuQ2xpcGJvYXJkUGVuTGluZSA9IENsaXBib2FyZFBlbkxpbmU7CiAgICBleHBvcnRzLkNsaXBib2FyZFBsdXMgPSBDbGlwYm9hcmRQbHVzOwogICAgZXhwb3J0cy5DbGlwYm9hcmRTaWduYXR1cmUgPSBDbGlwYm9hcmRQZW5MaW5lOwogICAgZXhwb3J0cy5DbGlwYm9hcmRUeXBlID0gQ2xpcGJvYXJkVHlwZTsKICAgIGV4cG9ydHMuQ2xpcGJvYXJkWCA9IENsaXBib2FyZFg7CiAgICBleHBvcnRzLkNsb2NrID0gQ2xvY2s7CiAgICBleHBvcnRzLkNsb2NrMSA9IENsb2NrMTsKICAgIGV4cG9ydHMuQ2xvY2sxMCA9IENsb2NrMTA7CiAgICBleHBvcnRzLkNsb2NrMTEgPSBDbG9jazExOwogICAgZXhwb3J0cy5DbG9jazEyID0gQ2xvY2sxMjsKICAgIGV4cG9ydHMuQ2xvY2syID0gQ2xvY2syOwogICAgZXhwb3J0cy5DbG9jazMgPSBDbG9jazM7CiAgICBleHBvcnRzLkNsb2NrNCA9IENsb2NrNDsKICAgIGV4cG9ydHMuQ2xvY2s1ID0gQ2xvY2s1OwogICAgZXhwb3J0cy5DbG9jazYgPSBDbG9jazY7CiAgICBleHBvcnRzLkNsb2NrNyA9IENsb2NrNzsKICAgIGV4cG9ydHMuQ2xvY2s4ID0gQ2xvY2s4OwogICAgZXhwb3J0cy5DbG9jazkgPSBDbG9jazk7CiAgICBleHBvcnRzLkNsb2NrQWxlcnQgPSBDbG9ja0FsZXJ0OwogICAgZXhwb3J0cy5DbG9ja0Fycm93RG93biA9IENsb2NrQXJyb3dEb3duOwogICAgZXhwb3J0cy5DbG9ja0Fycm93VXAgPSBDbG9ja0Fycm93VXA7CiAgICBleHBvcnRzLkNsb2NrQ2hlY2sgPSBDbG9ja0NoZWNrOwogICAgZXhwb3J0cy5DbG9ja0ZhZGluZyA9IENsb2NrRmFkaW5nOwogICAgZXhwb3J0cy5DbG9ja1BsdXMgPSBDbG9ja1BsdXM7CiAgICBleHBvcnRzLkNsb3NlZENhcHRpb24gPSBDbG9zZWRDYXB0aW9uOwogICAgZXhwb3J0cy5DbG91ZCA9IENsb3VkOwogICAgZXhwb3J0cy5DbG91ZEFsZXJ0ID0gQ2xvdWRBbGVydDsKICAgIGV4cG9ydHMuQ2xvdWRCYWNrdXAgPSBDbG91ZEJhY2t1cDsKICAgIGV4cG9ydHMuQ2xvdWRDaGVjayA9IENsb3VkQ2hlY2s7CiAgICBleHBvcnRzLkNsb3VkQ29nID0gQ2xvdWRDb2c7CiAgICBleHBvcnRzLkNsb3VkRG93bmxvYWQgPSBDbG91ZERvd25sb2FkOwogICAgZXhwb3J0cy5DbG91ZERyaXp6bGUgPSBDbG91ZERyaXp6bGU7CiAgICBleHBvcnRzLkNsb3VkRm9nID0gQ2xvdWRGb2c7CiAgICBleHBvcnRzLkNsb3VkSGFpbCA9IENsb3VkSGFpbDsKICAgIGV4cG9ydHMuQ2xvdWRMaWdodG5pbmcgPSBDbG91ZExpZ2h0bmluZzsKICAgIGV4cG9ydHMuQ2xvdWRNb29uID0gQ2xvdWRNb29uOwogICAgZXhwb3J0cy5DbG91ZE1vb25SYWluID0gQ2xvdWRNb29uUmFpbjsKICAgIGV4cG9ydHMuQ2xvdWRPZmYgPSBDbG91ZE9mZjsKICAgIGV4cG9ydHMuQ2xvdWRSYWluID0gQ2xvdWRSYWluOwogICAgZXhwb3J0cy5DbG91ZFJhaW5XaW5kID0gQ2xvdWRSYWluV2luZDsKICAgIGV4cG9ydHMuQ2xvdWRTbm93ID0gQ2xvdWRTbm93OwogICAgZXhwb3J0cy5DbG91ZFN1biA9IENsb3VkU3VuOwogICAgZXhwb3J0cy5DbG91ZFN1blJhaW4gPSBDbG91ZFN1blJhaW47CiAgICBleHBvcnRzLkNsb3VkU3luYyA9IENsb3VkU3luYzsKICAgIGV4cG9ydHMuQ2xvdWRVcGxvYWQgPSBDbG91ZFVwbG9hZDsKICAgIGV4cG9ydHMuQ2xvdWR5ID0gQ2xvdWR5OwogICAgZXhwb3J0cy5DbG92ZXIgPSBDbG92ZXI7CiAgICBleHBvcnRzLkNsdWIgPSBDbHViOwogICAgZXhwb3J0cy5Db2RlID0gQ29kZTsKICAgIGV4cG9ydHMuQ29kZTIgPSBDb2RlWG1sOwogICAgZXhwb3J0cy5Db2RlU3F1YXJlID0gU3F1YXJlQ29kZTsKICAgIGV4cG9ydHMuQ29kZVhtbCA9IENvZGVYbWw7CiAgICBleHBvcnRzLkNvZGVwZW4gPSBDb2RlcGVuOwogICAgZXhwb3J0cy5Db2Rlc2FuZGJveCA9IENvZGVzYW5kYm94OwogICAgZXhwb3J0cy5Db2ZmZWUgPSBDb2ZmZWU7CiAgICBleHBvcnRzLkNvZyA9IENvZzsKICAgIGV4cG9ydHMuQ29pbnMgPSBDb2luczsKICAgIGV4cG9ydHMuQ29sdW1ucyA9IENvbHVtbnMyOwogICAgZXhwb3J0cy5Db2x1bW5zMiA9IENvbHVtbnMyOwogICAgZXhwb3J0cy5Db2x1bW5zMyA9IENvbHVtbnMzOwogICAgZXhwb3J0cy5Db2x1bW5zM0NvZyA9IENvbHVtbnMzQ29nOwogICAgZXhwb3J0cy5Db2x1bW5zNCA9IENvbHVtbnM0OwogICAgZXhwb3J0cy5Db2x1bW5zU2V0dGluZ3MgPSBDb2x1bW5zM0NvZzsKICAgIGV4cG9ydHMuQ29tYmluZSA9IENvbWJpbmU7CiAgICBleHBvcnRzLkNvbW1hbmQgPSBDb21tYW5kOwogICAgZXhwb3J0cy5Db21wYXNzID0gQ29tcGFzczsKICAgIGV4cG9ydHMuQ29tcG9uZW50ID0gQ29tcG9uZW50OwogICAgZXhwb3J0cy5Db21wdXRlciA9IENvbXB1dGVyOwogICAgZXhwb3J0cy5Db25jaWVyZ2VCZWxsID0gQ29uY2llcmdlQmVsbDsKICAgIGV4cG9ydHMuQ29uZSA9IENvbmU7CiAgICBleHBvcnRzLkNvbnN0cnVjdGlvbiA9IENvbnN0cnVjdGlvbjsKICAgIGV4cG9ydHMuQ29udGFjdCA9IENvbnRhY3Q7CiAgICBleHBvcnRzLkNvbnRhY3QyID0gQ29udGFjdFJvdW5kOwogICAgZXhwb3J0cy5Db250YWN0Um91bmQgPSBDb250YWN0Um91bmQ7CiAgICBleHBvcnRzLkNvbnRhaW5lciA9IENvbnRhaW5lcjsKICAgIGV4cG9ydHMuQ29udHJhc3QgPSBDb250cmFzdDsKICAgIGV4cG9ydHMuQ29va2llID0gQ29va2llOwogICAgZXhwb3J0cy5Db29raW5nUG90ID0gQ29va2luZ1BvdDsKICAgIGV4cG9ydHMuQ29weSA9IENvcHk7CiAgICBleHBvcnRzLkNvcHlDaGVjayA9IENvcHlDaGVjazsKICAgIGV4cG9ydHMuQ29weU1pbnVzID0gQ29weU1pbnVzOwogICAgZXhwb3J0cy5Db3B5UGx1cyA9IENvcHlQbHVzOwogICAgZXhwb3J0cy5Db3B5U2xhc2ggPSBDb3B5U2xhc2g7CiAgICBleHBvcnRzLkNvcHlYID0gQ29weVg7CiAgICBleHBvcnRzLkNvcHlsZWZ0ID0gQ29weWxlZnQ7CiAgICBleHBvcnRzLkNvcHlyaWdodCA9IENvcHlyaWdodDsKICAgIGV4cG9ydHMuQ29ybmVyRG93bkxlZnQgPSBDb3JuZXJEb3duTGVmdDsKICAgIGV4cG9ydHMuQ29ybmVyRG93blJpZ2h0ID0gQ29ybmVyRG93blJpZ2h0OwogICAgZXhwb3J0cy5Db3JuZXJMZWZ0RG93biA9IENvcm5lckxlZnREb3duOwogICAgZXhwb3J0cy5Db3JuZXJMZWZ0VXAgPSBDb3JuZXJMZWZ0VXA7CiAgICBleHBvcnRzLkNvcm5lclJpZ2h0RG93biA9IENvcm5lclJpZ2h0RG93bjsKICAgIGV4cG9ydHMuQ29ybmVyUmlnaHRVcCA9IENvcm5lclJpZ2h0VXA7CiAgICBleHBvcnRzLkNvcm5lclVwTGVmdCA9IENvcm5lclVwTGVmdDsKICAgIGV4cG9ydHMuQ29ybmVyVXBSaWdodCA9IENvcm5lclVwUmlnaHQ7CiAgICBleHBvcnRzLkNwdSA9IENwdTsKICAgIGV4cG9ydHMuQ3JlYXRpdmVDb21tb25zID0gQ3JlYXRpdmVDb21tb25zOwogICAgZXhwb3J0cy5DcmVkaXRDYXJkID0gQ3JlZGl0Q2FyZDsKICAgIGV4cG9ydHMuQ3JvaXNzYW50ID0gQ3JvaXNzYW50OwogICAgZXhwb3J0cy5Dcm9wID0gQ3JvcDsKICAgIGV4cG9ydHMuQ3Jvc3MgPSBDcm9zczsKICAgIGV4cG9ydHMuQ3Jvc3NoYWlyID0gQ3Jvc3NoYWlyOwogICAgZXhwb3J0cy5Dcm93biA9IENyb3duOwogICAgZXhwb3J0cy5DdWJvaWQgPSBDdWJvaWQ7CiAgICBleHBvcnRzLkN1cFNvZGEgPSBDdXBTb2RhOwogICAgZXhwb3J0cy5DdXJseUJyYWNlcyA9IEJyYWNlczsKICAgIGV4cG9ydHMuQ3VycmVuY3kgPSBDdXJyZW5jeTsKICAgIGV4cG9ydHMuQ3lsaW5kZXIgPSBDeWxpbmRlcjsKICAgIGV4cG9ydHMuRGFtID0gRGFtOwogICAgZXhwb3J0cy5EYXRhYmFzZSA9IERhdGFiYXNlOwogICAgZXhwb3J0cy5EYXRhYmFzZUJhY2t1cCA9IERhdGFiYXNlQmFja3VwOwogICAgZXhwb3J0cy5EYXRhYmFzZVphcCA9IERhdGFiYXNlWmFwOwogICAgZXhwb3J0cy5EZWNpbWFsc0Fycm93TGVmdCA9IERlY2ltYWxzQXJyb3dMZWZ0OwogICAgZXhwb3J0cy5EZWNpbWFsc0Fycm93UmlnaHQgPSBEZWNpbWFsc0Fycm93UmlnaHQ7CiAgICBleHBvcnRzLkRlbGV0ZSA9IERlbGV0ZTsKICAgIGV4cG9ydHMuRGVzc2VydCA9IERlc3NlcnQ7CiAgICBleHBvcnRzLkRpYW1ldGVyID0gRGlhbWV0ZXI7CiAgICBleHBvcnRzLkRpYW1vbmQgPSBEaWFtb25kOwogICAgZXhwb3J0cy5EaWFtb25kTWludXMgPSBEaWFtb25kTWludXM7CiAgICBleHBvcnRzLkRpYW1vbmRQZXJjZW50ID0gRGlhbW9uZFBlcmNlbnQ7CiAgICBleHBvcnRzLkRpYW1vbmRQbHVzID0gRGlhbW9uZFBsdXM7CiAgICBleHBvcnRzLkRpY2UxID0gRGljZTE7CiAgICBleHBvcnRzLkRpY2UyID0gRGljZTI7CiAgICBleHBvcnRzLkRpY2UzID0gRGljZTM7CiAgICBleHBvcnRzLkRpY2U0ID0gRGljZTQ7CiAgICBleHBvcnRzLkRpY2U1ID0gRGljZTU7CiAgICBleHBvcnRzLkRpY2U2ID0gRGljZTY7CiAgICBleHBvcnRzLkRpY2VzID0gRGljZXM7CiAgICBleHBvcnRzLkRpZmYgPSBEaWZmOwogICAgZXhwb3J0cy5EaXNjID0gRGlzYzsKICAgIGV4cG9ydHMuRGlzYzIgPSBEaXNjMjsKICAgIGV4cG9ydHMuRGlzYzMgPSBEaXNjMzsKICAgIGV4cG9ydHMuRGlzY0FsYnVtID0gRGlzY0FsYnVtOwogICAgZXhwb3J0cy5EaXZpZGUgPSBEaXZpZGU7CiAgICBleHBvcnRzLkRpdmlkZUNpcmNsZSA9IENpcmNsZURpdmlkZTsKICAgIGV4cG9ydHMuRGl2aWRlU3F1YXJlID0gU3F1YXJlRGl2aWRlOwogICAgZXhwb3J0cy5EbmEgPSBEbmE7CiAgICBleHBvcnRzLkRuYU9mZiA9IERuYU9mZjsKICAgIGV4cG9ydHMuRG9jayA9IERvY2s7CiAgICBleHBvcnRzLkRvZyA9IERvZzsKICAgIGV4cG9ydHMuRG9sbGFyU2lnbiA9IERvbGxhclNpZ247CiAgICBleHBvcnRzLkRvbnV0ID0gRG9udXQ7CiAgICBleHBvcnRzLkRvb3JDbG9zZWQgPSBEb29yQ2xvc2VkOwogICAgZXhwb3J0cy5Eb29yQ2xvc2VkTG9ja2VkID0gRG9vckNsb3NlZExvY2tlZDsKICAgIGV4cG9ydHMuRG9vck9wZW4gPSBEb29yT3BlbjsKICAgIGV4cG9ydHMuRG90ID0gRG90OwogICAgZXhwb3J0cy5Eb3RTcXVhcmUgPSBTcXVhcmVEb3Q7CiAgICBleHBvcnRzLkRvd25sb2FkID0gRG93bmxvYWQ7CiAgICBleHBvcnRzLkRvd25sb2FkQ2xvdWQgPSBDbG91ZERvd25sb2FkOwogICAgZXhwb3J0cy5EcmFmdGluZ0NvbXBhc3MgPSBEcmFmdGluZ0NvbXBhc3M7CiAgICBleHBvcnRzLkRyYW1hID0gRHJhbWE7CiAgICBleHBvcnRzLkRyaWJiYmxlID0gRHJpYmJibGU7CiAgICBleHBvcnRzLkRyaWxsID0gRHJpbGw7CiAgICBleHBvcnRzLkRyb25lID0gRHJvbmU7CiAgICBleHBvcnRzLkRyb3BsZXQgPSBEcm9wbGV0OwogICAgZXhwb3J0cy5Ecm9wbGV0T2ZmID0gRHJvcGxldE9mZjsKICAgIGV4cG9ydHMuRHJvcGxldHMgPSBEcm9wbGV0czsKICAgIGV4cG9ydHMuRHJ1bSA9IERydW07CiAgICBleHBvcnRzLkRydW1zdGljayA9IERydW1zdGljazsKICAgIGV4cG9ydHMuRHVtYmJlbGwgPSBEdW1iYmVsbDsKICAgIGV4cG9ydHMuRWFyID0gRWFyOwogICAgZXhwb3J0cy5FYXJPZmYgPSBFYXJPZmY7CiAgICBleHBvcnRzLkVhcnRoID0gRWFydGg7CiAgICBleHBvcnRzLkVhcnRoTG9jayA9IEVhcnRoTG9jazsKICAgIGV4cG9ydHMuRWNsaXBzZSA9IEVjbGlwc2U7CiAgICBleHBvcnRzLkVkaXQgPSBTcXVhcmVQZW47CiAgICBleHBvcnRzLkVkaXQyID0gUGVuOwogICAgZXhwb3J0cy5FZGl0MyA9IFBlbkxpbmU7CiAgICBleHBvcnRzLkVnZyA9IEVnZzsKICAgIGV4cG9ydHMuRWdnRnJpZWQgPSBFZ2dGcmllZDsKICAgIGV4cG9ydHMuRWdnT2ZmID0gRWdnT2ZmOwogICAgZXhwb3J0cy5FbGxpcHNpcyA9IEVsbGlwc2lzOwogICAgZXhwb3J0cy5FbGxpcHNpc1ZlcnRpY2FsID0gRWxsaXBzaXNWZXJ0aWNhbDsKICAgIGV4cG9ydHMuRXF1YWwgPSBFcXVhbDsKICAgIGV4cG9ydHMuRXF1YWxBcHByb3hpbWF0ZWx5ID0gRXF1YWxBcHByb3hpbWF0ZWx5OwogICAgZXhwb3J0cy5FcXVhbE5vdCA9IEVxdWFsTm90OwogICAgZXhwb3J0cy5FcXVhbFNxdWFyZSA9IFNxdWFyZUVxdWFsOwogICAgZXhwb3J0cy5FcmFzZXIgPSBFcmFzZXI7CiAgICBleHBvcnRzLkV0aGVybmV0UG9ydCA9IEV0aGVybmV0UG9ydDsKICAgIGV4cG9ydHMuRXVybyA9IEV1cm87CiAgICBleHBvcnRzLkV2Q2hhcmdlciA9IEV2Q2hhcmdlcjsKICAgIGV4cG9ydHMuRXhwYW5kID0gRXhwYW5kOwogICAgZXhwb3J0cy5FeHRlcm5hbExpbmsgPSBFeHRlcm5hbExpbms7CiAgICBleHBvcnRzLkV5ZSA9IEV5ZTsKICAgIGV4cG9ydHMuRXllQ2xvc2VkID0gRXllQ2xvc2VkOwogICAgZXhwb3J0cy5FeWVPZmYgPSBFeWVPZmY7CiAgICBleHBvcnRzLkZhY2Vib29rID0gRmFjZWJvb2s7CiAgICBleHBvcnRzLkZhY3RvcnkgPSBGYWN0b3J5OwogICAgZXhwb3J0cy5GYW4gPSBGYW47CiAgICBleHBvcnRzLkZhc3RGb3J3YXJkID0gRmFzdEZvcndhcmQ7CiAgICBleHBvcnRzLkZlYXRoZXIgPSBGZWF0aGVyOwogICAgZXhwb3J0cy5GZW5jZSA9IEZlbmNlOwogICAgZXhwb3J0cy5GZXJyaXNXaGVlbCA9IEZlcnJpc1doZWVsOwogICAgZXhwb3J0cy5GaWdtYSA9IEZpZ21hOwogICAgZXhwb3J0cy5GaWxlID0gRmlsZTsKICAgIGV4cG9ydHMuRmlsZUFyY2hpdmUgPSBGaWxlQXJjaGl2ZTsKICAgIGV4cG9ydHMuRmlsZUF1ZGlvID0gRmlsZUhlYWRwaG9uZTsKICAgIGV4cG9ydHMuRmlsZUF1ZGlvMiA9IEZpbGVIZWFkcGhvbmU7CiAgICBleHBvcnRzLkZpbGVBeGlzM0QgPSBGaWxlQXhpczNkOwogICAgZXhwb3J0cy5GaWxlQXhpczNkID0gRmlsZUF4aXMzZDsKICAgIGV4cG9ydHMuRmlsZUJhZGdlID0gRmlsZUJhZGdlOwogICAgZXhwb3J0cy5GaWxlQmFkZ2UyID0gRmlsZUJhZGdlOwogICAgZXhwb3J0cy5GaWxlQmFyQ2hhcnQgPSBGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nOwogICAgZXhwb3J0cy5GaWxlQmFyQ2hhcnQyID0gRmlsZUNoYXJ0Q29sdW1uOwogICAgZXhwb3J0cy5GaWxlQm94ID0gRmlsZUJveDsKICAgIGV4cG9ydHMuRmlsZUJyYWNlcyA9IEZpbGVCcmFjZXM7CiAgICBleHBvcnRzLkZpbGVCcmFjZXNDb3JuZXIgPSBGaWxlQnJhY2VzQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlQ2hhcnRDb2x1bW4gPSBGaWxlQ2hhcnRDb2x1bW47CiAgICBleHBvcnRzLkZpbGVDaGFydENvbHVtbkluY3JlYXNpbmcgPSBGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nOwogICAgZXhwb3J0cy5GaWxlQ2hhcnRMaW5lID0gRmlsZUNoYXJ0TGluZTsKICAgIGV4cG9ydHMuRmlsZUNoYXJ0UGllID0gRmlsZUNoYXJ0UGllOwogICAgZXhwb3J0cy5GaWxlQ2hlY2sgPSBGaWxlQ2hlY2s7CiAgICBleHBvcnRzLkZpbGVDaGVjazIgPSBGaWxlQ2hlY2tDb3JuZXI7CiAgICBleHBvcnRzLkZpbGVDaGVja0Nvcm5lciA9IEZpbGVDaGVja0Nvcm5lcjsKICAgIGV4cG9ydHMuRmlsZUNsb2NrID0gRmlsZUNsb2NrOwogICAgZXhwb3J0cy5GaWxlQ29kZSA9IEZpbGVDb2RlOwogICAgZXhwb3J0cy5GaWxlQ29kZTIgPSBGaWxlQ29kZUNvcm5lcjsKICAgIGV4cG9ydHMuRmlsZUNvZGVDb3JuZXIgPSBGaWxlQ29kZUNvcm5lcjsKICAgIGV4cG9ydHMuRmlsZUNvZyA9IEZpbGVDb2c7CiAgICBleHBvcnRzLkZpbGVDb2cyID0gRmlsZUNvZzsKICAgIGV4cG9ydHMuRmlsZURpZmYgPSBGaWxlRGlmZjsKICAgIGV4cG9ydHMuRmlsZURpZ2l0ID0gRmlsZURpZ2l0OwogICAgZXhwb3J0cy5GaWxlRG93biA9IEZpbGVEb3duOwogICAgZXhwb3J0cy5GaWxlRWRpdCA9IEZpbGVQZW47CiAgICBleHBvcnRzLkZpbGVFeGNsYW1hdGlvblBvaW50ID0gRmlsZUV4Y2xhbWF0aW9uUG9pbnQ7CiAgICBleHBvcnRzLkZpbGVIZWFkcGhvbmUgPSBGaWxlSGVhZHBob25lOwogICAgZXhwb3J0cy5GaWxlSGVhcnQgPSBGaWxlSGVhcnQ7CiAgICBleHBvcnRzLkZpbGVJbWFnZSA9IEZpbGVJbWFnZTsKICAgIGV4cG9ydHMuRmlsZUlucHV0ID0gRmlsZUlucHV0OwogICAgZXhwb3J0cy5GaWxlSnNvbiA9IEZpbGVCcmFjZXM7CiAgICBleHBvcnRzLkZpbGVKc29uMiA9IEZpbGVCcmFjZXNDb3JuZXI7CiAgICBleHBvcnRzLkZpbGVLZXkgPSBGaWxlS2V5OwogICAgZXhwb3J0cy5GaWxlS2V5MiA9IEZpbGVLZXk7CiAgICBleHBvcnRzLkZpbGVMaW5lQ2hhcnQgPSBGaWxlQ2hhcnRMaW5lOwogICAgZXhwb3J0cy5GaWxlTG9jayA9IEZpbGVMb2NrOwogICAgZXhwb3J0cy5GaWxlTG9jazIgPSBGaWxlTG9jazsKICAgIGV4cG9ydHMuRmlsZU1pbnVzID0gRmlsZU1pbnVzOwogICAgZXhwb3J0cy5GaWxlTWludXMyID0gRmlsZU1pbnVzQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlTWludXNDb3JuZXIgPSBGaWxlTWludXNDb3JuZXI7CiAgICBleHBvcnRzLkZpbGVNdXNpYyA9IEZpbGVNdXNpYzsKICAgIGV4cG9ydHMuRmlsZU91dHB1dCA9IEZpbGVPdXRwdXQ7CiAgICBleHBvcnRzLkZpbGVQZW4gPSBGaWxlUGVuOwogICAgZXhwb3J0cy5GaWxlUGVuTGluZSA9IEZpbGVQZW5MaW5lOwogICAgZXhwb3J0cy5GaWxlUGllQ2hhcnQgPSBGaWxlQ2hhcnRQaWU7CiAgICBleHBvcnRzLkZpbGVQbGF5ID0gRmlsZVBsYXk7CiAgICBleHBvcnRzLkZpbGVQbHVzID0gRmlsZVBsdXM7CiAgICBleHBvcnRzLkZpbGVQbHVzMiA9IEZpbGVQbHVzQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlUGx1c0Nvcm5lciA9IEZpbGVQbHVzQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlUXVlc3Rpb24gPSBGaWxlUXVlc3Rpb25NYXJrOwogICAgZXhwb3J0cy5GaWxlUXVlc3Rpb25NYXJrID0gRmlsZVF1ZXN0aW9uTWFyazsKICAgIGV4cG9ydHMuRmlsZVNjYW4gPSBGaWxlU2NhbjsKICAgIGV4cG9ydHMuRmlsZVNlYXJjaCA9IEZpbGVTZWFyY2g7CiAgICBleHBvcnRzLkZpbGVTZWFyY2gyID0gRmlsZVNlYXJjaENvcm5lcjsKICAgIGV4cG9ydHMuRmlsZVNlYXJjaENvcm5lciA9IEZpbGVTZWFyY2hDb3JuZXI7CiAgICBleHBvcnRzLkZpbGVTaWduYWwgPSBGaWxlU2lnbmFsOwogICAgZXhwb3J0cy5GaWxlU2lnbmF0dXJlID0gRmlsZVBlbkxpbmU7CiAgICBleHBvcnRzLkZpbGVTbGlkZXJzID0gRmlsZVNsaWRlcnM7CiAgICBleHBvcnRzLkZpbGVTcHJlYWRzaGVldCA9IEZpbGVTcHJlYWRzaGVldDsKICAgIGV4cG9ydHMuRmlsZVN0YWNrID0gRmlsZVN0YWNrOwogICAgZXhwb3J0cy5GaWxlU3ltbGluayA9IEZpbGVTeW1saW5rOwogICAgZXhwb3J0cy5GaWxlVGVybWluYWwgPSBGaWxlVGVybWluYWw7CiAgICBleHBvcnRzLkZpbGVUZXh0ID0gRmlsZVRleHQ7CiAgICBleHBvcnRzLkZpbGVUeXBlID0gRmlsZVR5cGU7CiAgICBleHBvcnRzLkZpbGVUeXBlMiA9IEZpbGVUeXBlQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlVHlwZUNvcm5lciA9IEZpbGVUeXBlQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlVXAgPSBGaWxlVXA7CiAgICBleHBvcnRzLkZpbGVVc2VyID0gRmlsZVVzZXI7CiAgICBleHBvcnRzLkZpbGVWaWRlbyA9IEZpbGVQbGF5OwogICAgZXhwb3J0cy5GaWxlVmlkZW8yID0gRmlsZVZpZGVvQ2FtZXJhOwogICAgZXhwb3J0cy5GaWxlVmlkZW9DYW1lcmEgPSBGaWxlVmlkZW9DYW1lcmE7CiAgICBleHBvcnRzLkZpbGVWb2x1bWUgPSBGaWxlVm9sdW1lOwogICAgZXhwb3J0cy5GaWxlVm9sdW1lMiA9IEZpbGVTaWduYWw7CiAgICBleHBvcnRzLkZpbGVXYXJuaW5nID0gRmlsZUV4Y2xhbWF0aW9uUG9pbnQ7CiAgICBleHBvcnRzLkZpbGVYID0gRmlsZVg7CiAgICBleHBvcnRzLkZpbGVYMiA9IEZpbGVYQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlWENvcm5lciA9IEZpbGVYQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlcyA9IEZpbGVzOwogICAgZXhwb3J0cy5GaWxtID0gRmlsbTsKICAgIGV4cG9ydHMuRmlsdGVyID0gRnVubmVsOwogICAgZXhwb3J0cy5GaWx0ZXJYID0gRnVubmVsWDsKICAgIGV4cG9ydHMuRmluZ2VycHJpbnQgPSBGaW5nZXJwcmludFBhdHRlcm47CiAgICBleHBvcnRzLkZpbmdlcnByaW50UGF0dGVybiA9IEZpbmdlcnByaW50UGF0dGVybjsKICAgIGV4cG9ydHMuRmlyZUV4dGluZ3Vpc2hlciA9IEZpcmVFeHRpbmd1aXNoZXI7CiAgICBleHBvcnRzLkZpc2ggPSBGaXNoOwogICAgZXhwb3J0cy5GaXNoT2ZmID0gRmlzaE9mZjsKICAgIGV4cG9ydHMuRmlzaFN5bWJvbCA9IEZpc2hTeW1ib2w7CiAgICBleHBvcnRzLkZpc2hpbmdIb29rID0gRmlzaGluZ0hvb2s7CiAgICBleHBvcnRzLkZsYWcgPSBGbGFnOwogICAgZXhwb3J0cy5GbGFnT2ZmID0gRmxhZ09mZjsKICAgIGV4cG9ydHMuRmxhZ1RyaWFuZ2xlTGVmdCA9IEZsYWdUcmlhbmdsZUxlZnQ7CiAgICBleHBvcnRzLkZsYWdUcmlhbmdsZVJpZ2h0ID0gRmxhZ1RyaWFuZ2xlUmlnaHQ7CiAgICBleHBvcnRzLkZsYW1lID0gRmxhbWU7CiAgICBleHBvcnRzLkZsYW1lS2luZGxpbmcgPSBGbGFtZUtpbmRsaW5nOwogICAgZXhwb3J0cy5GbGFzaGxpZ2h0ID0gRmxhc2hsaWdodDsKICAgIGV4cG9ydHMuRmxhc2hsaWdodE9mZiA9IEZsYXNobGlnaHRPZmY7CiAgICBleHBvcnRzLkZsYXNrQ29uaWNhbCA9IEZsYXNrQ29uaWNhbDsKICAgIGV4cG9ydHMuRmxhc2tDb25pY2FsT2ZmID0gRmxhc2tDb25pY2FsT2ZmOwogICAgZXhwb3J0cy5GbGFza1JvdW5kID0gRmxhc2tSb3VuZDsKICAgIGV4cG9ydHMuRmxpcEhvcml6b250YWwgPSBGbGlwSG9yaXpvbnRhbDsKICAgIGV4cG9ydHMuRmxpcEhvcml6b250YWwyID0gRmxpcEhvcml6b250YWwyOwogICAgZXhwb3J0cy5GbGlwVmVydGljYWwgPSBGbGlwVmVydGljYWw7CiAgICBleHBvcnRzLkZsaXBWZXJ0aWNhbDIgPSBGbGlwVmVydGljYWwyOwogICAgZXhwb3J0cy5GbG93ZXIgPSBGbG93ZXI7CiAgICBleHBvcnRzLkZsb3dlcjIgPSBGbG93ZXIyOwogICAgZXhwb3J0cy5Gb2N1cyA9IEZvY3VzOwogICAgZXhwb3J0cy5Gb2xkSG9yaXpvbnRhbCA9IEZvbGRIb3Jpem9udGFsOwogICAgZXhwb3J0cy5Gb2xkVmVydGljYWwgPSBGb2xkVmVydGljYWw7CiAgICBleHBvcnRzLkZvbGRlciA9IEZvbGRlcjsKICAgIGV4cG9ydHMuRm9sZGVyQXJjaGl2ZSA9IEZvbGRlckFyY2hpdmU7CiAgICBleHBvcnRzLkZvbGRlckNoZWNrID0gRm9sZGVyQ2hlY2s7CiAgICBleHBvcnRzLkZvbGRlckNsb2NrID0gRm9sZGVyQ2xvY2s7CiAgICBleHBvcnRzLkZvbGRlckNsb3NlZCA9IEZvbGRlckNsb3NlZDsKICAgIGV4cG9ydHMuRm9sZGVyQ29kZSA9IEZvbGRlckNvZGU7CiAgICBleHBvcnRzLkZvbGRlckNvZyA9IEZvbGRlckNvZzsKICAgIGV4cG9ydHMuRm9sZGVyQ29nMiA9IEZvbGRlckNvZzsKICAgIGV4cG9ydHMuRm9sZGVyRG90ID0gRm9sZGVyRG90OwogICAgZXhwb3J0cy5Gb2xkZXJEb3duID0gRm9sZGVyRG93bjsKICAgIGV4cG9ydHMuRm9sZGVyRWRpdCA9IEZvbGRlclBlbjsKICAgIGV4cG9ydHMuRm9sZGVyR2l0ID0gRm9sZGVyR2l0OwogICAgZXhwb3J0cy5Gb2xkZXJHaXQyID0gRm9sZGVyR2l0MjsKICAgIGV4cG9ydHMuRm9sZGVySGVhcnQgPSBGb2xkZXJIZWFydDsKICAgIGV4cG9ydHMuRm9sZGVySW5wdXQgPSBGb2xkZXJJbnB1dDsKICAgIGV4cG9ydHMuRm9sZGVyS2FuYmFuID0gRm9sZGVyS2FuYmFuOwogICAgZXhwb3J0cy5Gb2xkZXJLZXkgPSBGb2xkZXJLZXk7CiAgICBleHBvcnRzLkZvbGRlckxvY2sgPSBGb2xkZXJMb2NrOwogICAgZXhwb3J0cy5Gb2xkZXJNaW51cyA9IEZvbGRlck1pbnVzOwogICAgZXhwb3J0cy5Gb2xkZXJPcGVuID0gRm9sZGVyT3BlbjsKICAgIGV4cG9ydHMuRm9sZGVyT3BlbkRvdCA9IEZvbGRlck9wZW5Eb3Q7CiAgICBleHBvcnRzLkZvbGRlck91dHB1dCA9IEZvbGRlck91dHB1dDsKICAgIGV4cG9ydHMuRm9sZGVyUGVuID0gRm9sZGVyUGVuOwogICAgZXhwb3J0cy5Gb2xkZXJQbHVzID0gRm9sZGVyUGx1czsKICAgIGV4cG9ydHMuRm9sZGVyUm9vdCA9IEZvbGRlclJvb3Q7CiAgICBleHBvcnRzLkZvbGRlclNlYXJjaCA9IEZvbGRlclNlYXJjaDsKICAgIGV4cG9ydHMuRm9sZGVyU2VhcmNoMiA9IEZvbGRlclNlYXJjaDI7CiAgICBleHBvcnRzLkZvbGRlclN5bWxpbmsgPSBGb2xkZXJTeW1saW5rOwogICAgZXhwb3J0cy5Gb2xkZXJTeW5jID0gRm9sZGVyU3luYzsKICAgIGV4cG9ydHMuRm9sZGVyVHJlZSA9IEZvbGRlclRyZWU7CiAgICBleHBvcnRzLkZvbGRlclVwID0gRm9sZGVyVXA7CiAgICBleHBvcnRzLkZvbGRlclggPSBGb2xkZXJYOwogICAgZXhwb3J0cy5Gb2xkZXJzID0gRm9sZGVyczsKICAgIGV4cG9ydHMuRm9vdHByaW50cyA9IEZvb3RwcmludHM7CiAgICBleHBvcnRzLkZvcmtLbmlmZSA9IFV0ZW5zaWxzOwogICAgZXhwb3J0cy5Gb3JrS25pZmVDcm9zc2VkID0gVXRlbnNpbHNDcm9zc2VkOwogICAgZXhwb3J0cy5Gb3JrbGlmdCA9IEZvcmtsaWZ0OwogICAgZXhwb3J0cy5Gb3JtID0gRm9ybTsKICAgIGV4cG9ydHMuRm9ybUlucHV0ID0gUmVjdGFuZ2xlRWxsaXBzaXM7CiAgICBleHBvcnRzLkZvcndhcmQgPSBGb3J3YXJkOwogICAgZXhwb3J0cy5GcmFtZSA9IEZyYW1lOwogICAgZXhwb3J0cy5GcmFtZXIgPSBGcmFtZXI7CiAgICBleHBvcnRzLkZyb3duID0gRnJvd247CiAgICBleHBvcnRzLkZ1ZWwgPSBGdWVsOwogICAgZXhwb3J0cy5GdWxsc2NyZWVuID0gRnVsbHNjcmVlbjsKICAgIGV4cG9ydHMuRnVuY3Rpb25TcXVhcmUgPSBTcXVhcmVGdW5jdGlvbjsKICAgIGV4cG9ydHMuRnVubmVsID0gRnVubmVsOwogICAgZXhwb3J0cy5GdW5uZWxQbHVzID0gRnVubmVsUGx1czsKICAgIGV4cG9ydHMuRnVubmVsWCA9IEZ1bm5lbFg7CiAgICBleHBvcnRzLkdhbGxlcnlIb3Jpem9udGFsID0gR2FsbGVyeUhvcml6b250YWw7CiAgICBleHBvcnRzLkdhbGxlcnlIb3Jpem9udGFsRW5kID0gR2FsbGVyeUhvcml6b250YWxFbmQ7CiAgICBleHBvcnRzLkdhbGxlcnlUaHVtYm5haWxzID0gR2FsbGVyeVRodW1ibmFpbHM7CiAgICBleHBvcnRzLkdhbGxlcnlWZXJ0aWNhbCA9IEdhbGxlcnlWZXJ0aWNhbDsKICAgIGV4cG9ydHMuR2FsbGVyeVZlcnRpY2FsRW5kID0gR2FsbGVyeVZlcnRpY2FsRW5kOwogICAgZXhwb3J0cy5HYW1lcGFkID0gR2FtZXBhZDsKICAgIGV4cG9ydHMuR2FtZXBhZDIgPSBHYW1lcGFkMjsKICAgIGV4cG9ydHMuR2FtZXBhZERpcmVjdGlvbmFsID0gR2FtZXBhZERpcmVjdGlvbmFsOwogICAgZXhwb3J0cy5HYW50dENoYXJ0ID0gQ2hhcnROb0F4ZXNHYW50dDsKICAgIGV4cG9ydHMuR2FudHRDaGFydFNxdWFyZSA9IFNxdWFyZUNoYXJ0R2FudHQ7CiAgICBleHBvcnRzLkdhdWdlID0gR2F1Z2U7CiAgICBleHBvcnRzLkdhdWdlQ2lyY2xlID0gQ2lyY2xlR2F1Z2U7CiAgICBleHBvcnRzLkdhdmVsID0gR2F2ZWw7CiAgICBleHBvcnRzLkdlbSA9IEdlbTsKICAgIGV4cG9ydHMuR2VvcmdpYW5MYXJpID0gR2VvcmdpYW5MYXJpOwogICAgZXhwb3J0cy5HaG9zdCA9IEdob3N0OwogICAgZXhwb3J0cy5HaWZ0ID0gR2lmdDsKICAgIGV4cG9ydHMuR2l0QnJhbmNoID0gR2l0QnJhbmNoOwogICAgZXhwb3J0cy5HaXRCcmFuY2hNaW51cyA9IEdpdEJyYW5jaE1pbnVzOwogICAgZXhwb3J0cy5HaXRCcmFuY2hQbHVzID0gR2l0QnJhbmNoUGx1czsKICAgIGV4cG9ydHMuR2l0Q29tbWl0ID0gR2l0Q29tbWl0SG9yaXpvbnRhbDsKICAgIGV4cG9ydHMuR2l0Q29tbWl0SG9yaXpvbnRhbCA9IEdpdENvbW1pdEhvcml6b250YWw7CiAgICBleHBvcnRzLkdpdENvbW1pdFZlcnRpY2FsID0gR2l0Q29tbWl0VmVydGljYWw7CiAgICBleHBvcnRzLkdpdENvbXBhcmUgPSBHaXRDb21wYXJlOwogICAgZXhwb3J0cy5HaXRDb21wYXJlQXJyb3dzID0gR2l0Q29tcGFyZUFycm93czsKICAgIGV4cG9ydHMuR2l0Rm9yayA9IEdpdEZvcms7CiAgICBleHBvcnRzLkdpdEdyYXBoID0gR2l0R3JhcGg7CiAgICBleHBvcnRzLkdpdE1lcmdlID0gR2l0TWVyZ2U7CiAgICBleHBvcnRzLkdpdFB1bGxSZXF1ZXN0ID0gR2l0UHVsbFJlcXVlc3Q7CiAgICBleHBvcnRzLkdpdFB1bGxSZXF1ZXN0QXJyb3cgPSBHaXRQdWxsUmVxdWVzdEFycm93OwogICAgZXhwb3J0cy5HaXRQdWxsUmVxdWVzdENsb3NlZCA9IEdpdFB1bGxSZXF1ZXN0Q2xvc2VkOwogICAgZXhwb3J0cy5HaXRQdWxsUmVxdWVzdENyZWF0ZSA9IEdpdFB1bGxSZXF1ZXN0Q3JlYXRlOwogICAgZXhwb3J0cy5HaXRQdWxsUmVxdWVzdENyZWF0ZUFycm93ID0gR2l0UHVsbFJlcXVlc3RDcmVhdGVBcnJvdzsKICAgIGV4cG9ydHMuR2l0UHVsbFJlcXVlc3REcmFmdCA9IEdpdFB1bGxSZXF1ZXN0RHJhZnQ7CiAgICBleHBvcnRzLkdpdGh1YiA9IEdpdGh1YjsKICAgIGV4cG9ydHMuR2l0bGFiID0gR2l0bGFiOwogICAgZXhwb3J0cy5HbGFzc1dhdGVyID0gR2xhc3NXYXRlcjsKICAgIGV4cG9ydHMuR2xhc3NlcyA9IEdsYXNzZXM7CiAgICBleHBvcnRzLkdsb2JlID0gR2xvYmU7CiAgICBleHBvcnRzLkdsb2JlMiA9IEVhcnRoOwogICAgZXhwb3J0cy5HbG9iZUxvY2sgPSBHbG9iZUxvY2s7CiAgICBleHBvcnRzLkdsb2JlWCA9IEdsb2JlWDsKICAgIGV4cG9ydHMuR29hbCA9IEdvYWw7CiAgICBleHBvcnRzLkdwdSA9IEdwdTsKICAgIGV4cG9ydHMuR3JhYiA9IEhhbmRHcmFiOwogICAgZXhwb3J0cy5HcmFkdWF0aW9uQ2FwID0gR3JhZHVhdGlvbkNhcDsKICAgIGV4cG9ydHMuR3JhcGUgPSBHcmFwZTsKICAgIGV4cG9ydHMuR3JpZCA9IEdyaWQzeDM7CiAgICBleHBvcnRzLkdyaWQyWDIgPSBHcmlkMngyOwogICAgZXhwb3J0cy5HcmlkMlgyQ2hlY2sgPSBHcmlkMngyQ2hlY2s7CiAgICBleHBvcnRzLkdyaWQyWDJQbHVzID0gR3JpZDJ4MlBsdXM7CiAgICBleHBvcnRzLkdyaWQyWDJYID0gR3JpZDJ4Mlg7CiAgICBleHBvcnRzLkdyaWQyeDIgPSBHcmlkMngyOwogICAgZXhwb3J0cy5HcmlkMngyQ2hlY2sgPSBHcmlkMngyQ2hlY2s7CiAgICBleHBvcnRzLkdyaWQyeDJQbHVzID0gR3JpZDJ4MlBsdXM7CiAgICBleHBvcnRzLkdyaWQyeDJYID0gR3JpZDJ4Mlg7CiAgICBleHBvcnRzLkdyaWQzWDMgPSBHcmlkM3gzOwogICAgZXhwb3J0cy5HcmlkM3gyID0gR3JpZDN4MjsKICAgIGV4cG9ydHMuR3JpZDN4MyA9IEdyaWQzeDM7CiAgICBleHBvcnRzLkdyaXAgPSBHcmlwOwogICAgZXhwb3J0cy5HcmlwSG9yaXpvbnRhbCA9IEdyaXBIb3Jpem9udGFsOwogICAgZXhwb3J0cy5HcmlwVmVydGljYWwgPSBHcmlwVmVydGljYWw7CiAgICBleHBvcnRzLkdyb3VwID0gR3JvdXA7CiAgICBleHBvcnRzLkd1aXRhciA9IEd1aXRhcjsKICAgIGV4cG9ydHMuSGFtID0gSGFtOwogICAgZXhwb3J0cy5IYW1idXJnZXIgPSBIYW1idXJnZXI7CiAgICBleHBvcnRzLkhhbW1lciA9IEhhbW1lcjsKICAgIGV4cG9ydHMuSGFuZCA9IEhhbmQ7CiAgICBleHBvcnRzLkhhbmRDb2lucyA9IEhhbmRDb2luczsKICAgIGV4cG9ydHMuSGFuZEZpc3QgPSBIYW5kRmlzdDsKICAgIGV4cG9ydHMuSGFuZEdyYWIgPSBIYW5kR3JhYjsKICAgIGV4cG9ydHMuSGFuZEhlYXJ0ID0gSGFuZEhlYXJ0OwogICAgZXhwb3J0cy5IYW5kSGVscGluZyA9IEhhbmRIZWxwaW5nOwogICAgZXhwb3J0cy5IYW5kTWV0YWwgPSBIYW5kTWV0YWw7CiAgICBleHBvcnRzLkhhbmRQbGF0dGVyID0gSGFuZFBsYXR0ZXI7CiAgICBleHBvcnRzLkhhbmRiYWcgPSBIYW5kYmFnOwogICAgZXhwb3J0cy5IYW5kc2hha2UgPSBIYW5kc2hha2U7CiAgICBleHBvcnRzLkhhcmREcml2ZSA9IEhhcmREcml2ZTsKICAgIGV4cG9ydHMuSGFyZERyaXZlRG93bmxvYWQgPSBIYXJkRHJpdmVEb3dubG9hZDsKICAgIGV4cG9ydHMuSGFyZERyaXZlVXBsb2FkID0gSGFyZERyaXZlVXBsb2FkOwogICAgZXhwb3J0cy5IYXJkSGF0ID0gSGFyZEhhdDsKICAgIGV4cG9ydHMuSGFzaCA9IEhhc2g7CiAgICBleHBvcnRzLkhhdEdsYXNzZXMgPSBIYXRHbGFzc2VzOwogICAgZXhwb3J0cy5IYXplID0gSGF6ZTsKICAgIGV4cG9ydHMuSGQgPSBIZDsKICAgIGV4cG9ydHMuSGRtaVBvcnQgPSBIZG1pUG9ydDsKICAgIGV4cG9ydHMuSGVhZGluZyA9IEhlYWRpbmc7CiAgICBleHBvcnRzLkhlYWRpbmcxID0gSGVhZGluZzE7CiAgICBleHBvcnRzLkhlYWRpbmcyID0gSGVhZGluZzI7CiAgICBleHBvcnRzLkhlYWRpbmczID0gSGVhZGluZzM7CiAgICBleHBvcnRzLkhlYWRpbmc0ID0gSGVhZGluZzQ7CiAgICBleHBvcnRzLkhlYWRpbmc1ID0gSGVhZGluZzU7CiAgICBleHBvcnRzLkhlYWRpbmc2ID0gSGVhZGluZzY7CiAgICBleHBvcnRzLkhlYWRwaG9uZU9mZiA9IEhlYWRwaG9uZU9mZjsKICAgIGV4cG9ydHMuSGVhZHBob25lcyA9IEhlYWRwaG9uZXM7CiAgICBleHBvcnRzLkhlYWRzZXQgPSBIZWFkc2V0OwogICAgZXhwb3J0cy5IZWFydCA9IEhlYXJ0OwogICAgZXhwb3J0cy5IZWFydENyYWNrID0gSGVhcnRDcmFjazsKICAgIGV4cG9ydHMuSGVhcnRIYW5kc2hha2UgPSBIZWFydEhhbmRzaGFrZTsKICAgIGV4cG9ydHMuSGVhcnRNaW51cyA9IEhlYXJ0TWludXM7CiAgICBleHBvcnRzLkhlYXJ0T2ZmID0gSGVhcnRPZmY7CiAgICBleHBvcnRzLkhlYXJ0UGx1cyA9IEhlYXJ0UGx1czsKICAgIGV4cG9ydHMuSGVhcnRQdWxzZSA9IEhlYXJ0UHVsc2U7CiAgICBleHBvcnRzLkhlYXRlciA9IEhlYXRlcjsKICAgIGV4cG9ydHMuSGVsaWNvcHRlciA9IEhlbGljb3B0ZXI7CiAgICBleHBvcnRzLkhlbHBDaXJjbGUgPSBDaXJjbGVRdWVzdGlvbk1hcms7CiAgICBleHBvcnRzLkhlbHBpbmdIYW5kID0gSGFuZEhlbHBpbmc7CiAgICBleHBvcnRzLkhleGFnb24gPSBIZXhhZ29uOwogICAgZXhwb3J0cy5IaWdobGlnaHRlciA9IEhpZ2hsaWdodGVyOwogICAgZXhwb3J0cy5IaXN0b3J5ID0gSGlzdG9yeTsKICAgIGV4cG9ydHMuSG9tZSA9IEhvdXNlOwogICAgZXhwb3J0cy5Ib3AgPSBIb3A7CiAgICBleHBvcnRzLkhvcE9mZiA9IEhvcE9mZjsKICAgIGV4cG9ydHMuSG9zcGl0YWwgPSBIb3NwaXRhbDsKICAgIGV4cG9ydHMuSG90ZWwgPSBIb3RlbDsKICAgIGV4cG9ydHMuSG91cmdsYXNzID0gSG91cmdsYXNzOwogICAgZXhwb3J0cy5Ib3VzZSA9IEhvdXNlOwogICAgZXhwb3J0cy5Ib3VzZUhlYXJ0ID0gSG91c2VIZWFydDsKICAgIGV4cG9ydHMuSG91c2VQbHVnID0gSG91c2VQbHVnOwogICAgZXhwb3J0cy5Ib3VzZVBsdXMgPSBIb3VzZVBsdXM7CiAgICBleHBvcnRzLkhvdXNlV2lmaSA9IEhvdXNlV2lmaTsKICAgIGV4cG9ydHMuSWNlQ3JlYW0gPSBJY2VDcmVhbUNvbmU7CiAgICBleHBvcnRzLkljZUNyZWFtMiA9IEljZUNyZWFtQm93bDsKICAgIGV4cG9ydHMuSWNlQ3JlYW1Cb3dsID0gSWNlQ3JlYW1Cb3dsOwogICAgZXhwb3J0cy5JY2VDcmVhbUNvbmUgPSBJY2VDcmVhbUNvbmU7CiAgICBleHBvcnRzLklkQ2FyZCA9IElkQ2FyZDsKICAgIGV4cG9ydHMuSWRDYXJkTGFueWFyZCA9IElkQ2FyZExhbnlhcmQ7CiAgICBleHBvcnRzLkltYWdlID0gSW1hZ2UyOwogICAgZXhwb3J0cy5JbWFnZURvd24gPSBJbWFnZURvd247CiAgICBleHBvcnRzLkltYWdlTWludXMgPSBJbWFnZU1pbnVzOwogICAgZXhwb3J0cy5JbWFnZU9mZiA9IEltYWdlT2ZmOwogICAgZXhwb3J0cy5JbWFnZVBsYXkgPSBJbWFnZVBsYXk7CiAgICBleHBvcnRzLkltYWdlUGx1cyA9IEltYWdlUGx1czsKICAgIGV4cG9ydHMuSW1hZ2VVcCA9IEltYWdlVXA7CiAgICBleHBvcnRzLkltYWdlVXBzY2FsZSA9IEltYWdlVXBzY2FsZTsKICAgIGV4cG9ydHMuSW1hZ2VzID0gSW1hZ2VzOwogICAgZXhwb3J0cy5JbXBvcnQgPSBJbXBvcnQ7CiAgICBleHBvcnRzLkluYm94ID0gSW5ib3g7CiAgICBleHBvcnRzLkluZGVudCA9IExpc3RJbmRlbnRJbmNyZWFzZTsKICAgIGV4cG9ydHMuSW5kZW50RGVjcmVhc2UgPSBMaXN0SW5kZW50RGVjcmVhc2U7CiAgICBleHBvcnRzLkluZGVudEluY3JlYXNlID0gTGlzdEluZGVudEluY3JlYXNlOwogICAgZXhwb3J0cy5JbmRpYW5SdXBlZSA9IEluZGlhblJ1cGVlOwogICAgZXhwb3J0cy5JbmZpbml0eSA9IEluZmluaXR5MjsKICAgIGV4cG9ydHMuSW5mbyA9IEluZm8yOwogICAgZXhwb3J0cy5JbnNwZWN0ID0gU3F1YXJlTW91c2VQb2ludGVyOwogICAgZXhwb3J0cy5JbnNwZWN0aW9uUGFuZWwgPSBJbnNwZWN0aW9uUGFuZWw7CiAgICBleHBvcnRzLkluc3RhZ3JhbSA9IEluc3RhZ3JhbTsKICAgIGV4cG9ydHMuSXRhbGljID0gSXRhbGljOwogICAgZXhwb3J0cy5JdGVyYXRpb25DY3cgPSBJdGVyYXRpb25DY3c7CiAgICBleHBvcnRzLkl0ZXJhdGlvbkN3ID0gSXRlcmF0aW9uQ3c7CiAgICBleHBvcnRzLkphcGFuZXNlWWVuID0gSmFwYW5lc2VZZW47CiAgICBleHBvcnRzLkpveXN0aWNrID0gSm95c3RpY2s7CiAgICBleHBvcnRzLkthbmJhbiA9IEthbmJhbjsKICAgIGV4cG9ydHMuS2FuYmFuU3F1YXJlID0gU3F1YXJlS2FuYmFuOwogICAgZXhwb3J0cy5LYW5iYW5TcXVhcmVEYXNoZWQgPSBTcXVhcmVEYXNoZWRLYW5iYW47CiAgICBleHBvcnRzLktheWFrID0gS2F5YWs7CiAgICBleHBvcnRzLktleSA9IEtleTI7CiAgICBleHBvcnRzLktleVJvdW5kID0gS2V5Um91bmQ7CiAgICBleHBvcnRzLktleVNxdWFyZSA9IEtleVNxdWFyZTsKICAgIGV4cG9ydHMuS2V5Ym9hcmQgPSBLZXlib2FyZDI7CiAgICBleHBvcnRzLktleWJvYXJkTXVzaWMgPSBLZXlib2FyZE11c2ljOwogICAgZXhwb3J0cy5LZXlib2FyZE9mZiA9IEtleWJvYXJkT2ZmOwogICAgZXhwb3J0cy5MYW1wID0gTGFtcDsKICAgIGV4cG9ydHMuTGFtcENlaWxpbmcgPSBMYW1wQ2VpbGluZzsKICAgIGV4cG9ydHMuTGFtcERlc2sgPSBMYW1wRGVzazsKICAgIGV4cG9ydHMuTGFtcEZsb29yID0gTGFtcEZsb29yOwogICAgZXhwb3J0cy5MYW1wV2FsbERvd24gPSBMYW1wV2FsbERvd247CiAgICBleHBvcnRzLkxhbXBXYWxsVXAgPSBMYW1wV2FsbFVwOwogICAgZXhwb3J0cy5MYW5kUGxvdCA9IExhbmRQbG90OwogICAgZXhwb3J0cy5MYW5kbWFyayA9IExhbmRtYXJrOwogICAgZXhwb3J0cy5MYW5ndWFnZXMgPSBMYW5ndWFnZXM7CiAgICBleHBvcnRzLkxhcHRvcCA9IExhcHRvcDsKICAgIGV4cG9ydHMuTGFwdG9wMiA9IExhcHRvcE1pbmltYWw7CiAgICBleHBvcnRzLkxhcHRvcE1pbmltYWwgPSBMYXB0b3BNaW5pbWFsOwogICAgZXhwb3J0cy5MYXB0b3BNaW5pbWFsQ2hlY2sgPSBMYXB0b3BNaW5pbWFsQ2hlY2s7CiAgICBleHBvcnRzLkxhc3NvID0gTGFzc287CiAgICBleHBvcnRzLkxhc3NvU2VsZWN0ID0gTGFzc29TZWxlY3Q7CiAgICBleHBvcnRzLkxhdWdoID0gTGF1Z2g7CiAgICBleHBvcnRzLkxheWVycyA9IExheWVyczM7CiAgICBleHBvcnRzLkxheWVyczIgPSBMYXllcnMyOwogICAgZXhwb3J0cy5MYXllcnMzID0gTGF5ZXJzMzsKICAgIGV4cG9ydHMuTGF5ZXJzUGx1cyA9IExheWVyc1BsdXM7CiAgICBleHBvcnRzLkxheW91dCA9IFBhbmVsc1RvcExlZnQ7CiAgICBleHBvcnRzLkxheW91dERhc2hib2FyZCA9IExheW91dERhc2hib2FyZDsKICAgIGV4cG9ydHMuTGF5b3V0R3JpZCA9IExheW91dEdyaWQ7CiAgICBleHBvcnRzLkxheW91dExpc3QgPSBMYXlvdXRMaXN0OwogICAgZXhwb3J0cy5MYXlvdXRQYW5lbExlZnQgPSBMYXlvdXRQYW5lbExlZnQ7CiAgICBleHBvcnRzLkxheW91dFBhbmVsVG9wID0gTGF5b3V0UGFuZWxUb3A7CiAgICBleHBvcnRzLkxheW91dFRlbXBsYXRlID0gTGF5b3V0VGVtcGxhdGU7CiAgICBleHBvcnRzLkxlYWYgPSBMZWFmOwogICAgZXhwb3J0cy5MZWFmeUdyZWVuID0gTGVhZnlHcmVlbjsKICAgIGV4cG9ydHMuTGVjdGVybiA9IExlY3Rlcm47CiAgICBleHBvcnRzLkxldHRlclRleHQgPSBUZXh0SW5pdGlhbDsKICAgIGV4cG9ydHMuTGlicmFyeSA9IExpYnJhcnkyOwogICAgZXhwb3J0cy5MaWJyYXJ5QmlnID0gTGlicmFyeUJpZzsKICAgIGV4cG9ydHMuTGlicmFyeVNxdWFyZSA9IFNxdWFyZUxpYnJhcnk7CiAgICBleHBvcnRzLkxpZmVCdW95ID0gTGlmZUJ1b3k7CiAgICBleHBvcnRzLkxpZ2F0dXJlID0gTGlnYXR1cmU7CiAgICBleHBvcnRzLkxpZ2h0YnVsYiA9IExpZ2h0YnVsYjsKICAgIGV4cG9ydHMuTGlnaHRidWxiT2ZmID0gTGlnaHRidWxiT2ZmOwogICAgZXhwb3J0cy5MaW5lQ2hhcnQgPSBDaGFydExpbmU7CiAgICBleHBvcnRzLkxpbmVTcXVpZ2dsZSA9IExpbmVTcXVpZ2dsZTsKICAgIGV4cG9ydHMuTGluayA9IExpbms7CiAgICBleHBvcnRzLkxpbmsyID0gTGluazI7CiAgICBleHBvcnRzLkxpbmsyT2ZmID0gTGluazJPZmY7CiAgICBleHBvcnRzLkxpbmtlZGluID0gTGlua2VkaW47CiAgICBleHBvcnRzLkxpc3QgPSBMaXN0OwogICAgZXhwb3J0cy5MaXN0Q2hlY2sgPSBMaXN0Q2hlY2s7CiAgICBleHBvcnRzLkxpc3RDaGVja3MgPSBMaXN0Q2hlY2tzOwogICAgZXhwb3J0cy5MaXN0Q2hldnJvbnNEb3duVXAgPSBMaXN0Q2hldnJvbnNEb3duVXA7CiAgICBleHBvcnRzLkxpc3RDaGV2cm9uc1VwRG93biA9IExpc3RDaGV2cm9uc1VwRG93bjsKICAgIGV4cG9ydHMuTGlzdENvbGxhcHNlID0gTGlzdENvbGxhcHNlOwogICAgZXhwb3J0cy5MaXN0RW5kID0gTGlzdEVuZDsKICAgIGV4cG9ydHMuTGlzdEZpbHRlciA9IExpc3RGaWx0ZXI7CiAgICBleHBvcnRzLkxpc3RGaWx0ZXJQbHVzID0gTGlzdEZpbHRlclBsdXM7CiAgICBleHBvcnRzLkxpc3RJbmRlbnREZWNyZWFzZSA9IExpc3RJbmRlbnREZWNyZWFzZTsKICAgIGV4cG9ydHMuTGlzdEluZGVudEluY3JlYXNlID0gTGlzdEluZGVudEluY3JlYXNlOwogICAgZXhwb3J0cy5MaXN0TWludXMgPSBMaXN0TWludXM7CiAgICBleHBvcnRzLkxpc3RNdXNpYyA9IExpc3RNdXNpYzsKICAgIGV4cG9ydHMuTGlzdE9yZGVyZWQgPSBMaXN0T3JkZXJlZDsKICAgIGV4cG9ydHMuTGlzdFBsdXMgPSBMaXN0UGx1czsKICAgIGV4cG9ydHMuTGlzdFJlc3RhcnQgPSBMaXN0UmVzdGFydDsKICAgIGV4cG9ydHMuTGlzdFN0YXJ0ID0gTGlzdFN0YXJ0OwogICAgZXhwb3J0cy5MaXN0VG9kbyA9IExpc3RUb2RvOwogICAgZXhwb3J0cy5MaXN0VHJlZSA9IExpc3RUcmVlOwogICAgZXhwb3J0cy5MaXN0VmlkZW8gPSBMaXN0VmlkZW87CiAgICBleHBvcnRzLkxpc3RYID0gTGlzdFg7CiAgICBleHBvcnRzLkxvYWRlciA9IExvYWRlcjsKICAgIGV4cG9ydHMuTG9hZGVyMiA9IExvYWRlckNpcmNsZTsKICAgIGV4cG9ydHMuTG9hZGVyQ2lyY2xlID0gTG9hZGVyQ2lyY2xlOwogICAgZXhwb3J0cy5Mb2FkZXJQaW53aGVlbCA9IExvYWRlclBpbndoZWVsOwogICAgZXhwb3J0cy5Mb2NhdGUgPSBMb2NhdGU7CiAgICBleHBvcnRzLkxvY2F0ZUZpeGVkID0gTG9jYXRlRml4ZWQ7CiAgICBleHBvcnRzLkxvY2F0ZU9mZiA9IExvY2F0ZU9mZjsKICAgIGV4cG9ydHMuTG9jYXRpb25FZGl0ID0gTWFwUGluUGVuOwogICAgZXhwb3J0cy5Mb2NrID0gTG9jazsKICAgIGV4cG9ydHMuTG9ja0tleWhvbGUgPSBMb2NrS2V5aG9sZTsKICAgIGV4cG9ydHMuTG9ja0tleWhvbGVPcGVuID0gTG9ja0tleWhvbGVPcGVuOwogICAgZXhwb3J0cy5Mb2NrT3BlbiA9IExvY2tPcGVuOwogICAgZXhwb3J0cy5Mb2dJbiA9IExvZ0luOwogICAgZXhwb3J0cy5Mb2dPdXQgPSBMb2dPdXQ7CiAgICBleHBvcnRzLkxvZ3MgPSBMb2dzOwogICAgZXhwb3J0cy5Mb2xsaXBvcCA9IExvbGxpcG9wOwogICAgZXhwb3J0cy5MdWdnYWdlID0gTHVnZ2FnZTsKICAgIGV4cG9ydHMuTVNxdWFyZSA9IFNxdWFyZU07CiAgICBleHBvcnRzLk1hZ25ldCA9IE1hZ25ldDsKICAgIGV4cG9ydHMuTWFpbCA9IE1haWw7CiAgICBleHBvcnRzLk1haWxDaGVjayA9IE1haWxDaGVjazsKICAgIGV4cG9ydHMuTWFpbE1pbnVzID0gTWFpbE1pbnVzOwogICAgZXhwb3J0cy5NYWlsT3BlbiA9IE1haWxPcGVuOwogICAgZXhwb3J0cy5NYWlsUGx1cyA9IE1haWxQbHVzOwogICAgZXhwb3J0cy5NYWlsUXVlc3Rpb24gPSBNYWlsUXVlc3Rpb25NYXJrOwogICAgZXhwb3J0cy5NYWlsUXVlc3Rpb25NYXJrID0gTWFpbFF1ZXN0aW9uTWFyazsKICAgIGV4cG9ydHMuTWFpbFNlYXJjaCA9IE1haWxTZWFyY2g7CiAgICBleHBvcnRzLk1haWxXYXJuaW5nID0gTWFpbFdhcm5pbmc7CiAgICBleHBvcnRzLk1haWxYID0gTWFpbFg7CiAgICBleHBvcnRzLk1haWxib3ggPSBNYWlsYm94OwogICAgZXhwb3J0cy5NYWlscyA9IE1haWxzOwogICAgZXhwb3J0cy5NYXAgPSBNYXAyOwogICAgZXhwb3J0cy5NYXBNaW51cyA9IE1hcE1pbnVzOwogICAgZXhwb3J0cy5NYXBQaW4gPSBNYXBQaW47CiAgICBleHBvcnRzLk1hcFBpbkNoZWNrID0gTWFwUGluQ2hlY2s7CiAgICBleHBvcnRzLk1hcFBpbkNoZWNrSW5zaWRlID0gTWFwUGluQ2hlY2tJbnNpZGU7CiAgICBleHBvcnRzLk1hcFBpbkhvdXNlID0gTWFwUGluSG91c2U7CiAgICBleHBvcnRzLk1hcFBpbk1pbnVzID0gTWFwUGluTWludXM7CiAgICBleHBvcnRzLk1hcFBpbk1pbnVzSW5zaWRlID0gTWFwUGluTWludXNJbnNpZGU7CiAgICBleHBvcnRzLk1hcFBpbk9mZiA9IE1hcFBpbk9mZjsKICAgIGV4cG9ydHMuTWFwUGluUGVuID0gTWFwUGluUGVuOwogICAgZXhwb3J0cy5NYXBQaW5QbHVzID0gTWFwUGluUGx1czsKICAgIGV4cG9ydHMuTWFwUGluUGx1c0luc2lkZSA9IE1hcFBpblBsdXNJbnNpZGU7CiAgICBleHBvcnRzLk1hcFBpblggPSBNYXBQaW5YOwogICAgZXhwb3J0cy5NYXBQaW5YSW5zaWRlID0gTWFwUGluWEluc2lkZTsKICAgIGV4cG9ydHMuTWFwUGlubmVkID0gTWFwUGlubmVkOwogICAgZXhwb3J0cy5NYXBQbHVzID0gTWFwUGx1czsKICAgIGV4cG9ydHMuTWFycyA9IE1hcnM7CiAgICBleHBvcnRzLk1hcnNTdHJva2UgPSBNYXJzU3Ryb2tlOwogICAgZXhwb3J0cy5NYXJ0aW5pID0gTWFydGluaTsKICAgIGV4cG9ydHMuTWF4aW1pemUgPSBNYXhpbWl6ZTsKICAgIGV4cG9ydHMuTWF4aW1pemUyID0gTWF4aW1pemUyOwogICAgZXhwb3J0cy5NZWRhbCA9IE1lZGFsOwogICAgZXhwb3J0cy5NZWdhcGhvbmUgPSBNZWdhcGhvbmU7CiAgICBleHBvcnRzLk1lZ2FwaG9uZU9mZiA9IE1lZ2FwaG9uZU9mZjsKICAgIGV4cG9ydHMuTWVoID0gTWVoOwogICAgZXhwb3J0cy5NZW1vcnlTdGljayA9IE1lbW9yeVN0aWNrOwogICAgZXhwb3J0cy5NZW51ID0gTWVudTsKICAgIGV4cG9ydHMuTWVudVNxdWFyZSA9IFNxdWFyZU1lbnU7CiAgICBleHBvcnRzLk1lcmdlID0gTWVyZ2U7CiAgICBleHBvcnRzLk1lc3NhZ2VDaXJjbGUgPSBNZXNzYWdlQ2lyY2xlOwogICAgZXhwb3J0cy5NZXNzYWdlQ2lyY2xlQ29kZSA9IE1lc3NhZ2VDaXJjbGVDb2RlOwogICAgZXhwb3J0cy5NZXNzYWdlQ2lyY2xlRGFzaGVkID0gTWVzc2FnZUNpcmNsZURhc2hlZDsKICAgIGV4cG9ydHMuTWVzc2FnZUNpcmNsZUhlYXJ0ID0gTWVzc2FnZUNpcmNsZUhlYXJ0OwogICAgZXhwb3J0cy5NZXNzYWdlQ2lyY2xlTW9yZSA9IE1lc3NhZ2VDaXJjbGVNb3JlOwogICAgZXhwb3J0cy5NZXNzYWdlQ2lyY2xlT2ZmID0gTWVzc2FnZUNpcmNsZU9mZjsKICAgIGV4cG9ydHMuTWVzc2FnZUNpcmNsZVBsdXMgPSBNZXNzYWdlQ2lyY2xlUGx1czsKICAgIGV4cG9ydHMuTWVzc2FnZUNpcmNsZVF1ZXN0aW9uID0gTWVzc2FnZUNpcmNsZVF1ZXN0aW9uTWFyazsKICAgIGV4cG9ydHMuTWVzc2FnZUNpcmNsZVF1ZXN0aW9uTWFyayA9IE1lc3NhZ2VDaXJjbGVRdWVzdGlvbk1hcms7CiAgICBleHBvcnRzLk1lc3NhZ2VDaXJjbGVSZXBseSA9IE1lc3NhZ2VDaXJjbGVSZXBseTsKICAgIGV4cG9ydHMuTWVzc2FnZUNpcmNsZVdhcm5pbmcgPSBNZXNzYWdlQ2lyY2xlV2FybmluZzsKICAgIGV4cG9ydHMuTWVzc2FnZUNpcmNsZVggPSBNZXNzYWdlQ2lyY2xlWDsKICAgIGV4cG9ydHMuTWVzc2FnZVNxdWFyZSA9IE1lc3NhZ2VTcXVhcmU7CiAgICBleHBvcnRzLk1lc3NhZ2VTcXVhcmVDb2RlID0gTWVzc2FnZVNxdWFyZUNvZGU7CiAgICBleHBvcnRzLk1lc3NhZ2VTcXVhcmVEYXNoZWQgPSBNZXNzYWdlU3F1YXJlRGFzaGVkOwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlRGlmZiA9IE1lc3NhZ2VTcXVhcmVEaWZmOwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlRG90ID0gTWVzc2FnZVNxdWFyZURvdDsKICAgIGV4cG9ydHMuTWVzc2FnZVNxdWFyZUhlYXJ0ID0gTWVzc2FnZVNxdWFyZUhlYXJ0OwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlTG9jayA9IE1lc3NhZ2VTcXVhcmVMb2NrOwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlTW9yZSA9IE1lc3NhZ2VTcXVhcmVNb3JlOwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlT2ZmID0gTWVzc2FnZVNxdWFyZU9mZjsKICAgIGV4cG9ydHMuTWVzc2FnZVNxdWFyZVBsdXMgPSBNZXNzYWdlU3F1YXJlUGx1czsKICAgIGV4cG9ydHMuTWVzc2FnZVNxdWFyZVF1b3RlID0gTWVzc2FnZVNxdWFyZVF1b3RlOwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlUmVwbHkgPSBNZXNzYWdlU3F1YXJlUmVwbHk7CiAgICBleHBvcnRzLk1lc3NhZ2VTcXVhcmVTaGFyZSA9IE1lc3NhZ2VTcXVhcmVTaGFyZTsKICAgIGV4cG9ydHMuTWVzc2FnZVNxdWFyZVRleHQgPSBNZXNzYWdlU3F1YXJlVGV4dDsKICAgIGV4cG9ydHMuTWVzc2FnZVNxdWFyZVdhcm5pbmcgPSBNZXNzYWdlU3F1YXJlV2FybmluZzsKICAgIGV4cG9ydHMuTWVzc2FnZVNxdWFyZVggPSBNZXNzYWdlU3F1YXJlWDsKICAgIGV4cG9ydHMuTWVzc2FnZXNTcXVhcmUgPSBNZXNzYWdlc1NxdWFyZTsKICAgIGV4cG9ydHMuTWljID0gTWljOwogICAgZXhwb3J0cy5NaWMyID0gTWljVm9jYWw7CiAgICBleHBvcnRzLk1pY09mZiA9IE1pY09mZjsKICAgIGV4cG9ydHMuTWljVm9jYWwgPSBNaWNWb2NhbDsKICAgIGV4cG9ydHMuTWljcm9jaGlwID0gTWljcm9jaGlwOwogICAgZXhwb3J0cy5NaWNyb3Njb3BlID0gTWljcm9zY29wZTsKICAgIGV4cG9ydHMuTWljcm93YXZlID0gTWljcm93YXZlOwogICAgZXhwb3J0cy5NaWxlc3RvbmUgPSBNaWxlc3RvbmU7CiAgICBleHBvcnRzLk1pbGsgPSBNaWxrOwogICAgZXhwb3J0cy5NaWxrT2ZmID0gTWlsa09mZjsKICAgIGV4cG9ydHMuTWluaW1pemUgPSBNaW5pbWl6ZTsKICAgIGV4cG9ydHMuTWluaW1pemUyID0gTWluaW1pemUyOwogICAgZXhwb3J0cy5NaW51cyA9IE1pbnVzOwogICAgZXhwb3J0cy5NaW51c0NpcmNsZSA9IENpcmNsZU1pbnVzOwogICAgZXhwb3J0cy5NaW51c1NxdWFyZSA9IFNxdWFyZU1pbnVzOwogICAgZXhwb3J0cy5Nb25pdG9yID0gTW9uaXRvcjsKICAgIGV4cG9ydHMuTW9uaXRvckNoZWNrID0gTW9uaXRvckNoZWNrOwogICAgZXhwb3J0cy5Nb25pdG9yQ2xvdWQgPSBNb25pdG9yQ2xvdWQ7CiAgICBleHBvcnRzLk1vbml0b3JDb2cgPSBNb25pdG9yQ29nOwogICAgZXhwb3J0cy5Nb25pdG9yRG90ID0gTW9uaXRvckRvdDsKICAgIGV4cG9ydHMuTW9uaXRvckRvd24gPSBNb25pdG9yRG93bjsKICAgIGV4cG9ydHMuTW9uaXRvck9mZiA9IE1vbml0b3JPZmY7CiAgICBleHBvcnRzLk1vbml0b3JQYXVzZSA9IE1vbml0b3JQYXVzZTsKICAgIGV4cG9ydHMuTW9uaXRvclBsYXkgPSBNb25pdG9yUGxheTsKICAgIGV4cG9ydHMuTW9uaXRvclNtYXJ0cGhvbmUgPSBNb25pdG9yU21hcnRwaG9uZTsKICAgIGV4cG9ydHMuTW9uaXRvclNwZWFrZXIgPSBNb25pdG9yU3BlYWtlcjsKICAgIGV4cG9ydHMuTW9uaXRvclN0b3AgPSBNb25pdG9yU3RvcDsKICAgIGV4cG9ydHMuTW9uaXRvclVwID0gTW9uaXRvclVwOwogICAgZXhwb3J0cy5Nb25pdG9yWCA9IE1vbml0b3JYOwogICAgZXhwb3J0cy5Nb29uID0gTW9vbjsKICAgIGV4cG9ydHMuTW9vblN0YXIgPSBNb29uU3RhcjsKICAgIGV4cG9ydHMuTW9yZUhvcml6b250YWwgPSBFbGxpcHNpczsKICAgIGV4cG9ydHMuTW9yZVZlcnRpY2FsID0gRWxsaXBzaXNWZXJ0aWNhbDsKICAgIGV4cG9ydHMuTW90b3JiaWtlID0gTW90b3JiaWtlOwogICAgZXhwb3J0cy5Nb3VudGFpbiA9IE1vdW50YWluOwogICAgZXhwb3J0cy5Nb3VudGFpblNub3cgPSBNb3VudGFpblNub3c7CiAgICBleHBvcnRzLk1vdXNlID0gTW91c2U7CiAgICBleHBvcnRzLk1vdXNlT2ZmID0gTW91c2VPZmY7CiAgICBleHBvcnRzLk1vdXNlUG9pbnRlciA9IE1vdXNlUG9pbnRlcjsKICAgIGV4cG9ydHMuTW91c2VQb2ludGVyMiA9IE1vdXNlUG9pbnRlcjI7CiAgICBleHBvcnRzLk1vdXNlUG9pbnRlcjJPZmYgPSBNb3VzZVBvaW50ZXIyT2ZmOwogICAgZXhwb3J0cy5Nb3VzZVBvaW50ZXJCYW4gPSBNb3VzZVBvaW50ZXJCYW47CiAgICBleHBvcnRzLk1vdXNlUG9pbnRlckNsaWNrID0gTW91c2VQb2ludGVyQ2xpY2s7CiAgICBleHBvcnRzLk1vdXNlUG9pbnRlclNxdWFyZURhc2hlZCA9IFNxdWFyZURhc2hlZE1vdXNlUG9pbnRlcjsKICAgIGV4cG9ydHMuTW92ZSA9IE1vdmU7CiAgICBleHBvcnRzLk1vdmUzRCA9IE1vdmUzZDsKICAgIGV4cG9ydHMuTW92ZTNkID0gTW92ZTNkOwogICAgZXhwb3J0cy5Nb3ZlRGlhZ29uYWwgPSBNb3ZlRGlhZ29uYWw7CiAgICBleHBvcnRzLk1vdmVEaWFnb25hbDIgPSBNb3ZlRGlhZ29uYWwyOwogICAgZXhwb3J0cy5Nb3ZlRG93biA9IE1vdmVEb3duOwogICAgZXhwb3J0cy5Nb3ZlRG93bkxlZnQgPSBNb3ZlRG93bkxlZnQ7CiAgICBleHBvcnRzLk1vdmVEb3duUmlnaHQgPSBNb3ZlRG93blJpZ2h0OwogICAgZXhwb3J0cy5Nb3ZlSG9yaXpvbnRhbCA9IE1vdmVIb3Jpem9udGFsOwogICAgZXhwb3J0cy5Nb3ZlTGVmdCA9IE1vdmVMZWZ0OwogICAgZXhwb3J0cy5Nb3ZlUmlnaHQgPSBNb3ZlUmlnaHQ7CiAgICBleHBvcnRzLk1vdmVVcCA9IE1vdmVVcDsKICAgIGV4cG9ydHMuTW92ZVVwTGVmdCA9IE1vdmVVcExlZnQ7CiAgICBleHBvcnRzLk1vdmVVcFJpZ2h0ID0gTW92ZVVwUmlnaHQ7CiAgICBleHBvcnRzLk1vdmVWZXJ0aWNhbCA9IE1vdmVWZXJ0aWNhbDsKICAgIGV4cG9ydHMuTXVzaWMgPSBNdXNpYzsKICAgIGV4cG9ydHMuTXVzaWMyID0gTXVzaWMyOwogICAgZXhwb3J0cy5NdXNpYzMgPSBNdXNpYzM7CiAgICBleHBvcnRzLk11c2ljNCA9IE11c2ljNDsKICAgIGV4cG9ydHMuTmF2aWdhdGlvbiA9IE5hdmlnYXRpb247CiAgICBleHBvcnRzLk5hdmlnYXRpb24yID0gTmF2aWdhdGlvbjI7CiAgICBleHBvcnRzLk5hdmlnYXRpb24yT2ZmID0gTmF2aWdhdGlvbjJPZmY7CiAgICBleHBvcnRzLk5hdmlnYXRpb25PZmYgPSBOYXZpZ2F0aW9uT2ZmOwogICAgZXhwb3J0cy5OZXR3b3JrID0gTmV0d29yazsKICAgIGV4cG9ydHMuTmV3c3BhcGVyID0gTmV3c3BhcGVyOwogICAgZXhwb3J0cy5OZmMgPSBOZmM7CiAgICBleHBvcnRzLk5vbkJpbmFyeSA9IE5vbkJpbmFyeTsKICAgIGV4cG9ydHMuTm90ZWJvb2sgPSBOb3RlYm9vazsKICAgIGV4cG9ydHMuTm90ZWJvb2tQZW4gPSBOb3RlYm9va1BlbjsKICAgIGV4cG9ydHMuTm90ZWJvb2tUYWJzID0gTm90ZWJvb2tUYWJzOwogICAgZXhwb3J0cy5Ob3RlYm9va1RleHQgPSBOb3RlYm9va1RleHQ7CiAgICBleHBvcnRzLk5vdGVwYWRUZXh0ID0gTm90ZXBhZFRleHQ7CiAgICBleHBvcnRzLk5vdGVwYWRUZXh0RGFzaGVkID0gTm90ZXBhZFRleHREYXNoZWQ7CiAgICBleHBvcnRzLk51dCA9IE51dDsKICAgIGV4cG9ydHMuTnV0T2ZmID0gTnV0T2ZmOwogICAgZXhwb3J0cy5PY3RhZ29uID0gT2N0YWdvbjsKICAgIGV4cG9ydHMuT2N0YWdvbkFsZXJ0ID0gT2N0YWdvbkFsZXJ0OwogICAgZXhwb3J0cy5PY3RhZ29uTWludXMgPSBPY3RhZ29uTWludXM7CiAgICBleHBvcnRzLk9jdGFnb25QYXVzZSA9IE9jdGFnb25QYXVzZTsKICAgIGV4cG9ydHMuT2N0YWdvblggPSBPY3RhZ29uWDsKICAgIGV4cG9ydHMuT21lZ2EgPSBPbWVnYTsKICAgIGV4cG9ydHMuT3B0aW9uID0gT3B0aW9uOwogICAgZXhwb3J0cy5PcmJpdCA9IE9yYml0OwogICAgZXhwb3J0cy5PcmlnYW1pID0gT3JpZ2FtaTsKICAgIGV4cG9ydHMuT3V0ZGVudCA9IExpc3RJbmRlbnREZWNyZWFzZTsKICAgIGV4cG9ydHMuUGFja2FnZSA9IFBhY2thZ2U7CiAgICBleHBvcnRzLlBhY2thZ2UyID0gUGFja2FnZTI7CiAgICBleHBvcnRzLlBhY2thZ2VDaGVjayA9IFBhY2thZ2VDaGVjazsKICAgIGV4cG9ydHMuUGFja2FnZU1pbnVzID0gUGFja2FnZU1pbnVzOwogICAgZXhwb3J0cy5QYWNrYWdlT3BlbiA9IFBhY2thZ2VPcGVuOwogICAgZXhwb3J0cy5QYWNrYWdlUGx1cyA9IFBhY2thZ2VQbHVzOwogICAgZXhwb3J0cy5QYWNrYWdlU2VhcmNoID0gUGFja2FnZVNlYXJjaDsKICAgIGV4cG9ydHMuUGFja2FnZVggPSBQYWNrYWdlWDsKICAgIGV4cG9ydHMuUGFpbnRCdWNrZXQgPSBQYWludEJ1Y2tldDsKICAgIGV4cG9ydHMuUGFpbnRSb2xsZXIgPSBQYWludFJvbGxlcjsKICAgIGV4cG9ydHMuUGFpbnRicnVzaCA9IFBhaW50YnJ1c2g7CiAgICBleHBvcnRzLlBhaW50YnJ1c2gyID0gUGFpbnRicnVzaFZlcnRpY2FsOwogICAgZXhwb3J0cy5QYWludGJydXNoVmVydGljYWwgPSBQYWludGJydXNoVmVydGljYWw7CiAgICBleHBvcnRzLlBhbGV0dGUgPSBQYWxldHRlOwogICAgZXhwb3J0cy5QYWxtdHJlZSA9IFRyZWVQYWxtOwogICAgZXhwb3J0cy5QYW5kYSA9IFBhbmRhOwogICAgZXhwb3J0cy5QYW5lbEJvdHRvbSA9IFBhbmVsQm90dG9tOwogICAgZXhwb3J0cy5QYW5lbEJvdHRvbUNsb3NlID0gUGFuZWxCb3R0b21DbG9zZTsKICAgIGV4cG9ydHMuUGFuZWxCb3R0b21EYXNoZWQgPSBQYW5lbEJvdHRvbURhc2hlZDsKICAgIGV4cG9ydHMuUGFuZWxCb3R0b21JbmFjdGl2ZSA9IFBhbmVsQm90dG9tRGFzaGVkOwogICAgZXhwb3J0cy5QYW5lbEJvdHRvbU9wZW4gPSBQYW5lbEJvdHRvbU9wZW47CiAgICBleHBvcnRzLlBhbmVsTGVmdCA9IFBhbmVsTGVmdDsKICAgIGV4cG9ydHMuUGFuZWxMZWZ0Q2xvc2UgPSBQYW5lbExlZnRDbG9zZTsKICAgIGV4cG9ydHMuUGFuZWxMZWZ0RGFzaGVkID0gUGFuZWxMZWZ0RGFzaGVkOwogICAgZXhwb3J0cy5QYW5lbExlZnRJbmFjdGl2ZSA9IFBhbmVsTGVmdERhc2hlZDsKICAgIGV4cG9ydHMuUGFuZWxMZWZ0T3BlbiA9IFBhbmVsTGVmdE9wZW47CiAgICBleHBvcnRzLlBhbmVsTGVmdFJpZ2h0RGFzaGVkID0gUGFuZWxMZWZ0UmlnaHREYXNoZWQ7CiAgICBleHBvcnRzLlBhbmVsUmlnaHQgPSBQYW5lbFJpZ2h0OwogICAgZXhwb3J0cy5QYW5lbFJpZ2h0Q2xvc2UgPSBQYW5lbFJpZ2h0Q2xvc2U7CiAgICBleHBvcnRzLlBhbmVsUmlnaHREYXNoZWQgPSBQYW5lbFJpZ2h0RGFzaGVkOwogICAgZXhwb3J0cy5QYW5lbFJpZ2h0SW5hY3RpdmUgPSBQYW5lbFJpZ2h0RGFzaGVkOwogICAgZXhwb3J0cy5QYW5lbFJpZ2h0T3BlbiA9IFBhbmVsUmlnaHRPcGVuOwogICAgZXhwb3J0cy5QYW5lbFRvcCA9IFBhbmVsVG9wOwogICAgZXhwb3J0cy5QYW5lbFRvcEJvdHRvbURhc2hlZCA9IFBhbmVsVG9wQm90dG9tRGFzaGVkOwogICAgZXhwb3J0cy5QYW5lbFRvcENsb3NlID0gUGFuZWxUb3BDbG9zZTsKICAgIGV4cG9ydHMuUGFuZWxUb3BEYXNoZWQgPSBQYW5lbFRvcERhc2hlZDsKICAgIGV4cG9ydHMuUGFuZWxUb3BJbmFjdGl2ZSA9IFBhbmVsVG9wRGFzaGVkOwogICAgZXhwb3J0cy5QYW5lbFRvcE9wZW4gPSBQYW5lbFRvcE9wZW47CiAgICBleHBvcnRzLlBhbmVsc0xlZnRCb3R0b20gPSBQYW5lbHNMZWZ0Qm90dG9tOwogICAgZXhwb3J0cy5QYW5lbHNMZWZ0UmlnaHQgPSBDb2x1bW5zMzsKICAgIGV4cG9ydHMuUGFuZWxzUmlnaHRCb3R0b20gPSBQYW5lbHNSaWdodEJvdHRvbTsKICAgIGV4cG9ydHMuUGFuZWxzVG9wQm90dG9tID0gUm93czM7CiAgICBleHBvcnRzLlBhbmVsc1RvcExlZnQgPSBQYW5lbHNUb3BMZWZ0OwogICAgZXhwb3J0cy5QYXBlcmNsaXAgPSBQYXBlcmNsaXA7CiAgICBleHBvcnRzLlBhcmVudGhlc2VzID0gUGFyZW50aGVzZXM7CiAgICBleHBvcnRzLlBhcmtpbmdDaXJjbGUgPSBDaXJjbGVQYXJraW5nOwogICAgZXhwb3J0cy5QYXJraW5nQ2lyY2xlT2ZmID0gQ2lyY2xlUGFya2luZ09mZjsKICAgIGV4cG9ydHMuUGFya2luZ01ldGVyID0gUGFya2luZ01ldGVyOwogICAgZXhwb3J0cy5QYXJraW5nU3F1YXJlID0gU3F1YXJlUGFya2luZzsKICAgIGV4cG9ydHMuUGFya2luZ1NxdWFyZU9mZiA9IFNxdWFyZVBhcmtpbmdPZmY7CiAgICBleHBvcnRzLlBhcnR5UG9wcGVyID0gUGFydHlQb3BwZXI7CiAgICBleHBvcnRzLlBhdXNlID0gUGF1c2U7CiAgICBleHBvcnRzLlBhdXNlQ2lyY2xlID0gQ2lyY2xlUGF1c2U7CiAgICBleHBvcnRzLlBhdXNlT2N0YWdvbiA9IE9jdGFnb25QYXVzZTsKICAgIGV4cG9ydHMuUGF3UHJpbnQgPSBQYXdQcmludDsKICAgIGV4cG9ydHMuUGNDYXNlID0gUGNDYXNlOwogICAgZXhwb3J0cy5QZW4gPSBQZW47CiAgICBleHBvcnRzLlBlbkJveCA9IFNxdWFyZVBlbjsKICAgIGV4cG9ydHMuUGVuTGluZSA9IFBlbkxpbmU7CiAgICBleHBvcnRzLlBlbk9mZiA9IFBlbk9mZjsKICAgIGV4cG9ydHMuUGVuU3F1YXJlID0gU3F1YXJlUGVuOwogICAgZXhwb3J0cy5QZW5Ub29sID0gUGVuVG9vbDsKICAgIGV4cG9ydHMuUGVuY2lsID0gUGVuY2lsOwogICAgZXhwb3J0cy5QZW5jaWxMaW5lID0gUGVuY2lsTGluZTsKICAgIGV4cG9ydHMuUGVuY2lsT2ZmID0gUGVuY2lsT2ZmOwogICAgZXhwb3J0cy5QZW5jaWxSdWxlciA9IFBlbmNpbFJ1bGVyOwogICAgZXhwb3J0cy5QZW50YWdvbiA9IFBlbnRhZ29uOwogICAgZXhwb3J0cy5QZXJjZW50ID0gUGVyY2VudDsKICAgIGV4cG9ydHMuUGVyY2VudENpcmNsZSA9IENpcmNsZVBlcmNlbnQ7CiAgICBleHBvcnRzLlBlcmNlbnREaWFtb25kID0gRGlhbW9uZFBlcmNlbnQ7CiAgICBleHBvcnRzLlBlcmNlbnRTcXVhcmUgPSBTcXVhcmVQZXJjZW50OwogICAgZXhwb3J0cy5QZXJzb25TdGFuZGluZyA9IFBlcnNvblN0YW5kaW5nOwogICAgZXhwb3J0cy5QaGlsaXBwaW5lUGVzbyA9IFBoaWxpcHBpbmVQZXNvOwogICAgZXhwb3J0cy5QaG9uZSA9IFBob25lOwogICAgZXhwb3J0cy5QaG9uZUNhbGwgPSBQaG9uZUNhbGw7CiAgICBleHBvcnRzLlBob25lRm9yd2FyZGVkID0gUGhvbmVGb3J3YXJkZWQ7CiAgICBleHBvcnRzLlBob25lSW5jb21pbmcgPSBQaG9uZUluY29taW5nOwogICAgZXhwb3J0cy5QaG9uZU1pc3NlZCA9IFBob25lTWlzc2VkOwogICAgZXhwb3J0cy5QaG9uZU9mZiA9IFBob25lT2ZmOwogICAgZXhwb3J0cy5QaG9uZU91dGdvaW5nID0gUGhvbmVPdXRnb2luZzsKICAgIGV4cG9ydHMuUGkgPSBQaTsKICAgIGV4cG9ydHMuUGlTcXVhcmUgPSBTcXVhcmVQaTsKICAgIGV4cG9ydHMuUGlhbm8gPSBQaWFubzsKICAgIGV4cG9ydHMuUGlja2F4ZSA9IFBpY2theGU7CiAgICBleHBvcnRzLlBpY3R1cmVJblBpY3R1cmUgPSBQaWN0dXJlSW5QaWN0dXJlOwogICAgZXhwb3J0cy5QaWN0dXJlSW5QaWN0dXJlMiA9IFBpY3R1cmVJblBpY3R1cmUyOwogICAgZXhwb3J0cy5QaWVDaGFydCA9IENoYXJ0UGllOwogICAgZXhwb3J0cy5QaWdneUJhbmsgPSBQaWdneUJhbms7CiAgICBleHBvcnRzLlBpbGNyb3cgPSBQaWxjcm93OwogICAgZXhwb3J0cy5QaWxjcm93TGVmdCA9IFBpbGNyb3dMZWZ0OwogICAgZXhwb3J0cy5QaWxjcm93UmlnaHQgPSBQaWxjcm93UmlnaHQ7CiAgICBleHBvcnRzLlBpbGNyb3dTcXVhcmUgPSBTcXVhcmVQaWxjcm93OwogICAgZXhwb3J0cy5QaWxsID0gUGlsbDsKICAgIGV4cG9ydHMuUGlsbEJvdHRsZSA9IFBpbGxCb3R0bGU7CiAgICBleHBvcnRzLlBpbiA9IFBpbjsKICAgIGV4cG9ydHMuUGluT2ZmID0gUGluT2ZmOwogICAgZXhwb3J0cy5QaXBldHRlID0gUGlwZXR0ZTsKICAgIGV4cG9ydHMuUGl6emEgPSBQaXp6YTsKICAgIGV4cG9ydHMuUGxhbmUgPSBQbGFuZTsKICAgIGV4cG9ydHMuUGxhbmVMYW5kaW5nID0gUGxhbmVMYW5kaW5nOwogICAgZXhwb3J0cy5QbGFuZVRha2VvZmYgPSBQbGFuZVRha2VvZmY7CiAgICBleHBvcnRzLlBsYXkgPSBQbGF5OwogICAgZXhwb3J0cy5QbGF5Q2lyY2xlID0gQ2lyY2xlUGxheTsKICAgIGV4cG9ydHMuUGxheVNxdWFyZSA9IFNxdWFyZVBsYXk7CiAgICBleHBvcnRzLlBsdWcgPSBQbHVnOwogICAgZXhwb3J0cy5QbHVnMiA9IFBsdWcyOwogICAgZXhwb3J0cy5QbHVnWmFwID0gUGx1Z1phcDsKICAgIGV4cG9ydHMuUGx1Z1phcDIgPSBQbHVnWmFwOwogICAgZXhwb3J0cy5QbHVzID0gUGx1czsKICAgIGV4cG9ydHMuUGx1c0NpcmNsZSA9IENpcmNsZVBsdXM7CiAgICBleHBvcnRzLlBsdXNTcXVhcmUgPSBTcXVhcmVQbHVzOwogICAgZXhwb3J0cy5Qb2NrZXQgPSBQb2NrZXQ7CiAgICBleHBvcnRzLlBvY2tldEtuaWZlID0gUG9ja2V0S25pZmU7CiAgICBleHBvcnRzLlBvZGNhc3QgPSBQb2RjYXN0OwogICAgZXhwb3J0cy5Qb2ludGVyID0gUG9pbnRlcjsKICAgIGV4cG9ydHMuUG9pbnRlck9mZiA9IFBvaW50ZXJPZmY7CiAgICBleHBvcnRzLlBvcGNvcm4gPSBQb3Bjb3JuOwogICAgZXhwb3J0cy5Qb3BzaWNsZSA9IFBvcHNpY2xlOwogICAgZXhwb3J0cy5Qb3VuZFN0ZXJsaW5nID0gUG91bmRTdGVybGluZzsKICAgIGV4cG9ydHMuUG93ZXIgPSBQb3dlcjsKICAgIGV4cG9ydHMuUG93ZXJDaXJjbGUgPSBDaXJjbGVQb3dlcjsKICAgIGV4cG9ydHMuUG93ZXJPZmYgPSBQb3dlck9mZjsKICAgIGV4cG9ydHMuUG93ZXJTcXVhcmUgPSBTcXVhcmVQb3dlcjsKICAgIGV4cG9ydHMuUHJlc2VudGF0aW9uID0gUHJlc2VudGF0aW9uOwogICAgZXhwb3J0cy5QcmludGVyID0gUHJpbnRlcjsKICAgIGV4cG9ydHMuUHJpbnRlckNoZWNrID0gUHJpbnRlckNoZWNrOwogICAgZXhwb3J0cy5QcmludGVyWCA9IFByaW50ZXJYOwogICAgZXhwb3J0cy5Qcm9qZWN0b3IgPSBQcm9qZWN0b3I7CiAgICBleHBvcnRzLlByb3BvcnRpb25zID0gUHJvcG9ydGlvbnM7CiAgICBleHBvcnRzLlB1enpsZSA9IFB1enpsZTsKICAgIGV4cG9ydHMuUHlyYW1pZCA9IFB5cmFtaWQ7CiAgICBleHBvcnRzLlFyQ29kZSA9IFFyQ29kZTsKICAgIGV4cG9ydHMuUXVvdGUgPSBRdW90ZTsKICAgIGV4cG9ydHMuUmFiYml0ID0gUmFiYml0OwogICAgZXhwb3J0cy5SYWRhciA9IFJhZGFyOwogICAgZXhwb3J0cy5SYWRpYXRpb24gPSBSYWRpYXRpb247CiAgICBleHBvcnRzLlJhZGljYWwgPSBSYWRpY2FsOwogICAgZXhwb3J0cy5SYWRpbyA9IFJhZGlvOwogICAgZXhwb3J0cy5SYWRpb1JlY2VpdmVyID0gUmFkaW9SZWNlaXZlcjsKICAgIGV4cG9ydHMuUmFkaW9Ub3dlciA9IFJhZGlvVG93ZXI7CiAgICBleHBvcnRzLlJhZGl1cyA9IFJhZGl1czsKICAgIGV4cG9ydHMuUmFpbFN5bWJvbCA9IFJhaWxTeW1ib2w7CiAgICBleHBvcnRzLlJhaW5ib3cgPSBSYWluYm93OwogICAgZXhwb3J0cy5SYXQgPSBSYXQ7CiAgICBleHBvcnRzLlJhdGlvID0gUmF0aW87CiAgICBleHBvcnRzLlJlY2VpcHQgPSBSZWNlaXB0OwogICAgZXhwb3J0cy5SZWNlaXB0Q2VudCA9IFJlY2VpcHRDZW50OwogICAgZXhwb3J0cy5SZWNlaXB0RXVybyA9IFJlY2VpcHRFdXJvOwogICAgZXhwb3J0cy5SZWNlaXB0SW5kaWFuUnVwZWUgPSBSZWNlaXB0SW5kaWFuUnVwZWU7CiAgICBleHBvcnRzLlJlY2VpcHRKYXBhbmVzZVllbiA9IFJlY2VpcHRKYXBhbmVzZVllbjsKICAgIGV4cG9ydHMuUmVjZWlwdFBvdW5kU3RlcmxpbmcgPSBSZWNlaXB0UG91bmRTdGVybGluZzsKICAgIGV4cG9ydHMuUmVjZWlwdFJ1c3NpYW5SdWJsZSA9IFJlY2VpcHRSdXNzaWFuUnVibGU7CiAgICBleHBvcnRzLlJlY2VpcHRTd2lzc0ZyYW5jID0gUmVjZWlwdFN3aXNzRnJhbmM7CiAgICBleHBvcnRzLlJlY2VpcHRUZXh0ID0gUmVjZWlwdFRleHQ7CiAgICBleHBvcnRzLlJlY2VpcHRUdXJraXNoTGlyYSA9IFJlY2VpcHRUdXJraXNoTGlyYTsKICAgIGV4cG9ydHMuUmVjdGFuZ2xlQ2lyY2xlID0gUmVjdGFuZ2xlQ2lyY2xlOwogICAgZXhwb3J0cy5SZWN0YW5nbGVFbGxpcHNpcyA9IFJlY3RhbmdsZUVsbGlwc2lzOwogICAgZXhwb3J0cy5SZWN0YW5nbGVHb2dnbGVzID0gUmVjdGFuZ2xlR29nZ2xlczsKICAgIGV4cG9ydHMuUmVjdGFuZ2xlSG9yaXpvbnRhbCA9IFJlY3RhbmdsZUhvcml6b250YWw7CiAgICBleHBvcnRzLlJlY3RhbmdsZVZlcnRpY2FsID0gUmVjdGFuZ2xlVmVydGljYWw7CiAgICBleHBvcnRzLlJlY3ljbGUgPSBSZWN5Y2xlOwogICAgZXhwb3J0cy5SZWRvID0gUmVkbzsKICAgIGV4cG9ydHMuUmVkbzIgPSBSZWRvMjsKICAgIGV4cG9ydHMuUmVkb0RvdCA9IFJlZG9Eb3Q7CiAgICBleHBvcnRzLlJlZnJlc2hDY3cgPSBSZWZyZXNoQ2N3OwogICAgZXhwb3J0cy5SZWZyZXNoQ2N3RG90ID0gUmVmcmVzaENjd0RvdDsKICAgIGV4cG9ydHMuUmVmcmVzaEN3ID0gUmVmcmVzaEN3OwogICAgZXhwb3J0cy5SZWZyZXNoQ3dPZmYgPSBSZWZyZXNoQ3dPZmY7CiAgICBleHBvcnRzLlJlZnJpZ2VyYXRvciA9IFJlZnJpZ2VyYXRvcjsKICAgIGV4cG9ydHMuUmVnZXggPSBSZWdleDsKICAgIGV4cG9ydHMuUmVtb3ZlRm9ybWF0dGluZyA9IFJlbW92ZUZvcm1hdHRpbmc7CiAgICBleHBvcnRzLlJlcGVhdCA9IFJlcGVhdDsKICAgIGV4cG9ydHMuUmVwZWF0MSA9IFJlcGVhdDE7CiAgICBleHBvcnRzLlJlcGVhdDIgPSBSZXBlYXQyOwogICAgZXhwb3J0cy5SZXBsYWNlID0gUmVwbGFjZTsKICAgIGV4cG9ydHMuUmVwbGFjZUFsbCA9IFJlcGxhY2VBbGw7CiAgICBleHBvcnRzLlJlcGx5ID0gUmVwbHk7CiAgICBleHBvcnRzLlJlcGx5QWxsID0gUmVwbHlBbGw7CiAgICBleHBvcnRzLlJld2luZCA9IFJld2luZDsKICAgIGV4cG9ydHMuUmliYm9uID0gUmliYm9uOwogICAgZXhwb3J0cy5Sb2NrZXQgPSBSb2NrZXQ7CiAgICBleHBvcnRzLlJvY2tpbmdDaGFpciA9IFJvY2tpbmdDaGFpcjsKICAgIGV4cG9ydHMuUm9sbGVyQ29hc3RlciA9IFJvbGxlckNvYXN0ZXI7CiAgICBleHBvcnRzLlJvc2UgPSBSb3NlOwogICAgZXhwb3J0cy5Sb3RhdGUzRCA9IFJvdGF0ZTNkOwogICAgZXhwb3J0cy5Sb3RhdGUzZCA9IFJvdGF0ZTNkOwogICAgZXhwb3J0cy5Sb3RhdGVDY3cgPSBSb3RhdGVDY3c7CiAgICBleHBvcnRzLlJvdGF0ZUNjd0tleSA9IFJvdGF0ZUNjd0tleTsKICAgIGV4cG9ydHMuUm90YXRlQ2N3U3F1YXJlID0gUm90YXRlQ2N3U3F1YXJlOwogICAgZXhwb3J0cy5Sb3RhdGVDdyA9IFJvdGF0ZUN3OwogICAgZXhwb3J0cy5Sb3RhdGVDd1NxdWFyZSA9IFJvdGF0ZUN3U3F1YXJlOwogICAgZXhwb3J0cy5Sb3V0ZSA9IFJvdXRlOwogICAgZXhwb3J0cy5Sb3V0ZU9mZiA9IFJvdXRlT2ZmOwogICAgZXhwb3J0cy5Sb3V0ZXIgPSBSb3V0ZXI7CiAgICBleHBvcnRzLlJvd3MgPSBSb3dzMjsKICAgIGV4cG9ydHMuUm93czIgPSBSb3dzMjsKICAgIGV4cG9ydHMuUm93czMgPSBSb3dzMzsKICAgIGV4cG9ydHMuUm93czQgPSBSb3dzNDsKICAgIGV4cG9ydHMuUnNzID0gUnNzOwogICAgZXhwb3J0cy5SdWxlciA9IFJ1bGVyOwogICAgZXhwb3J0cy5SdWxlckRpbWVuc2lvbkxpbmUgPSBSdWxlckRpbWVuc2lvbkxpbmU7CiAgICBleHBvcnRzLlJ1c3NpYW5SdWJsZSA9IFJ1c3NpYW5SdWJsZTsKICAgIGV4cG9ydHMuU2FpbGJvYXQgPSBTYWlsYm9hdDsKICAgIGV4cG9ydHMuU2FsYWQgPSBTYWxhZDsKICAgIGV4cG9ydHMuU2FuZHdpY2ggPSBTYW5kd2ljaDsKICAgIGV4cG9ydHMuU2F0ZWxsaXRlID0gU2F0ZWxsaXRlOwogICAgZXhwb3J0cy5TYXRlbGxpdGVEaXNoID0gU2F0ZWxsaXRlRGlzaDsKICAgIGV4cG9ydHMuU2F1ZGlSaXlhbCA9IFNhdWRpUml5YWw7CiAgICBleHBvcnRzLlNhdmUgPSBTYXZlOwogICAgZXhwb3J0cy5TYXZlQWxsID0gU2F2ZUFsbDsKICAgIGV4cG9ydHMuU2F2ZU9mZiA9IFNhdmVPZmY7CiAgICBleHBvcnRzLlNjYWxlID0gU2NhbGU7CiAgICBleHBvcnRzLlNjYWxlM0QgPSBTY2FsZTNkOwogICAgZXhwb3J0cy5TY2FsZTNkID0gU2NhbGUzZDsKICAgIGV4cG9ydHMuU2NhbGluZyA9IFNjYWxpbmc7CiAgICBleHBvcnRzLlNjYW4gPSBTY2FuOwogICAgZXhwb3J0cy5TY2FuQmFyY29kZSA9IFNjYW5CYXJjb2RlOwogICAgZXhwb3J0cy5TY2FuRXllID0gU2NhbkV5ZTsKICAgIGV4cG9ydHMuU2NhbkZhY2UgPSBTY2FuRmFjZTsKICAgIGV4cG9ydHMuU2NhbkhlYXJ0ID0gU2NhbkhlYXJ0OwogICAgZXhwb3J0cy5TY2FuTGluZSA9IFNjYW5MaW5lOwogICAgZXhwb3J0cy5TY2FuUXJDb2RlID0gU2NhblFyQ29kZTsKICAgIGV4cG9ydHMuU2NhblNlYXJjaCA9IFNjYW5TZWFyY2g7CiAgICBleHBvcnRzLlNjYW5UZXh0ID0gU2NhblRleHQ7CiAgICBleHBvcnRzLlNjYXR0ZXJDaGFydCA9IENoYXJ0U2NhdHRlcjsKICAgIGV4cG9ydHMuU2Nob29sID0gU2Nob29sOwogICAgZXhwb3J0cy5TY2hvb2wyID0gVW5pdmVyc2l0eTsKICAgIGV4cG9ydHMuU2Npc3NvcnMgPSBTY2lzc29yczsKICAgIGV4cG9ydHMuU2Npc3NvcnNMaW5lRGFzaGVkID0gU2Npc3NvcnNMaW5lRGFzaGVkOwogICAgZXhwb3J0cy5TY2lzc29yc1NxdWFyZSA9IFNxdWFyZVNjaXNzb3JzOwogICAgZXhwb3J0cy5TY2lzc29yc1NxdWFyZURhc2hlZEJvdHRvbSA9IFNxdWFyZUJvdHRvbURhc2hlZFNjaXNzb3JzOwogICAgZXhwb3J0cy5TY29vdGVyID0gU2Nvb3RlcjsKICAgIGV4cG9ydHMuU2NyZWVuU2hhcmUgPSBTY3JlZW5TaGFyZTsKICAgIGV4cG9ydHMuU2NyZWVuU2hhcmVPZmYgPSBTY3JlZW5TaGFyZU9mZjsKICAgIGV4cG9ydHMuU2Nyb2xsID0gU2Nyb2xsOwogICAgZXhwb3J0cy5TY3JvbGxUZXh0ID0gU2Nyb2xsVGV4dDsKICAgIGV4cG9ydHMuU2VhcmNoID0gU2VhcmNoOwogICAgZXhwb3J0cy5TZWFyY2hBbGVydCA9IFNlYXJjaEFsZXJ0OwogICAgZXhwb3J0cy5TZWFyY2hDaGVjayA9IFNlYXJjaENoZWNrOwogICAgZXhwb3J0cy5TZWFyY2hDb2RlID0gU2VhcmNoQ29kZTsKICAgIGV4cG9ydHMuU2VhcmNoU2xhc2ggPSBTZWFyY2hTbGFzaDsKICAgIGV4cG9ydHMuU2VhcmNoWCA9IFNlYXJjaFg7CiAgICBleHBvcnRzLlNlY3Rpb24gPSBTZWN0aW9uOwogICAgZXhwb3J0cy5TZW5kID0gU2VuZDsKICAgIGV4cG9ydHMuU2VuZEhvcml6b25hbCA9IFNlbmRIb3Jpem9udGFsOwogICAgZXhwb3J0cy5TZW5kSG9yaXpvbnRhbCA9IFNlbmRIb3Jpem9udGFsOwogICAgZXhwb3J0cy5TZW5kVG9CYWNrID0gU2VuZFRvQmFjazsKICAgIGV4cG9ydHMuU2VwYXJhdG9ySG9yaXpvbnRhbCA9IFNlcGFyYXRvckhvcml6b250YWw7CiAgICBleHBvcnRzLlNlcGFyYXRvclZlcnRpY2FsID0gU2VwYXJhdG9yVmVydGljYWw7CiAgICBleHBvcnRzLlNlcnZlciA9IFNlcnZlcjsKICAgIGV4cG9ydHMuU2VydmVyQ29nID0gU2VydmVyQ29nOwogICAgZXhwb3J0cy5TZXJ2ZXJDcmFzaCA9IFNlcnZlckNyYXNoOwogICAgZXhwb3J0cy5TZXJ2ZXJPZmYgPSBTZXJ2ZXJPZmY7CiAgICBleHBvcnRzLlNldHRpbmdzID0gU2V0dGluZ3M7CiAgICBleHBvcnRzLlNldHRpbmdzMiA9IFNldHRpbmdzMjsKICAgIGV4cG9ydHMuU2hhcGVzID0gU2hhcGVzOwogICAgZXhwb3J0cy5TaGFyZSA9IFNoYXJlOwogICAgZXhwb3J0cy5TaGFyZTIgPSBTaGFyZTI7CiAgICBleHBvcnRzLlNoZWV0ID0gU2hlZXQ7CiAgICBleHBvcnRzLlNoZWxsID0gU2hlbGw7CiAgICBleHBvcnRzLlNoaWVsZCA9IFNoaWVsZDsKICAgIGV4cG9ydHMuU2hpZWxkQWxlcnQgPSBTaGllbGRBbGVydDsKICAgIGV4cG9ydHMuU2hpZWxkQmFuID0gU2hpZWxkQmFuOwogICAgZXhwb3J0cy5TaGllbGRDaGVjayA9IFNoaWVsZENoZWNrOwogICAgZXhwb3J0cy5TaGllbGRDbG9zZSA9IFNoaWVsZFg7CiAgICBleHBvcnRzLlNoaWVsZEVsbGlwc2lzID0gU2hpZWxkRWxsaXBzaXM7CiAgICBleHBvcnRzLlNoaWVsZEhhbGYgPSBTaGllbGRIYWxmOwogICAgZXhwb3J0cy5TaGllbGRNaW51cyA9IFNoaWVsZE1pbnVzOwogICAgZXhwb3J0cy5TaGllbGRPZmYgPSBTaGllbGRPZmY7CiAgICBleHBvcnRzLlNoaWVsZFBsdXMgPSBTaGllbGRQbHVzOwogICAgZXhwb3J0cy5TaGllbGRRdWVzdGlvbiA9IFNoaWVsZFF1ZXN0aW9uTWFyazsKICAgIGV4cG9ydHMuU2hpZWxkUXVlc3Rpb25NYXJrID0gU2hpZWxkUXVlc3Rpb25NYXJrOwogICAgZXhwb3J0cy5TaGllbGRVc2VyID0gU2hpZWxkVXNlcjsKICAgIGV4cG9ydHMuU2hpZWxkWCA9IFNoaWVsZFg7CiAgICBleHBvcnRzLlNoaXAgPSBTaGlwOwogICAgZXhwb3J0cy5TaGlwV2hlZWwgPSBTaGlwV2hlZWw7CiAgICBleHBvcnRzLlNoaXJ0ID0gU2hpcnQ7CiAgICBleHBvcnRzLlNob3BwaW5nQmFnID0gU2hvcHBpbmdCYWc7CiAgICBleHBvcnRzLlNob3BwaW5nQmFza2V0ID0gU2hvcHBpbmdCYXNrZXQ7CiAgICBleHBvcnRzLlNob3BwaW5nQ2FydCA9IFNob3BwaW5nQ2FydDsKICAgIGV4cG9ydHMuU2hvdmVsID0gU2hvdmVsOwogICAgZXhwb3J0cy5TaG93ZXJIZWFkID0gU2hvd2VySGVhZDsKICAgIGV4cG9ydHMuU2hyZWRkZXIgPSBTaHJlZGRlcjsKICAgIGV4cG9ydHMuU2hyaW1wID0gU2hyaW1wOwogICAgZXhwb3J0cy5TaHJpbmsgPSBTaHJpbms7CiAgICBleHBvcnRzLlNocnViID0gU2hydWI7CiAgICBleHBvcnRzLlNodWZmbGUgPSBTaHVmZmxlOwogICAgZXhwb3J0cy5TaWRlYmFyID0gUGFuZWxMZWZ0OwogICAgZXhwb3J0cy5TaWRlYmFyQ2xvc2UgPSBQYW5lbExlZnRDbG9zZTsKICAgIGV4cG9ydHMuU2lkZWJhck9wZW4gPSBQYW5lbExlZnRPcGVuOwogICAgZXhwb3J0cy5TaWdtYSA9IFNpZ21hOwogICAgZXhwb3J0cy5TaWdtYVNxdWFyZSA9IFNxdWFyZVNpZ21hOwogICAgZXhwb3J0cy5TaWduYWwgPSBTaWduYWw7CiAgICBleHBvcnRzLlNpZ25hbEhpZ2ggPSBTaWduYWxIaWdoOwogICAgZXhwb3J0cy5TaWduYWxMb3cgPSBTaWduYWxMb3c7CiAgICBleHBvcnRzLlNpZ25hbE1lZGl1bSA9IFNpZ25hbE1lZGl1bTsKICAgIGV4cG9ydHMuU2lnbmFsWmVybyA9IFNpZ25hbFplcm87CiAgICBleHBvcnRzLlNpZ25hdHVyZSA9IFNpZ25hdHVyZTsKICAgIGV4cG9ydHMuU2lnbnBvc3QgPSBTaWducG9zdDsKICAgIGV4cG9ydHMuU2lnbnBvc3RCaWcgPSBTaWducG9zdEJpZzsKICAgIGV4cG9ydHMuU2lyZW4gPSBTaXJlbjsKICAgIGV4cG9ydHMuU2tpcEJhY2sgPSBTa2lwQmFjazsKICAgIGV4cG9ydHMuU2tpcEZvcndhcmQgPSBTa2lwRm9yd2FyZDsKICAgIGV4cG9ydHMuU2t1bGwgPSBTa3VsbDsKICAgIGV4cG9ydHMuU2xhY2sgPSBTbGFjazsKICAgIGV4cG9ydHMuU2xhc2ggPSBTbGFzaDsKICAgIGV4cG9ydHMuU2xhc2hTcXVhcmUgPSBTcXVhcmVTbGFzaDsKICAgIGV4cG9ydHMuU2xpY2UgPSBTbGljZTsKICAgIGV4cG9ydHMuU2xpZGVycyA9IFNsaWRlcnNWZXJ0aWNhbDsKICAgIGV4cG9ydHMuU2xpZGVyc0hvcml6b250YWwgPSBTbGlkZXJzSG9yaXpvbnRhbDsKICAgIGV4cG9ydHMuU2xpZGVyc1ZlcnRpY2FsID0gU2xpZGVyc1ZlcnRpY2FsOwogICAgZXhwb3J0cy5TbWFydHBob25lID0gU21hcnRwaG9uZTsKICAgIGV4cG9ydHMuU21hcnRwaG9uZUNoYXJnaW5nID0gU21hcnRwaG9uZUNoYXJnaW5nOwogICAgZXhwb3J0cy5TbWFydHBob25lTmZjID0gU21hcnRwaG9uZU5mYzsKICAgIGV4cG9ydHMuU21pbGUgPSBTbWlsZTsKICAgIGV4cG9ydHMuU21pbGVQbHVzID0gU21pbGVQbHVzOwogICAgZXhwb3J0cy5TbmFpbCA9IFNuYWlsOwogICAgZXhwb3J0cy5Tbm93Zmxha2UgPSBTbm93Zmxha2U7CiAgICBleHBvcnRzLlNvYXBEaXNwZW5zZXJEcm9wbGV0ID0gU29hcERpc3BlbnNlckRyb3BsZXQ7CiAgICBleHBvcnRzLlNvZmEgPSBTb2ZhOwogICAgZXhwb3J0cy5Tb2xhclBhbmVsID0gU29sYXJQYW5lbDsKICAgIGV4cG9ydHMuU29ydEFzYyA9IEFycm93VXBOYXJyb3dXaWRlOwogICAgZXhwb3J0cy5Tb3J0RGVzYyA9IEFycm93RG93bldpZGVOYXJyb3c7CiAgICBleHBvcnRzLlNvdXAgPSBTb3VwOwogICAgZXhwb3J0cy5TcGFjZSA9IFNwYWNlOwogICAgZXhwb3J0cy5TcGFkZSA9IFNwYWRlOwogICAgZXhwb3J0cy5TcGFya2xlID0gU3BhcmtsZTsKICAgIGV4cG9ydHMuU3BhcmtsZXMgPSBTcGFya2xlczsKICAgIGV4cG9ydHMuU3BlYWtlciA9IFNwZWFrZXI7CiAgICBleHBvcnRzLlNwZWVjaCA9IFNwZWVjaDsKICAgIGV4cG9ydHMuU3BlbGxDaGVjayA9IFNwZWxsQ2hlY2s7CiAgICBleHBvcnRzLlNwZWxsQ2hlY2syID0gU3BlbGxDaGVjazI7CiAgICBleHBvcnRzLlNwbGluZSA9IFNwbGluZTsKICAgIGV4cG9ydHMuU3BsaW5lUG9pbnRlciA9IFNwbGluZVBvaW50ZXI7CiAgICBleHBvcnRzLlNwbGl0ID0gU3BsaXQ7CiAgICBleHBvcnRzLlNwbGl0U3F1YXJlSG9yaXpvbnRhbCA9IFNxdWFyZVNwbGl0SG9yaXpvbnRhbDsKICAgIGV4cG9ydHMuU3BsaXRTcXVhcmVWZXJ0aWNhbCA9IFNxdWFyZVNwbGl0VmVydGljYWw7CiAgICBleHBvcnRzLlNwb29sID0gU3Bvb2w7CiAgICBleHBvcnRzLlNwb3RsaWdodCA9IFNwb3RsaWdodDsKICAgIGV4cG9ydHMuU3ByYXlDYW4gPSBTcHJheUNhbjsKICAgIGV4cG9ydHMuU3Byb3V0ID0gU3Byb3V0OwogICAgZXhwb3J0cy5TcXVhcmUgPSBTcXVhcmU7CiAgICBleHBvcnRzLlNxdWFyZUFjdGl2aXR5ID0gU3F1YXJlQWN0aXZpdHk7CiAgICBleHBvcnRzLlNxdWFyZUFycm93RG93biA9IFNxdWFyZUFycm93RG93bjsKICAgIGV4cG9ydHMuU3F1YXJlQXJyb3dEb3duTGVmdCA9IFNxdWFyZUFycm93RG93bkxlZnQ7CiAgICBleHBvcnRzLlNxdWFyZUFycm93RG93blJpZ2h0ID0gU3F1YXJlQXJyb3dEb3duUmlnaHQ7CiAgICBleHBvcnRzLlNxdWFyZUFycm93TGVmdCA9IFNxdWFyZUFycm93TGVmdDsKICAgIGV4cG9ydHMuU3F1YXJlQXJyb3dPdXREb3duTGVmdCA9IFNxdWFyZUFycm93T3V0RG93bkxlZnQ7CiAgICBleHBvcnRzLlNxdWFyZUFycm93T3V0RG93blJpZ2h0ID0gU3F1YXJlQXJyb3dPdXREb3duUmlnaHQ7CiAgICBleHBvcnRzLlNxdWFyZUFycm93T3V0VXBMZWZ0ID0gU3F1YXJlQXJyb3dPdXRVcExlZnQ7CiAgICBleHBvcnRzLlNxdWFyZUFycm93T3V0VXBSaWdodCA9IFNxdWFyZUFycm93T3V0VXBSaWdodDsKICAgIGV4cG9ydHMuU3F1YXJlQXJyb3dSaWdodCA9IFNxdWFyZUFycm93UmlnaHQ7CiAgICBleHBvcnRzLlNxdWFyZUFycm93VXAgPSBTcXVhcmVBcnJvd1VwOwogICAgZXhwb3J0cy5TcXVhcmVBcnJvd1VwTGVmdCA9IFNxdWFyZUFycm93VXBMZWZ0OwogICAgZXhwb3J0cy5TcXVhcmVBcnJvd1VwUmlnaHQgPSBTcXVhcmVBcnJvd1VwUmlnaHQ7CiAgICBleHBvcnRzLlNxdWFyZUFzdGVyaXNrID0gU3F1YXJlQXN0ZXJpc2s7CiAgICBleHBvcnRzLlNxdWFyZUJvdHRvbURhc2hlZFNjaXNzb3JzID0gU3F1YXJlQm90dG9tRGFzaGVkU2Npc3NvcnM7CiAgICBleHBvcnRzLlNxdWFyZUNoYXJ0R2FudHQgPSBTcXVhcmVDaGFydEdhbnR0OwogICAgZXhwb3J0cy5TcXVhcmVDaGVjayA9IFNxdWFyZUNoZWNrOwogICAgZXhwb3J0cy5TcXVhcmVDaGVja0JpZyA9IFNxdWFyZUNoZWNrQmlnOwogICAgZXhwb3J0cy5TcXVhcmVDaGV2cm9uRG93biA9IFNxdWFyZUNoZXZyb25Eb3duOwogICAgZXhwb3J0cy5TcXVhcmVDaGV2cm9uTGVmdCA9IFNxdWFyZUNoZXZyb25MZWZ0OwogICAgZXhwb3J0cy5TcXVhcmVDaGV2cm9uUmlnaHQgPSBTcXVhcmVDaGV2cm9uUmlnaHQ7CiAgICBleHBvcnRzLlNxdWFyZUNoZXZyb25VcCA9IFNxdWFyZUNoZXZyb25VcDsKICAgIGV4cG9ydHMuU3F1YXJlQ29kZSA9IFNxdWFyZUNvZGU7CiAgICBleHBvcnRzLlNxdWFyZURhc2hlZCA9IFNxdWFyZURhc2hlZDsKICAgIGV4cG9ydHMuU3F1YXJlRGFzaGVkQm90dG9tID0gU3F1YXJlRGFzaGVkQm90dG9tOwogICAgZXhwb3J0cy5TcXVhcmVEYXNoZWRCb3R0b21Db2RlID0gU3F1YXJlRGFzaGVkQm90dG9tQ29kZTsKICAgIGV4cG9ydHMuU3F1YXJlRGFzaGVkS2FuYmFuID0gU3F1YXJlRGFzaGVkS2FuYmFuOwogICAgZXhwb3J0cy5TcXVhcmVEYXNoZWRNb3VzZVBvaW50ZXIgPSBTcXVhcmVEYXNoZWRNb3VzZVBvaW50ZXI7CiAgICBleHBvcnRzLlNxdWFyZURhc2hlZFRvcFNvbGlkID0gU3F1YXJlRGFzaGVkVG9wU29saWQ7CiAgICBleHBvcnRzLlNxdWFyZURpdmlkZSA9IFNxdWFyZURpdmlkZTsKICAgIGV4cG9ydHMuU3F1YXJlRG90ID0gU3F1YXJlRG90OwogICAgZXhwb3J0cy5TcXVhcmVFcXVhbCA9IFNxdWFyZUVxdWFsOwogICAgZXhwb3J0cy5TcXVhcmVGdW5jdGlvbiA9IFNxdWFyZUZ1bmN0aW9uOwogICAgZXhwb3J0cy5TcXVhcmVHYW50dENoYXJ0ID0gU3F1YXJlQ2hhcnRHYW50dDsKICAgIGV4cG9ydHMuU3F1YXJlS2FuYmFuID0gU3F1YXJlS2FuYmFuOwogICAgZXhwb3J0cy5TcXVhcmVMaWJyYXJ5ID0gU3F1YXJlTGlicmFyeTsKICAgIGV4cG9ydHMuU3F1YXJlTSA9IFNxdWFyZU07CiAgICBleHBvcnRzLlNxdWFyZU1lbnUgPSBTcXVhcmVNZW51OwogICAgZXhwb3J0cy5TcXVhcmVNaW51cyA9IFNxdWFyZU1pbnVzOwogICAgZXhwb3J0cy5TcXVhcmVNb3VzZVBvaW50ZXIgPSBTcXVhcmVNb3VzZVBvaW50ZXI7CiAgICBleHBvcnRzLlNxdWFyZVBhcmtpbmcgPSBTcXVhcmVQYXJraW5nOwogICAgZXhwb3J0cy5TcXVhcmVQYXJraW5nT2ZmID0gU3F1YXJlUGFya2luZ09mZjsKICAgIGV4cG9ydHMuU3F1YXJlUGF1c2UgPSBTcXVhcmVQYXVzZTsKICAgIGV4cG9ydHMuU3F1YXJlUGVuID0gU3F1YXJlUGVuOwogICAgZXhwb3J0cy5TcXVhcmVQZXJjZW50ID0gU3F1YXJlUGVyY2VudDsKICAgIGV4cG9ydHMuU3F1YXJlUGkgPSBTcXVhcmVQaTsKICAgIGV4cG9ydHMuU3F1YXJlUGlsY3JvdyA9IFNxdWFyZVBpbGNyb3c7CiAgICBleHBvcnRzLlNxdWFyZVBsYXkgPSBTcXVhcmVQbGF5OwogICAgZXhwb3J0cy5TcXVhcmVQbHVzID0gU3F1YXJlUGx1czsKICAgIGV4cG9ydHMuU3F1YXJlUG93ZXIgPSBTcXVhcmVQb3dlcjsKICAgIGV4cG9ydHMuU3F1YXJlUmFkaWNhbCA9IFNxdWFyZVJhZGljYWw7CiAgICBleHBvcnRzLlNxdWFyZVJvdW5kQ29ybmVyID0gU3F1YXJlUm91bmRDb3JuZXI7CiAgICBleHBvcnRzLlNxdWFyZVNjaXNzb3JzID0gU3F1YXJlU2Npc3NvcnM7CiAgICBleHBvcnRzLlNxdWFyZVNpZ21hID0gU3F1YXJlU2lnbWE7CiAgICBleHBvcnRzLlNxdWFyZVNsYXNoID0gU3F1YXJlU2xhc2g7CiAgICBleHBvcnRzLlNxdWFyZVNwbGl0SG9yaXpvbnRhbCA9IFNxdWFyZVNwbGl0SG9yaXpvbnRhbDsKICAgIGV4cG9ydHMuU3F1YXJlU3BsaXRWZXJ0aWNhbCA9IFNxdWFyZVNwbGl0VmVydGljYWw7CiAgICBleHBvcnRzLlNxdWFyZVNxdWFyZSA9IFNxdWFyZVNxdWFyZTsKICAgIGV4cG9ydHMuU3F1YXJlU3RhY2sgPSBTcXVhcmVTdGFjazsKICAgIGV4cG9ydHMuU3F1YXJlU3RhciA9IFNxdWFyZVN0YXI7CiAgICBleHBvcnRzLlNxdWFyZVN0b3AgPSBTcXVhcmVTdG9wOwogICAgZXhwb3J0cy5TcXVhcmVUZXJtaW5hbCA9IFNxdWFyZVRlcm1pbmFsOwogICAgZXhwb3J0cy5TcXVhcmVVc2VyID0gU3F1YXJlVXNlcjsKICAgIGV4cG9ydHMuU3F1YXJlVXNlclJvdW5kID0gU3F1YXJlVXNlclJvdW5kOwogICAgZXhwb3J0cy5TcXVhcmVYID0gU3F1YXJlWDsKICAgIGV4cG9ydHMuU3F1YXJlc0V4Y2x1ZGUgPSBTcXVhcmVzRXhjbHVkZTsKICAgIGV4cG9ydHMuU3F1YXJlc0ludGVyc2VjdCA9IFNxdWFyZXNJbnRlcnNlY3Q7CiAgICBleHBvcnRzLlNxdWFyZXNTdWJ0cmFjdCA9IFNxdWFyZXNTdWJ0cmFjdDsKICAgIGV4cG9ydHMuU3F1YXJlc1VuaXRlID0gU3F1YXJlc1VuaXRlOwogICAgZXhwb3J0cy5TcXVpcmNsZSA9IFNxdWlyY2xlOwogICAgZXhwb3J0cy5TcXVpcmNsZURhc2hlZCA9IFNxdWlyY2xlRGFzaGVkOwogICAgZXhwb3J0cy5TcXVpcnJlbCA9IFNxdWlycmVsOwogICAgZXhwb3J0cy5TdGFtcCA9IFN0YW1wOwogICAgZXhwb3J0cy5TdGFyID0gU3RhcjsKICAgIGV4cG9ydHMuU3RhckhhbGYgPSBTdGFySGFsZjsKICAgIGV4cG9ydHMuU3Rhck9mZiA9IFN0YXJPZmY7CiAgICBleHBvcnRzLlN0YXJzID0gU3BhcmtsZXM7CiAgICBleHBvcnRzLlN0ZXBCYWNrID0gU3RlcEJhY2s7CiAgICBleHBvcnRzLlN0ZXBGb3J3YXJkID0gU3RlcEZvcndhcmQ7CiAgICBleHBvcnRzLlN0ZXRob3Njb3BlID0gU3RldGhvc2NvcGU7CiAgICBleHBvcnRzLlN0aWNrZXIgPSBTdGlja2VyOwogICAgZXhwb3J0cy5TdGlja3lOb3RlID0gU3RpY2t5Tm90ZTsKICAgIGV4cG9ydHMuU3RvbmUgPSBTdG9uZTsKICAgIGV4cG9ydHMuU3RvcENpcmNsZSA9IENpcmNsZVN0b3A7CiAgICBleHBvcnRzLlN0b3JlID0gU3RvcmU7CiAgICBleHBvcnRzLlN0cmV0Y2hIb3Jpem9udGFsID0gU3RyZXRjaEhvcml6b250YWw7CiAgICBleHBvcnRzLlN0cmV0Y2hWZXJ0aWNhbCA9IFN0cmV0Y2hWZXJ0aWNhbDsKICAgIGV4cG9ydHMuU3RyaWtldGhyb3VnaCA9IFN0cmlrZXRocm91Z2g7CiAgICBleHBvcnRzLlN1YnNjcmlwdCA9IFN1YnNjcmlwdDsKICAgIGV4cG9ydHMuU3VidGl0bGVzID0gQ2FwdGlvbnM7CiAgICBleHBvcnRzLlN1biA9IFN1bjsKICAgIGV4cG9ydHMuU3VuRGltID0gU3VuRGltOwogICAgZXhwb3J0cy5TdW5NZWRpdW0gPSBTdW5NZWRpdW07CiAgICBleHBvcnRzLlN1bk1vb24gPSBTdW5Nb29uOwogICAgZXhwb3J0cy5TdW5Tbm93ID0gU3VuU25vdzsKICAgIGV4cG9ydHMuU3VucmlzZSA9IFN1bnJpc2U7CiAgICBleHBvcnRzLlN1bnNldCA9IFN1bnNldDsKICAgIGV4cG9ydHMuU3VwZXJzY3JpcHQgPSBTdXBlcnNjcmlwdDsKICAgIGV4cG9ydHMuU3dhdGNoQm9vayA9IFN3YXRjaEJvb2s7CiAgICBleHBvcnRzLlN3aXNzRnJhbmMgPSBTd2lzc0ZyYW5jOwogICAgZXhwb3J0cy5Td2l0Y2hDYW1lcmEgPSBTd2l0Y2hDYW1lcmE7CiAgICBleHBvcnRzLlN3b3JkID0gU3dvcmQ7CiAgICBleHBvcnRzLlN3b3JkcyA9IFN3b3JkczsKICAgIGV4cG9ydHMuU3lyaW5nZSA9IFN5cmluZ2U7CiAgICBleHBvcnRzLlRhYmxlID0gVGFibGU7CiAgICBleHBvcnRzLlRhYmxlMiA9IFRhYmxlMjsKICAgIGV4cG9ydHMuVGFibGVDZWxsc01lcmdlID0gVGFibGVDZWxsc01lcmdlOwogICAgZXhwb3J0cy5UYWJsZUNlbGxzU3BsaXQgPSBUYWJsZUNlbGxzU3BsaXQ7CiAgICBleHBvcnRzLlRhYmxlQ29sdW1uc1NwbGl0ID0gVGFibGVDb2x1bW5zU3BsaXQ7CiAgICBleHBvcnRzLlRhYmxlQ29uZmlnID0gQ29sdW1uczNDb2c7CiAgICBleHBvcnRzLlRhYmxlT2ZDb250ZW50cyA9IFRhYmxlT2ZDb250ZW50czsKICAgIGV4cG9ydHMuVGFibGVQcm9wZXJ0aWVzID0gVGFibGVQcm9wZXJ0aWVzOwogICAgZXhwb3J0cy5UYWJsZVJvd3NTcGxpdCA9IFRhYmxlUm93c1NwbGl0OwogICAgZXhwb3J0cy5UYWJsZXQgPSBUYWJsZXQ7CiAgICBleHBvcnRzLlRhYmxldFNtYXJ0cGhvbmUgPSBUYWJsZXRTbWFydHBob25lOwogICAgZXhwb3J0cy5UYWJsZXRzID0gVGFibGV0czsKICAgIGV4cG9ydHMuVGFnID0gVGFnMjsKICAgIGV4cG9ydHMuVGFncyA9IFRhZ3M7CiAgICBleHBvcnRzLlRhbGx5MSA9IFRhbGx5MTsKICAgIGV4cG9ydHMuVGFsbHkyID0gVGFsbHkyOwogICAgZXhwb3J0cy5UYWxseTMgPSBUYWxseTM7CiAgICBleHBvcnRzLlRhbGx5NCA9IFRhbGx5NDsKICAgIGV4cG9ydHMuVGFsbHk1ID0gVGFsbHk1OwogICAgZXhwb3J0cy5UYW5nZW50ID0gVGFuZ2VudDsKICAgIGV4cG9ydHMuVGFyZ2V0ID0gVGFyZ2V0OwogICAgZXhwb3J0cy5UZWxlc2NvcGUgPSBUZWxlc2NvcGU7CiAgICBleHBvcnRzLlRlbnQgPSBUZW50OwogICAgZXhwb3J0cy5UZW50VHJlZSA9IFRlbnRUcmVlOwogICAgZXhwb3J0cy5UZXJtaW5hbCA9IFRlcm1pbmFsOwogICAgZXhwb3J0cy5UZXJtaW5hbFNxdWFyZSA9IFNxdWFyZVRlcm1pbmFsOwogICAgZXhwb3J0cy5UZXN0VHViZSA9IFRlc3RUdWJlOwogICAgZXhwb3J0cy5UZXN0VHViZTIgPSBUZXN0VHViZURpYWdvbmFsOwogICAgZXhwb3J0cy5UZXN0VHViZURpYWdvbmFsID0gVGVzdFR1YmVEaWFnb25hbDsKICAgIGV4cG9ydHMuVGVzdFR1YmVzID0gVGVzdFR1YmVzOwogICAgZXhwb3J0cy5UZXh0ID0gVGV4dEFsaWduU3RhcnQ7CiAgICBleHBvcnRzLlRleHRBbGlnbkNlbnRlciA9IFRleHRBbGlnbkNlbnRlcjsKICAgIGV4cG9ydHMuVGV4dEFsaWduRW5kID0gVGV4dEFsaWduRW5kOwogICAgZXhwb3J0cy5UZXh0QWxpZ25KdXN0aWZ5ID0gVGV4dEFsaWduSnVzdGlmeTsKICAgIGV4cG9ydHMuVGV4dEFsaWduU3RhcnQgPSBUZXh0QWxpZ25TdGFydDsKICAgIGV4cG9ydHMuVGV4dEN1cnNvciA9IFRleHRDdXJzb3I7CiAgICBleHBvcnRzLlRleHRDdXJzb3JJbnB1dCA9IFRleHRDdXJzb3JJbnB1dDsKICAgIGV4cG9ydHMuVGV4dEluaXRpYWwgPSBUZXh0SW5pdGlhbDsKICAgIGV4cG9ydHMuVGV4dFF1b3RlID0gVGV4dFF1b3RlOwogICAgZXhwb3J0cy5UZXh0U2VhcmNoID0gVGV4dFNlYXJjaDsKICAgIGV4cG9ydHMuVGV4dFNlbGVjdCA9IFRleHRTZWxlY3Q7CiAgICBleHBvcnRzLlRleHRTZWxlY3Rpb24gPSBUZXh0U2VsZWN0OwogICAgZXhwb3J0cy5UZXh0V3JhcCA9IFRleHRXcmFwOwogICAgZXhwb3J0cy5UaGVhdGVyID0gVGhlYXRlcjsKICAgIGV4cG9ydHMuVGhlcm1vbWV0ZXIgPSBUaGVybW9tZXRlcjsKICAgIGV4cG9ydHMuVGhlcm1vbWV0ZXJTbm93Zmxha2UgPSBUaGVybW9tZXRlclNub3dmbGFrZTsKICAgIGV4cG9ydHMuVGhlcm1vbWV0ZXJTdW4gPSBUaGVybW9tZXRlclN1bjsKICAgIGV4cG9ydHMuVGh1bWJzRG93biA9IFRodW1ic0Rvd247CiAgICBleHBvcnRzLlRodW1ic1VwID0gVGh1bWJzVXA7CiAgICBleHBvcnRzLlRpY2tldCA9IFRpY2tldDsKICAgIGV4cG9ydHMuVGlja2V0Q2hlY2sgPSBUaWNrZXRDaGVjazsKICAgIGV4cG9ydHMuVGlja2V0TWludXMgPSBUaWNrZXRNaW51czsKICAgIGV4cG9ydHMuVGlja2V0UGVyY2VudCA9IFRpY2tldFBlcmNlbnQ7CiAgICBleHBvcnRzLlRpY2tldFBsdXMgPSBUaWNrZXRQbHVzOwogICAgZXhwb3J0cy5UaWNrZXRTbGFzaCA9IFRpY2tldFNsYXNoOwogICAgZXhwb3J0cy5UaWNrZXRYID0gVGlja2V0WDsKICAgIGV4cG9ydHMuVGlja2V0cyA9IFRpY2tldHM7CiAgICBleHBvcnRzLlRpY2tldHNQbGFuZSA9IFRpY2tldHNQbGFuZTsKICAgIGV4cG9ydHMuVGltZXIgPSBUaW1lcjI7CiAgICBleHBvcnRzLlRpbWVyT2ZmID0gVGltZXJPZmY7CiAgICBleHBvcnRzLlRpbWVyUmVzZXQgPSBUaW1lclJlc2V0OwogICAgZXhwb3J0cy5Ub2dnbGVMZWZ0ID0gVG9nZ2xlTGVmdDsKICAgIGV4cG9ydHMuVG9nZ2xlUmlnaHQgPSBUb2dnbGVSaWdodDsKICAgIGV4cG9ydHMuVG9pbGV0ID0gVG9pbGV0OwogICAgZXhwb3J0cy5Ub29sQ2FzZSA9IFRvb2xDYXNlOwogICAgZXhwb3J0cy5Ub29sYm94ID0gVG9vbGJveDsKICAgIGV4cG9ydHMuVG9ybmFkbyA9IFRvcm5hZG87CiAgICBleHBvcnRzLlRvcnVzID0gVG9ydXM7CiAgICBleHBvcnRzLlRvdWNocGFkID0gVG91Y2hwYWQ7CiAgICBleHBvcnRzLlRvdWNocGFkT2ZmID0gVG91Y2hwYWRPZmY7CiAgICBleHBvcnRzLlRvd2VyQ29udHJvbCA9IFRvd2VyQ29udHJvbDsKICAgIGV4cG9ydHMuVG95QnJpY2sgPSBUb3lCcmljazsKICAgIGV4cG9ydHMuVHJhY3RvciA9IFRyYWN0b3I7CiAgICBleHBvcnRzLlRyYWZmaWNDb25lID0gVHJhZmZpY0NvbmU7CiAgICBleHBvcnRzLlRyYWluID0gVHJhbUZyb250OwogICAgZXhwb3J0cy5UcmFpbkZyb250ID0gVHJhaW5Gcm9udDsKICAgIGV4cG9ydHMuVHJhaW5Gcm9udFR1bm5lbCA9IFRyYWluRnJvbnRUdW5uZWw7CiAgICBleHBvcnRzLlRyYWluVHJhY2sgPSBUcmFpblRyYWNrOwogICAgZXhwb3J0cy5UcmFtRnJvbnQgPSBUcmFtRnJvbnQ7CiAgICBleHBvcnRzLlRyYW5zZ2VuZGVyID0gVHJhbnNnZW5kZXI7CiAgICBleHBvcnRzLlRyYXNoID0gVHJhc2g7CiAgICBleHBvcnRzLlRyYXNoMiA9IFRyYXNoMjsKICAgIGV4cG9ydHMuVHJlZURlY2lkdW91cyA9IFRyZWVEZWNpZHVvdXM7CiAgICBleHBvcnRzLlRyZWVQYWxtID0gVHJlZVBhbG07CiAgICBleHBvcnRzLlRyZWVQaW5lID0gVHJlZVBpbmU7CiAgICBleHBvcnRzLlRyZWVzID0gVHJlZXM7CiAgICBleHBvcnRzLlRyZWxsbyA9IFRyZWxsbzsKICAgIGV4cG9ydHMuVHJlbmRpbmdEb3duID0gVHJlbmRpbmdEb3duOwogICAgZXhwb3J0cy5UcmVuZGluZ1VwID0gVHJlbmRpbmdVcDsKICAgIGV4cG9ydHMuVHJlbmRpbmdVcERvd24gPSBUcmVuZGluZ1VwRG93bjsKICAgIGV4cG9ydHMuVHJpYW5nbGUgPSBUcmlhbmdsZTsKICAgIGV4cG9ydHMuVHJpYW5nbGVBbGVydCA9IFRyaWFuZ2xlQWxlcnQ7CiAgICBleHBvcnRzLlRyaWFuZ2xlRGFzaGVkID0gVHJpYW5nbGVEYXNoZWQ7CiAgICBleHBvcnRzLlRyaWFuZ2xlUmlnaHQgPSBUcmlhbmdsZVJpZ2h0OwogICAgZXhwb3J0cy5Ucm9waHkgPSBUcm9waHk7CiAgICBleHBvcnRzLlRydWNrID0gVHJ1Y2s7CiAgICBleHBvcnRzLlRydWNrRWxlY3RyaWMgPSBUcnVja0VsZWN0cmljOwogICAgZXhwb3J0cy5UdXJraXNoTGlyYSA9IFR1cmtpc2hMaXJhOwogICAgZXhwb3J0cy5UdXJudGFibGUgPSBUdXJudGFibGU7CiAgICBleHBvcnRzLlR1cnRsZSA9IFR1cnRsZTsKICAgIGV4cG9ydHMuVHYgPSBUdjsKICAgIGV4cG9ydHMuVHYyID0gVHZNaW5pbWFsOwogICAgZXhwb3J0cy5Udk1pbmltYWwgPSBUdk1pbmltYWw7CiAgICBleHBvcnRzLlR2TWluaW1hbFBsYXkgPSBUdk1pbmltYWxQbGF5OwogICAgZXhwb3J0cy5Ud2l0Y2ggPSBUd2l0Y2g7CiAgICBleHBvcnRzLlR3aXR0ZXIgPSBUd2l0dGVyOwogICAgZXhwb3J0cy5UeXBlID0gVHlwZTsKICAgIGV4cG9ydHMuVHlwZU91dGxpbmUgPSBUeXBlT3V0bGluZTsKICAgIGV4cG9ydHMuVW1icmVsbGEgPSBVbWJyZWxsYTsKICAgIGV4cG9ydHMuVW1icmVsbGFPZmYgPSBVbWJyZWxsYU9mZjsKICAgIGV4cG9ydHMuVW5kZXJsaW5lID0gVW5kZXJsaW5lOwogICAgZXhwb3J0cy5VbmRvID0gVW5kbzsKICAgIGV4cG9ydHMuVW5kbzIgPSBVbmRvMjsKICAgIGV4cG9ydHMuVW5kb0RvdCA9IFVuZG9Eb3Q7CiAgICBleHBvcnRzLlVuZm9sZEhvcml6b250YWwgPSBVbmZvbGRIb3Jpem9udGFsOwogICAgZXhwb3J0cy5VbmZvbGRWZXJ0aWNhbCA9IFVuZm9sZFZlcnRpY2FsOwogICAgZXhwb3J0cy5Vbmdyb3VwID0gVW5ncm91cDsKICAgIGV4cG9ydHMuVW5pdmVyc2l0eSA9IFVuaXZlcnNpdHk7CiAgICBleHBvcnRzLlVubGluayA9IFVubGluazsKICAgIGV4cG9ydHMuVW5saW5rMiA9IFVubGluazI7CiAgICBleHBvcnRzLlVubG9jayA9IExvY2tPcGVuOwogICAgZXhwb3J0cy5VbmxvY2tLZXlob2xlID0gTG9ja0tleWhvbGVPcGVuOwogICAgZXhwb3J0cy5VbnBsdWcgPSBVbnBsdWc7CiAgICBleHBvcnRzLlVwbG9hZCA9IFVwbG9hZDsKICAgIGV4cG9ydHMuVXBsb2FkQ2xvdWQgPSBDbG91ZFVwbG9hZDsKICAgIGV4cG9ydHMuVXNiID0gVXNiOwogICAgZXhwb3J0cy5Vc2VyID0gVXNlcjsKICAgIGV4cG9ydHMuVXNlcjIgPSBVc2VyUm91bmQ7CiAgICBleHBvcnRzLlVzZXJDaGVjayA9IFVzZXJDaGVjazsKICAgIGV4cG9ydHMuVXNlckNoZWNrMiA9IFVzZXJSb3VuZENoZWNrOwogICAgZXhwb3J0cy5Vc2VyQ2lyY2xlID0gQ2lyY2xlVXNlcjsKICAgIGV4cG9ydHMuVXNlckNpcmNsZTIgPSBDaXJjbGVVc2VyUm91bmQ7CiAgICBleHBvcnRzLlVzZXJDb2cgPSBVc2VyQ29nOwogICAgZXhwb3J0cy5Vc2VyQ29nMiA9IFVzZXJSb3VuZENvZzsKICAgIGV4cG9ydHMuVXNlckxvY2sgPSBVc2VyTG9jazsKICAgIGV4cG9ydHMuVXNlck1pbnVzID0gVXNlck1pbnVzOwogICAgZXhwb3J0cy5Vc2VyTWludXMyID0gVXNlclJvdW5kTWludXM7CiAgICBleHBvcnRzLlVzZXJQZW4gPSBVc2VyUGVuOwogICAgZXhwb3J0cy5Vc2VyUGx1cyA9IFVzZXJQbHVzOwogICAgZXhwb3J0cy5Vc2VyUGx1czIgPSBVc2VyUm91bmRQbHVzOwogICAgZXhwb3J0cy5Vc2VyUm91bmQgPSBVc2VyUm91bmQ7CiAgICBleHBvcnRzLlVzZXJSb3VuZENoZWNrID0gVXNlclJvdW5kQ2hlY2s7CiAgICBleHBvcnRzLlVzZXJSb3VuZENvZyA9IFVzZXJSb3VuZENvZzsKICAgIGV4cG9ydHMuVXNlclJvdW5kTWludXMgPSBVc2VyUm91bmRNaW51czsKICAgIGV4cG9ydHMuVXNlclJvdW5kUGVuID0gVXNlclJvdW5kUGVuOwogICAgZXhwb3J0cy5Vc2VyUm91bmRQbHVzID0gVXNlclJvdW5kUGx1czsKICAgIGV4cG9ydHMuVXNlclJvdW5kU2VhcmNoID0gVXNlclJvdW5kU2VhcmNoOwogICAgZXhwb3J0cy5Vc2VyUm91bmRYID0gVXNlclJvdW5kWDsKICAgIGV4cG9ydHMuVXNlclNlYXJjaCA9IFVzZXJTZWFyY2g7CiAgICBleHBvcnRzLlVzZXJTcXVhcmUgPSBTcXVhcmVVc2VyOwogICAgZXhwb3J0cy5Vc2VyU3F1YXJlMiA9IFNxdWFyZVVzZXJSb3VuZDsKICAgIGV4cG9ydHMuVXNlclN0YXIgPSBVc2VyU3RhcjsKICAgIGV4cG9ydHMuVXNlclggPSBVc2VyWDsKICAgIGV4cG9ydHMuVXNlclgyID0gVXNlclJvdW5kWDsKICAgIGV4cG9ydHMuVXNlcnMgPSBVc2VyczsKICAgIGV4cG9ydHMuVXNlcnMyID0gVXNlcnNSb3VuZDsKICAgIGV4cG9ydHMuVXNlcnNSb3VuZCA9IFVzZXJzUm91bmQ7CiAgICBleHBvcnRzLlV0ZW5zaWxzID0gVXRlbnNpbHM7CiAgICBleHBvcnRzLlV0ZW5zaWxzQ3Jvc3NlZCA9IFV0ZW5zaWxzQ3Jvc3NlZDsKICAgIGV4cG9ydHMuVXRpbGl0eVBvbGUgPSBVdGlsaXR5UG9sZTsKICAgIGV4cG9ydHMuVmFuID0gVmFuOwogICAgZXhwb3J0cy5WYXJpYWJsZSA9IFZhcmlhYmxlOwogICAgZXhwb3J0cy5WYXVsdCA9IFZhdWx0OwogICAgZXhwb3J0cy5WZWN0b3JTcXVhcmUgPSBWZWN0b3JTcXVhcmU7CiAgICBleHBvcnRzLlZlZ2FuID0gVmVnYW47CiAgICBleHBvcnRzLlZlbmV0aWFuTWFzayA9IFZlbmV0aWFuTWFzazsKICAgIGV4cG9ydHMuVmVudXMgPSBWZW51czsKICAgIGV4cG9ydHMuVmVudXNBbmRNYXJzID0gVmVudXNBbmRNYXJzOwogICAgZXhwb3J0cy5WZXJpZmllZCA9IEJhZGdlQ2hlY2s7CiAgICBleHBvcnRzLlZpYnJhdGUgPSBWaWJyYXRlOwogICAgZXhwb3J0cy5WaWJyYXRlT2ZmID0gVmlicmF0ZU9mZjsKICAgIGV4cG9ydHMuVmlkZW8gPSBWaWRlbzsKICAgIGV4cG9ydHMuVmlkZW9PZmYgPSBWaWRlb09mZjsKICAgIGV4cG9ydHMuVmlkZW90YXBlID0gVmlkZW90YXBlOwogICAgZXhwb3J0cy5WaWV3ID0gVmlldzsKICAgIGV4cG9ydHMuVm9pY2VtYWlsID0gVm9pY2VtYWlsOwogICAgZXhwb3J0cy5Wb2xsZXliYWxsID0gVm9sbGV5YmFsbDsKICAgIGV4cG9ydHMuVm9sdW1lID0gVm9sdW1lOwogICAgZXhwb3J0cy5Wb2x1bWUxID0gVm9sdW1lMTsKICAgIGV4cG9ydHMuVm9sdW1lMiA9IFZvbHVtZTI7CiAgICBleHBvcnRzLlZvbHVtZU9mZiA9IFZvbHVtZU9mZjsKICAgIGV4cG9ydHMuVm9sdW1lWCA9IFZvbHVtZVg7CiAgICBleHBvcnRzLlZvdGUgPSBWb3RlOwogICAgZXhwb3J0cy5XYWxsZXQgPSBXYWxsZXQ7CiAgICBleHBvcnRzLldhbGxldDIgPSBXYWxsZXRNaW5pbWFsOwogICAgZXhwb3J0cy5XYWxsZXRDYXJkcyA9IFdhbGxldENhcmRzOwogICAgZXhwb3J0cy5XYWxsZXRNaW5pbWFsID0gV2FsbGV0TWluaW1hbDsKICAgIGV4cG9ydHMuV2FsbHBhcGVyID0gV2FsbHBhcGVyOwogICAgZXhwb3J0cy5XYW5kID0gV2FuZDsKICAgIGV4cG9ydHMuV2FuZDIgPSBXYW5kU3BhcmtsZXM7CiAgICBleHBvcnRzLldhbmRTcGFya2xlcyA9IFdhbmRTcGFya2xlczsKICAgIGV4cG9ydHMuV2FyZWhvdXNlID0gV2FyZWhvdXNlOwogICAgZXhwb3J0cy5XYXNoaW5nTWFjaGluZSA9IFdhc2hpbmdNYWNoaW5lOwogICAgZXhwb3J0cy5XYXRjaCA9IFdhdGNoOwogICAgZXhwb3J0cy5XYXZlcyA9IFdhdmVzOwogICAgZXhwb3J0cy5XYXZlc0Fycm93RG93biA9IFdhdmVzQXJyb3dEb3duOwogICAgZXhwb3J0cy5XYXZlc0Fycm93VXAgPSBXYXZlc0Fycm93VXA7CiAgICBleHBvcnRzLldhdmVzTGFkZGVyID0gV2F2ZXNMYWRkZXI7CiAgICBleHBvcnRzLldheXBvaW50cyA9IFdheXBvaW50czsKICAgIGV4cG9ydHMuV2ViY2FtID0gV2ViY2FtOwogICAgZXhwb3J0cy5XZWJob29rID0gV2ViaG9vazsKICAgIGV4cG9ydHMuV2ViaG9va09mZiA9IFdlYmhvb2tPZmY7CiAgICBleHBvcnRzLldlaWdodCA9IFdlaWdodDsKICAgIGV4cG9ydHMuV2VpZ2h0VGlsZGUgPSBXZWlnaHRUaWxkZTsKICAgIGV4cG9ydHMuV2hlYXQgPSBXaGVhdDsKICAgIGV4cG9ydHMuV2hlYXRPZmYgPSBXaGVhdE9mZjsKICAgIGV4cG9ydHMuV2hvbGVXb3JkID0gV2hvbGVXb3JkOwogICAgZXhwb3J0cy5XaWZpID0gV2lmaTsKICAgIGV4cG9ydHMuV2lmaUNvZyA9IFdpZmlDb2c7CiAgICBleHBvcnRzLldpZmlIaWdoID0gV2lmaUhpZ2g7CiAgICBleHBvcnRzLldpZmlMb3cgPSBXaWZpTG93OwogICAgZXhwb3J0cy5XaWZpT2ZmID0gV2lmaU9mZjsKICAgIGV4cG9ydHMuV2lmaVBlbiA9IFdpZmlQZW47CiAgICBleHBvcnRzLldpZmlTeW5jID0gV2lmaVN5bmM7CiAgICBleHBvcnRzLldpZmlaZXJvID0gV2lmaVplcm87CiAgICBleHBvcnRzLldpbmQgPSBXaW5kOwogICAgZXhwb3J0cy5XaW5kQXJyb3dEb3duID0gV2luZEFycm93RG93bjsKICAgIGV4cG9ydHMuV2luZSA9IFdpbmU7CiAgICBleHBvcnRzLldpbmVPZmYgPSBXaW5lT2ZmOwogICAgZXhwb3J0cy5Xb3JrZmxvdyA9IFdvcmtmbG93OwogICAgZXhwb3J0cy5Xb3JtID0gV29ybTsKICAgIGV4cG9ydHMuV3JhcFRleHQgPSBUZXh0V3JhcDsKICAgIGV4cG9ydHMuV3JlbmNoID0gV3JlbmNoOwogICAgZXhwb3J0cy5YID0gWDsKICAgIGV4cG9ydHMuWENpcmNsZSA9IENpcmNsZVg7CiAgICBleHBvcnRzLlhPY3RhZ29uID0gT2N0YWdvblg7CiAgICBleHBvcnRzLlhTcXVhcmUgPSBTcXVhcmVYOwogICAgZXhwb3J0cy5Zb3V0dWJlID0gWW91dHViZTsKICAgIGV4cG9ydHMuWmFwID0gWmFwOwogICAgZXhwb3J0cy5aYXBPZmYgPSBaYXBPZmY7CiAgICBleHBvcnRzLlpvb21JbiA9IFpvb21JbjsKICAgIGV4cG9ydHMuWm9vbU91dCA9IFpvb21PdXQ7CiAgICBleHBvcnRzLmNyZWF0ZUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50MzsKICAgIGV4cG9ydHMuY3JlYXRlSWNvbnMgPSBjcmVhdGVJY29uczsKICAgIGV4cG9ydHMuaWNvbnMgPSBpY29uc0FuZEFsaWFzZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1pY29uL2RlZXMtaWNvbi5kZW1vLmpzCnZhciBsdWNpZGVJY29ucywgZGVtb0Z1bmMyOwp2YXIgaW5pdF9kZWVzX2ljb25fZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWljb24vZGVlcy1pY29uLmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjYoKTsKICAgIGluaXRfZGVlc19pY29uKCk7CiAgICBsdWNpZGVJY29ucyA9IF9fdG9FU00ocmVxdWlyZV9sdWNpZGUoKSwgMSk7CiAgICBkZW1vRnVuYzIgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGZhSWNvbnMzID0gT2JqZWN0LmtleXMoaWNvbnM0LmZhKTsKICAgICAgY29uc29sZS5sb2coIkZpcnN0IGZldyBMdWNpZGUga2V5czoiLCBPYmplY3Qua2V5cyhsdWNpZGVJY29ucykuc2xpY2UoMCwgNSkpOwogICAgICBjb25zdCBsdWNpZGVJY29uc0xpc3QgPSBPYmplY3Qua2V5cyhsdWNpZGVJY29ucykuZmlsdGVyKChrZXkyKSA9PiB7CiAgICAgICAgY29uc3QgaXNVcHBlcmNhc2VGaXJzdCA9IGtleTJbMF0gPT09IGtleTJbMF0udG9VcHBlckNhc2UoKSAmJiBrZXkyWzBdICE9PSBrZXkyWzBdLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgY29uc3QgaXNGdW5jdGlvbjIgPSB0eXBlb2YgbHVjaWRlSWNvbnNba2V5Ml0gPT09ICJmdW5jdGlvbiI7CiAgICAgICAgY29uc3Qgbm90VXRpbGl0eSA9ICFbImNyZWF0ZUVsZW1lbnQiLCAiY3JlYXRlSWNvbnMiLCAiZGVmYXVsdCJdLmluY2x1ZGVzKGtleTIpOwogICAgICAgIHJldHVybiBpc0Z1bmN0aW9uMiAmJiBpc1VwcGVyY2FzZUZpcnN0ICYmIG5vdFV0aWxpdHk7CiAgICAgIH0pLm1hcCgocGFzY2FsTmFtZSkgPT4gewogICAgICAgIHJldHVybiBwYXNjYWxOYW1lLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgcGFzY2FsTmFtZS5zbGljZSgxKTsKICAgICAgfSk7CiAgICAgIGNvbnNvbGUubG9nKGBGb3VuZCAke2x1Y2lkZUljb25zTGlzdC5sZW5ndGh9IEx1Y2lkZSBpY29uc2ApOwogICAgICBpZiAobHVjaWRlSWNvbnNMaXN0Lmxlbmd0aCA9PT0gMCkgewogICAgICAgIGNvbnNvbGUubG9nKCJUcnlpbmcgYWx0ZXJuYXRpdmUgYXBwcm9hY2ggdG8gZmluZCBMdWNpZGUgaWNvbnMiKTsKICAgICAgICBpZiAobHVjaWRlSWNvbnMuaWNvbnMpIHsKICAgICAgICAgIGNvbnN0IGljb25Tb3VyY2UgPSBsdWNpZGVJY29ucy5pY29ucyB8fCB7fTsKICAgICAgICAgIGx1Y2lkZUljb25zTGlzdC5wdXNoKC4uLk9iamVjdC5rZXlzKGljb25Tb3VyY2UpKTsKICAgICAgICAgIGNvbnNvbGUubG9nKGBGb3VuZCAke2x1Y2lkZUljb25zTGlzdC5sZW5ndGh9IGljb25zIHZpYSBhbHRlcm5hdGl2ZSBtZXRob2RgKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3QgY29weUFsbEljb25OYW1lcyA9ICgpID0+IHsKICAgICAgICBjb25zdCBmYUljb25zTGlzdCA9IGZhSWNvbnMzLm1hcCgobmFtZSkgPT4gYGZhOiR7bmFtZX1gKTsKICAgICAgICBjb25zdCBsdWNpZGVJY29uc0xpc3RQcmVmaXhlZCA9IGx1Y2lkZUljb25zTGlzdC5tYXAoKG5hbWUpID0+IGBsdWNpZGU6JHtuYW1lfWApOwogICAgICAgIGNvbnN0IGFsbEljb25zID0gWy4uLmZhSWNvbnNMaXN0LCAuLi5sdWNpZGVJY29uc0xpc3RQcmVmaXhlZF07CiAgICAgICAgY29uc3QgdGV4dFRvQ29weSA9IGFsbEljb25zLmpvaW4oIlxuIik7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dFRvQ29weSkudGhlbigoKSA9PiB7CiAgICAgICAgICBjb25zdCBjdXJyZW50RXZlbnQgPSB3aW5kb3cuZXZlbnQ7CiAgICAgICAgICBjb25zdCBidXR0b24gPSBjdXJyZW50RXZlbnQuY3VycmVudFRhcmdldDsKICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVGV4dCA9IGJ1dHRvbi50ZXh0Q29udGVudDsKICAgICAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9IGBcdTI3MTMgQ29waWVkICR7YWxsSWNvbnMubGVuZ3RofSBpY29uIG5hbWVzIWA7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgYnV0dG9uLnRleHRDb250ZW50ID0gb3JpZ2luYWxUZXh0OwogICAgICAgICAgfSwgMmUzKTsKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgY29uc3Qgc2VhcmNoSWNvbnMgPSAoZXZlbnQpID0+IHsKICAgICAgICBjb25zdCBzZWFyY2hUZXJtID0gZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpOwogICAgICAgIGNvbnN0IGRlbW9Db250YWluZXIgPSBldmVudC50YXJnZXQuY2xvc2VzdCgiLmRlbW9Db250YWluZXIiKTsKICAgICAgICBjb25zdCBjb250YWluZXJzID0gZGVtb0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCIuaWNvbkNvbnRhaW5lciIpOwogICAgICAgIGNvbnRhaW5lcnMuZm9yRWFjaCgoY29udGFpbmVyKSA9PiB7CiAgICAgICAgICBjb25zdCBpY29uTmFtZSA9IGNvbnRhaW5lci5nZXRBdHRyaWJ1dGUoImRhdGEtbmFtZSIpOwogICAgICAgICAgaWYgKHNlYXJjaFRlcm0gPT09ICIiKSB7CiAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTsKICAgICAgICAgIH0gZWxzZSBpZiAoaWNvbk5hbWUgJiYgaWNvbk5hbWUuaW5jbHVkZXMoc2VhcmNoVGVybSkpIHsKICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGRlbW9Db250YWluZXIucXVlcnlTZWxlY3RvckFsbCgiLnNlY3Rpb24tY29udGFpbmVyIikuZm9yRWFjaCgoc2VjdGlvbikgPT4gewogICAgICAgICAgY29uc3QgdmlzaWJsZUljb25zID0gc2VjdGlvbi5xdWVyeVNlbGVjdG9yQWxsKCIuaWNvbkNvbnRhaW5lcjpub3QoLmhpZGRlbikiKS5sZW5ndGg7CiAgICAgICAgICBjb25zdCBjb3VudEVsZW1lbnQgPSBzZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoIi5pY29uLWNvdW50Iik7CiAgICAgICAgICBpZiAoY291bnRFbGVtZW50KSB7CiAgICAgICAgICAgIGNvbnN0IHRvdGFsSWNvbnNDb3VudCA9IHNlY3Rpb24uY2xhc3NMaXN0LmNvbnRhaW5zKCJmYS1zZWN0aW9uIikgPyBmYUljb25zMy5sZW5ndGggOiBsdWNpZGVJY29uc0xpc3QubGVuZ3RoOwogICAgICAgICAgICBjb3VudEVsZW1lbnQudGV4dENvbnRlbnQgPSB2aXNpYmxlSWNvbnMgPT09IHRvdGFsSWNvbnNDb3VudCA/IGAke3RvdGFsSWNvbnNDb3VudH0gaWNvbnNgIDogYCR7dmlzaWJsZUljb25zfSBvZiAke3RvdGFsSWNvbnNDb3VudH0gaWNvbnNgOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9OwogICAgICBjb25zdCBjb3B5SWNvbk5hbWUgPSAoaWNvbk5hbWVUb0NvcHksIHR5cGU1KSA9PiB7CiAgICAgICAgY29uc3QgdGV4dFRvQ29weSA9IGAke3R5cGU1fToke2ljb25OYW1lVG9Db3B5fWA7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dFRvQ29weSkudGhlbigoKSA9PiB7CiAgICAgICAgICBjb25zdCBjdXJyZW50RXZlbnQgPSB3aW5kb3cuZXZlbnQ7CiAgICAgICAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gY3VycmVudEV2ZW50LmN1cnJlbnRUYXJnZXQ7CiAgICAgICAgICBjb25zdCB0b29sdGlwID0gY3VycmVudFRhcmdldC5xdWVyeVNlbGVjdG9yKCIuY29weS10b29sdGlwIik7CiAgICAgICAgICBpZiAodG9vbHRpcCkgewogICAgICAgICAgICB0b29sdGlwLnRleHRDb250ZW50ID0gIkNvcGllZCEiOwogICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICB0b29sdGlwLnRleHRDb250ZW50ID0gIkNsaWNrIHRvIGNvcHkiOwogICAgICAgICAgICB9LCAyZTMpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9OwogICAgICByZXR1cm4gYjJgCiAgPHN0eWxlPgogICAgLmRlbW9Db250YWluZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICBiYWNrZ3JvdW5kOiAjMTExMTExOwogICAgICBwYWRkaW5nOiAyMHB4OwogICAgICBmb250LXNpemU6IDMwcHg7CiAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIFJvYm90bywgT3h5Z2VuLVNhbnMsIFVidW50dSwgQ2FudGFyZWxsLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmOwogICAgfQogICAgCiAgICAuc2VhcmNoLWNvbnRhaW5lciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBnYXA6IDEwcHg7CiAgICB9CiAgICAKICAgICNpY29uU2VhcmNoIHsKICAgICAgZmxleDogMTsKICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBiYWNrZ3JvdW5kOiAjMjIyOwogICAgICBjb2xvcjogI2ZmZjsKICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKICAgIH0KICAgIAogICAgI2ljb25TZWFyY2g6Zm9jdXMgewogICAgICBvdXRsaW5lOiBub25lOwogICAgICBib3JkZXItY29sb3I6ICNlNDAwMmI7CiAgICB9CiAgICAKICAgIC5jb3B5LWFsbC1idXR0b24gewogICAgICBwYWRkaW5nOiAxMnB4IDIwcHg7CiAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgYm9yZGVyOiBub25lOwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGJhY2tncm91bmQ6ICNlNDAwMmI7CiAgICAgIGNvbG9yOiAjZmZmOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgfQogICAgCiAgICAuY29weS1hbGwtYnV0dG9uOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZDogI2M0MDAxYjsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwogICAgfQogICAgCiAgICAuY29weS1hbGwtYnV0dG9uOmFjdGl2ZSB7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgIH0KICAgIAogICAgZGVlcy1pY29uIHsKICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICB9CgogICAgLmljb25Db250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBwYWRkaW5nOiAyMHB4IDE2cHggMHB4IDE2cHg7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzMzMzM7CiAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnM7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQogICAgCiAgICAuaWNvbkNvbnRhaW5lcjpob3ZlciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMjI7CiAgICB9CgogICAgLmljb25OYW1lIHsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIGNvbG9yOiAjY2NjOwogICAgICBiYWNrZ3JvdW5kOiAjMzMzMzMzOwogICAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgICAgbWFyZ2luLWxlZnQ6IC0xNnB4OwogICAgICBtYXJnaW4tcmlnaHQ6IC0xNnB4OwogICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgbWF4LXdpZHRoOiAxMjBweDsKICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7CiAgICB9CgogICAgLnNlY3Rpb24tdGl0bGUgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgbWFyZ2luOiAyMHB4IDA7CiAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzMzMzsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgfQogICAgCiAgICAuYXBpLW5vdGUgewogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGNvbG9yOiAjZTQwMDJiOwogICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICBwYWRkaW5nOiAxMHB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTQwMDJiOwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjI4LCAwLCA0MywgMC4xKTsKICAgIH0KICAgIAogICAgLmljb24tY291bnQgewogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGNvbG9yOiAjODg4OwogICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICBiYWNrZ3JvdW5kOiAjMjIyOwogICAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgICAgYm9yZGVyLXJhZGl1czogMjBweDsKICAgIH0KICAgIAogICAgLmljb25zLWdyaWQgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQogICAgCiAgICAuc2VjdGlvbi1jb250YWluZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDsKICAgIH0KICAgIAogICAgLmNvcHktdG9vbHRpcCB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgYmFja2dyb3VuZDogIzMzMzsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIHRvcDogLTMwcHg7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zczsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB9CiAgICAKICAgIC5pY29uQ29udGFpbmVyOmhvdmVyIC5jb3B5LXRvb2x0aXAgewogICAgICBvcGFjaXR5OiAxOwogICAgfQoKICAgIC5pY29uQ29udGFpbmVyOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsKICAgIH0KICAgIAogICAgLmhpZGRlbiB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW9Db250YWluZXIiPgogICAgPGRpdiBjbGFzcz0ic2VhcmNoLWNvbnRhaW5lciI+CiAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaWNvblNlYXJjaCIgcGxhY2Vob2xkZXI9IlNlYXJjaCBpY29ucy4uLiIgQGlucHV0PSR7c2VhcmNoSWNvbnN9PgogICAgICA8YnV0dG9uIGNsYXNzPSJjb3B5LWFsbC1idXR0b24iIEBjbGljaz0ke2NvcHlBbGxJY29uTmFtZXN9PvCfk4sgQ29weSBBbGwgSWNvbiBOYW1lczwvYnV0dG9uPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9ImFwaS1ub3RlIj4KICAgICAgTmV3IEFQSTogVXNlIDxjb2RlPmljb249ImZhOmljb25OYW1lIjwvY29kZT4gb3IgPGNvZGU+aWNvbj0ibHVjaWRlOmljb25OYW1lIjwvY29kZT4gaW5zdGVhZCBvZiA8Y29kZT5pY29uRkE8L2NvZGU+LiAKICAgICAgQ2xpY2sgYW55IGljb24gdG8gY29weSBpdHMgbmV3IGZvcm1hdCB0byBjbGlwYm9hcmQuCiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1jb250YWluZXIgZmEtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPgogICAgICAgIEZvbnRBd2Vzb21lIEljb25zCiAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tY291bnQiPiR7ZmFJY29uczMubGVuZ3RofSBpY29uczwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Imljb25zLWdyaWQiPgogICAgICAgICR7ZmFJY29uczMubWFwKChpY29uTmFtZSkgPT4gewogICAgICAgIGNvbnN0IHByZWZpeGVkTmFtZSA9IGBmYToke2ljb25OYW1lfWA7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imljb25Db250YWluZXIgZmEtaWNvbiIgZGF0YS1uYW1lPSR7aWNvbk5hbWUudG9Mb3dlckNhc2UoKX0gQGNsaWNrPSR7KCkgPT4gY29weUljb25OYW1lKGljb25OYW1lLCAiZmEiKX0+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7cHJlZml4ZWROYW1lfSBpY29uU2l6ZT0iMjQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaWNvbk5hbWUiPmZhOiR7aWNvbk5hbWV9PC9kaXY+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29weS10b29sdGlwIj5DbGljayB0byBjb3B5PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWNvbnRhaW5lciBsdWNpZGUtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPgogICAgICAgIEx1Y2lkZSBJY29ucwogICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWNvdW50Ij4ke2x1Y2lkZUljb25zTGlzdC5sZW5ndGh9IGljb25zPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaWNvbnMtZ3JpZCI+CiAgICAgICAgJHtsdWNpZGVJY29uc0xpc3QubWFwKChpY29uTmFtZSkgPT4gewogICAgICAgIGNvbnN0IHByZWZpeGVkTmFtZSA9IGBsdWNpZGU6JHtpY29uTmFtZX1gOwogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uQ29udGFpbmVyIGx1Y2lkZS1pY29uIiBkYXRhLW5hbWU9JHtpY29uTmFtZS50b0xvd2VyQ2FzZSgpfSBAY2xpY2s9JHsoKSA9PiBjb3B5SWNvbk5hbWUoaWNvbk5hbWUsICJsdWNpZGUiKX0+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7cHJlZml4ZWROYW1lfSBpY29uU2l6ZT0iMjQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaWNvbk5hbWUiPmx1Y2lkZToke2ljb25OYW1lfTwvZGl2PgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvcHktdG9vbHRpcCI+Q2xpY2sgdG8gY29weTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYDsKICAgICAgfSl9CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CiAgYDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1pY29uL2RlZXMtaWNvbi5qcwpmdW5jdGlvbiBsaW1pdENhY2hlU2l6ZSgpIHsKICBpZiAoaWNvbkNhY2hlLnNpemUgPiBNQVhfQ0FDSEVfU0laRSkgewogICAgY29uc3Qga2V5c1RvRGVsZXRlID0gQXJyYXkuZnJvbShpY29uQ2FjaGUua2V5cygpKS5zbGljZSgwLCBNQVhfQ0FDSEVfU0laRSAvIDUpOwogICAga2V5c1RvRGVsZXRlLmZvckVhY2goKGtleTIpID0+IGljb25DYWNoZS5kZWxldGUoa2V5MikpOwogIH0KfQp2YXIgbHVjaWRlSWNvbnMyLCBpbXBvcnRfbHVjaWRlLCBfX2VzRGVjb3JhdGU0LCBfX3J1bkluaXRpYWxpemVyczUsIGZhSWNvbnMyLCBpY29uczQsIGljb25DYWNoZSwgTUFYX0NBQ0hFX1NJWkUsIERlZXNJY29uOwp2YXIgaW5pdF9kZWVzX2ljb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1pY29uL2RlZXMtaWNvbi5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyNigpOwogICAgaW5pdF9kaXN0X3RzMjUoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIGluaXRfZm9udGF3ZXNvbWVfc3ZnX2NvcmUoKTsKICAgIGluaXRfZnJlZV9icmFuZHNfc3ZnX2ljb25zKCk7CiAgICBpbml0X2ZyZWVfcmVndWxhcl9zdmdfaWNvbnMoKTsKICAgIGluaXRfZnJlZV9zb2xpZF9zdmdfaWNvbnMoKTsKICAgIGluaXRfZGVlc19pY29uX2RlbW8oKTsKICAgIGx1Y2lkZUljb25zMiA9IF9fdG9FU00ocmVxdWlyZV9sdWNpZGUoKSwgMSk7CiAgICBpbXBvcnRfbHVjaWRlID0gX190b0VTTShyZXF1aXJlX2x1Y2lkZSgpLCAxKTsKICAgIF9fZXNEZWNvcmF0ZTQgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM1ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBmYUljb25zMiA9IHsKICAgICAgLy8gbm9ybWFsCiAgICAgIGFycm93UmlnaHQ6IGZhQXJyb3dSaWdodCwKICAgICAgYXJyb3dVcFJpZ2h0RnJvbVNxdWFyZTogZmFBcnJvd1VwUmlnaHRGcm9tU3F1YXJlLAogICAgICBiZWxsOiBmYUJlbGwyLAogICAgICBidWc6IGZhQnVnLAogICAgICBidWlsZGluZzogZmFCdWlsZGluZzIsCiAgICAgIGNhcmV0TGVmdDogZmFDYXJldExlZnQsCiAgICAgIGNhcmV0UmlnaHQ6IGZhQ2FyZXRSaWdodCwKICAgICAgY2hlY2s6IGZhQ2hlY2ssCiAgICAgIGNpcmNsZUluZm86IGZhQ2lyY2xlSW5mbywKICAgICAgY2lyY2xlQ2hlY2s6IGZhQ2lyY2xlQ2hlY2ssCiAgICAgIGNpcmNsZUNoZWNrU29saWQ6IGZhQ2lyY2xlQ2hlY2syLAogICAgICBjaXJjbGVYbWFyazogZmFDaXJjbGVYbWFyaywKICAgICAgY2lyY2xlWG1hcmtTb2xpZDogZmFDaXJjbGVYbWFyazIsCiAgICAgIGNsb2NrUm90YXRlTGVmdDogZmFDbG9ja1JvdGF0ZUxlZnQsCiAgICAgIGNvcHk6IGZhQ29weSwKICAgICAgY29weVNvbGlkOiBmYUNvcHkyLAogICAgICBkZXNrdG9wOiBmYURlc2t0b3AsCiAgICAgIGV5ZTogZmFFeWUyLAogICAgICBleWVTbGFzaDogZmFFeWVTbGFzaDIsCiAgICAgIGZpbGVJbnZvaWNlOiBmYUZpbGVJbnZvaWNlLAogICAgICBmaWxlSW52b2ljZURvbGxlcjogZmFGaWxlSW52b2ljZURvbGxhciwKICAgICAgZ2VhcjogZmFHZWFyLAogICAgICBncmlwOiBmYUdyaXAsCiAgICAgIG1hZ25pZnlpbmdHbGFzczogZmFNYWduaWZ5aW5nR2xhc3MsCiAgICAgIG1lc3NhZ2U6IGZhTWVzc2FnZSwKICAgICAgbWVzc2FnZVNvbGlkOiBmYU1lc3NhZ2UyLAogICAgICBtb25leUNoZWNrRG9sbGFyOiBmYU1vbmV5Q2hlY2tEb2xsYXIsCiAgICAgIG11Z0hvdDogZmFNdWdIb3QsCiAgICAgIG1pbnVzOiBmYU1pbnVzLAogICAgICBuZXR3b3JrV2lyZWQ6IGZhTmV0d29ya1dpcmVkLAogICAgICBwYXBlcmNsaXA6IGZhUGFwZXJjbGlwLAogICAgICBwYXN0ZTogZmFQYXN0ZSwKICAgICAgcGFzdGVTb2xpZDogZmFQYXN0ZTIsCiAgICAgIHBlblRvU3F1YXJlOiBmYVBlblRvU3F1YXJlMiwKICAgICAgcGx1czogZmFQbHVzLAogICAgICByZWNlaXB0OiBmYVJlY2VpcHQsCiAgICAgIHJzczogZmFSc3MsCiAgICAgIHNoYXJlOiBmYVNoYXJlLAogICAgICBzdW46IGZhU3VuLAogICAgICBzdW5Tb2xpZDogZmFTdW4yLAogICAgICB0ZXJtaW5hbDogZmFUZXJtaW5hbCwKICAgICAgdHJhc2g6IGZhVHJhc2gsCiAgICAgIHRyYXNoU29saWQ6IGZhVHJhc2gsCiAgICAgIHRyYXNoQ2FuOiBmYVRyYXNoQ2FuLAogICAgICB0cmFzaENhblNvbGlkOiBmYVRyYXNoQ2FuMiwKICAgICAgdXNlcnM6IGZhVXNlcnMsCiAgICAgIHdhbGxldDogZmFXYWxsZXQsCiAgICAgIHhtYXJrOiBmYVhtYXJrLAogICAgICAvLyBicmFuZHMKICAgICAgZmFjZWJvb2s6IGZhRmFjZWJvb2ssCiAgICAgIGdvb2dsZTogZmFHb29nbGUsCiAgICAgIGluc3RhZ3JhbTogZmFJbnN0YWdyYW0sCiAgICAgIGxpbmtlZGluOiBmYUxpbmtlZGluLAogICAgICBtZWRpdW06IGZhTWVkaXVtLAogICAgICBzbGFjazogZmFTbGFja0hhc2gsCiAgICAgIHRpa3RvazogZmFUaWt0b2ssCiAgICAgIHR3aXR0ZXI6IGZhVHdpdHRlcgogICAgfTsKICAgIGljb25zNCA9IHsKICAgICAgZmE6IGZhSWNvbnMyCiAgICB9OwogICAgaWNvbkNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgIE1BWF9DQUNIRV9TSVpFID0gNTAwOwogICAgRGVlc0ljb24gPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pY29uIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9pY29uRkFfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pY29uRkFfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaWNvbkZBX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaWNvbl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2ljb25faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaWNvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ljb25TaXplX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaWNvblNpemVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaWNvblNpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb2xvcl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2NvbG9yX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NvbG9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc3Ryb2tlV2lkdGhfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zdHJva2VXaWR0aF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zdHJva2VXaWR0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0ljb24yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfaWNvbkZBX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgICAgIGNvbnZlcnRlcjogewogICAgICAgICAgICAgIC8vIENvbnZlcnQgYXR0cmlidXRlIHN0cmluZyB0byBwcm9wZXJ0eSAoZm9yIHJlZmxlY3RlZCBhdHRyaWJ1dGVzKQogICAgICAgICAgICAgIGZyb21BdHRyaWJ1dGU6ICh2YWx1ZTIpID0+IHZhbHVlMiwKICAgICAgICAgICAgICAvLyBDb252ZXJ0IHByb3BlcnR5IHRvIGF0dHJpYnV0ZSAoZm9yIHJlZmxlY3Rpb24pCiAgICAgICAgICAgICAgdG9BdHRyaWJ1dGU6ICh2YWx1ZTIpID0+IHZhbHVlMgogICAgICAgICAgICB9CiAgICAgICAgICB9KV07CiAgICAgICAgICBfaWNvbl9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgICAgICBjb252ZXJ0ZXI6IHsKICAgICAgICAgICAgICBmcm9tQXR0cmlidXRlOiAodmFsdWUyKSA9PiB2YWx1ZTIsCiAgICAgICAgICAgICAgdG9BdHRyaWJ1dGU6ICh2YWx1ZTIpID0+IHZhbHVlMgogICAgICAgICAgICB9CiAgICAgICAgICB9KV07CiAgICAgICAgICBfaWNvblNpemVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfY29sb3JfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfc3Ryb2tlV2lkdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU0KHRoaXMsIG51bGwsIF9pY29uRkFfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvbkZBIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpY29uRkEiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaWNvbkZBLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaWNvbkZBID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pY29uRkFfaW5pdGlhbGl6ZXJzLCBfaWNvbkZBX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQodGhpcywgbnVsbCwgX2ljb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaWNvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pY29uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaWNvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaWNvbl9pbml0aWFsaXplcnMsIF9pY29uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQodGhpcywgbnVsbCwgX2ljb25TaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImljb25TaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpY29uU2l6ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pY29uU2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmljb25TaXplID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pY29uU2l6ZV9pbml0aWFsaXplcnMsIF9pY29uU2l6ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0KHRoaXMsIG51bGwsIF9jb2xvcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2xvciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sb3IiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29sb3IsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jb2xvciA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29sb3JfaW5pdGlhbGl6ZXJzLCBfY29sb3JfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNCh0aGlzLCBudWxsLCBfc3Ryb2tlV2lkdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3Ryb2tlV2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInN0cm9rZVdpZHRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0cm9rZVdpZHRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc3Ryb2tlV2lkdGggPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0cm9rZVdpZHRoX2luaXRpYWxpemVycywgX3N0cm9rZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc0ljb24yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMyOwogICAgICAgICNpY29uRkFfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNSh0aGlzLCBfaWNvbkZBX2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgICAgICAvKioKICAgICAgICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGBpY29uYCBwcm9wZXJ0eSBpbnN0ZWFkIHdpdGggZm9ybWF0ICJmYTppY29uTmFtZSIgb3IgImx1Y2lkZTppY29uTmFtZSIKICAgICAgICAgKi8KICAgICAgICBnZXQgaWNvbkZBKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2ljb25GQV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaWNvbkZBKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaWNvbkZBX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNpY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9pY29uRkFfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUodGhpcywgX2ljb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgcHJlZmVycmVkIGljb24gcHJvcGVydHkuIFVzZSBmb3JtYXQgImZhOmljb25OYW1lIiBvciAibHVjaWRlOmljb25OYW1lIgogICAgICAgICAqIEV4YW1wbGVzOiAiZmE6Y2hlY2siLCAibHVjaWRlOm1lbnUiCiAgICAgICAgICovCiAgICAgICAgZ2V0IGljb24oKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaWNvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaWNvbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2ljb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2ljb25TaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9pY29uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9pY29uU2l6ZV9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgICAgIGdldCBpY29uU2l6ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpY29uU2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaWNvblNpemUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpY29uU2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjY29sb3JfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUodGhpcywgX2ljb25TaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9jb2xvcl9pbml0aWFsaXplcnMsICJjdXJyZW50Q29sb3IiKSk7CiAgICAgICAgZ2V0IGNvbG9yKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2NvbG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjb2xvcih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2NvbG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzdHJva2VXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNSh0aGlzLCBfY29sb3JfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUodGhpcywgX3N0cm9rZVdpZHRoX2luaXRpYWxpemVycywgMikpOwogICAgICAgIGdldCBzdHJva2VXaWR0aCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzdHJva2VXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc3Ryb2tlV2lkdGgodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzdHJva2VXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAvLyBGb3IgdHJhY2tpbmcgd2hlbiB3ZSBuZWVkIHRvIHJlLXJlbmRlcgogICAgICAgIGxhc3RJY29uID0gKF9fcnVuSW5pdGlhbGl6ZXJzNSh0aGlzLCBfc3Ryb2tlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgICAgICBsYXN0SWNvblNpemUgPSBudWxsOwogICAgICAgIGxhc3RDb2xvciA9IG51bGw7CiAgICAgICAgbGFzdFN0cm9rZVdpZHRoID0gbnVsbDsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICBkb210b29sc19lbGVtZW50YmFzaWNfZXhwb3J0cy5zZXR1cCgpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXRzIHRoZSBlZmZlY3RpdmUgaWNvbiB2YWx1ZSwgc3VwcG9ydGluZyBib3RoIHRoZSBuZXcgYGljb25gIHByb3BlcnR5CiAgICAgICAgICogYW5kIHRoZSBsZWdhY3kgYGljb25GQWAgcHJvcGVydHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCiAgICAgICAgICogUHJlZmVycyBgaWNvbmAgaWYgYm90aCBhcmUgc2V0LgogICAgICAgICAqLwogICAgICAgIGdldEVmZmVjdGl2ZUljb24oKSB7CiAgICAgICAgICBpZiAodGhpcy5pY29uKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmljb247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5pY29uRkEpIHsKICAgICAgICAgICAgaWYgKHRoaXMuaWNvbkZBLnN0YXJ0c1dpdGgoImx1Y2lkZToiKSkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmljb25GQTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gYGZhOiR7dGhpcy5pY29uRkF9YDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBQYXJzZXMgYW4gaWNvbiBzdHJpbmcgaW50byBpdHMgdHlwZSBhbmQgbmFtZSBwYXJ0cwogICAgICAgICAqIEBwYXJhbSBpY29uU3RyIFRoZSBpY29uIHN0cmluZyBpbiBmb3JtYXQgInR5cGU6bmFtZSIKICAgICAgICAgKiBAcmV0dXJucyBPYmplY3Qgd2l0aCB0eXBlIGFuZCBuYW1lIHByb3BlcnRpZXMKICAgICAgICAgKi8KICAgICAgICBwYXJzZUljb25TdHJpbmcoaWNvblN0cikgewogICAgICAgICAgY29uc3QgbG93ZXJTdHIgPSBpY29uU3RyLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBpZiAobG93ZXJTdHIuc3RhcnRzV2l0aCgiZmE6IikpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICB0eXBlOiAiZmEiLAogICAgICAgICAgICAgIG5hbWU6IGljb25TdHIuc3Vic3RyaW5nKDMpCiAgICAgICAgICAgICAgLy8gUmVtb3ZlICdmYTonIHByZWZpeAogICAgICAgICAgICB9OwogICAgICAgICAgfSBlbHNlIGlmIChsb3dlclN0ci5zdGFydHNXaXRoKCJsdWNpZGU6IikpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICB0eXBlOiAibHVjaWRlIiwKICAgICAgICAgICAgICBuYW1lOiBpY29uU3RyLnN1YnN0cmluZyg3KQogICAgICAgICAgICAgIC8vIFJlbW92ZSAnbHVjaWRlOicgcHJlZml4CiAgICAgICAgICAgIH07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHR5cGU6ICJsdWNpZGUiLAogICAgICAgICAgICAgIG5hbWU6IGljb25TdHIKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmVuZGVyTHVjaWRlSWNvbihpY29uTmFtZSkgewogICAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBgbHVjaWRlOiR7aWNvbk5hbWV9OiR7dGhpcy5pY29uU2l6ZX06JHt0aGlzLmNvbG9yfToke3RoaXMuc3Ryb2tlV2lkdGh9YDsKICAgICAgICAgIGlmIChpY29uQ2FjaGUuaGFzKGNhY2hlS2V5KSkgewogICAgICAgICAgICByZXR1cm4gaWNvbkNhY2hlLmdldChjYWNoZUtleSkgfHwgIiI7CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwYXNjYWxDYXNlTmFtZSA9IGljb25OYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgaWNvbk5hbWUuc2xpY2UoMSk7CiAgICAgICAgICAgIGlmICghbHVjaWRlSWNvbnMyW3Bhc2NhbENhc2VOYW1lXSkgewogICAgICAgICAgICAgIGNvbnNvbGUud2FybihgTHVjaWRlIGljb24gJyR7cGFzY2FsQ2FzZU5hbWV9JyBub3QgZm91bmQgaW4gbHVjaWRlSWNvbnMgb2JqZWN0YCk7CiAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnN0IHN2Z0VsZW1lbnQgPSAoMCwgaW1wb3J0X2x1Y2lkZS5jcmVhdGVFbGVtZW50KShsdWNpZGVJY29uczJbcGFzY2FsQ2FzZU5hbWVdLCB7CiAgICAgICAgICAgICAgY29sb3I6IHRoaXMuY29sb3IsCiAgICAgICAgICAgICAgc2l6ZTogdGhpcy5pY29uU2l6ZSwKICAgICAgICAgICAgICBzdHJva2VXaWR0aDogdGhpcy5zdHJva2VXaWR0aAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKCFzdmdFbGVtZW50KSB7CiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBjcmVhdGVFbGVtZW50IHJldHVybmVkIGVtcHR5IHJlc3VsdCBmb3IgJHtwYXNjYWxDYXNlTmFtZX1gKTsKICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3ZnRWxlbWVudC5vdXRlckhUTUw7CiAgICAgICAgICAgIGljb25DYWNoZS5zZXQoY2FjaGVLZXksIHJlc3VsdCk7CiAgICAgICAgICAgIGxpbWl0Q2FjaGVTaXplKCk7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciByZW5kZXJpbmcgTHVjaWRlIGljb24gJHtpY29uTmFtZX06YCwgZXJyb3IpOwogICAgICAgICAgICByZXR1cm4gYDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iJHt0aGlzLmljb25TaXplfSIgaGVpZ2h0PSIke3RoaXMuaWNvblNpemV9IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iJHt0aGlzLmNvbG9yfSIgc3Ryb2tlLXdpZHRoPSIke3RoaXMuc3Ryb2tlV2lkdGh9IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogICAgICAgIDx0ZXh0IHg9IjUwJSIgeT0iNTAlIiBmb250LXNpemU9IjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIGZpbGw9IiR7dGhpcy5jb2xvcn0iPiR7aWNvbk5hbWV9PC90ZXh0PgogICAgICA8L3N2Zz5gOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLyogSW1wcm92ZSByZW5kZXJpbmcgcGVyZm9ybWFuY2UgKi8KICAgICAgI2ljb25Db250YWluZXIgc3ZnIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsgLyogSGVscHMgd2l0aCBhbmltYXRpb25zICovCiAgICAgICAgY29udGFpbjogc3RyaWN0OyAvKiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gKi8KICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICAke2RvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnN0eWxlc30KICAgICAgPHN0eWxlPgogICAgICAgICNpY29uQ29udGFpbmVyIHsKICAgICAgICAgIHdpZHRoOiAke3RoaXMuaWNvblNpemV9cHg7CiAgICAgICAgICBoZWlnaHQ6ICR7dGhpcy5pY29uU2l6ZX1weDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgaWQ9Imljb25Db250YWluZXIiPjwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgdXBkYXRlZCgpIHsKICAgICAgICAgIGlmICghdGhpcy5pY29uU2l6ZSkgewogICAgICAgICAgICB0aGlzLmljb25TaXplID0gcGFyc2VJbnQoZ2xvYmFsVGhpcy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmZvbnRTaXplLnJlcGxhY2UoL1xEL2csICIiKSk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBlZmZlY3RpdmVJY29uID0gdGhpcy5nZXRFZmZlY3RpdmVJY29uKCk7CiAgICAgICAgICBpZiAodGhpcy5sYXN0SWNvbiA9PT0gZWZmZWN0aXZlSWNvbiAmJiB0aGlzLmxhc3RJY29uU2l6ZSA9PT0gdGhpcy5pY29uU2l6ZSAmJiB0aGlzLmxhc3RDb2xvciA9PT0gdGhpcy5jb2xvciAmJiB0aGlzLmxhc3RTdHJva2VXaWR0aCA9PT0gdGhpcy5zdHJva2VXaWR0aCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmxhc3RJY29uID0gZWZmZWN0aXZlSWNvbjsKICAgICAgICAgIHRoaXMubGFzdEljb25TaXplID0gdGhpcy5pY29uU2l6ZTsKICAgICAgICAgIHRoaXMubGFzdENvbG9yID0gdGhpcy5jb2xvcjsKICAgICAgICAgIHRoaXMubGFzdFN0cm9rZVdpZHRoID0gdGhpcy5zdHJva2VXaWR0aDsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiI2ljb25Db250YWluZXIiKTsKICAgICAgICAgIGlmICghY29udGFpbmVyIHx8ICFlZmZlY3RpdmVJY29uKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCB7IHR5cGU6IHR5cGU1LCBuYW1lIH0gPSB0aGlzLnBhcnNlSWNvblN0cmluZyhlZmZlY3RpdmVJY29uKTsKICAgICAgICAgICAgaWYgKHR5cGU1ID09PSAibHVjaWRlIikgewogICAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgY29uc3QgcGFzY2FsQ2FzZU5hbWUgPSBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKTsKICAgICAgICAgICAgICAgIGlmIChsdWNpZGVJY29uczJbcGFzY2FsQ2FzZU5hbWVdKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHN2Z0VsZW1lbnQgPSAoMCwgaW1wb3J0X2x1Y2lkZS5jcmVhdGVFbGVtZW50KShsdWNpZGVJY29uczJbcGFzY2FsQ2FzZU5hbWVdLCB7CiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMuY29sb3IsCiAgICAgICAgICAgICAgICAgICAgc2l6ZTogdGhpcy5pY29uU2l6ZSwKICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogdGhpcy5zdHJva2VXaWR0aAogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgaWYgKHN2Z0VsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc3ZnRWxlbWVudCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBjcmVhdGUgZWxlbWVudCBmb3IgJHtwYXNjYWxDYXNlTmFtZX1gKTsKICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgcmVuZGVyaW5nIEx1Y2lkZSBpY29uOmAsIGVycm9yKTsKICAgICAgICAgICAgICAgIGNvbnN0IGljb25IdG1sID0gdGhpcy5yZW5kZXJMdWNpZGVJY29uKG5hbWUpOwogICAgICAgICAgICAgICAgaWYgKGljb25IdG1sKSB7CiAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBpY29uSHRtbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29uc3QgZmFJY29uID0gaWNvbnM0LmZhW25hbWVdOwogICAgICAgICAgICAgIGlmIChmYUljb24pIHsKICAgICAgICAgICAgICAgIGNvbnN0IGljb25IdG1sID0gaWNvbjIoZmFJY29uKS5odG1sWzBdOwogICAgICAgICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGljb25IdG1sOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEZvbnRBd2Vzb21lIGljb24gbm90IGZvdW5kOiAke25hbWV9YCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciB1cGRhdGluZyBpY29uICR7ZWZmZWN0aXZlSWNvbn06YCwgZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBDbGVhbiB1cCByZXNvdXJjZXMgd2hlbiBlbGVtZW50IGlzIHJlbW92ZWQKICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICB0aGlzLmxhc3RJY29uID0gbnVsbDsKICAgICAgICAgIHRoaXMubGFzdEljb25TaXplID0gbnVsbDsKICAgICAgICAgIHRoaXMubGFzdENvbG9yID0gbnVsbDsKICAgICAgICAgIHRoaXMubGFzdFN0cm9rZVdpZHRoID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0ljb24yID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvc2VydmljZXMvdmVyc2lvbnMuanMKdmFyIENETl9WRVJTSU9OUywgQ0ROX0JBU0U7CnZhciBpbml0X3ZlcnNpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL3NlcnZpY2VzL3ZlcnNpb25zLmpzIigpIHsKICAgIENETl9WRVJTSU9OUyA9IHsKICAgICAgeHRlcm06ICI1LjMuMCIsCiAgICAgIHh0ZXJtQWRkb25GaXQ6ICIwLjguMCIsCiAgICAgIHh0ZXJtQWRkb25TZWFyY2g6ICIwLjEzLjAiLAogICAgICBoaWdobGlnaHRKczogIjExLjExLjEiLAogICAgICBhcGV4Y2hhcnRzOiAiNS4zLjYiLAogICAgICB0aXB0YXA6ICIyLjIzLjAiLAogICAgICBmb250YXdlc29tZTogIjcuMS4wIgogICAgfTsKICAgIENETl9CQVNFID0gImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0iOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL3NlcnZpY2VzL0RlZXNTZXJ2aWNlTGliTG9hZGVyLmpzCnZhciBEZWVzU2VydmljZUxpYkxvYWRlcjsKdmFyIGluaXRfRGVlc1NlcnZpY2VMaWJMb2FkZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvc2VydmljZXMvRGVlc1NlcnZpY2VMaWJMb2FkZXIuanMiKCkgewogICAgaW5pdF92ZXJzaW9ucygpOwogICAgRGVlc1NlcnZpY2VMaWJMb2FkZXIgPSBjbGFzcyBfRGVlc1NlcnZpY2VMaWJMb2FkZXIgewogICAgICBzdGF0aWMgaW5zdGFuY2U7CiAgICAgIC8vIENhY2hlZCBsaWJyYXJ5IHJlZmVyZW5jZXMKICAgICAgeHRlcm1MaWIgPSBudWxsOwogICAgICB4dGVybUZpdEFkZG9uTGliID0gbnVsbDsKICAgICAgeHRlcm1TZWFyY2hBZGRvbkxpYiA9IG51bGw7CiAgICAgIGhpZ2hsaWdodEpzTGliID0gbnVsbDsKICAgICAgYXBleENoYXJ0c0xpYiA9IG51bGw7CiAgICAgIHRpcHRhcExpYiA9IG51bGw7CiAgICAgIC8vIExvYWRpbmcgcHJvbWlzZXMgdG8gcHJldmVudCBkdXBsaWNhdGUgY29uY3VycmVudCBsb2FkcwogICAgICB4dGVybUxvYWRpbmdQcm9taXNlID0gbnVsbDsKICAgICAgeHRlcm1GaXRBZGRvbkxvYWRpbmdQcm9taXNlID0gbnVsbDsKICAgICAgeHRlcm1TZWFyY2hBZGRvbkxvYWRpbmdQcm9taXNlID0gbnVsbDsKICAgICAgaGlnaGxpZ2h0SnNMb2FkaW5nUHJvbWlzZSA9IG51bGw7CiAgICAgIGFwZXhDaGFydHNMb2FkaW5nUHJvbWlzZSA9IG51bGw7CiAgICAgIHRpcHRhcExvYWRpbmdQcm9taXNlID0gbnVsbDsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIERlZXNTZXJ2aWNlTGliTG9hZGVyCiAgICAgICAqLwogICAgICBzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7CiAgICAgICAgaWYgKCFfRGVlc1NlcnZpY2VMaWJMb2FkZXIuaW5zdGFuY2UpIHsKICAgICAgICAgIF9EZWVzU2VydmljZUxpYkxvYWRlci5pbnN0YW5jZSA9IG5ldyBfRGVlc1NlcnZpY2VMaWJMb2FkZXIoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9EZWVzU2VydmljZUxpYkxvYWRlci5pbnN0YW5jZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTG9hZCB4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciBmcm9tIENETgogICAgICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB4dGVybSBtb2R1bGUgd2l0aCBUZXJtaW5hbCBjbGFzcwogICAgICAgKi8KICAgICAgYXN5bmMgbG9hZFh0ZXJtKCkgewogICAgICAgIGlmICh0aGlzLnh0ZXJtTGliKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy54dGVybUxpYjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMueHRlcm1Mb2FkaW5nUHJvbWlzZSkgewogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1Mb2FkaW5nUHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgdGhpcy54dGVybUxvYWRpbmdQcm9taXNlID0gKGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHVybCA9IGAke0NETl9CQVNFfS94dGVybUAke0NETl9WRVJTSU9OUy54dGVybX0vK2VzbWA7CiAgICAgICAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoCiAgICAgICAgICAgIC8qIEB2aXRlLWlnbm9yZSAqLwogICAgICAgICAgICB1cmwKICAgICAgICAgICk7CiAgICAgICAgICBhd2FpdCB0aGlzLmluamVjdFh0ZXJtU3R5bGVzKCk7CiAgICAgICAgICB0aGlzLnh0ZXJtTGliID0gewogICAgICAgICAgICBUZXJtaW5hbDogbW9kdWxlLlRlcm1pbmFsCiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1MaWI7CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gdGhpcy54dGVybUxvYWRpbmdQcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBMb2FkIHh0ZXJtLWFkZG9uLWZpdCBmcm9tIENETgogICAgICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBGaXRBZGRvbiBjbGFzcwogICAgICAgKi8KICAgICAgYXN5bmMgbG9hZFh0ZXJtRml0QWRkb24oKSB7CiAgICAgICAgaWYgKHRoaXMueHRlcm1GaXRBZGRvbkxpYikgewogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1GaXRBZGRvbkxpYjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMueHRlcm1GaXRBZGRvbkxvYWRpbmdQcm9taXNlKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy54dGVybUZpdEFkZG9uTG9hZGluZ1Byb21pc2U7CiAgICAgICAgfQogICAgICAgIHRoaXMueHRlcm1GaXRBZGRvbkxvYWRpbmdQcm9taXNlID0gKGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHVybCA9IGAke0NETl9CQVNFfS94dGVybS1hZGRvbi1maXRAJHtDRE5fVkVSU0lPTlMueHRlcm1BZGRvbkZpdH0vK2VzbWA7CiAgICAgICAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoCiAgICAgICAgICAgIC8qIEB2aXRlLWlnbm9yZSAqLwogICAgICAgICAgICB1cmwKICAgICAgICAgICk7CiAgICAgICAgICB0aGlzLnh0ZXJtRml0QWRkb25MaWIgPSB7CiAgICAgICAgICAgIEZpdEFkZG9uOiBtb2R1bGUuRml0QWRkb24KICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gdGhpcy54dGVybUZpdEFkZG9uTGliOwogICAgICAgIH0pKCk7CiAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1GaXRBZGRvbkxvYWRpbmdQcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBMb2FkIHh0ZXJtLWFkZG9uLXNlYXJjaCBmcm9tIENETgogICAgICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBTZWFyY2hBZGRvbiBjbGFzcwogICAgICAgKi8KICAgICAgYXN5bmMgbG9hZFh0ZXJtU2VhcmNoQWRkb24oKSB7CiAgICAgICAgaWYgKHRoaXMueHRlcm1TZWFyY2hBZGRvbkxpYikgewogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1TZWFyY2hBZGRvbkxpYjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMueHRlcm1TZWFyY2hBZGRvbkxvYWRpbmdQcm9taXNlKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy54dGVybVNlYXJjaEFkZG9uTG9hZGluZ1Byb21pc2U7CiAgICAgICAgfQogICAgICAgIHRoaXMueHRlcm1TZWFyY2hBZGRvbkxvYWRpbmdQcm9taXNlID0gKGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHVybCA9IGAke0NETl9CQVNFfS94dGVybS1hZGRvbi1zZWFyY2hAJHtDRE5fVkVSU0lPTlMueHRlcm1BZGRvblNlYXJjaH0vK2VzbWA7CiAgICAgICAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoCiAgICAgICAgICAgIC8qIEB2aXRlLWlnbm9yZSAqLwogICAgICAgICAgICB1cmwKICAgICAgICAgICk7CiAgICAgICAgICB0aGlzLnh0ZXJtU2VhcmNoQWRkb25MaWIgPSB7CiAgICAgICAgICAgIFNlYXJjaEFkZG9uOiBtb2R1bGUuU2VhcmNoQWRkb24KICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gdGhpcy54dGVybVNlYXJjaEFkZG9uTGliOwogICAgICAgIH0pKCk7CiAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1TZWFyY2hBZGRvbkxvYWRpbmdQcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJbmplY3QgeHRlcm0gQ1NTIHN0eWxlcyBpbnRvIHRoZSBkb2N1bWVudCBoZWFkCiAgICAgICAqLwogICAgICBhc3luYyBpbmplY3RYdGVybVN0eWxlcygpIHsKICAgICAgICBjb25zdCBzdHlsZUlkID0gInh0ZXJtLWNkbi1zdHlsZXMiOwogICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzdHlsZUlkKSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCBjc3NVcmwgPSBgJHtDRE5fQkFTRX0veHRlcm1AJHtDRE5fVkVSU0lPTlMueHRlcm19L2Nzcy94dGVybS5jc3NgOwogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goY3NzVXJsKTsKICAgICAgICBjb25zdCBjc3NUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgICAgICBzdHlsZS5pZCA9IHN0eWxlSWQ7CiAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBjc3NUZXh0OwogICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBMb2FkIGhpZ2hsaWdodC5qcyBzeW50YXggaGlnaGxpZ2h0ZXIgZnJvbSBDRE4KICAgICAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gaGlnaGxpZ2h0LmpzIEFQSQogICAgICAgKi8KICAgICAgYXN5bmMgbG9hZEhpZ2hsaWdodEpzKCkgewogICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodEpzTGliKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRKc0xpYjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0SnNMb2FkaW5nUHJvbWlzZSkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SnNMb2FkaW5nUHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgdGhpcy5oaWdobGlnaHRKc0xvYWRpbmdQcm9taXNlID0gKGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHVybCA9IGAke0NETl9CQVNFfS9oaWdobGlnaHQuanNAJHtDRE5fVkVSU0lPTlMuaGlnaGxpZ2h0SnN9Lytlc21gOwogICAgICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KAogICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgdXJsCiAgICAgICAgICApOwogICAgICAgICAgdGhpcy5oaWdobGlnaHRKc0xpYiA9IG1vZHVsZS5kZWZhdWx0OwogICAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SnNMaWI7CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRKc0xvYWRpbmdQcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBMb2FkIEFwZXhDaGFydHMgY2hhcnRpbmcgbGlicmFyeSBmcm9tIENETgogICAgICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBBcGV4Q2hhcnRzIGNvbnN0cnVjdG9yCiAgICAgICAqLwogICAgICBhc3luYyBsb2FkQXBleENoYXJ0cygpIHsKICAgICAgICBpZiAodGhpcy5hcGV4Q2hhcnRzTGliKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5hcGV4Q2hhcnRzTGliOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5hcGV4Q2hhcnRzTG9hZGluZ1Byb21pc2UpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmFwZXhDaGFydHNMb2FkaW5nUHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgdGhpcy5hcGV4Q2hhcnRzTG9hZGluZ1Byb21pc2UgPSAoYXN5bmMgKCkgPT4gewogICAgICAgICAgY29uc3QgdXJsID0gYCR7Q0ROX0JBU0V9L2FwZXhjaGFydHNAJHtDRE5fVkVSU0lPTlMuYXBleGNoYXJ0c30vK2VzbWA7CiAgICAgICAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoCiAgICAgICAgICAgIC8qIEB2aXRlLWlnbm9yZSAqLwogICAgICAgICAgICB1cmwKICAgICAgICAgICk7CiAgICAgICAgICB0aGlzLmFwZXhDaGFydHNMaWIgPSBtb2R1bGUuZGVmYXVsdDsKICAgICAgICAgIHJldHVybiB0aGlzLmFwZXhDaGFydHNMaWI7CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gdGhpcy5hcGV4Q2hhcnRzTG9hZGluZ1Byb21pc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIExvYWQgVGlwdGFwIHJpY2ggdGV4dCBlZGl0b3IgYW5kIGV4dGVuc2lvbnMgZnJvbSBDRE4KICAgICAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gVGlwdGFwIGJ1bmRsZSB3aXRoIEVkaXRvciBhbmQgZXh0ZW5zaW9ucwogICAgICAgKi8KICAgICAgYXN5bmMgbG9hZFRpcHRhcCgpIHsKICAgICAgICBpZiAodGhpcy50aXB0YXBMaWIpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnRpcHRhcExpYjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMudGlwdGFwTG9hZGluZ1Byb21pc2UpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnRpcHRhcExvYWRpbmdQcm9taXNlOwogICAgICAgIH0KICAgICAgICB0aGlzLnRpcHRhcExvYWRpbmdQcm9taXNlID0gKGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHZlcnNpb24yID0gQ0ROX1ZFUlNJT05TLnRpcHRhcDsKICAgICAgICAgIGNvbnN0IFtjb3JlTW9kdWxlLCBzdGFydGVyS2l0TW9kdWxlLCB1bmRlcmxpbmVNb2R1bGUsIHRleHRBbGlnbk1vZHVsZSwgbGlua01vZHVsZSwgdHlwb2dyYXBoeU1vZHVsZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgICAgIGltcG9ydCgKICAgICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgICBgJHtDRE5fQkFTRX0vQHRpcHRhcC9jb3JlQCR7dmVyc2lvbjJ9Lytlc21gCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGltcG9ydCgKICAgICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgICBgJHtDRE5fQkFTRX0vQHRpcHRhcC9zdGFydGVyLWtpdEAke3ZlcnNpb24yfS8rZXNtYAogICAgICAgICAgICApLAogICAgICAgICAgICBpbXBvcnQoCiAgICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgICAgYCR7Q0ROX0JBU0V9L0B0aXB0YXAvZXh0ZW5zaW9uLXVuZGVybGluZUAke3ZlcnNpb24yfS8rZXNtYAogICAgICAgICAgICApLAogICAgICAgICAgICBpbXBvcnQoCiAgICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgICAgYCR7Q0ROX0JBU0V9L0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQtYWxpZ25AJHt2ZXJzaW9uMn0vK2VzbWAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgaW1wb3J0KAogICAgICAgICAgICAgIC8qIEB2aXRlLWlnbm9yZSAqLwogICAgICAgICAgICAgIGAke0NETl9CQVNFfS9AdGlwdGFwL2V4dGVuc2lvbi1saW5rQCR7dmVyc2lvbjJ9Lytlc21gCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGltcG9ydCgKICAgICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgICBgJHtDRE5fQkFTRX0vQHRpcHRhcC9leHRlbnNpb24tdHlwb2dyYXBoeUAke3ZlcnNpb24yfS8rZXNtYAogICAgICAgICAgICApCiAgICAgICAgICBdKTsKICAgICAgICAgIHRoaXMudGlwdGFwTGliID0gewogICAgICAgICAgICBFZGl0b3I6IGNvcmVNb2R1bGUuRWRpdG9yLAogICAgICAgICAgICBTdGFydGVyS2l0OiBzdGFydGVyS2l0TW9kdWxlLmRlZmF1bHQgfHwgc3RhcnRlcktpdE1vZHVsZS5TdGFydGVyS2l0LAogICAgICAgICAgICBVbmRlcmxpbmU6IHVuZGVybGluZU1vZHVsZS5kZWZhdWx0IHx8IHVuZGVybGluZU1vZHVsZS5VbmRlcmxpbmUsCiAgICAgICAgICAgIFRleHRBbGlnbjogdGV4dEFsaWduTW9kdWxlLmRlZmF1bHQgfHwgdGV4dEFsaWduTW9kdWxlLlRleHRBbGlnbiwKICAgICAgICAgICAgTGluazogbGlua01vZHVsZS5kZWZhdWx0IHx8IGxpbmtNb2R1bGUuTGluaywKICAgICAgICAgICAgVHlwb2dyYXBoeTogdHlwb2dyYXBoeU1vZHVsZS5kZWZhdWx0IHx8IHR5cG9ncmFwaHlNb2R1bGUuVHlwb2dyYXBoeQogICAgICAgICAgfTsKICAgICAgICAgIHJldHVybiB0aGlzLnRpcHRhcExpYjsKICAgICAgICB9KSgpOwogICAgICAgIHJldHVybiB0aGlzLnRpcHRhcExvYWRpbmdQcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBQcmVsb2FkIG11bHRpcGxlIGxpYnJhcmllcyBpbiBwYXJhbGxlbAogICAgICAgKiBVc2VmdWwgZm9yIHdhcm1pbmcgdGhlIGNhY2hlIGJlZm9yZSBjb21wb25lbnRzIGFyZSByZW5kZXJlZAogICAgICAgKi8KICAgICAgYXN5bmMgcHJlbG9hZEFsbCgpIHsKICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgICB0aGlzLmxvYWRYdGVybSgpLAogICAgICAgICAgdGhpcy5sb2FkWHRlcm1GaXRBZGRvbigpLAogICAgICAgICAgdGhpcy5sb2FkWHRlcm1TZWFyY2hBZGRvbigpLAogICAgICAgICAgdGhpcy5sb2FkSGlnaGxpZ2h0SnMoKSwKICAgICAgICAgIHRoaXMubG9hZEFwZXhDaGFydHMoKSwKICAgICAgICAgIHRoaXMubG9hZFRpcHRhcCgpCiAgICAgICAgXSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENoZWNrIGlmIGEgc3BlY2lmaWMgbGlicmFyeSBpcyBhbHJlYWR5IGxvYWRlZAogICAgICAgKi8KICAgICAgaXNMb2FkZWQobGlicmFyeTIpIHsKICAgICAgICBzd2l0Y2ggKGxpYnJhcnkyKSB7CiAgICAgICAgICBjYXNlICJ4dGVybSI6CiAgICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtTGliICE9PSBudWxsOwogICAgICAgICAgY2FzZSAieHRlcm1GaXRBZGRvbiI6CiAgICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtRml0QWRkb25MaWIgIT09IG51bGw7CiAgICAgICAgICBjYXNlICJ4dGVybVNlYXJjaEFkZG9uIjoKICAgICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1TZWFyY2hBZGRvbkxpYiAhPT0gbnVsbDsKICAgICAgICAgIGNhc2UgImhpZ2hsaWdodEpzIjoKICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SnNMaWIgIT09IG51bGw7CiAgICAgICAgICBjYXNlICJhcGV4Q2hhcnRzIjoKICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBleENoYXJ0c0xpYiAhPT0gbnVsbDsKICAgICAgICAgIGNhc2UgInRpcHRhcCI6CiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpcHRhcExpYiAhPT0gbnVsbDsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvc2VydmljZXMvaW5kZXguanMKdmFyIGluaXRfc2VydmljZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvc2VydmljZXMvaW5kZXguanMiKCkgewogICAgaW5pdF9EZWVzU2VydmljZUxpYkxvYWRlcigpOwogICAgaW5pdF92ZXJzaW9ucygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcnVudGltZS9pbnRlcmZhY2VzL0lFeGVjdXRpb25FbnZpcm9ubWVudC5qcwp2YXIgaW5pdF9JRXhlY3V0aW9uRW52aXJvbm1lbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2ludGVyZmFjZXMvSUV4ZWN1dGlvbkVudmlyb25tZW50LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvaW50ZXJmYWNlcy9pbmRleC5qcwp2YXIgaW5pdF9pbnRlcmZhY2VzMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvaW50ZXJmYWNlcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X0lFeGVjdXRpb25FbnZpcm9ubWVudCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvY29uc3RhbnRzLmpzCnZhciBERUZBVUxUX0VESVRPUl9PUklHSU4sIFNFQVJDSF9QQVJBTV9BVVRIX0NPREUsIFNFQVJDSF9QQVJBTV9FUlJPUiwgU0VBUkNIX1BBUkFNX0VSUk9SX0RFU0NSSVBUSU9OLCBCUk9BRENBU1RfQ0hBTk5FTF9OQU1FLCBTVE9SQUdFX1RPS0VOU19OQU1FLCBTVE9SQUdFX0NPREVfVkVSSUZJRVJfTkFNRSwgU1RPUkFHRV9QT1BVUF9OQU1FOwp2YXIgaW5pdF9jb25zdGFudHMzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvY29uc3RhbnRzLmpzIigpIHsKICAgIERFRkFVTFRfRURJVE9SX09SSUdJTiA9ICJodHRwczovL3N0YWNrYmxpdHouY29tIjsKICAgIFNFQVJDSF9QQVJBTV9BVVRIX0NPREUgPSAiY29kZSI7CiAgICBTRUFSQ0hfUEFSQU1fRVJST1IgPSAiZXJyb3IiOwogICAgU0VBUkNIX1BBUkFNX0VSUk9SX0RFU0NSSVBUSU9OID0gImVycm9yX2Rlc2NyaXB0aW9uIjsKICAgIEJST0FEQ0FTVF9DSEFOTkVMX05BTUUgPSAiX193Y19hcGlfYmNfXyI7CiAgICBTVE9SQUdFX1RPS0VOU19OQU1FID0gIl9fd2NfYXBpX3Rva2Vuc19fIjsKICAgIFNUT1JBR0VfQ09ERV9WRVJJRklFUl9OQU1FID0gIl9fd2NfYXBpX3ZlcmlmaWVyX18iOwogICAgU1RPUkFHRV9QT1BVUF9OQU1FID0gIl9fd2NfYXBpX3BvcHVwX18iOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvVHlwZWRFdmVudFRhcmdldC5qcwp2YXIgVHlwZWRFdmVudFRhcmdldDsKdmFyIGluaXRfVHlwZWRFdmVudFRhcmdldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL1R5cGVkRXZlbnRUYXJnZXQuanMiKCkgewogICAgVHlwZWRFdmVudFRhcmdldCA9IGNsYXNzIHsKICAgICAgX2J1cyA9IG5ldyBFdmVudFRhcmdldCgpOwogICAgICBsaXN0ZW4obGlzdGVuZXIyKSB7CiAgICAgICAgZnVuY3Rpb24gd3JhcHBlZExpc3RlbmVyKGV2ZW50KSB7CiAgICAgICAgICBsaXN0ZW5lcjIoZXZlbnQuZGF0YSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2J1cy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgd3JhcHBlZExpc3RlbmVyKTsKICAgICAgICByZXR1cm4gKCkgPT4gdGhpcy5fYnVzLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCB3cmFwcGVkTGlzdGVuZXIpOwogICAgICB9CiAgICAgIGZpcmVFdmVudChkYXRhKSB7CiAgICAgICAgdGhpcy5fYnVzLmRpc3BhdGNoRXZlbnQobmV3IE1lc3NhZ2VFdmVudCgibWVzc2FnZSIsIHsgZGF0YSB9KSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC90b2tlbnMuanMKZnVuY3Rpb24gY2xlYXJUb2tlbnNJblN0b3JhZ2UoKSB7CiAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oU1RPUkFHRV9UT0tFTlNfTkFNRSk7Cn0KZnVuY3Rpb24gYWRkQWNjZXNzVG9rZW5DaGFuZ2VkTGlzdGVuZXIobGlzdGVuZXIyKSB7CiAgcmV0dXJuIGFjY2Vzc1Rva2VuQ2hhbmdlZExpc3RlbmVycy5saXN0ZW4obGlzdGVuZXIyKTsKfQpmdW5jdGlvbiByZWFkVG9rZW5zRnJvbVN0b3JhZ2UoKSB7CiAgY29uc3Qgc2VyaWFsaXplZFRva2VucyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfVE9LRU5TX05BTUUpOwogIGlmICghc2VyaWFsaXplZFRva2VucykgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHRyeSB7CiAgICByZXR1cm4gSlNPTi5wYXJzZShzZXJpYWxpemVkVG9rZW5zKTsKICB9IGNhdGNoIHsKICAgIHJldHVybiBudWxsOwogIH0KfQpmdW5jdGlvbiBwZXJzaXN0VG9rZW5zSW5TdG9yYWdlKHRva2VucykgewogIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfVE9LRU5TX05BTUUsIEpTT04uc3RyaW5naWZ5KHRva2VucykpOwp9CmZ1bmN0aW9uIGdldEV4cGlyZXNGcm9tVG9rZW5SZXNwb25zZSh7IGNyZWF0ZWRfYXQsIGV4cGlyZXNfaW4gfSkgewogIHJldHVybiAoY3JlYXRlZF9hdCArIGV4cGlyZXNfaW4pICogMWUzOwp9CmZ1bmN0aW9uIGFzc2VydFRva2VuUmVzcG9uc2UodG9rZW4pIHsKICBpZiAodHlwZW9mIHRva2VuICE9PSAib2JqZWN0IiB8fCAhdG9rZW4pIHsKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBUb2tlbiBSZXNwb25zZSIpOwogIH0KICBpZiAodHlwZW9mIHRva2VuLmFjY2Vzc190b2tlbiAhPT0gInN0cmluZyIgfHwgdHlwZW9mIHRva2VuLnJlZnJlc2hfdG9rZW4gIT09ICJzdHJpbmciIHx8IHR5cGVvZiB0b2tlbi5jcmVhdGVkX2F0ICE9PSAibnVtYmVyIiB8fCB0eXBlb2YgdG9rZW4uZXhwaXJlc19pbiAhPT0gIm51bWJlciIpIHsKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBUb2tlbiBSZXNwb25zZSIpOwogIH0KfQpmdW5jdGlvbiB3YWl0KG1zKSB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gc2V0VGltZW91dChyZXNvbHZlMiwgbXMpKTsKfQpmdW5jdGlvbiBmaXJlQWNjZXNzVG9rZW5DaGFuZ2VkKGFjY2Vzc1Rva2VuKSB7CiAgYWNjZXNzVG9rZW5DaGFuZ2VkTGlzdGVuZXJzLmZpcmVFdmVudChhY2Nlc3NUb2tlbik7Cn0KdmFyIElHTk9SRURfRVJST1IsIGFjY2Vzc1Rva2VuQ2hhbmdlZExpc3RlbmVycywgVG9rZW5zOwp2YXIgaW5pdF90b2tlbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC90b2tlbnMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMzKCk7CiAgICBpbml0X1R5cGVkRXZlbnRUYXJnZXQoKTsKICAgIElHTk9SRURfRVJST1IgPSBuZXcgRXJyb3IoKTsKICAgIElHTk9SRURfRVJST1Iuc3RhY2sgPSAiIjsKICAgIGFjY2Vzc1Rva2VuQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBUeXBlZEV2ZW50VGFyZ2V0KCk7CiAgICBUb2tlbnMgPSBjbGFzcyBfVG9rZW5zIHsKICAgICAgb3JpZ2luOwogICAgICByZWZyZXNoOwogICAgICBhY2Nlc3M7CiAgICAgIGV4cGlyZXM7CiAgICAgIF9yZXZva2VkID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIHJlZnJlc2gsIGFjY2VzcywgZXhwaXJlcykgewogICAgICAgIHRoaXMub3JpZ2luID0gb3JpZ2luOwogICAgICAgIHRoaXMucmVmcmVzaCA9IHJlZnJlc2g7CiAgICAgICAgdGhpcy5hY2Nlc3MgPSBhY2Nlc3M7CiAgICAgICAgdGhpcy5leHBpcmVzID0gZXhwaXJlczsKICAgICAgfQogICAgICBhc3luYyBhY3RpdmF0ZShvbkZhaWxlZFJlZnJlc2gpIHsKICAgICAgICBpZiAodGhpcy5fcmV2b2tlZC5zaWduYWwuYWJvcnRlZCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUb2tlbiByZXZva2VkIik7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmV4cGlyZXMgPCBEYXRlLm5vdygpKSB7CiAgICAgICAgICBpZiAoIWF3YWl0IHRoaXMuX2ZldGNoTmV3QWNjZXNzVG9rZW4oKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuX3N5bmMoKTsKICAgICAgICB0aGlzLl9zdGFydFJlZnJlc2hUb2tlbnNMb29wKG9uRmFpbGVkUmVmcmVzaCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgYXN5bmMgcmV2b2tlKGNsaWVudElkLCBpZ25vcmVSZXZva2VFcnJvcikgewogICAgICAgIHRoaXMuX3Jldm9rZWQuYWJvcnQoKTsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHt0aGlzLm9yaWdpbn0vb2F1dGgvcmV2b2tlYCwgewogICAgICAgICAgICBtZXRob2Q6ICJQT1NUIiwKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIgogICAgICAgICAgICB9LAogICAgICAgICAgICBib2R5OiBuZXcgVVJMU2VhcmNoUGFyYW1zKHsgdG9rZW46IHRoaXMucmVmcmVzaCwgdG9rZW5fdHlwZV9oaW50OiAicmVmcmVzaF90b2tlbiIsIGNsaWVudF9pZDogY2xpZW50SWQgfSksCiAgICAgICAgICAgIG1vZGU6ICJjb3JzIgogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvZ291dGApOwogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICBpZiAoIWlnbm9yZVJldm9rZUVycm9yKSB7CiAgICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjbGVhclRva2Vuc0luU3RvcmFnZSgpOwogICAgICB9CiAgICAgIHN0YXRpYyBmcm9tU3RvcmFnZSgpIHsKICAgICAgICBjb25zdCBzYXZlZFRva2VucyA9IHJlYWRUb2tlbnNGcm9tU3RvcmFnZSgpOwogICAgICAgIGlmICghc2F2ZWRUb2tlbnMpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IF9Ub2tlbnMoc2F2ZWRUb2tlbnMub3JpZ2luLCBzYXZlZFRva2Vucy5yZWZyZXNoLCBzYXZlZFRva2Vucy5hY2Nlc3MsIHNhdmVkVG9rZW5zLmV4cGlyZXMpOwogICAgICB9CiAgICAgIHN0YXRpYyBhc3luYyBmcm9tQXV0aENvZGUoeyBlZGl0b3JPcmlnaW46IGVkaXRvck9yaWdpbjIsIGNsaWVudElkLCBjb2RlVmVyaWZpZXIsIGF1dGhDb2RlLCByZWRpcmVjdFVyaSB9KSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtlZGl0b3JPcmlnaW4yfS9vYXV0aC90b2tlbmAsIHsKICAgICAgICAgIG1ldGhvZDogIlBPU1QiLAogICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIKICAgICAgICAgIH0sCiAgICAgICAgICBib2R5OiBuZXcgVVJMU2VhcmNoUGFyYW1zKHsKICAgICAgICAgICAgY2xpZW50X2lkOiBjbGllbnRJZCwKICAgICAgICAgICAgY29kZTogYXV0aENvZGUsCiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IGNvZGVWZXJpZmllciwKICAgICAgICAgICAgZ3JhbnRfdHlwZTogImF1dGhvcml6YXRpb25fY29kZSIsCiAgICAgICAgICAgIHJlZGlyZWN0X3VyaTogcmVkaXJlY3RVcmkKICAgICAgICAgIH0pLAogICAgICAgICAgbW9kZTogImNvcnMiCiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggdG9rZW46ICR7cmVzcG9uc2Uuc3RhdHVzfWApOwogICAgICAgIH0KICAgICAgICBjb25zdCB0b2tlblJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpOwogICAgICAgIGFzc2VydFRva2VuUmVzcG9uc2UodG9rZW5SZXNwb25zZSk7CiAgICAgICAgY29uc3QgeyBhY2Nlc3NfdG9rZW46IGFjY2VzcywgcmVmcmVzaF90b2tlbjogcmVmcmVzaCB9ID0gdG9rZW5SZXNwb25zZTsKICAgICAgICBjb25zdCBleHBpcmVzID0gZ2V0RXhwaXJlc0Zyb21Ub2tlblJlc3BvbnNlKHRva2VuUmVzcG9uc2UpOwogICAgICAgIHJldHVybiBuZXcgX1Rva2VucyhlZGl0b3JPcmlnaW4yLCByZWZyZXNoLCBhY2Nlc3MsIGV4cGlyZXMpOwogICAgICB9CiAgICAgIGFzeW5jIF9mZXRjaE5ld0FjY2Vzc1Rva2VuKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3RoaXMub3JpZ2lufS9vYXV0aC90b2tlbmAsIHsKICAgICAgICAgICAgbWV0aG9kOiAiUE9TVCIsCiAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYm9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyh7CiAgICAgICAgICAgICAgZ3JhbnRfdHlwZTogInJlZnJlc2hfdG9rZW4iLAogICAgICAgICAgICAgIHJlZnJlc2hfdG9rZW46IHRoaXMucmVmcmVzaAogICAgICAgICAgICB9KSwKICAgICAgICAgICAgbW9kZTogImNvcnMiLAogICAgICAgICAgICBzaWduYWw6IHRoaXMuX3Jldm9rZWQuc2lnbmFsCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICAgICAgdGhyb3cgSUdOT1JFRF9FUlJPUjsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHRva2VuUmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7CiAgICAgICAgICBhc3NlcnRUb2tlblJlc3BvbnNlKHRva2VuUmVzcG9uc2UpOwogICAgICAgICAgY29uc3QgeyBhY2Nlc3NfdG9rZW46IGFjY2VzcywgcmVmcmVzaF90b2tlbjogcmVmcmVzaCB9ID0gdG9rZW5SZXNwb25zZTsKICAgICAgICAgIGNvbnN0IGV4cGlyZXMgPSBnZXRFeHBpcmVzRnJvbVRva2VuUmVzcG9uc2UodG9rZW5SZXNwb25zZSk7CiAgICAgICAgICB0aGlzLmFjY2VzcyA9IGFjY2VzczsKICAgICAgICAgIHRoaXMuZXhwaXJlcyA9IGV4cGlyZXM7CiAgICAgICAgICB0aGlzLnJlZnJlc2ggPSByZWZyZXNoOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICBjbGVhclRva2Vuc0luU3RvcmFnZSgpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBfc3luYygpIHsKICAgICAgICBwZXJzaXN0VG9rZW5zSW5TdG9yYWdlKHRoaXMpOwogICAgICAgIGZpcmVBY2Nlc3NUb2tlbkNoYW5nZWQodGhpcy5hY2Nlc3MpOwogICAgICB9CiAgICAgIGFzeW5jIF9zdGFydFJlZnJlc2hUb2tlbnNMb29wKG9uRmFpbGVkUmVmcmVzaCkgewogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICBjb25zdCBleHBpcmVzSW4gPSB0aGlzLmV4cGlyZXMgLSBEYXRlLm5vdygpIC0gMWUzOwogICAgICAgICAgYXdhaXQgd2FpdChNYXRoLm1heChleHBpcmVzSW4sIDFlMykpOwogICAgICAgICAgaWYgKHRoaXMuX3Jldm9rZWQuc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCF0aGlzLl9mZXRjaE5ld0FjY2Vzc1Rva2VuKCkpIHsKICAgICAgICAgICAgb25GYWlsZWRSZWZyZXNoKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuX3N5bmMoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9pZnJhbWUtdXJsLmpzCnZhciBwYXJhbXMsIGVkaXRvck9yaWdpbiwgaWZyYW1lU2V0dGluZ3M7CnZhciBpbml0X2lmcmFtZV91cmwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9pZnJhbWUtdXJsLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMygpOwogICAgcGFyYW1zID0ge307CiAgICBlZGl0b3JPcmlnaW4gPSBudWxsOwogICAgaWZyYW1lU2V0dGluZ3MgPSB7CiAgICAgIGdldCBlZGl0b3JPcmlnaW4oKSB7CiAgICAgICAgaWYgKGVkaXRvck9yaWdpbiA9PSBudWxsKSB7CiAgICAgICAgICBlZGl0b3JPcmlnaW4gPSBuZXcgVVJMKGdsb2JhbFRoaXMuV0VCQ09OVEFJTkVSX0FQSV9JRlJBTUVfVVJMID8/IERFRkFVTFRfRURJVE9SX09SSUdJTikub3JpZ2luOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZWRpdG9yT3JpZ2luOwogICAgICB9LAogICAgICBzZXQgZWRpdG9yT3JpZ2luKG5ld09yaWdpbikgewogICAgICAgIGVkaXRvck9yaWdpbiA9IG5ldyBVUkwobmV3T3JpZ2luKS5vcmlnaW47CiAgICAgIH0sCiAgICAgIHNldFF1ZXJ5UGFyYW0oa2V5MiwgdmFsdWUyKSB7CiAgICAgICAgcGFyYW1zW2tleTJdID0gdmFsdWUyOwogICAgICB9LAogICAgICBnZXQgdXJsKCkgewogICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodGhpcy5lZGl0b3JPcmlnaW4pOwogICAgICAgIHVybC5wYXRobmFtZSA9ICIvaGVhZGxlc3MiOwogICAgICAgIGZvciAoY29uc3QgcGFyYW0gaW4gcGFyYW1zKSB7CiAgICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldChwYXJhbSwgcGFyYW1zW3BhcmFtXSk7CiAgICAgICAgfQogICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCJ2ZXJzaW9uIiwgIjEuNi4xIik7CiAgICAgICAgcmV0dXJuIHVybDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL2NvZGUuanMKYXN5bmMgZnVuY3Rpb24gUzI1NihpbnB1dCkgewogIGNvbnN0IGFzY2lpID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGlucHV0KTsKICBjb25zdCBzaGEyNTYgPSBuZXcgVWludDhBcnJheShhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgiU0hBLTI1NiIsIGFzY2lpKSk7CiAgcmV0dXJuIGJ0b2Eoc2hhMjU2LnJlZHVjZSgoYmluYXJ5LCBieXRlKSA9PiBiaW5hcnkgKyBTdHJpbmcuZnJvbUNvZGVQb2ludChieXRlKSwgIiIpKS5yZXBsYWNlKC9cKy9nLCAiLSIpLnJlcGxhY2UoL1wvL2csICJfIikucmVwbGFjZSgvPSskLywgIiIpOwp9CmZ1bmN0aW9uIG5ld0NvZGVWZXJpZmllcigpIHsKICBjb25zdCByYW5kb20gPSBuZXcgVWludDhBcnJheSg5Nik7CiAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhyYW5kb20pOwogIGxldCBjb2RlVmVyaWZpZXIgPSAiIjsKICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCAzMjsgKytpMTEpIHsKICAgIGNvZGVWZXJpZmllciArPSBuZXh0Rm91ckNoYXJzKHJhbmRvbVszICogaTExICsgMF0sIHJhbmRvbVszICogaTExICsgMV0sIHJhbmRvbVszICogaTExICsgMl0pOwogIH0KICByZXR1cm4gY29kZVZlcmlmaWVyOwp9CmZ1bmN0aW9uIG5leHRGb3VyQ2hhcnMoYnl0ZTEsIGJ5dGUyLCBieXRlMykgewogIGNvbnN0IGNoYXIxID0gYnl0ZTEgPj4gMjsKICBjb25zdCBjaGFyMiA9IChieXRlMSAmIDMpIDw8IDQgfCBieXRlMiA+PiA0OwogIGNvbnN0IGNoYXIzID0gYnl0ZTIgJiAxNSB8IChieXRlMyAmIDE5MikgPj4gMjsKICBjb25zdCBjaGFyNCA9IGJ5dGUzICYgNjM7CiAgcmV0dXJuIFtjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNF0ubWFwKHVucmVzZXJ2ZWRDaGFyYWN0ZXJzKS5qb2luKCIiKTsKfQpmdW5jdGlvbiB1bnJlc2VydmVkQ2hhcmFjdGVycyhjb2RlNCkgewogIGxldCBvZmZzZXQ7CiAgaWYgKGNvZGU0IDwgMjYpIHsKICAgIG9mZnNldCA9IGNvZGU0ICsgNjU7CiAgfSBlbHNlIGlmIChjb2RlNCA8IDUyKSB7CiAgICBvZmZzZXQgPSBjb2RlNCAtIDI2ICsgOTc7CiAgfSBlbHNlIGlmIChjb2RlNCA8IDYyKSB7CiAgICBvZmZzZXQgPSBjb2RlNCAtIDUyICsgNDg7CiAgfSBlbHNlIHsKICAgIG9mZnNldCA9IGNvZGU0ID09PSA2MiA/IDMwIDogNDU7CiAgfQogIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG9mZnNldCk7Cn0KdmFyIGluaXRfY29kZTQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9jb2RlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL3Jlc2V0LXByb21pc2UuanMKZnVuY3Rpb24gcmVzZXR0YWJsZVByb21pc2UoKSB7CiAgbGV0IHJlc29sdmUyOwogIGxldCBwcm9taXNlOwogIGZ1bmN0aW9uIHJlc2V0KCkgewogICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChfcmVzb2x2ZSkgPT4gcmVzb2x2ZTIgPSBfcmVzb2x2ZSk7CiAgfQogIHJlc2V0KCk7CiAgcmV0dXJuIHsKICAgIGdldCBwcm9taXNlKCkgewogICAgICByZXR1cm4gcHJvbWlzZTsKICAgIH0sCiAgICByZXNvbHZlKHZhbHVlMikgewogICAgICByZXR1cm4gcmVzb2x2ZTIodmFsdWUyKTsKICAgIH0sCiAgICByZXNldAogIH07Cn0KdmFyIGluaXRfcmVzZXRfcHJvbWlzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL3Jlc2V0LXByb21pc2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvYXV0aC1zdGF0ZS5qcwpmdW5jdGlvbiBicm9hZGNhc3RNZXNzYWdlKG1lc3NhZ2UyKSB7CiAgaWYgKCFhdXRoU3RhdGUuYnJvYWRjYXN0Q2hhbm5lbCkgewogICAgcmV0dXJuOwogIH0KICBhdXRoU3RhdGUuYnJvYWRjYXN0Q2hhbm5lbC5wb3N0TWVzc2FnZShtZXNzYWdlMik7CiAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfUE9QVVBfTkFNRSkgPT09ICJ0cnVlIiAmJiBtZXNzYWdlMi50eXBlICE9PSAiYXV0aC1sb2dvdXQiKSB7CiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX1BPUFVQX05BTUUpOwogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHdpbmRvdy5jbG9zZSgpOwogICAgfSk7CiAgfQp9CmZ1bmN0aW9uIG9uRmFpbGVkVG9rZW5SZWZyZXNoKCkgewogIGxvZ2dlZE91dExpc3RlbmVycy5maXJlRXZlbnQoKTsKICBicm9hZGNhc3RNZXNzYWdlKHsgdHlwZTogImF1dGgtbG9nb3V0IiB9KTsKfQpmdW5jdGlvbiBkZWZhdWx0UmVkaXJlY3RVcmkoKSB7CiAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmOwp9CmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlT0F1dGhSZXF1ZXN0KCkgewogIGNvbnN0IGNvZGVWZXJpZmllciA9IG5ld0NvZGVWZXJpZmllcigpOwogIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfQ09ERV9WRVJJRklFUl9OQU1FLCBjb2RlVmVyaWZpZXIpOwogIGNvbnN0IGNvZGVDaGFsbGVuZ2UgPSBhd2FpdCBTMjU2KGNvZGVWZXJpZmllcik7CiAgY29uc3QgdXJsID0gbmV3IFVSTCgiL29hdXRoL2F1dGhvcml6ZSIsIGF1dGhTdGF0ZS5lZGl0b3JPcmlnaW4pOwogIGNvbnN0IHsgc2VhcmNoUGFyYW1zIH0gPSB1cmw7CiAgc2VhcmNoUGFyYW1zLmFwcGVuZCgicmVzcG9uc2VfdHlwZSIsICJjb2RlIik7CiAgc2VhcmNoUGFyYW1zLmFwcGVuZCgiY2xpZW50X2lkIiwgYXV0aFN0YXRlLmNsaWVudElkKTsKICBzZWFyY2hQYXJhbXMuYXBwZW5kKCJyZWRpcmVjdF91cmkiLCBkZWZhdWx0UmVkaXJlY3RVcmkoKSk7CiAgc2VhcmNoUGFyYW1zLmFwcGVuZCgic2NvcGUiLCBhdXRoU3RhdGUub2F1dGhTY29wZSk7CiAgc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2UiLCBjb2RlQ2hhbGxlbmdlKTsKICBzZWFyY2hQYXJhbXMuYXBwZW5kKCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiLCAiUzI1NiIpOwogIHJldHVybiB1cmwudG9TdHJpbmcoKTsKfQpmdW5jdGlvbiBhc3NlcnRBdXRoVG9rZW5zKHRva2VucykgewogIGlmICghdG9rZW5zKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIk9vcHMhIFRva2VucyBpcyBub3QgZGVmaW5lZCB3aGVuIGl0IGFsd2F5cyBzaG91bGQgYmUuIik7CiAgfQp9CnZhciBhdXRoU3RhdGUsIGF1dGhGYWlsZWRMaXN0ZW5lcnMsIGxvZ2dlZE91dExpc3RlbmVycywgYXV0aDsKdmFyIGluaXRfYXV0aF9zdGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL2F1dGgtc3RhdGUuanMiKCkgewogICAgaW5pdF90b2tlbnMoKTsKICAgIGluaXRfY29uc3RhbnRzMygpOwogICAgaW5pdF9pZnJhbWVfdXJsKCk7CiAgICBpbml0X2NvZGU0KCk7CiAgICBpbml0X3Jlc2V0X3Byb21pc2UoKTsKICAgIGluaXRfVHlwZWRFdmVudFRhcmdldCgpOwogICAgYXV0aFN0YXRlID0gewogICAgICBpbml0aWFsaXplZDogZmFsc2UsCiAgICAgIGJvb3RDYWxsZWQ6IGZhbHNlLAogICAgICBhdXRoQ29tcGxldGU6IHJlc2V0dGFibGVQcm9taXNlKCksCiAgICAgIGNsaWVudElkOiAiIiwKICAgICAgb2F1dGhTY29wZTogIiIsCiAgICAgIGJyb2FkY2FzdENoYW5uZWw6IG51bGwsCiAgICAgIGdldCBlZGl0b3JPcmlnaW4oKSB7CiAgICAgICAgcmV0dXJuIGlmcmFtZVNldHRpbmdzLmVkaXRvck9yaWdpbjsKICAgICAgfSwKICAgICAgdG9rZW5zOiBudWxsCiAgICB9OwogICAgYXV0aEZhaWxlZExpc3RlbmVycyA9IG5ldyBUeXBlZEV2ZW50VGFyZ2V0KCk7CiAgICBsb2dnZWRPdXRMaXN0ZW5lcnMgPSBuZXcgVHlwZWRFdmVudFRhcmdldCgpOwogICAgYXV0aCA9IHsKICAgICAgaW5pdCh7IGVkaXRvck9yaWdpbjogZWRpdG9yT3JpZ2luMiwgY2xpZW50SWQsIHNjb3BlIH0pIHsKICAgICAgICBpZiAoYXV0aFN0YXRlLmluaXRpYWxpemVkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkluaXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UiKTsKICAgICAgICB9CiAgICAgICAgbGV0IGVudGVycHJpc2UgPSB0cnVlOwogICAgICAgIGlmIChlbnRlcnByaXNlICYmIGF1dGhTdGF0ZS5ib290Q2FsbGVkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImBhdXRoLmluaXRgIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIGJlZm9yZSBgV2ViQ29udGFpbmVyLmJvb3RgIik7CiAgICAgICAgfQogICAgICAgIGF1dGhTdGF0ZS5pbml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgYXV0aFN0YXRlLnRva2VucyA9IFRva2Vucy5mcm9tU3RvcmFnZSgpOwogICAgICAgIGF1dGhTdGF0ZS5jbGllbnRJZCA9IGNsaWVudElkOwogICAgICAgIGF1dGhTdGF0ZS5vYXV0aFNjb3BlID0gc2NvcGU7CiAgICAgICAgYXV0aFN0YXRlLmJyb2FkY2FzdENoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbChCUk9BRENBU1RfQ0hBTk5FTF9OQU1FKTsKICAgICAgICBpZnJhbWVTZXR0aW5ncy5zZXRRdWVyeVBhcmFtKCJjbGllbnRfaWQiLCBjbGllbnRJZCk7CiAgICAgICAgaWYgKGVkaXRvck9yaWdpbjIpIHsKICAgICAgICAgIGlmcmFtZVNldHRpbmdzLmVkaXRvck9yaWdpbiA9IG5ldyBVUkwoZWRpdG9yT3JpZ2luMikub3JpZ2luOwogICAgICAgIH0KICAgICAgICBsb2dnZWRPdXRMaXN0ZW5lcnMubGlzdGVuKCgpID0+IGF1dGhTdGF0ZS5hdXRoQ29tcGxldGUucmVzZXQoKSk7CiAgICAgICAgYXV0aFN0YXRlLmJyb2FkY2FzdENoYW5uZWwuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG9uQ2hhbm5lbE1lc3NhZ2UpOwogICAgICAgIGFzeW5jIGZ1bmN0aW9uIG9uQ2hhbm5lbE1lc3NhZ2UoZXZlbnQpIHsKICAgICAgICAgIGNvbnN0IHR5cGVkRXZlbnQgPSBldmVudC5kYXRhOwogICAgICAgICAgaWYgKHR5cGVkRXZlbnQudHlwZSA9PT0gImF1dGgtY29tcGxldGUiKSB7CiAgICAgICAgICAgIGF1dGhTdGF0ZS50b2tlbnMgPSBUb2tlbnMuZnJvbVN0b3JhZ2UoKTsKICAgICAgICAgICAgYXdhaXQgYXV0aFN0YXRlLnRva2Vucy5hY3RpdmF0ZShvbkZhaWxlZFRva2VuUmVmcmVzaCk7CiAgICAgICAgICAgIGF1dGhTdGF0ZS5hdXRoQ29tcGxldGUucmVzb2x2ZSgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZWRFdmVudC50eXBlID09PSAiYXV0aC1mYWlsZWQiKSB7CiAgICAgICAgICAgIGF1dGhGYWlsZWRMaXN0ZW5lcnMuZmlyZUV2ZW50KHR5cGVkRXZlbnQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZWRFdmVudC50eXBlID09PSAiYXV0aC1sb2dvdXQiKSB7CiAgICAgICAgICAgIGxvZ2dlZE91dExpc3RlbmVycy5maXJlRXZlbnQoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoYXV0aFN0YXRlLnRva2VucykgewogICAgICAgICAgY29uc3QgdG9rZW5zID0gYXV0aFN0YXRlLnRva2VuczsKICAgICAgICAgIGlmICh0b2tlbnMub3JpZ2luID09PSBhdXRoU3RhdGUuZWRpdG9yT3JpZ2luKSB7CiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IHRva2Vucy5hY3RpdmF0ZShvbkZhaWxlZFRva2VuUmVmcmVzaCk7CiAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgICAgICAgICBpZiAoYXV0aFN0YXRlLnRva2VucyAhPT0gdG9rZW5zKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxvZ2dlZE91dExpc3RlbmVycy5maXJlRXZlbnQoKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYXV0aFN0YXRlLmF1dGhDb21wbGV0ZS5yZXNvbHZlKCk7CiAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogImF1dGhvcml6ZWQiIH07CiAgICAgICAgICB9CiAgICAgICAgICBjbGVhclRva2Vuc0luU3RvcmFnZSgpOwogICAgICAgICAgYXV0aFN0YXRlLnRva2VucyA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxvY2F0aW9uVVJMID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7CiAgICAgICAgY29uc3QgeyBzZWFyY2hQYXJhbXMgfSA9IGxvY2F0aW9uVVJMOwogICAgICAgIGNvbnN0IHVwZGF0ZVVSTCA9ICgpID0+IHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgZG9jdW1lbnQudGl0bGUsIGxvY2F0aW9uVVJMKTsKICAgICAgICBpZiAoc2VhcmNoUGFyYW1zLmhhcyhTRUFSQ0hfUEFSQU1fRVJST1IpKSB7CiAgICAgICAgICBjb25zdCBlcnJvciA9IHNlYXJjaFBhcmFtcy5nZXQoU0VBUkNIX1BBUkFNX0VSUk9SKTsKICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gc2VhcmNoUGFyYW1zLmdldChTRUFSQ0hfUEFSQU1fRVJST1JfREVTQ1JJUFRJT04pOwogICAgICAgICAgc2VhcmNoUGFyYW1zLmRlbGV0ZShTRUFSQ0hfUEFSQU1fRVJST1IpOwogICAgICAgICAgc2VhcmNoUGFyYW1zLmRlbGV0ZShTRUFSQ0hfUEFSQU1fRVJST1JfREVTQ1JJUFRJT04pOwogICAgICAgICAgdXBkYXRlVVJMKCk7CiAgICAgICAgICBicm9hZGNhc3RNZXNzYWdlKHsgdHlwZTogImF1dGgtZmFpbGVkIiwgZXJyb3IsIGRlc2NyaXB0aW9uIH0pOwogICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiAiYXV0aC1mYWlsZWQiLCBlcnJvciwgZGVzY3JpcHRpb24gfTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlYXJjaFBhcmFtcy5oYXMoU0VBUkNIX1BBUkFNX0FVVEhfQ09ERSkpIHsKICAgICAgICAgIGNvbnN0IGF1dGhDb2RlID0gc2VhcmNoUGFyYW1zLmdldChTRUFSQ0hfUEFSQU1fQVVUSF9DT0RFKTsKICAgICAgICAgIGNvbnN0IGVkaXRvck9yaWdpbjMgPSBhdXRoU3RhdGUuZWRpdG9yT3JpZ2luOwogICAgICAgICAgc2VhcmNoUGFyYW1zLmRlbGV0ZShTRUFSQ0hfUEFSQU1fQVVUSF9DT0RFKTsKICAgICAgICAgIHVwZGF0ZVVSTCgpOwogICAgICAgICAgY29uc3QgY29kZVZlcmlmaWVyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkFHRV9DT0RFX1ZFUklGSUVSX05BTUUpOwogICAgICAgICAgaWYgKCFjb2RlVmVyaWZpZXIpIHsKICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiAibmVlZC1hdXRoIiB9OwogICAgICAgICAgfQogICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oU1RPUkFHRV9DT0RFX1ZFUklGSUVSX05BTUUpOwogICAgICAgICAgVG9rZW5zLmZyb21BdXRoQ29kZSh7CiAgICAgICAgICAgIGVkaXRvck9yaWdpbjogZWRpdG9yT3JpZ2luMywKICAgICAgICAgICAgY2xpZW50SWQ6IGF1dGhTdGF0ZS5jbGllbnRJZCwKICAgICAgICAgICAgYXV0aENvZGUsCiAgICAgICAgICAgIGNvZGVWZXJpZmllciwKICAgICAgICAgICAgcmVkaXJlY3RVcmk6IGRlZmF1bHRSZWRpcmVjdFVyaSgpCiAgICAgICAgICB9KS50aGVuKGFzeW5jICh0b2tlbnMpID0+IHsKICAgICAgICAgICAgYXV0aFN0YXRlLnRva2VucyA9IHRva2VuczsKICAgICAgICAgICAgYXNzZXJ0QXV0aFRva2VucyhhdXRoU3RhdGUudG9rZW5zKTsKICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGF1dGhTdGF0ZS50b2tlbnMuYWN0aXZhdGUob25GYWlsZWRUb2tlblJlZnJlc2gpOwogICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhdXRoU3RhdGUuYXV0aENvbXBsZXRlLnJlc29sdmUoKTsKICAgICAgICAgICAgYnJvYWRjYXN0TWVzc2FnZSh7IHR5cGU6ICJhdXRoLWNvbXBsZXRlIiB9KTsKICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4gewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgICAgbG9nZ2VkT3V0TGlzdGVuZXJzLmZpcmVFdmVudCgpOwogICAgICAgICAgICBicm9hZGNhc3RNZXNzYWdlKHsgdHlwZTogImF1dGgtbG9nb3V0IiB9KTsKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiAiYXV0aG9yaXplZCIgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiAibmVlZC1hdXRoIiB9OwogICAgICB9LAogICAgICBhc3luYyBzdGFydEF1dGhGbG93KHsgcG9wdXAgfSA9IHt9KSB7CiAgICAgICAgaWYgKCFhdXRoU3RhdGUuaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYXV0aC5pbml0IG11c3QgYmUgY2FsbGVkIGZpcnN0Iik7CiAgICAgICAgfQogICAgICAgIGlmIChwb3B1cCkgewogICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9QT1BVUF9OQU1FLCAidHJ1ZSIpOwogICAgICAgICAgY29uc3QgaGVpZ2h0ID0gNTAwOwogICAgICAgICAgY29uc3Qgd2lkdGggPSA2MjA7CiAgICAgICAgICBjb25zdCBsZWZ0ID0gd2luZG93LnNjcmVlbkxlZnQgKyAod2luZG93Lm91dGVyV2lkdGggLSB3aWR0aCkgLyAyOwogICAgICAgICAgY29uc3QgdG9wID0gd2luZG93LnNjcmVlblRvcCArICh3aW5kb3cub3V0ZXJIZWlnaHQgLSBoZWlnaHQpIC8gMjsKICAgICAgICAgIHdpbmRvdy5vcGVuKGF3YWl0IGdlbmVyYXRlT0F1dGhSZXF1ZXN0KCksICJfYmxhbmsiLCBgcG9wdXAsd2lkdGg9JHt3aWR0aH0saGVpZ2h0PSR7aGVpZ2h0fSxsZWZ0PSR7bGVmdH0sdG9wPSR7dG9wfWApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGF3YWl0IGdlbmVyYXRlT0F1dGhSZXF1ZXN0KCk7CiAgICAgICAgfQogICAgICB9LAogICAgICBhc3luYyBsb2dvdXQoeyBpZ25vcmVSZXZva2VFcnJvciB9ID0ge30pIHsKICAgICAgICBhd2FpdCBhdXRoU3RhdGUudG9rZW5zPy5yZXZva2UoYXV0aFN0YXRlLmNsaWVudElkLCBpZ25vcmVSZXZva2VFcnJvciA/PyBmYWxzZSk7CiAgICAgICAgbG9nZ2VkT3V0TGlzdGVuZXJzLmZpcmVFdmVudCgpOwogICAgICAgIGJyb2FkY2FzdE1lc3NhZ2UoeyB0eXBlOiAiYXV0aC1sb2dvdXQiIH0pOwogICAgICB9LAogICAgICBsb2dnZWRJbigpIHsKICAgICAgICByZXR1cm4gYXV0aFN0YXRlLmF1dGhDb21wbGV0ZS5wcm9taXNlOwogICAgICB9LAogICAgICBvbihldmVudCwgbGlzdGVuZXIyKSB7CiAgICAgICAgc3dpdGNoIChldmVudCkgewogICAgICAgICAgY2FzZSAiYXV0aC1mYWlsZWQiOiB7CiAgICAgICAgICAgIHJldHVybiBhdXRoRmFpbGVkTGlzdGVuZXJzLmxpc3RlbihsaXN0ZW5lcjIpOwogICAgICAgICAgfQogICAgICAgICAgY2FzZSAibG9nZ2VkLW91dCI6IHsKICAgICAgICAgICAgcmV0dXJuIGxvZ2dlZE91dExpc3RlbmVycy5saXN0ZW4obGlzdGVuZXIyKTsKICAgICAgICAgIH0KICAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBldmVudCB0eXBlICcke2V2ZW50fScuYCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvcHJldmlldy1tZXNzYWdlLXR5cGVzLmpzCnZhciBQcmV2aWV3TWVzc2FnZVR5cGU7CnZhciBpbml0X3ByZXZpZXdfbWVzc2FnZV90eXBlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3ByZXZpZXctbWVzc2FnZS10eXBlcy5qcyIoKSB7CiAgICAoZnVuY3Rpb24oUHJldmlld01lc3NhZ2VUeXBlMikgewogICAgICBQcmV2aWV3TWVzc2FnZVR5cGUyWyJVbmNhdWdodEV4Y2VwdGlvbiJdID0gIlBSRVZJRVdfVU5DQVVHSFRfRVhDRVBUSU9OIjsKICAgICAgUHJldmlld01lc3NhZ2VUeXBlMlsiVW5oYW5kbGVkUmVqZWN0aW9uIl0gPSAiUFJFVklFV19VTkhBTkRMRURfUkVKRUNUSU9OIjsKICAgICAgUHJldmlld01lc3NhZ2VUeXBlMlsiQ29uc29sZUVycm9yIl0gPSAiUFJFVklFV19DT05TT0xFX0VSUk9SIjsKICAgIH0pKFByZXZpZXdNZXNzYWdlVHlwZSB8fCAoUHJldmlld01lc3NhZ2VUeXBlID0ge30pKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3ZlbmRvci9pbmRleC5qcwpmdW5jdGlvbiBleHBvc2Uob2JqLCBlcCA9IHNlbGYpIHsKICBlcC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgZnVuY3Rpb24gY2FsbGJhY2soZXYpIHsKICAgIGlmICghZXYgfHwgIWV2LmRhdGEpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgeyBpZCwgdHlwZTogdHlwZTUsIHBhdGg6IHBhdGgyIH0gPSBPYmplY3QuYXNzaWduKHsgcGF0aDogW10gfSwgZXYuZGF0YSk7CiAgICBjb25zdCBhcmd1bWVudExpc3QgPSAoZXYuZGF0YS5hcmd1bWVudExpc3QgfHwgW10pLm1hcChmcm9tV2lyZVZhbHVlKTsKICAgIGxldCByZXR1cm5WYWx1ZTsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHBhcmVudCA9IHBhdGgyLnNsaWNlKDAsIC0xKS5yZWR1Y2UoKG9iajIsIHByb3ApID0+IG9iajJbcHJvcF0sIG9iaik7CiAgICAgIGNvbnN0IHJhd1ZhbHVlID0gcGF0aDIucmVkdWNlKChvYmoyLCBwcm9wKSA9PiBvYmoyW3Byb3BdLCBvYmopOwogICAgICBzd2l0Y2ggKHR5cGU1KSB7CiAgICAgICAgY2FzZSAwOgogICAgICAgICAgewogICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHJhd1ZhbHVlOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgewogICAgICAgICAgICBwYXJlbnRbcGF0aDIuc2xpY2UoLTEpWzBdXSA9IGZyb21XaXJlVmFsdWUoZXYuZGF0YS52YWx1ZSk7CiAgICAgICAgICAgIHJldHVyblZhbHVlID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjoKICAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSByYXdWYWx1ZS5hcHBseShwYXJlbnQsIGFyZ3VtZW50TGlzdCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDM6CiAgICAgICAgICB7CiAgICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IG5ldyByYXdWYWx1ZSguLi5hcmd1bWVudExpc3QpOwogICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHByb3h5KHZhbHVlMik7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDQ6CiAgICAgICAgICB7CiAgICAgICAgICAgIGNvbnN0IHsgcG9ydDEsIHBvcnQyIH0gPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsKICAgICAgICAgICAgZXhwb3NlKG9iaiwgcG9ydDIpOwogICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRyYW5zZmVyKHBvcnQxLCBbcG9ydDFdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNToKICAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB2b2lkIDA7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSBjYXRjaCAodmFsdWUyKSB7CiAgICAgIHJldHVyblZhbHVlID0geyB2YWx1ZTogdmFsdWUyLCBbdGhyb3dNYXJrZXJdOiAwIH07CiAgICB9CiAgICBQcm9taXNlLnJlc29sdmUocmV0dXJuVmFsdWUpLmNhdGNoKCh2YWx1ZTIpID0+IHsKICAgICAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlMiwgW3Rocm93TWFya2VyXTogMCB9OwogICAgfSkudGhlbigocmV0dXJuVmFsdWUyKSA9PiB7CiAgICAgIGNvbnN0IFt3aXJlVmFsdWUsIHRyYW5zZmVyYWJsZXNdID0gdG9XaXJlVmFsdWUocmV0dXJuVmFsdWUyKTsKICAgICAgZXAucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB3aXJlVmFsdWUpLCB7IGlkIH0pLCB0cmFuc2ZlcmFibGVzKTsKICAgICAgaWYgKHR5cGU1ID09PSA1KSB7CiAgICAgICAgZXAucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGNhbGxiYWNrKTsKICAgICAgICBjbG9zZUVuZFBvaW50KGVwKTsKICAgICAgfQogICAgfSk7CiAgfSk7CiAgaWYgKGVwLnN0YXJ0KSB7CiAgICBlcC5zdGFydCgpOwogIH0KfQpmdW5jdGlvbiBpc01lc3NhZ2VQb3J0KGVuZHBvaW50KSB7CiAgcmV0dXJuIGVuZHBvaW50LmNvbnN0cnVjdG9yLm5hbWUgPT09ICJNZXNzYWdlUG9ydCI7Cn0KZnVuY3Rpb24gY2xvc2VFbmRQb2ludChlbmRwb2ludCkgewogIGlmIChpc01lc3NhZ2VQb3J0KGVuZHBvaW50KSkKICAgIGVuZHBvaW50LmNsb3NlKCk7Cn0KZnVuY3Rpb24gd3JhcDQoZXAsIHRhcmdldCkgewogIHJldHVybiBjcmVhdGVQcm94eShlcCwgW10sIHRhcmdldCk7Cn0KZnVuY3Rpb24gdGhyb3dJZlByb3h5UmVsZWFzZWQoaXNSZWxlYXNlZCkgewogIGlmIChpc1JlbGVhc2VkKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpOwogIH0KfQpmdW5jdGlvbiBjcmVhdGVQcm94eShlcCwgcGF0aDIgPSBbXSwgdGFyZ2V0ID0gZnVuY3Rpb24oKSB7Cn0pIHsKICBsZXQgaXNQcm94eVJlbGVhc2VkID0gZmFsc2U7CiAgY29uc3QgcHJveHkyID0gbmV3IFByb3h5KHRhcmdldCwgewogICAgZ2V0KF90YXJnZXQsIHByb3ApIHsKICAgICAgdGhyb3dJZlByb3h5UmVsZWFzZWQoaXNQcm94eVJlbGVhc2VkKTsKICAgICAgaWYgKHByb3AgPT09IHJlbGVhc2VQcm94eSkgewogICAgICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgICByZXR1cm4gcmVxdWVzdFJlc3BvbnNlTWVzc2FnZShlcCwgewogICAgICAgICAgICB0eXBlOiA1LAogICAgICAgICAgICBwYXRoOiBwYXRoMi5tYXAoKHA3KSA9PiBwNy50b1N0cmluZygpKQogICAgICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgIGNsb3NlRW5kUG9pbnQoZXApOwogICAgICAgICAgICBpc1Byb3h5UmVsZWFzZWQgPSB0cnVlOwogICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgICAgfQogICAgICBpZiAocHJvcCA9PT0gInRoZW4iKSB7CiAgICAgICAgaWYgKHBhdGgyLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIHsgdGhlbjogKCkgPT4gcHJveHkyIH07CiAgICAgICAgfQogICAgICAgIGNvbnN0IHIxMSA9IHJlcXVlc3RSZXNwb25zZU1lc3NhZ2UoZXAsIHsKICAgICAgICAgIHR5cGU6IDAsCiAgICAgICAgICBwYXRoOiBwYXRoMi5tYXAoKHA3KSA9PiBwNy50b1N0cmluZygpKQogICAgICAgIH0pLnRoZW4oZnJvbVdpcmVWYWx1ZSk7CiAgICAgICAgcmV0dXJuIHIxMS50aGVuLmJpbmQocjExKTsKICAgICAgfQogICAgICByZXR1cm4gY3JlYXRlUHJveHkoZXAsIFsuLi5wYXRoMiwgcHJvcF0pOwogICAgfSwKICAgIHNldChfdGFyZ2V0LCBwcm9wLCByYXdWYWx1ZSkgewogICAgICB0aHJvd0lmUHJveHlSZWxlYXNlZChpc1Byb3h5UmVsZWFzZWQpOwogICAgICBjb25zdCBbdmFsdWUyLCB0cmFuc2ZlcmFibGVzXSA9IHRvV2lyZVZhbHVlKHJhd1ZhbHVlKTsKICAgICAgcmV0dXJuIHJlcXVlc3RSZXNwb25zZU1lc3NhZ2UoZXAsIHsKICAgICAgICB0eXBlOiAxLAogICAgICAgIHBhdGg6IFsuLi5wYXRoMiwgcHJvcF0ubWFwKChwNykgPT4gcDcudG9TdHJpbmcoKSksCiAgICAgICAgdmFsdWU6IHZhbHVlMgogICAgICB9LCB0cmFuc2ZlcmFibGVzKS50aGVuKGZyb21XaXJlVmFsdWUpOwogICAgfSwKICAgIGFwcGx5KF90YXJnZXQsIF90aGlzQXJnLCByYXdBcmd1bWVudExpc3QpIHsKICAgICAgdGhyb3dJZlByb3h5UmVsZWFzZWQoaXNQcm94eVJlbGVhc2VkKTsKICAgICAgY29uc3QgbGFzdDMgPSBwYXRoMltwYXRoMi5sZW5ndGggLSAxXTsKICAgICAgaWYgKGxhc3QzID09PSBjcmVhdGVFbmRwb2ludCkgewogICAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7CiAgICAgICAgICB0eXBlOiA0CiAgICAgICAgfSkudGhlbihmcm9tV2lyZVZhbHVlKTsKICAgICAgfQogICAgICBpZiAobGFzdDMgPT09ICJiaW5kIikgewogICAgICAgIHJldHVybiBjcmVhdGVQcm94eShlcCwgcGF0aDIuc2xpY2UoMCwgLTEpKTsKICAgICAgfQogICAgICBjb25zdCBbYXJndW1lbnRMaXN0LCB0cmFuc2ZlcmFibGVzXSA9IHByb2Nlc3NBcmd1bWVudHMocmF3QXJndW1lbnRMaXN0KTsKICAgICAgcmV0dXJuIHJlcXVlc3RSZXNwb25zZU1lc3NhZ2UoZXAsIHsKICAgICAgICB0eXBlOiAyLAogICAgICAgIHBhdGg6IHBhdGgyLm1hcCgocDcpID0+IHA3LnRvU3RyaW5nKCkpLAogICAgICAgIGFyZ3VtZW50TGlzdAogICAgICB9LCB0cmFuc2ZlcmFibGVzKS50aGVuKGZyb21XaXJlVmFsdWUpOwogICAgfSwKICAgIGNvbnN0cnVjdChfdGFyZ2V0LCByYXdBcmd1bWVudExpc3QpIHsKICAgICAgdGhyb3dJZlByb3h5UmVsZWFzZWQoaXNQcm94eVJlbGVhc2VkKTsKICAgICAgY29uc3QgW2FyZ3VtZW50TGlzdCwgdHJhbnNmZXJhYmxlc10gPSBwcm9jZXNzQXJndW1lbnRzKHJhd0FyZ3VtZW50TGlzdCk7CiAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7CiAgICAgICAgdHlwZTogMywKICAgICAgICBwYXRoOiBwYXRoMi5tYXAoKHA3KSA9PiBwNy50b1N0cmluZygpKSwKICAgICAgICBhcmd1bWVudExpc3QKICAgICAgfSwgdHJhbnNmZXJhYmxlcykudGhlbihmcm9tV2lyZVZhbHVlKTsKICAgIH0KICB9KTsKICByZXR1cm4gcHJveHkyOwp9CmZ1bmN0aW9uIG15RmxhdChhcnIpIHsKICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgYXJyKTsKfQpmdW5jdGlvbiBwcm9jZXNzQXJndW1lbnRzKGFyZ3VtZW50TGlzdCkgewogIGNvbnN0IHByb2Nlc3NlZCA9IGFyZ3VtZW50TGlzdC5tYXAodG9XaXJlVmFsdWUpOwogIHJldHVybiBbcHJvY2Vzc2VkLm1hcCgodjUpID0+IHY1WzBdKSwgbXlGbGF0KHByb2Nlc3NlZC5tYXAoKHY1KSA9PiB2NVsxXSkpXTsKfQpmdW5jdGlvbiB0cmFuc2ZlcihvYmosIHRyYW5zZmVycykgewogIHRyYW5zZmVyQ2FjaGUuc2V0KG9iaiwgdHJhbnNmZXJzKTsKICByZXR1cm4gb2JqOwp9CmZ1bmN0aW9uIHByb3h5KG9iaikgewogIHJldHVybiBPYmplY3QuYXNzaWduKG9iaiwgeyBbcHJveHlNYXJrZXJdOiB0cnVlIH0pOwp9CmZ1bmN0aW9uIHdpbmRvd0VuZHBvaW50KHczLCBjb250ZXh0MiA9IHNlbGYsIHRhcmdldE9yaWdpbiA9ICIqIikgewogIHJldHVybiB7CiAgICBwb3N0TWVzc2FnZTogKG1zZywgdHJhbnNmZXJhYmxlcykgPT4gdzMucG9zdE1lc3NhZ2UobXNnLCB0YXJnZXRPcmlnaW4sIHRyYW5zZmVyYWJsZXMpLAogICAgYWRkRXZlbnRMaXN0ZW5lcjogY29udGV4dDIuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKGNvbnRleHQyKSwKICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGNvbnRleHQyLnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZChjb250ZXh0MikKICB9Owp9CmZ1bmN0aW9uIHRvV2lyZVZhbHVlKHZhbHVlMikgewogIGZvciAoY29uc3QgW25hbWUsIGhhbmRsZXIyXSBvZiB0cmFuc2ZlckhhbmRsZXJzKSB7CiAgICBpZiAoaGFuZGxlcjIuY2FuSGFuZGxlKHZhbHVlMikpIHsKICAgICAgY29uc3QgW3NlcmlhbGl6ZWRWYWx1ZSwgdHJhbnNmZXJhYmxlc10gPSBoYW5kbGVyMi5zZXJpYWxpemUodmFsdWUyKTsKICAgICAgcmV0dXJuIFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAzLAogICAgICAgICAgbmFtZSwKICAgICAgICAgIHZhbHVlOiBzZXJpYWxpemVkVmFsdWUKICAgICAgICB9LAogICAgICAgIHRyYW5zZmVyYWJsZXMKICAgICAgXTsKICAgIH0KICB9CiAgcmV0dXJuIFsKICAgIHsKICAgICAgdHlwZTogMCwKICAgICAgdmFsdWU6IHZhbHVlMgogICAgfSwKICAgIHRyYW5zZmVyQ2FjaGUuZ2V0KHZhbHVlMikgfHwgW10KICBdOwp9CmZ1bmN0aW9uIGZyb21XaXJlVmFsdWUodmFsdWUyKSB7CiAgc3dpdGNoICh2YWx1ZTIudHlwZSkgewogICAgY2FzZSAzOgogICAgICByZXR1cm4gdHJhbnNmZXJIYW5kbGVycy5nZXQodmFsdWUyLm5hbWUpLmRlc2VyaWFsaXplKHZhbHVlMi52YWx1ZSk7CiAgICBjYXNlIDA6CiAgICAgIHJldHVybiB2YWx1ZTIudmFsdWU7CiAgfQp9CmZ1bmN0aW9uIHJlcXVlc3RSZXNwb25zZU1lc3NhZ2UoZXAsIG1zZywgdHJhbnNmZXJzKSB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gewogICAgY29uc3QgaWQgPSBnZW5lcmF0ZVVVSUQoKTsKICAgIGVwLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbiBsNihldikgewogICAgICBpZiAoIWV2LmRhdGEgfHwgIWV2LmRhdGEuaWQgfHwgZXYuZGF0YS5pZCAhPT0gaWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZXAucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGw2KTsKICAgICAgcmVzb2x2ZTIoZXYuZGF0YSk7CiAgICB9KTsKICAgIGlmIChlcC5zdGFydCkgewogICAgICBlcC5zdGFydCgpOwogICAgfQogICAgZXAucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7IGlkIH0sIG1zZyksIHRyYW5zZmVycyk7CiAgfSk7Cn0KZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKCkgewogIHJldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCkgPT4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpOwp9CnZhciBfX2RlZlByb3AyLCBfX2V4cG9ydDIsIGNvbWxpbmtfZXhwb3J0cywgcHJveHlNYXJrZXIsIGNyZWF0ZUVuZHBvaW50LCByZWxlYXNlUHJveHksIHRocm93TWFya2VyLCBpc09iamVjdDIsIHByb3h5VHJhbnNmZXJIYW5kbGVyLCB0aHJvd1RyYW5zZmVySGFuZGxlciwgdHJhbnNmZXJIYW5kbGVycywgdHJhbnNmZXJDYWNoZTsKdmFyIGluaXRfdmVuZG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdmVuZG9yL2luZGV4LmpzIigpIHsKICAgIF9fZGVmUHJvcDIgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgICBfX2V4cG9ydDIgPSAodGFyZ2V0LCBhbGwzKSA9PiB7CiAgICAgIGZvciAodmFyIG5hbWUgaW4gYWxsMykKICAgICAgICBfX2RlZlByb3AyKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbDNbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7CiAgICB9OwogICAgY29tbGlua19leHBvcnRzID0ge307CiAgICBfX2V4cG9ydDIoY29tbGlua19leHBvcnRzLCB7CiAgICAgIGNyZWF0ZUVuZHBvaW50OiAoKSA9PiBjcmVhdGVFbmRwb2ludCwKICAgICAgZXhwb3NlOiAoKSA9PiBleHBvc2UsCiAgICAgIHByb3h5OiAoKSA9PiBwcm94eSwKICAgICAgcHJveHlNYXJrZXI6ICgpID0+IHByb3h5TWFya2VyLAogICAgICByZWxlYXNlUHJveHk6ICgpID0+IHJlbGVhc2VQcm94eSwKICAgICAgdHJhbnNmZXI6ICgpID0+IHRyYW5zZmVyLAogICAgICB0cmFuc2ZlckhhbmRsZXJzOiAoKSA9PiB0cmFuc2ZlckhhbmRsZXJzLAogICAgICB3aW5kb3dFbmRwb2ludDogKCkgPT4gd2luZG93RW5kcG9pbnQsCiAgICAgIHdyYXA6ICgpID0+IHdyYXA0CiAgICB9KTsKICAgIHByb3h5TWFya2VyID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgiQ29tbGluay5wcm94eSIpOwogICAgY3JlYXRlRW5kcG9pbnQgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCJDb21saW5rLmVuZHBvaW50Iik7CiAgICByZWxlYXNlUHJveHkgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpOwogICAgdGhyb3dNYXJrZXIgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCJDb21saW5rLnRocm93biIpOwogICAgaXNPYmplY3QyID0gKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gIm9iamVjdCIgJiYgdmFsICE9PSBudWxsIHx8IHR5cGVvZiB2YWwgPT09ICJmdW5jdGlvbiI7CiAgICBwcm94eVRyYW5zZmVySGFuZGxlciA9IHsKICAgICAgY2FuSGFuZGxlOiAodmFsKSA9PiBpc09iamVjdDIodmFsKSAmJiB2YWxbcHJveHlNYXJrZXJdLAogICAgICBzZXJpYWxpemUob2JqKSB7CiAgICAgICAgY29uc3QgeyBwb3J0MSwgcG9ydDIgfSA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOwogICAgICAgIGV4cG9zZShvYmosIHBvcnQxKTsKICAgICAgICByZXR1cm4gW3BvcnQyLCBbcG9ydDJdXTsKICAgICAgfSwKICAgICAgZGVzZXJpYWxpemUocG9ydCkgewogICAgICAgIHBvcnQuc3RhcnQoKTsKICAgICAgICByZXR1cm4gd3JhcDQocG9ydCk7CiAgICAgIH0KICAgIH07CiAgICB0aHJvd1RyYW5zZmVySGFuZGxlciA9IHsKICAgICAgY2FuSGFuZGxlOiAodmFsdWUyKSA9PiBpc09iamVjdDIodmFsdWUyKSAmJiB0aHJvd01hcmtlciBpbiB2YWx1ZTIsCiAgICAgIHNlcmlhbGl6ZSh7IHZhbHVlOiB2YWx1ZTIgfSkgewogICAgICAgIGxldCBzZXJpYWxpemVkOwogICAgICAgIGlmICh2YWx1ZTIgaW5zdGFuY2VvZiBFcnJvcikgewogICAgICAgICAgc2VyaWFsaXplZCA9IHsKICAgICAgICAgICAgaXNFcnJvcjogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHsKICAgICAgICAgICAgICBtZXNzYWdlOiB2YWx1ZTIubWVzc2FnZSwKICAgICAgICAgICAgICBuYW1lOiB2YWx1ZTIubmFtZSwKICAgICAgICAgICAgICBzdGFjazogdmFsdWUyLnN0YWNrCiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlcmlhbGl6ZWQgPSB7IGlzRXJyb3I6IGZhbHNlLCB2YWx1ZTogdmFsdWUyIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiBbc2VyaWFsaXplZCwgW11dOwogICAgICB9LAogICAgICBkZXNlcmlhbGl6ZShzZXJpYWxpemVkKSB7CiAgICAgICAgaWYgKHNlcmlhbGl6ZWQuaXNFcnJvcikgewogICAgICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihuZXcgRXJyb3Ioc2VyaWFsaXplZC52YWx1ZS5tZXNzYWdlKSwgc2VyaWFsaXplZC52YWx1ZSk7CiAgICAgICAgfQogICAgICAgIHRocm93IHNlcmlhbGl6ZWQudmFsdWU7CiAgICAgIH0KICAgIH07CiAgICB0cmFuc2ZlckhhbmRsZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoWwogICAgICBbInByb3h5IiwgcHJveHlUcmFuc2ZlckhhbmRsZXJdLAogICAgICBbInRocm93IiwgdGhyb3dUcmFuc2ZlckhhbmRsZXJdCiAgICBdKTsKICAgIHRyYW5zZmVyQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL3JlbG9hZC1wcmV2aWV3LmpzCnZhciBpbml0X3JlbG9hZF9wcmV2aWV3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvcmVsb2FkLXByZXZpZXcuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvaXMtcHJldmlldy1tZXNzYWdlLmpzCmZ1bmN0aW9uIGlzUHJldmlld01lc3NhZ2UoZGF0YSkgewogIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICJvYmplY3QiKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGlmICghKCJ0eXBlIiBpbiBkYXRhKSB8fCAhUFJFVklFV19NRVNTQUdFX1RZUEVTLmluY2x1ZGVzKGRhdGEudHlwZSkpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KdmFyIFBSRVZJRVdfTUVTU0FHRV9UWVBFUzsKdmFyIGluaXRfaXNfcHJldmlld19tZXNzYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvaXMtcHJldmlldy1tZXNzYWdlLmpzIigpIHsKICAgIGluaXRfcHJldmlld19tZXNzYWdlX3R5cGVzKCk7CiAgICBQUkVWSUVXX01FU1NBR0VfVFlQRVMgPSBbCiAgICAgIFByZXZpZXdNZXNzYWdlVHlwZS5Db25zb2xlRXJyb3IsCiAgICAgIFByZXZpZXdNZXNzYWdlVHlwZS5VbmNhdWdodEV4Y2VwdGlvbiwKICAgICAgUHJldmlld01lc3NhZ2VUeXBlLlVuaGFuZGxlZFJlamVjdGlvbgogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzLmpzCnZhciBpbml0X3V0aWxzMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzLmpzIigpIHsKICAgIGluaXRfcmVsb2FkX3ByZXZpZXcoKTsKICAgIGluaXRfcHJldmlld19tZXNzYWdlX3R5cGVzKCk7CiAgICBpbml0X2lzX3ByZXZpZXdfbWVzc2FnZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvbnVsbC1wcm90b3R5cGUuanMKZnVuY3Rpb24gbnVsbFByb3RvdHlwZShzb3VyY2UpIHsKICBjb25zdCBwcm90b3R5cGUgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTsKICBpZiAoIXNvdXJjZSkgewogICAgcmV0dXJuIHByb3RvdHlwZTsKICB9CiAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJvdG90eXBlLCBzb3VyY2UpOwp9CnZhciBpbml0X251bGxfcHJvdG90eXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvbnVsbC1wcm90b3R5cGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvZmlsZS1zeXN0ZW0uanMKZnVuY3Rpb24gdG9JbnRlcm5hbEZpbGVTeXN0ZW1UcmVlKHRyZWUpIHsKICBjb25zdCBuZXdUcmVlID0geyBkOiB7fSB9OwogIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyh0cmVlKSkgewogICAgY29uc3QgZW50cnkgPSB0cmVlW25hbWVdOwogICAgaWYgKCJmaWxlIiBpbiBlbnRyeSkgewogICAgICBpZiAoInN5bWxpbmsiIGluIGVudHJ5LmZpbGUpIHsKICAgICAgICBuZXdUcmVlLmRbbmFtZV0gPSB7IGY6IHsgbDogZW50cnkuZmlsZS5zeW1saW5rIH0gfTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBjb250ZW50cyA9IGVudHJ5LmZpbGUuY29udGVudHM7CiAgICAgIGNvbnN0IHN0cmluZ0NvbnRlbnRzID0gdHlwZW9mIGNvbnRlbnRzID09PSAic3RyaW5nIiA/IGNvbnRlbnRzIDogYmluYXJ5RGVjb2Rlci5kZWNvZGUoY29udGVudHMpOwogICAgICBjb25zdCBiaW5hcnkgPSB0eXBlb2YgY29udGVudHMgPT09ICJzdHJpbmciID8ge30gOiB7IGI6IHRydWUgfTsKICAgICAgbmV3VHJlZS5kW25hbWVdID0geyBmOiB7IGM6IHN0cmluZ0NvbnRlbnRzLCAuLi5iaW5hcnkgfSB9OwogICAgICBjb250aW51ZTsKICAgIH0KICAgIGNvbnN0IG5ld0VudHJ5ID0gdG9JbnRlcm5hbEZpbGVTeXN0ZW1UcmVlKGVudHJ5LmRpcmVjdG9yeSk7CiAgICBuZXdUcmVlLmRbbmFtZV0gPSBuZXdFbnRyeTsKICB9CiAgcmV0dXJuIG5ld1RyZWU7Cn0KZnVuY3Rpb24gdG9FeHRlcm5hbEZpbGVTeXN0ZW1UcmVlKHRyZWUpIHsKICBjb25zdCBuZXdUcmVlID0gbnVsbFByb3RvdHlwZSgpOwogIGlmICgiZiIgaW4gdHJlZSkgewogICAgdGhyb3cgbmV3IEVycm9yKCJJdCBpcyBub3QgcG9zc2libGUgdG8gZXhwb3J0IGEgc2luZ2xlIGZpbGUgaW4gdGhlIEpTT04gZm9ybWF0LiIpOwogIH0KICBpZiAoImQiIGluIHRyZWUpIHsKICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyh0cmVlLmQpKSB7CiAgICAgIGNvbnN0IGVudHJ5ID0gdHJlZS5kW25hbWVdOwogICAgICBpZiAoImQiIGluIGVudHJ5KSB7CiAgICAgICAgbmV3VHJlZVtuYW1lXSA9IG51bGxQcm90b3R5cGUoewogICAgICAgICAgZGlyZWN0b3J5OiB0b0V4dGVybmFsRmlsZVN5c3RlbVRyZWUoZW50cnkpCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAoImYiIGluIGVudHJ5KSB7CiAgICAgICAgaWYgKCJjIiBpbiBlbnRyeS5mKSB7CiAgICAgICAgICBuZXdUcmVlW25hbWVdID0gbnVsbFByb3RvdHlwZSh7CiAgICAgICAgICAgIGZpbGU6IG51bGxQcm90b3R5cGUoewogICAgICAgICAgICAgIGNvbnRlbnRzOiBlbnRyeS5mLmIgPyBmcm9tQmluYXJ5U3RyaW5nKGVudHJ5LmYuYykgOiBlbnRyeS5mLmMKICAgICAgICAgICAgfSkKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSBpZiAoImwiIGluIGVudHJ5LmYpIHsKICAgICAgICAgIG5ld1RyZWVbbmFtZV0gPSBudWxsUHJvdG90eXBlKHsKICAgICAgICAgICAgZmlsZTogbnVsbFByb3RvdHlwZSh7CiAgICAgICAgICAgICAgc3ltbGluazogZW50cnkuZi5sCiAgICAgICAgICAgIH0pCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIG5ld1RyZWU7Cn0KZnVuY3Rpb24gZnJvbUJpbmFyeVN0cmluZyhzOSkgewogIGNvbnN0IGVuY29kZWQgPSBuZXcgVWludDhBcnJheShzOS5sZW5ndGgpOwogIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHM5Lmxlbmd0aDsgaTExKyspIHsKICAgIGVuY29kZWRbaTExXSA9IHM5W2kxMV0uY2hhckNvZGVBdCgwKTsKICB9CiAgcmV0dXJuIGVuY29kZWQ7Cn0KdmFyIGJpbmFyeURlY29kZXI7CnZhciBpbml0X2ZpbGVfc3lzdGVtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvZmlsZS1zeXN0ZW0uanMiKCkgewogICAgaW5pdF9udWxsX3Byb3RvdHlwZSgpOwogICAgYmluYXJ5RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigibGF0aW4xIik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbmRleC5qcwpmdW5jdGlvbiBjb25maWd1cmVBUElLZXkoa2V5MikgewogIGlmIChhdXRoU3RhdGUuYm9vdENhbGxlZCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJgY29uZmlndXJlQVBJS2V5YCBzaG91bGQgYWx3YXlzIGJlIGNhbGxlZCBiZWZvcmUgYFdlYkNvbnRhaW5lci5ib290YCIpOwogIH0KICBpZnJhbWVTZXR0aW5ncy5zZXRRdWVyeVBhcmFtKCJjbGllbnRfaWQiLCBrZXkyKTsKfQphc3luYyBmdW5jdGlvbiB1bnN5bmNocm9uaXplZEJvb3Qob3B0aW9ucykgewogIGNvbnN0IHsgc2VydmVyUHJvbWlzZSB9ID0gc2VydmVyRmFjdG9yeShvcHRpb25zKTsKICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBzZXJ2ZXJQcm9taXNlOwogIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgc2VydmVyLmJ1aWxkKHsKICAgIGhvc3Q6IHdpbmRvdy5sb2NhdGlvbi5ob3N0LAogICAgdmVyc2lvbjogIjEuNi4xIiwKICAgIHdvcmtkaXJOYW1lOiBvcHRpb25zLndvcmtkaXJOYW1lLAogICAgZm9yd2FyZFByZXZpZXdFcnJvcnM6IG9wdGlvbnMuZm9yd2FyZFByZXZpZXdFcnJvcnMKICB9KTsKICBjb25zdCBbZnMsIHByZXZpZXdTY3JpcHQsIHJ1bnRpbWVJbmZvXSA9IGF3YWl0IFByb21pc2UuYWxsKFsKICAgIGluc3RhbmNlLmZzKCksCiAgICBpbnN0YW5jZS5wcmV2aWV3U2NyaXB0KCksCiAgICBpbnN0YW5jZS5ydW50aW1lSW5mbygpCiAgXSk7CiAgcmV0dXJuIG5ldyBXZWJDb250YWluZXIoaW5zdGFuY2UsIGZzLCBwcmV2aWV3U2NyaXB0LCBydW50aW1lSW5mbyk7Cn0KZnVuY3Rpb24gYmluYXJ5TGlzdGVuZXIobGlzdGVuZXIyKSB7CiAgaWYgKGxpc3RlbmVyMiA9PSBudWxsKSB7CiAgICByZXR1cm4gdm9pZCAwOwogIH0KICByZXR1cm4gKGRhdGEpID0+IHsKICAgIGlmIChkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkgewogICAgICBsaXN0ZW5lcjIoZGVjb2Rlci5kZWNvZGUoZGF0YSkpOwogICAgfSBlbHNlIGlmIChkYXRhID09IG51bGwpIHsKICAgICAgbGlzdGVuZXIyKG51bGwpOwogICAgfQogIH07Cn0KZnVuY3Rpb24gcHJveHlMaXN0ZW5lcihsaXN0ZW5lcjIpIHsKICBpZiAobGlzdGVuZXIyID09IG51bGwpIHsKICAgIHJldHVybiB2b2lkIDA7CiAgfQogIHJldHVybiBjb21saW5rX2V4cG9ydHMucHJveHkobGlzdGVuZXIyKTsKfQpmdW5jdGlvbiBzZXJ2ZXJGYWN0b3J5KG9wdGlvbnMpIHsKICBpZiAoY2FjaGVkU2VydmVyUHJvbWlzZSAhPSBudWxsKSB7CiAgICBpZiAob3B0aW9ucy5jb2VwICE9PSBjYWNoZWRCb290T3B0aW9ucy5jb2VwKSB7CiAgICAgIGNvbnNvbGUud2FybihgQXR0ZW1wdGluZyB0byBib290IFdlYkNvbnRhaW5lciB3aXRoICdjb2VwOiAke29wdGlvbnMuY29lcH0nYCk7CiAgICAgIGNvbnNvbGUud2FybihgRmlyc3QgYm9vdCBoYWQgJ2NvZXA6ICR7Y2FjaGVkQm9vdE9wdGlvbnMuY29lcH0nLCBuZXcgc2V0dGluZ3Mgd2lsbCBub3QgdGFrZSBlZmZlY3QhYCk7CiAgICB9CiAgICByZXR1cm4geyBzZXJ2ZXJQcm9taXNlOiBjYWNoZWRTZXJ2ZXJQcm9taXNlIH07CiAgfQogIGlmIChvcHRpb25zLmNvZXApIHsKICAgIGlmcmFtZVNldHRpbmdzLnNldFF1ZXJ5UGFyYW0oImNvZXAiLCBvcHRpb25zLmNvZXApOwogIH0KICBpZiAob3B0aW9ucy5leHBlcmltZW50YWxOb2RlKSB7CiAgICBpZnJhbWVTZXR0aW5ncy5zZXRRdWVyeVBhcmFtKCJleHBlcmltZW50YWxfbm9kZSIsICIxIik7CiAgfQogIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOwogIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogIGlmcmFtZS5zZXRBdHRyaWJ1dGUoImFsbG93IiwgImNyb3NzLW9yaWdpbi1pc29sYXRlZCIpOwogIGNvbnN0IHVybCA9IGlmcmFtZVNldHRpbmdzLnVybDsKICBpZnJhbWUuc3JjID0gdXJsLnRvU3RyaW5nKCk7CiAgY29uc3QgeyBvcmlnaW4gfSA9IHVybDsKICBjYWNoZWRCb290T3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9OwogIGNhY2hlZFNlcnZlclByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgIGNvbnN0IG9uTWVzc2FnZTUgPSAoZXZlbnQpID0+IHsKICAgICAgaWYgKGV2ZW50Lm9yaWdpbiAhPT0gb3JpZ2luKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gZXZlbnQ7CiAgICAgIGlmIChkYXRhLnR5cGUgPT09ICJpbml0IikgewogICAgICAgIHJlc29sdmUyKGNvbWxpbmtfZXhwb3J0cy53cmFwKGV2ZW50LnBvcnRzWzBdKSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChkYXRhLnR5cGUgPT09ICJ3YXJuaW5nIikgewogICAgICAgIGNvbnNvbGVbZGF0YS5sZXZlbF0uY2FsbChjb25zb2xlLCBkYXRhLm1lc3NhZ2UpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgb25NZXNzYWdlNSk7CiAgfSk7CiAgZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUoaWZyYW1lLCBudWxsKTsKICByZXR1cm4geyBzZXJ2ZXJQcm9taXNlOiBjYWNoZWRTZXJ2ZXJQcm9taXNlIH07Cn0KZnVuY3Rpb24gaXNTdHJpbmdBcnJheShsaXN0NSkgewogIHJldHVybiB0eXBlb2YgbGlzdDVbMF0gPT09ICJzdHJpbmciOwp9CmZ1bmN0aW9uIGlzVHlwZWRBcnJheUNvbGxlY3Rpb24obGlzdDUpIHsKICByZXR1cm4gbGlzdDVbMF0gaW5zdGFuY2VvZiBVaW50OEFycmF5Owp9CmZ1bmN0aW9uIHN0cmVhbVdpdGhQdXNoKCkgewogIGxldCBjb250cm9sbGVyID0gbnVsbDsKICBjb25zdCBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oewogICAgc3RhcnQoY29udHJvbGxlcl8pIHsKICAgICAgY29udHJvbGxlciA9IGNvbnRyb2xsZXJfOwogICAgfQogIH0pOwogIGNvbnN0IHB1c2gyID0gKGl0ZW0pID0+IHsKICAgIGlmIChpdGVtICE9IG51bGwpIHsKICAgICAgY29udHJvbGxlcj8uZW5xdWV1ZShpdGVtKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnRyb2xsZXI/LmNsb3NlKCk7CiAgICAgIGNvbnRyb2xsZXIgPSBudWxsOwogICAgfQogIH07CiAgcmV0dXJuIHsgc3RyZWFtLCBwdXNoOiBwdXNoMiB9Owp9CmZ1bmN0aW9uIHN5bmNTdWJzY3JpcHRpb24obGlzdGVuZXIyKSB7CiAgbGV0IHN0b3BwZWQgPSBmYWxzZTsKICBsZXQgdW5zdWJzY3JpYmUgPSAoKSA9PiB7CiAgfTsKICBjb25zdCB3cmFwcGVkID0gKCguLi5hcmdzKSA9PiB7CiAgICBpZiAoc3RvcHBlZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBsaXN0ZW5lcjIoLi4uYXJncyk7CiAgfSk7CiAgcmV0dXJuIHsKICAgIHN1YnNjcmliZShwcm9taXNlKSB7CiAgICAgIHByb21pc2UudGhlbigodW5zdWJzY3JpYmVfKSA9PiB7CiAgICAgICAgdW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZV87CiAgICAgICAgaWYgKHN0b3BwZWQpIHsKICAgICAgICAgIHVuc3Vic2NyaWJlKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuICgpID0+IHsKICAgICAgICBzdG9wcGVkID0gdHJ1ZTsKICAgICAgICB1bnN1YnNjcmliZSgpOwogICAgICB9OwogICAgfSwKICAgIGxpc3RlbmVyOiB3cmFwcGVkCiAgfTsKfQp2YXIgYXV0aDIsIGJvb3RQcm9taXNlLCBjYWNoZWRTZXJ2ZXJQcm9taXNlLCBjYWNoZWRCb290T3B0aW9ucywgZGVjb2RlciwgZW5jb2RlciwgV2ViQ29udGFpbmVyLCBESVJfRU5UUllfVFlQRV9GSUxFLCBESVJfRU5UUllfVFlQRV9ESVIsIERpckVudEltcGwsIEZTV2F0Y2hlciwgV2ViQ29udGFpbmVyUHJvY2Vzc0ltcGwsIEZpbGVTeXN0ZW1BUElDbGllbnQ7CnZhciBpbml0X2Rpc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2F1dGhfc3RhdGUoKTsKICAgIGluaXRfcHJldmlld19tZXNzYWdlX3R5cGVzKCk7CiAgICBpbml0X3ZlbmRvcigpOwogICAgaW5pdF9hdXRoX3N0YXRlKCk7CiAgICBpbml0X3Rva2VucygpOwogICAgaW5pdF9pZnJhbWVfdXJsKCk7CiAgICBpbml0X3V0aWxzMigpOwogICAgaW5pdF9maWxlX3N5c3RlbSgpOwogICAgaW5pdF91dGlsczIoKTsKICAgIGF1dGgyID0gYXV0aDsKICAgIGJvb3RQcm9taXNlID0gbnVsbDsKICAgIGNhY2hlZFNlcnZlclByb21pc2UgPSBudWxsOwogICAgY2FjaGVkQm9vdE9wdGlvbnMgPSB7fTsKICAgIGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTsKICAgIGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTsKICAgIFdlYkNvbnRhaW5lciA9IGNsYXNzIF9XZWJDb250YWluZXIgewogICAgICBfaW5zdGFuY2U7CiAgICAgIF9ydW50aW1lSW5mbzsKICAgICAgLyoqCiAgICAgICAqIEdpdmVzIGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbS4KICAgICAgICovCiAgICAgIGZzOwogICAgICAvKiogQGludGVybmFsICovCiAgICAgIHN0YXRpYyBfaW5zdGFuY2UgPSBudWxsOwogICAgICAvKiogQGludGVybmFsICovCiAgICAgIHN0YXRpYyBfdGVhcmRvd25Qcm9taXNlID0gbnVsbDsKICAgICAgX3Rvcm5Eb3duID0gZmFsc2U7CiAgICAgIF91bnN1YnNjcmliZUZyb21Ub2tlbkNoYW5nZWRMaXN0ZW5lciA9ICgpID0+IHsKICAgICAgfTsKICAgICAgLyoqIEBpbnRlcm5hbCAqLwogICAgICBjb25zdHJ1Y3RvcihfaW5zdGFuY2UsIGZzLCBwcmV2aWV3U2NyaXB0LCBfcnVudGltZUluZm8pIHsKICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IF9pbnN0YW5jZTsKICAgICAgICB0aGlzLl9ydW50aW1lSW5mbyA9IF9ydW50aW1lSW5mbzsKICAgICAgICB0aGlzLmZzID0gbmV3IEZpbGVTeXN0ZW1BUElDbGllbnQoZnMpOwogICAgICAgIGlmIChhdXRoU3RhdGUuaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRnJvbVRva2VuQ2hhbmdlZExpc3RlbmVyID0gYWRkQWNjZXNzVG9rZW5DaGFuZ2VkTGlzdGVuZXIoKGFjY2Vzc1Rva2VuKSA9PiB7CiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlLnNldENyZWRlbnRpYWxzKHsgYWNjZXNzVG9rZW4sIGVkaXRvck9yaWdpbjogYXV0aFN0YXRlLmVkaXRvck9yaWdpbiB9KTsKICAgICAgICAgIH0pOwogICAgICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgYXV0aFN0YXRlLmF1dGhDb21wbGV0ZS5wcm9taXNlOwogICAgICAgICAgICBpZiAodGhpcy5fdG9ybkRvd24pIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXNzZXJ0QXV0aFRva2VucyhhdXRoU3RhdGUudG9rZW5zKTsKICAgICAgICAgICAgYXdhaXQgdGhpcy5faW5zdGFuY2Uuc2V0Q3JlZGVudGlhbHMoewogICAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBhdXRoU3RhdGUudG9rZW5zLmFjY2VzcywKICAgICAgICAgICAgICBlZGl0b3JPcmlnaW46IGF1dGhTdGF0ZS5lZGl0b3JPcmlnaW4KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KSgpLmNhdGNoKChlcnJvcikgPT4gewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBzcGF3bihjb21tYW5kLCBvcHRpb25zT3JBcmdzLCBvcHRpb25zKSB7CiAgICAgICAgbGV0IGFyZ3MgPSBbXTsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zT3JBcmdzKSkgewogICAgICAgICAgYXJncyA9IG9wdGlvbnNPckFyZ3M7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zT3JBcmdzOwogICAgICAgIH0KICAgICAgICBsZXQgb3V0cHV0ID0gdm9pZCAwOwogICAgICAgIGxldCBvdXRwdXRTdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oKTsKICAgICAgICBpZiAob3B0aW9ucz8ub3V0cHV0ICE9PSBmYWxzZSkgewogICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3RyZWFtV2l0aFB1c2goKTsKICAgICAgICAgIG91dHB1dCA9IHJlc3VsdC5wdXNoOwogICAgICAgICAgb3V0cHV0U3RyZWFtID0gcmVzdWx0LnN0cmVhbTsKICAgICAgICB9CiAgICAgICAgbGV0IHN0ZG91dCA9IHZvaWQgMDsKICAgICAgICBsZXQgc3Rkb3V0U3RyZWFtOwogICAgICAgIGxldCBzdGRlcnIgPSB2b2lkIDA7CiAgICAgICAgbGV0IHN0ZGVyclN0cmVhbTsKICAgICAgICBjb25zdCB3cmFwcGVkT3V0cHV0ID0gcHJveHlMaXN0ZW5lcihiaW5hcnlMaXN0ZW5lcihvdXRwdXQpKTsKICAgICAgICBjb25zdCB3cmFwcGVkU3Rkb3V0ID0gcHJveHlMaXN0ZW5lcihiaW5hcnlMaXN0ZW5lcihzdGRvdXQpKTsKICAgICAgICBjb25zdCB3cmFwcGVkU3RkZXJyID0gcHJveHlMaXN0ZW5lcihiaW5hcnlMaXN0ZW5lcihzdGRlcnIpKTsKICAgICAgICBjb25zdCBwcm9jZXNzNCA9IGF3YWl0IHRoaXMuX2luc3RhbmNlLnJ1bih7CiAgICAgICAgICBjb21tYW5kLAogICAgICAgICAgYXJncywKICAgICAgICAgIGN3ZDogb3B0aW9ucz8uY3dkLAogICAgICAgICAgZW52OiBvcHRpb25zPy5lbnYsCiAgICAgICAgICB0ZXJtaW5hbDogb3B0aW9ucz8udGVybWluYWwKICAgICAgICB9LCB3cmFwcGVkU3Rkb3V0LCB3cmFwcGVkU3RkZXJyLCB3cmFwcGVkT3V0cHV0KTsKICAgICAgICByZXR1cm4gbmV3IFdlYkNvbnRhaW5lclByb2Nlc3NJbXBsKHByb2Nlc3M0LCBvdXRwdXRTdHJlYW0sIHN0ZG91dFN0cmVhbSwgc3RkZXJyU3RyZWFtKTsKICAgICAgfQogICAgICBhc3luYyBleHBvcnQocGF0aDIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBzZXJpYWxpemVPcHRpb25zID0gewogICAgICAgICAgZm9ybWF0OiBvcHRpb25zPy5mb3JtYXQgPz8gImpzb24iLAogICAgICAgICAgaW5jbHVkZXM6IG9wdGlvbnM/LmluY2x1ZGVzLAogICAgICAgICAgZXhjbHVkZXM6IG9wdGlvbnM/LmV4Y2x1ZGVzLAogICAgICAgICAgZXh0ZXJuYWw6IHRydWUKICAgICAgICB9OwogICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2luc3RhbmNlLnNlcmlhbGl6ZShwYXRoMiwgc2VyaWFsaXplT3B0aW9ucyk7CiAgICAgICAgaWYgKHNlcmlhbGl6ZU9wdGlvbnMuZm9ybWF0ID09PSAianNvbiIpIHsKICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRlY29kZXIuZGVjb2RlKHJlc3VsdCkpOwogICAgICAgICAgcmV0dXJuIHRvRXh0ZXJuYWxGaWxlU3lzdGVtVHJlZShkYXRhKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICBvbihldmVudCwgbGlzdGVuZXIyKSB7CiAgICAgICAgaWYgKGV2ZW50ID09PSAicHJldmlldy1tZXNzYWdlIikgewogICAgICAgICAgY29uc3Qgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RlbmVyMjsKICAgICAgICAgIGxpc3RlbmVyMiA9ICgobWVzc2FnZTIpID0+IHsKICAgICAgICAgICAgaWYgKGlzUHJldmlld01lc3NhZ2UobWVzc2FnZTIpKSB7CiAgICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lcihtZXNzYWdlMik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb25zdCB7IGxpc3RlbmVyOiB3cmFwcGVkLCBzdWJzY3JpYmU6IHN1YnNjcmliZTIgfSA9IHN5bmNTdWJzY3JpcHRpb24obGlzdGVuZXIyKTsKICAgICAgICByZXR1cm4gc3Vic2NyaWJlMih0aGlzLl9pbnN0YW5jZS5vbihldmVudCwgY29tbGlua19leHBvcnRzLnByb3h5KHdyYXBwZWQpKSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIE1vdW50cyBhIHRyZWUgb2YgZmlsZXMgaW50byB0aGUgZmlsZXN5c3RlbS4gVGhpcyBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgdHJlZSBvYmplY3QgKHtAbGluayBGaWxlU3lzdGVtVHJlZX0pCiAgICAgICAqIG9yIGFzIGEgYmluYXJ5IHNuYXBzaG90IGdlbmVyYXRlZCBieSBbYEB3ZWJjb250YWluZXIvc25hcHNob3RgXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9Ad2ViY29udGFpbmVyL3NuYXBzaG90KS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHNuYXBzaG90T3JUcmVlIC0gQSB0cmVlIG9mIGZpbGVzLCBvciBhIGJpbmFyeSBzbmFwc2hvdC4gTm90ZSB0aGF0IGJpbmFyeSBwYXlsb2FkcyB3aWxsIGJlIHRyYW5zZmVycmVkLgogICAgICAgKiBAcGFyYW0gb3B0aW9ucy5tb3VudFBvaW50IC0gU3BlY2lmaWVzIGEgbmVzdGVkIHBhdGggd2hlcmUgdGhlIHRyZWUgc2hvdWxkIGJlIG1vdW50ZWQuCiAgICAgICAqLwogICAgICBtb3VudChzbmFwc2hvdE9yVHJlZSwgb3B0aW9ucykgewogICAgICAgIGNvbnN0IHBheWxvYWQgPSBzbmFwc2hvdE9yVHJlZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPyBzbmFwc2hvdE9yVHJlZSA6IHNuYXBzaG90T3JUcmVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgPyBuZXcgVWludDhBcnJheShzbmFwc2hvdE9yVHJlZSkgOiBlbmNvZGVyLmVuY29kZShKU09OLnN0cmluZ2lmeSh0b0ludGVybmFsRmlsZVN5c3RlbVRyZWUoc25hcHNob3RPclRyZWUpKSk7CiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLmxvYWRGaWxlcyhjb21saW5rX2V4cG9ydHMudHJhbnNmZXIocGF5bG9hZCwgW3BheWxvYWQuYnVmZmVyXSksIHsKICAgICAgICAgIG1vdW50UG9pbnRzOiBvcHRpb25zPy5tb3VudFBvaW50CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNldCBhIGN1c3RvbSBzY3JpcHQgdG8gYmUgaW5qZWN0ZWQgaW50byBhbGwgcHJldmlld3MuIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIGV2ZXJ5CiAgICAgICAqIGZ1dHVyZSBwYWdlIHJlbG9hZCB3aWxsIGNvbnRhaW4gdGhlIHByb3ZpZGVkIHNjcmlwdCB0YWcgb24gYWxsIEhUTUwgcmVzcG9uc2VzLgogICAgICAgKgogICAgICAgKiBOb3RlOgogICAgICAgKgogICAgICAgKiBXaGVuIHRoaXMgZnVuY3Rpb24gcmVzb2x2ZXMsIGV2ZXJ5IHByZXZpZXcgcmVsb2FkZWQgX2FmdGVyXyB3aWxsIGhhdmUgdGhlIG5ldyBzY3JpcHQuCiAgICAgICAqIEV4aXN0aW5nIHByZXZpZXcgaGF2ZSB0byBiZSBleHBsaWNpdGVseSByZWxvYWRlZC4KICAgICAgICoKICAgICAgICogVG8gcmVsb2FkIGEgcHJldmlldyB5b3UgY2FuIHVzZSBgcmVsb2FkUHJldmlld2AuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBzY3JpcHRTcmMgU291cmNlIGZvciB0aGUgc2NyaXB0IHRhZy4KICAgICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyB0byBkZWZpbmUgd2hpY2ggdHlwZSBvZiBzY3JpcHQgdGhpcyBpcy4KICAgICAgICovCiAgICAgIHNldFByZXZpZXdTY3JpcHQoc2NyaXB0U3JjLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLnNldFByZXZpZXdTY3JpcHQoc2NyaXB0U3JjLCBvcHRpb25zKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGBQQVRIYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgcHJvY2Vzc2VzIHN0YXJ0ZWQgdGhyb3VnaCB7QGxpbmsgc3Bhd259LgogICAgICAgKi8KICAgICAgZ2V0IHBhdGgoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bnRpbWVJbmZvLnBhdGg7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSBmdWxsIHBhdGggdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IChzZWUge0BsaW5rIEZpbGVTeXN0ZW1BUEl9KS4KICAgICAgICovCiAgICAgIGdldCB3b3JrZGlyKCkgewogICAgICAgIHJldHVybiB0aGlzLl9ydW50aW1lSW5mby5jd2Q7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIERlc3Ryb3lzIHRoZSBXZWJDb250YWluZXIgaW5zdGFuY2UsIHR1cm5pbmcgaXQgdW51c2FibGUsIGFuZCByZWxlYXNlcyBpdHMgcmVzb3VyY2VzLiBBZnRlciB0aGlzLAogICAgICAgKiBhIG5ldyBXZWJDb250YWluZXIgaW5zdGFuY2UgY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcge0BsaW5rIFdlYkNvbnRhaW5lci5ib290IHwgYGJvb3RgfS4KICAgICAgICoKICAgICAgICogQWxsIGVudGl0aWVzIGRlcml2ZWQgZnJvbSB0aGlzIGluc3RhbmNlIChlLmcuIHByb2Nlc3NlcywgdGhlIGZpbGUgc3lzdGVtLCBldGMuKSBhbHNvIGJlY29tZSB1bnVzYWJsZQogICAgICAgKiBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLgogICAgICAgKi8KICAgICAgdGVhcmRvd24oKSB7CiAgICAgICAgaWYgKHRoaXMuX3Rvcm5Eb3duKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldlYkNvbnRhaW5lciBhbHJlYWR5IHRvcm4gZG93biIpOwogICAgICAgIH0KICAgICAgICB0aGlzLl90b3JuRG93biA9IHRydWU7CiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVGcm9tVG9rZW5DaGFuZ2VkTGlzdGVuZXIoKTsKICAgICAgICBjb25zdCB0ZWFyZG93bkZuID0gYXN5bmMgKCkgPT4gewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5mcy5fdGVhcmRvd24oKTsKICAgICAgICAgICAgYXdhaXQgdGhpcy5faW5zdGFuY2UudGVhcmRvd24oKTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlW2NvbWxpbmtfZXhwb3J0cy5yZWxlYXNlUHJveHldKCk7CiAgICAgICAgICAgIGlmIChfV2ViQ29udGFpbmVyLl9pbnN0YW5jZSA9PT0gdGhpcykgewogICAgICAgICAgICAgIF9XZWJDb250YWluZXIuX2luc3RhbmNlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgX1dlYkNvbnRhaW5lci5fdGVhcmRvd25Qcm9taXNlID0gdGVhcmRvd25GbigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBCb290cyBhIFdlYkNvbnRhaW5lci4gT25seSBhIHNpbmdsZSBpbnN0YW5jZSBvZiBXZWJDb250YWluZXIgY2FuIGJlIGJvb3RlZCBjb25jdXJyZW50bHkKICAgICAgICogKHNlZSB7QGxpbmsgV2ViQ29udGFpbmVyLnRlYXJkb3duIHwgYHRlYXJkb3duYH0pLgogICAgICAgKgogICAgICAgKiBCb290aW5nIFdlYkNvbnRhaW5lciBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uLgogICAgICAgKi8KICAgICAgc3RhdGljIGFzeW5jIGJvb3Qob3B0aW9ucyA9IHt9KSB7CiAgICAgICAgYXdhaXQgdGhpcy5fdGVhcmRvd25Qcm9taXNlOwogICAgICAgIF9XZWJDb250YWluZXIuX3RlYXJkb3duUHJvbWlzZSA9IG51bGw7CiAgICAgICAgY29uc3QgeyB3b3JrZGlyTmFtZSB9ID0gb3B0aW9uczsKICAgICAgICBpZiAod2luZG93LmNyb3NzT3JpZ2luSXNvbGF0ZWQgJiYgb3B0aW9ucy5jb2VwID09PSAibm9uZSIpIHsKICAgICAgICAgIGNvbnNvbGUud2FybihgQSBDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5IGhlYWRlciBpcyByZXF1aXJlZCBpbiBjcm9zcyBvcmlnaW4gaXNvbGF0ZWQgZW52aXJvbm1lbnRzLgpTZXQgdGhlICdjb2VwJyBvcHRpb24gdG8gJ3JlcXVpcmUtY29ycCcuYCk7CiAgICAgICAgfQogICAgICAgIGlmICh3b3JrZGlyTmFtZT8uaW5jbHVkZXMoIi8iKSB8fCB3b3JrZGlyTmFtZSA9PT0gIi4uIiB8fCB3b3JrZGlyTmFtZSA9PT0gIi4iKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIndvcmtkaXJOYW1lIHNob3VsZCBiZSBhIHZhbGlkIGZvbGRlciBuYW1lIik7CiAgICAgICAgfQogICAgICAgIGF1dGhTdGF0ZS5ib290Q2FsbGVkID0gdHJ1ZTsKICAgICAgICB3aGlsZSAoYm9vdFByb21pc2UpIHsKICAgICAgICAgIGF3YWl0IGJvb3RQcm9taXNlOwogICAgICAgIH0KICAgICAgICBpZiAoX1dlYkNvbnRhaW5lci5faW5zdGFuY2UpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiT25seSBhIHNpbmdsZSBXZWJDb250YWluZXIgaW5zdGFuY2UgY2FuIGJlIGJvb3RlZCIpOwogICAgICAgIH0KICAgICAgICBjb25zdCBpbnN0YW5jZVByb21pc2UgPSB1bnN5bmNocm9uaXplZEJvb3Qob3B0aW9ucyk7CiAgICAgICAgYm9vdFByb21pc2UgPSBpbnN0YW5jZVByb21pc2UuY2F0Y2goKCkgPT4gewogICAgICAgIH0pOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGF3YWl0IGluc3RhbmNlUHJvbWlzZTsKICAgICAgICAgIF9XZWJDb250YWluZXIuX2luc3RhbmNlID0gaW5zdGFuY2U7CiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIGJvb3RQcm9taXNlID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBESVJfRU5UUllfVFlQRV9GSUxFID0gMTsKICAgIERJUl9FTlRSWV9UWVBFX0RJUiA9IDI7CiAgICBEaXJFbnRJbXBsID0gY2xhc3MgewogICAgICBuYW1lOwogICAgICBfdHlwZTsKICAgICAgY29uc3RydWN0b3IobmFtZSwgX3R5cGUpIHsKICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgIHRoaXMuX3R5cGUgPSBfdHlwZTsKICAgICAgfQogICAgICBpc0ZpbGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgPT09IERJUl9FTlRSWV9UWVBFX0ZJTEU7CiAgICAgIH0KICAgICAgaXNEaXJlY3RvcnkoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgPT09IERJUl9FTlRSWV9UWVBFX0RJUjsKICAgICAgfQogICAgfTsKICAgIEZTV2F0Y2hlciA9IGNsYXNzIHsKICAgICAgX2FwaUNsaWVudDsKICAgICAgX3BhdGg7CiAgICAgIF9vcHRpb25zOwogICAgICBfbGlzdGVuZXI7CiAgICAgIF93cmFwcGVkTGlzdGVuZXI7CiAgICAgIF93YXRjaGVyOwogICAgICBfY2xvc2VkID0gZmFsc2U7CiAgICAgIGNvbnN0cnVjdG9yKF9hcGlDbGllbnQsIF9wYXRoLCBfb3B0aW9ucywgX2xpc3RlbmVyMikgewogICAgICAgIHRoaXMuX2FwaUNsaWVudCA9IF9hcGlDbGllbnQ7CiAgICAgICAgdGhpcy5fcGF0aCA9IF9wYXRoOwogICAgICAgIHRoaXMuX29wdGlvbnMgPSBfb3B0aW9uczsKICAgICAgICB0aGlzLl9saXN0ZW5lciA9IF9saXN0ZW5lcjI7CiAgICAgICAgdGhpcy5fYXBpQ2xpZW50Ll93YXRjaGVycy5hZGQodGhpcyk7CiAgICAgICAgdGhpcy5fd3JhcHBlZExpc3RlbmVyID0gKGV2ZW50LCBmaWxlbmFtZSkgPT4gewogICAgICAgICAgaWYgKHRoaXMuX2xpc3RlbmVyICYmICF0aGlzLl9jbG9zZWQpIHsKICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXIoZXZlbnQsIGZpbGVuYW1lKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHRoaXMuX2FwaUNsaWVudC5fZnMud2F0Y2godGhpcy5fcGF0aCwgdGhpcy5fb3B0aW9ucywgcHJveHlMaXN0ZW5lcih0aGlzLl93cmFwcGVkTGlzdGVuZXIpKS50aGVuKChfd2F0Y2hlcikgPT4gewogICAgICAgICAgdGhpcy5fd2F0Y2hlciA9IF93YXRjaGVyOwogICAgICAgICAgaWYgKHRoaXMuX2Nsb3NlZCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5fdGVhcmRvd24oKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgICAgfSkuY2F0Y2goY29uc29sZS5lcnJvcik7CiAgICAgIH0KICAgICAgYXN5bmMgY2xvc2UoKSB7CiAgICAgICAgaWYgKCF0aGlzLl9jbG9zZWQpIHsKICAgICAgICAgIHRoaXMuX2Nsb3NlZCA9IHRydWU7CiAgICAgICAgICB0aGlzLl9hcGlDbGllbnQuX3dhdGNoZXJzLmRlbGV0ZSh0aGlzKTsKICAgICAgICAgIGF3YWl0IHRoaXMuX3RlYXJkb3duKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBAaW50ZXJuYWwKICAgICAgICovCiAgICAgIGFzeW5jIF90ZWFyZG93bigpIHsKICAgICAgICBhd2FpdCB0aGlzLl93YXRjaGVyPy5jbG9zZSgpLmZpbmFsbHkoKCkgPT4gewogICAgICAgICAgdGhpcy5fd2F0Y2hlcj8uW2NvbWxpbmtfZXhwb3J0cy5yZWxlYXNlUHJveHldKCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBXZWJDb250YWluZXJQcm9jZXNzSW1wbCA9IGNsYXNzIHsKICAgICAgb3V0cHV0OwogICAgICBpbnB1dDsKICAgICAgZXhpdDsKICAgICAgX3Byb2Nlc3M7CiAgICAgIHN0ZG91dDsKICAgICAgc3RkZXJyOwogICAgICBjb25zdHJ1Y3Rvcihwcm9jZXNzNCwgb3V0cHV0LCBzdGRvdXQsIHN0ZGVycikgewogICAgICAgIHRoaXMub3V0cHV0ID0gb3V0cHV0OwogICAgICAgIHRoaXMuX3Byb2Nlc3MgPSBwcm9jZXNzNDsKICAgICAgICB0aGlzLmlucHV0ID0gbmV3IFdyaXRhYmxlU3RyZWFtKHsKICAgICAgICAgIHdyaXRlOiAoZGF0YSkgPT4gewogICAgICAgICAgICB0aGlzLl9nZXRQcm9jZXNzKCk/LndyaXRlKGRhdGEpLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5leGl0ID0gdGhpcy5fb25FeGl0KCk7CiAgICAgICAgdGhpcy5zdGRvdXQgPSBzdGRvdXQ7CiAgICAgICAgdGhpcy5zdGRlcnIgPSBzdGRlcnI7CiAgICAgIH0KICAgICAga2lsbCgpIHsKICAgICAgICB0aGlzLl9wcm9jZXNzPy5raWxsKCk7CiAgICAgIH0KICAgICAgcmVzaXplKGRpbWVuc2lvbnMpIHsKICAgICAgICB0aGlzLl9nZXRQcm9jZXNzKCk/LnJlc2l6ZShkaW1lbnNpb25zKTsKICAgICAgfQogICAgICBhc3luYyBfb25FeGl0KCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcHJvY2Vzcy5vbkV4aXQ7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIHRoaXMuX3Byb2Nlc3M/Lltjb21saW5rX2V4cG9ydHMucmVsZWFzZVByb3h5XSgpOwogICAgICAgICAgdGhpcy5fcHJvY2VzcyA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIF9nZXRQcm9jZXNzKCkgewogICAgICAgIGlmICh0aGlzLl9wcm9jZXNzID09IG51bGwpIHsKICAgICAgICAgIGNvbnNvbGUud2FybigiVGhpcyBwcm9jZXNzIGFscmVhZHkgZXhpdGVkIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzOwogICAgICB9CiAgICB9OwogICAgRmlsZVN5c3RlbUFQSUNsaWVudCA9IGNsYXNzIHsKICAgICAgX2ZzOwogICAgICBfd2F0Y2hlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbXSk7CiAgICAgIGNvbnN0cnVjdG9yKGZzKSB7CiAgICAgICAgdGhpcy5fZnMgPSBmczsKICAgICAgfQogICAgICBybSguLi5hcmdzKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2ZzLnJtKC4uLmFyZ3MpOwogICAgICB9CiAgICAgIGFzeW5jIHJlYWRGaWxlKHBhdGgyLCBlbmNvZGluZykgewogICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9mcy5yZWFkRmlsZShwYXRoMiwgZW5jb2RpbmcpOwogICAgICB9CiAgICAgIGFzeW5jIHJlbmFtZShvbGRQYXRoLCBuZXdQYXRoKSB7CiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2ZzLnJlbmFtZShvbGRQYXRoLCBuZXdQYXRoKTsKICAgICAgfQogICAgICBhc3luYyB3cml0ZUZpbGUocGF0aDIsIGRhdGEsIG9wdGlvbnMpIHsKICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgICAgICAgIGNvbnN0IGJ1ZmZlcjIgPSBkYXRhLmJ1ZmZlci5zbGljZShkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZU9mZnNldCArIGRhdGEuYnl0ZUxlbmd0aCk7CiAgICAgICAgICBkYXRhID0gY29tbGlua19leHBvcnRzLnRyYW5zZmVyKG5ldyBVaW50OEFycmF5KGJ1ZmZlcjIpLCBbYnVmZmVyMl0pOwogICAgICAgIH0KICAgICAgICBhd2FpdCB0aGlzLl9mcy53cml0ZUZpbGUocGF0aDIsIGRhdGEsIG9wdGlvbnMpOwogICAgICB9CiAgICAgIGFzeW5jIHJlYWRkaXIocGF0aDIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9mcy5yZWFkZGlyKHBhdGgyLCBvcHRpb25zKTsKICAgICAgICBpZiAoaXNTdHJpbmdBcnJheShyZXN1bHQpKSB7CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgICBpZiAoaXNUeXBlZEFycmF5Q29sbGVjdGlvbihyZXN1bHQpKSB7CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgICBjb25zdCBlbnRyaWVzID0gcmVzdWx0Lm1hcCgoZW50cnkpID0+IG5ldyBEaXJFbnRJbXBsKGVudHJ5Lm5hbWUsIGVudHJ5WyJTeW1ib2wodHlwZSkiXSkpOwogICAgICAgIHJldHVybiBlbnRyaWVzOwogICAgICB9CiAgICAgIGFzeW5jIG1rZGlyKHBhdGgyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2ZzLm1rZGlyKHBhdGgyLCBvcHRpb25zKTsKICAgICAgfQogICAgICB3YXRjaChwYXRoMiwgb3B0aW9ucywgbGlzdGVuZXIyKSB7CiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBsaXN0ZW5lcjIgPSBvcHRpb25zOwogICAgICAgICAgb3B0aW9ucyA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgRlNXYXRjaGVyKHRoaXMsIHBhdGgyLCBvcHRpb25zLCBsaXN0ZW5lcjIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBAaW50ZXJuYWwKICAgICAgICovCiAgICAgIGFzeW5jIF90ZWFyZG93bigpIHsKICAgICAgICB0aGlzLl9mc1tjb21saW5rX2V4cG9ydHMucmVsZWFzZVByb3h5XSgpOwogICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFsuLi50aGlzLl93YXRjaGVyc10ubWFwKCh3YXRjaGVyKSA9PiB3YXRjaGVyLmNsb3NlKCkpKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvZW52aXJvbm1lbnRzL1dlYkNvbnRhaW5lckVudmlyb25tZW50LmpzCnZhciBXZWJDb250YWluZXJFbnZpcm9ubWVudDsKdmFyIGluaXRfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2Vudmlyb25tZW50cy9XZWJDb250YWluZXJFbnZpcm9ubWVudC5qcyIoKSB7CiAgICBpbml0X2Rpc3QoKTsKICAgIFdlYkNvbnRhaW5lckVudmlyb25tZW50ID0gY2xhc3MgX1dlYkNvbnRhaW5lckVudmlyb25tZW50IHsKICAgICAgLy8gU3RhdGljIHNoYXJlZCBzdGF0ZSAtIFdlYkNvbnRhaW5lciBvbmx5IGFsbG93cyBPTkUgYm9vdCBwZXIgcGFnZQogICAgICBzdGF0aWMgc2hhcmVkQ29udGFpbmVyID0gbnVsbDsKICAgICAgc3RhdGljIGJvb3RQcm9taXNlID0gbnVsbDsKICAgICAgX3JlYWR5ID0gZmFsc2U7CiAgICAgIHR5cGUgPSAid2ViY29udGFpbmVyIjsKICAgICAgZ2V0IHJlYWR5KCkgewogICAgICAgIHJldHVybiB0aGlzLl9yZWFkeTsKICAgICAgfQogICAgICBnZXQgY29udGFpbmVyKCkgewogICAgICAgIHJldHVybiBfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuc2hhcmVkQ29udGFpbmVyOwogICAgICB9CiAgICAgIC8vID09PT09PT09PT09PSBMaWZlY3ljbGUgPT09PT09PT09PT09CiAgICAgIGFzeW5jIGluaXQoKSB7CiAgICAgICAgaWYgKHRoaXMuX3JlYWR5ICYmIF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5zaGFyZWRDb250YWluZXIpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5ib290UHJvbWlzZSkgewogICAgICAgICAgYXdhaXQgX1dlYkNvbnRhaW5lckVudmlyb25tZW50LmJvb3RQcm9taXNlOwogICAgICAgICAgdGhpcy5fcmVhZHkgPSB0cnVlOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoX1dlYkNvbnRhaW5lckVudmlyb25tZW50LnNoYXJlZENvbnRhaW5lcikgewogICAgICAgICAgdGhpcy5fcmVhZHkgPSB0cnVlOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAidW5kZWZpbmVkIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXZWJDb250YWluZXIgcmVxdWlyZXMgU2hhcmVkQXJyYXlCdWZmZXIgd2hpY2ggaXMgbm90IGF2YWlsYWJsZS4gRW5zdXJlIHlvdXIgc2VydmVyIHNlbmRzIHRoZXNlIGhlYWRlcnM6XG4gIENyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5OiBzYW1lLW9yaWdpblxuICBDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5OiByZXF1aXJlLWNvcnAiKTsKICAgICAgICB9CiAgICAgICAgX1dlYkNvbnRhaW5lckVudmlyb25tZW50LmJvb3RQcm9taXNlID0gV2ViQ29udGFpbmVyLmJvb3QoKTsKICAgICAgICB0cnkgewogICAgICAgICAgX1dlYkNvbnRhaW5lckVudmlyb25tZW50LnNoYXJlZENvbnRhaW5lciA9IGF3YWl0IF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5ib290UHJvbWlzZTsKICAgICAgICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgX1dlYkNvbnRhaW5lckVudmlyb25tZW50LmJvb3RQcm9taXNlID0gbnVsbDsKICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBkZXN0cm95KCkgewogICAgICAgIGlmIChfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuc2hhcmVkQ29udGFpbmVyKSB7CiAgICAgICAgICBfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuc2hhcmVkQ29udGFpbmVyLnRlYXJkb3duKCk7CiAgICAgICAgICBfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuc2hhcmVkQ29udGFpbmVyID0gbnVsbDsKICAgICAgICAgIF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5ib290UHJvbWlzZSA9IG51bGw7CiAgICAgICAgICB0aGlzLl9yZWFkeSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyA9PT09PT09PT09PT0gRmlsZXN5c3RlbSBPcGVyYXRpb25zID09PT09PT09PT09PQogICAgICBhc3luYyByZWFkRmlsZShwYXRoMikgewogICAgICAgIHRoaXMuZW5zdXJlUmVhZHkoKTsKICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb250YWluZXIuZnMucmVhZEZpbGUocGF0aDIsICJ1dGYtOCIpOwogICAgICB9CiAgICAgIGFzeW5jIHdyaXRlRmlsZShwYXRoMiwgY29udGVudHMpIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgYXdhaXQgdGhpcy5jb250YWluZXIuZnMud3JpdGVGaWxlKHBhdGgyLCBjb250ZW50cywgInV0Zi04Iik7CiAgICAgIH0KICAgICAgYXN5bmMgcmVhZERpcihwYXRoMikgewogICAgICAgIHRoaXMuZW5zdXJlUmVhZHkoKTsKICAgICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5jb250YWluZXIuZnMucmVhZGRpcihwYXRoMiwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pOwogICAgICAgIHJldHVybiBlbnRyaWVzLm1hcCgoZW50cnkpID0+ICh7CiAgICAgICAgICB0eXBlOiBlbnRyeS5pc0RpcmVjdG9yeSgpID8gImRpcmVjdG9yeSIgOiAiZmlsZSIsCiAgICAgICAgICBuYW1lOiBlbnRyeS5uYW1lLAogICAgICAgICAgcGF0aDogcGF0aDIgPT09ICIvIiA/IGAvJHtlbnRyeS5uYW1lfWAgOiBgJHtwYXRoMn0vJHtlbnRyeS5uYW1lfWAKICAgICAgICB9KSk7CiAgICAgIH0KICAgICAgYXN5bmMgbWtkaXIocGF0aDIpIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgYXdhaXQgdGhpcy5jb250YWluZXIuZnMubWtkaXIocGF0aDIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pOwogICAgICB9CiAgICAgIGFzeW5jIHJtKHBhdGgyLCBvcHRpb25zKSB7CiAgICAgICAgdGhpcy5lbnN1cmVSZWFkeSgpOwogICAgICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLnJtKHBhdGgyLCB7IHJlY3Vyc2l2ZTogb3B0aW9ucz8ucmVjdXJzaXZlID8/IGZhbHNlIH0pOwogICAgICB9CiAgICAgIGFzeW5jIGV4aXN0cyhwYXRoMikgewogICAgICAgIHRoaXMuZW5zdXJlUmVhZHkoKTsKICAgICAgICB0cnkgewogICAgICAgICAgYXdhaXQgdGhpcy5jb250YWluZXIuZnMucmVhZEZpbGUocGF0aDIpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBhd2FpdCB0aGlzLmNvbnRhaW5lci5mcy5yZWFkZGlyKHBhdGgyKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICB3YXRjaChwYXRoMiwgY2FsbGJhY2ssIG9wdGlvbnMpIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgY29uc3Qgd2F0Y2hlciA9IHRoaXMuY29udGFpbmVyLmZzLndhdGNoKHBhdGgyLCB7IHJlY3Vyc2l2ZTogb3B0aW9ucz8ucmVjdXJzaXZlID8/IGZhbHNlIH0sIGNhbGxiYWNrKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgc3RvcDogKCkgPT4gd2F0Y2hlci5jbG9zZSgpCiAgICAgICAgfTsKICAgICAgfQogICAgICAvLyA9PT09PT09PT09PT0gUHJvY2VzcyBFeGVjdXRpb24gPT09PT09PT09PT09CiAgICAgIGFzeW5jIHNwYXduKGNvbW1hbmQsIGFyZ3MgPSBbXSkgewogICAgICAgIHRoaXMuZW5zdXJlUmVhZHkoKTsKICAgICAgICBjb25zdCBwcm9jZXNzNCA9IGF3YWl0IHRoaXMuY29udGFpbmVyLnNwYXduKGNvbW1hbmQsIGFyZ3MpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBvdXRwdXQ6IHByb2Nlc3M0Lm91dHB1dCwKICAgICAgICAgIGlucHV0OiBwcm9jZXNzNC5pbnB1dCwKICAgICAgICAgIGV4aXQ6IHByb2Nlc3M0LmV4aXQsCiAgICAgICAgICBraWxsOiAoKSA9PiBwcm9jZXNzNC5raWxsKCkKICAgICAgICB9OwogICAgICB9CiAgICAgIC8vID09PT09PT09PT09PSBXZWJDb250YWluZXItc3BlY2lmaWMgbWV0aG9kcyA9PT09PT09PT09PT0KICAgICAgLyoqCiAgICAgICAqIE1vdW50IGZpbGVzIGludG8gdGhlIHZpcnR1YWwgZmlsZXN5c3RlbS4KICAgICAgICogVGhpcyBpcyBhIFdlYkNvbnRhaW5lci1zcGVjaWZpYyBvcGVyYXRpb24uCiAgICAgICAqIEBwYXJhbSBmaWxlcyAtIEZpbGUgdHJlZSBzdHJ1Y3R1cmUgdG8gbW91bnQKICAgICAgICovCiAgICAgIGFzeW5jIG1vdW50KGZpbGVzKSB7CiAgICAgICAgdGhpcy5lbnN1cmVSZWFkeSgpOwogICAgICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLm1vdW50KGZpbGVzKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSB1bmRlcmx5aW5nIFdlYkNvbnRhaW5lciBpbnN0YW5jZS4KICAgICAgICogVXNlIHNwYXJpbmdseSAtIHByZWZlciB0aGUgaW50ZXJmYWNlIG1ldGhvZHMuCiAgICAgICAqLwogICAgICBnZXRDb250YWluZXIoKSB7CiAgICAgICAgdGhpcy5lbnN1cmVSZWFkeSgpOwogICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjsKICAgICAgfQogICAgICAvLyA9PT09PT09PT09PT0gUHJpdmF0ZSBIZWxwZXJzID09PT09PT09PT09PQogICAgICBlbnN1cmVSZWFkeSgpIHsKICAgICAgICBpZiAoIXRoaXMuX3JlYWR5IHx8ICF0aGlzLmNvbnRhaW5lcikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXZWJDb250YWluZXJFbnZpcm9ubWVudCBub3QgaW5pdGlhbGl6ZWQuIENhbGwgaW5pdCgpIGZpcnN0LiIpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvZW52aXJvbm1lbnRzL2luZGV4LmpzCnZhciBpbml0X2Vudmlyb25tZW50cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvZW52aXJvbm1lbnRzL2luZGV4LmpzIigpIHsKICAgIGluaXRfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvaW5kZXguanMKdmFyIGluaXRfZ3JvdXBfcnVudGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvaW5kZXguanMiKCkgewogICAgaW5pdF9pbnRlcmZhY2VzMygpOwogICAgaW5pdF9lbnZpcm9ubWVudHMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWFjdGlvbmJhci9kZWVzLWFjdGlvbmJhci5qcwp2YXIgX19lc0RlY29yYXRlNTAsIF9fcnVuSW5pdGlhbGl6ZXJzNTEsIERlZXNBY3Rpb25iYXI7CnZhciBpbml0X2RlZXNfYWN0aW9uYmFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtYWN0aW9uYmFyL2RlZXMtYWN0aW9uYmFyLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI2KCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBpbml0X2RlZXNfaWNvbigpOwogICAgX19lc0RlY29yYXRlNTAgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM1MSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0FjdGlvbmJhciA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWFjdGlvbmJhciIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfY3VycmVudEJhcl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2N1cnJlbnRCYXJfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY3VycmVudEJhcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RpbWVSZW1haW5pbmdfZGVjb3JhdG9yczsKICAgICAgbGV0IF90aW1lUmVtYWluaW5nX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RpbWVSZW1haW5pbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wcm9ncmVzc1BlcmNlbnRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9wcm9ncmVzc1BlcmNlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcHJvZ3Jlc3NQZXJjZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNWaXNpYmxlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaXNWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0FjdGlvbmJhcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9jdXJyZW50QmFyX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfdGltZVJlbWFpbmluZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3Byb2dyZXNzUGVyY2VudF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2lzVmlzaWJsZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlNTAodGhpcywgbnVsbCwgX2N1cnJlbnRCYXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VycmVudEJhciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudEJhciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50QmFyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY3VycmVudEJhciA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudEJhcl9pbml0aWFsaXplcnMsIF9jdXJyZW50QmFyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUwKHRoaXMsIG51bGwsIF90aW1lUmVtYWluaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRpbWVSZW1haW5pbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRpbWVSZW1haW5pbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGltZVJlbWFpbmluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnRpbWVSZW1haW5pbmcgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RpbWVSZW1haW5pbmdfaW5pdGlhbGl6ZXJzLCBfdGltZVJlbWFpbmluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MCh0aGlzLCBudWxsLCBfcHJvZ3Jlc3NQZXJjZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInByb2dyZXNzUGVyY2VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicHJvZ3Jlc3NQZXJjZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnByb2dyZXNzUGVyY2VudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnByb2dyZXNzUGVyY2VudCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcHJvZ3Jlc3NQZXJjZW50X2luaXRpYWxpemVycywgX3Byb2dyZXNzUGVyY2VudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MCh0aGlzLCBudWxsLCBfaXNWaXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzVmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNWaXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzVmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmlzVmlzaWJsZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNWaXNpYmxlX2luaXRpYWxpemVycywgX2lzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzQWN0aW9uYmFyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICAvLyBTVEFUSUMKICAgICAgICBzdGF0aWMgZGVtbyA9ICgpID0+IHsKICAgICAgICAgIGNvbnN0IGdldEFjdGlvbmJhciA9IChlMTEpID0+IHsKICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZTExLmN1cnJlbnRUYXJnZXQ7CiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGJ1dHRvbi5jbG9zZXN0KCIuZGVtby1jb250YWluZXIiKTsKICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcj8ucXVlcnlTZWxlY3RvcigiZGVlcy1hY3Rpb25iYXIiKTsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCBzaG93QWN0aW9uQmFyID0gYXN5bmMgKGUxMSkgPT4gewogICAgICAgICAgICBjb25zdCBhY3Rpb25iYXIgPSBnZXRBY3Rpb25iYXIoZTExKTsKICAgICAgICAgICAgaWYgKCFhY3Rpb25iYXIpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhY3Rpb25iYXIuc2hvdyh7CiAgICAgICAgICAgICAgbWVzc2FnZTogIkZpbGUgY2hhbmdlZCBleHRlcm5hbGx5LiBSZWxvYWQ/IiwKICAgICAgICAgICAgICB0eXBlOiAid2FybmluZyIsCiAgICAgICAgICAgICAgaWNvbjogImx1Y2lkZTphbGVydFRyaWFuZ2xlIiwKICAgICAgICAgICAgICBhY3Rpb25zOiBbCiAgICAgICAgICAgICAgICB7IGlkOiAicmVsb2FkIiwgbGFiZWw6ICJSZWxvYWQiLCBwcmltYXJ5OiB0cnVlIH0sCiAgICAgICAgICAgICAgICB7IGlkOiAiaWdub3JlIiwgbGFiZWw6ICJJZ25vcmUiIH0KICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgIHRpbWVvdXQ6IHsgZHVyYXRpb246IDVlMywgZGVmYXVsdEFjdGlvbklkOiAicmVsb2FkIiB9LAogICAgICAgICAgICAgIGRpc21pc3NpYmxlOiB0cnVlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zb2xlLmxvZygiQWN0aW9uIGJhciByZXN1bHQ6IiwgcmVzdWx0KTsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCBzaG93RXJyb3JCYXIgPSBhc3luYyAoZTExKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGFjdGlvbmJhciA9IGdldEFjdGlvbmJhcihlMTEpOwogICAgICAgICAgICBpZiAoIWFjdGlvbmJhcikKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFjdGlvbmJhci5zaG93KHsKICAgICAgICAgICAgICBtZXNzYWdlOiAiUHJvY2VzcyBmYWlsZWQgd2l0aCBleGl0IGNvZGUgMSIsCiAgICAgICAgICAgICAgdHlwZTogImVycm9yIiwKICAgICAgICAgICAgICBpY29uOiAibHVjaWRlOnhDaXJjbGUiLAogICAgICAgICAgICAgIGFjdGlvbnM6IFsKICAgICAgICAgICAgICAgIHsgaWQ6ICJyZXRyeSIsIGxhYmVsOiAiUmV0cnkiLCBwcmltYXJ5OiB0cnVlIH0sCiAgICAgICAgICAgICAgICB7IGlkOiAiZGlzbWlzcyIsIGxhYmVsOiAiRGlzbWlzcyIgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgdGltZW91dDogeyBkdXJhdGlvbjogMWU0LCBkZWZhdWx0QWN0aW9uSWQ6ICJkaXNtaXNzIiB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zb2xlLmxvZygiRXJyb3IgYmFyIHJlc3VsdDoiLCByZXN1bHQpOwogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IHNob3dRdWVzdGlvbkJhciA9IGFzeW5jIChlMTEpID0+IHsKICAgICAgICAgICAgY29uc3QgYWN0aW9uYmFyID0gZ2V0QWN0aW9uYmFyKGUxMSk7CiAgICAgICAgICAgIGlmICghYWN0aW9uYmFyKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWN0aW9uYmFyLnNob3coewogICAgICAgICAgICAgIG1lc3NhZ2U6ICJTYXZlIGNoYW5nZXMgYmVmb3JlIGNsb3Npbmc/IiwKICAgICAgICAgICAgICB0eXBlOiAicXVlc3Rpb24iLAogICAgICAgICAgICAgIGljb246ICJsdWNpZGU6aGVscENpcmNsZSIsCiAgICAgICAgICAgICAgYWN0aW9uczogWwogICAgICAgICAgICAgICAgeyBpZDogInNhdmUiLCBsYWJlbDogIlNhdmUiLCBwcmltYXJ5OiB0cnVlIH0sCiAgICAgICAgICAgICAgICB7IGlkOiAiZGlzY2FyZCIsIGxhYmVsOiAiRGlzY2FyZCIgfSwKICAgICAgICAgICAgICAgIHsgaWQ6ICJjYW5jZWwiLCBsYWJlbDogIkNhbmNlbCIgfQogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJRdWVzdGlvbiBiYXIgcmVzdWx0OiIsIHJlc3VsdCk7CiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzM7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KICAgICAgICAuZGVtby1jb250ZW50IHsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb250ZW50Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHtzaG93QWN0aW9uQmFyfT5XYXJuaW5nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHtzaG93RXJyb3JCYXJ9PkVycm9yPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHtzaG93UXVlc3Rpb25CYXJ9PlF1ZXN0aW9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGVlcy1hY3Rpb25iYXI+PC9kZWVzLWFjdGlvbmJhcj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH07CiAgICAgICAgLy8gUXVldWUgb2YgcGVuZGluZyBhY3Rpb24gYmFycwogICAgICAgIHF1ZXVlID0gW107CiAgICAgICAgI2N1cnJlbnRCYXJfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTEodGhpcywgX2N1cnJlbnRCYXJfaW5pdGlhbGl6ZXJzLCBudWxsKTsKICAgICAgICAvLyBDdXJyZW50IGFjdGl2ZSBiYXIgc3RhdGUKICAgICAgICBnZXQgY3VycmVudEJhcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjdXJyZW50QmFyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjdXJyZW50QmFyKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jY3VycmVudEJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdGltZVJlbWFpbmluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTEodGhpcywgX2N1cnJlbnRCYXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUxKHRoaXMsIF90aW1lUmVtYWluaW5nX2luaXRpYWxpemVycywgMCkpOwogICAgICAgIGdldCB0aW1lUmVtYWluaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3RpbWVSZW1haW5pbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHRpbWVSZW1haW5pbmcodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0aW1lUmVtYWluaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNwcm9ncmVzc1BlcmNlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUxKHRoaXMsIF90aW1lUmVtYWluaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1MSh0aGlzLCBfcHJvZ3Jlc3NQZXJjZW50X2luaXRpYWxpemVycywgMTAwKSk7CiAgICAgICAgZ2V0IHByb2dyZXNzUGVyY2VudCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNwcm9ncmVzc1BlcmNlbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHByb2dyZXNzUGVyY2VudCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3Byb2dyZXNzUGVyY2VudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaXNWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1MSh0aGlzLCBfcHJvZ3Jlc3NQZXJjZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1MSh0aGlzLCBfaXNWaXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgaXNWaXNpYmxlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2lzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXNWaXNpYmxlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaXNWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vIFRpbWVvdXQgaGFuZGxpbmcKICAgICAgICB0aW1lb3V0SW50ZXJ2YWwgPSAoX19ydW5Jbml0aWFsaXplcnM1MSh0aGlzLCBfaXNWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAgICAgY3VycmVudFJlc29sdmUgPSBudWxsOwogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5hY3Rpb25iYXItaXRlbSB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDBmcjsKICAgICAgICB0cmFuc2l0aW9uOiBncmlkLXRlbXBsYXRlLXJvd3MgMC4ycyBlYXNlLW91dDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsICJoc2woMCAwJSAxMiUpIil9OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICB9CgogICAgICA6aG9zdCgudmlzaWJsZSkgLmFjdGlvbmJhci1pdGVtIHsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjsKICAgICAgfQoKICAgICAgLmFjdGlvbmJhci1jb250ZW50IHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZS1vdXQ7CiAgICAgIH0KCiAgICAgIDpob3N0KC52aXNpYmxlKSAuYWN0aW9uYmFyLWNvbnRlbnQgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzcy1iYXIgewogICAgICAgIGhlaWdodDogM3B4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDE4JSkiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnByb2dyZXNzLWJhci1maWxsIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA1MCUpIiwgImhzbCgyMTAgMTAwJSA2MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMXMgbGluZWFyOwogICAgICB9CgogICAgICAucHJvZ3Jlc3MtYmFyLWZpbGwud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgzOCA5MiUgNTAlKSIsICJoc2woMzggOTIlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzcy1iYXItZmlsbC5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcwJSA1MCUpIiwgImhzbCgwIDcwJSA1NSUpIil9OwogICAgICB9CgogICAgICAucHJvZ3Jlc3MtYmFyLWZpbGwucXVlc3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjcwIDcwJSA1MCUpIiwgImhzbCgyNzAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5jb250ZW50IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDMycHg7CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLXNlY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLm1lc3NhZ2UtaWNvbiB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24uaW5mbyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNDUlKSIsICJoc2woMjEwIDEwMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLm1lc3NhZ2UtaWNvbi53YXJuaW5nIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgzOCA5MiUgNDUlKSIsICJoc2woMzggOTIlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24uZXJyb3IgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24ucXVlc3Rpb24gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI3MCA3MCUgNTAlKSIsICJoc2woMjcwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICAubWVzc2FnZS10ZXh0IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDg1JSkiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAuYWN0aW9ucy1zZWN0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDEwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5zZWNvbmRhcnkgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA3MCUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDgwJSkiLCAiaHNsKDAgMCUgMzAlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uc2Vjb25kYXJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTIlKSIsICJoc2woMCAwJSAxOCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDUwJSkiLCAiaHNsKDIxMCAxMDAlIDU1JSkiKX07CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDQ1JSkiLCAiaHNsKDIxMCAxMDAlIDUwJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnByaW1hcnkud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgzOCA5MiUgNDUlKSIsICJoc2woMzggOTIlIDUwJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnByaW1hcnkud2FybmluZzpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgzOCA5MiUgNDAlKSIsICJoc2woMzggOTIlIDQ1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnByaW1hcnkuZXJyb3IgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MCUgNTAlKSIsICJoc2woMCA3MCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24ucHJpbWFyeS5lcnJvcjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcwJSA0NSUpIiwgImhzbCgwIDcwJSA1MCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5LnF1ZXN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI3MCA3MCUgNTAlKSIsICJoc2woMjcwIDcwJSA1NSUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5LnF1ZXN0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI3MCA3MCUgNDUlKSIsICJoc2woMjcwIDcwJSA1MCUpIil9OwogICAgICB9CgogICAgICAuY291bnRkb3duIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIC5kaXNtaXNzLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA1MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuZGlzbWlzcy1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwgImhzbCgwIDAlIDIyJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzMCUpIiwgImhzbCgwIDAlIDcwJSkiKX07CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIGNvbnN0IGJhciA9IHRoaXMuY3VycmVudEJhcjsKICAgICAgICAgIGNvbnN0IHR5cGU1ID0gYmFyPy50eXBlIHx8ICJpbmZvIjsKICAgICAgICAgIGNvbnN0IGhhc1RpbWVvdXQgPSBiYXI/LnRpbWVvdXQgJiYgdGhpcy50aW1lUmVtYWluaW5nID4gMDsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uYmFyLWl0ZW0iPgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbmJhci1jb250ZW50Ij4KICAgICAgICAgICR7YmFyID8gYjJgCiAgICAgICAgICAgICR7aGFzVGltZW91dCA/IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzLWJhciI+CiAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJwcm9ncmVzcy1iYXItZmlsbCAke3R5cGU1fSIKICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAke3RoaXMucHJvZ3Jlc3NQZXJjZW50fSUiCiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVzc2FnZS1zZWN0aW9uIj4KICAgICAgICAgICAgICAgICR7YmFyLmljb24gPyBiMmAKICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtZXNzYWdlLWljb24gJHt0eXBlNX0iCiAgICAgICAgICAgICAgICAgICAgLmljb249JHtiYXIuaWNvbn0KICAgICAgICAgICAgICAgICAgICBpY29uU2l6ZT0iMTYiCiAgICAgICAgICAgICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXNzYWdlLXRleHQiPiR7YmFyLm1lc3NhZ2V9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbnMtc2VjdGlvbiI+CiAgICAgICAgICAgICAgICAke2Jhci5hY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB0aGlzLnJlbmRlckFjdGlvbkJ1dHRvbihhY3Rpb24sIGJhciwgaGFzVGltZW91dCkpfQogICAgICAgICAgICAgICAgJHtiYXIuZGlzbWlzc2libGUgPyBiMmAKICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJkaXNtaXNzLWJ1dHRvbiIKICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmhhbmRsZURpc21pc3MoKX0KICAgICAgICAgICAgICAgICAgICB0aXRsZT0iRGlzbWlzcyIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOngifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgcmVuZGVyQWN0aW9uQnV0dG9uKGFjdGlvbiwgYmFyLCBoYXNUaW1lb3V0KSB7CiAgICAgICAgICBjb25zdCBpc1ByaW1hcnkgPSBhY3Rpb24ucHJpbWFyeTsKICAgICAgICAgIGNvbnN0IHR5cGU1ID0gYmFyLnR5cGUgfHwgImluZm8iOwogICAgICAgICAgY29uc3QgaXNEZWZhdWx0QWN0aW9uID0gYmFyLnRpbWVvdXQ/LmRlZmF1bHRBY3Rpb25JZCA9PT0gYWN0aW9uLmlkOwogICAgICAgICAgY29uc3Qgc2hvd0NvdW50ZG93biA9IGhhc1RpbWVvdXQgJiYgaXNEZWZhdWx0QWN0aW9uOwogICAgICAgICAgY29uc3Qgc2Vjb25kcyA9IE1hdGguY2VpbCh0aGlzLnRpbWVSZW1haW5pbmcgLyAxZTMpOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8YnV0dG9uCiAgICAgICAgY2xhc3M9ImFjdGlvbi1idXR0b24gJHtpc1ByaW1hcnkgPyBgcHJpbWFyeSAke3R5cGU1fWAgOiAic2Vjb25kYXJ5In0iCiAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVBY3Rpb24oYWN0aW9uLmlkLCBmYWxzZSl9CiAgICAgID4KICAgICAgICAke2FjdGlvbi5pY29uID8gYjJgCiAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7YWN0aW9uLmljb259IGljb25TaXplPSIxMiI+PC9kZWVzLWljb24+CiAgICAgICAgYCA6ICIifQogICAgICAgIDxzcGFuPiR7YWN0aW9uLmxhYmVsfTwvc3Bhbj4KICAgICAgICAke3Nob3dDb3VudGRvd24gPyBiMmAKICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb3VudGRvd24iPigke3NlY29uZHN9cyk8L3NwYW4+CiAgICAgICAgYCA6ICIifQogICAgICA8L2J1dHRvbj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT0gUHVibGljIEFQSSA9PT09PT09PT09CiAgICAgICAgLyoqCiAgICAgICAgICogU2hvdyBhbiBhY3Rpb24gYmFyIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuCiAgICAgICAgICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGFuIGFjdGlvbiBpcyB0YWtlbi4KICAgICAgICAgKi8KICAgICAgICBhc3luYyBzaG93KG9wdGlvbnMpIHsKICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgICAgICAgICAgdGhpcy5xdWV1ZS5wdXNoKHsgb3B0aW9ucywgcmVzb2x2ZTogcmVzb2x2ZTIgfSk7CiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50QmFyKSB7CiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIERpc21pc3MgdGhlIGN1cnJlbnQgYWN0aW9uIGJhciB3aXRob3V0IHRyaWdnZXJpbmcgYW55IGFjdGlvbi4KICAgICAgICAgKi8KICAgICAgICBkaXNtaXNzKCkgewogICAgICAgICAgdGhpcy5oYW5kbGVEaXNtaXNzKCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIENsZWFyIGFsbCBwZW5kaW5nIGFjdGlvbiBiYXJzIGluIHRoZSBxdWV1ZS4KICAgICAgICAgKi8KICAgICAgICBjbGVhclF1ZXVlKCkgewogICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMucXVldWUpIHsKICAgICAgICAgICAgaXRlbS5yZXNvbHZlKHsgYWN0aW9uSWQ6ICJkaXNtaXNzZWQiLCB0aW1lZE91dDogZmFsc2UgfSk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnF1ZXVlID0gW107CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT0gUHJpdmF0ZSBNZXRob2RzID09PT09PT09PT0KICAgICAgICAvKioKICAgICAgICAgKiBIaWRlIHRoZSBjdXJyZW50IGFjdGlvbmJhciB3aXRoIGFuaW1hdGlvbi4KICAgICAgICAgKiBSZW1vdmVzIHZpc2libGUgY2xhc3MgZmlyc3QgdG8gdHJpZ2dlciBDU1MgdHJhbnNpdGlvbiwgdGhlbiBjbGVhcnMgY29udGVudCBhZnRlciBhbmltYXRpb24uCiAgICAgICAgICovCiAgICAgICAgYXN5bmMgaGlkZUN1cnJlbnRCYXIoKSB7CiAgICAgICAgICB0aGlzLmNsYXNzTGlzdC5yZW1vdmUoInZpc2libGUiKTsKICAgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7CiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDIyMCkpOwogICAgICAgICAgdGhpcy5jdXJyZW50QmFyID0gbnVsbDsKICAgICAgICAgIHRoaXMuY3VycmVudFJlc29sdmUgPSBudWxsOwogICAgICAgIH0KICAgICAgICBhc3luYyBwcm9jZXNzUXVldWUoKSB7CiAgICAgICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgdGhpcy5oaWRlQ3VycmVudEJhcigpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5xdWV1ZS5zaGlmdCgpOwogICAgICAgICAgdGhpcy5jdXJyZW50QmFyID0gaXRlbS5vcHRpb25zOwogICAgICAgICAgdGhpcy5jdXJyZW50UmVzb2x2ZSA9IGl0ZW0ucmVzb2x2ZTsKICAgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTsKICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgICB0aGlzLmNsYXNzTGlzdC5hZGQoInZpc2libGUiKTsKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGl0ZW0ub3B0aW9ucy50aW1lb3V0KSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lb3V0KGl0ZW0ub3B0aW9ucy50aW1lb3V0LmR1cmF0aW9uLCBpdGVtLm9wdGlvbnMudGltZW91dC5kZWZhdWx0QWN0aW9uSWQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGFydFRpbWVvdXQoZHVyYXRpb24sIGRlZmF1bHRBY3Rpb25JZCkgewogICAgICAgICAgdGhpcy50aW1lUmVtYWluaW5nID0gZHVyYXRpb247CiAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudCA9IDEwMDsKICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7CiAgICAgICAgICBjb25zdCB1cGRhdGVJbnRlcnZhbCA9IDUwOwogICAgICAgICAgdGhpcy50aW1lb3V0SW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lOwogICAgICAgICAgICB0aGlzLnRpbWVSZW1haW5pbmcgPSBNYXRoLm1heCgwLCBkdXJhdGlvbiAtIGVsYXBzZWQpOwogICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudCA9IHRoaXMudGltZVJlbWFpbmluZyAvIGR1cmF0aW9uICogMTAwOwogICAgICAgICAgICBpZiAodGhpcy50aW1lUmVtYWluaW5nIDw9IDApIHsKICAgICAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dEludGVydmFsKCk7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb24oZGVmYXVsdEFjdGlvbklkLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgdXBkYXRlSW50ZXJ2YWwpOwogICAgICAgIH0KICAgICAgICBjbGVhclRpbWVvdXRJbnRlcnZhbCgpIHsKICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXRJbnRlcnZhbCkgewogICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMudGltZW91dEludGVydmFsKTsKICAgICAgICAgICAgdGhpcy50aW1lb3V0SW50ZXJ2YWwgPSBudWxsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBoYW5kbGVBY3Rpb24oYWN0aW9uSWQsIHRpbWVkT3V0KSB7CiAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dEludGVydmFsKCk7CiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UmVzb2x2ZSkgewogICAgICAgICAgICB0aGlzLmN1cnJlbnRSZXNvbHZlKHsgYWN0aW9uSWQsIHRpbWVkT3V0IH0pOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlRGlzbWlzcygpIHsKICAgICAgICAgIHRoaXMuaGFuZGxlQWN0aW9uKCJkaXNtaXNzZWQiLCBmYWxzZSk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIHRoaXMuY2xlYXJUaW1lb3V0SW50ZXJ2YWwoKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTEoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNBY3Rpb25iYXIyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwvdGVybWluYWwtdGFiLW1hbmFnZXIuanMKdmFyIFRlcm1pbmFsVGFiTWFuYWdlcjsKdmFyIGluaXRfdGVybWluYWxfdGFiX21hbmFnZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwvdGVybWluYWwtdGFiLW1hbmFnZXIuanMiKCkgewogICAgVGVybWluYWxUYWJNYW5hZ2VyID0gY2xhc3MgewogICAgICB0YWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgdGFiQ291bnRlciA9IDA7CiAgICAgIHh0ZXJtQnVuZGxlID0gbnVsbDsKICAgICAgeHRlcm1GaXRBZGRvbkJ1bmRsZSA9IG51bGw7CiAgICAgIC8qKgogICAgICAgKiBJbml0aWFsaXplIHRoZSBtYW5hZ2VyIHdpdGggbG9hZGVkIHh0ZXJtIG1vZHVsZXMuCiAgICAgICAqIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBjcmVhdGluZyB0YWJzLgogICAgICAgKi8KICAgICAgc2V0WHRlcm1Nb2R1bGVzKHh0ZXJtQnVuZGxlLCBmaXRBZGRvbkJ1bmRsZSkgewogICAgICAgIHRoaXMueHRlcm1CdW5kbGUgPSB4dGVybUJ1bmRsZTsKICAgICAgICB0aGlzLnh0ZXJtRml0QWRkb25CdW5kbGUgPSBmaXRBZGRvbkJ1bmRsZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2VuZXJhdGUgdW5pcXVlIHRhYiBJRAogICAgICAgKi8KICAgICAgZ2VuZXJhdGVUYWJJZCgpIHsKICAgICAgICB0aGlzLnRhYkNvdW50ZXIrKzsKICAgICAgICByZXR1cm4gYHRlcm1pbmFsLSR7dGhpcy50YWJDb3VudGVyfS0ke0RhdGUubm93KCl9YDsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IGRlZmF1bHQgbGFiZWwgZm9yIHRhYiB0eXBlCiAgICAgICAqLwogICAgICBnZXREZWZhdWx0TGFiZWwodHlwZTUsIG1ldGFkYXRhKSB7CiAgICAgICAgc3dpdGNoICh0eXBlNSkgewogICAgICAgICAgY2FzZSAic2hlbGwiOgogICAgICAgICAgICByZXR1cm4gImJhc2giOwogICAgICAgICAgY2FzZSAic2NyaXB0IjoKICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhPy5zY3JpcHROYW1lIHx8ICJzY3JpcHQiOwogICAgICAgICAgY2FzZSAicGFja2FnZS11cGRhdGUiOgogICAgICAgICAgICByZXR1cm4gbWV0YWRhdGE/LnBhY2thZ2VOYW1lID8gYHVwZGF0ZSAke21ldGFkYXRhLnBhY2thZ2VOYW1lfWAgOiAidXBkYXRlIjsKICAgICAgICAgIGNhc2UgImN1c3RvbSI6CiAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YT8uY29tbWFuZCB8fCAicHJvY2VzcyI7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gInRlcm1pbmFsIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCBkZWZhdWx0IGljb24gZm9yIHRhYiB0eXBlCiAgICAgICAqLwogICAgICBnZXREZWZhdWx0SWNvbih0eXBlNSkgewogICAgICAgIHN3aXRjaCAodHlwZTUpIHsKICAgICAgICAgIGNhc2UgInNoZWxsIjoKICAgICAgICAgICAgcmV0dXJuICJsdWNpZGU6dGVybWluYWwiOwogICAgICAgICAgY2FzZSAic2NyaXB0IjoKICAgICAgICAgICAgcmV0dXJuICJsdWNpZGU6cGxheSI7CiAgICAgICAgICBjYXNlICJwYWNrYWdlLXVwZGF0ZSI6CiAgICAgICAgICAgIHJldHVybiAibHVjaWRlOnBhY2thZ2VDaGVjayI7CiAgICAgICAgICBjYXNlICJjdXN0b20iOgogICAgICAgICAgICByZXR1cm4gImx1Y2lkZTpjb2RlIjsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiAibHVjaWRlOnRlcm1pbmFsIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0ZXJtaW5hbCB0aGVtZSBjb25maWd1cmF0aW9uCiAgICAgICAqLwogICAgICBnZXRUZXJtaW5hbFRoZW1lKGlzQnJpZ2h0KSB7CiAgICAgICAgaWYgKGlzQnJpZ2h0KSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAiI2ZmZmZmZiIsCiAgICAgICAgICAgIGZvcmVncm91bmQ6ICIjMzMzMzMzIiwKICAgICAgICAgICAgY3Vyc29yOiAiIzMzMzMzMyIsCiAgICAgICAgICAgIGN1cnNvckFjY2VudDogIiNmZmZmZmYiLAogICAgICAgICAgICBzZWxlY3Rpb246ICJyZ2JhKDAsIDAsIDAsIDAuMikiLAogICAgICAgICAgICBibGFjazogIiMwMDAwMDAiLAogICAgICAgICAgICByZWQ6ICIjY2QzMTMxIiwKICAgICAgICAgICAgZ3JlZW46ICIjMDBiYzAwIiwKICAgICAgICAgICAgeWVsbG93OiAiIzk0OTgwMCIsCiAgICAgICAgICAgIGJsdWU6ICIjMDQ1MWE1IiwKICAgICAgICAgICAgbWFnZW50YTogIiNiYzA1YmMiLAogICAgICAgICAgICBjeWFuOiAiIzA1OThiYyIsCiAgICAgICAgICAgIHdoaXRlOiAiIzU1NTU1NSIsCiAgICAgICAgICAgIGJyaWdodEJsYWNrOiAiIzY2NjY2NiIsCiAgICAgICAgICAgIGJyaWdodFJlZDogIiNjZDMxMzEiLAogICAgICAgICAgICBicmlnaHRHcmVlbjogIiMxNGNlMTQiLAogICAgICAgICAgICBicmlnaHRZZWxsb3c6ICIjYjViYTAwIiwKICAgICAgICAgICAgYnJpZ2h0Qmx1ZTogIiMwNDUxYTUiLAogICAgICAgICAgICBicmlnaHRNYWdlbnRhOiAiI2JjMDViYyIsCiAgICAgICAgICAgIGJyaWdodEN5YW46ICIjMDU5OGJjIiwKICAgICAgICAgICAgYnJpZ2h0V2hpdGU6ICIjYTVhNWE1IgogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIiMwMDAwMDAiLAogICAgICAgICAgICBmb3JlZ3JvdW5kOiAiI2ZmZmZmZiIsCiAgICAgICAgICAgIGN1cnNvcjogIiNmZmZmZmYiLAogICAgICAgICAgICBjdXJzb3JBY2NlbnQ6ICIjMDAwMDAwIiwKICAgICAgICAgICAgc2VsZWN0aW9uOiAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIgogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhIG5ldyB0YWIgaW5zdGFuY2UKICAgICAgICovCiAgICAgIGNyZWF0ZVRhYihvcHRpb25zLCBpc0JyaWdodCkgewogICAgICAgIGlmICghdGhpcy54dGVybUJ1bmRsZSB8fCAhdGhpcy54dGVybUZpdEFkZG9uQnVuZGxlKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRlcm1pbmFsVGFiTWFuYWdlcjogeHRlcm0gbW9kdWxlcyBub3QgaW5pdGlhbGl6ZWQuIENhbGwgc2V0WHRlcm1Nb2R1bGVzKCkgZmlyc3QuIik7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZW5lcmF0ZVRhYklkKCk7CiAgICAgICAgY29uc3QgdHlwZTUgPSBvcHRpb25zLnR5cGU7CiAgICAgICAgY29uc3QgdGVybWluYWwgPSBuZXcgdGhpcy54dGVybUJ1bmRsZS5UZXJtaW5hbCh7CiAgICAgICAgICBjb252ZXJ0RW9sOiB0cnVlLAogICAgICAgICAgY3Vyc29yQmxpbms6IHRydWUsCiAgICAgICAgICB0aGVtZTogdGhpcy5nZXRUZXJtaW5hbFRoZW1lKGlzQnJpZ2h0KSwKICAgICAgICAgIGZvbnRGYW1pbHk6ICdNZW5sbywgTW9uYWNvLCAiQ291cmllciBOZXciLCBtb25vc3BhY2UnLAogICAgICAgICAgZm9udFNpemU6IDEzLAogICAgICAgICAgbGluZUhlaWdodDogMS4yCiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgZml0QWRkb24gPSBuZXcgdGhpcy54dGVybUZpdEFkZG9uQnVuZGxlLkZpdEFkZG9uKCk7CiAgICAgICAgdGVybWluYWwubG9hZEFkZG9uKGZpdEFkZG9uKTsKICAgICAgICBjb25zdCB0YWIyID0gewogICAgICAgICAgaWQsCiAgICAgICAgICBsYWJlbDogb3B0aW9ucy5sYWJlbCB8fCB0aGlzLmdldERlZmF1bHRMYWJlbCh0eXBlNSwgb3B0aW9ucy5tZXRhZGF0YSksCiAgICAgICAgICBpY29uTmFtZTogb3B0aW9ucy5pY29uTmFtZSB8fCB0aGlzLmdldERlZmF1bHRJY29uKHR5cGU1KSwKICAgICAgICAgIHR5cGU6IHR5cGU1LAogICAgICAgICAgY2xvc2VhYmxlOiBvcHRpb25zLmNsb3NlYWJsZSA/PyB0eXBlNSAhPT0gInNoZWxsIiwKICAgICAgICAgIHRlcm1pbmFsLAogICAgICAgICAgZml0QWRkb24sCiAgICAgICAgICBwcm9jZXNzOiBudWxsLAogICAgICAgICAgaW5wdXRXcml0ZXI6IG51bGwsCiAgICAgICAgICBleGl0ZWQ6IGZhbHNlLAogICAgICAgICAgZXhpdENvZGU6IG51bGwsCiAgICAgICAgICBjcmVhdGVkQXQ6IERhdGUubm93KCksCiAgICAgICAgICBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YQogICAgICAgIH07CiAgICAgICAgdGhpcy50YWJzLnNldChpZCwgdGFiMik7CiAgICAgICAgcmV0dXJuIHRhYjI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0YWIgYnkgSUQKICAgICAgICovCiAgICAgIGdldFRhYihpZCkgewogICAgICAgIHJldHVybiB0aGlzLnRhYnMuZ2V0KGlkKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IGFsbCB0YWJzIGFzIGFycmF5IChvcmRlcmVkIGJ5IGNyZWF0aW9uIHRpbWUpCiAgICAgICAqLwogICAgICBnZXRBbGxUYWJzKCkgewogICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMudGFicy52YWx1ZXMoKSkuc29ydCgoYTUsIGI1KSA9PiBhNS5jcmVhdGVkQXQgLSBiNS5jcmVhdGVkQXQpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGhlIG51bWJlciBvZiB0YWJzCiAgICAgICAqLwogICAgICBnZXRUYWJDb3VudCgpIHsKICAgICAgICByZXR1cm4gdGhpcy50YWJzLnNpemU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENoZWNrIGlmIHRhYiBleGlzdHMKICAgICAgICovCiAgICAgIGhhc1RhYihpZCkgewogICAgICAgIHJldHVybiB0aGlzLnRhYnMuaGFzKGlkKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ2xvc2UgYW5kIGNsZWFudXAgYSB0YWIKICAgICAgICovCiAgICAgIGNsb3NlVGFiKGlkKSB7CiAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFicy5nZXQoaWQpOwogICAgICAgIGlmICghdGFiMikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAodGFiMi5wcm9jZXNzICYmICF0YWIyLmV4aXRlZCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGFiMi5wcm9jZXNzLmtpbGwoKTsKICAgICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBraWxsIHByb2Nlc3M6IiwgZTExKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRhYjIudGVybWluYWwuZGlzcG9zZSgpOwogICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgY29uc29sZS53YXJuKCJGYWlsZWQgdG8gZGlzcG9zZSB0ZXJtaW5hbDoiLCBlMTEpOwogICAgICAgIH0KICAgICAgICB0aGlzLnRhYnMuZGVsZXRlKGlkKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVuYW1lIGEgdGFiCiAgICAgICAqLwogICAgICByZW5hbWVUYWIoaWQsIG5ld0xhYmVsKSB7CiAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFicy5nZXQoaWQpOwogICAgICAgIGlmICghdGFiMikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB0YWIyLmxhYmVsID0gbmV3TGFiZWw7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFVwZGF0ZSB0YWIgcHJvY2VzcyBzdGF0ZSB0byBleGl0ZWQKICAgICAgICovCiAgICAgIG1hcmtUYWJFeGl0ZWQoaWQsIGV4aXRDb2RlKSB7CiAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFicy5nZXQoaWQpOwogICAgICAgIGlmICghdGFiMikKICAgICAgICAgIHJldHVybjsKICAgICAgICB0YWIyLmV4aXRlZCA9IHRydWU7CiAgICAgICAgdGFiMi5leGl0Q29kZSA9IGV4aXRDb2RlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgcHJvY2VzcyBmb3IgYSB0YWIKICAgICAgICovCiAgICAgIHNldFRhYlByb2Nlc3MoaWQsIHByb2Nlc3M0LCBpbnB1dFdyaXRlcikgewogICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYnMuZ2V0KGlkKTsKICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgdGFiMi5wcm9jZXNzID0gcHJvY2VzczQ7CiAgICAgICAgdGFiMi5pbnB1dFdyaXRlciA9IGlucHV0V3JpdGVyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBVcGRhdGUgdGhlbWUgZm9yIGFsbCB0ZXJtaW5hbHMKICAgICAgICovCiAgICAgIHVwZGF0ZUFsbFRoZW1lcyhpc0JyaWdodCkgewogICAgICAgIGNvbnN0IHRoZW1lID0gdGhpcy5nZXRUZXJtaW5hbFRoZW1lKGlzQnJpZ2h0KTsKICAgICAgICBmb3IgKGNvbnN0IHRhYjIgb2YgdGhpcy50YWJzLnZhbHVlcygpKSB7CiAgICAgICAgICB0YWIyLnRlcm1pbmFsLm9wdGlvbnMudGhlbWUgPSB0aGVtZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIERpc3Bvc2UgYWxsIHRhYnMgYW5kIGNsZWFudXAKICAgICAgICovCiAgICAgIGRpc3Bvc2VBbGwoKSB7CiAgICAgICAgZm9yIChjb25zdCBbaWRdIG9mIHRoaXMudGFicykgewogICAgICAgICAgdGhpcy5jbG9zZVRhYihpZCk7CiAgICAgICAgfQogICAgICAgIHRoaXMudGFicy5jbGVhcigpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsLmpzCnZhciBkZWVzX3dvcmtzcGFjZV90ZXJtaW5hbF9leHBvcnRzID0ge307Cl9fZXhwb3J0KGRlZXNfd29ya3NwYWNlX3Rlcm1pbmFsX2V4cG9ydHMsIHsKICBEZWVzV29ya3NwYWNlVGVybWluYWw6ICgpID0+IERlZXNXb3Jrc3BhY2VUZXJtaW5hbAp9KTsKdmFyIF9fZXNEZWNvcmF0ZTUxLCBfX3J1bkluaXRpYWxpemVyczUyLCBEZWVzV29ya3NwYWNlVGVybWluYWw7CnZhciBpbml0X2RlZXNfd29ya3NwYWNlX3Rlcm1pbmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI2KCk7CiAgICBpbml0X2Rpc3RfdHMyNSgpOwogICAgaW5pdF90aGVtZSgpOwogICAgaW5pdF9ncm91cF9ydW50aW1lKCk7CiAgICBpbml0X2RlZXNfaWNvbigpOwogICAgaW5pdF9kZWVzX2FjdGlvbmJhcigpOwogICAgaW5pdF90ZXJtaW5hbF90YWJfbWFuYWdlcigpOwogICAgaW5pdF9zZXJ2aWNlcygpOwogICAgX19lc0RlY29yYXRlNTEgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM1MiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc1dvcmtzcGFjZVRlcm1pbmFsID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtd29ya3NwYWNlLXRlcm1pbmFsIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2V0dXBDb21tYW5kX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2V0dXBDb21tYW5kX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NldHVwQ29tbWFuZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Vudmlyb25tZW50VmFyaWFibGVzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZW52aXJvbm1lbnRWYXJpYWJsZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZW52aXJvbm1lbnRWYXJpYWJsZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YWJCYXJXaWR0aF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3RhYkJhcldpZHRoX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RhYkJhcldpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd1RhYkJhcl9kZWNvcmF0b3JzOwogICAgICBsZXQgX3Nob3dUYWJCYXJfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd1RhYkJhcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RhYnNfZGVjb3JhdG9yczsKICAgICAgbGV0IF90YWJzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hY3RpdmVUYWJJZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2FjdGl2ZVRhYklkX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FjdGl2ZVRhYklkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzV29ya3NwYWNlVGVybWluYWwyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgICAgICBfc2V0dXBDb21tYW5kX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgICAgICBfZW52aXJvbm1lbnRWYXJpYWJsZXNfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgICAgIF90YWJCYXJXaWR0aF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9zaG93VGFiQmFyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfYWN0aXZlVGFiSWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUxKHRoaXMsIG51bGwsIF9leGVjdXRpb25FbnZpcm9ubWVudF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJleGVjdXRpb25FbnZpcm9ubWVudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZXhlY3V0aW9uRW52aXJvbm1lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZXhlY3V0aW9uRW52aXJvbm1lbnQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5leGVjdXRpb25FbnZpcm9ubWVudCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTEodGhpcywgbnVsbCwgX3NldHVwQ29tbWFuZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZXR1cENvbW1hbmQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNldHVwQ29tbWFuZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZXR1cENvbW1hbmQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zZXR1cENvbW1hbmQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NldHVwQ29tbWFuZF9pbml0aWFsaXplcnMsIF9zZXR1cENvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTEodGhpcywgbnVsbCwgX2Vudmlyb25tZW50VmFyaWFibGVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImVudmlyb25tZW50VmFyaWFibGVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlbnZpcm9ubWVudFZhcmlhYmxlcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbnZpcm9ubWVudFZhcmlhYmxlcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmVudmlyb25tZW50VmFyaWFibGVzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lbnZpcm9ubWVudFZhcmlhYmxlc19pbml0aWFsaXplcnMsIF9lbnZpcm9ubWVudFZhcmlhYmxlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MSh0aGlzLCBudWxsLCBfdGFiQmFyV2lkdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFiQmFyV2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRhYkJhcldpZHRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhYkJhcldpZHRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudGFiQmFyV2lkdGggPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYkJhcldpZHRoX2luaXRpYWxpemVycywgX3RhYkJhcldpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUxKHRoaXMsIG51bGwsIF9zaG93VGFiQmFyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dUYWJCYXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dUYWJCYXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd1RhYkJhciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNob3dUYWJCYXIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dUYWJCYXJfaW5pdGlhbGl6ZXJzLCBfc2hvd1RhYkJhcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MSh0aGlzLCBudWxsLCBfdGFic19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0YWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0YWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhYnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90YWJzX2luaXRpYWxpemVycywgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTEodGhpcywgbnVsbCwgX2FjdGl2ZVRhYklkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjdGl2ZVRhYklkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhY3RpdmVUYWJJZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3RpdmVUYWJJZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmFjdGl2ZVRhYklkID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3RpdmVUYWJJZF9pbml0aWFsaXplcnMsIF9hY3RpdmVUYWJJZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzV29ya3NwYWNlVGVybWluYWwyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gewogICAgICAgICAgY29uc3QgZW52MiA9IG5ldyBXZWJDb250YWluZXJFbnZpcm9ubWVudCgpOwogICAgICAgICAgcmV0dXJuIGIyYDxkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbCAuZXhlY3V0aW9uRW52aXJvbm1lbnQ9JHtlbnYyfT48L2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsPmA7CiAgICAgICAgfTsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICAgICAgLy8gSU5TVEFOQ0UKICAgICAgICByZXNpemVPYnNlcnZlcjsKICAgICAgICB0YWJNYW5hZ2VyOwogICAgICAgICNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM1Mih0aGlzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBudWxsKTsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgZXhlY3V0aW9uIGVudmlyb25tZW50IChyZXF1aXJlZCkuCiAgICAgICAgICogVXNlIFdlYkNvbnRhaW5lckVudmlyb25tZW50IGZvciBicm93c2VyLWJhc2VkIGV4ZWN1dGlvbi4KICAgICAgICAgKi8KICAgICAgICBnZXQgZXhlY3V0aW9uRW52aXJvbm1lbnQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3NldHVwQ29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Mih0aGlzLCBfc2V0dXBDb21tYW5kX2luaXRpYWxpemVycywgIiIpKTsKICAgICAgICBnZXQgc2V0dXBDb21tYW5kKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NldHVwQ29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2V0dXBDb21tYW5kKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2V0dXBDb21tYW5kX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNlbnZpcm9ubWVudFZhcmlhYmxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX3NldHVwQ29tbWFuZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX2Vudmlyb25tZW50VmFyaWFibGVzX2luaXRpYWxpemVycywge30pKTsKICAgICAgICAvKioKICAgICAgICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGluIHRoZSBzaGVsbAogICAgICAgICAqLwogICAgICAgIGdldCBlbnZpcm9ubWVudFZhcmlhYmxlcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNlbnZpcm9ubWVudFZhcmlhYmxlc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZW52aXJvbm1lbnRWYXJpYWJsZXModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNlbnZpcm9ubWVudFZhcmlhYmxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdGFiQmFyV2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF9lbnZpcm9ubWVudFZhcmlhYmxlc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX3RhYkJhcldpZHRoX2luaXRpYWxpemVycywgMTYwKSk7CiAgICAgICAgLyoqCiAgICAgICAgICogV2lkdGggb2YgdGhlIHRhYiBiYXIgaW4gcGl4ZWxzCiAgICAgICAgICovCiAgICAgICAgZ2V0IHRhYkJhcldpZHRoKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3RhYkJhcldpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB0YWJCYXJXaWR0aCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3RhYkJhcldpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzaG93VGFiQmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Mih0aGlzLCBfdGFiQmFyV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF9zaG93VGFiQmFyX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgICAgIC8qKgogICAgICAgICAqIFdoZXRoZXIgdG8gc2hvdyB0aGUgdGFiIGJhcgogICAgICAgICAqLwogICAgICAgIGdldCBzaG93VGFiQmFyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3Nob3dUYWJCYXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNob3dUYWJCYXIodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaG93VGFiQmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN0YWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Mih0aGlzLCBfc2hvd1RhYkJhcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX3RhYnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgICAgIC8vIFRhYiBzdGF0ZQogICAgICAgIGdldCB0YWJzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHRhYnModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNhY3RpdmVUYWJJZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF9hY3RpdmVUYWJJZF9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgICAgICBnZXQgYWN0aXZlVGFiSWQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYWN0aXZlVGFiSWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGFjdGl2ZVRhYklkKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYWN0aXZlVGFiSWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgLy8gVGhlbWUgc3Vic2NyaXB0aW9uIGZvciBkeW5hbWljIHRoZW1lIHVwZGF0ZXMKICAgICAgICB0ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX2FjdGl2ZVRhYklkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAgICAgaXNCcmlnaHQgPSBmYWxzZTsKICAgICAgICAvLyBBY3Rpb25iYXIgcmVmZXJlbmNlIGZvciB0ZXJtaW5hbC1jb250ZXh0IG5vdGlmaWNhdGlvbnMKICAgICAgICB0ZXJtaW5hbEFjdGlvbmJhciA9IG51bGw7CiAgICAgICAgLyoqCiAgICAgICAgICogUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGVudmlyb25tZW50IGlzIHJlYWR5LgogICAgICAgICAqIEBkZXByZWNhdGVkIFVzZSBleGVjdXRpb25FbnZpcm9ubWVudCBkaXJlY3RseQogICAgICAgICAqLwogICAgICAgIGVudmlyb25tZW50RGVmZXJyZWQgPSBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cHJvbWlzZS5EZWZlcnJlZCgpOwogICAgICAgIGVudmlyb25tZW50UHJvbWlzZSA9IHRoaXMuZW52aXJvbm1lbnREZWZlcnJlZC5wcm9taXNlOwogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIHRoaXMudGFiTWFuYWdlciA9IG5ldyBUZXJtaW5hbFRhYk1hbmFnZXIoKTsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgICAgICB0aGlzLmhhbmRsZVJlc2l6ZSgpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQoKICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgfQoKICAgICAgI2FjdGl2ZS10ZXJtaW5hbC1jb250YWluZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgbWFyZ2luOiAyMHB4OwogICAgICB9CgogICAgICAudGVybWluYWwtY29udGVudCBkZWVzLWFjdGlvbmJhciB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC8qIFRhYiBiYXIgb24gdGhlIHJpZ2h0IHNpZGUgKi8KICAgICAgLnRhYi1iYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC50YWItYmFyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1JSkiLCAiaHNsKDAgMCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1iYXItdGl0bGUgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgLnRhYi1iYXItYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgLnRhYi1hY3Rpb24gewogICAgICAgIHdpZHRoOiAyMnB4OwogICAgICAgIGhlaWdodDogMjJweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnRhYi1hY3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItbGlzdCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXRhYiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1JSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXRhYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkwJSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDI1JSkiLCAiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXRhYi5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDEwMCUgOTUlKSIsICJoc2woMjEwIDMwJSAxNSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDQwJSkiLCAiaHNsKDIxMCAxMDAlIDcwJSkiKX07CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC10YWIuZXhpdGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC50YWItaWNvbiB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50YWItaWNvbi5ydW5uaW5nIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIgNzAlIDQwJSkiLCAiaHNsKDE0MiA3MCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1sYWJlbCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5leGl0LWJhZGdlIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMXB4IDVweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmV4aXQtYmFkZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIgNzAlIDkwJSkiLCAiaHNsKDE0MiAzMCUgMjAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIgNzAlIDM1JSkiLCAiaHNsKDE0MiA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLmV4aXQtYmFkZ2UuZXJyb3IgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MCUgOTMlKSIsICJoc2woMCAzMCUgMjAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcwJSA0NSUpIiwgImhzbCgwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICAudGFiLWNsb3NlIHsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAudGVybWluYWwtdGFiOmhvdmVyIC50YWItY2xvc2UgewogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgfQoKICAgICAgLnRhYi1jbG9zZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMSAhaW1wb3J0YW50OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDI1JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MCUgNTAlKSIsICJoc2woMCA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDUwJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAvKiB4dGVybS5qcyBzdHlsZXMgKi8KICAgICAgLnh0ZXJtIHsKICAgICAgICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICdsaWdhJyAwOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLnh0ZXJtLmZvY3VzLAogICAgICAueHRlcm06Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0taGVscGVycyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICB6LWluZGV4OiA1OwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLWhlbHBlci10ZXh0YXJlYSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGxlZnQ6IC05OTk5ZW07CiAgICAgICAgdG9wOiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIGhlaWdodDogMDsKICAgICAgICB6LWluZGV4OiAtNTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcmVzaXplOiBub25lOwogICAgICB9CgogICAgICAueHRlcm0gLmNvbXBvc2l0aW9uLXZpZXcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzMzMzIiwgIiNmZmZmZmYiKX07CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB6LWluZGV4OiAxOwogICAgICB9CgogICAgICAueHRlcm0gLmNvbXBvc2l0aW9uLXZpZXcuYWN0aXZlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS12aWV3cG9ydCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tc2NyZWVuIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tc2NyZWVuIGNhbnZhcyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXNjcm9sbC1hcmVhIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC54dGVybS1jaGFyLW1lYXN1cmUtZWxlbWVudCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IC05OTk5ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKICAgICAgfQoKICAgICAgLnh0ZXJtIHsKICAgICAgICBjdXJzb3I6IHRleHQ7CiAgICAgIH0KCiAgICAgIC54dGVybS5lbmFibGUtbW91c2UtZXZlbnRzIHsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC54dGVybS54dGVybS1jdXJzb3ItcG9pbnRlciB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAueHRlcm0uY29sdW1uLXNlbGVjdC5mb2N1cyB7CiAgICAgICAgY3Vyc29yOiBjcm9zc2hhaXI7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tYWNjZXNzaWJpbGl0eSwKICAgICAgLnh0ZXJtIC54dGVybS1tZXNzYWdlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnh0ZXJtIC5saXZlLXJlZ2lvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IC05OTk5cHg7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAueHRlcm0tZGltIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC54dGVybS11bmRlcmxpbmUgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICBjb25zdCBhY3RpdmVUYWIgPSB0aGlzLmFjdGl2ZVRhYklkID8gdGhpcy50YWJNYW5hZ2VyLmdldFRhYih0aGlzLmFjdGl2ZVRhYklkKSA6IG51bGw7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLWNvbnRhaW5lciI+CiAgICAgICAgPCEtLSBNYWluIHRlcm1pbmFsIGFyZWEgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtY29udGVudCI+CiAgICAgICAgICAke2FjdGl2ZVRhYiA/IGIyYAogICAgICAgICAgICA8ZGl2IGlkPSJhY3RpdmUtdGVybWluYWwtY29udGFpbmVyIj48L2Rpdj4KICAgICAgICAgIGAgOiBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnRlcm1pbmFsIn0gaWNvblNpemU9IjMyIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3Bhbj5ObyB0ZXJtaW5hbCBvcGVuPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGB9CiAgICAgICAgICA8ZGVlcy1hY3Rpb25iYXI+PC9kZWVzLWFjdGlvbmJhcj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBWZXJ0aWNhbCB0YWIgYmFyIG9uIHRoZSByaWdodCAtLT4KICAgICAgICAke3RoaXMuc2hvd1RhYkJhciA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0idGFiLWJhciIgc3R5bGU9IndpZHRoOiAke3RoaXMudGFiQmFyV2lkdGh9cHgiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItYmFyLWhlYWRlciI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1iYXItdGl0bGUiPlRlcm1pbmFsczwvc3Bhbj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItYmFyLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiLWFjdGlvbiIgQGNsaWNrPSR7dGhpcy5oYW5kbGVBZGRUYWJ9IHRpdGxlPSJOZXcgVGVybWluYWwiPgogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpwbHVzIn0gaWNvblNpemU9IjE0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1saXN0Ij4KICAgICAgICAgICAgICAke3RoaXMudGFicy5tYXAoKHRhYjIpID0+IGIyYAogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0idGVybWluYWwtdGFiICR7dGFiMi5pZCA9PT0gdGhpcy5hY3RpdmVUYWJJZCA/ICJhY3RpdmUiIDogIiJ9ICR7dGFiMi5leGl0ZWQgPyAiZXhpdGVkIiA6ICIifSIKICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zd2l0Y2hUb1RhYih0YWIyLmlkKX0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAgICAgICAgIC5pY29uPSR7dGFiMi5pY29uTmFtZX0KICAgICAgICAgICAgICAgICAgICBpY29uU2l6ZT0iMTQiCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRhYi1pY29uICR7dGFiMi5wcm9jZXNzICYmICF0YWIyLmV4aXRlZCA/ICJydW5uaW5nIiA6ICIifSIKICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFiLWxhYmVsIj4ke3RhYjIubGFiZWx9PC9zcGFuPgogICAgICAgICAgICAgICAgICAke3RhYjIuZXhpdGVkID8gYjJgCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImV4aXQtYmFkZ2UgJHt0YWIyLmV4aXRDb2RlID09PSAwID8gInN1Y2Nlc3MiIDogImVycm9yIn0iPgogICAgICAgICAgICAgICAgICAgICAgJHt0YWIyLmV4aXRDb2RlfQogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgICAgICAke3RhYjIuY2xvc2VhYmxlID8gYjJgCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1jbG9zZSIgQGNsaWNrPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVUYWJDbG9zZShlMTEsIHRhYjIuaWQpfT4KICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOngifSBpY29uU2l6ZT0iMTIiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgICAgIGNvbnN0IGRvbXRvb2xzSW5zdGFuY2UgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgICAgIHRoaXMuaXNCcmlnaHQgPSBkb210b29sc0luc3RhbmNlLnRoZW1lTWFuYWdlci5nb0JyaWdodEJvb2xlYW47CiAgICAgICAgICB0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb24gPSBkb210b29sc0luc3RhbmNlLnRoZW1lTWFuYWdlci50aGVtZU9ic2VydmFibGUuc3Vic2NyaWJlKChnb0JyaWdodCkgPT4gewogICAgICAgICAgICB0aGlzLmlzQnJpZ2h0ID0gZ29CcmlnaHQ7CiAgICAgICAgICAgIHRoaXMudGFiTWFuYWdlci51cGRhdGVBbGxUaGVtZXMoZ29CcmlnaHQpOwogICAgICAgICAgfSk7CiAgICAgICAgICBjb25zdCBsaWJMb2FkZXIgPSBEZWVzU2VydmljZUxpYkxvYWRlci5nZXRJbnN0YW5jZSgpOwogICAgICAgICAgY29uc3QgW3h0ZXJtQnVuZGxlLCBmaXRBZGRvbkJ1bmRsZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgICAgIGxpYkxvYWRlci5sb2FkWHRlcm0oKSwKICAgICAgICAgICAgbGliTG9hZGVyLmxvYWRYdGVybUZpdEFkZG9uKCkKICAgICAgICAgIF0pOwogICAgICAgICAgdGhpcy50YWJNYW5hZ2VyLnNldFh0ZXJtTW9kdWxlcyh4dGVybUJ1bmRsZSwgZml0QWRkb25CdW5kbGUpOwogICAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVTaGVsbFRhYigpOwogICAgICAgIH0KICAgICAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZCgiYWN0aXZlLXRlcm1pbmFsLWNvbnRhaW5lciIpOwogICAgICAgICAgaWYgKGNvbnRhaW5lcikgewogICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShjb250YWluZXIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbikgewogICAgICAgICAgICB0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgICAgdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMudGFiTWFuYWdlci5kaXNwb3NlQWxsKCk7CiAgICAgICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09IFRhYiBNYW5hZ2VtZW50ID09PT09PT09PT0KICAgICAgICBhc3luYyBoYW5kbGVBZGRUYWIoKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZVNoZWxsVGFiKCk7CiAgICAgICAgfQogICAgICAgIGhhbmRsZVRhYkNsb3NlKGUxMSwgdGFiSWQpIHsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIHRoaXMuY2xvc2VUYWIodGFiSWQpOwogICAgICAgIH0KICAgICAgICBzd2l0Y2hUb1RhYih0YWJJZCkgewogICAgICAgICAgaWYgKHRhYklkID09PSB0aGlzLmFjdGl2ZVRhYklkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJNYW5hZ2VyLmdldFRhYih0YWJJZCk7CiAgICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IHByZXZpb3VzVGFiSWQgPSB0aGlzLmFjdGl2ZVRhYklkOwogICAgICAgICAgaWYgKHRoaXMuYWN0aXZlVGFiSWQpIHsKICAgICAgICAgICAgdGhpcy5kZXRhY2hBY3RpdmVUZXJtaW5hbCgpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5hY3RpdmVUYWJJZCA9IHRhYklkOwogICAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuYXR0YWNoVGVybWluYWxUb0NvbnRhaW5lcih0YWIyKTsKICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgidGFiLXN3aXRjaGVkIiwgewogICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgICAgICAgZGV0YWlsOiB7IHRhYklkLCBwcmV2aW91c1RhYklkIH0KICAgICAgICAgICAgfSkpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGRldGFjaEFjdGl2ZVRlcm1pbmFsKCkgewogICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZCgiYWN0aXZlLXRlcm1pbmFsLWNvbnRhaW5lciIpOwogICAgICAgICAgaWYgKGNvbnRhaW5lcikgewogICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gIiI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGF0dGFjaFRlcm1pbmFsVG9Db250YWluZXIodGFiMikgewogICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZCgiYWN0aXZlLXRlcm1pbmFsLWNvbnRhaW5lciIpOwogICAgICAgICAgaWYgKCFjb250YWluZXIpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXIpOwogICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9ICIiOwogICAgICAgICAgdGFiMi50ZXJtaW5hbC5vcGVuKGNvbnRhaW5lcik7CiAgICAgICAgICB0YWIyLmZpdEFkZG9uLmZpdCgpOwogICAgICAgICAgdGFiMi50ZXJtaW5hbC5mb2N1cygpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVSZXNpemUoKSB7CiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVUYWJJZCkgewogICAgICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJNYW5hZ2VyLmdldFRhYih0aGlzLmFjdGl2ZVRhYklkKTsKICAgICAgICAgICAgaWYgKHRhYjIpIHsKICAgICAgICAgICAgICB0YWIyLmZpdEFkZG9uLmZpdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT0gUHJvY2VzcyBNYW5hZ2VtZW50ID09PT09PT09PT0KICAgICAgICBhc3luYyBzcGF3blByb2Nlc3NGb3JUYWIodGFiMiwgY29tbWFuZCwgYXJncyA9IFtdKSB7CiAgICAgICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpIHsKICAgICAgICAgICAgdGFiMi50ZXJtaW5hbC53cml0ZSgiXHgxQlszMW0iKTsKICAgICAgICAgICAgdGFiMi50ZXJtaW5hbC53cml0ZSgiXHUyNzRDIE5vIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBhdmFpbGFibGUuXHJcbiIpOwogICAgICAgICAgICB0YWIyLnRlcm1pbmFsLndyaXRlKCJceDFCWzBtIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkeSkgewogICAgICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUoIkluaXRpYWxpemluZyBlbnZpcm9ubWVudC4uLlxyXG4iKTsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LmluaXQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBwcm9jZXNzNCA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuc3Bhd24oY29tbWFuZCwgYXJncyk7CiAgICAgICAgICAgIHByb2Nlc3M0Lm91dHB1dC5waXBlVG8obmV3IFdyaXRhYmxlU3RyZWFtKHsKICAgICAgICAgICAgICB3cml0ZTogKGRhdGEpID0+IHsKICAgICAgICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUoZGF0YSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIGNvbnN0IGlucHV0V3JpdGVyID0gcHJvY2VzczQuaW5wdXQuZ2V0V3JpdGVyKCk7CiAgICAgICAgICAgIHRhYjIudGVybWluYWwub25EYXRhKChkYXRhKSA9PiB7CiAgICAgICAgICAgICAgaW5wdXRXcml0ZXIud3JpdGUoZGF0YSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLnRhYk1hbmFnZXIuc2V0VGFiUHJvY2Vzcyh0YWIyLmlkLCBwcm9jZXNzNCwgaW5wdXRXcml0ZXIpOwogICAgICAgICAgICB0aGlzLnRhYnMgPSB0aGlzLnRhYk1hbmFnZXIuZ2V0QWxsVGFicygpOwogICAgICAgICAgICBwcm9jZXNzNC5leGl0LnRoZW4oKGV4aXRDb2RlKSA9PiB7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQcm9jZXNzRXhpdCh0YWIyLmlkLCBleGl0Q29kZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgdGFiMi50ZXJtaW5hbC53cml0ZSgiXHgxQlszMW0iKTsKICAgICAgICAgICAgdGFiMi50ZXJtaW5hbC53cml0ZShgXHUyNzRDIEZhaWxlZCB0byBzcGF3biBwcm9jZXNzOiAke2Vycm9yfVxyCmApOwogICAgICAgICAgICB0YWIyLnRlcm1pbmFsLndyaXRlKCJceDFCWzBtIik7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBzcGF3biBwcm9jZXNzOiIsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlUHJvY2Vzc0V4aXQodGFiSWQsIGV4aXRDb2RlKSB7CiAgICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJNYW5hZ2VyLmdldFRhYih0YWJJZCk7CiAgICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMudGFiTWFuYWdlci5tYXJrVGFiRXhpdGVkKHRhYklkLCBleGl0Q29kZSk7CiAgICAgICAgICBjb25zdCBtZXNzYWdlMiA9IGV4aXRDb2RlID09PSAwID8gIlxyXG5ceDFCWzMybVtQcm9jZXNzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHldXHgxQlswbVxyXG4iIDogYFxyClx4MUJbMzFtW1Byb2Nlc3MgZXhpdGVkIHdpdGggY29kZSAke2V4aXRDb2RlfV1ceDFCWzBtXHIKYDsKICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUobWVzc2FnZTIpOwogICAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInByb2Nlc3MtY29tcGxldGUiLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgICBkZXRhaWw6IHsgdGFiSWQsIGV4aXRDb2RlIH0KICAgICAgICAgIH0pKTsKICAgICAgICAgIGlmICh0YWIyLmNsb3NlYWJsZSkgewogICAgICAgICAgICB0aGlzLnNob3dFeGl0ZWRUYWJBY3Rpb25iYXIodGFiSWQsIHRhYjIubGFiZWwsIGV4aXRDb2RlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU2hvdyBhY3Rpb25iYXIgb2ZmZXJpbmcgdG8gY2xvc2UgYW4gZXhpdGVkIHRhYgogICAgICAgICAqLwogICAgICAgIGFzeW5jIHNob3dFeGl0ZWRUYWJBY3Rpb25iYXIodGFiSWQsIHRhYkxhYmVsLCBleGl0Q29kZSkgewogICAgICAgICAgY29uc3QgaXNTdWNjZXNzID0gZXhpdENvZGUgPT09IDA7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNob3dBY3Rpb25iYXIoewogICAgICAgICAgICBtZXNzYWdlOiBpc1N1Y2Nlc3MgPyBgIiR7dGFiTGFiZWx9IiBjb21wbGV0ZWQuIENsb3NlIHRhYj9gIDogYCIke3RhYkxhYmVsfSIgZXhpdGVkIChjb2RlICR7ZXhpdENvZGV9KS4gQ2xvc2UgdGFiP2AsCiAgICAgICAgICAgIHR5cGU6IGlzU3VjY2VzcyA/ICJpbmZvIiA6ICJ3YXJuaW5nIiwKICAgICAgICAgICAgaWNvbjogaXNTdWNjZXNzID8gImx1Y2lkZTpjaGVja0NpcmNsZSIgOiAibHVjaWRlOmFsZXJ0VHJpYW5nbGUiLAogICAgICAgICAgICBhY3Rpb25zOiBbCiAgICAgICAgICAgICAgeyBpZDogImNsb3NlIiwgbGFiZWw6ICJDbG9zZSBUYWIiLCBwcmltYXJ5OiB0cnVlIH0sCiAgICAgICAgICAgICAgeyBpZDogImtlZXAiLCBsYWJlbDogIktlZXAgT3BlbiIgfQogICAgICAgICAgICBdLAogICAgICAgICAgICB0aW1lb3V0OiB7IGR1cmF0aW9uOiAxZTQsIGRlZmF1bHRBY3Rpb25JZDogImNsb3NlIiB9LAogICAgICAgICAgICBkaXNtaXNzaWJsZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAocmVzdWx0LmFjdGlvbklkID09PSAiY2xvc2UiKSB7CiAgICAgICAgICAgIHRoaXMuY2xvc2VUYWIodGFiSWQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09IFB1YmxpYyBBUEkgPT09PT09PT09PQogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZSBhIG5ldyBzaGVsbCB0YWIKICAgICAgICAgKi8KICAgICAgICBhc3luYyBjcmVhdGVTaGVsbFRhYihsYWJlbCkgewogICAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFiTWFuYWdlci5jcmVhdGVUYWIoewogICAgICAgICAgICB0eXBlOiAic2hlbGwiLAogICAgICAgICAgICBsYWJlbDogbGFiZWwgfHwgYGJhc2ggJHt0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiQ291bnQoKSArIDF9YCwKICAgICAgICAgICAgY2xvc2VhYmxlOiB0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiQ291bnQoKSA+IDAKICAgICAgICAgICAgLy8gRmlyc3QgdGFiIG5vdCBjbG9zZWFibGUKICAgICAgICAgIH0sIHRoaXMuaXNCcmlnaHQpOwogICAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgIHRoaXMuc3dpdGNoVG9UYWIodGFiMi5pZCk7CiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgYXdhaXQgdGhpcy5zcGF3blByb2Nlc3NGb3JUYWIodGFiMiwgImpzaCIpOwogICAgICAgICAgaWYgKHRoaXMudGFiTWFuYWdlci5nZXRUYWJDb3VudCgpID09PSAxICYmIHRoaXMuc2V0dXBDb21tYW5kKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclByb21wdCh0YWIyLnRlcm1pbmFsLCAifi8iKTsKICAgICAgICAgICAgaWYgKHRhYjIuaW5wdXRXcml0ZXIpIHsKICAgICAgICAgICAgICB0YWIyLmlucHV0V3JpdGVyLndyaXRlKHRoaXMuc2V0dXBDb21tYW5kKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgidGFiLWNyZWF0ZWQiLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgICBkZXRhaWw6IHsgdGFiSWQ6IHRhYjIuaWQgfQogICAgICAgICAgfSkpOwogICAgICAgICAgcmV0dXJuIHRhYjIuaWQ7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZSBhIHRlcm1pbmFsIHRhYiBmb3IgcnVubmluZyBhIHByb2Nlc3MKICAgICAgICAgKi8KICAgICAgICBhc3luYyBjcmVhdGVQcm9jZXNzVGFiKG9wdGlvbnMpIHsKICAgICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYk1hbmFnZXIuY3JlYXRlVGFiKG9wdGlvbnMsIHRoaXMuaXNCcmlnaHQpOwogICAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgIGlmIChvcHRpb25zLnN3aXRjaFRvVGFiICE9PSBmYWxzZSkgewogICAgICAgICAgICB0aGlzLnN3aXRjaFRvVGFiKHRhYjIuaWQpOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICAgIGlmIChvcHRpb25zLmNvbW1hbmQpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5zcGF3blByb2Nlc3NGb3JUYWIodGFiMiwgb3B0aW9ucy5jb21tYW5kLCBvcHRpb25zLmFyZ3MpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgidGFiLWNyZWF0ZWQiLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgICBkZXRhaWw6IHsgdGFiSWQ6IHRhYjIuaWQgfQogICAgICAgICAgfSkpOwogICAgICAgICAgcmV0dXJuIHRhYjIuaWQ7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgY3VycmVudGx5IGFjdGl2ZSB0YWIKICAgICAgICAgKi8KICAgICAgICBnZXRBY3RpdmVUYWIoKSB7CiAgICAgICAgICBpZiAoIXRoaXMuYWN0aXZlVGFiSWQpCiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgcmV0dXJuIHRoaXMudGFiTWFuYWdlci5nZXRUYWIodGhpcy5hY3RpdmVUYWJJZCkgfHwgbnVsbDsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IGFsbCB0YWJzCiAgICAgICAgICovCiAgICAgICAgZ2V0VGFicygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnRhYk1hbmFnZXIuZ2V0QWxsVGFicygpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTd2l0Y2ggdG8gYSBzcGVjaWZpYyB0YWIgYnkgSUQKICAgICAgICAgKi8KICAgICAgICBzZWxlY3RUYWIodGFiSWQpIHsKICAgICAgICAgIGlmICghdGhpcy50YWJNYW5hZ2VyLmhhc1RhYih0YWJJZCkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIHRoaXMuc3dpdGNoVG9UYWIodGFiSWQpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIENsb3NlIGEgdGFiIGJ5IElECiAgICAgICAgICovCiAgICAgICAgY2xvc2VUYWIodGFiSWQpIHsKICAgICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiKHRhYklkKTsKICAgICAgICAgIGlmICghdGFiMiB8fCAhdGFiMi5jbG9zZWFibGUpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIGlmICh0YWJJZCA9PT0gdGhpcy5hY3RpdmVUYWJJZCkgewogICAgICAgICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gYWxsVGFicy5maW5kSW5kZXgoKHQ5KSA9PiB0OS5pZCA9PT0gdGFiSWQpOwogICAgICAgICAgICBjb25zdCBuZXh0VGFiID0gYWxsVGFic1tjdXJyZW50SW5kZXggKyAxXSB8fCBhbGxUYWJzW2N1cnJlbnRJbmRleCAtIDFdOwogICAgICAgICAgICBpZiAobmV4dFRhYikgewogICAgICAgICAgICAgIHRoaXMuc3dpdGNoVG9UYWIobmV4dFRhYi5pZCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5hY3RpdmVUYWJJZCA9IG51bGw7CiAgICAgICAgICAgICAgdGhpcy5kZXRhY2hBY3RpdmVUZXJtaW5hbCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnRhYk1hbmFnZXIuY2xvc2VUYWIodGFiSWQpOwogICAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1jbG9zZWQiLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgICBkZXRhaWw6IHsgdGFiSWQgfQogICAgICAgICAgfSkpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFdyaXRlIGRhdGEgdG8gYSB0YWIncyB0ZXJtaW5hbAogICAgICAgICAqLwogICAgICAgIHdyaXRlVG9UYWIodGFiSWQsIGRhdGEpIHsKICAgICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiKHRhYklkKTsKICAgICAgICAgIGlmICghdGFiMikKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgdGFiMi50ZXJtaW5hbC53cml0ZShkYXRhKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTZW5kIGlucHV0IHRvIGEgdGFiJ3MgcHJvY2VzcyAoaWYgaW50ZXJhY3RpdmUpCiAgICAgICAgICovCiAgICAgICAgc2VuZElucHV0VG9UYWIodGFiSWQsIGRhdGEpIHsKICAgICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiKHRhYklkKTsKICAgICAgICAgIGlmICghdGFiMiB8fCAhdGFiMi5pbnB1dFdyaXRlcikKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgdGFiMi5pbnB1dFdyaXRlci53cml0ZShkYXRhKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTaG93IGFuIGFjdGlvbmJhciBub3RpZmljYXRpb24gaW4gdGhlIHRlcm1pbmFsIHBhbmVsIGNvbnRleHQuCiAgICAgICAgICogVXNlIHRoaXMgZm9yIHRlcm1pbmFsLXJlbGF0ZWQgZGVjaXNpb25zIChlLmcuLCByZXRyeSBmYWlsZWQgcHJvY2Vzcywga2lsbCBwcm9jZXNzLCBldGMuKQogICAgICAgICAqLwogICAgICAgIGFzeW5jIHNob3dBY3Rpb25iYXIob3B0aW9ucykgewogICAgICAgICAgaWYgKCF0aGlzLnRlcm1pbmFsQWN0aW9uYmFyKSB7CiAgICAgICAgICAgIHRoaXMudGVybWluYWxBY3Rpb25iYXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYWN0aW9uYmFyIik7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpcy50ZXJtaW5hbEFjdGlvbmJhcj8uc2hvdyhvcHRpb25zKTsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PSBVdGlsaXR5IE1ldGhvZHMgPT09PT09PT09PQogICAgICAgIGFzeW5jIHdhaXRGb3JQcm9tcHQodGVybSwgcHJvbXB0KSB7CiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGNoZWNrUHJvbXB0ID0gKCkgPT4gewogICAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGVybS5idWZmZXIuYWN0aXZlOwogICAgICAgICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGxpbmVzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBsaW5lcy5nZXRMaW5lKGkxMSk7CiAgICAgICAgICAgICAgICBpZiAobGluZSAmJiBsaW5lLnRyYW5zbGF0ZVRvU3RyaW5nKCkuaW5jbHVkZXMocHJvbXB0KSkgewogICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgICAgICAgICB9LCAxMDApOwogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tQcm9tcHQsIDEwMCk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGNoZWNrUHJvbXB0KCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgc2V0RW52aXJvbm1lbnRWYXJpYWJsZXMoZW52QXJnKSB7CiAgICAgICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJObyBleGVjdXRpb24gZW52aXJvbm1lbnQgYXZhaWxhYmxlIik7CiAgICAgICAgICB9CiAgICAgICAgICBsZXQgZW52RmlsZSA9ICIiOwogICAgICAgICAgZm9yIChjb25zdCBrZXkyIGluIGVudkFyZykgewogICAgICAgICAgICBlbnZGaWxlICs9IGBleHBvcnQgJHtrZXkyfT0iJHtlbnZBcmdba2V5Ml19IgpgOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoIi9zb3VyY2UuZW52IiwgZW52RmlsZSk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgdW5kZXJseWluZyBleGVjdXRpb24gZW52aXJvbm1lbnQuCiAgICAgICAgICovCiAgICAgICAgZ2V0RXhlY3V0aW9uRW52aXJvbm1lbnQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudDsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTIoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNXb3Jrc3BhY2VUZXJtaW5hbDIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRwcm9taXNlQDMuMS4xMC9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9pbmRleC5qcwp2YXIgcmVxdWlyZV9kaXN0X3RzMyA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2hyb2NrcytzbWFydHByb21pc2VAMy4xLjEwL25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL2luZGV4LmpzIihleHBvcnRzKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgZXhwb3J0cy5nZXRGaXJzdFRydWVPckZhbHNlID0gZXhwb3J0cy50aW1lb3V0QW5kQ29udGludWUgPSBleHBvcnRzLnRpbWVvdXRXcmFwID0gZXhwb3J0cy5tYXAgPSBleHBvcnRzLnJlamVjdGVkUHJvbWlzZSA9IGV4cG9ydHMucmVzb2x2ZWRQcm9taXNlID0gZXhwb3J0cy5kZWZlciA9IGV4cG9ydHMuRGVmZXJyZWQgPSB2b2lkIDA7CiAgICB2YXIgRGVmZXJyZWQzID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgICAgICAgdGhpcy5yZXNvbHZlID0gKHZhbHVlQXJnKSA9PiB7CiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gImZ1bGZpbGxlZCI7CiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEF0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgcmVzb2x2ZTIodmFsdWVBcmcpOwogICAgICAgICAgfTsKICAgICAgICAgIHRoaXMucmVqZWN0ID0gKHJlYXNvbikgPT4gewogICAgICAgICAgICB0aGlzLnN0YXR1cyA9ICJyZWplY3RlZCI7CiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEF0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7CiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5zdGFydGVkQXQgPSBEYXRlLm5vdygpOwogICAgICAgICAgdGhpcy5zdGF0dXMgPSAicGVuZGluZyI7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZ2V0IGR1cmF0aW9uKCkgewogICAgICAgIGlmICh0aGlzLnN0b3BwZWRBdCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcHBlZEF0IC0gdGhpcy5zdGFydGVkQXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydGVkQXQ7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgZXhwb3J0cy5EZWZlcnJlZCA9IERlZmVycmVkMzsKICAgIGV4cG9ydHMuZGVmZXIgPSAoKSA9PiB7CiAgICAgIHJldHVybiBuZXcgRGVmZXJyZWQzKCk7CiAgICB9OwogICAgZXhwb3J0cy5yZXNvbHZlZFByb21pc2UgPSAodmFsdWUyKSA9PiB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUyKTsKICAgIH07CiAgICBleHBvcnRzLnJlamVjdGVkUHJvbWlzZSA9IChlcnIpID0+IHsKICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7CiAgICB9OwogICAgZXhwb3J0cy5tYXAgPSBhc3luYyAoaW5wdXRBcmcsIGZ1bmN0aW9uQXJnKSA9PiB7CiAgICAgIGNvbnN0IHByb21pc2VBcnJheSA9IFtdOwogICAgICBjb25zdCByZXN1bHRBcnJheSA9IFtdOwogICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaW5wdXRBcmcpIHsKICAgICAgICBjb25zdCBwcm9taXNlID0gZnVuY3Rpb25BcmcoaXRlbSk7CiAgICAgICAgcHJvbWlzZUFycmF5LnB1c2gocHJvbWlzZSk7CiAgICAgICAgcHJvbWlzZS50aGVuKCh4MykgPT4gewogICAgICAgICAgcmVzdWx0QXJyYXkucHVzaCh4Myk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZUFycmF5KTsKICAgICAgcmV0dXJuIHJlc3VsdEFycmF5OwogICAgfTsKICAgIGV4cG9ydHMudGltZW91dFdyYXAgPSBhc3luYyAocHJvbWlzZUFyZywgdGltZW91dEluTXNBcmcsIHJlamVjdEFyZyA9IHRydWUpID0+IHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBpZiAocmVqZWN0QXJnKSB7CiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoInRpbWVvdXQiKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgIH0KICAgICAgICB9LCB0aW1lb3V0SW5Nc0FyZyk7CiAgICAgICAgcHJvbWlzZUFyZy50aGVuKHJlc29sdmUyLCByZWplY3QpOwogICAgICB9KTsKICAgIH07CiAgICBleHBvcnRzLnRpbWVvdXRBbmRDb250aW51ZSA9IGFzeW5jIChwcm9taXNlQXJnLCB0aW1lb3V0SW5Nc0FyZyA9IDZlNCkgPT4gewogICAgICByZXR1cm4gZXhwb3J0cy50aW1lb3V0V3JhcChwcm9taXNlQXJnLCB0aW1lb3V0SW5Nc0FyZywgZmFsc2UpOwogICAgfTsKICAgIGV4cG9ydHMuZ2V0Rmlyc3RUcnVlT3JGYWxzZSA9IGFzeW5jIChwcm9taXNlc0FyZykgPT4gewogICAgICBjb25zdCBkb25lID0gZXhwb3J0cy5kZWZlcigpOwogICAgICBmb3IgKGNvbnN0IHByb21pc2VBcmcgb2YgcHJvbWlzZXNBcmcpIHsKICAgICAgICBwcm9taXNlQXJnLnRoZW4oKHJlc3VsdEFyZykgPT4gewogICAgICAgICAgaWYgKHJlc3VsdEFyZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICBkb25lLnJlc29sdmUodHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXNBcmcpLnRoZW4oKCkgPT4gewogICAgICAgIGRvbmUucmVzb2x2ZShmYWxzZSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gZG9uZS5wcm9taXNlOwogICAgfTsKICB9Cn0pOwoKLy8gdHNfd2ViL3BsdWdpbnMudHMKdmFyIHBsdWdpbnNfZXhwb3J0czUgPSB7fTsKX19leHBvcnQocGx1Z2luc19leHBvcnRzNSwgewogIERlZXNFbGVtZW50OiAoKSA9PiBEZWVzRWxlbWVudDIsCiAgY3NzOiAoKSA9PiBjc3MyLAogIGNzc01hbmFnZXI6ICgpID0+IGNzc01hbmFnZXIyLAogIGN1c3RvbUVsZW1lbnQ6ICgpID0+IGN1c3RvbUVsZW1lbnQsCiAgZGVlc0NhdGFsb2c6ICgpID0+IGRpc3RfdHNfd2ViX2V4cG9ydHMyLAogIGRlZXNFbGVtZW50OiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMyNiwKICBodG1sOiAoKSA9PiBodG1sNywKICBwcm9wZXJ0eTogKCkgPT4gcHJvcGVydHksCiAgc21hcnRyeDogKCkgPT4gZGlzdF90c19leHBvcnRzMiwKICBzdGF0ZTogKCkgPT4gc3RhdGUsCiAgdHlwZWRyZXF1ZXN0OiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMxNSwKICB0eXBlZHNvY2tldDogKCkgPT4gZGlzdF90c19leHBvcnRzMzAKfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2luZGV4LmpzCnZhciBkaXN0X3RzX3dlYl9leHBvcnRzMiA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX3dlYl9leHBvcnRzMiwgewogIENhbnZhc1Bvb2w6ICgpID0+IENhbnZhc1Bvb2wsCiAgRGVlc0FjdGlvbmJhcjogKCkgPT4gRGVlc0FjdGlvbmJhciwKICBEZWVzQXBwdWk6ICgpID0+IERlZXNBcHB1aSwKICBEZWVzQXBwdWlBY3Rpdml0eWxvZzogKCkgPT4gRGVlc0FwcHVpQWN0aXZpdHlsb2csCiAgRGVlc0FwcHVpQmFyOiAoKSA9PiBEZWVzQXBwdWlCYXIsCiAgRGVlc0FwcHVpQm90dG9tYmFyOiAoKSA9PiBEZWVzQXBwdWlCb3R0b21iYXIsCiAgRGVlc0FwcHVpTWFpbmNvbnRlbnQ6ICgpID0+IERlZXNBcHB1aU1haW5jb250ZW50LAogIERlZXNBcHB1aU1haW5tZW51OiAoKSA9PiBEZWVzQXBwdWlNYWlubWVudSwKICBEZWVzQXBwdWlQcm9maWxlRHJvcGRvd246ICgpID0+IERlZXNBcHB1aVByb2ZpbGVEcm9wZG93biwKICBEZWVzQXBwdWlTZWNvbmRhcnltZW51OiAoKSA9PiBEZWVzQXBwdWlTZWNvbmRhcnltZW51LAogIERlZXNBcHB1aVRhYnM6ICgpID0+IERlZXNBcHB1aVRhYnMsCiAgRGVlc0JhZGdlOiAoKSA9PiBEZWVzQmFkZ2UsCiAgRGVlc0J1dHRvbjogKCkgPT4gRGVlc0J1dHRvbiwKICBEZWVzQnV0dG9uRXhpdDogKCkgPT4gRGVlc0J1dHRvbkV4aXQsCiAgRGVlc0J1dHRvbkdyb3VwOiAoKSA9PiBEZWVzQnV0dG9uR3JvdXAsCiAgRGVlc0NoYXJ0QXJlYTogKCkgPT4gRGVlc0NoYXJ0QXJlYSwKICBEZWVzQ2hhcnRMb2c6ICgpID0+IERlZXNDaGFydExvZywKICBEZWVzQ2hpcHM6ICgpID0+IERlZXNDaGlwcywKICBEZWVzQ29udGV4dG1lbnU6ICgpID0+IERlZXNDb250ZXh0bWVudSwKICBEZWVzRGFzaGJvYXJkZ3JpZDogKCkgPT4gRGVlc0Rhc2hib2FyZGdyaWQsCiAgRGVlc0RhdGF2aWV3Q29kZWJveDogKCkgPT4gRGVlc0RhdGF2aWV3Q29kZWJveCwKICBEZWVzRGF0YXZpZXdTdGF0dXNvYmplY3Q6ICgpID0+IERlZXNEYXRhdmlld1N0YXR1c29iamVjdCwKICBEZWVzRm9ybTogKCkgPT4gRGVlc0Zvcm0sCiAgRGVlc0Zvcm1TdWJtaXQ6ICgpID0+IERlZXNGb3JtU3VibWl0LAogIERlZXNGb3JtYXR0aW5nTWVudTogKCkgPT4gRGVlc0Zvcm1hdHRpbmdNZW51LAogIERlZXNIZWFkaW5nOiAoKSA9PiBEZWVzSGVhZGluZywKICBEZWVzSGludDogKCkgPT4gRGVlc0hpbnQsCiAgRGVlc0ljb246ICgpID0+IERlZXNJY29uLAogIERlZXNJbnB1dEJhc2U6ICgpID0+IERlZXNJbnB1dEJhc2UsCiAgRGVlc0lucHV0Q2hlY2tib3g6ICgpID0+IERlZXNJbnB1dENoZWNrYm94LAogIERlZXNJbnB1dENvZGU6ICgpID0+IERlZXNJbnB1dENvZGUsCiAgRGVlc0lucHV0RGF0ZXBpY2tlcjogKCkgPT4gRGVlc0lucHV0RGF0ZXBpY2tlciwKICBEZWVzSW5wdXREcm9wZG93bjogKCkgPT4gRGVlc0lucHV0RHJvcGRvd24sCiAgRGVlc0lucHV0RmlsZXVwbG9hZDogKCkgPT4gRGVlc0lucHV0RmlsZXVwbG9hZCwKICBEZWVzSW5wdXRJYmFuOiAoKSA9PiBEZWVzSW5wdXRJYmFuLAogIERlZXNJbnB1dExpc3Q6ICgpID0+IERlZXNJbnB1dExpc3QsCiAgRGVlc0lucHV0TXVsdGl0b2dnbGU6ICgpID0+IERlZXNJbnB1dE11bHRpdG9nZ2xlLAogIERlZXNJbnB1dFBob25lOiAoKSA9PiBEZWVzSW5wdXRQaG9uZSwKICBEZWVzSW5wdXRQcm9maWxlUGljdHVyZTogKCkgPT4gRGVlc0lucHV0UHJvZmlsZVBpY3R1cmUsCiAgRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvcjogKCkgPT4gRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvciwKICBEZWVzSW5wdXRSYWRpb2dyb3VwOiAoKSA9PiBEZWVzSW5wdXRSYWRpb2dyb3VwLAogIERlZXNJbnB1dFJpY2h0ZXh0OiAoKSA9PiBEZWVzSW5wdXRSaWNodGV4dCwKICBEZWVzSW5wdXRUYWdzOiAoKSA9PiBEZWVzSW5wdXRUYWdzLAogIERlZXNJbnB1dFRleHQ6ICgpID0+IERlZXNJbnB1dFRleHQsCiAgRGVlc0lucHV0VG9nZ2xlOiAoKSA9PiBEZWVzSW5wdXRUb2dnbGUsCiAgRGVlc0lucHV0VHlwZWxpc3Q6ICgpID0+IERlZXNJbnB1dFR5cGVsaXN0LAogIERlZXNJbnB1dFd5c2l3eWc6ICgpID0+IERlZXNJbnB1dFd5c2l3eWcsCiAgRGVlc0xhYmVsOiAoKSA9PiBEZWVzTGFiZWwsCiAgRGVlc01vYmlsZW5hdmlnYXRpb246ICgpID0+IERlZXNNb2JpbGVuYXZpZ2F0aW9uLAogIERlZXNNb2RhbDogKCkgPT4gRGVlc01vZGFsLAogIERlZXNQYWdpbmF0aW9uOiAoKSA9PiBEZWVzUGFnaW5hdGlvbiwKICBEZWVzUGFuZWw6ICgpID0+IERlZXNQYW5lbCwKICBEZWVzUGRmOiAoKSA9PiBEZWVzUGRmLAogIERlZXNQZGZQcmV2aWV3OiAoKSA9PiBEZWVzUGRmUHJldmlldywKICBEZWVzUGRmVmlld2VyOiAoKSA9PiBEZWVzUGRmVmlld2VyLAogIERlZXNQcm9ncmVzc2JhcjogKCkgPT4gRGVlc1Byb2dyZXNzYmFyLAogIERlZXNTZWFyY2hiYXI6ICgpID0+IERlZXNTZWFyY2hiYXIsCiAgRGVlc1Nob3BwaW5nUHJvZHVjdGNhcmQ6ICgpID0+IERlZXNTaG9wcGluZ1Byb2R1Y3RjYXJkLAogIERlZXNTaW1wbGVBcHBEYXNoOiAoKSA9PiBEZWVzU2ltcGxlQXBwRGFzaCwKICBEZWVzU2ltcGxlTG9naW46ICgpID0+IERlZXNTaW1wbGVMb2dpbiwKICBEZWVzU2xhc2hNZW51OiAoKSA9PiBEZWVzU2xhc2hNZW51LAogIERlZXNTcGVlY2hidWJibGU6ICgpID0+IERlZXNTcGVlY2hidWJibGUsCiAgRGVlc1NwaW5uZXI6ICgpID0+IERlZXNTcGlubmVyLAogIERlZXNTdGF0c0dyaWQ6ICgpID0+IERlZXNTdGF0c0dyaWQsCiAgRGVlc1N0ZXBwZXI6ICgpID0+IERlZXNTdGVwcGVyLAogIERlZXNUYWJsZTogKCkgPT4gRGVlc1RhYmxlLAogIERlZXNUaGVtZTogKCkgPT4gRGVlc1RoZW1lLAogIERlZXNUb2FzdDogKCkgPT4gRGVlc1RvYXN0LAogIERlZXNVcGRhdGVyOiAoKSA9PiBEZWVzVXBkYXRlciwKICBEZWVzV2luZG93Q29udHJvbHM6ICgpID0+IERlZXNXaW5kb3dDb250cm9scywKICBEZWVzV2luZG93TGF5ZXI6ICgpID0+IERlZXNXaW5kb3dMYXllciwKICBEZWVzV29ya3NwYWNlOiAoKSA9PiBEZWVzV29ya3NwYWNlLAogIERlZXNXb3Jrc3BhY2VCb3R0b21iYXI6ICgpID0+IERlZXNXb3Jrc3BhY2VCb3R0b21iYXIsCiAgRGVlc1dvcmtzcGFjZURpZmZFZGl0b3I6ICgpID0+IERlZXNXb3Jrc3BhY2VEaWZmRWRpdG9yLAogIERlZXNXb3Jrc3BhY2VGaWxldHJlZTogKCkgPT4gRGVlc1dvcmtzcGFjZUZpbGV0cmVlLAogIERlZXNXb3Jrc3BhY2VNYXJrZG93bjogKCkgPT4gRGVlc1dvcmtzcGFjZU1hcmtkb3duLAogIERlZXNXb3Jrc3BhY2VNYXJrZG93bm91dGxldDogKCkgPT4gRGVlc1dvcmtzcGFjZU1hcmtkb3dub3V0bGV0LAogIERlZXNXb3Jrc3BhY2VNb25hY286ICgpID0+IERlZXNXb3Jrc3BhY2VNb25hY28sCiAgRGVlc1dvcmtzcGFjZVRlcm1pbmFsOiAoKSA9PiBEZWVzV29ya3NwYWNlVGVybWluYWwsCiAgRGVlc1dvcmtzcGFjZVRlcm1pbmFsUHJldmlldzogKCkgPT4gRGVlc1dvcmtzcGFjZVRlcm1pbmFsUHJldmlldywKICBEZWVzV3lzaXd5Z0Jsb2NrOiAoKSA9PiBEZWVzV3lzaXd5Z0Jsb2NrLAogIFBST0dSQU1NSU5HX0xBTkdVQUdFUzogKCkgPT4gUFJPR1JBTU1JTkdfTEFOR1VBR0VTLAogIFBkZk1hbmFnZXI6ICgpID0+IFBkZk1hbmFnZXIsCiAgUGVyZm9ybWFuY2VNb25pdG9yOiAoKSA9PiBQZXJmb3JtYW5jZU1vbml0b3IsCiAgVGVybWluYWxUYWJNYW5hZ2VyOiAoKSA9PiBUZXJtaW5hbFRhYk1hbmFnZXIsCiAgVHlwZVNjcmlwdEludGVsbGlTZW5zZU1hbmFnZXI6ICgpID0+IFR5cGVTY3JpcHRJbnRlbGxpU2Vuc2VNYW5hZ2VyLAogIFZpZXdSZWdpc3RyeTogKCkgPT4gVmlld1JlZ2lzdHJ5LAogIFdlYkNvbnRhaW5lckVudmlyb25tZW50OiAoKSA9PiBXZWJDb250YWluZXJFbnZpcm9ubWVudCwKICBXeXNpd3lnQmxvY2tPcGVyYXRpb25zOiAoKSA9PiBXeXNpd3lnQmxvY2tPcGVyYXRpb25zLAogIFd5c2l3eWdCbG9ja3M6ICgpID0+IFd5c2l3eWdCbG9ja3MsCiAgV3lzaXd5Z0NvbnZlcnRlcnM6ICgpID0+IFd5c2l3eWdDb252ZXJ0ZXJzLAogIFd5c2l3eWdEcmFnRHJvcEhhbmRsZXI6ICgpID0+IFd5c2l3eWdEcmFnRHJvcEhhbmRsZXIsCiAgV3lzaXd5Z0Zvcm1hdHRpbmc6ICgpID0+IFd5c2l3eWdGb3JtYXR0aW5nLAogIFd5c2l3eWdIaXN0b3J5OiAoKSA9PiBXeXNpd3lnSGlzdG9yeSwKICBXeXNpd3lnSW5wdXRIYW5kbGVyOiAoKSA9PiBXeXNpd3lnSW5wdXRIYW5kbGVyLAogIFd5c2l3eWdLZXlib2FyZEhhbmRsZXI6ICgpID0+IFd5c2l3eWdLZXlib2FyZEhhbmRsZXIsCiAgV3lzaXd5Z01vZGFsTWFuYWdlcjogKCkgPT4gV3lzaXd5Z01vZGFsTWFuYWdlciwKICBXeXNpd3lnU2VsZWN0aW9uOiAoKSA9PiBXeXNpd3lnU2VsZWN0aW9uLAogIFd5c2l3eWdTaG9ydGN1dHM6ICgpID0+IFd5c2l3eWdTaG9ydGN1dHMsCiAgWkluZGV4UmVnaXN0cnk6ICgpID0+IFpJbmRleFJlZ2lzdHJ5LAogIGNvbG9yczogKCkgPT4gY29sb3JzX2V4cG9ydHMsCiAgY29tbWl0aW5mbzogKCkgPT4gY29tbWl0aW5mbywKICBjb21wb25lbnRaSW5kZXg6ICgpID0+IGNvbXBvbmVudFpJbmRleCwKICBkZWJvdW5jZTogKCkgPT4gZGVib3VuY2UzLAogIGZvcm1hdEZpbGVTaXplOiAoKSA9PiBmb3JtYXRGaWxlU2l6ZSwKICBnZXRaSW5kZXg6ICgpID0+IGdldFpJbmRleCwKICBpY29uczogKCkgPT4gaWNvbnM0LAogIGlzSW5WaWV3cG9ydDogKCkgPT4gaXNJblZpZXdwb3J0LAogIHJlZ2lzdGVyQWxsQmxvY2tIYW5kbGVyczogKCkgPT4gcmVnaXN0ZXJBbGxCbG9ja0hhbmRsZXJzLAogIHRoZW1lRGVmYXVsdFN0eWxlczogKCkgPT4gdGhlbWVEZWZhdWx0U3R5bGVzLAogIHRoZW1lRGVmYXVsdHM6ICgpID0+IHRoZW1lRGVmYXVsdHMsCiAgdGhyb3R0bGU6ICgpID0+IHRocm90dGxlMiwKICB3eXNpd3lnU3R5bGVzOiAoKSA9PiB3eXNpd3lnU3R5bGVzLAogIHpJbmRleExheWVyczogKCkgPT4gekluZGV4TGF5ZXJzLAogIHpJbmRleFJlZ2lzdHJ5OiAoKSA9PiB6SW5kZXhSZWdpc3RyeQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDB6aW5kZXguanMKdmFyIHpJbmRleExheWVycyA9IHsKICAvLyBCYXNlIGxheWVyOiBSZWd1bGFyIGNvbnRlbnQKICBiYXNlOiB7CiAgICBjb250ZW50OiAiYXV0byIsCiAgICBpbnB1dEVsZW1lbnRzOiAxCiAgfSwKICAvLyBGaXhlZCBVSSBlbGVtZW50cwogIGZpeGVkOiB7CiAgICBhcHBCYXI6IDEwLAogICAgc2lkZU1lbnU6IDEwLAogICAgbW9iaWxlTmF2OiAyNTAKICB9LAogIC8vIE92ZXJsYXkgYmFja2Ryb3BzIChzZW1pLXRyYW5zcGFyZW50IGJhY2tncm91bmRzKQogIGJhY2tkcm9wOiB7CiAgICBkcm9wZG93bjogMTk5OSwKICAgIC8vIEJlbG93IG1vZGFscyBidXQgYWJvdmUgZml4ZWQgZWxlbWVudHMKICAgIG1vZGFsOiAyOTk5LAogICAgLy8gQmVsb3cgZHJvcGRvd25zIG9uIG1vZGFscwogICAgY29udGV4dE1lbnU6IDM5OTkKICAgIC8vIEJlbG93IGNyaXRpY2FsIG92ZXJsYXlzCiAgfSwKICAvLyBJbnRlcmFjdGl2ZSBvdmVybGF5cwogIG92ZXJsYXk6IHsKICAgIGRyb3Bkb3duOiAyZTMsCiAgICAvLyBEcm9wZG93bnMgYW5kIHNlbGVjdCBtZW51cwogICAgbW9kYWw6IDNlMywKICAgIC8vIE1vZGFsIGRpYWxvZ3MKICAgIGNvbnRleHRNZW51OiA0ZTMsCiAgICAvLyBDb250ZXh0IG1lbnVzIGFuZCB0b29sdGlwcwogICAgdG9hc3Q6IDVlMwogICAgLy8gVG9hc3Qgbm90aWZpY2F0aW9ucyAoaGlnaGVzdCBwcmlvcml0eSkKICB9LAogIC8vIFNwZWNpYWwgY2FzZXMgZm9yIG5lc3RlZCBlbGVtZW50cwogIG1vZGFsRHJvcGRvd246IDM1MDAsCiAgLy8gRHJvcGRvd25zIGluc2lkZSBtb2RhbHMKICB3eXNpd3lnTWVudXM6IDQ1MDAKICAvLyBFZGl0b3IgZm9ybWF0dGluZyBtZW51cwp9OwpmdW5jdGlvbiBnZXRaSW5kZXgoY2F0ZWdvcnksIHN1YmNhdGVnb3J5KSB7CiAgY29uc3QgY2F0ZWdvcnlPYmogPSB6SW5kZXhMYXllcnNbY2F0ZWdvcnldOwogIGlmICh0eXBlb2YgY2F0ZWdvcnlPYmogPT09ICJvYmplY3QiICYmIHN1YmNhdGVnb3J5KSB7CiAgICByZXR1cm4gY2F0ZWdvcnlPYmpbc3ViY2F0ZWdvcnldIHx8ICJhdXRvIjsKICB9CiAgcmV0dXJuIHR5cGVvZiBjYXRlZ29yeU9iaiA9PT0gIm51bWJlciIgPyBjYXRlZ29yeU9iaiA6ICJhdXRvIjsKfQp2YXIgY29tcG9uZW50WkluZGV4ID0gewogICJkZWVzLW1vZGFsIjogekluZGV4TGF5ZXJzLm92ZXJsYXkubW9kYWwsCiAgImRlZXMtd2luZG93bGF5ZXIiOiB6SW5kZXhMYXllcnMub3ZlcmxheS5kcm9wZG93biwKICAiZGVlcy1jb250ZXh0bWVudSI6IHpJbmRleExheWVycy5vdmVybGF5LmNvbnRleHRNZW51LAogICJkZWVzLXRvYXN0IjogekluZGV4TGF5ZXJzLm92ZXJsYXkudG9hc3QsCiAgImRlZXMtYXBwdWktbWFpbm1lbnUiOiB6SW5kZXhMYXllcnMuZml4ZWQuYXBwQmFyLAogICJkZWVzLW1vYmlsZW5hdmlnYXRpb24iOiB6SW5kZXhMYXllcnMuZml4ZWQubW9iaWxlTmF2LAogICJkZWVzLXNsYXNoLW1lbnUiOiB6SW5kZXhMYXllcnMud3lzaXd5Z01lbnVzLAogICJkZWVzLWZvcm1hdHRpbmctbWVudSI6IHpJbmRleExheWVycy53eXNpd3lnTWVudXMKfTsKdmFyIFpJbmRleFJlZ2lzdHJ5ID0gY2xhc3MgX1pJbmRleFJlZ2lzdHJ5IHsKICBzdGF0aWMgaW5zdGFuY2U7CiAgYWN0aXZlRWxlbWVudHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogIGVsZW1lbnRaSW5kZXhNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICBjdXJyZW50WkluZGV4ID0gMWUzOwogIC8vIFN0YXJ0aW5nIHotaW5kZXgKICBjb25zdHJ1Y3RvcigpIHsKICB9CiAgc3RhdGljIGdldEluc3RhbmNlKCkgewogICAgaWYgKCFfWkluZGV4UmVnaXN0cnkuaW5zdGFuY2UpIHsKICAgICAgX1pJbmRleFJlZ2lzdHJ5Lmluc3RhbmNlID0gbmV3IF9aSW5kZXhSZWdpc3RyeSgpOwogICAgfQogICAgcmV0dXJuIF9aSW5kZXhSZWdpc3RyeS5pbnN0YW5jZTsKICB9CiAgLyoqCiAgICogR2V0IHRoZSBuZXh0IGF2YWlsYWJsZSB6LWluZGV4CiAgICogQHJldHVybnMgVGhlIG5leHQgYXZhaWxhYmxlIHotaW5kZXgKICAgKi8KICBnZXROZXh0WkluZGV4KCkgewogICAgdGhpcy5jdXJyZW50WkluZGV4ICs9IDEwOwogICAgcmV0dXJuIHRoaXMuY3VycmVudFpJbmRleDsKICB9CiAgLyoqCiAgICogUmVnaXN0ZXIgYW4gZWxlbWVudCB3aXRoIHRoZSB6LWluZGV4IHJlZ2lzdHJ5CiAgICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgSFRNTCBlbGVtZW50IHRvIHJlZ2lzdGVyCiAgICogQHBhcmFtIHpJbmRleCAtIFRoZSB6LWluZGV4IGFzc2lnbmVkIHRvIHRoaXMgZWxlbWVudAogICAqLwogIHJlZ2lzdGVyKGVsZW1lbnQ0LCB6SW5kZXgpIHsKICAgIHRoaXMuYWN0aXZlRWxlbWVudHMuYWRkKGVsZW1lbnQ0KTsKICAgIHRoaXMuZWxlbWVudFpJbmRleE1hcC5zZXQoZWxlbWVudDQsIHpJbmRleCk7CiAgfQogIC8qKgogICAqIFVucmVnaXN0ZXIgYW4gZWxlbWVudCBmcm9tIHRoZSB6LWluZGV4IHJlZ2lzdHJ5CiAgICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgSFRNTCBlbGVtZW50IHRvIHVucmVnaXN0ZXIKICAgKi8KICB1bnJlZ2lzdGVyKGVsZW1lbnQ0KSB7CiAgICB0aGlzLmFjdGl2ZUVsZW1lbnRzLmRlbGV0ZShlbGVtZW50NCk7CiAgICB0aGlzLmVsZW1lbnRaSW5kZXhNYXAuZGVsZXRlKGVsZW1lbnQ0KTsKICAgIGlmICh0aGlzLmFjdGl2ZUVsZW1lbnRzLnNpemUgPT09IDApIHsKICAgICAgdGhpcy5jdXJyZW50WkluZGV4ID0gMWUzOwogICAgfQogIH0KICAvKioKICAgKiBHZXQgdGhlIHotaW5kZXggZm9yIGEgc3BlY2lmaWMgZWxlbWVudAogICAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIEhUTUwgZWxlbWVudAogICAqIEByZXR1cm5zIFRoZSB6LWluZGV4IG9yIHVuZGVmaW5lZCBpZiBub3QgcmVnaXN0ZXJlZAogICAqLwogIGdldEVsZW1lbnRaSW5kZXgoZWxlbWVudDQpIHsKICAgIHJldHVybiB0aGlzLmVsZW1lbnRaSW5kZXhNYXAuZ2V0KGVsZW1lbnQ0KTsKICB9CiAgLyoqCiAgICogR2V0IGNvdW50IG9mIGFjdGl2ZSBlbGVtZW50cwogICAqIEByZXR1cm5zIE51bWJlciBvZiBhY3RpdmUgZWxlbWVudHMKICAgKi8KICBnZXRBY3RpdmVDb3VudCgpIHsKICAgIHJldHVybiB0aGlzLmFjdGl2ZUVsZW1lbnRzLnNpemU7CiAgfQogIC8qKgogICAqIEdldCB0aGUgY3VycmVudCBoaWdoZXN0IHotaW5kZXgKICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCB6LWluZGV4IHZhbHVlCiAgICovCiAgZ2V0Q3VycmVudFpJbmRleCgpIHsKICAgIHJldHVybiB0aGlzLmN1cnJlbnRaSW5kZXg7CiAgfQogIC8qKgogICAqIENsZWFyIGFsbCByZWdpc3RyYXRpb25zICh1c2VmdWwgZm9yIHRlc3RpbmcpCiAgICovCiAgY2xlYXIoKSB7CiAgICB0aGlzLmFjdGl2ZUVsZW1lbnRzLmNsZWFyKCk7CiAgICB0aGlzLmVsZW1lbnRaSW5kZXhNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIHRoaXMuY3VycmVudFpJbmRleCA9IDFlMzsKICB9CiAgLyoqCiAgICogR2V0IGFsbCBhY3RpdmUgZWxlbWVudHMgaW4gei1pbmRleCBvcmRlcgogICAqIEByZXR1cm5zIEFycmF5IG9mIGVsZW1lbnRzIHNvcnRlZCBieSB6LWluZGV4CiAgICovCiAgZ2V0QWN0aXZlRWxlbWVudHNJbk9yZGVyKCkgewogICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5hY3RpdmVFbGVtZW50cykuc29ydCgoYTUsIGI1KSA9PiB7CiAgICAgIGNvbnN0IGFaID0gdGhpcy5lbGVtZW50WkluZGV4TWFwLmdldChhNSkgfHwgMDsKICAgICAgY29uc3QgYlogPSB0aGlzLmVsZW1lbnRaSW5kZXhNYXAuZ2V0KGI1KSB8fCAwOwogICAgICByZXR1cm4gYVogLSBiWjsKICAgIH0pOwogIH0KfTsKdmFyIHpJbmRleFJlZ2lzdHJ5ID0gWkluZGV4UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czI3ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czI3LCB7CiAgYnVzaW5lc3M6ICgpID0+IGJ1c2luZXNzX2V4cG9ydHMyLAogIGNvZGU6ICgpID0+IGNvZGVfZXhwb3J0czIsCiAgY29udGFpbmVyOiAoKSA9PiBjb250YWluZXJfZXhwb3J0czIsCiAgY29udGVudDogKCkgPT4gY29udGVudF9leHBvcnRzMiwKICBkYXRhYmFzZTogKCkgPT4gZGF0YWJhc2VfZXhwb3J0czIsCiAgZGVzY3JpcHRvcnM6ICgpID0+IGRlc2NyaXB0b3JzX2V4cG9ydHMsCiAgZmluYW5jZTogKCkgPT4gZmluYW5jZV9leHBvcnRzMiwKICBnZW5lcmFsOiAoKSA9PiBnZW5lcmFsX2V4cG9ydHMyLAogIG5ldHdvcms6ICgpID0+IG5ldHdvcmtfZXhwb3J0czIsCiAgc2FhczogKCkgPT4gc2Fhc19leHBvcnRzMiwKICBzdG9yYWdlOiAoKSA9PiBzdG9yYWdlX2V4cG9ydHMyLAogIHdlYnNpdGU6ICgpID0+IHdlYnNpdGVfZXhwb3J0czIKfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2luZGV4LmpzCnZhciBidXNpbmVzc19leHBvcnRzMiA9IHt9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9pbmRleC5qcwp2YXIgZGF0YWJhc2VfZXhwb3J0czIgPSB7fTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9pbmRleC5qcwp2YXIgZmluYW5jZV9leHBvcnRzMiA9IHt9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb2RlL2luZGV4LmpzCnZhciBjb2RlX2V4cG9ydHMyID0ge307CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRhaW5lci9pbmRleC5qcwp2YXIgY29udGFpbmVyX2V4cG9ydHMyID0ge307CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2Rlc2NyaXB0b3JzL2luZGV4LmpzCnZhciBkZXNjcmlwdG9yc19leHBvcnRzID0ge307CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvaW5kZXguanMKdmFyIGNvbnRlbnRfZXhwb3J0czIgPSB7fTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZ2VuZXJhbC9pbmRleC5qcwp2YXIgZ2VuZXJhbF9leHBvcnRzMiA9IHt9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2luZGV4LmpzCnZhciBuZXR3b3JrX2V4cG9ydHMyID0ge307Cl9fZXhwb3J0KG5ldHdvcmtfZXhwb3J0czIsIHsKICBJQ25hbWVEZXNjcmlwdG9yOiAoKSA9PiBJQ25hbWVEZXNjcmlwdG9yMgp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9jbmFtZS5qcwp2YXIgSUNuYW1lRGVzY3JpcHRvcjIgPSBjbGFzcyB7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3NhYXMvaW5kZXguanMKdmFyIHNhYXNfZXhwb3J0czIgPSB7fTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc3RvcmFnZS9pbmRleC5qcwp2YXIgc3RvcmFnZV9leHBvcnRzMiA9IHt9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL2luZGV4LmpzCnZhciB3ZWJzaXRlX2V4cG9ydHMyID0ge307CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwcGx1Z2lucy5qcwppbml0X2Rpc3RfdHMoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1jb250ZXh0bWVudS9kZWVzLWNvbnRleHRtZW51LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jID0gKCkgPT4gYjJgCjxzdHlsZT4KICAud2l0aE1hcmdpbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1hcmdpbjogMjBweDsKICB9CiAgLmRlbW8tY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAyMHB4OwogICAgcGFkZGluZzogMjBweDsKICAgIG1pbi1oZWlnaHQ6IDQwMHB4OwogIH0KICAuZGVtby1hcmVhIHsKICAgIHBhZGRpbmc6IDQwcHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBjdXJzb3I6IGNvbnRleHQtbWVudTsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4yczsKICB9CiAgLmRlbW8tYXJlYTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDIpOwogIH0KPC9zdHlsZT4KPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogIDxkZWVzLXBhbmVsIGhlYWRpbmc9IkJhc2ljIENvbnRleHQgTWVudSB3aXRoIE5lc3RlZCBTdWJtZW51cyI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLWFyZWEiIEBjb250ZXh0bWVudT0keyhldmVudEFyZykgPT4gewogIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudEFyZywgWwogICAgewogICAgICBuYW1lOiAiRmlsZSIsCiAgICAgIGljb25OYW1lOiAiZmlsZVRleHQiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwKICAgICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgICAgc3VibWVudTogWwogICAgICAgIHsgbmFtZTogIk5ldyIsIGljb25OYW1lOiAiZmlsZVBsdXMiLCBzaG9ydGN1dDogIkNtZCtOIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiTmV3IGZpbGUiKSB9LAogICAgICAgIHsgbmFtZTogIk9wZW4iLCBpY29uTmFtZTogImZvbGRlck9wZW4iLCBzaG9ydGN1dDogIkNtZCtPIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiT3BlbiBmaWxlIikgfSwKICAgICAgICB7IG5hbWU6ICJTYXZlIiwgaWNvbk5hbWU6ICJzYXZlIiwgc2hvcnRjdXQ6ICJDbWQrUyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNhdmUiKSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIkV4cG9ydCBhcyBQREYiLCBpY29uTmFtZTogImRvd25sb2FkIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRXhwb3J0IFBERiIpIH0sCiAgICAgICAgeyBuYW1lOiAiRXhwb3J0IGFzIEhUTUwiLCBpY29uTmFtZTogImNvZGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJFeHBvcnQgSFRNTCIpIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgbmFtZTogIkVkaXQiLAogICAgICBpY29uTmFtZTogImVkaXQzIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sCiAgICAgIC8vIFBhcmVudCBpdGVtcyB3aXRoIHN1Ym1lbnVzIHN0aWxsIG5lZWQgYW4gYWN0aW9uCiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJDdXQiLCBpY29uTmFtZTogInNjaXNzb3JzIiwgc2hvcnRjdXQ6ICJDbWQrWCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkN1dCIpIH0sCiAgICAgICAgeyBuYW1lOiAiQ29weSIsIGljb25OYW1lOiAiY29weSIsIHNob3J0Y3V0OiAiQ21kK0MiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDb3B5IikgfSwKICAgICAgICB7IG5hbWU6ICJQYXN0ZSIsIGljb25OYW1lOiAiY2xpcGJvYXJkIiwgc2hvcnRjdXQ6ICJDbWQrViIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlBhc3RlIikgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7IG5hbWU6ICJGaW5kIiwgaWNvbk5hbWU6ICJzZWFyY2giLCBzaG9ydGN1dDogIkNtZCtGIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRmluZCIpIH0sCiAgICAgICAgeyBuYW1lOiAiUmVwbGFjZSIsIGljb25OYW1lOiAicmVwZWF0Iiwgc2hvcnRjdXQ6ICJDbWQrSCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlJlcGxhY2UiKSB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJWaWV3IiwKICAgICAgaWNvbk5hbWU6ICJleWUiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwKICAgICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgICAgc3VibWVudTogWwogICAgICAgIHsgbmFtZTogIlpvb20gSW4iLCBpY29uTmFtZTogInpvb21JbiIsIHNob3J0Y3V0OiAiQ21kKysiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJab29tIGluIikgfSwKICAgICAgICB7IG5hbWU6ICJab29tIE91dCIsIGljb25OYW1lOiAiem9vbU91dCIsIHNob3J0Y3V0OiAiQ21kKy0iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJab29tIG91dCIpIH0sCiAgICAgICAgeyBuYW1lOiAiUmVzZXQgWm9vbSIsIGljb25OYW1lOiAibWF4aW1pemUyIiwgc2hvcnRjdXQ6ICJDbWQrMCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlJlc2V0IHpvb20iKSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIkZ1bGwgU2NyZWVuIiwgaWNvbk5hbWU6ICJtYXhpbWl6ZSIsIHNob3J0Y3V0OiAiRjExIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRnVsbCBzY3JlZW4iKSB9CiAgICAgIF0KICAgIH0sCiAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgIHsKICAgICAgbmFtZTogIlNldHRpbmdzIiwKICAgICAgaWNvbk5hbWU6ICJzZXR0aW5ncyIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNldHRpbmdzIikKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJIZWxwIiwKICAgICAgaWNvbk5hbWU6ICJoZWxwQ2lyY2xlIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sCiAgICAgIC8vIFBhcmVudCBpdGVtcyB3aXRoIHN1Ym1lbnVzIHN0aWxsIG5lZWQgYW4gYWN0aW9uCiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJEb2N1bWVudGF0aW9uIiwgaWNvbk5hbWU6ICJib29rIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRG9jdW1lbnRhdGlvbiIpIH0sCiAgICAgICAgeyBuYW1lOiAiS2V5Ym9hcmQgU2hvcnRjdXRzIiwgaWNvbk5hbWU6ICJrZXlib2FyZCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNob3J0Y3V0cyIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiQWJvdXQiLCBpY29uTmFtZTogImluZm8iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJBYm91dCIpIH0KICAgICAgXQogICAgfQogIF0pOwp9fT4KICAgICAgPGgzPlJpZ2h0LWNsaWNrIGFueXdoZXJlIGluIHRoaXMgYXJlYTwvaDM+CiAgICAgIDxwPkEgY29udGV4dCBtZW51IHdpdGggbmVzdGVkIHN1Ym1lbnVzIHdpbGwgYXBwZWFyPC9wPgogICAgPC9kaXY+CiAgPC9kZWVzLXBhbmVsPgogIDxkZWVzLXBhbmVsIGhlYWRpbmc9IkNvbXBvbmVudC1TcGVjaWZpYyBDb250ZXh0IE1lbnUiPgogICAgPGRlZXMtYnV0dG9uIHN0eWxlPSJtYXJnaW46IDIwcHg7IiBAY29udGV4dG1lbnU9JHsoZXZlbnRBcmcpID0+IHsKICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnRBcmcsIFsKICAgIHsKICAgICAgbmFtZTogIkJ1dHRvbiBBY3Rpb25zIiwKICAgICAgaWNvbk5hbWU6ICJtb3VzZVBvaW50ZXIiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwKICAgICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgICAgc3VibWVudTogWwogICAgICAgIHsgbmFtZTogIkNsaWNrIiwgaWNvbk5hbWU6ICJtb3VzZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkNsaWNrIGFjdGlvbiIpIH0sCiAgICAgICAgeyBuYW1lOiAiRG91YmxlIENsaWNrIiwgaWNvbk5hbWU6ICJ6YXAiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJEb3VibGUgY2xpY2siKSB9LAogICAgICAgIHsgbmFtZTogIkxvbmcgUHJlc3MiLCBpY29uTmFtZTogImNsb2NrIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiTG9uZyBwcmVzcyIpIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgbmFtZTogIkJ1dHRvbiBTdGF0ZSIsCiAgICAgIGljb25OYW1lOiAidG9nZ2xlTGVmdCIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICB9LAogICAgICAvLyBQYXJlbnQgaXRlbXMgd2l0aCBzdWJtZW51cyBzdGlsbCBuZWVkIGFuIGFjdGlvbgogICAgICBzdWJtZW51OiBbCiAgICAgICAgeyBuYW1lOiAiRW5hYmxlIiwgaWNvbk5hbWU6ICJjaGVja0NpcmNsZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkVuYWJsZSIpIH0sCiAgICAgICAgeyBuYW1lOiAiRGlzYWJsZSIsIGljb25OYW1lOiAieENpcmNsZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkRpc2FibGUiKSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIlNob3ciLCBpY29uTmFtZTogImV5ZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNob3ciKSB9LAogICAgICAgIHsgbmFtZTogIkhpZGUiLCBpY29uTmFtZTogImV5ZU9mZiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkhpZGUiKSB9CiAgICAgIF0KICAgIH0sCiAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgIHsKICAgICAgbmFtZTogIkRpc2FibGVkIEFjdGlvbiIsCiAgICAgIGljb25OYW1lOiAiYmFuIiwKICAgICAgZGlzYWJsZWQ6IHRydWUsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlRoaXMgc2hvdWxkIG5vdCBydW4iKQogICAgfSwKICAgIHsKICAgICAgbmFtZTogIlByb3BlcnRpZXMiLAogICAgICBpY29uTmFtZTogInNldHRpbmdzIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQnV0dG9uIHByb3BlcnRpZXMiKQogICAgfQogIF0pOwp9fT5SaWdodC1jbGljayBvbiB0aGlzIGJ1dHRvbjwvZGVlcy1idXR0b24+CiAgPC9kZWVzLXBhbmVsPgoKICA8ZGVlcy1wYW5lbCBoZWFkaW5nPSJBZHZhbmNlZCBDb250ZXh0IE1lbnUgRXhhbXBsZSI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLWFyZWEiIEBjb250ZXh0bWVudT0keyhldmVudEFyZykgPT4gewogIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudEFyZywgWwogICAgewogICAgICBuYW1lOiAiRm9ybWF0IiwKICAgICAgaWNvbk5hbWU6ICJ0eXBlIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sCiAgICAgIC8vIFBhcmVudCBpdGVtcyB3aXRoIHN1Ym1lbnVzIHN0aWxsIG5lZWQgYW4gYWN0aW9uCiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJCb2xkIiwgaWNvbk5hbWU6ICJib2xkIiwgc2hvcnRjdXQ6ICJDbWQrQiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkJvbGQiKSB9LAogICAgICAgIHsgbmFtZTogIkl0YWxpYyIsIGljb25OYW1lOiAiaXRhbGljIiwgc2hvcnRjdXQ6ICJDbWQrSSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkl0YWxpYyIpIH0sCiAgICAgICAgeyBuYW1lOiAiVW5kZXJsaW5lIiwgaWNvbk5hbWU6ICJ1bmRlcmxpbmUiLCBzaG9ydGN1dDogIkNtZCtVIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiVW5kZXJsaW5lIikgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7IG5hbWU6ICJGb250IFNpemUiLCBpY29uTmFtZTogInR5cGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJGb250IHNpemUgbWVudSIpIH0sCiAgICAgICAgeyBuYW1lOiAiRm9udCBDb2xvciIsIGljb25OYW1lOiAicGFsZXR0ZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkZvbnQgY29sb3IgbWVudSIpIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgbmFtZTogIlRyYW5zZm9ybSIsCiAgICAgIGljb25OYW1lOiAic2h1ZmZsZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICB9LAogICAgICAvLyBQYXJlbnQgaXRlbXMgd2l0aCBzdWJtZW51cyBzdGlsbCBuZWVkIGFuIGFjdGlvbgogICAgICBzdWJtZW51OiBbCiAgICAgICAgeyBuYW1lOiAiVG8gVXBwZXJjYXNlIiwgaWNvbk5hbWU6ICJhcnJvd1VwIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiVXBwZXJjYXNlIikgfSwKICAgICAgICB7IG5hbWU6ICJUbyBMb3dlcmNhc2UiLCBpY29uTmFtZTogImFycm93RG93biIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkxvd2VyY2FzZSIpIH0sCiAgICAgICAgeyBuYW1lOiAiQ2FwaXRhbGl6ZSIsIGljb25OYW1lOiAidHlwZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkNhcGl0YWxpemUiKSB9CiAgICAgIF0KICAgIH0sCiAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgIHsKICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgIGljb25OYW1lOiAidHJhc2gyIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRGVsZXRlIikKICAgIH0KICBdKTsKfX0+CiAgICAgIDxoMz5BZHZhbmNlZCBOZXN0ZWQgTWVudSBFeGFtcGxlPC9oMz4KICAgICAgPHA+VGhpcyBzaG93cyBkZWVwbHkgbmVzdGVkIHN1Ym1lbnVzIGFuZCB2YXJpb3VzIGZvcm1hdHRpbmcgb3B0aW9uczwvcD4KICAgIDwvZGl2PgogIDwvZGVlcy1wYW5lbD4KICAKICA8ZGVlcy1wYW5lbCBoZWFkaW5nPSJTdGF0aWMgQ29udGV4dCBNZW51IChBbHdheXMgVmlzaWJsZSkiPgogICAgPGRlZXMtY29udGV4dG1lbnUKICAgICAgY2xhc3M9IndpdGhNYXJnaW4iCiAgICAgIC5tZW51SXRlbXM9JHtbCiAgewogICAgbmFtZTogIlByb2plY3QiLAogICAgaWNvbk5hbWU6ICJmb2xkZXIiLAogICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICB9LAogICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgIHN1Ym1lbnU6IFsKICAgICAgeyBuYW1lOiAiTmV3IFByb2plY3QiLCBpY29uTmFtZTogImZvbGRlclBsdXMiLCBzaG9ydGN1dDogIkNtZCtTaGlmdCtOIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiTmV3IHByb2plY3QiKSB9LAogICAgICB7IG5hbWU6ICJPcGVuIFByb2plY3QiLCBpY29uTmFtZTogImZvbGRlck9wZW4iLCBzaG9ydGN1dDogIkNtZCtTaGlmdCtPIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiT3BlbiBwcm9qZWN0IikgfSwKICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgIHsgbmFtZTogIlJlY2VudCBQcm9qZWN0cyIsIGljb25OYW1lOiAiY2xvY2siLCBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwgc3VibWVudTogWwogICAgICAgIHsgbmFtZTogIlByb2plY3QgQWxwaGEiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIEFscGhhIikgfSwKICAgICAgICB7IG5hbWU6ICJQcm9qZWN0IEJldGEiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIEJldGEiKSB9LAogICAgICAgIHsgbmFtZTogIlByb2plY3QgR2FtbWEiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIEdhbW1hIikgfQogICAgICBdIH0KICAgIF0KICB9LAogIHsKICAgIG5hbWU6ICJUb29scyIsCiAgICBpY29uTmFtZTogInRvb2wiLAogICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICB9LAogICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgIHN1Ym1lbnU6IFsKICAgICAgeyBuYW1lOiAiVGVybWluYWwiLCBpY29uTmFtZTogInRlcm1pbmFsIiwgc2hvcnRjdXQ6ICJDbWQrVCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlRlcm1pbmFsIikgfSwKICAgICAgeyBuYW1lOiAiQ29uc29sZSIsIGljb25OYW1lOiAibW9uaXRvciIsIHNob3J0Y3V0OiAiQ21kK0siLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDb25zb2xlIikgfSwKICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgIHsgbmFtZTogIkV4dGVuc2lvbnMiLCBpY29uTmFtZTogInBhY2thZ2UiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJFeHRlbnNpb25zIikgfQogICAgXQogIH0sCiAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgewogICAgbmFtZTogIlByZWZlcmVuY2VzIiwKICAgIGljb25OYW1lOiAic2xpZGVycyIsCiAgICBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJQcmVmZXJlbmNlcyIpCiAgfQpdfQogICAgPjwvZGVlcy1jb250ZXh0bWVudT4KICA8L2RlZXMtcGFuZWw+CjwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXdpbmRvd2xheWVyL2RlZXMtd2luZG93bGF5ZXIuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9fZXNEZWNvcmF0ZTMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczQgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNXaW5kb3dMYXllciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtd2luZG93bGF5ZXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9vcHRpb25zX2RlY29yYXRvcnM7CiAgbGV0IF9vcHRpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYmFja2Ryb3BaSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX2JhY2tkcm9wWkluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYmFja2Ryb3BaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRlbnRaSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX2NvbnRlbnRaSW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92aXNpYmxlX2RlY29yYXRvcnM7CiAgbGV0IF92aXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV2luZG93TGF5ZXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfb3B0aW9uc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfYmFja2Ryb3BaSW5kZXhfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2NvbnRlbnRaSW5kZXhfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3Zpc2libGVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTModGhpcywgbnVsbCwgX29wdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3B0aW9ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3B0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vcHRpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcHRpb25zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX29wdGlvbnNfaW5pdGlhbGl6ZXJzLCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTModGhpcywgbnVsbCwgX2JhY2tkcm9wWkluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJhY2tkcm9wWkluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJiYWNrZHJvcFpJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5iYWNrZHJvcFpJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYmFja2Ryb3BaSW5kZXggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYmFja2Ryb3BaSW5kZXhfaW5pdGlhbGl6ZXJzLCBfYmFja2Ryb3BaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzKHRoaXMsIG51bGwsIF9jb250ZW50WkluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRlbnRaSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRlbnRaSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29udGVudFpJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29udGVudFpJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZW50WkluZGV4X2luaXRpYWxpemVycywgX2NvbnRlbnRaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzKHRoaXMsIG51bGwsIF92aXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZpc2libGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmlzaWJsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92aXNpYmxlX2luaXRpYWxpemVycywgX3Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1dpbmRvd0xheWVyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgPGRlZXMtd2luZG93bGF5ZXI+PC9kZWVzLXdpbmRvd2xheWVyPmA7CiAgICBzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdyhvcHRpb25zQXJnKSB7CiAgICAgIGNvbnN0IGRvbXRvb2xzSW5zdGFuY2UgPSBkaXN0X3RzX2V4cG9ydHMyNS5Eb21Ub29scy5nZXRHbG9iYWxEb21Ub29sc1N5bmMoKTsKICAgICAgY29uc3Qgd2luZG93TGF5ZXIgPSBuZXcgRGVlc1dpbmRvd0xheWVyMigpOwogICAgICB3aW5kb3dMYXllci5vcHRpb25zID0gewogICAgICAgIC4uLndpbmRvd0xheWVyLm9wdGlvbnMsCiAgICAgICAgLi4ub3B0aW9uc0FyZwogICAgICB9OwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZCh3aW5kb3dMYXllcik7CiAgICAgIGF3YWl0IGRvbXRvb2xzSW5zdGFuY2UuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgd2luZG93TGF5ZXIuc2hvdygpOwogICAgICByZXR1cm4gd2luZG93TGF5ZXI7CiAgICB9CiAgICAjb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF9vcHRpb25zX2luaXRpYWxpemVycywgewogICAgICBibHVyOiBmYWxzZQogICAgfSk7CiAgICBnZXQgb3B0aW9ucygpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcHRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYmFja2Ryb3BaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQodGhpcywgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQodGhpcywgX2JhY2tkcm9wWkluZGV4X2luaXRpYWxpemVycywgMWUzKSk7CiAgICBnZXQgYmFja2Ryb3BaSW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNiYWNrZHJvcFpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGJhY2tkcm9wWkluZGV4KHZhbHVlMikgewogICAgICB0aGlzLiNiYWNrZHJvcFpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRlbnRaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQodGhpcywgX2JhY2tkcm9wWkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF9jb250ZW50WkluZGV4X2luaXRpYWxpemVycywgMTAwMSkpOwogICAgZ2V0IGNvbnRlbnRaSW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZW50WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29udGVudFpJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29udGVudFpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQodGhpcywgX2NvbnRlbnRaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQodGhpcywgX3Zpc2libGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCB2aXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZpc2libGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICBfX3J1bkluaXRpYWxpemVyczQodGhpcywgX3Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBkaXN0X3RzX2V4cG9ydHMyNS5lbGVtZW50QmFzaWMuc2V0dXAoKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke2Rpc3RfdHNfZXhwb3J0czI1LmVsZW1lbnRCYXNpYy5zdHlsZXN9CiAgICAgIDxzdHlsZT4KICAgICAgICAud2luZG93T3ZlcmxheSB7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICB0b3A6IDBweDsKICAgICAgICAgIGxlZnQ6IDBweDsKICAgICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgICAgICB3aWR0aDogMTAwdnc7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjApOwogICAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBicmlnaHRuZXNzKDEpICR7dGhpcy5vcHRpb25zLmJsdXIgPyAiYmx1cigwcHgpIiA6ICIifTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgICAgei1pbmRleDogJHt0aGlzLmJhY2tkcm9wWkluZGV4fTsKICAgICAgICB9CiAgICAgICAgLnNsb3RDb250ZW50IHsKICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgICAgICB3aWR0aDogMTAwdnc7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgei1pbmRleDogJHt0aGlzLmNvbnRlbnRaSW5kZXh9OwogICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5zbG90Q29udGVudCA+ICogewogICAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC52aXNpYmxlIHsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYnJpZ2h0bmVzcygwLjkpICR7dGhpcy5vcHRpb25zLmJsdXIgPyAiYmx1cigycHgpIiA6ICIifTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IEBjbGljaz0ke3RoaXMuZGlzcGF0Y2hDbGlja2VkfSBjbGFzcz0id2luZG93T3ZlcmxheSAke3RoaXMudmlzaWJsZSA/ICJ2aXNpYmxlIiA6IG51bGx9Ij4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNsb3RDb250ZW50Ij4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTsKICAgICAgfSwgMTAwKTsKICAgIH0KICAgIGRpc3BhdGNoQ2xpY2tlZCgpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2xpY2tlZCIpKTsKICAgIH0KICAgIHRvZ2dsZVZpc2liaWxpdHkoKSB7CiAgICAgIHRoaXMudmlzaWJsZSA9ICF0aGlzLnZpc2libGU7CiAgICB9CiAgICBnZXRDb250ZW50WkluZGV4KCkgewogICAgICByZXR1cm4gdGhpcy5jb250ZW50WkluZGV4OwogICAgfQogICAgYXN5bmMgc2hvdygpIHsKICAgICAgY29uc3QgZG9tdG9vbHMgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgdGhpcy5iYWNrZHJvcFpJbmRleCA9IHpJbmRleFJlZ2lzdHJ5LmdldE5leHRaSW5kZXgoKTsKICAgICAgdGhpcy5jb250ZW50WkluZGV4ID0gekluZGV4UmVnaXN0cnkuZ2V0TmV4dFpJbmRleCgpOwogICAgICB6SW5kZXhSZWdpc3RyeS5yZWdpc3Rlcih0aGlzLCB0aGlzLmJhY2tkcm9wWkluZGV4KTsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTsKICAgIH0KICAgIGFzeW5jIGhpZGUoKSB7CiAgICAgIGNvbnN0IGRvbXRvb2xzID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlOwogICAgfQogICAgYXN5bmMgZGVzdHJveSgpIHsKICAgICAgY29uc3QgZG9tdG9vbHMgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgYXdhaXQgdGhpcy5oaWRlKCk7CiAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMzAwKTsKICAgICAgekluZGV4UmVnaXN0cnkudW5yZWdpc3Rlcih0aGlzKTsKICAgICAgdGhpcy5yZW1vdmUoKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1dpbmRvd0xheWVyMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtY29udGV4dG1lbnUvZGVlcy1jb250ZXh0bWVudS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X2RlZXNfaWNvbigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU1ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzQ29udGV4dG1lbnUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWNvbnRleHRtZW51IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbWVudUl0ZW1zX2RlY29yYXRvcnM7CiAgbGV0IF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0NvbnRleHRtZW51NyA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX21lbnVJdGVtc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBBcnJheQogICAgICB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTUodGhpcywgbnVsbCwgX21lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVJdGVtcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVJdGVtcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNDb250ZXh0bWVudTcgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gREVNTwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzsKICAgIC8vIFNUQVRJQwogICAgLy8gVGhpcyB3aWxsIHN0b3JlIGFsbCB0aGUgYWNjdW11bGF0ZWQgbWVudSBpdGVtcwogICAgc3RhdGljIGNvbnRleHRNZW51RGVhY3RpdmF0ZWQgPSBmYWxzZTsKICAgIHN0YXRpYyBhY2N1bXVsYXRlZE1lbnVJdGVtcyA9IFtdOwogICAgLy8gQWRkIGEgZ2xvYmFsIGV2ZW50IGxpc3RlbmVyIGZvciB0aGUgcmlnaHQtY2xpY2sgY29udGV4dCBtZW51CiAgICBzdGF0aWMgaW5pdGlhbGl6ZUdsb2JhbExpc3RlbmVyKCkgewogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIChldmVudCkgPT4gewogICAgICAgIGlmICh0aGlzLmNvbnRleHRNZW51RGVhY3RpdmF0ZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICBEZWVzQ29udGV4dG1lbnU3LmFjY3VtdWxhdGVkTWVudUl0ZW1zID0gW107CiAgICAgICAgY29uc3QgcGF0aDIgPSBldmVudC5jb21wb3NlZFBhdGgoKTsKICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQ0IG9mIHBhdGgyKSB7CiAgICAgICAgICBpZiAoZWxlbWVudDQuZ2V0Q29udGV4dE1lbnVJdGVtcykgewogICAgICAgICAgICBjb25zdCBpdGVtcyA9IGVsZW1lbnQ0LmdldENvbnRleHRNZW51SXRlbXMoKTsKICAgICAgICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICBpZiAoRGVlc0NvbnRleHRtZW51Ny5hY2N1bXVsYXRlZE1lbnVJdGVtcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICBEZWVzQ29udGV4dG1lbnU3LmFjY3VtdWxhdGVkTWVudUl0ZW1zLnB1c2goeyBkaXZpZGVyOiB0cnVlIH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBEZWVzQ29udGV4dG1lbnU3LmFjY3VtdWxhdGVkTWVudUl0ZW1zLnB1c2goLi4uaXRlbXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIERlZXNDb250ZXh0bWVudTcub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIERlZXNDb250ZXh0bWVudTcuYWNjdW11bGF0ZWRNZW51SXRlbXMpOwogICAgICB9KTsKICAgIH0KICAgIC8vIGFsbG93cyBvcGVuaW5nIG9mIGEgY29udGV4dG1lbnUgd2l0aCBvcHRpb25zCiAgICBzdGF0aWMgYXN5bmMgb3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnRBcmcsIG1lbnVJdGVtc0FyZykgewogICAgICBpZiAodGhpcy5jb250ZXh0TWVudURlYWN0aXZhdGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGV2ZW50QXJnLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGV2ZW50QXJnLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb25zdCBjb250ZXh0TWVudSA9IG5ldyBEZWVzQ29udGV4dG1lbnU3KCk7CiAgICAgIGNvbnRleHRNZW51LnN0eWxlLnBvc2l0aW9uID0gImZpeGVkIjsKICAgICAgY29udGV4dE1lbnUuc3R5bGUuekluZGV4ID0gU3RyaW5nKHpJbmRleExheWVycy5vdmVybGF5LmNvbnRleHRNZW51KTsKICAgICAgY29udGV4dE1lbnUuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgICAgY29udGV4dE1lbnUuc3R5bGUudHJhbnNmb3JtID0gInNjYWxlKDAuOTUpIHRyYW5zbGF0ZVkoLTEwcHgpIjsKICAgICAgY29udGV4dE1lbnUubWVudUl0ZW1zID0gbWVudUl0ZW1zQXJnOwogICAgICBjb250ZXh0TWVudS53aW5kb3dMYXllciA9IGF3YWl0IERlZXNXaW5kb3dMYXllci5jcmVhdGVBbmRTaG93KCk7CiAgICAgIGNvbnRleHRNZW51LndpbmRvd0xheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYXN5bmMgKGV2ZW50KSA9PiB7CiAgICAgICAgY29uc3QgY2xpY2tlZEVsZW1lbnQgPSBldmVudC50YXJnZXQ7CiAgICAgICAgY29uc3QgaXNDb250ZXh0TWVudSA9IGNsaWNrZWRFbGVtZW50LmNsb3Nlc3QoImRlZXMtY29udGV4dG1lbnUiKTsKICAgICAgICBpZiAoIWlzQ29udGV4dE1lbnUpIHsKICAgICAgICAgIGF3YWl0IGNvbnRleHRNZW51LmRlc3Ryb3koKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChjb250ZXh0TWVudSk7CiAgICAgIGF3YWl0IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICBjb25zdCByZWN0ID0gY29udGV4dE1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7CiAgICAgIGNvbnN0IHdpbmRvd0hlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDsKICAgICAgbGV0IHRvcCA9IGV2ZW50QXJnLmNsaWVudFk7CiAgICAgIGxldCBsZWZ0ID0gZXZlbnRBcmcuY2xpZW50WDsKICAgICAgaWYgKGxlZnQgKyByZWN0LndpZHRoID4gd2luZG93V2lkdGgpIHsKICAgICAgICBsZWZ0ID0gd2luZG93V2lkdGggLSByZWN0LndpZHRoIC0gMTA7CiAgICAgIH0KICAgICAgaWYgKHRvcCArIHJlY3QuaGVpZ2h0ID4gd2luZG93SGVpZ2h0KSB7CiAgICAgICAgdG9wID0gd2luZG93SGVpZ2h0IC0gcmVjdC5oZWlnaHQgLSAxMDsKICAgICAgfQogICAgICBpZiAobGVmdCA8IDEwKQogICAgICAgIGxlZnQgPSAxMDsKICAgICAgaWYgKHRvcCA8IDEwKQogICAgICAgIHRvcCA9IDEwOwogICAgICBjb250ZXh0TWVudS5zdHlsZS50b3AgPSBgJHt0b3B9cHhgOwogICAgICBjb250ZXh0TWVudS5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7CiAgICAgIGNvbnRleHRNZW51LnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9ICJ0b3AgbGVmdCI7CiAgICAgIGF3YWl0IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICBjb250ZXh0TWVudS5zdHlsZS5vcGFjaXR5ID0gIjEiOwogICAgICBjb250ZXh0TWVudS5zdHlsZS50cmFuc2Zvcm0gPSAic2NhbGUoMSkgdHJhbnNsYXRlWSgwKSI7CiAgICB9CiAgICAjbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczYodGhpcywgX21lbnVJdGVtc19pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgbWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gdGhpcy4jbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWVudUl0ZW1zKHZhbHVlMikgewogICAgICB0aGlzLiNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHdpbmRvd0xheWVyID0gX19ydW5Jbml0aWFsaXplcnM2KHRoaXMsIF9tZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgc3VibWVudSA9IG51bGw7CiAgICBzdWJtZW51VGltZW91dCA9IG51bGw7CiAgICBwYXJlbnRNZW51ID0gbnVsbDsKICAgIGlzRGVzdHJveWluZyA9IGZhbHNlOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIHRoaXMudGFiSW5kZXggPSAwOwogICAgfQogICAgLyoqCiAgICAgKiBTVEFUSUMgU1RZTEVTCiAgICAgKi8KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzLCB0cmFuc2Zvcm0gMC4yczsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAubWFpbmJveCB7CiAgICAgICAgbWluLXdpZHRoOiAyMDBweDsKICAgICAgICBtYXgtd2lkdGg6IDI4MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzIwMjAyMCIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYm94LXNoYWRvdzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KSIsICIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4zKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBwYWRkaW5nOiA0cHggMDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNjY2MiKX07CiAgICAgIH0KCiAgICAgIC5tZW51aXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAubWVudWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDQpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tZW51aXRlbS5oYXMtc3VibWVudTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICfigLonOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC5tZW51aXRlbTphY3RpdmU6bm90KC5oYXMtc3VibWVudSkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDgpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tZW51aXRlbS5kaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tZW51aXRlbSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC5tZW51aXRlbS10ZXh0IHsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAubWVudWl0ZW0tc2hvcnRjdXQgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5OTkiLCAiIzY2NiIpfTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC5tZW51LWRpdmlkZXIgewogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAke3RoaXMubWVudUl0ZW1zLm1hcCgobWVudUl0ZW1BcmcpID0+IHsKICAgICAgICBpZiAoImRpdmlkZXIiIGluIG1lbnVJdGVtQXJnICYmIG1lbnVJdGVtQXJnLmRpdmlkZXIpIHsKICAgICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJtZW51LWRpdmlkZXIiPjwvZGl2PmA7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG1lbnVJdGVtID0gbWVudUl0ZW1Bcmc7CiAgICAgICAgY29uc3QgaGFzU3VibWVudSA9IG1lbnVJdGVtLnN1Ym1lbnUgJiYgbWVudUl0ZW0uc3VibWVudS5sZW5ndGggPiAwOwogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgPGRpdiAKICAgICAgICAgICAgICBjbGFzcz0ibWVudWl0ZW0gJHttZW51SXRlbS5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0gJHtoYXNTdWJtZW51ID8gImhhcy1zdWJtZW51IiA6ICIifSIgCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gIW1lbnVJdGVtLmRpc2FibGVkICYmICFoYXNTdWJtZW51ICYmIHRoaXMuaGFuZGxlQ2xpY2sobWVudUl0ZW0pfQogICAgICAgICAgICAgIEBtb3VzZWVudGVyPSR7KCkgPT4gdGhpcy5oYW5kbGVNZW51SXRlbUhvdmVyKG1lbnVJdGVtLCBoYXNTdWJtZW51KX0KICAgICAgICAgICAgICBAbW91c2VsZWF2ZT0keygpID0+IHRoaXMuaGFuZGxlTWVudUl0ZW1MZWF2ZSgpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgJHttZW51SXRlbS5pY29uTmFtZSA/IGIyYAogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHttZW51SXRlbS5pY29uTmFtZX0iPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVudWl0ZW0tdGV4dCI+JHttZW51SXRlbS5uYW1lfTwvc3Bhbj4KICAgICAgICAgICAgICAke21lbnVJdGVtLnNob3J0Y3V0ICYmICFoYXNTdWJtZW51ID8gYjJgCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVudWl0ZW0tc2hvcnRjdXQiPiR7bWVudUl0ZW0uc2hvcnRjdXR9PC9zcGFuPgogICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICAke3RoaXMubWVudUl0ZW1zLmxlbmd0aCA9PT0gMCA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZW51aXRlbSIgQGNsaWNrPSR7KCkgPT4gewogICAgICAgIERlZXNDb250ZXh0bWVudTcuY29udGV4dE1lbnVEZWFjdGl2YXRlZCA9IHRydWU7CiAgICAgICAgdGhpcy5kZXN0cm95KCk7CiAgICAgIH19PgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249Imx1Y2lkZTp4Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVudWl0ZW0tdGV4dCI+QWxsb3cgbmF0aXZlIGNvbnRleHQ8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiBiMmBgfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuZm9jdXMoKTsKICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5oYW5kbGVLZXlkb3duKTsKICAgIH0KICAgIGhhbmRsZUtleWRvd24gPSAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgiLm1lbnVpdGVtOm5vdCguZGlzYWJsZWQpIikpOwogICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBtZW51SXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLm1hdGNoZXMoIjpob3ZlciIpKTsKICAgICAgc3dpdGNoIChldmVudC5rZXkpIHsKICAgICAgICBjYXNlICJBcnJvd0Rvd24iOgogICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCArIDEgPCBtZW51SXRlbXMubGVuZ3RoID8gY3VycmVudEluZGV4ICsgMSA6IDA7CiAgICAgICAgICBtZW51SXRlbXNbbmV4dEluZGV4XS5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCJtb3VzZWVudGVyIikpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQXJyb3dVcCI6CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgY29uc3QgcHJldkluZGV4ID0gY3VycmVudEluZGV4IC0gMSA+PSAwID8gY3VycmVudEluZGV4IC0gMSA6IG1lbnVJdGVtcy5sZW5ndGggLSAxOwogICAgICAgICAgbWVudUl0ZW1zW3ByZXZJbmRleF0uZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgibW91c2VlbnRlciIpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkVudGVyIjoKICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBpZiAoY3VycmVudEluZGV4ID49IDApIHsKICAgICAgICAgICAgbWVudUl0ZW1zW2N1cnJlbnRJbmRleF0uY2xpY2soKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkVzY2FwZSI6CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5kZXN0cm95KCk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfTsKICAgIGFzeW5jIGhhbmRsZUNsaWNrKG1lbnVJdGVtKSB7CiAgICAgIG1lbnVJdGVtLmFjdGlvbigpOwogICAgICBhd2FpdCB0aGlzLmRlc3Ryb3lBbGwoKTsKICAgIH0KICAgIGFzeW5jIGhhbmRsZU1lbnVJdGVtSG92ZXIobWVudUl0ZW0sIGhhc1N1Ym1lbnUpIHsKICAgICAgaWYgKHRoaXMuc3VibWVudVRpbWVvdXQpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zdWJtZW51VGltZW91dCk7CiAgICAgICAgdGhpcy5zdWJtZW51VGltZW91dCA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuc3VibWVudSkgewogICAgICAgIGF3YWl0IHRoaXMuaGlkZVN1Ym1lbnUoKTsKICAgICAgfQogICAgICBpZiAoaGFzU3VibWVudSAmJiBtZW51SXRlbS5zdWJtZW51KSB7CiAgICAgICAgdGhpcy5zdWJtZW51VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgdGhpcy5zaG93U3VibWVudShtZW51SXRlbSk7CiAgICAgICAgfSwgMjAwKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlTWVudUl0ZW1MZWF2ZSgpIHsKICAgICAgaWYgKHRoaXMuc3VibWVudVRpbWVvdXQpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zdWJtZW51VGltZW91dCk7CiAgICAgIH0KICAgICAgdGhpcy5zdWJtZW51VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGlmICh0aGlzLnN1Ym1lbnUgJiYgIXRoaXMuc3VibWVudS5tYXRjaGVzKCI6aG92ZXIiKSkgewogICAgICAgICAgdGhpcy5oaWRlU3VibWVudSgpOwogICAgICAgIH0KICAgICAgfSwgMzAwKTsKICAgIH0KICAgIGFzeW5jIHNob3dTdWJtZW51KG1lbnVJdGVtKSB7CiAgICAgIGlmICghbWVudUl0ZW0uc3VibWVudSB8fCBtZW51SXRlbS5zdWJtZW51Lmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG1lbnVJdGVtcyA9IEFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5tZW51aXRlbSIpKTsKICAgICAgY29uc3QgbWVudUl0ZW1FbGVtZW50ID0gbWVudUl0ZW1zLmZpbmQoKGVsKSA9PiBlbC5xdWVyeVNlbGVjdG9yKCIubWVudWl0ZW0tdGV4dCIpPy50ZXh0Q29udGVudCA9PT0gbWVudUl0ZW0ubmFtZSk7CiAgICAgIGlmICghbWVudUl0ZW1FbGVtZW50KQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5zdWJtZW51ID0gbmV3IERlZXNDb250ZXh0bWVudTcoKTsKICAgICAgdGhpcy5zdWJtZW51Lm1lbnVJdGVtcyA9IG1lbnVJdGVtLnN1Ym1lbnU7CiAgICAgIHRoaXMuc3VibWVudS5wYXJlbnRNZW51ID0gdGhpczsKICAgICAgdGhpcy5zdWJtZW51LnN0eWxlLnBvc2l0aW9uID0gImZpeGVkIjsKICAgICAgdGhpcy5zdWJtZW51LnN0eWxlLnpJbmRleCA9IFN0cmluZyhwYXJzZUludCh0aGlzLnN0eWxlLnpJbmRleCkgKyAxKTsKICAgICAgdGhpcy5zdWJtZW51LnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgIHRoaXMuc3VibWVudS5zdHlsZS50cmFuc2Zvcm0gPSAic2NhbGUoMC45NSkiOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZCh0aGlzLnN1Ym1lbnUpOwogICAgICBhd2FpdCBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgY29uc3QgaXRlbVJlY3QgPSBtZW51SXRlbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IG1lbnVSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgY29uc3Qgc3VibWVudVJlY3QgPSB0aGlzLnN1Ym1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7CiAgICAgIGxldCBsZWZ0ID0gbWVudVJlY3QucmlnaHQgLSA0OwogICAgICBsZXQgdG9wID0gaXRlbVJlY3QudG9wOwogICAgICBpZiAobGVmdCArIHN1Ym1lbnVSZWN0LndpZHRoID4gd2luZG93V2lkdGggLSAxMCkgewogICAgICAgIGxlZnQgPSBtZW51UmVjdC5sZWZ0IC0gc3VibWVudVJlY3Qud2lkdGggKyA0OwogICAgICB9CiAgICAgIGlmICh0b3AgKyBzdWJtZW51UmVjdC5oZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQgLSAxMCkgewogICAgICAgIHRvcCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHN1Ym1lbnVSZWN0LmhlaWdodCAtIDEwOwogICAgICB9CiAgICAgIHRoaXMuc3VibWVudS5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7CiAgICAgIHRoaXMuc3VibWVudS5zdHlsZS50b3AgPSBgJHt0b3B9cHhgOwogICAgICBhd2FpdCBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgdGhpcy5zdWJtZW51LnN0eWxlLm9wYWNpdHkgPSAiMSI7CiAgICAgIHRoaXMuc3VibWVudS5zdHlsZS50cmFuc2Zvcm0gPSAic2NhbGUoMSkiOwogICAgICB0aGlzLnN1Ym1lbnUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsICgpID0+IHsKICAgICAgICBpZiAodGhpcy5zdWJtZW51VGltZW91dCkgewogICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3VibWVudVRpbWVvdXQpOwogICAgICAgICAgdGhpcy5zdWJtZW51VGltZW91dCA9IG51bGw7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5zdWJtZW51LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCAoKSA9PiB7CiAgICAgICAgdGhpcy5oYW5kbGVNZW51SXRlbUxlYXZlKCk7CiAgICAgIH0pOwogICAgfQogICAgYXN5bmMgaGlkZVN1Ym1lbnUoKSB7CiAgICAgIGlmICghdGhpcy5zdWJtZW51KQogICAgICAgIHJldHVybjsKICAgICAgYXdhaXQgdGhpcy5zdWJtZW51LmRlc3Ryb3koKTsKICAgICAgdGhpcy5zdWJtZW51ID0gbnVsbDsKICAgIH0KICAgIGFzeW5jIGRlc3Ryb3koKSB7CiAgICAgIGlmICh0aGlzLmlzRGVzdHJveWluZykgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLmlzRGVzdHJveWluZyA9IHRydWU7CiAgICAgIGlmICh0aGlzLnN1Ym1lbnVUaW1lb3V0KSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3VibWVudVRpbWVvdXQpOwogICAgICAgIHRoaXMuc3VibWVudVRpbWVvdXQgPSBudWxsOwogICAgICB9CiAgICAgIGlmICh0aGlzLnN1Ym1lbnUpIHsKICAgICAgICBhd2FpdCB0aGlzLnN1Ym1lbnUuZGVzdHJveSgpOwogICAgICAgIHRoaXMuc3VibWVudSA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMud2luZG93TGF5ZXIgJiYgIXRoaXMucGFyZW50TWVudSkgewogICAgICAgIHRoaXMud2luZG93TGF5ZXIuZGVzdHJveSgpOwogICAgICB9CiAgICAgIHRoaXMuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgICAgdGhpcy5zdHlsZS50cmFuc2Zvcm0gPSAic2NhbGUoMC45NSkgdHJhbnNsYXRlWSgtMTBweCkiOwogICAgICBhd2FpdCBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigxMDApOwogICAgICBpZiAodGhpcy5wYXJlbnRFbGVtZW50KSB7CiAgICAgICAgdGhpcy5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIERlc3Ryb3lzIHRoaXMgbWVudSBhbmQgYWxsIHBhcmVudCBtZW51cyBpbiB0aGUgY2hhaW4KICAgICAqLwogICAgYXN5bmMgZGVzdHJveUFsbCgpIHsKICAgICAgbGV0IHJvb3RNZW51ID0gdGhpczsKICAgICAgd2hpbGUgKHJvb3RNZW51LnBhcmVudE1lbnUpIHsKICAgICAgICByb290TWVudSA9IHJvb3RNZW51LnBhcmVudE1lbnU7CiAgICAgIH0KICAgICAgYXdhaXQgcm9vdE1lbnUuZGVzdHJveSgpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQ29udGV4dG1lbnU3ID0gX2NsYXNzVGhpczsKfSkoKTsKRGVlc0NvbnRleHRtZW51LmluaXRpYWxpemVHbG9iYWxMaXN0ZW5lcigpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtd2NjdG9vbHNAMy43LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtd2NjdG9vbHMvZGlzdF90c19kZW1vdG9vbHMvZGVtb3Rvb2xzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBfX2VzRGVjb3JhdGU2ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzRGVtb1dyYXBwZXIgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWRlbW93cmFwcGVyIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfcnVuQWZ0ZXJSZW5kZXJfZGVjb3JhdG9yczsKICBsZXQgX3J1bkFmdGVyUmVuZGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcnVuQWZ0ZXJSZW5kZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0RlbW9XcmFwcGVyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3J1bkFmdGVyUmVuZGVyX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX19lc0RlY29yYXRlNih0aGlzLCBudWxsLCBfcnVuQWZ0ZXJSZW5kZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicnVuQWZ0ZXJSZW5kZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJ1bkFmdGVyUmVuZGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJ1bkFmdGVyUmVuZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ydW5BZnRlclJlbmRlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ydW5BZnRlclJlbmRlcl9pbml0aWFsaXplcnMsIF9ydW5BZnRlclJlbmRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzRGVtb1dyYXBwZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgICNydW5BZnRlclJlbmRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3KHRoaXMsIF9ydW5BZnRlclJlbmRlcl9pbml0aWFsaXplcnMsIHZvaWQgMCk7CiAgICBnZXQgcnVuQWZ0ZXJSZW5kZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNydW5BZnRlclJlbmRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJ1bkFmdGVyUmVuZGVyKHZhbHVlMikgewogICAgICB0aGlzLiNydW5BZnRlclJlbmRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGNvbnRlbnRzOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gc2V0VGltZW91dChyZXNvbHZlMiwgNTApKTsKICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiB0aGlzLnJ1bkFmdGVyUmVuZGVyKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IHRoaXMucnVuQWZ0ZXJSZW5kZXIodGhpcyk7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGluIHJ1bkFmdGVyUmVuZGVyOiIsIGVycm9yKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczcodGhpcywgX3J1bkFmdGVyUmVuZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0RlbW9XcmFwcGVyMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hY3Rpdml0eWxvZy9kZWVzLWFwcHVpLWFjdGl2aXR5bG9nLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMyA9ICgpID0+IHsKICBjb25zdCBhY3Rpdml0eUxvZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZXMtYXBwdWktYWN0aXZpdHlsb2ciKTsKICBzZXRUaW1lb3V0KCgpID0+IHsKICAgIGFjdGl2aXR5TG9nLmFkZE1hbnkoWwogICAgICB7IHR5cGU6ICJsb2dpbiIsIHVzZXI6ICJKb2huIERvZSIsIG1lc3NhZ2U6ICJsb2dnZWQgaW4gZnJvbSBDaHJvbWUgb24gbWFjT1MiIH0sCiAgICAgIHsgdHlwZTogImNyZWF0ZSIsIHVzZXI6ICJKb2huIERvZSIsIG1lc3NhZ2U6ICdjcmVhdGVkIGEgbmV3IHByb2plY3QgIkZyb250ZW5kIEFwcCInIH0sCiAgICAgIHsgdHlwZTogInVwZGF0ZSIsIHVzZXI6ICJKYW5lIFNtaXRoIiwgbWVzc2FnZTogInVwZGF0ZWQgQVBJIGRvY3VtZW50YXRpb24iIH0sCiAgICAgIHsgdHlwZTogInZpZXciLCB1c2VyOiAiSm9obiBEb2UiLCBtZXNzYWdlOiAidmlld2VkIGRhc2hib2FyZCBhbmFseXRpY3MiIH0sCiAgICAgIHsgdHlwZTogImRlbGV0ZSIsIHVzZXI6ICJBZG1pbiIsIG1lc3NhZ2U6ICJyZW1vdmVkIGRlcHJlY2F0ZWQgZW5kcG9pbnQiIH0sCiAgICAgIHsgdHlwZTogImN1c3RvbSIsIHVzZXI6ICJTeXN0ZW0iLCBtZXNzYWdlOiAic2NoZWR1bGVkIGJhY2t1cCBjb21wbGV0ZWQiLCBpY29uTmFtZTogImx1Y2lkZTpkYXRhYmFzZSIgfSwKICAgICAgeyB0eXBlOiAibG9nb3V0IiwgdXNlcjogIkFsaWNlIEJyb3duIiwgbWVzc2FnZTogImxvZ2dlZCBvdXQiIH0sCiAgICAgIHsgdHlwZTogImNyZWF0ZSIsIHVzZXI6ICJKYW5lIFNtaXRoIiwgbWVzc2FnZTogImNyZWF0ZWQgaW52b2ljZSAjMTIzNCIgfQogICAgXSk7CiAgICBhY3Rpdml0eUxvZy5lbnRyaWVzJC5zdWJzY3JpYmUoKGVudHJpZXMpID0+IHsKICAgICAgY29uc29sZS5sb2coIkFjdGl2aXR5IGxvZyB1cGRhdGVkOiIsIGVudHJpZXMubGVuZ3RoLCAiZW50cmllcyIpOwogICAgfSk7CiAgfSwgMTAwKTsKICByZXR1cm4gYjJgCiAgICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgICAgPHN0eWxlPgogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgaGVpZ2h0OiA2MDBweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMwOTA5MGIiKX07CiAgICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICAgICR7YWN0aXZpdHlMb2d9CiAgICAgIDwvZGl2PgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hY3Rpdml0eWxvZy9kZWVzLWFwcHVpLWFjdGl2aXR5bG9nLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfZGVlc19pY29uKCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTcgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczggPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aUFjdGl2aXR5bG9nID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hcHB1aS1hY3Rpdml0eWxvZyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2VudHJpZXNfZGVjb3JhdG9yczsKICBsZXQgX2VudHJpZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lbnRyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hRdWVyeV9kZWNvcmF0b3JzOwogIGxldCBfc2VhcmNoUXVlcnlfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hRdWVyeV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsdGVyQ3JpdGVyaWFfZGVjb3JhdG9yczsKICBsZXQgX2ZpbHRlckNyaXRlcmlhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsdGVyQ3JpdGVyaWFfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0FwcHVpQWN0aXZpdHlsb2cyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfZW50cmllc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2VhcmNoUXVlcnlfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2ZpbHRlckNyaXRlcmlhX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTcodGhpcywgbnVsbCwgX2VudHJpZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZW50cmllcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZW50cmllcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbnRyaWVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5lbnRyaWVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VudHJpZXNfaW5pdGlhbGl6ZXJzLCBfZW50cmllc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTcodGhpcywgbnVsbCwgX3NlYXJjaFF1ZXJ5X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlYXJjaFF1ZXJ5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWFyY2hRdWVyeSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWFyY2hRdWVyeSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VhcmNoUXVlcnkgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VhcmNoUXVlcnlfaW5pdGlhbGl6ZXJzLCBfc2VhcmNoUXVlcnlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3KHRoaXMsIG51bGwsIF9maWx0ZXJDcml0ZXJpYV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJmaWx0ZXJDcml0ZXJpYSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZmlsdGVyQ3JpdGVyaWEiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsdGVyQ3JpdGVyaWEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmZpbHRlckNyaXRlcmlhID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ZpbHRlckNyaXRlcmlhX2luaXRpYWxpemVycywgX2ZpbHRlckNyaXRlcmlhX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNBcHB1aUFjdGl2aXR5bG9nMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMzOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI2VudHJpZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzOCh0aGlzLCBfZW50cmllc19pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFIFBST1BFUlRJRVMKICAgIGdldCBlbnRyaWVzKCkgewogICAgICByZXR1cm4gdGhpcy4jZW50cmllc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGVudHJpZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI2VudHJpZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWFyY2hRdWVyeV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOCh0aGlzLCBfZW50cmllc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOCh0aGlzLCBfc2VhcmNoUXVlcnlfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHNlYXJjaFF1ZXJ5KCkgewogICAgICByZXR1cm4gdGhpcy4jc2VhcmNoUXVlcnlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWFyY2hRdWVyeSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VhcmNoUXVlcnlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNmaWx0ZXJDcml0ZXJpYV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOCh0aGlzLCBfc2VhcmNoUXVlcnlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczgodGhpcywgX2ZpbHRlckNyaXRlcmlhX2luaXRpYWxpemVycywge30pKTsKICAgIGdldCBmaWx0ZXJDcml0ZXJpYSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2ZpbHRlckNyaXRlcmlhX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsdGVyQ3JpdGVyaWEodmFsdWUyKSB7CiAgICAgIHRoaXMuI2ZpbHRlckNyaXRlcmlhX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBSeEpTIFN1YmplY3QgZm9yIHJlYWN0aXZlIHVwZGF0ZXMKICAgIGVudHJpZXMkID0gKF9fcnVuSW5pdGlhbGl6ZXJzOCh0aGlzLCBfZmlsdGVyQ3JpdGVyaWFfZXh0cmFJbml0aWFsaXplcnMpLCBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cngucnhqcy5TdWJqZWN0KCkpOwogICAgLy8gU1RZTEVTCiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIC8qIENTUyBWYXJpYWJsZXMgYWxpZ25lZCB3aXRoIHNlY29uZGFyeSBtZW51ICovCiAgICAgICAgLS1hY3Rpdml0eWxvZy1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgICAtLWFjdGl2aXR5bG9nLWZnOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzUyNTI1MiIsICIjYTNhM2EzIil9OwogICAgICAgIC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzM3MzczIiwgIiM3MzczNzMiKX07CiAgICAgICAgLS1hY3Rpdml0eWxvZy1mZy1hY3RpdmU6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGEwYTBhIiwgIiNmYWZhZmEiKX07CiAgICAgICAgLS1hY3Rpdml0eWxvZy1ib3JkZXI6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlNWU1IiwgIiMxYTFhMWEiKX07CiAgICAgICAgLS1hY3Rpdml0eWxvZy1ob3ZlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNCkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSIpfTsKICAgICAgICAtLWFjdGl2aXR5bG9nLWFjY2VudDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3ODcxNmMiLCAiI2I1YTk5YSIpfTsKCiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnKTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjdGl2aXR5bG9nLWJnKTsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHNhbnMtc2VyaWY7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1hY3Rpdml0eWxvZy1ib3JkZXIpOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDI4MHB4OwogICAgICB9CgogICAgICAvKiBIZWFkZXIgd2l0aCBzdHJlYW1pbmcgaW5kaWNhdG9yICovCiAgICAgIC50b3BiYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZzogMHB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYWN0aXZpdHlsb2ctYmcpOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1hY3Rpdml0eWxvZy1ib3JkZXIpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgLnRvcGJhciAuaGVhZGluZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLWFjdGl2ZSk7CiAgICAgIH0KCiAgICAgIC5saXZlLWluZGljYXRvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQpOwogICAgICB9CgogICAgICAubGl2ZS1pbmRpY2F0b3IgLmRvdCB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzIyYzU1ZSIsICIjMjJjNTVlIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IHB1bHNlIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHB1bHNlIHsKICAgICAgICAwJSwgMTAwJSB7IG9wYWNpdHk6IDAuNTsgdHJhbnNmb3JtOiBzY2FsZSgwLjkpOyB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBzY2FsZSgxLjEpOyB9CiAgICAgIH0KCiAgICAgIC8qIEFjdGl2aXR5IGNvbnRhaW5lciAqLwogICAgICAuYWN0aXZpdHlDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDQ4cHg7CiAgICAgICAgYm90dG9tOiA0OHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICAgICAgc2Nyb2xsYmFyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Q0ZDRkNCIsICIjMzMzMzMzIil9IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYWN0aXZpdHlDb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICB9CgogICAgICAuYWN0aXZpdHlDb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5Q29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkNGQ0ZDQiLCAiIzMzMzMzMyIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eUNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjYTNhM2EzIiwgIiM1MjUyNTIiKX07CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA0MHB4IDE2cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgfQoKICAgICAgLyogRGF0ZSBzZXBhcmF0b3IgLSB3YXJtIHRhdXBlIHN0eWxpbmcgKi8KICAgICAgLmRhdGUtc2VwYXJhdG9yIHsKICAgICAgICBwYWRkaW5nOiAxMnB4IDEycHggNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1hY2NlbnQpOwogICAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYWN0aXZpdHlsb2ctYmcpOwogICAgICB9CgogICAgICAvKiBBY3Rpdml0eSBlbnRyeSAtIG1vZGVybiBzdGFja2VkIGxheW91dCAqLwogICAgICAuYWN0aXZpdHllbnRyeSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIG1hcmdpbjogMnB4IDRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMC4ycyBlYXNlLW91dDsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlSW4gewogICAgICAgIGZyb20gewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsKICAgICAgICB9CiAgICAgICAgdG8gewogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eWVudHJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY3Rpdml0eWxvZy1ob3Zlcik7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uIHsKICAgICAgICB3aWR0aDogMjhweDsKICAgICAgICBoZWlnaHQ6IDI4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDQpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQpOwogICAgICAgIG1hcmdpbi10b3A6IDFweDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24ubG9naW4gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDM0LCAxOTcsIDk0LCAwLjA4KSIsICJyZ2JhKDM0LCAxOTcsIDk0LCAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxNmEzNGEiLCAiIzRhZGU4MCIpfTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24ubG9nb3V0IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC4wOCkiLCAicmdiYSgyMzksIDY4LCA2OCwgMC4xMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNmODcxNzEiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLnZpZXcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4wOCkiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzI1NjNlYiIsICIjNjBhNWZhIil9OwogICAgICB9CgogICAgICAuYWN0aXZpdHktaWNvbi5jcmVhdGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE2OCwgODUsIDI0NywgMC4wOCkiLCAicmdiYSgxNjgsIDg1LCAyNDcsIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzkzMzNlYSIsICIjYzA4NGZjIil9OwogICAgICB9CgogICAgICAuYWN0aXZpdHktaWNvbi51cGRhdGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDI1MSwgMTQ2LCA2MCwgMC4wOCkiLCAicmdiYSgyNTEsIDE0NiwgNjAsIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VhNTgwYyIsICIjZmI5MjNjIil9OwogICAgICB9CgogICAgICAuYWN0aXZpdHktaWNvbi5kZWxldGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIzOSwgNjgsIDY4LCAwLjA4KSIsICJyZ2JhKDIzOSwgNjgsIDY4LCAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkYzI2MjYiLCAiI2Y4NzE3MSIpfTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24uY3VzdG9tIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgxMDAsIDExNiwgMTM5LCAwLjA4KSIsICJyZ2JhKDEwMCwgMTE2LCAxMzksIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzQ3NTU2OSIsICIjOTRhM2I4Iil9OwogICAgICB9CgogICAgICAuYWN0aXZpdHktY29udGVudCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMnB4OwogICAgICB9CgogICAgICAuYWN0aXZpdHktaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS11c2VyIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LXNlcGFyYXRvciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KCiAgICAgIC50aW1lc3RhbXAgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1tdXRlZCk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1tZXNzYWdlIHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmcpOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICAgIH0KCiAgICAgIC8qIFNlYXJjaCBib3ggLSByZWZpbmVkIHN0eWxpbmcgKi8KICAgICAgLnNlYXJjaGJveCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY3Rpdml0eWxvZy1iZyk7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWFjdGl2aXR5bG9nLWJvcmRlcik7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgLnNlYXJjaC13cmFwcGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICB9CgogICAgICAuc2VhcmNoLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAxMHB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQpOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuc2VhcmNoYm94IGlucHV0IHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctYWN0aXZlKTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjAzKSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpIil9OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA4KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHggMCAzNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuc2VhcmNoYm94IGlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgfQoKICAgICAgLnNlYXJjaGJveCBpbnB1dDpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMTUpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wMikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSIpfTsKICAgICAgfQoKICAgICAgLnNlYXJjaC13cmFwcGVyOmhhcyhpbnB1dDpmb2N1cykgLnNlYXJjaC1pY29uIHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmcpOwogICAgICB9CiAgICBgCiAgICBdOwogICAgLy8gUkVOREVSCiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IGZpbHRlcmVkRW50cmllcyA9IHRoaXMuZ2V0RmlsdGVyZWRFbnRyaWVzKCk7CiAgICAgIGNvbnN0IGdyb3VwZWRFbnRyaWVzID0gdGhpcy5ncm91cEVudHJpZXNCeURhdGUoZmlsdGVyZWRFbnRyaWVzKTsKICAgICAgcmV0dXJuIGIyYAogICAgICAke2RvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnN0eWxlc30KICAgICAgPHN0eWxlPjwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InRvcGJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nIj5BY3Rpdml0eSBMb2c8L2Rpdj4KICAgICAgICAgICR7ZmlsdGVyZWRFbnRyaWVzLmxlbmd0aCA+IDAgPyBiMmA8ZGl2IGNsYXNzPSJsaXZlLWluZGljYXRvciI+PHNwYW4gY2xhc3M9ImRvdCI+PC9zcGFuPkxpdmU8L2Rpdj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHlDb250YWluZXIiPgogICAgICAgICAgJHtmaWx0ZXJlZEVudHJpZXMubGVuZ3RoID09PSAwID8gYjJgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPk5vIGFjdGl2aXR5IGVudHJpZXM8L2Rpdj5gIDogZ3JvdXBlZEVudHJpZXMubWFwKChncm91cCkgPT4gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRhdGUtc2VwYXJhdG9yIj4ke2dyb3VwLmxhYmVsfTwvZGl2PgogICAgICAgICAgICAgICAgICAke2dyb3VwLmVudHJpZXMubWFwKChlbnRyeSkgPT4gdGhpcy5yZW5kZXJBY3Rpdml0eUVudHJ5KGVudHJ5KSl9CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2hib3giPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2VhcmNoLXdyYXBwZXIiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJzZWFyY2gtaWNvbiIgLmljb249JHsibHVjaWRlOnNlYXJjaCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJTZWFyY2ggYWN0aXZpdGllcywgdXNlcnMuLi4iCiAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5zZWFyY2hRdWVyeX0KICAgICAgICAgICAgICBAaW5wdXQ9JHt0aGlzLmhhbmRsZVNlYXJjaElucHV0fQogICAgICAgICAgICAvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckFjdGl2aXR5RW50cnkoZW50cnkpIHsKICAgICAgY29uc3QgdGltZXN0YW1wMiA9IGVudHJ5LnRpbWVzdGFtcCB8fCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgY29uc3QgdGltZVN0ciA9IHRoaXMuZm9ybWF0VGltZSh0aW1lc3RhbXAyKTsKICAgICAgY29uc3QgaWNvbk5hbWUgPSBlbnRyeS5pY29uTmFtZSB8fCB0aGlzLmdldEljb25Gb3JUeXBlKGVudHJ5LnR5cGUpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYWN0aXZpdHllbnRyeSIKICAgICAgICBAY29udGV4dG1lbnU9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUNvbnRleHRNZW51KGUxMSwgZW50cnkpfQogICAgICA+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHktaWNvbiAke2VudHJ5LnR5cGV9Ij4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHtpY29uTmFtZX0+PC9kZWVzLWljb24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHktY29udGVudCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpdml0eS1oZWFkZXIiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iYWN0aXZpdHktdXNlciI+JHtlbnRyeS51c2VyfTwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImFjdGl2aXR5LXNlcGFyYXRvciI+wrc8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lc3RhbXAiPiR7dGltZVN0cn08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5LW1lc3NhZ2UiPiR7ZW50cnkubWVzc2FnZX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgLy8gQVBJIE1FVEhPRFMKICAgIGFkZChlbnRyeSkgewogICAgICBjb25zdCBuZXdFbnRyeSA9IHsKICAgICAgICAuLi5lbnRyeSwKICAgICAgICBpZDogZW50cnkuaWQgfHwgdGhpcy5nZW5lcmF0ZUlkKCksCiAgICAgICAgdGltZXN0YW1wOiBlbnRyeS50aW1lc3RhbXAgfHwgLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkKICAgICAgfTsKICAgICAgdGhpcy5lbnRyaWVzID0gW25ld0VudHJ5LCAuLi50aGlzLmVudHJpZXNdOwogICAgICB0aGlzLmVudHJpZXMkLm5leHQodGhpcy5lbnRyaWVzKTsKICAgIH0KICAgIGFkZE1hbnkoZW50cmllcykgewogICAgICBjb25zdCBuZXdFbnRyaWVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiAoewogICAgICAgIC4uLmVudHJ5LAogICAgICAgIGlkOiBlbnRyeS5pZCB8fCB0aGlzLmdlbmVyYXRlSWQoKSwKICAgICAgICB0aW1lc3RhbXA6IGVudHJ5LnRpbWVzdGFtcCB8fCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKQogICAgICB9KSk7CiAgICAgIHRoaXMuZW50cmllcyA9IFsuLi5uZXdFbnRyaWVzLnJldmVyc2UoKSwgLi4udGhpcy5lbnRyaWVzXTsKICAgICAgdGhpcy5lbnRyaWVzJC5uZXh0KHRoaXMuZW50cmllcyk7CiAgICB9CiAgICBjbGVhcigpIHsKICAgICAgdGhpcy5lbnRyaWVzID0gW107CiAgICAgIHRoaXMuZW50cmllcyQubmV4dCh0aGlzLmVudHJpZXMpOwogICAgfQogICAgZ2V0RW50cmllcygpIHsKICAgICAgcmV0dXJuIFsuLi50aGlzLmVudHJpZXNdOwogICAgfQogICAgZmlsdGVyKGNyaXRlcmlhKSB7CiAgICAgIHJldHVybiB0aGlzLmVudHJpZXMuZmlsdGVyKChlbnRyeSkgPT4gewogICAgICAgIGlmIChjcml0ZXJpYS51c2VyICYmIGVudHJ5LnVzZXIgIT09IGNyaXRlcmlhLnVzZXIpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKGNyaXRlcmlhLnR5cGUgJiYgZW50cnkudHlwZSAhPT0gY3JpdGVyaWEudHlwZSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSk7CiAgICB9CiAgICBzZWFyY2gocXVlcnkpIHsKICAgICAgY29uc3QgbG93ZXJRdWVyeSA9IHF1ZXJ5LnRvTG93ZXJDYXNlKCk7CiAgICAgIHJldHVybiB0aGlzLmVudHJpZXMuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyUXVlcnkpIHx8IGVudHJ5LnVzZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlclF1ZXJ5KSk7CiAgICB9CiAgICAvLyBQUklWQVRFIEhFTFBFUlMKICAgIGdlbmVyYXRlSWQoKSB7CiAgICAgIHJldHVybiBgYWN0aXZpdHktJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KX1gOwogICAgfQogICAgZ2V0RmlsdGVyZWRFbnRyaWVzKCkgewogICAgICBsZXQgcmVzdWx0ID0gdGhpcy5lbnRyaWVzOwogICAgICBpZiAodGhpcy5zZWFyY2hRdWVyeSkgewogICAgICAgIGNvbnN0IGxvd2VyUXVlcnkgPSB0aGlzLnNlYXJjaFF1ZXJ5LnRvTG93ZXJDYXNlKCk7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlclF1ZXJ5KSB8fCBlbnRyeS51c2VyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJRdWVyeSkpOwogICAgICB9CiAgICAgIGlmICh0aGlzLmZpbHRlckNyaXRlcmlhLnVzZXIgfHwgdGhpcy5maWx0ZXJDcml0ZXJpYS50eXBlKSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigoZW50cnkpID0+IHsKICAgICAgICAgIGlmICh0aGlzLmZpbHRlckNyaXRlcmlhLnVzZXIgJiYgZW50cnkudXNlciAhPT0gdGhpcy5maWx0ZXJDcml0ZXJpYS51c2VyKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICBpZiAodGhpcy5maWx0ZXJDcml0ZXJpYS50eXBlICYmIGVudHJ5LnR5cGUgIT09IHRoaXMuZmlsdGVyQ3JpdGVyaWEudHlwZSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGdyb3VwRW50cmllc0J5RGF0ZShlbnRyaWVzKSB7CiAgICAgIGNvbnN0IGdyb3VwcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgIGNvbnN0IHllc3RlcmRheSA9IG5ldyBEYXRlKHRvZGF5KTsKICAgICAgeWVzdGVyZGF5LnNldERhdGUoeWVzdGVyZGF5LmdldERhdGUoKSAtIDEpOwogICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHsKICAgICAgICBjb25zdCBkYXRlID0gZW50cnkudGltZXN0YW1wIHx8IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpOwogICAgICAgIGxldCBsYWJlbDsKICAgICAgICBpZiAodGhpcy5pc1NhbWVEYXkoZGF0ZSwgdG9kYXkpKSB7CiAgICAgICAgICBsYWJlbCA9ICJUb2RheSI7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzU2FtZURheShkYXRlLCB5ZXN0ZXJkYXkpKSB7CiAgICAgICAgICBsYWJlbCA9ICJZZXN0ZXJkYXkiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsYWJlbCA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1VUyIsIHsKICAgICAgICAgICAgbW9udGg6ICJzaG9ydCIsCiAgICAgICAgICAgIGRheTogIm51bWVyaWMiLAogICAgICAgICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCkgIT09IHRvZGF5LmdldEZ1bGxZZWFyKCkgPyAibnVtZXJpYyIgOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBpZiAoIWdyb3Vwcy5oYXMobGFiZWwpKSB7CiAgICAgICAgICBncm91cHMuc2V0KGxhYmVsLCBbXSk7CiAgICAgICAgfQogICAgICAgIGdyb3Vwcy5nZXQobGFiZWwpLnB1c2goZW50cnkpOwogICAgICB9CiAgICAgIHJldHVybiBBcnJheS5mcm9tKGdyb3Vwcy5lbnRyaWVzKCkpLm1hcCgoW2xhYmVsLCBlbnRyaWVzMl0pID0+ICh7CiAgICAgICAgbGFiZWwsCiAgICAgICAgZW50cmllczogZW50cmllczIKICAgICAgfSkpOwogICAgfQogICAgaXNTYW1lRGF5KGRhdGUxLCBkYXRlMikgewogICAgICByZXR1cm4gZGF0ZTEuZ2V0RnVsbFllYXIoKSA9PT0gZGF0ZTIuZ2V0RnVsbFllYXIoKSAmJiBkYXRlMS5nZXRNb250aCgpID09PSBkYXRlMi5nZXRNb250aCgpICYmIGRhdGUxLmdldERhdGUoKSA9PT0gZGF0ZTIuZ2V0RGF0ZSgpOwogICAgfQogICAgZm9ybWF0VGltZShkYXRlKSB7CiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlVGltZVN0cmluZygiZW4tVVMiLCB7CiAgICAgICAgaG91cjogIjItZGlnaXQiLAogICAgICAgIG1pbnV0ZTogIjItZGlnaXQiLAogICAgICAgIGhvdXIxMjogZmFsc2UKICAgICAgfSk7CiAgICB9CiAgICBnZXRJY29uRm9yVHlwZSh0eXBlNSkgewogICAgICBjb25zdCBpY29uczYgPSB7CiAgICAgICAgbG9naW46ICJsdWNpZGU6bG9nSW4iLAogICAgICAgIGxvZ291dDogImx1Y2lkZTpsb2dPdXQiLAogICAgICAgIHZpZXc6ICJsdWNpZGU6ZXllIiwKICAgICAgICBjcmVhdGU6ICJsdWNpZGU6cGx1cyIsCiAgICAgICAgdXBkYXRlOiAibHVjaWRlOmVkaXQiLAogICAgICAgIGRlbGV0ZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICAgIGN1c3RvbTogImx1Y2lkZTphY3Rpdml0eSIKICAgICAgfTsKICAgICAgcmV0dXJuIGljb25zNlt0eXBlNV0gfHwgaWNvbnM2LmN1c3RvbTsKICAgIH0KICAgIGhhbmRsZVNlYXJjaElucHV0KGUxMSkgewogICAgICBjb25zdCB0YXJnZXQgPSBlMTEudGFyZ2V0OwogICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gdGFyZ2V0LnZhbHVlOwogICAgfQogICAgaGFuZGxlQ29udGV4dE1lbnUoZTExLCBlbnRyeSkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDb3B5IGFjdGl2aXR5IiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmNvcHkiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGAke2VudHJ5LnVzZXJ9ICR7ZW50cnkubWVzc2FnZX1gKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJGaWx0ZXIgYnkgdXNlciIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp1c2VyIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICB0aGlzLmZpbHRlckNyaXRlcmlhID0geyB1c2VyOiBlbnRyeS51c2VyIH07CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiRmlsdGVyIGJ5IHR5cGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsdGVyIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICB0aGlzLmZpbHRlckNyaXRlcmlhID0geyB0eXBlOiBlbnRyeS50eXBlIH07CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiQ2xlYXIgZmlsdGVycyIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp4IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICB0aGlzLmZpbHRlckNyaXRlcmlhID0ge307CiAgICAgICAgICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAiIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0pOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQXBwdWlBY3Rpdml0eWxvZzIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYXBwYmFyL2RlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNCA9ICgpID0+IHsKICBjb25zdCBtZW51SXRlbXMgPSBbCiAgICB7CiAgICAgIG5hbWU6ICJGaWxlIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sCiAgICAgIC8vIE5vLW9wIGFjdGlvbiBmb3IgbWVudSB3aXRoIHN1Ym1lbnUKICAgICAgc3VibWVudTogWwogICAgICAgIHsgbmFtZTogIk5ldyBGaWxlIiwgc2hvcnRjdXQ6ICJDbWQrTiIsIGljb25OYW1lOiAiZmlsZS1wbHVzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiTmV3IGZpbGUiKSB9LAogICAgICAgIHsgbmFtZTogIk9wZW4uLi4iLCBzaG9ydGN1dDogIkNtZCtPIiwgaWNvbk5hbWU6ICJmb2xkZXItb3BlbiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4iKSB9LAogICAgICAgIHsgbmFtZTogIk9wZW4gUmVjZW50IiwgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgfSwgc3VibWVudTogWwogICAgICAgICAgeyBuYW1lOiAicHJvamVjdC1hbHBoYS50cyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4gcmVjZW50IDEiKSB9LAogICAgICAgICAgeyBuYW1lOiAiY29uZmlnLmpzb24iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIHJlY2VudCAyIikgfSwKICAgICAgICAgIHsgbmFtZTogInJlYWRtZS5tZCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4gcmVjZW50IDMiKSB9CiAgICAgICAgXSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIlNhdmUiLCBzaG9ydGN1dDogIkNtZCtTIiwgaWNvbk5hbWU6ICJzYXZlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2F2ZSIpIH0sCiAgICAgICAgeyBuYW1lOiAiU2F2ZSBBcy4uLiIsIHNob3J0Y3V0OiAiQ21kK1NoaWZ0K1MiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTYXZlIGFzIiksIGRpc2FibGVkOiB0cnVlIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiRXhpdCIsIHNob3J0Y3V0OiAiQ21kK1EiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJFeGl0IikgfQogICAgICBdCiAgICB9LAogICAgewogICAgICBuYW1lOiAiRWRpdCIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICB9LAogICAgICAvLyBOby1vcCBhY3Rpb24gZm9yIG1lbnUgd2l0aCBzdWJtZW51CiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJVbmRvIiwgc2hvcnRjdXQ6ICJDbWQrWiIsIGljb25OYW1lOiAidW5kbyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlVuZG8iKSB9LAogICAgICAgIHsgbmFtZTogIlJlZG8iLCBzaG9ydGN1dDogIkNtZCtTaGlmdCtaIiwgaWNvbk5hbWU6ICJyZWRvIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUmVkbyIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiQ3V0Iiwgc2hvcnRjdXQ6ICJDbWQrWCIsIGljb25OYW1lOiAic2Npc3NvcnMiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDdXQiKSB9LAogICAgICAgIHsgbmFtZTogIkNvcHkiLCBzaG9ydGN1dDogIkNtZCtDIiwgaWNvbk5hbWU6ICJjb3B5IiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQ29weSIpIH0sCiAgICAgICAgeyBuYW1lOiAiUGFzdGUiLCBzaG9ydGN1dDogIkNtZCtWIiwgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJQYXN0ZSIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiRmluZCIsIHNob3J0Y3V0OiAiQ21kK0YiLCBpY29uTmFtZTogInNlYXJjaCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkZpbmQiKSB9LAogICAgICAgIHsgbmFtZTogIlJlcGxhY2UiLCBzaG9ydGN1dDogIkNtZCtIIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUmVwbGFjZSIpIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgbmFtZTogIlZpZXciLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwKICAgICAgLy8gTm8tb3AgYWN0aW9uIGZvciBtZW51IHdpdGggc3VibWVudQogICAgICBzdWJtZW51OiBbCiAgICAgICAgeyBuYW1lOiAiVG9nZ2xlIEZ1bGxzY3JlZW4iLCBzaG9ydGN1dDogIkYxMSIsIGljb25OYW1lOiAiZXhwYW5kIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRnVsbHNjcmVlbiIpIH0sCiAgICAgICAgeyBuYW1lOiAiWm9vbSBJbiIsIHNob3J0Y3V0OiAiQ21kKysiLCBpY29uTmFtZTogInpvb20taW4iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJab29tIGluIikgfSwKICAgICAgICB7IG5hbWU6ICJab29tIE91dCIsIHNob3J0Y3V0OiAiQ21kKy0iLCBpY29uTmFtZTogInpvb20tb3V0IiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiWm9vbSBvdXQiKSB9LAogICAgICAgIHsgbmFtZTogIlJlc2V0IFpvb20iLCBzaG9ydGN1dDogIkNtZCswIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUmVzZXQgem9vbSIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiVG9nZ2xlIFNpZGViYXIiLCBzaG9ydGN1dDogIkNtZCtCIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiVG9nZ2xlIHNpZGViYXIiKSB9LAogICAgICAgIHsgbmFtZTogIlRvZ2dsZSBUZXJtaW5hbCIsIHNob3J0Y3V0OiAiQ21kK0oiLCBpY29uTmFtZTogInRlcm1pbmFsIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiVG9nZ2xlIHRlcm1pbmFsIikgfQogICAgICBdCiAgICB9LAogICAgewogICAgICBuYW1lOiAiSGVscCIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICB9LAogICAgICAvLyBOby1vcCBhY3Rpb24gZm9yIG1lbnUgd2l0aCBzdWJtZW51CiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJEb2N1bWVudGF0aW9uIiwgaWNvbk5hbWU6ICJib29rIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRG9jdW1lbnRhdGlvbiIpIH0sCiAgICAgICAgeyBuYW1lOiAiUmVsZWFzZSBOb3RlcyIsIGljb25OYW1lOiAiZmlsZS10ZXh0IiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUmVsZWFzZSBub3RlcyIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiUmVwb3J0IElzc3VlIiwgaWNvbk5hbWU6ICJidWciLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJSZXBvcnQgaXNzdWUiKSB9LAogICAgICAgIHsgbmFtZTogIkFib3V0IiwgaWNvbk5hbWU6ICJpbmZvIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQWJvdXQiKSB9CiAgICAgIF0KICAgIH0KICBdOwogIHJldHVybiBiMmAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICBjb25zdCBhcHBiYXIgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNhcHBiYXIiKTsKICAgIGNvbnN0IHN0YXR1c0J1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoIi5zdGF0dXMtdG9nZ2xlIGRlZXMtYnV0dG9uIik7CiAgICBzdGF0dXNCdXR0b25zWzBdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBhcHBiYXIudXNlciA9IHsgLi4uYXBwYmFyLnVzZXIsIHN0YXR1czogIm9ubGluZSIgfTsKICAgIH0pOwogICAgc3RhdHVzQnV0dG9uc1sxXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgYXBwYmFyLnVzZXIgPSB7IC4uLmFwcGJhci51c2VyLCBzdGF0dXM6ICJidXN5IiB9OwogICAgfSk7CiAgICBzdGF0dXNCdXR0b25zWzJdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBhcHBiYXIudXNlciA9IHsgLi4uYXBwYmFyLnVzZXIsIHN0YXR1czogImF3YXkiIH07CiAgICB9KTsKICAgIHN0YXR1c0J1dHRvbnNbM10uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGFwcGJhci51c2VyID0geyAuLi5hcHBiYXIudXNlciwgc3RhdHVzOiAib2ZmbGluZSIgfTsKICAgIH0pOwogICAgY29uc3Qgd2luZG93Q29udHJvbHNCdXR0b24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIi53aW5kb3ctY29udHJvbHMtdG9nZ2xlIGRlZXMtYnV0dG9uIik7CiAgICB3aW5kb3dDb250cm9sc0J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgYXBwYmFyLnNob3dXaW5kb3dDb250cm9scyA9ICFhcHBiYXIuc2hvd1dpbmRvd0NvbnRyb2xzOwogICAgfSk7CiAgICBjb25zdCBicmVhZGNydW1iQnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiLmJyZWFkY3J1bWItdG9nZ2xlIGRlZXMtYnV0dG9uIik7CiAgICBicmVhZGNydW1iQnV0dG9uc1swXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgYXBwYmFyLmJyZWFkY3J1bWJzID0gIkhvbWUgPiBEb2N1bWVudHMgPiBQcm9qZWN0cyA+IE15QXBwID4gc3JjID4gaW5kZXgudHMiOwogICAgfSk7CiAgICBicmVhZGNydW1iQnV0dG9uc1sxXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgYXBwYmFyLmJyZWFkY3J1bWJzID0gIkRhc2hib2FyZCI7CiAgICB9KTsKICB9fT4KICAgICAgPHN0eWxlPgogICAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgaGVpZ2h0OiA2MDBweDsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29udGVudCB7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgIGNvbG9yOiAjY2NjOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29udHJvbHMgewogICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb250cm9sLWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb250cm9sLWdyb3VwIGxhYmVsIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtYXBwdWktYXBwYmFyCiAgICAgICAgaWQ9ImFwcGJhciIKICAgICAgICAubWVudUl0ZW1zPSR7bWVudUl0ZW1zfQogICAgICAgIC5icmVhZGNydW1icz0keyJQcm9qZWN0ID4gc3JjID4gY29tcG9uZW50cyA+IEFwcEJhci50cyJ9CiAgICAgICAgLmJyZWFkY3J1bWJTZXBhcmF0b3I9JHsiID4gIn0KICAgICAgICAuc2hvd1dpbmRvd0NvbnRyb2xzPSR7dHJ1ZX0KICAgICAgICAuc2hvd1NlYXJjaD0ke3RydWV9CiAgICAgICAgLnRoZW1lPSR7ImRhcmsifQogICAgICAgIC51c2VyPSR7ewogICAgbmFtZTogIkpvaG4gRG9lIiwKICAgIHN0YXR1czogIm9ubGluZSIKICB9fQogICAgICAgIEBtZW51LXNlbGVjdD0keyhlMTEpID0+IGNvbnNvbGUubG9nKCJNZW51IHNlbGVjdGVkOiIsIGUxMS5kZXRhaWwuaXRlbSl9CiAgICAgICAgQGJyZWFkY3J1bWItbmF2aWdhdGU9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiQnJlYWRjcnVtYiBjbGlja2VkOiIsIGUxMS5kZXRhaWwpfQogICAgICAgIEBzZWFyY2gtY2xpY2s9JHsoKSA9PiBjb25zb2xlLmxvZygiU2VhcmNoIGNsaWNrZWQiKX0KICAgICAgICBAdXNlci1tZW51LW9wZW49JHsoKSA9PiBjb25zb2xlLmxvZygiVXNlciBtZW51IGNsaWNrZWQiKX0KICAgICAgPjwvZGVlcy1hcHB1aS1hcHBiYXI+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgICA8aDI+QXBwIEJhciBEZW1vPC9oMj4KICAgICAgICA8cD5UaGlzIGRlbW8gc2hvd3MgdmFyaW91cyBmZWF0dXJlcyBvZiB0aGUgYXBwIGJhciBjb21wb25lbnQ6PC9wPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT5EeW5hbWljIG1lbnUgaXRlbXMgd2l0aCBpY29ucywgc2hvcnRjdXRzLCBhbmQgc3VibWVudXM8L2xpPgogICAgICAgICAgPGxpPkJyZWFkY3J1bWIgbmF2aWdhdGlvbjwvbGk+CiAgICAgICAgICA8bGk+VXNlciBhY2NvdW50IHNlY3Rpb24gd2l0aCBzdGF0dXMgaW5kaWNhdG9yPC9saT4KICAgICAgICAgIDxsaT5TZWFyY2ggaWNvbjwvbGk+CiAgICAgICAgICA8bGk+V2luZG93IGNvbnRyb2xzIChwbGF0Zm9ybS1zcGVjaWZpYyk8L2xpPgogICAgICAgICAgPGxpPkRhcmsvbGlnaHQgdGhlbWUgc3VwcG9ydDwvbGk+CiAgICAgICAgICA8bGk+S2V5Ym9hcmQgbmF2aWdhdGlvbiAoVGFiLCBFbnRlciwgRXNjYXBlKTwvbGk+CiAgICAgICAgICA8bGk+Q3VzdG9tIGV2ZW50cyBmb3IgYWxsIGludGVyYWN0aW9uczwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ncm91cCI+CiAgICAgICAgICA8bGFiZWw+VGhlbWU8L2xhYmVsPgogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGNsYXNzPSJ0aGVtZS10b2dnbGUiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+RGFyazwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5MaWdodDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPgogICAgICAgICAgPGxhYmVsPlVzZXIgU3RhdHVzPC9sYWJlbD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBjbGFzcz0ic3RhdHVzLXRvZ2dsZSI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5PbmxpbmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+QnVzeTwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5Bd2F5PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPk9mZmxpbmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIj4KICAgICAgICAgIDxsYWJlbD5XaW5kb3cgQ29udHJvbHM8L2xhYmVsPgogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGNsYXNzPSJ3aW5kb3ctY29udHJvbHMtdG9nZ2xlIj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlRvZ2dsZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPgogICAgICAgICAgPGxhYmVsPkJyZWFkY3J1bWJzPC9sYWJlbD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBjbGFzcz0iYnJlYWRjcnVtYi10b2dnbGUiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+TG9uZyBQYXRoPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlNob3J0IFBhdGg8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYXBwYmFyL3N0eWxlcy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgYXBwdWlBcHBiYXJTdHlsZXMgPSBbCiAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogIGlgCiAgICAgIDpob3N0IHsKICAgICAgICAvKiBDU1MgVmFyaWFibGVzIGZvciB0aGVtaW5nICovCiAgICAgICAgLS1hcHBiYXItaGVpZ2h0OiA0MHB4OwogICAgICAgIC0tYXBwYmFyLWZvbnQtc2l6ZTogMTJweDsKICAgICAgICAKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1hcHBiYXItaGVpZ2h0KTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzIwMjAyMCIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDgwIiwgIiNmZmZmZmY4MCIpfTsKICAgICAgICBmb250LXNpemU6IHZhcigtLWFwcGJhci1mb250LXNpemUpOwogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIDFmciBhdXRvOwogICAgICAgIC13ZWJraXQtYXBwLXJlZ2lvbjogZHJhZzsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLm1lbnVzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAubWVudUl0ZW0gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBsaW5lLWhlaWdodDogMjRweDsKICAgICAgICBwYWRkaW5nOiAwcHggMTJweDsKICAgICAgICBtYXJnaW46IDhweCAwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIC13ZWJraXQtYXBwLXJlZ2lvbjogbm8tZHJhZzsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLyogT3B0aW9uYWw6IFN0eWxlIGZvciBtZW51IGl0ZW1zIHdpdGggaWNvbnMgKG5vdCB0eXBpY2FsbHkgdXNlZCBmb3IgdG9wLWxldmVsIGl0ZW1zKSAqLwogICAgICAubWVudUl0ZW0gZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CgogICAgICAubWVudUl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMTAiLCAiI2ZmZmZmZjIwIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAubWVudUl0ZW0uYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDIwIiwgIiNmZmZmZmYzMCIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAiLCAiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtW2Rpc2FibGVkXSB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbTpmb2N1cy12aXNpYmxlIHsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDA4MCIsICIjZmZmZmZmODAiKX07CiAgICAgIH0KCgogICAgICAvKiBEcm9wZG93biBzdHlsZXMgKi8KICAgICAgLmRyb3Bkb3duIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgbWluLXdpZHRoOiAyMDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSkiLCAiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMykiKX07CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycywgdHJhbnNmb3JtIDAuMnM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi5vcGVuIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWl0ZW0gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzOwogICAgICB9CgogICAgICAuZHJvcGRvd24taXRlbTpob3ZlciwKICAgICAgLmRyb3Bkb3duLWl0ZW0uZm9jdXNlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAxMCIsICIjZmZmZmZmMjAiKX07CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi1kaXZpZGVyIHsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMjAyMDIwIil9OwogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi1pdGVtW2Rpc2FibGVkXSB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi1pdGVtIC5zaG9ydGN1dCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLyogQnJlYWRjcnVtYnMgKi8KICAgICAgLmJyZWFkY3J1bWJzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5icmVhZGNydW1iLWl0ZW0gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDgwIiwgIiNmZmZmZmY4MCIpfTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4yczsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWItaXRlbTpob3ZlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNmZmZmZmYiKX07CiAgICAgIH0KCiAgICAgIC5icmVhZGNydW1iLXNlcGFyYXRvciB7CiAgICAgICAgbWFyZ2luOiAwIDhweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC8qIEFjY291bnQgc2VjdGlvbiAqLwogICAgICAuYWNjb3VudCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1pY29uIHsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAgICAgfQoKICAgICAgLnNlYXJjaC1pY29uOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAudXNlci1pbmZvIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4yczsKICAgICAgfQoKICAgICAgLnVzZXItaW5mbzpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAxMCIsICIjZmZmZmZmMjAiKX07CiAgICAgIH0KCiAgICAgIC51c2VyLWF2YXRhciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAyMCIsICIjZmZmZmZmMzAiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQoKICAgICAgLnVzZXItYXZhdGFyIGltZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAtMnB4OwogICAgICAgIHJpZ2h0OiAtMnB4OwogICAgICAgIHdpZHRoOiA4cHg7CiAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5vbmxpbmUgewogICAgICAgIGJhY2tncm91bmQ6ICM0Y2FmNTA7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5vZmZsaW5lIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjNzU3NTc1OwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMuYnVzeSB7CiAgICAgICAgYmFja2dyb3VuZDogI2Y0NDMzNjsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLmF3YXkgewogICAgICAgIGJhY2tncm91bmQ6ICNmZjk4MDA7CiAgICAgIH0KCiAgICAgIC8qIEFjdGl2aXR5IGxvZyB0b2dnbGUgYnV0dG9uICovCiAgICAgIC5hY3Rpdml0eS10b2dnbGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDJweDsKICAgICAgICBoZWlnaHQ6IDI4cHg7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICAtd2Via2l0LWFwcC1yZWdpb246IG5vLWRyYWc7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwNjAiLCAiI2ZmZmZmZjYwIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuYWN0aXZpdHktdG9nZ2xlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDEwIiwgIiNmZmZmZmYxNSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAiLCAiI2ZmZmZmZiIpfTsKICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYWN0aXZpdHktdG9nZ2xlLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAxNSIsICIjZmZmZmZmMjAiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNmZmZmZmYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LXRvZ2dsZSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWJhZGdlIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDRweDsKICAgICAgICBtaW4td2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDAgNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNTI1MjUyIiwgIiM1MjUyNTIiKX07CiAgICAgICAgY29sb3I6ICNmYWZhZmE7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgfQogICAgYApdOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYXBwYmFyL3RlbXBsYXRlLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciByZW5kZXJBcHB1aUFwcGJhciA9IChjb21wb25lbnQpID0+IHsKICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0ibWVudXMiPgogICAgICAgICAgJHtjb21wb25lbnQuc2hvd1dpbmRvd0NvbnRyb2xzID8gYjJgPGRlZXMtd2luZG93Y29udHJvbHM+PC9kZWVzLXdpbmRvd2NvbnRyb2xzPmAgOiAiIn0KICAgICAgICAgICR7Y29tcG9uZW50LnJlbmRlck1lbnVJdGVtcygpfQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJyZWFkY3J1bWJzIj4KICAgICAgICAgICR7Y29tcG9uZW50LnJlbmRlckJyZWFkY3J1bWJzKCl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWNjb3VudCI+CiAgICAgICAgICAke2NvbXBvbmVudC5yZW5kZXJBY2NvdW50U2VjdGlvbigpfQogICAgICAgIDwvZGl2PgogICAgICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXdpbmRvd2NvbnRyb2xzL2RlZXMtd2luZG93Y29udHJvbHMuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlOCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzOSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1dpbmRvd0NvbnRyb2xzID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13aW5kb3djb250cm9scyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3R5cGVfZGVjb3JhdG9yczsKICBsZXQgX3R5cGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wb3NpdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfcG9zaXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV2luZG93Q29udHJvbHMyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdHlwZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3Bvc2l0aW9uX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGU4KHRoaXMsIG51bGwsIF90eXBlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInR5cGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInR5cGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudHlwZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudHlwZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90eXBlX2luaXRpYWxpemVycywgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4KHRoaXMsIG51bGwsIF9wb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwb3NpdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnBvc2l0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgX3Bvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlOChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXaW5kb3dDb250cm9sczIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYDxkZWVzLXdpbmRvd2NvbnRyb2xzPjwvZGVlcy13aW5kb3djb250cm9scz5gOwogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzOSh0aGlzLCBfdHlwZV9pbml0aWFsaXplcnMsICJtYWMiKTsKICAgIC8vIEluc3RhbmNlCiAgICBnZXQgdHlwZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0eXBlKHZhbHVlMikgewogICAgICB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczkodGhpcywgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczkodGhpcywgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgImxlZnQiKSk7CiAgICBnZXQgcG9zaXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNwb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHBvc2l0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNwb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDE2cHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgfQoKICAgICAgLndpbmRvd0NvbnRyb2xzIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLndpbmRvd0NvbnRyb2xzIGRpdiB7CiAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgbWFyZ2luOiAwcHg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICMyMjIyMjI7CiAgICAgIH0KCiAgICAgIC53aW5kb3dDb250cm9scyBkaXYuY2xvc2UgewogICAgICAgIGJhY2tncm91bmQ6ICNmZjVmNTc7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMnB4OwogICAgICB9CgogICAgICAud2luZG93Q29udHJvbHMgZGl2LnRvRG9jayB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmYmQyZTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEycHg7CiAgICAgIH0KCiAgICAgIC53aW5kb3dDb250cm9scyBkaXYubWluTWF4IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMjdjOTNmOwogICAgICB9CgogICAgICAud2luZG93Q29udHJvbHMgZGl2OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMzMzMzMzOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgICR7dGhpcy50eXBlID09PSAibWFjIiAmJiB0aGlzLnBvc2l0aW9uID09PSAibGVmdCIgfHwgKHRoaXMudHlwZSA9PT0gImxpbnV4IiB8fCB0aGlzLnR5cGUgPT09ICJ3aW5kb3dzIikgJiYgdGhpcy5wb3NpdGlvbiA9PT0gInJpZ2h0IiA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3aW5kb3dDb250cm9scyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2xvc2UiPjwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvRG9jayI+PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWluTWF4Ij48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogYjJgYH0KICAgIGA7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM5KHRoaXMsIF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXaW5kb3dDb250cm9sczIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktcHJvZmlsZWRyb3Bkb3duL2RlZXMtYXBwdWktcHJvZmlsZWRyb3Bkb3duLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczEwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzQXBwdWlQcm9maWxlRHJvcGRvd24gPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWFwcHVpLXByb2ZpbGVkcm9wZG93biIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3VzZXJfZGVjb3JhdG9yczsKICBsZXQgX3VzZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF91c2VyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX21lbnVJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNPcGVuX2RlY29yYXRvcnM7CiAgbGV0IF9pc09wZW5faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc09wZW5fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Bvc2l0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9wb3NpdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Bvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNBcHB1aVByb2ZpbGVEcm9wZG93bjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF91c2VyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfbWVudUl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9pc09wZW5fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSldOwogICAgICBfcG9zaXRpb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTkodGhpcywgbnVsbCwgX3VzZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidXNlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidXNlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai51c2VyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai51c2VyID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3VzZXJfaW5pdGlhbGl6ZXJzLCBfdXNlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTkodGhpcywgbnVsbCwgX21lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVJdGVtcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVJdGVtcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlOSh0aGlzLCBudWxsLCBfaXNPcGVuX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzT3BlbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNPcGVuIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzT3Blbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNPcGVuID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzT3Blbl9pbml0aWFsaXplcnMsIF9pc09wZW5fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU5KHRoaXMsIG51bGwsIF9wb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwb3NpdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnBvc2l0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgX3Bvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlOShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNBcHB1aVByb2ZpbGVEcm9wZG93bjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmAKICAgIDxkZWVzLWFwcHVpLXByb2ZpbGVkcm9wZG93bgogICAgICAudXNlcj0ke3sKICAgICAgbmFtZTogIkpvaG4gRG9lIiwKICAgICAgZW1haWw6ICJqb2huLmRvZUBleGFtcGxlLmNvbSIsCiAgICAgIGF2YXRhcjogImh0dHBzOi8vcmFuZG9tdXNlci5tZS9hcGkvcG9ydHJhaXRzL21lbi8xLmpwZyIsCiAgICAgIHN0YXR1czogIm9ubGluZSIKICAgIH19CiAgICAgIC5tZW51SXRlbXM9JHtbCiAgICAgIHsgbmFtZTogIlByb2ZpbGUgU2V0dGluZ3MiLCBpY29uTmFtZTogInVzZXIiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJQcm9maWxlIikgfSwKICAgICAgeyBuYW1lOiAiQWNjb3VudCIsIGljb25OYW1lOiAic2V0dGluZ3MiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJBY2NvdW50IikgfSwKICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgIHsgbmFtZTogIkhlbHAgJiBTdXBwb3J0IiwgaWNvbk5hbWU6ICJoZWxwQ2lyY2xlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiSGVscCIpIH0sCiAgICAgIHsgbmFtZTogIktleWJvYXJkIFNob3J0Y3V0cyIsIGljb25OYW1lOiAia2V5Ym9hcmQiLCBzaG9ydGN1dDogIkNtZCtLIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2hvcnRjdXRzIikgfSwKICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgIHsgbmFtZTogIlNpZ24gT3V0IiwgaWNvbk5hbWU6ICJsb2dPdXQiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTaWduIG91dCIpIH0KICAgIF19CiAgICAgIC5pc09wZW49JHt0cnVlfQogICAgPjwvZGVlcy1hcHB1aS1wcm9maWxlZHJvcGRvd24+CiAgYDsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiQXBwIFVJIjsKICAgICN1c2VyX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczEwKHRoaXMsIF91c2VyX2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgIGdldCB1c2VyKCkgewogICAgICByZXR1cm4gdGhpcy4jdXNlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHVzZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3VzZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczEwKHRoaXMsIF91c2VyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMCh0aGlzLCBfbWVudUl0ZW1zX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBtZW51SXRlbXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtZW51SXRlbXModmFsdWUyKSB7CiAgICAgIHRoaXMuI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzT3Blbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTAodGhpcywgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTAodGhpcywgX2lzT3Blbl9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNPcGVuKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNPcGVuX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNPcGVuKHZhbHVlMikgewogICAgICB0aGlzLiNpc09wZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTAodGhpcywgX2lzT3Blbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTAodGhpcywgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgInRvcC1yaWdodCIpKTsKICAgIGdldCBwb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcG9zaXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbWluLXdpZHRoOiAyMjBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSkiLCAiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMykiKX07CiAgICAgICAgei1pbmRleDogJHt6SW5kZXhMYXllcnMub3ZlcmxheS5kcm9wZG93bn07CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpIHRyYW5zbGF0ZVkoLTEwcHgpOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycywgdHJhbnNmb3JtIDAuMnM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpc29wZW5dKSAuZHJvcGRvd24gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVZKDApOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICAuYmFja2Ryb3AgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFBvc2l0aW9uIHZhcmlhbnRzICovCiAgICAgIC5kcm9wZG93bi50b3AtcmlnaHQgewogICAgICAgIHRvcDogMTAwJTsKICAgICAgICByaWdodDogMDsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi50b3AtbGVmdCB7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICB9CgogICAgICAuZHJvcGRvd24uYm90dG9tLXJpZ2h0IHsKICAgICAgICBib3R0b206IDEwMCU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICB9CgogICAgICAuZHJvcGRvd24uYm90dG9tLWxlZnQgewogICAgICAgIGJvdHRvbTogMTAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgfQoKICAgICAgLyogVXNlciBzZWN0aW9uICovCiAgICAgIC51c2VyLXNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgIH0KCiAgICAgIC51c2VyLWluZm8gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgIH0KCiAgICAgIC51c2VyLWF2YXRhciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmMGYwZjAiLCAiIzFhMWExYSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiM5OTkiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnVzZXItYXZhdGFyIGltZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG9iamVjdC1maXQ6IGNvdmVyOwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMub25saW5lIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjNGNhZjUwOwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMub2ZmbGluZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzc1NzU3NTsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLmJ1c3kgewogICAgICAgIGJhY2tncm91bmQ6ICNmNDQzMzY7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5hd2F5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmY5ODAwOwogICAgICB9CgogICAgICAudXNlci1kZXRhaWxzIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLnVzZXItbmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwIiwgIiNmZmYiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAudXNlci1lbWFpbCB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NiIsICIjOTk5Iil9OwogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH0KCiAgICAgIC8qIE1lbnUgc2VjdGlvbiAqLwogICAgICAubWVudS1zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiA0cHggMDsKICAgICAgfQoKICAgICAgLm1lbnUtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNjY2MiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAubWVudS1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA0KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICB9CgogICAgICAubWVudS1pdGVtOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wOCkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSIpfTsKICAgICAgfQoKICAgICAgLm1lbnUtaXRlbSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC5tZW51LWl0ZW0tdGV4dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLm1lbnUtc2hvcnRjdXQgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5OTkiLCAiIzY2NiIpfTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC5tZW51LWRpdmlkZXIgewogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgfQoKICAgICAgLyogQmFja2Ryb3AgZm9yIG1vYmlsZSAqLwogICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAuYmFja2Ryb3AgewogICAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgICAgdG9wOiAwOwogICAgICAgICAgbGVmdDogMDsKICAgICAgICAgIHJpZ2h0OiAwOwogICAgICAgICAgYm90dG9tOiAwOwogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgICAgICAgei1pbmRleDogJHt6SW5kZXhMYXllcnMuYmFja2Ryb3AuZHJvcGRvd259OwogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbaXNvcGVuXSkgLmJhY2tkcm9wIHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIH0KCiAgICAgICAgLmRyb3Bkb3duIHsKICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgIHRvcDogNTAlOwogICAgICAgICAgbGVmdDogNTAlOwogICAgICAgICAgcmlnaHQ6IGF1dG87CiAgICAgICAgICBib3R0b206IGF1dG87CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgwLjk1KTsKICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDMycHgpOwogICAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDMycHgpOwogICAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbaXNvcGVuXSkgLmRyb3Bkb3duIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDEpOwogICAgICAgIH0KICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJiYWNrZHJvcCIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jbG9zZSgpfT48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZHJvcGRvd24gJHt0aGlzLnBvc2l0aW9ufSI+CiAgICAgICAgJHt0aGlzLnVzZXIgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItaW5mbyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1hdmF0YXIiPgogICAgICAgICAgICAgICAgJHt0aGlzLnVzZXIuYXZhdGFyID8gYjJgPGltZyBzcmM9IiR7dGhpcy51c2VyLmF2YXRhcn0iIGFsdD0iJHt0aGlzLnVzZXIubmFtZX0iPmAgOiB0aGlzLmdldEluaXRpYWxzKHRoaXMudXNlci5uYW1lKX0KICAgICAgICAgICAgICAgICR7dGhpcy51c2VyLnN0YXR1cyA/IGIyYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLXN0YXR1cyAke3RoaXMudXNlci5zdGF0dXN9Ij48L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLWRldGFpbHMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1uYW1lIj4ke3RoaXMudXNlci5uYW1lfTwvZGl2PgogICAgICAgICAgICAgICAgJHt0aGlzLnVzZXIuZW1haWwgPyBiMmAKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1lbWFpbCI+JHt0aGlzLnVzZXIuZW1haWx9PC9kaXY+CiAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im1lbnUtc2VjdGlvbiI+CiAgICAgICAgICAke3RoaXMubWVudUl0ZW1zLm1hcCgoaXRlbSkgPT4gdGhpcy5yZW5kZXJNZW51SXRlbShpdGVtKSl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlck1lbnVJdGVtKGl0ZW0pIHsKICAgICAgaWYgKCJkaXZpZGVyIiBpbiBpdGVtICYmIGl0ZW0uZGl2aWRlcikgewogICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJtZW51LWRpdmlkZXIiPjwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgbWVudUl0ZW0gPSBpdGVtOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im1lbnUtaXRlbSIgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVNZW51Q2xpY2sobWVudUl0ZW0pfT4KICAgICAgICAke21lbnVJdGVtLmljb25OYW1lID8gYjJgCiAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIke2BsdWNpZGU6JHttZW51SXRlbS5pY29uTmFtZX1gfSI+PC9kZWVzLWljb24+CiAgICAgICAgYCA6ICIifQogICAgICAgIDxzcGFuIGNsYXNzPSJtZW51LWl0ZW0tdGV4dCI+JHttZW51SXRlbS5uYW1lfTwvc3Bhbj4KICAgICAgICAke21lbnVJdGVtLnNob3J0Y3V0ID8gYjJgCiAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVudS1zaG9ydGN1dCI+JHttZW51SXRlbS5zaG9ydGN1dH08L3NwYW4+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBnZXRJbml0aWFscyhuYW1lKSB7CiAgICAgIHJldHVybiBuYW1lLnNwbGl0KCIgIikubWFwKChwYXJ0KSA9PiBwYXJ0WzBdKS5qb2luKCIiKS50b1VwcGVyQ2FzZSgpLnNsaWNlKDAsIDIpOwogICAgfQogICAgYXN5bmMgaGFuZGxlTWVudUNsaWNrKGl0ZW0pIHsKICAgICAgYXdhaXQgaXRlbS5hY3Rpb24oKTsKICAgICAgdGhpcy5jbG9zZSgpOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtZW51LXNlbGVjdCIsIHsKICAgICAgICBkZXRhaWw6IHsgaXRlbSB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgb3BlbigpIHsKICAgICAgdGhpcy5pc09wZW4gPSB0cnVlOwogICAgfQogICAgY2xvc2UoKSB7CiAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7CiAgICB9CiAgICB0b2dnbGUoKSB7CiAgICAgIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuOwogICAgfQogICAgLy8gSGFuZGxlIGNsaWNrcyBvdXRzaWRlIHRoZSBkcm9wZG93bgogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuaGFuZGxlT3V0c2lkZUNsaWNrID0gdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2suYmluZCh0aGlzKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZU91dHNpZGVDbGljayk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZU91dHNpZGVDbGljayk7CiAgICB9CiAgICBoYW5kbGVPdXRzaWRlQ2xpY2soZXZlbnQpIHsKICAgICAgaWYgKHRoaXMuaXNPcGVuICYmICF0aGlzLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHsKICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGhpcy5wYXJlbnRFbGVtZW50OwogICAgICAgIGlmIChwYXJlbnRFbGVtZW50ICYmIHBhcmVudEVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLmNsb3NlKCk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczEwKHRoaXMsIF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczEwKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQXBwdWlQcm9maWxlRHJvcGRvd24yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWFwcGJhci9jb21wb25lbnQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF9kZWVzX2ljb24oKTsKdmFyIF9fZXNEZWNvcmF0ZTEwID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMxMSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0FwcHVpQmFyID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hcHB1aS1hcHBiYXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9tZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX21lbnVJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYnJlYWRjcnVtYnNfZGVjb3JhdG9yczsKICBsZXQgX2JyZWFkY3J1bWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYnJlYWRjcnVtYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JyZWFkY3J1bWJTZXBhcmF0b3JfZGVjb3JhdG9yczsKICBsZXQgX2JyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9icmVhZGNydW1iU2VwYXJhdG9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93V2luZG93Q29udHJvbHNfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dXaW5kb3dDb250cm9sc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dXaW5kb3dDb250cm9sc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdXNlcl9kZWNvcmF0b3JzOwogIGxldCBfdXNlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3VzZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Byb2ZpbGVNZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX3Byb2ZpbGVNZW51SXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wcm9maWxlTWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93U2VhcmNoX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93U2VhcmNoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93QWN0aXZpdHlMb2dUb2dnbGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93QWN0aXZpdHlMb2dUb2dnbGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2aXR5TG9nQ291bnRfZGVjb3JhdG9yczsKICBsZXQgX2FjdGl2aXR5TG9nQ291bnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpdml0eUxvZ0NvdW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpdml0eUxvZ0FjdGl2ZV9kZWNvcmF0b3JzOwogIGxldCBfYWN0aXZpdHlMb2dBY3RpdmVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpdml0eUxvZ0FjdGl2ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZlTWVudV9kZWNvcmF0b3JzOwogIGxldCBfYWN0aXZlTWVudV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2ZU1lbnVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wZW5Ecm9wZG93bnNfZGVjb3JhdG9yczsKICBsZXQgX29wZW5Ecm9wZG93bnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcGVuRHJvcGRvd25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9mb2N1c2VkSXRlbV9kZWNvcmF0b3JzOwogIGxldCBfZm9jdXNlZEl0ZW1faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9mb2N1c2VkSXRlbV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZm9jdXNlZERyb3Bkb3duSXRlbV9kZWNvcmF0b3JzOwogIGxldCBfZm9jdXNlZERyb3Bkb3duSXRlbV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZvY3VzZWREcm9wZG93bkl0ZW1fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzUHJvZmlsZURyb3Bkb3duT3Blbl9kZWNvcmF0b3JzOwogIGxldCBfaXNQcm9maWxlRHJvcGRvd25PcGVuX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNQcm9maWxlRHJvcGRvd25PcGVuX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNBcHB1aUJhcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9tZW51SXRlbXNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX2JyZWFkY3J1bWJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfYnJlYWRjcnVtYlNlcGFyYXRvcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3Nob3dXaW5kb3dDb250cm9sc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF91c2VyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfcHJvZmlsZU1lbnVJdGVtc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfc2hvd1NlYXJjaF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9zaG93QWN0aXZpdHlMb2dUb2dnbGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfYWN0aXZpdHlMb2dDb3VudF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2FjdGl2aXR5TG9nQWN0aXZlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2FjdGl2ZU1lbnVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX29wZW5Ecm9wZG93bnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2ZvY3VzZWRJdGVtX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9mb2N1c2VkRHJvcGRvd25JdGVtX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc1Byb2ZpbGVEcm9wZG93bk9wZW5fZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX21lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVJdGVtcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVJdGVtcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX2JyZWFkY3J1bWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJyZWFkY3J1bWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJicmVhZGNydW1icyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5icmVhZGNydW1icywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYnJlYWRjcnVtYnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYnJlYWRjcnVtYnNfaW5pdGlhbGl6ZXJzLCBfYnJlYWRjcnVtYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfYnJlYWRjcnVtYlNlcGFyYXRvcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJicmVhZGNydW1iU2VwYXJhdG9yIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJicmVhZGNydW1iU2VwYXJhdG9yIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJyZWFkY3J1bWJTZXBhcmF0b3IsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJyZWFkY3J1bWJTZXBhcmF0b3IgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYnJlYWRjcnVtYlNlcGFyYXRvcl9pbml0aWFsaXplcnMsIF9icmVhZGNydW1iU2VwYXJhdG9yX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX3Nob3dXaW5kb3dDb250cm9sc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93V2luZG93Q29udHJvbHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dXaW5kb3dDb250cm9scyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93V2luZG93Q29udHJvbHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dXaW5kb3dDb250cm9scyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93V2luZG93Q29udHJvbHNfaW5pdGlhbGl6ZXJzLCBfc2hvd1dpbmRvd0NvbnRyb2xzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX3VzZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidXNlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidXNlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai51c2VyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai51c2VyID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3VzZXJfaW5pdGlhbGl6ZXJzLCBfdXNlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9wcm9maWxlTWVudUl0ZW1zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInByb2ZpbGVNZW51SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInByb2ZpbGVNZW51SXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucHJvZmlsZU1lbnVJdGVtcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucHJvZmlsZU1lbnVJdGVtcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wcm9maWxlTWVudUl0ZW1zX2luaXRpYWxpemVycywgX3Byb2ZpbGVNZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfc2hvd1NlYXJjaF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93U2VhcmNoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93U2VhcmNoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dTZWFyY2gsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dTZWFyY2ggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1NlYXJjaF9pbml0aWFsaXplcnMsIF9zaG93U2VhcmNoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93QWN0aXZpdHlMb2dUb2dnbGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dBY3Rpdml0eUxvZ1RvZ2dsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93QWN0aXZpdHlMb2dUb2dnbGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dBY3Rpdml0eUxvZ1RvZ2dsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93QWN0aXZpdHlMb2dUb2dnbGVfaW5pdGlhbGl6ZXJzLCBfc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX2FjdGl2aXR5TG9nQ291bnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZpdHlMb2dDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZpdHlMb2dDb3VudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3Rpdml0eUxvZ0NvdW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hY3Rpdml0eUxvZ0NvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2aXR5TG9nQ291bnRfaW5pdGlhbGl6ZXJzLCBfYWN0aXZpdHlMb2dDb3VudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9hY3Rpdml0eUxvZ0FjdGl2ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3Rpdml0eUxvZ0FjdGl2ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZpdHlMb2dBY3RpdmUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZpdHlMb2dBY3RpdmUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2aXR5TG9nQWN0aXZlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2aXR5TG9nQWN0aXZlX2luaXRpYWxpemVycywgX2FjdGl2aXR5TG9nQWN0aXZlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX2FjdGl2ZU1lbnVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZlTWVudSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZlTWVudSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3RpdmVNZW51LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hY3RpdmVNZW51ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2ZU1lbnVfaW5pdGlhbGl6ZXJzLCBfYWN0aXZlTWVudV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9vcGVuRHJvcGRvd25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wZW5Ecm9wZG93bnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wZW5Ecm9wZG93bnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3BlbkRyb3Bkb3ducywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3BlbkRyb3Bkb3ducyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcGVuRHJvcGRvd25zX2luaXRpYWxpemVycywgX29wZW5Ecm9wZG93bnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfZm9jdXNlZEl0ZW1fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZm9jdXNlZEl0ZW0iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZvY3VzZWRJdGVtIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZvY3VzZWRJdGVtLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5mb2N1c2VkSXRlbSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9mb2N1c2VkSXRlbV9pbml0aWFsaXplcnMsIF9mb2N1c2VkSXRlbV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9mb2N1c2VkRHJvcGRvd25JdGVtX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImZvY3VzZWREcm9wZG93bkl0ZW0iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZvY3VzZWREcm9wZG93bkl0ZW0iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZm9jdXNlZERyb3Bkb3duSXRlbSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZm9jdXNlZERyb3Bkb3duSXRlbSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9mb2N1c2VkRHJvcGRvd25JdGVtX2luaXRpYWxpemVycywgX2ZvY3VzZWREcm9wZG93bkl0ZW1fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfaXNQcm9maWxlRHJvcGRvd25PcGVuX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzUHJvZmlsZURyb3Bkb3duT3BlbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNQcm9maWxlRHJvcGRvd25PcGVuIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzUHJvZmlsZURyb3Bkb3duT3Blbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNQcm9maWxlRHJvcGRvd25PcGVuID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzUHJvZmlsZURyb3Bkb3duT3Blbl9pbml0aWFsaXplcnMsIF9pc1Byb2ZpbGVEcm9wZG93bk9wZW5fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNBcHB1aUJhcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkFwcCBVSSI7CiAgICAjbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyBJTlNUQU5DRSBQUk9QRVJUSUVTCiAgICBnZXQgbWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gdGhpcy4jbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWVudUl0ZW1zKHZhbHVlMikgewogICAgICB0aGlzLiNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNicmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2JyZWFkY3J1bWJzX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBicmVhZGNydW1icygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2JyZWFkY3J1bWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYnJlYWRjcnVtYnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2JyZWFkY3J1bWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYnJlYWRjcnVtYlNlcGFyYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2JyZWFkY3J1bWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfYnJlYWRjcnVtYlNlcGFyYXRvcl9pbml0aWFsaXplcnMsICIgPiAiKSk7CiAgICBnZXQgYnJlYWRjcnVtYlNlcGFyYXRvcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2JyZWFkY3J1bWJTZXBhcmF0b3JfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBicmVhZGNydW1iU2VwYXJhdG9yKHZhbHVlMikgewogICAgICB0aGlzLiNicmVhZGNydW1iU2VwYXJhdG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hvd1dpbmRvd0NvbnRyb2xzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfYnJlYWRjcnVtYlNlcGFyYXRvcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX3Nob3dXaW5kb3dDb250cm9sc19pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzaG93V2luZG93Q29udHJvbHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93V2luZG93Q29udHJvbHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93V2luZG93Q29udHJvbHModmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dXaW5kb3dDb250cm9sc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3VzZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9zaG93V2luZG93Q29udHJvbHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF91c2VyX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgdXNlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3VzZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB1c2VyKHZhbHVlMikgewogICAgICB0aGlzLiN1c2VyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcHJvZmlsZU1lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX3VzZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9wcm9maWxlTWVudUl0ZW1zX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBwcm9maWxlTWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gdGhpcy4jcHJvZmlsZU1lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHByb2ZpbGVNZW51SXRlbXModmFsdWUyKSB7CiAgICAgIHRoaXMuI3Byb2ZpbGVNZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93U2VhcmNoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfcHJvZmlsZU1lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX3Nob3dTZWFyY2hfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHNob3dTZWFyY2goKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93U2VhcmNoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1NlYXJjaCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX3Nob3dTZWFyY2hfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9zaG93QWN0aXZpdHlMb2dUb2dnbGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgLy8gQWN0aXZpdHkgbG9nIHRvZ2dsZQogICAgZ2V0IHNob3dBY3Rpdml0eUxvZ1RvZ2dsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dBY3Rpdml0eUxvZ1RvZ2dsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYWN0aXZpdHlMb2dDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2FjdGl2aXR5TG9nQ291bnRfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgYWN0aXZpdHlMb2dDb3VudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FjdGl2aXR5TG9nQ291bnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3Rpdml0eUxvZ0NvdW50KHZhbHVlMikgewogICAgICB0aGlzLiNhY3Rpdml0eUxvZ0NvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYWN0aXZpdHlMb2dBY3RpdmVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9hY3Rpdml0eUxvZ0NvdW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfYWN0aXZpdHlMb2dBY3RpdmVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGFjdGl2aXR5TG9nQWN0aXZlKCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZpdHlMb2dBY3RpdmVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3Rpdml0eUxvZ0FjdGl2ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWN0aXZpdHlMb2dBY3RpdmVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhY3RpdmVNZW51X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfYWN0aXZpdHlMb2dBY3RpdmVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9hY3RpdmVNZW51X2luaXRpYWxpemVycywgbnVsbCkpOwogICAgLy8gU1RBVEUKICAgIGdldCBhY3RpdmVNZW51KCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZlTWVudV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjdGl2ZU1lbnUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2ZU1lbnVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNvcGVuRHJvcGRvd25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfYWN0aXZlTWVudV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX29wZW5Ecm9wZG93bnNfaW5pdGlhbGl6ZXJzLCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSk7CiAgICBnZXQgb3BlbkRyb3Bkb3ducygpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wZW5Ecm9wZG93bnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcGVuRHJvcGRvd25zKHZhbHVlMikgewogICAgICB0aGlzLiNvcGVuRHJvcGRvd25zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZm9jdXNlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9vcGVuRHJvcGRvd25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfZm9jdXNlZEl0ZW1faW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgZm9jdXNlZEl0ZW0oKSB7CiAgICAgIHJldHVybiB0aGlzLiNmb2N1c2VkSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZvY3VzZWRJdGVtKHZhbHVlMikgewogICAgICB0aGlzLiNmb2N1c2VkSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2ZvY3VzZWREcm9wZG93bkl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9mb2N1c2VkSXRlbV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2ZvY3VzZWREcm9wZG93bkl0ZW1faW5pdGlhbGl6ZXJzLCAtMSkpOwogICAgZ2V0IGZvY3VzZWREcm9wZG93bkl0ZW0oKSB7CiAgICAgIHJldHVybiB0aGlzLiNmb2N1c2VkRHJvcGRvd25JdGVtX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZm9jdXNlZERyb3Bkb3duSXRlbSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZm9jdXNlZERyb3Bkb3duSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzUHJvZmlsZURyb3Bkb3duT3Blbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2ZvY3VzZWREcm9wZG93bkl0ZW1fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9pc1Byb2ZpbGVEcm9wZG93bk9wZW5faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzUHJvZmlsZURyb3Bkb3duT3BlbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzUHJvZmlsZURyb3Bkb3duT3Blbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzUHJvZmlsZURyb3Bkb3duT3Blbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNQcm9maWxlRHJvcGRvd25PcGVuX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gYXBwdWlBcHBiYXJTdHlsZXM7CiAgICAvLyBJTlNUQU5DRQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gcmVuZGVyQXBwdWlBcHBiYXIodGhpcyk7CiAgICB9CiAgICByZW5kZXJNZW51SXRlbXMoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgJHt0aGlzLm1lbnVJdGVtcy5tYXAoKGl0ZW0sIGluZGV4MikgPT4gdGhpcy5yZW5kZXJNZW51SXRlbShpdGVtLCBgbWVudS0ke2luZGV4Mn1gKSl9CiAgICBgOwogICAgfQogICAgcmVuZGVyTWVudUl0ZW0oaXRlbSwgaXRlbUlkKSB7CiAgICAgIGlmICgiZGl2aWRlciIgaW4gaXRlbSAmJiBpdGVtLmRpdmlkZXIpIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0iZHJvcGRvd24tZGl2aWRlciI+PC9kaXY+YDsKICAgICAgfQogICAgICBjb25zdCBtZW51SXRlbSA9IGl0ZW07CiAgICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5hY3RpdmVNZW51ID09PSBpdGVtSWQ7CiAgICAgIGNvbnN0IGhhc1N1Ym1lbnUgPSBtZW51SXRlbS5zdWJtZW51ICYmIG1lbnVJdGVtLnN1Ym1lbnUubGVuZ3RoID4gMDsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9Im1lbnVJdGVtICR7aXNBY3RpdmUgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICA/ZGlzYWJsZWQ9JHttZW51SXRlbS5kaXNhYmxlZH0KICAgICAgICB0YWJpbmRleD0iJHttZW51SXRlbS5kaXNhYmxlZCA/IC0xIDogMH0iCiAgICAgICAgZGF0YS1pdGVtLWlkPSIke2l0ZW1JZH0iCiAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVNZW51Q2xpY2sobWVudUl0ZW0sIGl0ZW1JZCl9CiAgICAgICAgQGtleWRvd249JHsoZTExKSA9PiB0aGlzLmhhbmRsZU1lbnVLZXlkb3duKGUxMSwgbWVudUl0ZW0sIGl0ZW1JZCl9CiAgICAgICAgcm9sZT0ibWVudWl0ZW0iCiAgICAgICAgYXJpYS1oYXNwb3B1cD0iJHtoYXNTdWJtZW51fSIKICAgICAgICBhcmlhLWV4cGFuZGVkPSIke2lzQWN0aXZlfSIKICAgICAgPgogICAgICAgICR7bWVudUl0ZW0uaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uPSIke2BsdWNpZGU6JHttZW51SXRlbS5pY29uTmFtZX1gfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgICR7bWVudUl0ZW0ubmFtZX0KICAgICAgICAke2hhc1N1Ym1lbnUgPyB0aGlzLnJlbmRlckRyb3Bkb3duKG1lbnVJdGVtLnN1Ym1lbnUsIGl0ZW1JZCwgaXNBY3RpdmUpIDogIiJ9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckRyb3Bkb3duKGl0ZW1zLCBwYXJlbnRJZCwgaXNPcGVuKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiAKICAgICAgICBjbGFzcz0iZHJvcGRvd24gJHtpc09wZW4gPyAib3BlbiIgOiAiIn0iIAogICAgICAgIEBjbGljaz0keyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0KICAgICAgICBAa2V5ZG93bj0keyhlMTEpID0+IHRoaXMuaGFuZGxlRHJvcGRvd25LZXlkb3duKGUxMSwgaXRlbXMsIHBhcmVudElkKX0KICAgICAgICB0YWJpbmRleD0iJHtpc09wZW4gPyAwIDogLTF9IgogICAgICAgIHJvbGU9Im1lbnUiCiAgICAgID4KICAgICAgICAke2l0ZW1zLm1hcCgoaXRlbSwgaW5kZXgyKSA9PiB0aGlzLnJlbmRlckRyb3Bkb3duSXRlbShpdGVtLCBgJHtwYXJlbnRJZH0tJHtpbmRleDJ9YCkpfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJEcm9wZG93bkl0ZW0oaXRlbSwgaXRlbUlkKSB7CiAgICAgIGlmICgiZGl2aWRlciIgaW4gaXRlbSAmJiBpdGVtLmRpdmlkZXIpIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0iZHJvcGRvd24tZGl2aWRlciI+PC9kaXY+YDsKICAgICAgfQogICAgICBjb25zdCBtZW51SXRlbSA9IGl0ZW07CiAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHBhcnNlSW50KGl0ZW1JZC5zcGxpdCgiLSIpLnBvcCgpIHx8ICIwIik7CiAgICAgIGNvbnN0IGlzRm9jdXNlZCA9IHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9PT0gaXRlbUluZGV4OwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iZHJvcGRvd24taXRlbSAke2lzRm9jdXNlZCA/ICJmb2N1c2VkIiA6ICIifSIKICAgICAgICA/ZGlzYWJsZWQ9JHttZW51SXRlbS5kaXNhYmxlZH0KICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmhhbmRsZURyb3Bkb3duSXRlbUNsaWNrKG1lbnVJdGVtKX0KICAgICAgICBAbW91c2VlbnRlcj0keygpID0+IHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IGl0ZW1JbmRleH0KICAgICAgICByb2xlPSJtZW51aXRlbSIKICAgICAgICB0YWJpbmRleD0iJHttZW51SXRlbS5kaXNhYmxlZCA/IC0xIDogMH0iCiAgICAgID4KICAgICAgICAke21lbnVJdGVtLmljb25OYW1lID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0iJHtgbHVjaWRlOiR7bWVudUl0ZW0uaWNvbk5hbWV9YH0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICA8c3Bhbj4ke21lbnVJdGVtLm5hbWV9PC9zcGFuPgogICAgICAgICR7bWVudUl0ZW0uc2hvcnRjdXQgPyBiMmA8c3BhbiBjbGFzcz0ic2hvcnRjdXQiPiR7bWVudUl0ZW0uc2hvcnRjdXR9PC9zcGFuPmAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyQnJlYWRjcnVtYnMoKSB7CiAgICAgIGlmICghdGhpcy5icmVhZGNydW1icykgewogICAgICAgIHJldHVybiBiMmBgOwogICAgICB9CiAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5icmVhZGNydW1icy5zcGxpdCh0aGlzLmJyZWFkY3J1bWJTZXBhcmF0b3IpOwogICAgICByZXR1cm4gYjJgCiAgICAgICR7cGFydHMubWFwKChwYXJ0LCBpbmRleDIpID0+IGIyYAogICAgICAgICR7aW5kZXgyID4gMCA/IGIyYDxzcGFuIGNsYXNzPSJicmVhZGNydW1iLXNlcGFyYXRvciI+JHt0aGlzLmJyZWFkY3J1bWJTZXBhcmF0b3J9PC9zcGFuPmAgOiAiIn0KICAgICAgICA8c3BhbiAKICAgICAgICAgIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0iIAogICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVCcmVhZGNydW1iQ2xpY2socGFydCwgaW5kZXgyKX0KICAgICAgICA+CiAgICAgICAgICAke3BhcnR9CiAgICAgICAgPC9zcGFuPgogICAgICBgKX0KICAgIGA7CiAgICB9CiAgICByZW5kZXJBY2NvdW50U2VjdGlvbigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke3RoaXMuc2hvd1NlYXJjaCA/IGIyYAogICAgICAgIDxkZWVzLWljb24KICAgICAgICAgIGNsYXNzPSJzZWFyY2gtaWNvbiIKICAgICAgICAgIC5pY29uPSR7Imx1Y2lkZTpzZWFyY2gifQogICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVTZWFyY2hDbGlja30KICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgIGAgOiAiIn0KICAgICAgJHt0aGlzLnVzZXIgPyBiMmAKICAgICAgICA8ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItaW5mbyIgQGNsaWNrPSR7dGhpcy5oYW5kbGVVc2VyQ2xpY2t9PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLWF2YXRhciI+CiAgICAgICAgICAgICAgJHt0aGlzLnVzZXIuYXZhdGFyID8gYjJgPGltZyBzcmM9IiR7dGhpcy51c2VyLmF2YXRhcn0iIGFsdD0iJHt0aGlzLnVzZXIubmFtZX0iPmAgOiBiMmAke3RoaXMudXNlci5uYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfWB9CiAgICAgICAgICAgICAgJHt0aGlzLnVzZXIuc3RhdHVzID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLXN0YXR1cyAke3RoaXMudXNlci5zdGF0dXN9Ij48L2Rpdj4KICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8c3Bhbj4ke3RoaXMudXNlci5uYW1lfTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRlZXMtYXBwdWktcHJvZmlsZWRyb3Bkb3duCiAgICAgICAgICAgIC51c2VyPSR7dGhpcy51c2VyfQogICAgICAgICAgICAubWVudUl0ZW1zPSR7dGhpcy5wcm9maWxlTWVudUl0ZW1zfQogICAgICAgICAgICAuaXNPcGVuPSR7dGhpcy5pc1Byb2ZpbGVEcm9wZG93bk9wZW59CiAgICAgICAgICAgIC5wb3NpdGlvbj0keyJ0b3AtcmlnaHQifQogICAgICAgICAgICBAbWVudS1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZVByb2ZpbGVNZW51U2VsZWN0KGUxMSl9CiAgICAgICAgICA+PC9kZWVzLWFwcHVpLXByb2ZpbGVkcm9wZG93bj4KICAgICAgICA8L2Rpdj4KICAgICAgYCA6ICIifQogICAgICAke3RoaXMuc2hvd0FjdGl2aXR5TG9nVG9nZ2xlID8gYjJgCiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9ImFjdGl2aXR5LXRvZ2dsZSAke3RoaXMuYWN0aXZpdHlMb2dBY3RpdmUgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlQWN0aXZpdHlUb2dnbGV9CiAgICAgICAgICB0aXRsZT0iQWN0aXZpdHkgTG9nIgogICAgICAgID4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmFjdGl2aXR5In0+PC9kZWVzLWljb24+CiAgICAgICAgICAke3RoaXMuYWN0aXZpdHlMb2dDb3VudCA+IDAgPyBiMmAKICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImFjdGl2aXR5LWJhZGdlIj4ke3RoaXMuYWN0aXZpdHlMb2dDb3VudCA+IDk5ID8gIjk5KyIgOiB0aGlzLmFjdGl2aXR5TG9nQ291bnR9PC9zcGFuPgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICBgIDogIiJ9CiAgICBgOwogICAgfQogICAgLy8gRXZlbnQgaGFuZGxlcnMKICAgIGhhbmRsZU1lbnVDbGljayhpdGVtLCBpdGVtSWQpIHsKICAgICAgaWYgKGl0ZW0uZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoaXRlbS5zdWJtZW51ICYmIGl0ZW0uc3VibWVudS5sZW5ndGggPiAwKSB7CiAgICAgICAgaWYgKHRoaXMuYWN0aXZlTWVudSA9PT0gaXRlbUlkKSB7CiAgICAgICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBpdGVtSWQ7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuYWN0aXZlTWVudSA9IG51bGw7CiAgICAgICAgaWYgKGl0ZW0uYWN0aW9uKSB7CiAgICAgICAgICBpdGVtLmFjdGlvbigpOwogICAgICAgIH0KICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtZW51LXNlbGVjdCIsIHsKICAgICAgICAgIGRldGFpbDogeyBpdGVtIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZURyb3Bkb3duSXRlbUNsaWNrKGl0ZW0pIHsKICAgICAgaWYgKGl0ZW0uZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBudWxsOwogICAgICBpZiAoaXRlbS5hY3Rpb24pIHsKICAgICAgICBpdGVtLmFjdGlvbigpOwogICAgICB9CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm1lbnUtc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogeyBpdGVtIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVNZW51S2V5ZG93bihlMTEsIGl0ZW0sIGl0ZW1JZCkgewogICAgICBzd2l0Y2ggKGUxMS5rZXkpIHsKICAgICAgICBjYXNlICJFbnRlciI6CiAgICAgICAgY2FzZSAiICI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuaGFuZGxlTWVudUNsaWNrKGl0ZW0sIGl0ZW1JZCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJBcnJvd0Rvd24iOgogICAgICAgICAgaWYgKGl0ZW0uc3VibWVudSAmJiB0aGlzLmFjdGl2ZU1lbnUgPT09IGl0ZW1JZCkgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID0gMDsKICAgICAgICAgICAgY29uc3QgZmlyc3RWYWxpZEl0ZW0gPSB0aGlzLmZpbmROZXh0VmFsaWRJdGVtKGl0ZW0uc3VibWVudSwgLTEsIDEpOwogICAgICAgICAgICBpZiAoZmlyc3RWYWxpZEl0ZW0gIT09IC0xKSB7CiAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID0gZmlyc3RWYWxpZEl0ZW07CiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBkcm9wZG93biA9IHRoaXMucmVuZGVyUm9vdC5xdWVyeVNlbGVjdG9yKCIuZHJvcGRvd24ub3BlbiIpOwogICAgICAgICAgICAgICAgaWYgKGRyb3Bkb3duKSB7CiAgICAgICAgICAgICAgICAgIGRyb3Bkb3duLmZvY3VzKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwgMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkVzY2FwZSI6CiAgICAgICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBudWxsOwogICAgICAgICAgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID0gLTE7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJUYWIiOgogICAgICAgICAgaWYgKHRoaXMuYWN0aXZlTWVudSA9PT0gaXRlbUlkKSB7CiAgICAgICAgICAgIHRoaXMuYWN0aXZlTWVudSA9IG51bGw7CiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IC0xOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQXJyb3dSaWdodCI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuZm9jdXNOZXh0TWVudUl0ZW0oaXRlbUlkLCAxKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkFycm93TGVmdCI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuZm9jdXNOZXh0TWVudUl0ZW0oaXRlbUlkLCAtMSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaGFuZGxlQnJlYWRjcnVtYkNsaWNrKGJyZWFkY3J1bWIsIGluZGV4MikgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJicmVhZGNydW1iLW5hdmlnYXRlIiwgewogICAgICAgIGRldGFpbDogeyBicmVhZGNydW1iLCBpbmRleDogaW5kZXgyIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVTZWFyY2hDbGljaygpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VhcmNoLWNsaWNrIiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlQWN0aXZpdHlUb2dnbGUoKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImFjdGl2aXR5LXRvZ2dsZSIsIHsKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZVVzZXJDbGljaygpIHsKICAgICAgdGhpcy5pc1Byb2ZpbGVEcm9wZG93bk9wZW4gPSAhdGhpcy5pc1Byb2ZpbGVEcm9wZG93bk9wZW47CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInVzZXItbWVudS1vcGVuIiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlUHJvZmlsZU1lbnVTZWxlY3QoZTExKSB7CiAgICAgIHRoaXMuaXNQcm9maWxlRHJvcGRvd25PcGVuID0gZmFsc2U7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInByb2ZpbGUtbWVudS1zZWxlY3QiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgLy8gTGlmZWN5Y2xlCiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuaGFuZGxlR2xvYmFsQ2xpY2spOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuaGFuZGxlRG9jdW1lbnRDbGljayk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZURvY3VtZW50Q2xpY2spOwogICAgfQogICAgaGFuZGxlR2xvYmFsQ2xpY2sgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfaXNQcm9maWxlRHJvcGRvd25PcGVuX2V4dHJhSW5pdGlhbGl6ZXJzKSwgKGUxMSkgPT4gewogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICB9KTsKICAgIGhhbmRsZURvY3VtZW50Q2xpY2sgPSAoKSA9PiB7CiAgICAgIHRoaXMuYWN0aXZlTWVudSA9IG51bGw7CiAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IC0xOwogICAgfTsKICAgIGhhbmRsZURyb3Bkb3duS2V5ZG93bihlMTEsIGl0ZW1zLCBfcGFyZW50SWQpIHsKICAgICAgY29uc3QgdmFsaWRJdGVtcyA9IGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gISgiZGl2aWRlciIgaW4gaXRlbSAmJiBpdGVtLmRpdmlkZXIpKTsKICAgICAgc3dpdGNoIChlMTEua2V5KSB7CiAgICAgICAgY2FzZSAiQXJyb3dEb3duIjoKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gdGhpcy5maW5kTmV4dFZhbGlkSXRlbShpdGVtcywgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtLCAxKTsKICAgICAgICAgIGlmIChuZXh0SW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IG5leHRJbmRleDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkFycm93VXAiOgogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBjb25zdCBwcmV2SW5kZXggPSB0aGlzLmZpbmROZXh0VmFsaWRJdGVtKGl0ZW1zLCB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0sIC0xKTsKICAgICAgICAgIGlmIChwcmV2SW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IHByZXZJbmRleDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkVudGVyIjoKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgaWYgKHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSAhPT0gLTEpIHsKICAgICAgICAgICAgY29uc3QgZm9jdXNlZEl0ZW0gPSB2YWxpZEl0ZW1zW3RoaXMuZm9jdXNlZERyb3Bkb3duSXRlbV07CiAgICAgICAgICAgIGlmIChmb2N1c2VkSXRlbSAmJiAiYWN0aW9uIiBpbiBmb2N1c2VkSXRlbSAmJiAhZm9jdXNlZEl0ZW0uZGlzYWJsZWQpIHsKICAgICAgICAgICAgICB0aGlzLmhhbmRsZURyb3Bkb3duSXRlbUNsaWNrKGZvY3VzZWRJdGVtKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiSG9tZSI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGNvbnN0IGZpcnN0SW5kZXggPSB0aGlzLmZpbmROZXh0VmFsaWRJdGVtKGl0ZW1zLCAtMSwgMSk7CiAgICAgICAgICBpZiAoZmlyc3RJbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID0gZmlyc3RJbmRleDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkVuZCI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuZmluZE5leHRWYWxpZEl0ZW0oaXRlbXMsIGl0ZW1zLmxlbmd0aCwgLTEpOwogICAgICAgICAgaWYgKGxhc3RJbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID0gbGFzdEluZGV4OwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiRXNjYXBlIjoKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5hY3RpdmVNZW51ID0gbnVsbDsKICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IC0xOwogICAgICAgICAgY29uc3QgbWVudUl0ZW0gPSB0aGlzLnJlbmRlclJvb3QucXVlcnlTZWxlY3RvcihgLm1lbnVJdGVtLmFjdGl2ZWApOwogICAgICAgICAgaWYgKG1lbnVJdGVtKSB7CiAgICAgICAgICAgIG1lbnVJdGVtLmZvY3VzKCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgZmluZE5leHRWYWxpZEl0ZW0oaXRlbXMsIGN1cnJlbnRJbmRleCwgZGlyZWN0aW9uKSB7CiAgICAgIGxldCBpbmRleDIgPSBjdXJyZW50SW5kZXggKyBkaXJlY3Rpb247CiAgICAgIHdoaWxlIChpbmRleDIgPj0gMCAmJiBpbmRleDIgPCBpdGVtcy5sZW5ndGgpIHsKICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaW5kZXgyXTsKICAgICAgICBpZiAoISgiZGl2aWRlciIgaW4gaXRlbSAmJiBpdGVtLmRpdmlkZXIpICYmICEoImRpc2FibGVkIiBpbiBpdGVtICYmIGl0ZW0uZGlzYWJsZWQpKSB7CiAgICAgICAgICByZXR1cm4gaW5kZXgyOwogICAgICAgIH0KICAgICAgICBpbmRleDIgKz0gZGlyZWN0aW9uOwogICAgICB9CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGZvY3VzTmV4dE1lbnVJdGVtKGN1cnJlbnRJdGVtSWQsIGRpcmVjdGlvbikgewogICAgICBjb25zdCBtZW51SXRlbXMgPSBBcnJheS5mcm9tKHRoaXMucmVuZGVyUm9vdC5xdWVyeVNlbGVjdG9yQWxsKCIubWVudUl0ZW0iKSk7CiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IG1lbnVJdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uZ2V0QXR0cmlidXRlKCJkYXRhLWl0ZW0taWQiKSA9PT0gY3VycmVudEl0ZW1JZCk7CiAgICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xKQogICAgICAgIHJldHVybjsKICAgICAgbGV0IG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCArIGRpcmVjdGlvbjsKICAgICAgaWYgKG5leHRJbmRleCA8IDApIHsKICAgICAgICBuZXh0SW5kZXggPSBtZW51SXRlbXMubGVuZ3RoIC0gMTsKICAgICAgfSBlbHNlIGlmIChuZXh0SW5kZXggPj0gbWVudUl0ZW1zLmxlbmd0aCkgewogICAgICAgIG5leHRJbmRleCA9IDA7CiAgICAgIH0KICAgICAgbGV0IGF0dGVtcHRzID0gMDsKICAgICAgd2hpbGUgKGF0dGVtcHRzIDwgbWVudUl0ZW1zLmxlbmd0aCkgewogICAgICAgIGNvbnN0IG5leHRJdGVtID0gbWVudUl0ZW1zW25leHRJbmRleF07CiAgICAgICAgaWYgKCFuZXh0SXRlbS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpIHsKICAgICAgICAgIG5leHRJdGVtLmZvY3VzKCk7CiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVNZW51KSB7CiAgICAgICAgICAgIHRoaXMuYWN0aXZlTWVudSA9IG51bGw7CiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IC0xOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIG5leHRJbmRleCA9IChuZXh0SW5kZXggKyBkaXJlY3Rpb24gKyBtZW51SXRlbXMubGVuZ3RoKSAlIG1lbnVJdGVtcy5sZW5ndGg7CiAgICAgICAgYXR0ZW1wdHMrKzsKICAgICAgfQogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxMShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0FwcHVpQmFyMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1ib3R0b21iYXIvZGVlcy1hcHB1aS1ib3R0b21iYXIuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgX2E7CnZhciBkZW1vRnVuYzUgPSAoKSA9PiB7CiAgcmV0dXJuIGIyKF9hIHx8IChfYSA9IF9fdGVtcGxhdGUoW2AKICAgIDxkZWVzLWRlbW93cmFwcGVyPgogICAgICA8c3R5bGU+CiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICMxYTFhMWE7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1sYWJlbCB7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBjb2xvcjogIzczNzM3MzsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1ib3R0b21iYXItd3JhcHBlciB7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBoc2woMCAwJSAyMCUpOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1sYWJlbCI+Qm90dG9tIGJhciB3aXRoIHN0YXR1cyB3aWRnZXRzIGFuZCBhY3Rpb25zPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLWJvdHRvbWJhci13cmFwcGVyIj4KICAgICAgICAgICAgPGRlZXMtYXBwdWktYm90dG9tYmFyCiAgICAgICAgICAgICAgaWQ9ImRlbW8tYm90dG9tYmFyIgogICAgICAgICAgICA+PC9kZWVzLWFwcHVpLWJvdHRvbWJhcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1sYWJlbCI+Q29udHJvbHM8L2Rpdj4KICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBmbGV4LXdyYXA6IHdyYXA7Ij4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJhZGRTdWNjZXNzV2lkZ2V0KCkiPkFkZCBTdWNjZXNzIFdpZGdldDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImFkZFdhcm5pbmdXaWRnZXQoKSI+QWRkIFdhcm5pbmcgV2lkZ2V0PC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iYWRkRXJyb3JXaWRnZXQoKSI+QWRkIEVycm9yIFdpZGdldDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImFkZExvYWRpbmdXaWRnZXQoKSI+QWRkIExvYWRpbmcgV2lkZ2V0PC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iYWRkUmlnaHRXaWRnZXQoKSI+QWRkIFJpZ2h0IFdpZGdldDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImFkZEFjdGlvbigpIj5BZGQgQWN0aW9uPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iY2xlYXJBbGwoKSI+Q2xlYXIgQWxsPC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxzY3JpcHQgdHlwZT0ibW9kdWxlIj4KICAgICAgICBjb25zdCBib3R0b21iYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVtby1ib3R0b21iYXInKTsKCiAgICAgICAgLy8gV2FpdCBmb3IgY29tcG9uZW50IHRvIGluaXRpYWxpemUKICAgICAgICBhd2FpdCBib3R0b21iYXIudXBkYXRlQ29tcGxldGU7CgogICAgICAgIC8vIEFkZCBpbml0aWFsIHdpZGdldHMKICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgIGlkOiAnc3RhdHVzJywKICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmFjdGl2aXR5JywKICAgICAgICAgIGxhYmVsOiAnU3lzdGVtIE9ubGluZScsCiAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJywKICAgICAgICAgIHRvb2x0aXA6ICdBbGwgc3lzdGVtcyBvcGVyYXRpb25hbCcsCiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBjb25zb2xlLmxvZygnU3RhdHVzIGNsaWNrZWQnKSwKICAgICAgICAgIGNvbnRleHRNZW51SXRlbXM6IFsKICAgICAgICAgICAgeyBuYW1lOiAnVmlldyBEZXRhaWxzJywgaWNvbk5hbWU6ICdsdWNpZGU6aW5mbycsIGFjdGlvbjogKCkgPT4gYWxlcnQoJ1N5c3RlbSBkZXRhaWxzJykgfSwKICAgICAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgICAgIHsgbmFtZTogJ1JlZnJlc2ggU3RhdHVzJywgaWNvbk5hbWU6ICdsdWNpZGU6cmVmcmVzaEN3JywgYWN0aW9uOiAoKSA9PiBhbGVydCgnUmVmcmVzaGluZy4uLicpIH0sCiAgICAgICAgICBdLAogICAgICAgIH0pOwoKICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgIGlkOiAnbm90aWZpY2F0aW9ucycsCiAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpiZWxsJywKICAgICAgICAgIGxhYmVsOiAnMyBub3RpZmljYXRpb25zJywKICAgICAgICAgIHN0YXR1czogJ3dhcm5pbmcnLAogICAgICAgICAgdG9vbHRpcDogJ1lvdSBoYXZlIHVucmVhZCBub3RpZmljYXRpb25zJywKICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGNvbnNvbGUubG9nKCdOb3RpZmljYXRpb25zIGNsaWNrZWQnKSwKICAgICAgICB9KTsKCiAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICBpZDogJ3ZlcnNpb24nLAogICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6Z2l0QnJhbmNoJywKICAgICAgICAgIGxhYmVsOiAndjEuMi4zJywKICAgICAgICAgIHRvb2x0aXA6ICdDdXJyZW50IHZlcnNpb24nLAogICAgICAgICAgcG9zaXRpb246ICdyaWdodCcsCiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBjb25zb2xlLmxvZygnVmVyc2lvbiBjbGlja2VkJyksCiAgICAgICAgfSk7CgogICAgICAgIC8vIEFkZCBpbml0aWFsIGFjdGlvbnMKICAgICAgICBib3R0b21iYXIuYWRkQWN0aW9uKHsKICAgICAgICAgIGlkOiAnc2V0dGluZ3MnLAogICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6c2V0dGluZ3MnLAogICAgICAgICAgdG9vbHRpcDogJ1NldHRpbmdzJywKICAgICAgICAgIHBvc2l0aW9uOiAncmlnaHQnLAogICAgICAgICAgb25DbGljazogKCkgPT4gYWxlcnQoJ1NldHRpbmdzIGNsaWNrZWQnKSwKICAgICAgICB9KTsKCiAgICAgICAgYm90dG9tYmFyLmFkZEFjdGlvbih7CiAgICAgICAgICBpZDogJ2hlbHAnLAogICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6aGVscENpcmNsZScsCiAgICAgICAgICB0b29sdGlwOiAnSGVscCcsCiAgICAgICAgICBwb3NpdGlvbjogJ3JpZ2h0JywKICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGFsZXJ0KCdIZWxwIGNsaWNrZWQnKSwKICAgICAgICB9KTsKCiAgICAgICAgLy8gRGVtbyBjb250cm9sIGZ1bmN0aW9ucwogICAgICAgIGxldCB3aWRnZXRDb3VudGVyID0gMDsKICAgICAgICBsZXQgYWN0aW9uQ291bnRlciA9IDA7CgogICAgICAgIHdpbmRvdy5hZGRTdWNjZXNzV2lkZ2V0ID0gKCkgPT4gewogICAgICAgICAgd2lkZ2V0Q291bnRlcisrOwogICAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICAgIGlkOiAnc3VjY2Vzcy0nICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6Y2hlY2tDaXJjbGUnLAogICAgICAgICAgICBsYWJlbDogJ1N1Y2Nlc3MgJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLAogICAgICAgICAgICB0b29sdGlwOiAnU3VjY2VzcyB3aWRnZXQnLAogICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBib3R0b21iYXIucmVtb3ZlV2lkZ2V0KCdzdWNjZXNzLScgKyB3aWRnZXRDb3VudGVyKSwKICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIHdpbmRvdy5hZGRXYXJuaW5nV2lkZ2V0ID0gKCkgPT4gewogICAgICAgICAgd2lkZ2V0Q291bnRlcisrOwogICAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICAgIGlkOiAnd2FybmluZy0nICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6YWxlcnRUcmlhbmdsZScsCiAgICAgICAgICAgIGxhYmVsOiAnV2FybmluZyAnICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgc3RhdHVzOiAnd2FybmluZycsCiAgICAgICAgICAgIHRvb2x0aXA6ICdXYXJuaW5nIHdpZGdldCcsCiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGJvdHRvbWJhci5yZW1vdmVXaWRnZXQoJ3dhcm5pbmctJyArIHdpZGdldENvdW50ZXIpLAogICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgd2luZG93LmFkZEVycm9yV2lkZ2V0ID0gKCkgPT4gewogICAgICAgICAgd2lkZ2V0Q291bnRlcisrOwogICAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICAgIGlkOiAnZXJyb3ItJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOnhDaXJjbGUnLAogICAgICAgICAgICBsYWJlbDogJ0Vycm9yICcgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsCiAgICAgICAgICAgIHRvb2x0aXA6ICdFcnJvciB3aWRnZXQnLAogICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBib3R0b21iYXIucmVtb3ZlV2lkZ2V0KCdlcnJvci0nICsgd2lkZ2V0Q291bnRlciksCiAgICAgICAgICB9KTsKICAgICAgICB9OwoKICAgICAgICB3aW5kb3cuYWRkTG9hZGluZ1dpZGdldCA9ICgpID0+IHsKICAgICAgICAgIHdpZGdldENvdW50ZXIrKzsKICAgICAgICAgIGNvbnN0IGlkID0gJ2xvYWRpbmctJyArIHdpZGdldENvdW50ZXI7CiAgICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgICAgaWQ6IGlkLAogICAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpsb2FkZXIyJywKICAgICAgICAgICAgbGFiZWw6ICdMb2FkaW5nLi4uJywKICAgICAgICAgICAgc3RhdHVzOiAnYWN0aXZlJywKICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSwKICAgICAgICAgICAgdG9vbHRpcDogJ0xvYWRpbmcgaW4gcHJvZ3Jlc3MnLAogICAgICAgICAgfSk7CgogICAgICAgICAgLy8gU2ltdWxhdGUgY29tcGxldGlvbiBhZnRlciAzIHNlY29uZHMKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBib3R0b21iYXIudXBkYXRlV2lkZ2V0KGlkLCB7CiAgICAgICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6Y2hlY2snLAogICAgICAgICAgICAgIGxhYmVsOiAnRG9uZSEnLAogICAgICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLAogICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sIDMwMDApOwogICAgICAgIH07CgogICAgICAgIHdpbmRvdy5hZGRSaWdodFdpZGdldCA9ICgpID0+IHsKICAgICAgICAgIHdpZGdldENvdW50ZXIrKzsKICAgICAgICAgIGJvdHRvbWJhci5hZGRXaWRnZXQoewogICAgICAgICAgICBpZDogJ3JpZ2h0LScgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTppbmZvJywKICAgICAgICAgICAgbGFiZWw6ICdSaWdodCAnICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgcG9zaXRpb246ICdyaWdodCcsCiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGJvdHRvbWJhci5yZW1vdmVXaWRnZXQoJ3JpZ2h0LScgKyB3aWRnZXRDb3VudGVyKSwKICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIHdpbmRvdy5hZGRBY3Rpb24gPSAoKSA9PiB7CiAgICAgICAgICBhY3Rpb25Db3VudGVyKys7CiAgICAgICAgICBib3R0b21iYXIuYWRkQWN0aW9uKHsKICAgICAgICAgICAgaWQ6ICdhY3Rpb24tJyArIGFjdGlvbkNvdW50ZXIsCiAgICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOnphcCcsCiAgICAgICAgICAgIHRvb2x0aXA6ICdBY3Rpb24gJyArIGFjdGlvbkNvdW50ZXIsCiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHsKICAgICAgICAgICAgICBhbGVydCgnQWN0aW9uICcgKyBhY3Rpb25Db3VudGVyICsgJyBjbGlja2VkJyk7CiAgICAgICAgICAgICAgYm90dG9tYmFyLnJlbW92ZUFjdGlvbignYWN0aW9uLScgKyBhY3Rpb25Db3VudGVyKTsKICAgICAgICAgICAgfSwKICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIHdpbmRvdy5jbGVhckFsbCA9ICgpID0+IHsKICAgICAgICAgIGJvdHRvbWJhci5jbGVhcldpZGdldHMoKTsKICAgICAgICAgIGJvdHRvbWJhci5jbGVhckFjdGlvbnMoKTsKICAgICAgICAgIHdpZGdldENvdW50ZXIgPSAwOwogICAgICAgICAgYWN0aW9uQ291bnRlciA9IDA7CiAgICAgICAgfTsKICAgICAgPFwvc2NyaXB0PgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIGBdKSkpOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYm90dG9tYmFyL2RlZXMtYXBwdWktYm90dG9tYmFyLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKaW5pdF9kZWVzX2ljb24oKTsKdmFyIF9fZXNEZWNvcmF0ZTExID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMxMiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0FwcHVpQm90dG9tYmFyID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hcHB1aS1ib3R0b21iYXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF93aWRnZXRzX2RlY29yYXRvcnM7CiAgbGV0IF93aWRnZXRzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfd2lkZ2V0c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aW9uc19kZWNvcmF0b3JzOwogIGxldCBfYWN0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0FwcHVpQm90dG9tYmFyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3dpZGdldHNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2FjdGlvbnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMTEodGhpcywgbnVsbCwgX3dpZGdldHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAid2lkZ2V0cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid2lkZ2V0cyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai53aWRnZXRzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai53aWRnZXRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dpZGdldHNfaW5pdGlhbGl6ZXJzLCBfd2lkZ2V0c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTExKHRoaXMsIG51bGwsIF9hY3Rpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWN0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3Rpb25zX2luaXRpYWxpemVycywgX2FjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNBcHB1aUJvdHRvbWJhcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzU7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkFwcCBVSSI7CiAgICAjd2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMxMih0aGlzLCBfd2lkZ2V0c19pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFIFBST1BFUlRJRVMKICAgIGdldCB3aWRnZXRzKCkgewogICAgICByZXR1cm4gdGhpcy4jd2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHdpZGdldHModmFsdWUyKSB7CiAgICAgIHRoaXMuI3dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhY3Rpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMih0aGlzLCBfd2lkZ2V0c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTIodGhpcywgX2FjdGlvbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IGFjdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhY3Rpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWN0aW9ucyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5ib3R0b20tYmFyIHsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICAgIGdhcDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NCUpIiwgImhzbCgwIDAlIDYlKSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBjb2xvciAwLjE1cyBlYXNlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC53aWRnZXQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQgZGVlcy1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLndpZGdldC1zZXBhcmF0b3IgewogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4MCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgLyogU3RhdHVzIGNvbG9ycyBtYXRjaGluZyBkZWVzLXdvcmtzcGFjZS1ib3R0b21iYXIgKi8KICAgICAgLndpZGdldC5hY3RpdmUgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDQ1JSkiLCAiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQuc3VjY2VzcyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyIDcwJSAzNSUpIiwgImhzbCgxNDIgNzAlIDUwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQud2FybmluZyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMzggOTIlIDQ1JSkiLCAiaHNsKDM4IDkyJSA1NSUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0LmVycm9yIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcwJSA1MCUpIiwgImhzbCgwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICAgIGZyb20geyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfQogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfQogICAgICB9CgogICAgICAuc3Bpbm5pbmcgewogICAgICAgIGFuaW1hdGlvbjogc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIC5zcGFjZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uZGlzYWJsZWQgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5kaXNhYmxlZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IGxlZnRXaWRnZXRzID0gdGhpcy53aWRnZXRzLmZpbHRlcigodzMpID0+IHczLnBvc2l0aW9uICE9PSAicmlnaHQiKS5zb3J0KChhNSwgYjUpID0+IChhNS5vcmRlciB8fCAwKSAtIChiNS5vcmRlciB8fCAwKSk7CiAgICAgIGNvbnN0IHJpZ2h0V2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5maWx0ZXIoKHczKSA9PiB3My5wb3NpdGlvbiA9PT0gInJpZ2h0Iikuc29ydCgoYTUsIGI1KSA9PiAoYTUub3JkZXIgfHwgMCkgLSAoYjUub3JkZXIgfHwgMCkpOwogICAgICBjb25zdCBsZWZ0QWN0aW9ucyA9IHRoaXMuYWN0aW9ucy5maWx0ZXIoKGE1KSA9PiBhNS5wb3NpdGlvbiA9PT0gImxlZnQiKTsKICAgICAgY29uc3QgcmlnaHRBY3Rpb25zID0gdGhpcy5hY3Rpb25zLmZpbHRlcigoYTUpID0+IGE1LnBvc2l0aW9uICE9PSAibGVmdCIpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImJvdHRvbS1iYXIiPgogICAgICAgIDwhLS0gTGVmdCBhY3Rpb25zIC0tPgogICAgICAgICR7bGVmdEFjdGlvbnMubWFwKChhY3Rpb24pID0+IHRoaXMucmVuZGVyQWN0aW9uKGFjdGlvbikpfQoKICAgICAgICA8IS0tIExlZnQgd2lkZ2V0cyAtLT4KICAgICAgICAke2xlZnRXaWRnZXRzLm1hcCgod2lkZ2V0LCBpbmRleDIpID0+IGIyYAogICAgICAgICAgJHtpbmRleDIgPiAwIHx8IGxlZnRBY3Rpb25zLmxlbmd0aCA+IDAgPyBiMmA8ZGl2IGNsYXNzPSJ3aWRnZXQtc2VwYXJhdG9yIj48L2Rpdj5gIDogIiJ9CiAgICAgICAgICAke3RoaXMucmVuZGVyV2lkZ2V0KHdpZGdldCl9CiAgICAgICAgYCl9CgogICAgICAgIDxkaXYgY2xhc3M9InNwYWNlciI+PC9kaXY+CgogICAgICAgIDwhLS0gUmlnaHQgd2lkZ2V0cyAtLT4KICAgICAgICAke3JpZ2h0V2lkZ2V0cy5tYXAoKHdpZGdldCwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAgICR7dGhpcy5yZW5kZXJXaWRnZXQod2lkZ2V0KX0KICAgICAgICAgICR7aW5kZXgyIDwgcmlnaHRXaWRnZXRzLmxlbmd0aCAtIDEgfHwgcmlnaHRBY3Rpb25zLmxlbmd0aCA+IDAgPyBiMmA8ZGl2IGNsYXNzPSJ3aWRnZXQtc2VwYXJhdG9yIj48L2Rpdj5gIDogIiJ9CiAgICAgICAgYCl9CgogICAgICAgIDwhLS0gUmlnaHQgYWN0aW9ucyAtLT4KICAgICAgICAke3JpZ2h0QWN0aW9ucy5tYXAoKGFjdGlvbikgPT4gdGhpcy5yZW5kZXJBY3Rpb24oYWN0aW9uKSl9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlcldpZGdldCh3aWRnZXQpIHsKICAgICAgY29uc3Qgc3RhdHVzQ2xhc3MgPSB3aWRnZXQuc3RhdHVzICYmIHdpZGdldC5zdGF0dXMgIT09ICJpZGxlIiA/IHdpZGdldC5zdGF0dXMgOiAiIjsKICAgICAgY29uc3QgaWNvbk5hbWUgPSB3aWRnZXQuaWNvbk5hbWUgPyB3aWRnZXQuaWNvbk5hbWUuc3RhcnRzV2l0aCgibHVjaWRlOiIpID8gd2lkZ2V0Lmljb25OYW1lIDogYGx1Y2lkZToke3dpZGdldC5pY29uTmFtZX1gIDogIiI7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJ3aWRnZXQgJHtzdGF0dXNDbGFzc30iCiAgICAgICAgdGl0bGU9IiR7d2lkZ2V0LnRvb2x0aXAgfHwgIiJ9IgogICAgICAgIEBjbGljaz0keygpID0+IHdpZGdldC5vbkNsaWNrPy4oKX0KICAgICAgICBAY29udGV4dG1lbnU9JHsoZTExKSA9PiB0aGlzLmhhbmRsZVdpZGdldENvbnRleHRNZW51KGUxMSwgd2lkZ2V0KX0KICAgICAgPgogICAgICAgICR7aWNvbk5hbWUgPyBiMmAKICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgLmljb249JHtpY29uTmFtZX0KICAgICAgICAgICAgaWNvblNpemU9IjEyIgogICAgICAgICAgICBjbGFzcz0iJHt3aWRnZXQubG9hZGluZyA/ICJzcGlubmluZyIgOiAiIn0iCiAgICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgICAgYCA6ICIifQogICAgICAgICR7d2lkZ2V0LmxhYmVsID8gYjJgPHNwYW4+JHt3aWRnZXQubGFiZWx9PC9zcGFuPmAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyQWN0aW9uKGFjdGlvbikgewogICAgICBjb25zdCBpY29uTmFtZSA9IGFjdGlvbi5pY29uTmFtZS5zdGFydHNXaXRoKCJsdWNpZGU6IikgPyBhY3Rpb24uaWNvbk5hbWUgOiBgbHVjaWRlOiR7YWN0aW9uLmljb25OYW1lfWA7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJhY3Rpb24tYnV0dG9uICR7YWN0aW9uLmRpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSIKICAgICAgICB0aXRsZT0iJHthY3Rpb24udG9vbHRpcCB8fCAiIn0iCiAgICAgICAgQGNsaWNrPSR7KCkgPT4gIWFjdGlvbi5kaXNhYmxlZCAmJiBhY3Rpb24ub25DbGljaz8uKCl9CiAgICAgID4KICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAuaWNvbj0ke2ljb25OYW1lfQogICAgICAgICAgaWNvblNpemU9IjEyIgogICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgaGFuZGxlV2lkZ2V0Q29udGV4dE1lbnUoZTExLCB3aWRnZXQpIHsKICAgICAgaWYgKCF3aWRnZXQuY29udGV4dE1lbnVJdGVtcyB8fCB3aWRnZXQuY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPT09IDApCiAgICAgICAgcmV0dXJuOwogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gW107CiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB3aWRnZXQuY29udGV4dE1lbnVJdGVtcykgewogICAgICAgIGlmIChpdGVtLmRpdmlkZXIpIHsKICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsCiAgICAgICAgICAgIGljb25OYW1lOiBpdGVtLmljb25OYW1lLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICBhd2FpdCBpdGVtLmFjdGlvbigpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGF3YWl0IERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhlMTEsIG1lbnVJdGVtcyk7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEFQSSBNRVRIT0RTIChpbXBsZW1lbnRzIElCb3R0b21CYXJBUEkpCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogQWRkIGEgd2lkZ2V0IHRvIHRoZSBib3R0b20gYmFyCiAgICAgKi8KICAgIGFkZFdpZGdldCh3aWRnZXQpIHsKICAgICAgdGhpcy53aWRnZXRzID0gdGhpcy53aWRnZXRzLmZpbHRlcigodzMpID0+IHczLmlkICE9PSB3aWRnZXQuaWQpOwogICAgICB0aGlzLndpZGdldHMgPSBbLi4udGhpcy53aWRnZXRzLCB3aWRnZXRdOwogICAgfQogICAgLyoqCiAgICAgKiBVcGRhdGUgYW4gZXhpc3Rpbmcgd2lkZ2V0IGJ5IElECiAgICAgKi8KICAgIHVwZGF0ZVdpZGdldChpZCwgdXBkYXRlKSB7CiAgICAgIHRoaXMud2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5tYXAoKHczKSA9PiB3My5pZCA9PT0gaWQgPyB7IC4uLnczLCAuLi51cGRhdGUgfSA6IHczKTsKICAgIH0KICAgIC8qKgogICAgICogUmVtb3ZlIGEgd2lkZ2V0IGJ5IElECiAgICAgKi8KICAgIHJlbW92ZVdpZGdldChpZCkgewogICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMuZmlsdGVyKCh3MykgPT4gdzMuaWQgIT09IGlkKTsKICAgIH0KICAgIC8qKgogICAgICogR2V0IGEgd2lkZ2V0IGJ5IElECiAgICAgKi8KICAgIGdldFdpZGdldChpZCkgewogICAgICByZXR1cm4gdGhpcy53aWRnZXRzLmZpbmQoKHczKSA9PiB3My5pZCA9PT0gaWQpOwogICAgfQogICAgLyoqCiAgICAgKiBDbGVhciBhbGwgd2lkZ2V0cwogICAgICovCiAgICBjbGVhcldpZGdldHMoKSB7CiAgICAgIHRoaXMud2lkZ2V0cyA9IFtdOwogICAgfQogICAgLyoqCiAgICAgKiBBZGQgYW4gYWN0aW9uIGJ1dHRvbgogICAgICovCiAgICBhZGRBY3Rpb24oYWN0aW9uKSB7CiAgICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuYWN0aW9ucy5maWx0ZXIoKGE1KSA9PiBhNS5pZCAhPT0gYWN0aW9uLmlkKTsKICAgICAgdGhpcy5hY3Rpb25zID0gWy4uLnRoaXMuYWN0aW9ucywgYWN0aW9uXTsKICAgIH0KICAgIC8qKgogICAgICogUmVtb3ZlIGFuIGFjdGlvbiBieSBJRAogICAgICovCiAgICByZW1vdmVBY3Rpb24oaWQpIHsKICAgICAgdGhpcy5hY3Rpb25zID0gdGhpcy5hY3Rpb25zLmZpbHRlcigoYTUpID0+IGE1LmlkICE9PSBpZCk7CiAgICB9CiAgICAvKioKICAgICAqIENsZWFyIGFsbCBhY3Rpb25zCiAgICAgKi8KICAgIGNsZWFyQWN0aW9ucygpIHsKICAgICAgdGhpcy5hY3Rpb25zID0gW107CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxMih0aGlzLCBfYWN0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczEyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQXBwdWlCb3R0b21iYXIyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1wYW5lbC9kZWVzLXBhbmVsLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNiA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tYmFja2dyb3VuZCB7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSA1JSkiKX07CiAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgIG1hcmdpbjogMzJweCAwIDE2cHggMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQogICAgICAKICAgICAgLnNlY3Rpb24tdGl0bGU6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC0zY29sIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmciAxZnI7CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBAbWVkaWEgKG1heC13aWR0aDogOTY4cHgpIHsKICAgICAgICAuZ3JpZC0zY29sIHsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1iYWNrZ3JvdW5kIj4KICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5EZWZhdWx0IFBhbmVsczwvaDI+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUGFuZWwgQ29tcG9uZW50In0gLnN1YnRpdGxlPSR7IlRoZSBkZWZhdWx0IHBhbmVsIHZhcmlhbnQgd2l0aCBzaGFkY24taW5zcGlyZWQgc3R5bGluZyJ9PgogICAgICAgIDxwPlRoZSBwYW5lbCBjb21wb25lbnQgYXV0b21hdGljYWxseSBmb2xsb3dzIHRoZSB0aGVtZSBhbmQgcHJvdmlkZXMgY29uc2lzdGVudCBzdHlsaW5nIGZvciBncm91cGVkIGNvbnRlbnQuPC9wPgogICAgICAgIDxwPkl0J3MgcGVyZmVjdCBmb3IgY3JlYXRpbmcgc2VjdGlvbnMgaW4geW91ciBhcHBsaWNhdGlvbiB3aXRoIHByb3BlciBzcGFjaW5nIGFuZCBib3JkZXJzLjwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGZWF0dXJlIE92ZXJ2aWV3In0gLnN1YnRpdGxlPSR7IktleSBjYXBhYmlsaXRpZXMifT4KICAgICAgICAgIDxwPkdyaWQgbGF5b3V0cyB3b3JrIGdyZWF0IHdpdGggcGFuZWxzIGZvciBjcmVhdGluZyBkYXNoYm9hcmRzIGFuZCBmZWF0dXJlIHNlY3Rpb25zLjwvcD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5MZWFybiBNb3JlPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgICAgCiAgICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlF1aWNrIEFjdGlvbnMifSAuc3VidGl0bGU9JHsiQ29tbW9uIHRhc2tzIn0+CiAgICAgICAgICA8cD5FYWNoIHBhbmVsIG1haW50YWlucyBjb25zaXN0ZW50IHNwYWNpbmcgYW5kIHN0eWxpbmcgYWNyb3NzIHlvdXIgYXBwbGljYXRpb24uPC9wPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkdldCBTdGFydGVkPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5QYW5lbCBWYXJpYW50czwvaDI+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRGVmYXVsdCBWYXJpYW50In0gLnZhcmlhbnQ9JHsiZGVmYXVsdCJ9PgogICAgICAgIDxwPlRoZSBkZWZhdWx0IHZhcmlhbnQgaGFzIGEgd2hpdGUgYmFja2dyb3VuZCwgc3VidGxlIGJvcmRlciwgYW5kIG1pbmltYWwgc2hhZG93LiBJdCdzIHRoZSBzdGFuZGFyZCBjaG9pY2UgZm9yIG1vc3QgY29udGVudC48L3A+CiAgICAgICAgPHA+VXNlIDxjb2RlPnZhcmlhbnQ9ImRlZmF1bHQiPC9jb2RlPiBvciBvbWl0IHRoZSB2YXJpYW50IHByb3BlcnR5LjwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ik91dGxpbmUgVmFyaWFudCJ9IC5zdWJ0aXRsZT0keyJUcmFuc3BhcmVudCBiYWNrZ3JvdW5kIHdpdGggYm9yZGVyIn0gLnZhcmlhbnQ9JHsib3V0bGluZSJ9PgogICAgICAgIDxwPlRoZSBvdXRsaW5lIHZhcmlhbnQgcmVtb3ZlcyB0aGUgYmFja2dyb3VuZCBjb2xvciBhbmQgc2hhZG93LCBrZWVwaW5nIG9ubHkgdGhlIGJvcmRlci48L3A+CiAgICAgICAgPHA+VXNlIDxjb2RlPnZhcmlhbnQ9Im91dGxpbmUiPC9jb2RlPiBmb3IgYSBsaWdodGVyIHZpc3VhbCB3ZWlnaHQuPC9wPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiR2hvc3QgVmFyaWFudCJ9IC5zdWJ0aXRsZT0keyJNaW5pbWFsIHN0eWxpbmcgZm9yIHN1YnRsZSBzZWN0aW9ucyJ9IC52YXJpYW50PSR7Imdob3N0In0+CiAgICAgICAgPHA+VGhlIGdob3N0IHZhcmlhbnQgaGFzIG5vIGJvcmRlciBvciBiYWNrZ3JvdW5kIGJ5IGRlZmF1bHQsIG9ubHkgc2hvd2luZyBhIHN1YnRsZSBiYWNrZ3JvdW5kIG9uIGhvdmVyLjwvcD4KICAgICAgICA8cD5Vc2UgPGNvZGU+dmFyaWFudD0iZ2hvc3QiPC9jb2RlPiBmb3IgdGhlIG1vc3QgbWluaW1hbCBhcHBlYXJhbmNlLjwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5QYW5lbCBTaXplczwvaDI+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJncmlkLTNjb2wiPgogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJTbWFsbCBQYW5lbCJ9IC5zaXplPSR7InNtIn0+CiAgICAgICAgICA8cD5Db21wYWN0IHBhZGRpbmcgZm9yIGRlbnNlIGxheW91dHMuPC9wPgogICAgICAgICAgPHA+VXNlIDxjb2RlPnNpemU9InNtIjwvY29kZT48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIAogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJNZWRpdW0gUGFuZWwifSAuc2l6ZT0keyJtZCJ9PgogICAgICAgICAgPHA+RGVmYXVsdCBzaXplIHdpdGggYmFsYW5jZWQgc3BhY2luZy48L3A+CiAgICAgICAgICA8cD5Vc2UgPGNvZGU+c2l6ZT0ibWQiPC9jb2RlPiBvciBvbWl0LjwvcD4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgICAgCiAgICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkxhcmdlIFBhbmVsIn0gLnNpemU9JHsibGcifT4KICAgICAgICAgIDxwPkdlbmVyb3VzIHBhZGRpbmcgZm9yIHByb21pbmVudCBzZWN0aW9ucy48L3A+CiAgICAgICAgICA8cD5Vc2UgPGNvZGU+c2l6ZT0ibGciPC9jb2RlPjwvcD4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Db21wbGV4IEV4YW1wbGVzPC9oMj4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGb3JtIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiUGFuZWxzIHdvcmsgZ3JlYXQgZm9yIG9yZ2FuaXppbmcgZm9ybSBzZWN0aW9ucyJ9PgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJQcm9qZWN0IE5hbWUifSAucmVxdWlyZWQ9JHt0cnVlfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkRlc2NyaXB0aW9uIn0gLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24gCiAgICAgICAgICAgIC5sYWJlbD0keyJDYXRlZ29yeSJ9IAogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIldlYiBEZXZlbG9wbWVudCIsIGtleTogIndlYiIgfSwKICB7IG9wdGlvbjogIk1vYmlsZSBBcHAiLCBrZXk6ICJtb2JpbGUiIH0sCiAgeyBvcHRpb246ICJEZXNrdG9wIFNvZnR3YXJlIiwga2V5OiAiZGVza3RvcCIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PkNyZWF0ZSBQcm9qZWN0PC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiTmVzdGVkIFBhbmVscyJ9IC5zdWJ0aXRsZT0keyJQYW5lbHMgY2FuIGJlIG5lc3RlZCBmb3IgaGllcmFyY2hpY2FsIG9yZ2FuaXphdGlvbiJ9PgogICAgICAgIDxwPllvdSBjYW4gbmVzdCBwYW5lbHMgdG8gY3JlYXRlIG1vcmUgY29tcGxleCBsYXlvdXRzOjwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiTmVzdGVkIFBhbmVsIDEifSAudmFyaWFudD0keyJvdXRsaW5lIn0gLnNpemU9JHsic20ifT4KICAgICAgICAgIDxwPlRoaXMgaXMgYSBuZXN0ZWQgcGFuZWwgd2l0aCBvdXRsaW5lIHZhcmlhbnQgYW5kIHNtYWxsIHNpemUuPC9wPgogICAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgICAKICAgICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiTmVzdGVkIFBhbmVsIDIifSAudmFyaWFudD0keyJnaG9zdCJ9IC5zaXplPSR7InNtIn0+CiAgICAgICAgICA8cD5UaGlzIGlzIGFub3RoZXIgbmVzdGVkIHBhbmVsIHdpdGggZ2hvc3QgdmFyaWFudC48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8aDIgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlVudGl0bGVkIFBhbmVsczwvaDI+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbD4KICAgICAgICA8cD5QYW5lbHMgd29yayBncmVhdCBldmVuIHdpdGhvdXQgYSB0aXRsZSBmb3Igc2ltcGxlIGNvbnRlbnQgZ3JvdXBpbmcuPC9wPgogICAgICAgIDxwPlRoZXkgcHJvdmlkZSB2aXN1YWwgc2VwYXJhdGlvbiBhbmQgY29uc2lzdGVudCBwYWRkaW5nIHRocm91Z2hvdXQgeW91ciBpbnRlcmZhY2UuPC9wPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJncmlkLWxheW91dCI+CiAgICAgICAgPGRlZXMtcGFuZWwgLnZhcmlhbnQ9JHsib3V0bGluZSJ9PgogICAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW4tdG9wOiAwOyI+Q3VzdG9tIENvbnRlbnQ8L2g0PgogICAgICAgICAgPHA+WW91IGNhbiBhZGQgeW91ciBvd24gaGVhZGluZ3MgYW5kIHN0cnVjdHVyZSB3aXRoaW4gdW50aXRsZWQgcGFuZWxzLjwvcD4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgICAgCiAgICAgICAgPGRlZXMtcGFuZWwgLnZhcmlhbnQ9JHsiZ2hvc3QifT4KICAgICAgICAgIDxoNCBzdHlsZT0ibWFyZ2luLXRvcDogMDsiPk1pbmltYWwgU3R5bGU8L2g0PgogICAgICAgICAgPHA+R2hvc3QgcGFuZWxzIHdpdGhvdXQgdGl0bGVzIGNyZWF0ZSB2ZXJ5IHN1YnRsZSBjb250ZW50IHNlY3Rpb25zLjwvcD4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZm9udHMuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGdlaXN0U2Fuc0ZvbnQgPSAiR2Vpc3QgU2FucyI7CnZhciBpbnRlbE9uZU1vbm9Gb250ID0gIkludGVsIE9uZSBNb25vIjsKdmFyIGdlaXN0Rm9udEZhbWlseSA9IGAnJHtnZWlzdFNhbnNGb250fScsIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ1JvYm90bycsICdPeHlnZW4nLCAnVWJ1bnR1JywgJ0NhbnRhcmVsbCcsICdGaXJhIFNhbnMnLCAnRHJvaWQgU2FucycsICdIZWx2ZXRpY2EgTmV1ZScsIHNhbnMtc2VyaWZgOwp2YXIgbW9ub0ZvbnRGYW1pbHkgPSBgJyR7aW50ZWxPbmVNb25vRm9udH0nLCAnU0YgTW9ubycsICdNb25hY28nLCAnSW5jb25zb2xhdGEnLCAnRmlyYSBDb2RlJywgJ0ZpcmEgTW9ubycsICdEcm9pZCBTYW5zIE1vbm8nLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2VgOwp2YXIgY3NzR2Vpc3RGb250RmFtaWx5ID0gcihnZWlzdEZvbnRGYW1pbHkpOwp2YXIgY3NzTW9ub0ZvbnRGYW1pbHkgPSByKG1vbm9Gb250RmFtaWx5KTsKdmFyIGNhbFNhbnNGb250ID0gIkNhbCBTYW5zIjsKdmFyIGNhbFNhbnNGb250RmFtaWx5ID0gYCcke2NhbFNhbnNGb250fScsICR7Z2Vpc3RGb250RmFtaWx5fWA7CnZhciBjc3NDYWxTYW5zRm9udEZhbWlseSA9IHIoY2FsU2Fuc0ZvbnRGYW1pbHkpOwp2YXIgcm9ib3RvU2xhYkZvbnQgPSAiUm9ib3RvIFNsYWIiOwp2YXIgcm9ib3RvU2xhYkZvbnRGYW1pbHkgPSBgJyR7cm9ib3RvU2xhYkZvbnR9JywgR2VvcmdpYSwgc2VyaWZgOwp2YXIgY3NzUm9ib3RvU2xhYkZvbnRGYW1pbHkgPSByKHJvYm90b1NsYWJGb250RmFtaWx5KTsKdmFyIGJhc2VGb250U3R5bGVzID0gcihgCiAgZm9udC1mYW1pbHk6ICR7Z2Vpc3RGb250RmFtaWx5fTsKICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwogIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2N2MTEnLCAndG51bScsICdjdjA1JyAxOwpgKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1wYW5lbC9kZWVzLXBhbmVsLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTEyID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMxMyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1BhbmVsID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1wYW5lbCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3RpdGxlX2RlY29yYXRvcnM7CiAgbGV0IF90aXRsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RpdGxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdWJ0aXRsZV9kZWNvcmF0b3JzOwogIGxldCBfc3VidGl0bGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdWJ0aXRsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFyaWFudF9kZWNvcmF0b3JzOwogIGxldCBfdmFyaWFudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhcmlhbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NpemVfZGVjb3JhdG9yczsKICBsZXQgX3NpemVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ydW5BZnRlclJlbmRlcl9kZWNvcmF0b3JzOwogIGxldCBfcnVuQWZ0ZXJSZW5kZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ydW5BZnRlclJlbmRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUGFuZWwyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdGl0bGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zdWJ0aXRsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3ZhcmlhbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfcnVuQWZ0ZXJSZW5kZXJfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfX2VzRGVjb3JhdGUxMih0aGlzLCBudWxsLCBfdGl0bGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGl0bGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRpdGxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRpdGxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50aXRsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90aXRsZV9pbml0aWFsaXplcnMsIF90aXRsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEyKHRoaXMsIG51bGwsIF9zdWJ0aXRsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzdWJ0aXRsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3VidGl0bGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3VidGl0bGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnN1YnRpdGxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N1YnRpdGxlX2luaXRpYWxpemVycywgX3N1YnRpdGxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTIodGhpcywgbnVsbCwgX3ZhcmlhbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFyaWFudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFyaWFudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YXJpYW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YXJpYW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhcmlhbnRfaW5pdGlhbGl6ZXJzLCBfdmFyaWFudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEyKHRoaXMsIG51bGwsIF9zaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaXplX2luaXRpYWxpemVycywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMih0aGlzLCBudWxsLCBfcnVuQWZ0ZXJSZW5kZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicnVuQWZ0ZXJSZW5kZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJ1bkFmdGVyUmVuZGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJ1bkFmdGVyUmVuZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ydW5BZnRlclJlbmRlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ydW5BZnRlclJlbmRlcl9pbml0aWFsaXplcnMsIF9ydW5BZnRlclJlbmRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1BhbmVsMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNjsKICAgICN0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMxMyh0aGlzLCBfdGl0bGVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgdGl0bGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRpdGxlKHZhbHVlMikgewogICAgICB0aGlzLiN0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3N1YnRpdGxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMyh0aGlzLCBfdGl0bGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczEzKHRoaXMsIF9zdWJ0aXRsZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgc3VidGl0bGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdWJ0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHN1YnRpdGxlKHZhbHVlMikgewogICAgICB0aGlzLiNzdWJ0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3ZhcmlhbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczEzKHRoaXMsIF9zdWJ0aXRsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTModGhpcywgX3ZhcmlhbnRfaW5pdGlhbGl6ZXJzLCAiZGVmYXVsdCIpKTsKICAgIGdldCB2YXJpYW50KCkgewogICAgICByZXR1cm4gdGhpcy4jdmFyaWFudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhcmlhbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhcmlhbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMyh0aGlzLCBfdmFyaWFudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTModGhpcywgX3NpemVfaW5pdGlhbGl6ZXJzLCAibWQiKSk7CiAgICBnZXQgc2l6ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaXplKHZhbHVlMikgewogICAgICB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcnVuQWZ0ZXJSZW5kZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczEzKHRoaXMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMyh0aGlzLCBfcnVuQWZ0ZXJSZW5kZXJfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBydW5BZnRlclJlbmRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3J1bkFmdGVyUmVuZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcnVuQWZ0ZXJSZW5kZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3J1bkFmdGVyUmVuZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIC8qIFZhcmlhbnQ6IGRlZmF1bHQgKi8KICAgICAgOmhvc3QoW3ZhcmlhbnQ9ImRlZmF1bHQiXSkgewogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIGhzbCgwIDAlIDAlIC8gMC4wNSk7CiAgICAgIH0KCiAgICAgIC8qIFZhcmlhbnQ6IG91dGxpbmUgKi8KICAgICAgOmhvc3QoW3ZhcmlhbnQ9Im91dGxpbmUiXSkgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFZhcmlhbnQ6IGdob3N0ICovCiAgICAgIDpob3N0KFt2YXJpYW50PSJnaG9zdCJdKSB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICBib3gtc2hhZG93OiBub25lOwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgIH0KCiAgICAgIC8qIFNpemUgdmFyaWF0aW9ucyAqLwogICAgICA6aG9zdChbc2l6ZT0ic20iXSkgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtzaXplPSJsZyJdKSB7CiAgICAgICAgcGFkZGluZzogMzJweDsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmhlYWRlcjplbXB0eSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLnRpdGxlIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQoKICAgICAgLyogVGl0bGUgc2l6ZSB2YXJpYXRpb25zICovCiAgICAgIDpob3N0KFtzaXplPSJzbSJdKSAudGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgfQoKICAgICAgOmhvc3QoW3NpemU9ImxnIl0pIC50aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICB9CgogICAgICAuc3VidGl0bGUgewogICAgICAgIG1hcmdpbjogNHB4IDAgMCAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAwNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgIH0KCiAgICAgIC8qIFN1YnRpdGxlIHNpemUgdmFyaWF0aW9ucyAqLwogICAgICA6aG9zdChbc2l6ZT0ic20iXSkgLnN1YnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtzaXplPSJsZyJdKSAuc3VidGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA4NC45JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgIH0KCiAgICAgIC8qIENvbnRlbnQgc2l6ZSB2YXJpYXRpb25zICovCiAgICAgIDpob3N0KFtzaXplPSJzbSJdKSAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICA6aG9zdChbc2l6ZT0ibGciXSkgLmNvbnRlbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgfQoKICAgICAgLyogUmVtb3ZlIG1hcmdpbnMgZnJvbSBmaXJzdCBhbmQgbGFzdCBjaGlsZHJlbiAqLwogICAgICAuY29udGVudCA6OnNsb3R0ZWQoKjpmaXJzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgIH0KCiAgICAgIC5jb250ZW50IDo6c2xvdHRlZCgqOmxhc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CgogICAgICAvKiBJbnRlcmFjdGl2ZSBzdGF0ZXMgZm9yIGRlZmF1bHQgdmFyaWFudCAqLwogICAgICA6aG9zdChbdmFyaWFudD0iZGVmYXVsdCJdOmhvdmVyKSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCBoc2woMCAwJSAwJSAvIDAuMSksIDAgMnB4IDRweCAtMnB4IGhzbCgwIDAlIDAlIC8gMC4xKTsKICAgICAgfQoKICAgICAgLyogSW50ZXJhY3RpdmUgc3RhdGVzIGZvciBvdXRsaW5lIHZhcmlhbnQgKi8KICAgICAgOmhvc3QoW3ZhcmlhbnQ9Im91dGxpbmUiXTpob3ZlcikgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk4JSkiLCAiaHNsKDAgMCUgNy44JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIEludGVyYWN0aXZlIHN0YXRlcyBmb3IgZ2hvc3QgdmFyaWFudCAqLwogICAgICA6aG9zdChbdmFyaWFudD0iZ2hvc3QiXTpob3ZlcikgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAvKiBGb2N1cyBzdGF0ZXMgKi8KICAgICAgOmhvc3QoOmZvY3VzLXdpdGhpbikgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlIC8gMC4xKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAvKiBOZXN0ZWQgcGFuZWxzIHNwYWNpbmcgKi8KICAgICAgOjpzbG90dGVkKGRlZXMtcGFuZWwpIHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICB9CgogICAgICA6OnNsb3R0ZWQoZGVlcy1wYW5lbDpmaXJzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAke3RoaXMudGl0bGUgPyBiMmA8aDMgY2xhc3M9InRpdGxlIj4ke3RoaXMudGl0bGV9PC9oMz5gIDogIiJ9CiAgICAgICAgJHt0aGlzLnN1YnRpdGxlID8gYjJgPHAgY2xhc3M9InN1YnRpdGxlIj4ke3RoaXMuc3VidGl0bGV9PC9wPmAgOiAiIn0KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBpZiAodGhpcy5ydW5BZnRlclJlbmRlcikgewogICAgICAgIGF3YWl0IHRoaXMucnVuQWZ0ZXJSZW5kZXIodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczEzKHRoaXMsIF9ydW5BZnRlclJlbmRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczEzKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzUGFuZWwyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1zdGF0c2dyaWQvZGVlcy1zdGF0c2dyaWQuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgX2EyOwp2YXIgZ2VuZXJhdGVDcHVDb3JlcyA9IChjb3VudDIpID0+IHsKICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogY291bnQyIH0sIChfNCwgaTExKSA9PiAoewogICAgaWQ6IGkxMSwKICAgIHVzYWdlOiBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDApLAogICAgbGFiZWw6IGAke2kxMX1gCiAgfSkpOwp9Owp2YXIgZGVtb0Z1bmM3ID0gKCkgPT4gewogIHJldHVybiBiMihfYTIgfHwgKF9hMiA9IF9fdGVtcGxhdGUoWyJcbiAgPGRlZXMtZGVtb3dyYXBwZXI+XG4gICAgPHN0eWxlPlxuICAgICAgIiwgJ1xuICAgIDwvc3R5bGU+XG4gICAgXG4gICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPlxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPScsICIgLnN1YnRpdGxlPSIsICI+XG4gICAgICAgIDxkZWVzLXN0YXRzZ3JpZFxuICAgICAgICAgIC50aWxlcz0iLCAiXG4gICAgICAgICAgLmdyaWRBY3Rpb25zPSIsICJcbiAgICAgICAgICAubWluVGlsZVdpZHRoPSIsICJcbiAgICAgICAgICAuZ2FwPSIsICdcbiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+XG4gICAgICAgIFxuICAgICAgICA8ZGl2IGlkPSJhY3Rpb24tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsgcGFkZGluZzogMTJweDsgYmFja2dyb3VuZDogJywgIjsgYm9yZGVyLXJhZGl1czogNnB4OyBmb250LXNpemU6IDE0cHg7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGNvbG9yOiAiLCAnOyI+XG4gICAgICAgICAgPGVtPkNsaWNrIG9uIHRpbGUgYWN0aW9ucyBvciBncmlkIGFjdGlvbnMgdG8gc2VlIHRoZSByZXN1bHQuLi48L2VtPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGVlcy1wYW5lbD5cbiAgICAgIFxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPScsICIgLnN1YnRpdGxlPSIsICI+XG4gICAgICAgIDxkZWVzLXN0YXRzZ3JpZFxuICAgICAgICAgIC50aWxlcz0iLCAiXG4gICAgICAgICAgLm1pblRpbGVXaWR0aD0iLCAiXG4gICAgICAgICAgLmdhcD0iLCAnXG4gICAgICAgID48L2RlZXMtc3RhdHNncmlkPlxuICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1jb25maWciPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy1zZWN0aW9uIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy10aXRsZSI+Q29uZmlndXJhdGlvbiBPcHRpb25zPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctZGVzY3JpcHRpb24iPlxuICAgICAgICAgICAgICBFYWNoIHRpbGUgdHlwZSBzdXBwb3J0cyBkaWZmZXJlbnQgcHJvcGVydGllczpcbiAgICAgICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW46IDhweCAwOyBwYWRkaW5nLWxlZnQ6IDIwcHg7Ij5cbiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5OdW1iZXI6PC9zdHJvbmc+IHZhbHVlLCB1bml0LCBjb2xvciwgZGVzY3JpcHRpb248L2xpPlxuICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPkdhdWdlOjwvc3Ryb25nPiB2YWx1ZSwgdW5pdCwgZ2F1Z2VPcHRpb25zIChtaW4sIG1heCwgdGhyZXNob2xkcyk8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPlBlcmNlbnRhZ2U6PC9zdHJvbmc+IHZhbHVlICgwLTEwMCksIGNvbG9yLCBkZXNjcmlwdGlvbjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+VHJlbmQ6PC9zdHJvbmc+IHZhbHVlLCB1bml0LCB0cmVuZERhdGEgYXJyYXksIGRlc2NyaXB0aW9uPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5UZXh0Ojwvc3Ryb25nPiB2YWx1ZSAoc3RyaW5nKSwgY29sb3IsIGRlc2NyaXB0aW9uPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGVlcy1wYW5lbD5cbiAgICAgIFxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPScsICIgLnN1YnRpdGxlPSIsICc+XG4gICAgICAgIDxoNCBzdHlsZT0ibWFyZ2luOiAwIDAgMTZweCAwOyBmb250LXNpemU6IDE2cHg7IGZvbnQtd2VpZ2h0OiA2MDA7Ij5Db21wYWN0IExheW91dCAoMTgwcHggdGlsZXMpPC9oND5cbiAgICAgICAgPGRlZXMtc3RhdHNncmlkXG4gICAgICAgICAgLnRpbGVzPScsICJcbiAgICAgICAgICAubWluVGlsZVdpZHRoPSIsICJcbiAgICAgICAgICAuZ2FwPSIsICdcbiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+XG4gICAgICAgIFxuICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbjogMjRweCAwIDE2cHggMDsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNjAwOyI+U3BhY2lvdXMgTGF5b3V0ICgzMjBweCB0aWxlcyk8L2g0PlxuICAgICAgICA8ZGVlcy1zdGF0c2dyaWRcbiAgICAgICAgICAudGlsZXM9JywgIlxuICAgICAgICAgIC5taW5UaWxlV2lkdGg9IiwgIlxuICAgICAgICAgIC5nYXA9IiwgIlxuICAgICAgICA+PC9kZWVzLXN0YXRzZ3JpZD5cbiAgICAgIDwvZGVlcy1wYW5lbD5cbiAgICAgIFxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSIsICIgLnN1YnRpdGxlPSIsICc+XG4gICAgICAgIDxkZWVzLXN0YXRzZ3JpZFxuICAgICAgICAgIGlkPSJjcHUtY29yZXMtZ3JpZCJcbiAgICAgICAgICAudGlsZXM9JywgIlxuICAgICAgICAgIC5ncmlkQWN0aW9ucz0iLCAiXG4gICAgICAgICAgLm1pblRpbGVXaWR0aD0iLCAiXG4gICAgICAgICAgLmdhcD0iLCAiXG4gICAgICAgID48L2RlZXMtc3RhdHNncmlkPlxuICAgICAgPC9kZWVzLXBhbmVsPlxuXG4gICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9IiwgIiAuc3VidGl0bGU9IiwgJz5cbiAgICAgICAgPGRlZXMtc3RhdHNncmlkXG4gICAgICAgICAgaWQ9ImludGVyYWN0aXZlLWdyaWQiXG4gICAgICAgICAgLnRpbGVzPScsICJcbiAgICAgICAgICAuZ3JpZEFjdGlvbnM9IiwgIlxuICAgICAgICAgIC5taW5UaWxlV2lkdGg9IiwgIlxuICAgICAgICAgIC5nYXA9IiwgIlxuICAgICAgICA+PC9kZWVzLXN0YXRzZ3JpZD5cbiAgICAgIDwvZGVlcy1wYW5lbD5cbiAgICAgIFxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSIsICIgLnN1YnRpdGxlPSIsICc+XG4gICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYmxvY2siPicsICI8L2Rpdj5cbiAgICAgIDwvZGVlcy1wYW5lbD5cblxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSIsICIgLnN1YnRpdGxlPSIsICI+XG4gICAgICAgIDxkZWVzLXN0YXRzZ3JpZFxuICAgICAgICAgIC50aWxlcz0iLCAiXG4gICAgICAgICAgLm1pblRpbGVXaWR0aD0iLCAiXG4gICAgICAgICAgLmdhcD0iLCBgCiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+CgogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtY29uZmlnIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLXRpdGxlIj5QYXJ0aXRpb24gVGlsZSBQcm9wZXJ0aWVzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy1kZXNjcmlwdGlvbiI+CiAgICAgICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW46IDhweCAwOyBwYWRkaW5nLWxlZnQ6IDIwcHg7Ij4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPnBhcnRpdGlvbkRhdGEudXNlZDo8L3N0cm9uZz4gVXNlZCBzcGFjZSBpbiBieXRlcyAoYXV0by1mb3JtYXR0ZWQpPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPnBhcnRpdGlvbkRhdGEudG90YWw6PC9zdHJvbmc+IFRvdGFsIGNhcGFjaXR5IGluIGJ5dGVzPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPnBhcnRpdGlvbkRhdGEuZmlsZXN5c3RlbTo8L3N0cm9uZz4gRmlsZXN5c3RlbSB0eXBlIChleHQ0LCB4ZnMsIG50ZnMpPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPnBhcnRpdGlvbkRhdGEubW91bnRQb2ludDo8L3N0cm9uZz4gTW91bnQgcG9pbnQgcGF0aCAob3B0aW9uYWwpPC9saT4KICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgIENvbG9yIHRocmVzaG9sZHM6IE5vcm1hbCAoJmx0Ozc1JSksIFdhcm5pbmcgKDc1LTkwJSksIENyaXRpY2FsICgmZ3Q7OTAlKQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctdGl0bGUiPkRpc2sgVGlsZSBQcm9wZXJ0aWVzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy1kZXNjcmlwdGlvbiI+CiAgICAgICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW46IDhweCAwOyBwYWRkaW5nLWxlZnQ6IDIwcHg7Ij4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPmRpc2tEYXRhLmNhcGFjaXR5Ojwvc3Ryb25nPiBUb3RhbCBjYXBhY2l0eSBpbiBieXRlczwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5kaXNrRGF0YS5tb2RlbDo8L3N0cm9uZz4gRGlzayBtb2RlbCBuYW1lIChvcHRpb25hbCk8L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+ZGlza0RhdGEudHlwZTo8L3N0cm9uZz4gRGlzayB0eXBlOiAnc3NkJywgJ2hkZCcsIG9yICdudm1lJzwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5kaXNrRGF0YS5pb3BzOjwvc3Ryb25nPiBSZWFkL3dyaXRlIElPUFMgKG9wdGlvbmFsKTwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5kaXNrRGF0YS5oZWFsdGg6PC9zdHJvbmc+IEhlYWx0aCBwZXJjZW50YWdlIDAtMTAwIChvcHRpb25hbCk8L2xpPgogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgSGVhbHRoIHRocmVzaG9sZHM6IEdvb2QgKDcwLTEwMCUpLCBXYXJuaW5nICgzMC03MCUpLCBDcml0aWNhbCAoJmx0OzMwJSkKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgICAgLy8gQ2xlYW51cCBsaXZlIHVwZGF0ZXMgb24gcGFnZSB1bmxvYWQKICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsICgpID0+IHsKICAgICAgICBpZiAoKHdpbmRvdyBhcyBhbnkpLmxpdmVVcGRhdGVJbnRlcnZhbCkgewogICAgICAgICAgY2xlYXJJbnRlcnZhbCgod2luZG93IGFzIGFueSkubGl2ZVVwZGF0ZUludGVydmFsKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgPFwvc2NyaXB0PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgXSkpLCBpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDE0MDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAudGlsZS1jb25maWcgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMzAwcHgsIDFmcikpOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbmZpZy1zZWN0aW9uIHsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29uZmlnLXRpdGxlIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbmZpZy1kZXNjcmlwdGlvbiB7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb2RlLWJsb2NrIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxMS44JSkiKX07CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICAgICAgfQogICAgICBgLCAiMS4gQ29tcHJlaGVuc2l2ZSBEYXNoYm9hcmQiLCAiRnVsbC1mZWF0dXJlZCBzdGF0cyBncmlkIHdpdGggdmFyaW91cyB0aWxlIHR5cGVzLCBhY3Rpb25zLCBhbmQgTHVjaWRlIGljb25zIiwgWwogICAgewogICAgICBpZDogInJldmVudWUiLAogICAgICB0aXRsZTogIlRvdGFsIFJldmVudWUiLAogICAgICB2YWx1ZTogMTI1NDIwLAogICAgICB1bml0OiAiJCIsCiAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICBpY29uOiAibHVjaWRlOmRvbGxhci1zaWduIiwKICAgICAgZGVzY3JpcHRpb246ICIrMTIuNSUgZnJvbSBsYXN0IG1vbnRoIiwKICAgICAgYWN0aW9uczogWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJWaWV3IERldGFpbHMiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dHJlbmRpbmctdXAiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNhY3Rpb24tb3V0cHV0Iik7CiAgICAgICAgICAgIGlmIChvdXRwdXQpIHsKICAgICAgICAgICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSAiVmlld2luZyByZXZlbnVlIGRldGFpbHM6ICQxMjUsNDIwICgrMTIuNSUpIjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkV4cG9ydCBEYXRhIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmRvd25sb2FkIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYWN0aW9uLW91dHB1dCIpOwogICAgICAgICAgICBpZiAob3V0cHV0KSB7CiAgICAgICAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gIkV4cG9ydGluZyByZXZlbnVlIGRhdGEgdG8gQ1NWLi4uIjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgaWQ6ICJ1c2VycyIsCiAgICAgIHRpdGxlOiAiQWN0aXZlIFVzZXJzIiwKICAgICAgdmFsdWU6IDM4NDcsCiAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICBpY29uOiAibHVjaWRlOnVzZXJzIiwKICAgICAgZGVzY3JpcHRpb246ICIzMjQgbmV3IHRoaXMgd2VlayIsCiAgICAgIGFjdGlvbnM6IFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiVmlldyBVc2VyIExpc3QiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6bGlzdCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FjdGlvbi1vdXRwdXQiKTsKICAgICAgICAgICAgaWYgKG91dHB1dCkgewogICAgICAgICAgICAgIG91dHB1dC50ZXh0Q29udGVudCA9ICJPcGVuaW5nIHVzZXIgbGlzdC4uLiI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAiY3B1IiwKICAgICAgdGl0bGU6ICJDUFUgVXNhZ2UiLAogICAgICB2YWx1ZTogNzMsCiAgICAgIHVuaXQ6ICIlIiwKICAgICAgdHlwZTogImdhdWdlIiwKICAgICAgaWNvbjogImx1Y2lkZTpjcHUiLAogICAgICBnYXVnZU9wdGlvbnM6IHsKICAgICAgICBtaW46IDAsCiAgICAgICAgbWF4OiAxMDAsCiAgICAgICAgdGhyZXNob2xkczogWwogICAgICAgICAgeyB2YWx1ZTogMCwgY29sb3I6ICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiB9LAogICAgICAgICAgeyB2YWx1ZTogNjAsIGNvbG9yOiAiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIiB9LAogICAgICAgICAgeyB2YWx1ZTogODAsIGNvbG9yOiAiaHNsKDAgODQuMiUgNjAuMiUpIiB9CiAgICAgICAgXQogICAgICB9CiAgICB9LAogICAgewogICAgICBpZDogInN0b3JhZ2UiLAogICAgICB0aXRsZTogIlN0b3JhZ2UgVXNlZCIsCiAgICAgIHZhbHVlOiA2NSwKICAgICAgdHlwZTogInBlcmNlbnRhZ2UiLAogICAgICBpY29uOiAibHVjaWRlOmhhcmQtZHJpdmUiLAogICAgICBkZXNjcmlwdGlvbjogIjY1MCBHQiBvZiAxIFRCIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJsYXRlbmN5IiwKICAgICAgdGl0bGU6ICJSZXNwb25zZSBUaW1lIiwKICAgICAgdmFsdWU6IDE0MiwKICAgICAgdW5pdDogIm1zIiwKICAgICAgdHlwZTogInRyZW5kIiwKICAgICAgaWNvbjogImx1Y2lkZTphY3Rpdml0eSIsCiAgICAgIHRyZW5kRGF0YTogWzE1MCwgMTQ1LCAxNDgsIDE0MiwgMTM4LCAxNDAsIDEzNSwgMTQ1LCAxNDJdLAogICAgICBkZXNjcmlwdGlvbjogIlA5NSIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAidXB0aW1lIiwKICAgICAgdGl0bGU6ICJTeXN0ZW0gVXB0aW1lIiwKICAgICAgdmFsdWU6ICI5OS45NSUiLAogICAgICB0eXBlOiAidGV4dCIsCiAgICAgIGljb246ICJsdWNpZGU6Y2hlY2stY2lyY2xlIiwKICAgICAgY29sb3I6ICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwKICAgICAgZGVzY3JpcHRpb246ICJMYXN0IDMwIGRheXMiCiAgICB9CiAgXSwgWwogICAgewogICAgICBuYW1lOiAiUmVmcmVzaCIsCiAgICAgIGljb25OYW1lOiAibHVjaWRlOnJlZnJlc2gtY3ciLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCBncmlkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZGVlcy1zdGF0c2dyaWQiKTsKICAgICAgICBpZiAoZ3JpZCkgewogICAgICAgICAgZ3JpZC5zdHlsZS5vcGFjaXR5ID0gIjAuNSI7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgZ3JpZC5zdHlsZS5vcGFjaXR5ID0gIjEiOwogICAgICAgICAgfSwgMzAwKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJFeHBvcnQiLAogICAgICBpY29uTmFtZTogImx1Y2lkZTpzaGFyZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNhY3Rpb24tb3V0cHV0Iik7CiAgICAgICAgaWYgKG91dHB1dCkgewogICAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gIkV4cG9ydGluZyBkYXNoYm9hcmQgcmVwb3J0Li4uIjsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJTZXR0aW5ncyIsCiAgICAgIGljb25OYW1lOiAibHVjaWRlOnNldHRpbmdzIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FjdGlvbi1vdXRwdXQiKTsKICAgICAgICBpZiAob3V0cHV0KSB7CiAgICAgICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSAiT3BlbmluZyBkYXNoYm9hcmQgc2V0dGluZ3MuLi4iOwogICAgICAgIH0KICAgICAgfQogICAgfQogIF0sIDI1MCwgMTYsIGNzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIiksIGNzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIiksICIyLiBUaWxlIFR5cGVzIiwgIkRpZmZlcmVudCB2aXN1YWxpemF0aW9uIHR5cGVzIGF2YWlsYWJsZSBpbiB0aGUgc3RhdHMgZ3JpZCIsIFsKICAgIHsKICAgICAgaWQ6ICJudW1iZXItZXhhbXBsZSIsCiAgICAgIHRpdGxlOiAiTnVtYmVyIFRpbGUiLAogICAgICB2YWx1ZTogNDIxOTUsCiAgICAgIHVuaXQ6ICIkIiwKICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgIGljb246ICJsdWNpZGU6aGFzaCIsCiAgICAgIGRlc2NyaXB0aW9uOiAiU2ltcGxlIG51bWVyaWMgZGlzcGxheSIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAiZ2F1Z2UtZXhhbXBsZSIsCiAgICAgIHRpdGxlOiAiR2F1Z2UgVGlsZSIsCiAgICAgIHZhbHVlOiA2OCwKICAgICAgdW5pdDogIiUiLAogICAgICB0eXBlOiAiZ2F1Z2UiLAogICAgICBpY29uOiAibHVjaWRlOmdhdWdlIiwKICAgICAgZ2F1Z2VPcHRpb25zOiB7CiAgICAgICAgbWluOiAwLAogICAgICAgIG1heDogMTAwLAogICAgICAgIHRocmVzaG9sZHM6IFsKICAgICAgICAgIHsgdmFsdWU6IDAsIGNvbG9yOiAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIgfSwKICAgICAgICAgIHsgdmFsdWU6IDUwLCBjb2xvcjogImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIgfSwKICAgICAgICAgIHsgdmFsdWU6IDgwLCBjb2xvcjogImhzbCgwIDg0LjIlIDYwLjIlKSIgfQogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgaWQ6ICJwZXJjZW50YWdlLWV4YW1wbGUiLAogICAgICB0aXRsZTogIlBlcmNlbnRhZ2UgVGlsZSIsCiAgICAgIHZhbHVlOiA3OCwKICAgICAgdHlwZTogInBlcmNlbnRhZ2UiLAogICAgICBpY29uOiAibHVjaWRlOnBlcmNlbnQiLAogICAgICBkZXNjcmlwdGlvbjogIlByb2dyZXNzIGJhciB2aXN1YWxpemF0aW9uIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJ0cmVuZC1leGFtcGxlIiwKICAgICAgdGl0bGU6ICJUcmVuZCBUaWxlIiwKICAgICAgdmFsdWU6IDg5MiwKICAgICAgdW5pdDogIm9wcy9zIiwKICAgICAgdHlwZTogInRyZW5kIiwKICAgICAgaWNvbjogImx1Y2lkZTp0cmVuZGluZy11cCIsCiAgICAgIHRyZW5kRGF0YTogWzcyMCwgNzUwLCA3ODAsIDc5NSwgODEwLCA4MzUsIDg1MCwgODY1LCA4ODAsIDg5Ml0sCiAgICAgIGRlc2NyaXB0aW9uOiAiYXZnIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJ0ZXh0LWV4YW1wbGUiLAogICAgICB0aXRsZTogIlRleHQgVGlsZSIsCiAgICAgIHZhbHVlOiAiT3BlcmF0aW9uYWwiLAogICAgICB0eXBlOiAidGV4dCIsCiAgICAgIGljb246ICJsdWNpZGU6aW5mbyIsCiAgICAgIGNvbG9yOiAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsCiAgICAgIGRlc2NyaXB0aW9uOiAiU3RhdHVzIGRpc3BsYXkiCiAgICB9CiAgXSwgMjgwLCAxNiwgIjMuIEdyaWQgQ29uZmlndXJhdGlvbnMiLCAiRGlmZmVyZW50IGxheW91dCBvcHRpb25zIGFuZCByZXNwb25zaXZlIGJlaGF2aW9yIiwgWwogICAgeyBpZDogIjEiLCB0aXRsZTogIk9yZGVycyIsIHZhbHVlOiAxNTYsIHR5cGU6ICJudW1iZXIiLCBpY29uOiAibHVjaWRlOnNob3BwaW5nLWNhcnQiIH0sCiAgICB7IGlkOiAiMiIsIHRpdGxlOiAiUmV2ZW51ZSIsIHZhbHVlOiA4NDIwLCB1bml0OiAiJCIsIHR5cGU6ICJudW1iZXIiLCBpY29uOiAibHVjaWRlOmRvbGxhci1zaWduIiB9LAogICAgeyBpZDogIjMiLCB0aXRsZTogIlVzZXJzIiwgdmFsdWU6IDQyMywgdHlwZTogIm51bWJlciIsIGljb246ICJsdWNpZGU6dXNlcnMiIH0sCiAgICB7IGlkOiAiNCIsIHRpdGxlOiAiR3Jvd3RoIiwgdmFsdWU6IDEyLjUsIHVuaXQ6ICIlIiwgdHlwZTogIm51bWJlciIsIGljb246ICJsdWNpZGU6dHJlbmRpbmctdXAiLCBjb2xvcjogImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiIH0KICBdLCAxODAsIDEyLCBbCiAgICB7CiAgICAgIGlkOiAic3BhY2lvdXMxIiwKICAgICAgdGl0bGU6ICJNb250aGx5IFJldmVudWUiLAogICAgICB2YWx1ZTogMTg0NTAwLAogICAgICB1bml0OiAiJCIsCiAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICBpY29uOiAibHVjaWRlOmNyZWRpdC1jYXJkIiwKICAgICAgZGVzY3JpcHRpb246ICJUb3RhbCByZXZlbnVlIHRoaXMgbW9udGgiCiAgICB9LAogICAgewogICAgICBpZDogInNwYWNpb3VzMiIsCiAgICAgIHRpdGxlOiAiQ3VzdG9tZXIgU2F0aXNmYWN0aW9uIiwKICAgICAgdmFsdWU6IDk0LAogICAgICB0eXBlOiAicGVyY2VudGFnZSIsCiAgICAgIGljb246ICJsdWNpZGU6c21pbGUiLAogICAgICBkZXNjcmlwdGlvbjogIkJhc2VkIG9uIDEsMjM0IHJldmlld3MiCiAgICB9LAogICAgewogICAgICBpZDogInNwYWNpb3VzMyIsCiAgICAgIHRpdGxlOiAiU2VydmVyIFJlc3BvbnNlIiwKICAgICAgdmFsdWU6IDk4LAogICAgICB1bml0OiAibXMiLAogICAgICB0eXBlOiAidHJlbmQiLAogICAgICBpY29uOiAibHVjaWRlOnNlcnZlciIsCiAgICAgIHRyZW5kRGF0YTogWzEwNSwgMTAyLCAxMDAsIDk5LCA5OCwgOTgsIDk3LCA5OF0sCiAgICAgIGRlc2NyaXB0aW9uOiAiYXZnIHJlc3BvbnNlIHRpbWUiCiAgICB9CiAgXSwgMzIwLCAyMCwgIjQuIENQVSBDb3JlcyBWaXN1YWxpemF0aW9uIiwgIlZlcnRpY2FsIGJhciB2aXN1YWxpemF0aW9uIGZvciBtdWx0aS1jb3JlIENQVSB1c2FnZSB3aXRoIGNvbHVtbiBzcGFubmluZyIsIFsKICAgIHsKICAgICAgaWQ6ICJjcHUtY29yZXMtOCIsCiAgICAgIHRpdGxlOiAiQ1BVIENvcmVzICg4LWNvcmUpIiwKICAgICAgdmFsdWU6IDAsCiAgICAgIHR5cGU6ICJjcHVDb3JlcyIsCiAgICAgIGljb246ICJsdWNpZGU6Y3B1IiwKICAgICAgY29sdW1uU3BhbjogMiwKICAgICAgY29yZXNEYXRhOiBnZW5lcmF0ZUNwdUNvcmVzKDgpLAogICAgICBkZXNjcmlwdGlvbjogIkludGVsIGk3IC0gOCBjb3JlcyIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAibWVtb3J5IiwKICAgICAgdGl0bGU6ICJNZW1vcnkgVXNhZ2UiLAogICAgICB2YWx1ZTogNjgsCiAgICAgIHR5cGU6ICJwZXJjZW50YWdlIiwKICAgICAgaWNvbjogImx1Y2lkZTpkYXRhYmFzZSIsCiAgICAgIGRlc2NyaXB0aW9uOiAiMTMuNiBHQiBvZiAyMCBHQiIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAiY3B1LWNvcmVzLTE2IiwKICAgICAgdGl0bGU6ICJDUFUgQ29yZXMgKDE2LWNvcmUpIiwKICAgICAgdmFsdWU6IDAsCiAgICAgIHR5cGU6ICJjcHVDb3JlcyIsCiAgICAgIGljb246ICJsdWNpZGU6Y3B1IiwKICAgICAgY29sdW1uU3BhbjogMiwKICAgICAgY29yZXNEYXRhOiBnZW5lcmF0ZUNwdUNvcmVzKDE2KSwKICAgICAgZGVzY3JpcHRpb246ICJBTUQgUnl6ZW4gOSAtIDE2IGNvcmVzIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJuZXR3b3JrIiwKICAgICAgdGl0bGU6ICJOZXR3b3JrIEkvTyIsCiAgICAgIHZhbHVlOiAyNDUsCiAgICAgIHVuaXQ6ICJNQi9zIiwKICAgICAgdHlwZTogInRyZW5kIiwKICAgICAgaWNvbjogImx1Y2lkZTpuZXR3b3JrIiwKICAgICAgdHJlbmREYXRhOiBbMjAwLCAyMjAsIDIzNSwgMjQwLCAyMzgsIDI0NV0sCiAgICAgIGRlc2NyaXB0aW9uOiAidGhyb3VnaHB1dCIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAiY3B1LWNvcmVzLTMyIiwKICAgICAgdGl0bGU6ICJTZXJ2ZXIgQ1BVICgzMi1jb3JlKSIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAiY3B1Q29yZXMiLAogICAgICBpY29uOiAibHVjaWRlOnNlcnZlciIsCiAgICAgIGNvbHVtblNwYW46IDMsCiAgICAgIGNvcmVzRGF0YTogZ2VuZXJhdGVDcHVDb3JlcygzMiksCiAgICAgIGRlc2NyaXB0aW9uOiAiQU1EIEVQWUMgLSAzMiBjb3JlcyIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAiZGlzayIsCiAgICAgIHRpdGxlOiAiRGlzayBVc2FnZSIsCiAgICAgIHZhbHVlOiA0MiwKICAgICAgdHlwZTogInBlcmNlbnRhZ2UiLAogICAgICBpY29uOiAibHVjaWRlOmhhcmQtZHJpdmUiLAogICAgICBkZXNjcmlwdGlvbjogIjQyMCBHQiBvZiAxIFRCIgogICAgfQogIF0sIFsKICAgIHsKICAgICAgbmFtZTogIlJhbmRvbWl6ZSIsCiAgICAgIGljb25OYW1lOiAibHVjaWRlOnNodWZmbGUiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCBncmlkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2NwdS1jb3Jlcy1ncmlkIik7CiAgICAgICAgaWYgKCFncmlkKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IHRpbGVzID0gZ3JpZC50aWxlcy5tYXAoKHRpbGUpID0+IHsKICAgICAgICAgIGlmICh0aWxlLnR5cGUgPT09ICJjcHVDb3JlcyIgJiYgdGlsZS5jb3Jlc0RhdGEpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAuLi50aWxlLAogICAgICAgICAgICAgIGNvcmVzRGF0YTogdGlsZS5jb3Jlc0RhdGEubWFwKChjb3JlMikgPT4gKHsKICAgICAgICAgICAgICAgIC4uLmNvcmUyLAogICAgICAgICAgICAgICAgdXNhZ2U6IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDEwMCkKICAgICAgICAgICAgICB9KSkKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aWxlOwogICAgICAgIH0pOwogICAgICAgIGdyaWQudGlsZXMgPSB0aWxlczsKICAgICAgfQogICAgfQogIF0sIDI1MCwgMTYsICI1LiBJbnRlcmFjdGl2ZSBGZWF0dXJlcyIsICJUaWxlcyB3aXRoIGFjdGlvbnMgYW5kIHJlYWwtdGltZSB1cGRhdGVzIiwgWwogICAgewogICAgICBpZDogImxpdmUtY3B1IiwKICAgICAgdGl0bGU6ICJMaXZlIENQVSIsCiAgICAgIHZhbHVlOiA0NSwKICAgICAgdW5pdDogIiUiLAogICAgICB0eXBlOiAiZ2F1Z2UiLAogICAgICBpY29uOiAibHVjaWRlOmNwdSIsCiAgICAgIGdhdWdlT3B0aW9uczogewogICAgICAgIG1pbjogMCwKICAgICAgICBtYXg6IDEwMCwKICAgICAgICB0aHJlc2hvbGRzOiBbCiAgICAgICAgICB7IHZhbHVlOiAwLCBjb2xvcjogImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiIH0sCiAgICAgICAgICB7IHZhbHVlOiA2MCwgY29sb3I6ICJoc2woNDUuNCA5My40JSA0Ny41JSkiIH0sCiAgICAgICAgICB7IHZhbHVlOiA4MCwgY29sb3I6ICJoc2woMCA4NC4yJSA2MC4yJSkiIH0KICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAibGl2ZS1yZXF1ZXN0cyIsCiAgICAgIHRpdGxlOiAiUmVxdWVzdHMvc2VjIiwKICAgICAgdmFsdWU6IDg5MiwKICAgICAgdHlwZTogInRyZW5kIiwKICAgICAgaWNvbjogImx1Y2lkZTphY3Rpdml0eSIsCiAgICAgIHRyZW5kRGF0YTogWzg1MCwgODYwLCA4NzAsIDg4MCwgODg1LCA4OTAsIDg5Ml0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAibGl2ZS1tZW1vcnkiLAogICAgICB0aXRsZTogIk1lbW9yeSBVc2FnZSIsCiAgICAgIHZhbHVlOiA2MiwKICAgICAgdHlwZTogInBlcmNlbnRhZ2UiLAogICAgICBpY29uOiAibHVjaWRlOmRhdGFiYXNlIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJjb3VudGVyIiwKICAgICAgdGl0bGU6ICJFdmVudCBDb3VudGVyIiwKICAgICAgdmFsdWU6IDAsCiAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICBpY29uOiAibHVjaWRlOnphcCIsCiAgICAgIGFjdGlvbnM6IFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiSW5jcmVtZW50IiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnBsdXMiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjaW50ZXJhY3RpdmUtZ3JpZCIpOwogICAgICAgICAgICBpZiAoIWdyaWQpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBjb25zdCB0aWxlID0gZ3JpZC50aWxlcy5maW5kKCh0OSkgPT4gdDkuaWQgPT09ICJjb3VudGVyIik7CiAgICAgICAgICAgIHRpbGUudmFsdWUgPSB0eXBlb2YgdGlsZS52YWx1ZSA9PT0gIm51bWJlciIgPyB0aWxlLnZhbHVlICsgMSA6IDE7CiAgICAgICAgICAgIGdyaWQudGlsZXMgPSBbLi4uZ3JpZC50aWxlc107CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiUmVzZXQiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6cm90YXRlLWNjdyIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgY29uc3QgZ3JpZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNpbnRlcmFjdGl2ZS1ncmlkIik7CiAgICAgICAgICAgIGlmICghZ3JpZCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSBncmlkLnRpbGVzLmZpbmQoKHQ5KSA9PiB0OS5pZCA9PT0gImNvdW50ZXIiKTsKICAgICAgICAgICAgdGlsZS52YWx1ZSA9IDA7CiAgICAgICAgICAgIGdyaWQudGlsZXMgPSBbLi4uZ3JpZC50aWxlc107CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdCiAgICB9CiAgXSwgWwogICAgewogICAgICBuYW1lOiAiU3RhcnQgTGl2ZSBVcGRhdGVzIiwKICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6cGxheSIsCiAgICAgIGFjdGlvbjogYXN5bmMgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKCF3aW5kb3cubGl2ZVVwZGF0ZUludGVydmFsKSB7CiAgICAgICAgICB3aW5kb3cubGl2ZVVwZGF0ZUludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgICAgICBjb25zdCBncmlkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2ludGVyYWN0aXZlLWdyaWQiKTsKICAgICAgICAgICAgaWYgKGdyaWQpIHsKICAgICAgICAgICAgICBjb25zdCB0aWxlcyA9IFsuLi5ncmlkLnRpbGVzXTsKICAgICAgICAgICAgICBjb25zdCBjcHVUaWxlID0gdGlsZXMuZmluZCgodDkpID0+IHQ5LmlkID09PSAibGl2ZS1jcHUiKTsKICAgICAgICAgICAgICBjcHVUaWxlLnZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBjcHVUaWxlLnZhbHVlICsgKE1hdGgucmFuZG9tKCkgKiAyMCAtIDEwKSkpOwogICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RzVGlsZSA9IHRpbGVzLmZpbmQoKHQ5KSA9PiB0OS5pZCA9PT0gImxpdmUtcmVxdWVzdHMiKTsKICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHJlcXVlc3RzVGlsZS52YWx1ZSArIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDUwIC0gMjUpOwogICAgICAgICAgICAgIHJlcXVlc3RzVGlsZS52YWx1ZSA9IE1hdGgubWF4KDgwMCwgbmV3VmFsdWUpOwogICAgICAgICAgICAgIHJlcXVlc3RzVGlsZS50cmVuZERhdGEgPSBbLi4ucmVxdWVzdHNUaWxlLnRyZW5kRGF0YS5zbGljZSgxKSwgcmVxdWVzdHNUaWxlLnZhbHVlXTsKICAgICAgICAgICAgICBjb25zdCBtZW1vcnlUaWxlID0gdGlsZXMuZmluZCgodDkpID0+IHQ5LmlkID09PSAibGl2ZS1tZW1vcnkiKTsKICAgICAgICAgICAgICBtZW1vcnlUaWxlLnZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBtZW1vcnlUaWxlLnZhbHVlICsgKE1hdGgucmFuZG9tKCkgKiAxMCAtIDUpKSk7CiAgICAgICAgICAgICAgZ3JpZC50aWxlcyA9IHRpbGVzOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCAxZTMpOwogICAgICAgICAgdGhpcy5uYW1lID0gIlN0b3AgTGl2ZSBVcGRhdGVzIjsKICAgICAgICAgIHRoaXMuaWNvbk5hbWUgPSAibHVjaWRlOnBhdXNlIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2xlYXJJbnRlcnZhbCh3aW5kb3cubGl2ZVVwZGF0ZUludGVydmFsKTsKICAgICAgICAgIHdpbmRvdy5saXZlVXBkYXRlSW50ZXJ2YWwgPSBudWxsOwogICAgICAgICAgdGhpcy5uYW1lID0gIlN0YXJ0IExpdmUgVXBkYXRlcyI7CiAgICAgICAgICB0aGlzLmljb25OYW1lID0gImx1Y2lkZTpwbGF5IjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICBdLCAyNTAsIDE2LCAiNi4gQ29kZSBFeGFtcGxlIiwgIkhvdyB0byBpbXBsZW1lbnQgYSBzdGF0cyBncmlkIHdpdGggVHlwZVNjcmlwdCIsIGBjb25zdCB0aWxlczogSVN0YXRzVGlsZVtdID0gWwogIHsKICAgIGlkOiAncmV2ZW51ZScsCiAgICB0aXRsZTogJ1RvdGFsIFJldmVudWUnLAogICAgdmFsdWU6IDEyNTQyMCwKICAgIHVuaXQ6ICckJywKICAgIHR5cGU6ICdudW1iZXInLAogICAgaWNvbjogJ2x1Y2lkZTpkb2xsYXItc2lnbicsCiAgICBkZXNjcmlwdGlvbjogJysxMi41JSBmcm9tIGxhc3QgbW9udGgnLAogICAgYWN0aW9uczogWwogICAgICB7CiAgICAgICAgbmFtZTogJ1ZpZXcgRGV0YWlscycsCiAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6dHJlbmRpbmctdXAnLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgY29uc29sZS5sb2coJ1ZpZXcgcmV2ZW51ZSBkZXRhaWxzJyk7CiAgICAgICAgfQogICAgICB9CiAgICBdCiAgfSwKICB7CiAgICBpZDogJ2NwdScsCiAgICB0aXRsZTogJ0NQVSBVc2FnZScsCiAgICB2YWx1ZTogNzMsCiAgICB1bml0OiAnJScsCiAgICB0eXBlOiAnZ2F1Z2UnLAogICAgaWNvbjogJ2x1Y2lkZTpjcHUnLAogICAgZ2F1Z2VPcHRpb25zOiB7CiAgICAgIG1pbjogMCwKICAgICAgbWF4OiAxMDAsCiAgICAgIHRocmVzaG9sZHM6IFsKICAgICAgICB7IHZhbHVlOiAwLCBjb2xvcjogJ2hzbCgxNDIuMSA3Ni4yJSAzNi4zJSknIH0sCiAgICAgICAgeyB2YWx1ZTogNjAsIGNvbG9yOiAnaHNsKDQ1LjQgOTMuNCUgNDcuNSUpJyB9LAogICAgICAgIHsgdmFsdWU6IDgwLCBjb2xvcjogJ2hzbCgwIDg0LjIlIDYwLjIlKScgfQogICAgICBdCiAgICB9CiAgfQpdOwoKLy8gUmVuZGVyIHRoZSBzdGF0cyBncmlkCmh0bWxcYAogIDxkZWVzLXN0YXRzZ3JpZAogICAgLnRpbGVzPVwke3RpbGVzfQogICAgLm1pblRpbGVXaWR0aD1cJHsyNTB9CiAgICAuZ2FwPVwkezE2fQogICAgLmdyaWRBY3Rpb25zPVwke1sKICAgICAgewogICAgICAgIG5hbWU6ICdSZWZyZXNoJywKICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpyZWZyZXNoLWN3JywKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCdSZWZyZXNoJykKICAgICAgfQogICAgXX0KICA+PC9kZWVzLXN0YXRzZ3JpZD4KXGA7YCwgIjcuIERpc2sgJiBTdG9yYWdlIFRpbGVzIiwgIlBhcnRpdGlvbiBhbmQgcGh5c2ljYWwgZGlzayB2aXN1YWxpemF0aW9uIHRpbGVzIiwgWwogICAgewogICAgICBpZDogInJvb3QtcGFydGl0aW9uIiwKICAgICAgdGl0bGU6ICJSb290IFBhcnRpdGlvbiIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAicGFydGl0aW9uIiwKICAgICAgaWNvbjogImx1Y2lkZTpmb2xkZXItcm9vdCIsCiAgICAgIHBhcnRpdGlvbkRhdGE6IHsKICAgICAgICB1c2VkOiA2OTgzNDE0MjUxNTIsCiAgICAgICAgLy8gfjY1MCBHQgogICAgICAgIHRvdGFsOiAxMDczNzQxODI0ZTMsCiAgICAgICAgLy8gfjEgVEIKICAgICAgICBmaWxlc3lzdGVtOiAiZXh0NCIsCiAgICAgICAgbW91bnRQb2ludDogIi8iCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAiaG9tZS1wYXJ0aXRpb24iLAogICAgICB0aXRsZTogIkhvbWUgUGFydGl0aW9uIiwKICAgICAgdmFsdWU6IDAsCiAgICAgIHR5cGU6ICJwYXJ0aXRpb24iLAogICAgICBpY29uOiAibHVjaWRlOmhvbWUiLAogICAgICBwYXJ0aXRpb25EYXRhOiB7CiAgICAgICAgdXNlZDogMjE0NzQ4MzY0ODAwLAogICAgICAgIC8vIH4yMDAgR0IKICAgICAgICB0b3RhbDogNTM2ODcwOTEyZTMsCiAgICAgICAgLy8gfjUwMCBHQgogICAgICAgIGZpbGVzeXN0ZW06ICJleHQ0IiwKICAgICAgICBtb3VudFBvaW50OiAiL2hvbWUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAiZGF0YS1wYXJ0aXRpb24iLAogICAgICB0aXRsZTogIkRhdGEgUGFydGl0aW9uIiwKICAgICAgdmFsdWU6IDAsCiAgICAgIHR5cGU6ICJwYXJ0aXRpb24iLAogICAgICBpY29uOiAibHVjaWRlOmRhdGFiYXNlIiwKICAgICAgcGFydGl0aW9uRGF0YTogewogICAgICAgIHVzZWQ6IDE5MzI3MzUyODMyMDAsCiAgICAgICAgLy8gfjEuOCBUQiAoOTAlIC0gY3JpdGljYWwpCiAgICAgICAgdG90YWw6IDIxNDc0ODM2NDhlMywKICAgICAgICAvLyB+MiBUQgogICAgICAgIGZpbGVzeXN0ZW06ICJ4ZnMiLAogICAgICAgIG1vdW50UG9pbnQ6ICIvZGF0YSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgaWQ6ICJudm1lLXNzZCIsCiAgICAgIHRpdGxlOiAiUHJpbWFyeSBOVk1lIiwKICAgICAgdmFsdWU6IDAsCiAgICAgIHR5cGU6ICJkaXNrIiwKICAgICAgaWNvbjogImx1Y2lkZTpoYXJkLWRyaXZlIiwKICAgICAgY29sdW1uU3BhbjogMiwKICAgICAgZGlza0RhdGE6IHsKICAgICAgICBjYXBhY2l0eTogMmUxMiwKICAgICAgICAvLyAyIFRCCiAgICAgICAgbW9kZWw6ICJTYW1zdW5nIDk5MCBQcm8iLAogICAgICAgIHR5cGU6ICJudm1lIiwKICAgICAgICBpb3BzOiB7CiAgICAgICAgICByZWFkOiA3NDUwLAogICAgICAgICAgd3JpdGU6IDY5MDAKICAgICAgICB9LAogICAgICAgIGhlYWx0aDogOTgKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgaWQ6ICJzYXRhLXNzZCIsCiAgICAgIHRpdGxlOiAiU2Vjb25kYXJ5IFNTRCIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAiZGlzayIsCiAgICAgIGljb246ICJsdWNpZGU6aGFyZC1kcml2ZSIsCiAgICAgIGRpc2tEYXRhOiB7CiAgICAgICAgY2FwYWNpdHk6IDFlMTIsCiAgICAgICAgLy8gMSBUQgogICAgICAgIG1vZGVsOiAiQ3J1Y2lhbCBNWDUwMCIsCiAgICAgICAgdHlwZTogInNzZCIsCiAgICAgICAgaW9wczogewogICAgICAgICAgcmVhZDogNTYwLAogICAgICAgICAgd3JpdGU6IDUxMAogICAgICAgIH0sCiAgICAgICAgaGVhbHRoOiA4NQogICAgICB9CiAgICB9LAogICAgewogICAgICBpZDogImhkZC1zdG9yYWdlIiwKICAgICAgdGl0bGU6ICJCYWNrdXAgSEREIiwKICAgICAgdmFsdWU6IDAsCiAgICAgIHR5cGU6ICJkaXNrIiwKICAgICAgaWNvbjogImx1Y2lkZTphcmNoaXZlIiwKICAgICAgZGlza0RhdGE6IHsKICAgICAgICBjYXBhY2l0eTogOGUxMiwKICAgICAgICAvLyA4IFRCCiAgICAgICAgbW9kZWw6ICJTZWFnYXRlIElyb25Xb2xmIiwKICAgICAgICB0eXBlOiAiaGRkIiwKICAgICAgICBpb3BzOiB7CiAgICAgICAgICByZWFkOiAyMTAsCiAgICAgICAgICB3cml0ZTogMTk1CiAgICAgICAgfSwKICAgICAgICBoZWFsdGg6IDQyCiAgICAgIH0KICAgIH0KICBdLCAyODAsIDE2KTsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWJhc2UvZGVlcy1pbnB1dC1iYXNlLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CnZhciBfX2VzRGVjb3JhdGUxMyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMTQgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNJbnB1dEJhc2UgPSAoKCkgPT4gewogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbGF5b3V0TW9kZV9kZWNvcmF0b3JzOwogIGxldCBfbGF5b3V0TW9kZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xheW91dE1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsUG9zaXRpb25fZGVjb3JhdG9yczsKICBsZXQgX2xhYmVsUG9zaXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYWJlbFBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9rZXlfZGVjb3JhdG9yczsKICBsZXQgX2tleV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2tleV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFiZWxfZGVjb3JhdG9yczsKICBsZXQgX2xhYmVsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3JlcXVpcmVkX2RlY29yYXRvcnM7CiAgbGV0IF9yZXF1aXJlZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3JlcXVpcmVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9kZWNvcmF0b3JzOwogIGxldCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGVzY3JpcHRpb25fZGVjb3JhdG9yczsKICBsZXQgX2Rlc2NyaXB0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGVzY3JpcHRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICByZXR1cm4gY2xhc3MgRGVlc0lucHV0QmFzZSBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbGF5b3V0TW9kZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2xhYmVsUG9zaXRpb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9rZXlfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9sYWJlbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3JlcXVpcmVkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2Rpc2FibGVkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2Rlc2NyaXB0aW9uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfX2VzRGVjb3JhdGUxMyh0aGlzLCBudWxsLCBfbGF5b3V0TW9kZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsYXlvdXRNb2RlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYXlvdXRNb2RlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxheW91dE1vZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxheW91dE1vZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGF5b3V0TW9kZV9pbml0aWFsaXplcnMsIF9sYXlvdXRNb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTModGhpcywgbnVsbCwgX2xhYmVsUG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFiZWxQb3NpdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGFiZWxQb3NpdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYWJlbFBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sYWJlbFBvc2l0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhYmVsUG9zaXRpb25faW5pdGlhbGl6ZXJzLCBfbGFiZWxQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEzKHRoaXMsIG51bGwsIF9rZXlfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAia2V5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJrZXkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoua2V5LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5rZXkgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfa2V5X2luaXRpYWxpemVycywgX2tleV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEzKHRoaXMsIG51bGwsIF9sYWJlbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsYWJlbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGFiZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGFiZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxhYmVsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhYmVsX2luaXRpYWxpemVycywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTModGhpcywgbnVsbCwgX3JlcXVpcmVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJlcXVpcmVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZXF1aXJlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZXF1aXJlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucmVxdWlyZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzLCBfcmVxdWlyZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMyh0aGlzLCBudWxsLCBfZGlzYWJsZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlzYWJsZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc2FibGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXNhYmxlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEzKHRoaXMsIG51bGwsIF9kZXNjcmlwdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkZXNjcmlwdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZGVzY3JpcHRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGVzY3JpcHRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRlc2NyaXB0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Rlc2NyaXB0aW9uX2luaXRpYWxpemVycywgX2Rlc2NyaXB0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgI2xheW91dE1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2xheW91dE1vZGVfaW5pdGlhbGl6ZXJzLCAiYXV0byIpOwogICAgLyoqCiAgICAgKiBMYXlvdXQgbW9kZSBmb3IgdGhlIGlucHV0IGNvbXBvbmVudAogICAgICogLSB2ZXJ0aWNhbDogVHJhZGl0aW9uYWwgZm9ybSBsYXlvdXQgKGxhYmVsIG9uIHRvcCkKICAgICAqIC0gaG9yaXpvbnRhbDogSW5saW5lIGxheW91dCAobGFiZWwgcG9zaXRpb24gY29uZmlndXJhYmxlKQogICAgICogLSBhdXRvOiBEZXRlY3QgZnJvbSBwYXJlbnQgY29udGV4dAogICAgICovCiAgICBnZXQgbGF5b3V0TW9kZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xheW91dE1vZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYXlvdXRNb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNsYXlvdXRNb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbGFiZWxQb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2xheW91dE1vZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9sYWJlbFBvc2l0aW9uX2luaXRpYWxpemVycywgInRvcCIpKTsKICAgIC8qKgogICAgICogUG9zaXRpb24gb2YgdGhlIGxhYmVsIHJlbGF0aXZlIHRvIHRoZSBpbnB1dAogICAgICovCiAgICBnZXQgbGFiZWxQb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xhYmVsUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYWJlbFBvc2l0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNsYWJlbFBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAja2V5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfbGFiZWxQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2tleV9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgLyoqCiAgICAgKiBDb21tb24gcHJvcGVydGllcyBmb3IgYWxsIGlucHV0cwogICAgICovCiAgICBnZXQga2V5KCkgewogICAgICByZXR1cm4gdGhpcy4ja2V5X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQga2V5KHZhbHVlMikgewogICAgICB0aGlzLiNrZXlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2tleV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2xhYmVsX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgbGFiZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxhYmVsKHZhbHVlMikgewogICAgICB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3JlcXVpcmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9yZXF1aXJlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgcmVxdWlyZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJlcXVpcmVkKHZhbHVlMikgewogICAgICB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfcmVxdWlyZWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgZGlzYWJsZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkaXNhYmxlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRpc2FibGVkKHZhbHVlMikgewogICAgICB0aGlzLiNkaXNhYmxlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rlc2NyaXB0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfZGlzYWJsZWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9kZXNjcmlwdGlvbl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IGRlc2NyaXB0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jZGVzY3JpcHRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkZXNjcmlwdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jZGVzY3JpcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8qKgogICAgICogQ29tbW9uIHN0eWxlcyBmb3IgYWxsIGlucHV0IGNvbXBvbmVudHMKICAgICAqLwogICAgc3RhdGljIGdldCBiYXNlU3R5bGVzKCkgewogICAgICByZXR1cm4gWwogICAgICAgIGlgCiAgICAgICAgLyogQ1NTIFZhcmlhYmxlcyBmb3IgY29uc2lzdGVudCBzcGFjaW5nICovCiAgICAgICAgOmhvc3QgewogICAgICAgICAgLS1kZWVzLWlucHV0LXNwYWNpbmctdW5pdDogOHB4OwogICAgICAgICAgLS1kZWVzLWlucHV0LXZlcnRpY2FsLWdhcDogY2FsYyh2YXIoLS1kZWVzLWlucHV0LXNwYWNpbmctdW5pdCkgKiAyKTsgLyogMTZweCAqLwogICAgICAgICAgLS1kZWVzLWlucHV0LWhvcml6b250YWwtZ2FwOiBjYWxjKHZhcigtLWRlZXMtaW5wdXQtc3BhY2luZy11bml0KSAqIDIpOyAvKiAxNnB4ICovCiAgICAgICAgICAtLWRlZXMtaW5wdXQtbGFiZWwtZ2FwOiB2YXIoLS1kZWVzLWlucHV0LXNwYWNpbmctdW5pdCk7IC8qIDhweCAqLwogICAgICAgIH0KCiAgICAgICAgLyogRGVmYXVsdCB2ZXJ0aWNhbCBzdGFja2luZyBtb2RlIChmb3IgZm9ybXMpICovCiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1kZWVzLWlucHV0LXZlcnRpY2FsLWdhcCk7CiAgICAgICAgfQoKICAgICAgICAvKiBMYXN0IGNoaWxkIGluIGNvbnRhaW5lciBzaG91bGQgaGF2ZSBubyBib3R0b20gbWFyZ2luICovCiAgICAgICAgOmhvc3QoOmxhc3QtY2hpbGQpIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgfQoKICAgICAgICAvKiBIb3Jpem9udGFsIGxheW91dCBtb2RlIC0gYWN0aXZhdGVkIGJ5IGF0dHJpYnV0ZSAqLwogICAgICAgIDpob3N0KFtsYXlvdXQtbW9kZT0iaG9yaXpvbnRhbCJdKSB7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLWRlZXMtaW5wdXQtaG9yaXpvbnRhbC1nYXApOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtsYXlvdXQtbW9kZT0iaG9yaXpvbnRhbCJdOmxhc3QtY2hpbGQpIHsKICAgICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgICAgICB9CgogICAgICAgIC8qIEF1dG8gbW9kZSAtIGluaGVyaXQgZnJvbSBwYXJlbnQgZGVlcy1mb3JtIGlmIHByZXNlbnQgKi8KCiAgICAgICAgLyogTGFiZWwgcG9zaXRpb24gdmFyaWF0aW9ucyAqLwogICAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0ibGVmdCJdKSAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIDFmcjsKICAgICAgICAgIGdhcDogdmFyKC0tZGVlcy1pbnB1dC1sYWJlbC1nYXApOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0icmlnaHQiXSkgLmlucHV0LXdyYXBwZXIgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIGF1dG87CiAgICAgICAgICBnYXA6IHZhcigtLWRlZXMtaW5wdXQtbGFiZWwtZ2FwKTsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249InRvcCJdKSAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0ibm9uZSJdKSBkZWVzLWxhYmVsIHsKICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgfQogICAgICBgCiAgICAgIF07CiAgICB9CiAgICAvKioKICAgICAqIFN1YmplY3QgZm9yIHZhbHVlIGNoYW5nZXMgdGhhdCBhbGwgaW5wdXRzIHNob3VsZCBpbXBsZW1lbnQKICAgICAqLwogICAgY2hhbmdlU3ViamVjdCA9IChfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9kZXNjcmlwdGlvbl9leHRyYUluaXRpYWxpemVycyksIG5ldyBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRyeC5yeGpzLlN1YmplY3QoKSk7CiAgICAvKioKICAgICAqIENhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGNvbm5lY3RlZCB0byB0aGUgRE9NCiAgICAgKiBTZXRzIHVwIGxheW91dCBtb2RlIGRldGVjdGlvbgogICAgICovCiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy5kZXRlY3RMYXlvdXRNb2RlKCk7CiAgICB9CiAgICAvKioKICAgICAqIERldGVjdHMgdGhlIGFwcHJvcHJpYXRlIGxheW91dCBtb2RlIGJhc2VkIG9uIHBhcmVudCBjb250ZXh0CiAgICAgKi8KICAgIGRldGVjdExheW91dE1vZGUoKSB7CiAgICAgIGlmICh0aGlzLmxheW91dE1vZGUgIT09ICJhdXRvIikgewogICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJsYXlvdXQtbW9kZSIsIHRoaXMubGF5b3V0TW9kZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHBhcmVudEZvcm0gPSB0aGlzLmNsb3Nlc3QoImRlZXMtZm9ybSIpOwogICAgICBpZiAocGFyZW50Rm9ybSAmJiBwYXJlbnRGb3JtLmhhc0F0dHJpYnV0ZSgiaG9yaXpvbnRhbC1sYXlvdXQiKSkgewogICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJsYXlvdXQtbW9kZSIsICJob3Jpem9udGFsIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoImxheW91dC1tb2RlIiwgInZlcnRpY2FsIik7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogVXBkYXRlcyB0aGUgbGF5b3V0IG1vZGUgYXR0cmlidXRlIHdoZW4gcHJvcGVydHkgY2hhbmdlcwogICAgICovCiAgICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJsYXlvdXRNb2RlIikpIHsKICAgICAgICB0aGlzLmRldGVjdExheW91dE1vZGUoKTsKICAgICAgfQogICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJsYWJlbFBvc2l0aW9uIikpIHsKICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgibGFiZWwtcG9zaXRpb24iLCB0aGlzLmxhYmVsUG9zaXRpb24pOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFN0YW5kYXJkIG1ldGhvZCBmb3IgZnJlZXppbmcgaW5wdXQgKGRpc2FibGluZykKICAgICAqLwogICAgYXN5bmMgZnJlZXplKCkgewogICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTsKICAgIH0KICAgIC8qKgogICAgICogU3RhbmRhcmQgbWV0aG9kIGZvciB1bmZyZWV6aW5nIGlucHV0IChlbmFibGluZykKICAgICAqLwogICAgYXN5bmMgdW5mcmVlemUoKSB7CiAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTsKICAgIH0KICB9Owp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtY2hlY2tib3gvZGVlcy1pbnB1dC1jaGVja2JveC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzggPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGNoZWNrYm94ZXMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtY2hlY2tib3giKTsKICBjb25zdCBzZWxlY3RBbGxCdG4gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNzZWxlY3QtYWxsLWJ0biIpOwogIGNvbnN0IGNsZWFyQWxsQnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjY2xlYXItYWxsLWJ0biIpOwogIGlmIChzZWxlY3RBbGxCdG4gJiYgY2xlYXJBbGxCdG4pIHsKICAgIHNlbGVjdEFsbEJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgY2hlY2tib3hlcy5mb3JFYWNoKChjaGVja2JveCkgPT4gewogICAgICAgIGlmICghY2hlY2tib3guZGlzYWJsZWQgJiYgY2hlY2tib3gua2V5Py5zdGFydHNXaXRoKCJmZWF0dXJlIikpIHsKICAgICAgICAgIGNoZWNrYm94LnZhbHVlID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgICBjbGVhckFsbEJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgY2hlY2tib3hlcy5mb3JFYWNoKChjaGVja2JveCkgPT4gewogICAgICAgIGlmICghY2hlY2tib3guZGlzYWJsZWQgJiYgY2hlY2tib3gua2V5Py5zdGFydHNXaXRoKCJmZWF0dXJlIikpIHsKICAgICAgICAgIGNoZWNrYm94LnZhbHVlID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0KfX0+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNoZWNrYm94LWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaG9yaXpvbnRhbC1jaGVja2JveGVzIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5pbnRlcmFjdGl2ZS1zZWN0aW9uIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm91dHB1dC10ZXh0IHsKICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwgImhzbCgyMTAgNDAlIDgwJSkiKX07CiAgICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTglKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIG1pbi1oZWlnaHQ6IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5mb3JtLXNlY3Rpb24gewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCAiaHNsKDAgMCUgNyUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmJ1dHRvbi1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZmVhdHVyZS1saXN0IHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxMS44JSkiKX07CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgQ2hlY2tib3hlcyJ9IC5zdWJ0aXRsZT0keyJTaW1wbGUgY2hlY2tib3ggZXhhbXBsZXMgd2l0aCB2YXJpb3VzIGxhYmVscyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiSSBhZ3JlZSB0byB0aGUgVGVybXMgYW5kIENvbmRpdGlvbnMifSAKICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgLmtleT0keyJ0ZXJtcyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IlN1YnNjcmliZSB0byBuZXdzbGV0dGVyIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAua2V5PSR7Im5ld3NsZXR0ZXIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJFbmFibGUgbm90aWZpY2F0aW9ucyJ9IAogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlJlY2VpdmUgZW1haWwgdXBkYXRlcyBhYm91dCB5b3VyIGFjY291bnQifQogICAgICAgICAgICAua2V5PSR7Im5vdGlmaWNhdGlvbnMifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkNoZWNrYm94IFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgY2hlY2tib3ggc3RhdGVzIGFuZCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiRGVmYXVsdCBzdGF0ZSJ9IAogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiQ2hlY2tlZCBzdGF0ZSJ9IAogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCB1bmNoZWNrZWQifSAKICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIGNoZWNrZWQifSAKICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiUmVxdWlyZWQgY2hlY2tib3gifSAKICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgLmtleT0keyJyZXF1aXJlZCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiSG9yaXpvbnRhbCBMYXlvdXQifSAuc3VidGl0bGU9JHsiQ2hlY2tib3hlcyBhcnJhbmdlZCBob3Jpem9udGFsbHkgZm9yIGNvbXBhY3QgZm9ybXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWNoZWNrYm94ZXMiPgogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJPcHRpb24gQSJ9IAogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5rZXk9JHsib3B0aW9uQSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7Ik9wdGlvbiBCIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAua2V5PSR7Im9wdGlvbkIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJPcHRpb24gQyJ9IAogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5rZXk9JHsib3B0aW9uQyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7Ik9wdGlvbiBEIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAua2V5PSR7Im9wdGlvbkQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkZlYXR1cmUgU2VsZWN0aW9uIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiQ29tbW9uIHVzZSBjYXNlIGZvciBmZWF0dXJlIHRvZ2dsZXMgd2l0aCBiYXRjaCBvcGVyYXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBpZD0ic2VsZWN0LWFsbC1idG4iIHR5cGU9InNlY29uZGFyeSI+U2VsZWN0IEFsbDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gaWQ9ImNsZWFyLWFsbC1idG4iIHR5cGU9InNlY29uZGFyeSI+Q2xlYXIgQWxsPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWxpc3QiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtZ3JvdXAiPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiRGFyayBNb2RlIFN1cHBvcnQifSAKICAgICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAgIC5rZXk9JHsiZmVhdHVyZTEifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkVtYWlsIE5vdGlmaWNhdGlvbnMifSAKICAgICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAgIC5rZXk9JHsiZmVhdHVyZTIifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7IlR3by1GYWN0b3IgQXV0aGVudGljYXRpb24ifSAKICAgICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgICAua2V5PSR7ImZlYXR1cmUzIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJBUEkgQWNjZXNzIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgICAua2V5PSR7ImZlYXR1cmU0In0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJBZHZhbmNlZCBBbmFseXRpY3MifSAKICAgICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgICAua2V5PSR7ImZlYXR1cmU1In0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUHJpdmFjeSBTZXR0aW5ncyBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IkNoZWNrYm94ZXMgaW4gYSB0eXBpY2FsIGZvcm0gY29udGV4dCJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tc2VjdGlvbiI+CiAgICAgICAgICA8aDQgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlByaXZhY3kgUHJlZmVyZW5jZXM8L2g0PgogICAgICAgICAgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveC1ncm91cCI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJTaGFyZSBhbmFseXRpY3MgZGF0YSJ9IAogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkhlbHAgdXMgaW1wcm92ZSBieSBzaGFyaW5nIGFub255bW91cyB1c2FnZSBkYXRhIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJQZXJzb25hbGl6ZWQgcmVjb21tZW5kYXRpb25zIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiR2V0IHN1Z2dlc3Rpb25zIGJhc2VkIG9uIHlvdXIgYWN0aXZpdHkifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7Ik1hcmtldGluZyBjb21tdW5pY2F0aW9ucyJ9IAogICAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJSZWNlaXZlIHByb21vdGlvbmFsIGVtYWlscyBhbmQgc3BlY2lhbCBvZmZlcnMifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7IlRoaXJkLXBhcnR5IGludGVncmF0aW9ucyJ9IAogICAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBbGxvdyBhcHByb3ZlZCBwYXJ0bmVycyB0byBhY2Nlc3MgeW91ciBkYXRhIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiSW50ZXJhY3RpdmUgRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJDbGljayBjaGVja2JveGVzIHRvIHNlZSB2YWx1ZSBjaGFuZ2VzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJGZWF0dXJlIHRvZ2dsZSJ9IAogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgQGNoYW5nZVN1YmplY3Q9JHsoZXZlbnQpID0+IHsKICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjY2hlY2tib3gtb3V0cHV0Iik7CiAgaWYgKG91dHB1dCAmJiBldmVudC5kZXRhaWwpIHsKICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGV2ZW50LmRldGFpbC5nZXRWYWx1ZSgpOwogICAgb3V0cHV0LnRleHRDb250ZW50ID0gYEZlYXR1cmUgaXMgJHtpc0NoZWNrZWQgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQifWA7CiAgfQp9fQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJEZWJ1ZyBtb2RlIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICBAY2hhbmdlU3ViamVjdD0keyhldmVudCkgPT4gewogIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNkZWJ1Zy1vdXRwdXQiKTsKICBpZiAob3V0cHV0ICYmIGV2ZW50LmRldGFpbCkgewogICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQuZGV0YWlsLmdldFZhbHVlKCk7CiAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBgRGVidWcgbW9kZTogJHtpc0NoZWNrZWQgPyAiT04iIDogIk9GRiJ9YDsKICB9Cn19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImludGVyYWN0aXZlLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBpZD0iY2hlY2tib3gtb3V0cHV0IiBjbGFzcz0ib3V0cHV0LXRleHQiPkZlYXR1cmUgaXMgZGlzYWJsZWQ8L2Rpdj4KICAgICAgICAgIDxkaXYgaWQ9ImRlYnVnLW91dHB1dCIgY2xhc3M9Im91dHB1dC10ZXh0IiBzdHlsZT0ibWFyZ2luLXRvcDogOHB4OyI+RGVidWcgbW9kZTogT0ZGPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWNoZWNrYm94L2RlZXMtaW5wdXQtY2hlY2tib3guanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMTQgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczE1ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRDaGVja2JveCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtY2hlY2tib3giKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX3ZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF92YWx1ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbmRldGVybWluYXRlX2RlY29yYXRvcnM7CiAgbGV0IF9pbmRldGVybWluYXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5kZXRlcm1pbmF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXRDaGVja2JveDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuCiAgICAgIH0pXTsKICAgICAgX2luZGV0ZXJtaW5hdGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGUxNCh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE0KHRoaXMsIG51bGwsIF9pbmRldGVybWluYXRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImluZGV0ZXJtaW5hdGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImluZGV0ZXJtaW5hdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5kZXRlcm1pbmF0ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaW5kZXRlcm1pbmF0ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbmRldGVybWluYXRlX2luaXRpYWxpemVycywgX2luZGV0ZXJtaW5hdGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dENoZWNrYm94MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM4OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMTUodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCB2YWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaW5kZXRlcm1pbmF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTUodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNSh0aGlzLCBfaW5kZXRlcm1pbmF0ZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaW5kZXRlcm1pbmF0ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2luZGV0ZXJtaW5hdGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpbmRldGVybWluYXRlKHZhbHVlMikgewogICAgICB0aGlzLiNpbmRldGVybWluYXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxNSh0aGlzLCBfaW5kZXRlcm1pbmF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIHRoaXMubGFiZWxQb3NpdGlvbiA9ICJyaWdodCI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgICAgKiB7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIH0KCiAgICAgICAgOmhvc3QgewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzR2Vpc3RGb250RmFtaWx5fTsKICAgICAgICB9CgogICAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tib3ggewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxcHg7CiAgICAgICAgfQoKICAgICAgICAubWFpbmNvbnRhaW5lcjpob3ZlciAuY2hlY2tib3ggewogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jaGVja2JveC5zZWxlY3RlZCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIH0KCiAgICAgICAgLmNoZWNrYm94OmZvY3VzLXZpc2libGUgewogICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlIC8gMC4xKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICAgIH0KCiAgICAgICAgLyogQ2hlY2ttYXJrIHVzaW5nIEx1Y2lkZSBpY29uIHN0eWxlICovCiAgICAgICAgLmNoZWNrYm94IC5jaGVja21hcmsgewogICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2U7CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tib3guc2VsZWN0ZWQgLmNoZWNrbWFyayB7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIH0KCiAgICAgICAgLmNoZWNrYm94IC5jaGVja21hcmsgc3ZnIHsKICAgICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgICAgICB9CgogICAgICAgIC8qIERpc2FibGVkIHN0YXRlICovCiAgICAgICAgLm1haW5jb250YWluZXIuZGlzYWJsZWQgewogICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICB9CgogICAgICAgIC5jaGVja2JveC5kaXNhYmxlZCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgfQoKICAgICAgICAvKiBMYWJlbCAqLwogICAgICAgIC5sYWJlbC1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDJweDsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tib3gtbGFiZWwgewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjE1cyBlYXNlOwogICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgfQoKICAgICAgICAubWFpbmNvbnRhaW5lcjpob3ZlciAuY2hlY2tib3gtbGFiZWwgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB9CgogICAgICAgIC5tYWluY29udGFpbmVyLmRpc2FibGVkOmhvdmVyIC5jaGVja2JveC1sYWJlbCB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICB9CgogICAgICAgIC8qIERlc2NyaXB0aW9uICovCiAgICAgICAgLmRlc2NyaXB0aW9uLXRleHQgewogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIgJHt0aGlzLmRpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSIgQGNsaWNrPSIke3RoaXMudG9nZ2xlU2VsZWN0ZWR9Ij4KICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJjaGVja2JveCAke3RoaXMudmFsdWUgPyAic2VsZWN0ZWQiIDogIiJ9ICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iIAogICAgICAgICAgICB0YWJpbmRleD0iJHt0aGlzLmRpc2FibGVkID8gIi0xIiA6ICIwIn0iCiAgICAgICAgICAgIEBrZXlkb3duPSIke3RoaXMuaGFuZGxlS2V5ZG93bn0iCiAgICAgICAgICA+CiAgICAgICAgICAgICR7dGhpcy52YWx1ZSA/IGIyYAogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hlY2ttYXJrIj4KICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMCA2TDkgMTdMNCAxMiIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgogICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICBgIDogdGhpcy5pbmRldGVybWluYXRlID8gYjJgCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoZWNrbWFyayI+CiAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTUgMTJIMTkiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgYCA6IGIyYGB9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsLWNvbnRhaW5lciI+CiAgICAgICAgICAgICR7dGhpcy5sYWJlbCA/IGIyYDxkaXYgY2xhc3M9ImNoZWNrYm94LWxhYmVsIj4ke3RoaXMubGFiZWx9PC9kaXY+YCA6ICIifQogICAgICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24gPyBiMmA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbi10ZXh0Ij4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+YCA6ICIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIHRvZ2dsZVNlbGVjdGVkKCkgewogICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWU7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm5ld1ZhbHVlIiwgewogICAgICAgIGRldGFpbDogdGhpcy52YWx1ZSwKICAgICAgICBidWJibGVzOiB0cnVlCiAgICAgIH0pKTsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgIH0KICAgIGZvY3VzKCkgewogICAgICBjb25zdCBjaGVja2JveERpdiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY2hlY2tib3giKTsKICAgICAgaWYgKGNoZWNrYm94RGl2KSB7CiAgICAgICAgY2hlY2tib3hEaXYuZm9jdXMoKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlS2V5ZG93bihldmVudCkgewogICAgICBpZiAoZXZlbnQua2V5ID09PSAiICIgfHwgZXZlbnQua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdGVkKCk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTUoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dENoZWNrYm94MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwY29sb3JzLmpzCnZhciBjb2xvcnNfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChjb2xvcnNfZXhwb3J0cywgewogIGJyaWdodDogKCkgPT4gYnJpZ2h0LAogIGRhcms6ICgpID0+IGRhcmsKfSk7CnZhciBkYXJrID0gewogIGJsdWU6ICIjMDA1MGI5IiwKICBibHVlQWN0aXZlOiAiIzAwNjlmMiIsCiAgYmx1ZU11dGVkOiAiIzAxMjQ1MiIsCiAgdGV4dDogIiNmZmZmZmYiCn07CnZhciBicmlnaHQgPSB7CiAgYmx1ZTogIiMwMDUwYjkiLAogIGJsdWVBY3RpdmU6ICIjMDA2OWYyIiwKICBibHVlTXV0ZWQ6ICIjMDA2OWYyIiwKICB0ZXh0OiAiIzMzMzMzMyIKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1tb2RhbC9kZWVzLW1vZGFsLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jOSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjhmOWZhIiwgIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzMzMyIpfTsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tc2VjdGlvbiBoMyB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMyIsICIjZmZmIil9OwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1zZWN0aW9uIHAgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NiIsICIjOTk5Iil9OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24tZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDE1MHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+SGVhZGVyIEJ1dHRvbnM8L2gzPgogICAgICA8cD5Nb2RhbHMgY2FuIGhhdmUgb3B0aW9uYWwgaGVhZGVyIGJ1dHRvbnMgZm9yIGhlbHAgYW5kIGNsb3NpbmcuPC9wPgogICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiV2l0aCBIZWxwIEJ1dHRvbiIsCiAgICBzaG93SGVscEJ1dHRvbjogdHJ1ZSwKICAgIG9uSGVscDogYXN5bmMgKCkgPT4gewogICAgICBjb25zdCBoZWxwTW9kYWwgPSBhd2FpdCBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgICAgaGVhZGluZzogIkhlbHAiLAogICAgICAgIHdpZHRoOiAic21hbGwiLAogICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSwKICAgICAgICBzaG93SGVscEJ1dHRvbjogZmFsc2UsCiAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgICAgIDxwPlRoaXMgaXMgdGhlIGhlbHAgY29udGVudCBmb3IgdGhlIG1vZGFsLjwvcD4KICAgICAgICAgICAgICAgICAgPHA+WW91IGNhbiBwcm92aWRlIGNvbnRleHQtc3BlY2lmaWMgaGVscCBoZXJlLjwvcD4KICAgICAgICAgICAgICAgIGAsCiAgICAgICAgbWVudU9wdGlvbnM6IFt7CiAgICAgICAgICBuYW1lOiAiR290IGl0IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgICAgICB9XQogICAgICB9KTsKICAgIH0sCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGhhcyBhIGhlbHAgYnV0dG9uIGluIHRoZSBoZWFkZXIuIENsaWNrIGl0IHRvIHNlZSBoZWxwIGNvbnRlbnQuPC9wPgogICAgICAgICAgICAgIDxwPlRoZSBjbG9zZSBidXR0b24gaXMgYWxzbyB2aXNpYmxlIGJ5IGRlZmF1bHQuPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJPSyIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PldpdGggSGVscCBCdXR0b248L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIk5vIENsb3NlIEJ1dHRvbiIsCiAgICBzaG93Q2xvc2VCdXR0b246IGZhbHNlLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBoYXMgbm8gY2xvc2UgYnV0dG9uIGluIHRoZSBoZWFkZXIuPC9wPgogICAgICAgICAgICAgIDxwPllvdSBtdXN0IHVzZSB0aGUgYWN0aW9uIGJ1dHRvbnMgb3IgY2xpY2sgb3V0c2lkZSB0byBjbG9zZSBpdC48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkNsb3NlIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+Tm8gQ2xvc2UgQnV0dG9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJCb3RoIEJ1dHRvbnMiLAogICAgc2hvd0hlbHBCdXR0b246IHRydWUsCiAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsCiAgICBvbkhlbHA6ICgpID0+IGFsZXJ0KCJIZWxwIGNsaWNrZWQhIiksCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGhhcyBib3RoIGhlbHAgYW5kIGNsb3NlIGJ1dHRvbnMuPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJEb25lIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+Qm90aCBCdXR0b25zPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJDbGVhbiBIZWFkZXIiLAogICAgc2hvd0Nsb3NlQnV0dG9uOiBmYWxzZSwKICAgIHNob3dIZWxwQnV0dG9uOiBmYWxzZSwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgaGFzIGEgY2xlYW4gaGVhZGVyIHdpdGggbm8gYnV0dG9ucy48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkNsb3NlIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+Q2xlYW4gSGVhZGVyPC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPk1vZGFsIFdpZHRoIFZhcmlhdGlvbnM8L2gzPgogICAgICA8cD5Nb2RhbHMgY2FuIGhhdmUgZGlmZmVyZW50IHdpZHRoczogc21hbGwsIG1lZGl1bSwgbGFyZ2UsIGZ1bGxzY3JlZW4sIG9yIGN1c3RvbSBwaXhlbCB2YWx1ZXMuPC9wPgogICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiU21hbGwgTW9kYWwiLAogICAgd2lkdGg6ICJzbWFsbCIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIGlzIGEgc21hbGwgbW9kYWwgd2l0aCBhIHdpZHRoIG9mIDM4MHB4LiBQZXJmZWN0IGZvciBzaW1wbGUgY29uZmlybWF0aW9ucyBvciBicmllZiBtZXNzYWdlcy48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkNhbmNlbCIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH0sIHsKICAgICAgbmFtZTogIk9LIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+U21hbGwgTW9kYWw8L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIk1lZGl1bSBNb2RhbCAoRGVmYXVsdCkiLAogICAgd2lkdGg6ICJtZWRpdW0iLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IlVzZXJuYW1lIn0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJFbWFpbCJ9IC5pbnB1dFR5cGU9JHsiZW1haWwifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IlBhc3N3b3JkIn0gLmlucHV0VHlwZT0keyJwYXNzd29yZCJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9LCB7CiAgICAgIG5hbWU6ICJTaWduIFVwIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+TWVkaXVtIE1vZGFsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJMYXJnZSBNb2RhbCIsCiAgICB3aWR0aDogImxhcmdlIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxoND5XaWRlIENvbnRlbnQgQXJlYTwvaDQ+CiAgICAgICAgICAgICAgPHA+VGhpcyBsYXJnZSBtb2RhbCBpcyA4MDBweCB3aWRlIGFuZCBwZXJmZWN0IGZvciBkaXNwbGF5aW5nIG1vcmUgY29tcGxleCBjb250ZW50IGxpa2UgZm9ybXMgd2l0aCBtdWx0aXBsZSBjb2x1bW5zLCB0YWJsZXMsIG9yIGRldGFpbGVkIGluZm9ybWF0aW9uLjwvcD4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7IGdhcDogMTZweDsgbWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiRmlyc3QgTmFtZSJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiTGFzdCBOYW1lIn0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJDb21wYW55In0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJQb3NpdGlvbiJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9LCB7CiAgICAgIG5hbWU6ICJTYXZlIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+TGFyZ2UgTW9kYWw8L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIkZ1bGxzY3JlZW4gRWRpdG9yIiwKICAgIHdpZHRoOiAiZnVsbHNjcmVlbiIsCiAgICBzaG93SGVscEJ1dHRvbjogdHJ1ZSwKICAgIG9uSGVscDogYXN5bmMgKCkgPT4gewogICAgICBhbGVydCgiSW4gYSByZWFsIGFwcCwgdGhpcyB3b3VsZCBzaG93IGVkaXRvciBkb2N1bWVudGF0aW9uIik7CiAgICB9LAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPGg0PkZ1bGxzY3JlZW4gRXhwZXJpZW5jZSB3aXRoIEhlYWRlciBDb250cm9sczwvaDQ+CiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCB0YWtlcyB1cCBhbG1vc3QgdGhlIGVudGlyZSB2aWV3cG9ydCB3aXRoIGEgMjBweCBtYXJnaW4gb24gYWxsIHNpZGVzLiBUaGUgaGVhZGVyIGJ1dHRvbnMgYXJlIHBhcnRpY3VsYXJseSB1c2VmdWwgaW4gZnVsbHNjcmVlbiBtb2RlLjwvcD4KICAgICAgICAgICAgICA8cD5UaGUgY29udGVudCBhcmVhIGNhbiBiZSBhcyB0YWxsIGFzIG5lZWRlZCBhbmQgd2lsbCBzY3JvbGwgaWYgbmVjZXNzYXJ5LjwvcD4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJoZWlnaHQ6IDIwMHB4OyBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YwZjBmMCIsICIjMmEyYTJhIil9OyBib3JkZXItcmFkaXVzOiA4cHg7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBtYXJnaW4tdG9wOiAxNnB4OyI+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX0iPkxhcmdlIGNvbnRlbnQgYXJlYTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCwKICAgIG1lbnVPcHRpb25zOiBbewogICAgICBuYW1lOiAiU2F2ZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH0sIHsKICAgICAgbmFtZTogIkNhbmNlbCIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PkZ1bGxzY3JlZW4gTW9kYWw8L2RlZXMtYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+Q3VzdG9tIFdpZHRoICYgQ29uc3RyYWludHM8L2gzPgogICAgICA8cD5Zb3UgY2FuIGFsc28gc2V0IGN1c3RvbSBwaXhlbCB3aWR0aHMgYW5kIG1pbi9tYXggY29uc3RyYWludHMuPC9wPgogICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiQ3VzdG9tIFdpZHRoICg3MDBweCkiLAogICAgd2lkdGg6IDcwMCwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgaGFzIGEgY3VzdG9tIHdpZHRoIG9mIGV4YWN0bHkgNzAwIHBpeGVscy48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkNsb3NlIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+Q3VzdG9tIDcwMHB4PC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJXaXRoIE1heCBXaWR0aCIsCiAgICB3aWR0aDogImxhcmdlIiwKICAgIG1heFdpZHRoOiA2MDAsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGlzIHNldCB0byAnbGFyZ2UnIGJ1dCBjb25zdHJhaW5lZCBieSBhIG1heFdpZHRoIG9mIDYwMHB4LjwvcD4KICAgICAgICAgICAgYCwKICAgIG1lbnVPcHRpb25zOiBbewogICAgICBuYW1lOiAiR290IGl0IiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+TWF4IFdpZHRoIDYwMHB4PC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJXaXRoIE1pbiBXaWR0aCIsCiAgICB3aWR0aDogMzAwLAogICAgbWluV2lkdGg6IDQwMCwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgd2lkdGggaXMgc2V0IHRvIDMwMHB4IGJ1dCBoYXMgYSBtaW5XaWR0aCBvZiA0MDBweCwgc28gaXQgd2lsbCBiZSA0MDBweCB3aWRlLjwvcD4KICAgICAgICAgICAgYCwKICAgIG1lbnVPcHRpb25zOiBbewogICAgICBuYW1lOiAiT0siLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9XQogIH0pOwp9fT5NaW4gV2lkdGggNDAwcHg8L2RlZXMtYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+QnV0dG9uIFZhcmlhdGlvbnM8L2gzPgogICAgICA8cD5Nb2RhbHMgY2FuIGhhdmUgZGlmZmVyZW50IGJ1dHRvbiBjb25maWd1cmF0aW9ucyB3aXRoIHByb3BlciBzcGFjaW5nLjwvcD4KICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIk11bHRpcGxlIEFjdGlvbnMiLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBkZW1vbnN0cmF0ZXMgbXVsdGlwbGUgYnV0dG9ucyB3aXRoIHByb3BlciBzcGFjaW5nIGJldHdlZW4gdGhlbS48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH0sIHsKICAgICAgbmFtZTogIkNhbmNlbCIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH0sIHsKICAgICAgbmFtZTogIlNhdmUgQ2hhbmdlcyIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PlRocmVlIEJ1dHRvbnM8L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIlNpbmdsZSBBY3Rpb24iLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+U29tZXRpbWVzIHlvdSBqdXN0IG5lZWQgb25lIGJ1dHRvbi48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkFja25vd2xlZGdlIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+U2luZ2xlIEJ1dHRvbjwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiTm8gQWN0aW9ucyIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGhhcyBubyBib3R0b20gYnV0dG9ucy4gVXNlIHRoZSBYIGJ1dHRvbiBvciBjbGljayBvdXRzaWRlIHRvIGNsb3NlLjwvcD4KICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiM5OTkiKX07Ij5UaGlzIGlzIHVzZWZ1bCBmb3IgaW5mb3JtYXRpb25hbCBtb2RhbHMgdGhhdCBkb24ndCByZXF1aXJlIHVzZXIgYWN0aW9uLjwvcD4KICAgICAgICAgICAgYCwKICAgIG1lbnVPcHRpb25zOiBbXQogIH0pOwp9fT5ObyBCdXR0b25zPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJMb25nIEJ1dHRvbiBMYWJlbHMiLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGVzdGluZyBidXR0b24gbGF5b3V0IHdpdGggbG9uZ2VyIGxhYmVscy48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkRpc2NhcmQgQWxsIENoYW5nZXMiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9LCB7CiAgICAgIG5hbWU6ICJTYXZlIGFuZCBDb250aW51ZSBFZGl0aW5nIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+TG9uZyBMYWJlbHM8L2RlZXMtYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+UmVzcG9uc2l2ZSBCZWhhdmlvcjwvaDM+CiAgICAgIDxwPkFsbCBtb2RhbHMgYXV0b21hdGljYWxseSBiZWNvbWUgZnVsbC13aWR0aCBvbiBtb2JpbGUgZGV2aWNlcyAoPCA3NjhweCB2aWV3cG9ydCB3aWR0aCkgZm9yIGJldHRlciB1c2FiaWxpdHkuPC9wPgogICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJSZXNwb25zaXZlIE1vZGFsIiwKICAgIHdpZHRoOiAibGFyZ2UiLAogICAgc2hvd0hlbHBCdXR0b246IHRydWUsCiAgICBvbkhlbHA6ICgpID0+IGNvbnNvbGUubG9nKCJIZWxwIHJlcXVlc3RlZCBmb3IgcmVzcG9uc2l2ZSBtb2RhbCIpLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgIDxwPlJlc2l6ZSB5b3VyIGJyb3dzZXIgd2luZG93IHRvIHNlZSBob3cgdGhpcyBtb2RhbCBhZGFwdHMuIE9uIG1vYmlsZSB2aWV3cG9ydHMsIGl0IHdpbGwgYXV0b21hdGljYWxseSB0YWtlIHRoZSBmdWxsIHdpZHRoIG1pbnVzIG1hcmdpbnMuPC9wPgogICAgICAgICAgICA8cD5UaGUgaGVhZGVyIGJ1dHRvbnMgcmVtYWluIGFjY2Vzc2libGUgYXQgYWxsIHZpZXdwb3J0IHNpemVzLjwvcD4KICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkNsb3NlIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+VGVzdCBSZXNwb25zaXZlPC9kZWVzLWJ1dHRvbj4KICAgIDwvZGl2PgogIDwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLW1vZGFsL2RlZXMtbW9kYWwuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMTUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczE2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzTW9kYWwgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLW1vZGFsIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfaGVhZGluZ19kZWNvcmF0b3JzOwogIGxldCBfaGVhZGluZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRlbnRfZGVjb3JhdG9yczsKICBsZXQgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51T3B0aW9uc19kZWNvcmF0b3JzOwogIGxldCBfbWVudU9wdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51T3B0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfd2lkdGhfZGVjb3JhdG9yczsKICBsZXQgX3dpZHRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfd2lkdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21heFdpZHRoX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhXaWR0aF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21heFdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5XaWR0aF9kZWNvcmF0b3JzOwogIGxldCBfbWluV2lkdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5XaWR0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0Nsb3NlQnV0dG9uX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93Q2xvc2VCdXR0b25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93Q2xvc2VCdXR0b25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dIZWxwQnV0dG9uX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93SGVscEJ1dHRvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dIZWxwQnV0dG9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vbkhlbHBfZGVjb3JhdG9yczsKICBsZXQgX29uSGVscF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29uSGVscF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9iaWxlRnVsbHNjcmVlbl9kZWNvcmF0b3JzOwogIGxldCBfbW9iaWxlRnVsbHNjcmVlbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21vYmlsZUZ1bGxzY3JlZW5fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRlbnRQYWRkaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZW50UGFkZGluZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRlbnRQYWRkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tb2RhbFpJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfbW9kYWxaSW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tb2RhbFpJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzTW9kYWwyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfaGVhZGluZ19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfY29udGVudF9kZWNvcmF0b3JzID0gW3I1KHt9KV07CiAgICAgIF9tZW51T3B0aW9uc19kZWNvcmF0b3JzID0gW3I1KHt9KV07CiAgICAgIF93aWR0aF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX21heFdpZHRoX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfbWluV2lkdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9zaG93Q2xvc2VCdXR0b25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2hvd0hlbHBCdXR0b25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfb25IZWxwX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX21vYmlsZUZ1bGxzY3JlZW5fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfY29udGVudFBhZGRpbmdfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9tb2RhbFpJbmRleF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfaGVhZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJoZWFkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoZWFkaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhlYWRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmhlYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaGVhZGluZ19pbml0aWFsaXplcnMsIF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX2NvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29udGVudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29udGVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jb250ZW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzLCBfY29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF9tZW51T3B0aW9uc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51T3B0aW9ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWVudU9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVudU9wdGlvbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVPcHRpb25zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21lbnVPcHRpb25zX2luaXRpYWxpemVycywgX21lbnVPcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX3dpZHRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndpZHRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ3aWR0aCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai53aWR0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud2lkdGggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfd2lkdGhfaW5pdGlhbGl6ZXJzLCBfd2lkdGhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfbWF4V2lkdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWF4V2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heFdpZHRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heFdpZHRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYXhXaWR0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhXaWR0aF9pbml0aWFsaXplcnMsIF9tYXhXaWR0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF9taW5XaWR0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtaW5XaWR0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWluV2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWluV2lkdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1pbldpZHRoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21pbldpZHRoX2luaXRpYWxpemVycywgX21pbldpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX3Nob3dDbG9zZUJ1dHRvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93Q2xvc2VCdXR0b24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dDbG9zZUJ1dHRvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93Q2xvc2VCdXR0b24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dDbG9zZUJ1dHRvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93Q2xvc2VCdXR0b25faW5pdGlhbGl6ZXJzLCBfc2hvd0Nsb3NlQnV0dG9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX3Nob3dIZWxwQnV0dG9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dIZWxwQnV0dG9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93SGVscEJ1dHRvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93SGVscEJ1dHRvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd0hlbHBCdXR0b24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0hlbHBCdXR0b25faW5pdGlhbGl6ZXJzLCBfc2hvd0hlbHBCdXR0b25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfb25IZWxwX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9uSGVscCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib25IZWxwIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm9uSGVscCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub25IZWxwID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX29uSGVscF9pbml0aWFsaXplcnMsIF9vbkhlbHBfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfbW9iaWxlRnVsbHNjcmVlbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtb2JpbGVGdWxsc2NyZWVuIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2JpbGVGdWxsc2NyZWVuIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1vYmlsZUZ1bGxzY3JlZW4sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1vYmlsZUZ1bGxzY3JlZW4gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbW9iaWxlRnVsbHNjcmVlbl9pbml0aWFsaXplcnMsIF9tb2JpbGVGdWxsc2NyZWVuX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX2NvbnRlbnRQYWRkaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRlbnRQYWRkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZW50UGFkZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb250ZW50UGFkZGluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29udGVudFBhZGRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29udGVudFBhZGRpbmdfaW5pdGlhbGl6ZXJzLCBfY29udGVudFBhZGRpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfbW9kYWxaSW5kZXhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibW9kYWxaSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1vZGFsWkluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1vZGFsWkluZGV4LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tb2RhbFpJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tb2RhbFpJbmRleF9pbml0aWFsaXplcnMsIF9tb2RhbFpJbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE1KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc01vZGFsMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM5OwogICAgc3RhdGljIGFzeW5jIGNyZWF0ZUFuZFNob3cob3B0aW9uc0FyZykgewogICAgICBjb25zdCBib2R5MyA9IGRvY3VtZW50LmJvZHk7CiAgICAgIGNvbnN0IG1vZGFsID0gbmV3IERlZXNNb2RhbDIoKTsKICAgICAgbW9kYWwuaGVhZGluZyA9IG9wdGlvbnNBcmcuaGVhZGluZzsKICAgICAgbW9kYWwuY29udGVudCA9IG9wdGlvbnNBcmcuY29udGVudDsKICAgICAgbW9kYWwubWVudU9wdGlvbnMgPSBvcHRpb25zQXJnLm1lbnVPcHRpb25zOwogICAgICBpZiAob3B0aW9uc0FyZy53aWR0aCkKICAgICAgICBtb2RhbC53aWR0aCA9IG9wdGlvbnNBcmcud2lkdGg7CiAgICAgIGlmIChvcHRpb25zQXJnLm1heFdpZHRoKQogICAgICAgIG1vZGFsLm1heFdpZHRoID0gb3B0aW9uc0FyZy5tYXhXaWR0aDsKICAgICAgaWYgKG9wdGlvbnNBcmcubWluV2lkdGgpCiAgICAgICAgbW9kYWwubWluV2lkdGggPSBvcHRpb25zQXJnLm1pbldpZHRoOwogICAgICBpZiAob3B0aW9uc0FyZy5zaG93Q2xvc2VCdXR0b24gIT09IHZvaWQgMCkKICAgICAgICBtb2RhbC5zaG93Q2xvc2VCdXR0b24gPSBvcHRpb25zQXJnLnNob3dDbG9zZUJ1dHRvbjsKICAgICAgaWYgKG9wdGlvbnNBcmcuc2hvd0hlbHBCdXR0b24gIT09IHZvaWQgMCkKICAgICAgICBtb2RhbC5zaG93SGVscEJ1dHRvbiA9IG9wdGlvbnNBcmcuc2hvd0hlbHBCdXR0b247CiAgICAgIGlmIChvcHRpb25zQXJnLm9uSGVscCkKICAgICAgICBtb2RhbC5vbkhlbHAgPSBvcHRpb25zQXJnLm9uSGVscDsKICAgICAgaWYgKG9wdGlvbnNBcmcubW9iaWxlRnVsbHNjcmVlbiAhPT0gdm9pZCAwKQogICAgICAgIG1vZGFsLm1vYmlsZUZ1bGxzY3JlZW4gPSBvcHRpb25zQXJnLm1vYmlsZUZ1bGxzY3JlZW47CiAgICAgIGlmIChvcHRpb25zQXJnLmNvbnRlbnRQYWRkaW5nICE9PSB2b2lkIDApCiAgICAgICAgbW9kYWwuY29udGVudFBhZGRpbmcgPSBvcHRpb25zQXJnLmNvbnRlbnRQYWRkaW5nOwogICAgICBtb2RhbC53aW5kb3dMYXllciA9IGF3YWl0IERlZXNXaW5kb3dMYXllci5jcmVhdGVBbmRTaG93KHsKICAgICAgICBibHVyOiB0cnVlCiAgICAgIH0pOwogICAgICBtb2RhbC53aW5kb3dMYXllci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGFzeW5jICgpID0+IHsKICAgICAgICBhd2FpdCBtb2RhbC5kZXN0cm95KCk7CiAgICAgIH0pOwogICAgICBib2R5My5hcHBlbmQobW9kYWwud2luZG93TGF5ZXIpOwogICAgICBib2R5My5hcHBlbmQobW9kYWwpOwogICAgICBtb2RhbC5tb2RhbFpJbmRleCA9IHpJbmRleFJlZ2lzdHJ5LmdldE5leHRaSW5kZXgoKTsKICAgICAgekluZGV4UmVnaXN0cnkucmVnaXN0ZXIobW9kYWwsIG1vZGFsLm1vZGFsWkluZGV4KTsKICAgICAgcmV0dXJuIG1vZGFsOwogICAgfQogICAgI2hlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IGhlYWRpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoZWFkaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaGVhZGluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfY29udGVudF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IGNvbnRlbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29udGVudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21lbnVPcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfY29udGVudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX21lbnVPcHRpb25zX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBtZW51T3B0aW9ucygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21lbnVPcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWVudU9wdGlvbnModmFsdWUyKSB7CiAgICAgIHRoaXMuI21lbnVPcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjd2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9tZW51T3B0aW9uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX3dpZHRoX2luaXRpYWxpemVycywgIm1lZGl1bSIpKTsKICAgIGdldCB3aWR0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3dpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgd2lkdGgodmFsdWUyKSB7CiAgICAgIHRoaXMuI3dpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4V2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF93aWR0aF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX21heFdpZHRoX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgbWF4V2lkdGgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYXhXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1heFdpZHRoKHZhbHVlMikgewogICAgICB0aGlzLiNtYXhXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21pbldpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfbWF4V2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9taW5XaWR0aF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IG1pbldpZHRoKCkgewogICAgICByZXR1cm4gdGhpcy4jbWluV2lkdGhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW5XaWR0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWluV2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93Q2xvc2VCdXR0b25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9taW5XaWR0aF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX3Nob3dDbG9zZUJ1dHRvbl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzaG93Q2xvc2VCdXR0b24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93Q2xvc2VCdXR0b25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93Q2xvc2VCdXR0b24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dDbG9zZUJ1dHRvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dIZWxwQnV0dG9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfc2hvd0Nsb3NlQnV0dG9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfc2hvd0hlbHBCdXR0b25faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHNob3dIZWxwQnV0dG9uKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0hlbHBCdXR0b25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93SGVscEJ1dHRvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd0hlbHBCdXR0b25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNvbkhlbHBfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9zaG93SGVscEJ1dHRvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX29uSGVscF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IG9uSGVscCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI29uSGVscF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG9uSGVscCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb25IZWxwX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbW9iaWxlRnVsbHNjcmVlbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX29uSGVscF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX21vYmlsZUZ1bGxzY3JlZW5faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IG1vYmlsZUZ1bGxzY3JlZW4oKSB7CiAgICAgIHJldHVybiB0aGlzLiNtb2JpbGVGdWxsc2NyZWVuX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbW9iaWxlRnVsbHNjcmVlbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jbW9iaWxlRnVsbHNjcmVlbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRlbnRQYWRkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfbW9iaWxlRnVsbHNjcmVlbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX2NvbnRlbnRQYWRkaW5nX2luaXRpYWxpemVycywgMTYpKTsKICAgIGdldCBjb250ZW50UGFkZGluZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvbnRlbnRQYWRkaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29udGVudFBhZGRpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRlbnRQYWRkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbW9kYWxaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9jb250ZW50UGFkZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX21vZGFsWkluZGV4X2luaXRpYWxpemVycywgMWUzKSk7CiAgICBnZXQgbW9kYWxaSW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtb2RhbFpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1vZGFsWkluZGV4KHZhbHVlMikgewogICAgICB0aGlzLiNtb2RhbFpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNmZmYiKX07CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQogICAgICAubW9kYWxDb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICB3aWR0aDogMTAwdnc7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KICAgICAgLm1vZGFsIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHNjYWxlKDAuOTUpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgbWluLWhlaWdodDogMTIwcHg7CiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDQwcHgpOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgICAgIG1hcmdpbjogMjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgfQoKICAgICAgLyogV2lkdGggdmFyaWF0aW9ucyAqLwogICAgICAubW9kYWwud2lkdGgtc21hbGwgewogICAgICAgIHdpZHRoOiAzODBweDsKICAgICAgfQoKICAgICAgLm1vZGFsLndpZHRoLW1lZGl1bSB7CiAgICAgICAgd2lkdGg6IDU2MHB4OwogICAgICB9CgogICAgICAubW9kYWwud2lkdGgtbGFyZ2UgewogICAgICAgIHdpZHRoOiA4MDBweDsKICAgICAgfQoKICAgICAgLm1vZGFsLndpZHRoLWZ1bGxzY3JlZW4gewogICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gNDBweCk7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNDBweCk7CiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDQwcHgpOwogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAubW9kYWwgewogICAgICAgICAgd2lkdGg6IGNhbGMoMTAwdncgLSA0MHB4KSAhaW1wb3J0YW50OwogICAgICAgICAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIEFsbG93IGZ1bGwgaGVpZ2h0IG9uIG1vYmlsZSB3aGVuIGNvbnRlbnQgbmVlZHMgaXQgKi8KICAgICAgICAubW9kYWxDb250YWluZXIgewogICAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm1vZGFsIHsKICAgICAgICAgIG1hcmdpbjogMTBweDsKICAgICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAyMHB4KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogRnVsbCBzY3JlZW4gbW9kZSBvbiBtb2JpbGUgKi8KICAgICAgICAubW9kYWwubW9iaWxlLWZ1bGxzY3JlZW4gewogICAgICAgICAgd2lkdGg6IDEwMHZ3ICFpbXBvcnRhbnQ7CiAgICAgICAgICBoZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7CiAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50OwogICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5tb2RhbC5zaG93IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHNjYWxlKDEpOwogICAgICB9CgogICAgICAubW9kYWwuc2hvdy5wcmVkZXN0cm95IHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KSBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIHsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgbWluLWhlaWdodDogNDBweDsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIC5oZWFkZXItYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogOHB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIC5oZWFkZXItYnV0dG9uIHsKICAgICAgICB3aWR0aDogMjhweDsKICAgICAgICBoZWlnaHQ6IDI4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyAuaGVhZGVyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIC5oZWFkZXItYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzNmM2Y0NiIpfTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIC5oZWFkZXItYnV0dG9uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAubW9kYWwgLmhlYWRpbmcgLmhlYWRpbmctdGV4dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDQwcHg7CiAgICAgICAgcGFkZGluZzogMCA0MHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICB9CgogICAgICAubW9kYWwgLmNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgfQogICAgICAubW9kYWwgLmJvdHRvbUJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b24gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBsaW5lLWhlaWdodDogMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAubW9kYWwgLmJvdHRvbUJ1dHRvbnMgLmJvdHRvbUJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkNWRiIiwgIiM1MjUyNWIiKX07CiAgICAgIH0KICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjNTI1MjViIil9OwogICAgICB9CiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyAuYm90dG9tQnV0dG9uOmxhc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b24ucHJpbWFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIH0KICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b24ucHJpbWFyeTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMyNTYzZWIiLCAiIzI1NjNlYiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiMyNTYzZWIiKX07CiAgICAgIH0KICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b24ucHJpbWFyeTphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWQ0ZWQ4IiwgIiMxZDRlZDgiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFkNGVkOCIsICIjMWQ0ZWQ4Iil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICBjb25zdCB3aWR0aENsYXNzID0gdHlwZW9mIHRoaXMud2lkdGggPT09ICJzdHJpbmciID8gYHdpZHRoLSR7dGhpcy53aWR0aH1gIDogIiI7CiAgICAgIGNvbnN0IGN1c3RvbVdpZHRoID0gdHlwZW9mIHRoaXMud2lkdGggPT09ICJudW1iZXIiID8gYCR7dGhpcy53aWR0aH1weGAgOiAiIjsKICAgICAgY29uc3QgbWF4V2lkdGhTdHlsZSA9IHRoaXMubWF4V2lkdGggPyBgJHt0aGlzLm1heFdpZHRofXB4YCA6ICIiOwogICAgICBjb25zdCBtaW5XaWR0aFN0eWxlID0gdGhpcy5taW5XaWR0aCA/IGAke3RoaXMubWluV2lkdGh9cHhgIDogIiI7CiAgICAgIGNvbnN0IG1vYmlsZUZ1bGxzY3JlZW5DbGFzcyA9IHRoaXMubW9iaWxlRnVsbHNjcmVlbiA/ICJtb2JpbGUtZnVsbHNjcmVlbiIgOiAiIjsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgJHtjdXN0b21XaWR0aCA/IGAubW9kYWwgeyB3aWR0aDogJHtjdXN0b21XaWR0aH07IH1gIDogIiJ9CiAgICAgICAgJHttYXhXaWR0aFN0eWxlID8gYC5tb2RhbCB7IG1heC13aWR0aDogJHttYXhXaWR0aFN0eWxlfTsgfWAgOiAiIn0KICAgICAgICAke21pbldpZHRoU3R5bGUgPyBgLm1vZGFsIHsgbWluLXdpZHRoOiAke21pbldpZHRoU3R5bGV9OyB9YCA6ICIifQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJtb2RhbENvbnRhaW5lciIgQGNsaWNrPSR7dGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2t9IHN0eWxlPSJ6LWluZGV4OiAke3RoaXMubW9kYWxaSW5kZXh9Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbCAke3dpZHRoQ2xhc3N9ICR7bW9iaWxlRnVsbHNjcmVlbkNsYXNzfSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy10ZXh0Ij4ke3RoaXMuaGVhZGluZ308L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLWJ1dHRvbnMiPgogICAgICAgICAgICAgICR7dGhpcy5zaG93SGVscEJ1dHRvbiA/IGIyYAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLWJ1dHRvbiIgQGNsaWNrPSR7dGhpcy5oYW5kbGVIZWxwfSB0aXRsZT0iSGVscCI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmhlbHBDaXJjbGUifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAke3RoaXMuc2hvd0Nsb3NlQnV0dG9uID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItYnV0dG9uIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmRlc3Ryb3koKX0gdGl0bGU9IkNsb3NlIj4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6eCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCIgc3R5bGU9InBhZGRpbmc6ICR7dGhpcy5jb250ZW50UGFkZGluZ31weDsiPiR7dGhpcy5jb250ZW50fTwvZGl2PgogICAgICAgICAgJHt0aGlzLm1lbnVPcHRpb25zLmxlbmd0aCA+IDAgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm90dG9tQnV0dG9ucyI+CiAgICAgICAgICAgICAgJHt0aGlzLm1lbnVPcHRpb25zLm1hcCgoYWN0aW9uQXJnLCBpbmRleDIpID0+IGIyYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJib3R0b21CdXR0b24gJHtpbmRleDIgPT09IHRoaXMubWVudU9wdGlvbnMubGVuZ3RoIC0gMSA/ICJwcmltYXJ5IiA6ICIifSAke2FjdGlvbkFyZy5uYW1lID09PSAiT0siID8gIm9rIiA6ICIifSIgQGNsaWNrPSR7KCkgPT4gewogICAgICAgIGFjdGlvbkFyZy5hY3Rpb24odGhpcyk7CiAgICAgIH19PiR7YWN0aW9uQXJnLm5hbWV9PC9kaXY+CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHdpbmRvd0xheWVyID0gX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfbW9kYWxaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgY29uc3QgZG9tdG9vbHMgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigzMCk7CiAgICAgIGNvbnN0IG1vZGFsID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbCIpOwogICAgICBtb2RhbC5jbGFzc0xpc3QuYWRkKCJzaG93Iik7CiAgICB9CiAgICBhc3luYyBoYW5kbGVPdXRzaWRlQ2xpY2soZXZlbnRBcmcpIHsKICAgICAgZXZlbnRBcmcuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnN0IG1vZGFsQ29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbENvbnRhaW5lciIpOwogICAgICBpZiAoZXZlbnRBcmcudGFyZ2V0ID09PSBtb2RhbENvbnRhaW5lcikgewogICAgICAgIGF3YWl0IHRoaXMuZGVzdHJveSgpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBkZXN0cm95KCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBjb25zdCBtb2RhbCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubW9kYWwiKTsKICAgICAgbW9kYWwuY2xhc3NMaXN0LmFkZCgicHJlZGVzdHJveSIpOwogICAgICBhd2FpdCBkb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDIwMCk7CiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcyk7CiAgICAgIGF3YWl0IHRoaXMud2luZG93TGF5ZXIuZGVzdHJveSgpOwogICAgICB6SW5kZXhSZWdpc3RyeS51bnJlZ2lzdGVyKHRoaXMpOwogICAgfQogICAgYXN5bmMgaGFuZGxlSGVscCgpIHsKICAgICAgaWYgKHRoaXMub25IZWxwKSB7CiAgICAgICAgYXdhaXQgdGhpcy5vbkhlbHAoKTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxNihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc01vZGFsMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtbGFiZWwvZGVlcy1sYWJlbC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzEwID0gKCkgPT4gewogIHJldHVybiBiMmAKICAgIDxkZWVzLWxhYmVsIC5sYWJlbD0keyJhIGxhYmVsIn0+PC9kZWVzLWxhYmVsPgogIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtbGFiZWwvZGVlcy1sYWJlbC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUxNiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMTcgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNMYWJlbCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtbGFiZWwiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9sYWJlbF9kZWNvcmF0b3JzOwogIGxldCBfbGFiZWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYWJlbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGVzY3JpcHRpb25fZGVjb3JhdG9yczsKICBsZXQgX2Rlc2NyaXB0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGVzY3JpcHRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3JlcXVpcmVkX2RlY29yYXRvcnM7CiAgbGV0IF9yZXF1aXJlZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3JlcXVpcmVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNMYWJlbDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9sYWJlbF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgcmVmbGVjdDogdHJ1ZQogICAgICB9KV07CiAgICAgIF9kZXNjcmlwdGlvbl9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgcmVmbGVjdDogdHJ1ZQogICAgICB9KV07CiAgICAgIF9yZXF1aXJlZF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGUxNih0aGlzLCBudWxsLCBfbGFiZWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFiZWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhYmVsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxhYmVsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sYWJlbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sYWJlbF9pbml0aWFsaXplcnMsIF9sYWJlbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE2KHRoaXMsIG51bGwsIF9kZXNjcmlwdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkZXNjcmlwdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZGVzY3JpcHRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGVzY3JpcHRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRlc2NyaXB0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Rlc2NyaXB0aW9uX2luaXRpYWxpemVycywgX2Rlc2NyaXB0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTYodGhpcywgbnVsbCwgX3JlcXVpcmVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJlcXVpcmVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZXF1aXJlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZXF1aXJlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucmVxdWlyZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzLCBfcmVxdWlyZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNMYWJlbDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzEwOwogICAgI2xhYmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczE3KHRoaXMsIF9sYWJlbF9pbml0aWFsaXplcnMsICIiKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgbGFiZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxhYmVsKHZhbHVlMikgewogICAgICB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rlc2NyaXB0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNyh0aGlzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE3KHRoaXMsIF9kZXNjcmlwdGlvbl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IGRlc2NyaXB0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jZGVzY3JpcHRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkZXNjcmlwdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jZGVzY3JpcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTcodGhpcywgX2Rlc2NyaXB0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNyh0aGlzLCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHJlcXVpcmVkKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVxdWlyZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCByZXF1aXJlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcmVxdWlyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ1JvYm90bycsIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5sYWJlbCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLnJlcXVpcmVkIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsICJoc2woMCA3Mi4yJSA1MC42JSkiKX07CiAgICAgICAgbWFyZ2luLWxlZnQ6IDJweDsKICAgICAgfQoKICAgICAgZGVlcy1pY29uIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpOwogICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogaGVscDsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke3RoaXMubGFiZWwgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPgogICAgICAgICAgICAgICR7dGhpcy5sYWJlbH0KICAgICAgICAgICAgICAke3RoaXMucmVxdWlyZWQgPyBiMmA8c3BhbiBjbGFzcz0icmVxdWlyZWQiPio8L3NwYW4+YCA6ICIifQogICAgICAgICAgICAgICR7dGhpcy5kZXNjcmlwdGlvbiA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmluZm8ifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICA8ZGVlcy1zcGVlY2hidWJibGUgLnRleHQ9JHt0aGlzLmRlc2NyaXB0aW9ufT48L2RlZXMtc3BlZWNoYnViYmxlPgogICAgICAgICAgICAgICAgICBgIDogYjJgYH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogYjJgYH0KICAgIGA7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxNyh0aGlzLCBfcmVxdWlyZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxNyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0xhYmVsMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLW1vbmFjby92ZXJzaW9uLmpzCnZhciBNT05BQ09fVkVSU0lPTiA9ICIwLjU1LjEiOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tb25hY28vZGVlcy13b3Jrc3BhY2UtbW9uYWNvLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTE3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMxOCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1dvcmtzcGFjZU1vbmFjbyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2NvbnRlbnRfZGVjb3JhdG9yczsKICBsZXQgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYW5ndWFnZV9kZWNvcmF0b3JzOwogIGxldCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYW5ndWFnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsZVBhdGhfZGVjb3JhdG9yczsKICBsZXQgX2ZpbGVQYXRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRlbnRTdWJqZWN0X2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZW50U3ViamVjdF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRlbnRTdWJqZWN0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF93b3JkV3JhcF9kZWNvcmF0b3JzOwogIGxldCBfd29yZFdyYXBfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF93b3JkV3JhcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV29ya3NwYWNlTW9uYWNvMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2NvbnRlbnRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX2xhbmd1YWdlX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZwogICAgICB9KV07CiAgICAgIF9maWxlUGF0aF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfY29udGVudFN1YmplY3RfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogT2JqZWN0CiAgICAgIH0pXTsKICAgICAgX3dvcmRXcmFwX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEJvb2xlYW4KICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGUxNyh0aGlzLCBudWxsLCBfY29udGVudF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRlbnQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRlbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29udGVudF9pbml0aWFsaXplcnMsIF9jb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTcodGhpcywgbnVsbCwgX2xhbmd1YWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhbmd1YWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYW5ndWFnZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYW5ndWFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFuZ3VhZ2UgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzLCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNyh0aGlzLCBudWxsLCBfZmlsZVBhdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsZVBhdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZpbGVQYXRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZpbGVQYXRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWxlUGF0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9maWxlUGF0aF9pbml0aWFsaXplcnMsIF9maWxlUGF0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE3KHRoaXMsIG51bGwsIF9jb250ZW50U3ViamVjdF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZW50U3ViamVjdCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29udGVudFN1YmplY3QiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29udGVudFN1YmplY3QsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRlbnRTdWJqZWN0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbnRlbnRTdWJqZWN0X2luaXRpYWxpemVycywgX2NvbnRlbnRTdWJqZWN0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTcodGhpcywgbnVsbCwgX3dvcmRXcmFwX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndvcmRXcmFwIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ3b3JkV3JhcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai53b3JkV3JhcCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud29yZFdyYXAgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfd29yZFdyYXBfaW5pdGlhbGl6ZXJzLCBfd29yZFdyYXBfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXb3Jrc3BhY2VNb25hY28yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIERFTU8KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgPGRlZXMtd29ya3NwYWNlLW1vbmFjbz48L2RlZXMtd29ya3NwYWNlLW1vbmFjbz5gOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJXb3Jrc3BhY2UiOwogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgbW9uYWNvRGVmZXJyZWQ7CiAgICAvLyBJTlNUQU5DRQogICAgZWRpdG9yRGVmZXJyZWQgPSBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRwcm9taXNlLmRlZmVyKCk7CiAgICAjY29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfY29udGVudF9pbml0aWFsaXplcnMsICJmdW5jdGlvbiBoZWxsbygpIHtcbglhbGVydCgnSGVsbG8gd29ybGQhJyk7XG59Iik7CiAgICBnZXQgY29udGVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb250ZW50KHZhbHVlMikgewogICAgICB0aGlzLiNjb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE4KHRoaXMsIF9jb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzLCAidHlwZXNjcmlwdCIpKTsKICAgIGdldCBsYW5ndWFnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xhbmd1YWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbGFuZ3VhZ2UodmFsdWUyKSB7CiAgICAgIHRoaXMuI2xhbmd1YWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE4KHRoaXMsIF9sYW5ndWFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTgodGhpcywgX2ZpbGVQYXRoX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBmaWxlUGF0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2ZpbGVQYXRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsZVBhdGgodmFsdWUyKSB7CiAgICAgIHRoaXMuI2ZpbGVQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29udGVudFN1YmplY3RfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE4KHRoaXMsIF9maWxlUGF0aF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTgodGhpcywgX2NvbnRlbnRTdWJqZWN0X2luaXRpYWxpemVycywgbmV3IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydHJ4LnJ4anMuU3ViamVjdCgpKSk7CiAgICBnZXQgY29udGVudFN1YmplY3QoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZW50U3ViamVjdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbnRlbnRTdWJqZWN0KHZhbHVlMikgewogICAgICB0aGlzLiNjb250ZW50U3ViamVjdF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3dvcmRXcmFwX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfY29udGVudFN1YmplY3RfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE4KHRoaXMsIF93b3JkV3JhcF9pbml0aWFsaXplcnMsICJvZmYiKSk7CiAgICBnZXQgd29yZFdyYXAoKSB7CiAgICAgIHJldHVybiB0aGlzLiN3b3JkV3JhcF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHdvcmRXcmFwKHZhbHVlMikgewogICAgICB0aGlzLiN3b3JkV3JhcF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgbW9uYWNvVGhlbWVTdWJzY3JpcHRpb24gPSAoX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfd29yZFdyYXBfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgIGlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwgPSBmYWxzZTsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICBEb21Ub29scy5zZXR1cERvbVRvb2xzKCk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5tYWluYm94IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im1haW5ib3giPgogICAgICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5nZXRFbGVtZW50QnlJZCgiY29udGFpbmVyIik7CiAgICAgIGNvbnN0IG1vbmFjb0NkbkJhc2UgPSBgaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9tb25hY28tZWRpdG9yQCR7TU9OQUNPX1ZFUlNJT059YDsKICAgICAgaWYgKCFEZWVzV29ya3NwYWNlTW9uYWNvMi5tb25hY29EZWZlcnJlZCkgewogICAgICAgIERlZXNXb3Jrc3BhY2VNb25hY28yLm1vbmFjb0RlZmVycmVkID0gZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cHJvbWlzZS5kZWZlcigpOwogICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IGAke21vbmFjb0NkbkJhc2V9L21pbi92cy9sb2FkZXIuanNgOwogICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwogICAgICAgIHNjcmlwdC5zcmMgPSBzY3JpcHRVcmw7CiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHsKICAgICAgICAgIERlZXNXb3Jrc3BhY2VNb25hY28yLm1vbmFjb0RlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICB9OwogICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKICAgICAgfQogICAgICBhd2FpdCBEZWVzV29ya3NwYWNlTW9uYWNvMi5tb25hY29EZWZlcnJlZC5wcm9taXNlOwogICAgICB3aW5kb3cucmVxdWlyZS5jb25maWcoewogICAgICAgIHBhdGhzOiB7IHZzOiBgJHttb25hY29DZG5CYXNlfS9taW4vdnNgIH0KICAgICAgfSk7CiAgICAgIHdpbmRvdy5yZXF1aXJlKFsidnMvZWRpdG9yL2VkaXRvci5tYWluIl0sIGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCBkb210b29sc0luc3RhbmNlID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgICAgY29uc3QgaXNCcmlnaHQgPSBkb210b29sc0luc3RhbmNlLnRoZW1lTWFuYWdlci5nb0JyaWdodEJvb2xlYW47CiAgICAgICAgY29uc3QgaW5pdGlhbFRoZW1lID0gaXNCcmlnaHQgPyAidnMiIDogInZzLWRhcmsiOwogICAgICAgIGNvbnN0IG1vbmFjb0luc3RhbmNlID0gd2luZG93Lm1vbmFjbzsKICAgICAgICBsZXQgbW9kZWwgPSBudWxsOwogICAgICAgIGlmICh0aGlzLmZpbGVQYXRoKSB7CiAgICAgICAgICBjb25zdCB1cmkgPSBtb25hY29JbnN0YW5jZS5VcmkucGFyc2UoYGZpbGU6Ly8ke3RoaXMuZmlsZVBhdGh9YCk7CiAgICAgICAgICBtb2RlbCA9IG1vbmFjb0luc3RhbmNlLmVkaXRvci5nZXRNb2RlbCh1cmkpOwogICAgICAgICAgaWYgKCFtb2RlbCkgewogICAgICAgICAgICBtb2RlbCA9IG1vbmFjb0luc3RhbmNlLmVkaXRvci5jcmVhdGVNb2RlbCh0aGlzLmNvbnRlbnQsIHRoaXMubGFuZ3VhZ2UsIHVyaSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtb2RlbC5zZXRWYWx1ZSh0aGlzLmNvbnRlbnQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCBlZGl0b3IyID0gbW9uYWNvSW5zdGFuY2UuZWRpdG9yLmNyZWF0ZShjb250YWluZXIsIHsKICAgICAgICAgIG1vZGVsOiBtb2RlbCB8fCB2b2lkIDAsCiAgICAgICAgICB2YWx1ZTogbW9kZWwgPyB2b2lkIDAgOiB0aGlzLmNvbnRlbnQsCiAgICAgICAgICBsYW5ndWFnZTogbW9kZWwgPyB2b2lkIDAgOiB0aGlzLmxhbmd1YWdlLAogICAgICAgICAgdGhlbWU6IGluaXRpYWxUaGVtZSwKICAgICAgICAgIHVzZVNoYWRvd0RPTTogdHJ1ZSwKICAgICAgICAgIGZvbnRTaXplOiAxNiwKICAgICAgICAgIGF1dG9tYXRpY0xheW91dDogdHJ1ZSwKICAgICAgICAgIHdvcmRXcmFwOiB0aGlzLndvcmRXcmFwLAogICAgICAgICAgaG92ZXI6IHsKICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSwKICAgICAgICAgICAgZGVsYXk6IDMwMCwKICAgICAgICAgICAgc3RpY2t5OiB0cnVlLAogICAgICAgICAgICBhYm92ZTogZmFsc2UKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZ29CcmlnaHQpID0+IHsKICAgICAgICAgIGNvbnN0IG5ld1RoZW1lID0gZ29CcmlnaHQgPyAidnMiIDogInZzLWRhcmsiOwogICAgICAgICAgZWRpdG9yMi51cGRhdGVPcHRpb25zKHsgdGhlbWU6IG5ld1RoZW1lIH0pOwogICAgICAgIH0pOwogICAgICAgIHRoaXMuZWRpdG9yRGVmZXJyZWQucmVzb2x2ZShlZGl0b3IyKTsKICAgICAgfSk7CiAgICAgIGNvbnN0IGNzczE1ID0gYXdhaXQgKGF3YWl0IGZldGNoKGAke21vbmFjb0NkbkJhc2V9L21pbi92cy9lZGl0b3IvZWRpdG9yLm1haW4uY3NzYCkpLnRleHQoKTsKICAgICAgY29uc3Qgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgICAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gY3NzMTU7CiAgICAgIHRoaXMuc2hhZG93Um9vdC5hcHBlbmQoc3R5bGVFbGVtZW50KTsKICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgdGhpcy5lZGl0b3JEZWZlcnJlZC5wcm9taXNlOwogICAgICBlZGl0b3Iub25EaWRDaGFuZ2VNb2RlbENvbnRlbnQoYXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgICAgaWYgKHRoaXMuaXNVcGRhdGluZ0Zyb21FeHRlcm5hbCkKICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCB2YWx1ZTIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsKICAgICAgICB0aGlzLmNvbnRlbnRTdWJqZWN0Lm5leHQodmFsdWUyKTsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb250ZW50LWNoYW5nZSIsIHsKICAgICAgICAgIGRldGFpbDogdmFsdWUyLAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9KTsKICAgICAgdGhpcy5jb250ZW50U3ViamVjdC5uZXh0KGVkaXRvci5nZXRWYWx1ZSgpKTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGNvbnN0IG1vbmFjb0luc3RhbmNlID0gd2luZG93Lm1vbmFjbzsKICAgICAgaWYgKCFtb25hY29JbnN0YW5jZSkKICAgICAgICByZXR1cm47CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImZpbGVQYXRoIikgJiYgdGhpcy5maWxlUGF0aCkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IHRoaXMuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBjb25zdCB1cmkgPSBtb25hY29JbnN0YW5jZS5VcmkucGFyc2UoYGZpbGU6Ly8ke3RoaXMuZmlsZVBhdGh9YCk7CiAgICAgICAgbGV0IG1vZGVsID0gbW9uYWNvSW5zdGFuY2UuZWRpdG9yLmdldE1vZGVsKHVyaSk7CiAgICAgICAgaWYgKCFtb2RlbCkgewogICAgICAgICAgbW9kZWwgPSBtb25hY29JbnN0YW5jZS5lZGl0b3IuY3JlYXRlTW9kZWwodGhpcy5jb250ZW50LCB0aGlzLmxhbmd1YWdlLCB1cmkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAobW9kZWwuZ2V0VmFsdWUoKSAhPT0gdGhpcy5jb250ZW50KSB7CiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21FeHRlcm5hbCA9IHRydWU7CiAgICAgICAgICAgIG1vZGVsLnNldFZhbHVlKHRoaXMuY29udGVudCk7CiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21FeHRlcm5hbCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCBjdXJyZW50TW9kZWwgPSBlZGl0b3IuZ2V0TW9kZWwoKTsKICAgICAgICBpZiAoY3VycmVudE1vZGVsPy51cmkudG9TdHJpbmcoKSAhPT0gdXJpLnRvU3RyaW5nKCkpIHsKICAgICAgICAgIGVkaXRvci5zZXRNb2RlbChtb2RlbCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJjb250ZW50IikpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCB0aGlzLmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gZWRpdG9yLmdldFZhbHVlKCk7CiAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gdGhpcy5jb250ZW50KSB7CiAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwgPSB0cnVlOwogICAgICAgICAgZWRpdG9yLnNldFZhbHVlKHRoaXMuY29udGVudCk7CiAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygibGFuZ3VhZ2UiKSkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IHRoaXMuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBjb25zdCBtb2RlbCA9IGVkaXRvci5nZXRNb2RlbCgpOwogICAgICAgIGlmIChtb2RlbCkgewogICAgICAgICAgbW9uYWNvSW5zdGFuY2UuZWRpdG9yLnNldE1vZGVsTGFuZ3VhZ2UobW9kZWwsIHRoaXMubGFuZ3VhZ2UpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICh0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uKSB7CiAgICAgICAgdGhpcy5tb25hY29UaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgIHRoaXMubW9uYWNvVGhlbWVTdWJzY3JpcHRpb24gPSBudWxsOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFVwZGF0ZSBjb250ZW50IGZyb20gZXh0ZXJuYWwgc291cmNlIHdpdGggb3B0aW9uYWwgY3Vyc29yIHByZXNlcnZhdGlvbi4KICAgICAqIFVzZSB0aGlzIHdoZW4gdGhlIGZpbGUgY29udGVudCBjaGFuZ2VzIGV4dGVybmFsbHkgKGUuZy4sIGZpbGUgY2hhbmdlZCBvbiBkaXNrKS4KICAgICAqIEBwYXJhbSBuZXdDb250ZW50IFRoZSBuZXcgY29udGVudCB0byBzZXQKICAgICAqIEBwYXJhbSBwcmVzZXJ2ZUN1cnNvciBXaGV0aGVyIHRvIHByZXNlcnZlIGN1cnNvci9zY3JvbGwgcG9zaXRpb24gKGRlZmF1bHQ6IHRydWUpCiAgICAgKi8KICAgIGFzeW5jIHNldENvbnRlbnRFeHRlcm5hbChuZXdDb250ZW50LCBwcmVzZXJ2ZUN1cnNvciA9IHRydWUpIHsKICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgdGhpcy5lZGl0b3JEZWZlcnJlZC5wcm9taXNlOwogICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBlZGl0b3IuZ2V0VmFsdWUoKTsKICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA9PT0gbmV3Q29udGVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHBvc2l0aW9uMyA9IHByZXNlcnZlQ3Vyc29yID8gZWRpdG9yLmdldFBvc2l0aW9uKCkgOiBudWxsOwogICAgICBjb25zdCBzZWxlY3Rpb25zID0gcHJlc2VydmVDdXJzb3IgPyBlZGl0b3IuZ2V0U2VsZWN0aW9ucygpIDogbnVsbDsKICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gcHJlc2VydmVDdXJzb3IgPyBlZGl0b3IuZ2V0U2Nyb2xsVG9wKCkgOiAwOwogICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gcHJlc2VydmVDdXJzb3IgPyBlZGl0b3IuZ2V0U2Nyb2xsTGVmdCgpIDogMDsKICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbUV4dGVybmFsID0gdHJ1ZTsKICAgICAgZWRpdG9yLnNldFZhbHVlKG5ld0NvbnRlbnQpOwogICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwgPSBmYWxzZTsKICAgICAgaWYgKHByZXNlcnZlQ3Vyc29yKSB7CiAgICAgICAgaWYgKHBvc2l0aW9uMykgewogICAgICAgICAgY29uc3QgbW9kZWwgPSBlZGl0b3IuZ2V0TW9kZWwoKTsKICAgICAgICAgIGNvbnN0IGxpbmVDb3VudCA9IG1vZGVsPy5nZXRMaW5lQ291bnQoKSB8fCAxOwogICAgICAgICAgY29uc3QgY2xhbXBlZExpbmUgPSBNYXRoLm1pbihwb3NpdGlvbjMubGluZU51bWJlciwgbGluZUNvdW50KTsKICAgICAgICAgIGNvbnN0IGxpbmVMZW5ndGggPSBtb2RlbD8uZ2V0TGluZU1heENvbHVtbihjbGFtcGVkTGluZSkgfHwgMTsKICAgICAgICAgIGNvbnN0IGNsYW1wZWRDb2x1bW4gPSBNYXRoLm1pbihwb3NpdGlvbjMuY29sdW1uLCBsaW5lTGVuZ3RoKTsKICAgICAgICAgIGVkaXRvci5zZXRQb3NpdGlvbih7IGxpbmVOdW1iZXI6IGNsYW1wZWRMaW5lLCBjb2x1bW46IGNsYW1wZWRDb2x1bW4gfSk7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxlY3Rpb25zICYmIHNlbGVjdGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgZWRpdG9yLnNldFNlbGVjdGlvbnMoc2VsZWN0aW9ucyk7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWRpdG9yLnNldFNjcm9sbFBvc2l0aW9uKHsgc2Nyb2xsVG9wLCBzY3JvbGxMZWZ0IH0pOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczE4KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlTW9uYWNvMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1jb2RlL2RlZXMtaW5wdXQtY29kZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CmluaXRfZGVlc19pY29uKCk7CnZhciBfX2VzRGVjb3JhdGUxOCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMTkgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIExBTkdVQUdFUyA9IFsKICB7IGtleTogInR5cGVzY3JpcHQiLCBsYWJlbDogIlR5cGVTY3JpcHQiIH0sCiAgeyBrZXk6ICJqYXZhc2NyaXB0IiwgbGFiZWw6ICJKYXZhU2NyaXB0IiB9LAogIHsga2V5OiAianNvbiIsIGxhYmVsOiAiSlNPTiIgfSwKICB7IGtleTogImh0bWwiLCBsYWJlbDogIkhUTUwiIH0sCiAgeyBrZXk6ICJjc3MiLCBsYWJlbDogIkNTUyIgfSwKICB7IGtleTogInNjc3MiLCBsYWJlbDogIlNDU1MiIH0sCiAgeyBrZXk6ICJtYXJrZG93biIsIGxhYmVsOiAiTWFya2Rvd24iIH0sCiAgeyBrZXk6ICJ5YW1sIiwgbGFiZWw6ICJZQU1MIiB9LAogIHsga2V5OiAieG1sIiwgbGFiZWw6ICJYTUwiIH0sCiAgeyBrZXk6ICJzcWwiLCBsYWJlbDogIlNRTCIgfSwKICB7IGtleTogInB5dGhvbiIsIGxhYmVsOiAiUHl0aG9uIiB9LAogIHsga2V5OiAiamF2YSIsIGxhYmVsOiAiSmF2YSIgfSwKICB7IGtleTogImNzaGFycCIsIGxhYmVsOiAiQyMiIH0sCiAgeyBrZXk6ICJjcHAiLCBsYWJlbDogIkMrKyIgfSwKICB7IGtleTogImdvIiwgbGFiZWw6ICJHbyIgfSwKICB7IGtleTogInJ1c3QiLCBsYWJlbDogIlJ1c3QiIH0sCiAgeyBrZXk6ICJzaGVsbCIsIGxhYmVsOiAiU2hlbGwiIH0sCiAgeyBrZXk6ICJwbGFpbnRleHQiLCBsYWJlbDogIlBsYWluIFRleHQiIH0KXTsKdmFyIERlZXNJbnB1dENvZGUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LWNvZGUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX3ZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF92YWx1ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYW5ndWFnZV9kZWNvcmF0b3JzOwogIGxldCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYW5ndWFnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGVpZ2h0X2RlY29yYXRvcnM7CiAgbGV0IF9oZWlnaHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oZWlnaHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dvcmRXcmFwX2RlY29yYXRvcnM7CiAgbGV0IF93b3JkV3JhcF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dvcmRXcmFwX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93TGluZU51bWJlcnNfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dMaW5lTnVtYmVyc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dMaW5lTnVtYmVyc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNMYW5ndWFnZURyb3Bkb3duT3Blbl9kZWNvcmF0b3JzOwogIGxldCBfaXNMYW5ndWFnZURyb3Bkb3duT3Blbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvcHlTdWNjZXNzX2RlY29yYXRvcnM7CiAgbGV0IF9jb3B5U3VjY2Vzc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvcHlTdWNjZXNzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dENvZGUyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9sYW5ndWFnZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2hlaWdodF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3dvcmRXcmFwX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc2hvd0xpbmVOdW1iZXJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2NvcHlTdWNjZXNzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTE4KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTgodGhpcywgbnVsbCwgX2xhbmd1YWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhbmd1YWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYW5ndWFnZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYW5ndWFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFuZ3VhZ2UgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzLCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOCh0aGlzLCBudWxsLCBfaGVpZ2h0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhlaWdodCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGVpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhlaWdodCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaGVpZ2h0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hlaWdodF9pbml0aWFsaXplcnMsIF9oZWlnaHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOCh0aGlzLCBudWxsLCBfd29yZFdyYXBfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAid29yZFdyYXAiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIndvcmRXcmFwIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLndvcmRXcmFwLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai53b3JkV3JhcCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF93b3JkV3JhcF9pbml0aWFsaXplcnMsIF93b3JkV3JhcF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE4KHRoaXMsIG51bGwsIF9zaG93TGluZU51bWJlcnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0xpbmVOdW1iZXJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93TGluZU51bWJlcnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0xpbmVOdW1iZXJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93TGluZU51bWJlcnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0xpbmVOdW1iZXJzX2luaXRpYWxpemVycywgX3Nob3dMaW5lTnVtYmVyc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE4KHRoaXMsIG51bGwsIF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNMYW5ndWFnZURyb3Bkb3duT3Blbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNMYW5ndWFnZURyb3Bkb3duT3BlbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2luaXRpYWxpemVycywgX2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOCh0aGlzLCBudWxsLCBfY29weVN1Y2Nlc3NfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29weVN1Y2Nlc3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvcHlTdWNjZXNzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvcHlTdWNjZXNzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jb3B5U3VjY2VzcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb3B5U3VjY2Vzc19pbml0aWFsaXplcnMsIF9jb3B5U3VjY2Vzc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE4KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0Q29kZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmAKICAgIDxkZWVzLWlucHV0LWNvZGUKICAgICAgbGFiZWw9IlR5cGVTY3JpcHQgQ29kZSIKICAgICAga2V5PSJjb2RlIgogICAgICBsYW5ndWFnZT0idHlwZXNjcmlwdCIKICAgICAgaGVpZ2h0PSIzMDBweCIKICAgICAgLnZhbHVlPSR7J2NvbnN0IGdyZWV0aW5nOiBzdHJpbmcgPSAiSGVsbG8gV29ybGQiO1xuY29uc29sZS5sb2coZ3JlZXRpbmcpOyd9CiAgICA+PC9kZWVzLWlucHV0LWNvZGU+CiAgYDsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsICIiKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2xhbmd1YWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9sYW5ndWFnZV9pbml0aWFsaXplcnMsICJ0eXBlc2NyaXB0IikpOwogICAgZ2V0IGxhbmd1YWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYW5ndWFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNoZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9sYW5ndWFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX2hlaWdodF9pbml0aWFsaXplcnMsICIyMDBweCIpKTsKICAgIGdldCBoZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBoZWlnaHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2hlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3dvcmRXcmFwX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfaGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfd29yZFdyYXBfaW5pdGlhbGl6ZXJzLCAib2ZmIikpOwogICAgZ2V0IHdvcmRXcmFwKCkgewogICAgICByZXR1cm4gdGhpcy4jd29yZFdyYXBfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB3b3JkV3JhcCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jd29yZFdyYXBfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93TGluZU51bWJlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF93b3JkV3JhcF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX3Nob3dMaW5lTnVtYmVyc19pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzaG93TGluZU51bWJlcnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93TGluZU51bWJlcnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93TGluZU51bWJlcnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dMaW5lTnVtYmVyc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9zaG93TGluZU51bWJlcnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0xhbmd1YWdlRHJvcGRvd25PcGVuKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNMYW5ndWFnZURyb3Bkb3duT3Blbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4odmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb3B5U3VjY2Vzc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9jb3B5U3VjY2Vzc19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgY29weVN1Y2Nlc3MoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb3B5U3VjY2Vzc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvcHlTdWNjZXNzKHZhbHVlMikgewogICAgICB0aGlzLiNjb3B5U3VjY2Vzc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgZWRpdG9yRWxlbWVudCA9IChfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9jb3B5U3VjY2Vzc19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICB9CgogICAgICAuaW5wdXQtd3JhcHBlciwKICAgICAgOmhvc3QoW2xhYmVsLXBvc2l0aW9uPSJ0b3AiXSkgLmlucHV0LXdyYXBwZXIsCiAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0ibGVmdCJdKSAuaW5wdXQtd3JhcHBlciwKICAgICAgOmhvc3QoW2xhYmVsLXBvc2l0aW9uPSJyaWdodCJdKSAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgfQoKICAgICAgLmNvZGUtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgIH0KCiAgICAgIC50b29sYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NyUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWxlZnQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItcmlnaHQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLmxhbmd1YWdlLXNlbGVjdG9yIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiA0cHggMTBweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmxhbmd1YWdlLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCAiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgfQoKICAgICAgLmxhbmd1YWdlLWRyb3Bkb3duIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgICAgei1pbmRleDogMTAwOwogICAgICAgIG1heC1oZWlnaHQ6IDI1MHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWluLXdpZHRoOiAxNDBweDsKICAgICAgfQoKICAgICAgLmxhbmd1YWdlLW9wdGlvbiB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1vcHRpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1vcHRpb24uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1JSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTAlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b24uYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b24uc3VjY2VzcyB7CiAgICAgICAgY29sb3I6IGhzbCgxNDIuMSA3Ni4yJSAzNi4zJSk7CiAgICAgIH0KCiAgICAgIC5lZGl0b3Itd3JhcHBlciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtbW9uYWNvIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWRpdmlkZXIgewogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLmNvZGUtY29udGFpbmVyIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IGN1cnJlbnRMYW5ndWFnZSA9IExBTkdVQUdFUy5maW5kKChsNikgPT4gbDYua2V5ID09PSB0aGlzLmxhbmd1YWdlKSB8fCBMQU5HVUFHRVNbMF07CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGhlaWdodDogJHt0aGlzLmhlaWdodH07CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1jb250YWluZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItbGVmdCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2Utc2VsZWN0b3IiPgogICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2UtYnV0dG9uIgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnRvZ2dsZUxhbmd1YWdlRHJvcGRvd259CiAgICAgICAgICAgICAgICAgIEBibHVyPSR7dGhpcy5oYW5kbGVMYW5ndWFnZUJsdXJ9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICR7Y3VycmVudExhbmd1YWdlLmxhYmVsfQogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpDaGV2cm9uRG93biJ9IGljb25TaXplPSIxNCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICR7dGhpcy5pc0xhbmd1YWdlRHJvcGRvd25PcGVuID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLWRyb3Bkb3duIj4KICAgICAgICAgICAgICAgICAgICAke0xBTkdVQUdFUy5tYXAoKGxhbmcpID0+IGIyYAogICAgICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2Utb3B0aW9uICR7bGFuZy5rZXkgPT09IHRoaXMubGFuZ3VhZ2UgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgICBAbW91c2Vkb3duPSR7KGUxMSkgPT4gdGhpcy5zZWxlY3RMYW5ndWFnZShlMTEsIGxhbmcua2V5KX0KICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgJHtsYW5nLmxhYmVsfQogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1yaWdodCI+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uICR7dGhpcy53b3JkV3JhcCA9PT0gIm9uIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgdGl0bGU9IldvcmQgV3JhcCIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMudG9nZ2xlV29yZFdyYXB9CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6V3JhcFRleHQifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiAke3RoaXMuc2hvd0xpbmVOdW1iZXJzID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgICB0aXRsZT0iTGluZSBOdW1iZXJzIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy50b2dnbGVMaW5lTnVtYmVyc30KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpIYXNoIn0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWRpdmlkZXIiPjwvZGl2PgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiAke3RoaXMuY29weVN1Y2Nlc3MgPyAic3VjY2VzcyIgOiAiIn0iCiAgICAgICAgICAgICAgICB0aXRsZT0iQ29weSBDb2RlIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5jb3B5Q29kZX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7dGhpcy5jb3B5U3VjY2VzcyA/ICJsdWNpZGU6Q2hlY2siIDogImx1Y2lkZTpDb3B5In0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICB0aXRsZT0iRXhwYW5kIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5vcGVuRnVsbHNjcmVlbn0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpNYXhpbWl6ZTIifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLXdyYXBwZXIiPgogICAgICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbW9uYWNvCiAgICAgICAgICAgICAgLmNvbnRlbnQ9JHt0aGlzLnZhbHVlfQogICAgICAgICAgICAgIC5sYW5ndWFnZT0ke3RoaXMubGFuZ3VhZ2V9CiAgICAgICAgICAgICAgLndvcmRXcmFwPSR7dGhpcy53b3JkV3JhcH0KICAgICAgICAgICAgICBAY29udGVudC1jaGFuZ2U9JHt0aGlzLmhhbmRsZUNvbnRlbnRDaGFuZ2V9CiAgICAgICAgICAgID48L2RlZXMtd29ya3NwYWNlLW1vbmFjbz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuZWRpdG9yRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgIGlmICh0aGlzLmVkaXRvckVsZW1lbnQpIHsKICAgICAgICB0aGlzLmVkaXRvckVsZW1lbnQuY29udGVudFN1YmplY3Quc3Vic2NyaWJlKChuZXdDb250ZW50KSA9PiB7CiAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPT0gbmV3Q29udGVudCkgewogICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3Q29udGVudDsKICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHRvZ2dsZUxhbmd1YWdlRHJvcGRvd24oKSB7CiAgICAgIHRoaXMuaXNMYW5ndWFnZURyb3Bkb3duT3BlbiA9ICF0aGlzLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW47CiAgICB9CiAgICBoYW5kbGVMYW5ndWFnZUJsdXIoKSB7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIHRoaXMuaXNMYW5ndWFnZURyb3Bkb3duT3BlbiA9IGZhbHNlOwogICAgICB9LCAxNTApOwogICAgfQogICAgYXN5bmMgc2VsZWN0TGFuZ3VhZ2UoZTExLCBsYW5ndWFnZUtleSkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlS2V5OwogICAgICB0aGlzLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSBmYWxzZTsKICAgICAgaWYgKHRoaXMuZWRpdG9yRWxlbWVudCkgewogICAgICAgIHRoaXMuZWRpdG9yRWxlbWVudC5sYW5ndWFnZSA9IGxhbmd1YWdlS2V5OwogICAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IHRoaXMuZWRpdG9yRWxlbWVudC5lZGl0b3JEZWZlcnJlZC5wcm9taXNlOwogICAgICAgIGNvbnN0IG1vZGVsID0gZWRpdG9yLmdldE1vZGVsKCk7CiAgICAgICAgaWYgKG1vZGVsKSB7CiAgICAgICAgICB3aW5kb3cubW9uYWNvLmVkaXRvci5zZXRNb2RlbExhbmd1YWdlKG1vZGVsLCBsYW5ndWFnZUtleSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB0b2dnbGVXb3JkV3JhcCgpIHsKICAgICAgdGhpcy53b3JkV3JhcCA9IHRoaXMud29yZFdyYXAgPT09ICJvbiIgPyAib2ZmIiA6ICJvbiI7CiAgICAgIHRoaXMudXBkYXRlRWRpdG9yT3B0aW9uKCJ3b3JkV3JhcCIsIHRoaXMud29yZFdyYXApOwogICAgfQogICAgdG9nZ2xlTGluZU51bWJlcnMoKSB7CiAgICAgIHRoaXMuc2hvd0xpbmVOdW1iZXJzID0gIXRoaXMuc2hvd0xpbmVOdW1iZXJzOwogICAgICB0aGlzLnVwZGF0ZUVkaXRvck9wdGlvbigibGluZU51bWJlcnMiLCB0aGlzLnNob3dMaW5lTnVtYmVycyA/ICJvbiIgOiAib2ZmIik7CiAgICB9CiAgICBhc3luYyB1cGRhdGVFZGl0b3JPcHRpb24ob3B0aW9uMiwgdmFsdWUyKSB7CiAgICAgIGlmICh0aGlzLmVkaXRvckVsZW1lbnQpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCB0aGlzLmVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBlZGl0b3IudXBkYXRlT3B0aW9ucyh7IFtvcHRpb24yXTogdmFsdWUyIH0pOwogICAgICB9CiAgICB9CiAgICBhc3luYyBjb3B5Q29kZSgpIHsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLnZhbHVlKTsKICAgICAgICB0aGlzLmNvcHlTdWNjZXNzID0gdHJ1ZTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIHRoaXMuY29weVN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICB9LCAyZTMpOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY29weSBjb2RlOiIsIGVycik7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZUNvbnRlbnRDaGFuZ2UoZTExKSB7CiAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBlMTEuZGV0YWlsOwogICAgICBpZiAodGhpcy52YWx1ZSAhPT0gbmV3Q29udGVudCkgewogICAgICAgIHRoaXMudmFsdWUgPSBuZXdDb250ZW50OwogICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBvcGVuRnVsbHNjcmVlbigpIHsKICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZTsKICAgICAgbGV0IG1vZGFsRWRpdG9yRWxlbWVudCA9IG51bGw7CiAgICAgIGxldCBtb2RhbExhbmd1YWdlID0gdGhpcy5sYW5ndWFnZTsKICAgICAgbGV0IG1vZGFsV29yZFdyYXAgPSB0aGlzLndvcmRXcmFwOwogICAgICBsZXQgbW9kYWxTaG93TGluZU51bWJlcnMgPSB0aGlzLnNob3dMaW5lTnVtYmVyczsKICAgICAgbGV0IG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSBmYWxzZTsKICAgICAgbGV0IG1vZGFsQ29weVN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgY29uc3QgZ2V0TGFuZ3VhZ2VMYWJlbCA9ICgpID0+IHsKICAgICAgICBjb25zdCBsYW5nID0gTEFOR1VBR0VTLmZpbmQoKGw2KSA9PiBsNi5rZXkgPT09IG1vZGFsTGFuZ3VhZ2UpOwogICAgICAgIHJldHVybiBsYW5nID8gbGFuZy5sYWJlbCA6ICJUeXBlU2NyaXB0IjsKICAgICAgfTsKICAgICAgY29uc3QgdXBkYXRlVG9vbGJhclVJID0gKG1vZGFsMikgPT4gewogICAgICAgIGNvbnN0IHRvb2xiYXIyID0gbW9kYWwyLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbC10b29sYmFyIik7CiAgICAgICAgaWYgKCF0b29sYmFyMikKICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCBsYW5nQnRuID0gdG9vbGJhcjIucXVlcnlTZWxlY3RvcigiLmxhbmd1YWdlLWJ1dHRvbiBzcGFuIik7CiAgICAgICAgaWYgKGxhbmdCdG4pCiAgICAgICAgICBsYW5nQnRuLnRleHRDb250ZW50ID0gZ2V0TGFuZ3VhZ2VMYWJlbCgpOwogICAgICAgIGNvbnN0IHdyYXBCdG4gPSB0b29sYmFyMi5xdWVyeVNlbGVjdG9yKCIud3JhcC1idG4iKTsKICAgICAgICBpZiAod3JhcEJ0bikgewogICAgICAgICAgd3JhcEJ0bi5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiLCBtb2RhbFdvcmRXcmFwID09PSAib24iKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgbGluZXNCdG4gPSB0b29sYmFyMi5xdWVyeVNlbGVjdG9yKCIubGluZXMtYnRuIik7CiAgICAgICAgaWYgKGxpbmVzQnRuKSB7CiAgICAgICAgICBsaW5lc0J0bi5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiLCBtb2RhbFNob3dMaW5lTnVtYmVycyk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGNvcHlCdG4gPSB0b29sYmFyMi5xdWVyeVNlbGVjdG9yKCIuY29weS1idG4iKTsKICAgICAgICBjb25zdCBjb3B5SWNvbiA9IGNvcHlCdG4/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaWNvbiIpOwogICAgICAgIGlmIChjb3B5QnRuICYmIGNvcHlJY29uKSB7CiAgICAgICAgICBjb3B5QnRuLmNsYXNzTGlzdC50b2dnbGUoInN1Y2Nlc3MiLCBtb2RhbENvcHlTdWNjZXNzKTsKICAgICAgICAgIGNvcHlJY29uLmljb24gPSBtb2RhbENvcHlTdWNjZXNzID8gImx1Y2lkZTpDaGVjayIgOiAibHVjaWRlOkNvcHkiOwogICAgICAgIH0KICAgICAgICBjb25zdCBkcm9wZG93biA9IHRvb2xiYXIyLnF1ZXJ5U2VsZWN0b3IoIi5sYW5ndWFnZS1kcm9wZG93biIpOwogICAgICAgIGlmIChkcm9wZG93bikgewogICAgICAgICAgZHJvcGRvd24uc3R5bGUuZGlzcGxheSA9IG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPyAiYmxvY2siIDogIm5vbmUiOwogICAgICAgIH0KICAgICAgfTsKICAgICAgY29uc3QgbW9kYWwgPSBhd2FpdCBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgICAgaGVhZGluZzogdGhpcy5sYWJlbCB8fCAiQ29kZSBFZGl0b3IiLAogICAgICAgIHdpZHRoOiAiZnVsbHNjcmVlbiIsCiAgICAgICAgY29udGVudFBhZGRpbmc6IDAsCiAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgPHN0eWxlPgogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1sZWZ0IHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1yaWdodCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogNHB4OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLXNlbGVjdG9yIHsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLWJ1dHRvbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogNnB4OwogICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAubGFuZ3VhZ2UtZHJvcGRvd24gewogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIHRvcDogMTAwJTsKICAgICAgICAgICAgbGVmdDogMDsKICAgICAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgICAgICAgICB6LWluZGV4OiAxMDA7CiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDI1MHB4OwogICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgICAgICBtaW4td2lkdGg6IDE0MHB4OwogICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLW9wdGlvbiB7CiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC5sYW5ndWFnZS1vcHRpb246aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLW9wdGlvbi5zZWxlY3RlZCB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1idXR0b24gewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLnRvb2xiYXItYnV0dG9uLmFjdGl2ZSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLnRvb2xiYXItYnV0dG9uLnN1Y2Nlc3MgewogICAgICAgICAgICBjb2xvcjogaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC50b29sYmFyLWRpdmlkZXIgewogICAgICAgICAgICB3aWR0aDogMXB4OwogICAgICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtZWRpdG9yLXdyYXBwZXIgewogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDE3NXB4KTsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICB9CiAgICAgICAgPC9zdHlsZT4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC10b29sYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItbGVmdCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLXNlbGVjdG9yIj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsYW5ndWFnZS1idXR0b24iPgogICAgICAgICAgICAgICAgPHNwYW4+JHtnZXRMYW5ndWFnZUxhYmVsKCl9PC9zcGFuPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Q2hldnJvbkRvd24ifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLWRyb3Bkb3duIj4KICAgICAgICAgICAgICAgICR7TEFOR1VBR0VTLm1hcCgobGFuZykgPT4gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2Utb3B0aW9uICR7bGFuZy5rZXkgPT09IG1vZGFsTGFuZ3VhZ2UgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgIGRhdGEtbGFuZz0iJHtsYW5nLmtleX0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAke2xhbmcubGFiZWx9CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLXJpZ2h0Ij4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbGJhci1idXR0b24gd3JhcC1idG4gJHttb2RhbFdvcmRXcmFwID09PSAib24iID8gImFjdGl2ZSIgOiAiIn0iIHRpdGxlPSJXb3JkIFdyYXAiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOldyYXBUZXh0In0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRvb2xiYXItYnV0dG9uIGxpbmVzLWJ0biAke21vZGFsU2hvd0xpbmVOdW1iZXJzID8gImFjdGl2ZSIgOiAiIn0iIHRpdGxlPSJMaW5lIE51bWJlcnMiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOkhhc2gifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1kaXZpZGVyIj48L2Rpdj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbGJhci1idXR0b24gY29weS1idG4iIHRpdGxlPSJDb3B5IENvZGUiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOkNvcHkifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWVkaXRvci13cmFwcGVyIj4KICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tb25hY28KICAgICAgICAgICAgLmNvbnRlbnQ9JHtjdXJyZW50VmFsdWV9CiAgICAgICAgICAgIC5sYW5ndWFnZT0ke21vZGFsTGFuZ3VhZ2V9CiAgICAgICAgICAgIC53b3JkV3JhcD0ke21vZGFsV29yZFdyYXB9CiAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS1tb25hY28+CiAgICAgICAgPC9kaXY+CiAgICAgIGAsCiAgICAgICAgbWVudU9wdGlvbnM6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIkNhbmNlbCIsCiAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsUmVmKSA9PiB7CiAgICAgICAgICAgICAgYXdhaXQgbW9kYWxSZWYuZGVzdHJveSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiU2F2ZSAmIENsb3NlIiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWxSZWYpID0+IHsKICAgICAgICAgICAgICBtb2RhbEVkaXRvckVsZW1lbnQgPSBtb2RhbFJlZi5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tb25hY28iKTsKICAgICAgICAgICAgICBpZiAobW9kYWxFZGl0b3JFbGVtZW50KSB7CiAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCBtb2RhbEVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZWRpdG9yLmdldFZhbHVlKCk7CiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKG5ld1ZhbHVlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYXdhaXQgbW9kYWxSZWYuZGVzdHJveSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9KTsKICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCAxMDApKTsKICAgICAgbW9kYWxFZGl0b3JFbGVtZW50ID0gbW9kYWwuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgIGNvbnN0IHRvb2xiYXIgPSBtb2RhbC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubW9kYWwtdG9vbGJhciIpOwogICAgICBpZiAodG9vbGJhcikgewogICAgICAgIGNvbnN0IGxhbmdCdG4gPSB0b29sYmFyLnF1ZXJ5U2VsZWN0b3IoIi5sYW5ndWFnZS1idXR0b24iKTsKICAgICAgICBsYW5nQnRuPy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgIG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSAhbW9kYWxMYW5ndWFnZURyb3Bkb3duT3BlbjsKICAgICAgICAgIHVwZGF0ZVRvb2xiYXJVSShtb2RhbCk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgbGFuZ09wdGlvbnMgPSB0b29sYmFyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5sYW5ndWFnZS1vcHRpb24iKTsKICAgICAgICBsYW5nT3B0aW9ucy5mb3JFYWNoKChvcHRpb24yKSA9PiB7CiAgICAgICAgICBvcHRpb24yLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjb25zdCBuZXdMYW5nID0gb3B0aW9uMi5kYXRhc2V0Lmxhbmc7CiAgICAgICAgICAgIGlmIChuZXdMYW5nICYmIG1vZGFsRWRpdG9yRWxlbWVudCkgewogICAgICAgICAgICAgIG1vZGFsTGFuZ3VhZ2UgPSBuZXdMYW5nOwogICAgICAgICAgICAgIG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSBmYWxzZTsKICAgICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCBtb2RhbEVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgICAgICBjb25zdCBtb2RlbCA9IGVkaXRvci5nZXRNb2RlbCgpOwogICAgICAgICAgICAgIGlmIChtb2RlbCkgewogICAgICAgICAgICAgICAgd2luZG93Lm1vbmFjby5lZGl0b3Iuc2V0TW9kZWxMYW5ndWFnZShtb2RlbCwgbmV3TGFuZyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxhbmdPcHRpb25zLmZvckVhY2goKG9wdCkgPT4gb3B0LmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGVkIikpOwogICAgICAgICAgICAgIG9wdGlvbjIuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKTsKICAgICAgICAgICAgICB1cGRhdGVUb29sYmFyVUkobW9kYWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICBjb25zdCB3cmFwQnRuID0gdG9vbGJhci5xdWVyeVNlbGVjdG9yKCIud3JhcC1idG4iKTsKICAgICAgICB3cmFwQnRuPy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGFzeW5jICgpID0+IHsKICAgICAgICAgIG1vZGFsV29yZFdyYXAgPSBtb2RhbFdvcmRXcmFwID09PSAib24iID8gIm9mZiIgOiAib24iOwogICAgICAgICAgaWYgKG1vZGFsRWRpdG9yRWxlbWVudCkgewogICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCBtb2RhbEVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgICAgZWRpdG9yLnVwZGF0ZU9wdGlvbnMoeyB3b3JkV3JhcDogbW9kYWxXb3JkV3JhcCB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHVwZGF0ZVRvb2xiYXJVSShtb2RhbCk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgbGluZXNCdG4gPSB0b29sYmFyLnF1ZXJ5U2VsZWN0b3IoIi5saW5lcy1idG4iKTsKICAgICAgICBsaW5lc0J0bj8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBhc3luYyAoKSA9PiB7CiAgICAgICAgICBtb2RhbFNob3dMaW5lTnVtYmVycyA9ICFtb2RhbFNob3dMaW5lTnVtYmVyczsKICAgICAgICAgIGlmIChtb2RhbEVkaXRvckVsZW1lbnQpIHsKICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgbW9kYWxFZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgICAgIGVkaXRvci51cGRhdGVPcHRpb25zKHsgbGluZU51bWJlcnM6IG1vZGFsU2hvd0xpbmVOdW1iZXJzID8gIm9uIiA6ICJvZmYiIH0pOwogICAgICAgICAgfQogICAgICAgICAgdXBkYXRlVG9vbGJhclVJKG1vZGFsKTsKICAgICAgICB9KTsKICAgICAgICBjb25zdCBjb3B5QnRuID0gdG9vbGJhci5xdWVyeVNlbGVjdG9yKCIuY29weS1idG4iKTsKICAgICAgICBjb3B5QnRuPy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChtb2RhbEVkaXRvckVsZW1lbnQpIHsKICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgbW9kYWxFZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQzID0gZWRpdG9yLmdldFZhbHVlKCk7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29udGVudDMpOwogICAgICAgICAgICAgIG1vZGFsQ29weVN1Y2Nlc3MgPSB0cnVlOwogICAgICAgICAgICAgIHVwZGF0ZVRvb2xiYXJVSShtb2RhbCk7CiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICBtb2RhbENvcHlTdWNjZXNzID0gZmFsc2U7CiAgICAgICAgICAgICAgICB1cGRhdGVUb29sYmFyVUkobW9kYWwpOwogICAgICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjb3B5IGNvZGU6IiwgZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgICAgaWYgKG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gJiYgIWxhbmdCdG4/LmNvbnRhaW5zKGUxMS50YXJnZXQpKSB7CiAgICAgICAgICAgIG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSBmYWxzZTsKICAgICAgICAgICAgdXBkYXRlVG9vbGJhclVJKG1vZGFsKTsKICAgICAgICAgIH0KICAgICAgICB9LCB7IG9uY2U6IHRydWUgfSk7CiAgICAgIH0KICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgICBpZiAodGhpcy5lZGl0b3JFbGVtZW50KSB7CiAgICAgICAgdGhpcy5lZGl0b3JFbGVtZW50LmNvbnRlbnQgPSB2YWx1ZTI7CiAgICAgICAgdGhpcy5lZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2UudGhlbigoZWRpdG9yKSA9PiB7CiAgICAgICAgICBpZiAoZWRpdG9yLmdldFZhbHVlKCkgIT09IHZhbHVlMikgewogICAgICAgICAgICBlZGl0b3Iuc2V0VmFsdWUodmFsdWUyKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dENvZGUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRhdGVwaWNrZXIvZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxMSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tb3V0cHV0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDUsIDI0MiwgMC4xKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5kYXRlLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGRhdGVQaWNrZXIgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZGF0ZXBpY2tlciIpOwogIGlmIChkYXRlUGlja2VyKSB7CiAgICBkYXRlUGlja2VyLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChldmVudCkgPT4gewogICAgICBjb25zb2xlLmxvZygiQmFzaWMgZGF0ZSBzZWxlY3RlZDoiLCBldmVudC50YXJnZXQudmFsdWUpOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhc2ljIERhdGUgUGlja2VyIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBkYXRlIHNlbGVjdGlvbiB3aXRob3V0IHRpbWUifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iU2VsZWN0IERhdGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iQ2hvb3NlIGEgZGF0ZSBmcm9tIHRoZSBjYWxlbmRhciIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGRhdGVUaW1lUGlja2VyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LWRhdGVwaWNrZXJbbGFiZWw9IkV2ZW50IERhdGUgJiBUaW1lIl0nKTsKICBjb25zdCBhcHBvaW50bWVudFBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kYXRlcGlja2VyW2xhYmVsPSJBcHBvaW50bWVudCJdJyk7CiAgaWYgKGRhdGVUaW1lUGlja2VyKSB7CiAgICBkYXRlVGltZVBpY2tlci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgdmFsdWUyID0gZXZlbnQudGFyZ2V0LnZhbHVlOwogICAgICBjb25zb2xlLmxvZygiMjRoIGZvcm1hdCBkYXRldGltZToiLCB2YWx1ZTIpOwogICAgfSk7CiAgfQogIGlmIChhcHBvaW50bWVudFBpY2tlcikgewogICAgYXBwb2ludG1lbnRQaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHZhbHVlMiA9IGV2ZW50LnRhcmdldC52YWx1ZTsKICAgICAgY29uc29sZS5sb2coIjEyaCBmb3JtYXQgZGF0ZXRpbWU6IiwgdmFsdWUyKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEYXRlIGFuZCBUaW1lIFNlbGVjdGlvbiJ9IC5zdWJ0aXRsZT0keyJEYXRlIHBpY2tlcnMgd2l0aCB0aW1lIHNlbGVjdGlvbiBpbiBkaWZmZXJlbnQgZm9ybWF0cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJFdmVudCBEYXRlICYgVGltZSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJTZWxlY3QgYm90aCBkYXRlIGFuZCB0aW1lICgyNC1ob3VyIGZvcm1hdCkiCiAgICAgICAgICAuZW5hYmxlVGltZT0ke3RydWV9CiAgICAgICAgICB0aW1lRm9ybWF0PSIyNGgiCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJBcHBvaW50bWVudCIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJEYXRlIGFuZCB0aW1lIHdpdGggQU0vUE0gc2VsZWN0b3IgKDE1LW1pbnV0ZSBpbmNyZW1lbnRzKSIKICAgICAgICAgIC5lbmFibGVUaW1lPSR7dHJ1ZX0KICAgICAgICAgIHRpbWVGb3JtYXQ9IjEyaCIKICAgICAgICAgIC5taW51dGVJbmNyZW1lbnQ9JHsxNX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHRpbWV6b25lUGlja2VycyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgdGltZXpvbmVQaWNrZXJzLmZvckVhY2goKHBpY2tlcikgPT4gewogICAgcGlja2VyLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChldmVudCkgPT4gewogICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7CiAgICAgIGNvbnNvbGUubG9nKGAke3RhcmdldC5sYWJlbH0gdmFsdWU6YCwgdGFyZ2V0LnZhbHVlKTsKICAgICAgY29uc3QgaW5wdXQgPSB0YXJnZXQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmRhdGUtaW5wdXQiKTsKICAgICAgaWYgKGlucHV0KSB7CiAgICAgICAgY29uc29sZS5sb2coYCR7dGFyZ2V0LmxhYmVsfSBmb3JtYXR0ZWQ6YCwgaW5wdXQudmFsdWUpOwogICAgICB9CiAgICB9KTsKICB9KTsKfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJUaW1lem9uZSBTdXBwb3J0In0gLnN1YnRpdGxlPSR7IkRhdGUgYW5kIHRpbWUgc2VsZWN0aW9uIHdpdGggdGltZXpvbmUgYXdhcmVuZXNzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9Ik1lZXRpbmcgVGltZSAod2l0aCBUaW1lem9uZSkiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iU2VsZWN0IGEgZGF0ZS90aW1lIGFuZCB0aW1lem9uZSBmb3IgdGhlIG1lZXRpbmciCiAgICAgICAgICAuZW5hYmxlVGltZT0ke3RydWV9CiAgICAgICAgICAuZW5hYmxlVGltZXpvbmU9JHt0cnVlfQogICAgICAgICAgdGltZUZvcm1hdD0iMjRoIgogICAgICAgICAgdGltZXpvbmU9IkFtZXJpY2EvTmV3X1lvcmsiCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJHbG9iYWwgRXZlbnQgU2NoZWR1bGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iU2NoZWR1bGUgYW4gZXZlbnQgYWNyb3NzIGRpZmZlcmVudCB0aW1lem9uZXMiCiAgICAgICAgICAuZW5hYmxlVGltZT0ke3RydWV9CiAgICAgICAgICAuZW5hYmxlVGltZXpvbmU9JHt0cnVlfQogICAgICAgICAgdGltZUZvcm1hdD0iMTJoIgogICAgICAgICAgdGltZXpvbmU9IkV1cm9wZS9Mb25kb24iCiAgICAgICAgICAubWludXRlSW5jcmVtZW50PSR7MzB9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBmdXR1cmVEYXRlUGlja2VyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LWRhdGVwaWNrZXIiKTsKICBpZiAoZnV0dXJlRGF0ZVBpY2tlcikgewogICAgZnV0dXJlRGF0ZVBpY2tlci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgdmFsdWUyID0gZXZlbnQudGFyZ2V0LnZhbHVlOwogICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodmFsdWUyKTsKICAgICAgICBjb25zdCB0b2RheSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpOwogICAgICAgIGNvbnN0IGRheXNEaWZmID0gTWF0aC5mbG9vcigoc2VsZWN0ZWREYXRlLmdldFRpbWUoKSAtIHRvZGF5LmdldFRpbWUoKSkgLyAoMWUzICogNjAgKiA2MCAqIDI0KSk7CiAgICAgICAgY29uc29sZS5sb2coYFNlbGVjdGVkIGRhdGUgaXMgJHtkYXlzRGlmZn0gZGF5cyBmcm9tIHRvZGF5YCk7CiAgICAgIH0KICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEYXRlIFJhbmdlIENvbnN0cmFpbnRzIn0gLnN1YnRpdGxlPSR7IkxpbWl0IHNlbGVjdGFibGUgZGF0ZXMgd2l0aCBtaW4gYW5kIG1heCB2YWx1ZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iRnV0dXJlIERhdGUgT25seSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJDYW4gb25seSBzZWxlY3QgZGF0ZXMgZnJvbSB0b2RheSB0byA5MCBkYXlzIGluIHRoZSBmdXR1cmUiCiAgICAgICAgICAubWluRGF0ZT0keygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKX0KICAgICAgICAgIC5tYXhEYXRlPSR7bmV3IERhdGUoRGF0ZS5ub3coKSArIDkwICogMjQgKiA2MCAqIDYwICogMWUzKS50b0lTT1N0cmluZygpfQogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZm9ybWF0dGVyczIgPSB7CiAgICAiREQvTU0vWVlZWSI6ICJFdXJvcGVhbiIsCiAgICAiTU0vREQvWVlZWSI6ICJVUyIsCiAgICAiWVlZWS1NTS1ERCI6ICJJU08iCiAgfTsKICBjb25zdCBkYXRlUGlja2VycyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgZGF0ZVBpY2tlcnMuZm9yRWFjaCgocGlja2VyKSA9PiB7CiAgICBwaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDsKICAgICAgY29uc3QgaW5wdXQgPSB0YXJnZXQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmRhdGUtaW5wdXQiKTsKICAgICAgaWYgKGlucHV0KSB7CiAgICAgICAgY29uc29sZS5sb2coYCR7dGFyZ2V0LmxhYmVsfSBmb3JtYXQ6YCwgaW5wdXQudmFsdWUpOwogICAgICB9CiAgICB9KTsKICB9KTsKfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEYXRlIEZvcm1hdHMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IGRhdGUgZGlzcGxheSBmb3JtYXRzIGZvciB2YXJpb3VzIHJlZ2lvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXRlLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgICAgbGFiZWw9IkV1cm9wZWFuIEZvcm1hdCIKICAgICAgICAgICAgZGF0ZUZvcm1hdD0iREQvTU0vWVlZWSIKICAgICAgICAgICAgLnZhbHVlPSR7KC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICAgIGxhYmVsPSJVUyBGb3JtYXQiCiAgICAgICAgICAgIGRhdGVGb3JtYXQ9Ik1NL0REL1lZWVkiCiAgICAgICAgICAgIC52YWx1ZT0keygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgICBsYWJlbD0iSVNPIEZvcm1hdCIKICAgICAgICAgICAgZGF0ZUZvcm1hdD0iWVlZWS1NTS1ERCIKICAgICAgICAgICAgLnZhbHVlPSR7KC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCByZXF1aXJlZFBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyW3JlcXVpcmVkXSIpOwogIGlmIChyZXF1aXJlZFBpY2tlcikgewogICAgcmVxdWlyZWRQaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc3QgcGlja2VyID0gcmVxdWlyZWRQaWNrZXI7CiAgICAgIGNvbnN0IHZhbHVlMiA9IHBpY2tlci5nZXRWYWx1ZSgpOwogICAgICBpZiAoIXZhbHVlMikgewogICAgICAgIGNvbnNvbGUubG9nKCJSZXF1aXJlZCBkYXRlIGZpZWxkIGlzIGVtcHR5Iik7CiAgICAgIH0KICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGb3JtIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJSZXF1aXJlZCBhbmQgZGlzYWJsZWQgc3RhdGVzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkJpcnRoIERhdGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhpcyBmaWVsZCBpcyByZXF1aXJlZCIKICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICBwbGFjZWhvbGRlcj0iU2VsZWN0IHlvdXIgYmlydGggZGF0ZSIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkRpc2FibGVkIERhdGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhpcyBmaWVsZCBjYW5ub3QgYmUgZWRpdGVkIgogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC52YWx1ZT0keygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHVzUGlja2VyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LWRhdGVwaWNrZXJbbGFiZWw9IlVTIENhbGVuZGFyIl0nKTsKICBjb25zdCBldVBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kYXRlcGlja2VyW2xhYmVsPSJFVSBDYWxlbmRhciJdJyk7CiAgaWYgKHVzUGlja2VyKSB7CiAgICBjb25zb2xlLmxvZygiVVMgQ2FsZW5kYXIgc3RhcnRzIG9uIFN1bmRheSAoMCkiKTsKICB9CiAgaWYgKGV1UGlja2VyKSB7CiAgICBjb25zb2xlLmxvZygiRVUgQ2FsZW5kYXIgc3RhcnRzIG9uIE1vbmRheSAoMSkiKTsKICB9Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQ2FsZW5kYXIgQ3VzdG9taXphdGlvbiJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgd2VlayBzdGFydCBkYXlzIGZvciB2YXJpb3VzIHJlZ2lvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXRlLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgICAgbGFiZWw9IlVTIENhbGVuZGFyIgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iV2VlayBzdGFydHMgb24gU3VuZGF5IgogICAgICAgICAgICAud2Vla1N0YXJ0c09uPSR7MH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgICBsYWJlbD0iRVUgQ2FsZW5kYXIiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJXZWVrIHN0YXJ0cyBvbiBNb25kYXkiCiAgICAgICAgICAgIC53ZWVrU3RhcnRzT249JHsxfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBnZW5lcmF0ZVdlZWtlbmRzID0gKCkgPT4gewogICAgY29uc3Qgd2Vla2VuZHMgPSBbXTsKICAgIGNvbnN0IG5vdzIgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgIGNvbnN0IHllYXIgPSBub3cyLmdldEZ1bGxZZWFyKCk7CiAgICBjb25zdCBtb250aCA9IG5vdzIuZ2V0TW9udGgoKTsKICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSk7CiAgICB3aGlsZSAoZGF0ZS5nZXRNb250aCgpID09PSBtb250aCkgewogICAgICBpZiAoZGF0ZS5nZXREYXkoKSA9PT0gMCB8fCBkYXRlLmdldERheSgpID09PSA2KSB7CiAgICAgICAgd2Vla2VuZHMucHVzaChuZXcgRGF0ZShkYXRlKS50b0lTT1N0cmluZygpKTsKICAgICAgfQogICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAxKTsKICAgIH0KICAgIHJldHVybiB3ZWVrZW5kczsKICB9OwogIGNvbnN0IHBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgaWYgKHBpY2tlcikgewogICAgcGlja2VyLmRpc2FibGVkRGF0ZXMgPSBnZW5lcmF0ZVdlZWtlbmRzKCk7CiAgICBjb25zb2xlLmxvZygiRGlzYWJsZWQgd2Vla2VuZCBkYXRlcyBmb3IgY3VycmVudCBtb250aCIpOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEaXNhYmxlZCBEYXRlcyJ9IC5zdWJ0aXRsZT0keyJDYWxlbmRhciB3aXRoIHNwZWNpZmljIGRhdGVzIGRpc2FibGVkICh3ZWVrZW5kcyBpbiBjdXJyZW50IG1vbnRoKSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJBdmFpbGFiaWxpdHkgQ2FsZW5kYXIiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iV2Vla2VuZHMgYXJlIGRpc2FibGVkIGZvciB0aGUgY3VycmVudCBtb250aCIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgY29uc3QgY3VycmVudE1vbnRoID0gdG9kYXkuZ2V0TW9udGgoKTsKICBjb25zdCBjdXJyZW50WWVhciA9IHRvZGF5LmdldEZ1bGxZZWFyKCk7CiAgY29uc3Qgc2FtcGxlRXZlbnRzID0gWwogICAgLy8gQ3VycmVudCB3ZWVrIGV2ZW50cwogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0ke3RvZGF5LmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgdGl0bGU6ICJUZWFtIE1lZXRpbmciLAogICAgICB0eXBlOiAiaW5mbyIsCiAgICAgIGNvdW50OiAyCiAgICB9LAogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0keyh0b2RheS5nZXREYXRlKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgdGl0bGU6ICJQcm9qZWN0IERlYWRsaW5lIiwKICAgICAgdHlwZTogIndhcm5pbmciCiAgICB9LAogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0keyh0b2RheS5nZXREYXRlKCkgKyAyKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgdGl0bGU6ICJSZWxlYXNlIERheSIsCiAgICAgIHR5cGU6ICJzdWNjZXNzIgogICAgfSwKICAgIHsKICAgICAgZGF0ZTogYCR7Y3VycmVudFllYXJ9LSR7KGN1cnJlbnRNb250aCArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX0tJHsodG9kYXkuZ2V0RGF0ZSgpICsgNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfWAsCiAgICAgIHRpdGxlOiAiVXJnZW50IEZpeCBSZXF1aXJlZCIsCiAgICAgIHR5cGU6ICJlcnJvciIKICAgIH0sCiAgICAvLyBNdWx0aXBsZSBldmVudHMgb24gb25lIGRheQogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0keyh0b2RheS5nZXREYXRlKCkgKyA3KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgdGl0bGU6ICJNdWx0aXBsZSBFdmVudHMgVG9kYXkiLAogICAgICB0eXBlOiAiaW5mbyIsCiAgICAgIGNvdW50OiA1CiAgICB9LAogICAgLy8gTmV4dCBtb250aCBldmVudAogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMikudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0xNWAsCiAgICAgIHRpdGxlOiAiRnV0dXJlIFBsYW5uaW5nIFNlc3Npb24iLAogICAgICB0eXBlOiAiaW5mbyIKICAgIH0KICBdOwogIGNvbnN0IHBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgaWYgKHBpY2tlcikgewogICAgcGlja2VyLmV2ZW50cyA9IHNhbXBsZUV2ZW50czsKICAgIGNvbnNvbGUubG9nKCJDYWxlbmRhciBldmVudHMgbG9hZGVkOiIsIHNhbXBsZUV2ZW50cyk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkNhbGVuZGFyIHdpdGggRXZlbnRzIn0gLnN1YnRpdGxlPSR7IlZpc3VhbCBmZWVkYmFjayBmb3Igc2NoZWR1bGVkIGV2ZW50cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJFdmVudCBDYWxlbmRhciIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJEYXlzIHdpdGggY29sb3JlZCBkb3RzIGhhdmUgZXZlbnRzLiBIb3ZlciB0byBzZWUgZGV0YWlscy4iCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgPHN0cm9uZz5FdmVudCBMZWdlbmQ6PC9zdHJvbmc+PGJyPgogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDk2OWRhOyI+4pePIEluZm88L3NwYW4+IHwgCiAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICNkMjk5MjI7Ij7il48gV2FybmluZzwvc3Bhbj4gfCAKICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzJlYTA0MzsiPuKXjyBTdWNjZXNzPC9zcGFuPiB8IAogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2YyMjJlOyI+4pePIEVycm9yPC9zcGFuPjxicj4KICAgICAgICAgIDxlbT5EYXlzIHdpdGggbW9yZSB0aGFuIDMgZXZlbnRzIHNob3cgYSBjb3VudCBiYWRnZTwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgY29uc3Qgb3V0cHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZXZlbnQtb3V0cHV0Iik7CiAgaWYgKHBpY2tlciAmJiBvdXRwdXQpIHsKICAgIHBpY2tlci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgICBjb25zdCB2YWx1ZTIgPSB0YXJnZXQudmFsdWU7CiAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUyKTsKICAgICAgICBjb25zdCBpbnB1dCA9IHRhcmdldC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZGF0ZS1pbnB1dCIpOwogICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gaW5wdXQ/LnZhbHVlIHx8ICJOL0EiOwogICAgICAgIG91dHB1dC5pbm5lckhUTUwgPSBgCiAgICAgICAgICAgICAgPHN0cm9uZz5FdmVudCB0cmlnZ2VyZWQhPC9zdHJvbmc+PGJyPgogICAgICAgICAgICAgIElTTyBWYWx1ZTogJHt2YWx1ZTJ9PGJyPgogICAgICAgICAgICAgIEZvcm1hdHRlZDogJHtmb3JtYXR0ZWRWYWx1ZX08YnI+CiAgICAgICAgICAgICAgRGF0ZSBvYmplY3Q6ICR7ZGF0ZS50b0xvY2FsZVN0cmluZygpfQogICAgICAgICAgICBgOwogICAgICB9IGVsc2UgewogICAgICAgIG91dHB1dC5pbm5lckhUTUwgPSAiPGVtPkRhdGUgY2xlYXJlZDwvZW0+IjsKICAgICAgfQogICAgfSk7CiAgICBwaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coIkRhdGVwaWNrZXIgbG9zdCBmb2N1cyIpOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkV2ZW50IEhhbmRsaW5nIn0gLnN1YnRpdGxlPSR7IkludGVyYWN0aXZlIGRlbW9uc3RyYXRpb24gb2YgY2hhbmdlIGV2ZW50cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJFdmVudCBEZW1vIgogICAgICAgICAgZGVzY3JpcHRpb249IlNlbGVjdCBhIGRhdGUgdG8gc2VlIHRoZSBldmVudCBkZXRhaWxzIgogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAKICAgICAgICA8ZGl2IGlkPSJldmVudC1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCI+CiAgICAgICAgICA8ZW0+U2VsZWN0IGEgZGF0ZSB0byBzZWUgZXZlbnQgZGV0YWlscy4uLjwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRhdGVwaWNrZXIvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkYXRlcGlja2VyU3R5bGVzID0gWwogIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZGF0ZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIyNCA3MS40JSA0LjElKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICB9CgogICAgICAuZGF0ZS1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgfQoKICAgICAgLmRhdGUtaW5wdXQ6aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgfQoKICAgICAgLmRhdGUtaW5wdXQ6Zm9jdXMsCiAgICAgIC5kYXRlLWlucHV0Lm9wZW4gewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMjQgNzEuNCUgNC4xJSkiKX0sCiAgICAgICAgICAgICAgICAgICAgMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUgLyAwLjEpIiwgImhzbCgyMTAgMjAlIDk4JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5kYXRlLWlucHV0OmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC8qIEljb24gY29udGFpbmVyIHVzaW5nIGZsZXhib3ggZm9yIGJldHRlciBwb3NpdGlvbmluZyAqLwogICAgICAuaWNvbi1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5pY29uLWNvbnRhaW5lciA+ICogewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICAuY2FsZW5kYXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmNsZWFyLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgMC4ycyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5jbGVhci1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICB9CgogICAgICAuY2xlYXItYnV0dG9uOmRpc2FibGVkIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBDYWxlbmRhciBQb3B1cCBTdHlsZXMgKi8KICAgICAgLmNhbGVuZGFyLXBvcHVwIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtLCBvcGFjaXR5OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMjQgNzEuNCUgNC4xJSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMCAxMHB4IDE1cHggLTNweCBoc2woMCAwJSAwJSAvIDAuMSksIDAgNHB4IDZweCAtNHB4IGhzbCgwIDAlIDAlIC8gMC4xKSIsICIwIDEwcHggMTVweCAtM3B4IGhzbCgwIDAlIDAlIC8gMC4yKSwgMCA0cHggNnB4IC00cHggaHNsKDAgMCUgMCUgLyAwLjIpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgei1pbmRleDogNTA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgICB9CgogICAgICAuY2FsZW5kYXItcG9wdXAudG9wIHsKICAgICAgICBib3R0b206IGNhbGMoMTAwJSArIDRweCk7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpOwogICAgICB9CgogICAgICAuY2FsZW5kYXItcG9wdXAuYm90dG9tIHsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5jYWxlbmRhci1wb3B1cC5zaG93IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYWxsOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBDYWxlbmRhciBIZWFkZXIgKi8KICAgICAgLmNhbGVuZGFyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAubW9udGgteWVhci1kaXNwbGF5IHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLm5hdi1idXR0b24gewogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5uYXYtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLm5hdi1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAvKiBXZWVrZGF5IGhlYWRlcnMgKi8KICAgICAgLndlZWtkYXlzIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDcsIDFmcik7CiAgICAgICAgZ2FwOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgfQoKICAgICAgLndlZWtkYXkgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgcGFkZGluZzogMCAwIDhweCAwOwogICAgICB9CgogICAgICAvKiBEYXlzIGdyaWQgKi8KICAgICAgLmRheXMtZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg3LCAxZnIpOwogICAgICAgIGdhcDogMnB4OwogICAgICB9CgogICAgICAuZGF5IHsKICAgICAgICBhc3BlY3QtcmF0aW86IDE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjI0IDcxLjQlIDQuMSUpIiwgImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmRheTpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC5kYXkub3RoZXItbW9udGggewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC5kYXkudG9kYXkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5kYXkuc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUpIiwgImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLmRheS5kaXNhYmxlZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CgogICAgICAvKiBFdmVudCBpbmRpY2F0b3JzICovCiAgICAgIC5kYXkuaGFzLWV2ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5ldmVudC1pbmRpY2F0b3IgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDRweDsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5ldmVudC1kb3QgewogICAgICAgIHdpZHRoOiA0cHg7CiAgICAgICAgaGVpZ2h0OiA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICB9CgogICAgICAuZXZlbnQtZG90LmluZm8gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjExIDcwJSA1MiUpIiwgImhzbCgyMTEgNzAlIDYyJSkiKX07CiAgICAgIH0KCiAgICAgIC5ldmVudC1kb3Qud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NSA5MCUgNDUlKSIsICJoc2woNDUgOTAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5ldmVudC1kb3Quc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIgNjklIDQ1JSkiLCAiaHNsKDE0MiA2OSUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLmV2ZW50LWRvdC5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyJSA1MSUpIiwgImhzbCgwIDcyJSA2MSUpIil9OwogICAgICB9CgogICAgICAuZXZlbnQtY291bnQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDJweDsKICAgICAgICByaWdodDogMnB4OwogICAgICAgIG1pbi13aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMCA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyJSA1MSUpIiwgImhzbCgwIDcyJSA2MSUpIil9OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICB9CgogICAgICAvKiBUb29sdGlwIGZvciBldmVudCBkZXRhaWxzICovCiAgICAgIC5ldmVudC10b29sdGlwIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiBjYWxjKDEwMCUgKyA4cHgpOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDAlKSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICB9CgogICAgICAuZXZlbnQtdG9vbHRpcDo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAuZGF5Lmhhcy1ldmVudDpob3ZlciAuZXZlbnQtdG9vbHRpcCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLyogVGltZSBzZWxlY3RvciAqLwogICAgICAudGltZS1zZWxlY3RvciB7CiAgICAgICAgbWFyZ2luLXRvcDogMTJweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTJweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLnRpbWUtc2VsZWN0b3ItdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0cyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAudGltZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDY1cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0OmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSAvIDAuMSkiLCAiaHNsKDIxMCAyMCUgOTglIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLnRpbWUtc2VwYXJhdG9yIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5hbS1wbS1zZWxlY3RvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICB9CgogICAgICAuYW0tcG0tYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5hbS1wbS1idXR0b24uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUpIiwgImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICB9CgogICAgICAuYW0tcG0tYnV0dG9uOmhvdmVyOm5vdCguc2VsZWN0ZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIEFjdGlvbiBidXR0b25zICovCiAgICAgIC5jYWxlbmRhci1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIG1hcmdpbi10b3A6IDEycHg7CiAgICAgICAgcGFkZGluZy10b3A6IDEycHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLnRvZGF5LWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMjQgNzEuNCUgNC4xJSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLnRvZGF5LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAudG9kYXktYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLmNsZWFyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICB9CgogICAgICAuY2xlYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjEpIiwgImhzbCgwIDYyLjglIDMwLjYlIC8gMC4xKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5jbGVhci1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjIpIiwgImhzbCgwIDYyLjglIDMwLjYlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLyogVGltZXpvbmUgc2VsZWN0b3IgKi8KICAgICAgLnRpbWV6b25lLXNlbGVjdG9yIHsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgIHBhZGRpbmctdG9wOiAxMnB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAudGltZXpvbmUtc2VsZWN0b3ItdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lem9uZS1zZWxlY3QgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICB9CgogICAgICAudGltZXpvbmUtc2VsZWN0OmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lem9uZS1zZWxlY3Q6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlIC8gMC4xKSIsICJoc2woMjEwIDIwJSA5OCUgLyAwLjEpIil9OwogICAgICB9CiAgICBgCl07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kYXRlcGlja2VyL3RlbXBsYXRlLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciByZW5kZXJEYXRlcGlja2VyID0gKGNvbXBvbmVudCkgPT4gewogIGNvbnN0IG1vbnRoTmFtZXMgPSBbCiAgICAiSmFudWFyeSIsCiAgICAiRmVicnVhcnkiLAogICAgIk1hcmNoIiwKICAgICJBcHJpbCIsCiAgICAiTWF5IiwKICAgICJKdW5lIiwKICAgICJKdWx5IiwKICAgICJBdWd1c3QiLAogICAgIlNlcHRlbWJlciIsCiAgICAiT2N0b2JlciIsCiAgICAiTm92ZW1iZXIiLAogICAgIkRlY2VtYmVyIgogIF07CiAgY29uc3Qgd2Vla0RheXMgPSBjb21wb25lbnQud2Vla1N0YXJ0c09uID09PSAxID8gWyJNbyIsICJUdSIsICJXZSIsICJUaCIsICJGciIsICJTYSIsICJTdSJdIDogWyJTdSIsICJNbyIsICJUdSIsICJXZSIsICJUaCIsICJGciIsICJTYSJdOwogIGNvbnN0IGRheXMyID0gY29tcG9uZW50LmdldERheXNJbk1vbnRoKCk7CiAgY29uc3QgaXNBTSA9IGNvbXBvbmVudC5zZWxlY3RlZEhvdXIgPCAxMjsKICBjb25zdCB0aW1lem9uZXMgPSBjb21wb25lbnQuZ2V0VGltZXpvbmVzKCk7CiAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7Y29tcG9uZW50LmxhYmVsfSAuZGVzY3JpcHRpb249JHtjb21wb25lbnQuZGVzY3JpcHRpb259IC5yZXF1aXJlZD0ke2NvbXBvbmVudC5yZXF1aXJlZH0+PC9kZWVzLWxhYmVsPgogICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtY29udGFpbmVyIj4KICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICBjbGFzcz0iZGF0ZS1pbnB1dCAke2NvbXBvbmVudC5pc09wZW5lZCA/ICJvcGVuIiA6ICIifSIKICAgICAgICAgICAgICAudmFsdWU9JHtjb21wb25lbnQuZm9ybWF0RGF0ZShjb21wb25lbnQudmFsdWUpfQogICAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0ke2NvbXBvbmVudC5wbGFjZWhvbGRlcn0KICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtjb21wb25lbnQuZGlzYWJsZWR9CiAgICAgICAgICAgICAgQGNsaWNrPSR7Y29tcG9uZW50LnRvZ2dsZUNhbGVuZGFyfQogICAgICAgICAgICAgIEBrZXlkb3duPSR7Y29tcG9uZW50LmhhbmRsZUtleWRvd259CiAgICAgICAgICAgICAgQGlucHV0PSR7Y29tcG9uZW50LmhhbmRsZU1hbnVhbElucHV0fQogICAgICAgICAgICAgIEBibHVyPSR7Y29tcG9uZW50LmhhbmRsZUlucHV0Qmx1cn0KICAgICAgICAgICAgICBzdHlsZT0icGFkZGluZy1yaWdodDogJHtjb21wb25lbnQudmFsdWUgPyAiNjRweCIgOiAiNDBweCJ9IgogICAgICAgICAgICAvPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgJHtjb21wb25lbnQudmFsdWUgJiYgIWNvbXBvbmVudC5kaXNhYmxlZCA/IGIyYAogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY2xlYXItYnV0dG9uIiBAY2xpY2s9JHtjb21wb25lbnQuY2xlYXJWYWx1ZX0gdGl0bGU9IkNsZWFyIj4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6eCIgaWNvblNpemU9IjE0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJjYWxlbmRhci1pY29uIiBpY29uPSJsdWNpZGU6Y2FsZW5kYXIiIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgCiAgICAgICAgICAgIDwhLS0gQ2FsZW5kYXIgUG9wdXAgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGVuZGFyLXBvcHVwICR7Y29tcG9uZW50LmlzT3BlbmVkID8gInNob3ciIDogIiJ9ICR7Y29tcG9uZW50Lm9wZW5zVG9Ub3AgPyAidG9wIiA6ICJib3R0b20ifSI+CiAgICAgICAgICAgICAgPCEtLSBNb250aC9ZZWFyIE5hdmlnYXRpb24gLS0+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsZW5kYXItaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idXR0b24iIEBjbGljaz0ke2NvbXBvbmVudC5wcmV2aW91c01vbnRofT4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Y2hldnJvbkxlZnQiIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vbnRoLXllYXItZGlzcGxheSI+CiAgICAgICAgICAgICAgICAgICR7bW9udGhOYW1lc1tjb21wb25lbnQudmlld0RhdGUuZ2V0TW9udGgoKV19ICR7Y29tcG9uZW50LnZpZXdEYXRlLmdldEZ1bGxZZWFyKCl9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idXR0b24iIEBjbGljaz0ke2NvbXBvbmVudC5uZXh0TW9udGh9PgogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpjaGV2cm9uUmlnaHQiIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgPCEtLSBXZWVrZGF5IEhlYWRlcnMgLS0+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2Vla2RheXMiPgogICAgICAgICAgICAgICAgJHt3ZWVrRGF5cy5tYXAoKGRheSkgPT4gYjJgPGRpdiBjbGFzcz0id2Vla2RheSI+JHtkYXl9PC9kaXY+YCl9CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDwhLS0gRGF5cyBHcmlkIC0tPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRheXMtZ3JpZCI+CiAgICAgICAgICAgICAgICAke2RheXMyLm1hcCgoZGF5KSA9PiB7CiAgICBjb25zdCBpc1RvZGF5MyA9IGNvbXBvbmVudC5pc1RvZGF5KGRheSk7CiAgICBjb25zdCBpc1NlbGVjdGVkID0gY29tcG9uZW50LmlzU2VsZWN0ZWQoZGF5KTsKICAgIGNvbnN0IGlzT3RoZXJNb250aCA9IGRheS5nZXRNb250aCgpICE9PSBjb21wb25lbnQudmlld0RhdGUuZ2V0TW9udGgoKTsKICAgIGNvbnN0IGlzRGlzYWJsZWQgPSBjb21wb25lbnQuaXNEaXNhYmxlZChkYXkpOwogICAgY29uc3QgZGF5RXZlbnRzID0gY29tcG9uZW50LmdldEV2ZW50c0ZvckRhdGUoZGF5KTsKICAgIGNvbnN0IGhhc0V2ZW50cyA9IGRheUV2ZW50cy5sZW5ndGggPiAwOwogICAgY29uc3QgdG90YWxFdmVudENvdW50ID0gZGF5RXZlbnRzLnJlZHVjZSgoc3VtLCBldmVudCkgPT4gc3VtICsgKGV2ZW50LmNvdW50IHx8IDEpLCAwKTsKICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImRheSAke2lzT3RoZXJNb250aCA/ICJvdGhlci1tb250aCIgOiAiIn0gJHtpc1RvZGF5MyA/ICJ0b2RheSIgOiAiIn0gJHtpc1NlbGVjdGVkID8gInNlbGVjdGVkIiA6ICIifSAke2lzRGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9ICR7aGFzRXZlbnRzID8gImhhcy1ldmVudCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiAhaXNEaXNhYmxlZCAmJiBjb21wb25lbnQuc2VsZWN0RGF0ZShkYXkpfQogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICR7ZGF5LmdldERhdGUoKX0KICAgICAgICAgICAgICAgICAgICAgICR7aGFzRXZlbnRzID8gYjJgCiAgICAgICAgICAgICAgICAgICAgICAgICR7dG90YWxFdmVudENvdW50ID4gMyA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LWNvdW50Ij4ke3RvdGFsRXZlbnRDb3VudH08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgYCA6IGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LWluZGljYXRvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RheUV2ZW50cy5zbGljZSgwLCAzKS5tYXAoKGV2ZW50KSA9PiBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXZlbnQtZG90ICR7ZXZlbnQudHlwZSB8fCAiaW5mbyJ9Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgICAgICAgICAgICAgICAke2RheUV2ZW50c1swXS50aXRsZSA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LXRvb2x0aXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXlFdmVudHNbMF0udGl0bGV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RvdGFsRXZlbnRDb3VudCA+IDEgPyBiMmAgKCske3RvdGFsRXZlbnRDb3VudCAtIDF9IG1vcmUpYCA6ICIifQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIGA7CiAgfSl9CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDwhLS0gVGltZSBTZWxlY3RvciAtLT4KICAgICAgICAgICAgICAke2NvbXBvbmVudC5lbmFibGVUaW1lID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW1lLXNlbGVjdG9yIj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGltZS1zZWxlY3Rvci10aXRsZSI+VGltZTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW1lLWlucHV0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIiAKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0aW1lLWlucHV0IiAKICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke2NvbXBvbmVudC50aW1lRm9ybWF0ID09PSAiMTJoIiA/IChjb21wb25lbnQuc2VsZWN0ZWRIb3VyID09PSAwID8gMTIgOiBjb21wb25lbnQuc2VsZWN0ZWRIb3VyID4gMTIgPyBjb21wb25lbnQuc2VsZWN0ZWRIb3VyIC0gMTIgOiBjb21wb25lbnQuc2VsZWN0ZWRIb3VyKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIikgOiBjb21wb25lbnQuc2VsZWN0ZWRIb3VyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX0KICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IGNvbXBvbmVudC5oYW5kbGVIb3VySW5wdXQoZTExKX0KICAgICAgICAgICAgICAgICAgICAgIG1pbj0iJHtjb21wb25lbnQudGltZUZvcm1hdCA9PT0gIjEyaCIgPyAxIDogMH0iCiAgICAgICAgICAgICAgICAgICAgICBtYXg9IiR7Y29tcG9uZW50LnRpbWVGb3JtYXQgPT09ICIxMmgiID8gMTIgOiAyM30iCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGltZS1zZXBhcmF0b3IiPjo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIiAKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0aW1lLWlucHV0IiAKICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke2NvbXBvbmVudC5zZWxlY3RlZE1pbnV0ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9CiAgICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiBjb21wb25lbnQuaGFuZGxlTWludXRlSW5wdXQoZTExKX0KICAgICAgICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTkiCiAgICAgICAgICAgICAgICAgICAgICBzdGVwPSIke2NvbXBvbmVudC5taW51dGVJbmNyZW1lbnQgfHwgMX0iCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAke2NvbXBvbmVudC50aW1lRm9ybWF0ID09PSAiMTJoIiA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYW0tcG0tc2VsZWN0b3IiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJhbS1wbS1idXR0b24gJHtpc0FNID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiBjb21wb25lbnQuc2V0QU1QTSgiYW0iKX0KICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgIEFNCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJhbS1wbS1idXR0b24gJHshaXNBTSA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gY29tcG9uZW50LnNldEFNUE0oInBtIil9CiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICBQTQogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgICAgIDwhLS0gVGltZXpvbmUgU2VsZWN0b3IgLS0+CiAgICAgICAgICAgICAgJHtjb21wb25lbnQuZW5hYmxlVGltZXpvbmUgPyBiMmAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbWV6b25lLXNlbGVjdG9yIj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGltZXpvbmUtc2VsZWN0b3ItdGl0bGUiPlRpbWV6b25lPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRpbWV6b25lLXNlbGVjdCIgCiAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7Y29tcG9uZW50LnRpbWV6b25lfQogICAgICAgICAgICAgICAgICAgIEBjaGFuZ2U9JHsoZTExKSA9PiBjb21wb25lbnQuaGFuZGxlVGltZXpvbmVDaGFuZ2UoZTExKX0KICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICR7dGltZXpvbmVzLm1hcCgodHopID0+IGIyYAogICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iJHt0ei52YWx1ZX0iID9zZWxlY3RlZD0ke3R6LnZhbHVlID09PSBjb21wb25lbnQudGltZXpvbmV9PgogICAgICAgICAgICAgICAgICAgICAgICAke3R6LmxhYmVsfQogICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCA6ICIifQoKICAgICAgICAgICAgICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGVuZGFyLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ1dHRvbiB0b2RheS1idXR0b24iIEBjbGljaz0ke2NvbXBvbmVudC5zZWxlY3RUb2RheX0+CiAgICAgICAgICAgICAgICAgIFRvZGF5CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24gY2xlYXItYnV0dG9uIiBAY2xpY2s9JHtjb21wb25lbnQuY2xlYXJ9PgogICAgICAgICAgICAgICAgICBDbGVhcgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kYXRlcGlja2VyL2NvbXBvbmVudC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlMTkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczIwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXREYXRlcGlja2VyID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1kYXRlcGlja2VyIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlVGltZV9kZWNvcmF0b3JzOwogIGxldCBfZW5hYmxlVGltZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VuYWJsZVRpbWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RpbWVGb3JtYXRfZGVjb3JhdG9yczsKICBsZXQgX3RpbWVGb3JtYXRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90aW1lRm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW51dGVJbmNyZW1lbnRfZGVjb3JhdG9yczsKICBsZXQgX21pbnV0ZUluY3JlbWVudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21pbnV0ZUluY3JlbWVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGF0ZUZvcm1hdF9kZWNvcmF0b3JzOwogIGxldCBfZGF0ZUZvcm1hdF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RhdGVGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21pbkRhdGVfZGVjb3JhdG9yczsKICBsZXQgX21pbkRhdGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5EYXRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhEYXRlX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhEYXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlzYWJsZWREYXRlc19kZWNvcmF0b3JzOwogIGxldCBfZGlzYWJsZWREYXRlc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rpc2FibGVkRGF0ZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dlZWtTdGFydHNPbl9kZWNvcmF0b3JzOwogIGxldCBfd2Vla1N0YXJ0c09uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfd2Vla1N0YXJ0c09uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzOwogIGxldCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlVGltZXpvbmVfZGVjb3JhdG9yczsKICBsZXQgX2VuYWJsZVRpbWV6b25lX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlVGltZXpvbmVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RpbWV6b25lX2RlY29yYXRvcnM7CiAgbGV0IF90aW1lem9uZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RpbWV6b25lX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ldmVudHNfZGVjb3JhdG9yczsKICBsZXQgX2V2ZW50c19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2V2ZW50c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNPcGVuZWRfZGVjb3JhdG9yczsKICBsZXQgX2lzT3BlbmVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNPcGVuZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wZW5zVG9Ub3BfZGVjb3JhdG9yczsKICBsZXQgX29wZW5zVG9Ub3BfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcGVuc1RvVG9wX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZERhdGVfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkRGF0ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkRGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlld0RhdGVfZGVjb3JhdG9yczsKICBsZXQgX3ZpZXdEYXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlld0RhdGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkSG91cl9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRIb3VyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRIb3VyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE1pbnV0ZV9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRNaW51dGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE1pbnV0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXREYXRlcGlja2VyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3ZhbHVlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfZW5hYmxlVGltZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF90aW1lRm9ybWF0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbWludXRlSW5jcmVtZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfZGF0ZUZvcm1hdF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX21pbkRhdGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tYXhEYXRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfZGlzYWJsZWREYXRlc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfd2Vla1N0YXJ0c09uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9lbmFibGVUaW1lem9uZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF90aW1lem9uZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2V2ZW50c19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfaXNPcGVuZWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX29wZW5zVG9Ub3BfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3NlbGVjdGVkRGF0ZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfdmlld0RhdGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3NlbGVjdGVkSG91cl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2VsZWN0ZWRNaW51dGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfZW5hYmxlVGltZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbmFibGVUaW1lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlbmFibGVUaW1lIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmVuYWJsZVRpbWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVuYWJsZVRpbWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZW5hYmxlVGltZV9pbml0aWFsaXplcnMsIF9lbmFibGVUaW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX3RpbWVGb3JtYXRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGltZUZvcm1hdCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGltZUZvcm1hdCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aW1lRm9ybWF0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50aW1lRm9ybWF0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RpbWVGb3JtYXRfaW5pdGlhbGl6ZXJzLCBfdGltZUZvcm1hdF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9taW51dGVJbmNyZW1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWludXRlSW5jcmVtZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtaW51dGVJbmNyZW1lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWludXRlSW5jcmVtZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5taW51dGVJbmNyZW1lbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWludXRlSW5jcmVtZW50X2luaXRpYWxpemVycywgX21pbnV0ZUluY3JlbWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9kYXRlRm9ybWF0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRhdGVGb3JtYXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRhdGVGb3JtYXQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGF0ZUZvcm1hdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGF0ZUZvcm1hdCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kYXRlRm9ybWF0X2luaXRpYWxpemVycywgX2RhdGVGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfbWluRGF0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtaW5EYXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtaW5EYXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1pbkRhdGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1pbkRhdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWluRGF0ZV9pbml0aWFsaXplcnMsIF9taW5EYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX21heERhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWF4RGF0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWF4RGF0ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYXhEYXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYXhEYXRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21heERhdGVfaW5pdGlhbGl6ZXJzLCBfbWF4RGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9kaXNhYmxlZERhdGVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpc2FibGVkRGF0ZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkRGF0ZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGlzYWJsZWREYXRlcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlzYWJsZWREYXRlcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZERhdGVzX2luaXRpYWxpemVycywgX2Rpc2FibGVkRGF0ZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfd2Vla1N0YXJ0c09uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndlZWtTdGFydHNPbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid2Vla1N0YXJ0c09uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLndlZWtTdGFydHNPbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud2Vla1N0YXJ0c09uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dlZWtTdGFydHNPbl9pbml0aWFsaXplcnMsIF93ZWVrU3RhcnRzT25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicGxhY2Vob2xkZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBsYWNlaG9sZGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBsYWNlaG9sZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wbGFjZWhvbGRlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsIF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9lbmFibGVUaW1lem9uZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbmFibGVUaW1lem9uZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZW5hYmxlVGltZXpvbmUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZW5hYmxlVGltZXpvbmUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVuYWJsZVRpbWV6b25lID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VuYWJsZVRpbWV6b25lX2luaXRpYWxpemVycywgX2VuYWJsZVRpbWV6b25lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX3RpbWV6b25lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRpbWV6b25lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aW1lem9uZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aW1lem9uZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGltZXpvbmUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGltZXpvbmVfaW5pdGlhbGl6ZXJzLCBfdGltZXpvbmVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfZXZlbnRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImV2ZW50cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZXZlbnRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV2ZW50cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZXZlbnRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2V2ZW50c19pbml0aWFsaXplcnMsIF9ldmVudHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfaXNPcGVuZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNPcGVuZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzT3BlbmVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzT3BlbmVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc09wZW5lZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc09wZW5lZF9pbml0aWFsaXplcnMsIF9pc09wZW5lZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9vcGVuc1RvVG9wX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wZW5zVG9Ub3AiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wZW5zVG9Ub3AiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3BlbnNUb1RvcCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3BlbnNUb1RvcCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcGVuc1RvVG9wX2luaXRpYWxpemVycywgX29wZW5zVG9Ub3BfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfc2VsZWN0ZWREYXRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkRGF0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWREYXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkRGF0ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWREYXRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkRGF0ZV9pbml0aWFsaXplcnMsIF9zZWxlY3RlZERhdGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfdmlld0RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmlld0RhdGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZpZXdEYXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZpZXdEYXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52aWV3RGF0ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92aWV3RGF0ZV9pbml0aWFsaXplcnMsIF92aWV3RGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9zZWxlY3RlZEhvdXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRIb3VyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZEhvdXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRIb3VyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZEhvdXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRIb3VyX2luaXRpYWxpemVycywgX3NlbGVjdGVkSG91cl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9zZWxlY3RlZE1pbnV0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZE1pbnV0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRNaW51dGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRNaW51dGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkTWludXRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkTWludXRlX2luaXRpYWxpemVycywgX3NlbGVjdGVkTWludXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTkobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXREYXRlcGlja2VyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTE7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VuYWJsZVRpbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2VuYWJsZVRpbWVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGVuYWJsZVRpbWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlbmFibGVUaW1lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZW5hYmxlVGltZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZW5hYmxlVGltZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RpbWVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9lbmFibGVUaW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfdGltZUZvcm1hdF9pbml0aWFsaXplcnMsICIyNGgiKSk7CiAgICBnZXQgdGltZUZvcm1hdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3RpbWVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0aW1lRm9ybWF0KHZhbHVlMikgewogICAgICB0aGlzLiN0aW1lRm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWludXRlSW5jcmVtZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfdGltZUZvcm1hdF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX21pbnV0ZUluY3JlbWVudF9pbml0aWFsaXplcnMsIDEpKTsKICAgIGdldCBtaW51dGVJbmNyZW1lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtaW51dGVJbmNyZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW51dGVJbmNyZW1lbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pbnV0ZUluY3JlbWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RhdGVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9taW51dGVJbmNyZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9kYXRlRm9ybWF0X2luaXRpYWxpemVycywgIllZWVktTU0tREQiKSk7CiAgICBnZXQgZGF0ZUZvcm1hdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RhdGVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkYXRlRm9ybWF0KHZhbHVlMikgewogICAgICB0aGlzLiNkYXRlRm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWluRGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2RhdGVGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9taW5EYXRlX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBtaW5EYXRlKCkgewogICAgICByZXR1cm4gdGhpcy4jbWluRGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1pbkRhdGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pbkRhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYXhEYXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfbWluRGF0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX21heERhdGVfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IG1heERhdGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYXhEYXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWF4RGF0ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWF4RGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rpc2FibGVkRGF0ZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9tYXhEYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfZGlzYWJsZWREYXRlc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZGlzYWJsZWREYXRlcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Rpc2FibGVkRGF0ZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkaXNhYmxlZERhdGVzKHZhbHVlMikgewogICAgICB0aGlzLiNkaXNhYmxlZERhdGVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjd2Vla1N0YXJ0c09uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfZGlzYWJsZWREYXRlc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3dlZWtTdGFydHNPbl9pbml0aWFsaXplcnMsIDEpKTsKICAgIGdldCB3ZWVrU3RhcnRzT24oKSB7CiAgICAgIHJldHVybiB0aGlzLiN3ZWVrU3RhcnRzT25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIC8vIERlZmF1bHQgdG8gTW9uZGF5CiAgICBzZXQgd2Vla1N0YXJ0c09uKHZhbHVlMikgewogICAgICB0aGlzLiN3ZWVrU3RhcnRzT25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3dlZWtTdGFydHNPbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycywgIllZWVktTU0tREQiKSk7CiAgICBnZXQgcGxhY2Vob2xkZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlMikgewogICAgICB0aGlzLiNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VuYWJsZVRpbWV6b25lX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9lbmFibGVUaW1lem9uZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgZW5hYmxlVGltZXpvbmUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlbmFibGVUaW1lem9uZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGVuYWJsZVRpbWV6b25lKHZhbHVlMikgewogICAgICB0aGlzLiNlbmFibGVUaW1lem9uZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RpbWV6b25lX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfZW5hYmxlVGltZXpvbmVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF90aW1lem9uZV9pbml0aWFsaXplcnMsIEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZSkpOwogICAgZ2V0IHRpbWV6b25lKCkgewogICAgICByZXR1cm4gdGhpcy4jdGltZXpvbmVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0aW1lem9uZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGltZXpvbmVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNldmVudHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF90aW1lem9uZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2V2ZW50c19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZXZlbnRzKCkgewogICAgICByZXR1cm4gdGhpcy4jZXZlbnRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZXZlbnRzKHZhbHVlMikgewogICAgICB0aGlzLiNldmVudHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc09wZW5lZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2V2ZW50c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2lzT3BlbmVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc09wZW5lZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzT3BlbmVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNPcGVuZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzT3BlbmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjb3BlbnNUb1RvcF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2lzT3BlbmVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfb3BlbnNUb1RvcF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgb3BlbnNUb1RvcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wZW5zVG9Ub3BfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcGVuc1RvVG9wKHZhbHVlMikgewogICAgICB0aGlzLiNvcGVuc1RvVG9wX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWREYXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfb3BlbnNUb1RvcF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3NlbGVjdGVkRGF0ZV9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCBzZWxlY3RlZERhdGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZERhdGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZERhdGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGVkRGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3ZpZXdEYXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfc2VsZWN0ZWREYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfdmlld0RhdGVfaW5pdGlhbGl6ZXJzLCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkpOwogICAgZ2V0IHZpZXdEYXRlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmlld0RhdGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2aWV3RGF0ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmlld0RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZEhvdXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF92aWV3RGF0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3NlbGVjdGVkSG91cl9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBzZWxlY3RlZEhvdXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZEhvdXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZEhvdXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGVkSG91cl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkTWludXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfc2VsZWN0ZWRIb3VyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfc2VsZWN0ZWRNaW51dGVfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgc2VsZWN0ZWRNaW51dGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZE1pbnV0ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkTWludXRlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZE1pbnV0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IGRhdGVwaWNrZXJTdHlsZXM7CiAgICBnZXRUaW1lem9uZXMoKSB7CiAgICAgIHJldHVybiBbCiAgICAgICAgeyB2YWx1ZTogIlVUQyIsIGxhYmVsOiAiVVRDIChDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSkiIH0sCiAgICAgICAgeyB2YWx1ZTogIkFtZXJpY2EvTmV3X1lvcmsiLCBsYWJlbDogIkVhc3Rlcm4gVGltZSAoVVMgJiBDYW5hZGEpIiB9LAogICAgICAgIHsgdmFsdWU6ICJBbWVyaWNhL0NoaWNhZ28iLCBsYWJlbDogIkNlbnRyYWwgVGltZSAoVVMgJiBDYW5hZGEpIiB9LAogICAgICAgIHsgdmFsdWU6ICJBbWVyaWNhL0RlbnZlciIsIGxhYmVsOiAiTW91bnRhaW4gVGltZSAoVVMgJiBDYW5hZGEpIiB9LAogICAgICAgIHsgdmFsdWU6ICJBbWVyaWNhL0xvc19BbmdlbGVzIiwgbGFiZWw6ICJQYWNpZmljIFRpbWUgKFVTICYgQ2FuYWRhKSIgfSwKICAgICAgICB7IHZhbHVlOiAiQW1lcmljYS9QaG9lbml4IiwgbGFiZWw6ICJBcml6b25hIiB9LAogICAgICAgIHsgdmFsdWU6ICJBbWVyaWNhL0FuY2hvcmFnZSIsIGxhYmVsOiAiQWxhc2thIiB9LAogICAgICAgIHsgdmFsdWU6ICJQYWNpZmljL0hvbm9sdWx1IiwgbGFiZWw6ICJIYXdhaWkiIH0sCiAgICAgICAgeyB2YWx1ZTogIkV1cm9wZS9Mb25kb24iLCBsYWJlbDogIkxvbmRvbiIgfSwKICAgICAgICB7IHZhbHVlOiAiRXVyb3BlL1BhcmlzIiwgbGFiZWw6ICJQYXJpcyIgfSwKICAgICAgICB7IHZhbHVlOiAiRXVyb3BlL0JlcmxpbiIsIGxhYmVsOiAiQmVybGluIiB9LAogICAgICAgIHsgdmFsdWU6ICJFdXJvcGUvTW9zY293IiwgbGFiZWw6ICJNb3Njb3ciIH0sCiAgICAgICAgeyB2YWx1ZTogIkFzaWEvRHViYWkiLCBsYWJlbDogIkR1YmFpIiB9LAogICAgICAgIHsgdmFsdWU6ICJBc2lhL0tvbGthdGEiLCBsYWJlbDogIkluZGlhIFN0YW5kYXJkIFRpbWUiIH0sCiAgICAgICAgeyB2YWx1ZTogIkFzaWEvU2hhbmdoYWkiLCBsYWJlbDogIkNoaW5hIFN0YW5kYXJkIFRpbWUiIH0sCiAgICAgICAgeyB2YWx1ZTogIkFzaWEvVG9reW8iLCBsYWJlbDogIlRva3lvIiB9LAogICAgICAgIHsgdmFsdWU6ICJBdXN0cmFsaWEvU3lkbmV5IiwgbGFiZWw6ICJTeWRuZXkiIH0sCiAgICAgICAgeyB2YWx1ZTogIlBhY2lmaWMvQXVja2xhbmQiLCBsYWJlbDogIkF1Y2tsYW5kIiB9CiAgICAgIF07CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiByZW5kZXJEYXRlcGlja2VyKHRoaXMpOwogICAgfQogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlID0gdGhpcy5oYW5kbGVDbGlja091dHNpZGUuYmluZCh0aGlzKTsKICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKTsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7CiAgICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICB9CiAgICAgIGlmICh0aGlzLnZhbHVlKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlKTsKICAgICAgICAgIGlmICghaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTsKICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKGRhdGUpOwogICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGRhdGUuZ2V0SG91cnMoKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IGRhdGUuZ2V0TWludXRlcygpOwogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggewogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBub3cyID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKG5vdzIpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gbm93Mi5nZXRIb3VycygpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSAwOwogICAgICB9CiAgICB9CiAgICBmb3JtYXREYXRlKGlzb1N0cmluZykgewogICAgICBpZiAoIWlzb1N0cmluZykKICAgICAgICByZXR1cm4gIiI7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGlzb1N0cmluZyk7CiAgICAgICAgaWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICBsZXQgZm9ybWF0dGVkID0gdGhpcy5kYXRlRm9ybWF0OwogICAgICAgIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKTsKICAgICAgICBjb25zdCBtb250aCA9IChkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIik7CiAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpOwogICAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKCJZWVlZIiwgeWVhcik7CiAgICAgICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoIllZIiwgeWVhci5zbGljZSgtMikpOwogICAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKCJNTSIsIG1vbnRoKTsKICAgICAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgiREQiLCBkYXkpOwogICAgICAgIGlmICh0aGlzLmVuYWJsZVRpbWUpIHsKICAgICAgICAgIGNvbnN0IGhvdXJzMjQgPSBkYXRlLmdldEhvdXJzKCk7CiAgICAgICAgICBjb25zdCBob3VyczEyID0gaG91cnMyNCA9PT0gMCA/IDEyIDogaG91cnMyNCA+IDEyID8gaG91cnMyNCAtIDEyIDogaG91cnMyNDsKICAgICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIik7CiAgICAgICAgICBjb25zdCBhbXBtID0gaG91cnMyNCA+PSAxMiA/ICJQTSIgOiAiQU0iOwogICAgICAgICAgaWYgKHRoaXMudGltZUZvcm1hdCA9PT0gIjEyaCIpIHsKICAgICAgICAgICAgZm9ybWF0dGVkICs9IGAgJHtob3VyczEyfToke21pbnV0ZXN9ICR7YW1wbX1gOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9ybWF0dGVkICs9IGAgJHtob3VyczI0LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX06JHttaW51dGVzfWA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmVuYWJsZVRpbWV6b25lKSB7CiAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImVuLVVTIiwgewogICAgICAgICAgICB0aW1lWm9uZU5hbWU6ICJzaG9ydCIsCiAgICAgICAgICAgIHRpbWVab25lOiB0aGlzLnRpbWV6b25lCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IHBhcnRzID0gZm9ybWF0dGVyMi5mb3JtYXRUb1BhcnRzKGRhdGUpOwogICAgICAgICAgY29uc3QgdHpQYXJ0ID0gcGFydHMuZmluZCgocGFydCkgPT4gcGFydC50eXBlID09PSAidGltZVpvbmVOYW1lIik7CiAgICAgICAgICBpZiAodHpQYXJ0KSB7CiAgICAgICAgICAgIGZvcm1hdHRlZCArPSBgICR7dHpQYXJ0LnZhbHVlfWA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3JtYXR0ZWQ7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIHJldHVybiAiIjsKICAgICAgfQogICAgfQogICAgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3NlbGVjdGVkTWludXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHBhdGgyID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7CiAgICAgIGlmICghcGF0aDIuaW5jbHVkZXModGhpcykpIHsKICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgIH0KICAgIH0pOwogICAgYXN5bmMgdG9nZ2xlQ2FsZW5kYXIoKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5pc09wZW5lZCA9ICF0aGlzLmlzT3BlbmVkOwogICAgICBpZiAodGhpcy5pc09wZW5lZCkgewogICAgICAgIGNvbnN0IGlucHV0Q29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5pbnB1dC1jb250YWluZXIiKTsKICAgICAgICBjb25zdCByZWN0ID0gaW5wdXRDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3Qgc3BhY2VCZWxvdyA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QuYm90dG9tOwogICAgICAgIGNvbnN0IHNwYWNlQWJvdmUgPSByZWN0LnRvcDsKICAgICAgICB0aGlzLm9wZW5zVG9Ub3AgPSBzcGFjZUJlbG93IDwgNDAwICYmIHNwYWNlQWJvdmUgPiBzcGFjZUJlbG93OwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgICAgfSwgMCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgIH0KICAgIH0KICAgIGdldERheXNJbk1vbnRoKCkgewogICAgICBjb25zdCB5ZWFyID0gdGhpcy52aWV3RGF0ZS5nZXRGdWxsWWVhcigpOwogICAgICBjb25zdCBtb250aCA9IHRoaXMudmlld0RhdGUuZ2V0TW9udGgoKTsKICAgICAgY29uc3QgZmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSk7CiAgICAgIGNvbnN0IGxhc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApOwogICAgICBjb25zdCBkYXlzMiA9IFtdOwogICAgICBjb25zdCBzdGFydE9mZnNldCA9IHRoaXMud2Vla1N0YXJ0c09uID09PSAxID8gZmlyc3REYXkuZ2V0RGF5KCkgPT09IDAgPyA2IDogZmlyc3REYXkuZ2V0RGF5KCkgLSAxIDogZmlyc3REYXkuZ2V0RGF5KCk7CiAgICAgIGZvciAobGV0IGkxMSA9IHN0YXJ0T2Zmc2V0OyBpMTEgPiAwOyBpMTEtLSkgewogICAgICAgIGRheXMyLnB1c2gobmV3IERhdGUoeWVhciwgbW9udGgsIDEgLSBpMTEpKTsKICAgICAgfQogICAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gbGFzdERheS5nZXREYXRlKCk7IGkxMSsrKSB7CiAgICAgICAgZGF5czIucHVzaChuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaTExKSk7CiAgICAgIH0KICAgICAgY29uc3QgcmVtYWluaW5nRGF5cyA9IDQyIC0gZGF5czIubGVuZ3RoOwogICAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gcmVtYWluaW5nRGF5czsgaTExKyspIHsKICAgICAgICBkYXlzMi5wdXNoKG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgaTExKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGRheXMyOwogICAgfQogICAgaXNUb2RheShkYXRlKSB7CiAgICAgIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgIHJldHVybiBkYXRlLmdldERhdGUoKSA9PT0gdG9kYXkuZ2V0RGF0ZSgpICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gdG9kYXkuZ2V0TW9udGgoKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHRvZGF5LmdldEZ1bGxZZWFyKCk7CiAgICB9CiAgICBpc1NlbGVjdGVkKGRhdGUpIHsKICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRGF0ZSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiBkYXRlLmdldERhdGUoKSA9PT0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0RGF0ZSgpICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHRoaXMuc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7CiAgICB9CiAgICBpc0Rpc2FibGVkKGRhdGUpIHsKICAgICAgaWYgKHRoaXMubWluRGF0ZSkgewogICAgICAgIGNvbnN0IG1pbjMgPSBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpOwogICAgICAgIGlmIChkYXRlIDwgbWluMykKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlmICh0aGlzLm1heERhdGUpIHsKICAgICAgICBjb25zdCBtYXgzID0gbmV3IERhdGUodGhpcy5tYXhEYXRlKTsKICAgICAgICBpZiAoZGF0ZSA+IG1heDMpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAodGhpcy5kaXNhYmxlZERhdGVzICYmIHRoaXMuZGlzYWJsZWREYXRlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWREYXRlcy5zb21lKChkaXNhYmxlZFN0cikgPT4gewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgZGlzYWJsZWQyID0gbmV3IERhdGUoZGlzYWJsZWRTdHIpOwogICAgICAgICAgICByZXR1cm4gZGF0ZS5nZXREYXRlKCkgPT09IGRpc2FibGVkMi5nZXREYXRlKCkgJiYgZGF0ZS5nZXRNb250aCgpID09PSBkaXNhYmxlZDIuZ2V0TW9udGgoKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IGRpc2FibGVkMi5nZXRGdWxsWWVhcigpOwogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBnZXRFdmVudHNGb3JEYXRlKGRhdGUpIHsKICAgICAgaWYgKCF0aGlzLmV2ZW50cyB8fCB0aGlzLmV2ZW50cy5sZW5ndGggPT09IDApCiAgICAgICAgcmV0dXJuIFtdOwogICAgICBjb25zdCBkYXRlU3RyID0gYCR7ZGF0ZS5nZXRGdWxsWWVhcigpfS0keyhkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9LSR7ZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfWA7CiAgICAgIHJldHVybiB0aGlzLmV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5kYXRlID09PSBkYXRlU3RyKTsKICAgIH0KICAgIHNlbGVjdERhdGUoZGF0ZSkgewogICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgdGhpcy5zZWxlY3RlZEhvdXIsIHRoaXMuc2VsZWN0ZWRNaW51dGUpOwogICAgICB0aGlzLnZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZVdpdGhUaW1lem9uZSh0aGlzLnNlbGVjdGVkRGF0ZSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICBpZiAoIXRoaXMuZW5hYmxlVGltZSkgewogICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgc2VsZWN0VG9kYXkoKSB7CiAgICAgIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gdG9kYXk7CiAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZSh0b2RheSk7CiAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdG9kYXkuZ2V0SG91cnMoKTsKICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IHRvZGF5LmdldE1pbnV0ZXMoKTsKICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWVXaXRoVGltZXpvbmUodGhpcy5zZWxlY3RlZERhdGUpOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgaWYgKCF0aGlzLmVuYWJsZVRpbWUpIHsKICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGNsZWFyKCkgewogICAgICB0aGlzLnZhbHVlID0gIiI7CiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgIH0KICAgIHByZXZpb3VzTW9udGgoKSB7CiAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLnZpZXdEYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMudmlld0RhdGUuZ2V0TW9udGgoKSAtIDEsIDEpOwogICAgfQogICAgbmV4dE1vbnRoKCkgewogICAgICB0aGlzLnZpZXdEYXRlID0gbmV3IERhdGUodGhpcy52aWV3RGF0ZS5nZXRGdWxsWWVhcigpLCB0aGlzLnZpZXdEYXRlLmdldE1vbnRoKCkgKyAxLCAxKTsKICAgIH0KICAgIGhhbmRsZUhvdXJJbnB1dChlMTEpIHsKICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICBsZXQgdmFsdWUyID0gcGFyc2VJbnQoaW5wdXQudmFsdWUpIHx8IDA7CiAgICAgIGlmICh0aGlzLnRpbWVGb3JtYXQgPT09ICIxMmgiKSB7CiAgICAgICAgdmFsdWUyID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oMTIsIHZhbHVlMikpOwogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSG91ciA+PSAxMiAmJiB2YWx1ZTIgIT09IDEyKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHZhbHVlMiArIDEyOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEhvdXIgPCAxMiAmJiB2YWx1ZTIgPT09IDEyKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IDA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IE1hdGgubWF4KDAsIE1hdGgubWluKDIzLCB2YWx1ZTIpKTsKICAgICAgfQogICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKTsKICAgIH0KICAgIGhhbmRsZU1pbnV0ZUlucHV0KGUxMSkgewogICAgICBjb25zdCBpbnB1dCA9IGUxMS50YXJnZXQ7CiAgICAgIGxldCB2YWx1ZTIgPSBwYXJzZUludChpbnB1dC52YWx1ZSkgfHwgMDsKICAgICAgdmFsdWUyID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oNTksIHZhbHVlMikpOwogICAgICBpZiAodGhpcy5taW51dGVJbmNyZW1lbnQgJiYgdGhpcy5taW51dGVJbmNyZW1lbnQgPiAxKSB7CiAgICAgICAgdmFsdWUyID0gTWF0aC5yb3VuZCh2YWx1ZTIgLyB0aGlzLm1pbnV0ZUluY3JlbWVudCkgKiB0aGlzLm1pbnV0ZUluY3JlbWVudDsKICAgICAgfQogICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gdmFsdWUyOwogICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKTsKICAgIH0KICAgIHNldEFNUE0ocGVyaW9kKSB7CiAgICAgIGlmIChwZXJpb2QgPT09ICJhbSIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPj0gMTIpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciAtPSAxMjsKICAgICAgfSBlbHNlIGlmIChwZXJpb2QgPT09ICJwbSIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPCAxMikgewogICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyICs9IDEyOwogICAgICB9CiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWREYXRlVGltZSgpOwogICAgfQogICAgdXBkYXRlU2VsZWN0ZWREYXRlVGltZSgpIHsKICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpLCB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRNb250aCgpLCB0aGlzLnNlbGVjdGVkRGF0ZS5nZXREYXRlKCksIHRoaXMuc2VsZWN0ZWRIb3VyLCB0aGlzLnNlbGVjdGVkTWludXRlKTsKICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZVdpdGhUaW1lem9uZSh0aGlzLnNlbGVjdGVkRGF0ZSk7CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVRpbWV6b25lQ2hhbmdlKGUxMSkgewogICAgICBjb25zdCBzZWxlY3QgPSBlMTEudGFyZ2V0OwogICAgICB0aGlzLnRpbWV6b25lID0gc2VsZWN0LnZhbHVlOwogICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKTsKICAgIH0KICAgIGZvcm1hdFZhbHVlV2l0aFRpbWV6b25lKGRhdGUpIHsKICAgICAgaWYgKCF0aGlzLmVuYWJsZVRpbWV6b25lKSB7CiAgICAgICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTsKICAgICAgfQogICAgICBjb25zdCBmb3JtYXR0ZXIyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImVuLVVTIiwgewogICAgICAgIHllYXI6ICJudW1lcmljIiwKICAgICAgICBtb250aDogIjItZGlnaXQiLAogICAgICAgIGRheTogIjItZGlnaXQiLAogICAgICAgIGhvdXI6ICIyLWRpZ2l0IiwKICAgICAgICBtaW51dGU6ICIyLWRpZ2l0IiwKICAgICAgICBzZWNvbmQ6ICIyLWRpZ2l0IiwKICAgICAgICBob3VyMTI6IGZhbHNlLAogICAgICAgIHRpbWVab25lOiB0aGlzLnRpbWV6b25lLAogICAgICAgIHRpbWVab25lTmFtZTogInNob3J0IgogICAgICB9KTsKICAgICAgY29uc3QgcGFydHMgPSBmb3JtYXR0ZXIyLmZvcm1hdFRvUGFydHMoZGF0ZSk7CiAgICAgIGNvbnN0IGRhdGVQYXJ0cyA9IHt9OwogICAgICBwYXJ0cy5mb3JFYWNoKChwYXJ0KSA9PiB7CiAgICAgICAgZGF0ZVBhcnRzW3BhcnQudHlwZV0gPSBwYXJ0LnZhbHVlOwogICAgICB9KTsKICAgICAgY29uc3QgaXNvU3RyaW5nID0gYCR7ZGF0ZVBhcnRzLnllYXJ9LSR7ZGF0ZVBhcnRzLm1vbnRofS0ke2RhdGVQYXJ0cy5kYXl9VCR7ZGF0ZVBhcnRzLmhvdXJ9OiR7ZGF0ZVBhcnRzLm1pbnV0ZX06JHtkYXRlUGFydHMuc2Vjb25kfWA7CiAgICAgIGNvbnN0IHR6T2Zmc2V0ID0gdGhpcy5nZXRUaW1lem9uZU9mZnNldChkYXRlLCB0aGlzLnRpbWV6b25lKTsKICAgICAgcmV0dXJuIGAke2lzb1N0cmluZ30ke3R6T2Zmc2V0fWA7CiAgICB9CiAgICBnZXRUaW1lem9uZU9mZnNldChkYXRlLCB0aW1lem9uZSkgewogICAgICBjb25zdCB0ekRhdGUgPSBuZXcgRGF0ZShkYXRlLnRvTG9jYWxlU3RyaW5nKCJlbi1VUyIsIHsgdGltZVpvbmU6IHRpbWV6b25lIH0pKTsKICAgICAgY29uc3QgdXRjRGF0ZSA9IG5ldyBEYXRlKGRhdGUudG9Mb2NhbGVTdHJpbmcoImVuLVVTIiwgeyB0aW1lWm9uZTogIlVUQyIgfSkpOwogICAgICBjb25zdCBvZmZzZXRNaW51dGVzID0gKHR6RGF0ZS5nZXRUaW1lKCkgLSB1dGNEYXRlLmdldFRpbWUoKSkgLyAoMWUzICogNjApOwogICAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IoTWF0aC5hYnMob2Zmc2V0TWludXRlcykgLyA2MCk7CiAgICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmFicyhvZmZzZXRNaW51dGVzKSAlIDYwOwogICAgICBjb25zdCBzaWduID0gb2Zmc2V0TWludXRlcyA+PSAwID8gIisiIDogIi0iOwogICAgICByZXR1cm4gYCR7c2lnbn0ke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX06JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX1gOwogICAgfQogICAgaGFuZGxlS2V5ZG93bihlMTEpIHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIgfHwgZTExLmtleSA9PT0gIiAiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy50b2dnbGVDYWxlbmRhcigpOwogICAgICB9IGVsc2UgaWYgKGUxMS5rZXkgPT09ICJFc2NhcGUiICYmIHRoaXMuaXNPcGVuZWQpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGNsZWFyVmFsdWUoZTExKSB7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgaGFuZGxlTWFudWFsSW5wdXQoZTExKSB7CiAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0LnZhbHVlLnRyaW0oKTsKICAgICAgaWYgKCFpbnB1dFZhbHVlKSB7CiAgICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgcGFyc2VkRGF0ZSA9IHRoaXMucGFyc2VNYW51YWxEYXRlKGlucHV0VmFsdWUpOwogICAgICBpZiAocGFyc2VkRGF0ZSAmJiAhaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpKSB7CiAgICAgICAgdGhpcy52YWx1ZSA9IHBhcnNlZERhdGUudG9JU09TdHJpbmcoKTsKICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHBhcnNlZERhdGU7CiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKHBhcnNlZERhdGUpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gcGFyc2VkRGF0ZS5nZXRIb3VycygpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBwYXJzZWREYXRlLmdldE1pbnV0ZXMoKTsKICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlSW5wdXRCbHVyKGUxMSkgewogICAgICBjb25zdCBpbnB1dCA9IGUxMS50YXJnZXQ7CiAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSBpbnB1dC52YWx1ZS50cmltKCk7CiAgICAgIGlmICghaW5wdXRWYWx1ZSkgewogICAgICAgIHRoaXMudmFsdWUgPSAiIjsKICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHBhcnNlZERhdGUgPSB0aGlzLnBhcnNlTWFudWFsRGF0ZShpbnB1dFZhbHVlKTsKICAgICAgaWYgKHBhcnNlZERhdGUgJiYgIWlzTmFOKHBhcnNlZERhdGUuZ2V0VGltZSgpKSkgewogICAgICAgIHRoaXMudmFsdWUgPSBwYXJzZWREYXRlLnRvSVNPU3RyaW5nKCk7CiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBwYXJzZWREYXRlOwogICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZShwYXJzZWREYXRlKTsKICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHBhcnNlZERhdGUuZ2V0SG91cnMoKTsKICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gcGFyc2VkRGF0ZS5nZXRNaW51dGVzKCk7CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLmZvcm1hdERhdGUodGhpcy52YWx1ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLmZvcm1hdERhdGUodGhpcy52YWx1ZSk7CiAgICAgIH0KICAgIH0KICAgIHBhcnNlTWFudWFsRGF0ZShpbnB1dCkgewogICAgICBpZiAoIWlucHV0KQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCBwYXJ0cyA9IGlucHV0LnNwbGl0KCIgIik7CiAgICAgIGxldCBkYXRlUGFydCA9IHBhcnRzWzBdOwogICAgICBsZXQgdGltZVBhcnQgPSBwYXJ0c1sxXSB8fCAiIjsKICAgICAgbGV0IHBhcnNlZERhdGUgPSBudWxsOwogICAgICBjb25zdCBpc29NYXRjaCA9IGRhdGVQYXJ0Lm1hdGNoKC9eKFxkezR9KS0oXGR7MSwyfSktKFxkezEsMn0pJC8pOwogICAgICBpZiAoaXNvTWF0Y2gpIHsKICAgICAgICBjb25zdCBbXzQsIHllYXIsIG1vbnRoLCBkYXldID0gaXNvTWF0Y2g7CiAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKHBhcnNlSW50KHllYXIpLCBwYXJzZUludChtb250aCkgLSAxLCBwYXJzZUludChkYXkpKTsKICAgICAgfQogICAgICBpZiAoIXBhcnNlZERhdGUpIHsKICAgICAgICBjb25zdCBldU1hdGNoID0gZGF0ZVBhcnQubWF0Y2goL14oXGR7MSwyfSlcLihcZHsxLDJ9KVwuKFxkezR9KSQvKTsKICAgICAgICBpZiAoZXVNYXRjaCkgewogICAgICAgICAgY29uc3QgW180LCBkYXksIG1vbnRoLCB5ZWFyXSA9IGV1TWF0Y2g7CiAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUocGFyc2VJbnQoeWVhciksIHBhcnNlSW50KG1vbnRoKSAtIDEsIHBhcnNlSW50KGRheSkpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIXBhcnNlZERhdGUpIHsKICAgICAgICBjb25zdCB1c01hdGNoID0gZGF0ZVBhcnQubWF0Y2goL14oXGR7MSwyfSlcLyhcZHsxLDJ9KVwvKFxkezR9KSQvKTsKICAgICAgICBpZiAodXNNYXRjaCkgewogICAgICAgICAgY29uc3QgW180LCBtb250aCwgZGF5LCB5ZWFyXSA9IHVzTWF0Y2g7CiAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUocGFyc2VJbnQoeWVhciksIHBhcnNlSW50KG1vbnRoKSAtIDEsIHBhcnNlSW50KGRheSkpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIXBhcnNlZERhdGUgfHwgaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRpbWVQYXJ0KSB7CiAgICAgICAgY29uc3QgdGltZU1hdGNoID0gdGltZVBhcnQubWF0Y2goL14oXGR7MSwyfSk6KFxkezJ9KSQvKTsKICAgICAgICBpZiAodGltZU1hdGNoKSB7CiAgICAgICAgICBjb25zdCBbXzQsIGhvdXJzLCBtaW51dGVzXSA9IHRpbWVNYXRjaDsKICAgICAgICAgIHBhcnNlZERhdGUuc2V0SG91cnMocGFyc2VJbnQoaG91cnMpKTsKICAgICAgICAgIHBhcnNlZERhdGUuc2V0TWludXRlcyhwYXJzZUludChtaW51dGVzKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKCF0aGlzLmVuYWJsZVRpbWUpIHsKICAgICAgICBjb25zdCBub3cyID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgICAgcGFyc2VkRGF0ZS5zZXRIb3Vycyhub3cyLmdldEhvdXJzKCkpOwogICAgICAgIHBhcnNlZERhdGUuc2V0TWludXRlcyhub3cyLmdldE1pbnV0ZXMoKSk7CiAgICAgICAgcGFyc2VkRGF0ZS5zZXRTZWNvbmRzKDApOwogICAgICAgIHBhcnNlZERhdGUuc2V0TWlsbGlzZWNvbmRzKDApOwogICAgICB9CiAgICAgIHJldHVybiBwYXJzZWREYXRlOwogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlMik7CiAgICAgICAgICBpZiAoIWlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgewogICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGRhdGU7CiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZShkYXRlKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBkYXRlLmdldEhvdXJzKCk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBkYXRlLmdldE1pbnV0ZXMoKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dERhdGVwaWNrZXIyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRleHQvZGVlcy1pbnB1dC10ZXh0LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMTIgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC5pbnRlcmFjdGl2ZS1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5vdXRwdXQtdGV4dCB7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjEwIDQwJSA4MCUpIil9OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTglKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWluLWhlaWdodDogMjRweDsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgaW5wdXRzID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LXRleHQiKTsKICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHsKICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVN1YmplY3QiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coYElucHV0ICIke2lucHV0LmxhYmVsfSIgY2hhbmdlZCB0bzpgLCBpbnB1dC5nZXRWYWx1ZSgpKTsKICAgIH0pOwogICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coYElucHV0ICIke2lucHV0LmxhYmVsfSIgbG9zdCBmb2N1c2ApOwogICAgfSk7CiAgfSk7CiAgY29uc3QgcGFzc3dvcmRJbnB1dCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC10ZXh0W2tleT0icGFzc3dvcmQiXScpOwogIGlmIChwYXNzd29yZElucHV0KSB7CiAgICBjb25zb2xlLmxvZygiUGFzc3dvcmQgaW5wdXQgaW5jbHVkZXMgdmlzaWJpbGl0eSB0b2dnbGUiKTsKICB9Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgVGV4dCBJbnB1dHMifSAuc3VidGl0bGU9JHsiU3RhbmRhcmQgdGV4dCBpbnB1dHMgd2l0aCBsYWJlbHMgYW5kIGRlc2NyaXB0aW9ucyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAubGFiZWw9JHsiVXNlcm5hbWUifSAKICAgICAgICAgIC52YWx1ZT0keyJqb2huZG9lIn0KICAgICAgICAgIC5rZXk9JHsidXNlcm5hbWUifQogICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IkVtYWlsIEFkZHJlc3MifSAKICAgICAgICAgIC52YWx1ZT0keyJqb2huQGV4YW1wbGUuY29tIn0gCiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiV2Ugd2lsbCBuZXZlciBzaGFyZSB5b3VyIGVtYWlsIHdpdGggYW55b25lIn0KICAgICAgICAgIC5rZXk9JHsiZW1haWwifQogICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IlBhc3N3b3JkIn0gCiAgICAgICAgICAuaXNQYXNzd29yZEJvb2w9JHt0cnVlfSAKICAgICAgICAgIC52YWx1ZT0keyJzZWNyZXQxMjMifQogICAgICAgICAgLmtleT0keyJwYXNzd29yZCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgaG9yaXpvbnRhbElucHV0cyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC10ZXh0Iik7CiAgaG9yaXpvbnRhbElucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4gewogICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGlucHV0KTsKICAgIGNvbnNvbGUubG9nKGBIb3Jpem9udGFsIGlucHV0ICIke2lucHV0LmxhYmVsfSIgZGlzcGxheTpgLCBjb21wdXRlZFN0eWxlLmRpc3BsYXkpOwogIH0pOwogIGNvbnN0IGZpcnN0TmFtZUlucHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LXRleHRba2V5PSJmaXJzdE5hbWUiXScpOwogIGNvbnN0IGxhc3ROYW1lSW5wdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtdGV4dFtrZXk9Imxhc3ROYW1lIl0nKTsKICBpZiAoZmlyc3ROYW1lSW5wdXQgJiYgbGFzdE5hbWVJbnB1dCkgewogICAgY29uc3QgdXBkYXRlRnVsbE5hbWUgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGZpcnN0TmFtZSA9IGZpcnN0TmFtZUlucHV0LmdldFZhbHVlKCk7CiAgICAgIGNvbnN0IGxhc3ROYW1lID0gbGFzdE5hbWVJbnB1dC5nZXRWYWx1ZSgpOwogICAgICBjb25zb2xlLmxvZyhgRnVsbCBuYW1lOiAke2ZpcnN0TmFtZX0gJHtsYXN0TmFtZX1gKTsKICAgIH07CiAgICBmaXJzdE5hbWVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTdWJqZWN0IiwgdXBkYXRlRnVsbE5hbWUpOwogICAgbGFzdE5hbWVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTdWJqZWN0IiwgdXBkYXRlRnVsbE5hbWUpOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJNdWx0aXBsZSBpbnB1dHMgYXJyYW5nZWQgaG9yaXpvbnRhbGx5IGZvciBjb21wYWN0IGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiRmlyc3QgTmFtZSJ9IAogICAgICAgICAgICAudmFsdWU9JHsiSm9obiJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJmaXJzdE5hbWUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiTGFzdCBOYW1lIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyJEb2UifSAKICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5rZXk9JHsibGFzdE5hbWUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiQWdlIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyIyOCJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJhZ2UifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgaW5wdXRzID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LXRleHQiKTsKICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHsKICAgIGNvbnN0IHBvc2l0aW9uMyA9IGlucHV0LmxhYmVsUG9zaXRpb247CiAgICBjb25zb2xlLmxvZyhgSW5wdXQgIiR7aW5wdXQubGFiZWx9IiBoYXMgbGFiZWwgcG9zaXRpb246ICR7cG9zaXRpb24zfWApOwogIH0pOwogIGNvbnN0IGxlZnRMYWJlbElucHV0cyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgnZGVlcy1pbnB1dC10ZXh0W2xhYmVsUG9zaXRpb249ImxlZnQiXScpOwogIGlmIChsZWZ0TGFiZWxJbnB1dHMubGVuZ3RoID4gMCkgewogICAgY29uc29sZS5sb2coYCR7bGVmdExhYmVsSW5wdXRzLmxlbmd0aH0gaW5wdXRzIGhhdmUgbGVmdC1hbGlnbmVkIGxhYmVscyBmb3IgaW5saW5lIGxheW91dGApOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJMYWJlbCBQb3NpdGlvbnMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IGxhYmVsIHBvc2l0aW9uaW5nIG9wdGlvbnMgZm9yIHZhcmlvdXMgbGF5b3V0cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAubGFiZWw9JHsiTGFiZWwgb24gVG9wIChEZWZhdWx0KSJ9IAogICAgICAgICAgLnZhbHVlPSR7IlN0YW5kYXJkIGxheW91dCJ9IAogICAgICAgICAgLmxhYmVsUG9zaXRpb249JHsidG9wIn0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJMYWJlbCBvbiBMZWZ0In0gCiAgICAgICAgICAudmFsdWU9JHsiSW5saW5lIGxhYmVsIn0gCiAgICAgICAgICAubGFiZWxQb3NpdGlvbj0keyJsZWZ0In0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLmxhYmVsPSR7IkNpdHkifSAKICAgICAgICAgICAgLnZhbHVlPSR7Ik5ldyBZb3JrIn0gCiAgICAgICAgICAgIC5sYWJlbFBvc2l0aW9uPSR7ImxlZnQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiWklQIENvZGUifSAKICAgICAgICAgICAgLnZhbHVlPSR7IjEwMDAxIn0gCiAgICAgICAgICAgIC5sYWJlbFBvc2l0aW9uPSR7ImxlZnQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgcmVxdWlyZWRJbnB1dCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0W3JlcXVpcmVkXSIpOwogIGNvbnN0IGRpc2FibGVkSW5wdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dFtkaXNhYmxlZF0iKTsKICBjb25zdCBlcnJvcklucHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LXRleHRbdmFsaWRhdGlvblN0YXRlPSJpbnZhbGlkIl0nKTsKICBpZiAocmVxdWlyZWRJbnB1dCkgewogICAgcmVxdWlyZWRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gewogICAgICBpZiAoIXJlcXVpcmVkSW5wdXQuZ2V0VmFsdWUoKSkgewogICAgICAgIGNvbnNvbGUubG9nKCJSZXF1aXJlZCBmaWVsZCBpcyBlbXB0eSEiKTsKICAgICAgfQogICAgfSk7CiAgfQogIGlmIChkaXNhYmxlZElucHV0KSB7CiAgICBjb25zb2xlLmxvZygiRGlzYWJsZWQgaW5wdXQgY2Fubm90IGJlIGVkaXRlZCIpOwogIH0KICBpZiAoZXJyb3JJbnB1dCkgewogICAgY29uc29sZS5sb2coIkVycm9yIGlucHV0IHNob3dzIHZhbGlkYXRpb24gbWVzc2FnZToiLCBlcnJvcklucHV0LnZhbGlkYXRpb25UZXh0KTsKICAgIGVycm9ySW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsICgpID0+IHsKICAgICAgY29uc3QgdmFsdWUyID0gZXJyb3JJbnB1dC5nZXRWYWx1ZSgpOwogICAgICBpZiAodmFsdWUyLmluY2x1ZGVzKCJAIikgJiYgdmFsdWUyLmluY2x1ZGVzKCIuIikpIHsKICAgICAgICBlcnJvcklucHV0LnZhbGlkYXRpb25TdGF0ZSA9ICJ2YWxpZCI7CiAgICAgICAgZXJyb3JJbnB1dC52YWxpZGF0aW9uVGV4dCA9ICIiOwogICAgICAgIGNvbnNvbGUubG9nKCJFbWFpbCB2YWxpZGF0aW9uIHBhc3NlZCEiKTsKICAgICAgfQogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlZhbGlkYXRpb24gJiBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHZhbGlkYXRpb24gc3RhdGVzIGFuZCBpbnB1dCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAubGFiZWw9JHsiUmVxdWlyZWQgRmllbGQifSAKICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAua2V5PSR7InJlcXVpcmVkRmllbGQifQogICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIEZpZWxkIn0gCiAgICAgICAgICAudmFsdWU9JHsiQ2Fubm90IGVkaXQgdGhpcyJ9IAogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJGaWVsZCB3aXRoIEVycm9yIn0gCiAgICAgICAgICAudmFsdWU9JHsiaW52YWxpZEAifSAKICAgICAgICAgIC52YWxpZGF0aW9uVGV4dD0keyJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzIn0KICAgICAgICAgIC52YWxpZGF0aW9uU3RhdGU9JHsiaW52YWxpZCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgcGFzc3dvcmRJbnB1dHMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtdGV4dFtpc1Bhc3N3b3JkQm9vbF0iKTsKICBwYXNzd29yZElucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4gewogICAgY29uc3QgY2hlY2tUb2dnbGUgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGlucHV0RWwgPSBpbnB1dC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpOwogICAgICBpZiAoaW5wdXRFbCkgewogICAgICAgIGNvbnNvbGUubG9nKGBQYXNzd29yZCBmaWVsZCAiJHtpbnB1dC5sYWJlbH0iIHR5cGU6YCwgaW5wdXRFbC50eXBlKTsKICAgICAgfQogICAgfTsKICAgIGlmIChpbnB1dC5zaGFkb3dSb290KSB7CiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2hlY2tUb2dnbGUpOwogICAgICBjb25zdCBpbnB1dEVsID0gaW5wdXQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpOwogICAgICBpZiAoaW5wdXRFbCkgewogICAgICAgIG9ic2VydmVyLm9ic2VydmUoaW5wdXRFbCwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsidHlwZSJdIH0pOwogICAgICB9CiAgICB9CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQWR2YW5jZWQgRmVhdHVyZXMifSAuc3VidGl0bGU9JHsiUGFzc3dvcmQgdmlzaWJpbGl0eSB0b2dnbGUgYW5kIG90aGVyIGFkdmFuY2VkIGZlYXR1cmVzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJQYXNzd29yZCB3aXRoIFRvZ2dsZSJ9IAogICAgICAgICAgLmlzUGFzc3dvcmRCb29sPSR7dHJ1ZX0KICAgICAgICAgIC52YWx1ZT0keyJteVNlY3VyZVBhc3N3b3JkMTIzIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJDbGljayB0aGUgZXllIGljb24gdG8gc2hvdy9oaWRlIHBhc3N3b3JkIn0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJBUEkgS2V5In0gCiAgICAgICAgICAuaXNQYXNzd29yZEJvb2w9JHt0cnVlfQogICAgICAgICAgLnZhbHVlPSR7InNrLTEyMzQ1Njc4OTBhYmNkZWYifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IktlZXAgdGhpcyBrZXkgc2VjdXJlIGFuZCBuZXZlciBzaGFyZSBpdCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZHluYW1pY0lucHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LXRleHQiKTsKICBjb25zdCBvdXRwdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiN0ZXh0LWlucHV0LW91dHB1dCIpOwogIGlmIChkeW5hbWljSW5wdXQgJiYgb3V0cHV0KSB7CiAgICBkeW5hbWljSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsIChldmVudCkgPT4gewogICAgICBjb25zdCB2YWx1ZTIgPSBldmVudC5kZXRhaWwuZ2V0VmFsdWUoKTsKICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gYEN1cnJlbnQgdmFsdWU6ICIke3ZhbHVlMn0iYDsKICAgIH0pOwogICAgZHluYW1pY0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICBjb25zb2xlLmxvZygiSW5wdXQgZm9jdXNlZCIpOwogICAgfSk7CiAgICBkeW5hbWljSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coIklucHV0IGJsdXJyZWQiKTsKICAgIH0pOwogICAgbGV0IGtleXByZXNzQ291bnQgPSAwOwogICAgZHluYW1pY0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoKSA9PiB7CiAgICAgIGtleXByZXNzQ291bnQrKzsKICAgICAgY29uc29sZS5sb2coYEtleXByZXNzIGNvdW50OiAke2tleXByZXNzQ291bnR9YCk7CiAgICB9KTsKICB9Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiSW50ZXJhY3RpdmUgRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJUcnkgdHlwaW5nIGluIHRoZSBpbnB1dHMgdG8gc2VlIHJlYWwtdGltZSB2YWx1ZSBjaGFuZ2VzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJEeW5hbWljIElucHV0In0gCiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiVHlwZSBzb21ldGhpbmcgaGVyZS4uLiJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImludGVyYWN0aXZlLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBpZD0idGV4dC1pbnB1dC1vdXRwdXQiIGNsYXNzPSJvdXRwdXQtdGV4dCI+Q3VycmVudCB2YWx1ZTogIiI8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIDwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtdGV4dC9kZWVzLWlucHV0LXRleHQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjAgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczIxID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRUZXh0ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC10ZXh0IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNQYXNzd29yZEJvb2xfZGVjb3JhdG9yczsKICBsZXQgX2lzUGFzc3dvcmRCb29sX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNQYXNzd29yZEJvb2xfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dQYXNzd29yZEJvb2xfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dQYXNzd29yZEJvb2xfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93UGFzc3dvcmRCb29sX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9yczsKICBsZXQgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25GdW5jdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfdmFsaWRhdGlvbkZ1bmN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvbkZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dFRleHQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfaXNQYXNzd29yZEJvb2xfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3Nob3dQYXNzd29yZEJvb2xfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3ZhbGlkYXRpb25TdGF0ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgcmVmbGVjdDogdHJ1ZQogICAgICB9KV07CiAgICAgIF92YWxpZGF0aW9uRnVuY3Rpb25fZGVjb3JhdG9ycyA9IFtuNSh7fSldOwogICAgICBfX2VzRGVjb3JhdGUyMCh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIwKHRoaXMsIG51bGwsIF9pc1Bhc3N3b3JkQm9vbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc1Bhc3N3b3JkQm9vbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNQYXNzd29yZEJvb2wiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNQYXNzd29yZEJvb2wsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzUGFzc3dvcmRCb29sID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzUGFzc3dvcmRCb29sX2luaXRpYWxpemVycywgX2lzUGFzc3dvcmRCb29sX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjAodGhpcywgbnVsbCwgX3Nob3dQYXNzd29yZEJvb2xfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1Bhc3N3b3JkQm9vbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1Bhc3N3b3JkQm9vbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93UGFzc3dvcmRCb29sLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93UGFzc3dvcmRCb29sID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dQYXNzd29yZEJvb2xfaW5pdGlhbGl6ZXJzLCBfc2hvd1Bhc3N3b3JkQm9vbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIwKHRoaXMsIG51bGwsIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsaWRhdGlvblN0YXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uU3RhdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWxpZGF0aW9uU3RhdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIwKHRoaXMsIG51bGwsIF92YWxpZGF0aW9uVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWxpZGF0aW9uVGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsaWRhdGlvblRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblRleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbGlkYXRpb25UZXh0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjAodGhpcywgbnVsbCwgX3ZhbGlkYXRpb25GdW5jdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWxpZGF0aW9uRnVuY3Rpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbGlkYXRpb25GdW5jdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWxpZGF0aW9uRnVuY3Rpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbGlkYXRpb25GdW5jdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWxpZGF0aW9uRnVuY3Rpb25faW5pdGlhbGl6ZXJzLCBfdmFsaWRhdGlvbkZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRUZXh0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc1Bhc3N3b3JkQm9vbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjEodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfaXNQYXNzd29yZEJvb2xfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzUGFzc3dvcmRCb29sKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNQYXNzd29yZEJvb2xfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1Bhc3N3b3JkQm9vbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNQYXNzd29yZEJvb2xfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93UGFzc3dvcmRCb29sX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfaXNQYXNzd29yZEJvb2xfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF9zaG93UGFzc3dvcmRCb29sX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93UGFzc3dvcmRCb29sKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd1Bhc3N3b3JkQm9vbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dQYXNzd29yZEJvb2wodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dQYXNzd29yZEJvb2xfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF9zaG93UGFzc3dvcmRCb29sX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgdmFsaWRhdGlvblN0YXRlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblN0YXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsaWRhdGlvblN0YXRlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YWxpZGF0aW9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjEodGhpcywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjEodGhpcywgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCB2YWxpZGF0aW9uVGV4dCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3ZhbGlkYXRpb25UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsaWRhdGlvblRleHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbGlkYXRpb25UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmFsaWRhdGlvbkZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF92YWxpZGF0aW9uRnVuY3Rpb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCB2YWxpZGF0aW9uRnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWxpZGF0aW9uRnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWxpZGF0aW9uRnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbGlkYXRpb25GdW5jdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiBhdXRvOwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgIH0KCiAgICAgIGlucHV0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBjdXJzb3I6IHRleHQ7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICB9CgogICAgICBpbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgaW5wdXQ6aG92ZXI6bm90KDpkaXNhYmxlZCk6bm90KDpmb2N1cykgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIGlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUgLyAwLjA1KSIsICJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAvKiBQYXNzd29yZCB0b2dnbGUgYnV0dG9uICovCiAgICAgIC5zaG93UGFzc3dvcmQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMXB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDM4cHg7CiAgICAgICAgaGVpZ2h0OiAzOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMCA1cHggNXB4IDA7CiAgICAgIH0KCiAgICAgIC5zaG93UGFzc3dvcmQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIFZhbGlkYXRpb24gc3R5bGVzICovCiAgICAgIC52YWxpZGF0aW9uQ29udGFpbmVyIHsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAudmFsaWRhdGlvbkNvbnRhaW5lci5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlIC8gMC4xKSIsICJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUpIil9OwogICAgICB9CgogICAgICAudmFsaWRhdGlvbkNvbnRhaW5lci53YXJuIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUgLyAwLjEpIiwgImhzbCgyNSA5NSUgNjMlIC8gMC4xKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyNSA5NSUgNTMlKSIsICJoc2woMjUgOTUlIDYzJSkiKX07CiAgICAgIH0KCiAgICAgIC52YWxpZGF0aW9uQ29udGFpbmVyLnZhbGlkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4xKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUgLyAwLjEpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICB9CgogICAgICAvKiBFcnJvciBzdGF0ZSBmb3IgaW5wdXQgKi8KICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9ImludmFsaWQiXSkgaW5wdXQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsICJoc2woMCA3Mi4yJSA1MC42JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uLXN0YXRlPSJpbnZhbGlkIl0pIGlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUgLyAwLjA1KSIsICJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMDUpIil9OwogICAgICB9CgogICAgICAvKiBXYXJuaW5nIHN0YXRlIGZvciBpbnB1dCAqLwogICAgICA6aG9zdChbdmFsaWRhdGlvbi1zdGF0ZT0id2FybiJdKSBpbnB1dCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUpIiwgImhzbCgyNSA5NSUgNjMlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9Indhcm4iXSkgaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyNSA5NSUgNTMlKSIsICJoc2woMjUgOTUlIDYzJSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjUgOTUlIDUzJSAvIDAuMDUpIiwgImhzbCgyNSA5NSUgNjMlIC8gMC4wNSkiKX07CiAgICAgIH0KCiAgICAgIC8qIFZhbGlkIHN0YXRlIGZvciBpbnB1dCAqLwogICAgICA6aG9zdChbdmFsaWRhdGlvbi1zdGF0ZT0idmFsaWQiXSkgaW5wdXQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9InZhbGlkIl0pIGlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwgImhzbCgxNDIuMSA3MC42JSA0NS4zJSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUgLyAwLjA1KSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUgLyAwLjA1KSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgaW5wdXQgewogICAgICAgICAgZm9udC1mYW1pbHk6ICR7dGhpcy5pc1Bhc3N3b3JkQm9vbCA/IGNzc01vbm9Gb250RmFtaWx5IDogImluaGVyaXQifTsKICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAke3RoaXMuaXNQYXNzd29yZEJvb2wgPyAiMC41cHgiIDogIm5vcm1hbCJ9OwogICAgICAgICAgcGFkZGluZy1yaWdodDogJHt0aGlzLmlzUGFzc3dvcmRCb29sID8gIjQ4cHgiIDogIjEycHgifTsKICAgICAgICB9CiAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25UZXh0ID8gaWAKICAgICAgICAgICAgICAudmFsaWRhdGlvbkNvbnRhaW5lciB7CiAgICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgYCA6IGlgCiAgICAgICAgICAgICAgLnZhbGlkYXRpb25Db250YWluZXIgewogICAgICAgICAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkZWVzLWxhYmVsIC5sYWJlbD0ke3RoaXMubGFiZWx9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259IC5yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWR9PjwvZGVlcy1sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSIke3RoaXMuaXNQYXNzd29yZEJvb2wgJiYgIXRoaXMuc2hvd1Bhc3N3b3JkQm9vbCA/ICJwYXNzd29yZCIgOiAidGV4dCJ9IgogICAgICAgICAgICAudmFsdWU9JHt0aGlzLnZhbHVlfQogICAgICAgICAgICBAaW5wdXQ9IiR7dGhpcy51cGRhdGVWYWx1ZX0iCiAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9CiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSIke3RoaXMubGFiZWwgPyAiIiA6ICJFbnRlciB0ZXh0Li4uIn0iCiAgICAgICAgICAvPgogICAgICAgICAgJHt0aGlzLmlzUGFzc3dvcmRCb29sID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG93UGFzc3dvcmQiIEBjbGljaz0ke3RoaXMudG9nZ2xlUGFzc3dvcmRWaWV3fT4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuc2hvd1Bhc3N3b3JkQm9vbCA/ICJsdWNpZGU6RXllIiA6ICJsdWNpZGU6RXllT2ZmIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogYjJgYH0KICAgICAgICAgICR7dGhpcy52YWxpZGF0aW9uVGV4dCA/IGIyYAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsaWRhdGlvbkNvbnRhaW5lciAke3RoaXMudmFsaWRhdGlvblN0YXRlIHx8ICJlcnJvciJ9Ij4KICAgICAgICAgICAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25UZXh0fQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCA6IGIyYDxkaXYgY2xhc3M9InZhbGlkYXRpb25Db250YWluZXIiPjwvZGl2PmB9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZVZhbHVlKGV2ZW50QXJnKSB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50QXJnLnRhcmdldDsKICAgICAgdGhpcy52YWx1ZSA9IHRhcmdldC52YWx1ZTsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgIH0KICAgIGFzeW5jIHRvZ2dsZVBhc3N3b3JkVmlldygpIHsKICAgICAgdGhpcy5zaG93UGFzc3dvcmRCb29sID0gIXRoaXMuc2hvd1Bhc3N3b3JkQm9vbDsKICAgIH0KICAgIGFzeW5jIGZvY3VzKCkgewogICAgICBjb25zdCB0ZXh0SW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKTsKICAgICAgdGV4dElucHV0LmZvY3VzKCk7CiAgICB9CiAgICBhc3luYyBibHVyKCkgewogICAgICBjb25zdCB0ZXh0SW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKTsKICAgICAgdGV4dElucHV0LmJsdXIoKTsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF92YWxpZGF0aW9uRnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyMShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0VGV4dDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkL2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxMyA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5wcm9kdWN0LWdyaWQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDI4MHB4LCAxZnIpKTsKICAgICAgICAgIGdhcDogMjBweDsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LXN1bW1hcnkgewogICAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAyMS44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgfQoKICAgICAgICAuY2FydC1zdW1tYXJ5LXRpdGxlIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LWl0ZW0gewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCAiaHNsKDIxNy45IDEwLjYlIDc0LjklKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LXRvdGFsIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgcGFkZGluZy10b3A6IDE2cHg7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuc2VsZWN0ZWQtcHJvZHVjdHMgewogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA3NC45JSkiKX07CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgUHJvZHVjdCBDYXJkcyJ9IC5zdWJ0aXRsZT0keyJTaW1wbGUgcHJvZHVjdCBkaXNwbGF5IHdpdGggdmFyaW91cyBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIldpcmVsZXNzIEJsdWV0b290aCBIZWFkcGhvbmVzIiwKICBjYXRlZ29yeTogIkF1ZGlvIiwKICBkZXNjcmlwdGlvbjogIlByZW1pdW0gc291bmQgcXVhbGl0eSB3aXRoIGFjdGl2ZSBub2lzZSBjYW5jZWxsYXRpb24iLAogIHByaWNlOiAxNDkuOTksCiAgb3JpZ2luYWxQcmljZTogMTk5Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOmhlYWRwaG9uZXMiCn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezF9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3sKICBuYW1lOiAiU21hcnQgV2F0Y2ggU2VyaWVzIDciLAogIGNhdGVnb3J5OiAiV2VhcmFibGVzIiwKICBkZXNjcmlwdGlvbjogIlRyYWNrIHlvdXIgZml0bmVzcyBhbmQgc3RheSBjb25uZWN0ZWQgb24gdGhlIGdvIiwKICBwcmljZTogMzk5LAogIGljb25OYW1lOiAibHVjaWRlOndhdGNoIgp9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIlVTQi1DIEh1YiIsCiAgY2F0ZWdvcnk6ICJBY2Nlc3NvcmllcyIsCiAgcHJpY2U6IDQ5Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOnVzYiIsCiAgaW5TdG9jazogZmFsc2UKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MH0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJJbnRlcmFjdGl2ZSBTaG9wcGluZyBDYXJ0In0gLnN1YnRpdGxlPSR7IlByb2R1Y3QgY2FyZHMgd2l0aCBkeW5hbWljIGNhcnQgY2FsY3VsYXRpb24ifSAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHByb2R1Y3RzID0gWwogICAgeyBpZDogImxhcHRvcCIsIGVsZW1lbnQ6IG51bGwsIGRhdGE6IHsgbmFtZTogJ01hY0Jvb2sgUHJvIDE0IicsIGNhdGVnb3J5OiAiQ29tcHV0ZXJzIiwgZGVzY3JpcHRpb246ICJNMyBQcm8gY2hpcCB3aXRoIDE4R0IgUkFNIiwgcHJpY2U6IDE5OTksIG9yaWdpbmFsUHJpY2U6IDIxOTksIGljb25OYW1lOiAibHVjaWRlOmxhcHRvcCIgfSB9LAogICAgeyBpZDogImlwYWQiLCBlbGVtZW50OiBudWxsLCBkYXRhOiB7IG5hbWU6ICJpUGFkIEFpciIsIGNhdGVnb3J5OiAiVGFibGV0cyIsIGRlc2NyaXB0aW9uOiAnMTAuOSIgTGlxdWlkIFJldGluYSBkaXNwbGF5JywgcHJpY2U6IDU5OSwgaWNvbk5hbWU6ICJsdWNpZGU6dGFibGV0IiB9IH0sCiAgICB7IGlkOiAia2V5Ym9hcmQiLCBlbGVtZW50OiBudWxsLCBkYXRhOiB7IG5hbWU6ICJNYWdpYyBLZXlib2FyZCIsIGNhdGVnb3J5OiAiQWNjZXNzb3JpZXMiLCBkZXNjcmlwdGlvbjogIldpcmVsZXNzIGtleWJvYXJkIHdpdGggVG91Y2ggSUQiLCBwcmljZTogMTQ5LCBpY29uTmFtZTogImx1Y2lkZTprZXlib2FyZCIgfSB9CiAgXTsKICBjb25zdCB1cGRhdGVDYXJ0U3VtbWFyeSA9ICgpID0+IHsKICAgIGxldCB0b3RhbCA9IDA7CiAgICBjb25zdCBpdGVtcyA9IFtdOwogICAgcHJvZHVjdHMuZm9yRWFjaCgocHJvZHVjdCkgPT4gewogICAgICBjb25zdCBlbGVtZW50NCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcihgIyR7cHJvZHVjdC5pZH1gKTsKICAgICAgaWYgKGVsZW1lbnQ0ICYmIGVsZW1lbnQ0LnF1YW50aXR5ID4gMCkgewogICAgICAgIGNvbnN0IHN1YnRvdGFsID0gcHJvZHVjdC5kYXRhLnByaWNlICogZWxlbWVudDQucXVhbnRpdHk7CiAgICAgICAgdG90YWwgKz0gc3VidG90YWw7CiAgICAgICAgaXRlbXMucHVzaChgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LWl0ZW0iPgogICAgICAgICAgICAgICAgICA8c3Bhbj4ke3Byb2R1Y3QuZGF0YS5uYW1lfSAoJHtlbGVtZW50NC5xdWFudGl0eX0pPC9zcGFuPgogICAgICAgICAgICAgICAgICA8c3Bhbj4kJHtzdWJ0b3RhbC50b0ZpeGVkKDIpfTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGApOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IHN1bW1hcnkgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNpbnRlcmFjdGl2ZS1jYXJ0LXN1bW1hcnkiKTsKICAgIGlmIChzdW1tYXJ5KSB7CiAgICAgIHN1bW1hcnkuaW5uZXJIVE1MID0gYAogICAgICAgICAgICAgICR7aXRlbXMuam9pbigiIil9CiAgICAgICAgICAgICAgJHtpdGVtcy5sZW5ndGggPT09IDAgPyAnPGRpdiBjbGFzcz0iY2FydC1pdGVtIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzk5OTsiPllvdXIgY2FydCBpcyBlbXB0eTwvZGl2PicgOiAiIn0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXRvdGFsIj4KICAgICAgICAgICAgICAgIDxzcGFuPlRvdGFsPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7dG90YWwudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA7CiAgICB9CiAgfTsKICBzZXRUaW1lb3V0KHVwZGF0ZUNhcnRTdW1tYXJ5LCAxMDApOwogIGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZCIpLmZvckVhY2goKGNhcmQpID0+IHsKICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcigicXVhbnRpdHlDaGFuZ2UiLCB1cGRhdGVDYXJ0U3VtbWFyeSk7CiAgfSk7Cn19PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICBpZD0ibGFwdG9wIgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogJ01hY0Jvb2sgUHJvIDE0IicsCiAgY2F0ZWdvcnk6ICJDb21wdXRlcnMiLAogIGRlc2NyaXB0aW9uOiAiTTMgUHJvIGNoaXAgd2l0aCAxOEdCIFJBTSIsCiAgcHJpY2U6IDE5OTksCiAgb3JpZ2luYWxQcmljZTogMjE5OSwKICBpY29uTmFtZTogImx1Y2lkZTpsYXB0b3AiCn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezF9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIGlkPSJpcGFkIgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogImlQYWQgQWlyIiwKICBjYXRlZ29yeTogIlRhYmxldHMiLAogIGRlc2NyaXB0aW9uOiAnMTAuOSIgTGlxdWlkIFJldGluYSBkaXNwbGF5JywKICBwcmljZTogNTk5LAogIGljb25OYW1lOiAibHVjaWRlOnRhYmxldCIKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MH0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgaWQ9ImtleWJvYXJkIgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIk1hZ2ljIEtleWJvYXJkIiwKICBjYXRlZ29yeTogIkFjY2Vzc29yaWVzIiwKICBkZXNjcmlwdGlvbjogIldpcmVsZXNzIGtleWJvYXJkIHdpdGggVG91Y2ggSUQiLAogIHByaWNlOiAxNDksCiAgaWNvbk5hbWU6ICJsdWNpZGU6a2V5Ym9hcmQiCn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezJ9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXN1bW1hcnkiPgogICAgICAgICAgPGgzIGNsYXNzPSJjYXJ0LXN1bW1hcnktdGl0bGUiPlNob3BwaW5nIENhcnQ8L2gzPgogICAgICAgICAgPGRpdiBpZD0iaW50ZXJhY3RpdmUtY2FydC1zdW1tYXJ5Ij4KICAgICAgICAgICAgPCEtLSBEeW5hbWljYWxseSB1cGRhdGVkIC0tPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJTZWxlY3RhYmxlIFByb2R1Y3QgQ2FyZHMifSAuc3VidGl0bGU9JHsiQ2xpY2sgY2FyZHMgb3IgY2hlY2tib3hlcyB0byBzZWxlY3QgcHJvZHVjdHMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWdyaWQiPgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogIG5hbWU6ICJTb255IEFscGhhIDcgSVYiLAogIGNhdGVnb3J5OiAiQ2FtZXJhcyIsCiAgZGVzY3JpcHRpb246ICJGdWxsLWZyYW1lIG1pcnJvcmxlc3MgY2FtZXJhIiwKICBwcmljZTogMjQ5OCwKICBpY29uTmFtZTogImx1Y2lkZTpjYW1lcmEiCn19CiAgICAgICAgICAgIC5zZWxlY3RhYmxlPSR7dHJ1ZX0KICAgICAgICAgICAgLnNob3dRdWFudGl0eVNlbGVjdG9yPSR7ZmFsc2V9CiAgICAgICAgICAgIEBzZWxlY3Rpb25DaGFuZ2U9JHsoZTExKSA9PiB7CiAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3NlbGVjdGlvbi1vdXRwdXQiKTsKICBpZiAob3V0cHV0KSB7CiAgICBjb25zdCBzZWxlY3RlZENhcmRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZFtzZWxlY3RhYmxlXSIpOwogICAgY29uc3Qgc2VsZWN0ZWRQcm9kdWN0cyA9IFtdOwogICAgc2VsZWN0ZWRDYXJkcy5mb3JFYWNoKChjYXJkKSA9PiB7CiAgICAgIGlmIChjYXJkLnNlbGVjdGVkKSB7CiAgICAgICAgc2VsZWN0ZWRQcm9kdWN0cy5wdXNoKGNhcmQucHJvZHVjdERhdGEubmFtZSk7CiAgICAgIH0KICAgIH0pOwogICAgb3V0cHV0LnRleHRDb250ZW50ID0gc2VsZWN0ZWRQcm9kdWN0cy5sZW5ndGggPiAwID8gYFNlbGVjdGVkOiAke3NlbGVjdGVkUHJvZHVjdHMuam9pbigiLCAiKX1gIDogIk5vIHByb2R1Y3RzIHNlbGVjdGVkIjsKICB9Cn19CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3sKICBuYW1lOiAiREpJIE1pbmkgMyBQcm8iLAogIGNhdGVnb3J5OiAiRHJvbmVzIiwKICBkZXNjcmlwdGlvbjogIkxpZ2h0d2VpZ2h0IGRyb25lIHdpdGggNEsgY2FtZXJhIiwKICBwcmljZTogNzU5LAogIGljb25OYW1lOiAibHVjaWRlOnBsYW5lIgp9fQogICAgICAgICAgICAuc2VsZWN0YWJsZT0ke3RydWV9CiAgICAgICAgICAgIC5zaG93UXVhbnRpdHlTZWxlY3Rvcj0ke2ZhbHNlfQogICAgICAgICAgICBAc2VsZWN0aW9uQ2hhbmdlPSR7KGUxMSkgPT4gewogIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNzZWxlY3Rpb24tb3V0cHV0Iik7CiAgaWYgKG91dHB1dCkgewogICAgY29uc3Qgc2VsZWN0ZWRDYXJkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmRbc2VsZWN0YWJsZV0iKTsKICAgIGNvbnN0IHNlbGVjdGVkUHJvZHVjdHMgPSBbXTsKICAgIHNlbGVjdGVkQ2FyZHMuZm9yRWFjaCgoY2FyZCkgPT4gewogICAgICBpZiAoY2FyZC5zZWxlY3RlZCkgewogICAgICAgIHNlbGVjdGVkUHJvZHVjdHMucHVzaChjYXJkLnByb2R1Y3REYXRhLm5hbWUpOwogICAgICB9CiAgICB9KTsKICAgIG91dHB1dC50ZXh0Q29udGVudCA9IHNlbGVjdGVkUHJvZHVjdHMubGVuZ3RoID4gMCA/IGBTZWxlY3RlZDogJHtzZWxlY3RlZFByb2R1Y3RzLmpvaW4oIiwgIil9YCA6ICJObyBwcm9kdWN0cyBzZWxlY3RlZCI7CiAgfQp9fQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIkdvUHJvIEhFUk8xMiIsCiAgY2F0ZWdvcnk6ICJBY3Rpb24gQ2FtZXJhcyIsCiAgZGVzY3JpcHRpb246ICI1LjNLIHZpZGVvIHdpdGggSHlwZXJTbW9vdGggNi4wIiwKICBwcmljZTogMzk5LAogIG9yaWdpbmFsUHJpY2U6IDQ0OSwKICBpY29uTmFtZTogImx1Y2lkZTp2aWRlbyIKfX0KICAgICAgICAgICAgLnNlbGVjdGFibGU9JHt0cnVlfQogICAgICAgICAgICAuc2hvd1F1YW50aXR5U2VsZWN0b3I9JHtmYWxzZX0KICAgICAgICAgICAgQHNlbGVjdGlvbkNoYW5nZT0keyhlMTEpID0+IHsKICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjc2VsZWN0aW9uLW91dHB1dCIpOwogIGlmIChvdXRwdXQpIHsKICAgIGNvbnN0IHNlbGVjdGVkQ2FyZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkW3NlbGVjdGFibGVdIik7CiAgICBjb25zdCBzZWxlY3RlZFByb2R1Y3RzID0gW107CiAgICBzZWxlY3RlZENhcmRzLmZvckVhY2goKGNhcmQpID0+IHsKICAgICAgaWYgKGNhcmQuc2VsZWN0ZWQpIHsKICAgICAgICBzZWxlY3RlZFByb2R1Y3RzLnB1c2goY2FyZC5wcm9kdWN0RGF0YS5uYW1lKTsKICAgICAgfQogICAgfSk7CiAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBzZWxlY3RlZFByb2R1Y3RzLmxlbmd0aCA+IDAgPyBgU2VsZWN0ZWQ6ICR7c2VsZWN0ZWRQcm9kdWN0cy5qb2luKCIsICIpfWAgOiAiTm8gcHJvZHVjdHMgc2VsZWN0ZWQiOwogIH0KfX0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ic2VsZWN0ZWQtcHJvZHVjdHMiIGlkPSJzZWxlY3Rpb24tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgTm8gcHJvZHVjdHMgc2VsZWN0ZWQKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlByb2R1Y3QgVmFyaWF0aW9ucyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgc3RhdGVzIGFuZCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIkxpbWl0ZWQgRWRpdGlvbiBTbmVha2VycyIsCiAgY2F0ZWdvcnk6ICJGb290d2VhciIsCiAgZGVzY3JpcHRpb246ICJFeGNsdXNpdmUgY29sb3J3YXkgLSBPbmx5IDUwMCBwYWlycyIsCiAgcHJpY2U6IDI5OSwKICBpY29uTmFtZTogImx1Y2lkZTpmb290cHJpbnRzIiwKICBpblN0b2NrOiBmYWxzZSwKICBzdG9ja1RleHQ6ICJTb2xkIE91dCIKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MH0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogIG5hbWU6ICJNaW5pbWFsaXN0IFdhbGxldCIsCiAgcHJpY2U6IDM5Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOndhbGxldCIKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MX0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogIG5hbWU6ICJQcmVtaXVtIENvZmZlZSBCZWFucyIsCiAgY2F0ZWdvcnk6ICJGb29kICYgQmV2ZXJhZ2UiLAogIGRlc2NyaXB0aW9uOiAiU2luZ2xlIG9yaWdpbiwgbWVkaXVtIHJvYXN0IiwKICBwcmljZTogMTguNSwKICBpY29uTmFtZTogImx1Y2lkZTpjb2ZmZWUiLAogIGN1cnJlbmN5OiAiXHUyMEFDIgp9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsyfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkL2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjEgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczIyID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzU2hvcHBpbmdQcm9kdWN0Y2FyZCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9wcm9kdWN0RGF0YV9kZWNvcmF0b3JzOwogIGxldCBfcHJvZHVjdERhdGFfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wcm9kdWN0RGF0YV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcXVhbnRpdHlfZGVjb3JhdG9yczsKICBsZXQgX3F1YW50aXR5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcXVhbnRpdHlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93UXVhbnRpdHlTZWxlY3Rvcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RhYmxlX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RhYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0YWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1Nob3BwaW5nUHJvZHVjdGNhcmQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfcHJvZHVjdERhdGFfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9xdWFudGl0eV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX3NlbGVjdGFibGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2VsZWN0ZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGUyMSh0aGlzLCBudWxsLCBfcHJvZHVjdERhdGFfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicHJvZHVjdERhdGEiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInByb2R1Y3REYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnByb2R1Y3REYXRhLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wcm9kdWN0RGF0YSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wcm9kdWN0RGF0YV9pbml0aWFsaXplcnMsIF9wcm9kdWN0RGF0YV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIxKHRoaXMsIG51bGwsIF9xdWFudGl0eV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJxdWFudGl0eSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicXVhbnRpdHkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucXVhbnRpdHksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnF1YW50aXR5ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3F1YW50aXR5X2luaXRpYWxpemVycywgX3F1YW50aXR5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjEodGhpcywgbnVsbCwgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dRdWFudGl0eVNlbGVjdG9yIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93UXVhbnRpdHlTZWxlY3RvciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93UXVhbnRpdHlTZWxlY3Rvciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd1F1YW50aXR5U2VsZWN0b3IgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1F1YW50aXR5U2VsZWN0b3JfaW5pdGlhbGl6ZXJzLCBfc2hvd1F1YW50aXR5U2VsZWN0b3JfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyMSh0aGlzLCBudWxsLCBfc2VsZWN0YWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RhYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RhYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGFibGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGFibGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0YWJsZV9pbml0aWFsaXplcnMsIF9zZWxlY3RhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjEodGhpcywgbnVsbCwgX3NlbGVjdGVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyMShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNTaG9wcGluZ1Byb2R1Y3RjYXJkMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTM7CiAgICAjcHJvZHVjdERhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjIodGhpcywgX3Byb2R1Y3REYXRhX2luaXRpYWxpemVycywgewogICAgICBuYW1lOiAiUHJvZHVjdCBOYW1lIiwKICAgICAgcHJpY2U6IDAKICAgIH0pOwogICAgZ2V0IHByb2R1Y3REYXRhKCkgewogICAgICByZXR1cm4gdGhpcy4jcHJvZHVjdERhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwcm9kdWN0RGF0YSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcHJvZHVjdERhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNxdWFudGl0eV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjIodGhpcywgX3Byb2R1Y3REYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfcXVhbnRpdHlfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgcXVhbnRpdHkoKSB7CiAgICAgIHJldHVybiB0aGlzLiNxdWFudGl0eV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHF1YW50aXR5KHZhbHVlMikgewogICAgICB0aGlzLiNxdWFudGl0eV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dRdWFudGl0eVNlbGVjdG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfcXVhbnRpdHlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9zaG93UXVhbnRpdHlTZWxlY3Rvcl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzaG93UXVhbnRpdHlTZWxlY3RvcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dRdWFudGl0eVNlbGVjdG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1F1YW50aXR5U2VsZWN0b3IodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dRdWFudGl0eVNlbGVjdG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0YWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjIodGhpcywgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfc2VsZWN0YWJsZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgc2VsZWN0YWJsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGFibGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RhYmxlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RhYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9zZWxlY3RhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfc2VsZWN0ZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHNlbGVjdGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWNhcmQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXJkOmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDZweCAtMXB4IGhzbCgwIDAlIDAlIC8gMC4xKSwgMCAycHggNHB4IC0ycHggaHNsKDAgMCUgMCUgLyAwLjEpOwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXJkLnNlbGVjdGFibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtY2FyZC5zZWxlY3RlZCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAucHJvZHVjdC1pbWFnZSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxODBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtaW1hZ2UgaW1nIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWltYWdlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiA0OHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb24tY2hlY2tib3ggewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgcmlnaHQ6IDEycHg7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDMwJSA2LjglKSIpfTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbi1jaGVja2JveC5jaGVja2VkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbi1jaGVja2JveCBkZWVzLWljb24gewogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb24tY2hlY2tib3guY2hlY2tlZCBkZWVzLWljb24gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtY29udGVudCB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KICAgICAgCiAgICAgIC5wcm9kdWN0LWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXRlZ29yeSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICB9CiAgICAgIAogICAgICAucHJvZHVjdC1uYW1lIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWRlc2NyaXB0aW9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgZmxleDogMTsKICAgICAgfQogICAgICAKICAgICAgLnByb2R1Y3QtZm9vdGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTJweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LXByaWNlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC5wcmljZS1jdXJyZW50IHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAucHJpY2Utb3JpZ2luYWwgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7CiAgICAgIH0KCiAgICAgIC5zdG9jay1zdGF0dXMgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgICAgfQoKICAgICAgLnN0b2NrLXN0YXR1cy5pbi1zdG9jayB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIiwgImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiKX07CiAgICAgIH0KCiAgICAgIC5zdG9jay1zdGF0dXMub3V0LW9mLXN0b2NrIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5zdG9jay1zdGF0dXMgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IHsgbmFtZSwgY2F0ZWdvcnksIGRlc2NyaXB0aW9uLCBwcmljZSwgb3JpZ2luYWxQcmljZSwgY3VycmVuY3kgPSAiJCIsIGluU3RvY2sgPSB0cnVlLCBzdG9ja1RleHQgPSBpblN0b2NrID8gIkluIFN0b2NrIiA6ICJPdXQgb2YgU3RvY2siLCBpbWFnZVVybCwgaWNvbk5hbWUgPSAibHVjaWRlOnBhY2thZ2UiIH0gPSB0aGlzLnByb2R1Y3REYXRhOwogICAgICBjb25zdCBmb3JtYXRQcmljZSA9ICh2YWx1ZTIpID0+IHsKICAgICAgICByZXR1cm4gYCR7Y3VycmVuY3l9JHt2YWx1ZTIudG9GaXhlZCgyKX1gOwogICAgICB9OwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9InByb2R1Y3QtY2FyZCAke3RoaXMuc2VsZWN0YWJsZSA/ICJzZWxlY3RhYmxlIiA6ICIifSAke3RoaXMuc2VsZWN0ZWQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlQ2FyZENsaWNrfQogICAgICA+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1pbWFnZSI+CiAgICAgICAgICAke2ltYWdlVXJsID8gYjJgCiAgICAgICAgICAgIDxpbWcgc3JjPSIke2ltYWdlVXJsfSIgYWx0PSIke25hbWV9Ij4KICAgICAgICAgIGAgOiBiMmAKICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke2ljb25OYW1lfT48L2RlZXMtaWNvbj4KICAgICAgICAgIGB9CiAgICAgICAgICAke3RoaXMuc2VsZWN0YWJsZSA/IGIyYAogICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgIGNsYXNzPSJzZWxlY3Rpb24tY2hlY2tib3ggJHt0aGlzLnNlbGVjdGVkID8gImNoZWNrZWQiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keyhlMTEpID0+IHsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3Rpb25Ub2dnbGUoKTsKICAgICAgfX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmNoZWNrIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtY29udGVudCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWhlYWRlciI+CiAgICAgICAgICAgICR7Y2F0ZWdvcnkgPyBiMmA8ZGl2IGNsYXNzPSJwcm9kdWN0LWNhdGVnb3J5Ij4ke2NhdGVnb3J5fTwvZGl2PmAgOiAiIn0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1uYW1lIj4ke25hbWV9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICR7ZGVzY3JpcHRpb24gPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1kZXNjcmlwdGlvbiI+JHtkZXNjcmlwdGlvbn08L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgIDxkaXYgY2xhc3M9InN0b2NrLXN0YXR1cyAke2luU3RvY2sgPyAiaW4tc3RvY2siIDogIm91dC1vZi1zdG9jayJ9Ij4KICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke2luU3RvY2sgPyAibHVjaWRlOmNoZWNrLWNpcmNsZSIgOiAibHVjaWRlOngtY2lyY2xlIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICR7c3RvY2tUZXh0fQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWZvb3RlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtcHJpY2UiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcmljZS1jdXJyZW50Ij4ke2Zvcm1hdFByaWNlKHByaWNlKX08L3NwYW4+CiAgICAgICAgICAgICAgJHtvcmlnaW5hbFByaWNlICYmIG9yaWdpbmFsUHJpY2UgPiBwcmljZSA/IGIyYAogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByaWNlLW9yaWdpbmFsIj4ke2Zvcm1hdFByaWNlKG9yaWdpbmFsUHJpY2UpfTwvc3Bhbj4KICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAke3RoaXMuc2hvd1F1YW50aXR5U2VsZWN0b3IgPyBiMmAKICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yCiAgICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLnF1YW50aXR5fQogICAgICAgICAgICAgICAgQGNoYW5nZVN1YmplY3Q9JHsoZTExKSA9PiB7CiAgICAgICAgdGhpcy5xdWFudGl0eSA9IGUxMS5kZXRhaWwuZ2V0VmFsdWUoKTsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJxdWFudGl0eUNoYW5nZSIsIHsKICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICBxdWFudGl0eTogdGhpcy5xdWFudGl0eSwKICAgICAgICAgICAgcHJvZHVjdERhdGE6IHRoaXMucHJvZHVjdERhdGEKICAgICAgICAgIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgIH19CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgaGFuZGxlQ2FyZENsaWNrKCkgewogICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZCA9ICF0aGlzLnNlbGVjdGVkOwogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlbGVjdGlvbkNoYW5nZSIsIHsKICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCwKICAgICAgICAgICAgcHJvZHVjdERhdGE6IHRoaXMucHJvZHVjdERhdGEKICAgICAgICAgIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVNlbGVjdGlvblRvZ2dsZSgpIHsKICAgICAgdGhpcy5zZWxlY3RlZCA9ICF0aGlzLnNlbGVjdGVkOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWxlY3Rpb25DaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7CiAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCwKICAgICAgICAgIHByb2R1Y3REYXRhOiB0aGlzLnByb2R1Y3REYXRhCiAgICAgICAgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9zZWxlY3RlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczIyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU2hvcHBpbmdQcm9kdWN0Y2FyZDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvci9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxNCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5zaG9wcGluZy1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgyODBweCwgMWZyKSk7CiAgICAgICAgICBnYXA6IDIwcHg7CiAgICAgICAgfQoKICAgICAgICAuY2FydC1zdW1tYXJ5IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMjEuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIH0KCiAgICAgICAgLmNhcnQtc3VtbWFyeS10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuY2FydC1pdGVtIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA3NC45JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuY2FydC10b3RhbCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIHBhZGRpbmctdG9wOiAxNnB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhc2ljIFF1YW50aXR5IFNlbGVjdG9yIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBxdWFudGl0eSBpbnB1dCB3aXRoIGluY3JlbWVudC9kZWNyZW1lbnQgYnV0dG9ucyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IKICAgICAgICAgIC5sYWJlbD0keyJRdWFudGl0eSJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2VsZWN0IHRoZSBkZXNpcmVkIHF1YW50aXR5In0KICAgICAgICAgIC52YWx1ZT0kezF9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IKICAgICAgICAgIC5sYWJlbD0keyJJdGVtcyBpbiBDYXJ0In0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBZGp1c3QgdGhlIHF1YW50aXR5IG9mIGl0ZW1zIn0KICAgICAgICAgIC52YWx1ZT0kezN9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiU2hvcHBpbmcgQ2FydCJ9IC5zdWJ0aXRsZT0keyJNb2Rlcm4gZS1jb21tZXJjZSBwcm9kdWN0IGNhcmRzIHdpdGggaW50ZXJhY3RpdmUgcXVhbnRpdHkgc2VsZWN0b3JzIn0gLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCB1cGRhdGVDYXJ0U3VtbWFyeSA9ICgpID0+IHsKICAgIGNvbnN0IGNhcmQxID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjaGVhZHBob25lcy1xdHkiKTsKICAgIGNvbnN0IGNhcmQyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjbW91c2UtcXR5Iik7CiAgICBjb25zdCBjYXJkMyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2tleWJvYXJkLXF0eSIpOwogICAgY29uc3QgcXR5MSA9IGNhcmQxPy5xdWFudGl0eSB8fCAwOwogICAgY29uc3QgcXR5MiA9IGNhcmQyPy5xdWFudGl0eSB8fCAwOwogICAgY29uc3QgcXR5MyA9IGNhcmQzPy5xdWFudGl0eSB8fCAwOwogICAgY29uc3QgcHJpY2UxID0gMzQ5Ljk5ICogcXR5MTsKICAgIGNvbnN0IHByaWNlMiA9IDk5Ljk5ICogcXR5MjsKICAgIGNvbnN0IHByaWNlMyA9IDc5Ljk5ICogcXR5MzsKICAgIGNvbnN0IHRvdGFsID0gcHJpY2UxICsgcHJpY2UyICsgcHJpY2UzOwogICAgY29uc3Qgc3VtbWFyeSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2NhcnQtc3VtbWFyeS1jb250ZW50Iik7CiAgICBpZiAoc3VtbWFyeSkgewogICAgICBzdW1tYXJ5LmlubmVySFRNTCA9IGAKICAgICAgICAgICAgICAke3F0eTEgPiAwID8gYDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5Tb255IFdILTEwMDBYTTUgKCR7cXR5MX0pPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7cHJpY2UxLnRvRml4ZWQoMil9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PmAgOiAiIn0KICAgICAgICAgICAgICAke3F0eTIgPiAwID8gYDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5Mb2dpdGVjaCBNWCBNYXN0ZXIgM1MgKCR7cXR5Mn0pPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7cHJpY2UyLnRvRml4ZWQoMil9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PmAgOiAiIn0KICAgICAgICAgICAgICAke3F0eTMgPiAwID8gYDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5LZXljaHJvbiBLMiAoJHtxdHkzfSk8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3Bhbj4kJHtwcmljZTMudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+YCA6ICIifQogICAgICAgICAgICAgICR7dG90YWwgPT09IDAgPyAnPGRpdiBjbGFzcz0iY2FydC1pdGVtIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzk5OTsiPllvdXIgY2FydCBpcyBlbXB0eTwvZGl2PicgOiAiIn0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXRvdGFsIj4KICAgICAgICAgICAgICAgIDxzcGFuPlRvdGFsPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7dG90YWwudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA7CiAgICB9CiAgfTsKICBzZXRUaW1lb3V0KHVwZGF0ZUNhcnRTdW1tYXJ5LCAxMDApOwogIGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZCIpLmZvckVhY2goKGNhcmQpID0+IHsKICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcigicXVhbnRpdHlDaGFuZ2UiLCB1cGRhdGVDYXJ0U3VtbWFyeSk7CiAgfSk7Cn19PgogICAgICAgIDxkaXYgY2xhc3M9InNob3BwaW5nLWdyaWQiPgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgaWQ9ImhlYWRwaG9uZXMtcXR5IgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIlNvbnkgV0gtMTAwMFhNNSBXaXJlbGVzcyBIZWFkcGhvbmVzIiwKICBjYXRlZ29yeTogIkF1ZGlvIiwKICBkZXNjcmlwdGlvbjogIkluZHVzdHJ5LWxlYWRpbmcgbm9pc2UgY2FuY2VsaW5nIHdpdGggQXV0byBOQyBPcHRpbWl6ZXIiLAogIHByaWNlOiAzNDkuOTksCiAgb3JpZ2luYWxQcmljZTogMzk5Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOmhlYWRwaG9uZXMiCn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezF9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICBpZD0ibW91c2UtcXR5IgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIkxvZ2l0ZWNoIE1YIE1hc3RlciAzUyIsCiAgY2F0ZWdvcnk6ICJBY2Nlc3NvcmllcyIsCiAgZGVzY3JpcHRpb246ICJQZXJmb3JtYW5jZSB3aXJlbGVzcyBtb3VzZSB3aXRoIHVsdHJhLWZhc3Qgc2Nyb2xsaW5nIiwKICBwcmljZTogOTkuOTksCiAgaWNvbk5hbWU6ICJsdWNpZGU6bW91c2UtcG9pbnRlciIKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7Mn0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIGlkPSJrZXlib2FyZC1xdHkiCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3sKICBuYW1lOiAiS2V5Y2hyb24gSzIgV2lyZWxlc3MgTWVjaGFuaWNhbCBLZXlib2FyZCIsCiAgY2F0ZWdvcnk6ICJLZXlib2FyZHMiLAogIGRlc2NyaXB0aW9uOiAiQ29tcGFjdCA3NSUgbGF5b3V0IHdpdGggaG90LXN3YXBwYWJsZSBzd2l0Y2hlcyIsCiAgcHJpY2U6IDc5Ljk5LAogIG9yaWdpbmFsUHJpY2U6IDk0Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOmtleWJvYXJkIgp9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iY2FydC1zdW1tYXJ5Ij4KICAgICAgICAgIDxoMyBjbGFzcz0iY2FydC1zdW1tYXJ5LXRpdGxlIj5PcmRlciBTdW1tYXJ5PC9oMz4KICAgICAgICAgIDxkaXYgaWQ9ImNhcnQtc3VtbWFyeS1jb250ZW50Ij4KICAgICAgICAgICAgPCEtLSBDb250ZW50IHdpbGwgYmUgZHluYW1pY2FsbHkgdXBkYXRlZCAtLT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUmVxdWlyZWQgJiBEaXNhYmxlZCBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHN0YXRlcyBmb3IgdmFsaWRhdGlvbiBhbmQgcmVzdHJpY3Rpb25zIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvcgogICAgICAgICAgLmxhYmVsPSR7Ik51bWJlciBvZiBMaWNlbnNlcyJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2VsZWN0IGhvdyBtYW55IGxpY2Vuc2VzIHlvdSBuZWVkIn0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAudmFsdWU9JHsxfQogICAgICAgID48L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvcj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yCiAgICAgICAgICAubGFiZWw9JHsiRml4ZWQgUXVhbnRpdHkifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoaXMgcXVhbnRpdHkgY2Fubm90IGJlIGNoYW5nZWQifQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC52YWx1ZT0kezV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiT3JkZXIgRm9ybSJ9IC5zdWJ0aXRsZT0keyJDb21wbGV0ZSBvcmRlciBmb3JtIHdpdGggcXVhbnRpdHkgc2VsZWN0aW9uIn0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkN1c3RvbWVyIE5hbWUifSAucmVxdWlyZWQ9JHt0cnVlfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJQcm9kdWN0In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkJhc2ljIFBsYW4iLCAiUHJvIFBsYW4iLCAiRW50ZXJwcmlzZSBQbGFuIl19CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgPGRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvcgogICAgICAgICAgICAubGFiZWw9JHsiUXVhbnRpdHkifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiTnVtYmVyIG9mIGxpY2Vuc2VzIn0KICAgICAgICAgICAgLnZhbHVlPSR7MX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvcj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IlNwZWNpYWwgSW5zdHJ1Y3Rpb25zIn0KICAgICAgICAgICAgLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTIyID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMyMyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBOdW1iZXIKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGUyMih0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzE0OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjModGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgMSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgICA6aG9zdCB7CiAgICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lciB7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgIG1pbi13aWR0aDogMTIwcHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAucXVhbnRpdHktY29udGFpbmVyLmRpc2FibGVkIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcjpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgICAgfQoKICAgICAgICAuc2VsZWN0b3IgewogICAgICAgICAgZmxleDogMCAwIDQwcHg7CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIH0KCiAgICAgICAgLnNlbGVjdG9yOmhvdmVyIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3RvcjphY3RpdmUgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkxJSkiLCAiaHNsKDAgMCUgMTElKSIpfTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3Rvci5taW51cyB7CiAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3Rvci5wbHVzIHsKICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgfQoKICAgICAgICAucXVhbnRpdHkgewogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAwNmVtOwogICAgICAgIH0KCiAgICAgICAgLyogS2V5Ym9hcmQgbmF2aWdhdGlvbiBmb2N1cyBzdHlsZXMgKi8KICAgICAgICAuc2VsZWN0b3I6Zm9jdXMgewogICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIH0KCiAgICAgICAgLyogTWluIHZhbHVlIHN0YXRlICovCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcltkYXRhLW1pbj0idHJ1ZSJdIC5zZWxlY3Rvci5taW51cyB7CiAgICAgICAgICBvcGFjaXR5OiAwLjM7CiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcltkYXRhLW1pbj0idHJ1ZSJdIC5zZWxlY3Rvci5taW51czpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICB9CgogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+YCA6ICIifQogICAgICAgIDxkaXYgCiAgICAgICAgICBjbGFzcz0icXVhbnRpdHktY29udGFpbmVyICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgICBkYXRhLW1pbj0iJHt0aGlzLnZhbHVlIDw9IDB9IgogICAgICAgID4KICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJzZWxlY3RvciBtaW51cyIgCiAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB7CiAgICAgICAgdGhpcy5kZWNyZWFzZSgpOwogICAgICB9fSIKICAgICAgICAgICAgdGFiaW5kZXg9IiR7dGhpcy5kaXNhYmxlZCA/ICItMSIgOiAiMCJ9IgogICAgICAgICAgICBAa2V5ZG93bj0iJHsoZTExKSA9PiB7CiAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIgfHwgZTExLmtleSA9PT0gIiAiKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuZGVjcmVhc2UoKTsKICAgICAgICB9CiAgICAgIH19IgogICAgICAgICAgICByb2xlPSJidXR0b24iCiAgICAgICAgICAgIGFyaWEtbGFiZWw9IkRlY3JlYXNlIHF1YW50aXR5IgogICAgICAgICAgPuKIkjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icXVhbnRpdHkiIGFyaWEtbGl2ZT0icG9saXRlIiBhcmlhLWF0b21pYz0idHJ1ZSI+JHt0aGlzLnZhbHVlfTwvZGl2PgogICAgICAgICAgPGRpdiAKICAgICAgICAgICAgY2xhc3M9InNlbGVjdG9yIHBsdXMiIAogICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gewogICAgICAgIHRoaXMuaW5jcmVhc2UoKTsKICAgICAgfX0iCiAgICAgICAgICAgIHRhYmluZGV4PSIke3RoaXMuZGlzYWJsZWQgPyAiLTEiIDogIjAifSIKICAgICAgICAgICAgQGtleWRvd249IiR7KGUxMSkgPT4gewogICAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiIHx8IGUxMS5rZXkgPT09ICIgIikgewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLmluY3JlYXNlKCk7CiAgICAgICAgfQogICAgICB9fSIKICAgICAgICAgICAgcm9sZT0iYnV0dG9uIgogICAgICAgICAgICBhcmlhLWxhYmVsPSJJbmNyZWFzZSBxdWFudGl0eSIKICAgICAgICAgID4rPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGluY3JlYXNlKCkgewogICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHsKICAgICAgICB0aGlzLnZhbHVlKys7CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGRlY3JlYXNlKCkgewogICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy52YWx1ZSA+IDApIHsKICAgICAgICB0aGlzLnZhbHVlLS07CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjModGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dFF1YW50aXR5U2VsZWN0b3IyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXJhZGlvZ3JvdXAvZGVlcy1pbnB1dC1yYWRpb2dyb3VwLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMTUgPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZGVtby1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDMwMHB4LCAxZnIpKTsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnJlc3VsdC1kaXNwbGF5IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDUsIDI0MiwgMC4xKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gQmFzaWMgUmFkaW8gR3JvdXBzIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBzdHJpbmcgb3B0aW9ucyBmb3IgY29tbW9uIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJTdWJzY3JpcHRpb24gUGxhbiJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJCYXNpYyAtICQ5L21vbnRoIiwgIlBybyAtICQyOS9tb250aCIsICJFbnRlcnByaXNlIC0gJDk5L21vbnRoIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJQcm8gLSAkMjkvbW9udGgifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQ2hvb3NlIHlvdXIgc3Vic2NyaXB0aW9uIHRpZXIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJQcmlvcml0eSBMZXZlbCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJIaWdoIiwgIk1lZGl1bSIsICJMb3ciXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik1lZGl1bSJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIyLiBIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJSYWRpbyBncm91cHMgd2l0aCBob3Jpem9udGFsIGFycmFuZ2VtZW50In0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgLmxhYmVsPSR7IkRvIHlvdSBhZ3JlZSB3aXRoIHRoZSB0ZXJtcz8ifQogICAgICAgICAgLm9wdGlvbnM9JHtbIlllcyIsICJObyIsICJNYXliZSJdfQogICAgICAgICAgLmRpcmVjdGlvbj0keyJob3Jpem9udGFsIn0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJZZXMifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAubGFiZWw9JHsiRXhwZXJpZW5jZSBMZXZlbCJ9CiAgICAgICAgICAub3B0aW9ucz0ke1siQmVnaW5uZXIiLCAiSW50ZXJtZWRpYXRlIiwgIkV4cGVydCJdfQogICAgICAgICAgLmRpcmVjdGlvbj0keyJob3Jpem9udGFsIn0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJJbnRlcm1lZGlhdGUifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlNlbGVjdCB5b3VyIGV4cGVyaWVuY2UgbGV2ZWwgd2l0aCB3ZWIgZGV2ZWxvcG1lbnQifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIEFkdmFuY2VkIE9wdGlvbnMifSAuc3VidGl0bGU9JHsiVXNpbmcgb2JqZWN0IGZvcm1hdCB3aXRoIGtleXMgYW5kIHBheWxvYWRzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgaWQ9ImFkdmFuY2VkLXJhZGlvIgogICAgICAgICAgLmxhYmVsPSR7IlNlbGVjdCBSZWdpb24ifQogICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJVbml0ZWQgU3RhdGVzIChVUyBFYXN0KSIsIGtleTogInVzLWVhc3QiLCBwYXlsb2FkOiB7IHJlZ2lvbjogInVzLWVhc3QtMSIsIGxhdGVuY3k6IDIwIH0gfSwKICB7IG9wdGlvbjogIkV1cm9wZSAoRnJhbmtmdXJ0KSIsIGtleTogImV1LWNlbnRyYWwiLCBwYXlsb2FkOiB7IHJlZ2lvbjogImV1LWNlbnRyYWwtMSIsIGxhdGVuY3k6IDUwIH0gfSwKICB7IG9wdGlvbjogIkFzaWEgUGFjaWZpYyAoU2luZ2Fwb3JlKSIsIGtleTogImFwLXNvdXRoZWFzdCIsIHBheWxvYWQ6IHsgcmVnaW9uOiAiYXAtc291dGhlYXN0LTEiLCBsYXRlbmN5OiAxMjAgfSB9Cl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiZXUtY2VudHJhbCJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQ2hvb3NlIHRoZSBjbG9zZXN0IHJlZ2lvbiBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSJ9CiAgICAgICAgICBAY2hhbmdlPSR7KGUxMSkgPT4gewogIGNvbnN0IGRpc3BsYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcmVnaW9uLXJlc3VsdCIpOwogIGlmIChkaXNwbGF5KSB7CiAgICBkaXNwbGF5LnRleHRDb250ZW50ID0gIlNlbGVjdGVkOiAiICsgSlNPTi5zdHJpbmdpZnkoZTExLmRldGFpbC52YWx1ZSwgbnVsbCwgMik7CiAgfQp9fQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICA8ZGl2IGlkPSJyZWdpb24tcmVzdWx0IiBjbGFzcz0icmVzdWx0LWRpc3BsYXkiPlNlbGVjdGVkOiB7ICJyZWdpb24iOiAiZXUtY2VudHJhbC0xIiwgImxhdGVuY3kiOiA1MCB9PC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBTdXJ2ZXkgRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJNdWx0aXBsZSByYWRpbyBncm91cHMgZm9yIHN1cnZleXMgYW5kIGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1ncmlkIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IkhvdyBzYXRpc2ZpZWQgYXJlIHlvdT8ifQogICAgICAgICAgICAub3B0aW9ucz0ke1siVmVyeSBTYXRpc2ZpZWQiLCAiU2F0aXNmaWVkIiwgIk5ldXRyYWwiLCAiRGlzc2F0aXNmaWVkIiwgIlZlcnkgRGlzc2F0aXNmaWVkIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJTYXRpc2ZpZWQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJXb3VsZCB5b3UgcmVjb21tZW5kIHVzPyJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJEZWZpbml0ZWx5IiwgIlByb2JhYmx5IiwgIk5vdCBTdXJlIiwgIlByb2JhYmx5IE5vdCIsICJEZWZpbml0ZWx5IE5vdCJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiUHJvYmFibHkifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNS4gU3RhdGVzICYgVmFsaWRhdGlvbiJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgc3RhdGVzIGFuZCB2YWxpZGF0aW9uIGV4YW1wbGVzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1ncmlkIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IlJlcXVpcmVkIFNlbGVjdGlvbiJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJPcHRpb24gQSIsICJPcHRpb24gQiIsICJPcHRpb24gQyJdfQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIFN0YXRlIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkRpc2FibGVkIE9wdGlvbiAxIiwgIkRpc2FibGVkIE9wdGlvbiAyIiwgIkRpc2FibGVkIE9wdGlvbiAzIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJEaXNhYmxlZCBPcHRpb24gMiJ9CiAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI2LiBTZXR0aW5ncyBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IkNvbW1vbiBwYXR0ZXJucyBpbiBhcHBsaWNhdGlvbiBzZXR0aW5ncyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgIC5sYWJlbD0keyJUaGVtZSBQcmVmZXJlbmNlIn0KICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiTGlnaHQgVGhlbWUiLCBrZXk6ICJsaWdodCIsIHBheWxvYWQ6ICJsaWdodCIgfSwKICB7IG9wdGlvbjogIkRhcmsgVGhlbWUiLCBrZXk6ICJkYXJrIiwgcGF5bG9hZDogImRhcmsiIH0sCiAgeyBvcHRpb246ICJTeXN0ZW0gRGVmYXVsdCIsIGtleTogInN5c3RlbSIsIHBheWxvYWQ6ICJhdXRvIiB9Cl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiZGFyayJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQ2hvb3NlIGhvdyB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGFwcGVhciJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgIC5sYWJlbD0keyJOb3RpZmljYXRpb24gRnJlcXVlbmN5In0KICAgICAgICAgIC5vcHRpb25zPSR7WyJBbGwgTm90aWZpY2F0aW9ucyIsICJJbXBvcnRhbnQgT25seSIsICJOb25lIl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiSW1wb3J0YW50IE9ubHkifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkNvbnRyb2wgaG93IG9mdGVuIHlvdSByZWNlaXZlIG5vdGlmaWNhdGlvbnMifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAubGFiZWw9JHsiTGFuZ3VhZ2UifQogICAgICAgICAgLm9wdGlvbnM9JHtbIkVuZ2xpc2giLCAiR2VybWFuIiwgIkZyZW5jaCIsICJTcGFuaXNoIiwgIkphcGFuZXNlIl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiRW5nbGlzaCJ9CiAgICAgICAgICAuZGlyZWN0aW9uPSR7Imhvcml6b250YWwifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjcuIEZvcm0gSW50ZWdyYXRpb24ifSAuc3VidGl0bGU9JHsiV29ya3Mgc2VhbWxlc3NseSB3aXRoIGRlZXMtZm9ybSJ9PgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJQcm9kdWN0IE5hbWUifQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAua2V5PSR7InByb2R1Y3ROYW1lIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiUHJvZHVjdCBDYXRlZ29yeSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJFbGVjdHJvbmljcyIsICJDbG90aGluZyIsICJCb29rcyIsICJIb21lICYgR2FyZGVuIiwgIlNwb3J0cyJdfQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAua2V5PSR7ImNhdGVnb3J5In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiQ29uZGl0aW9uIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIk5ldyIsICJMaWtlIE5ldyIsICJHb29kIiwgIkZhaXIiLCAiUG9vciJdfQogICAgICAgICAgICAuZGlyZWN0aW9uPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAua2V5PSR7ImNvbmRpdGlvbiJ9CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJOZXcifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJTaGlwcGluZyBTcGVlZCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiU3RhbmRhcmQgKDUtNyBkYXlzKSIsIGtleTogInN0YW5kYXJkIiwgcGF5bG9hZDogeyBkYXlzOiA3LCBwcmljZTogMCB9IH0sCiAgeyBvcHRpb246ICJFeHByZXNzICgyLTMgZGF5cykiLCBrZXk6ICJleHByZXNzIiwgcGF5bG9hZDogeyBkYXlzOiAzLCBwcmljZTogMTAgfSB9LAogIHsgb3B0aW9uOiAiT3Zlcm5pZ2h0Iiwga2V5OiAib3Zlcm5pZ2h0IiwgcGF5bG9hZDogeyBkYXlzOiAxLCBwcmljZTogMjUgfSB9Cl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJzdGFuZGFyZCJ9CiAgICAgICAgICAgIC5rZXk9JHsic2hpcHBpbmcifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCAudGV4dD0keyJTdWJtaXQgUHJvZHVjdCJ9PjwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmFkaW9ncm91cC9kZWVzLWlucHV0LXJhZGlvZ3JvdXAuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczI0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRSYWRpb2dyb3VwID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1yYWRpb2dyb3VwIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF9vcHRpb25zX2RlY29yYXRvcnM7CiAgbGV0IF9vcHRpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRPcHRpb25fZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkT3B0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRPcHRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RpcmVjdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfZGlyZWN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlyZWN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXRSYWRpb2dyb3VwMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX29wdGlvbnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX3NlbGVjdGVkT3B0aW9uX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9kaXJlY3Rpb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTIzKHRoaXMsIG51bGwsIF9vcHRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3B0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3B0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcHRpb25zX2luaXRpYWxpemVycywgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyMyh0aGlzLCBudWxsLCBfc2VsZWN0ZWRPcHRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRPcHRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkT3B0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkT3B0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZE9wdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZE9wdGlvbl9pbml0aWFsaXplcnMsIF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIzKHRoaXMsIG51bGwsIF9kaXJlY3Rpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlyZWN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaXJlY3Rpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGlyZWN0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXJlY3Rpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlyZWN0aW9uX2luaXRpYWxpemVycywgX2RpcmVjdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIzKHRoaXMsIG51bGwsIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsaWRhdGlvblN0YXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uU3RhdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWxpZGF0aW9uU3RhdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIzKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0UmFkaW9ncm91cDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzE1OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMyNCh0aGlzLCBfb3B0aW9uc19pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgb3B0aW9ucygpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcHRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI0KHRoaXMsIF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNCh0aGlzLCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHNlbGVjdGVkT3B0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZE9wdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkaXJlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI0KHRoaXMsIF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjQodGhpcywgX2RpcmVjdGlvbl9pbml0aWFsaXplcnMsICJ2ZXJ0aWNhbCIpKTsKICAgIGdldCBkaXJlY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNkaXJlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkaXJlY3Rpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2RpcmVjdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3ZhbGlkYXRpb25TdGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjQodGhpcywgX2RpcmVjdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjQodGhpcywgX3ZhbGlkYXRpb25TdGF0ZV9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCB2YWxpZGF0aW9uU3RhdGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWxpZGF0aW9uU3RhdGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbGlkYXRpb25TdGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gRm9ybSBjb21wYXRpYmlsaXR5CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIGNvbnN0IG9wdGlvbjIgPSB0aGlzLmdldE9wdGlvbkJ5S2V5KHRoaXMuc2VsZWN0ZWRPcHRpb24pOwogICAgICBpZiAodHlwZW9mIG9wdGlvbjIgPT09ICJvYmplY3QiICYmIG9wdGlvbjIucGF5bG9hZCAhPT0gdm9pZCAwKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbjIucGF5bG9hZDsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbjsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWwpIHsKICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJzdHJpbmciKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHZhbDsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBvcHRpb24yID0gdGhpcy5vcHRpb25zLmZpbmQoKG9wdCkgPT4gdHlwZW9mIG9wdCA9PT0gIm9iamVjdCIgJiYgb3B0LnBheWxvYWQgPT09IHZhbCk7CiAgICAgICAgaWYgKG9wdGlvbjIgJiYgdHlwZW9mIG9wdGlvbjIgPT09ICJvYmplY3QiKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gb3B0aW9uMi5rZXk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTBweDsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIuaG9yaXpvbnRhbCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZ2FwOiAyMHB4OwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDZweCAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyLmhvcml6b250YWwgLnJhZGlvLW9wdGlvbiB7CiAgICAgICAgcGFkZGluZzogNnB4IDIwcHggNnB4IDA7CiAgICAgIH0KCiAgICAgIC5yYWRpby1vcHRpb246aG92ZXIgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgfQoKICAgICAgLnJhZGlvLW9wdGlvbjpob3ZlciAucmFkaW8tbGFiZWwgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICB9CgogICAgICAucmFkaW8tY2lyY2xlIHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDIwLjIlIDY1LjElKSIsICJoc2woMjE1IDIwLjIlIDM1LjElKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIxNSAzMCUgNi44JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uLnNlbGVjdGVkIC5yYWRpby1jaXJjbGUgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uLnNlbGVjdGVkIC5yYWRpby1jaXJjbGU6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMzAlIDYuOCUpIil9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLnJhZGlvLW9wdGlvbi5zZWxlY3RlZCAucmFkaW8tY2lyY2xlOjphZnRlciB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLnJhZGlvLWNpcmNsZTpmb2N1cy12aXNpYmxlIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIxNSAzMCUgMy45JSkiKX0sCiAgICAgICAgICAgICAgICAgICAgMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIiwgImhzbCgyMTMuMSA5My45JSA2Ny44JSkiKX07CiAgICAgIH0KCiAgICAgIC5yYWRpby1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjE3LjkgMTAuNiUgNzQuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDA2ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5yYWRpby1vcHRpb24uc2VsZWN0ZWQgLnJhZGlvLWxhYmVsIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnJhZGlvLW9wdGlvbiB7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5yYWRpby1vcHRpb246aG92ZXIgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMzAlIDYuOCUpIil9OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAucmFkaW8tb3B0aW9uOmhvdmVyIC5yYWRpby1sYWJlbCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjE3LjkgMTAuNiUgNzQuOSUpIil9OwogICAgICB9CgogICAgICAubGFiZWwtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDA2ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5kZXNjcmlwdGlvbi10ZXh0IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDAzZW07CiAgICAgIH0KCiAgICAgIC8qIFZhbGlkYXRpb24gc3R5bGVzICovCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uU3RhdGU9ImludmFsaWQiXSkgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUpIiwgImhzbCgwIDYyLjglIDMwLjYlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbGlkYXRpb25TdGF0ZT0iaW52YWxpZCJdKSAucmFkaW8tb3B0aW9uLnNlbGVjdGVkIC5yYWRpby1jaXJjbGUgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uU3RhdGU9InZhbGlkIl0pIC5yYWRpby1vcHRpb24uc2VsZWN0ZWQgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIsICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIiwgImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uU3RhdGU9Indhcm4iXSkgLnJhZGlvLW9wdGlvbi5zZWxlY3RlZCAucmFkaW8tY2lyY2xlIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDUuNCA5My40JSA0Ny41JSkiLCAiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDUuNCA5My40JSA0Ny41JSkiLCAiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIil9OwogICAgICB9CgogICAgICAvKiBPdmVycmlkZSBiYXNlIGdyaWQgbGF5b3V0IGZvciByYWRpb2dyb3VwIHRvIHByZXZlbnQgbGFyZ2UgZ2FwcyAqLwogICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249ImxlZnQiXSkgLmlucHV0LXdyYXBwZXIgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249InJpZ2h0Il0pIC5pbnB1dC13cmFwcGVyIHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0bzsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGl2IGNsYXNzPSJsYWJlbC10ZXh0Ij4ke3RoaXMubGFiZWx9PC9kaXY+YCA6ICIifQogICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIgJHt0aGlzLmRpcmVjdGlvbn0iPgogICAgICAgICAgJHt0aGlzLm9wdGlvbnMubWFwKChvcHRpb24yKSA9PiB7CiAgICAgICAgY29uc3Qgb3B0aW9uS2V5ID0gdGhpcy5nZXRPcHRpb25LZXkob3B0aW9uMik7CiAgICAgICAgY29uc3Qgb3B0aW9uTGFiZWwgPSB0aGlzLmdldE9wdGlvbkxhYmVsKG9wdGlvbjIpOwogICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkT3B0aW9uID09PSBvcHRpb25LZXk7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgICBjbGFzcz0icmFkaW8tb3B0aW9uICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gdGhpcy5zZWxlY3RPcHRpb24ob3B0aW9uS2V5KX0iCiAgICAgICAgICAgICAgICBAa2V5ZG93bj0iJHsoZTExKSA9PiB0aGlzLmhhbmRsZUtleWRvd24oZTExLCBvcHRpb25LZXkpfSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgICAgICBjbGFzcz0icmFkaW8tY2lyY2xlIiAKICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9IiR7dGhpcy5kaXNhYmxlZCA/ICItMSIgOiAiMCJ9IgogICAgICAgICAgICAgICAgICByb2xlPSJyYWRpbyIKICAgICAgICAgICAgICAgICAgYXJpYS1jaGVja2VkPSIke2lzU2VsZWN0ZWR9IgogICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSIke29wdGlvbkxhYmVsfSIKICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGlvLWxhYmVsIj4ke29wdGlvbkxhYmVsfTwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24gPyBiMmA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbi10ZXh0Ij4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+YCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBnZXRPcHRpb25LZXkob3B0aW9uMikgewogICAgICBpZiAodHlwZW9mIG9wdGlvbjIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbjI7CiAgICAgIH0KICAgICAgcmV0dXJuIG9wdGlvbjIua2V5OwogICAgfQogICAgZ2V0T3B0aW9uTGFiZWwob3B0aW9uMikgewogICAgICBpZiAodHlwZW9mIG9wdGlvbjIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbjI7CiAgICAgIH0KICAgICAgcmV0dXJuIG9wdGlvbjIub3B0aW9uOwogICAgfQogICAgZ2V0T3B0aW9uQnlLZXkoa2V5MikgewogICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQoKG9wdCkgPT4gdGhpcy5nZXRPcHRpb25LZXkob3B0KSA9PT0ga2V5Mik7CiAgICB9CiAgICBzZWxlY3RPcHRpb24oa2V5MikgewogICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSBrZXkyOwogICAgICBpZiAob2xkVmFsdWUgIT09IGtleTIpIHsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjaGFuZ2UiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHRoaXMudmFsdWUgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pKTsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJpbnB1dCIsIHsKICAgICAgICAgIGRldGFpbDogeyB2YWx1ZTogdGhpcy52YWx1ZSB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICB9CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWwpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbDsKICAgIH0KICAgIGFzeW5jIHZhbGlkYXRlKCkgewogICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhdGhpcy5zZWxlY3RlZE9wdGlvbikgewogICAgICAgIHRoaXMudmFsaWRhdGlvblN0YXRlID0gImludmFsaWQiOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9ICJ2YWxpZCI7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA+IDAgJiYgIXRoaXMucmVxdWlyZWQpIHsKICAgICAgICBjb25zdCBmaXJzdE9wdGlvbiA9IHRoaXMub3B0aW9uc1swXTsKICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5nZXRPcHRpb25LZXkoZmlyc3RPcHRpb24pOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVLZXlkb3duKGV2ZW50LCBvcHRpb25LZXkpIHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoZXZlbnQua2V5ID09PSAiICIgfHwgZXZlbnQua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbihvcHRpb25LZXkpOwogICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gIkFycm93RG93biIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dSaWdodCIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuZm9jdXNOZXh0T3B0aW9uKCk7CiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAiQXJyb3dVcCIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dMZWZ0IikgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzT3B0aW9uKCk7CiAgICAgIH0KICAgIH0KICAgIGZvY3VzTmV4dE9wdGlvbigpIHsKICAgICAgY29uc3QgcmFkaW9DaXJjbGVzID0gQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgiLnJhZGlvLWNpcmNsZSIpKTsKICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gcmFkaW9DaXJjbGVzLmZpbmRJbmRleCgoZWwpID0+IGVsID09PSB0aGlzLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCk7CiAgICAgIGNvbnN0IG5leHRJbmRleCA9IChjdXJyZW50SW5kZXggKyAxKSAlIHJhZGlvQ2lyY2xlcy5sZW5ndGg7CiAgICAgIHJhZGlvQ2lyY2xlc1tuZXh0SW5kZXhdLmZvY3VzKCk7CiAgICB9CiAgICBmb2N1c1ByZXZpb3VzT3B0aW9uKCkgewogICAgICBjb25zdCByYWRpb0NpcmNsZXMgPSBBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCIucmFkaW8tY2lyY2xlIikpOwogICAgICBjb25zdCBjdXJyZW50SW5kZXggPSByYWRpb0NpcmNsZXMuZmluZEluZGV4KChlbCkgPT4gZWwgPT09IHRoaXMuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50KTsKICAgICAgY29uc3QgcHJldkluZGV4ID0gY3VycmVudEluZGV4IDw9IDAgPyByYWRpb0NpcmNsZXMubGVuZ3RoIC0gMSA6IGN1cnJlbnRJbmRleCAtIDE7CiAgICAgIHJhZGlvQ2lyY2xlc1twcmV2SW5kZXhdLmZvY3VzKCk7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyNCh0aGlzLCBfdmFsaWRhdGlvblN0YXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dFJhZGlvZ3JvdXAyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mb3JtL2RlZXMtZm9ybS1zdWJtaXQvZGVlcy1mb3JtLXN1Ym1pdC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzE2ID0gKCkgPT4gYjJgPGRlZXMtZm9ybS1zdWJtaXQ+U3VibWl0IEZvcm08L2RlZXMtZm9ybS1zdWJtaXQ+YDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mb3JtL2RlZXMtZm9ybS1zdWJtaXQvZGVlcy1mb3JtLXN1Ym1pdC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUyNCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMjUgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNGb3JtU3VibWl0ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1mb3JtLXN1Ym1pdCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2Rpc2FibGVkX2RlY29yYXRvcnM7CiAgbGV0IF9kaXNhYmxlZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXh0X2RlY29yYXRvcnM7CiAgbGV0IF90ZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdHVzX2RlY29yYXRvcnM7CiAgbGV0IF9zdGF0dXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0Zvcm1TdWJtaXQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfZGlzYWJsZWRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3RleHRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX3N0YXR1c19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGUyNCh0aGlzLCBudWxsLCBfZGlzYWJsZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlzYWJsZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc2FibGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXNhYmxlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI0KHRoaXMsIG51bGwsIF90ZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXh0X2luaXRpYWxpemVycywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNCh0aGlzLCBudWxsLCBfc3RhdHVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RhdHVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXR1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc3RhdHVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0YXR1c19pbml0aWFsaXplcnMsIF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNGb3JtU3VibWl0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTY7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkZvcm0iOwogICAgI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczI1KHRoaXMsIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgIGdldCBkaXNhYmxlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGlzYWJsZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjUodGhpcywgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNSh0aGlzLCBfdGV4dF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjUodGhpcywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI1KHRoaXMsIF9zdGF0dXNfaW5pdGlhbGl6ZXJzLCAibm9ybWFsIikpOwogICAgZ2V0IHN0YXR1cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHN0YXR1cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyNSh0aGlzLCBfc3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbdGhlbWVEZWZhdWx0U3R5bGVzLCBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICBgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy1idXR0b24KICAgICAgICBzdGF0dXM9IiR7dGhpcy5zdGF0dXN9IgogICAgICAgIEBjbGljaz0iJHt0aGlzLnN1Ym1pdH0iCiAgICAgICAgP2Rpc2FibGVkPSIke3RoaXMuZGlzYWJsZWR9IgogICAgICA+CiAgICAgICAgJHt0aGlzLnRleHQgfHwgYjJgPHNsb3Q+PC9zbG90PmB9CiAgICAgIDwvZGVlcy1idXR0b24+CiAgICBgOwogICAgfQogICAgYXN5bmMgc3VibWl0KCkgewogICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBwYXJlbnRGb3JtRWxlbWVudCA9IHRoaXMuY2xvc2VzdCgiZGVlcy1mb3JtIik7CiAgICAgIGlmIChwYXJlbnRGb3JtRWxlbWVudCAmJiBwYXJlbnRGb3JtRWxlbWVudC5nYXRoZXJBbmREaXNwYXRjaCkgewogICAgICAgIHBhcmVudEZvcm1FbGVtZW50LmdhdGhlckFuZERpc3BhdGNoKCk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGZvY3VzKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHsKICAgICAgICBhd2FpdCBkb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICAgIHRoaXMuc3VibWl0KCk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjUoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNGb3JtU3VibWl0MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kcm9wZG93bi9kZWVzLWlucHV0LWRyb3Bkb3duLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMTcgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLnNwYWNlciB7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBjb3VudHJ5RHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtZHJvcGRvd25bbGFiZWw9IlNlbGVjdCBDb3VudHJ5Il0nKTsKICBjb25zdCByb2xlRHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtZHJvcGRvd25bbGFiZWw9IlNlbGVjdCBSb2xlIl0nKTsKICBpZiAoY291bnRyeURyb3Bkb3duKSB7CiAgICBjb3VudHJ5RHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLCAoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coIkNvdW50cnkgc2VsZWN0ZWQ6IiwgZXZlbnQuZGV0YWlsKTsKICAgIH0pOwogIH0KICBpZiAocm9sZURyb3Bkb3duKSB7CiAgICByb2xlRHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLCAoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coIlJvbGUgc2VsZWN0ZWQ6IiwgZXZlbnQuZGV0YWlsKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIxLiBCYXNpYyBEcm9wZG93bnMifSAuc3VidGl0bGU9JHsiU3RhbmRhcmQgZHJvcGRvd24gd2l0aCBzZWFyY2ggZnVuY3Rpb25hbGl0eSBhbmQgdmFyaW91cyBvcHRpb25zIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJTZWxlY3QgQ291bnRyeSJ9CiAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIlVuaXRlZCBTdGF0ZXMiLCBrZXk6ICJ1cyIgfSwKICB7IG9wdGlvbjogIkNhbmFkYSIsIGtleTogImNhIiB9LAogIHsgb3B0aW9uOiAiR2VybWFueSIsIGtleTogImRlIiB9LAogIHsgb3B0aW9uOiAiRnJhbmNlIiwga2V5OiAiZnIiIH0sCiAgeyBvcHRpb246ICJVbml0ZWQgS2luZ2RvbSIsIGtleTogInVrIiB9LAogIHsgb3B0aW9uOiAiQXVzdHJhbGlhIiwga2V5OiAiYXUiIH0sCiAgeyBvcHRpb246ICJKYXBhbiIsIGtleTogImpwIiB9LAogIHsgb3B0aW9uOiAiQnJhemlsIiwga2V5OiAiYnIiIH0KXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3sgb3B0aW9uOiAiVW5pdGVkIFN0YXRlcyIsIGtleTogInVzIiB9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJTZWxlY3QgUm9sZSJ9CiAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIkFkbWluaXN0cmF0b3IiLCBrZXk6ICJhZG1pbiIgfSwKICB7IG9wdGlvbjogIkVkaXRvciIsIGtleTogImVkaXRvciIgfSwKICB7IG9wdGlvbjogIlZpZXdlciIsIGtleTogInZpZXdlciIgfSwKICB7IG9wdGlvbjogIkd1ZXN0Iiwga2V5OiAiZ3Vlc3QiIH0KXX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgcHJpb3JpdHlEcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kcm9wZG93biIpOwogIGlmIChwcmlvcml0eURyb3Bkb3duKSB7CiAgICBwcmlvcml0eURyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKGBQcmlvcml0eSBjaGFuZ2VkIHRvOiAke2V2ZW50LmRldGFpbC5vcHRpb259YCk7CiAgICB9KTsKICB9Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gV2l0aG91dCBTZWFyY2gifSAuc3VidGl0bGU9JHsiRHJvcGRvd24gd2l0aCBzZWFyY2ggZnVuY3Rpb25hbGl0eSBkaXNhYmxlZCBmb3Igc2ltcGxlciBzZWxlY3Rpb24ifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IlByaW9yaXR5IExldmVsIn0KICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHtmYWxzZX0KICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiSGlnaCIsIGtleTogImhpZ2giIH0sCiAgeyBvcHRpb246ICJNZWRpdW0iLCBrZXk6ICJtZWRpdW0iIH0sCiAgeyBvcHRpb246ICJMb3ciLCBrZXk6ICJsb3ciIH0KXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3sgb3B0aW9uOiAiTWVkaXVtIiwga2V5OiAibWVkaXVtIiB9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBkcm9wZG93bnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtZHJvcGRvd24iKTsKICBkcm9wZG93bnMuZm9yRWFjaCgoZHJvcGRvd24pID0+IHsKICAgIGRyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IGxhYmVsID0gZHJvcGRvd24uZ2V0QXR0cmlidXRlKCJsYWJlbCIpOwogICAgICBjb25zb2xlLmxvZyhgJHtsYWJlbH06ICR7ZXZlbnQuZGV0YWlsLm9wdGlvbn1gKTsKICAgIH0pOwogIH0pOwp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIEhvcml6b250YWwgTGF5b3V0In0gLnN1YnRpdGxlPSR7Ik11bHRpcGxlIGRyb3Bkb3ducyBpbiBhIGhvcml6b250YWwgbGF5b3V0IGZvciBjb21wYWN0IGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAubGFiZWw9JHsiRGVwYXJ0bWVudCJ9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIkVuZ2luZWVyaW5nIiwga2V5OiAiZW5nIiB9LAogIHsgb3B0aW9uOiAiRGVzaWduIiwga2V5OiAiZGVzaWduIiB9LAogIHsgb3B0aW9uOiAiTWFya2V0aW5nIiwga2V5OiAibWFya2V0aW5nIiB9LAogIHsgb3B0aW9uOiAiU2FsZXMiLCBrZXk6ICJzYWxlcyIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IlRlYW0gU2l6ZSJ9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAuZW5hYmxlU2VhcmNoPSR7ZmFsc2V9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiMS01Iiwga2V5OiAic21hbGwiIH0sCiAgeyBvcHRpb246ICI2LTIwIiwga2V5OiAibWVkaXVtIiB9LAogIHsgb3B0aW9uOiAiMjEtNTAiLCBrZXk6ICJsYXJnZSIgfSwKICB7IG9wdGlvbjogIjUwKyIsIGtleTogInhsYXJnZSIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IkxvY2F0aW9uIn0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiUmVtb3RlIiwga2V5OiAicmVtb3RlIiB9LAogIHsgb3B0aW9uOiAiT24tc2l0ZSIsIGtleTogIm9uc2l0ZSIgfSwKICB7IG9wdGlvbjogIkh5YnJpZCIsIGtleTogImh5YnJpZCIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHJlcXVpcmVkRHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZHJvcGRvd25bcmVxdWlyZWRdIik7CiAgaWYgKHJlcXVpcmVkRHJvcGRvd24pIHsKICAgIHJlcXVpcmVkRHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coIlJlcXVpcmVkIGRyb3Bkb3duIGxvc3QgZm9jdXMiKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHN0YXRlcyBhbmQgY29uZmlndXJhdGlvbnMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IlJlcXVpcmVkIEZpZWxkIn0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIk9wdGlvbiBBIiwga2V5OiAiYSIgfSwKICB7IG9wdGlvbjogIk9wdGlvbiBCIiwga2V5OiAiYiIgfSwKICB7IG9wdGlvbjogIk9wdGlvbiBDIiwga2V5OiAiYyIgfQpdfQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCBEcm9wZG93biJ9CiAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJDYW5ub3QgU2VsZWN0Iiwga2V5OiAiZGlzYWJsZWQiIH0KXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3sgb3B0aW9uOiAiQ2Fubm90IFNlbGVjdCIsIGtleTogImRpc2FibGVkIiB9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRpdiBjbGFzcz0ic3BhY2VyIj4KICAgICAgKFNwYWNlciB0byB0ZXN0IGRyb3Bkb3duIHBvc2l0aW9uaW5nKQogICAgPC9kaXY+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZHJvcGRvd24iKTsKICBpZiAoZHJvcGRvd24pIHsKICAgIGRyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJCb3R0b20gZHJvcGRvd24gc2VsZWN0ZWQ6IiwgZXZlbnQuZGV0YWlsKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI1LiBCb3R0b20gUG9zaXRpb25pbmcifSAuc3VidGl0bGU9JHsiRHJvcGRvd24gdGhhdCBvcGVucyB1cHdhcmQgd2hlbiBuZWFyIGJvdHRvbSBvZiB2aWV3cG9ydCJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAubGFiZWw9JHsiT3BlbnMgVXB3YXJkIn0KICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiRmlyc3QgT3B0aW9uIiwga2V5OiAiZmlyc3QiIH0sCiAgeyBvcHRpb246ICJTZWNvbmQgT3B0aW9uIiwga2V5OiAic2Vjb25kIiB9LAogIHsgb3B0aW9uOiAiVGhpcmQgT3B0aW9uIiwga2V5OiAidGhpcmQiIH0sCiAgeyBvcHRpb246ICJGb3VydGggT3B0aW9uIiwga2V5OiAiZm91cnRoIiB9LAogIHsgb3B0aW9uOiAiRmlmdGggT3B0aW9uIiwga2V5OiAiZmlmdGgiIH0KXX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBkcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kcm9wZG93biIpOwogIGNvbnN0IG91dHB1dCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI3NlbGVjdGlvbi1vdXRwdXQiKTsKICBpZiAoZHJvcGRvd24gJiYgb3V0cHV0KSB7CiAgICBvdXRwdXQuaW5uZXJIVE1MID0gIjxlbT5TZWxlY3QgYSBwcm9kdWN0IHRvIHNlZSBkZXRhaWxzLi4uPC9lbT4iOwogICAgZHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGlmIChldmVudC5kZXRhaWwudmFsdWUpIHsKICAgICAgICBvdXRwdXQuaW5uZXJIVE1MID0gYAogICAgICAgICAgICAgIDxzdHJvbmc+U2VsZWN0ZWQ6PC9zdHJvbmc+ICR7ZXZlbnQuZGV0YWlsLnZhbHVlLm9wdGlvbn08YnI+CiAgICAgICAgICAgICAgPHN0cm9uZz5LZXk6PC9zdHJvbmc+ICR7ZXZlbnQuZGV0YWlsLnZhbHVlLmtleX08YnI+CiAgICAgICAgICAgICAgPHN0cm9uZz5QcmljZTo8L3N0cm9uZz4gJCR7ZXZlbnQuZGV0YWlsLnZhbHVlLnBheWxvYWQ/LnByaWNlIHx8ICJOL0EifTxicj4KICAgICAgICAgICAgICA8c3Ryb25nPkZlYXR1cmVzOjwvc3Ryb25nPiAke2V2ZW50LmRldGFpbC52YWx1ZS5wYXlsb2FkPy5mZWF0dXJlcz8uam9pbigiLCAiKSB8fCAiTi9BIn0KICAgICAgICAgICAgYDsKICAgICAgfQogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjYuIEV2ZW50IEhhbmRsaW5nICYgUGF5bG9hZCJ9IC5zdWJ0aXRsZT0keyJEcm9wZG93biB3aXRoIHBheWxvYWQgZGF0YSBhbmQgY2hhbmdlIGV2ZW50IGhhbmRsaW5nIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJTZWxlY3QgUHJvZHVjdCJ9CiAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIkJhc2ljIFBsYW4iLCBrZXk6ICJiYXNpYyIsIHBheWxvYWQ6IHsgcHJpY2U6IDkuOTksIGZlYXR1cmVzOiBbIkZlYXR1cmUgQSJdIH0gfSwKICB7IG9wdGlvbjogIlBybyBQbGFuIiwga2V5OiAicHJvIiwgcGF5bG9hZDogeyBwcmljZTogMTkuOTksIGZlYXR1cmVzOiBbIkZlYXR1cmUgQSIsICJGZWF0dXJlIEIiXSB9IH0sCiAgeyBvcHRpb246ICJFbnRlcnByaXNlIFBsYW4iLCBrZXk6ICJlbnRlcnByaXNlIiwgcGF5bG9hZDogeyBwcmljZTogNDkuOTksIGZlYXR1cmVzOiBbIkZlYXR1cmUgQSIsICJGZWF0dXJlIEIiLCAiRmVhdHVyZSBDIl0gfSB9Cl19CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAKICAgICAgICA8ZGl2IGlkPSJzZWxlY3Rpb24tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsgcGFkZGluZzogMTJweDsgYmFja2dyb3VuZDogcmdiYSgwLCAxMDUsIDI0MiwgMC4xKTsgYm9yZGVyLXJhZGl1czogNHB4OyBmb250LXNpemU6IDE0cHg7Ij48L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZm9ybSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIik7CiAgY29uc3QgcHJvamVjdFR5cGVEcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kcm9wZG93bltrZXk9InByb2plY3RUeXBlIl0nKTsKICBjb25zdCBmcmFtZXdvcmtEcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kcm9wZG93bltrZXk9ImZyYW1ld29yayJdJyk7CiAgaWYgKGZvcm0pIHsKICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coIkZvcm0gc3VibWl0dGVkIHdpdGggZGF0YToiLCBldmVudC5kZXRhaWwuZGF0YSk7CiAgICB9KTsKICB9CiAgaWYgKHByb2plY3RUeXBlRHJvcGRvd24gJiYgZnJhbWV3b3JrRHJvcGRvd24pIHsKICAgIHByb2plY3RUeXBlRHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3Qgc2VsZWN0ZWRUeXBlID0gZXZlbnQuZGV0YWlsLmtleTsKICAgICAgY29uc29sZS5sb2coYFByb2plY3QgdHlwZSBjaGFuZ2VkIHRvOiAke3NlbGVjdGVkVHlwZX1gKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI3LiBGb3JtIEludGVncmF0aW9uIn0gLnN1YnRpdGxlPSR7IkRyb3Bkb3duIHdvcmtpbmcgd2l0aGluIGEgZm9ybSB3aXRoIHZhbGlkYXRpb24ifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IlByb2plY3QgVHlwZSJ9CiAgICAgICAgICAgIC5rZXk9JHsicHJvamVjdFR5cGUifQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIldlYiBBcHBsaWNhdGlvbiIsIGtleTogIndlYiIgfSwKICB7IG9wdGlvbjogIk1vYmlsZSBBcHBsaWNhdGlvbiIsIGtleTogIm1vYmlsZSIgfSwKICB7IG9wdGlvbjogIkRlc2t0b3AgQXBwbGljYXRpb24iLCBrZXk6ICJkZXNrdG9wIiB9LAogIHsgb3B0aW9uOiAiQVBJIFNlcnZpY2UiLCBrZXk6ICJhcGkiIH0KXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJEZXZlbG9wbWVudCBGcmFtZXdvcmsifQogICAgICAgICAgICAua2V5PSR7ImZyYW1ld29yayJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiUmVhY3QiLCBrZXk6ICJyZWFjdCIsIHBheWxvYWQ6IHsgdHlwZTogIndlYiIgfSB9LAogIHsgb3B0aW9uOiAiVnVlLmpzIiwga2V5OiAidnVlIiwgcGF5bG9hZDogeyB0eXBlOiAid2ViIiB9IH0sCiAgeyBvcHRpb246ICJBbmd1bGFyIiwga2V5OiAiYW5ndWxhciIsIHBheWxvYWQ6IHsgdHlwZTogIndlYiIgfSB9LAogIHsgb3B0aW9uOiAiUmVhY3QgTmF0aXZlIiwga2V5OiAicmVhY3QtbmF0aXZlIiwgcGF5bG9hZDogeyB0eXBlOiAibW9iaWxlIiB9IH0sCiAgeyBvcHRpb246ICJGbHV0dGVyIiwga2V5OiAiZmx1dHRlciIsIHBheWxvYWQ6IHsgdHlwZTogIm1vYmlsZSIgfSB9LAogIHsgb3B0aW9uOiAiRWxlY3Ryb24iLCBrZXk6ICJlbGVjdHJvbiIsIHBheWxvYWQ6IHsgdHlwZTogImRlc2t0b3AiIH0gfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgLnRleHQ9JHsiQ3JlYXRlIFByb2plY3QifT48L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRyb3Bkb3duL2RlZXMtaW5wdXQtZHJvcGRvd24uanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczI2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXREcm9wZG93biA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtZHJvcGRvd24iKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX29wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX29wdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlU2VhcmNoX2RlY29yYXRvcnM7CiAgbGV0IF9lbmFibGVTZWFyY2hfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lbmFibGVTZWFyY2hfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wZW5zVG9Ub3BfZGVjb3JhdG9yczsKICBsZXQgX29wZW5zVG9Ub3BfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcGVuc1RvVG9wX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWx0ZXJlZE9wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2ZpbHRlcmVkT3B0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlcmVkT3B0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0ZWRJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfaGlnaGxpZ2h0ZWRJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hpZ2hsaWdodGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzT3BlbmVkX2RlY29yYXRvcnM7CiAgbGV0IF9pc09wZW5lZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzT3BlbmVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hWYWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfc2VhcmNoVmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hWYWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXREcm9wZG93bjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9vcHRpb25zX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfZW5hYmxlU2VhcmNoX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEJvb2xlYW4KICAgICAgfSldOwogICAgICBfb3BlbnNUb1RvcF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZmlsdGVyZWRPcHRpb25zX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9oaWdobGlnaHRlZEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc09wZW5lZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2VhcmNoVmFsdWVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMjUodGhpcywgbnVsbCwgX29wdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3B0aW9ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3B0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vcHRpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcHRpb25zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX29wdGlvbnNfaW5pdGlhbGl6ZXJzLCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZE9wdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRPcHRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRPcHRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkT3B0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkT3B0aW9uX2luaXRpYWxpemVycywgX3NlbGVjdGVkT3B0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjUodGhpcywgbnVsbCwgX2VuYWJsZVNlYXJjaF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbmFibGVTZWFyY2giLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVuYWJsZVNlYXJjaCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbmFibGVTZWFyY2gsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVuYWJsZVNlYXJjaCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lbmFibGVTZWFyY2hfaW5pdGlhbGl6ZXJzLCBfZW5hYmxlU2VhcmNoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjUodGhpcywgbnVsbCwgX29wZW5zVG9Ub3BfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3BlbnNUb1RvcCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3BlbnNUb1RvcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vcGVuc1RvVG9wLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcGVuc1RvVG9wID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX29wZW5zVG9Ub3BfaW5pdGlhbGl6ZXJzLCBfb3BlbnNUb1RvcF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9maWx0ZXJlZE9wdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyZWRPcHRpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWx0ZXJlZE9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsdGVyZWRPcHRpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXJlZE9wdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsdGVyZWRPcHRpb25zX2luaXRpYWxpemVycywgX2ZpbHRlcmVkT3B0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9oaWdobGlnaHRlZEluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhpZ2hsaWdodGVkSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhpZ2hsaWdodGVkSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaGlnaGxpZ2h0ZWRJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaGlnaGxpZ2h0ZWRJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oaWdobGlnaHRlZEluZGV4X2luaXRpYWxpemVycywgX2hpZ2hsaWdodGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNSh0aGlzLCBudWxsLCBfaXNPcGVuZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNPcGVuZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzT3BlbmVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzT3BlbmVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc09wZW5lZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc09wZW5lZF9pbml0aWFsaXplcnMsIF9pc09wZW5lZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9zZWFyY2hWYWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWFyY2hWYWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VhcmNoVmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VhcmNoVmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlYXJjaFZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlYXJjaFZhbHVlX2luaXRpYWxpemVycywgX3NlYXJjaFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXREcm9wZG93bjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzE3OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfb3B0aW9uc19pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgb3B0aW9ucygpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcHRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgc2VsZWN0ZWRPcHRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZE9wdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkT3B0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZE9wdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gQWRkIHZhbHVlIHByb3BlcnR5IGZvciBmb3JtIGNvbXBhdGliaWxpdHkKICAgIGdldCB2YWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICB9CiAgICBzZXQgdmFsdWUodmFsKSB7CiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB2YWw7CiAgICB9CiAgICAjZW5hYmxlU2VhcmNoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfc2VsZWN0ZWRPcHRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9lbmFibGVTZWFyY2hfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgZW5hYmxlU2VhcmNoKCkgewogICAgICByZXR1cm4gdGhpcy4jZW5hYmxlU2VhcmNoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZW5hYmxlU2VhcmNoKHZhbHVlMikgewogICAgICB0aGlzLiNlbmFibGVTZWFyY2hfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNvcGVuc1RvVG9wX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfZW5hYmxlU2VhcmNoX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfb3BlbnNUb1RvcF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgb3BlbnNUb1RvcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wZW5zVG9Ub3BfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcGVuc1RvVG9wKHZhbHVlMikgewogICAgICB0aGlzLiNvcGVuc1RvVG9wX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZmlsdGVyZWRPcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfb3BlbnNUb1RvcF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX2ZpbHRlcmVkT3B0aW9uc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZmlsdGVyZWRPcHRpb25zKCkgewogICAgICByZXR1cm4gdGhpcy4jZmlsdGVyZWRPcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsdGVyZWRPcHRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNmaWx0ZXJlZE9wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNoaWdobGlnaHRlZEluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfZmlsdGVyZWRPcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfaGlnaGxpZ2h0ZWRJbmRleF9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBoaWdobGlnaHRlZEluZGV4KCkgewogICAgICByZXR1cm4gdGhpcy4jaGlnaGxpZ2h0ZWRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhpZ2hsaWdodGVkSW5kZXgodmFsdWUyKSB7CiAgICAgIHRoaXMuI2hpZ2hsaWdodGVkSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc09wZW5lZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX2hpZ2hsaWdodGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9pc09wZW5lZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNPcGVuZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc09wZW5lZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzT3BlbmVkKHZhbHVlMikgewogICAgICB0aGlzLiNpc09wZW5lZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlYXJjaFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfaXNPcGVuZWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9zZWFyY2hWYWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgc2VhcmNoVmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWFyY2hWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlYXJjaFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWFyY2hWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3ggewogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDM4cHg7CiAgICAgICAgcGFkZGluZzogMCA0MHB4IDAgMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLnNlbGVjdGVkQm94OmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3g6Zm9jdXMtdmlzaWJsZSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5zZWxlY3RlZEJveC5kaXNhYmxlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC8qIERyb3Bkb3duIGFycm93ICovCiAgICAgIC5zZWxlY3RlZEJveDo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMTJweDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXRvcDogNHB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3gub3Blbjo6YWZ0ZXIgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKSByb3RhdGUoMTgwZGVnKTsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbkJveCB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybSwgb3BhY2l0eTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtOHB4KSBzY2FsZSgwLjk4KTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggaHNsKDAgMCUgMCUgLyAwLjEpLCAwIDJweCA0cHggLTJweCBoc2woMCAwJSAwJSAvIDAuMSk7CiAgICAgICAgbWluLWhlaWdodDogNDBweDsKICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIHotaW5kZXg6IDUwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWxlY3Rpb25Cb3gudG9wIHsKICAgICAgICBib3R0b206IGNhbGMoMTAwJSArIDRweCk7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg4cHgpIHNjYWxlKDAuOTgpOwogICAgICB9CiAgICAgIAogICAgICAuc2VsZWN0aW9uQm94LmJvdHRvbSB7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICB9CgogICAgICAuc2VsZWN0aW9uQm94LnNob3cgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHNjYWxlKDEpOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC8qIE9wdGlvbnMgY29udGFpbmVyICovCiAgICAgIC5vcHRpb25zLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LWhlaWdodDogMjUwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIC8qIE9wdGlvbnMgKi8KICAgICAgLm9wdGlvbiB7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG1hcmdpbjogMnB4IDA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLm9wdGlvbi5oaWdobGlnaHRlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5vcHRpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIE5vIG9wdGlvbnMgbWVzc2FnZSAqLwogICAgICAubm8tb3B0aW9ucyB7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLyogU2VhcmNoICovCiAgICAgIC5zZWFyY2ggewogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CiAgICAgIAogICAgICAuc2VhcmNoLmJvdHRvbSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWFyY2ggaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zZWFyY2ggaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5zZWFyY2ggaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgKi8KICAgICAgLm9wdGlvbnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgfQoKICAgICAgLm9wdGlvbnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5vcHRpb25zLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLm9wdGlvbnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0gLnJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZH0+PC9kZWVzLWxhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0ic2VsZWN0ZWRCb3ggJHt0aGlzLmlzT3BlbmVkID8gIm9wZW4iIDogIiJ9ICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLnRvZ2dsZVNlbGVjdGlvbkJveCgpfSIKICAgICAgICAgICAgdGFiaW5kZXg9IiR7dGhpcy5kaXNhYmxlZCA/ICItMSIgOiAiMCJ9IgogICAgICAgICAgICBAa2V5ZG93bj0iJHt0aGlzLmhhbmRsZVNlbGVjdGVkQm94S2V5ZG93bn0iCiAgICAgICAgICA+CiAgICAgICAgICAgICR7dGhpcy5zZWxlY3RlZE9wdGlvbj8ub3B0aW9uIHx8ICJTZWxlY3QgYW4gb3B0aW9uIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2VsZWN0aW9uQm94ICR7dGhpcy5pc09wZW5lZCA/ICJzaG93IiA6ICIifSAke3RoaXMub3BlbnNUb1RvcCA/ICJ0b3AiIDogImJvdHRvbSJ9Ij4KICAgICAgICAgICAgJHt0aGlzLmVuYWJsZVNlYXJjaCA/IGIyYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2giPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCAKICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InRleHQiIAogICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IlNlYXJjaCBvcHRpb25zLi4uIiAKICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0iJHt0aGlzLnNlYXJjaFZhbHVlfSIKICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD0iJHt0aGlzLmhhbmRsZVNlYXJjaH0iCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9IiR7KGUxMSkgPT4gZTExLnN0b3BQcm9wYWdhdGlvbigpfSIKICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSIke3RoaXMuaGFuZGxlU2VhcmNoS2V5ZG93bn0iCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgIDogbnVsbH0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3B0aW9ucy1jb250YWluZXIiPgogICAgICAgICAgICAgICR7dGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwID8gYjJgPGRpdiBjbGFzcz0ibm8tb3B0aW9ucyI+Tm8gb3B0aW9ucyBmb3VuZDwvZGl2PmAgOiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5tYXAoKG9wdGlvbjIsIGluZGV4MikgPT4gewogICAgICAgIGNvbnN0IGlzSGlnaGxpZ2h0ZWQgPSB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPT09IGluZGV4MjsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJvcHRpb24gJHtpc0hpZ2hsaWdodGVkID8gImhpZ2hsaWdodGVkIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSIkeygpID0+IHRoaXMudXBkYXRlU2VsZWN0aW9uKG9wdGlvbjIpfSIKICAgICAgICAgICAgICAgICAgICAgICAgQG1vdXNlZW50ZXI9IiR7KCkgPT4gdGhpcy5oaWdobGlnaHRlZEluZGV4ID0gaW5kZXgyfSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgJHtvcHRpb24yLm9wdGlvbn0KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIGA7CiAgICAgIH0pfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy5oYW5kbGVDbGlja091dHNpZGUgPSB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZS5iaW5kKHRoaXMpOwogICAgfQogICAgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5zZWxlY3RlZE9wdGlvbiB8fCBudWxsOwogICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9uczsKICAgIH0KICAgIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoIm9wdGlvbnMiKSkgewogICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zOwogICAgICB9CiAgICB9CiAgICBhc3luYyB1cGRhdGVTZWxlY3Rpb24oc2VsZWN0ZWRPcHRpb24pIHsKICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHNlbGVjdGVkT3B0aW9uOwogICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAiIjsKICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7CiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IDA7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlbGVjdGVkT3B0aW9uIiwgewogICAgICAgIGRldGFpbDogc2VsZWN0ZWRPcHRpb24sCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX3NlYXJjaFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHBhdGgyID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7CiAgICAgIGlmICghcGF0aDIuaW5jbHVkZXModGhpcykpIHsKICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICIiOwogICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zOwogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpOwogICAgICB9CiAgICB9KTsKICAgIGFzeW5jIHRvZ2dsZVNlbGVjdGlvbkJveCgpIHsKICAgICAgdGhpcy5pc09wZW5lZCA9ICF0aGlzLmlzT3BlbmVkOwogICAgICBpZiAodGhpcy5pc09wZW5lZCkgewogICAgICAgIGNvbnN0IHNlbGVjdGVkQm94ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zZWxlY3RlZEJveCIpOwogICAgICAgIGNvbnN0IHJlY3QgPSBzZWxlY3RlZEJveC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCBzcGFjZUJlbG93ID0gd2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5ib3R0b207CiAgICAgICAgY29uc3Qgc3BhY2VBYm92ZSA9IHJlY3QudG9wOwogICAgICAgIHRoaXMub3BlbnNUb1RvcCA9IHNwYWNlQmVsb3cgPCAzMDAgJiYgc3BhY2VBYm92ZSA+IHNwYWNlQmVsb3c7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICBjb25zdCBzZWFyY2hJbnB1dCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoIGlucHV0Iik7CiAgICAgICAgaWYgKHNlYXJjaElucHV0KSB7CiAgICAgICAgICBzZWFyY2hJbnB1dC5mb2N1cygpOwogICAgICAgIH0KICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpOwogICAgICAgIH0sIDApOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAiIjsKICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9uczsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlU2VhcmNoKGV2ZW50KSB7CiAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSBldmVudC50YXJnZXQudmFsdWU7CiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBzZWFyY2hUZXJtOwogICAgICBjb25zdCBzZWFyY2hMb3dlciA9IHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKTsKICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKChvcHRpb24yKSA9PiBvcHRpb24yLm9wdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaExvd2VyKSk7CiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IDA7CiAgICB9CiAgICBoYW5kbGVLZXlEb3duKGV2ZW50KSB7CiAgICAgIGNvbnN0IGtleTIgPSBldmVudC5rZXk7CiAgICAgIGNvbnN0IG1heEluZGV4ID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMTsKICAgICAgaWYgKGtleTIgPT09ICJBcnJvd0Rvd24iKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPSB0aGlzLmhpZ2hsaWdodGVkSW5kZXggKyAxID4gbWF4SW5kZXggPyAwIDogdGhpcy5oaWdobGlnaHRlZEluZGV4ICsgMTsKICAgICAgfSBlbHNlIGlmIChrZXkyID09PSAiQXJyb3dVcCIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCAtIDEgPCAwID8gbWF4SW5kZXggOiB0aGlzLmhpZ2hsaWdodGVkSW5kZXggLSAxOwogICAgICB9IGVsc2UgaWYgKGtleTIgPT09ICJFbnRlciIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmhpZ2hsaWdodGVkSW5kZXhdKSB7CiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmhpZ2hsaWdodGVkSW5kZXhdKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoa2V5MiA9PT0gIkVzY2FwZSIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaGFuZGxlU2VhcmNoS2V5ZG93bihldmVudCkgewogICAgICBpZiAoZXZlbnQua2V5ID09PSAiQXJyb3dEb3duIiB8fCBldmVudC5rZXkgPT09ICJBcnJvd1VwIiB8fCBldmVudC5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICB0aGlzLmhhbmRsZUtleURvd24oZXZlbnQpOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVTZWxlY3RlZEJveEtleWRvd24oZXZlbnQpIHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoZXZlbnQua2V5ID09PSAiRW50ZXIiIHx8IGV2ZW50LmtleSA9PT0gIiAiKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdGlvbkJveCgpOwogICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gIkFycm93RG93biIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dVcCIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGlmICghdGhpcy5pc09wZW5lZCkgewogICAgICAgICAgdGhpcy50b2dnbGVTZWxlY3Rpb25Cb3goKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAiRXNjYXBlIikgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgaWYgKHRoaXMuaXNPcGVuZWQpIHsKICAgICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbjsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdmFsdWUyOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyNihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0RHJvcGRvd24yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWZpbGV1cGxvYWQvZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxOCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tc2hlbGwgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDMycHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMTYwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CgogICAgICAgIC5kZW1vLWdyaWQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICB9CgogICAgICAgIEBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogICAgICAgICAgLmRlbW8tZ3JpZC0tdHdvIHsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgbWlubWF4KDAsIDFmcikpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLmRlbW8tc3RhY2sgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDE4cHg7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1ub3RlIHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA5MCUpIiwgImhzbCgyMTUgMjAlIDI2JSkiKX07CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMyAxMDAlIDk3JSkiLCAiaHNsKDIxNSAyMCUgMTIlKSIpfTsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyNSUgMzIlKSIsICJoc2woMjE1IDIwJSA4MiUpIil9OwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTU7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1ub3RlIHN0cm9uZyB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDQ1JSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNoZWxsIj4KICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiTW9kZXJuIGZpbGUgdXBsb2FkZXIifQogICAgICAgIC5zdWJ0aXRsZT0keyJTaGFkY24taW5zcGlyZWQgbGF5b3V0IHdpdGggZHJhZyAmIGRyb3AsIHByZXZpZXdzIGFuZCB2YWxpZGF0aW9uIn0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCBkZW1vLWdyaWQtLXR3byI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXN0YWNrIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZmlsZXVwbG9hZAogICAgICAgICAgICAgIC5sYWJlbD0keyJBdHRhY2htZW50cyJ9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlVwbG9hZCBzdXBwb3J0aW5nIGRvY3VtZW50cyBmb3IgeW91ciByZXF1ZXN0In0KICAgICAgICAgICAgICAuYWNjZXB0PSR7ImltYWdlLyosLnBkZiwuemlwIn0KICAgICAgICAgICAgICAubWF4U2l6ZT0kezEwICogMTAyNCAqIDEwMjR9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAgICAubGFiZWw9JHsiQnJhbmQgYXNzZXRzIn0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVXBsb2FkIGhpZ2gtcmVzb2x1dGlvbiBpbWFnZXJ5IChKUEcvUE5HKSJ9CiAgICAgICAgICAgICAgLmFjY2VwdD0keyJpbWFnZS9qcGVnLGltYWdlL3BuZyJ9CiAgICAgICAgICAgICAgLm11bHRpcGxlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLm1heFNpemU9JHs1ICogMTAyNCAqIDEwMjR9CiAgICAgICAgICAgICAgLmJ1dHRvblRleHQ9JHsiU2VsZWN0IGNvdmVyIGltYWdlIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1zdGFjayI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAgICAubGFiZWw9JHsiQXVkaW8gdXBsb2FkcyJ9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlNoYXJlIHBvZGNhc3QgZHJhZnRzIChNUDMvV0FWLCBtYXggMjVNQiBlYWNoKSJ9CiAgICAgICAgICAgICAgLmFjY2VwdD0keyJhdWRpby8qIn0KICAgICAgICAgICAgICAubWF4U2l6ZT0kezI1ICogMTAyNCAqIDEwMjR9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAgICAubGFiZWw9JHsiRGlzYWJsZWQgZXhhbXBsZSJ9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlVwbG9hZGVyIGlzIGRpc2FibGVkIHdoaWxlIG1vZGVyYXRpb24gaXMgcGVuZGluZyJ9CiAgICAgICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7IkZvcm0gaW50ZWdyYXRpb24ifQogICAgICAgIC5zdWJ0aXRsZT0keyJDb21iaW5lIGZpbGUgdXBsb2FkcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBERUVTIGZvcm0gZWNvc3lzdGVtIn0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXN0YWNrIj4KICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgICAgICAubGFiZWw9JHsiUHJvamVjdCBuYW1lIn0KICAgICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJIb3cgc2hvdWxkIHdlIHJlZmVyIHRvIHRoaXMgcHJvamVjdCBpbnRlcm5hbGx5PyJ9CiAgICAgICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAgICAgLmtleT0keyJwcm9qZWN0TmFtZSJ9CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgoKICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgICAgICAubGFiZWw9JHsiQ29udGFjdCBlbWFpbCJ9CiAgICAgICAgICAgICAgICAuaW5wdXRUeXBlPSR7ImVtYWlsIn0KICAgICAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgICAgICAua2V5PSR7ImNvbnRhY3RFbWFpbCJ9CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgoKICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC1maWxldXBsb2FkCiAgICAgICAgICAgICAgICAubGFiZWw9JHsiU3RhdGVtZW50IG9mIHdvcmsifQogICAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlVwbG9hZCBhIHNpZ25lZCBzdGF0ZW1lbnQgb2Ygd29yayAoUERGLCBtYXggMTVNQikifQogICAgICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgICAgIC5hY2NlcHQ9JHsiYXBwbGljYXRpb24vcGRmIn0KICAgICAgICAgICAgICAgIC5tYXhTaXplPSR7MTUgKiAxMDI0ICogMTAyNH0KICAgICAgICAgICAgICAgIC5tdWx0aXBsZT0ke2ZhbHNlfQogICAgICAgICAgICAgICAgLmtleT0keyJzb3cifQogICAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KCiAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtZmlsZXVwbG9hZAogICAgICAgICAgICAgICAgLmxhYmVsPSR7IkNyZWF0aXZlIHJlZmVyZW5jZXMifQogICAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7Ik9wdGlvbmFsLiBVcGxvYWQgdXAgdG8gZml2ZSB2aXN1YWwgcmVmZXJlbmNlcyJ9CiAgICAgICAgICAgICAgICAuYWNjZXB0PSR7ImltYWdlLyoifQogICAgICAgICAgICAgICAgLm1heEZpbGVzPSR7NX0KICAgICAgICAgICAgICAgIC5tYXhTaXplPSR7OCAqIDEwMjQgKiAxMDI0fQogICAgICAgICAgICAgICAgLmtleT0keyJyZWZlcmVuY2VzIn0KICAgICAgICAgICAgICA+PC9kZWVzLWlucHV0LWZpbGV1cGxvYWQ+CgogICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgICAgIC5sYWJlbD0keyJOb3RlcyJ9CiAgICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIG9wdGlvbmFsIGNvbnRleHQgZm9yIHJldmlld2VycyJ9CiAgICAgICAgICAgICAgICAuaW5wdXRUeXBlPSR7InRleHRhcmVhIn0KICAgICAgICAgICAgICAgIC5rZXk9JHsibm90ZXMifQogICAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KCiAgICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgLnRleHQ9JHsiU3VibWl0IGJyaWVmaW5nIn0+PC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGVlcy1mb3JtPgoKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tbm90ZSI+CiAgICAgICAgICAgIDxzdHJvbmc+R29vZCB0byBrbm93Ojwvc3Ryb25nPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPkRyYWcgJiBkcm9wIGhpZ2hsaWdodHMgdGhlIGRyb3B6b25lIGFuZCBzdXBwb3J0cyBrZXlib2FyZCBhY3RpdmF0aW9uLjwvbGk+CiAgICAgICAgICAgICAgPGxpPkFjY2VwdGVkIGZpbGUgdHlwZXMgYXJlIHN1bW1hcmlzZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZSA8Y29kZT5hY2NlcHQ8L2NvZGU+IGF0dHJpYnV0ZS48L2xpPgogICAgICAgICAgICAgIDxsaT5JbWFnZSB1cGxvYWRzIHNob3cgbGl2ZSBwcmV2aWV3cyBnZW5lcmF0ZWQgdmlhIDxjb2RlPlVSTC5jcmVhdGVPYmplY3RVUkw8L2NvZGU+LjwvbGk+CiAgICAgICAgICAgICAgPGxpPkZpbGUgc2l6ZSBhbmQgZmlsZS1jb3VudCBsaW1pdHMgc3VyZmFjZSBpbmxpbmUgdmFsaWRhdGlvbiBtZXNzYWdlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UaGUgY29tcG9uZW50IHN0YXlzIGNvbXBhdGlibGUgd2l0aCA8Y29kZT5kZWVzLWZvcm08L2NvZGU+IHZhbHVlIGFjY2Vzc29ycy48L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWZpbGV1cGxvYWQvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBmaWxldXBsb2FkU3R5bGVzID0gWwogIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgaWAKICAgIDpob3N0IHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KCgogICAgLmlucHV0LXdyYXBwZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDEycHg7CiAgICB9CgogICAgLmRyb3B6b25lIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBwYWRkaW5nOiAyMHB4OwogICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICBib3JkZXI6IDEuNXB4IGRhc2hlZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgODAlKSIsICJoc2woMjE3IDIwJSAyNSUpIil9OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIxNSAyMCUgMTIlKSIpfTsKICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMgZWFzZSwgYm94LXNoYWRvdyAwLjJzIGVhc2UsIGJhY2tncm91bmQgMC4ycyBlYXNlOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLmRyb3B6b25lOmZvY3VzLXZpc2libGUgewogICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMjAlIDEyJSkiKX0sCiAgICAgICAgMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUgLyAwLjUpIiwgImhzbCgyMTMgOTMlIDY4JSAvIDAuNCkiKX07CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmUtLWFjdGl2ZSB7CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDMycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTUsIDIzLCA0MiwgMC4xMikiLCAicmdiYSgwLCAwLCAwLCAwLjM1KSIpfTsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSAvIDAuMDYpIiwgImhzbCgyMTMgOTMlIDY4JSAvIDAuMTIpIil9OwogICAgfQoKICAgIC5kcm9wem9uZS0taGFzLWZpbGVzIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk5JSkiLCAiaHNsKDIxNSAyMCUgMTElKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmUtLWRpc2FibGVkIHsKICAgICAgb3BhY2l0eTogMC42OwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2JvZHkgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDE2cHg7CiAgICB9CgogICAgLmRyb3B6b25lX19pY29uIHsKICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgIGhlaWdodDogNDhweDsKICAgICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlIC8gMC4xMikiLCAiaHNsKDIxMyA5MyUgNjglIC8gMC4xMikiKX07CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLmRyb3B6b25lX19pY29uIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2xvYWRlciB7CiAgICAgIHdpZHRoOiAyMHB4OwogICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgxNSwgMjMsIDQyLCAwLjE1KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIil9OwogICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBhbmltYXRpb246IGxvYWRlci1zcGluIDAuNnMgbGluZWFyIGluZmluaXRlOwogICAgfQoKICAgIC5kcm9wem9uZV9fY29udGVudCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogNHB4OwogICAgICBtaW4td2lkdGg6IDA7CiAgICB9CgogICAgLmRyb3B6b25lX19oZWFkbGluZSB7CiAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyIDQ3JSAxMSUpIiwgImhzbCgyMTAgMjAlIDk2JSkiKX07CiAgICB9CgogICAgLmRyb3B6b25lX19zdWJsaW5lIHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ2JSkiLCAiaHNsKDIxNSAxNiUgNzAlKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2Jyb3dzZSB7CiAgICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgcGFkZGluZzogMDsKICAgICAgbWFyZ2luLWxlZnQ6IDRweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwgImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgfQoKICAgIC5kcm9wem9uZV9fYnJvd3NlOmhvdmVyIHsKICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICB9CgogICAgLmRyb3B6b25lX19icm93c2U6ZGlzYWJsZWQgewogICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICBvcGFjaXR5OiAwLjY7CiAgICB9CgogICAgLmRyb3B6b25lX19tZXRhIHsKICAgICAgbWFyZ2luLXRvcDogMTRweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICBnYXA6IDhweDsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDUwJSkiLCAiaHNsKDIxNSAxNiUgNzIlKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmVfX21ldGEgc3BhbiB7CiAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDk1JSkiLCAiaHNsKDIxMyA5MyUgMTglKSIpfTsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDkwJSkiLCAiaHNsKDIxMyA5MyUgMjQlKSIpfTsKICAgIH0KCiAgICAuZmlsZS1saXN0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAxMnB4OwogICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICBwYWRkaW5nLXRvcDogMjBweDsKICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA5MCUpIiwgImhzbCgyMTMgOTMlIDI0JSkiKX07CiAgICB9CgogICAgLmZpbGUtbGlzdF9faGVhZGVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsICJoc2woMjE1IDE2JSA2OCUpIil9OwogICAgfQoKICAgIC5maWxlLWxpc3RfX2NsZWFyIHsKICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgYm9yZGVyOiBub25lOwogICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CgogICAgLmZpbGUtbGlzdF9fY2xlYXI6aG92ZXIgewogICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIH0KCiAgICAuZmlsZS1saXN0X19pdGVtcyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMTJweDsKICAgIH0KCiAgICAuZmlsZS1yb3cgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDEycHg7CiAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUgLyAwLjUpIiwgImhzbCgyMTUgMjAlIDE2JSAvIDAuNSkiKX07CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEzIDI3JSA5MiUpIiwgImhzbCgyMTcgMjUlIDI2JSkiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgfQoKICAgIC5maWxlLXJvdzpob3ZlciB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlIC8gMC44KSIsICJoc2woMjE1IDIwJSAxNiUgLyAwLjgpIil9OwogICAgfQoKICAgIC5maWxlLXRodW1iIHsKICAgICAgd2lkdGg6IDM2cHg7CiAgICAgIGhlaWdodDogMzZweDsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgOTIlKSIsICJoc2woMjE3IDMyJSAxOCUpIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLmZpbGUtdGh1bWIgZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzAlKSIpfTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHdpZHRoOiAxOHB4OwogICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICBmbGV4LXNocmluazogMDsKICAgIH0KCgogICAgLnRodW1iLWltYWdlIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICB9CgogICAgLmZpbGUtbWV0YSB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogNHB4OwogICAgICBtaW4td2lkdGg6IDA7CiAgICB9CgogICAgLmZpbGUtbmFtZSB7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyIDQ3JSAxMSUpIiwgImhzbCgyMTAgMjAlIDk2JSkiKX07CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgfQoKICAgIC5maWxlLWRldGFpbHMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDYlKSIsICJoc2woMjE1IDE2JSA3MCUpIil9OwogICAgfQoKICAgIC5maWxlLXNpemUgewogICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgfQoKICAgIC5maWxlLXR5cGUgewogICAgICBwYWRkaW5nOiAycHggOHB4OwogICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDg2JSkiLCAiaHNsKDIxNyAzMiUgMjglKSIpfTsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NiUpIiwgImhzbCgyMTUgMTYlIDcwJSkiKX07CiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgfQoKICAgIC5maWxlLWFjdGlvbnMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICB9CgogICAgLnJlbW92ZS1idXR0b24gewogICAgICB3aWR0aDogMjhweDsKICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICBib3JkZXI6IG5vbmU7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZSwgdHJhbnNmb3JtIDAuMTVzIGVhc2UsIGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNTIlKSIsICJoc2woMjE1IDE2JSA2OCUpIil9OwogICAgfQoKICAgIC5yZW1vdmUtYnV0dG9uOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyJSA1MCUgLyAwLjA4KSIsICJoc2woMCA2MiUgMzIlIC8gMC4xNSkiKX07CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIlIDQ2JSkiLCAiaHNsKDAgNzAlIDcwJSkiKX07CiAgICB9CgogICAgLnJlbW92ZS1idXR0b246YWN0aXZlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk2KTsKICAgIH0KCiAgICAucmVtb3ZlLWJ1dHRvbiBkZWVzLWljb24gewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgd2lkdGg6IDE0cHg7CiAgICAgIGhlaWdodDogMTRweDsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLnZhbGlkYXRpb24tbWVzc2FnZSB7CiAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MiUgNDAlKSIsICJoc2woMCA3MCUgNjglKSIpfTsKICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgIH0KCiAgICBAa2V5ZnJhbWVzIGxvYWRlci1zcGluIHsKICAgICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgIH0KICAgIH0KICBgCl07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1maWxldXBsb2FkL2NvbXBvbmVudC5qcwppbml0X2RlZXNfaWNvbigpOwppbml0X2Rpc3RfdHMyNigpOwp2YXIgX19lc0RlY29yYXRlMjYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczI3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRGaWxldXBsb2FkID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1maWxldXBsb2FkIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdGVfZGVjb3JhdG9yczsKICBsZXQgX3N0YXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzTG9hZGluZ19kZWNvcmF0b3JzOwogIGxldCBfaXNMb2FkaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNMb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9idXR0b25UZXh0X2RlY29yYXRvcnM7CiAgbGV0IF9idXR0b25UZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYnV0dG9uVGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWNjZXB0X2RlY29yYXRvcnM7CiAgbGV0IF9hY2NlcHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY2NlcHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX211bHRpcGxlX2RlY29yYXRvcnM7CiAgbGV0IF9tdWx0aXBsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX211bHRpcGxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhTaXplX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhTaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4U2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RmlsZXNfZGVjb3JhdG9yczsKICBsZXQgX21heEZpbGVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RmlsZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblN0YXRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dEZpbGV1cGxvYWQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfc3RhdGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2lzTG9hZGluZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfYnV0dG9uVGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2FjY2VwdF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX211bHRpcGxlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX21heFNpemVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9tYXhGaWxlc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3ZhbGlkYXRpb25TdGF0ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMjYodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfc3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RhdGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInN0YXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdGF0ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zdGF0ZV9pbml0aWFsaXplcnMsIF9zdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF9pc0xvYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNMb2FkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0xvYWRpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNMb2FkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc0xvYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNMb2FkaW5nX2luaXRpYWxpemVycywgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF9idXR0b25UZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJ1dHRvblRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJ1dHRvblRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYnV0dG9uVGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYnV0dG9uVGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9idXR0b25UZXh0X2luaXRpYWxpemVycywgX2J1dHRvblRleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfYWNjZXB0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjY2VwdCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWNjZXB0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFjY2VwdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWNjZXB0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjY2VwdF9pbml0aWFsaXplcnMsIF9hY2NlcHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfbXVsdGlwbGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibXVsdGlwbGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm11bHRpcGxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm11bHRpcGxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tdWx0aXBsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tdWx0aXBsZV9pbml0aWFsaXplcnMsIF9tdWx0aXBsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF9tYXhTaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1heFNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heFNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWF4U2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWF4U2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhTaXplX2luaXRpYWxpemVycywgX21heFNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfbWF4RmlsZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWF4RmlsZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heEZpbGVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heEZpbGVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYXhGaWxlcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhGaWxlc19pbml0aWFsaXplcnMsIF9tYXhGaWxlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsaWRhdGlvblN0YXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uU3RhdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWxpZGF0aW9uU3RhdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0RmlsZXVwbG9hZDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzE4OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgW10pOwogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzdGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfc3RhdGVfaW5pdGlhbGl6ZXJzLCAiaWRsZSIpKTsKICAgIGdldCBzdGF0ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3N0YXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc3RhdGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3N0YXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfc3RhdGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9pc0xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzTG9hZGluZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzTG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzTG9hZGluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYnV0dG9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX2J1dHRvblRleHRfaW5pdGlhbGl6ZXJzLCAiU2VsZWN0IGZpbGVzIikpOwogICAgZ2V0IGJ1dHRvblRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNidXR0b25UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYnV0dG9uVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYnV0dG9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FjY2VwdF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX2J1dHRvblRleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9hY2NlcHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGFjY2VwdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FjY2VwdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjY2VwdCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWNjZXB0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbXVsdGlwbGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9hY2NlcHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9tdWx0aXBsZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBtdWx0aXBsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI211bHRpcGxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbXVsdGlwbGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI211bHRpcGxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX211bHRpcGxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfbWF4U2l6ZV9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBtYXhTaXplKCkgewogICAgICByZXR1cm4gdGhpcy4jbWF4U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gMCBtZWFucyBubyBsaW1pdAogICAgc2V0IG1heFNpemUodmFsdWUyKSB7CiAgICAgIHRoaXMuI21heFNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYXhGaWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX21heFNpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9tYXhGaWxlc19pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBtYXhGaWxlcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21heEZpbGVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICAvLyAwIG1lYW5zIG5vIGxpbWl0CiAgICBzZXQgbWF4RmlsZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI21heEZpbGVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmFsaWRhdGlvblN0YXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfbWF4RmlsZXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF92YWxpZGF0aW9uU3RhdGVfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgdmFsaWRhdGlvblN0YXRlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblN0YXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsaWRhdGlvblN0YXRlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YWxpZGF0aW9uTWVzc2FnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyksICIiKTsKICAgIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3ZhbGlkYXRpb25NZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsaWRhdGlvbk1lc3NhZ2UodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbGlkYXRpb25NZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBwcmV2aWV3VXJsTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgICBkcm9wQXJlYSA9IG51bGw7CiAgICBzdGF0aWMgc3R5bGVzID0gZmlsZXVwbG9hZFN0eWxlczsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgYWNjZXB0ZWRTdW1tYXJ5ID0gdGhpcy5nZXRBY2NlcHRlZFN1bW1hcnkoKTsKICAgICAgY29uc3QgbWV0YUVudHJpZXMgPSBbCiAgICAgICAgdGhpcy5tdWx0aXBsZSA/ICJNdWx0aXBsZSBmaWxlcyBzdXBwb3J0ZWQiIDogIlNpbmdsZSBmaWxlIG9ubHkiLAogICAgICAgIHRoaXMubWF4U2l6ZSA+IDAgPyBgTWF4ICR7dGhpcy5mb3JtYXRGaWxlU2l6ZSh0aGlzLm1heFNpemUpfWAgOiAiTm8gc2l6ZSBsaW1pdCIKICAgICAgXTsKICAgICAgaWYgKGFjY2VwdGVkU3VtbWFyeSkgewogICAgICAgIG1ldGFFbnRyaWVzLnB1c2goYEFjY2VwdHMgJHthY2NlcHRlZFN1bW1hcnl9YCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbAogICAgICAgICAgLmxhYmVsPSR7dGhpcy5sYWJlbH0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259CiAgICAgICAgICAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfQogICAgICAgID48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9ImRyb3B6b25lICR7dGhpcy5zdGF0ZSA9PT0gImRyYWdPdmVyIiA/ICJkcm9wem9uZS0tYWN0aXZlIiA6ICIifSAke3RoaXMuZGlzYWJsZWQgPyAiZHJvcHpvbmUtLWRpc2FibGVkIiA6ICIifSAke3RoaXMudmFsdWUubGVuZ3RoID4gMCA/ICJkcm9wem9uZS0taGFzLWZpbGVzIiA6ICIifSIKICAgICAgICAgIHJvbGU9ImJ1dHRvbiIKICAgICAgICAgIHRhYmluZGV4PSR7dGhpcy5kaXNhYmxlZCA/IC0xIDogMH0KICAgICAgICAgIGFyaWEtZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgYXJpYS1sYWJlbD0ke2BTZWxlY3QgZmlsZXMke2FjY2VwdGVkU3VtbWFyeSA/IGAgKCR7YWNjZXB0ZWRTdW1tYXJ5fSlgIDogIiJ9YH0KICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlRHJvcHpvbmVDbGlja30KICAgICAgICAgIEBrZXlkb3duPSR7dGhpcy5oYW5kbGVEcm9wem9uZUtleWRvd259CiAgICAgICAgPgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIGNsYXNzPSJmaWxlLWlucHV0IgogICAgICAgICAgICBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBvcGFjaXR5OiAwOyBwb2ludGVyLWV2ZW50czogbm9uZTsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxcHg7IHRvcDogMDsgbGVmdDogMDsgb3ZlcmZsb3c6IGhpZGRlbjsiCiAgICAgICAgICAgIHR5cGU9ImZpbGUiCiAgICAgICAgICAgID9tdWx0aXBsZT0ke3RoaXMubXVsdGlwbGV9CiAgICAgICAgICAgIGFjY2VwdD0ke3RoaXMuYWNjZXB0IHx8ICIifQogICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgICBAY2hhbmdlPSR7dGhpcy5oYW5kbGVGaWxlSW5wdXRDaGFuZ2V9CiAgICAgICAgICAgIHRhYmluZGV4PSItMSIKICAgICAgICAgIC8+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9fYm9keSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRyb3B6b25lX19pY29uIj4KICAgICAgICAgICAgICAke3RoaXMuaXNMb2FkaW5nID8gYjJgPHNwYW4gY2xhc3M9ImRyb3B6b25lX19sb2FkZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L3NwYW4+YCA6IGIyYDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkZvbGRlck9wZW4iPjwvZGVlcy1pY29uPmB9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9fY29udGVudCI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRyb3B6b25lX19oZWFkbGluZSI+JHt0aGlzLmJ1dHRvblRleHQgfHwgIlNlbGVjdCBmaWxlcyJ9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkcm9wem9uZV9fc3VibGluZSI+CiAgICAgICAgICAgICAgICBEcmFnIGFuZCBkcm9wIGZpbGVzIGhlcmUgb3IKICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIgogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcHpvbmVfX2Jyb3dzZSIKICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVCcm93c2VDbGlja30KICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgYnJvd3NlCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9fbWV0YSI+CiAgICAgICAgICAgICR7bWV0YUVudHJpZXMubWFwKChlbnRyeSkgPT4gYjJgPHNwYW4+JHtlbnRyeX08L3NwYW4+YCl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICR7dGhpcy5yZW5kZXJGaWxlTGlzdCgpfQogICAgICAgIDwvZGl2PgogICAgICAgICR7dGhpcy52YWxpZGF0aW9uTWVzc2FnZSA/IGIyYDxkaXYgY2xhc3M9InZhbGlkYXRpb24tbWVzc2FnZSIgYXJpYS1saXZlPSJwb2xpdGUiPiR7dGhpcy52YWxpZGF0aW9uTWVzc2FnZX08L2Rpdj5gIDogYjJgYH0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyRmlsZUxpc3QoKSB7CiAgICAgIGlmICh0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybiBiMmBgOwogICAgICB9CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iZmlsZS1saXN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWxpc3RfX2hlYWRlciI+CiAgICAgICAgICA8c3Bhbj4ke3RoaXMudmFsdWUubGVuZ3RofSBmaWxlJHt0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMSA/ICIiIDogInMifSBzZWxlY3RlZDwvc3Bhbj4KICAgICAgICAgICR7dGhpcy52YWx1ZS5sZW5ndGggPiAwID8gYjJgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJmaWxlLWxpc3RfX2NsZWFyIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUNsZWFyQWxsfT5DbGVhciAke3RoaXMudmFsdWUubGVuZ3RoID4gMSA/ICJhbGwiIDogIiJ9PC9idXR0b24+YCA6IGIyYGB9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1saXN0X19pdGVtcyI+CiAgICAgICAgICAke3RoaXMudmFsdWUubWFwKChmaWxlKSA9PiB0aGlzLnJlbmRlckZpbGVSb3coZmlsZSkpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJGaWxlUm93KGZpbGUpIHsKICAgICAgY29uc3QgZmlsZVR5cGUgPSB0aGlzLmdldEZpbGVUeXBlKGZpbGUpOwogICAgICBjb25zdCBwcmV2aWV3VXJsID0gdGhpcy5jYW5TaG93UHJldmlldyhmaWxlKSA/IHRoaXMuZ2V0UHJldmlld1VybChmaWxlKSA6IG51bGw7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iZmlsZS1yb3cgJHtmaWxlVHlwZX0tZmlsZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS10aHVtYiIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgJHtwcmV2aWV3VXJsID8gYjJgPGltZyBjbGFzcz0idGh1bWItaW1hZ2UiIHNyYz0ke3ByZXZpZXdVcmx9IGFsdD0ke2BQcmV2aWV3IG9mICR7ZmlsZS5uYW1lfWB9PmAgOiBiMmA8ZGVlcy1pY29uIGljb249JHt0aGlzLmdldEZpbGVJY29uKGZpbGUpfT48L2RlZXMtaWNvbj5gfQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtbWV0YSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLW5hbWUiIHRpdGxlPSR7ZmlsZS5uYW1lfT4ke2ZpbGUubmFtZX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtZGV0YWlscyI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWxlLXNpemUiPiR7dGhpcy5mb3JtYXRGaWxlU2l6ZShmaWxlLnNpemUpfTwvc3Bhbj4KICAgICAgICAgICAgJHtmaWxlVHlwZSAhPT0gImZpbGUiID8gYjJgPHNwYW4gY2xhc3M9ImZpbGUtdHlwZSI+JHtmaWxlVHlwZX08L3NwYW4+YCA6IGIyYGB9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWFjdGlvbnMiPgogICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICB0eXBlPSJidXR0b24iCiAgICAgICAgICAgIGNsYXNzPSJyZW1vdmUtYnV0dG9uIgogICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnJlbW92ZUZpbGUoZmlsZSl9CiAgICAgICAgICAgIGFyaWEtbGFiZWw9JHtgUmVtb3ZlICR7ZmlsZS5uYW1lfWB9CiAgICAgICAgICA+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlgiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGhhbmRsZUZpbGVJbnB1dENoYW5nZSA9IGFzeW5jIChldmVudCkgPT4gewogICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlOwogICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7CiAgICAgIGNvbnN0IGZpbGVzID0gQXJyYXkuZnJvbSh0YXJnZXQuZmlsZXMgPz8gW10pOwogICAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkgewogICAgICAgIGF3YWl0IHRoaXMuYWRkRmlsZXMoZmlsZXMpOwogICAgICB9CiAgICAgIHRhcmdldC52YWx1ZSA9ICIiOwogICAgfTsKICAgIGhhbmRsZURyb3B6b25lQ2xpY2sgPSAoZXZlbnQpID0+IHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGV2ZW50LnRhcmdldC5jbG9zZXN0KCIuZHJvcHpvbmVfX2Jyb3dzZSwgLmZpbGUtbGlzdCIpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMub3BlbkZpbGVTZWxlY3RvcigpOwogICAgfTsKICAgIGhhbmRsZUJyb3dzZUNsaWNrID0gKGV2ZW50KSA9PiB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICB0aGlzLm9wZW5GaWxlU2VsZWN0b3IoKTsKICAgIH07CiAgICBoYW5kbGVEcm9wem9uZUtleWRvd24gPSAoZXZlbnQpID0+IHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGV2ZW50LmtleSA9PT0gIkVudGVyIiB8fCBldmVudC5rZXkgPT09ICIgIikgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy5vcGVuRmlsZVNlbGVjdG9yKCk7CiAgICAgIH0KICAgIH07CiAgICBoYW5kbGVDbGVhckFsbCA9IChldmVudCkgPT4gewogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLmNsZWFyQWxsKCk7CiAgICB9OwogICAgaGFuZGxlRHJhZ0V2ZW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoZXZlbnQudHlwZSA9PT0gImRyYWdlbnRlciIgfHwgZXZlbnQudHlwZSA9PT0gImRyYWdvdmVyIikgewogICAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHsKICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gImNvcHkiOwogICAgICAgIH0KICAgICAgICB0aGlzLnN0YXRlID0gImRyYWdPdmVyIjsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICJkcmFnbGVhdmUiKSB7CiAgICAgICAgaWYgKCF0aGlzLmRyb3BBcmVhKSB7CiAgICAgICAgICB0aGlzLnN0YXRlID0gImlkbGUiOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5kcm9wQXJlYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCB7IGNsaWVudFggPSAwLCBjbGllbnRZID0gMCB9ID0gZXZlbnQ7CiAgICAgICAgaWYgKGNsaWVudFggPD0gcmVjdC5sZWZ0IHx8IGNsaWVudFggPj0gcmVjdC5yaWdodCB8fCBjbGllbnRZIDw9IHJlY3QudG9wIHx8IGNsaWVudFkgPj0gcmVjdC5ib3R0b20pIHsKICAgICAgICAgIHRoaXMuc3RhdGUgPSAiaWRsZSI7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoZXZlbnQudHlwZSA9PT0gImRyb3AiKSB7CiAgICAgICAgdGhpcy5zdGF0ZSA9ICJpZGxlIjsKICAgICAgICBjb25zdCBmaWxlcyA9IEFycmF5LmZyb20oZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcyA/PyBbXSk7CiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGF3YWl0IHRoaXMuYWRkRmlsZXMoZmlsZXMpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIGF0dGFjaERyb3BMaXN0ZW5lcnMoKSB7CiAgICAgIGlmICghdGhpcy5kcm9wQXJlYSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBbImRyYWdlbnRlciIsICJkcmFnb3ZlciIsICJkcmFnbGVhdmUiLCAiZHJvcCJdLmZvckVhY2goKGV2ZW50TmFtZSkgPT4gewogICAgICAgIHRoaXMuZHJvcEFyZWEuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMuaGFuZGxlRHJhZ0V2ZW50KTsKICAgICAgfSk7CiAgICB9CiAgICBkZXRhY2hEcm9wTGlzdGVuZXJzKCkgewogICAgICBpZiAoIXRoaXMuZHJvcEFyZWEpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgWyJkcmFnZW50ZXIiLCAiZHJhZ292ZXIiLCAiZHJhZ2xlYXZlIiwgImRyb3AiXS5mb3JFYWNoKChldmVudE5hbWUpID0+IHsKICAgICAgICB0aGlzLmRyb3BBcmVhLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCB0aGlzLmhhbmRsZURyYWdFdmVudCk7CiAgICAgIH0pOwogICAgfQogICAgcmViaW5kSW50ZXJhY3RpdmVFbGVtZW50cygpIHsKICAgICAgY29uc3QgbmV3RHJvcEFyZWEgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kcm9wem9uZSIpOwogICAgICBpZiAobmV3RHJvcEFyZWEgIT09IHRoaXMuZHJvcEFyZWEpIHsKICAgICAgICB0aGlzLmRldGFjaERyb3BMaXN0ZW5lcnMoKTsKICAgICAgICB0aGlzLmRyb3BBcmVhID0gbmV3RHJvcEFyZWE7CiAgICAgICAgdGhpcy5hdHRhY2hEcm9wTGlzdGVuZXJzKCk7CiAgICAgIH0KICAgIH0KICAgIGZvcm1hdEZpbGVTaXplKGJ5dGVzKSB7CiAgICAgIGNvbnN0IHVuaXRzMiA9IFsiQnl0ZXMiLCAiS0IiLCAiTUIiLCAiR0IiXTsKICAgICAgaWYgKGJ5dGVzID09PSAwKQogICAgICAgIHJldHVybiAiMCBCeXRlcyI7CiAgICAgIGNvbnN0IGV4cG9uZW50ID0gTWF0aC5taW4oTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZygxMDI0KSksIHVuaXRzMi5sZW5ndGggLSAxKTsKICAgICAgY29uc3Qgc2l6ZSA9IGJ5dGVzIC8gTWF0aC5wb3coMTAyNCwgZXhwb25lbnQpOwogICAgICByZXR1cm4gYCR7TWF0aC5yb3VuZChzaXplICogMTAwKSAvIDEwMH0gJHt1bml0czJbZXhwb25lbnRdfWA7CiAgICB9CiAgICBnZXRGaWxlVHlwZShmaWxlKSB7CiAgICAgIGNvbnN0IHR5cGU1ID0gZmlsZS50eXBlLnRvTG93ZXJDYXNlKCk7CiAgICAgIGlmICh0eXBlNS5zdGFydHNXaXRoKCJpbWFnZS8iKSkKICAgICAgICByZXR1cm4gImltYWdlIjsKICAgICAgaWYgKHR5cGU1ID09PSAiYXBwbGljYXRpb24vcGRmIikKICAgICAgICByZXR1cm4gInBkZiI7CiAgICAgIGlmICh0eXBlNS5pbmNsdWRlcygid29yZCIpIHx8IHR5cGU1LmluY2x1ZGVzKCJkb2N1bWVudCIpKQogICAgICAgIHJldHVybiAiZG9jIjsKICAgICAgaWYgKHR5cGU1LmluY2x1ZGVzKCJzaGVldCIpIHx8IHR5cGU1LmluY2x1ZGVzKCJleGNlbCIpKQogICAgICAgIHJldHVybiAic3ByZWFkc2hlZXQiOwogICAgICBpZiAodHlwZTUuaW5jbHVkZXMoInByZXNlbnRhdGlvbiIpIHx8IHR5cGU1LmluY2x1ZGVzKCJwb3dlcnBvaW50IikpCiAgICAgICAgcmV0dXJuICJwcmVzZW50YXRpb24iOwogICAgICBpZiAodHlwZTUuc3RhcnRzV2l0aCgidmlkZW8vIikpCiAgICAgICAgcmV0dXJuICJ2aWRlbyI7CiAgICAgIGlmICh0eXBlNS5zdGFydHNXaXRoKCJhdWRpby8iKSkKICAgICAgICByZXR1cm4gImF1ZGlvIjsKICAgICAgaWYgKHR5cGU1LmluY2x1ZGVzKCJ6aXAiKSB8fCB0eXBlNS5pbmNsdWRlcygiY29tcHJlc3NlZCIpKQogICAgICAgIHJldHVybiAiYXJjaGl2ZSI7CiAgICAgIHJldHVybiAiZmlsZSI7CiAgICB9CiAgICBnZXRGaWxlSWNvbihmaWxlKSB7CiAgICAgIGNvbnN0IGZpbGVUeXBlID0gdGhpcy5nZXRGaWxlVHlwZShmaWxlKTsKICAgICAgY29uc3QgaWNvbk1hcCA9IHsKICAgICAgICBpbWFnZTogImx1Y2lkZTpGaWxlSW1hZ2UiLAogICAgICAgIHBkZjogImx1Y2lkZTpGaWxlVGV4dCIsCiAgICAgICAgZG9jOiAibHVjaWRlOkZpbGVUZXh0IiwKICAgICAgICBzcHJlYWRzaGVldDogImx1Y2lkZTpGaWxlU3ByZWFkc2hlZXQiLAogICAgICAgIHByZXNlbnRhdGlvbjogImx1Y2lkZTpGaWxlQmFyQ2hhcnQiLAogICAgICAgIHZpZGVvOiAibHVjaWRlOkZpbGVWaWRlbyIsCiAgICAgICAgYXVkaW86ICJsdWNpZGU6RmlsZUF1ZGlvIiwKICAgICAgICBhcmNoaXZlOiAibHVjaWRlOkZpbGVBcmNoaXZlIiwKICAgICAgICBmaWxlOiAibHVjaWRlOkZpbGUiCiAgICAgIH07CiAgICAgIHJldHVybiBpY29uTWFwW2ZpbGVUeXBlXSA/PyAibHVjaWRlOkZpbGUiOwogICAgfQogICAgY2FuU2hvd1ByZXZpZXcoZmlsZSkgewogICAgICByZXR1cm4gZmlsZS50eXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpICYmIGZpbGUuc2l6ZSA8IDUgKiAxMDI0ICogMTAyNDsKICAgIH0KICAgIHZhbGlkYXRlRmlsZShmaWxlKSB7CiAgICAgIGlmICh0aGlzLm1heFNpemUgPiAwICYmIGZpbGUuc2l6ZSA+IHRoaXMubWF4U2l6ZSkgewogICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgRmlsZSAiJHtmaWxlLm5hbWV9IiBleGNlZWRzIHRoZSBtYXhpbXVtIHNpemUgb2YgJHt0aGlzLmZvcm1hdEZpbGVTaXplKHRoaXMubWF4U2l6ZSl9YDsKICAgICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9ICJpbnZhbGlkIjsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuYWNjZXB0KSB7CiAgICAgICAgY29uc3QgYWNjZXB0ZWRUeXBlcyA9IHRoaXMuYWNjZXB0LnNwbGl0KCIsIikubWFwKChlbnRyeSkgPT4gZW50cnkudHJpbSgpKS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5sZW5ndGggPiAwKTsKICAgICAgICBpZiAoYWNjZXB0ZWRUeXBlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBsZXQgaXNBY2NlcHRlZCA9IGZhbHNlOwogICAgICAgICAgZm9yIChjb25zdCBhY2NlcHRUeXBlIG9mIGFjY2VwdGVkVHlwZXMpIHsKICAgICAgICAgICAgaWYgKGFjY2VwdFR5cGUuc3RhcnRzV2l0aCgiLiIpKSB7CiAgICAgICAgICAgICAgaWYgKGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGFjY2VwdFR5cGUudG9Mb3dlckNhc2UoKSkpIHsKICAgICAgICAgICAgICAgIGlzQWNjZXB0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGFjY2VwdFR5cGUuZW5kc1dpdGgoIi8qIikpIHsKICAgICAgICAgICAgICBjb25zdCBwcmVmaXg0ID0gYWNjZXB0VHlwZS5zbGljZSgwLCAtMik7CiAgICAgICAgICAgICAgaWYgKGZpbGUudHlwZS5zdGFydHNXaXRoKHByZWZpeDQpKSB7CiAgICAgICAgICAgICAgICBpc0FjY2VwdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxlLnR5cGUgPT09IGFjY2VwdFR5cGUpIHsKICAgICAgICAgICAgICBpc0FjY2VwdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKCFpc0FjY2VwdGVkKSB7CiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgRmlsZSB0eXBlIG5vdCBhY2NlcHRlZC4gQWxsb3dlZDogJHthY2NlcHRlZFR5cGVzLmpvaW4oIiwgIil9YDsKICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU3RhdGUgPSAiaW52YWxpZCI7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBnZXRQcmV2aWV3VXJsKGZpbGUpIHsKICAgICAgbGV0IHVybCA9IHRoaXMucHJldmlld1VybE1hcC5nZXQoZmlsZSk7CiAgICAgIGlmICghdXJsKSB7CiAgICAgICAgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTsKICAgICAgICB0aGlzLnByZXZpZXdVcmxNYXAuc2V0KGZpbGUsIHVybCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVybDsKICAgIH0KICAgIHJlbGVhc2VQcmV2aWV3KGZpbGUpIHsKICAgICAgY29uc3QgdXJsID0gdGhpcy5wcmV2aWV3VXJsTWFwLmdldChmaWxlKTsKICAgICAgaWYgKHVybCkgewogICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTsKICAgICAgICB0aGlzLnByZXZpZXdVcmxNYXAuZGVsZXRlKGZpbGUpOwogICAgICB9CiAgICB9CiAgICBnZXRBY2NlcHRlZFN1bW1hcnkoKSB7CiAgICAgIGlmICghdGhpcy5hY2NlcHQpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBmb3JtYXR0ZWQgPSBBcnJheS5mcm9tKG5ldyBTZXQodGhpcy5hY2NlcHQuc3BsaXQoIiwiKS5tYXAoKHRva2VuKSA9PiB0b2tlbi50cmltKCkpLmZpbHRlcigodG9rZW4pID0+IHRva2VuLmxlbmd0aCA+IDApLm1hcCgodG9rZW4pID0+IHRoaXMuZm9ybWF0QWNjZXB0VG9rZW4odG9rZW4pKSkpLmZpbHRlcihCb29sZWFuKTsKICAgICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBpZiAoZm9ybWF0dGVkLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHJldHVybiBmb3JtYXR0ZWRbMF07CiAgICAgIH0KICAgICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggPT09IDIpIHsKICAgICAgICByZXR1cm4gYCR7Zm9ybWF0dGVkWzBdfSwgJHtmb3JtYXR0ZWRbMV19YDsKICAgICAgfQogICAgICByZXR1cm4gYCR7Zm9ybWF0dGVkLnNsaWNlKDAsIDIpLmpvaW4oIiwgIil9XHUyMDI2YDsKICAgIH0KICAgIGZvcm1hdEFjY2VwdFRva2VuKHRva2VuKSB7CiAgICAgIGlmICh0b2tlbiA9PT0gIiovKiIpIHsKICAgICAgICByZXR1cm4gIkFsbCBmaWxlcyI7CiAgICAgIH0KICAgICAgaWYgKHRva2VuLmVuZHNXaXRoKCIvKiIpKSB7CiAgICAgICAgY29uc3QgZmFtaWx5ID0gdG9rZW4uc3BsaXQoIi8iKVswXTsKICAgICAgICBpZiAoIWZhbWlseSkgewogICAgICAgICAgcmV0dXJuICJBbGwgZmlsZXMiOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYCR7ZmFtaWx5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7ZmFtaWx5LnNsaWNlKDEpfSBmaWxlc2A7CiAgICAgIH0KICAgICAgaWYgKHRva2VuLnN0YXJ0c1dpdGgoIi4iKSkgewogICAgICAgIHJldHVybiB0b2tlbi5zbGljZSgxKS50b1VwcGVyQ2FzZSgpOwogICAgICB9CiAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygicGRmIikpCiAgICAgICAgcmV0dXJuICJQREYiOwogICAgICBpZiAodG9rZW4uaW5jbHVkZXMoInppcCIpKQogICAgICAgIHJldHVybiAiWklQIjsKICAgICAgaWYgKHRva2VuLmluY2x1ZGVzKCJqc29uIikpCiAgICAgICAgcmV0dXJuICJKU09OIjsKICAgICAgaWYgKHRva2VuLmluY2x1ZGVzKCJtc3dvcmQiKSkKICAgICAgICByZXR1cm4gIkRPQyI7CiAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygid29yZHByb2Nlc3NpbmdtbCIpKQogICAgICAgIHJldHVybiAiRE9DWCI7CiAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygiZXhjZWwiKSkKICAgICAgICByZXR1cm4gIlhMUyI7CiAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygicHJlc2VudGF0aW9uIikpCiAgICAgICAgcmV0dXJuICJQUFQiOwogICAgICBjb25zdCBzZWdtZW50cyA9IHRva2VuLnNwbGl0KCIvIik7CiAgICAgIGNvbnN0IGxhc3RTZWdtZW50ID0gc2VnbWVudHMucG9wKCkgPz8gdG9rZW47CiAgICAgIHJldHVybiBsYXN0U2VnbWVudC50b1VwcGVyQ2FzZSgpOwogICAgfQogICAgYXR0YWNoTGlmZWN5Y2xlTGlzdGVuZXJzKCkgewogICAgICB0aGlzLnJlYmluZEludGVyYWN0aXZlRWxlbWVudHMoKTsKICAgIH0KICAgIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICB0aGlzLmF0dGFjaExpZmVjeWNsZUxpc3RlbmVycygpOwogICAgfQogICAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygidmFsdWUiKSkgewogICAgICAgIHZvaWQgdGhpcy52YWxpZGF0ZSgpOwogICAgICB9CiAgICAgIHRoaXMucmViaW5kSW50ZXJhY3RpdmVFbGVtZW50cygpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIHRoaXMuZGV0YWNoRHJvcExpc3RlbmVycygpOwogICAgICB0aGlzLnZhbHVlLmZvckVhY2goKGZpbGUpID0+IHRoaXMucmVsZWFzZVByZXZpZXcoZmlsZSkpOwogICAgICB0aGlzLnByZXZpZXdVcmxNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIH0KICAgIGFzeW5jIG9wZW5GaWxlU2VsZWN0b3IoKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuaXNMb2FkaW5nKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTsKICAgICAgY29uc3QgaW5wdXRGaWxlID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZmlsZS1pbnB1dCIpOwogICAgICBpZiAoIWlucHV0RmlsZSkgewogICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4gewogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgaWYgKCFpbnB1dEZpbGUuZmlsZXMgfHwgaW5wdXRGaWxlLmZpbGVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIiwgaGFuZGxlRm9jdXMpOwogICAgICAgIH0sIDMwMCk7CiAgICAgIH07CiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIGhhbmRsZUZvY3VzKTsKICAgICAgaW5wdXRGaWxlLmNsaWNrKCk7CiAgICB9CiAgICByZW1vdmVGaWxlKGZpbGUpIHsKICAgICAgY29uc3QgaW5kZXgyID0gdGhpcy52YWx1ZS5pbmRleE9mKGZpbGUpOwogICAgICBpZiAoaW5kZXgyID4gLTEpIHsKICAgICAgICB0aGlzLnJlbGVhc2VQcmV2aWV3KGZpbGUpOwogICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4MiwgMSk7CiAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCJ2YWx1ZSIpOwogICAgICAgIHZvaWQgdGhpcy52YWxpZGF0ZSgpOwogICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICB9CiAgICB9CiAgICBjbGVhckFsbCgpIHsKICAgICAgY29uc3QgZXhpc3RpbmdGaWxlcyA9IFsuLi50aGlzLnZhbHVlXTsKICAgICAgdGhpcy52YWx1ZSA9IFtdOwogICAgICBleGlzdGluZ0ZpbGVzLmZvckVhY2goKGZpbGUpID0+IHRoaXMucmVsZWFzZVByZXZpZXcoZmlsZSkpOwogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoInZhbHVlIik7CiAgICAgIHZvaWQgdGhpcy52YWxpZGF0ZSgpOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgdGhpcy5idXR0b25UZXh0ID0gIlNlbGVjdCBmaWxlcyI7CiAgICB9CiAgICBhc3luYyB1cGRhdGVWYWx1ZShldmVudEFyZykgewogICAgICBjb25zdCB0YXJnZXQgPSBldmVudEFyZy50YXJnZXQ7CiAgICAgIHRoaXMudmFsdWUgPSBBcnJheS5mcm9tKHRhcmdldC5maWxlcyA/PyBbXSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUuZm9yRWFjaCgoZmlsZSkgPT4gdGhpcy5yZWxlYXNlUHJldmlldyhmaWxlKSk7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgIGlmICh2YWx1ZTIubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuYnV0dG9uVGV4dCA9IHRoaXMubXVsdGlwbGUgPyAiQWRkIG1vcmUgZmlsZXMiIDogIlJlcGxhY2UgZmlsZSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5idXR0b25UZXh0ID0gIlNlbGVjdCBmaWxlcyI7CiAgICAgIH0KICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCJ2YWx1ZSIpOwogICAgICB2b2lkIHRoaXMudmFsaWRhdGUoKTsKICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIGFzeW5jIGFkZEZpbGVzKGZpbGVzKSB7CiAgICAgIGNvbnN0IGZpbGVzVG9BZGQgPSBbXTsKICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7CiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVGaWxlKGZpbGUpKSB7CiAgICAgICAgICBmaWxlc1RvQWRkLnB1c2goZmlsZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChmaWxlc1RvQWRkLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLm1heEZpbGVzID4gMCkgewogICAgICAgIGNvbnN0IHRvdGFsRmlsZXMgPSB0aGlzLnZhbHVlLmxlbmd0aCArIGZpbGVzVG9BZGQubGVuZ3RoOwogICAgICAgIGlmICh0b3RhbEZpbGVzID4gdGhpcy5tYXhGaWxlcykgewogICAgICAgICAgY29uc3QgYWxsb3dlZENvdW50ID0gdGhpcy5tYXhGaWxlcyAtIHRoaXMudmFsdWUubGVuZ3RoOwogICAgICAgICAgaWYgKGFsbG93ZWRDb3VudCA8PSAwKSB7CiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgTWF4aW11bSAke3RoaXMubWF4RmlsZXN9IGZpbGVzIGFsbG93ZWRgOwogICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9ICJpbnZhbGlkIjsKICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgZmlsZXNUb0FkZC5zcGxpY2UoYWxsb3dlZENvdW50KTsKICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgT25seSAke2FsbG93ZWRDb3VudH0gbW9yZSBmaWxlKHMpIGNhbiBiZSBhZGRlZGA7CiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9ICJ3YXJuIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIGZpbGVzVG9BZGQubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMudmFsdWUuZm9yRWFjaCgoZmlsZSkgPT4gdGhpcy5yZWxlYXNlUHJldmlldyhmaWxlKSk7CiAgICAgICAgdGhpcy52YWx1ZSA9IFtmaWxlc1RvQWRkWzBdXTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnZhbHVlLnB1c2goLi4uZmlsZXNUb0FkZCk7CiAgICAgIH0KICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICIiOwogICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9IG51bGw7CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgidmFsdWUiKTsKICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTsKICAgICAgaWYgKHRoaXMudmFsdWUubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuYnV0dG9uVGV4dCA9IHRoaXMubXVsdGlwbGUgPyAiQWRkIG1vcmUgZmlsZXMiIDogIlJlcGxhY2UgZmlsZSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5idXR0b25UZXh0ID0gIlNlbGVjdCBmaWxlcyI7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHZhbGlkYXRlKCkgewogICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gIiI7CiAgICAgIGlmICh0aGlzLnJlcXVpcmVkICYmIHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy52YWxpZGF0aW9uU3RhdGUgPSAiaW52YWxpZCI7CiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICJQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBmaWxlIjsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHRoaXMudmFsdWUpIHsKICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVGaWxlKGZpbGUpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMudmFsaWRhdGlvblN0YXRlID0gdGhpcy52YWx1ZS5sZW5ndGggPiAwID8gInZhbGlkIiA6IG51bGw7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyNyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0RmlsZXVwbG9hZDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2liYW50b29sc0A0LjUuMS9ub2RlX21vZHVsZXMvaWJhbnRvb2xzL2pzbmV4dC9pYmFudG9vbHMuanMKZnVuY3Rpb24gaXNWYWxpZElCQU4oaWJhbiwgdmFsaWRhdGlvbk9wdGlvbnMpIHsKICBpZiAodmFsaWRhdGlvbk9wdGlvbnMgPT09IHZvaWQgMCkgewogICAgdmFsaWRhdGlvbk9wdGlvbnMgPSB7IGFsbG93UVJJQkFOOiB0cnVlIH07CiAgfQogIGlmIChpYmFuID09PSB2b2lkIDAgfHwgaWJhbiA9PT0gbnVsbCkKICAgIHJldHVybiBmYWxzZTsKICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgiXlswLTldezJ9JCIsICIiKTsKICB2YXIgY291bnRyeUNvZGUgPSBpYmFuLnNsaWNlKDAsIDIpOwogIHZhciBzcGVjID0gY291bnRyeVNwZWNzW2NvdW50cnlDb2RlXTsKICBpZiAoc3BlYyA9PT0gdm9pZCAwIHx8IHNwZWMuYmJhbl9yZWdleHAgPT09IHZvaWQgMCB8fCBzcGVjLmJiYW5fcmVnZXhwID09PSBudWxsIHx8IHNwZWMuY2hhcnMgPT09IHZvaWQgMCkKICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gc3BlYy5jaGFycyA9PT0gaWJhbi5sZW5ndGggJiYgcmVnLnRlc3QoaWJhbi5zbGljZSgyLCA0KSkgJiYgaXNWYWxpZEJCQU4oaWJhbi5zbGljZSg0KSwgY291bnRyeUNvZGUpICYmIGlzVmFsaWRJQkFOQ2hlY2tzdW0oaWJhbikgJiYgKHZhbGlkYXRpb25PcHRpb25zLmFsbG93UVJJQkFOIHx8ICFpc1FSSUJBTihpYmFuKSk7Cn0KdmFyIFZhbGlkYXRpb25FcnJvcnNJQkFOOwooZnVuY3Rpb24oVmFsaWRhdGlvbkVycm9yc0lCQU4yKSB7CiAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiTm9JQkFOUHJvdmlkZWQiXSA9IDBdID0gIk5vSUJBTlByb3ZpZGVkIjsKICBWYWxpZGF0aW9uRXJyb3JzSUJBTjJbVmFsaWRhdGlvbkVycm9yc0lCQU4yWyJOb0lCQU5Db3VudHJ5Il0gPSAxXSA9ICJOb0lCQU5Db3VudHJ5IjsKICBWYWxpZGF0aW9uRXJyb3JzSUJBTjJbVmFsaWRhdGlvbkVycm9yc0lCQU4yWyJXcm9uZ0JCQU5MZW5ndGgiXSA9IDJdID0gIldyb25nQkJBTkxlbmd0aCI7CiAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiV3JvbmdCQkFORm9ybWF0Il0gPSAzXSA9ICJXcm9uZ0JCQU5Gb3JtYXQiOwogIFZhbGlkYXRpb25FcnJvcnNJQkFOMltWYWxpZGF0aW9uRXJyb3JzSUJBTjJbIkNoZWNrc3VtTm90TnVtYmVyIl0gPSA0XSA9ICJDaGVja3N1bU5vdE51bWJlciI7CiAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiV3JvbmdJQkFOQ2hlY2tzdW0iXSA9IDVdID0gIldyb25nSUJBTkNoZWNrc3VtIjsKICBWYWxpZGF0aW9uRXJyb3JzSUJBTjJbVmFsaWRhdGlvbkVycm9yc0lCQU4yWyJXcm9uZ0FjY291bnRCYW5rQnJhbmNoQ2hlY2tzdW0iXSA9IDZdID0gIldyb25nQWNjb3VudEJhbmtCcmFuY2hDaGVja3N1bSI7CiAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiUVJJQkFOTm90QWxsb3dlZCJdID0gN10gPSAiUVJJQkFOTm90QWxsb3dlZCI7Cn0pKFZhbGlkYXRpb25FcnJvcnNJQkFOIHx8IChWYWxpZGF0aW9uRXJyb3JzSUJBTiA9IHt9KSk7CmZ1bmN0aW9uIHZhbGlkYXRlSUJBTihpYmFuLCB2YWxpZGF0aW9uT3B0aW9ucykgewogIGlmICh2YWxpZGF0aW9uT3B0aW9ucyA9PT0gdm9pZCAwKSB7CiAgICB2YWxpZGF0aW9uT3B0aW9ucyA9IHsgYWxsb3dRUklCQU46IHRydWUgfTsKICB9CiAgdmFyIHJlc3VsdCA9IHsgZXJyb3JDb2RlczogW10sIHZhbGlkOiB0cnVlIH07CiAgaWYgKGliYW4gIT09IHZvaWQgMCAmJiBpYmFuICE9PSBudWxsICYmIGliYW4gIT09ICIiKSB7CiAgICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1tpYmFuLnNsaWNlKDAsIDIpXTsKICAgIGlmICghc3BlYyB8fCAhKHNwZWMuYmJhbl9yZWdleHAgfHwgc3BlYy5jaGFycykpIHsKICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uTm9JQkFOQ291bnRyeSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBpZiAoc3BlYyAmJiBzcGVjLmNoYXJzICYmIHNwZWMuY2hhcnMgIT09IGliYW4ubGVuZ3RoKSB7CiAgICAgIHJlc3VsdC52YWxpZCA9IGZhbHNlOwogICAgICByZXN1bHQuZXJyb3JDb2Rlcy5wdXNoKFZhbGlkYXRpb25FcnJvcnNJQkFOLldyb25nQkJBTkxlbmd0aCk7CiAgICB9CiAgICBpZiAoc3BlYyAmJiBzcGVjLmJiYW5fcmVnZXhwICYmICFjaGVja0Zvcm1hdEJCQU4oaWJhbi5zbGljZSg0KSwgc3BlYy5iYmFuX3JlZ2V4cCkpIHsKICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uV3JvbmdCQkFORm9ybWF0KTsKICAgIH0KICAgIGlmIChzcGVjICYmIHNwZWMuYmJhbl92YWxpZGF0aW9uX2Z1bmMgJiYgIXNwZWMuYmJhbl92YWxpZGF0aW9uX2Z1bmMoaWJhbi5zbGljZSg0KSkpIHsKICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uV3JvbmdBY2NvdW50QmFua0JyYW5jaENoZWNrc3VtKTsKICAgIH0KICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKCJeWzAtOV17Mn0kIiwgIiIpOwogICAgaWYgKCFyZWcudGVzdChpYmFuLnNsaWNlKDIsIDQpKSkgewogICAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgICAgcmVzdWx0LmVycm9yQ29kZXMucHVzaChWYWxpZGF0aW9uRXJyb3JzSUJBTi5DaGVja3N1bU5vdE51bWJlcik7CiAgICB9CiAgICBpZiAocmVzdWx0LmVycm9yQ29kZXMuaW5kZXhPZihWYWxpZGF0aW9uRXJyb3JzSUJBTi5Xcm9uZ0JCQU5Gb3JtYXQpICE9PSAtMSB8fCAhaXNWYWxpZElCQU5DaGVja3N1bShpYmFuKSkgewogICAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgICAgcmVzdWx0LmVycm9yQ29kZXMucHVzaChWYWxpZGF0aW9uRXJyb3JzSUJBTi5Xcm9uZ0lCQU5DaGVja3N1bSk7CiAgICB9CiAgICBpZiAoIXZhbGlkYXRpb25PcHRpb25zLmFsbG93UVJJQkFOICYmIGlzUVJJQkFOKGliYW4pKSB7CiAgICAgIHJlc3VsdC52YWxpZCA9IGZhbHNlOwogICAgICByZXN1bHQuZXJyb3JDb2Rlcy5wdXNoKFZhbGlkYXRpb25FcnJvcnNJQkFOLlFSSUJBTk5vdEFsbG93ZWQpOwogICAgfQogIH0gZWxzZSB7CiAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uTm9JQkFOUHJvdmlkZWQpOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIGlzVmFsaWRCQkFOKGJiYW4sIGNvdW50cnlDb2RlKSB7CiAgaWYgKGJiYW4gPT09IHZvaWQgMCB8fCBiYmFuID09PSBudWxsIHx8IGNvdW50cnlDb2RlID09PSB2b2lkIDAgfHwgY291bnRyeUNvZGUgPT09IG51bGwpCiAgICByZXR1cm4gZmFsc2U7CiAgdmFyIHNwZWMgPSBjb3VudHJ5U3BlY3NbY291bnRyeUNvZGVdOwogIGlmIChzcGVjID09PSB2b2lkIDAgfHwgc3BlYyA9PT0gbnVsbCB8fCBzcGVjLmJiYW5fcmVnZXhwID09PSB2b2lkIDAgfHwgc3BlYy5iYmFuX3JlZ2V4cCA9PT0gbnVsbCB8fCBzcGVjLmNoYXJzID09PSB2b2lkIDAgfHwgc3BlYy5jaGFycyA9PT0gbnVsbCkKICAgIHJldHVybiBmYWxzZTsKICBpZiAoc3BlYy5jaGFycyAtIDQgPT09IGJiYW4ubGVuZ3RoICYmIGNoZWNrRm9ybWF0QkJBTihiYmFuLCBzcGVjLmJiYW5fcmVnZXhwKSkgewogICAgaWYgKHNwZWMuYmJhbl92YWxpZGF0aW9uX2Z1bmMpIHsKICAgICAgcmV0dXJuIHNwZWMuYmJhbl92YWxpZGF0aW9uX2Z1bmMoYmJhbi5yZXBsYWNlKC9bXHMuXSsvZywgIiIpKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gaXNTRVBBQ291bnRyeShjb3VudHJ5Q29kZSkgewogIGlmIChjb3VudHJ5Q29kZSAhPT0gdm9pZCAwICYmIGNvdW50cnlDb2RlICE9PSBudWxsKSB7CiAgICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1tjb3VudHJ5Q29kZV07CiAgICBpZiAoc3BlYyAhPT0gdm9pZCAwKSB7CiAgICAgIHJldHVybiBzcGVjLlNFUEEgPyBzcGVjLlNFUEEgOiBmYWxzZTsKICAgIH0KICB9CiAgcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIGlzUVJJQkFOKGliYW4pIHsKICBpZiAoaWJhbiA9PT0gdm9pZCAwIHx8IGliYW4gPT09IG51bGwpCiAgICByZXR1cm4gZmFsc2U7CiAgdmFyIGNvdW50cnlDb2RlID0gaWJhbi5zbGljZSgwLCAyKTsKICB2YXIgUVJJQkFOQ291bnRyaWVzID0gWyJMSSIsICJDSCJdOwogIGlmICghUVJJQkFOQ291bnRyaWVzLmluY2x1ZGVzKGNvdW50cnlDb2RlKSkKICAgIHJldHVybiBmYWxzZTsKICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgiXjNbMC0xXXsxfVswLTldezN9JCIsICIiKTsKICByZXR1cm4gcmVnLnRlc3QoaWJhbi5zbGljZSg0LCA5KSk7Cn0KZnVuY3Rpb24gY29tcG9zZUlCQU4ocGFyYW1zMikgewogIHZhciBmb3JtYXRlZF9iYmFuID0gZWxlY3Ryb25pY0Zvcm1hdElCQU4ocGFyYW1zMi5iYmFuKSB8fCAiIjsKICBpZiAocGFyYW1zMi5jb3VudHJ5Q29kZSA9PT0gbnVsbCB8fCBwYXJhbXMyLmNvdW50cnlDb2RlID09PSB2b2lkIDApIHsKICAgIHJldHVybiBudWxsOwogIH0KICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1twYXJhbXMyLmNvdW50cnlDb2RlXTsKICBpZiAoZm9ybWF0ZWRfYmJhbiAhPT0gIiIgJiYgc3BlYyAhPT0gdm9pZCAwICYmIHNwZWMuY2hhcnMgJiYgc3BlYy5jaGFycyAhPT0gbnVsbCAmJiBzcGVjLmNoYXJzID09PSBmb3JtYXRlZF9iYmFuLmxlbmd0aCArIDQgJiYgc3BlYy5iYmFuX3JlZ2V4cCAmJiBzcGVjLmJiYW5fcmVnZXhwICE9PSBudWxsICYmIGNoZWNrRm9ybWF0QkJBTihmb3JtYXRlZF9iYmFuLCBzcGVjLmJiYW5fcmVnZXhwKSkgewogICAgdmFyIGNoZWNrc29tID0gbW9kOTcxMEliYW4ocGFyYW1zMi5jb3VudHJ5Q29kZSArICIwMCIgKyBmb3JtYXRlZF9iYmFuKTsKICAgIHJldHVybiBwYXJhbXMyLmNvdW50cnlDb2RlICsgKCIwIiArICg5OCAtIGNoZWNrc29tKSkuc2xpY2UoLTIpICsgZm9ybWF0ZWRfYmJhbjsKICB9CiAgcmV0dXJuIG51bGw7Cn0KZnVuY3Rpb24gZXh0cmFjdElCQU4oaWJhbikgewogIHZhciByZXN1bHQgPSB7fTsKICB2YXIgZUZvcm1hdElCQU4gPSBlbGVjdHJvbmljRm9ybWF0SUJBTihpYmFuKTsKICByZXN1bHQuaWJhbiA9IGVGb3JtYXRJQkFOIHx8IGliYW47CiAgaWYgKCEhZUZvcm1hdElCQU4gJiYgaXNWYWxpZElCQU4oZUZvcm1hdElCQU4pKSB7CiAgICByZXN1bHQuYmJhbiA9IGVGb3JtYXRJQkFOLnNsaWNlKDQpOwogICAgcmVzdWx0LmNvdW50cnlDb2RlID0gZUZvcm1hdElCQU4uc2xpY2UoMCwgMik7CiAgICByZXN1bHQudmFsaWQgPSB0cnVlOwogICAgdmFyIHNwZWMgPSBjb3VudHJ5U3BlY3NbcmVzdWx0LmNvdW50cnlDb2RlXTsKICAgIGlmIChzcGVjLmFjY291bnRfaW5kZW50aWZpZXIpIHsKICAgICAgdmFyIGFjID0gc3BlYy5hY2NvdW50X2luZGVudGlmaWVyLnNwbGl0KCItIik7CiAgICAgIHZhciBzdGFydGluZyA9IHBhcnNlSW50KGFjWzBdKTsKICAgICAgdmFyIGVuZGluZyA9IHBhcnNlSW50KGFjWzFdKTsKICAgICAgcmVzdWx0LmFjY291bnROdW1iZXIgPSByZXN1bHQuaWJhbi5zbGljZShzdGFydGluZywgZW5kaW5nICsgMSk7CiAgICB9CiAgICBpZiAoc3BlYy5iYW5rX2lkZW50aWZpZXIpIHsKICAgICAgdmFyIGFjID0gc3BlYy5iYW5rX2lkZW50aWZpZXIuc3BsaXQoIi0iKTsKICAgICAgdmFyIHN0YXJ0aW5nID0gcGFyc2VJbnQoYWNbMF0pOwogICAgICB2YXIgZW5kaW5nID0gcGFyc2VJbnQoYWNbMV0pOwogICAgICByZXN1bHQuYmFua0lkZW50aWZpZXIgPSByZXN1bHQuYmJhbi5zbGljZShzdGFydGluZywgZW5kaW5nICsgMSk7CiAgICB9CiAgICBpZiAoc3BlYy5icmFuY2hfaW5kZW50aWZpZXIpIHsKICAgICAgdmFyIGFjID0gc3BlYy5icmFuY2hfaW5kZW50aWZpZXIuc3BsaXQoIi0iKTsKICAgICAgdmFyIHN0YXJ0aW5nID0gcGFyc2VJbnQoYWNbMF0pOwogICAgICB2YXIgZW5kaW5nID0gcGFyc2VJbnQoYWNbMV0pOwogICAgICByZXN1bHQuYnJhbmNoSWRlbnRpZmllciA9IHJlc3VsdC5iYmFuLnNsaWNlKHN0YXJ0aW5nLCBlbmRpbmcgKyAxKTsKICAgIH0KICB9IGVsc2UgewogICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gY2hlY2tGb3JtYXRCQkFOKGJiYW4sIGJmb3JtYXQpIHsKICB2YXIgcmVnID0gbmV3IFJlZ0V4cChiZm9ybWF0LCAiIik7CiAgcmV0dXJuIHJlZy50ZXN0KGJiYW4pOwp9CmZ1bmN0aW9uIGVsZWN0cm9uaWNGb3JtYXRJQkFOKGliYW4pIHsKICBpZiAodHlwZW9mIGliYW4gIT09ICJzdHJpbmciKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcmV0dXJuIGliYW4ucmVwbGFjZSgvWy1cIF0vZywgIiIpLnRvVXBwZXJDYXNlKCk7Cn0KZnVuY3Rpb24gZnJpZW5kbHlGb3JtYXRJQkFOKGliYW4sIHNlcGFyYXRvcikgewogIGlmICh0eXBlb2YgaWJhbiAhPT0gInN0cmluZyIpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBpZiAoc2VwYXJhdG9yID09PSB2b2lkIDAgfHwgc2VwYXJhdG9yID09PSBudWxsKSB7CiAgICBzZXBhcmF0b3IgPSAiICI7CiAgfQogIHZhciBlbGVjdHJvbmljX2liYW4gPSBlbGVjdHJvbmljRm9ybWF0SUJBTihpYmFuKTsKICBpZiAoZWxlY3Ryb25pY19pYmFuID09PSBudWxsKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcmV0dXJuIGVsZWN0cm9uaWNfaWJhbi5yZXBsYWNlKC8oLns0fSkoPyEkKS9nLCAiJDEiICsgc2VwYXJhdG9yKTsKfQpmdW5jdGlvbiBpc1ZhbGlkSUJBTkNoZWNrc3VtKGliYW4pIHsKICB2YXIgY291bnRyeUNvZGUgPSBpYmFuLnNsaWNlKDAsIDIpOwogIHZhciBwcm92aWRlZENoZWNrc3VtID0gcGFyc2VJbnQoaWJhbi5zbGljZSgyLCA0KSwgMTApOwogIHZhciBiYmFuID0gaWJhbi5zbGljZSg0KTsKICB2YXIgdmFsaWRhdGlvblN0cmluZyA9IHJlcGxhY2VDaGFyYXRlcldpdGhDb2RlKCIiLmNvbmNhdChiYmFuKS5jb25jYXQoY291bnRyeUNvZGUsICIwMCIpKTsKICB2YXIgcmVzdCA9IG1vZDk3MTAodmFsaWRhdGlvblN0cmluZyk7CiAgcmV0dXJuIDk4IC0gcmVzdCA9PT0gcHJvdmlkZWRDaGVja3N1bTsKfQpmdW5jdGlvbiByZXBsYWNlQ2hhcmF0ZXJXaXRoQ29kZShzdHIpIHsKICByZXR1cm4gc3RyLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oYzExKSB7CiAgICB2YXIgY29kZTQgPSBjMTEuY2hhckNvZGVBdCgwKTsKICAgIHJldHVybiBjb2RlNCA+PSA2NSA/IChjb2RlNCAtIDU1KS50b1N0cmluZygpIDogYzExOwogIH0pLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIG1vZDk3MTBJYmFuKGliYW4pIHsKICByZXR1cm4gbW9kOTcxMChyZXBsYWNlQ2hhcmF0ZXJXaXRoQ29kZShpYmFuLnNsaWNlKDQpICsgaWJhbi5zbGljZSgwLCA0KSkpOwp9CmZ1bmN0aW9uIGdldENvdW50cnlTcGVjaWZpY2F0aW9ucygpIHsKICB2YXIgY291bnR5TWFwID0ge307CiAgZm9yICh2YXIgY291bnR5Q29kZSBpbiBjb3VudHJ5U3BlY3MpIHsKICAgIHZhciBjb3VudHkgPSBjb3VudHJ5U3BlY3NbY291bnR5Q29kZV07CiAgICBjb3VudHlNYXBbY291bnR5Q29kZV0gPSB7CiAgICAgIGNoYXJzOiBjb3VudHkuY2hhcnMgfHwgbnVsbCwKICAgICAgYmJhbl9yZWdleHA6IGNvdW50eS5iYmFuX3JlZ2V4cCB8fCBudWxsLAogICAgICBJQkFOUmVnaXN0cnk6IGNvdW50eS5JQkFOUmVnaXN0cnkgfHwgZmFsc2UsCiAgICAgIFNFUEE6IGNvdW50eS5TRVBBIHx8IGZhbHNlCiAgICB9OwogIH0KICByZXR1cm4gY291bnR5TWFwOwp9CmZ1bmN0aW9uIGlzVmFsaWRCSUMoYmljKSB7CiAgaWYgKCFiaWMpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgdmFyIHJlZyA9IG5ldyBSZWdFeHAoIl5bYS16QS1aXXs2fVthLXpBLVowLTldezJ9KFthLXpBLVowLTldezN9KT8kIiwgIiIpOwogIHZhciBzcGVjID0gY291bnRyeVNwZWNzW2JpYy50b1VwcGVyQ2FzZSgpLnNsaWNlKDQsIDYpXTsKICByZXR1cm4gcmVnLnRlc3QoYmljKSAmJiBzcGVjICE9PSB2b2lkIDA7Cn0KdmFyIFZhbGlkYXRpb25FcnJvcnNCSUM7CihmdW5jdGlvbihWYWxpZGF0aW9uRXJyb3JzQklDMikgewogIFZhbGlkYXRpb25FcnJvcnNCSUMyW1ZhbGlkYXRpb25FcnJvcnNCSUMyWyJOb0JJQ1Byb3ZpZGVkIl0gPSAwXSA9ICJOb0JJQ1Byb3ZpZGVkIjsKICBWYWxpZGF0aW9uRXJyb3JzQklDMltWYWxpZGF0aW9uRXJyb3JzQklDMlsiTm9CSUNDb3VudHJ5Il0gPSAxXSA9ICJOb0JJQ0NvdW50cnkiOwogIFZhbGlkYXRpb25FcnJvcnNCSUMyW1ZhbGlkYXRpb25FcnJvcnNCSUMyWyJXcm9uZ0JJQ0Zvcm1hdCJdID0gMl0gPSAiV3JvbmdCSUNGb3JtYXQiOwp9KShWYWxpZGF0aW9uRXJyb3JzQklDIHx8IChWYWxpZGF0aW9uRXJyb3JzQklDID0ge30pKTsKZnVuY3Rpb24gdmFsaWRhdGVCSUMoYmljKSB7CiAgdmFyIHJlc3VsdCA9IHsgZXJyb3JDb2RlczogW10sIHZhbGlkOiB0cnVlIH07CiAgaWYgKGJpYyAhPT0gdm9pZCAwICYmIGJpYyAhPT0gbnVsbCAmJiBiaWMgIT09ICIiKSB7CiAgICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1tiaWMudG9VcHBlckNhc2UoKS5zbGljZSg0LCA2KV07CiAgICBpZiAoc3BlYyA9PT0gdm9pZCAwKSB7CiAgICAgIHJlc3VsdC52YWxpZCA9IGZhbHNlOwogICAgICByZXN1bHQuZXJyb3JDb2Rlcy5wdXNoKFZhbGlkYXRpb25FcnJvcnNCSUMuTm9CSUNDb3VudHJ5KTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKCJeW2EtekEtWl17Nn1bYS16QS1aMC05XXsyfShbYS16QS1aMC05XXszfSk/JCIsICIiKTsKICAgICAgaWYgKCFyZWcudGVzdChiaWMpKSB7CiAgICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgICAgcmVzdWx0LmVycm9yQ29kZXMucHVzaChWYWxpZGF0aW9uRXJyb3JzQklDLldyb25nQklDRm9ybWF0KTsKICAgICAgfQogICAgfQogIH0gZWxzZSB7CiAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0JJQy5Ob0JJQ1Byb3ZpZGVkKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBleHRyYWN0QklDKGlucHV0QmljKSB7CiAgdmFyIHJlc3VsdCA9IHt9OwogIHZhciBiaWMgPSBpbnB1dEJpYy50b1VwcGVyQ2FzZSgpOwogIGlmIChpc1ZhbGlkQklDKGJpYykpIHsKICAgIHJlc3VsdC5iYW5rQ29kZSA9IGJpYy5zbGljZSgwLCA0KTsKICAgIHJlc3VsdC5jb3VudHJ5Q29kZSA9IGJpYy5zbGljZSg0LCA2KTsKICAgIHJlc3VsdC5sb2NhdGlvbkNvZGUgPSBiaWMuc2xpY2UoNiwgOCk7CiAgICByZXN1bHQudGVzdEJJQyA9IHJlc3VsdC5sb2NhdGlvbkNvZGVbMV0gPT09ICIwIiA/IHRydWUgOiBmYWxzZTsKICAgIHJlc3VsdC5icmFuY2hDb2RlID0gYmljLmxlbmd0aCA+IDggPyBiaWMuc2xpY2UoOCkgOiBudWxsOwogICAgcmVzdWx0LnZhbGlkID0gdHJ1ZTsKICB9IGVsc2UgewogICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KdmFyIGNoZWNrTm9yd2F5QkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICB2YXIgd2VpZ2h0cyA9IFs1LCA0LCAzLCAyLCA3LCA2LCA1LCA0LCAzLCAyXTsKICB2YXIgYmJhbldpdGhvdXRTcGFjZXNBbmRQZXJpb2RzID0gYmJhbi5yZXBsYWNlKC9bXHMuXSsvZywgIiIpOwogIHZhciBjb250cm9sRGlnaXQgPSBwYXJzZUludChiYmFuV2l0aG91dFNwYWNlc0FuZFBlcmlvZHMuY2hhckF0KDEwKSwgMTApOwogIHZhciBiYmFuV2l0aG91dENvbnRyb2xEaWdpdCA9IGJiYW5XaXRob3V0U3BhY2VzQW5kUGVyaW9kcy5zdWJzdHJpbmcoMCwgMTApOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IDEwOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KGJiYW5XaXRob3V0Q29udHJvbERpZ2l0LmNoYXJBdChpbmRleDIpLCAxMCkgKiB3ZWlnaHRzW2luZGV4Ml07CiAgfQogIHZhciByZW1haW5kZXIgPSBzdW0gJSAxMTsKICByZXR1cm4gY29udHJvbERpZ2l0ID09PSAocmVtYWluZGVyID09PSAwID8gMCA6IDExIC0gcmVtYWluZGVyKTsKfTsKdmFyIGNoZWNrQmVsZ2lhbkJCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgdmFyIHN0cmlwcGVkID0gYmJhbi5yZXBsYWNlKC9bXHMuXSsvZywgIiIpOwogIHZhciBjaGVja2luZ1BhcnQgPSBwYXJzZUludChzdHJpcHBlZC5zdWJzdHJpbmcoMCwgc3RyaXBwZWQubGVuZ3RoIC0gMiksIDEwKTsKICB2YXIgY2hlY2tzdW0gPSBwYXJzZUludChzdHJpcHBlZC5zdWJzdHJpbmcoc3RyaXBwZWQubGVuZ3RoIC0gMiwgc3RyaXBwZWQubGVuZ3RoKSwgMTApOwogIHZhciByZW1haW5kZXIgPSBjaGVja2luZ1BhcnQgJSA5NyA9PT0gMCA/IDk3IDogY2hlY2tpbmdQYXJ0ICUgOTc7CiAgcmV0dXJuIHJlbWFpbmRlciA9PT0gY2hlY2tzdW07Cn07CnZhciBtb2Q5NzEwID0gZnVuY3Rpb24odmFsaWRhdGlvblN0cmluZykgewogIHdoaWxlICh2YWxpZGF0aW9uU3RyaW5nLmxlbmd0aCA+IDIpIHsKICAgIHZhciBwYXJ0ID0gdmFsaWRhdGlvblN0cmluZy5zbGljZSgwLCA2KTsKICAgIHZhciBwYXJ0SW50ID0gcGFyc2VJbnQocGFydCwgMTApOwogICAgaWYgKGlzTmFOKHBhcnRJbnQpKSB7CiAgICAgIHJldHVybiBOYU47CiAgICB9CiAgICB2YWxpZGF0aW9uU3RyaW5nID0gcGFydEludCAlIDk3ICsgdmFsaWRhdGlvblN0cmluZy5zbGljZShwYXJ0Lmxlbmd0aCk7CiAgfQogIHJldHVybiBwYXJzZUludCh2YWxpZGF0aW9uU3RyaW5nLCAxMCkgJSA5NzsKfTsKdmFyIGNoZWNrTW9kOTcxMEJCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgdmFyIHN0cmlwcGVkID0gYmJhbi5yZXBsYWNlKC9bXHMuXSsvZywgIiIpOwogIHZhciByZW1pbmRlciA9IG1vZDk3MTAoc3RyaXBwZWQpOwogIHJldHVybiByZW1pbmRlciA9PT0gMTsKfTsKdmFyIGNoZWNrUG9sYW5kQkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICB2YXIgd2VpZ2h0cyA9IFszLCA5LCA3LCAxLCAzLCA5LCA3XTsKICB2YXIgY29udHJvbERpZ2l0ID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoNyksIDEwKTsKICB2YXIgdG9DaGVjayA9IGJiYW4uc3Vic3RyaW5nKDAsIDcpOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IDc7IGluZGV4MisrKSB7CiAgICBzdW0gKz0gcGFyc2VJbnQodG9DaGVjay5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c1tpbmRleDJdOwogIH0KICB2YXIgcmVtYWluZGVyID0gc3VtICUgMTA7CiAgcmV0dXJuIGNvbnRyb2xEaWdpdCA9PT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiAxMCAtIHJlbWFpbmRlcik7Cn07CnZhciBjaGVja1NwYWluQkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICB2YXIgd2VpZ2h0c0JhbmtCcmFuY2ggPSBbNCwgOCwgNSwgMTAsIDksIDcsIDMsIDZdOwogIHZhciB3ZWlnaHRzQWNjb3VudCA9IFsxLCAyLCA0LCA4LCA1LCAxMCwgOSwgNywgMywgNl07CiAgdmFyIGNvbnRyb2xCYW5rQnJhbmNoID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoOCksIDEwKTsKICB2YXIgY29udHJvbEFjY291bnQgPSBwYXJzZUludChiYmFuLmNoYXJBdCg5KSwgMTApOwogIHZhciBiYW5rQnJhbmNoID0gYmJhbi5zdWJzdHJpbmcoMCwgOCk7CiAgdmFyIGFjY291bnQgPSBiYmFuLnN1YnN0cmluZygxMCwgMjApOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IDg7IGluZGV4MisrKSB7CiAgICBzdW0gKz0gcGFyc2VJbnQoYmFua0JyYW5jaC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c0JhbmtCcmFuY2hbaW5kZXgyXTsKICB9CiAgdmFyIHJlbWFpbmRlciA9IHN1bSAlIDExOwogIGlmIChjb250cm9sQmFua0JyYW5jaCAhPT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiByZW1haW5kZXIgPT09IDEgPyAxIDogMTEgLSByZW1haW5kZXIpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHN1bSA9IDA7CiAgZm9yICh2YXIgaW5kZXgyID0gMDsgaW5kZXgyIDwgMTA7IGluZGV4MisrKSB7CiAgICBzdW0gKz0gcGFyc2VJbnQoYWNjb3VudC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c0FjY291bnRbaW5kZXgyXTsKICB9CiAgcmVtYWluZGVyID0gc3VtICUgMTE7CiAgcmV0dXJuIGNvbnRyb2xBY2NvdW50ID09PSAocmVtYWluZGVyID09PSAwID8gMCA6IHJlbWFpbmRlciA9PT0gMSA/IDEgOiAxMSAtIHJlbWFpbmRlcik7Cn07CnZhciBjaGVja01vZDExMTAgPSBmdW5jdGlvbih0b0NoZWNrLCBjb250cm9sKSB7CiAgdmFyIG5yID0gMTA7CiAgZm9yICh2YXIgaW5kZXgyID0gMDsgaW5kZXgyIDwgdG9DaGVjay5sZW5ndGg7IGluZGV4MisrKSB7CiAgICBuciArPSBwYXJzZUludCh0b0NoZWNrLmNoYXJBdChpbmRleDIpLCAxMCk7CiAgICBpZiAobnIgJSAxMCAhPT0gMCkgewogICAgICBuciA9IG5yICUgMTA7CiAgICB9CiAgICBuciA9IG5yICogMjsKICAgIG5yID0gbnIgJSAxMTsKICB9CiAgcmV0dXJuIGNvbnRyb2wgPT09ICgxMSAtIG5yID09PSAxMCA/IDAgOiAxMSAtIG5yKTsKfTsKdmFyIGNoZWNrQ3JvYXRpYW5CQkFOID0gZnVuY3Rpb24oYmJhbikgewogIHZhciBjb250cm9sQmFua0JyYW5jaCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDYpLCAxMCk7CiAgdmFyIGNvbnRyb2xBY2NvdW50ID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoMTYpLCAxMCk7CiAgdmFyIGJhbmtCcmFuY2ggPSBiYmFuLnN1YnN0cmluZygwLCA2KTsKICB2YXIgYWNjb3VudCA9IGJiYW4uc3Vic3RyaW5nKDcsIDE2KTsKICByZXR1cm4gY2hlY2tNb2QxMTEwKGJhbmtCcmFuY2gsIGNvbnRyb2xCYW5rQnJhbmNoKSAmJiBjaGVja01vZDExMTAoYWNjb3VudCwgY29udHJvbEFjY291bnQpOwp9Owp2YXIgY2hlY2tDemVjaEFuZFNsb3Zha0JCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgdmFyIHdlaWdodHNQcmVmaXggPSBbMTAsIDUsIDgsIDQsIDIsIDFdOwogIHZhciB3ZWlnaHRzU3VmZml4ID0gWzYsIDMsIDcsIDksIDEwLCA1LCA4LCA0LCAyLCAxXTsKICB2YXIgY29udHJvbFByZWZpeCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDkpLCAxMCk7CiAgdmFyIGNvbnRyb2xTdWZmaXggPSBwYXJzZUludChiYmFuLmNoYXJBdCgxOSksIDEwKTsKICB2YXIgcHJlZml4NCA9IGJiYW4uc3Vic3RyaW5nKDQsIDkpOwogIHZhciBzdWZmaXggPSBiYmFuLnN1YnN0cmluZygxMCwgMTkpOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHByZWZpeDQubGVuZ3RoOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KHByZWZpeDQuY2hhckF0KGluZGV4MiksIDEwKSAqIHdlaWdodHNQcmVmaXhbaW5kZXgyXTsKICB9CiAgdmFyIHJlbWFpbmRlciA9IHN1bSAlIDExOwogIGlmIChjb250cm9sUHJlZml4ICE9PSAocmVtYWluZGVyID09PSAwID8gMCA6IHJlbWFpbmRlciA9PT0gMSA/IDEgOiAxMSAtIHJlbWFpbmRlcikpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgc3VtID0gMDsKICBmb3IgKHZhciBpbmRleDIgPSAwOyBpbmRleDIgPCBzdWZmaXgubGVuZ3RoOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KHN1ZmZpeC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c1N1ZmZpeFtpbmRleDJdOwogIH0KICByZW1haW5kZXIgPSBzdW0gJSAxMTsKICByZXR1cm4gY29udHJvbFN1ZmZpeCA9PT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiByZW1haW5kZXIgPT09IDEgPyAxIDogMTEgLSByZW1haW5kZXIpOwp9Owp2YXIgY2hlY2tFc3RvbmlhbkJCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgdmFyIHdlaWdodHMgPSBbNywgMSwgMywgNywgMSwgMywgNywgMSwgMywgNywgMSwgMywgN107CiAgdmFyIGNvbnRyb2xEaWdpdCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDE1KSwgMTApOwogIHZhciB0b0NoZWNrID0gYmJhbi5zdWJzdHJpbmcoMiwgMTUpOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHRvQ2hlY2subGVuZ3RoOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KHRvQ2hlY2suY2hhckF0KGluZGV4MiksIDEwKSAqIHdlaWdodHNbaW5kZXgyXTsKICB9CiAgdmFyIHJlbWFpbmRlciA9IHN1bSAlIDEwOwogIHJldHVybiBjb250cm9sRGlnaXQgPT09IChyZW1haW5kZXIgPT09IDAgPyAwIDogMTAgLSByZW1haW5kZXIpOwp9Owp2YXIgY2hlY2tGcmVuY2hCQkFOID0gZnVuY3Rpb24oYmJhbikgewogIHZhciBzdHJpcHBlZCA9IGJiYW4ucmVwbGFjZSgvW1xzLl0rL2csICIiKTsKICB2YXIgbm9ybWFsaXplZCA9IEFycmF5LmZyb20oc3RyaXBwZWQpOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHN0cmlwcGVkLmxlbmd0aDsgaW5kZXgyKyspIHsKICAgIHZhciBjMTEgPSBub3JtYWxpemVkW2luZGV4Ml0uY2hhckNvZGVBdCgwKTsKICAgIGlmIChjMTEgPj0gNjUpIHsKICAgICAgc3dpdGNoIChjMTEpIHsKICAgICAgICBjYXNlIDY1OgogICAgICAgIGNhc2UgNzQ6CiAgICAgICAgICBub3JtYWxpemVkW2luZGV4Ml0gPSAiMSI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDY2OgogICAgICAgIGNhc2UgNzU6CiAgICAgICAgY2FzZSA4MzoKICAgICAgICAgIG5vcm1hbGl6ZWRbaW5kZXgyXSA9ICIyIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNjc6CiAgICAgICAgY2FzZSA3NjoKICAgICAgICBjYXNlIDg0OgogICAgICAgICAgbm9ybWFsaXplZFtpbmRleDJdID0gIjMiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA2ODoKICAgICAgICBjYXNlIDc3OgogICAgICAgIGNhc2UgODU6CiAgICAgICAgICBub3JtYWxpemVkW2luZGV4Ml0gPSAiNCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDY5OgogICAgICAgIGNhc2UgNzg6CiAgICAgICAgY2FzZSA4NjoKICAgICAgICAgIG5vcm1hbGl6ZWRbaW5kZXgyXSA9ICI1IjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNzA6CiAgICAgICAgY2FzZSA3OToKICAgICAgICBjYXNlIDg3OgogICAgICAgICAgbm9ybWFsaXplZFtpbmRleDJdID0gIjYiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA3MToKICAgICAgICBjYXNlIDgwOgogICAgICAgIGNhc2UgODg6CiAgICAgICAgICBub3JtYWxpemVkW2luZGV4Ml0gPSAiNyI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDcyOgogICAgICAgIGNhc2UgODE6CiAgICAgICAgY2FzZSA4OToKICAgICAgICAgIG5vcm1hbGl6ZWRbaW5kZXgyXSA9ICI4IjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNzM6CiAgICAgICAgY2FzZSA4MjoKICAgICAgICBjYXNlIDkwOgogICAgICAgICAgbm9ybWFsaXplZFtpbmRleDJdID0gIjkiOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9CiAgdmFyIHJlbWFpbmRlciA9IG1vZDk3MTAobm9ybWFsaXplZC5qb2luKCIiKSk7CiAgcmV0dXJuIHJlbWFpbmRlciA9PT0gMDsKfTsKdmFyIGNoZWNrSHVuZ2FyaWFuQkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICB2YXIgd2VpZ2h0cyA9IFs5LCA3LCAzLCAxLCA5LCA3LCAzLCAxLCA5LCA3LCAzLCAxLCA5LCA3LCAzXTsKICB2YXIgY29udHJvbERpZ2l0QmFua0JyYW5jaCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDcpLCAxMCk7CiAgdmFyIHRvQ2hlY2tCYW5rQnJhbmNoID0gYmJhbi5zdWJzdHJpbmcoMCwgNyk7CiAgdmFyIHN1bSA9IDA7CiAgZm9yICh2YXIgaW5kZXgyID0gMDsgaW5kZXgyIDwgdG9DaGVja0JhbmtCcmFuY2gubGVuZ3RoOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KHRvQ2hlY2tCYW5rQnJhbmNoLmNoYXJBdChpbmRleDIpLCAxMCkgKiB3ZWlnaHRzW2luZGV4Ml07CiAgfQogIHZhciByZW1haW5kZXIgPSBzdW0gJSAxMDsKICBpZiAoY29udHJvbERpZ2l0QmFua0JyYW5jaCAhPT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiAxMCAtIHJlbWFpbmRlcikpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgc3VtID0gMDsKICBpZiAoYmJhbi5lbmRzV2l0aCgiMDAwMDAwMDAiKSkgewogICAgdmFyIHRvQ2hlY2tBY2NvdW50ID0gYmJhbi5zdWJzdHJpbmcoOCwgMTUpOwogICAgdmFyIGNvbnRyb2xEaWdpdEFjY291bnQgPSBwYXJzZUludChiYmFuLmNoYXJBdCgxNSksIDEwKTsKICAgIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHRvQ2hlY2tBY2NvdW50Lmxlbmd0aDsgaW5kZXgyKyspIHsKICAgICAgc3VtICs9IHBhcnNlSW50KHRvQ2hlY2tBY2NvdW50LmNoYXJBdChpbmRleDIpLCAxMCkgKiB3ZWlnaHRzW2luZGV4Ml07CiAgICB9CiAgICB2YXIgcmVtYWluZGVyXzEgPSBzdW0gJSAxMDsKICAgIHJldHVybiBjb250cm9sRGlnaXRBY2NvdW50ID09PSAocmVtYWluZGVyXzEgPT09IDAgPyAwIDogMTAgLSByZW1haW5kZXJfMSk7CiAgfSBlbHNlIHsKICAgIHZhciB0b0NoZWNrQWNjb3VudCA9IGJiYW4uc3Vic3RyaW5nKDgsIDIzKTsKICAgIHZhciBjb250cm9sRGlnaXRBY2NvdW50ID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoMjMpLCAxMCk7CiAgICBmb3IgKHZhciBpbmRleDIgPSAwOyBpbmRleDIgPCB0b0NoZWNrQWNjb3VudC5sZW5ndGg7IGluZGV4MisrKSB7CiAgICAgIHN1bSArPSBwYXJzZUludCh0b0NoZWNrQWNjb3VudC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c1tpbmRleDJdOwogICAgfQogICAgdmFyIHJlbWFpbmRlcl8yID0gc3VtICUgMTA7CiAgICByZXR1cm4gY29udHJvbERpZ2l0QWNjb3VudCA9PT0gKHJlbWFpbmRlcl8yID09PSAwID8gMCA6IDEwIC0gcmVtYWluZGVyXzIpOwogIH0KfTsKdmFyIHNldENvdW50cnlCQkFOVmFsaWRhdGlvbiA9IGZ1bmN0aW9uKGNvdW50cnksIGZ1bmMpIHsKICBpZiAodHlwZW9mIGNvdW50cnlTcGVjc1tjb3VudHJ5XSA9PT0gInVuZGVmaW5lZCIpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgY291bnRyeVNwZWNzW2NvdW50cnldLmJiYW5fdmFsaWRhdGlvbl9mdW5jID0gZnVuYzsKICByZXR1cm4gdHJ1ZTsKfTsKdmFyIGNvdW50cnlTcGVjcyA9IHsKICBBRDogewogICAgY2hhcnM6IDI0LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17OH1bQS1aMC05XXsxMn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTciLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI0IgogIH0sCiAgQUU6IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezN9WzAtOV17MTZ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjctMjMiCiAgfSwKICBBRjoge30sCiAgQUc6IHt9LAogIEFJOiB7fSwKICBBTDogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17OH1bQS1aMC05XXsxNn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjMtNyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEyLTI4IgogIH0sCiAgQU06IHt9LAogIEFPOiB7CiAgICBjaGFyczogMjUsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMX0kIgogIH0sCiAgQVE6IHt9LAogIEFSOiB7fSwKICBBUzoge30sCiAgQVQ6IHsgY2hhcnM6IDIwLCBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNn0kIiwgSUJBTlJlZ2lzdHJ5OiB0cnVlLCBTRVBBOiB0cnVlLCBiYW5rX2lkZW50aWZpZXI6ICIwLTQiIH0sCiAgQVU6IHt9LAogIEFXOiB7fSwKICBBWDogewogICAgY2hhcnM6IDE4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIEFaOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVtBLVowLTldezIwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTI4IgogIH0sCiAgQkE6IHsKICAgIGNoYXJzOiAyMCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE2fSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrTW9kOTcxMEJCQU4sCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTUiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgQkI6IHt9LAogIEJEOiB7fSwKICBCRTogewogICAgY2hhcnM6IDE2LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTJ9JCIsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tCZWxnaWFuQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjAtMTYiCiAgfSwKICBCRjogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17Mn1bMC05XXsyMn0kIgogIH0sCiAgQkc6IHsKICAgIGNoYXJzOiAyMiwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17Nn1bQS1aMC05XXs4fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjQtNyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiCiAgfSwKICBCSDogewogICAgY2hhcnM6IDIyLAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bQS1aMC05XXsxNH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yMiIKICB9LAogIEJJOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIiwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjUtOSIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTQiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjE0LTI3IgogIH0sCiAgQko6IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVowLTldezJ9WzAtOV17MjJ9JCIKICB9LAogIEJMOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiCiAgfSwKICBCTToge30sCiAgQk46IHt9LAogIEJPOiB7fSwKICBCUToge30sCiAgQlI6IHsKICAgIGNoYXJzOiAyOSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfVtBLVpdezF9W0EtWjAtOV17MX0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjgtMTIiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC03IiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNy0yOSIKICB9LAogIEJTOiB7fSwKICBCVDoge30sCiAgQlY6IHt9LAogIEJXOiB7fSwKICBCWTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXs0fVtBLVowLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIgogIH0sCiAgQlo6IHt9LAogIENBOiB7fSwKICBDQzoge30sCiAgQ0Q6IHt9LAogIENGOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIgogIH0sCiAgQ0c6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiCiAgfSwKICBDSDogewogICAgY2hhcnM6IDIxLAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17NX1bQS1aMC05XXsxMn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTQiCiAgfSwKICBDSTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17MX1bMC05XXsyM30kIgogIH0sCiAgQ0s6IHt9LAogIENMOiB7fSwKICBDTTogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjN9JCIKICB9LAogIENOOiB7fSwKICBDTzoge30sCiAgQ1I6IHsKICAgIGNoYXJzOiAyMiwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE4fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTIyIgogIH0sCiAgQ1U6IHt9LAogIENWOiB7IGNoYXJzOiAyNSwgYmJhbl9yZWdleHA6ICJeWzAtOV17MjF9JCIgfSwKICBDVzoge30sCiAgQ1g6IHt9LAogIENZOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXs4fVtBLVowLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjMtNyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEyLTI4IgogIH0sCiAgQ1o6IHsKICAgIGNoYXJzOiAyNCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrQ3plY2hBbmRTbG92YWtCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIKICB9LAogIERFOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxOH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTciLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEzLTIyIgogIH0sCiAgREo6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNS05IiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtNCIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTQtMjciCiAgfSwKICBESzogewogICAgY2hhcnM6IDE4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE4IgogIH0sCiAgRE06IHt9LAogIERPOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVswLTldezIwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI4IgogIH0sCiAgRFo6IHsKICAgIGNoYXJzOiAyNiwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIyfSQiCiAgfSwKICBFQzoge30sCiAgRUU6IHsKICAgIGNoYXJzOiAyMCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE2fSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrRXN0b25pYW5CQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMSIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yMCIKICB9LAogIEVHOiB7CiAgICBjaGFyczogMjksCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyNX0iLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNC03IiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTctMjkiCiAgfSwKICBFSDoge30sCiAgRVI6IHt9LAogIEVTOiB7CiAgICBjaGFyczogMjQsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tTcGFpbkJCQU4sCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTciLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNC0yNCIKICB9LAogIEVUOiB7fSwKICBGSTogewogICAgY2hhcnM6IDE4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTAiCiAgfSwKICBGSjoge30sCiAgRks6IHsKICAgIGNoYXJzOiAxOCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezJ9WzAtOV17MTJ9JCIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjYtMTgiCiAgfSwKICBGTToge30sCiAgRk86IHsKICAgIGNoYXJzOiAxOCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE0fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE4IgogIH0sCiAgRlI6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tGcmVuY2hCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtNCIsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI1LTkiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjE0LTI0IgogIH0sCiAgR0E6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiCiAgfSwKICBHQjogewogICAgY2hhcnM6IDIyLAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXsxNH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTkiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIgogIH0sCiAgR0Q6IHt9LAogIEdFOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXsyfVswLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0xIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI2LTIyIgogIH0sCiAgR0Y6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIEdHOiB7fSwKICBHSDoge30sCiAgR0k6IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MTV9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTIzIgogIH0sCiAgR0w6IHsKICAgIGNoYXJzOiAxOCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE0fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE4IgogIH0sCiAgR006IHt9LAogIEdOOiB7fSwKICBHUDogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZQogIH0sCiAgR1E6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiCiAgfSwKICBHUjogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17N31bQS1aMC05XXsxNn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTYiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI3LTI3IgogIH0sCiAgR1M6IHt9LAogIEdUOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXsyNH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yOCIKICB9LAogIEdVOiB7fSwKICBHVzogewogICAgY2hhcnM6IDI1LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsxOX0kIgogIH0sCiAgR1k6IHt9LAogIEhLOiB7fSwKICBITToge30sCiAgSE46IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17MjB9JCIKICB9LAogIEhSOiB7CiAgICBjaGFyczogMjEsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxN30kIiwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja0Nyb2F0aWFuQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTYiCiAgfSwKICBIVDoge30sCiAgSFU6IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezI0fSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrSHVuZ2FyaWFuQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTYiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgSUQ6IHt9LAogIElFOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXs0fVswLTldezE0fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjQtOSIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiCiAgfSwKICBJTDogewogICAgY2hhcnM6IDIzLAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTl9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTUiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgSU06IHt9LAogIElOOiB7fSwKICBJTzoge30sCiAgSVE6IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17MTV9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTYiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxMS0yMyIKICB9LAogIElSOiB7CiAgICBjaGFyczogMjYsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMn0kIgogIH0sCiAgSVM6IHsKICAgIGNoYXJzOiAyNiwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjItMyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiCiAgfSwKICBJVDogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17MX1bMC05XXsxMH1bQS1aMC05XXsxMn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI2LTEwIiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjEtNSIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiNC0yNyIKICB9LAogIEpFOiB7fSwKICBKTToge30sCiAgSk86IHsKICAgIGNoYXJzOiAzMCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17NH1bQS1aMC05XXsxOH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjQtNyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICI0LTciCiAgfSwKICBKUDoge30sCiAgS0U6IHt9LAogIEtHOiB7fSwKICBLSDoge30sCiAgS0k6IHt9LAogIEtNOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIgogIH0sCiAgS046IHt9LAogIEtQOiB7fSwKICBLUjoge30sCiAgS1c6IHsKICAgIGNoYXJzOiAzMCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MjJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjIwLTMwIgogIH0sCiAgS1k6IHt9LAogIEtaOiB7CiAgICBjaGFyczogMjAsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXszfVtBLVowLTldezEzfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTIwIgogIH0sCiAgTEE6IHt9LAogIExCOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXs0fVtBLVowLTldezIwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNC0yOCIKICB9LAogIExDOiB7CiAgICBjaGFyczogMzIsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVtBLVowLTldezI0fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTMyIgogIH0sCiAgTEk6IHsKICAgIGNoYXJzOiAyMSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezV9W0EtWjAtOV17MTJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC00IgogIH0sCiAgTEs6IHt9LAogIExSOiB7fSwKICBMUzoge30sCiAgTFQ6IHsgY2hhcnM6IDIwLCBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNn0kIiwgSUJBTlJlZ2lzdHJ5OiB0cnVlLCBTRVBBOiB0cnVlLCBiYW5rX2lkZW50aWZpZXI6ICIwLTQiIH0sCiAgTFU6IHsKICAgIGNoYXJzOiAyMCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezN9W0EtWjAtOV17MTN9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgTFY6IHsKICAgIGNoYXJzOiAyMSwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MTN9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTIxIgogIH0sCiAgTFk6IHsKICAgIGNoYXJzOiAyNSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIxfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiMy01IiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMiIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTAtMjUiCiAgfSwKICBNQTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjR9JCIKICB9LAogIE1DOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrRnJlbmNoQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI1LTkiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC00IgogIH0sCiAgTUQ6IHsKICAgIGNoYXJzOiAyNCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVowLTldezJ9W0EtWjAtOV17MTh9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjYtMjQiCiAgfSwKICBNRTogewogICAgY2hhcnM6IDIyLAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTh9JCIsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tNb2Q5NzEwQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMiIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiNC0yMiIKICB9LAogIE1GOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBNRzogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjN9JCIKICB9LAogIE1IOiB7fSwKICBNSzogewogICAgY2hhcnM6IDE5LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17M31bQS1aMC05XXsxMH1bMC05XXsyfSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrTW9kOTcxMEJCQU4sCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiCiAgfSwKICBNTDogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17Mn1bMC05XXsyMn0kIgogIH0sCiAgTU06IHt9LAogIE1OOiB7CiAgICBjaGFyczogMjAsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yMCIKICB9LAogIE1POiB7fSwKICBNUDoge30sCiAgTVE6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIE1SOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjUtOSIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTQiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjQtMjciCiAgfSwKICBNUzoge30sCiAgTVQ6IHsKICAgIGNoYXJzOiAzMSwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17NX1bQS1aMC05XXsxOH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTgiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNS0zMSIKICB9LAogIE1VOiB7CiAgICBjaGFyczogMzAsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVswLTldezE5fVtBLVpdezN9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI2LTciLAogICAgYmFua19pZGVudGlmaWVyOiAiMC01IiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTMwIgogIH0sCiAgTVY6IHt9LAogIE1XOiB7fSwKICBNWDoge30sCiAgTVk6IHt9LAogIE1aOiB7CiAgICBjaGFyczogMjUsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMX0kIgogIH0sCiAgTkE6IHt9LAogIE5DOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBORTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsyMn0kIgogIH0sCiAgTkY6IHt9LAogIE5HOiB7fSwKICBOSTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXsyMH0kIiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yOCIKICB9LAogIE5MOiB7CiAgICBjaGFyczogMTgsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVswLTldezEwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0xOCIKICB9LAogIE5POiB7CiAgICBjaGFyczogMTUsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMX0kIiwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja05vcndheUJCQU4sCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE1IgogIH0sCiAgTlA6IHt9LAogIE5SOiB7fSwKICBOVToge30sCiAgTlo6IHt9LAogIE9NOiB7CiAgICBjaGFyczogMjMsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXszfVtBLVowLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogZmFsc2UsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiCiAgfSwKICBQQToge30sCiAgUEU6IHt9LAogIFBGOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBQRzoge30sCiAgUEg6IHt9LAogIFBLOiB7CiAgICBjaGFyczogMjQsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXs0fVswLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIgogIH0sCiAgUEw6IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja1BvbGFuZEJCQU4sCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyNH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIwLTciLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjItMjgiCiAgfSwKICBQTTogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZQogIH0sCiAgUE46IHt9LAogIFBSOiB7fSwKICBQUzogewogICAgY2hhcnM6IDI5LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17NH1bMC05XXsyMX0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTctMjkiCiAgfSwKICBQVDogewogICAgY2hhcnM6IDI1LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjF9JCIsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tNb2Q5NzEwQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiCiAgfSwKICBQVzoge30sCiAgUFk6IHt9LAogIFFBOiB7CiAgICBjaGFyczogMjksCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVtBLVowLTldezIxfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI5IgogIH0sCiAgUkU6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIFJPOiB7CiAgICBjaGFyczogMjQsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVtBLVowLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMC0yNCIKICB9LAogIFJTOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxOH0kIiwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja01vZDk3MTBCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgUlU6IHsKICAgIGNoYXJzOiAzMywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE0fVtBLVowLTldezE1fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiOS0xMyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTgiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEzLTMzIgogIH0sCiAgUlc6IHt9LAogIFNBOiB7CiAgICBjaGFyczogMjQsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyfVtBLVowLTldezE4fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0xIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxMi0yNCIKICB9LAogIFNCOiB7fSwKICBTQzogewogICAgY2hhcnM6IDMxLAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXsyMH1bQS1aXXszfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNi03IiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtNSIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTItMjgiCiAgfSwKICBTRDogewogICAgY2hhcnM6IDE4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjYtMTgiCiAgfSwKICBTRTogeyBjaGFyczogMjQsIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLCBJQkFOUmVnaXN0cnk6IHRydWUsIFNFUEE6IHRydWUsIGJhbmtfaWRlbnRpZmllcjogIjAtMiIgfSwKICBTRzoge30sCiAgU0g6IHt9LAogIFNJOiB7CiAgICBjaGFyczogMTksCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNX0kIiwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja01vZDk3MTBCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjItNCIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjktMTYiCiAgfSwKICBTSjoge30sCiAgU0s6IHsKICAgIGNoYXJzOiAyNCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrQ3plY2hBbmRTbG92YWtCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZQogIH0sCiAgU0w6IHt9LAogIFNNOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXsxfVswLTldezEwfVtBLVowLTldezEyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjYtMTAiCiAgfSwKICBTTjogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsyMn0kIgogIH0sCiAgU086IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE5fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNC02IiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxMS0yMyIKICB9LAogIFNSOiB7fSwKICBTUzoge30sCiAgU1Q6IHsKICAgIGNoYXJzOiAyNSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIxfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNC03IgogIH0sCiAgU1Y6IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17MjB9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yOCIKICB9LAogIFNYOiB7fSwKICBTWToge30sCiAgU1o6IHt9LAogIFRDOiB7fSwKICBURDogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjN9JCIKICB9LAogIFRGOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBURzogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsyMn0kIgogIH0sCiAgVEg6IHt9LAogIFRKOiB7fSwKICBUSzoge30sCiAgVEw6IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE5fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjQtMjMiCiAgfSwKICBUTToge30sCiAgVE46IHsKICAgIGNoYXJzOiAyNCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiMi00IiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTI0IgogIH0sCiAgVE86IHt9LAogIFRSOiB7CiAgICBjaGFyczogMjYsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXs1fVtBLVowLTldezE3fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBUVDoge30sCiAgVFY6IHt9LAogIFRXOiB7fSwKICBUWjoge30sCiAgVUE6IHsKICAgIGNoYXJzOiAyOSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezZ9W0EtWjAtOV17MTl9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTUtMjkiCiAgfSwKICBVRzoge30sCiAgVU06IHt9LAogIFVTOiB7fSwKICBVWToge30sCiAgVVo6IHt9LAogIFZBOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxOH0iLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI3LTIyIgogIH0sCiAgVkM6IHt9LAogIFZFOiB7fSwKICBWRzogewogICAgY2hhcnM6IDI0LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17NH1bMC05XXsxNn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI0IgogIH0sCiAgVkk6IHt9LAogIFZOOiB7fSwKICBWVToge30sCiAgV0Y6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIFdTOiB7fSwKICBYSzogewogICAgY2hhcnM6IDIwLAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTZ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIyLTMiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjQtMjAiCiAgfSwKICBZRToge30sCiAgWVQ6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIFpBOiB7fSwKICBaTToge30sCiAgWlc6IHt9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1pYmFuL2RlZXMtaW5wdXQtaWJhbi5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzE5ID0gKCkgPT4gYjJgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnBheW1lbnQtZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgSUJBTiBJbnB1dCJ9IC5zdWJ0aXRsZT0keyJJbnRlcm5hdGlvbmFsIEJhbmsgQWNjb3VudCBOdW1iZXIgd2l0aCBhdXRvbWF0aWMgZm9ybWF0dGluZyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWliYW4gCiAgICAgICAgICAubGFiZWw9JHsiQmFuayBBY2NvdW50IElCQU4ifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJFbnRlciB5b3VyIEludGVybmF0aW9uYWwgQmFuayBBY2NvdW50IE51bWJlciJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWliYW4gCiAgICAgICAgICAubGFiZWw9JHsiVmVyaWZpZWQgSUJBTiJ9IAogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoaXMgSUJBTiBoYXMgYmVlbiB2ZXJpZmllZCJ9CiAgICAgICAgICAudmFsdWU9JHsiREU4OTM3MDQwMDQ0MDUzMjAxMzAwMCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUGF5bWVudCBJbmZvcm1hdGlvbiJ9IC5zdWJ0aXRsZT0keyJJQkFOIGlucHV0IHdpdGggaG9yaXpvbnRhbCBsYXlvdXQgZm9yIHBheW1lbnQgZm9ybXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJwYXltZW50LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJBY2NvdW50IEhvbGRlciJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLnZhbHVlPSR7IkpvaG4gRG9lIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtaWJhbiAKICAgICAgICAgICAgLmxhYmVsPSR7IklCQU4ifSAKICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC52YWx1ZT0keyJHQjgyV0VTVDEyMzQ1Njk4NzY1NDMyIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtaWJhbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlZhbGlkYXRpb24gJiBTdGF0ZXMifSAuc3VidGl0bGU9JHsiUmVxdWlyZWQgZmllbGRzIGFuZCBkaXNhYmxlZCBzdGF0ZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1pYmFuIAogICAgICAgICAgLmxhYmVsPSR7IlBheW1lbnQgQWNjb3VudCJ9IAogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlJlcXVpcmVkIGZvciBwcm9jZXNzaW5nIHBheW1lbnRzIn0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWliYW4gCiAgICAgICAgICAubGFiZWw9JHsiTG9ja2VkIElCQU4ifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGlzIElCQU4gY2Fubm90IGJlIGNoYW5nZWQifQogICAgICAgICAgLnZhbHVlPSR7IkZSMTQyMDA0MTAxMDA1MDUwMDAxM00wMjYwNiJ9CiAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgID48L2RlZXMtaW5wdXQtaWJhbj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhbmsgVHJhbnNmZXIgRm9ybSJ9IC5zdWJ0aXRsZT0keyJDb21wbGV0ZSBmb3JtIGV4YW1wbGUgd2l0aCBJQkFOIHZhbGlkYXRpb24ifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiUmVjaXBpZW50IE5hbWUifSAucmVxdWlyZWQ9JHt0cnVlfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWliYW4gLmxhYmVsPSR7IlJlY2lwaWVudCBJQkFOIn0gLnJlcXVpcmVkPSR7dHJ1ZX0+PC9kZWVzLWlucHV0LWliYW4+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJUcmFuc2ZlciBSZWZlcmVuY2UifSAuZGVzY3JpcHRpb249JHsiT3B0aW9uYWwgcmVmZXJlbmNlIGZvciB0aGUgdHJhbnNmZXIifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkFtb3VudCJ9IC5pbnB1dFR5cGU9JHsibnVtYmVyIn0gLnJlcXVpcmVkPSR7dHJ1ZX0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWliYW4vZGVlcy1pbnB1dC1pYmFuLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTI3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMyOCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0SWJhbiA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtaWJhbiIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfZW50ZXJlZFN0cmluZ19kZWNvcmF0b3JzOwogIGxldCBfZW50ZXJlZFN0cmluZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VudGVyZWRTdHJpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VudGVyZWRJYmFuSXNWYWxpZF9kZWNvcmF0b3JzOwogIGxldCBfZW50ZXJlZEliYW5Jc1ZhbGlkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW50ZXJlZEliYW5Jc1ZhbGlkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXRJYmFuMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2VudGVyZWRTdHJpbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2VudGVyZWRJYmFuSXNWYWxpZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlMjcodGhpcywgbnVsbCwgX2VudGVyZWRTdHJpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZW50ZXJlZFN0cmluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZW50ZXJlZFN0cmluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbnRlcmVkU3RyaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5lbnRlcmVkU3RyaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VudGVyZWRTdHJpbmdfaW5pdGlhbGl6ZXJzLCBfZW50ZXJlZFN0cmluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI3KHRoaXMsIG51bGwsIF9lbnRlcmVkSWJhbklzVmFsaWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZW50ZXJlZEliYW5Jc1ZhbGlkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlbnRlcmVkSWJhbklzVmFsaWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZW50ZXJlZEliYW5Jc1ZhbGlkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5lbnRlcmVkSWJhbklzVmFsaWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZW50ZXJlZEliYW5Jc1ZhbGlkX2luaXRpYWxpemVycywgX2VudGVyZWRJYmFuSXNWYWxpZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI3KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRJYmFuMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMxOTsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI2VudGVyZWRTdHJpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjgodGhpcywgX2VudGVyZWRTdHJpbmdfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IGVudGVyZWRTdHJpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlbnRlcmVkU3RyaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZW50ZXJlZFN0cmluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZW50ZXJlZFN0cmluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VudGVyZWRJYmFuSXNWYWxpZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjgodGhpcywgX2VudGVyZWRTdHJpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI4KHRoaXMsIF9lbnRlcmVkSWJhbklzVmFsaWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGVudGVyZWRJYmFuSXNWYWxpZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2VudGVyZWRJYmFuSXNWYWxpZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGVudGVyZWRJYmFuSXNWYWxpZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZW50ZXJlZEliYW5Jc1ZhbGlkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI4KHRoaXMsIF9lbnRlcmVkSWJhbklzVmFsaWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI4KHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgLyogSUJBTiBpbnB1dCBzcGVjaWZpYyBzdHlsZXMgY2FuIGdvIGhlcmUgKi8KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbCB8fCAiSUJBTiJ9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259PjwvZGVlcy1sYWJlbD4KICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAudmFsdWU9JHt0aGlzLnZhbHVlfQogICAgICAgICAgLmRpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWR9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiREU4OSAzNzA0IDAwNDQgMDUzMiAwMTMwIDAwIn0KICAgICAgICAgIEBpbnB1dD0keyhldmVudEFyZykgPT4gewogICAgICAgIHRoaXMudmFsaWRhdGVJYmFuKGV2ZW50QXJnKTsKICAgICAgfX0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGNvbnN0IGRlZXNJbnB1dFRleHQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7CiAgICAgIGlmIChkZWVzSW5wdXRUZXh0ICYmIGRlZXNJbnB1dFRleHQuY2hhbmdlU3ViamVjdCkgewogICAgICAgIGRlZXNJbnB1dFRleHQuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gewogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHZhbGlkYXRlSWJhbihldmVudEFyZykgewogICAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBldmVudEFyZy50YXJnZXQ7CiAgICAgIGxldCBlbnRlcmVkU3RyaW5nID0gaW5wdXRFbGVtZW50Py52YWx1ZTsKICAgICAgZW50ZXJlZFN0cmluZyA9IGVudGVyZWRTdHJpbmcgfHwgIiI7CiAgICAgIGlmICh0aGlzLmVudGVyZWRTdHJpbmcgIT09IGVudGVyZWRTdHJpbmcpIHsKICAgICAgICB0aGlzLmVudGVyZWRTdHJpbmcgPSBmcmllbmRseUZvcm1hdElCQU4oZW50ZXJlZFN0cmluZykgfHwgIiI7CiAgICAgICAgaWYgKGlucHV0RWxlbWVudCkgewogICAgICAgICAgaW5wdXRFbGVtZW50LnZhbHVlID0gdGhpcy5lbnRlcmVkU3RyaW5nOwogICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZW50ZXJlZFN0cmluZzsKICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLmVudGVyZWRJYmFuSXNWYWxpZCA9IGlzVmFsaWRJQkFOKHRoaXMuZW50ZXJlZFN0cmluZy5yZXBsYWNlKC8gL2csICIiKSk7CiAgICAgIGNvbnN0IGRlZXNJbnB1dFRleHQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7CiAgICAgIGRlZXNJbnB1dFRleHQudmFsaWRhdGlvblRleHQgPSBgSUJBTiBpcyB2YWxpZDogJHt0aGlzLmVudGVyZWRJYmFuSXNWYWxpZH1gOwogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgIHRoaXMuZW50ZXJlZFN0cmluZyA9IGZyaWVuZGx5Rm9ybWF0SUJBTih2YWx1ZTIpIHx8ICIiOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjgodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjgoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dEliYW4yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlL2RlZXMtaW5wdXQtbXVsdGl0b2dnbGUuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMyMCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAzMnB4OwogICAgICAgICAgcGFkZGluZzogNDhweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjhmOWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnNlY3Rpb24gewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzE4MTgxYiIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2VjdGlvbi1kZXNjcmlwdGlvbiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5zZXR0aW5ncy1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgICAgLnNldHRpbmdzLWdyaWQgewogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPk11bHRpLU9wdGlvbiBUb2dnbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5TZWxlY3QgZnJvbSBtdWx0aXBsZSBvcHRpb25zIHdpdGggYSBzbW9vdGggc2xpZGluZyBpbmRpY2F0b3IgYW5pbWF0aW9uLjwvZGl2PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAubGFiZWw9JHsiRGlzcGxheSBNb2RlIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJDaG9vc2UgaG93IGNvbnRlbnQgaXMgZGlzcGxheWVkIn0KICAgICAgICAgIC5vcHRpb25zPSR7WyJMaXN0IFZpZXciLCAiR3JpZCBWaWV3IiwgIkNvbXBhY3QiXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJHcmlkIFZpZXcifQogICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgCiAgICAgICAgPGJyPjxicj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgLmxhYmVsPSR7IlQtU2hpcnQgU2l6ZSJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2VsZWN0IHlvdXIgcHJlZmVycmVkIHNpemUifQogICAgICAgICAgLm9wdGlvbnM9JHtbIlhTIiwgIlMiLCAiTSIsICJMIiwgIlhMIiwgIlhYTCJdfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik0ifQogICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Qm9vbGVhbiBUb2dnbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5TaW1wbGUgb24vb2ZmIHN3aXRjaGVzIHdpdGggY3VzdG9taXphYmxlIGxhYmVscyBmb3IgY2xlYXJlciBjb250ZXh0LjwvZGl2PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAubGFiZWw9JHsiTm90aWZpY2F0aW9ucyJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRW5hYmxlIG9yIGRpc2FibGUgcHVzaCBub3RpZmljYXRpb25zIn0KICAgICAgICAgIC50eXBlPSR7ImJvb2xlYW4ifQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7InRydWUifQogICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgCiAgICAgICAgPGJyPjxicj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgLmxhYmVsPSR7IlRoZW1lIE1vZGUifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlN3aXRjaCBiZXR3ZWVuIGxpZ2h0IGFuZCBkYXJrIHRoZW1lIn0KICAgICAgICAgIC50eXBlPSR7ImJvb2xlYW4ifQogICAgICAgICAgLmJvb2xlYW5UcnVlTmFtZT0keyJEYXJrIn0KICAgICAgICAgIC5ib29sZWFuRmFsc2VOYW1lPSR7IkxpZ2h0In0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJEYXJrIn0KICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNldHRpbmdzIEdyaWQ8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5Db25maWd1cmF0aW9uIG9wdGlvbnMgYXJyYW5nZWQgaW4gYSByZXNwb25zaXZlIGdyaWQgbGF5b3V0LjwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLWdyaWQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkF1dG8tU2F2ZSJ9CiAgICAgICAgICAgIC50eXBlPSR7ImJvb2xlYW4ifQogICAgICAgICAgICAuYm9vbGVhblRydWVOYW1lPSR7IkVuYWJsZWQifQogICAgICAgICAgICAuYm9vbGVhbkZhbHNlTmFtZT0keyJEaXNhYmxlZCJ9CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJFbmFibGVkIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJMYW5ndWFnZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJFbmdsaXNoIiwgIkdlcm1hbiIsICJGcmVuY2giLCAiU3BhbmlzaCJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiRW5nbGlzaCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiUXVhbGl0eSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJMb3ciLCAiTWVkaXVtIiwgIkhpZ2giLCAiVWx0cmEiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkhpZ2gifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IlByaXZhY3kifQogICAgICAgICAgICAudHlwZT0keyJib29sZWFuIn0KICAgICAgICAgICAgLmJvb2xlYW5UcnVlTmFtZT0keyJQcml2YXRlIn0KICAgICAgICAgICAgLmJvb2xlYW5GYWxzZU5hbWU9JHsiUHVibGljIn0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IlByaXZhdGUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TdGF0ZXMgJiBGb3JtIEludGVncmF0aW9uPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+RXhhbXBsZXMgb2YgZGlzYWJsZWQgc3RhdGVzIGFuZCBpbnRlZ3JhdGlvbiB3aXRoaW4gZm9ybXMuPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgIC5sYWJlbD0keyJBY2NvdW50IFR5cGUifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoaXMgc2V0dGluZyBpcyBsb2NrZWQifQogICAgICAgICAgLm9wdGlvbnM9JHtbIkZyZWUiLCAiUHJvIiwgIkVudGVycHJpc2UiXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJFbnRlcnByaXNlIn0KICAgICAgICAgIC5kaXNhYmxlZD0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAKICAgICAgICA8YnI+PGJyPgogICAgICAgIAogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJQcm9qZWN0IE5hbWUifSAucmVxdWlyZWQ9JHt0cnVlfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJWaXNpYmlsaXR5In0KICAgICAgICAgICAgLnR5cGU9JHsiYm9vbGVhbiJ9CiAgICAgICAgICAgIC5ib29sZWFuVHJ1ZU5hbWU9JHsiUHVibGljIn0KICAgICAgICAgICAgLmJvb2xlYW5GYWxzZU5hbWU9JHsiUHJpdmF0ZSJ9CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJQcml2YXRlIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiTGljZW5zZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJNSVQiLCAiQXBhY2hlIDIuMCIsICJHUEwgdjMiLCAiUHJvcHJpZXRhcnkiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik1JVCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlL2RlZXMtaW5wdXQtbXVsdGl0b2dnbGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczI5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRNdWx0aXRvZ2dsZSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtbXVsdGl0b2dnbGUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX3R5cGVfZGVjb3JhdG9yczsKICBsZXQgX3R5cGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib29sZWFuVHJ1ZU5hbWVfZGVjb3JhdG9yczsKICBsZXQgX2Jvb2xlYW5UcnVlTmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Jvb2xlYW5UcnVlTmFtZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYm9vbGVhbkZhbHNlTmFtZV9kZWNvcmF0b3JzOwogIGxldCBfYm9vbGVhbkZhbHNlTmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Jvb2xlYW5GYWxzZU5hbWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX29wdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYm9vbFZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF9ib29sVmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib29sVmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0TXVsdGl0b2dnbGUyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdHlwZV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfYm9vbGVhblRydWVOYW1lX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9ib29sZWFuRmFsc2VOYW1lX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9vcHRpb25zX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX3NlbGVjdGVkT3B0aW9uX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9ib29sVmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGUyOCh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjgodGhpcywgbnVsbCwgX2Jvb2xlYW5UcnVlTmFtZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJib29sZWFuVHJ1ZU5hbWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJvb2xlYW5UcnVlTmFtZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ib29sZWFuVHJ1ZU5hbWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJvb2xlYW5UcnVlTmFtZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ib29sZWFuVHJ1ZU5hbWVfaW5pdGlhbGl6ZXJzLCBfYm9vbGVhblRydWVOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjgodGhpcywgbnVsbCwgX2Jvb2xlYW5GYWxzZU5hbWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYm9vbGVhbkZhbHNlTmFtZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYm9vbGVhbkZhbHNlTmFtZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ib29sZWFuRmFsc2VOYW1lLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ib29sZWFuRmFsc2VOYW1lID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Jvb2xlYW5GYWxzZU5hbWVfaW5pdGlhbGl6ZXJzLCBfYm9vbGVhbkZhbHNlTmFtZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI4KHRoaXMsIG51bGwsIF9vcHRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3B0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3B0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcHRpb25zX2luaXRpYWxpemVycywgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyOCh0aGlzLCBudWxsLCBfc2VsZWN0ZWRPcHRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRPcHRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkT3B0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkT3B0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZE9wdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZE9wdGlvbl9pbml0aWFsaXplcnMsIF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI4KHRoaXMsIG51bGwsIF9ib29sVmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYm9vbFZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJib29sVmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYm9vbFZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ib29sVmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYm9vbFZhbHVlX2luaXRpYWxpemVycywgX2Jvb2xWYWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI4KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0TXVsdGl0b2dnbGUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMyMDsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjkodGhpcywgX3R5cGVfaW5pdGlhbGl6ZXJzLCAibXVsdGkiKTsKICAgIGdldCB0eXBlKCkgewogICAgICByZXR1cm4gdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHR5cGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNib29sZWFuVHJ1ZU5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI5KHRoaXMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhblRydWVOYW1lX2luaXRpYWxpemVycywgInRydWUiKSk7CiAgICBnZXQgYm9vbGVhblRydWVOYW1lKCkgewogICAgICByZXR1cm4gdGhpcy4jYm9vbGVhblRydWVOYW1lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYm9vbGVhblRydWVOYW1lKHZhbHVlMikgewogICAgICB0aGlzLiNib29sZWFuVHJ1ZU5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNib29sZWFuRmFsc2VOYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhblRydWVOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhbkZhbHNlTmFtZV9pbml0aWFsaXplcnMsICJmYWxzZSIpKTsKICAgIGdldCBib29sZWFuRmFsc2VOYW1lKCkgewogICAgICByZXR1cm4gdGhpcy4jYm9vbGVhbkZhbHNlTmFtZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGJvb2xlYW5GYWxzZU5hbWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2Jvb2xlYW5GYWxzZU5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhbkZhbHNlTmFtZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjkodGhpcywgX29wdGlvbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IG9wdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgb3B0aW9ucyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkT3B0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjkodGhpcywgX3NlbGVjdGVkT3B0aW9uX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBzZWxlY3RlZE9wdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkT3B0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VsZWN0ZWRPcHRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGVkT3B0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYm9vbFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfc2VsZWN0ZWRPcHRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI5KHRoaXMsIF9ib29sVmFsdWVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGJvb2xWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Jvb2xWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGJvb2xWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYm9vbFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBBZGQgdmFsdWUgcHJvcGVydHkgZm9yIGZvcm0gY29tcGF0aWJpbGl0eQogICAgZ2V0IHZhbHVlKCkgewogICAgICBpZiAodGhpcy50eXBlID09PSAiYm9vbGVhbiIpIHsKICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbiA9PT0gdGhpcy5ib29sZWFuVHJ1ZU5hbWU7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICB9CiAgICBzZXQgdmFsdWUodmFsKSB7CiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICJib29sZWFuIiAmJiB0eXBlb2YgdmFsID09PSAiYm9vbGVhbiIpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdmFsID8gdGhpcy5ib29sZWFuVHJ1ZU5hbWUgOiB0aGlzLmJvb2xlYW5GYWxzZU5hbWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHZhbDsKICAgICAgfQogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgaWYgKHRoaXMuaGFzVXBkYXRlZCkgewogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICB0aGlzLnNldEluZGljYXRvcigpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb25zIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMDUpOwogICAgICB9CgogICAgICAub3B0aW9uIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFzZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiIzcxNzE3YSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICB6LWluZGV4OiAyOwogICAgICB9CgogICAgICAub3B0aW9uOmhvdmVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxODE4MWIiLCAiI2U0ZTRlNyIpfTsKICAgICAgfQoKICAgICAgLm9wdGlvbi5zZWxlY3RlZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgIH0KCiAgICAgIC5pbmRpY2F0b3IgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gOHB4KTsKICAgICAgICB0b3A6IDRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjE1KSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xNSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICB6LWluZGV4OiAxOwogICAgICB9CiAgICAgIAogICAgICAuaW5kaWNhdG9yLm5vLXRyYW5zaXRpb24gewogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5zZWxlY3Rpb25zIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLm9wdGlvbiB7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLmluZGljYXRvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTEzLCAxMTMsIDEyMiwgMC4xNSkiLCAicmdiYSgxMTMsIDExMywgMTIyLCAwLjE1KSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWxlY3Rpb25zIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImluZGljYXRvciI+PC9kaXY+CiAgICAgICAgICAke3RoaXMub3B0aW9ucy5tYXAoKG9wdGlvbjIpID0+IGIyYDxkaXYgY2xhc3M9Im9wdGlvbiAke29wdGlvbjIgPT09IHRoaXMuc2VsZWN0ZWRPcHRpb24gPyAic2VsZWN0ZWQiIDogIiJ9IiBAY2xpY2s9JHsoKSA9PiB0aGlzLmhhbmRsZVNlbGVjdGlvbihvcHRpb24yKX0+CiAgICAgICAgICAgICAgICAke29wdGlvbjJ9CiAgICAgICAgICAgICAgPC9kaXY+IGApfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAodGhpcy50eXBlID09PSAiYm9vbGVhbiIgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMub3B0aW9ucyA9IFt0aGlzLmJvb2xlYW5UcnVlTmFtZSB8fCAidHJ1ZSIsIHRoaXMuYm9vbGVhbkZhbHNlTmFtZSB8fCAiZmFsc2UiXTsKICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRPcHRpb24pIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLmJvb2xlYW5GYWxzZU5hbWUgfHwgImZhbHNlIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkT3B0aW9uICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHRoaXMub3B0aW9uc1swXTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKHRoaXMudHlwZSA9PT0gImJvb2xlYW4iKSB7CiAgICAgICAgdGhpcy5vcHRpb25zID0gW3RoaXMuYm9vbGVhblRydWVOYW1lIHx8ICJ0cnVlIiwgdGhpcy5ib29sZWFuRmFsc2VOYW1lIHx8ICJmYWxzZSJdOwogICAgICB9CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGlmIChkb2N1bWVudC5mb250cykgewogICAgICAgIGF3YWl0IGRvY3VtZW50LmZvbnRzLnJlYWR5OwogICAgICB9CiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgIHRoaXMuc2V0SW5kaWNhdG9yKCk7CiAgICB9CiAgICBhc3luYyBoYW5kbGVTZWxlY3Rpb24ob3B0aW9uQXJnKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IG9wdGlvbkFyZzsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICB0aGlzLnNldEluZGljYXRvcigpOwogICAgfQogICAgaW5kaWNhdG9ySW5pdGlhbGl6ZWQgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgZmFsc2UpOwogICAgYXN5bmMgc2V0SW5kaWNhdG9yKCkgewogICAgICBjb25zdCBpbmRpY2F0b3IgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmluZGljYXRvciIpOwogICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5vcHRpb25zLmluZGV4T2YodGhpcy5zZWxlY3RlZE9wdGlvbik7CiAgICAgIGlmIChzZWxlY3RlZEluZGV4ID09PSAtMSB8fCAhaW5kaWNhdG9yKSB7CiAgICAgICAgaWYgKGluZGljYXRvcikgewogICAgICAgICAgaW5kaWNhdG9yLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBvcHRpb24yID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYC5vcHRpb246bnRoLWNoaWxkKCR7c2VsZWN0ZWRJbmRleCArIDJ9KWApOwogICAgICBpZiAoaW5kaWNhdG9yICYmIG9wdGlvbjIpIHsKICAgICAgICBpZiAoIXRoaXMuaW5kaWNhdG9ySW5pdGlhbGl6ZWQpIHsKICAgICAgICAgIGluZGljYXRvci5jbGFzc0xpc3QuYWRkKCJuby10cmFuc2l0aW9uIik7CiAgICAgICAgICB0aGlzLmluZGljYXRvckluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBpbmRpY2F0b3IuY2xhc3NMaXN0LnJlbW92ZSgibm8tdHJhbnNpdGlvbiIpOwogICAgICAgICAgfSwgNTApOwogICAgICAgIH0KICAgICAgICBpbmRpY2F0b3Iuc3R5bGUud2lkdGggPSBgJHtvcHRpb24yLmNsaWVudFdpZHRofXB4YDsKICAgICAgICBpbmRpY2F0b3Iuc3R5bGUubGVmdCA9IGAke29wdGlvbjIub2Zmc2V0TGVmdH1weGA7CiAgICAgICAgaW5kaWNhdG9yLnN0eWxlLm9wYWNpdHkgPSAiMSI7CiAgICAgIH0KICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICBpZiAodGhpcy50eXBlID09PSAiYm9vbGVhbiIpIHsKICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbiA9PT0gdGhpcy5ib29sZWFuVHJ1ZU5hbWU7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgaWYgKHRoaXMudHlwZSA9PT0gImJvb2xlYW4iICYmIHR5cGVvZiB2YWx1ZTIgPT09ICJib29sZWFuIikgewogICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB2YWx1ZTIgPyB0aGlzLmJvb2xlYW5UcnVlTmFtZSB8fCAidHJ1ZSIgOiB0aGlzLmJvb2xlYW5GYWxzZU5hbWUgfHwgImZhbHNlIjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdmFsdWUyOwogICAgICB9CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICBpZiAodGhpcy5oYXNVcGRhdGVkKSB7CiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgIHRoaXMuc2V0SW5kaWNhdG9yKCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dE11bHRpdG9nZ2xlMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1waG9uZS9kZWVzLWlucHV0LXBob25lLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMjEgPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaG9yaXpvbnRhbC1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBQaG9uZSBJbnB1dCJ9IC5zdWJ0aXRsZT0keyJBdXRvbWF0aWMgZm9ybWF0dGluZyBmb3IgcGhvbmUgbnVtYmVycyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXBob25lIAogICAgICAgICAgLmxhYmVsPSR7IlBob25lIE51bWJlciJ9IAogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkVudGVyIHlvdXIgcGhvbmUgbnVtYmVyIHdpdGggY291bnRyeSBjb2RlIn0KICAgICAgICAgIC52YWx1ZT0keyI1NTUxMjM0NTY3In0KICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXBob25lIAogICAgICAgICAgLmxhYmVsPSR7IkNvbnRhY3QgUGhvbmUifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJSZXF1aXJlZCBmb3IgYWNjb3VudCB2ZXJpZmljYXRpb24ifQogICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyIrMSAoNTU1KSAwMDAtMDAwMCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ikhvcml6b250YWwgTGF5b3V0In0gLnN1YnRpdGxlPSR7IlBob25lIGlucHV0cyBhcnJhbmdlZCBob3Jpem9udGFsbHkifT4KICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXBob25lIAogICAgICAgICAgICAubGFiZWw9JHsiTW9iaWxlIn0gCiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAudmFsdWU9JHsiNDE1NTU1MTIzNCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSAKICAgICAgICAgICAgLmxhYmVsPSR7Ik9mZmljZSJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IisxICg4MDApIDU1NS0wMDAwIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcGhvbmU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJJbnRlcm5hdGlvbmFsIE51bWJlcnMifSAuc3VidGl0bGU9JHsiU3VwcG9ydHMgZm9ybWF0dGluZyBmb3IgbnVtYmVycyB3aXRoIGNvdW50cnkgY29kZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSAKICAgICAgICAgIC5sYWJlbD0keyJJbnRlcm5hdGlvbmFsIENvbnRhY3QifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBdXRvbWF0aWNhbGx5IGZvcm1hdHMgaW50ZXJuYXRpb25hbCBudW1iZXJzIn0KICAgICAgICAgIC52YWx1ZT0keyI0NDEyMzQ1Njc4OTAifQogICAgICAgID48L2RlZXMtaW5wdXQtcGhvbmU+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtcGhvbmUgCiAgICAgICAgICAubGFiZWw9JHsiRW1lcmdlbmN5IENvbnRhY3QifSAKICAgICAgICAgIC52YWx1ZT0keyI5MTEifQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRm9ybSBJbnRlZ3JhdGlvbiJ9IC5zdWJ0aXRsZT0keyJQaG9uZSBpbnB1dCBhcyBwYXJ0IG9mIGEgY29udGFjdCBmb3JtIn0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkZ1bGwgTmFtZSJ9IC5yZXF1aXJlZD0ke3RydWV9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtcGhvbmUgLmxhYmVsPSR7IlBob25lIE51bWJlciJ9IC5yZXF1aXJlZD0ke3RydWV9PjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkVtYWlsIn0gLmlucHV0VHlwZT0keyJlbWFpbCJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1waG9uZS9kZWVzLWlucHV0LXBob25lLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTI5ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMzMCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0UGhvbmUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LXBob25lIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF9mb3JtYXR0ZWRQaG9uZV9kZWNvcmF0b3JzOwogIGxldCBfZm9ybWF0dGVkUGhvbmVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9mb3JtYXR0ZWRQaG9uZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnM7CiAgbGV0IF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dFBob25lMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2Zvcm1hdHRlZFBob25lX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfX2VzRGVjb3JhdGUyOSh0aGlzLCBudWxsLCBfZm9ybWF0dGVkUGhvbmVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZm9ybWF0dGVkUGhvbmUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZvcm1hdHRlZFBob25lIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZvcm1hdHRlZFBob25lLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5mb3JtYXR0ZWRQaG9uZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9mb3JtYXR0ZWRQaG9uZV9pbml0aWFsaXplcnMsIF9mb3JtYXR0ZWRQaG9uZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI5KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjkodGhpcywgbnVsbCwgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBsYWNlaG9sZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwbGFjZWhvbGRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wbGFjZWhvbGRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGxhY2Vob2xkZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyOShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFBob25lMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMyMTsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI2Zvcm1hdHRlZFBob25lX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczMwKHRoaXMsIF9mb3JtYXR0ZWRQaG9uZV9pbml0aWFsaXplcnMsICIiKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgZm9ybWF0dGVkUGhvbmUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmb3JtYXR0ZWRQaG9uZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZvcm1hdHRlZFBob25lKHZhbHVlMikgewogICAgICB0aGlzLiNmb3JtYXR0ZWRQaG9uZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMCh0aGlzLCBfZm9ybWF0dGVkUGhvbmVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMwKHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMCh0aGlzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMwKHRoaXMsIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsICIrMSAoNTU1KSAxMjMtNDU2NyIpKTsKICAgIGdldCBwbGFjZWhvbGRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGxhY2Vob2xkZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAvKiBQaG9uZSBpbnB1dCBzcGVjaWZpYyBzdHlsZXMgY2FuIGdvIGhlcmUgKi8KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0+PC9kZWVzLWxhYmVsPgogICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgIC52YWx1ZT0ke3RoaXMuZm9ybWF0dGVkUGhvbmV9CiAgICAgICAgICAuZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgLnJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZH0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0ke3RoaXMucGxhY2Vob2xkZXJ9CiAgICAgICAgICBAaW5wdXQ9JHsoZXZlbnQpID0+IHRoaXMuaGFuZGxlUGhvbmVJbnB1dChldmVudCl9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAodGhpcy52YWx1ZSkgewogICAgICAgIHRoaXMuZm9ybWF0dGVkUGhvbmUgPSB0aGlzLmZvcm1hdFBob25lTnVtYmVyKHRoaXMudmFsdWUpOwogICAgICB9CiAgICAgIGNvbnN0IGlubmVySW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7CiAgICAgIGlmIChpbm5lcklucHV0ICYmIGlubmVySW5wdXQuY2hhbmdlU3ViamVjdCkgewogICAgICAgIGlubmVySW5wdXQuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gewogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVBob25lSW5wdXQoZXZlbnQpIHsKICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQ7CiAgICAgIGNvbnN0IGNsZWFuZWRWYWx1ZSA9IHRoaXMuY2xlYW5QaG9uZU51bWJlcihpbnB1dC52YWx1ZSk7CiAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0UGhvbmVOdW1iZXIoY2xlYW5lZFZhbHVlKTsKICAgICAgaWYgKGlucHV0LnZhbHVlICE9PSBmb3JtYXR0ZWQpIHsKICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IGlucHV0LnNlbGVjdGlvblN0YXJ0IHx8IDA7CiAgICAgICAgaW5wdXQudmFsdWUgPSBmb3JtYXR0ZWQ7CiAgICAgICAgY29uc3QgbmV3Q3Vyc29yUG9zID0gdGhpcy5jYWxjdWxhdGVDdXJzb3JQb3NpdGlvbihjbGVhbmVkVmFsdWUsIGZvcm1hdHRlZCwgY3Vyc29yUG9zaXRpb24pOwogICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKG5ld0N1cnNvclBvcywgbmV3Q3Vyc29yUG9zKTsKICAgICAgfQogICAgICB0aGlzLmZvcm1hdHRlZFBob25lID0gZm9ybWF0dGVkOwogICAgICB0aGlzLnZhbHVlID0gY2xlYW5lZFZhbHVlOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgIH0KICAgIGNsZWFuUGhvbmVOdW1iZXIodmFsdWUyKSB7CiAgICAgIHJldHVybiB2YWx1ZTIucmVwbGFjZSgvXEQvZywgIiIpOwogICAgfQogICAgZm9ybWF0UGhvbmVOdW1iZXIodmFsdWUyKSB7CiAgICAgIGNvbnN0IGNsZWFuZWQgPSB0aGlzLmNsZWFuUGhvbmVOdW1iZXIodmFsdWUyKTsKICAgICAgaWYgKGNsZWFuZWQubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybiAiIjsKICAgICAgaWYgKGNsZWFuZWQubGVuZ3RoIDw9IDMpCiAgICAgICAgcmV0dXJuIGNsZWFuZWQ7CiAgICAgIGlmIChjbGVhbmVkLmxlbmd0aCA8PSA2KQogICAgICAgIHJldHVybiBgKCR7Y2xlYW5lZC5zbGljZSgwLCAzKX0pICR7Y2xlYW5lZC5zbGljZSgzKX1gOwogICAgICBpZiAoY2xlYW5lZC5sZW5ndGggPD0gMTApCiAgICAgICAgcmV0dXJuIGAoJHtjbGVhbmVkLnNsaWNlKDAsIDMpfSkgJHtjbGVhbmVkLnNsaWNlKDMsIDYpfS0ke2NsZWFuZWQuc2xpY2UoNil9YDsKICAgICAgcmV0dXJuIGArJHtjbGVhbmVkLnNsaWNlKDAsIGNsZWFuZWQubGVuZ3RoIC0gMTApfSAoJHtjbGVhbmVkLnNsaWNlKC0xMCwgLTcpfSkgJHtjbGVhbmVkLnNsaWNlKC03LCAtNCl9LSR7Y2xlYW5lZC5zbGljZSgtNCl9YDsKICAgIH0KICAgIGNhbGN1bGF0ZUN1cnNvclBvc2l0aW9uKGNsZWFuZWQsIGZvcm1hdHRlZCwgb2xkUG9zKSB7CiAgICAgIGxldCBmb3JtYXR0aW5nQ2hhcnMgPSAwOwogICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBvbGRQb3MgJiYgaTExIDwgZm9ybWF0dGVkLmxlbmd0aDsgaTExKyspIHsKICAgICAgICBpZiAoIS9cZC8udGVzdChmb3JtYXR0ZWRbaTExXSkpIHsKICAgICAgICAgIGZvcm1hdHRpbmdDaGFycysrOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gTWF0aC5taW4ob2xkUG9zICsgZm9ybWF0dGluZ0NoYXJzLCBmb3JtYXR0ZWQubGVuZ3RoKTsKICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgICB0aGlzLmZvcm1hdHRlZFBob25lID0gdGhpcy5mb3JtYXRQaG9uZU51bWJlcih2YWx1ZTIpOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzAodGhpcywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dFBob25lMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10b2dnbGUvZGVlcy1pbnB1dC10b2dnbGUuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMyMiA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgdG9nZ2xlQWxsT25CdG4gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiN0b2dnbGUtYWxsLW9uIik7CiAgY29uc3QgdG9nZ2xlQWxsT2ZmQnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjdG9nZ2xlLWFsbC1vZmYiKTsKICBjb25zdCBmZWF0dXJlVG9nZ2xlcyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiLmZlYXR1cmUtdG9nZ2xlcyBkZWVzLWlucHV0LXRvZ2dsZSIpOwogIGlmICh0b2dnbGVBbGxPbkJ0biAmJiB0b2dnbGVBbGxPZmZCdG4pIHsKICAgIHRvZ2dsZUFsbE9uQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBmZWF0dXJlVG9nZ2xlcy5mb3JFYWNoKCh0b2dnbGUpID0+IHsKICAgICAgICBpZiAoIXRvZ2dsZS5kaXNhYmxlZCAmJiAhdG9nZ2xlLnJlcXVpcmVkKSB7CiAgICAgICAgICB0b2dnbGUudmFsdWUgPSB0cnVlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICAgIHRvZ2dsZUFsbE9mZkJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgZmVhdHVyZVRvZ2dsZXMuZm9yRWFjaCgodG9nZ2xlKSA9PiB7CiAgICAgICAgaWYgKCF0b2dnbGUuZGlzYWJsZWQgJiYgIXRvZ2dsZS5yZXF1aXJlZCkgewogICAgICAgICAgdG9nZ2xlLnZhbHVlID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0KfX0+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CgogICAgICAgIGRlZXMtcGFuZWwgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICB9CgogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KCiAgICAgICAgLnRvZ2dsZS1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICB9CgogICAgICAgIC5ob3Jpem9udGFsLXRvZ2dsZXMgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGdhcDogMzJweDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICB9CgogICAgICAgIC5pbnRlcmFjdGl2ZS1zZWN0aW9uIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICB9CgogICAgICAgIC5vdXRwdXQtdGV4dCB7CiAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjEwIDQwJSA4MCUpIil9OwogICAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk4JSkiLCAiaHNsKDIxNSAyMC4yJSAxMS44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgICAgIH0KCiAgICAgICAgLnNldHRpbmdzLXNlY3Rpb24gewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCAiaHNsKDAgMCUgNyUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgIH0KCiAgICAgICAgLmJ1dHRvbi1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIH0KCiAgICAgICAgLmZlYXR1cmUtdG9nZ2xlcyB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIH0KCiAgICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICB9CgogICAgICAgIC5kcmFnLWhpbnQgewogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgVG9nZ2xlIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBvbi9vZmYgdG9nZ2xlIHN3aXRjaCB3aXRoIGRyYWcgc3VwcG9ydCJ9PgogICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkVuYWJsZSBmZWF0dXJlIn0KICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5rZXk9JHsiYmFzaWMifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJBY3RpdmUgdG9nZ2xlIn0KICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgLmtleT0keyJhY3RpdmUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJXaXRoIGRlc2NyaXB0aW9uIn0KICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGlzIHRvZ2dsZSBoYXMgYWRkaXRpb25hbCBoZWxwZXIgdGV4dCBleHBsYWluaW5nIGl0cyBwdXJwb3NlIn0KICAgICAgICAgICAgLmtleT0keyJ3aXRoRGVzYyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cCBjbGFzcz0iZHJhZy1oaW50Ij5UaXA6IFlvdSBjYW4gZHJhZyB0aGUgdG9nZ2xlIGtub2IgdG8gc3dpdGNoIHN0YXRlczwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlRvZ2dsZSBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHRvZ2dsZSBzdGF0ZXMgYW5kIGNvbmZpZ3VyYXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0idG9nZ2xlLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiRGVmYXVsdCAob2ZmKSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJFbmFibGVkIChvbikifQogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCAob2ZmKSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCAob24pIn0KICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiUmVxdWlyZWQgKGFsd2F5cyBvbikifQogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhpcyB0b2dnbGUgY2Fubm90IGJlIHR1cm5lZCBvZmYifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJUb2dnbGVzIGFycmFuZ2VkIGhvcml6b250YWxseSBmb3IgY29tcGFjdCBpbnRlcmZhY2VzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC10b2dnbGVzIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiV2lGaSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJCbHVldG9vdGgifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkdQUyJ9CiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJORkMifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlNldHRpbmdzIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiVG9nZ2xlcyBpbiBhIHR5cGljYWwgc2V0dGluZ3MgY29udGV4dCJ9PgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgICAgPGg0IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Ob3RpZmljYXRpb24gU2V0dGluZ3M8L2g0PgoKICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1ncm91cCI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJQdXNoIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlJlY2VpdmUgcHVzaCBub3RpZmljYXRpb25zIG9uIHlvdXIgZGV2aWNlIn0KICAgICAgICAgICAgICAua2V5PSR7InB1c2gifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJFbWFpbCBub3RpZmljYXRpb25zIn0KICAgICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJHZXQgaW1wb3J0YW50IHVwZGF0ZXMgdmlhIGVtYWlsIn0KICAgICAgICAgICAgICAua2V5PSR7ImVtYWlsIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgICAubGFiZWw9JHsiU291bmQifQogICAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJQbGF5IGEgc291bmQgZm9yIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgICAgIC5rZXk9JHsic291bmQifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJWaWJyYXRpb24ifQogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlZpYnJhdGUgZm9yIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgICAgIC5rZXk9JHsidmlicmF0aW9uIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkZlYXR1cmUgVG9nZ2xlcyJ9IC5zdWJ0aXRsZT0keyJCYXRjaCBvcGVyYXRpb25zIG9uIG11bHRpcGxlIHRvZ2dsZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIGlkPSJ0b2dnbGUtYWxsLW9uIiB0eXBlPSJzZWNvbmRhcnkiPkVuYWJsZSBBbGw8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIGlkPSJ0b2dnbGUtYWxsLW9mZiIgdHlwZT0ic2Vjb25kYXJ5Ij5EaXNhYmxlIEFsbDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtdG9nZ2xlcyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgICAubGFiZWw9JHsiRGFyayBNb2RlIn0KICAgICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAgIC5rZXk9JHsiZGFya01vZGUifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJBdXRvLXNhdmUifQogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmtleT0keyJhdXRvU2F2ZSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgICAgLmxhYmVsPSR7IlNwZWxsIGNoZWNrIn0KICAgICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgICAua2V5PSR7InNwZWxsQ2hlY2sifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJEZXZlbG9wZXIgbW9kZSJ9CiAgICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLmtleT0keyJkZXZNb2RlIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgICAubGFiZWw9JHsiQmV0YSBmZWF0dXJlcyJ9CiAgICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLmtleT0keyJiZXRhIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkludGVyYWN0aXZlIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiVG9nZ2xlIHRvIHNlZSB2YWx1ZSBjaGFuZ2VzIGluIHJlYWwtdGltZSJ9PgogICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkFpcnBsYW5lIG1vZGUifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgQG5ld1ZhbHVlPSR7KGV2ZW50KSA9PiB7CiAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FpcnBsYW5lLW91dHB1dCIpOwogIGlmIChvdXRwdXQpIHsKICAgIG91dHB1dC50ZXh0Q29udGVudCA9IGBBaXJwbGFuZSBtb2RlOiAke2V2ZW50LmRldGFpbCA/ICJPTiIgOiAiT0ZGIn1gOwogIH0KfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiRG8gbm90IGRpc3R1cmIifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgQG5ld1ZhbHVlPSR7KGV2ZW50KSA9PiB7CiAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2RuZC1vdXRwdXQiKTsKICBpZiAob3V0cHV0KSB7CiAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBgRG8gbm90IGRpc3R1cmI6ICR7ZXZlbnQuZGV0YWlsID8gIkVOQUJMRUQiIDogIkRJU0FCTEVEIn1gOwogIH0KfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcmFjdGl2ZS1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgaWQ9ImFpcnBsYW5lLW91dHB1dCIgY2xhc3M9Im91dHB1dC10ZXh0Ij5BaXJwbGFuZSBtb2RlOiBPRkY8L2Rpdj4KICAgICAgICAgIDxkaXYgaWQ9ImRuZC1vdXRwdXQiIGNsYXNzPSJvdXRwdXQtdGV4dCIgc3R5bGU9Im1hcmdpbi10b3A6IDhweDsiPkRvIG5vdCBkaXN0dXJiOiBESVNBQkxFRDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10b2dnbGUvZGVlcy1pbnB1dC10b2dnbGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMzAgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczMxID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRUb2dnbGUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LXRvZ2dsZSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0VG9nZ2xlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3ZhbHVlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMzAodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFRvZ2dsZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzMSh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBmYWxzZSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8qKgogICAgICogS25vYiBwb3NpdGlvbiB0cmFja2luZyAoMCA9IG9mZiwgbWF4VHJhdmVsID0gb24pCiAgICAgKi8KICAgIGN1cnJlbnRYID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzEodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgMCk7CiAgICAvKioKICAgICAqIERyYWcgc3RhdGUKICAgICAqLwogICAgaXNEcmFnZ2luZyA9IGZhbHNlOwogICAgaGFzRHJhZ2dlZCA9IGZhbHNlOwogICAgc3RhcnRYID0gMDsKICAgIC8vIFRvZ2dsZSBkaW1lbnNpb25zCiAgICB0cmFja1dpZHRoID0gMzY7CiAgICB0cmFja0hlaWdodCA9IDIwOwogICAga25vYlNpemUgPSAxNDsKICAgIHBhZGRpbmcgPSAyOwogICAgbWF4VHJhdmVsID0gMTY7CiAgICAvLyB0cmFja1dpZHRoIC0ga25vYlNpemUgLSAocGFkZGluZyAqIDIpIC0gYm9yZGVyCiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgdGhpcy5sYWJlbFBvc2l0aW9uID0gInJpZ2h0IjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtdHJhY2sgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBtYXJnaW4tdG9wOiAxcHg7CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyOmhvdmVyIC50b2dnbGUtdHJhY2sgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWx1ZV0pIC50b2dnbGUtdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICB9CgogICAgICAudG9nZ2xlLXRyYWNrOmZvY3VzLXZpc2libGUgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC50b2dnbGUta25vYiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMnB4OwogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA3cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjE1cyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgdG91Y2gtYWN0aW9uOiBub25lOwogICAgICB9CgogICAgICAudG9nZ2xlLWtub2IuZHJhZ2dpbmcgewogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbHVlXSkgLnRvZ2dsZS1rbm9iIHsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLyogRGlzYWJsZWQgc3RhdGUgKi8KICAgICAgLm1haW5jb250YWluZXIuZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAudG9nZ2xlLXRyYWNrLmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAvKiBSZXF1aXJlZCBzdGF0ZSAobG9ja2VkIG9uKSAqLwogICAgICA6aG9zdChbcmVxdWlyZWRdW3ZhbHVlXSkgLnRvZ2dsZS10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA2MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDQ5LjglKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNjEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA0OS44JSkiKX07CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW3JlcXVpcmVkXVt2YWx1ZV0pIC50b2dnbGUta25vYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgNzAlKSIpfTsKICAgICAgfQoKICAgICAgLyogTGFiZWwgKi8KICAgICAgLmxhYmVsLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMnB4OwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyOmhvdmVyIC50b2dnbGUtbGFiZWwgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyLmRpc2FibGVkOmhvdmVyIC50b2dnbGUtbGFiZWwgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAvKiBEZXNjcmlwdGlvbiAqLwogICAgICAuZGVzY3JpcHRpb24tdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIgJHt0aGlzLmRpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSIgQGNsaWNrPSIke3RoaXMuaGFuZGxlQ2xpY2t9Ij4KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS10cmFjayAke3RoaXMuZGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9IgogICAgICAgICAgICB0YWJpbmRleD0iJHt0aGlzLmRpc2FibGVkID8gIi0xIiA6ICIwIn0iCiAgICAgICAgICAgIEBrZXlkb3duPSIke3RoaXMuaGFuZGxlS2V5ZG93bn0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICBjbGFzcz0idG9nZ2xlLWtub2IiCiAgICAgICAgICAgICAgc3R5bGU9ImxlZnQ6ICR7dGhpcy5wYWRkaW5nICsgdGhpcy5jdXJyZW50WH1weDsiCiAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSIke3RoaXMub25Qb2ludGVyRG93bn0iCiAgICAgICAgICAgICAgQHBvaW50ZXJtb3ZlPSIke3RoaXMub25Qb2ludGVyTW92ZX0iCiAgICAgICAgICAgICAgQHBvaW50ZXJ1cD0iJHt0aGlzLm9uUG9pbnRlclVwfSIKICAgICAgICAgICAgICBAcG9pbnRlcmNhbmNlbD0iJHt0aGlzLm9uUG9pbnRlclVwfSIKICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGl2IGNsYXNzPSJ0b2dnbGUtbGFiZWwiPiR7dGhpcy5sYWJlbH08L2Rpdj5gIDogIiJ9CiAgICAgICAgICAgICR7dGhpcy5kZXNjcmlwdGlvbiA/IGIyYDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uLXRleHQiPiR7dGhpcy5kZXNjcmlwdGlvbn08L2Rpdj5gIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBhd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMudmFsdWUpIHsKICAgICAgICB0aGlzLnZhbHVlID0gdHJ1ZTsKICAgICAgfQogICAgICB0aGlzLmN1cnJlbnRYID0gdGhpcy52YWx1ZSA/IHRoaXMubWF4VHJhdmVsIDogMDsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICAvKioKICAgICAqIENsaWNrIGhhbmRsZXIgLSB0b2dnbGVzIHRoZSB2YWx1ZQogICAgICovCiAgICBhc3luYyBoYW5kbGVDbGljayhldmVudCkgewogICAgICBpZiAodGhpcy5pc0RyYWdnaW5nIHx8IHRoaXMuaGFzRHJhZ2dlZCkgewogICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7CiAgICAgICAgdGhpcy5jdXJyZW50WCA9IHRoaXMubWF4VHJhdmVsOwogICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyMTEpID0+IHNldFRpbWVvdXQocjExLCAxMCkpOwogICAgICAgIHRoaXMuY3VycmVudFggPSB0aGlzLm1heFRyYXZlbCAtIDM7CiAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgYXdhaXQgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMTUwKTsKICAgICAgICB0aGlzLmN1cnJlbnRYID0gdGhpcy5tYXhUcmF2ZWw7CiAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWU7CiAgICAgIHRoaXMuY3VycmVudFggPSB0aGlzLnZhbHVlID8gdGhpcy5tYXhUcmF2ZWwgOiAwOwogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibmV3VmFsdWUiLCB7CiAgICAgICAgZGV0YWlsOiB0aGlzLnZhbHVlLAogICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgfSkpOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCkudGhlbigoKSA9PiB7CiAgICAgICAgdGhpcy5oYXNEcmFnZ2VkID0gZmFsc2U7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBQb2ludGVyIGRvd24gLSBzdGFydCBkcmFnZ2luZwogICAgICovCiAgICBvblBvaW50ZXJEb3duKGV2ZW50KSB7CiAgICAgIGlmICh0aGlzLnJlcXVpcmVkIHx8IHRoaXMuZGlzYWJsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTsKICAgICAgdGhpcy5zdGFydFggPSBldmVudC5jbGllbnRYIC0gdGhpcy5jdXJyZW50WDsKICAgICAgZXZlbnQudGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7CiAgICB9CiAgICAvKioKICAgICAqIFBvaW50ZXIgbW92ZSAtIHRyYWNrIGRyYWcgcG9zaXRpb24KICAgICAqLwogICAgb25Qb2ludGVyTW92ZShldmVudCkgewogICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5ld1ggPSBldmVudC5jbGllbnRYIC0gdGhpcy5zdGFydFg7CiAgICAgIHRoaXMuaGFzRHJhZ2dlZCA9IHRydWU7CiAgICAgIGNvbnN0IHRvZ2dsZUtub2IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50b2dnbGUta25vYiIpOwogICAgICBpZiAodG9nZ2xlS25vYikgewogICAgICAgIHRvZ2dsZUtub2IuY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKTsKICAgICAgfQogICAgICB0aGlzLmN1cnJlbnRYID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obmV3WCwgdGhpcy5tYXhUcmF2ZWwpKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICAvKioKICAgICAqIFBvaW50ZXIgdXAgLSBjb21wbGV0ZSBkcmFnIGFuZCBzbmFwIHRvIG5lYXJlc3Qgc2lkZQogICAgICovCiAgICBvblBvaW50ZXJVcChldmVudCkgewogICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykKICAgICAgICByZXR1cm47CiAgICAgIGV2ZW50LnRhcmdldC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTsKICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7CiAgICAgIGlmICghdGhpcy5oYXNEcmFnZ2VkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHRvZ2dsZUtub2IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50b2dnbGUta25vYiIpOwogICAgICBpZiAodG9nZ2xlS25vYikgewogICAgICAgIHRvZ2dsZUtub2IuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciKTsKICAgICAgfQogICAgICBjb25zdCBtaWRwb2ludCA9IHRoaXMubWF4VHJhdmVsIC8gMjsKICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY3VycmVudFggPiBtaWRwb2ludDsKICAgICAgdGhpcy5jdXJyZW50WCA9IHRoaXMudmFsdWUgPyB0aGlzLm1heFRyYXZlbCA6IDA7CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJuZXdWYWx1ZSIsIHsKICAgICAgICBkZXRhaWw6IHRoaXMudmFsdWUsCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigwKS50aGVuKCgpID0+IHsKICAgICAgICB0aGlzLmhhc0RyYWdnZWQgPSBmYWxzZTsKICAgICAgfSk7CiAgICB9CiAgICAvKioKICAgICAqIFN5bmMga25vYiBwb3NpdGlvbiB3aGVuIHZhbHVlIGlzIGNoYW5nZWQgZXh0ZXJuYWxseQogICAgICovCiAgICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJ2YWx1ZSIpICYmICF0aGlzLmlzRHJhZ2dpbmcgJiYgIXRoaXMuaGFzRHJhZ2dlZCkgewogICAgICAgIHRoaXMuY3VycmVudFggPSB0aGlzLnZhbHVlID8gdGhpcy5tYXhUcmF2ZWwgOiAwOwogICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEtleWJvYXJkIHN1cHBvcnQKICAgICAqLwogICAgaGFuZGxlS2V5ZG93bihldmVudCkgewogICAgICBpZiAoZXZlbnQua2V5ID09PSAiICIgfHwgZXZlbnQua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGV2ZW50KTsKICAgICAgfQogICAgfQogICAgLy8gRGVlc0lucHV0QmFzZSBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlQXJnKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZUFyZzsKICAgIH0KICAgIGZvY3VzKCkgewogICAgICBjb25zdCB0cmFjazIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50b2dnbGUtdHJhY2siKTsKICAgICAgaWYgKHRyYWNrMikgewogICAgICAgIHRyYWNrMi5mb2N1cygpOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczMxKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSW5wdXRUb2dnbGUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXR5cGVsaXN0L2RlZXMtaW5wdXQtdHlwZWxpc3QuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMyMyA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5ob3Jpem9udGFsLWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmluZm8tYm94IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2UzZjJmZDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAjMTk3NmQyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAuaW5mby1ib3ggewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMWUzYTVmOwogICAgICAgICAgICBjb2xvcjogIzkwY2FmOTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBUeXBlIExpc3QifSAuc3VidGl0bGU9JHsiQWRkIGFuZCByZW1vdmUgaXRlbXMgZnJvbSBhIGxpc3QifT4KICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlRhZ3MifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFkZCB0YWdzIGJ5IHR5cGluZyBhbmQgcHJlc3NpbmcgRW50ZXIifQogICAgICAgICAgLnZhbHVlPSR7WyJqYXZhc2NyaXB0IiwgInR5cGVzY3JpcHQiLCAid2ViLWNvbXBvbmVudHMiXX0KICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAubGFiZWw9JHsiVGVhbSBNZW1iZXJzIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBZGQgZW1haWwgYWRkcmVzc2VzIG9mIHRlYW0gbWVtYmVycyJ9CiAgICAgICAgICAudmFsdWU9JHtbImFsaWNlQGV4YW1wbGUuY29tIiwgImJvYkBleGFtcGxlLmNvbSJdfQogICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJTa2lsbHMgJiBLZXl3b3JkcyJ9IC5zdWJ0aXRsZT0keyJNYW5hZ2UgbGlzdHMgb2Ygc2tpbGxzIGFuZCBrZXl3b3JkcyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAubGFiZWw9JHsiWW91ciBTa2lsbHMifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7Ikxpc3QgeW91ciBwcm9mZXNzaW9uYWwgc2tpbGxzIn0KICAgICAgICAgIC52YWx1ZT0ke1siSFRNTCIsICJDU1MiLCAiSmF2YVNjcmlwdCIsICJOb2RlLmpzIiwgIlJlYWN0Il19CiAgICAgICAgPjwvZGVlcy1pbnB1dC10eXBlbGlzdD4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJDYXRlZ29yaWVzIn0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC52YWx1ZT0ke1siVGVjaG5vbG9neSIsICJEZXNpZ24iLCAiQnVzaW5lc3MiXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJLZXl3b3JkcyJ9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAudmFsdWU9JHtbImlubm92YXRpb24iLCAic3RhcnR1cCIsICJncm93dGgiXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJSZXF1aXJlZCAmIERpc2FibGVkIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgaW5wdXQgc3RhdGVzIGZvciB2YWxpZGF0aW9uIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJQcm9qZWN0IERlcGVuZGVuY2llcyJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiTGlzdCBhbGwgcmVxdWlyZWQgbnBtIHBhY2thZ2VzIn0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAudmFsdWU9JHtbIkBkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCIsICJAZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzIl19CiAgICAgICAgPjwvZGVlcy1pbnB1dC10eXBlbGlzdD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlN5c3RlbSBUYWdzIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGVzZSB0YWdzIGFyZSBtYW5hZ2VkIGJ5IHRoZSBzeXN0ZW0ifQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC52YWx1ZT0ke1sic3lzdGVtIiwgInByb3RlY3RlZCIsICJyZWFkb25seSJdfQogICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJBcnRpY2xlIFB1Ymxpc2hpbmcgRm9ybSJ9IC5zdWJ0aXRsZT0keyJDb21wbGV0ZSBmb3JtIHdpdGggdGFnIG1hbmFnZW1lbnQifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiQXJ0aWNsZSBUaXRsZSJ9IC5yZXF1aXJlZD0ke3RydWV9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLmxhYmVsPSR7IlN1bW1hcnkifSAKICAgICAgICAgICAgLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJCcmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgYXJ0aWNsZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgICAubGFiZWw9JHsiVGFncyJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBZGQgcmVsZXZhbnQgdGFncyBmb3IgYmV0dGVyIGRpc2NvdmVyYWJpbGl0eSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke1sidHV0b3JpYWwiLCAid2ViLWRldmVsb3BtZW50Il19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgICAgLmxhYmVsPSR7IkNvLUF1dGhvcnMifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGVtYWlsIGFkZHJlc3NlcyBvZiBjby1hdXRob3JzIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iaW5mby1ib3giPgogICAgICAgICAgPHN0cm9uZz5UaXA6PC9zdHJvbmc+IFR5cGUgYSB2YWx1ZSBhbmQgcHJlc3MgRW50ZXIgdG8gYWRkIGl0IHRvIHRoZSBsaXN0LiBDbGljayBvbiBhbnkgaXRlbSB0byByZW1vdmUgaXQuCiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXR5cGVsaXN0L2RlZXMtaW5wdXQtdHlwZWxpc3QuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMzEgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczMyID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRUeXBlbGlzdCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtdHlwZWxpc3QiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX3ZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF92YWx1ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbnB1dFZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF9pbnB1dFZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5wdXRWYWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXRUeXBlbGlzdDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfaW5wdXRWYWx1ZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGUzMSh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMxKHRoaXMsIG51bGwsIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlucHV0VmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlucHV0VmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5wdXRWYWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaW5wdXRWYWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgX2lucHV0VmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFR5cGVsaXN0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjM7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzMih0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpbnB1dFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMih0aGlzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMyKHRoaXMsIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBpbnB1dFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jaW5wdXRWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlucHV0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lucHV0VmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgfQogICAgICAubWFpbmJveCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMyMjIyMjIiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBib3JkZXItdG9wOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCAiMXB4IHNvbGlkICNmZmZmZmYxMCIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCAiMXB4IHNvbGlkICMyMjIiKX07CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCAiMXB4IHNvbGlkICNmZmZmZmYxMCIpfTsKICAgICAgICBib3JkZXItbGVmdDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjFweCBzb2xpZCAjQ0NDIiwgIjFweCBzb2xpZCAjZmZmZmZmMTAiKX07CiAgICAgICAgYm94LXNoYWRvdzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjBweCAxcHggNHB4IHJnYmEoMCwwLDAsMC4zKSIsICJub25lIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICAKICAgICAgLm1haW5ib3g6aG92ZXIgewogICAgICAgIGZpbHRlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImJyaWdodG5lc3MoMC45OCkiLCAiYnJpZ2h0bmVzcygxLjA1KSIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1haW5ib3g6Zm9jdXMtd2l0aGluIHsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDY5ZjIiLCAiIzAwODRmZiIpfTsKICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDsKICAgICAgfQoKICAgICAgLnRhZ3MgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAubm90YWdzIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNWY1ZjUiLCAiIzE4MTgxOCIpfTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogaW5oZXJpdDsKICAgICAgICBwYWRkaW5nOiAwcHggMTZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4OwogICAgICAgIGhlaWdodDogMHB4OwogICAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjJzOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMzMzIil9OwogICAgICB9CgogICAgICBpbnB1dDpmb2N1cyB7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMxYTFhMWEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIGlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgIH0KCiAgICAgIC50YWcgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U4ZjVlOSIsICIjMmQzYTJkIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzJlN2QzMiIsICIjODFjNzg0Iil9OwogICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBtYXJnaW46IDNweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2M4ZTZjOSIsICIjMWI1ZTIwIil9OwogICAgICB9CiAgICAgIAogICAgICAudGFnOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2M4ZTZjOSIsICIjM2Q0ZjNkIil9OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgICAgfQoKICAgICAgLnRhZyAucmVtb3ZlIHsKICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzOwogICAgICB9CgogICAgICAudGFnIC5yZW1vdmU6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjYzYyODI4IiwgIiNlZjUzNTAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIERpc2FibGVkIHN0YXRlICovCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5tYWluYm94IHsKICAgICAgICBvcGFjaXR5OiAwLjY7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRhZ3MgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC50YWcgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbZGlzYWJsZWRdKSBpbnB1dCB7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YwZjBmMCIsICIjMWExYTFhIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkZWVzLWxhYmVsIC5sYWJlbD0ke3RoaXMubGFiZWx9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259PjwvZGVlcy1sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhZ3MiIEBjbGljaz0keygpID0+IHsKICAgICAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKS5mb2N1cygpOwogICAgICB9fT4KICAgICAgICAgICAgJHt0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCA/IGIyYDxkaXYgY2xhc3M9Im5vdGFncyI+Tm8gdGFncyB5ZXQ8L2Rpdj5gIDogdGhpcy52YWx1ZS5tYXAoKHRhZykgPT4gYjJgCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyI+CiAgICAgICAgICAgICAgICAgICAgICAke3RhZ30KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZW1vdmUiIEBjbGljaz0keyhlMTEpID0+IHsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgdGhpcy5yZW1vdmVUYWcodGFnKTsKICAgICAgfX0+w5c8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJUeXBlLCBwcmVzcyBFbnRlciB0byBhZGQgaXQuLi4iCiAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuaW5wdXRWYWx1ZX0KICAgICAgICAgICAgQGlucHV0PSR7KGUxMSkgPT4gewogICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IGUxMS50YXJnZXQudmFsdWU7CiAgICAgIH19CiAgICAgICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gewogICAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiICYmIHRoaXMuaW5wdXRWYWx1ZS50cmltKCkpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5hZGRUYWcodGhpcy5pbnB1dFZhbHVlLnRyaW0oKSk7CiAgICAgICAgfQogICAgICB9fQogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgLz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYWRkVGFnKHRhZykgewogICAgICBpZiAoIXRoaXMudmFsdWUuaW5jbHVkZXModGFnKSkgewogICAgICAgIHRoaXMudmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgdGFnXTsKICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSAiIjsKICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgfQogICAgfQogICAgcmVtb3ZlVGFnKHRhZykgewogICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5maWx0ZXIoKHQ5KSA9PiB0OSAhPT0gdGFnKTsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczMyKHRoaXMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzIoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dFR5cGVsaXN0MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdGFibGUvZGVlcy10YWJsZS5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzI0ID0gKCkgPT4gYjJgCiAgPHN0eWxlPgogICAgJHtpYAogICAgICAuZGVtb1dyYXBwZXIgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgwIDAlIDUlKSIpfTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNDhweDsKICAgICAgfQogICAgICAuZGVtby10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KICAgICAgLmRlbW8tZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQogICAgICAudGhlbWUtdG9nZ2xlIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAxNnB4OwogICAgICAgIHJpZ2h0OiAxNnB4OwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vV3JhcHBlciI+CiAgICA8ZGVlcy1idXR0b24gY2xhc3M9InRoZW1lLXRvZ2dsZSIgQGNsaWNrPSR7KCkgPT4gewogIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiYnJpZ2h0Iik7CiAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrIik7Cn19PlRvZ2dsZSBUaGVtZTwvZGVlcy1idXR0b24+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkJhc2ljIFRhYmxlIHdpdGggQWN0aW9uczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkEgc3RhbmRhcmQgdGFibGUgd2l0aCByb3cgYWN0aW9ucywgZWRpdGFibGUgZmllbGRzLCBhbmQgY29udGV4dCBtZW51IHN1cHBvcnQuIERvdWJsZS1jbGljayBvbiBkZXNjcmlwdGlvbnMgdG8gZWRpdC4gR3JpZCBsaW5lcyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IkN1cnJlbnQgQWNjb3VudCBTdGF0ZW1lbnQiCiAgICAgICAgICBoZWFkaW5nMj0iQnVucSAtIFBheW1lbnQgQWNjb3VudCAyIC0gQXByaWwgMjAyMSIKICAgICAgICAgIC5lZGl0YWJsZUZpZWxkcz0iJHtbImRlc2NyaXB0aW9uIl19IgogICAgICAgICAgLmRhdGE9JHtbCiAgewogICAgZGF0ZTogIjIwMjEtMDQtMDEiLAogICAgYW1vdW50OiAiMjQ2NC42NSBcdTIwQUMiLAogICAgZGVzY3JpcHRpb246ICJQcmludGluZyBQYXBlciAoT2ZmaWNlIFN1cHBsaWVzKSAtIFNUQVBMRVMgQlJFTUVOIgogIH0sCiAgewogICAgZGF0ZTogIjIwMjEtMDQtMDIiLAogICAgYW1vdW50OiAiMTY1LjY1IFx1MjBBQyIsCiAgICBkZXNjcmlwdGlvbjogIkxvZ2l0ZWNoIE1vdXNlIChIYXJkd2FyZSkgLSBsb2dpLmNvbSBPbmxpbmVTaG9wIgogIH0sCiAgewogICAgZGF0ZTogIjIwMjEtMDQtMDMiLAogICAgYW1vdW50OiAiMjk5OSwwMCBcdTIwQUMiLAogICAgZGVzY3JpcHRpb246ICJNYWNib29rIFBybyAxNmluY2ggKEhhcmR3YXJlKSAtIEFwcGxlLmRlIE9ubGluZVNob3AiCiAgfSwKICB7CiAgICBkYXRlOiAiMjAyMS0wNC0wMSIsCiAgICBhbW91bnQ6ICIyNDY0LjY1IFx1MjBBQyIsCiAgICBkZXNjcmlwdGlvbjogIk9mZmljZS1TdXBwbGllcyAtIFNUQVBMRVMgQlJFTUVOIgogIH0sCiAgewogICAgZGF0ZTogIjIwMjEtMDQtMDEiLAogICAgYW1vdW50OiAiMjQ2NC42NSBcdTIwQUMiLAogICAgZGVzY3JpcHRpb246ICJPZmZpY2UtU3VwcGxpZXMgLSBTVEFQTEVTIEJSRU1FTiIKICB9Cl19CiAgICAgICAgICBkYXRhTmFtZT0idHJhbnNhY3Rpb25zIgogICAgICAgICAgLmRhdGFBY3Rpb25zPSIke1sKICB7CiAgICBuYW1lOiAidXBsb2FkIiwKICAgIGljb25OYW1lOiAiYmVsbCIsCiAgICB1c2VUYWJsZUJlaGF2aW91cjogInVwbG9hZCIsCiAgICB0eXBlOiBbImluUm93Il0sCiAgICBhY3Rpb25GdW5jOiBhc3luYyAob3B0aW9uc0FyZykgPT4gewogICAgICBhbGVydChvcHRpb25zQXJnLml0ZW0uYW1vdW50KTsKICAgIH0KICB9LAogIHsKICAgIG5hbWU6ICJ2aXNpYmlsaXR5IiwKICAgIGljb25OYW1lOiAiY29weSIsCiAgICB0eXBlOiBbImluUm93Il0sCiAgICB1c2VUYWJsZUJlaGF2aW91cjogInByZXZpZXciLAogICAgYWN0aW9uRnVuYzogYXN5bmMgKGl0ZW1BcmcpID0+IHsKICAgIH0KICB9LAogIHsKICAgIG5hbWU6ICJjcmVhdGUgbmV3IiwKICAgIGljb25OYW1lOiAiaW5zdGFncmFtIiwKICAgIHR5cGU6IFsiaGVhZGVyIl0sCiAgICB1c2VUYWJsZUJlaGF2aW91cjogInByZXZpZXciLAogICAgYWN0aW9uRnVuYzogYXN5bmMgKGl0ZW1BcmcpID0+IHsKICAgIH0KICB9LAogIHsKICAgIG5hbWU6ICJ0byBnYWxsZXJ5IiwKICAgIGljb25OYW1lOiAibWVzc2FnZSIsCiAgICB0eXBlOiBbImZvb3RlciJdLAogICAgdXNlVGFibGVCZWhhdmlvdXI6ICJwcmV2aWV3IiwKICAgIGFjdGlvbkZ1bmM6IGFzeW5jIChpdGVtQXJnKSA9PiB7CiAgICB9CiAgfSwKICB7CiAgICBuYW1lOiAiY29weSIsCiAgICBpY29uTmFtZTogImNvcHlTb2xpZCIsCiAgICB0eXBlOiBbImNvbnRleHRtZW51IiwgImluUm93Il0sCiAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfSwKICB7CiAgICBuYW1lOiAiZWRpdCAoZnJvbSBkZW1vKSIsCiAgICBpY29uTmFtZTogInBlblRvU3F1YXJlIiwKICAgIHR5cGU6IFsiY29udGV4dG1lbnUiXSwKICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9LAogIHsKICAgIG5hbWU6ICJwYXN0ZSIsCiAgICBpY29uTmFtZTogInBhc3RlU29saWQiLAogICAgdHlwZTogWyJjb250ZXh0bWVudSJdLAogICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0sCiAgewogICAgbmFtZTogInByZXZpZXciLAogICAgdHlwZTogWyJkb3VibGVDbGljayIsICJjb250ZXh0bWVudSJdLAogICAgaWNvbk5hbWU6ICJleWUiLAogICAgYWN0aW9uRnVuYzogYXN5bmMgKGl0ZW1BcmcpID0+IHsKICAgICAgYWxlcnQoaXRlbUFyZy5pdGVtLmFtb3VudCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KXX0iCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VGFibGUgd2l0aCBWZXJ0aWNhbCBMaW5lczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkVuaGFuY2VkIGNvbHVtbiBzZXBhcmF0aW9uIGZvciBiZXR0ZXIgZGF0YSB0cmFja2luZy48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJQcm9kdWN0IEludmVudG9yeSIKICAgICAgICAgIGhlYWRpbmcyPSJDdXJyZW50IHN0b2NrIGxldmVscyBhY3Jvc3Mgd2FyZWhvdXNlcyIKICAgICAgICAgIC5zaG93VmVydGljYWxMaW5lcz0ke3RydWV9CiAgICAgICAgICAuZGF0YT0ke1sKICB7CiAgICBwcm9kdWN0OiAnTWFjQm9vayBQcm8gMTYiJywKICAgIHdhcmVob3VzZV9hOiAiNDUiLAogICAgd2FyZWhvdXNlX2I6ICIzMiIsCiAgICB3YXJlaG91c2VfYzogIjI4IiwKICAgIHRvdGFsOiAiMTA1IiwKICAgIHN0YXR1czogIlx1MjcxMyBJbiBTdG9jayIKICB9LAogIHsKICAgIHByb2R1Y3Q6ICJpUGhvbmUgMTUgUHJvIiwKICAgIHdhcmVob3VzZV9hOiAiMTIwIiwKICAgIHdhcmVob3VzZV9iOiAiODkiLAogICAgd2FyZWhvdXNlX2M6ICIxNTYiLAogICAgdG90YWw6ICIzNjUiLAogICAgc3RhdHVzOiAiXHUyNzEzIEluIFN0b2NrIgogIH0sCiAgewogICAgcHJvZHVjdDogIkFpclBvZHMgUHJvIiwKICAgIHdhcmVob3VzZV9hOiAiMCIsCiAgICB3YXJlaG91c2VfYjogIjEyIiwKICAgIHdhcmVob3VzZV9jOiAiNSIsCiAgICB0b3RhbDogIjE3IiwKICAgIHN0YXR1czogIlx1MjZBMCBMb3cgU3RvY2siCiAgfSwKICB7CiAgICBwcm9kdWN0OiAiaVBhZCBBaXIiLAogICAgd2FyZWhvdXNlX2E6ICIyMyIsCiAgICB3YXJlaG91c2VfYjogIjQ1IiwKICAgIHdhcmVob3VzZV9jOiAiNjciLAogICAgdG90YWw6ICIxMzUiLAogICAgc3RhdHVzOiAiXHUyNzEzIEluIFN0b2NrIgogIH0KXX0KICAgICAgICAgIGRhdGFOYW1lPSJwcm9kdWN0cyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5UYWJsZSB3aXRoIEZ1bGwgR3JpZDwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkNvbXBsZXRlIGdyaWQgbGluZXMgZm9yIG1heGltdW0gcmVhZGFiaWxpdHkgYW5kIHN0cnVjdHVyZS48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJTZXJ2ZXIgTW9uaXRvcmluZyBEYXNoYm9hcmQiCiAgICAgICAgICBoZWFkaW5nMj0iUmVhbC10aW1lIG1ldHJpY3MgYWNyb3NzIHJlZ2lvbnMiCiAgICAgICAgICAuc2hvd0dyaWQ9JHt0cnVlfQogICAgICAgICAgLmRhdGE9JHtbCiAgewogICAgc2VydmVyOiAiQVBJLTEiLAogICAgcmVnaW9uOiAiVVMtRWFzdCIsCiAgICBjcHU6ICI0NSUiLAogICAgbWVtb3J5OiAiNjIlIiwKICAgIGRpc2s6ICI3OCUiLAogICAgbGF0ZW5jeTogIjEybXMiLAogICAgdXB0aW1lOiAiOTkuOSUiLAogICAgc3RhdHVzOiAiXHV7MUY3RTJ9IEhlYWx0aHkiCiAgfSwKICB7CiAgICBzZXJ2ZXI6ICJBUEktMiIsCiAgICByZWdpb246ICJFVS1XZXN0IiwKICAgIGNwdTogIjM4JSIsCiAgICBtZW1vcnk6ICI1NSUiLAogICAgZGlzazogIjQ1JSIsCiAgICBsYXRlbmN5OiAiMjVtcyIsCiAgICB1cHRpbWU6ICI5OS44JSIsCiAgICBzdGF0dXM6ICJcdXsxRjdFMn0gSGVhbHRoeSIKICB9LAogIHsKICAgIHNlcnZlcjogIkRCLU1hc3RlciIsCiAgICByZWdpb246ICJVUy1FYXN0IiwKICAgIGNwdTogIjcyJSIsCiAgICBtZW1vcnk6ICI4MSUiLAogICAgZGlzazogIjkyJSIsCiAgICBsYXRlbmN5OiAiOG1zIiwKICAgIHVwdGltZTogIjEwMCUiLAogICAgc3RhdHVzOiAiXHV7MUY3RTF9IFdhcm5pbmciCiAgfSwKICB7CiAgICBzZXJ2ZXI6ICJEQi1SZXBsaWNhIiwKICAgIHJlZ2lvbjogIkVVLVdlc3QiLAogICAgY3B1OiAiMjMlIiwKICAgIG1lbW9yeTogIjM0JSIsCiAgICBkaXNrOiAiNDUlIiwKICAgIGxhdGVuY3k6ICIxNW1zIiwKICAgIHVwdGltZTogIjk5LjclIiwKICAgIHN0YXR1czogIlx1ezFGN0UyfSBIZWFsdGh5IgogIH0sCiAgewogICAgc2VydmVyOiAiQ2FjaGUtMSIsCiAgICByZWdpb246ICJBUC1Tb3V0aCIsCiAgICBjcHU6ICI4OSUiLAogICAgbWVtb3J5OiAiOTIlIiwKICAgIGRpc2s6ICIxMiUiLAogICAgbGF0ZW5jeTogIjEyMG1zIiwKICAgIHVwdGltZTogIjk4LjUlIiwKICAgIHN0YXR1czogIlx1ezFGNTM0fSBDcml0aWNhbCIKICB9Cl19CiAgICAgICAgICBkYXRhTmFtZT0ic2VydmVycyIKICAgICAgICAgIC5kYXRhQWN0aW9ucz0iJHtbCiAgewogICAgbmFtZTogIlNTSCBDb25uZWN0IiwKICAgIGljb25OYW1lOiAibHVjaWRlOnRlcm1pbmFsIiwKICAgIHR5cGU6IFsiaW5Sb3ciXSwKICAgIGFjdGlvbkZ1bmM6IGFzeW5jIChvcHRpb25zQXJnKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJDb25uZWN0aW5nIHRvOiIsIG9wdGlvbnNBcmcuaXRlbS5zZXJ2ZXIpOwogICAgfQogIH0sCiAgewogICAgbmFtZTogIlZpZXcgTG9ncyIsCiAgICBpY29uTmFtZTogImx1Y2lkZTpmaWxlLXRleHQiLAogICAgdHlwZTogWyJpblJvdyIsICJjb250ZXh0bWVudSJdLAogICAgYWN0aW9uRnVuYzogYXN5bmMgKG9wdGlvbnNBcmcpID0+IHsKICAgICAgY29uc29sZS5sb2coIlZpZXdpbmcgbG9ncyBmb3I6Iiwgb3B0aW9uc0FyZy5pdGVtLnNlcnZlcik7CiAgICB9CiAgfSwKICB7CiAgICBuYW1lOiAiUmVzdGFydCBTZXJ2ZXIiLAogICAgaWNvbk5hbWU6ICJsdWNpZGU6cmVmcmVzaC1jdyIsCiAgICB0eXBlOiBbImNvbnRleHRtZW51Il0sCiAgICBhY3Rpb25GdW5jOiBhc3luYyAob3B0aW9uc0FyZykgPT4gewogICAgICBjb25zb2xlLmxvZygiUmVzdGFydGluZzoiLCBvcHRpb25zQXJnLml0ZW0uc2VydmVyKTsKICAgIH0KICB9Cl19IgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlRhYmxlIHdpdGggSG9yaXpvbnRhbCBMaW5lcyBPbmx5PC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+RW1waGFzaXMgb24gcm93IHNlcGFyYXRpb24gd2l0aG91dCBjb2x1bW4gZGl2aWRlcnMuPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iU2FsZXMgUGVyZm9ybWFuY2UiCiAgICAgICAgICBoZWFkaW5nMj0iVG9wIHBlcmZvcm1lcnMgdGhpcyBxdWFydGVyIgogICAgICAgICAgLnNob3dIb3Jpem9udGFsTGluZXM9JHt0cnVlfQogICAgICAgICAgLnNob3dWZXJ0aWNhbExpbmVzPSR7ZmFsc2V9CiAgICAgICAgICAuZGF0YT0ke1sKICB7CiAgICBzYWxlc3BlcnNvbjogIkVtaWx5IEpvaG5zb24iLAogICAgcmVnaW9uOiAiTm9ydGggQW1lcmljYSIsCiAgICBkZWFsc19jbG9zZWQ6ICI0MiIsCiAgICByZXZlbnVlOiAiJDEuMk0iLAogICAgcXVvdGFfYWNoaWV2ZW1lbnQ6ICIxMjglIiwKICAgIHJhdGluZzogIlx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MCIKICB9LAogIHsKICAgIHNhbGVzcGVyc29uOiAiTWljaGFlbCBDaGVuIiwKICAgIHJlZ2lvbjogIkFzaWEgUGFjaWZpYyIsCiAgICBkZWFsc19jbG9zZWQ6ICIzOCIsCiAgICByZXZlbnVlOiAiJDk4MEsiLAogICAgcXVvdGFfYWNoaWV2ZW1lbnQ6ICIxMTUlIiwKICAgIHJhdGluZzogIlx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MCIKICB9LAogIHsKICAgIHNhbGVzcGVyc29uOiAiU2FyYWggV2lsbGlhbXMiLAogICAgcmVnaW9uOiAiRXVyb3BlIiwKICAgIGRlYWxzX2Nsb3NlZDogIjM1IiwKICAgIHJldmVudWU6ICIkODc1SyIsCiAgICBxdW90YV9hY2hpZXZlbWVudDogIjEwOCUiLAogICAgcmF0aW5nOiAiXHUyQjUwXHUyQjUwXHUyQjUwXHUyQjUwIgogIH0sCiAgewogICAgc2FsZXNwZXJzb246ICJEYXZpZCBHYXJjaWEiLAogICAgcmVnaW9uOiAiTGF0aW4gQW1lcmljYSIsCiAgICBkZWFsc19jbG9zZWQ6ICIzMSIsCiAgICByZXZlbnVlOiAiJDc1MEsiLAogICAgcXVvdGFfYWNoaWV2ZW1lbnQ6ICI5NSUiLAogICAgcmF0aW5nOiAiXHUyQjUwXHUyQjUwXHUyQjUwXHUyQjUwIgogIH0KXX0KICAgICAgICAgIGRhdGFOYW1lPSJzYWxlcyByZXBzIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlNpbXBsZSBUYWJsZSAoTm8gR3JpZCk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5DbGVhbiwgbWluaW1hbCBkZXNpZ24gd2l0aG91dCBncmlkIGxpbmVzLiBTZXQgc2hvd0dyaWQgdG8gZmFsc2UgdG8gZGlzYWJsZSB0aGUgZGVmYXVsdCBncmlkLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlRlYW0gTWVtYmVycyIKICAgICAgICAgIGhlYWRpbmcyPSJFbmdpbmVlcmluZyBEZXBhcnRtZW50IgogICAgICAgICAgLnNob3dHcmlkPSR7ZmFsc2V9CiAgICAgICAgICAuZGF0YT0ke1sKICB7CiAgICBuYW1lOiAiQWxpY2UgSm9obnNvbiIsCiAgICByb2xlOiAiTGVhZCBFbmdpbmVlciIsCiAgICBlbWFpbDogImFsaWNlQGNvbXBhbnkuY29tIiwKICAgIGxvY2F0aW9uOiAiU2FuIEZyYW5jaXNjbyIsCiAgICBqb2luZWQ6ICIyMDIwLTAzLTE1IgogIH0sCiAgewogICAgbmFtZTogIkJvYiBTbWl0aCIsCiAgICByb2xlOiAiU2VuaW9yIERldmVsb3BlciIsCiAgICBlbWFpbDogImJvYkBjb21wYW55LmNvbSIsCiAgICBsb2NhdGlvbjogIk5ldyBZb3JrIiwKICAgIGpvaW5lZDogIjIwMTktMDctMjIiCiAgfSwKICB7CiAgICBuYW1lOiAiQ2hhcmxpZSBEYXZpcyIsCiAgICByb2xlOiAiRGV2T3BzIEVuZ2luZWVyIiwKICAgIGVtYWlsOiAiY2hhcmxpZUBjb21wYW55LmNvbSIsCiAgICBsb2NhdGlvbjogIkxvbmRvbiIsCiAgICBqb2luZWQ6ICIyMDIxLTAxLTEwIgogIH0sCiAgewogICAgbmFtZTogIkRpYW5hIE1hcnRpbmV6IiwKICAgIHJvbGU6ICJGcm9udGVuZCBEZXZlbG9wZXIiLAogICAgZW1haWw6ICJkaWFuYUBjb21wYW55LmNvbSIsCiAgICBsb2NhdGlvbjogIkJhcmNlbG9uYSIsCiAgICBqb2luZWQ6ICIyMDIyLTA1LTE4IgogIH0KXX0KICAgICAgICAgIGRhdGFOYW1lPSJ0ZWFtIG1lbWJlcnMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VGFibGUgd2l0aCBDdXN0b20gRGlzcGxheSBGdW5jdGlvbjwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlRyYW5zZm9ybSBkYXRhIGZvciBkaXNwbGF5IHVzaW5nIGN1c3RvbSBmb3JtYXR0aW5nLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlNhbGVzIFJlcG9ydCIKICAgICAgICAgIGhlYWRpbmcyPSJRNCAyMDIzIFBlcmZvcm1hbmNlIgogICAgICAgICAgLmRhdGE9JHtbCiAgewogICAgcHJvZHVjdDogIkVudGVycHJpc2UgTGljZW5zZSIsCiAgICB1bml0czogNDUsCiAgICByZXZlbnVlOiAyMjVlMywKICAgIGdyb3d0aDogMC4yMywKICAgIGZvcmVjYXN0OiAyOGU0CiAgfSwKICB7CiAgICBwcm9kdWN0OiAiUHJvZmVzc2lvbmFsIExpY2Vuc2UiLAogICAgdW5pdHM6IDEyOCwKICAgIHJldmVudWU6IDEyOGUzLAogICAgZ3Jvd3RoOiAwLjE1LAogICAgZm9yZWNhc3Q6IDE0N2UzCiAgfSwKICB7CiAgICBwcm9kdWN0OiAiU3RhcnRlciBMaWNlbnNlIiwKICAgIHVuaXRzOiAzNDIsCiAgICByZXZlbnVlOiA2ODQwMCwKICAgIGdyb3d0aDogMC40MiwKICAgIGZvcmVjYXN0OiA5N2UzCiAgfQpdfQogICAgICAgICAgLmRpc3BsYXlGdW5jdGlvbj0keyhpdGVtKSA9PiAoewogIFByb2R1Y3Q6IGl0ZW0ucHJvZHVjdCwKICAiVW5pdHMgU29sZCI6IGl0ZW0udW5pdHMudG9Mb2NhbGVTdHJpbmcoKSwKICBSZXZlbnVlOiAiJCIgKyBpdGVtLnJldmVudWUudG9Mb2NhbGVTdHJpbmcoKSwKICBHcm93dGg6IChpdGVtLmdyb3d0aCAqIDEwMCkudG9GaXhlZCgxKSArICIlIiwKICAiUTEgMjAyNCBGb3JlY2FzdCI6ICIkIiArIGl0ZW0uZm9yZWNhc3QudG9Mb2NhbGVTdHJpbmcoKQp9KX0KICAgICAgICAgIGRhdGFOYW1lPSJwcm9kdWN0cyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5FbXB0eSBUYWJsZSBTdGF0ZTwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkhvdyB0aGUgdGFibGUgbG9va3Mgd2hlbiBubyBkYXRhIGlzIGF2YWlsYWJsZS48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJObyBEYXRhIEF2YWlsYWJsZSIKICAgICAgICAgIGhlYWRpbmcyPSJUaGlzIHRhYmxlIGlzIGN1cnJlbnRseSBlbXB0eSIKICAgICAgICAgIC5kYXRhPSR7W119CiAgICAgICAgICBkYXRhTmFtZT0iaXRlbXMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+U2NoZW1hLUZpcnN0IENvbHVtbnMgKE5ldyk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5EZWZpbmVzIGNvbHVtbnMgZXhwbGljaXRseSBhbmQgcmVuZGVycyB2aWEgc2NoZW1hLiBObyBkaXNwbGF5RnVuY3Rpb24gbmVlZGVkLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlVzZXJzIChTY2hlbWEtRmlyc3QpIgogICAgICAgICAgaGVhZGluZzI9IkNvbHVtbnMgZGVmaW5lIHJlbmRlcmluZyBhbmQgb3JkZXIiCiAgICAgICAgICAuY29sdW1ucz0ke1sKICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImVtYWlsIiwgaGVhZGVyOiAiRW1haWwiLCByZW5kZXJlcjogKHY1KSA9PiBiMmA8ZGVlcy1iYWRnZT4ke3Y1fTwvZGVlcy1iYWRnZT5gIH0sCiAgeyBrZXk6ICJqb2luZWRBdCIsIGhlYWRlcjogIkpvaW5lZCIsIHJlbmRlcmVyOiAodjUpID0+IG5ldyBEYXRlKHY1KS50b0xvY2FsZURhdGVTdHJpbmcoKSB9Cl19CiAgICAgICAgICAuZGF0YT0ke1sKICB7IG5hbWU6ICJBbGljZSIsIGVtYWlsOiAiYWxpY2VAZXhhbXBsZS5jb20iLCBqb2luZWRBdDogIjIwMjItMDgtMDEiIH0sCiAgeyBuYW1lOiAiQm9iIiwgZW1haWw6ICJib2JAZXhhbXBsZS5jb20iLCBqb2luZWRBdDogIjIwMjEtMTItMTEiIH0sCiAgeyBuYW1lOiAiQ2Fyb2wiLCBlbWFpbDogImNhcm9sQGV4YW1wbGUuY29tIiwgam9pbmVkQXQ6ICIyMDIzLTAzLTIyIiB9Cl19CiAgICAgICAgICBkYXRhTmFtZT0idXNlcnMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+UGFydGlhbCBTY2hlbWEgKyBBdWdtZW50IChOZXcpPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+UHJvdmlkZXMgb25seSB0aGUgaW1wb3J0YW50IGNvbHVtbnM7IHRoZSByZXN0IGFyZSBtZXJnZWQgaW4gZnJvbSBkaXNwbGF5RnVuY3Rpb24uPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iVXNlcnMgKFBhcnRpYWwgKyBBdWdtZW50KSIKICAgICAgICAgIGhlYWRpbmcyPSJNaXNzaW5nIGNvbHVtbnMgYXJlIGRlcml2ZWQiCiAgICAgICAgICAuY29sdW1ucz0ke1sKICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfQpdfQogICAgICAgICAgLmRpc3BsYXlGdW5jdGlvbj0keyh1NykgPT4gKHsgbmFtZTogdTcubmFtZSwgZW1haWw6IHU3LmVtYWlsLCByb2xlOiB1Ny5yb2xlIH0pfQogICAgICAgICAgLmF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uPSR7dHJ1ZX0KICAgICAgICAgIC5kYXRhPSR7WwogIHsgbmFtZTogIkVyaW4iLCBlbWFpbDogImVyaW5AZXhhbXBsZS5jb20iLCByb2xlOiAiQWRtaW4iIH0sCiAgeyBuYW1lOiAiRmlubiIsIGVtYWlsOiAiZmlubkBleGFtcGxlLmNvbSIsIHJvbGU6ICJVc2VyIiB9LAogIHsgbmFtZTogIkdpbmEiLCBlbWFpbDogImdpbmFAZXhhbXBsZS5jb20iLCByb2xlOiAiVXNlciIgfQpdfQogICAgICAgICAgZGF0YU5hbWU9InVzZXJzIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIiAKICAgICAgICAgICBAc2VsZWN0aW9uQ2hhbmdlPSR7KGUxMSkgPT4gewogIGNvbnNvbGUubG9nKCJTZWxlY3Rpb24gY2hhbmdlZCIsIGUxMS5kZXRhaWwpOwp9fQogICAgICAgICAgIEBzZWFyY2gtY2hhbmdlZD0keyhlMTEpID0+IHsKICBjb25zdCB0YmwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFibGVGaWx0ZXJTZWxlY3REZW1vIik7CiAgaWYgKHRibCkKICAgIHRibC5zZXRGaWx0ZXJUZXh0KGUxMS5kZXRhaWwudmFsdWUpOwp9fQogICAgICAgICAgIEBzZWFyY2gtc3VibWl0PSR7KGUxMSkgPT4gewogIGNvbnN0IHRibCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YWJsZUZpbHRlclNlbGVjdERlbW8iKTsKICBpZiAodGJsKQogICAgdGJsLnNldEZpbHRlclRleHQoZTExLmRldGFpbC52YWx1ZSk7Cn19CiAgICAgID4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkZpbHRlcmluZyArIE11bHRpLVNlbGVjdGlvbiAoTmV3KTwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlVzZSB0aGUgc2VhcmNoIGJhciB0byBmaWx0ZXIgcm93czsgdG9nZ2xlIHNlbGVjdGlvbiB2aWEgY2hlY2tib3hlcy4gQ2xpY2sgaGVhZGVycyB0byBzb3J0LjwvcD4KICAgICAgICA8ZGVlcy1zZWFyY2hiYXI+PC9kZWVzLXNlYXJjaGJhcj4KICAgICAgICA8ZGl2IHN0eWxlPSJoZWlnaHQ6IDEycHgiPjwvZGl2PgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBpZD0idGFibGVGaWx0ZXJTZWxlY3REZW1vIgogICAgICAgICAgaGVhZGluZzE9IkludmVudG9yeSAoRmlsdGVyICsgU2VsZWN0KSIKICAgICAgICAgIGhlYWRpbmcyPSJUcnkgdHlwaW5nIHRvIGZpbHRlciBhbmQgc2VsZWN0aW5nIG11bHRpcGxlIHJvd3MiCiAgICAgICAgICAuc2VsZWN0aW9uTW9kZT0keyJtdWx0aSJ9CiAgICAgICAgICAucm93S2V5PSR7InNrdSJ9CiAgICAgICAgICAuY29sdW1ucz0ke1sKICB7IGtleTogInNrdSIsIGhlYWRlcjogIlNLVSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJuYW1lIiwgaGVhZGVyOiAiTmFtZSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJzdG9jayIsIGhlYWRlcjogIlN0b2NrIiwgc29ydGFibGU6IHRydWUgfQpdfQogICAgICAgICAgLmRhdGE9JHtbCiAgeyBza3U6ICJBLTEwMCIsIG5hbWU6ICJVU0ItQyBDYWJsZSIsIHN0b2NrOiAxMjAgfSwKICB7IHNrdTogIkEtMTAxIiwgbmFtZTogIldpcmVsZXNzIE1vdXNlIiwgc3RvY2s6IDU1IH0sCiAgeyBza3U6ICJBLTEwMiIsIG5hbWU6ICJMYXB0b3AgU3RhbmQiLCBzdG9jazogMTggfSwKICB7IHNrdTogIkItMjAwIiwgbmFtZTogIktleWJvYXJkIChJU08pIiwgc3RvY2s6IDg5IH0sCiAgeyBza3U6ICJCLTIwMSIsIG5hbWU6ICJIRE1JIEFkYXB0ZXIiLCBzdG9jazogMCB9LAogIHsgc2t1OiAiQy0zMDAiLCBuYW1lOiAiV2ViY2FtIDEwODBwIiwgc3RvY2s6IDQyIH0KXX0KICAgICAgICAgIGRhdGFOYW1lPSJpdGVtcyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5Db2x1bW4gRmlsdGVycyArIFN0aWNreSBIZWFkZXIgKE5ldyk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5QZXItY29sdW1uIHF1aWNrIGZpbHRlcnMgYW5kIHN0aWNreSBoZWFkZXIgd2l0aCBpbnRlcm5hbCBzY3JvbGwuIFRyeSBmaWx0ZXJpbmcgdGhlIE5hbWUgY29sdW1uLiBVc2VzIC0tdGFibGUtbWF4LWhlaWdodCB2YXIuPC9wPgogICAgICAgIDxzdHlsZT4KICAgICAgICAgIGRlZXMtdGFibGVbc3RpY2t5LWhlYWRlcl0geyAtLXRhYmxlLW1heC1oZWlnaHQ6IDIyMHB4OyB9CiAgICAgICAgPC9zdHlsZT4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IkVtcGxveWVlcyIKICAgICAgICAgIGhlYWRpbmcyPSJRdWljayBmaWx0ZXIgcGVyIGNvbHVtbiArIHN0aWNreSBoZWFkZXIiCiAgICAgICAgICAuc2hvd0NvbHVtbkZpbHRlcnM9JHt0cnVlfQogICAgICAgICAgLnN0aWNreUhlYWRlcj0ke3RydWV9CiAgICAgICAgICAuY29sdW1ucz0ke1sKICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImVtYWlsIiwgaGVhZGVyOiAiRW1haWwiLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAiZGVwYXJ0bWVudCIsIGhlYWRlcjogIkRlcGFydG1lbnQiLCBzb3J0YWJsZTogdHJ1ZSB9Cl19CiAgICAgICAgICAuZGF0YT0ke1sKICB7IG5hbWU6ICJBbGljZSBKb2huc29uIiwgZW1haWw6ICJhbGljZUBjb3JwLmNvbSIsIGRlcGFydG1lbnQ6ICJFbmdpbmVlcmluZyIgfSwKICB7IG5hbWU6ICJCb2IgU21pdGgiLCBlbWFpbDogImJvYkBjb3JwLmNvbSIsIGRlcGFydG1lbnQ6ICJTYWxlcyIgfSwKICB7IG5hbWU6ICJDaGFybGllIERhdmlzIiwgZW1haWw6ICJjaGFybGllQGNvcnAuY29tIiwgZGVwYXJ0bWVudDogIkhSIiB9LAogIHsgbmFtZTogIkRpYW5hIE1hcnRpbmV6IiwgZW1haWw6ICJkaWFuYUBjb3JwLmNvbSIsIGRlcGFydG1lbnQ6ICJFbmdpbmVlcmluZyIgfSwKICB7IG5hbWU6ICJFdGhhbiBCcm93biIsIGVtYWlsOiAiZXRoYW5AY29ycC5jb20iLCBkZXBhcnRtZW50OiAiRmluYW5jZSIgfSwKICB7IG5hbWU6ICJGaW9uYSBDbGFyayIsIGVtYWlsOiAiZmlvbmFAY29ycC5jb20iLCBkZXBhcnRtZW50OiAiU2FsZXMiIH0sCiAgeyBuYW1lOiAiR3JhY2UgTGVlIiwgZW1haWw6ICJncmFjZUBjb3JwLmNvbSIsIGRlcGFydG1lbnQ6ICJFbmdpbmVlcmluZyIgfSwKICB7IG5hbWU6ICJIZW5yeSBXaWxzb24iLCBlbWFpbDogImhlbnJ5QGNvcnAuY29tIiwgZGVwYXJ0bWVudDogIk1hcmtldGluZyIgfSwKICB7IG5hbWU6ICJJcmVuZSBXYWxrZXIiLCBlbWFpbDogImlyZW5lQGNvcnAuY29tIiwgZGVwYXJ0bWVudDogIkZpbmFuY2UiIH0sCiAgeyBuYW1lOiAiSmFjayBUdXJuZXIiLCBlbWFpbDogImphY2tAY29ycC5jb20iLCBkZXBhcnRtZW50OiAiU3VwcG9ydCIgfQpdfQogICAgICAgICAgZGF0YU5hbWU9ImVtcGxveWVlcyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiIKICAgICAgICBAc2VhcmNoUmVxdWVzdD0ke2FzeW5jIChlMTEpID0+IHsKICBjb25zdCB7IHF1ZXJ5IH0gPSBlMTEuZGV0YWlsIHx8IHsgcXVlcnk6ICIiIH07CiAgY29uc3QgdGFibGUyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlcnZlclNlYXJjaERlbW8iKTsKICBjb25zdCBiYXNlRGF0YSA9IFsKICAgIHsgaWQ6IDEsIG5hbWU6ICJBbGljZSIsIGNpdHk6ICJCZXJsaW4iLCB0aXRsZTogIkVuZ2luZWVyIiB9LAogICAgeyBpZDogMiwgbmFtZTogIkJvYiIsIGNpdHk6ICJQYXJpcyIsIHRpdGxlOiAiRGVzaWduZXIiIH0sCiAgICB7IGlkOiAzLCBuYW1lOiAiQ2hhcmxpZSIsIGNpdHk6ICJMb25kb24iLCB0aXRsZTogIk1hbmFnZXIiIH0sCiAgICB7IGlkOiA0LCBuYW1lOiAiRGlhbmEiLCBjaXR5OiAiTWFkcmlkIiwgdGl0bGU6ICJFbmdpbmVlciIgfSwKICAgIHsgaWQ6IDUsIG5hbWU6ICJFdGhhbiIsIGNpdHk6ICJSb21lIiwgdGl0bGU6ICJTdXBwb3J0IiB9CiAgXTsKICBhd2FpdCBuZXcgUHJvbWlzZSgocjExKSA9PiBzZXRUaW1lb3V0KHIxMSwgMzAwKSk7CiAgY29uc3QgcTIgPSBTdHJpbmcocXVlcnkgfHwgIiIpLnRvTG93ZXJDYXNlKCk7CiAgY29uc3QgZmlsdGVyZWQgPSBxMiA/IGJhc2VEYXRhLmZpbHRlcigocjExKSA9PiBPYmplY3QudmFsdWVzKHIxMSkuc29tZSgodjUpID0+IFN0cmluZyh2NSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxMikpKSA6IGJhc2VEYXRhOwogIHRhYmxlMi5kYXRhID0gZmlsdGVyZWQ7Cn19CiAgICAgID4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlNlcnZlciBTZWFyY2ggKE5ldyk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5TZWxlY3QgU2VydmVyIG1vZGUsIHR5cGUgYSBxdWVyeSwgYW5kIHdhdGNoIHRoZSB0YWJsZSBmZXRjaCBzaW11bGF0ZWQgcmVzdWx0cy48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGlkPSJzZXJ2ZXJTZWFyY2hEZW1vIgogICAgICAgICAgaGVhZGluZzE9IlBlb3BsZSAoU2VydmVyIFNlYXJjaCkiCiAgICAgICAgICBoZWFkaW5nMj0iQ2xpY2sgU2VhcmNoLCBjaG9vc2UgU2VydmVyIG1vZGUsIGFuZCB0eXBlIgogICAgICAgICAgLmNvbHVtbnM9JHtbCiAgeyBrZXk6ICJuYW1lIiwgaGVhZGVyOiAiTmFtZSIgfSwKICB7IGtleTogImNpdHkiLCBoZWFkZXI6ICJDaXR5IiB9LAogIHsga2V5OiAidGl0bGUiLCBoZWFkZXI6ICJUaXRsZSIgfQpdfQogICAgICAgICAgLmRhdGE9JHtbCiAgeyBpZDogMSwgbmFtZTogIkFsaWNlIiwgY2l0eTogIkJlcmxpbiIsIHRpdGxlOiAiRW5naW5lZXIiIH0sCiAgeyBpZDogMiwgbmFtZTogIkJvYiIsIGNpdHk6ICJQYXJpcyIsIHRpdGxlOiAiRGVzaWduZXIiIH0sCiAgeyBpZDogMywgbmFtZTogIkNoYXJsaWUiLCBjaXR5OiAiTG9uZG9uIiwgdGl0bGU6ICJNYW5hZ2VyIiB9LAogIHsgaWQ6IDQsIG5hbWU6ICJEaWFuYSIsIGNpdHk6ICJNYWRyaWQiLCB0aXRsZTogIkVuZ2luZWVyIiB9LAogIHsgaWQ6IDUsIG5hbWU6ICJFdGhhbiIsIGNpdHk6ICJSb21lIiwgdGl0bGU6ICJTdXBwb3J0IiB9Cl19CiAgICAgICAgICBkYXRhTmFtZT0icGVvcGxlIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPldpZGUgUHJvcGVydGllcyArIE1hbnkgQWN0aW9uczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkEgdGFibGUgd2l0aCBtYW55IGNvbHVtbnMgYW5kIHJpY2ggYWN0aW9ucyB0byBzdHJlc3MgdGVzdCBsYXlvdXQgYW5kIHN0aWNreSBBY3Rpb25zLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlBlb3BsZSBEaXJlY3RvcnkiCiAgICAgICAgICBoZWFkaW5nMj0iTWFueSBwcm9wZXJ0aWVzIGFuZCBhY3Rpb25zIgogICAgICAgICAgLmNvbHVtbnM9JHtbCiAgeyBrZXk6ICJpZCIsIGhlYWRlcjogIklEIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogInJvbGUiLCBoZWFkZXI6ICJSb2xlIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImRlcGFydG1lbnQiLCBoZWFkZXI6ICJEZXBhcnRtZW50Iiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImVtYWlsIiwgaGVhZGVyOiAiRW1haWwiIH0sCiAgeyBrZXk6ICJwaG9uZSIsIGhlYWRlcjogIlBob25lIiB9LAogIHsga2V5OiAibG9jYXRpb24iLCBoZWFkZXI6ICJMb2NhdGlvbiIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJzdGF0dXMiLCBoZWFkZXI6ICJTdGF0dXMiLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAiY3JlYXRlZEF0IiwgaGVhZGVyOiAiQ3JlYXRlZCIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJ1cGRhdGVkQXQiLCBoZWFkZXI6ICJVcGRhdGVkIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImxhc3RMb2dpbiIsIGhlYWRlcjogIkxhc3QgTG9naW4iLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAicHJvamVjdHMiLCBoZWFkZXI6ICJQcm9qZWN0cyIgfSwKICB7IGtleTogInRhZ3MiLCBoZWFkZXI6ICJUYWdzIiB9LAogIHsga2V5OiAibm90ZXMiLCBoZWFkZXI6ICJOb3RlcyIgfQpdfQogICAgICAgICAgLmRhdGE9JHtbCiAgeyBpZDogMSwgbmFtZTogIkFsaWNlIEpvaG5zb24iLCByb2xlOiAiRW5naW5lZXIiLCBkZXBhcnRtZW50OiAiUiZEIiwgZW1haWw6ICJhbGljZUBjb3JwLmNvbSIsIHBob25lOiAiKzEgMjAyIDU1NSAwMTExIiwgbG9jYXRpb246ICJCZXJsaW4iLCBzdGF0dXM6ICJBY3RpdmUiLCBjcmVhdGVkQXQ6ICIyMDIzLTAxLTEyIiwgdXBkYXRlZEF0OiAiMjAyNC0wNS0wMyIsIGxhc3RMb2dpbjogIjIwMjQtMTAtMDEiLCBwcm9qZWN0czogNSwgdGFnczogInR5cGVzY3JpcHQsIHVpIiwgbm90ZXM6ICJNZW50b3IiIH0sCiAgeyBpZDogMiwgbmFtZTogIkJvYiBTbWl0aCIsIHJvbGU6ICJEZXNpZ25lciIsIGRlcGFydG1lbnQ6ICJEZXNpZ24iLCBlbWFpbDogImJvYkBjb3JwLmNvbSIsIHBob25lOiAiKzEgMjAyIDU1NSAwMTEyIiwgbG9jYXRpb246ICJQYXJpcyIsIHN0YXR1czogIkFjdGl2ZSIsIGNyZWF0ZWRBdDogIjIwMjItMTEtMDUiLCB1cGRhdGVkQXQ6ICIyMDI0LTA0LTEwIiwgbGFzdExvZ2luOiAiMjAyNC0wOS0yOCIsIHByb2plY3RzOiA4LCB0YWdzOiAiZmlnbWEsIGJyYW5kIiwgbm90ZXM6ICJQYXJ0LXRpbWUiIH0sCiAgeyBpZDogMywgbmFtZTogIkNoYXJsaWUgRGF2aXMiLCByb2xlOiAiTWFuYWdlciIsIGRlcGFydG1lbnQ6ICJPcHMiLCBlbWFpbDogImNoYXJsaWVAY29ycC5jb20iLCBwaG9uZTogIisxIDIwMiA1NTUgMDExMyIsIGxvY2F0aW9uOiAiTG9uZG9uIiwgc3RhdHVzOiAiT24gTGVhdmUiLCBjcmVhdGVkQXQ6ICIyMDIxLTA0LTIxIiwgdXBkYXRlZEF0OiAiMjAyNC0wMi0xNSIsIGxhc3RMb2dpbjogIjIwMjQtMDgtMTIiLCBwcm9qZWN0czogMywgdGFnczogInNyZSwgbGVhZGVyc2hpcCIsIG5vdGVzOiAiIiB9LAogIHsgaWQ6IDQsIG5hbWU6ICJEaWFuYSBNYXJ0aW5leiIsIHJvbGU6ICJFbmdpbmVlciIsIGRlcGFydG1lbnQ6ICJQbGF0Zm9ybSIsIGVtYWlsOiAiZGlhbmFAY29ycC5jb20iLCBwaG9uZTogIisxIDIwMiA1NTUgMDExNCIsIGxvY2F0aW9uOiAiTWFkcmlkIiwgc3RhdHVzOiAiQWN0aXZlIiwgY3JlYXRlZEF0OiAiMjAyMC0wNi0zMCIsIHVwZGF0ZWRBdDogIjIwMjQtMDYtMjUiLCBsYXN0TG9naW46ICIyMDI0LTEwLTAyIiwgcHJvamVjdHM6IDYsIHRhZ3M6ICJub2RlLCBhcGkiLCBub3RlczogIk9uLWNhbGwiIH0sCiAgeyBpZDogNSwgbmFtZTogIkV0aGFuIEJyb3duIiwgcm9sZTogIlN1cHBvcnQiLCBkZXBhcnRtZW50OiAiQ1MiLCBlbWFpbDogImV0aGFuQGNvcnAuY29tIiwgcGhvbmU6ICIrMSAyMDIgNTU1IDAxMTUiLCBsb2NhdGlvbjogIlJvbWUiLCBzdGF0dXM6ICJJbmFjdGl2ZSIsIGNyZWF0ZWRBdDogIjIwMTktMDktMTgiLCB1cGRhdGVkQXQ6ICIyMDI0LTAzLTA5IiwgbGFzdExvZ2luOiAiMjAyNC0wNi0xOSIsIHByb2plY3RzOiAyLCB0YWdzOiAiemVuZGVzayIsIG5vdGVzOiAiUmVoaXJlIiB9LAogIHsgaWQ6IDYsIG5hbWU6ICJGaW9uYSBDbGFyayIsIHJvbGU6ICJRQSIsIGRlcGFydG1lbnQ6ICJRQSIsIGVtYWlsOiAiZmlvbmFAY29ycC5jb20iLCBwaG9uZTogIisxIDIwMiA1NTUgMDExNiIsIGxvY2F0aW9uOiAiVmllbm5hIiwgc3RhdHVzOiAiQWN0aXZlIiwgY3JlYXRlZEF0OiAiMjAyMi0wMy0xNCIsIHVwZGF0ZWRBdDogIjIwMjQtMDMtMDEiLCBsYXN0TG9naW46ICIyMDI0LTA5LTA3IiwgcHJvamVjdHM6IDcsIHRhZ3M6ICJwbGF5d3JpZ2h0Iiwgbm90ZXM6ICIiIH0KXX0KICAgICAgICAgIC5kYXRhQWN0aW9ucz0ke1sKICB7IG5hbWU6ICJWaWV3IiwgaWNvbk5hbWU6ICJsdWNpZGU6ZXllIiwgdHlwZTogWyJpblJvdyIsICJjb250ZXh0bWVudSJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJ2aWV3IiwgaXRlbSk7CiAgfSB9LAogIHsgbmFtZTogIkVkaXQiLCBpY29uTmFtZTogImx1Y2lkZTplZGl0IiwgdHlwZTogWyJpblJvdyIsICJjb250ZXh0bWVudSJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJlZGl0IiwgaXRlbSk7CiAgfSB9LAogIHsgbmFtZTogIkRlbGV0ZSIsIGljb25OYW1lOiAibHVjaWRlOnRyYXNoIiwgdHlwZTogWyJpblJvdyIsICJjb250ZXh0bWVudSJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJkZWxldGUiLCBpdGVtKTsKICB9IH0sCiAgeyBuYW1lOiAiTWVzc2FnZSIsIGljb25OYW1lOiAibHVjaWRlOm1lc3NhZ2Utc3F1YXJlIiwgdHlwZTogWyJpblJvdyJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJtZXNzYWdlIiwgaXRlbSk7CiAgfSB9LAogIHsgbmFtZTogIkhpc3RvcnkiLCBpY29uTmFtZTogImx1Y2lkZTpjbG9jayIsIHR5cGU6IFsiaW5Sb3ciXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgaXRlbSB9KSA9PiB7CiAgICBjb25zb2xlLmxvZygiaGlzdG9yeSIsIGl0ZW0pOwogIH0gfSwKICB7IG5hbWU6ICJBZGQgTmV3IiwgaWNvbk5hbWU6ICJsdWNpZGU6cGx1cyIsIHR5cGU6IFsiaGVhZGVyIl0sIGFjdGlvbkZ1bmM6IGFzeW5jICh7IHRhYmxlOiB0YWJsZTIgfSkgPT4gewogICAgY29uc29sZS5sb2coImFkZCIpOwogIH0gfSwKICB7IG5hbWU6ICJFeHBvcnQgQ1NWIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZG93bmxvYWQiLCB0eXBlOiBbImhlYWRlciJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyB0YWJsZTogdGFibGUyIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJleHBvcnQiKTsKICB9IH0sCiAgeyBuYW1lOiAiQnVsayBEZWxldGUiLCBpY29uTmFtZTogImx1Y2lkZTp0cmFzaC0yIiwgdHlwZTogWyJmb290ZXIiXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgdGFibGU6IHRhYmxlMiB9KSA9PiB7CiAgICBjb25zb2xlLmxvZygiYnVsayBkZWxldGUiKTsKICB9IH0KXX0KICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5TY3JvbGxhYmxlIFNtYWxsIEhlaWdodDwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlNhbWUgYXMgYWJvdmUsIGJ1dCB3aXRoIG1hbnkgaXRlbXMgYW5kIGEgc21hbGwgZml4ZWQgaGVpZ2h0IHRvIGZvcmNlIHZlcnRpY2FsIHNjcm9sbGluZyBpbnNpZGUgdGhlIHRhYmxlLiBBY3Rpb25zIHJlbWFpbiB2aXNpYmxlIG9uIHRoZSByaWdodDsgaG9yaXpvbnRhbCBzY3JvbGwgYXBwZWFycyBpZiBuZWVkZWQuPC9wPgogICAgICAgIDxzdHlsZT4KICAgICAgICAgICNzY3JvbGxTbWFsbEhlaWdodCB7IC0tdGFibGUtbWF4LWhlaWdodDogMjQwcHg7IH0KICAgICAgICA8L3N0eWxlPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBpZD0ic2Nyb2xsU21hbGxIZWlnaHQiCiAgICAgICAgICAuc3RpY2t5SGVhZGVyPSR7dHJ1ZX0KICAgICAgICAgIGhlYWRpbmcxPSJQZW9wbGUgRGlyZWN0b3J5IChTY3JvbGxhYmxlKSIKICAgICAgICAgIGhlYWRpbmcyPSJGb3JjZWQgc2Nyb2xsaW5nIHdpdGggbWFueSBpdGVtcyIKICAgICAgICAgIC5jb2x1bW5zPSR7WwogIHsga2V5OiAiaWQiLCBoZWFkZXI6ICJJRCIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJuYW1lIiwgaGVhZGVyOiAiTmFtZSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJyb2xlIiwgaGVhZGVyOiAiUm9sZSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJkZXBhcnRtZW50IiwgaGVhZGVyOiAiRGVwYXJ0bWVudCIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJlbWFpbCIsIGhlYWRlcjogIkVtYWlsIiB9LAogIHsga2V5OiAicGhvbmUiLCBoZWFkZXI6ICJQaG9uZSIgfSwKICB7IGtleTogImxvY2F0aW9uIiwgaGVhZGVyOiAiTG9jYXRpb24iLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAic3RhdHVzIiwgaGVhZGVyOiAiU3RhdHVzIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImNyZWF0ZWRBdCIsIGhlYWRlcjogIkNyZWF0ZWQiLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAidXBkYXRlZEF0IiwgaGVhZGVyOiAiVXBkYXRlZCIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJsYXN0TG9naW4iLCBoZWFkZXI6ICJMYXN0IExvZ2luIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogInByb2plY3RzIiwgaGVhZGVyOiAiUHJvamVjdHMiIH0sCiAgeyBrZXk6ICJ0YWdzIiwgaGVhZGVyOiAiVGFncyIgfSwKICB7IGtleTogIm5vdGVzIiwgaGVhZGVyOiAiTm90ZXMiIH0KXX0KICAgICAgICAgIC5kYXRhPSR7QXJyYXkuZnJvbSh7IGxlbmd0aDogMTAwIH0sIChfNCwgaTExKSA9PiAoewogIGlkOiBpMTEgKyAxLAogIG5hbWU6IGBVc2VyICR7aTExICsgMX1gLAogIHJvbGU6IFsiRW5naW5lZXIiLCAiRGVzaWduZXIiLCAiTWFuYWdlciIsICJRQSIsICJTdXBwb3J0Il1baTExICUgNV0sCiAgZGVwYXJ0bWVudDogWyJSJkQiLCAiRGVzaWduIiwgIk9wcyIsICJRQSIsICJDUyJdW2kxMSAlIDVdLAogIGVtYWlsOiBgdXNlciR7aTExICsgMX1AY29ycC5jb21gLAogIHBob25lOiBgKzEgMjAyIDU1NSAke1N0cmluZygxZTMgKyBpMTEpLnNsaWNlKC00KX1gLAogIGxvY2F0aW9uOiBbIkJlcmxpbiIsICJQYXJpcyIsICJMb25kb24iLCAiTWFkcmlkIiwgIlJvbWUiXVtpMTEgJSA1XSwKICBzdGF0dXM6IFsiQWN0aXZlIiwgIkluYWN0aXZlIiwgIk9uIExlYXZlIl1baTExICUgM10sCiAgY3JlYXRlZEF0OiBgMjAyMy0ke1N0cmluZyhpMTEgJSAxMiArIDEpLnBhZFN0YXJ0KDIsICIwIil9LSR7U3RyaW5nKGkxMSAlIDI4ICsgMSkucGFkU3RhcnQoMiwgIjAiKX1gLAogIHVwZGF0ZWRBdDogYDIwMjQtJHtTdHJpbmcoKGkxMSArIDMpICUgMTIgKyAxKS5wYWRTdGFydCgyLCAiMCIpfS0ke1N0cmluZygoaTExICsgNykgJSAyOCArIDEpLnBhZFN0YXJ0KDIsICIwIil9YCwKICBsYXN0TG9naW46IGAyMDI0LSR7U3RyaW5nKChpMTEgKyA2KSAlIDEyICsgMSkucGFkU3RhcnQoMiwgIjAiKX0tJHtTdHJpbmcoKGkxMSArIDEwKSAlIDI4ICsgMSkucGFkU3RhcnQoMiwgIjAiKX1gLAogIHByb2plY3RzOiBpMTEgJSAxMiwKICB0YWdzOiBpMTEgJSAyID8gInR5cGVzY3JpcHQiIDogImRlc2lnbiIsCiAgbm90ZXM6IGkxMSAlIDMgPyAiIiA6ICJOb3RlIgp9KSl9CiAgICAgICAgICAuZGF0YUFjdGlvbnM9JHtbCiAgeyBuYW1lOiAiVmlldyIsIGljb25OYW1lOiAibHVjaWRlOmV5ZSIsIHR5cGU6IFsiaW5Sb3ciXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgaXRlbSB9KSA9PiB7CiAgfSB9LAogIHsgbmFtZTogIkVkaXQiLCBpY29uTmFtZTogImx1Y2lkZTplZGl0IiwgdHlwZTogWyJpblJvdyJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICB9IH0sCiAgeyBuYW1lOiAiRGVsZXRlIiwgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2giLCB0eXBlOiBbImluUm93Il0sIGFjdGlvbkZ1bmM6IGFzeW5jICh7IGl0ZW0gfSkgPT4gewogIH0gfQpdfQogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdGFibGUvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIHRhYmxlU3R5bGVzID0gWwogIHRoZW1lRGVmYXVsdFN0eWxlcywKICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubWFpbmJveCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAxNnB4IDI0cHg7CiAgICAgICAgbWluLWhlaWdodDogNjRweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nQ29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQoKICAgICAgLmhlYWRpbmcxIHsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQogICAgICAKICAgICAgLmhlYWRpbmcyIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgfQoKICAgICAgLmhlYWRpbmdTZXBhcmF0aW9uIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAuaGVhZGVyQWN0aW9ucyB7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CiAgICAgIAogICAgICAuaGVhZGVyQWN0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5oZWFkZXJBY3Rpb246aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgfQoKICAgICAgLmhlYWRlckFjdGlvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgfQoKICAgICAgLnNlYXJjaEdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC1nYXA6IDE2cHg7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgbWF4LWNvbnRlbnQ7CiAgICAgICAgcGFkZGluZzogMTZweCAyNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5OCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHsKICAgICAgICAuc2VhcmNoR3JpZCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qIGxldCBzZWFyY2ggbW9kZSBzaXplIHRvIGNvbnRlbnQgKG5vIGZvcmNlZCB3aWR0aCkgKi8KCiAgICAgIC5zZWFyY2hHcmlkLmhpZGRlbiB7CiAgICAgICAgaGVpZ2h0OiAwcHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBhZGRpbmc6IDBweCAyNHB4OwogICAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDBweDsKICAgICAgfQoKICAgICAgLnRhYmxlU2Nyb2xsIHsKICAgICAgICAvKiBlbmFibGUgaG9yaXpvbnRhbCBzY3JvbGwgb25seSB3aGVuIGNvbnRlbnQgZXhjZWVkcyB3aWR0aCAqLwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgLyogcHJldmVudCB2ZXJ0aWNhbCBzY3JvbGwgaW5zaWRlIHRoZSB0YWJsZSBjb250YWluZXIgKi8KICAgICAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICAgICAgLyogYXZvaWQgcmVzZXJ2aW5nIGV4dHJhIHNwYWNlIGZvciBjbGFzc2ljIHNjcm9sbGJhcnMgd2hlcmUgcG9zc2libGUgKi8KICAgICAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGUgYm90aC1lZGdlczsKICAgICAgfQogICAgICAvKiBIaWRlIGhvcml6b250YWwgc2Nyb2xsYmFyIGVudGlyZWx5IHdoZW4gbm90IHVzaW5nIHN0aWNreSBoZWFkZXIgKi8KICAgICAgOmhvc3QoOm5vdChbc3RpY2t5LWhlYWRlcl0pKSAudGFibGVTY3JvbGwgewogICAgICAgIC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTsgLyogSUUvRWRnZSAqLwogICAgICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTsgICAvKiBGaXJlZm94IChoaWRlcyBib3RoIGF4ZXMpICovCiAgICAgIH0KICAgICAgOmhvc3QoOm5vdChbc3RpY2t5LWhlYWRlcl0pKSAudGFibGVTY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBkaXNwbGF5OiBub25lOyAvKiBDaHJvbWUvU2FmYXJpICovCiAgICAgIH0KICAgICAgLyogSW4gc3RpY2t5LWhlYWRlciBtb2RlLCBoaWRlIG9ubHkgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyIGluIFdlYktpdC9CbGluayAqLwogICAgICA6aG9zdChbc3RpY2t5LWhlYWRlcl0pIC50YWJsZVNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXI6aG9yaXpvbnRhbCB7CiAgICAgICAgaGVpZ2h0OiAwcHg7CiAgICAgIH0KICAgICAgOmhvc3QoW3N0aWNreS1oZWFkZXJdKSAudGFibGVTY3JvbGwgewogICAgICAgIG1heC1oZWlnaHQ6IHZhcigtLXRhYmxlLW1heC1oZWlnaHQsIDM2MHB4KTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIC8qIGFsbG93IHRhYmxlIHRvIGdyb3cgd2lkZXIgdGhhbiBjb250YWluZXIgc28gYWN0aW9ucyBjb2x1bW4gY2FuIHN0aWNrICovCiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50OwogICAgICAgIG1pbi13aWR0aDogMTAwJTsKICAgICAgICBjYXB0aW9uLXNpZGU6IGJvdHRvbTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKICAgICAgICBib3JkZXItc3BhY2luZzogMDsKICAgICAgfQogICAgICAKICAgICAgLm5vRGF0YVNldCB7CiAgICAgICAgcGFkZGluZzogNDhweCAyNHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIHRoZWFkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KICAgICAgOmhvc3QoW3N0aWNreS1oZWFkZXJdKSB0aGVhZCB0aCB7CiAgICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgei1pbmRleDogMjsKICAgICAgfQogICAgICAKICAgICAgdGJvZHkgdHIgewogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIERlZmF1bHQgaG9yaXpvbnRhbCBsaW5lcyAoYm90dG9tIGJvcmRlciBvbmx5KSAqLwogICAgICB0Ym9keSB0ciB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0Ym9keSB0cjpsYXN0LWNoaWxkIHsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAvKiBGdWxsIGhvcml6b250YWwgbGluZXMgd2hlbiBlbmFibGVkICovCiAgICAgIDpob3N0KFtzaG93LWhvcml6b250YWwtbGluZXNdKSB0Ym9keSB0ciB7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctaG9yaXpvbnRhbC1saW5lc10pIHRib2R5IHRyOmZpcnN0LWNoaWxkIHsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy1ob3Jpem9udGFsLWxpbmVzXSkgdGJvZHkgdHI6bGFzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0Ym9keSB0cjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElIC8gMC41KSIsICJoc2woMCAwJSAxNC45JSAvIDAuNSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIENvbHVtbiBob3ZlciBlZmZlY3QgZm9yIGJldHRlciB0cmFjZWFiaWxpdHkgKi8KICAgICAgdGQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICAKICAgICAgdGQ6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSAvIDAuMykiLCAiaHNsKDAgMCUgMTQuOSUgLyAwLjMpIil9OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgICAgIHotaW5kZXg6IC0xOwogICAgICB9CiAgICAgIAogICAgICB0ZDpob3Zlcjo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEdyaWQgbW9kZSAtIHNob3dzIGJvdGggdmVydGljYWwgYW5kIGhvcml6b250YWwgbGluZXMgKi8KICAgICAgOmhvc3QoW3Nob3ctZ3JpZF0pIHRoIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy1ncmlkXSkgdGQgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtzaG93LWdyaWRdKSB0aDpmaXJzdC1jaGlsZCwKICAgICAgOmhvc3QoW3Nob3ctZ3JpZF0pIHRkOmZpcnN0LWNoaWxkIHsKICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy1ncmlkXSkgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQgewogICAgICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFN0aWNreSBBY3Rpb25zIGNvbHVtbiAocmlnaHQgcGlubmVkKSAqLwogICAgICB0aGVhZCB0aC5hY3Rpb25zQ29sLAogICAgICB0Ym9keSB0ZC5hY3Rpb25zQ29sIHsKICAgICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgfQogICAgICB0aGVhZCB0aC5hY3Rpb25zQ29sIHsgei1pbmRleDogMzsgfQogICAgICB0Ym9keSB0ZC5hY3Rpb25zQ29sIHsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIGJveC1zaGFkb3c6IC0xcHggMCAwIDAgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIHRib2R5IHRyLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQoKICAgICAgdGJvZHkgdHIuaGFzQXR0YWNobWVudCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMSkiLCAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgdGggewogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDI0cHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctdmVydGljYWwtbGluZXNdKSB0aCB7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIHRkIHsKICAgICAgICBwYWRkaW5nOiAxMnB4IDI0cHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtzaG93LXZlcnRpY2FsLWxpbmVzXSkgdGQgewogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0aDpmaXJzdC1jaGlsZCwKICAgICAgdGQ6Zmlyc3QtY2hpbGQgewogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgdGg6bGFzdC1jaGlsZCwKICAgICAgdGQ6bGFzdC1jaGlsZCB7CiAgICAgICAgcGFkZGluZy1yaWdodDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctdmVydGljYWwtbGluZXNdKSB0aDpsYXN0LWNoaWxkLAogICAgICA6aG9zdChbc2hvdy12ZXJ0aWNhbC1saW5lc10pIHRkOmxhc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLmlubmVyQ2VsbENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1pbi1oZWlnaHQ6IDI0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH0KICAgICAgdGQgaW5wdXQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDRweDsKICAgICAgICBib3R0b206IDRweDsKICAgICAgICBsZWZ0OiAyMHB4OwogICAgICAgIHJpZ2h0OiAyMHB4OwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTsKICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDhweCk7CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTsKICAgICAgfQogICAgICAKICAgICAgdGQgaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMikiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLyogZmlsdGVyIHJvdyAqLwogICAgICB0aGVhZCB0ci5maWx0ZXJzUm93IHRoIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCAxMnB4IDEycHg7CiAgICAgIH0KICAgICAgdGhlYWQgdHIuZmlsdGVyc1JvdyB0aCBpbnB1dFt0eXBlPSd0ZXh0J10gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgcGFkZGluZzogNnB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICB9CiAgICAgIC5hY3Rpb25zQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5hY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5hY3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDExLjglKSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmFjdGlvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgfQoKICAgICAgLmZvb3RlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBoZWlnaHQ6IDUycHg7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAudGFibGVTdGF0aXN0aWNzIHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAuZm9vdGVyQWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmZvb3RlckFjdGlvbnMgLmZvb3RlckFjdGlvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5mb290ZXJBY3Rpb25zIC5mb290ZXJBY3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5mb290ZXJBY3Rpb25zIC5mb290ZXJBY3Rpb24gZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgIH0KICBgCl07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdGFibGUvZGF0YS5qcwpmdW5jdGlvbiBjb21wdXRlQ29sdW1uc0Zyb21EaXNwbGF5RnVuY3Rpb24oZGlzcGxheUZ1bmN0aW9uLCBkYXRhKSB7CiAgaWYgKCFkYXRhIHx8IGRhdGEubGVuZ3RoID09PSAwKQogICAgcmV0dXJuIFtdOwogIGNvbnN0IGZpcnN0VHJhbnNmb3JtZWRJdGVtID0gZGlzcGxheUZ1bmN0aW9uKGRhdGFbMF0pOwogIGNvbnN0IGtleXMyID0gT2JqZWN0LmtleXMoZmlyc3RUcmFuc2Zvcm1lZEl0ZW0pOwogIHJldHVybiBrZXlzMi5tYXAoKGtleTIpID0+ICh7CiAgICBrZXk6IGtleTIsCiAgICBoZWFkZXI6IGtleTIsCiAgICB2YWx1ZTogKHJvdykgPT4gZGlzcGxheUZ1bmN0aW9uKHJvdylba2V5Ml0KICB9KSk7Cn0KZnVuY3Rpb24gY29tcHV0ZUVmZmVjdGl2ZUNvbHVtbnMoY29sdW1ucywgYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb24sIGRpc3BsYXlGdW5jdGlvbiwgZGF0YSkgewogIGNvbnN0IGJhc2UgPSAoY29sdW1ucyB8fCBbXSkuc2xpY2UoKTsKICBpZiAoIWF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uKQogICAgcmV0dXJuIGJhc2U7CiAgY29uc3QgZnJvbURpc3BsYXkgPSBjb21wdXRlQ29sdW1uc0Zyb21EaXNwbGF5RnVuY3Rpb24oZGlzcGxheUZ1bmN0aW9uLCBkYXRhKTsKICBjb25zdCBleGlzdGluZ0tleXMgPSBuZXcgU2V0KGJhc2UubWFwKChjMTEpID0+IFN0cmluZyhjMTEua2V5KSkpOwogIGZvciAoY29uc3QgY29sIG9mIGZyb21EaXNwbGF5KSB7CiAgICBpZiAoIWV4aXN0aW5nS2V5cy5oYXMoU3RyaW5nKGNvbC5rZXkpKSkgewogICAgICBiYXNlLnB1c2goY29sKTsKICAgIH0KICB9CiAgcmV0dXJuIGJhc2U7Cn0KZnVuY3Rpb24gZ2V0Q2VsbFZhbHVlKHJvdywgY29sLCBkaXNwbGF5RnVuY3Rpb24pIHsKICByZXR1cm4gY29sLnZhbHVlID8gY29sLnZhbHVlKHJvdykgOiByb3dbY29sLmtleV07Cn0KZnVuY3Rpb24gZ2V0Vmlld0RhdGEoZGF0YSwgZWZmZWN0aXZlQ29sdW1ucywgc29ydEtleSwgc29ydERpciwgZmlsdGVyVGV4dCwgY29sdW1uRmlsdGVycywgZmlsdGVyTW9kZSA9ICJ0YWJsZSIsIGx1Y2VuZVByZWRpY2F0ZSkgewogIGxldCBhcnIgPSBkYXRhLnNsaWNlKCk7CiAgY29uc3QgZnQgPSAoZmlsdGVyVGV4dCB8fCAiIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7CiAgY29uc3QgY2YgPSBjb2x1bW5GaWx0ZXJzIHx8IHt9OwogIGNvbnN0IGNmS2V5cyA9IE9iamVjdC5rZXlzKGNmKS5maWx0ZXIoKGs0KSA9PiAoY2ZbazRdID8/ICIiKS50cmltKCkubGVuZ3RoID4gMCk7CiAgaWYgKGZ0IHx8IGNmS2V5cy5sZW5ndGggPiAwKSB7CiAgICBhcnIgPSBhcnIuZmlsdGVyKChyb3cpID0+IHsKICAgICAgZm9yIChjb25zdCBrNCBvZiBjZktleXMpIHsKICAgICAgICBpZiAoZmlsdGVyTW9kZSA9PT0gImRhdGEiKSB7CiAgICAgICAgICBjb25zdCB2YWwgPSByb3dbazRdOwogICAgICAgICAgY29uc3QgczkgPSBTdHJpbmcodmFsID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgY29uc3QgbmVlZGxlID0gU3RyaW5nKGNmW2s0XSkudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGlmICghczkuaW5jbHVkZXMobmVlZGxlKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBjb2wyID0gZWZmZWN0aXZlQ29sdW1ucy5maW5kKChjMTEpID0+IFN0cmluZyhjMTEua2V5KSA9PT0gazQpOwogICAgICAgICAgaWYgKCFjb2wyIHx8IGNvbDIuaGlkZGVuIHx8IGNvbDIuZmlsdGVyYWJsZSA9PT0gZmFsc2UpCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgY29uc3QgdmFsID0gZ2V0Q2VsbFZhbHVlKHJvdywgY29sMik7CiAgICAgICAgICBjb25zdCBzOSA9IFN0cmluZyh2YWwgPz8gIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBjb25zdCBuZWVkbGUgPSBTdHJpbmcoY2ZbazRdKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgaWYgKCFzOS5pbmNsdWRlcyhuZWVkbGUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChmdCkgewogICAgICAgIGlmIChsdWNlbmVQcmVkaWNhdGUpIHsKICAgICAgICAgIGlmICghbHVjZW5lUHJlZGljYXRlKHJvdykpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBsZXQgYW55ID0gZmFsc2U7CiAgICAgICAgaWYgKGZpbHRlck1vZGUgPT09ICJkYXRhIikgewogICAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgT2JqZWN0LnZhbHVlcyhyb3cpKSB7CiAgICAgICAgICAgIGNvbnN0IHM5ID0gU3RyaW5nKHZhbCA/PyAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgaWYgKHM5LmluY2x1ZGVzKGZ0KSkgewogICAgICAgICAgICAgIGFueSA9IHRydWU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgZm9yIChjb25zdCBjb2wyIG9mIGVmZmVjdGl2ZUNvbHVtbnMpIHsKICAgICAgICAgICAgaWYgKGNvbDIuaGlkZGVuKQogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBjb25zdCB2YWwgPSBnZXRDZWxsVmFsdWUocm93LCBjb2wyKTsKICAgICAgICAgICAgY29uc3QgczkgPSBTdHJpbmcodmFsID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICBpZiAoczkuaW5jbHVkZXMoZnQpKSB7CiAgICAgICAgICAgICAgYW55ID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIWFueSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pOwogIH0KICBpZiAoIXNvcnRLZXkgfHwgIXNvcnREaXIpCiAgICByZXR1cm4gYXJyOwogIGNvbnN0IGNvbCA9IGVmZmVjdGl2ZUNvbHVtbnMuZmluZCgoYzExKSA9PiBTdHJpbmcoYzExLmtleSkgPT09IHNvcnRLZXkpOwogIGlmICghY29sKQogICAgcmV0dXJuIGFycjsKICBjb25zdCBkaXIgPSBzb3J0RGlyID09PSAiYXNjIiA/IDEgOiAtMTsKICBhcnIuc29ydCgoYTUsIGI1KSA9PiB7CiAgICBjb25zdCB2YSA9IGdldENlbGxWYWx1ZShhNSwgY29sKTsKICAgIGNvbnN0IHZiID0gZ2V0Q2VsbFZhbHVlKGI1LCBjb2wpOwogICAgaWYgKHZhID09IG51bGwgJiYgdmIgPT0gbnVsbCkKICAgICAgcmV0dXJuIDA7CiAgICBpZiAodmEgPT0gbnVsbCkKICAgICAgcmV0dXJuIC0xICogZGlyOwogICAgaWYgKHZiID09IG51bGwpCiAgICAgIHJldHVybiAxICogZGlyOwogICAgaWYgKHR5cGVvZiB2YSA9PT0gIm51bWJlciIgJiYgdHlwZW9mIHZiID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuICh2YSAtIHZiKSAqIGRpcjsKICAgIGNvbnN0IHNhID0gU3RyaW5nKHZhKS50b0xvd2VyQ2FzZSgpOwogICAgY29uc3Qgc2IgPSBTdHJpbmcodmIpLnRvTG93ZXJDYXNlKCk7CiAgICBpZiAoc2EgPCBzYikKICAgICAgcmV0dXJuIC0xICogZGlyOwogICAgaWYgKHNhID4gc2IpCiAgICAgIHJldHVybiAxICogZGlyOwogICAgcmV0dXJuIDA7CiAgfSk7CiAgcmV0dXJuIGFycjsKfQoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRhYmxlL2x1Y2VuZS5qcwpmdW5jdGlvbiBzdHJpcFF1b3RlcyhzOSkgewogIGlmIChzOS5zdGFydHNXaXRoKCciJykgJiYgczkuZW5kc1dpdGgoJyInKSB8fCBzOS5zdGFydHNXaXRoKCInIikgJiYgczkuZW5kc1dpdGgoIiciKSkgewogICAgcmV0dXJuIHM5LnNsaWNlKDEsIC0xKTsKICB9CiAgcmV0dXJuIHM5Owp9CmZ1bmN0aW9uIHNwbGl0QnlPcihpbnB1dCkgewogIHJldHVybiBpbnB1dC5zcGxpdCgvXHMrT1JccysvaSkubWFwKChzOSkgPT4gczkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7Cn0KZnVuY3Rpb24gc3BsaXRCeUFuZChpbnB1dCkgewogIHJldHVybiBpbnB1dC5zcGxpdCgvXHMrQU5EXHMrL2kpLm1hcCgoczkpID0+IHM5LnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOwp9CmZ1bmN0aW9uIHBhcnNlVGVybShyYXcyKSB7CiAgaWYgKCFyYXcyKQogICAgcmV0dXJuIG51bGw7CiAgbGV0IG5lZ2F0ZSA9IGZhbHNlOwogIGNvbnN0IG5vdE1hdGNoID0gcmF3Mi5tYXRjaCgvXlxzKihOT1Rccyt8LSlccyooLiopJC9pKTsKICBpZiAobm90TWF0Y2gpIHsKICAgIG5lZ2F0ZSA9IHRydWU7CiAgICByYXcyID0gbm90TWF0Y2hbMl07CiAgfQogIGNvbnN0IHJhbmdlTWF0Y2ggPSByYXcyLm1hdGNoKC9eKFteOlxzXSspXHMqOlxzKlxbKC4qPylccytUT1xzKyguKj8pXF0kL2kpOwogIGlmIChyYW5nZU1hdGNoKSB7CiAgICByZXR1cm4gewogICAgICBmaWVsZDogcmFuZ2VNYXRjaFsxXSwKICAgICAgbmVnYXRlLAogICAgICByYW5nZTogeyBsb3dlcjogc3RyaXBRdW90ZXMocmFuZ2VNYXRjaFsyXSkudG9Mb3dlckNhc2UoKSwgdXBwZXI6IHN0cmlwUXVvdGVzKHJhbmdlTWF0Y2hbM10pLnRvTG93ZXJDYXNlKCksIGluY2x1c2l2ZTogdHJ1ZSB9CiAgICB9OwogIH0KICBjb25zdCBtNiA9IHJhdzIubWF0Y2goL14oW146XHNdKylccyo6XHMqKCJbXiJdKiJ8J1teJ10qJ3xbXiInXHNdKykkLyk7CiAgaWYgKG02KSB7CiAgICByZXR1cm4geyBmaWVsZDogbTZbMV0sIHZhbHVlOiBzdHJpcFF1b3RlcyhtNlsyXSkudG9Mb3dlckNhc2UoKSwgbmVnYXRlIH07CiAgfQogIGlmIChyYXcyLmxlbmd0aCA+IDApIHsKICAgIHJldHVybiB7IHZhbHVlOiBzdHJpcFF1b3RlcyhyYXcyKS50b0xvd2VyQ2FzZSgpLCBuZWdhdGUgfTsKICB9CiAgcmV0dXJuIG51bGw7Cn0KZnVuY3Rpb24gcGFyc2VMdWNlbmUoaW5wdXQpIHsKICBpZiAoIWlucHV0KQogICAgcmV0dXJuIG51bGw7CiAgY29uc3QgY2xhdXNlcyA9IHNwbGl0QnlPcihpbnB1dCkubWFwKChjbGF1c2VTdHIpID0+IHsKICAgIGNvbnN0IHRlcm1zID0gc3BsaXRCeUFuZChjbGF1c2VTdHIpLm1hcChwYXJzZVRlcm0pLmZpbHRlcigodDkpID0+ICEhdDkgJiYgISF0OS52YWx1ZSk7CiAgICByZXR1cm4geyB0ZXJtcyB9OwogIH0pLmZpbHRlcigoYzExKSA9PiBjMTEudGVybXMubGVuZ3RoID4gMCk7CiAgaWYgKGNsYXVzZXMubGVuZ3RoID09PSAwKQogICAgcmV0dXJuIG51bGw7CiAgcmV0dXJuIHsgY2xhdXNlcyB9Owp9CmZ1bmN0aW9uIGNvbXBpbGVMdWNlbmVQcmVkaWNhdGUoaW5wdXQsIG1vZGUsIGNvbHVtbnMpIHsKICBjb25zdCBhc3QgPSBwYXJzZUx1Y2VuZShpbnB1dCk7CiAgaWYgKCFhc3QpCiAgICByZXR1cm4gbnVsbDsKICBjb25zdCBjb2xNYXAgPSBuZXcgTWFwKGNvbHVtbnMubWFwKChjMTEpID0+IFtTdHJpbmcoYzExLmtleSksIGMxMV0pKTsKICBjb25zdCBjbXAgPSAoYTUsIGI1KSA9PiBhNSA8IGI1ID8gLTEgOiBhNSA+IGI1ID8gMSA6IDA7CiAgY29uc3QgY29lcmNlMiA9IChzOSkgPT4gewogICAgY29uc3Qgc3RyID0gU3RyaW5nKHM5ID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgY29uc3QgbnVtID0gTnVtYmVyKHN0cik7CiAgICBjb25zdCBkYXRlID0gRGF0ZS5wYXJzZShzdHIpOwogICAgaWYgKCFOdW1iZXIuaXNOYU4obnVtKSAmJiBzdHIudHJpbSgpICE9PSAiIikKICAgICAgcmV0dXJuIHsgdDogIm4iLCB2OiBudW0gfTsKICAgIGlmICghTnVtYmVyLmlzTmFOKGRhdGUpKQogICAgICByZXR1cm4geyB0OiAiZCIsIHY6IGRhdGUgfTsKICAgIHJldHVybiB7IHQ6ICJzIiwgdjogc3RyIH07CiAgfTsKICBjb25zdCBpblJhbmdlID0gKHZhbCwgbG93ZXIsIHVwcGVyKSA9PiB7CiAgICBjb25zdCBhNSA9IGNvZXJjZTIodmFsKTsKICAgIGNvbnN0IGxvID0gY29lcmNlMihsb3dlcik7CiAgICBjb25zdCB1cCA9IGNvZXJjZTIodXBwZXIpOwogICAgaWYgKGE1LnQgPT09ICJzIiAmJiBsby50ID09PSAicyIgJiYgdXAudCA9PT0gInMiKSB7CiAgICAgIGNvbnN0IGF2ID0gYTUudjsKICAgICAgcmV0dXJuIGNtcChhdiwgbG8udikgPj0gMCAmJiBjbXAoYXYsIHVwLnYpIDw9IDA7CiAgICB9CiAgICBpZiAoYTUudCA9PT0gIm4iICYmIGxvLnQgPT09ICJuIiAmJiB1cC50ID09PSAibiIpIHsKICAgICAgY29uc3QgYXYgPSBhNS52OwogICAgICByZXR1cm4gYXYgPj0gbG8udiAmJiBhdiA8PSB1cC52OwogICAgfQogICAgaWYgKGE1LnQgPT09ICJkIiAmJiBsby50ID09PSAiZCIgJiYgdXAudCA9PT0gImQiKSB7CiAgICAgIGNvbnN0IGF2ID0gYTUudjsKICAgICAgcmV0dXJuIGF2ID49IGxvLnYgJiYgYXYgPD0gdXAudjsKICAgIH0KICAgIGNvbnN0IGFzID0gU3RyaW5nKHZhbCA/PyAiIikudG9Mb3dlckNhc2UoKTsKICAgIHJldHVybiBjbXAoYXMsIGxvd2VyKSA+PSAwICYmIGNtcChhcywgdXBwZXIpIDw9IDA7CiAgfTsKICByZXR1cm4gKHJvdykgPT4gewogICAgZm9yIChjb25zdCBjbGF1c2Ugb2YgYXN0LmNsYXVzZXMpIHsKICAgICAgbGV0IGNsYXVzZU9rID0gdHJ1ZTsKICAgICAgZm9yIChjb25zdCB0ZXJtIG9mIGNsYXVzZS50ZXJtcykgewogICAgICAgIGxldCBvazMgPSBmYWxzZTsKICAgICAgICBpZiAodGVybS5yYW5nZSAmJiB0ZXJtLmZpZWxkKSB7CiAgICAgICAgICBpZiAobW9kZSA9PT0gImRhdGEiKSB7CiAgICAgICAgICAgIG9rMyA9IGluUmFuZ2Uocm93W3Rlcm0uZmllbGRdLCB0ZXJtLnJhbmdlLmxvd2VyLCB0ZXJtLnJhbmdlLnVwcGVyKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGNvbE1hcC5nZXQodGVybS5maWVsZCk7CiAgICAgICAgICAgIGlmICghY29sIHx8IGNvbC5oaWRkZW4pIHsKICAgICAgICAgICAgICBvazMgPSBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjb25zdCB2YWwgPSBjb2wudmFsdWUgPyBjb2wudmFsdWUocm93KSA6IHJvd1tjb2wua2V5XTsKICAgICAgICAgICAgICBvazMgPSBpblJhbmdlKHZhbCwgdGVybS5yYW5nZS5sb3dlciwgdGVybS5yYW5nZS51cHBlcik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHRlcm0uZmllbGQgJiYgdGVybS52YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICBpZiAobW9kZSA9PT0gImRhdGEiKSB7CiAgICAgICAgICAgIGNvbnN0IHM5ID0gU3RyaW5nKHJvd1t0ZXJtLmZpZWxkXSA/PyAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgb2szID0gczkuaW5jbHVkZXModGVybS52YWx1ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBjb2wgPSBjb2xNYXAuZ2V0KHRlcm0uZmllbGQpOwogICAgICAgICAgICBpZiAoIWNvbCB8fCBjb2wuaGlkZGVuID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgb2szID0gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29uc3QgdmFsID0gY29sLnZhbHVlID8gY29sLnZhbHVlKHJvdykgOiByb3dbY29sLmtleV07CiAgICAgICAgICAgICAgY29uc3QgczkgPSBTdHJpbmcodmFsID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgIG9rMyA9IHM5LmluY2x1ZGVzKHRlcm0udmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0ZXJtLnZhbHVlICE9IG51bGwpIHsKICAgICAgICAgIGlmIChtb2RlID09PSAiZGF0YSIpIHsKICAgICAgICAgICAgb2szID0gT2JqZWN0LnZhbHVlcyhyb3cpLnNvbWUoKHY1KSA9PiBTdHJpbmcodjUgPz8gIiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybS52YWx1ZSkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb2szID0gY29sdW1ucy5zb21lKChjb2wpID0+IHsKICAgICAgICAgICAgICBpZiAoY29sLmhpZGRlbikKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICBjb25zdCB2YWwgPSBjb2wudmFsdWUgPyBjb2wudmFsdWUocm93KSA6IHJvd1tjb2wua2V5XTsKICAgICAgICAgICAgICBjb25zdCBzOSA9IFN0cmluZyh2YWwgPz8gIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgcmV0dXJuIHM5LmluY2x1ZGVzKHRlcm0udmFsdWUpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHRlcm0ubmVnYXRlKQogICAgICAgICAgb2szID0gIW9rMzsKICAgICAgICBpZiAoIW9rMykgewogICAgICAgICAgY2xhdXNlT2sgPSBmYWxzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoY2xhdXNlT2spCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfTsKfQoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRhYmxlL2RlZXMtdGFibGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMzIgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczMzID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzVGFibGUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXRhYmxlIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfaGVhZGluZzFfZGVjb3JhdG9yczsKICBsZXQgX2hlYWRpbmcxX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGVhZGluZzFfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hlYWRpbmcyX2RlY29yYXRvcnM7CiAgbGV0IF9oZWFkaW5nMl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hlYWRpbmcyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kYXRhX2RlY29yYXRvcnM7CiAgbGV0IF9kYXRhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGF0YV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfa2V5X2RlY29yYXRvcnM7CiAgbGV0IF9rZXlfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9rZXlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsX2RlY29yYXRvcnM7CiAgbGV0IF9sYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9kZWNvcmF0b3JzOwogIGxldCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmVxdWlyZWRfZGVjb3JhdG9yczsKICBsZXQgX3JlcXVpcmVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmVxdWlyZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RhdGFOYW1lX2RlY29yYXRvcnM7CiAgbGV0IF9kYXRhTmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RhdGFOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hhYmxlX2RlY29yYXRvcnM7CiAgbGV0IF9zZWFyY2hhYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VhcmNoYWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGF0YUFjdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2RhdGFBY3Rpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGF0YUFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbHVtbnNfZGVjb3JhdG9yczsKICBsZXQgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2x1bW5zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb3dLZXlfZGVjb3JhdG9yczsKICBsZXQgX3Jvd0tleV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Jvd0tleV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fZGVjb3JhdG9yczsKICBsZXQgX2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rpc3BsYXlGdW5jdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfZGlzcGxheUZ1bmN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlzcGxheUZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWREYXRhUm93X2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZERhdGFSb3dfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZERhdGFSb3dfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VkaXRhYmxlRmllbGRzX2RlY29yYXRvcnM7CiAgbGV0IF9lZGl0YWJsZUZpZWxkc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VkaXRhYmxlRmllbGRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93VmVydGljYWxMaW5lc19kZWNvcmF0b3JzOwogIGxldCBfc2hvd1ZlcnRpY2FsTGluZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93VmVydGljYWxMaW5lc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0hvcml6b250YWxMaW5lc19kZWNvcmF0b3JzOwogIGxldCBfc2hvd0hvcml6b250YWxMaW5lc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dIb3Jpem9udGFsTGluZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dHcmlkX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93R3JpZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dHcmlkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zb3J0S2V5X2RlY29yYXRvcnM7CiAgbGV0IF9zb3J0S2V5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc29ydEtleV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc29ydERpcl9kZWNvcmF0b3JzOwogIGxldCBfc29ydERpcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NvcnREaXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlclRleHRfZGVjb3JhdG9yczsKICBsZXQgX2ZpbHRlclRleHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWx0ZXJUZXh0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2x1bW5GaWx0ZXJzX2RlY29yYXRvcnM7CiAgbGV0IF9jb2x1bW5GaWx0ZXJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sdW1uRmlsdGVyc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0NvbHVtbkZpbHRlcnNfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dDb2x1bW5GaWx0ZXJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0NvbHVtbkZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3N0aWNreUhlYWRlcl9kZWNvcmF0b3JzOwogIGxldCBfc3RpY2t5SGVhZGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RpY2t5SGVhZGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hNb2RlX2RlY29yYXRvcnM7CiAgbGV0IF9zZWFyY2hNb2RlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VhcmNoTW9kZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0aW9uTW9kZV9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0aW9uTW9kZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGlvbk1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkSWRzX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZElkc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkSWRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNUYWJsZTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9oZWFkaW5nMV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfaGVhZGluZzJfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX2RhdGFfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQXJyYXkKICAgICAgfSldOwogICAgICBfa2V5X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZwogICAgICB9KV07CiAgICAgIF9sYWJlbF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfZGlzYWJsZWRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9yZXF1aXJlZF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuCiAgICAgIH0pXTsKICAgICAgX2RhdGFOYW1lX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3NlYXJjaGFibGVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9kYXRhQWN0aW9uc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBBcnJheQogICAgICB9KV07CiAgICAgIF9jb2x1bW5zX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX3Jvd0tleV9kZWNvcmF0b3JzID0gW241KHsgYXR0cmlidXRlOiBmYWxzZSB9KV07CiAgICAgIF9hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9kaXNwbGF5RnVuY3Rpb25fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgYXR0cmlidXRlOiBmYWxzZQogICAgICB9KV07CiAgICAgIF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIGF0dHJpYnV0ZTogZmFsc2UKICAgICAgfSldOwogICAgICBfc2VsZWN0ZWREYXRhUm93X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IE9iamVjdAogICAgICB9KV07CiAgICAgIF9lZGl0YWJsZUZpZWxkc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBBcnJheQogICAgICB9KV07CiAgICAgIF9zaG93VmVydGljYWxMaW5lc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUsCiAgICAgICAgYXR0cmlidXRlOiAic2hvdy12ZXJ0aWNhbC1saW5lcyIKICAgICAgfSldOwogICAgICBfc2hvd0hvcml6b250YWxMaW5lc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUsCiAgICAgICAgYXR0cmlidXRlOiAic2hvdy1ob3Jpem9udGFsLWxpbmVzIgogICAgICB9KV07CiAgICAgIF9zaG93R3JpZF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUsCiAgICAgICAgYXR0cmlidXRlOiAic2hvdy1ncmlkIgogICAgICB9KV07CiAgICAgIF9zb3J0S2V5X2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX3NvcnREaXJfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfZmlsdGVyVGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2NvbHVtbkZpbHRlcnNfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfc2hvd0NvbHVtbkZpbHRlcnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogInNob3ctY29sdW1uLWZpbHRlcnMiIH0pXTsKICAgICAgX3N0aWNreUhlYWRlcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSwgYXR0cmlidXRlOiAic3RpY2t5LWhlYWRlciIgfSldOwogICAgICBfc2VhcmNoTW9kZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3NlbGVjdGlvbk1vZGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zZWxlY3RlZElkc19kZWNvcmF0b3JzID0gW241KHsgYXR0cmlidXRlOiBmYWxzZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9oZWFkaW5nMV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJoZWFkaW5nMSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGVhZGluZzEiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaGVhZGluZzEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmhlYWRpbmcxID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hlYWRpbmcxX2luaXRpYWxpemVycywgX2hlYWRpbmcxX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2hlYWRpbmcyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhlYWRpbmcyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoZWFkaW5nMiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oZWFkaW5nMiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaGVhZGluZzIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaGVhZGluZzJfaW5pdGlhbGl6ZXJzLCBfaGVhZGluZzJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfZGF0YV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkYXRhIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRhdGEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRhdGEgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGF0YV9pbml0aWFsaXplcnMsIF9kYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2tleV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJrZXkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImtleSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5rZXksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmtleSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9rZXlfaW5pdGlhbGl6ZXJzLCBfa2V5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2xhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYWJlbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFiZWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfZGlzYWJsZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlzYWJsZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc2FibGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXNhYmxlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9yZXF1aXJlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZXF1aXJlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicmVxdWlyZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVxdWlyZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJlcXVpcmVkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JlcXVpcmVkX2luaXRpYWxpemVycywgX3JlcXVpcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2RhdGFOYW1lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRhdGFOYW1lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkYXRhTmFtZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kYXRhTmFtZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGF0YU5hbWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGF0YU5hbWVfaW5pdGlhbGl6ZXJzLCBfZGF0YU5hbWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2VhcmNoYWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWFyY2hhYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWFyY2hhYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlYXJjaGFibGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlYXJjaGFibGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VhcmNoYWJsZV9pbml0aWFsaXplcnMsIF9zZWFyY2hhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2RhdGFBY3Rpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRhdGFBY3Rpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkYXRhQWN0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kYXRhQWN0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGF0YUFjdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGF0YUFjdGlvbnNfaW5pdGlhbGl6ZXJzLCBfZGF0YUFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfY29sdW1uc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2x1bW5zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb2x1bW5zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbHVtbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbHVtbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29sdW1uc19pbml0aWFsaXplcnMsIF9jb2x1bW5zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX3Jvd0tleV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyb3dLZXkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJvd0tleSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yb3dLZXksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJvd0tleSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yb3dLZXlfaW5pdGlhbGl6ZXJzLCBfcm93S2V5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25faW5pdGlhbGl6ZXJzLCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfZGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpc3BsYXlGdW5jdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZGlzcGxheUZ1bmN0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc3BsYXlGdW5jdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlzcGxheUZ1bmN0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Rpc3BsYXlGdW5jdGlvbl9pbml0aWFsaXplcnMsIF9kaXNwbGF5RnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZXZlcnNlRGlzcGxheUZ1bmN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZXZlcnNlRGlzcGxheUZ1bmN0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJldmVyc2VEaXNwbGF5RnVuY3Rpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJldmVyc2VEaXNwbGF5RnVuY3Rpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9pbml0aWFsaXplcnMsIF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX3NlbGVjdGVkRGF0YVJvd19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZERhdGFSb3ciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkRGF0YVJvdyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZERhdGFSb3csIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkRGF0YVJvdyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZERhdGFSb3dfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWREYXRhUm93X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2VkaXRhYmxlRmllbGRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImVkaXRhYmxlRmllbGRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlZGl0YWJsZUZpZWxkcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lZGl0YWJsZUZpZWxkcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZWRpdGFibGVGaWVsZHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZWRpdGFibGVGaWVsZHNfaW5pdGlhbGl6ZXJzLCBfZWRpdGFibGVGaWVsZHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2hvd1ZlcnRpY2FsTGluZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1ZlcnRpY2FsTGluZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dWZXJ0aWNhbExpbmVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dWZXJ0aWNhbExpbmVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93VmVydGljYWxMaW5lcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93VmVydGljYWxMaW5lc19pbml0aWFsaXplcnMsIF9zaG93VmVydGljYWxMaW5lc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zaG93SG9yaXpvbnRhbExpbmVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dIb3Jpem9udGFsTGluZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dIb3Jpem9udGFsTGluZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0hvcml6b250YWxMaW5lcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd0hvcml6b250YWxMaW5lcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93SG9yaXpvbnRhbExpbmVzX2luaXRpYWxpemVycywgX3Nob3dIb3Jpem9udGFsTGluZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2hvd0dyaWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0dyaWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dHcmlkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dHcmlkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93R3JpZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93R3JpZF9pbml0aWFsaXplcnMsIF9zaG93R3JpZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zb3J0S2V5X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNvcnRLZXkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNvcnRLZXkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc29ydEtleSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc29ydEtleSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zb3J0S2V5X2luaXRpYWxpemVycywgX3NvcnRLZXlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc29ydERpcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzb3J0RGlyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzb3J0RGlyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNvcnREaXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNvcnREaXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc29ydERpcl9pbml0aWFsaXplcnMsIF9zb3J0RGlyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2ZpbHRlclRleHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyVGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZmlsdGVyVGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5maWx0ZXJUZXh0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXJUZXh0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ZpbHRlclRleHRfaW5pdGlhbGl6ZXJzLCBfZmlsdGVyVGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9jb2x1bW5GaWx0ZXJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbHVtbkZpbHRlcnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbHVtbkZpbHRlcnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29sdW1uRmlsdGVycywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29sdW1uRmlsdGVycyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb2x1bW5GaWx0ZXJzX2luaXRpYWxpemVycywgX2NvbHVtbkZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2hvd0NvbHVtbkZpbHRlcnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0NvbHVtbkZpbHRlcnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dDb2x1bW5GaWx0ZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dDb2x1bW5GaWx0ZXJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93Q29sdW1uRmlsdGVycyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93Q29sdW1uRmlsdGVyc19pbml0aWFsaXplcnMsIF9zaG93Q29sdW1uRmlsdGVyc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zdGlja3lIZWFkZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RpY2t5SGVhZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzdGlja3lIZWFkZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3RpY2t5SGVhZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdGlja3lIZWFkZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3RpY2t5SGVhZGVyX2luaXRpYWxpemVycywgX3N0aWNreUhlYWRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zZWFyY2hNb2RlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlYXJjaE1vZGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlYXJjaE1vZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VhcmNoTW9kZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VhcmNoTW9kZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWFyY2hNb2RlX2luaXRpYWxpemVycywgX3NlYXJjaE1vZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2VsZWN0aW9uTW9kZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3Rpb25Nb2RlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3Rpb25Nb2RlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGlvbk1vZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGlvbk1vZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0aW9uTW9kZV9pbml0aWFsaXplcnMsIF9zZWxlY3Rpb25Nb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX3NlbGVjdGVkSWRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkSWRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZElkcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZElkcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWRJZHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRJZHNfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRJZHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNUYWJsZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI0OwogICAgI2hlYWRpbmcxX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9oZWFkaW5nMV9pbml0aWFsaXplcnMsICJoZWFkaW5nIDEiKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgaGVhZGluZzEoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoZWFkaW5nMV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhlYWRpbmcxKHZhbHVlMikgewogICAgICB0aGlzLiNoZWFkaW5nMV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2hlYWRpbmcyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfaGVhZGluZzFfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9oZWFkaW5nMl9pbml0aWFsaXplcnMsICJoZWFkaW5nIDIiKSk7CiAgICBnZXQgaGVhZGluZzIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoZWFkaW5nMl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhlYWRpbmcyKHZhbHVlMikgewogICAgICB0aGlzLiNoZWFkaW5nMl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9oZWFkaW5nMl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IGRhdGEoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkYXRhX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGF0YSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2tleV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9rZXlfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIC8vIGRlZXMtZm9ybSBjb21wYXRpYmlsaXR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBnZXQga2V5KCkgewogICAgICByZXR1cm4gdGhpcy4ja2V5X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQga2V5KHZhbHVlMikgewogICAgICB0aGlzLiNrZXlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2tleV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2xhYmVsX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgbGFiZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxhYmVsKHZhbHVlMikgewogICAgICB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgZGlzYWJsZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkaXNhYmxlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRpc2FibGVkKHZhbHVlMikgewogICAgICB0aGlzLiNkaXNhYmxlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3JlcXVpcmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZGlzYWJsZWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9yZXF1aXJlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgcmVxdWlyZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJlcXVpcmVkKHZhbHVlMikgewogICAgICB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy5kYXRhOwogICAgfQogICAgc2V0IHZhbHVlKF92YWx1ZUFyZykgewogICAgfQogICAgY2hhbmdlU3ViamVjdCA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9yZXF1aXJlZF9leHRyYUluaXRpYWxpemVycyksIG5ldyBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRyeC5yeGpzLlN1YmplY3QoKSk7CiAgICAjZGF0YU5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFOYW1lX2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgIC8vIGVuZCBkZWVzLWZvcm0gY29tcGF0aWJpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLyoqCiAgICAgKiBXaGF0IGRvZXMgYSByb3cgb2YgZGF0YSByZXByZXNlbnQ/CiAgICAgKi8KICAgIGdldCBkYXRhTmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RhdGFOYW1lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGF0YU5hbWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2RhdGFOYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VhcmNoYWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VhcmNoYWJsZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzZWFyY2hhYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VhcmNoYWJsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlYXJjaGFibGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlYXJjaGFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkYXRhQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NlYXJjaGFibGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9kYXRhQWN0aW9uc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZGF0YUFjdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkYXRhQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRhdGFBY3Rpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNkYXRhQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbHVtbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9kYXRhQWN0aW9uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgLy8gc2NoZW1hLWZpcnN0IGNvbHVtbnMgQVBJCiAgICBnZXQgY29sdW1ucygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvbHVtbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb2x1bW5zKHZhbHVlMikgewogICAgICB0aGlzLiNjb2x1bW5zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcm93S2V5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfY29sdW1uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Jvd0tleV9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgLyoqCiAgICAgKiBTdGFibGUgcm93IGlkZW50aXR5IGZvciBzZWxlY3Rpb24gYW5kIHVwZGF0ZXMuIElmIHByb3ZpZGVkIGFzIGEgZnVuY3Rpb24sCiAgICAgKiBpdCBpcyBvbmx5IHVzYWJsZSBhcyBhIHByb3BlcnR5IChub3QgdmlhIGF0dHJpYnV0ZSkuCiAgICAgKi8KICAgIGdldCByb3dLZXkoKSB7CiAgICAgIHJldHVybiB0aGlzLiNyb3dLZXlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCByb3dLZXkodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Jvd0tleV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfcm93S2V5X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgLyoqCiAgICAgKiBXaGVuIHRydWUgYW5kIGNvbHVtbnMgYXJlIHByb3ZpZGVkLCBtZXJnZSBhbnkgbWlzc2luZyBjb2x1bW5zIGRpc2NvdmVyZWQKICAgICAqIHZpYSBkaXNwbGF5RnVuY3Rpb24gaW50byB0aGUgZWZmZWN0aXZlIHNjaGVtYS4KICAgICAqLwogICAgZ2V0IGF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2Rpc3BsYXlGdW5jdGlvbl9pbml0aWFsaXplcnMsIChpdGVtQXJnKSA9PiBpdGVtQXJnKSk7CiAgICBnZXQgZGlzcGxheUZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jZGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGlzcGxheUZ1bmN0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNkaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNyZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZGlzcGxheUZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9pbml0aWFsaXplcnMsIChpdGVtQXJnKSA9PiBpdGVtQXJnKSk7CiAgICBnZXQgcmV2ZXJzZURpc3BsYXlGdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3JldmVyc2VEaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCByZXZlcnNlRGlzcGxheUZ1bmN0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNyZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWREYXRhUm93X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NlbGVjdGVkRGF0YVJvd19pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHNlbGVjdGVkRGF0YVJvdygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkRGF0YVJvd19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkRGF0YVJvdyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWREYXRhUm93X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZWRpdGFibGVGaWVsZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zZWxlY3RlZERhdGFSb3dfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9lZGl0YWJsZUZpZWxkc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZWRpdGFibGVGaWVsZHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlZGl0YWJsZUZpZWxkc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGVkaXRhYmxlRmllbGRzKHZhbHVlMikgewogICAgICB0aGlzLiNlZGl0YWJsZUZpZWxkc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dWZXJ0aWNhbExpbmVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZWRpdGFibGVGaWVsZHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zaG93VmVydGljYWxMaW5lc19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgc2hvd1ZlcnRpY2FsTGluZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93VmVydGljYWxMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dWZXJ0aWNhbExpbmVzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93VmVydGljYWxMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dIb3Jpem9udGFsTGluZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zaG93VmVydGljYWxMaW5lc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dIb3Jpem9udGFsTGluZXNfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHNob3dIb3Jpem9udGFsTGluZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93SG9yaXpvbnRhbExpbmVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd0hvcml6b250YWxMaW5lcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd0hvcml6b250YWxMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dHcmlkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2hvd0hvcml6b250YWxMaW5lc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dHcmlkX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IHNob3dHcmlkKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0dyaWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93R3JpZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd0dyaWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGZpbGVzID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dHcmlkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgW10pOwogICAgZmlsZVdlYWtNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIGRhdGFDaGFuZ2VTdWJqZWN0ID0gbmV3IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydHJ4LnJ4anMuU3ViamVjdCgpOwogICAgI3NvcnRLZXlfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NvcnRLZXlfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgLy8gc2ltcGxlIGNsaWVudC1zaWRlIHNvcnRpbmcgKFBoYXNlIDEpCiAgICBnZXQgc29ydEtleSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NvcnRLZXlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzb3J0S2V5KHZhbHVlMikgewogICAgICB0aGlzLiNzb3J0S2V5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc29ydERpcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NvcnRLZXlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zb3J0RGlyX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IHNvcnREaXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzb3J0RGlyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc29ydERpcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc29ydERpcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2ZpbHRlclRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zb3J0RGlyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZmlsdGVyVGV4dF9pbml0aWFsaXplcnMsICIiKSk7CiAgICAvLyBzaW1wbGUgY2xpZW50LXNpZGUgZmlsdGVyaW5nIChQaGFzZSAxKQogICAgZ2V0IGZpbHRlclRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmaWx0ZXJUZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsdGVyVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsdGVyVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbHVtbkZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9maWx0ZXJUZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfY29sdW1uRmlsdGVyc19pbml0aWFsaXplcnMsIHt9KSk7CiAgICAvLyBwZXItY29sdW1uIHF1aWNrIGZpbHRlcnMKICAgIGdldCBjb2x1bW5GaWx0ZXJzKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sdW1uRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbHVtbkZpbHRlcnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbHVtbkZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93Q29sdW1uRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2NvbHVtbkZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zaG93Q29sdW1uRmlsdGVyc19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgc2hvd0NvbHVtbkZpbHRlcnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93Q29sdW1uRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dDb2x1bW5GaWx0ZXJzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93Q29sdW1uRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3N0aWNreUhlYWRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dDb2x1bW5GaWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc3RpY2t5SGVhZGVyX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzdGlja3lIZWFkZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdGlja3lIZWFkZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdGlja3lIZWFkZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3N0aWNreUhlYWRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlYXJjaE1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zdGlja3lIZWFkZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zZWFyY2hNb2RlX2luaXRpYWxpemVycywgInRhYmxlIikpOwogICAgLy8gc2VhcmNoIHJvdyBzdGF0ZQogICAgZ2V0IHNlYXJjaE1vZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWFyY2hNb2RlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VhcmNoTW9kZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VhcmNoTW9kZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgX19zZWFyY2hUZXh0U3ViID0gX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VhcmNoTW9kZV9leHRyYUluaXRpYWxpemVycyk7CiAgICBfX3NlYXJjaE1vZGVTdWI7CiAgICAjc2VsZWN0aW9uTW9kZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VsZWN0aW9uTW9kZV9pbml0aWFsaXplcnMsICJub25lIik7CiAgICAvLyBzZWxlY3Rpb24gKFBoYXNlIDEpCiAgICBnZXQgc2VsZWN0aW9uTW9kZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGlvbk1vZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3Rpb25Nb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3Rpb25Nb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRJZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zZWxlY3Rpb25Nb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VsZWN0ZWRJZHNfaW5pdGlhbGl6ZXJzLCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSk7CiAgICBnZXQgc2VsZWN0ZWRJZHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZElkc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkSWRzKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZElkc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgX3Jvd0lkTWFwID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NlbGVjdGVkSWRzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpOwogICAgX3Jvd0lkQ291bnRlciA9IDA7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSB0YWJsZVN0eWxlczsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgdXNpbmdDb2x1bW5zID0gQXJyYXkuaXNBcnJheSh0aGlzLmNvbHVtbnMpICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwOwogICAgICBjb25zdCBlZmZlY3RpdmVDb2x1bW5zID0gdXNpbmdDb2x1bW5zID8gY29tcHV0ZUVmZmVjdGl2ZUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uLCB0aGlzLmRpc3BsYXlGdW5jdGlvbiwgdGhpcy5kYXRhKSA6IGNvbXB1dGVDb2x1bW5zRnJvbURpc3BsYXlGdW5jdGlvbih0aGlzLmRpc3BsYXlGdW5jdGlvbiwgdGhpcy5kYXRhKTsKICAgICAgY29uc3QgbHVjZW5lUHJlZCA9IGNvbXBpbGVMdWNlbmVQcmVkaWNhdGUodGhpcy5maWx0ZXJUZXh0LCB0aGlzLnNlYXJjaE1vZGUgPT09ICJkYXRhIiA/ICJkYXRhIiA6ICJ0YWJsZSIsIGVmZmVjdGl2ZUNvbHVtbnMpOwogICAgICBjb25zdCB2aWV3RGF0YSA9IGdldFZpZXdEYXRhKHRoaXMuZGF0YSwgZWZmZWN0aXZlQ29sdW1ucywgdGhpcy5zb3J0S2V5LCB0aGlzLnNvcnREaXIsIHRoaXMuZmlsdGVyVGV4dCwgdGhpcy5jb2x1bW5GaWx0ZXJzLCB0aGlzLnNlYXJjaE1vZGUgPT09ICJkYXRhIiA/ICJkYXRhIiA6ICJ0YWJsZSIsIGx1Y2VuZVByZWQgfHwgdm9pZCAwKTsKICAgICAgdGhpcy5fbGFzdFZpZXdEYXRhID0gdmlld0RhdGE7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgPCEtLSB0aGUgaGVhZGluZyBwYXJ0IC0tPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nQ29udGFpbmVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZyBoZWFkaW5nMSI+JHt0aGlzLmxhYmVsIHx8IHRoaXMuaGVhZGluZzF9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmcgaGVhZGluZzIiPiR7dGhpcy5oZWFkaW5nMn08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyQWN0aW9ucyI+CiAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlc29sdmVFeGVjKGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCByZXN1bHRBcnJheSA9IFtdOwogICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuZGF0YUFjdGlvbnMpIHsKICAgICAgICAgIGlmICghYWN0aW9uLnR5cGUuaW5jbHVkZXMoImhlYWRlciIpKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIHJlc3VsdEFycmF5LnB1c2goYjJgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJoZWFkZXJBY3Rpb24iCiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gewogICAgICAgICAgICBhY3Rpb24uYWN0aW9uRnVuYyh7CiAgICAgICAgICAgICAgaXRlbTogdGhpcy5zZWxlY3RlZERhdGFSb3csCiAgICAgICAgICAgICAgdGFibGU6IHRoaXMKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9fQogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgJHthY3Rpb24uaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uU2l6ZT0kezE0fSAuaWNvbj0ke2FjdGlvbi5pY29uTmFtZX0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb24ubmFtZX1gIDogYWN0aW9uLm5hbWV9CiAgICAgICAgICAgICAgICAgIDwvZGl2PmApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CiAgICAgIH0pfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZ1NlcGFyYXRpb24iPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaEdyaWQgaGlkZGVuIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7Imx1Y2VuZSBzeW50YXggc2VhcmNoIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7YAogICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBsdWNlbmUgc3ludGF4IHRvIHNlYXJjaCBmb3IgZGF0YSwgZS5nLjoKICAgICAgICAgICAgICAKICAgICAgICAgICAgICBcYFxgXGAKICAgICAgICAgICAgICBuYW1lOiAiam9obiIgQU5EIGFnZTogMTgKICAgICAgICAgICAgICBcYFxgXGAKICAgICAgICAgICAgICAKICAgICAgICAgICAgYH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJzZWFyY2ggbW9kZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJ0YWJsZSIsICJkYXRhIiwgInNlcnZlciJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsidGFibGUifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHtgCiAgICAgICAgICAgICAgVGhlcmUgYXJlIHRocmVlIGJhc2ljIG1vZGVzOgogICAgICAgICAgICAgIAogICAgICAgICAgICAgICogdGFibGU6IG9ubHkgc2VhcmNoZXMgZGF0YSBhbHJlYWR5IGluIHRoZSB0YWJsZQogICAgICAgICAgICAgICogZGF0YTogc2VhcmNoZXMgb3JpZ2luYWwgZGF0YSwgaWdub3JpbmcgdGFibGUgdHJhbnNmb3JtcwogICAgICAgICAgICAgICogc2VydmVyOiBzZWFyY2hlcyBkYXRhIG9uIHRoZSBzZXJ2ZXIKICAgICAgICAgICAgICAKICAgICAgICAgICAgYH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gdGhlIGFjdHVhbCB0YWJsZSAtLT4KICAgICAgICA8c3R5bGU+PC9zdHlsZT4KICAgICAgICAke3RoaXMuZGF0YS5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGVTY3JvbGwiPgogICAgICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICR7dGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAibm9uZSIgPyBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjQycHg7IHRleHQtYWxpZ246Y2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuc2VsZWN0aW9uTW9kZSA9PT0gIm11bHRpIiA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5hcmVBbGxWaXNpYmxlU2VsZWN0ZWQoKX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmluZGV0ZXJtaW5hdGU9JHt0aGlzLmlzVmlzaWJsZVNlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5ld1ZhbHVlPSR7KGUxMSkgPT4gewogICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB0aGlzLnNldFNlbGVjdFZpc2libGUoZTExLmRldGFpbCA9PT0gdHJ1ZSk7CiAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAgOiBiMmBgfQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIGAgOiBiMmBgfQogICAgICAgICAgICAgICAgICAgICR7ZWZmZWN0aXZlQ29sdW1ucy5maWx0ZXIoKGMxMSkgPT4gIWMxMS5oaWRkZW4pLm1hcCgoY29sKSA9PiB7CiAgICAgICAgY29uc3QgaXNTb3J0YWJsZSA9ICEhY29sLnNvcnRhYmxlOwogICAgICAgIGNvbnN0IGFyaWFTb3J0ID0gdGhpcy5nZXRBcmlhU29ydChjb2wpOwogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICA8dGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9ImNvbHVtbmhlYWRlciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtc29ydD0ke2FyaWFTb3J0fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IiR7aXNTb3J0YWJsZSA/ICJjdXJzb3I6IHBvaW50ZXI7IiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IGlzU29ydGFibGUgPyB0aGlzLnRvZ2dsZVNvcnQoY29sKSA6IG51bGx9CiAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb2wuaGVhZGVyID8/IGNvbC5rZXl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMucmVuZGVyU29ydEluZGljYXRvcihjb2wpfQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+YDsKICAgICAgfSl9CiAgICAgICAgICAgICAgICAgICAgJHsoKCkgPT4gewogICAgICAgIGlmICh0aGlzLmRhdGFBY3Rpb25zICYmIHRoaXMuZGF0YUFjdGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgICAgcmV0dXJuIGIyYCA8dGggY2xhc3M9ImFjdGlvbnNDb2wiPkFjdGlvbnM8L3RoPiBgOwogICAgICAgIH0KICAgICAgfSkoKX0KICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgJHt0aGlzLnNob3dDb2x1bW5GaWx0ZXJzID8gYjJgPHRyIGNsYXNzPSJmaWx0ZXJzUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICJub25lIiA/IGIyYDx0aCBzdHlsZT0id2lkdGg6NDJweDsiPjwvdGg+YCA6IGIyYGB9CiAgICAgICAgICAgICAgICAgICAgICAgICR7ZWZmZWN0aXZlQ29sdW1ucy5maWx0ZXIoKGMxMSkgPT4gIWMxMS5oaWRkZW4pLm1hcCgoY29sKSA9PiB7CiAgICAgICAgY29uc3Qga2V5MiA9IFN0cmluZyhjb2wua2V5KTsKICAgICAgICBpZiAoY29sLmZpbHRlcmFibGUgPT09IGZhbHNlKQogICAgICAgICAgcmV0dXJuIGIyYDx0aD48L3RoPmA7CiAgICAgICAgcmV0dXJuIGIyYDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJGaWx0ZXIuLi4iIC52YWx1ZT0ke3RoaXMuY29sdW1uRmlsdGVyc1trZXkyXSB8fCAiIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiB0aGlzLnNldENvbHVtbkZpbHRlcihrZXkyLCBlMTEudGFyZ2V0LnZhbHVlKX0gLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+YDsKICAgICAgfSl9CiAgICAgICAgICAgICAgICAgICAgICAgICR7KCgpID0+IHsKICAgICAgICBpZiAodGhpcy5kYXRhQWN0aW9ucyAmJiB0aGlzLmRhdGFBY3Rpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHJldHVybiBiMmAgPHRoPjwvdGg+IGA7CiAgICAgICAgfQogICAgICB9KSgpfQogICAgICAgICAgICAgICAgICAgICAgPC90cj5gIDogYjJgYH0KICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICAgICR7dmlld0RhdGEubWFwKChpdGVtQXJnLCByb3dJbmRleCkgPT4gewogICAgICAgIGNvbnN0IGdldFRyID0gKGVsZW1lbnRBcmcpID0+IHsKICAgICAgICAgIGlmIChlbGVtZW50QXJnLnRhZ05hbWUgPT09ICJUUiIpIHsKICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRBcmc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZ2V0VHIoZWxlbWVudEFyZy5wYXJlbnRFbGVtZW50KTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICAgICAgICAgIDx0cgogICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YVJvdyA9IGl0ZW1Bcmc7CiAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAic2luZ2xlIikgewogICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Um93SWQoaXRlbUFyZyk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuY2xlYXIoKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5hZGQoaWQpOwogICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTsKICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgICB9CiAgICAgICAgfX0KICAgICAgICAgICAgICAgICAgICAgICAgQGRyYWdlbnRlcj0ke2FzeW5jIChldmVudEFyZykgPT4gewogICAgICAgICAgZXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGV2ZW50QXJnLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgY29uc3QgcmVhbFRhcmdldCA9IGdldFRyKGV2ZW50QXJnLnRhcmdldCk7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgcmVhbFRhcmdldC5jbGFzc0xpc3QuYWRkKCJoYXNBdHRhY2htZW50Iik7CiAgICAgICAgICB9LCAwKTsKICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ2xlYXZlPSR7YXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgICAgICBldmVudEFyZy5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZXZlbnRBcmcuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICBjb25zdCByZWFsVGFyZ2V0ID0gZ2V0VHIoZXZlbnRBcmcudGFyZ2V0KTsKICAgICAgICAgIHJlYWxUYXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgiaGFzQXR0YWNobWVudCIpOwogICAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgICAgIEBkcmFnb3Zlcj0ke2FzeW5jIChldmVudEFyZykgPT4gewogICAgICAgICAgZXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBAZHJvcD0ke2FzeW5jIChldmVudEFyZykgPT4gewogICAgICAgICAgZXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGNvbnN0IG5ld0ZpbGVzID0gW107CiAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgQXJyYXkuZnJvbShldmVudEFyZy5kYXRhVHJhbnNmZXIuZmlsZXMpKSB7CiAgICAgICAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlKTsKICAgICAgICAgICAgbmV3RmlsZXMucHVzaChmaWxlKTsKICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbGVXZWFrTWFwLmdldChpdGVtQXJnKTsKICAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgIHRoaXMuZmlsZVdlYWtNYXAuc2V0KGl0ZW1BcmcsIG5ld0ZpbGVzKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLm5ld0ZpbGVzKTsKICAgICAgICAgIH0KICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBAY29udGV4dG1lbnU9JHthc3luYyAoZXZlbnRBcmcpID0+IHsKICAgICAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudEFyZywgdGhpcy5nZXRBY3Rpb25zRm9yVHlwZSgiY29udGV4dG1lbnUiKS5tYXAoKGFjdGlvbikgPT4gewogICAgICAgICAgICBjb25zdCBtZW51SXRlbSA9IHsKICAgICAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSwKICAgICAgICAgICAgICBpY29uTmFtZTogYWN0aW9uLmljb25OYW1lLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgYXdhaXQgYWN0aW9uLmFjdGlvbkZ1bmMoewogICAgICAgICAgICAgICAgICBpdGVtOiBpdGVtQXJnLAogICAgICAgICAgICAgICAgICB0YWJsZTogdGhpcwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHJldHVybiBtZW51SXRlbTsKICAgICAgICAgIH0pKTsKICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iJHtpdGVtQXJnID09PSB0aGlzLnNlbGVjdGVkRGF0YVJvdyA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAibm9uZSIgPyBiMmA8dGQgc3R5bGU9IndpZHRoOjQycHg7IHRleHQtYWxpZ246Y2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pc1Jvd1NlbGVjdGVkKGl0ZW1BcmcpfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBuZXdWYWx1ZT0keyhlMTEpID0+IHsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIHRoaXMuc2V0Um93U2VsZWN0ZWQoaXRlbUFyZywgZTExLmRldGFpbCA9PT0gdHJ1ZSk7CiAgICAgICAgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+YCA6IGIyYGB9CiAgICAgICAgICAgICAgICAgICAgICAgICR7ZWZmZWN0aXZlQ29sdW1ucy5maWx0ZXIoKGMxMSkgPT4gIWMxMS5oaWRkZW4pLm1hcCgoY29sLCBjb2xJbmRleCkgPT4gewogICAgICAgICAgY29uc3QgdmFsdWUyID0gZ2V0Q2VsbFZhbHVlKGl0ZW1BcmcsIGNvbCwgdGhpcy5kaXNwbGF5RnVuY3Rpb24pOwogICAgICAgICAgY29uc3QgY29udGVudDMgPSBjb2wucmVuZGVyZXIgPyBjb2wucmVuZGVyZXIodmFsdWUyLCBpdGVtQXJnLCB7IHJvd0luZGV4LCBjb2xJbmRleCwgY29sdW1uOiBjb2wgfSkgOiB2YWx1ZTI7CiAgICAgICAgICBjb25zdCBlZGl0S2V5ID0gU3RyaW5nKGNvbC5rZXkpOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZGJsY2xpY2s9JHsoZTExKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGRibEFjdGlvbiA9IHRoaXMuZGF0YUFjdGlvbnMuZmluZCgoYWN0aW9uQXJnKSA9PiBhY3Rpb25BcmcudHlwZS5pbmNsdWRlcygiZG91YmxlQ2xpY2siKSk7CiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRhYmxlRmllbGRzLmluY2x1ZGVzKGVkaXRLZXkpKSB7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDZWxsRWRpdGluZyhlMTEsIGl0ZW1BcmcsIGVkaXRLZXkpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGRibEFjdGlvbikgewogICAgICAgICAgICAgIGRibEFjdGlvbi5hY3Rpb25GdW5jKHsgaXRlbTogaXRlbUFyZywgdGFibGU6IHRoaXMgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbm5lckNlbGxDb250YWluZXIiPiR7Y29udGVudDN9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgOwogICAgICAgIH0pfQogICAgICAgICAgICAgICAgICAgICAgICAkeygoKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5kYXRhQWN0aW9ucyAmJiB0aGlzLmRhdGFBY3Rpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImFjdGlvbnNDb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbnNDb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmdldEFjdGlvbnNGb3JUeXBlKCJpblJvdyIpLm1hcCgoYWN0aW9uQXJnKSA9PiBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iYWN0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gYWN0aW9uQXJnLmFjdGlvbkZ1bmMoewogICAgICAgICAgICAgIGl0ZW06IGl0ZW1BcmcsCiAgICAgICAgICAgICAgdGFibGU6IHRoaXMKICAgICAgICAgICAgfSl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25BcmcuaWNvbk5hbWUgPyBiMmAgPGRlZXMtaWNvbiAuaWNvbj0ke2FjdGlvbkFyZy5pY29uTmFtZX0+PC9kZWVzLWljb24+IGAgOiBhY3Rpb25BcmcubmFtZX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgOwogICAgICAgICAgfQogICAgICAgIH0pKCl9CiAgICAgICAgICAgICAgICAgICAgICA8L3RyPmA7CiAgICAgIH0pfQogICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgIDogYjJgIDxkaXYgY2xhc3M9Im5vRGF0YVNldCI+Tm8gZGF0YSBzZXQhPC9kaXY+IGB9CiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlU3RhdGlzdGljcyI+CiAgICAgICAgICAgICR7dGhpcy5kYXRhLmxlbmd0aH0gJHt0aGlzLmRhdGFOYW1lIHx8ICJkYXRhIHJvd3MifSAodG90YWwpIHwKICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGVkRGF0YVJvdyA/IGAjICR7dGhpcy5kYXRhLmluZGV4T2YodGhpcy5zZWxlY3RlZERhdGFSb3cpICsgMX1gIDogYE5vYH0KICAgICAgICAgICAgc2VsZWN0ZWQKICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyQWN0aW9ucyI+CiAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlc29sdmVFeGVjKGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCByZXN1bHRBcnJheSA9IFtdOwogICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuZGF0YUFjdGlvbnMpIHsKICAgICAgICAgIGlmICghYWN0aW9uLnR5cGUuaW5jbHVkZXMoImZvb3RlciIpKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIHJlc3VsdEFycmF5LnB1c2goYjJgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJmb290ZXJBY3Rpb24iCiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gewogICAgICAgICAgICBhY3Rpb24uYWN0aW9uRnVuYyh7CiAgICAgICAgICAgICAgaXRlbTogdGhpcy5zZWxlY3RlZERhdGFSb3csCiAgICAgICAgICAgICAgdGFibGU6IHRoaXMKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9fQogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgJHthY3Rpb24uaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uU2l6ZT0kezE0fSAuaWNvbj0ke2FjdGlvbi5pY29uTmFtZX0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb24ubmFtZX1gIDogYWN0aW9uLm5hbWV9CiAgICAgICAgICAgICAgICAgIDwvZGl2PmApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CiAgICAgIH0pfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIHRoaXMuZGV0ZXJtaW5lQ29sdW1uV2lkdGhzKCk7CiAgICAgIGlmICh0aGlzLnNlYXJjaGFibGUpIHsKICAgICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZGF0YUFjdGlvbnMuZmluZCgoYWN0aW9uQXJnKSA9PiBhY3Rpb25BcmcudHlwZS5pbmNsdWRlcygiaGVhZGVyIikgJiYgYWN0aW9uQXJnLm5hbWUgPT09ICJTZWFyY2giKTsKICAgICAgICBpZiAoIWV4aXN0aW5nKSB7CiAgICAgICAgICB0aGlzLmRhdGFBY3Rpb25zLnVuc2hpZnQoewogICAgICAgICAgICBuYW1lOiAiU2VhcmNoIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJtYWduaWZ5aW5nR2xhc3MiLAogICAgICAgICAgICB0eXBlOiBbImhlYWRlciJdLAogICAgICAgICAgICBhY3Rpb25GdW5jOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coIm9wZW4gc2VhcmNoIik7CiAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoR3JpZCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoR3JpZCIpOwogICAgICAgICAgICAgIHNlYXJjaEdyaWQuY2xhc3NMaXN0LnRvZ2dsZSgiaGlkZGVuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgY29uc29sZS5sb2codGhpcy5kYXRhQWN0aW9ucyk7CiAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgICB9CiAgICAgICAgOwogICAgICAgIHRoaXMud2lyZVNlYXJjaElucHV0cygpOwogICAgICB9CiAgICB9CiAgICBfX2RlYm91bmNlVGltZXI7CiAgICBkZWJvdW5jZVJ1bihmbiwgbXMgPSAyMDApIHsKICAgICAgaWYgKHRoaXMuX19kZWJvdW5jZVRpbWVyKQogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9fZGVib3VuY2VUaW1lcik7CiAgICAgIHRoaXMuX19kZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dChmbiwgbXMpOwogICAgfQogICAgd2lyZVNlYXJjaElucHV0cygpIHsKICAgICAgY29uc3Qgc2VhcmNoVGV4dEVsID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoR3JpZCBkZWVzLWlucHV0LXRleHQiKTsKICAgICAgY29uc3Qgc2VhcmNoTW9kZUVsID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoR3JpZCBkZWVzLWlucHV0LW11bHRpdG9nZ2xlIik7CiAgICAgIGlmIChzZWFyY2hUZXh0RWwgJiYgIXRoaXMuX19zZWFyY2hUZXh0U3ViKSB7CiAgICAgICAgdGhpcy5fX3NlYXJjaFRleHRTdWIgPSBzZWFyY2hUZXh0RWwuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKGVsKSA9PiB7CiAgICAgICAgICBjb25zdCB2YWwgPSBlbD8udmFsdWUgPz8gIiI7CiAgICAgICAgICB0aGlzLmRlYm91bmNlUnVuKCgpID0+IHsKICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoTW9kZSA9PT0gInNlcnZlciIpIHsKICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWFyY2hSZXF1ZXN0IiwgewogICAgICAgICAgICAgICAgZGV0YWlsOiB7IHF1ZXJ5OiB2YWwsIG1vZGU6ICJzZXJ2ZXIiIH0sCiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlCiAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyVGV4dCh2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoc2VhcmNoTW9kZUVsICYmICF0aGlzLl9fc2VhcmNoTW9kZVN1YikgewogICAgICAgIHRoaXMuX19zZWFyY2hNb2RlU3ViID0gc2VhcmNoTW9kZUVsLmNoYW5nZVN1YmplY3Quc3Vic2NyaWJlKChlbCkgPT4gewogICAgICAgICAgY29uc3QgbW9kZSA9IGVsPy5zZWxlY3RlZE9wdGlvbiB8fCBlbD8udmFsdWUgfHwgInRhYmxlIjsKICAgICAgICAgIGlmIChtb2RlID09PSAidGFibGUiIHx8IG1vZGUgPT09ICJkYXRhIiB8fCBtb2RlID09PSAic2VydmVyIikgewogICAgICAgICAgICB0aGlzLnNlYXJjaE1vZGUgPSBtb2RlOwogICAgICAgICAgICBjb25zdCB2YWwgPSBzZWFyY2hUZXh0RWw/LnZhbHVlID8/ICIiOwogICAgICAgICAgICB0aGlzLmRlYm91bmNlUnVuKCgpID0+IHsKICAgICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hNb2RlID09PSAic2VydmVyIikgewogICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VhcmNoUmVxdWVzdCIsIHsgZGV0YWlsOiB7IHF1ZXJ5OiB2YWwsIG1vZGU6ICJzZXJ2ZXIiIH0sIGJ1YmJsZXM6IHRydWUgfSkpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLnNldEZpbHRlclRleHQodmFsKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBhc3luYyBkZXRlcm1pbmVDb2x1bW5XaWR0aHMoKSB7CiAgICAgIGNvbnN0IGRvbXRvb2xzID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIGNvbnN0IHRhYmxlMiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJ0YWJsZSIpOwogICAgICBpZiAoIXRhYmxlMikKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGNlbGxzMiA9IHRhYmxlMi5yb3dzWzBdLmNlbGxzOwogICAgICBjb25zdCBoYW5kbGVDb2x1bW5CeUluZGV4ID0gYXN5bmMgKGkxMSwgd2FpdEZvclJlbmRlckFyZyA9IGZhbHNlKSA9PiB7CiAgICAgICAgY29uc3QgZG9uZSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIGNvbnN0IGNlbGwyID0gY2VsbHMyW2kxMV07CiAgICAgICAgY29uc3Qgd2lkdGggPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsMikud2lkdGg7CiAgICAgICAgaWYgKGNlbGwyLnRleHRDb250ZW50LmluY2x1ZGVzKCJBY3Rpb25zIikpIHsKICAgICAgICAgIGNvbnN0IG5lZWRlZFdpZHRoID0gdGhpcy5kYXRhQWN0aW9ucy5maWx0ZXIoKGFjdGlvbkFyZykgPT4gYWN0aW9uQXJnLnR5cGUuaW5jbHVkZXMoImluUm93IikpLmxlbmd0aCAqIDM2OwogICAgICAgICAgY2VsbDIuc3R5bGUud2lkdGggPSBgJHtNYXRoLm1heChuZWVkZWRXaWR0aCwgNjgpfXB4YDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2VsbDIuc3R5bGUud2lkdGggPSB3aWR0aDsKICAgICAgICB9CiAgICAgICAgaWYgKHdhaXRGb3JSZW5kZXJBcmcpIHsKICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgIGRvbmUucmVzb2x2ZSgpOwogICAgICAgICAgfSk7CiAgICAgICAgICBhd2FpdCBkb25lLnByb21pc2U7CiAgICAgICAgfQogICAgICB9OwogICAgICBpZiAoY2VsbHMyW2NlbGxzMi5sZW5ndGggLSAxXS50ZXh0Q29udGVudC5pbmNsdWRlcygiQWN0aW9ucyIpKSB7CiAgICAgICAgYXdhaXQgaGFuZGxlQ29sdW1uQnlJbmRleChjZWxsczIubGVuZ3RoIC0gMSwgdHJ1ZSk7CiAgICAgIH0KICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgY2VsbHMyLmxlbmd0aDsgaTExKyspIHsKICAgICAgICBpZiAoY2VsbHMyW2kxMV0udGV4dENvbnRlbnQuaW5jbHVkZXMoIkFjdGlvbnMiKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGF3YWl0IGhhbmRsZUNvbHVtbkJ5SW5kZXgoaTExKTsKICAgICAgfQogICAgICB0YWJsZTIuc3R5bGUudGFibGVMYXlvdXQgPSAiZml4ZWQiOwogICAgfQogICAgLy8gY29tcHV0ZSBoZWxwZXJzIG1vdmVkIHRvIC4vZGF0YS50cwogICAgdG9nZ2xlU29ydChjb2wpIHsKICAgICAgY29uc3Qga2V5MiA9IFN0cmluZyhjb2wua2V5KTsKICAgICAgaWYgKHRoaXMuc29ydEtleSAhPT0ga2V5MikgewogICAgICAgIHRoaXMuc29ydEtleSA9IGtleTI7CiAgICAgICAgdGhpcy5zb3J0RGlyID0gImFzYyI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHRoaXMuc29ydERpciA9PT0gImFzYyIpCiAgICAgICAgICB0aGlzLnNvcnREaXIgPSAiZGVzYyI7CiAgICAgICAgZWxzZSBpZiAodGhpcy5zb3J0RGlyID09PSAiZGVzYyIpIHsKICAgICAgICAgIHRoaXMuc29ydERpciA9IG51bGw7CiAgICAgICAgICB0aGlzLnNvcnRLZXkgPSB2b2lkIDA7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICB0aGlzLnNvcnREaXIgPSAiYXNjIjsKICAgICAgfQogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzb3J0Q2hhbmdlIiwgewogICAgICAgIGRldGFpbDogeyBrZXk6IHRoaXMuc29ydEtleSwgZGlyOiB0aGlzLnNvcnREaXIgfSwKICAgICAgICBidWJibGVzOiB0cnVlCiAgICAgIH0pKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBnZXRBcmlhU29ydChjb2wpIHsKICAgICAgaWYgKFN0cmluZyhjb2wua2V5KSAhPT0gdGhpcy5zb3J0S2V5IHx8ICF0aGlzLnNvcnREaXIpCiAgICAgICAgcmV0dXJuICJub25lIjsKICAgICAgcmV0dXJuIHRoaXMuc29ydERpciA9PT0gImFzYyIgPyAiYXNjZW5kaW5nIiA6ICJkZXNjZW5kaW5nIjsKICAgIH0KICAgIHJlbmRlclNvcnRJbmRpY2F0b3IoY29sKSB7CiAgICAgIGlmIChTdHJpbmcoY29sLmtleSkgIT09IHRoaXMuc29ydEtleSB8fCAhdGhpcy5zb3J0RGlyKQogICAgICAgIHJldHVybiBiMmBgOwogICAgICByZXR1cm4gYjJgPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OjZweDsgb3BhY2l0eTowLjc7Ij4ke3RoaXMuc29ydERpciA9PT0gImFzYyIgPyAiXHUyNUIyIiA6ICJcdTI1QkMifTwvc3Bhbj5gOwogICAgfQogICAgLy8gZmlsdGVyaW5nIGhlbHBlcnMKICAgIHNldEZpbHRlclRleHQodmFsdWUyKSB7CiAgICAgIGNvbnN0IHByZXYgPSB0aGlzLmZpbHRlclRleHQ7CiAgICAgIHRoaXMuZmlsdGVyVGV4dCA9IHZhbHVlMiA/PyAiIjsKICAgICAgaWYgKHByZXYgIT09IHRoaXMuZmlsdGVyVGV4dCkgewogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImZpbHRlckNoYW5nZSIsIHsKICAgICAgICAgIGRldGFpbDogeyB0ZXh0OiB0aGlzLmZpbHRlclRleHQsIGNvbHVtbnM6IHsgLi4udGhpcy5jb2x1bW5GaWx0ZXJzIH0gfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgICB9KSk7CiAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgIH0KICAgIH0KICAgIHNldENvbHVtbkZpbHRlcihrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jb2x1bW5GaWx0ZXJzID0geyAuLi50aGlzLmNvbHVtbkZpbHRlcnMsIFtrZXkyXTogdmFsdWUyIH07CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImZpbHRlckNoYW5nZSIsIHsKICAgICAgICBkZXRhaWw6IHsgdGV4dDogdGhpcy5maWx0ZXJUZXh0LCBjb2x1bW5zOiB7IC4uLnRoaXMuY29sdW1uRmlsdGVycyB9IH0sCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgfQogICAgLy8gc2VsZWN0aW9uIGhlbHBlcnMKICAgIGdldFJvd0lkKHJvdykgewogICAgICBpZiAodGhpcy5yb3dLZXkpIHsKICAgICAgICBpZiAodHlwZW9mIHRoaXMucm93S2V5ID09PSAiZnVuY3Rpb24iKQogICAgICAgICAgcmV0dXJuIHRoaXMucm93S2V5KHJvdyk7CiAgICAgICAgcmV0dXJuIFN0cmluZyhyb3dbdGhpcy5yb3dLZXldKTsKICAgICAgfQogICAgICBjb25zdCBrZXkyID0gcm93OwogICAgICBpZiAoIXRoaXMuX3Jvd0lkTWFwLmhhcyhrZXkyKSkgewogICAgICAgIHRoaXMuX3Jvd0lkTWFwLnNldChrZXkyLCBTdHJpbmcoKyt0aGlzLl9yb3dJZENvdW50ZXIpKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5fcm93SWRNYXAuZ2V0KGtleTIpOwogICAgfQogICAgaXNSb3dTZWxlY3RlZChyb3cpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJZHMuaGFzKHRoaXMuZ2V0Um93SWQocm93KSk7CiAgICB9CiAgICB0b2dnbGVSb3dTZWxlY3RlZChyb3cpIHsKICAgICAgY29uc3QgaWQgPSB0aGlzLmdldFJvd0lkKHJvdyk7CiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJzaW5nbGUiKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5jbGVhcigpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuYWRkKGlkKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJtdWx0aSIpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3RlZElkcy5oYXMoaWQpKQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5kZWxldGUoaWQpOwogICAgICAgIGVsc2UKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuYWRkKGlkKTsKICAgICAgfQogICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBzZXRSb3dTZWxlY3RlZChyb3csIGNoZWNrZWQpIHsKICAgICAgY29uc3QgaWQgPSB0aGlzLmdldFJvd0lkKHJvdyk7CiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJzaW5nbGUiKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5jbGVhcigpOwogICAgICAgIGlmIChjaGVja2VkKQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5hZGQoaWQpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gIm11bHRpIikgewogICAgICAgIGlmIChjaGVja2VkKQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5hZGQoaWQpOwogICAgICAgIGVsc2UKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuZGVsZXRlKGlkKTsKICAgICAgfQogICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBhcmVBbGxWaXNpYmxlU2VsZWN0ZWQoKSB7CiAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLl9sYXN0Vmlld0RhdGEgfHwgW107CiAgICAgIGlmICh2aWV3Lmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGZvciAoY29uc3QgcjExIG9mIHZpZXcpIHsKICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRJZHMuaGFzKHRoaXMuZ2V0Um93SWQocjExKSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpc1Zpc2libGVTZWxlY3Rpb25JbmRldGVybWluYXRlKCkgewogICAgICBjb25zdCB2aWV3ID0gdGhpcy5fbGFzdFZpZXdEYXRhIHx8IFtdOwogICAgICBpZiAodmlldy5sZW5ndGggPT09IDApCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBsZXQgY291bnQyID0gMDsKICAgICAgZm9yIChjb25zdCByMTEgb2YgdmlldykgewogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRzLmhhcyh0aGlzLmdldFJvd0lkKHIxMSkpKQogICAgICAgICAgY291bnQyKys7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvdW50MiA+IDAgJiYgY291bnQyIDwgdmlldy5sZW5ndGg7CiAgICB9CiAgICBzZXRTZWxlY3RWaXNpYmxlKGNoZWNrZWQpIHsKICAgICAgY29uc3QgdmlldyA9IHRoaXMuX2xhc3RWaWV3RGF0YSB8fCBbXTsKICAgICAgaWYgKGNoZWNrZWQpIHsKICAgICAgICBmb3IgKGNvbnN0IHIxMSBvZiB2aWV3KQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5hZGQodGhpcy5nZXRSb3dJZChyMTEpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmb3IgKGNvbnN0IHIxMSBvZiB2aWV3KQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5kZWxldGUodGhpcy5nZXRSb3dJZChyMTEpKTsKICAgICAgfQogICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBlbWl0U2VsZWN0aW9uQ2hhbmdlKCkgewogICAgICBjb25zdCBzZWxlY3RlZElkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZElkcyk7CiAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZGF0YS5maWx0ZXIoKHIxMSkgPT4gdGhpcy5zZWxlY3RlZElkcy5oYXModGhpcy5nZXRSb3dJZChyMTEpKSk7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlbGVjdGlvbkNoYW5nZSIsIHsKICAgICAgICBkZXRhaWw6IHsgc2VsZWN0ZWRJZHMsIHNlbGVjdGVkUm93cyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgZ2V0QWN0aW9uc0ZvclR5cGUodHlwZUFyZykgewogICAgICBjb25zdCBhY3Rpb25zID0gW107CiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuZGF0YUFjdGlvbnMpIHsKICAgICAgICBpZiAoIWFjdGlvbi50eXBlLmluY2x1ZGVzKHR5cGVBcmcpKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7CiAgICAgIH0KICAgICAgcmV0dXJuIGFjdGlvbnM7CiAgICB9CiAgICBhc3luYyBoYW5kbGVDZWxsRWRpdGluZyhldmVudCwgaXRlbUFyZywga2V5MikgewogICAgICBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgICBjb25zdCBvcmlnaW5hbENvbG9yID0gdGFyZ2V0LnN0eWxlLmNvbG9yOwogICAgICB0YXJnZXQuc3R5bGUuY29sb3IgPSAidHJhbnNwYXJlbnQiOwogICAgICBjb25zdCB0cmFuc2Zvcm1lZEl0ZW0gPSB0aGlzLmRpc3BsYXlGdW5jdGlvbihpdGVtQXJnKTsKICAgICAgY29uc3QgaW5pdGlhbFZhbHVlID0gdHJhbnNmb3JtZWRJdGVtW2tleTJdID8/IGl0ZW1Bcmdba2V5Ml0gPz8gIiI7CiAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgICAgaW5wdXQudHlwZSA9ICJ0ZXh0IjsKICAgICAgaW5wdXQudmFsdWUgPSBpbml0aWFsVmFsdWU7CiAgICAgIGNvbnN0IGJsdXJJbnB1dCA9IGFzeW5jIChibHVyQXJnID0gdHJ1ZSwgc2F2ZUFyZyA9IGZhbHNlKSA9PiB7CiAgICAgICAgaWYgKGJsdXJBcmcpIHsKICAgICAgICAgIGlucHV0LmJsdXIoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNhdmVBcmcpIHsKICAgICAgICAgIGl0ZW1Bcmdba2V5Ml0gPSBpbnB1dC52YWx1ZTsKICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgIH0KICAgICAgICBpbnB1dC5yZW1vdmUoKTsKICAgICAgICB0YXJnZXQuc3R5bGUuY29sb3IgPSBvcmlnaW5hbENvbG9yOwogICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICB9OwogICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gewogICAgICAgIGJsdXJJbnB1dChmYWxzZSwgZmFsc2UpOwogICAgICB9KTsKICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICBpZiAoZTExLmtleSA9PT0gIkVudGVyIikgewogICAgICAgICAgYmx1cklucHV0KHRydWUsIHRydWUpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRhcmdldC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgIGlucHV0LmZvY3VzKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczMzKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzVGFibGUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mb3JtL2RlZXMtZm9ybS9kZWVzLWZvcm0uZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMyNSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgLmZvcm0tb3V0cHV0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICB9CiAgICAgIAogICAgICAuc3RhdHVzLW1lc3NhZ2UgewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIAogICAgICAuc3RhdHVzLW1lc3NhZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3MC42JSA0NS4zJSAvIDAuMSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3MC42JSAzNS4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDY1LjMlKSIpfTsKICAgICAgfQogICAgICAKICAgICAgLnN0YXR1cy1tZXNzYWdlLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjEpIiwgImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDQwLjYlKSIsICJoc2woMCA3Mi4yJSA2MC42JSkiKX07CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGZvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogIGNvbnN0IG91dHB1dERpdiA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiLmZvcm0tb3V0cHV0Iik7CiAgaWYgKGZvcm0gJiYgb3V0cHV0RGl2KSB7CiAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgYXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRhdGEgPSBldmVudEFyZy5kZXRhaWwuZGF0YTsKICAgICAgY29uc29sZS5sb2coIkZvcm0gc3VibWl0dGVkIHdpdGggZGF0YToiLCBkYXRhKTsKICAgICAgZm9ybS5zZXRTdGF0dXMoInBlbmRpbmciLCAiUHJvY2Vzc2luZyB5b3VyIHJlZ2lzdHJhdGlvbi4uLiIpOwogICAgICBvdXRwdXREaXYuaW5uZXJIVE1MID0gYDxzdHJvbmc+U3VibWl0dGVkIERhdGE6PC9zdHJvbmc+CiR7SlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMil9YDsKICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMjUucGx1Z2lucy5zbWFydGRlbGF5LmRlbGF5Rm9yKDJlMyk7CiAgICAgIGZvcm0uc2V0U3RhdHVzKCJzdWNjZXNzIiwgIlJlZ2lzdHJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ISIpOwogICAgICBhd2FpdCBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMmUzKTsKICAgICAgZm9ybS5yZXNldCgpOwogICAgICBvdXRwdXREaXYuaW5uZXJIVE1MID0gIjxlbT5Gb3JtIGhhcyBiZWVuIHJlc2V0PC9lbT4iOwogICAgfSk7CiAgICBjb25zdCBpbnB1dHMgPSBmb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtdGV4dCwgZGVlcy1pbnB1dC1kcm9wZG93biwgZGVlcy1pbnB1dC1jaGVja2JveCIpOwogICAgaW5wdXRzLmZvckVhY2goKGlucHV0KSA9PiB7CiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVN1YmplY3QiLCAoKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coIkZpZWxkIGNoYW5nZWQ6IiwgaW5wdXQuZ2V0QXR0cmlidXRlKCJrZXkiKSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9IkNvbXBsZXRlIEZvcm0gRXhhbXBsZSIgLmRlc2NyaXB0aW9uPSJBIGNvbXByZWhlbnNpdmUgZm9ybSB3aXRoIHZhcmlvdXMgaW5wdXQgdHlwZXMsIHZhbGlkYXRpb24sIGFuZCBmb3JtIHN1Ym1pc3Npb24gaGFuZGxpbmciPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfSAKICAgICAgICAgICAga2V5PSJmaXJzdE5hbWUiIAogICAgICAgICAgICBsYWJlbD0iRmlyc3QgTmFtZSIKICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IllvdXIgZ2l2ZW4gbmFtZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9IAogICAgICAgICAgICBrZXk9Imxhc3ROYW1lIiAKICAgICAgICAgICAgbGFiZWw9Ikxhc3QgTmFtZSIKICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0gCiAgICAgICAgICAgIGtleT0iZW1haWwiIAogICAgICAgICAgICBsYWJlbD0iRW1haWwgQWRkcmVzcyIKICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IldlIHdpbGwgdXNlIHRoaXMgdG8gY29udGFjdCB5b3UifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICBrZXk9ImNvdW50cnkiCiAgICAgICAgICAgIC5sYWJlbD0keyJDb3VudHJ5In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJVbml0ZWQgU3RhdGVzIiwga2V5OiAidXMiIH0sCiAgeyBvcHRpb246ICJDYW5hZGEiLCBrZXk6ICJjYSIgfSwKICB7IG9wdGlvbjogIkdlcm1hbnkiLCBrZXk6ICJkZSIgfSwKICB7IG9wdGlvbjogIkZyYW5jZSIsIGtleTogImZyIiB9LAogIHsgb3B0aW9uOiAiVW5pdGVkIEtpbmdkb20iLCBrZXk6ICJ1ayIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICBrZXk9InBhc3N3b3JkIgogICAgICAgICAgICBsYWJlbD0iUGFzc3dvcmQiCiAgICAgICAgICAgIGlzUGFzc3dvcmRCb29sCiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJNaW5pbXVtIDggY2hhcmFjdGVycyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIGtleT0idGVybXMiCiAgICAgICAgICAgIGxhYmVsPSJJIGFncmVlIHRvIHRoZSBUZXJtcyBhbmQgQ29uZGl0aW9ucyIKICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgIGtleT0ibmV3c2xldHRlciIKICAgICAgICAgICAgbGFiZWw9IlNlbmQgbWUgcHJvbW90aW9uYWwgZW1haWxzIgogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q3JlYXRlIEFjY291bnQ8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1vdXRwdXQiPgogICAgICAgICAgPGVtPlN1Ym1pdCB0aGUgZm9ybSB0byBzZWUgdGhlIGNvbGxlY3RlZCBkYXRhLi4uPC9lbT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGZvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogIGlmIChmb3JtKSB7CiAgICBjb25zb2xlLmxvZygiSG9yaXpvbnRhbCBmb3JtIGxheW91dCBhY3RpdmUiKTsKICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgZmlsdGVycyA9IGV2ZW50LmRldGFpbC5kYXRhOwogICAgICBjb25zb2xlLmxvZygiRmlsdGVyIGFwcGxpZWQ6IiwgZmlsdGVycyk7CiAgICAgIGNvbnN0IHJlc3VsdHNDb3VudCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMCkgKyAxOwogICAgICBjb25zb2xlLmxvZyhgRm91bmQgJHtyZXN1bHRzQ291bnR9IHJlc3VsdHMgd2l0aCBmaWx0ZXJzOmAsIGZpbHRlcnMpOwogICAgfSk7CiAgICBjb25zdCBpbnB1dHMgPSBmb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoIltrZXldIik7CiAgICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHsKICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsIGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCBmb3JtRGF0YSA9IGF3YWl0IGZvcm0uY29sbGVjdEZvcm1EYXRhKCk7CiAgICAgICAgY29uc29sZS5sb2coIkxpdmUgZmlsdGVyIHVwZGF0ZToiLCBmb3JtRGF0YSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9Ikhvcml6b250YWwgRm9ybSBMYXlvdXQiIC5kZXNjcmlwdGlvbj0iQ29tcGFjdCBmb3JtIHdpdGggaW5wdXRzIGFycmFuZ2VkIGhvcml6b250YWxseSAtIHBlcmZlY3QgZm9yIGZpbHRlcnMgYW5kIHF1aWNrIGZvcm1zIj4KICAgICAgICA8ZGVlcy1mb3JtIGhvcml6b250YWwtbGF5b3V0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAga2V5PSJzZWFyY2giIAogICAgICAgICAgICBsYWJlbD0iU2VhcmNoIgogICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIga2V5d29yZHMuLi4iCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIGtleT0iY2F0ZWdvcnkiCiAgICAgICAgICAgIC5sYWJlbD0keyJDYXRlZ29yeSJ9CiAgICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHtmYWxzZX0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJBbGwiLCBrZXk6ICJhbGwiIH0sCiAgeyBvcHRpb246ICJQcm9kdWN0cyIsIGtleTogInByb2R1Y3RzIiB9LAogIHsgb3B0aW9uOiAiU2VydmljZXMiLCBrZXk6ICJzZXJ2aWNlcyIgfSwKICB7IG9wdGlvbjogIlN1cHBvcnQiLCBrZXk6ICJzdXBwb3J0IiB9Cl19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICBrZXk9InNvcnQiCiAgICAgICAgICAgIC5sYWJlbD0keyJTb3J0IEJ5In0KICAgICAgICAgICAgLmVuYWJsZVNlYXJjaD0ke2ZhbHNlfQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIk5ld2VzdCIsIGtleTogIm5ld2VzdCIgfSwKICB7IG9wdGlvbjogIlBvcHVsYXIiLCBrZXk6ICJwb3B1bGFyIiB9LAogIHsgb3B0aW9uOiAiUHJpY2U6IExvdyB0byBIaWdoIiwga2V5OiAicHJpY2VfYXNjIiB9LAogIHsgb3B0aW9uOiAiUHJpY2U6IEhpZ2ggdG8gTG93Iiwga2V5OiAicHJpY2VfZGVzYyIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gKICAgICAgICAgICAga2V5PSJpblN0b2NrIgogICAgICAgICAgICBsYWJlbD0iSW4gU3RvY2sgT25seSIKICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBmb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICBjb25zdCBzdGF0dXNEaXYgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNzdGF0dXMtZGlzcGxheSIpOwogIGlmIChmb3JtKSB7CiAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgYXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRhdGEgPSBldmVudEFyZy5kZXRhaWwuZGF0YTsKICAgICAgY29uc29sZS5sb2coIkFkdmFuY2VkIGZvcm0gZGF0YToiLCBkYXRhKTsKICAgICAgZm9ybS5zZXRTdGF0dXMoInBlbmRpbmciLCAiVmFsaWRhdGluZyB5b3VyIGluZm9ybWF0aW9uLi4uIik7CiAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czI1LnBsdWdpbnMuc21hcnRkZWxheS5kZWxheUZvcigxNTAwKTsKICAgICAgaWYgKGRhdGEuaWJhbiAmJiBkYXRhLmliYW4ubGVuZ3RoID4gMTUpIHsKICAgICAgICBmb3JtLnNldFN0YXR1cygic3VjY2VzcyIsICJBcHBsaWNhdGlvbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5ISIpOwogICAgICAgIGlmIChzdGF0dXNEaXYpIHsKICAgICAgICAgIHN0YXR1c0Rpdi5jbGFzc05hbWUgPSAic3RhdHVzLW1lc3NhZ2Ugc3VjY2VzcyI7CiAgICAgICAgICBzdGF0dXNEaXYudGV4dENvbnRlbnQgPSAiXHUyNzEzIFlvdXIgYXBwbGljYXRpb24gaGFzIGJlZW4gc3VibWl0dGVkLiBXZSB3aWxsIGNvbnRhY3QgeW91IHNvb24uIjsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9ybS5zZXRTdGF0dXMoImVycm9yIiwgIlBsZWFzZSBjaGVjayB5b3VyIElCQU4iKTsKICAgICAgICBpZiAoc3RhdHVzRGl2KSB7CiAgICAgICAgICBzdGF0dXNEaXYuY2xhc3NOYW1lID0gInN0YXR1cy1tZXNzYWdlIGVycm9yIjsKICAgICAgICAgIHN0YXR1c0Rpdi50ZXh0Q29udGVudCA9ICJcdTI3MTcgSW52YWxpZCBJQkFOIGZvcm1hdC4gUGxlYXNlIGNoZWNrIGFuZCB0cnkgYWdhaW4uIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc29sZS5sb2coIkZvcm0gZGF0YSBsb2dnZWQ6IiwgZGF0YSk7CiAgICB9KTsKICAgIGNvbnN0IGZpbGVVcGxvYWQgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZmlsZXVwbG9hZCIpOwogICAgaWYgKGZpbGVVcGxvYWQpIHsKICAgICAgZmlsZVVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRldGFpbD8uZmlsZXMgfHwgW107CiAgICAgICAgY29uc29sZS5sb2coYCR7ZmlsZXMubGVuZ3RofSBmaWxlKHMpIHNlbGVjdGVkIGZvciB1cGxvYWRgKTsKICAgICAgfSk7CiAgICB9CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9IkFkdmFuY2VkIEZvcm0gRmVhdHVyZXMiIC5kZXNjcmlwdGlvbj0iRm9ybSB3aXRoIHNwZWNpYWxpemVkIGlucHV0IHR5cGVzIGFuZCBjb21wbGV4IHZhbGlkYXRpb24iPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1pYmFuIAogICAgICAgICAgICBrZXk9ImliYW4iCiAgICAgICAgICAgIGxhYmVsPSJJQkFOIgogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZQogICAgICAgICAgICBrZXk9InBob25lIgogICAgICAgICAgICBsYWJlbD0iUGhvbmUgTnVtYmVyIgogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAga2V5PSJwcmVmZXJlbmNlcyIKICAgICAgICAgICAgLmxhYmVsPSR7Ik5vdGlmaWNhdGlvbiBQcmVmZXJlbmNlcyJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJFbWFpbCIsICJTTVMiLCAiUHVzaCIsICJJbi1BcHAiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkVtYWlsIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpc2VsZWN0CiAgICAgICAgICAgIGtleT0iaW50ZXJlc3RzIgogICAgICAgICAgICAubGFiZWw9JHsiQXJlYXMgb2YgSW50ZXJlc3QifQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIlRlY2hub2xvZ3kiLCBrZXk6ICJ0ZWNoIiB9LAogIHsgb3B0aW9uOiAiRGVzaWduIiwga2V5OiAiZGVzaWduIiB9LAogIHsgb3B0aW9uOiAiQnVzaW5lc3MiLCBrZXk6ICJidXNpbmVzcyIgfSwKICB7IG9wdGlvbjogIk1hcmtldGluZyIsIGtleTogIm1hcmtldGluZyIgfSwKICB7IG9wdGlvbjogIlNhbGVzIiwga2V5OiAic2FsZXMiIH0KXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGlzZWxlY3Q+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAga2V5PSJkb2N1bWVudHMiCiAgICAgICAgICAgIC5sYWJlbD0keyJVcGxvYWQgRG9jdW1lbnRzIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlBERiwgRE9DLCBvciBET0NYIGZpbGVzIHVwIHRvIDEwTUIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5TdWJtaXQgQXBwbGljYXRpb248L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0ic3RhdHVzLWRpc3BsYXkiPjwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZm9ybS9kZWVzLWZvcm0vZGVlcy1mb3JtLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CnZhciBfX2VzRGVjb3JhdGUzMyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMzQgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIEZPUk1fSU5QVVRfVFlQRVMgPSBbCiAgRGVlc0lucHV0Q2hlY2tib3gsCiAgRGVlc0lucHV0Q29kZSwKICBEZWVzSW5wdXREYXRlcGlja2VyLAogIERlZXNJbnB1dERyb3Bkb3duLAogIERlZXNJbnB1dEZpbGV1cGxvYWQsCiAgRGVlc0lucHV0SWJhbiwKICBEZWVzSW5wdXRNdWx0aXRvZ2dsZSwKICBEZWVzSW5wdXRQaG9uZSwKICBEZWVzSW5wdXRRdWFudGl0eVNlbGVjdG9yLAogIERlZXNJbnB1dFJhZGlvZ3JvdXAsCiAgRGVlc0lucHV0VGV4dCwKICBEZWVzSW5wdXRUb2dnbGUsCiAgRGVlc0lucHV0VHlwZWxpc3QsCiAgRGVlc1RhYmxlCl07CnZhciBEZWVzRm9ybSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtZm9ybSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2hvcml6b250YWxMYXlvdXRfZGVjb3JhdG9yczsKICBsZXQgX2hvcml6b250YWxMYXlvdXRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ob3Jpem9udGFsTGF5b3V0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNGb3JtMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2hvcml6b250YWxMYXlvdXRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUsIGF0dHJpYnV0ZTogImhvcml6b250YWwtbGF5b3V0IiB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTMzKHRoaXMsIG51bGwsIF9ob3Jpem9udGFsTGF5b3V0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhvcml6b250YWxMYXlvdXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhvcml6b250YWxMYXlvdXQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaG9yaXpvbnRhbExheW91dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaG9yaXpvbnRhbExheW91dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ob3Jpem9udGFsTGF5b3V0X2luaXRpYWxpemVycywgX2hvcml6b250YWxMYXlvdXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNGb3JtMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjU7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkZvcm0iOwogICAgbmFtZSA9ICJteWZvcm0iOwogICAgY2hhbmdlU3ViamVjdCA9IG5ldyBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRyeC5yeGpzLlN1YmplY3QoKTsKICAgIHJlYWR5RGVmZXJyZWQgPSBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRwcm9taXNlLmRlZmVyKCk7CiAgICAjaG9yaXpvbnRhbExheW91dF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzNCh0aGlzLCBfaG9yaXpvbnRhbExheW91dF9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgIC8qKgogICAgICogQ29udHJvbHMgdGhlIGxheW91dCBtb2RlIG9mIGNoaWxkIGlucHV0IGNvbXBvbmVudHMKICAgICAqIFdoZW4gdHJ1ZSwgc2V0cyBhbGwgY2hpbGQgaW5wdXRzIHRvIGhvcml6b250YWwgbGF5b3V0CiAgICAgKi8KICAgIGdldCBob3Jpem9udGFsTGF5b3V0KCkgewogICAgICByZXR1cm4gdGhpcy4jaG9yaXpvbnRhbExheW91dF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhvcml6b250YWxMYXlvdXQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2hvcml6b250YWxMYXlvdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogY29udGVudHM7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBjb25zdCBmb3JtQ2hpbGRyZW4gPSB0aGlzLmdldEZvcm1FbGVtZW50cygpOwogICAgICB0aGlzLnVwZGF0ZVJlcXVpcmVkU3RhdHVzKCk7CiAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW5MYXlvdXRNb2RlKCk7CiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZm9ybUNoaWxkcmVuKSB7CiAgICAgICAgY2hpbGQuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4gewogICAgICAgICAgY29uc3QgdmFsdWVPYmplY3QgPSBhd2FpdCB0aGlzLmNvbGxlY3RGb3JtRGF0YSgpOwogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodmFsdWVPYmplY3QpOwogICAgICAgICAgY29uc29sZS5sb2codmFsdWVPYmplY3QpOwogICAgICAgICAgdGhpcy51cGRhdGVSZXF1aXJlZFN0YXR1cygpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGF3YWl0IHRoaXMuYWRkQmVoYXZpb3VycygpOwogICAgICB0aGlzLnJlYWR5RGVmZXJyZWQucmVzb2x2ZSgpOwogICAgfQogICAgZ2V0Rm9ybUVsZW1lbnRzKCkgewogICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5maWx0ZXIoKGNoaWxkKSA9PiBGT1JNX0lOUFVUX1RZUEVTLmluY2x1ZGVzKGNoaWxkLmNvbnN0cnVjdG9yKSk7CiAgICB9CiAgICBnZXRTdWJtaXRCdXR0b24oKSB7CiAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZpbmQoKGNoaWxkKSA9PiBjaGlsZCBpbnN0YW5jZW9mIERlZXNGb3JtU3VibWl0KTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZVJlcXVpcmVkU3RhdHVzKCkgewogICAgICBjb25zb2xlLmxvZygiY2hlY2tpbmcgdGhlIHJlcXVpcmVkIHN0YXR1cy4iKTsKICAgICAgbGV0IHJlcXVpcmVkT0sgPSB0cnVlOwogICAgICBmb3IgKGNvbnN0IGNoaWxkQXJnIG9mIHRoaXMuZ2V0Rm9ybUVsZW1lbnRzKCkpIHsKICAgICAgICBpZiAoY2hpbGRBcmcucmVxdWlyZWQgJiYgIWNoaWxkQXJnLnZhbHVlKSB7CiAgICAgICAgICByZXF1aXJlZE9LID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0aGlzLmdldFN1Ym1pdEJ1dHRvbigpKSB7CiAgICAgICAgdGhpcy5nZXRTdWJtaXRCdXR0b24oKS5kaXNhYmxlZCA9ICFyZXF1aXJlZE9LOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIGNvbGxlY3RzIHRoZSBmb3JtIGRhdGEKICAgICAqIEByZXR1cm5zCiAgICAgKi8KICAgIGFzeW5jIGNvbGxlY3RGb3JtRGF0YSgpIHsKICAgICAgY29uc3QgY2hpbGRyZW4yID0gdGhpcy5nZXRGb3JtRWxlbWVudHMoKTsKICAgICAgY29uc3QgdmFsdWVPYmplY3QgPSB7fTsKICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbjIpIHsKICAgICAgICBpZiAoIWNoaWxkLmtleSkgewogICAgICAgICAgY29uc29sZS5sb2coYGZvcm0gZWxlbWVudCB3aXRoIGxhYmVsICIke2NoaWxkLmxhYmVsfSIgaGFzIG5vIGtleS4gc2tpcHBpbmcuYCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgdmFsdWVPYmplY3RbY2hpbGQua2V5XSA9IGNoaWxkLnZhbHVlOwogICAgICB9CiAgICAgIHJldHVybiB2YWx1ZU9iamVjdDsKICAgIH0KICAgIGFzeW5jIGdhdGhlckFuZERpc3BhdGNoKCkgewogICAgICBjb25zdCB2YWx1ZU9iamVjdCA9IGF3YWl0IHRoaXMuY29sbGVjdEZvcm1EYXRhKCk7CiAgICAgIGNvbnN0IGZvcm1EYXRhRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoImZvcm1EYXRhIiwgewogICAgICAgIGRldGFpbDogewogICAgICAgICAgZGF0YTogdmFsdWVPYmplY3QKICAgICAgICB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgfSk7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChmb3JtRGF0YUV2ZW50KTsKICAgICAgY29uc29sZS5sb2coImRpc3BhdGNoZWQgZGF0YToiKTsKICAgICAgY29uc29sZS5sb2codmFsdWVPYmplY3QpOwogICAgfQogICAgc2V0U3RhdHVzKHZpc3VhbFN0YXRlQXJnLCB0ZXh0U3RhdGVBcmcpIHsKICAgICAgY29uc3QgaW5wdXRDaGlsZHJlbiA9IHRoaXMuZ2V0Rm9ybUVsZW1lbnRzKCk7CiAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbiA9IHRoaXMuZ2V0U3VibWl0QnV0dG9uKCk7CiAgICAgIHN3aXRjaCAodmlzdWFsU3RhdGVBcmcpIHsKICAgICAgICBjYXNlICJub3JtYWwiOgogICAgICAgICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICBzdWJtaXRCdXR0b24uc3RhdHVzID0gIm5vcm1hbCI7CiAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0Q2hpbGQgb2YgaW5wdXRDaGlsZHJlbikgewogICAgICAgICAgICBpbnB1dENoaWxkLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJwZW5kaW5nIjoKICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICBzdWJtaXRCdXR0b24uc3RhdHVzID0gInBlbmRpbmciOwogICAgICAgICAgZm9yIChjb25zdCBpbnB1dENoaWxkIG9mIGlucHV0Q2hpbGRyZW4pIHsKICAgICAgICAgICAgaW5wdXRDaGlsZC5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJzdWNjZXNzIjoKICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICBzdWJtaXRCdXR0b24uc3RhdHVzID0gInN1Y2Nlc3MiOwogICAgICAgICAgZm9yIChjb25zdCBpbnB1dENoaWxkIG9mIGlucHV0Q2hpbGRyZW4pIHsKICAgICAgICAgICAgaW5wdXRDaGlsZC5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJlcnJvciI6CiAgICAgICAgICBzdWJtaXRCdXR0b24uZGlzYWJsZWQgPSB0cnVlOwogICAgICAgICAgc3VibWl0QnV0dG9uLnN0YXR1cyA9ICJlcnJvciI7CiAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0Q2hpbGQgb2YgaW5wdXRDaGlsZHJlbikgewogICAgICAgICAgICBpbnB1dENoaWxkLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN1Ym1pdEJ1dHRvbi50ZXh0ID0gdGV4dFN0YXRlQXJnOwogICAgfQogICAgLyoqCiAgICAgKiByZXNldHMgdGhlIGZvcm0KICAgICAqLwogICAgcmVzZXQoKSB7CiAgICAgIGNvbnN0IGlucHV0Q2hpbGRyZW4gPSB0aGlzLmdldEZvcm1FbGVtZW50cygpOwogICAgICBjb25zdCBzdWJtaXRCdXR0b24gPSB0aGlzLmdldFN1Ym1pdEJ1dHRvbigpOwogICAgICBmb3IgKGNvbnN0IGlucHV0Q2hpbGQgb2YgaW5wdXRDaGlsZHJlbikgewogICAgICAgIGlucHV0Q2hpbGQudmFsdWUgPSBudWxsOwogICAgICB9CiAgICAgIHRoaXMuc2V0U3RhdHVzKCJub3JtYWwiLCAiU3VibWl0Iik7CiAgICB9CiAgICBhc3luYyBhZGRCZWhhdmlvdXJzKCkgewogICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZXZlbnQpID0+IHsKICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7CiAgICAgICAgaWYgKCFGT1JNX0lOUFVUX1RZUEVTLmluY2x1ZGVzKHRhcmdldC5jb25zdHJ1Y3RvcikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gIkVudGVyIikgewogICAgICAgICAgY29uc3QgY2hpbGRyZW4yID0gdGhpcy5nZXRGb3JtRWxlbWVudHMoKTsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGNoaWxkcmVuMi5pbmRleE9mKHRhcmdldCk7CiAgICAgICAgICBpZiAoY3VycmVudEluZGV4IDwgY2hpbGRyZW4yLmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgY2hpbGRyZW4yW2N1cnJlbnRJbmRleCArIDFdLmZvY3VzKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0YXJnZXQuYmx1cigpOwogICAgICAgICAgICB0aGlzLmdldFN1Ym1pdEJ1dHRvbigpPy5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICAvKioKICAgICAqIFVwZGF0ZXMgdGhlIGxheW91dCBtb2RlIG9mIGNoaWxkIGlucHV0IGNvbXBvbmVudHMgYmFzZWQgb24gZm9ybSdzIGhvcml6b250YWxMYXlvdXQgcHJvcGVydHkKICAgICAqLwogICAgdXBkYXRlQ2hpbGRyZW5MYXlvdXRNb2RlKCkgewogICAgICBjb25zdCBmb3JtQ2hpbGRyZW4gPSB0aGlzLmdldEZvcm1FbGVtZW50cygpOwogICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGZvcm1DaGlsZHJlbikgewogICAgICAgIGlmICgibGF5b3V0TW9kZSIgaW4gY2hpbGQpIHsKICAgICAgICAgIGNoaWxkLmxheW91dE1vZGUgPSAiYXV0byI7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIENhbGxlZCB3aGVuIHByb3BlcnRpZXMgY2hhbmdlCiAgICAgKi8KICAgIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImhvcml6b250YWxMYXlvdXQiKSkgewogICAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW5MYXlvdXRNb2RlKCk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczM0KHRoaXMsIF9ob3Jpem9udGFsTGF5b3V0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNGb3JtMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uL2RlZXMtYnV0dG9uLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKdmFyIGRlbW9GdW5jMjYgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24tZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIAogICAgICAudmVydGljYWwtZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXgtd2lkdGg6IDMwMHB4OwogICAgICB9CiAgICAgIAogICAgICAuaG9yaXpvbnRhbC1ncm91cCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLW91dHB1dCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICB9CiAgICAgIAogICAgICAuaWNvbi1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtc25pcHBldCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGJ1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHsKICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBjb25zdCB0eXBlNSA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoInR5cGUiKSB8fCAiZGVmYXVsdCI7CiAgICAgIGNvbnNvbGUubG9nKGBCdXR0b24gdmFyaWFudCBjbGlja2VkOiAke3R5cGU1fWApOwogICAgfSk7CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gQnV0dG9uIFZhcmlhbnRzIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCB2aXN1YWwgc3R5bGVzIGZvciB2YXJpb3VzIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVmYXVsdCI+RGVmYXVsdDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ic2Vjb25kYXJ5Ij5TZWNvbmRhcnk8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlc3RydWN0aXZlIj5EZXN0cnVjdGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ib3V0bGluZSI+T3V0bGluZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiPkdob3N0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJsaW5rIj5MaW5rIEJ1dHRvbjwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBidXR0b25zID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpOwogIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsICgpID0+IHsKICAgICAgY29uc3Qgc2l6ZSA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoInNpemUiKSB8fCAiZGVmYXVsdCI7CiAgICAgIGNvbnNvbGUubG9nKGBCdXR0b24gc2l6ZTogJHtzaXplfWApOwogICAgfSk7CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gQnV0dG9uIFNpemVzIn0gLnN1YnRpdGxlPSR7Ik11bHRpcGxlIHNpemVzIGZvciBkaWZmZXJlbnQgY29udGV4dHMgYW5kIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0ic20iPlNtYWxsIEJ1dHRvbjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iZGVmYXVsdCI+RGVmYXVsdCBTaXplPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJsZyI+TGFyZ2UgQnV0dG9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJvdXRsaW5lIiAudGV4dD0keyJcdXsxRjY4MH0ifT48L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJzbSIgdHlwZT0ic2Vjb25kYXJ5Ij5TbWFsbCBTZWNvbmRhcnk8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9ImRlZmF1bHQiIHR5cGU9ImRlc3RydWN0aXZlIj5EZWZhdWx0IERlc3RydWN0aXZlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJsZyIgdHlwZT0ib3V0bGluZSI+TGFyZ2UgT3V0bGluZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBpY29uQnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICBpY29uQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHsKICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBjb25zdCBoYXNJY29uID0gYnV0dG9uLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaWNvbiIpOwogICAgICBpZiAoaGFzSWNvbikgewogICAgICAgIGNvbnN0IGljb25OYW1lID0gaGFzSWNvbi5nZXRBdHRyaWJ1dGUoImljb25GQSIpIHx8ICJ1bmtub3duIjsKICAgICAgICBjb25zb2xlLmxvZyhgSWNvbiBidXR0b24gY2xpY2tlZDogJHtpY29uTmFtZX1gKTsKICAgICAgfQogICAgfSk7CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMy4gQnV0dG9ucyB3aXRoIEljb25zIn0gLnN1YnRpdGxlPSR7IkNvbWJpbmluZyBpY29ucyB3aXRoIHRleHQgZm9yIGVuaGFuY2VkIHZpc3VhbCBjb21tdW5pY2F0aW9uIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaWNvbi1yb3ciPgogICAgICAgICAgPGRlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249ImZhOnBsdXMiPjwvZGVlcy1pY29uPgogICAgICAgICAgICBBZGQgSXRlbQogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6dHJhc2giPjwvZGVlcy1pY29uPgogICAgICAgICAgICBEZWxldGUKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ib3V0bGluZSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkRvd25sb2FkIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgRG93bmxvYWQKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9Imljb24tcm93Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIHNpemU9InNtIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJmYTpnZWFyIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgU2V0dGluZ3MKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249ImZhOmNhcmV0TGVmdCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIEJhY2sKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiPgogICAgICAgICAgICBOZXh0CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6Y2FyZXRSaWdodCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLXJvdyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0iZGVmYXVsdCI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6cGx1cyI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9InNlY29uZGFyeSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6Z2VhciI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9Im91dGxpbmUiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpTZWFyY2giPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJnaG9zdCI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOk1vcmVWZXJ0aWNhbCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9ImRlc3RydWN0aXZlIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJmYTp0cmFzaCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBidXR0b25zID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpOwogIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsICgpID0+IHsKICAgICAgY29uc3QgaWNvbjMgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJpY29uIikgfHwgIm5vbmUiOwogICAgICBjb25zdCBwb3NpdGlvbjMgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJpY29uUG9zaXRpb24iKSB8fCAibGVmdCI7CiAgICAgIGNvbnNvbGUubG9nKGBJY29uIHByb3BlcnR5IGJ1dHRvbjogaWNvbj0ke2ljb24zfSwgcG9zaXRpb249JHtwb3NpdGlvbjN9YCk7CiAgICB9KTsKICB9KTsKfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBJY29ucyB2aWEgUHJvcGVydHkifSAuc3VidGl0bGU9JHsiU2ltcGxpZmllZCBpY29uIHN5bnRheCB1c2luZyB0aGUgaWNvbiBwcm9wZXJ0eSJ9PgogICAgICAgIDxkaXYgY2xhc3M9Imljb24tcm93Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBpY29uPSJmYTpwbHVzIj5BZGQgSXRlbTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVzdHJ1Y3RpdmUiIGljb249ImZhOnRyYXNoIj5EZWxldGU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Im91dGxpbmUiIGljb249Imx1Y2lkZTpEb3dubG9hZCI+RG93bmxvYWQ8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLXJvdyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ic2Vjb25kYXJ5IiBzaXplPSJzbSIgaWNvbj0iZmE6Z2VhciI+U2V0dGluZ3M8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0IiBpY29uPSJmYTpjYXJldExlZnQiPkJhY2s8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0IiBpY29uPSJmYTpjYXJldFJpZ2h0IiBpY29uUG9zaXRpb249InJpZ2h0Ij5OZXh0PC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iaWNvbi1yb3ciPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9ImRlZmF1bHQiIGljb249ImZhOnBsdXMiPjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0ic2Vjb25kYXJ5IiBpY29uPSJsdWNpZGU6U2V0dGluZ3MiPjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0ib3V0bGluZSIgaWNvbj0ibHVjaWRlOlNlYXJjaCI+PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJnaG9zdCIgaWNvbj0ibHVjaWRlOk1vcmVWZXJ0aWNhbCI+PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJkZXN0cnVjdGl2ZSIgaWNvbj0iZmE6dHJhc2giPjwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtc25pcHBldCI+CiAgICAgICAgICAgICZsdDtkZWVzLWJ1dHRvbiBpY29uPSJmYTpwbHVzIiZndDtBZGQgSXRlbSZsdDsvZGVlcy1idXR0b24mZ3Q7PGJyPgogICAgICAgICAgICAmbHQ7ZGVlcy1idXR0b24gaWNvbj0iZmE6Y2FyZXRSaWdodCIgaWNvblBvc2l0aW9uPSJyaWdodCImZ3Q7TmV4dCZsdDsvZGVlcy1idXR0b24mZ3Q7CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgcGVuZGluZ0J1dHRvbiA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bc3RhdHVzPSJwZW5kaW5nIl0nKTsKICBjb25zdCBzdWNjZXNzQnV0dG9uID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWJ1dHRvbltzdGF0dXM9InN1Y2Nlc3MiXScpOwogIGNvbnN0IGVycm9yQnV0dG9uID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWJ1dHRvbltzdGF0dXM9ImVycm9yIl0nKTsKICBpZiAocGVuZGluZ0J1dHRvbikgewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJQZW5kaW5nIGJ1dHRvbiBpcyBzaG93aW5nIGxvYWRpbmcgc3RhdGUiKTsKICAgIH0sIDFlMyk7CiAgfQogIGlmIChzdWNjZXNzQnV0dG9uKSB7CiAgICBzdWNjZXNzQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCAoKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJTdWNjZXNzIHN0YXRlIGJ1dHRvbiBjbGlja2VkIik7CiAgICB9KTsKICB9CiAgaWYgKGVycm9yQnV0dG9uKSB7CiAgICBlcnJvckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBjb25zb2xlLmxvZygiRXJyb3Igc3RhdGUgYnV0dG9uIGNsaWNrZWQiKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI1LiBCdXR0b24gU3RhdGVzIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBzdGF0ZXMgdG8gaW5kaWNhdGUgYnV0dG9uIHN0YXR1cyBhbmQgbG9hZGluZyBjb25kaXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzdGF0dXM9Im5vcm1hbCI+Tm9ybWFsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzdGF0dXM9InBlbmRpbmciPlByb2Nlc3NpbmcuLi48L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHN0YXR1cz0ic3VjY2VzcyI+U3VjY2VzcyE8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHN0YXR1cz0iZXJyb3IiPkVycm9yITwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gZGlzYWJsZWQ+RGlzYWJsZWQ8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIHN0YXR1cz0icGVuZGluZyIgc2l6ZT0ic20iPlNtYWxsIExvYWRpbmc8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Im91dGxpbmUiIHN0YXR1cz0icGVuZGluZyI+RGVmYXVsdCBMb2FkaW5nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSIgc3RhdHVzPSJwZW5kaW5nIiBzaXplPSJsZyI+TGFyZ2UgTG9hZGluZzwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBvdXRwdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNjbGljay1vdXRwdXQiKTsKICBjb25zdCBjbGlja01lQnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWJ1dHRvbjpmaXJzdC1vZi10eXBlIik7CiAgY29uc3QgZGF0YUJ0biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bdHlwZT0ic2Vjb25kYXJ5Il0nKTsKICBjb25zdCBhc3luY0J0biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bdHlwZT0iZGVzdHJ1Y3RpdmUiXScpOwogIGlmIChjbGlja01lQnRuICYmIG91dHB1dCkgewogICAgY2xpY2tNZUJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBgQ2xpY2tlZDogRGVmYXVsdCBidXR0b24gYXQgJHsoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvTG9jYWxlVGltZVN0cmluZygpfWA7CiAgICB9KTsKICB9CiAgaWYgKGRhdGFCdG4gJiYgb3V0cHV0KSB7CiAgICBkYXRhQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCAoZTExKSA9PiB7CiAgICAgIG91dHB1dC50ZXh0Q29udGVudCA9IGBDbGlja2VkOiBTZWNvbmRhcnkgYnV0dG9uIHdpdGggZGF0YTogJHtlMTEuZGV0YWlsLmRhdGF9YDsKICAgIH0pOwogIH0KICBpZiAoYXN5bmNCdG4gJiYgb3V0cHV0KSB7CiAgICBhc3luY0J0bi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgYXN5bmMgKCkgPT4gewogICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSAiUHJvY2Vzc2luZy4uLiI7CiAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czI1LnBsdWdpbnMuc21hcnRkZWxheS5kZWxheUZvcigyZTMpOwogICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSAiQWN0aW9uIGNvbXBsZXRlZCEiOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjYuIEV2ZW50IEhhbmRsaW5nIn0gLnN1YnRpdGxlPSR7IkludGVyYWN0aXZlIGV4YW1wbGVzIHdpdGggY2xpY2sgZXZlbnQgaGFuZGxpbmcifT4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkNsaWNrIE1lPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIC5ldmVudERldGFpbERhdGE9JHsiY3VzdG9tLWRhdGEtMTIzIn0+CiAgICAgICAgICAgIENsaWNrIHdpdGggRGF0YQogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSI+QXN5bmMgQWN0aW9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGlkPSJjbGljay1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCI+CiAgICAgICAgICA8ZW0+Q2xpY2sgYSBidXR0b24gdG8gc2VlIHRoZSByZXN1bHQuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZm9ybSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIik7CiAgY29uc3Qgb3V0cHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZm9ybS1vdXRwdXQiKTsKICBpZiAoZm9ybSAmJiBvdXRwdXQpIHsKICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoZTExKSA9PiB7CiAgICAgIG91dHB1dC5pbm5lckhUTUwgPSAiPHN0cm9uZz5Gb3JtIHN1Ym1pdHRlZCB3aXRoIGRhdGE6PC9zdHJvbmc+PGJyPiIgKyBKU09OLnN0cmluZ2lmeShlMTEuZGV0YWlsLmRhdGEsIG51bGwsIDIpOwogICAgfSk7CiAgfQogIGNvbnN0IGRyYWZ0QnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWJ1dHRvblt0eXBlPSJzZWNvbmRhcnkiXScpOwogIGNvbnN0IGNhbmNlbEJ0biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bdHlwZT0iZ2hvc3QiXScpOwogIGlmIChkcmFmdEJ0bikgewogICAgZHJhZnRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coIlNhdmUgRHJhZnQgY2xpY2tlZCIpOwogICAgfSk7CiAgfQogIGlmIChjYW5jZWxCdG4pIHsKICAgIGNhbmNlbEJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBjb25zb2xlLmxvZygiQ2FuY2VsIGNsaWNrZWQiKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI3LiBGb3JtIEludGVncmF0aW9uIn0gLnN1YnRpdGxlPSR7IkJ1dHRvbnMgd29ya2luZyB3aXRoaW4gZm9ybXMgd2l0aCBhdXRvbWF0aWMgc3BhY2luZyJ9PgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGxhYmVsPSJOYW1lIiBrZXk9Im5hbWUiIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBsYWJlbD0iRW1haWwiIGtleT0iZW1haWwiIHR5cGU9ImVtYWlsIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgbGFiZWw9Ik1lc3NhZ2UiIGtleT0ibWVzc2FnZSIgaXNNdWx0aWxpbmU+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiPlNhdmUgRHJhZnQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0Ij5DYW5jZWw8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+U3VibWl0IEZvcm08L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0iZm9ybS1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCIgc3R5bGU9IndoaXRlLXNwYWNlOiBwcmUtd3JhcDsiPgogICAgICAgICAgPGVtPlN1Ym1pdCB0aGUgZm9ybSB0byBzZWUgdGhlIGRhdGEuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgYnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4gewogICAgY29uc3QgdHlwZTUgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJ0eXBlIik7CiAgICBpZiAodHlwZTUpIHsKICAgICAgY29uc29sZS5sb2coYExlZ2FjeSB0eXBlICIke3R5cGU1fSIgaXMgc3VwcG9ydGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5YCk7CiAgICB9CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiOC4gQmFja3dhcmQgQ29tcGF0aWJpbGl0eSJ9IC5zdWJ0aXRsZT0keyJPbGQgYnV0dG9uIHR5cGVzIGFyZSBhdXRvbWF0aWNhbGx5IG1hcHBlZCB0byBuZXcgdmFyaWFudHMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Im5vcm1hbCI+Tm9ybWFsIOKGkiBEZWZhdWx0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJoaWdobGlnaHRlZCI+SGlnaGxpZ2h0ZWQg4oaSIERlc3RydWN0aXZlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkaXNjcmVldCI+RGlzY3JlZXQg4oaSIE91dGxpbmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImJpZyI+QmlnIOKGkiBMYXJnZSBTaXplPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsgZm9udC1zaXplOiAxNHB4OyBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07Ij4KICAgICAgICAgIFRoZXNlIGxlZ2FjeSB0eXBlIHZhbHVlcyBhcmUgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBidXQgd2UgcmVjb21tZW5kIHVzaW5nIHRoZSBuZXcgdmFyaWFudCBzeXN0ZW0uCiAgICAgICAgPC9wPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgYWN0aW9uR3JvdXAgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoIi52ZXJ0aWNhbC1ncm91cCIpWzBdOwogIGNvbnN0IGRhbmdlckdyb3VwID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCIudmVydGljYWwtZ3JvdXAiKVsxXTsKICBpZiAoYWN0aW9uR3JvdXApIHsKICAgIGNvbnN0IGJ1dHRvbnMgPSBhY3Rpb25Hcm91cC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpOwogICAgYnV0dG9ucy5mb3JFYWNoKChidXR0b24sIGluZGV4MikgPT4gewogICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsICgpID0+IHsKICAgICAgICBjb25zdCBhY3Rpb24gPSBbIlNhdmUgQ2hhbmdlcyIsICJEaXNjYXJkIiwgIkhlbHAiXVtpbmRleDJdOwogICAgICAgIGNvbnNvbGUubG9nKGBBY3Rpb24gZ3JvdXA6ICR7YWN0aW9ufSBjbGlja2VkYCk7CiAgICAgIH0pOwogICAgfSk7CiAgfQogIGlmIChkYW5nZXJHcm91cCkgewogICAgY29uc3QgYnV0dG9ucyA9IGRhbmdlckdyb3VwLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbiwgaW5kZXgyKSA9PiB7CiAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICAgIGNvbnN0IGFjdGlvbiA9IFsiRGVsZXRlIEFjY291bnQiLCAiQXJjaGl2ZSBEYXRhIiwgIk5vdCBBdmFpbGFibGUiXVtpbmRleDJdOwogICAgICAgIGlmIChpbmRleDIgIT09IDIpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKGBEYW5nZXIgem9uZTogJHthY3Rpb259IGNsaWNrZWRgKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjkuIEFkdmFuY2VkIEV4YW1wbGVzIn0gLnN1YnRpdGxlPSR7IkNvbXBsZXggYnV0dG9uIGNvbmZpZ3VyYXRpb25zIGFuZCByZWFsLXdvcmxkIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9Imhvcml6b250YWwtZ3JvdXAiPgogICAgICAgICAgPGRpdiBjbGFzcz0idmVydGljYWwtZ3JvdXAiPgogICAgICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbjogMCAwIDhweCAwOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7Ij5BY3Rpb24gR3JvdXA8L2g0PgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVmYXVsdCIgc2l6ZT0ic20iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlNhdmUiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIFNhdmUgQ2hhbmdlcwogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ic2Vjb25kYXJ5IiBzaXplPSJzbSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6VW5kbzIiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIERpc2NhcmQKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0IiBzaXplPSJzbSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6SGVscENpcmNsZSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgSGVscAogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPGRpdiBjbGFzcz0idmVydGljYWwtZ3JvdXAiPgogICAgICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbjogMCAwIDhweCAwOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7Ij5EYW5nZXIgWm9uZTwvaDQ+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSIgc2l6ZT0ic20iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6dHJhc2giPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIERlbGV0ZSBBY2NvdW50CiAgICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJvdXRsaW5lIiBzaXplPSJzbSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6QXJjaGl2ZSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgQXJjaGl2ZSBEYXRhCiAgICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJnaG9zdCIgc2l6ZT0ic20iIGRpc2FibGVkPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkJhbiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgTm90IEF2YWlsYWJsZQogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMjRweDsiPgogICAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW46IDAgMCA4cHggMDsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyI+Q29kZSBFeGFtcGxlOjwvaDQ+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLXNuaXBwZXQiPgogICAgICAgICAgICAmbHQ7ZGVlcy1idXR0b24gdHlwZT0iZGVmYXVsdCIgc2l6ZT0ic20iIGljb249Imx1Y2lkZTpTYXZlIiBAY2xpY2tlZD0iXCR7aGFuZGxlQ2xpY2t9IiZndDs8YnI+CiAgICAgICAgICAgICZuYnNwOyZuYnNwO1NhdmUgQ2hhbmdlczxicj4KICAgICAgICAgICAgJmx0Oy9kZWVzLWJ1dHRvbiZndDsKICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uL2RlZXMtYnV0dG9uLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTM0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMzNSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0J1dHRvbiA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYnV0dG9uIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfdGV4dF9kZWNvcmF0b3JzOwogIGxldCBfdGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2V2ZW50RGV0YWlsRGF0YV9kZWNvcmF0b3JzOwogIGxldCBfZXZlbnREZXRhaWxEYXRhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXZlbnREZXRhaWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9kZWNvcmF0b3JzOwogIGxldCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNIaWRkZW5fZGVjb3JhdG9yczsKICBsZXQgX2lzSGlkZGVuX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNIaWRkZW5fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3R5cGVfZGVjb3JhdG9yczsKICBsZXQgX3R5cGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaXplX2RlY29yYXRvcnM7CiAgbGV0IF9zaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdHVzX2RlY29yYXRvcnM7CiAgbGV0IF9zdGF0dXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2luc2lkZUZvcm1fZGVjb3JhdG9yczsKICBsZXQgX2luc2lkZUZvcm1faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbnNpZGVGb3JtX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pY29uX2RlY29yYXRvcnM7CiAgbGV0IF9pY29uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaWNvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaWNvblBvc2l0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9pY29uUG9zaXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pY29uUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0J1dHRvbjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90ZXh0X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHJlZmxlY3Q6IHRydWUsCiAgICAgICAgaGFzQ2hhbmdlZCgpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfSldOwogICAgICBfZXZlbnREZXRhaWxEYXRhX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9kaXNhYmxlZF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfaXNIaWRkZW5fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF90eXBlX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZwogICAgICB9KV07CiAgICAgIF9zaXplX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZwogICAgICB9KV07CiAgICAgIF9zdGF0dXNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX2luc2lkZUZvcm1fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX2ljb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9pY29uUG9zaXRpb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF90ZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXh0X2luaXRpYWxpemVycywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfZXZlbnREZXRhaWxEYXRhX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImV2ZW50RGV0YWlsRGF0YSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZXZlbnREZXRhaWxEYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV2ZW50RGV0YWlsRGF0YSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZXZlbnREZXRhaWxEYXRhID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2V2ZW50RGV0YWlsRGF0YV9pbml0aWFsaXplcnMsIF9ldmVudERldGFpbERhdGFfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfZGlzYWJsZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlzYWJsZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc2FibGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXNhYmxlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF9pc0hpZGRlbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0hpZGRlbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNIaWRkZW4iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNIaWRkZW4sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzSGlkZGVuID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzSGlkZGVuX2luaXRpYWxpemVycywgX2lzSGlkZGVuX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzQodGhpcywgbnVsbCwgX3R5cGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidHlwZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidHlwZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50eXBlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50eXBlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3R5cGVfaW5pdGlhbGl6ZXJzLCBfdHlwZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF9zaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaXplX2luaXRpYWxpemVycywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfc3RhdHVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RhdHVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXR1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc3RhdHVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0YXR1c19pbml0aWFsaXplcnMsIF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfaW5zaWRlRm9ybV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbnNpZGVGb3JtIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbnNpZGVGb3JtIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmluc2lkZUZvcm0sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmluc2lkZUZvcm0gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5zaWRlRm9ybV9pbml0aWFsaXplcnMsIF9pbnNpZGVGb3JtX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzQodGhpcywgbnVsbCwgX2ljb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaWNvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pY29uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pY29uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ljb25faW5pdGlhbGl6ZXJzLCBfaWNvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF9pY29uUG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvblBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpY29uUG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaWNvblBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pY29uUG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaWNvblBvc2l0aW9uX2luaXRpYWxpemVycywgX2ljb25Qb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM0KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0J1dHRvbjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI2OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJCdXR0b24iOwogICAgI3RleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3RleHRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgZ2V0IHRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2V2ZW50RGV0YWlsRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF9ldmVudERldGFpbERhdGFfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBldmVudERldGFpbERhdGEoKSB7CiAgICAgIHJldHVybiB0aGlzLiNldmVudERldGFpbERhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBldmVudERldGFpbERhdGEodmFsdWUyKSB7CiAgICAgIHRoaXMuI2V2ZW50RGV0YWlsRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfZXZlbnREZXRhaWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGRpc2FibGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jZGlzYWJsZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkaXNhYmxlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZGlzYWJsZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0hpZGRlbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaXNIaWRkZW5faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzSGlkZGVuKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNIaWRkZW5fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0hpZGRlbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNIaWRkZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaXNIaWRkZW5fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF90eXBlX2luaXRpYWxpemVycywgImRlZmF1bHQiKSk7CiAgICBnZXQgdHlwZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0eXBlKHZhbHVlMikgewogICAgICB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF9zaXplX2luaXRpYWxpemVycywgImRlZmF1bHQiKSk7CiAgICBnZXQgc2l6ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaXplKHZhbHVlMikgewogICAgICB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3N0YXR1c19pbml0aWFsaXplcnMsICJub3JtYWwiKSk7CiAgICBnZXQgc3RhdHVzKCkgewogICAgICByZXR1cm4gdGhpcy4jc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc3RhdHVzKHZhbHVlMikgewogICAgICB0aGlzLiNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpbnNpZGVGb3JtX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfc3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaW5zaWRlRm9ybV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaW5zaWRlRm9ybSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2luc2lkZUZvcm1fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpbnNpZGVGb3JtKHZhbHVlMikgewogICAgICB0aGlzLiNpbnNpZGVGb3JtX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaWNvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX2luc2lkZUZvcm1fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF9pY29uX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgaWNvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2ljb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpY29uKHZhbHVlMikgewogICAgICB0aGlzLiNpY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaWNvblBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaWNvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX2ljb25Qb3NpdGlvbl9pbml0aWFsaXplcnMsICJsZWZ0IikpOwogICAgZ2V0IGljb25Qb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2ljb25Qb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGljb25Qb3NpdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jaWNvblBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaWNvblBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAoIXRoaXMuaW5zaWRlRm9ybSAmJiB0aGlzLmNsb3Nlc3QoImRlZXMtZm9ybSIpKSB7CiAgICAgICAgdGhpcy5pbnNpZGVGb3JtID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgfQogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIEZvcm0gc3BhY2luZyBzdHlsZXMgKi8KICAgICAgOmhvc3QoW2luc2lkZS1mb3JtXSkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtpbnNpZGUtZm9ybV06bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtZm9ybVtob3Jpem9udGFsLWxheW91dF0gOmhvc3QoW2luc2lkZS1mb3JtXSkgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgZGVlcy1mb3JtW2hvcml6b250YWwtbGF5b3V0XSA6aG9zdChbaW5zaWRlLWZvcm1dOmxhc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5idXR0b24gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC8qIFNpemUgdmFyaWFudHMgKi8KICAgICAgLmJ1dHRvbi5zaXplLWRlZmF1bHQgewogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtc20gewogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtbGcgewogICAgICAgIGhlaWdodDogNDRweDsKICAgICAgICBwYWRkaW5nOiAwIDI0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtaWNvbiB7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC8qIERlZmF1bHQgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLmRlZmF1bHQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5kZWZhdWx0OmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTAuMiUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA4NSUpIiwgImhzbCgyMTUgMjAuMiUgMjAlKSIpfTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5kZWZhdWx0OmFjdGl2ZTpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSA5JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIERlc3RydWN0aXZlIHZhcmlhbnQgKi8KICAgICAgLmJ1dHRvbi5kZXN0cnVjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDAgODQuMiUgNjAuMiUpOwogICAgICAgIGNvbG9yOiBoc2woMCAwJSA5OCUpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLmRlc3RydWN0aXZlOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCA4NC4yJSA1Ni4yJSk7CiAgICAgIH0KCiAgICAgIC5idXR0b24uZGVzdHJ1Y3RpdmU6YWN0aXZlOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCA4NC4yJSA1Mi4yJSk7CiAgICAgIH0KCiAgICAgIC8qIE91dGxpbmUgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLm91dGxpbmUgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMjEuOCUpIil9OwogICAgICB9CgogICAgICAuYnV0dG9uLm91dGxpbmU6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDg1JSkiLCAiaHNsKDIxNSAyMC4yJSAyNi44JSkiKX07CiAgICAgIH0KCiAgICAgIC5idXR0b24ub3V0bGluZTphY3RpdmU6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMTMuOCUpIil9OwogICAgICB9CgogICAgICAvKiBTZWNvbmRhcnkgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLnNlY29uZGFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5zZWNvbmRhcnk6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMTMuOCUpIil9OwogICAgICB9CgogICAgICAuYnV0dG9uLnNlY29uZGFyeTphY3RpdmU6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgODUlKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgfQoKICAgICAgLyogR2hvc3QgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLmdob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5naG9zdDpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5naG9zdDphY3RpdmU6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMTMuOCUpIil9OwogICAgICB9CgogICAgICAvKiBMaW5rIHZhcmlhbnQgKi8KICAgICAgLmJ1dHRvbi5saW5rIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5saW5rOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgLyogU3RhdHVzIHN0YXRlcyAqLwogICAgICAuYnV0dG9uLnBlbmRpbmcsCiAgICAgIC5idXR0b24uc3VjY2VzcywKICAgICAgLmJ1dHRvbi5lcnJvciB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzNnB4OyAvKiBTcGFjZSBmb3Igc3Bpbm5lciAqLwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtc20ucGVuZGluZywKICAgICAgLmJ1dHRvbi5zaXplLXNtLnN1Y2Nlc3MsCiAgICAgIC5idXR0b24uc2l6ZS1zbS5lcnJvciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzMnB4OwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtbGcucGVuZGluZywKICAgICAgLmJ1dHRvbi5zaXplLWxnLnN1Y2Nlc3MsCiAgICAgIC5idXR0b24uc2l6ZS1sZy5lcnJvciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA0NHB4OwogICAgICB9CgogICAgICAuYnV0dG9uLnBlbmRpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTMuMSA5My45JSA2Ny44JSAvIDAuMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLnN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwgImhzbCgxNDIuMSA3MC42JSA0NS4zJSAvIDAuMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUpIiwgImhzbCgwIDYyLjglIDcwLjYlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDYyLjglIDcwLjYlKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLyogRGlzYWJsZWQgc3RhdGUgKi8KICAgICAgLmJ1dHRvbi5kaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIEhpZGRlbiBzdGF0ZSAqLwogICAgICAuYnV0dG9uLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogRm9jdXMgc3RhdGUgKi8KICAgICAgLmJ1dHRvbjpmb2N1cy12aXNpYmxlIHsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgICBvdXRsaW5lLW9mZnNldDogMnB4OwogICAgICB9CgogICAgICAvKiBMb2FkaW5nIHNwaW5uZXIgKi8KICAgICAgZGVlcy1zcGlubmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMTBweDsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1zbSBkZWVzLXNwaW5uZXIgewogICAgICAgIGxlZnQ6IDhweDsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1sZyBkZWVzLXNwaW5uZXIgewogICAgICAgIGxlZnQ6IDE0cHg7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICB9CiAgICAgIAogICAgICAvKiBJY29uIHNpemluZyB3aXRoaW4gYnV0dG9ucyAqLwogICAgICAuYnV0dG9uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtc20gZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1sZyBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgfQoKICAgICAgLyogVGV4dCBhbGlnbm1lbnQgKi8KICAgICAgLnRleHRib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQoKICAgIGAKICAgIF07CiAgICAvKioKICAgICAqIEV4dHJhY3RzIGljb24gYW5kIHRleHQgZnJvbSBsaWdodCBET00gYW5kIHNldHMgcHJvcGVydGllcwogICAgICovCiAgICBleHRyYWN0TGlnaHREb20oKSB7CiAgICAgIGNvbnN0IGljb25FbGVtZW50ID0gdGhpcy5xdWVyeVNlbGVjdG9yKCJkZWVzLWljb24iKTsKICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBBcnJheS5mcm9tKHRoaXMuY2hpbGROb2RlcykuZmlsdGVyKChub2RlMikgPT4gbm9kZTIubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKS5tYXAoKG5vZGUyKSA9PiBub2RlMi50ZXh0Q29udGVudD8udHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpOwogICAgICBpZiAodGV4dENvbnRlbnQgJiYgIXRoaXMudGV4dCkgewogICAgICAgIHRoaXMudGV4dCA9IHRleHRDb250ZW50OwogICAgICB9CiAgICAgIGlmIChpY29uRWxlbWVudCkgewogICAgICAgIGNvbnN0IGljb25WYWx1ZSA9IGljb25FbGVtZW50Lmljb24gfHwgaWNvbkVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpY29uIikgfHwgKGljb25FbGVtZW50Lmljb25GQSA/IGBmYToke2ljb25FbGVtZW50Lmljb25GQX1gIDogbnVsbCk7CiAgICAgICAgaWYgKGljb25WYWx1ZSkgewogICAgICAgICAgY29uc3QgY2hpbGRyZW4yID0gQXJyYXkuZnJvbSh0aGlzLmNoaWxkTm9kZXMpOwogICAgICAgICAgY29uc3QgaWNvbkluZGV4ID0gY2hpbGRyZW4yLmluZGV4T2YoaWNvbkVsZW1lbnQpOwogICAgICAgICAgY29uc3QgdGV4dE5vZGVzID0gY2hpbGRyZW4yLmZpbHRlcigobm9kZTIpID0+IG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiBub2RlMi50ZXh0Q29udGVudD8udHJpbSgpKTsKICAgICAgICAgIGlmICh0ZXh0Tm9kZXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBjb25zdCBmaXJzdFRleHRJbmRleCA9IGNoaWxkcmVuMi5pbmRleE9mKHRleHROb2Rlc1swXSk7CiAgICAgICAgICAgIHRoaXMuaWNvblBvc2l0aW9uID0gaWNvbkluZGV4IDwgZmlyc3RUZXh0SW5kZXggPyAibGVmdCIgOiAicmlnaHQiOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5pY29uID0gaWNvblZhbHVlOwogICAgICAgIH0KICAgICAgICBpY29uRWxlbWVudC5yZW1vdmUoKTsKICAgICAgfQogICAgICB0aGlzLmlubmVySFRNTCA9ICIiOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICBjb25zdCB0eXBlTWFwID0gewogICAgICAgICJub3JtYWwiOiAiZGVmYXVsdCIsCiAgICAgICAgImhpZ2hsaWdodGVkIjogImRlc3RydWN0aXZlIiwKICAgICAgICAiZGlzY3JlZXQiOiAib3V0bGluZSIsCiAgICAgICAgImJpZyI6ICJkZWZhdWx0IgogICAgICAgIC8vIFdpbGwgdXNlIHNpemUgaW5zdGVhZAogICAgICB9OwogICAgICBjb25zdCBhY3R1YWxUeXBlID0gdHlwZU1hcFt0aGlzLnR5cGVdIHx8IHRoaXMudHlwZTsKICAgICAgY29uc3QgYWN0dWFsU2l6ZSA9IHRoaXMudHlwZSA9PT0gImJpZyIgPyAibGciIDogdGhpcy5zaXplOwogICAgICBjb25zdCBsZWZ0SWNvbiA9IHRoaXMuaWNvblBvc2l0aW9uID09PSAibGVmdCIgJiYgdGhpcy5pY29uID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuaWNvbn0+PC9kZWVzLWljb24+YCA6ICIiOwogICAgICBjb25zdCByaWdodEljb24gPSB0aGlzLmljb25Qb3NpdGlvbiA9PT0gInJpZ2h0IiAmJiB0aGlzLmljb24gPyBiMmA8ZGVlcy1pY29uIC5pY29uPSR7dGhpcy5pY29ufT48L2RlZXMtaWNvbj5gIDogIiI7CiAgICAgIGNvbnN0IGlzSWNvbk9ubHkgPSBhY3R1YWxTaXplID09PSAiaWNvbiIgJiYgdGhpcy5pY29uOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYnV0dG9uICR7dGhpcy5pc0hpZGRlbiA/ICJoaWRkZW4iIDogIiJ9ICR7YWN0dWFsVHlwZX0gc2l6ZS0ke2FjdHVhbFNpemV9ICR7dGhpcy5zdGF0dXN9ICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIke3RoaXMuZGlzcGF0Y2hDbGlja30iCiAgICAgID4KICAgICAgICAke3RoaXMuc3RhdHVzID09PSAibm9ybWFsIiA/IGIyYGAgOiBiMmAKICAgICAgICAgIDxkZWVzLXNwaW5uZXIKICAgICAgICAgICAgLmJudz0ke3RydWV9CiAgICAgICAgICAgIHN0YXR1cz0iJHt0aGlzLnN0YXR1c30iCiAgICAgICAgICAgIHNpemU9IiR7YWN0dWFsU2l6ZSA9PT0gInNtIiA/IDE0IDogYWN0dWFsU2l6ZSA9PT0gImxnIiA/IDE4IDogMTZ9IgogICAgICAgICAgPjwvZGVlcy1zcGlubmVyPgogICAgICAgIGB9CiAgICAgICAgJHtsZWZ0SWNvbn0KICAgICAgICAke2lzSWNvbk9ubHkgPyAiIiA6IGIyYDxkaXYgY2xhc3M9InRleHRib3giPiR7dGhpcy50ZXh0IHx8ICJCdXR0b24ifTwvZGl2PmB9CiAgICAgICAgJHtyaWdodEljb259CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGRpc3BhdGNoQ2xpY2soKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNsaWNrZWQiLCB7CiAgICAgICAgZGV0YWlsOiB7CiAgICAgICAgICBkYXRhOiB0aGlzLmV2ZW50RGV0YWlsRGF0YQogICAgICAgIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuZXh0cmFjdExpZ2h0RG9tKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczM1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQnV0dG9uMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtc3RhdHNncmlkL2RlZXMtc3RhdHNncmlkLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGVlc19pY29uKCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTM1ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMzNiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1N0YXRzR3JpZCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtc3RhdHNncmlkIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfdGlsZXNfZGVjb3JhdG9yczsKICBsZXQgX3RpbGVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGlsZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21pblRpbGVXaWR0aF9kZWNvcmF0b3JzOwogIGxldCBfbWluVGlsZVdpZHRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWluVGlsZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9nYXBfZGVjb3JhdG9yczsKICBsZXQgX2dhcF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2dhcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZ3JpZEFjdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2dyaWRBY3Rpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZ3JpZEFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRleHRNZW51VmlzaWJsZV9kZWNvcmF0b3JzOwogIGxldCBfY29udGV4dE1lbnVWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGV4dE1lbnVWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZXh0TWVudVBvc2l0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZXh0TWVudVBvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGV4dE1lbnVQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGV4dE1lbnVBY3Rpb25zX2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZXh0TWVudUFjdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZXh0TWVudUFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1N0YXRzR3JpZDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90aWxlc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfbWluVGlsZVdpZHRoX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfZ2FwX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfZ3JpZEFjdGlvbnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX2NvbnRleHRNZW51VmlzaWJsZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY29udGV4dE1lbnVQb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY29udGV4dE1lbnVBY3Rpb25zX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTM1KHRoaXMsIG51bGwsIF90aWxlc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0aWxlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGlsZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGlsZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRpbGVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RpbGVzX2luaXRpYWxpemVycywgX3RpbGVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX21pblRpbGVXaWR0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtaW5UaWxlV2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1pblRpbGVXaWR0aCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5taW5UaWxlV2lkdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1pblRpbGVXaWR0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9taW5UaWxlV2lkdGhfaW5pdGlhbGl6ZXJzLCBfbWluVGlsZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX2dhcF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJnYXAiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImdhcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5nYXAsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmdhcCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9nYXBfaW5pdGlhbGl6ZXJzLCBfZ2FwX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX2dyaWRBY3Rpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImdyaWRBY3Rpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJncmlkQWN0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ncmlkQWN0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZ3JpZEFjdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZ3JpZEFjdGlvbnNfaW5pdGlhbGl6ZXJzLCBfZ3JpZEFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNSh0aGlzLCBudWxsLCBfY29udGV4dE1lbnVWaXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRleHRNZW51VmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29udGV4dE1lbnVWaXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRleHRNZW51VmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29udGV4dE1lbnVWaXNpYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbnRleHRNZW51VmlzaWJsZV9pbml0aWFsaXplcnMsIF9jb250ZXh0TWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNSh0aGlzLCBudWxsLCBfY29udGV4dE1lbnVQb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZXh0TWVudVBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZXh0TWVudVBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRleHRNZW51UG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRleHRNZW51UG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29udGV4dE1lbnVQb3NpdGlvbl9pbml0aWFsaXplcnMsIF9jb250ZXh0TWVudVBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX2NvbnRleHRNZW51QWN0aW9uc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZXh0TWVudUFjdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRleHRNZW51QWN0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb250ZXh0TWVudUFjdGlvbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRleHRNZW51QWN0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZXh0TWVudUFjdGlvbnNfaW5pdGlhbGl6ZXJzLCBfY29udGV4dE1lbnVBY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU3RhdHNHcmlkMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNzsKICAgICN0aWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfdGlsZXNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICBnZXQgdGlsZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0aWxlc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRpbGVzKHZhbHVlMikgewogICAgICB0aGlzLiN0aWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21pblRpbGVXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzYodGhpcywgX3RpbGVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfbWluVGlsZVdpZHRoX2luaXRpYWxpemVycywgMjUwKSk7CiAgICBnZXQgbWluVGlsZVdpZHRoKCkgewogICAgICByZXR1cm4gdGhpcy4jbWluVGlsZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWluVGlsZVdpZHRoKHZhbHVlMikgewogICAgICB0aGlzLiNtaW5UaWxlV2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNnYXBfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9taW5UaWxlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9nYXBfaW5pdGlhbGl6ZXJzLCAxNikpOwogICAgZ2V0IGdhcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2dhcF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGdhcCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZ2FwX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZ3JpZEFjdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9nYXBfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9ncmlkQWN0aW9uc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZ3JpZEFjdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNncmlkQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGdyaWRBY3Rpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNncmlkQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRleHRNZW51VmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzYodGhpcywgX2dyaWRBY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfY29udGV4dE1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBjb250ZXh0TWVudVZpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZXh0TWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb250ZXh0TWVudVZpc2libGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRleHRNZW51VmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRleHRNZW51UG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9jb250ZXh0TWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9jb250ZXh0TWVudVBvc2l0aW9uX2luaXRpYWxpemVycywgeyB4OiAwLCB5OiAwIH0pKTsKICAgIGdldCBjb250ZXh0TWVudVBvc2l0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jY29udGV4dE1lbnVQb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbnRleHRNZW51UG9zaXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRleHRNZW51UG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb250ZXh0TWVudUFjdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9jb250ZXh0TWVudVBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfY29udGV4dE1lbnVBY3Rpb25zX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBjb250ZXh0TWVudUFjdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZXh0TWVudUFjdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb250ZXh0TWVudUFjdGlvbnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRleHRNZW51QWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICB9CgogICAgICAvKiBDU1MgVmFyaWFibGVzIGZvciBjb25zaXN0ZW50IHNwYWNpbmcgYW5kIHNpemluZyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1ncmlkLWdhcDogMTJweDsKICAgICAgICAtLXRpbGUtcGFkZGluZzogMTZweDsKICAgICAgICAtLWhlYWRlci1zcGFjaW5nOiAxMnB4OwogICAgICAgIC0tY29udGVudC1taW4taGVpZ2h0OiA0MHB4OwogICAgICAgIC0tdmFsdWUtZm9udC1zaXplOiAyNnB4OwogICAgICAgIC0tdW5pdC1mb250LXNpemU6IDE0cHg7CiAgICAgICAgLS1sYWJlbC1mb250LXNpemU6IDEycHg7CiAgICAgICAgLS10aXRsZS1mb250LXNpemU6IDEzcHg7CiAgICAgICAgLS1kZXNjcmlwdGlvbi1zcGFjaW5nOiA4cHg7CiAgICAgICAgLS1ib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgLS10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE1czsKICAgICAgfQoKICAgICAgLyogR3JpZCBMYXlvdXQgKi8KICAgICAgLmdyaWQtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIG1hcmdpbi1ib3R0b206IGNhbGModmFyKC0tZ3JpZC1nYXApICogMS41KTsKICAgICAgICBtaW4taGVpZ2h0OiA0MHB4OwogICAgICB9CgogICAgICAuZ3JpZC10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5ncmlkLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgIH0KCiAgICAgIC5ncmlkLWFjdGlvbnMgZGVlcy1idXR0b24gewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgfQoKICAgICAgLnN0YXRzLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgke3IoMjUwKX1weCwgMWZyKSk7CiAgICAgICAgZ2FwOiAke3IoMTYpfXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAvKiBUaWxlIEJhc2UgU3R5bGVzICovCiAgICAgIC5zdGF0cy10aWxlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7CiAgICAgICAgcGFkZGluZzogdmFyKC0tdGlsZS1wYWRkaW5nKTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1kdXJhdGlvbikgZWFzZTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAuc3RhdHMtdGlsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBkMGQwZCIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDBkMGQwIiwgIiMyYTJhMmEiKX07CiAgICAgIH0KCiAgICAgIC5zdGF0cy10aWxlLmNsaWNrYWJsZSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAuc3RhdHMtdGlsZS5jbGlja2FibGU6aG92ZXIgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA2cHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4wMykiLCAicmdiYSgwLDAsMCwwLjE1KSIpfTsKICAgICAgfQoKICAgICAgLyogVGlsZSBIZWFkZXIgKi8KICAgICAgLnRpbGUtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1oZWFkZXItc3BhY2luZyk7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50aWxlLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICAgIH0KCiAgICAgIC50aWxlLWljb24gewogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAvKiBUaWxlIENvbnRlbnQgKi8KICAgICAgLnRpbGUtY29udGVudCB7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tY29udGVudC1taW4taGVpZ2h0KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLnRpbGUtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CgogICAgICAudGlsZS11bml0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXVuaXQtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLnRpbGUtZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgbWFyZ2luLXRvcDogdmFyKC0tZGVzY3JpcHRpb24tc3BhY2luZyk7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC8qIEdhdWdlIFN0eWxlcyAqLwogICAgICAuZ2F1Z2Utd3JhcHBlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAuZ2F1Z2UtY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTIwcHg7CiAgICAgICAgaGVpZ2h0OiA3MHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW4tdG9wOiAtOHB4OwogICAgICB9CgogICAgICAuZ2F1Z2Utc3ZnIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5nYXVnZS1iYWNrZ3JvdW5kIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZTogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlOGU4ZTgiLCAiIzFhMWExYSIpfTsKICAgICAgICBzdHJva2Utd2lkdGg6IDY7CiAgICAgIH0KCiAgICAgIC5nYXVnZS1maWxsIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZS13aWR0aDogNjsKICAgICAgICBzdHJva2UtbGluZWNhcDogcm91bmQ7CiAgICAgICAgdHJhbnNpdGlvbjogc3Ryb2tlLWRhc2hvZmZzZXQgMC42cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICAuZ2F1Z2UtdGV4dCB7CiAgICAgICAgZmlsbDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CiAgICAgIAogICAgICAuZ2F1Z2UtdW5pdCB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS11bml0LWZvbnQtc2l6ZSk7CiAgICAgICAgZmlsbDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICB9CgogICAgICAvKiBQZXJjZW50YWdlIFN0eWxlcyAqLwogICAgICAucGVyY2VudGFnZS13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC5wZXJjZW50YWdlLXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXZhbHVlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC5wZXJjZW50YWdlLWJhciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlOGU4ZTgiLCAiIzFhMWExYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBtYXJnaW4tdG9wOiBhdXRvOwogICAgICB9CgogICAgICAucGVyY2VudGFnZS1maWxsIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMzMzMiLCAiI2UwZTBlMCIpfTsKICAgICAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjZzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAvKiBNdWx0aSBQZXJjZW50YWdlIFN0eWxlcyAqLwogICAgICAubXVsdGktcGVyY2VudGFnZS13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtaXRlbXMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgbWFyZ2luLXRvcDogYXV0bzsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAubXVsdGktcGVyY2VudGFnZS1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAubXVsdGktcGVyY2VudGFnZS1iYXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZThlOGU4IiwgIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5tdWx0aS1wZXJjZW50YWdlLWZpbGwgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMzMzMyIsICIjZTBlMGUwIil9OwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgIH0KCiAgICAgIC8qIENQVSBDb3JlcyBTdHlsZXMgKi8KICAgICAgLmNwdS1jb3Jlcy13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiA4MHB4OwogICAgICB9CgogICAgICAuY3B1LWNvcmVzLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQoKICAgICAgLmNwdS1jb3Jlcy12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS12YWx1ZS1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZXMtdW5pdCB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS11bml0LWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZXMtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgfQoKICAgICAgLmNwdS1jb3Jlcy1iYXJzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgICBnYXA6IDNweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICAgICAgcGFkZGluZzogNHB4IDA7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZXMtYmFycy5jZW50ZXJlZCB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZS1iYXItY29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogNnB4OwogICAgICAgIG1heC13aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZS1iYXItd3JhcHBlciB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U4ZThlOCIsICIjMWExYTFhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBtaW4taGVpZ2h0OiA0MHB4OwogICAgICB9CgogICAgICAuY3B1LWNvcmUtYmFyLWZpbGwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NjY2NiIsICIjODg4ODg4Iil9OwogICAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIGJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweCAycHggMCAwOwogICAgICB9CgogICAgICAuY3B1LWNvcmUtYmFyLWZpbGwubG93IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICB9CgogICAgICAuY3B1LWNvcmUtYmFyLWZpbGwubWVkaXVtIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIiwgImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLmNwdS1jb3JlLWJhci1maWxsLmhpZ2ggewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgODQuMiUgNjAuMiUpIil9OwogICAgICB9CgogICAgICAuY3B1LWNvcmUtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAvKiBQYXJ0aXRpb24gU3R5bGVzICovCiAgICAgIC5wYXJ0aXRpb24td3JhcHBlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24taGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1wZXJjZW50YWdlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXZhbHVlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1iYXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZThlOGU4IiwgIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tYmFyLWZpbGwgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMzMzMyIsICIjZTBlMGUwIil9OwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tYmFyLWZpbGwud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIsICJoc2woNDUuNCA5My40JSA0Ny41JSkiKX07CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tYmFyLWZpbGwuY3JpdGljYWwgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgODQuMiUgNjAuMiUpIil9OwogICAgICB9CgogICAgICAucGFydGl0aW9uLXN0YXRzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIG1hcmdpbi10b3A6IGF1dG87CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tc3RhdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMnB4OwogICAgICB9CgogICAgICAucGFydGl0aW9uLXN0YXQtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tc3RhdC12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tbWV0YSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1maWxlc3lzdGVtIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1tb3VudHBvaW50IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICB9CgogICAgICAvKiBEaXNrIFN0eWxlcyAqLwogICAgICAuZGlzay13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmRpc2stY2FwYWNpdHkgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CgogICAgICAuZGlzay1tb2RlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgIH0KCiAgICAgIC5kaXNrLXR5cGUtYmFkZ2UgewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5kaXNrLW1ldHJpY3MgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiBhdXRvOwogICAgICB9CgogICAgICAuZGlzay1pb3BzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICB9CgogICAgICAuZGlzay1pb3BzLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAuZGlzay1pb3BzLWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgfQoKICAgICAgLmRpc2staW9wcy12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAuZGlzay1oZWFsdGgtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1iYXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZThlOGU4IiwgIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1maWxsIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC42cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgfQoKICAgICAgLmRpc2staGVhbHRoLWZpbGwuZ29vZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgfQoKICAgICAgLmRpc2staGVhbHRoLWZpbGwud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIsICJoc2woNDUuNCA5My40JSA0Ny41JSkiKX07CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1maWxsLmNyaXRpY2FsIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUpIiwgImhzbCgwIDg0LjIlIDYwLjIlKSIpfTsKICAgICAgfQoKICAgICAgLyogVHJlbmQgU3R5bGVzICovCiAgICAgIC50cmVuZC1jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAudHJlbmQtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnRyZW5kLXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXZhbHVlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQoKICAgICAgLnRyZW5kLXVuaXQgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdW5pdC1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAudHJlbmQtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgfQoKICAgICAgLnRyZW5kLWdyYXBoIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDI4cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbi10b3A6IGF1dG87CiAgICAgIH0KCiAgICAgIC50cmVuZC1zdmcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLnRyZW5kLWxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzk5OTk5OSIsICIjNjY2NjY2Iil9OwogICAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgICAgIHN0cm9rZS1saW5lam9pbjogcm91bmQ7CiAgICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICB9CgogICAgICAudHJlbmQtYXJlYSB7CiAgICAgICAgZmlsbDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTUwLCAxNTAsIDE1MCwgMC4wOCkiLCAicmdiYSgxMDAsIDEwMCwgMTAwLCAwLjA4KSIpfTsKICAgICAgfQoKICAgICAgLyogVGV4dCBWYWx1ZSBTdHlsZXMgKi8KICAgICAgLnRleHQtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CgogICAgICAvKiBDb250ZXh0IE1lbnUgKi8KICAgICAgZGVlcy1jb250ZXh0bWVudSB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfY29udGV4dE1lbnVBY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke3RoaXMuZ3JpZEFjdGlvbnMubGVuZ3RoID4gMCA/IGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtdGl0bGUiPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1hY3Rpb25zIj4KICAgICAgICAgICAgJHt0aGlzLmdyaWRBY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiBiMmAKICAgICAgICAgICAgICA8ZGVlcy1idXR0b24gCiAgICAgICAgICAgICAgICBAY2xpY2tlZD0keygpID0+IHRoaXMuaGFuZGxlR3JpZEFjdGlvbihhY3Rpb24pfQogICAgICAgICAgICAgICAgdHlwZT0ib3V0bGluZSIKICAgICAgICAgICAgICAgIHNpemU9InNtIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICR7YWN0aW9uLmljb25OYW1lID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0ke2FjdGlvbi5pY29uTmFtZX0gc2l6ZT0ic21hbGwiPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICAgICAgICAgICR7YWN0aW9uLm5hbWV9CiAgICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgYCl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYCA6ICIifQogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic3RhdHMtZ3JpZCIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoJHt0aGlzLm1pblRpbGVXaWR0aH1weCwgMWZyKSk7IGdhcDogJHt0aGlzLmdhcH1weDsiPgogICAgICAgICR7dGhpcy50aWxlcy5tYXAoKHRpbGUpID0+IHRoaXMucmVuZGVyVGlsZSh0aWxlKSl9CiAgICAgIDwvZGl2PgoKICAgICAgJHt0aGlzLmNvbnRleHRNZW51VmlzaWJsZSA/IGIyYAogICAgICAgIDxkZWVzLWNvbnRleHRtZW51CiAgICAgICAgICAueD0ke3RoaXMuY29udGV4dE1lbnVQb3NpdGlvbi54fQogICAgICAgICAgLnk9JHt0aGlzLmNvbnRleHRNZW51UG9zaXRpb24ueX0KICAgICAgICAgIC5tZW51SXRlbXM9JHt0aGlzLmNvbnRleHRNZW51QWN0aW9uc30KICAgICAgICAgIEBjbGlja2VkPSR7KCkgPT4gdGhpcy5jb250ZXh0TWVudVZpc2libGUgPSBmYWxzZX0KICAgICAgICA+PC9kZWVzLWNvbnRleHRtZW51PgogICAgICBgIDogIiJ9CiAgICBgOwogICAgfQogICAgcmVuZGVyVGlsZSh0aWxlKSB7CiAgICAgIGNvbnN0IGhhc0FjdGlvbnMgPSB0aWxlLmFjdGlvbnMgJiYgdGlsZS5hY3Rpb25zLmxlbmd0aCA+IDA7CiAgICAgIGNvbnN0IGNsaWNrYWJsZSA9IGhhc0FjdGlvbnMgJiYgdGlsZS5hY3Rpb25zLmxlbmd0aCA9PT0gMTsKICAgICAgY29uc3QgY29sdW1uU3BhbiA9IHRpbGUuY29sdW1uU3BhbiAmJiB0aWxlLmNvbHVtblNwYW4gPiAxID8gdGlsZS5jb2x1bW5TcGFuIDogdm9pZCAwOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0ic3RhdHMtdGlsZSAke2NsaWNrYWJsZSA/ICJjbGlja2FibGUiIDogIiJ9IgogICAgICAgIHN0eWxlPSIke2NvbHVtblNwYW4gPyBgZ3JpZC1jb2x1bW46IHNwYW4gJHtjb2x1bW5TcGFufWAgOiAiIn0iCiAgICAgICAgQGNsaWNrPSR7Y2xpY2thYmxlID8gKCkgPT4gdGhpcy5oYW5kbGVUaWxlQWN0aW9uKHRpbGUuYWN0aW9uc1swXSwgdGlsZSkgOiB2b2lkIDB9CiAgICAgICAgQGNvbnRleHRtZW51PSR7aGFzQWN0aW9ucyA/IChlMTEpID0+IHRoaXMuc2hvd0NvbnRleHRNZW51KGUxMSwgdGlsZSkgOiB2b2lkIDB9CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWhlYWRlciI+CiAgICAgICAgICA8aDMgY2xhc3M9InRpbGUtdGl0bGUiPiR7dGlsZS50aXRsZX08L2gzPgogICAgICAgICAgJHt0aWxlLmljb24gPyBiMmAKICAgICAgICAgICAgPGRlZXMtaWNvbiBjbGFzcz0idGlsZS1pY29uIiAuaWNvbj0ke3RpbGUuaWNvbn0gc2l6ZT0ic21hbGwiPjwvZGVlcy1pY29uPgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtY29udGVudCI+CiAgICAgICAgICAke3RoaXMucmVuZGVyVGlsZUNvbnRlbnQodGlsZSl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgJHt0aWxlLmRlc2NyaXB0aW9uICYmIHRpbGUudHlwZSAhPT0gInRyZW5kIiA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1kZXNjcmlwdGlvbiI+JHt0aWxlLmRlc2NyaXB0aW9ufTwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyVGlsZUNvbnRlbnQodGlsZSkgewogICAgICBzd2l0Y2ggKHRpbGUudHlwZSkgewogICAgICAgIGNhc2UgIm51bWJlciI6CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIiBzdHlsZT0iJHt0aWxlLmNvbG9yID8gYGNvbG9yOiAke3RpbGUuY29sb3J9YCA6ICIifSI+CiAgICAgICAgICAgIDxzcGFuPiR7dGlsZS52YWx1ZX08L3NwYW4+CiAgICAgICAgICAgICR7dGlsZS51bml0ID8gYjJgPHNwYW4gY2xhc3M9InRpbGUtdW5pdCI+JHt0aWxlLnVuaXR9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGA7CiAgICAgICAgY2FzZSAiZ2F1Z2UiOgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyR2F1Z2UodGlsZSk7CiAgICAgICAgY2FzZSAicGVyY2VudGFnZSI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJQZXJjZW50YWdlKHRpbGUpOwogICAgICAgIGNhc2UgInRyZW5kIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlclRyZW5kKHRpbGUpOwogICAgICAgIGNhc2UgIm11bHRpUGVyY2VudGFnZSI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJNdWx0aVBlcmNlbnRhZ2UodGlsZSk7CiAgICAgICAgY2FzZSAiY3B1Q29yZXMiOgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ3B1Q29yZXModGlsZSk7CiAgICAgICAgY2FzZSAicGFydGl0aW9uIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlclBhcnRpdGlvbih0aWxlKTsKICAgICAgICBjYXNlICJkaXNrIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckRpc2sodGlsZSk7CiAgICAgICAgY2FzZSAidGV4dCI6CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LXZhbHVlIiBzdHlsZT0iJHt0aWxlLmNvbG9yID8gYGNvbG9yOiAke3RpbGUuY29sb3J9YCA6ICIifSI+CiAgICAgICAgICAgICR7dGlsZS52YWx1ZX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGA7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9kaXY+YDsKICAgICAgfQogICAgfQogICAgcmVuZGVyR2F1Z2UodGlsZSkgewogICAgICBjb25zdCB2YWx1ZTIgPSB0eXBlb2YgdGlsZS52YWx1ZSA9PT0gIm51bWJlciIgPyB0aWxlLnZhbHVlIDogcGFyc2VGbG9hdCh0aWxlLnZhbHVlKTsKICAgICAgY29uc3Qgb3B0aW9ucyA9IHRpbGUuZ2F1Z2VPcHRpb25zIHx8IHsgbWluOiAwLCBtYXg6IDEwMCB9OwogICAgICBjb25zdCBwZXJjZW50YWdlID0gKHZhbHVlMiAtIG9wdGlvbnMubWluKSAvIChvcHRpb25zLm1heCAtIG9wdGlvbnMubWluKSAqIDEwMDsKICAgICAgY29uc3Qgd2lkdGggPSAxMjA7CiAgICAgIGNvbnN0IGhlaWdodCA9IDcwOwogICAgICBjb25zdCBzdHJva2VXaWR0aCA9IDY7CiAgICAgIGNvbnN0IHBhZGRpbmcgPSBzdHJva2VXaWR0aCAvIDIgKyAyOwogICAgICBjb25zdCByYWRpdXMgPSA0MDsKICAgICAgY29uc3QgY2VudGVyWCA9IHdpZHRoIC8gMjsKICAgICAgY29uc3QgY2VudGVyWSA9IGhlaWdodCAtIHBhZGRpbmc7CiAgICAgIGNvbnN0IHN0YXJ0WCA9IGNlbnRlclggLSByYWRpdXM7CiAgICAgIGNvbnN0IHN0YXJ0WSA9IGNlbnRlclk7CiAgICAgIGNvbnN0IGVuZFggPSBjZW50ZXJYICsgcmFkaXVzOwogICAgICBjb25zdCBlbmRZID0gY2VudGVyWTsKICAgICAgY29uc3QgYXJjUGF0aCA9IGBNICR7c3RhcnRYfSAke3N0YXJ0WX0gQSAke3JhZGl1c30gJHtyYWRpdXN9IDAgMCAxICR7ZW5kWH0gJHtlbmRZfWA7CiAgICAgIGNvbnN0IGNpcmN1bWZlcmVuY2UgPSBNYXRoLlBJICogcmFkaXVzOwogICAgICBjb25zdCBzdHJva2VEYXNob2Zmc2V0ID0gY2lyY3VtZmVyZW5jZSAtIGNpcmN1bWZlcmVuY2UgKiBwZXJjZW50YWdlIC8gMTAwOwogICAgICBsZXQgc3Ryb2tlQ29sb3IgPSB0aWxlLmNvbG9yIHx8IGNzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyOC44JSkiLCAiaHNsKDIxMCA0MCUgNzglKSIpOwogICAgICBpZiAob3B0aW9ucy50aHJlc2hvbGRzKSB7CiAgICAgICAgY29uc3Qgc29ydGVkVGhyZXNob2xkcyA9IFsuLi5vcHRpb25zLnRocmVzaG9sZHNdLnNvcnQoKGE1LCBiNSkgPT4gYjUudmFsdWUgLSBhNS52YWx1ZSk7CiAgICAgICAgZm9yIChjb25zdCB0aHJlc2hvbGQgb2Ygc29ydGVkVGhyZXNob2xkcykgewogICAgICAgICAgaWYgKHZhbHVlMiA+PSB0aHJlc2hvbGQudmFsdWUpIHsKICAgICAgICAgICAgc3Ryb2tlQ29sb3IgPSB0aHJlc2hvbGQuY29sb3I7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImdhdWdlLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImdhdWdlLWNvbnRhaW5lciI+CiAgICAgICAgICA8c3ZnIGNsYXNzPSJnYXVnZS1zdmciIHZpZXdCb3g9IjAgMCAke3dpZHRofSAke2hlaWdodH0iIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgogICAgICAgICAgICA8IS0tIEJhY2tncm91bmQgYXJjIC0tPgogICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgIGNsYXNzPSJnYXVnZS1iYWNrZ3JvdW5kIgogICAgICAgICAgICAgIGQ9IiR7YXJjUGF0aH0iCiAgICAgICAgICAgIC8+CiAgICAgICAgICAgIDwhLS0gRmlsbGVkIGFyYyAtLT4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICBjbGFzcz0iZ2F1Z2UtZmlsbCIKICAgICAgICAgICAgICBkPSIke2FyY1BhdGh9IgogICAgICAgICAgICAgIHN0cm9rZT0iJHtzdHJva2VDb2xvcn0iCiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT0iJHtjaXJjdW1mZXJlbmNlfSIKICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldD0iJHtzdHJva2VEYXNob2Zmc2V0fSIKICAgICAgICAgICAgLz4KICAgICAgICAgICAgPCEtLSBWYWx1ZSB0ZXh0IC0tPgogICAgICAgICAgICA8dGV4dCBjbGFzcz0iZ2F1Z2UtdGV4dCIgeD0iJHtjZW50ZXJYfSIgeT0iJHtjZW50ZXJZIC0gOH0iIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiPgogICAgICAgICAgICAgIDx0c3Bhbj4ke3ZhbHVlMn08L3RzcGFuPiR7dGlsZS51bml0ID8gYjJgPHRzcGFuIGNsYXNzPSJnYXVnZS11bml0IiBkeD0iMiIgZHk9IjAiPiR7dGlsZS51bml0fTwvdHNwYW4+YCA6ICIifQogICAgICAgICAgICA8L3RleHQ+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyUGVyY2VudGFnZSh0aWxlKSB7CiAgICAgIGNvbnN0IHZhbHVlMiA9IHR5cGVvZiB0aWxlLnZhbHVlID09PSAibnVtYmVyIiA/IHRpbGUudmFsdWUgOiBwYXJzZUZsb2F0KHRpbGUudmFsdWUpOwogICAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5taW4oMTAwLCBNYXRoLm1heCgwLCB2YWx1ZTIpKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJwZXJjZW50YWdlLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InBlcmNlbnRhZ2UtdmFsdWUiPiR7cGVyY2VudGFnZX0lPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGVyY2VudGFnZS1iYXIiPgogICAgICAgICAgPGRpdiAKICAgICAgICAgICAgY2xhc3M9InBlcmNlbnRhZ2UtZmlsbCIgCiAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogJHtwZXJjZW50YWdlfSU7ICR7dGlsZS5jb2xvciA/IGBiYWNrZ3JvdW5kOiAke3RpbGUuY29sb3J9YCA6ICIifSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyVHJlbmQodGlsZSkgewogICAgICBpZiAoIXRpbGUudHJlbmREYXRhIHx8IHRpbGUudHJlbmREYXRhLmxlbmd0aCA8IDIpIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idGlsZS12YWx1ZSI+JHt0aWxlLnZhbHVlfTwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgZGF0YSA9IHRpbGUudHJlbmREYXRhOwogICAgICBjb25zdCBtYXgzID0gTWF0aC5tYXgoLi4uZGF0YSk7CiAgICAgIGNvbnN0IG1pbjMgPSBNYXRoLm1pbiguLi5kYXRhKTsKICAgICAgY29uc3QgcmFuZ2UyID0gbWF4MyAtIG1pbjMgfHwgMTsKICAgICAgY29uc3Qgd2lkdGggPSAzMDA7CiAgICAgIGNvbnN0IGhlaWdodCA9IDMyOwogICAgICBjb25zdCBwYWRkaW5nID0gMjsKICAgICAgY29uc3QgcG9pbnRzID0gZGF0YS5tYXAoKHZhbHVlMiwgaW5kZXgyKSA9PiB7CiAgICAgICAgY29uc3QgeDMgPSBpbmRleDIgLyAoZGF0YS5sZW5ndGggLSAxKSAqIHdpZHRoOwogICAgICAgIGNvbnN0IHk1ID0gcGFkZGluZyArIChoZWlnaHQgLSAyICogcGFkZGluZykgLSAodmFsdWUyIC0gbWluMykgLyByYW5nZTIgKiAoaGVpZ2h0IC0gMiAqIHBhZGRpbmcpOwogICAgICAgIHJldHVybiBgJHt4M30sJHt5NX1gOwogICAgICB9KS5qb2luKCIgIik7CiAgICAgIGNvbnN0IGFyZWFQb2ludHMgPSBgMCwke2hlaWdodH0gJHtwb2ludHN9ICR7d2lkdGh9LCR7aGVpZ2h0fWA7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0idHJlbmQtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0cmVuZC1oZWFkZXIiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InRyZW5kLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9zcGFuPgogICAgICAgICAgJHt0aWxlLnVuaXQgPyBiMmA8c3BhbiBjbGFzcz0idHJlbmQtdW5pdCI+JHt0aWxlLnVuaXR9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgICR7dGlsZS5kZXNjcmlwdGlvbiA/IGIyYDxzcGFuIGNsYXNzPSJ0cmVuZC1sYWJlbCI+JHt0aWxlLmRlc2NyaXB0aW9ufTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idHJlbmQtZ3JhcGgiPgogICAgICAgICAgPHN2ZyBjbGFzcz0idHJlbmQtc3ZnIiB2aWV3Qm94PSIwIDAgJHt3aWR0aH0gJHtoZWlnaHR9IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIj4KICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9InRyZW5kLWFyZWEiIHBvaW50cz0iJHthcmVhUG9pbnRzfSIgLz4KICAgICAgICAgICAgPHBvbHlsaW5lIGNsYXNzPSJ0cmVuZC1saW5lIiBwb2ludHM9IiR7cG9pbnRzfSIgLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJNdWx0aVBlcmNlbnRhZ2UodGlsZSkgewogICAgICBpZiAoIXRpbGUucGVyY2VudGFnZXMgfHwgdGlsZS5wZXJjZW50YWdlcy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idGlsZS12YWx1ZSI+JHt0aWxlLnZhbHVlfTwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgaXRlbXMgPSB0aWxlLnBlcmNlbnRhZ2VzLnNsaWNlKDAsIDMpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2Utd3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0ibXVsdGktcGVyY2VudGFnZS1pdGVtcyI+CiAgICAgICAgICAke2l0ZW1zLm1hcCgoaXRlbSkgPT4gewogICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIGl0ZW0udmFsdWUpKTsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXVsdGktcGVyY2VudGFnZS1pdGVtIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2UtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2UtbGFiZWwiPiR7aXRlbS5sYWJlbH08L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdWx0aS1wZXJjZW50YWdlLXZhbHVlIj4ke3BlcmNlbnRhZ2V9JTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXVsdGktcGVyY2VudGFnZS1iYXIiPgogICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2UtZmlsbCIKICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6ICR7cGVyY2VudGFnZX0lOyAke2l0ZW0uY29sb3IgPyBgYmFja2dyb3VuZDogJHtpdGVtLmNvbG9yfWAgOiAiIn0iCiAgICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyQ3B1Q29yZXModGlsZSkgewogICAgICBpZiAoIXRpbGUuY29yZXNEYXRhIHx8IHRpbGUuY29yZXNEYXRhLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9kaXY+YDsKICAgICAgfQogICAgICBjb25zdCBjb3JlcyA9IHRpbGUuY29yZXNEYXRhOwogICAgICBjb25zdCBhdmdVc2FnZSA9IE1hdGgucm91bmQoY29yZXMucmVkdWNlKChzdW0sIGNvcmUyKSA9PiBzdW0gKyBjb3JlMi51c2FnZSwgMCkgLyBjb3Jlcy5sZW5ndGgpOwogICAgICBjb25zdCBnZXRDb2xvckNsYXNzID0gKHVzYWdlKSA9PiB7CiAgICAgICAgaWYgKHVzYWdlIDwgNTApCiAgICAgICAgICByZXR1cm4gImxvdyI7CiAgICAgICAgaWYgKHVzYWdlIDwgODApCiAgICAgICAgICByZXR1cm4gIm1lZGl1bSI7CiAgICAgICAgcmV0dXJuICJoaWdoIjsKICAgICAgfTsKICAgICAgY29uc3QgbWF4QmFyc1dpZHRoID0gY29yZXMubGVuZ3RoICogMjQgKyAoY29yZXMubGVuZ3RoIC0gMSkgKiAzOwogICAgICBjb25zdCBjb2x1bW5TcGFuID0gdGlsZS5jb2x1bW5TcGFuIHx8IDE7CiAgICAgIGNvbnN0IGVzdGltYXRlZFRpbGVXaWR0aCA9IHRoaXMubWluVGlsZVdpZHRoICogY29sdW1uU3BhbiArIChjb2x1bW5TcGFuIC0gMSkgKiB0aGlzLmdhcCAtIDMyOwogICAgICBjb25zdCBzaG91bGRDZW50ZXIgPSBtYXhCYXJzV2lkdGggPCBlc3RpbWF0ZWRUaWxlV2lkdGggKiAwLjY2NjsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJjcHUtY29yZXMtd3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY3B1LWNvcmVzLWhlYWRlciI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iY3B1LWNvcmVzLXZhbHVlIj4ke2F2Z1VzYWdlfTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJjcHUtY29yZXMtdW5pdCI+JTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJjcHUtY29yZXMtbGFiZWwiPiR7Y29yZXMubGVuZ3RofSBjb3Jlczwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjcHUtY29yZXMtYmFycyAke3Nob3VsZENlbnRlciA/ICJjZW50ZXJlZCIgOiAiIn0iPgogICAgICAgICAgJHtjb3Jlcy5tYXAoKGNvcmUyKSA9PiB7CiAgICAgICAgY29uc3QgdXNhZ2UgPSBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIGNvcmUyLnVzYWdlKSk7CiAgICAgICAgY29uc3QgY29sb3JDbGFzcyA9IGdldENvbG9yQ2xhc3ModXNhZ2UpOwogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjcHUtY29yZS1iYXItY29udGFpbmVyIiB0aXRsZT0iQ29yZSAke2NvcmUyLmxhYmVsIHx8IGNvcmUyLmlkfTogJHt1c2FnZX0lIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNwdS1jb3JlLWJhci13cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjcHUtY29yZS1iYXItZmlsbCAke2NvbG9yQ2xhc3N9IgogICAgICAgICAgICAgICAgICAgIHN0eWxlPSJoZWlnaHQ6ICR7dXNhZ2V9JSIKICAgICAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAke2NvcmVzLmxlbmd0aCA8PSAxNiA/IGIyYAogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY3B1LWNvcmUtbGFiZWwiPiR7Y29yZTIubGFiZWwgfHwgY29yZTIuaWR9PC9zcGFuPgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgZm9ybWF0Qnl0ZXMoYnl0ZXMpIHsKICAgICAgaWYgKGJ5dGVzID09PSAwKQogICAgICAgIHJldHVybiAiMCBCIjsKICAgICAgY29uc3QgazQgPSAxMDI0OwogICAgICBjb25zdCBzaXplcyA9IFsiQiIsICJLQiIsICJNQiIsICJHQiIsICJUQiIsICJQQiJdOwogICAgICBjb25zdCBpMTEgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGs0KSk7CiAgICAgIHJldHVybiBwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGs0LCBpMTEpKS50b0ZpeGVkKDEpKSArICIgIiArIHNpemVzW2kxMV07CiAgICB9CiAgICByZW5kZXJQYXJ0aXRpb24odGlsZSkgewogICAgICBpZiAoIXRpbGUucGFydGl0aW9uRGF0YSkgewogICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9kaXY+YDsKICAgICAgfQogICAgICBjb25zdCB7IHVzZWQsIHRvdGFsLCBmaWxlc3lzdGVtLCBtb3VudFBvaW50IH0gPSB0aWxlLnBhcnRpdGlvbkRhdGE7CiAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIHVzZWQgLyB0b3RhbCAqIDEwMCkpOwogICAgICBjb25zdCBmcmVlID0gdG90YWwgLSB1c2VkOwogICAgICBjb25zdCBnZXRDb2xvckNsYXNzID0gKCkgPT4gewogICAgICAgIGlmIChwZXJjZW50YWdlID49IDkwKQogICAgICAgICAgcmV0dXJuICJjcml0aWNhbCI7CiAgICAgICAgaWYgKHBlcmNlbnRhZ2UgPj0gNzUpCiAgICAgICAgICByZXR1cm4gIndhcm5pbmciOwogICAgICAgIHJldHVybiAiIjsKICAgICAgfTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJwYXJ0aXRpb24td3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0icGFydGl0aW9uLWhlYWRlciI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0icGFydGl0aW9uLXBlcmNlbnRhZ2UiPiR7TWF0aC5yb3VuZChwZXJjZW50YWdlKX0lPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhcnRpdGlvbi1iYXIiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0icGFydGl0aW9uLWJhci1maWxsICR7Z2V0Q29sb3JDbGFzcygpfSIKICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAke3BlcmNlbnRhZ2V9JSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0aXRpb24tc3RhdHMiPgogICAgICAgICAgPGRpdiBjbGFzcz0icGFydGl0aW9uLXN0YXQiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0icGFydGl0aW9uLXN0YXQtbGFiZWwiPlVzZWQ8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tc3RhdC12YWx1ZSI+JHt0aGlzLmZvcm1hdEJ5dGVzKHVzZWQpfTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icGFydGl0aW9uLXN0YXQiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0icGFydGl0aW9uLXN0YXQtbGFiZWwiPkZyZWU8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tc3RhdC12YWx1ZSI+JHt0aGlzLmZvcm1hdEJ5dGVzKGZyZWUpfTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhcnRpdGlvbi1tZXRhIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tZmlsZXN5c3RlbSI+JHtmaWxlc3lzdGVtfTwvc3Bhbj4KICAgICAgICAgICR7bW91bnRQb2ludCA/IGIyYDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tbW91bnRwb2ludCI+JHttb3VudFBvaW50fTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckRpc2sodGlsZSkgewogICAgICBpZiAoIXRpbGUuZGlza0RhdGEpIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idGlsZS12YWx1ZSI+JHt0aWxlLnZhbHVlfTwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgeyBjYXBhY2l0eSwgbW9kZWwsIHR5cGU6IHR5cGU1LCBpb3BzLCBoZWFsdGggfSA9IHRpbGUuZGlza0RhdGE7CiAgICAgIGNvbnN0IGdldEhlYWx0aENsYXNzID0gKHZhbHVlMikgPT4gewogICAgICAgIGlmICh2YWx1ZTIgPj0gNzApCiAgICAgICAgICByZXR1cm4gImdvb2QiOwogICAgICAgIGlmICh2YWx1ZTIgPj0gMzApCiAgICAgICAgICByZXR1cm4gIndhcm5pbmciOwogICAgICAgIHJldHVybiAiY3JpdGljYWwiOwogICAgICB9OwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImRpc2std3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1jYXBhY2l0eSI+JHt0aGlzLmZvcm1hdEJ5dGVzKGNhcGFjaXR5KX08L2Rpdj4KICAgICAgICAke21vZGVsIHx8IHR5cGU1ID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLW1vZGVsIj4KICAgICAgICAgICAgJHttb2RlbCA/IGIyYDxzcGFuPiR7bW9kZWx9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgICAgJHt0eXBlNSA/IGIyYDxzcGFuIGNsYXNzPSJkaXNrLXR5cGUtYmFkZ2UiPiR7dHlwZTV9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLW1ldHJpY3MiPgogICAgICAgICAgJHtpb3BzID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpc2staW9wcyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1pb3BzLWl0ZW0iPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpc2staW9wcy1sYWJlbCI+UmVhZDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXNrLWlvcHMtdmFsdWUiPiR7aW9wcy5yZWFkLnRvTG9jYWxlU3RyaW5nKCl9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpc2staW9wcy1pdGVtIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXNrLWlvcHMtbGFiZWwiPldyaXRlPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpc2staW9wcy12YWx1ZSI+JHtpb3BzLndyaXRlLnRvTG9jYWxlU3RyaW5nKCl9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICR7aGVhbHRoICE9PSB2b2lkIDAgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1oZWFsdGgiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpc2staGVhbHRoLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZGlzay1oZWFsdGgtbGFiZWwiPkhlYWx0aDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXNrLWhlYWx0aC12YWx1ZSI+JHtoZWFsdGh9JTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLWhlYWx0aC1iYXIiPgogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0iZGlzay1oZWFsdGgtZmlsbCAke2dldEhlYWx0aENsYXNzKGhlYWx0aCl9IgogICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6ICR7aGVhbHRofSUiCiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBoYW5kbGVHcmlkQWN0aW9uKGFjdGlvbikgewogICAgICBpZiAoYWN0aW9uLmFjdGlvbikgewogICAgICAgIGF3YWl0IGFjdGlvbi5hY3Rpb24oKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgaGFuZGxlVGlsZUFjdGlvbihhY3Rpb24sIF90aWxlKSB7CiAgICAgIGlmIChhY3Rpb24uYWN0aW9uKSB7CiAgICAgICAgYXdhaXQgYWN0aW9uLmFjdGlvbigpOwogICAgICB9CiAgICB9CiAgICBzaG93Q29udGV4dE1lbnUoZXZlbnQsIHRpbGUpIHsKICAgICAgaWYgKCF0aWxlLmFjdGlvbnMgfHwgdGlsZS5hY3Rpb25zLmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbiA9IHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9OwogICAgICB0aGlzLmNvbnRleHRNZW51QWN0aW9ucyA9IHRpbGUuYWN0aW9uczsKICAgICAgdGhpcy5jb250ZXh0TWVudVZpc2libGUgPSB0cnVlOwogICAgICBjb25zdCBjbG9zZUhhbmRsZXIgPSAoKSA9PiB7CiAgICAgICAgdGhpcy5jb250ZXh0TWVudVZpc2libGUgPSBmYWxzZTsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsIGNsb3NlSGFuZGxlcik7CiAgICAgIH07CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgY2xvc2VIYW5kbGVyKTsKICAgICAgfSwgMTAwKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzYoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNTdGF0c0dyaWQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpL2RlZXMtYXBwdWkuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgX19lc0RlY29yYXRlMzYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczM3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZW1vRGFzaGJvYXJkVmlldyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlbW8tZGFzaGJvYXJkLXZpZXciKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9hY3RpdmF0ZWRfZGVjb3JhdG9yczsKICBsZXQgX2FjdGl2YXRlZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2YXRlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZW1vRGFzaGJvYXJkVmlldzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9hY3RpdmF0ZWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMzYodGhpcywgbnVsbCwgX2FjdGl2YXRlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmF0ZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2YXRlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3RpdmF0ZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2YXRlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3RpdmF0ZWRfaW5pdGlhbGl6ZXJzLCBfYWN0aXZhdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZW1vRGFzaGJvYXJkVmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICBfX3J1bkluaXRpYWxpemVyczM3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgICNhY3RpdmF0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzcodGhpcywgX2FjdGl2YXRlZF9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgIGdldCBhY3RpdmF0ZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhY3RpdmF0ZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3RpdmF0ZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2YXRlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY3R4ID0gX19ydW5Jbml0aWFsaXplcnMzNyh0aGlzLCBfYWN0aXZhdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIHN0YXRzVGlsZXMgPSBbCiAgICAgIHsKICAgICAgICBpZDogInVzZXJzIiwKICAgICAgICB0aXRsZTogIkFjdGl2ZSBVc2VycyIsCiAgICAgICAgdmFsdWU6IDEyMzQsCiAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgaWNvbjogImx1Y2lkZTp1c2VycyIsCiAgICAgICAgZGVzY3JpcHRpb246ICJPbmxpbmUgbm93IiwKICAgICAgICBjb2xvcjogIiMyMmM1NWUiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogImFwaS1jYWxscyIsCiAgICAgICAgdGl0bGU6ICJBUEkgQ2FsbHMiLAogICAgICAgIHZhbHVlOiA0NTIwMCwKICAgICAgICB0eXBlOiAidHJlbmQiLAogICAgICAgIGljb246ICJsdWNpZGU6YWN0aXZpdHkiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiKzEyJSBmcm9tIGxhc3QgaG91ciIsCiAgICAgICAgY29sb3I6ICIjM2I4MmY2IiwKICAgICAgICB0cmVuZERhdGE6IFszMmUzLCAzNWUzLCAzOGUzLCA0MWUzLCAzOWUzLCA0MmUzLCA0NTIwMF0KICAgICAgfSwKICAgICAgewogICAgICAgIGlkOiAiaGVhbHRoIiwKICAgICAgICB0aXRsZTogIlN5c3RlbSBIZWFsdGgiLAogICAgICAgIHZhbHVlOiA5OS45LAogICAgICAgIHVuaXQ6ICIlIiwKICAgICAgICB0eXBlOiAiZ2F1Z2UiLAogICAgICAgIGljb246ICJsdWNpZGU6aGVhcnQtcHVsc2UiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiQWxsIHN5c3RlbXMgb3BlcmF0aW9uYWwiLAogICAgICAgIGNvbG9yOiAiIzEwYjk4MSIsCiAgICAgICAgZ2F1Z2VPcHRpb25zOiB7CiAgICAgICAgICBtaW46IDAsCiAgICAgICAgICBtYXg6IDEwMCwKICAgICAgICAgIHRocmVzaG9sZHM6IFsKICAgICAgICAgICAgeyB2YWx1ZTogODAsIGNvbG9yOiAiI2VmNDQ0NCIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogOTUsIGNvbG9yOiAiI2Y1OWUwYiIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogMTAwLCBjb2xvcjogIiMxMGI5ODEiIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogInJlc3BvbnNlIiwKICAgICAgICB0aXRsZTogIkF2ZyBSZXNwb25zZSIsCiAgICAgICAgdmFsdWU6IDEyNywKICAgICAgICB1bml0OiAibXMiLAogICAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICAgIGljb246ICJsdWNpZGU6dGltZXIiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiLTE1bXMgZnJvbSB5ZXN0ZXJkYXkiLAogICAgICAgIGNvbG9yOiAiIzhiNWNmNiIKICAgICAgfSwKICAgICAgewogICAgICAgIGlkOiAicmVzb3VyY2VzIiwKICAgICAgICB0aXRsZTogIlJlc291cmNlIFVzYWdlIiwKICAgICAgICB2YWx1ZTogIiIsCiAgICAgICAgdHlwZTogIm11bHRpUGVyY2VudGFnZSIsCiAgICAgICAgaWNvbjogImx1Y2lkZTpzZXJ2ZXIiLAogICAgICAgIHBlcmNlbnRhZ2VzOiBbCiAgICAgICAgICB7IGxhYmVsOiAiQ1BVIiwgdmFsdWU6IDY3LCBjb2xvcjogIiMzYjgyZjYiIH0sCiAgICAgICAgICB7IGxhYmVsOiAiTWVtb3J5IiwgdmFsdWU6IDg0LCBjb2xvcjogIiM4YjVjZjYiIH0sCiAgICAgICAgICB7IGxhYmVsOiAiRGlzayIsIHZhbHVlOiA0NSwgY29sb3I6ICIjMTBiOTgxIiB9CiAgICAgICAgXQogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJyZXF1ZXN0cyIsCiAgICAgICAgdGl0bGU6ICJSZXF1ZXN0cy9zZWMiLAogICAgICAgIHZhbHVlOiAxODUwLAogICAgICAgIHR5cGU6ICJ0cmVuZCIsCiAgICAgICAgaWNvbjogImx1Y2lkZTp6YXAiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiQ3VycmVudCB0aHJvdWdocHV0IiwKICAgICAgICBjb2xvcjogIiMwNmI2ZDQiLAogICAgICAgIHRyZW5kRGF0YTogWzEyMDAsIDE0MDAsIDEzNTAsIDE2MDAsIDE3NTAsIDE2ODAsIDE4NTBdCiAgICAgIH0KICAgIF07CiAgICBvbkFjdGl2YXRlKGNvbnRleHQyKSB7CiAgICAgIHRoaXMuY3R4ID0gY29udGV4dDI7CiAgICAgIHRoaXMuYWN0aXZhdGVkID0gdHJ1ZTsKICAgICAgY29uc29sZS5sb2coIkRhc2hib2FyZCBhY3RpdmF0ZWQgd2l0aCBjb250ZXh0OiIsIGNvbnRleHQyKTsKICAgICAgY29udGV4dDIuYXBwdWkuc2V0U2Vjb25kYXJ5TWVudSh7CiAgICAgICAgaGVhZGluZzogIkRhc2hib2FyZCIsCiAgICAgICAgZ3JvdXBzOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJRdWljayBBY2Nlc3MiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp6YXAiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsga2V5OiAiT3ZlcnZpZXciLCBpY29uTmFtZTogImxheW91dERhc2hib2FyZCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIk92ZXJ2aWV3IikgfSwKICAgICAgICAgICAgICB7IGtleTogIlJlY2VudCIsIGljb25OYW1lOiAiY2xvY2siLCBiYWRnZTogNSwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUmVjZW50IikgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJkaXZpZGVyIiB9LAogICAgICAgICAgICAgIHsgdHlwZTogImFjdGlvbiIsIGtleTogIlJlZnJlc2ggRGF0YSIsIGljb25OYW1lOiAibHVjaWRlOnJlZnJlc2hDdyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIlJlZnJlc2hpbmcgZGFzaGJvYXJkIGRhdGEuLi4iKSB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJGaWx0ZXJzIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsdGVyIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICB7IHR5cGU6ICJoZWFkZXIiLCBsYWJlbDogIlRpbWUgUmFuZ2UiIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZmlsdGVyIiwga2V5OiAiTGl2ZSBVcGRhdGVzIiwgaWNvbk5hbWU6ICJsdWNpZGU6cmFkaW8iLCBhY3RpdmU6IHRydWUsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiTGl2ZSB1cGRhdGVzOiIsIGFjdGl2ZSkgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJmaWx0ZXIiLCBrZXk6ICJTaG93IEFyY2hpdmVkIiwgaWNvbk5hbWU6ICJsdWNpZGU6YXJjaGl2ZSIsIGFjdGl2ZTogZmFsc2UsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiU2hvdyBhcmNoaXZlZDoiLCBhY3RpdmUpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJtdWx0aUZpbHRlciIsIGtleTogIkRhdGEgU291cmNlcyIsIGljb25OYW1lOiAibHVjaWRlOmRhdGFiYXNlIiwgb3B0aW9uczogWwogICAgICAgICAgICAgICAgeyBrZXk6ICJhcGkiLCBsYWJlbDogIkFQSSBTZXJ2ZXIiLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTpzZXJ2ZXIiIH0sCiAgICAgICAgICAgICAgICB7IGtleTogIndlYiIsIGxhYmVsOiAiV2ViIFRyYWZmaWMiLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTpnbG9iZSIgfSwKICAgICAgICAgICAgICAgIHsga2V5OiAibW9iaWxlIiwgbGFiZWw6ICJNb2JpbGUgQXBwIiwgY2hlY2tlZDogZmFsc2UsIGljb25OYW1lOiAibHVjaWRlOnNtYXJ0cGhvbmUiIH0KICAgICAgICAgICAgICBdLCBvbkNoYW5nZTogKGtleXMyKSA9PiBjb25zb2xlLmxvZygiRGF0YSBzb3VyY2VzOiIsIGtleXMyKSB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJBbmFseXRpY3MiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpiYXJDaGFydDMiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsga2V5OiAiTWV0cmljcyIsIGljb25OYW1lOiAiYWN0aXZpdHkiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJNZXRyaWNzIikgfSwKICAgICAgICAgICAgICB7IGtleTogIlJlcG9ydHMiLCBpY29uTmFtZTogImZpbGVUZXh0IiwgYmFkZ2U6ICJuZXciLCBiYWRnZVZhcmlhbnQ6ICJzdWNjZXNzIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUmVwb3J0cyIpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJsaW5rIiwga2V5OiAiQW5hbHl0aWNzIERvY3MiLCBpY29uTmFtZTogImx1Y2lkZTpleHRlcm5hbExpbmsiLCBocmVmOiAiaHR0cHM6Ly9kb2NzLmV4YW1wbGUuY29tL2FuYWx5dGljcyIgfQogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9KTsKICAgICAgY29udGV4dDIuYXBwdWkuc2V0Q29udGVudFRhYnMoWwogICAgICAgIHsga2V5OiAiT3ZlcnZpZXciLCBpY29uTmFtZTogImx1Y2lkZTpsYXlvdXREYXNoYm9hcmQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJPdmVydmlldyB0YWIiKSB9LAogICAgICAgIHsga2V5OiAiQW5hbHl0aWNzIiwgaWNvbk5hbWU6ICJsdWNpZGU6YmFyQ2hhcnQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJBbmFseXRpY3MgdGFiIikgfSwKICAgICAgICB7IGtleTogIlJlcG9ydHMiLCBpY29uTmFtZTogImx1Y2lkZTpmaWxlVGV4dCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlJlcG9ydHMgdGFiIikgfQogICAgICBdKTsKICAgIH0KICAgIG9uRGVhY3RpdmF0ZSgpIHsKICAgICAgdGhpcy5hY3RpdmF0ZWQgPSBmYWxzZTsKICAgICAgY29uc29sZS5sb2coIkRhc2hib2FyZCBkZWFjdGl2YXRlZCIpOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICA6aG9zdCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBjb2xvcjogI2EzYTNhMzsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWY7CiAgICAgICAgfQogICAgICAgIGgxIHsgY29sb3I6ICNmYWZhZmE7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMjRweDsgbWFyZ2luLWJvdHRvbTogOHB4OyB9CiAgICAgICAgcCB7IGNvbG9yOiAjNzM3MzczOyBtYXJnaW4tYm90dG9tOiAzMnB4OyB9CiAgICAgICAgZGVlcy1zdGF0c2dyaWQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDsKICAgICAgICB9CgogICAgICAgIC5jdHgtYWN0aW9ucyB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wMik7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIH0KICAgICAgICAuY3R4LWFjdGlvbnMgaDIgeyBjb2xvcjogI2ZhZmFmYTsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNjAwOyBtYXJnaW4tYm90dG9tOiAxNnB4OyB9CiAgICAgICAgLmJ1dHRvbi1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG4gewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg1OSwgMTMwLCAyNDYsIDAuMSk7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKTsKICAgICAgICAgIGNvbG9yOiAjNjBhNWZhOwogICAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG46aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg1OSwgMTMwLCAyNDYsIDAuMik7CiAgICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjUpOwogICAgICAgIH0KICAgICAgICAuY3R4LWJ0bi5kYW5nZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4xKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMzksIDY4LCA2OCwgMC4zKTsKICAgICAgICAgIGNvbG9yOiAjZjg3MTcxOwogICAgICAgIH0KICAgICAgICAuY3R4LWJ0bi5kYW5nZXI6aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4yKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMzksIDY4LCA2OCwgMC41KTsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG4uc3VjY2VzcyB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjEpOwogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjMpOwogICAgICAgICAgY29sb3I6ICM0YWRlODA7CiAgICAgICAgfQogICAgICAgIC5jdHgtYnRuLnN1Y2Nlc3M6aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzNCwgMTk3LCA5NCwgMC4yKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgzNCwgMTk3LCA5NCwgMC41KTsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxoMT5EYXNoYm9hcmQ8L2gxPgogICAgICA8cD5XZWxjb21lIGJhY2shIEhlcmUncyBhbiBvdmVydmlldyBvZiB5b3VyIHN5c3RlbS48L3A+CiAgICAgIDxkZWVzLXN0YXRzZ3JpZAogICAgICAgIC50aWxlcz0ke3RoaXMuc3RhdHNUaWxlc30KICAgICAgICBAdGlsZS1hY3Rpb249JHsoZTExKSA9PiBjb25zb2xlLmxvZygiVGlsZSBhY3Rpb246IiwgZTExLmRldGFpbCl9CiAgICAgID48L2RlZXMtc3RhdHNncmlkPgoKICAgICAgPGRpdiBjbGFzcz0iY3R4LWFjdGlvbnMiPgogICAgICAgIDxoMj5Db250ZXh0IEFjdGlvbnMgKGN0eC5hcHB1aSk8L2gyPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5zZXRNYWluTWVudVZpc2libGUoZmFsc2UpfT5IaWRlIE1haW4gTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0TWFpbk1lbnVWaXNpYmxlKHRydWUpfT5TaG93IE1haW4gTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldFNlY29uZGFyeU1lbnVWaXNpYmxlKGZhbHNlKX0+SGlkZSBTZWNvbmRhcnkgTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0U2Vjb25kYXJ5TWVudVZpc2libGUodHJ1ZSl9PlNob3cgU2Vjb25kYXJ5IE1lbnU8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5zZXRDb250ZW50VGFic1Zpc2libGUoZmFsc2UpfT5IaWRlIENvbnRlbnQgVGFiczwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0Q29udGVudFRhYnNWaXNpYmxlKHRydWUpfT5TaG93IENvbnRlbnQgVGFiczwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldE1haW5NZW51Q29sbGFwc2VkKHRydWUpfT5Db2xsYXBzZSBNYWluIE1lbnU8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4gc3VjY2VzcyIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldE1haW5NZW51Q29sbGFwc2VkKGZhbHNlKX0+RXhwYW5kIE1haW4gTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldEJyZWFkY3J1bWJzKFsiRGFzaGJvYXJkIiwgIk92ZXJ2aWV3IiwgIlN0YXRzIl0pfT5TZXQgQnJlYWRjcnVtYnM8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5uYXZpZ2F0ZVRvVmlldygicHJvamVjdHMiKX0+R28gdG8gUHJvamVjdHM8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5uYXZpZ2F0ZVRvVmlldygic2V0dGluZ3MiLCB7IHNlY3Rpb246ICJzZWN1cml0eSIgfSl9PkdvIHRvIFNldHRpbmdzL1NlY3VyaXR5PC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuYWN0aXZpdHlMb2cuYWRkKHsgdHlwZTogImN1c3RvbSIsIHVzZXI6ICJEZW1vIFVzZXIiLCBtZXNzYWdlOiAiQnV0dG9uIGNsaWNrZWQgZnJvbSBjdHghIiwgaWNvbk5hbWU6ICJsdWNpZGU6bW91c2UtcG9pbnRlci1jbGljayIgfSl9PkFkZCBBY3Rpdml0eSBFbnRyeTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldE1haW5NZW51QmFkZ2UoInRhc2tzIiwgOTkpfT5TZXQgVGFza3MgQmFkZ2UgdG8gOTk8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4gZGFuZ2VyIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuY2xlYXJNYWluTWVudUJhZGdlKCJ0YXNrcyIpfT5DbGVhciBUYXNrcyBCYWRnZTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldENvbnRlbnRUYWJzQXV0b0hpZGUodHJ1ZSwgMSl9PkF1dG8taGlkZSBUYWJzICjiiaQxKTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBkYW5nZXIiIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5zZXRDb250ZW50VGFic0F1dG9IaWRlKGZhbHNlKX0+RGlzYWJsZSBBdXRvLWhpZGU8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4gc3VjY2VzcyIgQGNsaWNrPSR7KCkgPT4gdGhpcy5hZGRDbG9zZWFibGVUYWIoKX0+QWRkIENsb3NlYWJsZSBUYWI8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgdGFiQ291bnRlciA9IDA7CiAgICBhZGRDbG9zZWFibGVUYWIoKSB7CiAgICAgIGlmICghdGhpcy5jdHgpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnRhYkNvdW50ZXIrKzsKICAgICAgY29uc3QgdGFiS2V5ID0gYFRhYiAke3RoaXMudGFiQ291bnRlcn1gOwogICAgICB0aGlzLmN0eC5hcHB1aS5hZGRDb250ZW50VGFiKHsKICAgICAgICBrZXk6IHRhYktleSwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmaWxlIiwKICAgICAgICBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKGBTZWxlY3RlZCAke3RhYktleX1gKSwKICAgICAgICBjbG9zZWFibGU6IHRydWUsCiAgICAgICAgb25DbG9zZTogKCkgPT4gewogICAgICAgICAgdGhpcy5jdHg/LmFwcHVpLnJlbW92ZUNvbnRlbnRUYWIodGFiS2V5KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9EYXNoYm9hcmRWaWV3MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CnZhciBEZW1vU2V0dGluZ3NWaWV3ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVtby1zZXR0aW5ncy12aWV3IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfc2VjdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfc2VjdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlY3Rpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hhc0NoYW5nZXNfZGVjb3JhdG9yczsKICBsZXQgX2hhc0NoYW5nZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oYXNDaGFuZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlbW9TZXR0aW5nc1ZpZXcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfc2VjdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaGFzQ2hhbmdlc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGUzNih0aGlzLCBudWxsLCBfc2VjdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWN0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlY3Rpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlY3Rpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VjdGlvbl9pbml0aWFsaXplcnMsIF9zZWN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzYodGhpcywgbnVsbCwgX2hhc0NoYW5nZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGFzQ2hhbmdlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGFzQ2hhbmdlcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oYXNDaGFuZ2VzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oYXNDaGFuZ2VzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hhc0NoYW5nZXNfaW5pdGlhbGl6ZXJzLCBfaGFzQ2hhbmdlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVtb1NldHRpbmdzVmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICBfX3J1bkluaXRpYWxpemVyczM3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgICNzZWN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczM3KHRoaXMsIF9zZWN0aW9uX2luaXRpYWxpemVycywgImdlbmVyYWwiKTsKICAgIGdldCBzZWN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VjdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlY3Rpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNoYXNDaGFuZ2VzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNyh0aGlzLCBfc2VjdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzcodGhpcywgX2hhc0NoYW5nZXNfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGhhc0NoYW5nZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoYXNDaGFuZ2VzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaGFzQ2hhbmdlcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGFzQ2hhbmdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgYXBwdWkgPSBfX3J1bkluaXRpYWxpemVyczM3KHRoaXMsIF9oYXNDaGFuZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIG9uQWN0aXZhdGUoY29udGV4dDIpIHsKICAgICAgdGhpcy5hcHB1aSA9IGNvbnRleHQyLmFwcHVpOwogICAgICBjb25zb2xlLmxvZygiU2V0dGluZ3MgYWN0aXZhdGVkIHdpdGggcGFyYW1zOiIsIGNvbnRleHQyLnBhcmFtcyk7CiAgICAgIGlmIChjb250ZXh0Mi5wYXJhbXM/LnNlY3Rpb24pIHsKICAgICAgICB0aGlzLnNlY3Rpb24gPSBjb250ZXh0Mi5wYXJhbXMuc2VjdGlvbjsKICAgICAgfQogICAgICBjb250ZXh0Mi5hcHB1aS5zZXRTZWNvbmRhcnlNZW51KHsKICAgICAgICBoZWFkaW5nOiAiU2V0dGluZ3MiLAogICAgICAgIGdyb3VwczogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiQWNjb3VudCIsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnVzZXIiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsga2V5OiAiZ2VuZXJhbCIsIGljb25OYW1lOiAic2V0dGluZ3MiLCBhY3Rpb246ICgpID0+IHRoaXMuc2hvd1NlY3Rpb24oImdlbmVyYWwiKSB9LAogICAgICAgICAgICAgIHsga2V5OiAicHJvZmlsZSIsIGljb25OYW1lOiAidXNlciIsIGFjdGlvbjogKCkgPT4gdGhpcy5zaG93U2VjdGlvbigicHJvZmlsZSIpIH0sCiAgICAgICAgICAgICAgeyBrZXk6ICJzZWN1cml0eSIsIGljb25OYW1lOiAic2hpZWxkIiwgYWN0aW9uOiAoKSA9PiB0aGlzLnNob3dTZWN0aW9uKCJzZWN1cml0eSIpIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIlByZWZlcmVuY2VzIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6c2xpZGVycyIsCiAgICAgICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICAgICAgeyBrZXk6ICJub3RpZmljYXRpb25zIiwgaWNvbk5hbWU6ICJiZWxsIiwgYmFkZ2U6IDMsIGFjdGlvbjogKCkgPT4gdGhpcy5zaG93U2VjdGlvbigibm90aWZpY2F0aW9ucyIpIH0sCiAgICAgICAgICAgICAgeyBrZXk6ICJhcHBlYXJhbmNlIiwgaWNvbk5hbWU6ICJwYWxldHRlIiwgYWN0aW9uOiAoKSA9PiB0aGlzLnNob3dTZWN0aW9uKCJhcHBlYXJhbmNlIikgfQogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9KTsKICAgICAgY29udGV4dDIuYXBwdWkuc2V0U2Vjb25kYXJ5TWVudVNlbGVjdGlvbih0aGlzLnNlY3Rpb24pOwogICAgICBjb250ZXh0Mi5hcHB1aS5zZXRDb250ZW50VGFicyhbXSk7CiAgICB9CiAgICBvbkRlYWN0aXZhdGUoKSB7CiAgICAgIGNvbnNvbGUubG9nKCJTZXR0aW5ncyBkZWFjdGl2YXRlZCIpOwogICAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTsKICAgIH0KICAgIGNhbkRlYWN0aXZhdGUoKSB7CiAgICAgIGlmICh0aGlzLmhhc0NoYW5nZXMpIHsKICAgICAgICByZXR1cm4gIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gTGVhdmUgYW55d2F5PyI7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBzaG93U2VjdGlvbihzZWN0aW9uKSB7CiAgICAgIHRoaXMuc2VjdGlvbiA9IHNlY3Rpb247CiAgICAgIHRoaXMuYXBwdWk/LnNldFNlY29uZGFyeU1lbnVTZWxlY3Rpb24oc2VjdGlvbik7CiAgICB9CiAgICBzaW11bGF0ZUNoYW5nZSgpIHsKICAgICAgdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgICAgY29sb3I6ICNhM2EzYTM7CiAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmOwogICAgICAgIH0KICAgICAgICBoMSB7IGNvbG9yOiAjZmFmYWZhOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDI0cHg7IG1hcmdpbi1ib3R0b206IDhweDsgfQogICAgICAgIHAgeyBjb2xvcjogIzczNzM3MzsgbWFyZ2luLWJvdHRvbTogMjRweDsgfQogICAgICAgIC5zZWN0aW9uLW5hbWUgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgICBjb2xvcjogI2ZhZmFmYTsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgfQogICAgICAgIC5hY3Rpb25zIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgfQogICAgICAgIGJ1dHRvbiB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjM2I4MmY2OwogICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIGJ1dHRvbjpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjU2M2ViOwogICAgICAgIH0KICAgICAgICAud2FybmluZyB7CiAgICAgICAgICBjb2xvcjogI2ZiYmYyNDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8aDE+U2V0dGluZ3M8L2gxPgogICAgICA8cD5NYW5hZ2UgeW91ciBhY2NvdW50IGFuZCBhcHBsaWNhdGlvbiBwcmVmZXJlbmNlcy48L3A+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tbmFtZSI+CiAgICAgICAgQ3VycmVudCBzZWN0aW9uOiA8c3Ryb25nPiR7dGhpcy5zZWN0aW9ufTwvc3Ryb25nPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9ucyI+CiAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNpbXVsYXRlQ2hhbmdlKCl9Pk1ha2UgQ2hhbmdlczwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLmhhc0NoYW5nZXMgPyBiMmA8cCBjbGFzcz0id2FybmluZyI+WW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBOYXZpZ2F0aW9uIHdpbGwgcHJvbXB0IGZvciBjb25maXJtYXRpb24uPC9wPmAgOiAiIn0KICAgIGA7CiAgICB9CiAgfTsKICByZXR1cm4gRGVtb1NldHRpbmdzVmlldzIgPSBfY2xhc3NUaGlzOwp9KSgpOwp2YXIgRGVtb1Byb2plY3RzVmlldyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlbW8tcHJvamVjdHMtdmlldyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICB2YXIgRGVtb1Byb2plY3RzVmlldzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9fZXNEZWNvcmF0ZTM2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVtb1Byb2plY3RzVmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICBfX3J1bkluaXRpYWxpemVyczM3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIG9uQWN0aXZhdGUoY29udGV4dDIpIHsKICAgICAgY29udGV4dDIuYXBwdWkuc2V0U2Vjb25kYXJ5TWVudSh7CiAgICAgICAgaGVhZGluZzogIlByb2plY3RzIiwKICAgICAgICBncm91cHM6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIk15IFByb2plY3RzIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICB7IGtleTogIkFjdGl2ZSIsIGljb25OYW1lOiAiZm9sZGVyIiwgYmFkZ2U6IDMsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFjdGl2ZSIpIH0sCiAgICAgICAgICAgICAgeyBrZXk6ICJBcmNoaXZlZCIsIGljb25OYW1lOiAiYXJjaGl2ZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFyY2hpdmVkIikgfSwKICAgICAgICAgICAgICB7IGtleTogIlNoYXJlZCIsIGljb25OYW1lOiAidXNlcnMiLCBiYWRnZTogMiwgYmFkZ2VWYXJpYW50OiAid2FybmluZyIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlNoYXJlZCIpIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIlF1aWNrIEFjdGlvbnMiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp6YXAiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsgdHlwZTogImFjdGlvbiIsIGtleTogIk5ldyBQcm9qZWN0IiwgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyUGx1cyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkNyZWF0ZSBuZXcgcHJvamVjdCIpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiYWN0aW9uIiwga2V5OiAiSW1wb3J0IiwgaWNvbk5hbWU6ICJsdWNpZGU6ZG93bmxvYWQiLCBhY3Rpb246ICgpID0+IGFsZXJ0KCJJbXBvcnQgcHJvamVjdCIpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJsaW5rIiwga2V5OiAiVGVtcGxhdGVzIiwgaWNvbk5hbWU6ICJsdWNpZGU6bGF5b3V0VGVtcGxhdGUiLCBocmVmOiAiaHR0cHM6Ly90ZW1wbGF0ZXMuZXhhbXBsZS5jb20iIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSk7CiAgICAgIGNvbnRleHQyLmFwcHVpLnNldENvbnRlbnRUYWJzKFsKICAgICAgICB7IGtleTogIkdyaWQiLCBpY29uTmFtZTogImx1Y2lkZTpncmlkIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiR3JpZCB2aWV3IikgfSwKICAgICAgICB7IGtleTogIkxpc3QiLCBpY29uTmFtZTogImx1Y2lkZTpsaXN0IiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiTGlzdCB2aWV3IikgfSwKICAgICAgICB7IGtleTogIkJvYXJkIiwgaWNvbk5hbWU6ICJsdWNpZGU6a2FuYmFuIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQm9hcmQgdmlldyIpIH0KICAgICAgXSk7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgIGNvbG9yOiAjYTNhM2EzOwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZjsKICAgICAgICB9CiAgICAgICAgaDEgeyBjb2xvcjogI2ZhZmFmYTsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAyNHB4OyBtYXJnaW4tYm90dG9tOiAyNHB4OyB9CiAgICAgICAgLnByb2plY3RzIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIH0KICAgICAgICAucHJvamVjdCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDMpOwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4yczsKICAgICAgICB9CiAgICAgICAgLnByb2plY3Q6aG92ZXIgewogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuMik7CiAgICAgICAgfQogICAgICAgIC5wcm9qZWN0IGgzIHsgY29sb3I6ICNmYWZhZmE7IG1hcmdpbjogMCAwIDhweCAwOyBmb250LXNpemU6IDE2cHg7IH0KICAgICAgICAucHJvamVjdCBwIHsgY29sb3I6ICM3MzczNzM7IG1hcmdpbjogMDsgZm9udC1zaXplOiAxM3B4OyB9CiAgICAgICAgLmJhZGdlIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgIGJhY2tncm91bmQ6ICMxNDUzMmQ7CiAgICAgICAgICBjb2xvcjogIzRhZGU4MDsKICAgICAgICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGgxPlByb2plY3RzPC9oMT4KICAgICAgPGRpdiBjbGFzcz0icHJvamVjdHMiPgogICAgICAgIDxkaXYgY2xhc3M9InByb2plY3QiPgogICAgICAgICAgPGgzPkZyb250ZW5kIEFwcCA8c3BhbiBjbGFzcz0iYmFkZ2UiPkFjdGl2ZTwvc3Bhbj48L2gzPgogICAgICAgICAgPHA+UmVhY3QtYmFzZWQgZGFzaGJvYXJkIGFwcGxpY2F0aW9uPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByb2plY3QiPgogICAgICAgICAgPGgzPkFQSSBTZXJ2ZXIgPHNwYW4gY2xhc3M9ImJhZGdlIj5BY3RpdmU8L3NwYW4+PC9oMz4KICAgICAgICAgIDxwPk5vZGUuanMgUkVTVCBBUEkgYmFja2VuZDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9qZWN0Ij4KICAgICAgICAgIDxoMz5Nb2JpbGUgQXBwIDxzcGFuIGNsYXNzPSJiYWRnZSI+QWN0aXZlPC9zcGFuPjwvaDM+CiAgICAgICAgICA8cD5SZWFjdCBOYXRpdmUgaU9TL0FuZHJvaWQgYXBwPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByb2plY3QiPgogICAgICAgICAgPGgzPkRvY3VtZW50YXRpb248L2gzPgogICAgICAgICAgPHA+VGVjaG5pY2FsIGRvY3VtZW50YXRpb24gc2l0ZTwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9Qcm9qZWN0c1ZpZXcyID0gX2NsYXNzVGhpczsKfSkoKTsKdmFyIERlbW9UYXNrc1ZpZXcgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZW1vLXRhc2tzLXZpZXciKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgdmFyIERlbW9UYXNrc1ZpZXcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfX2VzRGVjb3JhdGUzNihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlbW9UYXNrc1ZpZXcyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzNyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBvbkFjdGl2YXRlKGNvbnRleHQyKSB7CiAgICAgIGNvbnRleHQyLmFwcHVpLnNldFNlY29uZGFyeU1lbnUoewogICAgICAgIGhlYWRpbmc6ICJUYXNrcyIsCiAgICAgICAgZ3JvdXBzOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJWaWV3cyIsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmV5ZSIsCiAgICAgICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICAgICAgeyBrZXk6ICJBbGwgVGFza3MiLCBpY29uTmFtZTogImxpc3QiLCBiYWRnZTogMTIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFsbCIpIH0sCiAgICAgICAgICAgICAgeyBrZXk6ICJUb2RheSIsIGljb25OYW1lOiAiY2FsZW5kYXIiLCBiYWRnZTogMywgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiVG9kYXkiKSB9LAogICAgICAgICAgICAgIHsga2V5OiAiVXBjb21pbmciLCBpY29uTmFtZTogImNsb2NrIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiVXBjb21pbmciKSB9LAogICAgICAgICAgICAgIHsga2V5OiAiQ29tcGxldGVkIiwgaWNvbk5hbWU6ICJjaGVja0NpcmNsZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkNvbXBsZXRlZCIpIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIkZpbHRlcnMiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmaWx0ZXIiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsgdHlwZTogImhlYWRlciIsIGxhYmVsOiAiUHJpb3JpdHkiIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAibXVsdGlGaWx0ZXIiLCBrZXk6ICJQcmlvcml0eSIsIGljb25OYW1lOiAibHVjaWRlOmZsYWciLCBvcHRpb25zOiBbCiAgICAgICAgICAgICAgICB7IGtleTogImhpZ2giLCBsYWJlbDogIkhpZ2giLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTphbGVydENpcmNsZSIgfSwKICAgICAgICAgICAgICAgIHsga2V5OiAibWVkaXVtIiwgbGFiZWw6ICJNZWRpdW0iLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTptaW51c0NpcmNsZSIgfSwKICAgICAgICAgICAgICAgIHsga2V5OiAibG93IiwgbGFiZWw6ICJMb3ciLCBjaGVja2VkOiBmYWxzZSwgaWNvbk5hbWU6ICJsdWNpZGU6Y2lyY2xlIiB9CiAgICAgICAgICAgICAgXSwgb25DaGFuZ2U6IChrZXlzMikgPT4gY29uc29sZS5sb2coIlByaW9yaXR5IGZpbHRlcjoiLCBrZXlzMikgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJkaXZpZGVyIiB9LAogICAgICAgICAgICAgIHsgdHlwZTogImhlYWRlciIsIGxhYmVsOiAiT3B0aW9ucyIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJmaWx0ZXIiLCBrZXk6ICJTaG93IFN1YnRhc2tzIiwgaWNvbk5hbWU6ICJsdWNpZGU6bGlzdFRyZWUiLCBhY3RpdmU6IHRydWUsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiU2hvdyBzdWJ0YXNrczoiLCBhY3RpdmUpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZmlsdGVyIiwga2V5OiAiU2hvdyBDb21wbGV0ZWQiLCBpY29uTmFtZTogImx1Y2lkZTpjaGVja1NxdWFyZSIsIGFjdGl2ZTogZmFsc2UsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiU2hvdyBjb21wbGV0ZWQ6IiwgYWN0aXZlKSB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJBY3Rpb25zIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6emFwIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJBZGQgVGFzayIsIGljb25OYW1lOiAibHVjaWRlOnBsdXMiLCBhY3Rpb246ICgpID0+IGFsZXJ0KCJBZGQgbmV3IHRhc2siKSB9LAogICAgICAgICAgICAgIHsgdHlwZTogImFjdGlvbiIsIGtleTogIkltcG9ydCBUYXNrcyIsIGljb25OYW1lOiAibHVjaWRlOnVwbG9hZCIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkltcG9ydCB0YXNrcyIpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJDbGVhciBDb21wbGV0ZWQiLCBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLCB2YXJpYW50OiAiZGFuZ2VyIiwgY29uZmlybU1lc3NhZ2U6ICJEZWxldGUgYWxsIGNvbXBsZXRlZCB0YXNrcz8iLCBhY3Rpb246ICgpID0+IGFsZXJ0KCJDbGVhcmVkIGNvbXBsZXRlZCB0YXNrcyIpIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSk7CiAgICAgIGNvbnRleHQyLmFwcHVpLnNldENvbnRlbnRUYWJzKFsKICAgICAgICB7IGtleTogIkxpc3QiLCBpY29uTmFtZTogImx1Y2lkZTpsaXN0IiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiTGlzdCIpIH0sCiAgICAgICAgeyBrZXk6ICJDYWxlbmRhciIsIGljb25OYW1lOiAibHVjaWRlOmNhbGVuZGFyIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQ2FsZW5kYXIiKSB9CiAgICAgIF0pOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICA6aG9zdCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBjb2xvcjogI2EzYTNhMzsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWY7CiAgICAgICAgfQogICAgICAgIGgxIHsgY29sb3I6ICNmYWZhZmE7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMjRweDsgbWFyZ2luLWJvdHRvbTogMjRweDsgfQogICAgICAgIC50YXNrLWxpc3QgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgLnRhc2sgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDMpOwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICB9CiAgICAgICAgLmNoZWNrYm94IHsKICAgICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzUyNTI1MjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB9CiAgICAgICAgLnRhc2stdGV4dCB7IGNvbG9yOiAjZmFmYWZhOyBmbGV4OiAxOyB9CiAgICAgICAgLmR1ZS1kYXRlIHsgY29sb3I6ICM3MzczNzM7IGZvbnQtc2l6ZTogMTJweDsgfQogICAgICAgIC5wcmlvcml0eSB7CiAgICAgICAgICBwYWRkaW5nOiAycHggOHB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIH0KICAgICAgICAucHJpb3JpdHkuaGlnaCB7IGJhY2tncm91bmQ6ICM0NTBhMGE7IGNvbG9yOiAjZjg3MTcxOyB9CiAgICAgICAgLnByaW9yaXR5Lm1lZGl1bSB7IGJhY2tncm91bmQ6ICM0NTFhMDM7IGNvbG9yOiAjZmJiZjI0OyB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxoMT5UYXNrczwvaDE+CiAgICAgIDxkaXYgY2xhc3M9InRhc2stbGlzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0idGFzayI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveCI+PC9kaXY+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGFzay10ZXh0Ij5SZXZpZXcgcHVsbCByZXF1ZXN0ICM0Mjwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJkdWUtZGF0ZSI+VG9kYXk8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0icHJpb3JpdHkgaGlnaCI+SGlnaDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0YXNrIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94Ij48L2Rpdj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YXNrLXRleHQiPlVwZGF0ZSBkb2N1bWVudGF0aW9uPC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImR1ZS1kYXRlIj5Ub21vcnJvdzwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcmlvcml0eSBtZWRpdW0iPk1lZGl1bTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0YXNrIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94Ij48L2Rpdj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YXNrLXRleHQiPldyaXRlIHVuaXQgdGVzdHM8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iZHVlLWRhdGUiPkRlYyAyMDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9UYXNrc1ZpZXcyID0gX2NsYXNzVGhpczsKfSkoKTsKdmFyIGRlbW9GdW5jMjcgPSAoKSA9PiB7CiAgY29uc3QgYXBwQ29uZmlnID0gewogICAgYnJhbmRpbmc6IHsKICAgICAgbG9nb0ljb246ICJsdWNpZGU6Ym94IiwKICAgICAgbG9nb1RleHQ6ICJBY21lIEFwcCIKICAgIH0sCiAgICBhcHBCYXI6IHsKICAgICAgbWVudUl0ZW1zOiBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkZpbGUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgc3VibWVudTogWwogICAgICAgICAgICB7IG5hbWU6ICJOZXcgUHJvamVjdCIsIHNob3J0Y3V0OiAiQ21kK04iLCBpY29uTmFtZTogImZpbGVQbHVzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiTmV3IikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiT3Blbi4uLiIsIHNob3J0Y3V0OiAiQ21kK08iLCBpY29uTmFtZTogImZvbGRlck9wZW4iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiUmVjZW50IFByb2plY3RzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIH0sIHN1Ym1lbnU6IFsKICAgICAgICAgICAgICB7IG5hbWU6ICJteS1hcHAiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIG15LWFwcCIpIH0sCiAgICAgICAgICAgICAgeyBuYW1lOiAiY29tcG9uZW50LWxpYiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4gY29tcG9uZW50LWxpYiIpIH0KICAgICAgICAgICAgXSB9LAogICAgICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICAgICAgeyBuYW1lOiAiU2F2ZSBBbGwiLCBzaG9ydGN1dDogIkNtZCtTIiwgaWNvbk5hbWU6ICJzYXZlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2F2ZSIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJFZGl0IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIHN1Ym1lbnU6IFsKICAgICAgICAgICAgeyBuYW1lOiAiVW5kbyIsIHNob3J0Y3V0OiAiQ21kK1oiLCBpY29uTmFtZTogInVuZG8iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJVbmRvIikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiUmVkbyIsIHNob3J0Y3V0OiAiQ21kK1NoaWZ0K1oiLCBpY29uTmFtZTogInJlZG8iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJSZWRvIikgfSwKICAgICAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgICAgIHsgbmFtZTogIkN1dCIsIHNob3J0Y3V0OiAiQ21kK1giLCBpY29uTmFtZTogInNjaXNzb3JzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQ3V0IikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiQ29weSIsIHNob3J0Y3V0OiAiQ21kK0MiLCBpY29uTmFtZTogImNvcHkiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDb3B5IikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiUGFzdGUiLCBzaG9ydGN1dDogIkNtZCtWIiwgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJQYXN0ZSIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJWaWV3IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIHN1Ym1lbnU6IFsKICAgICAgICAgICAgeyBuYW1lOiAiVG9nZ2xlIFNpZGViYXIiLCBzaG9ydGN1dDogIkNtZCtCIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiVG9nZ2xlIHNpZGViYXIiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJUb2dnbGUgQWN0aXZpdHkgTG9nIiwgc2hvcnRjdXQ6ICJDbWQrU2hpZnQrQSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlRvZ2dsZSBhY3Rpdml0eSIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJIZWxwIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIHN1Ym1lbnU6IFsKICAgICAgICAgICAgeyBuYW1lOiAiRG9jdW1lbnRhdGlvbiIsIGljb25OYW1lOiAiYm9vayIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkRvY3MiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJLZXlib2FyZCBTaG9ydGN1dHMiLCBpY29uTmFtZTogImtleWJvYXJkIiwgc2hvcnRjdXQ6ICJDbWQrLyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNob3J0Y3V0cyIpIH0sCiAgICAgICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgICAgICB7IG5hbWU6ICJBYm91dCIsIGljb25OYW1lOiAiaW5mbyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkFib3V0IikgfQogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXSwKICAgICAgYnJlYWRjcnVtYnM6ICJEYXNoYm9hcmQiLAogICAgICBzaG93V2luZG93Q29udHJvbHM6IHRydWUsCiAgICAgIHNob3dTZWFyY2g6IHRydWUsCiAgICAgIHVzZXI6IHsKICAgICAgICBuYW1lOiAiSmFuZSBTbWl0aCIsCiAgICAgICAgZW1haWw6ICJqYW5lLnNtaXRoQGV4YW1wbGUuY29tIiwKICAgICAgICBzdGF0dXM6ICJvbmxpbmUiCiAgICAgIH0sCiAgICAgIHByb2ZpbGVNZW51SXRlbXM6IFsKICAgICAgICB7IG5hbWU6ICJQcm9maWxlIiwgaWNvbk5hbWU6ICJ1c2VyIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUHJvZmlsZSIpIH0sCiAgICAgICAgeyBuYW1lOiAiQWNjb3VudCBTZXR0aW5ncyIsIGljb25OYW1lOiAic2V0dGluZ3MiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTZXR0aW5ncyIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiSGVscCAmIFN1cHBvcnQiLCBpY29uTmFtZTogImhlbHBDaXJjbGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJIZWxwIikgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7IG5hbWU6ICJTaWduIE91dCIsIGljb25OYW1lOiAibG9nT3V0IiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2lnbiBvdXQiKSB9CiAgICAgIF0KICAgIH0sCiAgICB2aWV3czogWwogICAgICB7CiAgICAgICAgaWQ6ICJkYXNoYm9hcmQiLAogICAgICAgIG5hbWU6ICJEYXNoYm9hcmQiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmhvbWUiLAogICAgICAgIGNvbnRlbnQ6ICJkZW1vLWRhc2hib2FyZC12aWV3IiwKICAgICAgICByb3V0ZTogImRhc2hib2FyZCIKICAgICAgfSwKICAgICAgewogICAgICAgIGlkOiAicHJvamVjdHMiLAogICAgICAgIG5hbWU6ICJQcm9qZWN0cyIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyIiwKICAgICAgICBjb250ZW50OiAiZGVtby1wcm9qZWN0cy12aWV3IiwKICAgICAgICByb3V0ZTogInByb2plY3RzIiwKICAgICAgICBiYWRnZTogMwogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJ0YXNrcyIsCiAgICAgICAgbmFtZTogIlRhc2tzIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjaGVja1NxdWFyZSIsCiAgICAgICAgY29udGVudDogImRlbW8tdGFza3MtdmlldyIsCiAgICAgICAgcm91dGU6ICJ0YXNrcyIsCiAgICAgICAgYmFkZ2U6IDEyCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogInNldHRpbmdzIiwKICAgICAgICBuYW1lOiAiU2V0dGluZ3MiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOnNldHRpbmdzIiwKICAgICAgICBjb250ZW50OiAiZGVtby1zZXR0aW5ncy12aWV3IiwKICAgICAgICByb3V0ZTogInNldHRpbmdzLzpzZWN0aW9uPyIKICAgICAgfQogICAgXSwKICAgIG1haW5NZW51OiB7CiAgICAgIHNlY3Rpb25zOiBbCiAgICAgICAgeyBuYW1lOiAiTWFpbiIsIHZpZXdzOiBbImRhc2hib2FyZCJdIH0sCiAgICAgICAgeyBuYW1lOiAiV29ya3NwYWNlIiwgdmlld3M6IFsicHJvamVjdHMiLCAidGFza3MiXSB9CiAgICAgIF0sCiAgICAgIGJvdHRvbUl0ZW1zOiBbInNldHRpbmdzIl0KICAgIH0sCiAgICBkZWZhdWx0VmlldzogImRhc2hib2FyZCIsCiAgICBib3R0b21CYXI6IHsKICAgICAgdmlzaWJsZTogdHJ1ZSwKICAgICAgd2lkZ2V0czogWwogICAgICAgIHsKICAgICAgICAgIGlkOiAic3RhdHVzIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmFjdGl2aXR5IiwKICAgICAgICAgIGxhYmVsOiAiU3lzdGVtIE9ubGluZSIsCiAgICAgICAgICBzdGF0dXM6ICJzdWNjZXNzIiwKICAgICAgICAgIHRvb2x0aXA6ICJBbGwgc3lzdGVtcyBvcGVyYXRpb25hbCIsCiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBjb25zb2xlLmxvZygiU3RhdHVzIGNsaWNrZWQiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJub3RpZmljYXRpb25zIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmJlbGwiLAogICAgICAgICAgbGFiZWw6ICIzIG5vdGlmaWNhdGlvbnMiLAogICAgICAgICAgc3RhdHVzOiAid2FybmluZyIsCiAgICAgICAgICB0b29sdGlwOiAiWW91IGhhdmUgdW5yZWFkIG5vdGlmaWNhdGlvbnMiLAogICAgICAgICAgb25DbGljazogKCkgPT4gY29uc29sZS5sb2coIk5vdGlmaWNhdGlvbnMgY2xpY2tlZCIpCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogInZlcnNpb24iLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Z2l0QnJhbmNoIiwKICAgICAgICAgIGxhYmVsOiAidjEuMi4zIiwKICAgICAgICAgIHBvc2l0aW9uOiAicmlnaHQiLAogICAgICAgICAgdG9vbHRpcDogIkN1cnJlbnQgdmVyc2lvbiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIGFjdGlvbnM6IFsKICAgICAgICB7CiAgICAgICAgICBpZDogInRlcm1pbmFsIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnRlcm1pbmFsIiwKICAgICAgICAgIHRvb2x0aXA6ICJPcGVuIFRlcm1pbmFsIiwKICAgICAgICAgIHBvc2l0aW9uOiAicmlnaHQiLAogICAgICAgICAgb25DbGljazogKCkgPT4gY29uc29sZS5sb2coIlRlcm1pbmFsIGNsaWNrZWQiKQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIG9uVmlld0NoYW5nZTogKHZpZXdJZCwgdmlldykgPT4gewogICAgICBjb25zb2xlLmxvZyhgVmlldyBjaGFuZ2VkIHRvOiAke3ZpZXdJZH0gKCR7dmlldy5uYW1lfSlgKTsKICAgIH0sCiAgICBvblNlYXJjaDogKHF1ZXJ5KSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJTZWFyY2ggcXVlcnk6IiwgcXVlcnkpOwogICAgfQogIH07CiAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogIGNvbnRhaW5lckVsZW1lbnQuY2xhc3NOYW1lID0gImRlbW8tY29udGFpbmVyIjsKICBjb250YWluZXJFbGVtZW50LnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IjsKICBjb25zdCBhcHB1aUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWVzLWFwcHVpIik7CiAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZChhcHB1aUVsZW1lbnQpOwogIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4gewogICAgYXdhaXQgYXBwdWlFbGVtZW50LnVwZGF0ZUNvbXBsZXRlOwogICAgYXBwdWlFbGVtZW50LmNvbmZpZ3VyZShhcHBDb25maWcpOwogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGFwcHVpRWxlbWVudC5hY3Rpdml0eUxvZy5hZGRNYW55KFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAibG9naW4iLAogICAgICAgICAgdXNlcjogIkphbmUgU21pdGgiLAogICAgICAgICAgbWVzc2FnZTogImxvZ2dlZCBpbiBmcm9tIENocm9tZSBvbiBtYWNPUyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJjcmVhdGUiLAogICAgICAgICAgdXNlcjogIkphbmUgU21pdGgiLAogICAgICAgICAgbWVzc2FnZTogJ2NyZWF0ZWQgcHJvamVjdCAiRnJvbnRlbmQgQXBwIicKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJ1cGRhdGUiLAogICAgICAgICAgdXNlcjogIkpvaG4gRG9lIiwKICAgICAgICAgIG1lc3NhZ2U6ICJ1cGRhdGVkIEFQSSBkb2N1bWVudGF0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogInZpZXciLAogICAgICAgICAgdXNlcjogIkphbmUgU21pdGgiLAogICAgICAgICAgbWVzc2FnZTogInZpZXdlZCBkYXNoYm9hcmQgYW5hbHl0aWNzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImRlbGV0ZSIsCiAgICAgICAgICB1c2VyOiAiQWRtaW4iLAogICAgICAgICAgbWVzc2FnZTogInJlbW92ZWQgZGVwcmVjYXRlZCBlbmRwb2ludCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJjdXN0b20iLAogICAgICAgICAgdXNlcjogIlN5c3RlbSIsCiAgICAgICAgICBtZXNzYWdlOiAic2NoZWR1bGVkIGJhY2t1cCBjb21wbGV0ZWQiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZGF0YWJhc2UiCiAgICAgICAgfQogICAgICBdKTsKICAgIH0sIDUwMCk7CiAgICBhcHB1aUVsZW1lbnQudmlld0NoYW5nZWQkLnN1YnNjcmliZSgoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coIlZpZXcgY2hhbmdlZCBldmVudDoiLCBldmVudCk7CiAgICAgIGFwcHVpRWxlbWVudC5zZXRCcmVhZGNydW1icyhldmVudC52aWV3Lm5hbWUpOwogICAgfSk7CiAgICBhcHB1aUVsZW1lbnQudmlld0xpZmVjeWNsZSQuc3Vic2NyaWJlKChldmVudCkgPT4gewogICAgICBjb25zb2xlLmxvZygiTGlmZWN5Y2xlIGV2ZW50OiIsIGV2ZW50LnR5cGUsIGV2ZW50LnZpZXdJZCk7CiAgICB9KTsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBhcHB1aUVsZW1lbnQuc2V0TWFpbk1lbnVCYWRnZSgidGFza3MiLCAxNSk7CiAgICAgIGFwcHVpRWxlbWVudC5hY3Rpdml0eUxvZy5hZGQoewogICAgICAgIHR5cGU6ICJ1cGRhdGUiLAogICAgICAgIHVzZXI6ICJTeXN0ZW0iLAogICAgICAgIG1lc3NhZ2U6ICJuZXcgdGFza3MgYWRkZWQiCiAgICAgIH0pOwogICAgfSwgNWUzKTsKICB9LCAwKTsKICByZXR1cm4gYjJgCiAgICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgICAgJHtjb250YWluZXJFbGVtZW50fQogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS92aWV3LnJlZ2lzdHJ5LmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBWaWV3UmVnaXN0cnkgPSBjbGFzcyB7CiAgdmlld3MgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIGluc3RhbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY3VycmVudFZpZXdJZCA9IG51bGw7CiAgYXBwdWkgPSBudWxsOwogIC8qKgogICAqIFNldCB0aGUgYXBwdWkgcmVmZXJlbmNlIGZvciB2aWV3IGFjdGl2YXRpb24gY29udGV4dAogICAqLwogIHNldEFwcHVpUmVmKGFwcHVpKSB7CiAgICB0aGlzLmFwcHVpID0gYXBwdWk7CiAgfQogIC8qKgogICAqIFJlZ2lzdGVyIGEgc2luZ2xlIHZpZXcKICAgKi8KICByZWdpc3Rlcih2aWV3KSB7CiAgICBpZiAodGhpcy52aWV3cy5oYXModmlldy5pZCkpIHsKICAgICAgY29uc29sZS53YXJuKGBWaWV3IHdpdGggaWQgIiR7dmlldy5pZH0iIGFscmVhZHkgcmVnaXN0ZXJlZC4gT3ZlcndyaXRpbmcuYCk7CiAgICB9CiAgICB0aGlzLnZpZXdzLnNldCh2aWV3LmlkLCB2aWV3KTsKICB9CiAgLyoqCiAgICogUmVnaXN0ZXIgbXVsdGlwbGUgdmlld3MKICAgKi8KICByZWdpc3RlckFsbCh2aWV3cykgewogICAgdmlld3MuZm9yRWFjaCgodmlldykgPT4gdGhpcy5yZWdpc3Rlcih2aWV3KSk7CiAgfQogIC8qKgogICAqIEdldCBhIHZpZXcgZGVmaW5pdGlvbiBieSBJRAogICAqLwogIGdldCh2aWV3SWQpIHsKICAgIHJldHVybiB0aGlzLnZpZXdzLmdldCh2aWV3SWQpOwogIH0KICAvKioKICAgKiBHZXQgYWxsIHJlZ2lzdGVyZWQgdmlldyBJRHMKICAgKi8KICBnZXRWaWV3SWRzKCkgewogICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy52aWV3cy5rZXlzKCkpOwogIH0KICAvKioKICAgKiBHZXQgYWxsIHZpZXdzCiAgICovCiAgZ2V0QWxsKCkgewogICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy52aWV3cy52YWx1ZXMoKSk7CiAgfQogIC8qKgogICAqIEdldCByb3V0ZSBmb3IgYSB2aWV3CiAgICovCiAgZ2V0Um91dGUodmlld0lkKSB7CiAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3cy5nZXQodmlld0lkKTsKICAgIHJldHVybiB2aWV3Py5yb3V0ZSB8fCB2aWV3Py5pZCB8fCAiIjsKICB9CiAgLyoqCiAgICogRmluZCB2aWV3IGJ5IHJvdXRlIChzdXBwb3J0cyBwYXJhbWV0ZXJpemVkIHJvdXRlcyBsaWtlICdzZXR0aW5ncy86c2VjdGlvbicpCiAgICovCiAgZmluZEJ5Um91dGUocm91dGUpIHsKICAgIGZvciAoY29uc3QgdmlldyBvZiB0aGlzLnZpZXdzLnZhbHVlcygpKSB7CiAgICAgIGNvbnN0IHZpZXdSb3V0ZSA9IHZpZXcucm91dGUgfHwgdmlldy5pZDsKICAgICAgY29uc3QgcGFyYW1zMiA9IHRoaXMubWF0Y2hSb3V0ZSh2aWV3Um91dGUsIHJvdXRlKTsKICAgICAgaWYgKHBhcmFtczIgIT09IG51bGwpIHsKICAgICAgICByZXR1cm4geyB2aWV3LCBwYXJhbXM6IHBhcmFtczIgfTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHZvaWQgMDsKICB9CiAgLyoqCiAgICogTWF0Y2ggYSByb3V0ZSBwYXR0ZXJuIGFnYWluc3QgYW4gYWN0dWFsIHJvdXRlCiAgICogUmV0dXJucyBwYXJhbXMgaWYgbWF0Y2hlZCwgbnVsbCBvdGhlcndpc2UKICAgKi8KICBtYXRjaFJvdXRlKHBhdHRlcm4sIHJvdXRlKSB7CiAgICBjb25zdCBwYXR0ZXJuUGFydHMgPSBwYXR0ZXJuLnNwbGl0KCIvIik7CiAgICBjb25zdCByb3V0ZVBhcnRzID0gcm91dGUuc3BsaXQoIi8iKTsKICAgIGNvbnN0IGhhc09wdGlvbmFsUGFyYW0gPSBwYXR0ZXJuUGFydHMubGVuZ3RoID4gMCAmJiBwYXR0ZXJuUGFydHNbcGF0dGVyblBhcnRzLmxlbmd0aCAtIDFdLmVuZHNXaXRoKCI/Iik7CiAgICBpZiAoaGFzT3B0aW9uYWxQYXJhbSkgewogICAgICBpZiAocm91dGVQYXJ0cy5sZW5ndGggPCBwYXR0ZXJuUGFydHMubGVuZ3RoIC0gMSB8fCByb3V0ZVBhcnRzLmxlbmd0aCA+IHBhdHRlcm5QYXJ0cy5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfSBlbHNlIGlmIChwYXR0ZXJuUGFydHMubGVuZ3RoICE9PSByb3V0ZVBhcnRzLmxlbmd0aCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHBhcmFtczIgPSB7fTsKICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHBhdHRlcm5QYXJ0cy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGxldCBwYXJ0ID0gcGF0dGVyblBhcnRzW2kxMV07CiAgICAgIGNvbnN0IGlzT3B0aW9uYWwgPSBwYXJ0LmVuZHNXaXRoKCI/Iik7CiAgICAgIGlmIChpc09wdGlvbmFsKSB7CiAgICAgICAgcGFydCA9IHBhcnQuc2xpY2UoMCwgLTEpOwogICAgICB9CiAgICAgIGlmIChwYXJ0LnN0YXJ0c1dpdGgoIjoiKSkgewogICAgICAgIGNvbnN0IHBhcmFtTmFtZSA9IHBhcnQuc2xpY2UoMSk7CiAgICAgICAgaWYgKHJvdXRlUGFydHNbaTExXSAhPT0gdm9pZCAwKSB7CiAgICAgICAgICBwYXJhbXMyW3BhcmFtTmFtZV0gPSByb3V0ZVBhcnRzW2kxMV07CiAgICAgICAgfSBlbHNlIGlmICghaXNPcHRpb25hbCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHJvdXRlUGFydHNbaTExXSAhPT0gcGFydCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcGFyYW1zMjsKICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgbmF2aWdhdGlvbiBhd2F5IGZyb20gY3VycmVudCB2aWV3IGlzIGFsbG93ZWQKICAgKi8KICBhc3luYyBjYW5MZWF2ZUN1cnJlbnRWaWV3KCkgewogICAgaWYgKCF0aGlzLmN1cnJlbnRWaWV3SWQpCiAgICAgIHJldHVybiB0cnVlOwogICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlcy5nZXQodGhpcy5jdXJyZW50Vmlld0lkKTsKICAgIGlmICghaW5zdGFuY2UpCiAgICAgIHJldHVybiB0cnVlOwogICAgY29uc3QgbGlmZWN5Y2xlID0gaW5zdGFuY2U7CiAgICBpZiAodHlwZW9mIGxpZmVjeWNsZS5jYW5EZWFjdGl2YXRlID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIHJldHVybiBhd2FpdCBsaWZlY3ljbGUuY2FuRGVhY3RpdmF0ZSgpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQogIC8qKgogICAqIEFjdGl2YXRlIGEgdmlldyAtIGhhbmRsZXMgY2FjaGluZywgbGlmZWN5Y2xlLCBhbmQgcmVuZGVyaW5nCiAgICovCiAgYXN5bmMgYWN0aXZhdGVWaWV3KHZpZXdJZCwgY29udGFpbmVyLCBwYXJhbXMyKSB7CiAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3cy5nZXQodmlld0lkKTsKICAgIGlmICghdmlldykgewogICAgICBjb25zb2xlLmVycm9yKGBWaWV3ICIke3ZpZXdJZH0iIG5vdCBmb3VuZCBpbiByZWdpc3RyeWApOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHNob3VsZENhY2hlID0gdmlldy5jYWNoZSAhPT0gZmFsc2U7CiAgICBpZiAodGhpcy5jdXJyZW50Vmlld0lkICYmIHRoaXMuY3VycmVudFZpZXdJZCAhPT0gdmlld0lkKSB7CiAgICAgIGF3YWl0IHRoaXMuZGVhY3RpdmF0ZVZpZXcodGhpcy5jdXJyZW50Vmlld0lkKTsKICAgIH0KICAgIGxldCBlbGVtZW50NCA9IHNob3VsZENhY2hlID8gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCkgOiB2b2lkIDA7CiAgICBpZiAoZWxlbWVudDQpIHsKICAgICAgZWxlbWVudDQuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgfSBlbHNlIHsKICAgICAgZWxlbWVudDQgPSBhd2FpdCB0aGlzLmNyZWF0ZVZpZXdFbGVtZW50KHZpZXcpOwogICAgICBpZiAoIWVsZW1lbnQ0KSB7CiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBlbGVtZW50IGZvciB2aWV3ICIke3ZpZXdJZH0iYCk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQ0KTsKICAgICAgaWYgKHNob3VsZENhY2hlKSB7CiAgICAgICAgdGhpcy5pbnN0YW5jZXMuc2V0KHZpZXdJZCwgZWxlbWVudDQpOwogICAgICB9CiAgICB9CiAgICB0aGlzLmN1cnJlbnRWaWV3SWQgPSB2aWV3SWQ7CiAgICBhd2FpdCB0aGlzLmNhbGxPbkFjdGl2YXRlKGVsZW1lbnQ0LCB2aWV3SWQsIHBhcmFtczIpOwogICAgcmV0dXJuIGVsZW1lbnQ0OwogIH0KICAvKioKICAgKiBEZWFjdGl2YXRlIGEgdmlldyAoaGlkZSBhbmQgY2FsbCBsaWZlY3ljbGUgaG9vaykKICAgKi8KICBhc3luYyBkZWFjdGl2YXRlVmlldyh2aWV3SWQpIHsKICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCk7CiAgICBpZiAoIWluc3RhbmNlKQogICAgICByZXR1cm47CiAgICBjb25zdCBsaWZlY3ljbGUgPSBpbnN0YW5jZTsKICAgIGlmICh0eXBlb2YgbGlmZWN5Y2xlLm9uRGVhY3RpdmF0ZSA9PT0gImZ1bmN0aW9uIikgewogICAgICBhd2FpdCBsaWZlY3ljbGUub25EZWFjdGl2YXRlKCk7CiAgICB9CiAgICBpbnN0YW5jZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogIH0KICAvKioKICAgKiBDcmVhdGUgYSB2aWV3IGVsZW1lbnQgZnJvbSBpdHMgZGVmaW5pdGlvbiAoc3VwcG9ydHMgYXN5bmMgY29udGVudCkKICAgKi8KICBhc3luYyBjcmVhdGVWaWV3RWxlbWVudCh2aWV3KSB7CiAgICBsZXQgY29udGVudDMgPSB2aWV3LmNvbnRlbnQ7CiAgICBpZiAodHlwZW9mIGNvbnRlbnQzID09PSAiZnVuY3Rpb24iICYmICEoY29udGVudDMucHJvdG90eXBlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpICYmIGNvbnRlbnQzLmNvbnN0cnVjdG9yLm5hbWUgPT09ICJBc3luY0Z1bmN0aW9uIikgewogICAgICB0cnkgewogICAgICAgIGNvbnRlbnQzID0gYXdhaXQgY29udGVudDMoKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbG9hZCBhc3luYyBjb250ZW50IGZvciB2aWV3ICIke3ZpZXcuaWR9IjpgLCBlcnJvcik7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIGxldCBlbGVtZW50NDsKICAgIGlmICh0eXBlb2YgY29udGVudDMgPT09ICJzdHJpbmciKSB7CiAgICAgIGVsZW1lbnQ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjb250ZW50Myk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZW50MyA9PT0gImZ1bmN0aW9uIikgewogICAgICBpZiAoY29udGVudDMucHJvdG90eXBlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHsKICAgICAgICBlbGVtZW50NCA9IG5ldyBjb250ZW50MygpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9ICJ2aWV3LWNvbnRlbnQtd3JhcHBlciI7CiAgICAgICAgd3JhcHBlci5zdHlsZS5jc3NUZXh0ID0gImRpc3BsYXk6IGNvbnRlbnRzOyI7CiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBjb250ZW50MygpOwogICAgICAgIEQodGVtcGxhdGUsIHdyYXBwZXIpOwogICAgICAgIGVsZW1lbnQ0ID0gd3JhcHBlcjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBjb250ZW50IHR5cGUgZm9yIHZpZXcgIiR7dmlldy5pZH0iYCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgZWxlbWVudDQuZGF0YXNldC52aWV3SWQgPSB2aWV3LmlkOwogICAgcmV0dXJuIGVsZW1lbnQ0OwogIH0KICAvKioKICAgKiBDYWxsIG9uQWN0aXZhdGUgbGlmZWN5Y2xlIGhvb2sgb24gYSB2aWV3IGVsZW1lbnQKICAgKi8KICBhc3luYyBjYWxsT25BY3RpdmF0ZShlbGVtZW50NCwgdmlld0lkLCBwYXJhbXMyKSB7CiAgICBjb25zdCBsaWZlY3ljbGUgPSBlbGVtZW50NDsKICAgIGlmICh0eXBlb2YgbGlmZWN5Y2xlLm9uQWN0aXZhdGUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgY29uc3QgY29udGV4dDIgPSB7CiAgICAgICAgYXBwdWk6IHRoaXMuYXBwdWksCiAgICAgICAgdmlld0lkLAogICAgICAgIHBhcmFtczogcGFyYW1zMgogICAgICB9OwogICAgICBhd2FpdCBsaWZlY3ljbGUub25BY3RpdmF0ZShjb250ZXh0Mik7CiAgICB9CiAgfQogIC8qKgogICAqIExlZ2FjeSBtZXRob2QgLSByZW5kZXJzIHZpZXcgd2l0aG91dCBjYWNoaW5nCiAgICogQGRlcHJlY2F0ZWQgVXNlIGFjdGl2YXRlVmlldyBpbnN0ZWFkCiAgICovCiAgcmVuZGVyVmlldyh2aWV3SWQsIGNvbnRhaW5lcikgewogICAgY29uc3QgdmlldyA9IHRoaXMudmlld3MuZ2V0KHZpZXdJZCk7CiAgICBpZiAoIXZpZXcpIHsKICAgICAgY29uc29sZS5lcnJvcihgVmlldyAiJHt2aWV3SWR9IiBub3QgZm91bmQgaW4gcmVnaXN0cnlgKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gIiI7CiAgICBsZXQgZWxlbWVudDQ7CiAgICBjb25zdCBjb250ZW50MyA9IHZpZXcuY29udGVudDsKICAgIGlmICh0eXBlb2YgY29udGVudDMgPT09ICJzdHJpbmciKSB7CiAgICAgIGVsZW1lbnQ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjb250ZW50Myk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZW50MyA9PT0gImZ1bmN0aW9uIikgewogICAgICBpZiAoY29udGVudDMucHJvdG90eXBlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHsKICAgICAgICBlbGVtZW50NCA9IG5ldyBjb250ZW50MygpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9ICJ2aWV3LWNvbnRlbnQtd3JhcHBlciI7CiAgICAgICAgd3JhcHBlci5zdHlsZS5jc3NUZXh0ID0gImRpc3BsYXk6IGNvbnRlbnRzOyI7CiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBjb250ZW50MygpOwogICAgICAgIEQodGVtcGxhdGUsIHdyYXBwZXIpOwogICAgICAgIGVsZW1lbnQ0ID0gd3JhcHBlcjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBjb250ZW50IHR5cGUgZm9yIHZpZXcgIiR7dmlld0lkfSJgKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudDQpOwogICAgdGhpcy5pbnN0YW5jZXMuc2V0KHZpZXdJZCwgZWxlbWVudDQpOwogICAgdGhpcy5jdXJyZW50Vmlld0lkID0gdmlld0lkOwogICAgcmV0dXJuIGVsZW1lbnQ0OwogIH0KICAvKioKICAgKiBHZXQgY3VycmVudGx5IGFjdGl2ZSB2aWV3IElECiAgICovCiAgZ2V0Q3VycmVudFZpZXdJZCgpIHsKICAgIHJldHVybiB0aGlzLmN1cnJlbnRWaWV3SWQ7CiAgfQogIC8qKgogICAqIEdldCBjYWNoZWQgaW5zdGFuY2Ugb2YgYSB2aWV3CiAgICovCiAgZ2V0SW5zdGFuY2Uodmlld0lkKSB7CiAgICByZXR1cm4gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCk7CiAgfQogIC8qKgogICAqIENsZWFyIGEgc3BlY2lmaWMgY2FjaGVkIGluc3RhbmNlCiAgICovCiAgY2xlYXJJbnN0YW5jZSh2aWV3SWQpIHsKICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCk7CiAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UucGFyZW50Tm9kZSkgewogICAgICBpbnN0YW5jZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGluc3RhbmNlKTsKICAgIH0KICAgIHRoaXMuaW5zdGFuY2VzLmRlbGV0ZSh2aWV3SWQpOwogICAgaWYgKHRoaXMuY3VycmVudFZpZXdJZCA9PT0gdmlld0lkKSB7CiAgICAgIHRoaXMuY3VycmVudFZpZXdJZCA9IG51bGw7CiAgICB9CiAgfQogIC8qKgogICAqIENsZWFyIGFsbCBpbnN0YW5jZXMKICAgKi8KICBjbGVhckluc3RhbmNlcygpIHsKICAgIGZvciAoY29uc3QgW3ZpZXdJZCwgaW5zdGFuY2VdIG9mIHRoaXMuaW5zdGFuY2VzKSB7CiAgICAgIGlmIChpbnN0YW5jZS5wYXJlbnROb2RlKSB7CiAgICAgICAgaW5zdGFuY2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpbnN0YW5jZSk7CiAgICAgIH0KICAgIH0KICAgIHRoaXMuaW5zdGFuY2VzLmNsZWFyKCk7CiAgICB0aGlzLmN1cnJlbnRWaWV3SWQgPSBudWxsOwogIH0KICAvKioKICAgKiBVbnJlZ2lzdGVyIGEgdmlldwogICAqLwogIHVucmVnaXN0ZXIodmlld0lkKSB7CiAgICB0aGlzLmNsZWFySW5zdGFuY2Uodmlld0lkKTsKICAgIHJldHVybiB0aGlzLnZpZXdzLmRlbGV0ZSh2aWV3SWQpOwogIH0KICAvKioKICAgKiBDbGVhciB0aGUgcmVnaXN0cnkKICAgKi8KICBjbGVhcigpIHsKICAgIHRoaXMudmlld3MuY2xlYXIoKTsKICAgIHRoaXMuY2xlYXJJbnN0YW5jZXMoKTsKICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgYSB2aWV3IGlzIHJlZ2lzdGVyZWQKICAgKi8KICBoYXModmlld0lkKSB7CiAgICByZXR1cm4gdGhpcy52aWV3cy5oYXModmlld0lkKTsKICB9CiAgLyoqCiAgICogR2V0IHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJlZCB2aWV3cwogICAqLwogIGdldCBzaXplKCkgewogICAgcmV0dXJuIHRoaXMudmlld3Muc2l6ZTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1tYWlubWVudS9kZWVzLWFwcHVpLW1haW5tZW51LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMjggPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAuZGVtby1tYWlubWVudS1jb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGJhY2tncm91bmQ6ICMxYTFhMWE7CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIH0KICAgIC5kZW1vLW1haW5tZW51LWNvbnRhaW5lciAuc3BhY2VyIHsKICAgICAgZmxleDogMTsKICAgICAgYmFja2dyb3VuZDogIzBmMGYwZjsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tbWFpbm1lbnUtY29udGFpbmVyIj4KICAgIDxkZWVzLWFwcHVpLW1haW5tZW51CiAgICAgIC5sb2dvSWNvbj0keyJsdWNpZGU6Ym94In0KICAgICAgLmxvZ29UZXh0PSR7IkFjbWUgQXBwIn0KICAgICAgLm1lbnVHcm91cHM9JHtbCiAgewogICAgdGFiczogWwogICAgICB7IGtleTogIkRhc2hib2FyZCIsIGljb25OYW1lOiAibHVjaWRlOmhvbWUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJEYXNoYm9hcmQiKSB9LAogICAgICB7IGtleTogIkluYm94IiwgaWNvbk5hbWU6ICJsdWNpZGU6aW5ib3giLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJJbmJveCIpIH0KICAgIF0KICB9LAogIHsKICAgIG5hbWU6ICJXb3Jrc3BhY2UiLAogICAgdGFiczogWwogICAgICB7IGtleTogIlByb2plY3RzIiwgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUHJvamVjdHMiKSB9LAogICAgICB7IGtleTogIlRhc2tzIiwgaWNvbk5hbWU6ICJsdWNpZGU6Y2hlY2tTcXVhcmUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJUYXNrcyIpIH0sCiAgICAgIHsga2V5OiAiRG9jdW1lbnRzIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVRleHQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJEb2N1bWVudHMiKSB9CiAgICBdCiAgfSwKICB7CiAgICBuYW1lOiAiQW5hbHl0aWNzIiwKICAgIHRhYnM6IFsKICAgICAgeyBrZXk6ICJSZXBvcnRzIiwgaWNvbk5hbWU6ICJsdWNpZGU6YmFyQ2hhcnQzIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUmVwb3J0cyIpIH0sCiAgICAgIHsga2V5OiAiSW5zaWdodHMiLCBpY29uTmFtZTogImx1Y2lkZTpsaWdodGJ1bGIiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJJbnNpZ2h0cyIpIH0KICAgIF0KICB9Cl19CiAgICAgIC5ib3R0b21UYWJzPSR7WwogIHsga2V5OiAiU2V0dGluZ3MiLCBpY29uTmFtZTogImx1Y2lkZTpzZXR0aW5ncyIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlNldHRpbmdzIikgfSwKICB7IGtleTogIkhlbHAiLCBpY29uTmFtZTogImx1Y2lkZTpoZWxwQ2lyY2xlIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiSGVscCIpIH0KXX0KICAgID48L2RlZXMtYXBwdWktbWFpbm1lbnU+CiAgICA8ZGl2IGNsYXNzPSJzcGFjZXIiPjwvZGl2PgogIDwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktbWFpbm1lbnUvZGVlcy1hcHB1aS1tYWlubWVudS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUzNyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMzggPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aU1haW5tZW51ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hcHB1aS1tYWlubWVudSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2xvZ29JY29uX2RlY29yYXRvcnM7CiAgbGV0IF9sb2dvSWNvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xvZ29JY29uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sb2dvVGV4dF9kZWNvcmF0b3JzOwogIGxldCBfbG9nb1RleHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sb2dvVGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVudUdyb3Vwc19kZWNvcmF0b3JzOwogIGxldCBfbWVudUdyb3Vwc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JvdHRvbVRhYnNfZGVjb3JhdG9yczsKICBsZXQgX2JvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib3R0b21UYWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJzX2RlY29yYXRvcnM7CiAgbGV0IF90YWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGFic19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUYWJfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbGxhcHNlZF9kZWNvcmF0b3JzOwogIGxldCBfY29sbGFwc2VkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNBcHB1aU1haW5tZW51MiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2xvZ29JY29uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbG9nb1RleHRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tZW51R3JvdXBzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9ib3R0b21UYWJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfY29sbGFwc2VkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMzcodGhpcywgbnVsbCwgX2xvZ29JY29uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxvZ29JY29uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsb2dvSWNvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sb2dvSWNvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubG9nb0ljb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbG9nb0ljb25faW5pdGlhbGl6ZXJzLCBfbG9nb0ljb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNyh0aGlzLCBudWxsLCBfbG9nb1RleHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibG9nb1RleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxvZ29UZXh0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxvZ29UZXh0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sb2dvVGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sb2dvVGV4dF9pbml0aWFsaXplcnMsIF9sb2dvVGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM3KHRoaXMsIG51bGwsIF9tZW51R3JvdXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1lbnVHcm91cHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVHcm91cHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVudUdyb3Vwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWVudUdyb3VwcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51R3JvdXBzX2luaXRpYWxpemVycywgX21lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNyh0aGlzLCBudWxsLCBfYm90dG9tVGFic19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJib3R0b21UYWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJib3R0b21UYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJvdHRvbVRhYnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJvdHRvbVRhYnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYm90dG9tVGFic19pbml0aWFsaXplcnMsIF9ib3R0b21UYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzcodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM3KHRoaXMsIG51bGwsIF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFRhYiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRUYWIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRUYWIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVGFiID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzcodGhpcywgbnVsbCwgX2NvbGxhcHNlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2xsYXBzZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb2xsYXBzZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbGxhcHNlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQXBwdWlNYWlubWVudTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI4OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI2xvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9sb2dvSWNvbl9pbml0aWFsaXplcnMsICIiKTsKICAgIC8vIElOU1RBTkNFCiAgICAvLyBMb2dvIHByb3BlcnRpZXMKICAgIGdldCBsb2dvSWNvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbG9nb0ljb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2xvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbG9nb1RleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9sb2dvSWNvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2xvZ29UZXh0X2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBsb2dvVGV4dCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbG9nb1RleHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2xvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWVudUdyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2xvZ29UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOCh0aGlzLCBfbWVudUdyb3Vwc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAvLyBNZW51IGdyb3VwcyAobmV3IHdheSkKICAgIGdldCBtZW51R3JvdXBzKCkgewogICAgICByZXR1cm4gdGhpcy4jbWVudUdyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1lbnVHcm91cHModmFsdWUyKSB7CiAgICAgIHRoaXMuI21lbnVHcm91cHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNib3R0b21UYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzOCh0aGlzLCBfbWVudUdyb3Vwc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2JvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgLy8gQm90dG9tIHRhYnMgKHBpbm5lZCB0byBib3R0b20pCiAgICBnZXQgYm90dG9tVGFicygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2JvdHRvbVRhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBib3R0b21UYWJzKHZhbHVlMikgewogICAgICB0aGlzLiNib3R0b21UYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2JvdHRvbVRhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF90YWJzX2luaXRpYWxpemVycywgW10pKTsKICAgIC8vIExlZ2FjeSB0YWJzIHByb3BlcnR5IChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkKICAgIGdldCB0YWJzKCkgewogICAgICByZXR1cm4gdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhYnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZFRhYl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9zZWxlY3RlZFRhYl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHNlbGVjdGVkVGFiKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZFRhYih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9zZWxlY3RlZFRhYl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2NvbGxhcHNlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgY29sbGFwc2VkKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sbGFwc2VkKHZhbHVlMikgewogICAgICB0aGlzLiNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1tZW51LXdpZHRoLWV4cGFuZGVkOiAyMDBweDsKICAgICAgICAtLW1lbnUtd2lkdGgtY29sbGFwc2VkOiA1NnB4OwogICAgICAgIC0tdG9vbHRpcC1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxODE4MWIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICAtLXRvb2x0aXAtZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMxODE4MWIiKX07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLm1haW5Db250YWluZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NiIsICIjY2NjIil9OwogICAgICAgIHotaW5kZXg6ICR7ekluZGV4TGF5ZXJzLmZpeGVkLmFwcEJhcn07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogdmFyKC0tbWVudS13aWR0aC1leHBhbmRlZCk7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU1ZTUiLCAiIzFhMWExYSIpfTsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHNhbnMtc2VyaWY7CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC4yNXMgZWFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tYWluQ29udGFpbmVyIHsKICAgICAgICB3aWR0aDogdmFyKC0tbWVudS13aWR0aC1jb2xsYXBzZWQpOwogICAgICB9CgogICAgICAvKiBGbG9hdGluZyBjb2xsYXBzZSB0b2dnbGUgYnV0dG9uICovCiAgICAgIC5jb2xsYXBzZS10b2dnbGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogLTEycHg7CiAgICAgICAgdG9wOiAyNHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU1ZTUiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzM3MzczIiwgIiNhMWExYWEiKX07CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzZS10b2dnbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMzZjNmNDYiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGEwYTBhIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KDpob3ZlcikgLmNvbGxhcHNlLXRvZ2dsZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbGxhcHNlLXRvZ2dsZSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgLyogTG9nbyBTZWN0aW9uICovCiAgICAgIC5sb2dvU2VjdGlvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTBweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgcGFkZGluZzogMCAxNHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTVlNSIsICIjMWExYTFhIil9OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5sb2dvU2VjdGlvbiAubG9nb0ljb24gewogICAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmxvZ29TZWN0aW9uIC5sb2dvVGV4dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIHdpZHRoIDAuMjVzIGVhc2U7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubG9nb1NlY3Rpb24gewogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZ2FwOiAwOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmxvZ29TZWN0aW9uIC5sb2dvVGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogTWlkZGxlIFNlY3Rpb24gKHNjcm9sbGFibGUpICovCiAgICAgIC5tZW51U2VjdGlvbiB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xNSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMjUpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkiKX07CiAgICAgIH0KCiAgICAgIC8qIE1lbnUgR3JvdXAgKi8KICAgICAgLm1lbnVHcm91cCB7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICB9CgogICAgICAubWVudUdyb3VwOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlciB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHggNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzczNzM3MyIsICIjNzM3MzczIil9OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgbWF4LWhlaWdodCAwLjI1cyBlYXNlOwogICAgICAgIG1heC1oZWlnaHQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuZ3JvdXBIZWFkZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgbWF4LWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLmdyb3VwVGFicyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMnB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVHcm91cCB7CiAgICAgICAgcGFkZGluZzogMCA0cHg7CiAgICAgIH0KCiAgICAgIC8qIFRhYiBJdGVtICovCiAgICAgIC50YWIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzUyNTI1MiIsICIjYTNhM2EzIil9OwogICAgICB9CgogICAgICAudGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA0KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzI2MjYyNiIsICIjZTVlNWU1Iil9OwogICAgICB9CgogICAgICAudGFiOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgfQoKICAgICAgLnRhYi5zZWxlY3RlZFRhYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLnRhYi5zZWxlY3RlZFRhYjo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgd2lkdGg6IDNweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAwIDJweCAycHggMDsKICAgICAgfQoKICAgICAgLnRhYiBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBvcGFjaXR5OiAwLjg1OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAudGFiLnNlbGVjdGVkVGFiIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRhYiAudGFiTGFiZWwgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCB3aWR0aCAwLjI1cyBlYXNlOwogICAgICB9CgogICAgICAvKiBDb2xsYXBzZWQgdGFiIHN0eWxlcyAqLwogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLnRhYiB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICBnYXA6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAudGFiIC50YWJMYWJlbCB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAudGFiLnNlbGVjdGVkVGFiOjpiZWZvcmUgewogICAgICAgIGxlZnQ6IC00cHg7CiAgICAgIH0KCiAgICAgIC8qIFRvb2x0aXAgZm9yIGNvbGxhcHNlZCBzdGF0ZSAqLwogICAgICAudGFiLXRvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAxMDAlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBtYXJnaW4tbGVmdDogMTJweDsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10b29sdGlwLWJnKTsKICAgICAgICBjb2xvcjogdmFyKC0tdG9vbHRpcC1mZyk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2U7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgICAgfQoKICAgICAgLnRhYi10b29sdGlwOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtNHB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLXRvb2x0aXAtYmcpOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLnRhYjpob3ZlciAudGFiLXRvb2x0aXAgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogMXM7CiAgICAgIH0KCiAgICAgIC8qIEJhZGdlIHN0eWxlcyAqLwogICAgICAuYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbWluLXdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBwYWRkaW5nOiAwIDZweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgIH0KCiAgICAgIC5iYWRnZS5kZWZhdWx0IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjMjcyNzJhIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNmM2Y0NiIsICIjYTFhMWFhIil9OwogICAgICB9CgogICAgICAuYmFkZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkY2ZjZTciLCAiIzE0NTMyZCIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxNjY1MzQiLCAiIzRhZGU4MCIpfTsKICAgICAgfQoKICAgICAgLmJhZGdlLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmVmM2M3IiwgIiM0NTFhMDMiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTI0MDBlIiwgIiNmYmJmMjQiKX07CiAgICAgIH0KCiAgICAgIC5iYWRnZS5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZWUyZTIiLCAiIzQ1MGEwYSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5OTFiMWIiLCAiI2Y4NzE3MSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5iYWRnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogQm90dG9tIFNlY3Rpb24gKi8KICAgICAgLmJvdHRvbVNlY3Rpb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU1ZTUiLCAiIzFhMWExYSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuYm90dG9tU2VjdGlvbiB7CiAgICAgICAgcGFkZGluZzogOHB4IDRweDsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuZ2V0QWxsVGFicygpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im1haW5Db250YWluZXIiIEBjb250ZXh0bWVudT0keyhldmVudEFyZykgPT4gewogICAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudEFyZywgW3sKICAgICAgICAgIG5hbWU6ICJhcHAgc2V0dGluZ3MiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgaWNvbk5hbWU6ICJnZWFyIgogICAgICAgIH1dKTsKICAgICAgfX0+CiAgICAgICAgJHt0aGlzLmxvZ29JY29uIHx8IHRoaXMubG9nb1RleHQgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ29TZWN0aW9uIj4KICAgICAgICAgICAgJHt0aGlzLmxvZ29JY29uID8gYjJgPGRlZXMtaWNvbiBjbGFzcz0ibG9nb0ljb24iIC5pY29uPSIke3RoaXMubG9nb0ljb259Ij48L2RlZXMtaWNvbj5gIDogIiJ9CiAgICAgICAgICAgICR7dGhpcy5sb2dvVGV4dCA/IGIyYDxzcGFuIGNsYXNzPSJsb2dvVGV4dCI+JHt0aGlzLmxvZ29UZXh0fTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgIDogIiJ9CgogICAgICAgIDxkaXYgY2xhc3M9Im1lbnVTZWN0aW9uIj4KICAgICAgICAgICR7dGhpcy5tZW51R3JvdXBzLmxlbmd0aCA+IDAgPyB0aGlzLnJlbmRlck1lbnVHcm91cHMoKSA6IHRoaXMucmVuZGVyTGVnYWN5VGFicygpfQogICAgICAgIDwvZGl2PgoKICAgICAgICAke3RoaXMuYm90dG9tVGFicy5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3R0b21TZWN0aW9uIj4KICAgICAgICAgICAgJHt0aGlzLmJvdHRvbVRhYnMubWFwKCh0YWJBcmcpID0+IHRoaXMucmVuZGVyVGFiKHRhYkFyZykpfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iY29sbGFwc2UtdG9nZ2xlIiBAY2xpY2s9IiR7KCkgPT4gdGhpcy50b2dnbGVDb2xsYXBzZSgpfSI+CiAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLmNvbGxhcHNlZCA/ICJsdWNpZGU6Y2hldnJvblJpZ2h0IiA6ICJsdWNpZGU6Y2hldnJvbkxlZnQifSI+PC9kZWVzLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgYDsKICAgIH0KICAgIHJlbmRlck1lbnVHcm91cHMoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgJHt0aGlzLm1lbnVHcm91cHMubWFwKChncm91cCkgPT4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0ibWVudUdyb3VwIj4KICAgICAgICAgICR7Z3JvdXAubmFtZSA/IGIyYDxkaXYgY2xhc3M9Imdyb3VwSGVhZGVyIj4ke2dyb3VwLm5hbWV9PC9kaXY+YCA6ICIifQogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXBUYWJzIj4KICAgICAgICAgICAgJHtncm91cC5pdGVtcy5tYXAoKHRhYkFyZykgPT4gdGhpcy5yZW5kZXJUYWIodGFiQXJnKSl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYCl9CiAgICBgOwogICAgfQogICAgcmVuZGVyTGVnYWN5VGFicygpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtZW51R3JvdXAiPgogICAgICAgIDxkaXYgY2xhc3M9Imdyb3VwVGFicyI+CiAgICAgICAgICAke3RoaXMudGFicy5tYXAoKHRhYkFyZykgPT4gdGhpcy5yZW5kZXJUYWIodGFiQXJnKSl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlclRhYih0YWJBcmcpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9InRhYiAke3RhYkFyZyA9PT0gdGhpcy5zZWxlY3RlZFRhYiA/ICJzZWxlY3RlZFRhYiIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpID0+IHsKICAgICAgICB0aGlzLnVwZGF0ZVRhYih0YWJBcmcpOwogICAgICB9fSIKICAgICAgPgogICAgICAgIDxkZWVzLWljb24gLmljb249IiR7dGFiQXJnLmljb25OYW1lIHx8ICIifSI+PC9kZWVzLWljb24+CiAgICAgICAgPHNwYW4gY2xhc3M9InRhYkxhYmVsIj4ke3RhYkFyZy5rZXl9PC9zcGFuPgogICAgICAgICR7dGFiQXJnLmJhZGdlICE9PSB2b2lkIDAgPyBiMmAKICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSAke3RhYkFyZy5iYWRnZVZhcmlhbnQgfHwgImRlZmF1bHQifSI+JHt0YWJBcmcuYmFkZ2V9PC9zcGFuPgogICAgICAgIGAgOiAiIn0KICAgICAgICA8c3BhbiBjbGFzcz0idGFiLXRvb2x0aXAiPiR7dGFiQXJnLmtleX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGdldEFsbFRhYnMoKSB7CiAgICAgIGlmICh0aGlzLm1lbnVHcm91cHMubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IGdyb3VwVGFicyA9IHRoaXMubWVudUdyb3Vwcy5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAuaXRlbXMpOwogICAgICAgIHJldHVybiBbLi4uZ3JvdXBUYWJzLCAuLi50aGlzLmJvdHRvbVRhYnNdOwogICAgICB9CiAgICAgIHJldHVybiBbLi4udGhpcy50YWJzLCAuLi50aGlzLmJvdHRvbVRhYnNdOwogICAgfQogICAgdXBkYXRlVGFiKHRhYkFyZykgewogICAgICB0aGlzLnNlbGVjdGVkVGFiID0gdGFiQXJnOwogICAgICB0aGlzLnNlbGVjdGVkVGFiLmFjdGlvbigpOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogeyB0YWI6IHRhYkFyZyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgZmlyc3RVcGRhdGVkKCkgewogICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy5nZXRBbGxUYWJzKCk7CiAgICAgIGlmIChhbGxUYWJzLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLnVwZGF0ZVRhYihhbGxUYWJzWzBdKTsKICAgICAgfQogICAgfQogICAgdG9nZ2xlQ29sbGFwc2UoKSB7CiAgICAgIHRoaXMuY29sbGFwc2VkID0gIXRoaXMuY29sbGFwc2VkOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb2xsYXBzZS1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IGNvbGxhcHNlZDogdGhpcy5jb2xsYXBzZWQgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9jb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzOChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0FwcHVpTWFpbm1lbnUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUvZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMjkgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAuZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgfQogICAgLmRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIgLnNwYWNlciB7CiAgICAgIGZsZXg6IDE7CiAgICAgIGJhY2tncm91bmQ6ICMwZjBmMGY7CiAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIGNvbG9yOiAjYTNhM2EzOwogICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgfQogICAgLmRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIgLnNwYWNlciBoMyB7CiAgICAgIGNvbG9yOiAjZmFmYWZhOwogICAgICBtYXJnaW4tdG9wOiAwOwogICAgfQogICAgLmRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIgLnNwYWNlciBjb2RlIHsKICAgICAgYmFja2dyb3VuZDogIzI3MjcyYTsKICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CiAgICAuZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciAuc3BhY2VyIHVsIHsKICAgICAgbGluZS1oZWlnaHQ6IDEuODsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIiPgogICAgPGRlZXMtYXBwdWktc2Vjb25kYXJ5bWVudQogICAgICAuaGVhZGluZz0keyJQcm9qZWN0cyJ9CiAgICAgIC5ncm91cHM9JHtbCiAgLy8gR3JvdXAgMTogVGFiIGl0ZW1zIChkZWZhdWx0IGJlaGF2aW9yKQogIHsKICAgIG5hbWU6ICJOYXZpZ2F0aW9uIiwKICAgIGljb25OYW1lOiAibHVjaWRlOmNvbXBhc3MiLAogICAgaXRlbXM6IFsKICAgICAgeyBrZXk6ICJEYXNoYm9hcmQiLCBpY29uTmFtZTogImx1Y2lkZTpsYXlvdXREYXNoYm9hcmQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJEYXNoYm9hcmQgY2xpY2tlZCIpLCBiYWRnZTogMywgYmFkZ2VWYXJpYW50OiAid2FybmluZyIgfSwKICAgICAgeyBrZXk6ICJQcm9qZWN0cyIsIGljb25OYW1lOiAibHVjaWRlOmZvbGRlciIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlByb2plY3RzIGNsaWNrZWQiKSwgYmFkZ2U6ICJuZXciLCBiYWRnZVZhcmlhbnQ6ICJzdWNjZXNzIiB9LAogICAgICB7IGtleTogIkFuYWx5dGljcyIsIGljb25OYW1lOiAibHVjaWRlOmJhckNoYXJ0MiIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFuYWx5dGljcyBjbGlja2VkIikgfQogICAgXQogIH0sCiAgLy8gR3JvdXAgMjogQWN0aW9ucwogIHsKICAgIG5hbWU6ICJBY3Rpb25zIiwKICAgIGljb25OYW1lOiAibHVjaWRlOnphcCIsCiAgICBpdGVtczogWwogICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJDcmVhdGUgTmV3IiwgaWNvbk5hbWU6ICJsdWNpZGU6cGx1cyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkNyZWF0ZSBOZXcgY2xpY2tlZCEiKSB9LAogICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJJbXBvcnQgRGF0YSIsIGljb25OYW1lOiAibHVjaWRlOnVwbG9hZCIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkltcG9ydCBEYXRhIGNsaWNrZWQhIikgfSwKICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgeyB0eXBlOiAiYWN0aW9uIiwga2V5OiAiRGVsZXRlIEFsbCIsIGljb25OYW1lOiAibHVjaWRlOnRyYXNoMiIsIHZhcmlhbnQ6ICJkYW5nZXIiLCBjb25maXJtTWVzc2FnZTogIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgYWxsIGl0ZW1zPyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkRlbGV0ZWQhIikgfQogICAgXQogIH0sCiAgLy8gR3JvdXAgMzogRmlsdGVycwogIHsKICAgIG5hbWU6ICJGaWx0ZXJzIiwKICAgIGljb25OYW1lOiAibHVjaWRlOmZpbHRlciIsCiAgICBpdGVtczogWwogICAgICB7IHR5cGU6ICJoZWFkZXIiLCBsYWJlbDogIlN0YXR1cyIgfSwKICAgICAgeyB0eXBlOiAiZmlsdGVyIiwga2V5OiAiU2hvdyBBY3RpdmUiLCBpY29uTmFtZTogImx1Y2lkZTpjaGVja0NpcmNsZSIsIGFjdGl2ZTogdHJ1ZSwgb25Ub2dnbGU6IChhY3RpdmUpID0+IGNvbnNvbGUubG9nKCJTaG93IEFjdGl2ZToiLCBhY3RpdmUpIH0sCiAgICAgIHsgdHlwZTogImZpbHRlciIsIGtleTogIlNob3cgQXJjaGl2ZWQiLCBpY29uTmFtZTogImx1Y2lkZTphcmNoaXZlIiwgYWN0aXZlOiBmYWxzZSwgb25Ub2dnbGU6IChhY3RpdmUpID0+IGNvbnNvbGUubG9nKCJTaG93IEFyY2hpdmVkOiIsIGFjdGl2ZSkgfSwKICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgeyB0eXBlOiAibXVsdGlGaWx0ZXIiLCBrZXk6ICJDYXRlZ29yaWVzIiwgaWNvbk5hbWU6ICJsdWNpZGU6dGFnIiwgY29sbGFwc2VkOiBmYWxzZSwgb3B0aW9uczogWwogICAgICAgIHsga2V5OiAiZnJvbnRlbmQiLCBsYWJlbDogIkZyb250ZW5kIiwgY2hlY2tlZDogdHJ1ZSwgaWNvbk5hbWU6ICJsdWNpZGU6bW9uaXRvciIgfSwKICAgICAgICB7IGtleTogImJhY2tlbmQiLCBsYWJlbDogIkJhY2tlbmQiLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTpzZXJ2ZXIiIH0sCiAgICAgICAgeyBrZXk6ICJkZXZvcHMiLCBsYWJlbDogIkRldk9wcyIsIGNoZWNrZWQ6IGZhbHNlLCBpY29uTmFtZTogImx1Y2lkZTpjbG91ZCIgfSwKICAgICAgICB7IGtleTogImRlc2lnbiIsIGxhYmVsOiAiRGVzaWduIiwgY2hlY2tlZDogZmFsc2UsIGljb25OYW1lOiAibHVjaWRlOnBhbGV0dGUiIH0KICAgICAgXSwgb25DaGFuZ2U6IChrZXlzMikgPT4gY29uc29sZS5sb2coIlNlbGVjdGVkIGNhdGVnb3JpZXM6Iiwga2V5czIpIH0KICAgIF0KICB9LAogIC8vIEdyb3VwIDQ6IExpbmtzIGFuZCBtaXNjCiAgewogICAgbmFtZTogIlJlc291cmNlcyIsCiAgICBpY29uTmFtZTogImx1Y2lkZTpib29rT3BlbiIsCiAgICBjb2xsYXBzZWQ6IHRydWUsCiAgICBpdGVtczogWwogICAgICB7IHR5cGU6ICJoZWFkZXIiLCBsYWJlbDogIkRvY3VtZW50YXRpb24iIH0sCiAgICAgIHsgdHlwZTogImxpbmsiLCBrZXk6ICJBUEkgUmVmZXJlbmNlIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVRleHQiLCBocmVmOiAiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vZG9jcyIgfSwKICAgICAgeyB0eXBlOiAibGluayIsIGtleTogIlVzZXIgR3VpZGUiLCBpY29uTmFtZTogImx1Y2lkZTpib29rIiwgaHJlZjogImh0dHBzOi8vZG9jcy5leGFtcGxlLmNvbS9ndWlkZSIgfSwKICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgeyB0eXBlOiAiaGVhZGVyIiwgbGFiZWw6ICJTdXBwb3J0IiB9LAogICAgICB7IHR5cGU6ICJsaW5rIiwga2V5OiAiSGVscCBDZW50ZXIiLCBpY29uTmFtZTogImx1Y2lkZTpoZWxwQ2lyY2xlIiwgaHJlZjogIi9oZWxwIiwgZXh0ZXJuYWw6IGZhbHNlIH0sCiAgICAgIHsgdHlwZTogImxpbmsiLCBrZXk6ICJHaXRIdWIgSXNzdWVzIiwgaWNvbk5hbWU6ICJsdWNpZGU6Z2l0aHViIiwgaHJlZjogImh0dHBzOi8vZ2l0aHViLmNvbS9leGFtcGxlL2lzc3VlcyIgfQogICAgXQogIH0KXX0KICAgICAgQGl0ZW0tc2VsZWN0PSR7KGUxMSkgPT4gY29uc29sZS5sb2coIlRhYiBzZWxlY3RlZDoiLCBlMTEuZGV0YWlsKX0KICAgICAgQGFjdGlvbi1jbGljaz0keyhlMTEpID0+IGNvbnNvbGUubG9nKCJBY3Rpb24gY2xpY2tlZDoiLCBlMTEuZGV0YWlsKX0KICAgICAgQGZpbHRlci10b2dnbGU9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiRmlsdGVyIHRvZ2dsZWQ6IiwgZTExLmRldGFpbCl9CiAgICAgIEBtdWx0aWZpbHRlci1jaGFuZ2U9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiTXVsdGktZmlsdGVyIGNoYW5nZWQ6IiwgZTExLmRldGFpbCl9CiAgICAgIEBsaW5rLWNsaWNrPSR7KGUxMSkgPT4gY29uc29sZS5sb2coIkxpbmsgY2xpY2tlZDoiLCBlMTEuZGV0YWlsKX0KICAgID48L2RlZXMtYXBwdWktc2Vjb25kYXJ5bWVudT4KICAgIDxkaXYgY2xhc3M9InNwYWNlciI+CiAgICAgIDxoMz5TZWNvbmRhcnkgTWVudSBEZW1vPC9oMz4KICAgICAgPHA+VGhpcyBkZW1vIHNob3djYXNlcyBhbGwgOCBpdGVtIHR5cGVzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT48Y29kZT50YWI8L2NvZGU+IC0gU2VsZWN0YWJsZSBpdGVtcyAoTmF2aWdhdGlvbiBncm91cCk8L2xpPgogICAgICAgIDxsaT48Y29kZT5hY3Rpb248L2NvZGU+IC0gQmx1ZSBhY3Rpb25zIChBY3Rpb25zIGdyb3VwKTwvbGk+CiAgICAgICAgPGxpPjxjb2RlPmFjdGlvbjwvY29kZT4gd2l0aCA8Y29kZT52YXJpYW50OiAnZGFuZ2VyJzwvY29kZT4gLSBSZWQgZGFuZ2VyIGFjdGlvbjwvbGk+CiAgICAgICAgPGxpPjxjb2RlPmZpbHRlcjwvY29kZT4gLSBDaGVja2JveCB0b2dnbGVzIChGaWx0ZXJzIGdyb3VwKTwvbGk+CiAgICAgICAgPGxpPjxjb2RlPm11bHRpRmlsdGVyPC9jb2RlPiAtIENvbGxhcHNpYmxlIG11bHRpLXNlbGVjdCAoQ2F0ZWdvcmllcyk8L2xpPgogICAgICAgIDxsaT48Y29kZT5kaXZpZGVyPC9jb2RlPiAtIFZpc3VhbCBzZXBhcmF0b3JzPC9saT4KICAgICAgICA8bGk+PGNvZGU+aGVhZGVyPC9jb2RlPiAtIFNlY3Rpb24gbGFiZWxzPC9saT4KICAgICAgICA8bGk+PGNvZGU+bGluazwvY29kZT4gLSBFeHRlcm5hbC9pbnRlcm5hbCBsaW5rcyAoUmVzb3VyY2VzIGdyb3VwKTwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPlRyeSB0aGUgY29sbGFwc2UgdG9nZ2xlIG9uIHRoZSBsZWZ0IGVkZ2UhPC9wPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51L2RlZXMtYXBwdWktc2Vjb25kYXJ5bWVudS5qcwppbml0X2RlZXNfaWNvbigpOwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUzOCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMzkgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aVNlY29uZGFyeW1lbnUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9oZWFkaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9oZWFkaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGVhZGluZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZ3JvdXBzX2RlY29yYXRvcnM7CiAgbGV0IF9ncm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ncm91cHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGlvbk9wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGlvbk9wdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3Rpb25PcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZEl0ZW1fZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkSXRlbV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkSXRlbV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sbGFwc2VkR3JvdXBzX2RlY29yYXRvcnM7CiAgbGV0IF9jb2xsYXBzZWRHcm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2xsYXBzZWRHcm91cHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbGxhcHNlZE11bHRpRmlsdGVyc19kZWNvcmF0b3JzOwogIGxldCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZW5kZXJDb3VudGVyX2RlY29yYXRvcnM7CiAgbGV0IF9yZW5kZXJDb3VudGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmVuZGVyQ291bnRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sbGFwc2VkX2RlY29yYXRvcnM7CiAgbGV0IF9jb2xsYXBzZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0FwcHVpU2Vjb25kYXJ5bWVudTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9oZWFkaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfZ3JvdXBzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9zZWxlY3Rpb25PcHRpb25zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9zZWxlY3RlZEl0ZW1fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9jb2xsYXBzZWRHcm91cHNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2NvbGxhcHNlZE11bHRpRmlsdGVyc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfcmVuZGVyQ291bnRlcl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY29sbGFwc2VkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMzgodGhpcywgbnVsbCwgX2hlYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGVhZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGVhZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oZWFkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oZWFkaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzLCBfaGVhZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM4KHRoaXMsIG51bGwsIF9ncm91cHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZ3JvdXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJncm91cHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZ3JvdXBzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ncm91cHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZ3JvdXBzX2luaXRpYWxpemVycywgX2dyb3Vwc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM4KHRoaXMsIG51bGwsIF9zZWxlY3Rpb25PcHRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGlvbk9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGlvbk9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0aW9uT3B0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0aW9uT3B0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3Rpb25PcHRpb25zX2luaXRpYWxpemVycywgX3NlbGVjdGlvbk9wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfc2VsZWN0ZWRJdGVtX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkSXRlbSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRJdGVtIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkSXRlbSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWRJdGVtID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkSXRlbV9pbml0aWFsaXplcnMsIF9zZWxlY3RlZEl0ZW1fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfY29sbGFwc2VkR3JvdXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbGxhcHNlZEdyb3VwcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sbGFwc2VkR3JvdXBzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbGxhcHNlZEdyb3Vwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29sbGFwc2VkR3JvdXBzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbGxhcHNlZEdyb3Vwc19pbml0aWFsaXplcnMsIF9jb2xsYXBzZWRHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbGxhcHNlZE11bHRpRmlsdGVycyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sbGFwc2VkTXVsdGlGaWx0ZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbGxhcHNlZE11bHRpRmlsdGVycywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29sbGFwc2VkTXVsdGlGaWx0ZXJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbGxhcHNlZE11bHRpRmlsdGVyc19pbml0aWFsaXplcnMsIF9jb2xsYXBzZWRNdWx0aUZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfcmVuZGVyQ291bnRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZW5kZXJDb3VudGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZW5kZXJDb3VudGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJlbmRlckNvdW50ZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJlbmRlckNvdW50ZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVuZGVyQ291bnRlcl9pbml0aWFsaXplcnMsIF9yZW5kZXJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzgodGhpcywgbnVsbCwgX2NvbGxhcHNlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2xsYXBzZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb2xsYXBzZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbGxhcHNlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzgobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQXBwdWlTZWNvbmRhcnltZW51MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjk7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkFwcCBVSSI7CiAgICAjaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfaGVhZGluZ19pbml0aWFsaXplcnMsICJNZW51Iik7CiAgICAvLyBJTlNUQU5DRQogICAgLyoqIER5bmFtaWMgaGVhZGluZyAtIHR5cGljYWxseSBzaG93cyB0aGUgc2VsZWN0ZWQgTWFpbk1lbnUgaXRlbSAqLwogICAgZ2V0IGhlYWRpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoZWFkaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaGVhZGluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2dyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzkodGhpcywgX2hlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9ncm91cHNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgLyoqIEdyb3VwZWQgaXRlbXMgd2l0aCBjb2xsYXBzZSBzdXBwb3J0IC0gc3VwcG9ydHMgbmV3IElTZWNvbmRhcnlNZW51R3JvdXAgKi8KICAgIGdldCBncm91cHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNncm91cHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBncm91cHModmFsdWUyKSB7CiAgICAgIHRoaXMuI2dyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGlvbk9wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9ncm91cHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9zZWxlY3Rpb25PcHRpb25zX2luaXRpYWxpemVycywgW10pKTsKICAgIC8qKiBMZWdhY3kgZmxhdCBsaXN0IHN1cHBvcnQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KICAgIGdldCBzZWxlY3Rpb25PcHRpb25zKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uT3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGlvbk9wdGlvbnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGlvbk9wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9zZWxlY3Rpb25PcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfc2VsZWN0ZWRJdGVtX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgLyoqIEN1cnJlbnRseSBzZWxlY3RlZCB0YWIgaXRlbSAqLwogICAgZ2V0IHNlbGVjdGVkSXRlbSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkSXRlbSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRJdGVtX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29sbGFwc2VkR3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfc2VsZWN0ZWRJdGVtX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkR3JvdXBzX2luaXRpYWxpemVycywgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkpOwogICAgLyoqIEludGVybmFsIHN0YXRlIGZvciBjb2xsYXBzZWQgZ3JvdXBzICovCiAgICBnZXQgY29sbGFwc2VkR3JvdXBzKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkR3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sbGFwc2VkR3JvdXBzKHZhbHVlMikgewogICAgICB0aGlzLiNjb2xsYXBzZWRHcm91cHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb2xsYXBzZWRNdWx0aUZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9jb2xsYXBzZWRHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9jb2xsYXBzZWRNdWx0aUZpbHRlcnNfaW5pdGlhbGl6ZXJzLCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSk7CiAgICAvKiogSW50ZXJuYWwgc3RhdGUgZm9yIGNvbGxhcHNlZCBtdWx0aS1maWx0ZXJzICovCiAgICBnZXQgY29sbGFwc2VkTXVsdGlGaWx0ZXJzKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sbGFwc2VkTXVsdGlGaWx0ZXJzKHZhbHVlMikgewogICAgICB0aGlzLiNjb2xsYXBzZWRNdWx0aUZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNyZW5kZXJDb3VudGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfcmVuZGVyQ291bnRlcl9pbml0aWFsaXplcnMsIDApKTsKICAgIC8qKiBSZW5kZXIgY291bnRlciB0byBmb3JjZSByZS1yZW5kZXJzIHdoZW4gaXRlbXMgYXJlIG11dGF0ZWQgKi8KICAgIGdldCByZW5kZXJDb3VudGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVuZGVyQ291bnRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJlbmRlckNvdW50ZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3JlbmRlckNvdW50ZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9yZW5kZXJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIC8qKiBIb3Jpem9udGFsIGNvbGxhcHNlIHN0YXRlICovCiAgICBnZXQgY29sbGFwc2VkKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sbGFwc2VkKHZhbHVlMikgewogICAgICB0aGlzLiNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1zaWRlYmFyLXdpZHRoLWV4cGFuZGVkOiAyNDBweDsKICAgICAgICAtLXNpZGViYXItd2lkdGgtY29sbGFwc2VkOiA1NnB4OwogICAgICAgIC0tc2lkZWJhci1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgICAtLXNpZGViYXItZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNTI1MjUyIiwgIiNhM2EzYTMiKX07CiAgICAgICAgLS1zaWRlYmFyLWZnLW11dGVkOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzczNzM3MyIsICIjNzM3MzczIil9OwogICAgICAgIC0tc2lkZWJhci1mZy1hY3RpdmU6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGEwYTBhIiwgIiNmYWZhZmEiKX07CiAgICAgICAgLS1zaWRlYmFyLWJvcmRlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU1ZTUiLCAiIzFhMWExYSIpfTsKICAgICAgICAtLXNpZGViYXItaG92ZXI6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDQpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgLS1zaWRlYmFyLWFjdGl2ZTogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgICAtLXNpZGViYXItYWNjZW50OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzBhMGEwYSIsICIjZmFmYWZhIil9OwogICAgICAgIC0tdG9vbHRpcC1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxODE4MWIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICAtLXRvb2x0aXAtZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMxODE4MWIiKX07CgogICAgICAgIC8qIEJhZGdlIGNvbG9ycyAqLwogICAgICAgIC0tYmFkZ2UtZGVmYXVsdC1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgICAgICAtLWJhZGdlLWRlZmF1bHQtZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2YzZjQ2IiwgIiNhMWExYWEiKX07CiAgICAgICAgLS1iYWRnZS1zdWNjZXNzLWJnOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjZmNlNyIsICIjMTQ1MzJkIil9OwogICAgICAgIC0tYmFkZ2Utc3VjY2Vzcy1mZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxNjY1MzQiLCAiIzRhZGU4MCIpfTsKICAgICAgICAtLWJhZGdlLXdhcm5pbmctYmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmVmM2M3IiwgIiM0NTFhMDMiKX07CiAgICAgICAgLS1iYWRnZS13YXJuaW5nLWZnOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzkyNDAwZSIsICIjZmJiZjI0Iil9OwogICAgICAgIC0tYmFkZ2UtZXJyb3ItYmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmVlMmUyIiwgIiM0NTBhMGEiKX07CiAgICAgICAgLS1iYWRnZS1lcnJvci1mZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5OTFiMWIiLCAiI2Y4NzE3MSIpfTsKCiAgICAgICAgLyogQWN0aW9uIGNvbG9ycyAqLwogICAgICAgIC0tYWN0aW9uLXByaW1hcnk6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiMzYjgyZjYiKX07CiAgICAgICAgLS1hY3Rpb24tcHJpbWFyeS1ob3ZlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZDRlZDgiLCAiIzYwYTVmYSIpfTsKICAgICAgICAtLWFjdGlvbi1kYW5nZXI6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNlZjQ0NDQiKX07CiAgICAgICAgLS1hY3Rpb24tZGFuZ2VyLWhvdmVyOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2I5MWMxYyIsICIjZjg3MTcxIil9OwoKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiB2YXIoLS1zaWRlYmFyLXdpZHRoLWV4cGFuZGVkKTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWJnKTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1zaWRlYmFyLWJvcmRlcik7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBzYW5zLXNlcmlmOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMjVzIGVhc2U7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSB7CiAgICAgICAgd2lkdGg6IHZhcigtLXNpZGViYXItd2lkdGgtY29sbGFwc2VkKTsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC8qIEZsb2F0aW5nIGNvbGxhcHNlIHRvZ2dsZSBidXR0b24gKi8KICAgICAgLmNvbGxhcHNlLXRvZ2dsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAtMTJweDsKICAgICAgICB0b3A6IDI0cHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzI3MjcyYSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTVlNSIsICIjM2YzZjQ2Iil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MzczNzMiLCAiI2ExYTFhYSIpfTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmNvbGxhcHNlLXRvZ2dsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoOmhvdmVyKSAuY29sbGFwc2UtdG9nZ2xlIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuY29sbGFwc2UtdG9nZ2xlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAvKiBIZWFkZXIgU2VjdGlvbiAqLwogICAgICAuaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXNpZGViYXItYm9yZGVyKTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuaGVhZGVyIC5oZWFkaW5nIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLWFjdGl2ZSk7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCB3aWR0aCAwLjI1cyBlYXNlOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmhlYWRlciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuaGVhZGVyIC5oZWFkaW5nIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC8qIFNjcm9sbGFibGUgTWVudSBTZWN0aW9uICovCiAgICAgIC5tZW51U2VjdGlvbiB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xNSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMjUpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkiKX07CiAgICAgIH0KCiAgICAgIC8qIE1lbnUgR3JvdXAgKi8KICAgICAgLm1lbnVHcm91cCB7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVHcm91cCB7CiAgICAgICAgcGFkZGluZzogMCA0cHg7CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZSwgb3BhY2l0eSAwLjJzIGVhc2UsIG1heC1oZWlnaHQgMC4yNXMgZWFzZTsKICAgICAgICBtYXgtaGVpZ2h0OiA0MHB4OwogICAgICB9CgogICAgICAuZ3JvdXBIZWFkZXI6aG92ZXIgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE0MCwgMTIwLCAxMDAsIDAuMDYpIiwgInJnYmEoMTgwLCAxNjAsIDE0MCwgMC4wOCkiKX07CiAgICAgICAgcGFkZGluZzogN3B4IDExcHg7CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlcjpub3QoLmNvbGxhcHNlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE0MCwgMTIwLCAxMDAsIDAuMDYpIiwgInJnYmEoMTgwLCAxNjAsIDE0MCwgMC4wOCkiKX07CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICB9CgogICAgICAuZ3JvdXBIZWFkZXIgLmdyb3VwVGl0bGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3ODcxNmMiLCAiI2I1YTk5YSIpfTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlciAuZ3JvdXBUaXRsZSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3ODcxNmMiLCAiI2I1YTk5YSIpfTsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyIC5jaGV2cm9uIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3ODcxNmMiLCAiI2I1YTk5YSIpfTsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyLmNvbGxhcHNlZCAuY2hldnJvbiB7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKTsKICAgICAgfQoKICAgICAgLyogSGlkZSBncm91cCBoZWFkZXJzIHdoZW4gaG9yaXpvbnRhbGx5IGNvbGxhcHNlZCAqLwogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmdyb3VwSGVhZGVyIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIG1heC1oZWlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIEdyb3VwIEl0ZW1zIENvbnRhaW5lciAqLwogICAgICAuZ3JvdXBJdGVtcyB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IDAuMjVzIGVhc2UsIG9wYWNpdHkgMC4ycyBlYXNlLCBtYXJnaW4gMC4yNXMgZWFzZTsKICAgICAgICBtYXgtaGVpZ2h0OiAxMDAwcHg7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICB9CgogICAgICAuZ3JvdXBJdGVtcy5jb2xsYXBzZWQgewogICAgICAgIG1heC1oZWlnaHQ6IDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CgogICAgICAvKiBBbHdheXMgc2hvdyBpdGVtcyB3aGVuIGhvcml6b250YWxseSBjb2xsYXBzZWQgKHJlZ2FyZGxlc3Mgb2YgZ3JvdXAgY29sbGFwc2Ugc3RhdGUpICovCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuZ3JvdXBJdGVtcyB7CiAgICAgICAgbWF4LWhlaWdodDogbm9uZTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBNZW51IEl0ZW0gQmFzZSAqLwogICAgICAubWVudUl0ZW0gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIG1hcmdpbjogMnB4IDA7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0NTA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZyk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ob3Zlcik7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1hY3RpdmUpOwogICAgICB9CgogICAgICAubWVudUl0ZW0uZGlzYWJsZWQgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAubWVudUl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItYWN0aXZlKTsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1hY3RpdmUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5zZWxlY3RlZDo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgd2lkdGg6IDNweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1hY2NlbnQpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMnB4IDJweCAwOwogICAgICB9CgogICAgICAubWVudUl0ZW0gZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubWVudUl0ZW0uc2VsZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubWVudUl0ZW0gLml0ZW1MYWJlbCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIHdpZHRoIDAuMjVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC8qIEFjdGlvbiBJdGVtIFN0eWxlcyAqLwogICAgICAubWVudUl0ZW0uYWN0aW9uLXByaW1hcnkgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpb24tcHJpbWFyeSk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5hY3Rpb24tcHJpbWFyeTpob3ZlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGlvbi1wcmltYXJ5LWhvdmVyKTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgzNywgOTksIDIzNSwgMC4wOCkiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMTIpIil9OwogICAgICB9CgogICAgICAubWVudUl0ZW0uYWN0aW9uLXByaW1hcnkgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubWVudUl0ZW0uYWN0aW9uLWRhbmdlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGlvbi1kYW5nZXIpOwogICAgICB9CgogICAgICAubWVudUl0ZW0uYWN0aW9uLWRhbmdlcjpob3ZlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGlvbi1kYW5nZXItaG92ZXIpOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIyMCwgMzgsIDM4LCAwLjA4KSIsICJyZ2JhKDIzOSwgNjgsIDY4LCAwLjEyKSIpfTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmFjdGlvbi1kYW5nZXIgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBGaWx0ZXIgSXRlbSBTdHlsZXMgKi8KICAgICAgLm1lbnVJdGVtLmZpbHRlciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAubWVudUl0ZW0uZmlsdGVyIC5maWx0ZXItY2hlY2tib3ggewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Q0ZDRkNCIsICIjNTI1MjUyIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5maWx0ZXIgLmZpbHRlci1jaGVja2JveC5jaGVja2VkIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWFjY2VudCk7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1zaWRlYmFyLWFjY2VudCk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5maWx0ZXIgLmZpbHRlci1jaGVja2JveCBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubWVudUl0ZW0uZmlsdGVyLmFjdGl2ZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLyogTXVsdGktRmlsdGVyIENvbnRhaW5lciAqLwogICAgICAubXVsdGlGaWx0ZXIgewogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDIpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMikiKX07CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItaG92ZXIpOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItaGVhZGVyIC5tdWx0aUZpbHRlci10aXRsZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLWFjdGl2ZSk7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIgLm11bHRpRmlsdGVyLXRpdGxlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLWhlYWRlciAubXVsdGlGaWx0ZXItY291bnQgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1tdXRlZCk7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFkZ2UtZGVmYXVsdC1iZyk7CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIgLmNoZXZyb24gewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLW11dGVkKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLWhlYWRlci5jb2xsYXBzZWQgLmNoZXZyb24gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC05MGRlZyk7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1vcHRpb25zIHsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAwLjI1cyBlYXNlLCBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9ucy5jb2xsYXBzZWQgewogICAgICAgIG1heC1oZWlnaHQ6IDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLW9wdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ob3Zlcik7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLW9wdGlvbiAub3B0aW9uLWNoZWNrYm94IHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkNGQ0ZDQiLCAiIzUyNTI1MiIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uIC5vcHRpb24tY2hlY2tib3guY2hlY2tlZCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1hY2NlbnQpOwogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tc2lkZWJhci1hY2NlbnQpOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uIC5vcHRpb24tY2hlY2tib3ggZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1vcHRpb24gZGVlcy1pY29uLm9wdGlvbi1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAvKiBEaXZpZGVyICovCiAgICAgIC5tZW51RGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIG1hcmdpbjogOHB4IDEycHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudURpdmlkZXIgewogICAgICAgIG1hcmdpbjogOHB4IDRweDsKICAgICAgfQoKICAgICAgLyogSGVhZGVyL0xhYmVsICovCiAgICAgIC5tZW51SGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAxMnB4IDEycHggNHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctbXV0ZWQpOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVIZWFkZXIgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIExpbmsgSXRlbSAqLwogICAgICAubWVudUl0ZW0ubGluayAuZXh0ZXJuYWwtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgfQoKICAgICAgLyogQ29sbGFwc2VkIG1lbnUgaXRlbSBzdHlsZXMgKi8KICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SXRlbSB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGdhcDogMDsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SXRlbSAuaXRlbUxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SXRlbS5zZWxlY3RlZDo6YmVmb3JlIHsKICAgICAgICBsZWZ0OiAtNHB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVJdGVtIC5maWx0ZXItY2hlY2tib3gsCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUl0ZW0gLmV4dGVybmFsLWljb24gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubXVsdGlGaWx0ZXIgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFRvb2x0aXAgZm9yIGNvbGxhcHNlZCBzdGF0ZSAqLwogICAgICAuaXRlbS10b29sdGlwIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMTAwJTsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEycHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdG9vbHRpcC1iZyk7CiAgICAgICAgY29sb3I6IHZhcigtLXRvb2x0aXAtZmcpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgIH0KCiAgICAgIC5pdGVtLXRvb2x0aXA6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IC00cHg7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIGJvcmRlcjogNHB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdmFyKC0tdG9vbHRpcC1iZyk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUl0ZW06aG92ZXIgLml0ZW0tdG9vbHRpcCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAxczsKICAgICAgfQoKICAgICAgLyogQmFkZ2UgU3R5bGVzICovCiAgICAgIC5iYWRnZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBtaW4td2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIHBhZGRpbmc6IDAgNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDlweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmJhZGdlLmRlZmF1bHQgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLWRlZmF1bHQtYmcpOwogICAgICAgIGNvbG9yOiB2YXIoLS1iYWRnZS1kZWZhdWx0LWZnKTsKICAgICAgfQoKICAgICAgLmJhZGdlLnN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLXN1Y2Nlc3MtYmcpOwogICAgICAgIGNvbG9yOiB2YXIoLS1iYWRnZS1zdWNjZXNzLWZnKTsKICAgICAgfQoKICAgICAgLmJhZGdlLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLXdhcm5pbmctYmcpOwogICAgICAgIGNvbG9yOiB2YXIoLS1iYWRnZS13YXJuaW5nLWZnKTsKICAgICAgfQoKICAgICAgLmJhZGdlLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWRnZS1lcnJvci1iZyk7CiAgICAgICAgY29sb3I6IHZhcigtLWJhZGdlLWVycm9yLWZnKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5iYWRnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogTGVnYWN5IG9wdGlvbnMgY29udGFpbmVyICovCiAgICAgIC5sZWdhY3lPcHRpb25zIHsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgfQoKICAgICAgLyogRGl2aWRlciAobGVnYWN5KSAqLwogICAgICAuZGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIG1hcmdpbjogOHB4IDEycHg7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWFkaW5nIj4ke3RoaXMuaGVhZGluZ308L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWVudVNlY3Rpb24iPgogICAgICAgICAgJHt0aGlzLmdyb3Vwcy5sZW5ndGggPiAwID8gdGhpcy5yZW5kZXJHcm91cHMoKSA6IHRoaXMucmVuZGVyTGVnYWN5T3B0aW9ucygpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iY29sbGFwc2UtdG9nZ2xlIiBAY2xpY2s9IiR7KCkgPT4gdGhpcy50b2dnbGVDb2xsYXBzZSgpfSI+CiAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLmNvbGxhcHNlZCA/ICJsdWNpZGU6Y2hldnJvblJpZ2h0IiA6ICJsdWNpZGU6Y2hldnJvbkxlZnQifSI+PC9kZWVzLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgYDsKICAgIH0KICAgIHJlbmRlckdyb3VwcygpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke3RoaXMuZ3JvdXBzLm1hcCgoZ3JvdXApID0+IGIyYAogICAgICAgIDxkaXYgY2xhc3M9Im1lbnVHcm91cCI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJncm91cEhlYWRlciAke3RoaXMuY29sbGFwc2VkR3JvdXBzLmhhcyhncm91cC5uYW1lKSA/ICJjb2xsYXBzZWQiIDogIiJ9IgogICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gdGhpcy50b2dnbGVHcm91cChncm91cC5uYW1lKX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJncm91cFRpdGxlIj4KICAgICAgICAgICAgICAke2dyb3VwLmljb25OYW1lID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLm5vcm1hbGl6ZUljb24oZ3JvdXAuaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgICAgICAgICR7Z3JvdXAubmFtZX0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJjaGV2cm9uIiAuaWNvbj0iJHsibHVjaWRlOmNoZXZyb25Eb3duIn0iPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJncm91cEl0ZW1zICR7dGhpcy5jb2xsYXBzZWRHcm91cHMuaGFzKGdyb3VwLm5hbWUpID8gImNvbGxhcHNlZCIgOiAiIn0iPgogICAgICAgICAgICAke2dyb3VwLml0ZW1zLm1hcCgoaXRlbSkgPT4gdGhpcy5yZW5kZXJJdGVtKGl0ZW0sIGdyb3VwKSl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYCl9CiAgICBgOwogICAgfQogICAgcmVuZGVySXRlbShpdGVtLCBncm91cCkgewogICAgICBpZiAoImhpZGRlbiIgaW4gaXRlbSAmJiBpdGVtLmhpZGRlbikgewogICAgICAgIHJldHVybiBiMmBgOwogICAgICB9CiAgICAgIGNvbnN0IGl0ZW1UeXBlID0gInR5cGUiIGluIGl0ZW0gPyBpdGVtLnR5cGUgOiAidGFiIjsKICAgICAgc3dpdGNoIChpdGVtVHlwZSkgewogICAgICAgIGNhc2UgImFjdGlvbiI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJBY3Rpb25JdGVtKGl0ZW0pOwogICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJGaWx0ZXJJdGVtKGl0ZW0pOwogICAgICAgIGNhc2UgIm11bHRpRmlsdGVyIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlck11bHRpRmlsdGVySXRlbShpdGVtKTsKICAgICAgICBjYXNlICJkaXZpZGVyIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckRpdmlkZXIoKTsKICAgICAgICBjYXNlICJoZWFkZXIiOgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVySGVhZGVyKGl0ZW0pOwogICAgICAgIGNhc2UgImxpbmsiOgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyTGlua0l0ZW0oaXRlbSk7CiAgICAgICAgY2FzZSAidGFiIjoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyVGFiSXRlbShpdGVtLCBncm91cCk7CiAgICAgIH0KICAgIH0KICAgIHJlbmRlclRhYkl0ZW0oaXRlbSwgZ3JvdXApIHsKICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtPy5rZXkgPT09IGl0ZW0ua2V5OwogICAgICBjb25zdCBpc0Rpc2FibGVkID0gaXRlbS5kaXNhYmxlZCA9PT0gdHJ1ZTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9Im1lbnVJdGVtICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0gJHtpc0Rpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSIKICAgICAgICBAY2xpY2s9IiR7KCkgPT4gIWlzRGlzYWJsZWQgJiYgdGhpcy5zZWxlY3RUYWJJdGVtKGl0ZW0sIGdyb3VwKX0iCiAgICAgICAgQGNvbnRleHRtZW51PSIkeyhlMTEpID0+IHRoaXMuaGFuZGxlQ29udGV4dE1lbnUoZTExLCBpdGVtKX0iCiAgICAgID4KICAgICAgICAke2l0ZW0uaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uPSIke3RoaXMubm9ybWFsaXplSWNvbihpdGVtLmljb25OYW1lKX0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbUxhYmVsIj4ke2l0ZW0ua2V5fTwvc3Bhbj4KICAgICAgICAke2l0ZW0uYmFkZ2UgIT09IHZvaWQgMCA/IGIyYAogICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlICR7aXRlbS5iYWRnZVZhcmlhbnQgfHwgImRlZmF1bHQifSI+JHtpdGVtLmJhZGdlfTwvc3Bhbj4KICAgICAgICBgIDogIiJ9CiAgICAgICAgPHNwYW4gY2xhc3M9Iml0ZW0tdG9vbHRpcCI+JHtpdGVtLmtleX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckFjdGlvbkl0ZW0oaXRlbSkgewogICAgICBjb25zdCB2YXJpYW50ID0gaXRlbS52YXJpYW50IHx8ICJwcmltYXJ5IjsKICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPT09IHRydWU7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtZW51SXRlbSBhY3Rpb24tJHt2YXJpYW50fSAke2lzRGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9IgogICAgICAgIEBjbGljaz0iJHsoKSA9PiAhaXNEaXNhYmxlZCAmJiB0aGlzLmhhbmRsZUFjdGlvbkNsaWNrKGl0ZW0pfSIKICAgICAgPgogICAgICAgICR7aXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKGl0ZW0uaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtTGFiZWwiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtLXRvb2x0aXAiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJGaWx0ZXJJdGVtKGl0ZW0pIHsKICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPT09IHRydWU7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtZW51SXRlbSBmaWx0ZXIgJHtpdGVtLmFjdGl2ZSA/ICJhY3RpdmUiIDogIiJ9ICR7aXNEaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpID0+ICFpc0Rpc2FibGVkICYmIHRoaXMuaGFuZGxlRmlsdGVyVG9nZ2xlKGl0ZW0pfSIKICAgICAgPgogICAgICAgICR7aXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKGl0ZW0uaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtTGFiZWwiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICAgIDxkaXYgY2xhc3M9ImZpbHRlci1jaGVja2JveCAke2l0ZW0uYWN0aXZlID8gImNoZWNrZWQiIDogIiJ9Ij4KICAgICAgICAgICR7aXRlbS5hY3RpdmUgPyBiMmA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6Y2hlY2sifSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtLXRvb2x0aXAiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJNdWx0aUZpbHRlckl0ZW0oaXRlbSkgewogICAgICBjb25zdCBpc0NvbGxhcHNlZCA9IHRoaXMuY29sbGFwc2VkTXVsdGlGaWx0ZXJzLmhhcyhpdGVtLmtleSk7CiAgICAgIGNvbnN0IGNoZWNrZWRDb3VudCA9IGl0ZW0ub3B0aW9ucy5maWx0ZXIoKG9wdCkgPT4gb3B0LmNoZWNrZWQpLmxlbmd0aDsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtdWx0aUZpbHRlciI+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9Im11bHRpRmlsdGVyLWhlYWRlciAke2lzQ29sbGFwc2VkID8gImNvbGxhcHNlZCIgOiAiIn0iCiAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gdGhpcy50b2dnbGVNdWx0aUZpbHRlcihpdGVtLmtleSl9IgogICAgICAgID4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdWx0aUZpbHRlci10aXRsZSI+CiAgICAgICAgICAgICR7aXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKGl0ZW0uaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgICAgICAke2l0ZW0ua2V5fQogICAgICAgICAgPC9zcGFuPgogICAgICAgICAgJHtjaGVja2VkQ291bnQgPiAwID8gYjJgPHNwYW4gY2xhc3M9Im11bHRpRmlsdGVyLWNvdW50Ij4ke2NoZWNrZWRDb3VudH08L3NwYW4+YCA6ICIifQogICAgICAgICAgPGRlZXMtaWNvbiBjbGFzcz0iY2hldnJvbiIgLmljb249IiR7Imx1Y2lkZTpjaGV2cm9uRG93biJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtdWx0aUZpbHRlci1vcHRpb25zICR7aXNDb2xsYXBzZWQgPyAiY29sbGFwc2VkIiA6ICIifSI+CiAgICAgICAgICAke2l0ZW0ub3B0aW9ucy5tYXAoKG9wdGlvbjIpID0+IGIyYAogICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgY2xhc3M9Im11bHRpRmlsdGVyLW9wdGlvbiIKICAgICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gdGhpcy5oYW5kbGVNdWx0aUZpbHRlck9wdGlvblRvZ2dsZShpdGVtLCBvcHRpb24yLmtleSl9IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3B0aW9uLWNoZWNrYm94ICR7b3B0aW9uMi5jaGVja2VkID8gImNoZWNrZWQiIDogIiJ9Ij4KICAgICAgICAgICAgICAgICR7b3B0aW9uMi5jaGVja2VkID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0iJHsibHVjaWRlOmNoZWNrIn0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAke29wdGlvbjIuaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIGNsYXNzPSJvcHRpb24taWNvbiIgLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKG9wdGlvbjIuaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgICAgICAgIDxzcGFuPiR7b3B0aW9uMi5sYWJlbH08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckRpdmlkZXIoKSB7CiAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJtZW51RGl2aWRlciI+PC9kaXY+YDsKICAgIH0KICAgIHJlbmRlckhlYWRlcihpdGVtKSB7CiAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJtZW51SGVhZGVyIj4ke2l0ZW0ubGFiZWx9PC9kaXY+YDsKICAgIH0KICAgIHJlbmRlckxpbmtJdGVtKGl0ZW0pIHsKICAgICAgY29uc3QgaXNFeHRlcm5hbCA9IGl0ZW0uZXh0ZXJuYWwgPz8gaXRlbS5ocmVmLnN0YXJ0c1dpdGgoImh0dHAiKTsKICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPT09IHRydWU7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtZW51SXRlbSBsaW5rICR7aXNEaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpID0+ICFpc0Rpc2FibGVkICYmIHRoaXMuaGFuZGxlTGlua0NsaWNrKGl0ZW0pfSIKICAgICAgPgogICAgICAgICR7aXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKGl0ZW0uaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtTGFiZWwiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICAgICR7aXNFeHRlcm5hbCA/IGIyYDxkZWVzLWljb24gY2xhc3M9ImV4dGVybmFsLWljb24iIC5pY29uPSIkeyJsdWNpZGU6ZXh0ZXJuYWxMaW5rIn0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbS10b29sdGlwIj4ke2l0ZW0ua2V5fTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyTGVnYWN5T3B0aW9ucygpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJsZWdhY3lPcHRpb25zIj4KICAgICAgICAke3RoaXMuc2VsZWN0aW9uT3B0aW9ucy5tYXAoKG9wdGlvbjIpID0+IHsKICAgICAgICBpZiAoImRpdmlkZXIiIGluIG9wdGlvbjIgJiYgb3B0aW9uMi5kaXZpZGVyKSB7CiAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0iZGl2aWRlciI+PC9kaXY+YDsKICAgICAgICB9CiAgICAgICAgY29uc3QgaXRlbSA9IG9wdGlvbjI7CiAgICAgICAgY29uc3QgdGFiSXRlbSA9IHsKICAgICAgICAgIGtleTogaXRlbS5rZXksCiAgICAgICAgICBpY29uTmFtZTogaXRlbS5pY29uTmFtZSwKICAgICAgICAgIGFjdGlvbjogaXRlbS5hY3Rpb24sCiAgICAgICAgICBiYWRnZTogaXRlbS5iYWRnZSwKICAgICAgICAgIGJhZGdlVmFyaWFudDogaXRlbS5iYWRnZVZhcmlhbnQKICAgICAgICB9OwogICAgICAgIHJldHVybiB0aGlzLnJlbmRlclRhYkl0ZW0odGFiSXRlbSk7CiAgICAgIH0pfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICAvLyBIZWxwZXIgdG8gbm9ybWFsaXplIGljb24gbmFtZXMKICAgIG5vcm1hbGl6ZUljb24oaWNvbk5hbWUpIHsKICAgICAgcmV0dXJuIGljb25OYW1lLnN0YXJ0c1dpdGgoImx1Y2lkZToiKSA/IGljb25OYW1lIDogYGx1Y2lkZToke2ljb25OYW1lfWA7CiAgICB9CiAgICB0b2dnbGVHcm91cChncm91cE5hbWUpIHsKICAgICAgY29uc3QgbmV3Q29sbGFwc2VkID0gbmV3IFNldCh0aGlzLmNvbGxhcHNlZEdyb3Vwcyk7CiAgICAgIGlmIChuZXdDb2xsYXBzZWQuaGFzKGdyb3VwTmFtZSkpIHsKICAgICAgICBuZXdDb2xsYXBzZWQuZGVsZXRlKGdyb3VwTmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmV3Q29sbGFwc2VkLmFkZChncm91cE5hbWUpOwogICAgICB9CiAgICAgIHRoaXMuY29sbGFwc2VkR3JvdXBzID0gbmV3Q29sbGFwc2VkOwogICAgfQogICAgdG9nZ2xlTXVsdGlGaWx0ZXIoZmlsdGVyS2V5KSB7CiAgICAgIGNvbnN0IG5ld0NvbGxhcHNlZCA9IG5ldyBTZXQodGhpcy5jb2xsYXBzZWRNdWx0aUZpbHRlcnMpOwogICAgICBpZiAobmV3Q29sbGFwc2VkLmhhcyhmaWx0ZXJLZXkpKSB7CiAgICAgICAgbmV3Q29sbGFwc2VkLmRlbGV0ZShmaWx0ZXJLZXkpOwogICAgICB9IGVsc2UgewogICAgICAgIG5ld0NvbGxhcHNlZC5hZGQoZmlsdGVyS2V5KTsKICAgICAgfQogICAgICB0aGlzLmNvbGxhcHNlZE11bHRpRmlsdGVycyA9IG5ld0NvbGxhcHNlZDsKICAgIH0KICAgIHRvZ2dsZUNvbGxhcHNlKCkgewogICAgICB0aGlzLmNvbGxhcHNlZCA9ICF0aGlzLmNvbGxhcHNlZDsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29sbGFwc2UtY2hhbmdlIiwgewogICAgICAgIGRldGFpbDogeyBjb2xsYXBzZWQ6IHRoaXMuY29sbGFwc2VkIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBzZWxlY3RUYWJJdGVtKGl0ZW0sIGdyb3VwKSB7CiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTsKICAgICAgaXRlbS5hY3Rpb24oKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiaXRlbS1zZWxlY3QiLCB7CiAgICAgICAgZGV0YWlsOiB7IGl0ZW0sIGdyb3VwIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBhc3luYyBoYW5kbGVBY3Rpb25DbGljayhpdGVtKSB7CiAgICAgIGlmIChpdGVtLmNvbmZpcm1NZXNzYWdlKSB7CiAgICAgICAgY29uc3QgY29uZmlybWVkID0gd2luZG93LmNvbmZpcm0oaXRlbS5jb25maXJtTWVzc2FnZSk7CiAgICAgICAgaWYgKCFjb25maXJtZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXdhaXQgaXRlbS5hY3Rpb24oKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYWN0aW9uLWNsaWNrIiwgewogICAgICAgIGRldGFpbDogeyBpdGVtIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVGaWx0ZXJUb2dnbGUoaXRlbSkgewogICAgICBjb25zdCBuZXdBY3RpdmUgPSAhaXRlbS5hY3RpdmU7CiAgICAgIGl0ZW0uYWN0aXZlID0gbmV3QWN0aXZlOwogICAgICBpdGVtLm9uVG9nZ2xlKG5ld0FjdGl2ZSk7CiAgICAgIHRoaXMucmVuZGVyQ291bnRlcisrOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJmaWx0ZXItdG9nZ2xlIiwgewogICAgICAgIGRldGFpbDogeyBpdGVtLCBhY3RpdmU6IG5ld0FjdGl2ZSB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTXVsdGlGaWx0ZXJPcHRpb25Ub2dnbGUoaXRlbSwgb3B0aW9uS2V5KSB7CiAgICAgIGNvbnN0IG9wdGlvbjIgPSBpdGVtLm9wdGlvbnMuZmluZCgob3B0KSA9PiBvcHQua2V5ID09PSBvcHRpb25LZXkpOwogICAgICBpZiAob3B0aW9uMikgewogICAgICAgIG9wdGlvbjIuY2hlY2tlZCA9ICFvcHRpb24yLmNoZWNrZWQ7CiAgICAgIH0KICAgICAgY29uc3Qgc2VsZWN0ZWRLZXlzID0gaXRlbS5vcHRpb25zLmZpbHRlcigob3B0KSA9PiBvcHQuY2hlY2tlZCkubWFwKChvcHQpID0+IG9wdC5rZXkpOwogICAgICBpdGVtLm9uQ2hhbmdlKHNlbGVjdGVkS2V5cyk7CiAgICAgIHRoaXMucmVuZGVyQ291bnRlcisrOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtdWx0aWZpbHRlci1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IGl0ZW0sIHNlbGVjdGVkS2V5cyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTGlua0NsaWNrKGl0ZW0pIHsKICAgICAgY29uc3QgaXNFeHRlcm5hbCA9IGl0ZW0uZXh0ZXJuYWwgPz8gaXRlbS5ocmVmLnN0YXJ0c1dpdGgoImh0dHAiKTsKICAgICAgaWYgKGlzRXh0ZXJuYWwpIHsKICAgICAgICB3aW5kb3cub3BlbihpdGVtLmhyZWYsICJfYmxhbmsiLCAibm9vcGVuZXIsbm9yZWZlcnJlciIpOwogICAgICB9IGVsc2UgewogICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gaXRlbS5ocmVmOwogICAgICB9CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxpbmstY2xpY2siLCB7CiAgICAgICAgZGV0YWlsOiB7IGl0ZW0gfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZUNvbnRleHRNZW51KGV2ZW50LCBpdGVtKSB7CiAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJWaWV3IGRldGFpbHMiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZXllIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkVkaXQiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6cGVuY2lsIgogICAgICAgIH0KICAgICAgXSk7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGF3YWl0IHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAodGhpcy5ncm91cHMubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IGluaXRpYWxDb2xsYXBzZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICAgIGNvbnN0IGluaXRpYWxNdWx0aUZpbHRlckNvbGxhcHNlZCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgICAgICAgdGhpcy5ncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHsKICAgICAgICAgIGlmIChncm91cC5jb2xsYXBzZWQpIHsKICAgICAgICAgICAgaW5pdGlhbENvbGxhcHNlZC5hZGQoZ3JvdXAubmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgICBncm91cC5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgICAgIGlmICgidHlwZSIgaW4gaXRlbSAmJiBpdGVtLnR5cGUgPT09ICJtdWx0aUZpbHRlciIpIHsKICAgICAgICAgICAgICBjb25zdCBtdWx0aUZpbHRlciA9IGl0ZW07CiAgICAgICAgICAgICAgaWYgKG11bHRpRmlsdGVyLmNvbGxhcHNlZCkgewogICAgICAgICAgICAgICAgaW5pdGlhbE11bHRpRmlsdGVyQ29sbGFwc2VkLmFkZChtdWx0aUZpbHRlci5rZXkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5jb2xsYXBzZWRHcm91cHMgPSBpbml0aWFsQ29sbGFwc2VkOwogICAgICAgIHRoaXMuY29sbGFwc2VkTXVsdGlGaWx0ZXJzID0gaW5pdGlhbE11bHRpRmlsdGVyQ29sbGFwc2VkOwogICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEl0ZW0pIHsKICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgdGhpcy5ncm91cHMpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGdyb3VwLml0ZW1zKSB7CiAgICAgICAgICAgICAgY29uc3QgaXRlbVR5cGUgPSAidHlwZSIgaW4gaXRlbSA/IGl0ZW0udHlwZSA6ICJ0YWIiOwogICAgICAgICAgICAgIGlmIChpdGVtVHlwZSA9PT0gInRhYiIgfHwgaXRlbVR5cGUgPT09IHZvaWQgMCkgewogICAgICAgICAgICAgICAgY29uc3QgdGFiSXRlbSA9IGl0ZW07CiAgICAgICAgICAgICAgICBpZiAoIXRhYkl0ZW0uZGlzYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUYWJJdGVtKHRhYkl0ZW0sIGdyb3VwKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk9wdGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gdGhpcy5zZWxlY3Rpb25PcHRpb25zLmZpbmQoKG9wdCkgPT4gISgiZGl2aWRlciIgaW4gb3B0KSk7CiAgICAgICAgaWYgKGZpcnN0T3B0aW9uICYmICF0aGlzLnNlbGVjdGVkSXRlbSkgewogICAgICAgICAgY29uc3QgdGFiSXRlbSA9IHsKICAgICAgICAgICAga2V5OiBmaXJzdE9wdGlvbi5rZXksCiAgICAgICAgICAgIGljb25OYW1lOiBmaXJzdE9wdGlvbi5pY29uTmFtZSwKICAgICAgICAgICAgYWN0aW9uOiBmaXJzdE9wdGlvbi5hY3Rpb24KICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLnNlbGVjdFRhYkl0ZW0odGFiSXRlbSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNBcHB1aVNlY29uZGFyeW1lbnUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLXRhYnMvZGVlcy1hcHB1aS10YWJzLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9fZXNEZWNvcmF0ZTM5ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0MCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVtb0Nsb3NlYWJsZVRhYnMgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZW1vLWNsb3NlYWJsZS10YWJzIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfdGFic19kZWNvcmF0b3JzOwogIGxldCBfdGFic19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYkNvdW50ZXJfZGVjb3JhdG9yczsKICBsZXQgX3RhYkNvdW50ZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlbW9DbG9zZWFibGVUYWJzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3RhYnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3RhYkNvdW50ZXJfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMzkodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM5KHRoaXMsIG51bGwsIF90YWJDb3VudGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYkNvdW50ZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRhYkNvdW50ZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGFiQ291bnRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGFiQ291bnRlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90YWJDb3VudGVyX2luaXRpYWxpemVycywgX3RhYkNvdW50ZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlbW9DbG9zZWFibGVUYWJzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAjdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfdGFic19pbml0aWFsaXplcnMsIFsKICAgICAgeyBrZXk6ICJNYWluIiwgaWNvbk5hbWU6ICJsdWNpZGU6aG9tZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIk1haW4gY2xpY2tlZCIpIH0KICAgIF0pOwogICAgZ2V0IHRhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RhYkNvdW50ZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfdGFiQ291bnRlcl9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCB0YWJDb3VudGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jdGFiQ291bnRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhYkNvdW50ZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYkNvdW50ZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuY29udHJvbHMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgfQogICAgICBidXR0b24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMykiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMykiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiKX07CiAgICAgIH0KICAgICAgLmluZm8gewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsMCwwLDAuMDIpIiwgInJnYmEoMjU1LDI1NSwyNTUsMC4wMikiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIGFkZFRhYigpIHsKICAgICAgdGhpcy50YWJDb3VudGVyKys7CiAgICAgIGNvbnN0IHRhYktleSA9IGBEb2N1bWVudCAke3RoaXMudGFiQ291bnRlcn1gOwogICAgICB0aGlzLnRhYnMgPSBbCiAgICAgICAgLi4udGhpcy50YWJzLAogICAgICAgIHsKICAgICAgICAgIGtleTogdGFiS2V5LAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZSIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKGAke3RhYktleX0gY2xpY2tlZGApLAogICAgICAgICAgY2xvc2VhYmxlOiB0cnVlLAogICAgICAgICAgb25DbG9zZTogKCkgPT4gdGhpcy5yZW1vdmVUYWIodGFiS2V5KQogICAgICAgIH0KICAgICAgXTsKICAgIH0KICAgIHJlbW92ZVRhYih0YWJLZXkpIHsKICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJzLmZpbHRlcigodDkpID0+IHQ5LmtleSAhPT0gdGFiS2V5KTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy1hcHB1aS10YWJzCiAgICAgICAgLnRhYnM9JHt0aGlzLnRhYnN9CiAgICAgICAgQHRhYi1jbG9zZT0keyhlMTEpID0+IHRoaXMucmVtb3ZlVGFiKGUxMS5kZXRhaWwudGFiLmtleSl9CiAgICAgID48L2RlZXMtYXBwdWktdGFicz4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCkgPT4gdGhpcy5hZGRUYWIoKX0+KyBBZGQgTmV3IFRhYjwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaW5mbyI+CiAgICAgICAgQ2xpY2sgdGhlIFggYnV0dG9uIG9uIHRhYnMgdG8gY2xvc2UgdGhlbS4gVGhlICJNYWluIiB0YWIgaXMgbm90IGNsb3NlYWJsZS4KICAgICAgICA8YnI+Q3VycmVudCB0YWJzOiAke3RoaXMudGFicy5sZW5ndGh9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF90YWJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9DbG9zZWFibGVUYWJzMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CnZhciBEZW1vQXV0b0hpZGVUYWJzID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVtby1hdXRvaGlkZS10YWJzIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfdGFic19kZWNvcmF0b3JzOwogIGxldCBfdGFic19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9IaWRlX2RlY29yYXRvcnM7CiAgbGV0IF9hdXRvSGlkZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9IaWRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90aHJlc2hvbGRfZGVjb3JhdG9yczsKICBsZXQgX3RocmVzaG9sZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZW1vQXV0b0hpZGVUYWJzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3RhYnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2F1dG9IaWRlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF90aHJlc2hvbGRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMzkodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM5KHRoaXMsIG51bGwsIF9hdXRvSGlkZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhdXRvSGlkZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXV0b0hpZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXV0b0hpZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmF1dG9IaWRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2F1dG9IaWRlX2luaXRpYWxpemVycywgX2F1dG9IaWRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzkodGhpcywgbnVsbCwgX3RocmVzaG9sZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0aHJlc2hvbGQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRocmVzaG9sZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aHJlc2hvbGQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRocmVzaG9sZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90aHJlc2hvbGRfaW5pdGlhbGl6ZXJzLCBfdGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzkobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZW1vQXV0b0hpZGVUYWJzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAjdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfdGFic19pbml0aWFsaXplcnMsIFsKICAgICAgeyBrZXk6ICJUYWIgMSIsIGljb25OYW1lOiAibHVjaWRlOmZpbGUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJUYWIgMSIpIH0sCiAgICAgIHsga2V5OiAiVGFiIDIiLCBpY29uTmFtZTogImx1Y2lkZTpmaWxlIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiVGFiIDIiKSB9CiAgICBdKTsKICAgIGdldCB0YWJzKCkgewogICAgICByZXR1cm4gdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhYnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDAodGhpcywgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF9hdXRvSGlkZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBhdXRvSGlkZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXV0b0hpZGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfYXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF90aHJlc2hvbGRfaW5pdGlhbGl6ZXJzLCAxKSk7CiAgICBnZXQgdGhyZXNob2xkKCkgewogICAgICByZXR1cm4gdGhpcy4jdGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGhyZXNob2xkKHZhbHVlMikgewogICAgICB0aGlzLiN0aHJlc2hvbGRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAudGFicy1jb250YWluZXIgewogICAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQogICAgICAudGFicy1jb250YWluZXIgZGVlcy1hcHB1aS10YWJzIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAucGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ExYTFhYSIsICIjNzE3MTdhIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgLmNvbnRyb2xzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIGJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICBidXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIpfTsKICAgICAgfQogICAgICBidXR0b24uZGFuZ2VyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC4xKSIsICJyZ2JhKDIzOSwgNjgsIDY4LCAwLjEpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjM5LCA2OCwgNjgsIDAuMykiLCAicmdiYSgyMzksIDY4LCA2OCwgMC4zKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlZjQ0NDQiLCAiI2Y4NzE3MSIpfTsKICAgICAgfQogICAgICBidXR0b24uZGFuZ2VyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC4yKSIsICJyZ2JhKDIzOSwgNjgsIDY4LCAwLjIpIil9OwogICAgICB9CiAgICAgIC5pbmZvIHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLDAsMCwwLjAyKSIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMDIpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KICAgIGAKICAgIF07CiAgICB0YWJDb3VudGVyID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDAodGhpcywgX3RocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyksIDIpOwogICAgYWRkVGFiKCkgewogICAgICB0aGlzLnRhYkNvdW50ZXIrKzsKICAgICAgdGhpcy50YWJzID0gWy4uLnRoaXMudGFicywgewogICAgICAgIGtleTogYFRhYiAke3RoaXMudGFiQ291bnRlcn1gLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZpbGUiLAogICAgICAgIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coYFRhYiAke3RoaXMudGFiQ291bnRlcn1gKQogICAgICB9XTsKICAgIH0KICAgIHJlbW92ZUxhc3RUYWIoKSB7CiAgICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFicy5zbGljZSgwLCAtMSk7CiAgICAgIH0KICAgIH0KICAgIGNsZWFyVGFicygpIHsKICAgICAgdGhpcy50YWJzID0gW107CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IHNob3VsZEhpZGUgPSB0aGlzLmF1dG9IaWRlICYmIHRoaXMudGFicy5sZW5ndGggPD0gdGhpcy50aHJlc2hvbGQ7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0idGFicy1jb250YWluZXIiPgogICAgICAgICR7c2hvdWxkSGlkZSA/IGIyYDxzcGFuIGNsYXNzPSJwbGFjZWhvbGRlciI+VGFicyBoaWRkZW4gKCR7dGhpcy50YWJzLmxlbmd0aH0gdGFicyDiiaQgdGhyZXNob2xkICR7dGhpcy50aHJlc2hvbGR9KTwvc3Bhbj5gIDogYjJgPGRlZXMtYXBwdWktdGFicwogICAgICAgICAgICAgIC50YWJzPSR7dGhpcy50YWJzfQogICAgICAgICAgICAgIC5hdXRvSGlkZT0ke3RoaXMuYXV0b0hpZGV9CiAgICAgICAgICAgICAgLmF1dG9IaWRlVGhyZXNob2xkPSR7dGhpcy50aHJlc2hvbGR9CiAgICAgICAgICAgID48L2RlZXMtYXBwdWktdGFicz5gfQogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCkgPT4gdGhpcy5hZGRUYWIoKX0+KyBBZGQgVGFiPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGFuZ2VyIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnJlbW92ZUxhc3RUYWIoKX0+LSBSZW1vdmUgVGFiPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGFuZ2VyIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNsZWFyVGFicygpfT5DbGVhciBBbGw8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpID0+IHsKICAgICAgICB0aGlzLnRocmVzaG9sZCA9IDA7CiAgICAgIH19PlRocmVzaG9sZDogMDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCkgPT4gewogICAgICAgIHRoaXMudGhyZXNob2xkID0gMTsKICAgICAgfX0+VGhyZXNob2xkOiAxPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgICAgICAgdGhpcy50aHJlc2hvbGQgPSAyOwogICAgICB9fT5UaHJlc2hvbGQ6IDI8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImluZm8iPgogICAgICAgIEF1dG8taGlkZTogJHt0aGlzLmF1dG9IaWRlID8gIk9OIiA6ICJPRkYifSB8IFRocmVzaG9sZDogJHt0aGlzLnRocmVzaG9sZH0gfCBUYWJzOiAke3RoaXMudGFicy5sZW5ndGh9CiAgICAgICAgPGJyPlRhYnMgd2lsbCBoaWRlIHdoZW4gY291bnQg4omkIHRocmVzaG9sZC4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0MChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVtb0F1dG9IaWRlVGFiczIgPSBfY2xhc3NUaGlzOwp9KSgpOwp2YXIgZGVtb0Z1bmMzMCA9ICgpID0+IHsKICBjb25zdCBob3Jpem9udGFsVGFicyA9IFsKICAgIHsga2V5OiAiSG9tZSIsIGljb25OYW1lOiAibHVjaWRlOmhvbWUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJIb21lIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJBbmFseXRpY3MgRGFzaGJvYXJkIiwgaWNvbk5hbWU6ICJsdWNpZGU6bGluZUNoYXJ0IiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQW5hbHl0aWNzIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJSZXBvcnRzIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVRleHQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJSZXBvcnRzIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJVc2VyIFNldHRpbmdzIiwgaWNvbk5hbWU6ICJsdWNpZGU6c2V0dGluZ3MiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJTZXR0aW5ncyBjbGlja2VkIikgfSwKICAgIHsga2V5OiAiSGVscCIsIGljb25OYW1lOiAibHVjaWRlOmhlbHBDaXJjbGUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJIZWxwIGNsaWNrZWQiKSB9CiAgXTsKICBjb25zdCB2ZXJ0aWNhbFRhYnMgPSBbCiAgICB7IGtleTogIlByb2ZpbGUiLCBpY29uTmFtZTogImx1Y2lkZTp1c2VyIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUHJvZmlsZSBjbGlja2VkIikgfSwKICAgIHsga2V5OiAiU2VjdXJpdHkiLCBpY29uTmFtZTogImx1Y2lkZTpzaGllbGQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJTZWN1cml0eSBjbGlja2VkIikgfSwKICAgIHsga2V5OiAiTm90aWZpY2F0aW9ucyIsIGljb25OYW1lOiAibHVjaWRlOmJlbGwiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJOb3RpZmljYXRpb25zIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJJbnRlZ3JhdGlvbnMiLCBpY29uTmFtZTogImx1Y2lkZTpsaW5rIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiSW50ZWdyYXRpb25zIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJBZHZhbmNlZCIsIGljb25OYW1lOiAibHVjaWRlOmNvZGUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJBZHZhbmNlZCBjbGlja2VkIikgfQogIF07CiAgY29uc3Qgbm9JbmRpY2F0b3JUYWJzID0gWwogICAgeyBrZXk6ICJBbGwiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJBbGwgY2xpY2tlZCIpIH0sCiAgICB7IGtleTogIkFjdGl2ZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFjdGl2ZSBjbGlja2VkIikgfSwKICAgIHsga2V5OiAiQ29tcGxldGVkIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQ29tcGxldGVkIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJBcmNoaXZlZCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFyY2hpdmVkIGNsaWNrZWQiKSB9CiAgXTsKICBjb25zdCBkZW1vQ29udGVudCA9ICh0ZXh0OSkgPT4gYjJgCiAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyNHB4OyBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsiPgogICAgICAke3RleHQ5fQogICAgPC9kaXY+CiAgYDsKICByZXR1cm4gYjJgCiAgICA8c3R5bGU+CiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0OHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjhmOWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgIH0KCiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgfQoKICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC50d28tY29sdW1uIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMjAwcHggMWZyOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkhvcml6b250YWwgVGFicyB3aXRoIEFuaW1hdGVkIEluZGljYXRvcjwvZGl2PgogICAgICAgIDxkZWVzLWFwcHVpLXRhYnMgLnRhYnM9JHtob3Jpem9udGFsVGFic30+PC9kZWVzLWFwcHVpLXRhYnM+CiAgICAgICAgJHtkZW1vQ29udGVudCgiU2VsZWN0IGEgdGFiIHRvIHNlZSB0aGUgc21vb3RoIHNsaWRpbmcgYW5pbWF0aW9uIG9mIHRoZSBpbmRpY2F0b3IuIFRoZSBpbmRpY2F0b3IgYXV0b21hdGljYWxseSBhZGp1c3RzIGl0cyB3aWR0aCB0byBtYXRjaCB0aGUgdGFiIGNvbnRlbnQgd2l0aCBtaW5pbWFsIHBhZGRpbmcuIil9CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Q2xvc2VhYmxlIFRhYnMgKEJyb3dzZXItc3R5bGUpPC9kaXY+CiAgICAgICAgPGRlbW8tY2xvc2VhYmxlLXRhYnM+PC9kZW1vLWNsb3NlYWJsZS10YWJzPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkF1dG8taGlkZSBUYWJzPC9kaXY+CiAgICAgICAgPGRlbW8tYXV0b2hpZGUtdGFicz48L2RlbW8tYXV0b2hpZGUtdGFicz4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5WZXJ0aWNhbCBUYWJzIExheW91dDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InR3by1jb2x1bW4iPgogICAgICAgICAgPGRlZXMtYXBwdWktdGFicyAudGFiU3R5bGU9JHsidmVydGljYWwifSAudGFicz0ke3ZlcnRpY2FsVGFic30+PC9kZWVzLWFwcHVpLXRhYnM+CiAgICAgICAgICAke2RlbW9Db250ZW50KCJWZXJ0aWNhbCB0YWJzIHdvcmsgZ3JlYXQgZm9yIHNldHRpbmdzIHBhZ2VzIGFuZCBuYXZpZ2F0aW9uIG1lbnVzLiBUaGUgYW5pbWF0ZWQgaW5kaWNhdG9yIHNtb290aGx5IHRyYW5zaXRpb25zIGJldHdlZW4gc2VsZWN0aW9ucy4iKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5XaXRob3V0IEluZGljYXRvcjwvZGl2PgogICAgICAgIDxkZWVzLWFwcHVpLXRhYnMgLnNob3dUYWJJbmRpY2F0b3I9JHtmYWxzZX0gLnRhYnM9JHtub0luZGljYXRvclRhYnN9PjwvZGVlcy1hcHB1aS10YWJzPgogICAgICAgICR7ZGVtb0NvbnRlbnQoIlRhYnMgY2FuIGFsc28gYmUgdXNlZCB3aXRob3V0IHRoZSBhbmltYXRlZCBpbmRpY2F0b3IgYnkgc2V0dGluZyBzaG93VGFiSW5kaWNhdG9yIHRvIGZhbHNlLiIpfQogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS10YWJzL2RlZXMtYXBwdWktdGFicy5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU0MCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNDEgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aVRhYnMgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWFwcHVpLXRhYnMiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF90YWJzX2RlY29yYXRvcnM7CiAgbGV0IF90YWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGFic19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUYWJfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dUYWJJbmRpY2F0b3JfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dUYWJJbmRpY2F0b3JfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93VGFiSW5kaWNhdG9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJTdHlsZV9kZWNvcmF0b3JzOwogIGxldCBfdGFiU3R5bGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJTdHlsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b0hpZGVfZGVjb3JhdG9yczsKICBsZXQgX2F1dG9IaWRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9IaWRlVGhyZXNob2xkX2RlY29yYXRvcnM7CiAgbGV0IF9hdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9IaWRlVGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jYW5TY3JvbGxMZWZ0X2RlY29yYXRvcnM7CiAgbGV0IF9jYW5TY3JvbGxMZWZ0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2FuU2Nyb2xsTGVmdF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2FuU2Nyb2xsUmlnaHRfZGVjb3JhdG9yczsKICBsZXQgX2NhblNjcm9sbFJpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2FuU2Nyb2xsUmlnaHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0FwcHVpVGFiczIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX3NlbGVjdGVkVGFiX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfc2hvd1RhYkluZGljYXRvcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF90YWJTdHlsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2F1dG9IaWRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2F1dG9IaWRlVGhyZXNob2xkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfY2FuU2Nyb2xsTGVmdF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY2FuU2Nyb2xsUmlnaHRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlNDAodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQwKHRoaXMsIG51bGwsIF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFRhYiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRUYWIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRUYWIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVGFiID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDAodGhpcywgbnVsbCwgX3Nob3dUYWJJbmRpY2F0b3JfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1RhYkluZGljYXRvciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1RhYkluZGljYXRvciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93VGFiSW5kaWNhdG9yLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93VGFiSW5kaWNhdG9yID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dUYWJJbmRpY2F0b3JfaW5pdGlhbGl6ZXJzLCBfc2hvd1RhYkluZGljYXRvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQwKHRoaXMsIG51bGwsIF90YWJTdHlsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0YWJTdHlsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFiU3R5bGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGFiU3R5bGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRhYlN0eWxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYlN0eWxlX2luaXRpYWxpemVycywgX3RhYlN0eWxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDAodGhpcywgbnVsbCwgX2F1dG9IaWRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImF1dG9IaWRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhdXRvSGlkZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hdXRvSGlkZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXV0b0hpZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXV0b0hpZGVfaW5pdGlhbGl6ZXJzLCBfYXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MCh0aGlzLCBudWxsLCBfYXV0b0hpZGVUaHJlc2hvbGRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXV0b0hpZGVUaHJlc2hvbGQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9IaWRlVGhyZXNob2xkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmF1dG9IaWRlVGhyZXNob2xkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hdXRvSGlkZVRocmVzaG9sZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIF9hdXRvSGlkZVRocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQwKHRoaXMsIG51bGwsIF9jYW5TY3JvbGxMZWZ0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNhblNjcm9sbExlZnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNhblNjcm9sbExlZnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY2FuU2Nyb2xsTGVmdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY2FuU2Nyb2xsTGVmdCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jYW5TY3JvbGxMZWZ0X2luaXRpYWxpemVycywgX2NhblNjcm9sbExlZnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MCh0aGlzLCBudWxsLCBfY2FuU2Nyb2xsUmlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY2FuU2Nyb2xsUmlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNhblNjcm9sbFJpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNhblNjcm9sbFJpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jYW5TY3JvbGxSaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jYW5TY3JvbGxSaWdodF9pbml0aWFsaXplcnMsIF9jYW5TY3JvbGxSaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQwKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0FwcHVpVGFiczIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzMwOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX3RhYnNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHRhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfdGFic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IHNlbGVjdGVkVGFiKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZFRhYih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93VGFiSW5kaWNhdG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfc2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9zaG93VGFiSW5kaWNhdG9yX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IHNob3dUYWJJbmRpY2F0b3IoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93VGFiSW5kaWNhdG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1RhYkluZGljYXRvcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd1RhYkluZGljYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RhYlN0eWxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfc2hvd1RhYkluZGljYXRvcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX3RhYlN0eWxlX2luaXRpYWxpemVycywgImhvcml6b250YWwiKSk7CiAgICBnZXQgdGFiU3R5bGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJTdHlsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhYlN0eWxlKHZhbHVlMikgewogICAgICB0aGlzLiN0YWJTdHlsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfdGFiU3R5bGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9hdXRvSGlkZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgYXV0b0hpZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGF1dG9IaWRlKHZhbHVlMikgewogICAgICB0aGlzLiNhdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfYXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9hdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBhdXRvSGlkZVRocmVzaG9sZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXV0b0hpZGVUaHJlc2hvbGQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY2FuU2Nyb2xsTGVmdF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX2F1dG9IaWRlVGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfY2FuU2Nyb2xsTGVmdF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAvLyBTY3JvbGwgc3RhdGUgZm9yIGZhZGUgaW5kaWNhdG9ycwogICAgZ2V0IGNhblNjcm9sbExlZnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjYW5TY3JvbGxMZWZ0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2FuU2Nyb2xsTGVmdCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY2FuU2Nyb2xsTGVmdF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NhblNjcm9sbFJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfY2FuU2Nyb2xsTGVmdF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX2NhblNjcm9sbFJpZ2h0X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBjYW5TY3JvbGxSaWdodCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NhblNjcm9sbFJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2FuU2Nyb2xsUmlnaHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NhblNjcm9sbFJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICByZXNpemVPYnNlcnZlciA9IChfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9jYW5TY3JvbGxSaWdodF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC50YWJzLXdyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC50YWJzLXdyYXBwZXIuaG9yaXpvbnRhbC13cmFwcGVyIHsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAvKiBTY3JvbGwgZmFkZSBpbmRpY2F0b3JzICovCiAgICAgIC5zY3JvbGwtZmFkZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDFweDsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICB9CgogICAgICAuc2Nyb2xsLWZhZGUtbGVmdCB7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsCiAgICAgICAgICAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTYxNjE2Iil9IDAlLAogICAgICAgICAgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjU1LDI1NSwyNTUsMCkiLCAicmdiYSgyMiwyMiwyMiwwKSIpfSAxMDAlKTsKICAgICAgfQoKICAgICAgLnNjcm9sbC1mYWRlLXJpZ2h0IHsKICAgICAgICByaWdodDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwKICAgICAgICAgICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxNjE2MTYiKX0gMCUsCiAgICAgICAgICAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNTUsMjU1LDI1NSwwKSIsICJyZ2JhKDIyLDIyLDIyLDApIil9IDEwMCUpOwogICAgICB9CgogICAgICAuc2Nyb2xsLWZhZGUudmlzaWJsZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC50YWJzQ29udGFpbmVyLmhvcml6b250YWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICAgICAgc2Nyb2xsYmFyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAvKiBTaG93IHNjcm9sbGJhciBvbiBob3ZlciAqLwogICAgICAudGFicy13cmFwcGVyOmhvdmVyIC50YWJzQ29udGFpbmVyLmhvcml6b250YWwgewogICAgICAgIHNjcm9sbGJhci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4yKSIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMikiKX0gdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC50YWJzQ29udGFpbmVyLmhvcml6b250YWw6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBoZWlnaHQ6IDRweDsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAudGFic0NvbnRhaW5lci5ob3Jpem9udGFsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycyBlYXNlOwogICAgICB9CgogICAgICAudGFicy13cmFwcGVyOmhvdmVyIC50YWJzQ29udGFpbmVyLmhvcml6b250YWw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLDAsMCwwLjIpIiwgInJnYmEoMjU1LDI1NSwyNTUsMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnRhYnMtd3JhcHBlcjpob3ZlciAudGFic0NvbnRhaW5lci5ob3Jpem9udGFsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4zNSkiLCAicmdiYSgyNTUsMjU1LDI1NSwwLjM1KSIpfTsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIudmVydGljYWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGdhcDogMnB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMTgxODFiIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgfQoKICAgICAgLnRhYiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAyOwogICAgICB9CgogICAgICAuaG9yaXpvbnRhbCAudGFiIHsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmhvcml6b250YWwgLnRhYjpub3QoOmxhc3QtY2hpbGQpOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAtMnB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQogICAgICAKICAgICAgLmhvcml6b250YWwgLnRhYiAudGFiLWNvbnRlbnQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCAudGFiIHsKICAgICAgICBwYWRkaW5nOiAxMHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnRhYjpob3ZlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDMpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMykiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWI6aG92ZXI6OmFmdGVyLAogICAgICAuaG9yaXpvbnRhbCAudGFiOmhvdmVyICsgLnRhYjo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCAudGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNDQsIDI0NCwgMjQ1LCAwLjUpIiwgInJnYmEoMzksIDM5LCA0MiwgMC41KSIpfTsKICAgICAgfQoKICAgICAgLmhvcml6b250YWwgLnRhYi5zZWxlY3RlZFRhYiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWIuc2VsZWN0ZWRUYWI6OmFmdGVyLAogICAgICAuaG9yaXpvbnRhbCAudGFiLnNlbGVjdGVkVGFiICsgLnRhYjo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCAudGFiLnNlbGVjdGVkVGFiIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLnRhYiBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgfQoKICAgICAgLnRhYkluZGljYXRvciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQogICAgICAKICAgICAgLnRhYkluZGljYXRvci5uby10cmFuc2l0aW9uIHsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICAudGFicy13cmFwcGVyIC50YWJJbmRpY2F0b3IgewogICAgICAgIGhlaWdodDogM3B4OwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweCAzcHggMCAwOwogICAgICAgIHotaW5kZXg6IDM7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbC13cmFwcGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbC13cmFwcGVyIC50YWJJbmRpY2F0b3IgewogICAgICAgIGxlZnQ6IDhweDsKICAgICAgICByaWdodDogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMjcyNzJhIil9OwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wOCk7CiAgICAgIH0KCiAgICAgIC8qIENsb3NlIGJ1dHRvbiAqLwogICAgICAudGFiLWNsb3NlIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cywgYmFja2dyb3VuZCAwLjE1czsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiIzcxNzE3YSIpfTsKICAgICAgfQoKICAgICAgLnRhYjpob3ZlciAudGFiLWNsb3NlIHsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC50YWItY2xvc2U6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4xKSIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWY0NDQ0IiwgIiNmODcxNzEiKX07CiAgICAgIH0KCiAgICAgIC50YWIuc2VsZWN0ZWRUYWIgLnRhYi1jbG9zZSB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAudGFiLnNlbGVjdGVkVGFiOmhvdmVyIC50YWItY2xvc2UgewogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgfQoKICAgICAgLnRhYi5zZWxlY3RlZFRhYiAudGFiLWNsb3NlOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICBpZiAodGhpcy5hdXRvSGlkZSAmJiB0aGlzLnRhYnMubGVuZ3RoIDw9IHRoaXMuYXV0b0hpZGVUaHJlc2hvbGQpIHsKICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgfQogICAgICByZXR1cm4gYjJgCiAgICAgICR7dGhpcy5yZW5kZXJUYWJzV3JhcHBlcigpfQogICAgYDsKICAgIH0KICAgIHJlbmRlclRhYnNXcmFwcGVyKCkgewogICAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLnRhYlN0eWxlID09PSAiaG9yaXpvbnRhbCI7CiAgICAgIGNvbnN0IHdyYXBwZXJDbGFzcyA9IGlzSG9yaXpvbnRhbCA/ICJ0YWJzLXdyYXBwZXIgaG9yaXpvbnRhbC13cmFwcGVyIiA6ICJ2ZXJ0aWNhbC13cmFwcGVyIjsKICAgICAgY29uc3QgY29udGFpbmVyQ2xhc3MgPSBgdGFic0NvbnRhaW5lciAke3RoaXMudGFiU3R5bGV9YDsKICAgICAgaWYgKGlzSG9yaXpvbnRhbCkgewogICAgICAgIHJldHVybiBiMmAKICAgICAgICA8ZGl2IGNsYXNzPSIke3dyYXBwZXJDbGFzc30iPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2Nyb2xsLWZhZGUgc2Nyb2xsLWZhZGUtbGVmdCAke3RoaXMuY2FuU2Nyb2xsTGVmdCA/ICJ2aXNpYmxlIiA6ICIifSI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSIke2NvbnRhaW5lckNsYXNzfSIgQHNjcm9sbD0ke3RoaXMuaGFuZGxlU2Nyb2xsfT4KICAgICAgICAgICAgJHt0aGlzLnRhYnMubWFwKCh0YWIyKSA9PiB0aGlzLnJlbmRlclRhYih0YWIyLCBpc0hvcml6b250YWwpKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2Nyb2xsLWZhZGUgc2Nyb2xsLWZhZGUtcmlnaHQgJHt0aGlzLmNhblNjcm9sbFJpZ2h0ID8gInZpc2libGUiIDogIiJ9Ij48L2Rpdj4KICAgICAgICAgICR7dGhpcy5zaG93VGFiSW5kaWNhdG9yID8gYjJgPGRpdiBjbGFzcz0idGFiSW5kaWNhdG9yIj48L2Rpdj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSIke3dyYXBwZXJDbGFzc30iPgogICAgICAgIDxkaXYgY2xhc3M9IiR7Y29udGFpbmVyQ2xhc3N9Ij4KICAgICAgICAgICR7dGhpcy50YWJzLm1hcCgodGFiMikgPT4gdGhpcy5yZW5kZXJUYWIodGFiMiwgaXNIb3Jpem9udGFsKSl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgJHt0aGlzLnNob3dUYWJJbmRpY2F0b3IgPyBiMmA8ZGl2IGNsYXNzPSJ0YWJJbmRpY2F0b3IiPjwvZGl2PmAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyVGFiKHRhYjIsIGlzSG9yaXpvbnRhbCkgewogICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGFiMiA9PT0gdGhpcy5zZWxlY3RlZFRhYjsKICAgICAgY29uc3QgY2xhc3NlcyA9IGB0YWIgJHtpc1NlbGVjdGVkID8gInNlbGVjdGVkVGFiIiA6ICIifWA7CiAgICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gdGFiMi5jbG9zZWFibGUgPyBiMmAKICAgICAgPHNwYW4gY2xhc3M9InRhYi1jbG9zZSIgQGNsaWNrPSIkeyhlMTEpID0+IHRoaXMuY2xvc2VUYWIoZTExLCB0YWIyKX0iPgogICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOngifSBzdHlsZT0iZm9udC1zaXplOiAxMnB4OyI+PC9kZWVzLWljb24+CiAgICAgIDwvc3Bhbj4KICAgIGAgOiAiIjsKICAgICAgY29uc3QgY29udGVudDMgPSBpc0hvcml6b250YWwgPyBiMmAKICAgICAgPHNwYW4gY2xhc3M9InRhYi1jb250ZW50Ij4KICAgICAgICAke3RoaXMucmVuZGVyVGFiSWNvbih0YWIyKX0KICAgICAgICAke3RhYjIua2V5fQogICAgICA8L3NwYW4+CiAgICAgICR7Y2xvc2VCdXR0b259CiAgICBgIDogYjJgCiAgICAgICR7dGhpcy5yZW5kZXJUYWJJY29uKHRhYjIpfQogICAgICAke3RhYjIua2V5fQogICAgICAke2Nsb3NlQnV0dG9ufQogICAgYDsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9IiR7Y2xhc3Nlc30iCiAgICAgICAgQGNsaWNrPSIkeygpID0+IHRoaXMuc2VsZWN0VGFiKHRhYjIpfSIKICAgICAgPgogICAgICAgICR7Y29udGVudDN9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlclRhYkljb24odGFiMikgewogICAgICByZXR1cm4gdGFiMi5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249JHt0YWIyLmljb25OYW1lfT48L2RlZXMtaWNvbj5gIDogIiI7CiAgICB9CiAgICBzZWxlY3RUYWIodGFiQXJnKSB7CiAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSB0YWJBcmc7CiAgICAgIHRhYkFyZy5hY3Rpb24oKTsKICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICB0aGlzLnNjcm9sbFRhYkludG9WaWV3KHRhYkFyZyk7CiAgICAgIH0pOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogeyB0YWI6IHRhYkFyZyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgY2xvc2VUYWIoZTExLCB0YWIyKSB7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgaWYgKHRhYjIub25DbG9zZSkgewogICAgICAgIHRhYjIub25DbG9zZSgpOwogICAgICB9CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1jbG9zZSIsIHsKICAgICAgICBkZXRhaWw6IHsgdGFiOiB0YWIyIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGlmICh0aGlzLnRhYnMgJiYgdGhpcy50YWJzLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLnNlbGVjdFRhYih0aGlzLnRhYnNbMF0pOwogICAgICB9CiAgICAgIHRoaXMuc2V0dXBSZXNpemVPYnNlcnZlcigpOwogICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsU3RhdGUoKTsKICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHsKICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbnVsbDsKICAgICAgfQogICAgfQogICAgc2V0dXBSZXNpemVPYnNlcnZlcigpIHsKICAgICAgaWYgKHRoaXMudGFiU3R5bGUgIT09ICJob3Jpem9udGFsIikKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsU3RhdGUoKTsKICAgICAgfSk7CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbCIpOwogICAgICBpZiAoY29udGFpbmVyKSB7CiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcik7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVNjcm9sbCA9ICgpID0+IHsKICAgICAgdGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpOwogICAgfTsKICAgIHVwZGF0ZVNjcm9sbFN0YXRlKCkgewogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50YWJzQ29udGFpbmVyLmhvcml6b250YWwiKTsKICAgICAgaWYgKCFjb250YWluZXIpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gY29udGFpbmVyLnNjcm9sbExlZnQ7CiAgICAgIGNvbnN0IHNjcm9sbFdpZHRoID0gY29udGFpbmVyLnNjcm9sbFdpZHRoOwogICAgICBjb25zdCBjbGllbnRXaWR0aCA9IGNvbnRhaW5lci5jbGllbnRXaWR0aDsKICAgICAgY29uc3QgdGhyZXNob2xkID0gMjsKICAgICAgdGhpcy5jYW5TY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdCA+IHRocmVzaG9sZDsKICAgICAgdGhpcy5jYW5TY3JvbGxSaWdodCA9IHNjcm9sbExlZnQgPCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gdGhyZXNob2xkOwogICAgfQogICAgc2Nyb2xsVGFiSW50b1ZpZXcodGFiMikgewogICAgICBpZiAodGhpcy50YWJTdHlsZSAhPT0gImhvcml6b250YWwiKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgdGFiSW5kZXggPSB0aGlzLnRhYnMuaW5kZXhPZih0YWIyKTsKICAgICAgaWYgKHRhYkluZGV4ID09PSAtMSkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbCIpOwogICAgICBjb25zdCB0YWJFbGVtZW50ID0gY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKGAudGFiOm50aC1jaGlsZCgke3RhYkluZGV4ICsgMX0pYCk7CiAgICAgIGlmICh0YWJFbGVtZW50ICYmIGNvbnRhaW5lcikgewogICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgdGFiUmVjdCA9IHRhYkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgaXNGdWxseVZpc2libGUgPSB0YWJSZWN0LmxlZnQgPj0gY29udGFpbmVyUmVjdC5sZWZ0ICYmIHRhYlJlY3QucmlnaHQgPD0gY29udGFpbmVyUmVjdC5yaWdodDsKICAgICAgICBpZiAoIWlzRnVsbHlWaXNpYmxlKSB7CiAgICAgICAgICB0YWJFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICJzbW9vdGgiLCBibG9jazogIm5lYXJlc3QiLCBpbmxpbmU6ICJuZWFyZXN0IiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInRhYnMiKSAmJiB0aGlzLnRhYnMgJiYgdGhpcy50YWJzLmxlbmd0aCA+IDAgJiYgIXRoaXMuc2VsZWN0ZWRUYWIpIHsKICAgICAgICB0aGlzLnNlbGVjdFRhYih0aGlzLnRhYnNbMF0pOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInNlbGVjdGVkVGFiIikgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJ0YWJzIikpIHsKICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgIGlmICghdGhpcy5pbmRpY2F0b3JJbml0aWFsaXplZCAmJiBkb2N1bWVudC5mb250cykgewogICAgICAgICAgYXdhaXQgZG9jdW1lbnQuZm9udHMucmVhZHk7CiAgICAgICAgfQogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICB0aGlzLnVwZGF0ZVRhYkluZGljYXRvcigpOwogICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBpbmRpY2F0b3JJbml0aWFsaXplZCA9IGZhbHNlOwogICAgdXBkYXRlVGFiSW5kaWNhdG9yKCkgewogICAgICBpZiAoIXRoaXMuc2hvdWxkU2hvd0luZGljYXRvcigpKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgc2VsZWN0ZWRUYWJFbGVtZW50ID0gdGhpcy5nZXRTZWxlY3RlZFRhYkVsZW1lbnQoKTsKICAgICAgaWYgKCFzZWxlY3RlZFRhYkVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBpbmRpY2F0b3IgPSB0aGlzLmdldEluZGljYXRvckVsZW1lbnQoKTsKICAgICAgaWYgKCFpbmRpY2F0b3IpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmhhbmRsZUluaXRpYWxUcmFuc2l0aW9uKGluZGljYXRvcik7CiAgICAgIGlmICh0aGlzLnRhYlN0eWxlID09PSAiaG9yaXpvbnRhbCIpIHsKICAgICAgICB0aGlzLnVwZGF0ZUhvcml6b250YWxJbmRpY2F0b3IoaW5kaWNhdG9yLCBzZWxlY3RlZFRhYkVsZW1lbnQpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMudXBkYXRlVmVydGljYWxJbmRpY2F0b3IoaW5kaWNhdG9yLCBzZWxlY3RlZFRhYkVsZW1lbnQpOwogICAgICB9CiAgICAgIGluZGljYXRvci5zdHlsZS5vcGFjaXR5ID0gIjEiOwogICAgfQogICAgc2hvdWxkU2hvd0luZGljYXRvcigpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWIgJiYgdGhpcy5zaG93VGFiSW5kaWNhdG9yICYmIHRoaXMudGFicy5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkVGFiKTsKICAgIH0KICAgIGdldFNlbGVjdGVkVGFiRWxlbWVudCgpIHsKICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMudGFicy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRUYWIpOwogICAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLnRhYlN0eWxlID09PSAiaG9yaXpvbnRhbCI7CiAgICAgIGNvbnN0IHNlbGVjdG9yID0gaXNIb3Jpem9udGFsID8gYC50YWJzLXdyYXBwZXIgLnRhYnNDb250YWluZXIgLnRhYjpudGgtY2hpbGQoJHtzZWxlY3RlZEluZGV4ICsgMX0pYCA6IGAudmVydGljYWwtd3JhcHBlciAudGFic0NvbnRhaW5lciAudGFiOm50aC1jaGlsZCgke3NlbGVjdGVkSW5kZXggKyAxfSlgOwogICAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOwogICAgfQogICAgZ2V0SW5kaWNhdG9yRWxlbWVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIudGFiSW5kaWNhdG9yIik7CiAgICB9CiAgICBoYW5kbGVJbml0aWFsVHJhbnNpdGlvbihpbmRpY2F0b3IpIHsKICAgICAgaWYgKCF0aGlzLmluZGljYXRvckluaXRpYWxpemVkKSB7CiAgICAgICAgaW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoIm5vLXRyYW5zaXRpb24iKTsKICAgICAgICB0aGlzLmluZGljYXRvckluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGluZGljYXRvci5jbGFzc0xpc3QucmVtb3ZlKCJuby10cmFuc2l0aW9uIik7CiAgICAgICAgfSwgNTApOwogICAgICB9CiAgICB9CiAgICB1cGRhdGVIb3Jpem9udGFsSW5kaWNhdG9yKGluZGljYXRvciwgdGFiRWxlbWVudCkgewogICAgICBjb25zdCB0YWJDb250ZW50ID0gdGFiRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIudGFiLWNvbnRlbnQiKTsKICAgICAgaWYgKCF0YWJDb250ZW50KQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgd3JhcHBlclJlY3QgPSBpbmRpY2F0b3IucGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgY29uc3QgY29udGVudFJlY3QgPSB0YWJDb250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCBjb250ZW50TGVmdCA9IGNvbnRlbnRSZWN0LmxlZnQgLSB3cmFwcGVyUmVjdC5sZWZ0OwogICAgICBjb25zdCBpbmRpY2F0b3JXaWR0aCA9IGNvbnRlbnRSZWN0LndpZHRoICsgODsKICAgICAgY29uc3QgaW5kaWNhdG9yTGVmdCA9IGNvbnRlbnRMZWZ0IC0gNDsKICAgICAgaW5kaWNhdG9yLnN0eWxlLndpZHRoID0gYCR7aW5kaWNhdG9yV2lkdGh9cHhgOwogICAgICBpbmRpY2F0b3Iuc3R5bGUubGVmdCA9IGAke2luZGljYXRvckxlZnR9cHhgOwogICAgfQogICAgdXBkYXRlVmVydGljYWxJbmRpY2F0b3IoaW5kaWNhdG9yLCB0YWJFbGVtZW50KSB7CiAgICAgIGNvbnN0IHRhYnNDb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnZlcnRpY2FsLXdyYXBwZXIgLnRhYnNDb250YWluZXIiKTsKICAgICAgaWYgKCF0YWJzQ29udGFpbmVyKQogICAgICAgIHJldHVybjsKICAgICAgaW5kaWNhdG9yLnN0eWxlLnRvcCA9IGAke3RhYkVsZW1lbnQub2Zmc2V0VG9wICsgdGFic0NvbnRhaW5lci5vZmZzZXRUb3B9cHhgOwogICAgICBpbmRpY2F0b3Iuc3R5bGUuaGVpZ2h0ID0gYCR7dGFiRWxlbWVudC5jbGllbnRIZWlnaHR9cHhgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0FwcHVpVGFiczIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktbWFpbmNvbnRlbnQvZGVlcy1hcHB1aS1tYWluY29udGVudC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU0MSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNDIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aU1haW5jb250ZW50ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hcHB1aS1tYWluY29udGVudCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3RhYnNfZGVjb3JhdG9yczsKICBsZXQgX3RhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRUYWJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFRhYl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1RhYnNfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dUYWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1RhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYnNBdXRvSGlkZV9kZWNvcmF0b3JzOwogIGxldCBfdGFic0F1dG9IaWRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGFic0F1dG9IaWRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJzQXV0b0hpZGVUaHJlc2hvbGRfZGVjb3JhdG9yczsKICBsZXQgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzQXBwdWlNYWluY29udGVudDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX3NlbGVjdGVkVGFiX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfc2hvd1RhYnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfdGFic0F1dG9IaWRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX19lc0RlY29yYXRlNDEodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQxKHRoaXMsIG51bGwsIF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFRhYiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRUYWIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRUYWIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVGFiID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDEodGhpcywgbnVsbCwgX3Nob3dUYWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dUYWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93VGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93VGFicywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd1RhYnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1RhYnNfaW5pdGlhbGl6ZXJzLCBfc2hvd1RhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MSh0aGlzLCBudWxsLCBfdGFic0F1dG9IaWRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYnNBdXRvSGlkZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFic0F1dG9IaWRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhYnNBdXRvSGlkZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGFic0F1dG9IaWRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNBdXRvSGlkZV9pbml0aWFsaXplcnMsIF90YWJzQXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MSh0aGlzLCBudWxsLCBfdGFic0F1dG9IaWRlVGhyZXNob2xkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYnNBdXRvSGlkZVRocmVzaG9sZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFic0F1dG9IaWRlVGhyZXNob2xkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhYnNBdXRvSGlkZVRocmVzaG9sZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGFic0F1dG9IaWRlVGhyZXNob2xkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIF90YWJzQXV0b0hpZGVUaHJlc2hvbGRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNBcHB1aU1haW5jb250ZW50MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYAogICAgPGRlZXMtYXBwdWktbWFpbmNvbnRlbnQKICAgICAgLnRhYnM9JHtbCiAgICAgIHsga2V5OiAiT3ZlcnZpZXciLCBpY29uTmFtZTogImx1Y2lkZTpob21lIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiT3ZlcnZpZXciKSB9LAogICAgICB7IGtleTogIkRldGFpbHMiLCBpY29uTmFtZTogImx1Y2lkZTpmaWxlIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiRGV0YWlscyIpIH0sCiAgICAgIHsga2V5OiAiU2V0dGluZ3MiLCBpY29uTmFtZTogImx1Y2lkZTpzZXR0aW5ncyIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlNldHRpbmdzIikgfQogICAgXX0KICAgID4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBzdHlsZT0icGFkZGluZzogNDBweDsgY29sb3I6ICNjY2M7Ij4KICAgICAgICA8aDE+TWFpbiBDb250ZW50IEFyZWE8L2gxPgogICAgICAgIDxwPlRoaXMgaXMgd2hlcmUgeW91ciBhcHBsaWNhdGlvbiBjb250ZW50IGdvZXMuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGVlcy1hcHB1aS1tYWluY29udGVudD4KICBgOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNfaW5pdGlhbGl6ZXJzLCBbCiAgICAgIHsga2V5OiAiXHUyNkEwXHVGRTBGIFBsZWFzZSBzZXQgdGFicyIsIGFjdGlvbjogKCkgPT4gY29uc29sZS53YXJuKCJObyB0YWJzIGNvbmZpZ3VyZWQgZm9yIG1haW5jb250ZW50IikgfQogICAgXSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHRhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Mih0aGlzLCBfdGFic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IHNlbGVjdGVkVGFiKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZFRhYih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93VGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Mih0aGlzLCBfc2hvd1RhYnNfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd1RhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93VGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dUYWJzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93VGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RhYnNBdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3Nob3dUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Mih0aGlzLCBfdGFic0F1dG9IaWRlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCB0YWJzQXV0b0hpZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzQXV0b0hpZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0YWJzQXV0b0hpZGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYnNBdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNBdXRvSGlkZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCB0YWJzQXV0b0hpZGVUaHJlc2hvbGQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzQXV0b0hpZGVUaHJlc2hvbGRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0YWJzQXV0b0hpZGVUaHJlc2hvbGQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byAxZnI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxNjE2MTYiKX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBjb250ZW50czsKICAgICAgfQoKICAgICAgLnRvcGJhciB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGdyaWQtdGVtcGxhdGUtcm93cyAwLjNzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50b3BiYXIgPiAqIHsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICB9CgogICAgICAuY29udGVudC1hcmVhIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtub3RhYnNdKSAudG9wYmFyIHsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDBmcjsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b3BiYXIiPgogICAgICAgICAgPGRlZXMtYXBwdWktdGFicwogICAgICAgICAgICAudGFicz0ke3RoaXMudGFic30KICAgICAgICAgICAgLnNlbGVjdGVkVGFiPSR7dGhpcy5zZWxlY3RlZFRhYn0KICAgICAgICAgICAgLnNob3dUYWJJbmRpY2F0b3I9JHt0cnVlfQogICAgICAgICAgICAudGFiU3R5bGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5hdXRvSGlkZT0ke3RoaXMudGFic0F1dG9IaWRlfQogICAgICAgICAgICAuYXV0b0hpZGVUaHJlc2hvbGQ9JHt0aGlzLnRhYnNBdXRvSGlkZVRocmVzaG9sZH0KICAgICAgICAgICAgQHRhYi1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZVRhYlNlbGVjdChlMTEpfQogICAgICAgICAgICBAdGFiLWNsb3NlPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVUYWJDbG9zZShlMTEpfQogICAgICAgICAgPjwvZGVlcy1hcHB1aS10YWJzPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtYXJlYSI+CiAgICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgICAgICA8c2xvdCBuYW1lPSJjb250ZW50Ij48L3Nsb3Q+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGhhbmRsZVRhYlNlbGVjdChlMTEpIHsKICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IGUxMS5kZXRhaWwudGFiOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZVRhYkNsb3NlKGUxMSkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItY2xvc2UiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygic2hvd1RhYnMiKSkgewogICAgICAgIGlmICh0aGlzLnNob3dUYWJzKSB7CiAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgibm90YWJzIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJub3RhYnMiLCAiIik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGF3YWl0IHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAoIXRoaXMuc2hvd1RhYnMpIHsKICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgibm90YWJzIiwgIiIpOwogICAgICB9CiAgICAgIGNvbnN0IHRhYnNDb21wb25lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS10YWJzIik7CiAgICAgIGlmICh0YWJzQ29tcG9uZW50KSB7CiAgICAgICAgYXdhaXQgdGFic0NvbXBvbmVudC51cGRhdGVDb21wbGV0ZTsKICAgICAgfQogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczQyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQXBwdWlNYWluY29udGVudDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWkvZGVlcy1hcHB1aS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU0MiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNDMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYXBwdWkiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9hcHBiYXJNZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhck1lbnVJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhck1lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXBwYmFyQnJlYWRjcnVtYnNfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhckJyZWFkY3J1bWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXBwYmFyQnJlYWRjcnVtYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJTaG93V2luZG93Q29udHJvbHNfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhclNob3dXaW5kb3dDb250cm9sc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhclNob3dXaW5kb3dDb250cm9sc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXBwYmFyVXNlcl9kZWNvcmF0b3JzOwogIGxldCBfYXBwYmFyVXNlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhclVzZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhclByb2ZpbGVNZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhclByb2ZpbGVNZW51SXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJQcm9maWxlTWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJTaG93U2VhcmNoX2RlY29yYXRvcnM7CiAgbGV0IF9hcHBiYXJTaG93U2VhcmNoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXBwYmFyU2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVMb2dvSWNvbl9kZWNvcmF0b3JzOwogIGxldCBfbWFpbm1lbnVMb2dvSWNvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5tZW51TG9nb0ljb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5tZW51TG9nb1RleHRfZGVjb3JhdG9yczsKICBsZXQgX21haW5tZW51TG9nb1RleHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudUxvZ29UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudUdyb3Vwc19kZWNvcmF0b3JzOwogIGxldCBfbWFpbm1lbnVHcm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudUdyb3Vwc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVCb3R0b21UYWJzX2RlY29yYXRvcnM7CiAgbGV0IF9tYWlubWVudUJvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudUJvdHRvbVRhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5tZW51VGFic19kZWNvcmF0b3JzOwogIGxldCBfbWFpbm1lbnVUYWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudVNlbGVjdGVkVGFiX2RlY29yYXRvcnM7CiAgbGV0IF9tYWlubWVudVNlbGVjdGVkVGFiX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVTZWxlY3RlZFRhYl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVIZWFkaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlY29uZGFyeW1lbnVHcm91cHNfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVHcm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWNvbmRhcnltZW51R3JvdXBzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2RlY29yYXRvcnM7CiAgbGV0IF9zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVDb2xsYXBzZWRfZGVjb3JhdG9yczsKICBsZXQgX21haW5tZW51Q29sbGFwc2VkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVDb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWNvbmRhcnltZW51Q29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudVZpc2libGVfZGVjb3JhdG9yczsKICBsZXQgX21haW5tZW51VmlzaWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5tZW51VmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudVZpc2libGVfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5jb250ZW50VGFic1Zpc2libGVfZGVjb3JhdG9yczsKICBsZXQgX21haW5jb250ZW50VGFic1Zpc2libGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudFRhYnNWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50VGFic0F1dG9IaWRlX2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZW50VGFic0F1dG9IaWRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGVudFRhYnNBdXRvSGlkZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9kZWNvcmF0b3JzOwogIGxldCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2aXR5TG9nVmlzaWJsZV9kZWNvcmF0b3JzOwogIGxldCBfYWN0aXZpdHlMb2dWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlMb2dWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpdml0eUxvZ0NvdW50X2RlY29yYXRvcnM7CiAgbGV0IF9hY3Rpdml0eUxvZ0NvdW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlMb2dDb3VudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbmNvbnRlbnRUYWJzX2RlY29yYXRvcnM7CiAgbGV0IF9tYWluY29udGVudFRhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudFRhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfZGVjb3JhdG9yczsKICBsZXQgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudFNlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVfZGVjb3JhdG9yczsKICBsZXQgX21haW5tZW51X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlY29uZGFyeW1lbnVfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWNvbmRhcnltZW51X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudF9kZWNvcmF0b3JzOwogIGxldCBfbWFpbmNvbnRlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlsb2dFbGVtZW50X2RlY29yYXRvcnM7CiAgbGV0IF9hY3Rpdml0eWxvZ0VsZW1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpdml0eWxvZ0VsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JvdHRvbWJhckVsZW1lbnRfZGVjb3JhdG9yczsKICBsZXQgX2JvdHRvbWJhckVsZW1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib3R0b21iYXJFbGVtZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib3R0b21iYXJWaXNpYmxlX2RlY29yYXRvcnM7CiAgbGV0IF9ib3R0b21iYXJWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYm90dG9tYmFyVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFZpZXdfZGVjb3JhdG9yczsKICBsZXQgX2N1cnJlbnRWaWV3X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFZpZXdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0FwcHVpMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2FwcGJhck1lbnVJdGVtc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfYXBwYmFyQnJlYWRjcnVtYnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2FwcGJhclVzZXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9hcHBiYXJQcm9maWxlTWVudUl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9hcHBiYXJTaG93U2VhcmNoX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX21haW5tZW51TG9nb0ljb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tYWlubWVudUxvZ29UZXh0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbWFpbm1lbnVHcm91cHNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX21haW5tZW51Qm90dG9tVGFic19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfbWFpbm1lbnVUYWJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9tYWlubWVudVNlbGVjdGVkVGFiX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zZWNvbmRhcnltZW51R3JvdXBzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfbWFpbm1lbnVDb2xsYXBzZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9tYWlubWVudVZpc2libGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2Vjb25kYXJ5bWVudVZpc2libGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfbWFpbmNvbnRlbnRUYWJzVmlzaWJsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9jb250ZW50VGFic0F1dG9IaWRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2NvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9hY3Rpdml0eUxvZ1Zpc2libGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2FjdGl2aXR5TG9nQ291bnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX21haW5jb250ZW50VGFic19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfbWFpbmNvbnRlbnRTZWxlY3RlZFRhYl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX2FwcGJhcl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfbWFpbm1lbnVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3NlY29uZGFyeW1lbnVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX21haW5jb250ZW50X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9hY3Rpdml0eWxvZ0VsZW1lbnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2JvdHRvbWJhckVsZW1lbnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2JvdHRvbWJhclZpc2libGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2N1cnJlbnRWaWV3X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJNZW51SXRlbXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyTWVudUl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhcHBiYXJNZW51SXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyTWVudUl0ZW1zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hcHBiYXJNZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXBwYmFyTWVudUl0ZW1zX2luaXRpYWxpemVycywgX2FwcGJhck1lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJCcmVhZGNydW1ic19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhcHBiYXJCcmVhZGNydW1icyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyQnJlYWRjcnVtYnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyQnJlYWRjcnVtYnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFwcGJhckJyZWFkY3J1bWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhckJyZWFkY3J1bWJzX2luaXRpYWxpemVycywgX2FwcGJhckJyZWFkY3J1bWJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzLCBfYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJTaG93V2luZG93Q29udHJvbHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhcHBiYXJTaG93V2luZG93Q29udHJvbHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hcHBiYXJTaG93V2luZG93Q29udHJvbHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2luaXRpYWxpemVycywgX2FwcGJhclNob3dXaW5kb3dDb250cm9sc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJVc2VyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFwcGJhclVzZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFwcGJhclVzZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyVXNlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXBwYmFyVXNlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hcHBiYXJVc2VyX2luaXRpYWxpemVycywgX2FwcGJhclVzZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhcHBiYXJQcm9maWxlTWVudUl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhcHBiYXJQcm9maWxlTWVudUl0ZW1zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFwcGJhclByb2ZpbGVNZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFwcGJhclByb2ZpbGVNZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19pbml0aWFsaXplcnMsIF9hcHBiYXJQcm9maWxlTWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FwcGJhclNob3dTZWFyY2hfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyU2hvd1NlYXJjaCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyU2hvd1NlYXJjaCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hcHBiYXJTaG93U2VhcmNoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hcHBiYXJTaG93U2VhcmNoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhclNob3dTZWFyY2hfaW5pdGlhbGl6ZXJzLCBfYXBwYmFyU2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWlubWVudUxvZ29JY29uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51TG9nb0ljb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5tZW51TG9nb0ljb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbm1lbnVMb2dvSWNvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbm1lbnVMb2dvSWNvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWlubWVudUxvZ29JY29uX2luaXRpYWxpemVycywgX21haW5tZW51TG9nb0ljb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVMb2dvVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYWlubWVudUxvZ29UZXh0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudUxvZ29UZXh0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51TG9nb1RleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1haW5tZW51TG9nb1RleHQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVMb2dvVGV4dF9pbml0aWFsaXplcnMsIF9tYWlubWVudUxvZ29UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX21haW5tZW51R3JvdXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51R3JvdXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudUdyb3VwcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYWlubWVudUdyb3Vwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbm1lbnVHcm91cHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVHcm91cHNfaW5pdGlhbGl6ZXJzLCBfbWFpbm1lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVCb3R0b21UYWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51Qm90dG9tVGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbm1lbnVCb3R0b21UYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51Qm90dG9tVGFicywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbm1lbnVCb3R0b21UYWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5tZW51Qm90dG9tVGFic19pbml0aWFsaXplcnMsIF9tYWlubWVudUJvdHRvbVRhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVUYWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51VGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbm1lbnVUYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51VGFicywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbm1lbnVUYWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5tZW51VGFic19pbml0aWFsaXplcnMsIF9tYWlubWVudVRhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVTZWxlY3RlZFRhYl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYWlubWVudVNlbGVjdGVkVGFiIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudVNlbGVjdGVkVGFiIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51U2VsZWN0ZWRUYWIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1haW5tZW51U2VsZWN0ZWRUYWIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVTZWxlY3RlZFRhYl9pbml0aWFsaXplcnMsIF9tYWlubWVudVNlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX3NlY29uZGFyeW1lbnVIZWFkaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlY29uZGFyeW1lbnVIZWFkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWNvbmRhcnltZW51SGVhZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWNvbmRhcnltZW51SGVhZGluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2Vjb25kYXJ5bWVudUhlYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfaW5pdGlhbGl6ZXJzLCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfc2Vjb25kYXJ5bWVudUdyb3Vwc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWNvbmRhcnltZW51R3JvdXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWNvbmRhcnltZW51R3JvdXBzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlY29uZGFyeW1lbnVHcm91cHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlY29uZGFyeW1lbnVHcm91cHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2Vjb25kYXJ5bWVudUdyb3Vwc19pbml0aWFsaXplcnMsIF9zZWNvbmRhcnltZW51R3JvdXBzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1faW5pdGlhbGl6ZXJzLCBfc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWlubWVudUNvbGxhcHNlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYWlubWVudUNvbGxhcHNlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbm1lbnVDb2xsYXBzZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbm1lbnVDb2xsYXBzZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1haW5tZW51Q29sbGFwc2VkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5tZW51Q29sbGFwc2VkX2luaXRpYWxpemVycywgX21haW5tZW51Q29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2Vjb25kYXJ5bWVudUNvbGxhcHNlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2Vjb25kYXJ5bWVudUNvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWNvbmRhcnltZW51Q29sbGFwc2VkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWNvbmRhcnltZW51Q29sbGFwc2VkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWlubWVudVZpc2libGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbm1lbnVWaXNpYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudVZpc2libGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbm1lbnVWaXNpYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWlubWVudVZpc2libGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgX21haW5tZW51VmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9zZWNvbmRhcnltZW51VmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWNvbmRhcnltZW51VmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2Vjb25kYXJ5bWVudVZpc2libGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2Vjb25kYXJ5bWVudVZpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlY29uZGFyeW1lbnVWaXNpYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX21haW5jb250ZW50VGFic1Zpc2libGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbmNvbnRlbnRUYWJzVmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbmNvbnRlbnRUYWJzVmlzaWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYWluY29udGVudFRhYnNWaXNpYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWluY29udGVudFRhYnNWaXNpYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5jb250ZW50VGFic1Zpc2libGVfaW5pdGlhbGl6ZXJzLCBfbWFpbmNvbnRlbnRUYWJzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9jb250ZW50VGFic0F1dG9IaWRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRlbnRUYWJzQXV0b0hpZGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRlbnRUYWJzQXV0b0hpZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29udGVudFRhYnNBdXRvSGlkZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29udGVudFRhYnNBdXRvSGlkZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZW50VGFic0F1dG9IaWRlX2luaXRpYWxpemVycywgX2NvbnRlbnRUYWJzQXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIF9jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FjdGl2aXR5TG9nVmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3Rpdml0eUxvZ1Zpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2aXR5TG9nVmlzaWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3Rpdml0eUxvZ1Zpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2aXR5TG9nVmlzaWJsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3Rpdml0eUxvZ1Zpc2libGVfaW5pdGlhbGl6ZXJzLCBfYWN0aXZpdHlMb2dWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FjdGl2aXR5TG9nQ291bnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZpdHlMb2dDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZpdHlMb2dDb3VudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3Rpdml0eUxvZ0NvdW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hY3Rpdml0eUxvZ0NvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2aXR5TG9nQ291bnRfaW5pdGlhbGl6ZXJzLCBfYWN0aXZpdHlMb2dDb3VudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWluY29udGVudFRhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbmNvbnRlbnRUYWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWluY29udGVudFRhYnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbmNvbnRlbnRUYWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWluY29udGVudFRhYnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbmNvbnRlbnRUYWJzX2luaXRpYWxpemVycywgX21haW5jb250ZW50VGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWluY29udGVudFNlbGVjdGVkVGFiX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5jb250ZW50U2VsZWN0ZWRUYWIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5jb250ZW50U2VsZWN0ZWRUYWIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbmNvbnRlbnRTZWxlY3RlZFRhYiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbmNvbnRlbnRTZWxlY3RlZFRhYiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWluY29udGVudFNlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYXBwYmFyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFwcGJhciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFwcGJhciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXBwYmFyID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhcl9pbml0aWFsaXplcnMsIF9hcHBiYXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbm1lbnUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5tZW51IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWlubWVudSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWlubWVudV9pbml0aWFsaXplcnMsIF9tYWlubWVudV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9zZWNvbmRhcnltZW51X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlY29uZGFyeW1lbnUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlY29uZGFyeW1lbnUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2Vjb25kYXJ5bWVudSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2Vjb25kYXJ5bWVudSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWNvbmRhcnltZW51X2luaXRpYWxpemVycywgX3NlY29uZGFyeW1lbnVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbmNvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbmNvbnRlbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5jb250ZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5jb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWluY29udGVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWluY29udGVudF9pbml0aWFsaXplcnMsIF9tYWluY29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hY3Rpdml0eWxvZ0VsZW1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZpdHlsb2dFbGVtZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhY3Rpdml0eWxvZ0VsZW1lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZpdHlsb2dFbGVtZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hY3Rpdml0eWxvZ0VsZW1lbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWN0aXZpdHlsb2dFbGVtZW50X2luaXRpYWxpemVycywgX2FjdGl2aXR5bG9nRWxlbWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9ib3R0b21iYXJFbGVtZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJvdHRvbWJhckVsZW1lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJvdHRvbWJhckVsZW1lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYm90dG9tYmFyRWxlbWVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYm90dG9tYmFyRWxlbWVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ib3R0b21iYXJFbGVtZW50X2luaXRpYWxpemVycywgX2JvdHRvbWJhckVsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYm90dG9tYmFyVmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJib3R0b21iYXJWaXNpYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJib3R0b21iYXJWaXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJvdHRvbWJhclZpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJvdHRvbWJhclZpc2libGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYm90dG9tYmFyVmlzaWJsZV9pbml0aWFsaXplcnMsIF9ib3R0b21iYXJWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2N1cnJlbnRWaWV3X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRWaWV3Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXJyZW50VmlldyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50Vmlldywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VycmVudFZpZXcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudFZpZXdfaW5pdGlhbGl6ZXJzLCBfY3VycmVudFZpZXdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNBcHB1aTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI3OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBSRUFDVElWRSBPQlNFUlZBQkxFUyAoUnhKUyBTdWJqZWN0cykKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLyoqIE9ic2VydmFibGUgc3RyZWFtIG9mIHZpZXcgbGlmZWN5Y2xlIGV2ZW50cyAqLwogICAgdmlld0xpZmVjeWNsZSQgPSBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cngucnhqcy5TdWJqZWN0KCk7CiAgICAvKiogT2JzZXJ2YWJsZSBzdHJlYW0gb2YgdmlldyBjaGFuZ2UgZXZlbnRzICovCiAgICB2aWV3Q2hhbmdlZCQgPSBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cngucnhqcy5TdWJqZWN0KCk7CiAgICAjYXBwYmFyTWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJNZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIElOVEVSTkFMIFBST1BFUlRJRVMgKFByb3BlcnRpZXMgZm9yIGNoaWxkIGNvbXBvbmVudHMpCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFByb3BlcnRpZXMgZm9yIGFwcGJhcgogICAgZ2V0IGFwcGJhck1lbnVJdGVtcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FwcGJhck1lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFwcGJhck1lbnVJdGVtcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXBwYmFyTWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYXBwYmFyQnJlYWRjcnVtYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJNZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJCcmVhZGNydW1ic19pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgYXBwYmFyQnJlYWRjcnVtYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhcHBiYXJCcmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFwcGJhckJyZWFkY3J1bWJzKHZhbHVlMikgewogICAgICB0aGlzLiNhcHBiYXJCcmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJCcmVhZGNydW1ic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzLCAiID4gIikpOwogICAgZ2V0IGFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3IoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FwcGJhclNob3dXaW5kb3dDb250cm9sc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJTaG93V2luZG93Q29udHJvbHNfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzKCkgewogICAgICByZXR1cm4gdGhpcy4jYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzKHZhbHVlMikgewogICAgICB0aGlzLiNhcHBiYXJTaG93V2luZG93Q29udHJvbHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhcHBiYXJVc2VyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyVXNlcl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IGFwcGJhclVzZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhcHBiYXJVc2VyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXBwYmFyVXNlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXBwYmFyVXNlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FwcGJhclByb2ZpbGVNZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJVc2VyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgYXBwYmFyUHJvZmlsZU1lbnVJdGVtcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FwcGJhclByb2ZpbGVNZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhcHBiYXJQcm9maWxlTWVudUl0ZW1zKHZhbHVlMikgewogICAgICB0aGlzLiNhcHBiYXJQcm9maWxlTWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYXBwYmFyU2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhclByb2ZpbGVNZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJTaG93U2VhcmNoX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBhcHBiYXJTaG93U2VhcmNoKCkgewogICAgICByZXR1cm4gdGhpcy4jYXBwYmFyU2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFwcGJhclNob3dTZWFyY2godmFsdWUyKSB7CiAgICAgIHRoaXMuI2FwcGJhclNob3dTZWFyY2hfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWlubWVudUxvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyU2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51TG9nb0ljb25faW5pdGlhbGl6ZXJzLCAiIikpOwogICAgLy8gUHJvcGVydGllcyBmb3IgbWFpbm1lbnUKICAgIGdldCBtYWlubWVudUxvZ29JY29uKCkgewogICAgICByZXR1cm4gdGhpcy4jbWFpbm1lbnVMb2dvSWNvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1haW5tZW51TG9nb0ljb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5tZW51TG9nb0ljb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWlubWVudUxvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVMb2dvSWNvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51TG9nb1RleHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IG1haW5tZW51TG9nb1RleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYWlubWVudUxvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbm1lbnVMb2dvVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbm1lbnVMb2dvVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21haW5tZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVMb2dvVGV4dF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51R3JvdXBzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBtYWlubWVudUdyb3VwcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbm1lbnVHcm91cHModmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5tZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbm1lbnVCb3R0b21UYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudUJvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IG1haW5tZW51Qm90dG9tVGFicygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51Qm90dG9tVGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1haW5tZW51Qm90dG9tVGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbm1lbnVCb3R0b21UYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbm1lbnVUYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVCb3R0b21UYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVUYWJzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBtYWlubWVudVRhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYWlubWVudVRhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYWlubWVudVRhYnModmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5tZW51VGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21haW5tZW51U2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudVRhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudVNlbGVjdGVkVGFiX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgbWFpbm1lbnVTZWxlY3RlZFRhYigpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51U2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYWlubWVudVNlbGVjdGVkVGFiKHZhbHVlMikgewogICAgICB0aGlzLiNtYWlubWVudVNlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2Vjb25kYXJ5bWVudUhlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudVNlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgLy8gUHJvcGVydGllcyBmb3Igc2Vjb25kYXJ5bWVudQogICAgZ2V0IHNlY29uZGFyeW1lbnVIZWFkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudUhlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWNvbmRhcnltZW51SGVhZGluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2Vjb25kYXJ5bWVudUhlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWNvbmRhcnltZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9zZWNvbmRhcnltZW51R3JvdXBzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBzZWNvbmRhcnltZW51R3JvdXBzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudUdyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlY29uZGFyeW1lbnVHcm91cHModmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlY29uZGFyeW1lbnVHcm91cHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUdyb3Vwc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBzZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtKCkgewogICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0odmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWlubWVudUNvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudUNvbGxhcHNlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAvLyBDb2xsYXBzZSBzdGF0ZXMKICAgIGdldCBtYWlubWVudUNvbGxhcHNlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51Q29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbm1lbnVDb2xsYXBzZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5tZW51Q29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51Q29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgc2Vjb25kYXJ5bWVudUNvbGxhcHNlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWNvbmRhcnltZW51Q29sbGFwc2VkKHZhbHVlMikgewogICAgICB0aGlzLiNzZWNvbmRhcnltZW51Q29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbm1lbnVWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51VmlzaWJsZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIC8vIFZpc2liaWxpdHkgc3RhdGVzCiAgICBnZXQgbWFpbm1lbnVWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jbWFpbm1lbnVWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbm1lbnVWaXNpYmxlKHZhbHVlMikgewogICAgICB0aGlzLiNtYWlubWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWNvbmRhcnltZW51VmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51VmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IHNlY29uZGFyeW1lbnVWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWNvbmRhcnltZW51VmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2Vjb25kYXJ5bWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWluY29udGVudFRhYnNWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWluY29udGVudFRhYnNWaXNpYmxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IG1haW5jb250ZW50VGFic1Zpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYWluY29udGVudFRhYnNWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbmNvbnRlbnRUYWJzVmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbmNvbnRlbnRUYWJzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRlbnRUYWJzQXV0b0hpZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWluY29udGVudFRhYnNWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfY29udGVudFRhYnNBdXRvSGlkZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgY29udGVudFRhYnNBdXRvSGlkZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvbnRlbnRUYWJzQXV0b0hpZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb250ZW50VGFic0F1dG9IaWRlKHZhbHVlMikgewogICAgICB0aGlzLiNjb250ZW50VGFic0F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2NvbnRlbnRUYWJzQXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkX2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IGNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FjdGl2aXR5TG9nVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2NvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eUxvZ1Zpc2libGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgLy8gQWN0aXZpdHkgbG9nIHZpc2liaWxpdHkgYW5kIGNvdW50CiAgICBnZXQgYWN0aXZpdHlMb2dWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZpdHlMb2dWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWN0aXZpdHlMb2dWaXNpYmxlKHZhbHVlMikgewogICAgICB0aGlzLiNhY3Rpdml0eUxvZ1Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhY3Rpdml0eUxvZ0NvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYWN0aXZpdHlMb2dWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYWN0aXZpdHlMb2dDb3VudF9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBhY3Rpdml0eUxvZ0NvdW50KCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZpdHlMb2dDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjdGl2aXR5TG9nQ291bnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2aXR5TG9nQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWluY29udGVudFRhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eUxvZ0NvdW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRUYWJzX2luaXRpYWxpemVycywgW10pKTsKICAgIC8vIFByb3BlcnRpZXMgZm9yIG1haW5jb250ZW50CiAgICBnZXQgbWFpbmNvbnRlbnRUYWJzKCkgewogICAgICByZXR1cm4gdGhpcy4jbWFpbmNvbnRlbnRUYWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbmNvbnRlbnRUYWJzKHZhbHVlMikgewogICAgICB0aGlzLiNtYWluY29udGVudFRhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWluY29udGVudFNlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRTZWxlY3RlZFRhYl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IG1haW5jb250ZW50U2VsZWN0ZWRUYWIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYWluY29udGVudFNlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbmNvbnRlbnRTZWxlY3RlZFRhYih2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbmNvbnRlbnRTZWxlY3RlZFRhYl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FwcGJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIC8vIFJlZmVyZW5jZXMgdG8gY2hpbGQgY29tcG9uZW50cwogICAgZ2V0IGFwcGJhcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FwcGJhcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFwcGJhcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXBwYmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbm1lbnVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudV9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IG1haW5tZW51KCkgewogICAgICByZXR1cm4gdGhpcy4jbWFpbm1lbnVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYWlubWVudSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbm1lbnVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWNvbmRhcnltZW51X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9zZWNvbmRhcnltZW51X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgc2Vjb25kYXJ5bWVudSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlY29uZGFyeW1lbnVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWNvbmRhcnltZW51KHZhbHVlMikgewogICAgICB0aGlzLiNzZWNvbmRhcnltZW51X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbmNvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9zZWNvbmRhcnltZW51X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBtYWluY29udGVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5jb250ZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbmNvbnRlbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5jb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYWN0aXZpdHlsb2dFbGVtZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eWxvZ0VsZW1lbnRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBhY3Rpdml0eWxvZ0VsZW1lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhY3Rpdml0eWxvZ0VsZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3Rpdml0eWxvZ0VsZW1lbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2aXR5bG9nRWxlbWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2JvdHRvbWJhckVsZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eWxvZ0VsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9ib3R0b21iYXJFbGVtZW50X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgYm90dG9tYmFyRWxlbWVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2JvdHRvbWJhckVsZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBib3R0b21iYXJFbGVtZW50KHZhbHVlMikgewogICAgICB0aGlzLiNib3R0b21iYXJFbGVtZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYm90dG9tYmFyVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2JvdHRvbWJhckVsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9ib3R0b21iYXJWaXNpYmxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IGJvdHRvbWJhclZpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNib3R0b21iYXJWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYm90dG9tYmFyVmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYm90dG9tYmFyVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1cnJlbnRWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYm90dG9tYmFyVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2N1cnJlbnRWaWV3X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAvLyBDdXJyZW50IHZpZXcgc3RhdGUKICAgIGdldCBjdXJyZW50VmlldygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRWaWV3X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VycmVudFZpZXcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1cnJlbnRWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBJbnRlcm5hbCBzZXJ2aWNlcwogICAgdmlld1JlZ2lzdHJ5ID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2N1cnJlbnRWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzKSwgbmV3IFZpZXdSZWdpc3RyeSgpKTsKICAgIHJvdXRlckNsZWFudXAgPSBudWxsOwogICAgc2VhcmNoQ2FsbGJhY2sgPSBudWxsOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjBmMGYwIiwgIiMxYTFhMWEiKX07CiAgICAgIH0KICAgICAgLm1haW5ncmlkIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA0MHB4OwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gNDBweCAtIDI0cHgpOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgLyogZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIHNldCBkeW5hbWljYWxseSBpbiB0ZW1wbGF0ZSAqLwogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogMWZyOwogICAgICAgIHRyYW5zaXRpb246IGdyaWQtdGVtcGxhdGUtY29sdW1ucyAwLjNzIGVhc2UsIGhlaWdodCAwLjNzIGVhc2U7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2JvdHRvbWJhci1oaWRkZW5dKSAubWFpbmdyaWQgewogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gNDBweCk7CiAgICAgIH0KCiAgICAgIGRlZXMtYXBwdWktYm90dG9tYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgei1pbmRleDogNDsKICAgICAgfQoKICAgICAgLyogWi1pbmRleCBsYXllcmluZyBmb3IgcHJvcGVyIHN0YWNraW5nICovCiAgICAgIC5tYWluZ3JpZCA+IGRlZXMtYXBwdWktbWFpbm1lbnUgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAzOwogICAgICB9CgogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAyOwogICAgICB9CgogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLW1haW5jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICB9CgogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLWFjdGl2aXR5bG9nIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLCB0cmFuc2Zvcm0gMC4zcyBlYXNlOwogICAgICB9CgogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLWFjdGl2aXR5bG9nLmhpZGRlbiB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjBweCk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tYWluZ3JpZCA+IGRlZXMtYXBwdWktYWN0aXZpdHlsb2cudmlzaWJsZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CiAgICAgIH0KCiAgICAgIC8qIFZpZXcgY29udGFpbmVyIGZvciBkeW5hbWljYWxseSBsb2FkZWQgdmlld3MgKi8KICAgICAgLnZpZXctY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBjb250ZW50czsKICAgICAgfQoKICAgICAgLnZpZXctY29udGFpbmVyOmVtcHR5IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkZWVzLWFwcHVpLWFwcGJhcgogICAgICAgIC5tZW51SXRlbXM9JHt0aGlzLmFwcGJhck1lbnVJdGVtc30KICAgICAgICAuYnJlYWRjcnVtYnM9JHt0aGlzLmFwcGJhckJyZWFkY3J1bWJzfQogICAgICAgIC5icmVhZGNydW1iU2VwYXJhdG9yPSR7dGhpcy5hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yfQogICAgICAgIC5zaG93V2luZG93Q29udHJvbHM9JHt0aGlzLmFwcGJhclNob3dXaW5kb3dDb250cm9sc30KICAgICAgICAudXNlcj0ke3RoaXMuYXBwYmFyVXNlcn0KICAgICAgICAucHJvZmlsZU1lbnVJdGVtcz0ke3RoaXMuYXBwYmFyUHJvZmlsZU1lbnVJdGVtc30KICAgICAgICAuc2hvd1NlYXJjaD0ke3RoaXMuYXBwYmFyU2hvd1NlYXJjaH0KICAgICAgICAuc2hvd0FjdGl2aXR5TG9nVG9nZ2xlPSR7dHJ1ZX0KICAgICAgICAuYWN0aXZpdHlMb2dDb3VudD0ke3RoaXMuYWN0aXZpdHlMb2dDb3VudH0KICAgICAgICAuYWN0aXZpdHlMb2dBY3RpdmU9JHt0aGlzLmFjdGl2aXR5TG9nVmlzaWJsZX0KICAgICAgICBAbWVudS1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUFwcGJhck1lbnVTZWxlY3QoZTExKX0KICAgICAgICBAYnJlYWRjcnVtYi1uYXZpZ2F0ZT0keyhlMTEpID0+IHRoaXMuaGFuZGxlQXBwYmFyQnJlYWRjcnVtYk5hdmlnYXRlKGUxMSl9CiAgICAgICAgQHNlYXJjaC1jbGljaz0keygpID0+IHRoaXMuaGFuZGxlQXBwYmFyU2VhcmNoQ2xpY2soKX0KICAgICAgICBAc2VhcmNoLXF1ZXJ5PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVBcHBiYXJTZWFyY2hRdWVyeShlMTEpfQogICAgICAgIEB1c2VyLW1lbnUtb3Blbj0keygpID0+IHRoaXMuaGFuZGxlQXBwYmFyVXNlck1lbnVPcGVuKCl9CiAgICAgICAgQHByb2ZpbGUtbWVudS1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUFwcGJhclByb2ZpbGVNZW51U2VsZWN0KGUxMSl9CiAgICAgICAgQGFjdGl2aXR5LXRvZ2dsZT0keygpID0+IHRoaXMudG9nZ2xlQWN0aXZpdHlMb2coKX0KICAgICAgPjwvZGVlcy1hcHB1aS1hcHBiYXI+CiAgICAgIDxkaXYgY2xhc3M9Im1haW5ncmlkIiBzdHlsZT0iZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIGF1dG8gMWZyICR7dGhpcy5hY3Rpdml0eUxvZ1Zpc2libGUgPyAiMjgwcHgiIDogIjBweCJ9OyI+CiAgICAgICAgJHt0aGlzLm1haW5tZW51VmlzaWJsZSA/IGIyYAogICAgICAgICAgPGRlZXMtYXBwdWktbWFpbm1lbnUKICAgICAgICAgICAgLmxvZ29JY29uPSR7dGhpcy5tYWlubWVudUxvZ29JY29ufQogICAgICAgICAgICAubG9nb1RleHQ9JHt0aGlzLm1haW5tZW51TG9nb1RleHR9CiAgICAgICAgICAgIC5tZW51R3JvdXBzPSR7dGhpcy5tYWlubWVudUdyb3Vwc30KICAgICAgICAgICAgLmJvdHRvbVRhYnM9JHt0aGlzLm1haW5tZW51Qm90dG9tVGFic30KICAgICAgICAgICAgLnRhYnM9JHt0aGlzLm1haW5tZW51VGFic30KICAgICAgICAgICAgLnNlbGVjdGVkVGFiPSR7dGhpcy5tYWlubWVudVNlbGVjdGVkVGFifQogICAgICAgICAgICAuY29sbGFwc2VkPSR7dGhpcy5tYWlubWVudUNvbGxhcHNlZH0KICAgICAgICAgICAgQHRhYi1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZU1haW5tZW51VGFiU2VsZWN0KGUxMSl9CiAgICAgICAgICAgIEBjb2xsYXBzZS1jaGFuZ2U9JHsoZTExKSA9PiB0aGlzLmhhbmRsZU1haW5tZW51Q29sbGFwc2VDaGFuZ2UoZTExKX0KICAgICAgICAgID48L2RlZXMtYXBwdWktbWFpbm1lbnU+CiAgICAgICAgYCA6ICIifQogICAgICAgICR7dGhpcy5zZWNvbmRhcnltZW51VmlzaWJsZSA/IGIyYAogICAgICAgICAgPGRlZXMtYXBwdWktc2Vjb25kYXJ5bWVudQogICAgICAgICAgICAuaGVhZGluZz0ke3RoaXMuc2Vjb25kYXJ5bWVudUhlYWRpbmd9CiAgICAgICAgICAgIC5ncm91cHM9JHt0aGlzLnNlY29uZGFyeW1lbnVHcm91cHN9CiAgICAgICAgICAgIC5zZWxlY3RlZEl0ZW09JHt0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW19CiAgICAgICAgICAgIC5jb2xsYXBzZWQ9JHt0aGlzLnNlY29uZGFyeW1lbnVDb2xsYXBzZWR9CiAgICAgICAgICAgIEBpdGVtLXNlbGVjdD0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2Vjb25kYXJ5bWVudUl0ZW1TZWxlY3QoZTExKX0KICAgICAgICAgICAgQGNvbGxhcHNlLWNoYW5nZT0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2Vjb25kYXJ5bWVudUNvbGxhcHNlQ2hhbmdlKGUxMSl9CiAgICAgICAgICA+PC9kZWVzLWFwcHVpLXNlY29uZGFyeW1lbnU+CiAgICAgICAgYCA6ICIifQogICAgICAgIDxkZWVzLWFwcHVpLW1haW5jb250ZW50CiAgICAgICAgICAudGFicz0ke3RoaXMubWFpbmNvbnRlbnRUYWJzfQogICAgICAgICAgLnNlbGVjdGVkVGFiPSR7dGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFifQogICAgICAgICAgLnNob3dUYWJzPSR7dGhpcy5tYWluY29udGVudFRhYnNWaXNpYmxlfQogICAgICAgICAgLnRhYnNBdXRvSGlkZT0ke3RoaXMuY29udGVudFRhYnNBdXRvSGlkZX0KICAgICAgICAgIC50YWJzQXV0b0hpZGVUaHJlc2hvbGQ9JHt0aGlzLmNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGR9CiAgICAgICAgICBAdGFiLXNlbGVjdD0keyhlMTEpID0+IHRoaXMuaGFuZGxlQ29udGVudFRhYlNlbGVjdChlMTEpfQogICAgICAgICAgQHRhYi1jbG9zZT0keyhlMTEpID0+IHRoaXMuaGFuZGxlQ29udGVudFRhYkNsb3NlKGUxMSl9CiAgICAgICAgPgogICAgICAgICAgPGRpdiBjbGFzcz0idmlldy1jb250YWluZXIiPjwvZGl2PgogICAgICAgICAgPHNsb3QgbmFtZT0ibWFpbmNvbnRlbnQiPjwvc2xvdD4KICAgICAgICA8L2RlZXMtYXBwdWktbWFpbmNvbnRlbnQ+CiAgICAgICAgPGRlZXMtYXBwdWktYWN0aXZpdHlsb2cKICAgICAgICAgIGNsYXNzPSIke3RoaXMuYWN0aXZpdHlMb2dWaXNpYmxlID8gInZpc2libGUiIDogImhpZGRlbiJ9IgogICAgICAgID48L2RlZXMtYXBwdWktYWN0aXZpdHlsb2c+CiAgICAgIDwvZGl2PgogICAgICAke3RoaXMuYm90dG9tYmFyVmlzaWJsZSA/IGIyYAogICAgICAgIDxkZWVzLWFwcHVpLWJvdHRvbWJhcj48L2RlZXMtYXBwdWktYm90dG9tYmFyPgogICAgICBgIDogIiJ9CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLmFwcGJhciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLWFwcHVpLWFwcGJhciIpOwogICAgICB0aGlzLm1haW5tZW51ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktbWFpbm1lbnUiKTsKICAgICAgdGhpcy5zZWNvbmRhcnltZW51ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktc2Vjb25kYXJ5bWVudSIpOwogICAgICB0aGlzLm1haW5jb250ZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktbWFpbmNvbnRlbnQiKTsKICAgICAgdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS1hY3Rpdml0eWxvZyIpOwogICAgICB0aGlzLmJvdHRvbWJhckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS1ib3R0b21iYXIiKTsKICAgICAgaWYgKHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50KSB7CiAgICAgICAgdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuZW50cmllcyQuc3Vic2NyaWJlKChlbnRyaWVzKSA9PiB7CiAgICAgICAgICB0aGlzLmFjdGl2aXR5TG9nQ291bnQgPSBlbnRyaWVzLmxlbmd0aDsKICAgICAgICB9KTsKICAgICAgfQogICAgICB0aGlzLnZpZXdSZWdpc3RyeS5zZXRBcHB1aVJlZih0aGlzKTsKICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAodGhpcy5yb3V0ZXJDbGVhbnVwKSB7CiAgICAgICAgdGhpcy5yb3V0ZXJDbGVhbnVwKCk7CiAgICAgICAgdGhpcy5yb3V0ZXJDbGVhbnVwID0gbnVsbDsKICAgICAgfQogICAgICB0aGlzLnZpZXdMaWZlY3ljbGUkLmNvbXBsZXRlKCk7CiAgICAgIHRoaXMudmlld0NoYW5nZWQkLmNvbXBsZXRlKCk7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFBST0dSQU1NQVRJQyBBUEk6IEFQUCBCQVIKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLyoqCiAgICAgKiBTZXQgdGhlIGFwcCBiYXIgbWVudSBpdGVtcyAoRmlsZSwgRWRpdCwgVmlldywgZXRjLikKICAgICAqLwogICAgc2V0QXBwQmFyTWVudXMobWVudXMpIHsKICAgICAgdGhpcy5hcHBiYXJNZW51SXRlbXMgPSBbLi4ubWVudXNdOwogICAgfQogICAgLyoqCiAgICAgKiBVcGRhdGUgYSBzaW5nbGUgYXBwIGJhciBtZW51IGJ5IG5hbWUKICAgICAqLwogICAgdXBkYXRlQXBwQmFyTWVudShuYW1lLCB1cGRhdGUpIHsKICAgICAgdGhpcy5hcHBiYXJNZW51SXRlbXMgPSB0aGlzLmFwcGJhck1lbnVJdGVtcy5tYXAoKG1lbnUpID0+IHsKICAgICAgICBpZiAoIm5hbWUiIGluIG1lbnUgJiYgbWVudS5uYW1lID09PSBuYW1lKSB7CiAgICAgICAgICByZXR1cm4geyAuLi5tZW51LCAuLi51cGRhdGUgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1lbnU7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgdGhlIGJyZWFkY3J1bWJzIChzdHJpbmcgb3IgYXJyYXkpCiAgICAgKi8KICAgIHNldEJyZWFkY3J1bWJzKGJyZWFkY3J1bWJzKSB7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KGJyZWFkY3J1bWJzKSkgewogICAgICAgIHRoaXMuYXBwYmFyQnJlYWRjcnVtYnMgPSBicmVhZGNydW1icy5qb2luKHRoaXMuYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5hcHBiYXJCcmVhZGNydW1icyA9IGJyZWFkY3J1bWJzOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFNldCB0aGUgY3VycmVudCB1c2VyCiAgICAgKi8KICAgIHNldFVzZXIodXNlcikgewogICAgICB0aGlzLmFwcGJhclVzZXIgPSB1c2VyOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgdGhlIHByb2ZpbGUgZHJvcGRvd24gbWVudSBpdGVtcwogICAgICovCiAgICBzZXRQcm9maWxlTWVudUl0ZW1zKGl0ZW1zKSB7CiAgICAgIHRoaXMuYXBwYmFyUHJvZmlsZU1lbnVJdGVtcyA9IFsuLi5pdGVtc107CiAgICB9CiAgICAvKioKICAgICAqIFNldCBzZWFyY2ggYmFyIHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0U2VhcmNoVmlzaWJsZSh2aXNpYmxlKSB7CiAgICAgIHRoaXMuYXBwYmFyU2hvd1NlYXJjaCA9IHZpc2libGU7CiAgICB9CiAgICAvKioKICAgICAqIFNldCB3aW5kb3cgY29udHJvbHMgdmlzaWJpbGl0eQogICAgICovCiAgICBzZXRXaW5kb3dDb250cm9sc1Zpc2libGUodmlzaWJsZSkgewogICAgICB0aGlzLmFwcGJhclNob3dXaW5kb3dDb250cm9scyA9IHZpc2libGU7CiAgICB9CiAgICAvKioKICAgICAqIFJlZ2lzdGVyIGEgc2VhcmNoIGNhbGxiYWNrCiAgICAgKi8KICAgIG9uU2VhcmNoKGNhbGxiYWNrKSB7CiAgICAgIHRoaXMuc2VhcmNoQ2FsbGJhY2sgPSBjYWxsYmFjazsKICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUFJPR1JBTU1BVElDIEFQSTogTUFJTiBNRU5VCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogU2V0IHRoZSBlbnRpcmUgbWFpbiBtZW51IGNvbmZpZ3VyYXRpb24KICAgICAqLwogICAgc2V0TWFpbk1lbnUoY29uZmlnMykgewogICAgICBpZiAoY29uZmlnMy5sb2dvSWNvbiAhPT0gdm9pZCAwKSB7CiAgICAgICAgdGhpcy5tYWlubWVudUxvZ29JY29uID0gY29uZmlnMy5sb2dvSWNvbjsKICAgICAgfQogICAgICBpZiAoY29uZmlnMy5sb2dvVGV4dCAhPT0gdm9pZCAwKSB7CiAgICAgICAgdGhpcy5tYWlubWVudUxvZ29UZXh0ID0gY29uZmlnMy5sb2dvVGV4dDsKICAgICAgfQogICAgICBpZiAoY29uZmlnMy5ncm91cHMgIT09IHZvaWQgMCkgewogICAgICAgIHRoaXMubWFpbm1lbnVHcm91cHMgPSBbLi4uY29uZmlnMy5ncm91cHNdOwogICAgICB9CiAgICAgIGlmIChjb25maWczLmJvdHRvbVRhYnMgIT09IHZvaWQgMCkgewogICAgICAgIHRoaXMubWFpbm1lbnVCb3R0b21UYWJzID0gWy4uLmNvbmZpZzMuYm90dG9tVGFic107CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogVXBkYXRlIGEgc3BlY2lmaWMgbWVudSBncm91cCBieSBuYW1lCiAgICAgKi8KICAgIHVwZGF0ZU1haW5NZW51R3JvdXAoZ3JvdXBOYW1lLCB1cGRhdGUpIHsKICAgICAgdGhpcy5tYWlubWVudUdyb3VwcyA9IHRoaXMubWFpbm1lbnVHcm91cHMubWFwKChncm91cCkgPT4gZ3JvdXAubmFtZSA9PT0gZ3JvdXBOYW1lID8geyAuLi5ncm91cCwgLi4udXBkYXRlIH0gOiBncm91cCk7CiAgICB9CiAgICAvKioKICAgICAqIEFkZCBhIG1lbnUgaXRlbSB0byBhIHNwZWNpZmljIGdyb3VwCiAgICAgKi8KICAgIGFkZE1haW5NZW51SXRlbShncm91cE5hbWUsIHRhYjIpIHsKICAgICAgdGhpcy5tYWlubWVudUdyb3VwcyA9IHRoaXMubWFpbm1lbnVHcm91cHMubWFwKChncm91cCkgPT4gewogICAgICAgIGlmIChncm91cC5uYW1lID09PSBncm91cE5hbWUpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIC4uLmdyb3VwLAogICAgICAgICAgICBpdGVtczogWy4uLmdyb3VwLml0ZW1zIHx8IFtdLCB0YWIyXQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGdyb3VwOwogICAgICB9KTsKICAgIH0KICAgIC8qKgogICAgICogUmVtb3ZlIGEgbWVudSBpdGVtIGZyb20gYSBncm91cCBieSBrZXkKICAgICAqLwogICAgcmVtb3ZlTWFpbk1lbnVJdGVtKGdyb3VwTmFtZSwgdGFiS2V5KSB7CiAgICAgIHRoaXMubWFpbm1lbnVHcm91cHMgPSB0aGlzLm1haW5tZW51R3JvdXBzLm1hcCgoZ3JvdXApID0+IHsKICAgICAgICBpZiAoZ3JvdXAubmFtZSA9PT0gZ3JvdXBOYW1lKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAuLi5ncm91cCwKICAgICAgICAgICAgaXRlbXM6IChncm91cC5pdGVtcyB8fCBbXSkuZmlsdGVyKCh0OSkgPT4gdDkua2V5ICE9PSB0YWJLZXkpCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gZ3JvdXA7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgdGhlIHNlbGVjdGVkIG1haW4gbWVudSBpdGVtIGJ5IGtleQogICAgICovCiAgICBzZXRNYWluTWVudVNlbGVjdGlvbih0YWJLZXkpIHsKICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLm1haW5tZW51R3JvdXBzKSB7CiAgICAgICAgY29uc3QgdGFiMiA9IGdyb3VwLml0ZW1zPy5maW5kKCh0OSkgPT4gdDkua2V5ID09PSB0YWJLZXkpOwogICAgICAgIGlmICh0YWIyKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51U2VsZWN0ZWRUYWIgPSB0YWIyOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBib3R0b21UYWIgPSB0aGlzLm1haW5tZW51Qm90dG9tVGFicy5maW5kKCh0OSkgPT4gdDkua2V5ID09PSB0YWJLZXkpOwogICAgICBpZiAoYm90dG9tVGFiKSB7CiAgICAgICAgdGhpcy5tYWlubWVudVNlbGVjdGVkVGFiID0gYm90dG9tVGFiOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFNldCBtYWluIG1lbnUgY29sbGFwc2VkIHN0YXRlCiAgICAgKi8KICAgIHNldE1haW5NZW51Q29sbGFwc2VkKGNvbGxhcHNlZCkgewogICAgICB0aGlzLm1haW5tZW51Q29sbGFwc2VkID0gY29sbGFwc2VkOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgbWFpbiBtZW51IHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0TWFpbk1lbnVWaXNpYmxlKHZpc2libGUpIHsKICAgICAgdGhpcy5tYWlubWVudVZpc2libGUgPSB2aXNpYmxlOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgc2Vjb25kYXJ5IG1lbnUgY29sbGFwc2VkIHN0YXRlCiAgICAgKi8KICAgIHNldFNlY29uZGFyeU1lbnVDb2xsYXBzZWQoY29sbGFwc2VkKSB7CiAgICAgIHRoaXMuc2Vjb25kYXJ5bWVudUNvbGxhcHNlZCA9IGNvbGxhcHNlZDsKICAgIH0KICAgIC8qKgogICAgICogU2V0IHNlY29uZGFyeSBtZW51IHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0U2Vjb25kYXJ5TWVudVZpc2libGUodmlzaWJsZSkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVWaXNpYmxlID0gdmlzaWJsZTsKICAgIH0KICAgIC8qKgogICAgICogU2V0IGNvbnRlbnQgdGFicyB2aXNpYmlsaXR5CiAgICAgKi8KICAgIHNldENvbnRlbnRUYWJzVmlzaWJsZSh2aXNpYmxlKSB7CiAgICAgIHRoaXMubWFpbmNvbnRlbnRUYWJzVmlzaWJsZSA9IHZpc2libGU7CiAgICB9CiAgICAvKioKICAgICAqIFNldCBjb250ZW50IHRhYnMgYXV0by1oaWRlIGJlaGF2aW9yCiAgICAgKiBAcGFyYW0gZW5hYmxlZCAtIEVuYWJsZSBhdXRvLWhpZGUgZmVhdHVyZQogICAgICogQHBhcmFtIHRocmVzaG9sZCAtIEhpZGUgd2hlbiB0YWJzLmxlbmd0aCA8PSB0aHJlc2hvbGQgKGRlZmF1bHQgMCA9IGhpZGUgd2hlbiBubyB0YWJzKQogICAgICovCiAgICBzZXRDb250ZW50VGFic0F1dG9IaWRlKGVuYWJsZWQsIHRocmVzaG9sZCA9IDApIHsKICAgICAgdGhpcy5jb250ZW50VGFic0F1dG9IaWRlID0gZW5hYmxlZDsKICAgICAgdGhpcy5jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkID0gdGhyZXNob2xkOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgYSBiYWRnZSBvbiBhIG1haW4gbWVudSBpdGVtCiAgICAgKi8KICAgIHNldE1haW5NZW51QmFkZ2UodGFiS2V5LCBiYWRnZSkgewogICAgICB0aGlzLm1haW5tZW51R3JvdXBzID0gdGhpcy5tYWlubWVudUdyb3Vwcy5tYXAoKGdyb3VwKSA9PiAoewogICAgICAgIC4uLmdyb3VwLAogICAgICAgIGl0ZW1zOiAoZ3JvdXAuaXRlbXMgfHwgW10pLm1hcCgodGFiMikgPT4gdGFiMi5rZXkgPT09IHRhYktleSA/IHsgLi4udGFiMiwgYmFkZ2UgfSA6IHRhYjIpCiAgICAgIH0pKTsKICAgICAgdGhpcy5tYWlubWVudUJvdHRvbVRhYnMgPSB0aGlzLm1haW5tZW51Qm90dG9tVGFicy5tYXAoKHRhYjIpID0+IHRhYjIua2V5ID09PSB0YWJLZXkgPyB7IC4uLnRhYjIsIGJhZGdlIH0gOiB0YWIyKTsKICAgIH0KICAgIC8qKgogICAgICogQ2xlYXIgYSBiYWRnZSBmcm9tIGEgbWFpbiBtZW51IGl0ZW0KICAgICAqLwogICAgY2xlYXJNYWluTWVudUJhZGdlKHRhYktleSkgewogICAgICB0aGlzLm1haW5tZW51R3JvdXBzID0gdGhpcy5tYWlubWVudUdyb3Vwcy5tYXAoKGdyb3VwKSA9PiAoewogICAgICAgIC4uLmdyb3VwLAogICAgICAgIGl0ZW1zOiAoZ3JvdXAuaXRlbXMgfHwgW10pLm1hcCgodGFiMikgPT4gewogICAgICAgICAgaWYgKHRhYjIua2V5ID09PSB0YWJLZXkpIHsKICAgICAgICAgICAgY29uc3QgeyBiYWRnZSwgLi4ucmVzdCB9ID0gdGFiMjsKICAgICAgICAgICAgcmV0dXJuIHJlc3Q7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGFiMjsKICAgICAgICB9KQogICAgICB9KSk7CiAgICAgIHRoaXMubWFpbm1lbnVCb3R0b21UYWJzID0gdGhpcy5tYWlubWVudUJvdHRvbVRhYnMubWFwKCh0YWIyKSA9PiB7CiAgICAgICAgaWYgKHRhYjIua2V5ID09PSB0YWJLZXkpIHsKICAgICAgICAgIGNvbnN0IHsgYmFkZ2UsIC4uLnJlc3QgfSA9IHRhYjI7CiAgICAgICAgICByZXR1cm4gcmVzdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRhYjI7CiAgICAgIH0pOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQUk9HUkFNTUFUSUMgQVBJOiBTRUNPTkRBUlkgTUVOVQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIFNldCB0aGUgc2Vjb25kYXJ5IG1lbnUgY29uZmlndXJhdGlvbgogICAgICovCiAgICBzZXRTZWNvbmRhcnlNZW51KGNvbmZpZzMpIHsKICAgICAgaWYgKGNvbmZpZzMuaGVhZGluZyAhPT0gdm9pZCAwKSB7CiAgICAgICAgdGhpcy5zZWNvbmRhcnltZW51SGVhZGluZyA9IGNvbmZpZzMuaGVhZGluZzsKICAgICAgfQogICAgICB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMgPSBbLi4uY29uZmlnMy5ncm91cHNdOwogICAgfQogICAgLyoqCiAgICAgKiBVcGRhdGUgYSBzcGVjaWZpYyBzZWNvbmRhcnkgbWVudSBncm91cAogICAgICovCiAgICB1cGRhdGVTZWNvbmRhcnlNZW51R3JvdXAoZ3JvdXBOYW1lLCB1cGRhdGUpIHsKICAgICAgdGhpcy5zZWNvbmRhcnltZW51R3JvdXBzID0gdGhpcy5zZWNvbmRhcnltZW51R3JvdXBzLm1hcCgoZ3JvdXApID0+IGdyb3VwLm5hbWUgPT09IGdyb3VwTmFtZSA/IHsgLi4uZ3JvdXAsIC4uLnVwZGF0ZSB9IDogZ3JvdXApOwogICAgfQogICAgLyoqCiAgICAgKiBBZGQgYW4gaXRlbSB0byBhIHNlY29uZGFyeSBtZW51IGdyb3VwCiAgICAgKi8KICAgIGFkZFNlY29uZGFyeU1lbnVJdGVtKGdyb3VwTmFtZSwgaXRlbSkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMgPSB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMubWFwKChncm91cCkgPT4gewogICAgICAgIGlmIChncm91cC5uYW1lID09PSBncm91cE5hbWUpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIC4uLmdyb3VwLAogICAgICAgICAgICBpdGVtczogWy4uLmdyb3VwLml0ZW1zLCBpdGVtXQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGdyb3VwOwogICAgICB9KTsKICAgIH0KICAgIC8qKgogICAgICogU2V0IHRoZSBzZWxlY3RlZCBzZWNvbmRhcnkgbWVudSBpdGVtIGJ5IGtleSAoZm9yIHRhYiBpdGVtcyBvbmx5KQogICAgICovCiAgICBzZXRTZWNvbmRhcnlNZW51U2VsZWN0aW9uKGl0ZW1LZXkpIHsKICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMpIHsKICAgICAgICBjb25zdCBpdGVtID0gZ3JvdXAuaXRlbXMuZmluZCgoaTExKSA9PiAia2V5IiBpbiBpMTEgJiYgaTExLmtleSA9PT0gaXRlbUtleSk7CiAgICAgICAgaWYgKGl0ZW0gJiYgKCEoInR5cGUiIGluIGl0ZW0pIHx8IGl0ZW0udHlwZSA9PT0gInRhYiIgfHwgaXRlbS50eXBlID09PSB2b2lkIDApKSB7CiAgICAgICAgICB0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0gPSBpdGVtOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBDbGVhciB0aGUgc2Vjb25kYXJ5IG1lbnUKICAgICAqLwogICAgY2xlYXJTZWNvbmRhcnlNZW51KCkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVIZWFkaW5nID0gIiI7CiAgICAgIHRoaXMuc2Vjb25kYXJ5bWVudUdyb3VwcyA9IFtdOwogICAgICB0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0gPSB2b2lkIDA7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFBST0dSQU1NQVRJQyBBUEk6IENPTlRFTlQgVEFCUwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIFNldCB0aGUgY29udGVudCB0YWJzCiAgICAgKi8KICAgIHNldENvbnRlbnRUYWJzKHRhYnMpIHsKICAgICAgdGhpcy5tYWluY29udGVudFRhYnMgPSBbLi4udGFic107CiAgICAgIGlmICh0YWJzLmxlbmd0aCA+IDAgJiYgIXRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYikgewogICAgICAgIHRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYiA9IHRhYnNbMF07CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogQWRkIGEgY29udGVudCB0YWIKICAgICAqLwogICAgYWRkQ29udGVudFRhYih0YWIyKSB7CiAgICAgIHRoaXMubWFpbmNvbnRlbnRUYWJzID0gWy4uLnRoaXMubWFpbmNvbnRlbnRUYWJzLCB0YWIyXTsKICAgIH0KICAgIC8qKgogICAgICogUmVtb3ZlIGEgY29udGVudCB0YWIgYnkga2V5CiAgICAgKi8KICAgIHJlbW92ZUNvbnRlbnRUYWIodGFiS2V5KSB7CiAgICAgIHRoaXMubWFpbmNvbnRlbnRUYWJzID0gdGhpcy5tYWluY29udGVudFRhYnMuZmlsdGVyKCh0OSkgPT4gdDkua2V5ICE9PSB0YWJLZXkpOwogICAgICBpZiAodGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiPy5rZXkgPT09IHRhYktleSkgewogICAgICAgIHRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYiA9IHRoaXMubWFpbmNvbnRlbnRUYWJzWzBdOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFNlbGVjdCBhIGNvbnRlbnQgdGFiIGJ5IGtleQogICAgICovCiAgICBzZWxlY3RDb250ZW50VGFiKHRhYktleSkgewogICAgICBjb25zdCB0YWIyID0gdGhpcy5tYWluY29udGVudFRhYnMuZmluZCgodDkpID0+IHQ5LmtleSA9PT0gdGFiS2V5KTsKICAgICAgaWYgKHRhYjIpIHsKICAgICAgICB0aGlzLm1haW5jb250ZW50U2VsZWN0ZWRUYWIgPSB0YWIyOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEdldCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNvbnRlbnQgdGFiCiAgICAgKi8KICAgIGdldFNlbGVjdGVkQ29udGVudFRhYigpIHsKICAgICAgcmV0dXJuIHRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYjsKICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUFJPR1JBTU1BVElDIEFQSTogQUNUSVZJVFkgTE9HCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogR2V0IHRoZSBhY3Rpdml0eSBsb2cgQVBJCiAgICAgKi8KICAgIGdldCBhY3Rpdml0eUxvZygpIHsKICAgICAgaWYgKCF0aGlzLmFjdGl2aXR5bG9nRWxlbWVudCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBhZGQ6IChlbnRyeSkgPT4gewogICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQ/LmFkZChlbnRyeSkpOwogICAgICAgICAgfSwKICAgICAgICAgIGFkZE1hbnk6IChlbnRyaWVzKSA9PiB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudD8uYWRkTWFueShlbnRyaWVzKSk7CiAgICAgICAgICB9LAogICAgICAgICAgY2xlYXI6ICgpID0+IHsKICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5jbGVhcigpKTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXRFbnRyaWVzOiAoKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudD8uZ2V0RW50cmllcygpIHx8IFtdLAogICAgICAgICAgZmlsdGVyOiAoY3JpdGVyaWEpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5maWx0ZXIoY3JpdGVyaWEpIHx8IFtdLAogICAgICAgICAgc2VhcmNoOiAocXVlcnkpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5zZWFyY2gocXVlcnkpIHx8IFtdCiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgIGFkZDogKGVudHJ5KSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5hZGQoZW50cnkpLAogICAgICAgIGFkZE1hbnk6IChlbnRyaWVzKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5hZGRNYW55KGVudHJpZXMpLAogICAgICAgIGNsZWFyOiAoKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5jbGVhcigpLAogICAgICAgIGdldEVudHJpZXM6ICgpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50LmdldEVudHJpZXMoKSwKICAgICAgICBmaWx0ZXI6IChjcml0ZXJpYSkgPT4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuZmlsdGVyKGNyaXRlcmlhKSwKICAgICAgICBzZWFyY2g6IChxdWVyeSkgPT4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuc2VhcmNoKHF1ZXJ5KQogICAgICB9OwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgYWN0aXZpdHkgbG9nIHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0QWN0aXZpdHlMb2dWaXNpYmxlKHZpc2libGUpIHsKICAgICAgdGhpcy5hY3Rpdml0eUxvZ1Zpc2libGUgPSB2aXNpYmxlOwogICAgfQogICAgLyoqCiAgICAgKiBUb2dnbGUgYWN0aXZpdHkgbG9nIHZpc2liaWxpdHkKICAgICAqLwogICAgdG9nZ2xlQWN0aXZpdHlMb2coKSB7CiAgICAgIHRoaXMuYWN0aXZpdHlMb2dWaXNpYmxlID0gIXRoaXMuYWN0aXZpdHlMb2dWaXNpYmxlOwogICAgfQogICAgLyoqCiAgICAgKiBHZXQgYWN0aXZpdHkgbG9nIHZpc2liaWxpdHkgc3RhdGUKICAgICAqLwogICAgZ2V0QWN0aXZpdHlMb2dWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy5hY3Rpdml0eUxvZ1Zpc2libGU7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFBST0dSQU1NQVRJQyBBUEk6IEJPVFRPTSBCQVIKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLyoqCiAgICAgKiBHZXQgdGhlIGJvdHRvbSBiYXIgQVBJIGZvciB3aWRnZXQvYWN0aW9uIG1hbmFnZW1lbnQKICAgICAqLwogICAgZ2V0IGJvdHRvbUJhcigpIHsKICAgICAgaWYgKCF0aGlzLmJvdHRvbWJhckVsZW1lbnQpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgYWRkV2lkZ2V0OiAod2lkZ2V0KSA9PiB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQ/LmFkZFdpZGdldCh3aWRnZXQpKTsKICAgICAgICAgIH0sCiAgICAgICAgICB1cGRhdGVXaWRnZXQ6IChpZCwgdXBkYXRlKSA9PiB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQ/LnVwZGF0ZVdpZGdldChpZCwgdXBkYXRlKSk7CiAgICAgICAgICB9LAogICAgICAgICAgcmVtb3ZlV2lkZ2V0OiAoaWQpID0+IHsKICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudD8ucmVtb3ZlV2lkZ2V0KGlkKSk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0V2lkZ2V0OiAoaWQpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudD8uZ2V0V2lkZ2V0KGlkKSwKICAgICAgICAgIGNsZWFyV2lkZ2V0czogKCkgPT4gewogICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50Py5jbGVhcldpZGdldHMoKSk7CiAgICAgICAgICB9LAogICAgICAgICAgYWRkQWN0aW9uOiAoYWN0aW9uKSA9PiB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQ/LmFkZEFjdGlvbihhY3Rpb24pKTsKICAgICAgICAgIH0sCiAgICAgICAgICByZW1vdmVBY3Rpb246IChpZCkgPT4gewogICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50Py5yZW1vdmVBY3Rpb24oaWQpKTsKICAgICAgICAgIH0sCiAgICAgICAgICBjbGVhckFjdGlvbnM6ICgpID0+IHsKICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudD8uY2xlYXJBY3Rpb25zKCkpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgICAgcmV0dXJuIHsKICAgICAgICBhZGRXaWRnZXQ6ICh3aWRnZXQpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudC5hZGRXaWRnZXQod2lkZ2V0KSwKICAgICAgICB1cGRhdGVXaWRnZXQ6IChpZCwgdXBkYXRlKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQudXBkYXRlV2lkZ2V0KGlkLCB1cGRhdGUpLAogICAgICAgIHJlbW92ZVdpZGdldDogKGlkKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQucmVtb3ZlV2lkZ2V0KGlkKSwKICAgICAgICBnZXRXaWRnZXQ6IChpZCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50LmdldFdpZGdldChpZCksCiAgICAgICAgY2xlYXJXaWRnZXRzOiAoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQuY2xlYXJXaWRnZXRzKCksCiAgICAgICAgYWRkQWN0aW9uOiAoYWN0aW9uKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQuYWRkQWN0aW9uKGFjdGlvbiksCiAgICAgICAgcmVtb3ZlQWN0aW9uOiAoaWQpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudC5yZW1vdmVBY3Rpb24oaWQpLAogICAgICAgIGNsZWFyQWN0aW9uczogKCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50LmNsZWFyQWN0aW9ucygpCiAgICAgIH07CiAgICB9CiAgICAvKioKICAgICAqIFNldCBib3R0b20gYmFyIHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0Qm90dG9tQmFyVmlzaWJsZSh2aXNpYmxlKSB7CiAgICAgIHRoaXMuYm90dG9tYmFyVmlzaWJsZSA9IHZpc2libGU7CiAgICAgIGlmICghdmlzaWJsZSkgewogICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJib3R0b21iYXItaGlkZGVuIiwgIiIpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKCJib3R0b21iYXItaGlkZGVuIik7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogR2V0IGJvdHRvbSBiYXIgdmlzaWJpbGl0eSBzdGF0ZQogICAgICovCiAgICBnZXRCb3R0b21CYXJWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy5ib3R0b21iYXJWaXNpYmxlOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQUk9HUkFNTUFUSUMgQVBJOiBOQVZJR0FUSU9OCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogTmF2aWdhdGUgdG8gYSB2aWV3IGJ5IElECiAgICAgKi8KICAgIGFzeW5jIG5hdmlnYXRlVG9WaWV3KHZpZXdJZCwgcGFyYW1zMikgewogICAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3UmVnaXN0cnkuZ2V0KHZpZXdJZCk7CiAgICAgIGlmICghdmlldykgewogICAgICAgIGNvbnNvbGUud2FybihgQ2Fubm90IG5hdmlnYXRlIHRvIHVua25vd24gdmlldzogJHt2aWV3SWR9YCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGNvbnN0IGNhbkxlYXZlID0gYXdhaXQgdGhpcy52aWV3UmVnaXN0cnkuY2FuTGVhdmVDdXJyZW50VmlldygpOwogICAgICBpZiAoY2FuTGVhdmUgIT09IHRydWUpIHsKICAgICAgICBpZiAodHlwZW9mIGNhbkxlYXZlID09PSAic3RyaW5nIikgewogICAgICAgICAgY29uc3QgY29uZmlybWVkID0gd2luZG93LmNvbmZpcm0oY2FuTGVhdmUpOwogICAgICAgICAgaWYgKCFjb25maXJtZWQpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLnZpZXdMaWZlY3ljbGUkLm5leHQoeyB0eXBlOiAibG9hZGluZyIsIHZpZXdJZCB9KTsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCB0aGlzLmxvYWRWaWV3KHZpZXcsIHBhcmFtczIpOwogICAgICAgIGNvbnN0IHJvdXRlID0gdmlldy5yb3V0ZSB8fCB2aWV3SWQ7CiAgICAgICAgY29uc3QgbmV3SGFzaCA9IGAjJHtyb3V0ZX1gOwogICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaGFzaCAhPT0gbmV3SGFzaCkgewogICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHsgdmlld0lkIH0sICIiLCBuZXdIYXNoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgdGhpcy52aWV3TGlmZWN5Y2xlJC5uZXh0KHsgdHlwZTogImxvYWRFcnJvciIsIHZpZXdJZCwgZXJyb3IgfSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEdldCB0aGUgY3VycmVudCB2aWV3CiAgICAgKi8KICAgIGdldEN1cnJlbnRWaWV3KCkgewogICAgICByZXR1cm4gdGhpcy5jdXJyZW50VmlldzsKICAgIH0KICAgIC8qKgogICAgICogR2V0IGFjY2VzcyB0byB0aGUgdmlldyByZWdpc3RyeSAoZm9yIGFkdmFuY2VkIHVzZSkKICAgICAqLwogICAgZ2V0Vmlld1JlZ2lzdHJ5KCkgewogICAgICByZXR1cm4gdGhpcy52aWV3UmVnaXN0cnk7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFVOSUZJRUQgQ09ORklHVVJBVElPTgogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIENvbmZpZ3VyZSB0aGUgYXBwIHNoZWxsIHdpdGggYSB1bmlmaWVkIGNvbmZpZyBvYmplY3QKICAgICAqLwogICAgY29uZmlndXJlKGNvbmZpZzMpIHsKICAgICAgaWYgKGNvbmZpZzMudmlld3MpIHsKICAgICAgICB0aGlzLnZpZXdSZWdpc3RyeS5jbGVhcigpOwogICAgICAgIHRoaXMudmlld1JlZ2lzdHJ5LnJlZ2lzdGVyQWxsKGNvbmZpZzMudmlld3MpOwogICAgICB9CiAgICAgIGlmIChjb25maWczLmJyYW5kaW5nKSB7CiAgICAgICAgdGhpcy5tYWlubWVudUxvZ29JY29uID0gY29uZmlnMy5icmFuZGluZy5sb2dvSWNvbiB8fCAiIjsKICAgICAgICB0aGlzLm1haW5tZW51TG9nb1RleHQgPSBjb25maWczLmJyYW5kaW5nLmxvZ29UZXh0IHx8ICIiOwogICAgICB9CiAgICAgIGlmIChjb25maWczLmFwcEJhcikgewogICAgICAgIHRoaXMuYXBwYmFyTWVudUl0ZW1zID0gY29uZmlnMy5hcHBCYXIubWVudUl0ZW1zIHx8IFtdOwogICAgICAgIHRoaXMuYXBwYmFyQnJlYWRjcnVtYnMgPSBjb25maWczLmFwcEJhci5icmVhZGNydW1icyB8fCAiIjsKICAgICAgICB0aGlzLmFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3IgPSBjb25maWczLmFwcEJhci5icmVhZGNydW1iU2VwYXJhdG9yIHx8ICIgPiAiOwogICAgICAgIHRoaXMuYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzID0gY29uZmlnMy5hcHBCYXIuc2hvd1dpbmRvd0NvbnRyb2xzID8/IHRydWU7CiAgICAgICAgdGhpcy5hcHBiYXJTaG93U2VhcmNoID0gY29uZmlnMy5hcHBCYXIuc2hvd1NlYXJjaCA/PyBmYWxzZTsKICAgICAgICB0aGlzLmFwcGJhclVzZXIgPSBjb25maWczLmFwcEJhci51c2VyOwogICAgICAgIHRoaXMuYXBwYmFyUHJvZmlsZU1lbnVJdGVtcyA9IGNvbmZpZzMuYXBwQmFyLnByb2ZpbGVNZW51SXRlbXMgfHwgW107CiAgICAgIH0KICAgICAgaWYgKGNvbmZpZzMubWFpbk1lbnUpIHsKICAgICAgICBpZiAoY29uZmlnMy5tYWluTWVudS5zZWN0aW9ucykgewogICAgICAgICAgdGhpcy5tYWlubWVudUdyb3VwcyA9IHRoaXMuYnVpbGRNYWluTWVudUZyb21TZWN0aW9ucyhjb25maWczKTsKICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZzMubWFpbk1lbnUuZ3JvdXBzKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51R3JvdXBzID0gY29uZmlnMy5tYWluTWVudS5ncm91cHM7CiAgICAgICAgfQogICAgICAgIGlmIChjb25maWczLm1haW5NZW51LmxvZ29JY29uKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51TG9nb0ljb24gPSBjb25maWczLm1haW5NZW51LmxvZ29JY29uOwogICAgICAgIH0KICAgICAgICBpZiAoY29uZmlnMy5tYWluTWVudS5sb2dvVGV4dCkgewogICAgICAgICAgdGhpcy5tYWlubWVudUxvZ29UZXh0ID0gY29uZmlnMy5tYWluTWVudS5sb2dvVGV4dDsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbmZpZzMubWFpbk1lbnUuYm90dG9tVGFicykgewogICAgICAgICAgdGhpcy5tYWlubWVudUJvdHRvbVRhYnMgPSBjb25maWczLm1haW5NZW51LmJvdHRvbVRhYnM7CiAgICAgICAgfSBlbHNlIGlmIChjb25maWczLm1haW5NZW51LmJvdHRvbUl0ZW1zKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51Qm90dG9tVGFicyA9IHRoaXMuYnVpbGRCb3R0b21UYWJzRnJvbUl0ZW1zKGNvbmZpZzMubWFpbk1lbnUuYm90dG9tSXRlbXMpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoY29uZmlnMy5ib3R0b21CYXIpIHsKICAgICAgICB0aGlzLnNldEJvdHRvbUJhclZpc2libGUoY29uZmlnMy5ib3R0b21CYXIudmlzaWJsZSA/PyB0cnVlKTsKICAgICAgICBpZiAoY29uZmlnMy5ib3R0b21CYXIud2lkZ2V0cykgewogICAgICAgICAgY29uZmlnMy5ib3R0b21CYXIud2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQpID0+IHsKICAgICAgICAgICAgdGhpcy5ib3R0b21CYXIuYWRkV2lkZ2V0KHdpZGdldCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbmZpZzMuYm90dG9tQmFyLmFjdGlvbnMpIHsKICAgICAgICAgIGNvbmZpZzMuYm90dG9tQmFyLmFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7CiAgICAgICAgICAgIHRoaXMuYm90dG9tQmFyLmFkZEFjdGlvbihhY3Rpb24pOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuc2V0dXBSb3V0ZXJJbnRlZ3JhdGlvbihjb25maWczKTsKICAgICAgaWYgKGNvbmZpZzMub25WaWV3Q2hhbmdlKSB7CiAgICAgICAgdGhpcy52aWV3Q2hhbmdlZCQuc3Vic2NyaWJlKChldmVudCkgPT4gewogICAgICAgICAgY29uZmlnMy5vblZpZXdDaGFuZ2UoZXZlbnQudmlld0lkLCBldmVudC52aWV3KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoY29uZmlnMy5vblNlYXJjaCkgewogICAgICAgIHRoaXMuc2VhcmNoQ2FsbGJhY2sgPSBjb25maWczLm9uU2VhcmNoOwogICAgICB9CiAgICAgIGlmIChjb25maWczLmRlZmF1bHRWaWV3KSB7CiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvVmlldyhjb25maWczLmRlZmF1bHRWaWV3KTsKICAgICAgfQogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQUklWQVRFIEhFTFBFUiBNRVRIT0RTCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIHNldHVwUm91dGVySW50ZWdyYXRpb24oY29uZmlnMykgewogICAgICBjb25zdCBoYW5kbGVIYXNoQ2hhbmdlID0gKCkgPT4gewogICAgICAgIGNvbnN0IGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKTsKICAgICAgICBpZiAoIWhhc2gpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgbWF0Y2gyID0gdGhpcy52aWV3UmVnaXN0cnkuZmluZEJ5Um91dGUoaGFzaCk7CiAgICAgICAgaWYgKG1hdGNoMikgewogICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvVmlldyhtYXRjaDIudmlldy5pZCwgbWF0Y2gyLnBhcmFtcyk7CiAgICAgICAgfQogICAgICB9OwogICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsIGhhbmRsZUhhc2hDaGFuZ2UpOwogICAgICB0aGlzLnJvdXRlckNsZWFudXAgPSAoKSA9PiB7CiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLCBoYW5kbGVIYXNoQ2hhbmdlKTsKICAgICAgfTsKICAgICAgY29uc3QgY3VycmVudEhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKTsKICAgICAgaWYgKGN1cnJlbnRIYXNoKSB7CiAgICAgICAgY29uc3QgbWF0Y2gyID0gdGhpcy52aWV3UmVnaXN0cnkuZmluZEJ5Um91dGUoY3VycmVudEhhc2gpOwogICAgICAgIGlmIChtYXRjaDIpIHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5uYXZpZ2F0ZVRvVmlldyhtYXRjaDIudmlldy5pZCwgbWF0Y2gyLnBhcmFtcyksIDApOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYnVpbGRNYWluTWVudUZyb21TZWN0aW9ucyhjb25maWczKSB7CiAgICAgIGlmICghY29uZmlnMy5tYWluTWVudT8uc2VjdGlvbnMpCiAgICAgICAgcmV0dXJuIFtdOwogICAgICByZXR1cm4gY29uZmlnMy5tYWluTWVudS5zZWN0aW9ucy5tYXAoKHNlY3Rpb24pID0+ICh7CiAgICAgICAgbmFtZTogc2VjdGlvbi5uYW1lLAogICAgICAgIGl0ZW1zOiBzZWN0aW9uLnZpZXdzLm1hcCgodmlld0lkKSA9PiB7CiAgICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3UmVnaXN0cnkuZ2V0KHZpZXdJZCk7CiAgICAgICAgICBpZiAoIXZpZXcpIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKGBWaWV3ICIke3ZpZXdJZH0iIG5vdCBmb3VuZCBpbiByZWdpc3RyeWApOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGtleTogdmlldy5pZCwKICAgICAgICAgICAgaWNvbk5hbWU6IHZpZXcuaWNvbk5hbWUsCiAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5uYXZpZ2F0ZVRvVmlldyh2aWV3SWQpLAogICAgICAgICAgICBiYWRnZTogdmlldy5iYWRnZQogICAgICAgICAgfTsKICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbikKICAgICAgfSkpOwogICAgfQogICAgYnVpbGRCb3R0b21UYWJzRnJvbUl0ZW1zKGl0ZW1zKSB7CiAgICAgIHJldHVybiBpdGVtcy5tYXAoKHZpZXdJZCkgPT4gewogICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXdSZWdpc3RyeS5nZXQodmlld0lkKTsKICAgICAgICBpZiAoIXZpZXcpIHsKICAgICAgICAgIGNvbnNvbGUud2FybihgVmlldyAiJHt2aWV3SWR9IiBub3QgZm91bmQgaW4gcmVnaXN0cnlgKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gewogICAgICAgICAga2V5OiB2aWV3LmlkLAogICAgICAgICAgaWNvbk5hbWU6IHZpZXcuaWNvbk5hbWUsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMubmF2aWdhdGVUb1ZpZXcodmlld0lkKQogICAgICAgIH07CiAgICAgIH0pLmZpbHRlcihCb29sZWFuKTsKICAgIH0KICAgIGFzeW5jIGxvYWRWaWV3KHZpZXcsIHBhcmFtczIpIHsKICAgICAgY29uc3QgcHJldmlvdXNWaWV3ID0gdGhpcy5jdXJyZW50VmlldzsKICAgICAgdGhpcy5jdXJyZW50VmlldyA9IHZpZXc7CiAgICAgIGNvbnN0IHZpZXdDb250YWluZXIgPSB0aGlzLm1haW5jb250ZW50Py5xdWVyeVNlbGVjdG9yKCIudmlldy1jb250YWluZXIiKSB8fCB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi52aWV3LWNvbnRhaW5lciIpOwogICAgICBpZiAodmlld0NvbnRhaW5lcikgewogICAgICAgIGNvbnN0IGVsZW1lbnQ0ID0gYXdhaXQgdGhpcy52aWV3UmVnaXN0cnkuYWN0aXZhdGVWaWV3KHZpZXcuaWQsIHZpZXdDb250YWluZXIsIHBhcmFtczIpOwogICAgICAgIGlmIChlbGVtZW50NCkgewogICAgICAgICAgdGhpcy52aWV3TGlmZWN5Y2xlJC5uZXh0KHsKICAgICAgICAgICAgdHlwZTogImFjdGl2YXRlZCIsCiAgICAgICAgICAgIHZpZXdJZDogdmlldy5pZCwKICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudDQsCiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zMgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh2aWV3LnNlY29uZGFyeU1lbnUpIHsKICAgICAgICB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMgPSB2aWV3LnNlY29uZGFyeU1lbnU7CiAgICAgICAgdGhpcy5zZWNvbmRhcnltZW51SGVhZGluZyA9IHZpZXcubmFtZTsKICAgICAgfQogICAgICBpZiAodmlldy5jb250ZW50VGFicykgewogICAgICAgIHRoaXMubWFpbmNvbnRlbnRUYWJzID0gdmlldy5jb250ZW50VGFiczsKICAgICAgfQogICAgICB0aGlzLnNldE1haW5NZW51U2VsZWN0aW9uKHZpZXcuaWQpOwogICAgICBjb25zdCBjaGFuZ2VFdmVudCA9IHsKICAgICAgICB2aWV3SWQ6IHZpZXcuaWQsCiAgICAgICAgdmlldywKICAgICAgICBwcmV2aW91c1ZpZXcsCiAgICAgICAgcGFyYW1zOiBwYXJhbXMyCiAgICAgIH07CiAgICAgIHRoaXMudmlld0NoYW5nZWQkLm5leHQoY2hhbmdlRXZlbnQpOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ2aWV3LWNoYW5nZSIsIHsKICAgICAgICBkZXRhaWw6IGNoYW5nZUV2ZW50LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBFVkVOVCBIQU5ETEVSUyAoSW50ZXJuYWwpCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIGhhbmRsZUFwcGJhck1lbnVTZWxlY3QoZTExKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImFwcGJhci1tZW51LXNlbGVjdCIsIHsKICAgICAgICBkZXRhaWw6IGUxMS5kZXRhaWwsCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVBcHBiYXJCcmVhZGNydW1iTmF2aWdhdGUoZTExKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImFwcGJhci1icmVhZGNydW1iLW5hdmlnYXRlIiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZUFwcGJhclNlYXJjaENsaWNrKCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJhcHBiYXItc2VhcmNoLWNsaWNrIiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlQXBwYmFyU2VhcmNoUXVlcnkoZTExKSB7CiAgICAgIGlmICh0aGlzLnNlYXJjaENhbGxiYWNrKSB7CiAgICAgICAgdGhpcy5zZWFyY2hDYWxsYmFjayhlMTEuZGV0YWlsLnF1ZXJ5KTsKICAgICAgfQogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWFyY2gtcXVlcnkiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlQXBwYmFyVXNlck1lbnVPcGVuKCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJhcHBiYXItdXNlci1tZW51LW9wZW4iLCB7CiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVBcHBiYXJQcm9maWxlTWVudVNlbGVjdChlMTEpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYXBwYmFyLXByb2ZpbGUtbWVudS1zZWxlY3QiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTWFpbm1lbnVUYWJTZWxlY3QoZTExKSB7CiAgICAgIHRoaXMubWFpbm1lbnVTZWxlY3RlZFRhYiA9IGUxMS5kZXRhaWwudGFiOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtYWlubWVudS10YWItc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZVNlY29uZGFyeW1lbnVJdGVtU2VsZWN0KGUxMSkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0gPSBlMTEuZGV0YWlsLml0ZW07CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlY29uZGFyeW1lbnUtaXRlbS1zZWxlY3QiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTWFpbm1lbnVDb2xsYXBzZUNoYW5nZShlMTEpIHsKICAgICAgdGhpcy5tYWlubWVudUNvbGxhcHNlZCA9IGUxMS5kZXRhaWwuY29sbGFwc2VkOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtYWlubWVudS1jb2xsYXBzZS1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlU2Vjb25kYXJ5bWVudUNvbGxhcHNlQ2hhbmdlKGUxMSkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVDb2xsYXBzZWQgPSBlMTEuZGV0YWlsLmNvbGxhcHNlZDsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2Vjb25kYXJ5bWVudS1jb2xsYXBzZS1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlQ29udGVudFRhYlNlbGVjdChlMTEpIHsKICAgICAgdGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiID0gZTExLmRldGFpbC50YWI7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbnRlbnQtdGFiLXNlbGVjdCIsIHsKICAgICAgICBkZXRhaWw6IGUxMS5kZXRhaWwsCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVDb250ZW50VGFiQ2xvc2UoZTExKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbnRlbnQtdGFiLWNsb3NlIiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNBcHB1aTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWJ1dHRvbi9kZWVzLWJ1dHRvbi1leGl0L2RlZXMtYnV0dG9uLWV4aXQuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9fZXNEZWNvcmF0ZTQzID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0NCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0J1dHRvbkV4aXQgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWJ1dHRvbi1leGl0IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfc2l6ZV9kZWNvcmF0b3JzOwogIGxldCBfc2l6ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0J1dHRvbkV4aXQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfc2l6ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBOdW1iZXIKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGU0Myh0aGlzLCBudWxsLCBfc2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2l6ZV9pbml0aWFsaXplcnMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDMobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQnV0dG9uRXhpdDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gREVNTwogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmAKICAgIDxkZWVzLWJ1dHRvbi1leGl0PjwvZGVlcy1idXR0b24tZXhpdD4KICBgOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJCdXR0b24iOwogICAgI3NpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDQodGhpcywgX3NpemVfaW5pdGlhbGl6ZXJzLCAyNCk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2l6ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3R5bGVzID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDQodGhpcywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpLCBbCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKCiAgICBgCiAgICBdKTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgd2lkdGg6ICR7dGhpcy5zaXplfXB4OwogICAgICAgICAgaGVpZ2h0OiAke3RoaXMuc2l6ZX1weDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImZpcnN0TGluZSI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2Vjb25kTGluZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNCdXR0b25FeGl0MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uLWdyb3VwL2RlZXMtYnV0dG9uLWdyb3VwLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMzEgPSAoKSA9PiB7CiAgcmV0dXJuIGIyYAogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW9Cb3ggewogICAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMDsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMycHg7CiAgICAgICAgfQoKICAgICAgICAuZGVtby10aXRsZSB7CiAgICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICB9CgogICAgICAgIC5kZW1vLWRlc2NyaXB0aW9uIHsKICAgICAgICAgIGNvbG9yOiAjOTk5OwogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9ImRlbW9Cb3giPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+QmFzaWMgQnV0dG9uIEdyb3VwczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkJ1dHRvbiBncm91cHMgd2l0aG91dCBsYWJlbHMgZm9yIHNpbXBsZSBncm91cGluZzwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgICA8ZGVlcy1idXR0b24+T3B0aW9uIDE8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPk9wdGlvbiAyPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5PcHRpb24gMzwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+TGFiZWxlZCBCdXR0b24gR3JvdXBzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+QnV0dG9uIGdyb3VwcyB3aXRoIGRlc2NyaXB0aXZlIGxhYmVsczwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlZpZXcgTW9kZToiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5HcmlkPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5MaXN0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5DYXJkczwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+TXVsdGlwbGUgR3JvdXBzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+TXVsdGlwbGUgYnV0dG9uIGdyb3VwcyB1c2VkIHRvZ2V0aGVyPC9wPgogICAgICAgIAogICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogMTZweDsgZmxleC13cmFwOiB3cmFwOyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkRhdGFzZXQ6Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5TeXN0ZW08L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+TmV0d29yazwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TYWxlczwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlRpbWUgUmFuZ2U6Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPjFIPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj4yNEg8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+N0Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+MzBEPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iQWN0aW9uczoiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+UmVmcmVzaDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5FeHBvcnQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VmVydGljYWwgQnV0dG9uIEdyb3VwczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkJ1dHRvbiBncm91cHMgd2l0aCB2ZXJ0aWNhbCBsYXlvdXQ8L3A+CiAgICAgICAgCiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiAyNHB4OyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgZGlyZWN0aW9uPSJ2ZXJ0aWNhbCIgbGFiZWw9Ik5hdmlnYXRpb246Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkRhc2hib2FyZDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJoaWdobGlnaHRlZCI+QW5hbHl0aWNzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlJlcG9ydHM8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+U2V0dGluZ3M8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGRpcmVjdGlvbj0idmVydGljYWwiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+QWRkIEl0ZW08L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+RWRpdCBJdGVtPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkRlbGV0ZSBJdGVtPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPk1peGVkIEJ1dHRvbiBUeXBlczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkRpZmZlcmVudCBidXR0b24gdHlwZXMgd2l0aGluIGdyb3VwczwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlN0YXR1czoiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9InN1Y2Nlc3MiPkFjdGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+UGVuZGluZzwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGFuZ2VyIj5JbmFjdGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWJ1dHRvbi9kZWVzLWJ1dHRvbi1ncm91cC9kZWVzLWJ1dHRvbi1ncm91cC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU0NCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNDUgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNCdXR0b25Hcm91cCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYnV0dG9uLWdyb3VwIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbGFiZWxfZGVjb3JhdG9yczsKICBsZXQgX2xhYmVsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RpcmVjdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfZGlyZWN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlyZWN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNCdXR0b25Hcm91cDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9sYWJlbF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfZGlyZWN0aW9uX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTQ0KHRoaXMsIG51bGwsIF9sYWJlbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsYWJlbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGFiZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGFiZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxhYmVsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhYmVsX2luaXRpYWxpemVycywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDQodGhpcywgbnVsbCwgX2RpcmVjdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkaXJlY3Rpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpcmVjdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaXJlY3Rpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRpcmVjdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXJlY3Rpb25faW5pdGlhbGl6ZXJzLCBfZGlyZWN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQnV0dG9uR3JvdXAyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMzMTsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiQnV0dG9uIjsKICAgICNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0NSh0aGlzLCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgbGFiZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxhYmVsKHZhbHVlMikgewogICAgICB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RpcmVjdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDUodGhpcywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0NSh0aGlzLCBfZGlyZWN0aW9uX2luaXRpYWxpemVycywgImhvcml6b250YWwiKSk7CiAgICBnZXQgZGlyZWN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jZGlyZWN0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGlyZWN0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNkaXJlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICBfX3J1bkluaXRpYWxpemVyczQ1KHRoaXMsIF9kaXJlY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBkb210b29sc19lbGVtZW50YmFzaWNfZXhwb3J0cy5zZXR1cCgpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5idXR0b24tZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24tZ3JvdXAudmVydGljYWwgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICAgIH0KCiAgICAgIC5sYWJlbCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiM5OTkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi1ncm91cC52ZXJ0aWNhbCAubGFiZWwgewogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwICR7dGhpcy5kaXJlY3Rpb259Ij4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8c3BhbiBjbGFzcz0ibGFiZWwiPiR7dGhpcy5sYWJlbH08L3NwYW4+YCA6ICIifQogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0NShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0J1dHRvbkdyb3VwMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtY2hhcnQvZGVlcy1jaGFydC1hcmVhL2RlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMzIgPSAoKSA9PiB7CiAgY29uc3QgaW5pdGlhbERhdGFzZXRzID0gewogICAgc3lzdGVtOiB7CiAgICAgIGxhYmVsOiAiU3lzdGVtIFVzYWdlICglKSIsCiAgICAgIHNlcmllczogWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDUFUiLAogICAgICAgICAgZGF0YTogWwogICAgICAgICAgICB7IHg6IG5ldyBEYXRlKERhdGUubm93KCkgLSAzZTUpLnRvSVNPU3RyaW5nKCksIHk6IDI1IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDI0ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDMwIH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDE4ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDI4IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDEyZTQpLnRvSVNPU3RyaW5nKCksIHk6IDM1IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDZlNCkudG9JU09TdHJpbmcoKSwgeTogMzIgfSwKICAgICAgICAgICAgeyB4OiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksIHk6IDM4IH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJNZW1vcnkiLAogICAgICAgICAgZGF0YTogWwogICAgICAgICAgICB7IHg6IG5ldyBEYXRlKERhdGUubm93KCkgLSAzZTUpLnRvSVNPU3RyaW5nKCksIHk6IDQ1IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDI0ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDQ4IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDE4ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDQ2IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDEyZTQpLnRvSVNPU3RyaW5nKCksIHk6IDUyIH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDZlNCkudG9JU09TdHJpbmcoKSwgeTogNTAgfSwKICAgICAgICAgICAgeyB4OiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksIHk6IDU1IH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0KICAgIH0KICB9OwogIGNvbnN0IGluaXRpYWxGb3JtYXR0ZXJzID0gewogICAgc3lzdGVtOiAodmFsKSA9PiBgJHt2YWx9JWAKICB9OwogIHJldHVybiBiMmAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICBjb25zdCBjaGFydEVsZW1lbnQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNtYWluLWNoYXJ0Iik7CiAgICBjb25zdCBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2Nvbm5lY3Rpb25zLWNoYXJ0Iik7CiAgICBsZXQgaW50ZXJ2YWxJZDsKICAgIGxldCBjb25uZWN0aW9uc0ludGVydmFsSWQ7CiAgICBsZXQgY3VycmVudERhdGFzZXQgPSAic3lzdGVtIjsKICAgIGNvbnN0IGZvcm1hdHRlcnMyID0gewogICAgICBzeXN0ZW06ICh2YWwpID0+IGAke3ZhbH0lYCwKICAgICAgbmV0d29yazogKHZhbCkgPT4gYCR7dmFsfSBNYnBzYCwKICAgICAgc2FsZXM6ICh2YWwpID0+IGAkJHt2YWwudG9Mb2NhbGVTdHJpbmcoKX1gCiAgICB9OwogICAgY29uc3QgVElNRV9XSU5ET1cgPSAyICogNjAgKiAxZTM7CiAgICBjb25zdCBVUERBVEVfSU5URVJWQUwgPSAxZTM7CiAgICBjb25zdCBEQVRBX1BPSU5UX0lOVEVSVkFMID0gNWUzOwogICAgbGV0IHByZXZpb3VzVmFsdWVzID0gewogICAgICBjcHU6IDMwLAogICAgICBtZW1vcnk6IDUwLAogICAgICBkb3dubG9hZDogMTUwLAogICAgICB1cGxvYWQ6IDMwLAogICAgICBjb25uZWN0aW9uczogMTUwCiAgICB9OwogICAgY29uc3QgZ2VuZXJhdGVJbml0aWFsRGF0YSA9IChiYXNlVmFsdWUsIHZhcmlhbmNlLCBpbnRlcnZhbDMgPSBEQVRBX1BPSU5UX0lOVEVSVkFMKSA9PiB7CiAgICAgIGNvbnN0IGRhdGEgPSBbXTsKICAgICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICAgIGNvbnN0IHBvaW50Q291bnQgPSBNYXRoLmZsb29yKFRJTUVfV0lORE9XIC8gaW50ZXJ2YWwzKTsKICAgICAgZm9yIChsZXQgaTExID0gcG9pbnRDb3VudDsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgY29uc3QgdGltZXN0YW1wMiA9IG5ldyBEYXRlKG5vdzIgLSBpMTEgKiBpbnRlcnZhbDMpLnRvSVNPU3RyaW5nKCk7CiAgICAgICAgY29uc3QgdmFsdWUyID0gYmFzZVZhbHVlICsgKE1hdGgucmFuZG9tKCkgLSAwLjUpICogdmFyaWFuY2U7CiAgICAgICAgZGF0YS5wdXNoKHsgeDogdGltZXN0YW1wMiwgeTogTWF0aC5yb3VuZCh2YWx1ZTIpIH0pOwogICAgICB9CiAgICAgIHJldHVybiBkYXRhOwogICAgfTsKICAgIGNvbnN0IGRhdGFzZXRzID0gewogICAgICBzeXN0ZW06IHsKICAgICAgICBsYWJlbDogIlN5c3RlbSBVc2FnZSAoJSkiLAogICAgICAgIHNlcmllczogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiQ1BVIiwKICAgICAgICAgICAgZGF0YTogZ2VuZXJhdGVJbml0aWFsRGF0YShwcmV2aW91c1ZhbHVlcy5jcHUsIDEwKQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIk1lbW9yeSIsCiAgICAgICAgICAgIGRhdGE6IGdlbmVyYXRlSW5pdGlhbERhdGEocHJldmlvdXNWYWx1ZXMubWVtb3J5LCA4KQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSwKICAgICAgbmV0d29yazogewogICAgICAgIGxhYmVsOiAiTmV0d29yayBUcmFmZmljIChNYnBzKSIsCiAgICAgICAgc2VyaWVzOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJEb3dubG9hZCIsCiAgICAgICAgICAgIGRhdGE6IGdlbmVyYXRlSW5pdGlhbERhdGEocHJldmlvdXNWYWx1ZXMuZG93bmxvYWQsIDMwKQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIlVwbG9hZCIsCiAgICAgICAgICAgIGRhdGE6IGdlbmVyYXRlSW5pdGlhbERhdGEocHJldmlvdXNWYWx1ZXMudXBsb2FkLCAxMCkKICAgICAgICAgIH0KICAgICAgICBdCiAgICAgIH0sCiAgICAgIHNhbGVzOiB7CiAgICAgICAgbGFiZWw6ICJTYWxlcyBBbmFseXRpY3MiLAogICAgICAgIHNlcmllczogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiUmV2ZW51ZSIsCiAgICAgICAgICAgIGRhdGE6IFsKICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTAxIiwgeTogNDVlMyB9LAogICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDIiLCB5OiA1MmUzIH0sCiAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wMyIsIHk6IDQ4ZTMgfSwKICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTA0IiwgeTogNjFlMyB9LAogICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDUiLCB5OiA1OGUzIH0sCiAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wNiIsIHk6IDY1ZTMgfQogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiUHJvZml0IiwKICAgICAgICAgICAgZGF0YTogWwogICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDEiLCB5OiAxMmUzIH0sCiAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wMiIsIHk6IDE0ZTMgfSwKICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTAzIiwgeTogMTFlMyB9LAogICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDQiLCB5OiAxOGUzIH0sCiAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wNSIsIHk6IDE2ZTMgfSwKICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTA2IiwgeTogMmU0IH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfQogICAgfTsKICAgIGNvbnN0IGdldE5leHRWYWx1ZSA9IChjdXJyZW50LCBtaW4zLCBtYXgzLCBtYXhDaGFuZ2UgPSA1KSA9PiB7CiAgICAgIGNvbnN0IGNoYW5nZSA9IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIG1heENoYW5nZSAqIDI7CiAgICAgIGxldCBuZXdWYWx1ZSA9IGN1cnJlbnQgKyBjaGFuZ2U7CiAgICAgIGNvbnN0IGNlbnRlciA9IChtaW4zICsgbWF4MykgLyAyOwogICAgICBjb25zdCBwcmVzc3VyZSA9IChjZW50ZXIgLSBuZXdWYWx1ZSkgKiAwLjE7CiAgICAgIG5ld1ZhbHVlICs9IHByZXNzdXJlOwogICAgICBuZXdWYWx1ZSA9IE1hdGgubWF4KG1pbjMsIE1hdGgubWluKG1heDMsIG5ld1ZhbHVlKSk7CiAgICAgIHJldHVybiBNYXRoLnJvdW5kKG5ld1ZhbHVlKTsKICAgIH07CiAgICBsZXQgbGFzdERhdGFQb2ludFRpbWUgPSBEYXRlLm5vdygpOwogICAgbGV0IGNvbm5lY3Rpb25zTGFzdFVwZGF0ZSA9IERhdGUubm93KCk7CiAgICBjb25zdCBhZGRSZWFsdGltZURhdGEgPSAoKSA9PiB7CiAgICAgIGlmICghY2hhcnRFbGVtZW50KQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICAgIGNvbnN0IHNob3VsZEFkZFBvaW50ID0gbm93MiAtIGxhc3REYXRhUG9pbnRUaW1lID49IERBVEFfUE9JTlRfSU5URVJWQUw7CiAgICAgIGlmIChzaG91bGRBZGRQb2ludCkgewogICAgICAgIGxhc3REYXRhUG9pbnRUaW1lID0gbm93MjsKICAgICAgICBjb25zdCBuZXdUaW1lc3RhbXAgPSBuZXcgRGF0ZShub3cyKS50b0lTT1N0cmluZygpOwogICAgICAgIGlmIChjdXJyZW50RGF0YXNldCA9PT0gInN5c3RlbSIpIHsKICAgICAgICAgIHByZXZpb3VzVmFsdWVzLmNwdSA9IGdldE5leHRWYWx1ZShwcmV2aW91c1ZhbHVlcy5jcHUsIDIwLCA1MCwgMyk7CiAgICAgICAgICBwcmV2aW91c1ZhbHVlcy5tZW1vcnkgPSBnZXROZXh0VmFsdWUocHJldmlvdXNWYWx1ZXMubWVtb3J5LCA0MCwgNzAsIDIpOwogICAgICAgICAgY29uc3QgY3VycmVudFNlcmllcyA9IGNoYXJ0RWxlbWVudC5jaGFydFNlcmllcy5tYXAoKHNlcmllcywgaW5kZXgyKSA9PiAoewogICAgICAgICAgICBuYW1lOiBzZXJpZXMubmFtZSwKICAgICAgICAgICAgZGF0YTogWwogICAgICAgICAgICAgIC4uLnNlcmllcy5kYXRhLAogICAgICAgICAgICAgIGluZGV4MiA9PT0gMCA/IHsgeDogbmV3VGltZXN0YW1wLCB5OiBwcmV2aW91c1ZhbHVlcy5jcHUgfSA6IHsgeDogbmV3VGltZXN0YW1wLCB5OiBwcmV2aW91c1ZhbHVlcy5tZW1vcnkgfQogICAgICAgICAgICBdCiAgICAgICAgICB9KSk7CiAgICAgICAgICBjaGFydEVsZW1lbnQudXBkYXRlU2VyaWVzKGN1cnJlbnRTZXJpZXMsIGZhbHNlKTsKICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnREYXRhc2V0ID09PSAibmV0d29yayIpIHsKICAgICAgICAgIHByZXZpb3VzVmFsdWVzLmRvd25sb2FkID0gZ2V0TmV4dFZhbHVlKHByZXZpb3VzVmFsdWVzLmRvd25sb2FkLCAxMDAsIDIwMCwgMTApOwogICAgICAgICAgcHJldmlvdXNWYWx1ZXMudXBsb2FkID0gZ2V0TmV4dFZhbHVlKHByZXZpb3VzVmFsdWVzLnVwbG9hZCwgMjAsIDUwLCA1KTsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZXJpZXMgPSBjaGFydEVsZW1lbnQuY2hhcnRTZXJpZXMubWFwKChzZXJpZXMsIGluZGV4MikgPT4gKHsKICAgICAgICAgICAgbmFtZTogc2VyaWVzLm5hbWUsCiAgICAgICAgICAgIGRhdGE6IFsKICAgICAgICAgICAgICAuLi5zZXJpZXMuZGF0YSwKICAgICAgICAgICAgICBpbmRleDIgPT09IDAgPyB7IHg6IG5ld1RpbWVzdGFtcCwgeTogcHJldmlvdXNWYWx1ZXMuZG93bmxvYWQgfSA6IHsgeDogbmV3VGltZXN0YW1wLCB5OiBwcmV2aW91c1ZhbHVlcy51cGxvYWQgfQogICAgICAgICAgICBdCiAgICAgICAgICB9KSk7CiAgICAgICAgICBjaGFydEVsZW1lbnQudXBkYXRlU2VyaWVzKGN1cnJlbnRTZXJpZXMsIGZhbHNlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBjb25zdCB1cGRhdGVDb25uZWN0aW9ucyA9ICgpID0+IHsKICAgICAgaWYgKCFjb25uZWN0aW9uc0NoYXJ0RWxlbWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5vdzIgPSBEYXRlLm5vdygpOwogICAgICBjb25zdCBuZXdUaW1lc3RhbXAgPSBuZXcgRGF0ZShub3cyKS50b0lTT1N0cmluZygpOwogICAgICBjb25zdCBjaGFuZ2UgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyMSkgLSAxMDsKICAgICAgcHJldmlvdXNWYWx1ZXMuY29ubmVjdGlvbnMgPSBNYXRoLm1heCg1MCwgTWF0aC5taW4oMzAwLCBwcmV2aW91c1ZhbHVlcy5jb25uZWN0aW9ucyArIGNoYW5nZSkpOwogICAgICBjb25zdCBjdXJyZW50U2VyaWVzID0gY29ubmVjdGlvbnNDaGFydEVsZW1lbnQuY2hhcnRTZXJpZXM7CiAgICAgIGNvbnN0IG5ld0RhdGEgPSBbewogICAgICAgIG5hbWU6IGN1cnJlbnRTZXJpZXNbMF0/Lm5hbWUgfHwgIkNvbm5lY3Rpb25zIiwKICAgICAgICBkYXRhOiBbCiAgICAgICAgICAuLi5jdXJyZW50U2VyaWVzWzBdPy5kYXRhIHx8IFtdLAogICAgICAgICAgeyB4OiBuZXdUaW1lc3RhbXAsIHk6IHByZXZpb3VzVmFsdWVzLmNvbm5lY3Rpb25zIH0KICAgICAgICBdCiAgICAgIH1dOwogICAgICBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudC51cGRhdGVTZXJpZXMobmV3RGF0YSwgZmFsc2UpOwogICAgfTsKICAgIGNvbnN0IHN3aXRjaERhdGFzZXQgPSAobmFtZSkgPT4gewogICAgICBjdXJyZW50RGF0YXNldCA9IG5hbWU7CiAgICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tuYW1lXTsKICAgICAgY2hhcnRFbGVtZW50LmxhYmVsID0gZGF0YXNldC5sYWJlbDsKICAgICAgY2hhcnRFbGVtZW50LnNlcmllcyA9IGRhdGFzZXQuc2VyaWVzOwogICAgICBjaGFydEVsZW1lbnQueUF4aXNGb3JtYXR0ZXIgPSBmb3JtYXR0ZXJzMltuYW1lXTsKICAgICAgaWYgKG5hbWUgPT09ICJzeXN0ZW0iKSB7CiAgICAgICAgY2hhcnRFbGVtZW50LnlBeGlzU2NhbGluZyA9ICJwZXJjZW50YWdlIjsKICAgICAgICBjaGFydEVsZW1lbnQueUF4aXNNYXggPSAxMDA7CiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gIm5ldHdvcmsiKSB7CiAgICAgICAgY2hhcnRFbGVtZW50LnlBeGlzU2NhbGluZyA9ICJkeW5hbWljIjsKICAgICAgfSBlbHNlIHsKICAgICAgICBjaGFydEVsZW1lbnQueUF4aXNTY2FsaW5nID0gImR5bmFtaWMiOwogICAgICB9CiAgICAgIGxhc3REYXRhUG9pbnRUaW1lID0gRGF0ZS5ub3coKSAtIERBVEFfUE9JTlRfSU5URVJWQUw7CiAgICB9OwogICAgY29uc3Qgc3RhcnRSZWFsdGltZSA9ICgpID0+IHsKICAgICAgaWYgKCFpbnRlcnZhbElkICYmIChjdXJyZW50RGF0YXNldCA9PT0gInN5c3RlbSIgfHwgY3VycmVudERhdGFzZXQgPT09ICJuZXR3b3JrIikpIHsKICAgICAgICBjaGFydEVsZW1lbnQucmVhbHRpbWVNb2RlID0gdHJ1ZTsKICAgICAgICBpbnRlcnZhbElkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IGFkZFJlYWx0aW1lRGF0YSgpLCBEQVRBX1BPSU5UX0lOVEVSVkFMKTsKICAgICAgfQogICAgICBpZiAoIWNvbm5lY3Rpb25zSW50ZXJ2YWxJZCkgewogICAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnJlYWx0aW1lTW9kZSA9IHRydWU7CiAgICAgICAgY29ubmVjdGlvbnNJbnRlcnZhbElkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHVwZGF0ZUNvbm5lY3Rpb25zKCksIFVQREFURV9JTlRFUlZBTCk7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCBzdG9wUmVhbHRpbWUgPSAoKSA9PiB7CiAgICAgIGlmIChpbnRlcnZhbElkKSB7CiAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7CiAgICAgICAgaW50ZXJ2YWxJZCA9IG51bGw7CiAgICAgICAgY2hhcnRFbGVtZW50LnJlYWx0aW1lTW9kZSA9IGZhbHNlOwogICAgICB9CiAgICAgIGlmIChjb25uZWN0aW9uc0ludGVydmFsSWQpIHsKICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChjb25uZWN0aW9uc0ludGVydmFsSWQpOwogICAgICAgIGNvbm5lY3Rpb25zSW50ZXJ2YWxJZCA9IG51bGw7CiAgICAgICAgY29ubmVjdGlvbnNDaGFydEVsZW1lbnQucmVhbHRpbWVNb2RlID0gZmFsc2U7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCByYW5kb21pemVEYXRhID0gKCkgPT4gewogICAgICBpZiAoY3VycmVudERhdGFzZXQgPT09ICJzeXN0ZW0iKSB7CiAgICAgICAgcHJldmlvdXNWYWx1ZXMuY3B1ID0gTWF0aC5yYW5kb20oKSA+IDAuNSA/IDg1IDogMjU7CiAgICAgICAgcHJldmlvdXNWYWx1ZXMubWVtb3J5ID0gTWF0aC5yYW5kb20oKSA+IDAuNSA/IDgwIDogNDU7CiAgICAgIH0gZWxzZSBpZiAoY3VycmVudERhdGFzZXQgPT09ICJuZXR3b3JrIikgewogICAgICAgIHByZXZpb3VzVmFsdWVzLmRvd25sb2FkID0gTWF0aC5yYW5kb20oKSA+IDAuNSA/IDI1MCA6IDEwMDsKICAgICAgICBwcmV2aW91c1ZhbHVlcy51cGxvYWQgPSBNYXRoLnJhbmRvbSgpID4gMC41ID8gODAgOiAyMDsKICAgICAgfQogICAgICBwcmV2aW91c1ZhbHVlcy5jb25uZWN0aW9ucyA9IE1hdGgucmFuZG9tKCkgPiAwLjUgPyAyODAgOiA4MDsKICAgICAgbGFzdERhdGFQb2ludFRpbWUgPSAwOwogICAgICBjb25uZWN0aW9uc0xhc3RVcGRhdGUgPSAwOwogICAgfTsKICAgIGNvbnN0IGJ1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4gewogICAgICBjb25zdCB0ZXh0OSA9IGJ1dHRvbi50ZXh0Q29udGVudD8udHJpbSgpOwogICAgICBpZiAodGV4dDkgPT09ICJTeXN0ZW0gVXNhZ2UiKSB7CiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3dpdGNoRGF0YXNldCgic3lzdGVtIikpOwogICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiTmV0d29yayBUcmFmZmljIikgewogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN3aXRjaERhdGFzZXQoIm5ldHdvcmsiKSk7CiAgICAgIH0gZWxzZSBpZiAodGV4dDkgPT09ICJTYWxlcyBEYXRhIikgewogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN3aXRjaERhdGFzZXQoInNhbGVzIikpOwogICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiU3RhcnQgTGl2ZSIpIHsKICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzdGFydFJlYWx0aW1lKCkpOwogICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiU3RvcCBMaXZlIikgewogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN0b3BSZWFsdGltZSgpKTsKICAgICAgfSBlbHNlIGlmICh0ZXh0OSA9PT0gIlNwaWtlIFZhbHVlcyIpIHsKICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiByYW5kb21pemVEYXRhKCkpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IHVwZGF0ZUJ1dHRvblN0YXRlcyA9ICgpID0+IHsKICAgICAgY29uc3QgYnV0dG9uczIgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICAgIGJ1dHRvbnMyLmZvckVhY2goKGJ1dHRvbikgPT4gewogICAgICAgIGNvbnN0IHRleHQ5ID0gYnV0dG9uLnRleHRDb250ZW50Py50cmltKCk7CiAgICAgICAgaWYgKHRleHQ5ID09PSAiU3lzdGVtIFVzYWdlIikgewogICAgICAgICAgYnV0dG9uLnR5cGUgPSBjdXJyZW50RGF0YXNldCA9PT0gInN5c3RlbSIgPyAiaGlnaGxpZ2h0ZWQiIDogIm5vcm1hbCI7CiAgICAgICAgfSBlbHNlIGlmICh0ZXh0OSA9PT0gIk5ldHdvcmsgVHJhZmZpYyIpIHsKICAgICAgICAgIGJ1dHRvbi50eXBlID0gY3VycmVudERhdGFzZXQgPT09ICJuZXR3b3JrIiA/ICJoaWdobGlnaHRlZCIgOiAibm9ybWFsIjsKICAgICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiU2FsZXMgRGF0YSIpIHsKICAgICAgICAgIGJ1dHRvbi50eXBlID0gY3VycmVudERhdGFzZXQgPT09ICJzYWxlcyIgPyAiaGlnaGxpZ2h0ZWQiIDogIm5vcm1hbCI7CiAgICAgICAgfQogICAgICB9KTsKICAgIH07CiAgICBjaGFydEVsZW1lbnQucm9sbGluZ1dpbmRvdyA9IFRJTUVfV0lORE9XOwogICAgY2hhcnRFbGVtZW50LnJlYWx0aW1lTW9kZSA9IGZhbHNlOwogICAgY2hhcnRFbGVtZW50LnlBeGlzU2NhbGluZyA9ICJwZXJjZW50YWdlIjsKICAgIGNoYXJ0RWxlbWVudC55QXhpc01heCA9IDEwMDsKICAgIGNoYXJ0RWxlbWVudC5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSAxZTM7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgY2hhcnRFbGVtZW50LnVwZGF0ZVRpbWVXaW5kb3coKTsKICAgIH0sIDEwMCk7CiAgICBjb25zdCBvcmlnaW5hbFN3aXRjaERhdGFzZXQgPSBzd2l0Y2hEYXRhc2V0OwogICAgY29uc3Qgc3dpdGNoRGF0YXNldFdpdGhCdXR0b25VcGRhdGUgPSAobmFtZSkgPT4gewogICAgICBvcmlnaW5hbFN3aXRjaERhdGFzZXQobmFtZSk7CiAgICAgIHVwZGF0ZUJ1dHRvblN0YXRlcygpOwogICAgfTsKICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICAgIGNvbnN0IHRleHQ5ID0gYnV0dG9uLnRleHRDb250ZW50Py50cmltKCk7CiAgICAgIGlmICh0ZXh0OSA9PT0gIlN5c3RlbSBVc2FnZSIpIHsKICAgICAgICBidXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0KCJzeXN0ZW0iKSk7CiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3dpdGNoRGF0YXNldFdpdGhCdXR0b25VcGRhdGUoInN5c3RlbSIpKTsKICAgICAgfSBlbHNlIGlmICh0ZXh0OSA9PT0gIk5ldHdvcmsgVHJhZmZpYyIpIHsKICAgICAgICBidXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0KCJuZXR3b3JrIikpOwogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN3aXRjaERhdGFzZXRXaXRoQnV0dG9uVXBkYXRlKCJuZXR3b3JrIikpOwogICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiU2FsZXMgRGF0YSIpIHsKICAgICAgICBidXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0KCJzYWxlcyIpKTsKICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0V2l0aEJ1dHRvblVwZGF0ZSgic2FsZXMiKSk7CiAgICAgIH0KICAgIH0pOwogICAgaWYgKGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50KSB7CiAgICAgIGNvbnN0IGluaXRpYWxDb25uZWN0aW9uc0RhdGEgPSBnZW5lcmF0ZUluaXRpYWxEYXRhKHByZXZpb3VzVmFsdWVzLmNvbm5lY3Rpb25zLCAzMCwgVVBEQVRFX0lOVEVSVkFMKTsKICAgICAgY29ubmVjdGlvbnNDaGFydEVsZW1lbnQuc2VyaWVzID0gW3sKICAgICAgICBuYW1lOiAiQ29ubmVjdGlvbnMiLAogICAgICAgIGRhdGE6IGluaXRpYWxDb25uZWN0aW9uc0RhdGEKICAgICAgfV07CiAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnJvbGxpbmdXaW5kb3cgPSBUSU1FX1dJTkRPVzsKICAgICAgY29ubmVjdGlvbnNDaGFydEVsZW1lbnQucmVhbHRpbWVNb2RlID0gZmFsc2U7CiAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnlBeGlzU2NhbGluZyA9ICJmaXhlZCI7CiAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnlBeGlzTWF4ID0gMzUwOwogICAgICBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudC5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSAxZTM7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnVwZGF0ZVRpbWVXaW5kb3coKTsKICAgICAgfSwgMTAwKTsKICAgIH0KICB9fT4KICAgICAgPHN0eWxlPgogICAgICAgICR7aWAKICAgICAgICAuZGVtb0JveCB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb250cm9scyB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY2hhcnQtY29udGFpbmVyIHsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgICBtaW4taGVpZ2h0OiA0MDBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmluZm8gewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJkZW1vQm94Ij4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iRGF0YXNldDoiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5TeXN0ZW0gVXNhZ2U8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPk5ldHdvcmsgVHJhZmZpYzwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U2FsZXMgRGF0YTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlJlYWwtdGltZToiPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0YXJ0IExpdmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0b3AgTGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFjdGlvbnM6Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TcGlrZSBWYWx1ZXM8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iY2hhcnQtY29udGFpbmVyIj4KICAgICAgICA8ZGVlcy1jaGFydC1hcmVhCiAgICAgICAgICBpZD0ibWFpbi1jaGFydCIKICAgICAgICAgIC5sYWJlbD0ke2luaXRpYWxEYXRhc2V0cy5zeXN0ZW0ubGFiZWx9CiAgICAgICAgICAuc2VyaWVzPSR7aW5pdGlhbERhdGFzZXRzLnN5c3RlbS5zZXJpZXN9CiAgICAgICAgICAueUF4aXNGb3JtYXR0ZXI9JHtpbml0aWFsRm9ybWF0dGVycy5zeXN0ZW19CiAgICAgICAgPjwvZGVlcy1jaGFydC1hcmVhPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0LWNvbnRhaW5lciIgc3R5bGU9Im1hcmdpbi10b3A6IDIwcHg7Ij4KICAgICAgICA8ZGVlcy1jaGFydC1hcmVhCiAgICAgICAgICBpZD0iY29ubmVjdGlvbnMtY2hhcnQiCiAgICAgICAgICAubGFiZWw9JHsiQWN0aXZlIENvbm5lY3Rpb25zIn0KICAgICAgICAgIC5zZXJpZXM9JHtbewogICAgbmFtZTogIkNvbm5lY3Rpb25zIiwKICAgIGRhdGE6IFtdCiAgfV19CiAgICAgICAgICAueUF4aXNGb3JtYXR0ZXI9JHsodmFsKSA9PiBgJHt2YWx9YH0KICAgICAgICA+PC9kZWVzLWNoYXJ0LWFyZWE+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iaW5mbyI+CiAgICAgICAgUmVhbC10aW1lIG1vbml0b3Jpbmcgd2l0aCAyLW1pbnV0ZSByb2xsaW5nIHdpbmRvdyDigKIgCiAgICAgICAgVXBkYXRlcyBldmVyeSBzZWNvbmQgd2l0aCBzbW9vdGggdmFsdWUgdHJhbnNpdGlvbnMg4oCiIAogICAgICAgIENsaWNrICdTcGlrZSBWYWx1ZXMnIHRvIHNpbXVsYXRlIGxvYWQgc3Bpa2VzCiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWFyZWEvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBjaGFydEFyZWFTdHlsZXMgPSBbCiAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgICAgLm1haW5ib3ggewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNoYXJ0VGl0bGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICB9CiAgICAgIC5jaGFydENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICByaWdodDogMHB4OwogICAgICAgIHBhZGRpbmc6IDQ0cHggMTZweCAxNnB4IDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyAvKiBFbnN1cmUgY29udGFpbmVyIGRvZXNuJ3Qgb3ZlcnJpZGUgY2hhcnQgYmFja2dyb3VuZCAqLwogICAgICB9CiAgICAgIAogICAgICAvKiBBcGV4Q2hhcnRzIHRoZW1lIG92ZXJyaWRlcyAqLwogICAgICAuYXBleGNoYXJ0cy1jYW52YXMgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC5hcGV4Y2hhcnRzLWlubmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICB9CiAgICAgIAogICAgICAuYXBleGNoYXJ0cy1ncmFwaGljYWwgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIGAKXTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWFyZWEvdGVtcGxhdGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHJlbmRlckNoYXJ0QXJlYSA9IChjb21wb25lbnQpID0+IHsKICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGFydFRpdGxlIj4ke2NvbXBvbmVudC5sYWJlbH08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0Q29udGFpbmVyIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWFyZWEvY29tcG9uZW50LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfc2VydmljZXMoKTsKdmFyIF9fZXNEZWNvcmF0ZTQ1ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0NiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0NoYXJ0QXJlYSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtY2hhcnQtYXJlYSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2NoYXJ0X2RlY29yYXRvcnM7CiAgbGV0IF9jaGFydF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NoYXJ0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYWJlbF9kZWNvcmF0b3JzOwogIGxldCBfbGFiZWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYWJlbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VyaWVzX2RlY29yYXRvcnM7CiAgbGV0IF9zZXJpZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZXJpZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3lBeGlzRm9ybWF0dGVyX2RlY29yYXRvcnM7CiAgbGV0IF95QXhpc0Zvcm1hdHRlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3lBeGlzRm9ybWF0dGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb2xsaW5nV2luZG93X2RlY29yYXRvcnM7CiAgbGV0IF9yb2xsaW5nV2luZG93X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcm9sbGluZ1dpbmRvd19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmVhbHRpbWVNb2RlX2RlY29yYXRvcnM7CiAgbGV0IF9yZWFsdGltZU1vZGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZWFsdGltZU1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3lBeGlzU2NhbGluZ19kZWNvcmF0b3JzOwogIGxldCBfeUF4aXNTY2FsaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfeUF4aXNTY2FsaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF95QXhpc01heF9kZWNvcmF0b3JzOwogIGxldCBfeUF4aXNNYXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF95QXhpc01heF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b1Njcm9sbEludGVydmFsX2RlY29yYXRvcnM7CiAgbGV0IF9hdXRvU2Nyb2xsSW50ZXJ2YWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hdXRvU2Nyb2xsSW50ZXJ2YWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0NoYXJ0QXJlYTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9jaGFydF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfbGFiZWxfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgX3Nlcmllc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfeUF4aXNGb3JtYXR0ZXJfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfcm9sbGluZ1dpbmRvd19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3JlYWx0aW1lTW9kZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF95QXhpc1NjYWxpbmdfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF95QXhpc01heF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2F1dG9TY3JvbGxJbnRlcnZhbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX19lc0RlY29yYXRlNDUodGhpcywgbnVsbCwgX2NoYXJ0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNoYXJ0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjaGFydCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jaGFydCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY2hhcnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY2hhcnRfaW5pdGlhbGl6ZXJzLCBfY2hhcnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0NSh0aGlzLCBudWxsLCBfbGFiZWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFiZWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhYmVsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxhYmVsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sYWJlbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sYWJlbF9pbml0aWFsaXplcnMsIF9sYWJlbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF9zZXJpZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VyaWVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZXJpZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VyaWVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZXJpZXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VyaWVzX2luaXRpYWxpemVycywgX3Nlcmllc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF95QXhpc0Zvcm1hdHRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ5QXhpc0Zvcm1hdHRlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAieUF4aXNGb3JtYXR0ZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoueUF4aXNGb3JtYXR0ZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnlBeGlzRm9ybWF0dGVyID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3lBeGlzRm9ybWF0dGVyX2luaXRpYWxpemVycywgX3lBeGlzRm9ybWF0dGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDUodGhpcywgbnVsbCwgX3JvbGxpbmdXaW5kb3dfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicm9sbGluZ1dpbmRvdyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicm9sbGluZ1dpbmRvdyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yb2xsaW5nV2luZG93LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yb2xsaW5nV2luZG93ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JvbGxpbmdXaW5kb3dfaW5pdGlhbGl6ZXJzLCBfcm9sbGluZ1dpbmRvd19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF9yZWFsdGltZU1vZGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicmVhbHRpbWVNb2RlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZWFsdGltZU1vZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVhbHRpbWVNb2RlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yZWFsdGltZU1vZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVhbHRpbWVNb2RlX2luaXRpYWxpemVycywgX3JlYWx0aW1lTW9kZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF95QXhpc1NjYWxpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAieUF4aXNTY2FsaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ5QXhpc1NjYWxpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoueUF4aXNTY2FsaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai55QXhpc1NjYWxpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfeUF4aXNTY2FsaW5nX2luaXRpYWxpemVycywgX3lBeGlzU2NhbGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF95QXhpc01heF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ5QXhpc01heCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAieUF4aXNNYXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoueUF4aXNNYXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnlBeGlzTWF4ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3lBeGlzTWF4X2luaXRpYWxpemVycywgX3lBeGlzTWF4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDUodGhpcywgbnVsbCwgX2F1dG9TY3JvbGxJbnRlcnZhbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhdXRvU2Nyb2xsSW50ZXJ2YWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9TY3JvbGxJbnRlcnZhbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hdXRvU2Nyb2xsSW50ZXJ2YWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmF1dG9TY3JvbGxJbnRlcnZhbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvU2Nyb2xsSW50ZXJ2YWxfaW5pdGlhbGl6ZXJzLCBfYXV0b1Njcm9sbEludGVydmFsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQ2hhcnRBcmVhMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkNoYXJ0IjsKICAgICNjaGFydF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfY2hhcnRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgLy8gaW5zdGFuY2UKICAgIGdldCBjaGFydCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NoYXJ0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2hhcnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NoYXJ0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9jaGFydF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX2xhYmVsX2luaXRpYWxpemVycywgIlVudGl0bGVkIENoYXJ0IikpOwogICAgZ2V0IGxhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYWJlbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZXJpZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9sYWJlbF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX3Nlcmllc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgc2VyaWVzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VyaWVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VyaWVzKHZhbHVlMikgewogICAgICB0aGlzLiNzZXJpZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8vIE92ZXJyaWRlIGdldHRlciB0byByZXR1cm4gaW50ZXJuYWwgY2hhcnQgZGF0YQogICAgZ2V0IGNoYXJ0U2VyaWVzKCkgewogICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbENoYXJ0RGF0YS5sZW5ndGggPiAwID8gdGhpcy5pbnRlcm5hbENoYXJ0RGF0YSA6IHRoaXMuc2VyaWVzOwogICAgfQogICAgI3lBeGlzRm9ybWF0dGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfc2VyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfeUF4aXNGb3JtYXR0ZXJfaW5pdGlhbGl6ZXJzLCAodmFsKSA9PiBgJHt2YWx9IE1icHNgKSk7CiAgICBnZXQgeUF4aXNGb3JtYXR0ZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiN5QXhpc0Zvcm1hdHRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHlBeGlzRm9ybWF0dGVyKHZhbHVlMikgewogICAgICB0aGlzLiN5QXhpc0Zvcm1hdHRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3JvbGxpbmdXaW5kb3dfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF95QXhpc0Zvcm1hdHRlcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX3JvbGxpbmdXaW5kb3dfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgcm9sbGluZ1dpbmRvdygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3JvbGxpbmdXaW5kb3dfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIC8vIDAgbWVhbnMgbm8gcm9sbGluZyB3aW5kb3cKICAgIHNldCByb2xsaW5nV2luZG93KHZhbHVlMikgewogICAgICB0aGlzLiNyb2xsaW5nV2luZG93X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcmVhbHRpbWVNb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfcm9sbGluZ1dpbmRvd19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX3JlYWx0aW1lTW9kZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgcmVhbHRpbWVNb2RlKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVhbHRpbWVNb2RlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcmVhbHRpbWVNb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNyZWFsdGltZU1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN5QXhpc1NjYWxpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9yZWFsdGltZU1vZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF95QXhpc1NjYWxpbmdfaW5pdGlhbGl6ZXJzLCAiZHluYW1pYyIpKTsKICAgIGdldCB5QXhpc1NjYWxpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiN5QXhpc1NjYWxpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB5QXhpc1NjYWxpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI3lBeGlzU2NhbGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3lBeGlzTWF4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfeUF4aXNTY2FsaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfeUF4aXNNYXhfaW5pdGlhbGl6ZXJzLCAxMDApKTsKICAgIGdldCB5QXhpc01heCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3lBeGlzTWF4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICAvLyBVc2VkIHdoZW4geUF4aXNTY2FsaW5nIGlzICdmaXhlZCcgb3IgJ3BlcmNlbnRhZ2UnCiAgICBzZXQgeUF4aXNNYXgodmFsdWUyKSB7CiAgICAgIHRoaXMuI3lBeGlzTWF4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYXV0b1Njcm9sbEludGVydmFsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfeUF4aXNNYXhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9hdXRvU2Nyb2xsSW50ZXJ2YWxfaW5pdGlhbGl6ZXJzLCAxZTMpKTsKICAgIGdldCBhdXRvU2Nyb2xsSW50ZXJ2YWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhdXRvU2Nyb2xsSW50ZXJ2YWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIC8vIEF1dG8tc2Nyb2xsIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyAoMCB0byBkaXNhYmxlKQogICAgc2V0IGF1dG9TY3JvbGxJbnRlcnZhbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXV0b1Njcm9sbEludGVydmFsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICByZXNpemVPYnNlcnZlciA9IF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX2F1dG9TY3JvbGxJbnRlcnZhbF9leHRyYUluaXRpYWxpemVycyk7CiAgICByZXNpemVUaW1lb3V0OwogICAgaW50ZXJuYWxDaGFydERhdGEgPSBbXTsKICAgIGF1dG9TY3JvbGxUaW1lciA9IG51bGw7CiAgICBERUJVR19SRVNJWkUgPSBmYWxzZTsKICAgIC8vIFNldCB0byB0cnVlIHRvIGVuYWJsZSByZXNpemUgZGVidWdnaW5nCiAgICAvLyBDaGFydCBjb2xvciBzY2hlbWVzCiAgICBDSEFSVF9DT0xPUlMgPSB7CiAgICAgIGRhcms6IFsKICAgICAgICAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsCiAgICAgICAgLy8gQmx1ZQogICAgICAgICJoc2woMTczLjQgODAuNCUgNDAlKSIsCiAgICAgICAgLy8gVGVhbAogICAgICAgICJoc2woMjgwLjMgODcuNCUgNjYuNyUpIiwKICAgICAgICAvLyBQdXJwbGUKICAgICAgICAiaHNsKDI0LjYgOTUlIDUzLjElKSIKICAgICAgICAvLyBPcmFuZ2UKICAgICAgXSwKICAgICAgbGlnaHQ6IFsKICAgICAgICAiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsCiAgICAgICAgLy8gQmx1ZSAoc2hhZGNuIHByaW1hcnkpCiAgICAgICAgImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLAogICAgICAgIC8vIEdyZWVuIChzaGFkY24gc3VjY2VzcykKICAgICAgICAiaHNsKDI4MC4zIDQ3LjclIDUwLjIlKSIsCiAgICAgICAgLy8gUHVycGxlIChtdXRlZCkKICAgICAgICAiaHNsKDIwLjUgOTAuMiUgNDguMiUpIgogICAgICAgIC8vIE9yYW5nZSAoc2hhZGNuIGRlc3RydWN0aXZlIHZhcmlhbnQpCiAgICAgIF0KICAgIH07CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc2V0dXAoKTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4gewogICAgICAgIGlmICh0aGlzLnJlc2l6ZVRpbWVvdXQpIHsKICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZVRpbWVvdXQpOwogICAgICAgIH0KICAgICAgICB0aGlzLnJlc2l6ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5jaGFydCkgewogICAgICAgICAgICBpZiAodGhpcy5ERUJVR19SRVNJWkUgJiYgZW50cmllcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdOwogICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJEZWVzQ2hhcnRBcmVhIC0gUmVzaXplIGRldGVjdGVkOiIsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiBlbnRyeS5jb250ZW50UmVjdC53aWR0aCwKICAgICAgICAgICAgICAgIGhlaWdodDogZW50cnkuY29udGVudFJlY3QuaGVpZ2h0CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5yZXNpemVDaGFydCgpOwogICAgICAgICAgfQogICAgICAgIH0sIDEwMCk7CiAgICAgIH0pOwogICAgICB0aGlzLnJlZ2lzdGVyR2FyYmFnZUZ1bmN0aW9uKGFzeW5jICgpID0+IHsKICAgICAgICBpZiAodGhpcy5yZXNpemVUaW1lb3V0KSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lb3V0KTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgIH0KICAgICAgICB0aGlzLnN0b3BBdXRvU2Nyb2xsKCk7CiAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRoaXMuY2hhcnQuZGVzdHJveSgpOwogICAgICAgICAgICB0aGlzLmNoYXJ0ID0gbnVsbDsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGRlc3Ryb3lpbmcgY2hhcnQ6IiwgZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgaWYgKHRoaXMuY2hhcnQpIHsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICAgIGF3YWl0IHRoaXMucmVzaXplQ2hhcnQoKTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IGNoYXJ0QXJlYVN0eWxlczsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIHJlbmRlckNoYXJ0QXJlYSh0aGlzKTsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGNvbnN0IEFwZXhDaGFydHNMaWIgPSBhd2FpdCBEZWVzU2VydmljZUxpYkxvYWRlci5nZXRJbnN0YW5jZSgpLmxvYWRBcGV4Q2hhcnRzKCk7CiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgIGNvbnN0IG1haW5ib3ggPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1haW5ib3giKTsKICAgICAgY29uc3QgY2hhcnRDb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNoYXJ0Q29udGFpbmVyIik7CiAgICAgIGlmICghbWFpbmJveCB8fCAhY2hhcnRDb250YWluZXIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJDaGFydCBjb250YWluZXJzIG5vdCBmb3VuZCIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBzdHlsZUNoYXJ0Q29udGFpbmVyID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2hhcnRDb250YWluZXIpOwogICAgICBjb25zdCBwYWRkaW5nVG9wID0gcGFyc2VJbnQoc3R5bGVDaGFydENvbnRhaW5lci5wYWRkaW5nVG9wLCAxMCk7CiAgICAgIGNvbnN0IHBhZGRpbmdCb3R0b20gPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdCb3R0b20sIDEwKTsKICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdMZWZ0LCAxMCk7CiAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IHBhcnNlSW50KHN0eWxlQ2hhcnRDb250YWluZXIucGFkZGluZ1JpZ2h0LCAxMCk7CiAgICAgIGNvbnN0IGluaXRpYWxXaWR0aCA9IG1haW5ib3guY2xpZW50V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDsKICAgICAgY29uc3QgaW5pdGlhbEhlaWdodCA9IG1haW5ib3gub2Zmc2V0SGVpZ2h0IC0gcGFkZGluZ1RvcCAtIHBhZGRpbmdCb3R0b207CiAgICAgIGNvbnN0IGNoYXJ0U2VyaWVzID0gdGhpcy5zZXJpZXMubGVuZ3RoID4gMCA/IHRoaXMuc2VyaWVzIDogWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJjcHUiLAogICAgICAgICAgZGF0YTogWwogICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDAzOjAwOjAwIiwgeTogMjUgfSwKICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQwNzowMDowMCIsIHk6IDMwIH0sCiAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMTVUMTE6MDA6MDAiLCB5OiAyMCB9LAogICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDE1OjAwOjAwIiwgeTogMzUgfSwKICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQxOTowMDowMCIsIHk6IDI1IH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJtZW1vcnkiLAogICAgICAgICAgZGF0YTogWwogICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDAzOjAwOjAwIiwgeTogMTAgfSwKICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQwNzowMDowMCIsIHk6IDEyIH0sCiAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMTVUMTE6MDA6MDAiLCB5OiAxMCB9LAogICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDE1OjAwOjAwIiwgeTogMzAgfSwKICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQxOTowMDowMCIsIHk6IDQwIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF07CiAgICAgIHRoaXMuaW50ZXJuYWxDaGFydERhdGEgPSBjaGFydFNlcmllczsKICAgICAgY29uc3QgaXNEYXJrID0gIXRoaXMuZ29CcmlnaHQ7CiAgICAgIGNvbnN0IHRoZW1lID0gaXNEYXJrID8gImRhcmsiIDogImxpZ2h0IjsKICAgICAgdmFyIG9wdGlvbnMgPSB7CiAgICAgICAgc2VyaWVzOiBjaGFydFNlcmllcywKICAgICAgICBjaGFydDogewogICAgICAgICAgd2lkdGg6IGluaXRpYWxXaWR0aCB8fCAxMDAsCiAgICAgICAgICAvLyBVc2UgYWN0dWFsIHdpZHRoIG9yIGZhbGxiYWNrCiAgICAgICAgICBoZWlnaHQ6IGluaXRpYWxIZWlnaHQgfHwgMTAwLAogICAgICAgICAgLy8gVXNlIGFjdHVhbCBoZWlnaHQgb3IgZmFsbGJhY2sKICAgICAgICAgIHR5cGU6ICJhcmVhIiwKICAgICAgICAgIGJhY2tncm91bmQ6ICJ0cmFuc3BhcmVudCIsCiAgICAgICAgICAvLyBUcmFuc3BhcmVudCBiYWNrZ3JvdW5kIHRvIGluaGVyaXQgZnJvbSBjb250YWluZXIKICAgICAgICAgIHRvb2xiYXI6IHsKICAgICAgICAgICAgc2hvdzogZmFsc2UKICAgICAgICAgICAgLy8gVGhpcyBsaW5lIGRpc2FibGVzIHRoZSB0b29sYmFyCiAgICAgICAgICB9LAogICAgICAgICAgYW5pbWF0aW9uczogewogICAgICAgICAgICBlbmFibGVkOiAhdGhpcy5yZWFsdGltZU1vZGUsCiAgICAgICAgICAgIC8vIERpc2FibGUgYW5pbWF0aW9ucyBpbiByZWFsdGltZSBtb2RlCiAgICAgICAgICAgIHNwZWVkOiA0MDAsCiAgICAgICAgICAgIGFuaW1hdGVHcmFkdWFsbHk6IHsKICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSwKICAgICAgICAgICAgICAvLyBEaXNhYmxlIGdyYWR1YWwgYW5pbWF0aW9uIGZvciBjbGVhbmVyIHVwZGF0ZXMKICAgICAgICAgICAgICBkZWxheTogMAogICAgICAgICAgICB9LAogICAgICAgICAgICBkeW5hbWljQW5pbWF0aW9uOiB7CiAgICAgICAgICAgICAgZW5hYmxlZDogIXRoaXMucmVhbHRpbWVNb2RlLAogICAgICAgICAgICAgIHNwZWVkOiAzNTAKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHpvb206IHsKICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UKICAgICAgICAgICAgLy8gRGlzYWJsZSB6b29tIGZvciBjbGVhbmVyIGludGVyYWN0aW9uCiAgICAgICAgICB9LAogICAgICAgICAgc2VsZWN0aW9uOiB7CiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlCiAgICAgICAgICAgIC8vIERpc2FibGUgc2VsZWN0aW9uCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBkYXRhTGFiZWxzOiB7CiAgICAgICAgICBlbmFibGVkOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgc3Ryb2tlOiB7CiAgICAgICAgICB3aWR0aDogMiwKICAgICAgICAgIGN1cnZlOiAic21vb3RoIgogICAgICAgIH0sCiAgICAgICAgeGF4aXM6IHsKICAgICAgICAgIHR5cGU6ICJkYXRldGltZSIsCiAgICAgICAgICAvLyBUaW1lLXNlcmllcyBkYXRhCiAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgZm9ybWF0OiAiSEg6bW06c3MiLAogICAgICAgICAgICAvLyBUaW1lIGZvcm1hdHRpbmcgd2l0aCBzZWNvbmRzCiAgICAgICAgICAgIGRhdGV0aW1lVVRDOiBmYWxzZSwKICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICBjb2xvcnM6IFtpc0RhcmsgPyAiaHNsKDAgMCUgNjMuOSUpIiA6ICJoc2woMCAwJSAyMCUpIl0sCiAgICAgICAgICAgICAgLy8gTGFiZWwgY29sb3IKICAgICAgICAgICAgICBmb250U2l6ZTogIjEycHgiLAogICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICctYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIHNhbnMtc2VyaWYnLAogICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICI0MDAiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBheGlzQm9yZGVyOiB7CiAgICAgICAgICAgIHNob3c6IGZhbHNlCiAgICAgICAgICAgIC8vIEhpZGUgeC1heGlzIGJvcmRlcgogICAgICAgICAgfSwKICAgICAgICAgIGF4aXNUaWNrczogewogICAgICAgICAgICBzaG93OiBmYWxzZQogICAgICAgICAgICAvLyBIaWRlIHgtYXhpcyB0aWNrcwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgeWF4aXM6IHsKICAgICAgICAgIG1pbjogMCwKICAgICAgICAgIG1heDogdGhpcy55QXhpc1NjYWxpbmcgPT09ICJkeW5hbWljIiA/IHZvaWQgMCA6IHRoaXMueUF4aXNNYXgsCiAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgZm9ybWF0dGVyOiB0aGlzLnlBeGlzRm9ybWF0dGVyLAogICAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICAgIGNvbG9yczogW2lzRGFyayA/ICJoc2woMCAwJSA2My45JSkiIDogImhzbCgwIDAlIDIwJSkiXSwKICAgICAgICAgICAgICAvLyBMYWJlbCBjb2xvcgogICAgICAgICAgICAgIGZvbnRTaXplOiAiMTJweCIsCiAgICAgICAgICAgICAgZm9udEZhbWlseTogJy1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgc2Fucy1zZXJpZicsCiAgICAgICAgICAgICAgZm9udFdlaWdodDogIjQwMCIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGF4aXNCb3JkZXI6IHsKICAgICAgICAgICAgc2hvdzogZmFsc2UKICAgICAgICAgICAgLy8gSGlkZSB5LWF4aXMgYm9yZGVyCiAgICAgICAgICB9LAogICAgICAgICAgYXhpc1RpY2tzOiB7CiAgICAgICAgICAgIHNob3c6IGZhbHNlCiAgICAgICAgICAgIC8vIEhpZGUgeS1heGlzIHRpY2tzCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0b29sdGlwOiB7CiAgICAgICAgICBzaGFyZWQ6IHRydWUsCiAgICAgICAgICAvLyBFbmFibGVzIHRoZSB0b29sdGlwIHRvIGRpc3BsYXkgYWNyb3NzIHNlcmllcwogICAgICAgICAgaW50ZXJzZWN0OiBmYWxzZSwKICAgICAgICAgIC8vIEFsbG93cyBob3ZlcmluZyBhbnl3aGVyZSBvbiB0aGUgY2hhcnQKICAgICAgICAgIGZvbGxvd0N1cnNvcjogdHJ1ZSwKICAgICAgICAgIC8vIE1ha2VzIHRvb2x0aXAgZm9sbG93IG1vdXNlIGV2ZW4gYmV0d2VlbiBwb2ludHMKICAgICAgICAgIHg6IHsKICAgICAgICAgICAgZm9ybWF0OiAiZGQvTU0veXkgSEg6bW0iCiAgICAgICAgICB9LAogICAgICAgICAgY3VzdG9tOiAoeyBzZXJpZXMsIGRhdGFQb2ludEluZGV4LCB3OiB3MyB9KSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaGVtZSA9IHczLmNvbmZpZy50aGVtZS5tb2RlOwogICAgICAgICAgICBjb25zdCBpc0RhcmtNb2RlID0gY3VycmVudFRoZW1lID09PSAiZGFyayI7CiAgICAgICAgICAgIGNvbnN0IGJnQ29sb3IgPSBpc0RhcmtNb2RlID8gImhzbCgwIDAlIDklKSIgOiAiaHNsKDAgMCUgMTAwJSkiOwogICAgICAgICAgICBjb25zdCB0ZXh0Q29sb3IgPSBpc0RhcmtNb2RlID8gImhzbCgwIDAlIDk1JSkiIDogImhzbCgwIDAlIDklKSI7CiAgICAgICAgICAgIGNvbnN0IGJvcmRlckNvbG9yID0gaXNEYXJrTW9kZSA/ICJoc2woMCAwJSAxNC45JSkiIDogImhzbCgwIDAlIDg5LjglKSI7CiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlcjIgPSB3My5jb25maWcueWF4aXNbMF0/LmxhYmVscz8uZm9ybWF0dGVyIHx8ICgodmFsKSA9PiB2YWwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgIGxldCB0b29sdGlwQ29udGVudCA9IGA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAxMnB4OyBiYWNrZ3JvdW5kOiAke2JnQ29sb3J9OyBjb2xvcjogJHt0ZXh0Q29sb3J9OyBib3JkZXItcmFkaXVzOiA2cHg7IGJveC1zaGFkb3c6IDAgMnB4IDhweCAwIGhzbCgwIDAlIDAlIC8gJHtpc0RhcmtNb2RlID8gIjAuMiIgOiAiMC4xIn0pOyBib3JkZXI6IDFweCBzb2xpZCAke2JvcmRlckNvbG9yfTtmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij5gOwogICAgICAgICAgICBzZXJpZXMuZm9yRWFjaCgoczksIGluZGV4MikgPT4gewogICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdzMuZ2xvYmFscy5zZXJpZXNOYW1lc1tpbmRleDJdOwogICAgICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IHM5W2RhdGFQb2ludEluZGV4XTsKICAgICAgICAgICAgICBjb25zdCBjb2xvcjIgPSB3My5nbG9iYWxzLmNvbG9yc1tpbmRleDJdOwogICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gZm9ybWF0dGVyMih2YWx1ZTIpOwogICAgICAgICAgICAgIHRvb2x0aXBDb250ZW50ICs9IGA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhweDsgbWFyZ2luOiAke2luZGV4MiA+IDAgPyAiNnB4IiA6ICIwIn0gMDsiPgogICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxMHB4OyBoZWlnaHQ6IDEwcHg7IGJhY2tncm91bmQ6ICR7Y29sb3IyfTsgYm9yZGVyLXJhZGl1czogMnB4OyI+PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogNTAwOyI+JHtsYWJlbH06PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDogYXV0bzsgZm9udC13ZWlnaHQ6IDYwMDsiPiR7Zm9ybWF0dGVkVmFsdWV9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj5gOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdG9vbHRpcENvbnRlbnQgKz0gYDwvZGl2PmA7CiAgICAgICAgICAgIHJldHVybiB0b29sdGlwQ29udGVudDsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdyaWQ6IHsKICAgICAgICAgIHhheGlzOiB7CiAgICAgICAgICAgIGxpbmVzOiB7CiAgICAgICAgICAgICAgc2hvdzogZmFsc2UKICAgICAgICAgICAgICAvLyBIaWRlIHZlcnRpY2FsIGdyaWQgbGluZXMgZm9yIGNsZWFuZXIgbG9vawogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgeWF4aXM6IHsKICAgICAgICAgICAgbGluZXM6IHsKICAgICAgICAgICAgICBzaG93OiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBib3JkZXJDb2xvcjogaXNEYXJrID8gImhzbCgwIDAlIDE0LjklKSIgOiAiaHNsKDAgMCUgOTQlKSIsCiAgICAgICAgICAvLyBWZXJ5IHN1YnRsZSBncmlkIGxpbmVzCiAgICAgICAgICBzdHJva2VEYXNoQXJyYXk6IDAsCiAgICAgICAgICAvLyBTb2xpZCBsaW5lCiAgICAgICAgICBwYWRkaW5nOiB7CiAgICAgICAgICAgIHRvcDogMTAsCiAgICAgICAgICAgIHJpZ2h0OiAyMCwKICAgICAgICAgICAgYm90dG9tOiAxMCwKICAgICAgICAgICAgbGVmdDogMjAKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZpbGw6IHsKICAgICAgICAgIHR5cGU6ICJncmFkaWVudCIsCiAgICAgICAgICAvLyBHcmFkaWVudCBmaWxsIGZvciB0aGUgYXJlYQogICAgICAgICAgZ3JhZGllbnQ6IHsKICAgICAgICAgICAgc2hhZGU6IGlzRGFyayA/ICJkYXJrIiA6ICJsaWdodCIsCiAgICAgICAgICAgIHR5cGU6ICJ2ZXJ0aWNhbCIsCiAgICAgICAgICAgIHNoYWRlSW50ZW5zaXR5OiAwLjEsCiAgICAgICAgICAgIG9wYWNpdHlGcm9tOiBpc0RhcmsgPyAwLjIgOiAwLjMsCiAgICAgICAgICAgIG9wYWNpdHlUbzogMCwKICAgICAgICAgICAgc3RvcHM6IFswLCAxMDBdCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjb2xvcnM6IGlzRGFyayA/IHRoaXMuQ0hBUlRfQ09MT1JTLmRhcmsgOiB0aGlzLkNIQVJUX0NPTE9SUy5saWdodCwKICAgICAgICB0aGVtZTogewogICAgICAgICAgbW9kZTogdGhlbWUKICAgICAgICB9CiAgICAgIH07CiAgICAgIHRyeSB7CiAgICAgICAgdGhpcy5jaGFydCA9IG5ldyBBcGV4Q2hhcnRzTGliKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY2hhcnRDb250YWluZXIiKSwgb3B0aW9ucyk7CiAgICAgICAgYXdhaXQgdGhpcy5jaGFydC5yZW5kZXIoKTsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDEwMCkpOwogICAgICAgIGF3YWl0IHRoaXMucmVzaXplQ2hhcnQoKTsKICAgICAgICBjb25zdCBtYWluYm94MiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmJveCIpOwogICAgICAgIGlmIChtYWluYm94MiAmJiB0aGlzLnJlc2l6ZU9ic2VydmVyKSB7CiAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShtYWluYm94Mik7CiAgICAgICAgICBpZiAodGhpcy5ERUJVR19SRVNJWkUpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIkRlZXNDaGFydEFyZWEgLSBSZXNpemVPYnNlcnZlciBhdHRhY2hlZCB0byBtYWluYm94Iik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIGNoYXJ0OiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiZ29CcmlnaHQiKSAmJiB0aGlzLmNoYXJ0KSB7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDaGFydFRoZW1lKCk7CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygic2VyaWVzIikgJiYgdGhpcy5jaGFydCAmJiB0aGlzLnNlcmllcy5sZW5ndGggPiAwKSB7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXJpZXModGhpcy5zZXJpZXMpOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInlBeGlzRm9ybWF0dGVyIikgJiYgdGhpcy5jaGFydCkgewogICAgICAgIGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlT3B0aW9ucyh7CiAgICAgICAgICB5YXhpczogewogICAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgICBmb3JtYXR0ZXI6IHRoaXMueUF4aXNGb3JtYXR0ZXIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInJlYWx0aW1lTW9kZSIpICYmIHRoaXMuY2hhcnQpIHsKICAgICAgICBhd2FpdCB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMoewogICAgICAgICAgY2hhcnQ6IHsKICAgICAgICAgICAgYW5pbWF0aW9uczogewogICAgICAgICAgICAgIGVuYWJsZWQ6ICF0aGlzLnJlYWx0aW1lTW9kZSwKICAgICAgICAgICAgICBzcGVlZDogNDAwLAogICAgICAgICAgICAgIGFuaW1hdGVHcmFkdWFsbHk6IHsKICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgZGVsYXk6IDAKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGR5bmFtaWNBbmltYXRpb246IHsKICAgICAgICAgICAgICAgIGVuYWJsZWQ6ICF0aGlzLnJlYWx0aW1lTW9kZSwKICAgICAgICAgICAgICAgIHNwZWVkOiAzNTAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5yZWFsdGltZU1vZGUgJiYgdGhpcy5yb2xsaW5nV2luZG93ID4gMCAmJiB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCA+IDApIHsKICAgICAgICAgIHRoaXMuc3RhcnRBdXRvU2Nyb2xsKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc3RvcEF1dG9TY3JvbGwoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiYXV0b1Njcm9sbEludGVydmFsIikgJiYgdGhpcy5jaGFydCkgewogICAgICAgIHRoaXMuc3RvcEF1dG9TY3JvbGwoKTsKICAgICAgICBpZiAodGhpcy5yZWFsdGltZU1vZGUgJiYgdGhpcy5yb2xsaW5nV2luZG93ID4gMCAmJiB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCA+IDApIHsKICAgICAgICAgIHRoaXMuc3RhcnRBdXRvU2Nyb2xsKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICgoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJ5QXhpc1NjYWxpbmciKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoInlBeGlzTWF4IikpICYmIHRoaXMuY2hhcnQpIHsKICAgICAgICBhd2FpdCB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMoewogICAgICAgICAgeWF4aXM6IHsKICAgICAgICAgICAgbWluOiAwLAogICAgICAgICAgICBtYXg6IHRoaXMueUF4aXNTY2FsaW5nID09PSAiZHluYW1pYyIgPyB2b2lkIDAgOiB0aGlzLnlBeGlzTWF4CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHVwZGF0ZVNlcmllcyhuZXdTZXJpZXMsIGFuaW1hdGUgPSB0cnVlKSB7CiAgICAgIGlmICghdGhpcy5jaGFydCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIHRoaXMuaW50ZXJuYWxDaGFydERhdGEgPSBuZXdTZXJpZXM7CiAgICAgICAgaWYgKHRoaXMucm9sbGluZ1dpbmRvdyA+IDAgJiYgdGhpcy5yZWFsdGltZU1vZGUpIHsKICAgICAgICAgIGNvbnN0IG5vdzIgPSBEYXRlLm5vdygpOwogICAgICAgICAgY29uc3QgY3V0b2ZmVGltZSA9IG5vdzIgLSB0aGlzLnJvbGxpbmdXaW5kb3c7CiAgICAgICAgICBjb25zdCBmaWx0ZXJlZFNlcmllcyA9IG5ld1Nlcmllcy5tYXAoKHNlcmllcykgPT4gKHsKICAgICAgICAgICAgbmFtZTogc2VyaWVzLm5hbWUsCiAgICAgICAgICAgIGRhdGE6IHNlcmllcy5kYXRhLmZpbHRlcigocG9pbnQ0KSA9PiB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwb2ludDQgPT09ICJvYmplY3QiICYmIHBvaW50NCAhPT0gbnVsbCAmJiAieCIgaW4gcG9pbnQ0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUocG9pbnQ0LngpLmdldFRpbWUoKSA+IGN1dG9mZlRpbWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSkKICAgICAgICAgIH0pKTsKICAgICAgICAgIGlmIChmaWx0ZXJlZFNlcmllcy5zb21lKChzOSkgPT4gczkuZGF0YS5sZW5ndGggPiAwKSkgewogICAgICAgICAgICBpZiAodGhpcy55QXhpc1NjYWxpbmcgPT09ICJkeW5hbWljIikgewogICAgICAgICAgICAgIGNvbnN0IGFsbFZhbHVlcyA9IGZpbHRlcmVkU2VyaWVzLmZsYXRNYXAoKHM5KSA9PiBzOS5kYXRhLm1hcCgoZDYpID0+IGQ2LnkpKTsKICAgICAgICAgICAgICBpZiAoYWxsVmFsdWVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIGNvbnN0IG1heFZhbHVlID0gTWF0aC5tYXgoLi4uYWxsVmFsdWVzKTsKICAgICAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNNYXggPSBNYXRoLmNlaWwobWF4VmFsdWUgKiAxLjEpOwogICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHsKICAgICAgICAgICAgICAgICAgeWF4aXM6IHsKICAgICAgICAgICAgICAgICAgICBtaW46IDAsCiAgICAgICAgICAgICAgICAgICAgbWF4OiBkeW5hbWljTWF4CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlU2VyaWVzKGZpbHRlcmVkU2VyaWVzLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlU2VyaWVzKG5ld1NlcmllcywgYW5pbWF0ZSk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byB1cGRhdGUgY2hhcnQgc2VyaWVzOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLy8gVXBkYXRlIGp1c3QgdGhlIHgtYXhpcyBmb3Igc21vb3RoIHNjcm9sbGluZyBpbiByZWFsdGltZSBtb2RlCiAgICAvLyBQdWJsaWMgZm9yIGFkdmFuY2VkIHVzYWdlIGluIGRlbW9zLCBidXQgdHlwaWNhbGx5IGhhbmRsZWQgYXV0b21hdGljYWxseQogICAgYXN5bmMgdXBkYXRlVGltZVdpbmRvdygpIHsKICAgICAgaWYgKCF0aGlzLmNoYXJ0IHx8IHRoaXMucm9sbGluZ1dpbmRvdyA8PSAwKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IG5vdzIgPSBEYXRlLm5vdygpOwogICAgICBjb25zdCBjdXRvZmZUaW1lID0gbm93MiAtIHRoaXMucm9sbGluZ1dpbmRvdzsKICAgICAgYXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHsKICAgICAgICB4YXhpczogewogICAgICAgICAgbWluOiBjdXRvZmZUaW1lLAogICAgICAgICAgbWF4OiBub3cyLAogICAgICAgICAgbGFiZWxzOiB7CiAgICAgICAgICAgIGZvcm1hdDogIkhIOm1tOnNzIiwKICAgICAgICAgICAgZGF0ZXRpbWVVVEM6IGZhbHNlLAogICAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICAgIGNvbG9yczogWyF0aGlzLmdvQnJpZ2h0ID8gImhzbCgwIDAlIDYzLjklKSIgOiAiaHNsKDAgMCUgMjAlKSJdLAogICAgICAgICAgICAgIGZvbnRTaXplOiAiMTJweCIsCiAgICAgICAgICAgICAgZm9udEZhbWlseTogJy1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgc2Fucy1zZXJpZicsCiAgICAgICAgICAgICAgZm9udFdlaWdodDogIjQwMCIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHRpY2tBbW91bnQ6IDYKICAgICAgICB9CiAgICAgIH0sIGZhbHNlLCBmYWxzZSk7CiAgICB9CiAgICBhc3luYyBhcHBlbmREYXRhKG5ld0RhdGEpIHsKICAgICAgaWYgKCF0aGlzLmNoYXJ0KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuY2hhcnQuYXBwZW5kRGF0YShuZXdEYXRhKTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZU9wdGlvbnMob3B0aW9ucywgcmVkcmF3UGF0aHMsIGFuaW1hdGUpIHsKICAgICAgaWYgKCF0aGlzLmNoYXJ0KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMob3B0aW9ucywgcmVkcmF3UGF0aHMsIGFuaW1hdGUpOwogICAgfQogICAgYXN5bmMgcmVzaXplQ2hhcnQoKSB7CiAgICAgIGlmICghdGhpcy5jaGFydCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodGhpcy5ERUJVR19SRVNJWkUpIHsKICAgICAgICBjb25zb2xlLmxvZygiRGVlc0NoYXJ0QXJlYSAtIHJlc2l6ZUNoYXJ0IGNhbGxlZCIpOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgbWFpbmJveCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmJveCIpOwogICAgICAgIGNvbnN0IGNoYXJ0Q29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jaGFydENvbnRhaW5lciIpOwogICAgICAgIGlmICghbWFpbmJveCB8fCAhY2hhcnRDb250YWluZXIpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdm9pZCBtYWluYm94Lm9mZnNldEhlaWdodDsKICAgICAgICBjb25zdCBzdHlsZUNoYXJ0Q29udGFpbmVyID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2hhcnRDb250YWluZXIpOwogICAgICAgIGNvbnN0IHBhZGRpbmdUb3AgPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdUb3AsIDEwKTsKICAgICAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VJbnQoc3R5bGVDaGFydENvbnRhaW5lci5wYWRkaW5nQm90dG9tLCAxMCk7CiAgICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdMZWZ0LCAxMCk7CiAgICAgICAgY29uc3QgcGFkZGluZ1JpZ2h0ID0gcGFyc2VJbnQoc3R5bGVDaGFydENvbnRhaW5lci5wYWRkaW5nUmlnaHQsIDEwKTsKICAgICAgICBjb25zdCBhY3R1YWxXaWR0aCA9IG1haW5ib3guY2xpZW50V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDsKICAgICAgICBjb25zdCBhY3R1YWxIZWlnaHQgPSBtYWluYm94Lm9mZnNldEhlaWdodCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tOwogICAgICAgIGlmIChhY3R1YWxXaWR0aCA+IDAgJiYgYWN0dWFsSGVpZ2h0ID4gMCkgewogICAgICAgICAgaWYgKHRoaXMuREVCVUdfUkVTSVpFKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJEZWVzQ2hhcnRBcmVhIC0gVXBkYXRpbmcgY2hhcnQgZGltZW5zaW9uczoiLCB7CiAgICAgICAgICAgICAgd2lkdGg6IGFjdHVhbFdpZHRoLAogICAgICAgICAgICAgIGhlaWdodDogYWN0dWFsSGVpZ2h0CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHsKICAgICAgICAgICAgY2hhcnQ6IHsKICAgICAgICAgICAgICB3aWR0aDogYWN0dWFsV2lkdGgsCiAgICAgICAgICAgICAgaGVpZ2h0OiBhY3R1YWxIZWlnaHQKICAgICAgICAgICAgfQogICAgICAgICAgfSwgdHJ1ZSwgZmFsc2UpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gcmVzaXplIGNoYXJ0OiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBNYW51YWxseSB0cmlnZ2VyIGEgY2hhcnQgcmVzaXplLiBVc2VmdWwgd2hlbiBhdXRvbWF0aWMgZGV0ZWN0aW9uIGRvZXNuJ3Qgd29yay4KICAgICAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdGhhdCBjYW4gYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgY29tcG9uZW50LgogICAgICovCiAgICBhc3luYyBmb3JjZVJlc2l6ZSgpIHsKICAgICAgYXdhaXQgdGhpcy5yZXNpemVDaGFydCgpOwogICAgfQogICAgc3RhcnRBdXRvU2Nyb2xsKCkgewogICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsVGltZXIpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5hdXRvU2Nyb2xsVGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgIHRoaXMudXBkYXRlVGltZVdpbmRvdygpOwogICAgICB9LCB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCk7CiAgICB9CiAgICBzdG9wQXV0b1Njcm9sbCgpIHsKICAgICAgaWYgKHRoaXMuYXV0b1Njcm9sbFRpbWVyKSB7CiAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5hdXRvU2Nyb2xsVGltZXIpOwogICAgICAgIHRoaXMuYXV0b1Njcm9sbFRpbWVyID0gbnVsbDsKICAgICAgfQogICAgfQogICAgYXN5bmMgdXBkYXRlQ2hhcnRUaGVtZSgpIHsKICAgICAgaWYgKCF0aGlzLmNoYXJ0KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IGlzRGFyayA9ICF0aGlzLmdvQnJpZ2h0OwogICAgICBjb25zdCB0aGVtZSA9IGlzRGFyayA/ICJkYXJrIiA6ICJsaWdodCI7CiAgICAgIGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlT3B0aW9ucyh7CiAgICAgICAgdGhlbWU6IHsKICAgICAgICAgIG1vZGU6IHRoZW1lCiAgICAgICAgfSwKICAgICAgICBjb2xvcnM6IGlzRGFyayA/IHRoaXMuQ0hBUlRfQ09MT1JTLmRhcmsgOiB0aGlzLkNIQVJUX0NPTE9SUy5saWdodCwKICAgICAgICB4YXhpczogewogICAgICAgICAgbGFiZWxzOiB7CiAgICAgICAgICAgIHN0eWxlOiB7CiAgICAgICAgICAgICAgY29sb3JzOiBbaXNEYXJrID8gImhzbCgwIDAlIDYzLjklKSIgOiAiaHNsKDAgMCUgMjAlKSJdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHlheGlzOiB7CiAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICBjb2xvcnM6IFtpc0RhcmsgPyAiaHNsKDAgMCUgNjMuOSUpIiA6ICJoc2woMCAwJSAyMCUpIl0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZ3JpZDogewogICAgICAgICAgYm9yZGVyQ29sb3I6IGlzRGFyayA/ICJoc2woMCAwJSAxNC45JSkiIDogImhzbCgwIDAlIDk0JSkiCiAgICAgICAgfSwKICAgICAgICBmaWxsOiB7CiAgICAgICAgICBncmFkaWVudDogewogICAgICAgICAgICBzaGFkZTogaXNEYXJrID8gImRhcmsiIDogImxpZ2h0IiwKICAgICAgICAgICAgb3BhY2l0eUZyb206IGlzRGFyayA/IDAuMiA6IDAuMwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczQ2KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQ2hhcnRBcmVhMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtY2hhcnQvZGVlcy1jaGFydC1sb2cvZGVlcy1jaGFydC1sb2cuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMzMyA9ICgpID0+IHsKICByZXR1cm4gYjJgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgY29uc3Qgc3RydWN0dXJlZExvZyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI3N0cnVjdHVyZWQtbG9nIik7CiAgICBjb25zdCByYXdMb2cgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNyYXctbG9nIik7CiAgICBsZXQgc3RydWN0dXJlZEludGVydmFsSWQ7CiAgICBsZXQgcmF3SW50ZXJ2YWxJZDsKICAgIGNvbnN0IHNlcnZlclNvdXJjZXMgPSBbIlNlcnZlciIsICJEYXRhYmFzZSIsICJBUEkiLCAiQXV0aCIsICJDYWNoZSIsICJRdWV1ZSIsICJXZWJTb2NrZXQiLCAiU2NoZWR1bGVyIl07CiAgICBjb25zdCBsb2dUZW1wbGF0ZXMgPSB7CiAgICAgIGRlYnVnOiBbCiAgICAgICAgIkxvYWRpbmcgbW9kdWxlOiB7e21vZHVsZX19IiwKICAgICAgICAiQ2FjaGUgaGl0IGZvciBrZXk6IHt7a2V5fX0iLAogICAgICAgICJTUUwgcXVlcnkgZXhlY3V0ZWQgaW4ge3t0aW1lfX1tcyIsCiAgICAgICAgIlJlcXVlc3QgaGVhZGVyczoge3toZWFkZXJzfX0iLAogICAgICAgICJFbnZpcm9ubWVudCB2YXJpYWJsZSBsb2FkZWQ6IHt7dmFyfX0iCiAgICAgIF0sCiAgICAgIGluZm86IFsKICAgICAgICAiUmVxdWVzdCByZWNlaXZlZDoge3ttZXRob2R9fSB7e3BhdGh9fSIsCiAgICAgICAgIlVzZXIge3t1c2VySWR9fSBhdXRoZW50aWNhdGVkIHN1Y2Nlc3NmdWxseSIsCiAgICAgICAgIlByb2Nlc3Npbmcgam9iIHt7am9iSWR9fSBmcm9tIHF1ZXVlIiwKICAgICAgICAnU2NoZWR1bGVkIHRhc2sgInt7dGFza319IiBzdGFydGVkJywKICAgICAgICAiV2ViU29ja2V0IGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQgZnJvbSB7e2lwfX0iCiAgICAgIF0sCiAgICAgIHdhcm46IFsKICAgICAgICAiU2xvdyBxdWVyeSBkZXRlY3RlZDoge3txdWVyeX19ICh7e3RpbWV9fW1zKSIsCiAgICAgICAgIk1lbW9yeSB1c2FnZSBhdCB7e3BlcmNlbnR9fSUiLAogICAgICAgICJSYXRlIGxpbWl0IGFwcHJvYWNoaW5nIGZvciBJUCB7e2lwfX0iLAogICAgICAgICJEZXByZWNhdGVkIEFQSSBlbmRwb2ludCBjYWxsZWQ6IHt7ZW5kcG9pbnR9fSIsCiAgICAgICAgIkNlcnRpZmljYXRlIGV4cGlyZXMgaW4ge3tkYXlzfX0gZGF5cyIKICAgICAgXSwKICAgICAgZXJyb3I6IFsKICAgICAgICAiRGF0YWJhc2UgY29ubmVjdGlvbiBsb3N0OiB7e2Vycm9yfX0iLAogICAgICAgICJGYWlsZWQgdG8gcHJvY2VzcyByZXF1ZXN0OiB7e2Vycm9yfX0iLAogICAgICAgICJBdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIge3t1c2VyfX0iLAogICAgICAgICJGaWxlIG5vdCBmb3VuZDoge3twYXRofX0iLAogICAgICAgICJTZXJ2aWNlIHVuYXZhaWxhYmxlOiB7e3NlcnZpY2V9fSIKICAgICAgXSwKICAgICAgc3VjY2VzczogWwogICAgICAgICJTZXJ2ZXIgc3RhcnRlZCBzdWNjZXNzZnVsbHkgb24gcG9ydCB7e3BvcnR9fSIsCiAgICAgICAgIkRhdGFiYXNlIG1pZ3JhdGlvbiBjb21wbGV0ZWQiLAogICAgICAgICJCYWNrdXAgY29tcGxldGVkOiB7e3NpemV9fSBNQiIsCiAgICAgICAgIlNTTCBjZXJ0aWZpY2F0ZSByZW5ld2VkIiwKICAgICAgICAiSGVhbHRoIGNoZWNrIHBhc3NlZDogYWxsIHN5c3RlbXMgb3BlcmF0aW9uYWwiCiAgICAgIF0KICAgIH07CiAgICBjb25zdCBkb2NrZXJMb2dUZW1wbGF0ZXMgPSBbCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDUuMTIzWlx4MUJbMG0gXHgxQlszNm1JTkZPXHgxQlswbSAgW25naW54XSBHRVQgL2FwaS9oZWFsdGggMjAwIC0gMm1zIiwKICAgICAgIlx4MUJbOTBtMjAyNC0wMS0xNVQxMDoyMzo0NS40NTZaXHgxQlswbSBceDFCWzMzbVdBUk5ceDFCWzBtICBbcmVkaXNdIENvbm5lY3Rpb24gcG9vbCBydW5uaW5nIGxvdzogMy8xMCIsCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDUuNzg5Wlx4MUJbMG0gXHgxQlszMW1FUlJPUlx4MUJbMG0gW21vbmdvZGJdIFF1ZXJ5IHRpbWVvdXQgYWZ0ZXIgMzAwMDBtcyIsCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDYuMDEyWlx4MUJbMG0gXHgxQlszNm1JTkZPXHgxQlswbSAgW2FwcF0gUHJvY2Vzc2luZyBiYXRjaCBqb2IgI3t7am9iSWR9fSIsCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDYuMzQ1Wlx4MUJbMG0gXHgxQlszMm1PS1x4MUJbMG0gICAgW2hlYWx0aF0gQWxsIHNlcnZpY2VzIGhlYWx0aHkiLAogICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ2LjY3OFpceDFCWzBtIFx4MUJbMzZtSU5GT1x4MUJbMG0gIFtrYWZrYV0gTWVzc2FnZSBjb25zdW1lZCBmcm9tIHRvcGljOiBldmVudHMiLAogICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ3LjAwMVpceDFCWzBtIFx4MUJbMzVtREVCVUdceDFCWzBtIFtncnBjXSBSZXF1ZXN0IHJlY2VpdmVkOiBHZXRVc2VyKGlkPXt7dXNlcklkfX0pIiwKICAgICAgIlx4MUJbOTBtMjAyNC0wMS0xNVQxMDoyMzo0Ny4yMzRaXHgxQlswbSBceDFCWzMxbUVSUk9SXHgxQlswbSBbYXV0aF0gVG9rZW4gdmFsaWRhdGlvbiBmYWlsZWQ6IGV4cGlyZWQiLAogICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ3LjU2N1pceDFCWzBtIFx4MUJbMzNtV0FSTlx4MUJbMG0gIFtyYXRlLWxpbWl0XSBJUCB7e2lwfX0gYXBwcm9hY2hpbmcgcmF0ZSBsaW1pdCIsCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDcuODkwWlx4MUJbMG0gXHgxQlszNm1JTkZPXHgxQlswbSAgW3dlYnNvY2tldF0gQ2xpZW50IGNvbm5lY3RlZDogc2Vzc2lvbj17e3Nlc3Npb259fSIsCiAgICAgIC8vIE11bHRpLWxpbmUgbG9nIGVudHJ5IGxpa2Ugc3RhY2sgdHJhY2VzCiAgICAgICJceDFCWzMxbUVycm9yOiBDb25uZWN0aW9uIHJlZnVzZWRceDFCWzBtXG4gICAgYXQgVGNwQ29ubmVjdGlvbi5jb25uZWN0ICgvYXBwL25vZGVfbW9kdWxlcy9wZy9saWIvY29ubmVjdGlvbi5qczoxMjoxNSlcbiAgICBhdCBQb29sLmNvbm5lY3QgKC9hcHAvbm9kZV9tb2R1bGVzL3BnL2xpYi9wb29sLmpzOjQ1OjIzKVxuICAgIGF0IGFzeW5jIERhdGFiYXNlU2VydmljZS5xdWVyeSAoL2FwcC9zcmMvZGIvc2VydmljZS50czo4OToxMikiCiAgICBdOwogICAgY29uc3QgZ2VuZXJhdGVSYW5kb21Mb2cgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGxldmVscyA9IFsiZGVidWciLCAiaW5mbyIsICJ3YXJuIiwgImVycm9yIiwgInN1Y2Nlc3MiXTsKICAgICAgY29uc3Qgd2VpZ2h0cyA9IFswLjIsIDAuNSwgMC4xNSwgMC4xLCAwLjA1XTsKICAgICAgY29uc3QgcmFuZG9tID0gTWF0aC5yYW5kb20oKTsKICAgICAgbGV0IGN1bXVsYXRpdmUgPSAwOwogICAgICBsZXQgbGV2ZWwgPSAiaW5mbyI7CiAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHdlaWdodHMubGVuZ3RoOyBpMTErKykgewogICAgICAgIGN1bXVsYXRpdmUgKz0gd2VpZ2h0c1tpMTFdOwogICAgICAgIGlmIChyYW5kb20gPCBjdW11bGF0aXZlKSB7CiAgICAgICAgICBsZXZlbCA9IGxldmVsc1tpMTFdOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHNvdXJjZSA9IHNlcnZlclNvdXJjZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogc2VydmVyU291cmNlcy5sZW5ndGgpXTsKICAgICAgY29uc3QgdGVtcGxhdGVzID0gbG9nVGVtcGxhdGVzW2xldmVsXTsKICAgICAgY29uc3QgdGVtcGxhdGUgPSB0ZW1wbGF0ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGVtcGxhdGVzLmxlbmd0aCldOwogICAgICBjb25zdCBtZXNzYWdlMiA9IHRlbXBsYXRlLnJlcGxhY2UoInt7bW9kdWxlfX0iLCBbImV4cHJlc3MiLCAibW9uZ29vc2UiLCAicmVkaXMiLCAic29ja2V0LmlvIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCldKS5yZXBsYWNlKCJ7e2tleX19IiwgInVzZXI6IiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDFlMykpLnJlcGxhY2UoInt7dGltZX19IiwgU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUwMCkgKyA1MCkpLnJlcGxhY2UoInt7aGVhZGVyc319IiwgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbiwgQXV0aG9yaXphdGlvbjogQmVhcmVyIC4uLiIpLnJlcGxhY2UoInt7dmFyfX0iLCBbIk5PREVfRU5WIiwgIkRBVEFCQVNFX1VSTCIsICJBUElfS0VZIiwgIlBPUlQiXVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KV0pLnJlcGxhY2UoInt7bWV0aG9kfX0iLCBbIkdFVCIsICJQT1NUIiwgIlBVVCIsICJERUxFVEUiXVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KV0pLnJlcGxhY2UoInt7cGF0aH19IiwgWyIvYXBpL3VzZXJzIiwgIi9hcGkvYXV0aC9sb2dpbiIsICIvYXBpL3Byb2R1Y3RzIiwgIi9oZWFsdGgiXVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KV0pLnJlcGxhY2UoInt7dXNlcklkfX0iLCBTdHJpbmcoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMWU0KSkpLnJlcGxhY2UoInt7am9iSWR9fSIsICJqb2JfIiArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxMSkpLnJlcGxhY2UoInt7dGFza319IiwgWyJjbGVhbnVwIiwgImJhY2t1cCIsICJyZXBvcnQtZ2VuZXJhdGlvbiIsICJjYWNoZS1yZWZyZXNoIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCldKS5yZXBsYWNlKCJ7e2lwfX0iLCBgMTkyLjE2OC4xLiR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjU1KX1gKS5yZXBsYWNlKCJ7e3F1ZXJ5fX0iLCAiU0VMRUNUICogRlJPTSB1c2VycyBXSEVSRSAuLi4iKS5yZXBsYWNlKCJ7e3BlcmNlbnR9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAzMCkgKyA3MCkpLnJlcGxhY2UoInt7ZW5kcG9pbnR9fSIsICIvYXBpL3YxL2xlZ2FjeSIpLnJlcGxhY2UoInt7ZGF5c319IiwgU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDMwKSArIDEpKS5yZXBsYWNlKCJ7e2Vycm9yfX0iLCBbIkVDT05OUkVGVVNFRCIsICJFVElNRURPVVQiLCAiRU5PVEZPVU5EIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMyldKS5yZXBsYWNlKCJ7e3VzZXJ9fSIsICJ1c2VyXyIgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTMpKS5yZXBsYWNlKCJ7e3NlcnZpY2V9fSIsIFsiUmVkaXMiLCAiTW9uZ29EQiIsICJFbGFzdGljU2VhcmNoIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMyldKS5yZXBsYWNlKCJ7e3BvcnR9fSIsIFN0cmluZygzZTMgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkpKS5yZXBsYWNlKCJ7e3NpemV9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1MDApICsgMTAwKSk7CiAgICAgIHN0cnVjdHVyZWRMb2cuYWRkTG9nKGxldmVsLCBtZXNzYWdlMiwgc291cmNlKTsKICAgIH07CiAgICBjb25zdCBnZW5lcmF0ZURvY2tlckxvZyA9ICgpID0+IHsKICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2NrZXJMb2dUZW1wbGF0ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZG9ja2VyTG9nVGVtcGxhdGVzLmxlbmd0aCldOwogICAgICBjb25zdCBub3cyID0gKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpOwogICAgICBjb25zdCBsb2dMaW5lID0gdGVtcGxhdGUucmVwbGFjZSgvMjAyNC0wMS0xNVQxMDoyMzpcZHsyfVwuXGR7M31aL2csIG5vdzIpLnJlcGxhY2UoInt7am9iSWR9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTQpKSkucmVwbGFjZSgie3t1c2VySWR9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTQpKSkucmVwbGFjZSgie3tpcH19IiwgYDE5Mi4xNjguMS4ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NSl9YCkucmVwbGFjZSgie3tzZXNzaW9ufX0iLCBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTEpKTsKICAgICAgcmF3TG9nLndyaXRlbG5SYXcobG9nTGluZSk7CiAgICB9OwogICAgY29uc3Qgc3RhcnRTdHJ1Y3R1cmVkU2ltdWxhdGlvbiA9ICgpID0+IHsKICAgICAgaWYgKCFzdHJ1Y3R1cmVkSW50ZXJ2YWxJZCkgewogICAgICAgIGNvbnN0IHNjaGVkdWxlTmV4dCA9ICgpID0+IHsKICAgICAgICAgIGdlbmVyYXRlUmFuZG9tTG9nKCk7CiAgICAgICAgICBjb25zdCBuZXh0RGVsYXkgPSBNYXRoLnJhbmRvbSgpICogMmUzICsgNTAwOwogICAgICAgICAgc3RydWN0dXJlZEludGVydmFsSWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVkSW50ZXJ2YWxJZCkgewogICAgICAgICAgICAgIHNjaGVkdWxlTmV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBuZXh0RGVsYXkpOwogICAgICAgIH07CiAgICAgICAgc2NoZWR1bGVOZXh0KCk7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCBzdG9wU3RydWN0dXJlZFNpbXVsYXRpb24gPSAoKSA9PiB7CiAgICAgIGlmIChzdHJ1Y3R1cmVkSW50ZXJ2YWxJZCkgewogICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoc3RydWN0dXJlZEludGVydmFsSWQpOwogICAgICAgIHN0cnVjdHVyZWRJbnRlcnZhbElkID0gbnVsbDsKICAgICAgfQogICAgfTsKICAgIGNvbnN0IHN0YXJ0UmF3U2ltdWxhdGlvbiA9ICgpID0+IHsKICAgICAgaWYgKCFyYXdJbnRlcnZhbElkKSB7CiAgICAgICAgY29uc3Qgc2NoZWR1bGVOZXh0ID0gKCkgPT4gewogICAgICAgICAgZ2VuZXJhdGVEb2NrZXJMb2coKTsKICAgICAgICAgIGNvbnN0IG5leHREZWxheSA9IE1hdGgucmFuZG9tKCkgKiAxZTMgKyAyMDA7CiAgICAgICAgICByYXdJbnRlcnZhbElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBpZiAocmF3SW50ZXJ2YWxJZCkgewogICAgICAgICAgICAgIHNjaGVkdWxlTmV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBuZXh0RGVsYXkpOwogICAgICAgIH07CiAgICAgICAgc2NoZWR1bGVOZXh0KCk7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCBzdG9wUmF3U2ltdWxhdGlvbiA9ICgpID0+IHsKICAgICAgaWYgKHJhd0ludGVydmFsSWQpIHsKICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHJhd0ludGVydmFsSWQpOwogICAgICAgIHJhd0ludGVydmFsSWQgPSBudWxsOwogICAgICB9CiAgICB9OwogICAgY29uc3QgYnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICAgIGNvbnN0IHRleHQ5ID0gYnV0dG9uLnRleHRDb250ZW50Py50cmltKCk7CiAgICAgIHN3aXRjaCAodGV4dDkpIHsKICAgICAgICBjYXNlICJBZGQgU3RydWN0dXJlZCBMb2ciOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gZ2VuZXJhdGVSYW5kb21Mb2coKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJTdGFydCBTdHJ1Y3R1cmVkIjoKICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN0YXJ0U3RydWN0dXJlZFNpbXVsYXRpb24oKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJTdG9wIFN0cnVjdHVyZWQiOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3RvcFN0cnVjdHVyZWRTaW11bGF0aW9uKCkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQWRkIERvY2tlciBMb2ciOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gZ2VuZXJhdGVEb2NrZXJMb2coKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJTdGFydCBEb2NrZXIiOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3RhcnRSYXdTaW11bGF0aW9uKCkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiU3RvcCBEb2NrZXIiOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3RvcFJhd1NpbXVsYXRpb24oKSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSk7CiAgfX0+CiAgICAgIDxzdHlsZT4KICAgICAgICAke2lgCiAgICAgICAgICAuZGVtb0JveCB7CiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCAiaHNsKDAgMCUgNSUpIil9OwogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICB9CiAgICAgICAgICAuc2VjdGlvbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgIGdhcDogMTJweDsKICAgICAgICAgIH0KICAgICAgICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgICAgfQogICAgICAgICAgLnNlY3Rpb24tZGVzY3JpcHRpb24gewogICAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICAgIH0KICAgICAgICAgIC5jb250cm9scyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGdhcDogMTBweDsKICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgfQogICAgICAgIGB9CiAgICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJkZW1vQm94Ij4KICAgICAgPCEtLSBTdHJ1Y3R1cmVkIExvZ3MgU2VjdGlvbiAtLT4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U3RydWN0dXJlZCBMb2dzIChJTG9nRW50cnkpPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBTdHJ1Y3R1cmVkIGxvZyBlbnRyaWVzIHdpdGggbGV2ZWwsIG1lc3NhZ2UsIGFuZCBzb3VyY2UuIFN1cHBvcnRzIHNlYXJjaCBhbmQga2V5d29yZCBoaWdobGlnaHRpbmcuCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkFkZCBTdHJ1Y3R1cmVkIExvZzwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U3RhcnQgU3RydWN0dXJlZDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U3RvcCBTdHJ1Y3R1cmVkPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGVlcy1jaGFydC1sb2cKICAgICAgICAgIGlkPSJzdHJ1Y3R1cmVkLWxvZyIKICAgICAgICAgIC5sYWJlbD0keyJQcm9kdWN0aW9uIFNlcnZlciBMb2dzIn0KICAgICAgICAgIC5oaWdobGlnaHRLZXl3b3Jkcz0ke1siZXJyb3IiLCAiZmFpbGVkIiwgInRpbWVvdXQiXX0KICAgICAgICAgIC5zaG93TWV0cmljcz0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1jaGFydC1sb2c+CiAgICAgIDwvZGl2PgoKICAgICAgPCEtLSBSYXcgTG9ncyBTZWN0aW9uIC0tPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5SYXcgTG9ncyAoRG9ja2VyL0NvbnRhaW5lciBTdHlsZSk8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIFJhdyBsb2cgb3V0cHV0IHdpdGggQU5TSSBlc2NhcGUgc2VxdWVuY2VzIGZvciByZWFsIERvY2tlci9jb250YWluZXIgbG9ncy4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24+QWRkIERvY2tlciBMb2c8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0YXJ0IERvY2tlcjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U3RvcCBEb2NrZXI8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkZWVzLWNoYXJ0LWxvZwogICAgICAgICAgaWQ9InJhdy1sb2ciCiAgICAgICAgICAubGFiZWw9JHsiRG9ja2VyIENvbnRhaW5lciBMb2dzIn0KICAgICAgICAgIC5tb2RlPSR7InJhdyJ9CiAgICAgICAgICAuc2hvd01ldHJpY3M9JHtmYWxzZX0KICAgICAgICA+PC9kZWVzLWNoYXJ0LWxvZz4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWNoYXJ0L2RlZXMtY2hhcnQtbG9nL2RlZXMtY2hhcnQtbG9nLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKaW5pdF9zZXJ2aWNlcygpOwp2YXIgX19lc0RlY29yYXRlNDYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczQ3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzQ2hhcnRMb2cgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWNoYXJ0LWxvZyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2xhYmVsX2RlY29yYXRvcnM7CiAgbGV0IF9sYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tb2RlX2RlY29yYXRvcnM7CiAgbGV0IF9tb2RlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9kZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbG9nRW50cmllc19kZWNvcmF0b3JzOwogIGxldCBfbG9nRW50cmllc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xvZ0VudHJpZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9TY3JvbGxfZGVjb3JhdG9yczsKICBsZXQgX2F1dG9TY3JvbGxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hdXRvU2Nyb2xsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhFbnRyaWVzX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhFbnRyaWVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RW50cmllc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0S2V5d29yZHNfZGVjb3JhdG9yczsKICBsZXQgX2hpZ2hsaWdodEtleXdvcmRzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0S2V5d29yZHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dNZXRyaWNzX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93TWV0cmljc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dNZXRyaWNzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hRdWVyeV9kZWNvcmF0b3JzOwogIGxldCBfc2VhcmNoUXVlcnlfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hRdWVyeV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsdGVyTW9kZV9kZWNvcmF0b3JzOwogIGxldCBfZmlsdGVyTW9kZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlck1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21ldHJpY3NfZGVjb3JhdG9yczsKICBsZXQgX21ldHJpY3NfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZXRyaWNzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXJtaW5hbFJlYWR5X2RlY29yYXRvcnM7CiAgbGV0IF90ZXJtaW5hbFJlYWR5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGVybWluYWxSZWFkeV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzQ2hhcnRMb2cyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbGFiZWxfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgX21vZGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9sb2dFbnRyaWVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9hdXRvU2Nyb2xsX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX21heEVudHJpZXNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9oaWdobGlnaHRLZXl3b3Jkc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfc2hvd01ldHJpY3NfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2VhcmNoUXVlcnlfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2ZpbHRlck1vZGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX21ldHJpY3NfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3Rlcm1pbmFsUmVhZHlfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlNDYodGhpcywgbnVsbCwgX2xhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYWJlbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFiZWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfbW9kZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtb2RlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2RlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1vZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1vZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbW9kZV9pbml0aWFsaXplcnMsIF9tb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDYodGhpcywgbnVsbCwgX2xvZ0VudHJpZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibG9nRW50cmllcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibG9nRW50cmllcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sb2dFbnRyaWVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sb2dFbnRyaWVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xvZ0VudHJpZXNfaW5pdGlhbGl6ZXJzLCBfbG9nRW50cmllc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ2KHRoaXMsIG51bGwsIF9hdXRvU2Nyb2xsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImF1dG9TY3JvbGwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9TY3JvbGwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXV0b1Njcm9sbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXV0b1Njcm9sbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvU2Nyb2xsX2luaXRpYWxpemVycywgX2F1dG9TY3JvbGxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfbWF4RW50cmllc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYXhFbnRyaWVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYXhFbnRyaWVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heEVudHJpZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1heEVudHJpZXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWF4RW50cmllc19pbml0aWFsaXplcnMsIF9tYXhFbnRyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDYodGhpcywgbnVsbCwgX2hpZ2hsaWdodEtleXdvcmRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhpZ2hsaWdodEtleXdvcmRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoaWdobGlnaHRLZXl3b3JkcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oaWdobGlnaHRLZXl3b3Jkcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaGlnaGxpZ2h0S2V5d29yZHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaGlnaGxpZ2h0S2V5d29yZHNfaW5pdGlhbGl6ZXJzLCBfaGlnaGxpZ2h0S2V5d29yZHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfc2hvd01ldHJpY3NfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd01ldHJpY3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dNZXRyaWNzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dNZXRyaWNzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93TWV0cmljcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93TWV0cmljc19pbml0aWFsaXplcnMsIF9zaG93TWV0cmljc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ2KHRoaXMsIG51bGwsIF9zZWFyY2hRdWVyeV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWFyY2hRdWVyeSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VhcmNoUXVlcnkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VhcmNoUXVlcnksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlYXJjaFF1ZXJ5ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlYXJjaFF1ZXJ5X2luaXRpYWxpemVycywgX3NlYXJjaFF1ZXJ5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDYodGhpcywgbnVsbCwgX2ZpbHRlck1vZGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyTW9kZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZmlsdGVyTW9kZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5maWx0ZXJNb2RlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXJNb2RlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ZpbHRlck1vZGVfaW5pdGlhbGl6ZXJzLCBfZmlsdGVyTW9kZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ2KHRoaXMsIG51bGwsIF9tZXRyaWNzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1ldHJpY3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1ldHJpY3MiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWV0cmljcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWV0cmljcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZXRyaWNzX2luaXRpYWxpemVycywgX21ldHJpY3NfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfdGVybWluYWxSZWFkeV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0ZXJtaW5hbFJlYWR5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0ZXJtaW5hbFJlYWR5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRlcm1pbmFsUmVhZHksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRlcm1pbmFsUmVhZHkgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGVybWluYWxSZWFkeV9pbml0aWFsaXplcnMsIF90ZXJtaW5hbFJlYWR5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQ2hhcnRMb2cyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMzMzsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiQ2hhcnQiOwogICAgI2xhYmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9sYWJlbF9pbml0aWFsaXplcnMsICJTZXJ2ZXIgTG9ncyIpOwogICAgZ2V0IGxhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYWJlbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9tb2RlX2luaXRpYWxpemVycywgInN0cnVjdHVyZWQiKSk7CiAgICBnZXQgbW9kZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21vZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNtb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbG9nRW50cmllc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX21vZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9sb2dFbnRyaWVzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBsb2dFbnRyaWVzKCkgewogICAgICByZXR1cm4gdGhpcy4jbG9nRW50cmllc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxvZ0VudHJpZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI2xvZ0VudHJpZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhdXRvU2Nyb2xsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfbG9nRW50cmllc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2F1dG9TY3JvbGxfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgYXV0b1Njcm9sbCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2F1dG9TY3JvbGxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhdXRvU2Nyb2xsKHZhbHVlMikgewogICAgICB0aGlzLiNhdXRvU2Nyb2xsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4RW50cmllc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2F1dG9TY3JvbGxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9tYXhFbnRyaWVzX2luaXRpYWxpemVycywgMWU0KSk7CiAgICBnZXQgbWF4RW50cmllcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21heEVudHJpZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYXhFbnRyaWVzKHZhbHVlMikgewogICAgICB0aGlzLiNtYXhFbnRyaWVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaGlnaGxpZ2h0S2V5d29yZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9tYXhFbnRyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfaGlnaGxpZ2h0S2V5d29yZHNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IGhpZ2hsaWdodEtleXdvcmRzKCkgewogICAgICByZXR1cm4gdGhpcy4jaGlnaGxpZ2h0S2V5d29yZHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBoaWdobGlnaHRLZXl3b3Jkcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGlnaGxpZ2h0S2V5d29yZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93TWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2hpZ2hsaWdodEtleXdvcmRzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfc2hvd01ldHJpY3NfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd01ldHJpY3MoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93TWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dNZXRyaWNzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93TWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlYXJjaFF1ZXJ5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfc2hvd01ldHJpY3NfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9zZWFyY2hRdWVyeV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgc2VhcmNoUXVlcnkoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWFyY2hRdWVyeV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlYXJjaFF1ZXJ5KHZhbHVlMikgewogICAgICB0aGlzLiNzZWFyY2hRdWVyeV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2ZpbHRlck1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9zZWFyY2hRdWVyeV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2ZpbHRlck1vZGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGZpbHRlck1vZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmaWx0ZXJNb2RlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsdGVyTW9kZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsdGVyTW9kZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21ldHJpY3NfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9maWx0ZXJNb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfbWV0cmljc19pbml0aWFsaXplcnMsIHsgZGVidWc6IDAsIGluZm86IDAsIHdhcm46IDAsIGVycm9yOiAwLCBzdWNjZXNzOiAwLCB0b3RhbDogMCwgcmF0ZTogMCB9KSk7CiAgICBnZXQgbWV0cmljcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21ldHJpY3NfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtZXRyaWNzKHZhbHVlMikgewogICAgICB0aGlzLiNtZXRyaWNzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGVybWluYWxSZWFkeV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX21ldHJpY3NfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF90ZXJtaW5hbFJlYWR5X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCB0ZXJtaW5hbFJlYWR5KCkgewogICAgICByZXR1cm4gdGhpcy4jdGVybWluYWxSZWFkeV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRlcm1pbmFsUmVhZHkodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Rlcm1pbmFsUmVhZHlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8vIEJ1ZmZlciBvZiBhbGwgbG9nIGVudHJpZXMgZm9yIGZpbHRlciBtb2RlCiAgICBsb2dCdWZmZXIgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfdGVybWluYWxSZWFkeV9leHRyYUluaXRpYWxpemVycyksIFtdKTsKICAgIC8vIFRyYWNrIHRyYWlsaW5nIGhpZGRlbiBlbnRyaWVzIGNvdW50IGZvciBsaXZlIHVwZGF0ZXMgaW4gZmlsdGVyIG1vZGUKICAgIHRyYWlsaW5nSGlkZGVuQ291bnQgPSAwOwogICAgLy8geHRlcm0gaW5zdGFuY2VzCiAgICB0ZXJtaW5hbCA9IG51bGw7CiAgICBmaXRBZGRvbiA9IG51bGw7CiAgICBzZWFyY2hBZGRvbiA9IG51bGw7CiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7CiAgICB0ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIGRvbXRvb2xzSW5zdGFuY2UgPSBudWxsOwogICAgLy8gUmF0ZSBjYWxjdWxhdGlvbgogICAgcmF0ZUJ1ZmZlciA9IFtdOwogICAgcmF0ZUludGVydmFsID0gbnVsbDsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5tYWluYm94IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CgogICAgICAudGl0bGUgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1ib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzMDBweDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1ib3ggaW5wdXQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAuc2VhcmNoLWJveCBpbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICB9CgogICAgICAuc2VhcmNoLWJveCBpbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwgImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgfQoKICAgICAgLnNlYXJjaC1uYXYgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtbmF2IGJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogNHB4IDZweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgfQoKICAgICAgLnNlYXJjaC1uYXYgYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmZpbHRlci10b2dnbGUgewogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmZpbHRlci10b2dnbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuZmlsdGVyLXRvZ2dsZS5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDUgOTMlIDQ3JSkiLCAiaHNsKDQ1IDkzJSA0NyUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NSA5MyUgNDclKSIsICJoc2woNDUgOTMlIDQ3JSkiKX07CiAgICAgICAgY29sb3I6IGhzbCgwIDAlIDklKTsKICAgICAgfQoKICAgICAgLmNvbnRyb2xzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNnB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICB9CgogICAgICAuY29udHJvbC1idXR0b24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwogICAgICB9CgogICAgICAuY29udHJvbC1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuY29udHJvbC1idXR0b24uYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1jb250YWluZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICB9CgogICAgICAudGVybWluYWwtY29udGFpbmVyIC54dGVybSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubG9hZGluZy1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgLm1ldHJpY3MtYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubWV0cmljIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5tZXRyaWM6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIC5tZXRyaWMuZXJyb3I6OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDAgODQuMiUgNjAuMiUpOwogICAgICB9CgogICAgICAubWV0cmljLndhcm46OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDI1IDk1JSA1MyUpOwogICAgICB9CgogICAgICAubWV0cmljLmluZm86OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKTsKICAgICAgfQoKICAgICAgLm1ldHJpYy5zdWNjZXNzOjpiZWZvcmUgewogICAgICAgIGJhY2tncm91bmQ6IGhzbCgxNDIuMSA3Ni4yJSAzNi4zJSk7CiAgICAgIH0KCiAgICAgIC5tZXRyaWMuZGVidWc6OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDAgMCUgNjMuOSUpOwogICAgICB9CgogICAgICAubWV0cmljLnJhdGUgewogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgLm1ldHJpYy5yYXRlOjpiZWZvcmUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc2V0dXAoKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPiR7dGhpcy5sYWJlbH08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaC1ib3giPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJTZWFyY2ggbG9ncy4uLiIKICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLnNlYXJjaFF1ZXJ5fQogICAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2VhcmNoSW5wdXQoZTExKX0KICAgICAgICAgICAgICBAa2V5ZG93bj0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2VhcmNoS2V5ZG93bihlMTEpfQogICAgICAgICAgICAvPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtbmF2Ij4KICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpID0+IHRoaXMuc2VhcmNoUHJldmlvdXMoKX0gdGl0bGU9IlByZXZpb3VzIG1hdGNoIj7ihpE8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpID0+IHRoaXMuc2VhcmNoTmV4dCgpfSB0aXRsZT0iTmV4dCBtYXRjaCI+4oaTPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9ImZpbHRlci10b2dnbGUgJHt0aGlzLmZpbHRlck1vZGUgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnRvZ2dsZUZpbHRlck1vZGUoKX0KICAgICAgICAgICAgICB0aXRsZT0iJHt0aGlzLmZpbHRlck1vZGUgPyAiU3dpdGNoIHRvIGhpZ2hsaWdodCBtb2RlIiA6ICJTd2l0Y2ggdG8gZmlsdGVyIG1vZGUifSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgICR7dGhpcy5maWx0ZXJNb2RlID8gIkZpbHRlciIgOiAiSGlnaGxpZ2h0In0KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJjb250cm9sLWJ1dHRvbiAke3RoaXMuYXV0b1Njcm9sbCA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMudG9nZ2xlQXV0b1Njcm9sbCgpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgQXV0byBTY3JvbGwKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNvbnRyb2wtYnV0dG9uIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNsZWFyTG9ncygpfT4KICAgICAgICAgICAgICBDbGVhcgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1jb250YWluZXIiPgogICAgICAgICAgJHshdGhpcy50ZXJtaW5hbFJlYWR5ID8gYjJgPGRpdiBjbGFzcz0ibG9hZGluZy1zdGF0ZSI+TG9hZGluZyB0ZXJtaW5hbC4uLjwvZGl2PmAgOiAiIn0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgJHt0aGlzLnNob3dNZXRyaWNzID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWV0cmljcy1iYXIiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1ldHJpYyBlcnJvciI+ZXJyb3JzOiAke3RoaXMubWV0cmljcy5lcnJvcn08L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0cmljIHdhcm4iPndhcm5zOiAke3RoaXMubWV0cmljcy53YXJufTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXRyaWMgaW5mbyI+aW5mbzogJHt0aGlzLm1ldHJpY3MuaW5mb308L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0cmljIHN1Y2Nlc3MiPnN1Y2Nlc3M6ICR7dGhpcy5tZXRyaWNzLnN1Y2Nlc3N9PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1ldHJpYyBkZWJ1ZyI+ZGVidWc6ICR7dGhpcy5tZXRyaWNzLmRlYnVnfTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXRyaWMgcmF0ZSI+JHt0aGlzLm1ldHJpY3MucmF0ZS50b0ZpeGVkKDEpfSBsb2dzL3NlYzwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuZG9tdG9vbHNJbnN0YW5jZSA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVUZXJtaW5hbCgpOwogICAgICBpZiAodGhpcy5sb2dFbnRyaWVzLmxlbmd0aCA+IDApIHsKICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMubG9nRW50cmllcykgewogICAgICAgICAgdGhpcy53cml0ZUxvZ0VudHJ5KGVudHJ5KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGluaXRpYWxpemVUZXJtaW5hbCgpIHsKICAgICAgY29uc3QgbGliTG9hZGVyID0gRGVlc1NlcnZpY2VMaWJMb2FkZXIuZ2V0SW5zdGFuY2UoKTsKICAgICAgY29uc3QgW3h0ZXJtQnVuZGxlLCBmaXRCdW5kbGUsIHNlYXJjaEJ1bmRsZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgbGliTG9hZGVyLmxvYWRYdGVybSgpLAogICAgICAgIGxpYkxvYWRlci5sb2FkWHRlcm1GaXRBZGRvbigpLAogICAgICAgIGxpYkxvYWRlci5sb2FkWHRlcm1TZWFyY2hBZGRvbigpCiAgICAgIF0pOwogICAgICBhd2FpdCB0aGlzLmluamVjdFh0ZXJtU3R5bGVzSW50b1NoYWRvdygpOwogICAgICB0aGlzLnRlcm1pbmFsID0gbmV3IHh0ZXJtQnVuZGxlLlRlcm1pbmFsKHsKICAgICAgICBjdXJzb3JCbGluazogZmFsc2UsCiAgICAgICAgZGlzYWJsZVN0ZGluOiB0cnVlLAogICAgICAgIGZvbnRTaXplOiAxMiwKICAgICAgICBmb250RmFtaWx5OiAiJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0xpYmVyYXRpb24gTW9ubycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZSIsCiAgICAgICAgdGhlbWU6IHRoaXMuZ2V0VGVybWluYWxUaGVtZSgpLAogICAgICAgIHNjcm9sbGJhY2s6IHRoaXMubWF4RW50cmllcywKICAgICAgICBjb252ZXJ0RW9sOiB0cnVlCiAgICAgIH0pOwogICAgICB0aGlzLmZpdEFkZG9uID0gbmV3IGZpdEJ1bmRsZS5GaXRBZGRvbigpOwogICAgICB0aGlzLnNlYXJjaEFkZG9uID0gbmV3IHNlYXJjaEJ1bmRsZS5TZWFyY2hBZGRvbigpOwogICAgICB0aGlzLnRlcm1pbmFsLmxvYWRBZGRvbih0aGlzLmZpdEFkZG9uKTsKICAgICAgdGhpcy50ZXJtaW5hbC5sb2FkQWRkb24odGhpcy5zZWFyY2hBZGRvbik7CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIudGVybWluYWwtY29udGFpbmVyIik7CiAgICAgIHRoaXMudGVybWluYWwub3Blbihjb250YWluZXIpOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICB0aGlzLmZpdEFkZG9uLmZpdCgpOwogICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHsKICAgICAgICB0aGlzLmZpdEFkZG9uPy5maXQoKTsKICAgICAgfSk7CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXIpOwogICAgICB0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb24gPSB0aGlzLmRvbXRvb2xzSW5zdGFuY2UudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoKCkgPT4gewogICAgICAgIGlmICh0aGlzLnRlcm1pbmFsKSB7CiAgICAgICAgICB0aGlzLnRlcm1pbmFsLm9wdGlvbnMudGhlbWUgPSB0aGlzLmdldFRlcm1pbmFsVGhlbWUoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLnJhdGVJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHRoaXMuY2FsY3VsYXRlUmF0ZSgpLCAxZTMpOwogICAgICB0aGlzLnRlcm1pbmFsUmVhZHkgPSB0cnVlOwogICAgfQogICAgZ2V0VGVybWluYWxUaGVtZSgpIHsKICAgICAgY29uc3QgaXNEYXJrID0gdGhpcy5kb210b29sc0luc3RhbmNlPy50aGVtZU1hbmFnZXI/LmlzRGFya01vZGUgPz8gdHJ1ZTsKICAgICAgcmV0dXJuIGlzRGFyayA/IHsKICAgICAgICBiYWNrZ3JvdW5kOiAiIzBhMGEwYSIsCiAgICAgICAgZm9yZWdyb3VuZDogIiNlMGUwZTAiLAogICAgICAgIGN1cnNvcjogIiNlMGUwZTAiLAogICAgICAgIHNlbGVjdGlvbkJhY2tncm91bmQ6ICIjNDA0MDQwIiwKICAgICAgICBibGFjazogIiMwMDAwMDAiLAogICAgICAgIHJlZDogIiNmZjU1NTUiLAogICAgICAgIGdyZWVuOiAiIzUwZmE3YiIsCiAgICAgICAgeWVsbG93OiAiI2YxZmE4YyIsCiAgICAgICAgYmx1ZTogIiM2MjcyYTQiLAogICAgICAgIG1hZ2VudGE6ICIjZmY3OWM2IiwKICAgICAgICBjeWFuOiAiIzhiZTlmZCIsCiAgICAgICAgd2hpdGU6ICIjZjhmOGYyIiwKICAgICAgICBicmlnaHRCbGFjazogIiM2MjcyYTQiLAogICAgICAgIGJyaWdodFJlZDogIiNmZjZlNmUiLAogICAgICAgIGJyaWdodEdyZWVuOiAiIzY5ZmY5NCIsCiAgICAgICAgYnJpZ2h0WWVsbG93OiAiI2ZmZmZhNSIsCiAgICAgICAgYnJpZ2h0Qmx1ZTogIiNkNmFjZmYiLAogICAgICAgIGJyaWdodE1hZ2VudGE6ICIjZmY5MmRmIiwKICAgICAgICBicmlnaHRDeWFuOiAiI2E0ZmZmZiIsCiAgICAgICAgYnJpZ2h0V2hpdGU6ICIjZmZmZmZmIgogICAgICB9IDogewogICAgICAgIGJhY2tncm91bmQ6ICIjZmZmZmZmIiwKICAgICAgICBmb3JlZ3JvdW5kOiAiIzMzMzMzMyIsCiAgICAgICAgY3Vyc29yOiAiIzMzMzMzMyIsCiAgICAgICAgc2VsZWN0aW9uQmFja2dyb3VuZDogIiNhZGQ2ZmYiLAogICAgICAgIGJsYWNrOiAiIzAwMDAwMCIsCiAgICAgICAgcmVkOiAiI2NkMzEzMSIsCiAgICAgICAgZ3JlZW46ICIjMDBiYzAwIiwKICAgICAgICB5ZWxsb3c6ICIjOTQ5ODAwIiwKICAgICAgICBibHVlOiAiIzA0NTFhNSIsCiAgICAgICAgbWFnZW50YTogIiNiYzA1YmMiLAogICAgICAgIGN5YW46ICIjMDU5OGJjIiwKICAgICAgICB3aGl0ZTogIiM1NTU1NTUiLAogICAgICAgIGJyaWdodEJsYWNrOiAiIzY2NjY2NiIsCiAgICAgICAgYnJpZ2h0UmVkOiAiI2NkMzEzMSIsCiAgICAgICAgYnJpZ2h0R3JlZW46ICIjMTRjZTE0IiwKICAgICAgICBicmlnaHRZZWxsb3c6ICIjYjViYTAwIiwKICAgICAgICBicmlnaHRCbHVlOiAiIzA0NTFhNSIsCiAgICAgICAgYnJpZ2h0TWFnZW50YTogIiNiYzA1YmMiLAogICAgICAgIGJyaWdodEN5YW46ICIjMDU5OGJjIiwKICAgICAgICBicmlnaHRXaGl0ZTogIiNhNWE1YTUiCiAgICAgIH07CiAgICB9CiAgICAvKioKICAgICAqIEluamVjdCB4dGVybSBDU1Mgc3R5bGVzIGludG8gc2hhZG93IHJvb3QKICAgICAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc2hhZG93IERPTSBkb2Vzbid0IGluaGVyaXQgc3R5bGVzIGZyb20gZG9jdW1lbnQuaGVhZAogICAgICovCiAgICBhc3luYyBpbmplY3RYdGVybVN0eWxlc0ludG9TaGFkb3coKSB7CiAgICAgIGNvbnN0IHN0eWxlSWQgPSAieHRlcm0tc2hhZG93LXN0eWxlcyI7CiAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgY3NzVXJsID0gYCR7Q0ROX0JBU0V9L3h0ZXJtQCR7Q0ROX1ZFUlNJT05TLnh0ZXJtfS9jc3MveHRlcm0uY3NzYDsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChjc3NVcmwpOwogICAgICBjb25zdCBjc3NUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgIHN0eWxlLmlkID0gc3R5bGVJZDsKICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBjc3NUZXh0OwogICAgICB0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoc3R5bGUpOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBTdHJ1Y3R1cmVkIExvZyBNZXRob2RzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogQWRkIGEgc2luZ2xlIHN0cnVjdHVyZWQgbG9nIGVudHJ5CiAgICAgKi8KICAgIGFkZExvZyhsZXZlbCwgbWVzc2FnZTIsIHNvdXJjZSkgewogICAgICBjb25zdCBlbnRyeSA9IHsKICAgICAgICB0aW1lc3RhbXA6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSwKICAgICAgICBsZXZlbCwKICAgICAgICBtZXNzYWdlOiBtZXNzYWdlMiwKICAgICAgICBzb3VyY2UKICAgICAgfTsKICAgICAgdGhpcy5sb2dCdWZmZXIucHVzaChlbnRyeSk7CiAgICAgIGlmICh0aGlzLmxvZ0J1ZmZlci5sZW5ndGggPiB0aGlzLm1heEVudHJpZXMpIHsKICAgICAgICB0aGlzLmxvZ0J1ZmZlci5zaGlmdCgpOwogICAgICB9CiAgICAgIGlmICghdGhpcy5maWx0ZXJNb2RlIHx8ICF0aGlzLnNlYXJjaFF1ZXJ5KSB7CiAgICAgICAgdGhpcy53cml0ZUxvZ0VudHJ5KGVudHJ5KTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmVudHJ5TWF0Y2hlc0ZpbHRlcihlbnRyeSkpIHsKICAgICAgICB0aGlzLnRyYWlsaW5nSGlkZGVuQ291bnQgPSAwOwogICAgICAgIHRoaXMud3JpdGVMb2dFbnRyeShlbnRyeSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy51cGRhdGVUcmFpbGluZ1BsYWNlaG9sZGVyKCk7CiAgICAgIH0KICAgICAgdGhpcy51cGRhdGVNZXRyaWNzKGVudHJ5LmxldmVsKTsKICAgIH0KICAgIC8qKgogICAgICogQWRkIG11bHRpcGxlIHN0cnVjdHVyZWQgbG9nIGVudHJpZXMKICAgICAqLwogICAgdXBkYXRlTG9nKGVudHJpZXMpIHsKICAgICAgaWYgKCFlbnRyaWVzKQogICAgICAgIHJldHVybjsKICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICAgICAgdGhpcy5sb2dCdWZmZXIucHVzaChlbnRyeSk7CiAgICAgICAgaWYgKHRoaXMubG9nQnVmZmVyLmxlbmd0aCA+IHRoaXMubWF4RW50cmllcykgewogICAgICAgICAgdGhpcy5sb2dCdWZmZXIuc2hpZnQoKTsKICAgICAgICB9CiAgICAgICAgaWYgKCF0aGlzLmZpbHRlck1vZGUgfHwgIXRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICAgIHRoaXMud3JpdGVMb2dFbnRyeShlbnRyeSk7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVudHJ5TWF0Y2hlc0ZpbHRlcihlbnRyeSkpIHsKICAgICAgICAgIHRoaXMudHJhaWxpbmdIaWRkZW5Db3VudCA9IDA7CiAgICAgICAgICB0aGlzLndyaXRlTG9nRW50cnkoZW50cnkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnVwZGF0ZVRyYWlsaW5nUGxhY2Vob2xkZXIoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy51cGRhdGVNZXRyaWNzKGVudHJ5LmxldmVsKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBVcGRhdGUgdGhlIHRyYWlsaW5nIGhpZGRlbiBwbGFjZWhvbGRlciBpbiByZWFsLXRpbWUKICAgICAqIENsZWFycyB0aGUgbGFzdCBsaW5lIGlmIGEgcGxhY2Vob2xkZXIgYWxyZWFkeSBleGlzdHMsIHRoZW4gd3JpdGVzIHVwZGF0ZWQgY291bnQKICAgICAqLwogICAgdXBkYXRlVHJhaWxpbmdQbGFjZWhvbGRlcigpIHsKICAgICAgaWYgKCF0aGlzLnRlcm1pbmFsKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKHRoaXMudHJhaWxpbmdIaWRkZW5Db3VudCA+IDApIHsKICAgICAgICB0aGlzLnRlcm1pbmFsLndyaXRlKCJceDFCWzFBXHgxQlsyS1xyIik7CiAgICAgIH0KICAgICAgdGhpcy50cmFpbGluZ0hpZGRlbkNvdW50Kys7CiAgICAgIHRoaXMud3JpdGVIaWRkZW5QbGFjZWhvbGRlcih0aGlzLnRyYWlsaW5nSGlkZGVuQ291bnQpOwogICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC5zY3JvbGxUb0JvdHRvbSgpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIENoZWNrIGlmIGEgbG9nIGVudHJ5IG1hdGNoZXMgdGhlIGN1cnJlbnQgZmlsdGVyCiAgICAgKi8KICAgIGVudHJ5TWF0Y2hlc0ZpbHRlcihlbnRyeSkgewogICAgICBpZiAoIXRoaXMuc2VhcmNoUXVlcnkpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5zZWFyY2hRdWVyeS50b0xvd2VyQ2FzZSgpOwogICAgICByZXR1cm4gZW50cnkubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSB8fCBlbnRyeS5sZXZlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSB8fCAoZW50cnkuc291cmNlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSA/PyBmYWxzZSk7CiAgICB9CiAgICB3cml0ZUxvZ0VudHJ5KGVudHJ5KSB7CiAgICAgIGlmICghdGhpcy50ZXJtaW5hbCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0TG9nRW50cnkoZW50cnkpOwogICAgICB0aGlzLnRlcm1pbmFsLndyaXRlbG4oZm9ybWF0dGVkKTsKICAgICAgaWYgKHRoaXMuYXV0b1Njcm9sbCkgewogICAgICAgIHRoaXMudGVybWluYWwuc2Nyb2xsVG9Cb3R0b20oKTsKICAgICAgfQogICAgfQogICAgZm9ybWF0TG9nRW50cnkoZW50cnkpIHsKICAgICAgY29uc3QgdGltZXN0YW1wMiA9IHRoaXMuZm9ybWF0VGltZXN0YW1wKGVudHJ5LnRpbWVzdGFtcCk7CiAgICAgIGNvbnN0IGxldmVsQ29sb3JzID0gewogICAgICAgIGRlYnVnOiAiXHgxQls5MG0iLAogICAgICAgIC8vIEdyYXkKICAgICAgICBpbmZvOiAiXHgxQlszNm0iLAogICAgICAgIC8vIEN5YW4KICAgICAgICB3YXJuOiAiXHgxQlszM20iLAogICAgICAgIC8vIFllbGxvdwogICAgICAgIGVycm9yOiAiXHgxQlszMW0iLAogICAgICAgIC8vIFJlZAogICAgICAgIHN1Y2Nlc3M6ICJceDFCWzMybSIKICAgICAgICAvLyBHcmVlbgogICAgICB9OwogICAgICBjb25zdCByZXNldCA9ICJceDFCWzBtIjsKICAgICAgY29uc3QgZGltID0gIlx4MUJbMm0iOwogICAgICBjb25zdCBsZXZlbFN0ciA9IGAke2xldmVsQ29sb3JzW2VudHJ5LmxldmVsXX1bJHtlbnRyeS5sZXZlbC50b1VwcGVyQ2FzZSgpLnBhZEVuZCg3KX1dJHtyZXNldH1gOwogICAgICBjb25zdCBzb3VyY2VTdHIgPSBlbnRyeS5zb3VyY2UgPyBgJHtkaW19WyR7ZW50cnkuc291cmNlfV0ke3Jlc2V0fSBgIDogIiI7CiAgICAgIGNvbnN0IG1lc3NhZ2VTdHIgPSB0aGlzLmFwcGx5SGlnaGxpZ2h0cyhlbnRyeS5tZXNzYWdlKTsKICAgICAgcmV0dXJuIGAke2RpbX0ke3RpbWVzdGFtcDJ9JHtyZXNldH0gJHtsZXZlbFN0cn0gJHtzb3VyY2VTdHJ9JHttZXNzYWdlU3RyfWA7CiAgICB9CiAgICBmb3JtYXRUaW1lc3RhbXAoaXNvU3RyaW5nKSB7CiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpc29TdHJpbmcpOwogICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoImVuLVVTIiwgewogICAgICAgIGhvdXIxMjogZmFsc2UsCiAgICAgICAgaG91cjogIjItZGlnaXQiLAogICAgICAgIG1pbnV0ZTogIjItZGlnaXQiLAogICAgICAgIHNlY29uZDogIjItZGlnaXQiLAogICAgICAgIGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDMKICAgICAgfSk7CiAgICB9CiAgICBhcHBseUhpZ2hsaWdodHModGV4dDkpIHsKICAgICAgY29uc3Qga2V5d29yZHMgPSBbLi4udGhpcy5oaWdobGlnaHRLZXl3b3Jkc107CiAgICAgIGlmICh0aGlzLmZpbHRlck1vZGUgJiYgdGhpcy5zZWFyY2hRdWVyeSkgewogICAgICAgIGtleXdvcmRzLnB1c2godGhpcy5zZWFyY2hRdWVyeSk7CiAgICAgIH0KICAgICAgaWYgKGtleXdvcmRzLmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm4gdGV4dDk7CiAgICAgIGxldCByZXN1bHQgPSB0ZXh0OTsKICAgICAgZm9yIChjb25zdCBrZXl3b3JkIG9mIGtleXdvcmRzKSB7CiAgICAgICAgY29uc3QgZXNjYXBlZCA9IGtleXdvcmQucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csICJcXCQmIik7CiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGAoJHtlc2NhcGVkfSlgLCAiZ2kiKTsKICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShyZWdleCwgIlx4MUJbNDNtXHgxQlszMG0kMVx4MUJbMG0iKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBSYXcgTG9nIE1ldGhvZHMKICAgIC8vID09PT09PT09PT09PT09PT09PT09PQogICAgLyoqCiAgICAgKiBXcml0ZSByYXcgZGF0YSB0byB0aGUgdGVybWluYWwgKGZvciBEb2NrZXIgbG9ncywgZXRjLikKICAgICAqLwogICAgd3JpdGVSYXcoZGF0YSkgewogICAgICBpZiAoIXRoaXMudGVybWluYWwpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnRlcm1pbmFsLndyaXRlKGRhdGEpOwogICAgICB0aGlzLnJlY29yZExvZ0V2ZW50KCk7CiAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGwpIHsKICAgICAgICB0aGlzLnRlcm1pbmFsLnNjcm9sbFRvQm90dG9tKCk7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogV3JpdGUgYSByYXcgbGluZSB0byB0aGUgdGVybWluYWwKICAgICAqLwogICAgd3JpdGVsblJhdyhsaW5lKSB7CiAgICAgIGlmICghdGhpcy50ZXJtaW5hbCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMudGVybWluYWwud3JpdGVsbihsaW5lKTsKICAgICAgdGhpcy5yZWNvcmRMb2dFdmVudCgpOwogICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC5zY3JvbGxUb0JvdHRvbSgpOwogICAgICB9CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFNlYXJjaCBNZXRob2RzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIGhhbmRsZVNlYXJjaElucHV0KGUxMSkgewogICAgICBjb25zdCBpbnB1dCA9IGUxMS50YXJnZXQ7CiAgICAgIGNvbnN0IG5ld1F1ZXJ5ID0gaW5wdXQudmFsdWU7CiAgICAgIGNvbnN0IHF1ZXJ5Q2hhbmdlZCA9IHRoaXMuc2VhcmNoUXVlcnkgIT09IG5ld1F1ZXJ5OwogICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gbmV3UXVlcnk7CiAgICAgIGlmICh0aGlzLmZpbHRlck1vZGUgJiYgcXVlcnlDaGFuZ2VkKSB7CiAgICAgICAgdGhpcy5yZVJlbmRlckZpbHRlcmVkTG9ncygpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICB0aGlzLnNlYXJjaEFkZG9uPy5maW5kTmV4dCh0aGlzLnNlYXJjaFF1ZXJ5KTsKICAgICAgfQogICAgfQogICAgaGFuZGxlU2VhcmNoS2V5ZG93bihlMTEpIHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICBpZiAoZTExLnNoaWZ0S2V5KSB7CiAgICAgICAgICB0aGlzLnNlYXJjaFByZXZpb3VzKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2VhcmNoTmV4dCgpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChlMTEua2V5ID09PSAiRXNjYXBlIikgewogICAgICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAiIjsKICAgICAgICBlMTEudGFyZ2V0LnZhbHVlID0gIiI7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogU2VhcmNoIGZvciBhIHF1ZXJ5IGluIHRoZSB0ZXJtaW5hbAogICAgICovCiAgICBzZWFyY2gocXVlcnkpIHsKICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9IHF1ZXJ5OwogICAgICB0aGlzLnNlYXJjaEFkZG9uPy5maW5kTmV4dChxdWVyeSk7CiAgICB9CiAgICAvKioKICAgICAqIEZpbmQgbmV4dCBzZWFyY2ggbWF0Y2gKICAgICAqLwogICAgc2VhcmNoTmV4dCgpIHsKICAgICAgaWYgKHRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICB0aGlzLnNlYXJjaEFkZG9uPy5maW5kTmV4dCh0aGlzLnNlYXJjaFF1ZXJ5KTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBGaW5kIHByZXZpb3VzIHNlYXJjaCBtYXRjaAogICAgICovCiAgICBzZWFyY2hQcmV2aW91cygpIHsKICAgICAgaWYgKHRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICB0aGlzLnNlYXJjaEFkZG9uPy5maW5kUHJldmlvdXModGhpcy5zZWFyY2hRdWVyeSk7CiAgICAgIH0KICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PQogICAgLy8gQ29udHJvbCBNZXRob2RzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIHRvZ2dsZUF1dG9TY3JvbGwoKSB7CiAgICAgIHRoaXMuYXV0b1Njcm9sbCA9ICF0aGlzLmF1dG9TY3JvbGw7CiAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGwgJiYgdGhpcy50ZXJtaW5hbCkgewogICAgICAgIHRoaXMudGVybWluYWwuc2Nyb2xsVG9Cb3R0b20oKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBUb2dnbGUgYmV0d2VlbiBmaWx0ZXIgbW9kZSBhbmQgaGlnaGxpZ2h0IG1vZGUKICAgICAqLwogICAgdG9nZ2xlRmlsdGVyTW9kZSgpIHsKICAgICAgdGhpcy5maWx0ZXJNb2RlID0gIXRoaXMuZmlsdGVyTW9kZTsKICAgICAgdGhpcy5yZVJlbmRlckZpbHRlcmVkTG9ncygpOwogICAgfQogICAgLyoqCiAgICAgKiBSZS1yZW5kZXIgbG9ncyBiYXNlZCBvbiBjdXJyZW50IGZpbHRlciBzdGF0ZQogICAgICogSW4gZmlsdGVyIG1vZGU6IHNob3cgbWF0Y2hpbmcgbG9ncyB3aXRoIHBsYWNlaG9sZGVycyBmb3IgaGlkZGVuIGVudHJpZXMKICAgICAqIEluIGhpZ2hsaWdodCBtb2RlOiBzaG93IGFsbCBsb2dzCiAgICAgKi8KICAgIHJlUmVuZGVyRmlsdGVyZWRMb2dzKCkgewogICAgICBpZiAoIXRoaXMudGVybWluYWwpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnRlcm1pbmFsLmNsZWFyKCk7CiAgICAgIHRoaXMudHJhaWxpbmdIaWRkZW5Db3VudCA9IDA7CiAgICAgIGlmICghdGhpcy5maWx0ZXJNb2RlIHx8ICF0aGlzLnNlYXJjaFF1ZXJ5KSB7CiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmxvZ0J1ZmZlcikgewogICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRMb2dFbnRyeShlbnRyeSk7CiAgICAgICAgICB0aGlzLnRlcm1pbmFsLndyaXRlbG4oZm9ybWF0dGVkKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGV0IGhpZGRlbkNvdW50ID0gMDsKICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMubG9nQnVmZmVyKSB7CiAgICAgICAgICBpZiAodGhpcy5lbnRyeU1hdGNoZXNGaWx0ZXIoZW50cnkpKSB7CiAgICAgICAgICAgIGlmIChoaWRkZW5Db3VudCA+IDApIHsKICAgICAgICAgICAgICB0aGlzLndyaXRlSGlkZGVuUGxhY2Vob2xkZXIoaGlkZGVuQ291bnQpOwogICAgICAgICAgICAgIGhpZGRlbkNvdW50ID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdExvZ0VudHJ5KGVudHJ5KTsKICAgICAgICAgICAgdGhpcy50ZXJtaW5hbC53cml0ZWxuKGZvcm1hdHRlZCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBoaWRkZW5Db3VudCsrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaGlkZGVuQ291bnQgPiAwKSB7CiAgICAgICAgICB0aGlzLndyaXRlSGlkZGVuUGxhY2Vob2xkZXIoaGlkZGVuQ291bnQpOwogICAgICAgICAgdGhpcy50cmFpbGluZ0hpZGRlbkNvdW50ID0gaGlkZGVuQ291bnQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGwpIHsKICAgICAgICB0aGlzLnRlcm1pbmFsLnNjcm9sbFRvQm90dG9tKCk7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogV3JpdGUgYSBwbGFjZWhvbGRlciBsaW5lIHNob3dpbmcgaG93IG1hbnkgbG9nIGVudHJpZXMgYXJlIGhpZGRlbiBieSBmaWx0ZXIKICAgICAqLwogICAgd3JpdGVIaWRkZW5QbGFjZWhvbGRlcihjb3VudDIpIHsKICAgICAgY29uc3QgZGltID0gIlx4MUJbMm0iOwogICAgICBjb25zdCByZXNldCA9ICJceDFCWzBtIjsKICAgICAgY29uc3QgdGV4dDkgPSBjb3VudDIgPT09IDEgPyBgWzEgbG9nIGxpbmUgaGlkZGVuIGJ5IGZpbHRlciAuLi5dYCA6IGBbJHtjb3VudDJ9IGxvZyBsaW5lcyBoaWRkZW4gYnkgZmlsdGVyIC4uLl1gOwogICAgICB0aGlzLnRlcm1pbmFsPy53cml0ZWxuKGAke2RpbX0ke3RleHQ5fSR7cmVzZXR9YCk7CiAgICB9CiAgICAvKioKICAgICAqIENsZWFyIGFsbCBsb2dzIGFuZCByZXNldCBtZXRyaWNzCiAgICAgKi8KICAgIGNsZWFyTG9ncygpIHsKICAgICAgdGhpcy50ZXJtaW5hbD8uY2xlYXIoKTsKICAgICAgdGhpcy5sb2dCdWZmZXIgPSBbXTsKICAgICAgdGhpcy50cmFpbGluZ0hpZGRlbkNvdW50ID0gMDsKICAgICAgdGhpcy5yZXNldE1ldHJpY3MoKTsKICAgIH0KICAgIC8qKgogICAgICogU2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIGxvZwogICAgICovCiAgICBzY3JvbGxUb0JvdHRvbSgpIHsKICAgICAgdGhpcy50ZXJtaW5hbD8uc2Nyb2xsVG9Cb3R0b20oKTsKICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PQogICAgLy8gTWV0cmljcyBNZXRob2RzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIHVwZGF0ZU1ldHJpY3MobGV2ZWwpIHsKICAgICAgdGhpcy5tZXRyaWNzID0gewogICAgICAgIC4uLnRoaXMubWV0cmljcywKICAgICAgICBbbGV2ZWxdOiB0aGlzLm1ldHJpY3NbbGV2ZWxdICsgMSwKICAgICAgICB0b3RhbDogdGhpcy5tZXRyaWNzLnRvdGFsICsgMQogICAgICB9OwogICAgICB0aGlzLnJlY29yZExvZ0V2ZW50KCk7CiAgICB9CiAgICByZWNvcmRMb2dFdmVudCgpIHsKICAgICAgdGhpcy5yYXRlQnVmZmVyLnB1c2goRGF0ZS5ub3coKSk7CiAgICB9CiAgICBjYWxjdWxhdGVSYXRlKCkgewogICAgICBjb25zdCBub3cyID0gRGF0ZS5ub3coKTsKICAgICAgdGhpcy5yYXRlQnVmZmVyID0gdGhpcy5yYXRlQnVmZmVyLmZpbHRlcigodDkpID0+IG5vdzIgLSB0OSA8IDFlNCk7CiAgICAgIGNvbnN0IHJhdGUgPSB0aGlzLnJhdGVCdWZmZXIubGVuZ3RoIC8gMTA7CiAgICAgIGlmIChyYXRlICE9PSB0aGlzLm1ldHJpY3MucmF0ZSkgewogICAgICAgIHRoaXMubWV0cmljcyA9IHsgLi4udGhpcy5tZXRyaWNzLCByYXRlIH07CiAgICAgIH0KICAgIH0KICAgIHJlc2V0TWV0cmljcygpIHsKICAgICAgdGhpcy5tZXRyaWNzID0geyBkZWJ1ZzogMCwgaW5mbzogMCwgd2FybjogMCwgZXJyb3I6IDAsIHN1Y2Nlc3M6IDAsIHRvdGFsOiAwLCByYXRlOiAwIH07CiAgICAgIHRoaXMucmF0ZUJ1ZmZlciA9IFtdOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBMaWZlY3ljbGUKICAgIC8vID09PT09PT09PT09PT09PT09PT09PQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKSB7CiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbikgewogICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICB9CiAgICAgIGlmICh0aGlzLnJhdGVJbnRlcnZhbCkgewogICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5yYXRlSW50ZXJ2YWwpOwogICAgICB9CiAgICAgIGlmICh0aGlzLnRlcm1pbmFsKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC5kaXNwb3NlKCk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDcoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNDaGFydExvZzIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtZGF0YXZpZXctY29kZWJveC9kZWVzLWRhdGF2aWV3LWNvZGVib3guZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMzNCA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vV3JhcHBlciB7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICBwYWRkaW5nOiA0OHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y4ZjlmYSIsICIjMGEwYTBhIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDMycHg7CiAgICB9CiAgICAKICAgIC5zZWN0aW9uIHsKICAgICAgbWF4LXdpZHRoOiA5MDBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgfQogICAgCiAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICB9CiAgICAKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW9XcmFwcGVyIj4KICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5UeXBlU2NyaXB0IENvZGUgRXhhbXBsZTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5BIGNvbXByZWhlbnNpdmUgVHlwZVNjcmlwdCBjb2RlIGV4YW1wbGUgd2l0aCB2YXJpb3VzIHN5bnRheCBoaWdobGlnaHRpbmcuPC9kaXY+CiAgICAgIDxkZWVzLWRhdGF2aWV3LWNvZGVib3ggcHJvZ2xhbmc9InR5cGVzY3JpcHQiPgppbnRlcmZhY2UgVXNlciB7CiAgaWQ6IG51bWJlcjsKICBuYW1lOiBzdHJpbmc7CiAgZW1haWw6IHN0cmluZzsKICBpc0FjdGl2ZTogYm9vbGVhbjsKfQoKY2xhc3MgVXNlclNlcnZpY2UgewogIHByaXZhdGUgdXNlcnM6IFVzZXJbXSA9IFtdOwogIAogIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpVXJsOiBzdHJpbmcpIHsKICAgIGNvbnNvbGUubG9nKCdVc2VyU2VydmljZSBpbml0aWFsaXplZCcpOwogIH0KICAKICBhc3luYyBnZXRVc2VycygpOiBQcm9taXNlPFVzZXJbXT4gewogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLmFwaVVybCk7CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7CiAgICAgIHJldHVybiBkYXRhLnVzZXJzOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHVzZXJzOicsIGVycm9yKTsKICAgICAgcmV0dXJuIFtdOwogICAgfQogIH0KICAKICBhZGRVc2VyKHVzZXI6IFVzZXIpOiB2b2lkIHsKICAgIHRoaXMudXNlcnMucHVzaCh1c2VyKTsKICB9Cn0KCi8vIFVzYWdlIGV4YW1wbGUKY29uc3Qgc2VydmljZSA9IG5ldyBVc2VyU2VydmljZSgnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vdXNlcnMnKTsKY29uc3QgdXNlcnMgPSBhd2FpdCBzZXJ2aWNlLmdldFVzZXJzKCk7CmNvbnNvbGUubG9nKCdGb3VuZCB1c2VyczonLCB1c2Vycy5sZW5ndGgpOwogICAgICA8L2RlZXMtZGF0YXZpZXctY29kZWJveD4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+SmF2YVNjcmlwdCBFeGFtcGxlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPk1vZGVybiBKYXZhU2NyaXB0IHdpdGggRVM2KyBmZWF0dXJlcy48L2Rpdj4KICAgICAgPGRlZXMtZGF0YXZpZXctY29kZWJveCBwcm9nbGFuZz0iamF2YXNjcmlwdCI+Ci8vIEFycmF5IG1hbmlwdWxhdGlvbiBleGFtcGxlcwpjb25zdCBudW1iZXJzID0gWzEsIDIsIDMsIDQsIDVdOwpjb25zdCBkb3VibGVkID0gbnVtYmVycy5tYXAobiA9PiBuICogMik7CmNvbnN0IGZpbHRlcmVkID0gbnVtYmVycy5maWx0ZXIobiA9PiBuID4gMyk7CgovLyBPYmplY3QgZGVzdHJ1Y3R1cmluZwpjb25zdCB1c2VyID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAsIGNpdHk6ICdOZXcgWW9yaycgfTsKY29uc3QgeyBuYW1lLCBhZ2UgfSA9IHVzZXI7CgovLyBQcm9taXNlIGhhbmRsaW5nCmNvbnN0IGZldGNoRGF0YSA9IGFzeW5jICh1cmwpID0+IHsKICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7CiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTsKfTsKCi8vIE1vZGVybiBzeW50YXgKY29uc3QgZ3JlZXQgPSAobmFtZSA9ICdXb3JsZCcpID0+IFxgSGVsbG8sIFwke25hbWV9IVxgOwpjb25zb2xlLmxvZyhncmVldCgnU2hhZENOJykpOwogICAgICA8L2RlZXMtZGF0YXZpZXctY29kZWJveD4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UHl0aG9uIEV4YW1wbGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+UHl0aG9uIGNvZGUgd2l0aCBjbGFzc2VzIGFuZCB0eXBlIGhpbnRzLjwvZGl2PgogICAgICA8ZGVlcy1kYXRhdmlldy1jb2RlYm94IHByb2dsYW5nPSJweXRob24iPgpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgT3B0aW9uYWwKaW1wb3J0IGFzeW5jaW8KCmNsYXNzIERhdGFQcm9jZXNzb3I6CiAgICAiIiJBIHNpbXBsZSBkYXRhIHByb2Nlc3NvciBjbGFzcyIiIgogICAgCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZTogc3RyKToKICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgc2VsZi5kYXRhOiBMaXN0W2RpY3RdID0gW10KICAgIAogICAgYXN5bmMgZGVmIHByb2Nlc3NfZGF0YShzZWxmLCBpdGVtczogTGlzdFtkaWN0XSkgLT4gTGlzdFtkaWN0XToKICAgICAgICAiIiJQcm9jZXNzIGRhdGEgaXRlbXMgYXN5bmNocm9ub3VzbHkiIiIKICAgICAgICByZXN1bHRzID0gW10KICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKICAgICAgICAgICAgIyBTaW11bGF0ZSBhc3luYyBwcm9jZXNzaW5nCiAgICAgICAgICAgIGF3YWl0IGFzeW5jaW8uc2xlZXAoMC4xKQogICAgICAgICAgICByZXN1bHRzLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAnaWQnOiBpdGVtLmdldCgnaWQnKSwKICAgICAgICAgICAgICAgICdwcm9jZXNzZWQnOiBUcnVlLAogICAgICAgICAgICAgICAgJ3Byb2Nlc3Nvcic6IHNlbGYubmFtZQogICAgICAgICAgICB9KQogICAgICAgIHJldHVybiByZXN1bHRzCiAgICAKICAgIGRlZiBnZXRfc3VtbWFyeShzZWxmKSAtPiBkaWN0OgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICdwcm9jZXNzb3InOiBzZWxmLm5hbWUsCiAgICAgICAgICAgICdpdGVtc19wcm9jZXNzZWQnOiBsZW4oc2VsZi5kYXRhKQogICAgICAgIH0KCiMgVXNhZ2UKcHJvY2Vzc29yID0gRGF0YVByb2Nlc3NvcigiTWFpbiIpCmRhdGEgPSBhd2FpdCBwcm9jZXNzb3IucHJvY2Vzc19kYXRhKFt7J2lkJzogMX0sIHsnaWQnOiAyfV0pCiAgICAgIDwvZGVlcy1kYXRhdmlldy1jb2RlYm94PgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5DU1MgRXhhbXBsZTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5Nb2Rlcm4gQ1NTIHdpdGggY3VzdG9tIHByb3BlcnRpZXMgYW5kIGFuaW1hdGlvbnMuIE5vdGUgdGhlIHNob3J0ZXIgbGFuZ3VhZ2UgbGFiZWwuPC9kaXY+CiAgICAgIDxkZWVzLWRhdGF2aWV3LWNvZGVib3ggcHJvZ2xhbmc9ImNzcyI+Ci8qIE1vZGVybiBDU1Mgd2l0aCBjdXN0b20gcHJvcGVydGllcyAqLwo6cm9vdCB7CiAgLS1wcmltYXJ5LWNvbG9yOiAjM2I4MmY2OwogIC0tc2Vjb25kYXJ5LWNvbG9yOiAjMTBiOTgxOwogIC0tYmFja2dyb3VuZDogI2ZmZmZmZjsKICAtLXRleHQtY29sb3I6ICMwOTA5MGI7CiAgLS1ib3JkZXItcmFkaXVzOiA2cHg7Cn0KCi5jYXJkIHsKICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kKTsKICBib3JkZXI6IDFweCBzb2xpZCAjZTVlN2ViOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpOwogIHBhZGRpbmc6IDI0cHg7CiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwp9CgouY2FyZDpob3ZlciB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOwogIGJveC1zaGFkb3c6IDAgNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMSk7Cn0KCkBrZXlmcmFtZXMgZmFkZUluIHsKICBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpOyB9CiAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH0KfQogICAgICA8L2RlZXMtZGF0YXZpZXctY29kZWJveD4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+SlNPTiBFeGFtcGxlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkpTT04gY29uZmlndXJhdGlvbiB3aXRoIHByb3BlciBmb3JtYXR0aW5nLjwvZGl2PgogICAgICA8ZGVlcy1kYXRhdmlldy1jb2RlYm94IHByb2dsYW5nPSJqc29uIj4KewogICJuYW1lIjogIkBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZyIsCiAgInZlcnNpb24iOiAiMS4xMC43IiwKICAiZGVzY3JpcHRpb24iOiAiQSBjb21wcmVoZW5zaXZlIGNhdGFsb2cgb2Ygd2ViIGNvbXBvbmVudHMiLAogICJtYWluIjogImRpc3RfdHNfd2ViL2luZGV4LmpzIiwKICAidHlwZSI6ICJtb2R1bGUiLAogICJzY3JpcHRzIjogewogICAgImJ1aWxkIjogInRzYnVpbGQgdHNmb2xkZXJzIC0tYWxsb3dpbXBsaWNpdGFueSAmJiB0c2J1bmRsZSBlbGVtZW50IC0tcHJvZHVjdGlvbiIsCiAgICAid2F0Y2giOiAidHN3YXRjaCBlbGVtZW50IiwKICAgICJ0ZXN0IjogInRzdGVzdCB0ZXN0LyAtLXdlYiAtLXZlcmJvc2UiCiAgfSwKICAiZGVwZW5kZW5jaWVzIjogewogICAgIkBkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCI6ICJeMi4wLjQ1IiwKICAgICJoaWdobGlnaHQuanMiOiAiXjExLjkuMCIKICB9Cn0KICAgICAgPC9kZWVzLWRhdGF2aWV3LWNvZGVib3g+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1kYXRhdmlldy9kZWVzLWRhdGF2aWV3LWNvZGVib3gvZGVlcy1kYXRhdmlldy1jb2RlYm94LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czExKCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfc2VydmljZXMoKTsKdmFyIF9fZXNEZWNvcmF0ZTQ3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0OCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0RhdGF2aWV3Q29kZWJveCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtZGF0YXZpZXctY29kZWJveCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3Byb2dMYW5nX2RlY29yYXRvcnM7CiAgbGV0IF9wcm9nTGFuZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Byb2dMYW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2RlVG9EaXNwbGF5X2RlY29yYXRvcnM7CiAgbGV0IF9jb2RlVG9EaXNwbGF5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29kZVRvRGlzcGxheV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzRGF0YXZpZXdDb2RlYm94MiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3Byb2dMYW5nX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9jb2RlVG9EaXNwbGF5X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlNDcodGhpcywgbnVsbCwgX3Byb2dMYW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInByb2dMYW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwcm9nTGFuZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wcm9nTGFuZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucHJvZ0xhbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcHJvZ0xhbmdfaW5pdGlhbGl6ZXJzLCBfcHJvZ0xhbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nyh0aGlzLCBudWxsLCBfY29kZVRvRGlzcGxheV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2RlVG9EaXNwbGF5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb2RlVG9EaXNwbGF5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvZGVUb0Rpc3BsYXksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvZGVUb0Rpc3BsYXkgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29kZVRvRGlzcGxheV9pbml0aWFsaXplcnMsIF9jb2RlVG9EaXNwbGF5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzRGF0YXZpZXdDb2RlYm94MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzQ7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkRhdGEgVmlldyI7CiAgICAjcHJvZ0xhbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX3Byb2dMYW5nX2luaXRpYWxpemVycywgInR5cGVzY3JpcHQiKTsKICAgIGdldCBwcm9nTGFuZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Byb2dMYW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcHJvZ0xhbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Byb2dMYW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29kZVRvRGlzcGxheV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX3Byb2dMYW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0OCh0aGlzLCBfY29kZVRvRGlzcGxheV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgY29kZVRvRGlzcGxheSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvZGVUb0Rpc3BsYXlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb2RlVG9EaXNwbGF5KHZhbHVlMikgewogICAgICB0aGlzLiNjb2RlVG9EaXNwbGF5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke2RvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnN0eWxlc30KICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgfQogICAgICAgIC5tYWluYm94IHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzA5MDkwYiIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAuYXBwYmFyIHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzE4MTgxYiIpfTsKICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLmFwcGJhciAuZmlsZU5hbWUgewogICAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLmJvdHRvbUJhciB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxODE4MWIiKX07CiAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAuc3BhY2VzTGFiZWwgewogICAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICAubGFuZ3VhZ2VMYWJlbCB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIil9OwogICAgICAgICAgcGFkZGluZzogMHB4IDE2cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1rZXl3b3JkIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZjg3MTcxIil9OwogICAgICAgIH0KCiAgICAgICAgLmNvZGVncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDUwcHggYXV0bzsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAubGluZU51bWJlcnMgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM1MjUyNWIiKX07CiAgICAgICAgICBwYWRkaW5nOiAyNHB4IDE2cHggMHB4IDBweDsKICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICB9CgogICAgICAgIC5saW5lQ291bnRlcjpsYXN0LWNoaWxkIHsKICAgICAgICAgIG9wYWNpdHk6IDUwJTsKICAgICAgICB9CgogICAgICAgIHByZSB7CiAgICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgICAgbWFyZ2luOiAwcHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4IDI0cHg7CiAgICAgICAgfQoKICAgICAgICBjb2RlIHsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgICBtYXJnaW46IDBweDsKICAgICAgICB9CgogICAgICAgIGNvZGUsCiAgICAgICAgY29kZSAqLAogICAgICAgIC5saW5lTnVtYmVycyB7CiAgICAgICAgICBsaW5lLWhlaWdodDogMS40ZW07CiAgICAgICAgICBmb250LXdlaWdodDogMjAwOwogICAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzTW9ub0ZvbnRGYW1pbHl9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtc3RyaW5nIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA1OTY2OSIsICIjMTBiOTgxIil9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtYnVpbHRfaW4gewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOGI1Y2Y2IiwgIiNhNzhiZmEiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1mdW5jdGlvbiB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLXBhcmFtcyB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwODkxYjIiLCAiIzA2YjZkNCIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLWNvbW1lbnQgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1udW1iZXIgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWE1ODBjIiwgIiNmYjkyM2MiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1saXRlcmFsIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZjg3MTcxIil9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtYXR0ciB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM4YjVjZjYiLCAiI2E3OGJmYSIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLXZhcmlhYmxlIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtYWluYm94IgogICAgICAgIEBjb250ZXh0bWVudT0iJHsoZXZlbnRBcmcpID0+IHsKICAgICAgICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnRBcmcsIFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIkFib3V0IiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJjaXJjbGVJbmZvIiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBdKTsKICAgICAgfX0iCiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJhcHBiYXIiPgogICAgICAgICAgPGRlZXMtd2luZG93Y29udHJvbHMgdHlwZT0ibWFjIiBwb3NpdGlvbj0ibGVmdCI+PC9kZWVzLXdpbmRvd2NvbnRyb2xzPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZU5hbWUiPmluZGV4LnRzPC9kaXY+CiAgICAgICAgICA8ZGVlcy13aW5kb3djb250cm9scyB0eXBlPSJtYWMiIHBvc2l0aW9uPSJyaWdodCI+PC9kZWVzLXdpbmRvd2NvbnRyb2xzPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvZGVncmlkIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmVOdW1iZXJzIj4KICAgICAgICAgICAgJHsoKCkgPT4gewogICAgICAgIGxldCBsaW5lQ291bnRlciA9IDA7CiAgICAgICAgcmV0dXJuIHRoaXMuY29kZVRvRGlzcGxheS5zcGxpdCgiXG4iKS5tYXAoKGxpbmVBcmcpID0+IHsKICAgICAgICAgIGxpbmVDb3VudGVyKys7CiAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0ibGluZUNvdW50ZXIiPiR7bGluZUNvdW50ZXJ9PC9kaXY+YDsKICAgICAgICB9KTsKICAgICAgfSkoKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHByZT48Y29kZT48L2NvZGU+PC9wcmU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYm90dG9tQmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlc0xhYmVsIj5TcGFjZXM6IDI8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlTGFiZWwiPiR7dGhpcy5wcm9nTGFuZ308L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgY29kZVRvRGlzcGxheVN0b3JlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX2NvZGVUb0Rpc3BsYXlfZXh0cmFJbml0aWFsaXplcnMpLCAiIik7CiAgICBoaWdobGlnaHRKcyA9IG51bGw7CiAgICBhc3luYyB1cGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGNvbnNvbGUubG9nKCJoaWdobGlnaHRpbmcgbm93Iik7CiAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2hpbGROb2Rlcyk7CiAgICAgIGNvbnN0IHNsb3R0ZWRDb2RlTm9kZXMgPSBbXTsKICAgICAgdGhpcy5jaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4gewogICAgICAgIGlmIChjaGlsZE5vZGUubm9kZU5hbWUgPT09ICIjdGV4dCIpIHsKICAgICAgICAgIHNsb3R0ZWRDb2RlTm9kZXMucHVzaChjaGlsZE5vZGUpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmICh0aGlzLmNvZGVUb0Rpc3BsYXkgJiYgdGhpcy5jb2RlVG9EaXNwbGF5ICE9PSB0aGlzLmNvZGVUb0Rpc3BsYXlTdG9yZSkgewogICAgICAgIHRoaXMuY29kZVRvRGlzcGxheVN0b3JlID0gc21hcnRzdHJpbmdfaW5kZW50X2V4cG9ydHMubm9ybWFsaXplKHRoaXMuY29kZVRvRGlzcGxheSkudHJpbVN0YXJ0KCk7CiAgICAgIH0KICAgICAgaWYgKHNsb3R0ZWRDb2RlTm9kZXNbMF0gJiYgc2xvdHRlZENvZGVOb2Rlc1swXS53aG9sZVRleHQgJiYgIXRoaXMuY29kZVRvRGlzcGxheSkgewogICAgICAgIHRoaXMuY29kZVRvRGlzcGxheVN0b3JlID0gc21hcnRzdHJpbmdfaW5kZW50X2V4cG9ydHMubm9ybWFsaXplKHNsb3R0ZWRDb2RlTm9kZXNbMF0ud2hvbGVUZXh0KS50cmltU3RhcnQoKTsKICAgICAgICB0aGlzLmNvZGVUb0Rpc3BsYXkgPSB0aGlzLmNvZGVUb0Rpc3BsYXlTdG9yZTsKICAgICAgfQogICAgICBhd2FpdCBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgaWYgKCF0aGlzLmhpZ2hsaWdodEpzKSB7CiAgICAgICAgdGhpcy5oaWdobGlnaHRKcyA9IGF3YWl0IERlZXNTZXJ2aWNlTGliTG9hZGVyLmdldEluc3RhbmNlKCkubG9hZEhpZ2hsaWdodEpzKCk7CiAgICAgIH0KICAgICAgY29uc3QgbG9jYWxDb2RlTm9kZSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJjb2RlIik7CiAgICAgIGNvbnN0IGhpZ2hsaWdodGVkSHRtbCA9IHRoaXMuaGlnaGxpZ2h0SnMuaGlnaGxpZ2h0KHRoaXMuY29kZVRvRGlzcGxheVN0b3JlLCB7CiAgICAgICAgbGFuZ3VhZ2U6IHRoaXMucHJvZ0xhbmcsCiAgICAgICAgaWdub3JlSWxsZWdhbHM6IHRydWUKICAgICAgfSk7CiAgICAgIGxvY2FsQ29kZU5vZGUuaW5uZXJIVE1MID0gaGlnaGxpZ2h0ZWRIdG1sLnZhbHVlOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0OChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0RhdGF2aWV3Q29kZWJveDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMzUgPSAoKSA9PiBiMmAgPHN0eWxlPgogICAgLmRlbW8gewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y1ZjVmNSIsICIjMGEwYTBhIil9OwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgY29udGVudDogJyc7CiAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICB9CiAgICAKICAgIC5kZW1vLWdyaWQgewogICAgICBkaXNwbGF5OiBncmlkOwogICAgICBnYXA6IDI0cHg7CiAgICAgIG1heC13aWR0aDogODAwcHg7CiAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgfQogICAgCiAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAxNnB4OwogICAgfQogICAgCiAgICAuZGVtby10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICB9CiAgICAKICAgIC5kZW1vLW5vdGUgewogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vIj4KICAgIDxkaXYgY2xhc3M9ImRlbW8tbm90ZSI+CiAgICAgIFJpZ2h0LWNsaWNrIG9uIGFueSBkZXRhaWwgcm93IHRvIGNvcHkgdGhlIHZhbHVlLCBrZXksIG9yIGtleTp2YWx1ZSBjb21iaW5hdGlvbgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLWdyaWQiPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tdGl0bGUiPlNlcnZpY2UgSGVhbHRoIFN0YXR1czwvZGl2PgogICAgICAgIDxkZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdAogICAgICAgICAgLnN0YXR1c09iamVjdD0ke3sKICBpZDogIjEiLAogIG5hbWU6ICJBUEkgR2F0ZXdheSBTZXJ2aWNlIiwKICBjb21iaW5lZFN0YXR1czogIm9rIiwKICBjb21iaW5lZFN0YXR1c1RleHQ6ICJBbGwgc3lzdGVtcyBvcGVyYXRpb25hbCIsCiAgZGV0YWlsczogWwogICAgewogICAgICBuYW1lOiAiUmVzcG9uc2UgVGltZSIsCiAgICAgIHZhbHVlOiAiNDVtcyAoYXZnKSIsCiAgICAgIHN0YXR1czogIm9rIiwKICAgICAgc3RhdHVzVGV4dDogIldpdGhpbiBub3JtYWwgcmFuZ2UiCiAgICB9LAogICAgewogICAgICBuYW1lOiAiVXB0aW1lIiwKICAgICAgdmFsdWU6ICI5OS45OSUgKDMwIGRheXMpIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiRXhjZWxsZW50IHVwdGltZSIKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJBY3RpdmUgQ29ubmVjdGlvbnMiLAogICAgICB2YWx1ZTogIjEsMjM0IC8gMTAsMDAwIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiTm9ybWFsIGxvYWQiCiAgICB9LAogICAgewogICAgICBuYW1lOiAiU1NMIENlcnRpZmljYXRlIiwKICAgICAgdmFsdWU6ICJWYWxpZCB1bnRpbCAyMDI0LTEyLTMxIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiQ2VydGlmaWNhdGUgdmFsaWQiCiAgICB9CiAgXQp9fQogICAgICAgID4KICAgICAgICA8L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0PgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby10aXRsZSI+RGF0YWJhc2UgQ2x1c3RlciBTdGF0dXM8L2Rpdj4KICAgICAgICA8ZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QKICAgICAgICAgIC5zdGF0dXNPYmplY3Q9JHt7CiAgaWQ6ICIyIiwKICBuYW1lOiAiUG9zdGdyZVNRTCBDbHVzdGVyIiwKICBjb21iaW5lZFN0YXR1czogInBhcnRseV9vayIsCiAgY29tYmluZWRTdGF0dXNUZXh0OiAiTWlub3IgaXNzdWVzIGRldGVjdGVkIiwKICBkZXRhaWxzOiBbCiAgICB7CiAgICAgIG5hbWU6ICJQcmltYXJ5IE5vZGUiLAogICAgICB2YWx1ZTogImRiLXByaW1hcnktMDEgKGhlYWx0aHkpIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiT3BlcmF0aW5nIG5vcm1hbGx5IgogICAgfSwKICAgIHsKICAgICAgbmFtZTogIlJlcGxpY2EgTGFnIiwKICAgICAgdmFsdWU6ICIyLjUgc2Vjb25kcyIsCiAgICAgIHN0YXR1czogInBhcnRseV9vayIsCiAgICAgIHN0YXR1c1RleHQ6ICJTbGlnaHRseSBlbGV2YXRlZCIKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJEaXNrIFVzYWdlIiwKICAgICAgdmFsdWU6ICI3OCUgKDMxMkdCIC8gNDAwR0IpIiwKICAgICAgc3RhdHVzOiAicGFydGx5X29rIiwKICAgICAgc3RhdHVzVGV4dDogIkFwcHJvYWNoaW5nIHRocmVzaG9sZCIKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJDb25uZWN0aW9uIFBvb2wiLAogICAgICB2YWx1ZTogIjg5IC8gMTAwIGNvbm5lY3Rpb25zIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiV2l0aGluIGxpbWl0cyIKICAgIH0KICBdCn19CiAgICAgICAgPgogICAgICAgIDwvZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3Q+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXRpdGxlIj5CdWlsZCBQaXBlbGluZSBTdGF0dXM8L2Rpdj4KICAgICAgICA8ZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QKICAgICAgICAgIC5zdGF0dXNPYmplY3Q9JHt7CiAgaWQ6ICIzIiwKICBuYW1lOiAiQ0kvQ0QgUGlwZWxpbmUiLAogIGNvbWJpbmVkU3RhdHVzOiAibm90X29rIiwKICBjb21iaW5lZFN0YXR1c1RleHQ6ICJCdWlsZCBmYWlsdXJlIiwKICBkZXRhaWxzOiBbCiAgICB7CiAgICAgIG5hbWU6ICJMYXN0IEJ1aWxkIiwKICAgICAgdmFsdWU6ICJCdWlsZCAjMTIzNCAtIEZhaWxlZCIsCiAgICAgIHN0YXR1czogIm5vdF9vayIsCiAgICAgIHN0YXR1c1RleHQ6ICJUZXN0IGZhaWx1cmVzIgogICAgfSwKICAgIHsKICAgICAgbmFtZTogIkZhaWxlZCBUZXN0cyIsCiAgICAgIHZhbHVlOiAiMyB0ZXN0cyBmYWlsZWQ6IGF1dGguc3BlYy50cywgdXNlci5zcGVjLnRzLCBhcGkuc3BlYy50cyIsCiAgICAgIHN0YXR1czogIm5vdF9vayIsCiAgICAgIHN0YXR1c1RleHQ6ICJVbml0IHRlc3QgZmFpbHVyZXMiCiAgICB9LAogICAgewogICAgICBuYW1lOiAiQ29kZSBDb3ZlcmFnZSIsCiAgICAgIHZhbHVlOiAiODIuNSUgKHRhcmdldDogODUlKSIsCiAgICAgIHN0YXR1czogInBhcnRseV9vayIsCiAgICAgIHN0YXR1c1RleHQ6ICJCZWxvdyB0YXJnZXQiCiAgICB9LAogICAgewogICAgICBuYW1lOiAiQnVpbGQgRHVyYXRpb24iLAogICAgICB2YWx1ZTogIjEybSAzNHMiLAogICAgICBzdGF0dXM6ICJvayIsCiAgICAgIHN0YXR1c1RleHQ6ICJOb3JtYWwgZHVyYXRpb24iCiAgICB9CiAgXQp9fQogICAgICAgID4KICAgICAgICA8L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QvZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNDggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczQ5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzRGF0YXZpZXdTdGF0dXNvYmplY3QgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3N0YXR1c09iamVjdF9kZWNvcmF0b3JzOwogIGxldCBfc3RhdHVzT2JqZWN0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdHVzT2JqZWN0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNEYXRhdmlld1N0YXR1c29iamVjdDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9zdGF0dXNPYmplY3RfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTQ4KHRoaXMsIG51bGwsIF9zdGF0dXNPYmplY3RfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RhdHVzT2JqZWN0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzdGF0dXNPYmplY3QiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3RhdHVzT2JqZWN0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdGF0dXNPYmplY3QgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3RhdHVzT2JqZWN0X2luaXRpYWxpemVycywgX3N0YXR1c09iamVjdF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ4KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0RhdGF2aWV3U3RhdHVzb2JqZWN0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzU7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkRhdGEgVmlldyI7CiAgICAjc3RhdHVzT2JqZWN0X2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczQ5KHRoaXMsIF9zdGF0dXNPYmplY3RfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgZ2V0IHN0YXR1c09iamVjdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3N0YXR1c09iamVjdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHN0YXR1c09iamVjdCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc3RhdHVzT2JqZWN0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAubWFpbmJveCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMCBoc2woMCAwJSAwJSAvIDAuMSksIDAgMXB4IDJweCAtMXB4IGhzbCgwIDAlIDAlIC8gMC4xKTsKICAgICAgICBtaW4taGVpZ2h0OiA0OHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA0OHB4IGF1dG8gMTAwcHg7CiAgICAgICAgaGVpZ2h0OiA1NnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAwcHg7CiAgICAgICAgcGFkZGluZzogMHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdCB7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwgImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA2My45JSAvIDAuMikiLCAiaHNsKDAgMCUgNDUuMSUgLyAwLjIpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5jb3B5TWFpbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5jb3B5TWFpbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuY29weU1haW46YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdC5vayB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMikiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdC5ub3Rfb2sgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUgLyAwLjIpIiwgImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdC5wYXJ0bHlfb2sgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjUgOTUlIDUzJSkiLCAiaHNsKDI1IDk1JSA2MyUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUgLyAwLjIpIiwgImhzbCgyNSA5NSUgNjMlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLmRldGFpbCB7CiAgICAgICAgbWluLWhlaWdodDogNjBweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA0OHB4IGF1dG87CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgICBjdXJzb3I6IGNvbnRleHQtbWVudTsKICAgICAgfQoKICAgICAgLmRldGFpbDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCAiaHNsKDAgMCUgNyUpIil9OwogICAgICB9CgogICAgICAuZGV0YWlsOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICB9CgogICAgICAuZGV0YWlsIC5kZXRhaWxzVGV4dCB7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgIH0KCiAgICAgIC5kZXRhaWwgLmRldGFpbHNUZXh0IC5sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAuZGV0YWlsIC5kZXRhaWxzVGV4dCAudmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogJ0ludGVsIE9uZSBNb25vJywgJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXR1c2RvdCAke3RoaXMuc3RhdHVzT2JqZWN0Py5jb21iaW5lZFN0YXR1c30iPjwvZGl2PgogICAgICAgICAgPGgxPiR7dGhpcy5zdGF0dXNPYmplY3Q/Lm5hbWUgfHwgIk5vIHN0YXR1cyBvYmplY3QgYXNzaWduZWQifTwvaDE+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb3B5TWFpbiIgQGNsaWNrPSR7dGhpcy5oYW5kbGVDb3B5QXNKc29ufT5Db3B5IEpTT048L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMuc3RhdHVzT2JqZWN0Py5kZXRhaWxzPy5tYXAoKGRldGFpbEFyZykgPT4gewogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgPGRpdiAKICAgICAgICAgICAgICBjbGFzcz0iZGV0YWlsIgogICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhldmVudCkgPT4gewogICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIkNvcHkgVmFsdWUiLAogICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmNvcHkiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5VG9DbGlwYm9hcmQoZGV0YWlsQXJnLnZhbHVlLCAiVmFsdWUiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiQ29weSBLZXkiLAogICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmtleSIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlUb0NsaXBib2FyZChkZXRhaWxBcmcubmFtZSwgIktleSIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJDb3B5IEtleTpWYWx1ZSIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Y29weS1wbHVzIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29weVRvQ2xpcGJvYXJkKGAke2RldGFpbEFyZy5uYW1lfTogJHtkZXRhaWxBcmcudmFsdWV9YCwgIktleTpWYWx1ZSIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgXSk7CiAgICAgICAgfX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXR1c2RvdCAke2RldGFpbEFyZy5zdGF0dXN9Ij48L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXRhaWxzVGV4dCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+JHtkZXRhaWxBcmcubmFtZX08L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIj4ke2RldGFpbEFyZy52YWx1ZX08L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgfQogICAgYXN5bmMgY29weVRvQ2xpcGJvYXJkKHRleHQ5LCB0eXBlNSA9ICJUZXh0IikgewogICAgICB0cnkgewogICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQ5KTsKICAgICAgICBjb25zb2xlLmxvZyhgJHt0eXBlNX0gY29waWVkIHRvIGNsaXBib2FyZGApOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY29weSAke3R5cGU1fTpgLCBlcnIpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBoYW5kbGVDb3B5QXNKc29uKCkgewogICAgICBpZiAoIXRoaXMuc3RhdHVzT2JqZWN0KQogICAgICAgIHJldHVybjsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXR1c09iamVjdCwgbnVsbCwgMikpOwogICAgICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29weU1haW4iKTsKICAgICAgICBjb25zdCBvcmlnaW5hbFRleHQgPSBidXR0b24udGV4dENvbnRlbnQ7CiAgICAgICAgYnV0dG9uLnRleHRDb250ZW50ID0gIkNvcGllZCEiOwogICAgICAgIGNvbnN0IGlzRGFyayA9ICF0aGlzLmdvQnJpZ2h0OwogICAgICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kID0gaXNEYXJrID8gImhzbCgxNDIuMSA3MC42JSA0NS4zJSAvIDAuMSkiIDogImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMSkiOwogICAgICAgIGJ1dHRvbi5zdHlsZS5ib3JkZXJDb2xvciA9IGlzRGFyayA/ICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIiA6ICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIjsKICAgICAgICBidXR0b24uc3R5bGUuY29sb3IgPSBpc0RhcmsgPyAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIgOiAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSI7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBidXR0b24udGV4dENvbnRlbnQgPSBvcmlnaW5hbFRleHQ7CiAgICAgICAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZCA9ICIiOwogICAgICAgICAgYnV0dG9uLnN0eWxlLmJvcmRlckNvbG9yID0gIiI7CiAgICAgICAgICBidXR0b24uc3R5bGUuY29sb3IgPSAiIjsKICAgICAgICB9LCAxNTAwKTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGNvcHk6IiwgZXJyKTsKICAgICAgfQogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDkodGhpcywgX3N0YXR1c09iamVjdF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczQ5KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzRGF0YXZpZXdTdGF0dXNvYmplY3QyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUvZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlNDkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczUwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV29ya3NwYWNlRmlsZXRyZWUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdvcmtzcGFjZS1maWxldHJlZSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnM7CiAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb290UGF0aF9kZWNvcmF0b3JzOwogIGxldCBfcm9vdFBhdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb290UGF0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRQYXRoX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZFBhdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFBhdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RyZWVEYXRhX2RlY29yYXRvcnM7CiAgbGV0IF90cmVlRGF0YV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RyZWVEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0xvYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX2lzTG9hZGluZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXJyb3JNZXNzYWdlX2RlY29yYXRvcnM7CiAgbGV0IF9lcnJvck1lc3NhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lcnJvck1lc3NhZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1dvcmtzcGFjZUZpbGV0cmVlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfcm9vdFBhdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zZWxlY3RlZFBhdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF90cmVlRGF0YV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNMb2FkaW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9lcnJvck1lc3NhZ2VfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlNDkodGhpcywgbnVsbCwgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImV4ZWN1dGlvbkVudmlyb25tZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJleGVjdXRpb25FbnZpcm9ubWVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5leGVjdXRpb25FbnZpcm9ubWVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZXhlY3V0aW9uRW52aXJvbm1lbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0OSh0aGlzLCBudWxsLCBfcm9vdFBhdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicm9vdFBhdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJvb3RQYXRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJvb3RQYXRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yb290UGF0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yb290UGF0aF9pbml0aWFsaXplcnMsIF9yb290UGF0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ5KHRoaXMsIG51bGwsIF9zZWxlY3RlZFBhdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRQYXRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZFBhdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRQYXRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZFBhdGggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRQYXRoX2luaXRpYWxpemVycywgX3NlbGVjdGVkUGF0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ5KHRoaXMsIG51bGwsIF90cmVlRGF0YV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0cmVlRGF0YSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidHJlZURhdGEiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudHJlZURhdGEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRyZWVEYXRhID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RyZWVEYXRhX2luaXRpYWxpemVycywgX3RyZWVEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDkodGhpcywgbnVsbCwgX2lzTG9hZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0xvYWRpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzTG9hZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0xvYWRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzTG9hZGluZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBfaXNMb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDkodGhpcywgbnVsbCwgX2Vycm9yTWVzc2FnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlcnJvck1lc3NhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVycm9yTWVzc2FnZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lcnJvck1lc3NhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVycm9yTWVzc2FnZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lcnJvck1lc3NhZ2VfaW5pdGlhbGl6ZXJzLCBfZXJyb3JNZXNzYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDkobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzV29ya3NwYWNlRmlsZXRyZWUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgCiAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogMzAwcHg7IGhlaWdodDogNDAwcHg7IHBvc2l0aW9uOiByZWxhdGl2ZTsiPgogICAgICA8ZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWU+PC9kZWVzLXdvcmtzcGFjZS1maWxldHJlZT4KICAgIDwvZGl2PgogIGA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICAjZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycywgbnVsbCk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KCkgewogICAgICByZXR1cm4gdGhpcy4jZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBleGVjdXRpb25FbnZpcm9ubWVudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNyb290UGF0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfcm9vdFBhdGhfaW5pdGlhbGl6ZXJzLCAiLyIpKTsKICAgIGdldCByb290UGF0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Jvb3RQYXRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcm9vdFBhdGgodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Jvb3RQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfcm9vdFBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUwKHRoaXMsIF9zZWxlY3RlZFBhdGhfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHNlbGVjdGVkUGF0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkUGF0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkUGF0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdHJlZURhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUwKHRoaXMsIF9zZWxlY3RlZFBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUwKHRoaXMsIF90cmVlRGF0YV9pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgdHJlZURhdGEoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0cmVlRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRyZWVEYXRhKHZhbHVlMikgewogICAgICB0aGlzLiN0cmVlRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzTG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX3RyZWVEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfaXNMb2FkaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0xvYWRpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc0xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0xvYWRpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzTG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Vycm9yTWVzc2FnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX2Vycm9yTWVzc2FnZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgZXJyb3JNZXNzYWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jZXJyb3JNZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZXJyb3JNZXNzYWdlKHZhbHVlMikgewogICAgICB0aGlzLiNlcnJvck1lc3NhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGV4cGFuZGVkUGF0aHMgPSAoX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfZXJyb3JNZXNzYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7CiAgICBsb2FkVHJlZVN0YXJ0ZWQgPSBmYWxzZTsKICAgIC8vIENsaXBib2FyZCBzdGF0ZSBmb3IgY29weS9wYXN0ZSBvcGVyYXRpb25zCiAgICBjbGlwYm9hcmRQYXRoID0gbnVsbDsKICAgIGNsaXBib2FyZE9wZXJhdGlvbiA9IG51bGw7CiAgICAvLyBGaWxlIHdhdGNoZXIgZm9yIGF1dG8tcmVmcmVzaAogICAgZmlsZVdhdGNoZXIgPSBudWxsOwogICAgcmVmcmVzaERlYm91bmNlVGltZW91dCA9IG51bGw7CiAgICBsYXN0RXhlY3V0aW9uRW52aXJvbm1lbnQgPSBudWxsOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5OCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAudHJlZS1jb250YWluZXIgewogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICB9CgogICAgICAudHJlZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG1hcmdpbjogMXB4IDRweDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXMgZWFzZTsKICAgICAgfQoKICAgICAgLnRyZWUtaXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkzJSkiLCAiaHNsKDAgMCUgMTQlKSIpfTsKICAgICAgfQoKICAgICAgLnRyZWUtaXRlbS5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA5NSUpIiwgImhzbCgyMTAgNTAlIDIwJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNDAlKSIsICJoc2woMjEwIDEwMCUgNzAlKSIpfTsKICAgICAgfQoKICAgICAgLnRyZWUtaXRlbS5zZWxlY3RlZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA5MiUpIiwgImhzbCgyMTAgNTAlIDI1JSkiKX07CiAgICAgIH0KCiAgICAgIC5pbmRlbnQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmV4cGFuZC1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuZXhwYW5kLWljb24uZXhwYW5kZWQgewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAgICAgfQoKICAgICAgLmV4cGFuZC1pY29uLmhpZGRlbiB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuZmlsZS1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA2cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAuZmlsZS1pY29uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmZvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDUgODAlIDQ1JSkiLCAiaHNsKDQ1IDcwJSA1NSUpIil9OwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmZpbGUgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuZmlsZS1pY29uLnR5cGVzY3JpcHQgewogICAgICAgIGNvbG9yOiBoc2woMjExIDYwJSA0OCUpOwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmphdmFzY3JpcHQgewogICAgICAgIGNvbG9yOiBoc2woNTMgOTMlIDU0JSk7CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24uanNvbiB7CiAgICAgICAgY29sb3I6IGhzbCg0NSA4MCUgNTAlKTsKICAgICAgfQoKICAgICAgLmZpbGUtaWNvbi5odG1sIHsKICAgICAgICBjb2xvcjogaHNsKDE0IDc3JSA1MiUpOwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmNzcyB7CiAgICAgICAgY29sb3I6IGhzbCgyMjggNzclIDU5JSk7CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24ubWFya2Rvd24gewogICAgICAgIGNvbG9yOiBoc2woMCAwJSA1MCUpOwogICAgICB9CgogICAgICAuZmlsZS1uYW1lIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgODUlKSIpfTsKICAgICAgfQoKICAgICAgLmxvYWRpbmcgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuZXJyb3IgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiBoc2woMCA3MCUgNTAlKTsKICAgICAgfQoKICAgICAgLmVtcHR5IHsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5maWxldHJlZS10b29sYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgOCUpIil9OwogICAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cywgYmFja2dyb3VuZCAwLjE1czsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzMCUpIiwgImhzbCgwIDAlIDcwJSkiKX07CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjA4KSIsICJoc2woMCAwJSAxMDAlIC8gMC4xKSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5Ij4KICAgICAgICAgIE5vIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBwcm92aWRlZC4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgICAgfQogICAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZyI+CiAgICAgICAgICBMb2FkaW5nIGZpbGVzLi4uCiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuZXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImVycm9yIj4KICAgICAgICAgICR7dGhpcy5lcnJvck1lc3NhZ2V9CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJmaWxldHJlZS10b29sYmFyIj4KICAgICAgICA8c3BhbiBjbGFzcz0idG9vbGJhci10aXRsZSI+RXhwbG9yZXI8L3NwYW4+CiAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1hY3Rpb25zIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYnV0dG9uIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNyZWF0ZU5ld0ZpbGUoIi8iKX0gdGl0bGU9Ik5ldyBGaWxlIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6ZmlsZVBsdXMifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jcmVhdGVOZXdGb2xkZXIoIi8iKX0gdGl0bGU9Ik5ldyBGb2xkZXIiPgogICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpmb2xkZXJQbHVzIn0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLnRyZWVEYXRhLmxlbmd0aCA9PT0gMCA/IGIyYDxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBmaWxlcyBmb3VuZC48L2Rpdj5gIDogYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRyZWUtY29udGFpbmVyIiBAY29udGV4dG1lbnU9JHt0aGlzLmhhbmRsZUVtcHR5U3BhY2VDb250ZXh0TWVudX0+CiAgICAgICAgICAgICAgJHt0aGlzLnJlbmRlclRyZWUodGhpcy50cmVlRGF0YSl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYH0KICAgIGA7CiAgICB9CiAgICByZW5kZXJUcmVlKG5vZGVzKSB7CiAgICAgIHJldHVybiBub2Rlcy5tYXAoKG5vZGUyKSA9PiB0aGlzLnJlbmRlck5vZGUobm9kZTIpKTsKICAgIH0KICAgIHJlbmRlck5vZGUobm9kZTIpIHsKICAgICAgY29uc3QgaXNEaXJlY3RvcnkgPSBub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IjsKICAgICAgY29uc3QgaXNFeHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRQYXRocy5oYXMobm9kZTIucGF0aCk7CiAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBub2RlMi5wYXRoID09PSB0aGlzLnNlbGVjdGVkUGF0aDsKICAgICAgY29uc3QgaWNvbkNsYXNzID0gdGhpcy5nZXRGaWxlSWNvbkNsYXNzKG5vZGUyKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9InRyZWUtaXRlbSAke2lzU2VsZWN0ZWQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgIHN0eWxlPSJwYWRkaW5nLWxlZnQ6ICR7OCArIG5vZGUyLmxldmVsICogMTZ9cHgiCiAgICAgICAgQGNsaWNrPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVJdGVtQ2xpY2soZTExLCBub2RlMil9CiAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVDb250ZXh0TWVudShlMTEsIG5vZGUyKX0KICAgICAgPgogICAgICAgIDxzcGFuIGNsYXNzPSJleHBhbmQtaWNvbiAke2lzRXhwYW5kZWQgPyAiZXhwYW5kZWQiIDogIiJ9ICR7IWlzRGlyZWN0b3J5ID8gImhpZGRlbiIgOiAiIn0iPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Y2hldnJvblJpZ2h0In0gaWNvblNpemU9IjEyIj48L2RlZXMtaWNvbj4KICAgICAgICA8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZpbGUtaWNvbiAke2ljb25DbGFzc30iPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuZ2V0RmlsZUljb24obm9kZTIpfSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iZmlsZS1uYW1lIj4ke25vZGUyLm5hbWV9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgJHtpc0RpcmVjdG9yeSAmJiBpc0V4cGFuZGVkICYmIG5vZGUyLmNoaWxkcmVuID8gdGhpcy5yZW5kZXJUcmVlKG5vZGUyLmNoaWxkcmVuKSA6ICIifQogICAgYDsKICAgIH0KICAgIGdldEZpbGVJY29uKG5vZGUyKSB7CiAgICAgIGlmIChub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IikgewogICAgICAgIHJldHVybiB0aGlzLmV4cGFuZGVkUGF0aHMuaGFzKG5vZGUyLnBhdGgpID8gImx1Y2lkZTpmb2xkZXJPcGVuIiA6ICJsdWNpZGU6Zm9sZGVyIjsKICAgICAgfQogICAgICBjb25zdCBleHQgPSBub2RlMi5uYW1lLnNwbGl0KCIuIikucG9wKCk/LnRvTG93ZXJDYXNlKCk7CiAgICAgIHN3aXRjaCAoZXh0KSB7CiAgICAgICAgY2FzZSAidHMiOgogICAgICAgIGNhc2UgInRzeCI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlQ29kZSI7CiAgICAgICAgY2FzZSAianMiOgogICAgICAgIGNhc2UgImpzeCI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlQ29kZSI7CiAgICAgICAgY2FzZSAianNvbiI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlSnNvbiI7CiAgICAgICAgY2FzZSAiaHRtbCI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlQ29kZSI7CiAgICAgICAgY2FzZSAiY3NzIjoKICAgICAgICBjYXNlICJzY3NzIjoKICAgICAgICBjYXNlICJsZXNzIjoKICAgICAgICAgIHJldHVybiAibHVjaWRlOmZpbGVDb2RlIjsKICAgICAgICBjYXNlICJtZCI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlVGV4dCI7CiAgICAgICAgY2FzZSAicG5nIjoKICAgICAgICBjYXNlICJqcGciOgogICAgICAgIGNhc2UgImpwZWciOgogICAgICAgIGNhc2UgImdpZiI6CiAgICAgICAgY2FzZSAic3ZnIjoKICAgICAgICAgIHJldHVybiAibHVjaWRlOmltYWdlIjsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuICJsdWNpZGU6ZmlsZSI7CiAgICAgIH0KICAgIH0KICAgIGdldEZpbGVJY29uQ2xhc3Mobm9kZTIpIHsKICAgICAgaWYgKG5vZGUyLnR5cGUgPT09ICJkaXJlY3RvcnkiKQogICAgICAgIHJldHVybiAiZm9sZGVyIjsKICAgICAgY29uc3QgZXh0ID0gbm9kZTIubmFtZS5zcGxpdCgiLiIpLnBvcCgpPy50b0xvd2VyQ2FzZSgpOwogICAgICBzd2l0Y2ggKGV4dCkgewogICAgICAgIGNhc2UgInRzIjoKICAgICAgICBjYXNlICJ0c3giOgogICAgICAgICAgcmV0dXJuICJ0eXBlc2NyaXB0IjsKICAgICAgICBjYXNlICJqcyI6CiAgICAgICAgY2FzZSAianN4IjoKICAgICAgICAgIHJldHVybiAiamF2YXNjcmlwdCI7CiAgICAgICAgY2FzZSAianNvbiI6CiAgICAgICAgICByZXR1cm4gImpzb24iOwogICAgICAgIGNhc2UgImh0bWwiOgogICAgICAgICAgcmV0dXJuICJodG1sIjsKICAgICAgICBjYXNlICJjc3MiOgogICAgICAgIGNhc2UgInNjc3MiOgogICAgICAgIGNhc2UgImxlc3MiOgogICAgICAgICAgcmV0dXJuICJjc3MiOwogICAgICAgIGNhc2UgIm1kIjoKICAgICAgICAgIHJldHVybiAibWFya2Rvd24iOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gImZpbGUiOwogICAgICB9CiAgICB9CiAgICBhc3luYyBoYW5kbGVJdGVtQ2xpY2soZTExLCBub2RlMikgewogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGlmIChub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IikgewogICAgICAgIGF3YWl0IHRoaXMudG9nZ2xlRGlyZWN0b3J5KG5vZGUyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNlbGVjdGVkUGF0aCA9IG5vZGUyLnBhdGg7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZmlsZS1zZWxlY3QiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgcGF0aDogbm9kZTIucGF0aCwgbmFtZTogbm9kZTIubmFtZSB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9CiAgICB9CiAgICBhc3luYyB0b2dnbGVEaXJlY3Rvcnkobm9kZTIpIHsKICAgICAgaWYgKHRoaXMuZXhwYW5kZWRQYXRocy5oYXMobm9kZTIucGF0aCkpIHsKICAgICAgICB0aGlzLmV4cGFuZGVkUGF0aHMuZGVsZXRlKG5vZGUyLnBhdGgpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuZXhwYW5kZWRQYXRocy5hZGQobm9kZTIucGF0aCk7CiAgICAgICAgaWYgKCFub2RlMi5jaGlsZHJlbiB8fCBub2RlMi5jaGlsZHJlbi5sZW5ndGggPT09IDApIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZERpcmVjdG9yeUNvbnRlbnRzKG5vZGUyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBhc3luYyBsb2FkRGlyZWN0b3J5Q29udGVudHMobm9kZTIpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgIHJldHVybjsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKG5vZGUyLnBhdGgpOwogICAgICAgIG5vZGUyLmNoaWxkcmVuID0gdGhpcy5zb3J0RW50cmllcyhlbnRyaWVzKS5tYXAoKGVudHJ5KSA9PiAoewogICAgICAgICAgLi4uZW50cnksCiAgICAgICAgICBsZXZlbDogbm9kZTIubGV2ZWwgKyAxLAogICAgICAgICAgZXhwYW5kZWQ6IGZhbHNlLAogICAgICAgICAgY2hpbGRyZW46IGVudHJ5LnR5cGUgPT09ICJkaXJlY3RvcnkiID8gW10gOiB2b2lkIDAKICAgICAgICB9KSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgZGlyZWN0b3J5ICR7bm9kZTIucGF0aH06YCwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBoYW5kbGVDb250ZXh0TWVudShlMTEsIG5vZGUyKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnN0IG1lbnVJdGVtcyA9IFtdOwogICAgICBpZiAobm9kZTIudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICBtZW51SXRlbXMucHVzaCh7CiAgICAgICAgICBuYW1lOiAiTmV3IEZpbGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJmaWxlUGx1cyIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMuY3JlYXRlTmV3RmlsZShub2RlMi5wYXRoKQogICAgICAgIH0sIHsKICAgICAgICAgIG5hbWU6ICJOZXcgRm9sZGVyIiwKICAgICAgICAgIGljb25OYW1lOiAiZm9sZGVyUGx1cyIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMuY3JlYXRlTmV3Rm9sZGVyKG5vZGUyLnBhdGgpCiAgICAgICAgfSwgeyBkaXZpZGVyOiB0cnVlIH0pOwogICAgICB9CiAgICAgIG1lbnVJdGVtcy5wdXNoKHsKICAgICAgICBuYW1lOiAiUmVuYW1lIiwKICAgICAgICBpY29uTmFtZTogInBlbmNpbCIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnJlbmFtZUl0ZW0obm9kZTIpCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAiRHVwbGljYXRlIiwKICAgICAgICBpY29uTmFtZTogImZpbGVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMuZHVwbGljYXRlSXRlbShub2RlMikKICAgICAgfSwgewogICAgICAgIG5hbWU6ICJDb3B5IiwKICAgICAgICBpY29uTmFtZTogImNvcHkiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5jb3B5SXRlbShub2RlMikKICAgICAgfSk7CiAgICAgIGlmIChub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IiAmJiB0aGlzLmNsaXBib2FyZFBhdGgpIHsKICAgICAgICBtZW51SXRlbXMucHVzaCh7CiAgICAgICAgICBuYW1lOiAiUGFzdGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnBhc3RlSXRlbShub2RlMi5wYXRoKQogICAgICAgIH0pOwogICAgICB9CiAgICAgIG1lbnVJdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9LCB7CiAgICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgICAgaWNvbk5hbWU6ICJ0cmFzaDIiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5kZWxldGVJdGVtKG5vZGUyKQogICAgICB9KTsKICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgIH0KICAgIGFzeW5jIGhhbmRsZUVtcHR5U3BhY2VDb250ZXh0TWVudShlMTEpIHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZTExLnRhcmdldDsKICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KCIudHJlZS1pdGVtIikpCiAgICAgICAgcmV0dXJuOwogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb25zdCBtZW51SXRlbXMgPSBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIk5ldyBGaWxlIiwKICAgICAgICAgIGljb25OYW1lOiAiZmlsZVBsdXMiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLmNyZWF0ZU5ld0ZpbGUoIi8iKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIk5ldyBGb2xkZXIiLAogICAgICAgICAgaWNvbk5hbWU6ICJmb2xkZXJQbHVzIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5jcmVhdGVOZXdGb2xkZXIoIi8iKQogICAgICAgIH0KICAgICAgXTsKICAgICAgaWYgKHRoaXMuY2xpcGJvYXJkUGF0aCkgewogICAgICAgIG1lbnVJdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9LCB7CiAgICAgICAgICBuYW1lOiAiUGFzdGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnBhc3RlSXRlbSgiLyIpCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgIH0KICAgIGFzeW5jIHNob3dJbnB1dE1vZGFsKG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlMikgPT4gewogICAgICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgICAgICAgaGVhZGluZzogb3B0aW9ucy5oZWFkaW5nLAogICAgICAgICAgd2lkdGg6ICJzbWFsbCIsCiAgICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7b3B0aW9ucy5sYWJlbH0KICAgICAgICAgICAgLnZhbHVlPSR7b3B0aW9ucy52YWx1ZSB8fCAiIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICBgLAogICAgICAgICAgbWVudU9wdGlvbnM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsUmVmKSA9PiB7CiAgICAgICAgICAgICAgICBhd2FpdCBtb2RhbFJlZi5kZXN0cm95KCk7CiAgICAgICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiBvcHRpb25zLmJ1dHRvbk5hbWUgfHwgIkNyZWF0ZSIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWxSZWYpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRFbDIgPSBtb2RhbFJlZi5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubW9kYWwgLmNvbnRlbnQiKTsKICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IGNvbnRlbnRFbDI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dCIpOwogICAgICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0RWxlbWVudD8udmFsdWU/LnRyaW0oKSB8fCAiIjsKICAgICAgICAgICAgICAgIGF3YWl0IG1vZGFsUmVmLmRlc3Ryb3koKTsKICAgICAgICAgICAgICAgIHJlc29sdmUyKGlucHV0VmFsdWUgfHwgbnVsbCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSk7CiAgICAgICAgYXdhaXQgbW9kYWwudXBkYXRlQ29tcGxldGU7CiAgICAgICAgY29uc3QgY29udGVudEVsID0gbW9kYWwuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLm1vZGFsIC5jb250ZW50Iik7CiAgICAgICAgaWYgKGNvbnRlbnRFbCkgewogICAgICAgICAgY29uc3QgaW5wdXRFbGVtZW50ID0gY29udGVudEVsLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dCIpOwogICAgICAgICAgaWYgKGlucHV0RWxlbWVudCkgewogICAgICAgICAgICBhd2FpdCBpbnB1dEVsZW1lbnQudXBkYXRlQ29tcGxldGU7CiAgICAgICAgICAgIGlucHV0RWxlbWVudC5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBjcmVhdGVOZXdGaWxlKHBhcmVudFBhdGgpIHsKICAgICAgY29uc3QgZmlsZU5hbWUgPSBhd2FpdCB0aGlzLnNob3dJbnB1dE1vZGFsKHsKICAgICAgICBoZWFkaW5nOiAiTmV3IEZpbGUiLAogICAgICAgIGxhYmVsOiAiRmlsZSBuYW1lIgogICAgICB9KTsKICAgICAgaWYgKCFmaWxlTmFtZSB8fCAhdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXJlbnRQYXRoID09PSAiLyIgPyBgLyR7ZmlsZU5hbWV9YCA6IGAke3BhcmVudFBhdGh9LyR7ZmlsZU5hbWV9YDsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShuZXdQYXRoLCAiIik7CiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZmlsZS1jcmVhdGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IHBhdGg6IG5ld1BhdGggfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGZpbGU6IiwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBjcmVhdGVOZXdGb2xkZXIocGFyZW50UGF0aCkgewogICAgICBjb25zdCBmb2xkZXJOYW1lID0gYXdhaXQgdGhpcy5zaG93SW5wdXRNb2RhbCh7CiAgICAgICAgaGVhZGluZzogIk5ldyBGb2xkZXIiLAogICAgICAgIGxhYmVsOiAiRm9sZGVyIG5hbWUiCiAgICAgIH0pOwogICAgICBpZiAoIWZvbGRlck5hbWUgfHwgIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBuZXdQYXRoID0gcGFyZW50UGF0aCA9PT0gIi8iID8gYC8ke2ZvbGRlck5hbWV9YCA6IGAke3BhcmVudFBhdGh9LyR7Zm9sZGVyTmFtZX1gOwogICAgICB0cnkgewogICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQubWtkaXIobmV3UGF0aCk7CiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZm9sZGVyLWNyZWF0ZWQiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgcGF0aDogbmV3UGF0aCB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgZm9sZGVyOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZGVsZXRlSXRlbShub2RlMikgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBjb25maXJtZWQgPSBjb25maXJtKGBEZWxldGUgJHtub2RlMi5uYW1lfT9gKTsKICAgICAgaWYgKCFjb25maXJtZWQpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucm0obm9kZTIucGF0aCwgeyByZWN1cnNpdmU6IG5vZGUyLnR5cGUgPT09ICJkaXJlY3RvcnkiIH0pOwogICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpOwogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIml0ZW0tZGVsZXRlZCIsIHsKICAgICAgICAgIGRldGFpbDogeyBwYXRoOiBub2RlMi5wYXRoLCB0eXBlOiBub2RlMi50eXBlIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGRlbGV0ZSBpdGVtOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBSZW5hbWUgYSBmaWxlIG9yIGZvbGRlcgogICAgICovCiAgICBhc3luYyByZW5hbWVJdGVtKG5vZGUyKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5ld05hbWUgPSBhd2FpdCB0aGlzLnNob3dJbnB1dE1vZGFsKHsKICAgICAgICBoZWFkaW5nOiAiUmVuYW1lIiwKICAgICAgICBsYWJlbDogIk5ldyBuYW1lIiwKICAgICAgICB2YWx1ZTogbm9kZTIubmFtZSwKICAgICAgICBidXR0b25OYW1lOiAiUmVuYW1lIgogICAgICB9KTsKICAgICAgaWYgKCFuZXdOYW1lIHx8IG5ld05hbWUgPT09IG5vZGUyLm5hbWUpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBwYXJlbnRQYXRoID0gbm9kZTIucGF0aC5zdWJzdHJpbmcoMCwgbm9kZTIucGF0aC5sYXN0SW5kZXhPZigiLyIpKSB8fCAiLyI7CiAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXJlbnRQYXRoID09PSAiLyIgPyBgLyR7bmV3TmFtZX1gIDogYCR7cGFyZW50UGF0aH0vJHtuZXdOYW1lfWA7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKG5vZGUyLnR5cGUgPT09ICJmaWxlIikgewogICAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKG5vZGUyLnBhdGgpOwogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUobmV3UGF0aCwgY29udGVudDMpOwogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5ybShub2RlMi5wYXRoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXdhaXQgdGhpcy5jb3B5RGlyZWN0b3J5Q29udGVudHMobm9kZTIucGF0aCwgbmV3UGF0aCk7CiAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJtKG5vZGUyLnBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pOwogICAgICAgIH0KICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJpdGVtLXJlbmFtZWQiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgb2xkUGF0aDogbm9kZTIucGF0aCwgbmV3UGF0aCwgdHlwZTogbm9kZTIudHlwZSB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byByZW5hbWUgaXRlbToiLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogRHVwbGljYXRlIGEgZmlsZSBvciBmb2xkZXIKICAgICAqLwogICAgYXN5bmMgZHVwbGljYXRlSXRlbShub2RlMikgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBwYXJlbnRQYXRoID0gbm9kZTIucGF0aC5zdWJzdHJpbmcoMCwgbm9kZTIucGF0aC5sYXN0SW5kZXhPZigiLyIpKSB8fCAiLyI7CiAgICAgIGxldCBuZXdOYW1lOwogICAgICBpZiAobm9kZTIudHlwZSA9PT0gImZpbGUiKSB7CiAgICAgICAgY29uc3QgbGFzdERvdCA9IG5vZGUyLm5hbWUubGFzdEluZGV4T2YoIi4iKTsKICAgICAgICBpZiAobGFzdERvdCA+IDApIHsKICAgICAgICAgIGNvbnN0IGJhc2VOYW1lID0gbm9kZTIubmFtZS5zdWJzdHJpbmcoMCwgbGFzdERvdCk7CiAgICAgICAgICBjb25zdCBleHQgPSBub2RlMi5uYW1lLnN1YnN0cmluZyhsYXN0RG90KTsKICAgICAgICAgIG5ld05hbWUgPSBgJHtiYXNlTmFtZX1fY29weSR7ZXh0fWA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG5ld05hbWUgPSBgJHtub2RlMi5uYW1lfV9jb3B5YDsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmV3TmFtZSA9IGAke25vZGUyLm5hbWV9X2NvcHlgOwogICAgICB9CiAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXJlbnRQYXRoID09PSAiLyIgPyBgLyR7bmV3TmFtZX1gIDogYCR7cGFyZW50UGF0aH0vJHtuZXdOYW1lfWA7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKG5vZGUyLnR5cGUgPT09ICJmaWxlIikgewogICAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKG5vZGUyLnBhdGgpOwogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUobmV3UGF0aCwgY29udGVudDMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlEaXJlY3RvcnlDb250ZW50cyhub2RlMi5wYXRoLCBuZXdQYXRoKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiaXRlbS1kdXBsaWNhdGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IHNvdXJjZVBhdGg6IG5vZGUyLnBhdGgsIG5ld1BhdGgsIHR5cGU6IG5vZGUyLnR5cGUgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gZHVwbGljYXRlIGl0ZW06IiwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIENvcHkgaXRlbSBwYXRoIHRvIGNsaXBib2FyZAogICAgICovCiAgICBhc3luYyBjb3B5SXRlbShub2RlMikgewogICAgICB0aGlzLmNsaXBib2FyZFBhdGggPSBub2RlMi5wYXRoOwogICAgICB0aGlzLmNsaXBib2FyZE9wZXJhdGlvbiA9ICJjb3B5IjsKICAgIH0KICAgIC8qKgogICAgICogUGFzdGUgY29waWVkIGl0ZW0gdG8gdGFyZ2V0IGRpcmVjdG9yeQogICAgICovCiAgICBhc3luYyBwYXN0ZUl0ZW0odGFyZ2V0UGF0aCkgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQgfHwgIXRoaXMuY2xpcGJvYXJkUGF0aCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNsaXBib2FyZFBhdGguc3BsaXQoIi8iKS5wb3AoKSB8fCAicGFzdGVkIjsKICAgICAgY29uc3QgbmV3UGF0aCA9IHRhcmdldFBhdGggPT09ICIvIiA/IGAvJHtuYW1lfWAgOiBgJHt0YXJnZXRQYXRofS8ke25hbWV9YDsKICAgICAgdHJ5IHsKICAgICAgICBpZiAoIWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKHRoaXMuY2xpcGJvYXJkUGF0aCkpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlNvdXJjZSBmaWxlIG5vIGxvbmdlciBleGlzdHMiKTsKICAgICAgICAgIHRoaXMuY2xpcGJvYXJkUGF0aCA9IG51bGw7CiAgICAgICAgICB0aGlzLmNsaXBib2FyZE9wZXJhdGlvbiA9IG51bGw7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUodGhpcy5jbGlwYm9hcmRQYXRoKTsKICAgICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKG5ld1BhdGgsIGNvbnRlbnQzKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIGF3YWl0IHRoaXMuY29weURpcmVjdG9yeUNvbnRlbnRzKHRoaXMuY2xpcGJvYXJkUGF0aCwgbmV3UGF0aCk7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpOwogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIml0ZW0tcGFzdGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IHNvdXJjZVBhdGg6IHRoaXMuY2xpcGJvYXJkUGF0aCwgdGFyZ2V0UGF0aDogbmV3UGF0aCB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICAgIHRoaXMuY2xpcGJvYXJkUGF0aCA9IG51bGw7CiAgICAgICAgdGhpcy5jbGlwYm9hcmRPcGVyYXRpb24gPSBudWxsOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBwYXN0ZSBpdGVtOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBSZWN1cnNpdmVseSBjb3B5IGRpcmVjdG9yeSBjb250ZW50cyB0byBhIG5ldyBwYXRoCiAgICAgKi8KICAgIGFzeW5jIGNvcHlEaXJlY3RvcnlDb250ZW50cyhzb3VyY2VQYXRoLCBkZXN0UGF0aCkgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50Lm1rZGlyKGRlc3RQYXRoKTsKICAgICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZERpcihzb3VyY2VQYXRoKTsKICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICAgICAgY29uc3Qgc3JjRW50cnlQYXRoID0gc291cmNlUGF0aCA9PT0gIi8iID8gYC8ke2VudHJ5Lm5hbWV9YCA6IGAke3NvdXJjZVBhdGh9LyR7ZW50cnkubmFtZX1gOwogICAgICAgIGNvbnN0IGRlc3RFbnRyeVBhdGggPSBkZXN0UGF0aCA9PT0gIi8iID8gYC8ke2VudHJ5Lm5hbWV9YCA6IGAke2Rlc3RQYXRofS8ke2VudHJ5Lm5hbWV9YDsKICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuY29weURpcmVjdG9yeUNvbnRlbnRzKHNyY0VudHJ5UGF0aCwgZGVzdEVudHJ5UGF0aCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGNvbnRlbnQzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShzcmNFbnRyeVBhdGgpOwogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoZGVzdEVudHJ5UGF0aCwgY29udGVudDMpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBhd2FpdCB0aGlzLmxvYWRUcmVlKCk7CiAgICB9CiAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImV4ZWN1dGlvbkVudmlyb25tZW50IikpIHsKICAgICAgICBpZiAodGhpcy5sYXN0RXhlY3V0aW9uRW52aXJvbm1lbnQgIT09IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpIHsKICAgICAgICAgIHRoaXMuc3RvcEZpbGVXYXRjaGVyKCk7CiAgICAgICAgICB0aGlzLmxhc3RFeGVjdXRpb25FbnZpcm9ubWVudCA9IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQ7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRUcmVlKCk7CiAgICAgICAgICB0aGlzLnN0YXJ0RmlsZVdhdGNoZXIoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB0aGlzLnN0b3BGaWxlV2F0Y2hlcigpOwogICAgICBpZiAodGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0KSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVmcmVzaERlYm91bmNlVGltZW91dCk7CiAgICAgICAgdGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0ID0gbnVsbDsKICAgICAgfQogICAgfQogICAgc3RhcnRGaWxlV2F0Y2hlcigpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50IHx8IHRoaXMuZmlsZVdhdGNoZXIpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIHRoaXMuZmlsZVdhdGNoZXIgPSB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndhdGNoKCIvIiwgKF9ldmVudCwgX2ZpbGVuYW1lKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0KSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hEZWJvdW5jZVRpbWVvdXQpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpOwogICAgICAgICAgfSwgMzAwKTsKICAgICAgICB9LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLndhcm4oIkZpbGUgd2F0Y2hpbmcgbm90IHN1cHBvcnRlZDoiLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICAgIHN0b3BGaWxlV2F0Y2hlcigpIHsKICAgICAgaWYgKHRoaXMuZmlsZVdhdGNoZXIpIHsKICAgICAgICB0aGlzLmZpbGVXYXRjaGVyLnN0b3AoKTsKICAgICAgICB0aGlzLmZpbGVXYXRjaGVyID0gbnVsbDsKICAgICAgfQogICAgfQogICAgYXN5bmMgbG9hZFRyZWUoKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGlmICh0aGlzLmxvYWRUcmVlU3RhcnRlZCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMubG9hZFRyZWVTdGFydGVkID0gdHJ1ZTsKICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlOwogICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICIiOwogICAgICB0cnkgewogICAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkeSkgewogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5pbml0KCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWREaXIodGhpcy5yb290UGF0aCk7CiAgICAgICAgdGhpcy50cmVlRGF0YSA9IHRoaXMuc29ydEVudHJpZXMoZW50cmllcykubWFwKChlbnRyeSkgPT4gKHsKICAgICAgICAgIC4uLmVudHJ5LAogICAgICAgICAgbGV2ZWw6IDAsCiAgICAgICAgICBleHBhbmRlZDogZmFsc2UsCiAgICAgICAgICBjaGlsZHJlbjogZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIgPyBbXSA6IHZvaWQgMAogICAgICAgIH0pKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGBGYWlsZWQgdG8gbG9hZCBmaWxlczogJHtlcnJvcn1gOwogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIGZpbGUgdHJlZToiLCBlcnJvcik7CiAgICAgICAgdGhpcy5sb2FkVHJlZVN0YXJ0ZWQgPSBmYWxzZTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBzb3J0RW50cmllcyhlbnRyaWVzKSB7CiAgICAgIHJldHVybiBlbnRyaWVzLnNvcnQoKGE1LCBiNSkgPT4gewogICAgICAgIGlmIChhNS50eXBlICE9PSBiNS50eXBlKSB7CiAgICAgICAgICByZXR1cm4gYTUudHlwZSA9PT0gImRpcmVjdG9yeSIgPyAtMSA6IDE7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhNS5uYW1lLmxvY2FsZUNvbXBhcmUoYjUubmFtZSk7CiAgICAgIH0pOwogICAgfQogICAgYXN5bmMgcmVmcmVzaCgpIHsKICAgICAgdGhpcy5leHBhbmRlZFBhdGhzLmNsZWFyKCk7CiAgICAgIHRoaXMubG9hZFRyZWVTdGFydGVkID0gZmFsc2U7CiAgICAgIGF3YWl0IHRoaXMubG9hZFRyZWUoKTsKICAgIH0KICAgIHNlbGVjdEZpbGUocGF0aDIpIHsKICAgICAgdGhpcy5zZWxlY3RlZFBhdGggPSBwYXRoMjsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXb3Jrc3BhY2VGaWxldHJlZTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3L2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsLXByZXZpZXcuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwppbml0X3NlcnZpY2VzKCk7CnZhciBfX2VzRGVjb3JhdGU1MiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNTMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNXb3Jrc3BhY2VUZXJtaW5hbFByZXZpZXcgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfY29tbWFuZF9kZWNvcmF0b3JzOwogIGxldCBfY29tbWFuZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xpbmVzX2RlY29yYXRvcnM7CiAgbGV0IF9saW5lc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xpbmVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNXb3Jrc3BhY2VUZXJtaW5hbFByZXZpZXcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfY29tbWFuZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2xpbmVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTUyKHRoaXMsIG51bGwsIF9jb21tYW5kX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbW1hbmQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbW1hbmQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29tbWFuZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29tbWFuZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb21tYW5kX2luaXRpYWxpemVycywgX2NvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Mih0aGlzLCBudWxsLCBfbGluZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGluZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxpbmVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxpbmVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5saW5lcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9saW5lc19pbml0aWFsaXplcnMsIF9saW5lc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTUyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1dvcmtzcGFjZVRlcm1pbmFsUHJldmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmAKICAgIDxkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3CiAgICAgIC5jb21tYW5kPSR7InBucG0gaW5zdGFsbCJ9CiAgICAgIC5saW5lcz0ke1sKICAgICAgIlBhY2thZ2VzOiArNDIiLAogICAgICAiUHJvZ3Jlc3M6IHJlc29sdmVkIDE0MiwgcmV1c2VkIDE0MCwgZG93bmxvYWRlZCAyLCBhZGRlZCA0MiwgZG9uZSIsCiAgICAgICIiLAogICAgICAiZGVwZW5kZW5jaWVzOiIsCiAgICAgICIrIEBwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZSA0LjIuMyIsCiAgICAgICIrIHR5cGVzY3JpcHQgNS4zLjMiLAogICAgICAiIiwKICAgICAgIkRvbmUgaW4gMi4zcyIKICAgIF19CiAgICA+PC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3PgogIGA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICAjY29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM1Myh0aGlzLCBfY29tbWFuZF9pbml0aWFsaXplcnMsICIiKTsKICAgIC8qKgogICAgICogVGhlIGNvbW1hbmQgYmVpbmcgZGlzcGxheWVkIChzaG93biBpbiBoZWFkZXIpCiAgICAgKi8KICAgIGdldCBjb21tYW5kKCkgewogICAgICByZXR1cm4gdGhpcy4jY29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbW1hbmQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsaW5lc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTModGhpcywgX2NvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUzKHRoaXMsIF9saW5lc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAvKioKICAgICAqIE91dHB1dCBsaW5lcyB0byBkaXNwbGF5CiAgICAgKi8KICAgIGdldCBsaW5lcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xpbmVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbGluZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI2xpbmVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICB0ZXJtaW5hbCA9IChfX3J1bkluaXRpYWxpemVyczUzKHRoaXMsIF9saW5lc19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgZml0QWRkb24gPSBudWxsOwogICAgbGFzdExpbmVDb3VudCA9IDA7CiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7CiAgICB0ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXByZXZpZXcgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAudGVybWluYWwtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgMTAlKSIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1oZWFkZXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDUwJSkiKX07CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1oZWFkZXItY29tbWFuZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRhaW5lciB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICB9CgogICAgICAjeHRlcm0tY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgICAgbGVmdDogOHB4OwogICAgICAgIHJpZ2h0OiA4cHg7CiAgICAgICAgYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC8qIHh0ZXJtLmpzIHN0eWxlcyAqLwogICAgICAueHRlcm0gewogICAgICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2xpZ2EnIDA7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAueHRlcm0uZm9jdXMsCiAgICAgIC54dGVybTpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1oZWxwZXJzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHotaW5kZXg6IDU7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0taGVscGVyLXRleHRhcmVhIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgbGVmdDogLTk5OTllbTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIHotaW5kZXg6IC01OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC54dGVybSAuY29tcG9zaXRpb24tdmlldyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMzMzMiLCAiI2ZmZmZmZiIpfTsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgIH0KCiAgICAgIC54dGVybSAuY29tcG9zaXRpb24tdmlldy5hY3RpdmUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXZpZXdwb3J0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JlZW4gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JlZW4gY2FudmFzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tc2Nyb2xsLWFyZWEgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnh0ZXJtLWNoYXItbWVhc3VyZS1lbGVtZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogLTk5OTllbTsKICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAueHRlcm0gewogICAgICAgIGN1cnNvcjogdGV4dDsKICAgICAgfQoKICAgICAgLnh0ZXJtLmVuYWJsZS1tb3VzZS1ldmVudHMgewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgLnh0ZXJtLnh0ZXJtLWN1cnNvci1wb2ludGVyIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC54dGVybS5jb2x1bW4tc2VsZWN0LmZvY3VzIHsKICAgICAgICBjdXJzb3I6IGNyb3NzaGFpcjsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1hY2Nlc3NpYmlsaXR5LAogICAgICAueHRlcm0gLnh0ZXJtLW1lc3NhZ2UgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgICAgY29sb3I6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAueHRlcm0gLmxpdmUtcmVnaW9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogLTk5OTlweDsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC54dGVybS1kaW0gewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLnh0ZXJtLXVuZGVybGluZSB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIC8qIEN1c3RvbSBzY3JvbGxiYXIgZm9yIHh0ZXJtIHZpZXdwb3J0ICovCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXZpZXdwb3J0Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgOCUpIil9OwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXZpZXdwb3J0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDgwJSkiLCAiaHNsKDAgMCUgMjUlKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzAlKSIsICJoc2woMCAwJSAzNSUpIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLXByZXZpZXciPgogICAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLWhlYWRlciI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybWluYWwtaGVhZGVyLWljb24iPiQ8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybWluYWwtaGVhZGVyLWNvbW1hbmQiPiR7dGhpcy5jb21tYW5kIHx8ICJXYWl0aW5nLi4uIn08L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgaWQ9Inh0ZXJtLWNvbnRhaW5lciI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIC8qKgogICAgICogR2V0IHRlcm1pbmFsIHRoZW1lIGNvbG9ycyBiYXNlZCBvbiBicmlnaHQvZGFyayBtb2RlCiAgICAgKi8KICAgIGdldFRlcm1pbmFsVGhlbWUoaXNCcmlnaHQpIHsKICAgICAgcmV0dXJuIGlzQnJpZ2h0ID8gewogICAgICAgIGJhY2tncm91bmQ6ICIjZmZmZmZmIiwKICAgICAgICBmb3JlZ3JvdW5kOiAiIzMzMzMzMyIsCiAgICAgICAgY3Vyc29yOiAiIzMzMzMzMyIsCiAgICAgICAgY3Vyc29yQWNjZW50OiAiI2ZmZmZmZiIsCiAgICAgICAgc2VsZWN0aW9uQmFja2dyb3VuZDogInJnYmEoMCwgMCwgMCwgMC4yKSIKICAgICAgfSA6IHsKICAgICAgICBiYWNrZ3JvdW5kOiAiIzAwMDAwMCIsCiAgICAgICAgZm9yZWdyb3VuZDogIiNjY2NjY2MiLAogICAgICAgIGN1cnNvcjogIiNjY2NjY2MiLAogICAgICAgIGN1cnNvckFjY2VudDogIiMwMDAwMDAiLAogICAgICAgIHNlbGVjdGlvbkJhY2tncm91bmQ6ICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikiCiAgICAgIH07CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LmdldEVsZW1lbnRCeUlkKCJ4dGVybS1jb250YWluZXIiKTsKICAgICAgaWYgKCFjb250YWluZXIpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBkb210b29sc0luc3RhbmNlID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGNvbnN0IGlzQnJpZ2h0ID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIuZ29CcmlnaHRCb29sZWFuOwogICAgICBjb25zdCBsaWJMb2FkZXIgPSBEZWVzU2VydmljZUxpYkxvYWRlci5nZXRJbnN0YW5jZSgpOwogICAgICBjb25zdCBbeHRlcm1CdW5kbGUsIGZpdEFkZG9uQnVuZGxlXSA9IGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgICBsaWJMb2FkZXIubG9hZFh0ZXJtKCksCiAgICAgICAgbGliTG9hZGVyLmxvYWRYdGVybUZpdEFkZG9uKCkKICAgICAgXSk7CiAgICAgIHRoaXMudGVybWluYWwgPSBuZXcgeHRlcm1CdW5kbGUuVGVybWluYWwoewogICAgICAgIGNvbnZlcnRFb2w6IHRydWUsCiAgICAgICAgY3Vyc29yQmxpbms6IGZhbHNlLAogICAgICAgIGRpc2FibGVTdGRpbjogdHJ1ZSwKICAgICAgICBmb250U2l6ZTogMTIsCiAgICAgICAgZm9udEZhbWlseTogIidTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2UiLAogICAgICAgIHRoZW1lOiB0aGlzLmdldFRlcm1pbmFsVGhlbWUoaXNCcmlnaHQpLAogICAgICAgIHNjcm9sbGJhY2s6IDFlMwogICAgICB9KTsKICAgICAgdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZ29CcmlnaHQpID0+IHsKICAgICAgICBpZiAodGhpcy50ZXJtaW5hbCkgewogICAgICAgICAgdGhpcy50ZXJtaW5hbC5vcHRpb25zLnRoZW1lID0gdGhpcy5nZXRUZXJtaW5hbFRoZW1lKGdvQnJpZ2h0KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLmZpdEFkZG9uID0gbmV3IGZpdEFkZG9uQnVuZGxlLkZpdEFkZG9uKCk7CiAgICAgIHRoaXMudGVybWluYWwubG9hZEFkZG9uKHRoaXMuZml0QWRkb24pOwogICAgICB0aGlzLnRlcm1pbmFsLm9wZW4oY29udGFpbmVyKTsKICAgICAgdGhpcy5maXRBZGRvbi5maXQoKTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7CiAgICAgICAgaWYgKHRoaXMuZml0QWRkb24pIHsKICAgICAgICAgIHRoaXMuZml0QWRkb24uZml0KCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcik7CiAgICAgIHRoaXMud3JpdGVOZXdMaW5lcygpOwogICAgfQogICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygibGluZXMiKSkgewogICAgICAgIHRoaXMud3JpdGVOZXdMaW5lcygpOwogICAgICB9CiAgICB9CiAgICB3cml0ZU5ld0xpbmVzKCkgewogICAgICBpZiAoIXRoaXMudGVybWluYWwpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBuZXdMaW5lcyA9IHRoaXMubGluZXMuc2xpY2UodGhpcy5sYXN0TGluZUNvdW50KTsKICAgICAgZm9yIChjb25zdCBsaW5lIG9mIG5ld0xpbmVzKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC53cml0ZWxuKGxpbmUpOwogICAgICB9CiAgICAgIHRoaXMubGFzdExpbmVDb3VudCA9IHRoaXMubGluZXMubGVuZ3RoOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKSB7CiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbikgewogICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMudGVybWluYWwpIHsKICAgICAgICB0aGlzLnRlcm1pbmFsLmRpc3Bvc2UoKTsKICAgICAgICB0aGlzLnRlcm1pbmFsID0gbnVsbDsKICAgICAgfQogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgfQogICAgLyoqCiAgICAgKiBBZGQgYSBuZXcgbGluZSB0byB0aGUgb3V0cHV0CiAgICAgKi8KICAgIGFkZExpbmUobGluZSkgewogICAgICB0aGlzLmxpbmVzID0gWy4uLnRoaXMubGluZXMsIGxpbmVdOwogICAgfQogICAgLyoqCiAgICAgKiBDbGVhciBhbGwgb3V0cHV0IGxpbmVzCiAgICAgKi8KICAgIGNsZWFyKCkgewogICAgICB0aGlzLmxpbmVzID0gW107CiAgICAgIHRoaXMubGFzdExpbmVDb3VudCA9IDA7CiAgICAgIGlmICh0aGlzLnRlcm1pbmFsKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC5jbGVhcigpOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczUzKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlVGVybWluYWxQcmV2aWV3MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLWJvdHRvbWJhci9kZWVzLXdvcmtzcGFjZS1ib3R0b21iYXIuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlNTMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczU0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV29ya3NwYWNlQm90dG9tYmFyID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13b3Jrc3BhY2UtYm90dG9tYmFyIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9yczsKICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NjcmlwdHNfZGVjb3JhdG9yczsKICBsZXQgX3NjcmlwdHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zY3JpcHRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wYWNrYWdlU3RhdHVzX2RlY29yYXRvcnM7CiAgbGV0IF9wYWNrYWdlU3RhdHVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGFja2FnZVN0YXR1c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0ZGF0ZWRQYWNrYWdlc19kZWNvcmF0b3JzOwogIGxldCBfb3V0ZGF0ZWRQYWNrYWdlc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dGRhdGVkUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzQ2hlY2tpbmdQYWNrYWdlc19kZWNvcmF0b3JzOwogIGxldCBfaXNDaGVja2luZ1BhY2thZ2VzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNDaGVja2luZ1BhY2thZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNXb3Jrc3BhY2VCb3R0b21iYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9zY3JpcHRzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9wYWNrYWdlU3RhdHVzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9vdXRkYXRlZFBhY2thZ2VzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc0NoZWNraW5nUGFja2FnZXNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlNTModGhpcywgbnVsbCwgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImV4ZWN1dGlvbkVudmlyb25tZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJleGVjdXRpb25FbnZpcm9ubWVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5leGVjdXRpb25FbnZpcm9ubWVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZXhlY3V0aW9uRW52aXJvbm1lbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Myh0aGlzLCBudWxsLCBfc2NyaXB0c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzY3JpcHRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzY3JpcHRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNjcmlwdHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNjcmlwdHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2NyaXB0c19pbml0aWFsaXplcnMsIF9zY3JpcHRzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTModGhpcywgbnVsbCwgX3BhY2thZ2VTdGF0dXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicGFja2FnZVN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGFja2FnZVN0YXR1cyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wYWNrYWdlU3RhdHVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wYWNrYWdlU3RhdHVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BhY2thZ2VTdGF0dXNfaW5pdGlhbGl6ZXJzLCBfcGFja2FnZVN0YXR1c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTUzKHRoaXMsIG51bGwsIF9vdXRkYXRlZFBhY2thZ2VzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm91dGRhdGVkUGFja2FnZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm91dGRhdGVkUGFja2FnZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3V0ZGF0ZWRQYWNrYWdlcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3V0ZGF0ZWRQYWNrYWdlcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vdXRkYXRlZFBhY2thZ2VzX2luaXRpYWxpemVycywgX291dGRhdGVkUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Myh0aGlzLCBudWxsLCBfaXNDaGVja2luZ1BhY2thZ2VzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzQ2hlY2tpbmdQYWNrYWdlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNDaGVja2luZ1BhY2thZ2VzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzQ2hlY2tpbmdQYWNrYWdlcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNDaGVja2luZ1BhY2thZ2VzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzQ2hlY2tpbmdQYWNrYWdlc19pbml0aWFsaXplcnMsIF9pc0NoZWNraW5nUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1MyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXb3Jrc3BhY2VCb3R0b21iYXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgICNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM1NCh0aGlzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBudWxsKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgZXhlY3V0aW9uRW52aXJvbm1lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KHZhbHVlMikgewogICAgICB0aGlzLiNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NjcmlwdHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTQodGhpcywgX3NjcmlwdHNfaW5pdGlhbGl6ZXJzLCB7fSkpOwogICAgLy8gU2NyaXB0IHJ1bm5lciBzdGF0ZQogICAgZ2V0IHNjcmlwdHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzY3JpcHRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2NyaXB0cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2NyaXB0c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3BhY2thZ2VTdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9zY3JpcHRzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1NCh0aGlzLCBfcGFja2FnZVN0YXR1c19pbml0aWFsaXplcnMsICJpZGxlIikpOwogICAgLy8gUGFja2FnZSBjaGVja2VyIHN0YXRlCiAgICBnZXQgcGFja2FnZVN0YXR1cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BhY2thZ2VTdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwYWNrYWdlU3RhdHVzKHZhbHVlMikgewogICAgICB0aGlzLiNwYWNrYWdlU3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjb3V0ZGF0ZWRQYWNrYWdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTQodGhpcywgX3BhY2thZ2VTdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9vdXRkYXRlZFBhY2thZ2VzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBvdXRkYXRlZFBhY2thZ2VzKCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0ZGF0ZWRQYWNrYWdlc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG91dGRhdGVkUGFja2FnZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI291dGRhdGVkUGFja2FnZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0NoZWNraW5nUGFja2FnZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9vdXRkYXRlZFBhY2thZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1NCh0aGlzLCBfaXNDaGVja2luZ1BhY2thZ2VzX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0NoZWNraW5nUGFja2FnZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc0NoZWNraW5nUGFja2FnZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0NoZWNraW5nUGFja2FnZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzQ2hlY2tpbmdQYWNrYWdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gVHJhY2sgaWYgd2UgaGF2ZSBhIHBlbmRpbmcgcGFja2FnZSB1cGRhdGUgdGhhdCBzaG91bGQgdHJpZ2dlciByZWZyZXNoCiAgICBwZW5kaW5nUGFja2FnZVVwZGF0ZSA9IChfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9pc0NoZWNraW5nUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMpLCBmYWxzZSk7CiAgICAvLyBCb3VuZCBoYW5kbGVyIGZvciBwcm9jZXNzLWNvbXBsZXRlIGV2ZW50cwogICAgaGFuZGxlUHJvY2Vzc0NvbXBsZXRlID0gKGUxMSkgPT4gewogICAgICBpZiAodGhpcy5wZW5kaW5nUGFja2FnZVVwZGF0ZSkgewogICAgICAgIHRoaXMucGVuZGluZ1BhY2thZ2VVcGRhdGUgPSBmYWxzZTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2hlY2tQYWNrYWdlcygpLCA1MDApOwogICAgICB9CiAgICB9OwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5ib3R0b20tYmFyIHsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICAgIGdhcDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NCUpIiwgImhzbCgwIDAlIDYlKSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBjb2xvciAwLjE1cyBlYXNlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC53aWRnZXQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQgZGVlcy1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLndpZGdldC1zZXBhcmF0b3IgewogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4MCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgLndpZGdldC5ydW5uaW5nIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA0NSUpIiwgImhzbCgyMTAgMTAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0LnVwLXRvLWRhdGUgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0MiA3MCUgMzUlKSIsICJoc2woMTQyIDcwJSA1MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0LnVwZGF0ZXMtYXZhaWxhYmxlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgzOCA5MiUgNDUlKSIsICJoc2woMzggOTIlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQuZXJyb3IgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgZnJvbSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9CiAgICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9CiAgICAgIH0KCiAgICAgIC5zcGlubmluZyB7CiAgICAgICAgYW5pbWF0aW9uOiBzcGluIDFzIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgLnNwYWNlciB7CiAgICAgICAgZmxleDogMTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJib3R0b20tYmFyIj4KICAgICAgICA8IS0tIFNjcmlwdCBSdW5uZXIgV2lkZ2V0IC0tPgogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJ3aWRnZXQiCiAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZVNjcmlwdENsaWNrfQogICAgICAgICAgdGl0bGU9IlJ1biBzY3JpcHQiCiAgICAgICAgPgogICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAuaWNvbj0keyJsdWNpZGU6cGxheSJ9CiAgICAgICAgICAgIGljb25TaXplPSIxMiIKICAgICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgICAgIDxzcGFuPlNjcmlwdHM8L3NwYW4+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1zZXBhcmF0b3IiPjwvZGl2PgoKICAgICAgICA8IS0tIFBhY2thZ2UgQ2hlY2tlciBXaWRnZXQgLS0+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9IndpZGdldCAke3RoaXMuZ2V0UGFja2FnZVN0YXR1c0NsYXNzKCl9IgogICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVQYWNrYWdlQ2xpY2t9CiAgICAgICAgICB0aXRsZT0iJHt0aGlzLmdldFBhY2thZ2VUb29sdGlwKCl9IgogICAgICAgID4KICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgLmljb249JHt0aGlzLmdldFBhY2thZ2VJY29uKCl9CiAgICAgICAgICAgIGljb25TaXplPSIxMiIKICAgICAgICAgICAgY2xhc3M9IiR7dGhpcy5pc0NoZWNraW5nUGFja2FnZXMgPyAic3Bpbm5pbmciIDogIiJ9IgogICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+JHt0aGlzLmdldFBhY2thZ2VTdGF0dXNUZXh0KCl9PC9zcGFuPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZXIiPjwvZGl2PgoKICAgICAgICA8IS0tIEZ1dHVyZSB3aWRnZXRzIGNhbiBiZSBhZGRlZCBoZXJlIC0tPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInByb2Nlc3MtY29tcGxldGUiLCB0aGlzLmhhbmRsZVByb2Nlc3NDb21wbGV0ZSk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2Nlc3MtY29tcGxldGUiLCB0aGlzLmhhbmRsZVByb2Nlc3NDb21wbGV0ZSk7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGF3YWl0IHRoaXMubG9hZFNjcmlwdHMoKTsKICAgICAgYXdhaXQgdGhpcy5jaGVja1BhY2thZ2VzKCk7CiAgICB9CiAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImV4ZWN1dGlvbkVudmlyb25tZW50IikgJiYgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkgewogICAgICAgIGF3YWl0IHRoaXMubG9hZFNjcmlwdHMoKTsKICAgICAgICBhd2FpdCB0aGlzLmNoZWNrUGFja2FnZXMoKTsKICAgICAgfQogICAgfQogICAgLy8gPT09PT09PT09PSBTY3JpcHQgUnVubmVyID09PT09PT09PT0KICAgIGFzeW5jIGxvYWRTY3JpcHRzKCkgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIGNvbnN0IHBhY2thZ2VKc29uRXhpc3RzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoIi9wYWNrYWdlLmpzb24iKTsKICAgICAgICBpZiAoIXBhY2thZ2VKc29uRXhpc3RzKSB7CiAgICAgICAgICB0aGlzLnNjcmlwdHMgPSB7fTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKCIvcGFja2FnZS5qc29uIik7CiAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQzKTsKICAgICAgICB0aGlzLnNjcmlwdHMgPSBwYWNrYWdlSnNvbi5zY3JpcHRzIHx8IHt9OwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGxvYWQgc2NyaXB0cyBmcm9tIHBhY2thZ2UuanNvbjoiLCBlcnJvcik7CiAgICAgICAgdGhpcy5zY3JpcHRzID0ge307CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGhhbmRsZVNjcmlwdENsaWNrKGUxMSkgewogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnN0IHNjcmlwdE5hbWVzID0gT2JqZWN0LmtleXModGhpcy5zY3JpcHRzKTsKICAgICAgaWYgKHNjcmlwdE5hbWVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBtZW51SXRlbXMgPSBzY3JpcHROYW1lcy5tYXAoKG5hbWUpID0+ICh7CiAgICAgICAgbmFtZSwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0ZXJtaW5hbCIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBhd2FpdCB0aGlzLnJ1blNjcmlwdChuYW1lKTsKICAgICAgICB9CiAgICAgIH0pKTsKICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgIH0KICAgIGFzeW5jIHJ1blNjcmlwdChzY3JpcHROYW1lKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGRldGFpbCA9IHsKICAgICAgICB0eXBlOiAic2NyaXB0IiwKICAgICAgICBsYWJlbDogc2NyaXB0TmFtZSwKICAgICAgICBjb21tYW5kOiAicG5wbSIsCiAgICAgICAgYXJnczogWyJydW4iLCBzY3JpcHROYW1lXSwKICAgICAgICBtZXRhZGF0YTogeyBzY3JpcHROYW1lIH0KICAgICAgfTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicnVuLXByb2Nlc3MiLCB7CiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZSwKICAgICAgICBkZXRhaWwKICAgICAgfSkpOwogICAgfQogICAgLy8gPT09PT09PT09PSBQYWNrYWdlIENoZWNrZXIgPT09PT09PT09PQogICAgYXN5bmMgY2hlY2tQYWNrYWdlcygpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgdGhpcy5wYWNrYWdlU3RhdHVzID0gImlkbGUiOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIGNvbnN0IHBhY2thZ2VKc29uRXhpc3RzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoIi9wYWNrYWdlLmpzb24iKTsKICAgICAgICBpZiAoIXBhY2thZ2VKc29uRXhpc3RzKSB7CiAgICAgICAgICB0aGlzLnBhY2thZ2VTdGF0dXMgPSAiaWRsZSI7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMucGFja2FnZVN0YXR1cyA9ICJjaGVja2luZyI7CiAgICAgICAgdGhpcy5pc0NoZWNraW5nUGFja2FnZXMgPSB0cnVlOwogICAgICAgIGNvbnN0IHByb2Nlc3M0ID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5zcGF3bigicG5wbSIsIFsib3V0ZGF0ZWQiLCAiLS1qc29uIl0pOwogICAgICAgIGxldCBvdXRwdXQgPSAiIjsKICAgICAgICBjb25zdCBvdXRwdXRSZWFkZXIgPSBwcm9jZXNzNC5vdXRwdXQuZ2V0UmVhZGVyKCk7CiAgICAgICAgY29uc3QgcmVhZE91dHB1dCA9IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZTogdmFsdWUyIH0gPSBhd2FpdCBvdXRwdXRSZWFkZXIucmVhZCgpOwogICAgICAgICAgICAgIGlmIChkb25lKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgb3V0cHV0ICs9IHZhbHVlMjsKICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICByZWFkT3V0cHV0KCk7CiAgICAgICAgY29uc3QgZXhpdENvZGUgPSBhd2FpdCBQcm9taXNlLnJhY2UoWwogICAgICAgICAgcHJvY2VzczQuZXhpdCwKICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlMigtMSksIDFlNCkpCiAgICAgICAgXSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IG91dHB1dFJlYWRlci5jYW5jZWwoKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgICAgaWYgKGV4aXRDb2RlID09PSAtMSkgewogICAgICAgICAgY29uc29sZS53YXJuKCJQYWNrYWdlIGNoZWNrIHRpbWVkIG91dCIpOwogICAgICAgICAgdGhpcy5wYWNrYWdlU3RhdHVzID0gImVycm9yIjsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGV4aXRDb2RlID09PSAwKSB7CiAgICAgICAgICB0aGlzLnBhY2thZ2VTdGF0dXMgPSAidXAtdG8tZGF0ZSI7CiAgICAgICAgICB0aGlzLm91dGRhdGVkUGFja2FnZXMgPSBbXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3Qgb3V0ZGF0ZWREYXRhID0gSlNPTi5wYXJzZShvdXRwdXQpOwogICAgICAgICAgICB0aGlzLm91dGRhdGVkUGFja2FnZXMgPSB0aGlzLnBhcnNlT3V0ZGF0ZWRQYWNrYWdlcyhvdXRkYXRlZERhdGEpOwogICAgICAgICAgICB0aGlzLnBhY2thZ2VTdGF0dXMgPSB0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoID4gMCA/ICJ1cGRhdGVzLWF2YWlsYWJsZSIgOiAidXAtdG8tZGF0ZSI7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgdGhpcy5wYWNrYWdlU3RhdHVzID0gInVwZGF0ZXMtYXZhaWxhYmxlIjsKICAgICAgICAgICAgdGhpcy5vdXRkYXRlZFBhY2thZ2VzID0gW107CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGNoZWNrIGZvciBwYWNrYWdlIHVwZGF0ZXM6IiwgZXJyb3IpOwogICAgICAgIHRoaXMucGFja2FnZVN0YXR1cyA9ICJlcnJvciI7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgdGhpcy5pc0NoZWNraW5nUGFja2FnZXMgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgcGFyc2VPdXRkYXRlZFBhY2thZ2VzKGRhdGEpIHsKICAgICAgY29uc3QgcGFja2FnZXMgPSBbXTsKICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAib2JqZWN0IiAmJiBkYXRhICE9PSBudWxsKSB7CiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgaW5mb10gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHsKICAgICAgICAgIGNvbnN0IHBrZ0luZm8gPSBpbmZvOwogICAgICAgICAgcGFja2FnZXMucHVzaCh7CiAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgIGN1cnJlbnQ6IHBrZ0luZm8uY3VycmVudCB8fCAidW5rbm93biIsCiAgICAgICAgICAgIHdhbnRlZDogcGtnSW5mby53YW50ZWQgfHwgcGtnSW5mby5jdXJyZW50IHx8ICJ1bmtub3duIiwKICAgICAgICAgICAgbGF0ZXN0OiBwa2dJbmZvLmxhdGVzdCB8fCBwa2dJbmZvLndhbnRlZCB8fCAidW5rbm93biIsCiAgICAgICAgICAgIHR5cGU6IHBrZ0luZm8uZGVwZW5kZW5jeVR5cGUgPT09ICJkZXZEZXBlbmRlbmNpZXMiID8gImRldkRlcGVuZGVuY2llcyIgOiAiZGVwZW5kZW5jaWVzIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBwYWNrYWdlczsKICAgIH0KICAgIGFzeW5jIGhhbmRsZVBhY2thZ2VDbGljayhlMTEpIHsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb25zdCBtZW51SXRlbXMgPSBbXTsKICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgIG5hbWU6IHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzID8gIkNoZWNraW5nLi4uIiA6ICJDaGVjayBmb3IgdXBkYXRlcyIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6cmVmcmVzaEN3IiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmICh0aGlzLmlzQ2hlY2tpbmdQYWNrYWdlcykKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgZGV0YWlsID0gewogICAgICAgICAgICB0eXBlOiAicGFja2FnZS11cGRhdGUiLAogICAgICAgICAgICBsYWJlbDogImNoZWNrIHBhY2thZ2VzIiwKICAgICAgICAgICAgY29tbWFuZDogInBucG0iLAogICAgICAgICAgICBhcmdzOiBbIm91dGRhdGVkIl0KICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJydW4tcHJvY2VzcyIsIHsKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgICAgIGRldGFpbAogICAgICAgICAgfSkpOwogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNoZWNrUGFja2FnZXMoKSwgM2UzKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBpZiAodGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aCA+IDApIHsKICAgICAgICBtZW51SXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSk7CiAgICAgICAgY29uc3QgZGlzcGxheVBhY2thZ2VzID0gdGhpcy5vdXRkYXRlZFBhY2thZ2VzLnNsaWNlKDAsIDEwKTsKICAgICAgICBmb3IgKGNvbnN0IHBrZyBvZiBkaXNwbGF5UGFja2FnZXMpIHsKICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKHsKICAgICAgICAgICAgbmFtZTogYCR7cGtnLm5hbWV9OiAke3BrZy5jdXJyZW50fSBcdTIxOTIgJHtwa2cubGF0ZXN0fWAsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnBhY2thZ2UiLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVBhY2thZ2UocGtnLm5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGggPiAxMCkgewogICAgICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgICAgICBuYW1lOiBgLi4uIGFuZCAke3RoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGggLSAxMH0gbW9yZWAsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOm1vcmVIb3Jpem9udGFsIiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBtZW51SXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSk7CiAgICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgICAgbmFtZTogIlVwZGF0ZSBhbGwgcGFja2FnZXMiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6YXJyb3dVcENpcmNsZSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVBbGxQYWNrYWdlcygpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGF3YWl0IERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhlMTEsIG1lbnVJdGVtcyk7CiAgICB9CiAgICBhc3luYyB1cGRhdGVQYWNrYWdlKHBhY2thZ2VOYW1lKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMucGVuZGluZ1BhY2thZ2VVcGRhdGUgPSB0cnVlOwogICAgICBjb25zdCBkZXRhaWwgPSB7CiAgICAgICAgdHlwZTogInBhY2thZ2UtdXBkYXRlIiwKICAgICAgICBsYWJlbDogYHVwZGF0ZSAke3BhY2thZ2VOYW1lfWAsCiAgICAgICAgY29tbWFuZDogInBucG0iLAogICAgICAgIGFyZ3M6IFsidXBkYXRlIiwgIi0tbGF0ZXN0IiwgcGFja2FnZU5hbWVdLAogICAgICAgIG1ldGFkYXRhOiB7IHBhY2thZ2VOYW1lIH0KICAgICAgfTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicnVuLXByb2Nlc3MiLCB7CiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZSwKICAgICAgICBkZXRhaWwKICAgICAgfSkpOwogICAgfQogICAgYXN5bmMgdXBkYXRlQWxsUGFja2FnZXMoKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMucGVuZGluZ1BhY2thZ2VVcGRhdGUgPSB0cnVlOwogICAgICBjb25zdCBkZXRhaWwgPSB7CiAgICAgICAgdHlwZTogInBhY2thZ2UtdXBkYXRlIiwKICAgICAgICBsYWJlbDogInVwZGF0ZSBhbGwiLAogICAgICAgIGNvbW1hbmQ6ICJwbnBtIiwKICAgICAgICBhcmdzOiBbInVwZGF0ZSIsICItLWxhdGVzdCJdCiAgICAgIH07CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInJ1bi1wcm9jZXNzIiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgZGV0YWlsCiAgICAgIH0pKTsKICAgIH0KICAgIC8vID09PT09PT09PT0gSGVscGVyIE1ldGhvZHMgPT09PT09PT09PQogICAgZ2V0UGFja2FnZVN0YXR1c0NsYXNzKCkgewogICAgICBpZiAodGhpcy5pc0NoZWNraW5nUGFja2FnZXMpCiAgICAgICAgcmV0dXJuICIiOwogICAgICByZXR1cm4gdGhpcy5wYWNrYWdlU3RhdHVzOwogICAgfQogICAgZ2V0UGFja2FnZUljb24oKSB7CiAgICAgIGlmICh0aGlzLmlzQ2hlY2tpbmdQYWNrYWdlcykKICAgICAgICByZXR1cm4gImx1Y2lkZTpsb2FkZXIyIjsKICAgICAgc3dpdGNoICh0aGlzLnBhY2thZ2VTdGF0dXMpIHsKICAgICAgICBjYXNlICJ1cC10by1kYXRlIjoKICAgICAgICAgIHJldHVybiAibHVjaWRlOmNoZWNrQ2lyY2xlIjsKICAgICAgICBjYXNlICJ1cGRhdGVzLWF2YWlsYWJsZSI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTphbGVydENpcmNsZSI7CiAgICAgICAgY2FzZSAiZXJyb3IiOgogICAgICAgICAgcmV0dXJuICJsdWNpZGU6eENpcmNsZSI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiAibHVjaWRlOnBhY2thZ2UiOwogICAgICB9CiAgICB9CiAgICBnZXRQYWNrYWdlU3RhdHVzVGV4dCgpIHsKICAgICAgaWYgKHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzKQogICAgICAgIHJldHVybiAiQ2hlY2tpbmcuLi4iOwogICAgICBzd2l0Y2ggKHRoaXMucGFja2FnZVN0YXR1cykgewogICAgICAgIGNhc2UgInVwLXRvLWRhdGUiOgogICAgICAgICAgcmV0dXJuICJVcCB0byBkYXRlIjsKICAgICAgICBjYXNlICJ1cGRhdGVzLWF2YWlsYWJsZSI6CiAgICAgICAgICByZXR1cm4gYCR7dGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aH0gdXBkYXRlJHt0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoICE9PSAxID8gInMiIDogIiJ9YDsKICAgICAgICBjYXNlICJlcnJvciI6CiAgICAgICAgICByZXR1cm4gIkNoZWNrIGZhaWxlZCI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiAiUGFja2FnZXMiOwogICAgICB9CiAgICB9CiAgICBnZXRQYWNrYWdlVG9vbHRpcCgpIHsKICAgICAgaWYgKHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzKQogICAgICAgIHJldHVybiAiQ2hlY2tpbmcgZm9yIHBhY2thZ2UgdXBkYXRlcy4uLiI7CiAgICAgIHN3aXRjaCAodGhpcy5wYWNrYWdlU3RhdHVzKSB7CiAgICAgICAgY2FzZSAidXAtdG8tZGF0ZSI6CiAgICAgICAgICByZXR1cm4gIkFsbCBwYWNrYWdlcyBhcmUgdXAgdG8gZGF0ZSI7CiAgICAgICAgY2FzZSAidXBkYXRlcy1hdmFpbGFibGUiOgogICAgICAgICAgcmV0dXJuIGAke3RoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGh9IHBhY2thZ2UgdXBkYXRlJHt0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoICE9PSAxID8gInMiIDogIiJ9IGF2YWlsYWJsZWA7CiAgICAgICAgY2FzZSAiZXJyb3IiOgogICAgICAgICAgcmV0dXJuICJGYWlsZWQgdG8gY2hlY2sgZm9yIHVwZGF0ZXMuIENsaWNrIHRvIHJldHJ5LiI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiAiQ2xpY2sgdG8gY2hlY2sgZm9yIHBhY2thZ2UgdXBkYXRlcyI7CiAgICAgIH0KICAgIH0KICAgIC8vID09PT09PT09PT0gUHVibGljIE1ldGhvZHMgPT09PT09PT09PQogICAgLyoqCiAgICAgKiBNYW51YWxseSB0cmlnZ2VyIGEgcGFja2FnZSBjaGVjawogICAgICovCiAgICBhc3luYyByZWZyZXNoUGFja2FnZVN0YXR1cygpIHsKICAgICAgYXdhaXQgdGhpcy5jaGVja1BhY2thZ2VzKCk7CiAgICB9CiAgICAvKioKICAgICAqIE1hbnVhbGx5IHJlbG9hZCBzY3JpcHRzIGZyb20gcGFja2FnZS5qc29uCiAgICAgKi8KICAgIGFzeW5jIHJlZnJlc2hTY3JpcHRzKCkgewogICAgICBhd2FpdCB0aGlzLmxvYWRTY3JpcHRzKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczU0KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlQm90dG9tYmFyMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlL3R5cGVzY3JpcHQtaW50ZWxsaXNlbnNlLmpzCnZhciBUeXBlU2NyaXB0SW50ZWxsaVNlbnNlTWFuYWdlciA9IGNsYXNzIHsKICBsb2FkZWRMaWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICBub3RGb3VuZFBhY2thZ2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAvLyBQYWNrYWdlcyBjaGVja2VkIGJ1dCBub3QgZm91bmQKICBtb25hY29JbnN0YW5jZSA9IG51bGw7CiAgZXhlY3V0aW9uRW52aXJvbm1lbnQgPSBudWxsOwogIC8vIENhY2hlIG9mIGZpbGUgY29udGVudHMgZm9yIHN5bmNocm9ub3VzIGFjY2VzcyBhbmQgbW9kdWxlIHJlc29sdXRpb24KICBmaWxlQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIC8vIFRyYWNrIGV4dHJhIGxpYnMgYWRkZWQgZm9yIGNsZWFudXAKICBhZGRlZEV4dHJhTGlicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgLyoqCiAgICogR2V0IFR5cGVTY3JpcHQgQVBJIHdpdGggcHJvcGVyIHR5cGluZyBmb3IgTW9uYWNvIDAuNTUrCiAgICovCiAgZ2V0IHRzQXBpKCkgewogICAgaWYgKCF0aGlzLm1vbmFjb0luc3RhbmNlKQogICAgICByZXR1cm4gbnVsbDsKICAgIHJldHVybiB0aGlzLm1vbmFjb0luc3RhbmNlLmxhbmd1YWdlcy50eXBlc2NyaXB0OwogIH0KICAvKioKICAgKiBJbml0aWFsaXplIHdpdGggTW9uYWNvIGFuZCBleGVjdXRpb24gZW52aXJvbm1lbnQKICAgKi8KICBhc3luYyBpbml0KG1vbmFjb0luc3QsIGVudjIpIHsKICAgIHRoaXMubW9uYWNvSW5zdGFuY2UgPSBtb25hY29JbnN0OwogICAgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCA9IGVudjI7CiAgICB0aGlzLmNvbmZpZ3VyZUNvbXBpbGVyT3B0aW9ucygpOwogICAgYXdhaXQgdGhpcy5sb2FkQWxsUHJvamVjdEZpbGVzKCk7CiAgfQogIC8qKgogICAqIFJlY3Vyc2l2ZWx5IGxvYWQgYWxsIC50cy8uanMgZmlsZXMgZnJvbSB0aGUgdmlydHVhbCBmaWxlc3lzdGVtIGludG8gTW9uYWNvCiAgICovCiAgYXN5bmMgbG9hZEFsbFByb2plY3RGaWxlcygpIHsKICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgcmV0dXJuOwogICAgYXdhaXQgdGhpcy5sb2FkRmlsZXNGcm9tRGlyZWN0b3J5KCIvIik7CiAgfQogIC8qKgogICAqIFJlY3Vyc2l2ZWx5IGxvYWQgZmlsZXMgZnJvbSBhIGRpcmVjdG9yeQogICAqLwogIGFzeW5jIGxvYWRGaWxlc0Zyb21EaXJlY3RvcnkoZGlyUGF0aCkgewogICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICByZXR1cm47CiAgICB0cnkgewogICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKGRpclBhdGgpOwogICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHsKICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGRpclBhdGggPT09ICIvIiA/IGAvJHtlbnRyeS5uYW1lfWAgOiBgJHtkaXJQYXRofS8ke2VudHJ5Lm5hbWV9YDsKICAgICAgICBpZiAoZW50cnkubmFtZSA9PT0gIm5vZGVfbW9kdWxlcyIpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEZpbGVzRnJvbURpcmVjdG9yeShmdWxsUGF0aCk7CiAgICAgICAgfSBlbHNlIGlmIChlbnRyeS50eXBlID09PSAiZmlsZSIpIHsKICAgICAgICAgIGNvbnN0IGV4dCA9IGVudHJ5Lm5hbWUuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGlmIChleHQgPT09ICJ0cyIgfHwgZXh0ID09PSAidHN4IiB8fCBleHQgPT09ICJqcyIgfHwgZXh0ID09PSAianN4IikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShmdWxsUGF0aCk7CiAgICAgICAgICAgICAgdGhpcy5hZGRGaWxlTW9kZWwoZnVsbFBhdGgsIGNvbnRlbnQzKTsKICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggewogICAgfQogIH0KICBjb25maWd1cmVDb21waWxlck9wdGlvbnMoKSB7CiAgICBjb25zdCB0cyA9IHRoaXMudHNBcGk7CiAgICBpZiAoIXRzKQogICAgICByZXR1cm47CiAgICB0cy50eXBlc2NyaXB0RGVmYXVsdHMuc2V0Q29tcGlsZXJPcHRpb25zKHsKICAgICAgdGFyZ2V0OiB0cy5TY3JpcHRUYXJnZXQuRVMyMDIwLAogICAgICBtb2R1bGU6IHRzLk1vZHVsZUtpbmQuRVNOZXh0LAogICAgICAvLyBVc2UgQnVuZGxlciByZXNvbHV0aW9uIGlmIGF2YWlsYWJsZSAoTW9uYWNvIDAuNDUrKSwgZmFsbGJhY2sgdG8gTm9kZUpzCiAgICAgIG1vZHVsZVJlc29sdXRpb246IHRzLk1vZHVsZVJlc29sdXRpb25LaW5kLkJ1bmRsZXIgPz8gdHMuTW9kdWxlUmVzb2x1dGlvbktpbmQuTm9kZUpzLAogICAgICBhbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzOiB0cnVlLAogICAgICBlc01vZHVsZUludGVyb3A6IHRydWUsCiAgICAgIHN0cmljdDogdHJ1ZSwKICAgICAgbm9FbWl0OiB0cnVlLAogICAgICBhbGxvd0pzOiB0cnVlLAogICAgICBjaGVja0pzOiBmYWxzZSwKICAgICAgYWxsb3dOb25Uc0V4dGVuc2lvbnM6IHRydWUsCiAgICAgIGxpYjogWyJlczIwMjAiLCAiZG9tIiwgImRvbS5pdGVyYWJsZSJdLAogICAgICAvLyBTZXQgYmFzZVVybCB0byByb290IGZvciByZXNvbHZpbmcgYWJzb2x1dGUgaW1wb3J0cwogICAgICBiYXNlVXJsOiAiLyIsCiAgICAgIC8vIEFsbG93IGltcG9ydGluZyAudHMgZXh0ZW5zaW9ucyBkaXJlY3RseSAodXNlZnVsIGZvciBzb21lIHNldHVwcykKICAgICAgYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnM6IHRydWUsCiAgICAgIC8vIFJlc29sdmUgSlNPTiBtb2R1bGVzCiAgICAgIHJlc29sdmVKc29uTW9kdWxlOiB0cnVlCiAgICB9KTsKICAgIHRzLnR5cGVzY3JpcHREZWZhdWx0cy5zZXREaWFnbm9zdGljc09wdGlvbnMoewogICAgICBub1NlbWFudGljVmFsaWRhdGlvbjogZmFsc2UsCiAgICAgIG5vU3ludGF4VmFsaWRhdGlvbjogZmFsc2UKICAgIH0pOwogICAgdHMudHlwZXNjcmlwdERlZmF1bHRzLnNldEVhZ2VyTW9kZWxTeW5jKHRydWUpOwogIH0KICAvKioKICAgKiBQYXJzZSBpbXBvcnRzIGZyb20gVHlwZVNjcmlwdC9KYXZhU2NyaXB0IGNvbnRlbnQKICAgKi8KICBwYXJzZUltcG9ydHMoY29udGVudDMpIHsKICAgIGNvbnN0IGltcG9ydHMgPSBbXTsKICAgIGNvbnN0IGltcG9ydFJlZ2V4ID0gL2ltcG9ydFxzKyg/Oltcdyp7fVxzLF0rZnJvbVxzKyk/WyciXShbXiciXSspWyciXS9nOwogICAgbGV0IG1hdGNoMjsKICAgIHdoaWxlICgobWF0Y2gyID0gaW1wb3J0UmVnZXguZXhlYyhjb250ZW50MykpICE9PSBudWxsKSB7CiAgICAgIGNvbnN0IGltcG9ydFBhdGggPSBtYXRjaDJbMV07CiAgICAgIGlmICghaW1wb3J0UGF0aC5zdGFydHNXaXRoKCIuIikgJiYgIWltcG9ydFBhdGguc3RhcnRzV2l0aCgiLyIpKSB7CiAgICAgICAgY29uc3QgcGFja2FnZU5hbWUgPSBpbXBvcnRQYXRoLnN0YXJ0c1dpdGgoIkAiKSA/IGltcG9ydFBhdGguc3BsaXQoIi8iKS5zbGljZSgwLCAyKS5qb2luKCIvIikgOiBpbXBvcnRQYXRoLnNwbGl0KCIvIilbMF07CiAgICAgICAgaW1wb3J0cy5wdXNoKHBhY2thZ2VOYW1lKTsKICAgICAgfQogICAgfQogICAgY29uc3QgcmVxdWlyZVJlZ2V4ID0gL3JlcXVpcmVccypcKFxzKlsnIl0oW14nIl0rKVsnIl1ccypcKS9nOwogICAgd2hpbGUgKChtYXRjaDIgPSByZXF1aXJlUmVnZXguZXhlYyhjb250ZW50MykpICE9PSBudWxsKSB7CiAgICAgIGNvbnN0IGltcG9ydFBhdGggPSBtYXRjaDJbMV07CiAgICAgIGlmICghaW1wb3J0UGF0aC5zdGFydHNXaXRoKCIuIikgJiYgIWltcG9ydFBhdGguc3RhcnRzV2l0aCgiLyIpKSB7CiAgICAgICAgY29uc3QgcGFja2FnZU5hbWUgPSBpbXBvcnRQYXRoLnN0YXJ0c1dpdGgoIkAiKSA/IGltcG9ydFBhdGguc3BsaXQoIi8iKS5zbGljZSgwLCAyKS5qb2luKCIvIikgOiBpbXBvcnRQYXRoLnNwbGl0KCIvIilbMF07CiAgICAgICAgaW1wb3J0cy5wdXNoKHBhY2thZ2VOYW1lKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIFsuLi5uZXcgU2V0KGltcG9ydHMpXTsKICB9CiAgLyoqCiAgICogTG9hZCB0eXBlIGRlZmluaXRpb25zIGZvciBhIHBhY2thZ2UgZnJvbSB2aXJ0dWFsIEZTCiAgICovCiAgYXN5bmMgbG9hZFR5cGVzRm9yUGFja2FnZShwYWNrYWdlTmFtZSkgewogICAgaWYgKCF0aGlzLm1vbmFjb0luc3RhbmNlIHx8ICF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICByZXR1cm47CiAgICBpZiAodGhpcy5sb2FkZWRMaWJzLmhhcyhwYWNrYWdlTmFtZSkpCiAgICAgIHJldHVybjsKICAgIGlmICh0aGlzLm5vdEZvdW5kUGFja2FnZXMuaGFzKHBhY2thZ2VOYW1lKSkKICAgICAgcmV0dXJuOwogICAgdHJ5IHsKICAgICAgbGV0IHR5cGVzTG9hZGVkID0gYXdhaXQgdGhpcy50cnlMb2FkUGFja2FnZVR5cGVzKHBhY2thZ2VOYW1lKTsKICAgICAgaWYgKCF0eXBlc0xvYWRlZCkgewogICAgICAgIHR5cGVzTG9hZGVkID0gYXdhaXQgdGhpcy50cnlMb2FkQXRUeXBlc1BhY2thZ2UocGFja2FnZU5hbWUpOwogICAgICB9CiAgICAgIGlmICh0eXBlc0xvYWRlZCkgewogICAgICAgIHRoaXMubG9hZGVkTGlicy5hZGQocGFja2FnZU5hbWUpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMubm90Rm91bmRQYWNrYWdlcy5hZGQocGFja2FnZU5hbWUpOwogICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBsb2FkIHR5cGVzIGZvciAke3BhY2thZ2VOYW1lfTpgLCBlcnJvcik7CiAgICB9CiAgfQogIGFzeW5jIHRyeUxvYWRQYWNrYWdlVHlwZXMocGFja2FnZU5hbWUpIHsKICAgIGNvbnN0IHRzID0gdGhpcy50c0FwaTsKICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCB8fCAhdHMpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IGJhc2VQYXRoID0gYC9ub2RlX21vZHVsZXMvJHtwYWNrYWdlTmFtZX1gOwogICAgdHJ5IHsKICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gYCR7YmFzZVBhdGh9L3BhY2thZ2UuanNvbmA7CiAgICAgIGNvbnN0IHBhY2thZ2VKc29uRXhpc3RzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMocGFja2FnZUpzb25QYXRoKTsKICAgICAgaWYgKHBhY2thZ2VKc29uRXhpc3RzKSB7CiAgICAgICAgY29uc3QgcGFja2FnZUpzb25Db250ZW50ID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShwYWNrYWdlSnNvblBhdGgpOwogICAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShwYWNrYWdlSnNvbkNvbnRlbnQpOwogICAgICAgIHRzLnR5cGVzY3JpcHREZWZhdWx0cy5hZGRFeHRyYUxpYihwYWNrYWdlSnNvbkNvbnRlbnQsIGBmaWxlOi8vJHtwYWNrYWdlSnNvblBhdGh9YCk7CiAgICAgICAgY29uc3QgdHlwZXNQYXRoID0gcGFja2FnZUpzb24udHlwZXMgfHwgcGFja2FnZUpzb24udHlwaW5nczsKICAgICAgICBpZiAodHlwZXNQYXRoKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRBbGxEdHNGaWxlc0Zyb21QYWNrYWdlKGJhc2VQYXRoKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBjb21tb25QYXRocyA9IFsKICAgICAgICBgJHtiYXNlUGF0aH0vaW5kZXguZC50c2AsCiAgICAgICAgYCR7YmFzZVBhdGh9L2Rpc3QvaW5kZXguZC50c2AsCiAgICAgICAgYCR7YmFzZVBhdGh9L2xpYi9pbmRleC5kLnRzYAogICAgICBdOwogICAgICBmb3IgKGNvbnN0IGR0c1BhdGggb2YgY29tbW9uUGF0aHMpIHsKICAgICAgICBpZiAoYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoZHRzUGF0aCkpIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEFsbER0c0ZpbGVzRnJvbVBhY2thZ2UoYmFzZVBhdGgpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkIHBhY2thZ2UgdHlwZXMgZm9yICR7cGFja2FnZU5hbWV9OmAsIGVycm9yKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICAvKioKICAgKiBSZWN1cnNpdmVseSBsb2FkIGFsbCAuZC50cyBmaWxlcyBmcm9tIGEgcGFja2FnZSBkaXJlY3RvcnkKICAgKi8KICBhc3luYyBsb2FkQWxsRHRzRmlsZXNGcm9tUGFja2FnZShiYXNlUGF0aCkgewogICAgY29uc3QgdHMgPSB0aGlzLnRzQXBpOwogICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50IHx8ICF0cykKICAgICAgcmV0dXJuOwogICAgYXdhaXQgdGhpcy5sb2FkRHRzRmlsZXNGcm9tRGlyZWN0b3J5KGJhc2VQYXRoKTsKICB9CiAgLyoqCiAgICogUmVjdXJzaXZlbHkgbG9hZCAuZC50cyBmaWxlcyBmcm9tIGEgZGlyZWN0b3J5CiAgICovCiAgYXN5bmMgbG9hZER0c0ZpbGVzRnJvbURpcmVjdG9yeShkaXJQYXRoKSB7CiAgICBjb25zdCB0cyA9IHRoaXMudHNBcGk7CiAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQgfHwgIXRzKQogICAgICByZXR1cm47CiAgICB0cnkgewogICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKGRpclBhdGgpOwogICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHsKICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGRpclBhdGggPT09ICIvIiA/IGAvJHtlbnRyeS5uYW1lfWAgOiBgJHtkaXJQYXRofS8ke2VudHJ5Lm5hbWV9YDsKICAgICAgICBpZiAoZW50cnkubmFtZSA9PT0gIm5vZGVfbW9kdWxlcyIpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZER0c0ZpbGVzRnJvbURpcmVjdG9yeShmdWxsUGF0aCk7CiAgICAgICAgfSBlbHNlIGlmIChlbnRyeS50eXBlID09PSAiZmlsZSIgJiYgZW50cnkubmFtZS5lbmRzV2l0aCgiLmQudHMiKSkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKGZ1bGxQYXRoKTsKICAgICAgICAgICAgdHMudHlwZXNjcmlwdERlZmF1bHRzLmFkZEV4dHJhTGliKGNvbnRlbnQzLCBgZmlsZTovLyR7ZnVsbFBhdGh9YCk7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggewogICAgfQogIH0KICBhc3luYyB0cnlMb2FkQXRUeXBlc1BhY2thZ2UocGFja2FnZU5hbWUpIHsKICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgY29uc3QgdHlwZXNQYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lLnN0YXJ0c1dpdGgoIkAiKSA/IGBAdHlwZXMvJHtwYWNrYWdlTmFtZS5zbGljZSgxKS5yZXBsYWNlKCIvIiwgIl9fIil9YCA6IGBAdHlwZXMvJHtwYWNrYWdlTmFtZX1gOwogICAgY29uc3QgYmFzZVBhdGggPSBgL25vZGVfbW9kdWxlcy8ke3R5cGVzUGFja2FnZU5hbWV9YDsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGluZGV4UGF0aCA9IGAke2Jhc2VQYXRofS9pbmRleC5kLnRzYDsKICAgICAgaWYgKGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKGluZGV4UGF0aCkpIHsKICAgICAgICBhd2FpdCB0aGlzLmxvYWRBbGxEdHNGaWxlc0Zyb21QYWNrYWdlKGJhc2VQYXRoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGNhdGNoIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICAvKioKICAgKiBQcm9jZXNzIGNvbnRlbnQgY2hhbmdlIGFuZCBsb2FkIHR5cGVzIGZvciBhbnkgbmV3IGltcG9ydHMKICAgKi8KICBhc3luYyBwcm9jZXNzQ29udGVudENoYW5nZShjb250ZW50MykgewogICAgY29uc3QgaW1wb3J0cyA9IHRoaXMucGFyc2VJbXBvcnRzKGNvbnRlbnQzKTsKICAgIGZvciAoY29uc3QgcGFja2FnZU5hbWUgb2YgaW1wb3J0cykgewogICAgICBpZiAoIXRoaXMubG9hZGVkTGlicy5oYXMocGFja2FnZU5hbWUpKSB7CiAgICAgICAgYXdhaXQgdGhpcy5sb2FkVHlwZXNGb3JQYWNrYWdlKHBhY2thZ2VOYW1lKTsKICAgICAgfQogICAgfQogIH0KICAvKioKICAgKiBTY2FuIG5vZGVfbW9kdWxlcyBmb3IgcGFja2FnZXMgYW5kIGxvYWQgdHlwZXMgZm9yIGFueSBub3QgeWV0IGxvYWRlZC4KICAgKiBDYWxsZWQgd2hlbiBub2RlX21vZHVsZXMgY2hhbmdlcyAoZS5nLiwgYWZ0ZXIgcG5wbSBpbnN0YWxsKS4KICAgKi8KICBhc3luYyBzY2FuQW5kTG9hZE5ld1BhY2thZ2VUeXBlcygpIHsKICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgcmV0dXJuOwogICAgdGhpcy5ub3RGb3VuZFBhY2thZ2VzLmNsZWFyKCk7CiAgICB0cnkgewogICAgICBpZiAoIWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKCIvbm9kZV9tb2R1bGVzIikpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKCIvbm9kZV9tb2R1bGVzIik7CiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykgewogICAgICAgIGlmIChlbnRyeS50eXBlICE9PSAiZGlyZWN0b3J5IikKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGlmIChlbnRyeS5uYW1lLnN0YXJ0c1dpdGgoIkAiKSkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3Qgc2NvcGVkUGF0aCA9IGAvbm9kZV9tb2R1bGVzLyR7ZW50cnkubmFtZX1gOwogICAgICAgICAgICBjb25zdCBzY29wZWRFbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKHNjb3BlZFBhdGgpOwogICAgICAgICAgICBmb3IgKGNvbnN0IHNjb3BlZEVudHJ5IG9mIHNjb3BlZEVudHJpZXMpIHsKICAgICAgICAgICAgICBpZiAoc2NvcGVkRW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gYCR7ZW50cnkubmFtZX0vJHtzY29wZWRFbnRyeS5uYW1lfWA7CiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRUeXBlc0ZvclBhY2thZ2UocGFja2FnZU5hbWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICghZW50cnkubmFtZS5zdGFydHNXaXRoKCIuIikpIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFR5cGVzRm9yUGFja2FnZShlbnRyeS5uYW1lKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIHNjYW4gbm9kZV9tb2R1bGVzOiIsIGVycm9yKTsKICAgIH0KICB9CiAgLyoqCiAgICogQWRkIGEgZmlsZSBtb2RlbCB0byBNb25hY28gZm9yIGNyb3NzLWZpbGUgSW50ZWxsaVNlbnNlCiAgICogQWxzbyByZWdpc3RlcnMgdGhlIGZpbGUgd2l0aCBUeXBlU2NyaXB0IHZpYSBhZGRFeHRyYUxpYiBmb3IgbW9kdWxlIHJlc29sdXRpb24KICAgKi8KICBhZGRGaWxlTW9kZWwocGF0aDIsIGNvbnRlbnQzKSB7CiAgICBpZiAoIXRoaXMubW9uYWNvSW5zdGFuY2UpCiAgICAgIHJldHVybjsKICAgIHRoaXMuZmlsZUNhY2hlLnNldChwYXRoMiwgY29udGVudDMpOwogICAgY29uc3QgdXJpID0gdGhpcy5tb25hY29JbnN0YW5jZS5VcmkucGFyc2UoYGZpbGU6Ly8ke3BhdGgyfWApOwogICAgY29uc3QgZXhpc3RpbmdNb2RlbCA9IHRoaXMubW9uYWNvSW5zdGFuY2UuZWRpdG9yLmdldE1vZGVsKHVyaSk7CiAgICBpZiAoZXhpc3RpbmdNb2RlbCkgewogICAgICBpZiAoZXhpc3RpbmdNb2RlbC5nZXRWYWx1ZSgpICE9PSBjb250ZW50MykgewogICAgICAgIGV4aXN0aW5nTW9kZWwuc2V0VmFsdWUoY29udGVudDMpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuZ2V0TGFuZ3VhZ2VGcm9tUGF0aChwYXRoMik7CiAgICAgIHRoaXMubW9uYWNvSW5zdGFuY2UuZWRpdG9yLmNyZWF0ZU1vZGVsKGNvbnRlbnQzLCBsYW5ndWFnZSwgdXJpKTsKICAgIH0KICAgIHRoaXMuYWRkRmlsZUFzRXh0cmFMaWIocGF0aDIsIGNvbnRlbnQzKTsKICB9CiAgLyoqCiAgICogQWRkIGEgZmlsZSBhcyBhbiBleHRyYSBsaWIgZm9yIFR5cGVTY3JpcHQgbW9kdWxlIHJlc29sdXRpb24uCiAgICogVGhpcyBlbmFibGVzIFR5cGVTY3JpcHQgdG8gcmVzb2x2ZSBpbXBvcnRzIHRvIHByb2plY3QgZmlsZXMuCiAgICovCiAgYWRkRmlsZUFzRXh0cmFMaWIocGF0aDIsIGNvbnRlbnQzKSB7CiAgICBjb25zdCB0cyA9IHRoaXMudHNBcGk7CiAgICBpZiAoIXRzKQogICAgICByZXR1cm47CiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuYWRkZWRFeHRyYUxpYnMuZ2V0KHBhdGgyKTsKICAgIGlmIChleGlzdGluZykgewogICAgICBleGlzdGluZy5kaXNwb3NlKCk7CiAgICB9CiAgICBjb25zdCBmaWxlUGF0aCA9IGBmaWxlOi8vJHtwYXRoMn1gOwogICAgY29uc3QgZGlzcG9zYWJsZSA9IHRzLnR5cGVzY3JpcHREZWZhdWx0cy5hZGRFeHRyYUxpYihjb250ZW50MywgZmlsZVBhdGgpOwogICAgdGhpcy5hZGRlZEV4dHJhTGlicy5zZXQocGF0aDIsIGRpc3Bvc2FibGUpOwogICAgaWYgKHBhdGgyLmVuZHNXaXRoKCIudHMiKSAmJiAhcGF0aDIuZW5kc1dpdGgoIi5kLnRzIikpIHsKICAgICAgY29uc3QganNQYXRoID0gcGF0aDIucmVwbGFjZSgvXC50cyQvLCAiLmpzIik7CiAgICAgIGNvbnN0IGpzRmlsZVBhdGggPSBgZmlsZTovLyR7anNQYXRofWA7CiAgICAgIGNvbnN0IGpzRGlzcG9zYWJsZSA9IHRzLnR5cGVzY3JpcHREZWZhdWx0cy5hZGRFeHRyYUxpYihjb250ZW50MywganNGaWxlUGF0aCk7CiAgICAgIHRoaXMuYWRkZWRFeHRyYUxpYnMuc2V0KGpzUGF0aCwganNEaXNwb3NhYmxlKTsKICAgICAgdGhpcy5maWxlQ2FjaGUuc2V0KGpzUGF0aCwgY29udGVudDMpOwogICAgfSBlbHNlIGlmIChwYXRoMi5lbmRzV2l0aCgiLnRzeCIpKSB7CiAgICAgIGNvbnN0IGpzeFBhdGggPSBwYXRoMi5yZXBsYWNlKC9cLnRzeCQvLCAiLmpzeCIpOwogICAgICBjb25zdCBqc3hGaWxlUGF0aCA9IGBmaWxlOi8vJHtqc3hQYXRofWA7CiAgICAgIGNvbnN0IGpzeERpc3Bvc2FibGUgPSB0cy50eXBlc2NyaXB0RGVmYXVsdHMuYWRkRXh0cmFMaWIoY29udGVudDMsIGpzeEZpbGVQYXRoKTsKICAgICAgdGhpcy5hZGRlZEV4dHJhTGlicy5zZXQoanN4UGF0aCwganN4RGlzcG9zYWJsZSk7CiAgICAgIHRoaXMuZmlsZUNhY2hlLnNldChqc3hQYXRoLCBjb250ZW50Myk7CiAgICB9CiAgfQogIC8qKgogICAqIEdldCBjYWNoZWQgZmlsZSBjb250ZW50IGZvciBzeW5jaHJvbm91cyBhY2Nlc3MKICAgKi8KICBnZXRGaWxlQ29udGVudChwYXRoMikgewogICAgcmV0dXJuIHRoaXMuZmlsZUNhY2hlLmdldChwYXRoMik7CiAgfQogIGdldExhbmd1YWdlRnJvbVBhdGgocGF0aDIpIHsKICAgIGNvbnN0IGV4dCA9IHBhdGgyLnNwbGl0KCIuIikucG9wKCk/LnRvTG93ZXJDYXNlKCk7CiAgICBzd2l0Y2ggKGV4dCkgewogICAgICBjYXNlICJ0cyI6CiAgICAgIGNhc2UgInRzeCI6CiAgICAgICAgcmV0dXJuICJ0eXBlc2NyaXB0IjsKICAgICAgY2FzZSAianMiOgogICAgICBjYXNlICJqc3giOgogICAgICAgIHJldHVybiAiamF2YXNjcmlwdCI7CiAgICAgIGNhc2UgImpzb24iOgogICAgICAgIHJldHVybiAianNvbiI7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuICJwbGFpbnRleHQiOwogICAgfQogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3IvZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3IuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNTQgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczU1ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV29ya3NwYWNlRGlmZkVkaXRvciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfb3JpZ2luYWxDb250ZW50X2RlY29yYXRvcnM7CiAgbGV0IF9vcmlnaW5hbENvbnRlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcmlnaW5hbENvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21vZGlmaWVkQ29udGVudF9kZWNvcmF0b3JzOwogIGxldCBfbW9kaWZpZWRDb250ZW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9kaWZpZWRDb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcmlnaW5hbExhYmVsX2RlY29yYXRvcnM7CiAgbGV0IF9vcmlnaW5hbExhYmVsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3JpZ2luYWxMYWJlbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9kaWZpZWRMYWJlbF9kZWNvcmF0b3JzOwogIGxldCBfbW9kaWZpZWRMYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21vZGlmaWVkTGFiZWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhbmd1YWdlX2RlY29yYXRvcnM7CiAgbGV0IF9sYW5ndWFnZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhbmd1YWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWxlUGF0aF9kZWNvcmF0b3JzOwogIGxldCBfZmlsZVBhdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWxlUGF0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV29ya3NwYWNlRGlmZkVkaXRvcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9vcmlnaW5hbENvbnRlbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tb2RpZmllZENvbnRlbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9vcmlnaW5hbExhYmVsX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbW9kaWZpZWRMYWJlbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2xhbmd1YWdlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfZmlsZVBhdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTU0KHRoaXMsIG51bGwsIF9vcmlnaW5hbENvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3JpZ2luYWxDb250ZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvcmlnaW5hbENvbnRlbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3JpZ2luYWxDb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcmlnaW5hbENvbnRlbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3JpZ2luYWxDb250ZW50X2luaXRpYWxpemVycywgX29yaWdpbmFsQ29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU0KHRoaXMsIG51bGwsIF9tb2RpZmllZENvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibW9kaWZpZWRDb250ZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2RpZmllZENvbnRlbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubW9kaWZpZWRDb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tb2RpZmllZENvbnRlbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbW9kaWZpZWRDb250ZW50X2luaXRpYWxpemVycywgX21vZGlmaWVkQ29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU0KHRoaXMsIG51bGwsIF9vcmlnaW5hbExhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9yaWdpbmFsTGFiZWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9yaWdpbmFsTGFiZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3JpZ2luYWxMYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3JpZ2luYWxMYWJlbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcmlnaW5hbExhYmVsX2luaXRpYWxpemVycywgX29yaWdpbmFsTGFiZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NCh0aGlzLCBudWxsLCBfbW9kaWZpZWRMYWJlbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtb2RpZmllZExhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2RpZmllZExhYmVsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1vZGlmaWVkTGFiZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1vZGlmaWVkTGFiZWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbW9kaWZpZWRMYWJlbF9pbml0aWFsaXplcnMsIF9tb2RpZmllZExhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTQodGhpcywgbnVsbCwgX2xhbmd1YWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhbmd1YWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYW5ndWFnZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYW5ndWFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFuZ3VhZ2UgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzLCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NCh0aGlzLCBudWxsLCBfZmlsZVBhdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsZVBhdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZpbGVQYXRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZpbGVQYXRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWxlUGF0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9maWxlUGF0aF9pbml0aWFsaXplcnMsIF9maWxlUGF0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU0KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1dvcmtzcGFjZURpZmZFZGl0b3IyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIERFTU8KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgCiAgICA8ZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3IKICAgICAgLm9yaWdpbmFsQ29udGVudD0keydmdW5jdGlvbiBoZWxsbygpIHtcbiAgY29uc29sZS5sb2coIkhlbGxvIik7XG59J30KICAgICAgLm1vZGlmaWVkQ29udGVudD0keydmdW5jdGlvbiBoZWxsbygpIHtcbiAgY29uc29sZS5sb2coIkhlbGxvIFdvcmxkISIpO1xuICByZXR1cm4gdHJ1ZTtcbn0nfQogICAgICAubGFuZ3VhZ2U9JHsidHlwZXNjcmlwdCJ9CiAgICAgIC5maWxlUGF0aD0keyIvZGVtby9leGFtcGxlLnRzIn0KICAgID48L2RlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yPgogIGA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICAvLyBJTlNUQU5DRQogICAgZGlmZkVkaXRvckRlZmVycmVkID0gZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cHJvbWlzZS5kZWZlcigpOwogICAgI29yaWdpbmFsQ29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfb3JpZ2luYWxDb250ZW50X2luaXRpYWxpemVycywgIiIpOwogICAgZ2V0IG9yaWdpbmFsQ29udGVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI29yaWdpbmFsQ29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG9yaWdpbmFsQ29udGVudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb3JpZ2luYWxDb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbW9kaWZpZWRDb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfb3JpZ2luYWxDb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfbW9kaWZpZWRDb250ZW50X2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBtb2RpZmllZENvbnRlbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtb2RpZmllZENvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtb2RpZmllZENvbnRlbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21vZGlmaWVkQ29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI29yaWdpbmFsTGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU1KHRoaXMsIF9tb2RpZmllZENvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU1KHRoaXMsIF9vcmlnaW5hbExhYmVsX2luaXRpYWxpemVycywgIkRpc2sgVmVyc2lvbiIpKTsKICAgIGdldCBvcmlnaW5hbExhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jb3JpZ2luYWxMYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG9yaWdpbmFsTGFiZWwodmFsdWUyKSB7CiAgICAgIHRoaXMuI29yaWdpbmFsTGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtb2RpZmllZExhYmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfb3JpZ2luYWxMYWJlbF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTUodGhpcywgX21vZGlmaWVkTGFiZWxfaW5pdGlhbGl6ZXJzLCAiTG9jYWwgVmVyc2lvbiIpKTsKICAgIGdldCBtb2RpZmllZExhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jbW9kaWZpZWRMYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1vZGlmaWVkTGFiZWwodmFsdWUyKSB7CiAgICAgIHRoaXMuI21vZGlmaWVkTGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsYW5ndWFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTUodGhpcywgX21vZGlmaWVkTGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU1KHRoaXMsIF9sYW5ndWFnZV9pbml0aWFsaXplcnMsICJ0eXBlc2NyaXB0IikpOwogICAgZ2V0IGxhbmd1YWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYW5ndWFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNmaWxlUGF0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTUodGhpcywgX2xhbmd1YWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfZmlsZVBhdGhfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGZpbGVQYXRoKCkgewogICAgICByZXR1cm4gdGhpcy4jZmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBmaWxlUGF0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGRpZmZFZGl0b3IgPSAoX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfZmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgIG1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIG9yaWdpbmFsTW9kZWwgPSBudWxsOwogICAgbW9kaWZpZWRNb2RlbCA9IG51bGw7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgRG9tVG9vbHMuc2V0dXBEb21Ub29scygpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuZGlmZi13cmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZGlmZi10b29sYmFyIHsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmRpZmYtaW5mbyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC5kaWZmLWZpbGVuYW1lIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAuZGlmZi1sYWJlbHMgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLmRpZmYtYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuZGlmZi1jb250YWluZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm5hdi1idXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5maWxlUGF0aC5zcGxpdCgiLyIpLnBvcCgpIHx8ICJmaWxlIjsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJkaWZmLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtdG9vbGJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWZmLWluZm8iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZGlmZi1maWxlbmFtZSI+JHtmaWxlTmFtZX08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaWZmLWxhYmVscyI+JHt0aGlzLm9yaWdpbmFsTGFiZWx9IOKGlCAke3RoaXMubW9kaWZpZWRMYWJlbH08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtYWN0aW9ucyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hdi1idXR0b25zIj4KICAgICAgICAgICAgICA8ZGVlcy1idXR0b24KICAgICAgICAgICAgICAgIHR5cGU9Im91dGxpbmUiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmdvVG9QcmV2aW91c0RpZmZ9CiAgICAgICAgICAgICAgPlByZXZpb3VzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgICA8ZGVlcy1idXR0b24KICAgICAgICAgICAgICAgIHR5cGU9Im91dGxpbmUiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmdvVG9OZXh0RGlmZn0KICAgICAgICAgICAgICA+TmV4dDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24tYnV0dG9ucyI+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJoaWdobGlnaHRlZCIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuYWNjZXB0TG9jYWx9CiAgICAgICAgICAgICAgPlVzZSBMb2NhbDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJvdXRsaW5lIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5hY2NlcHREaXNrfQogICAgICAgICAgICAgID5Vc2UgRGlzazwvZGVlcy1idXR0b24+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJvdXRsaW5lIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5jbG9zZX0KICAgICAgICAgICAgICA+Q2xvc2U8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtY29udGFpbmVyIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBhd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQoLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7CiAgICAgIGF3YWl0IHRoaXMuaW5pdERpZmZFZGl0b3IoKTsKICAgIH0KICAgIGFzeW5jIGluaXREaWZmRWRpdG9yKCkgewogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kaWZmLWNvbnRhaW5lciIpOwogICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG1vbmFjb0NkbkJhc2UgPSBgaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9tb25hY28tZWRpdG9yQCR7TU9OQUNPX1ZFUlNJT059YDsKICAgICAgbGV0IG1vbmFjb0luc3RhbmNlID0gd2luZG93Lm1vbmFjbzsKICAgICAgaWYgKCFtb25hY29JbnN0YW5jZSkgewogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gewogICAgICAgICAgY29uc3QgY2hlY2tNb25hY28gPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgICAgIGlmICh3aW5kb3cubW9uYWNvKSB7CiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja01vbmFjbyk7CiAgICAgICAgICAgICAgcmVzb2x2ZTIoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMTAwKTsKICAgICAgICB9KTsKICAgICAgICBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgIH0KICAgICAgY29uc3QgZG9tdG9vbHNJbnN0YW5jZSA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBjb25zdCBpc0JyaWdodCA9IGRvbXRvb2xzSW5zdGFuY2UudGhlbWVNYW5hZ2VyLmdvQnJpZ2h0Qm9vbGVhbjsKICAgICAgY29uc3QgaW5pdGlhbFRoZW1lID0gaXNCcmlnaHQgPyAidnMiIDogInZzLWRhcmsiOwogICAgICBjb25zdCB0aW1lc3RhbXAyID0gRGF0ZS5ub3coKTsKICAgICAgY29uc3Qgb3JpZ2luYWxVcmkgPSBtb25hY29JbnN0YW5jZS5VcmkucGFyc2UoYGRpZmY6Ly9vcmlnaW5hbC8ke3RpbWVzdGFtcDJ9JHt0aGlzLmZpbGVQYXRofWApOwogICAgICBjb25zdCBtb2RpZmllZFVyaSA9IG1vbmFjb0luc3RhbmNlLlVyaS5wYXJzZShgZGlmZjovL21vZGlmaWVkLyR7dGltZXN0YW1wMn0ke3RoaXMuZmlsZVBhdGh9YCk7CiAgICAgIHRoaXMub3JpZ2luYWxNb2RlbCA9IG1vbmFjb0luc3RhbmNlLmVkaXRvci5jcmVhdGVNb2RlbCh0aGlzLm9yaWdpbmFsQ29udGVudCwgdGhpcy5sYW5ndWFnZSwgb3JpZ2luYWxVcmkpOwogICAgICB0aGlzLm1vZGlmaWVkTW9kZWwgPSBtb25hY29JbnN0YW5jZS5lZGl0b3IuY3JlYXRlTW9kZWwodGhpcy5tb2RpZmllZENvbnRlbnQsIHRoaXMubGFuZ3VhZ2UsIG1vZGlmaWVkVXJpKTsKICAgICAgdGhpcy5kaWZmRWRpdG9yID0gbW9uYWNvSW5zdGFuY2UuZWRpdG9yLmNyZWF0ZURpZmZFZGl0b3IoY29udGFpbmVyLCB7CiAgICAgICAgYXV0b21hdGljTGF5b3V0OiB0cnVlLAogICAgICAgIHJlYWRPbmx5OiBmYWxzZSwKICAgICAgICAvLyBBbGxvdyBlZGl0aW5nIHRoZSBtb2RpZmllZCAobG9jYWwpIHNpZGUKICAgICAgICBvcmlnaW5hbEVkaXRhYmxlOiBmYWxzZSwKICAgICAgICAvLyBEaXNrIHZlcnNpb24gaXMgcmVhZC1vbmx5CiAgICAgICAgcmVuZGVyU2lkZUJ5U2lkZTogdHJ1ZSwKICAgICAgICBpZ25vcmVUcmltV2hpdGVzcGFjZTogZmFsc2UsCiAgICAgICAgZm9udFNpemU6IDE0LAogICAgICAgIG1pbmltYXA6IHsKICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlCiAgICAgICAgfQogICAgICB9KTsKICAgICAgbW9uYWNvSW5zdGFuY2UuZWRpdG9yLnNldFRoZW1lKGluaXRpYWxUaGVtZSk7CiAgICAgIHRoaXMuZGlmZkVkaXRvci5zZXRNb2RlbCh7CiAgICAgICAgb3JpZ2luYWw6IHRoaXMub3JpZ2luYWxNb2RlbCwKICAgICAgICBtb2RpZmllZDogdGhpcy5tb2RpZmllZE1vZGVsCiAgICAgIH0pOwogICAgICB0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZ29CcmlnaHQpID0+IHsKICAgICAgICBjb25zdCBuZXdUaGVtZSA9IGdvQnJpZ2h0ID8gInZzIiA6ICJ2cy1kYXJrIjsKICAgICAgICBtb25hY29JbnN0YW5jZS5lZGl0b3Iuc2V0VGhlbWUobmV3VGhlbWUpOwogICAgICB9KTsKICAgICAgY29uc3QgY3NzSWQgPSAibW9uYWNvLWRpZmYtZWRpdG9yLWNzcyI7CiAgICAgIGlmICghdGhpcy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZChjc3NJZCkpIHsKICAgICAgICBjb25zdCBjc3NSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke21vbmFjb0NkbkJhc2V9L21pbi92cy9lZGl0b3IvZWRpdG9yLm1haW4uY3NzYCk7CiAgICAgICAgY29uc3QgY3NzVGV4dCA9IGF3YWl0IGNzc1Jlc3BvbnNlLnRleHQoKTsKICAgICAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgICAgIHN0eWxlRWxlbWVudC5pZCA9IGNzc0lkOwogICAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9IGNzc1RleHQ7CiAgICAgICAgdGhpcy5zaGFkb3dSb290Py5hcHBlbmQoc3R5bGVFbGVtZW50KTsKICAgICAgfQogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgdGhpcy5kaWZmRWRpdG9yPy5yZXZlYWxGaXJzdERpZmYoKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgIH0sIDEwMCk7CiAgICAgIHRoaXMuZGlmZkVkaXRvckRlZmVycmVkLnJlc29sdmUodGhpcy5kaWZmRWRpdG9yKTsKICAgIH0KICAgIGdvVG9OZXh0RGlmZigpIHsKICAgICAgdHJ5IHsKICAgICAgICB0aGlzLmRpZmZFZGl0b3I/LmdvVG9EaWZmKCJuZXh0Iik7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICB9CiAgICBnb1RvUHJldmlvdXNEaWZmKCkgewogICAgICB0cnkgewogICAgICAgIHRoaXMuZGlmZkVkaXRvcj8uZ29Ub0RpZmYoInByZXZpb3VzIik7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICB9CiAgICBhY2NlcHRMb2NhbCgpIHsKICAgICAgY29uc3QgbW9kaWZpZWRDb250ZW50ID0gdGhpcy5kaWZmRWRpdG9yPy5nZXRNb2RpZmllZEVkaXRvcigpLmdldFZhbHVlKCkgfHwgdGhpcy5tb2RpZmllZENvbnRlbnQ7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRpZmYtcmVzb2x2ZWQiLCB7CiAgICAgICAgZGV0YWlsOiB7IGFjdGlvbjogInVzZS1sb2NhbCIsIGNvbnRlbnQ6IG1vZGlmaWVkQ29udGVudCB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgYWNjZXB0RGlzaygpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZGlmZi1yZXNvbHZlZCIsIHsKICAgICAgICBkZXRhaWw6IHsgYWN0aW9uOiAidXNlLWRpc2siLCBjb250ZW50OiB0aGlzLm9yaWdpbmFsQ29udGVudCB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgY2xvc2UoKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRpZmYtY2xvc2VkIiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICh0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uKSB7CiAgICAgICAgdGhpcy5tb25hY29UaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgIHRoaXMubW9uYWNvVGhlbWVTdWJzY3JpcHRpb24gPSBudWxsOwogICAgICB9CiAgICAgIGlmICh0aGlzLm9yaWdpbmFsTW9kZWwpIHsKICAgICAgICB0aGlzLm9yaWdpbmFsTW9kZWwuZGlzcG9zZSgpOwogICAgICAgIHRoaXMub3JpZ2luYWxNb2RlbCA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMubW9kaWZpZWRNb2RlbCkgewogICAgICAgIHRoaXMubW9kaWZpZWRNb2RlbC5kaXNwb3NlKCk7CiAgICAgICAgdGhpcy5tb2RpZmllZE1vZGVsID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5kaWZmRWRpdG9yKSB7CiAgICAgICAgdGhpcy5kaWZmRWRpdG9yLmRpc3Bvc2UoKTsKICAgICAgICB0aGlzLmRpZmZFZGl0b3IgPSBudWxsOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczU1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlRGlmZkVkaXRvcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CmluaXRfZ3JvdXBfcnVudGltZSgpOwppbml0X2RlZXNfd29ya3NwYWNlX3Rlcm1pbmFsKCk7CmluaXRfZGVlc193b3Jrc3BhY2VfdGVybWluYWwoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF9kZWVzX2FjdGlvbmJhcigpOwp2YXIgX19lc0RlY29yYXRlNTUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczU2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV29ya3NwYWNlID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13b3Jrc3BhY2UiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9kZWNvcmF0b3JzOwogIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdGlhbGl6YXRpb25Qcm9taXNlX2RlY29yYXRvcnM7CiAgbGV0IF9pbml0aWFsaXphdGlvblByb21pc2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbml0aWFsaXphdGlvblByb21pc2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dGaWxlVHJlZV9kZWNvcmF0b3JzOwogIGxldCBfc2hvd0ZpbGVUcmVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0ZpbGVUcmVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93VGVybWluYWxfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dUZXJtaW5hbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dUZXJtaW5hbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzOwogIGxldCBfZmlsZVRyZWVXaWR0aF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Rlcm1pbmFsSGVpZ2h0X2RlY29yYXRvcnM7CiAgbGV0IF90ZXJtaW5hbEhlaWdodF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Rlcm1pbmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcGVuRmlsZXNfZGVjb3JhdG9yczsKICBsZXQgX29wZW5GaWxlc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wZW5GaWxlc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZlRmlsZVBhdGhfZGVjb3JhdG9yczsKICBsZXQgX2FjdGl2ZUZpbGVQYXRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZlRmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzVGVybWluYWxDb2xsYXBzZWRfZGVjb3JhdG9yczsKICBsZXQgX2lzVGVybWluYWxDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc1Rlcm1pbmFsQ29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2RlY29yYXRvcnM7CiAgbGV0IF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNGaWxlVHJlZUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNJbml0aWFsaXppbmdfZGVjb3JhdG9yczsKICBsZXQgX2lzSW5pdGlhbGl6aW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNJbml0aWFsaXppbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2ZUJvdHRvbVBhbmVsX2RlY29yYXRvcnM7CiAgbGV0IF9hY3RpdmVCb3R0b21QYW5lbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2ZUJvdHRvbVBhbmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaWFnbm9zdGljTWFya2Vyc19kZWNvcmF0b3JzOwogIGxldCBfZGlhZ25vc3RpY01hcmtlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaWFnbm9zdGljTWFya2Vyc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b1NhdmVfZGVjb3JhdG9yczsKICBsZXQgX2F1dG9TYXZlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b1NhdmVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2luaXRDb21tYW5kX2RlY29yYXRvcnM7CiAgbGV0IF9pbml0Q29tbWFuZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2luaXRDb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbml0T3V0cHV0X2RlY29yYXRvcnM7CiAgbGV0IF9pbml0T3V0cHV0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdE91dHB1dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudEZpbGVUcmVlV2lkdGhfZGVjb3JhdG9yczsKICBsZXQgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudEZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9kZWNvcmF0b3JzOwogIGxldCBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0RyYWdnaW5nRmlsZVRyZWVfZGVjb3JhdG9yczsKICBsZXQgX2lzRHJhZ2dpbmdGaWxlVHJlZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzRHJhZ2dpbmdGaWxlVHJlZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNEcmFnZ2luZ1Rlcm1pbmFsX2RlY29yYXRvcnM7CiAgbGV0IF9pc0RyYWdnaW5nVGVybWluYWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0RyYWdnaW5nVGVybWluYWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dEaWZmVmlld19kZWNvcmF0b3JzOwogIGxldCBfc2hvd0RpZmZWaWV3X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0RpZmZWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaWZmVmlld0NvbmZpZ19kZWNvcmF0b3JzOwogIGxldCBfZGlmZlZpZXdDb25maWdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaWZmVmlld0NvbmZpZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV29ya3NwYWNlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfaW5pdGlhbGl6YXRpb25Qcm9taXNlX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX3Nob3dGaWxlVHJlZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9zaG93VGVybWluYWxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfZmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3Rlcm1pbmFsSGVpZ2h0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfb3BlbkZpbGVzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9hY3RpdmVGaWxlUGF0aF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNUZXJtaW5hbENvbGxhcHNlZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNGaWxlVHJlZUNvbGxhcHNlZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNJbml0aWFsaXppbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2FjdGl2ZUJvdHRvbVBhbmVsX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kaWFnbm9zdGljTWFya2Vyc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfYXV0b1NhdmVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2luaXRDb21tYW5kX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pbml0T3V0cHV0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9jdXJyZW50RmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc0RyYWdnaW5nRmlsZVRyZWVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2lzRHJhZ2dpbmdUZXJtaW5hbF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2hvd0RpZmZWaWV3X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kaWZmVmlld0NvbmZpZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU1NSh0aGlzLCBudWxsLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZXhlY3V0aW9uRW52aXJvbm1lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImV4ZWN1dGlvbkVudmlyb25tZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV4ZWN1dGlvbkVudmlyb25tZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5leGVjdXRpb25FbnZpcm9ubWVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9leGVjdXRpb25FbnZpcm9ubWVudF9pbml0aWFsaXplcnMsIF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9pbml0aWFsaXphdGlvblByb21pc2VfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5pdGlhbGl6YXRpb25Qcm9taXNlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbml0aWFsaXphdGlvblByb21pc2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5pdGlhbGl6YXRpb25Qcm9taXNlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pbml0aWFsaXphdGlvblByb21pc2UgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5pdGlhbGl6YXRpb25Qcm9taXNlX2luaXRpYWxpemVycywgX2luaXRpYWxpemF0aW9uUHJvbWlzZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9zaG93RmlsZVRyZWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0ZpbGVUcmVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93RmlsZVRyZWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0ZpbGVUcmVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93RmlsZVRyZWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0ZpbGVUcmVlX2luaXRpYWxpemVycywgX3Nob3dGaWxlVHJlZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9zaG93VGVybWluYWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1Rlcm1pbmFsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93VGVybWluYWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd1Rlcm1pbmFsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93VGVybWluYWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1Rlcm1pbmFsX2luaXRpYWxpemVycywgX3Nob3dUZXJtaW5hbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9maWxlVHJlZVdpZHRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImZpbGVUcmVlV2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZpbGVUcmVlV2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsZVRyZWVXaWR0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZmlsZVRyZWVXaWR0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9maWxlVHJlZVdpZHRoX2luaXRpYWxpemVycywgX2ZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NSh0aGlzLCBudWxsLCBfdGVybWluYWxIZWlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGVybWluYWxIZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRlcm1pbmFsSGVpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRlcm1pbmFsSGVpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50ZXJtaW5hbEhlaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXJtaW5hbEhlaWdodF9pbml0aWFsaXplcnMsIF90ZXJtaW5hbEhlaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9vcGVuRmlsZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3BlbkZpbGVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvcGVuRmlsZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3BlbkZpbGVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcGVuRmlsZXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3BlbkZpbGVzX2luaXRpYWxpemVycywgX29wZW5GaWxlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9hY3RpdmVGaWxlUGF0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmVGaWxlUGF0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZlRmlsZVBhdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlRmlsZVBhdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2ZUZpbGVQYXRoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2ZUZpbGVQYXRoX2luaXRpYWxpemVycywgX2FjdGl2ZUZpbGVQYXRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2lzVGVybWluYWxDb2xsYXBzZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNUZXJtaW5hbENvbGxhcHNlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNUZXJtaW5hbENvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc1Rlcm1pbmFsQ29sbGFwc2VkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc1Rlcm1pbmFsQ29sbGFwc2VkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzVGVybWluYWxDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfaXNUZXJtaW5hbENvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzRmlsZVRyZWVDb2xsYXBzZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRmlsZVRyZWVDb2xsYXBzZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNGaWxlVHJlZUNvbGxhcHNlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNGaWxlVHJlZUNvbGxhcHNlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2luaXRpYWxpemVycywgX2lzRmlsZVRyZWVDb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NSh0aGlzLCBudWxsLCBfaXNJbml0aWFsaXppbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNJbml0aWFsaXppbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzSW5pdGlhbGl6aW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzSW5pdGlhbGl6aW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc0luaXRpYWxpemluZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0luaXRpYWxpemluZ19pbml0aWFsaXplcnMsIF9pc0luaXRpYWxpemluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9hY3RpdmVCb3R0b21QYW5lbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmVCb3R0b21QYW5lbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZlQm90dG9tUGFuZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlQm90dG9tUGFuZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2ZUJvdHRvbVBhbmVsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2ZUJvdHRvbVBhbmVsX2luaXRpYWxpemVycywgX2FjdGl2ZUJvdHRvbVBhbmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2RpYWdub3N0aWNNYXJrZXJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpYWdub3N0aWNNYXJrZXJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaWFnbm9zdGljTWFya2VycyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaWFnbm9zdGljTWFya2Vycywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlhZ25vc3RpY01hcmtlcnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlhZ25vc3RpY01hcmtlcnNfaW5pdGlhbGl6ZXJzLCBfZGlhZ25vc3RpY01hcmtlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NSh0aGlzLCBudWxsLCBfYXV0b1NhdmVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXV0b1NhdmUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9TYXZlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmF1dG9TYXZlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hdXRvU2F2ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvU2F2ZV9pbml0aWFsaXplcnMsIF9hdXRvU2F2ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9pbml0Q29tbWFuZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbml0Q29tbWFuZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdENvbW1hbmQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5pdENvbW1hbmQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmluaXRDb21tYW5kID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2luaXRDb21tYW5kX2luaXRpYWxpemVycywgX2luaXRDb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2luaXRPdXRwdXRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5pdE91dHB1dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdE91dHB1dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pbml0T3V0cHV0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pbml0T3V0cHV0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2luaXRPdXRwdXRfaW5pdGlhbGl6ZXJzLCBfaW5pdE91dHB1dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9jdXJyZW50RmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50RmlsZVRyZWVXaWR0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudEZpbGVUcmVlV2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudEZpbGVUcmVlV2lkdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1cnJlbnRGaWxlVHJlZVdpZHRoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2luaXRpYWxpemVycywgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50VGVybWluYWxIZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRUZXJtaW5hbEhlaWdodCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50VGVybWluYWxIZWlnaHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1cnJlbnRUZXJtaW5hbEhlaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jdXJyZW50VGVybWluYWxIZWlnaHRfaW5pdGlhbGl6ZXJzLCBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2lzRHJhZ2dpbmdGaWxlVHJlZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0RyYWdnaW5nRmlsZVRyZWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmdGaWxlVHJlZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0RyYWdnaW5nRmlsZVRyZWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzRHJhZ2dpbmdGaWxlVHJlZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nRmlsZVRyZWVfaW5pdGlhbGl6ZXJzLCBfaXNEcmFnZ2luZ0ZpbGVUcmVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2lzRHJhZ2dpbmdUZXJtaW5hbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0RyYWdnaW5nVGVybWluYWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmdUZXJtaW5hbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0RyYWdnaW5nVGVybWluYWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzRHJhZ2dpbmdUZXJtaW5hbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nVGVybWluYWxfaW5pdGlhbGl6ZXJzLCBfaXNEcmFnZ2luZ1Rlcm1pbmFsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX3Nob3dEaWZmVmlld19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93RGlmZlZpZXciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dEaWZmVmlldyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93RGlmZlZpZXcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dEaWZmVmlldyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93RGlmZlZpZXdfaW5pdGlhbGl6ZXJzLCBfc2hvd0RpZmZWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2RpZmZWaWV3Q29uZmlnX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpZmZWaWV3Q29uZmlnIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaWZmVmlld0NvbmZpZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaWZmVmlld0NvbmZpZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlmZlZpZXdDb25maWcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlmZlZpZXdDb25maWdfaW5pdGlhbGl6ZXJzLCBfZGlmZlZpZXdDb25maWdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXb3Jrc3BhY2UyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gewogICAgICBjb25zdCBlbnYyID0gbmV3IFdlYkNvbnRhaW5lckVudmlyb25tZW50KCk7CiAgICAgIGNvbnN0IG1vdW50UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgYXdhaXQgZW52Mi5pbml0KCk7CiAgICAgICAgY29uc3QgZmlsZVRyZWUgPSB7CiAgICAgICAgICAicGFja2FnZS5qc29uIjogewogICAgICAgICAgICBmaWxlOiB7CiAgICAgICAgICAgICAgY29udGVudHM6IEpTT04uc3RyaW5naWZ5KHsKICAgICAgICAgICAgICAgIG5hbWU6ICJkZW1vLXByb2plY3QiLAogICAgICAgICAgICAgICAgdmVyc2lvbjogIjEuMC4wIiwKICAgICAgICAgICAgICAgIHR5cGU6ICJtb2R1bGUiLAogICAgICAgICAgICAgICAgc2NyaXB0czogewogICAgICAgICAgICAgICAgICBidWlsZDogInRzYyIsCiAgICAgICAgICAgICAgICAgIGRldjogInRzYyAtLXdhdGNoIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llczogewogICAgICAgICAgICAgICAgICAiQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlIjogIl40LjIuMyIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBkZXZEZXBlbmRlbmNpZXM6IHsKICAgICAgICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIl4yMi4wLjAiLAogICAgICAgICAgICAgICAgICB0eXBlc2NyaXB0OiAiXjUuMC4wIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sIG51bGwsIDIpCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAibnBtZXh0cmEuanNvbiI6IHsKICAgICAgICAgICAgZmlsZTogewogICAgICAgICAgICAgIGNvbnRlbnRzOiBKU09OLnN0cmluZ2lmeSh7CiAgICAgICAgICAgICAgICBkZWVzRWRpdG9yV29ya3NwYWNlOiB7CiAgICAgICAgICAgICAgICAgIG9uSW5pdDogInBucG0gaW5zdGFsbCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LCBudWxsLCAyKQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgInRzY29uZmlnLmpzb24iOiB7CiAgICAgICAgICAgIGZpbGU6IHsKICAgICAgICAgICAgICBjb250ZW50czogSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7CiAgICAgICAgICAgICAgICAgIHRhcmdldDogIkVTMjAyMiIsCiAgICAgICAgICAgICAgICAgIG1vZHVsZTogIk5vZGVOZXh0IiwKICAgICAgICAgICAgICAgICAgbW9kdWxlUmVzb2x1dGlvbjogIk5vZGVOZXh0IiwKICAgICAgICAgICAgICAgICAgc3RyaWN0OiB0cnVlLAogICAgICAgICAgICAgICAgICBvdXREaXI6ICIuL2Rpc3QiLAogICAgICAgICAgICAgICAgICByb290RGlyOiAiLi9zcmMiLAogICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbjogdHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGluY2x1ZGU6IFsic3JjLyoqLyoiXQogICAgICAgICAgICAgIH0sIG51bGwsIDIpCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBzcmM6IHsKICAgICAgICAgICAgZGlyZWN0b3J5OiB7CiAgICAgICAgICAgICAgImluZGV4LnRzIjogewogICAgICAgICAgICAgICAgZmlsZTogewogICAgICAgICAgICAgICAgICBjb250ZW50czogYC8vIE1haW4gZW50cnkgcG9pbnQKaW1wb3J0IHsgZ3JlZXQsIGZvcm1hdE5hbWUgfSBmcm9tICcuL3V0aWxzLmpzJzsKCmNvbnN0IG5hbWUgPSBmb3JtYXROYW1lKCdXb3JsZCcpOwpjb25zb2xlLmxvZyhncmVldChuYW1lKSk7CgovLyBFeGFtcGxlIGFzeW5jIGZ1bmN0aW9uCmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7CiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCdIZWxsbyBmcm9tIGFzeW5jIScpOwogIGNvbnNvbGUubG9nKHJlc3VsdCk7Cn0KCm1haW4oKTsKYAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInV0aWxzLnRzIjogewogICAgICAgICAgICAgICAgZmlsZTogewogICAgICAgICAgICAgICAgICBjb250ZW50czogYC8vIFV0aWxpdHkgZnVuY3Rpb25zCgpleHBvcnQgaW50ZXJmYWNlIElVc2VyIHsKICBmaXJzdE5hbWU6IHN0cmluZzsKICBsYXN0TmFtZTogc3RyaW5nOwp9CgpleHBvcnQgZnVuY3Rpb24gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICByZXR1cm4gXGBIZWxsbywgXCR7bmFtZX0hXGA7Cn0KCmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgcmV0dXJuIG5hbWUudHJpbSgpLnRvVXBwZXJDYXNlKCk7Cn0KCmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVc2VyKGZpcnN0TmFtZTogc3RyaW5nLCBsYXN0TmFtZTogc3RyaW5nKTogSVVzZXIgewogIHJldHVybiB7IGZpcnN0TmFtZSwgbGFzdE5hbWUgfTsKfQpgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiaW1wb3J0dGVzdC50cyI6IHsKICAgICAgICAgICAgICAgIGZpbGU6IHsKICAgICAgICAgICAgICAgICAgY29udGVudHM6IGAvLyBUZXN0IG5wbSBwYWNrYWdlIGltcG9ydHMKaW1wb3J0ICogYXMgc21hcnRwcm9taXNlIGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZSc7CgovLyBUaGlzIHNob3VsZCBoYXZlIEludGVsbGlTZW5zZSBzaG93aW5nIGRlZmVyKCkgbWV0aG9kCmNvbnN0IGRlZmVycmVkID0gc21hcnRwcm9taXNlLmRlZmVyPHN0cmluZz4oKTsKCi8vIFRlc3QgdXNpbmcgdGhlIGRlZmVycmVkIHByb21pc2UKYXN5bmMgZnVuY3Rpb24gdGVzdFNtYXJ0UHJvbWlzZSgpIHsKICBzZXRUaW1lb3V0KCgpID0+IHsKICAgIGRlZmVycmVkLnJlc29sdmUoJ0hlbGxvIGZyb20gc21hcnRwcm9taXNlIScpOwogIH0sIDEwMCk7CgogIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlZmVycmVkLnByb21pc2U7CiAgY29uc29sZS5sb2cocmVzdWx0KTsKfQoKdGVzdFNtYXJ0UHJvbWlzZSgpOwpgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBhd2FpdCBlbnYyLm1vdW50KGZpbGVUcmVlKTsKICAgICAgfSkoKTsKICAgICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBjb250YWluZXJFbGVtZW50LnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IjsKICAgICAgY29uc3Qgd29ya3NwYWNlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZXMtd29ya3NwYWNlIik7CiAgICAgIHdvcmtzcGFjZUVsZW1lbnQuZXhlY3V0aW9uRW52aXJvbm1lbnQgPSBlbnYyOwogICAgICB3b3Jrc3BhY2VFbGVtZW50LmluaXRpYWxpemF0aW9uUHJvbWlzZSA9IG1vdW50UHJvbWlzZTsKICAgICAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh3b3Jrc3BhY2VFbGVtZW50KTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgICAgICAke2NvbnRhaW5lckVsZW1lbnR9CiAgICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIGA7CiAgICB9OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJXb3Jrc3BhY2UiOwogICAgI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9leGVjdXRpb25FbnZpcm9ubWVudF9pbml0aWFsaXplcnMsIG51bGwpOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBleGVjdXRpb25FbnZpcm9ubWVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZXhlY3V0aW9uRW52aXJvbm1lbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaW5pdGlhbGl6YXRpb25Qcm9taXNlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pbml0aWFsaXphdGlvblByb21pc2VfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgaW5pdGlhbGl6YXRpb25Qcm9taXNlKCkgewogICAgICByZXR1cm4gdGhpcy4jaW5pdGlhbGl6YXRpb25Qcm9taXNlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaW5pdGlhbGl6YXRpb25Qcm9taXNlKHZhbHVlMikgewogICAgICB0aGlzLiNpbml0aWFsaXphdGlvblByb21pc2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93RmlsZVRyZWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pbml0aWFsaXphdGlvblByb21pc2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9zaG93RmlsZVRyZWVfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd0ZpbGVUcmVlKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0ZpbGVUcmVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd0ZpbGVUcmVlKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93RmlsZVRyZWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93VGVybWluYWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9zaG93RmlsZVRyZWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9zaG93VGVybWluYWxfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd1Rlcm1pbmFsKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd1Rlcm1pbmFsX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1Rlcm1pbmFsKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93VGVybWluYWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNmaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfc2hvd1Rlcm1pbmFsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfZmlsZVRyZWVXaWR0aF9pbml0aWFsaXplcnMsIDI1MCkpOwogICAgZ2V0IGZpbGVUcmVlV2lkdGgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsZVRyZWVXaWR0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsZVRyZWVXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Rlcm1pbmFsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfZmlsZVRyZWVXaWR0aF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX3Rlcm1pbmFsSGVpZ2h0X2luaXRpYWxpemVycywgMjAwKSk7CiAgICBnZXQgdGVybWluYWxIZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0ZXJtaW5hbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRlcm1pbmFsSGVpZ2h0KHZhbHVlMikgewogICAgICB0aGlzLiN0ZXJtaW5hbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI29wZW5GaWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX3Rlcm1pbmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfb3BlbkZpbGVzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBvcGVuRmlsZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNvcGVuRmlsZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcGVuRmlsZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI29wZW5GaWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FjdGl2ZUZpbGVQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfb3BlbkZpbGVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfYWN0aXZlRmlsZVBhdGhfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGFjdGl2ZUZpbGVQYXRoKCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZlRmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3RpdmVGaWxlUGF0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWN0aXZlRmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc1Rlcm1pbmFsQ29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfYWN0aXZlRmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pc1Rlcm1pbmFsQ29sbGFwc2VkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc1Rlcm1pbmFsQ29sbGFwc2VkKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNUZXJtaW5hbENvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzVGVybWluYWxDb2xsYXBzZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzVGVybWluYWxDb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0ZpbGVUcmVlQ29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfaXNUZXJtaW5hbENvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2lzRmlsZVRyZWVDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzRmlsZVRyZWVDb2xsYXBzZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc0ZpbGVUcmVlQ29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNGaWxlVHJlZUNvbGxhcHNlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNGaWxlVHJlZUNvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzSW5pdGlhbGl6aW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfaXNGaWxlVHJlZUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2lzSW5pdGlhbGl6aW5nX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IGlzSW5pdGlhbGl6aW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNJbml0aWFsaXppbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0luaXRpYWxpemluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNJbml0aWFsaXppbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhY3RpdmVCb3R0b21QYW5lbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2lzSW5pdGlhbGl6aW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfYWN0aXZlQm90dG9tUGFuZWxfaW5pdGlhbGl6ZXJzLCAidGVybWluYWwiKSk7CiAgICBnZXQgYWN0aXZlQm90dG9tUGFuZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhY3RpdmVCb3R0b21QYW5lbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjdGl2ZUJvdHRvbVBhbmVsKHZhbHVlMikgewogICAgICB0aGlzLiNhY3RpdmVCb3R0b21QYW5lbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RpYWdub3N0aWNNYXJrZXJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfYWN0aXZlQm90dG9tUGFuZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9kaWFnbm9zdGljTWFya2Vyc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZGlhZ25vc3RpY01hcmtlcnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkaWFnbm9zdGljTWFya2Vyc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRpYWdub3N0aWNNYXJrZXJzKHZhbHVlMikgewogICAgICB0aGlzLiNkaWFnbm9zdGljTWFya2Vyc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgZWRpdG9yRWxlbWVudCA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9kaWFnbm9zdGljTWFya2Vyc19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgaW5pdGlhbGl6YXRpb25TdGFydGVkID0gZmFsc2U7CiAgICBpbnRlbGxpU2Vuc2VNYW5hZ2VyID0gbnVsbDsKICAgIGludGVsbGlTZW5zZUluaXRpYWxpemVkID0gZmFsc2U7CiAgICAvLyBub2RlX21vZHVsZXMgd2F0Y2hlciBmb3IgYXV0by1sb2FkaW5nIHR5cGVzCiAgICBub2RlTW9kdWxlc1dhdGNoZXIgPSBudWxsOwogICAgbm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQgPSBudWxsOwogICAgaW50ZWxsaVNlbnNlRGVib3VuY2VUaW1lb3V0ID0gbnVsbDsKICAgIC8vIE9wZW4gZmlsZSB3YXRjaGVycyBmb3IgZXh0ZXJuYWwgY2hhbmdlIGRldGVjdGlvbgogICAgb3BlbkZpbGVXYXRjaGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBmaWxlQ2hhbmdlRGVib3VuY2UgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgYWN0aW9uYmFyRWxlbWVudCA9IG51bGw7CiAgICAjYXV0b1NhdmVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2F1dG9TYXZlX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgLy8gQXV0by1zYXZlIGZ1bmN0aW9uYWxpdHkKICAgIGdldCBhdXRvU2F2ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2F1dG9TYXZlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXV0b1NhdmUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2F1dG9TYXZlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBhdXRvU2F2ZUludGVydmFsID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2F1dG9TYXZlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAjaW5pdENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2luaXRDb21tYW5kX2luaXRpYWxpemVycywgIiIpOwogICAgLy8gSW5pdCB0ZXJtaW5hbCBwcmV2aWV3IHN0YXRlCiAgICBnZXQgaW5pdENvbW1hbmQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbml0Q29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGluaXRDb21tYW5kKHZhbHVlMikgewogICAgICB0aGlzLiNpbml0Q29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2luaXRPdXRwdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pbml0Q29tbWFuZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2luaXRPdXRwdXRfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IGluaXRPdXRwdXQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbml0T3V0cHV0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaW5pdE91dHB1dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaW5pdE91dHB1dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1cnJlbnRGaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfaW5pdE91dHB1dF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2luaXRpYWxpemVycywgMjUwKSk7CiAgICAvLyBSZXNpemUgc3RhdGUKICAgIGdldCBjdXJyZW50RmlsZVRyZWVXaWR0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRGaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VycmVudEZpbGVUcmVlV2lkdGgodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1cnJlbnRGaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VycmVudFRlcm1pbmFsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfY3VycmVudEZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9jdXJyZW50VGVybWluYWxIZWlnaHRfaW5pdGlhbGl6ZXJzLCAyMDApKTsKICAgIGdldCBjdXJyZW50VGVybWluYWxIZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjdXJyZW50VGVybWluYWxIZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50VGVybWluYWxIZWlnaHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1cnJlbnRUZXJtaW5hbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzRHJhZ2dpbmdGaWxlVHJlZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2lzRHJhZ2dpbmdGaWxlVHJlZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNEcmFnZ2luZ0ZpbGVUcmVlKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNEcmFnZ2luZ0ZpbGVUcmVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNEcmFnZ2luZ0ZpbGVUcmVlKHZhbHVlMikgewogICAgICB0aGlzLiNpc0RyYWdnaW5nRmlsZVRyZWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0RyYWdnaW5nVGVybWluYWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pc0RyYWdnaW5nRmlsZVRyZWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pc0RyYWdnaW5nVGVybWluYWxfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzRHJhZ2dpbmdUZXJtaW5hbCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzRHJhZ2dpbmdUZXJtaW5hbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzRHJhZ2dpbmdUZXJtaW5hbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNEcmFnZ2luZ1Rlcm1pbmFsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hvd0RpZmZWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfaXNEcmFnZ2luZ1Rlcm1pbmFsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfc2hvd0RpZmZWaWV3X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIC8vIERpZmYgdmlldyBzdGF0ZQogICAgZ2V0IHNob3dEaWZmVmlldygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dEaWZmVmlld19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dEaWZmVmlldyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd0RpZmZWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZGlmZlZpZXdDb25maWdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9zaG93RGlmZlZpZXdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9kaWZmVmlld0NvbmZpZ19pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCBkaWZmVmlld0NvbmZpZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RpZmZWaWV3Q29uZmlnX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGlmZlZpZXdDb25maWcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2RpZmZWaWV3Q29uZmlnX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBLZXlib2FyZCBzaG9ydGN1dCBoYW5kbGVyIChib3VuZCBmb3IgcHJvcGVyIGNsZWFudXApCiAgICBrZXlkb3duSGFuZGxlciA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9kaWZmVmlld0NvbmZpZ19leHRyYUluaXRpYWxpemVycyksIChlMTEpID0+IHsKICAgICAgaWYgKChlMTEubWV0YUtleSB8fCBlMTEuY3RybEtleSkgJiYgZTExLmtleSA9PT0gInMiICYmICFlMTEuc2hpZnRLZXkpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnNhdmVBY3RpdmVGaWxlKCk7CiAgICAgIH0KICAgICAgaWYgKChlMTEubWV0YUtleSB8fCBlMTEuY3RybEtleSkgJiYgZTExLnNoaWZ0S2V5ICYmIGUxMS5rZXkudG9Mb3dlckNhc2UoKSA9PT0gInMiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy5zYXZlQWxsRmlsZXMoKTsKICAgICAgfQogICAgfSk7CiAgICAvLyA9PT09PT09PT09IEZpbGV0cmVlIFJlc2l6ZSBIYW5kbGVycyA9PT09PT09PT09CiAgICBoYW5kbGVGaWxlVHJlZU1vdXNlRG93biA9IChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHRoaXMuaXNEcmFnZ2luZ0ZpbGVUcmVlID0gdHJ1ZTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVGaWxlVHJlZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VVcCk7CiAgICB9OwogICAgaGFuZGxlRmlsZVRyZWVNb3VzZU1vdmUgPSAoZTExKSA9PiB7CiAgICAgIGlmICghdGhpcy5pc0RyYWdnaW5nRmlsZVRyZWUpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgY29uc3QgbW91c2VYID0gZTExLmNsaWVudFggLSBjb250YWluZXJSZWN0LmxlZnQ7CiAgICAgIGNvbnN0IG1pbldpZHRoID0gMTUwOwogICAgICBjb25zdCBtYXhXaWR0aCA9IGNvbnRhaW5lclJlY3Qud2lkdGggKiAwLjU7CiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgobWluV2lkdGgsIE1hdGgubWluKG1heFdpZHRoLCBtb3VzZVgpKTsKICAgICAgdGhpcy5jdXJyZW50RmlsZVRyZWVXaWR0aCA9IG5ld1dpZHRoOwogICAgfTsKICAgIGhhbmRsZUZpbGVUcmVlTW91c2VVcCA9ICgpID0+IHsKICAgICAgdGhpcy5pc0RyYWdnaW5nRmlsZVRyZWUgPSBmYWxzZTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVGaWxlVHJlZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VVcCk7CiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgicmVzaXplIikpOwogICAgfTsKICAgIC8vID09PT09PT09PT0gVGVybWluYWwgUmVzaXplIEhhbmRsZXJzID09PT09PT09PT0KICAgIGhhbmRsZVRlcm1pbmFsTW91c2VEb3duID0gKGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgdGhpcy5pc0RyYWdnaW5nVGVybWluYWwgPSB0cnVlOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZVRlcm1pbmFsTW91c2VNb3ZlKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZVVwKTsKICAgIH07CiAgICBoYW5kbGVUZXJtaW5hbE1vdXNlTW92ZSA9IChlMTEpID0+IHsKICAgICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmdUZXJtaW5hbCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCBtb3VzZVkgPSBlMTEuY2xpZW50WSAtIGNvbnRhaW5lclJlY3QudG9wOwogICAgICBjb25zdCB0ZXJtaW5hbEhlaWdodCA9IGNvbnRhaW5lclJlY3QuaGVpZ2h0IC0gbW91c2VZOwogICAgICBjb25zdCBtaW5IZWlnaHQgPSAxMDA7CiAgICAgIGNvbnN0IG1heEhlaWdodCA9IGNvbnRhaW5lclJlY3QuaGVpZ2h0ICogMC43OwogICAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLm1heChtaW5IZWlnaHQsIE1hdGgubWluKG1heEhlaWdodCwgdGVybWluYWxIZWlnaHQpKTsKICAgICAgdGhpcy5jdXJyZW50VGVybWluYWxIZWlnaHQgPSBuZXdIZWlnaHQ7CiAgICB9OwogICAgaGFuZGxlVGVybWluYWxNb3VzZVVwID0gKCkgPT4gewogICAgICB0aGlzLmlzRHJhZ2dpbmdUZXJtaW5hbCA9IGZhbHNlOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZVRlcm1pbmFsTW91c2VNb3ZlKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZVVwKTsKICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNpemUiKSk7CiAgICB9OwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NiUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2Utb3V0ZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2UtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZWRpdG9yLWFyZWEgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuZmlsZXRyZWUtcGFuZWwgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuZmlsZXRyZWUtcGFuZWwuY29sbGFwc2VkIHsKICAgICAgICB3aWR0aDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZWRpdG9yLXBhbmVsIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMjAwcHg7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1wYW5lbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1wYW5lbC5jb2xsYXBzZWQgewogICAgICAgIGhlaWdodDogMzJweCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAucGFuZWwtaGVhZGVyIHsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSA4JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5wYW5lbC1oZWFkZXItdGl0bGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgfQoKICAgICAgLnBhbmVsLWhlYWRlci1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5wYW5lbC1hY3Rpb24gewogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnBhbmVsLWFjdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMTglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMwJSkiLCAiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYnMtYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsICJoc2woMCAwJSA4JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLnRhYiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgICAgIG1heC13aWR0aDogMjAwcHg7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NCUpIiwgImhzbCgwIDAlIDEwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MiUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWIuYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDUwJSkiLCAiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItbmFtZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC50YWItY2xvc2UgewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50YWI6aG92ZXIgLnRhYi1jbG9zZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRhYi1jbG9zZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjUlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1tb2RpZmllZCB7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYnMtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLmVkaXRvci1tZW51LWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogNnB4IDhweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDRweDsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzLCBiYWNrZ3JvdW5kIDAuMTVzOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmVkaXRvci1tZW51LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjA4KSIsICJoc2woMCAwJSAxMDAlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDMycHg7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtcy1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAzMnB4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDA7CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNTUlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWI6aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA3NSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWIuYWN0aXZlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDUwJSkiLCAiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWItYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbWluLXdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBwYWRkaW5nOiAwIDVweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcwJSA1MCUpIiwgImhzbCgwIDcwJSA0NSUpIil9OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYi1iYWRnZS53YXJuaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDQwIDcwJSA1MCUpIiwgImhzbCg0MCA3MCUgNDUlKSIpfTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYi1iYWRnZS5ub25lIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAucHJvYmxlbXMtbGlzdCB7CiAgICAgICAgcGFkZGluZzogNHB4IDA7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA4MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xcyBlYXNlOwogICAgICB9CgogICAgICAucHJvYmxlbS1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICB9CgogICAgICAucHJvYmxlbS1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWljb24uZXJyb3IgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWljb24ud2FybmluZyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDAgNzAlIDUwJSkiLCAiaHNsKDQwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICAucHJvYmxlbS1kZXRhaWxzIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLnByb2JsZW0tbWVzc2FnZSB7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLnByb2JsZW0tbG9jYXRpb24gewogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtcy1lbXB0eSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTUlKSIsICJoc2woMCAwJSA1MCUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDUwJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICAgIGZyb20geyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfQogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfQogICAgICB9CgogICAgICAuaW5pdGlhbGl6aW5nIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLmluaXRpYWxpemluZyBkZWVzLWljb24gewogICAgICAgIGFuaW1hdGlvbjogc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIC5pbml0aWFsaXppbmcgZGVlcy13b3Jrc3BhY2UtdGVybWluYWwtcHJldmlldyB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICB3aWR0aDogODAlOwogICAgICAgIG1heC13aWR0aDogNjAwcHg7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIGRlZXMtd29ya3NwYWNlLW1vbmFjbyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtdGVybWluYWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIFJlc2l6ZSBoYW5kbGVzICovCiAgICAgIC5yZXNpemUtaGFuZGxlLXZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS12ZXJ0aWNhbDpob3ZlciwKICAgICAgLnJlc2l6ZS1oYW5kbGUtdmVydGljYWwuZHJhZ2dpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM1OGE2ZmYiKX07CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLXZlcnRpY2FsOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICB3aWR0aDogMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmU3NjgxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDFweDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtdmVydGljYWw6aG92ZXI6OmFmdGVyLAogICAgICAucmVzaXplLWhhbmRsZS12ZXJ0aWNhbC5kcmFnZ2luZzo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtaG9yaXpvbnRhbCB7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgY3Vyc29yOiByb3ctcmVzaXplOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWw6aG92ZXIsCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWwuZHJhZ2dpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM1OGE2ZmYiKX07CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWw6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2ZTc2ODEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMXB4OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS1ob3Jpem9udGFsOmhvdmVyOjphZnRlciwKICAgICAgLnJlc2l6ZS1oYW5kbGUtaG9yaXpvbnRhbC5kcmFnZ2luZzo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLyogUHJldmVudCB0ZXh0IHNlbGVjdGlvbiB3aGlsZSBkcmFnZ2luZyAqLwogICAgICAud29ya3NwYWNlLWNvbnRhaW5lci5kcmFnZ2luZyB7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2UtY29udGFpbmVyLmRyYWdnaW5nIC5maWxldHJlZS1wYW5lbCwKICAgICAgLndvcmtzcGFjZS1jb250YWluZXIuZHJhZ2dpbmcgLmVkaXRvci1wYW5lbCwKICAgICAgLndvcmtzcGFjZS1jb250YWluZXIuZHJhZ2dpbmcgLnRlcm1pbmFsLXBhbmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IGNvbnRhaW5lckNsYXNzZXMgPSBbCiAgICAgICAgIndvcmtzcGFjZS1jb250YWluZXIiLAogICAgICAgIHRoaXMuaXNEcmFnZ2luZ0ZpbGVUcmVlIHx8IHRoaXMuaXNEcmFnZ2luZ1Rlcm1pbmFsID8gImRyYWdnaW5nIiA6ICIiCiAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTsKICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXppbmcpIHsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0iaW5pdGlhbGl6aW5nIj4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmxvYWRlcjIifSBpY29uU2l6ZT0iMzIiPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+SW5pdGlhbGl6aW5nIHdvcmtzcGFjZS4uLjwvc3Bhbj4KICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3CiAgICAgICAgICAgIC5jb21tYW5kPSR7dGhpcy5pbml0Q29tbWFuZCB8fCAiIn0KICAgICAgICAgICAgLmxpbmVzPSR7dGhpcy5pbml0T3V0cHV0fQogICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwtcHJldmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgICAgfQogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9IndvcmtzcGFjZS1vdXRlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iJHtjb250YWluZXJDbGFzc2VzfSI+CiAgICAgICAgICA8IS0tIEZpbGV0cmVlIHBhbmVsIChmdWxsIGhlaWdodCkgLS0+CiAgICAgICAgICAke3RoaXMuc2hvd0ZpbGVUcmVlID8gYjJgCiAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICBjbGFzcz0iZmlsZXRyZWUtcGFuZWwgJHt0aGlzLmlzRmlsZVRyZWVDb2xsYXBzZWQgPyAiY29sbGFwc2VkIiA6ICIifSIKICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6ICR7dGhpcy5pc0ZpbGVUcmVlQ29sbGFwc2VkID8gMCA6IHRoaXMuY3VycmVudEZpbGVUcmVlV2lkdGh9cHgiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUKICAgICAgICAgICAgICAgIC5leGVjdXRpb25FbnZpcm9ubWVudD0ke3RoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnR9CiAgICAgICAgICAgICAgICAuc2VsZWN0ZWRQYXRoPSR7dGhpcy5hY3RpdmVGaWxlUGF0aH0KICAgICAgICAgICAgICAgIEBmaWxlLXNlbGVjdD0ke3RoaXMuaGFuZGxlRmlsZVNlbGVjdH0KICAgICAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS1maWxldHJlZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICR7IXRoaXMuaXNGaWxlVHJlZUNvbGxhcHNlZCA/IGIyYAogICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgIGNsYXNzPSJyZXNpemUtaGFuZGxlLXZlcnRpY2FsICR7dGhpcy5pc0RyYWdnaW5nRmlsZVRyZWUgPyAiZHJhZ2dpbmciIDogIiJ9IgogICAgICAgICAgICAgICAgQG1vdXNlZG93bj0ke3RoaXMuaGFuZGxlRmlsZVRyZWVNb3VzZURvd259CiAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgPCEtLSBFZGl0b3IgKyBUZXJtaW5hbCBhcmVhIC0tPgogICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLWFyZWEiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItcGFuZWwiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYnMtYmFyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYnMtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgJHt0aGlzLm9wZW5GaWxlcy5tYXAoKGZpbGUpID0+IGIyYAogICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0YWIgJHtmaWxlLnBhdGggPT09IHRoaXMuYWN0aXZlRmlsZVBhdGggPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuYWN0aXZhdGVGaWxlKGZpbGUucGF0aCl9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgJHtmaWxlLm1vZGlmaWVkID8gYjJgPHNwYW4gY2xhc3M9InRhYi1tb2RpZmllZCI+PC9zcGFuPmAgOiAiIn0KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWItbmFtZSI+JHtmaWxlLm5hbWV9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1jbG9zZSIgQGNsaWNrPSR7KGUxMSkgPT4gdGhpcy5jbG9zZUZpbGUoZTExLCBmaWxlLnBhdGgpfT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6eCJ9IGljb25TaXplPSIxMiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItbWVudS1idXR0b24iIEBjbGljaz0ke3RoaXMuc2hvd0VkaXRvck1lbnV9IHRpdGxlPSJFZGl0b3Igb3B0aW9ucyI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOm1vcmVWZXJ0aWNhbCJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItY29udGVudCI+CiAgICAgICAgICAgICAgICAke3RoaXMuc2hvd0RpZmZWaWV3ICYmIHRoaXMuZGlmZlZpZXdDb25maWcgPyBiMmAKICAgICAgICAgICAgICAgICAgPGRlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yCiAgICAgICAgICAgICAgICAgICAgLmZpbGVQYXRoPSR7dGhpcy5kaWZmVmlld0NvbmZpZy5maWxlUGF0aH0KICAgICAgICAgICAgICAgICAgICAub3JpZ2luYWxDb250ZW50PSR7dGhpcy5kaWZmVmlld0NvbmZpZy5vcmlnaW5hbENvbnRlbnR9CiAgICAgICAgICAgICAgICAgICAgLm1vZGlmaWVkQ29udGVudD0ke3RoaXMuZGlmZlZpZXdDb25maWcubW9kaWZpZWRDb250ZW50fQogICAgICAgICAgICAgICAgICAgIC5sYW5ndWFnZT0ke3RoaXMuZGlmZlZpZXdDb25maWcubGFuZ3VhZ2V9CiAgICAgICAgICAgICAgICAgICAgQGRpZmYtcmVzb2x2ZWQ9JHt0aGlzLmhhbmRsZURpZmZSZXNvbHZlZH0KICAgICAgICAgICAgICAgICAgICBAZGlmZi1jbG9zZWQ9JHsoKSA9PiB7CiAgICAgICAgdGhpcy5zaG93RGlmZlZpZXcgPSBmYWxzZTsKICAgICAgICB0aGlzLmRpZmZWaWV3Q29uZmlnID0gbnVsbDsKICAgICAgfX0KICAgICAgICAgICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3I+CiAgICAgICAgICAgICAgICBgIDogdGhpcy5vcGVuRmlsZXMubGVuZ3RoID09PSAwID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpmaWxlQ29kZSJ9IGljb25TaXplPSI0OCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+U2VsZWN0IGEgZmlsZSB0byBlZGl0PC9zcGFuPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiBiMmAKICAgICAgICAgICAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1vbmFjbwogICAgICAgICAgICAgICAgICAgIC5maWxlUGF0aD0ke3RoaXMuYWN0aXZlRmlsZVBhdGh9CiAgICAgICAgICAgICAgICAgICAgLmNvbnRlbnQ9JHt0aGlzLmdldEFjdGl2ZUZpbGVDb250ZW50KCl9CiAgICAgICAgICAgICAgICAgICAgLmxhbmd1YWdlPSR7dGhpcy5nZXRMYW5ndWFnZUZyb21QYXRoKHRoaXMuYWN0aXZlRmlsZVBhdGgpfQogICAgICAgICAgICAgICAgICAgIEBjb250ZW50LWNoYW5nZT0ke3RoaXMuaGFuZGxlQ29udGVudENoYW5nZX0KICAgICAgICAgICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtbW9uYWNvPgogICAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGVlcy1hY3Rpb25iYXI+PC9kZWVzLWFjdGlvbmJhcj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIEhvcml6b250YWwgcmVzaXplIGhhbmRsZSBmb3IgdGVybWluYWwgLS0+CiAgICAgICAgICAgICR7dGhpcy5zaG93VGVybWluYWwgJiYgIXRoaXMuaXNUZXJtaW5hbENvbGxhcHNlZCA/IGIyYAogICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgIGNsYXNzPSJyZXNpemUtaGFuZGxlLWhvcml6b250YWwgJHt0aGlzLmlzRHJhZ2dpbmdUZXJtaW5hbCA/ICJkcmFnZ2luZyIgOiAiIn0iCiAgICAgICAgICAgICAgICBAbW91c2Vkb3duPSR7dGhpcy5oYW5kbGVUZXJtaW5hbE1vdXNlRG93bn0KICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgIGAgOiAiIn0KCiAgICAgICAgICAgIDwhLS0gVGVybWluYWwgcGFuZWwgLS0+CiAgICAgICAgICAgICR7dGhpcy5zaG93VGVybWluYWwgPyBiMmAKICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICBjbGFzcz0idGVybWluYWwtcGFuZWwgJHt0aGlzLmlzVGVybWluYWxDb2xsYXBzZWQgPyAiY29sbGFwc2VkIiA6ICIifSIKICAgICAgICAgICAgICAgIHN0eWxlPSJoZWlnaHQ6ICR7dGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkID8gMzIgOiB0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodH1weCIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC10YWJzIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icGFuZWwtdGFiICR7dGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9PT0gInRlcm1pbmFsIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9ICJ0ZXJtaW5hbCJ9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6dGVybWluYWwifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgICAgVGVybWluYWwKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icGFuZWwtdGFiICR7dGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9PT0gInByb2JsZW1zIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9ICJwcm9ibGVtcyJ9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Y2lyY2xlQWxlcnQifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgICAgUHJvYmxlbXMKICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5kaWFnbm9zdGljTWFya2Vycy5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYW5lbC10YWItYmFkZ2UgJHt0aGlzLmdldEVycm9yQ291bnQoKSA9PT0gMCA/ICJ3YXJuaW5nIiA6ICIifSI+JHt0aGlzLmRpYWdub3N0aWNNYXJrZXJzLmxlbmd0aH08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1oZWFkZXItYWN0aW9ucyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtYWN0aW9uIiBAY2xpY2s9JHt0aGlzLnRvZ2dsZVRlcm1pbmFsfT4KICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgICAgICAgICAgICAgLmljb249JHt0aGlzLmlzVGVybWluYWxDb2xsYXBzZWQgPyAibHVjaWRlOmNoZXZyb25VcCIgOiAibHVjaWRlOmNoZXZyb25Eb3duIn0KICAgICAgICAgICAgICAgICAgICAgICAgaWNvblNpemU9IjE0IgogICAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtY29udGVudCIgc3R5bGU9ImRpc3BsYXk6ICR7dGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9PT0gInRlcm1pbmFsIiA/ICJibG9jayIgOiAibm9uZSJ9Ij4KICAgICAgICAgICAgICAgICAgPGRlZXMtd29ya3NwYWNlLXRlcm1pbmFsCiAgICAgICAgICAgICAgICAgICAgLmV4ZWN1dGlvbkVudmlyb25tZW50PSR7dGhpcy5leGVjdXRpb25FbnZpcm9ubWVudH0KICAgICAgICAgICAgICAgICAgICAuc2V0dXBDb21tYW5kPSR7IiJ9CiAgICAgICAgICAgICAgICAgID48L2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ibGVtcy1jb250ZW50IiBzdHlsZT0iZGlzcGxheTogJHt0aGlzLmFjdGl2ZUJvdHRvbVBhbmVsID09PSAicHJvYmxlbXMiID8gImJsb2NrIiA6ICJub25lIn0iPgogICAgICAgICAgICAgICAgICAke3RoaXMucmVuZGVyUHJvYmxlbXNQYW5lbCgpfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIEJvdHRvbSBCYXIgKGZ1bGwgd2lkdGgpIC0tPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1ib3R0b21iYXIKICAgICAgICAgIC5leGVjdXRpb25FbnZpcm9ubWVudD0ke3RoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnR9CiAgICAgICAgICBAcnVuLXByb2Nlc3M9JHt0aGlzLmhhbmRsZVJ1blByb2Nlc3N9CiAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtYm90dG9tYmFyPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMua2V5ZG93bkhhbmRsZXIpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLmtleWRvd25IYW5kbGVyKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVGaWxlVHJlZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VVcCk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZU1vdmUpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5oYW5kbGVUZXJtaW5hbE1vdXNlVXApOwogICAgICBpZiAodGhpcy5hdXRvU2F2ZUludGVydmFsKSB7CiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9TYXZlSW50ZXJ2YWwpOwogICAgICAgIHRoaXMuYXV0b1NhdmVJbnRlcnZhbCA9IG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5zdG9wTm9kZU1vZHVsZXNXYXRjaGVyKCk7CiAgICAgIHRoaXMuc3RvcEFsbEZpbGVXYXRjaGVycygpOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLmN1cnJlbnRGaWxlVHJlZVdpZHRoID0gdGhpcy5maWxlVHJlZVdpZHRoOwogICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodCA9IHRoaXMudGVybWluYWxIZWlnaHQ7CiAgICAgIGlmICh0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplV29ya3NwYWNlKCk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiZXhlY3V0aW9uRW52aXJvbm1lbnQiKSAmJiB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplV29ya3NwYWNlKCk7CiAgICAgIH0KICAgICAgaWYgKCF0aGlzLmFjdGlvbmJhckVsZW1lbnQpIHsKICAgICAgICB0aGlzLmFjdGlvbmJhckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5lZGl0b3ItcGFuZWwgZGVlcy1hY3Rpb25iYXIiKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgaW5pdGlhbGl6ZVdvcmtzcGFjZSgpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgIHJldHVybjsKICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6YXRpb25TdGFydGVkKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5pbml0aWFsaXphdGlvblN0YXJ0ZWQgPSB0cnVlOwogICAgICB0aGlzLmlzSW5pdGlhbGl6aW5nID0gdHJ1ZTsKICAgICAgdHJ5IHsKICAgICAgICBpZiAodGhpcy5pbml0aWFsaXphdGlvblByb21pc2UpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlOwogICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZHkpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuaW5pdCgpOwogICAgICAgIH0KICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVPbkluaXRDb21tYW5kKCk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgd29ya3NwYWNlOiIsIGVycm9yKTsKICAgICAgICB0aGlzLmluaXRpYWxpemF0aW9uU3RhcnRlZCA9IGZhbHNlOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIHRoaXMuaXNJbml0aWFsaXppbmcgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBFeGVjdXRlIG9uSW5pdCBjb21tYW5kIGZyb20gbnBtZXh0cmEuanNvbiBpZiBwcmVzZW50CiAgICAgKiBUaGlzIGFsbG93cyBhdXRvbWF0aWMgc2V0dXAgbGlrZSBgcG5wbSBpbnN0YWxsYCBvbiB3b3Jrc3BhY2UgaW5pdGlhbGl6YXRpb24KICAgICAqLwogICAgYXN5bmMgZXhlY3V0ZU9uSW5pdENvbW1hbmQoKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKCIvbnBtZXh0cmEuanNvbiIpKSB7CiAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUoIi9ucG1leHRyYS5qc29uIik7CiAgICAgICAgICBjb25zdCBjb25maWczID0gSlNPTi5wYXJzZShjb250ZW50Myk7CiAgICAgICAgICBjb25zdCBvbkluaXQgPSBjb25maWczPy5kZWVzRWRpdG9yV29ya3NwYWNlPy5vbkluaXQ7CiAgICAgICAgICBpZiAob25Jbml0ICYmIHR5cGVvZiBvbkluaXQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJFeGVjdXRpbmcgb25Jbml0IGNvbW1hbmQ6Iiwgb25Jbml0KTsKICAgICAgICAgICAgdGhpcy5pbml0Q29tbWFuZCA9IG9uSW5pdDsKICAgICAgICAgICAgdGhpcy5pbml0T3V0cHV0ID0gW107CiAgICAgICAgICAgIGNvbnN0IFtjbWQsIC4uLmFyZ3NdID0gb25Jbml0LnNwbGl0KCIgIik7CiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3M0ID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5zcGF3bihjbWQsIGFyZ3MpOwogICAgICAgICAgICBwcm9jZXNzNC5vdXRwdXQucGlwZVRvKG5ldyBXcml0YWJsZVN0cmVhbSh7CiAgICAgICAgICAgICAgd3JpdGU6IChkYXRhKSA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBsaW5lcyA9IGRhdGEuc3BsaXQoIlxuIik7CiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHsKICAgICAgICAgICAgICAgICAgaWYgKGxpbmUpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRPdXRwdXQgPSBbLi4udGhpcy5pbml0T3V0cHV0LCBsaW5lXTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkpOwogICAgICAgICAgICBjb25zdCBleGl0Q29kZSA9IGF3YWl0IHByb2Nlc3M0LmV4aXQ7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJvbkluaXQgY29tbWFuZCBjb21wbGV0ZWQgd2l0aCBleGl0IGNvZGU6IiwgZXhpdENvZGUpOwogICAgICAgICAgICB0aGlzLmluaXRPdXRwdXQgPSBbLi4udGhpcy5pbml0T3V0cHV0LCAiIiwgYENvbW1hbmQgY29tcGxldGVkIHdpdGggZXhpdCBjb2RlOiAke2V4aXRDb2RlfWBdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBleGVjdXRlIG9uSW5pdCBjb21tYW5kOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgaW5pdGlhbGl6ZUludGVsbGlTZW5zZSgpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgIHJldHVybjsKICAgICAgaWYgKHRoaXMuaW50ZWxsaVNlbnNlSW5pdGlhbGl6ZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgbW9uYWNvSW5zdGFuY2UgPSB3aW5kb3cubW9uYWNvOwogICAgICBpZiAoIW1vbmFjb0luc3RhbmNlKSB7CiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCAxMDApKTsKICAgICAgICBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgIH0KICAgICAgaWYgKCFtb25hY29JbnN0YW5jZSkgewogICAgICAgIGNvbnNvbGUud2FybigiTW9uYWNvIG5vdCB5ZXQgbG9hZGVkLCBJbnRlbGxpU2Vuc2Ugd2lsbCBiZSBpbml0aWFsaXplZCBsYXRlciIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLmludGVsbGlTZW5zZUluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyID0gbmV3IFR5cGVTY3JpcHRJbnRlbGxpU2Vuc2VNYW5hZ2VyKCk7CiAgICAgIGF3YWl0IHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlci5pbml0KG1vbmFjb0luc3RhbmNlLCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KTsKICAgICAgdGhpcy5zZXR1cE1hcmtlckxpc3RlbmVyKCk7CiAgICAgIHRoaXMuc3RhcnROb2RlTW9kdWxlc1dhdGNoZXIoKTsKICAgICAgYXdhaXQgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLnNjYW5BbmRMb2FkTmV3UGFja2FnZVR5cGVzKCk7CiAgICB9CiAgICAvKioKICAgICAqIFdhdGNoIG5vZGVfbW9kdWxlcyBmb3IgY2hhbmdlcyAoZS5nLiwgYWZ0ZXIgcG5wbSBpbnN0YWxsKQogICAgICogYW5kIGF1dG9tYXRpY2FsbHkgbG9hZCB0eXBlcyBmb3IgbmV3IHBhY2thZ2VzCiAgICAgKi8KICAgIHN0YXJ0Tm9kZU1vZHVsZXNXYXRjaGVyKCkgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQgfHwgdGhpcy5ub2RlTW9kdWxlc1dhdGNoZXIpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIHRoaXMubm9kZU1vZHVsZXNXYXRjaGVyID0gdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53YXRjaCgiL25vZGVfbW9kdWxlcyIsIChfZXZlbnQsIF9maWxlbmFtZSkgPT4gewogICAgICAgICAgaWYgKHRoaXMubm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQpIHsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5ub2RlTW9kdWxlc0RlYm91bmNlVGltZW91dCA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4gewogICAgICAgICAgICBpZiAodGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyKSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLnNjYW5BbmRMb2FkTmV3UGFja2FnZVR5cGVzKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgfSwgeyByZWN1cnNpdmU6IHRydWUgfSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJDb3VsZCBub3Qgd2F0Y2ggbm9kZV9tb2R1bGVzOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgc3RvcE5vZGVNb2R1bGVzV2F0Y2hlcigpIHsKICAgICAgaWYgKHRoaXMubm9kZU1vZHVsZXNXYXRjaGVyKSB7CiAgICAgICAgdGhpcy5ub2RlTW9kdWxlc1dhdGNoZXIuc3RvcCgpOwogICAgICAgIHRoaXMubm9kZU1vZHVsZXNXYXRjaGVyID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5ub2RlTW9kdWxlc0RlYm91bmNlVGltZW91dCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm5vZGVNb2R1bGVzRGVib3VuY2VUaW1lb3V0KTsKICAgICAgICB0aGlzLm5vZGVNb2R1bGVzRGVib3VuY2VUaW1lb3V0ID0gbnVsbDsKICAgICAgfQogICAgfQogICAgLy8gPT09PT09PT09PSBPcGVuIEZpbGUgV2F0Y2hpbmcgZm9yIEV4dGVybmFsIENoYW5nZXMgPT09PT09PT09PQogICAgLyoqCiAgICAgKiBTdGFydCB3YXRjaGluZyBhbiBvcGVuIGZpbGUgZm9yIGV4dGVybmFsIGNoYW5nZXMKICAgICAqLwogICAgc3RhcnRXYXRjaGluZ0ZpbGUocGF0aDIpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50IHx8IHRoaXMub3BlbkZpbGVXYXRjaGVycy5oYXMocGF0aDIpKQogICAgICAgIHJldHVybjsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCB3YXRjaGVyID0gdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53YXRjaChwYXRoMiwgKF9ldmVudCwgX2ZpbGVuYW1lKSA9PiB7CiAgICAgICAgICBjb25zdCBleGlzdGluZ1RpbWVvdXQgPSB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5nZXQocGF0aDIpOwogICAgICAgICAgaWYgKGV4aXN0aW5nVGltZW91dCkgewogICAgICAgICAgICBjbGVhclRpbWVvdXQoZXhpc3RpbmdUaW1lb3V0KTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHRpbWVvdXQyID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXh0ZXJuYWxGaWxlQ2hhbmdlKHBhdGgyKTsKICAgICAgICAgICAgdGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuZGVsZXRlKHBhdGgyKTsKICAgICAgICAgIH0sIDMwMCk7CiAgICAgICAgICB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5zZXQocGF0aDIsIHRpbWVvdXQyKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLm9wZW5GaWxlV2F0Y2hlcnMuc2V0KHBhdGgyLCB3YXRjaGVyKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLndhcm4oYENvdWxkIG5vdCB3YXRjaCBmaWxlICR7cGF0aDJ9OmAsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBTdG9wIHdhdGNoaW5nIGEgZmlsZSB3aGVuIGl0J3MgY2xvc2VkCiAgICAgKi8KICAgIHN0b3BXYXRjaGluZ0ZpbGUocGF0aDIpIHsKICAgICAgY29uc3Qgd2F0Y2hlciA9IHRoaXMub3BlbkZpbGVXYXRjaGVycy5nZXQocGF0aDIpOwogICAgICBpZiAod2F0Y2hlcikgewogICAgICAgIHdhdGNoZXIuc3RvcCgpOwogICAgICAgIHRoaXMub3BlbkZpbGVXYXRjaGVycy5kZWxldGUocGF0aDIpOwogICAgICB9CiAgICAgIGNvbnN0IHRpbWVvdXQyID0gdGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuZ2V0KHBhdGgyKTsKICAgICAgaWYgKHRpbWVvdXQyKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTsKICAgICAgICB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5kZWxldGUocGF0aDIpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFN0b3AgYWxsIGZpbGUgd2F0Y2hlcnMKICAgICAqLwogICAgc3RvcEFsbEZpbGVXYXRjaGVycygpIHsKICAgICAgZm9yIChjb25zdCB3YXRjaGVyIG9mIHRoaXMub3BlbkZpbGVXYXRjaGVycy52YWx1ZXMoKSkgewogICAgICAgIHdhdGNoZXIuc3RvcCgpOwogICAgICB9CiAgICAgIHRoaXMub3BlbkZpbGVXYXRjaGVycy5jbGVhcigpOwogICAgICBmb3IgKGNvbnN0IHRpbWVvdXQyIG9mIHRoaXMuZmlsZUNoYW5nZURlYm91bmNlLnZhbHVlcygpKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTsKICAgICAgfQogICAgICB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5jbGVhcigpOwogICAgfQogICAgLyoqCiAgICAgKiBIYW5kbGUgZXh0ZXJuYWwgZmlsZSBjaGFuZ2UgLSBzaG93IGFjdGlvbmJhciBpZiBmaWxlIGhhcyBsb2NhbCBjaGFuZ2VzLAogICAgICogb3RoZXJ3aXNlIHNpbGVudGx5IHVwZGF0ZSB3aXRoIGN1cnNvciBwcmVzZXJ2YXRpb24KICAgICAqLwogICAgYXN5bmMgaGFuZGxlRXh0ZXJuYWxGaWxlQ2hhbmdlKHBhdGgyKSB7CiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLm9wZW5GaWxlcy5maW5kKChmNykgPT4gZjcucGF0aCA9PT0gcGF0aDIpOwogICAgICBpZiAoIWZpbGUgfHwgIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKHBhdGgyKTsKICAgICAgICBpZiAobmV3Q29udGVudCA9PT0gZmlsZS5jb250ZW50KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmIChmaWxlLm1vZGlmaWVkKSB7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFjdGlvbmJhckVsZW1lbnQ/LnNob3coewogICAgICAgICAgICBtZXNzYWdlOiBgIiR7ZmlsZS5uYW1lfSIgY2hhbmdlZCBvbiBkaXNrLiBXaGF0IGRvIHlvdSB3YW50IHRvIGRvP2AsCiAgICAgICAgICAgIHR5cGU6ICJxdWVzdGlvbiIsCiAgICAgICAgICAgIGljb246ICJsdWNpZGU6Z2l0TWVyZ2UiLAogICAgICAgICAgICBhY3Rpb25zOiBbCiAgICAgICAgICAgICAgeyBpZDogImxvYWQtZGlzayIsIGxhYmVsOiAiTG9hZCBmcm9tIERpc2siLCBwcmltYXJ5OiB0cnVlIH0sCiAgICAgICAgICAgICAgeyBpZDogInNhdmUtbG9jYWwiLCBsYWJlbDogIlNhdmUgTG9jYWwgdG8gRGlzayIgfSwKICAgICAgICAgICAgICB7IGlkOiAiY29tcGFyZSIsIGxhYmVsOiAiQ29tcGFyZSIgfQogICAgICAgICAgICBdLAogICAgICAgICAgICB0aW1lb3V0OiB7IGR1cmF0aW9uOiAxNWUzLCBkZWZhdWx0QWN0aW9uSWQ6ICJsb2FkLWRpc2siIH0sCiAgICAgICAgICAgIGRpc21pc3NpYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmIChyZXN1bHQ/LmFjdGlvbklkID09PSAibG9hZC1kaXNrIikgewogICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUZpbGVDb250ZW50KHBhdGgyLCBuZXdDb250ZW50LCBmYWxzZSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdD8uYWN0aW9uSWQgPT09ICJzYXZlLWxvY2FsIikgewogICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShwYXRoMiwgZmlsZS5jb250ZW50KTsKICAgICAgICAgICAgdGhpcy5vcGVuRmlsZXMgPSB0aGlzLm9wZW5GaWxlcy5tYXAoKGY3KSA9PiBmNy5wYXRoID09PSBwYXRoMiA/IHsgLi4uZjcsIG1vZGlmaWVkOiBmYWxzZSB9IDogZjcpOwogICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQ/LmFjdGlvbklkID09PSAiY29tcGFyZSIpIHsKICAgICAgICAgICAgdGhpcy5vcGVuRGlmZlZpZXcocGF0aDIsIGZpbGUuY29udGVudCwgbmV3Q29udGVudCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRmlsZUNvbnRlbnQocGF0aDIsIG5ld0NvbnRlbnQsIHRydWUpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBoYW5kbGUgZXh0ZXJuYWwgY2hhbmdlIGZvciAke3BhdGgyfTpgLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogVXBkYXRlIGZpbGUgY29udGVudCBpbiBzdGF0ZSBhbmQgb3B0aW9uYWxseSBpbiB0aGUgZWRpdG9yCiAgICAgKi8KICAgIGFzeW5jIHVwZGF0ZUZpbGVDb250ZW50KHBhdGgyLCBuZXdDb250ZW50LCBwcmVzZXJ2ZUN1cnNvcikgewogICAgICB0aGlzLm9wZW5GaWxlcyA9IHRoaXMub3BlbkZpbGVzLm1hcCgoZjcpID0+IGY3LnBhdGggPT09IHBhdGgyID8geyAuLi5mNywgY29udGVudDogbmV3Q29udGVudCwgbW9kaWZpZWQ6IGZhbHNlIH0gOiBmNyk7CiAgICAgIGlmIChwYXRoMiA9PT0gdGhpcy5hY3RpdmVGaWxlUGF0aCkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgYXdhaXQgZWRpdG9yLnNldENvbnRlbnRFeHRlcm5hbChuZXdDb250ZW50LCBwcmVzZXJ2ZUN1cnNvcik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIE9wZW4gdGhlIGRpZmYgdmlldyB0byBjb21wYXJlIGxvY2FsIGFuZCBkaXNrIHZlcnNpb25zCiAgICAgKi8KICAgIG9wZW5EaWZmVmlldyhwYXRoMiwgbG9jYWxDb250ZW50LCBkaXNrQ29udGVudCkgewogICAgICB0aGlzLmRpZmZWaWV3Q29uZmlnID0gewogICAgICAgIGZpbGVQYXRoOiBwYXRoMiwKICAgICAgICBvcmlnaW5hbENvbnRlbnQ6IGRpc2tDb250ZW50LAogICAgICAgIG1vZGlmaWVkQ29udGVudDogbG9jYWxDb250ZW50LAogICAgICAgIGxhbmd1YWdlOiB0aGlzLmdldExhbmd1YWdlRnJvbVBhdGgocGF0aDIpCiAgICAgIH07CiAgICAgIHRoaXMuc2hvd0RpZmZWaWV3ID0gdHJ1ZTsKICAgIH0KICAgIC8qKgogICAgICogSGFuZGxlIGRpZmYgdmlldyByZXNvbHV0aW9uCiAgICAgKi8KICAgIGFzeW5jIGhhbmRsZURpZmZSZXNvbHZlZChlMTEpIHsKICAgICAgY29uc3QgeyBhY3Rpb24sIGNvbnRlbnQ6IGNvbnRlbnQzIH0gPSBlMTEuZGV0YWlsOwogICAgICBjb25zdCBwYXRoMiA9IHRoaXMuZGlmZlZpZXdDb25maWc/LmZpbGVQYXRoOwogICAgICBpZiAoIXBhdGgyIHx8ICF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgdGhpcy5zaG93RGlmZlZpZXcgPSBmYWxzZTsKICAgICAgICB0aGlzLmRpZmZWaWV3Q29uZmlnID0gbnVsbDsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGFjdGlvbiA9PT0gInVzZS1sb2NhbCIpIHsKICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShwYXRoMiwgY29udGVudDMpOwogICAgICAgIHRoaXMub3BlbkZpbGVzID0gdGhpcy5vcGVuRmlsZXMubWFwKChmNykgPT4gZjcucGF0aCA9PT0gcGF0aDIgPyB7IC4uLmY3LCBjb250ZW50OiBjb250ZW50MywgbW9kaWZpZWQ6IGZhbHNlIH0gOiBmNyk7CiAgICAgICAgaWYgKHBhdGgyID09PSB0aGlzLmFjdGl2ZUZpbGVQYXRoKSB7CiAgICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpOwogICAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgICBhd2FpdCBlZGl0b3Iuc2V0Q29udGVudEV4dGVybmFsKGNvbnRlbnQzLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gInVzZS1kaXNrIikgewogICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRmlsZUNvbnRlbnQocGF0aDIsIGNvbnRlbnQzLCBmYWxzZSk7CiAgICAgIH0KICAgICAgdGhpcy5zaG93RGlmZlZpZXcgPSBmYWxzZTsKICAgICAgdGhpcy5kaWZmVmlld0NvbmZpZyA9IG51bGw7CiAgICB9CiAgICBhc3luYyBoYW5kbGVGaWxlU2VsZWN0KGUxMSkgewogICAgICBjb25zdCB7IHBhdGg6IHBhdGgyLCBuYW1lIH0gPSBlMTEuZGV0YWlsOwogICAgICBhd2FpdCB0aGlzLm9wZW5GaWxlKHBhdGgyLCBuYW1lKTsKICAgIH0KICAgIGFzeW5jIG9wZW5GaWxlKHBhdGgyLCBuYW1lKSB7CiAgICAgIGNvbnN0IGV4aXN0aW5nRmlsZSA9IHRoaXMub3BlbkZpbGVzLmZpbmQoKGY3KSA9PiBmNy5wYXRoID09PSBwYXRoMik7CiAgICAgIGlmIChleGlzdGluZ0ZpbGUpIHsKICAgICAgICB0aGlzLmFjdGl2ZUZpbGVQYXRoID0gcGF0aDI7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKHBhdGgyKTsKICAgICAgICB0aGlzLm9wZW5GaWxlcyA9IFsKICAgICAgICAgIC4uLnRoaXMub3BlbkZpbGVzLAogICAgICAgICAgeyBwYXRoOiBwYXRoMiwgbmFtZSwgY29udGVudDogY29udGVudDMsIG1vZGlmaWVkOiBmYWxzZSB9CiAgICAgICAgXTsKICAgICAgICB0aGlzLmFjdGl2ZUZpbGVQYXRoID0gcGF0aDI7CiAgICAgICAgdGhpcy5zdGFydFdhdGNoaW5nRmlsZShwYXRoMik7CiAgICAgICAgaWYgKCF0aGlzLmludGVsbGlTZW5zZUluaXRpYWxpemVkKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCA1MDApKTsKICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZUludGVsbGlTZW5zZSgpOwogICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmdldExhbmd1YWdlRnJvbVBhdGgocGF0aDIpOwogICAgICAgICAgaWYgKHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlciAmJiAobGFuZ3VhZ2UgPT09ICJ0eXBlc2NyaXB0IiB8fCBsYW5ndWFnZSA9PT0gImphdmFzY3JpcHQiKSkgewogICAgICAgICAgICBhd2FpdCB0aGlzLmludGVsbGlTZW5zZU1hbmFnZXIucHJvY2Vzc0NvbnRlbnRDaGFuZ2UoY29udGVudDMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gb3BlbiBmaWxlICR7cGF0aDJ9OmAsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgYWN0aXZhdGVGaWxlKHBhdGgyKSB7CiAgICAgIHRoaXMuYWN0aXZlRmlsZVBhdGggPSBwYXRoMjsKICAgIH0KICAgIGNsb3NlRmlsZShlMTEsIHBhdGgyKSB7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29uc3QgZmlsZUluZGV4ID0gdGhpcy5vcGVuRmlsZXMuZmluZEluZGV4KChmNykgPT4gZjcucGF0aCA9PT0gcGF0aDIpOwogICAgICBpZiAoZmlsZUluZGV4ID09PSAtMSkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLm9wZW5GaWxlc1tmaWxlSW5kZXhdOwogICAgICBpZiAoZmlsZS5tb2RpZmllZCkgewogICAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGNvbmZpcm0oYCR7ZmlsZS5uYW1lfSBoYXMgdW5zYXZlZCBjaGFuZ2VzLiBDbG9zZSBhbnl3YXk/YCk7CiAgICAgICAgaWYgKCFjb25maXJtZWQpCiAgICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5zdG9wV2F0Y2hpbmdGaWxlKHBhdGgyKTsKICAgICAgdGhpcy5vcGVuRmlsZXMgPSB0aGlzLm9wZW5GaWxlcy5maWx0ZXIoKGY3KSA9PiBmNy5wYXRoICE9PSBwYXRoMik7CiAgICAgIGlmICh0aGlzLmFjdGl2ZUZpbGVQYXRoID09PSBwYXRoMikgewogICAgICAgIGlmICh0aGlzLm9wZW5GaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IE1hdGgubWluKGZpbGVJbmRleCwgdGhpcy5vcGVuRmlsZXMubGVuZ3RoIC0gMSk7CiAgICAgICAgICB0aGlzLmFjdGl2ZUZpbGVQYXRoID0gdGhpcy5vcGVuRmlsZXNbbmV3SW5kZXhdLnBhdGg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuYWN0aXZlRmlsZVBhdGggPSAiIjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGdldEFjdGl2ZUZpbGVDb250ZW50KCkgewogICAgICBjb25zdCBmaWxlID0gdGhpcy5vcGVuRmlsZXMuZmluZCgoZjcpID0+IGY3LnBhdGggPT09IHRoaXMuYWN0aXZlRmlsZVBhdGgpOwogICAgICByZXR1cm4gZmlsZT8uY29udGVudCB8fCAiIjsKICAgIH0KICAgIGhhbmRsZUNvbnRlbnRDaGFuZ2UoZTExKSB7CiAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBlMTEuZGV0YWlsOwogICAgICBjb25zdCBmaWxlSW5kZXggPSB0aGlzLm9wZW5GaWxlcy5maW5kSW5kZXgoKGY3KSA9PiBmNy5wYXRoID09PSB0aGlzLmFjdGl2ZUZpbGVQYXRoKTsKICAgICAgaWYgKGZpbGVJbmRleCA9PT0gLTEpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBmaWxlID0gdGhpcy5vcGVuRmlsZXNbZmlsZUluZGV4XTsKICAgICAgaWYgKGZpbGUuY29udGVudCAhPT0gbmV3Q29udGVudCkgewogICAgICAgIHRoaXMub3BlbkZpbGVzID0gWwogICAgICAgICAgLi4udGhpcy5vcGVuRmlsZXMuc2xpY2UoMCwgZmlsZUluZGV4KSwKICAgICAgICAgIHsgLi4uZmlsZSwgY29udGVudDogbmV3Q29udGVudCwgbW9kaWZpZWQ6IHRydWUgfSwKICAgICAgICAgIC4uLnRoaXMub3BlbkZpbGVzLnNsaWNlKGZpbGVJbmRleCArIDEpCiAgICAgICAgXTsKICAgICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuZ2V0TGFuZ3VhZ2VGcm9tUGF0aCh0aGlzLmFjdGl2ZUZpbGVQYXRoKTsKICAgICAgICBpZiAodGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyICYmIChsYW5ndWFnZSA9PT0gInR5cGVzY3JpcHQiIHx8IGxhbmd1YWdlID09PSAiamF2YXNjcmlwdCIpKSB7CiAgICAgICAgICBpZiAodGhpcy5pbnRlbGxpU2Vuc2VEZWJvdW5jZVRpbWVvdXQpIHsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaW50ZWxsaVNlbnNlRGVib3VuY2VUaW1lb3V0KTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuaW50ZWxsaVNlbnNlRGVib3VuY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlcj8ucHJvY2Vzc0NvbnRlbnRDaGFuZ2UobmV3Q29udGVudCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZ2V0TGFuZ3VhZ2VGcm9tUGF0aChwYXRoMikgewogICAgICBjb25zdCBleHQgPSBwYXRoMi5zcGxpdCgiLiIpLnBvcCgpPy50b0xvd2VyQ2FzZSgpOwogICAgICBjb25zdCBsYW5ndWFnZU1hcCA9IHsKICAgICAgICB0czogInR5cGVzY3JpcHQiLAogICAgICAgIHRzeDogInR5cGVzY3JpcHQiLAogICAgICAgIGpzOiAiamF2YXNjcmlwdCIsCiAgICAgICAganN4OiAiamF2YXNjcmlwdCIsCiAgICAgICAganNvbjogImpzb24iLAogICAgICAgIGh0bWw6ICJodG1sIiwKICAgICAgICBjc3M6ICJjc3MiLAogICAgICAgIHNjc3M6ICJzY3NzIiwKICAgICAgICBsZXNzOiAibGVzcyIsCiAgICAgICAgbWQ6ICJtYXJrZG93biIsCiAgICAgICAgeWFtbDogInlhbWwiLAogICAgICAgIHltbDogInlhbWwiLAogICAgICAgIHhtbDogInhtbCIsCiAgICAgICAgc3FsOiAic3FsIiwKICAgICAgICBweTogInB5dGhvbiIsCiAgICAgICAgc2g6ICJzaGVsbCIsCiAgICAgICAgYmFzaDogInNoZWxsIgogICAgICB9OwogICAgICByZXR1cm4gbGFuZ3VhZ2VNYXBbZXh0IHx8ICIiXSB8fCAicGxhaW50ZXh0IjsKICAgIH0KICAgIHRvZ2dsZVRlcm1pbmFsKCkgewogICAgICB0aGlzLmlzVGVybWluYWxDb2xsYXBzZWQgPSAhdGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkOwogICAgfQogICAgLy8gPT09PT09PT09PSBTYXZlIE9wZXJhdGlvbnMgPT09PT09PT09PQogICAgYXN5bmMgc2F2ZUFjdGl2ZUZpbGUoKSB7CiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLm9wZW5GaWxlcy5maW5kKChmNykgPT4gZjcucGF0aCA9PT0gdGhpcy5hY3RpdmVGaWxlUGF0aCk7CiAgICAgIGlmICghZmlsZSB8fCAhdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRyeSB7CiAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoZmlsZS5wYXRoLCBmaWxlLmNvbnRlbnQpOwogICAgICAgIHRoaXMub3BlbkZpbGVzID0gdGhpcy5vcGVuRmlsZXMubWFwKChmNykgPT4gZjcucGF0aCA9PT0gZmlsZS5wYXRoID8geyAuLi5mNywgbW9kaWZpZWQ6IGZhbHNlIH0gOiBmNyk7CiAgICAgICAgaWYgKHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlcikgewogICAgICAgICAgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLmFkZEZpbGVNb2RlbChmaWxlLnBhdGgsIGZpbGUuY29udGVudCk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBzYXZlIGZpbGU6IiwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBzYXZlQWxsRmlsZXMoKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiB0aGlzLm9wZW5GaWxlcy5maWx0ZXIoKGY3KSA9PiBmNy5tb2RpZmllZCkpIHsKICAgICAgICB0cnkgewogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoZmlsZS5wYXRoLCBmaWxlLmNvbnRlbnQpOwogICAgICAgICAgaWYgKHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlcikgewogICAgICAgICAgICB0aGlzLmludGVsbGlTZW5zZU1hbmFnZXIuYWRkRmlsZU1vZGVsKGZpbGUucGF0aCwgZmlsZS5jb250ZW50KTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHNhdmUgJHtmaWxlLnBhdGh9OmAsIGVycm9yKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5vcGVuRmlsZXMgPSB0aGlzLm9wZW5GaWxlcy5tYXAoKGY3KSA9PiAoeyAuLi5mNywgbW9kaWZpZWQ6IGZhbHNlIH0pKTsKICAgIH0KICAgIC8vID09PT09PT09PT0gRWRpdG9yIE1lbnUgPT09PT09PT09PQogICAgYXN5bmMgc2hvd0VkaXRvck1lbnUoZTExKSB7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6IHRoaXMuYXV0b1NhdmUgPyAiXHUyNzEzIEF1dG8gU2F2ZSIgOiAiQXV0byBTYXZlIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnNhdmUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnRvZ2dsZUF1dG9TYXZlKCkKICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJTYXZlIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnNhdmUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnNhdmVBY3RpdmVGaWxlKCkKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJTYXZlIEFsbCIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpzYXZlIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5zYXZlQWxsRmlsZXMoKQogICAgICAgIH0KICAgICAgXTsKICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgIH0KICAgIHRvZ2dsZUF1dG9TYXZlKCkgewogICAgICB0aGlzLmF1dG9TYXZlID0gIXRoaXMuYXV0b1NhdmU7CiAgICAgIGlmICh0aGlzLmF1dG9TYXZlKSB7CiAgICAgICAgdGhpcy5hdXRvU2F2ZUludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgICAgY29uc3QgaGFzVW5zYXZlZCA9IHRoaXMub3BlbkZpbGVzLnNvbWUoKGY3KSA9PiBmNy5tb2RpZmllZCk7CiAgICAgICAgICBpZiAoaGFzVW5zYXZlZCkgewogICAgICAgICAgICB0aGlzLnNhdmVBbGxGaWxlcygpOwogICAgICAgICAgfQogICAgICAgIH0sIDJlMyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHRoaXMuYXV0b1NhdmVJbnRlcnZhbCkgewogICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9TYXZlSW50ZXJ2YWwpOwogICAgICAgICAgdGhpcy5hdXRvU2F2ZUludGVydmFsID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGdldEVycm9yQ291bnQoKSB7CiAgICAgIHJldHVybiB0aGlzLmRpYWdub3N0aWNNYXJrZXJzLmZpbHRlcigobTYpID0+IG02LnNldmVyaXR5ID09PSA4KS5sZW5ndGg7CiAgICB9CiAgICByZW5kZXJQcm9ibGVtc1BhbmVsKCkgewogICAgICBpZiAodGhpcy5kaWFnbm9zdGljTWFya2Vycy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbXMtZW1wdHkiPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Y2hlY2tDaXJjbGUifSBpY29uU2l6ZT0iMjQiPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+Tm8gcHJvYmxlbXMgZGV0ZWN0ZWQ8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJwcm9ibGVtcy1saXN0Ij4KICAgICAgICAke3RoaXMuZGlhZ25vc3RpY01hcmtlcnMubWFwKChtYXJrZXIpID0+IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbS1pdGVtIiBAY2xpY2s9JHsoKSA9PiB0aGlzLm5hdmlnYXRlVG9Qcm9ibGVtKG1hcmtlcil9PgogICAgICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAgICAgY2xhc3M9InByb2JsZW0taWNvbiAke21hcmtlci5zZXZlcml0eSA9PT0gOCA/ICJlcnJvciIgOiAid2FybmluZyJ9IgogICAgICAgICAgICAgIC5pY29uPSR7bWFya2VyLnNldmVyaXR5ID09PSA4ID8gImx1Y2lkZTpjaXJjbGVYIiA6ICJsdWNpZGU6dHJpYW5nbGVBbGVydCJ9CiAgICAgICAgICAgICAgaWNvblNpemU9IjE0IgogICAgICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2JsZW0tZGV0YWlscyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbS1tZXNzYWdlIj4ke21hcmtlci5tZXNzYWdlfTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2JsZW0tbG9jYXRpb24iPgogICAgICAgICAgICAgICAgJHttYXJrZXIucmVzb3VyY2UucGF0aC5zcGxpdCgiLyIpLnBvcCgpfSAoJHttYXJrZXIuc3RhcnRMaW5lTnVtYmVyfSwgJHttYXJrZXIuc3RhcnRDb2x1bW59KQogICAgICAgICAgICAgICAgJHttYXJrZXIuc291cmNlID8gYFske21hcmtlci5zb3VyY2V9XWAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgKX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgbmF2aWdhdGVUb1Byb2JsZW0obWFya2VyKSB7CiAgICAgIGNvbnN0IGZpbGVQYXRoID0gbWFya2VyLnJlc291cmNlLnBhdGg7CiAgICAgIGNvbnN0IGZpbGVOYW1lID0gZmlsZVBhdGguc3BsaXQoIi8iKS5wb3AoKSB8fCAiIjsKICAgICAgY29uc3QgZXhpc3RpbmdGaWxlID0gdGhpcy5vcGVuRmlsZXMuZmluZCgoZjcpID0+IGY3LnBhdGggPT09IGZpbGVQYXRoKTsKICAgICAgaWYgKCFleGlzdGluZ0ZpbGUpIHsKICAgICAgICBhd2FpdCB0aGlzLm9wZW5GaWxlKGZpbGVQYXRoLCBmaWxlTmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5hY3RpdmVGaWxlUGF0aCA9IGZpbGVQYXRoOwogICAgICB9CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGNvbnN0IGVkaXRvckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpOwogICAgICBpZiAoZWRpdG9yRWxlbWVudCkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IGVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBlZGl0b3IucmV2ZWFsTGluZUluQ2VudGVyKG1hcmtlci5zdGFydExpbmVOdW1iZXIpOwogICAgICAgIGVkaXRvci5zZXRQb3NpdGlvbih7CiAgICAgICAgICBsaW5lTnVtYmVyOiBtYXJrZXIuc3RhcnRMaW5lTnVtYmVyLAogICAgICAgICAgY29sdW1uOiBtYXJrZXIuc3RhcnRDb2x1bW4KICAgICAgICB9KTsKICAgICAgICBlZGl0b3IuZm9jdXMoKTsKICAgICAgfQogICAgfQogICAgc2V0dXBNYXJrZXJMaXN0ZW5lcigpIHsKICAgICAgY29uc3QgbW9uYWNvSW5zdGFuY2UgPSB3aW5kb3cubW9uYWNvOwogICAgICBpZiAoIW1vbmFjb0luc3RhbmNlKQogICAgICAgIHJldHVybjsKICAgICAgbW9uYWNvSW5zdGFuY2UuZWRpdG9yLm9uRGlkQ2hhbmdlTWFya2VycygodXJpcykgPT4gewogICAgICAgIHRoaXMudXBkYXRlRGlhZ25vc3RpY01hcmtlcnMoKTsKICAgICAgfSk7CiAgICAgIHRoaXMudXBkYXRlRGlhZ25vc3RpY01hcmtlcnMoKTsKICAgIH0KICAgIHVwZGF0ZURpYWdub3N0aWNNYXJrZXJzKCkgewogICAgICBjb25zdCBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgIGlmICghbW9uYWNvSW5zdGFuY2UpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBhbGxNYXJrZXJzID0gbW9uYWNvSW5zdGFuY2UuZWRpdG9yLmdldE1vZGVsTWFya2Vycyh7fSk7CiAgICAgIHRoaXMuZGlhZ25vc3RpY01hcmtlcnMgPSBhbGxNYXJrZXJzLm1hcCgobTYpID0+ICh7CiAgICAgICAgbWVzc2FnZTogbTYubWVzc2FnZSwKICAgICAgICBzZXZlcml0eTogbTYuc2V2ZXJpdHksCiAgICAgICAgc3RhcnRMaW5lTnVtYmVyOiBtNi5zdGFydExpbmVOdW1iZXIsCiAgICAgICAgc3RhcnRDb2x1bW46IG02LnN0YXJ0Q29sdW1uLAogICAgICAgIGVuZExpbmVOdW1iZXI6IG02LmVuZExpbmVOdW1iZXIsCiAgICAgICAgZW5kQ29sdW1uOiBtNi5lbmRDb2x1bW4sCiAgICAgICAgc291cmNlOiBtNi5zb3VyY2UsCiAgICAgICAgcmVzb3VyY2U6IHsgcGF0aDogbTYucmVzb3VyY2UucGF0aCB9CiAgICAgIH0pKTsKICAgIH0KICAgIC8vID09PT09PT09PT0gQm90dG9tIEJhciBFdmVudCBIYW5kbGVycyA9PT09PT09PT09CiAgICAvKioKICAgICAqIEhhbmRsZSBydW4tcHJvY2VzcyBldmVudHMgZnJvbSBib3R0b20gYmFyIHdpZGdldHMKICAgICAqIENyZWF0ZXMgYSBuZXcgdGVybWluYWwgdGFiIGZvciB0aGUgcHJvY2VzcwogICAgICovCiAgICBhc3luYyBoYW5kbGVSdW5Qcm9jZXNzKGUxMSkgewogICAgICBjb25zdCBkZXRhaWwgPSBlMTEuZGV0YWlsOwogICAgICBjb25zdCB0ZXJtaW5hbCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtdGVybWluYWwiKTsKICAgICAgaWYgKCF0ZXJtaW5hbCkgewogICAgICAgIGNvbnNvbGUud2FybigiVGVybWluYWwgY29tcG9uZW50IG5vdCBmb3VuZCIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkKSB7CiAgICAgICAgdGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkID0gZmFsc2U7CiAgICAgIH0KICAgICAgdGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9ICJ0ZXJtaW5hbCI7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGF3YWl0IHRlcm1pbmFsLmNyZWF0ZVByb2Nlc3NUYWIoewogICAgICAgIHR5cGU6IGRldGFpbC50eXBlLAogICAgICAgIGxhYmVsOiBkZXRhaWwubGFiZWwsCiAgICAgICAgY29tbWFuZDogZGV0YWlsLmNvbW1hbmQsCiAgICAgICAgYXJnczogZGV0YWlsLmFyZ3MsCiAgICAgICAgbWV0YWRhdGE6IGRldGFpbC5tZXRhZGF0YSwKICAgICAgICBzd2l0Y2hUb1RhYjogdHJ1ZQogICAgICB9KTsKICAgIH0KICAgIC8vID09PT09PT09PT0gUHVibGljIExheW91dCBNZXRob2RzID09PT09PT09PT0KICAgIC8qKgogICAgICogUHJvZ3JhbW1hdGljYWxseSBzZXQgdGhlIGZpbGUgdHJlZSB3aWR0aAogICAgICovCiAgICBzZXRGaWxlVHJlZVdpZHRoKHdpZHRoKSB7CiAgICAgIGNvbnN0IG1pbldpZHRoID0gMTUwOwogICAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKiAwLjU7CiAgICAgIHRoaXMuY3VycmVudEZpbGVUcmVlV2lkdGggPSBNYXRoLm1heChtaW5XaWR0aCwgTWF0aC5taW4obWF4V2lkdGgsIHdpZHRoKSk7CiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgicmVzaXplIikpOwogICAgfQogICAgLyoqCiAgICAgKiBQcm9ncmFtbWF0aWNhbGx5IHNldCB0aGUgdGVybWluYWwgaGVpZ2h0CiAgICAgKi8KICAgIHNldFRlcm1pbmFsSGVpZ2h0KGhlaWdodCkgewogICAgICBjb25zdCBtaW5IZWlnaHQgPSAxMDA7CiAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ICogMC43OwogICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodCA9IE1hdGgubWF4KG1pbkhlaWdodCwgTWF0aC5taW4obWF4SGVpZ2h0LCBoZWlnaHQpKTsKICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNpemUiKSk7CiAgICB9CiAgICAvKioKICAgICAqIFJlc2V0IGxheW91dCB0byBpbml0aWFsIHByb3BlcnR5IHZhbHVlcwogICAgICovCiAgICByZXNldExheW91dCgpIHsKICAgICAgdGhpcy5jdXJyZW50RmlsZVRyZWVXaWR0aCA9IHRoaXMuZmlsZVRyZWVXaWR0aDsKICAgICAgdGhpcy5jdXJyZW50VGVybWluYWxIZWlnaHQgPSB0aGlzLnRlcm1pbmFsSGVpZ2h0OwogICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoInJlc2l6ZSIpKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTYoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXb3Jrc3BhY2UyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwvaW5kZXguanMKaW5pdF9kZWVzX3dvcmtzcGFjZV90ZXJtaW5hbCgpOwppbml0X3Rlcm1pbmFsX3RhYl9tYW5hZ2VyKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLW1hcmtkb3duL2RlZXMtd29ya3NwYWNlLW1hcmtkb3duLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTU2ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM1NyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgZGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0cHJvbWlzZS5kZWZlcigpOwp2YXIgRGVlc1dvcmtzcGFjZU1hcmtkb3duID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd24iKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9zcGxpdFJhdGlvX2RlY29yYXRvcnM7CiAgbGV0IF9zcGxpdFJhdGlvX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3BsaXRSYXRpb19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWluUGFuZWxTaXplX2RlY29yYXRvcnM7CiAgbGV0IF9taW5QYW5lbFNpemVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5QYW5lbFNpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRTcGxpdFJhdGlvX2RlY29yYXRvcnM7CiAgbGV0IF9jdXJyZW50U3BsaXRSYXRpb19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRTcGxpdFJhdGlvX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0RyYWdnaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9pc0RyYWdnaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNEcmFnZ2luZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV29ya3NwYWNlTWFya2Rvd24yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfc3BsaXRSYXRpb19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX21pblBhbmVsU2l6ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2N1cnJlbnRTcGxpdFJhdGlvX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc0RyYWdnaW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTU2KHRoaXMsIG51bGwsIF9zcGxpdFJhdGlvX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNwbGl0UmF0aW8iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNwbGl0UmF0aW8iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3BsaXRSYXRpbywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc3BsaXRSYXRpbyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zcGxpdFJhdGlvX2luaXRpYWxpemVycywgX3NwbGl0UmF0aW9fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Nih0aGlzLCBudWxsLCBfbWluUGFuZWxTaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1pblBhbmVsU2l6ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWluUGFuZWxTaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1pblBhbmVsU2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWluUGFuZWxTaXplID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21pblBhbmVsU2l6ZV9pbml0aWFsaXplcnMsIF9taW5QYW5lbFNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Nih0aGlzLCBudWxsLCBfY3VycmVudFNwbGl0UmF0aW9fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VycmVudFNwbGl0UmF0aW8iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRTcGxpdFJhdGlvIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1cnJlbnRTcGxpdFJhdGlvLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jdXJyZW50U3BsaXRSYXRpbyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jdXJyZW50U3BsaXRSYXRpb19pbml0aWFsaXplcnMsIF9jdXJyZW50U3BsaXRSYXRpb19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU2KHRoaXMsIG51bGwsIF9pc0RyYWdnaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzRHJhZ2dpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNEcmFnZ2luZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNEcmFnZ2luZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nX2luaXRpYWxpemVycywgX2lzRHJhZ2dpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXb3Jrc3BhY2VNYXJrZG93bjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd24+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bj5gOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJXb3Jrc3BhY2UiOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuc3BsaXRDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CgogICAgICAuZWRpdG9yQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG1pbi13aWR0aDogMTAwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnJlc2l6ZUhhbmRsZSB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzMwMzYzZCIpfTsKICAgICAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnJlc2l6ZUhhbmRsZTpob3ZlciwKICAgICAgLnJlc2l6ZUhhbmRsZS5kcmFnZ2luZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzU4YTZmZiIpfTsKICAgICAgfQoKICAgICAgLnJlc2l6ZUhhbmRsZTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgICAgd2lkdGg6IDJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZlNzY4MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxcHg7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICB9CgogICAgICAucmVzaXplSGFuZGxlOmhvdmVyOjphZnRlciwKICAgICAgLnJlc2l6ZUhhbmRsZS5kcmFnZ2luZzo6YWZ0ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiNmZmZmZmYiKX07CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLm91dGxldENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtaW4td2lkdGg6IDEwMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwZDExMTciKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjQyOTJmIiwgIiNlNmVkZjMiKX07CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ05vdG8gU2FucycsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC8qIFByZXZlbnQgdGV4dCBzZWxlY3Rpb24gd2hpbGUgZHJhZ2dpbmcgKi8KICAgICAgLnNwbGl0Q29udGFpbmVyLmRyYWdnaW5nIHsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLnNwbGl0Q29udGFpbmVyLmRyYWdnaW5nIC5lZGl0b3JDb250YWluZXIsCiAgICAgIC5zcGxpdENvbnRhaW5lci5kcmFnZ2luZyAub3V0bGV0Q29udGFpbmVyIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgYAogICAgXTsKICAgICNzcGxpdFJhdGlvX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9zcGxpdFJhdGlvX2luaXRpYWxpemVycywgNTApOwogICAgLyoqCiAgICAgKiBJbml0aWFsIHNwbGl0IHJhdGlvIGZvciB0aGUgZWRpdG9yIChsZWZ0KSBwYW5lbC4KICAgICAqIFZhbHVlIGZyb20gMCB0byAxMDAgcmVwcmVzZW50aW5nIHBlcmNlbnRhZ2Ugd2lkdGguCiAgICAgKiBEZWZhdWx0IGlzIDUwICg1MC81MCBzcGxpdCkuCiAgICAgKi8KICAgIGdldCBzcGxpdFJhdGlvKCkgewogICAgICByZXR1cm4gdGhpcy4jc3BsaXRSYXRpb19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNwbGl0UmF0aW8odmFsdWUyKSB7CiAgICAgIHRoaXMuI3NwbGl0UmF0aW9fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtaW5QYW5lbFNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9zcGxpdFJhdGlvX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfbWluUGFuZWxTaXplX2luaXRpYWxpemVycywgMTApKTsKICAgIC8qKgogICAgICogTWluaW11bSB3aWR0aCBwZXJjZW50YWdlIGZvciBlaXRoZXIgcGFuZWwuCiAgICAgKi8KICAgIGdldCBtaW5QYW5lbFNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtaW5QYW5lbFNpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW5QYW5lbFNpemUodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pblBhbmVsU2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1cnJlbnRTcGxpdFJhdGlvX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfbWluUGFuZWxTaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfY3VycmVudFNwbGl0UmF0aW9faW5pdGlhbGl6ZXJzLCA1MCkpOwogICAgZ2V0IGN1cnJlbnRTcGxpdFJhdGlvKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFNwbGl0UmF0aW9fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50U3BsaXRSYXRpbyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VycmVudFNwbGl0UmF0aW9fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0RyYWdnaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfY3VycmVudFNwbGl0UmF0aW9fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9pc0RyYWdnaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0RyYWdnaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNEcmFnZ2luZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzRHJhZ2dpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzRHJhZ2dpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHJlc2l6ZUhhbmRsZUVsZW1lbnQgPSBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9pc0RyYWdnaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGNvbnRhaW5lckVsZW1lbnQ7CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ic3BsaXRDb250YWluZXIgJHt0aGlzLmlzRHJhZ2dpbmcgPyAiZHJhZ2dpbmciIDogIiJ9Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3JDb250YWluZXIiIHN0eWxlPSJ3aWR0aDogJHt0aGlzLmN1cnJlbnRTcGxpdFJhdGlvfSUiPgogICAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1vbmFjbwogICAgICAgICAgICAubGFuZ3VhZ2U9JHsibWFya2Rvd24ifQogICAgICAgICAgICAuY29udGVudD0ke2AjIGEgdGVzdCBjb250ZW50CgpUaGlzIGlzIHRlc3QgY29udGVudCB0aGF0IGlzIG9mIGxvbmdlciBmb3JtIGFuIGhvcGVmdWxseSBzdGFydHMgdG8gd3JhcCB3aGVuIEkgbmVlZCBpdC4gQW5kIHllcywgaXQgZG9lcyBwZXJmZWN0bHkuIG5pY2UuCgpUZXN0IHwgSGVsbG8KLS0tIHwgLS0tClllYWggfCBTbyBnb29kCgpUaGlzIGlzIHJlYWwgYXNzZXQgSSB0aGluay4gV2h5IHdvdWxkIHdlIHdhbnQgdG8gbGVhdmUgdGhhdCBvbiB0aGUgdGFibGU/IENhbiB5b3UgdGVsbCBteSB0aGF0PwoKV2h5IGFyZSB3ZSBoZXJlPwoKRG8geW91IGtub3c/Cgo+IG5vdGU6ClRoZXJlIGlzIHNvbWV0aGluZyBnb2luZyBvbi4KClxgXGBcYHR5cGVzY3JpcHQKY29uc3QgaGVsbG8gPSAneWVzJwpcYFxgXGAKYH0KICAgICAgICAgICAgd29yZFdyYXA9ImJvdW5kZWQiCiAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS1tb25hY28+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9InJlc2l6ZUhhbmRsZSAke3RoaXMuaXNEcmFnZ2luZyA/ICJkcmFnZ2luZyIgOiAiIn0iCiAgICAgICAgICBAbW91c2Vkb3duPSR7dGhpcy5oYW5kbGVNb3VzZURvd259CiAgICAgICAgPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im91dGxldENvbnRhaW5lciIgc3R5bGU9IndpZHRoOiAkezEwMCAtIHRoaXMuY3VycmVudFNwbGl0UmF0aW99JSI+CiAgICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllc0FyZykgewogICAgICBhd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzQXJnKTsKICAgICAgdGhpcy5jdXJyZW50U3BsaXRSYXRpbyA9IHRoaXMuc3BsaXRSYXRpbzsKICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zcGxpdENvbnRhaW5lciIpOwogICAgICB0aGlzLnJlc2l6ZUhhbmRsZUVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnJlc2l6ZUhhbmRsZSIpOwogICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgIGNvbnN0IG1hcmtkb3duT3V0bGV0ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik7CiAgICAgIGNvbnN0IHNtYXJ0bWFya2Rvd25JbnN0YW5jZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0bWFya2Rvd24uU21hcnRNYXJrZG93bigpOwogICAgICBjb25zdCBtZFBhcnNlZFJlc3VsdCA9IGF3YWl0IHNtYXJ0bWFya2Rvd25JbnN0YW5jZS5nZXRNZFBhcnNlZFJlc3VsdEZyb21NYXJrZG93bigibG9hZGluZy4uLiIpOwogICAgICBlZGl0b3IuY29udGVudFN1YmplY3Quc3Vic2NyaWJlKGFzeW5jIChjb250ZW50QXJnKSA9PiB7CiAgICAgICAgYXdhaXQgbWRQYXJzZWRSZXN1bHQudXBkYXRlRnJvbU1hcmtkb3duU3RyaW5nKGNvbnRlbnRBcmcpOwogICAgICAgIGNvbnN0IGh0bWwyMCA9IG1kUGFyc2VkUmVzdWx0Lmh0bWw7CiAgICAgICAgbWFya2Rvd25PdXRsZXQudXBkYXRlSHRtbFRleHQoaHRtbDIwKTsKICAgICAgfSk7CiAgICB9CiAgICBoYW5kbGVNb3VzZURvd24gPSAoZTExKSA9PiB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZU1vdXNlVXApOwogICAgfTsKICAgIGhhbmRsZU1vdXNlTW92ZSA9IChlMTEpID0+IHsKICAgICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcgfHwgIXRoaXMuY29udGFpbmVyRWxlbWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLmNvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyUmVjdC53aWR0aDsKICAgICAgY29uc3QgbW91c2VYID0gZTExLmNsaWVudFggLSBjb250YWluZXJSZWN0LmxlZnQ7CiAgICAgIGxldCBuZXdSYXRpbyA9IG1vdXNlWCAvIGNvbnRhaW5lcldpZHRoICogMTAwOwogICAgICBuZXdSYXRpbyA9IE1hdGgubWF4KHRoaXMubWluUGFuZWxTaXplLCBNYXRoLm1pbigxMDAgLSB0aGlzLm1pblBhbmVsU2l6ZSwgbmV3UmF0aW8pKTsKICAgICAgdGhpcy5jdXJyZW50U3BsaXRSYXRpbyA9IG5ld1JhdGlvOwogICAgfTsKICAgIGhhbmRsZU1vdXNlVXAgPSAoKSA9PiB7CiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZU1vdXNlVXApOwogICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgIGlmIChlZGl0b3IpIHsKICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoInJlc2l6ZSIpKTsKICAgICAgfQogICAgfTsKICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZU1vdXNlVXApOwogICAgfQogICAgLyoqCiAgICAgKiBQcm9ncmFtbWF0aWNhbGx5IHNldCB0aGUgc3BsaXQgcmF0aW8KICAgICAqLwogICAgc2V0U3BsaXRSYXRpbyhyYXRpbykgewogICAgICB0aGlzLmN1cnJlbnRTcGxpdFJhdGlvID0gTWF0aC5tYXgodGhpcy5taW5QYW5lbFNpemUsIE1hdGgubWluKDEwMCAtIHRoaXMubWluUGFuZWxTaXplLCByYXRpbykpOwogICAgfQogICAgLyoqCiAgICAgKiBSZXNldCB0byBpbml0aWFsIHNwbGl0IHJhdGlvCiAgICAgKi8KICAgIHJlc2V0U3BsaXRSYXRpbygpIHsKICAgICAgdGhpcy5jdXJyZW50U3BsaXRSYXRpbyA9IHRoaXMuc3BsaXRSYXRpbzsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTcoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXb3Jrc3BhY2VNYXJrZG93bjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzM2ID0gKCkgPT4gYjJgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiA5MDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8IS0tIERlbW8gMTogSGVhZGluZ3MgLS0+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7IkhlYWRpbmdzIn0KICAgICAgICAuc3VidGl0bGU9JHsiQWxsIGhlYWRpbmcgbGV2ZWxzIGZyb20gSDEgdG8gSDYifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChwYW5lbEVsKSA9PiB7CiAgY29uc3Qgb3V0bGV0ID0gcGFuZWxFbC5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldCIpOwogIGF3YWl0IG91dGxldD8udXBkYXRlSHRtbFRleHQoYAogICAgICAgICAgICA8aDE+SGVhZGluZyBMZXZlbCAxPC9oMT4KICAgICAgICAgICAgPGgyPkhlYWRpbmcgTGV2ZWwgMjwvaDI+CiAgICAgICAgICAgIDxoMz5IZWFkaW5nIExldmVsIDM8L2gzPgogICAgICAgICAgICA8aDQ+SGVhZGluZyBMZXZlbCA0PC9oND4KICAgICAgICAgICAgPGg1PkhlYWRpbmcgTGV2ZWwgNTwvaDU+CiAgICAgICAgICAgIDxoNj5IZWFkaW5nIExldmVsIDY8L2g2PgogICAgICAgICAgYCk7Cn19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDI6IFRleHQgRm9ybWF0dGluZyAtLT4KICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiVGV4dCBGb3JtYXR0aW5nIn0KICAgICAgICAuc3VidGl0bGU9JHsiQm9sZCwgaXRhbGljLCBsaW5rcywgY29kZSwgYW5kIGtleWJvYXJkIGlucHV0In0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICBhd2FpdCBvdXRsZXQ/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPHA+VGhpcyBpcyBhIHBhcmFncmFwaCB3aXRoIDxzdHJvbmc+Ym9sZCB0ZXh0PC9zdHJvbmc+IGFuZCA8ZW0+aXRhbGljIHRleHQ8L2VtPi48L3A+CiAgICAgICAgICAgIDxwPllvdSBjYW4gYWxzbyB1c2UgPHN0cm9uZz48ZW0+Ym9sZCBpdGFsaWM8L2VtPjwvc3Ryb25nPiBmb3IgZW1waGFzaXMuPC9wPgogICAgICAgICAgICA8cD5IZXJlJ3MgYSA8YSBocmVmPSIjIj5saW5rIGV4YW1wbGU8L2E+IGFuZCBzb21lIDxjb2RlPmlubGluZSBjb2RlPC9jb2RlPi48L3A+CiAgICAgICAgICAgIDxwPlByZXNzIDxrYmQ+Q3RybDwva2JkPiArIDxrYmQ+Qzwva2JkPiB0byBjb3B5IHRleHQuPC9wPgogICAgICAgICAgICA8aHI+CiAgICAgICAgICAgIDxwPkFib3ZlIGlzIGEgaG9yaXpvbnRhbCBydWxlIHNlcGFyYXRvci48L3A+CiAgICAgICAgICBgKTsKfX0KICAgICAgPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD48L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8IS0tIERlbW8gMzogTGlzdHMgLS0+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7Ikxpc3RzIn0KICAgICAgICAuc3VidGl0bGU9JHsiT3JkZXJlZCwgdW5vcmRlcmVkLCBhbmQgdGFzayBsaXN0cyJ9CiAgICAgICAgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKHBhbmVsRWwpID0+IHsKICBjb25zdCBvdXRsZXQgPSBwYW5lbEVsLnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik7CiAgYXdhaXQgb3V0bGV0Py51cGRhdGVIdG1sVGV4dChgCiAgICAgICAgICAgIDxoMz5Vbm9yZGVyZWQgTGlzdDwvaDM+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+Rmlyc3QgaXRlbTwvbGk+CiAgICAgICAgICAgICAgPGxpPlNlY29uZCBpdGVtCiAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgIDxsaT5OZXN0ZWQgaXRlbSAxPC9saT4KICAgICAgICAgICAgICAgICAgPGxpPk5lc3RlZCBpdGVtIDI8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UaGlyZCBpdGVtPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxoMz5PcmRlcmVkIExpc3Q8L2gzPgogICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgPGxpPlN0ZXAgb25lPC9saT4KICAgICAgICAgICAgICA8bGk+U3RlcCB0d288L2xpPgogICAgICAgICAgICAgIDxsaT5TdGVwIHRocmVlPC9saT4KICAgICAgICAgICAgPC9vbD4KCiAgICAgICAgICAgIDxoMz5UYXNrIExpc3Q8L2gzPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0YXNrLWxpc3QtaXRlbSI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBjaGVja2VkIGRpc2FibGVkPiBDb21wbGV0ZWQgdGFzazwvbGk+CiAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0YXNrLWxpc3QtaXRlbSI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBkaXNhYmxlZD4gUGVuZGluZyB0YXNrPC9saT4KICAgICAgICAgICAgICA8bGkgY2xhc3M9InRhc2stbGlzdC1pdGVtIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGRpc2FibGVkPiBBbm90aGVyIHRhc2s8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgYCk7Cn19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDQ6IENvZGUgQmxvY2tzIC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJDb2RlIEJsb2NrcyJ9CiAgICAgICAgLnN1YnRpdGxlPSR7IlN5bnRheCBoaWdobGlnaHRlZCBjb2RlIGV4YW1wbGVzIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICBhd2FpdCBvdXRsZXQ/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPHA+SW5saW5lIGNvZGU6IDxjb2RlPmNvbnN0IGdyZWV0aW5nID0gIkhlbGxvLCBXb3JsZCEiOzwvY29kZT48L3A+CgogICAgICAgICAgICA8aDM+VHlwZVNjcmlwdCBFeGFtcGxlPC9oMz4KICAgICAgICAgICAgPHByZT48Y29kZT48c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5pbXBvcnQ8L3NwYW4+IHsgaHRtbCwgY3NzIH0gPHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+ZnJvbTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4nQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50Jzwvc3Bhbj47Cgo8c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5pbnRlcmZhY2U8L3NwYW4+IDxzcGFuIGNsYXNzPSJobGpzLXRpdGxlIj5JVXNlcjwvc3Bhbj4gewogIDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPm5hbWU8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+c3RyaW5nPC9zcGFuPjsKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj5lbWFpbDwvc3Bhbj46IDxzcGFuIGNsYXNzPSJobGpzLWJ1aWx0X2luIj5zdHJpbmc8L3NwYW4+OwogIDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPmFnZTwvc3Bhbj4/OiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+bnVtYmVyPC9zcGFuPjsKfQoKPHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJobGpzLXRpdGxlIj5nZXRVc2VyPC9zcGFuPiA9IDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmFzeW5jPC9zcGFuPiAoPHNwYW4gY2xhc3M9ImhsanMtYXR0ciI+aWQ8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+c3RyaW5nPC9zcGFuPik6IDxzcGFuIGNsYXNzPSJobGpzLWJ1aWx0X2luIj5Qcm9taXNlPC9zcGFuPiZsdDtJVXNlciZndDsgPSZndDsgewogIDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmNvbnN0PC9zcGFuPiByZXNwb25zZSA9IDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmF3YWl0PC9zcGFuPiBmZXRjaChcYC9hcGkvdXNlcnMvXCR7aWR9XGApOwogIDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPnJldHVybjwvc3Bhbj4gcmVzcG9uc2UuanNvbigpOwp9OzwvY29kZT48L3ByZT4KCiAgICAgICAgICAgIDxoMz5KU09OIEV4YW1wbGU8L2gzPgogICAgICAgICAgICA8cHJlPjxjb2RlPnsKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj4ibmFtZSI8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1zdHJpbmciPiJkZWVzLWNhdGFsb2ciPC9zcGFuPiwKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj4idmVyc2lvbiI8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1zdHJpbmciPiIzLjAuMCI8L3NwYW4+LAogIDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPiJkZXBlbmRlbmNpZXMiPC9zcGFuPjogewogICAgPHNwYW4gY2xhc3M9ImhsanMtYXR0ciI+IkBkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCI8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1zdHJpbmciPiJeMi4wLjAiPC9zcGFuPgogIH0KfTwvY29kZT48L3ByZT4KICAgICAgICAgIGApOwp9fQogICAgICA+CiAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDwhLS0gRGVtbyA1OiBUYWJsZXMgLS0+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7IlRhYmxlcyJ9CiAgICAgICAgLnN1YnRpdGxlPSR7IlN0eWxlZCB0YWJsZXMgd2l0aCBhbHRlcm5hdGluZyByb3dzIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICBhd2FpdCBvdXRsZXQ/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRoPkZlYXR1cmU8L3RoPgogICAgICAgICAgICAgICAgICA8dGg+U3RhdHVzPC90aD4KICAgICAgICAgICAgICAgICAgPHRoPlByaW9yaXR5PC90aD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZD5EYXJrIG1vZGUgc3VwcG9ydDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5Db21wbGV0ZWQ8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SGlnaDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+UmVzcG9uc2l2ZSBkZXNpZ248L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SW4gUHJvZ3Jlc3M8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+TWVkaXVtPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZD5BY2Nlc3NpYmlsaXR5PC90ZD4KICAgICAgICAgICAgICAgICAgPHRkPlBsYW5uZWQ8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SGlnaDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+RG9jdW1lbnRhdGlvbjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5JbiBQcm9ncmVzczwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5Mb3c8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgYCk7Cn19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDY6IEJsb2NrcXVvdGVzICYgQWxlcnRzIC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJCbG9ja3F1b3RlcyAmIEFsZXJ0cyJ9CiAgICAgICAgLnN1YnRpdGxlPSR7IlF1b3RlcyBhbmQgR2l0SHViLXN0eWxlIGFsZXJ0cyJ9CiAgICAgICAgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKHBhbmVsRWwpID0+IHsKICBjb25zdCBvdXRsZXQgPSBwYW5lbEVsLnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik7CiAgYXdhaXQgb3V0bGV0Py51cGRhdGVIdG1sVGV4dChgCiAgICAgICAgICAgIDxibG9ja3F1b3RlPgogICAgICAgICAgICAgIDxwPlRoaXMgaXMgYSBzdGFuZGFyZCBibG9ja3F1b3RlLiBJdCdzIGdyZWF0IGZvciBoaWdobGlnaHRpbmcgaW1wb3J0YW50IGluZm9ybWF0aW9uIG9yIHF1b3RlcyBmcm9tIG90aGVyIHNvdXJjZXMuPC9wPgogICAgICAgICAgICA8L2Jsb2NrcXVvdGU+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1hbGVydCBtYXJrZG93bi1hbGVydC1ub3RlIj4KICAgICAgICAgICAgICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoaXMgaXMgYW4gaW5mb3JtYXRpb25hbCBub3RlIHRvIGRyYXcgYXR0ZW50aW9uIHRvIGltcG9ydGFudCBkZXRhaWxzLjwvcD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1hbGVydCBtYXJrZG93bi1hbGVydC10aXAiPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+VGlwOjwvc3Ryb25nPiBIZXJlJ3MgYSBoZWxwZnVsIHRpcCB0byBpbXByb3ZlIHlvdXIgd29ya2Zsb3cuPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWFsZXJ0IG1hcmtkb3duLWFsZXJ0LWltcG9ydGFudCI+CiAgICAgICAgICAgICAgPHA+PHN0cm9uZz5JbXBvcnRhbnQ6PC9zdHJvbmc+IFRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdG9waWMuPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWFsZXJ0IG1hcmtkb3duLWFsZXJ0LXdhcm5pbmciPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+V2FybmluZzo8L3N0cm9uZz4gQmUgY2FyZWZ1bCB3aGVuIHBlcmZvcm1pbmcgdGhpcyBhY3Rpb24uPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWFsZXJ0IG1hcmtkb3duLWFsZXJ0LWNhdXRpb24iPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+Q2F1dGlvbjo8L3N0cm9uZz4gVGhpcyBhY3Rpb24gbWF5IGhhdmUgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGApOwp9fQogICAgICA+CiAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDwhLS0gRGVtbyA3OiBGdWxsIERvY3VtZW50IC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJGdWxsIERvY3VtZW50In0KICAgICAgICAuc3VidGl0bGU9JHsiQSBjb21wbGV0ZSBtYXJrZG93biBkb2N1bWVudCBleGFtcGxlIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICBhd2FpdCBvdXRsZXQ/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPGgxPkdldHRpbmcgU3RhcnRlZCBHdWlkZTwvaDE+CiAgICAgICAgICAgIDxwPldlbGNvbWUgdG8gdGhlIDxzdHJvbmc+ZGVlcy1jYXRhbG9nPC9zdHJvbmc+IGNvbXBvbmVudCBsaWJyYXJ5LiBUaGlzIGd1aWRlIHdpbGwgaGVscCB5b3UgZ2V0IHVwIGFuZCBydW5uaW5nIHF1aWNrbHkuPC9wPgoKICAgICAgICAgICAgPGgyPkluc3RhbGxhdGlvbjwvaDI+CiAgICAgICAgICAgIDxwPkluc3RhbGwgdGhlIHBhY2thZ2UgdXNpbmcgeW91ciBwcmVmZXJyZWQgcGFja2FnZSBtYW5hZ2VyOjwvcD4KICAgICAgICAgICAgPHByZT48Y29kZT48c3BhbiBjbGFzcz0iaGxqcy1jb21tZW50Ij4jIFVzaW5nIHBucG0gKHJlY29tbWVuZGVkKTwvc3Bhbj4KcG5wbSBhZGQgQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nCgo8c3BhbiBjbGFzcz0iaGxqcy1jb21tZW50Ij4jIFVzaW5nIG5wbTwvc3Bhbj4KbnBtIGluc3RhbGwgQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nPC9jb2RlPjwvcHJlPgoKICAgICAgICAgICAgPGgyPkJhc2ljIFVzYWdlPC9oMj4KICAgICAgICAgICAgPHA+SW1wb3J0IGFuZCB1c2UgY29tcG9uZW50cyBpbiB5b3VyIFR5cGVTY3JpcHQgZmlsZXM6PC9wPgogICAgICAgICAgICA8cHJlPjxjb2RlPjxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmltcG9ydDwvc3Bhbj4geyBEZWVzQnV0dG9uIH0gPHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+ZnJvbTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4nQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nJzwvc3Bhbj47Cgo8c3BhbiBjbGFzcz0iaGxqcy1jb21tZW50Ij4vLyBVc2UgaW4geW91ciB0ZW1wbGF0ZXM8L3NwYW4+Cmh0bWxcYCZsdDtkZWVzLWJ1dHRvbiZndDtDbGljayBtZSZsdDsvZGVlcy1idXR0b24mZ3Q7XGA8L2NvZGU+PC9wcmU+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1hbGVydCBtYXJrZG93bi1hbGVydC10aXAiPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+VGlwOjwvc3Ryb25nPiBDaGVjayB0aGUgZGVtbyBzaG93Y2FzZSBmb3IgbGl2ZSBleGFtcGxlcyBvZiBhbGwgY29tcG9uZW50cy48L3A+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGgyPkF2YWlsYWJsZSBDb21wb25lbnRzPC9oMj4KICAgICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRoPkNvbXBvbmVudDwvdGg+CiAgICAgICAgICAgICAgICAgIDx0aD5EZXNjcmlwdGlvbjwvdGg+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+ZGVlcy1idXR0b248L2NvZGU+PC90ZD4KICAgICAgICAgICAgICAgICAgPHRkPlByaW1hcnkgYnV0dG9uIGNvbXBvbmVudDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+ZGVlcy1pbnB1dC10ZXh0PC9jb2RlPjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5UZXh0IGlucHV0IGZpZWxkPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZD48Y29kZT5kZWVzLXRhYmxlPC9jb2RlPjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5EYXRhIHRhYmxlIHdpdGggc29ydGluZzwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+ZGVlcy1tb2RhbDwvY29kZT48L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+TW9kYWwgZGlhbG9nPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgPC90YWJsZT4KCiAgICAgICAgICAgIDxoMj5OZXh0IFN0ZXBzPC9oMj4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5FeHBsb3JlIHRoZSA8YSBocmVmPSIjIj5jb21wb25lbnQgZG9jdW1lbnRhdGlvbjwvYT48L2xpPgogICAgICAgICAgICAgIDxsaT5DaGVjayBvdXQgdGhlIDxhIGhyZWY9IiMiPnRoZW1pbmcgZ3VpZGU8L2E+PC9saT4KICAgICAgICAgICAgICA8bGk+Sm9pbiBvdXIgPGEgaHJlZj0iIyI+Y29tbXVuaXR5IERpc2NvcmQ8L2E+PC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxibG9ja3F1b3RlPgogICAgICAgICAgICAgIDxwPiJUaGUgYmVzdCBjb21wb25lbnQgbGlicmFyeSBpcyBvbmUgdGhhdCBnZXRzIG91dCBvZiB5b3VyIHdheS4iIFx1MjAxNCBEZXNpZ24gU3lzdGVtcyBUZWFtPC9wPgogICAgICAgICAgICA8L2Jsb2NrcXVvdGU+CiAgICAgICAgICBgKTsKfX0KICAgICAgPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD48L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTU3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM1OCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1dvcmtzcGFjZU1hcmtkb3dub3V0bGV0ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgdmFyIERlZXNXb3Jrc3BhY2VNYXJrZG93bm91dGxldDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9fZXNEZWNvcmF0ZTU3KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1dvcmtzcGFjZU1hcmtkb3dub3V0bGV0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBERU1PCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzY7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdOb3RvIFNhbnMnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzI0MjkyZiIsICIjZTZlZGYzIil9OwogICAgICB9CgogICAgICAub3V0bGV0IHsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KCiAgICAgIC8qIEhlYWRpbmdzICovCiAgICAgIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYgewogICAgICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI1OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFmMjMyOCIsICIjZjBmNmZjIil9OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgZm9udC1zaXplOiAyZW07CiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuM2VtOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDllMCIsICIjMzAzNjNkIil9OwogICAgICB9CgogICAgICBoMiB7CiAgICAgICAgZm9udC1zaXplOiAxLjVlbTsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMC4zZW07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkOWUwIiwgIiMzMDM2M2QiKX07CiAgICAgIH0KCiAgICAgIGgzIHsKICAgICAgICBmb250LXNpemU6IDEuMjVlbTsKICAgICAgfQoKICAgICAgaDQgewogICAgICAgIGZvbnQtc2l6ZTogMWVtOwogICAgICB9CgogICAgICBoNSB7CiAgICAgICAgZm9udC1zaXplOiAwLjg3NWVtOwogICAgICB9CgogICAgICBoNiB7CiAgICAgICAgZm9udC1zaXplOiAwLjg1ZW07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjU2ZDc2IiwgIiM4Yjk0OWUiKX07CiAgICAgIH0KCiAgICAgIC8qIFBhcmFncmFwaHMgYW5kIHRleHQgKi8KICAgICAgcCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAvKiBMaW5rcyAqLwogICAgICBhIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTY5ZGEiLCAiIzU4YTZmZiIpfTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgIGE6aG92ZXIgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CgogICAgICAvKiBTdHJvbmcgYW5kIGVtcGhhc2lzICovCiAgICAgIHN0cm9uZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZjIzMjgiLCAiI2YwZjZmYyIpfTsKICAgICAgfQoKICAgICAgZW0gewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLyogTGlzdHMgKi8KICAgICAgdWwsIG9sIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyZW07CiAgICAgIH0KCiAgICAgIGxpIHsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIGxpICsgbGkgewogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQoKICAgICAgdWwgdWwsIHVsIG9sLCBvbCB1bCwgb2wgb2wgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLyogQmxvY2txdW90ZXMgKi8KICAgICAgYmxvY2txdW90ZSB7CiAgICAgICAgbWFyZ2luOiAwIDAgMTZweCAwOwogICAgICAgIHBhZGRpbmc6IDAgMWVtOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY1NmQ3NiIsICIjOGI5NDllIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgfQoKICAgICAgYmxvY2txdW90ZSA+IDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgfQoKICAgICAgYmxvY2txdW90ZSA+IDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CgogICAgICAvKiBJbmxpbmUgY29kZSAqLwogICAgICBjb2RlIHsKICAgICAgICBwYWRkaW5nOiAwLjJlbSAwLjRlbTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC1zaXplOiA4NSU7CiAgICAgICAgZm9udC1mYW1pbHk6IHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsICdTRiBNb25vJywgTWVubG8sIENvbnNvbGFzLCAnTGliZXJhdGlvbiBNb25vJywgbW9ub3NwYWNlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE3NSwgMTg0LCAxOTMsIDAuMikiLCAicmdiYSgxMTAsIDExOCwgMTI5LCAwLjQpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzOwogICAgICB9CgogICAgICAvKiBDb2RlIGJsb2NrcyAqLwogICAgICBwcmUgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGZvbnQtc2l6ZTogODUlOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ1OwogICAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCAnU0YgTW9ubycsIE1lbmxvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y2ZjhmYSIsICIjMTYxYjIyIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB3b3JkLXdyYXA6IG5vcm1hbDsKICAgICAgfQoKICAgICAgcHJlIGNvZGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgIHdvcmQtd3JhcDogbm9ybWFsOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBmb250LXNpemU6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKICAgICAgfQoKICAgICAgLyogVGFibGVzICovCiAgICAgIHRhYmxlIHsKICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBib3JkZXItc3BhY2luZzogMDsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICB0YWJsZSB0aCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDllMCIsICIjMzAzNjNkIil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjZmOGZhIiwgIiMxNjFiMjIiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWYyMzI4IiwgIiNlNmVkZjMiKX07CiAgICAgIH0KCiAgICAgIHRhYmxlIHRkIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDllMCIsICIjMzAzNjNkIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFmMjMyOCIsICIjZTZlZGYzIil9OwogICAgICB9CgogICAgICB0YWJsZSB0ciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzBkMTExNyIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzIxMjYyZCIpfTsKICAgICAgfQoKICAgICAgdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNmY4ZmEiLCAiIzE2MWIyMiIpfTsKICAgICAgfQoKICAgICAgLyogSG9yaXpvbnRhbCBydWxlcyAqLwogICAgICBociB7CiAgICAgICAgaGVpZ2h0OiA0cHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDI0cHggMDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDllMCIsICIjMzAzNjNkIil9OwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgIH0KCiAgICAgIC8qIEltYWdlcyAqLwogICAgICBpbWcgewogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgfQoKICAgICAgLyogVGFzayBsaXN0cyAqLwogICAgICAudGFzay1saXN0LWl0ZW0gewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgfQoKICAgICAgLnRhc2stbGlzdC1pdGVtIGlucHV0IHsKICAgICAgICBtYXJnaW46IDAgMC4yZW0gMC4yNWVtIC0xLjRlbTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAvKiBEZWZpbml0aW9uIGxpc3RzICovCiAgICAgIGRsIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICBkbCBkdCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMWVtOwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CgogICAgICBkbCBkZCB7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC8qIEtleWJvYXJkIGlucHV0ICovCiAgICAgIGtiZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBhZGRpbmc6IDNweCA1cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCAnU0YgTW9ubycsIE1lbmxvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTsKICAgICAgICBsaW5lLWhlaWdodDogMTBweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZjIzMjgiLCAiI2U2ZWRmMyIpfTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjZmOGZhIiwgIiMxNjFiMjIiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgfQoKICAgICAgLyogRm9vdG5vdGVzICovCiAgICAgIC5mb290bm90ZXMgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2NTZkNzYiLCAiIzhiOTQ5ZSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OwogICAgICB9CgogICAgICAvKiBBbGVydHMvQWRtb25pdGlvbnMgKi8KICAgICAgLm1hcmtkb3duLWFsZXJ0IHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtbm90ZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5NjlkYSIsICIjNThhNmZmIil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDksIDEwNSwgMjE4LCAwLjEpIiwgInJnYmEoNTYsIDEzOSwgMjUzLCAwLjEpIil9OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtd2FybmluZyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2JmODcwMCIsICIjZDI5OTIyIil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE5MSwgMTM1LCAwLCAwLjEpIiwgInJnYmEoMTg3LCAxMjgsIDksIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5tYXJrZG93bi1hbGVydC1pbXBvcnRhbnQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM4MjUwZGYiLCAiI2EzNzFmNyIpfTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgxMzAsIDgwLCAyMjMsIDAuMSkiLCAicmdiYSgxNjMsIDExMywgMjQ3LCAwLjEpIil9OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtY2F1dGlvbiB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2NmMjIyZSIsICIjZjg1MTQ5Iil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIwNywgMzQsIDQ2LCAwLjEpIiwgInJnYmEoMjQ4LCA4MSwgNzMsIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5tYXJrZG93bi1hbGVydC10aXAgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxYTdmMzciLCAiIzNmYjk1MCIpfTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNiwgMTI3LCA1NSwgMC4xKSIsICJyZ2JhKDQ2LCAxNjAsIDY3LCAwLjEpIil9OwogICAgICB9CgogICAgICAvKiBTeW50YXggaGlnaGxpZ2h0aW5nIGZvciBjb2RlIGJsb2NrcyAqLwogICAgICAuaGxqcy1jb21tZW50LAogICAgICAuaGxqcy1xdW90ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmE3MzdkIiwgIiM4Yjk0OWUiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWtleXdvcmQsCiAgICAgIC5obGpzLXNlbGVjdG9yLXRhZywKICAgICAgLmhsanMtYWRkaXRpb24gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Q3M2E0OSIsICIjZmY3YjcyIil9OwogICAgICB9CgogICAgICAuaGxqcy1udW1iZXIsCiAgICAgIC5obGpzLXN0cmluZywKICAgICAgLmhsanMtbWV0YSAuaGxqcy1tZXRhLXN0cmluZywKICAgICAgLmhsanMtbGl0ZXJhbCwKICAgICAgLmhsanMtZG9jdGFnLAogICAgICAuaGxqcy1yZWdleHAgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAzMmY2MiIsICIjYTVkNmZmIil9OwogICAgICB9CgogICAgICAuaGxqcy10aXRsZSwKICAgICAgLmhsanMtc2VjdGlvbiwKICAgICAgLmhsanMtbmFtZSwKICAgICAgLmhsanMtc2VsZWN0b3ItaWQsCiAgICAgIC5obGpzLXNlbGVjdG9yLWNsYXNzIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2ZjQyYzEiLCAiI2QyYThmZiIpfTsKICAgICAgfQoKICAgICAgLmhsanMtYXR0cmlidXRlLAogICAgICAuaGxqcy1hdHRyLAogICAgICAuaGxqcy12YXJpYWJsZSwKICAgICAgLmhsanMtdGVtcGxhdGUtdmFyaWFibGUsCiAgICAgIC5obGpzLWNsYXNzIC5obGpzLXRpdGxlLAogICAgICAuaGxqcy10eXBlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDVjYzUiLCAiIzc5YzBmZiIpfTsKICAgICAgfQoKICAgICAgLmhsanMtc3ltYm9sLAogICAgICAuaGxqcy1idWxsZXQsCiAgICAgIC5obGpzLXN1YnN0LAogICAgICAuaGxqcy1tZXRhLAogICAgICAuaGxqcy1tZXRhIC5obGpzLWtleXdvcmQsCiAgICAgIC5obGpzLXNlbGVjdG9yLWF0dHIsCiAgICAgIC5obGpzLXNlbGVjdG9yLXBzZXVkbywKICAgICAgLmhsanMtbGluayB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTM2MjA5IiwgIiNmZmE2NTciKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWJ1aWx0X2luLAogICAgICAuaGxqcy1kZWxldGlvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjYjMxZDI4IiwgIiNmZmExOTgiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWZvcm11bGEgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjZmOGZhIiwgIiMxNjFiMjIiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWVtcGhhc2lzIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5obGpzLXN0cm9uZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICAvLyBJTlNUQU5DRQogICAgb3V0bGV0OwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im91dGxldCI+CiAgICAgICAgPGgxPk1hcmtkb3duIFByZXZpZXc8L2gxPgogICAgICAgIDxwPkNvbnRlbnQgd2lsbCBhcHBlYXIgaGVyZSB3aGVuIG1hcmtkb3duIGlzIHBhcnNlZC48L3A+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgYXdhaXQgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIHRoaXMub3V0bGV0ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5vdXRsZXQiKTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZUh0bWxUZXh0KGh0bWxUZXh0QXJnKSB7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGlmICghdGhpcy5vdXRsZXQpIHsKICAgICAgICB0aGlzLm91dGxldCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIub3V0bGV0Iik7CiAgICAgIH0KICAgICAgdGhpcy5vdXRsZXQuaW5uZXJIVE1MID0gaHRtbFRleHRBcmc7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczU4KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlTWFya2Rvd25vdXRsZXQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWxpc3QvZGVlcy1pbnB1dC1saXN0LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMzcgPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2YzZjRmNjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGNvbG9yOiAjMzc0MTUxOwogICAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOwogICAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAub3V0cHV0LXByZXZpZXcgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMmMyYzJjOwogICAgICAgICAgICBjb2xvcjogI2U0ZTRlNzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmZlYXR1cmUtbm90ZSB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNlZmY2ZmY7CiAgICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICMzYjgyZjY7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBjb2xvcjogIzFlNDBhZjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLmZlYXR1cmUtbm90ZSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxZTNhNWY7CiAgICAgICAgICAgIGNvbG9yOiAjOTNjNWZkOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjEuIEJhc2ljIExpc3QgSW5wdXQifSAuc3VidGl0bGU9JHsiU2ltcGxlIGxpc3QgbWFuYWdlbWVudCB3aXRoIGFkZCwgZWRpdCwgYW5kIGRlbGV0ZSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJTaG9wcGluZyBMaXN0In0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBZGQgaXRlbSB0byB5b3VyIGxpc3QuLi4ifQogICAgICAgICAgLnZhbHVlPSR7WyJNaWxrIiwgIkJyZWFkIiwgIkVnZ3MiLCAiQ2hlZXNlIl19CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRG91YmxlLWNsaWNrIHRvIGVkaXQgaXRlbXMsIG9yIHVzZSB0aGUgZWRpdCBidXR0b24ifQogICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5vdGUiPgogICAgICAgICAg8J+SoSBEb3VibGUtY2xpY2sgYW55IGl0ZW0gdG8gcXVpY2tseSBlZGl0IGl0IGlubGluZQogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gU29ydGFibGUgTGlzdCJ9IC5zdWJ0aXRsZT0keyJEcmFnIGFuZCBkcm9wIHRvIHJlb3JkZXIgaXRlbXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAubGFiZWw9JHsiVGFzayBQcmlvcml0eSJ9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIGEgdGFzay4uLiJ9CiAgICAgICAgICAuc29ydGFibGU9JHt0cnVlfQogICAgICAgICAgLnZhbHVlPSR7WwogICJSZXZpZXcgcHVsbCByZXF1ZXN0cyIsCiAgIkZpeCBjcml0aWNhbCBidWciLAogICJVcGRhdGUgZG9jdW1lbnRhdGlvbiIsCiAgIkRlcGxveSB0byBwcm9kdWN0aW9uIiwKICAiVGVhbSBzdGFuZHVwIG1lZXRpbmciCl19CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRHJhZyBpdGVtcyB1c2luZyB0aGUgaGFuZGxlIHRvIHJlb3JkZXIgdGhlbSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtbm90ZSI+CiAgICAgICAgICDwn5SEIERyYWcgdGhlIGdyaXAgaGFuZGxlIHRvIHJlb3JkZXIgdGFza3MgYnkgcHJpb3JpdHkKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIFZhbGlkYXRpb24gJiBDb25zdHJhaW50cyJ9IC5zdWJ0aXRsZT0keyJMaXN0cyB3aXRoIG1pbmltdW0vbWF4aW11bSBpdGVtcyBhbmQgZHVwbGljYXRlIHByZXZlbnRpb24ifT4KICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWxheW91dCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJUZWFtIE1lbWJlcnMgKE1pbiAyLCBNYXggNSkifQogICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIHRlYW0gbWVtYmVyLi4uIn0KICAgICAgICAgICAgLm1pbkl0ZW1zPSR7Mn0KICAgICAgICAgICAgLm1heEl0ZW1zPSR7NX0KICAgICAgICAgICAgLnZhbHVlPSR7WyJBbGljZSIsICJCb2IiXX0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFkZCAyLTUgdGVhbSBtZW1iZXJzIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAubGFiZWw9JHsiVW5pcXVlIFRhZ3MgKE5vIER1cGxpY2F0ZXMpIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCB1bmlxdWUgdGFnLi4uIn0KICAgICAgICAgICAgLmFsbG93RHVwbGljYXRlcz0ke2ZhbHNlfQogICAgICAgICAgICAudmFsdWU9JHtbImZyb250ZW5kIiwgImJhY2tlbmQiLCAiZGF0YWJhc2UiXX0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkR1cGxpY2F0ZSBpdGVtcyBhcmUgbm90IGFsbG93ZWQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNC4gRGVsZXRlIENvbmZpcm1hdGlvbiJ9IC5zdWJ0aXRsZT0keyJSZXF1aXJlIGNvbmZpcm1hdGlvbiBiZWZvcmUgZGVsZXRpbmcgaXRlbXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAubGFiZWw9JHsiSW1wb3J0YW50IERvY3VtZW50cyJ9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIGRvY3VtZW50IG5hbWUuLi4ifQogICAgICAgICAgLmNvbmZpcm1EZWxldGU9JHt0cnVlfQogICAgICAgICAgLnZhbHVlPSR7WwogICJDb250cmFjdF8yMDI0LnBkZiIsCiAgIkZpbmFuY2lhbF9SZXBvcnRfUTMueGxzeCIsCiAgIlByb2plY3RfUHJvcG9zYWwuZG9jeCIsCiAgIk1lZXRpbmdfTm90ZXMudHh0IgpdfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkRlbGV0aW9uIHJlcXVpcmVzIGNvbmZpcm1hdGlvbiBmb3Igc2FmZXR5In0KICAgICAgICA+PC9kZWVzLWlucHV0LWxpc3Q+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI1LiBEaXNhYmxlZCBTdGF0ZSJ9IC5zdWJ0aXRsZT0keyJSZWFkLW9ubHkgbGlzdCBkaXNwbGF5In0+CiAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlN5c3RlbSBEZWZhdWx0cyJ9CiAgICAgICAgICAudmFsdWU9JHtbIkRlZmF1bHQgU2V0dGluZyAxIiwgIkRlZmF1bHQgU2V0dGluZyAyIiwgIkRlZmF1bHQgU2V0dGluZyAzIl19CiAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoZXNlIGl0ZW1zIGNhbm5vdCBiZSBtb2RpZmllZCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNi4gRm9ybSBJbnRlZ3JhdGlvbiJ9IC5zdWJ0aXRsZT0keyJMaXN0IGlucHV0IHdvcmtpbmcgd2l0aGluIGEgZm9ybSBjb250ZXh0In0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IlJlY2lwZSBOYW1lIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7Ik15IEFtYXppbmcgUmVjaXBlIn0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgLmtleT0keyJuYW1lIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAgICAgLmxhYmVsPSR7IkluZ3JlZGllbnRzIn0KICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIGluZ3JlZGllbnQuLi4ifQogICAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgICAgLm1pbkl0ZW1zPSR7M30KICAgICAgICAgICAgICAua2V5PSR7ImluZ3JlZGllbnRzIn0KICAgICAgICAgICAgICAuc29ydGFibGU9JHt0cnVlfQogICAgICAgICAgICAgIC52YWx1ZT0ke1sKICAiMiBjdXBzIGZsb3VyIiwKICAiMSBjdXAgc3VnYXIiLAogICIzIGVnZ3MiCl19CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFkZCBhdCBsZWFzdCAzIGluZ3JlZGllbnRzIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAgIC5sYWJlbD0keyJJbnN0cnVjdGlvbnMifQogICAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBZGQgaW5zdHJ1Y3Rpb24gc3RlcC4uLiJ9CiAgICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgICAubWluSXRlbXM9JHsyfQogICAgICAgICAgICAgIC5rZXk9JHsiaW5zdHJ1Y3Rpb25zIn0KICAgICAgICAgICAgICAuc29ydGFibGU9JHt0cnVlfQogICAgICAgICAgICAgIC52YWx1ZT0ke1sKICAiUHJlaGVhdCBvdmVuIHRvIDM1MFx4QjBGIiwKICAiTWl4IGRyeSBpbmdyZWRpZW50cyIKXX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGNvb2tpbmcgaW5zdHJ1Y3Rpb25zIGluIG9yZGVyIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7Ik5vdGVzIn0KICAgICAgICAgICAgLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9CiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBbnkgc3BlY2lhbCBub3RlcyBvciB0aXBzLi4uIn0KICAgICAgICAgICAgLmtleT0keyJub3RlcyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IC50ZXh0PSR7IlNhdmUgUmVjaXBlIn0+PC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNy4gSW50ZXJhY3RpdmUgRGVtbyJ9IC5zdWJ0aXRsZT0keyJCdWlsZCB5b3VyIG93biBmZWF0dXJlIGxpc3QgYW5kIHNlZSB0aGUgZGF0YSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS1saXN0IgogICAgICAgICAgLmxhYmVsPSR7IlByb2R1Y3QgRmVhdHVyZXMifQogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCBhIGZlYXR1cmUuLi4ifQogICAgICAgICAgLnNvcnRhYmxlPSR7dHJ1ZX0KICAgICAgICAgIC5jb25maXJtRGVsZXRlPSR7ZmFsc2V9CiAgICAgICAgICAuYWxsb3dEdXBsaWNhdGVzPSR7ZmFsc2V9CiAgICAgICAgICAubWF4SXRlbXM9JHsxMH0KICAgICAgICAgIEBjaGFuZ2U9JHsoZTExKSA9PiB7CiAgY29uc3QgcHJldmlldyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNsaXN0LWpzb24iKTsKICBpZiAocHJldmlldykgewogICAgY29uc3QgZGF0YSA9IHsKICAgICAgaXRlbXM6IGUxMS5kZXRhaWwudmFsdWUsCiAgICAgIGNvdW50OiBlMTEuZGV0YWlsLnZhbHVlLmxlbmd0aCwKICAgICAgdGltZXN0YW1wOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCkKICAgIH07CiAgICBwcmV2aWV3LnRleHRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7CiAgfQp9fQogICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJvdXRwdXQtcHJldmlldyIgaWQ9Imxpc3QtanNvbiI+CiAgICAgICAgICB7CiAgICAgICAgICAgICJpdGVtcyI6IFtdLAogICAgICAgICAgICAiY291bnQiOiAwLAogICAgICAgICAgICAidGltZXN0YW1wIjogIiR7KC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpfSIKICAgICAgICAgIH0KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5vdGUiPgogICAgICAgICAg4pyoIEFkZCwgZWRpdCwgcmVtb3ZlLCBhbmQgcmVvcmRlciBpdGVtcyB0byBzZWUgdGhlIEpTT04gb3V0cHV0IHVwZGF0ZSBpbiByZWFsLXRpbWUKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjguIEFkdmFuY2VkIENvbmZpZ3VyYXRpb24ifSAuc3VidGl0bGU9JHsiQ29tYmluZSBhbGwgZmVhdHVyZXMgZm9yIGNvbXBsZXggdXNlIGNhc2VzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlByb2plY3QgTWlsZXN0b25lcyJ9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIG1pbGVzdG9uZS4uLiJ9CiAgICAgICAgICAudmFsdWU9JHtbCiAgIlByb2plY3QgS2lja29mZiAtIFdlZWsgMSIsCiAgIlJlcXVpcmVtZW50cyBHYXRoZXJpbmcgLSBXZWVrIDItMyIsCiAgIkRlc2lnbiBQaGFzZSAtIFdlZWsgNC02IiwKICAiRGV2ZWxvcG1lbnQgU3ByaW50IDEgLSBXZWVrIDctOSIsCiAgIlRlc3RpbmcgJiBRQSAtIFdlZWsgMTAtMTEiLAogICJEZXBsb3ltZW50IC0gV2VlayAxMiIKXX0KICAgICAgICAgIC5zb3J0YWJsZT0ke3RydWV9CiAgICAgICAgICAuY29uZmlybURlbGV0ZT0ke3RydWV9CiAgICAgICAgICAuYWxsb3dEdXBsaWNhdGVzPSR7ZmFsc2V9CiAgICAgICAgICAubWluSXRlbXM9JHszfQogICAgICAgICAgLm1heEl0ZW1zPSR7MTJ9CiAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7Ik1hbmFnZSBwcm9qZWN0IG1pbGVzdG9uZXMgKDMtMTIgaXRlbXMsIHNvcnRhYmxlLCBubyBkdXBsaWNhdGVzKSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiOS4gRW1wdHkgU3RhdGUifSAuc3VidGl0bGU9JHsiSG93IHRoZSBjb21wb25lbnQgbG9va3Mgd2l0aCBubyBpdGVtcyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJZb3VyIElkZWFzIn0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJTaGFyZSB5b3VyIGlkZWFzLi4uIn0KICAgICAgICAgIC52YWx1ZT0ke1tdfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlN0YXJ0IGFkZGluZyBpdGVtcyB0byBidWlsZCB5b3VyIGxpc3QifQogICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtbGlzdC9kZWVzLWlucHV0LWxpc3QuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNTggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczU5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRMaXN0ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1saXN0IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9yczsKICBsZXQgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21heEl0ZW1zX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21heEl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5JdGVtc19kZWNvcmF0b3JzOwogIGxldCBfbWluSXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5JdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWxsb3dEdXBsaWNhdGVzX2RlY29yYXRvcnM7CiAgbGV0IF9hbGxvd0R1cGxpY2F0ZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hbGxvd0R1cGxpY2F0ZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NvcnRhYmxlX2RlY29yYXRvcnM7CiAgbGV0IF9zb3J0YWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NvcnRhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb25maXJtRGVsZXRlX2RlY29yYXRvcnM7CiAgbGV0IF9jb25maXJtRGVsZXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29uZmlybURlbGV0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9yczsKICBsZXQgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lucHV0VmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX2lucHV0VmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lZGl0aW5nSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX2VkaXRpbmdJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VkaXRpbmdJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZWRpdGluZ1ZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF9lZGl0aW5nVmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lZGl0aW5nVmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RyYWdnZWRJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfZHJhZ2dlZEluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ2dlZEluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kcmFnT3ZlckluZGV4X2RlY29yYXRvcnM7CiAgbGV0IF9kcmFnT3ZlckluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ092ZXJJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ1N0YXJ0WV9kZWNvcmF0b3JzOwogIGxldCBfZHJhZ1N0YXJ0WV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RyYWdTdGFydFlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RyYWdDdXJyZW50WV9kZWNvcmF0b3JzOwogIGxldCBfZHJhZ0N1cnJlbnRZX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ0N1cnJlbnRZX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YXJnZXRJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfdGFyZ2V0SW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YXJnZXRJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXRlbUhlaWdodF9kZWNvcmF0b3JzOwogIGxldCBfaXRlbUhlaWdodF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2l0ZW1IZWlnaHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0TGlzdDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tYXhJdGVtc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX21pbkl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfYWxsb3dEdXBsaWNhdGVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX3NvcnRhYmxlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2NvbmZpcm1EZWxldGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9lZGl0aW5nSW5kZXhfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2VkaXRpbmdWYWx1ZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZHJhZ2dlZEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kcmFnT3ZlckluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kcmFnU3RhcnRZX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kcmFnQ3VycmVudFlfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3RhcmdldEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pdGVtSGVpZ2h0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTU4KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBsYWNlaG9sZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwbGFjZWhvbGRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wbGFjZWhvbGRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGxhY2Vob2xkZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfbWF4SXRlbXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWF4SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heEl0ZW1zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heEl0ZW1zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYXhJdGVtcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhJdGVtc19pbml0aWFsaXplcnMsIF9tYXhJdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU4KHRoaXMsIG51bGwsIF9taW5JdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtaW5JdGVtcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWluSXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWluSXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1pbkl0ZW1zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21pbkl0ZW1zX2luaXRpYWxpemVycywgX21pbkl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2FsbG93RHVwbGljYXRlc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhbGxvd0R1cGxpY2F0ZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFsbG93RHVwbGljYXRlcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hbGxvd0R1cGxpY2F0ZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFsbG93RHVwbGljYXRlcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hbGxvd0R1cGxpY2F0ZXNfaW5pdGlhbGl6ZXJzLCBfYWxsb3dEdXBsaWNhdGVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX3NvcnRhYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNvcnRhYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzb3J0YWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zb3J0YWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc29ydGFibGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc29ydGFibGVfaW5pdGlhbGl6ZXJzLCBfc29ydGFibGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfY29uZmlybURlbGV0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb25maXJtRGVsZXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb25maXJtRGVsZXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbmZpcm1EZWxldGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbmZpcm1EZWxldGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29uZmlybURlbGV0ZV9pbml0aWFsaXplcnMsIF9jb25maXJtRGVsZXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX3ZhbGlkYXRpb25UZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbGlkYXRpb25UZXh0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uVGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWxpZGF0aW9uVGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsaWRhdGlvblRleHQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvblRleHRfaW5pdGlhbGl6ZXJzLCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfaW5wdXRWYWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbnB1dFZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbnB1dFZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlucHV0VmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlucHV0VmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5wdXRWYWx1ZV9pbml0aWFsaXplcnMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2VkaXRpbmdJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlZGl0aW5nSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVkaXRpbmdJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lZGl0aW5nSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVkaXRpbmdJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lZGl0aW5nSW5kZXhfaW5pdGlhbGl6ZXJzLCBfZWRpdGluZ0luZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2VkaXRpbmdWYWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlZGl0aW5nVmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVkaXRpbmdWYWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lZGl0aW5nVmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVkaXRpbmdWYWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lZGl0aW5nVmFsdWVfaW5pdGlhbGl6ZXJzLCBfZWRpdGluZ1ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2RyYWdnZWRJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkcmFnZ2VkSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRyYWdnZWRJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kcmFnZ2VkSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRyYWdnZWRJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kcmFnZ2VkSW5kZXhfaW5pdGlhbGl6ZXJzLCBfZHJhZ2dlZEluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2RyYWdPdmVySW5kZXhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZHJhZ092ZXJJbmRleCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHJhZ092ZXJJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kcmFnT3ZlckluZGV4LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kcmFnT3ZlckluZGV4ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RyYWdPdmVySW5kZXhfaW5pdGlhbGl6ZXJzLCBfZHJhZ092ZXJJbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU4KHRoaXMsIG51bGwsIF9kcmFnU3RhcnRZX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdTdGFydFkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRyYWdTdGFydFkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZHJhZ1N0YXJ0WSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHJhZ1N0YXJ0WSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kcmFnU3RhcnRZX2luaXRpYWxpemVycywgX2RyYWdTdGFydFlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfZHJhZ0N1cnJlbnRZX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdDdXJyZW50WSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHJhZ0N1cnJlbnRZIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRyYWdDdXJyZW50WSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHJhZ0N1cnJlbnRZID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RyYWdDdXJyZW50WV9pbml0aWFsaXplcnMsIF9kcmFnQ3VycmVudFlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfdGFyZ2V0SW5kZXhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFyZ2V0SW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRhcmdldEluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhcmdldEluZGV4LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YXJnZXRJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90YXJnZXRJbmRleF9pbml0aWFsaXplcnMsIF90YXJnZXRJbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU4KHRoaXMsIG51bGwsIF9pdGVtSGVpZ2h0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIml0ZW1IZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIml0ZW1IZWlnaHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXRlbUhlaWdodCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXRlbUhlaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pdGVtSGVpZ2h0X2luaXRpYWxpemVycywgX2l0ZW1IZWlnaHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dExpc3QyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIFNUQVRJQwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzM3OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgW10pOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCB2YWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycywgIkFkZCBuZXcgaXRlbS4uLiIpKTsKICAgIGdldCBwbGFjZWhvbGRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGxhY2Vob2xkZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX21heEl0ZW1zX2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IG1heEl0ZW1zKCkgewogICAgICByZXR1cm4gdGhpcy4jbWF4SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIC8vIDAgbWVhbnMgdW5saW1pdGVkCiAgICBzZXQgbWF4SXRlbXModmFsdWUyKSB7CiAgICAgIHRoaXMuI21heEl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWluSXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9tYXhJdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX21pbkl0ZW1zX2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IG1pbkl0ZW1zKCkgewogICAgICByZXR1cm4gdGhpcy4jbWluSXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW5JdGVtcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWluSXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhbGxvd0R1cGxpY2F0ZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9taW5JdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2FsbG93RHVwbGljYXRlc19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgYWxsb3dEdXBsaWNhdGVzKCkgewogICAgICByZXR1cm4gdGhpcy4jYWxsb3dEdXBsaWNhdGVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWxsb3dEdXBsaWNhdGVzKHZhbHVlMikgewogICAgICB0aGlzLiNhbGxvd0R1cGxpY2F0ZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzb3J0YWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2FsbG93RHVwbGljYXRlc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3NvcnRhYmxlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzb3J0YWJsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NvcnRhYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc29ydGFibGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NvcnRhYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29uZmlybURlbGV0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3NvcnRhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfY29uZmlybURlbGV0ZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgY29uZmlybURlbGV0ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvbmZpcm1EZWxldGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb25maXJtRGVsZXRlKHZhbHVlMikgewogICAgICB0aGlzLiNjb25maXJtRGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9jb25maXJtRGVsZXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfdmFsaWRhdGlvblRleHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHZhbGlkYXRpb25UZXh0KCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWxpZGF0aW9uVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpbnB1dFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBpbnB1dFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jaW5wdXRWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlucHV0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lucHV0VmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNlZGl0aW5nSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfZWRpdGluZ0luZGV4X2luaXRpYWxpemVycywgLTEpKTsKICAgIGdldCBlZGl0aW5nSW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlZGl0aW5nSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlZGl0aW5nSW5kZXgodmFsdWUyKSB7CiAgICAgIHRoaXMuI2VkaXRpbmdJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VkaXRpbmdWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2VkaXRpbmdJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2VkaXRpbmdWYWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgZWRpdGluZ1ZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jZWRpdGluZ1ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZWRpdGluZ1ZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiNlZGl0aW5nVmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkcmFnZ2VkSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9lZGl0aW5nVmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9kcmFnZ2VkSW5kZXhfaW5pdGlhbGl6ZXJzLCAtMSkpOwogICAgZ2V0IGRyYWdnZWRJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RyYWdnZWRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRyYWdnZWRJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ2dlZEluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZHJhZ092ZXJJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2RyYWdnZWRJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2RyYWdPdmVySW5kZXhfaW5pdGlhbGl6ZXJzLCAtMSkpOwogICAgZ2V0IGRyYWdPdmVySW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkcmFnT3ZlckluZGV4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZHJhZ092ZXJJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ092ZXJJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RyYWdTdGFydFlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9kcmFnT3ZlckluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfZHJhZ1N0YXJ0WV9pbml0aWFsaXplcnMsIDApKTsKICAgIC8vIEVuaGFuY2VkIGRyYWcgc3RhdGUgZm9yIGludGVyYWN0aXZlIHJlb3JkZXJpbmcKICAgIGdldCBkcmFnU3RhcnRZKCkgewogICAgICByZXR1cm4gdGhpcy4jZHJhZ1N0YXJ0WV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRyYWdTdGFydFkodmFsdWUyKSB7CiAgICAgIHRoaXMuI2RyYWdTdGFydFlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkcmFnQ3VycmVudFlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9kcmFnU3RhcnRZX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfZHJhZ0N1cnJlbnRZX2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IGRyYWdDdXJyZW50WSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RyYWdDdXJyZW50WV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRyYWdDdXJyZW50WSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ0N1cnJlbnRZX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGFyZ2V0SW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9kcmFnQ3VycmVudFlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF90YXJnZXRJbmRleF9pbml0aWFsaXplcnMsIC0xKSk7CiAgICBnZXQgdGFyZ2V0SW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YXJnZXRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhcmdldEluZGV4KHZhbHVlMikgewogICAgICB0aGlzLiN0YXJnZXRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2l0ZW1IZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF90YXJnZXRJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2l0ZW1IZWlnaHRfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgaXRlbUhlaWdodCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2l0ZW1IZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpdGVtSGVpZ2h0KHZhbHVlMikgewogICAgICB0aGlzLiNpdGVtSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBCb3VuZCBldmVudCBoYW5kbGVycyBmb3IgY2xlYW51cAogICAgYm91bmRIYW5kbGVHbG9iYWxEcmFnT3ZlciA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9pdGVtSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICBib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQgPSBudWxsOwogICAgLy8gU3RvcmUgb3JpZ2luYWwgaXRlbSBwb3NpdGlvbnMgZm9yIGFjY3VyYXRlIGhpdCBkZXRlY3Rpb24gKGJlZm9yZSB0cmFuc2Zvcm1zKQogICAgb3JpZ2luYWxJdGVtUmVjdHMgPSBbXTsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubGlzdC1jb250YWluZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmxpc3QtY29udGFpbmVyOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CgogICAgICAubGlzdC1jb250YWluZXI6Zm9jdXMtd2l0aGluIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5saXN0LWNvbnRhaW5lci5kaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIC5saXN0LWl0ZW1zIHsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubGlzdC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBib3gtc2hhZG93IDAuMTVzIGVhc2U7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47IC8qIFByZXZlbnQgYW5pbWF0aW9uIGZyb20gYWZmZWN0aW5nIHNjcm9sbCBib3VuZHMgKi8KICAgICAgfQoKICAgICAgLmxpc3QtaXRlbTpsYXN0LW9mLXR5cGUgewogICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICAgIH0KCiAgICAgIC5saXN0LWl0ZW1zOm5vdCguaXMtZHJhZ2dpbmcpIC5saXN0LWl0ZW06aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5Ny41JSkiLCAiaHNsKDAgMCUgNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIERyYWdnaW5nIGl0ZW0gLSBmb2xsb3dzIGN1cnNvciAqLwogICAgICAubGlzdC1pdGVtLmRyYWdnaW5nIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMTAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5OCUpIiwgImhzbCgyMTUgMjAuMiUgMTIlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMTUpIiwgInJnYmEoMCwgMCwgMCwgMC40KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjE1cyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC8qIEl0ZW1zIHRoYXQgbmVlZCB0byBtb3ZlIHVwIHRvIG1ha2Ugc3BhY2UgKi8KICAgICAgLmxpc3QtaXRlbS5tb3ZlLXVwIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMSAqIHZhcigtLWl0ZW0taGVpZ2h0LCA0OHB4KSkpOwogICAgICB9CgogICAgICAvKiBJdGVtcyB0aGF0IG5lZWQgdG8gbW92ZSBkb3duIHRvIG1ha2Ugc3BhY2UgKi8KICAgICAgLmxpc3QtaXRlbS5tb3ZlLWRvd24gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSh2YXIoLS1pdGVtLWhlaWdodCwgNDhweCkpOwogICAgICB9CgoKICAgICAgLmRyYWctaGFuZGxlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwgImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuZHJhZy1oYW5kbGU6aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmRyYWctaGFuZGxlIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICB9CgogICAgICAuaXRlbS1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5pdGVtLXRleHQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLml0ZW0tZWRpdC1pbnB1dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLml0ZW0tYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5zYXZlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uc2F2ZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uY2FuY2VsIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSA1MC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLmNhbmNlbDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4xKSIsICJoc2woMCA2Mi44JSA1MC42JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLmRlbGV0ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSkiLCAiaHNsKDAgNjIuOCUgNTAuNiUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5kZWxldGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMSkiLCAiaHNsKDAgNjIuOCUgNTAuNiUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgfQoKICAgICAgLmFkZC1pdGVtLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3LjUlKSIsICJoc2woMCAwJSA2LjklKSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5hZGQtaW5wdXQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmFkZC1pbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlIC8gMC4xKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAuYWRkLWlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCAiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICB9CgogICAgICAuYWRkLWlucHV0OmRpc2FibGVkIHsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLmFkZC1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIHBhZGRpbmc6IDMycHggMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCAiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC52YWxpZGF0aW9uLW1lc3NhZ2UgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUpIiwgImhzbCgwIDYyLjglIDMwLjYlKSIpfTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luLXRvcDogNnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgIH0KCiAgICAgIC5kZXNjcmlwdGlvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgKi8KICAgICAgLmxpc3QtaXRlbXM6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICB9CgogICAgICAubGlzdC1pdGVtczo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAubGlzdC1pdGVtczo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMjQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLmxpc3QtaXRlbXM6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDM0LjklKSIpfTsKICAgICAgfQoKICAgICAgLyogRGlzYWJsZSB0cmFuc2l0aW9ucyBkdXJpbmcgZHJvcCB0byBwcmV2ZW50IGZsYXNoICovCiAgICAgIC5saXN0LWl0ZW1zLmRyb3BwaW5nIC5saXN0LWl0ZW0gewogICAgICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+YCA6ICIifQogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Imxpc3QtY29udGFpbmVyICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGlzdC1pdGVtcyI+CiAgICAgICAgICAgICR7dGhpcy52YWx1ZS5sZW5ndGggPiAwID8gdGhpcy52YWx1ZS5tYXAoKGl0ZW0sIGluZGV4MikgPT4gYjJgCiAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgY2xhc3M9Imxpc3QtaXRlbSAke3RoaXMuZHJhZ2dlZEluZGV4ID09PSBpbmRleDIgPyAiZHJhZ2dpbmciIDogIiJ9IgogICAgICAgICAgICAgICAgZHJhZ2dhYmxlPSIke3RoaXMuc29ydGFibGUgJiYgIXRoaXMuZGlzYWJsZWR9IgogICAgICAgICAgICAgICAgQGRyYWdzdGFydD0keyhlMTEpID0+IHRoaXMuaGFuZGxlRHJhZ1N0YXJ0KGUxMSwgaW5kZXgyKX0KICAgICAgICAgICAgICAgIEBkcmFnZW5kPSR7dGhpcy5oYW5kbGVEcmFnRW5kfQogICAgICAgICAgICAgICAgQGRyYWdvdmVyPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVEcmFnT3ZlcihlMTEsIGluZGV4Mil9CiAgICAgICAgICAgICAgICBAZHJvcD0keyhlMTEpID0+IHRoaXMuaGFuZGxlRHJvcChlMTEsIGluZGV4Mil9CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgJHt0aGlzLnNvcnRhYmxlICYmICF0aGlzLmRpc2FibGVkID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRyYWctaGFuZGxlIj4KICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpncmlwVmVydGljYWwifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Iml0ZW0tY29udGVudCI+CiAgICAgICAgICAgICAgICAgICR7dGhpcy5lZGl0aW5nSW5kZXggPT09IGluZGV4MiA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpdGVtLWVkaXQtaW5wdXQiCiAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLmVkaXRpbmdWYWx1ZX0KICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IHRoaXMuZWRpdGluZ1ZhbHVlID0gZTExLnRhcmdldC52YWx1ZX0KICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVFZGl0S2V5RG93bihlMTEsIGluZGV4Mil9CiAgICAgICAgICAgICAgICAgICAgICBAYmx1cj0keygpID0+IHRoaXMuc2F2ZUVkaXQoaW5kZXgyKX0KICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS10ZXh0IiBAZGJsY2xpY2s9JHsoKSA9PiAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLnN0YXJ0RWRpdChpbmRleDIpfT4KICAgICAgICAgICAgICAgICAgICAgICR7aXRlbX0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgICAke3RoaXMuZWRpdGluZ0luZGV4ID09PSBpbmRleDIgPyBiMmAKICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnV0dG9uIHNhdmUiIEBjbGljaz0keygpID0+IHRoaXMuc2F2ZUVkaXQoaW5kZXgyKX0+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpjaGVjayJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24gY2FuY2VsIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNhbmNlbEVkaXQoKX0+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp4In0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIGAgOiBiMmAKICAgICAgICAgICAgICAgICAgICAkeyF0aGlzLmRpc2FibGVkID8gYjJgCiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnV0dG9uIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnN0YXJ0RWRpdChpbmRleDIpfT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6cGVuY2lsIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24gZGVsZXRlIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnJlbW92ZUl0ZW0oaW5kZXgyKX0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnRyYXNoMiJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGApIDogYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPgogICAgICAgICAgICAgICAgTm8gaXRlbXMgYWRkZWQgeWV0CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGB9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIAogICAgICAgICAgJHshdGhpcy5kaXNhYmxlZCAmJiAoIXRoaXMubWF4SXRlbXMgfHwgdGhpcy52YWx1ZS5sZW5ndGggPCB0aGlzLm1heEl0ZW1zKSA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZGQtaXRlbS1jb250YWluZXIiPgogICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgIGNsYXNzPSJhZGQtaW5wdXQiCiAgICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9JHt0aGlzLnBsYWNlaG9sZGVyfQogICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pbnB1dFZhbHVlfQogICAgICAgICAgICAgICAgQGlucHV0PSR7dGhpcy5oYW5kbGVJbnB1dH0KICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7dGhpcy5oYW5kbGVBZGRLZXlEb3dufQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgIDxkZWVzLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9ImFkZC1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmFkZEl0ZW19CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5pbnB1dFZhbHVlLnRyaW0oKX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpwbHVzIn0+PC9kZWVzLWljb24+IEFkZAogICAgICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgoKICAgICAgICAke3RoaXMudmFsaWRhdGlvblRleHQgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InZhbGlkYXRpb24tbWVzc2FnZSI+JHt0aGlzLnZhbGlkYXRpb25UZXh0fTwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgICAKICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24gPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBoYW5kbGVJbnB1dChlMTEpIHsKICAgICAgdGhpcy5pbnB1dFZhbHVlID0gZTExLnRhcmdldC52YWx1ZTsKICAgIH0KICAgIGhhbmRsZUFkZEtleURvd24oZTExKSB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiICYmIHRoaXMuaW5wdXRWYWx1ZS50cmltKCkpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmFkZEl0ZW0oKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlRWRpdEtleURvd24oZTExLCBpbmRleDIpIHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnNhdmVFZGl0KGluZGV4Mik7CiAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkVzY2FwZSIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmNhbmNlbEVkaXQoKTsKICAgICAgfQogICAgfQogICAgYWRkSXRlbSgpIHsKICAgICAgY29uc3QgdHJpbW1lZFZhbHVlID0gdGhpcy5pbnB1dFZhbHVlLnRyaW0oKTsKICAgICAgaWYgKCF0cmltbWVkVmFsdWUpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoIXRoaXMuYWxsb3dEdXBsaWNhdGVzICYmIHRoaXMudmFsdWUuaW5jbHVkZXModHJpbW1lZFZhbHVlKSkgewogICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiVGhpcyBpdGVtIGFscmVhZHkgZXhpc3RzIGluIHRoZSBsaXN0IjsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudmFsaWRhdGlvblRleHQgPSAiIiwgM2UzKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHRoaXMubWF4SXRlbXMgJiYgdGhpcy52YWx1ZS5sZW5ndGggPj0gdGhpcy5tYXhJdGVtcykgewogICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSBgTWF4aW11bSAke3RoaXMubWF4SXRlbXN9IGl0ZW1zIGFsbG93ZWRgOwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy52YWxpZGF0aW9uVGV4dCA9ICIiLCAzZTMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIHRyaW1tZWRWYWx1ZV07CiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICIiOwogICAgICB0aGlzLnZhbGlkYXRpb25UZXh0ID0gIiI7CiAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYWRkLWlucHV0Iik7CiAgICAgIGlmIChpbnB1dCkgewogICAgICAgIGlucHV0LnZhbHVlID0gIiI7CiAgICAgICAgaW5wdXQuZm9jdXMoKTsKICAgICAgfQogICAgICB0aGlzLmVtaXRDaGFuZ2UoKTsKICAgIH0KICAgIHN0YXJ0RWRpdChpbmRleDIpIHsKICAgICAgdGhpcy5lZGl0aW5nSW5kZXggPSBpbmRleDI7CiAgICAgIHRoaXMuZWRpdGluZ1ZhbHVlID0gdGhpcy52YWx1ZVtpbmRleDJdOwogICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuaXRlbS1lZGl0LWlucHV0Iik7CiAgICAgICAgaWYgKGlucHV0KSB7CiAgICAgICAgICBpbnB1dC5mb2N1cygpOwogICAgICAgICAgaW5wdXQuc2VsZWN0KCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHNhdmVFZGl0KGluZGV4MikgewogICAgICBjb25zdCB0cmltbWVkVmFsdWUgPSB0aGlzLmVkaXRpbmdWYWx1ZS50cmltKCk7CiAgICAgIGlmICghdHJpbW1lZFZhbHVlKSB7CiAgICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghdGhpcy5hbGxvd0R1cGxpY2F0ZXMgJiYgdHJpbW1lZFZhbHVlICE9PSB0aGlzLnZhbHVlW2luZGV4Ml0gJiYgdGhpcy52YWx1ZS5pbmNsdWRlcyh0cmltbWVkVmFsdWUpKSB7CiAgICAgICAgdGhpcy52YWxpZGF0aW9uVGV4dCA9ICJUaGlzIGl0ZW0gYWxyZWFkeSBleGlzdHMgaW4gdGhlIGxpc3QiOwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy52YWxpZGF0aW9uVGV4dCA9ICIiLCAzZTMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBuZXdWYWx1ZSA9IFsuLi50aGlzLnZhbHVlXTsKICAgICAgbmV3VmFsdWVbaW5kZXgyXSA9IHRyaW1tZWRWYWx1ZTsKICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlOwogICAgICB0aGlzLmVkaXRpbmdJbmRleCA9IC0xOwogICAgICB0aGlzLmVkaXRpbmdWYWx1ZSA9ICIiOwogICAgICB0aGlzLnZhbGlkYXRpb25UZXh0ID0gIiI7CiAgICAgIHRoaXMuZW1pdENoYW5nZSgpOwogICAgfQogICAgY2FuY2VsRWRpdCgpIHsKICAgICAgdGhpcy5lZGl0aW5nSW5kZXggPSAtMTsKICAgICAgdGhpcy5lZGl0aW5nVmFsdWUgPSAiIjsKICAgIH0KICAgIGFzeW5jIHJlbW92ZUl0ZW0oaW5kZXgyKSB7CiAgICAgIGlmICh0aGlzLmNvbmZpcm1EZWxldGUpIHsKICAgICAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCB0aGlzLnNob3dDb25maXJtRGlhbG9nKGBEZWxldGUgIiR7dGhpcy52YWx1ZVtpbmRleDJdfSI/YCk7CiAgICAgICAgaWYgKCFjb25maXJtZWQpCiAgICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUuZmlsdGVyKChfNCwgaTExKSA9PiBpMTEgIT09IGluZGV4Mik7CiAgICAgIHRoaXMuZW1pdENoYW5nZSgpOwogICAgfQogICAgYXN5bmMgc2hvd0NvbmZpcm1EaWFsb2cobWVzc2FnZTIpIHsKICAgICAgcmV0dXJuIGNvbmZpcm0obWVzc2FnZTIpOwogICAgfQogICAgLy8gRHJhZyBhbmQgZHJvcCBoYW5kbGVycyAtIEludGVyYWN0aXZlIGltcGxlbWVudGF0aW9uCiAgICBoYW5kbGVEcmFnU3RhcnQoZTExLCBpbmRleDIpIHsKICAgICAgaWYgKCF0aGlzLnNvcnRhYmxlIHx8IHRoaXMuZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmRyYWdnZWRJbmRleCA9IGluZGV4MjsKICAgICAgdGhpcy50YXJnZXRJbmRleCA9IGluZGV4MjsKICAgICAgZTExLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gIm1vdmUiOwogICAgICBlMTEuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLCBpbmRleDIudG9TdHJpbmcoKSk7CiAgICAgIGNvbnN0IGVtcHR5SW1nID0gbmV3IEltYWdlKCk7CiAgICAgIGVtcHR5SW1nLnNyYyA9ICJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBVUVCQUFBQUN3QUFBQUFBUUFCQUFBQ0FrUUJBRHM9IjsKICAgICAgZTExLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoZW1wdHlJbWcsIDAsIDApOwogICAgICB0aGlzLmRyYWdTdGFydFkgPSBlMTEuY2xpZW50WTsKICAgICAgdGhpcy5kcmFnQ3VycmVudFkgPSBlMTEuY2xpZW50WTsKICAgICAgY29uc3QgbGlzdEl0ZW1zID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubGlzdC1pdGVtcyIpOwogICAgICBjb25zdCBhbGxJdGVtcyA9IEFycmF5LmZyb20obGlzdEl0ZW1zPy5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIikgfHwgW10pOwogICAgICBpZiAoYWxsSXRlbXNbaW5kZXgyXSkgewogICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IGFsbEl0ZW1zW2luZGV4Ml0ub2Zmc2V0SGVpZ2h0OwogICAgICB9CiAgICAgIHRoaXMub3JpZ2luYWxJdGVtUmVjdHMgPSBhbGxJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpOwogICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5hZGQoImlzLWRyYWdnaW5nIik7CiAgICAgIHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnT3ZlciA9IHRoaXMuaGFuZGxlR2xvYmFsRHJhZ092ZXIuYmluZCh0aGlzKTsKICAgICAgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQgPSB0aGlzLmhhbmRsZUdsb2JhbERyYWdFbmQuYmluZCh0aGlzKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCB0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ092ZXIpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW5kIiwgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQpOwogICAgfQogICAgaGFuZGxlR2xvYmFsRHJhZ092ZXIoZTExKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAodGhpcy5kcmFnZ2VkSW5kZXggPT09IC0xKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5kcmFnQ3VycmVudFkgPSBlMTEuY2xpZW50WTsKICAgICAgY29uc3QgbGlzdEl0ZW1zID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubGlzdC1pdGVtcyIpOwogICAgICBpZiAoIWxpc3RJdGVtcykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuZnJvbShsaXN0SXRlbXMucXVlcnlTZWxlY3RvckFsbCgiLmxpc3QtaXRlbSIpKTsKICAgICAgY29uc3QgZHJhZ2dlZEVsZW1lbnQgPSBpdGVtc1t0aGlzLmRyYWdnZWRJbmRleF07CiAgICAgIGlmICghZHJhZ2dlZEVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBkZWx0YVkgPSB0aGlzLmRyYWdDdXJyZW50WSAtIHRoaXMuZHJhZ1N0YXJ0WTsKICAgICAgZHJhZ2dlZEVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtkZWx0YVl9cHgpYDsKICAgICAgY29uc3QgZHJhZ2dlZFJlY3QgPSB0aGlzLm9yaWdpbmFsSXRlbVJlY3RzW3RoaXMuZHJhZ2dlZEluZGV4XTsKICAgICAgaWYgKCFkcmFnZ2VkUmVjdCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGRyYWdnZWRDZW50ZXIgPSBkcmFnZ2VkUmVjdC50b3AgKyBkcmFnZ2VkUmVjdC5oZWlnaHQgLyAyICsgZGVsdGFZOwogICAgICBsZXQgbmV3VGFyZ2V0SW5kZXggPSB0aGlzLmRyYWdnZWRJbmRleDsKICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgaXRlbXMubGVuZ3RoOyBpMTErKykgewogICAgICAgIGlmIChpMTEgPT09IHRoaXMuZHJhZ2dlZEluZGV4KQogICAgICAgICAgY29udGludWU7CiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMub3JpZ2luYWxJdGVtUmVjdHNbaTExXTsKICAgICAgICBpZiAoIXJlY3QpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBsZXQgaXRlbUNlbnRlciA9IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyAyOwogICAgICAgIGlmIChpdGVtc1tpMTFdLmNsYXNzTGlzdC5jb250YWlucygibW92ZS11cCIpKSB7CiAgICAgICAgICBpdGVtQ2VudGVyIC09IHRoaXMuaXRlbUhlaWdodDsKICAgICAgICB9IGVsc2UgaWYgKGl0ZW1zW2kxMV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJtb3ZlLWRvd24iKSkgewogICAgICAgICAgaXRlbUNlbnRlciArPSB0aGlzLml0ZW1IZWlnaHQ7CiAgICAgICAgfQogICAgICAgIGlmIChkcmFnZ2VkQ2VudGVyIDwgaXRlbUNlbnRlciAmJiBpMTEgPCB0aGlzLmRyYWdnZWRJbmRleCkgewogICAgICAgICAgbmV3VGFyZ2V0SW5kZXggPSBpMTE7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgaWYgKGRyYWdnZWRDZW50ZXIgPiBpdGVtQ2VudGVyICYmIGkxMSA+IHRoaXMuZHJhZ2dlZEluZGV4KSB7CiAgICAgICAgICBuZXdUYXJnZXRJbmRleCA9IGkxMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKG5ld1RhcmdldEluZGV4ICE9PSB0aGlzLnRhcmdldEluZGV4KSB7CiAgICAgICAgdGhpcy50YXJnZXRJbmRleCA9IG5ld1RhcmdldEluZGV4OwogICAgICAgIHRoaXMudXBkYXRlSXRlbVBvc2l0aW9ucyhpdGVtcyk7CiAgICAgIH0KICAgIH0KICAgIHVwZGF0ZUl0ZW1Qb3NpdGlvbnMoaXRlbXMpIHsKICAgICAgY29uc3QgZHJhZ2dlZElkeCA9IHRoaXMuZHJhZ2dlZEluZGV4OwogICAgICBjb25zdCB0YXJnZXRJZHggPSB0aGlzLnRhcmdldEluZGV4OwogICAgICBjb25zdCBsaXN0SXRlbXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik7CiAgICAgIGlmIChsaXN0SXRlbXMpIHsKICAgICAgICBsaXN0SXRlbXMuc3R5bGUuc2V0UHJvcGVydHkoIi0taXRlbS1oZWlnaHQiLCBgJHt0aGlzLml0ZW1IZWlnaHR9cHhgKTsKICAgICAgfQogICAgICBpdGVtcy5mb3JFYWNoKChpdGVtLCBpMTEpID0+IHsKICAgICAgICBpZiAoaTExID09PSBkcmFnZ2VkSWR4KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgibW92ZS11cCIsICJtb3ZlLWRvd24iKTsKICAgICAgICBpdGVtLnN0eWxlLnNldFByb3BlcnR5KCItLWl0ZW0taGVpZ2h0IiwgYCR7dGhpcy5pdGVtSGVpZ2h0fXB4YCk7CiAgICAgICAgaWYgKGRyYWdnZWRJZHggPCB0YXJnZXRJZHgpIHsKICAgICAgICAgIGlmIChpMTEgPiBkcmFnZ2VkSWR4ICYmIGkxMSA8PSB0YXJnZXRJZHgpIHsKICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCJtb3ZlLXVwIik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChkcmFnZ2VkSWR4ID4gdGFyZ2V0SWR4KSB7CiAgICAgICAgICBpZiAoaTExID49IHRhcmdldElkeCAmJiBpMTEgPCBkcmFnZ2VkSWR4KSB7CiAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgibW92ZS1kb3duIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGhhbmRsZUdsb2JhbERyYWdFbmQoKSB7CiAgICAgIGlmICh0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ092ZXIpIHsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnT3Zlcik7CiAgICAgICAgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdPdmVyID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQpIHsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnZW5kIiwgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQpOwogICAgICAgIHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnRW5kID0gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBsaXN0SXRlbXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik7CiAgICAgIGNvbnN0IGl0ZW1zID0gbGlzdEl0ZW1zPy5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIik7CiAgICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50ID0gaXRlbXM/Llt0aGlzLmRyYWdnZWRJbmRleF07CiAgICAgIGlmICh0aGlzLmRyYWdnZWRJbmRleCA9PT0gLTEgfHwgdGhpcy50YXJnZXRJbmRleCA9PT0gLTEgfHwgdGhpcy5kcmFnZ2VkSW5kZXggPT09IHRoaXMudGFyZ2V0SW5kZXgpIHsKICAgICAgICBpZiAoZHJhZ2dlZEVsZW1lbnQgJiYgdGhpcy5kcmFnZ2VkSW5kZXggIT09IC0xKSB7CiAgICAgICAgICBkcmFnZ2VkRWxlbWVudC5zdHlsZS50cmFuc2l0aW9uID0gInRyYW5zZm9ybSAwLjE1cyBlYXNlIjsKICAgICAgICAgIGRyYWdnZWRFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDApIjsKICAgICAgICAgIGxldCBoYW5kbGVkMiA9IGZhbHNlOwogICAgICAgICAgY29uc3Qgb25SZXR1cm4gPSAoKSA9PiB7CiAgICAgICAgICAgIGlmIChoYW5kbGVkMikKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGhhbmRsZWQyID0gdHJ1ZTsKICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsIG9uUmV0dXJuKTsKICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ1N0YXRlKGxpc3RJdGVtcywgaXRlbXMpOwogICAgICAgICAgfTsKICAgICAgICAgIGRyYWdnZWRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLCBvblJldHVybiwgeyBvbmNlOiB0cnVlIH0pOwogICAgICAgICAgc2V0VGltZW91dChvblJldHVybiwgMjAwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ1N0YXRlKGxpc3RJdGVtcywgaXRlbXMpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgZHJhZ2dlZFJlY3QgPSB0aGlzLm9yaWdpbmFsSXRlbVJlY3RzW3RoaXMuZHJhZ2dlZEluZGV4XTsKICAgICAgY29uc3QgdGFyZ2V0UmVjdCA9IHRoaXMub3JpZ2luYWxJdGVtUmVjdHNbdGhpcy50YXJnZXRJbmRleF07CiAgICAgIGlmICghZHJhZ2dlZFJlY3QgfHwgIXRhcmdldFJlY3QgfHwgIWRyYWdnZWRFbGVtZW50KSB7CiAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ1N0YXRlKGxpc3RJdGVtcywgaXRlbXMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBsZXQgZmluYWxZOwogICAgICBpZiAodGhpcy50YXJnZXRJbmRleCA+IHRoaXMuZHJhZ2dlZEluZGV4KSB7CiAgICAgICAgZmluYWxZID0gdGFyZ2V0UmVjdC5ib3R0b20gLSBkcmFnZ2VkUmVjdC5ib3R0b207CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmluYWxZID0gdGFyZ2V0UmVjdC50b3AgLSBkcmFnZ2VkUmVjdC50b3A7CiAgICAgIH0KICAgICAgZHJhZ2dlZEVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbiA9ICJ0cmFuc2Zvcm0gMC4xNXMgZWFzZSI7CiAgICAgIGRyYWdnZWRFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7ZmluYWxZfXB4KWA7CiAgICAgIGxldCBoYW5kbGVkID0gZmFsc2U7CiAgICAgIGNvbnN0IG9uVHJhbnNpdGlvbkVuZCA9ICgpID0+IHsKICAgICAgICBpZiAoaGFuZGxlZCkKICAgICAgICAgIHJldHVybjsKICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICBkcmFnZ2VkRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIiwgb25UcmFuc2l0aW9uRW5kKTsKICAgICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5hZGQoImRyb3BwaW5nIik7CiAgICAgICAgdm9pZCBsaXN0SXRlbXM/Lm9mZnNldEhlaWdodDsKICAgICAgICBpdGVtcz8uZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCJtb3ZlLXVwIiwgIm1vdmUtZG93biIsICJkcmFnZ2luZyIpOwogICAgICAgICAgaXRlbS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgidHJhbnNmb3JtIik7CiAgICAgICAgICBpdGVtLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2l0aW9uIik7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBbLi4udGhpcy52YWx1ZV07CiAgICAgICAgY29uc3QgW2RyYWdnZWRJdGVtXSA9IG5ld1ZhbHVlLnNwbGljZSh0aGlzLmRyYWdnZWRJbmRleCwgMSk7CiAgICAgICAgbmV3VmFsdWUuc3BsaWNlKHRoaXMudGFyZ2V0SW5kZXgsIDAsIGRyYWdnZWRJdGVtKTsKICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7CiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7CiAgICAgICAgdGhpcy5kcmFnZ2VkSW5kZXggPSAtMTsKICAgICAgICB0aGlzLmRyYWdPdmVySW5kZXggPSAtMTsKICAgICAgICB0aGlzLnRhcmdldEluZGV4ID0gLTE7CiAgICAgICAgdGhpcy5kcmFnU3RhcnRZID0gMDsKICAgICAgICB0aGlzLmRyYWdDdXJyZW50WSA9IDA7CiAgICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1SZWN0cyA9IFtdOwogICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB7CiAgICAgICAgICBjb25zdCBmcmVzaEl0ZW1zID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIik7CiAgICAgICAgICBmcmVzaEl0ZW1zPy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgICAgIGl0ZW0uc3R5bGUudHJhbnNpdGlvbiA9ICJub25lIjsKICAgICAgICAgIH0pOwogICAgICAgICAgdm9pZCB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik/Lm9mZnNldEhlaWdodDsKICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgIGZyZXNoSXRlbXM/LmZvckVhY2goKGl0ZW0pID0+IHsKICAgICAgICAgICAgICBpdGVtLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2l0aW9uIik7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5yZW1vdmUoImRyb3BwaW5nIiwgImlzLWRyYWdnaW5nIik7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgZHJhZ2dlZEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsIG9uVHJhbnNpdGlvbkVuZCwgeyBvbmNlOiB0cnVlIH0pOwogICAgICBzZXRUaW1lb3V0KG9uVHJhbnNpdGlvbkVuZCwgMjAwKTsKICAgIH0KICAgIGNsZWFudXBEcmFnU3RhdGUobGlzdEl0ZW1zLCBpdGVtcykgewogICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5hZGQoImRyb3BwaW5nIik7CiAgICAgIHZvaWQgbGlzdEl0ZW1zPy5vZmZzZXRIZWlnaHQ7CiAgICAgIGl0ZW1zPy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCJtb3ZlLXVwIiwgIm1vdmUtZG93biIsICJkcmFnZ2luZyIpOwogICAgICAgIGl0ZW0uc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zZm9ybSIpOwogICAgICAgIGl0ZW0uc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zaXRpb24iKTsKICAgICAgfSk7CiAgICAgIHRoaXMuZHJhZ2dlZEluZGV4ID0gLTE7CiAgICAgIHRoaXMuZHJhZ092ZXJJbmRleCA9IC0xOwogICAgICB0aGlzLnRhcmdldEluZGV4ID0gLTE7CiAgICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IDA7CiAgICAgIHRoaXMuZHJhZ0N1cnJlbnRZID0gMDsKICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1SZWN0cyA9IFtdOwogICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgIGNvbnN0IGZyZXNoSXRlbXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5saXN0LWl0ZW0iKTsKICAgICAgICBmcmVzaEl0ZW1zPy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgICBpdGVtLnN0eWxlLnRyYW5zaXRpb24gPSAibm9uZSI7CiAgICAgICAgfSk7CiAgICAgICAgdm9pZCB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik/Lm9mZnNldEhlaWdodDsKICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgZnJlc2hJdGVtcz8uZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICAgICAgICBpdGVtLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2l0aW9uIik7CiAgICAgICAgICB9KTsKICAgICAgICAgIGxpc3RJdGVtcz8uY2xhc3NMaXN0LnJlbW92ZSgiZHJvcHBpbmciLCAiaXMtZHJhZ2dpbmciKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgICBoYW5kbGVEcmFnRW5kKCkgewogICAgICB0aGlzLmhhbmRsZUdsb2JhbERyYWdFbmQoKTsKICAgIH0KICAgIGhhbmRsZURyYWdPdmVyKGUxMSwgaW5kZXgyKSB7CiAgICAgIGlmICghdGhpcy5zb3J0YWJsZSB8fCB0aGlzLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGUxMS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICJtb3ZlIjsKICAgIH0KICAgIGhhbmRsZURyYWdMZWF2ZSgpIHsKICAgIH0KICAgIGhhbmRsZURyb3AoZTExLCBkcm9wSW5kZXgpIHsKICAgICAgaWYgKCF0aGlzLnNvcnRhYmxlIHx8IHRoaXMuZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgIH0KICAgIGVtaXRDaGFuZ2UoKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNoYW5nZSIsIHsKICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHRoaXMudmFsdWUgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMiB8fCBbXTsKICAgIH0KICAgIGFzeW5jIHZhbGlkYXRlKCkgewogICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAoIXRoaXMudmFsdWUgfHwgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApKSB7CiAgICAgICAgdGhpcy52YWxpZGF0aW9uVGV4dCA9ICJBdCBsZWFzdCBvbmUgaXRlbSBpcyByZXF1aXJlZCI7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmICh0aGlzLm1pbkl0ZW1zICYmIHRoaXMudmFsdWUubGVuZ3RoIDwgdGhpcy5taW5JdGVtcykgewogICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSBgQXQgbGVhc3QgJHt0aGlzLm1pbkl0ZW1zfSBpdGVtcyByZXF1aXJlZGA7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiIjsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczU5KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSW5wdXRMaXN0MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1yaWNodGV4dC9kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzM4ID0gKCkgPT4gYjJgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5vdXRwdXQtcHJldmlldyB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNmM2Y0ZjY7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBjb2xvcjogIzM3NDE1MTsKICAgICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzJjMmMyYzsKICAgICAgICAgICAgY29sb3I6ICNlNGU0ZTc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gQmFzaWMgUmljaCBUZXh0IEVkaXRvciJ9IC5zdWJ0aXRsZT0keyJBIGZ1bGwtZmVhdHVyZWQgcmljaCB0ZXh0IGVkaXRvciB3aXRoIGZvcm1hdHRpbmcgdG9vbGJhciJ9PgogICAgICAgIDxkZWVzLWlucHV0LXJpY2h0ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IkFydGljbGUgQ29udGVudCJ9IAogICAgICAgICAgLnZhbHVlPSR7JzxoMT5XZWxjb21lIHRvIHRoZSBSaWNoIFRleHQgRWRpdG9yITwvaDE+PHA+VGhpcyBpcyBhIGZlYXR1cmUtcmljaCBlZGl0b3IgYnVpbHQgd2l0aCBUaXBUYXAuIFlvdSBjYW46PC9wPjx1bD48bGk+PHN0cm9uZz5Gb3JtYXQgdGV4dDwvc3Ryb25nPiB3aXRoIDxlbT52YXJpb3VzPC9lbT4gPHU+c3R5bGVzPC91PjwvbGk+PGxpPkNyZWF0ZSBkaWZmZXJlbnQgaGVhZGluZyBsZXZlbHM8L2xpPjxsaT5BZGQgPGEgaHJlZj0iaHR0cHM6Ly9leGFtcGxlLmNvbSI+bGlua3M8L2E+IHRvIGV4dGVybmFsIHJlc291cmNlczwvbGk+PGxpPldyaXRlIDxjb2RlPmlubGluZSBjb2RlPC9jb2RlPiBvciBjb2RlIGJsb2NrczwvbGk+PC91bD48YmxvY2txdW90ZT48cD5Vc2UgdGhlIHRvb2xiYXIgYWJvdmUgdG8gZXhwbG9yZSBhbGwgdGhlIGZvcm1hdHRpbmcgb3B0aW9ucyBhdmFpbGFibGUhPC9wPjwvYmxvY2txdW90ZT48cD5TdGFydCB0eXBpbmcgdG8gc2VlIHRoZSBtYWdpYyBoYXBwZW4uLi48L3A+J30KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJVc2UgdGhlIHRvb2xiYXIgdG8gZm9ybWF0IHlvdXIgY29udGVudCB3aXRoIGhlYWRpbmdzLCBsaXN0cywgbGlua3MsIGFuZCBtb3JlIn0KICAgICAgICAgIC5zaG93V29yZENvdW50PSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gV2l0aCBQbGFjZWhvbGRlciJ9IC5zdWJ0aXRsZT0keyJFbXB0eSBlZGl0b3Igd2l0aCBwbGFjZWhvbGRlciB0ZXh0In0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICAubGFiZWw9JHsiQmxvZyBQb3N0In0gCiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiU3RhcnQgd3JpdGluZyB5b3VyIGJsb2cgcG9zdCBoZXJlLi4uIn0KICAgICAgICAgIC5zaG93V29yZENvdW50PSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMy4gRGlmZmVyZW50IEhlaWdodHMifSAuc3VidGl0bGU9JHsiRWRpdG9ycyB3aXRoIGRpZmZlcmVudCBtaW5pbXVtIGhlaWdodHMgZm9yIHZhcmlvdXMgdXNlIGNhc2VzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJTaG9ydCBOb3RlIn0gCiAgICAgICAgICAgIC5taW5IZWlnaHQ9JHsxNTB9CiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJRdWljayBub3RlLi4uIn0KICAgICAgICAgICAgLnNob3dXb3JkQ291bnQ9JHtmYWxzZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmljaHRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXJpY2h0ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiRXh0ZW5kZWQgQ29udGVudCJ9IAogICAgICAgICAgICAubWluSGVpZ2h0PSR7MzAwfQogICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiV3JpdGUgeW91ciBleHRlbmRlZCBjb250ZW50IGhlcmUuLi4ifQogICAgICAgICAgICAuc2hvd1dvcmRDb3VudD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNC4gQ29kZSBFeGFtcGxlcyJ9IC5zdWJ0aXRsZT0keyJFZGl0b3IgcHJlLWZpbGxlZCB3aXRoIGNvZGUgZXhhbXBsZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1yaWNodGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJUZWNobmljYWwgRG9jdW1lbnRhdGlvbiJ9IAogICAgICAgICAgLnZhbHVlPSR7JzxoMj5JbnN0YWxsYXRpb24gR3VpZGU8L2gyPjxwPlRvIGluc3RhbGwgdGhlIHBhY2thZ2UsIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6PC9wPjxwcmU+PGNvZGU+bnBtIGluc3RhbGwgQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nPC9jb2RlPjwvcHJlPjxwPlRoZW4gaW1wb3J0IHRoZSBjb21wb25lbnQgaW4geW91ciBUeXBlU2NyaXB0IGZpbGU6PC9wPjxwcmU+PGNvZGU+aW1wb3J0IHsgRGVlc0lucHV0UmljaHRleHQgfSBmcm9tICJAZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2ciOzwvY29kZT48L3ByZT48cD5Zb3UgY2FuIG5vdyB1c2UgdGhlIDxjb2RlPiZsdDtkZWVzLWlucHV0LXJpY2h0ZXh0Jmd0OzwvY29kZT4gZWxlbWVudCBpbiB5b3VyIHRlbXBsYXRlcy48L3A+J30KICAgICAgICAgIC5taW5IZWlnaHQ9JHsyNTB9CiAgICAgICAgICAuc2hvd1dvcmRDb3VudD0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1yaWNodGV4dD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjUuIERpc2FibGVkIFN0YXRlIn0gLnN1YnRpdGxlPSR7IlJlYWQtb25seSByaWNoIHRleHQgY29udGVudCJ9PgogICAgICAgIDxkZWVzLWlucHV0LXJpY2h0ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IlB1Ymxpc2hlZCBBcnRpY2xlIChSZWFkIE9ubHkpIn0gCiAgICAgICAgICAudmFsdWU9JHsnPGgyPlRoZSBGdXR1cmUgb2YgV2ViIENvbXBvbmVudHM8L2gyPjxwPldlYiBDb21wb25lbnRzIGhhdmUgcmV2b2x1dGlvbml6ZWQgaG93IHdlIGJ1aWxkIG1vZGVybiB3ZWIgYXBwbGljYXRpb25zLi4uPC9wPjxibG9ja3F1b3RlPjxwPiJUaGUgZnV0dXJlIG9mIHdlYiBkZXZlbG9wbWVudCBsaWVzIGluIHJldXNhYmxlLCBlbmNhcHN1bGF0ZWQgY29tcG9uZW50cy4iPC9wPjwvYmxvY2txdW90ZT4nfQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC5zaG93V29yZENvdW50PSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNi4gSW50ZXJhY3RpdmUgRGVtbyJ9IC5zdWJ0aXRsZT0keyJUeXBlIGluIHRoZSBlZGl0b3IgYmVsb3cgYW5kIHNlZSB0aGUgSFRNTCBvdXRwdXQifT4KICAgICAgICA8ZGVlcy1pbnB1dC1yaWNodGV4dCAKICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS1lZGl0b3IiCiAgICAgICAgICAubGFiZWw9JHsiVHJ5IGl0IHlvdXJzZWxmIn0gCiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiVHlwZSBzb21ldGhpbmcgaGVyZS4uLiJ9CiAgICAgICAgICAuc2hvd1dvcmRDb3VudD0ke3RydWV9CiAgICAgICAgICBAY2hhbmdlPSR7KGUxMSkgPT4gewogIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNvdXRwdXQtcHJldmlldyIpOwogIGlmIChvdXRwdXQpIHsKICAgIG91dHB1dC50ZXh0Q29udGVudCA9IGUxMS5kZXRhaWwudmFsdWU7CiAgfQp9fQogICAgICAgID48L2RlZXMtaW5wdXQtcmljaHRleHQ+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LXByZXZpZXciIGlkPSJvdXRwdXQtcHJldmlldyI+CiAgICAgICAgICA8ZW0+SFRNTCBvdXRwdXQgd2lsbCBhcHBlYXIgaGVyZS4uLjwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXJpY2h0ZXh0L3N0eWxlcy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgcmljaHRleHRTdHlsZXMgPSBbCiAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZvbnQtZmFtaWx5OiBJbnRlciwgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5pbnB1dC13cmFwcGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5sYWJlbCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgbWluLWhlaWdodDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjIwMHB4IiwgIjIwMHB4Iil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250YWluZXI6aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGFpbmVyLmZvY3VzZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUgLyAwLjA1KSIsICJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci10b29sYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b24uYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uOmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItZGl2aWRlciB7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1taW4taGVpZ2h0LCAyMDBweCk7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgbWluLWhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBwIHsKICAgICAgICBtYXJnaW46IDAuNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBwOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgaDEgewogICAgICAgIGZvbnQtc2l6ZTogMmVtOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbjogMWVtIDAgMC41ZW0gMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGgyIHsKICAgICAgICBmb250LXNpemU6IDEuNWVtOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbjogMWVtIDAgMC41ZW0gMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGgzIHsKICAgICAgICBmb250LXNpemU6IDEuMjVlbTsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBtYXJnaW46IDFlbSAwIDAuNWVtIDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciB1bCwKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBvbCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxLjVlbTsKICAgICAgICBtYXJnaW46IDAuNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgbGkgewogICAgICAgIG1hcmdpbjogMC4yNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgYmxvY2txdW90ZSB7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBtYXJnaW46IDFlbSAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMWVtOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIHBhZGRpbmc6IDAuMmVtIDAuNGVtOwogICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZWwgT25lIE1vbm8nLCAnRmlyYSBDb2RlJywgJ1NGIE1vbm8nLCBNb25hY28sICdDYXNjYWRpYSBDb2RlJywgJ1JvYm90byBNb25vJywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcHJlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk4JSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBhZGRpbmc6IDFlbTsKICAgICAgICBtYXJnaW46IDFlbSAwOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcHJlIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiAwOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGEgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBhOmhvdmVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA0MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDY5LjglKSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci1mb290ZXIgewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC53b3JkLWNvdW50IHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubGluay1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQuc2hvdyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0IGlucHV0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQgaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUgLyAwLjA1KSIsICJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQtYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0LWJ1dHRvbnMgYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubGluay1pbnB1dC1idXR0b25zIGJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQtYnV0dG9ucyBidXR0b24ucHJpbWFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0LWJ1dHRvbnMgYnV0dG9uLnByaW1hcnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmRlc2NyaXB0aW9uIHsKICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAuZWRpdG9yLWNvbnRhaW5lciB7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC50b29sYmFyLWJ1dHRvbiwKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLmVkaXRvci1jb250ZW50IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgYApdOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmljaHRleHQvdGVtcGxhdGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHJlbmRlclJpY2h0ZXh0ID0gKGNvbXBvbmVudCkgPT4gewogIHJldHVybiBiMmAKICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAgICR7Y29tcG9uZW50LmxhYmVsID8gYjJgPGxhYmVsIGNsYXNzPSJsYWJlbCI+JHtjb21wb25lbnQubGFiZWx9PC9sYWJlbD5gIDogIiJ9CiAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItY29udGFpbmVyICR7Y29tcG9uZW50LmVkaXRvcj8uaXNGb2N1c2VkID8gImZvY3VzZWQiIDogIiJ9IiBzdHlsZT0iLS1taW4taGVpZ2h0OiAke2NvbXBvbmVudC5taW5IZWlnaHR9cHgiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItdG9vbGJhciI+CiAgICAgICAgICAgICAgJHtjb21wb25lbnQucmVuZGVyVG9vbGJhcigpfQogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmstaW5wdXQgJHtjb21wb25lbnQuc2hvd0xpbmtJbnB1dCA/ICJzaG93IiA6ICIifSI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idXJsIiBwbGFjZWhvbGRlcj0iRW50ZXIgVVJMLi4uIiBAa2V5ZG93bj0ke2NvbXBvbmVudC5oYW5kbGVMaW5rSW5wdXRLZXlkb3dufSAvPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluay1pbnB1dC1idXR0b25zIj4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icHJpbWFyeSIgQGNsaWNrPSR7Y29tcG9uZW50LnNhdmVMaW5rfT5TYXZlPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPSR7Y29tcG9uZW50LnJlbW92ZUxpbmt9PlJlbW92ZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0ke2NvbXBvbmVudC5oaWRlTGlua0lucHV0fT5DYW5jZWw8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLWNvbnRlbnQiPjwvZGl2PgogICAgICAgICAgICAke2NvbXBvbmVudC5zaG93V29yZENvdW50ID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXRvci1mb290ZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3b3JkLWNvdW50Ij4ke2NvbXBvbmVudC53b3JkQ291bnR9IHdvcmQke2NvbXBvbmVudC53b3JkQ291bnQgIT09IDEgPyAicyIgOiAiIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAke2NvbXBvbmVudC5kZXNjcmlwdGlvbiA/IGIyYDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4ke2NvbXBvbmVudC5kZXNjcmlwdGlvbn08L2Rpdj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1yaWNodGV4dC9jb21wb25lbnQuanMKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9zZXJ2aWNlcygpOwp2YXIgX19lc0RlY29yYXRlNTkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczYwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRSaWNodGV4dCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtcmljaHRleHQiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX3ZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF92YWx1ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzOwogIGxldCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1dvcmRDb3VudF9kZWNvcmF0b3JzOwogIGxldCBfc2hvd1dvcmRDb3VudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dXb3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21pbkhlaWdodF9kZWNvcmF0b3JzOwogIGxldCBfbWluSGVpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWluSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93TGlua0lucHV0X2RlY29yYXRvcnM7CiAgbGV0IF9zaG93TGlua0lucHV0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0xpbmtJbnB1dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfd29yZENvdW50X2RlY29yYXRvcnM7CiAgbGV0IF93b3JkQ291bnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF93b3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0UmljaHRleHQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX3Nob3dXb3JkQ291bnRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9taW5IZWlnaHRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogTnVtYmVyCiAgICAgIH0pXTsKICAgICAgX3Nob3dMaW5rSW5wdXRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3dvcmRDb3VudF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU1OSh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU5KHRoaXMsIG51bGwsIF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwbGFjZWhvbGRlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGxhY2Vob2xkZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucGxhY2Vob2xkZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnBsYWNlaG9sZGVyID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTkodGhpcywgbnVsbCwgX3Nob3dXb3JkQ291bnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1dvcmRDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1dvcmRDb3VudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93V29yZENvdW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93V29yZENvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dXb3JkQ291bnRfaW5pdGlhbGl6ZXJzLCBfc2hvd1dvcmRDb3VudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU5KHRoaXMsIG51bGwsIF9taW5IZWlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWluSGVpZ2h0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtaW5IZWlnaHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWluSGVpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5taW5IZWlnaHQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWluSGVpZ2h0X2luaXRpYWxpemVycywgX21pbkhlaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU5KHRoaXMsIG51bGwsIF9zaG93TGlua0lucHV0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dMaW5rSW5wdXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dMaW5rSW5wdXQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0xpbmtJbnB1dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd0xpbmtJbnB1dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93TGlua0lucHV0X2luaXRpYWxpemVycywgX3Nob3dMaW5rSW5wdXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OSh0aGlzLCBudWxsLCBfd29yZENvdW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndvcmRDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid29yZENvdW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLndvcmRDb3VudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud29yZENvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dvcmRDb3VudF9pbml0aWFsaXplcnMsIF93b3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFJpY2h0ZXh0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzg7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjAodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHBsYWNlaG9sZGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwbGFjZWhvbGRlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93V29yZENvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9zaG93V29yZENvdW50X2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IHNob3dXb3JkQ291bnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93V29yZENvdW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1dvcmRDb3VudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd1dvcmRDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21pbkhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjAodGhpcywgX3Nob3dXb3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9taW5IZWlnaHRfaW5pdGlhbGl6ZXJzLCAyMDApKTsKICAgIGdldCBtaW5IZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtaW5IZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW5IZWlnaHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pbkhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dMaW5rSW5wdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9taW5IZWlnaHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9zaG93TGlua0lucHV0X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93TGlua0lucHV0KCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0xpbmtJbnB1dF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dMaW5rSW5wdXQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dMaW5rSW5wdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN3b3JkQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9zaG93TGlua0lucHV0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfd29yZENvdW50X2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IHdvcmRDb3VudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3dvcmRDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHdvcmRDb3VudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jd29yZENvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBlZGl0b3JFbGVtZW50ID0gX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfd29yZENvdW50X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGxpbmtJbnB1dEVsZW1lbnQ7CiAgICB0aXB0YXBCdW5kbGUgPSBudWxsOwogICAgZWRpdG9yOwogICAgc3RhdGljIHN0eWxlcyA9IHJpY2h0ZXh0U3R5bGVzOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gcmVuZGVyUmljaHRleHQodGhpcyk7CiAgICB9CiAgICByZW5kZXJUb29sYmFyKCkgewogICAgICBjb25zdCBidXR0b25zID0gdGhpcy5nZXRUb29sYmFyQnV0dG9ucygpOwogICAgICByZXR1cm4gYjJgCiAgICAgICR7YnV0dG9ucy5tYXAoKGJ1dHRvbikgPT4gewogICAgICAgIGlmIChidXR0b24uaXNEaXZpZGVyKSB7CiAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idG9vbGJhci1kaXZpZGVyIj48L2Rpdj5gOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiAke2J1dHRvbi5pc0FjdGl2ZT8uKCkgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgQGNsaWNrPSR7YnV0dG9uLmFjdGlvbn0KICAgICAgICAgICAgdGl0bGU9JHtidXR0b24udGl0bGV9CiAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWQgfHwgIXRoaXMuZWRpdG9yfQogICAgICAgICAgPgogICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7YnV0dG9uLmljb259PjwvZGVlcy1pY29uPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgYDsKICAgICAgfSl9CiAgICBgOwogICAgfQogICAgZ2V0VG9vbGJhckJ1dHRvbnMoKSB7CiAgICAgIGlmICghdGhpcy5lZGl0b3IpCiAgICAgICAgcmV0dXJuIFtdOwogICAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJib2xkIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6Ym9sZCIsCiAgICAgICAgICB0aXRsZTogIkJvbGQgKEN0cmwrQikiLAogICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQm9sZCgpLnJ1bigpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJib2xkIikKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJpdGFsaWMiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTppdGFsaWMiLAogICAgICAgICAgdGl0bGU6ICJJdGFsaWMgKEN0cmwrSSkiLAogICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlSXRhbGljKCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoIml0YWxpYyIpCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAidW5kZXJsaW5lIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6dW5kZXJsaW5lIiwKICAgICAgICAgIHRpdGxlOiAiVW5kZXJsaW5lIChDdHJsK1UpIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVVuZGVybGluZSgpLnJ1bigpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJ1bmRlcmxpbmUiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogInN0cmlrZSIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOnN0cmlrZXRocm91Z2giLAogICAgICAgICAgdGl0bGU6ICJTdHJpa2V0aHJvdWdoIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN0cmlrZSgpLnJ1bigpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJzdHJpa2UiKQogICAgICAgIH0sCiAgICAgICAgeyBuYW1lOiAiZGl2aWRlcjEiLCB0aXRsZTogIiIsIGlzRGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJoMSIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmhlYWRpbmcxIiwKICAgICAgICAgIHRpdGxlOiAiSGVhZGluZyAxIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMSB9KS5ydW4oKSwKICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiaGVhZGluZyIsIHsgbGV2ZWw6IDEgfSkKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJoMiIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmhlYWRpbmcyIiwKICAgICAgICAgIHRpdGxlOiAiSGVhZGluZyAyIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMiB9KS5ydW4oKSwKICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiaGVhZGluZyIsIHsgbGV2ZWw6IDIgfSkKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJoMyIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmhlYWRpbmczIiwKICAgICAgICAgIHRpdGxlOiAiSGVhZGluZyAzIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMyB9KS5ydW4oKSwKICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiaGVhZGluZyIsIHsgbGV2ZWw6IDMgfSkKICAgICAgICB9LAogICAgICAgIHsgbmFtZTogImRpdmlkZXIyIiwgdGl0bGU6ICIiLCBpc0RpdmlkZXI6IHRydWUgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiYnVsbGV0TGlzdCIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmxpc3QiLAogICAgICAgICAgdGl0bGU6ICJCdWxsZXQgTGlzdCIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVCdWxsZXRMaXN0KCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoImJ1bGxldExpc3QiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIm9yZGVyZWRMaXN0IiwKICAgICAgICAgIGljb246ICJsdWNpZGU6bGlzdE9yZGVyZWQiLAogICAgICAgICAgdGl0bGU6ICJOdW1iZXJlZCBMaXN0IiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZU9yZGVyZWRMaXN0KCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoIm9yZGVyZWRMaXN0IikKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJibG9ja3F1b3RlIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6cXVvdGUiLAogICAgICAgICAgdGl0bGU6ICJRdW90ZSIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVCbG9ja3F1b3RlKCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoImJsb2NrcXVvdGUiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogImNvZGUiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTpjb2RlIiwKICAgICAgICAgIHRpdGxlOiAiQ29kZSIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVDb2RlKCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoImNvZGUiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogImNvZGVCbG9jayIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmZpbGVDb2RlIiwKICAgICAgICAgIHRpdGxlOiAiQ29kZSBCbG9jayIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVDb2RlQmxvY2soKS5ydW4oKSwKICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiY29kZUJsb2NrIikKICAgICAgICB9LAogICAgICAgIHsgbmFtZTogImRpdmlkZXIzIiwgdGl0bGU6ICIiLCBpc0RpdmlkZXI6IHRydWUgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAibGluayIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmxpbmsiLAogICAgICAgICAgdGl0bGU6ICJBZGQgTGluayIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMudG9nZ2xlTGluaygpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJsaW5rIikKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJhbGlnbkxlZnQiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTphbGlnbkxlZnQiLAogICAgICAgICAgdGl0bGU6ICJBbGlnbiBMZWZ0IiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldFRleHRBbGlnbigibGVmdCIpLnJ1bigpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKHsgdGV4dEFsaWduOiAibGVmdCIgfSkKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJhbGlnbkNlbnRlciIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmFsaWduQ2VudGVyIiwKICAgICAgICAgIHRpdGxlOiAiQWxpZ24gQ2VudGVyIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldFRleHRBbGlnbigiY2VudGVyIikucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICJjZW50ZXIiIH0pCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiYWxpZ25SaWdodCIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmFsaWduUmlnaHQiLAogICAgICAgICAgdGl0bGU6ICJBbGlnbiBSaWdodCIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5zZXRUZXh0QWxpZ24oInJpZ2h0IikucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICJyaWdodCIgfSkKICAgICAgICB9LAogICAgICAgIHsgbmFtZTogImRpdmlkZXI0IiwgdGl0bGU6ICIiLCBpc0RpdmlkZXI6IHRydWUgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAidW5kbyIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOnVuZG8iLAogICAgICAgICAgdGl0bGU6ICJVbmRvIChDdHJsK1opIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnVuZG8oKS5ydW4oKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogInJlZG8iLAogICAgICAgICAgaWNvbjogImx1Y2lkZTpyZWRvIiwKICAgICAgICAgIHRpdGxlOiAiUmVkbyAoQ3RybCtZKSIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5yZWRvKCkucnVuKCkKICAgICAgICB9CiAgICAgIF07CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIHRoaXMudGlwdGFwQnVuZGxlID0gYXdhaXQgRGVlc1NlcnZpY2VMaWJMb2FkZXIuZ2V0SW5zdGFuY2UoKS5sb2FkVGlwdGFwKCk7CiAgICAgIHRoaXMuZWRpdG9yRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLWNvbnRlbnQiKTsKICAgICAgdGhpcy5saW5rSW5wdXRFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5saW5rLWlucHV0IGlucHV0Iik7CiAgICAgIHRoaXMuaW5pdGlhbGl6ZUVkaXRvcigpOwogICAgfQogICAgaW5pdGlhbGl6ZUVkaXRvcigpIHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMudGlwdGFwQnVuZGxlKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgeyBFZGl0b3IsIFN0YXJ0ZXJLaXQsIFVuZGVybGluZSwgVGV4dEFsaWduLCBMaW5rLCBUeXBvZ3JhcGh5IH0gPSB0aGlzLnRpcHRhcEJ1bmRsZTsKICAgICAgdGhpcy5lZGl0b3IgPSBuZXcgRWRpdG9yKHsKICAgICAgICBlbGVtZW50OiB0aGlzLmVkaXRvckVsZW1lbnQsCiAgICAgICAgZXh0ZW5zaW9uczogWwogICAgICAgICAgU3RhcnRlcktpdC5jb25maWd1cmUoewogICAgICAgICAgICBoZWFkaW5nOiB7CiAgICAgICAgICAgICAgbGV2ZWxzOiBbMSwgMiwgM10KICAgICAgICAgICAgfQogICAgICAgICAgfSksCiAgICAgICAgICBVbmRlcmxpbmUuY29uZmlndXJlKHt9KSwKICAgICAgICAgIFRleHRBbGlnbi5jb25maWd1cmUoewogICAgICAgICAgICB0eXBlczogWyJoZWFkaW5nIiwgInBhcmFncmFwaCJdCiAgICAgICAgICB9KSwKICAgICAgICAgIExpbmsuY29uZmlndXJlKHsKICAgICAgICAgICAgb3Blbk9uQ2xpY2s6IGZhbHNlLAogICAgICAgICAgICBIVE1MQXR0cmlidXRlczogewogICAgICAgICAgICAgIGNsYXNzOiAiZWRpdG9yLWxpbmsiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pLAogICAgICAgICAgVHlwb2dyYXBoeS5jb25maWd1cmUoe30pCiAgICAgICAgXSwKICAgICAgICBjb250ZW50OiB0aGlzLnZhbHVlIHx8ICh0aGlzLnBsYWNlaG9sZGVyID8gYDxwPiR7dGhpcy5wbGFjZWhvbGRlcn08L3A+YCA6ICIiKSwKICAgICAgICBvblVwZGF0ZTogKHsgZWRpdG9yIH0pID0+IHsKICAgICAgICAgIHRoaXMudmFsdWUgPSBlZGl0b3IuZ2V0SFRNTCgpOwogICAgICAgICAgdGhpcy51cGRhdGVXb3JkQ291bnQoKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImlucHV0IiwgewogICAgICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHRoaXMudmFsdWUgfSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNoYW5nZSIsIHsKICAgICAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnZhbHVlIH0sCiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgfSwKICAgICAgICBvblNlbGVjdGlvblVwZGF0ZTogKCkgPT4gewogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgfSwKICAgICAgICBvbkZvY3VzOiAoKSA9PiB7CiAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgICB9LAogICAgICAgIG9uQmx1cjogKCkgPT4gewogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy51cGRhdGVXb3JkQ291bnQoKTsKICAgIH0KICAgIHVwZGF0ZVdvcmRDb3VudCgpIHsKICAgICAgaWYgKCF0aGlzLmVkaXRvcikKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHRleHQ5ID0gdGhpcy5lZGl0b3IuZ2V0VGV4dCgpOwogICAgICB0aGlzLndvcmRDb3VudCA9IHRleHQ5LnRyaW0oKSA/IHRleHQ5LnRyaW0oKS5zcGxpdCgvXHMrLykubGVuZ3RoIDogMDsKICAgIH0KICAgIHRvZ2dsZUxpbmsoKSB7CiAgICAgIGlmICghdGhpcy5lZGl0b3IpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAodGhpcy5lZGl0b3IuaXNBY3RpdmUoImxpbmsiKSkgewogICAgICAgIGNvbnN0IGhyZWYgPSB0aGlzLmVkaXRvci5nZXRBdHRyaWJ1dGVzKCJsaW5rIikuaHJlZjsKICAgICAgICB0aGlzLnNob3dMaW5rSW5wdXQgPSB0cnVlOwogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5saW5rSW5wdXRFbGVtZW50KSB7CiAgICAgICAgICAgIHRoaXMubGlua0lucHV0RWxlbWVudC52YWx1ZSA9IGhyZWYgfHwgIiI7CiAgICAgICAgICAgIHRoaXMubGlua0lucHV0RWxlbWVudC5mb2N1cygpOwogICAgICAgICAgICB0aGlzLmxpbmtJbnB1dEVsZW1lbnQuc2VsZWN0KCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zaG93TGlua0lucHV0ID0gdHJ1ZTsKICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgaWYgKHRoaXMubGlua0lucHV0RWxlbWVudCkgewogICAgICAgICAgICB0aGlzLmxpbmtJbnB1dEVsZW1lbnQudmFsdWUgPSAiIjsKICAgICAgICAgICAgdGhpcy5saW5rSW5wdXRFbGVtZW50LmZvY3VzKCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHNhdmVMaW5rKCkgewogICAgICBpZiAoIXRoaXMuZWRpdG9yIHx8ICF0aGlzLmxpbmtJbnB1dEVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCB1cmwgPSB0aGlzLmxpbmtJbnB1dEVsZW1lbnQudmFsdWU7CiAgICAgIGlmICh1cmwpIHsKICAgICAgICB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkuc2V0TGluayh7IGhyZWY6IHVybCB9KS5ydW4oKTsKICAgICAgfQogICAgICB0aGlzLmhpZGVMaW5rSW5wdXQoKTsKICAgIH0KICAgIHJlbW92ZUxpbmsoKSB7CiAgICAgIGlmICghdGhpcy5lZGl0b3IpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudW5zZXRMaW5rKCkucnVuKCk7CiAgICAgIHRoaXMuaGlkZUxpbmtJbnB1dCgpOwogICAgfQogICAgaGlkZUxpbmtJbnB1dCgpIHsKICAgICAgdGhpcy5zaG93TGlua0lucHV0ID0gZmFsc2U7CiAgICAgIHRoaXMuZWRpdG9yPy5jb21tYW5kcy5mb2N1cygpOwogICAgfQogICAgaGFuZGxlTGlua0lucHV0S2V5ZG93bihlMTEpIHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnNhdmVMaW5rKCk7CiAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkVzY2FwZSIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmhpZGVMaW5rSW5wdXQoKTsKICAgICAgfQogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgIGlmICh0aGlzLmVkaXRvciAmJiB2YWx1ZTIgIT09IHRoaXMuZWRpdG9yLmdldEhUTUwoKSkgewogICAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLnNldENvbnRlbnQodmFsdWUyKTsKICAgICAgfQogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgY2xlYXIoKSB7CiAgICAgIHRoaXMuc2V0VmFsdWUoIiIpOwogICAgfQogICAgZm9jdXMoKSB7CiAgICAgIHRoaXMuZWRpdG9yPy5jb21tYW5kcy5mb2N1cygpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICh0aGlzLmVkaXRvcikgewogICAgICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2MChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0UmljaHRleHQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRhZ3MvZGVlcy1pbnB1dC10YWdzLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9hMzsKdmFyIGRlbW9GdW5jMzkgPSAoKSA9PiBiMihfYTMgfHwgKF9hMyA9IF9fdGVtcGxhdGUoWyJcbiAgPGRlZXMtZGVtb3dyYXBwZXI+XG4gICAgPHN0eWxlPlxuICAgICAgIiwgJ1xuICAgIDwvc3R5bGU+XG4gICAgXG4gICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPlxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPScsICIgLnN1YnRpdGxlPSIsICI+XG4gICAgICAgIDxkZWVzLWlucHV0LXRhZ3NcbiAgICAgICAgICAubGFiZWw9IiwgIlxuICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgLnZhbHVlPSIsICJcbiAgICAgICAgICAuZGVzY3JpcHRpb249IiwgIlxuICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+XG4gICAgICA8L2RlZXMtcGFuZWw+XG5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1pbnB1dC10YWdzXG4gICAgICAgICAgLmxhYmVsPSIsICJcbiAgICAgICAgICAucGxhY2Vob2xkZXI9IiwgIlxuICAgICAgICAgIC5zdWdnZXN0aW9ucz0iLCAiXG4gICAgICAgICAgLnZhbHVlPSIsICJcbiAgICAgICAgICAuZGVzY3JpcHRpb249IiwgIlxuICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+XG4gICAgICA8L2RlZXMtcGFuZWw+XG5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAnPlxuICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWxheW91dCI+XG4gICAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgICAgLmxhYmVsPScsICJcbiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgICAubWF4VGFncz0iLCAiXG4gICAgICAgICAgICAudmFsdWU9IiwgIlxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSIsICJcbiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgICAgLmxhYmVsPSIsICJcbiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgICAubWF4VGFncz0iLCAiXG4gICAgICAgICAgICAuc3VnZ2VzdGlvbnM9IiwgIlxuICAgICAgICAgICAgLnZhbHVlPSIsICJcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0iLCAiXG4gICAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGVlcy1wYW5lbD5cblxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSIsICIgLnN1YnRpdGxlPSIsICI+XG4gICAgICAgIDxkZWVzLWlucHV0LXRhZ3NcbiAgICAgICAgICAubGFiZWw9IiwgIlxuICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgLnJlcXVpcmVkPSIsICJcbiAgICAgICAgICAuZGVzY3JpcHRpb249IiwgIlxuICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+XG4gICAgICA8L2RlZXMtcGFuZWw+XG5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1pbnB1dC10YWdzXG4gICAgICAgICAgLmxhYmVsPSIsICJcbiAgICAgICAgICAudmFsdWU9IiwgIlxuICAgICAgICAgIC5kaXNhYmxlZD0iLCAiXG4gICAgICAgICAgLmRlc2NyaXB0aW9uPSIsICJcbiAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPlxuICAgICAgPC9kZWVzLXBhbmVsPlxuXG4gICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9IiwgIiAuc3VidGl0bGU9IiwgIj5cbiAgICAgICAgPGRlZXMtZm9ybT5cbiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0XG4gICAgICAgICAgICAubGFiZWw9IiwgIlxuICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSIsICJcbiAgICAgICAgICAgIC5yZXF1aXJlZD0iLCAiXG4gICAgICAgICAgICAua2V5PSIsICdcbiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPlxuICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgICAgICAubGFiZWw9JywgIlxuICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9IiwgIlxuICAgICAgICAgICAgICAucmVxdWlyZWQ9IiwgIlxuICAgICAgICAgICAgICAua2V5PSIsICJcbiAgICAgICAgICAgICAgLnN1Z2dlc3Rpb25zPSIsICJcbiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdGFncz5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgICAgICAubGFiZWw9IiwgIlxuICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9IiwgIlxuICAgICAgICAgICAgICAua2V5PSIsICJcbiAgICAgICAgICAgICAgLm1heFRhZ3M9IiwgIlxuICAgICAgICAgICAgICAuc3VnZ2VzdGlvbnM9IiwgIlxuICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgIDxkZWVzLWlucHV0LXRleHRcbiAgICAgICAgICAgIC5sYWJlbD0iLCAiXG4gICAgICAgICAgICAuaW5wdXRUeXBlPSIsICJcbiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgICAua2V5PSIsICJcbiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgLnRleHQ9IiwgIj48L2RlZXMtZm9ybS1zdWJtaXQ+XG4gICAgICAgIDwvZGVlcy1mb3JtPlxuICAgICAgPC9kZWVzLXBhbmVsPlxuXG4gICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9IiwgIiAuc3VidGl0bGU9IiwgJz5cbiAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS10YWdzIlxuICAgICAgICAgIC5sYWJlbD0nLCAiXG4gICAgICAgICAgLnBsYWNlaG9sZGVyPSIsICJcbiAgICAgICAgICAuc3VnZ2VzdGlvbnM9IiwgIlxuICAgICAgICAgIEBjaGFuZ2U9IiwgYAogICAgICAgID48L2RlZXMtaW5wdXQtdGFncz4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJ0YWctcHJldmlldyIgaWQ9InRhZ3MtcHJldmlldyI+CiAgICAgICAgICA8ZW0gc3R5bGU9ImNvbG9yOiAjOTk5OyI+Tm8gdGFncyBhZGRlZCB5ZXQuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1wcmV2aWV3IiBpZD0idGFncy1qc29uIj4KICAgICAgICAgIDxlbT5KU09OIG91dHB1dCB3aWxsIGFwcGVhciBoZXJlLi4uPC9lbT4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8c2NyaXB0PgogICAgICAgICAgLy8gVXBkYXRlIEpTT04gcHJldmlldwogICAgICAgICAgY29uc3QgdGFnc0lucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2ludGVyYWN0aXZlLXRhZ3MnKTsKICAgICAgICAgIHRhZ3NJbnB1dD8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHsKICAgICAgICAgICAgY29uc3QganNvblByZXZpZXcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdGFncy1qc29uJyk7CiAgICAgICAgICAgIGlmIChqc29uUHJldmlldykgewogICAgICAgICAgICAgIGpzb25QcmV2aWV3LnRleHRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZS5kZXRhaWwudmFsdWUsIG51bGwsIDIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICA8XC9zY3JpcHQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYF0pKSwgaWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5vdXRwdXQtcHJldmlldyB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNmM2Y0ZjY7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBjb2xvcjogIzM3NDE1MTsKICAgICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzJjMmMyYzsKICAgICAgICAgICAgY29sb3I6ICNlNGU0ZTc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC50YWctcHJldmlldyB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZmFmYjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAudGFnLXByZXZpZXcgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMWYyOTM3OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAudGFnLXByZXZpZXctaXRlbSB7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICBwYWRkaW5nOiA0cHggMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNlMGU3ZmY7CiAgICAgICAgICBjb2xvcjogIzQzMzhjYTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAgIC50YWctcHJldmlldy1pdGVtIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzMxMmU4MTsKICAgICAgICAgICAgY29sb3I6ICNjN2QyZmU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBgLCAiMS4gQmFzaWMgVGFncyBJbnB1dCIsICJTaW1wbGUgdGFnIGlucHV0IHdpdGggY29tbW9uIHByb2dyYW1taW5nIGxhbmd1YWdlcyIsICJQcm9ncmFtbWluZyBMYW5ndWFnZXMiLCAiQWRkIGEgbGFuZ3VhZ2UuLi4iLCBbIkphdmFTY3JpcHQiLCAiVHlwZVNjcmlwdCIsICJQeXRob24iLCAiR28iXSwgIlByZXNzIEVudGVyIG9yIGNvbW1hIHRvIGFkZCB0YWdzIiwgIjIuIFRhZ3Mgd2l0aCBTdWdnZXN0aW9ucyIsICJBdXRvLWNvbXBsZXRlIHN1Z2dlc3Rpb25zIGZvciBmYXN0ZXIgaW5wdXQiLCAiVGVjaCBTdGFjayIsICJUeXBlIHRvIHNlZSBzdWdnZXN0aW9ucy4uLiIsIFsKICAiUmVhY3QiLAogICJWdWUiLAogICJBbmd1bGFyIiwKICAiU3ZlbHRlIiwKICAiTGl0IiwKICAiTmV4dC5qcyIsCiAgIk51eHQiLAogICJTdmVsdGVLaXQiLAogICJOb2RlLmpzIiwKICAiRGVubyIsCiAgIkJ1biIsCiAgIkV4cHJlc3MiLAogICJGYXN0aWZ5IiwKICAiTmVzdC5qcyIsCiAgIktvYSIsCiAgIk1vbmdvREIiLAogICJQb3N0Z3JlU1FMIiwKICAiUmVkaXMiLAogICJNeVNRTCIsCiAgIlNRTGl0ZSIsCiAgIkNhc3NhbmRyYSIsCiAgIkRvY2tlciIsCiAgIkt1YmVybmV0ZXMiLAogICJBV1MiLAogICJBenVyZSIsCiAgIkdDUCIsCiAgIlZlcmNlbCIsCiAgIk5ldGxpZnkiCl0sIFsiUmVhY3QiLCAiTm9kZS5qcyIsICJQb3N0Z3JlU1FMIiwgIkRvY2tlciJdLCAiU3RhcnQgdHlwaW5nIHRvIHNlZSBzdWdnZXN0aW9ucyBmcm9tIHBvcHVsYXIgdGVjaG5vbG9naWVzIiwgIjMuIExpbWl0ZWQgVGFncyIsICJSZXN0cmljdCB0aGUgbnVtYmVyIG9mIHRhZ3MgdXNlcnMgY2FuIGFkZCIsICJUb3AgMyBTa2lsbHMiLCAiQWRkIHVwIHRvIDMgc2tpbGxzLi4uIiwgMywgWyJEZXNpZ24iLCAiRGV2ZWxvcG1lbnQiXSwgIk1heGltdW0gMyB0YWdzIGFsbG93ZWQiLCAiQ2F0ZWdvcmllcyAoTWF4IDUpIiwgIlNlbGVjdCBjYXRlZ29yaWVzLi4uIiwgNSwgWyJCbG9nIiwgIlR1dG9yaWFsIiwgIk5ld3MiLCAiUmV2aWV3IiwgIkd1aWRlIiwgIkNhc2UgU3R1ZHkiLCAiSW50ZXJ2aWV3Il0sIFsiVHV0b3JpYWwiLCAiR3VpZGUiXSwgIkNob29zZSB1cCB0byA1IGNhdGVnb3JpZXMiLCAiNC4gUmVxdWlyZWQgJiBWYWxpZGF0aW9uIiwgIlRhZ3MgaW5wdXQgd2l0aCB2YWxpZGF0aW9uIHJlcXVpcmVtZW50cyIsICJQcm9qZWN0IFRhZ3MiLCAiQWRkIGF0IGxlYXN0IG9uZSB0YWcuLi4iLCB0cnVlLCAiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCAtIGFkZCBhdCBsZWFzdCBvbmUgdGFnIiwgIjUuIERpc2FibGVkIFN0YXRlIiwgIlJlYWQtb25seSB0YWdzIGRpc3BsYXkiLCAiU3lzdGVtIFRhZ3MiLCBbIlN5c3RlbSIsICJQcm90ZWN0ZWQiLCAiUmVhZC1Pbmx5IiwgIkFyY2hpdmUiXSwgdHJ1ZSwgIlRoZXNlIHRhZ3MgY2Fubm90IGJlIG1vZGlmaWVkIiwgIjYuIEZvcm0gSW50ZWdyYXRpb24iLCAiVGFncyBpbnB1dCB3b3JraW5nIHdpdGhpbiBhIGZvcm0gY29udGV4dCIsICJQcm9qZWN0IE5hbWUiLCAiTXkgQXdlc29tZSBQcm9qZWN0IiwgdHJ1ZSwgIm5hbWUiLCAiVGVjaG5vbG9naWVzIFVzZWQiLCAiQWRkIHRlY2hub2xvZ2llcy4uLiIsIHRydWUsICJ0ZWNobm9sb2dpZXMiLCBbCiAgIlR5cGVTY3JpcHQiLAogICJKYXZhU2NyaXB0IiwKICAiUHl0aG9uIiwKICAiR28iLAogICJSdXN0IiwKICAiUmVhY3QiLAogICJWdWUiLAogICJBbmd1bGFyIiwKICAiU3ZlbHRlIiwKICAiTm9kZS5qcyIsCiAgIkRlbm8iLAogICJFeHByZXNzIiwKICAiRmFzdEFQSSIKXSwgIlByb2plY3QgVGFncyIsICJBZGQgZGVzY3JpcHRpdmUgdGFncy4uLiIsICJ0YWdzIiwgMTAsIFsKICAiZnJvbnRlbmQiLAogICJiYWNrZW5kIiwKICAiZnVsbHN0YWNrIiwKICAibW9iaWxlIiwKICAiZGVza3RvcCIsCiAgIndlYiIsCiAgImFwaSIsCiAgImRhdGFiYXNlIiwKICAiZGV2b3BzIiwKICAidWkvdXgiLAogICJvcGVuc291cmNlIiwKICAic2FhcyIsCiAgImVudGVycHJpc2UiLAogICJzdGFydHVwIgpdLCAiRGVzY3JpcHRpb24iLCAidGV4dGFyZWEiLCAiRGVzY3JpYmUgeW91ciBwcm9qZWN0Li4uIiwgImRlc2NyaXB0aW9uIiwgIkNyZWF0ZSBQcm9qZWN0IiwgIjcuIEludGVyYWN0aXZlIERlbW8iLCAiQWRkIHRhZ3MgYW5kIHNlZSB0aGVtIGNvbGxlY3RlZCBpbiByZWFsLXRpbWUiLCAiWW91ciBJbnRlcmVzdHMiLCAiVHlwZSB5b3VyIGludGVyZXN0cy4uLiIsIFsKICAiTXVzaWMiLAogICJNb3ZpZXMiLAogICJCb29rcyIsCiAgIlRyYXZlbCIsCiAgIlBob3RvZ3JhcGh5IiwKICAiQ29va2luZyIsCiAgIkdhbWluZyIsCiAgIlNwb3J0cyIsCiAgIkFydCIsCiAgIlRlY2hub2xvZ3kiLAogICJGYXNoaW9uIiwKICAiRml0bmVzcyIsCiAgIk5hdHVyZSIsCiAgIlNjaWVuY2UiLAogICJIaXN0b3J5IgpdLCAoZTExKSA9PiB7CiAgY29uc3QgcHJldmlldyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiN0YWdzLXByZXZpZXciKTsKICBjb25zdCB0YWdzID0gZTExLmRldGFpbC52YWx1ZTsKICBpZiAocHJldmlldykgewogICAgaWYgKHRhZ3MubGVuZ3RoID09PSAwKSB7CiAgICAgIHByZXZpZXcuaW5uZXJIVE1MID0gJzxlbSBzdHlsZT0iY29sb3I6ICM5OTk7Ij5ObyB0YWdzIGFkZGVkIHlldC4uLjwvZW0+JzsKICAgIH0gZWxzZSB7CiAgICAgIHByZXZpZXcuaW5uZXJIVE1MID0gdGFncy5tYXAoKHRhZykgPT4gYDxzcGFuIGNsYXNzPSJ0YWctcHJldmlldy1pdGVtIj4ke3RhZ308L3NwYW4+YCkuam9pbigiIik7CiAgICB9CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRhZ3MvZGVlcy1pbnB1dC10YWdzLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGVlc19pY29uKCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTYwID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2MSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0VGFncyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtdGFncyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnM7CiAgbGV0IF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhUYWdzX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhUYWdzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4VGFnc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3VnZ2VzdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX3N1Z2dlc3Rpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3VnZ2VzdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lucHV0VmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX2lucHV0VmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93U3VnZ2VzdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dTdWdnZXN0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dTdWdnZXN0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25UZXh0X2RlY29yYXRvcnM7CiAgbGV0IF92YWxpZGF0aW9uVGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dFRhZ3MyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbWF4VGFnc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3N1Z2dlc3Rpb25zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9zaG93U3VnZ2VzdGlvbnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF92YWxpZGF0aW9uVGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX19lc0RlY29yYXRlNjAodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MCh0aGlzLCBudWxsLCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicGxhY2Vob2xkZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBsYWNlaG9sZGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBsYWNlaG9sZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wbGFjZWhvbGRlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsIF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYwKHRoaXMsIG51bGwsIF9tYXhUYWdzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1heFRhZ3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heFRhZ3MiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWF4VGFncywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWF4VGFncyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhUYWdzX2luaXRpYWxpemVycywgX21heFRhZ3NfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MCh0aGlzLCBudWxsLCBfc3VnZ2VzdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3VnZ2VzdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInN1Z2dlc3Rpb25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN1Z2dlc3Rpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdWdnZXN0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zdWdnZXN0aW9uc19pbml0aWFsaXplcnMsIF9zdWdnZXN0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYwKHRoaXMsIG51bGwsIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlucHV0VmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlucHV0VmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5wdXRWYWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaW5wdXRWYWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgX2lucHV0VmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MCh0aGlzLCBudWxsLCBfc2hvd1N1Z2dlc3Rpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dTdWdnZXN0aW9ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1N1Z2dlc3Rpb25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dTdWdnZXN0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd1N1Z2dlc3Rpb25zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dTdWdnZXN0aW9uc19pbml0aWFsaXplcnMsIF9zaG93U3VnZ2VzdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MCh0aGlzLCBudWxsLCBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleF9pbml0aWFsaXplcnMsIF9oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYwKHRoaXMsIG51bGwsIF92YWxpZGF0aW9uVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWxpZGF0aW9uVGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsaWRhdGlvblRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblRleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbGlkYXRpb25UZXh0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRUYWdzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMzOTsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsICJBZGQgdGFncy4uLiIpKTsKICAgIGdldCBwbGFjZWhvbGRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGxhY2Vob2xkZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4VGFnc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjEodGhpcywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfbWF4VGFnc19pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBtYXhUYWdzKCkgewogICAgICByZXR1cm4gdGhpcy4jbWF4VGFnc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gMCBtZWFucyB1bmxpbWl0ZWQKICAgIHNldCBtYXhUYWdzKHZhbHVlMikgewogICAgICB0aGlzLiNtYXhUYWdzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9tYXhUYWdzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfc3VnZ2VzdGlvbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IHN1Z2dlc3Rpb25zKCkgewogICAgICByZXR1cm4gdGhpcy4jc3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdWdnZXN0aW9ucyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpbnB1dFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfc3VnZ2VzdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBpbnB1dFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jaW5wdXRWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlucHV0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lucHV0VmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93U3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfc2hvd1N1Z2dlc3Rpb25zX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93U3VnZ2VzdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93U3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93U3VnZ2VzdGlvbnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dTdWdnZXN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfc2hvd1N1Z2dlc3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfaW5pdGlhbGl6ZXJzLCAtMSkpOwogICAgZ2V0IGhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4KCkgewogICAgICByZXR1cm4gdGhpcy4jaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBoaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YWxpZGF0aW9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjEodGhpcywgX2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfdmFsaWRhdGlvblRleHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHZhbGlkYXRpb25UZXh0KCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWxpZGF0aW9uVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAudGFncy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgICAgbWluLWhlaWdodDogNDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY3Vyc29yOiB0ZXh0OwogICAgICB9CgogICAgICAudGFncy1jb250YWluZXI6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWdzLWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLnRhZ3MtY29udGFpbmVyLmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAudGFnIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjAuMiUgNjUuMSUgLyAwLjIpIiwgImhzbCgyMTUgMjAuMiUgMzUuMSUgLyAwLjIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCAiaHNsKDIxNy45IDEwLjYlIDc0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSAvIDAuMykiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSAvIDAuMykiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGFuaW1hdGlvbjogdGFnQXBwZWFyIDAuMTVzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgdGFnQXBwZWFyIHsKICAgICAgICBmcm9tIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICB0byB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC50YWctcmVtb3ZlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgNDYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA1NC45JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWctcmVtb3ZlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjA4KSIsICJoc2woMCAwJSAxMDAlIC8gMC4wOCkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjE3LjkgMTAuNiUgNzQuOSUpIil9OwogICAgICB9CgogICAgICAudGFnLXJlbW92ZSBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGhlaWdodDogMTBweDsKICAgICAgfQoKICAgICAgLnRhZy1pbnB1dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIHBhZGRpbmc6IDJweCA0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIC50YWctaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWctaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIC8qIFN1Z2dlc3Rpb25zIGRyb3Bkb3duICovCiAgICAgIC5zdWdnZXN0aW9ucy1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb25zLWRyb3Bkb3duIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggaHNsKDAgMCUgMCUgLyAwLjEpLCAwIDJweCA0cHggLTJweCBoc2woMCAwJSAwJSAvIDAuMSk7CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB6LWluZGV4OiAxMDAwOwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbiB7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbi5oaWdobGlnaHRlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAvKiBWYWxpZGF0aW9uIHN0eWxlcyAqLwogICAgICAudmFsaWRhdGlvbi1tZXNzYWdlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDZweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAvKiBEZXNjcmlwdGlvbiBzdHlsZXMgKi8KICAgICAgLmRlc2NyaXB0aW9uIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDZweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAvKiBTY3JvbGxiYXIgc3R5bGluZyAqLwogICAgICAuc3VnZ2VzdGlvbnMtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbnMtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb25zLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbnMtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgZmlsdGVyZWRTdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnMuZmlsdGVyKChzdWdnZXN0aW9uKSA9PiAhdGhpcy52YWx1ZS5pbmNsdWRlcyhzdWdnZXN0aW9uKSAmJiBzdWdnZXN0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5pbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCkpKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+YCA6ICIifQogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InN1Z2dlc3Rpb25zLWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJ0YWdzLWNvbnRhaW5lciAke3RoaXMuZGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9IgogICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUNvbnRhaW5lckNsaWNrfQogICAgICAgICAgPgogICAgICAgICAgICAke3RoaXMudmFsdWUubWFwKCh0YWcpID0+IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhZyI+CiAgICAgICAgICAgICAgICA8c3Bhbj4ke3RhZ308L3NwYW4+CiAgICAgICAgICAgICAgICAkeyF0aGlzLmRpc2FibGVkID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhZy1yZW1vdmUiIEBjbGljaz0keyhlMTEpID0+IHRoaXMucmVtb3ZlVGFnKGUxMSwgdGFnKX0+CiAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6eCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCl9CiAgICAgICAgICAgIAogICAgICAgICAgICAkeyF0aGlzLmRpc2FibGVkICYmICghdGhpcy5tYXhUYWdzIHx8IHRoaXMudmFsdWUubGVuZ3RoIDwgdGhpcy5tYXhUYWdzKSA/IGIyYAogICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgIGNsYXNzPSJ0YWctaW5wdXQiCiAgICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9JHt0aGlzLnBsYWNlaG9sZGVyfQogICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pbnB1dFZhbHVlfQogICAgICAgICAgICAgICAgQGlucHV0PSR7dGhpcy5oYW5kbGVJbnB1dH0KICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7dGhpcy5oYW5kbGVLZXlEb3dufQogICAgICAgICAgICAgICAgQGZvY3VzPSR7dGhpcy5oYW5kbGVGb2N1c30KICAgICAgICAgICAgICAgIEBibHVyPSR7dGhpcy5oYW5kbGVCbHVyfQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgICAgICAvPgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAke3RoaXMuc2hvd1N1Z2dlc3Rpb25zICYmIGZpbHRlcmVkU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWdnZXN0aW9ucy1kcm9wZG93biI+CiAgICAgICAgICAgICAgJHtmaWx0ZXJlZFN1Z2dlc3Rpb25zLm1hcCgoc3VnZ2VzdGlvbiwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9InN1Z2dlc3Rpb24gJHtpbmRleDIgPT09IHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPyAiaGlnaGxpZ2h0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICBAbW91c2Vkb3duPSR7KGUxMSkgPT4gewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuYWRkVGFnKHN1Z2dlc3Rpb24pOwogICAgICB9fQogICAgICAgICAgICAgICAgICBAbW91c2VlbnRlcj0keygpID0+IHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPSBpbmRleDJ9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICR7c3VnZ2VzdGlvbn0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGApfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25UZXh0ID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWxpZGF0aW9uLW1lc3NhZ2UiPiR7dGhpcy52YWxpZGF0aW9uVGV4dH08L2Rpdj4KICAgICAgICBgIDogIiJ9CiAgICAgICAgCiAgICAgICAgJHt0aGlzLmRlc2NyaXB0aW9uID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+JHt0aGlzLmRlc2NyaXB0aW9ufTwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgaGFuZGxlQ29udGFpbmVyQ2xpY2soZTExKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50YWctaW5wdXQiKTsKICAgICAgaWYgKGlucHV0ICYmIGUxMS50YXJnZXQgIT09IGlucHV0KSB7CiAgICAgICAgaW5wdXQuZm9jdXMoKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlSW5wdXQoZTExKSB7CiAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgdGhpcy5pbnB1dFZhbHVlID0gaW5wdXQudmFsdWU7CiAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUuaW5jbHVkZXMoIiwiKSB8fCB0aGlzLmlucHV0VmFsdWUuaW5jbHVkZXMoIjsiKSkgewogICAgICAgIGNvbnN0IHRhZyA9IHRoaXMuaW5wdXRWYWx1ZS5yZXBsYWNlKC9bLDtdL2csICIiKS50cmltKCk7CiAgICAgICAgaWYgKHRhZykgewogICAgICAgICAgdGhpcy5hZGRUYWcodGFnKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZUtleURvd24oZTExKSB7CiAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCA+PSAwICYmIHRoaXMuc2hvd1N1Z2dlc3Rpb25zKSB7CiAgICAgICAgICBjb25zdCBmaWx0ZXJlZFN1Z2dlc3Rpb25zID0gdGhpcy5zdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+ICF0aGlzLnZhbHVlLmluY2x1ZGVzKHN1Z2dlc3Rpb24pICYmIHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpOwogICAgICAgICAgaWYgKGZpbHRlcmVkU3VnZ2VzdGlvbnNbdGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleF0pIHsKICAgICAgICAgICAgdGhpcy5hZGRUYWcoZmlsdGVyZWRTdWdnZXN0aW9uc1t0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4XSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlucHV0VmFsdWUudHJpbSgpKSB7CiAgICAgICAgICB0aGlzLmFkZFRhZyh0aGlzLmlucHV0VmFsdWUudHJpbSgpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkJhY2tzcGFjZSIgJiYgIXRoaXMuaW5wdXRWYWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLnJlbW92ZVRhZyhlMTEsIHRoaXMudmFsdWVbdGhpcy52YWx1ZS5sZW5ndGggLSAxXSk7CiAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkFycm93RG93biIgJiYgdGhpcy5zaG93U3VnZ2VzdGlvbnMpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBjb25zdCBmaWx0ZXJlZENvdW50ID0gdGhpcy5zdWdnZXN0aW9ucy5maWx0ZXIoKHM5KSA9PiAhdGhpcy52YWx1ZS5pbmNsdWRlcyhzOSkgJiYgczkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpLmxlbmd0aDsKICAgICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gTWF0aC5taW4odGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCArIDEsIGZpbHRlcmVkQ291bnQgLSAxKTsKICAgICAgfSBlbHNlIGlmIChlMTEua2V5ID09PSAiQXJyb3dVcCIgJiYgdGhpcy5zaG93U3VnZ2VzdGlvbnMpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gTWF0aC5tYXgodGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCAtIDEsIDApOwogICAgICB9IGVsc2UgaWYgKGUxMS5rZXkgPT09ICJFc2NhcGUiKSB7CiAgICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMgPSBmYWxzZTsKICAgICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gLTE7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZUZvY3VzKCkgewogICAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVCbHVyKCkgewogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlOwogICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPSAtMTsKICAgICAgfSwgMjAwKTsKICAgIH0KICAgIGFkZFRhZyh0YWcpIHsKICAgICAgaWYgKCF0YWcgfHwgdGhpcy52YWx1ZS5pbmNsdWRlcyh0YWcpKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKHRoaXMubWF4VGFncyAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+PSB0aGlzLm1heFRhZ3MpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIHRhZ107CiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICIiOwogICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlOwogICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gLTE7CiAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIudGFnLWlucHV0Iik7CiAgICAgIGlmIChpbnB1dCkgewogICAgICAgIGlucHV0LnZhbHVlID0gIiI7CiAgICAgIH0KICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7CiAgICB9CiAgICByZW1vdmVUYWcoZTExLCB0YWcpIHsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5maWx0ZXIoKHQ5KSA9PiB0OSAhPT0gdGFnKTsKICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7CiAgICB9CiAgICBlbWl0Q2hhbmdlKCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnZhbHVlIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTIgfHwgW107CiAgICB9CiAgICBhc3luYyB2YWxpZGF0ZSgpIHsKICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgKCF0aGlzLnZhbHVlIHx8IHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSkgewogICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiQXQgbGVhc3Qgb25lIHRhZyBpcyByZXF1aXJlZCI7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiIjsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0VGFnczIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBnZW5lcmF0ZVJlcG9ydEJsb2NrcyA9ICgpID0+IHsKICBjb25zdCB0aW1lc3RhbXAyID0gRGF0ZS5ub3coKTsKICByZXR1cm4gWwogICAgewogICAgICBpZDogYHRpdGxlLSR7dGltZXN0YW1wMn1gLAogICAgICB0eXBlOiAiaGVhZGluZy0xIiwKICAgICAgY29udGVudDogIlN5c3RlbSBQZXJmb3JtYW5jZSBSZXBvcnQiCiAgICB9LAogICAgewogICAgICBpZDogYGRhdGUtJHt0aW1lc3RhbXAyICsgMX1gLAogICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgY29udGVudDogYEdlbmVyYXRlZCBvbjogJHsoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvTG9jYWxlU3RyaW5nKCl9YAogICAgfSwKICAgIHsKICAgICAgaWQ6IGBzdW1tYXJ5LWhlYWRpbmctJHt0aW1lc3RhbXAyICsgMn1gLAogICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgY29udGVudDogIkV4ZWN1dGl2ZSBTdW1tYXJ5IgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBzdW1tYXJ5LSR7dGltZXN0YW1wMiArIDN9YCwKICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgIGNvbnRlbnQ6ICJUaGlzIHJlcG9ydCBwcm92aWRlcyBhbiBhbmFseXNpcyBvZiBzeXN0ZW0gcGVyZm9ybWFuY2UgbWV0cmljcyBvdmVyIHRoZSBsYXN0IDMwIGRheXMuIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBtZXRyaWNzLWhlYWRpbmctJHt0aW1lc3RhbXAyICsgNH1gLAogICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgY29udGVudDogIktleSBNZXRyaWNzIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBtZXRyaWNzLWxpc3QtJHt0aW1lc3RhbXAyICsgNX1gLAogICAgICB0eXBlOiAibGlzdCIsCiAgICAgIGNvbnRlbnQ6ICJBdmVyYWdlIHJlc3BvbnNlIHRpbWU6IDEyNG1zXG5VcHRpbWU6IDk5Ljk3JVxuQ1BVIHV0aWxpemF0aW9uOiA0NSVcbk1lbW9yeSB1c2FnZTogMi4zR0IgLyA4R0IiLAogICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogImJ1bGxldCIgfQogICAgfSwKICAgIHsKICAgICAgaWQ6IGBhbmFseXNpcy1oZWFkaW5nLSR7dGltZXN0YW1wMiArIDZ9YCwKICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgIGNvbnRlbnQ6ICJQZXJmb3JtYW5jZSBBbmFseXNpcyIKICAgIH0sCiAgICB7CiAgICAgIGlkOiBgYW5hbHlzaXMtcXVvdGUtJHt0aW1lc3RhbXAyICsgN31gLAogICAgICB0eXBlOiAicXVvdGUiLAogICAgICBjb250ZW50OiAiU3lzdGVtIHBlcmZvcm1hbmNlIHJlbWFpbnMgd2l0aGluIGFjY2VwdGFibGUgcGFyYW1ldGVycyB3aXRoIHJvb20gZm9yIG9wdGltaXphdGlvbiBpbiBtZW1vcnkgbWFuYWdlbWVudC4iCiAgICB9LAogICAgewogICAgICBpZDogYGNvZGUtaGVhZGluZy0ke3RpbWVzdGFtcDIgKyA4fWAsCiAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICBjb250ZW50OiAiU2FtcGxlIFF1ZXJ5IFBlcmZvcm1hbmNlIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBjb2RlLWJsb2NrLSR7dGltZXN0YW1wMiArIDl9YCwKICAgICAgdHlwZTogImNvZGUiLAogICAgICBjb250ZW50OiAiU0VMRUNUIEFWRyhyZXNwb25zZV90aW1lKSBhcyBhdmdfdGltZSxcbiAgICAgICBDT1VOVCgqKSBhcyB0b3RhbF9yZXF1ZXN0cyxcbiAgICAgICBEQVRFKGNyZWF0ZWRfYXQpIGFzIGRhdGVcbkZST00gcGVyZm9ybWFuY2VfbG9nc1xuV0hFUkUgY3JlYXRlZF9hdCA+PSBOT1coKSAtIElOVEVSVkFMIDMwIERBWVxuR1JPVVAgQlkgREFURShjcmVhdGVkX2F0KVxuT1JERVIgQlkgZGF0ZSBERVNDOyIsCiAgICAgIG1ldGFkYXRhOiB7IGxhbmd1YWdlOiAic3FsIiB9CiAgICB9LAogICAgewogICAgICBpZDogYGRpdmlkZXItJHt0aW1lc3RhbXAyICsgMTB9YCwKICAgICAgdHlwZTogImRpdmlkZXIiLAogICAgICBjb250ZW50OiAiIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBmb290ZXItJHt0aW1lc3RhbXAyICsgMTF9YCwKICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgIGNvbnRlbnQ6ICJSZXBvcnQgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgU3lzdGVtIE1vbml0b3IgdjIuNS4wIgogICAgfQogIF07Cn07CnZhciBnZW5lcmF0ZVJlY2lwZUJsb2NrcyA9ICgpID0+IHsKICBjb25zdCB0aW1lc3RhbXAyID0gRGF0ZS5ub3coKTsKICByZXR1cm4gWwogICAgewogICAgICBpZDogYHJlY2lwZS10aXRsZS0ke3RpbWVzdGFtcDJ9YCwKICAgICAgdHlwZTogImhlYWRpbmctMSIsCiAgICAgIGNvbnRlbnQ6ICJDbGFzc2ljIE1hcmdoZXJpdGEgUGl6emEiCiAgICB9LAogICAgewogICAgICBpZDogYHJlY2lwZS1pbnRyby0ke3RpbWVzdGFtcDIgKyAxfWAsCiAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICBjb250ZW50OiAiQSB0cmFkaXRpb25hbCBJdGFsaWFuIHBpenphIHdpdGggZnJlc2ggYmFzaWwsIG1venphcmVsbGEsIGFuZCB0b21hdG8gc2F1Y2UuIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBpbmdyZWRpZW50cy1oZWFkaW5nLSR7dGltZXN0YW1wMiArIDJ9YCwKICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgIGNvbnRlbnQ6ICJcdXsxRjM1NX0gSW5ncmVkaWVudHMiCiAgICB9LAogICAgewogICAgICBpZDogYGRvdWdoLWhlYWRpbmctJHt0aW1lc3RhbXAyICsgM31gLAogICAgICB0eXBlOiAiaGVhZGluZy0zIiwKICAgICAgY29udGVudDogIkZvciB0aGUgRG91Z2g6IgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBkb3VnaC1saXN0LSR7dGltZXN0YW1wMiArIDR9YCwKICAgICAgdHlwZTogImxpc3QiLAogICAgICBjb250ZW50OiAnNTAwZyB0aXBvICIwMCIgZmxvdXJcbjMyNW1sIHdhcm0gd2F0ZXJcbjEwZyBzYWx0XG43ZyBhY3RpdmUgZHJ5IHllYXN0XG4yIHRic3Agb2xpdmUgb2lsJywKICAgICAgbWV0YWRhdGE6IHsgbGlzdFR5cGU6ICJidWxsZXQiIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiBgdG9wcGluZ3MtaGVhZGluZy0ke3RpbWVzdGFtcDIgKyA1fWAsCiAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICBjb250ZW50OiAiRm9yIHRoZSBUb3BwaW5nczoiCiAgICB9LAogICAgewogICAgICBpZDogYHRvcHBpbmdzLWxpc3QtJHt0aW1lc3RhbXAyICsgNn1gLAogICAgICB0eXBlOiAibGlzdCIsCiAgICAgIGNvbnRlbnQ6ICI0MDBnIGNhbm5lZCBTYW4gTWFyemFubyB0b21hdG9lc1xuMjUwZyBmcmVzaCBtb3p6YXJlbGxhXG5GcmVzaCBiYXNpbCBsZWF2ZXNcbkV4dHJhIHZpcmdpbiBvbGl2ZSBvaWxcblNhbHQgYW5kIHBlcHBlciB0byB0YXN0ZSIsCiAgICAgIG1ldGFkYXRhOiB7IGxpc3RUeXBlOiAiYnVsbGV0IiB9CiAgICB9LAogICAgewogICAgICBpZDogYGluc3RydWN0aW9ucy1oZWFkaW5nLSR7dGltZXN0YW1wMiArIDd9YCwKICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgIGNvbnRlbnQ6ICJcdXsxRjQ2OH1cdTIwMERcdXsxRjM3M30gSW5zdHJ1Y3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBzdGVwcy1saXN0LSR7dGltZXN0YW1wMiArIDh9YCwKICAgICAgdHlwZTogImxpc3QiLAogICAgICBjb250ZW50OiAiRGlzc29sdmUgeWVhc3QgaW4gd2FybSB3YXRlciBhbmQgbGV0IHN0YW5kIGZvciA1IG1pbnV0ZXNcbk1peCBmbG91ciBhbmQgc2FsdCwgY3JlYXRlIGEgd2VsbCBpbiBjZW50ZXJcbkFkZCB5ZWFzdCBtaXh0dXJlIGFuZCBvbGl2ZSBvaWxcbktuZWFkIGZvciAxMCBtaW51dGVzIHVudGlsIHNtb290aFxuTGV0IHJpc2UgZm9yIDEtMiBob3VycyB1bnRpbCBkb3VibGVkXG5QdW5jaCBkb3duIGFuZCBkaXZpZGUgaW50byBwb3J0aW9uc1xuUm9sbCBvdXQgZWFjaCBwb3J0aW9uIHRvIDEyLWluY2ggY2lyY2xlc1xuVG9wIHdpdGggY3J1c2hlZCB0b21hdG9lcywgbW96emFyZWxsYSwgYW5kIGJhc2lsXG5CYWtlIGF0IDQ3NVx4QjBGICgyNDVceEIwQykgZm9yIDEwLTEyIG1pbnV0ZXMiLAogICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogIm9yZGVyZWQiIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiBgdGlwLSR7dGltZXN0YW1wMiArIDl9YCwKICAgICAgdHlwZTogInF1b3RlIiwKICAgICAgY29udGVudDogIlBybyB0aXA6IEZvciBhbiBhdXRoZW50aWMgdGFzdGUsIHVzZSBhIHBpenphIHN0b25lIGFuZCBwcmVoZWF0IGl0IGluIHRoZSBvdmVuIGZvciBhdCBsZWFzdCAzMCBtaW51dGVzIGJlZm9yZSBiYWtpbmcuIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBkaXZpZGVyLSR7dGltZXN0YW1wMiArIDEwfWAsCiAgICAgIHR5cGU6ICJkaXZpZGVyIiwKICAgICAgY29udGVudDogIiIKICAgIH0sCiAgICB7CiAgICAgIGlkOiBgc2VydmluZ3MtJHt0aW1lc3RhbXAyICsgMTF9YCwKICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgIGNvbnRlbnQ6ICJTZXJ2aW5nczogNCBwaXp6YXMgfCBQcmVwIHRpbWU6IDIgaG91cnMgfCBDb29rIHRpbWU6IDEyIG1pbnV0ZXMiCiAgICB9CiAgXTsKfTsKdmFyIGluaXRpYWxpemVFZGl0b3JzID0gKGNvbnRhaW5lcikgPT4gewogIGNvbnN0IGVkaXRvcnMgPSB7fTsKICBlZGl0b3JzLmJhc2ljID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItYmFzaWMiKTsKICBlZGl0b3JzLmFydGljbGUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2VkaXRvci1hcnRpY2xlIik7CiAgZWRpdG9ycy5kcmFnRHJvcCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWRyYWdkcm9wIik7CiAgZWRpdG9ycy50dXRvcmlhbCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLXR1dG9yaWFsIik7CiAgZWRpdG9ycy5tZWV0aW5nID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItbWVldGluZyIpOwogIGVkaXRvcnMucmVjaXBlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItcmVjaXBlIik7CiAgZWRpdG9ycy50ZWNobmljYWwgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2VkaXRvci10ZWNobmljYWwiKTsKICBlZGl0b3JzLmZvcm1JbnRlZ3JhdGlvbiA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWZvcm0taW50ZWdyYXRpb24iKTsKICBlZGl0b3JzLnByb2dyYW1tYXRpYyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLXByb2dyYW1tYXRpYyIpOwogIGVkaXRvcnMuZXhwb3J0RGVtbyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWV4cG9ydCIpOwogIHJldHVybiBlZGl0b3JzOwp9Owp2YXIgc2V0dXBQcm9ncmFtbWF0aWNEZW1vID0gKGNvbnRhaW5lciwgZWRpdG9yKSA9PiB7CiAgY29uc3QgcmVwb3J0QnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tZ2VuZXJhdGUtcmVwb3J0Iik7CiAgY29uc3QgcmVjaXBlQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tZ2VuZXJhdGUtcmVjaXBlIik7CiAgY29uc3QgY2xlYXJCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1jbGVhci1lZGl0b3IiKTsKICBpZiAocmVwb3J0QnRuKSB7CiAgICByZXBvcnRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGVkaXRvci5pbXBvcnRCbG9ja3MoZ2VuZXJhdGVSZXBvcnRCbG9ja3MoKSk7CiAgICB9KTsKICB9CiAgaWYgKHJlY2lwZUJ0bikgewogICAgcmVjaXBlQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBlZGl0b3IuaW1wb3J0QmxvY2tzKGdlbmVyYXRlUmVjaXBlQmxvY2tzKCkpOwogICAgfSk7CiAgfQogIGlmIChjbGVhckJ0bikgewogICAgY2xlYXJCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGVkaXRvci5pbXBvcnRCbG9ja3MoW10pOwogICAgfSk7CiAgfQp9Owp2YXIgc2V0dXBFeHBvcnREZW1vID0gKGNvbnRhaW5lciwgZWRpdG9yKSA9PiB7CiAgY29uc3QgZXhwb3J0QmxvY2tzQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tZXhwb3J0LWJsb2NrcyIpOwogIGNvbnN0IGV4cG9ydEh0bWxCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1leHBvcnQtaHRtbCIpOwogIGNvbnN0IGV4cG9ydE1hcmtkb3duQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tZXhwb3J0LW1hcmtkb3duIik7CiAgY29uc3Qgc2F2ZVN0YXRlQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tc2F2ZS1zdGF0ZSIpOwogIGNvbnN0IHJlc3RvcmVTdGF0ZUJ0biA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjYnRuLXJlc3RvcmUtc3RhdGUiKTsKICBsZXQgc2F2ZWRTdGF0ZSA9IG51bGw7CiAgaWYgKGV4cG9ydEJsb2Nrc0J0bikgewogICAgZXhwb3J0QmxvY2tzQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBjb25zdCBibG9ja3MgPSBlZGl0b3IuZXhwb3J0QmxvY2tzKCk7CiAgICAgIGNvbnNvbGUubG9nKCJFeHBvcnRlZCBibG9ja3M6IiwgYmxvY2tzKTsKICAgICAgYWxlcnQoYEV4cG9ydGVkICR7YmxvY2tzLmxlbmd0aH0gYmxvY2tzIHRvIGNvbnNvbGUuIENoZWNrIGRldmVsb3BlciB0b29scy5gKTsKICAgIH0pOwogIH0KICBpZiAoZXhwb3J0SHRtbEJ0bikgewogICAgZXhwb3J0SHRtbEJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgY29uc3QgaHRtbDIwID0gZWRpdG9yLmV4cG9ydEFzSHRtbCgpOwogICAgICBjb25zb2xlLmxvZygiSFRNTCBFeHBvcnQ6IiwgaHRtbDIwKTsKICAgICAgYWxlcnQoIkhUTUwgZXhwb3J0ZWQgdG8gY29uc29sZS4gQ2hlY2sgZGV2ZWxvcGVyIHRvb2xzLiIpOwogICAgfSk7CiAgfQogIGlmIChleHBvcnRNYXJrZG93bkJ0bikgewogICAgZXhwb3J0TWFya2Rvd25CdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGNvbnN0IG1hcmtkb3duID0gZWRpdG9yLmV4cG9ydEFzTWFya2Rvd24oKTsKICAgICAgY29uc29sZS5sb2coIk1hcmtkb3duIEV4cG9ydDoiLCBtYXJrZG93bik7CiAgICAgIGFsZXJ0KCJNYXJrZG93biBleHBvcnRlZCB0byBjb25zb2xlLiBDaGVjayBkZXZlbG9wZXIgdG9vbHMuIik7CiAgICB9KTsKICB9CiAgaWYgKHNhdmVTdGF0ZUJ0bikgewogICAgc2F2ZVN0YXRlQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBzYXZlZFN0YXRlID0gZWRpdG9yLmV4cG9ydFN0YXRlKCk7CiAgICAgIGNvbnNvbGUubG9nKCJTYXZlZCBzdGF0ZToiLCBzYXZlZFN0YXRlKTsKICAgICAgYWxlcnQoIkVkaXRvciBzdGF0ZSBzYXZlZCEiKTsKICAgIH0pOwogIH0KICBpZiAocmVzdG9yZVN0YXRlQnRuKSB7CiAgICByZXN0b3JlU3RhdGVCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGlmIChzYXZlZFN0YXRlKSB7CiAgICAgICAgZWRpdG9yLmltcG9ydFN0YXRlKHNhdmVkU3RhdGUpOwogICAgICAgIGFsZXJ0KCJFZGl0b3Igc3RhdGUgcmVzdG9yZWQhIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWxlcnQoIk5vIHNhdmVkIHN0YXRlIGZvdW5kLiBTYXZlIHN0YXRlIGZpcnN0ISIpOwogICAgICB9CiAgICB9KTsKICB9Cn07CnZhciBzZXR1cE91dHB1dEZvcm1hdERlbW8gPSAoY29udGFpbmVyLCBodG1sRWRpdG9yLCBtYXJrZG93bkVkaXRvcikgPT4gewogIGNvbnN0IGh0bWxCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1zaG93LWh0bWwtb3V0cHV0Iik7CiAgY29uc3QgaHRtbFByZXZpZXcgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI291dHB1dC1wcmV2aWV3LWh0bWwiKTsKICBpZiAoaHRtbEJ0biAmJiBodG1sUHJldmlldyAmJiBodG1sRWRpdG9yKSB7CiAgICBodG1sQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBodG1sUHJldmlldy50ZXh0Q29udGVudCA9IGh0bWxFZGl0b3IuZ2V0VmFsdWUoKTsKICAgICAgaHRtbFByZXZpZXcuY2xhc3NMaXN0LmFkZCgidmlzaWJsZSIpOwogICAgfSk7CiAgfQogIGNvbnN0IG1hcmtkb3duQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tc2hvdy1tYXJrZG93bi1vdXRwdXQiKTsKICBjb25zdCBtYXJrZG93blByZXZpZXcgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI291dHB1dC1wcmV2aWV3LW1hcmtkb3duIik7CiAgaWYgKG1hcmtkb3duQnRuICYmIG1hcmtkb3duUHJldmlldyAmJiBtYXJrZG93bkVkaXRvcikgewogICAgbWFya2Rvd25CdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIG1hcmtkb3duUHJldmlldy50ZXh0Q29udGVudCA9IG1hcmtkb3duRWRpdG9yLmdldFZhbHVlKCk7CiAgICAgIG1hcmtkb3duUHJldmlldy5jbGFzc0xpc3QuYWRkKCJ2aXNpYmxlIik7CiAgICB9KTsKICB9Cn07CnZhciBwb3B1bGF0ZUluaXRpYWxDb250ZW50ID0gKGVkaXRvcnMpID0+IHsKICBpZiAoZWRpdG9ycy5hcnRpY2xlKSB7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgY29uc3QgYXJ0aWNsZUJsb2NrcyA9IFsKICAgICAgICB7CiAgICAgICAgICBpZDogImludHJvLWhlYWRpbmctIiArIERhdGUubm93KCksCiAgICAgICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgICAgIGNvbnRlbnQ6ICJJbnRyb2R1Y3Rpb24gdG8gTW9kZXJuIFdlYiBEZXZlbG9wbWVudCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiaW50cm8tcGFyYS0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICAgICAgY29udGVudDogIk1vZGVybiB3ZWIgZGV2ZWxvcG1lbnQgaGFzIGV2b2x2ZWQgc2lnbmlmaWNhbnRseSBvdmVyIHRoZSBwYXN0IGRlY2FkZS4gSW4gdGhpcyBhcnRpY2xlLCB3ZSdsbCBleHBsb3JlIHRoZSBrZXkgdGVjaG5vbG9naWVzIGFuZCBiZXN0IHByYWN0aWNlcyB0aGF0IGRlZmluZSB3ZWIgZGV2ZWxvcG1lbnQgaW4gMjAyNC4iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogInRlY2gtaGVhZGluZy0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICAgICAgY29udGVudDogIktleSBUZWNobm9sb2dpZXMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogInRlY2gtbGlzdC0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJsaXN0IiwKICAgICAgICAgIGNvbnRlbnQ6ICJUeXBlU2NyaXB0IC0gVHlwZS1zYWZlIEphdmFTY3JpcHQgZGV2ZWxvcG1lbnRcbldlYiBDb21wb25lbnRzIC0gTmF0aXZlIGNvbXBvbmVudCBtb2RlbFxuRVMgTW9kdWxlcyAtIE1vZGVybiBtb2R1bGUgc3lzdGVtXG5XZWJBc3NlbWJseSAtIEhpZ2gtcGVyZm9ybWFuY2UgY29tcHV0aW5nIiwKICAgICAgICAgIG1ldGFkYXRhOiB7IGxpc3RUeXBlOiAib3JkZXJlZCIgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJxdW90ZS0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJxdW90ZSIsCiAgICAgICAgICBjb250ZW50OiAiVGhlIGJlc3Qgd2F5IHRvIHByZWRpY3QgdGhlIGZ1dHVyZSBpcyB0byBpbnZlbnQgaXQuIC0gQWxhbiBLYXkiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogImV4YW1wbGUtaGVhZGluZy0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICAgICAgY29udGVudDogIkNvZGUgRXhhbXBsZSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiY29kZS1leGFtcGxlLSIgKyBEYXRlLm5vdygpLAogICAgICAgICAgdHlwZTogImNvZGUiLAogICAgICAgICAgY29udGVudDogImNsYXNzIE1vZGVybldlYkFwcCBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KTtcbiAgfVxuICBcbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxufSIsCiAgICAgICAgICBtZXRhZGF0YTogeyBsYW5ndWFnZTogImphdmFzY3JpcHQiIH0KICAgICAgICB9CiAgICAgIF07CiAgICAgIGVkaXRvcnMuYXJ0aWNsZS5pbXBvcnRCbG9ja3MoYXJ0aWNsZUJsb2Nrcyk7CiAgICB9LCA1MDApOwogIH0KICBpZiAoZWRpdG9ycy5kcmFnRHJvcCkgewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGNvbnN0IGRyYWdCbG9ja3MgPSBbCiAgICAgICAgewogICAgICAgICAgaWQ6ICJkcmFnLXRpdGxlLSIgKyBEYXRlLm5vdygpLAogICAgICAgICAgdHlwZTogImhlYWRpbmctMSIsCiAgICAgICAgICBjb250ZW50OiAiRHJhZyAmIERyb3AgRGVtbyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiZHJhZy1pbnRyby0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICAgICAgY29udGVudDogIlRoaXMgZWRpdG9yIGRlbW9uc3RyYXRlcyBkcmFnIGFuZCBkcm9wIGZ1bmN0aW9uYWxpdHkuIFRyeSBkcmFnZ2luZyB0aGVzZSBibG9ja3MgYXJvdW5kISIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiZHJhZy1oZWFkaW5nLSIgKyBEYXRlLm5vdygpLAogICAgICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgICAgICBjb250ZW50OiAiSG93IEl0IFdvcmtzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJkcmFnLWxpc3QtIiArIERhdGUubm93KCksCiAgICAgICAgICB0eXBlOiAibGlzdCIsCiAgICAgICAgICBjb250ZW50OiAiSG92ZXIgb3ZlciBhbnkgYmxvY2sgdG8gc2VlIHRoZSBkcmFnIGhhbmRsZVxuQ2xpY2sgYW5kIGhvbGQgdGhlIGhhbmRsZSB0byBzdGFydCBkcmFnZ2luZ1xuRHJhZyB0byByZW9yZGVyIGJsb2Nrc1xuUmVsZWFzZSB0byBkcm9wIGluIHRoZSBuZXcgcG9zaXRpb24iLAogICAgICAgICAgbWV0YWRhdGE6IHsgbGlzdFR5cGU6ICJvcmRlcmVkIiB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogImRyYWctcXVvdGUtIiArIERhdGUubm93KCksCiAgICAgICAgICB0eXBlOiAicXVvdGUiLAogICAgICAgICAgY29udGVudDogIlRoZSBkcmFnIGFuZCBkcm9wIGZlYXR1cmUgbWFrZXMgaXQgZWFzeSB0byByZW9yZ2FuaXplIHlvdXIgY29udGVudCB3aXRob3V0IGN1dHRpbmcgYW5kIHBhc3RpbmcuIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJkcmFnLWRpdmlkZXItIiArIERhdGUubm93KCksCiAgICAgICAgICB0eXBlOiAiZGl2aWRlciIsCiAgICAgICAgICBjb250ZW50OiAiIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJkcmFnLWZvb3Rlci0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICAgICAgY29udGVudDogIk5vdGU6IERpdmlkZXIgYmxvY2tzIGNhbm5vdCBiZSBkcmFnZ2VkLCBidXQgb3RoZXIgYmxvY2tzIGNhbiBiZSBtb3ZlZCBhcm91bmQgdGhlbS4iCiAgICAgICAgfQogICAgICBdOwogICAgICBlZGl0b3JzLmRyYWdEcm9wLmltcG9ydEJsb2NrcyhkcmFnQmxvY2tzKTsKICAgIH0sIDYwMCk7CiAgfQp9Owp2YXIgZGVtb0Z1bmM0MCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCA1MDApKTsKICBjb25zdCBlZGl0b3JzID0gaW5pdGlhbGl6ZUVkaXRvcnMoZWxlbWVudEFyZyk7CiAgaWYgKGVkaXRvcnMucHJvZ3JhbW1hdGljKSB7CiAgICBzZXR1cFByb2dyYW1tYXRpY0RlbW8oZWxlbWVudEFyZywgZWRpdG9ycy5wcm9ncmFtbWF0aWMpOwogIH0KICBpZiAoZWRpdG9ycy5leHBvcnREZW1vKSB7CiAgICBzZXR1cEV4cG9ydERlbW8oZWxlbWVudEFyZywgZWRpdG9ycy5leHBvcnREZW1vKTsKICB9CiAgc2V0dXBPdXRwdXRGb3JtYXREZW1vKGVsZW1lbnRBcmcsIGVkaXRvcnMubWVldGluZywgZWRpdG9ycy5yZWNpcGUpOwogIHBvcHVsYXRlSW5pdGlhbENvbnRlbnQoZWRpdG9ycyk7CiAgY29uc29sZS5sb2coIldZU0lXWUcgRGVtbyBpbml0aWFsaXplZCB3aXRoIGVkaXRvcnM6IiwgT2JqZWN0LmtleXMoZWRpdG9ycykpOwp9fT4KICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMzJweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAzMnB4OwogICAgICB9CiAgICAgIAogICAgICAucGFuZWwtZGVzY3JpcHRpb24gewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC5wYW5lbC1kZXNjcmlwdGlvbiB7CiAgICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyMDBweCwgMWZyKSk7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLWljb24gewogICAgICAgIGNvbG9yOiAjMDA2NmNjOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIH0KCiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAuZmVhdHVyZS1pdGVtIHsKICAgICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIH0KICAgICAgICAuZmVhdHVyZS1pY29uIHsKICAgICAgICAgIGNvbG9yOiAjNGQ5NGZmOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLnNob3J0Y3V0cy1ib3ggewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMTAyLCAyMDQsIDAuMDUpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMTAyLCAyMDQsIDAuMik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgfQoKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC5zaG9ydGN1dHMtYm94IHsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNzcsIDE0OCwgMjU1LCAwLjEpOwogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc3LCAxNDgsIDI1NSwgMC4zKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5zaG9ydGN1dHMtdGl0bGUgewogICAgICAgIG1hcmdpbjogMCAwIDEycHggMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogIzAwNjZjYzsKICAgICAgfQoKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC5zaG9ydGN1dHMtdGl0bGUgewogICAgICAgICAgY29sb3I6ICM0ZDk0ZmY7CiAgICAgICAgfQogICAgICB9CgogICAgICAuc2hvcnRjdXRzLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTgwcHgsIDFmcikpOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuc2hvcnRjdXQtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgfQoKICAgICAgLnNob3J0Y3V0LWtleSB7CiAgICAgICAgYmFja2dyb3VuZDogI2YwZjBmMDsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogIzMzMzsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLnNob3J0Y3V0LWl0ZW0gewogICAgICAgICAgY29sb3I6ICNiYmI7CiAgICAgICAgfQogICAgICAgIC5zaG9ydGN1dC1rZXkgewogICAgICAgICAgYmFja2dyb3VuZDogIzMzMzsKICAgICAgICAgIGNvbG9yOiAjZGRkOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLm91dHB1dC1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMzIwcHgsIDFmcikpOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICB9CgogICAgICAub3V0cHV0LWNhcmQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KCiAgICAgIC5vdXRwdXQtYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAub3V0cHV0LXByZXZpZXcgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjA0KTsKICAgICAgICBjb2xvcjogdmFyKC0tZGVlcy1jb2xvci10ZXh0LCAjMGYxNzJhKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE1LCAyMywgNDIsIDAuMSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgTW9ubycsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1heC1oZWlnaHQ6IDI4MHB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbdGhlbWU9J2RhcmsnXSkgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1MCwgMjUwLCAyNTAsIDAuMDYpOwogICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTAsIDI1MCwgMjUwLCAwLjE1KTsKICAgICAgICBjb2xvcjogdmFyKC0tZGVlcy1jb2xvci10ZXh0LCAjZjRmNGY1KTsKICAgICAgfQoKICAgICAgLm91dHB1dC1wcmV2aWV3LnZpc2libGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAub3V0cHV0LWdyaWQgewogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICAudGlwcy1ib3ggewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjBmOGZmOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC50aXBzLWJveCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDc3LCAxNDgsIDI1NSwgMC4xKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC50aXBzLWJveCBzdHJvbmcgewogICAgICAgIGNvbG9yOiAjMDA2NmNjOwogICAgICB9CiAgICAgIAogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLnRpcHMtYm94IHN0cm9uZyB7CiAgICAgICAgICBjb2xvcjogIzRkOTRmZjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC50aXBzLWxpc3QgewogICAgICAgIG1hcmdpbjogOHB4IDAgMCAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLnRpcHMtbGlzdCBsaSB7CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgfQogICAgICAKICAgICAgLmJ1dHRvbi1ncm91cCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmOGY4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZThlOGU4OwogICAgICAgIGJvcmRlci1jb2xvcjogI2NjYzsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7CiAgICAgIH0KICAgICAgCiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAuZGVtby1idXR0b24gewogICAgICAgICAgYmFja2dyb3VuZDogIzMzMzsKICAgICAgICAgIGJvcmRlci1jb2xvcjogIzU1NTsKICAgICAgICAgIGNvbG9yOiAjZGRkOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZGVtby1idXR0b246aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogIzQ0NDsKICAgICAgICAgIGJvcmRlci1jb2xvcjogIzY2NjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjUwcHgsIDFmcikpOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZCB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLmJsb2NrcyB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDIsIDIwNCwgMC4xKTsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQuaHRtbCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSg3NiwgMTc1LCA4MCwgMC4xKTsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQubWFya2Rvd24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAxNTIsIDAsIDAuMSk7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLnN0YXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1NiwgMzksIDE3NiwgMC4xKTsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQgc3Ryb25nIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLmJsb2NrcyBzdHJvbmcgewogICAgICAgIGNvbG9yOiAjMDA2NmNjOwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZC5odG1sIHN0cm9uZyB7CiAgICAgICAgY29sb3I6ICM0Q0FGNTA7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLm1hcmtkb3duIHN0cm9uZyB7CiAgICAgICAgY29sb3I6ICNGRjk4MDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLnN0YXRlIHN0cm9uZyB7CiAgICAgICAgY29sb3I6ICM5QzI3QjA7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkIHAgewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gXHV7MUY2ODB9IE1vZGVybiBXWVNJV1lHIEVkaXRvciJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBBIHBvd2VyZnVsIGJsb2NrLWJhc2VkIGVkaXRvciB3aXRoIHNsYXNoIGNvbW1hbmRzLCBrZXlib2FyZCBzaG9ydGN1dHMsIGFuZCBtdWx0aXBsZSBvdXRwdXQgZm9ybWF0cy4gCiAgICAgICAgICBQZXJmZWN0IGZvciBjb250ZW50IGNyZWF0aW9uLCBibG9nIHBvc3RzLCBkb2N1bWVudGF0aW9uLCBhbmQgbW9yZS4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1ncmlkIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaXRlbSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmZWF0dXJlLWljb24iPuKckzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+U2xhc2ggY29tbWFuZHMgKC8pPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7inJM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPktleWJvYXJkIHNob3J0Y3V0czwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5CbG9jay1iYXNlZCBlZGl0aW5nPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7inJM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPkRyYWcgJiBkcm9wIHJlb3JkZXJpbmc8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaXRlbSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmZWF0dXJlLWljb24iPuKckzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+SFRNTCAmIE1hcmtkb3duIG91dHB1dDwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5EYXJrIG1vZGUgc3VwcG9ydDwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5Nb2JpbGUgcmVzcG9uc2l2ZTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICBpZD0iZWRpdG9yLWJhc2ljIgogICAgICAgICAgbGFiZWw9IlJpY2ggVGV4dCBFZGl0b3IiIAogICAgICAgICAgZGVzY3JpcHRpb249IlN0YXJ0IHR5cGluZyBvciB1c2UgJy8nIHRvIGluc2VydCBkaWZmZXJlbnQgYmxvY2sgdHlwZXMiCiAgICAgICAgICBvdXRwdXRGb3JtYXQ9Imh0bWwiCiAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgoKICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dHMtYm94Ij4KICAgICAgICAgIDxoNCBjbGFzcz0ic2hvcnRjdXRzLXRpdGxlIj7ijKjvuI8gS2V5Ym9hcmQgU2hvcnRjdXRzPC9oND4KICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0cy1ncmlkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+Lzwvc3Bhbj4gU2xhc2ggY29tbWFuZHMKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPiM8L3NwYW4+IEhlYWRpbmcgMQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+IyM8L3NwYW4+IEhlYWRpbmcgMgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+IyMjPC9zcGFuPiBIZWFkaW5nIDMKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPj48L3NwYW4+IFF1b3RlCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij5cYFxgXGA8L3NwYW4+IENvZGUgYmxvY2sKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPio8L3NwYW4+IG9yIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPi08L3NwYW4+IEJ1bGxldCBsaXN0CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij4xLjwvc3Bhbj4gTnVtYmVyZWQgbGlzdAogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+LS0tPC9zcGFuPiBEaXZpZGVyCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIyLiBcdXsxRjRERH0gQmxvZyBQb3N0IEV4YW1wbGUifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgUGVyZmVjdCBmb3IgY3JlYXRpbmcgcmljaCBjb250ZW50IHdpdGggbXVsdGlwbGUgYmxvY2sgdHlwZXMuIAogICAgICAgICAgVGhlIGVkaXRvciBwcmVzZXJ2ZXMgZm9ybWF0dGluZyBhbmQgcHJvdmlkZXMgYSBjbGVhbiBlZGl0aW5nIGV4cGVyaWVuY2UuCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICBpZD0iZWRpdG9yLWFydGljbGUiCiAgICAgICAgICBsYWJlbD0iQmxvZyBQb3N0IENvbnRlbnQiIAogICAgICAgICAgZGVzY3JpcHRpb249IldyaXRlIHlvdXIgYXJ0aWNsZSB1c2luZyB2YXJpb3VzIGZvcm1hdHRpbmcgb3B0aW9ucyIKICAgICAgICAgIG91dHB1dEZvcm1hdD0iaHRtbCIKICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIzLiBcdXsxRjUwMH0gRHJhZyAmIERyb3AgUmVvcmRlcmluZyJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBFYXNpbHkgcmVhcnJhbmdlIHlvdXIgY29udGVudCBibG9ja3MgYnkgZHJhZ2dpbmcgdGhlbS4gCiAgICAgICAgICBIb3ZlciBvdmVyIGFueSBibG9jayB0byByZXZlYWwgdGhlIGRyYWcgaGFuZGxlIG9uIHRoZSBsZWZ0IHNpZGUuCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICBpZD0iZWRpdG9yLWRyYWdkcm9wIgogICAgICAgICAgbGFiZWw9IkRyYWcgJiBEcm9wIERlbW8iIAogICAgICAgICAgZGVzY3JpcHRpb249IlRyeSBkcmFnZ2luZyBibG9ja3MgdG8gcmVvcmRlciB0aGVtIC0gaG92ZXIgdG8gc2VlIGRyYWcgaGFuZGxlcyIKICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0idGlwcy1ib3giPgogICAgICAgICAgPHN0cm9uZz7wn5KhIFRpcHM6PC9zdHJvbmc+CiAgICAgICAgICA8dWwgY2xhc3M9InRpcHMtbGlzdCI+CiAgICAgICAgICAgIDxsaT5Ib3ZlciBvdmVyIGFueSBibG9jayB0byBzZWUgdGhlIGRyYWcgaGFuZGxlICjii67ii64pIG9uIHRoZSBsZWZ0PC9saT4KICAgICAgICAgICAgPGxpPkNsaWNrIGFuZCBob2xkIHRoZSBkcmFnIGhhbmRsZSB0byBzdGFydCBkcmFnZ2luZzwvbGk+CiAgICAgICAgICAgIDxsaT5CbHVlIGluZGljYXRvcnMgc2hvdyB3aGVyZSB0aGUgYmxvY2sgd2lsbCBiZSBkcm9wcGVkPC9saT4KICAgICAgICAgICAgPGxpPkRpdmlkZXIgYmxvY2tzIGNhbm5vdCBiZSBkcmFnZ2VkPC9saT4KICAgICAgICAgICAgPGxpPlRoZSBlZGl0b3IgbWFpbnRhaW5zIGZvY3VzIG9uIHRoZSBtb3ZlZCBibG9jayBhZnRlciBkcm9wcGluZzwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNC4gXHV7MUY0REF9IFR1dG9yaWFsICYgRG9jdW1lbnRhdGlvbiJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDcmVhdGUgY29tcHJlaGVuc2l2ZSB0dXRvcmlhbHMgYW5kIGRvY3VtZW50YXRpb24gd2l0aCBjb2RlIGV4YW1wbGVzLCBsaXN0cywgYW5kIHN0cnVjdHVyZWQgY29udGVudC4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgIGlkPSJlZGl0b3ItdHV0b3JpYWwiCiAgICAgICAgICBsYWJlbD0iR2l0IFR1dG9yaWFsIiAKICAgICAgICAgIGRlc2NyaXB0aW9uPSJTdGVwLWJ5LXN0ZXAgZ3VpZGUgd2l0aCBjb21tYW5kcyBhbmQgZXhwbGFuYXRpb25zIgogICAgICAgICAgb3V0cHV0Rm9ybWF0PSJtYXJrZG93biIKICAgICAgICAgIHZhbHVlPSIjIEdpdCBUdXRvcmlhbCBmb3IgQmVnaW5uZXJzCgpHaXQgaXMgYSBkaXN0cmlidXRlZCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIHRoYXQgaGVscHMgeW91IHRyYWNrIGNoYW5nZXMgaW4geW91ciBjb2RlIG92ZXIgdGltZS4gVGhpcyB0dXRvcmlhbCB3aWxsIGd1aWRlIHlvdSB0aHJvdWdoIHRoZSBiYXNpY3MuCgojIyBQcmVyZXF1aXNpdGVzCgpCZWZvcmUgc3RhcnRpbmcsIGVuc3VyZSB5b3UgaGF2ZToKCi0gR2l0IGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbQotIEEgdGV4dCBlZGl0b3Igb3IgSURFCi0gQmFzaWMgY29tbWFuZCBsaW5lIGtub3dsZWRnZQoKIyMgR2V0dGluZyBTdGFydGVkCgojIyMgMS4gQ29uZmlndXJlIEdpdAoKRmlyc3QsIHNldCB1cCB5b3VyIGlkZW50aXR5OgoKXGBcYFxgYmFzaApnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSAmcXVvdDtZb3VyIE5hbWUmcXVvdDsKZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsICZxdW90O3lvdXIuZW1haWxAZXhhbXBsZS5jb20mcXVvdDsKXGBcYFxgCgojIyMgMi4gSW5pdGlhbGl6ZSBhIFJlcG9zaXRvcnkKCkNyZWF0ZSBhIG5ldyBHaXQgcmVwb3NpdG9yeToKClxgXGBcYGJhc2gKbWtkaXIgbXktcHJvamVjdApjZCBteS1wcm9qZWN0CmdpdCBpbml0ClxgXGBcYAoKIyMjIDMuIEJhc2ljIEdpdCBXb3JrZmxvdwoKIyMjIyBBZGRpbmcgRmlsZXMKCkNyZWF0ZSBhIGZpbGUgYW5kIGFkZCBpdCB0byBzdGFnaW5nOgoKXGBcYFxgYmFzaAplY2hvICZxdW90OyMgTXkgUHJvamVjdCZxdW90OyA+IFJFQURNRS5tZApnaXQgYWRkIFJFQURNRS5tZApcYFxgXGAKCiMjIyMgQ29tbWl0dGluZyBDaGFuZ2VzCgpcYFxgXGBiYXNoCmdpdCBjb21taXQgLW0gJnF1b3Q7SW5pdGlhbCBjb21taXQmcXVvdDsKXGBcYFxgCgo+ICoqQmVzdCBQcmFjdGljZToqKiBXcml0ZSBjbGVhciwgZGVzY3JpcHRpdmUgY29tbWl0IG1lc3NhZ2VzIHRoYXQgZXhwbGFpbiB3aGF0IGNoYW5nZXMgd2VyZSBtYWRlIGFuZCB3aHkuCgojIyMgNC4gV29ya2luZyB3aXRoIEJyYW5jaGVzCgpCcmFuY2hlcyBhbGxvdyB5b3UgdG8gd29yayBvbiBmZWF0dXJlcyBpbmRlcGVuZGVudGx5OgoKXGBcYFxgYmFzaAojIENyZWF0ZSBhbmQgc3dpdGNoIHRvIGEgbmV3IGJyYW5jaApnaXQgY2hlY2tvdXQgLWIgZmVhdHVyZS1icmFuY2gKCiMgTWFrZSBjaGFuZ2VzIGFuZCBjb21taXQKZ2l0IGFkZCAuCmdpdCBjb21taXQgLW0gJnF1b3Q7QWRkIG5ldyBmZWF0dXJlJnF1b3Q7CgojIFN3aXRjaCBiYWNrIHRvIG1haW4KZ2l0IGNoZWNrb3V0IG1haW4KCiMgTWVyZ2UgdGhlIGZlYXR1cmUKZ2l0IG1lcmdlIGZlYXR1cmUtYnJhbmNoClxgXGBcYAoKLS0tCgojIyBDb21tb24gQ29tbWFuZHMgUmVmZXJlbmNlCgp8IENvbW1hbmQgfCBEZXNjcmlwdGlvbiB8CnwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwKfCBcYGdpdCBzdGF0dXNcYCB8IENoZWNrIHJlcG9zaXRvcnkgc3RhdHVzIHwKfCBcYGdpdCBsb2dcYCB8IFZpZXcgY29tbWl0IGhpc3RvcnkgfAp8IFxgZ2l0IGRpZmZcYCB8IFNob3cgY2hhbmdlcyB8CnwgXGBnaXQgcHVsbFxgIHwgRmV0Y2ggYW5kIG1lcmdlIGNoYW5nZXMgfAp8IFxgZ2l0IHB1c2hcYCB8IFVwbG9hZCBjaGFuZ2VzIHRvIHJlbW90ZSB8CgojIyBOZXh0IFN0ZXBzCgoxLiBMZWFybiBhYm91dCByZW1vdGUgcmVwb3NpdG9yaWVzCjIuIEV4cGxvcmUgYWR2YW5jZWQgR2l0IGZlYXR1cmVzCjMuIFByYWN0aWNlIHdpdGggcmVhbCBwcm9qZWN0cwo0LiBDb250cmlidXRlIHRvIG9wZW4gc291cmNlCgoqKkhhcHB5IGNvZGluZyEqKiDwn5qAIgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjUuIFx1ezFGNTA0fSBPdXRwdXQgRm9ybWF0cyJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDaG9vc2UgYmV0d2VlbiBIVE1MIGFuZCBNYXJrZG93biBvdXRwdXQgZm9ybWF0cyBkZXBlbmRpbmcgb24geW91ciBuZWVkcy4gCiAgICAgICAgICBQZXJmZWN0IGZvciBzdGF0aWMgc2l0ZSBnZW5lcmF0b3JzLCBkb2N1bWVudGF0aW9uIHN5c3RlbXMsIG9yIGFueSBjb250ZW50IG1hbmFnZW1lbnQgd29ya2Zsb3cuCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1ncmlkIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1jYXJkIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgICAgICBpZD0iZWRpdG9yLW1lZXRpbmciCiAgICAgICAgICAgICAgbGFiZWw9Ik1lZXRpbmcgTm90ZXMiIAogICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJTdHJ1Y3R1cmVkIG1lZXRpbmcgZG9jdW1lbnRhdGlvbiIKICAgICAgICAgICAgICBvdXRwdXRGb3JtYXQ9Imh0bWwiCiAgICAgICAgICAgICAgdmFsdWU9IjxoMj5RNCBQbGFubmluZyBNZWV0aW5nPC9oMj48cD48c3Ryb25nPkRhdGU6PC9zdHJvbmc+IERlY2VtYmVyIDE1LCAyMDI0PGJyPjxzdHJvbmc+QXR0ZW5kZWVzOjwvc3Ryb25nPiBQcm9kdWN0IFRlYW0sIEVuZ2luZWVyaW5nLCBEZXNpZ248L3A+PGgzPkFnZW5kYSBJdGVtczwvaDM+PG9sPjxsaT5SZXZpZXcgUTMgYWNoaWV2ZW1lbnRzPC9saT48bGk+U2V0IFE0IG9iamVjdGl2ZXM8L2xpPjxsaT5SZXNvdXJjZSBhbGxvY2F0aW9uPC9saT48bGk+VGltZWxpbmUgZGlzY3Vzc2lvbjwvbGk+PC9vbD48aDM+S2V5IERlY2lzaW9uczwvaDM+PHVsPjxsaT5MYXVuY2ggbmV3IGRhc2hib2FyZCBmZWF0dXJlIGJ5IGVuZCBvZiBKYW51YXJ5PC9saT48bGk+SW5jcmVhc2UgZW5naW5lZXJpbmcgdGVhbSBieSAyIGRldmVsb3BlcnM8L2xpPjxsaT5JbXBsZW1lbnQgd2Vla2x5IGRlc2lnbiByZXZpZXdzPC9saT48L3VsPjxibG9ja3F1b3RlPiZxdW90O0ZvY3VzIG9uIHVzZXIgZXhwZXJpZW5jZSBpbXByb3ZlbWVudHMgYmFzZWQgb24gUTMgZmVlZGJhY2smcXVvdDsgLSBQcm9kdWN0IE1hbmFnZXI8L2Jsb2NrcXVvdGU+PGgzPkFjdGlvbiBJdGVtczwvaDM+PHVsPjxsaT5TYXJhaDogQ3JlYXRlIGRldGFpbGVkIHByb2plY3QgdGltZWxpbmU8L2xpPjxsaT5NaWtlOiBEcmFmdCB0ZWNobmljYWwgcmVxdWlyZW1lbnRzPC9saT48bGk+TGlzYTogU2NoZWR1bGUgdXNlciByZXNlYXJjaCBzZXNzaW9uczwvbGk+PC91bD48aHI+PHA+TmV4dCBtZWV0aW5nOiBKYW51YXJ5IDUsIDIwMjU8L3A+IgogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1hY3Rpb25zIj4KICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tc2hvdy1odG1sLW91dHB1dCIgY2xhc3M9ImRlbW8tYnV0dG9uIj5TaG93IEhUTUwgT3V0cHV0PC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8cHJlIGlkPSJvdXRwdXQtcHJldmlldy1odG1sIiBjbGFzcz0ib3V0cHV0LXByZXZpZXciIGFyaWEtbGl2ZT0icG9saXRlIj48L3ByZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJvdXRwdXQtY2FyZCI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICAgICAgaWQ9ImVkaXRvci1yZWNpcGUiCiAgICAgICAgICAgICAgbGFiZWw9IlJlY2lwZSBCbG9nIFBvc3QiIAogICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJGb29kIGJsb2cgd2l0aCBtaXhlZCBjb250ZW50IgogICAgICAgICAgICAgIG91dHB1dEZvcm1hdD0ibWFya2Rvd24iCiAgICAgICAgICAgICAgdmFsdWU9IiMgVWx0aW1hdGUgQ2hvY29sYXRlIENoaXAgQ29va2llcwoKVGhlcmUncyBub3RoaW5nIHF1aXRlIGxpa2UgdGhlIHNtZWxsIG9mIGZyZXNobHkgYmFrZWQgY2hvY29sYXRlIGNoaXAgY29va2llcy4gVGhpcyByZWNpcGUgaGFzIGJlZW4gcGVyZmVjdGVkIG92ZXIgeWVhcnMgb2YgdGVzdGluZyEKCiMjIEluZ3JlZGllbnRzCgotIDLCvCBjdXBzIGFsbC1wdXJwb3NlIGZsb3VyCi0gMSB0c3AgYmFraW5nIHNvZGEKLSAxIHRzcCBzYWx0Ci0gMSBjdXAgYnV0dGVyLCBzb2Z0ZW5lZAotIMK+IGN1cCBncmFudWxhdGVkIHN1Z2FyCi0gwr4gY3VwIHBhY2tlZCBicm93biBzdWdhcgotIDIgbGFyZ2UgZWdncwotIDIgdHNwIHZhbmlsbGEgZXh0cmFjdAotIDIgY3VwcyBjaG9jb2xhdGUgY2hpcHMKCiMjIEluc3RydWN0aW9ucwoKIyMjIFN0ZXAgMTogUHJlcGFyYXRpb24KClByZWhlYXQgeW91ciBvdmVuIHRvICoqMzc1wrBGICgxOTDCsEMpKiouIFRoaXMgdGVtcGVyYXR1cmUgaXMgY3J1Y2lhbCBmb3IgYWNoaWV2aW5nIHRoZSBwZXJmZWN0IHRleHR1cmUuCgojIyMgU3RlcCAyOiBNaXggRHJ5IEluZ3JlZGllbnRzCgpJbiBhIG1lZGl1bSBib3dsLCB3aGlzayB0b2dldGhlcjoKCjEuIEZsb3VyCjIuIEJha2luZyBzb2RhCjMuIFNhbHQKCiMjIyBTdGVwIDM6IENyZWFtIEJ1dHRlciBhbmQgU3VnYXJzCgpcYFxgXGAKQ3JlYW0gYnV0dGVyIGFuZCBzdWdhcnMgZm9yIDMtNCBtaW51dGVzCnVudGlsIGxpZ2h0IGFuZCBmbHVmZnkKXGBcYFxgCgo+ICoqUHJvIHRpcDoqKiBSb29tIHRlbXBlcmF0dXJlIGluZ3JlZGllbnRzIG1peCBiZXR0ZXIgYW5kIGNyZWF0ZSBhIG1vcmUgdW5pZm9ybSBkb3VnaC4KCiMjIyBTdGVwIDQ6IEFkZCBXZXQgSW5ncmVkaWVudHMKCkJlYXQgaW4gZWdncyBvbmUgYXQgYSB0aW1lLCB0aGVuIGFkZCB2YW5pbGxhIGV4dHJhY3QuCgojIyMgU3RlcCA1OiBDb21iaW5lIGFuZCBCYWtlCgpHcmFkdWFsbHkgYmxlbmQgaW4gZmxvdXIgbWl4dHVyZSwgdGhlbiBzdGlyIGluIGNob2NvbGF0ZSBjaGlwcy4gRHJvcCByb3VuZGVkIHRhYmxlc3Bvb25zIG9udG8gdW5ncmVhc2VkIGNvb2tpZSBzaGVldHMuCgotLS0KCioqQmFraW5nIHRpbWU6KiogOS0xMSBtaW51dGVzIG9yIHVudGlsIGdvbGRlbiBicm93bgoKKipZaWVsZDoqKiBBYm91dCA1IGRvemVuIGNvb2tpZXMiCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LWFjdGlvbnMiPgogICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1zaG93LW1hcmtkb3duLW91dHB1dCIgY2xhc3M9ImRlbW8tYnV0dG9uIj5TaG93IE1hcmtkb3duIE91dHB1dDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHByZSBpZD0ib3V0cHV0LXByZXZpZXctbWFya2Rvd24iIGNsYXNzPSJvdXRwdXQtcHJldmlldyIgYXJpYS1saXZlPSJwb2xpdGUiPjwvcHJlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI2LiBcdXsxRjNBOH0gQWR2YW5jZWQgRWRpdGluZyJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDcmVhdGUgY29tcGxleCBkb2N1bWVudHMgd2l0aCBtaXhlZCBjb250ZW50IHR5cGVzLiBUaGUgZWRpdG9yIGhhbmRsZXMgYWxsIGZvcm1hdHRpbmcgc2VhbWxlc3NseS4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgIGlkPSJlZGl0b3ItdGVjaG5pY2FsIgogICAgICAgICAgbGFiZWw9IlRlY2huaWNhbCBEb2N1bWVudGF0aW9uIiAKICAgICAgICAgIGRlc2NyaXB0aW9uPSJDcmVhdGUgdGVjaG5pY2FsIGRvY3Mgd2l0aCBjb2RlIGV4YW1wbGVzIGFuZCBzdHJ1Y3R1cmVkIGNvbnRlbnQiCiAgICAgICAgICB2YWx1ZT0iPGgxPkFQSSBEb2N1bWVudGF0aW9uPC9oMT48cD5XZWxjb21lIHRvIG91ciBBUEkgZG9jdW1lbnRhdGlvbi4gQmVsb3cgeW91J2xsIGZpbmQgZXhhbXBsZXMgb2YgaG93IHRvIHVzZSBvdXIgZW5kcG9pbnRzLjwvcD48aDI+QXV0aGVudGljYXRpb248L2gyPjxwPkFsbCBBUEkgcmVxdWVzdHMgcmVxdWlyZSBhdXRoZW50aWNhdGlvbiB1c2luZyBhbiBBUEkga2V5OjwvcD48cHJlPjxjb2RlPkF1dGhvcml6YXRpb246IEJlYXJlciBZT1VSX0FQSV9LRVk8L2NvZGU+PC9wcmU+PGgyPkVuZHBvaW50czwvaDI+PGgzPkdFVCAvdXNlcnM8L2gzPjxwPlJldHJpZXZlIGEgbGlzdCBvZiB1c2VycyBmcm9tIHRoZSBzeXN0ZW0uPC9wPjxwcmU+PGNvZGU+Y3VybCAtWCBHRVQgaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vdXNlcnMgXFwKICAtSCAmcXVvdDtBdXRob3JpemF0aW9uOiBCZWFyZXIgWU9VUl9BUElfS0VZJnF1b3Q7PC9jb2RlPjwvcHJlPjxibG9ja3F1b3RlPk5vdGU6IFJhdGUgbGltaXRpbmcgYXBwbGllcyB0byBhbGwgZW5kcG9pbnRzLiBZb3UgY2FuIG1ha2UgdXAgdG8gMTAwIHJlcXVlc3RzIHBlciBtaW51dGUuPC9ibG9ja3F1b3RlPjxoMz5QT1NUIC91c2VyczwvaDM+PHA+Q3JlYXRlIGEgbmV3IHVzZXIgaW4gdGhlIHN5c3RlbS48L3A+PHByZT48Y29kZT57CiAgJnF1b3Q7bmFtZSZxdW90OzogJnF1b3Q7Sm9obiBEb2UmcXVvdDssCiAgJnF1b3Q7ZW1haWwmcXVvdDs6ICZxdW90O2pvaG5AZXhhbXBsZS5jb20mcXVvdDssCiAgJnF1b3Q7cm9sZSZxdW90OzogJnF1b3Q7dXNlciZxdW90Owp9PC9jb2RlPjwvcHJlPjxocj48cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIG91ciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLjwvcD4iCiAgICAgICAgICBvdXRwdXRGb3JtYXQ9Imh0bWwiCiAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNy4gXHUyNjk5XHVGRTBGIEZvcm0gSW50ZWdyYXRpb24ifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgU2VhbWxlc3NseSBpbnRlZ3JhdGVzIHdpdGggZGVlcy1mb3JtIGZvciBjb21wbGV0ZSBmb3JtIHNvbHV0aW9ucy4gCiAgICAgICAgICBBbGwgc3RhbmRhcmQgZm9ybSBmZWF0dXJlcyBsaWtlIHZhbGlkYXRpb24sIHJlcXVpcmVkIGZpZWxkcywgYW5kIGRhdGEgYmluZGluZyB3b3JrIG91dCBvZiB0aGUgYm94LgogICAgICAgIDwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgbGFiZWw9IkFydGljbGUgVGl0bGUiIAogICAgICAgICAgICByZXF1aXJlZD0idHJ1ZSIKICAgICAgICAgICAgdmFsdWU9IkhvdyB0byBCdWlsZCBNb2Rlcm4gV2ViIEFwcGxpY2F0aW9ucyIKICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgICAgaWQ9ImVkaXRvci1mb3JtLWludGVncmF0aW9uIgogICAgICAgICAgICBsYWJlbD0iQXJ0aWNsZSBDb250ZW50IiAKICAgICAgICAgICAgZGVzY3JpcHRpb249IldyaXRlIHlvdXIgYXJ0aWNsZSBjb250ZW50IGhlcmUiCiAgICAgICAgICAgIHJlcXVpcmVkPSJ0cnVlIgogICAgICAgICAgICBvdXRwdXRGb3JtYXQ9Im1hcmtkb3duIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10YWdzCiAgICAgICAgICAgIGxhYmVsPSJUYWdzIgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iQWRkIHJlbGV2YW50IHRhZ3MgZm9yIHlvdXIgYXJ0aWNsZSIKICAgICAgICAgID48L2RlZXMtaW5wdXQtdGFncz4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjguIFx1ezFGOUU5fSBQcm9ncmFtbWF0aWMgQmxvY2sgQ3JlYXRpb24ifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgQ3JlYXRlIGNvbnRlbnQgcHJvZ3JhbW1hdGljYWxseSB1c2luZyB0aGUgYmxvY2sgQVBJIGZvciBkeW5hbWljIGRvY3VtZW50IGdlbmVyYXRpb24uCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcKICAgICAgICAgIGlkPSJlZGl0b3ItcHJvZ3JhbW1hdGljIgogICAgICAgICAgbGFiZWw9IlByb2dyYW1tYXRpY2FsbHkgR2VuZXJhdGVkIENvbnRlbnQiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhpcyBjb250ZW50IHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBpbXBvcnRCbG9ja3MgQVBJIgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWdlbmVyYXRlLXJlcG9ydCIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgR2VuZXJhdGUgUmVwb3J0CiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWdlbmVyYXRlLXJlY2lwZSIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgR2VuZXJhdGUgUmVjaXBlCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWNsZWFyLWVkaXRvciIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgQ2xlYXIgRWRpdG9yCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjkuIFx1ezFGNEU0fSBFeHBvcnQvSW1wb3J0IEZlYXR1cmVzIn0+CiAgICAgICAgPHAgY2xhc3M9InBhbmVsLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIFRoZSBXWVNJV1lHIGVkaXRvciBwcm92aWRlcyBtdWx0aXBsZSBleHBvcnQgZm9ybWF0cyBhbmQgbG9zc2xlc3Mgc2F2ZS9yZXN0b3JlIGNhcGFiaWxpdGllcyBmb3IgbWF4aW11bSBmbGV4aWJpbGl0eS4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZXhwb3J0LWluZm8tZ3JpZCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJleHBvcnQtaW5mby1jYXJkIGJsb2NrcyI+CiAgICAgICAgICAgIDxzdHJvbmc+TG9zc2xlc3MgQmxvY2tzPC9zdHJvbmc+CiAgICAgICAgICAgIDxwPkV4cG9ydCBhbmQgaW1wb3J0IHJhdyBibG9jayBzdHJ1Y3R1cmUgZm9yIHBlcmZlY3Qgcm91bmQtdHJpcCBlZGl0aW5nPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJleHBvcnQtaW5mby1jYXJkIGh0bWwiPgogICAgICAgICAgICA8c3Ryb25nPkhUTUwgRXhwb3J0PC9zdHJvbmc+CiAgICAgICAgICAgIDxwPkdldCBjbGVhbiwgc2VtYW50aWMgSFRNTCByZWdhcmRsZXNzIG9mIG91dHB1dCBmb3JtYXQgc2V0dGluZzwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZXhwb3J0LWluZm8tY2FyZCBtYXJrZG93biI+CiAgICAgICAgICAgIDxzdHJvbmc+TWFya2Rvd24gRXhwb3J0PC9zdHJvbmc+CiAgICAgICAgICAgIDxwPkV4cG9ydCBhcyBNYXJrZG93biBmb3IgZG9jcywgUkVBRE1FcywgYW5kIHN0YXRpYyBzaXRlczwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZXhwb3J0LWluZm8tY2FyZCBzdGF0ZSI+CiAgICAgICAgICAgIDxzdHJvbmc+U3RhdGUgTWFuYWdlbWVudDwvc3Ryb25nPgogICAgICAgICAgICA8cD5TYXZlIGFuZCByZXN0b3JlIGNvbXBsZXRlIGVkaXRvciBzdGF0ZSBpbmNsdWRpbmcgc2V0dGluZ3M8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC13eXNpd3lnCiAgICAgICAgICBpZD0iZWRpdG9yLWV4cG9ydCIKICAgICAgICAgIGxhYmVsPSJFeHBvcnQgRGVtbyBFZGl0b3IiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVHJ5IHRoZSBleHBvcnQgYnV0dG9ucyBiZWxvdyB0byBzZWUgZGlmZmVyZW50IG91dHB1dCBmb3JtYXRzIgogICAgICAgICAgdmFsdWU9IjxoMT5Tb2Z0d2FyZSBSZWxlYXNlIE5vdGVzPC9oMT48cD48c3Ryb25nPlZlcnNpb24gMi41LjA8L3N0cm9uZz4gLSBSZWxlYXNlZCBEZWNlbWJlciAxNSwgMjAyNDwvcD48aDI+8J+OiSBOZXcgRmVhdHVyZXM8L2gyPjx1bD48bGk+QWRkZWQgZGFyayBtb2RlIHN1cHBvcnQgYWNyb3NzIGFsbCBjb21wb25lbnRzPC9saT48bGk+SW1wbGVtZW50ZWQgcmVhbC10aW1lIGNvbGxhYm9yYXRpb24gZmVhdHVyZXM8L2xpPjxsaT5OZXcgZGFzaGJvYXJkIGFuYWx5dGljcyB3aWRnZXRzPC9saT48bGk+RXhwb3J0IGZ1bmN0aW9uYWxpdHkgZm9yIGFsbCByZXBvcnQgdHlwZXM8L2xpPjwvdWw+PGgyPvCfkJsgQnVnIEZpeGVzPC9oMj48dWw+PGxpPkZpeGVkIG1lbW9yeSBsZWFrIGluIGRhdGEgcHJvY2Vzc2luZyBtb2R1bGU8L2xpPjxsaT5SZXNvbHZlZCBhdXRoZW50aWNhdGlvbiB0aW1lb3V0IGlzc3VlczwvbGk+PGxpPkNvcnJlY3RlZCB0aW1lem9uZSBoYW5kbGluZyBpbiBzY2hlZHVsZWQgdGFza3M8L2xpPjwvdWw+PGgyPuKaoSBQZXJmb3JtYW5jZSBJbXByb3ZlbWVudHM8L2gyPjxibG9ja3F1b3RlPlBhZ2UgbG9hZCB0aW1lcyByZWR1Y2VkIGJ5IDQwJSB0aHJvdWdoIGxhenkgbG9hZGluZyBhbmQgY29kZSBzcGxpdHRpbmc8L2Jsb2NrcXVvdGU+PGgyPvCflKcgVGVjaG5pY2FsIERldGFpbHM8L2gyPjxwcmU+PGNvZGU+Ly8gTmV3IEFQSSBlbmRwb2ludCBmb3IgYmF0Y2ggb3BlcmF0aW9ucwpQT1NUIC9hcGkvdjIvYmF0Y2gKewogICZxdW90O29wZXJhdGlvbnMmcXVvdDs6IFsKICAgIHsgJnF1b3Q7bWV0aG9kJnF1b3Q7OiAmcXVvdDtHRVQmcXVvdDssICZxdW90O3BhdGgmcXVvdDs6ICZxdW90Oy91c2Vycy8xMjMmcXVvdDsgfSwKICAgIHsgJnF1b3Q7bWV0aG9kJnF1b3Q7OiAmcXVvdDtQVVQmcXVvdDssICZxdW90O3BhdGgmcXVvdDs6ICZxdW90Oy9zZXR0aW5ncyZxdW90OywgJnF1b3Q7Ym9keSZxdW90Ozogey4uLn0gfQogIF0KfTwvY29kZT48L3ByZT48aDI+8J+SoSBNaWdyYXRpb24gR3VpZGU8L2gyPjxvbD48bGk+VXBkYXRlIHlvdXIgZGVwZW5kZW5jaWVzIHRvIHRoZSBsYXRlc3QgdmVyc2lvbnM8L2xpPjxsaT5SdW4gZGF0YWJhc2UgbWlncmF0aW9uczogPGNvZGU+bnBtIHJ1biBtaWdyYXRlPC9jb2RlPjwvbGk+PGxpPkNsZWFyIGNhY2hlOiA8Y29kZT5ucG0gcnVuIGNhY2hlOmNsZWFyPC9jb2RlPjwvbGk+PGxpPlJlc3RhcnQgYWxsIHNlcnZpY2VzPC9saT48L29sPjxocj48cD5Gb3IgcXVlc3Rpb25zIG9yIGlzc3VlcywgcGxlYXNlIGNvbnRhY3QgdGhlIGRldmVsb3BtZW50IHRlYW0gb3IgZmlsZSBhIHRpY2tldCBpbiBvdXIgaXNzdWUgdHJhY2tlci48L3A+IgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWV4cG9ydC1ibG9ja3MiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+CiAgICAgICAgICAgIEV4cG9ydCBCbG9ja3MKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tZXhwb3J0LWh0bWwiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+CiAgICAgICAgICAgIEV4cG9ydCBhcyBIVE1MCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWV4cG9ydC1tYXJrZG93biIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgRXhwb3J0IGFzIE1hcmtkb3duCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXNhdmUtc3RhdGUiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+CiAgICAgICAgICAgIFNhdmUgU3RhdGUKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tcmVzdG9yZS1zdGF0ZSIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgUmVzdG9yZSBTdGF0ZQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5zaG9ydGN1dHMuanMKdmFyIFd5c2l3eWdTaG9ydGN1dHMgPSBjbGFzcyB7CiAgc3RhdGljIEhFQURJTkdfUEFUVEVSTlMgPSBbCiAgICB7IHBhdHRlcm46IC9eI1tcc1x1MDBBMF0kLywgdHlwZTogImhlYWRpbmctMSIgfSwKICAgIHsgcGF0dGVybjogL14jI1tcc1x1MDBBMF0kLywgdHlwZTogImhlYWRpbmctMiIgfSwKICAgIHsgcGF0dGVybjogL14jIyNbXHNcdTAwQTBdJC8sIHR5cGU6ICJoZWFkaW5nLTMiIH0KICBdOwogIHN0YXRpYyBMSVNUX1BBVFRFUk5TID0gWwogICAgeyBwYXR0ZXJuOiAvXlsqLV1bXHNcdTAwQTBdJC8sIHR5cGU6ICJidWxsZXQiIH0sCiAgICB7IHBhdHRlcm46IC9eKFxkKylcLltcc1x1MDBBMF0kLywgdHlwZTogIm9yZGVyZWQiIH0sCiAgICB7IHBhdHRlcm46IC9eKFxkKylcKVtcc1x1MDBBMF0kLywgdHlwZTogIm9yZGVyZWQiIH0KICBdOwogIHN0YXRpYyBRVU9URV9QQVRURVJOID0gL14+W1xzXHUwMEEwXSQvOwogIHN0YXRpYyBDT0RFX1BBVFRFUk4gPSAvXmBgYCQvOwogIHN0YXRpYyBESVZJREVSX1BBVFRFUk5TID0gWyItLS0iLCAiKioqIiwgIl9fXyJdOwogIHN0YXRpYyBjaGVja0hlYWRpbmdTaG9ydGN1dChjb250ZW50MykgewogICAgZm9yIChjb25zdCB7IHBhdHRlcm4sIHR5cGU6IHR5cGU1IH0gb2YgdGhpcy5IRUFESU5HX1BBVFRFUk5TKSB7CiAgICAgIGlmIChwYXR0ZXJuLnRlc3QoY29udGVudDMpKSB7CiAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZTUgfTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIHN0YXRpYyBjaGVja0xpc3RTaG9ydGN1dChjb250ZW50MykgewogICAgZm9yIChjb25zdCB7IHBhdHRlcm4sIHR5cGU6IHR5cGU1IH0gb2YgdGhpcy5MSVNUX1BBVFRFUk5TKSB7CiAgICAgIGlmIChwYXR0ZXJuLnRlc3QoY29udGVudDMpKSB7CiAgICAgICAgcmV0dXJuIHsgdHlwZTogImxpc3QiLCBsaXN0VHlwZTogdHlwZTUgfTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIHN0YXRpYyBjaGVja1F1b3RlU2hvcnRjdXQoY29udGVudDMpIHsKICAgIHJldHVybiB0aGlzLlFVT1RFX1BBVFRFUk4udGVzdChjb250ZW50Myk7CiAgfQogIHN0YXRpYyBjaGVja0NvZGVTaG9ydGN1dChjb250ZW50MykgewogICAgcmV0dXJuIHRoaXMuQ09ERV9QQVRURVJOLnRlc3QoY29udGVudDMpOwogIH0KICBzdGF0aWMgY2hlY2tEaXZpZGVyU2hvcnRjdXQoY29udGVudDMpIHsKICAgIHJldHVybiB0aGlzLkRJVklERVJfUEFUVEVSTlMuaW5jbHVkZXMoY29udGVudDMpOwogIH0KICBzdGF0aWMgZ2V0U2xhc2hNZW51SXRlbXMoKSB7CiAgICByZXR1cm4gWwogICAgICB7IHR5cGU6ICJwYXJhZ3JhcGgiLCBsYWJlbDogIlBhcmFncmFwaCIsIGljb246ICJsdWNpZGU6cGlsY3JvdyIgfSwKICAgICAgeyB0eXBlOiAiaGVhZGluZy0xIiwgbGFiZWw6ICJIZWFkaW5nIDEiLCBpY29uOiAibHVjaWRlOmhlYWRpbmcxIiB9LAogICAgICB7IHR5cGU6ICJoZWFkaW5nLTIiLCBsYWJlbDogIkhlYWRpbmcgMiIsIGljb246ICJsdWNpZGU6aGVhZGluZzIiIH0sCiAgICAgIHsgdHlwZTogImhlYWRpbmctMyIsIGxhYmVsOiAiSGVhZGluZyAzIiwgaWNvbjogImx1Y2lkZTpoZWFkaW5nMyIgfSwKICAgICAgeyB0eXBlOiAicXVvdGUiLCBsYWJlbDogIlF1b3RlIiwgaWNvbjogImx1Y2lkZTpxdW90ZSIgfSwKICAgICAgeyB0eXBlOiAiY29kZSIsIGxhYmVsOiAiQ29kZSBCbG9jayIsIGljb246ICJsdWNpZGU6ZmlsZUNvZGUiIH0sCiAgICAgIHsgdHlwZTogImxpc3QiLCBsYWJlbDogIkJ1bGxldCBMaXN0IiwgaWNvbjogImx1Y2lkZTpsaXN0IiB9LAogICAgICB7IHR5cGU6ICJpbWFnZSIsIGxhYmVsOiAiSW1hZ2UiLCBpY29uOiAibHVjaWRlOmltYWdlIiB9LAogICAgICB7IHR5cGU6ICJkaXZpZGVyIiwgbGFiZWw6ICJEaXZpZGVyIiwgaWNvbjogImx1Y2lkZTptaW51cyIgfSwKICAgICAgeyB0eXBlOiAieW91dHViZSIsIGxhYmVsOiAiWW91VHViZSIsIGljb246ICJsdWNpZGU6eW91dHViZSIgfSwKICAgICAgeyB0eXBlOiAibWFya2Rvd24iLCBsYWJlbDogIk1hcmtkb3duIiwgaWNvbjogImx1Y2lkZTpmaWxlVGV4dCIgfSwKICAgICAgeyB0eXBlOiAiaHRtbCIsIGxhYmVsOiAiSFRNTCIsIGljb246ICJsdWNpZGU6Y29kZSIgfSwKICAgICAgeyB0eXBlOiAiYXR0YWNobWVudCIsIGxhYmVsOiAiRmlsZSBBdHRhY2htZW50IiwgaWNvbjogImx1Y2lkZTpwYXBlcmNsaXAiIH0KICAgIF07CiAgfQogIHN0YXRpYyBnZW5lcmF0ZUJsb2NrSWQoKSB7CiAgICByZXR1cm4gYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YDsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2RlZXMtc2xhc2gtbWVudS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2RlZXNfaWNvbigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU2MSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNjIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNTbGFzaE1lbnUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNsYXNoLW1lbnUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF92aXNpYmxlX2RlY29yYXRvcnM7CiAgbGV0IF92aXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZGVjb3JhdG9yczsKICBsZXQgX3Bvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlcl9kZWNvcmF0b3JzOwogIGxldCBfZmlsdGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsdGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZEluZGV4X2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZEluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVudVpJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfbWVudVpJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1NsYXNoTWVudTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92aXNpYmxlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9wb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZmlsdGVyX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9zZWxlY3RlZEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9tZW51WkluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTYxKHRoaXMsIG51bGwsIF92aXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZpc2libGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmlzaWJsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92aXNpYmxlX2luaXRpYWxpemVycywgX3Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MSh0aGlzLCBudWxsLCBfcG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicG9zaXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wb3NpdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wb3NpdGlvbl9pbml0aWFsaXplcnMsIF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYxKHRoaXMsIG51bGwsIF9maWx0ZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWx0ZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsdGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsdGVyX2luaXRpYWxpemVycywgX2ZpbHRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYxKHRoaXMsIG51bGwsIF9zZWxlY3RlZEluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWRJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZEluZGV4X2luaXRpYWxpemVycywgX3NlbGVjdGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MSh0aGlzLCBudWxsLCBfbWVudVpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51WkluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZW51WkluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1lbnVaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVaSW5kZXggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWVudVpJbmRleF9pbml0aWFsaXplcnMsIF9tZW51WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU2xhc2hNZW51MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgaW5zdGFuY2U7CiAgICBzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7CiAgICAgIGlmICghRGVlc1NsYXNoTWVudTIuaW5zdGFuY2UpIHsKICAgICAgICBEZWVzU2xhc2hNZW51Mi5pbnN0YW5jZSA9IG5ldyBEZWVzU2xhc2hNZW51MigpOwogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoRGVlc1NsYXNoTWVudTIuaW5zdGFuY2UpOwogICAgICB9CiAgICAgIHJldHVybiBEZWVzU2xhc2hNZW51Mi5pbnN0YW5jZTsKICAgIH0KICAgICN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF92aXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgZ2V0IHZpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Mih0aGlzLCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjIodGhpcywgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgeyB4OiAwLCB5OiAwIH0pKTsKICAgIGdldCBwb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcG9zaXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZmlsdGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Mih0aGlzLCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF9maWx0ZXJfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGZpbHRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2ZpbHRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZpbHRlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsdGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjIodGhpcywgX2ZpbHRlcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjIodGhpcywgX3NlbGVjdGVkSW5kZXhfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgc2VsZWN0ZWRJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZEluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWVudVpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjIodGhpcywgX3NlbGVjdGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF9tZW51WkluZGV4X2luaXRpYWxpemVycywgMWUzKSk7CiAgICBnZXQgbWVudVpJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21lbnVaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtZW51WkluZGV4KHZhbHVlMikgewogICAgICB0aGlzLiNtZW51WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjYWxsYmFjayA9IChfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF9tZW51WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzA5MDkwYiIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA2KTsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgICAgbWluLXdpZHRoOiAyMjBweDsKICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGFuaW1hdGlvbjogZmFkZUluU2NhbGUgMC4xNXMgZWFzZS1vdXQ7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgZmFkZUluU2NhbGUgewogICAgICAgIGZyb20gewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCkgdHJhbnNsYXRlWSgtMnB4KTsKICAgICAgICB9CiAgICAgICAgdG8gewogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlWSgwKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0gewogICAgICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW06aG92ZXIsCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0gLmljb24gewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW06aG92ZXIgLmljb24sCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgLmljb24gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICBpZiAoIXRoaXMudmlzaWJsZSkKICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgdGhpcy5zdHlsZS56SW5kZXggPSB0aGlzLm1lbnVaSW5kZXgudG9TdHJpbmcoKTsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gdGhpcy5nZXRGaWx0ZXJlZE1lbnVJdGVtcygpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9InNsYXNoLW1lbnUiIAogICAgICAgIHN0eWxlPSJsZWZ0OiAke3RoaXMucG9zaXRpb24ueH1weDsgdG9wOiAke3RoaXMucG9zaXRpb24ueX1weDsiCiAgICAgICAgdGFiaW5kZXg9Ii0xIgogICAgICAgIGRhdGEtbWVudS10eXBlPSJzbGFzaCIKICAgICAgPgogICAgICAgICR7bWVudUl0ZW1zLm1hcCgoaXRlbSwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJzbGFzaC1tZW51LWl0ZW0gJHtpbmRleDIgPT09IHRoaXMuc2VsZWN0ZWRJbmRleCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgIGRhdGEtaXRlbS10eXBlPSIke2l0ZW0udHlwZX0iCiAgICAgICAgICAgIGRhdGEtaXRlbS1pbmRleD0iJHtpbmRleDJ9IgogICAgICAgICAgPgogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJpY29uIiAuaWNvbj0iJHtpdGVtLmljb259IiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8c3Bhbj4ke2l0ZW0ubGFiZWx9PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGdldEZpbHRlcmVkTWVudUl0ZW1zKCkgewogICAgICBjb25zdCBhbGxJdGVtcyA9IFd5c2l3eWdTaG9ydGN1dHMuZ2V0U2xhc2hNZW51SXRlbXMoKTsKICAgICAgcmV0dXJuIGFsbEl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gdGhpcy5maWx0ZXIgPT09ICIiIHx8IGl0ZW0ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmZpbHRlci50b0xvd2VyQ2FzZSgpKSk7CiAgICB9CiAgICBzZWxlY3RJdGVtKHR5cGU1KSB7CiAgICAgIGlmICh0aGlzLmNhbGxiYWNrKSB7CiAgICAgICAgdGhpcy5jYWxsYmFjayh0eXBlNSk7CiAgICAgIH0KICAgICAgdGhpcy5oaWRlKCk7CiAgICB9CiAgICBzaG93KHBvc2l0aW9uMywgY2FsbGJhY2spIHsKICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uMzsKICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgICB0aGlzLmZpbHRlciA9ICIiOwogICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAwOwogICAgICB0aGlzLm1lbnVaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMsIHRoaXMubWVudVpJbmRleCk7CiAgICAgIHRoaXMuc3R5bGUuekluZGV4ID0gdGhpcy5tZW51WkluZGV4LnRvU3RyaW5nKCk7CiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAgICB9CiAgICBoaWRlKCkgewogICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTsKICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7CiAgICAgIHRoaXMuZmlsdGVyID0gIiI7CiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnVucmVnaXN0ZXIodGhpcyk7CiAgICB9CiAgICB1cGRhdGVGaWx0ZXIoZmlsdGVyMikgewogICAgICB0aGlzLmZpbHRlciA9IGZpbHRlcjI7CiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7CiAgICB9CiAgICBuYXZpZ2F0ZShkaXJlY3Rpb24pIHsKICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEZpbHRlcmVkTWVudUl0ZW1zKCk7CiAgICAgIGlmIChkaXJlY3Rpb24gPT09ICJkb3duIikgewogICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9ICh0aGlzLnNlbGVjdGVkSW5kZXggKyAxKSAlIGl0ZW1zLmxlbmd0aDsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkSW5kZXggPT09IDAgPyBpdGVtcy5sZW5ndGggLSAxIDogdGhpcy5zZWxlY3RlZEluZGV4IC0gMTsKICAgICAgfQogICAgfQogICAgc2VsZWN0Q3VycmVudCgpIHsKICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEZpbHRlcmVkTWVudUl0ZW1zKCk7CiAgICAgIGlmIChpdGVtc1t0aGlzLnNlbGVjdGVkSW5kZXhdKSB7CiAgICAgICAgdGhpcy5zZWxlY3RJdGVtKGl0ZW1zW3RoaXMuc2VsZWN0ZWRJbmRleF0udHlwZSk7CiAgICAgIH0KICAgIH0KICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCAoZTExKSA9PiB7CiAgICAgICAgY29uc3QgbWVudSA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnNsYXNoLW1lbnUiKTsKICAgICAgICBpZiAobWVudSAmJiBtZW51LmNvbnRhaW5zKGUxMS50YXJnZXQpKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLnNoYWRvd1Jvb3Q/LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgIGNvbnN0IHRhcmdldCA9IGUxMS50YXJnZXQ7CiAgICAgICAgY29uc3QgbWVudUl0ZW0gPSB0YXJnZXQuY2xvc2VzdCgiLnNsYXNoLW1lbnUtaXRlbSIpOwogICAgICAgIGlmIChtZW51SXRlbSkgewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICBjb25zdCBpdGVtVHlwZSA9IG1lbnVJdGVtLmdldEF0dHJpYnV0ZSgiZGF0YS1pdGVtLXR5cGUiKTsKICAgICAgICAgIGlmIChpdGVtVHlwZSkgewogICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oaXRlbVR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCB0YXJnZXQgPSBlMTEudGFyZ2V0OwogICAgICAgIGNvbnN0IG1lbnVJdGVtID0gdGFyZ2V0LmNsb3Nlc3QoIi5zbGFzaC1tZW51LWl0ZW0iKTsKICAgICAgICBpZiAobWVudUl0ZW0pIHsKICAgICAgICAgIGNvbnN0IGluZGV4MiA9IHBhcnNlSW50KG1lbnVJdGVtLmdldEF0dHJpYnV0ZSgiZGF0YS1pdGVtLWluZGV4IikgfHwgIjAiLCAxMCk7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDI7CiAgICAgICAgfQogICAgICB9LCB0cnVlKTsKICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCBtZW51ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2xhc2gtbWVudSIpOwogICAgICAgIGlmIChtZW51ICYmIG1lbnUuY29udGFpbnMoZTExLnRhcmdldCkpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIH0KICAgICAgfSwgdHJ1ZSk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczYyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU2xhc2hNZW51MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuc2VsZWN0aW9uLmpzCnZhciBXeXNpd3lnU2VsZWN0aW9uID0gY2xhc3MgewogIC8qKgogICAqIEdldHMgc2VsZWN0aW9uIGluZm8gdGhhdCB3b3JrcyBhY3Jvc3MgU2hhZG93IERPTSBib3VuZGFyaWVzCiAgICogQHBhcmFtIHNoYWRvd1Jvb3RzIC0gU2hhZG93IHJvb3RzIHRvIGluY2x1ZGUgaW4gdGhlIHNlbGVjdGlvbiBzZWFyY2gKICAgKi8KICBzdGF0aWMgZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cykgewogICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgY29uc29sZS5sb2coIld5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyAtIHNlbGVjdGlvbjoiLCBzZWxlY3Rpb24sICJyYW5nZUNvdW50OiIsIHNlbGVjdGlvbj8ucmFuZ2VDb3VudCk7CiAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgcmV0dXJuIG51bGw7CiAgICBpZiAoImdldENvbXBvc2VkUmFuZ2VzIiBpbiBzZWxlY3Rpb24gJiYgdHlwZW9mIHNlbGVjdGlvbi5nZXRDb21wb3NlZFJhbmdlcyA9PT0gImZ1bmN0aW9uIikgewogICAgICBjb25zb2xlLmxvZygiVXNpbmcgZ2V0Q29tcG9zZWRSYW5nZXMgd2l0aCIsIHNoYWRvd1Jvb3RzLmxlbmd0aCwgInNoYWRvdyByb290cyIpOwogICAgICB0cnkgewogICAgICAgIGNvbnN0IHJhbmdlcyA9IHNlbGVjdGlvbi5nZXRDb21wb3NlZFJhbmdlcyh7IHNoYWRvd1Jvb3RzIH0pOwogICAgICAgIGNvbnNvbGUubG9nKCJnZXRDb21wb3NlZFJhbmdlcyByZXR1cm5lZCIsIHJhbmdlcy5sZW5ndGgsICJyYW5nZXMiKTsKICAgICAgICBpZiAocmFuZ2VzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IHJhbmdlc1swXTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyOiByYW5nZTIuc3RhcnRDb250YWluZXIsCiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiByYW5nZTIuc3RhcnRPZmZzZXQsCiAgICAgICAgICAgIGVuZENvbnRhaW5lcjogcmFuZ2UyLmVuZENvbnRhaW5lciwKICAgICAgICAgICAgZW5kT2Zmc2V0OiByYW5nZTIuZW5kT2Zmc2V0LAogICAgICAgICAgICBjb2xsYXBzZWQ6IHJhbmdlMi5jb2xsYXBzZWQKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUud2FybigiZ2V0Q29tcG9zZWRSYW5nZXMgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gZ2V0UmFuZ2VBdDoiLCBlcnJvcik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGNvbnNvbGUubG9nKCJnZXRDb21wb3NlZFJhbmdlcyBub3QgYXZhaWxhYmxlLCB1c2luZyBmYWxsYmFjayIpOwogICAgfQogICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgcmV0dXJuIHsKICAgICAgICBzdGFydENvbnRhaW5lcjogcmFuZ2UyLnN0YXJ0Q29udGFpbmVyLAogICAgICAgIHN0YXJ0T2Zmc2V0OiByYW5nZTIuc3RhcnRPZmZzZXQsCiAgICAgICAgZW5kQ29udGFpbmVyOiByYW5nZTIuZW5kQ29udGFpbmVyLAogICAgICAgIGVuZE9mZnNldDogcmFuZ2UyLmVuZE9mZnNldCwKICAgICAgICBjb2xsYXBzZWQ6IHJhbmdlMi5jb2xsYXBzZWQKICAgICAgfTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICAvKioKICAgKiBDaGVja3MgaWYgYSBzZWxlY3Rpb24gaXMgd2l0aGluIGEgc3BlY2lmaWMgZWxlbWVudCAoY29uc2lkZXJpbmcgU2hhZG93IERPTSkKICAgKi8KICBzdGF0aWMgaXNTZWxlY3Rpb25JbkVsZW1lbnQoZWxlbWVudDQsIHNoYWRvd1Jvb3QpIHsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBzaGFkb3dSb290ID8gdGhpcy5nZXRTZWxlY3Rpb25JbmZvKHNoYWRvd1Jvb3QpIDogdGhpcy5nZXRTZWxlY3Rpb25JbmZvKCk7CiAgICBpZiAoIXNlbGVjdGlvbkluZm8pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBlbGVtZW50NC5jb250YWlucyhzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSB8fCBlbGVtZW50NC5jb250YWlucyhzZWxlY3Rpb25JbmZvLmVuZENvbnRhaW5lcik7CiAgfQogIC8qKgogICAqIEdldHMgdGhlIHNlbGVjdGVkIHRleHQgYWNyb3NzIFNoYWRvdyBET00gYm91bmRhcmllcwogICAqLwogIHN0YXRpYyBnZXRTZWxlY3RlZFRleHQoKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICByZXR1cm4gc2VsZWN0aW9uID8gc2VsZWN0aW9uLnRvU3RyaW5nKCkgOiAiIjsKICB9CiAgLyoqCiAgICogQ3JlYXRlcyBhIHJhbmdlIGZyb20gc2VsZWN0aW9uIGluZm8KICAgKi8KICBzdGF0aWMgY3JlYXRlUmFuZ2VGcm9tSW5mbyhpbmZvKSB7CiAgICBjb25zdCByYW5nZTIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgcmFuZ2UyLnNldFN0YXJ0KGluZm8uc3RhcnRDb250YWluZXIsIGluZm8uc3RhcnRPZmZzZXQpOwogICAgcmFuZ2UyLnNldEVuZChpbmZvLmVuZENvbnRhaW5lciwgaW5mby5lbmRPZmZzZXQpOwogICAgcmV0dXJuIHJhbmdlMjsKICB9CiAgLyoqCiAgICogU2V0cyBzZWxlY3Rpb24gZnJvbSBhIHJhbmdlICh3b3JrcyB3aXRoIFNoYWRvdyBET00pCiAgICovCiAgc3RhdGljIHNldFNlbGVjdGlvbkZyb21SYW5nZShyYW5nZTIpIHsKICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgIGlmIChzZWxlY3Rpb24pIHsKICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UyKTsKICAgIH0KICB9CiAgLyoqCiAgICogR2V0cyBjdXJzb3IgcG9zaXRpb24gcmVsYXRpdmUgdG8gYSBzcGVjaWZpYyBlbGVtZW50CiAgICovCiAgc3RhdGljIGdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KGVsZW1lbnQ0LCAuLi5zaGFkb3dSb290cykgewogICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IHNoYWRvd1Jvb3RzLmxlbmd0aCA+IDAgPyB0aGlzLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpIDogdGhpcy5nZXRTZWxlY3Rpb25JbmZvKCk7CiAgICBpZiAoIXNlbGVjdGlvbkluZm8gfHwgIXNlbGVjdGlvbkluZm8uY29sbGFwc2VkKQogICAgICByZXR1cm4gbnVsbDsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgIHJhbmdlMi5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudDQpOwogICAgICBjb25zdCBpc0NvbnRhaW5lZCA9IHRoaXMuY29udGFpbnNBY3Jvc3NTaGFkb3dET00oZWxlbWVudDQsIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpOwogICAgICBpZiAoaXNDb250YWluZWQpIHsKICAgICAgICByYW5nZTIuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgICAgIGNvbnN0IHBvc2l0aW9uMyA9IHJhbmdlMi50b1N0cmluZygpLmxlbmd0aDsKICAgICAgICByZXR1cm4gcG9zaXRpb24zOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHRleHQ5ID0gZWxlbWVudDQudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uVGV4dCA9IHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgaWYgKHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQgPT09IDApIHsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCA9PT0gc2VsZWN0aW9uVGV4dC5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiB0ZXh0OS5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIGNvbnNvbGUud2FybigiU2VsZWN0aW9uIGNvbnRhaW5lciBub3Qgd2l0aGluIGVsZW1lbnQsIHVzaW5nIHRleHQgbWF0Y2hpbmcgZmFsbGJhY2siKTsKICAgICAgICByZXR1cm4gc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldDsKICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCJGYWlsZWQgdG8gZ2V0IGN1cnNvciBwb3NpdGlvbjoiLCBlcnJvcik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KICAvKioKICAgKiBHZXRzIGN1cnNvciBwb3NpdGlvbiBmcm9tIG1vdXNlIGNvb3JkaW5hdGVzIHdpdGggU2hhZG93IERPTSBzdXBwb3J0CiAgICovCiAgc3RhdGljIGdldEN1cnNvclBvc2l0aW9uRnJvbVBvaW50KHgzLCB5NSwgY29udGFpbmVyLCAuLi5zaGFkb3dSb290cykgewogICAgaWYgKCJjYXJldFBvc2l0aW9uRnJvbVBvaW50IiBpbiBkb2N1bWVudCAmJiBkb2N1bWVudC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KSB7CiAgICAgIGxldCBjYXJldFBvcyA9IG51bGw7CiAgICAgIHRyeSB7CiAgICAgICAgY2FyZXRQb3MgPSBkb2N1bWVudC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KHgzLCB5NSwgLi4uc2hhZG93Um9vdHMpOwogICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICBjYXJldFBvcyA9IGRvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQoeDMsIHk1KTsKICAgICAgfQogICAgICBpZiAoY2FyZXRQb3MgJiYgY29udGFpbmVyLmNvbnRhaW5zKGNhcmV0UG9zLm9mZnNldE5vZGUpKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2Zmc2V0SW5FbGVtZW50KGNhcmV0UG9zLm9mZnNldE5vZGUsIGNhcmV0UG9zLm9mZnNldCwgY29udGFpbmVyKTsKICAgICAgfQogICAgfQogICAgaWYgKCJjYXJldFJhbmdlRnJvbVBvaW50IiBpbiBkb2N1bWVudCkgewogICAgICBjb25zdCByYW5nZTIgPSBkb2N1bWVudC5jYXJldFJhbmdlRnJvbVBvaW50KHgzLCB5NSk7CiAgICAgIGlmIChyYW5nZTIgJiYgY29udGFpbmVyLmNvbnRhaW5zKHJhbmdlMi5zdGFydENvbnRhaW5lcikpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRPZmZzZXRJbkVsZW1lbnQocmFuZ2UyLnN0YXJ0Q29udGFpbmVyLCByYW5nZTIuc3RhcnRPZmZzZXQsIGNvbnRhaW5lcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICAvKioKICAgKiBIZWxwZXIgdG8gZ2V0IHRoZSB0b3RhbCBjaGFyYWN0ZXIgb2Zmc2V0IG9mIGEgcG9zaXRpb24gd2l0aGluIGFuIGVsZW1lbnQKICAgKi8KICBzdGF0aWMgZ2V0T2Zmc2V0SW5FbGVtZW50KG5vZGUyLCBvZmZzZXQsIGNvbnRhaW5lcikgewogICAgbGV0IHRvdGFsT2Zmc2V0ID0gMDsKICAgIGxldCBmb3VuZCA9IGZhbHNlOwogICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihjb250YWluZXIsIE5vZGVGaWx0ZXIuU0hPV19URVhULCBudWxsKTsKICAgIGxldCB0ZXh0Tm9kZTsKICAgIHdoaWxlICh0ZXh0Tm9kZSA9IHdhbGtlci5uZXh0Tm9kZSgpKSB7CiAgICAgIGlmICh0ZXh0Tm9kZSA9PT0gbm9kZTIpIHsKICAgICAgICB0b3RhbE9mZnNldCArPSBvZmZzZXQ7CiAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgewogICAgICAgIHRvdGFsT2Zmc2V0ICs9IHRleHROb2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZvdW5kID8gdG90YWxPZmZzZXQgOiAwOwogIH0KICAvKioKICAgKiBTZXRzIGN1cnNvciBwb3NpdGlvbiBpbiBhbiBlbGVtZW50CiAgICovCiAgc3RhdGljIHNldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0LCBwb3NpdGlvbjMpIHsKICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZWxlbWVudDQsIE5vZGVGaWx0ZXIuU0hPV19URVhULCBudWxsKTsKICAgIGxldCBjdXJyZW50UG9zaXRpb24gPSAwOwogICAgbGV0IHRhcmdldE5vZGUgPSBudWxsOwogICAgbGV0IHRhcmdldE9mZnNldCA9IDA7CiAgICB3aGlsZSAod2Fsa2VyLm5leHROb2RlKCkpIHsKICAgICAgY29uc3Qgbm9kZTIgPSB3YWxrZXIuY3VycmVudE5vZGU7CiAgICAgIGNvbnN0IG5vZGVMZW5ndGggPSBub2RlMi50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDA7CiAgICAgIGlmIChjdXJyZW50UG9zaXRpb24gKyBub2RlTGVuZ3RoID49IHBvc2l0aW9uMykgewogICAgICAgIHRhcmdldE5vZGUgPSBub2RlMjsKICAgICAgICB0YXJnZXRPZmZzZXQgPSBwb3NpdGlvbjMgLSBjdXJyZW50UG9zaXRpb247CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY3VycmVudFBvc2l0aW9uICs9IG5vZGVMZW5ndGg7CiAgICB9CiAgICBpZiAodGFyZ2V0Tm9kZSkgewogICAgICBjb25zdCByYW5nZTIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICByYW5nZTIuc2V0U3RhcnQodGFyZ2V0Tm9kZSwgdGFyZ2V0T2Zmc2V0KTsKICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgICB0aGlzLnNldFNlbGVjdGlvbkZyb21SYW5nZShyYW5nZTIpOwogICAgfQogIH0KICAvKioKICAgKiBDaGVjayBpZiBhIG5vZGUgaXMgY29udGFpbmVkIHdpdGhpbiBhbiBlbGVtZW50IGFjcm9zcyBTaGFkb3cgRE9NIGJvdW5kYXJpZXMKICAgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIGVsZW1lbnQuY29udGFpbnMoKSBkb2Vzbid0IHdvcmsgYWNyb3NzIFNoYWRvdyBET00KICAgKi8KICBzdGF0aWMgY29udGFpbnNBY3Jvc3NTaGFkb3dET00oY29udGFpbmVyLCBub2RlMikgewogICAgaWYgKCFjb250YWluZXIgfHwgIW5vZGUyKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgY3VycmVudCA9IG5vZGUyOwogICAgd2hpbGUgKGN1cnJlbnQpIHsKICAgICAgaWYgKGN1cnJlbnQgPT09IGNvbnRhaW5lcikgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlmIChjdXJyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUgJiYgY3VycmVudC5ob3N0KSB7CiAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGN1cnJlbnQ7CiAgICAgICAgaWYgKHNoYWRvd1Jvb3QuY29udGFpbnMoY29udGFpbmVyKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBjdXJyZW50ID0gc2hhZG93Um9vdC5ob3N0OwogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudE5vZGU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuZm9ybWF0dGluZy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgV3lzaXd5Z0Zvcm1hdHRpbmcgPSBjbGFzcyB7CiAgc3RhdGljIGZvcm1hdEJ1dHRvbnMgPSBbCiAgICB7IGNvbW1hbmQ6ICJib2xkIiwgaWNvbjogIkIiLCBsYWJlbDogIkJvbGQiLCBzaG9ydGN1dDogIlx1MjMxOEIiIH0sCiAgICB7IGNvbW1hbmQ6ICJpdGFsaWMiLCBpY29uOiAiSSIsIGxhYmVsOiAiSXRhbGljIiwgc2hvcnRjdXQ6ICJcdTIzMThJIiB9LAogICAgeyBjb21tYW5kOiAidW5kZXJsaW5lIiwgaWNvbjogIlUiLCBsYWJlbDogIlVuZGVybGluZSIsIHNob3J0Y3V0OiAiXHUyMzE4VSIgfSwKICAgIHsgY29tbWFuZDogInN0cmlrZVRocm91Z2giLCBpY29uOiAiU1x1MDMzNiIsIGxhYmVsOiAiU3RyaWtldGhyb3VnaCIgfSwKICAgIHsgY29tbWFuZDogImNvZGUiLCBpY29uOiAieyB9IiwgbGFiZWw6ICJJbmxpbmUgQ29kZSIgfSwKICAgIHsgY29tbWFuZDogImxpbmsiLCBpY29uOiAiXHV7MUY1MTd9IiwgbGFiZWw6ICJMaW5rIiwgc2hvcnRjdXQ6ICJcdTIzMThLIiB9CiAgXTsKICBzdGF0aWMgcmVuZGVyRm9ybWF0dGluZ01lbnUocG9zaXRpb24zLCBvbkZvcm1hdCkgewogICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IAogICAgICAgIGNsYXNzPSJmb3JtYXR0aW5nLW1lbnUiIAogICAgICAgIHN0eWxlPSJ0b3A6ICR7cG9zaXRpb24zLnl9cHg7IGxlZnQ6ICR7cG9zaXRpb24zLnh9cHg7IgogICAgICAgIEBtb3VzZWRvd249IiR7KGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgfX0iCiAgICAgICAgQGNsaWNrPSIkeyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0iCiAgICAgID4KICAgICAgICAke3RoaXMuZm9ybWF0QnV0dG9ucy5tYXAoKGJ1dHRvbikgPT4gYjJgCiAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICBjbGFzcz0iZm9ybWF0LWJ1dHRvbiAke2J1dHRvbi5jb21tYW5kfSIKICAgICAgICAgICAgQGNsaWNrPSIkeygpID0+IG9uRm9ybWF0KGJ1dHRvbi5jb21tYW5kKX0iCiAgICAgICAgICAgIHRpdGxlPSIke2J1dHRvbi5sYWJlbH0ke2J1dHRvbi5zaG9ydGN1dCA/IGAgKCR7YnV0dG9uLnNob3J0Y3V0fSlgIDogIiJ9IgogICAgICAgICAgPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iJHtidXR0b24uY29tbWFuZCA9PT0gImNvZGUiID8gImNvZGUtaWNvbiIgOiAiIn0iPiR7YnV0dG9uLmljb259PC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgc3RhdGljIGFwcGx5Rm9ybWF0KGNvbW1hbmQsIHZhbHVlMiwgcmFuZ2UyLCBzaGFkb3dSb290cykgewogICAgbGV0IHdvcmtpbmdSYW5nZTsKICAgIGlmIChyYW5nZTIpIHsKICAgICAgd29ya2luZ1JhbmdlID0gcmFuZ2UyOwogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHdvcmtpbmdSYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgfQogICAgc3dpdGNoIChjb21tYW5kKSB7CiAgICAgIGNhc2UgImJvbGQiOgogICAgICAgIHRoaXMud3JhcFNlbGVjdGlvbih3b3JraW5nUmFuZ2UsICJzdHJvbmciKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiaXRhbGljIjoKICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24od29ya2luZ1JhbmdlLCAiZW0iKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAidW5kZXJsaW5lIjoKICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24od29ya2luZ1JhbmdlLCAidSIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJzdHJpa2VUaHJvdWdoIjoKICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24od29ya2luZ1JhbmdlLCAicyIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJjb2RlIjoKICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24od29ya2luZ1JhbmdlLCAiY29kZSIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJsaW5rIjoKICAgICAgICBpZiAoIXZhbHVlMikgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb25XaXRoTGluayh3b3JraW5nUmFuZ2UsIHZhbHVlMik7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoc2hhZG93Um9vdHMgJiYgc2hhZG93Um9vdHMubGVuZ3RoID4gMCkgewogICAgICBXeXNpd3lnU2VsZWN0aW9uLnNldFNlbGVjdGlvbkZyb21SYW5nZSh3b3JraW5nUmFuZ2UpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBpZiAoc2VsZWN0aW9uKSB7CiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSh3b3JraW5nUmFuZ2UpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgc3RhdGljIHdyYXBTZWxlY3Rpb24ocmFuZ2UyLCB0YWdOYW1lKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgcmV0dXJuOwogICAgY29uc3QgaGFzRm9ybWF0dGluZyA9IHRoaXMuc2VsZWN0aW9uQ29udGFpbnNUYWcocmFuZ2UyLCB0YWdOYW1lKTsKICAgIGlmIChoYXNGb3JtYXR0aW5nKSB7CiAgICAgIHRoaXMucmVtb3ZlVGFnRnJvbVNlbGVjdGlvbihyYW5nZTIsIHRhZ05hbWUpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgY29udGVudHMgPSByYW5nZTIuZXh0cmFjdENvbnRlbnRzKCk7CiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChjb250ZW50cyk7CiAgICAgICAgcmFuZ2UyLmluc2VydE5vZGUod3JhcHBlcik7CiAgICAgICAgcmFuZ2UyLnNlbGVjdE5vZGVDb250ZW50cyh3cmFwcGVyKTsKICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byB3cmFwIHNlbGVjdGlvbjoiLCBlMTEpOwogICAgICB9CiAgICB9CiAgfQogIC8qKgogICAqIENoZWNrIGlmIHRoZSBzZWxlY3Rpb24gY29udGFpbnMgb3IgaXMgd2l0aGluIGFueSBpbnN0YW5jZXMgb2YgYSB0YWcKICAgKi8KICBzdGF0aWMgc2VsZWN0aW9uQ29udGFpbnNUYWcocmFuZ2UyLCB0YWdOYW1lKSB7CiAgICBsZXQgbm9kZTIgPSByYW5nZTIuc3RhcnRDb250YWluZXI7CiAgICB3aGlsZSAobm9kZTIgJiYgbm9kZTIgIT09IHJhbmdlMi5jb21tb25BbmNlc3RvckNvbnRhaW5lci5vd25lckRvY3VtZW50KSB7CiAgICAgIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHsKICAgICAgICBjb25zdCBlbGVtZW50NCA9IG5vZGUyOwogICAgICAgIGlmIChlbGVtZW50NC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBub2RlMiA9IG5vZGUyLnBhcmVudE5vZGU7CiAgICB9CiAgICBub2RlMiA9IHJhbmdlMi5lbmRDb250YWluZXI7CiAgICB3aGlsZSAobm9kZTIgJiYgbm9kZTIgIT09IHJhbmdlMi5jb21tb25BbmNlc3RvckNvbnRhaW5lci5vd25lckRvY3VtZW50KSB7CiAgICAgIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHsKICAgICAgICBjb25zdCBlbGVtZW50NCA9IG5vZGUyOwogICAgICAgIGlmIChlbGVtZW50NC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBub2RlMiA9IG5vZGUyLnBhcmVudE5vZGU7CiAgICB9CiAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBjb25zdCBjb250ZW50cyA9IHJhbmdlMi5jbG9uZUNvbnRlbnRzKCk7CiAgICB0ZW1wRGl2LmFwcGVuZENoaWxkKGNvbnRlbnRzKTsKICAgIGNvbnN0IHRhZ3MgPSB0ZW1wRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpOwogICAgcmV0dXJuIHRhZ3MubGVuZ3RoID4gMDsKICB9CiAgLyoqCiAgICogUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2YgYSB0YWcgZnJvbSB0aGUgc2VsZWN0aW9uCiAgICovCiAgc3RhdGljIHJlbW92ZVRhZ0Zyb21TZWxlY3Rpb24ocmFuZ2UyLCB0YWdOYW1lKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgcmV0dXJuOwogICAgbGV0IGV4cGFuZGVkUmFuZ2UgPSByYW5nZTIuY2xvbmVSYW5nZSgpOwogICAgbGV0IHN0YXJ0Tm9kZSA9IHJhbmdlMi5zdGFydENvbnRhaW5lcjsKICAgIGxldCBzdGFydFRhZyA9IG51bGw7CiAgICB3aGlsZSAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZSAhPT0gcmFuZ2UyLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm93bmVyRG9jdW1lbnQpIHsKICAgICAgaWYgKHN0YXJ0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgc3RhcnROb2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGFnTmFtZSkgewogICAgICAgIHN0YXJ0VGFnID0gc3RhcnROb2RlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS5wYXJlbnROb2RlOwogICAgfQogICAgbGV0IGVuZE5vZGUgPSByYW5nZTIuZW5kQ29udGFpbmVyOwogICAgbGV0IGVuZFRhZyA9IG51bGw7CiAgICB3aGlsZSAoZW5kTm9kZSAmJiBlbmROb2RlICE9PSByYW5nZTIuY29tbW9uQW5jZXN0b3JDb250YWluZXIub3duZXJEb2N1bWVudCkgewogICAgICBpZiAoZW5kTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgZW5kTm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUpIHsKICAgICAgICBlbmRUYWcgPSBlbmROb2RlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGVuZE5vZGUgPSBlbmROb2RlLnBhcmVudE5vZGU7CiAgICB9CiAgICBpZiAoc3RhcnRUYWcpIHsKICAgICAgZXhwYW5kZWRSYW5nZS5zZXRTdGFydEJlZm9yZShzdGFydFRhZyk7CiAgICB9CiAgICBpZiAoZW5kVGFnKSB7CiAgICAgIGV4cGFuZGVkUmFuZ2Uuc2V0RW5kQWZ0ZXIoZW5kVGFnKTsKICAgIH0KICAgIGNvbnN0IGZyYWdtZW50ID0gZXhwYW5kZWRSYW5nZS5leHRyYWN0Q29udGVudHMoKTsKICAgIGNvbnN0IHByb2Nlc3NlZEZyYWdtZW50ID0gdGhpcy5yZW1vdmVUYWdzRnJvbUZyYWdtZW50KGZyYWdtZW50LCB0YWdOYW1lKTsKICAgIGV4cGFuZGVkUmFuZ2UuaW5zZXJ0Tm9kZShwcm9jZXNzZWRGcmFnbWVudCk7CiAgICBjb25zdCB0ZXh0Tm9kZXMgPSBbXTsKICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIocHJvY2Vzc2VkRnJhZ21lbnQsIE5vZGVGaWx0ZXIuU0hPV19URVhULCBudWxsKTsKICAgIGxldCBub2RlMjsKICAgIHdoaWxlIChub2RlMiA9IHdhbGtlci5uZXh0Tm9kZSgpKSB7CiAgICAgIHRleHROb2Rlcy5wdXNoKG5vZGUyKTsKICAgIH0KICAgIGlmICh0ZXh0Tm9kZXMubGVuZ3RoID4gMCkgewogICAgICBjb25zdCBuZXdSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgIG5ld1JhbmdlLnNldFN0YXJ0KHRleHROb2Rlc1swXSwgMCk7CiAgICAgIG5ld1JhbmdlLnNldEVuZCh0ZXh0Tm9kZXNbdGV4dE5vZGVzLmxlbmd0aCAtIDFdLCB0ZXh0Tm9kZXNbdGV4dE5vZGVzLmxlbmd0aCAtIDFdLnRleHRDb250ZW50Py5sZW5ndGggfHwgMCk7CiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5ld1JhbmdlKTsKICAgIH0KICB9CiAgLyoqCiAgICogUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2YgYSB0YWcgZnJvbSBhIGRvY3VtZW50IGZyYWdtZW50CiAgICovCiAgc3RhdGljIHJlbW92ZVRhZ3NGcm9tRnJhZ21lbnQoZnJhZ21lbnQsIHRhZ05hbWUpIHsKICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHRlbXBEaXYuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOwogICAgY29uc3QgdGFncyA9IHRlbXBEaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSk7CiAgICBjb25zdCB0YWdBcnJheSA9IEFycmF5LmZyb20odGFncyk7CiAgICB0YWdBcnJheS5mb3JFYWNoKCh0YWcpID0+IHsKICAgICAgY29uc3QgcGFyZW50ID0gdGFnLnBhcmVudE5vZGU7CiAgICAgIGlmIChwYXJlbnQpIHsKICAgICAgICB3aGlsZSAodGFnLmZpcnN0Q2hpbGQpIHsKICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUodGFnLmZpcnN0Q2hpbGQsIHRhZyk7CiAgICAgICAgfQogICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZCh0YWcpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IG5ld0ZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgd2hpbGUgKHRlbXBEaXYuZmlyc3RDaGlsZCkgewogICAgICBuZXdGcmFnbWVudC5hcHBlbmRDaGlsZCh0ZW1wRGl2LmZpcnN0Q2hpbGQpOwogICAgfQogICAgcmV0dXJuIG5ld0ZyYWdtZW50OwogIH0KICBzdGF0aWMgd3JhcFNlbGVjdGlvbldpdGhMaW5rKHJhbmdlMiwgdXJsKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgcmV0dXJuOwogICAgaWYgKHRoaXMuc2VsZWN0aW9uQ29udGFpbnNUYWcocmFuZ2UyLCAiYSIpKSB7CiAgICAgIHRoaXMucmVtb3ZlVGFnRnJvbVNlbGVjdGlvbihyYW5nZTIsICJhIik7CiAgICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHsKICAgICAgICByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgfQogICAgfQogICAgY29uc3QgbGluazMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICBsaW5rMy5ocmVmID0gdXJsOwogICAgbGluazMudGFyZ2V0ID0gIl9ibGFuayI7CiAgICBsaW5rMy5yZWwgPSAibm9vcGVuZXIgbm9yZWZlcnJlciI7CiAgICB0cnkgewogICAgICBjb25zdCBjb250ZW50cyA9IHJhbmdlMi5leHRyYWN0Q29udGVudHMoKTsKICAgICAgbGluazMuYXBwZW5kQ2hpbGQoY29udGVudHMpOwogICAgICByYW5nZTIuaW5zZXJ0Tm9kZShsaW5rMyk7CiAgICAgIHJhbmdlMi5zZWxlY3ROb2RlQ29udGVudHMobGluazMpOwogICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZTIpOwogICAgfSBjYXRjaCAoZTExKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgbGluazoiLCBlMTEpOwogICAgfQogIH0KICBzdGF0aWMgZ2V0U2VsZWN0aW9uQ29vcmRpbmF0ZXMoLi4uc2hhZG93Um9vdHMpIHsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgY29uc29sZS5sb2coImdldFNlbGVjdGlvbkNvb3JkaW5hdGVzIC0gc2VsZWN0aW9uSW5mbzoiLCBzZWxlY3Rpb25JbmZvKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICBjb25zb2xlLmxvZygiTm8gc2VsZWN0aW9uIGluZm8gYXZhaWxhYmxlIik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgcmFuZ2UyID0gV3lzaXd5Z1NlbGVjdGlvbi5jcmVhdGVSYW5nZUZyb21JbmZvKHNlbGVjdGlvbkluZm8pOwogICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIGNvbnNvbGUubG9nKCJSYW5nZSByZWN0OiIsIHJlY3QpOwogICAgaWYgKHJlY3Qud2lkdGggPT09IDAgJiYgcmVjdC5oZWlnaHQgPT09IDApIHsKICAgICAgY29uc29sZS5sb2coIlJlY3Qgd2lkdGggYW5kIGhlaWdodCBhcmUgMCwgdHJ5aW5nIGRpZmZlcmVudCBhcHByb2FjaCIpOwogICAgICBpZiAoImNhcmV0UG9zaXRpb25Gcm9tUG9pbnQiIGluIGRvY3VtZW50KSB7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7CiAgICAgICAgICBjb25zdCByYW5nZTMgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgICAgIGNvbnN0IHRlbXBTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICAgdGVtcFNwYW4udGV4dENvbnRlbnQgPSAiXHUyMDBCIjsKICAgICAgICAgIHJhbmdlMy5pbnNlcnROb2RlKHRlbXBTcGFuKTsKICAgICAgICAgIGNvbnN0IHNwYW5SZWN0ID0gdGVtcFNwYW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICB0ZW1wU3Bhbi5yZW1vdmUoKTsKICAgICAgICAgIGlmIChzcGFuUmVjdC53aWR0aCA+IDAgfHwgc3BhblJlY3QuaGVpZ2h0ID4gMCkgewogICAgICAgICAgICBjb25zdCBjb29yZHMyID0gewogICAgICAgICAgICAgIHg6IHNwYW5SZWN0LmxlZnQsCiAgICAgICAgICAgICAgeTogTWF0aC5tYXgoNDUsIHNwYW5SZWN0LnRvcCAtIDQ1KQogICAgICAgICAgICB9OwogICAgICAgICAgICBjb25zb2xlLmxvZygiVXNlZCBzcGFuIHRyaWNrIGZvciBjb29yZHM6IiwgY29vcmRzMik7CiAgICAgICAgICAgIHJldHVybiBjb29yZHMyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IGNvb3JkcyA9IHsKICAgICAgeDogcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDIsCiAgICAgIHk6IE1hdGgubWF4KDQ1LCByZWN0LnRvcCAtIDQ1KQogICAgICAvLyBQb3NpdGlvbiBhYm92ZSBzZWxlY3Rpb24sIGJ1dCBlbnN1cmUgaXQncyBub3QgbmVnYXRpdmUKICAgIH07CiAgICBjb25zb2xlLmxvZygiUmV0dXJuaW5nIGNvb3JkczoiLCBjb29yZHMpOwogICAgcmV0dXJuIGNvb3JkczsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2RlZXMtZm9ybWF0dGluZy1tZW51LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTYyID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2MyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0Zvcm1hdHRpbmdNZW51ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1mb3JtYXR0aW5nLW1lbnUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF92aXNpYmxlX2RlY29yYXRvcnM7CiAgbGV0IF92aXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZGVjb3JhdG9yczsKICBsZXQgX3Bvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVaSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX21lbnVaSW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNGb3JtYXR0aW5nTWVudTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92aXNpYmxlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9wb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfbWVudVpJbmRleF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU2Mih0aGlzLCBudWxsLCBfdmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2aXNpYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2aXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZpc2libGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmlzaWJsZV9pbml0aWFsaXplcnMsIF92aXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjIodGhpcywgbnVsbCwgX3Bvc2l0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwb3NpdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wb3NpdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcG9zaXRpb25faW5pdGlhbGl6ZXJzLCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Mih0aGlzLCBudWxsLCBfbWVudVpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51WkluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZW51WkluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1lbnVaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVaSW5kZXggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWVudVpJbmRleF9pbml0aWFsaXplcnMsIF9tZW51WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjIobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzRm9ybWF0dGluZ01lbnUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBpbnN0YW5jZTsKICAgIHN0YXRpYyBnZXRJbnN0YW5jZSgpIHsKICAgICAgaWYgKCFEZWVzRm9ybWF0dGluZ01lbnUyLmluc3RhbmNlKSB7CiAgICAgICAgRGVlc0Zvcm1hdHRpbmdNZW51Mi5pbnN0YW5jZSA9IG5ldyBEZWVzRm9ybWF0dGluZ01lbnUyKCk7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChEZWVzRm9ybWF0dGluZ01lbnUyLmluc3RhbmNlKTsKICAgICAgfQogICAgICByZXR1cm4gRGVlc0Zvcm1hdHRpbmdNZW51Mi5pbnN0YW5jZTsKICAgIH0KICAgICN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczYzKHRoaXMsIF92aXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgZ2V0IHZpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Myh0aGlzLCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjModGhpcywgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgeyB4OiAwLCB5OiAwIH0pKTsKICAgIGdldCBwb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcG9zaXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWVudVpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjModGhpcywgX3Bvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Myh0aGlzLCBfbWVudVpJbmRleF9pbml0aWFsaXplcnMsIDFlMykpOwogICAgZ2V0IG1lbnVaSW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZW51WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWVudVpJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWVudVpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY2FsbGJhY2sgPSAoX19ydW5Jbml0aWFsaXplcnM2Myh0aGlzLCBfbWVudVpJbmRleF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICB9CgogICAgICAuZm9ybWF0dGluZy1tZW51IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzI2MjYyNiIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjNDA0MDQwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW5TY2FsZSAwLjE1cyBlYXNlLW91dDsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlSW5TY2FsZSB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KSB0cmFuc2xhdGVZKDVweCk7CiAgICAgICAgfQogICAgICAgIHRvIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAiLCAiI2UwZTBlMCIpfTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YwZjBmMCIsICIjMzMzMzMzIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwNjZjYyIsICIjNGQ5NGZmIil9OwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbjphY3RpdmUgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uLmJvbGQgewogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uLml0YWxpYyB7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbi51bmRlcmxpbmUgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbiAuY29kZS1pY29uIHsKICAgICAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGlmICghdGhpcy52aXNpYmxlKQogICAgICAgIHJldHVybiBiMmBgOwogICAgICB0aGlzLnN0eWxlLnpJbmRleCA9IHRoaXMubWVudVpJbmRleC50b1N0cmluZygpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9ImZvcm1hdHRpbmctbWVudSIgCiAgICAgICAgc3R5bGU9ImxlZnQ6ICR7dGhpcy5wb3NpdGlvbi54fXB4OyB0b3A6ICR7dGhpcy5wb3NpdGlvbi55fXB4OyIKICAgICAgICB0YWJpbmRleD0iLTEiCiAgICAgICAgZGF0YS1tZW51LXR5cGU9ImZvcm1hdHRpbmciCiAgICAgID4KICAgICAgICAke1d5c2l3eWdGb3JtYXR0aW5nLmZvcm1hdEJ1dHRvbnMubWFwKChidXR0b24pID0+IGIyYAogICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgY2xhc3M9ImZvcm1hdC1idXR0b24gJHtidXR0b24uY29tbWFuZH0iCiAgICAgICAgICAgIGRhdGEtY29tbWFuZD0iJHtidXR0b24uY29tbWFuZH0iCiAgICAgICAgICAgIHRpdGxlPSIke2J1dHRvbi5sYWJlbH0ke2J1dHRvbi5zaG9ydGN1dCA/IGAgKCR7YnV0dG9uLnNob3J0Y3V0fSlgIDogIiJ9IgogICAgICAgICAgPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iJHtidXR0b24uY29tbWFuZCA9PT0gImNvZGUiID8gImNvZGUtaWNvbiIgOiAiIn0iPiR7YnV0dG9uLmljb259PC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFwcGx5Rm9ybWF0KGNvbW1hbmQpIHsKICAgICAgaWYgKHRoaXMuY2FsbGJhY2spIHsKICAgICAgICB0aGlzLmNhbGxiYWNrKGNvbW1hbmQpOwogICAgICB9CiAgICAgIGlmIChjb21tYW5kID09PSAibGluayIpIHsKICAgICAgICB0aGlzLmhpZGUoKTsKICAgICAgfQogICAgfQogICAgc2hvdyhwb3NpdGlvbjMsIGNhbGxiYWNrKSB7CiAgICAgIGNvbnNvbGUubG9nKCJGb3JtYXR0aW5nTWVudS5zaG93IGNhbGxlZDoiLCB7IHBvc2l0aW9uOiBwb3NpdGlvbjMsIHZpc2libGU6IHRoaXMudmlzaWJsZSB9KTsKICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uMzsKICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgICB0aGlzLm1lbnVaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMsIHRoaXMubWVudVpJbmRleCk7CiAgICAgIHRoaXMuc3R5bGUuekluZGV4ID0gdGhpcy5tZW51WkluZGV4LnRvU3RyaW5nKCk7CiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAgICB9CiAgICBoaWRlKCkgewogICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTsKICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnVucmVnaXN0ZXIodGhpcyk7CiAgICB9CiAgICB1cGRhdGVQb3NpdGlvbihwb3NpdGlvbjMpIHsKICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uMzsKICAgIH0KICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCAoZTExKSA9PiB7CiAgICAgICAgY29uc3QgbWVudSA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmZvcm1hdHRpbmctbWVudSIpOwogICAgICAgIGlmIChtZW51ICYmIG1lbnUuY29udGFpbnMoZTExLnRhcmdldCkpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZTExKSA9PiB7CiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZTExLnRhcmdldDsKICAgICAgICBjb25zdCBidXR0b24gPSB0YXJnZXQuY2xvc2VzdCgiLmZvcm1hdC1idXR0b24iKTsKICAgICAgICBpZiAoYnV0dG9uKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJkYXRhLWNvbW1hbmQiKTsKICAgICAgICAgIGlmIChjb21tYW5kKSB7CiAgICAgICAgICAgIHRoaXMuYXBwbHlGb3JtYXQoY29tbWFuZCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCBtZW51ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZm9ybWF0dGluZy1tZW51Iik7CiAgICAgICAgaWYgKG1lbnUgJiYgbWVudS5jb250YWlucyhlMTEudGFyZ2V0KSkgewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgfQogICAgICB9LCB0cnVlKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNGb3JtYXR0aW5nTWVudTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmludGVyZmFjZXMuanMKaW5pdF9kaXN0X3RzMjYoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5jb25zdGFudHMuanMKdmFyIFBST0dSQU1NSU5HX0xBTkdVQUdFUyA9IFsKICAiSmF2YVNjcmlwdCIsCiAgIlR5cGVTY3JpcHQiLAogICJQeXRob24iLAogICJKYXZhIiwKICAiQysrIiwKICAiQyMiLAogICJHbyIsCiAgIlJ1c3QiLAogICJIVE1MIiwKICAiQ1NTIiwKICAiU1FMIiwKICAiU2hlbGwiLAogICJKU09OIiwKICAiWUFNTCIsCiAgIk1hcmtkb3duIiwKICAiUGxhaW4gVGV4dCIKXTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5zdHlsZXMuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHd5c2l3eWdTdHlsZXMgPSBpYAogIDpob3N0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogIH0KCiAgLnd5c2l3eWctY29udGFpbmVyIHsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgbWluLWhlaWdodDogMjAwcHg7CiAgICBwYWRkaW5nOiAyNHB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLnd5c2l3eWctY29udGFpbmVyOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzNmM2Y0NiIpfTsKICB9CgogIC53eXNpd3lnLWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgb3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjMTgxODFiIil9LCAwIDAgMCA0cHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjUpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjUpIil9OwogICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogIH0KCiAgLyogVmlzdWFsIGhpbnQgZm9yIHRleHQgc2VsZWN0aW9uICovCiAgLmVkaXRvci1jb250ZW50OmhvdmVyIHsKICAgIGN1cnNvcjogdGV4dDsKICB9CgogIC5lZGl0b3ItY29udGVudCB7CiAgICBvdXRsaW5lOiBub25lOwogICAgbWluLWhlaWdodDogMTYwcHg7CiAgICBtYXJnaW46IDAgLThweDsKICAgIHBhZGRpbmc6IDAgOHB4OwogIH0KCiAgLmJsb2NrIHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDRweCAwOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICBtaW4taGVpZ2h0OiAxLjZlbTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLyogRmlyc3QgYW5kIGxhc3QgYmxvY2tzIGRvbid0IG5lZWQgZXh0cmEgc3BhY2luZyAqLwogIC5ibG9jay13cmFwcGVyOmZpcnN0LWNoaWxkIC5ibG9jayB7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgfQoKICAuYmxvY2std3JhcHBlcjpsYXN0LWNoaWxkIC5ibG9jayB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwogIH0KCiAgLmJsb2NrLnNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4wNSkiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMDUpIil9OwogICAgb3V0bGluZTogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIpfTsKICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgbWFyZ2luLWxlZnQ6IC04cHg7CiAgICBtYXJnaW4tcmlnaHQ6IC04cHg7CiAgICBwYWRkaW5nLWxlZnQ6IDhweDsKICAgIHBhZGRpbmctcmlnaHQ6IDhweDsKICB9CgogIC5ibG9ja1tjb250ZW50ZWRpdGFibGVdIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQoKICAuYmxvY2sucGFyYWdyYXBoIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBmb250LXdlaWdodDogNDAwOwogIH0KCiAgLmJsb2NrLnBhcmFncmFwaDplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJUeXBlICcvJyBmb3IgY29tbWFuZHMuLi4iOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBmb250LXdlaWdodDogNDAwOwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMSB7CiAgICBmb250LXNpemU6IDMycHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMTplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJIZWFkaW5nIDEiOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMzJweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICBmb250LXdlaWdodDogNzAwOwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMiB7CiAgICBmb250LXNpemU6IDI0cHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuMzsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMjplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJIZWFkaW5nIDIiOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMjRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM7CiAgICBmb250LXdlaWdodDogNjAwOwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMyB7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMzplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJIZWFkaW5nIDMiOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMjBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBmb250LXdlaWdodDogNjAwOwogIH0KCiAgLmJsb2NrLnF1b3RlIHsKICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICBsaW5lLWhlaWdodDogMS42OwogIH0KCiAgLmJsb2NrLnF1b3RlOmVtcHR5OjpiZWZvcmUgewogICAgY29udGVudDogIlF1b3RlIjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMS42OwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICB9CgogIC5jb2RlLWJsb2NrLWNvbnRhaW5lciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW46IDIwcHggMDsKICB9CgogIC5jb2RlLWxhbmd1YWdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIHJpZ2h0OiAwOwogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgcGFkZGluZzogNHB4IDEycHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiAwIDRweCAwIDRweDsKICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgc2Fucy1zZXJpZjsKICAgIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2U7CiAgICB6LWluZGV4OiAxOwogIH0KCiAgLmJsb2NrLmNvZGUgewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzE4MTgxYiIpfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBwYWRkaW5nOiAxNnB4OwogICAgcGFkZGluZy10b3A6IDMycHg7IC8qIE1ha2Ugcm9vbSBmb3IgbGFuZ3VhZ2UgaW5kaWNhdG9yICovCiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgIG92ZXJmbG93LXg6IGF1dG87CiAgfQoKICAuYmxvY2suY29kZTplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIvLyBDb2RlIGJsb2NrIjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBmb250LXdlaWdodDogNDAwOwogIH0KCiAgLmJsb2NrLmxpc3QgewogICAgcGFkZGluZy1sZWZ0OiAwOwogIH0KCiAgLmJsb2NrLmxpc3QgdWwsCiAgLmJsb2NrLmxpc3Qgb2wgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMCAwIDAgMjRweDsKICAgIGxpc3Qtc3R5bGUtcG9zaXRpb246IG91dHNpZGU7CiAgfQoKICAuYmxvY2subGlzdCB1bCB7CiAgICBsaXN0LXN0eWxlOiBkaXNjOwogIH0KCiAgLmJsb2NrLmxpc3Qgb2wgewogICAgbGlzdC1zdHlsZTogZGVjaW1hbDsKICB9CgogIC5ibG9jay5saXN0IGxpIHsKICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgfQoKICAuYmxvY2subGlzdCBsaTpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7CiAgfQoKICAuYmxvY2suZGl2aWRlciB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAyMHB4IDA7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICB9CgogIC5ibG9jay5kaXZpZGVyIGhyIHsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgbWFyZ2luOiAwOwogIH0KCiAgLnNsYXNoLW1lbnUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzA5MDkwYiIpfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA2KTsKICAgIHBhZGRpbmc6IDRweDsKICAgIHotaW5kZXg6IDEwMDA7CiAgICBtaW4td2lkdGg6IDIyMHB4OwogICAgbWF4LWhlaWdodDogMzAwcHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICB9CgogIC5zbGFzaC1tZW51LWl0ZW0gewogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICBmb250LXNpemU6IDE0cHg7CiAgfQoKICAuc2xhc2gtbWVudS1pdGVtOmhvdmVyLAogIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLnNsYXNoLW1lbnUtaXRlbSAuaWNvbiB7CiAgICB3aWR0aDogMjRweDsKICAgIGhlaWdodDogMjRweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgfQoKICAuc2xhc2gtbWVudS1pdGVtOmhvdmVyIC5pY29uLAogIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgLmljb24gewogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgfQoKICAudG9vbGJhciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC00MHB4OwogICAgbGVmdDogMDsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNik7CiAgICBwYWRkaW5nOiA0cHg7CiAgICBkaXNwbGF5OiBub25lOwogICAgZ2FwOiA0cHg7CiAgICB6LWluZGV4OiAxMDAwOwogIH0KCiAgLnRvb2xiYXIudmlzaWJsZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogIH0KCiAgLnRvb2xiYXItYnV0dG9uIHsKICAgIHdpZHRoOiAzMnB4OwogICAgaGVpZ2h0OiAzMnB4OwogICAgYm9yZGVyOiBub25lOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICB9CgogIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjMjcyNzJhIil9OwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgfQoKICAvKiBEcmFnIGFuZCBEcm9wIFN0eWxlcyAqLwogIC5ibG9jay13cmFwcGVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2UsIG9wYWNpdHkgMC4ycyBlYXNlOwogIH0KCiAgLyogRW5zdXJlIHByb3BlciBzcGFjaW5nIGNvbnRleHQgZm9yIGJsb2NrcyAqLwogIC5ibG9jay13cmFwcGVyICsgLmJsb2NrLXdyYXBwZXIgLmJsb2NrIHsKICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgfQoKICAvKiBPdmVycmlkZSBmb3IgaGVhZGluZ3MgZm9sbG93aW5nIG90aGVyIGJsb2NrcyAqLwogIC5ibG9jay13cmFwcGVyICsgLmJsb2NrLXdyYXBwZXIgLmJsb2NrLmhlYWRpbmctMSwKICAuYmxvY2std3JhcHBlciArIC5ibG9jay13cmFwcGVyIC5ibG9jay5oZWFkaW5nLTIsCiAgLmJsb2NrLXdyYXBwZXIgKyAuYmxvY2std3JhcHBlciAuYmxvY2suaGVhZGluZy0zIHsKICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgfQoKICAvKiBDb2RlIGFuZCBxdW90ZSBibG9ja3MgbmVlZCBjb25zaXN0ZW50IHNwYWNpbmcgKi8KICAuYmxvY2std3JhcHBlciArIC5ibG9jay13cmFwcGVyIC5ibG9jay5jb2RlLAogIC5ibG9jay13cmFwcGVyICsgLmJsb2NrLXdyYXBwZXIgLmJsb2NrLnF1b3RlIHsKICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgfQoKICAuZHJhZy1oYW5kbGUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogLTI4cHg7CiAgICB0b3A6IDUwJTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgIHdpZHRoOiAyNHB4OwogICAgaGVpZ2h0OiAyNHB4OwogICAgY3Vyc29yOiBncmFiOwogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogIH0KCiAgLmRyYWctaGFuZGxlOjpiZWZvcmUgewogICAgY29udGVudDogIuKLruKLriI7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsZXR0ZXItc3BhY2luZzogLTJweDsKICB9CgogIC5ibG9jay13cmFwcGVyOmhvdmVyIC5kcmFnLWhhbmRsZSB7CiAgICBvcGFjaXR5OiAxOwogIH0KCiAgLmRyYWctaGFuZGxlOmhvdmVyIHsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICB9CgogIC5kcmFnLWhhbmRsZTphY3RpdmUgewogICAgY3Vyc29yOiBncmFiYmluZzsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgfQoKICAuYmxvY2std3JhcHBlci5kcmFnZ2luZyB7CiAgICBvcGFjaXR5OiAwLjg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDIwMDE7CiAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7CiAgfQoKCiAgLyogQmxvY2tzIHRoYXQgc2hvdWxkIG1vdmUgb3V0IG9mIHRoZSB3YXkgKi8KICAuYmxvY2std3JhcHBlci5tb3ZlLWRvd24gewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHZhcigtLWRyYWctb2Zmc2V0LCAwcHgpKTsKICB9CgogIC5ibG9jay13cmFwcGVyLm1vdmUtdXAgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKGNhbGMoLTEgKiB2YXIoLS1kcmFnLW9mZnNldCwgMHB4KSkpOwogIH0KCiAgLyogRHJvcCBpbmRpY2F0b3IgKi8KICAuZHJvcC1pbmRpY2F0b3IgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjA1KSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4wNSkiKX07CiAgICBib3JkZXI6IDJweCBkYXNoZWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIHRyYW5zaXRpb246IHRvcCAwLjJzIGVhc2UsIGhlaWdodCAwLjJzIGVhc2U7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDE5OTk7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIH0KCiAgLyogUmVtb3ZlIG9sZCBkcmFnLW92ZXIgc3R5bGVzICovCiAgLmJsb2NrLXdyYXBwZXIuZHJhZy1vdmVyLWJlZm9yZSwKICAuYmxvY2std3JhcHBlci5kcmFnLW92ZXItYWZ0ZXIgewogICAgLyogTm8gbG9uZ2VyIG5lZWRlZCwgdXNpbmcgZHJvcCBpbmRpY2F0b3IgaW5zdGVhZCAqLwogIH0KCiAgLmVkaXRvci1jb250ZW50LmRyYWdnaW5nICogewogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgfQoKICAvKiBCbG9jayBTZXR0aW5ncyBCdXR0b24gLSBSZW1vdmVkIGluIGZhdm9yIG9mIGNvbnRleHQgbWVudSAqLwoKICAvKiBUZXh0IFNlbGVjdGlvbiBTdHlsZXMgKi8KICAuYmxvY2sgOjpzZWxlY3Rpb24gewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjIpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjIpIil9OwogICAgY29sb3I6IGluaGVyaXQ7CiAgfQoKICAvKiBGb3JtYXR0aW5nIE1lbnUgKi8KICAuZm9ybWF0dGluZy1tZW51IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNik7CiAgICBwYWRkaW5nOiA0cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAycHg7CiAgICB6LWluZGV4OiAxMDAxOwogICAgYW5pbWF0aW9uOiBmYWRlSW5TY2FsZSAwLjE1cyBlYXNlLW91dDsKICB9CgogIEBrZXlmcmFtZXMgZmFkZUluU2NhbGUgewogICAgZnJvbSB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCkgdHJhbnNsYXRlWSgycHgpOwogICAgfQogICAgdG8gewogICAgICBvcGFjaXR5OiAxOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMCk7CiAgICB9CiAgfQoKICAuZm9ybWF0LWJ1dHRvbiB7CiAgICB3aWR0aDogMzJweDsKICAgIGhlaWdodDogMzJweDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICBmb250LXdlaWdodDogNjAwOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogIH0KCiAgLmZvcm1hdC1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogIH0KCiAgLmZvcm1hdC1idXR0b246YWN0aXZlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7CiAgfQoKICAuZm9ybWF0LWJ1dHRvbi5ib2xkIHsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgfQoKICAuZm9ybWF0LWJ1dHRvbi5pdGFsaWMgewogICAgZm9udC1zdHlsZTogaXRhbGljOwogIH0KCiAgLmZvcm1hdC1idXR0b24udW5kZXJsaW5lIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIH0KCiAgLmZvcm1hdC1idXR0b24gLmNvZGUtaWNvbiB7CiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICB9CgogIC8qIEFwcGxpZWQgZm9ybWF0IHN0eWxlcyBpbiBjb250ZW50ICovCiAgLmJsb2NrIHN0cm9uZywKICAuYmxvY2sgYiB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgfQoKICAuYmxvY2sgZW0sCiAgLmJsb2NrIGkgewogICAgZm9udC1zdHlsZTogaXRhbGljOwogIH0KCiAgLmJsb2NrIHUgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgfQoKICAuYmxvY2sgc3RyaWtlLAogIC5ibG9jayBzIHsKICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwogICAgb3BhY2l0eTogMC43OwogIH0KCiAgLmJsb2NrIGNvZGUgewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICB9CgogIC5ibG9jayBhIHsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgfQoKICAuYmxvY2sgYTpob3ZlciB7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogIH0KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5jb252ZXJ0ZXJzLmpzCnZhciBXeXNpd3lnQ29udmVydGVycyA9IGNsYXNzIHsKICBzdGF0aWMgZXNjYXBlSHRtbCh0ZXh0OSkgewogICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBkaXYudGV4dENvbnRlbnQgPSB0ZXh0OTsKICAgIHJldHVybiBkaXYuaW5uZXJIVE1MOwogIH0KICBzdGF0aWMgZm9ybWF0RmlsZVNpemUoYnl0ZXMpIHsKICAgIGlmIChieXRlcyA9PT0gMCkKICAgICAgcmV0dXJuICIwIEJ5dGVzIjsKICAgIGNvbnN0IGs0ID0gMTAyNDsKICAgIGNvbnN0IHNpemVzID0gWyJCeXRlcyIsICJLQiIsICJNQiIsICJHQiJdOwogICAgY29uc3QgaTExID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrNCkpOwogICAgcmV0dXJuIHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coazQsIGkxMSkpLnRvRml4ZWQoMikpICsgIiAiICsgc2l6ZXNbaTExXTsKICB9CiAgc3RhdGljIGdldEh0bWxPdXRwdXQoYmxvY2tzKSB7CiAgICByZXR1cm4gYmxvY2tzLm1hcCgoYmxvY2spID0+IHsKICAgICAgY29uc3QgY29udGVudDMgPSBibG9jay5jb250ZW50LmluY2x1ZGVzKCI8IikgJiYgYmxvY2suY29udGVudC5pbmNsdWRlcygiPiIpID8gYmxvY2suY29udGVudCA6IHRoaXMuZXNjYXBlSHRtbChibG9jay5jb250ZW50KTsKICAgICAgc3dpdGNoIChibG9jay50eXBlKSB7CiAgICAgICAgY2FzZSAicGFyYWdyYXBoIjoKICAgICAgICAgIHJldHVybiBibG9jay5jb250ZW50ID8gYDxwPiR7Y29udGVudDN9PC9wPmAgOiAiIjsKICAgICAgICBjYXNlICJoZWFkaW5nLTEiOgogICAgICAgICAgcmV0dXJuIGA8aDE+JHtjb250ZW50M308L2gxPmA7CiAgICAgICAgY2FzZSAiaGVhZGluZy0yIjoKICAgICAgICAgIHJldHVybiBgPGgyPiR7Y29udGVudDN9PC9oMj5gOwogICAgICAgIGNhc2UgImhlYWRpbmctMyI6CiAgICAgICAgICByZXR1cm4gYDxoMz4ke2NvbnRlbnQzfTwvaDM+YDsKICAgICAgICBjYXNlICJxdW90ZSI6CiAgICAgICAgICByZXR1cm4gYDxibG9ja3F1b3RlPiR7Y29udGVudDN9PC9ibG9ja3F1b3RlPmA7CiAgICAgICAgY2FzZSAiY29kZSI6CiAgICAgICAgICByZXR1cm4gYDxwcmU+PGNvZGU+JHt0aGlzLmVzY2FwZUh0bWwoYmxvY2suY29udGVudCl9PC9jb2RlPjwvcHJlPmA7CiAgICAgICAgY2FzZSAibGlzdCI6CiAgICAgICAgICBjb25zdCBpdGVtcyA9IGJsb2NrLmNvbnRlbnQuc3BsaXQoIlxuIikuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnRyaW0oKSk7CiAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBjb25zdCBsaXN0VGFnID0gYmxvY2subWV0YWRhdGE/Lmxpc3RUeXBlID09PSAib3JkZXJlZCIgPyAib2wiIDogInVsIjsKICAgICAgICAgICAgcmV0dXJuIGA8JHtsaXN0VGFnfT4ke2l0ZW1zLm1hcCgoaXRlbSkgPT4gYDxsaT4ke2l0ZW19PC9saT5gKS5qb2luKCIiKX08LyR7bGlzdFRhZ30+YDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICBjYXNlICJkaXZpZGVyIjoKICAgICAgICAgIHJldHVybiAiPGhyPiI7CiAgICAgICAgY2FzZSAiaW1hZ2UiOgogICAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBibG9jay5tZXRhZGF0YT8udXJsOwogICAgICAgICAgaWYgKGltYWdlVXJsKSB7CiAgICAgICAgICAgIGNvbnN0IGFsdFRleHQgPSB0aGlzLmVzY2FwZUh0bWwoYmxvY2suY29udGVudCB8fCAiSW1hZ2UiKTsKICAgICAgICAgICAgcmV0dXJuIGA8aW1nIHNyYz0iJHtpbWFnZVVybH0iIGFsdD0iJHthbHRUZXh0fSIgLz5gOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIGNhc2UgInlvdXR1YmUiOgogICAgICAgICAgY29uc3QgdmlkZW9JZCA9IGJsb2NrLm1ldGFkYXRhPy52aWRlb0lkOwogICAgICAgICAgaWYgKHZpZGVvSWQpIHsKICAgICAgICAgICAgcmV0dXJuIGA8aWZyYW1lIHdpZHRoPSI1NjAiIGhlaWdodD0iMzE1IiBzcmM9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7dmlkZW9JZH0iIGZyYW1lYm9yZGVyPSIwIiBhbGxvdz0iYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGNsaXBib2FyZC13cml0ZTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZSIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPmA7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgY2FzZSAibWFya2Rvd24iOgogICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJtYXJrZG93bi1jb250ZW50Ij4ke3RoaXMuZXNjYXBlSHRtbChibG9jay5jb250ZW50KX08L2Rpdj5gOwogICAgICAgIGNhc2UgImh0bWwiOgogICAgICAgICAgcmV0dXJuIGJsb2NrLmNvbnRlbnQ7CiAgICAgICAgY2FzZSAiYXR0YWNobWVudCI6CiAgICAgICAgICBjb25zdCBmaWxlcyA9IGJsb2NrLm1ldGFkYXRhPy5maWxlcyB8fCBbXTsKICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0iYXR0YWNobWVudHMiPiR7ZmlsZXMubWFwKChmaWxlKSA9PiBgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1pdGVtIiBkYXRhLWZpbGUtaWQ9IiR7ZmlsZS5pZH0iPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iJHtmaWxlLmRhdGF9IiBkb3dubG9hZD0iJHtmaWxlLm5hbWV9Ij4ke3RoaXMuZXNjYXBlSHRtbChmaWxlLm5hbWUpfTwvYT4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWxlLXNpemUiPigke3RoaXMuZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKX0pPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmA7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBgPHA+JHtjb250ZW50M308L3A+YDsKICAgICAgfQogICAgfSkuZmlsdGVyKChodG1sMjApID0+IGh0bWwyMCAhPT0gIiIpLmpvaW4oIlxuIik7CiAgfQogIHN0YXRpYyBnZXRNYXJrZG93bk91dHB1dChibG9ja3MpIHsKICAgIHJldHVybiBibG9ja3MubWFwKChibG9jaykgPT4gewogICAgICBzd2l0Y2ggKGJsb2NrLnR5cGUpIHsKICAgICAgICBjYXNlICJwYXJhZ3JhcGgiOgogICAgICAgICAgcmV0dXJuIGJsb2NrLmNvbnRlbnQ7CiAgICAgICAgY2FzZSAiaGVhZGluZy0xIjoKICAgICAgICAgIHJldHVybiBgIyAke2Jsb2NrLmNvbnRlbnR9YDsKICAgICAgICBjYXNlICJoZWFkaW5nLTIiOgogICAgICAgICAgcmV0dXJuIGAjIyAke2Jsb2NrLmNvbnRlbnR9YDsKICAgICAgICBjYXNlICJoZWFkaW5nLTMiOgogICAgICAgICAgcmV0dXJuIGAjIyMgJHtibG9jay5jb250ZW50fWA7CiAgICAgICAgY2FzZSAicXVvdGUiOgogICAgICAgICAgcmV0dXJuIGA+ICR7YmxvY2suY29udGVudH1gOwogICAgICAgIGNhc2UgImNvZGUiOgogICAgICAgICAgcmV0dXJuIGBcYFxgXGAKJHtibG9jay5jb250ZW50fQpcYFxgXGBgOwogICAgICAgIGNhc2UgImxpc3QiOgogICAgICAgICAgY29uc3QgaXRlbXMgPSBibG9jay5jb250ZW50LnNwbGl0KCJcbiIpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS50cmltKCkpOwogICAgICAgICAgaWYgKGJsb2NrLm1ldGFkYXRhPy5saXN0VHlwZSA9PT0gIm9yZGVyZWQiKSB7CiAgICAgICAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGluZGV4MikgPT4gYCR7aW5kZXgyICsgMX0uICR7aXRlbX1gKS5qb2luKCJcbiIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSkgPT4gYC0gJHtpdGVtfWApLmpvaW4oIlxuIik7CiAgICAgICAgICB9CiAgICAgICAgY2FzZSAiZGl2aWRlciI6CiAgICAgICAgICByZXR1cm4gIi0tLSI7CiAgICAgICAgY2FzZSAiaW1hZ2UiOgogICAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBibG9jay5tZXRhZGF0YT8udXJsOwogICAgICAgICAgY29uc3QgYWx0VGV4dCA9IGJsb2NrLmNvbnRlbnQgfHwgIkltYWdlIjsKICAgICAgICAgIHJldHVybiBpbWFnZVVybCA/IGAhWyR7YWx0VGV4dH1dKCR7aW1hZ2VVcmx9KWAgOiAiIjsKICAgICAgICBjYXNlICJ5b3V0dWJlIjoKICAgICAgICAgIGNvbnN0IHZpZGVvSWQgPSBibG9jay5tZXRhZGF0YT8udmlkZW9JZDsKICAgICAgICAgIGNvbnN0IHVybCA9IGJsb2NrLm1ldGFkYXRhPy51cmwgfHwgKHZpZGVvSWQgPyBgaHR0cHM6Ly95b3V0dWJlLmNvbS93YXRjaD92PSR7dmlkZW9JZH1gIDogIiIpOwogICAgICAgICAgcmV0dXJuIHVybCA/IGBbWW91VHViZSBWaWRlb10oJHt1cmx9KWAgOiAiIjsKICAgICAgICBjYXNlICJtYXJrZG93biI6CiAgICAgICAgICByZXR1cm4gYmxvY2suY29udGVudDsKICAgICAgICBjYXNlICJodG1sIjoKICAgICAgICAgIHJldHVybiBgPCEtLSBIVE1MIEJsb2NrCiR7YmxvY2suY29udGVudH0KLS0+YDsKICAgICAgICBjYXNlICJhdHRhY2htZW50IjoKICAgICAgICAgIGNvbnN0IGZpbGVzID0gYmxvY2subWV0YWRhdGE/LmZpbGVzIHx8IFtdOwogICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgcmV0dXJuIGZpbGVzLm1hcCgoZmlsZSkgPT4gYC0gWyR7ZmlsZS5uYW1lfV0oJHtmaWxlLmRhdGF9KWApLmpvaW4oIlxuIik7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBibG9jay5jb250ZW50OwogICAgICB9CiAgICB9KS5maWx0ZXIoKG1kKSA9PiBtZCAhPT0gIiIpLmpvaW4oIlxuXG4iKTsKICB9CiAgc3RhdGljIHBhcnNlSHRtbFRvQmxvY2tzKGh0bWwyMCkgewogICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpOwogICAgY29uc3QgZG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhodG1sMjAsICJ0ZXh0L2h0bWwiKTsKICAgIGNvbnN0IGJsb2NrcyA9IFtdOwogICAgY29uc3QgcHJvY2Vzc05vZGUgPSAobm9kZTIpID0+IHsKICAgICAgaWYgKG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiBub2RlMi50ZXh0Q29udGVudD8udHJpbSgpKSB7CiAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgICAgIGNvbnRlbnQ6IG5vZGUyLnRleHRDb250ZW50LnRyaW0oKQogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkgewogICAgICAgIGNvbnN0IGVsZW1lbnQ0ID0gbm9kZTI7CiAgICAgICAgY29uc3QgdGFnTmFtZSA9IGVsZW1lbnQ0LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKICAgICAgICBzd2l0Y2ggKHRhZ05hbWUpIHsKICAgICAgICAgIGNhc2UgInAiOgogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgICAgICAgICAgY29udGVudDogZWxlbWVudDQuaW5uZXJIVE1MIHx8ICIiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImgxIjoKICAgICAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTEiLAogICAgICAgICAgICAgIGNvbnRlbnQ6IGVsZW1lbnQ0LmlubmVySFRNTCB8fCAiIgogICAgICAgICAgICB9KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJoMiI6CiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgICAgICAgICBjb250ZW50OiBlbGVtZW50NC5pbm5lckhUTUwgfHwgIiIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiaDMiOgogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogImhlYWRpbmctMyIsCiAgICAgICAgICAgICAgY29udGVudDogZWxlbWVudDQuaW5uZXJIVE1MIHx8ICIiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImJsb2NrcXVvdGUiOgogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogInF1b3RlIiwKICAgICAgICAgICAgICBjb250ZW50OiBlbGVtZW50NC5pbm5lckhUTUwgfHwgIiIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAicHJlIjoKICAgICAgICAgIGNhc2UgImNvZGUiOgogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogImNvZGUiLAogICAgICAgICAgICAgIGNvbnRlbnQ6IGVsZW1lbnQ0LnRleHRDb250ZW50IHx8ICIiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInVsIjoKICAgICAgICAgIGNhc2UgIm9sIjoKICAgICAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gQXJyYXkuZnJvbShlbGVtZW50NC5xdWVyeVNlbGVjdG9yQWxsKCJsaSIpKTsKICAgICAgICAgICAgY29uc3QgY29udGVudDMgPSBsaXN0SXRlbXMubWFwKChsaTIpID0+IGxpMi5pbm5lckhUTUwgfHwgIiIpLmpvaW4oIlxuIik7CiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgICAgICB0eXBlOiAibGlzdCIsCiAgICAgICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICAgICAgbWV0YWRhdGE6IHsgbGlzdFR5cGU6IHRhZ05hbWUgPT09ICJvbCIgPyAib3JkZXJlZCIgOiAiYnVsbGV0IiB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImhyIjoKICAgICAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgICAgIHR5cGU6ICJkaXZpZGVyIiwKICAgICAgICAgICAgICBjb250ZW50OiAiICIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiaW1nIjoKICAgICAgICAgICAgY29uc3QgaW1nRWxlbWVudCA9IGVsZW1lbnQ0OwogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogImltYWdlIiwKICAgICAgICAgICAgICBjb250ZW50OiBpbWdFbGVtZW50LmFsdCB8fCAiIiwKICAgICAgICAgICAgICBtZXRhZGF0YTogeyB1cmw6IGltZ0VsZW1lbnQuc3JjIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgZWxlbWVudDQuY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZCkgPT4gcHJvY2Vzc05vZGUoY2hpbGQpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBkb2MuYm9keS5jaGlsZE5vZGVzLmZvckVhY2goKG5vZGUyKSA9PiBwcm9jZXNzTm9kZShub2RlMikpOwogICAgcmV0dXJuIGJsb2NrczsKICB9CiAgc3RhdGljIHBhcnNlTWFya2Rvd25Ub0Jsb2NrcyhtYXJrZG93bikgewogICAgY29uc3QgbGluZXMgPSBtYXJrZG93bi5zcGxpdCgiXG4iKTsKICAgIGNvbnN0IGJsb2NrcyA9IFtdOwogICAgbGV0IGN1cnJlbnRMaXN0SXRlbXMgPSBbXTsKICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGxpbmVzLmxlbmd0aDsgaTExKyspIHsKICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2kxMV07CiAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoIiMgIikpIHsKICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTEiLAogICAgICAgICAgY29udGVudDogbGluZS5zdWJzdHJpbmcoMikKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoIiMjICIpKSB7CiAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgICAgIGNvbnRlbnQ6IGxpbmUuc3Vic3RyaW5nKDMpCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKCIjIyMgIikpIHsKICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICAgICAgY29udGVudDogbGluZS5zdWJzdHJpbmcoNCkKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoIj4gIikpIHsKICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgIHR5cGU6ICJxdW90ZSIsCiAgICAgICAgICBjb250ZW50OiBsaW5lLnN1YnN0cmluZygyKQogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgiYGBgIikpIHsKICAgICAgICBjb25zdCBjb2RlTGluZXMgPSBbXTsKICAgICAgICBpMTErKzsKICAgICAgICB3aGlsZSAoaTExIDwgbGluZXMubGVuZ3RoICYmICFsaW5lc1tpMTFdLnN0YXJ0c1dpdGgoImBgYCIpKSB7CiAgICAgICAgICBjb2RlTGluZXMucHVzaChsaW5lc1tpMTFdKTsKICAgICAgICAgIGkxMSsrOwogICAgICAgIH0KICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgIHR5cGU6ICJjb2RlIiwKICAgICAgICAgIGNvbnRlbnQ6IGNvZGVMaW5lcy5qb2luKCJcbiIpCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAobGluZS5tYXRjaCgvXihcKnwtKSAvKSkgewogICAgICAgIGN1cnJlbnRMaXN0SXRlbXMucHVzaChsaW5lLnN1YnN0cmluZygyKSk7CiAgICAgICAgaWYgKGkxMSA9PT0gbGluZXMubGVuZ3RoIC0gMSB8fCAhbGluZXNbaTExICsgMV0ubWF0Y2goL14oXCp8LSkgLykpIHsKICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgIHR5cGU6ICJsaXN0IiwKICAgICAgICAgICAgY29udGVudDogY3VycmVudExpc3RJdGVtcy5qb2luKCJcbiIpLAogICAgICAgICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogImJ1bGxldCIgfQogICAgICAgICAgfSk7CiAgICAgICAgICBjdXJyZW50TGlzdEl0ZW1zID0gW107CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGxpbmUubWF0Y2goL15cZCtcLiAvKSkgewogICAgICAgIGN1cnJlbnRMaXN0SXRlbXMucHVzaChsaW5lLnJlcGxhY2UoL15cZCtcLiAvLCAiIikpOwogICAgICAgIGlmIChpMTEgPT09IGxpbmVzLmxlbmd0aCAtIDEgfHwgIWxpbmVzW2kxMSArIDFdLm1hdGNoKC9eXGQrXC4gLykpIHsKICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgIHR5cGU6ICJsaXN0IiwKICAgICAgICAgICAgY29udGVudDogY3VycmVudExpc3RJdGVtcy5qb2luKCJcbiIpLAogICAgICAgICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogIm9yZGVyZWQiIH0KICAgICAgICAgIH0pOwogICAgICAgICAgY3VycmVudExpc3RJdGVtcyA9IFtdOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChsaW5lID09PSAiLS0tIiB8fCBsaW5lID09PSAiKioqIiB8fCBsaW5lID09PSAiX19fIikgewogICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgdHlwZTogImRpdmlkZXIiLAogICAgICAgICAgY29udGVudDogIiAiCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAobGluZS5tYXRjaCgvXiFcWyhbXlxdXSopXF1cKChbXlwpXSspXCkkLykpIHsKICAgICAgICBjb25zdCBtYXRjaDIgPSBsaW5lLm1hdGNoKC9eIVxbKFteXF1dKilcXVwoKFteXCldKylcKSQvKTsKICAgICAgICBpZiAobWF0Y2gyKSB7CiAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgICB0eXBlOiAiaW1hZ2UiLAogICAgICAgICAgICBjb250ZW50OiBtYXRjaDJbMV0gfHwgIiIsCiAgICAgICAgICAgIG1ldGFkYXRhOiB7IHVybDogbWF0Y2gyWzJdIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChsaW5lLnRyaW0oKSkgewogICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgICAgICBjb250ZW50OiBsaW5lCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBibG9ja3M7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmJsb2Nrcy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgV3lzaXd5Z0Jsb2NrcyA9IGNsYXNzIHsKICBzdGF0aWMgcmVuZGVyTGlzdENvbnRlbnQoY29udGVudDMsIG1ldGFkYXRhKSB7CiAgICBjb25zdCBpdGVtcyA9IGNvbnRlbnQzLnNwbGl0KCJcbiIpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS50cmltKCkpOwogICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkKICAgICAgcmV0dXJuICIiOwogICAgY29uc3QgbGlzdFRhZyA9IG1ldGFkYXRhPy5saXN0VHlwZSA9PT0gIm9yZGVyZWQiID8gIm9sIiA6ICJ1bCI7CiAgICByZXR1cm4gYDwke2xpc3RUYWd9PiR7aXRlbXMubWFwKChpdGVtKSA9PiBgPGxpPiR7aXRlbX08L2xpPmApLmpvaW4oIiIpfTwvJHtsaXN0VGFnfT5gOwogIH0KICBzdGF0aWMgcmVuZGVyQmxvY2soYmxvY2ssIGlzU2VsZWN0ZWQsIGhhbmRsZXJzMikgewogICAgaWYgKGJsb2NrLnR5cGUgPT09ICJkaXZpZGVyIikgewogICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9ImJsb2NrIGRpdmlkZXIiCiAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICA+CiAgICAgICAgICA8aHI+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAoYmxvY2sudHlwZSA9PT0gImxpc3QiKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgICA8ZGl2CiAgICAgICAgICBjbGFzcz0iYmxvY2sgbGlzdCAke2lzU2VsZWN0ZWQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICBjb250ZW50ZWRpdGFibGU9InRydWUiCiAgICAgICAgICBAaW5wdXQ9IiR7aGFuZGxlcnMyLm9uSW5wdXR9IgogICAgICAgICAgQGtleWRvd249IiR7aGFuZGxlcnMyLm9uS2V5RG93bn0iCiAgICAgICAgICBAZm9jdXM9IiR7aGFuZGxlcnMyLm9uRm9jdXN9IgogICAgICAgICAgQGJsdXI9IiR7aGFuZGxlcnMyLm9uQmx1cn0iCiAgICAgICAgICBAY29tcG9zaXRpb25zdGFydD0iJHtoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0fSIKICAgICAgICAgIEBjb21wb3NpdGlvbmVuZD0iJHtoYW5kbGVyczIub25Db21wb3NpdGlvbkVuZH0iCiAgICAgICAgICBAbW91c2V1cD0iJHsoZTExKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coIkJsb2NrIG1vdXNldXAgZXZlbnQgZmlyZWQiKTsKICAgICAgICBpZiAoaGFuZGxlcnMyLm9uTW91c2VVcCkKICAgICAgICAgIGhhbmRsZXJzMi5vbk1vdXNlVXAoZTExKTsKICAgICAgfX0iCiAgICAgICAgICAuaW5uZXJIVE1MPSIke3RoaXMucmVuZGVyTGlzdENvbnRlbnQoYmxvY2suY29udGVudCwgYmxvY2subWV0YWRhdGEpfSIKICAgICAgICA+PC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAoYmxvY2sudHlwZSA9PT0gImNvZGUiKSB7CiAgICAgIGNvbnN0IGxhbmd1YWdlID0gYmxvY2subWV0YWRhdGE/Lmxhbmd1YWdlIHx8ICJwbGFpbiB0ZXh0IjsKICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYmxvY2stY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtbGFuZ3VhZ2UiPiR7bGFuZ3VhZ2V9PC9kaXY+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJibG9jayAke2Jsb2NrLnR5cGV9ICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICAgICAgQGlucHV0PSIke2hhbmRsZXJzMi5vbklucHV0fSIKICAgICAgICAgICAgQGtleWRvd249IiR7aGFuZGxlcnMyLm9uS2V5RG93bn0iCiAgICAgICAgICAgIEBmb2N1cz0iJHtoYW5kbGVyczIub25Gb2N1c30iCiAgICAgICAgICAgIEBibHVyPSIke2hhbmRsZXJzMi5vbkJsdXJ9IgogICAgICAgICAgICBAY29tcG9zaXRpb25zdGFydD0iJHtoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0fSIKICAgICAgICAgICAgQGNvbXBvc2l0aW9uZW5kPSIke2hhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kfSIKICAgICAgICAgICAgQG1vdXNldXA9IiR7KGUxMSkgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJCbG9jayBtb3VzZXVwIGV2ZW50IGZpcmVkIik7CiAgICAgICAgaWYgKGhhbmRsZXJzMi5vbk1vdXNlVXApCiAgICAgICAgICBoYW5kbGVyczIub25Nb3VzZVVwKGUxMSk7CiAgICAgIH19IgogICAgICAgICAgICAudGV4dENvbnRlbnQ9IiR7YmxvY2suY29udGVudCB8fCAiIn0iCiAgICAgICAgICA+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBjb25zdCBibG9ja0VsZW1lbnQgPSBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayAke2Jsb2NrLnR5cGV9ICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICAgIEBpbnB1dD0iJHtoYW5kbGVyczIub25JbnB1dH0iCiAgICAgICAgQGtleWRvd249IiR7aGFuZGxlcnMyLm9uS2V5RG93bn0iCiAgICAgICAgQGZvY3VzPSIke2hhbmRsZXJzMi5vbkZvY3VzfSIKICAgICAgICBAYmx1cj0iJHtoYW5kbGVyczIub25CbHVyfSIKICAgICAgICBAY29tcG9zaXRpb25zdGFydD0iJHtoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0fSIKICAgICAgICBAY29tcG9zaXRpb25lbmQ9IiR7aGFuZGxlcnMyLm9uQ29tcG9zaXRpb25FbmR9IgogICAgICAgIEBtb3VzZXVwPSIkeyhlMTEpID0+IHsKICAgICAgY29uc29sZS5sb2coIkJsb2NrIG1vdXNldXAgZXZlbnQgZmlyZWQiKTsKICAgICAgaWYgKGhhbmRsZXJzMi5vbk1vdXNlVXApCiAgICAgICAgaGFuZGxlcnMyLm9uTW91c2VVcChlMTEpOwogICAgfX0iCiAgICAgICAgLmlubmVySFRNTD0iJHtibG9jay5jb250ZW50IHx8ICIifSIKICAgICAgPjwvZGl2PgogICAgYDsKICAgIHJldHVybiBibG9ja0VsZW1lbnQ7CiAgfQogIHN0YXRpYyBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCkgewogICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgaWYgKCFzZWwpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICBpZiAoZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHsKICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXHUyMDBCIik7CiAgICAgIGVsZW1lbnQ0LmFwcGVuZENoaWxkKHRleHROb2RlKTsKICAgICAgcmFuZ2UyLnNldFN0YXJ0KHRleHROb2RlLCAxKTsKICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgbGFzdE5vZGUgPSB0aGlzLmdldExhc3ROb2RlKGVsZW1lbnQ0KTsKICAgICAgaWYgKGxhc3ROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgIHJhbmdlMi5zZXRTdGFydChsYXN0Tm9kZSwgbGFzdE5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByYW5nZTIuc2V0U3RhcnRBZnRlcihsYXN0Tm9kZSk7CiAgICAgIH0KICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgfQogICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOwogICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgICBpZiAoZWxlbWVudDQudGV4dENvbnRlbnQgPT09ICJcdTIwMEIiKSB7CiAgICAgIGVsZW1lbnQ0LnRleHRDb250ZW50ID0gIiI7CiAgICB9CiAgfQogIHN0YXRpYyBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgIGlmIChlbGVtZW50NC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkgewogICAgICByYW5nZTIuc2V0U3RhcnQoZWxlbWVudDQsIDApOwogICAgICByYW5nZTIuY29sbGFwc2UodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBmaXJzdE5vZGUgPSB0aGlzLmdldEZpcnN0Tm9kZShlbGVtZW50NCk7CiAgICAgIGlmIChmaXJzdE5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgICAgcmFuZ2UyLnNldFN0YXJ0KGZpcnN0Tm9kZSwgMCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmFuZ2UyLnNldFN0YXJ0QmVmb3JlKGZpcnN0Tm9kZSk7CiAgICAgIH0KICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgfQogICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOwogICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgfQogIHN0YXRpYyBnZXRMYXN0Tm9kZShlbGVtZW50NCkgewogICAgaWYgKGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH0KICAgIGNvbnN0IGxhc3RDaGlsZCA9IGVsZW1lbnQ0LmNoaWxkTm9kZXNbZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXTsKICAgIGlmIChsYXN0Q2hpbGQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFIHx8IGxhc3RDaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gbGFzdENoaWxkOwogICAgfQogICAgcmV0dXJuIHRoaXMuZ2V0TGFzdE5vZGUobGFzdENoaWxkKTsKICB9CiAgc3RhdGljIGdldEZpcnN0Tm9kZShlbGVtZW50NCkgewogICAgaWYgKGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH0KICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBlbGVtZW50NC5jaGlsZE5vZGVzWzBdOwogICAgaWYgKGZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFIHx8IGZpcnN0Q2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQ7CiAgICB9CiAgICByZXR1cm4gdGhpcy5nZXRGaXJzdE5vZGUoZmlyc3RDaGlsZCk7CiAgfQogIHN0YXRpYyBmb2N1c0xpc3RJdGVtKGxpc3RFbGVtZW50KSB7CiAgICBjb25zdCBmaXJzdExpID0gbGlzdEVsZW1lbnQucXVlcnlTZWxlY3RvcigibGkiKTsKICAgIGlmIChmaXJzdExpKSB7CiAgICAgIGZpcnN0TGkuZm9jdXMoKTsKICAgICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICByYW5nZTIuc2VsZWN0Tm9kZUNvbnRlbnRzKGZpcnN0TGkpOwogICAgICByYW5nZTIuY29sbGFwc2UodHJ1ZSk7CiAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgICB9CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmJsb2Nrb3BlcmF0aW9ucy5qcwp2YXIgV3lzaXd5Z0Jsb2NrT3BlcmF0aW9ucyA9IGNsYXNzIHsKICBjb21wb25lbnQ7CiAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7CiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICB9CiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBibG9jayB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycwogICAqLwogIGNyZWF0ZUJsb2NrKHR5cGU1ID0gInBhcmFncmFwaCIsIGNvbnRlbnQzID0gIiIsIG1ldGFkYXRhKSB7CiAgICByZXR1cm4gewogICAgICBpZDogV3lzaXd5Z1Nob3J0Y3V0cy5nZW5lcmF0ZUJsb2NrSWQoKSwKICAgICAgdHlwZTogdHlwZTUsCiAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICAuLi5tZXRhZGF0YSAmJiB7IG1ldGFkYXRhIH0KICAgIH07CiAgfQogIC8qKgogICAqIEluc2VydHMgYSBibG9jayBhZnRlciB0aGUgc3BlY2lmaWVkIGJsb2NrCiAgICovCiAgYXN5bmMgaW5zZXJ0QmxvY2tBZnRlcihhZnRlckJsb2NrLCBuZXdCbG9jaywgZm9jdXNOZXdCbG9jayA9IHRydWUpIHsKICAgIGNvbnN0IGJsb2NrcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrczsKICAgIGNvbnN0IGJsb2NrSW5kZXggPSBibG9ja3MuZmluZEluZGV4KChiNSkgPT4gYjUuaWQgPT09IGFmdGVyQmxvY2suaWQpOwogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gWwogICAgICAuLi5ibG9ja3Muc2xpY2UoMCwgYmxvY2tJbmRleCArIDEpLAogICAgICBuZXdCbG9jaywKICAgICAgLi4uYmxvY2tzLnNsaWNlKGJsb2NrSW5kZXggKyAxKQogICAgXTsKICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgIGNvbnN0IGFmdGVyV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YWZ0ZXJCbG9jay5pZH0iXWApOwogICAgICBpZiAoYWZ0ZXJXcmFwcGVyKSB7CiAgICAgICAgY29uc3QgbmV3V3JhcHBlciA9IHRoaXMuY29tcG9uZW50LmNyZWF0ZUJsb2NrRWxlbWVudChuZXdCbG9jayk7CiAgICAgICAgYWZ0ZXJXcmFwcGVyLmluc2VydEFkamFjZW50RWxlbWVudCgiYWZ0ZXJlbmQiLCBuZXdXcmFwcGVyKTsKICAgICAgfQogICAgfQogICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgIGlmIChmb2N1c05ld0Jsb2NrICYmIG5ld0Jsb2NrLnR5cGUgIT09ICJkaXZpZGVyIikgewogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDApKTsKICAgICAgYXdhaXQgdGhpcy5mb2N1c0Jsb2NrKG5ld0Jsb2NrLmlkLCAic3RhcnQiKTsKICAgIH0KICB9CiAgLyoqCiAgICogUmVtb3ZlcyBhIGJsb2NrIGJ5IGl0cyBJRAogICAqLwogIHJlbW92ZUJsb2NrKGJsb2NrSWQpIHsKICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gdGhpcy5jb21wb25lbnQuYmxvY2tzLmZpbHRlcigoYjUpID0+IGI1LmlkICE9PSBibG9ja0lkKTsKICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrSWR9Il1gKTsKICAgICAgaWYgKHdyYXBwZXIpIHsKICAgICAgICB3cmFwcGVyLnJlbW92ZSgpOwogICAgICB9CiAgICB9CiAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogIH0KICAvKioKICAgKiBGaW5kcyBhIGJsb2NrIGJ5IGl0cyBJRAogICAqLwogIGZpbmRCbG9jayhibG9ja0lkKSB7CiAgICByZXR1cm4gdGhpcy5jb21wb25lbnQuYmxvY2tzLmZpbmQoKGI1KSA9PiBiNS5pZCA9PT0gYmxvY2tJZCk7CiAgfQogIC8qKgogICAqIEdldHMgdGhlIGluZGV4IG9mIGEgYmxvY2sKICAgKi8KICBnZXRCbG9ja0luZGV4KGJsb2NrSWQpIHsKICAgIHJldHVybiB0aGlzLmNvbXBvbmVudC5ibG9ja3MuZmluZEluZGV4KChiNSkgPT4gYjUuaWQgPT09IGJsb2NrSWQpOwogIH0KICAvKioKICAgKiBGb2N1c2VzIGEgc3BlY2lmaWMgYmxvY2sKICAgKi8KICBhc3luYyBmb2N1c0Jsb2NrKGJsb2NrSWQsIGN1cnNvclBvc2l0aW9uID0gInN0YXJ0IikgewogICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0aGlzLmNvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrSWR9Il1gKTsKICAgIGlmICh3cmFwcGVyRWxlbWVudCkgewogICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICBpZiAoYmxvY2tDb21wb25lbnQpIHsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICAgIGJsb2NrQ29tcG9uZW50LmZvY3VzV2l0aEN1cnNvcihjdXJzb3JQb3NpdGlvbik7CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogVXBkYXRlcyB0aGUgY29udGVudCBvZiBhIGJsb2NrCiAgICovCiAgdXBkYXRlQmxvY2tDb250ZW50KGJsb2NrSWQsIGNvbnRlbnQzKSB7CiAgICBjb25zdCBibG9jayA9IHRoaXMuZmluZEJsb2NrKGJsb2NrSWQpOwogICAgaWYgKGJsb2NrKSB7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBjb250ZW50MzsKICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgIH0KICB9CiAgLyoqCiAgICogVHJhbnNmb3JtcyBhIGJsb2NrIHRvIGEgZGlmZmVyZW50IHR5cGUKICAgKi8KICB0cmFuc2Zvcm1CbG9jayhibG9ja0lkLCBuZXdUeXBlLCBtZXRhZGF0YSkgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmZpbmRCbG9jayhibG9ja0lkKTsKICAgIGlmIChibG9jaykgewogICAgICB0aGlzLmNvbXBvbmVudC5zYXZlVG9IaXN0b3J5KGZhbHNlKTsKICAgICAgYmxvY2sudHlwZSA9IG5ld1R5cGU7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgaWYgKG1ldGFkYXRhKSB7CiAgICAgICAgYmxvY2subWV0YWRhdGEgPSBtZXRhZGF0YTsKICAgICAgfQogICAgICBpZiAodGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChibG9ja0lkKTsKICAgICAgfQogICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgfQogIH0KICAvKioKICAgKiBNb3ZlcyBhIGJsb2NrIHRvIGEgbmV3IHBvc2l0aW9uCiAgICovCiAgbW92ZUJsb2NrKGJsb2NrSWQsIHRhcmdldEluZGV4KSB7CiAgICBjb25zdCBibG9ja3MgPSBbLi4udGhpcy5jb21wb25lbnQuYmxvY2tzXTsKICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0QmxvY2tJbmRleChibG9ja0lkKTsKICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xIHx8IHRhcmdldEluZGV4IDwgMCB8fCB0YXJnZXRJbmRleCA+PSBibG9ja3MubGVuZ3RoKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IFttb3ZlZEJsb2NrXSA9IGJsb2Nrcy5zcGxpY2UoY3VycmVudEluZGV4LCAxKTsKICAgIGJsb2Nrcy5zcGxpY2UodGFyZ2V0SW5kZXgsIDAsIG1vdmVkQmxvY2spOwogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gYmxvY2tzOwogICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICB9CiAgLyoqCiAgICogR2V0cyB0aGUgcHJldmlvdXMgYmxvY2sKICAgKi8KICBnZXRQcmV2aW91c0Jsb2NrKGJsb2NrSWQpIHsKICAgIGNvbnN0IGluZGV4MiA9IHRoaXMuZ2V0QmxvY2tJbmRleChibG9ja0lkKTsKICAgIHJldHVybiBpbmRleDIgPiAwID8gdGhpcy5jb21wb25lbnQuYmxvY2tzW2luZGV4MiAtIDFdIDogbnVsbDsKICB9CiAgLyoqCiAgICogR2V0cyB0aGUgbmV4dCBibG9jawogICAqLwogIGdldE5leHRCbG9jayhibG9ja0lkKSB7CiAgICBjb25zdCBpbmRleDIgPSB0aGlzLmdldEJsb2NrSW5kZXgoYmxvY2tJZCk7CiAgICByZXR1cm4gaW5kZXgyIDwgdGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aCAtIDEgPyB0aGlzLmNvbXBvbmVudC5ibG9ja3NbaW5kZXgyICsgMV0gOiBudWxsOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL2Jsb2NrLmJhc2UuanMKdmFyIEJhc2VCbG9ja0hhbmRsZXIgPSBjbGFzcyB7CiAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgY29tbW9uIHNldHVwCiAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICB9CiAgLy8gQ29tbW9uIHN0eWxlcyBjYW4gYmUgZGVmaW5lZCBoZXJlCiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuICIiOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL2Jsb2NrLnJlZ2lzdHJ5LmpzCnZhciBCbG9ja1JlZ2lzdHJ5ID0gY2xhc3MgewogIHN0YXRpYyBoYW5kbGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgc3RhdGljIHJlZ2lzdGVyKHR5cGU1LCBoYW5kbGVyMikgewogICAgdGhpcy5oYW5kbGVycy5zZXQodHlwZTUsIGhhbmRsZXIyKTsKICB9CiAgc3RhdGljIGdldEhhbmRsZXIodHlwZTUpIHsKICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmdldCh0eXBlNSk7CiAgfQogIHN0YXRpYyBnZXRBbGxUeXBlcygpIHsKICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuaGFuZGxlcnMua2V5cygpKTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy90ZXh0L3BhcmFncmFwaC5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgUGFyYWdyYXBoQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gInBhcmFncmFwaCI7CiAgLy8gVHJhY2sgY3Vyc29yIHBvc2l0aW9uCiAgbGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSAwOwogIGxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICBzZWxlY3Rpb25IYW5kbGVyID0gbnVsbDsKICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSBpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIjsKICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5nZXRQbGFjZWhvbGRlcigpOwogICAgcmV0dXJuIGAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayBwYXJhZ3JhcGgke3NlbGVjdGVkQ2xhc3N9IgogICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICBkYXRhLXBsYWNlaG9sZGVyPSIke3BsYWNlaG9sZGVyfSIKICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICBkYXRhLWJsb2NrLXR5cGU9IiR7YmxvY2sudHlwZX0iCiAgICAgID48L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmICghcGFyYWdyYXBoQmxvY2spIHsKICAgICAgY29uc29sZS5lcnJvcigiUGFyYWdyYXBoQmxvY2tIYW5kbGVyLnNldHVwOiBObyBwYXJhZ3JhcGggYmxvY2sgZWxlbWVudCBmb3VuZCIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoYmxvY2suY29udGVudCAmJiAhcGFyYWdyYXBoQmxvY2suaW5uZXJIVE1MKSB7CiAgICAgIHBhcmFncmFwaEJsb2NrLmlubmVySFRNTCA9IGJsb2NrLmNvbnRlbnQ7CiAgICB9CiAgICBwYXJhZ3JhcGhCbG9jay5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIChlMTEpID0+IHsKICAgICAgaGFuZGxlcnMyLm9uSW5wdXQoZTExKTsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICB9KTsKICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICB9KTsKICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Gb2N1cygpOwogICAgfSk7CiAgICBwYXJhZ3JhcGhCbG9jay5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25CbHVyKCk7CiAgICB9KTsKICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uU3RhcnQoKTsKICAgIH0pOwogICAgcGFyYWdyYXBoQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kKCk7CiAgICB9KTsKICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgICBoYW5kbGVyczIub25Nb3VzZVVwPy4oZTExKTsKICAgIH0pOwogICAgcGFyYWdyYXBoQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZTExKSA9PiB7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgfQogICAgICB9LCAwKTsKICAgIH0pOwogICAgcGFyYWdyYXBoQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICB0aGlzLnNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgcGFyYWdyYXBoQmxvY2ssIGJsb2NrKTsKICB9CiAgc2V0dXBTZWxlY3Rpb25IYW5kbGVyKGVsZW1lbnQ0LCBwYXJhZ3JhcGhCbG9jaywgYmxvY2spIHsKICAgIGNvbnN0IGNoZWNrU2VsZWN0aW9uID0gKCkgPT4gewogICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7CiAgICAgIGlmIChzZWxlY3RlZFRleHQubGVuZ3RoID09PSAwKSB7CiAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICBoYXNTZWxlY3Rpb246IGZhbHNlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHd5c2l3eWdCbG9jazIgPSBwYXJhZ3JhcGhCbG9jay5nZXRSb290Tm9kZSgpLmhvc3Q7CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jazI/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSB3eXNpd3lnQmxvY2syPy5zaGFkb3dSb290OwogICAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICAgIGlmICghc2VsZWN0aW9uSW5mbykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHN0YXJ0SW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00ocGFyYWdyYXBoQmxvY2ssIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpOwogICAgICBjb25zdCBlbmRJbkJsb2NrID0gV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShwYXJhZ3JhcGhCbG9jaywgc2VsZWN0aW9uSW5mby5lbmRDb250YWluZXIpOwogICAgICBpZiAoc3RhcnRJbkJsb2NrIHx8IGVuZEluQmxvY2spIHsKICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0ICE9PSB0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9IHNlbGVjdGVkVGV4dDsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgICAgIGNvbnN0IHJlY3QgPSByYW5nZTIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgdGV4dDogc2VsZWN0ZWRUZXh0LnRyaW0oKSwKICAgICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQsCiAgICAgICAgICAgIHJhbmdlOiByYW5nZTIsCiAgICAgICAgICAgIHJlY3QsCiAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIGNoZWNrU2VsZWN0aW9uKTsKICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IGNoZWNrU2VsZWN0aW9uOwogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gZWxlbWVudDQuY2xvc2VzdCgiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICBpZiAod3lzaXd5Z0Jsb2NrKSB7CiAgICAgIGNvbnN0IG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2sgPSB3eXNpd3lnQmxvY2suZGlzY29ubmVjdGVkQ2FsbGJhY2s7CiAgICAgIHd5c2l3eWdCbG9jay5kaXNjb25uZWN0ZWRDYWxsYmFjayA9IGFzeW5jIGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkhhbmRsZXIpIHsKICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIHRoaXMuc2VsZWN0aW9uSGFuZGxlcik7CiAgICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIgPSBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAob3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjaykgewogICAgICAgICAgYXdhaXQgb3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjay5jYWxsKHd5c2l3eWdCbG9jayk7CiAgICAgICAgfQogICAgICB9LmJpbmQodGhpcyk7CiAgICB9CiAgfQogIGRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIGRldGFpbCkgewogICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLCB7CiAgICAgIGRldGFpbCwKICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgY29tcG9zZWQ6IHRydWUKICAgIH0pOwogICAgZWxlbWVudDQuZGlzcGF0Y2hFdmVudChldmVudCk7CiAgfQogIGdldFN0eWxlcygpIHsKICAgIHJldHVybiBgCiAgICAgIC8qIFBhcmFncmFwaCBzcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgLmJsb2NrLnBhcmFncmFwaCB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgfQogICAgYDsKICB9CiAgZ2V0UGxhY2Vob2xkZXIoKSB7CiAgICByZXR1cm4gIlR5cGUgJy8nIGZvciBjb21tYW5kcy4uLiI7CiAgfQogIC8qKgogICAqIEhlbHBlciB0byBnZXQgdGhlIGxhc3QgdGV4dCBub2RlIGluIGFuIGVsZW1lbnQKICAgKi8KICBnZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQpIHsKICAgIGlmIChlbGVtZW50NC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgfQogICAgZm9yIChsZXQgaTExID0gZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgY29uc3QgbGFzdFRleHQgPSB0aGlzLmdldExhc3RUZXh0Tm9kZShlbGVtZW50NC5jaGlsZE5vZGVzW2kxMV0pOwogICAgICBpZiAobGFzdFRleHQpCiAgICAgICAgcmV0dXJuIGxhc3RUZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIC8vIEhlbHBlciBtZXRob2RzIGZvciBwYXJhZ3JhcGggZnVuY3Rpb25hbGl0eQogIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0LCBjb250ZXh0MikgewogICAgY29uc3QgcGFyYWdyYXBoQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucGFyYWdyYXBoIik7CiAgICBpZiAoIXBhcmFncmFwaEJsb2NrKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gY29udGV4dDI/LmNvbXBvbmVudDsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jaz8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gY29udGV4dDI/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShwYXJhZ3JhcGhCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcikpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCBwcmVDYXJldFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHBhcmFncmFwaEJsb2NrKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgY29uc3QgcG9zaXRpb24zID0gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpLmxlbmd0aDsKICAgIHJldHVybiBwb3NpdGlvbjM7CiAgfQogIGdldENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmICghcGFyYWdyYXBoQmxvY2spCiAgICAgIHJldHVybiAiIjsKICAgIGNvbnN0IGNvbnRlbnQzID0gcGFyYWdyYXBoQmxvY2suaW5uZXJIVE1MIHx8ICIiOwogICAgcmV0dXJuIGNvbnRlbnQzOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MywgY29udGV4dDIpIHsKICAgIGNvbnN0IHBhcmFncmFwaEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpOwogICAgaWYgKCFwYXJhZ3JhcGhCbG9jaykKICAgICAgcmV0dXJuOwogICAgY29uc3QgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBwYXJhZ3JhcGhCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBwYXJhZ3JhcGhCbG9jazsKICAgIHBhcmFncmFwaEJsb2NrLmlubmVySFRNTCA9IGNvbnRlbnQzOwogICAgaWYgKGhhZEZvY3VzKSB7CiAgICAgIHBhcmFncmFwaEJsb2NrLmZvY3VzKCk7CiAgICB9CiAgfQogIHNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmIChwYXJhZ3JhcGhCbG9jaykgewogICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvU3RhcnQocGFyYWdyYXBoQmxvY2spOwogICAgfQogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IHBhcmFncmFwaEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpOwogICAgaWYgKHBhcmFncmFwaEJsb2NrKSB7CiAgICAgIFd5c2l3eWdCbG9ja3Muc2V0Q3Vyc29yVG9FbmQocGFyYWdyYXBoQmxvY2spOwogICAgfQogIH0KICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IHBhcmFncmFwaEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpOwogICAgaWYgKCFwYXJhZ3JhcGhCbG9jaykKICAgICAgcmV0dXJuOwogICAgaWYgKCFwYXJhZ3JhcGhCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgIHBhcmFncmFwaEJsb2NrLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgInRydWUiKTsKICAgIH0KICAgIHBhcmFncmFwaEJsb2NrLmZvY3VzKCk7CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gcGFyYWdyYXBoQmxvY2sgJiYgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCAhPT0gcGFyYWdyYXBoQmxvY2spIHsKICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgcGFyYWdyYXBoQmxvY2suZm9jdXMoKTsKICAgICAgfSk7CiAgICB9CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIsIGNvbnRleHQyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmICghcGFyYWdyYXBoQmxvY2spCiAgICAgIHJldHVybjsKICAgIGlmICghcGFyYWdyYXBoQmxvY2suaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSkgewogICAgICBwYXJhZ3JhcGhCbG9jay5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICB9CiAgICBpZiAocG9zaXRpb24zID09PSAiZW5kIiAmJiBwYXJhZ3JhcGhCbG9jay50ZXh0Q29udGVudCAmJiBwYXJhZ3JhcGhCbG9jay50ZXh0Q29udGVudC5sZW5ndGggPiAwKSB7CiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgaWYgKHNlbCkgewogICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgY29uc3QgbGFzdE5vZGUgPSB0aGlzLmdldExhc3RUZXh0Tm9kZShwYXJhZ3JhcGhCbG9jaykgfHwgcGFyYWdyYXBoQmxvY2s7CiAgICAgICAgaWYgKGxhc3ROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgICAgcmFuZ2UyLnNldFN0YXJ0KGxhc3ROb2RlLCBsYXN0Tm9kZS50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDApOwogICAgICAgICAgcmFuZ2UyLnNldEVuZChsYXN0Tm9kZSwgbGFzdE5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmFuZ2UyLnNlbGVjdE5vZGVDb250ZW50cyhsYXN0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuY29sbGFwc2UoZmFsc2UpOwogICAgICAgIH0KICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgIH0KICAgIH0KICAgIHBhcmFncmFwaEJsb2NrLmZvY3VzKCk7CiAgICBjb25zdCBzZXRDdXJzb3IgPSAoKSA9PiB7CiAgICAgIGlmIChwb3NpdGlvbjMgPT09ICJzdGFydCIpIHsKICAgICAgICB0aGlzLnNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbjMgPT09ICJlbmQiICYmICghcGFyYWdyYXBoQmxvY2sudGV4dENvbnRlbnQgfHwgcGFyYWdyYXBoQmxvY2sudGV4dENvbnRlbnQubGVuZ3RoID09PSAwKSkgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcG9zaXRpb24zID09PSAibnVtYmVyIikgewogICAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24ocGFyYWdyYXBoQmxvY2ssIHBvc2l0aW9uMyk7CiAgICAgIH0KICAgIH07CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2spIHsKICAgICAgc2V0Q3Vyc29yKCk7CiAgICB9IGVsc2UgewogICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHsKICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2spIHsKICAgICAgICAgIHNldEN1cnNvcigpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHBhcmFncmFwaEJsb2NrIHx8IGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IHBhcmFncmFwaEJsb2NrKSB7CiAgICAgICAgICAgICAgc2V0Q3Vyc29yKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIDEwKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KICBnZXRTcGxpdENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmICghcGFyYWdyYXBoQmxvY2spIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCB3eXNpd3lnQmxvY2sgPSBjb250ZXh0Mj8uY29tcG9uZW50OwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gd3lzaXd5Z0Jsb2NrPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSBjb250ZXh0Mj8uc2hhZG93Um9vdDsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgIGlmIChibG9ja1NoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgaWYgKCFzZWxlY3Rpb25JbmZvKSB7CiAgICAgIGlmICh0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uICE9PSBudWxsKSB7CiAgICAgICAgY29uc3QgZnVsbFRleHQgPSBwYXJhZ3JhcGhCbG9jay50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBiZWZvcmU6IGZ1bGxUZXh0LnN1YnN0cmluZygwLCBwb3MpLAogICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShwYXJhZ3JhcGhCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcikpIHsKICAgICAgaWYgKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gIT09IG51bGwpIHsKICAgICAgICBjb25zdCBmdWxsVGV4dCA9IHBhcmFncmFwaEJsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgIGNvbnN0IHBvcyA9IE1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sIGZ1bGxUZXh0Lmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgY3Vyc29yUG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpOwogICAgaWYgKGN1cnNvclBvcyA9PT0gbnVsbCB8fCBjdXJzb3JQb3MgPT09IDApIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBiZWZvcmU6ICIiLAogICAgICAgIGFmdGVyOiBwYXJhZ3JhcGhCbG9jay5pbm5lckhUTUwKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IGJlZm9yZVJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgIGNvbnN0IGFmdGVyUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgYmVmb3JlUmFuZ2Uuc2V0U3RhcnQocGFyYWdyYXBoQmxvY2ssIDApOwogICAgYmVmb3JlUmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgYWZ0ZXJSYW5nZS5zZXRTdGFydChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgIGFmdGVyUmFuZ2Uuc2V0RW5kKHBhcmFncmFwaEJsb2NrLCBwYXJhZ3JhcGhCbG9jay5jaGlsZE5vZGVzLmxlbmd0aCk7CiAgICBjb25zdCBiZWZvcmVGcmFnbWVudCA9IGJlZm9yZVJhbmdlLmNsb25lQ29udGVudHMoKTsKICAgIGNvbnN0IGFmdGVyRnJhZ21lbnQgPSBhZnRlclJhbmdlLmNsb25lQ29udGVudHMoKTsKICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHRlbXBEaXYuYXBwZW5kQ2hpbGQoYmVmb3JlRnJhZ21lbnQpOwogICAgY29uc3QgYmVmb3JlSHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgdGVtcERpdi5pbm5lckhUTUwgPSAiIjsKICAgIHRlbXBEaXYuYXBwZW5kQ2hpbGQoYWZ0ZXJGcmFnbWVudCk7CiAgICBjb25zdCBhZnRlckh0bWwgPSB0ZW1wRGl2LmlubmVySFRNTDsKICAgIHJldHVybiB7CiAgICAgIGJlZm9yZTogYmVmb3JlSHRtbCwKICAgICAgYWZ0ZXI6IGFmdGVySHRtbAogICAgfTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy90ZXh0L2hlYWRpbmcuYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIEhlYWRpbmdCbG9ja0hhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEJhc2VCbG9ja0hhbmRsZXIgewogIHR5cGU7CiAgbGV2ZWw7CiAgLy8gVHJhY2sgY3Vyc29yIHBvc2l0aW9uCiAgbGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSAwOwogIGxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICBzZWxlY3Rpb25IYW5kbGVyID0gbnVsbDsKICBjb25zdHJ1Y3Rvcih0eXBlNSkgewogICAgc3VwZXIoKTsKICAgIHRoaXMudHlwZSA9IHR5cGU1OwogICAgdGhpcy5sZXZlbCA9IHBhcnNlSW50KHR5cGU1LnNwbGl0KCItIilbMV0pOwogIH0KICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSBpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIjsKICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5nZXRQbGFjZWhvbGRlcigpOwogICAgcmV0dXJuIGAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayBoZWFkaW5nLSR7dGhpcy5sZXZlbH0ke3NlbGVjdGVkQ2xhc3N9IgogICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICBkYXRhLXBsYWNlaG9sZGVyPSIke3BsYWNlaG9sZGVyfSIKICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICBkYXRhLWJsb2NrLXR5cGU9IiR7YmxvY2sudHlwZX0iCiAgICAgID48L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICBpZiAoIWhlYWRpbmdCbG9jaykgewogICAgICBjb25zb2xlLmVycm9yKCJIZWFkaW5nQmxvY2tIYW5kbGVyLnNldHVwOiBObyBoZWFkaW5nIGJsb2NrIGVsZW1lbnQgZm91bmQiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGJsb2NrLmNvbnRlbnQgJiYgIWhlYWRpbmdCbG9jay5pbm5lckhUTUwpIHsKICAgICAgaGVhZGluZ0Jsb2NrLmlubmVySFRNTCA9IGJsb2NrLmNvbnRlbnQ7CiAgICB9CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoZTExKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbklucHV0KGUxMSk7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgIH0pOwogICAgaGVhZGluZ0Jsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Gb2N1cygpOwogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgaGFuZGxlcnMyLm9uQmx1cigpOwogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25zdGFydCIsICgpID0+IHsKICAgICAgaGFuZGxlcnMyLm9uQ29tcG9zaXRpb25TdGFydCgpOwogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kKCk7CiAgICB9KTsKICAgIGhlYWRpbmdCbG9jay5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgKGUxMSkgPT4gewogICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uTW91c2VVcD8uKGUxMSk7CiAgICB9KTsKICAgIGhlYWRpbmdCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICB9CiAgICAgIH0sIDApOwogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICB0aGlzLnNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgaGVhZGluZ0Jsb2NrLCBibG9jayk7CiAgfQogIHNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgaGVhZGluZ0Jsb2NrLCBibG9jaykgewogICAgY29uc3QgY2hlY2tTZWxlY3Rpb24gPSAoKSA9PiB7CiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBzZWxlY3RlZFRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTsKICAgICAgaWYgKHNlbGVjdGVkVGV4dC5sZW5ndGggPT09IDApIHsKICAgICAgICBpZiAodGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgICB0ZXh0OiAiIiwKICAgICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQsCiAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgd3lzaXd5Z0Jsb2NrMiA9IGhlYWRpbmdCbG9jay5nZXRSb290Tm9kZSgpLmhvc3Q7CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jazI/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSB3eXNpd3lnQmxvY2syPy5zaGFkb3dSb290OwogICAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICAgIGlmICghc2VsZWN0aW9uSW5mbykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHN0YXJ0SW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oaGVhZGluZ0Jsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKTsKICAgICAgY29uc3QgZW5kSW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oaGVhZGluZ0Jsb2NrLCBzZWxlY3Rpb25JbmZvLmVuZENvbnRhaW5lcik7CiAgICAgIGlmIChzdGFydEluQmxvY2sgfHwgZW5kSW5CbG9jaykgewogICAgICAgIGlmIChzZWxlY3RlZFRleHQgIT09IHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gc2VsZWN0ZWRUZXh0OwogICAgICAgICAgY29uc3QgcmFuZ2UyID0gV3lzaXd5Z1NlbGVjdGlvbi5jcmVhdGVSYW5nZUZyb21JbmZvKHNlbGVjdGlvbkluZm8pOwogICAgICAgICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgICB0ZXh0OiBzZWxlY3RlZFRleHQudHJpbSgpLAogICAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgICAgcmFuZ2U6IHJhbmdlMiwKICAgICAgICAgICAgcmVjdCwKICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgdGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCB7CiAgICAgICAgICB0ZXh0OiAiIiwKICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgaGFzU2VsZWN0aW9uOiBmYWxzZQogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgY2hlY2tTZWxlY3Rpb24pOwogICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gY2hlY2tTZWxlY3Rpb247CiAgICBjb25zdCB3eXNpd3lnQmxvY2sgPSBoZWFkaW5nQmxvY2suZ2V0Um9vdE5vZGUoKS5ob3N0OwogICAgaWYgKHd5c2l3eWdCbG9jaykgewogICAgICBjb25zdCBvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrID0gd3lzaXd5Z0Jsb2NrLmRpc2Nvbm5lY3RlZENhbGxiYWNrOwogICAgICB3eXNpd3lnQmxvY2suZGlzY29ubmVjdGVkQ2FsbGJhY2sgPSBhc3luYyBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25IYW5kbGVyKSB7CiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCB0aGlzLnNlbGVjdGlvbkhhbmRsZXIpOwogICAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2spIHsKICAgICAgICAgIGF3YWl0IG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh3eXNpd3lnQmxvY2spOwogICAgICAgIH0KICAgICAgfS5iaW5kKHRoaXMpOwogICAgfQogIH0KICBkaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCBkZXRhaWwpIHsKICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCJibG9jay10ZXh0LXNlbGVjdGVkIiwgewogICAgICBkZXRhaWwsCiAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICB9KTsKICAgIGVsZW1lbnQ0LmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogIH0KICBnZXRTdHlsZXMoKSB7CiAgICByZXR1cm4gYAogICAgICAuYmxvY2suaGVhZGluZy0xIHsKICAgICAgICBmb250LXNpemU6IDMycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgICAgIG1hcmdpbjogMjRweCAwIDhweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAuYmxvY2suaGVhZGluZy0yIHsKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICAgIG1hcmdpbjogMjBweCAwIDZweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAuYmxvY2suaGVhZGluZy0zIHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICAgIG1hcmdpbjogMTZweCAwIDRweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CiAgICBgOwogIH0KICBnZXRQbGFjZWhvbGRlcigpIHsKICAgIHN3aXRjaCAodGhpcy5sZXZlbCkgewogICAgICBjYXNlIDE6CiAgICAgICAgcmV0dXJuICJIZWFkaW5nIDEiOwogICAgICBjYXNlIDI6CiAgICAgICAgcmV0dXJuICJIZWFkaW5nIDIiOwogICAgICBjYXNlIDM6CiAgICAgICAgcmV0dXJuICJIZWFkaW5nIDMiOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiAiSGVhZGluZyI7CiAgICB9CiAgfQogIC8qKgogICAqIEhlbHBlciB0byBnZXQgdGhlIGxhc3QgdGV4dCBub2RlIGluIGFuIGVsZW1lbnQKICAgKi8KICBnZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQpIHsKICAgIGlmIChlbGVtZW50NC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgfQogICAgZm9yIChsZXQgaTExID0gZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgY29uc3QgbGFzdFRleHQgPSB0aGlzLmdldExhc3RUZXh0Tm9kZShlbGVtZW50NC5jaGlsZE5vZGVzW2kxMV0pOwogICAgICBpZiAobGFzdFRleHQpCiAgICAgICAgcmV0dXJuIGxhc3RUZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIC8vIEhlbHBlciBtZXRob2RzIGZvciBoZWFkaW5nIGZ1bmN0aW9uYWxpdHkgKG1vc3RseSB0aGUgc2FtZSBhcyBwYXJhZ3JhcGgpCiAgZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICBpZiAoIWhlYWRpbmdCbG9jaykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHd5c2l3eWdCbG9jayA9IGNvbnRleHQyPy5jb21wb25lbnQ7CiAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB3eXNpd3lnQmxvY2s/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgY29uc3QgcGFyZW50U2hhZG93Um9vdCA9IHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdDsKICAgIGNvbnN0IGJsb2NrU2hhZG93Um9vdCA9IGNvbnRleHQyPy5zaGFkb3dSb290OwogICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgIGlmIChwYXJlbnRTaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgaWYgKGJsb2NrU2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChibG9ja1NoYWRvd1Jvb3QpOwogICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICBpZiAoIXNlbGVjdGlvbkluZm8pIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoIVd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oaGVhZGluZ0Jsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgcHJlQ2FyZXRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoaGVhZGluZ0Jsb2NrKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgY29uc3QgcG9zaXRpb24zID0gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpLmxlbmd0aDsKICAgIHJldHVybiBwb3NpdGlvbjM7CiAgfQogIGdldENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICBpZiAoIWhlYWRpbmdCbG9jaykKICAgICAgcmV0dXJuICIiOwogICAgY29uc3QgY29udGVudDMgPSBoZWFkaW5nQmxvY2suaW5uZXJIVE1MIHx8ICIiOwogICAgcmV0dXJuIGNvbnRlbnQzOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MywgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmICghaGVhZGluZ0Jsb2NrKQogICAgICByZXR1cm47CiAgICBjb25zdCBoYWRGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGhlYWRpbmdCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2s7CiAgICBoZWFkaW5nQmxvY2suaW5uZXJIVE1MID0gY29udGVudDM7CiAgICBpZiAoaGFkRm9jdXMpIHsKICAgICAgaGVhZGluZ0Jsb2NrLmZvY3VzKCk7CiAgICB9CiAgfQogIHNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICBpZiAoaGVhZGluZ0Jsb2NrKSB7CiAgICAgIFd5c2l3eWdCbG9ja3Muc2V0Q3Vyc29yVG9TdGFydChoZWFkaW5nQmxvY2spOwogICAgfQogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmIChoZWFkaW5nQmxvY2spIHsKICAgICAgV3lzaXd5Z0Jsb2Nrcy5zZXRDdXJzb3JUb0VuZChoZWFkaW5nQmxvY2spOwogICAgfQogIH0KICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmICghaGVhZGluZ0Jsb2NrKQogICAgICByZXR1cm47CiAgICBpZiAoIWhlYWRpbmdCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgIGhlYWRpbmdCbG9jay5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICB9CiAgICBoZWFkaW5nQmxvY2suZm9jdXMoKTsKICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBoZWFkaW5nQmxvY2sgJiYgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCAhPT0gaGVhZGluZ0Jsb2NrKSB7CiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gewogICAgICAgIGhlYWRpbmdCbG9jay5mb2N1cygpOwogICAgICB9KTsKICAgIH0KICB9CiAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIiwgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmICghaGVhZGluZ0Jsb2NrKQogICAgICByZXR1cm47CiAgICBpZiAoIWhlYWRpbmdCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgIGhlYWRpbmdCbG9jay5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICB9CiAgICBpZiAocG9zaXRpb24zID09PSAiZW5kIiAmJiBoZWFkaW5nQmxvY2sudGV4dENvbnRlbnQgJiYgaGVhZGluZ0Jsb2NrLnRleHRDb250ZW50Lmxlbmd0aCA+IDApIHsKICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBpZiAoc2VsKSB7CiAgICAgICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICBjb25zdCBsYXN0Tm9kZSA9IHRoaXMuZ2V0TGFzdFRleHROb2RlKGhlYWRpbmdCbG9jaykgfHwgaGVhZGluZ0Jsb2NrOwogICAgICAgIGlmIChsYXN0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgICAgIHJhbmdlMi5zZXRTdGFydChsYXN0Tm9kZSwgbGFzdE5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwKTsKICAgICAgICAgIHJhbmdlMi5zZXRFbmQobGFzdE5vZGUsIGxhc3ROb2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJhbmdlMi5zZWxlY3ROb2RlQ29udGVudHMobGFzdE5vZGUpOwogICAgICAgICAgcmFuZ2UyLmNvbGxhcHNlKGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgIHNlbC5hZGRSYW5nZShyYW5nZTIpOwogICAgICB9CiAgICB9CiAgICBoZWFkaW5nQmxvY2suZm9jdXMoKTsKICAgIGNvbnN0IHNldEN1cnNvciA9ICgpID0+IHsKICAgICAgaWYgKHBvc2l0aW9uMyA9PT0gInN0YXJ0IikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCwgY29udGV4dDIpOwogICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uMyA9PT0gImVuZCIgJiYgKCFoZWFkaW5nQmxvY2sudGV4dENvbnRlbnQgfHwgaGVhZGluZ0Jsb2NrLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gMCkpIHsKICAgICAgICB0aGlzLnNldEN1cnNvclRvRW5kKGVsZW1lbnQ0LCBjb250ZXh0Mik7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBvc2l0aW9uMyA9PT0gIm51bWJlciIpIHsKICAgICAgICBXeXNpd3lnU2VsZWN0aW9uLnNldEN1cnNvclBvc2l0aW9uKGhlYWRpbmdCbG9jaywgcG9zaXRpb24zKTsKICAgICAgfQogICAgfTsKICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gaGVhZGluZ0Jsb2NrKSB7CiAgICAgIHNldEN1cnNvcigpOwogICAgfSBlbHNlIHsKICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGhlYWRpbmdCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2spIHsKICAgICAgICAgIHNldEN1cnNvcigpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGhlYWRpbmdCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2spIHsKICAgICAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMTApOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQogIGdldFNwbGl0Q29udGVudChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmICghaGVhZGluZ0Jsb2NrKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gY29udGV4dDI/LmNvbXBvbmVudDsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jaz8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gY29udGV4dDI/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICBpZiAodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiAhPT0gbnVsbCkgewogICAgICAgIGNvbnN0IGZ1bGxUZXh0ID0gaGVhZGluZ0Jsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgIGNvbnN0IHBvcyA9IE1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sIGZ1bGxUZXh0Lmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKCFXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGhlYWRpbmdCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcikpIHsKICAgICAgaWYgKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gIT09IG51bGwpIHsKICAgICAgICBjb25zdCBmdWxsVGV4dCA9IGhlYWRpbmdCbG9jay50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBiZWZvcmU6IGZ1bGxUZXh0LnN1YnN0cmluZygwLCBwb3MpLAogICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IGN1cnNvclBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQsIGNvbnRleHQyKTsKICAgIGlmIChjdXJzb3JQb3MgPT09IG51bGwgfHwgY3Vyc29yUG9zID09PSAwKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgYmVmb3JlOiAiIiwKICAgICAgICBhZnRlcjogaGVhZGluZ0Jsb2NrLmlubmVySFRNTAogICAgICB9OwogICAgfQogICAgY29uc3QgYmVmb3JlUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgY29uc3QgYWZ0ZXJSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICBiZWZvcmVSYW5nZS5zZXRTdGFydChoZWFkaW5nQmxvY2ssIDApOwogICAgYmVmb3JlUmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgYWZ0ZXJSYW5nZS5zZXRTdGFydChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgIGFmdGVyUmFuZ2Uuc2V0RW5kKGhlYWRpbmdCbG9jaywgaGVhZGluZ0Jsb2NrLmNoaWxkTm9kZXMubGVuZ3RoKTsKICAgIGNvbnN0IGJlZm9yZUZyYWdtZW50ID0gYmVmb3JlUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgY29uc3QgYWZ0ZXJGcmFnbWVudCA9IGFmdGVyUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGVtcERpdi5hcHBlbmRDaGlsZChiZWZvcmVGcmFnbWVudCk7CiAgICBjb25zdCBiZWZvcmVIdG1sID0gdGVtcERpdi5pbm5lckhUTUw7CiAgICB0ZW1wRGl2LmlubmVySFRNTCA9ICIiOwogICAgdGVtcERpdi5hcHBlbmRDaGlsZChhZnRlckZyYWdtZW50KTsKICAgIGNvbnN0IGFmdGVySHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgcmV0dXJuIHsKICAgICAgYmVmb3JlOiBiZWZvcmVIdG1sLAogICAgICBhZnRlcjogYWZ0ZXJIdG1sCiAgICB9OwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvcXVvdGUuYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIFF1b3RlQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gInF1b3RlIjsKICAvLyBUcmFjayBjdXJzb3IgcG9zaXRpb24KICBsYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IDA7CiAgbGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogIHNlbGVjdGlvbkhhbmRsZXIgPSBudWxsOwogIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgY29uc3Qgc2VsZWN0ZWRDbGFzcyA9IGlzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIiOwogICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLmdldFBsYWNlaG9sZGVyKCk7CiAgICByZXR1cm4gYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImJsb2NrIHF1b3RlJHtzZWxlY3RlZENsYXNzfSIKICAgICAgICBjb250ZW50ZWRpdGFibGU9InRydWUiCiAgICAgICAgZGF0YS1wbGFjZWhvbGRlcj0iJHtwbGFjZWhvbGRlcn0iCiAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgZGF0YS1ibG9jay10eXBlPSIke2Jsb2NrLnR5cGV9IgogICAgICA+PC9kaXY+CiAgICBgOwogIH0KICBzZXR1cChlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc3QgcXVvdGVCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpOwogICAgaWYgKCFxdW90ZUJsb2NrKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIlF1b3RlQmxvY2tIYW5kbGVyLnNldHVwOiBObyBxdW90ZSBibG9jayBlbGVtZW50IGZvdW5kIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChibG9jay5jb250ZW50ICYmICFxdW90ZUJsb2NrLmlubmVySFRNTCkgewogICAgICBxdW90ZUJsb2NrLmlubmVySFRNTCA9IGJsb2NrLmNvbnRlbnQ7CiAgICB9CiAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKGUxMSkgPT4gewogICAgICBoYW5kbGVyczIub25JbnB1dChlMTEpOwogICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgIH0KICAgIH0pOwogICAgcXVvdGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgfSk7CiAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Gb2N1cygpOwogICAgfSk7CiAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkJsdXIoKTsKICAgIH0pOwogICAgcXVvdGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbnN0YXJ0IiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0KCk7CiAgICB9KTsKICAgIHF1b3RlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kKCk7CiAgICB9KTsKICAgIHF1b3RlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIChlMTEpID0+IHsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbk1vdXNlVXA/LihlMTEpOwogICAgfSk7CiAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICAgIH0KICAgICAgfSwgMCk7CiAgICB9KTsKICAgIHF1b3RlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICB0aGlzLnNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgcXVvdGVCbG9jaywgYmxvY2spOwogIH0KICBzZXR1cFNlbGVjdGlvbkhhbmRsZXIoZWxlbWVudDQsIHF1b3RlQmxvY2ssIGJsb2NrKSB7CiAgICBjb25zdCBjaGVja1NlbGVjdGlvbiA9ICgpID0+IHsKICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpOwogICAgICBpZiAoc2VsZWN0ZWRUZXh0Lmxlbmd0aCA9PT0gMCkgewogICAgICAgIGlmICh0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgICAgdGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCB7CiAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiBmYWxzZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCB3eXNpd3lnQmxvY2syID0gcXVvdGVCbG9jay5nZXRSb290Tm9kZSgpLmhvc3Q7CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jazI/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSB3eXNpd3lnQmxvY2syPy5zaGFkb3dSb290OwogICAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICAgIGlmICghc2VsZWN0aW9uSW5mbykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHN0YXJ0SW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00ocXVvdGVCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcik7CiAgICAgIGNvbnN0IGVuZEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKHF1b3RlQmxvY2ssIHNlbGVjdGlvbkluZm8uZW5kQ29udGFpbmVyKTsKICAgICAgaWYgKHN0YXJ0SW5CbG9jayB8fCBlbmRJbkJsb2NrKSB7CiAgICAgICAgaWYgKHNlbGVjdGVkVGV4dCAhPT0gdGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSBzZWxlY3RlZFRleHQ7CiAgICAgICAgICBjb25zdCByYW5nZTIgPSBXeXNpd3lnU2VsZWN0aW9uLmNyZWF0ZVJhbmdlRnJvbUluZm8oc2VsZWN0aW9uSW5mbyk7CiAgICAgICAgICBjb25zdCByZWN0ID0gcmFuZ2UyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgdGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCB7CiAgICAgICAgICAgIHRleHQ6IHNlbGVjdGVkVGV4dC50cmltKCksCiAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICByYW5nZTogcmFuZ2UyLAogICAgICAgICAgICByZWN0LAogICAgICAgICAgICBoYXNTZWxlY3Rpb246IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQsCiAgICAgICAgICBoYXNTZWxlY3Rpb246IGZhbHNlCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCBjaGVja1NlbGVjdGlvbik7CiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIgPSBjaGVja1NlbGVjdGlvbjsKICAgIGNvbnN0IHd5c2l3eWdCbG9jayA9IHF1b3RlQmxvY2suZ2V0Um9vdE5vZGUoKS5ob3N0OwogICAgaWYgKHd5c2l3eWdCbG9jaykgewogICAgICBjb25zdCBvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrID0gd3lzaXd5Z0Jsb2NrLmRpc2Nvbm5lY3RlZENhbGxiYWNrOwogICAgICB3eXNpd3lnQmxvY2suZGlzY29ubmVjdGVkQ2FsbGJhY2sgPSBhc3luYyBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25IYW5kbGVyKSB7CiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCB0aGlzLnNlbGVjdGlvbkhhbmRsZXIpOwogICAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2spIHsKICAgICAgICAgIGF3YWl0IG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh3eXNpd3lnQmxvY2spOwogICAgICAgIH0KICAgICAgfS5iaW5kKHRoaXMpOwogICAgfQogIH0KICBkaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCBkZXRhaWwpIHsKICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCJibG9jay10ZXh0LXNlbGVjdGVkIiwgewogICAgICBkZXRhaWwsCiAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICB9KTsKICAgIGVsZW1lbnQ0LmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogIH0KICBnZXRTdHlsZXMoKSB7CiAgICByZXR1cm4gYAogICAgICAvKiBRdW90ZSBzcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgLmJsb2NrLnF1b3RlIHsKICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDA2NmNjIiwgIiM0ZDk0ZmYiKX07CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzU1NSIsICIjYjBiMGIwIil9OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIG1hcmdpbjogMTZweCAwOwogICAgICB9CiAgICBgOwogIH0KICBnZXRQbGFjZWhvbGRlcigpIHsKICAgIHJldHVybiAiQWRkIGEgcXVvdGUuLi4iOwogIH0KICAvLyBIZWxwZXIgbWV0aG9kcyBmb3IgcXVvdGUgZnVuY3Rpb25hbGl0eQogIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0LCBjb250ZXh0MikgewogICAgY29uc3QgcXVvdGVCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpOwogICAgaWYgKCFxdW90ZUJsb2NrKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gY29udGV4dDI/LmNvbXBvbmVudDsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jaz8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gY29udGV4dDI/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShxdW90ZUJsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgcHJlQ2FyZXRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMocXVvdGVCbG9jayk7CiAgICBwcmVDYXJldFJhbmdlLnNldEVuZChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgIGNvbnN0IHBvc2l0aW9uMyA9IHByZUNhcmV0UmFuZ2UudG9TdHJpbmcoKS5sZW5ndGg7CiAgICByZXR1cm4gcG9zaXRpb24zOwogIH0KICBnZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZXh0MikgewogICAgY29uc3QgcXVvdGVCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpOwogICAgaWYgKCFxdW90ZUJsb2NrKQogICAgICByZXR1cm4gIiI7CiAgICBjb25zdCBjb250ZW50MyA9IHF1b3RlQmxvY2suaW5uZXJIVE1MIHx8ICIiOwogICAgcmV0dXJuIGNvbnRlbnQzOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MywgY29udGV4dDIpIHsKICAgIGNvbnN0IHF1b3RlQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTsKICAgIGlmICghcXVvdGVCbG9jaykKICAgICAgcmV0dXJuOwogICAgY29uc3QgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBxdW90ZUJsb2NrIHx8IGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IHF1b3RlQmxvY2s7CiAgICBxdW90ZUJsb2NrLmlubmVySFRNTCA9IGNvbnRlbnQzOwogICAgaWYgKGhhZEZvY3VzKSB7CiAgICAgIHF1b3RlQmxvY2suZm9jdXMoKTsKICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IHF1b3RlQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTsKICAgIGlmIChxdW90ZUJsb2NrKSB7CiAgICAgIFd5c2l3eWdCbG9ja3Muc2V0Q3Vyc29yVG9TdGFydChxdW90ZUJsb2NrKTsKICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICBpZiAocXVvdGVCbG9jaykgewogICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvRW5kKHF1b3RlQmxvY2spOwogICAgfQogIH0KICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IHF1b3RlQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTsKICAgIGlmICghcXVvdGVCbG9jaykKICAgICAgcmV0dXJuOwogICAgaWYgKCFxdW90ZUJsb2NrLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpIHsKICAgICAgcXVvdGVCbG9jay5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICB9CiAgICBxdW90ZUJsb2NrLmZvY3VzKCk7CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gcXVvdGVCbG9jayAmJiBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ICE9PSBxdW90ZUJsb2NrKSB7CiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gewogICAgICAgIHF1b3RlQmxvY2suZm9jdXMoKTsKICAgICAgfSk7CiAgICB9CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIsIGNvbnRleHQyKSB7CiAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICBpZiAoIXF1b3RlQmxvY2spCiAgICAgIHJldHVybjsKICAgIGlmICghcXVvdGVCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgIHF1b3RlQmxvY2suc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCAidHJ1ZSIpOwogICAgfQogICAgcXVvdGVCbG9jay5mb2N1cygpOwogICAgY29uc3Qgc2V0Q3Vyc29yID0gKCkgPT4gewogICAgICBpZiAocG9zaXRpb24zID09PSAic3RhcnQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0LCBjb250ZXh0Mik7CiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24zID09PSAiZW5kIikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcG9zaXRpb24zID09PSAibnVtYmVyIikgewogICAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24ocXVvdGVCbG9jaywgcG9zaXRpb24zKTsKICAgICAgfQogICAgfTsKICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBxdW90ZUJsb2NrIHx8IGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IHF1b3RlQmxvY2spIHsKICAgICAgc2V0Q3Vyc29yKCk7CiAgICB9IGVsc2UgewogICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHsKICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcXVvdGVCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBxdW90ZUJsb2NrKSB7CiAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KICBnZXRTcGxpdENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICBpZiAoIXF1b3RlQmxvY2spIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCB3eXNpd3lnQmxvY2sgPSBjb250ZXh0Mj8uY29tcG9uZW50OwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gd3lzaXd5Z0Jsb2NrPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSBjb250ZXh0Mj8uc2hhZG93Um9vdDsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgIGlmIChibG9ja1NoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgaWYgKCFzZWxlY3Rpb25JbmZvKSB7CiAgICAgIGlmICh0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uICE9PSBudWxsKSB7CiAgICAgICAgY29uc3QgZnVsbFRleHQgPSBxdW90ZUJsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgIGNvbnN0IHBvcyA9IE1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sIGZ1bGxUZXh0Lmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKCFXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKHF1b3RlQmxvY2ssIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpKSB7CiAgICAgIGlmICh0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uICE9PSBudWxsKSB7CiAgICAgICAgY29uc3QgZnVsbFRleHQgPSBxdW90ZUJsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgIGNvbnN0IHBvcyA9IE1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sIGZ1bGxUZXh0Lmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgY3Vyc29yUG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpOwogICAgaWYgKGN1cnNvclBvcyA9PT0gbnVsbCB8fCBjdXJzb3JQb3MgPT09IDApIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBiZWZvcmU6ICIiLAogICAgICAgIGFmdGVyOiBxdW90ZUJsb2NrLmlubmVySFRNTAogICAgICB9OwogICAgfQogICAgY29uc3QgYmVmb3JlUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgY29uc3QgYWZ0ZXJSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICBiZWZvcmVSYW5nZS5zZXRTdGFydChxdW90ZUJsb2NrLCAwKTsKICAgIGJlZm9yZVJhbmdlLnNldEVuZChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgIGFmdGVyUmFuZ2Uuc2V0U3RhcnQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICBhZnRlclJhbmdlLnNldEVuZChxdW90ZUJsb2NrLCBxdW90ZUJsb2NrLmNoaWxkTm9kZXMubGVuZ3RoKTsKICAgIGNvbnN0IGJlZm9yZUZyYWdtZW50ID0gYmVmb3JlUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgY29uc3QgYWZ0ZXJGcmFnbWVudCA9IGFmdGVyUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGVtcERpdi5hcHBlbmRDaGlsZChiZWZvcmVGcmFnbWVudCk7CiAgICBjb25zdCBiZWZvcmVIdG1sID0gdGVtcERpdi5pbm5lckhUTUw7CiAgICB0ZW1wRGl2LmlubmVySFRNTCA9ICIiOwogICAgdGVtcERpdi5hcHBlbmRDaGlsZChhZnRlckZyYWdtZW50KTsKICAgIGNvbnN0IGFmdGVySHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgcmV0dXJuIHsKICAgICAgYmVmb3JlOiBiZWZvcmVIdG1sLAogICAgICBhZnRlcjogYWZ0ZXJIdG1sCiAgICB9OwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvY29kZS5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3NlcnZpY2VzKCk7CnZhciBDb2RlQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gImNvZGUiOwogIGhpZ2hsaWdodFRpbWVyID0gbnVsbDsKICBoaWdobGlnaHRKcyA9IG51bGw7CiAgcmVuZGVyKGJsb2NrLCBpc1NlbGVjdGVkKSB7CiAgICBjb25zdCBsYW5ndWFnZSA9IGJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZSB8fCAidHlwZXNjcmlwdCI7CiAgICBjb25zdCBjb250ZW50MyA9IGJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICBjb25zdCBsaW5lQ291bnQgPSBjb250ZW50My5zcGxpdCgiXG4iKS5sZW5ndGg7CiAgICBsZXQgbGluZU51bWJlcnNIdG1sID0gIiI7CiAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gbGluZUNvdW50OyBpMTErKykgewogICAgICBsaW5lTnVtYmVyc0h0bWwgKz0gYDxkaXYgY2xhc3M9ImxpbmUtbnVtYmVyIj4ke2kxMX08L2Rpdj5gOwogICAgfQogICAgY29uc3QgbGFuZ3VhZ2VPcHRpb25zID0gUFJPR1JBTU1JTkdfTEFOR1VBR0VTLm1hcCgobGFuZykgPT4gewogICAgICBjb25zdCB2YWx1ZTIgPSBsYW5nLnRvTG93ZXJDYXNlKCk7CiAgICAgIHJldHVybiBgPG9wdGlvbiB2YWx1ZT0iJHt2YWx1ZTJ9IiAke3ZhbHVlMiA9PT0gbGFuZ3VhZ2UgPyAic2VsZWN0ZWQiIDogIiJ9PiR7bGFuZ308L29wdGlvbj5gOwogICAgfSkuam9pbigiIik7CiAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJsb2NrLWNvbnRhaW5lciR7aXNTZWxlY3RlZCA/ICIgc2VsZWN0ZWQiIDogIiJ9IiBkYXRhLWxhbmd1YWdlPSIke2xhbmd1YWdlfSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1oZWFkZXIiPgogICAgICAgICAgPHNlbGVjdCBjbGFzcz0ibGFuZ3VhZ2Utc2VsZWN0b3IiIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Ij4KICAgICAgICAgICAgJHtsYW5ndWFnZU9wdGlvbnN9CiAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNvcHktYnV0dG9uIiB0aXRsZT0iQ29weSBjb2RlIj4KICAgICAgICAgICAgPHN2ZyBjbGFzcz0iY29weS1pY29uIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMCA2Ljc1QzAgNS43ODQuNzg0IDUgMS43NSA1aDEuNWEuNzUuNzUgMCAwMTAgMS41aC0xLjVhLjI1LjI1IDAgMDAtLjI1LjI1djcuNWMwIC4xMzguMTEyLjI1LjI1LjI1aDcuNWEuMjUuMjUgMCAwMC4yNS0uMjV2LTEuNWEuNzUuNzUgMCAwMTEuNSAwdjEuNUExLjc1IDEuNzUgMCAwMTkuMjUgMTZoLTcuNUExLjc1IDEuNzUgMCAwMTAgMTQuMjV2LTcuNXoiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNNSAxLjc1QzUgLjc4NCA1Ljc4NCAwIDYuNzUgMGg3LjVDMTUuMjE2IDAgMTYgLjc4NCAxNiAxLjc1djcuNUExLjc1IDEuNzUgMCAwMTE0LjI1IDExaC03LjVBMS43NSAxLjc1IDAgMDE1IDkuMjV2LTcuNXptMS43NS0uMjVhLjI1LjI1IDAgMDAtLjI1LjI1djcuNWMwIC4xMzguMTEyLjI1LjI1LjI1aDcuNWEuMjUuMjUgMCAwMC4yNS0uMjV2LTcuNWEuMjUuMjUgMCAwMC0uMjUtLjI1aC03LjV6Ij48L3BhdGg+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29weS10ZXh0Ij5Db3B5PC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1ib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtbnVtYmVycyI+JHtsaW5lTnVtYmVyc0h0bWx9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWNvbnRlbnQiPgogICAgICAgICAgICA8cHJlIGNsYXNzPSJjb2RlLXByZSI+PGNvZGUgY2xhc3M9ImNvZGUtZWRpdG9yIiAKICAgICAgICAgICAgICAgICBjb250ZW50ZWRpdGFibGU9InRydWUiCiAgICAgICAgICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICAgICAgICAgZGF0YS1ibG9jay10eXBlPSIke2Jsb2NrLnR5cGV9IgogICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9ImZhbHNlIj4ke3RoaXMuZXNjYXBlSHRtbChjb250ZW50Myl9PC9jb2RlPjwvcHJlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBjb3B5QnV0dG9uID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvcHktYnV0dG9uIik7CiAgICBjb25zdCBsYW5ndWFnZVNlbGVjdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmxhbmd1YWdlLXNlbGVjdG9yIik7CiAgICBpZiAoIWVkaXRvciB8fCAhY29udGFpbmVyKQogICAgICByZXR1cm47CiAgICBpZiAobGFuZ3VhZ2VTZWxlY3RvcikgewogICAgICBsYW5ndWFnZVNlbGVjdG9yLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCBuZXdMYW5ndWFnZSA9IGUxMS50YXJnZXQudmFsdWU7CiAgICAgICAgYmxvY2subWV0YWRhdGEgPSB7IC4uLmJsb2NrLm1ldGFkYXRhLCBsYW5ndWFnZTogbmV3TGFuZ3VhZ2UgfTsKICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCJkYXRhLWxhbmd1YWdlIiwgbmV3TGFuZ3VhZ2UpOwogICAgICAgIGlmIChibG9jay5jb250ZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGVkaXRvcikgewogICAgICAgICAgdGhpcy5hcHBseUhpZ2hsaWdodGluZyhlbGVtZW50NCwgYmxvY2spOwogICAgICAgIH0KICAgICAgICBpZiAoaGFuZGxlcnMyLm9uSW5wdXQpIHsKICAgICAgICAgIGhhbmRsZXJzMi5vbklucHV0KG5ldyBJbnB1dEV2ZW50KCJpbnB1dCIpKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgaWYgKGNvcHlCdXR0b24pIHsKICAgICAgY29weUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCBjb250ZW50MyA9IGVkaXRvci50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICB0cnkgewogICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29udGVudDMpOwogICAgICAgICAgY29uc3QgY29weVRleHQgPSBjb3B5QnV0dG9uLnF1ZXJ5U2VsZWN0b3IoIi5jb3B5LXRleHQiKTsKICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVGV4dCA9IGNvcHlUZXh0LnRleHRDb250ZW50OwogICAgICAgICAgY29weVRleHQudGV4dENvbnRlbnQgPSAiQ29waWVkISI7CiAgICAgICAgICBjb3B5QnV0dG9uLmNsYXNzTGlzdC5hZGQoImNvcGllZCIpOwogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGNvcHlUZXh0LnRleHRDb250ZW50ID0gb3JpZ2luYWxUZXh0OwogICAgICAgICAgICBjb3B5QnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoImNvcGllZCIpOwogICAgICAgICAgfSwgMmUzKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjb3B5OiIsIGVycik7CiAgICAgICAgICBjb25zdCB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7CiAgICAgICAgICB0ZXh0QXJlYS52YWx1ZSA9IGNvbnRlbnQzOwogICAgICAgICAgdGV4dEFyZWEuc3R5bGUucG9zaXRpb24gPSAiZml4ZWQiOwogICAgICAgICAgdGV4dEFyZWEuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dEFyZWEpOwogICAgICAgICAgdGV4dEFyZWEuc2VsZWN0KCk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpOwogICAgICAgICAgICBjb25zdCBjb3B5VGV4dCA9IGNvcHlCdXR0b24ucXVlcnlTZWxlY3RvcigiLmNvcHktdGV4dCIpOwogICAgICAgICAgICBjb25zdCBvcmlnaW5hbFRleHQgPSBjb3B5VGV4dC50ZXh0Q29udGVudDsKICAgICAgICAgICAgY29weVRleHQudGV4dENvbnRlbnQgPSAiQ29waWVkISI7CiAgICAgICAgICAgIGNvcHlCdXR0b24uY2xhc3NMaXN0LmFkZCgiY29waWVkIik7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIGNvcHlUZXh0LnRleHRDb250ZW50ID0gb3JpZ2luYWxUZXh0OwogICAgICAgICAgICAgIGNvcHlCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgiY29waWVkIik7CiAgICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgICB9IGNhdGNoIChlcnIyKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhbGxiYWNrIGNvcHkgZmFpbGVkOiIsIGVycjIpOwogICAgICAgICAgfQogICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0QXJlYSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGxldCBpc0VkaXRpbmcgPSBmYWxzZTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IHsKICAgICAgaXNFZGl0aW5nID0gdHJ1ZTsKICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImVkaXRpbmciKTsKICAgICAgY29uc3QgY29udGVudDMgPSBlZGl0b3IudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgIGVkaXRvci50ZXh0Q29udGVudCA9IGNvbnRlbnQzOwogICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmIChlZGl0b3IuZmlyc3RDaGlsZCkgewogICAgICAgICAgcmFuZ2UyLnNldFN0YXJ0KGVkaXRvci5maXJzdENoaWxkLCAwKTsKICAgICAgICAgIHJhbmdlMi5jb2xsYXBzZSh0cnVlKTsKICAgICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlMik7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaGFuZGxlcnMyLm9uRm9jdXMoKTsKICAgIH0pOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgIGlzRWRpdGluZyA9IGZhbHNlOwogICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiZWRpdGluZyIpOwogICAgICB0aGlzLmFwcGx5SGlnaGxpZ2h0aW5nKGVsZW1lbnQ0LCBibG9jayk7CiAgICAgIGhhbmRsZXJzMi5vbkJsdXIoKTsKICAgIH0pOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKGUxMSkgPT4gewogICAgICBoYW5kbGVyczIub25JbnB1dChlMTEpOwogICAgICB0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGVsZW1lbnQ0KTsKICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaGlnaGxpZ2h0VGltZXIpOwogICAgfSk7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJUYWIiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7CiAgICAgICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAgIik7CiAgICAgICAgICByYW5nZTIuaW5zZXJ0Tm9kZSh0ZXh0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuc2V0U3RhcnRBZnRlcih0ZXh0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuc2V0RW5kQWZ0ZXIodGV4dE5vZGUpOwogICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgICAgICBoYW5kbGVyczIub25JbnB1dChuZXcgSW5wdXRFdmVudCgiaW5wdXQiKSk7CiAgICAgICAgICB0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGVsZW1lbnQ0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChbIkFycm93TGVmdCIsICJBcnJvd1JpZ2h0IiwgIkFycm93VXAiLCAiQXJyb3dEb3duIl0uaW5jbHVkZXMoZTExLmtleSkpIHsKICAgICAgICBjb25zdCBjdXJzb3JQb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gZWRpdG9yLnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgICBpZiAoZTExLmtleSA9PT0gIkFycm93TGVmdCIgJiYgY3Vyc29yUG9zID09PSAwIHx8IGUxMS5rZXkgPT09ICJBcnJvd1JpZ2h0IiAmJiBjdXJzb3JQb3MgPT09IHRleHRMZW5ndGgpIHsKICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJBcnJvd1VwIiB8fCBlMTEua2V5ID09PSAiQXJyb3dEb3duIikgewogICAgICAgICAgY29uc3QgbGluZXMgPSAoZWRpdG9yLnRleHRDb250ZW50IHx8ICIiKS5zcGxpdCgiXG4iKTsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lID0gdGhpcy5nZXRDdXJyZW50TGluZUluZGV4KGVkaXRvcik7CiAgICAgICAgICBpZiAoZTExLmtleSA9PT0gIkFycm93VXAiICYmIGN1cnJlbnRMaW5lID09PSAwIHx8IGUxMS5rZXkgPT09ICJBcnJvd0Rvd24iICYmIGN1cnJlbnRMaW5lID09PSBsaW5lcy5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICB9KTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJwYXN0ZSIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IHRleHQ5ID0gZTExLmNsaXBib2FyZERhdGE/LmdldERhdGEoInRleHQvcGxhaW4iKTsKICAgICAgaWYgKHRleHQ5KSB7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7CiAgICAgICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgICAgIHJhbmdlMi5kZWxldGVDb250ZW50cygpOwogICAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0OSk7CiAgICAgICAgICByYW5nZTIuaW5zZXJ0Tm9kZSh0ZXh0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuc2V0U3RhcnRBZnRlcih0ZXh0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuc2V0RW5kQWZ0ZXIodGV4dE5vZGUpOwogICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgICAgICBoYW5kbGVyczIub25JbnB1dChuZXcgSW5wdXRFdmVudCgiaW5wdXQiKSk7CiAgICAgICAgICB0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGVsZW1lbnQ0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCAoKSA9PiBoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0KCkpOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uZW5kIiwgKCkgPT4gaGFuZGxlcnMyLm9uQ29tcG9zaXRpb25FbmQoKSk7CiAgICBpZiAoYmxvY2suY29udGVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBlZGl0b3IpIHsKICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICB0aGlzLmFwcGx5SGlnaGxpZ2h0aW5nKGVsZW1lbnQ0LCBibG9jayk7CiAgICAgIH0pOwogICAgfQogIH0KICB1cGRhdGVMaW5lTnVtYmVycyhlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICBjb25zdCBsaW5lTnVtYmVyc0NvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5saW5lLW51bWJlcnMiKTsKICAgIGlmICghZWRpdG9yIHx8ICFsaW5lTnVtYmVyc0NvbnRhaW5lcikKICAgICAgcmV0dXJuOwogICAgY29uc3QgY29udGVudDMgPSBlZGl0b3IudGV4dENvbnRlbnQgfHwgIiI7CiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQzLnNwbGl0KCJcbiIpOwogICAgY29uc3QgbGluZUNvdW50ID0gbGluZXMubGVuZ3RoIHx8IDE7CiAgICBsZXQgbGluZU51bWJlcnNIdG1sID0gIiI7CiAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gbGluZUNvdW50OyBpMTErKykgewogICAgICBsaW5lTnVtYmVyc0h0bWwgKz0gYDxkaXYgY2xhc3M9ImxpbmUtbnVtYmVyIj4ke2kxMX08L2Rpdj5gOwogICAgfQogICAgbGluZU51bWJlcnNDb250YWluZXIuaW5uZXJIVE1MID0gbGluZU51bWJlcnNIdG1sOwogIH0KICBnZXRDdXJyZW50TGluZUluZGV4KGVkaXRvcikgewogICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApCiAgICAgIHJldHVybiAwOwogICAgY29uc3QgcmFuZ2UyID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7CiAgICBjb25zdCBwcmVDYXJldFJhbmdlID0gcmFuZ2UyLmNsb25lUmFuZ2UoKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcik7CiAgICBwcmVDYXJldFJhbmdlLnNldEVuZChyYW5nZTIuc3RhcnRDb250YWluZXIsIHJhbmdlMi5zdGFydE9mZnNldCk7CiAgICBjb25zdCB0ZXh0QmVmb3JlQ3Vyc29yID0gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpOwogICAgY29uc3QgbGluZXNCZWZvcmVDdXJzb3IgPSB0ZXh0QmVmb3JlQ3Vyc29yLnNwbGl0KCJcbiIpOwogICAgcmV0dXJuIGxpbmVzQmVmb3JlQ3Vyc29yLmxlbmd0aCAtIDE7CiAgfQogIGFzeW5jIGFwcGx5SGlnaGxpZ2h0aW5nKGVsZW1lbnQ0LCBibG9jaykgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICBpZiAoIWVkaXRvcikKICAgICAgcmV0dXJuOwogICAgaWYgKCF0aGlzLmhpZ2hsaWdodEpzKSB7CiAgICAgIHRoaXMuaGlnaGxpZ2h0SnMgPSBhd2FpdCBEZWVzU2VydmljZUxpYkxvYWRlci5nZXRJbnN0YW5jZSgpLmxvYWRIaWdobGlnaHRKcygpOwogICAgfQogICAgY29uc3QgY3Vyc29yUG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICBjb25zdCBjb250ZW50MyA9IGVkaXRvci50ZXh0Q29udGVudCB8fCAiIjsKICAgIGNvbnN0IGxhbmd1YWdlID0gYmxvY2subWV0YWRhdGE/Lmxhbmd1YWdlIHx8ICJ0eXBlc2NyaXB0IjsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuaGlnaGxpZ2h0SnMuaGlnaGxpZ2h0KGNvbnRlbnQzLCB7CiAgICAgICAgbGFuZ3VhZ2UsCiAgICAgICAgaWdub3JlSWxsZWdhbHM6IHRydWUKICAgICAgfSk7CiAgICAgIGlmIChyZXN1bHQudmFsdWUpIHsKICAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gcmVzdWx0LnZhbHVlOwogICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBlZGl0b3IgJiYgY3Vyc29yUG9zICE9PSBudWxsKSB7CiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgICBXeXNpd3lnU2VsZWN0aW9uLnNldEN1cnNvclBvc2l0aW9uKGVkaXRvciwgY3Vyc29yUG9zKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCJTeW50YXggaGlnaGxpZ2h0aW5nIGZhaWxlZDoiLCBlcnJvcik7CiAgICB9CiAgfQogIGVzY2FwZUh0bWwodGV4dDkpIHsKICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDk7CiAgICByZXR1cm4gZGl2LmlubmVySFRNTDsKICB9CiAgZ2V0Q29udGVudChlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICByZXR1cm4gZWRpdG9yPy50ZXh0Q29udGVudCB8fCAiIjsKICB9CiAgc2V0Q29udGVudChlbGVtZW50NCwgY29udGVudDMpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgaWYgKCFlZGl0b3IpCiAgICAgIHJldHVybjsKICAgIGVkaXRvci50ZXh0Q29udGVudCA9IGNvbnRlbnQzOwogICAgdGhpcy51cGRhdGVMaW5lTnVtYmVycyhlbGVtZW50NCk7CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZWRpdG9yKSB7CiAgICAgIGNvbnN0IGJsb2NrID0gewogICAgICAgIGlkOiBlZGl0b3IuZGF0YXNldC5ibG9ja0lkIHx8ICIiLAogICAgICAgIHR5cGU6ICJjb2RlIiwKICAgICAgICBjb250ZW50OiBjb250ZW50MywKICAgICAgICBtZXRhZGF0YTogewogICAgICAgICAgbGFuZ3VhZ2U6IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWJsb2NrLWNvbnRhaW5lciIpPy5nZXRBdHRyaWJ1dGUoImRhdGEtbGFuZ3VhZ2UiKSB8fCAidHlwZXNjcmlwdCIKICAgICAgICB9CiAgICAgIH07CiAgICAgIHRoaXMuYXBwbHlIaWdobGlnaHRpbmcoZWxlbWVudDQsIGJsb2NrKTsKICAgIH0KICB9CiAgZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgaWYgKCFlZGl0b3IpCiAgICAgIHJldHVybiBudWxsOwogICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApCiAgICAgIHJldHVybiBudWxsOwogICAgY29uc3QgcmFuZ2UyID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7CiAgICBpZiAoIWVkaXRvci5jb250YWlucyhyYW5nZTIuc3RhcnRDb250YWluZXIpKQogICAgICByZXR1cm4gbnVsbDsKICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgcHJlQ2FyZXRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHJhbmdlMi5zdGFydENvbnRhaW5lciwgcmFuZ2UyLnN0YXJ0T2Zmc2V0KTsKICAgIHJldHVybiBwcmVDYXJldFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoOwogIH0KICBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgV3lzaXd5Z1NlbGVjdGlvbi5zZXRDdXJzb3JQb3NpdGlvbihlZGl0b3IsIDApOwogICAgfQogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICBpZiAoZWRpdG9yKSB7CiAgICAgIGNvbnN0IGxlbmd0aCA9IGVkaXRvci50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDA7CiAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24oZWRpdG9yLCBsZW5ndGgpOwogICAgfQogIH0KICBmb2N1cyhlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICBlZGl0b3I/LmZvY3VzKCk7CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgaWYgKCFlZGl0b3IpCiAgICAgIHJldHVybjsKICAgIGVkaXRvci5mb2N1cygpOwogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgaWYgKHBvc2l0aW9uMyA9PT0gInN0YXJ0IikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCk7CiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24zID09PSAiZW5kIikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQpOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwb3NpdGlvbjMgPT09ICJudW1iZXIiKSB7CiAgICAgICAgV3lzaXd5Z1NlbGVjdGlvbi5zZXRDdXJzb3JQb3NpdGlvbihlZGl0b3IsIHBvc2l0aW9uMyk7CiAgICAgIH0KICAgIH0pOwogIH0KICBnZXRTcGxpdENvbnRlbnQoZWxlbWVudDQpIHsKICAgIGNvbnN0IHBvc2l0aW9uMyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgaWYgKHBvc2l0aW9uMyA9PT0gbnVsbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCBjb250ZW50MyA9IHRoaXMuZ2V0Q29udGVudChlbGVtZW50NCk7CiAgICByZXR1cm4gewogICAgICBiZWZvcmU6IGNvbnRlbnQzLnN1YnN0cmluZygwLCBwb3NpdGlvbjMpLAogICAgICBhZnRlcjogY29udGVudDMuc3Vic3RyaW5nKHBvc2l0aW9uMykKICAgIH07CiAgfQogIGdldFN0eWxlcygpIHsKICAgIHJldHVybiBgCiAgICAgIC8qIENvZGUgQmxvY2sgQ29udGFpbmVyIC0gTWluaW1hbGlzdCBzaGFkY24gc3R5bGUgKi8KICAgICAgLmNvZGUtYmxvY2stY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luOiAxMnB4IDA7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtYmxvY2stY29udGFpbmVyLnNlbGVjdGVkIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWJsb2NrLWNvbnRhaW5lci5lZGl0aW5nIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmI3MjgwIiwgIiM5Y2EzYWYiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSGVhZGVyIC0gU2ltcGxpZmllZCAqLwogICAgICAuY29kZS1oZWFkZXIgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KICAgICAgCiAgICAgIC5sYW5ndWFnZS1zZWxlY3RvciB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5sYW5ndWFnZS1zZWxlY3Rvcjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5sYW5ndWFnZS1zZWxlY3Rvcjpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBDb3B5IEJ1dHRvbiAtIE1pbmltYWwgKi8KICAgICAgLmNvcHktYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmI3MjgwIiwgIiM5Y2EzYWYiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbjphY3RpdmUgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbi5jb3BpZWQgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA1OTY2OSIsICIjMTBiOTgxIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29weS1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbjpob3ZlciAuY29weS1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICAgIAogICAgICAuY29weS10ZXh0IHsKICAgICAgICBtaW4td2lkdGg6IDQwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CiAgICAgIAogICAgICAvKiBDb2RlIEJvZHkgKi8KICAgICAgLmNvZGUtYm9keSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogTGluZSBOdW1iZXJzIC0gU3VidGxlICovCiAgICAgIC5saW5lLW51bWJlcnMgewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHBhZGRpbmc6IDEycHggMDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBtaW4td2lkdGg6IDQwcHg7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmxpbmUtbnVtYmVyIHsKICAgICAgICBwYWRkaW5nOiAwIDEycHggMCA4cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM0YjU1NjMiKX07CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzTW9ub0ZvbnRGYW1pbHl9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIENvZGUgQ29udGVudCAqLwogICAgICAuY29kZS1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1wcmUgewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzTW9ub0ZvbnRGYW1pbHl9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxMTE4MjciLCAiI2Y5ZmFmYiIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFBsYWNlaG9sZGVyICovCiAgICAgIC5jb2RlLWVkaXRvcjplbXB0eTo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAiLy8gVHlwZSBvciBwYXN0ZSBjb2RlIGhlcmUuLi4iOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNGI1NTYzIil9OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAvKiBXaGVuIGVkaXRpbmcgKGZvY3VzZWQpLCBzaG93IGdyZXkgdGV4dCB3aXRob3V0IGhpZ2hsaWdodGluZyAqLwogICAgICAuY29kZS1ibG9jay1jb250YWluZXIuZWRpdGluZyAuY29kZS1lZGl0b3IgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWJsb2NrLWNvbnRhaW5lci5lZGl0aW5nIC5jb2RlLWVkaXRvciAqIHsKICAgICAgICBjb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50OwogICAgICB9CiAgICAgIAogICAgICAvKiBTeW50YXggSGlnaGxpZ2h0aW5nIC0gTXV0ZWQgY29sb3JzICovCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1rZXl3b3JkIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkYzI2MjYiLCAiI2Y4NzE3MSIpfTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtc3RyaW5nIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwNTk2NjkiLCAiIzEwYjk4MSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLW51bWJlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjN2MzYWVkIiwgIiNhNzhiZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1mdW5jdGlvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiM2MGE1ZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1jb21tZW50IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2YjcyODAiLCAiIzZiNzI4MCIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy12YXJpYWJsZSwKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWF0dHIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VhNTgwYyIsICIjZmI5MjNjIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtY2xhc3MsCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy10aXRsZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiM2MGE1ZmEiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLXBhcmFtcyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1idWlsdF9pbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjN2MzYWVkIiwgIiNhNzhiZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1saXRlcmFsIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3YzNhZWQiLCAiI2E3OGJmYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLW1ldGEgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtcHVuY3R1YXRpb24gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzM3NDE1MSIsICIjZDFkNWRiIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtdGFnIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkYzI2MjYiLCAiI2Y4NzE3MSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWF0dHJpYnV0ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiM2MGE1ZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1zZWxlY3Rvci10YWcgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZjg3MTcxIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtc2VsZWN0b3ItY2xhc3MgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzI1NjNlYiIsICIjNjBhNWZhIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtc2VsZWN0b3ItaWQgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzdjM2FlZCIsICIjYTc4YmZhIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBTZWxlY3Rpb24gKi8KICAgICAgLmNvZGUtZWRpdG9yOjpzZWxlY3Rpb24sCiAgICAgIC5jb2RlLWVkaXRvciAqOjpzZWxlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDk5LCAxMDIsIDI0MSwgMC4yKSIsICJyZ2JhKDk5LCAxMDIsIDI0MSwgMC4zKSIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgLSBNaW5pbWFsICovCiAgICAgIC5jb2RlLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzRiNTU2MyIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICB9CiAgICBgOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvbGlzdC5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgTGlzdEJsb2NrSGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgQmFzZUJsb2NrSGFuZGxlciB7CiAgdHlwZSA9ICJsaXN0IjsKICAvLyBUcmFjayBjdXJzb3IgcG9zaXRpb24gYW5kIGxpc3Qgc3RhdGUKICBsYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IDA7CiAgbGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogIHNlbGVjdGlvbkhhbmRsZXIgPSBudWxsOwogIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgY29uc3Qgc2VsZWN0ZWRDbGFzcyA9IGlzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIiOwogICAgY29uc3QgbGlzdFR5cGUgPSBibG9jay5tZXRhZGF0YT8ubGlzdFR5cGUgfHwgInVub3JkZXJlZCI7CiAgICBjb25zdCBsaXN0VGFnID0gbGlzdFR5cGUgPT09ICJvcmRlcmVkIiA/ICJvbCIgOiAidWwiOwogICAgY29uc3QgbGlzdENvbnRlbnQgPSB0aGlzLnJlbmRlckxpc3RDb250ZW50KGJsb2NrLmNvbnRlbnQsIGJsb2NrLm1ldGFkYXRhKTsKICAgIHJldHVybiBgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYmxvY2sgbGlzdCR7c2VsZWN0ZWRDbGFzc30iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICAgIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9IgogICAgICAgIGRhdGEtYmxvY2stdHlwZT0iJHtibG9jay50eXBlfSIKICAgICAgPiR7bGlzdENvbnRlbnR9PC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJMaXN0Q29udGVudChjb250ZW50MywgbWV0YWRhdGEpIHsKICAgIGlmICghY29udGVudDMpCiAgICAgIHJldHVybiAiPHVsPjxsaT48L2xpPjwvdWw+IjsKICAgIGNvbnN0IGxpc3RUeXBlID0gbWV0YWRhdGE/Lmxpc3RUeXBlIHx8ICJ1bm9yZGVyZWQiOwogICAgY29uc3QgbGlzdFRhZyA9IGxpc3RUeXBlID09PSAib3JkZXJlZCIgPyAib2wiIDogInVsIjsKICAgIGNvbnN0IGxpbmVzID0gY29udGVudDMuc3BsaXQoIlxuIikuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnRyaW0oKSk7CiAgICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBgPCR7bGlzdFRhZ30+PGxpPjwvbGk+PC8ke2xpc3RUYWd9PmA7CiAgICB9CiAgICBjb25zdCBsaXN0SXRlbXMgPSBsaW5lcy5tYXAoKGxpbmUpID0+IGA8bGk+JHtsaW5lfTwvbGk+YCkuam9pbigiIik7CiAgICByZXR1cm4gYDwke2xpc3RUYWd9PiR7bGlzdEl0ZW1zfTwvJHtsaXN0VGFnfT5gOwogIH0KICBzZXR1cChlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc3QgbGlzdEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLmxpc3QiKTsKICAgIGlmICghbGlzdEJsb2NrKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkxpc3RCbG9ja0hhbmRsZXIuc2V0dXA6IE5vIGxpc3QgYmxvY2sgZWxlbWVudCBmb3VuZCIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoYmxvY2suY29udGVudCAmJiAhbGlzdEJsb2NrLmlubmVySFRNTCkgewogICAgICBsaXN0QmxvY2suaW5uZXJIVE1MID0gdGhpcy5yZW5kZXJMaXN0Q29udGVudChibG9jay5jb250ZW50LCBibG9jay5tZXRhZGF0YSk7CiAgICB9CiAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoZTExKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbklucHV0KGUxMSk7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiICYmICFlMTEuc2hpZnRLZXkpIHsKICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgICAgICAgY29uc3QgY3VycmVudExpID0gcmFuZ2UyLnN0YXJ0Q29udGFpbmVyLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoImxpIik7CiAgICAgICAgICBpZiAoY3VycmVudExpICYmIGN1cnJlbnRMaS50ZXh0Q29udGVudCA9PT0gIiIpIHsKICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICB9KTsKICAgIGxpc3RCbG9jay5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IHsKICAgICAgaGFuZGxlcnMyLm9uRm9jdXMoKTsKICAgIH0pOwogICAgbGlzdEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkJsdXIoKTsKICAgIH0pOwogICAgbGlzdEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uU3RhcnQoKTsKICAgIH0pOwogICAgbGlzdEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uZW5kIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Db21wb3NpdGlvbkVuZCgpOwogICAgfSk7CiAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIChlMTEpID0+IHsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbk1vdXNlVXA/LihlMTEpOwogICAgfSk7CiAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZTExKSA9PiB7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgfQogICAgICB9LCAwKTsKICAgIH0pOwogICAgbGlzdEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwgKGUxMSkgPT4gewogICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgIH0KICAgIH0pOwogICAgdGhpcy5zZXR1cFNlbGVjdGlvbkhhbmRsZXIoZWxlbWVudDQsIGxpc3RCbG9jaywgYmxvY2spOwogIH0KICBzZXR1cFNlbGVjdGlvbkhhbmRsZXIoZWxlbWVudDQsIGxpc3RCbG9jaywgYmxvY2spIHsKICAgIGNvbnN0IGNoZWNrU2VsZWN0aW9uID0gKCkgPT4gewogICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7CiAgICAgIGlmIChzZWxlY3RlZFRleHQubGVuZ3RoID09PSAwKSB7CiAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICBoYXNTZWxlY3Rpb246IGZhbHNlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHd5c2l3eWdCbG9jazIgPSBsaXN0QmxvY2suZ2V0Um9vdE5vZGUoKS5ob3N0OwogICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB3eXNpd3lnQmxvY2syPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgICAgY29uc3QgcGFyZW50U2hhZG93Um9vdCA9IHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdDsKICAgICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gd3lzaXd5Z0Jsb2NrMj8uc2hhZG93Um9vdDsKICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgICAgaWYgKGJsb2NrU2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgICBpZiAoIXNlbGVjdGlvbkluZm8pCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBzdGFydEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGxpc3RCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcik7CiAgICAgIGNvbnN0IGVuZEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGxpc3RCbG9jaywgc2VsZWN0aW9uSW5mby5lbmRDb250YWluZXIpOwogICAgICBpZiAoc3RhcnRJbkJsb2NrIHx8IGVuZEluQmxvY2spIHsKICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0ICE9PSB0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9IHNlbGVjdGVkVGV4dDsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgICAgIGNvbnN0IHJlY3QgPSByYW5nZTIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgdGV4dDogc2VsZWN0ZWRUZXh0LnRyaW0oKSwKICAgICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQsCiAgICAgICAgICAgIHJhbmdlOiByYW5nZTIsCiAgICAgICAgICAgIHJlY3QsCiAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIGNoZWNrU2VsZWN0aW9uKTsKICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IGNoZWNrU2VsZWN0aW9uOwogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gbGlzdEJsb2NrLmdldFJvb3ROb2RlKCkuaG9zdDsKICAgIGlmICh3eXNpd3lnQmxvY2spIHsKICAgICAgY29uc3Qgb3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjayA9IHd5c2l3eWdCbG9jay5kaXNjb25uZWN0ZWRDYWxsYmFjazsKICAgICAgd3lzaXd5Z0Jsb2NrLmRpc2Nvbm5lY3RlZENhbGxiYWNrID0gYXN5bmMgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSGFuZGxlcikgewogICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgdGhpcy5zZWxlY3Rpb25IYW5kbGVyKTsKICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGlmIChvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrKSB7CiAgICAgICAgICBhd2FpdCBvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrLmNhbGwod3lzaXd5Z0Jsb2NrKTsKICAgICAgICB9CiAgICAgIH0uYmluZCh0aGlzKTsKICAgIH0KICB9CiAgZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgZGV0YWlsKSB7CiAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIsIHsKICAgICAgZGV0YWlsLAogICAgICBidWJibGVzOiB0cnVlLAogICAgICBjb21wb3NlZDogdHJ1ZQogICAgfSk7CiAgICBlbGVtZW50NC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICB9CiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuIGAKICAgICAgLyogTGlzdCBzcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgLmJsb2NrLmxpc3QgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ibG9jay5saXN0IHVsLAogICAgICAuYmxvY2subGlzdCBvbCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLmJsb2NrLmxpc3QgbGkgewogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgfQogICAgICAKICAgICAgLmJsb2NrLmxpc3QgbGk6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgYDsKICB9CiAgZ2V0UGxhY2Vob2xkZXIoKSB7CiAgICByZXR1cm4gIiI7CiAgfQogIC8vIEhlbHBlciBtZXRob2RzIGZvciBsaXN0IGZ1bmN0aW9uYWxpdHkKICBnZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCB3eXNpd3lnQmxvY2sgPSBjb250ZXh0Mj8uY29tcG9uZW50OwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gd3lzaXd5Z0Jsb2NrPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSBjb250ZXh0Mj8uc2hhZG93Um9vdDsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgIGlmIChibG9ja1NoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgaWYgKCFzZWxlY3Rpb25JbmZvKQogICAgICByZXR1cm4gbnVsbDsKICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShsaXN0QmxvY2ssIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgcHJlQ2FyZXRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICBwcmVDYXJldFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhsaXN0QmxvY2spOwogICAgcHJlQ2FyZXRSYW5nZS5zZXRFbmQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICByZXR1cm4gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpLmxlbmd0aDsKICB9CiAgZ2V0Q29udGVudChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuICIiOwogICAgY29uc3QgbGlzdEl0ZW1zID0gbGlzdEJsb2NrLnF1ZXJ5U2VsZWN0b3JBbGwoImxpIik7CiAgICBjb25zdCBjb250ZW50MyA9IEFycmF5LmZyb20obGlzdEl0ZW1zKS5tYXAoKGxpMikgPT4gbGkyLnRleHRDb250ZW50IHx8ICIiKS5qb2luKCJcbiIpOwogICAgcmV0dXJuIGNvbnRlbnQzOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MywgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuOwogICAgY29uc3QgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsaXN0QmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gbGlzdEJsb2NrOwogICAgY29uc3QgbGlzdEVsZW1lbnQgPSBsaXN0QmxvY2sucXVlcnlTZWxlY3RvcigidWwsIG9sIik7CiAgICBjb25zdCBpc09yZGVyZWQgPSBsaXN0RWxlbWVudD8udGFnTmFtZSA9PT0gIk9MIjsKICAgIGxpc3RCbG9jay5pbm5lckhUTUwgPSB0aGlzLnJlbmRlckxpc3RDb250ZW50KGNvbnRlbnQzLCB7IGxpc3RUeXBlOiBpc09yZGVyZWQgPyAib3JkZXJlZCIgOiAidW5vcmRlcmVkIiB9KTsKICAgIGlmIChoYWRGb2N1cykgewogICAgICBsaXN0QmxvY2suZm9jdXMoKTsKICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuOwogICAgY29uc3QgZmlyc3RMaSA9IGxpc3RCbG9jay5xdWVyeVNlbGVjdG9yKCJsaSIpOwogICAgaWYgKGZpcnN0TGkpIHsKICAgICAgY29uc3QgdGV4dE5vZGUgPSB0aGlzLmdldEZpcnN0VGV4dE5vZGUoZmlyc3RMaSk7CiAgICAgIGlmICh0ZXh0Tm9kZSkgewogICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIHJhbmdlMi5zZXRTdGFydCh0ZXh0Tm9kZSwgMCk7CiAgICAgICAgcmFuZ2UyLnNldEVuZCh0ZXh0Tm9kZSwgMCk7CiAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlMik7CiAgICAgIH0KICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBsaXN0QmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpOwogICAgaWYgKCFsaXN0QmxvY2spCiAgICAgIHJldHVybjsKICAgIGNvbnN0IGxhc3RMaSA9IGxpc3RCbG9jay5xdWVyeVNlbGVjdG9yKCJsaTpsYXN0LWNoaWxkIik7CiAgICBpZiAobGFzdExpKSB7CiAgICAgIGNvbnN0IHRleHROb2RlID0gdGhpcy5nZXRMYXN0VGV4dE5vZGUobGFzdExpKTsKICAgICAgaWYgKHRleHROb2RlKSB7CiAgICAgICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgY29uc3QgdGV4dExlbmd0aCA9IHRleHROb2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgICByYW5nZTIuc2V0U3RhcnQodGV4dE5vZGUsIHRleHRMZW5ndGgpOwogICAgICAgIHJhbmdlMi5zZXRFbmQodGV4dE5vZGUsIHRleHRMZW5ndGgpOwogICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZTIpOwogICAgICB9CiAgICB9CiAgfQogIGdldEZpcnN0VGV4dE5vZGUoZWxlbWVudDQpIHsKICAgIGlmIChlbGVtZW50NC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgfQogICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGNvbnN0IGZpcnN0VGV4dCA9IHRoaXMuZ2V0Rmlyc3RUZXh0Tm9kZShlbGVtZW50NC5jaGlsZE5vZGVzW2kxMV0pOwogICAgICBpZiAoZmlyc3RUZXh0KQogICAgICAgIHJldHVybiBmaXJzdFRleHQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZ2V0TGFzdFRleHROb2RlKGVsZW1lbnQ0KSB7CiAgICBpZiAoZWxlbWVudDQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH0KICAgIGZvciAobGV0IGkxMSA9IGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgIGNvbnN0IGxhc3RUZXh0ID0gdGhpcy5nZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQuY2hpbGROb2Rlc1tpMTFdKTsKICAgICAgaWYgKGxhc3RUZXh0KQogICAgICAgIHJldHVybiBsYXN0VGV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuOwogICAgaWYgKCFsaXN0QmxvY2suaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSkgewogICAgICBsaXN0QmxvY2suc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCAidHJ1ZSIpOwogICAgfQogICAgbGlzdEJsb2NrLmZvY3VzKCk7CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gbGlzdEJsb2NrICYmIGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgIT09IGxpc3RCbG9jaykgewogICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHsKICAgICAgICBsaXN0QmxvY2suZm9jdXMoKTsKICAgICAgfSk7CiAgICB9CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIsIGNvbnRleHQyKSB7CiAgICBjb25zdCBsaXN0QmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpOwogICAgaWYgKCFsaXN0QmxvY2spCiAgICAgIHJldHVybjsKICAgIGlmICghbGlzdEJsb2NrLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpIHsKICAgICAgbGlzdEJsb2NrLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgInRydWUiKTsKICAgIH0KICAgIGxpc3RCbG9jay5mb2N1cygpOwogICAgY29uc3Qgc2V0Q3Vyc29yID0gKCkgPT4gewogICAgICBpZiAocG9zaXRpb24zID09PSAic3RhcnQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0LCBjb250ZXh0Mik7CiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24zID09PSAiZW5kIikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcG9zaXRpb24zID09PSAibnVtYmVyIikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfQogICAgfTsKICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsaXN0QmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gbGlzdEJsb2NrKSB7CiAgICAgIHNldEN1cnNvcigpOwogICAgfSBlbHNlIHsKICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGxpc3RCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBsaXN0QmxvY2spIHsKICAgICAgICAgIHNldEN1cnNvcigpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQogIGdldFNwbGl0Q29udGVudChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbnVsbDsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy9tZWRpYS9pbWFnZS5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgSW1hZ2VCbG9ja0hhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEJhc2VCbG9ja0hhbmRsZXIgewogIHR5cGUgPSAiaW1hZ2UiOwogIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgY29uc3QgaW1hZ2VVcmwgPSBibG9jay5tZXRhZGF0YT8udXJsOwogICAgY29uc3QgYWx0VGV4dCA9IGJsb2NrLmNvbnRlbnQgfHwgIkltYWdlIjsKICAgIGNvbnN0IGlzTG9hZGluZyA9IGJsb2NrLm1ldGFkYXRhPy5sb2FkaW5nOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iaW1hZ2UtYmxvY2stY29udGFpbmVyJHtpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIn0iIAogICAgICAgICAgIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9IgogICAgICAgICAgIGRhdGEtaGFzLWltYWdlPSIkeyEhaW1hZ2VVcmx9IgogICAgICAgICAgIHRhYmluZGV4PSIwIj4KICAgICAgICAke2lzTG9hZGluZyA/IHRoaXMucmVuZGVyTG9hZGluZygpIDogaW1hZ2VVcmwgPyB0aGlzLnJlbmRlckltYWdlKGltYWdlVXJsLCBhbHRUZXh0KSA6IHRoaXMucmVuZGVyUGxhY2Vob2xkZXIoKX0KICAgICAgICA8aW5wdXQgdHlwZT0iZmlsZSIgCiAgICAgICAgICAgICAgIGNsYXNzPSJpbWFnZS1maWxlLWlucHV0IiAKICAgICAgICAgICAgICAgYWNjZXB0PSJpbWFnZS8qIiAKICAgICAgICAgICAgICAgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IiAvPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlclBsYWNlaG9sZGVyKCkgewogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iaW1hZ2UtdXBsb2FkLXBsYWNlaG9sZGVyIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyI+CiAgICAgICAgPGRpdiBjbGFzcz0idXBsb2FkLWljb24iIHN0eWxlPSJwb2ludGVyLWV2ZW50czogbm9uZTsiPgogICAgICAgICAgPHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS41Ij4KICAgICAgICAgICAgPHJlY3QgeD0iMyIgeT0iMyIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiByeD0iMiIgcnk9IjIiLz4KICAgICAgICAgICAgPGNpcmNsZSBjeD0iOC41IiBjeT0iOC41IiByPSIxLjUiLz4KICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz0iMjEgMTUgMTYgMTAgNSAyMSIvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idXBsb2FkLXRleHQiIHN0eWxlPSJwb2ludGVyLWV2ZW50czogbm9uZTsiPkNsaWNrIHRvIHVwbG9hZCBhbiBpbWFnZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InVwbG9hZC1oaW50IiBzdHlsZT0icG9pbnRlci1ldmVudHM6IG5vbmU7Ij5vciBkcmFnIGFuZCBkcm9wPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVySW1hZ2UodXJsLCBhbHRUZXh0KSB7CiAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1jb250YWluZXIiPgogICAgICAgIDxpbWcgc3JjPSIke3VybH0iIGFsdD0iJHt0aGlzLmVzY2FwZUh0bWwoYWx0VGV4dCl9IiAvPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlckxvYWRpbmcoKSB7CiAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1sb2FkaW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctdGV4dCI+VXBsb2FkaW5nIGltYWdlLi4uPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgIGNvbnN0IGNvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IGZpbGVJbnB1dCA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS1maWxlLWlucHV0Iik7CiAgICBpZiAoIWNvbnRhaW5lcikgewogICAgICBjb25zb2xlLmVycm9yKCJJbWFnZUJsb2NrSGFuZGxlcjogQ291bGQgbm90IGZpbmQgY29udGFpbmVyIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghZmlsZUlucHV0KSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkltYWdlQmxvY2tIYW5kbGVyOiBDb3VsZCBub3QgZmluZCBmaWxlIGlucHV0Iik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS11cGxvYWQtcGxhY2Vob2xkZXIiKTsKICAgIGlmIChwbGFjZWhvbGRlcikgewogICAgICBwbGFjZWhvbGRlci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBQbGFjZWhvbGRlciBjbGlja2VkLCBvcGVuaW5nIGZpbGUgc2VsZWN0b3IiKTsKICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTsKICAgICAgfSk7CiAgICB9CiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkZvY3VzKCk7CiAgICB9KTsKICAgIGZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCBhc3luYyAoZTExKSA9PiB7CiAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzPy5bMF07CiAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBGaWxlIHNlbGVjdGVkOiIsIGZpbGUubmFtZSk7CiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVGaWxlVXBsb2FkKGZpbGUsIGJsb2NrLCBoYW5kbGVyczIpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgaWYgKCFibG9jay5tZXRhZGF0YT8udXJsKSB7CiAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImRyYWctb3ZlciIpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcmFnbGVhdmUiLCAoZTExKSA9PiB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnLW92ZXIiKTsKICAgIH0pOwogICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBhc3luYyAoZTExKSA9PiB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnLW92ZXIiKTsKICAgICAgY29uc3QgZmlsZSA9IGUxMS5kYXRhVHJhbnNmZXI/LmZpbGVzWzBdOwogICAgICBpZiAoZmlsZSAmJiBmaWxlLnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikgJiYgIWJsb2NrLm1ldGFkYXRhPy51cmwpIHsKICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUZpbGVVcGxvYWQoZmlsZSwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICAgIH0KICAgIH0pOwogICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gaGFuZGxlcnMyLm9uRm9jdXMoKSk7CiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IGhhbmRsZXJzMi5vbkJsdXIoKSk7CiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJEZWxldGUiIHx8IGUxMS5rZXkgPT09ICJCYWNrc3BhY2UiKSB7CiAgICAgICAgaWYgKGJsb2NrLm1ldGFkYXRhPy51cmwpIHsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhLnVybCA9IHZvaWQgMDsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICAgIGhhbmRsZXJzMi5vbklucHV0KG5ldyBJbnB1dEV2ZW50KCJpbnB1dCIpKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgfSk7CiAgfQogIGFzeW5jIGhhbmRsZUZpbGVVcGxvYWQoZmlsZSwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBTdGFydGluZyBmaWxlIHVwbG9hZCIsIHsKICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSwKICAgICAgZmlsZVNpemU6IGZpbGUuc2l6ZSwKICAgICAgYmxvY2tJZDogYmxvY2suaWQKICAgIH0pOwogICAgaWYgKCFmaWxlLnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikpIHsKICAgICAgY29uc29sZS5lcnJvcigiSW52YWxpZCBmaWxlIHR5cGU6IiwgZmlsZS50eXBlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgbWF4U2l6ZSA9IDEwICogMTAyNCAqIDEwMjQ7CiAgICBpZiAoZmlsZS5zaXplID4gbWF4U2l6ZSkgewogICAgICBjb25zb2xlLmVycm9yKCJGaWxlIHRvbyBsYXJnZS4gTWF4aW11bSBzaXplIGlzIDEwTUIiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgIGJsb2NrLm1ldGFkYXRhLmxvYWRpbmcgPSB0cnVlOwogICAgYmxvY2subWV0YWRhdGEuZmlsZU5hbWUgPSBmaWxlLm5hbWU7CiAgICBibG9jay5tZXRhZGF0YS5maWxlU2l6ZSA9IGZpbGUuc2l6ZTsKICAgIGJsb2NrLm1ldGFkYXRhLm1pbWVUeXBlID0gZmlsZS50eXBlOwogICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBTZXQgbG9hZGluZyBzdGF0ZSwgcmVxdWVzdGluZyB1cGRhdGUiKTsKICAgIGhhbmRsZXJzMi5vblJlcXVlc3RVcGRhdGU/LigpOwogICAgdHJ5IHsKICAgICAgY29uc3QgZGF0YVVybCA9IGF3YWl0IHRoaXMuZmlsZVRvRGF0YVVybChmaWxlKTsKICAgICAgYmxvY2subWV0YWRhdGEudXJsID0gZGF0YVVybDsKICAgICAgYmxvY2subWV0YWRhdGEubG9hZGluZyA9IGZhbHNlOwogICAgICBjb25zdCBuYW1lV2l0aG91dEV4dCA9IGZpbGUubmFtZS5yZXBsYWNlKC9cLlteLy5dKyQvLCAiIik7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBuYW1lV2l0aG91dEV4dDsKICAgICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBVcGxvYWQgY29tcGxldGUsIHJlcXVlc3RpbmcgdXBkYXRlIiwgewogICAgICAgIGhhc1VybDogISFibG9jay5tZXRhZGF0YS51cmwsCiAgICAgICAgdXJsTGVuZ3RoOiBkYXRhVXJsLmxlbmd0aCwKICAgICAgICBhbHRUZXh0OiBibG9jay5jb250ZW50CiAgICAgIH0pOwogICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byB1cGxvYWQgaW1hZ2U6IiwgZXJyb3IpOwogICAgICBibG9jay5tZXRhZGF0YS5sb2FkaW5nID0gZmFsc2U7CiAgICAgIGhhbmRsZXJzMi5vblJlcXVlc3RVcGRhdGU/LigpOwogICAgfQogIH0KICBmaWxlVG9EYXRhVXJsKGZpbGUpIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICByZWFkZXIub25sb2FkID0gKGUxMSkgPT4gewogICAgICAgIGNvbnN0IHJlc3VsdCA9IGUxMS50YXJnZXQ/LnJlc3VsdDsKICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIHJlc29sdmUyKHJlc3VsdCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoIkZhaWxlZCB0byByZWFkIGZpbGUiKSk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDsKICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7CiAgICB9KTsKICB9CiAgZXNjYXBlSHRtbCh0ZXh0OSkgewogICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBkaXYudGV4dENvbnRlbnQgPSB0ZXh0OTsKICAgIHJldHVybiBkaXYuaW5uZXJIVE1MOwogIH0KICBnZXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBibG9jayA9IHRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCk7CiAgICByZXR1cm4gYmxvY2s/LmNvbnRlbnQgfHwgIiI7CiAgfQogIHNldENvbnRlbnQoZWxlbWVudDQsIGNvbnRlbnQzKSB7CiAgICBjb25zdCBibG9jayA9IHRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCk7CiAgICBpZiAoYmxvY2spIHsKICAgICAgYmxvY2suY29udGVudCA9IGNvbnRlbnQzOwogICAgfQogIH0KICBnZXRCbG9ja0Zyb21FbGVtZW50KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaW1hZ2UtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgIGlmICghYmxvY2tJZCkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gewogICAgICBpZDogYmxvY2tJZCwKICAgICAgdHlwZTogImltYWdlIiwKICAgICAgY29udGVudDogIiIsCiAgICAgIG1ldGFkYXRhOiB7fQogICAgfTsKICB9CiAgZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICB9CiAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQpIHsKICAgIHRoaXMuZm9jdXMoZWxlbWVudDQpOwogIH0KICBmb2N1cyhlbGVtZW50NCkgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmltYWdlLWJsb2NrLWNvbnRhaW5lciIpOwogICAgY29udGFpbmVyPy5mb2N1cygpOwogIH0KICBmb2N1c1dpdGhDdXJzb3IoZWxlbWVudDQsIHBvc2l0aW9uMyA9ICJlbmQiKSB7CiAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICB9CiAgZ2V0U3BsaXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuIGAKICAgICAgLyogSW1hZ2UgQmxvY2sgQ29udGFpbmVyICovCiAgICAgIC5pbWFnZS1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgICAKICAgICAgLmltYWdlLWJsb2NrLWNvbnRhaW5lci5zZWxlY3RlZCB7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjM2NmYxIiwgIiM4MThjZjgiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFVwbG9hZCBQbGFjZWhvbGRlciAqLwogICAgICAuaW1hZ2UtdXBsb2FkLXBsYWNlaG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA0OHB4IDI0cHg7CiAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5pbWFnZS1ibG9jay1jb250YWluZXI6aG92ZXIgLmltYWdlLXVwbG9hZC1wbGFjZWhvbGRlciB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5pbWFnZS1ibG9jay1jb250YWluZXIuZHJhZy1vdmVyIC5pbWFnZS11cGxvYWQtcGxhY2Vob2xkZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2MzY2ZjEiLCAiIzgxOGNmOCIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VmZjZmZiIsICIjMWUxYjRiIil9OwogICAgICB9CiAgICAgIAogICAgICAudXBsb2FkLWljb24gewogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM0YjU1NjMiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC51cGxvYWQtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CiAgICAgIAogICAgICAudXBsb2FkLWhpbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSW1hZ2UgQ29udGFpbmVyICovCiAgICAgIC5pbWFnZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMTExODI3Iil9OwogICAgICB9CiAgICAgIAogICAgICAuaW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIExvYWRpbmcgU3RhdGUgKi8KICAgICAgLmltYWdlLWxvYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDQ4cHggMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZhZmFmYSIsICIjMGEwYTBhIil9OwogICAgICB9CiAgICAgIAogICAgICAubG9hZGluZy1zcGlubmVyIHsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYm9yZGVyOiAzcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzYzNjZmMSIsICIjODE4Y2Y4Iil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQogICAgICAKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0KICAgICAgfQogICAgICAKICAgICAgLmxvYWRpbmctdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBGaWxlIGlucHV0IGhpZGRlbiAqLwogICAgICAuaW1hZ2UtZmlsZS1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICBgOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL21lZGlhL3lvdXR1YmUuYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIFlvdVR1YmVCbG9ja0hhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEJhc2VCbG9ja0hhbmRsZXIgewogIHR5cGUgPSAieW91dHViZSI7CiAgcmVuZGVyKGJsb2NrLCBpc1NlbGVjdGVkKSB7CiAgICBjb25zdCB2aWRlb0lkID0gYmxvY2subWV0YWRhdGE/LnZpZGVvSWQ7CiAgICBjb25zdCB1cmwgPSBibG9jay5tZXRhZGF0YT8udXJsIHx8ICIiOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0ieW91dHViZS1ibG9jay1jb250YWluZXIke2lzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIifSIgCiAgICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICAgZGF0YS1oYXMtdmlkZW89IiR7ISF2aWRlb0lkfSI+CiAgICAgICAgJHt2aWRlb0lkID8gdGhpcy5yZW5kZXJWaWRlbyh2aWRlb0lkKSA6IHRoaXMucmVuZGVyUGxhY2Vob2xkZXIodXJsKX0KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJQbGFjZWhvbGRlcih1cmwpIHsKICAgIHJldHVybiBgCiAgICAgIDxkaXYgY2xhc3M9InlvdXR1YmUtcGxhY2Vob2xkZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InBsYWNlaG9sZGVyLWljb24iPgogICAgICAgICAgPHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYxNSAzLjE4NGMtMy42MDQtLjI0Ni0xMS42MzEtLjI0NS0xNS4yMyAwLTMuODk3LjI2Ni00LjM1NiAyLjYyLTQuMzg1IDguODE2LjAyOSA2LjE4NS40ODQgOC41NDkgNC4zODUgOC44MTYgMy42LjI0NSAxMS42MjYuMjQ2IDE1LjIzIDAgMy44OTctLjI2NiA0LjM1Ni0yLjYyIDQuMzg1LTguODE2LS4wMjktNi4xODUtLjQ4NC04LjU0OS00LjM4NS04LjgxNnptLTEwLjYxNSAxMi44MTZ2LThsOCAzLjk5My04IDQuMDA3eiIvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGxhY2Vob2xkZXItdGV4dCI+RW50ZXIgWW91VHViZSBVUkw8L2Rpdj4KICAgICAgICA8aW5wdXQgdHlwZT0idXJsIiAKICAgICAgICAgICAgICAgY2xhc3M9InlvdXR1YmUtdXJsLWlucHV0IiAKICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Imh0dHBzOi8veW91dHViZS5jb20vd2F0Y2g/dj0uLi4iIAogICAgICAgICAgICAgICB2YWx1ZT0iJHt0aGlzLmVzY2FwZUh0bWwodXJsKX0iIC8+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ieW91dHViZS1lbWJlZC1idG4iPkVtYmVkIFZpZGVvPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVyVmlkZW8odmlkZW9JZCkgewogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0ieW91dHViZS1jb250YWluZXIiPgogICAgICAgIDxpZnJhbWUgCiAgICAgICAgICBzcmM9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7dmlkZW9JZH0iCiAgICAgICAgICBmcmFtZWJvcmRlcj0iMCIKICAgICAgICAgIGFsbG93PSJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgY2xpcGJvYXJkLXdyaXRlOyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlIgogICAgICAgICAgYWxsb3dmdWxsc2NyZWVuCiAgICAgICAgPjwvaWZyYW1lPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIueW91dHViZS1ibG9jay1jb250YWluZXIiKTsKICAgIGlmICghY29udGFpbmVyKQogICAgICByZXR1cm47CiAgICBpZiAoYmxvY2subWV0YWRhdGE/LnZpZGVvSWQpIHsKICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCAiMCIpOwogICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICBpZiAoZTExLmtleSA9PT0gIkRlbGV0ZSIgfHwgZTExLmtleSA9PT0gIkJhY2tzcGFjZSIpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgdXJsSW5wdXQgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIueW91dHViZS11cmwtaW5wdXQiKTsKICAgIGNvbnN0IGVtYmVkQnRuID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLnlvdXR1YmUtZW1iZWQtYnRuIik7CiAgICBpZiAoIXVybElucHV0IHx8ICFlbWJlZEJ0bikKICAgICAgcmV0dXJuOwogICAgdXJsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgIHVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgZW1iZWRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIHRoaXMuZW1iZWRWaWRlbyh1cmxJbnB1dC52YWx1ZSwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9KTsKICAgIHVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy5lbWJlZFZpZGVvKHVybElucHV0LnZhbHVlLCBibG9jaywgaGFuZGxlcnMyKTsKICAgICAgfSBlbHNlIGlmIChlMTEua2V5ID09PSAiRXNjYXBlIikgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHVybElucHV0LmJsdXIoKTsKICAgICAgfQogICAgfSk7CiAgICB1cmxJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJwYXN0ZSIsIChlMTEpID0+IHsKICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgY29uc3QgcGFzdGVkVXJsID0gdXJsSW5wdXQudmFsdWU7CiAgICAgICAgaWYgKHRoaXMuZXh0cmFjdFlvdVR1YmVWaWRlb0lkKHBhc3RlZFVybCkpIHsKICAgICAgICAgIHRoaXMuZW1iZWRWaWRlbyhwYXN0ZWRVcmwsIGJsb2NrLCBoYW5kbGVyczIpOwogICAgICAgIH0KICAgICAgfSwgMCk7CiAgICB9KTsKICAgIHVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKCkgPT4gewogICAgICBpZiAoIWJsb2NrLm1ldGFkYXRhKQogICAgICAgIGJsb2NrLm1ldGFkYXRhID0ge307CiAgICAgIGJsb2NrLm1ldGFkYXRhLnVybCA9IHVybElucHV0LnZhbHVlOwogICAgfSk7CiAgfQogIGVtYmVkVmlkZW8odXJsLCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCB2aWRlb0lkID0gdGhpcy5leHRyYWN0WW91VHViZVZpZGVvSWQodXJsKTsKICAgIGlmICghdmlkZW9JZCkgewogICAgICBjb25zb2xlLmVycm9yKCJJbnZhbGlkIFlvdVR1YmUgVVJMIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghYmxvY2subWV0YWRhdGEpCiAgICAgIGJsb2NrLm1ldGFkYXRhID0ge307CiAgICBibG9jay5tZXRhZGF0YS52aWRlb0lkID0gdmlkZW9JZDsKICAgIGJsb2NrLm1ldGFkYXRhLnVybCA9IHVybDsKICAgIGJsb2NrLmNvbnRlbnQgPSBgWW91VHViZSBWaWRlbzogJHt2aWRlb0lkfWA7CiAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICB9CiAgZXh0cmFjdFlvdVR1YmVWaWRlb0lkKHVybCkgewogICAgY29uc3QgcGF0dGVybnMyID0gWwogICAgICAvKD86eW91dHViZVwuY29tXC8oPzpbXlwvXStcLy4rXC98KD86dnxlKD86bWJlZCk/KVwvfC4qWz8mXXY9KXx5b3V0dVwuYmVcLykoW14iJj9cLyBdezExfSkvLAogICAgICAveW91dHViZVwuY29tXC9lbWJlZFwvKFteIiY/XC8gXXsxMX0pLywKICAgICAgL3lvdXR1YmVcLmNvbVwvd2F0Y2hcP3Y9KFteIiY/XC8gXXsxMX0pLywKICAgICAgL3lvdXR1XC5iZVwvKFteIiY/XC8gXXsxMX0pLwogICAgXTsKICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJuczIpIHsKICAgICAgY29uc3QgbWF0Y2gyID0gdXJsLm1hdGNoKHBhdHRlcm4pOwogICAgICBpZiAobWF0Y2gyKSB7CiAgICAgICAgcmV0dXJuIG1hdGNoMlsxXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGVzY2FwZUh0bWwodGV4dDkpIHsKICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDk7CiAgICByZXR1cm4gZGl2LmlubmVySFRNTDsKICB9CiAgZ2V0Q29udGVudChlbGVtZW50NCkgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgcmV0dXJuIGJsb2NrPy5jb250ZW50IHx8ICIiOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MykgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgaWYgKGJsb2NrKSB7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBjb250ZW50MzsKICAgIH0KICB9CiAgZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCkgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLnlvdXR1YmUtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgIGlmICghYmxvY2tJZCkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gewogICAgICBpZDogYmxvY2tJZCwKICAgICAgdHlwZTogInlvdXR1YmUiLAogICAgICBjb250ZW50OiAiIiwKICAgICAgbWV0YWRhdGE6IHt9CiAgICB9OwogIH0KICBnZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQpIHsKICAgIHRoaXMuZm9jdXMoZWxlbWVudDQpOwogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCkgewogICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgfQogIGZvY3VzKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIueW91dHViZS1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IHVybElucHV0ID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLnlvdXR1YmUtdXJsLWlucHV0Iik7CiAgICBpZiAodXJsSW5wdXQpIHsKICAgICAgdXJsSW5wdXQuZm9jdXMoKTsKICAgIH0gZWxzZSBpZiAoY29udGFpbmVyKSB7CiAgICAgIGNvbnRhaW5lci5mb2N1cygpOwogICAgfQogIH0KICBmb2N1c1dpdGhDdXJzb3IoZWxlbWVudDQsIHBvc2l0aW9uMyA9ICJlbmQiKSB7CiAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICB9CiAgZ2V0U3BsaXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuIGAKICAgICAgLyogWW91VHViZSBCbG9jayBDb250YWluZXIgKi8KICAgICAgLnlvdXR1YmUtYmxvY2stY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luOiAxMnB4IDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLnlvdXR1YmUtYmxvY2stY29udGFpbmVyLnNlbGVjdGVkIHsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2MzY2ZjEiLCAiIzgxOGNmOCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogWW91VHViZSBQbGFjZWhvbGRlciAqLwogICAgICAueW91dHViZS1wbGFjZWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMzJweCAyNHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICB9CiAgICAgIAogICAgICAucGxhY2Vob2xkZXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNlZjQ0NDQiKX07CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CiAgICAgIAogICAgICAucGxhY2Vob2xkZXItdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLXVybC1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiA0MDBweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTExODI3Iil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBzYW5zLXNlcmlmOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLXVybC1pbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxZjI5MzciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLXVybC1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS1lbWJlZC1idG4gewogICAgICAgIHBhZGRpbmc6IDZweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxMTE4MjciKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLWVtYmVkLWJ0bjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLnlvdXR1YmUtZW1iZWQtYnRuOmFjdGl2ZSB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQogICAgICAKICAgICAgLyogWW91VHViZSBDb250YWluZXIgKi8KICAgICAgLnlvdXR1YmUtY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDU2LjI1JTsgLyogMTY6OSBhc3BlY3QgcmF0aW8gKi8KICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjMDAwMDAwIil9OwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS1jb250YWluZXIgaWZyYW1lIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIH0KICAgIGA7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvbWVkaWEvYXR0YWNobWVudC5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgQXR0YWNobWVudEJsb2NrSGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgQmFzZUJsb2NrSGFuZGxlciB7CiAgdHlwZSA9ICJhdHRhY2htZW50IjsKICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IGZpbGVzID0gYmxvY2subWV0YWRhdGE/LmZpbGVzIHx8IFtdOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1ibG9jay1jb250YWluZXIke2lzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIifSIgCiAgICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICAgdGFiaW5kZXg9IjAiPgogICAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtaWNvbiI+XHV7MUY0Q0V9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRhY2htZW50LXRpdGxlIj5GaWxlIEF0dGFjaG1lbnRzPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1saXN0Ij4KICAgICAgICAgICR7ZmlsZXMubGVuZ3RoID4gMCA/IHRoaXMucmVuZGVyRmlsZXMoZmlsZXMpIDogdGhpcy5yZW5kZXJQbGFjZWhvbGRlcigpfQogICAgICAgIDwvZGl2PgogICAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiAKICAgICAgICAgICAgICAgY2xhc3M9ImF0dGFjaG1lbnQtZmlsZS1pbnB1dCIgCiAgICAgICAgICAgICAgIG11bHRpcGxlIAogICAgICAgICAgICAgICBzdHlsZT0iZGlzcGxheTogbm9uZTsiIC8+CiAgICAgICAgJHtmaWxlcy5sZW5ndGggPiAwID8gJzxidXR0b24gY2xhc3M9ImFkZC1tb3JlLWZpbGVzIj5BZGQgTW9yZSBGaWxlczwvYnV0dG9uPicgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJQbGFjZWhvbGRlcigpIHsKICAgIHJldHVybiBgCiAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtcGxhY2Vob2xkZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InBsYWNlaG9sZGVyLXRleHQiPkNsaWNrIHRvIGFkZCBmaWxlczwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBsYWNlaG9sZGVyLWhpbnQiPm9yIGRyYWcgYW5kIGRyb3A8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJGaWxlcyhmaWxlcykgewogICAgcmV0dXJuIGZpbGVzLm1hcCgoZmlsZSkgPT4gYAogICAgICA8ZGl2IGNsYXNzPSJhdHRhY2htZW50LWl0ZW0iIGRhdGEtZmlsZS1pZD0iJHtmaWxlLmlkfSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1pY29uIj4ke3RoaXMuZ2V0RmlsZUljb24oZmlsZS50eXBlKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWluZm8iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1uYW1lIj4ke3RoaXMuZXNjYXBlSHRtbChmaWxlLm5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1zaXplIj4ke3RoaXMuZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJyZW1vdmUtZmlsZSIgZGF0YS1maWxlLWlkPSIke2ZpbGUuaWR9Ij5ceEQ3PC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgYCkuam9pbigiIik7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IGZpbGVJbnB1dCA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5hdHRhY2htZW50LWZpbGUtaW5wdXQiKTsKICAgIGlmICghY29udGFpbmVyIHx8ICFmaWxlSW5wdXQpIHsKICAgICAgY29uc29sZS5lcnJvcigiQXR0YWNobWVudEJsb2NrSGFuZGxlcjogQ291bGQgbm90IGZpbmQgcmVxdWlyZWQgZWxlbWVudHMiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgIGlmICghYmxvY2subWV0YWRhdGEuZmlsZXMpCiAgICAgIGJsb2NrLm1ldGFkYXRhLmZpbGVzID0gW107CiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1wbGFjZWhvbGRlciIpOwogICAgaWYgKHBsYWNlaG9sZGVyKSB7CiAgICAgIHBsYWNlaG9sZGVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTsKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBhZGRNb3JlQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5hZGQtbW9yZS1maWxlcyIpOwogICAgaWYgKGFkZE1vcmVCdG4pIHsKICAgICAgYWRkTW9yZUJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgZmlsZUlucHV0LmNsaWNrKCk7CiAgICAgIH0pOwogICAgfQogICAgZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGFzeW5jIChlMTEpID0+IHsKICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICBjb25zdCBmaWxlcyA9IGlucHV0LmZpbGVzOwogICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkgewogICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRmlsZUF0dGFjaG1lbnRzKGZpbGVzLCBibG9jaywgaGFuZGxlcnMyKTsKICAgICAgICBpbnB1dC52YWx1ZSA9ICIiOwogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZTExLnRhcmdldDsKICAgICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoInJlbW92ZS1maWxlIikpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgY29uc3QgZmlsZUlkID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS1maWxlLWlkIik7CiAgICAgICAgaWYgKGZpbGVJZCkgewogICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKGZpbGVJZCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImRyYWctb3ZlciIpOwogICAgfSk7CiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIiwgKGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZy1vdmVyIik7CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcm9wIiwgYXN5bmMgKGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZy1vdmVyIik7CiAgICAgIGNvbnN0IGZpbGVzID0gZTExLmRhdGFUcmFuc2Zlcj8uZmlsZXM7CiAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVGaWxlQXR0YWNobWVudHMoZmlsZXMsIGJsb2NrLCBoYW5kbGVyczIpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IGhhbmRsZXJzMi5vbkZvY3VzKCkpOwogICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiRGVsZXRlIiB8fCBlMTEua2V5ID09PSAiQmFja3NwYWNlIikgewogICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBjb250YWluZXIgJiYgYmxvY2subWV0YWRhdGE/LmZpbGVzPy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhLmZpbGVzID0gW107CiAgICAgICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgfSk7CiAgfQogIGFzeW5jIGhhbmRsZUZpbGVBdHRhY2htZW50cyhmaWxlcywgYmxvY2ssIGhhbmRsZXJzMikgewogICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgIGlmICghYmxvY2subWV0YWRhdGEuZmlsZXMpCiAgICAgIGJsb2NrLm1ldGFkYXRhLmZpbGVzID0gW107CiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgQXJyYXkuZnJvbShmaWxlcykpIHsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBkYXRhVXJsID0gYXdhaXQgdGhpcy5maWxlVG9EYXRhVXJsKGZpbGUpOwogICAgICAgIGNvbnN0IGZpbGVEYXRhID0gewogICAgICAgICAgaWQ6IHRoaXMuZ2VuZXJhdGVJZCgpLAogICAgICAgICAgbmFtZTogZmlsZS5uYW1lLAogICAgICAgICAgc2l6ZTogZmlsZS5zaXplLAogICAgICAgICAgdHlwZTogZmlsZS50eXBlLAogICAgICAgICAgZGF0YTogZGF0YVVybAogICAgICAgIH07CiAgICAgICAgYmxvY2subWV0YWRhdGEuZmlsZXMucHVzaChmaWxlRGF0YSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGF0dGFjaCBmaWxlOiIsIGZpbGUubmFtZSwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICBibG9jay5jb250ZW50ID0gYCR7YmxvY2subWV0YWRhdGEuZmlsZXMubGVuZ3RofSBmaWxlJHtibG9jay5tZXRhZGF0YS5maWxlcy5sZW5ndGggIT09IDEgPyAicyIgOiAiIn0gYXR0YWNoZWRgOwogICAgaGFuZGxlcnMyLm9uUmVxdWVzdFVwZGF0ZT8uKCk7CiAgfQogIHJlbW92ZUZpbGUoZmlsZUlkLCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBpZiAoIWJsb2NrLm1ldGFkYXRhPy5maWxlcykKICAgICAgcmV0dXJuOwogICAgYmxvY2subWV0YWRhdGEuZmlsZXMgPSBibG9jay5tZXRhZGF0YS5maWxlcy5maWx0ZXIoKGY3KSA9PiBmNy5pZCAhPT0gZmlsZUlkKTsKICAgIGJsb2NrLmNvbnRlbnQgPSBibG9jay5tZXRhZGF0YS5maWxlcy5sZW5ndGggPiAwID8gYCR7YmxvY2subWV0YWRhdGEuZmlsZXMubGVuZ3RofSBmaWxlJHtibG9jay5tZXRhZGF0YS5maWxlcy5sZW5ndGggIT09IDEgPyAicyIgOiAiIn0gYXR0YWNoZWRgIDogIiI7CiAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICB9CiAgZmlsZVRvRGF0YVVybChmaWxlKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QpID0+IHsKICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgcmVhZGVyLm9ubG9hZCA9IChlMTEpID0+IHsKICAgICAgICBjb25zdCByZXN1bHQgPSBlMTEudGFyZ2V0Py5yZXN1bHQ7CiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICByZXNvbHZlMihyZXN1bHQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWplY3QobmV3IEVycm9yKCJGYWlsZWQgdG8gcmVhZCBmaWxlIikpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmVhZGVyLm9uZXJyb3IgPSByZWplY3Q7CiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgfSk7CiAgfQogIGdldEZpbGVJY29uKG1pbWVUeXBlKSB7CiAgICBpZiAobWltZVR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikpCiAgICAgIHJldHVybiAiXHV7MUY1QkN9XHVGRTBGIjsKICAgIGlmIChtaW1lVHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSkKICAgICAgcmV0dXJuICJcdXsxRjNBNX0iOwogICAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoImF1ZGlvLyIpKQogICAgICByZXR1cm4gIlx1ezFGM0I1fSI7CiAgICBpZiAobWltZVR5cGUuaW5jbHVkZXMoInBkZiIpKQogICAgICByZXR1cm4gIlx1ezFGNEM0fSI7CiAgICBpZiAobWltZVR5cGUuaW5jbHVkZXMoInppcCIpIHx8IG1pbWVUeXBlLmluY2x1ZGVzKCJyYXIiKSB8fCBtaW1lVHlwZS5pbmNsdWRlcygidGFyIikpCiAgICAgIHJldHVybiAiXHV7MUY1QzR9XHVGRTBGIjsKICAgIGlmIChtaW1lVHlwZS5pbmNsdWRlcygic2hlZXQiKSkKICAgICAgcmV0dXJuICJcdXsxRjRDQX0iOwogICAgaWYgKG1pbWVUeXBlLmluY2x1ZGVzKCJkb2N1bWVudCIpIHx8IG1pbWVUeXBlLmluY2x1ZGVzKCJtc3dvcmQiKSkKICAgICAgcmV0dXJuICJcdXsxRjRERH0iOwogICAgaWYgKG1pbWVUeXBlLmluY2x1ZGVzKCJwcmVzZW50YXRpb24iKSkKICAgICAgcmV0dXJuICJcdXsxRjRDQn0iOwogICAgaWYgKG1pbWVUeXBlLmluY2x1ZGVzKCJ0ZXh0IikpCiAgICAgIHJldHVybiAiXHV7MUY0QzN9IjsKICAgIHJldHVybiAiXHV7MUY0QzF9IjsKICB9CiAgZm9ybWF0RmlsZVNpemUoYnl0ZXMpIHsKICAgIGlmIChieXRlcyA9PT0gMCkKICAgICAgcmV0dXJuICIwIEJ5dGVzIjsKICAgIGNvbnN0IGs0ID0gMTAyNDsKICAgIGNvbnN0IHNpemVzID0gWyJCeXRlcyIsICJLQiIsICJNQiIsICJHQiJdOwogICAgY29uc3QgaTExID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrNCkpOwogICAgcmV0dXJuIHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coazQsIGkxMSkpLnRvRml4ZWQoMikpICsgIiAiICsgc2l6ZXNbaTExXTsKICB9CiAgZ2VuZXJhdGVJZCgpIHsKICAgIHJldHVybiBgZmlsZS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWA7CiAgfQogIGVzY2FwZUh0bWwodGV4dDkpIHsKICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDk7CiAgICByZXR1cm4gZGl2LmlubmVySFRNTDsKICB9CiAgZ2V0Q29udGVudChlbGVtZW50NCkgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgcmV0dXJuIGJsb2NrPy5jb250ZW50IHx8ICIiOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MykgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgaWYgKGJsb2NrKSB7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBjb250ZW50MzsKICAgIH0KICB9CiAgZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCkgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmF0dGFjaG1lbnQtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgIGlmICghYmxvY2tJZCkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gewogICAgICBpZDogYmxvY2tJZCwKICAgICAgdHlwZTogImF0dGFjaG1lbnQiLAogICAgICBjb250ZW50OiAiIiwKICAgICAgbWV0YWRhdGE6IHt9CiAgICB9OwogIH0KICBnZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQpIHsKICAgIHRoaXMuZm9jdXMoZWxlbWVudDQpOwogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCkgewogICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgfQogIGZvY3VzKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnRhaW5lcj8uZm9jdXMoKTsKICB9CiAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIikgewogICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgfQogIGdldFNwbGl0Q29udGVudChlbGVtZW50NCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIGdldFN0eWxlcygpIHsKICAgIHJldHVybiBgCiAgICAgIC8qIEF0dGFjaG1lbnQgQmxvY2sgQ29udGFpbmVyICovCiAgICAgIC5hdHRhY2htZW50LWJsb2NrLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbjogMTJweCAwOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTExODI3Iil9OwogICAgICB9CiAgICAgIAogICAgICAuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLmF0dGFjaG1lbnQtYmxvY2stY29udGFpbmVyLmRyYWctb3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjM2NmYxIiwgIiM4MThjZjgiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEhlYWRlciAqLwogICAgICAuYXR0YWNobWVudC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmF0dGFjaG1lbnQtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgfQogICAgICAKICAgICAgLmF0dGFjaG1lbnQtdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzM3NDE1MSIsICIjZTVlN2ViIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBGaWxlIExpc3QgKi8KICAgICAgLmF0dGFjaG1lbnQtbGlzdCB7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDgwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CiAgICAgIAogICAgICAvKiBQbGFjZWhvbGRlciAqLwogICAgICAuYXR0YWNobWVudC1wbGFjZWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5hdHRhY2htZW50LXBsYWNlaG9sZGVyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICB9CiAgICAgIAogICAgICAucGxhY2Vob2xkZXItdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgfQogICAgICAKICAgICAgLnBsYWNlaG9sZGVyLWhpbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogRmlsZSBJdGVtcyAqLwogICAgICAuYXR0YWNobWVudC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5hdHRhY2htZW50LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMzNzQxNTEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5maWxlLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQogICAgICAKICAgICAgLmZpbGUtaW5mbyB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5maWxlLW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLmZpbGUtc2l6ZSB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgfQogICAgICAKICAgICAgLnJlbW92ZS1maWxlIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2YjcyODAiLCAiIzljYTNhZiIpfTsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5yZW1vdmUtZmlsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZWUyZTIiLCAiIzk5MWIxYiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmNhNWE1IiwgIiNkYzI2MjYiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNmY2E1YTUiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEFkZCBNb3JlIEZpbGVzIEJ1dHRvbiAqLwogICAgICAuYWRkLW1vcmUtZmlsZXMgewogICAgICAgIG1hcmdpbjogOHB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsKICAgICAgfQogICAgICAKICAgICAgLmFkZC1tb3JlLWZpbGVzOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzRiNTU2MyIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSGlkZGVuIGZpbGUgaW5wdXQgKi8KICAgICAgLmF0dGFjaG1lbnQtZmlsZS1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICBgOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL2NvbnRlbnQvZGl2aWRlci5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgRGl2aWRlckJsb2NrSGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgQmFzZUJsb2NrSGFuZGxlciB7CiAgdHlwZSA9ICJkaXZpZGVyIjsKICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSBpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIjsKICAgIHJldHVybiBgCiAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIGRpdmlkZXIke3NlbGVjdGVkQ2xhc3N9IiBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIgZGF0YS1ibG9jay10eXBlPSIke2Jsb2NrLnR5cGV9IiB0YWJpbmRleD0iMCI+CiAgICAgICAgPGhyPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBkaXZpZGVyQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2suZGl2aWRlciIpOwogICAgaWYgKCFkaXZpZGVyQmxvY2spCiAgICAgIHJldHVybjsKICAgIGRpdmlkZXJCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBkaXZpZGVyQmxvY2suZm9jdXMoKTsKICAgICAgaGFuZGxlcnMyLm9uRm9jdXM/LigpOwogICAgfSk7CiAgICBkaXZpZGVyQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkZvY3VzPy4oKTsKICAgIH0pOwogICAgZGl2aWRlckJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkJsdXI/LigpOwogICAgfSk7CiAgICBkaXZpZGVyQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJCYWNrc3BhY2UiIHx8IGUxMS5rZXkgPT09ICJEZWxldGUiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bj8uKGUxMSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bj8uKGUxMSk7CiAgICAgIH0KICAgIH0pOwogIH0KICBnZXRTdHlsZXMoKSB7CiAgICByZXR1cm4gYAogICAgICAuYmxvY2suZGl2aWRlciB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgICAgbWFyZ2luOiAxNnB4IDA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5ibG9jay5kaXZpZGVyOmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAuYmxvY2suZGl2aWRlci5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMDUpIiwgInJnYmEoNzcsIDE0OCwgMjU1LCAwLjA4KSIpfTsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMikiLCAicmdiYSg3NywgMTQ4LCAyNTUsIDAuMikiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jay5kaXZpZGVyIGhyIHsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMzMzMiKX07CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICBgOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL2NvbnRlbnQvbWFya2Rvd24uYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIE1hcmtkb3duQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gIm1hcmtkb3duIjsKICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IGlzRWRpdE1vZGUgPSBibG9jay5tZXRhZGF0YT8uaXNFZGl0TW9kZSA/PyB0cnVlOwogICAgY29uc3QgY29udGVudDMgPSBibG9jay5jb250ZW50IHx8ICIiOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tYmxvY2stY29udGFpbmVyJHtpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIn0iIAogICAgICAgICAgIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9IgogICAgICAgICAgIGRhdGEtZWRpdC1tb2RlPSIke2lzRWRpdE1vZGV9Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24taWNvbiI+TVx1MjE5MzwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tdGl0bGUiPk1hcmtkb3duPC9kaXY+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJtYXJrZG93bi10b2dnbGUtbW9kZSIgdGl0bGU9IiR7aXNFZGl0TW9kZSA/ICJQcmV2aWV3IiA6ICJFZGl0In0iPgogICAgICAgICAgICAke2lzRWRpdE1vZGUgPyAiXHV7MUY0NDF9XHVGRTBGIiA6ICJcdTI3MEZcdUZFMEYifQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tY29udGVudCI+CiAgICAgICAgICAke2lzRWRpdE1vZGUgPyB0aGlzLnJlbmRlckVkaXRvcihjb250ZW50MykgOiB0aGlzLnJlbmRlclByZXZpZXcoY29udGVudDMpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlckVkaXRvcihjb250ZW50MykgewogICAgcmV0dXJuIGAKICAgICAgPHRleHRhcmVhIGNsYXNzPSJtYXJrZG93bi1lZGl0b3IiIAogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkVudGVyIG1hcmtkb3duIGNvbnRlbnQuLi4iCiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPSJmYWxzZSI+JHt0aGlzLmVzY2FwZUh0bWwoY29udGVudDMpfTwvdGV4dGFyZWE+CiAgICBgOwogIH0KICByZW5kZXJQcmV2aWV3KGNvbnRlbnQzKSB7CiAgICBjb25zdCBodG1sMjAgPSB0aGlzLnBhcnNlTWFya2Rvd24oY29udGVudDMpOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tcHJldmlldyI+CiAgICAgICAgJHtodG1sMjAgfHwgJzxkaXYgY2xhc3M9InByZXZpZXctZW1wdHkiPk5vIGNvbnRlbnQgdG8gcHJldmlldzwvZGl2Pid9CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgIGNvbnN0IGNvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IHRvZ2dsZUJ0biA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi10b2dnbGUtbW9kZSIpOwogICAgaWYgKCFjb250YWluZXIgfHwgIXRvZ2dsZUJ0bikgewogICAgICBjb25zb2xlLmVycm9yKCJNYXJrZG93bkJsb2NrSGFuZGxlcjogQ291bGQgbm90IGZpbmQgcmVxdWlyZWQgZWxlbWVudHMiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgIGlmIChibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlID09PSB2b2lkIDApCiAgICAgIGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUgPSB0cnVlOwogICAgdG9nZ2xlQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBpZiAoYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSA9ICFibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlOwogICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgIH0pOwogICAgaWYgKGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUpIHsKICAgICAgdGhpcy5zZXR1cEVkaXRvcihlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnNldHVwUHJldmlldyhlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9CiAgfQogIHNldHVwRWRpdG9yKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICBpZiAoIWVkaXRvcikKICAgICAgcmV0dXJuOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gaGFuZGxlcnMyLm9uRm9jdXMoKSk7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IGhhbmRsZXJzMi5vbkJsdXIoKSk7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoKSA9PiB7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICB9KTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICBpZiAoZTExLmtleSA9PT0gIlRhYiIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBjb25zdCBzdGFydCA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgICAgICBjb25zdCBlbmQzID0gZWRpdG9yLnNlbGVjdGlvbkVuZDsKICAgICAgICBjb25zdCB2YWx1ZTIgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgaWYgKGUxMS5zaGlmdEtleSkgewogICAgICAgICAgY29uc3QgYmVmb3JlQ3Vyc29yID0gdmFsdWUyLnN1YnN0cmluZygwLCBzdGFydCk7CiAgICAgICAgICBjb25zdCBsYXN0TmV3bGluZSA9IGJlZm9yZUN1cnNvci5sYXN0SW5kZXhPZigiXG4iKTsKICAgICAgICAgIGNvbnN0IGxpbmVTdGFydCA9IGxhc3ROZXdsaW5lICsgMTsKICAgICAgICAgIGNvbnN0IGxpbmVDb250ZW50ID0gdmFsdWUyLnN1YnN0cmluZyhsaW5lU3RhcnQsIHN0YXJ0KTsKICAgICAgICAgIGlmIChsaW5lQ29udGVudC5zdGFydHNXaXRoKCIgICIpKSB7CiAgICAgICAgICAgIGVkaXRvci52YWx1ZSA9IHZhbHVlMi5zdWJzdHJpbmcoMCwgbGluZVN0YXJ0KSArIGxpbmVDb250ZW50LnN1YnN0cmluZygyKSArIHZhbHVlMi5zdWJzdHJpbmcoc3RhcnQpOwogICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gc3RhcnQgLSAyOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBlZGl0b3IudmFsdWUgPSB2YWx1ZTIuc3Vic3RyaW5nKDAsIHN0YXJ0KSArICIgICIgKyB2YWx1ZTIuc3Vic3RyaW5nKGVuZDMpOwogICAgICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IHN0YXJ0ICsgMjsKICAgICAgICB9CiAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKChlMTEuY3RybEtleSB8fCBlMTEubWV0YUtleSkgJiYgZTExLmtleSA9PT0gImIiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy53cmFwU2VsZWN0aW9uKGVkaXRvciwgIioqIiwgIioqIik7CiAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKChlMTEuY3RybEtleSB8fCBlMTEubWV0YUtleSkgJiYgZTExLmtleSA9PT0gImkiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy53cmFwU2VsZWN0aW9uKGVkaXRvciwgIl8iLCAiXyIpOwogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICgoZTExLmN0cmxLZXkgfHwgZTExLm1ldGFLZXkpICYmIGUxMS5rZXkgPT09ICJrIikgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuaW5zZXJ0TGluayhlZGl0b3IpOwogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgIH0pOwogICAgdGhpcy5hdXRvUmVzaXplKGVkaXRvcik7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoKSA9PiB0aGlzLmF1dG9SZXNpemUoZWRpdG9yKSk7CiAgfQogIHNldHVwUHJldmlldyhlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWJsb2NrLWNvbnRhaW5lciIpOwogICAgY29uc3QgcHJldmlldyA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1wcmV2aWV3Iik7CiAgICBpZiAoIWNvbnRhaW5lciB8fCAhcHJldmlldykKICAgICAgcmV0dXJuOwogICAgcHJldmlldy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwgIjAiKTsKICAgIHByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgIHByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IGhhbmRsZXJzMi5vbkJsdXIoKSk7CiAgICBwcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiICYmICFlMTEuc2hpZnRLZXkpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlID0gdHJ1ZTsKICAgICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgfSk7CiAgfQogIHdyYXBTZWxlY3Rpb24oZWRpdG9yLCBiZWZvcmUsIGFmdGVyKSB7CiAgICBjb25zdCBzdGFydCA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgIGNvbnN0IGVuZDMgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kOwogICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLnZhbHVlLnN1YnN0cmluZyhzdGFydCwgZW5kMyk7CiAgICBjb25zdCByZXBsYWNlbWVudCA9IGJlZm9yZSArIChzZWxlY3RlZFRleHQgfHwgInRleHQiKSArIGFmdGVyOwogICAgZWRpdG9yLnZhbHVlID0gZWRpdG9yLnZhbHVlLnN1YnN0cmluZygwLCBzdGFydCkgKyByZXBsYWNlbWVudCArIGVkaXRvci52YWx1ZS5zdWJzdHJpbmcoZW5kMyk7CiAgICBpZiAoc2VsZWN0ZWRUZXh0KSB7CiAgICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0OwogICAgICBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gc3RhcnQgKyByZXBsYWNlbWVudC5sZW5ndGg7CiAgICB9IGVsc2UgewogICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBzdGFydCArIGJlZm9yZS5sZW5ndGg7CiAgICAgIGVkaXRvci5zZWxlY3Rpb25FbmQgPSBzdGFydCArIGJlZm9yZS5sZW5ndGggKyA0OwogICAgfQogICAgZWRpdG9yLmZvY3VzKCk7CiAgfQogIGluc2VydExpbmsoZWRpdG9yKSB7CiAgICBjb25zdCBzdGFydCA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgIGNvbnN0IGVuZDMgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kOwogICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLnZhbHVlLnN1YnN0cmluZyhzdGFydCwgZW5kMyk7CiAgICBjb25zdCBsaW5rVGV4dCA9IHNlbGVjdGVkVGV4dCB8fCAibGluayB0ZXh0IjsKICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gYFske2xpbmtUZXh0fV0odXJsKWA7CiAgICBlZGl0b3IudmFsdWUgPSBlZGl0b3IudmFsdWUuc3Vic3RyaW5nKDAsIHN0YXJ0KSArIHJlcGxhY2VtZW50ICsgZWRpdG9yLnZhbHVlLnN1YnN0cmluZyhlbmQzKTsKICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0ICsgbGlua1RleHQubGVuZ3RoICsgMzsKICAgIGVkaXRvci5zZWxlY3Rpb25FbmQgPSBzdGFydCArIGxpbmtUZXh0Lmxlbmd0aCArIDY7CiAgICBlZGl0b3IuZm9jdXMoKTsKICB9CiAgYXV0b1Jlc2l6ZShlZGl0b3IpIHsKICAgIGVkaXRvci5zdHlsZS5oZWlnaHQgPSAiYXV0byI7CiAgICBlZGl0b3Iuc3R5bGUuaGVpZ2h0ID0gZWRpdG9yLnNjcm9sbEhlaWdodCArICJweCI7CiAgfQogIHBhcnNlTWFya2Rvd24obWFya2Rvd24pIHsKICAgIGxldCBodG1sMjAgPSB0aGlzLmVzY2FwZUh0bWwobWFya2Rvd24pOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoL14jIyMgKC4rKSQvZ20sICI8aDM+JDE8L2gzPiIpOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoL14jIyAoLispJC9nbSwgIjxoMj4kMTwvaDI+Iik7CiAgICBodG1sMjAgPSBodG1sMjAucmVwbGFjZSgvXiMgKC4rKSQvZ20sICI8aDE+JDE8L2gxPiIpOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoL1wqXCooLis/KVwqXCovZywgIjxzdHJvbmc+JDE8L3N0cm9uZz4iKTsKICAgIGh0bWwyMCA9IGh0bWwyMC5yZXBsYWNlKC9fXyguKz8pX18vZywgIjxzdHJvbmc+JDE8L3N0cm9uZz4iKTsKICAgIGh0bWwyMCA9IGh0bWwyMC5yZXBsYWNlKC9cKiguKz8pXCovZywgIjxlbT4kMTwvZW0+Iik7CiAgICBodG1sMjAgPSBodG1sMjAucmVwbGFjZSgvXyguKz8pXy9nLCAiPGVtPiQxPC9lbT4iKTsKICAgIGh0bWwyMCA9IGh0bWwyMC5yZXBsYWNlKC9gYGAoW1xzXFNdKj8pYGBgL2csICI8cHJlPjxjb2RlPiQxPC9jb2RlPjwvcHJlPiIpOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoL2AoLis/KWAvZywgIjxjb2RlPiQxPC9jb2RlPiIpOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoL1xbKFteXF1dKylcXVwoKFteKV0rKVwpL2csICc8YSBocmVmPSIkMiI+JDE8L2E+Jyk7CiAgICBodG1sMjAgPSBodG1sMjAucmVwbGFjZSgvXlwqICguKykkL2dtLCAiPGxpPiQxPC9saT4iKTsKICAgIGh0bWwyMCA9IGh0bWwyMC5yZXBsYWNlKC9eLSAoLispJC9nbSwgIjxsaT4kMTwvbGk+Iik7CiAgICBodG1sMjAgPSBodG1sMjAucmVwbGFjZSgvXlxkK1wuICguKykkL2dtLCAiPGxpPiQxPC9saT4iKTsKICAgIGh0bWwyMCA9IGh0bWwyMC5yZXBsYWNlKC8oPGxpPi4qPFwvbGk+XG4/KSsvZywgKG1hdGNoMikgPT4gewogICAgICByZXR1cm4gIjx1bD4iICsgbWF0Y2gyICsgIjwvdWw+IjsKICAgIH0pOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoL1xuXG4vZywgIjwvcD48cD4iKTsKICAgIGh0bWwyMCA9ICI8cD4iICsgaHRtbDIwICsgIjwvcD4iOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoLzxwPjxcL3A+L2csICIiKTsKICAgIGh0bWwyMCA9IGh0bWwyMC5yZXBsYWNlKC88cD4oPGhbMS0zXT4pL2csICIkMSIpOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoLyg8XC9oWzEtM10+KTxcL3A+L2csICIkMSIpOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoLzxwPig8dWw+KS9nLCAiJDEiKTsKICAgIGh0bWwyMCA9IGh0bWwyMC5yZXBsYWNlKC8oPFwvdWw+KTxcL3A+L2csICIkMSIpOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoLzxwPig8cHJlPikvZywgIiQxIik7CiAgICBodG1sMjAgPSBodG1sMjAucmVwbGFjZSgvKDxcL3ByZT4pPFwvcD4vZywgIiQxIik7CiAgICByZXR1cm4gaHRtbDIwOwogIH0KICBlc2NhcGVIdG1sKHRleHQ5KSB7CiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ5OwogICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7CiAgfQogIGdldENvbnRlbnQoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgcmV0dXJuIGVkaXRvci52YWx1ZTsKICAgIH0KICAgIGNvbnN0IGNvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IGJsb2NrSWQgPSBjb250YWluZXI/LmdldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIpOwogICAgcmV0dXJuICIiOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MykgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBlZGl0b3IudmFsdWUgPSBjb250ZW50MzsKICAgICAgdGhpcy5hdXRvUmVzaXplKGVkaXRvcik7CiAgICB9CiAgfQogIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICByZXR1cm4gZWRpdG9yID8gZWRpdG9yLnNlbGVjdGlvblN0YXJ0IDogbnVsbDsKICB9CiAgc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gMDsKICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgY29uc3QgbGVuZ3RoID0gZWRpdG9yLnZhbHVlLmxlbmd0aDsKICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IGxlbmd0aDsKICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgZm9jdXMoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBwcmV2aWV3ID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLXByZXZpZXciKTsKICAgICAgcHJldmlldz8uZm9jdXMoKTsKICAgIH0KICB9CiAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIikgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBpZiAocG9zaXRpb24zID09PSAic3RhcnQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KTsKICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbjMgPT09ICJlbmQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb0VuZChlbGVtZW50NCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBvc2l0aW9uMyA9PT0gIm51bWJlciIpIHsKICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gcG9zaXRpb24zOwogICAgICAgIGVkaXRvci5mb2N1cygpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgZ2V0U3BsaXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICBpZiAoIWVkaXRvcikKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCBjdXJzb3JQb3MgPSBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQ7CiAgICByZXR1cm4gewogICAgICBiZWZvcmU6IGVkaXRvci52YWx1ZS5zdWJzdHJpbmcoMCwgY3Vyc29yUG9zKSwKICAgICAgYWZ0ZXI6IGVkaXRvci52YWx1ZS5zdWJzdHJpbmcoY3Vyc29yUG9zKQogICAgfTsKICB9CiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuIGAKICAgICAgLyogTWFya2Rvd24gQmxvY2sgQ29udGFpbmVyICovCiAgICAgIC5tYXJrZG93bi1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSGVhZGVyICovCiAgICAgIC5tYXJrZG93bi1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMGEwYTBhIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24taWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tdGl0bGUgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi10b2dnbGUtbW9kZSB7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tdG9nZ2xlLW1vZGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBDb250ZW50ICovCiAgICAgIC5tYXJrZG93bi1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogMTIwcHg7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEVkaXRvciAqLwogICAgICAubWFya2Rvd24tZWRpdG9yIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtaW4taGVpZ2h0OiAxMjBweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgICBmb250LWZhbWlseTogJ01vbmFjbycsICdDb25zb2xhcycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZjI5MzciLCAiI2YzZjRmNiIpfTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tZWRpdG9yOjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFByZXZpZXcgKi8KICAgICAgLm1hcmtkb3duLXByZXZpZXcgewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgbWluLWhlaWdodDogOTZweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFmMjkzNyIsICIjZjNmNGY2Iil9OwogICAgICB9CiAgICAgIAogICAgICAucHJldmlldy1lbXB0eSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CiAgICAgIAogICAgICAvKiBNYXJrZG93biBwcmV2aWV3IHN0eWxlcyAqLwogICAgICAubWFya2Rvd24tcHJldmlldyBoMSB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luOiAxNnB4IDAgOHB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGgyIHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBtYXJnaW46IDE0cHggMCA2cHggMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxMTE4MjciLCAiI2Y5ZmFmYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgaDMgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbjogMTJweCAwIDRweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBwIHsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyB1bCwKICAgICAgLm1hcmtkb3duLXByZXZpZXcgb2wgewogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBsaSB7CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmM2Y0ZjYiLCAiIzFmMjkzNyIpfTsKICAgICAgICBwYWRkaW5nOiAycHggNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBmb250LWZhbWlseTogJ01vbmFjbycsICdDb25zb2xhcycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBwcmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMxZjI5MzciKX07CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBwcmUgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgc3Ryb25nIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBlbSB7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBhIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGE6aG92ZXIgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBibG9ja3F1b3RlIHsKICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMnB4OwogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmI3MjgwIiwgIiM5Y2EzYWYiKX07CiAgICAgIH0KICAgIGA7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvY29udGVudC9odG1sLmJsb2NrLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBIdG1sQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gImh0bWwiOwogIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgY29uc3QgaXNFZGl0TW9kZSA9IGJsb2NrLm1ldGFkYXRhPy5pc0VkaXRNb2RlID8/IHRydWU7CiAgICBjb25zdCBjb250ZW50MyA9IGJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJodG1sLWJsb2NrLWNvbnRhaW5lciR7aXNTZWxlY3RlZCA/ICIgc2VsZWN0ZWQiIDogIiJ9IiAKICAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICAgICBkYXRhLWVkaXQtbW9kZT0iJHtpc0VkaXRNb2RlfSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaHRtbC1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iaHRtbC1pY29uIj4mbHQ7LyZndDs8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Imh0bWwtdGl0bGUiPkhUTUw8L2Rpdj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9Imh0bWwtdG9nZ2xlLW1vZGUiIHRpdGxlPSIke2lzRWRpdE1vZGUgPyAiUHJldmlldyIgOiAiRWRpdCJ9Ij4KICAgICAgICAgICAgJHtpc0VkaXRNb2RlID8gIlx1ezFGNDQxfVx1RkUwRiIgOiAiXHUyNzBGXHVGRTBGIn0KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Imh0bWwtY29udGVudCI+CiAgICAgICAgICAke2lzRWRpdE1vZGUgPyB0aGlzLnJlbmRlckVkaXRvcihjb250ZW50MykgOiB0aGlzLnJlbmRlclByZXZpZXcoY29udGVudDMpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlckVkaXRvcihjb250ZW50MykgewogICAgcmV0dXJuIGAKICAgICAgPHRleHRhcmVhIGNsYXNzPSJodG1sLWVkaXRvciIgCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIgSFRNTCBjb250ZW50Li4uIgogICAgICAgICAgICAgICAgc3BlbGxjaGVjaz0iZmFsc2UiPiR7dGhpcy5lc2NhcGVIdG1sKGNvbnRlbnQzKX08L3RleHRhcmVhPgogICAgYDsKICB9CiAgcmVuZGVyUHJldmlldyhjb250ZW50MykgewogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iaHRtbC1wcmV2aWV3Ij4KICAgICAgICAke2NvbnRlbnQzIHx8ICc8ZGl2IGNsYXNzPSJwcmV2aWV3LWVtcHR5Ij5ObyBjb250ZW50IHRvIHByZXZpZXc8L2Rpdj4nfQogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IHRvZ2dsZUJ0biA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLXRvZ2dsZS1tb2RlIik7CiAgICBpZiAoIWNvbnRhaW5lciB8fCAhdG9nZ2xlQnRuKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkh0bWxCbG9ja0hhbmRsZXI6IENvdWxkIG5vdCBmaW5kIHJlcXVpcmVkIGVsZW1lbnRzIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghYmxvY2subWV0YWRhdGEpCiAgICAgIGJsb2NrLm1ldGFkYXRhID0ge307CiAgICBpZiAoYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSA9PT0gdm9pZCAwKQogICAgICBibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlID0gdHJ1ZTsKICAgIHRvZ2dsZUJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgaWYgKGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiLmh0bWwtZWRpdG9yIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSA9ICFibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlOwogICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgIH0pOwogICAgaWYgKGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUpIHsKICAgICAgdGhpcy5zZXR1cEVkaXRvcihlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnNldHVwUHJldmlldyhlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9CiAgfQogIHNldHVwRWRpdG9yKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIGlmICghZWRpdG9yKQogICAgICByZXR1cm47CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gaGFuZGxlcnMyLm9uQmx1cigpKTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsICgpID0+IHsKICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgdGhpcy52YWxpZGF0ZUh0bWwoZWRpdG9yLnZhbHVlKTsKICAgIH0pOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiVGFiIikgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IHN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvblN0YXJ0OwogICAgICAgIGNvbnN0IGVuZDMgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kOwogICAgICAgIGNvbnN0IHZhbHVlMiA9IGVkaXRvci52YWx1ZTsKICAgICAgICBpZiAoZTExLnNoaWZ0S2V5KSB7CiAgICAgICAgICBjb25zdCBiZWZvcmVDdXJzb3IgPSB2YWx1ZTIuc3Vic3RyaW5nKDAsIHN0YXJ0KTsKICAgICAgICAgIGNvbnN0IGxhc3ROZXdsaW5lID0gYmVmb3JlQ3Vyc29yLmxhc3RJbmRleE9mKCJcbiIpOwogICAgICAgICAgY29uc3QgbGluZVN0YXJ0ID0gbGFzdE5ld2xpbmUgKyAxOwogICAgICAgICAgY29uc3QgbGluZUNvbnRlbnQgPSB2YWx1ZTIuc3Vic3RyaW5nKGxpbmVTdGFydCwgc3RhcnQpOwogICAgICAgICAgaWYgKGxpbmVDb250ZW50LnN0YXJ0c1dpdGgoIiAgIikpIHsKICAgICAgICAgICAgZWRpdG9yLnZhbHVlID0gdmFsdWUyLnN1YnN0cmluZygwLCBsaW5lU3RhcnQpICsgbGluZUNvbnRlbnQuc3Vic3RyaW5nKDIpICsgdmFsdWUyLnN1YnN0cmluZyhzdGFydCk7CiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IGVkaXRvci5zZWxlY3Rpb25FbmQgPSBzdGFydCAtIDI7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVkaXRvci52YWx1ZSA9IHZhbHVlMi5zdWJzdHJpbmcoMCwgc3RhcnQpICsgIiAgIiArIHZhbHVlMi5zdWJzdHJpbmcoZW5kMyk7CiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gc3RhcnQgKyAyOwogICAgICAgIH0KICAgICAgICBibG9jay5jb250ZW50ID0gZWRpdG9yLnZhbHVlOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoKGUxMS5jdHJsS2V5IHx8IGUxMS5tZXRhS2V5KSAmJiBlMTEua2V5ID09PSAiLyIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmF1dG9DbG9zZVRhZyhlZGl0b3IpOwogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgIH0pOwogICAgdGhpcy5hdXRvUmVzaXplKGVkaXRvcik7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoKSA9PiB0aGlzLmF1dG9SZXNpemUoZWRpdG9yKSk7CiAgfQogIHNldHVwUHJldmlldyhlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBwcmV2aWV3ID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtcHJldmlldyIpOwogICAgaWYgKCFjb250YWluZXIgfHwgIXByZXZpZXcpCiAgICAgIHJldHVybjsKICAgIHByZXZpZXcuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsICIwIik7CiAgICBwcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gaGFuZGxlcnMyLm9uRm9jdXMoKSk7CiAgICBwcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgcHJldmlldy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICBpZiAoZTExLmtleSA9PT0gIkVudGVyIiAmJiAhZTExLnNoaWZ0S2V5KSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSA9IHRydWU7CiAgICAgICAgaGFuZGxlcnMyLm9uUmVxdWVzdFVwZGF0ZT8uKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgIH0pOwogICAgdGhpcy5zYW5kYm94Q29udGVudChwcmV2aWV3KTsKICB9CiAgYXV0b0Nsb3NlVGFnKGVkaXRvcikgewogICAgY29uc3QgY3Vyc29yUG9zID0gZWRpdG9yLnNlbGVjdGlvblN0YXJ0OwogICAgY29uc3QgdGV4dDkgPSBlZGl0b3IudmFsdWU7CiAgICBsZXQgdGFnU3RhcnQgPSBjdXJzb3JQb3M7CiAgICB3aGlsZSAodGFnU3RhcnQgPiAwICYmIHRleHQ5W3RhZ1N0YXJ0IC0gMV0gIT09ICI8IikgewogICAgICB0YWdTdGFydC0tOwogICAgfQogICAgaWYgKHRhZ1N0YXJ0ID4gMCkgewogICAgICBjb25zdCB0YWdDb250ZW50ID0gdGV4dDkuc3Vic3RyaW5nKHRhZ1N0YXJ0LCBjdXJzb3JQb3MpOwogICAgICBjb25zdCB0YWdNYXRjaCA9IHRhZ0NvbnRlbnQubWF0Y2goL14oXHcrKS8pOwogICAgICBpZiAodGFnTWF0Y2gpIHsKICAgICAgICBjb25zdCB0YWdOYW1lID0gdGFnTWF0Y2hbMV07CiAgICAgICAgY29uc3QgY2xvc2luZ1RhZyA9IGA8LyR7dGFnTmFtZX0+YDsKICAgICAgICBlZGl0b3IudmFsdWUgPSB0ZXh0OS5zdWJzdHJpbmcoMCwgY3Vyc29yUG9zKSArICI+IiArIGNsb3NpbmdUYWcgKyB0ZXh0OS5zdWJzdHJpbmcoY3Vyc29yUG9zKTsKICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gY3Vyc29yUG9zICsgMTsKICAgICAgfQogICAgfQogIH0KICBhdXRvUmVzaXplKGVkaXRvcikgewogICAgZWRpdG9yLnN0eWxlLmhlaWdodCA9ICJhdXRvIjsKICAgIGVkaXRvci5zdHlsZS5oZWlnaHQgPSBlZGl0b3Iuc2Nyb2xsSGVpZ2h0ICsgInB4IjsKICB9CiAgdmFsaWRhdGVIdG1sKGh0bWwyMCkgewogICAgY29uc3Qgb3BlblRhZ3MgPSBbXTsKICAgIGNvbnN0IHRhZ1JlZ2V4ID0gLzxcLz8oW2EtekEtWl1bYS16QS1aMC05XSopXGJbXj5dKj4vZzsKICAgIGxldCBtYXRjaDI7CiAgICB3aGlsZSAoKG1hdGNoMiA9IHRhZ1JlZ2V4LmV4ZWMoaHRtbDIwKSkgIT09IG51bGwpIHsKICAgICAgY29uc3QgaXNDbG9zaW5nID0gbWF0Y2gyWzBdLnN0YXJ0c1dpdGgoIjwvIik7CiAgICAgIGNvbnN0IHRhZ05hbWUgPSBtYXRjaDJbMV0udG9Mb3dlckNhc2UoKTsKICAgICAgaWYgKGlzQ2xvc2luZykgewogICAgICAgIGlmIChvcGVuVGFncy5sZW5ndGggPT09IDAgfHwgb3BlblRhZ3Nbb3BlblRhZ3MubGVuZ3RoIC0gMV0gIT09IHRhZ05hbWUpIHsKICAgICAgICAgIGNvbnNvbGUud2FybihgTWlzbWF0Y2hlZCBjbG9zaW5nIHRhZzogJHt0YWdOYW1lfWApOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBvcGVuVGFncy5wb3AoKTsKICAgICAgfSBlbHNlIGlmICghbWF0Y2gyWzBdLmVuZHNXaXRoKCIvPiIpKSB7CiAgICAgICAgb3BlblRhZ3MucHVzaCh0YWdOYW1lKTsKICAgICAgfQogICAgfQogICAgaWYgKG9wZW5UYWdzLmxlbmd0aCA+IDApIHsKICAgICAgY29uc29sZS53YXJuKGBVbmNsb3NlZCB0YWdzOiAke29wZW5UYWdzLmpvaW4oIiwgIil9YCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KICBzYW5kYm94Q29udGVudChwcmV2aWV3KSB7CiAgICBjb25zdCBzY3JpcHRzID0gcHJldmlldy5xdWVyeVNlbGVjdG9yQWxsKCJzY3JpcHQiKTsKICAgIHNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KSA9PiBzY3JpcHQucmVtb3ZlKCkpOwogICAgY29uc3QgYWxsRWxlbWVudHMgPSBwcmV2aWV3LnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTsKICAgIGFsbEVsZW1lbnRzLmZvckVhY2goKGVsKSA9PiB7CiAgICAgIEFycmF5LmZyb20oZWwuYXR0cmlidXRlcykuZm9yRWFjaCgoYXR0cikgPT4gewogICAgICAgIGlmIChhdHRyLm5hbWUuc3RhcnRzV2l0aCgib24iKSkgewogICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHIubmFtZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogICAgY29uc3QgZm9ybXMgPSBwcmV2aWV3LnF1ZXJ5U2VsZWN0b3JBbGwoImZvcm0iKTsKICAgIGZvcm1zLmZvckVhY2goKGZvcm0pID0+IHsKICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCJzdWJtaXQiLCAoZTExKSA9PiB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICB9KTsKICAgIH0pOwogIH0KICBlc2NhcGVIdG1sKHRleHQ5KSB7CiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ5OwogICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7CiAgfQogIGdldENvbnRlbnQoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICByZXR1cm4gZWRpdG9yLnZhbHVlOwogICAgfQogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgIHJldHVybiAiIjsKICB9CiAgc2V0Q29udGVudChlbGVtZW50NCwgY29udGVudDMpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBlZGl0b3IudmFsdWUgPSBjb250ZW50MzsKICAgICAgdGhpcy5hdXRvUmVzaXplKGVkaXRvcik7CiAgICB9CiAgfQogIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIHJldHVybiBlZGl0b3IgPyBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgOiBudWxsOwogIH0KICBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IDA7CiAgICAgIGVkaXRvci5mb2N1cygpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgICB9CiAgfQogIHNldEN1cnNvclRvRW5kKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgY29uc3QgbGVuZ3RoID0gZWRpdG9yLnZhbHVlLmxlbmd0aDsKICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IGxlbmd0aDsKICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgZm9jdXMoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBlZGl0b3IuZm9jdXMoKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IHByZXZpZXcgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1wcmV2aWV3Iik7CiAgICAgIHByZXZpZXc/LmZvY3VzKCk7CiAgICB9CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBpZiAocG9zaXRpb24zID09PSAic3RhcnQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KTsKICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbjMgPT09ICJlbmQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb0VuZChlbGVtZW50NCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBvc2l0aW9uMyA9PT0gIm51bWJlciIpIHsKICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gcG9zaXRpb24zOwogICAgICAgIGVkaXRvci5mb2N1cygpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgZ2V0U3BsaXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIGlmICghZWRpdG9yKQogICAgICByZXR1cm4gbnVsbDsKICAgIGNvbnN0IGN1cnNvclBvcyA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgIHJldHVybiB7CiAgICAgIGJlZm9yZTogZWRpdG9yLnZhbHVlLnN1YnN0cmluZygwLCBjdXJzb3JQb3MpLAogICAgICBhZnRlcjogZWRpdG9yLnZhbHVlLnN1YnN0cmluZyhjdXJzb3JQb3MpCiAgICB9OwogIH0KICBnZXRTdHlsZXMoKSB7CiAgICByZXR1cm4gYAogICAgICAvKiBIVE1MIEJsb2NrIENvbnRhaW5lciAqLwogICAgICAuaHRtbC1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLWJsb2NrLWNvbnRhaW5lci5zZWxlY3RlZCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBIZWFkZXIgKi8KICAgICAgLmh0bWwtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC10aXRsZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtdG9nZ2xlLW1vZGUgewogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtdG9nZ2xlLW1vZGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBDb250ZW50ICovCiAgICAgIC5odG1sLWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAxMjBweDsKICAgICAgfQogICAgICAKICAgICAgLyogRWRpdG9yICovCiAgICAgIC5odG1sLWVkaXRvciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLWhlaWdodDogMTIwcHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgICAgZm9udC1mYW1pbHk6ICdNb25hY28nLCAnQ29uc29sYXMnLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWYyOTM3IiwgIiNmM2Y0ZjYiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtZWRpdG9yOjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFByZXZpZXcgKi8KICAgICAgLmh0bWwtcHJldmlldyB7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBtaW4taGVpZ2h0OiA5NnB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWYyOTM3IiwgIiNmM2Y0ZjYiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5wcmV2aWV3LWVtcHR5IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFNhbmRib3hlZCBIVE1MIHByZXZpZXcgc3R5bGVzICovCiAgICAgIC5odG1sLXByZXZpZXcgKiB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IGltZyB7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IGEgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjNjBhNWZhIil9OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyBhOmhvdmVyIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyB0YWJsZSB7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IHRoLAogICAgICAuaHRtbC1wcmV2aWV3IHRkIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IHRoIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgcHJlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMWYyOTM3Iil9OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyBjb2RlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMWYyOTM3Iil9OwogICAgICAgIHBhZGRpbmc6IDJweCA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgcHJlIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgIGA7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmJsb2NrcmVnaXN0cmF0aW9uLmpzCmZ1bmN0aW9uIHJlZ2lzdGVyQWxsQmxvY2tIYW5kbGVycygpIHsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJkaXZpZGVyIiwgbmV3IERpdmlkZXJCbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigicGFyYWdyYXBoIiwgbmV3IFBhcmFncmFwaEJsb2NrSGFuZGxlcigpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJoZWFkaW5nLTEiLCBuZXcgSGVhZGluZ0Jsb2NrSGFuZGxlcigiaGVhZGluZy0xIikpOwogIEJsb2NrUmVnaXN0cnkucmVnaXN0ZXIoImhlYWRpbmctMiIsIG5ldyBIZWFkaW5nQmxvY2tIYW5kbGVyKCJoZWFkaW5nLTIiKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigiaGVhZGluZy0zIiwgbmV3IEhlYWRpbmdCbG9ja0hhbmRsZXIoImhlYWRpbmctMyIpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJxdW90ZSIsIG5ldyBRdW90ZUJsb2NrSGFuZGxlcigpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJjb2RlIiwgbmV3IENvZGVCbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigibGlzdCIsIG5ldyBMaXN0QmxvY2tIYW5kbGVyKCkpOwogIEJsb2NrUmVnaXN0cnkucmVnaXN0ZXIoImltYWdlIiwgbmV3IEltYWdlQmxvY2tIYW5kbGVyKCkpOwogIEJsb2NrUmVnaXN0cnkucmVnaXN0ZXIoInlvdXR1YmUiLCBuZXcgWW91VHViZUJsb2NrSGFuZGxlcigpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJhdHRhY2htZW50IiwgbmV3IEF0dGFjaG1lbnRCbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigibWFya2Rvd24iLCBuZXcgTWFya2Rvd25CbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigiaHRtbCIsIG5ldyBIdG1sQmxvY2tIYW5kbGVyKCkpOwp9CnJlZ2lzdGVyQWxsQmxvY2tIYW5kbGVycygpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLm1vZGFsbWFuYWdlci5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgV3lzaXd5Z01vZGFsTWFuYWdlciA9IGNsYXNzIHsKICAvKioKICAgKiBTaG93cyBsYW5ndWFnZSBzZWxlY3Rpb24gbW9kYWwgZm9yIGNvZGUgYmxvY2tzCiAgICovCiAgc3RhdGljIGFzeW5jIHNob3dMYW5ndWFnZVNlbGVjdGlvbk1vZGFsKCkgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gewogICAgICBsZXQgc2VsZWN0ZWRMYW5ndWFnZSA9IG51bGw7CiAgICAgIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICBoZWFkaW5nOiAiU2VsZWN0IFByb2dyYW1taW5nIExhbmd1YWdlIiwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgLmxhbmd1YWdlLWNvbnRhaW5lciB7CiAgICAgICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5sYW5ndWFnZS1ncmlkIHsKICAgICAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDEyMHB4LCAxZnIpKTsKICAgICAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAubGFuZ3VhZ2UtYnV0dG9uIHsKICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDhweDsKICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzM3NDE1MSIsICIjZTVlN2ViIil9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5sYW5ndWFnZS1idXR0b246aG92ZXIgewogICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxZjI5MzciKX07CiAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5sYW5ndWFnZS1idXR0b24uc2VsZWN0ZWQgewogICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMzNzQxNTEiKX07CiAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICAgICAgICB9CiAgICAgICAgICA8L3N0eWxlPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2UtY29udGFpbmVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2UtZ3JpZCI+CiAgICAgICAgICAgICAgJHt0aGlzLmdldExhbmd1YWdlcygpLm1hcCgobGFuZykgPT4gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2UtYnV0dG9uICR7c2VsZWN0ZWRMYW5ndWFnZSA9PT0gbGFuZy50b0xvd2VyQ2FzZSgpID8gInNlbGVjdGVkIiA6ICIifSIgCiAgICAgICAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB7CiAgICAgICAgICBzZWxlY3RlZExhbmd1YWdlID0gbGFuZy50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJkZWVzLW1vZGFsIik7CiAgICAgICAgICBpZiAobW9kYWwgJiYgdHlwZW9mIG1vZGFsLmRlc3Ryb3kgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgfQogICAgICAgICAgcmVzb2x2ZTIoc2VsZWN0ZWRMYW5ndWFnZSk7CiAgICAgICAgfX0iPgogICAgICAgICAgICAgICAgICAke2xhbmd9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgLAogICAgICAgIG1lbnVPcHRpb25zOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSk7CiAgICB9KTsKICB9CiAgLyoqCiAgICogU2hvd3MgYmxvY2sgc2V0dGluZ3MgbW9kYWwKICAgKi8KICBzdGF0aWMgYXN5bmMgc2hvd0Jsb2NrU2V0dGluZ3NNb2RhbChibG9jaywgb25VcGRhdGUpIHsKICAgIGNvbnN0IGNvbnRlbnQzID0gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICAuc2V0dGluZ3MtY29udGFpbmVyIHsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgfQogICAgICAgIC5zZXR0aW5ncy1zZWN0aW9uIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIC5zZXR0aW5ncy1zZWN0aW9uOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgLnNldHRpbmdzLWxhYmVsIHsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2YjcyODAiLCAiIzljYTNhZiIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOwogICAgICAgIH0KICAgICAgICAuYmxvY2stdHlwZS1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgxNjBweCwgMWZyKSk7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgLmJsb2NrLXR5cGUtYnV0dG9uIHsKICAgICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgICAgfQogICAgICAgIC5ibG9jay10eXBlLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICAgIH0KICAgICAgICAuYmxvY2stdHlwZS1idXR0b24uc2VsZWN0ZWQgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmM2Y0ZjYiLCAiIzM3NDE1MSIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICAgIH0KICAgICAgICAuYmxvY2stdHlwZS1pY29uIHsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgICAgb3BhY2l0eTogMC43OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MtY29udGFpbmVyIj4KICAgICAgICAke3RoaXMuZ2V0QmxvY2tUeXBlU2VsZWN0b3IoYmxvY2ssIG9uVXBkYXRlKX0KICAgICAgICAke2Jsb2NrLnR5cGUgPT09ICJjb2RlIiA/IHRoaXMuZ2V0Q29kZUJsb2NrU2V0dGluZ3MoYmxvY2ssIG9uVXBkYXRlKSA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgIGhlYWRpbmc6ICJCbG9jayBTZXR0aW5ncyIsCiAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICBtZW51T3B0aW9uczogWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEb25lIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiB7CiAgICAgICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0KICAgIH0pOwogIH0KICAvKioKICAgKiBHZXRzIGNvZGUgYmxvY2sgc2V0dGluZ3MgY29udGVudAogICAqLwogIHN0YXRpYyBnZXRDb2RlQmxvY2tTZXR0aW5ncyhibG9jaywgb25VcGRhdGUpIHsKICAgIGNvbnN0IGN1cnJlbnRMYW5ndWFnZSA9IGJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZSB8fCAiamF2YXNjcmlwdCI7CiAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICAubGFuZ3VhZ2UtZ3JpZCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTAwcHgsIDFmcikpOwogICAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgfQogICAgICAgIC5sYW5ndWFnZS1idXR0b24gewogICAgICAgICAgcGFkZGluZzogOHB4IDRweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgICAgfQogICAgICAgIC5sYW5ndWFnZS1idXR0b246aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzRiNTU2MyIpfTsKICAgICAgICB9CiAgICAgICAgLmxhbmd1YWdlLWJ1dHRvbi5zZWxlY3RlZCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMzc0MTUxIil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1zZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1sYWJlbCI+UHJvZ3JhbW1pbmcgTGFuZ3VhZ2U8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJsYW5ndWFnZS1ncmlkIj4KICAgICAgICAgICR7dGhpcy5nZXRMYW5ndWFnZXMoKS5tYXAoKGxhbmcpID0+IGIyYAogICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgIGNsYXNzPSJsYW5ndWFnZS1idXR0b24gJHtjdXJyZW50TGFuZ3VhZ2UgPT09IGxhbmcudG9Mb3dlckNhc2UoKSA/ICJzZWxlY3RlZCIgOiAiIn0iIAogICAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB7CiAgICAgIGlmICghYmxvY2subWV0YWRhdGEpCiAgICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgICAgYmxvY2subWV0YWRhdGEubGFuZ3VhZ2UgPSBsYW5nLnRvTG93ZXJDYXNlKCk7CiAgICAgIG9uVXBkYXRlKGJsb2NrKTsKICAgICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJkZWVzLW1vZGFsIik7CiAgICAgIGlmIChtb2RhbCAmJiB0eXBlb2YgbW9kYWwuZGVzdHJveSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgfQogICAgfX0iCiAgICAgICAgICAgICAgZGF0YS1sYW5nPSIke2xhbmd9IgogICAgICAgICAgICA+JHtsYW5nfTwvZGl2PgogICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgLyoqCiAgICogR2V0cyBhdmFpbGFibGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzCiAgICovCiAgc3RhdGljIGdldExhbmd1YWdlcygpIHsKICAgIHJldHVybiBbLi4uUFJPR1JBTU1JTkdfTEFOR1VBR0VTXTsKICB9CiAgLyoqCiAgICogR2V0cyBibG9jayB0eXBlIHNlbGVjdG9yCiAgICovCiAgc3RhdGljIGdldEJsb2NrVHlwZVNlbGVjdG9yKGJsb2NrLCBvblVwZGF0ZSkgewogICAgY29uc3QgYmxvY2tUeXBlcyA9IFd5c2l3eWdTaG9ydGN1dHMuZ2V0U2xhc2hNZW51SXRlbXMoKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udHlwZSAhPT0gImRpdmlkZXIiKTsKICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3Mtc2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MtbGFiZWwiPkJsb2NrIFR5cGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJibG9jay10eXBlLWdyaWQiPgogICAgICAgICAgJHtibG9ja1R5cGVzLm1hcCgoaXRlbSkgPT4gYjJgCiAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgY2xhc3M9ImJsb2NrLXR5cGUtYnV0dG9uICR7YmxvY2sudHlwZSA9PT0gaXRlbS50eXBlID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9IiR7YXN5bmMgKGUxMSkgPT4gewogICAgICBjb25zdCBidXR0b24gPSBlMTEuY3VycmVudFRhcmdldDsKICAgICAgY29uc3Qgb2xkVHlwZSA9IGJsb2NrLnR5cGU7CiAgICAgIGJsb2NrLnR5cGUgPSBpdGVtLnR5cGU7CiAgICAgIGlmIChvbGRUeXBlID09PSAiY29kZSIgJiYgYmxvY2sudHlwZSAhPT0gImNvZGUiKSB7CiAgICAgICAgZGVsZXRlIGJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZTsKICAgICAgfSBlbHNlIGlmIChvbGRUeXBlID09PSAibGlzdCIgJiYgYmxvY2sudHlwZSAhPT0gImxpc3QiKSB7CiAgICAgICAgZGVsZXRlIGJsb2NrLm1ldGFkYXRhPy5saXN0VHlwZTsKICAgICAgfSBlbHNlIGlmIChibG9jay50eXBlID09PSAibGlzdCIgJiYgIWJsb2NrLm1ldGFkYXRhPy5saXN0VHlwZSkgewogICAgICAgIGJsb2NrLm1ldGFkYXRhID0geyBsaXN0VHlwZTogImJ1bGxldCIgfTsKICAgICAgfSBlbHNlIGlmIChibG9jay50eXBlID09PSAiY29kZSIgJiYgIWJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZSkgewogICAgICAgIGNvbnN0IGxhbmd1YWdlID0gYXdhaXQgdGhpcy5zaG93TGFuZ3VhZ2VTZWxlY3Rpb25Nb2RhbCgpOwogICAgICAgIGlmIChsYW5ndWFnZSkgewogICAgICAgICAgYmxvY2subWV0YWRhdGEgPSB7IGxhbmd1YWdlIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJsb2NrLnR5cGUgPSBvbGRUeXBlOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBvblVwZGF0ZShibG9jayk7CiAgICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZGVlcy1tb2RhbCIpOwogICAgICBpZiAobW9kYWwgJiYgdHlwZW9mIG1vZGFsLmRlc3Ryb3kgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBtb2RhbC5kZXN0cm95KCk7CiAgICAgIH0KICAgIH19IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJsb2NrLXR5cGUtaWNvbiI+JHtpdGVtLmljb259PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuPiR7aXRlbS5sYWJlbH08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuaW5wdXRoYW5kbGVyLmpzCnZhciBXeXNpd3lnSW5wdXRIYW5kbGVyID0gY2xhc3MgewogIGNvbXBvbmVudDsKICBzYXZlVGltZW91dCA9IG51bGw7CiAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7CiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBpbnB1dCBldmVudHMgZm9yIGJsb2NrcwogICAqLwogIGhhbmRsZUJsb2NrSW5wdXQoZTExLCBibG9jaykgewogICAgaWYgKHRoaXMuY29tcG9uZW50LmlzQ29tcG9zaW5nKQogICAgICByZXR1cm47CiAgICBjb25zdCB0YXJnZXQgPSBlMTEudGFyZ2V0OwogICAgY29uc3QgdGV4dENvbnRlbnQgPSB0YXJnZXQudGV4dENvbnRlbnQgfHwgIiI7CiAgICBjb25zdCBkZXRlY3RlZFR5cGUgPSB0aGlzLmRldGVjdEJsb2NrVHlwZUludGVudCh0ZXh0Q29udGVudCk7CiAgICBpZiAoZGV0ZWN0ZWRUeXBlICYmIGRldGVjdGVkVHlwZS50eXBlICE9PSBibG9jay50eXBlKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLmhhbmRsZUJsb2NrVHJhbnNmb3JtYXRpb24oYmxvY2ssIGRldGVjdGVkVHlwZSwgdGFyZ2V0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5oYW5kbGVTbGFzaENvbW1hbmQodGV4dENvbnRlbnQsIHRhcmdldCk7CiAgICB0aGlzLnNjaGVkdWxlQXV0b1NhdmUoKTsKICB9CiAgLyoqCiAgICogVXBkYXRlcyBibG9jayBjb250ZW50IGJhc2VkIG9uIGl0cyB0eXBlCiAgICovCiAgdXBkYXRlQmxvY2tDb250ZW50KGJsb2NrLCB0YXJnZXQpIHsKICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gdGFyZ2V0LmNsb3Nlc3QoIi5ibG9jay13cmFwcGVyIik7CiAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgIGlmIChibG9ja0NvbXBvbmVudCkgewogICAgICBjb25zdCBuZXdDb250ZW50ID0gYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpOwogICAgICBpZiAoYmxvY2suY29udGVudCAhPT0gbmV3Q29udGVudCkgewogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBuZXdDb250ZW50OwogICAgICB9CiAgICAgIGlmIChibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgICBjb25zdCBsaXN0RWxlbWVudCA9IHRhcmdldC5xdWVyeVNlbGVjdG9yKCJvbCwgdWwiKTsKICAgICAgICBpZiAobGlzdEVsZW1lbnQpIHsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhID0gewogICAgICAgICAgICBsaXN0VHlwZTogbGlzdEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAib2wiID8gIm9yZGVyZWQiIDogImJ1bGxldCIKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoYmxvY2sudHlwZSA9PT0gImxpc3QiKSB7CiAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gdGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoImxpIik7CiAgICAgICAgYmxvY2suY29udGVudCA9IEFycmF5LmZyb20obGlzdEl0ZW1zKS5tYXAoKGxpMikgPT4gbGkyLmlubmVySFRNTCB8fCAiIikuam9pbigiXG4iKTsKICAgICAgICBjb25zdCBsaXN0RWxlbWVudCA9IHRhcmdldC5xdWVyeVNlbGVjdG9yKCJvbCwgdWwiKTsKICAgICAgICBpZiAobGlzdEVsZW1lbnQpIHsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhID0gewogICAgICAgICAgICBsaXN0VHlwZTogbGlzdEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAib2wiID8gIm9yZGVyZWQiIDogImJ1bGxldCIKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGJsb2NrLnR5cGUgPT09ICJjb2RlIikgewogICAgICAgIGJsb2NrLmNvbnRlbnQgPSB0YXJnZXQudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYmxvY2suY29udGVudCA9IHRhcmdldC5pbm5lckhUTUwgfHwgIiI7CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogRGV0ZWN0cyBpZiB0aGUgdXNlciBpcyB0cnlpbmcgdG8gY3JlYXRlIGEgc3BlY2lmaWMgYmxvY2sgdHlwZQogICAqLwogIGRldGVjdEJsb2NrVHlwZUludGVudChjb250ZW50MykgewogICAgY29uc3QgaGVhZGluZ1Jlc3VsdCA9IFd5c2l3eWdTaG9ydGN1dHMuY2hlY2tIZWFkaW5nU2hvcnRjdXQoY29udGVudDMpOwogICAgaWYgKGhlYWRpbmdSZXN1bHQpIHsKICAgICAgcmV0dXJuIGhlYWRpbmdSZXN1bHQ7CiAgICB9CiAgICBjb25zdCBsaXN0UmVzdWx0ID0gV3lzaXd5Z1Nob3J0Y3V0cy5jaGVja0xpc3RTaG9ydGN1dChjb250ZW50Myk7CiAgICBpZiAobGlzdFJlc3VsdCkgewogICAgICByZXR1cm4gbGlzdFJlc3VsdDsKICAgIH0KICAgIGlmIChXeXNpd3lnU2hvcnRjdXRzLmNoZWNrUXVvdGVTaG9ydGN1dChjb250ZW50MykpIHsKICAgICAgcmV0dXJuIHsgdHlwZTogInF1b3RlIiB9OwogICAgfQogICAgaWYgKFd5c2l3eWdTaG9ydGN1dHMuY2hlY2tDb2RlU2hvcnRjdXQoY29udGVudDMpKSB7CiAgICAgIHJldHVybiB7IHR5cGU6ICJjb2RlIiB9OwogICAgfQogICAgaWYgKFd5c2l3eWdTaG9ydGN1dHMuY2hlY2tEaXZpZGVyU2hvcnRjdXQoY29udGVudDMpKSB7CiAgICAgIHJldHVybiB7IHR5cGU6ICJkaXZpZGVyIiB9OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIC8qKgogICAqIEhhbmRsZXMgYmxvY2sgdHlwZSB0cmFuc2Zvcm1hdGlvbgogICAqLwogIGFzeW5jIGhhbmRsZUJsb2NrVHJhbnNmb3JtYXRpb24oYmxvY2ssIGRldGVjdGVkVHlwZSwgdGFyZ2V0KSB7CiAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgIGlmIChkZXRlY3RlZFR5cGUudHlwZSA9PT0gImxpc3QiKSB7CiAgICAgIGJsb2NrLnR5cGUgPSAibGlzdCI7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgYmxvY2subWV0YWRhdGEgPSB7IGxpc3RUeXBlOiBkZXRlY3RlZFR5cGUubGlzdFR5cGUgfTsKICAgICAgY29uc3QgbGlzdFRhZyA9IGRldGVjdGVkVHlwZS5saXN0VHlwZSA9PT0gIm9yZGVyZWQiID8gIm9sIiA6ICJ1bCI7CiAgICAgIHRhcmdldC5pbm5lckhUTUwgPSBgPCR7bGlzdFRhZ30+PGxpPjwvbGk+PC8ke2xpc3RUYWd9PmA7CiAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCk7CiAgICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlQmxvY2tFbGVtZW50KGJsb2NrLmlkKTsKICAgICAgfQogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBXeXNpd3lnQmxvY2tzLmZvY3VzTGlzdEl0ZW0odGFyZ2V0KTsKICAgICAgfSwgMCk7CiAgICB9IGVsc2UgaWYgKGRldGVjdGVkVHlwZS50eXBlID09PSAiZGl2aWRlciIpIHsKICAgICAgYmxvY2sudHlwZSA9ICJkaXZpZGVyIjsKICAgICAgYmxvY2suY29udGVudCA9ICIgIjsKICAgICAgaWYgKHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYpIHsKICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVCbG9ja0VsZW1lbnQoYmxvY2suaWQpOwogICAgICB9CiAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgfSBlbHNlIGlmIChkZXRlY3RlZFR5cGUudHlwZSA9PT0gImNvZGUiKSB7CiAgICAgIGNvbnN0IGxhbmd1YWdlID0gYXdhaXQgV3lzaXd5Z01vZGFsTWFuYWdlci5zaG93TGFuZ3VhZ2VTZWxlY3Rpb25Nb2RhbCgpOwogICAgICBpZiAobGFuZ3VhZ2UpIHsKICAgICAgICBibG9jay50eXBlID0gImNvZGUiOwogICAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICBibG9jay5tZXRhZGF0YSA9IHsgbGFuZ3VhZ2UgfTsKICAgICAgICB0YXJnZXQudGV4dENvbnRlbnQgPSAiIjsKICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVCbG9ja0VsZW1lbnQoYmxvY2suaWQpOwogICAgICAgIH0KICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2soYmxvY2suaWQsICJzdGFydCIpOwogICAgICAgIH0sIDUwKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYmxvY2sudHlwZSA9IGRldGVjdGVkVHlwZS50eXBlOwogICAgICBibG9jay5jb250ZW50ID0gIiI7CiAgICAgIHRhcmdldC50ZXh0Q29udGVudCA9ICIiOwogICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgICBpZiAodGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChibG9jay5pZCk7CiAgICAgIH0KICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhibG9jay5pZCwgInN0YXJ0Iik7CiAgICAgIH0sIDUwKTsKICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBzbGFzaCBjb21tYW5kIGRldGVjdGlvbiBhbmQgbWVudSBkaXNwbGF5CiAgICovCiAgaGFuZGxlU2xhc2hDb21tYW5kKHRleHRDb250ZW50LCB0YXJnZXQpIHsKICAgIGNvbnN0IHNsYXNoTWVudSA9IHRoaXMuY29tcG9uZW50LnNsYXNoTWVudTsKICAgIGNvbnN0IGlzU2xhc2hNZW51VmlzaWJsZSA9IHNsYXNoTWVudSAmJiBzbGFzaE1lbnUudmlzaWJsZTsKICAgIGlmICh0ZXh0Q29udGVudCA9PT0gIi8iIHx8IHRleHRDb250ZW50LnN0YXJ0c1dpdGgoIi8iKSAmJiBpc1NsYXNoTWVudVZpc2libGUpIHsKICAgICAgaWYgKCFpc1NsYXNoTWVudVZpc2libGUgJiYgdGV4dENvbnRlbnQgPT09ICIvIikgewogICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmdldENhcmV0Q29vcmRpbmF0ZXModGFyZ2V0KTsKICAgICAgICBzbGFzaE1lbnUuc2hvdyh7IHg6IHJlY3QubGVmdCwgeTogcmVjdC5ib3R0b20gKyA0IH0sICh0eXBlNSkgPT4gewogICAgICAgICAgdGhpcy5jb21wb25lbnQuaW5zZXJ0QmxvY2sodHlwZTUpOwogICAgICAgIH0pOwogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gdGFyZ2V0KSB7CiAgICAgICAgICAgIHRhcmdldC5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChzbGFzaE1lbnUpIHsKICAgICAgICBzbGFzaE1lbnUudXBkYXRlRmlsdGVyKHRleHRDb250ZW50LnNsaWNlKDEpKTsKICAgICAgfQogICAgfSBlbHNlIGlmICghdGV4dENvbnRlbnQuc3RhcnRzV2l0aCgiLyIpKSB7CiAgICAgIHRoaXMuY29tcG9uZW50LmNsb3NlU2xhc2hNZW51KCk7CiAgICB9CiAgfQogIC8qKgogICAqIEdldHMgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBjYXJldC9jdXJzb3IKICAgKi8KICBnZXRDYXJldENvb3JkaW5hdGVzKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgaWYgKHJlY3Qud2lkdGggPiAwIHx8IHJlY3QuaGVpZ2h0ID4gMCkgewogICAgICAgIHJldHVybiByZWN0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZWxlbWVudDQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgfQogIC8qKgogICAqIFNjaGVkdWxlcyBhdXRvLXNhdmUgYWZ0ZXIgYSBkZWxheQogICAqLwogIHNjaGVkdWxlQXV0b1NhdmUoKSB7CiAgICBpZiAodGhpcy5zYXZlVGltZW91dCkgewogICAgICBjbGVhclRpbWVvdXQodGhpcy5zYXZlVGltZW91dCk7CiAgICB9CiAgICBpZiAodGhpcy5jb21wb25lbnQuc2xhc2hNZW51ICYmIHRoaXMuY29tcG9uZW50LnNsYXNoTWVudS52aXNpYmxlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuc2F2ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgdGhpcy5zeW5jQWxsQmxvY2tDb250ZW50KCk7CiAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCk7CiAgICB9LCAyZTMpOwogIH0KICAvKioKICAgKiBTeW5jcyBjb250ZW50IGZyb20gYWxsIGJsb2NrIERPTXMgdG8gdGhlIGRhdGEgbW9kZWwKICAgKi8KICBzeW5jQWxsQmxvY2tDb250ZW50KCkgewogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7CiAgICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gdGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSB3cmFwcGVyRWxlbWVudD8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgIGlmIChibG9ja0NvbXBvbmVudCAmJiBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KSB7CiAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQoKTsKICAgICAgICBpZiAoYmxvY2suY29udGVudCAhPT0gbmV3Q29udGVudCkgewogICAgICAgICAgYmxvY2suY29udGVudCA9IG5ld0NvbnRlbnQ7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9CiAgLyoqCiAgICogQ2xlYW5zIHVwIHJlc291cmNlcwogICAqLwogIGRlc3Ryb3koKSB7CiAgICBpZiAodGhpcy5zYXZlVGltZW91dCkgewogICAgICBjbGVhclRpbWVvdXQodGhpcy5zYXZlVGltZW91dCk7CiAgICB9CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmtleWJvYXJkaGFuZGxlci5qcwp2YXIgV3lzaXd5Z0tleWJvYXJkSGFuZGxlciA9IGNsYXNzIHsKICBjb21wb25lbnQ7CiAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7CiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBrZXlib2FyZCBldmVudHMgZm9yIGJsb2NrcwogICAqLwogIGFzeW5jIGhhbmRsZUJsb2NrS2V5RG93bihlMTEsIGJsb2NrKSB7CiAgICBpZiAodGhpcy5jb21wb25lbnQuc2xhc2hNZW51LnZpc2libGUgJiYgdGhpcy5pc1NsYXNoTWVudUtleShlMTEua2V5KSkgewogICAgICB0aGlzLmNvbXBvbmVudC5oYW5kbGVTbGFzaE1lbnVLZXlib2FyZChlMTEpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAodGhpcy5oYW5kbGVGb3JtYXR0aW5nU2hvcnRjdXRzKGUxMSkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgc3dpdGNoIChlMTEua2V5KSB7CiAgICAgIGNhc2UgIlRhYiI6CiAgICAgICAgdGhpcy5oYW5kbGVUYWIoZTExLCBibG9jayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkVudGVyIjoKICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUVudGVyKGUxMSwgYmxvY2spOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJCYWNrc3BhY2UiOgogICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQmFja3NwYWNlKGUxMSwgYmxvY2spOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJEZWxldGUiOgogICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRGVsZXRlKGUxMSwgYmxvY2spOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJBcnJvd1VwIjoKICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUFycm93VXAoZTExLCBibG9jayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkFycm93RG93biI6CiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVBcnJvd0Rvd24oZTExLCBibG9jayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkFycm93TGVmdCI6CiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVBcnJvd0xlZnQoZTExLCBibG9jayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkFycm93UmlnaHQiOgogICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQXJyb3dSaWdodChlMTEsIGJsb2NrKTsKICAgICAgICBicmVhazsKICAgIH0KICB9CiAgLyoqCiAgICogQ2hlY2tzIGlmIGtleSBpcyBmb3Igc2xhc2ggbWVudSBuYXZpZ2F0aW9uCiAgICovCiAgaXNTbGFzaE1lbnVLZXkoa2V5MikgewogICAgcmV0dXJuIFsiQXJyb3dEb3duIiwgIkFycm93VXAiLCAiRW50ZXIiLCAiRXNjYXBlIl0uaW5jbHVkZXMoa2V5Mik7CiAgfQogIC8qKgogICAqIEhhbmRsZXMgZm9ybWF0dGluZyBrZXlib2FyZCBzaG9ydGN1dHMKICAgKi8KICBoYW5kbGVGb3JtYXR0aW5nU2hvcnRjdXRzKGUxMSkgewogICAgaWYgKCEoZTExLm1ldGFLZXkgfHwgZTExLmN0cmxLZXkpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBzd2l0Y2ggKGUxMS5rZXkudG9Mb3dlckNhc2UoKSkgewogICAgICBjYXNlICJiIjoKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuY29tcG9uZW50LmFwcGx5Rm9ybWF0KCJib2xkIikpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICBjYXNlICJpIjoKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuY29tcG9uZW50LmFwcGx5Rm9ybWF0KCJpdGFsaWMiKSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGNhc2UgInUiOgogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5jb21wb25lbnQuYXBwbHlGb3JtYXQoInVuZGVybGluZSIpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgY2FzZSAiayI6CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLmNvbXBvbmVudC5hcHBseUZvcm1hdCgibGluayIpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBUYWIga2V5CiAgICovCiAgaGFuZGxlVGFiKGUxMSwgYmxvY2spIHsKICAgIGlmIChibG9jay50eXBlID09PSAiY29kZSIpIHsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmIChibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICB9CiAgfQogIC8qKgogICAqIEhhbmRsZXMgRW50ZXIga2V5CiAgICovCiAgYXN5bmMgaGFuZGxlRW50ZXIoZTExLCBibG9jaykgewogICAgY29uc3QgYmxvY2tPcHMgPSB0aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7CiAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgaWYgKG5vbkVkaXRhYmxlVHlwZXMuaW5jbHVkZXMoYmxvY2sudHlwZSkpIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgYXdhaXQgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoYmxvY2sudHlwZSA9PT0gImNvZGUiKSB7CiAgICAgIGlmIChlMTEuc2hpZnRLZXkpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBjb25zdCBuZXdCbG9jayA9IGJsb2NrT3BzLmNyZWF0ZUJsb2NrKCk7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghZTExLnNoaWZ0S2V5KSB7CiAgICAgIGlmIChibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUVudGVySW5MaXN0KGUxMSwgYmxvY2spOwogICAgICB9IGVsc2UgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmIChibG9ja0NvbXBvbmVudCAmJiBibG9ja0NvbXBvbmVudC5nZXRTcGxpdENvbnRlbnQpIHsKICAgICAgICAgIGNvbnN0IHNwbGl0Q29udGVudCA9IGJsb2NrQ29tcG9uZW50LmdldFNwbGl0Q29udGVudCgpOwogICAgICAgICAgaWYgKHNwbGl0Q29udGVudCkgewogICAgICAgICAgICBibG9ja0NvbXBvbmVudC5zZXRDb250ZW50KHNwbGl0Q29udGVudC5iZWZvcmUpOwogICAgICAgICAgICBibG9jay5jb250ZW50ID0gc3BsaXRDb250ZW50LmJlZm9yZTsKICAgICAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBibG9ja09wcy5jcmVhdGVCbG9jaygicGFyYWdyYXBoIiwgc3BsaXRDb250ZW50LmFmdGVyKTsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBibG9ja09wcy5jcmVhdGVCbG9jaygpOwogICAgICAgICAgICBhd2FpdCBibG9ja09wcy5pbnNlcnRCbG9ja0FmdGVyKGJsb2NrLCBuZXdCbG9jayk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgICAgIGF3YWl0IGJsb2NrT3BzLmluc2VydEJsb2NrQWZ0ZXIoYmxvY2ssIG5ld0Jsb2NrKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBFbnRlciBrZXkgaW4gbGlzdCBibG9ja3MKICAgKi8KICBhc3luYyBoYW5kbGVFbnRlckluTGlzdChlMTEsIGJsb2NrKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgY29uc3QgY3VycmVudExpID0gcmFuZ2UyLnN0YXJ0Q29udGFpbmVyLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoImxpIik7CiAgICAgIGlmIChjdXJyZW50TGkgJiYgY3VycmVudExpLnRleHRDb250ZW50ID09PSAiIikgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgICBhd2FpdCBibG9ja09wcy5pbnNlcnRCbG9ja0FmdGVyKGJsb2NrLCBuZXdCbG9jayk7CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBCYWNrc3BhY2Uga2V5CiAgICovCiAgYXN5bmMgaGFuZGxlQmFja3NwYWNlKGUxMSwgYmxvY2spIHsKICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAodGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICBjb25zdCBuZXdCbG9jayA9IGJsb2NrT3BzLmNyZWF0ZUJsb2NrKCJwYXJhZ3JhcGgiLCAiIik7CiAgICAgICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gW25ld0Jsb2NrXTsKICAgICAgICB0aGlzLmNvbXBvbmVudC5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCk7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhuZXdCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5jb21wb25lbnQuc2F2ZVRvSGlzdG9yeShmYWxzZSk7CiAgICAgIGNvbnN0IHByZXZCbG9jayA9IGJsb2NrT3BzLmdldFByZXZpb3VzQmxvY2soYmxvY2suaWQpOwogICAgICBjb25zdCBuZXh0QmxvY2sgPSBibG9ja09wcy5nZXROZXh0QmxvY2soYmxvY2suaWQpOwogICAgICBibG9ja09wcy5yZW1vdmVCbG9jayhibG9jay5pZCk7CiAgICAgIGlmIChwcmV2QmxvY2sgJiYgcHJldkJsb2NrLnR5cGUgIT09ICJkaXZpZGVyIiAmJiBwcmV2QmxvY2sudHlwZSAhPT0gImltYWdlIikgewogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2socHJldkJsb2NrLmlkLCAiZW5kIik7CiAgICAgIH0gZWxzZSBpZiAobmV4dEJsb2NrICYmIG5leHRCbG9jay50eXBlICE9PSAiZGl2aWRlciIgJiYgbmV4dEJsb2NrLnR5cGUgIT09ICJpbWFnZSIpIHsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgIH0gZWxzZSBpZiAocHJldkJsb2NrKSB7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQpOwogICAgICB9IGVsc2UgaWYgKG5leHRCbG9jaykgewogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV4dEJsb2NrLmlkKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLmNvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iXWApOwogICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgaWYgKCFibG9ja0NvbXBvbmVudCB8fCAhYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgdGFyZ2V0ID0gYmxvY2sudHlwZSA9PT0gImNvZGUiID8gYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKSA6IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICBpZiAoIXRhcmdldCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gYmxvY2tDb21wb25lbnQuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgY29uc3QgY3Vyc29yUG9zID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudCh0YXJnZXQsIC4uLnNoYWRvd1Jvb3RzKTsKICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50ID8gYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpIDogdGFyZ2V0LnRleHRDb250ZW50OwogICAgaWYgKGN1cnNvclBvcyA9PT0gMCkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgY29uc3QgcHJldkJsb2NrID0gYmxvY2tPcHMuZ2V0UHJldmlvdXNCbG9jayhibG9jay5pZCk7CiAgICAgIGlmIChwcmV2QmxvY2spIHsKICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzMiA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICBpZiAobm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMocHJldkJsb2NrLnR5cGUpKSB7CiAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgICAgIGlmIChwcmV2QmxvY2sudHlwZSA9PT0gImNvZGUiICYmIGJsb2NrLnR5cGUgIT09ICJjb2RlIikgewogICAgICAgICAgaWYgKGJsb2NrLmNvbnRlbnQgPT09ICIiKSB7CiAgICAgICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQsICJlbmQiKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGJsb2NrLnR5cGUgPT09ICJjb2RlIiAmJiBwcmV2QmxvY2sudHlwZSAhPT0gImNvZGUiKSB7CiAgICAgICAgICBjb25zdCBhY3R1YWxDb250ZW50MiA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQgPyBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCkgOiBibG9jay5jb250ZW50OwogICAgICAgICAgaWYgKGFjdHVhbENvbnRlbnQyID09PSAiIiB8fCBhY3R1YWxDb250ZW50Mi50cmltKCkgPT09ICIiKSB7CiAgICAgICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQsICJlbmQiKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgcHJldkJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3ByZXZCbG9jay5pZH0iXWApOwogICAgICAgIGNvbnN0IHByZXZCbG9ja0NvbXBvbmVudCA9IHByZXZCbG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGNvbnN0IHByZXZDb250ZW50ID0gcHJldkJsb2NrQ29tcG9uZW50Py5nZXRDb250ZW50KCkgfHwgcHJldkJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICAgICAgY29uc3QgY3VycmVudENvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCkgfHwgYmxvY2suY29udGVudCB8fCAiIjsKICAgICAgICBsZXQgbWVyZ2VkQ29udGVudCA9ICIiOwogICAgICAgIGlmIChwcmV2QmxvY2sudHlwZSA9PT0gImNvZGUiICYmIGJsb2NrLnR5cGUgPT09ICJjb2RlIikgewogICAgICAgICAgbWVyZ2VkQ29udGVudCA9IHByZXZDb250ZW50ICsgKHByZXZDb250ZW50ICYmIGN1cnJlbnRDb250ZW50ID8gIlxuIiA6ICIiKSArIGN1cnJlbnRDb250ZW50OwogICAgICAgIH0gZWxzZSBpZiAocHJldkJsb2NrLnR5cGUgPT09ICJsaXN0IiAmJiBibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgICAgIG1lcmdlZENvbnRlbnQgPSBwcmV2Q29udGVudCArIChwcmV2Q29udGVudCAmJiBjdXJyZW50Q29udGVudCA/ICJcbiIgOiAiIikgKyBjdXJyZW50Q29udGVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWVyZ2VkQ29udGVudCA9IHByZXZDb250ZW50ICsgKHByZXZDb250ZW50ICYmIGN1cnJlbnRDb250ZW50ID8gIiAiIDogIiIpICsgY3VycmVudENvbnRlbnQ7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG1lcmdlUG9pbnQgPSBwcmV2Q29udGVudC5sZW5ndGg7CiAgICAgICAgYmxvY2tPcHMudXBkYXRlQmxvY2tDb250ZW50KHByZXZCbG9jay5pZCwgbWVyZ2VkQ29udGVudCk7CiAgICAgICAgaWYgKHByZXZCbG9ja0NvbXBvbmVudCkgewogICAgICAgICAgcHJldkJsb2NrQ29tcG9uZW50LnNldENvbnRlbnQobWVyZ2VkQ29udGVudCk7CiAgICAgICAgfQogICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCwgbWVyZ2VQb2ludCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aCA+IDEpIHsKICAgICAgY29uc3QgY3VycmVudENvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50ID8gYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpIDogYmxvY2suY29udGVudDsKICAgICAgaWYgKGN1cnJlbnRDb250ZW50ID09PSAiIiB8fCBjdXJyZW50Q29udGVudC50cmltKCkgPT09ICIiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgY29uc3QgcHJldkJsb2NrID0gYmxvY2tPcHMuZ2V0UHJldmlvdXNCbG9jayhibG9jay5pZCk7CiAgICAgICAgaWYgKHByZXZCbG9jaykgewogICAgICAgICAgYmxvY2tPcHMucmVtb3ZlQmxvY2soYmxvY2suaWQpOwogICAgICAgICAgaWYgKHByZXZCbG9jay50eXBlICE9PSAiZGl2aWRlciIpIHsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQsICJlbmQiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBEZWxldGUga2V5CiAgICovCiAgYXN5bmMgaGFuZGxlRGVsZXRlKGUxMSwgYmxvY2spIHsKICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAodGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICBjb25zdCBuZXdCbG9jayA9IGJsb2NrT3BzLmNyZWF0ZUJsb2NrKCJwYXJhZ3JhcGgiLCAiIik7CiAgICAgICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gW25ld0Jsb2NrXTsKICAgICAgICB0aGlzLmNvbXBvbmVudC5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCk7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhuZXdCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5jb21wb25lbnQuc2F2ZVRvSGlzdG9yeShmYWxzZSk7CiAgICAgIGNvbnN0IHByZXZCbG9jayA9IGJsb2NrT3BzLmdldFByZXZpb3VzQmxvY2soYmxvY2suaWQpOwogICAgICBjb25zdCBuZXh0QmxvY2sgPSBibG9ja09wcy5nZXROZXh0QmxvY2soYmxvY2suaWQpOwogICAgICBibG9ja09wcy5yZW1vdmVCbG9jayhibG9jay5pZCk7CiAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICBpZiAobmV4dEJsb2NrICYmICFub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhuZXh0QmxvY2sudHlwZSkpIHsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgIH0gZWxzZSBpZiAocHJldkJsb2NrICYmICFub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhwcmV2QmxvY2sudHlwZSkpIHsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCwgImVuZCIpOwogICAgICB9IGVsc2UgaWYgKG5leHRCbG9jaykgewogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV4dEJsb2NrLmlkKTsKICAgICAgfSBlbHNlIGlmIChwcmV2QmxvY2spIHsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCk7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgYmxvY2tXcmFwcGVyID0gdGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgIGNvbnN0IGJsb2NrQ29tcG9uZW50ID0gYmxvY2tXcmFwcGVyPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgIGlmICghYmxvY2tDb21wb25lbnQgfHwgIWJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHRhcmdldCA9IGJsb2NrLnR5cGUgPT09ICJjb2RlIiA/IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIikgOiBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgaWYgKCF0YXJnZXQpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IGJsb2NrQ29tcG9uZW50LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgIGlmIChwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50Q29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgc2hhZG93Um9vdHMucHVzaChibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KTsKICAgIGNvbnN0IGN1cnNvclBvcyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0Q3Vyc29yUG9zaXRpb25JbkVsZW1lbnQodGFyZ2V0LCAuLi5zaGFkb3dSb290cyk7CiAgICBjb25zdCB0ZXh0TGVuZ3RoID0gdGFyZ2V0LnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgIGlmIChjdXJzb3JQb3MgPT09IHRleHRMZW5ndGgpIHsKICAgICAgY29uc3QgbmV4dEJsb2NrID0gYmxvY2tPcHMuZ2V0TmV4dEJsb2NrKGJsb2NrLmlkKTsKICAgICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlczIgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICAgIGlmIChuZXh0QmxvY2sgJiYgbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMobmV4dEJsb2NrLnR5cGUpKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhuZXh0QmxvY2suaWQpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogIH0KICAvKioKICAgKiBIYW5kbGVzIEFycm93VXAga2V5IC0gbmF2aWdhdGUgdG8gcHJldmlvdXMgYmxvY2sgaWYgYXQgYmVnaW5uaW5nIG9yIGZpcnN0IGxpbmUKICAgKi8KICBhc3luYyBoYW5kbGVBcnJvd1VwKGUxMSwgYmxvY2spIHsKICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICBpZiAobm9uRWRpdGFibGVUeXBlcy5pbmNsdWRlcyhibG9jay50eXBlKSkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgY29uc3QgYmxvY2tPcHMgPSB0aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7CiAgICAgIGNvbnN0IHByZXZCbG9jayA9IGJsb2NrT3BzLmdldFByZXZpb3VzQmxvY2soYmxvY2suaWQpOwogICAgICBpZiAocHJldkJsb2NrKSB7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQsIG5vbkVkaXRhYmxlVHlwZXMuaW5jbHVkZXMocHJldkJsb2NrLnR5cGUpID8gdm9pZCAwIDogImVuZCIpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IGJsb2NrV3JhcHBlcj8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICBpZiAoIWJsb2NrQ29tcG9uZW50IHx8ICFibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KQogICAgICByZXR1cm47CiAgICBjb25zdCB0YXJnZXQgPSBibG9jay50eXBlID09PSAiY29kZSIgPyBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpIDogYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgIGlmICghdGFyZ2V0KQogICAgICByZXR1cm47CiAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSBibG9ja0NvbXBvbmVudC5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudENvbXBvbmVudC5zaGFkb3dSb290KTsKICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbyB8fCAhc2VsZWN0aW9uSW5mby5jb2xsYXBzZWQpCiAgICAgIHJldHVybjsKICAgIGlmICh0aGlzLmlzT25GaXJzdExpbmUoc2VsZWN0aW9uSW5mbywgdGFyZ2V0LCAuLi5zaGFkb3dSb290cykpIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICBjb25zdCBwcmV2QmxvY2sgPSBibG9ja09wcy5nZXRQcmV2aW91c0Jsb2NrKGJsb2NrLmlkKTsKICAgICAgaWYgKHByZXZCbG9jaykgewogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2socHJldkJsb2NrLmlkLCBub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhwcmV2QmxvY2sudHlwZSkgPyB2b2lkIDAgOiAiZW5kIik7CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBBcnJvd0Rvd24ga2V5IC0gbmF2aWdhdGUgdG8gbmV4dCBibG9jayBpZiBhdCBlbmQgb3IgbGFzdCBsaW5lCiAgICovCiAgYXN5bmMgaGFuZGxlQXJyb3dEb3duKGUxMSwgYmxvY2spIHsKICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICBpZiAobm9uRWRpdGFibGVUeXBlcy5pbmNsdWRlcyhibG9jay50eXBlKSkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgY29uc3QgYmxvY2tPcHMgPSB0aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7CiAgICAgIGNvbnN0IG5leHRCbG9jayA9IGJsb2NrT3BzLmdldE5leHRCbG9jayhibG9jay5pZCk7CiAgICAgIGlmIChuZXh0QmxvY2spIHsKICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzMiA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCwgbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMobmV4dEJsb2NrLnR5cGUpID8gdm9pZCAwIDogInN0YXJ0Iik7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgYmxvY2tXcmFwcGVyID0gdGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgIGNvbnN0IGJsb2NrQ29tcG9uZW50ID0gYmxvY2tXcmFwcGVyPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgIGlmICghYmxvY2tDb21wb25lbnQgfHwgIWJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHRhcmdldCA9IGJsb2NrLnR5cGUgPT09ICJjb2RlIiA/IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIikgOiBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgaWYgKCF0YXJnZXQpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IGJsb2NrQ29tcG9uZW50LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgIGlmIChwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50Q29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgc2hhZG93Um9vdHMucHVzaChibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KTsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgaWYgKCFzZWxlY3Rpb25JbmZvIHx8ICFzZWxlY3Rpb25JbmZvLmNvbGxhcHNlZCkKICAgICAgcmV0dXJuOwogICAgaWYgKHRoaXMuaXNPbkxhc3RMaW5lKHNlbGVjdGlvbkluZm8sIHRhcmdldCwgLi4uc2hhZG93Um9vdHMpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgICAgY29uc3QgbmV4dEJsb2NrID0gYmxvY2tPcHMuZ2V0TmV4dEJsb2NrKGJsb2NrLmlkKTsKICAgICAgaWYgKG5leHRCbG9jaykgewogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV4dEJsb2NrLmlkLCBub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhuZXh0QmxvY2sudHlwZSkgPyB2b2lkIDAgOiAic3RhcnQiKTsKICAgICAgfQogICAgfQogIH0KICAvKioKICAgKiBIZWxwZXIgdG8gZ2V0IHRoZSBsYXN0IHRleHQgbm9kZSBpbiBhbiBlbGVtZW50CiAgICovCiAgZ2V0TGFzdFRleHROb2RlKGVsZW1lbnQ0KSB7CiAgICBpZiAoZWxlbWVudDQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH0KICAgIGZvciAobGV0IGkxMSA9IGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgIGNvbnN0IGxhc3RUZXh0ID0gdGhpcy5nZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQuY2hpbGROb2Rlc1tpMTFdKTsKICAgICAgaWYgKGxhc3RUZXh0KQogICAgICAgIHJldHVybiBsYXN0VGV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICAvKioKICAgKiBIYW5kbGVzIEFycm93TGVmdCBrZXkgLSBuYXZpZ2F0ZSB0byBwcmV2aW91cyBibG9jayBpZiBhdCBiZWdpbm5pbmcKICAgKi8KICBhc3luYyBoYW5kbGVBcnJvd0xlZnQoZTExLCBibG9jaykgewogICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgICAgY29uc3QgcHJldkJsb2NrID0gYmxvY2tPcHMuZ2V0UHJldmlvdXNCbG9jayhibG9jay5pZCk7CiAgICAgIGlmIChwcmV2QmxvY2spIHsKICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzMiA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCwgbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMocHJldkJsb2NrLnR5cGUpID8gdm9pZCAwIDogImVuZCIpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IGJsb2NrV3JhcHBlcj8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICBpZiAoIWJsb2NrQ29tcG9uZW50IHx8ICFibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KQogICAgICByZXR1cm47CiAgICBjb25zdCB0YXJnZXQgPSBibG9jay50eXBlID09PSAiY29kZSIgPyBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpIDogYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgIGlmICghdGFyZ2V0KQogICAgICByZXR1cm47CiAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSBibG9ja0NvbXBvbmVudC5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudENvbXBvbmVudC5zaGFkb3dSb290KTsKICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbyB8fCAhc2VsZWN0aW9uSW5mby5jb2xsYXBzZWQpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IGN1cnNvclBvcyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0Q3Vyc29yUG9zaXRpb25JbkVsZW1lbnQodGFyZ2V0LCAuLi5zaGFkb3dSb290cyk7CiAgICBpZiAoY3Vyc29yUG9zID09PSAwKSB7CiAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICBjb25zdCBwcmV2QmxvY2sgPSBibG9ja09wcy5nZXRQcmV2aW91c0Jsb2NrKGJsb2NrLmlkKTsKICAgICAgaWYgKHByZXZCbG9jaykgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGNvbnN0IHBvc2l0aW9uMyA9IG5vbkVkaXRhYmxlVHlwZXMyLmluY2x1ZGVzKHByZXZCbG9jay50eXBlKSA/IHZvaWQgMCA6ICJlbmQiOwogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2socHJldkJsb2NrLmlkLCBwb3NpdGlvbjMpOwogICAgICB9CiAgICB9CiAgfQogIC8qKgogICAqIEhhbmRsZXMgQXJyb3dSaWdodCBrZXkgLSBuYXZpZ2F0ZSB0byBuZXh0IGJsb2NrIGlmIGF0IGVuZAogICAqLwogIGFzeW5jIGhhbmRsZUFycm93UmlnaHQoZTExLCBibG9jaykgewogICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgICAgY29uc3QgbmV4dEJsb2NrID0gYmxvY2tPcHMuZ2V0TmV4dEJsb2NrKGJsb2NrLmlkKTsKICAgICAgaWYgKG5leHRCbG9jaykgewogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV4dEJsb2NrLmlkLCBub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhuZXh0QmxvY2sudHlwZSkgPyB2b2lkIDAgOiAic3RhcnQiKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLmNvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iXWApOwogICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgaWYgKCFibG9ja0NvbXBvbmVudCB8fCAhYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgdGFyZ2V0ID0gYmxvY2sudHlwZSA9PT0gImNvZGUiID8gYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKSA6IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICBpZiAoIXRhcmdldCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gYmxvY2tDb21wb25lbnQuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICBpZiAoIXNlbGVjdGlvbkluZm8gfHwgIXNlbGVjdGlvbkluZm8uY29sbGFwc2VkKQogICAgICByZXR1cm47CiAgICBjb25zdCBjdXJzb3JQb3MgPSBXeXNpd3lnU2VsZWN0aW9uLmdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KHRhcmdldCwgLi4uc2hhZG93Um9vdHMpOwogICAgY29uc3QgdGV4dExlbmd0aCA9IHRhcmdldC50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDA7CiAgICBpZiAoY3Vyc29yUG9zID09PSB0ZXh0TGVuZ3RoKSB7CiAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICBjb25zdCBuZXh0QmxvY2sgPSBibG9ja09wcy5nZXROZXh0QmxvY2soYmxvY2suaWQpOwogICAgICBpZiAobmV4dEJsb2NrKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlczIgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhuZXh0QmxvY2suaWQsIG5vbkVkaXRhYmxlVHlwZXMyLmluY2x1ZGVzKG5leHRCbG9jay50eXBlKSA/IHZvaWQgMCA6ICJzdGFydCIpOwogICAgICB9CiAgICB9CiAgfQogIC8qKgogICAqIEhhbmRsZXMgc2xhc2ggbWVudSBrZXlib2FyZCBuYXZpZ2F0aW9uCiAgICogTm90ZTogVGhpcyBpcyBub3cgaGFuZGxlZCBieSB0aGUgY29tcG9uZW50IGRpcmVjdGx5CiAgICovCiAgLyoqCiAgICogQ2hlY2sgaWYgY3Vyc29yIGlzIG9uIHRoZSBmaXJzdCBsaW5lIG9mIGEgYmxvY2sKICAgKi8KICBpc09uRmlyc3RMaW5lKHNlbGVjdGlvbkluZm8sIHRhcmdldCwgLi4uc2hhZG93Um9vdHMpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgbGV0IGNvbnRhaW5lciA9IHJhbmdlMi5jb21tb25BbmNlc3RvckNvbnRhaW5lcjsKICAgICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50RWxlbWVudDsKICAgICAgfQogICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCBpc05lYXJUb3AgPSByZWN0LnRvcCAtIGNvbnRhaW5lclJlY3QudG9wIDwgNTsKICAgICAgaWYgKGNvbnRhaW5lci50ZXh0Q29udGVudCAmJiAhY29udGFpbmVyLnRleHRDb250ZW50LmluY2x1ZGVzKCJcbiIpKSB7CiAgICAgICAgY29uc3QgY3Vyc29yUG9zID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudChjb250YWluZXIsIC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgICByZXR1cm4gY3Vyc29yUG9zID09PSAwOwogICAgICB9CiAgICAgIHJldHVybiBpc05lYXJUb3A7CiAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgY29uc29sZS53YXJuKCJFcnJvciBjaGVja2luZyBmaXJzdCBsaW5lOiIsIGUxMSk7CiAgICAgIGNvbnN0IGN1cnNvclBvcyA9IHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQ7CiAgICAgIHJldHVybiBjdXJzb3JQb3MgPT09IDA7CiAgICB9CiAgfQogIC8qKgogICAqIENoZWNrIGlmIGN1cnNvciBpcyBvbiB0aGUgbGFzdCBsaW5lIG9mIGEgYmxvY2sKICAgKi8KICBpc09uTGFzdExpbmUoc2VsZWN0aW9uSW5mbywgdGFyZ2V0LCAuLi5zaGFkb3dSb290cykgewogICAgdHJ5IHsKICAgICAgY29uc3QgcmFuZ2UyID0gV3lzaXd5Z1NlbGVjdGlvbi5jcmVhdGVSYW5nZUZyb21JbmZvKHNlbGVjdGlvbkluZm8pOwogICAgICBjb25zdCByZWN0ID0gcmFuZ2UyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBsZXQgY29udGFpbmVyID0gcmFuZ2UyLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyOwogICAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnRFbGVtZW50OwogICAgICB9CiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGlzTmVhckJvdHRvbSA9IGNvbnRhaW5lclJlY3QuYm90dG9tIC0gcmVjdC5ib3R0b20gPCA1OwogICAgICBpZiAoY29udGFpbmVyLnRleHRDb250ZW50ICYmICFjb250YWluZXIudGV4dENvbnRlbnQuaW5jbHVkZXMoIlxuIikpIHsKICAgICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gdGFyZ2V0LnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgICBjb25zdCBjdXJzb3JQb3MgPSBXeXNpd3lnU2VsZWN0aW9uLmdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KHRhcmdldCwgLi4uc2hhZG93Um9vdHMpOwogICAgICAgIHJldHVybiBjdXJzb3JQb3MgPT09IHRleHRMZW5ndGg7CiAgICAgIH0KICAgICAgcmV0dXJuIGlzTmVhckJvdHRvbTsKICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICBjb25zb2xlLndhcm4oIkVycm9yIGNoZWNraW5nIGxhc3QgbGluZToiLCBlMTEpOwogICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gdGFyZ2V0LnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgY29uc3QgY3Vyc29yUG9zID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudCh0YXJnZXQsIC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgcmV0dXJuIGN1cnNvclBvcyA9PT0gdGV4dExlbmd0aDsKICAgIH0KICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuZHJhZ2Ryb3BoYW5kbGVyLmpzCnZhciBXeXNpd3lnRHJhZ0Ryb3BIYW5kbGVyID0gY2xhc3MgewogIGNvbXBvbmVudDsKICBkcmFnZ2VkQmxvY2tJZCA9IG51bGw7CiAgZHJhZ092ZXJCbG9ja0lkID0gbnVsbDsKICBkcmFnT3ZlclBvc2l0aW9uID0gbnVsbDsKICBkcm9wSW5kaWNhdG9yID0gbnVsbDsKICBpbml0aWFsTW91c2VZID0gMDsKICBpbml0aWFsQmxvY2tZID0gMDsKICBkcmFnZ2VkQmxvY2tFbGVtZW50ID0gbnVsbDsKICBkcmFnZ2VkQmxvY2tIZWlnaHQgPSAwOwogIGRyYWdnZWRCbG9ja0NvbnRlbnRIZWlnaHQgPSAwOwogIGRyYWdnZWRCbG9ja01hcmdpblRvcCA9IDA7CiAgbGFzdFVwZGF0ZVRpbWUgPSAwOwogIHVwZGF0ZVRocm90dGxlID0gODA7CiAgLy8gbWlsbGlzZWNvbmRzCiAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7CiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICB9CiAgLyoqCiAgICogR2V0cyB0aGUgY3VycmVudCBkcmFnIHN0YXRlCiAgICovCiAgZ2V0IGRyYWdTdGF0ZSgpIHsKICAgIHJldHVybiB7CiAgICAgIGRyYWdnZWRCbG9ja0lkOiB0aGlzLmRyYWdnZWRCbG9ja0lkLAogICAgICBkcmFnT3ZlckJsb2NrSWQ6IHRoaXMuZHJhZ092ZXJCbG9ja0lkLAogICAgICBkcmFnT3ZlclBvc2l0aW9uOiB0aGlzLmRyYWdPdmVyUG9zaXRpb24KICAgIH07CiAgfQogIC8qKgogICAqIEhhbmRsZXMgZHJhZyBzdGFydAogICAqLwogIGhhbmRsZURyYWdTdGFydChlMTEsIGJsb2NrKSB7CiAgICBpZiAoIWUxMS5kYXRhVHJhbnNmZXIpCiAgICAgIHJldHVybjsKICAgIHRoaXMuZHJhZ2dlZEJsb2NrSWQgPSBibG9jay5pZDsKICAgIGUxMS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9ICJtb3ZlIjsKICAgIGUxMS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgidGV4dC9wbGFpbiIsIGJsb2NrLmlkKTsKICAgIGNvbnN0IGVtcHR5SW1nID0gbmV3IEltYWdlKCk7CiAgICBlbXB0eUltZy5zcmMgPSAiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQVVFQkFBQUFDd0FBQUFBQVFBQkFBQUNBa1FCQURzPSI7CiAgICBlMTEuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShlbXB0eUltZywgMCwgMCk7CiAgICB0aGlzLmluaXRpYWxNb3VzZVkgPSBlMTEuY2xpZW50WTsKICAgIHRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudCA9IHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgIGlmICh0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQpIHsKICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgdGhpcy5pbml0aWFsQmxvY2tZID0gcmVjdC50b3A7CiAgICAgIGNvbnN0IGlubmVyQmxvY2sgPSB0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmIChpbm5lckJsb2NrKSB7CiAgICAgICAgY29uc3QgaW5uZXJSZWN0ID0gaW5uZXJCbG9jay5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaW5uZXJCbG9jayk7CiAgICAgICAgdGhpcy5kcmFnZ2VkQmxvY2tNYXJnaW5Ub3AgPSBwYXJzZUludChjb21wdXRlZFN0eWxlLm1hcmdpblRvcCkgfHwgMDsKICAgICAgICB0aGlzLmRyYWdnZWRCbG9ja0NvbnRlbnRIZWlnaHQgPSBpbm5lclJlY3QuaGVpZ2h0OwogICAgICB9CiAgICAgIHRoaXMuZHJhZ2dlZEJsb2NrSGVpZ2h0ID0gcmVjdC5oZWlnaHQ7CiAgICAgIGNvbnNvbGUubG9nKCJEcmFnIG1lYXN1cmVtZW50czoiLCB7CiAgICAgICAgd3JhcHBlckhlaWdodDogcmVjdC5oZWlnaHQsCiAgICAgICAgbWFyZ2luVG9wOiB0aGlzLmRyYWdnZWRCbG9ja01hcmdpblRvcCwKICAgICAgICBkcm9wSW5kaWNhdG9ySGVpZ2h0OiB0aGlzLmRyYWdnZWRCbG9ja0hlaWdodCwKICAgICAgICBjb250ZW50SGVpZ2h0OiB0aGlzLmRyYWdnZWRCbG9ja0NvbnRlbnRIZWlnaHQsCiAgICAgICAgYmxvY2tJZDogYmxvY2suaWQKICAgICAgfSk7CiAgICAgIHRoaXMuY3JlYXRlRHJvcEluZGljYXRvcigpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIHRoaXMuaGFuZGxlR2xvYmFsRHJhZ092ZXIpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW5kIiwgdGhpcy5oYW5kbGVHbG9iYWxEcmFnRW5kKTsKICAgIH0KICAgIHRoaXMuY29tcG9uZW50LmRyYWdnZWRCbG9ja0lkID0gdGhpcy5kcmFnZ2VkQmxvY2tJZDsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBpZiAodGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50KSB7CiAgICAgICAgdGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50LmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIik7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYpIHsKICAgICAgICB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIik7CiAgICAgIH0KICAgIH0sIDEwKTsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBkcmFnIGVuZAogICAqLwogIGhhbmRsZURyYWdFbmQoKSB7CiAgICBjb25zdCBhbGxCbG9ja3MgPSB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3JBbGwoIi5ibG9jay13cmFwcGVyIik7CiAgICBhbGxCbG9ja3MuZm9yRWFjaCgoYmxvY2spID0+IHsKICAgICAgYmxvY2suY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciLCAibW92ZS11cCIsICJtb3ZlLWRvd24iKTsKICAgICAgYmxvY2suc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tZHJhZy1vZmZzZXQiKTsKICAgICAgYmxvY2suc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zZm9ybSIpOwogICAgfSk7CiAgICBpZiAodGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZikgewogICAgICB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIik7CiAgICB9CiAgICB0aGlzLmRyYWdnZWRCbG9ja0lkID0gbnVsbDsKICAgIHRoaXMuZHJhZ092ZXJCbG9ja0lkID0gbnVsbDsKICAgIHRoaXMuZHJhZ092ZXJQb3NpdGlvbiA9IG51bGw7CiAgICB0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQgPSBudWxsOwogICAgdGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHQgPSAwOwogICAgdGhpcy5kcmFnZ2VkQmxvY2tDb250ZW50SGVpZ2h0ID0gMDsKICAgIHRoaXMuZHJhZ2dlZEJsb2NrTWFyZ2luVG9wID0gMDsKICAgIHRoaXMuaW5pdGlhbEJsb2NrWSA9IDA7CiAgICB0aGlzLmNvbXBvbmVudC5kcmFnZ2VkQmxvY2tJZCA9IG51bGw7CiAgICB0aGlzLmNvbXBvbmVudC5kcmFnT3ZlckJsb2NrSWQgPSBudWxsOwogICAgdGhpcy5jb21wb25lbnQuZHJhZ092ZXJQb3NpdGlvbiA9IG51bGw7CiAgfQogIC8qKgogICAqIEhhbmRsZXMgZHJhZyBvdmVyCiAgICovCiAgaGFuZGxlRHJhZ092ZXIoZTExLCBibG9jaykgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICBpZiAoIWUxMS5kYXRhVHJhbnNmZXIgfHwgIXRoaXMuZHJhZ2dlZEJsb2NrSWQgfHwgdGhpcy5kcmFnZ2VkQmxvY2tJZCA9PT0gYmxvY2suaWQpCiAgICAgIHJldHVybjsKICAgIGUxMS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICJtb3ZlIjsKICAgIGNvbnN0IHJlY3QgPSBlMTEuY3VycmVudFRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIGNvbnN0IG1pZHBvaW50ID0gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDI7CiAgICB0aGlzLmRyYWdPdmVyQmxvY2tJZCA9IGJsb2NrLmlkOwogICAgdGhpcy5kcmFnT3ZlclBvc2l0aW9uID0gZTExLmNsaWVudFkgPCBtaWRwb2ludCA/ICJiZWZvcmUiIDogImFmdGVyIjsKICAgIHRoaXMuY29tcG9uZW50LmRyYWdPdmVyQmxvY2tJZCA9IHRoaXMuZHJhZ092ZXJCbG9ja0lkOwogICAgdGhpcy5jb21wb25lbnQuZHJhZ092ZXJQb3NpdGlvbiA9IHRoaXMuZHJhZ092ZXJQb3NpdGlvbjsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBkcmFnIGxlYXZlCiAgICovCiAgaGFuZGxlRHJhZ0xlYXZlKGJsb2NrKSB7CiAgICBpZiAodGhpcy5kcmFnT3ZlckJsb2NrSWQgPT09IGJsb2NrLmlkKSB7CiAgICAgIHRoaXMuZHJhZ092ZXJCbG9ja0lkID0gbnVsbDsKICAgICAgdGhpcy5kcmFnT3ZlclBvc2l0aW9uID0gbnVsbDsKICAgICAgdGhpcy5jb21wb25lbnQuZHJhZ092ZXJCbG9ja0lkID0gbnVsbDsKICAgICAgdGhpcy5jb21wb25lbnQuZHJhZ092ZXJQb3NpdGlvbiA9IG51bGw7CiAgICB9CiAgfQogIC8qKgogICAqIEhhbmRsZXMgZHJvcAogICAqLwogIGhhbmRsZURyb3AoZTExLCB0YXJnZXRCbG9jaykgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICBpZiAoIXRoaXMuZHJhZ2dlZEJsb2NrSWQgfHwgdGhpcy5kcmFnZ2VkQmxvY2tJZCA9PT0gdGFyZ2V0QmxvY2suaWQpCiAgICAgIHJldHVybjsKICAgIHRoaXMuY29tcG9uZW50LmhhbmRsZURyb3AoZTExLCB0YXJnZXRCbG9jayk7CiAgfQogIC8qKgogICAqIENoZWNrcyBpZiBhIGJsb2NrIGlzIGJlaW5nIGRyYWdnZWQKICAgKi8KICBpc0RyYWdnaW5nKGJsb2NrSWQpIHsKICAgIHJldHVybiB0aGlzLmRyYWdnZWRCbG9ja0lkID09PSBibG9ja0lkOwogIH0KICAvKioKICAgKiBDaGVja3MgaWYgYSBibG9jayBoYXMgZHJhZyBvdmVyIHN0YXRlCiAgICovCiAgaXNEcmFnT3ZlcihibG9ja0lkKSB7CiAgICByZXR1cm4gdGhpcy5kcmFnT3ZlckJsb2NrSWQgPT09IGJsb2NrSWQ7CiAgfQogIC8qKgogICAqIEdldHMgZHJhZyBvdmVyIENTUyBjbGFzc2VzIGZvciBhIGJsb2NrCiAgICovCiAgZ2V0RHJhZ092ZXJDbGFzc2VzKGJsb2NrSWQpIHsKICAgIGlmICghdGhpcy5pc0RyYWdPdmVyKGJsb2NrSWQpKQogICAgICByZXR1cm4gIiI7CiAgICByZXR1cm4gdGhpcy5kcmFnT3ZlclBvc2l0aW9uID09PSAiYmVmb3JlIiA/ICJkcmFnLW92ZXItYmVmb3JlIiA6ICJkcmFnLW92ZXItYWZ0ZXIiOwogIH0KICAvKioKICAgKiBDcmVhdGVzIHRoZSBkcm9wIGluZGljYXRvciBlbGVtZW50CiAgICovCiAgY3JlYXRlRHJvcEluZGljYXRvcigpIHsKICAgIHRoaXMuZHJvcEluZGljYXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy5kcm9wSW5kaWNhdG9yLmNsYXNzTmFtZSA9ICJkcm9wLWluZGljYXRvciI7CiAgICB0aGlzLmRyb3BJbmRpY2F0b3Iuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYuYXBwZW5kQ2hpbGQodGhpcy5kcm9wSW5kaWNhdG9yKTsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBnbG9iYWwgZHJhZ292ZXIgdG8gdXBkYXRlIGRyYWdnZWQgYmxvY2sgcG9zaXRpb24gYW5kIG1vdmUgb3RoZXIgYmxvY2tzCiAgICovCiAgaGFuZGxlR2xvYmFsRHJhZ092ZXIgPSAoZTExKSA9PiB7CiAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgIGlmICghdGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50KQogICAgICByZXR1cm47CiAgICBjb25zdCBkZWx0YVkgPSBlMTEuY2xpZW50WSAtIHRoaXMuaW5pdGlhbE1vdXNlWTsKICAgIHRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgke2RlbHRhWX1weClgOwogICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICBpZiAobm93MiAtIHRoaXMubGFzdFVwZGF0ZVRpbWUgPCB0aGlzLnVwZGF0ZVRocm90dGxlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMubGFzdFVwZGF0ZVRpbWUgPSBub3cyOwogICAgdGhpcy51cGRhdGVCbG9ja1Bvc2l0aW9ucyhlMTEuY2xpZW50WSk7CiAgfTsKICAvKioKICAgKiBVcGRhdGVzIGJsb2NrIHBvc2l0aW9ucyBiYXNlZCBvbiBjdXJzb3IgcG9zaXRpb24KICAgKi8KICB1cGRhdGVCbG9ja1Bvc2l0aW9ucyhtb3VzZVkpIHsKICAgIGNvbnN0IGJsb2NrcyA9IEFycmF5LmZyb20odGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpKTsKICAgIGNvbnN0IGRyYWdnZWRJbmRleCA9IGJsb2Nrcy5maW5kSW5kZXgoKGI1KSA9PiBiNS5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKSA9PT0gdGhpcy5kcmFnZ2VkQmxvY2tJZCk7CiAgICBpZiAoZHJhZ2dlZEluZGV4ID09PSAtMSkKICAgICAgcmV0dXJuOwogICAgYmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7CiAgICAgIGlmIChibG9jay5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKSAhPT0gdGhpcy5kcmFnZ2VkQmxvY2tJZCkgewogICAgICAgIGJsb2NrLmNsYXNzTGlzdC5yZW1vdmUoIm1vdmUtdXAiLCAibW92ZS1kb3duIik7CiAgICAgICAgYmxvY2suc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tZHJhZy1vZmZzZXQiKTsKICAgICAgfQogICAgfSk7CiAgICBsZXQgbmV3SW5kZXggPSBibG9ja3MubGVuZ3RoOwogICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgYmxvY2tzLmxlbmd0aDsgaTExKyspIHsKICAgICAgaWYgKGkxMSA9PT0gZHJhZ2dlZEluZGV4KQogICAgICAgIGNvbnRpbnVlOwogICAgICBjb25zdCBibG9jayA9IGJsb2Nrc1tpMTFdOwogICAgICBjb25zdCByZWN0ID0gYmxvY2suZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGJsb2NrVG9wID0gcmVjdC50b3A7CiAgICAgIGlmIChtb3VzZVkgPCBibG9ja1RvcCArIHJlY3QuaGVpZ2h0ICogMC41KSB7CiAgICAgICAgbmV3SW5kZXggPSBpMTE7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGJsb2Nrcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGlmIChpMTEgPT09IGRyYWdnZWRJbmRleCkKICAgICAgICBjb250aW51ZTsKICAgICAgY29uc3QgYmxvY2sgPSBibG9ja3NbaTExXTsKICAgICAgaWYgKGRyYWdnZWRJbmRleCA8IG5ld0luZGV4KSB7CiAgICAgICAgaWYgKGkxMSA+IGRyYWdnZWRJbmRleCAmJiBpMTEgPCBuZXdJbmRleCkgewogICAgICAgICAgYmxvY2suY2xhc3NMaXN0LmFkZCgibW92ZS11cCIpOwogICAgICAgICAgYmxvY2suc3R5bGUuc2V0UHJvcGVydHkoIi0tZHJhZy1vZmZzZXQiLCBgJHt0aGlzLmRyYWdnZWRCbG9ja0hlaWdodH1weGApOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChkcmFnZ2VkSW5kZXggPiBuZXdJbmRleCkgewogICAgICAgIGlmIChpMTEgPj0gbmV3SW5kZXggJiYgaTExIDwgZHJhZ2dlZEluZGV4KSB7CiAgICAgICAgICBibG9jay5jbGFzc0xpc3QuYWRkKCJtb3ZlLWRvd24iKTsKICAgICAgICAgIGJsb2NrLnN0eWxlLnNldFByb3BlcnR5KCItLWRyYWctb2Zmc2V0IiwgYCR7dGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHR9cHhgKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHRoaXMudXBkYXRlRHJvcEluZGljYXRvcihibG9ja3MsIG5ld0luZGV4LCBkcmFnZ2VkSW5kZXgpOwogIH0KICAvKioKICAgKiBVcGRhdGVzIHRoZSBkcm9wIGluZGljYXRvciBwb3NpdGlvbgogICAqLwogIHVwZGF0ZURyb3BJbmRpY2F0b3IoYmxvY2tzLCB0YXJnZXRJbmRleCwgZHJhZ2dlZEluZGV4KSB7CiAgICBpZiAoIXRoaXMuZHJvcEluZGljYXRvciB8fCAhdGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50KQogICAgICByZXR1cm47CiAgICB0aGlzLmRyb3BJbmRpY2F0b3Iuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIGxldCB0b3BQb3NpdGlvbiA9IDA7CiAgICBjb25zdCB2aXN1YWxCbG9ja3MgPSBbXTsKICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGJsb2Nrcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGlmIChpMTEgPT09IGRyYWdnZWRJbmRleCkKICAgICAgICBjb250aW51ZTsKICAgICAgY29uc3QgYmxvY2sgPSBibG9ja3NbaTExXTsKICAgICAgY29uc3QgcmVjdCA9IGJsb2NrLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBsZXQgdG9wID0gcmVjdC50b3AgLSBjb250YWluZXJSZWN0LnRvcDsKICAgICAgbGV0IGJvdHRvbSA9IHJlY3QuYm90dG9tIC0gY29udGFpbmVyUmVjdC50b3A7CiAgICAgIGNvbnN0IHRyYW5zZm9ybTIgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShibG9jaykudHJhbnNmb3JtOwogICAgICBpZiAodHJhbnNmb3JtMiAmJiB0cmFuc2Zvcm0yICE9PSAibm9uZSIpIHsKICAgICAgICBjb25zdCBtYXRyaXggPSBuZXcgRE9NTWF0cml4KHRyYW5zZm9ybTIpOwogICAgICAgIGNvbnN0IHlPZmZzZXQgPSBtYXRyaXgubTQyOwogICAgICAgIHRvcCArPSB5T2Zmc2V0OwogICAgICAgIGJvdHRvbSArPSB5T2Zmc2V0OwogICAgICB9CiAgICAgIHZpc3VhbEJsb2Nrcy5wdXNoKHsgaW5kZXg6IGkxMSwgdG9wLCBib3R0b20gfSk7CiAgICB9CiAgICB2aXN1YWxCbG9ja3Muc29ydCgoYTUsIGI1KSA9PiBhNS50b3AgLSBiNS50b3ApOwogICAgbGV0IGFkanVzdGVkVGFyZ2V0SW5kZXggPSB0YXJnZXRJbmRleDsKICAgIGlmICh0YXJnZXRJbmRleCA+IGRyYWdnZWRJbmRleCkgewogICAgICBhZGp1c3RlZFRhcmdldEluZGV4LS07CiAgICB9CiAgICBsZXQgYmxvY2tNYXJnaW4gPSAxNjsKICAgIGlmICh0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQpIHsKICAgICAgY29uc3QgZHJhZ2dlZEJsb2NrID0gdGhpcy5jb21wb25lbnQuYmxvY2tzLmZpbmQoKGI1KSA9PiBiNS5pZCA9PT0gdGhpcy5kcmFnZ2VkQmxvY2tJZCk7CiAgICAgIGlmIChkcmFnZ2VkQmxvY2spIHsKICAgICAgICBjb25zdCBibG9ja1R5cGUgPSBkcmFnZ2VkQmxvY2sudHlwZTsKICAgICAgICBpZiAoYmxvY2tUeXBlID09PSAiaGVhZGluZy0xIiB8fCBibG9ja1R5cGUgPT09ICJoZWFkaW5nLTIiIHx8IGJsb2NrVHlwZSA9PT0gImhlYWRpbmctMyIpIHsKICAgICAgICAgIGJsb2NrTWFyZ2luID0gMjQ7CiAgICAgICAgfSBlbHNlIGlmIChibG9ja1R5cGUgPT09ICJjb2RlIiB8fCBibG9ja1R5cGUgPT09ICJxdW90ZSIpIHsKICAgICAgICAgIGJsb2NrTWFyZ2luID0gMjA7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoYWRqdXN0ZWRUYXJnZXRJbmRleCA9PT0gMCkgewogICAgICB0b3BQb3NpdGlvbiA9IDA7CiAgICB9IGVsc2UgaWYgKGFkanVzdGVkVGFyZ2V0SW5kZXggPj0gdmlzdWFsQmxvY2tzLmxlbmd0aCkgewogICAgICBjb25zdCBsYXN0QmxvY2sgPSB2aXN1YWxCbG9ja3NbdmlzdWFsQmxvY2tzLmxlbmd0aCAtIDFdOwogICAgICBpZiAobGFzdEJsb2NrKSB7CiAgICAgICAgdG9wUG9zaXRpb24gPSBsYXN0QmxvY2suYm90dG9tOwogICAgICAgIHRvcFBvc2l0aW9uICs9IGJsb2NrTWFyZ2luOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb25zdCBibG9ja0JlZm9yZSA9IHZpc3VhbEJsb2Nrc1thZGp1c3RlZFRhcmdldEluZGV4IC0gMV07CiAgICAgIGlmIChibG9ja0JlZm9yZSkgewogICAgICAgIHRvcFBvc2l0aW9uID0gYmxvY2tCZWZvcmUuYm90dG9tOwogICAgICAgIHRvcFBvc2l0aW9uICs9IGJsb2NrTWFyZ2luOwogICAgICB9CiAgICB9CiAgICB0aGlzLmRyb3BJbmRpY2F0b3Iuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHR9cHhgOwogICAgdGhpcy5kcm9wSW5kaWNhdG9yLnN0eWxlLnRvcCA9IGAke01hdGgubWF4KDAsIHRvcFBvc2l0aW9uKX1weGA7CiAgICBjb25zb2xlLmxvZygiRHJvcCBpbmRpY2F0b3IgdXBkYXRlOiIsIHsKICAgICAgdGFyZ2V0SW5kZXgsCiAgICAgIGFkanVzdGVkVGFyZ2V0SW5kZXgsCiAgICAgIGRyYWdnZWRJbmRleCwKICAgICAgdG9wUG9zaXRpb24sCiAgICAgIGhlaWdodDogdGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHQsCiAgICAgIGJsb2NrTWFyZ2luLAogICAgICB2aXN1YWxCbG9ja3M6IHZpc3VhbEJsb2Nrcy5tYXAoKGI1KSA9PiAoeyBpbmRleDogYjUuaW5kZXgsIHRvcDogYjUudG9wLCBib3R0b206IGI1LmJvdHRvbSB9KSkKICAgIH0pOwogIH0KICAvKioKICAgKiBIYW5kbGVzIGdsb2JhbCBkcmFnIGVuZAogICAqLwogIGhhbmRsZUdsb2JhbERyYWdFbmQgPSAoKSA9PiB7CiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIHRoaXMuaGFuZGxlR2xvYmFsRHJhZ092ZXIpOwogICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsIHRoaXMuaGFuZGxlR2xvYmFsRHJhZ0VuZCk7CiAgICBpZiAodGhpcy5kcm9wSW5kaWNhdG9yKSB7CiAgICAgIHRoaXMuZHJvcEluZGljYXRvci5yZW1vdmUoKTsKICAgICAgdGhpcy5kcm9wSW5kaWNhdG9yID0gbnVsbDsKICAgIH0KICAgIGlmICh0aGlzLmRyYWdnZWRCbG9ja0lkKSB7CiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgdGhpcy5wZXJmb3JtRHJvcCgpOwogICAgICAgIHRoaXMuaGFuZGxlRHJhZ0VuZCgpOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuaGFuZGxlRHJhZ0VuZCgpOwogICAgfQogIH07CiAgLyoqCiAgICogUGVyZm9ybXMgdGhlIGFjdHVhbCBkcm9wIG9wZXJhdGlvbgogICAqLwogIHBlcmZvcm1Ecm9wKCkgewogICAgaWYgKCF0aGlzLmRyYWdnZWRCbG9ja0lkKQogICAgICByZXR1cm47CiAgICBjb25zdCBibG9ja0VsZW1lbnRzMiA9IEFycmF5LmZyb20odGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpKTsKICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50ID0gYmxvY2tFbGVtZW50czIuZmluZCgoZWwpID0+IGVsLmdldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIpID09PSB0aGlzLmRyYWdnZWRCbG9ja0lkKTsKICAgIGlmICghZHJhZ2dlZEVsZW1lbnQpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHZpc3VhbE9yZGVyID0gYmxvY2tFbGVtZW50czIubWFwKChlbCkgPT4gewogICAgICBjb25zdCBpZCA9IGVsLmdldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIpOwogICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGNlbnRlclkgPSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMjsKICAgICAgcmV0dXJuIHsgaWQsIGNlbnRlclksIGVsZW1lbnQ6IGVsIH07CiAgICB9KTsKICAgIHZpc3VhbE9yZGVyLnNvcnQoKGE1LCBiNSkgPT4gYTUuY2VudGVyWSAtIGI1LmNlbnRlclkpOwogICAgY29uc3QgbmV3QmxvY2tJZHMgPSB2aXN1YWxPcmRlci5tYXAoKGl0ZW0pID0+IGl0ZW0uaWQpLmZpbHRlcigoaWQpID0+IGlkICE9PSBudWxsKTsKICAgIGNvbnN0IG9yaWdpbmFsQmxvY2tzID0gWy4uLnRoaXMuY29tcG9uZW50LmJsb2Nrc107CiAgICBjb25zdCBkcmFnZ2VkQmxvY2sgPSBvcmlnaW5hbEJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IHRoaXMuZHJhZ2dlZEJsb2NrSWQpOwogICAgaWYgKCFkcmFnZ2VkQmxvY2spCiAgICAgIHJldHVybjsKICAgIGNvbnN0IG9sZE9yZGVyID0gb3JpZ2luYWxCbG9ja3MubWFwKChiNSkgPT4gYjUuaWQpOwogICAgY29uc3Qgb3JkZXJDaGFuZ2VkID0gIW5ld0Jsb2NrSWRzLmV2ZXJ5KChpZCwgaW5kZXgyKSA9PiBpZCA9PT0gb2xkT3JkZXJbaW5kZXgyXSk7CiAgICBpZiAoIW9yZGVyQ2hhbmdlZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBuZXdCbG9ja3MgPSBuZXdCbG9ja0lkcy5tYXAoKGlkKSA9PiBvcmlnaW5hbEJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IGlkKSkuZmlsdGVyKEJvb2xlYW4pOwogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gbmV3QmxvY2tzOwogICAgdGhpcy5jb21wb25lbnQucmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpOwogICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBpZiAoZHJhZ2dlZEJsb2NrLnR5cGUgIT09ICJkaXZpZGVyIikgewogICAgICAgIHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGRyYWdnZWRCbG9jay5pZCk7CiAgICAgIH0KICAgIH0sIDEwMCk7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmhpc3RvcnkuanMKdmFyIFd5c2l3eWdIaXN0b3J5ID0gY2xhc3MgewogIGhpc3RvcnkgPSBbXTsKICBjdXJyZW50SW5kZXggPSAtMTsKICBtYXhIaXN0b3J5U2l6ZSA9IDUwOwogIGxhc3RTYXZlVGltZSA9IDA7CiAgc2F2ZURlYm91bmNlTXMgPSA1MDA7CiAgLy8gRGVib3VuY2Ugc2F2ZXMgdG8gYXZvaWQgdG9vIG1hbnkgc25hcHNob3RzCiAgY29uc3RydWN0b3IoKSB7CiAgICB0aGlzLmhpc3RvcnkgPSBbXTsKICAgIHRoaXMuY3VycmVudEluZGV4ID0gLTE7CiAgfQogIC8qKgogICAqIFNhdmUgY3VycmVudCBzdGF0ZSB0byBoaXN0b3J5CiAgICovCiAgc2F2ZVN0YXRlKGJsb2Nrcywgc2VsZWN0ZWRCbG9ja0lkLCBjdXJzb3JQb3NpdGlvbikgewogICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICBpZiAobm93MiAtIHRoaXMubGFzdFNhdmVUaW1lIDwgdGhpcy5zYXZlRGVib3VuY2VNcyAmJiB0aGlzLmN1cnJlbnRJbmRleCA+PSAwKSB7CiAgICAgIHRoaXMuaGlzdG9yeVt0aGlzLmN1cnJlbnRJbmRleF0gPSB7CiAgICAgICAgYmxvY2tzOiB0aGlzLmNsb25lQmxvY2tzKGJsb2NrcyksCiAgICAgICAgc2VsZWN0ZWRCbG9ja0lkLAogICAgICAgIGN1cnNvclBvc2l0aW9uOiBjdXJzb3JQb3NpdGlvbiA/IHsgLi4uY3Vyc29yUG9zaXRpb24gfSA6IHZvaWQgMCwKICAgICAgICB0aW1lc3RhbXA6IG5vdzIKICAgICAgfTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDEpIHsKICAgICAgdGhpcy5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5LnNsaWNlKDAsIHRoaXMuY3VycmVudEluZGV4ICsgMSk7CiAgICB9CiAgICBjb25zdCBuZXdTdGF0ZSA9IHsKICAgICAgYmxvY2tzOiB0aGlzLmNsb25lQmxvY2tzKGJsb2NrcyksCiAgICAgIHNlbGVjdGVkQmxvY2tJZCwKICAgICAgY3Vyc29yUG9zaXRpb246IGN1cnNvclBvc2l0aW9uID8geyAuLi5jdXJzb3JQb3NpdGlvbiB9IDogdm9pZCAwLAogICAgICB0aW1lc3RhbXA6IG5vdzIKICAgIH07CiAgICB0aGlzLmhpc3RvcnkucHVzaChuZXdTdGF0ZSk7CiAgICB0aGlzLmN1cnJlbnRJbmRleCsrOwogICAgaWYgKHRoaXMuaGlzdG9yeS5sZW5ndGggPiB0aGlzLm1heEhpc3RvcnlTaXplKSB7CiAgICAgIHRoaXMuaGlzdG9yeS5zaGlmdCgpOwogICAgICB0aGlzLmN1cnJlbnRJbmRleC0tOwogICAgfQogICAgdGhpcy5sYXN0U2F2ZVRpbWUgPSBub3cyOwogIH0KICAvKioKICAgKiBGb3JjZSBzYXZlIGEgY2hlY2twb2ludCAodXNlZnVsIGZvciBvcGVyYXRpb25zIGxpa2UgYmxvY2sgZGVsZXRpb24pCiAgICovCiAgc2F2ZUNoZWNrcG9pbnQoYmxvY2tzLCBzZWxlY3RlZEJsb2NrSWQsIGN1cnNvclBvc2l0aW9uKSB7CiAgICB0aGlzLmxhc3RTYXZlVGltZSA9IDA7CiAgICB0aGlzLnNhdmVTdGF0ZShibG9ja3MsIHNlbGVjdGVkQmxvY2tJZCwgY3Vyc29yUG9zaXRpb24pOwogIH0KICAvKioKICAgKiBVbmRvIHRvIHByZXZpb3VzIHN0YXRlCiAgICovCiAgdW5kbygpIHsKICAgIGlmICghdGhpcy5jYW5VbmRvKCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB0aGlzLmN1cnJlbnRJbmRleC0tOwogICAgcmV0dXJuIHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SW5kZXhdKTsKICB9CiAgLyoqCiAgICogUmVkbyB0byBuZXh0IHN0YXRlCiAgICovCiAgcmVkbygpIHsKICAgIGlmICghdGhpcy5jYW5SZWRvKCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB0aGlzLmN1cnJlbnRJbmRleCsrOwogICAgcmV0dXJuIHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SW5kZXhdKTsKICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgdW5kbyBpcyBhdmFpbGFibGUKICAgKi8KICBjYW5VbmRvKCkgewogICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4ID4gMDsKICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgcmVkbyBpcyBhdmFpbGFibGUKICAgKi8KICBjYW5SZWRvKCkgewogICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDE7CiAgfQogIC8qKgogICAqIEdldCBjdXJyZW50IHN0YXRlCiAgICovCiAgZ2V0Q3VycmVudFN0YXRlKCkgewogICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID49IDAgJiYgdGhpcy5jdXJyZW50SW5kZXggPCB0aGlzLmhpc3RvcnkubGVuZ3RoKSB7CiAgICAgIHJldHVybiB0aGlzLmNsb25lU3RhdGUodGhpcy5oaXN0b3J5W3RoaXMuY3VycmVudEluZGV4XSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgLyoqCiAgICogQ2xlYXIgaGlzdG9yeQogICAqLwogIGNsZWFyKCkgewogICAgdGhpcy5oaXN0b3J5ID0gW107CiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IC0xOwogICAgdGhpcy5sYXN0U2F2ZVRpbWUgPSAwOwogIH0KICAvKioKICAgKiBEZWVwIGNsb25lIGJsb2NrcwogICAqLwogIGNsb25lQmxvY2tzKGJsb2NrcykgewogICAgcmV0dXJuIGJsb2Nrcy5tYXAoKGJsb2NrKSA9PiAoewogICAgICAuLi5ibG9jaywKICAgICAgbWV0YWRhdGE6IGJsb2NrLm1ldGFkYXRhID8geyAuLi5ibG9jay5tZXRhZGF0YSB9IDogdm9pZCAwCiAgICB9KSk7CiAgfQogIC8qKgogICAqIENsb25lIGEgaGlzdG9yeSBzdGF0ZQogICAqLwogIGNsb25lU3RhdGUoc3RhdGUxNCkgewogICAgcmV0dXJuIHsKICAgICAgYmxvY2tzOiB0aGlzLmNsb25lQmxvY2tzKHN0YXRlMTQuYmxvY2tzKSwKICAgICAgc2VsZWN0ZWRCbG9ja0lkOiBzdGF0ZTE0LnNlbGVjdGVkQmxvY2tJZCwKICAgICAgY3Vyc29yUG9zaXRpb246IHN0YXRlMTQuY3Vyc29yUG9zaXRpb24gPyB7IC4uLnN0YXRlMTQuY3Vyc29yUG9zaXRpb24gfSA6IHZvaWQgMCwKICAgICAgdGltZXN0YW1wOiBzdGF0ZTE0LnRpbWVzdGFtcAogICAgfTsKICB9CiAgLyoqCiAgICogR2V0IGhpc3RvcnkgaW5mbyBmb3IgZGVidWdnaW5nCiAgICovCiAgZ2V0SGlzdG9yeUluZm8oKSB7CiAgICByZXR1cm4gewogICAgICBzaXplOiB0aGlzLmhpc3RvcnkubGVuZ3RoLAogICAgICBjdXJyZW50SW5kZXg6IHRoaXMuY3VycmVudEluZGV4LAogICAgICBjYW5VbmRvOiB0aGlzLmNhblVuZG8oKSwKICAgICAgY2FuUmVkbzogdGhpcy5jYW5SZWRvKCkKICAgIH07CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9kZWVzLXd5c2l3eWctYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNjMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczY0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV3lzaXd5Z0Jsb2NrID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13eXNpd3lnLWJsb2NrIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfYmxvY2tfZGVjb3JhdG9yczsKICBsZXQgX2Jsb2NrX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYmxvY2tfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzU2VsZWN0ZWRfZGVjb3JhdG9yczsKICBsZXQgX2lzU2VsZWN0ZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc1NlbGVjdGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oYW5kbGVyc19kZWNvcmF0b3JzOwogIGxldCBfaGFuZGxlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oYW5kbGVyc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfd3lzaXd5Z0NvbXBvbmVudF9kZWNvcmF0b3JzOwogIGxldCBfd3lzaXd5Z0NvbXBvbmVudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3d5c2l3eWdDb21wb25lbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1d5c2l3eWdCbG9jazIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9ibG9ja19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX2lzU2VsZWN0ZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfaGFuZGxlcnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF93eXNpd3lnQ29tcG9uZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfX2VzRGVjb3JhdGU2Myh0aGlzLCBudWxsLCBfYmxvY2tfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYmxvY2siLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJsb2NrIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJsb2NrLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ibG9jayA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ibG9ja19pbml0aWFsaXplcnMsIF9ibG9ja19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYzKHRoaXMsIG51bGwsIF9pc1NlbGVjdGVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzU2VsZWN0ZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzU2VsZWN0ZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNTZWxlY3RlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNTZWxlY3RlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc1NlbGVjdGVkX2luaXRpYWxpemVycywgX2lzU2VsZWN0ZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Myh0aGlzLCBudWxsLCBfaGFuZGxlcnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGFuZGxlcnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhhbmRsZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhhbmRsZXJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oYW5kbGVycyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oYW5kbGVyc19pbml0aWFsaXplcnMsIF9oYW5kbGVyc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYzKHRoaXMsIG51bGwsIF93eXNpd3lnQ29tcG9uZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInd5c2l3eWdDb21wb25lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInd5c2l3eWdDb21wb25lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud3lzaXd5Z0NvbXBvbmVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud3lzaXd5Z0NvbXBvbmVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF93eXNpd3lnQ29tcG9uZW50X2luaXRpYWxpemVycywgX3d5c2l3eWdDb21wb25lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXeXNpd3lnQmxvY2syID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAodGhpcy5fc2VsZWN0aW9uSGFuZGxlcikgewogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIHRoaXMuX3NlbGVjdGlvbkhhbmRsZXIpOwogICAgICB9CiAgICB9CiAgICAjYmxvY2tfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX2Jsb2NrX2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgIGdldCBibG9jaygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Jsb2NrX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYmxvY2sodmFsdWUyKSB7CiAgICAgIHRoaXMuI2Jsb2NrX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNTZWxlY3RlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX2Jsb2NrX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfaXNTZWxlY3RlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNTZWxlY3RlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzU2VsZWN0ZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1NlbGVjdGVkKHZhbHVlMikgewogICAgICB0aGlzLiNpc1NlbGVjdGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaGFuZGxlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY0KHRoaXMsIF9pc1NlbGVjdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfaGFuZGxlcnNfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBoYW5kbGVycygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2hhbmRsZXJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaGFuZGxlcnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2hhbmRsZXJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjd3lzaXd5Z0NvbXBvbmVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX2hhbmRsZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfd3lzaXd5Z0NvbXBvbmVudF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHd5c2l3eWdDb21wb25lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN3eXNpd3lnQ29tcG9uZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICAvLyBSZWZlcmVuY2UgdG8gcGFyZW50IGRlZXMtaW5wdXQtd3lzaXd5ZwogICAgc2V0IHd5c2l3eWdDb21wb25lbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3d5c2l3eWdDb21wb25lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8vIFJlZmVyZW5jZSB0byB0aGUgZWRpdGFibGUgYmxvY2sgZWxlbWVudAogICAgYmxvY2tFbGVtZW50ID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX3d5c2l3eWdDb21wb25lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgIC8vIFRyYWNrIGlmIHdlJ3ZlIGluaXRpYWxpemVkIHRoZSBjb250ZW50CiAgICBjb250ZW50SW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgIC8vIFRyYWNrIGN1cnNvciBwb3NpdGlvbgogICAgbGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSAwOwogICAgbGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgaGFuZGxlclN0eWxlc0luamVjdGVkID0gZmFsc2U7CiAgICAvLyBCbG9jayB0eXBlcyB0aGF0IGRvbid0IHN1cHBvcnQgY29udGVudGVkaXRhYmxlCiAgICBzdGF0aWMgTk9OX0VESVRBQkxFX1RZUEVTID0gWyJpbWFnZSIsICJkaXZpZGVyIiwgInlvdXR1YmUiXTsKICAgIGluamVjdEhhbmRsZXJTdHlsZXMoKSB7CiAgICAgIGlmICh0aGlzLmhhbmRsZXJTdHlsZXNJbmplY3RlZCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMuaGFuZGxlclN0eWxlc0luamVjdGVkID0gdHJ1ZTsKICAgICAgbGV0IHN0eWxlczMgPSAiIjsKICAgICAgY29uc3QgYmxvY2tUeXBlcyA9IEJsb2NrUmVnaXN0cnkuZ2V0QWxsVHlwZXMoKTsKICAgICAgZm9yIChjb25zdCB0eXBlNSBvZiBibG9ja1R5cGVzKSB7CiAgICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodHlwZTUpOwogICAgICAgIGlmIChoYW5kbGVyMikgewogICAgICAgICAgc3R5bGVzMyArPSBoYW5kbGVyMi5nZXRTdHlsZXMoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHN0eWxlczMpIHsKICAgICAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9IHN0eWxlczM7CiAgICAgICAgdGhpcy5zaGFkb3dSb290Py5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAuYmxvY2sgewogICAgICAgIHBhZGRpbmc6IDRweCAwOwogICAgICAgIG1pbi1oZWlnaHQ6IDEuNmVtOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAiLCAiI2UwZTBlMCIpfTsKICAgICAgfQoKICAgICAgLmJsb2NrOmVtcHR5Om5vdCg6Zm9jdXMpOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1wbGFjZWhvbGRlcik7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAvKiBCbG9jay1zcGVjaWZpYyBzdHlsZXMgbW92ZWQgdG8gaGFuZGxlcnMgKi8KCgogICAgICAvKiBGb3JtYXR0aW5nIHN0eWxlcyAqLwogICAgICAuYmxvY2sgOmlzKGIsIHN0cm9uZykgewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNmZmZmZmYiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jayA6aXMoaSwgZW0pIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5ibG9jayB1IHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLmJsb2NrIHMgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwogICAgICB9CgogICAgICAuYmxvY2sgY29kZSB7CiAgICAgICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAwLjllbTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA2KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDE0IiwgIiNmZjZiNmIiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jayBhIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDY2Y2MiLCAiIzRkOTRmZiIpfTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE1cyBlYXNlOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLmJsb2NrIGE6aG92ZXIgewogICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDA2NmNjIiwgIiM0ZDk0ZmYiKX07CiAgICAgIH0KCiAgICAgIC8qIENvZGUgYmxvY2sgY29udGFpbmVyIGFuZCBsYW5ndWFnZSBzdHlsZXMgbW92ZWQgdG8gaGFuZGxlciAqLwoKICAgICAgLyogU2VsZWN0aW9uIHN0eWxlcyAqLwogICAgICAuYmxvY2sgOjpzZWxlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDEwMiwgMjA0LCAwLjMpIiwgInJnYmEoNzcsIDE0OCwgMjU1LCAwLjMpIil9OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICB9CgoKICAgICAgLyogU3RyaWtlIHRocm91Z2ggKi8KICAgICAgLmJsb2NrIDppcyhzLCBzdHJpa2UpIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCgogICAgICAvKiBCbG9jayBtYXJnaW4gYWRqdXN0bWVudHMgYmFzZWQgb24gdHlwZSAqLwogICAgICA6aG9zdC1jb250ZXh0KC5ibG9jay13cmFwcGVyOmZpcnN0LWNoaWxkKSAuYmxvY2sgewogICAgICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QtY29udGV4dCguYmxvY2std3JhcHBlcjpsYXN0LWNoaWxkKSAuYmxvY2sgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIFNlbGVjdGVkIHN0YXRlICovCiAgICAgIC5ibG9jay5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMDUpIiwgInJnYmEoNzcsIDE0OCwgMjU1LCAwLjA4KSIpfTsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMikiLCAicmdiYSg3NywgMTQ4LCAyNTUsIDAuMikiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAtOHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogLThweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDhweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA4cHg7CiAgICAgIH0KCgoKCiAgICBgCiAgICBdOwogICAgc2hvdWxkVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImlzU2VsZWN0ZWQiKSAmJiB0aGlzLmJsb2NrKSB7CiAgICAgICAgbGV0IGVsZW1lbnQ0ID0gbnVsbDsKICAgICAgICBjb25zdCBibG9ja1R5cGUgPSB0aGlzLmJsb2NrLnR5cGU7CiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSBgLmJsb2NrLiR7YmxvY2tUeXBlfWA7CiAgICAgICAgZWxlbWVudDQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOwogICAgICAgIGlmIChlbGVtZW50NCkgewogICAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZCkgewogICAgICAgICAgICBlbGVtZW50NC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZCIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWxlbWVudDQuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImJsb2NrIikgJiYgdGhpcy5ibG9jaykgewogICAgICAgIGNvbnN0IG9sZEJsb2NrID0gY2hhbmdlZFByb3BlcnRpZXMuZ2V0KCJibG9jayIpOwogICAgICAgIGlmIChvbGRCbG9jayAmJiBvbGRCbG9jay5pZCAmJiBvbGRCbG9jay50eXBlICYmIG9sZEJsb2NrLmlkID09PSB0aGlzLmJsb2NrLmlkICYmIG9sZEJsb2NrLnR5cGUgPT09IHRoaXMuYmxvY2sudHlwZSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gIXRoaXMuYmxvY2tFbGVtZW50IHx8IHRoaXMuYmxvY2s/LnR5cGUgIT09IHRoaXMuYmxvY2tFbGVtZW50LmRhdGFzZXQuYmxvY2tUeXBlOwogICAgfQogICAgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLmNvbnRlbnRJbml0aWFsaXplZCA9IHRydWU7CiAgICAgIHRoaXMuaW5qZWN0SGFuZGxlclN0eWxlcygpOwogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICBpZiAoY29udGFpbmVyICYmIHRoaXMuYmxvY2spIHsKICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gdGhpcy5yZW5kZXJCbG9ja0NvbnRlbnQoKTsKICAgICAgfQogICAgICBpZiAodGhpcy5ibG9jaykgewogICAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgICAgaWYgKGhhbmRsZXIyKSB7CiAgICAgICAgICBjb25zdCBibG9ja0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgICAgaWYgKGJsb2NrRWxlbWVudCkgewogICAgICAgICAgICBoYW5kbGVyMi5zZXR1cChibG9ja0VsZW1lbnQsIHRoaXMuYmxvY2ssIHRoaXMuaGFuZGxlcnMpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBlZGl0YWJsZUJsb2NrID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgICAgaWYgKGVkaXRhYmxlQmxvY2spIHsKICAgICAgICBlZGl0YWJsZUJsb2NrLnNldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIsIHRoaXMuYmxvY2suaWQpOwogICAgICAgIGVkaXRhYmxlQmxvY2suc2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLXR5cGUiLCB0aGlzLmJsb2NrLnR5cGUpOwogICAgICAgIGVkaXRhYmxlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoZTExKSA9PiB7CiAgICAgICAgICB0aGlzLmhhbmRsZXJzPy5vbklucHV0Py4oZTExKTsKICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWRpdGFibGVCbG9jayk7CiAgICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUJsb2NrKTsKICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuaGFuZGxlcnM/Lm9uS2V5RG93bj8uKGUxMSk7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IHsKICAgICAgICAgIHRoaXMuaGFuZGxlcnM/Lm9uRm9jdXM/LigpOwogICAgICAgIH0pOwogICAgICAgIGVkaXRhYmxlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgICAgIHRoaXMuaGFuZGxlcnM/Lm9uQmx1cj8uKCk7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbnN0YXJ0IiwgKCkgPT4gewogICAgICAgICAgdGhpcy5oYW5kbGVycz8ub25Db21wb3NpdGlvblN0YXJ0Py4oKTsKICAgICAgICB9KTsKICAgICAgICBlZGl0YWJsZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uZW5kIiwgKCkgPT4gewogICAgICAgICAgdGhpcy5oYW5kbGVycz8ub25Db21wb3NpdGlvbkVuZD8uKCk7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgKGUxMSkgPT4gewogICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUJsb2NrKTsKICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuaGFuZGxlcnM/Lm9uTW91c2VVcD8uKGUxMSk7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVkaXRhYmxlQmxvY2spOwogICAgICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMCk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgY2hlY2tTZWxlY3Rpb24gPSAoKSA9PiB7CiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7CiAgICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0Lmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIsIHsKICAgICAgICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICAgICAgICB0ZXh0OiAiIiwKICAgICAgICAgICAgICAgICAgYmxvY2tJZDogdGhpcy5ibG9jay5pZCwKICAgICAgICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiBmYWxzZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBjdXJyZW50RWRpdGFibGVCbG9jayA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgICBpZiAoIWN1cnJlbnRFZGl0YWJsZUJsb2NrKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB0aGlzLmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICAgICAgY29uc3QgcGFyZW50U2hhZG93Um9vdCA9IHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdDsKICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgICAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QpCiAgICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2godGhpcy5zaGFkb3dSb290KTsKICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBzdGFydEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGN1cnJlbnRFZGl0YWJsZUJsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKTsKICAgICAgICAgIGNvbnN0IGVuZEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGN1cnJlbnRFZGl0YWJsZUJsb2NrLCBzZWxlY3Rpb25JbmZvLmVuZENvbnRhaW5lcik7CiAgICAgICAgICBpZiAoc3RhcnRJbkJsb2NrIHx8IGVuZEluQmxvY2spIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkVGV4dCAhPT0gdGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gc2VsZWN0ZWRUZXh0OwogICAgICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgICAgICAgICBjb25zdCByZWN0ID0gcmFuZ2UyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLCB7CiAgICAgICAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgICAgICAgdGV4dDogc2VsZWN0ZWRUZXh0LnRyaW0oKSwKICAgICAgICAgICAgICAgICAgYmxvY2tJZDogdGhpcy5ibG9jay5pZCwKICAgICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlMiwKICAgICAgICAgICAgICAgICAgcmVjdCwKICAgICAgICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIsIHsKICAgICAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgYmxvY2tJZDogdGhpcy5ibG9jay5pZCwKICAgICAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgICAgfSkpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgY2hlY2tTZWxlY3Rpb24pOwogICAgICAgIHRoaXMuX3NlbGVjdGlvbkhhbmRsZXIgPSBjaGVja1NlbGVjdGlvbjsKICAgICAgICBlZGl0YWJsZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwgKCkgPT4gewogICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUJsb2NrKTsKICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5ibG9jay5jb250ZW50KSB7CiAgICAgICAgICBlZGl0YWJsZUJsb2NrLmlubmVySFRNTCA9IHRoaXMuYmxvY2suY29udGVudDsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5ibG9ja0VsZW1lbnQgPSBlZGl0YWJsZUJsb2NrOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICBpZiAoIXRoaXMuYmxvY2spCiAgICAgICAgcmV0dXJuIHUzYGA7CiAgICAgIHJldHVybiB1M2A8ZGl2IGNsYXNzPSJ3eXNpd3lnLWJsb2NrLWNvbnRhaW5lciI+PC9kaXY+YDsKICAgIH0KICAgIHJlbmRlckJsb2NrQ29udGVudCgpIHsKICAgICAgaWYgKCF0aGlzLmJsb2NrKQogICAgICAgIHJldHVybiAiIjsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgaWYgKGhhbmRsZXIyKSB7CiAgICAgICAgcmV0dXJuIGhhbmRsZXIyLnJlbmRlcih0aGlzLmJsb2NrLCB0aGlzLmlzU2VsZWN0ZWQpOwogICAgICB9CiAgICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSB0aGlzLmlzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIiOwogICAgICByZXR1cm4gYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImJsb2NrICR7dGhpcy5ibG9jay50eXBlfSR7c2VsZWN0ZWRDbGFzc30iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICA+PC9kaXY+CiAgICBgOwogICAgfQogICAgZm9jdXMoKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5mb2N1cykgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgY29uc3QgY29udGV4dDIgPSB7IHNoYWRvd1Jvb3Q6IHRoaXMuc2hhZG93Um9vdCwgY29tcG9uZW50OiB0aGlzIH07CiAgICAgICAgcmV0dXJuIGhhbmRsZXIyLmZvY3VzKGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGlmICh0aGlzLmJsb2NrICYmIERlZXNXeXNpd3lnQmxvY2syLk5PTl9FRElUQUJMRV9UWVBFUy5pbmNsdWRlcyh0aGlzLmJsb2NrLnR5cGUpKSB7CiAgICAgICAgY29uc3QgYmxvY2tFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAuYmxvY2suJHt0aGlzLmJsb2NrLnR5cGV9YCk7CiAgICAgICAgaWYgKGJsb2NrRWxlbWVudCkgewogICAgICAgICAgYmxvY2tFbGVtZW50LmZvY3VzKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBlZGl0YWJsZUVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgICBpZiAoIWVkaXRhYmxlRWxlbWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGlmICghZWRpdGFibGVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpIHsKICAgICAgICBlZGl0YWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCAidHJ1ZSIpOwogICAgICB9CiAgICAgIGVkaXRhYmxlRWxlbWVudC5mb2N1cygpOwogICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZWRpdGFibGVFbGVtZW50ICYmIHRoaXMuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCAhPT0gZWRpdGFibGVFbGVtZW50KSB7CiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgICBlZGl0YWJsZUVsZW1lbnQuZm9jdXMoKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgZm9jdXNXaXRoQ3Vyc29yKHBvc2l0aW9uMyA9ICJlbmQiKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5mb2N1c1dpdGhDdXJzb3IpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgIHJldHVybiBoYW5kbGVyMi5mb2N1c1dpdGhDdXJzb3IoY29udGFpbmVyLCBwb3NpdGlvbjMsIGNvbnRleHQyKTsKICAgICAgfQogICAgICBpZiAodGhpcy5ibG9jayAmJiBEZWVzV3lzaXd5Z0Jsb2NrMi5OT05fRURJVEFCTEVfVFlQRVMuaW5jbHVkZXModGhpcy5ibG9jay50eXBlKSkgewogICAgICAgIHRoaXMuZm9jdXMoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgZWRpdGFibGVFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgICAgaWYgKCFlZGl0YWJsZUVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoIWVkaXRhYmxlRWxlbWVudC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgICAgZWRpdGFibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgInRydWUiKTsKICAgICAgfQogICAgICBlZGl0YWJsZUVsZW1lbnQuZm9jdXMoKTsKICAgICAgY29uc3Qgc2V0Q3Vyc29yID0gKCkgPT4gewogICAgICAgIGlmIChwb3NpdGlvbjMgPT09ICJzdGFydCIpIHsKICAgICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9TdGFydCgpOwogICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24zID09PSAiZW5kIikgewogICAgICAgICAgdGhpcy5zZXRDdXJzb3JUb0VuZCgpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBvc2l0aW9uMyA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24oZWRpdGFibGVFbGVtZW50LCBwb3NpdGlvbjMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCB8fCB0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCkgewogICAgICAgIHNldEN1cnNvcigpOwogICAgICB9IGVsc2UgewogICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gewogICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCB8fCB0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCkgewogICAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBHZXQgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSBlZGl0YWJsZSBlbGVtZW50CiAgICAgKi8KICAgIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5nZXRDdXJzb3JQb3NpdGlvbikgewogICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgIHJldHVybiBoYW5kbGVyMi5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHRoaXMuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgIGlmIChwYXJlbnRTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QpCiAgICAgICAgc2hhZG93Um9vdHMucHVzaCh0aGlzLnNoYWRvd1Jvb3QpOwogICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgY29uc29sZS5sb2coImdldEN1cnNvclBvc2l0aW9uOiBTZWxlY3Rpb24gaW5mbyBmcm9tIHNoYWRvdyBET01zOiIsIHsKICAgICAgICBzZWxlY3Rpb25JbmZvLAogICAgICAgIHNoYWRvd1Jvb3RzQ291bnQ6IHNoYWRvd1Jvb3RzLmxlbmd0aAogICAgICB9KTsKICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKSB7CiAgICAgICAgY29uc29sZS5sb2coImdldEN1cnNvclBvc2l0aW9uOiBObyBzZWxlY3Rpb24gZm91bmQiKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjb25zb2xlLmxvZygiZ2V0Q3Vyc29yUG9zaXRpb246IFJhbmdlIGluZm86IiwgewogICAgICAgIHN0YXJ0Q29udGFpbmVyOiBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLAogICAgICAgIHN0YXJ0T2Zmc2V0OiBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0LAogICAgICAgIGNvbGxhcHNlZDogc2VsZWN0aW9uSW5mby5jb2xsYXBzZWQsCiAgICAgICAgc3RhcnRDb250YWluZXJUZXh0OiBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLnRleHRDb250ZW50CiAgICAgIH0pOwogICAgICBpZiAoIWVsZW1lbnQ0LmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpKSB7CiAgICAgICAgY29uc29sZS5sb2coImdldEN1cnNvclBvc2l0aW9uOiBSYW5nZSBub3QgaW4gZWxlbWVudCIpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICBwcmVDYXJldFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50NCk7CiAgICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgICBjb25zdCBwb3NpdGlvbjMgPSBwcmVDYXJldFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoOwogICAgICBjb25zb2xlLmxvZygiZ2V0Q3Vyc29yUG9zaXRpb246IENhbGN1bGF0ZWQgcG9zaXRpb246IiwgewogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbjMsCiAgICAgICAgcHJlQ2FyZXRUZXh0OiBwcmVDYXJldFJhbmdlLnRvU3RyaW5nKCksCiAgICAgICAgZWxlbWVudFRleHQ6IGVsZW1lbnQ0LnRleHRDb250ZW50LAogICAgICAgIGVsZW1lbnRUZXh0TGVuZ3RoOiBlbGVtZW50NC50ZXh0Q29udGVudD8ubGVuZ3RoCiAgICAgIH0pOwogICAgICByZXR1cm4gcG9zaXRpb24zOwogICAgfQogICAgZ2V0Q29udGVudCgpIHsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgaWYgKGhhbmRsZXIyICYmIGhhbmRsZXIyLmdldENvbnRlbnQpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgIHJldHVybiBoYW5kbGVyMi5nZXRDb250ZW50KGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmICghZWRpdGFibGVFbGVtZW50KQogICAgICAgIHJldHVybiAiIjsKICAgICAgY29uc3QgY29udGVudDMgPSBlZGl0YWJsZUVsZW1lbnQuaW5uZXJIVE1MIHx8ICIiOwogICAgICBjb25zb2xlLmxvZygiR2V0dGluZyBjb250ZW50IGZyb20gYmxvY2s6IiwgY29udGVudDMpOwogICAgICByZXR1cm4gY29udGVudDM7CiAgICB9CiAgICBzZXRDb250ZW50KGNvbnRlbnQzKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5zZXRDb250ZW50KSB7CiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIud3lzaXd5Zy1ibG9jay1jb250YWluZXIiKTsKICAgICAgICBjb25zdCBjb250ZXh0MiA9IHsgc2hhZG93Um9vdDogdGhpcy5zaGFkb3dSb290LCBjb21wb25lbnQ6IHRoaXMgfTsKICAgICAgICByZXR1cm4gaGFuZGxlcjIuc2V0Q29udGVudChjb250YWluZXIsIGNvbnRlbnQzLCBjb250ZXh0Mik7CiAgICAgIH0KICAgICAgY29uc3QgZWRpdGFibGVFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgICAgaWYgKCFlZGl0YWJsZUVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBoYWRGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCB8fCB0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudDsKICAgICAgZWRpdGFibGVFbGVtZW50LmlubmVySFRNTCA9IGNvbnRlbnQzOwogICAgICBpZiAoaGFkRm9jdXMpIHsKICAgICAgICBlZGl0YWJsZUVsZW1lbnQuZm9jdXMoKTsKICAgICAgfQogICAgfQogICAgc2V0Q3Vyc29yVG9TdGFydCgpIHsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgaWYgKGhhbmRsZXIyICYmIGhhbmRsZXIyLnNldEN1cnNvclRvU3RhcnQpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgIHJldHVybiBoYW5kbGVyMi5zZXRDdXJzb3JUb1N0YXJ0KGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmIChlZGl0YWJsZUVsZW1lbnQpIHsKICAgICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvU3RhcnQoZWRpdGFibGVFbGVtZW50KTsKICAgICAgfQogICAgfQogICAgc2V0Q3Vyc29yVG9FbmQoKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5zZXRDdXJzb3JUb0VuZCkgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgY29uc3QgY29udGV4dDIgPSB7IHNoYWRvd1Jvb3Q6IHRoaXMuc2hhZG93Um9vdCwgY29tcG9uZW50OiB0aGlzIH07CiAgICAgICAgcmV0dXJuIGhhbmRsZXIyLnNldEN1cnNvclRvRW5kKGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmIChlZGl0YWJsZUVsZW1lbnQpIHsKICAgICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvRW5kKGVkaXRhYmxlRWxlbWVudCk7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogR2V0IGNvbnRleHQgbWVudSBpdGVtcyBmb3IgdGhpcyBibG9jawogICAgICovCiAgICBnZXRDb250ZXh0TWVudUl0ZW1zKCkgewogICAgICBpZiAoIXRoaXMuYmxvY2sgfHwgdGhpcy5ibG9jay50eXBlID09PSAiZGl2aWRlciIpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgY29uc3QgYmxvY2tUeXBlcyA9IFd5c2l3eWdTaG9ydGN1dHMuZ2V0U2xhc2hNZW51SXRlbXMoKTsKICAgICAgY29uc3QgY3VycmVudFR5cGUgPSB0aGlzLmJsb2NrLnR5cGU7CiAgICAgIGNvbnN0IHd5c2l3eWdDb21wb25lbnQgPSB0aGlzLnd5c2l3eWdDb21wb25lbnQ7CiAgICAgIGNvbnN0IGJsb2NrSWQgPSB0aGlzLmJsb2NrLmlkOwogICAgICBjb25zdCBibG9ja1R5cGVJdGVtcyA9IGJsb2NrVHlwZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnR5cGUgIT09IGN1cnJlbnRUeXBlICYmIGl0ZW0udHlwZSAhPT0gImRpdmlkZXIiKS5tYXAoKGl0ZW0pID0+ICh7CiAgICAgICAgbmFtZTogaXRlbS5sYWJlbCwKICAgICAgICBpY29uTmFtZTogaXRlbS5pY29uLnJlcGxhY2UoImx1Y2lkZToiLCAiIiksCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAod3lzaXd5Z0NvbXBvbmVudCAmJiB3eXNpd3lnQ29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucykgewogICAgICAgICAgICBjb25zdCBibG9ja1RvVHJhbnNmb3JtID0gd3lzaXd5Z0NvbXBvbmVudC5ibG9ja3MuZmluZCgoYjUpID0+IGI1LmlkID09PSBibG9ja0lkKTsKICAgICAgICAgICAgaWYgKGJsb2NrVG9UcmFuc2Zvcm0pIHsKICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLnR5cGUgPSBpdGVtLnR5cGU7CiAgICAgICAgICAgICAgYmxvY2tUb1RyYW5zZm9ybS5jb250ZW50ID0gYmxvY2tUb1RyYW5zZm9ybS5jb250ZW50IHx8ICIiOwogICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICJjb2RlIikgewogICAgICAgICAgICAgICAgYmxvY2tUb1RyYW5zZm9ybS5tZXRhZGF0YSA9IHsgbGFuZ3VhZ2U6ICJ0eXBlc2NyaXB0IiB9OwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAibGlzdCIpIHsKICAgICAgICAgICAgICAgIGJsb2NrVG9UcmFuc2Zvcm0ubWV0YWRhdGEgPSB7IGxpc3RUeXBlOiAiYnVsbGV0IiB9OwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAiaW1hZ2UiKSB7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLmNvbnRlbnQgPSAiIjsKICAgICAgICAgICAgICAgIGJsb2NrVG9UcmFuc2Zvcm0ubWV0YWRhdGEgPSB7IHVybDogIiIsIGxvYWRpbmc6IGZhbHNlIH07CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICJ5b3V0dWJlIikgewogICAgICAgICAgICAgICAgYmxvY2tUb1RyYW5zZm9ybS5jb250ZW50ID0gIiI7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLm1ldGFkYXRhID0geyB2aWRlb0lkOiAiIiwgdXJsOiAiIiB9OwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAibWFya2Rvd24iKSB7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLm1ldGFkYXRhID0geyBzaG93UHJldmlldzogZmFsc2UgfTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gImh0bWwiKSB7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLm1ldGFkYXRhID0geyBzaG93UHJldmlldzogZmFsc2UgfTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gImF0dGFjaG1lbnQiKSB7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLmNvbnRlbnQgPSAiIjsKICAgICAgICAgICAgICAgIGJsb2NrVG9UcmFuc2Zvcm0ubWV0YWRhdGEgPSB7IGZpbGVzOiBbXSB9OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB3eXNpd3lnQ29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChibG9ja0lkKTsKICAgICAgICAgICAgICB3eXNpd3lnQ29tcG9uZW50LnVwZGF0ZVZhbHVlKCk7CiAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgICAgIHd5c2l3eWdDb21wb25lbnQuYmxvY2tPcGVyYXRpb25zLmZvY3VzQmxvY2soYmxvY2tJZCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pKTsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDaGFuZ2UgVHlwZSIsCiAgICAgICAgICBpY29uTmFtZTogInR5cGUiLAogICAgICAgICAgc3VibWVudTogYmxvY2tUeXBlSXRlbXMKICAgICAgICB9CiAgICAgIF07CiAgICAgIGlmICghWyJpbWFnZSIsICJkaXZpZGVyIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdLmluY2x1ZGVzKHRoaXMuYmxvY2sudHlwZSkpIHsKICAgICAgICBtZW51SXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSwgewogICAgICAgICAgbmFtZTogIkN1dCIsCiAgICAgICAgICBpY29uTmFtZTogInNjaXNzb3JzIiwKICAgICAgICAgIHNob3J0Y3V0OiAiQ21kK1giLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJjdXQiKTsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBuYW1lOiAiQ29weSIsCiAgICAgICAgICBpY29uTmFtZTogImNvcHkiLAogICAgICAgICAgc2hvcnRjdXQ6ICJDbWQrQyIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKTsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBuYW1lOiAiUGFzdGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLAogICAgICAgICAgc2hvcnRjdXQ6ICJDbWQrViIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoInBhc3RlIik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgbWVudUl0ZW1zLnB1c2goeyBkaXZpZGVyOiB0cnVlIH0sIHsKICAgICAgICBuYW1lOiAiRGVsZXRlIEJsb2NrIiwKICAgICAgICBpY29uTmFtZTogInRyYXNoMiIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAod3lzaXd5Z0NvbXBvbmVudCAmJiB3eXNpd3lnQ29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucykgewogICAgICAgICAgICB3eXNpd3lnQ29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucy5kZWxldGVCbG9jayhibG9ja0lkKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXR1cm4gbWVudUl0ZW1zOwogICAgfQogICAgLyoqCiAgICAgKiBHZXRzIGNvbnRlbnQgc3BsaXQgYXQgY3Vyc29yIHBvc2l0aW9uCiAgICAgKi8KICAgIGdldFNwbGl0Q29udGVudCgpIHsKICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU3RhcnRpbmcuLi4iKTsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogQ2hlY2tpbmcgZm9yIGhhbmRsZXIiLCB7CiAgICAgICAgYmxvY2tUeXBlOiB0aGlzLmJsb2NrLnR5cGUsCiAgICAgICAgaGFzSGFuZGxlcjogISFoYW5kbGVyMiwKICAgICAgICBoYXNTcGxpdE1ldGhvZDogISEoaGFuZGxlcjIgJiYgaGFuZGxlcjIuZ2V0U3BsaXRDb250ZW50KQogICAgICB9KTsKICAgICAgaWYgKGhhbmRsZXIyICYmIGhhbmRsZXIyLmdldFNwbGl0Q29udGVudCkgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogRm91bmQgY29udGFpbmVyIiwgewogICAgICAgICAgY29udGFpbmVyOiAhIWNvbnRhaW5lciwKICAgICAgICAgIGNvbnRhaW5lckhUTUw6IGNvbnRhaW5lcj8uaW5uZXJIVE1MPy5zdWJzdHJpbmcoMCwgMTAwKQogICAgICAgIH0pOwogICAgICAgIGNvbnN0IGNvbnRleHQyID0gewogICAgICAgICAgc2hhZG93Um9vdDogdGhpcy5zaGFkb3dSb290LAogICAgICAgICAgY29tcG9uZW50OiB0aGlzCiAgICAgICAgfTsKICAgICAgICByZXR1cm4gaGFuZGxlcjIuZ2V0U3BsaXRDb250ZW50KGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmICghZWRpdGFibGVFbGVtZW50KSB7CiAgICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogTm8gZWRpdGFibGUgZWxlbWVudCBmb3VuZCIpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IEVsZW1lbnQgaW5mbzoiLCB7CiAgICAgICAgYmxvY2tUeXBlOiB0aGlzLmJsb2NrLnR5cGUsCiAgICAgICAgaW5uZXJIVE1MOiBlZGl0YWJsZUVsZW1lbnQuaW5uZXJIVE1MLAogICAgICAgIHRleHRDb250ZW50OiBlZGl0YWJsZUVsZW1lbnQudGV4dENvbnRlbnQsCiAgICAgICAgdGV4dExlbmd0aDogZWRpdGFibGVFbGVtZW50LnRleHRDb250ZW50Py5sZW5ndGgKICAgICAgfSk7CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHRoaXMuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgIGlmIChwYXJlbnRTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QpCiAgICAgICAgc2hhZG93Um9vdHMucHVzaCh0aGlzLnNoYWRvd1Jvb3QpOwogICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU2VsZWN0aW9uIGluZm8gZnJvbSBzaGFkb3cgRE9NczoiLCB7CiAgICAgICAgc2VsZWN0aW9uSW5mbywKICAgICAgICBzaGFkb3dSb290c0NvdW50OiBzaGFkb3dSb290cy5sZW5ndGgKICAgICAgfSk7CiAgICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IE5vIHNlbGVjdGlvbiwgdXNpbmcgbGFzdCBrbm93biBwb3NpdGlvbjoiLCB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uKTsKICAgICAgICBpZiAodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiAhPT0gbnVsbCkgewogICAgICAgICAgY29uc3QgZnVsbFRleHQgPSBlZGl0YWJsZUVsZW1lbnQudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU3BsaXR0aW5nIHdpdGggbGFzdCBrbm93biBwb3NpdGlvbjoiLCB7CiAgICAgICAgICAgIHBvcywKICAgICAgICAgICAgZnVsbFRleHRMZW5ndGg6IGZ1bGxUZXh0Lmxlbmd0aCwKICAgICAgICAgICAgYmVmb3JlOiBmdWxsVGV4dC5zdWJzdHJpbmcoMCwgcG9zKSwKICAgICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICAgIGFmdGVyOiBmdWxsVGV4dC5zdWJzdHJpbmcocG9zKQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU2VsZWN0aW9uIHJhbmdlOiIsIHsKICAgICAgICBzdGFydENvbnRhaW5lcjogc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwKICAgICAgICBzdGFydE9mZnNldDogc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCwKICAgICAgICBzdGFydENvbnRhaW5lckluRWxlbWVudDogZWRpdGFibGVFbGVtZW50LmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpCiAgICAgIH0pOwogICAgICBpZiAoIVd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oZWRpdGFibGVFbGVtZW50LCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSkgewogICAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IFNlbGVjdGlvbiBub3QgaW4gdGhpcyBibG9jaywgdXNpbmcgbGFzdCBrbm93biBwb3NpdGlvbjoiLCB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uKTsKICAgICAgICBpZiAodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiAhPT0gbnVsbCkgewogICAgICAgICAgY29uc3QgZnVsbFRleHQgPSBlZGl0YWJsZUVsZW1lbnQudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgYmVmb3JlOiBmdWxsVGV4dC5zdWJzdHJpbmcoMCwgcG9zKSwKICAgICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBjdXJzb3JQb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVkaXRhYmxlRWxlbWVudCk7CiAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IEN1cnNvciBwb3NpdGlvbiBmb3IgSFRNTCBzcGxpdDoiLCBjdXJzb3JQb3MpOwogICAgICBpZiAoY3Vyc29yUG9zID09PSBudWxsIHx8IGN1cnNvclBvcyA9PT0gMCkgewogICAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IEN1cnNvciBhdCBzdGFydCBvciBudWxsLCBtb3ZpbmcgYWxsIGNvbnRlbnQiKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgYmVmb3JlOiAiIiwKICAgICAgICAgIGFmdGVyOiBlZGl0YWJsZUVsZW1lbnQuaW5uZXJIVE1MCiAgICAgICAgfTsKICAgICAgfQogICAgICBjb25zdCBiZWZvcmVSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgIGNvbnN0IGFmdGVyUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICBiZWZvcmVSYW5nZS5zZXRTdGFydChlZGl0YWJsZUVsZW1lbnQsIDApOwogICAgICBiZWZvcmVSYW5nZS5zZXRFbmQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICAgIGFmdGVyUmFuZ2Uuc2V0U3RhcnQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICAgIGFmdGVyUmFuZ2Uuc2V0RW5kKGVkaXRhYmxlRWxlbWVudCwgZWRpdGFibGVFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoKTsKICAgICAgY29uc3QgYmVmb3JlRnJhZ21lbnQgPSBiZWZvcmVSYW5nZS5jbG9uZUNvbnRlbnRzKCk7CiAgICAgIGNvbnN0IGFmdGVyRnJhZ21lbnQgPSBhZnRlclJhbmdlLmNsb25lQ29udGVudHMoKTsKICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICB0ZW1wRGl2LmFwcGVuZENoaWxkKGJlZm9yZUZyYWdtZW50KTsKICAgICAgY29uc3QgYmVmb3JlSHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgICB0ZW1wRGl2LmlubmVySFRNTCA9ICIiOwogICAgICB0ZW1wRGl2LmFwcGVuZENoaWxkKGFmdGVyRnJhZ21lbnQpOwogICAgICBjb25zdCBhZnRlckh0bWwgPSB0ZW1wRGl2LmlubmVySFRNTDsKICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogRmluYWwgc3BsaXQgcmVzdWx0OiIsIHsKICAgICAgICBjdXJzb3JQb3MsCiAgICAgICAgYmVmb3JlSHRtbCwKICAgICAgICBiZWZvcmVMZW5ndGg6IGJlZm9yZUh0bWwubGVuZ3RoLAogICAgICAgIGJlZm9yZUh0bWxQcmV2aWV3OiBiZWZvcmVIdG1sLnN1YnN0cmluZygwLCAxMDApICsgKGJlZm9yZUh0bWwubGVuZ3RoID4gMTAwID8gIi4uLiIgOiAiIiksCiAgICAgICAgYWZ0ZXJIdG1sLAogICAgICAgIGFmdGVyTGVuZ3RoOiBhZnRlckh0bWwubGVuZ3RoLAogICAgICAgIGFmdGVySHRtbFByZXZpZXc6IGFmdGVySHRtbC5zdWJzdHJpbmcoMCwgMTAwKSArIChhZnRlckh0bWwubGVuZ3RoID4gMTAwID8gIi4uLiIgOiAiIikKICAgICAgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgYmVmb3JlOiBiZWZvcmVIdG1sLAogICAgICAgIGFmdGVyOiBhZnRlckh0bWwKICAgICAgfTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXeXNpd3lnQmxvY2syID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvZGVlcy1pbnB1dC13eXNpd3lnLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTY0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2NSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0V3lzaXd5ZyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtd3lzaXd5ZyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dHB1dEZvcm1hdF9kZWNvcmF0b3JzOwogIGxldCBfb3V0cHV0Rm9ybWF0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0cHV0Rm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ibG9ja3NfZGVjb3JhdG9yczsKICBsZXQgX2Jsb2Nrc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Jsb2Nrc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ2dlZEJsb2NrSWRfZGVjb3JhdG9yczsKICBsZXQgX2RyYWdnZWRCbG9ja0lkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ2dlZEJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RyYWdPdmVyQmxvY2tJZF9kZWNvcmF0b3JzOwogIGxldCBfZHJhZ092ZXJCbG9ja0lkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ092ZXJCbG9ja0lkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kcmFnT3ZlclBvc2l0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9kcmFnT3ZlclBvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ092ZXJQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUZXh0X2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZFRleHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFRleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0V3lzaXd5ZzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX291dHB1dEZvcm1hdF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2Jsb2Nrc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZHJhZ2dlZEJsb2NrSWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2RyYWdPdmVyQmxvY2tJZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZHJhZ092ZXJQb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2VsZWN0ZWRUZXh0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTY0KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX291dHB1dEZvcm1hdF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvdXRwdXRGb3JtYXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm91dHB1dEZvcm1hdCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vdXRwdXRGb3JtYXQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm91dHB1dEZvcm1hdCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vdXRwdXRGb3JtYXRfaW5pdGlhbGl6ZXJzLCBfb3V0cHV0Rm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX2Jsb2Nrc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJibG9ja3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJsb2NrcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ibG9ja3MsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJsb2NrcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ibG9ja3NfaW5pdGlhbGl6ZXJzLCBfYmxvY2tzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX2RyYWdnZWRCbG9ja0lkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdnZWRCbG9ja0lkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkcmFnZ2VkQmxvY2tJZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kcmFnZ2VkQmxvY2tJZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHJhZ2dlZEJsb2NrSWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHJhZ2dlZEJsb2NrSWRfaW5pdGlhbGl6ZXJzLCBfZHJhZ2dlZEJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NCh0aGlzLCBudWxsLCBfZHJhZ092ZXJCbG9ja0lkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdPdmVyQmxvY2tJZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHJhZ092ZXJCbG9ja0lkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRyYWdPdmVyQmxvY2tJZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHJhZ092ZXJCbG9ja0lkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RyYWdPdmVyQmxvY2tJZF9pbml0aWFsaXplcnMsIF9kcmFnT3ZlckJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NCh0aGlzLCBudWxsLCBfZHJhZ092ZXJQb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkcmFnT3ZlclBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkcmFnT3ZlclBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRyYWdPdmVyUG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRyYWdPdmVyUG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHJhZ092ZXJQb3NpdGlvbl9pbml0aWFsaXplcnMsIF9kcmFnT3ZlclBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX3NlbGVjdGVkVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkVGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZFRleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZFRleHRfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRUZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRXeXNpd3lnMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNDA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI291dHB1dEZvcm1hdF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfb3V0cHV0Rm9ybWF0X2luaXRpYWxpemVycywgImh0bWwiKSk7CiAgICBnZXQgb3V0cHV0Rm9ybWF0KCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0cHV0Rm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgb3V0cHV0Rm9ybWF0KHZhbHVlMikgewogICAgICB0aGlzLiNvdXRwdXRGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNibG9ja3NfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9vdXRwdXRGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9ibG9ja3NfaW5pdGlhbGl6ZXJzLCBbCiAgICAgIHsKICAgICAgICBpZDogV3lzaXd5Z1Nob3J0Y3V0cy5nZW5lcmF0ZUJsb2NrSWQoKSwKICAgICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgICBjb250ZW50OiAiIgogICAgICB9CiAgICBdKSk7CiAgICBnZXQgYmxvY2tzKCkgewogICAgICByZXR1cm4gdGhpcy4jYmxvY2tzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYmxvY2tzKHZhbHVlMikgewogICAgICB0aGlzLiNibG9ja3NfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8vIE5vdCB1c2luZyBAc3RhdGUgdG8gYXZvaWQgcmUtcmVuZGVycyB3aGVuIHNlbGVjdGlvbiBjaGFuZ2VzCiAgICBzZWxlY3RlZEJsb2NrSWQgPSAoX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfYmxvY2tzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAvLyBTbGFzaCBtZW51IGlzIG5vdyBnbG9iYWxseSByZW5kZXJlZAogICAgc2xhc2hNZW51ID0gRGVlc1NsYXNoTWVudS5nZXRJbnN0YW5jZSgpOwogICAgI2RyYWdnZWRCbG9ja0lkX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9kcmFnZ2VkQmxvY2tJZF9pbml0aWFsaXplcnMsIG51bGwpOwogICAgZ2V0IGRyYWdnZWRCbG9ja0lkKCkgewogICAgICByZXR1cm4gdGhpcy4jZHJhZ2dlZEJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkcmFnZ2VkQmxvY2tJZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ2dlZEJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkcmFnT3ZlckJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9kcmFnZ2VkQmxvY2tJZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX2RyYWdPdmVyQmxvY2tJZF9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCBkcmFnT3ZlckJsb2NrSWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkcmFnT3ZlckJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkcmFnT3ZlckJsb2NrSWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2RyYWdPdmVyQmxvY2tJZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RyYWdPdmVyUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9kcmFnT3ZlckJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9kcmFnT3ZlclBvc2l0aW9uX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IGRyYWdPdmVyUG9zaXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNkcmFnT3ZlclBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZHJhZ092ZXJQb3NpdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ092ZXJQb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gRm9ybWF0dGluZyBtZW51IGlzIG5vdyBnbG9iYWxseSByZW5kZXJlZAogICAgZm9ybWF0dGluZ01lbnUgPSAoX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfZHJhZ092ZXJQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyksIERlZXNGb3JtYXR0aW5nTWVudS5nZXRJbnN0YW5jZSgpKTsKICAgICNzZWxlY3RlZFRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX3NlbGVjdGVkVGV4dF9pbml0aWFsaXplcnMsICIiKTsKICAgIGdldCBzZWxlY3RlZFRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZFRleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZFRleHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGVkVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgZWRpdG9yQ29udGVudFJlZiA9IF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX3NlbGVjdGVkVGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICBpc0NvbXBvc2luZyA9IGZhbHNlOwogICAgLy8gSGFuZGxlciBpbnN0YW5jZXMKICAgIGJsb2NrT3BlcmF0aW9uczsKICAgIGlucHV0SGFuZGxlcjsKICAgIGtleWJvYXJkSGFuZGxlcjsKICAgIGRyYWdEcm9wSGFuZGxlcjsKICAgIGhpc3Rvcnk7CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICB3eXNpd3lnU3R5bGVzCiAgICBdOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIHRoaXMuYmxvY2tPcGVyYXRpb25zID0gbmV3IFd5c2l3eWdCbG9ja09wZXJhdGlvbnModGhpcyk7CiAgICAgIHRoaXMuaW5wdXRIYW5kbGVyID0gbmV3IFd5c2l3eWdJbnB1dEhhbmRsZXIodGhpcyk7CiAgICAgIHRoaXMua2V5Ym9hcmRIYW5kbGVyID0gbmV3IFd5c2l3eWdLZXlib2FyZEhhbmRsZXIodGhpcyk7CiAgICAgIHRoaXMuZHJhZ0Ryb3BIYW5kbGVyID0gbmV3IFd5c2l3eWdEcmFnRHJvcEhhbmRsZXIodGhpcyk7CiAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBXeXNpd3lnSGlzdG9yeSgpOwogICAgfQogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy5pbnB1dEhhbmRsZXI/LmRlc3Ryb3koKTsKICAgICAgaWYgKHRoaXMuYmx1clRpbWVvdXQpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZW91dCk7CiAgICAgICAgdGhpcy5ibHVyVGltZW91dCA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS50cmltKCkubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IHBhcnNlZEJsb2NrcyA9IHRoaXMub3V0cHV0Rm9ybWF0ID09PSAiaHRtbCIgPyBXeXNpd3lnQ29udmVydGVycy5wYXJzZUh0bWxUb0Jsb2Nrcyh0aGlzLnZhbHVlKSA6IFd5c2l3eWdDb252ZXJ0ZXJzLnBhcnNlTWFya2Rvd25Ub0Jsb2Nrcyh0aGlzLnZhbHVlKTsKICAgICAgICBpZiAocGFyc2VkQmxvY2tzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHRoaXMuYmxvY2tzID0gcGFyc2VkQmxvY2tzOwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgIHRoaXMuZWRpdG9yQ29udGVudFJlZiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLWNvbnRlbnQiKTsKICAgICAgaWYgKHRoaXMuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgIHRoaXMuZWRpdG9yQ29udGVudFJlZi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHRoaXMuaGFuZGxlRWRpdG9yQ2xpY2soZTExKSk7CiAgICAgIH0KICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibG9jay10ZXh0LXNlbGVjdGVkIiwgKGUxMSkgPT4gewogICAgICAgIGlmICghdGhpcy5zbGFzaE1lbnUudmlzaWJsZSAmJiBlMTEuZGV0YWlsLmhhc1NlbGVjdGlvbiAmJiBlMTEuZGV0YWlsLnRleHQubGVuZ3RoID4gMCkgewogICAgICAgICAgdGhpcy5zZWxlY3RlZFRleHQgPSBlMTEuZGV0YWlsLnRleHQ7CiAgICAgICAgICBpZiAoZTExLmRldGFpbC5yZWN0KSB7CiAgICAgICAgICAgIGNvbnN0IGNvb3JkcyA9IHsKICAgICAgICAgICAgICB4OiBlMTEuZGV0YWlsLnJlY3QubGVmdCArIGUxMS5kZXRhaWwucmVjdC53aWR0aCAvIDIsCiAgICAgICAgICAgICAgeTogTWF0aC5tYXgoNDUsIGUxMS5kZXRhaWwucmVjdC50b3AgLSA0NSkKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5mb3JtYXR0aW5nTWVudS5zaG93KGNvb3JkcywgYXN5bmMgKGNvbW1hbmQpID0+IGF3YWl0IHRoaXMuYXBwbHlGb3JtYXQoY29tbWFuZCkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCBmb3JtYXR0aW5nTWVudUVsZW1lbnQgPSB0aGlzLmZvcm1hdHRpbmdNZW51LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5mb3JtYXR0aW5nLW1lbnUiKTsKICAgICAgICBpZiAoZm9ybWF0dGluZ01lbnVFbGVtZW50ICYmIGZvcm1hdHRpbmdNZW51RWxlbWVudC5jb250YWlucyhlMTEudGFyZ2V0KSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24udG9TdHJpbmcoKS50cmltKCkubGVuZ3RoID4gMCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5mb3JtYXR0aW5nTWVudS52aXNpYmxlKSB7CiAgICAgICAgICB0aGlzLmhpZGVGb3JtYXR0aW5nTWVudSgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCB0YXJnZXQgPSBlMTEudGFyZ2V0OwogICAgICAgIGlmICghdGhpcy5jb250YWlucyh0YXJnZXQpICYmICF0aGlzLnNoYWRvd1Jvb3Q/LmNvbnRhaW5zKHRhcmdldCkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKChlMTEubWV0YUtleSB8fCBlMTEuY3RybEtleSkgJiYgIWUxMS5zaGlmdEtleSAmJiBlMTEua2V5ID09PSAieiIpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy51bmRvKCk7CiAgICAgICAgfSBlbHNlIGlmICgoZTExLm1ldGFLZXkgfHwgZTExLmN0cmxLZXkpICYmIGUxMS5zaGlmdEtleSAmJiBlMTEua2V5ID09PSAieiIpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5yZWRvKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5oaXN0b3J5LnNhdmVTdGF0ZSh0aGlzLmJsb2NrcywgdGhpcy5zZWxlY3RlZEJsb2NrSWQpOwogICAgICB0aGlzLnJlbmRlckJsb2Nrc1Byb2dyYW1tYXRpY2FsbHkoKTsKICAgIH0KICAgIC8qKgogICAgICogUmVuZGVycyBhbGwgYmxvY2tzIHByb2dyYW1tYXRpY2FsbHkgd2l0aG91dCB0cmlnZ2VyaW5nIHJlLXJlbmRlcnMKICAgICAqLwogICAgcmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpIHsKICAgICAgaWYgKCF0aGlzLmVkaXRvckNvbnRlbnRSZWYpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmVkaXRvckNvbnRlbnRSZWYuaW5uZXJIVE1MID0gIiI7CiAgICAgIHRoaXMuYmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7CiAgICAgICAgY29uc3QgYmxvY2tXcmFwcGVyID0gdGhpcy5jcmVhdGVCbG9ja0VsZW1lbnQoYmxvY2spOwogICAgICAgIHRoaXMuZWRpdG9yQ29udGVudFJlZi5hcHBlbmRDaGlsZChibG9ja1dyYXBwZXIpOwogICAgICB9KTsKICAgIH0KICAgIC8qKgogICAgICogQ3JlYXRlcyBhIGJsb2NrIGVsZW1lbnQgcHJvZ3JhbW1hdGljYWxseQogICAgICovCiAgICBjcmVhdGVCbG9ja0VsZW1lbnQoYmxvY2spIHsKICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9ICJibG9jay13cmFwcGVyIjsKICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiLCBibG9jay5pZCk7CiAgICAgIGlmIChibG9jay50eXBlICE9PSAiZGl2aWRlciIpIHsKICAgICAgICBjb25zdCBkcmFnSGFuZGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgZHJhZ0hhbmRsZS5jbGFzc05hbWUgPSAiZHJhZy1oYW5kbGUiOwogICAgICAgIGRyYWdIYW5kbGUuZHJhZ2dhYmxlID0gdHJ1ZTsKICAgICAgICBkcmFnSGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsIChlMTEpID0+IHRoaXMuZHJhZ0Ryb3BIYW5kbGVyLmhhbmRsZURyYWdTdGFydChlMTEsIGJsb2NrKSk7CiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChkcmFnSGFuZGxlKTsKICAgICAgfQogICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICBibG9ja0NvbXBvbmVudC5ibG9jayA9IGJsb2NrOwogICAgICBibG9ja0NvbXBvbmVudC5pc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEJsb2NrSWQgPT09IGJsb2NrLmlkOwogICAgICBibG9ja0NvbXBvbmVudC53eXNpd3lnQ29tcG9uZW50ID0gdGhpczsKICAgICAgYmxvY2tDb21wb25lbnQuaGFuZGxlcnMgPSB7CiAgICAgICAgb25JbnB1dDogKGUxMSkgPT4gdGhpcy5pbnB1dEhhbmRsZXIuaGFuZGxlQmxvY2tJbnB1dChlMTEsIGJsb2NrKSwKICAgICAgICBvbktleURvd246IChlMTEpID0+IHRoaXMua2V5Ym9hcmRIYW5kbGVyLmhhbmRsZUJsb2NrS2V5RG93bihlMTEsIGJsb2NrKSwKICAgICAgICBvbkZvY3VzOiAoKSA9PiB0aGlzLmhhbmRsZUJsb2NrRm9jdXMoYmxvY2spLAogICAgICAgIG9uQmx1cjogKCkgPT4gdGhpcy5oYW5kbGVCbG9ja0JsdXIoYmxvY2spLAogICAgICAgIG9uQ29tcG9zaXRpb25TdGFydDogKCkgPT4gdGhpcy5pc0NvbXBvc2luZyA9IHRydWUsCiAgICAgICAgb25Db21wb3NpdGlvbkVuZDogKCkgPT4gdGhpcy5pc0NvbXBvc2luZyA9IGZhbHNlLAogICAgICAgIG9uTW91c2VVcDogKGUxMSkgPT4gdGhpcy5oYW5kbGVUZXh0U2VsZWN0aW9uKGUxMSksCiAgICAgICAgb25SZXF1ZXN0VXBkYXRlOiAoKSA9PiB0aGlzLnVwZGF0ZUJsb2NrRWxlbWVudChibG9jay5pZCkKICAgICAgfTsKICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChibG9ja0NvbXBvbmVudCk7CiAgICAgIHdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCAoZTExKSA9PiB0aGlzLmRyYWdEcm9wSGFuZGxlci5oYW5kbGVEcmFnT3ZlcihlMTEsIGJsb2NrKSk7CiAgICAgIHdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsIChlMTEpID0+IHRoaXMuZHJhZ0Ryb3BIYW5kbGVyLmhhbmRsZURyb3AoZTExLCBibG9jaykpOwogICAgICB3cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdsZWF2ZSIsICgpID0+IHRoaXMuZHJhZ0Ryb3BIYW5kbGVyLmhhbmRsZURyYWdMZWF2ZShibG9jaykpOwogICAgICByZXR1cm4gd3JhcHBlcjsKICAgIH0KICAgIC8qKgogICAgICogVXBkYXRlcyBhIHNwZWNpZmljIGJsb2NrIGVsZW1lbnQKICAgICAqLwogICAgdXBkYXRlQmxvY2tFbGVtZW50KGJsb2NrSWQpIHsKICAgICAgY29uc3QgYmxvY2sgPSB0aGlzLmJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IGJsb2NrSWQpOwogICAgICBpZiAoIWJsb2NrKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtibG9ja0lkfSJdYCk7CiAgICAgIGlmICghd3JhcHBlcikKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5ld1dyYXBwZXIgPSB0aGlzLmNyZWF0ZUJsb2NrRWxlbWVudChibG9jayk7CiAgICAgIHdyYXBwZXIucmVwbGFjZVdpdGgobmV3V3JhcHBlcik7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiB1M2AKICAgICAgPGRlZXMtbGFiZWwKICAgICAgICAubGFiZWw9IiR7dGhpcy5sYWJlbH0iCiAgICAgICAgLmRlc2NyaXB0aW9uPSIke3RoaXMuZGVzY3JpcHRpb259IgogICAgICAgIC5yZXF1aXJlZD0iJHt0aGlzLnJlcXVpcmVkfSIKICAgICAgPjwvZGVlcy1sYWJlbD4KICAgICAgPGRpdiBjbGFzcz0id3lzaXd5Zy1jb250YWluZXIiPgogICAgICAgIDxkaXYgCiAgICAgICAgICBjbGFzcz0iZWRpdG9yLWNvbnRlbnQgJHt0aGlzLmRyYWdnZWRCbG9ja0lkID8gImRyYWdnaW5nIiA6ICIifSIKICAgICAgICAgIGlkPSJlZGl0b3ItY29udGVudCIKICAgICAgICA+CiAgICAgICAgICA8IS0tIEJsb2NrcyB3aWxsIGJlIHJlbmRlcmVkIHByb2dyYW1tYXRpY2FsbHkgLS0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIC8vIE9sZCByZW5kZXJCbG9jayBtZXRob2QgcmVtb3ZlZCAtIHVzaW5nIHByb2dyYW1tYXRpYyByZW5kZXJpbmcgaW5zdGVhZAogICAgaGFuZGxlU2xhc2hNZW51S2V5Ym9hcmQoZTExKSB7CiAgICAgIHN3aXRjaCAoZTExLmtleSkgewogICAgICAgIGNhc2UgIkFycm93RG93biI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuc2xhc2hNZW51Lm5hdmlnYXRlKCJkb3duIik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJBcnJvd1VwIjoKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5zbGFzaE1lbnUubmF2aWdhdGUoInVwIik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJFbnRlciI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuc2xhc2hNZW51LnNlbGVjdEN1cnJlbnQoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkVzY2FwZSI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuY2xvc2VTbGFzaE1lbnUodHJ1ZSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgY2xvc2VTbGFzaE1lbnUoY2xlYXJTbGFzaCA9IGZhbHNlKSB7CiAgICAgIGlmIChjbGVhclNsYXNoICYmIHRoaXMuc2VsZWN0ZWRCbG9ja0lkKSB7CiAgICAgICAgY29uc3QgY3VycmVudEJsb2NrID0gdGhpcy5ibG9ja3MuZmluZCgoYjUpID0+IGI1LmlkID09PSB0aGlzLnNlbGVjdGVkQmxvY2tJZCk7CiAgICAgICAgaWYgKGN1cnJlbnRCbG9jaykgewogICAgICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7Y3VycmVudEJsb2NrLmlkfSJdYCk7CiAgICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgICAgICAgIGlmIChibG9ja0NvbXBvbmVudCkgewogICAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQoKTsKICAgICAgICAgICAgaWYgKGNvbnRlbnQzLnN0YXJ0c1dpdGgoIi8iKSkgewogICAgICAgICAgICAgIGNvbnN0IGNsZWFuQ29udGVudCA9IGNvbnRlbnQzLnJlcGxhY2UoL15cL1teXHNdKlxzKi8sICIiKS50cmltKCk7CiAgICAgICAgICAgICAgYmxvY2tDb21wb25lbnQuc2V0Q29udGVudChjbGVhbkNvbnRlbnQpOwogICAgICAgICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gY2xlYW5Db250ZW50OwogICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgICAgICBibG9ja0NvbXBvbmVudC5mb2N1c1dpdGhDdXJzb3IoMCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5zbGFzaE1lbnUuaGlkZSgpOwogICAgfQogICAgaGFuZGxlQmxvY2tGb2N1cyhibG9jaykgewogICAgICBpZiAodGhpcy5ibHVyVGltZW91dCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmJsdXJUaW1lb3V0KTsKICAgICAgICB0aGlzLmJsdXJUaW1lb3V0ID0gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBwcmV2U2VsZWN0ZWRJZCA9IHRoaXMuc2VsZWN0ZWRCbG9ja0lkOwogICAgICB0aGlzLnNlbGVjdGVkQmxvY2tJZCA9IGJsb2NrLmlkOwogICAgICBpZiAocHJldlNlbGVjdGVkSWQgIT09IGJsb2NrLmlkKSB7CiAgICAgICAgaWYgKHByZXZTZWxlY3RlZElkKSB7CiAgICAgICAgICBjb25zdCBwcmV2V3JhcHBlciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7cHJldlNlbGVjdGVkSWR9Il1gKTsKICAgICAgICAgIGNvbnN0IHByZXZCbG9ja0NvbXBvbmVudCA9IHByZXZXcmFwcGVyPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgICAgICAgIGlmIChwcmV2QmxvY2tDb21wb25lbnQpIHsKICAgICAgICAgICAgcHJldkJsb2NrQ29tcG9uZW50LmlzU2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmIChibG9ja0NvbXBvbmVudCkgewogICAgICAgICAgYmxvY2tDb21wb25lbnQuaXNTZWxlY3RlZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBibHVyVGltZW91dCA9IG51bGw7CiAgICBoYW5kbGVCbG9ja0JsdXIoYmxvY2spIHsKICAgICAgaWYgKHRoaXMuYmx1clRpbWVvdXQpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZW91dCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuc2xhc2hNZW51LnZpc2libGUpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICAgIGNvbnN0IGJsb2NrQ29tcG9uZW50ID0gd3JhcHBlckVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICBpZiAoYmxvY2tDb21wb25lbnQgJiYgYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCkgewogICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCk7CiAgICAgICAgaWYgKGJsb2NrLmNvbnRlbnQgIT09IG5ld0NvbnRlbnQpIHsKICAgICAgICAgIGJsb2NrLmNvbnRlbnQgPSBuZXdDb250ZW50OwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLmJsdXJUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudDsKICAgICAgICBjb25zdCBpc0Jsb2NrRm9jdXNlZCA9IGFjdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5jb250YWlucygiYmxvY2siKTsKICAgICAgICBpZiAoIWlzQmxvY2tGb2N1c2VkKSB7CiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgICAgfQogICAgICB9LCAxMDApOwogICAgfQogICAgaGFuZGxlRWRpdG9yQ2xpY2soZTExKSB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGUxMS50YXJnZXQ7CiAgICAgIGlmICh0aGlzLnNsYXNoTWVudS52aXNpYmxlKSB7CiAgICAgICAgdGhpcy5jbG9zZVNsYXNoTWVudSh0cnVlKTsKICAgICAgfQogICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiZWRpdG9yLWNvbnRlbnQiKSkgewogICAgICAgIGNvbnN0IGxhc3RCbG9jayA9IHRoaXMuYmxvY2tzW3RoaXMuYmxvY2tzLmxlbmd0aCAtIDFdOwogICAgICAgIHRoaXMuYmxvY2tPcGVyYXRpb25zLmZvY3VzQmxvY2sobGFzdEJsb2NrLmlkLCBsYXN0QmxvY2sudHlwZSA9PT0gImRpdmlkZXIiIHx8IGxhc3RCbG9jay50eXBlID09PSAiaW1hZ2UiID8gdm9pZCAwIDogImVuZCIpOwogICAgICB9CiAgICB9CiAgICBjcmVhdGVOZXdCbG9jayh0eXBlNSA9ICJwYXJhZ3JhcGgiLCBjb250ZW50MyA9ICIiLCBtZXRhZGF0YSkgewogICAgICByZXR1cm4gewogICAgICAgIGlkOiBXeXNpd3lnU2hvcnRjdXRzLmdlbmVyYXRlQmxvY2tJZCgpLAogICAgICAgIHR5cGU6IHR5cGU1LAogICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICAgIC4uLm1ldGFkYXRhICYmIHsgbWV0YWRhdGEgfQogICAgICB9OwogICAgfQogICAgYXN5bmMgaW5zZXJ0QmxvY2tBZnRlcihhZnRlckJsb2NrLCBuZXdCbG9jaywgZm9jdXNOZXdCbG9jayA9IHRydWUpIHsKICAgICAgY29uc3QgYmxvY2tJbmRleCA9IHRoaXMuYmxvY2tzLmZpbmRJbmRleCgoYjUpID0+IGI1LmlkID09PSBhZnRlckJsb2NrLmlkKTsKICAgICAgdGhpcy5ibG9ja3MgPSBbLi4udGhpcy5ibG9ja3Muc2xpY2UoMCwgYmxvY2tJbmRleCArIDEpLCBuZXdCbG9jaywgLi4udGhpcy5ibG9ja3Muc2xpY2UoYmxvY2tJbmRleCArIDEpXTsKICAgICAgY29uc3QgYWZ0ZXJXcmFwcGVyID0gdGhpcy5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2FmdGVyQmxvY2suaWR9Il1gKTsKICAgICAgaWYgKGFmdGVyV3JhcHBlcikgewogICAgICAgIGNvbnN0IG5ld1dyYXBwZXIgPSB0aGlzLmNyZWF0ZUJsb2NrRWxlbWVudChuZXdCbG9jayk7CiAgICAgICAgYWZ0ZXJXcmFwcGVyLmluc2VydEFkamFjZW50RWxlbWVudCgiYWZ0ZXJlbmQiLCBuZXdXcmFwcGVyKTsKICAgICAgfQogICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgIGlmIChmb2N1c05ld0Jsb2NrICYmIG5ld0Jsb2NrLnR5cGUgIT09ICJkaXZpZGVyIikgewogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gc2V0VGltZW91dChyZXNvbHZlMiwgMCkpOwogICAgICAgIGF3YWl0IHRoaXMuYmxvY2tPcGVyYXRpb25zLmZvY3VzQmxvY2sobmV3QmxvY2suaWQsICJzdGFydCIpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBpbnNlcnRCbG9jayh0eXBlNSkgewogICAgICBjb25zdCBjdXJyZW50QmxvY2sgPSB0aGlzLmJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IHRoaXMuc2VsZWN0ZWRCbG9ja0lkKTsKICAgICAgaWYgKCFjdXJyZW50QmxvY2spIHsKICAgICAgICB0aGlzLmNsb3NlU2xhc2hNZW51KCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2N1cnJlbnRCbG9jay5pZH0iXWApOwogICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgICAgaWYgKGJsb2NrQ29tcG9uZW50KSB7CiAgICAgICAgY29uc3QgY29udGVudDMgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCk7CiAgICAgICAgaWYgKGNvbnRlbnQzLnN0YXJ0c1dpdGgoIi8iKSkgewogICAgICAgICAgY29uc3QgY2xlYW5Db250ZW50ID0gY29udGVudDMucmVwbGFjZSgvXlwvW15cc10qXHMqLywgIiIpLnRyaW0oKTsKICAgICAgICAgIGJsb2NrQ29tcG9uZW50LnNldENvbnRlbnQoY2xlYW5Db250ZW50KTsKICAgICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gY2xlYW5Db250ZW50OwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLmNsb3NlU2xhc2hNZW51KGZhbHNlKTsKICAgICAgaWYgKHR5cGU1ID09PSAiY29kZSIpIHsKICAgICAgICBjdXJyZW50QmxvY2subWV0YWRhdGEgPSB7IGxhbmd1YWdlOiAidHlwZXNjcmlwdCIgfTsKICAgICAgfQogICAgICBjdXJyZW50QmxvY2sudHlwZSA9IHR5cGU1OwogICAgICBjdXJyZW50QmxvY2suY29udGVudCA9IGN1cnJlbnRCbG9jay5jb250ZW50IHx8ICIiOwogICAgICBpZiAodHlwZTUgPT09ICJkaXZpZGVyIikgewogICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gIiAiOwogICAgICAgIGNvbnN0IG5ld0Jsb2NrID0gdGhpcy5jcmVhdGVOZXdCbG9jaygpOwogICAgICAgIHRoaXMuaW5zZXJ0QmxvY2tBZnRlcihjdXJyZW50QmxvY2ssIG5ld0Jsb2NrKTsKICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gImxpc3QiKSB7CiAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyBsaXN0VHlwZTogImJ1bGxldCIgfTsKICAgICAgICBjdXJyZW50QmxvY2suY29udGVudCA9ICIiOwogICAgICB9IGVsc2UgaWYgKHR5cGU1ID09PSAiaW1hZ2UiKSB7CiAgICAgICAgY3VycmVudEJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICBjdXJyZW50QmxvY2subWV0YWRhdGEgPSB7IHVybDogIiIsIGxvYWRpbmc6IGZhbHNlIH07CiAgICAgIH0gZWxzZSBpZiAodHlwZTUgPT09ICJ5b3V0dWJlIikgewogICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gIiI7CiAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyB2aWRlb0lkOiAiIiwgdXJsOiAiIiB9OwogICAgICB9IGVsc2UgaWYgKHR5cGU1ID09PSAibWFya2Rvd24iKSB7CiAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyBzaG93UHJldmlldzogZmFsc2UgfTsKICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gImh0bWwiKSB7CiAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyBzaG93UHJldmlldzogZmFsc2UgfTsKICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gImF0dGFjaG1lbnQiKSB7CiAgICAgICAgY3VycmVudEJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICBjdXJyZW50QmxvY2subWV0YWRhdGEgPSB7IGZpbGVzOiBbXSB9OwogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gY3VycmVudEJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICAgIH0KICAgICAgdGhpcy51cGRhdGVCbG9ja0VsZW1lbnQoY3VycmVudEJsb2NrLmlkKTsKICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDApKTsKICAgICAgaWYgKHR5cGU1ID09PSAibGlzdCIpIHsKICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGN1cnJlbnRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7Y3VycmVudEJsb2NrLmlkfSJdYCk7CiAgICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudDIgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50MikgewogICAgICAgICAgICBibG9ja0NvbXBvbmVudDIuZm9jdXNMaXN0SXRlbSgpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKHR5cGU1ICE9PSAiZGl2aWRlciIgJiYgdHlwZTUgIT09ICJpbWFnZSIgJiYgdHlwZTUgIT09ICJ5b3V0dWJlIiAmJiB0eXBlNSAhPT0gIm1hcmtkb3duIiAmJiB0eXBlNSAhPT0gImh0bWwiICYmIHR5cGU1ICE9PSAiYXR0YWNobWVudCIpIHsKICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGN1cnJlbnRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgIH0gZWxzZSBpZiAodHlwZTUgPT09ICJpbWFnZSIgfHwgdHlwZTUgPT09ICJ5b3V0dWJlIiB8fCB0eXBlNSA9PT0gIm1hcmtkb3duIiB8fCB0eXBlNSA9PT0gImh0bWwiIHx8IHR5cGU1ID09PSAiYXR0YWNobWVudCIpIHsKICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGN1cnJlbnRCbG9jay5pZCk7CiAgICAgIH0KICAgIH0KICAgIHVwZGF0ZVZhbHVlKCkgewogICAgICBpZiAodGhpcy5vdXRwdXRGb3JtYXQgPT09ICJodG1sIikgewogICAgICAgIHRoaXMudmFsdWUgPSBXeXNpd3lnQ29udmVydGVycy5nZXRIdG1sT3V0cHV0KHRoaXMuYmxvY2tzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnZhbHVlID0gV3lzaXd5Z0NvbnZlcnRlcnMuZ2V0TWFya2Rvd25PdXRwdXQodGhpcy5ibG9ja3MpOwogICAgICB9CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMudmFsdWUpOwogICAgICB0aGlzLnNhdmVUb0hpc3RvcnkodHJ1ZSk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgICAgaWYgKHRoaXMub3V0cHV0Rm9ybWF0ID09PSAiaHRtbCIpIHsKICAgICAgICB0aGlzLmJsb2NrcyA9IFd5c2l3eWdDb252ZXJ0ZXJzLnBhcnNlSHRtbFRvQmxvY2tzKHZhbHVlMik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5ibG9ja3MgPSBXeXNpd3lnQ29udmVydGVycy5wYXJzZU1hcmtkb3duVG9CbG9ja3ModmFsdWUyKTsKICAgICAgfQogICAgICBpZiAodGhpcy5ibG9ja3MubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy5ibG9ja3MgPSBbewogICAgICAgICAgaWQ6IFd5c2l3eWdTaG9ydGN1dHMuZ2VuZXJhdGVCbG9ja0lkKCksCiAgICAgICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgICAgIGNvbnRlbnQ6ICIiCiAgICAgICAgfV07CiAgICAgIH0KICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcy52YWx1ZSk7CiAgICAgIGlmICh0aGlzLmVkaXRvckNvbnRlbnRSZWYpIHsKICAgICAgICB0aGlzLnJlbmRlckJsb2Nrc1Byb2dyYW1tYXRpY2FsbHkoKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBFeHBvcnQgdGhlIGVkaXRvciBjb250ZW50IGFzIHJhdyBibG9ja3MgKGxvc3NsZXNzKQogICAgICovCiAgICBleHBvcnRCbG9ja3MoKSB7CiAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuYmxvY2tzKSk7CiAgICB9CiAgICAvKioKICAgICAqIEltcG9ydCByYXcgYmxvY2tzIChsb3NzbGVzcykKICAgICAqLwogICAgaW1wb3J0QmxvY2tzKGJsb2NrcykgewogICAgICB0aGlzLmJsb2NrcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYmxvY2tzKSk7CiAgICAgIHRoaXMudXBkYXRlVmFsdWUoKTsKICAgICAgaWYgKHRoaXMuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgIHRoaXMucmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEV4cG9ydCBjb250ZW50IGFzIEhUTUwgcmVnYXJkbGVzcyBvZiBvdXRwdXRGb3JtYXQgc2V0dGluZwogICAgICovCiAgICBleHBvcnRBc0h0bWwoKSB7CiAgICAgIHJldHVybiBXeXNpd3lnQ29udmVydGVycy5nZXRIdG1sT3V0cHV0KHRoaXMuYmxvY2tzKTsKICAgIH0KICAgIC8qKgogICAgICogRXhwb3J0IGNvbnRlbnQgYXMgTWFya2Rvd24gcmVnYXJkbGVzcyBvZiBvdXRwdXRGb3JtYXQgc2V0dGluZwogICAgICovCiAgICBleHBvcnRBc01hcmtkb3duKCkgewogICAgICByZXR1cm4gV3lzaXd5Z0NvbnZlcnRlcnMuZ2V0TWFya2Rvd25PdXRwdXQodGhpcy5ibG9ja3MpOwogICAgfQogICAgLyoqCiAgICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlZGl0b3Igc3RhdGUgKGZvciBzYXZpbmcpCiAgICAgKi8KICAgIGV4cG9ydFN0YXRlKCkgewogICAgICByZXR1cm4gewogICAgICAgIGJsb2NrczogdGhpcy5leHBvcnRCbG9ja3MoKSwKICAgICAgICBvdXRwdXRGb3JtYXQ6IHRoaXMub3V0cHV0Rm9ybWF0CiAgICAgIH07CiAgICB9CiAgICAvKioKICAgICAqIFJlc3RvcmUgZWRpdG9yIHN0YXRlIGZyb20gSlNPTgogICAgICovCiAgICBpbXBvcnRTdGF0ZShzdGF0ZTE0KSB7CiAgICAgIGlmIChzdGF0ZTE0Lm91dHB1dEZvcm1hdCkgewogICAgICAgIHRoaXMub3V0cHV0Rm9ybWF0ID0gc3RhdGUxNC5vdXRwdXRGb3JtYXQ7CiAgICAgIH0KICAgICAgdGhpcy5pbXBvcnRCbG9ja3Moc3RhdGUxNC5ibG9ja3MpOwogICAgfQogICAgaGFuZGxlRHJhZ0VuZCgpIHsKICAgICAgaWYgKHRoaXMuZHJhZ2dlZEJsb2NrSWQpIHsKICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3RoaXMuZHJhZ2dlZEJsb2NrSWR9Il1gKTsKICAgICAgICBpZiAod3JhcHBlcikgewogICAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBhbGxXcmFwcGVycyA9IHRoaXMuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpOwogICAgICBhbGxXcmFwcGVycy5mb3JFYWNoKCh3cmFwcGVyKSA9PiB7CiAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnLW92ZXItYmVmb3JlIiwgImRyYWctb3Zlci1hZnRlciIpOwogICAgICB9KTsKICAgICAgdGhpcy5lZGl0b3JDb250ZW50UmVmLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIik7CiAgICAgIHRoaXMuZHJhZ2dlZEJsb2NrSWQgPSBudWxsOwogICAgICB0aGlzLmRyYWdPdmVyQmxvY2tJZCA9IG51bGw7CiAgICAgIHRoaXMuZHJhZ092ZXJQb3NpdGlvbiA9IG51bGw7CiAgICB9CiAgICBoYW5kbGVEcm9wKGUxMSwgdGFyZ2V0QmxvY2spIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGlmICghdGhpcy5kcmFnZ2VkQmxvY2tJZCB8fCB0aGlzLmRyYWdnZWRCbG9ja0lkID09PSB0YXJnZXRCbG9jay5pZCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGRyYWdnZWRJbmRleCA9IHRoaXMuYmxvY2tzLmZpbmRJbmRleCgoYjUpID0+IGI1LmlkID09PSB0aGlzLmRyYWdnZWRCbG9ja0lkKTsKICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSB0aGlzLmJsb2Nrcy5maW5kSW5kZXgoKGI1KSA9PiBiNS5pZCA9PT0gdGFyZ2V0QmxvY2suaWQpOwogICAgICBpZiAoZHJhZ2dlZEluZGV4ID09PSAtMSB8fCB0YXJnZXRJbmRleCA9PT0gLTEpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBbZHJhZ2dlZEJsb2NrXSA9IHRoaXMuYmxvY2tzLnNwbGljZShkcmFnZ2VkSW5kZXgsIDEpOwogICAgICBsZXQgbmV3SW5kZXggPSB0YXJnZXRJbmRleDsKICAgICAgaWYgKHRoaXMuZHJhZ092ZXJQb3NpdGlvbiA9PT0gImFmdGVyIikgewogICAgICAgIG5ld0luZGV4ID0gZHJhZ2dlZEluZGV4IDwgdGFyZ2V0SW5kZXggPyB0YXJnZXRJbmRleCA6IHRhcmdldEluZGV4ICsgMTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuZXdJbmRleCA9IGRyYWdnZWRJbmRleCA8IHRhcmdldEluZGV4ID8gdGFyZ2V0SW5kZXggLSAxIDogdGFyZ2V0SW5kZXg7CiAgICAgIH0KICAgICAgdGhpcy5ibG9ja3Muc3BsaWNlKG5ld0luZGV4LCAwLCBkcmFnZ2VkQmxvY2spOwogICAgICB0aGlzLnJlbmRlckJsb2Nrc1Byb2dyYW1tYXRpY2FsbHkoKTsKICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpOwogICAgICB0aGlzLmhhbmRsZURyYWdFbmQoKTsKICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgY29uc3QgbW92ZWRCbG9ja0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7ZHJhZ2dlZEJsb2NrLmlkfSJdIC5ibG9ja2ApOwogICAgICAgIGlmIChtb3ZlZEJsb2NrRWxlbWVudCAmJiBkcmFnZ2VkQmxvY2sudHlwZSAhPT0gImRpdmlkZXIiKSB7CiAgICAgICAgICBtb3ZlZEJsb2NrRWxlbWVudC5mb2N1cygpOwogICAgICAgIH0KICAgICAgfSwgMTAwKTsKICAgIH0KICAgIGhhbmRsZVRleHRTZWxlY3Rpb24oX2UpIHsKICAgICAgaWYgKHRoaXMuc2xhc2hNZW51LnZpc2libGUpCiAgICAgICAgcmV0dXJuOwogICAgfQogICAgdXBkYXRlRm9ybWF0dGluZ01lbnVQb3NpdGlvbigpIHsKICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgaWYgKHRoaXMuc2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKHRoaXMuc2hhZG93Um9vdCk7CiAgICAgIGNvbnN0IGJsb2NrV3JhcHBlcnMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5ibG9jay13cmFwcGVyIik7CiAgICAgIGJsb2NrV3JhcHBlcnM/LmZvckVhY2goKHdyYXBwZXIpID0+IHsKICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXIucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50Py5zaGFkb3dSb290KSB7CiAgICAgICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGNvbnN0IGNvb3JkcyA9IFd5c2l3eWdGb3JtYXR0aW5nLmdldFNlbGVjdGlvbkNvb3JkaW5hdGVzKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgaWYgKGNvb3JkcykgewogICAgICAgIHRoaXMuZm9ybWF0dGluZ01lbnUuc2hvdyh7IHg6IGNvb3Jkcy54LCB5OiBjb29yZHMueSB9LCBhc3luYyAoY29tbWFuZCkgPT4gYXdhaXQgdGhpcy5hcHBseUZvcm1hdChjb21tYW5kKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgIH0KICAgIH0KICAgIGhpZGVGb3JtYXR0aW5nTWVudSgpIHsKICAgICAgdGhpcy5mb3JtYXR0aW5nTWVudS5oaWRlKCk7CiAgICAgIHRoaXMuc2VsZWN0ZWRUZXh0ID0gIiI7CiAgICB9CiAgICBhc3luYyBhcHBseUZvcm1hdChjb21tYW5kKSB7CiAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QpCiAgICAgICAgc2hhZG93Um9vdHMucHVzaCh0aGlzLnNoYWRvd1Jvb3QpOwogICAgICBjb25zdCBibG9ja1dyYXBwZXJzID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpOwogICAgICBibG9ja1dyYXBwZXJzPy5mb3JFYWNoKCh3cmFwcGVyKSA9PiB7CiAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmIChibG9ja0NvbXBvbmVudD8uc2hhZG93Um9vdCkgewogICAgICAgICAgc2hhZG93Um9vdHMucHVzaChibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKQogICAgICAgIHJldHVybjsKICAgICAgbGV0IHRhcmdldEJsb2NrOwogICAgICBsZXQgdGFyZ2V0QmxvY2tDb21wb25lbnQ7CiAgICAgIGNvbnN0IHdyYXBwZXJzID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5ibG9jay13cmFwcGVyIik7CiAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHdyYXBwZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICBjb25zdCB3cmFwcGVyID0gd3JhcHBlcnNbaTExXTsKICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXIucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50Py5zaGFkb3dSb290KSB7CiAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgICBpZiAoYmxvY2sgJiYgKGJsb2NrLmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpIHx8IGJsb2NrLmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uZW5kQ29udGFpbmVyKSkpIHsKICAgICAgICAgICAgY29uc3QgYmxvY2tJZCA9IHdyYXBwZXIuZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik7CiAgICAgICAgICAgIHRhcmdldEJsb2NrID0gdGhpcy5ibG9ja3MuZmluZCgoYjUpID0+IGI1LmlkID09PSBibG9ja0lkKTsKICAgICAgICAgICAgdGFyZ2V0QmxvY2tDb21wb25lbnQgPSBibG9ja0NvbXBvbmVudDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghdGFyZ2V0QmxvY2sgfHwgIXRhcmdldEJsb2NrQ29tcG9uZW50KQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgcmFuZ2UyID0gV3lzaXd5Z1NlbGVjdGlvbi5jcmVhdGVSYW5nZUZyb21JbmZvKHNlbGVjdGlvbkluZm8pOwogICAgICBpZiAoY29tbWFuZCA9PT0gImxpbmsiKSB7CiAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgdGhpcy5zaG93TGlua0RpYWxvZygpOwogICAgICAgIGlmICghdXJsKSB7CiAgICAgICAgICB0YXJnZXRCbG9ja0NvbXBvbmVudC5mb2N1cygpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBXeXNpd3lnRm9ybWF0dGluZy5hcHBseUZvcm1hdChjb21tYW5kLCB1cmwsIHJhbmdlMiwgc2hhZG93Um9vdHMpOwogICAgICB9IGVsc2UgewogICAgICAgIFd5c2l3eWdGb3JtYXR0aW5nLmFwcGx5Rm9ybWF0KGNvbW1hbmQsIHZvaWQgMCwgcmFuZ2UyLCBzaGFkb3dSb290cyk7CiAgICAgIH0KICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCAxMCkpOwogICAgICB0YXJnZXRCbG9jay5jb250ZW50ID0gdGFyZ2V0QmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpOwogICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgIHRhcmdldEJsb2NrQ29tcG9uZW50LmZvY3VzKCk7CiAgICAgIGlmIChjb21tYW5kID09PSAibGluayIpIHsKICAgICAgICB0aGlzLmhpZGVGb3JtYXR0aW5nTWVudSgpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHNob3dMaW5rRGlhbG9nKCkgewogICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiB7CiAgICAgICAgbGV0IGxpbmtVcmwgPSBudWxsOwogICAgICAgIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICAgIGhlYWRpbmc6ICJBZGQgTGluayIsCiAgICAgICAgICBjb250ZW50OiB1M2AKICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgLmxpbmstaW5wdXQgewogICAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWRlZXMtY29sb3ItbGluZS1icmlnaHQpOwogICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kZWVzLWNvbG9yLWlucHV0KTsKICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tZGVlcy1jb2xvci10ZXh0KTsKICAgICAgICAgICAgICBtYXJnaW46IDE2cHggMDsKICAgICAgICAgICAgfQogICAgICAgICAgICAubGluay1pbnB1dDpmb2N1cyB7CiAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWRlZXMtY29sb3ItcHJpbWFyeSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgICA8aW5wdXQgCiAgICAgICAgICAgIGNsYXNzPSJsaW5rLWlucHV0IiAKICAgICAgICAgICAgdHlwZT0idXJsIiAKICAgICAgICAgICAgcGxhY2Vob2xkZXI9Imh0dHBzOi8vZXhhbXBsZS5jb20iIAogICAgICAgICAgICBAa2V5ZG93bj0iJHsoZTExKSA9PiB7CiAgICAgICAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICAgICAgICAgIGxpbmtVcmwgPSBpbnB1dC52YWx1ZTsKICAgICAgICAgICAgICBjb25zdCBtb2RhbCA9IGlucHV0LmNsb3Nlc3QoImRlZXMtbW9kYWwiKTsKICAgICAgICAgICAgICBpZiAobW9kYWwpIHsKICAgICAgICAgICAgICAgIGNvbnN0IG9rQnV0dG9uID0gbW9kYWwuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJvdHRvbUJ1dHRvbjpsYXN0LWNoaWxkIik7CiAgICAgICAgICAgICAgICBpZiAob2tCdXR0b24pCiAgICAgICAgICAgICAgICAgIG9rQnV0dG9uLmNsaWNrKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9fSIKICAgICAgICAgICAgQGlucHV0PSIkeyhlMTEpID0+IHsKICAgICAgICAgICAgbGlua1VybCA9IGUxMS50YXJnZXQudmFsdWU7CiAgICAgICAgICB9fSIKICAgICAgICAgIC8+CiAgICAgICAgYCwKICAgICAgICAgIG1lbnVPcHRpb25zOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiQ2FuY2VsIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgICAgICAgcmVzb2x2ZTIobnVsbCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIkFkZCBMaW5rIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgICAgICAgcmVzb2x2ZTIobGlua1VybCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSk7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImRlZXMtbW9kYWwgLmxpbmstaW5wdXQiKTsKICAgICAgICAgIGlmIChpbnB1dCkgewogICAgICAgICAgICBpbnB1dC5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0sIDEwMCk7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBVbmRvIHRoZSBsYXN0IGFjdGlvbgogICAgICovCiAgICB1bmRvKCkgewogICAgICBjb25zdCBzdGF0ZTE0ID0gdGhpcy5oaXN0b3J5LnVuZG8oKTsKICAgICAgaWYgKHN0YXRlMTQpIHsKICAgICAgICB0aGlzLnJlc3RvcmVTdGF0ZShzdGF0ZTE0KTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBSZWRvIHRoZSBuZXh0IGFjdGlvbgogICAgICovCiAgICByZWRvKCkgewogICAgICBjb25zdCBzdGF0ZTE0ID0gdGhpcy5oaXN0b3J5LnJlZG8oKTsKICAgICAgaWYgKHN0YXRlMTQpIHsKICAgICAgICB0aGlzLnJlc3RvcmVTdGF0ZShzdGF0ZTE0KTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBSZXN0b3JlIGVkaXRvciBzdGF0ZSBmcm9tIGhpc3RvcnkKICAgICAqLwogICAgcmVzdG9yZVN0YXRlKHN0YXRlMTQpIHsKICAgICAgdGhpcy5ibG9ja3MgPSBzdGF0ZTE0LmJsb2NrczsKICAgICAgdGhpcy5zZWxlY3RlZEJsb2NrSWQgPSBzdGF0ZTE0LnNlbGVjdGVkQmxvY2tJZDsKICAgICAgdGhpcy5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCk7CiAgICAgIGlmIChzdGF0ZTE0LmN1cnNvclBvc2l0aW9uKSB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3N0YXRlMTQuY3Vyc29yUG9zaXRpb24uYmxvY2tJZH0iXWApOwogICAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50KSB7CiAgICAgICAgICAgIGJsb2NrQ29tcG9uZW50LmZvY3VzV2l0aEN1cnNvcihzdGF0ZTE0LmN1cnNvclBvc2l0aW9uLm9mZnNldCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgNTApOwogICAgICB9IGVsc2UgaWYgKHN0YXRlMTQuc2VsZWN0ZWRCbG9ja0lkKSB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKHN0YXRlMTQuc2VsZWN0ZWRCbG9ja0lkKTsKICAgICAgICB9LCA1MCk7CiAgICAgIH0KICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpOwogICAgfQogICAgLyoqCiAgICAgKiBTYXZlIGN1cnJlbnQgc3RhdGUgdG8gaGlzdG9yeSB3aXRoIGN1cnNvciBwb3NpdGlvbgogICAgICovCiAgICBzYXZlVG9IaXN0b3J5KGRlYm91bmNlNCA9IHRydWUpIHsKICAgICAgbGV0IGN1cnNvclBvc2l0aW9uOwogICAgICBpZiAodGhpcy5zZWxlY3RlZEJsb2NrSWQpIHsKICAgICAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3RoaXMuc2VsZWN0ZWRCbG9ja0lkfSJdYCk7CiAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmIChibG9ja0NvbXBvbmVudCAmJiB0eXBlb2YgYmxvY2tDb21wb25lbnQuZ2V0Q3Vyc29yUG9zaXRpb24gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgICAgICAgaWYgKGVkaXRhYmxlRWxlbWVudCkgewogICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBibG9ja0NvbXBvbmVudC5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUVsZW1lbnQpOwogICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgY3Vyc29yUG9zaXRpb24gPSB7CiAgICAgICAgICAgICAgICBibG9ja0lkOiB0aGlzLnNlbGVjdGVkQmxvY2tJZCwKICAgICAgICAgICAgICAgIG9mZnNldAogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGRlYm91bmNlNCkgewogICAgICAgIHRoaXMuaGlzdG9yeS5zYXZlU3RhdGUodGhpcy5ibG9ja3MsIHRoaXMuc2VsZWN0ZWRCbG9ja0lkLCBjdXJzb3JQb3NpdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5oaXN0b3J5LnNhdmVDaGVja3BvaW50KHRoaXMuYmxvY2tzLCB0aGlzLnNlbGVjdGVkQmxvY2tJZCwgY3Vyc29yUG9zaXRpb24pOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczY1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSW5wdXRXeXNpd3lnMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvcHJvZmlsZXBpY3R1cmUvcHJvZmlsZXBpY3R1cmUuY3JvcHBlci5qcwp2YXIgSW1hZ2VDcm9wcGVyID0gY2xhc3MgewogIG9wdGlvbnM7CiAgY2FudmFzOwogIGN0eDsKICBpbWc7CiAgb3ZlcmxheUNhbnZhczsKICBvdmVybGF5Q3R4OwogIC8vIENyb3AgYXJlYSBwcm9wZXJ0aWVzCiAgY3JvcFggPSAwOwogIGNyb3BZID0gMDsKICBjcm9wU2l6ZSA9IDIwMDsKICBtaW5Dcm9wU2l6ZSA9IDUwOwogIC8vIEludGVyYWN0aW9uIHN0YXRlCiAgaXNEcmFnZ2luZyA9IGZhbHNlOwogIGlzUmVzaXppbmcgPSBmYWxzZTsKICBkcmFnU3RhcnRYID0gMDsKICBkcmFnU3RhcnRZID0gMDsKICByZXNpemVIYW5kbGUgPSAiIjsKICAvLyBJbWFnZSBwcm9wZXJ0aWVzCiAgaW1hZ2VTY2FsZSA9IDE7CiAgaW1hZ2VPZmZzZXRYID0gMDsKICBpbWFnZU9mZnNldFkgPSAwOwogIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHsKICAgIHRoaXMub3B0aW9ucyA9IHsKICAgICAgbWluU2l6ZTogNTAsCiAgICAgIG91dHB1dFNpemU6IDgwMCwKICAgICAgLy8gSGlnaGVyIGRlZmF1bHQgcmVzb2x1dGlvbgogICAgICBvdXRwdXRRdWFsaXR5OiAwLjk1LAogICAgICAvLyBIaWdoZXIgcXVhbGl0eQogICAgICAuLi5vcHRpb25zCiAgICB9OwogICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgdGhpcy5vdmVybGF5Q3R4ID0gdGhpcy5vdmVybGF5Q2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICB0aGlzLmltZyA9IG5ldyBJbWFnZSgpOwogIH0KICBhc3luYyBpbml0aWFsaXplKCkgewogICAgYXdhaXQgdGhpcy5sb2FkSW1hZ2UoKTsKICAgIHRoaXMuc2V0dXBDYW52YXNlcygpOwogICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKCk7CiAgICB0aGlzLnJlbmRlcigpOwogIH0KICBhc3luYyBsb2FkSW1hZ2UoKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QpID0+IHsKICAgICAgdGhpcy5pbWcub25sb2FkID0gKCkgPT4gcmVzb2x2ZTIoKTsKICAgICAgdGhpcy5pbWcub25lcnJvciA9IHJlamVjdDsKICAgICAgdGhpcy5pbWcuc3JjID0gdGhpcy5vcHRpb25zLmltYWdlOwogICAgfSk7CiAgfQogIHNldHVwQ2FudmFzZXMoKSB7CiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLm9wdGlvbnMuY29udGFpbmVyOwogICAgY29uc3QgY29udGFpbmVyU2l6ZSA9IE1hdGgubWluKGNvbnRhaW5lci5jbGllbnRXaWR0aCwgY29udGFpbmVyLmNsaWVudEhlaWdodCk7CiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IGNvbnRhaW5lclNpemU7CiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBjb250YWluZXJTaXplOwogICAgdGhpcy5jYW52YXMuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICB0aGlzLmNhbnZhcy5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICB0aGlzLmNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICB0aGlzLmNhbnZhcy5zdHlsZS50b3AgPSAiMCI7CiAgICB0aGlzLmNhbnZhcy5zdHlsZS5sZWZ0ID0gIjAiOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLndpZHRoID0gY29udGFpbmVyU2l6ZTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5oZWlnaHQgPSBjb250YWluZXJTaXplOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICB0aGlzLm92ZXJsYXlDYW52YXMuc3R5bGUudG9wID0gIjAiOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmxlZnQgPSAiMCI7CiAgICB0aGlzLm92ZXJsYXlDYW52YXMuc3R5bGUuY3Vyc29yID0gIm1vdmUiOwogICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuY2FudmFzKTsKICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLm92ZXJsYXlDYW52YXMpOwogICAgY29uc3Qgc2NhbGUgPSBNYXRoLm1pbihjb250YWluZXJTaXplIC8gdGhpcy5pbWcud2lkdGgsIGNvbnRhaW5lclNpemUgLyB0aGlzLmltZy5oZWlnaHQpOwogICAgdGhpcy5pbWFnZVNjYWxlID0gc2NhbGU7CiAgICB0aGlzLmltYWdlT2Zmc2V0WCA9IChjb250YWluZXJTaXplIC0gdGhpcy5pbWcud2lkdGggKiBzY2FsZSkgLyAyOwogICAgdGhpcy5pbWFnZU9mZnNldFkgPSAoY29udGFpbmVyU2l6ZSAtIHRoaXMuaW1nLmhlaWdodCAqIHNjYWxlKSAvIDI7CiAgICBjb25zdCBzY2FsZWRJbWFnZVdpZHRoID0gdGhpcy5pbWcud2lkdGggKiBzY2FsZTsKICAgIGNvbnN0IHNjYWxlZEltYWdlSGVpZ2h0ID0gdGhpcy5pbWcuaGVpZ2h0ICogc2NhbGU7CiAgICBjb25zdCBtYXhDcm9wU2l6ZSA9IE1hdGgubWluKHNjYWxlZEltYWdlV2lkdGgsIHNjYWxlZEltYWdlSGVpZ2h0LCBjb250YWluZXJTaXplICogMC44KTsKICAgIHRoaXMuY3JvcFNpemUgPSBtYXhDcm9wU2l6ZSAqIDAuODsKICAgIHRoaXMuY3JvcFggPSAoY29udGFpbmVyU2l6ZSAtIHRoaXMuY3JvcFNpemUpIC8gMjsKICAgIHRoaXMuY3JvcFkgPSAoY29udGFpbmVyU2l6ZSAtIHRoaXMuY3JvcFNpemUpIC8gMjsKICB9CiAgc2V0dXBFdmVudExpc3RlbmVycygpIHsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLmhhbmRsZU1vdXNlRG93bi5iaW5kKHRoaXMpKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZU1vdXNlTW92ZS5iaW5kKHRoaXMpKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5oYW5kbGVNb3VzZVVwLmJpbmQodGhpcykpOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCB0aGlzLmhhbmRsZU1vdXNlVXAuYmluZCh0aGlzKSk7CiAgICB0aGlzLm92ZXJsYXlDYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsIHRoaXMuaGFuZGxlVG91Y2hTdGFydC5iaW5kKHRoaXMpKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCB0aGlzLmhhbmRsZVRvdWNoTW92ZS5iaW5kKHRoaXMpKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsIHRoaXMuaGFuZGxlVG91Y2hFbmQuYmluZCh0aGlzKSk7CiAgfQogIGhhbmRsZU1vdXNlRG93bihlMTEpIHsKICAgIGNvbnN0IHJlY3QgPSB0aGlzLm92ZXJsYXlDYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICBjb25zdCB4MyA9IChlMTEuY2xpZW50WCAtIHJlY3QubGVmdCkgKiAodGhpcy5vdmVybGF5Q2FudmFzLndpZHRoIC8gcmVjdC53aWR0aCk7CiAgICBjb25zdCB5NSA9IChlMTEuY2xpZW50WSAtIHJlY3QudG9wKSAqICh0aGlzLm92ZXJsYXlDYW52YXMuaGVpZ2h0IC8gcmVjdC5oZWlnaHQpOwogICAgY29uc3QgaGFuZGxlMyA9IHRoaXMuZ2V0UmVzaXplSGFuZGxlKHgzLCB5NSk7CiAgICBpZiAoaGFuZGxlMykgewogICAgICB0aGlzLmlzUmVzaXppbmcgPSB0cnVlOwogICAgICB0aGlzLnJlc2l6ZUhhbmRsZSA9IGhhbmRsZTM7CiAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbnNpZGVDcm9wQXJlYSh4MywgeTUpKSB7CiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7CiAgICB9CiAgICB0aGlzLmRyYWdTdGFydFggPSB4MzsKICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IHk1OwogIH0KICBoYW5kbGVNb3VzZU1vdmUoZTExKSB7CiAgICBjb25zdCByZWN0ID0gdGhpcy5vdmVybGF5Q2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgY29uc3QgeDMgPSAoZTExLmNsaWVudFggLSByZWN0LmxlZnQpICogKHRoaXMub3ZlcmxheUNhbnZhcy53aWR0aCAvIHJlY3Qud2lkdGgpOwogICAgY29uc3QgeTUgPSAoZTExLmNsaWVudFkgLSByZWN0LnRvcCkgKiAodGhpcy5vdmVybGF5Q2FudmFzLmhlaWdodCAvIHJlY3QuaGVpZ2h0KTsKICAgIGNvbnN0IGhhbmRsZTMgPSB0aGlzLmdldFJlc2l6ZUhhbmRsZSh4MywgeTUpOwogICAgaWYgKGhhbmRsZTMpIHsKICAgICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmN1cnNvciA9IHRoaXMuZ2V0UmVzaXplQ3Vyc29yKGhhbmRsZTMpOwogICAgfSBlbHNlIGlmICh0aGlzLmlzSW5zaWRlQ3JvcEFyZWEoeDMsIHk1KSkgewogICAgICB0aGlzLm92ZXJsYXlDYW52YXMuc3R5bGUuY3Vyc29yID0gIm1vdmUiOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmN1cnNvciA9ICJkZWZhdWx0IjsKICAgIH0KICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcpIHsKICAgICAgY29uc3QgZHggPSB4MyAtIHRoaXMuZHJhZ1N0YXJ0WDsKICAgICAgY29uc3QgZHkgPSB5NSAtIHRoaXMuZHJhZ1N0YXJ0WTsKICAgICAgY29uc3QgbWluWCA9IHRoaXMuaW1hZ2VPZmZzZXRYOwogICAgICBjb25zdCBtYXhYID0gdGhpcy5pbWFnZU9mZnNldFggKyB0aGlzLmltZy53aWR0aCAqIHRoaXMuaW1hZ2VTY2FsZSAtIHRoaXMuY3JvcFNpemU7CiAgICAgIGNvbnN0IG1pblkgPSB0aGlzLmltYWdlT2Zmc2V0WTsKICAgICAgY29uc3QgbWF4WSA9IHRoaXMuaW1hZ2VPZmZzZXRZICsgdGhpcy5pbWcuaGVpZ2h0ICogdGhpcy5pbWFnZVNjYWxlIC0gdGhpcy5jcm9wU2l6ZTsKICAgICAgdGhpcy5jcm9wWCA9IE1hdGgubWF4KG1pblgsIE1hdGgubWluKG1heFgsIHRoaXMuY3JvcFggKyBkeCkpOwogICAgICB0aGlzLmNyb3BZID0gTWF0aC5tYXgobWluWSwgTWF0aC5taW4obWF4WSwgdGhpcy5jcm9wWSArIGR5KSk7CiAgICAgIHRoaXMuZHJhZ1N0YXJ0WCA9IHgzOwogICAgICB0aGlzLmRyYWdTdGFydFkgPSB5NTsKICAgICAgdGhpcy5yZW5kZXIoKTsKICAgIH0KICAgIGlmICh0aGlzLmlzUmVzaXppbmcpIHsKICAgICAgdGhpcy5oYW5kbGVSZXNpemUoeDMsIHk1KTsKICAgICAgdGhpcy5kcmFnU3RhcnRYID0geDM7CiAgICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IHk1OwogICAgICB0aGlzLnJlbmRlcigpOwogICAgfQogIH0KICBoYW5kbGVNb3VzZVVwKCkgewogICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7CiAgICB0aGlzLmlzUmVzaXppbmcgPSBmYWxzZTsKICAgIHRoaXMucmVzaXplSGFuZGxlID0gIiI7CiAgfQogIGhhbmRsZVRvdWNoU3RhcnQoZTExKSB7CiAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgIGNvbnN0IHRvdWNoID0gZTExLnRvdWNoZXNbMF07CiAgICBjb25zdCBtb3VzZUV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoIm1vdXNlZG93biIsIHsKICAgICAgY2xpZW50WDogdG91Y2guY2xpZW50WCwKICAgICAgY2xpZW50WTogdG91Y2guY2xpZW50WQogICAgfSk7CiAgICB0aGlzLmhhbmRsZU1vdXNlRG93bihtb3VzZUV2ZW50KTsKICB9CiAgaGFuZGxlVG91Y2hNb3ZlKGUxMSkgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICBjb25zdCB0b3VjaCA9IGUxMS50b3VjaGVzWzBdOwogICAgY29uc3QgbW91c2VFdmVudCA9IG5ldyBNb3VzZUV2ZW50KCJtb3VzZW1vdmUiLCB7CiAgICAgIGNsaWVudFg6IHRvdWNoLmNsaWVudFgsCiAgICAgIGNsaWVudFk6IHRvdWNoLmNsaWVudFkKICAgIH0pOwogICAgdGhpcy5oYW5kbGVNb3VzZU1vdmUobW91c2VFdmVudCk7CiAgfQogIGhhbmRsZVRvdWNoRW5kKGUxMSkgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICB0aGlzLmhhbmRsZU1vdXNlVXAoKTsKICB9CiAgZ2V0UmVzaXplSGFuZGxlKHgzLCB5NSkgewogICAgY29uc3QgaGFuZGxlU2l6ZSA9IDIwOwogICAgY29uc3QgaGFuZGxlcyA9IHsKICAgICAgIm53IjogeyB4OiB0aGlzLmNyb3BYLCB5OiB0aGlzLmNyb3BZIH0sCiAgICAgICJuZSI6IHsgeDogdGhpcy5jcm9wWCArIHRoaXMuY3JvcFNpemUsIHk6IHRoaXMuY3JvcFkgfSwKICAgICAgInN3IjogeyB4OiB0aGlzLmNyb3BYLCB5OiB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSB9LAogICAgICAic2UiOiB7IHg6IHRoaXMuY3JvcFggKyB0aGlzLmNyb3BTaXplLCB5OiB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSB9CiAgICB9OwogICAgZm9yIChjb25zdCBba2V5MiwgcG9zXSBvZiBPYmplY3QuZW50cmllcyhoYW5kbGVzKSkgewogICAgICBpZiAoTWF0aC5hYnMoeDMgLSBwb3MueCkgPCBoYW5kbGVTaXplICYmIE1hdGguYWJzKHk1IC0gcG9zLnkpIDwgaGFuZGxlU2l6ZSkgewogICAgICAgIHJldHVybiBrZXkyOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gIiI7CiAgfQogIGdldFJlc2l6ZUN1cnNvcihoYW5kbGUzKSB7CiAgICBjb25zdCBjdXJzb3JzID0gewogICAgICAibnciOiAibnctcmVzaXplIiwKICAgICAgIm5lIjogIm5lLXJlc2l6ZSIsCiAgICAgICJzdyI6ICJzdy1yZXNpemUiLAogICAgICAic2UiOiAic2UtcmVzaXplIgogICAgfTsKICAgIHJldHVybiBjdXJzb3JzW2hhbmRsZTNdIHx8ICJkZWZhdWx0IjsKICB9CiAgaXNJbnNpZGVDcm9wQXJlYSh4MywgeTUpIHsKICAgIHJldHVybiB4MyA+PSB0aGlzLmNyb3BYICYmIHgzIDw9IHRoaXMuY3JvcFggKyB0aGlzLmNyb3BTaXplICYmIHk1ID49IHRoaXMuY3JvcFkgJiYgeTUgPD0gdGhpcy5jcm9wWSArIHRoaXMuY3JvcFNpemU7CiAgfQogIGhhbmRsZVJlc2l6ZSh4MywgeTUpIHsKICAgIGNvbnN0IGR4ID0geDMgLSB0aGlzLmRyYWdTdGFydFg7CiAgICBjb25zdCBkeSA9IHk1IC0gdGhpcy5kcmFnU3RhcnRZOwogICAgY29uc3QgaW1nTGVmdCA9IHRoaXMuaW1hZ2VPZmZzZXRYOwogICAgY29uc3QgaW1nVG9wID0gdGhpcy5pbWFnZU9mZnNldFk7CiAgICBjb25zdCBpbWdSaWdodCA9IHRoaXMuaW1hZ2VPZmZzZXRYICsgdGhpcy5pbWcud2lkdGggKiB0aGlzLmltYWdlU2NhbGU7CiAgICBjb25zdCBpbWdCb3R0b20gPSB0aGlzLmltYWdlT2Zmc2V0WSArIHRoaXMuaW1nLmhlaWdodCAqIHRoaXMuaW1hZ2VTY2FsZTsKICAgIHN3aXRjaCAodGhpcy5yZXNpemVIYW5kbGUpIHsKICAgICAgY2FzZSAic2UiOgogICAgICAgIHRoaXMuY3JvcFNpemUgPSBNYXRoLm1heCh0aGlzLm1pbkNyb3BTaXplLCBNYXRoLm1pbih0aGlzLmNyb3BTaXplICsgTWF0aC5tYXgoZHgsIGR5KSwgTWF0aC5taW4oaW1nUmlnaHQgLSB0aGlzLmNyb3BYLCBpbWdCb3R0b20gLSB0aGlzLmNyb3BZKSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJudyI6CiAgICAgICAgY29uc3QgbmV3U2l6ZSA9IE1hdGgubWF4KHRoaXMubWluQ3JvcFNpemUsIHRoaXMuY3JvcFNpemUgLSBNYXRoLm1heChkeCwgZHkpKTsKICAgICAgICBjb25zdCBzaXplRGlmZiA9IHRoaXMuY3JvcFNpemUgLSBuZXdTaXplOwogICAgICAgIGNvbnN0IG5ld1ggPSB0aGlzLmNyb3BYICsgc2l6ZURpZmY7CiAgICAgICAgY29uc3QgbmV3WSA9IHRoaXMuY3JvcFkgKyBzaXplRGlmZjsKICAgICAgICBpZiAobmV3WCA+PSBpbWdMZWZ0ICYmIG5ld1kgPj0gaW1nVG9wKSB7CiAgICAgICAgICB0aGlzLmNyb3BYID0gbmV3WDsKICAgICAgICAgIHRoaXMuY3JvcFkgPSBuZXdZOwogICAgICAgICAgdGhpcy5jcm9wU2l6ZSA9IG5ld1NpemU7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJuZSI6CiAgICAgICAgY29uc3QgbmVTaXplRHggPSBNYXRoLm1heChkeCwgLWR5KTsKICAgICAgICBjb25zdCBuZU5ld1NpemUgPSBNYXRoLm1heCh0aGlzLm1pbkNyb3BTaXplLCB0aGlzLmNyb3BTaXplICsgbmVTaXplRHgpOwogICAgICAgIGNvbnN0IG5lU2l6ZURpZmYgPSBuZU5ld1NpemUgLSB0aGlzLmNyb3BTaXplOwogICAgICAgIGNvbnN0IG5lTmV3WSA9IHRoaXMuY3JvcFkgLSBuZVNpemVEaWZmOwogICAgICAgIGlmIChuZU5ld1kgPj0gaW1nVG9wICYmIHRoaXMuY3JvcFggKyBuZU5ld1NpemUgPD0gaW1nUmlnaHQpIHsKICAgICAgICAgIHRoaXMuY3JvcFkgPSBuZU5ld1k7CiAgICAgICAgICB0aGlzLmNyb3BTaXplID0gbmVOZXdTaXplOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSAic3ciOgogICAgICAgIGNvbnN0IHN3U2l6ZUR4ID0gTWF0aC5tYXgoLWR4LCBkeSk7CiAgICAgICAgY29uc3Qgc3dOZXdTaXplID0gTWF0aC5tYXgodGhpcy5taW5Dcm9wU2l6ZSwgdGhpcy5jcm9wU2l6ZSArIHN3U2l6ZUR4KTsKICAgICAgICBjb25zdCBzd1NpemVEaWZmID0gc3dOZXdTaXplIC0gdGhpcy5jcm9wU2l6ZTsKICAgICAgICBjb25zdCBzd05ld1ggPSB0aGlzLmNyb3BYIC0gc3dTaXplRGlmZjsKICAgICAgICBpZiAoc3dOZXdYID49IGltZ0xlZnQgJiYgdGhpcy5jcm9wWSArIHN3TmV3U2l6ZSA8PSBpbWdCb3R0b20pIHsKICAgICAgICAgIHRoaXMuY3JvcFggPSBzd05ld1g7CiAgICAgICAgICB0aGlzLmNyb3BTaXplID0gc3dOZXdTaXplOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgIH0KICB9CiAgcmVuZGVyKCkgewogICAgdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpOwogICAgdGhpcy5vdmVybGF5Q3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLm92ZXJsYXlDYW52YXMud2lkdGgsIHRoaXMub3ZlcmxheUNhbnZhcy5oZWlnaHQpOwogICAgdGhpcy5jdHguZmlsbFN0eWxlID0gIiMwMDAwMDAiOwogICAgdGhpcy5jdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7CiAgICB0aGlzLmN0eC5kcmF3SW1hZ2UodGhpcy5pbWcsIHRoaXMuaW1hZ2VPZmZzZXRYLCB0aGlzLmltYWdlT2Zmc2V0WSwgdGhpcy5pbWcud2lkdGggKiB0aGlzLmltYWdlU2NhbGUsIHRoaXMuaW1nLmhlaWdodCAqIHRoaXMuaW1hZ2VTY2FsZSk7CiAgICB0aGlzLm92ZXJsYXlDdHguZmlsbFN0eWxlID0gInJnYmEoMCwgMCwgMCwgMC41KSI7CiAgICB0aGlzLm92ZXJsYXlDdHguZmlsbFJlY3QodGhpcy5pbWFnZU9mZnNldFgsIHRoaXMuaW1hZ2VPZmZzZXRZLCB0aGlzLmltZy53aWR0aCAqIHRoaXMuaW1hZ2VTY2FsZSwgdGhpcy5pbWcuaGVpZ2h0ICogdGhpcy5pbWFnZVNjYWxlKTsKICAgIHRoaXMub3ZlcmxheUN0eC5zYXZlKCk7CiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlID09PSAicm91bmQiKSB7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5iZWdpblBhdGgoKTsKICAgICAgdGhpcy5vdmVybGF5Q3R4LmFyYyh0aGlzLmNyb3BYICsgdGhpcy5jcm9wU2l6ZSAvIDIsIHRoaXMuY3JvcFkgKyB0aGlzLmNyb3BTaXplIC8gMiwgdGhpcy5jcm9wU2l6ZSAvIDIsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgdGhpcy5vdmVybGF5Q3R4LmNsaXAoKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5iZWdpblBhdGgoKTsKICAgICAgdGhpcy5vdmVybGF5Q3R4LnJlY3QodGhpcy5jcm9wWCwgdGhpcy5jcm9wWSwgdGhpcy5jcm9wU2l6ZSwgdGhpcy5jcm9wU2l6ZSk7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5jbGlwKCk7CiAgICB9CiAgICB0aGlzLm92ZXJsYXlDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMub3ZlcmxheUNhbnZhcy53aWR0aCwgdGhpcy5vdmVybGF5Q2FudmFzLmhlaWdodCk7CiAgICB0aGlzLm92ZXJsYXlDdHgucmVzdG9yZSgpOwogICAgdGhpcy5vdmVybGF5Q3R4LnN0cm9rZVN0eWxlID0gIndoaXRlIjsKICAgIHRoaXMub3ZlcmxheUN0eC5saW5lV2lkdGggPSAyOwogICAgaWYgKHRoaXMub3B0aW9ucy5zaGFwZSA9PT0gInJvdW5kIikgewogICAgICB0aGlzLm92ZXJsYXlDdHguYmVnaW5QYXRoKCk7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5hcmModGhpcy5jcm9wWCArIHRoaXMuY3JvcFNpemUgLyAyLCB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSAvIDIsIHRoaXMuY3JvcFNpemUgLyAyLCAwLCBNYXRoLlBJICogMik7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5zdHJva2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5zdHJva2VSZWN0KHRoaXMuY3JvcFgsIHRoaXMuY3JvcFksIHRoaXMuY3JvcFNpemUsIHRoaXMuY3JvcFNpemUpOwogICAgfQogICAgdGhpcy5kcmF3UmVzaXplSGFuZGxlcygpOwogIH0KICBkcmF3UmVzaXplSGFuZGxlcygpIHsKICAgIGNvbnN0IGhhbmRsZVNpemUgPSA4OwogICAgY29uc3QgaGFuZGxlcyA9IFsKICAgICAgeyB4OiB0aGlzLmNyb3BYLCB5OiB0aGlzLmNyb3BZIH0sCiAgICAgIHsgeDogdGhpcy5jcm9wWCArIHRoaXMuY3JvcFNpemUsIHk6IHRoaXMuY3JvcFkgfSwKICAgICAgeyB4OiB0aGlzLmNyb3BYLCB5OiB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSB9LAogICAgICB7IHg6IHRoaXMuY3JvcFggKyB0aGlzLmNyb3BTaXplLCB5OiB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSB9CiAgICBdOwogICAgdGhpcy5vdmVybGF5Q3R4LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CiAgICBoYW5kbGVzLmZvckVhY2goKGhhbmRsZTMpID0+IHsKICAgICAgdGhpcy5vdmVybGF5Q3R4LmJlZ2luUGF0aCgpOwogICAgICB0aGlzLm92ZXJsYXlDdHguYXJjKGhhbmRsZTMueCwgaGFuZGxlMy55LCBoYW5kbGVTaXplLCAwLCBNYXRoLlBJICogMik7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5maWxsKCk7CiAgICB9KTsKICB9CiAgYXN5bmMgZ2V0Q3JvcHBlZEltYWdlKCkgewogICAgY29uc3QgY3JvcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgY29uc3QgY3JvcEN0eCA9IGNyb3BDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgIGNvbnN0IHNjYWxlID0gMSAvIHRoaXMuaW1hZ2VTY2FsZTsKICAgIGNvbnN0IG9yaWdpbmFsQ3JvcFNpemUgPSB0aGlzLmNyb3BTaXplICogc2NhbGU7CiAgICBjb25zdCBvdXRwdXRTaXplID0gdGhpcy5vcHRpb25zLm91dHB1dFNpemU7CiAgICBpZiAob3V0cHV0U2l6ZSA+IG9yaWdpbmFsQ3JvcFNpemUpIHsKICAgICAgY29uc29sZS5pbmZvKGBQcm9maWxlIHBpY3R1cmU6IFVwc2NhbGluZyBmcm9tICR7TWF0aC5yb3VuZChvcmlnaW5hbENyb3BTaXplKX1weCB0byAke291dHB1dFNpemV9cHhgKTsKICAgIH0KICAgIGNyb3BDYW52YXMud2lkdGggPSBvdXRwdXRTaXplOwogICAgY3JvcENhbnZhcy5oZWlnaHQgPSBvdXRwdXRTaXplOwogICAgY29uc3Qgc3ggPSAodGhpcy5jcm9wWCAtIHRoaXMuaW1hZ2VPZmZzZXRYKSAqIHNjYWxlOwogICAgY29uc3Qgc3kgPSAodGhpcy5jcm9wWSAtIHRoaXMuaW1hZ2VPZmZzZXRZKSAqIHNjYWxlOwogICAgY29uc3Qgc1NpemUgPSB0aGlzLmNyb3BTaXplICogc2NhbGU7CiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlID09PSAicm91bmQiKSB7CiAgICAgIGNyb3BDdHguYmVnaW5QYXRoKCk7CiAgICAgIGNyb3BDdHguYXJjKG91dHB1dFNpemUgLyAyLCBvdXRwdXRTaXplIC8gMiwgb3V0cHV0U2l6ZSAvIDIsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgY3JvcEN0eC5jbGlwKCk7CiAgICB9CiAgICBjcm9wQ3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IHRydWU7CiAgICBjcm9wQ3R4LmltYWdlU21vb3RoaW5nUXVhbGl0eSA9ICJoaWdoIjsKICAgIGNyb3BDdHguZHJhd0ltYWdlKHRoaXMuaW1nLCBzeCwgc3ksIHNTaXplLCBzU2l6ZSwgMCwgMCwgb3V0cHV0U2l6ZSwgb3V0cHV0U2l6ZSk7CiAgICBjb25zdCBpc1BuZyA9IHRoaXMub3B0aW9ucy5pbWFnZS5pbmNsdWRlcygiaW1hZ2UvcG5nIik7CiAgICBjb25zdCBmb3JtYXQyID0gaXNQbmcgPyAiaW1hZ2UvcG5nIiA6ICJpbWFnZS9qcGVnIjsKICAgIHJldHVybiBjcm9wQ2FudmFzLnRvRGF0YVVSTChmb3JtYXQyLCB0aGlzLm9wdGlvbnMub3V0cHV0UXVhbGl0eSk7CiAgfQogIGRlc3Ryb3koKSB7CiAgICB0aGlzLmNhbnZhcy5yZW1vdmUoKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5yZW1vdmUoKTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvcHJvZmlsZXBpY3R1cmUvcHJvZmlsZXBpY3R1cmUubW9kYWwuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNjUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczY2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBQcm9maWxlUGljdHVyZU1vZGFsID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1wcm9maWxlcGljdHVyZS1tb2RhbCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2luaXRpYWxJbWFnZV9kZWNvcmF0b3JzOwogIGxldCBfaW5pdGlhbEltYWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdGlhbEltYWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaGFwZV9kZWNvcmF0b3JzOwogIGxldCBfc2hhcGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaGFwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0cHV0U2l6ZV9kZWNvcmF0b3JzOwogIGxldCBfb3V0cHV0U2l6ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dHB1dFNpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dHB1dFF1YWxpdHlfZGVjb3JhdG9yczsKICBsZXQgX291dHB1dFF1YWxpdHlfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vdXRwdXRRdWFsaXR5X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXJyZW50U3RlcF9kZWNvcmF0b3JzOwogIGxldCBfY3VycmVudFN0ZXBfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXJyZW50U3RlcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3JvcHBlZEltYWdlX2RlY29yYXRvcnM7CiAgbGV0IF9jcm9wcGVkSW1hZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jcm9wcGVkSW1hZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzUHJvY2Vzc2luZ19kZWNvcmF0b3JzOwogIGxldCBfaXNQcm9jZXNzaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNQcm9jZXNzaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIFByb2ZpbGVQaWN0dXJlTW9kYWwyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfaW5pdGlhbEltYWdlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc2hhcGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9vdXRwdXRTaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2N1cnJlbnRTdGVwX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9jcm9wcGVkSW1hZ2VfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2lzUHJvY2Vzc2luZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfaW5pdGlhbEltYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImluaXRpYWxJbWFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdGlhbEltYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmluaXRpYWxJbWFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaW5pdGlhbEltYWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2luaXRpYWxJbWFnZV9pbml0aWFsaXplcnMsIF9pbml0aWFsSW1hZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfc2hhcGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hhcGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNoYXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNoYXBlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaGFwZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaGFwZV9pbml0aWFsaXplcnMsIF9zaGFwZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY1KHRoaXMsIG51bGwsIF9vdXRwdXRTaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm91dHB1dFNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm91dHB1dFNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3V0cHV0U2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3V0cHV0U2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vdXRwdXRTaXplX2luaXRpYWxpemVycywgX291dHB1dFNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvdXRwdXRRdWFsaXR5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvdXRwdXRRdWFsaXR5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm91dHB1dFF1YWxpdHksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm91dHB1dFF1YWxpdHkgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3V0cHV0UXVhbGl0eV9pbml0aWFsaXplcnMsIF9vdXRwdXRRdWFsaXR5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjUodGhpcywgbnVsbCwgX2N1cnJlbnRTdGVwX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRTdGVwIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXJyZW50U3RlcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50U3RlcCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VycmVudFN0ZXAgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudFN0ZXBfaW5pdGlhbGl6ZXJzLCBfY3VycmVudFN0ZXBfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfY3JvcHBlZEltYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNyb3BwZWRJbWFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3JvcHBlZEltYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNyb3BwZWRJbWFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3JvcHBlZEltYWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Nyb3BwZWRJbWFnZV9pbml0aWFsaXplcnMsIF9jcm9wcGVkSW1hZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfaXNQcm9jZXNzaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzUHJvY2Vzc2luZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNQcm9jZXNzaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzUHJvY2Vzc2luZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNQcm9jZXNzaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzUHJvY2Vzc2luZ19pbml0aWFsaXplcnMsIF9pc1Byb2Nlc3NpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIFByb2ZpbGVQaWN0dXJlTW9kYWwyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgICNpbml0aWFsSW1hZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNjYodGhpcywgX2luaXRpYWxJbWFnZV9pbml0aWFsaXplcnMsICIiKTsKICAgIGdldCBpbml0aWFsSW1hZ2UoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbml0aWFsSW1hZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpbml0aWFsSW1hZ2UodmFsdWUyKSB7CiAgICAgIHRoaXMuI2luaXRpYWxJbWFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NoYXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfaW5pdGlhbEltYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfc2hhcGVfaW5pdGlhbGl6ZXJzLCAicm91bmQiKSk7CiAgICBnZXQgc2hhcGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaGFwZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNoYXBlKHZhbHVlMikgewogICAgICB0aGlzLiNzaGFwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI291dHB1dFNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9zaGFwZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjYodGhpcywgX291dHB1dFNpemVfaW5pdGlhbGl6ZXJzLCA4MDApKTsKICAgIGdldCBvdXRwdXRTaXplKCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0cHV0U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG91dHB1dFNpemUodmFsdWUyKSB7CiAgICAgIHRoaXMuI291dHB1dFNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNvdXRwdXRRdWFsaXR5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfb3V0cHV0U2l6ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjYodGhpcywgX291dHB1dFF1YWxpdHlfaW5pdGlhbGl6ZXJzLCAwLjk1KSk7CiAgICBnZXQgb3V0cHV0UXVhbGl0eSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI291dHB1dFF1YWxpdHlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvdXRwdXRRdWFsaXR5KHZhbHVlMikgewogICAgICB0aGlzLiNvdXRwdXRRdWFsaXR5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VycmVudFN0ZXBfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9vdXRwdXRRdWFsaXR5X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfY3VycmVudFN0ZXBfaW5pdGlhbGl6ZXJzLCAiY3JvcCIpKTsKICAgIGdldCBjdXJyZW50U3RlcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRTdGVwX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VycmVudFN0ZXAodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1cnJlbnRTdGVwX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3JvcHBlZEltYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfY3VycmVudFN0ZXBfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9jcm9wcGVkSW1hZ2VfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGNyb3BwZWRJbWFnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Nyb3BwZWRJbWFnZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNyb3BwZWRJbWFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3JvcHBlZEltYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNQcm9jZXNzaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfY3JvcHBlZEltYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfaXNQcm9jZXNzaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc1Byb2Nlc3NpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc1Byb2Nlc3NpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1Byb2Nlc3NpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzUHJvY2Vzc2luZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY3JvcHBlciA9IChfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9pc1Byb2Nlc3NpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgIHdpbmRvd0xheWVyOwogICAgekluZGV4ID0gMDsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzR2Vpc3RGb250RmFtaWx5fTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB6LWluZGV4OiB2YXIoLS16LWluZGV4KTsKICAgICAgfQoKICAgICAgLm1vZGFsLWNvbnRhaW5lciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzBhMGEwYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDgpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkiKX07CiAgICAgICAgYm94LXNoYWRvdzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjAgMjBweCAyNXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDEwcHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4wNCkiLCAiMCAyMHB4IDI1cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMyksIDAgMTBweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpIil9OwogICAgICAgIHdpZHRoOiA0ODBweDsKICAgICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAzMnB4KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCkgc2NhbGUoMC45OCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBhbmltYXRpb246IG1vZGFsU2hvdyAwLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGZvcndhcmRzOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIG1vZGFsU2hvdyB7CiAgICAgICAgdG8gewogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHNjYWxlKDEpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLm1vZGFsLWhlYWRlciB7CiAgICAgICAgaGVpZ2h0OiA1MnB4OwogICAgICAgIHBhZGRpbmc6IDAgMjBweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubW9kYWwtdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAuY2xvc2UtYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDEwcHg7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5jbG9zZS1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDUpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5jbG9zZS1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA4KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICB9CgogICAgICAubW9kYWwtYm9keSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAyMHB4OwogICAgICB9CgogICAgICAuY3JvcHBlci1jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1heC13aWR0aDogMzYwcHg7CiAgICAgICAgYXNwZWN0LXJhdGlvOiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjMDAwMDAwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4wNikiLCAiaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnByZXZpZXctY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWltYWdlIHsKICAgICAgICB3aWR0aDogMTgwcHg7CiAgICAgICAgaGVpZ2h0OiAxODBweDsKICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDEwcHggMTVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCA0cHggNnB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjA1KSIsICIwIDEwcHggMTVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4zKSwgMCA0cHggNnB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpIil9OwogICAgICB9CgogICAgICAucHJldmlldy1pbWFnZS5yb3VuZCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICAucHJldmlldy1pbWFnZS5zcXVhcmUgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5zdWNjZXNzLW1lc3NhZ2UgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMTBweCAyMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTBiOTgxIiwgIiMxMGI5ODEiKX07CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGFuaW1hdGlvbjogc3VjY2Vzc1B1bHNlIDAuNHMgZWFzZS1vdXQ7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3VjY2Vzc1B1bHNlIHsKICAgICAgICAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMC45KTsgb3BhY2l0eTogMDsgfQogICAgICAgIDUwJSB7IHRyYW5zZm9ybTogc2NhbGUoMS4wMik7IH0KICAgICAgICAxMDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgb3BhY2l0eTogMTsgfQogICAgICB9CgogICAgICAubW9kYWwtZm9vdGVyIHsKICAgICAgICBwYWRkaW5nOiAyMHB4IDI0cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDYpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmluc3RydWN0aW9ucyB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIG1heC13aWR0aDogMzIwcHg7CiAgICAgIH0KCiAgICAgIC5sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSIpfTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjNjBhNWZhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IHNwaW4gMC42cyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgdG8gewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5tb2RhbC1jb250YWluZXIgewogICAgICAgICAgd2lkdGg6IGNhbGMoMTAwdncgLSAzMnB4KTsKICAgICAgICAgIG1hcmdpbjogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm1vZGFsLWJvZHkgewogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICB9CiAgICAgIH0KICAgIGAKICAgIF07CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy53aW5kb3dMYXllciA9IGF3YWl0IERlZXNXaW5kb3dMYXllci5jcmVhdGVBbmRTaG93KHsKICAgICAgICBibHVyOiB0cnVlCiAgICAgIH0pOwogICAgICB0aGlzLndpbmRvd0xheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gdGhpcy5jbG9zZSgpKTsKICAgICAgdGhpcy56SW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoIi0tei1pbmRleCIsIHRoaXMuekluZGV4LnRvU3RyaW5nKCkpOwogICAgICB6SW5kZXhSZWdpc3RyeS5yZWdpc3Rlcih0aGlzLCB0aGlzLnpJbmRleCk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgaWYgKHRoaXMuY3JvcHBlcikgewogICAgICAgIHRoaXMuY3JvcHBlci5kZXN0cm95KCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMud2luZG93TGF5ZXIpIHsKICAgICAgICBhd2FpdCB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKTsKICAgICAgfQogICAgICB6SW5kZXhSZWdpc3RyeS51bnJlZ2lzdGVyKHRoaXMpOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRhaW5lciIgQGNsaWNrPSR7KGUxMSkgPT4gZTExLnN0b3BQcm9wYWdhdGlvbigpfT4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgPGgzIGNsYXNzPSJtb2RhbC10aXRsZSI+CiAgICAgICAgICAgICR7dGhpcy5jdXJyZW50U3RlcCA9PT0gImNyb3AiID8gIkFkanVzdCBJbWFnZSIgOiAiU3VjY2VzcyJ9CiAgICAgICAgICA8L2gzPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY2xvc2UtYnV0dG9uIiBAY2xpY2s9JHt0aGlzLmNsb3NlfSB0aXRsZT0iQ2xvc2UiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTp4IiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICAke3RoaXMuY3VycmVudFN0ZXAgPT09ICJjcm9wIiA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnN0cnVjdGlvbnMiPgogICAgICAgICAgICAgIFBvc2l0aW9uIGFuZCByZXNpemUgdGhlIHNxdWFyZSB0byBzZWxlY3QgeW91ciBwcm9maWxlIGFyZWEKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNyb3BwZXItY29udGFpbmVyIiBpZD0iY3JvcHBlckNvbnRhaW5lciI+PC9kaXY+CiAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctY29udGFpbmVyIj4KICAgICAgICAgICAgICAke3RoaXMuaXNQcm9jZXNzaW5nID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5zdHJ1Y3Rpb25zIj5TYXZpbmcuLi48L2Rpdj4KICAgICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgICA8aW1nIAogICAgICAgICAgICAgICAgICBjbGFzcz0icHJldmlldy1pbWFnZSAke3RoaXMuc2hhcGV9IiAKICAgICAgICAgICAgICAgICAgc3JjPSIke3RoaXMuY3JvcHBlZEltYWdlfSIgCiAgICAgICAgICAgICAgICAgIGFsdD0iQ3JvcHBlZCBwcmV2aWV3IgogICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Y2Nlc3MtbWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOmNoZWNrIiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8c3Bhbj5Mb29raW5nIGdvb2QhPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgfQogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICAgICAgICAke3RoaXMuY3VycmVudFN0ZXAgPT09ICJjcm9wIiA/IGIyYAogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVzdHJ1Y3RpdmUiIHNpemU9InNtIiBAY2xpY2s9JHt0aGlzLmNsb3NlfT4KICAgICAgICAgICAgICBDYW5jZWwKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlZmF1bHQiIHNpemU9InNtIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUNyb3B9PgogICAgICAgICAgICAgIFNhdmUKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCA9PT0gImNyb3AiKSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplQ3JvcHBlcigpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBpbml0aWFsaXplQ3JvcHBlcigpIHsKICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCJjcm9wcGVyQ29udGFpbmVyIik7CiAgICAgIGlmICghY29udGFpbmVyKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5jcm9wcGVyID0gbmV3IEltYWdlQ3JvcHBlcih7CiAgICAgICAgY29udGFpbmVyLAogICAgICAgIGltYWdlOiB0aGlzLmluaXRpYWxJbWFnZSwKICAgICAgICBzaGFwZTogdGhpcy5zaGFwZSwKICAgICAgICBhc3BlY3RSYXRpbzogMSwKICAgICAgICBvdXRwdXRTaXplOiB0aGlzLm91dHB1dFNpemUsCiAgICAgICAgb3V0cHV0UXVhbGl0eTogdGhpcy5vdXRwdXRRdWFsaXR5CiAgICAgIH0pOwogICAgICBhd2FpdCB0aGlzLmNyb3BwZXIuaW5pdGlhbGl6ZSgpOwogICAgfQogICAgYXN5bmMgaGFuZGxlQ3JvcCgpIHsKICAgICAgaWYgKCF0aGlzLmNyb3BwZXIpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gdHJ1ZTsKICAgICAgICB0aGlzLmN1cnJlbnRTdGVwID0gInByZXZpZXciOwogICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgICAgY29uc3QgY3JvcHBlZERhdGEgPSBhd2FpdCB0aGlzLmNyb3BwZXIuZ2V0Q3JvcHBlZEltYWdlKCk7CiAgICAgICAgdGhpcy5jcm9wcGVkSW1hZ2UgPSBjcm9wcGVkRGF0YTsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDgwMCkpOwogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2F2ZSIsIHsKICAgICAgICAgIGRldGFpbDogeyBjcm9wcGVkSW1hZ2U6IHRoaXMuY3JvcHBlZEltYWdlIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICB0aGlzLmNsb3NlKCk7CiAgICAgICAgfSwgMTUwMCk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgY3JvcHBpbmcgaW1hZ2U6IiwgZXJyb3IpOwogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGNsb3NlKCkgewogICAgICB0aGlzLnJlbW92ZSgpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2NihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gUHJvZmlsZVBpY3R1cmVNb2RhbDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L3Byb2ZpbGVwaWN0dXJlL2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM0MSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDQ4cHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLW91dHB1dCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMTA1LCAyNDIsIDAuMSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICBtYXgtaGVpZ2h0OiAxMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICAuZmVhdHVyZS1saXN0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgICAgfQogICAgICAKICAgICAgLmZlYXR1cmUtbGlzdCBsaSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCByb3VuZFByb2ZpbGUgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmVbc2hhcGU9InJvdW5kIl0nKTsKICBpZiAocm91bmRQcm9maWxlKSB7CiAgICByb3VuZFByb2ZpbGUuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDsKICAgICAgY29uc29sZS5sb2coIlJvdW5kIHByb2ZpbGUgcGljdHVyZSBjaGFuZ2VkOiIsIHRhcmdldC52YWx1ZT8uc3Vic3RyaW5nKDAsIDUwKSArICIuLi4iKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJQcm9maWxlIFBpY3R1cmUgSW5wdXQifSAuc3VidGl0bGU9JHsiQmFzaWMgdXNhZ2Ugd2l0aCByb3VuZCBhbmQgc3F1YXJlIHNoYXBlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGxhYmVsPSJQcm9maWxlIFBpY3R1cmUgKFJvdW5kKSIKICAgICAgICAgICAgZGVzY3JpcHRpb249IkNsaWNrIHRvIHVwbG9hZCBvciBkcmFnICYgZHJvcCBhbiBpbWFnZSIKICAgICAgICAgICAgc2hhcGU9InJvdW5kIgogICAgICAgICAgICBzaXplPSIxMjAiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZQogICAgICAgICAgICBsYWJlbD0iUHJvZmlsZSBQaWN0dXJlIChTcXVhcmUpIgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iU3VwcG9ydHMgSlBFRywgUE5HLCBhbmQgV2ViUCBmb3JtYXRzIgogICAgICAgICAgICBzaGFwZT0ic3F1YXJlIgogICAgICAgICAgICBzaXplPSIxMjAiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBwcm9maWxlcyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZSIpOwogIHByb2ZpbGVzLmZvckVhY2goKHByb2ZpbGUpID0+IHsKICAgIHByb2ZpbGUuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDsKICAgICAgY29uc29sZS5sb2coYFByb2ZpbGUgKHNpemUgJHt0YXJnZXQuc2l6ZX0pIGNoYW5nZWRgKTsKICAgIH0pOwogIH0pOwp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlNpemUgVmFyaWF0aW9ucyJ9IC5zdWJ0aXRsZT0keyJQcm9maWxlIHBpY3R1cmVzIGluIGRpZmZlcmVudCBzaXplcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGxhYmVsPSJTbWFsbCAoODBweCkiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iODAiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZQogICAgICAgICAgICBsYWJlbD0iTWVkaXVtICgxMjBweCkiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iMTIwIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgbGFiZWw9IkxhcmdlICgxNjBweCkiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iMTYwIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3Qgc2FtcGxlSW1hZ2VVcmwgPSAiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTWpBd0lpQm9aV2xuYUhROUlqSXdNQ0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLSUNBOFpHVm1jejRLSUNBZ0lEeHNhVzVsWVhKSGNtRmthV1Z1ZENCcFpEMGlaM0poWkdsbGJuUWlJSGd4UFNJd0pTSWdlVEU5SWpBbElpQjRNajBpTVRBd0pTSWdlVEk5SWpFd01DVWlQZ29nSUNBZ0lDQThjM1J2Y0NCdlptWnpaWFE5SWpBbElpQnpkRzl3TFdOdmJHOXlQU0lqTmpZM1pXVmhJaUF2UGdvZ0lDQWdJQ0E4YzNSdmNDQnZabVp6WlhROUlqRXdNQ1VpSUhOMGIzQXRZMjlzYjNJOUlpTTNOalJpWVRJaUlDOCtDaUFnSUNBOEwyeHBibVZoY2tkeVlXUnBaVzUwUGdvZ0lEd3ZaR1ZtY3o0S0lDQThjbVZqZENCM2FXUjBhRDBpTWpBd0lpQm9aV2xuYUhROUlqSXdNQ0lnWm1sc2JEMGlkWEpzS0NObmNtRmthV1Z1ZENraUlDOCtDaUFnUEhSbGVIUWdlRDBpTlRBbElpQjVQU0kxTUNVaUlHUnZiV2x1WVc1MExXSmhjMlZzYVc1bFBTSnRhV1JrYkdVaUlIUmxlSFF0WVc1amFHOXlQU0p0YVdSa2JHVWlJR1p2Ym5RdFptRnRhV3g1UFNKQmNtbGhiQ0lnWm05dWRDMXphWHBsUFNJNE1DSWdabWxzYkQwaWQyaHBkR1VpUGtwRVBDOTBaWGgwUGdvOEwzTjJaejQ9IjsKICBjb25zdCBwcmVmaWxsZWRQcm9maWxlID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjcHJlZmlsbGVkLXByb2ZpbGUiKTsKICBpZiAocHJlZmlsbGVkUHJvZmlsZSkgewogICAgcHJlZmlsbGVkUHJvZmlsZS52YWx1ZSA9IHNhbXBsZUltYWdlVXJsOwogICAgcHJlZmlsbGVkUHJvZmlsZS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgICBjb25zdCBvdXRwdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNwcmVmaWxsZWQtb3V0cHV0Iik7CiAgICAgIGlmIChvdXRwdXQpIHsKICAgICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSB0YXJnZXQudmFsdWUgPyBgSW1hZ2UgZGF0YTogJHt0YXJnZXQudmFsdWUuc3Vic3RyaW5nKDAsIDgwKX0uLi5gIDogIk5vIGltYWdlIHNlbGVjdGVkIjsKICAgICAgfQogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlByZS1maWxsZWQgYW5kIFZhbHVlIEJpbmRpbmcifSAuc3VidGl0bGU9JHsiUHJvZmlsZSBwaWN0dXJlIHdpdGggaW5pdGlhbCB2YWx1ZSBhbmQgY2hhbmdlIHRyYWNraW5nIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgIGlkPSJwcmVmaWxsZWQtcHJvZmlsZSIKICAgICAgICAgIGxhYmVsPSJFZGl0IEV4aXN0aW5nIFByb2ZpbGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iQ2xpY2sgdGhlIGVkaXQgYnV0dG9uIHRvIGNoYW5nZSBvciBkZWxldGUgdG8gcmVtb3ZlIgogICAgICAgICAgc2hhcGU9InJvdW5kIgogICAgICAgICAgc2l6ZT0iMTUwIgogICAgICAgID48L2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmU+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0icHJlZmlsbGVkLW91dHB1dCIgY2xhc3M9ImRlbW8tb3V0cHV0Ij4KICAgICAgICAgIEltYWdlIGRhdGEgd2lsbCBhcHBlYXIgaGVyZSB3aGVuIGNoYW5nZWQKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZGlzYWJsZWRQcm9maWxlID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZGlzYWJsZWQtcHJvZmlsZSIpOwogIGlmIChkaXNhYmxlZFByb2ZpbGUpIHsKICAgIGRpc2FibGVkUHJvZmlsZS52YWx1ZSA9ICJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNakF3SWlCb1pXbG5hSFE5SWpJd01DSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtJQ0E4Y21WamRDQjNhV1IwYUQwaU1qQXdJaUJvWldsbmFIUTlJakl3TUNJZ1ptbHNiRDBpSTJOalkyTmpZeUlnTHo0S0lDQThkR1Y0ZENCNFBTSTFNQ1VpSUhrOUlqVXdKU0lnWkc5dGFXNWhiblF0WW1GelpXeHBibVU5SW0xcFpHUnNaU0lnZEdWNGRDMWhibU5vYjNJOUltMXBaR1JzWlNJZ1ptOXVkQzFtWVcxcGJIazlJa0Z5YVdGc0lpQm1iMjUwTFhOcGVtVTlJall3SWlCbWFXeHNQU0ozYUdsMFpTSStUa0U4TDNSbGVIUStDand2YzNablBnPT0iOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGb3JtIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgc3RhdGVzIGFuZCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGxhYmVsPSJSZXF1aXJlZCBGaWVsZCIKICAgICAgICAgICAgZGVzY3JpcHRpb249IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGlkPSJkaXNhYmxlZC1wcm9maWxlIgogICAgICAgICAgICBsYWJlbD0iRGlzYWJsZWQgU3RhdGUiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDYW5ub3QgYmUgZWRpdGVkIgogICAgICAgICAgICBzaGFwZT0ic3F1YXJlIgogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgbGFiZWw9IlVwbG9hZCBPbmx5IgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iRGVsZXRlIG5vdCBhbGxvd2VkIgogICAgICAgICAgICBzaGFwZT0icm91bmQiCiAgICAgICAgICAgIC5hbGxvd0RlbGV0ZT0ke2ZhbHNlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRmVhdHVyZXMifSAuc3VidGl0bGU9JHsiQ29tcGxldGUgZmVhdHVyZSBzZXQgb2YgdGhlIHByb2ZpbGUgcGljdHVyZSBpbnB1dCJ9PgogICAgICAgIDx1bCBjbGFzcz0iZmVhdHVyZS1saXN0Ij4KICAgICAgICAgIDxsaT48c3Ryb25nPkltYWdlIFVwbG9hZDo8L3N0cm9uZz4gQ2xpY2sgdG8gdXBsb2FkIG9yIGRyYWcgJiBkcm9wIGltYWdlczwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5JbWFnZSBDcm9wcGluZzo8L3N0cm9uZz4gSW50ZXJhY3RpdmUgY3JvcCB0b29sIHdpdGggcmVzaXplIGhhbmRsZXM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+U2hhcGUgU3VwcG9ydDo8L3N0cm9uZz4gUm91bmQgb3Igc3F1YXJlIHByb2ZpbGUgcGljdHVyZXM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+U2l6ZSBDdXN0b21pemF0aW9uOjwvc3Ryb25nPiBBZGp1c3RhYmxlIGRpbWVuc2lvbnM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlldyAmIEVkaXQ6PC9zdHJvbmc+IEhvdmVyIG92ZXJsYXkgd2l0aCBlZGl0IGFuZCBkZWxldGUgb3B0aW9uczwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5GaWxlIFZhbGlkYXRpb246PC9zdHJvbmc+IEZvcm1hdCBhbmQgc2l6ZSByZXN0cmljdGlvbnM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+UmVzcG9uc2l2ZSBEZXNpZ246PC9zdHJvbmc+IFdvcmtzIG9uIGRlc2t0b3AgYW5kIG1vYmlsZSBkZXZpY2VzPC9saT4KICAgICAgICAgIDxsaT48c3Ryb25nPkZvcm0gSW50ZWdyYXRpb246PC9zdHJvbmc+IFN0YW5kYXJkIGZvcm0gdmFsdWUgYmluZGluZyBhbmQgdmFsaWRhdGlvbjwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5BY2Nlc3NpYmlsaXR5Ojwvc3Ryb25nPiBLZXlib2FyZCBuYXZpZ2F0aW9uIGFuZCBzY3JlZW4gcmVhZGVyIHN1cHBvcnQ8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+Wi1JbmRleCBNYW5hZ2VtZW50Ojwvc3Ryb25nPiBQcm9wZXIgbW9kYWwgc3RhY2tpbmcgd2l0aCByZWdpc3RyeTwvbGk+CiAgICAgICAgPC91bD4KICAgICAgICAKICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAyNHB4OyI+CiAgICAgICAgICA8c3Ryb25nPlN1cHBvcnRlZCBGb3JtYXRzOjwvc3Ryb25nPiBKUEVHLCBQTkcsIFdlYlA8YnI+CiAgICAgICAgICA8c3Ryb25nPk1heCBGaWxlIFNpemU6PC9zdHJvbmc+IDVNQiAoY29uZmlndXJhYmxlKTxicj4KICAgICAgICAgIDxzdHJvbmc+T3V0cHV0IEZvcm1hdDo8L3N0cm9uZz4gQmFzZTY0IGVuY29kZWQgSlBFRwogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvcHJvZmlsZXBpY3R1cmUvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2RlZXNfaWNvbigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU2NiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNjcgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNJbnB1dFByb2ZpbGVQaWN0dXJlID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NoYXBlX2RlY29yYXRvcnM7CiAgbGV0IF9zaGFwZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NoYXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaXplX2RlY29yYXRvcnM7CiAgbGV0IF9zaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9yczsKICBsZXQgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FsbG93VXBsb2FkX2RlY29yYXRvcnM7CiAgbGV0IF9hbGxvd1VwbG9hZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FsbG93VXBsb2FkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hbGxvd0RlbGV0ZV9kZWNvcmF0b3JzOwogIGxldCBfYWxsb3dEZWxldGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hbGxvd0RlbGV0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RmlsZVNpemVfZGVjb3JhdG9yczsKICBsZXQgX21heEZpbGVTaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RmlsZVNpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjY2VwdGVkRm9ybWF0c19kZWNvcmF0b3JzOwogIGxldCBfYWNjZXB0ZWRGb3JtYXRzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWNjZXB0ZWRGb3JtYXRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vdXRwdXRTaXplX2RlY29yYXRvcnM7CiAgbGV0IF9vdXRwdXRTaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0cHV0U2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzOwogIGxldCBfb3V0cHV0UXVhbGl0eV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dHB1dFF1YWxpdHlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzSG92ZXJlZF9kZWNvcmF0b3JzOwogIGxldCBfaXNIb3ZlcmVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNIb3ZlcmVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0RyYWdnaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9pc0RyYWdnaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNEcmFnZ2luZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNMb2FkaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9pc0xvYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0UHJvZmlsZVBpY3R1cmUyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zaGFwZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3NpemVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2FsbG93VXBsb2FkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2FsbG93RGVsZXRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX21heEZpbGVTaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfYWNjZXB0ZWRGb3JtYXRzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9vdXRwdXRTaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2lzSG92ZXJlZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNEcmFnZ2luZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNMb2FkaW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX3NoYXBlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNoYXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaGFwZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaGFwZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hhcGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hhcGVfaW5pdGlhbGl6ZXJzLCBfc2hhcGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfc2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2l6ZV9pbml0aWFsaXplcnMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBsYWNlaG9sZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwbGFjZWhvbGRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wbGFjZWhvbGRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGxhY2Vob2xkZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfYWxsb3dVcGxvYWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWxsb3dVcGxvYWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFsbG93VXBsb2FkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFsbG93VXBsb2FkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hbGxvd1VwbG9hZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hbGxvd1VwbG9hZF9pbml0aWFsaXplcnMsIF9hbGxvd1VwbG9hZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF9hbGxvd0RlbGV0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhbGxvd0RlbGV0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWxsb3dEZWxldGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWxsb3dEZWxldGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFsbG93RGVsZXRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FsbG93RGVsZXRlX2luaXRpYWxpemVycywgX2FsbG93RGVsZXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX21heEZpbGVTaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1heEZpbGVTaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYXhGaWxlU2l6ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYXhGaWxlU2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWF4RmlsZVNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWF4RmlsZVNpemVfaW5pdGlhbGl6ZXJzLCBfbWF4RmlsZVNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfYWNjZXB0ZWRGb3JtYXRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjY2VwdGVkRm9ybWF0cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWNjZXB0ZWRGb3JtYXRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFjY2VwdGVkRm9ybWF0cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWNjZXB0ZWRGb3JtYXRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjY2VwdGVkRm9ybWF0c19pbml0aWFsaXplcnMsIF9hY2NlcHRlZEZvcm1hdHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfb3V0cHV0U2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvdXRwdXRTaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvdXRwdXRTaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm91dHB1dFNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm91dHB1dFNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3V0cHV0U2l6ZV9pbml0aWFsaXplcnMsIF9vdXRwdXRTaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX291dHB1dFF1YWxpdHlfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3V0cHV0UXVhbGl0eSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3V0cHV0UXVhbGl0eSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vdXRwdXRRdWFsaXR5LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vdXRwdXRRdWFsaXR5ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX291dHB1dFF1YWxpdHlfaW5pdGlhbGl6ZXJzLCBfb3V0cHV0UXVhbGl0eV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF9pc0hvdmVyZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNIb3ZlcmVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0hvdmVyZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNIb3ZlcmVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc0hvdmVyZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNIb3ZlcmVkX2luaXRpYWxpemVycywgX2lzSG92ZXJlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF9pc0RyYWdnaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzRHJhZ2dpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNEcmFnZ2luZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNEcmFnZ2luZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nX2luaXRpYWxpemVycywgX2lzRHJhZ2dpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfaXNMb2FkaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzTG9hZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNMb2FkaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzTG9hZGluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNMb2FkaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzTG9hZGluZ19pbml0aWFsaXplcnMsIF9pc0xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFByb2ZpbGVQaWN0dXJlMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNDE7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gQmFzZTY0IGVuY29kZWQgaW1hZ2Ugb3IgVVJMCiAgICBzZXQgdmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hhcGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX3NoYXBlX2luaXRpYWxpemVycywgInJvdW5kIikpOwogICAgZ2V0IHNoYXBlKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hhcGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaGFwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hhcGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfc2hhcGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9zaXplX2luaXRpYWxpemVycywgMTIwKSk7CiAgICBnZXQgc2l6ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaXplKHZhbHVlMikgewogICAgICB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHBsYWNlaG9sZGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwbGFjZWhvbGRlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhbGxvd1VwbG9hZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfYWxsb3dVcGxvYWRfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgYWxsb3dVcGxvYWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhbGxvd1VwbG9hZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFsbG93VXBsb2FkKHZhbHVlMikgewogICAgICB0aGlzLiNhbGxvd1VwbG9hZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FsbG93RGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfYWxsb3dVcGxvYWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9hbGxvd0RlbGV0ZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBhbGxvd0RlbGV0ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FsbG93RGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWxsb3dEZWxldGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FsbG93RGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4RmlsZVNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9hbGxvd0RlbGV0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX21heEZpbGVTaXplX2luaXRpYWxpemVycywgNSAqIDEwMjQgKiAxMDI0KSk7CiAgICBnZXQgbWF4RmlsZVNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYXhGaWxlU2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gNU1CCiAgICBzZXQgbWF4RmlsZVNpemUodmFsdWUyKSB7CiAgICAgIHRoaXMuI21heEZpbGVTaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYWNjZXB0ZWRGb3JtYXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfbWF4RmlsZVNpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9hY2NlcHRlZEZvcm1hdHNfaW5pdGlhbGl6ZXJzLCBbImltYWdlL2pwZWciLCAiaW1hZ2UvcG5nIiwgImltYWdlL3dlYnAiXSkpOwogICAgZ2V0IGFjY2VwdGVkRm9ybWF0cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FjY2VwdGVkRm9ybWF0c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjY2VwdGVkRm9ybWF0cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWNjZXB0ZWRGb3JtYXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjb3V0cHV0U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX2FjY2VwdGVkRm9ybWF0c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX291dHB1dFNpemVfaW5pdGlhbGl6ZXJzLCA4MDApKTsKICAgIGdldCBvdXRwdXRTaXplKCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0cHV0U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gT3V0cHV0IHJlc29sdXRpb24gaW4gcGl4ZWxzCiAgICBzZXQgb3V0cHV0U2l6ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb3V0cHV0U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI291dHB1dFF1YWxpdHlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9vdXRwdXRTaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfb3V0cHV0UXVhbGl0eV9pbml0aWFsaXplcnMsIDAuOTUpKTsKICAgIGdldCBvdXRwdXRRdWFsaXR5KCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0cHV0UXVhbGl0eV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gMC0xIHF1YWxpdHkgZm9yIEpQRUcKICAgIHNldCBvdXRwdXRRdWFsaXR5KHZhbHVlMikgewogICAgICB0aGlzLiNvdXRwdXRRdWFsaXR5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNIb3ZlcmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfb3V0cHV0UXVhbGl0eV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX2lzSG92ZXJlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNIb3ZlcmVkKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNIb3ZlcmVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNIb3ZlcmVkKHZhbHVlMikgewogICAgICB0aGlzLiNpc0hvdmVyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0RyYWdnaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfaXNIb3ZlcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfaXNEcmFnZ2luZ19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNEcmFnZ2luZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzRHJhZ2dpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0RyYWdnaW5nKHZhbHVlMikgewogICAgICB0aGlzLiNpc0RyYWdnaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfaXNEcmFnZ2luZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX2lzTG9hZGluZ19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNMb2FkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNMb2FkaW5nKHZhbHVlMikgewogICAgICB0aGlzLiNpc0xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIG1vZGFsSW5zdGFuY2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfaXNMb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTZweDsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICB9CgogICAgICAucHJvZmlsZS1jb250YWluZXI6aG92ZXIgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMik7CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmUgewogICAgICAgIHdpZHRoOiB2YXIoLS1zaXplLCAxMjBweCk7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLCAxMjBweCk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNWY1ZjUiLCAiIzE4MTgxYiIpfTsKICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlLnJvdW5kIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmUuc3F1YXJlIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlLmRyYWdnaW5nIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xNSkiLCAicmdiYSg5NiwgMTY1LCAyNTAsIDAuMTUpIil9OwogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlOmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDRkNGQ4IiwgIiMzZjNmNDYiKX07CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmU6ZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAucHJvZmlsZS1pbWFnZSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG9iamVjdC1maXQ6IGNvdmVyOwogICAgICB9CgogICAgICAucGxhY2Vob2xkZXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5vdmVybGF5IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtY29udGFpbmVyOmhvdmVyIC5vdmVybGF5IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAub3ZlcmxheS1jb250ZW50IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLm92ZXJsYXktYnV0dG9uIHsKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpIiwgInJnYmEoMzksIDM5LCA0MiwgMC45NSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xKSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgIH0KCiAgICAgIC5vdmVybGF5LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzNmM2Y0NiIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgIH0KCiAgICAgIC5vdmVybGF5LWJ1dHRvbi5kZWxldGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIzOSwgNjgsIDY4LCAwLjkpIiwgInJnYmEoMjIwLCAzOCwgMzgsIDAuOSkiKX07CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5vdmVybGF5LWJ1dHRvbi5kZWxldGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWY0NDQ0IiwgIiNkYzI2MjYiKX07CiAgICAgIH0KCiAgICAgIC5kcm9wLXpvbmUtdGV4dCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5oaWRkZW4taW5wdXQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIExvYWRpbmcgYW5pbWF0aW9uICovCiAgICAgIC5sb2FkaW5nLW92ZXJsYXkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSIsICJyZ2JhKDAsIDAsIDAsIDAuOCkiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgLmxvYWRpbmctb3ZlcmxheS5zaG93IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICAubG9hZGluZy1zcGlubmVyIHsKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgYm9yZGVyOiAzcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xKSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYW5pbWF0aW9uOiBzcGluIDAuNnMgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICAgIHRvIHsKICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHB1bHNlIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7CiAgICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgfQogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlLmNsaWNraW5nIHsKICAgICAgICBhbmltYXRpb246IHB1bHNlIDAuM3MgZWFzZS1vdXQ7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0gLnJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZH0+PC9kZWVzLWxhYmVsPgogICAgICAgIAogICAgICAgIDxkaXYgCiAgICAgICAgICBjbGFzcz0icHJvZmlsZS1jb250YWluZXIiCiAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUNsaWNrfQogICAgICAgICAgQGRyYWdvdmVyPSR7dGhpcy5oYW5kbGVEcmFnT3Zlcn0KICAgICAgICAgIEBkcmFnbGVhdmU9JHt0aGlzLmhhbmRsZURyYWdMZWF2ZX0KICAgICAgICAgIEBkcm9wPSR7dGhpcy5oYW5kbGVEcm9wfQogICAgICAgICAgc3R5bGU9Ii0tc2l6ZTogJHt0aGlzLnNpemV9cHgiCiAgICAgICAgPgogICAgICAgICAgPGRpdiBjbGFzcz0icHJvZmlsZS1waWN0dXJlICR7dGhpcy5zaGFwZX0gJHt0aGlzLmlzRHJhZ2dpbmcgPyAiZHJhZ2dpbmciIDogIiJ9ICR7dGhpcy5pc0xvYWRpbmcgJiYgIXRoaXMudmFsdWUgPyAiY2xpY2tpbmciIDogIiJ9Ij4KICAgICAgICAgICAgJHt0aGlzLnZhbHVlID8gYjJgCiAgICAgICAgICAgICAgPGltZyBjbGFzcz0icHJvZmlsZS1pbWFnZSIgc3JjPSIke3RoaXMudmFsdWV9IiBhbHQ9IlByb2ZpbGUgcGljdHVyZSIgLz4KICAgICAgICAgICAgYCA6IGIyYAogICAgICAgICAgICAgIDxkZWVzLWljb24gY2xhc3M9InBsYWNlaG9sZGVyLWljb24iIGljb249Imx1Y2lkZTp1c2VyIiBpY29uU2l6ZT0iJHt0aGlzLnNpemUgKiAwLjV9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgYH0KICAgICAgICAgICAgCiAgICAgICAgICAgICR7dGhpcy5pc0RyYWdnaW5nID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3ZlcmxheSIgc3R5bGU9Im9wYWNpdHk6IDEiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZHJvcC16b25lLXRleHQiPgogICAgICAgICAgICAgICAgICBEcm9wIGltYWdlIGhlcmUKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgIAogICAgICAgICAgICAke3RoaXMudmFsdWUgJiYgIXRoaXMuZGlzYWJsZWQgPyBiMmAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvdmVybGF5Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im92ZXJsYXktY29udGVudCI+CiAgICAgICAgICAgICAgICAgICR7dGhpcy5hbGxvd1VwbG9hZCA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im92ZXJsYXktYnV0dG9uIiBAY2xpY2s9JHsoZTExKSA9PiB7CiAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIHRoaXMub3Blbk1vZGFsKCk7CiAgICAgIH19IHRpdGxlPSJDaGFuZ2UgcGljdHVyZSI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpwZW5jaWwiIGljb25TaXplPSIyMCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgICAgJHt0aGlzLmFsbG93RGVsZXRlID8gYjJgCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ib3ZlcmxheS1idXR0b24gZGVsZXRlIiBAY2xpY2s9JHsoZTExKSA9PiB7CiAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIHRoaXMuZGVsZXRlUGljdHVyZSgpOwogICAgICB9fSB0aXRsZT0iRGVsZXRlIHBpY3R1cmUiPgogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6dHJhc2gyIiBpY29uU2l6ZT0iMjAiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAKICAgICAgICAgICAgJHt0aGlzLmlzTG9hZGluZyAmJiAhdGhpcy52YWx1ZSA/IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctb3ZlcmxheSBzaG93Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctc3Bpbm5lciI+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxpbnB1dAogICAgICAgICAgdHlwZT0iZmlsZSIKICAgICAgICAgIGNsYXNzPSJoaWRkZW4taW5wdXQiCiAgICAgICAgICBhY2NlcHQ9IiR7dGhpcy5hY2NlcHRlZEZvcm1hdHMuam9pbigiLCIpfSIKICAgICAgICAgIEBjaGFuZ2U9JHt0aGlzLmhhbmRsZUZpbGVTZWxlY3R9CiAgICAgICAgLz4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgaGFuZGxlQ2xpY2soKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmFsbG93VXBsb2FkKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7CiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlOwogICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5oaWRkZW4taW5wdXQiKTsKICAgICAgICBjb25zdCBoYW5kbGVGb2N1cyA9ICgpID0+IHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBpZiAoIWlucHV0LmZpbGVzIHx8IGlucHV0LmZpbGVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIiwgaGFuZGxlRm9jdXMpOwogICAgICAgICAgfSwgMzAwKTsKICAgICAgICB9OwogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIGhhbmRsZUZvY3VzKTsKICAgICAgICBpbnB1dC5jbGljaygpOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVGaWxlU2VsZWN0KGV2ZW50KSB7CiAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0OwogICAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXM/LlswXTsKICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTsKICAgICAgaWYgKGZpbGUpIHsKICAgICAgICB0aGlzLnByb2Nlc3NGaWxlKGZpbGUpOwogICAgICB9CiAgICAgIGlucHV0LnZhbHVlID0gIiI7CiAgICB9CiAgICBoYW5kbGVEcmFnT3ZlcihldmVudCkgewogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5hbGxvd1VwbG9hZCkgewogICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZURyYWdMZWF2ZSgpIHsKICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7CiAgICB9CiAgICBoYW5kbGVEcm9wKGV2ZW50KSB7CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlOwogICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5hbGxvd1VwbG9hZCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGZpbGUgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzWzBdOwogICAgICBpZiAoZmlsZSkgewogICAgICAgIHRoaXMucHJvY2Vzc0ZpbGUoZmlsZSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHByb2Nlc3NGaWxlKGZpbGUpIHsKICAgICAgaWYgKCF0aGlzLmFjY2VwdGVkRm9ybWF0cy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiSW52YWxpZCBmaWxlIHR5cGU6IiwgZmlsZS50eXBlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGZpbGUuc2l6ZSA+IHRoaXMubWF4RmlsZVNpemUpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGaWxlIHRvbyBsYXJnZToiLCBmaWxlLnNpemUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICByZWFkZXIub25sb2FkID0gYXN5bmMgKGUxMSkgPT4gewogICAgICAgIGNvbnN0IGJhc2U2NDIgPSBlMTEudGFyZ2V0Py5yZXN1bHQ7CiAgICAgICAgYXdhaXQgdGhpcy5vcGVuTW9kYWwoYmFzZTY0Mik7CiAgICAgIH07CiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgfQogICAgYXN5bmMgb3Blbk1vZGFsKGluaXRpYWxJbWFnZSkgewogICAgICBjb25zdCBpbWFnZVRvRWRpdCA9IGluaXRpYWxJbWFnZSB8fCB0aGlzLnZhbHVlOwogICAgICBpZiAoIWltYWdlVG9FZGl0KSB7CiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmhpZGRlbi1pbnB1dCIpOwogICAgICAgIGlucHV0LmNsaWNrKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMubW9kYWxJbnN0YW5jZSA9IG5ldyBQcm9maWxlUGljdHVyZU1vZGFsKCk7CiAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5zaGFwZSA9IHRoaXMuc2hhcGU7CiAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5pbml0aWFsSW1hZ2UgPSBpbWFnZVRvRWRpdDsKICAgICAgdGhpcy5tb2RhbEluc3RhbmNlLm91dHB1dFNpemUgPSB0aGlzLm91dHB1dFNpemU7CiAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5vdXRwdXRRdWFsaXR5ID0gdGhpcy5vdXRwdXRRdWFsaXR5OwogICAgICB0aGlzLm1vZGFsSW5zdGFuY2UuYWRkRXZlbnRMaXN0ZW5lcigic2F2ZSIsIChldmVudCkgPT4gewogICAgICAgIHRoaXMudmFsdWUgPSBldmVudC5kZXRhaWwuY3JvcHBlZEltYWdlOwogICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICB9KTsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLm1vZGFsSW5zdGFuY2UpOwogICAgfQogICAgZGVsZXRlUGljdHVyZSgpIHsKICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2NyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0UHJvZmlsZVBpY3R1cmUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYvY29tcG9uZW50LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90cygpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlNjcgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczY4ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzUGRmID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1wZGYiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9wZGZVcmxfZGVjb3JhdG9yczsKICBsZXQgX3BkZlVybF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BkZlVybF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUGRmMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3BkZlVybF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfX2VzRGVjb3JhdGU2Nyh0aGlzLCBudWxsLCBfcGRmVXJsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBkZlVybCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGRmVXJsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBkZlVybCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGRmVXJsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BkZlVybF9pbml0aWFsaXplcnMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNQZGYyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIERFTU8KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgIDxkZWVzLXBkZj48L2RlZXMtcGRmPiBgOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJQREYiOwogICAgI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2OCh0aGlzLCBfcGRmVXJsX2luaXRpYWxpemVycywgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIpOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBwZGZVcmwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNwZGZVcmxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwZGZVcmwodmFsdWUyKSB7CiAgICAgIHRoaXMuI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjgodGhpcywgX3BkZlVybF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICBtYXgtd2lkdGg6IDgwMHB4OwogICAgICAgIH0KICAgICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB9CgogICAgICAgICNwZGZjYW52YXMgewogICAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCA1cHggI2NjYzsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGNhbnZhcwogICAgICAgIGlkPSJwZGZjYW52YXMiCiAgICAgICAgLmhlaWdodD0kezB9CiAgICAgICAgLndpZHRoPSR7MH0KCiAgICAgID48L2NhbnZhcz4KICAgIGA7CiAgICB9CiAgICBzdGF0aWMgcGRmSnNSZWFkeTsKICAgIHN0YXRpYyBwZGZqc0xpYjsKICAgIC8vIHR5cGVvZiBwZGZqc1R5cGVzOwogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICghRGVlc1BkZjIucGRmSnNSZWFkeSkgewogICAgICAgIGNvbnN0IHBkZkpzUmVhZHlEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0czI1LnBsdWdpbnMuc21hcnRwcm9taXNlLmRlZmVyKCk7CiAgICAgICAgRGVlc1BkZjIucGRmSnNSZWFkeSA9IHBkZkpzUmVhZHlEZWZlcnJlZC5wcm9taXNlOwogICAgICAgIERlZXNQZGYyLnBkZmpzTGliID0gYXdhaXQgaW1wb3J0KCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3BkZmpzLWRpc3RANC4wLjM3OS8rZXNtIik7CiAgICAgICAgRGVlc1BkZjIucGRmanNMaWIuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMgPSAiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9wZGZqcy1kaXN0QDQuMC4zNzkvYnVpbGQvcGRmLndvcmtlci5tanMiOwogICAgICAgIHBkZkpzUmVhZHlEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgIH0KICAgICAgYXdhaXQgRGVlc1BkZjIucGRmSnNSZWFkeTsKICAgICAgdGhpcy5kaXNwbGF5Q29udGVudCgpOwogICAgfQogICAgYXN5bmMgZGlzcGxheUNvbnRlbnQoKSB7CiAgICAgIGF3YWl0IERlZXNQZGYyLnBkZkpzUmVhZHk7CiAgICAgIGNvbnN0IGxvYWRpbmdUYXNrID0gRGVlc1BkZjIucGRmanNMaWIuZ2V0RG9jdW1lbnQodGhpcy5wZGZVcmwpOwogICAgICBsb2FkaW5nVGFzay5wcm9taXNlLnRoZW4oKHBkZikgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJQREYgbG9hZGVkIik7CiAgICAgICAgY29uc3QgcGFnZU51bWJlciA9IDE7CiAgICAgICAgcGRmLmdldFBhZ2UocGFnZU51bWJlcikudGhlbigocGFnZSkgPT4gewogICAgICAgICAgY29uc29sZS5sb2coIlBhZ2UgbG9hZGVkIik7CiAgICAgICAgICBjb25zdCBzY2FsZSA9IDEwOwogICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGUgfSk7CiAgICAgICAgICBjb25zdCBjYW52YXMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiI3BkZmNhbnZhcyIpOwogICAgICAgICAgY29uc3QgY29udGV4dDIgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQ7CiAgICAgICAgICBjYW52YXMud2lkdGggPSB2aWV3cG9ydC53aWR0aDsKICAgICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7CiAgICAgICAgICAgIGNhbnZhc0NvbnRleHQ6IGNvbnRleHQyLAogICAgICAgICAgICB2aWV3cG9ydAogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IHJlbmRlclRhc2sgPSBwYWdlLnJlbmRlcihyZW5kZXJDb250ZXh0KTsKICAgICAgICAgIHJlbmRlclRhc2sucHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBjb25zb2xlLmxvZygiUGFnZSByZW5kZXJlZCIpOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0sIChyZWFzb24pID0+IHsKICAgICAgICBjb25zb2xlLmVycm9yKHJlYXNvbik7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBQcm92aWRlIGNvbnRleHQgbWVudSBpdGVtcyBmb3IgdGhlIGdsb2JhbCBjb250ZXh0IG1lbnUgaGFuZGxlcgogICAgICovCiAgICBnZXRDb250ZXh0TWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJPcGVuIFBERiBpbiBOZXcgVGFiIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOkV4dGVybmFsTGluayIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy5wZGZVcmwsICJfYmxhbmsiKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDb3B5IFBERiBVUkwiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Q29weSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5wZGZVcmwpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkRvd25sb2FkIFBERiIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpEb3dubG9hZCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgY29uc3QgbGluazMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICAgICAgICAgIGxpbmszLmhyZWYgPSB0aGlzLnBkZlVybDsKICAgICAgICAgICAgbGluazMuZG93bmxvYWQgPSB0aGlzLnBkZlVybC5zcGxpdCgiLyIpLnBvcCgpIHx8ICJkb2N1bWVudC5wZGYiOwogICAgICAgICAgICBsaW5rMy5jbGljaygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjgoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNQZGYyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtc2hhcmVkL1BkZk1hbmFnZXIuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIFBkZk1hbmFnZXIgPSBjbGFzcyB7CiAgc3RhdGljIHBkZmpzTGliOwogIHN0YXRpYyBpbml0aWFsaXplZCA9IGZhbHNlOwogIHN0YXRpYyBhc3luYyBpbml0aWFsaXplKCkgewogICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpCiAgICAgIHJldHVybjsKICAgIHRoaXMucGRmanNMaWIgPSBhd2FpdCBpbXBvcnQoImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcGRmanMtZGlzdEA0LjAuMzc5Lytlc20iKTsKICAgIHRoaXMucGRmanNMaWIuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMgPSAiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9wZGZqcy1kaXN0QDQuMC4zNzkvYnVpbGQvcGRmLndvcmtlci5tanMiOwogICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7CiAgfQogIHN0YXRpYyBhc3luYyBsb2FkRG9jdW1lbnQodXJsKSB7CiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemUoKTsKICAgIGNvbnN0IGxvYWRpbmdUYXNrID0gdGhpcy5wZGZqc0xpYi5nZXREb2N1bWVudCh1cmwpOwogICAgY29uc3QgZG9jdW1lbnQ0ID0gYXdhaXQgbG9hZGluZ1Rhc2sucHJvbWlzZTsKICAgIHJldHVybiBkb2N1bWVudDQ7CiAgfQogIHN0YXRpYyByZWxlYXNlRG9jdW1lbnQoX3VybCkgewogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtc2hhcmVkL0NhbnZhc1Bvb2wuanMKdmFyIENhbnZhc1Bvb2wgPSBjbGFzcyB7CiAgc3RhdGljIHBvb2wgPSBbXTsKICBzdGF0aWMgbWF4UG9vbFNpemUgPSAyMDsKICBzdGF0aWMgTUlOX0NBTlZBU19TSVpFID0gMjU2OwogIHN0YXRpYyBNQVhfQ0FOVkFTX1NJWkUgPSA0MDk2OwogIHN0YXRpYyBhY3F1aXJlKHdpZHRoLCBoZWlnaHQpIHsKICAgIGNvbnN0IHN1aXRhYmxlID0gdGhpcy5wb29sLmZpbmQoKGl0ZW0pID0+ICFpdGVtLmluVXNlICYmIGl0ZW0uY2FudmFzLndpZHRoID49IHdpZHRoICYmIGl0ZW0uY2FudmFzLmhlaWdodCA+PSBoZWlnaHQgJiYgaXRlbS5jYW52YXMud2lkdGggPD0gd2lkdGggKiAxLjUgJiYgaXRlbS5jYW52YXMuaGVpZ2h0IDw9IGhlaWdodCAqIDEuNSk7CiAgICBpZiAoc3VpdGFibGUpIHsKICAgICAgc3VpdGFibGUuaW5Vc2UgPSB0cnVlOwogICAgICBzdWl0YWJsZS5sYXN0VXNlZCA9IERhdGUubm93KCk7CiAgICAgIHN1aXRhYmxlLmNhbnZhcy53aWR0aCA9IHdpZHRoOwogICAgICBzdWl0YWJsZS5jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0OwogICAgICBzdWl0YWJsZS5jdHguY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogICAgICByZXR1cm4gc3VpdGFibGU7CiAgICB9CiAgICBpZiAodGhpcy5wb29sLmxlbmd0aCA8IHRoaXMubWF4UG9vbFNpemUpIHsKICAgICAgY29uc3QgY2FudmFzMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICBjb25zdCBjdHgyID0gY2FudmFzMi5nZXRDb250ZXh0KCIyZCIsIHsKICAgICAgICBhbHBoYTogdHJ1ZSwKICAgICAgICBkZXN5bmNocm9uaXplZDogdHJ1ZQogICAgICB9KTsKICAgICAgY2FudmFzMi53aWR0aCA9IE1hdGgubWluKE1hdGgubWF4KHdpZHRoLCB0aGlzLk1JTl9DQU5WQVNfU0laRSksIHRoaXMuTUFYX0NBTlZBU19TSVpFKTsKICAgICAgY2FudmFzMi5oZWlnaHQgPSBNYXRoLm1pbihNYXRoLm1heChoZWlnaHQsIHRoaXMuTUlOX0NBTlZBU19TSVpFKSwgdGhpcy5NQVhfQ0FOVkFTX1NJWkUpOwogICAgICBjb25zdCBwb29sZWRDYW52YXMgPSB7CiAgICAgICAgY2FudmFzOiBjYW52YXMyLAogICAgICAgIGN0eDogY3R4MiwKICAgICAgICBpblVzZTogdHJ1ZSwKICAgICAgICBsYXN0VXNlZDogRGF0ZS5ub3coKQogICAgICB9OwogICAgICB0aGlzLnBvb2wucHVzaChwb29sZWRDYW52YXMpOwogICAgICByZXR1cm4gcG9vbGVkQ2FudmFzOwogICAgfQogICAgY29uc3QgbHJ1ID0gdGhpcy5wb29sLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaW5Vc2UpLnNvcnQoKGE1LCBiNSkgPT4gYTUubGFzdFVzZWQgLSBiNS5sYXN0VXNlZClbMF07CiAgICBpZiAobHJ1KSB7CiAgICAgIGxydS5jYW52YXMud2lkdGggPSB3aWR0aDsKICAgICAgbHJ1LmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7CiAgICAgIGxydS5jdHguY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogICAgICBscnUuaW5Vc2UgPSB0cnVlOwogICAgICBscnUubGFzdFVzZWQgPSBEYXRlLm5vdygpOwogICAgICByZXR1cm4gbHJ1OwogICAgfQogICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CiAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoOwogICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDsKICAgIHJldHVybiB7CiAgICAgIGNhbnZhcywKICAgICAgY3R4LAogICAgICBpblVzZTogdHJ1ZSwKICAgICAgbGFzdFVzZWQ6IERhdGUubm93KCkKICAgIH07CiAgfQogIHN0YXRpYyByZWxlYXNlKHBvb2xlZENhbnZhcykgewogICAgaWYgKHRoaXMucG9vbC5pbmNsdWRlcyhwb29sZWRDYW52YXMpKSB7CiAgICAgIHBvb2xlZENhbnZhcy5pblVzZSA9IGZhbHNlOwogICAgICBwb29sZWRDYW52YXMuY3R4LmNsZWFyUmVjdCgwLCAwLCBwb29sZWRDYW52YXMuY2FudmFzLndpZHRoLCBwb29sZWRDYW52YXMuY2FudmFzLmhlaWdodCk7CiAgICB9CiAgfQogIHN0YXRpYyByZWxlYXNlQWxsKCkgewogICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMucG9vbCkgewogICAgICBpdGVtLmluVXNlID0gZmFsc2U7CiAgICAgIGl0ZW0uY3R4LmNsZWFyUmVjdCgwLCAwLCBpdGVtLmNhbnZhcy53aWR0aCwgaXRlbS5jYW52YXMuaGVpZ2h0KTsKICAgIH0KICB9CiAgc3RhdGljIGRlc3Ryb3koKSB7CiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5wb29sKSB7CiAgICAgIGl0ZW0uY2FudmFzLndpZHRoID0gMDsKICAgICAgaXRlbS5jYW52YXMuaGVpZ2h0ID0gMDsKICAgIH0KICAgIHRoaXMucG9vbCA9IFtdOwogIH0KICBzdGF0aWMgZ2V0U3RhdHMoKSB7CiAgICByZXR1cm4gewogICAgICBwb29sU2l6ZTogdGhpcy5wb29sLmxlbmd0aCwKICAgICAgbWF4UG9vbFNpemU6IHRoaXMubWF4UG9vbFNpemUsCiAgICAgIGluVXNlOiB0aGlzLnBvb2wuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmluVXNlKS5sZW5ndGgsCiAgICAgIGF2YWlsYWJsZTogdGhpcy5wb29sLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaW5Vc2UpLmxlbmd0aAogICAgfTsKICB9CiAgc3RhdGljIGFkanVzdFBvb2xTaXplKG5ld1NpemUpIHsKICAgIGlmIChuZXdTaXplIDwgdGhpcy5wb29sLmxlbmd0aCkgewogICAgICBjb25zdCB0b1JlbW92ZSA9IHRoaXMucG9vbC5sZW5ndGggLSBuZXdTaXplOwogICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5wb29sLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaW5Vc2UpLnNsaWNlKDAsIHRvUmVtb3ZlKTsKICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJlbW92ZWQpIHsKICAgICAgICBjb25zdCBpbmRleDIgPSB0aGlzLnBvb2wuaW5kZXhPZihpdGVtKTsKICAgICAgICBpZiAoaW5kZXgyID4gLTEpIHsKICAgICAgICAgIHRoaXMucG9vbC5zcGxpY2UoaW5kZXgyLCAxKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHRoaXMubWF4UG9vbFNpemUgPSBuZXdTaXplOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtc2hhcmVkL3V0aWxzLmpzCmZ1bmN0aW9uIGRlYm91bmNlMyhmdW5jLCB3YWl0MikgewogIGxldCB0aW1lb3V0MjsKICByZXR1cm4gZnVuY3Rpb24gZXhlY3V0ZWRGdW5jdGlvbiguLi5hcmdzKSB7CiAgICBjb25zdCBsYXRlciA9ICgpID0+IHsKICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTsKICAgICAgZnVuYyguLi5hcmdzKTsKICAgIH07CiAgICBjbGVhclRpbWVvdXQodGltZW91dDIpOwogICAgdGltZW91dDIgPSB3aW5kb3cuc2V0VGltZW91dChsYXRlciwgd2FpdDIpOwogIH07Cn0KZnVuY3Rpb24gdGhyb3R0bGUyKGZ1bmMsIGxpbWl0KSB7CiAgbGV0IGluVGhyb3R0bGU7CiAgcmV0dXJuIGZ1bmN0aW9uIGV4ZWN1dGVkRnVuY3Rpb24oLi4uYXJncykgewogICAgaWYgKCFpblRocm90dGxlKSB7CiAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7CiAgICAgIGluVGhyb3R0bGUgPSB0cnVlOwogICAgICBzZXRUaW1lb3V0KCgpID0+IGluVGhyb3R0bGUgPSBmYWxzZSwgbGltaXQpOwogICAgfQogIH07Cn0KZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoYnl0ZXMpIHsKICBpZiAoYnl0ZXMgPT09IDApCiAgICByZXR1cm4gIjAgQnl0ZXMiOwogIGNvbnN0IGs0ID0gMTAyNDsKICBjb25zdCBzaXplcyA9IFsiQnl0ZXMiLCAiS0IiLCAiTUIiLCAiR0IiXTsKICBjb25zdCBpMTEgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGs0KSk7CiAgcmV0dXJuIE1hdGgucm91bmQoYnl0ZXMgLyBNYXRoLnBvdyhrNCwgaTExKSAqIDEwMCkgLyAxMDAgKyAiICIgKyBzaXplc1tpMTFdOwp9CmZ1bmN0aW9uIGlzSW5WaWV3cG9ydChlbGVtZW50NCwgbWFyZ2luID0gMCkgewogIGNvbnN0IHJlY3QgPSBlbGVtZW50NC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICByZXR1cm4gcmVjdC50b3AgPj0gLW1hcmdpbiAmJiByZWN0LmxlZnQgPj0gLW1hcmdpbiAmJiByZWN0LmJvdHRvbSA8PSAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpICsgbWFyZ2luICYmIHJlY3QucmlnaHQgPD0gKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCkgKyBtYXJnaW47Cn0KdmFyIFBlcmZvcm1hbmNlTW9uaXRvciA9IGNsYXNzIHsKICBzdGF0aWMgbWFya3MgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIHN0YXRpYyBtZWFzdXJlcyA9IFtdOwogIHN0YXRpYyBtYXJrKG5hbWUpIHsKICAgIHRoaXMubWFya3Muc2V0KG5hbWUsIHBlcmZvcm1hbmNlLm5vdygpKTsKICB9CiAgc3RhdGljIG1lYXN1cmUobmFtZSwgc3RhcnRNYXJrKSB7CiAgICBjb25zdCBzdGFydCA9IHRoaXMubWFya3MuZ2V0KHN0YXJ0TWFyayk7CiAgICBpZiAoc3RhcnQpIHsKICAgICAgY29uc3QgZHVyYXRpb24gPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0OwogICAgICB0aGlzLm1lYXN1cmVzLnB1c2goeyBuYW1lLCBkdXJhdGlvbiB9KTsKICAgICAgdGhpcy5tYXJrcy5kZWxldGUoc3RhcnRNYXJrKTsKICAgICAgcmV0dXJuIGR1cmF0aW9uOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQogIHN0YXRpYyBnZXRSZXBvcnQoKSB7CiAgICBjb25zdCByZXBvcnQgPSB7CiAgICAgIG1lYXN1cmVzOiBbLi4udGhpcy5tZWFzdXJlc10sCiAgICAgIGF2ZXJhZ2VzOiB7fQogICAgfTsKICAgIGNvbnN0IGdyb3VwZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgZm9yIChjb25zdCBtZWFzdXJlIG9mIHRoaXMubWVhc3VyZXMpIHsKICAgICAgaWYgKCFncm91cGVkLmhhcyhtZWFzdXJlLm5hbWUpKSB7CiAgICAgICAgZ3JvdXBlZC5zZXQobWVhc3VyZS5uYW1lLCBbXSk7CiAgICAgIH0KICAgICAgZ3JvdXBlZC5nZXQobWVhc3VyZS5uYW1lKS5wdXNoKG1lYXN1cmUuZHVyYXRpb24pOwogICAgfQogICAgZm9yIChjb25zdCBbbmFtZSwgZHVyYXRpb25zXSBvZiBncm91cGVkKSB7CiAgICAgIHJlcG9ydC5hdmVyYWdlc1tuYW1lXSA9IGR1cmF0aW9ucy5yZWR1Y2UoKGE1LCBiNSkgPT4gYTUgKyBiNSwgMCkgLyBkdXJhdGlvbnMubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlcG9ydDsKICB9CiAgc3RhdGljIGNsZWFyKCkgewogICAgdGhpcy5tYXJrcy5jbGVhcigpOwogICAgdGhpcy5tZWFzdXJlcyA9IFtdOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtcHJldmlldy9zdHlsZXMuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHByZXZpZXdTdHlsZXMgPSBbCiAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogIGlgCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgd2lkdGg6IDIwMHB4OwogICAgICBoZWlnaHQ6IDI2MHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTglKSIsICJoc2woMjE1IDIwJSAxNCUpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2UsIGJveC1zaGFkb3cgMC4ycyBlYXNlOwogICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xMikiLCAicmdiYSgwLCAwLCAwLCAwLjI0KSIpfTsKICAgIH0KCiAgICAucHJldmlldy1jb250YWluZXIuY2xpY2thYmxlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC5wcmV2aWV3LWNvbnRhaW5lci5jbGlja2FibGU6aG92ZXIgewogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7CiAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xMikiLCAicmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgfQoKICAgIC5wcmV2aWV3LWNvbnRhaW5lci5jbGlja2FibGU6aG92ZXIgLnByZXZpZXctb3ZlcmxheSB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICB9CgogICAgLnByZXZpZXctc3RhY2sgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC5wcmV2aWV3LXN0YWNrLm5vbi1hNCB7CiAgICAgIHBhZGRpbmc6IDEycHg7CiAgICB9CgogICAgLnByZXZpZXctY2FudmFzIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgbWF4LWhlaWdodDogMTAwJTsKICAgICAgd2lkdGg6IGF1dG87CiAgICAgIGhlaWdodDogYXV0bzsKICAgICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBhdXRvOwogICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgfQoKICAgIC5ub24tYTQgLnByZXZpZXctY2FudmFzIHsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDkyJSkiLCAiaHNsKDIxNyAyNSUgMjQlKSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgfQoKICAgIC5wcmV2aWV3LWluZm8gewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJvdHRvbTogOHB4OwogICAgICBsZWZ0OiA4cHg7CiAgICAgIHJpZ2h0OiA4cHg7CiAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSAvIDAuOTIpIiwgImhzbCgyMTUgMjAlIDEyJSAvIDAuOTIpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGdhcDogNnB4OwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsICJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTJweCk7CiAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgIHotaW5kZXg6IDEwOwogICAgfQoKICAgIC5wcmV2aWV3LWluZm8gZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1wYWdlcyB7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIH0KCiAgICAucHJldmlldy1vdmVybGF5IHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuNykiLCAicmdiYSgwLCAwLCAwLCAwLjgpIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgZ2FwOiA4cHg7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgICB6LWluZGV4OiAyMDsKICAgIH0KCiAgICAucHJldmlldy1vdmVybGF5IGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQoKICAgIC5wcmV2aWV3LW92ZXJsYXkgc3BhbiB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQoKICAgIC5wcmV2aWV3LWxvYWRpbmcsCiAgICAucHJldmlldy1lcnJvciB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgZ2FwOiAxMnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1sb2FkaW5nIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk5JSkiLCAiaHNsKDIxNSAyMCUgMTQlKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1lcnJvciB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MiUgOTglKSIsICJoc2woMCA2MiUgMjAlKSIpfTsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MiUgNDAlKSIsICJoc2woMCA3MCUgNjglKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1zcGlubmVyIHsKICAgICAgd2lkdGg6IDI0cHg7CiAgICAgIGhlaWdodDogMjRweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgODYlKSIsICJoc2woMjE3IDI1JSAyOCUpIil9OwogICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICB9CgogICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgIH0KICAgIH0KCiAgICAucHJldmlldy10ZXh0IHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIC5wcmV2aWV3LWVycm9yIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMzJweDsKICAgIH0KCiAgICAucHJldmlldy1wYWdlLWluZGljYXRvciB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiA4cHg7CiAgICAgIGxlZnQ6IDhweDsKICAgICAgcmlnaHQ6IDhweDsKICAgICAgcGFkZGluZzogNXB4IDhweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDAlIC8gMC43KSIsICJoc2woMCAwJSAxMDAlIC8gMC45KSIpfTsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJ3aGl0ZSIsICJoc2woMjE1IDIwJSAxMiUpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTJweCk7CiAgICAgIHotaW5kZXg6IDE1OwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMC4ycyBlYXNlOwogICAgfQoKICAgIEBrZXlmcmFtZXMgZmFkZUluIHsKICAgICAgZnJvbSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICAgIH0KICAgICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICB9CiAgICB9CgogICAgLyogUmVzcG9uc2l2ZSBzaXplcyAqLwogICAgOmhvc3QoW3NpemU9InNtYWxsIl0pIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgaGVpZ2h0OiAxOTVweDsKICAgIH0KCiAgICA6aG9zdChbc2l6ZT0ibGFyZ2UiXSkgLnByZXZpZXctY29udGFpbmVyIHsKICAgICAgd2lkdGg6IDI1MHB4OwogICAgICBoZWlnaHQ6IDMyNXB4OwogICAgfQoKICAgIC8qIEdyaWQgb3B0aW1pemF0aW9ucyAqLwogICAgOmhvc3QoW2dyaWQtbW9kZV0pIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgIHdpbGwtY2hhbmdlOiBhdXRvOwogICAgfQoKICAgIDpob3N0KFtncmlkLW1vZGVdKSAucHJldmlldy1jYW52YXMgewogICAgICBpbWFnZS1yZW5kZXJpbmc6IC13ZWJraXQtb3B0aW1pemUtY29udHJhc3Q7CiAgICAgIGltYWdlLXJlbmRlcmluZzogY3Jpc3AtZWRnZXM7CiAgICB9CiAgYApdOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXBkZi9kZWVzLXBkZi1wcmV2aWV3L2RlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW8gPSAoKSA9PiB7CiAgY29uc3Qgc2FtcGxlUGRmcyA9IFsKICAgICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvZXhhbXBsZXMvbGVhcm5pbmcvaGVsbG93b3JsZC5wZGYiLAogICAgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS93ZWIvY29tcHJlc3NlZC50cmFjZW1vbmtleS1wbGRpLTA5LnBkZiIKICBdOwogIGNvbnN0IGdlbmVyYXRlR3JpZEl0ZW1zID0gKGNvdW50MikgPT4gewogICAgY29uc3QgaXRlbXMgPSBbXTsKICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGNvdW50MjsgaTExKyspIHsKICAgICAgY29uc3QgcGRmVXJsID0gc2FtcGxlUGRmc1tpMTEgJSBzYW1wbGVQZGZzLmxlbmd0aF07CiAgICAgIGl0ZW1zLnB1c2goYjJgCiAgICAgICAgPGRlZXMtcGRmLXByZXZpZXcKICAgICAgICAgIHBkZlVybD0iJHtwZGZVcmx9IgogICAgICAgICAgbWF4UGFnZXM9IjMiCiAgICAgICAgICBzdGFja09mZnNldD0iNiIKICAgICAgICAgIGNsaWNrYWJsZT0idHJ1ZSIKICAgICAgICAgIGdyaWQtbW9kZQogICAgICAgICAgQHBkZi1wcmV2aWV3LWNsaWNrPSR7KGUxMSkgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJQREYgUHJldmlldyBjbGlja2VkOiIsIGUxMS5kZXRhaWwpOwogICAgICAgIGFsZXJ0KGBQREYgY2xpY2tlZDogJHtlMTEuZGV0YWlsLnBhZ2VDb3VudH0gcGFnZXNgKTsKICAgICAgfX0KICAgICAgICA+PC9kZWVzLXBkZi1wcmV2aWV3PgogICAgICBgKTsKICAgIH0KICAgIHJldHVybiBpdGVtczsKICB9OwogIHJldHVybiBiMmAKICAgIDxzdHlsZT4KICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICAgIH0KCiAgICAgIC5kZW1vLXNlY3Rpb24gewogICAgICAgIG1hcmdpbi1ib3R0b206IDYwcHg7CiAgICAgIH0KCiAgICAgIGgzIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CgogICAgICAucHJldmlldy1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAucHJldmlldy1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbWluLXdpZHRoOiAxMDBweDsKICAgICAgfQoKICAgICAgLnBlcmZvcm1hbmNlLXN0YXRzIHsKICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgLnN0YXRzLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTUwcHgsIDFmcikpOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICB9CgogICAgICAuc3RhdC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5zdGF0LWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5zdGF0LXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgzPlNpbmdsZSBQREYgUHJldmlldyB3aXRoIFN0YWNrZWQgUGFnZXM8L2gzPgogICAgICAgIDxkZWVzLXBkZi1wcmV2aWV3CiAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS93ZWIvY29tcHJlc3NlZC50cmFjZW1vbmtleS1wbGRpLTA5LnBkZiIKICAgICAgICAgIG1heFBhZ2VzPSIzIgogICAgICAgICAgc3RhY2tPZmZzZXQ9IjgiCiAgICAgICAgICBjbGlja2FibGU9InRydWUiCiAgICAgICAgPjwvZGVlcy1wZGYtcHJldmlldz4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMz5EaWZmZXJlbnQgU2l6ZXM8L2gzPgogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctbGFiZWwiPlNtYWxsOjwvZGl2PgogICAgICAgICAgPGRlZXMtcGRmLXByZXZpZXcKICAgICAgICAgICAgc2l6ZT0ic21hbGwiCiAgICAgICAgICAgIHBkZlVybD0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL2V4YW1wbGVzL2xlYXJuaW5nL2hlbGxvd29ybGQucGRmIgogICAgICAgICAgICBtYXhQYWdlcz0iMiIKICAgICAgICAgICAgc3RhY2tPZmZzZXQ9IjYiCiAgICAgICAgICAgIGNsaWNrYWJsZT0idHJ1ZSIKICAgICAgICAgID48L2RlZXMtcGRmLXByZXZpZXc+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctbGFiZWwiPkRlZmF1bHQ6PC9kaXY+CiAgICAgICAgICA8ZGVlcy1wZGYtcHJldmlldwogICAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgICAgbWF4UGFnZXM9IjMiCiAgICAgICAgICAgIHN0YWNrT2Zmc2V0PSI4IgogICAgICAgICAgICBjbGlja2FibGU9InRydWUiCiAgICAgICAgICA+PC9kZWVzLXBkZi1wcmV2aWV3PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWxhYmVsIj5MYXJnZTo8L2Rpdj4KICAgICAgICAgIDxkZWVzLXBkZi1wcmV2aWV3CiAgICAgICAgICAgIHNpemU9ImxhcmdlIgogICAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgICAgbWF4UGFnZXM9IjQiCiAgICAgICAgICAgIHN0YWNrT2Zmc2V0PSIxMCIKICAgICAgICAgICAgY2xpY2thYmxlPSJ0cnVlIgogICAgICAgICAgPjwvZGVlcy1wZGYtcHJldmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMz5Ob24tQ2xpY2thYmxlIFByZXZpZXc8L2gzPgogICAgICAgIDxkZWVzLXBkZi1wcmV2aWV3CiAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgIG1heFBhZ2VzPSIzIgogICAgICAgICAgc3RhY2tPZmZzZXQ9IjgiCiAgICAgICAgICBjbGlja2FibGU9ImZhbHNlIgogICAgICAgID48L2RlZXMtcGRmLXByZXZpZXc+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDM+UGVyZm9ybWFuY2UgR3JpZCAtIDUwIFBERnMgd2l0aCBMYXp5IExvYWRpbmc8L2gzPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAyMHB4OyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiAjNjY2OyI+CiAgICAgICAgICBUaGlzIGdyaWQgZGVtb25zdHJhdGVzIHRoZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIHdpdGggNTAgUERGIHByZXZpZXdzLgogICAgICAgICAgU2Nyb2xsIHRvIHNlZSBsYXp5IGxvYWRpbmcgaW4gYWN0aW9uIC0gcHJldmlld3MgcmVuZGVyIG9ubHkgd2hlbiB2aXNpYmxlLgogICAgICAgIDwvcD4KCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1ncmlkIj4KICAgICAgICAgICR7Z2VuZXJhdGVHcmlkSXRlbXMoNTApfQogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmb3JtYW5jZS1zdGF0cyI+CiAgICAgICAgICA8aDQ+UGVyZm9ybWFuY2UgRmVhdHVyZXM8L2g0PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHMtZ3JpZCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtbGFiZWwiPkxhenkgTG9hZGluZzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC12YWx1ZSI+4pyTIEVuYWJsZWQ8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LWxhYmVsIj5DYW52YXMgUG9vbGluZzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC12YWx1ZSI+4pyTIEFjdGl2ZTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtbGFiZWwiPk1lbW9yeSBNYW5hZ2VtZW50PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LXZhbHVlIj7inJMgT3B0aW1pemVkPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC1sYWJlbCI+SW50ZXJzZWN0aW9uIE9ic2VydmVyPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LXZhbHVlIj4yMDBweCBtYXJnaW48L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtcHJldmlldy9jb21wb25lbnQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKdmFyIF9fZXNEZWNvcmF0ZTY4ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2OSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1BkZlByZXZpZXcgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXBkZi1wcmV2aWV3IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfcGRmVXJsX2RlY29yYXRvcnM7CiAgbGV0IF9wZGZVcmxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRQcmV2aWV3UGFnZV9kZWNvcmF0b3JzOwogIGxldCBfY3VycmVudFByZXZpZXdQYWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFByZXZpZXdQYWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGlja2FibGVfZGVjb3JhdG9yczsKICBsZXQgX2NsaWNrYWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsaWNrYWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGFnZUNvdW50X2RlY29yYXRvcnM7CiAgbGV0IF9wYWdlQ291bnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wYWdlQ291bnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xvYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX2xvYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZW5kZXJlZF9kZWNvcmF0b3JzOwogIGxldCBfcmVuZGVyZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZW5kZXJlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXJyb3JfZGVjb3JhdG9yczsKICBsZXQgX2Vycm9yX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXJyb3JfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzSG92ZXJpbmdfZGVjb3JhdG9yczsKICBsZXQgX2lzSG92ZXJpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0hvdmVyaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0E0Rm9ybWF0X2RlY29yYXRvcnM7CiAgbGV0IF9pc0E0Rm9ybWF0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNBNEZvcm1hdF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUGRmUHJldmlldzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9wZGZVcmxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9jdXJyZW50UHJldmlld1BhZ2VfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9jbGlja2FibGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfcGFnZUNvdW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfbG9hZGluZ19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9yZW5kZXJlZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9lcnJvcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9pc0hvdmVyaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2lzQTRGb3JtYXRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfcGRmVXJsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBkZlVybCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGRmVXJsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBkZlVybCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGRmVXJsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BkZlVybF9pbml0aWFsaXplcnMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfY3VycmVudFByZXZpZXdQYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRQcmV2aWV3UGFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudFByZXZpZXdQYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1cnJlbnRQcmV2aWV3UGFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VycmVudFByZXZpZXdQYWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRQcmV2aWV3UGFnZV9pbml0aWFsaXplcnMsIF9jdXJyZW50UHJldmlld1BhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfY2xpY2thYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNsaWNrYWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY2xpY2thYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNsaWNrYWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY2xpY2thYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NsaWNrYWJsZV9pbml0aWFsaXplcnMsIF9jbGlja2FibGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfcGFnZUNvdW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBhZ2VDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGFnZUNvdW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBhZ2VDb3VudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGFnZUNvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BhZ2VDb3VudF9pbml0aWFsaXplcnMsIF9wYWdlQ291bnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfbG9hZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsb2FkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsb2FkaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxvYWRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxvYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbG9hZGluZ19pbml0aWFsaXplcnMsIF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjgodGhpcywgbnVsbCwgX3JlbmRlcmVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJlbmRlcmVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZW5kZXJlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZW5kZXJlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucmVuZGVyZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVuZGVyZWRfaW5pdGlhbGl6ZXJzLCBfcmVuZGVyZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfZXJyb3JfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZXJyb3IiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVycm9yIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmVycm9yLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5lcnJvciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lcnJvcl9pbml0aWFsaXplcnMsIF9lcnJvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY4KHRoaXMsIG51bGwsIF9pc0hvdmVyaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzSG92ZXJpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzSG92ZXJpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNIb3ZlcmluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNIb3ZlcmluZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0hvdmVyaW5nX2luaXRpYWxpemVycywgX2lzSG92ZXJpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfaXNBNEZvcm1hdF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0E0Rm9ybWF0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0E0Rm9ybWF0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzQTRGb3JtYXQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzQTRGb3JtYXQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNBNEZvcm1hdF9pbml0aWFsaXplcnMsIF9pc0E0Rm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjgobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzUGRmUHJldmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJQREYiOwogICAgc3RhdGljIHN0eWxlcyA9IHByZXZpZXdTdHlsZXM7CiAgICAjcGRmVXJsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9wZGZVcmxfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgcGRmVXJsKCkgewogICAgICByZXR1cm4gdGhpcy4jcGRmVXJsX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGRmVXJsKHZhbHVlMikgewogICAgICB0aGlzLiNwZGZVcmxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjdXJyZW50UHJldmlld1BhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9jdXJyZW50UHJldmlld1BhZ2VfaW5pdGlhbGl6ZXJzLCAxKSk7CiAgICBnZXQgY3VycmVudFByZXZpZXdQYWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFByZXZpZXdQYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VycmVudFByZXZpZXdQYWdlKHZhbHVlMikgewogICAgICB0aGlzLiNjdXJyZW50UHJldmlld1BhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjbGlja2FibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9jdXJyZW50UHJldmlld1BhZ2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9jbGlja2FibGVfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgY2xpY2thYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jY2xpY2thYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2xpY2thYmxlKHZhbHVlMikgewogICAgICB0aGlzLiNjbGlja2FibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwYWdlQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9jbGlja2FibGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9wYWdlQ291bnRfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgcGFnZUNvdW50KCkgewogICAgICByZXR1cm4gdGhpcy4jcGFnZUNvdW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGFnZUNvdW50KHZhbHVlMikgewogICAgICB0aGlzLiNwYWdlQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfcGFnZUNvdW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfbG9hZGluZ19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgbG9hZGluZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsb2FkaW5nKHZhbHVlMikgewogICAgICB0aGlzLiNsb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcmVuZGVyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfcmVuZGVyZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHJlbmRlcmVkKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVuZGVyZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCByZW5kZXJlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcmVuZGVyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNlcnJvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjkodGhpcywgX3JlbmRlcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfZXJyb3JfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGVycm9yKCkgewogICAgICByZXR1cm4gdGhpcy4jZXJyb3JfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlcnJvcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jZXJyb3JfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0hvdmVyaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfZXJyb3JfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9pc0hvdmVyaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0hvdmVyaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNIb3ZlcmluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzSG92ZXJpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzSG92ZXJpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0E0Rm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfaXNIb3ZlcmluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjkodGhpcywgX2lzQTRGb3JtYXRfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgaXNBNEZvcm1hdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzQTRGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0E0Rm9ybWF0KHZhbHVlMikgewogICAgICB0aGlzLiNpc0E0Rm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICByZW5kZXJQYWdlc1Rhc2sgPSAoX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfaXNBNEZvcm1hdF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgcmVuZGVyUGFnZXNRdWV1ZWQgPSBmYWxzZTsKICAgIG9ic2VydmVyOwogICAgcGRmRG9jdW1lbnQ7CiAgICBjYW52YXNlcyA9IFtdOwogICAgcmVzaXplT2JzZXJ2ZXI7CiAgICBwcmV2aWV3Q29udGFpbmVyID0gbnVsbDsKICAgIHN0YWNrRWxlbWVudCA9IG51bGw7CiAgICBsb2FkZWRQZGZVcmwgPSBudWxsOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJwcmV2aWV3LWNvbnRhaW5lciAke3RoaXMubG9hZGluZyA/ICJsb2FkaW5nIiA6ICIifSAke3RoaXMuZXJyb3IgPyAiZXJyb3IiIDogIiJ9ICR7dGhpcy5jbGlja2FibGUgPyAiY2xpY2thYmxlIiA6ICIifSIKICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUNsaWNrfQogICAgICAgIEBtb3VzZWVudGVyPSR7dGhpcy5oYW5kbGVNb3VzZUVudGVyfQogICAgICAgIEBtb3VzZWxlYXZlPSR7dGhpcy5oYW5kbGVNb3VzZUxlYXZlfQogICAgICAgIEBtb3VzZW1vdmU9JHt0aGlzLmhhbmRsZU1vdXNlTW92ZX0KICAgICAgPgogICAgICAgICR7dGhpcy5sb2FkaW5nID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWxvYWRpbmciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LXNwaW5uZXIiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LXRleHQiPkxvYWRpbmcgcHJldmlldy4uLjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQoKICAgICAgICAke3RoaXMuZXJyb3IgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctZXJyb3IiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpGaWxlWCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctdGV4dCI+RmFpbGVkIHRvIGxvYWQgUERGPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgIDogIiJ9CgogICAgICAgICR7IXRoaXMubG9hZGluZyAmJiAhdGhpcy5lcnJvciA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1zdGFjayAkeyF0aGlzLmlzQTRGb3JtYXQgPyAibm9uLWE0IiA6ICIifSI+CiAgICAgICAgICAgIDxjYW52YXMKICAgICAgICAgICAgICBjbGFzcz0icHJldmlldy1jYW52YXMiCiAgICAgICAgICAgICAgZGF0YS1wYWdlPSIke3RoaXMuY3VycmVudFByZXZpZXdQYWdlfSIKICAgICAgICAgICAgPjwvY2FudmFzPgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgJHt0aGlzLnBhZ2VDb3VudCA+IDEgJiYgdGhpcy5pc0hvdmVyaW5nID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcGFnZS1pbmRpY2F0b3IiPgogICAgICAgICAgICAgIFBhZ2UgJHt0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZX0gb2YgJHt0aGlzLnBhZ2VDb3VudH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgJHt0aGlzLnBhZ2VDb3VudCA+IDAgJiYgIXRoaXMuaXNIb3ZlcmluZyA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWluZm8iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkZpbGVUZXh0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJldmlldy1wYWdlcyI+JHt0aGlzLnBhZ2VDb3VudH0gcGFnZSR7dGhpcy5wYWdlQ291bnQgPiAxID8gInMiIDogIiJ9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KCiAgICAgICAgICAke3RoaXMuY2xpY2thYmxlID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctb3ZlcmxheSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6RXllIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3Bhbj5WaWV3IFBERjwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBoYW5kbGVNb3VzZUVudGVyKCkgewogICAgICB0aGlzLmlzSG92ZXJpbmcgPSB0cnVlOwogICAgfQogICAgaGFuZGxlTW91c2VMZWF2ZSgpIHsKICAgICAgdGhpcy5pc0hvdmVyaW5nID0gZmFsc2U7CiAgICAgIGlmICh0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZSAhPT0gMSkgewogICAgICAgIHRoaXMuY3VycmVudFByZXZpZXdQYWdlID0gMTsKICAgICAgICB2b2lkIHRoaXMuc2NoZWR1bGVSZW5kZXJQYWdlcygpOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVNb3VzZU1vdmUoZTExKSB7CiAgICAgIGlmICghdGhpcy5pc0hvdmVyaW5nIHx8IHRoaXMucGFnZUNvdW50IDw9IDEpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCByZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgY29uc3QgeDMgPSBlMTEuY2xpZW50WCAtIHJlY3QubGVmdDsKICAgICAgY29uc3Qgd2lkdGggPSByZWN0LndpZHRoOwogICAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgeDMgLyB3aWR0aCkpOwogICAgICBjb25zdCBuZXdQYWdlID0gTWF0aC5jZWlsKHBlcmNlbnRhZ2UgKiB0aGlzLnBhZ2VDb3VudCkgfHwgMTsKICAgICAgaWYgKG5ld1BhZ2UgIT09IHRoaXMuY3VycmVudFByZXZpZXdQYWdlKSB7CiAgICAgICAgdGhpcy5jdXJyZW50UHJldmlld1BhZ2UgPSBuZXdQYWdlOwogICAgICAgIHZvaWQgdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB0aGlzLnNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTsKICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgdGhpcy5jYWNoZUVsZW1lbnRzKCk7CiAgICAgIHRoaXMuc2V0dXBSZXNpemVPYnNlcnZlcigpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuY2xlYW51cCgpOwogICAgICBpZiAodGhpcy5vYnNlcnZlcikgewogICAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICB9CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IHZvaWQgMDsKICAgIH0KICAgIHNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSB7CiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7CiAgICAgICAgcm9vdDogbnVsbCwKICAgICAgICByb290TWFyZ2luOiAiMjAwcHgiLAogICAgICAgIHRocmVzaG9sZDogMC4wMQogICAgICB9OwogICAgICB0aGlzLm9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHRocm90dGxlMigoZW50cmllcykgPT4gewogICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykgewogICAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nICYmICF0aGlzLnJlbmRlcmVkICYmIHRoaXMucGRmVXJsKSB7CiAgICAgICAgICAgIHRoaXMubG9hZEFuZFJlbmRlclByZXZpZXcoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoIWVudHJ5LmlzSW50ZXJzZWN0aW5nICYmIHRoaXMucmVuZGVyZWQpIHsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sIDEwMCksIG9wdGlvbnMpOwogICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcyk7CiAgICB9CiAgICBhc3luYyBsb2FkQW5kUmVuZGVyUHJldmlldygpIHsKICAgICAgaWYgKHRoaXMucmVuZGVyZWQgfHwgdGhpcy5sb2FkaW5nKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgICAgdGhpcy5lcnJvciA9IGZhbHNlOwogICAgICBQZXJmb3JtYW5jZU1vbml0b3IubWFyayhgcHJldmlldy1sb2FkLSR7dGhpcy5wZGZVcmx9YCk7CiAgICAgIHRyeSB7CiAgICAgICAgdGhpcy5wZGZEb2N1bWVudCA9IGF3YWl0IFBkZk1hbmFnZXIubG9hZERvY3VtZW50KHRoaXMucGRmVXJsKTsKICAgICAgICB0aGlzLnBhZ2VDb3VudCA9IHRoaXMucGRmRG9jdW1lbnQubnVtUGFnZXM7CiAgICAgICAgdGhpcy5jdXJyZW50UHJldmlld1BhZ2UgPSAxOwogICAgICAgIHRoaXMubG9hZGVkUGRmVXJsID0gdGhpcy5wZGZVcmw7CiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICB0aGlzLmNhY2hlRWxlbWVudHMoKTsKICAgICAgICBhd2FpdCB0aGlzLnNjaGVkdWxlUmVuZGVyUGFnZXMoKTsKICAgICAgICB0aGlzLnJlbmRlcmVkID0gdHJ1ZTsKICAgICAgICBjb25zdCBkdXJhdGlvbiA9IFBlcmZvcm1hbmNlTW9uaXRvci5tZWFzdXJlKGBwcmV2aWV3LXJlbmRlci0ke3RoaXMucGRmVXJsfWAsIGBwcmV2aWV3LWxvYWQtJHt0aGlzLnBkZlVybH1gKTsKICAgICAgICBjb25zb2xlLmxvZyhgUERGIHByZXZpZXcgcmVuZGVyZWQgaW4gJHtkdXJhdGlvbn1tc2ApOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIFBERiBwcmV2aWV3OiIsIGVycm9yKTsKICAgICAgICB0aGlzLmVycm9yID0gdHJ1ZTsKICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgc2NoZWR1bGVSZW5kZXJQYWdlcygpIHsKICAgICAgaWYgKCF0aGlzLnBkZkRvY3VtZW50KSB7CiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwogICAgICB9CiAgICAgIGlmICh0aGlzLnJlbmRlclBhZ2VzVGFzaykgewogICAgICAgIHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQgPSB0cnVlOwogICAgICAgIHJldHVybiB0aGlzLnJlbmRlclBhZ2VzVGFzazsKICAgICAgfQogICAgICB0aGlzLnJlbmRlclBhZ2VzVGFzayA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IHRoaXMucGVyZm9ybVJlbmRlclBhZ2VzKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byByZW5kZXIgUERGIHByZXZpZXcgcGFnZXM6IiwgZXJyb3IpOwogICAgICAgIH0KICAgICAgfSkoKS5maW5hbGx5KCgpID0+IHsKICAgICAgICB0aGlzLnJlbmRlclBhZ2VzVGFzayA9IG51bGw7CiAgICAgICAgaWYgKHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQpIHsKICAgICAgICAgIHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQgPSBmYWxzZTsKICAgICAgICAgIHZvaWQgdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIHRoaXMucmVuZGVyUGFnZXNUYXNrOwogICAgfQogICAgYXN5bmMgcGVyZm9ybVJlbmRlclBhZ2VzKCkgewogICAgICBpZiAoIXRoaXMucGRmRG9jdW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICBjb25zdCBjYW52YXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wcmV2aWV3LWNhbnZhcyIpOwogICAgICBpZiAoIWNhbnZhcykgewogICAgICAgIGNvbnNvbGUud2FybigiUHJldmlldyBjYW52YXMgbm90IGZvdW5kIGluIERPTSIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLmNsZWFyQ2FudmFzZXMoKTsKICAgICAgdGhpcy5jYWNoZUVsZW1lbnRzKCk7CiAgICAgIGNvbnN0IHsgYXZhaWxhYmxlV2lkdGgsIGF2YWlsYWJsZUhlaWdodCB9ID0gdGhpcy5nZXRBdmFpbGFibGVTaXplKCk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgcGFnZU51bSA9IHRoaXMuY3VycmVudFByZXZpZXdQYWdlOwogICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UocGFnZU51bSk7CiAgICAgICAgY29uc3QgaW5pdGlhbFZpZXdwb3J0ID0gcGFnZS5nZXRWaWV3cG9ydCh7IHNjYWxlOiAxIH0pOwogICAgICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gaW5pdGlhbFZpZXdwb3J0LmhlaWdodCAvIGluaXRpYWxWaWV3cG9ydC53aWR0aDsKICAgICAgICBjb25zdCBhNFBvcnRyYWl0UmF0aW8gPSAxLjQxNDsKICAgICAgICBjb25zdCBhNExhbmRzY2FwZVJhdGlvID0gMC43MDc7CiAgICAgICAgY29uc3QgbGV0dGVyUG9ydHJhaXRSYXRpbyA9IDEuMjk0OwogICAgICAgIGNvbnN0IGxldHRlckxhbmRzY2FwZVJhdGlvID0gMC43NzM7CiAgICAgICAgY29uc3QgdG9sZXJhbmNlID0gMC4wNTsKICAgICAgICBjb25zdCBpc0E0UG9ydHJhaXQgPSBNYXRoLmFicyhhc3BlY3RSYXRpbyAtIGE0UG9ydHJhaXRSYXRpbykgPCBhNFBvcnRyYWl0UmF0aW8gKiB0b2xlcmFuY2U7CiAgICAgICAgY29uc3QgaXNBNExhbmRzY2FwZSA9IE1hdGguYWJzKGFzcGVjdFJhdGlvIC0gYTRMYW5kc2NhcGVSYXRpbykgPCBhNExhbmRzY2FwZVJhdGlvICogdG9sZXJhbmNlOwogICAgICAgIGNvbnN0IGlzTGV0dGVyUG9ydHJhaXQgPSBNYXRoLmFicyhhc3BlY3RSYXRpbyAtIGxldHRlclBvcnRyYWl0UmF0aW8pIDwgbGV0dGVyUG9ydHJhaXRSYXRpbyAqIHRvbGVyYW5jZTsKICAgICAgICBjb25zdCBpc0xldHRlckxhbmRzY2FwZSA9IE1hdGguYWJzKGFzcGVjdFJhdGlvIC0gbGV0dGVyTGFuZHNjYXBlUmF0aW8pIDwgbGV0dGVyTGFuZHNjYXBlUmF0aW8gKiB0b2xlcmFuY2U7CiAgICAgICAgdGhpcy5pc0E0Rm9ybWF0ID0gaXNBNFBvcnRyYWl0IHx8IGlzQTRMYW5kc2NhcGUgfHwgaXNMZXR0ZXJQb3J0cmFpdCB8fCBpc0xldHRlckxhbmRzY2FwZTsKICAgICAgICBjb25zb2xlLmxvZyhgUERGIGFzcGVjdCByYXRpbzogJHthc3BlY3RSYXRpby50b0ZpeGVkKDMpfSwgc3RhbmRhcmQgZm9ybWF0OiAke3RoaXMuaXNBNEZvcm1hdH1gKTsKICAgICAgICBjb25zdCBhZGp1c3RlZFdpZHRoID0gdGhpcy5pc0E0Rm9ybWF0ID8gYXZhaWxhYmxlV2lkdGggOiBhdmFpbGFibGVXaWR0aCAtIDI0OwogICAgICAgIGNvbnN0IGFkanVzdGVkSGVpZ2h0ID0gdGhpcy5pc0E0Rm9ybWF0ID8gYXZhaWxhYmxlSGVpZ2h0IDogYXZhaWxhYmxlSGVpZ2h0IC0gMjQ7CiAgICAgICAgY29uc3Qgc2NhbGVYID0gYWRqdXN0ZWRXaWR0aCA+IDAgPyBhZGp1c3RlZFdpZHRoIC8gaW5pdGlhbFZpZXdwb3J0LndpZHRoIDogMDsKICAgICAgICBjb25zdCBzY2FsZVkgPSBhZGp1c3RlZEhlaWdodCA+IDAgPyBhZGp1c3RlZEhlaWdodCAvIGluaXRpYWxWaWV3cG9ydC5oZWlnaHQgOiAwOwogICAgICAgIGNvbnN0IGJhc2VTY2FsZSA9IE1hdGgubWluKHNjYWxlWCB8fCAwLjUsIHNjYWxlWSB8fCBzY2FsZVggfHwgMC41KTsKICAgICAgICBjb25zdCByZW5kZXJTY2FsZSA9IE1hdGgubWluKGJhc2VTY2FsZSAqIDIsIDMpOwogICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHJlbmRlclNjYWxlKSB8fCByZW5kZXJTY2FsZSA8PSAwKSB7CiAgICAgICAgICBwYWdlLmNsZWFudXA/LigpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHBhZ2UuZ2V0Vmlld3BvcnQoeyBzY2FsZTogcmVuZGVyU2NhbGUgfSk7CiAgICAgICAgY29uc3QgcG9vbGVkQ2FudmFzID0gQ2FudmFzUG9vbC5hY3F1aXJlKHZpZXdwb3J0LndpZHRoLCB2aWV3cG9ydC5oZWlnaHQpOwogICAgICAgIHRoaXMuY2FudmFzZXMucHVzaChwb29sZWRDYW52YXMpOwogICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7CiAgICAgICAgICBjYW52YXNDb250ZXh0OiBwb29sZWRDYW52YXMuY3R4LAogICAgICAgICAgdmlld3BvcnQKICAgICAgICB9OwogICAgICAgIGF3YWl0IHBhZ2UucmVuZGVyKHJlbmRlckNvbnRleHQpLnByb21pc2U7CiAgICAgICAgY2FudmFzLndpZHRoID0gdmlld3BvcnQud2lkdGg7CiAgICAgICAgY2FudmFzLmhlaWdodCA9IHZpZXdwb3J0LmhlaWdodDsKICAgICAgICBjb25zdCBkaXNwbGF5V2lkdGggPSBhZGp1c3RlZFdpZHRoOwogICAgICAgIGNvbnN0IGRpc3BsYXlIZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQgLyB2aWV3cG9ydC53aWR0aCAqIGFkanVzdGVkV2lkdGg7CiAgICAgICAgaWYgKGRpc3BsYXlIZWlnaHQgPiBhZGp1c3RlZEhlaWdodCkgewogICAgICAgICAgY29uc3QgYWx0RGlzcGxheUhlaWdodCA9IGFkanVzdGVkSGVpZ2h0OwogICAgICAgICAgY29uc3QgYWx0RGlzcGxheVdpZHRoID0gdmlld3BvcnQud2lkdGggLyB2aWV3cG9ydC5oZWlnaHQgKiBhZGp1c3RlZEhlaWdodDsKICAgICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke2FsdERpc3BsYXlXaWR0aH1weGA7CiAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7YWx0RGlzcGxheUhlaWdodH1weGA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke2Rpc3BsYXlXaWR0aH1weGA7CiAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7ZGlzcGxheUhlaWdodH1weGA7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgIGlmIChjdHgpIHsKICAgICAgICAgIGN0eC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSB0cnVlOwogICAgICAgICAgY3R4LmltYWdlU21vb3RoaW5nUXVhbGl0eSA9ICJoaWdoIjsKICAgICAgICAgIGN0eC5kcmF3SW1hZ2UocG9vbGVkQ2FudmFzLmNhbnZhcywgMCwgMCk7CiAgICAgICAgfQogICAgICAgIHBhZ2UuY2xlYW51cCgpOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byByZW5kZXIgcGFnZSAke3RoaXMuY3VycmVudFByZXZpZXdQYWdlfTpgLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICAgIGNsZWFyQ2FudmFzZXMoKSB7CiAgICAgIGZvciAoY29uc3QgcG9vbGVkQ2FudmFzIG9mIHRoaXMuY2FudmFzZXMpIHsKICAgICAgICBDYW52YXNQb29sLnJlbGVhc2UocG9vbGVkQ2FudmFzKTsKICAgICAgfQogICAgICB0aGlzLmNhbnZhc2VzID0gW107CiAgICB9CiAgICBjbGVhbnVwKCkgewogICAgICB0aGlzLmNsZWFyQ2FudmFzZXMoKTsKICAgICAgaWYgKHRoaXMucGRmRG9jdW1lbnQpIHsKICAgICAgICBQZGZNYW5hZ2VyLnJlbGVhc2VEb2N1bWVudCh0aGlzLmxvYWRlZFBkZlVybCA/PyB0aGlzLnBkZlVybCk7CiAgICAgICAgdGhpcy5wZGZEb2N1bWVudCA9IG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5yZW5kZXJQYWdlc1F1ZXVlZCA9IGZhbHNlOwogICAgICB0aGlzLnBhZ2VDb3VudCA9IDA7CiAgICAgIHRoaXMuY3VycmVudFByZXZpZXdQYWdlID0gMTsKICAgICAgdGhpcy5pc0hvdmVyaW5nID0gZmFsc2U7CiAgICAgIHRoaXMuaXNBNEZvcm1hdCA9IHRydWU7CiAgICAgIHRoaXMucHJldmlld0NvbnRhaW5lciA9IG51bGw7CiAgICAgIHRoaXMuc3RhY2tFbGVtZW50ID0gbnVsbDsKICAgICAgdGhpcy5sb2FkZWRQZGZVcmwgPSBudWxsOwogICAgICB0aGlzLnJlbmRlcmVkID0gZmFsc2U7CiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICB0aGlzLmVycm9yID0gZmFsc2U7CiAgICB9CiAgICBoYW5kbGVDbGljaygpIHsKICAgICAgaWYgKCF0aGlzLmNsaWNrYWJsZSkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInBkZi1wcmV2aWV3LWNsaWNrIiwgewogICAgICAgIGRldGFpbDogewogICAgICAgICAgcGRmVXJsOiB0aGlzLnBkZlVybCwKICAgICAgICAgIHBhZ2VDb3VudDogdGhpcy5wYWdlQ291bnQKICAgICAgICB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygicGRmVXJsIikgJiYgdGhpcy5wZGZVcmwpIHsKICAgICAgICBjb25zdCBwcmV2aW91c1VybCA9IGNoYW5nZWRQcm9wZXJ0aWVzLmdldCgicGRmVXJsIik7CiAgICAgICAgaWYgKHByZXZpb3VzVXJsKSB7CiAgICAgICAgICBQZGZNYW5hZ2VyLnJlbGVhc2VEb2N1bWVudChwcmV2aW91c1VybCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuY2xlYW51cCgpOwogICAgICAgIHRoaXMucmVuZGVyZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZSA9IDE7CiAgICAgICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHsKICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgaWYgKHJlY3QudG9wIDwgd2luZG93LmlubmVySGVpZ2h0ICYmIHJlY3QuYm90dG9tID4gMCkgewogICAgICAgICAgICB0aGlzLmxvYWRBbmRSZW5kZXJQcmV2aWV3KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImN1cnJlbnRQcmV2aWV3UGFnZSIpICYmIHRoaXMucmVuZGVyZWQpIHsKICAgICAgICBhd2FpdCB0aGlzLnNjaGVkdWxlUmVuZGVyUGFnZXMoKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBQcm92aWRlIGNvbnRleHQgbWVudSBpdGVtcyBmb3IgcmlnaHQtY2xpY2sgZnVuY3Rpb25hbGl0eQogICAgICovCiAgICBnZXRDb250ZXh0TWVudUl0ZW1zKCkgewogICAgICBjb25zdCBpdGVtcyA9IFtdOwogICAgICBpZiAodGhpcy5jbGlja2FibGUpIHsKICAgICAgICBpdGVtcy5wdXNoKHsKICAgICAgICAgIG5hbWU6ICJWaWV3IFBERiIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpFeWUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9KTsKICAgICAgfQogICAgICBpdGVtcy5wdXNoKHsKICAgICAgICBuYW1lOiAiT3BlbiBQREYgaW4gTmV3IFRhYiIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6RXh0ZXJuYWxMaW5rIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMucGRmVXJsLCAiX2JsYW5rIik7CiAgICAgICAgfQogICAgICB9LCB7IGRpdmlkZXI6IHRydWUgfSwgewogICAgICAgIG5hbWU6ICJDb3B5IFBERiBVUkwiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOkNvcHkiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5wZGZVcmwpOwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIG5hbWU6ICJEb3dubG9hZCBQREYiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOkRvd25sb2FkIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IGxpbmszID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwogICAgICAgICAgbGluazMuaHJlZiA9IHRoaXMucGRmVXJsOwogICAgICAgICAgbGluazMuZG93bmxvYWQgPSB0aGlzLnBkZlVybC5zcGxpdCgiLyIpLnBvcCgpIHx8ICJkb2N1bWVudC5wZGYiOwogICAgICAgICAgbGluazMuY2xpY2soKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBpZiAodGhpcy5wYWdlQ291bnQgPiAwKSB7CiAgICAgICAgaXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSwgewogICAgICAgICAgbmFtZTogYCR7dGhpcy5wYWdlQ291bnR9IHBhZ2Uke3RoaXMucGFnZUNvdW50ID4gMSA/ICJzIiA6ICIifWAsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpGaWxlVGV4dCIsCiAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBpdGVtczsKICAgIH0KICAgIGNhY2hlRWxlbWVudHMoKSB7CiAgICAgIGlmICghdGhpcy5wcmV2aWV3Q29udGFpbmVyKSB7CiAgICAgICAgdGhpcy5wcmV2aWV3Q29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIucHJldmlldy1jb250YWluZXIiKTsKICAgICAgfQogICAgICBpZiAoIXRoaXMuc3RhY2tFbGVtZW50KSB7CiAgICAgICAgdGhpcy5zdGFja0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wcmV2aWV3LXN0YWNrIik7CiAgICAgIH0KICAgIH0KICAgIHNldHVwUmVzaXplT2JzZXJ2ZXIoKSB7CiAgICAgIGlmICghdGhpcy5wcmV2aWV3Q29udGFpbmVyIHx8IHRoaXMucmVzaXplT2JzZXJ2ZXIpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHsKICAgICAgICBpZiAodGhpcy5yZW5kZXJlZCAmJiB0aGlzLnBkZkRvY3VtZW50ICYmICF0aGlzLmxvYWRpbmcpIHsKICAgICAgICAgIHZvaWQgdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMpOwogICAgfQogICAgZ2V0QXZhaWxhYmxlU2l6ZSgpIHsKICAgICAgaWYgKCF0aGlzLnN0YWNrRWxlbWVudCkgewogICAgICAgIHRoaXMuc3RhY2tFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIucHJldmlldy1zdGFjayIpOwogICAgICB9CiAgICAgIGlmICghdGhpcy5zdGFja0VsZW1lbnQpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgYXZhaWxhYmxlV2lkdGg6IDIwMCwKICAgICAgICAgIC8vIEZ1bGwgY29udGFpbmVyIHdpZHRoCiAgICAgICAgICBhdmFpbGFibGVIZWlnaHQ6IDI2MAogICAgICAgICAgLy8gRnVsbCBjb250YWluZXIgaGVpZ2h0CiAgICAgICAgfTsKICAgICAgfQogICAgICBjb25zdCByZWN0ID0gdGhpcy5zdGFja0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gTWF0aC5tYXgocmVjdC53aWR0aCwgMCkgfHwgMjAwOwogICAgICBjb25zdCBhdmFpbGFibGVIZWlnaHQgPSBNYXRoLm1heChyZWN0LmhlaWdodCwgMCkgfHwgMjYwOwogICAgICByZXR1cm4geyBhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0IH07CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczY5KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzUGRmUHJldmlldzIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXBkZi9kZWVzLXBkZi12aWV3ZXIvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciB2aWV3ZXJTdHlsZXMgPSBbCiAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogIGlgCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiA2MDBweDsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICBjb250YWluOiBsYXlvdXQgc3R5bGU7CiAgICB9CgogICAgLnBkZi12aWV3ZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMjE1IDIwJSAxMCUpIil9OwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnRvb2xiYXIgewogICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwJSAxNSUpIil9OwogICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDkxJSkiLCAiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICBnYXA6IDE2cHg7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgfQoKICAgIC50b29sYmFyLWdyb3VwIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgZ2FwOiA0cHg7CiAgICB9CgogICAgLnRvb2xiYXItZ3JvdXAtLWVuZCB7CiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgfQoKICAgIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAudG9vbGJhci1idXR0b246aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgOTIlKSIsICJoc2woMjE3IDI1JSAyMiUpIil9OwogICAgfQoKICAgIC50b29sYmFyLWJ1dHRvbjpkaXNhYmxlZCB7CiAgICAgIG9wYWNpdHk6IDAuNDsKICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgIH0KCiAgICAudG9vbGJhci1idXR0b24gZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgfQoKICAgIC5wYWdlLWluZm8gewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwgImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICB9CgogICAgLnBhZ2UtaW5wdXQgewogICAgICB3aWR0aDogNDhweDsKICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA4NiUpIiwgImhzbCgyMTcgMjUlIDI4JSkiKX07CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwJSAxMiUpIil9OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIgNDclIDExJSkiLCAiaHNsKDIxMCAyMCUgOTYlKSIpfTsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIC5wYWdlLWlucHV0OmZvY3VzIHsKICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgfQoKICAgIC5wYWdlLXNlcGFyYXRvciB7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNjAlKSIsICJoc2woMjE1IDE2JSA1MCUpIil9OwogICAgfQoKICAgIC56b29tLWxldmVsIHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICBtaW4td2lkdGg6IDQ4cHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAudmlld2VyLWNvbnRhaW5lciB7CiAgICAgIGZsZXg6IDE7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgbWluLWhlaWdodDogMDsKICAgIH0KCiAgICAuc2lkZWJhciB7CiAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMjAlIDE1JSkiKX07CiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MSUpIiwgImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAuc2lkZWJhci1oZWFkZXIgewogICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDkxJSkiLCAiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAuc2lkZWJhci1jbG9zZSB7CiAgICAgIHdpZHRoOiAyNHB4OwogICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwgImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgIH0KCiAgICAuc2lkZWJhci1jbG9zZTpob3ZlciB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MiUpIiwgImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICB9CgogICAgLnNpZGViYXItY2xvc2UgZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgfQoKICAgIC5zaWRlYmFyLWNvbnRlbnQgewogICAgICBmbGV4OiAxOwogICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICBtaW4taGVpZ2h0OiAwOwogICAgfQoKICAgIC50aHVtYm5haWwgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgyMTUgMjAlIDE4JSkiKX07CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgLyogRGVmYXVsdCBBNCBhc3BlY3QgcmF0aW8gKDI5N21tIC8gMjEwbW0g4omIIDEuNDE0KSAqLwogICAgICBtaW4taGVpZ2h0OiBjYWxjKDE3NnB4ICogMS40MTQpOwogICAgfQoKICAgIC50aHVtYm5haWw6bGFzdC1jaGlsZCB7CiAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICB9CgogICAgLnRodW1ibmFpbDpob3ZlciB7CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDg2JSkiLCAiaHNsKDIxNyAyNSUgMzUlKSIpfTsKICAgIH0KCiAgICAudGh1bWJuYWlsLmFjdGl2ZSB7CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAudGh1bWJuYWlsLWNhbnZhcyB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICBpbWFnZS1yZW5kZXJpbmc6IC13ZWJraXQtb3B0aW1pemUtY29udHJhc3Q7CiAgICAgIGltYWdlLXJlbmRlcmluZzogY3Jpc3AtZWRnZXM7CiAgICB9CgogICAgLnRodW1ibmFpbC1udW1iZXIgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJvdHRvbTogNHB4OwogICAgICByaWdodDogNHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjcpIiwgInJnYmEoMCwgMCwgMCwgMC44KSIpfTsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIH0KCiAgICAudmlld2VyLW1haW4gewogICAgICBmbGV4OiAxOwogICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoOwogICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICBtaW4taGVpZ2h0OiAwOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgLmxvYWRpbmctY29udGFpbmVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgZ2FwOiAxNnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAubG9hZGluZy1zcGlubmVyIHsKICAgICAgd2lkdGg6IDMycHg7CiAgICAgIGhlaWdodDogMzJweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBib3JkZXI6IDNweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgODYlKSIsICJoc2woMjE3IDI1JSAyOCUpIil9OwogICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICB9CgogICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgIH0KICAgIH0KCiAgICAubG9hZGluZy10ZXh0IHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIC5wYWdlcy1jb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDIwcHg7CiAgICB9CgogICAgLnBhZ2Utd3JhcHBlciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAuY2FudmFzLWNvbnRhaW5lciB7CiAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICBib3gtc2hhZG93OiAwIDJweCAxMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIH0KCiAgICAucGFnZS1jYW52YXMgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgaW1hZ2UtcmVuZGVyaW5nOiAtd2Via2l0LW9wdGltaXplLWNvbnRyYXN0OwogICAgICBpbWFnZS1yZW5kZXJpbmc6IGNyaXNwLWVkZ2VzOwogICAgfQoKICAgIC5wZGYtdmlld2VyLndpdGgtc2lkZWJhciAudmlld2VyLW1haW4gewogICAgICBtYXJnaW4tbGVmdDogMDsKICAgIH0KICBgCl07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcGRmL2RlZXMtcGRmLXZpZXdlci9kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vMiA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICB9CgogICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgIG1hcmdpbi1ib3R0b206IDQwcHg7CiAgICB9CgogICAgaDMgewogICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICB9CgogICAgZGVlcy1wZGYtdmlld2VyIHsKICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC52aWV3ZXItdGFsbCB7CiAgICAgIGhlaWdodDogODAwcHg7CiAgICB9CgogICAgLnZpZXdlci1jb21wYWN0IHsKICAgICAgaGVpZ2h0OiA1MDBweDsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+RnVsbCBGZWF0dXJlZCBQREYgVmlld2VyIHdpdGggVG9vbGJhcjwvaDM+CiAgICAgIDxkZWVzLXBkZi12aWV3ZXIKICAgICAgICBjbGFzcz0idmlld2VyLXRhbGwiCiAgICAgICAgcGRmVXJsPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvd2ViL2NvbXByZXNzZWQudHJhY2Vtb25rZXktcGxkaS0wOS5wZGYiCiAgICAgICAgc2hvd1Rvb2xiYXI9InRydWUiCiAgICAgICAgc2hvd1NpZGViYXI9ImZhbHNlIgogICAgICAgIGluaXRpYWxab29tPSJwYWdlLWZpdCIKICAgICAgPjwvZGVlcy1wZGYtdmlld2VyPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPlBERiBWaWV3ZXIgd2l0aCBTaWRlYmFyIE5hdmlnYXRpb248L2gzPgogICAgICA8ZGVlcy1wZGYtdmlld2VyCiAgICAgICAgY2xhc3M9InZpZXdlci10YWxsIgogICAgICAgIHBkZlVybD0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL3dlYi9jb21wcmVzc2VkLnRyYWNlbW9ua2V5LXBsZGktMDkucGRmIgogICAgICAgIHNob3dUb29sYmFyPSJ0cnVlIgogICAgICAgIHNob3dTaWRlYmFyPSJ0cnVlIgogICAgICAgIGluaXRpYWxab29tPSJwYWdlLXdpZHRoIgogICAgICA+PC9kZWVzLXBkZi12aWV3ZXI+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+Q29tcGFjdCBWaWV3ZXIgd2l0aG91dCBDb250cm9sczwvaDM+CiAgICAgIDxkZWVzLXBkZi12aWV3ZXIKICAgICAgICBjbGFzcz0idmlld2VyLWNvbXBhY3QiCiAgICAgICAgcGRmVXJsPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvZXhhbXBsZXMvbGVhcm5pbmcvaGVsbG93b3JsZC5wZGYiCiAgICAgICAgc2hvd1Rvb2xiYXI9ImZhbHNlIgogICAgICAgIHNob3dTaWRlYmFyPSJmYWxzZSIKICAgICAgICBpbml0aWFsWm9vbT0iYXV0byIKICAgICAgPjwvZGVlcy1wZGYtdmlld2VyPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcGRmL2RlZXMtcGRmLXZpZXdlci9jb21wb25lbnQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKdmFyIF9fZXNEZWNvcmF0ZTY5ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3MCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1BkZlZpZXdlciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtcGRmLXZpZXdlciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3BkZlVybF9kZWNvcmF0b3JzOwogIGxldCBfcGRmVXJsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGRmVXJsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbml0aWFsUGFnZV9kZWNvcmF0b3JzOwogIGxldCBfaW5pdGlhbFBhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbml0aWFsUGFnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdGlhbFpvb21fZGVjb3JhdG9yczsKICBsZXQgX2luaXRpYWxab29tX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdGlhbFpvb21fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dUb29sYmFyX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93VG9vbGJhcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dUb29sYmFyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93U2lkZWJhcl9kZWNvcmF0b3JzOwogIGxldCBfc2hvd1NpZGViYXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93U2lkZWJhcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFBhZ2VfZGVjb3JhdG9yczsKICBsZXQgX2N1cnJlbnRQYWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFBhZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RvdGFsUGFnZXNfZGVjb3JhdG9yczsKICBsZXQgX3RvdGFsUGFnZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90b3RhbFBhZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXJyZW50Wm9vbV9kZWNvcmF0b3JzOwogIGxldCBfY3VycmVudFpvb21faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXJyZW50Wm9vbV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbG9hZGluZ19kZWNvcmF0b3JzOwogIGxldCBfbG9hZGluZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RvY3VtZW50SWRfZGVjb3JhdG9yczsKICBsZXQgX2RvY3VtZW50SWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kb2N1bWVudElkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90aHVtYm5haWxEYXRhX2RlY29yYXRvcnM7CiAgbGV0IF90aHVtYm5haWxEYXRhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGh1bWJuYWlsRGF0YV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGFnZURhdGFfZGVjb3JhdG9yczsKICBsZXQgX3BhZ2VEYXRhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGFnZURhdGFfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1BkZlZpZXdlcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9wZGZVcmxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9pbml0aWFsUGFnZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2luaXRpYWxab29tX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc2hvd1Rvb2xiYXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2hvd1NpZGViYXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfY3VycmVudFBhZ2VfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF90b3RhbFBhZ2VzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfY3VycmVudFpvb21fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9sb2FkaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2RvY3VtZW50SWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF90aHVtYm5haWxEYXRhX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9wYWdlRGF0YV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfX2VzRGVjb3JhdGU2OSh0aGlzLCBudWxsLCBfcGRmVXJsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBkZlVybCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGRmVXJsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBkZlVybCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGRmVXJsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BkZlVybF9pbml0aWFsaXplcnMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OSh0aGlzLCBudWxsLCBfaW5pdGlhbFBhZ2VfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5pdGlhbFBhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImluaXRpYWxQYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmluaXRpYWxQYWdlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pbml0aWFsUGFnZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbml0aWFsUGFnZV9pbml0aWFsaXplcnMsIF9pbml0aWFsUGFnZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY5KHRoaXMsIG51bGwsIF9pbml0aWFsWm9vbV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbml0aWFsWm9vbSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdGlhbFpvb20iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5pdGlhbFpvb20sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmluaXRpYWxab29tID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2luaXRpYWxab29tX2luaXRpYWxpemVycywgX2luaXRpYWxab29tX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjkodGhpcywgbnVsbCwgX3Nob3dUb29sYmFyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dUb29sYmFyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93VG9vbGJhciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93VG9vbGJhciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd1Rvb2xiYXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1Rvb2xiYXJfaW5pdGlhbGl6ZXJzLCBfc2hvd1Rvb2xiYXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OSh0aGlzLCBudWxsLCBfc2hvd1NpZGViYXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1NpZGViYXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dTaWRlYmFyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dTaWRlYmFyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93U2lkZWJhciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93U2lkZWJhcl9pbml0aWFsaXplcnMsIF9zaG93U2lkZWJhcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY5KHRoaXMsIG51bGwsIF9jdXJyZW50UGFnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50UGFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudFBhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudFBhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1cnJlbnRQYWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRQYWdlX2luaXRpYWxpemVycywgX2N1cnJlbnRQYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjkodGhpcywgbnVsbCwgX3RvdGFsUGFnZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidG90YWxQYWdlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidG90YWxQYWdlcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50b3RhbFBhZ2VzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50b3RhbFBhZ2VzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RvdGFsUGFnZXNfaW5pdGlhbGl6ZXJzLCBfdG90YWxQYWdlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY5KHRoaXMsIG51bGwsIF9jdXJyZW50Wm9vbV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50Wm9vbSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudFpvb20iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudFpvb20sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1cnJlbnRab29tID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRab29tX2luaXRpYWxpemVycywgX2N1cnJlbnRab29tX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjkodGhpcywgbnVsbCwgX2xvYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibG9hZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibG9hZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sb2FkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sb2FkaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBfbG9hZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY5KHRoaXMsIG51bGwsIF9kb2N1bWVudElkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRvY3VtZW50SWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRvY3VtZW50SWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZG9jdW1lbnRJZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZG9jdW1lbnRJZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kb2N1bWVudElkX2luaXRpYWxpemVycywgX2RvY3VtZW50SWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OSh0aGlzLCBudWxsLCBfdGh1bWJuYWlsRGF0YV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0aHVtYm5haWxEYXRhIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aHVtYm5haWxEYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRodW1ibmFpbERhdGEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRodW1ibmFpbERhdGEgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGh1bWJuYWlsRGF0YV9pbml0aWFsaXplcnMsIF90aHVtYm5haWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjkodGhpcywgbnVsbCwgX3BhZ2VEYXRhX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBhZ2VEYXRhIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwYWdlRGF0YSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wYWdlRGF0YSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGFnZURhdGEgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGFnZURhdGFfaW5pdGlhbGl6ZXJzLCBfcGFnZURhdGFfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNQZGZWaWV3ZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtbzI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIlBERiI7CiAgICBzdGF0aWMgc3R5bGVzID0gdmlld2VyU3R5bGVzOwogICAgI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfcGRmVXJsX2luaXRpYWxpemVycywgIiIpOwogICAgZ2V0IHBkZlVybCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHBkZlVybCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGRmVXJsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaW5pdGlhbFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9pbml0aWFsUGFnZV9pbml0aWFsaXplcnMsIDEpKTsKICAgIGdldCBpbml0aWFsUGFnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2luaXRpYWxQYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaW5pdGlhbFBhZ2UodmFsdWUyKSB7CiAgICAgIHRoaXMuI2luaXRpYWxQYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaW5pdGlhbFpvb21fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9pbml0aWFsUGFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX2luaXRpYWxab29tX2luaXRpYWxpemVycywgImF1dG8iKSk7CiAgICBnZXQgaW5pdGlhbFpvb20oKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbml0aWFsWm9vbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGluaXRpYWxab29tKHZhbHVlMikgewogICAgICB0aGlzLiNpbml0aWFsWm9vbV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dUb29sYmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfaW5pdGlhbFpvb21fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9zaG93VG9vbGJhcl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzaG93VG9vbGJhcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dUb29sYmFyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1Rvb2xiYXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dUb29sYmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hvd1NpZGViYXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9zaG93VG9vbGJhcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX3Nob3dTaWRlYmFyX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93U2lkZWJhcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dTaWRlYmFyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1NpZGViYXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dTaWRlYmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VycmVudFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9zaG93U2lkZWJhcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX2N1cnJlbnRQYWdlX2luaXRpYWxpemVycywgMSkpOwogICAgZ2V0IGN1cnJlbnRQYWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50UGFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VycmVudFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN0b3RhbFBhZ2VzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfY3VycmVudFBhZ2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF90b3RhbFBhZ2VzX2luaXRpYWxpemVycywgMSkpOwogICAgZ2V0IHRvdGFsUGFnZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0b3RhbFBhZ2VzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdG90YWxQYWdlcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdG90YWxQYWdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1cnJlbnRab29tX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfdG90YWxQYWdlc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX2N1cnJlbnRab29tX2luaXRpYWxpemVycywgMSkpOwogICAgZ2V0IGN1cnJlbnRab29tKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFpvb21fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50Wm9vbSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VycmVudFpvb21fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfY3VycmVudFpvb21fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9sb2FkaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBsb2FkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jbG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxvYWRpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkb2N1bWVudElkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfbG9hZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX2RvY3VtZW50SWRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGRvY3VtZW50SWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkb2N1bWVudElkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZG9jdW1lbnRJZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZG9jdW1lbnRJZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RodW1ibmFpbERhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9kb2N1bWVudElkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfdGh1bWJuYWlsRGF0YV9pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgdGh1bWJuYWlsRGF0YSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3RodW1ibmFpbERhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0aHVtYm5haWxEYXRhKHZhbHVlMikgewogICAgICB0aGlzLiN0aHVtYm5haWxEYXRhX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcGFnZURhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF90aHVtYm5haWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfcGFnZURhdGFfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IHBhZ2VEYXRhKCkgewogICAgICByZXR1cm4gdGhpcy4jcGFnZURhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwYWdlRGF0YSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGFnZURhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHBkZkRvY3VtZW50ID0gX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfcGFnZURhdGFfZXh0cmFJbml0aWFsaXplcnMpOwogICAgcmVuZGVyU3RhdGUgPSAiaWRsZSI7CiAgICByZW5kZXJBYm9ydENvbnRyb2xsZXIgPSBudWxsOwogICAgcGFnZVJlbmRlcmluZyA9IGZhbHNlOwogICAgcGFnZU51bVBlbmRpbmcgPSBudWxsOwogICAgY3VycmVudFJlbmRlclRhc2sgPSBudWxsOwogICAgY3VycmVudFJlbmRlclByb21pc2UgPSBudWxsOwogICAgdGh1bWJuYWlsUmVuZGVyVGFza3MgPSBbXTsKICAgIHBhZ2VSZW5kZXJUYXNrcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBjYW52YXM7CiAgICBjdHg7CiAgICB2aWV3ZXJNYWluID0gbnVsbDsKICAgIHJlc2l6ZU9ic2VydmVyOwogICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXI7CiAgICBzY3JvbGxUaHJvdHRsZVRpbWVvdXQ7CiAgICB2aWV3cG9ydERpbWVuc2lvbnMgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTsKICAgIHZpZXdwb3J0TW9kZSA9ICJhdXRvIjsKICAgIE1BTlVBTF9NSU5fWk9PTSA9IDAuNTsKICAgIE1BTlVBTF9NQVhfWk9PTSA9IDM7CiAgICBBQlNPTFVURV9NSU5fWk9PTSA9IDAuMTsKICAgIEFCU09MVVRFX01BWF9aT09NID0gNDsKICAgIFBBR0VfR0FQID0gMjA7CiAgICBSRU5ERVJfQlVGRkVSID0gMzsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InBkZi12aWV3ZXIgJHt0aGlzLnNob3dTaWRlYmFyID8gIndpdGgtc2lkZWJhciIgOiAiIn0iPgogICAgICAgICR7dGhpcy5zaG93VG9vbGJhciA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItZ3JvdXAiPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMucHJldmlvdXNQYWdlfQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5jdXJyZW50UGFnZSA8PSAxfQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkNoZXZyb25MZWZ0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlLWluZm8iPgogICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICAgICAgICAgICAgbWluPSIxIgogICAgICAgICAgICAgICAgICBtYXg9IiR7dGhpcy50b3RhbFBhZ2VzfSIKICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7U3RyaW5nKHRoaXMuY3VycmVudFBhZ2UpfQogICAgICAgICAgICAgICAgICBAY2hhbmdlPSR7dGhpcy5oYW5kbGVQYWdlSW5wdXR9CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJwYWdlLWlucHV0IgogICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYWdlLXNlcGFyYXRvciI+Lzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYWdlLXRvdGFsIj4ke3RoaXMudG90YWxQYWdlc308L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5uZXh0UGFnZX0KICAgICAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuY3VycmVudFBhZ2UgPj0gdGhpcy50b3RhbFBhZ2VzfQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkNoZXZyb25SaWdodCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCI+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy56b29tT3V0fQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7IXRoaXMuY2FuWm9vbU91dH0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpab29tT3V0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnJlc2V0Wm9vbX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iem9vbS1sZXZlbCI+JHtNYXRoLnJvdW5kKHRoaXMuY3VycmVudFpvb20gKiAxMDApfSU8L3NwYW4+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy56b29tSW59CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5jYW5ab29tSW59CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Wm9vbUluIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWdyb3VwIj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmZpdFRvUGFnZX0KICAgICAgICAgICAgICAgIHRpdGxlPSJGaXQgdG8gcGFnZSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpNYXhpbWl6ZSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5maXRUb1dpZHRofQogICAgICAgICAgICAgICAgdGl0bGU9IkZpdCB0byB3aWR0aCIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpBcnJvd0xlZnRSaWdodCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCB0b29sYmFyLWdyb3VwLS1lbmQiPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2hvd1NpZGViYXIgPSAhdGhpcy5zaG93U2lkZWJhcn0KICAgICAgICAgICAgICAgIHRpdGxlPSIke3RoaXMuc2hvd1NpZGViYXIgPyAiSGlkZSB0aHVtYm5haWxzIiA6ICJTaG93IHRodW1ibmFpbHMifSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249IiR7dGhpcy5zaG93U2lkZWJhciA/ICJsdWNpZGU6U2lkZWJhckNsb3NlIiA6ICJsdWNpZGU6U2lkZWJhciJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmRvd25sb2FkUGRmfQogICAgICAgICAgICAgICAgdGl0bGU9IkRvd25sb2FkIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkRvd25sb2FkIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnByaW50UGRmfQogICAgICAgICAgICAgICAgdGl0bGU9IlByaW50IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlByaW50ZXIiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KCiAgICAgICAgPGRpdiBjbGFzcz0idmlld2VyLWNvbnRhaW5lciI+CiAgICAgICAgICAke3RoaXMuc2hvd1NpZGViYXIgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1oZWFkZXIiPgogICAgICAgICAgICAgICAgPHNwYW4+UGFnZXM8L3NwYW4+CiAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJzaWRlYmFyLWNsb3NlIgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dTaWRlYmFyID0gZmFsc2V9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlgiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1jb250ZW50Ij4KICAgICAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLmtleWVkKHRoaXMuZG9jdW1lbnRJZCwgYjJgCiAgICAgICAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlcGVhdCh0aGlzLnRodW1ibmFpbERhdGEsIChpdGVtKSA9PiBpdGVtLnBhZ2UsIChpdGVtKSA9PiBiMmAKICAgICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRodW1ibmFpbCAke3RoaXMuY3VycmVudFBhZ2UgPT09IGl0ZW0ucGFnZSA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXBhZ2U9IiR7aXRlbS5wYWdlfSIKICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVUaHVtYm5haWxDbGlja30KICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPGNhbnZhcyBjbGFzcz0idGh1bWJuYWlsLWNhbnZhcyIgZGF0YS1wYWdlPSIke2l0ZW0ucGFnZX0iPjwvY2FudmFzPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGh1bWJuYWlsLW51bWJlciI+JHtpdGVtLnBhZ2V9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgPGRpdiBjbGFzcz0idmlld2VyLW1haW4iIEBzY3JvbGw9JHt0aGlzLmhhbmRsZVNjcm9sbH0+CiAgICAgICAgICAgICR7dGhpcy5sb2FkaW5nID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1jb250YWluZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1zcGlubmVyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctdGV4dCI+TG9hZGluZyBQREYuLi48L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCA6IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2VzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAke2RpcmVjdGl2ZXNfZXhwb3J0cy5yZXBlYXQodGhpcy5wYWdlRGF0YSwgKGl0ZW0pID0+IGl0ZW0ucGFnZSwgKGl0ZW0pID0+IGIyYAogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2Utd3JhcHBlciIgZGF0YS1wYWdlPSIke2l0ZW0ucGFnZX0iPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FudmFzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxjYW52YXMgY2xhc3M9InBhZ2UtY2FudmFzIiBkYXRhLXBhZ2U9IiR7aXRlbS5wYWdlfSI+PC9jYW52YXM+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGB9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIHRoaXMuZW5zdXJlVmlld2VyUmVmcygpOwogICAgICBpZiAodGhpcy5wZGZVcmwpIHsKICAgICAgICB0aGlzLmRvY3VtZW50SWQgPSBgJHt0aGlzLnBkZlVybH0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCl9YDsKICAgICAgICBhd2FpdCB0aGlzLmxvYWRQZGYoKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IHZvaWQgMDsKICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj8uZGlzY29ubmVjdCgpOwogICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyID0gdm9pZCAwOwogICAgICBpZiAodGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQpOwogICAgICAgIHRoaXMuc2Nyb2xsVGhyb3R0bGVUaW1lb3V0ID0gdm9pZCAwOwogICAgICB9CiAgICAgIHRoaXMucmVuZGVyU3RhdGUgPSAiZGlzcG9zZWQiOwogICAgICBhd2FpdCB0aGlzLmNsZWFudXBEb2N1bWVudCgpOwogICAgICB0aGlzLmNhbnZhcyA9IHZvaWQgMDsKICAgICAgdGhpcy5jdHggPSB2b2lkIDA7CiAgICB9CiAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJwZGZVcmwiKSAmJiB0aGlzLnBkZlVybCkgewogICAgICAgIGNvbnN0IHByZXZpb3VzVXJsID0gY2hhbmdlZFByb3BlcnRpZXMuZ2V0KCJwZGZVcmwiKTsKICAgICAgICBpZiAocHJldmlvdXNVcmwpIHsKICAgICAgICAgIFBkZk1hbmFnZXIucmVsZWFzZURvY3VtZW50KHByZXZpb3VzVXJsKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5kb2N1bWVudElkID0gYCR7dGhpcy5wZGZVcmx9LSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpfWA7CiAgICAgICAgYXdhaXQgdGhpcy5sb2FkUGRmKCk7CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygic2hvd1NpZGViYXIiKSAmJiB0aGlzLnNob3dTaWRlYmFyICYmIHRoaXMucGRmRG9jdW1lbnQpIHsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICAgIHRoaXMudGh1bWJuYWlsRGF0YS5mb3JFYWNoKCh0aHVtYikgPT4gdGh1bWIucmVuZGVyZWQgPSBmYWxzZSk7CiAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJUaHVtYm5haWxzKCk7CiAgICAgICAgdGhpcy5zZXR1cEludGVyc2VjdGlvbk9ic2VydmVyKCk7CiAgICAgICAgdGhpcy5zY3JvbGxUaHVtYm5haWxJbnRvVmlldyh0aGlzLmN1cnJlbnRQYWdlKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgbG9hZFBkZigpIHsKICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgICAgdGhpcy5yZW5kZXJTdGF0ZSA9ICJsb2FkaW5nIjsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXBEb2N1bWVudCgpOwogICAgICAgIHRoaXMucmVuZGVyQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMucmVuZGVyQWJvcnRDb250cm9sbGVyLnNpZ25hbDsKICAgICAgICB0aGlzLnBkZkRvY3VtZW50ID0gYXdhaXQgUGRmTWFuYWdlci5sb2FkRG9jdW1lbnQodGhpcy5wZGZVcmwpOwogICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkKICAgICAgICAgIHJldHVybjsKICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSB0aGlzLnBkZkRvY3VtZW50Lm51bVBhZ2VzOwogICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLmluaXRpYWxQYWdlOwogICAgICAgIHRoaXMucmVzb2x2ZUluaXRpYWxWaWV3cG9ydE1vZGUoKTsKICAgICAgICB0aGlzLnRodW1ibmFpbERhdGEgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLnRvdGFsUGFnZXMgfSwgKF80LCBpMTEpID0+ICh7CiAgICAgICAgICBwYWdlOiBpMTEgKyAxLAogICAgICAgICAgcmVuZGVyZWQ6IGZhbHNlCiAgICAgICAgfSkpOwogICAgICAgIHRoaXMucGFnZURhdGEgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLnRvdGFsUGFnZXMgfSwgKF80LCBpMTEpID0+ICh7CiAgICAgICAgICBwYWdlOiBpMTEgKyAxLAogICAgICAgICAgcmVuZGVyZWQ6IGZhbHNlLAogICAgICAgICAgcmVuZGVyaW5nOiBmYWxzZQogICAgICAgIH0pKTsKICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgIHRoaXMuZW5zdXJlVmlld2VyUmVmcygpOwogICAgICAgIHRoaXMuc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpOwogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIHRoaXMucmVuZGVyU3RhdGUgPSAicmVuZGVyaW5nLW1haW4iOwogICAgICAgIGF3YWl0IHRoaXMucmVuZGVyVmlzaWJsZVBhZ2VzKCk7CiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmICh0aGlzLmluaXRpYWxQYWdlID4gMSkgewogICAgICAgICAgYXdhaXQgdGhpcy5zY3JvbGxUb1BhZ2UodGhpcy5pbml0aWFsUGFnZSwgZmFsc2UpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5zaG93U2lkZWJhcikgewogICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyVGh1bWJuYWlscygpOwogICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMucmVuZGVyU3RhdGUgPSAicmVuZGVyZWQiOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGxvYWRpbmcgUERGOiIsIGVycm9yKTsKICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICB0aGlzLnJlbmRlclN0YXRlID0gImVycm9yIjsKICAgICAgfQogICAgfQogICAgc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHsKICAgICAgaWYgKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHsKICAgICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgfQogICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7CiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICAgICAgICBjb25zdCBwYWdlV3JhcHBlciA9IGVudHJ5LnRhcmdldDsKICAgICAgICAgIGNvbnN0IHBhZ2VOdW0gPSBwYXJzZUludChwYWdlV3JhcHBlci5kYXRhc2V0LnBhZ2UgfHwgIjEiKTsKICAgICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykgewogICAgICAgICAgICB0aGlzLnJlbmRlclBhZ2VJZk5lZWRlZChwYWdlTnVtKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICByb290OiB0aGlzLnZpZXdlck1haW4sCiAgICAgICAgcm9vdE1hcmdpbjogYCR7dGhpcy5SRU5ERVJfQlVGRkVSICogMTAwfXB4IDBweGAsCiAgICAgICAgdGhyZXNob2xkOiAwLjAxCiAgICAgIH0pOwogICAgICBjb25zdCBwYWdlV3JhcHBlcnMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5wYWdlLXdyYXBwZXIiKTsKICAgICAgaWYgKHBhZ2VXcmFwcGVycykgewogICAgICAgIHBhZ2VXcmFwcGVycy5mb3JFYWNoKCh3cmFwcGVyKSA9PiB7CiAgICAgICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPy5vYnNlcnZlKHdyYXBwZXIpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBhc3luYyByZW5kZXJWaXNpYmxlUGFnZXMoKSB7CiAgICAgIGlmICghdGhpcy52aWV3ZXJNYWluKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgY2xpZW50SGVpZ2h0ID0gdGhpcy52aWV3ZXJNYWluLmNsaWVudEhlaWdodDsKICAgICAgZm9yIChjb25zdCBwYWdlSW5mbyBvZiB0aGlzLnBhZ2VEYXRhKSB7CiAgICAgICAgY29uc3QgcGFnZVdyYXBwZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYC5wYWdlLXdyYXBwZXJbZGF0YS1wYWdlPSIke3BhZ2VJbmZvLnBhZ2V9Il1gKTsKICAgICAgICBpZiAoIXBhZ2VXcmFwcGVyKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgY29uc3QgcmVjdCA9IHBhZ2VXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IHZpZXdlclJlY3QgPSB0aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgcmVsYXRpdmVUb3AgPSByZWN0LnRvcCAtIHZpZXdlclJlY3QudG9wOwogICAgICAgIGNvbnN0IHJlbGF0aXZlQm90dG9tID0gcmVsYXRpdmVUb3AgKyByZWN0LmhlaWdodDsKICAgICAgICBjb25zdCBidWZmZXIyID0gdGhpcy5SRU5ERVJfQlVGRkVSICogY2xpZW50SGVpZ2h0OwogICAgICAgIGlmIChyZWxhdGl2ZUJvdHRvbSA+PSAtYnVmZmVyMiAmJiByZWxhdGl2ZVRvcCA8PSBjbGllbnRIZWlnaHQgKyBidWZmZXIyKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlclBhZ2VJZk5lZWRlZChwYWdlSW5mby5wYWdlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHJlbmRlclBhZ2VJZk5lZWRlZChwYWdlTnVtKSB7CiAgICAgIGNvbnN0IHBhZ2VJbmZvID0gdGhpcy5wYWdlRGF0YS5maW5kKChwNykgPT4gcDcucGFnZSA9PT0gcGFnZU51bSk7CiAgICAgIGlmICghcGFnZUluZm8gfHwgcGFnZUluZm8ucmVuZGVyZWQgfHwgcGFnZUluZm8ucmVuZGVyaW5nKQogICAgICAgIHJldHVybjsKICAgICAgcGFnZUluZm8ucmVuZGVyaW5nID0gdHJ1ZTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBjYW52YXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYC5wYWdlLWNhbnZhc1tkYXRhLXBhZ2U9IiR7cGFnZU51bX0iXWApOwogICAgICAgIGlmICghY2FudmFzKSB7CiAgICAgICAgICBwYWdlSW5mby5yZW5kZXJpbmcgPSBmYWxzZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHRoaXMucGRmRG9jdW1lbnQuZ2V0UGFnZShwYWdlTnVtKTsKICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuY29tcHV0ZVZpZXdwb3J0KHBhZ2UpOwogICAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQ7CiAgICAgICAgY2FudmFzLndpZHRoID0gdmlld3BvcnQud2lkdGg7CiAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnQud2lkdGh9cHhgOwogICAgICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHt2aWV3cG9ydC5oZWlnaHR9cHhgOwogICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgIGlmICghY3R4KSB7CiAgICAgICAgICBwYWdlLmNsZWFudXA/LigpOwogICAgICAgICAgcGFnZUluZm8ucmVuZGVyaW5nID0gZmFsc2U7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7CiAgICAgICAgICBjYW52YXNDb250ZXh0OiBjdHgsCiAgICAgICAgICB2aWV3cG9ydAogICAgICAgIH07CiAgICAgICAgY29uc3QgcmVuZGVyVGFzayA9IHBhZ2UucmVuZGVyKHJlbmRlckNvbnRleHQpOwogICAgICAgIHRoaXMucGFnZVJlbmRlclRhc2tzLnNldChwYWdlTnVtLCByZW5kZXJUYXNrKTsKICAgICAgICBhd2FpdCByZW5kZXJUYXNrLnByb21pc2U7CiAgICAgICAgcGFnZS5jbGVhbnVwPy4oKTsKICAgICAgICBwYWdlSW5mby5yZW5kZXJlZCA9IHRydWU7CiAgICAgICAgcGFnZUluZm8ucmVuZGVyaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5wYWdlUmVuZGVyVGFza3MuZGVsZXRlKHBhZ2VOdW0pOwogICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgicGFnZURhdGEiKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBpZiAoZXJyb3I/Lm5hbWUgIT09ICJSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24iKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciByZW5kZXJpbmcgcGFnZSAke3BhZ2VOdW19OmAsIGVycm9yKTsKICAgICAgICB9CiAgICAgICAgcGFnZUluZm8ucmVuZGVyaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5wYWdlUmVuZGVyVGFza3MuZGVsZXRlKHBhZ2VOdW0pOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7CiAgICAgIGlmICh0aGlzLnNjcm9sbFRocm90dGxlVGltZW91dCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRocm90dGxlVGltZW91dCk7CiAgICAgIH0KICAgICAgdGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgdGhpcy51cGRhdGVDdXJyZW50UGFnZSgpOwogICAgICAgIHRoaXMucmVuZGVyVmlzaWJsZVBhZ2VzKCk7CiAgICAgIH0sIDUwKTsKICAgIH07CiAgICB1cGRhdGVDdXJyZW50UGFnZSgpIHsKICAgICAgaWYgKCF0aGlzLnZpZXdlck1haW4pCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLnZpZXdlck1haW4uc2Nyb2xsVG9wOwogICAgICBjb25zdCBjbGllbnRIZWlnaHQgPSB0aGlzLnZpZXdlck1haW4uY2xpZW50SGVpZ2h0OwogICAgICBjb25zdCBjZW50ZXJZID0gc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0IC8gMjsKICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgdGhpcy5wYWdlRGF0YS5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgY29uc3QgcGFnZVdyYXBwZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYC5wYWdlLXdyYXBwZXJbZGF0YS1wYWdlPSIke2kxMSArIDF9Il1gKTsKICAgICAgICBpZiAoIXBhZ2VXcmFwcGVyKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgY29uc3QgcmVjdCA9IHBhZ2VXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IHZpZXdlclJlY3QgPSB0aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgcmVsYXRpdmVUb3AgPSByZWN0LnRvcCAtIHZpZXdlclJlY3QudG9wICsgc2Nyb2xsVG9wOwogICAgICAgIGNvbnN0IHJlbGF0aXZlQm90dG9tID0gcmVsYXRpdmVUb3AgKyByZWN0LmhlaWdodDsKICAgICAgICBpZiAoY2VudGVyWSA+PSByZWxhdGl2ZVRvcCAmJiBjZW50ZXJZIDw9IHJlbGF0aXZlQm90dG9tKSB7CiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSAhPT0gaTExICsgMSkgewogICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gaTExICsgMTsKICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1NpZGViYXIpIHsKICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRodW1ibmFpbEludG9WaWV3KGkxMSArIDEpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHNjcm9sbFRodW1ibmFpbEludG9WaWV3KHBhZ2VOdW0pIHsKICAgICAgY29uc3QgdGh1bWJuYWlsID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAudGh1bWJuYWlsW2RhdGEtcGFnZT0iJHtwYWdlTnVtfSJdYCk7CiAgICAgIGNvbnN0IHNpZGViYXJDb250ZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2lkZWJhci1jb250ZW50Iik7CiAgICAgIGlmICh0aHVtYm5haWwgJiYgc2lkZWJhckNvbnRlbnQpIHsKICAgICAgICBjb25zdCB0aHVtYm5haWxSZWN0ID0gdGh1bWJuYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IHNpZGViYXJSZWN0ID0gc2lkZWJhckNvbnRlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgaXNBYm92ZSA9IHRodW1ibmFpbFJlY3QudG9wIDwgc2lkZWJhclJlY3QudG9wOwogICAgICAgIGNvbnN0IGlzQmVsb3cgPSB0aHVtYm5haWxSZWN0LmJvdHRvbSA+IHNpZGViYXJSZWN0LmJvdHRvbTsKICAgICAgICBpZiAoaXNBYm92ZSB8fCBpc0JlbG93KSB7CiAgICAgICAgICBjb25zdCB0aHVtYm5haWxPZmZzZXQgPSB0aHVtYm5haWwub2Zmc2V0VG9wOwogICAgICAgICAgY29uc3QgdGh1bWJuYWlsSGVpZ2h0ID0gdGh1bWJuYWlsLm9mZnNldEhlaWdodDsKICAgICAgICAgIGNvbnN0IHNpZGViYXJIZWlnaHQgPSBzaWRlYmFyQ29udGVudC5jbGllbnRIZWlnaHQ7CiAgICAgICAgICBjb25zdCB0YXJnZXRTY3JvbGxUb3AgPSB0aHVtYm5haWxPZmZzZXQgLSBzaWRlYmFySGVpZ2h0IC8gMiArIHRodW1ibmFpbEhlaWdodCAvIDI7CiAgICAgICAgICBzaWRlYmFyQ29udGVudC5zY3JvbGxUbyh7CiAgICAgICAgICAgIHRvcDogTWF0aC5tYXgoMCwgdGFyZ2V0U2Nyb2xsVG9wKSwKICAgICAgICAgICAgYmVoYXZpb3I6ICJzbW9vdGgiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHNjcm9sbFRvUGFnZShwYWdlTnVtLCBzbW9vdGggPSB0cnVlKSB7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGNvbnN0IHBhZ2VXcmFwcGVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAucGFnZS13cmFwcGVyW2RhdGEtcGFnZT0iJHtwYWdlTnVtfSJdYCk7CiAgICAgIGlmIChwYWdlV3JhcHBlciAmJiB0aGlzLnZpZXdlck1haW4pIHsKICAgICAgICBjb25zdCBwYWdlUmVjdCA9IHBhZ2VXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IHZpZXdlclJlY3QgPSB0aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgY3VycmVudFNjcm9sbFRvcCA9IHRoaXMudmlld2VyTWFpbi5zY3JvbGxUb3A7CiAgICAgICAgY29uc3QgdGFyZ2V0U2Nyb2xsVG9wID0gY3VycmVudFNjcm9sbFRvcCArIChwYWdlUmVjdC50b3AgLSB2aWV3ZXJSZWN0LnRvcCkgLSB0aGlzLnZpZXdlck1haW4uY2xpZW50VG9wOwogICAgICAgIGlmIChzbW9vdGgpIHsKICAgICAgICAgIHRoaXMudmlld2VyTWFpbi5zY3JvbGxUbyh7CiAgICAgICAgICAgIHRvcDogdGFyZ2V0U2Nyb2xsVG9wLAogICAgICAgICAgICBiZWhhdmlvcjogInNtb290aCIKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnZpZXdlck1haW4uc2Nyb2xsVG9wID0gdGFyZ2V0U2Nyb2xsVG9wOwogICAgICAgIH0KICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZU51bTsKICAgICAgICBpZiAodGhpcy5zaG93U2lkZWJhcikgewogICAgICAgICAgdGhpcy5zY3JvbGxUaHVtYm5haWxJbnRvVmlldyhwYWdlTnVtKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJQYWdlSWZOZWVkZWQocGFnZU51bSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHJlbmRlclRodW1ibmFpbHMoKSB7CiAgICAgIGlmICghdGhpcy5wZGZEb2N1bWVudCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodGhpcy50aHVtYm5haWxEYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy50aHVtYm5haWxEYXRhLmV2ZXJ5KCh0OSkgPT4gdDkucmVuZGVyZWQpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLnJlbmRlckFib3J0Q29udHJvbGxlcj8uc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgc2lnbmFsID0gdGhpcy5yZW5kZXJBYm9ydENvbnRyb2xsZXI/LnNpZ25hbDsKICAgICAgdGhpcy5yZW5kZXJTdGF0ZSA9ICJyZW5kZXJpbmctdGh1bWJzIjsKICAgICAgZm9yIChjb25zdCB0YXNrIG9mIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MpIHsKICAgICAgICB0cnkgewogICAgICAgICAgdGFzay5jYW5jZWwoKTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLnRodW1ibmFpbFJlbmRlclRhc2tzID0gW107CiAgICAgIHRyeSB7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICBjb25zdCB0aHVtYm5haWxzID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIudGh1bWJuYWlsIik7CiAgICAgICAgY29uc3QgdGh1bWJuYWlsQ2FudmFzZXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi50aHVtYm5haWwtY2FudmFzIik7CiAgICAgICAgY29uc3Qgc2lkZWJhckNvbnRlbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5zaWRlYmFyLWNvbnRlbnQiKTsKICAgICAgICBjb25zdCBzaWRlYmFyU3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc2lkZWJhckNvbnRlbnQpOwogICAgICAgIGNvbnN0IHNpZGViYXJQYWRkaW5nID0gcGFyc2VGbG9hdChzaWRlYmFyU3R5bGVzLnBhZGRpbmdMZWZ0KSArIHBhcnNlRmxvYXQoc2lkZWJhclN0eWxlcy5wYWRkaW5nUmlnaHQpOwogICAgICAgIGNvbnN0IG1heFRodW1ibmFpbFdpZHRoID0gMjAwIC0gc2lkZWJhclBhZGRpbmcgLSA0OwogICAgICAgIGZvciAoY29uc3QgY2FudmFzIG9mIEFycmF5LmZyb20odGh1bWJuYWlsQ2FudmFzZXMpKSB7CiAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgICAgaWYgKGNvbnRleHQyKSB7CiAgICAgICAgICAgIGNvbnRleHQyLmNsZWFyUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCB0aHVtYm5haWxDYW52YXNlcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBjYW52YXMgPSB0aHVtYm5haWxDYW52YXNlc1tpMTFdOwogICAgICAgICAgY29uc3QgdGh1bWJuYWlsID0gdGh1bWJuYWlsc1tpMTFdOwogICAgICAgICAgY29uc3QgcGFnZU51bSA9IHBhcnNlSW50KGNhbnZhcy5kYXRhc2V0LnBhZ2UgfHwgIjEiKTsKICAgICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UocGFnZU51bSk7CiAgICAgICAgICBjb25zdCBpbml0aWFsVmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGU6IDEgfSk7CiAgICAgICAgICBjb25zdCBzY2FsZSA9IG1heFRodW1ibmFpbFdpZHRoIC8gaW5pdGlhbFZpZXdwb3J0LndpZHRoOwogICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGUgfSk7CiAgICAgICAgICBjYW52YXMud2lkdGggPSB2aWV3cG9ydC53aWR0aDsKICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQ7CiAgICAgICAgICBjYW52YXMuc3R5bGUud2lkdGggPSBgJHt2aWV3cG9ydC53aWR0aH1weGA7CiAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7dmlld3BvcnQuaGVpZ2h0fXB4YDsKICAgICAgICAgIHRodW1ibmFpbC5zdHlsZS5oZWlnaHQgPSBgJHt2aWV3cG9ydC5oZWlnaHR9cHhgOwogICAgICAgICAgdGh1bWJuYWlsLnN0eWxlLm1pbkhlaWdodCA9IGAke3ZpZXdwb3J0LmhlaWdodH1weGA7CiAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgICAgaWYgKCFjb250ZXh0MikgewogICAgICAgICAgICBwYWdlLmNsZWFudXA/LigpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7CiAgICAgICAgICAgIGNhbnZhc0NvbnRleHQ6IGNvbnRleHQyLAogICAgICAgICAgICB2aWV3cG9ydAogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IHJlbmRlclRhc2sgPSBwYWdlLnJlbmRlcihyZW5kZXJDb250ZXh0KTsKICAgICAgICAgIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MucHVzaChyZW5kZXJUYXNrKTsKICAgICAgICAgIGF3YWl0IHJlbmRlclRhc2sucHJvbWlzZTsKICAgICAgICAgIHBhZ2UuY2xlYW51cD8uKCk7CiAgICAgICAgICBjb25zdCB0aHVtYkRhdGEgPSB0aGlzLnRodW1ibmFpbERhdGEuZmluZCgodDkpID0+IHQ5LnBhZ2UgPT09IHBhZ2VOdW0pOwogICAgICAgICAgaWYgKHRodW1iRGF0YSkgewogICAgICAgICAgICB0aHVtYkRhdGEucmVuZGVyZWQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoInRodW1ibmFpbERhdGEiKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBpZiAoZXJyb3I/Lm5hbWUgIT09ICJSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24iKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKCJFcnJvciByZW5kZXJpbmcgdGh1bWJuYWlsczoiLCBlcnJvcik7CiAgICAgICAgfQogICAgICB9IGZpbmFsbHkgewogICAgICAgIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MgPSBbXTsKICAgICAgfQogICAgfQogICAgcHJldmlvdXNQYWdlKCkgewogICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IDEpIHsKICAgICAgICB0aGlzLnNjcm9sbFRvUGFnZSh0aGlzLmN1cnJlbnRQYWdlIC0gMSk7CiAgICAgIH0KICAgIH0KICAgIG5leHRQYWdlKCkgewogICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA8IHRoaXMudG90YWxQYWdlcykgewogICAgICAgIHRoaXMuc2Nyb2xsVG9QYWdlKHRoaXMuY3VycmVudFBhZ2UgKyAxKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlVGh1bWJuYWlsQ2xpY2soZTExKSB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGUxMS5jdXJyZW50VGFyZ2V0OwogICAgICBjb25zdCBwYWdlTnVtID0gcGFyc2VJbnQodGFyZ2V0LmRhdGFzZXQucGFnZSB8fCAiMSIpOwogICAgICB0aGlzLnNjcm9sbFRvUGFnZShwYWdlTnVtKTsKICAgIH0KICAgIGhhbmRsZVBhZ2VJbnB1dChlMTEpIHsKICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICBjb25zdCBwYWdlTnVtID0gcGFyc2VJbnQoaW5wdXQudmFsdWUpOwogICAgICB0aGlzLnNjcm9sbFRvUGFnZShwYWdlTnVtKTsKICAgIH0KICAgIHpvb21JbigpIHsKICAgICAgY29uc3QgbmV4dFpvb20gPSBNYXRoLm1pbih0aGlzLk1BTlVBTF9NQVhfWk9PTSwgdGhpcy5jdXJyZW50Wm9vbSAqIDEuMik7CiAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gImN1c3RvbSI7CiAgICAgIGlmIChuZXh0Wm9vbSAhPT0gdGhpcy5jdXJyZW50Wm9vbSkgewogICAgICAgIHRoaXMuY3VycmVudFpvb20gPSBuZXh0Wm9vbTsKICAgICAgICB0aGlzLnJlUmVuZGVyQWxsUGFnZXMoKTsKICAgICAgfQogICAgfQogICAgem9vbU91dCgpIHsKICAgICAgY29uc3QgbmV4dFpvb20gPSBNYXRoLm1heCh0aGlzLk1BTlVBTF9NSU5fWk9PTSwgdGhpcy5jdXJyZW50Wm9vbSAvIDEuMik7CiAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gImN1c3RvbSI7CiAgICAgIGlmIChuZXh0Wm9vbSAhPT0gdGhpcy5jdXJyZW50Wm9vbSkgewogICAgICAgIHRoaXMuY3VycmVudFpvb20gPSBuZXh0Wm9vbTsKICAgICAgICB0aGlzLnJlUmVuZGVyQWxsUGFnZXMoKTsKICAgICAgfQogICAgfQogICAgcmVzZXRab29tKCkgewogICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJjdXN0b20iOwogICAgICB0aGlzLmN1cnJlbnRab29tID0gMTsKICAgICAgdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCk7CiAgICB9CiAgICBmaXRUb1BhZ2UoKSB7CiAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gInBhZ2UtZml0IjsKICAgICAgdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCk7CiAgICB9CiAgICBmaXRUb1dpZHRoKCkgewogICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJwYWdlLXdpZHRoIjsKICAgICAgdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCk7CiAgICB9CiAgICByZVJlbmRlckFsbFBhZ2VzKCkgewogICAgICB0aGlzLnBhZ2VEYXRhLmZvckVhY2goKHBhZ2UpID0+IHsKICAgICAgICBwYWdlLnJlbmRlcmVkID0gZmFsc2U7CiAgICAgICAgcGFnZS5yZW5kZXJpbmcgPSBmYWxzZTsKICAgICAgfSk7CiAgICAgIHRoaXMucGFnZVJlbmRlclRhc2tzLmZvckVhY2goKHRhc2spID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgdGFzay5jYW5jZWwoKTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMucGFnZVJlbmRlclRhc2tzLmNsZWFyKCk7CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgIHRoaXMucmVuZGVyVmlzaWJsZVBhZ2VzKCk7CiAgICAgIH0pOwogICAgfQogICAgZG93bmxvYWRQZGYoKSB7CiAgICAgIGNvbnN0IGxpbmszID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwogICAgICBsaW5rMy5ocmVmID0gdGhpcy5wZGZVcmw7CiAgICAgIGxpbmszLmRvd25sb2FkID0gdGhpcy5wZGZVcmwuc3BsaXQoIi8iKS5wb3AoKSB8fCAiZG9jdW1lbnQucGRmIjsKICAgICAgbGluazMuY2xpY2soKTsKICAgIH0KICAgIHByaW50UGRmKCkgewogICAgICB3aW5kb3cub3Blbih0aGlzLnBkZlVybCwgIl9ibGFuayIpPy5wcmludCgpOwogICAgfQogICAgLyoqCiAgICAgKiBQcm92aWRlIGNvbnRleHQgbWVudSBpdGVtcyBmb3IgcmlnaHQtY2xpY2sgZnVuY3Rpb25hbGl0eQogICAgICovCiAgICBnZXRDb250ZXh0TWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJPcGVuIFBERiBpbiBOZXcgVGFiIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOkV4dGVybmFsTGluayIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy5wZGZVcmwsICJfYmxhbmsiKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDb3B5IFBERiBVUkwiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Q29weSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5wZGZVcmwpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkRvd25sb2FkIFBERiIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpEb3dubG9hZCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgdGhpcy5kb3dubG9hZFBkZigpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIlByaW50IFBERiIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpQcmludGVyIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICB0aGlzLnByaW50UGRmKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdOwogICAgfQogICAgZ2V0IGNhblpvb21JbigpIHsKICAgICAgcmV0dXJuIHRoaXMudmlld3BvcnRNb2RlICE9PSAiY3VzdG9tIiB8fCB0aGlzLmN1cnJlbnRab29tIDwgdGhpcy5NQU5VQUxfTUFYX1pPT007CiAgICB9CiAgICBnZXQgY2FuWm9vbU91dCgpIHsKICAgICAgcmV0dXJuIHRoaXMudmlld3BvcnRNb2RlICE9PSAiY3VzdG9tIiB8fCB0aGlzLmN1cnJlbnRab29tID4gdGhpcy5NQU5VQUxfTUlOX1pPT007CiAgICB9CiAgICBlbnN1cmVWaWV3ZXJSZWZzKCkgewogICAgICBpZiAoIXRoaXMudmlld2VyTWFpbikgewogICAgICAgIHRoaXMudmlld2VyTWFpbiA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnZpZXdlci1tYWluIik7CiAgICAgIH0KICAgICAgaWYgKHRoaXMudmlld2VyTWFpbiAmJiAhdGhpcy5yZXNpemVPYnNlcnZlcikgewogICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgICAgdGhpcy5tZWFzdXJlVmlld3BvcnREaW1lbnNpb25zKCk7CiAgICAgICAgICBpZiAodGhpcy5wZGZEb2N1bWVudCkgewogICAgICAgICAgICB0aGlzLnJlUmVuZGVyQWxsUGFnZXMoKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy52aWV3ZXJNYWluKTsKICAgICAgICB0aGlzLm1lYXN1cmVWaWV3cG9ydERpbWVuc2lvbnMoKTsKICAgICAgICB0aGlzLnZpZXdlck1haW4uYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLCAoZTExKSA9PiB7CiAgICAgICAgICBjb25zdCBlbGVtZW50NCA9IGUxMS5jdXJyZW50VGFyZ2V0OwogICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gZWxlbWVudDQuc2Nyb2xsVG9wOwogICAgICAgICAgY29uc3Qgc2Nyb2xsSGVpZ2h0ID0gZWxlbWVudDQuc2Nyb2xsSGVpZ2h0OwogICAgICAgICAgY29uc3QgY2xpZW50SGVpZ2h0ID0gZWxlbWVudDQuY2xpZW50SGVpZ2h0OwogICAgICAgICAgY29uc3QgZGVsdGFZID0gZTExLmRlbHRhWTsKICAgICAgICAgIGNvbnN0IGlzQXRUb3AgPSBzY3JvbGxUb3AgPT09IDA7CiAgICAgICAgICBjb25zdCBpc0F0Qm90dG9tID0gTWF0aC5hYnMoc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0IC0gc2Nyb2xsSGVpZ2h0KSA8IDE7CiAgICAgICAgICBpZiAoZGVsdGFZIDwgMCAmJiAhaXNBdFRvcCB8fCBkZWx0YVkgPiAwICYmICFpc0F0Qm90dG9tKSB7CiAgICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIH0gZWxzZSBpZiAoZGVsdGFZIDwgMCAmJiBpc0F0VG9wIHx8IGRlbHRhWSA+IDAgJiYgaXNBdEJvdHRvbSkgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgfQogICAgICAgIH0sIHsgcGFzc2l2ZTogZmFsc2UgfSk7CiAgICAgIH0KICAgIH0KICAgIG1lYXN1cmVWaWV3cG9ydERpbWVuc2lvbnMoKSB7CiAgICAgIGlmICghdGhpcy52aWV3ZXJNYWluKSB7CiAgICAgICAgdGhpcy52aWV3cG9ydERpbWVuc2lvbnMgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgc3R5bGVzMyA9IGdldENvbXB1dGVkU3R5bGUodGhpcy52aWV3ZXJNYWluKTsKICAgICAgY29uc3QgcGFkZGluZ1ggPSBwYXJzZUZsb2F0KHN0eWxlczMucGFkZGluZ0xlZnQgfHwgIjAiKSArIHBhcnNlRmxvYXQoc3R5bGVzMy5wYWRkaW5nUmlnaHQgfHwgIjAiKTsKICAgICAgY29uc3QgcGFkZGluZ1kgPSBwYXJzZUZsb2F0KHN0eWxlczMucGFkZGluZ1RvcCB8fCAiMCIpICsgcGFyc2VGbG9hdChzdHlsZXMzLnBhZGRpbmdCb3R0b20gfHwgIjAiKTsKICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCh0aGlzLnZpZXdlck1haW4uY2xpZW50V2lkdGggLSBwYWRkaW5nWCwgMCk7CiAgICAgIGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KHRoaXMudmlld2VyTWFpbi5jbGllbnRIZWlnaHQgLSBwYWRkaW5nWSwgMCk7CiAgICAgIHRoaXMudmlld3BvcnREaW1lbnNpb25zID0geyB3aWR0aCwgaGVpZ2h0IH07CiAgICB9CiAgICByZXNvbHZlSW5pdGlhbFZpZXdwb3J0TW9kZSgpIHsKICAgICAgaWYgKHR5cGVvZiB0aGlzLmluaXRpYWxab29tID09PSAibnVtYmVyIikgewogICAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gImN1c3RvbSI7CiAgICAgICAgdGhpcy5jdXJyZW50Wm9vbSA9IHRoaXMubm9ybWFsaXplWm9vbSh0aGlzLmluaXRpYWxab29tLCB0cnVlKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxab29tID09PSAicGFnZS13aWR0aCIpIHsKICAgICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJwYWdlLXdpZHRoIjsKICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxab29tID09PSAicGFnZS1maXQiIHx8IHRoaXMuaW5pdGlhbFpvb20gPT09ICJhdXRvIikgewogICAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gInBhZ2UtZml0IjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJhdXRvIjsKICAgICAgfQogICAgICBpZiAodGhpcy52aWV3cG9ydE1vZGUgIT09ICJjdXN0b20iKSB7CiAgICAgICAgdGhpcy5jdXJyZW50Wm9vbSA9IDE7CiAgICAgIH0KICAgIH0KICAgIGNvbXB1dGVWaWV3cG9ydChwYWdlKSB7CiAgICAgIHRoaXMubWVhc3VyZVZpZXdwb3J0RGltZW5zaW9ucygpOwogICAgICBjb25zdCBiYXNlVmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGU6IDEgfSk7CiAgICAgIGxldCBzY2FsZTsKICAgICAgc3dpdGNoICh0aGlzLnZpZXdwb3J0TW9kZSkgewogICAgICAgIGNhc2UgInBhZ2Utd2lkdGgiOiB7CiAgICAgICAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IHRoaXMudmlld3BvcnREaW1lbnNpb25zLndpZHRoIHx8IGJhc2VWaWV3cG9ydC53aWR0aDsKICAgICAgICAgIHNjYWxlID0gYXZhaWxhYmxlV2lkdGggLyBiYXNlVmlld3BvcnQud2lkdGg7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAicGFnZS1maXQiOgogICAgICAgIGNhc2UgImF1dG8iOiB7CiAgICAgICAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IHRoaXMudmlld3BvcnREaW1lbnNpb25zLndpZHRoIHx8IGJhc2VWaWV3cG9ydC53aWR0aDsKICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZUhlaWdodCA9IHRoaXMudmlld3BvcnREaW1lbnNpb25zLmhlaWdodCB8fCBiYXNlVmlld3BvcnQuaGVpZ2h0OwogICAgICAgICAgY29uc3Qgd2lkdGhTY2FsZSA9IGF2YWlsYWJsZVdpZHRoIC8gYmFzZVZpZXdwb3J0LndpZHRoOwogICAgICAgICAgY29uc3QgaGVpZ2h0U2NhbGUgPSBhdmFpbGFibGVIZWlnaHQgLyBiYXNlVmlld3BvcnQuaGVpZ2h0OwogICAgICAgICAgc2NhbGUgPSBNYXRoLm1pbih3aWR0aFNjYWxlLCBoZWlnaHRTY2FsZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAiY3VzdG9tIjoKICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICBzY2FsZSA9IHRoaXMubm9ybWFsaXplWm9vbSh0aGlzLmN1cnJlbnRab29tIHx8IDEsIGZhbHNlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzY2FsZSkgfHwgc2NhbGUgPD0gMCkgewogICAgICAgIHNjYWxlID0gMTsKICAgICAgfQogICAgICBjb25zdCBjbGFtcGVkU2NhbGUgPSB0aGlzLnZpZXdwb3J0TW9kZSA9PT0gImN1c3RvbSIgPyB0aGlzLm5vcm1hbGl6ZVpvb20oc2NhbGUsIHRydWUpIDogdGhpcy5ub3JtYWxpemVab29tKHNjYWxlLCBmYWxzZSk7CiAgICAgIGlmICh0aGlzLnZpZXdwb3J0TW9kZSAhPT0gImN1c3RvbSIpIHsKICAgICAgICB0aGlzLmN1cnJlbnRab29tID0gY2xhbXBlZFNjYWxlOwogICAgICB9CiAgICAgIHJldHVybiBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGU6IGNsYW1wZWRTY2FsZSB9KTsKICAgIH0KICAgIG5vcm1hbGl6ZVpvb20odmFsdWUyLCBjbGFtcFRvTWFudWFsUmFuZ2UpIHsKICAgICAgY29uc3QgbWluMyA9IGNsYW1wVG9NYW51YWxSYW5nZSA/IHRoaXMuTUFOVUFMX01JTl9aT09NIDogdGhpcy5BQlNPTFVURV9NSU5fWk9PTTsKICAgICAgY29uc3QgbWF4MyA9IGNsYW1wVG9NYW51YWxSYW5nZSA/IHRoaXMuTUFOVUFMX01BWF9aT09NIDogdGhpcy5BQlNPTFVURV9NQVhfWk9PTTsKICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbHVlMiwgbWluMyksIG1heDMpOwogICAgfQogICAgYXN5bmMgY2xlYW51cERvY3VtZW50KCkgewogICAgICBpZiAodGhpcy5yZW5kZXJBYm9ydENvbnRyb2xsZXIpIHsKICAgICAgICB0aGlzLnJlbmRlckFib3J0Q29udHJvbGxlci5hYm9ydCgpOwogICAgICAgIHRoaXMucmVuZGVyQWJvcnRDb250cm9sbGVyID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyUHJvbWlzZSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmN1cnJlbnRSZW5kZXJQcm9taXNlOwogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgfQogICAgICAgIHRoaXMuY3VycmVudFJlbmRlclByb21pc2UgPSBudWxsOwogICAgICB9CiAgICAgIHRoaXMuY3VycmVudFJlbmRlclRhc2sgPSBudWxsOwogICAgICB0aGlzLnBhZ2VSZW5kZXJUYXNrcy5mb3JFYWNoKCh0YXNrKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRhc2suY2FuY2VsKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLnBhZ2VSZW5kZXJUYXNrcy5jbGVhcigpOwogICAgICBmb3IgKGNvbnN0IHRhc2sgb2YgdGhpcy50aHVtYm5haWxSZW5kZXJUYXNrcyB8fCBbXSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICB0YXNrLmNhbmNlbCgpOwogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MgPSBbXTsKICAgICAgdGhpcy5yZW5kZXJTdGF0ZSA9ICJpZGxlIjsKICAgICAgdGhpcy5wYWdlUmVuZGVyaW5nID0gZmFsc2U7CiAgICAgIHRoaXMucGFnZU51bVBlbmRpbmcgPSBudWxsOwogICAgICB0aGlzLnRodW1ibmFpbERhdGEgPSBbXTsKICAgICAgdGhpcy5wYWdlRGF0YSA9IFtdOwogICAgICB0aGlzLmRvY3VtZW50SWQgPSAiIjsKICAgICAgaWYgKHRoaXMuY2FudmFzICYmIHRoaXMuY3R4KSB7CiAgICAgICAgdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpOwogICAgICB9CiAgICAgIGlmICh0aGlzLnBkZkRvY3VtZW50KSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRoaXMucGRmRG9jdW1lbnQuZGVzdHJveSgpOwogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBkZXN0cm95aW5nIFBERiBkb2N1bWVudDoiLCBlcnJvcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMucGRmRG9jdW1lbnQgPSBudWxsOwogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNQZGZWaWV3ZXIyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtYXBwZGFzaC9kZWVzLXNpbXBsZS1hcHBkYXNoLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9fZXNEZWNvcmF0ZTcwID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3MSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVtb1ZpZXdEYXNoYm9hcmQgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZW1vLXZpZXctZGFzaGJvYXJkIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIHZhciBEZW1vVmlld0Rhc2hib2FyZDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9fZXNEZWNvcmF0ZTcwKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVtb1ZpZXdEYXNoYm9hcmQyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgIH0KICAgICAgaDEgewogICAgICAgIG1hcmdpbjogMCAwIDIwcHggMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAiLCAiI2ZmZiIpfTsKICAgICAgfQogICAgICBkZWVzLXN0YXRzZ3JpZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgfQogICAgYAogICAgXTsKICAgIHN0YXRzVGlsZXMgPSBbCiAgICAgIHsKICAgICAgICBpZDogInVzZXJzIiwKICAgICAgICB0aXRsZTogIkFjdGl2ZSBVc2VycyIsCiAgICAgICAgdmFsdWU6IDEyMzQsCiAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgaWNvbjogImZhVXNlcnMiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiKzE1JSBmcm9tIGxhc3Qgd2VlayIsCiAgICAgICAgY29sb3I6ICIjMjJjNTVlIgogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJwYWdldmlld3MiLAogICAgICAgIHRpdGxlOiAiUGFnZSBWaWV3cyIsCiAgICAgICAgdmFsdWU6IDU2NzAwLAogICAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICAgIGljb246ICJmYUV5ZSIsCiAgICAgICAgZGVzY3JpcHRpb246ICI1Ni43ayB0b3RhbCB2aWV3cyIsCiAgICAgICAgY29sb3I6ICIjM2I4MmY2IgogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJ1cHRpbWUiLAogICAgICAgIHRpdGxlOiAiU3lzdGVtIFVwdGltZSIsCiAgICAgICAgdmFsdWU6IDg5LAogICAgICAgIHVuaXQ6ICIlIiwKICAgICAgICB0eXBlOiAiZ2F1Z2UiLAogICAgICAgIGljb246ICJmYVNlcnZlciIsCiAgICAgICAgZGVzY3JpcHRpb246ICJMYXN0IDMwIGRheXMiLAogICAgICAgIGNvbG9yOiAiIzEwYjk4MSIsCiAgICAgICAgZ2F1Z2VPcHRpb25zOiB7CiAgICAgICAgICBtaW46IDAsCiAgICAgICAgICBtYXg6IDEwMCwKICAgICAgICAgIHRocmVzaG9sZHM6IFsKICAgICAgICAgICAgeyB2YWx1ZTogODAsIGNvbG9yOiAiI2VmNDQ0NCIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogOTAsIGNvbG9yOiAiI2Y1OWUwYiIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogMTAwLCBjb2xvcjogIiMxMGI5ODEiIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogInJlc3BvbnNlIiwKICAgICAgICB0aXRsZTogIkF2ZyBSZXNwb25zZSBUaW1lIiwKICAgICAgICB2YWx1ZTogMy4yLAogICAgICAgIHVuaXQ6ICJzIiwKICAgICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgICBpY29uOiAiZmFDbG9jayIsCiAgICAgICAgZGVzY3JpcHRpb246ICItMC41cyBpbXByb3ZlbWVudCIsCiAgICAgICAgY29sb3I6ICIjZjU5ZTBiIgogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJyZXZlbnVlIiwKICAgICAgICB0aXRsZTogIk1vbnRobHkgUmV2ZW51ZSIsCiAgICAgICAgdmFsdWU6IDQ4NTIwLAogICAgICAgIHVuaXQ6ICIkIiwKICAgICAgICB0eXBlOiAidHJlbmQiLAogICAgICAgIGljb246ICJmYURvbGxhclNpZ24iLAogICAgICAgIGRlc2NyaXB0aW9uOiAiKzguMiUgZ3Jvd3RoIiwKICAgICAgICBjb2xvcjogIiMyMmM1NWUiLAogICAgICAgIHRyZW5kRGF0YTogWzM1ZTMsIDM4ZTMsIDM3NTAwLCA0MWUzLCAzOTgwMCwgNDJlMywgNDQxMDAsIDQzMjAwLCA0NTYwMCwgNDcxMDAsIDQ2ODAwLCA0ODUyMF0KICAgICAgfSwKICAgICAgewogICAgICAgIGlkOiAidHJhZmZpYyIsCiAgICAgICAgdGl0bGU6ICJUcmFmZmljIFRyZW5kIiwKICAgICAgICB2YWx1ZTogMTY4MCwKICAgICAgICB0eXBlOiAidHJlbmQiLAogICAgICAgIGljb246ICJmYUNoYXJ0TGluZSIsCiAgICAgICAgZGVzY3JpcHRpb246ICJMYXN0IDcgZGF5cyIsCiAgICAgICAgY29sb3I6ICIjM2I4MmY2IiwKICAgICAgICB0cmVuZERhdGE6IFsxMjAwLCAxMzUwLCAxMTAwLCAxNDUwLCAxNjAwLCAxNTUwLCAxNjgwXQogICAgICB9CiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxoMT5EYXNoYm9hcmQ8L2gxPgogICAgICA8cD5XZWxjb21lIHRvIHlvdXIgYXBwbGljYXRpb24gZGFzaGJvYXJkLiBIZXJlJ3MgYW4gb3ZlcnZpZXcgb2YgeW91ciBtZXRyaWNzOjwvcD4KICAgICAgPGRlZXMtc3RhdHNncmlkCiAgICAgICAgLnRpbGVzPSR7dGhpcy5zdGF0c1RpbGVzfQogICAgICAgIEB0aWxlLWFjdGlvbj0keyhlMTEpID0+IHsKICAgICAgICBjb25zb2xlLmxvZygiVGlsZSBhY3Rpb246IiwgZTExLmRldGFpbCk7CiAgICAgIH19CiAgICAgID48L2RlZXMtc3RhdHNncmlkPgogICAgYDsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzEoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9WaWV3RGFzaGJvYXJkMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CnZhciBEZW1vVmlld0FuYWx5dGljcyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlbW8tdmlldy1hbmFseXRpY3MiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgdmFyIERlbW9WaWV3QW5hbHl0aWNzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX19lc0RlY29yYXRlNzAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZW1vVmlld0FuYWx5dGljczIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgfQogICAgICBoMSB7CiAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMCIsICIjZmZmIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxoMT5BbmFseXRpY3M8L2gxPgogICAgICA8cD5UaGlzIGlzIHRoZSBhbmFseXRpY3Mgdmlldy4gWW91IGNhbiBhZGQgY2hhcnRzIGFuZCBtZXRyaWNzIGhlcmUuPC9wPgogICAgYDsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzEoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9WaWV3QW5hbHl0aWNzMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CnZhciBEZW1vVmlld1NldHRpbmdzID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVtby12aWV3LXNldHRpbmdzIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIHZhciBEZW1vVmlld1NldHRpbmdzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX19lc0RlY29yYXRlNzAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZW1vVmlld1NldHRpbmdzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICB9CiAgICAgIGgxIHsKICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwIiwgIiNmZmYiKX07CiAgICAgIH0KICAgICAgLnNldHRpbmdzLXNlY3Rpb24gewogICAgICAgIG1hcmdpbi10b3A6IDMwcHg7CiAgICAgIH0KICAgICAgLnNldHRpbmdzLXNlY3Rpb24gaDIgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBtYXJnaW46IDAgMCAxNXB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNjY2MiKX07CiAgICAgIH0KICAgICAgLmhvcml6b250YWwtZm9ybS1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y1ZjVmNSIsICIjMWExYTFhIil9OwogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIG1hcmdpbjogMTVweCAwOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxoMT5TZXR0aW5nczwvaDE+CiAgICAgIDxwPkNvbmZpZ3VyZSB5b3VyIGFwcGxpY2F0aW9uIHNldHRpbmdzIGJlbG93OjwvcD4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgIDxoMj5HZW5lcmFsIFNldHRpbmdzPC9oMj4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9ImFwcE5hbWUiIGxhYmVsPSJBcHBsaWNhdGlvbiBOYW1lIiB2YWx1ZT0iTXkgQXBwIj48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJhcGlFbmRwb2ludCIgbGFiZWw9IkFQSSBFbmRwb2ludCIgdmFsdWU9Imh0dHBzOi8vYXBpLmV4YW1wbGUuY29tIj48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIGtleT0iZW52aXJvbm1lbnQiCiAgICAgICAgICAgIGxhYmVsPSJFbnZpcm9ubWVudCIKICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgICAgeyBvcHRpb246ICJEZXZlbG9wbWVudCIsIGtleTogImRldiIgfSwKICAgICAgICB7IG9wdGlvbjogIlN0YWdpbmciLCBrZXk6ICJzdGFnaW5nIiB9LAogICAgICAgIHsgb3B0aW9uOiAiUHJvZHVjdGlvbiIsIGtleTogInByb2QiIH0KICAgICAgXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7eyBvcHRpb246ICJQcm9kdWN0aW9uIiwga2V5OiAicHJvZCIgfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCBrZXk9ImVuYWJsZU5vdGlmaWNhdGlvbnMiIGxhYmVsPSJFbmFibGUgTm90aWZpY2F0aW9ucyIgdmFsdWU9InRydWUiPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IGtleT0iZW5hYmxlQW5hbHl0aWNzIiBsYWJlbD0iRW5hYmxlIEFuYWx5dGljcyIgdmFsdWU9ImZhbHNlIj48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5TYXZlIEdlbmVyYWwgU2V0dGluZ3M8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3Mtc2VjdGlvbiI+CiAgICAgICAgPGgyPkRpc3BsYXkgUHJlZmVyZW5jZXM8L2gyPgogICAgICAgIDxkaXYgY2xhc3M9Imhvcml6b250YWwtZm9ybS1zZWN0aW9uIj4KICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tdG9wOiAwOyBtYXJnaW4tYm90dG9tOiAxNnB4OyI+UXVpY2sgZGlzcGxheSBzZXR0aW5ncyB1c2luZyBob3Jpem9udGFsIGxheW91dDo8L3A+CiAgICAgICAgICA8ZGVlcy1mb3JtIGhvcml6b250YWwtbGF5b3V0PgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAgIGtleT0idGhlbWUiCiAgICAgICAgICAgICAgbGFiZWw9IlRoZW1lIgogICAgICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHtmYWxzZX0KICAgICAgICAgICAgICAub3B0aW9ucz0ke1sKICAgICAgICB7IG9wdGlvbjogIkxpZ2h0Iiwga2V5OiAibGlnaHQiIH0sCiAgICAgICAgeyBvcHRpb246ICJEYXJrIiwga2V5OiAiZGFyayIgfSwKICAgICAgICB7IG9wdGlvbjogIkF1dG8iLCBrZXk6ICJhdXRvIiB9CiAgICAgIF19CiAgICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7eyBvcHRpb246ICJEYXJrIiwga2V5OiAiZGFyayIgfX0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgICBrZXk9Imxhbmd1YWdlIgogICAgICAgICAgICAgIGxhYmVsPSJMYW5ndWFnZSIKICAgICAgICAgICAgICAuZW5hYmxlU2VhcmNoPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgICAgeyBvcHRpb246ICJFbmdsaXNoIiwga2V5OiAiZW4iIH0sCiAgICAgICAgeyBvcHRpb246ICJHZXJtYW4iLCBrZXk6ICJkZSIgfSwKICAgICAgICB7IG9wdGlvbjogIlNwYW5pc2giLCBrZXk6ICJlcyIgfSwKICAgICAgICB7IG9wdGlvbjogIkZyZW5jaCIsIGtleTogImZyIiB9CiAgICAgIF19CiAgICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7eyBvcHRpb246ICJFbmdsaXNoIiwga2V5OiAiZW4iIH19CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IGtleT0iY29tcGFjdE1vZGUiIGxhYmVsPSJDb21wYWN0IE1vZGUiPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgIDxoMj5Ob3RpZmljYXRpb24gU2V0dGluZ3M8L2gyPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJFbWFpbCBGcmVxdWVuY3kifQogICAgICAgICAgICAub3B0aW9ucz0ke1siUmVhbC10aW1lIiwgIkRhaWx5IERpZ2VzdCIsICJXZWVrbHkgU3VtbWFyeSIsICJOZXZlciJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiUmVhbC10aW1lIn0KICAgICAgICAgICAgLmtleT0keyJlbWFpbEZyZXF1ZW5jeSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCBrZXk9InB1c2hOb3RpZmljYXRpb25zIiBsYWJlbD0iRW5hYmxlIFB1c2ggTm90aWZpY2F0aW9ucyIgdmFsdWU9InRydWUiPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IGtleT0ic291bmRBbGVydHMiIGxhYmVsPSJQbGF5IFNvdW5kIGZvciBBbGVydHMiIHZhbHVlPSJ0cnVlIj48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5VcGRhdGUgTm90aWZpY2F0aW9uczwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVtb1ZpZXdTZXR0aW5nczIgPSBfY2xhc3NUaGlzOwp9KSgpOwp2YXIgZGVtb0Z1bmM0MiA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIGJvZHkgewogICAgICBtYXJnaW46IDA7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CiAgICAuZGVtby1jb250YWluZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogMDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLXNpbXBsZS1hcHBkYXNoCiAgICAgIG5hbWU9Ik15IEFwcGxpY2F0aW9uIgogICAgICB0ZXJtaW5hbFNldHVwQ29tbWFuZD0iZWNobyAnV2VsY29tZSB0byB0aGUgdGVybWluYWwhJyIKICAgICAgLnZpZXdUYWJzPSR7WwogIHsKICAgIG5hbWU6ICJEYXNoYm9hcmQiLAogICAgaWNvbk5hbWU6ICJsdWNpZGU6aG9tZSIsCiAgICBlbGVtZW50OiBEZW1vVmlld0Rhc2hib2FyZAogIH0sCiAgewogICAgbmFtZTogIkFuYWx5dGljcyIsCiAgICBpY29uTmFtZTogImx1Y2lkZTpsaW5lQ2hhcnQiLAogICAgZWxlbWVudDogRGVtb1ZpZXdBbmFseXRpY3MKICB9LAogIHsKICAgIG5hbWU6ICJTZXR0aW5ncyIsCiAgICBpY29uTmFtZTogImx1Y2lkZTpzZXR0aW5ncyIsCiAgICBlbGVtZW50OiBEZW1vVmlld1NldHRpbmdzCiAgfQpdfQogICAgICBAbG9nb3V0PSR7KCkgPT4gewogIGNvbnNvbGUubG9nKCJMb2dvdXQgZXZlbnQgdHJpZ2dlcmVkIik7CiAgYWxlcnQoIkxvZ291dCBjbGlja2VkISIpOwp9fQogICAgICBAdmlldy1zZWxlY3Q9JHsoZTExKSA9PiB7CiAgY29uc29sZS5sb2coIlZpZXcgc2VsZWN0ZWQ6IiwgZTExLmRldGFpbC52aWV3Lm5hbWUpOwp9fQogICAgPjwvZGVlcy1zaW1wbGUtYXBwZGFzaD4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtYXBwZGFzaC9kZWVzLXNpbXBsZS1hcHBkYXNoLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGVlc19pY29uKCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTcxID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3MiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1NpbXBsZUFwcERhc2ggPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNpbXBsZS1hcHBkYXNoIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbmFtZV9kZWNvcmF0b3JzOwogIGxldCBfbmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX25hbWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZpZXdUYWJzX2RlY29yYXRvcnM7CiAgbGV0IF92aWV3VGFic19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZpZXdUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXJtaW5hbFNldHVwQ29tbWFuZF9kZWNvcmF0b3JzOwogIGxldCBfdGVybWluYWxTZXR1cENvbW1hbmRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXJtaW5hbFNldHVwQ29tbWFuZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRWaWV3X2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZFZpZXdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFZpZXdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1NpbXBsZUFwcERhc2gyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbmFtZV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfdmlld1RhYnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX3Rlcm1pbmFsU2V0dXBDb21tYW5kX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc2VsZWN0ZWRWaWV3X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTcxKHRoaXMsIG51bGwsIF9uYW1lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm5hbWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm5hbWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubmFtZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubmFtZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9uYW1lX2luaXRpYWxpemVycywgX25hbWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3MSh0aGlzLCBudWxsLCBfdmlld1RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmlld1RhYnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZpZXdUYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZpZXdUYWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52aWV3VGFicyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92aWV3VGFic19pbml0aWFsaXplcnMsIF92aWV3VGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTcxKHRoaXMsIG51bGwsIF90ZXJtaW5hbFNldHVwQ29tbWFuZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0ZXJtaW5hbFNldHVwQ29tbWFuZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGVybWluYWxTZXR1cENvbW1hbmQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGVybWluYWxTZXR1cENvbW1hbmQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRlcm1pbmFsU2V0dXBDb21tYW5kID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Rlcm1pbmFsU2V0dXBDb21tYW5kX2luaXRpYWxpemVycywgX3Rlcm1pbmFsU2V0dXBDb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzEodGhpcywgbnVsbCwgX3NlbGVjdGVkVmlld19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFZpZXciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkVmlldyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZFZpZXcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVmlldyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZFZpZXdfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU2ltcGxlQXBwRGFzaDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNDI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIlNpbXBsZSI7CiAgICAjbmFtZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfbmFtZV9pbml0aWFsaXplcnMsICJBcHBsaWNhdGlvbiBEYXNoYm9hcmQiKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgbmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI25hbWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBuYW1lKHZhbHVlMikgewogICAgICB0aGlzLiNuYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmlld1RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcyKHRoaXMsIF9uYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfdmlld1RhYnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IHZpZXdUYWJzKCkgewogICAgICByZXR1cm4gdGhpcy4jdmlld1RhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2aWV3VGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmlld1RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN0ZXJtaW5hbFNldHVwQ29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX3ZpZXdUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfdGVybWluYWxTZXR1cENvbW1hbmRfaW5pdGlhbGl6ZXJzLCBgZWNobyAiVGVybWluYWwgcmVhZHkiYCkpOwogICAgZ2V0IHRlcm1pbmFsU2V0dXBDb21tYW5kKCkgewogICAgICByZXR1cm4gdGhpcy4jdGVybWluYWxTZXR1cENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0ZXJtaW5hbFNldHVwQ29tbWFuZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGVybWluYWxTZXR1cENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZFZpZXdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcyKHRoaXMsIF90ZXJtaW5hbFNldHVwQ29tbWFuZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX3NlbGVjdGVkVmlld19pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHNlbGVjdGVkVmlldygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkVmlld19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkVmlldyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuYXBwYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMjRweCk7CiAgICAgICAgd2lkdGg6IDI0MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5OSUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTElKSIsICJoc2woMCAwJSAxMyUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gMWZyIG1pbi1jb250ZW50OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMjBweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTElKSIsICJoc2woMCAwJSAxMyUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KCiAgICAgIC5oZWFkZXItaWNvbi13cmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImxpbmVhci1ncmFkaWVudCgxMzVkZWcsIGhzbCgyMTUgMjAlIDk1JSkgMCUsIGhzbCgyMTUgMjAlIDkwJSkgMTAwJSkiLCAibGluZWFyLWdyYWRpZW50KDEzNWRlZywgaHNsKDIxNSAyMCUgMTglKSAwJSwgaHNsKDIxNSAyMCUgMTQlKSAxMDAlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMCAxcHggMnB4IHJnYigwIDAgMCAvIDAuMDUpLCBpbnNldCAwIDFweCAwIHJnYigyNTUgMjU1IDI1NSAvIDAuNSkiLCAiMCAxcHggMnB4IHJnYigwIDAgMCAvIDAuMiksIGluc2V0IDAgMXB4IDAgcmdiKDI1NSAyNTUgMjU1IC8gMC4wNSkiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkZXItaWNvbi13cmFwcGVyIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMCUgNDAlKSIsICJoc2woMjE1IDIwJSA3MCUpIil9OwogICAgICB9CgogICAgICAuYXBwTmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07CiAgICAgIH0KCiAgICAgIC52aWV3VGFicy1jb250YWluZXIgewogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcGFkZGluZzogMTJweCA4cHg7CiAgICAgICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwogICAgICAgIHNjcm9sbGJhci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfSB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnZpZXdUYWJzLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiA2cHg7CiAgICAgIH0KCiAgICAgIC52aWV3VGFicy1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnZpZXdUYWJzLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAudmlld1RhYnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc1JSkiLCAiaHNsKDAgMCUgMzAlKSIpfTsKICAgICAgfQoKICAgICAgLnNlY3Rpb24tbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNTAlKSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICAudmlld1RhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgLnZpZXdUYWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCAiaHNsKDAgMCUgNjUlKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICB9CgogICAgICAudmlld1RhYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDAlIC8gMC4wNCkiLCAiaHNsKDAgMCUgMTAwJSAvIDAuMDUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAudmlld1RhYjphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAwJSAvIDAuMDYpIiwgImhzbCgwIDAlIDEwMCUgLyAwLjA3KSIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTkpOwogICAgICB9CgogICAgICAudmlld1RhYi5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjUlIDk1JSkiLCAiaHNsKDIxNSAyMCUgMTUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjUlIDMwJSkiLCAiaHNsKDIxNSAyNSUgODUlKSIpfTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAudmlld1RhYi5zZWxlY3RlZDo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDhweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICB3aWR0aDogM3B4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMnB4IDJweCAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDcwJSA1MCUpIiwgImhzbCgyMTUgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC52aWV3VGFiIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC52aWV3VGFiOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMC43NTsKICAgICAgfQoKICAgICAgLnZpZXdUYWIuc2VsZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAwLjk7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDcwJSA0NSUpIiwgImhzbCgyMTUgNzAlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC52aWV3VGFiIHNwYW4gewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYXBwQWN0aW9ucyB7CiAgICAgICAgcGFkZGluZzogMTJweCA4cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MSUpIiwgImhzbCgwIDAlIDEzJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NCUgNjAlIC8gMC4wOCkiLCAiaHNsKDAgODQlIDYwJSAvIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQlIDQ1JSkiLCAiaHNsKDAgODQlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24gZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuYWN0aW9uOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMC45OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQlIDQ1JSkiLCAiaHNsKDAgODQlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hcHBjb250ZW50IHsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICByaWdodDogMHB4OwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMjRweCk7CiAgICAgICAgYm90dG9tOiAyNHB4OwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyNDBweCk7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCAiaHNsKDAgMCUgNSUpIil9OwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgIH0KCiAgICAgIC5jb250cm9sYmFyIHsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMCAxMyUgMTglKSIsICJoc2woMjIwIDEzJSAxMiUpIil9OwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwogICAgICB9CgogICAgICAuY29udHJvbCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgY29sb3I6IGhzbCgwIDAlIDcwJSk7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBoc2woMCAwJSAxMDAlIC8gMC4wOCk7CiAgICAgIH0KCiAgICAgIC5jb250cm9sOmZpcnN0LWNoaWxkIHsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2w6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IGhzbCgwIDAlIDEwMCUgLyAwLjA2KTsKICAgICAgICBjb2xvcjogaHNsKDAgMCUgOTUlKTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLnN0YXR1cy1jb25uZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBjb2xvcjogaHNsKDE0MiA3MCUgNTAlKTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wuc3RhdHVzLXRlcm1pbmFsIGRlZXMtaWNvbiB7CiAgICAgICAgY29sb3I6IGhzbCg0NSA5MCUgNTUlKTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJhcHBiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1oZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItaWNvbi13cmFwcGVyIj4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6bGF5b3V0R3JpZCJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFwcE5hbWUiPiR7dGhpcy5uYW1lfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3VGFicy1jb250YWluZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWxhYmVsIj5OYXZpZ2F0aW9uPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZpZXdUYWJzIj4KICAgICAgICAgICAgICAke3RoaXMudmlld1RhYnMubWFwKCh2aWV3KSA9PiBiMmAKICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ2aWV3VGFiICR7dGhpcy5zZWxlY3RlZFZpZXcgPT09IHZpZXcgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMubG9hZFZpZXcodmlldyl9CiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAke3ZpZXcuaWNvbk5hbWUgPyBiMmAKICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249IiR7dmlldy5pY29uTmFtZS5pbmNsdWRlcygiOiIpID8gdmlldy5pY29uTmFtZSA6IGBsdWNpZGU6JHt2aWV3Lmljb25OYW1lfWB9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6ZmlsZSJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgICAgICAgICAgIDxzcGFuPiR7dmlldy5uYW1lfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFwcEFjdGlvbnMiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iIEBjbGljaz0keygpID0+IHsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJsb2dvdXQiLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTsKICAgICAgfX0+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHsibHVjaWRlOmxvZ091dCJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3Bhbj5TaWduIG91dDwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhcHBjb250ZW50Ij4KICAgICAgICAgIDwhLS0gQ29udGVudCBnb2VzIGhlcmUgLS0+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbGJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sIHN0YXR1cy1jb25uZWN0ZWQiPgogICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6d2lmaSJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPHNwYW4+Q29ubmVjdGVkPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sIHN0YXR1cy10ZXJtaW5hbCIgQGNsaWNrPSR7dGhpcy5sYXVuY2hUZXJtaW5hbH0+CiAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249IiR7Imx1Y2lkZTp0ZXJtaW5hbCJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPHNwYW4+VGVybWluYWw8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKHRoaXMudmlld1RhYnMgJiYgdGhpcy52aWV3VGFicy5sZW5ndGggPiAwKSB7CiAgICAgICAgYXdhaXQgdGhpcy5sb2FkVmlldyh0aGlzLnZpZXdUYWJzWzBdKTsKICAgICAgfQogICAgfQogICAgY3VycmVudFRlcm1pbmFsID0gX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfc2VsZWN0ZWRWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGFzeW5jIGxhdW5jaFRlcm1pbmFsKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBpZiAodGhpcy5jdXJyZW50VGVybWluYWwpIHsKICAgICAgICBhd2FpdCB0aGlzLmNsb3NlVGVybWluYWwoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgbWFpbmNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmNvbnRhaW5lciIpOwogICAgICBjb25zdCB7IERlZXNXb3Jrc3BhY2VUZXJtaW5hbDogRGVlc1dvcmtzcGFjZVRlcm1pbmFsMiB9ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiAoaW5pdF9kZWVzX3dvcmtzcGFjZV90ZXJtaW5hbCgpLCBkZWVzX3dvcmtzcGFjZV90ZXJtaW5hbF9leHBvcnRzKSk7CiAgICAgIGNvbnN0IHRlcm1pbmFsID0gbmV3IERlZXNXb3Jrc3BhY2VUZXJtaW5hbDIoKTsKICAgICAgdGVybWluYWwuc2V0dXBDb21tYW5kID0gdGhpcy50ZXJtaW5hbFNldHVwQ29tbWFuZDsKICAgICAgdGhpcy5jdXJyZW50VGVybWluYWwgPSB0ZXJtaW5hbDsKICAgICAgbWFpbmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0ZXJtaW5hbCk7CiAgICAgIHRlcm1pbmFsLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgdGVybWluYWwuc3R5bGUuekluZGV4ID0gIjEwIjsKICAgICAgdGVybWluYWwuc3R5bGUudG9wID0gIjBweCI7CiAgICAgIHRlcm1pbmFsLnN0eWxlLmxlZnQgPSAiMjQwcHgiOwogICAgICB0ZXJtaW5hbC5zdHlsZS5yaWdodCA9ICIwcHgiOwogICAgICB0ZXJtaW5hbC5zdHlsZS5ib3R0b20gPSAiMjRweCI7CiAgICAgIHRlcm1pbmFsLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgIHRlcm1pbmFsLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDhweCkgc2NhbGUoMC45OSkiOwogICAgICB0ZXJtaW5hbC5zdHlsZS50cmFuc2l0aW9uID0gImFsbCAwLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIjsKICAgICAgdGVybWluYWwuc3R5bGUuYm94U2hhZG93ID0gIjAgMjVweCA1MHB4IC0xMnB4IHJnYigwIDAgMCAvIDAuNSksIDAgMCAwIDFweCByZ2IoMjU1IDI1NSAyNTUgLyAwLjA1KSI7CiAgICAgIHRlcm1pbmFsLnN0eWxlLm1heFdpZHRoID0gYGNhbGMoJHttYWluY29udGFpbmVyLmNsaWVudFdpZHRofXB4IC0yNDBweClgOwogICAgICB0ZXJtaW5hbC5zdHlsZS5tYXhIZWlnaHQgPSBgY2FsYygke21haW5jb250YWluZXIuY2xpZW50SGVpZ2h0fXB4IC0gMjRweClgOwogICAgICB0ZXJtaW5hbC5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsICgpID0+IHRoaXMuY2xvc2VUZXJtaW5hbCgpKTsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgdGVybWluYWwuc3R5bGUub3BhY2l0eSA9ICIxIjsKICAgICAgdGVybWluYWwuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZVkoMCkgc2NhbGUoMSkiOwogICAgICByZXR1cm4gdGVybWluYWw7CiAgICB9CiAgICBhc3luYyBjbG9zZVRlcm1pbmFsKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBpZiAodGhpcy5jdXJyZW50VGVybWluYWwpIHsKICAgICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbC5zdHlsZS5vcGFjaXR5ID0gIjAiOwogICAgICAgIHRoaXMuY3VycmVudFRlcm1pbmFsLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDhweCkgc2NhbGUoMC45OSkiOwogICAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMjUwKTsKICAgICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbC5yZW1vdmUoKTsKICAgICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbCA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGN1cnJlbnRWaWV3OwogICAgYXN5bmMgbG9hZFZpZXcodmlld0FyZykgewogICAgICBjb25zdCBhcHBjb250ZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5hcHBjb250ZW50Iik7CiAgICAgIGNvbnN0IHZpZXcgPSBuZXcgdmlld0FyZy5lbGVtZW50KCk7CiAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3KSB7CiAgICAgICAgdGhpcy5jdXJyZW50Vmlldy5yZW1vdmUoKTsKICAgICAgfQogICAgICBhcHBjb250ZW50LmFwcGVuZENoaWxkKHZpZXcpOwogICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gdmlldzsKICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSB2aWV3QXJnOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ2aWV3LXNlbGVjdCIsIHsKICAgICAgICBkZXRhaWw6IHsgdmlldzogdmlld0FyZyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3MihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1NpbXBsZUFwcERhc2gyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtbG9naW4vZGVlcy1zaW1wbGUtbG9naW4uZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM0MyA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIGJvZHkgewogICAgICBtYXJnaW46IDA7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CiAgICAuZGVtby1jb250YWluZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogMDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLXNpbXBsZS1sb2dpbiAKICAgICAgbmFtZT0iTXkgQXBwbGljYXRpb24iCiAgICAgIEBsb2dpbj0keyhlMTEpID0+IHsKICBjb25zb2xlLmxvZygiTG9naW4gZXZlbnQgcmVjZWl2ZWQ6IiwgZTExLmRldGFpbCk7CiAgY29uc3QgbG9naW5EYXRhID0gZTExLmRldGFpbD8uZGF0YSB8fCBlMTEuZGV0YWlsOwogIGlmIChsb2dpbkRhdGE/LnVzZXJuYW1lICYmIGxvZ2luRGF0YT8ucGFzc3dvcmQpIHsKICAgIGFsZXJ0KGBMb2dpbiBhdHRlbXB0ZWQgd2l0aDoKVXNlcm5hbWU6ICR7bG9naW5EYXRhLnVzZXJuYW1lfQpQYXNzd29yZDogJHtsb2dpbkRhdGEucGFzc3dvcmR9YCk7CiAgfSBlbHNlIHsKICAgIGNvbnNvbGUuZXJyb3IoIkludmFsaWQgbG9naW4gZGF0YSBzdHJ1Y3R1cmU6IiwgZTExLmRldGFpbCk7CiAgfQp9fQogICAgPgogICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiA0MHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4KICAgICAgICA8aDE+V2VsY29tZSE8L2gxPgogICAgICAgIDxwPlRoaXMgaXMgdGhlIHNsb3R0ZWQgY29udGVudCB0aGF0IGFwcGVhcnMgYWZ0ZXIgbG9naW4uPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGVlcy1zaW1wbGUtbG9naW4+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtc2ltcGxlL2RlZXMtc2ltcGxlLWxvZ2luL2RlZXMtc2ltcGxlLWxvZ2luLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTcyID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3MyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1NpbXBsZUxvZ2luID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1zaW1wbGUtbG9naW4iKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9uYW1lX2RlY29yYXRvcnM7CiAgbGV0IF9uYW1lX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbmFtZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzU2ltcGxlTG9naW4yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbmFtZV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfX2VzRGVjb3JhdGU3Mih0aGlzLCBudWxsLCBfbmFtZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJuYW1lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJuYW1lIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm5hbWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm5hbWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbmFtZV9pbml0aWFsaXplcnMsIF9uYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzIobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU2ltcGxlTG9naW4yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIFNUQVRJQwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQzOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJTaW1wbGUiOwogICAgI25hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzModGhpcywgX25hbWVfaW5pdGlhbGl6ZXJzLCAiQXBwbGljYXRpb24iKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgbmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI25hbWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBuYW1lKHZhbHVlMikgewogICAgICB0aGlzLiNuYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmxvZ2luQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgIH0KCiAgICAgIC5zbG90Q29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIHRyYW5zZm9ybSAwLjJzIGVhc2U7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5sb2dpbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAzNjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICB9CgogICAgICAubG9naW4taGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLnN1YmhlYWRlciB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmxvZ2luLWNhcmQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5sb2dpbi1jYXJkIGRlZXMtZm9ybSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTZweDsKICAgICAgfQoKICAgICAgLmxvZ2luLWNhcmQgZGVlcy1pbnB1dC10ZXh0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLmxvZ2luLWNhcmQgZGVlcy1mb3JtLXN1Ym1pdCB7CiAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImxvZ2luQ29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsb2dpbiI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dpbi1oZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPlNpZ24gaW48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViaGVhZGVyIj5FbnRlciB5b3VyIGNyZWRlbnRpYWxzIHRvIGFjY2VzcyAke3RoaXMubmFtZX08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibG9naW4tY2FyZCI+CiAgICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9InVzZXJuYW1lIiBsYWJlbD0iVXNlcm5hbWUiIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJwYXNzd29yZCIgbGFiZWw9IlBhc3N3b3JkIiBpc1Bhc3N3b3JkQm9vbCByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5TaWduIGluPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2xvdENvbnRhaW5lciI+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBjb25zdCBmb3JtID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBpZiAoZm9ybSkgewogICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoZXZlbnQpID0+IHsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxvZ2luIiwgewogICAgICAgICAgICBkZXRhaWw6IGV2ZW50LmRldGFpbCwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBhbGxvd3Mgc3dpdGNoaW5nIHRvIHNsb3R0ZWQgY29udGVudAogICAgICovCiAgICBhc3luYyBzd2l0Y2hUb1Nsb3R0ZWRDb250ZW50KCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBjb25zdCBsb2dpbkRpdiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubG9naW4iKTsKICAgICAgY29uc3QgbG9naW5Db250YWluZXJEaXYgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmxvZ2luQ29udGFpbmVyIik7CiAgICAgIGNvbnN0IHNsb3RDb250YWluZXJEaXYgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnNsb3RDb250YWluZXIiKTsKICAgICAgbG9naW5EaXYuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgICAgbG9naW5EaXYuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZVkoMjBweCkiOwogICAgICBsb2dpbkNvbnRhaW5lckRpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gIm5vbmUiOwogICAgICBzbG90Q29udGFpbmVyRGl2LnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDIwcHgpIjsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigzMDApOwogICAgICBzbG90Q29udGFpbmVyRGl2LnN0eWxlLm9wYWNpdHkgPSAiMSI7CiAgICAgIHNsb3RDb250YWluZXJEaXYuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZVkoMHB4KSI7CiAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMzAwKTsKICAgICAgc2xvdENvbnRhaW5lckRpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gImFsbCI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3Myh0aGlzLCBfbmFtZV9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczczKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU2ltcGxlTG9naW4yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1hY3Rpb25iYXIvaW5kZXguanMKaW5pdF9kZWVzX2FjdGlvbmJhcigpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWJhZGdlL2RlZXMtYmFkZ2UuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM0NCA9ICgpID0+IGIyYAogIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBhbGlnbi1pdGVtczogY2VudGVyOyI+CiAgICA8ZGVlcy1iYWRnZSAudGV4dD0keyJEZWZhdWx0In0+PC9kZWVzLWJhZGdlPgogICAgPGRlZXMtYmFkZ2UgLnR5cGU9JHsicHJpbWFyeSJ9IC50ZXh0PSR7IlByaW1hcnkifT48L2RlZXMtYmFkZ2U+CiAgICA8ZGVlcy1iYWRnZSAudHlwZT0keyJzdWNjZXNzIn0gLnRleHQ9JHsiU3VjY2VzcyJ9PjwvZGVlcy1iYWRnZT4KICAgIDxkZWVzLWJhZGdlIC50eXBlPSR7Indhcm5pbmcifSAudGV4dD0keyJXYXJuaW5nIn0+PC9kZWVzLWJhZGdlPgogICAgPGRlZXMtYmFkZ2UgLnR5cGU9JHsiZXJyb3IifSAudGV4dD0keyJFcnJvciJ9PjwvZGVlcy1iYWRnZT4KICAgIDxkZWVzLWJhZGdlIC50eXBlPSR7InByaW1hcnkifSAucm91bmRlZD0ke3RydWV9IC50ZXh0PSR7IlJvdW5kZWQifT48L2RlZXMtYmFkZ2U+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtYmFkZ2UvZGVlcy1iYWRnZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU3MyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNzQgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNCYWRnZSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYmFkZ2UiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF90eXBlX2RlY29yYXRvcnM7CiAgbGV0IF90eXBlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdHlwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGV4dF9kZWNvcmF0b3JzOwogIGxldCBfdGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3JvdW5kZWRfZGVjb3JhdG9yczsKICBsZXQgX3JvdW5kZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb3VuZGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNCYWRnZTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90eXBlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfdGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3JvdW5kZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGU3Myh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzModGhpcywgbnVsbCwgX3RleHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50ZXh0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50ZXh0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RleHRfaW5pdGlhbGl6ZXJzLCBfdGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTczKHRoaXMsIG51bGwsIF9yb3VuZGVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJvdW5kZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJvdW5kZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucm91bmRlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucm91bmRlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yb3VuZGVkX2luaXRpYWxpemVycywgX3JvdW5kZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3MyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNCYWRnZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ0OwogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzQodGhpcywgX3R5cGVfaW5pdGlhbGl6ZXJzLCAiZGVmYXVsdCIpOwogICAgZ2V0IHR5cGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdHlwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NCh0aGlzLCBfdGV4dF9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgdGV4dCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3RleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0ZXh0KHZhbHVlMikgewogICAgICB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcm91bmRlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzQodGhpcywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9yb3VuZGVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCByb3VuZGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jcm91bmRlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJvdW5kZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3JvdW5kZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICBfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9yb3VuZGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc2V0dXAoKTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMnB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYmFkZ2Uucm91bmRlZCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgfQoKICAgICAgLmJhZGdlLmRlZmF1bHQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjVmNWY1IiwgIiMzMzMiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiNjY2MiKX07CiAgICAgIH0KCiAgICAgIC5iYWRnZS5wcmltYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMDA1MGI5OwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICB9CgogICAgICAuYmFkZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogIzJlN2QzMjsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQoKICAgICAgLmJhZGdlLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICNlZDZjMDI7CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIH0KCiAgICAgIC5iYWRnZS5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogI2U0MDAyYjsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJiYWRnZSAke3RoaXMudHlwZX0gJHt0aGlzLnJvdW5kZWQgPyAicm91bmRlZCIgOiAiIn0iPgogICAgICAgICR7dGhpcy50ZXh0fQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczc0KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQmFkZ2UyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1jaGlwcy9kZWVzLWNoaXBzLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNDUgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAuZGVtb0NvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMzJweDsKICAgICAgcGFkZGluZzogNDhweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOGY5ZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICB9CiAgICAKICAgIC5zZWN0aW9uIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzE4MTgxYiIpfTsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBwYWRkaW5nOiAyNHB4OwogICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgfQogICAgCiAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICB9CiAgICAKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW9Db250YWluZXIiPgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPk5vbi1TZWxlY3RhYmxlIENoaXBzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkJhc2ljIGNoaXBzIHdpdGhvdXQgc2VsZWN0aW9uIGNhcGFiaWxpdHkuIFVzZSBmb3IgZGlzcGxheS1vbmx5IHRhZ3MuPC9kaXY+CiAgICAgIDxkZWVzLWNoaXBzCiAgICAgICAgc2VsZWN0aW9uTW9kZT0ibm9uZSIKICAgICAgICAuc2VsZWN0YWJsZUNoaXBzPSR7WwogIHsga2V5OiAic3RhdHVzIiwgdmFsdWU6ICJBY3RpdmUiIH0sCiAgeyBrZXk6ICJ0aWVyIiwgdmFsdWU6ICJQcmVtaXVtIiB9LAogIHsga2V5OiAicmVnaW9uIiwgdmFsdWU6ICJFVS1XZXN0IiB9LAogIHsga2V5OiAidHlwZSIsIHZhbHVlOiAiRW50ZXJwcmlzZSIgfQpdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TaW5nbGUgU2VsZWN0aW9uIENoaXBzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkNsaWNrIHRvIHNlbGVjdCBvbmUgY2hpcCBhdCBhIHRpbWUuIFVzZWZ1bCBmb3IgZmlsdGVycyBhbmQgb3B0aW9ucy48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJzaW5nbGUiCiAgICAgICAgLnNlbGVjdGFibGVDaGlwcz0ke1sKICB7IGtleTogImFsbCIsIHZhbHVlOiAiQWxsIFByb2plY3RzIiB9LAogIHsga2V5OiAiYWN0aXZlIiwgdmFsdWU6ICJBY3RpdmUiIH0sCiAgeyBrZXk6ICJhcmNoaXZlZCIsIHZhbHVlOiAiQXJjaGl2ZWQiIH0sCiAgeyBrZXk6ICJkcmFmdHMiLCB2YWx1ZTogIkRyYWZ0cyIgfQpdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NdWx0aXBsZSBTZWxlY3Rpb24gQ2hpcHM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+U2VsZWN0IG11bHRpcGxlIGNoaXBzIHNpbXVsdGFuZW91c2x5LiBHcmVhdCBmb3IgdGFnIHNlbGVjdGlvbi48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJtdWx0aXBsZSIKICAgICAgICAuc2VsZWN0YWJsZUNoaXBzPSR7WwogIHsga2V5OiAianMiLCB2YWx1ZTogIkphdmFTY3JpcHQiIH0sCiAgeyBrZXk6ICJ0cyIsIHZhbHVlOiAiVHlwZVNjcmlwdCIgfSwKICB7IGtleTogInJlYWN0IiwgdmFsdWU6ICJSZWFjdCIgfSwKICB7IGtleTogInZ1ZSIsIHZhbHVlOiAiVnVlIiB9LAogIHsga2V5OiAiYW5ndWxhciIsIHZhbHVlOiAiQW5ndWxhciIgfSwKICB7IGtleTogIm5vZGUiLCB2YWx1ZTogIk5vZGUuanMiIH0KXX0KICAgICAgPjwvZGVlcy1jaGlwcz4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UmVtb3ZhYmxlIENoaXBzIHdpdGggS2V5czwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5DaGlwcyB3aXRoIHJlbW92ZSBidXR0b25zIGFuZCBrZXktdmFsdWUgcGFpcnMuIFBlcmZlY3QgZm9yIGR5bmFtaWMgbGlzdHMuPC9kaXY+CiAgICAgIDxkZWVzLWNoaXBzCiAgICAgICAgc2VsZWN0aW9uTW9kZT0ic2luZ2xlIgogICAgICAgIGNoaXBzQXJlUmVtb3ZhYmxlCiAgICAgICAgLnNlbGVjdGFibGVDaGlwcz0ke1sKICB7IGtleTogImVudiIsIHZhbHVlOiAiUHJvZHVjdGlvbiIgfSwKICB7IGtleTogInZlcnNpb24iLCB2YWx1ZTogIjIuNC4xIiB9LAogIHsga2V5OiAiYnJhbmNoIiwgdmFsdWU6ICJtYWluIiB9LAogIHsga2V5OiAiYXV0aG9yIiwgdmFsdWU6ICJKb2huIERvZSIgfQpdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NaXhlZCBDb250ZW50IEV4YW1wbGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+Q29tYmluaW5nIGRpZmZlcmVudCBjaGlwIHR5cGVzIGZvciBjb21wbGV4IFVJcy48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJtdWx0aXBsZSIKICAgICAgICBjaGlwc0FyZVJlbW92YWJsZQogICAgICAgIC5zZWxlY3RhYmxlQ2hpcHM9JHtbCiAgeyBrZXk6ICJwcmlvcml0eSIsIHZhbHVlOiAiSGlnaCIgfSwKICB7IGtleTogInN0YXR1cyIsIHZhbHVlOiAiSW4gUHJvZ3Jlc3MiIH0sCiAgeyBrZXk6ICJidWciLCB2YWx1ZTogIkJ1ZyIgfSwKICB7IGtleTogImZlYXR1cmUiLCB2YWx1ZTogIkZlYXR1cmUiIH0sCiAgeyBrZXk6ICJzcHJpbnQiLCB2YWx1ZTogIlNwcmludCAyMyIgfSwKICB7IGtleTogImFzc2lnbmVlIiwgdmFsdWU6ICJBbGljZSIgfQpdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtY2hpcHMvZGVlcy1jaGlwcy5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU3NCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNzUgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNDaGlwcyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtY2hpcHMiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9zZWxlY3Rpb25Nb2RlX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3Rpb25Nb2RlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0aW9uTW9kZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2hpcHNBcmVSZW1vdmFibGVfZGVjb3JhdG9yczsKICBsZXQgX2NoaXBzQXJlUmVtb3ZhYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2hpcHNBcmVSZW1vdmFibGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGFibGVDaGlwc19kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0YWJsZUNoaXBzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0YWJsZUNoaXBzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZENoaXBfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkQ2hpcF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkQ2hpcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRDaGlwc19kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRDaGlwc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkQ2hpcHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0NoaXBzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3NlbGVjdGlvbk1vZGVfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgX2NoaXBzQXJlUmVtb3ZhYmxlX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEJvb2xlYW4KICAgICAgfSldOwogICAgICBfc2VsZWN0YWJsZUNoaXBzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX3NlbGVjdGVkQ2hpcF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfc2VsZWN0ZWRDaGlwc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBBcnJheQogICAgICB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9zZWxlY3Rpb25Nb2RlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGlvbk1vZGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGlvbk1vZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0aW9uTW9kZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0aW9uTW9kZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3Rpb25Nb2RlX2luaXRpYWxpemVycywgX3NlbGVjdGlvbk1vZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NCh0aGlzLCBudWxsLCBfY2hpcHNBcmVSZW1vdmFibGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY2hpcHNBcmVSZW1vdmFibGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNoaXBzQXJlUmVtb3ZhYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNoaXBzQXJlUmVtb3ZhYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jaGlwc0FyZVJlbW92YWJsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jaGlwc0FyZVJlbW92YWJsZV9pbml0aWFsaXplcnMsIF9jaGlwc0FyZVJlbW92YWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9zZWxlY3RhYmxlQ2hpcHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0YWJsZUNoaXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RhYmxlQ2hpcHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0YWJsZUNoaXBzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RhYmxlQ2hpcHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0YWJsZUNoaXBzX2luaXRpYWxpemVycywgX3NlbGVjdGFibGVDaGlwc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9zZWxlY3RlZENoaXBfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRDaGlwIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZENoaXAiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRDaGlwLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZENoaXAgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRDaGlwX2luaXRpYWxpemVycywgX3NlbGVjdGVkQ2hpcF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9zZWxlY3RlZENoaXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkQ2hpcHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkQ2hpcHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRDaGlwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWRDaGlwcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZENoaXBzX2luaXRpYWxpemVycywgX3NlbGVjdGVkQ2hpcHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNDaGlwczIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ1OwogICAgI3NlbGVjdGlvbk1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX3NlbGVjdGlvbk1vZGVfaW5pdGlhbGl6ZXJzLCAic2luZ2xlIik7CiAgICBnZXQgc2VsZWN0aW9uTW9kZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGlvbk1vZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3Rpb25Nb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3Rpb25Nb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY2hpcHNBcmVSZW1vdmFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9zZWxlY3Rpb25Nb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfY2hpcHNBcmVSZW1vdmFibGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGNoaXBzQXJlUmVtb3ZhYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jY2hpcHNBcmVSZW1vdmFibGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjaGlwc0FyZVJlbW92YWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY2hpcHNBcmVSZW1vdmFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RhYmxlQ2hpcHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9jaGlwc0FyZVJlbW92YWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX3NlbGVjdGFibGVDaGlwc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgc2VsZWN0YWJsZUNoaXBzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0YWJsZUNoaXBzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VsZWN0YWJsZUNoaXBzKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RhYmxlQ2hpcHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZENoaXBfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9zZWxlY3RhYmxlQ2hpcHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9zZWxlY3RlZENoaXBfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgc2VsZWN0ZWRDaGlwKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRDaGlwX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VsZWN0ZWRDaGlwKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZENoaXBfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZENoaXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfc2VsZWN0ZWRDaGlwX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfc2VsZWN0ZWRDaGlwc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgc2VsZWN0ZWRDaGlwcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkQ2hpcHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZENoaXBzKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZENoaXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfc2VsZWN0ZWRDaGlwc19leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5tYWluYm94IHsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmNoaXAgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiAwcHggMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMDUpOwogICAgICB9CgogICAgICAuY2hpcDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkNWRiIiwgIiM1MjUyNWIiKX07CiAgICAgIH0KCiAgICAgIC5jaGlwOmFjdGl2ZSB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQoKICAgICAgLmNoaXAuc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICB9CgogICAgICAuY2hpcC5zZWxlY3RlZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMyNTYzZWIiLCAiIzI1NjNlYiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiMyNTYzZWIiKX07CiAgICAgIH0KCiAgICAgIC5jaGlwS2V5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA2KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC04cHg7CiAgICAgICAgcGFkZGluZzogMHB4IDhweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5jaGlwLnNlbGVjdGVkIC5jaGlwS2V5IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgfQoKICAgICAgZGVlcy1pY29uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAtNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgfQoKICAgICAgLmNoaXAuc2VsZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgICB9CgogICAgICBkZWVzLWljb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VmNDQ0NCIsICIjZWY0NDQ0Iil9OwogICAgICB9CgogICAgICAuY2hpcC5zZWxlY3RlZCBkZWVzLWljb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAke3RoaXMuc2VsZWN0YWJsZUNoaXBzLm1hcCgoY2hpcCkgPT4gYjJgCiAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNlbGVjdENoaXAoY2hpcCl9CiAgICAgICAgICAgICAgY2xhc3M9ImNoaXAgJHt0aGlzLmlzU2VsZWN0ZWQoY2hpcCkgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgJHtjaGlwLmtleSA/IGIyYDxkaXYgY2xhc3M9ImNoaXBLZXkiPiR7Y2hpcC5rZXl9PC9kaXY+YCA6IGIyYGB9ICR7Y2hpcC52YWx1ZX0KICAgICAgICAgICAgICAke3RoaXMuY2hpcHNBcmVSZW1vdmFibGUgPyBiMmAKICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoZXZlbnQpID0+IHsKICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB0aGlzLnJlbW92ZUNoaXAoY2hpcCk7CiAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgICAuaWNvbj0keyJmYTp4bWFyayJ9CiAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICBgIDogYjJgYH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgKX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgfQogICAgaXNTZWxlY3RlZChjaGlwKSB7CiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJzaW5nbGUiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDaGlwID8gdGhpcy5pc1NhbWVDaGlwKHRoaXMuc2VsZWN0ZWRDaGlwLCBjaGlwKSA6IGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ2hpcHMuc29tZSgoc2VsZWN0ZWQpID0+IHRoaXMuaXNTYW1lQ2hpcChzZWxlY3RlZCwgY2hpcCkpOwogICAgICB9CiAgICB9CiAgICBpc1NhbWVDaGlwKGNoaXAxLCBjaGlwMikgewogICAgICBpZiAoY2hpcDEua2V5ICYmIGNoaXAyLmtleSkgewogICAgICAgIHJldHVybiBjaGlwMS5rZXkgPT09IGNoaXAyLmtleTsKICAgICAgfQogICAgICByZXR1cm4gY2hpcDEudmFsdWUgPT09IGNoaXAyLnZhbHVlICYmIGNoaXAxLmtleSA9PT0gY2hpcDIua2V5OwogICAgfQogICAgYXN5bmMgc2VsZWN0Q2hpcChjaGlwKSB7CiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJub25lIikgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAic2luZ2xlIikgewogICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQoY2hpcCkpIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwID0gbnVsbDsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwcyA9IFtdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpcCA9IGNoaXA7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpcHMgPSBbY2hpcF07CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gIm11bHRpcGxlIikgewogICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQoY2hpcCkpIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwcyA9IHRoaXMuc2VsZWN0ZWRDaGlwcy5maWx0ZXIoKHNlbGVjdGVkKSA9PiAhdGhpcy5pc1NhbWVDaGlwKHNlbGVjdGVkLCBjaGlwKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwcyA9IFsuLi50aGlzLnNlbGVjdGVkQ2hpcHMsIGNoaXBdOwogICAgICAgIH0KICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgfQogICAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkQ2hpcHMpOwogICAgfQogICAgcmVtb3ZlQ2hpcChjaGlwVG9SZW1vdmUpIHsKICAgICAgdGhpcy5zZWxlY3RhYmxlQ2hpcHMgPSB0aGlzLnNlbGVjdGFibGVDaGlwcy5maWx0ZXIoKGNoaXApID0+ICF0aGlzLmlzU2FtZUNoaXAoY2hpcCwgY2hpcFRvUmVtb3ZlKSk7CiAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwcyA9IHRoaXMuc2VsZWN0ZWRDaGlwcy5maWx0ZXIoKGNoaXApID0+ICF0aGlzLmlzU2FtZUNoaXAoY2hpcCwgY2hpcFRvUmVtb3ZlKSk7CiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ2hpcCAmJiB0aGlzLmlzU2FtZUNoaXAodGhpcy5zZWxlY3RlZENoaXAsIGNoaXBUb1JlbW92ZSkpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpcCA9IG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczc1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQ2hpcHMyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1kYXNoYm9hcmRncmlkL2RlZXMtZGFzaGJvYXJkZ3JpZC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzQ2ID0gKCkgPT4gewogIHJldHVybiBiMmAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICBjb25zdCBncmlkID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZGFzaGJvYXJkR3JpZCIpOwogICAgY29uc3Qgc2VlZFdpZGdldHMgPSBbCiAgICAgIHsKICAgICAgICBpZDogIm1ldHJpY3MxIiwKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAsCiAgICAgICAgdzogMywKICAgICAgICBoOiAyLAogICAgICAgIHRpdGxlOiAiUmV2ZW51ZSIsCiAgICAgICAgaWNvbjogImx1Y2lkZTpkb2xsYXJTaWduIiwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzogMjBweDsiPgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMzJweDsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07Ij4kMTI0LDU2MzwvZGl2PgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImNvbG9yOiAjMjJjNTVlOyBmb250LXNpemU6IDE0cHg7IG1hcmdpbi10b3A6IDhweDsiPuKGkSAxMi41JSBmcm9tIGxhc3QgbW9udGg8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogIm1ldHJpY3MyIiwKICAgICAgICB4OiAzLAogICAgICAgIHk6IDAsCiAgICAgICAgdzogMywKICAgICAgICBoOiAyLAogICAgICAgIHRpdGxlOiAiVXNlcnMiLAogICAgICAgIGljb246ICJsdWNpZGU6dXNlcnMiLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyMHB4OyI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAzMnB4OyBmb250LXdlaWdodDogNzAwOyBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsiPjgsMjM0PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iY29sb3I6ICMzYjgyZjY7IGZvbnQtc2l6ZTogMTRweDsgbWFyZ2luLXRvcDogOHB4OyI+4oaRIDUuMiUgZnJvbSBsYXN0IHdlZWs8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogImNoYXJ0MSIsCiAgICAgICAgeDogNiwKICAgICAgICB5OiAwLAogICAgICAgIHc6IDYsCiAgICAgICAgaDogNCwKICAgICAgICB0aXRsZTogIkFuYWx5dGljcyIsCiAgICAgICAgaWNvbjogImx1Y2lkZTpsaW5lQ2hhcnQiLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyMHB4OyBoZWlnaHQ6IDEwMCU7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzcxNzE3YTsiPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6bGluZUNoYXJ0In0gc3R5bGU9ImZvbnQtc2l6ZTogNDhweDsgbWFyZ2luLWJvdHRvbTogMTZweDsiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPGRpdj5DaGFydCB2aXN1YWxpemF0aW9uIGFyZWE8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgCiAgICAgIH0KICAgIF07CiAgICBncmlkLndpZGdldHMgPSBzZWVkV2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gKHsgLi4ud2lkZ2V0IH0pKTsKICAgIGdyaWQuY2VsbEhlaWdodCA9IDgwOwogICAgZ3JpZC5tYXJnaW4gPSB7IHRvcDogMTAsIHJpZ2h0OiAxMCwgYm90dG9tOiAxMCwgbGVmdDogMTAgfTsKICAgIGdyaWQuZW5hYmxlQW5pbWF0aW9uID0gdHJ1ZTsKICAgIGdyaWQuc2hvd0dyaWRMaW5lcyA9IGZhbHNlOwogICAgY29uc3QgYmFzZUxheW91dCA9IGdyaWQuZ2V0TGF5b3V0KCkubWFwKChpdGVtKSA9PiAoeyAuLi5pdGVtIH0pKTsKICAgIGNvbnN0IG1vYmlsZUxheW91dCA9IGdyaWQud2lkZ2V0cy5tYXAoKHdpZGdldCwgaW5kZXgyKSA9PiAoewogICAgICBpZDogd2lkZ2V0LmlkLAogICAgICB4OiAwLAogICAgICB5OiBpbmRleDIgPT09IDAgPyAwIDogZ3JpZC53aWRnZXRzLnNsaWNlKDAsIGluZGV4MikucmVkdWNlKChhY2MsIHByZXYpID0+IGFjYyArIHByZXYuaCwgMCksCiAgICAgIHc6IGdyaWQuY29sdW1ucywKICAgICAgaDogd2lkZ2V0LmgKICAgIH0pKTsKICAgIGdyaWQubGF5b3V0cyA9IHsKICAgICAgYmFzZTogYmFzZUxheW91dCwKICAgICAgbW9iaWxlOiBtb2JpbGVMYXlvdXQKICAgIH07CiAgICBjb25zdCBzdGF0dXNFbCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2Rhc2hib2FyZExheW91dFN0YXR1cyIpOwogICAgY29uc3QgdXBkYXRlU3RhdHVzID0gKCkgPT4gewogICAgICBjb25zdCBsYXlvdXQgPSBncmlkLmdldExheW91dCgpOwogICAgICBzdGF0dXNFbC50ZXh0Q29udGVudCA9IGBBY3RpdmUgYnJlYWtwb2ludDogJHtncmlkLmFjdGl2ZUJyZWFrcG9pbnR9IFx1MjAyMiBUaWxlczogJHtsYXlvdXQubGVuZ3RofWA7CiAgICB9OwogICAgY29uc3QgbWVkaWFRdWVyeSA9IHdpbmRvdy5tYXRjaE1lZGlhKCIobWF4LXdpZHRoOiA3NjhweCkiKTsKICAgIGNvbnN0IGhhbmRsZUJyZWFrcG9pbnQgPSAoKSA9PiB7CiAgICAgIGNvbnN0IHRhcmdldCA9IG1lZGlhUXVlcnkubWF0Y2hlcyA/ICJtb2JpbGUiIDogImJhc2UiOwogICAgICBncmlkLmFwcGx5QnJlYWtwb2ludExheW91dCh0YXJnZXQpOwogICAgICB1cGRhdGVTdGF0dXMoKTsKICAgIH07CiAgICBpZiAodHlwZW9mIG1lZGlhUXVlcnkuYWRkRXZlbnRMaXN0ZW5lciA9PT0gImZ1bmN0aW9uIikgewogICAgICBtZWRpYVF1ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGhhbmRsZUJyZWFrcG9pbnQpOwogICAgfSBlbHNlIHsKICAgICAgbWVkaWFRdWVyeS5hZGRMaXN0ZW5lcj8uKGhhbmRsZUJyZWFrcG9pbnQpOwogICAgfQogICAgaGFuZGxlQnJlYWtwb2ludCgpOwogICAgbGV0IHdpZGdldENvdW50ZXIgPSA0OwogICAgY29uc3QgYnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICAgIGNvbnN0IHRleHQ5ID0gYnV0dG9uLnRleHRDb250ZW50Py50cmltKCk7CiAgICAgIHN3aXRjaCAodGV4dDkpIHsKICAgICAgICBjYXNlICJUb2dnbGUgQW5pbWF0aW9uIjoKICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgZ3JpZC5lbmFibGVBbmltYXRpb24gPSAhZ3JpZC5lbmFibGVBbmltYXRpb247CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlRvZ2dsZSBHcmlkIExpbmVzIjoKICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgZ3JpZC5zaG93R3JpZExpbmVzID0gIWdyaWQuc2hvd0dyaWRMaW5lczsKICAgICAgICAgIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQWRkIFdpZGdldCI6CiAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IG5ld1dpZGdldCA9IHsKICAgICAgICAgICAgICBpZDogYHdpZGdldCR7d2lkZ2V0Q291bnRlcisrfWAsCiAgICAgICAgICAgICAgeDogMCwKICAgICAgICAgICAgICB5OiAwLAogICAgICAgICAgICAgIHc6IDMsCiAgICAgICAgICAgICAgaDogMiwKICAgICAgICAgICAgICBhdXRvUG9zaXRpb246IHRydWUsCiAgICAgICAgICAgICAgdGl0bGU6IGBXaWRnZXQgJHt3aWRnZXRDb3VudGVyIC0gMX1gLAogICAgICAgICAgICAgIGljb246ICJsdWNpZGU6cGFja2FnZSIsCiAgICAgICAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6IDIwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImNvbG9yOiAjNzE3MTdhOyI+TmV3IHdpZGdldCBjb250ZW50PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogOHB4OyBmb250LXNpemU6IDI0cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OyI+JHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTMpfTwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAKICAgICAgICAgICAgfTsKICAgICAgICAgICAgZ3JpZC5hZGRXaWRnZXQobmV3V2lkZ2V0LCB0cnVlKTsKICAgICAgICAgIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQ29tcGFjdCBHcmlkIjoKICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgZ3JpZC5jb21wYWN0KCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlRvZ2dsZSBFZGl0IE1vZGUiOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICBncmlkLmVkaXRhYmxlID0gIWdyaWQuZWRpdGFibGU7CiAgICAgICAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9IGdyaWQuZWRpdGFibGUgPyAiTG9jayBHcmlkIiA6ICJVbmxvY2sgR3JpZCI7CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlJlc2V0IExheW91dCI6CiAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgIGdyaWQuYXBwbHlCcmVha3BvaW50TGF5b3V0KGdyaWQuYWN0aXZlQnJlYWtwb2ludCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSk7CiAgICBsZXQgbGFzdFBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgbGV0IG1vdmVFdmVudENvdW50ZXIgPSAwOwogICAgY29uc3QgbG9nR3JpZFN0YXRlID0gKGV2ZW50TmFtZSwgZGV0YWlscykgPT4gewogICAgICBjb25zdCBsYXlvdXQgPSBncmlkLmdldExheW91dCgpOwogICAgICBjb25zb2xlLmdyb3VwKGBcdXsxRjUwNH0gJHtldmVudE5hbWV9IFtFdmVudCAjJHsrK21vdmVFdmVudENvdW50ZXJ9XWApOwogICAgICBjb25zb2xlLmxvZygiVGltZXN0YW1wOiIsICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSk7CiAgICAgIGNvbnNvbGUubG9nKCJHcmlkIENvbmZpZ3VyYXRpb246IiwgewogICAgICAgIGNvbHVtbnM6IGdyaWQuY29sdW1ucywKICAgICAgICBjZWxsSGVpZ2h0OiBncmlkLmNlbGxIZWlnaHQsCiAgICAgICAgbWFyZ2luOiBncmlkLm1hcmdpbiwKICAgICAgICBlZGl0YWJsZTogZ3JpZC5lZGl0YWJsZSwKICAgICAgICBhY3RpdmVCcmVha3BvaW50OiBncmlkLmFjdGl2ZUJyZWFrcG9pbnQKICAgICAgfSk7CiAgICAgIGNvbnNvbGUubG9nKCJDdXJyZW50IExheW91dDoiLCBsYXlvdXQpOwogICAgICBjb25zb2xlLmxvZygiV2lkZ2V0IENvdW50OiIsIGxheW91dC5sZW5ndGgpOwogICAgICBjb25zb2xlLmxvZygiR3JpZCBCb3VuZHM6IiwgewogICAgICAgIHRvdGFsV2lkZ2V0czogZ3JpZC53aWRnZXRzLmxlbmd0aCwKICAgICAgICBtYXhZOiBNYXRoLm1heCguLi5sYXlvdXQubWFwKCh3MykgPT4gdzMueSArIHczLmgpKSwKICAgICAgICBvY2N1cGllZDogbGF5b3V0Lm1hcCgodzMpID0+IGAke3czLmlkfTogKCR7dzMueH0sJHt3My55fSkgJHt3My53fXgke3czLmh9YCkuam9pbigiLCAiKQogICAgICB9KTsKICAgICAgaWYgKGRldGFpbHMpIHsKICAgICAgICBjb25zb2xlLmxvZygiRXZlbnQgRGV0YWlsczoiLCBkZXRhaWxzKTsKICAgICAgfQogICAgICBjb25zb2xlLmdyb3VwRW5kKCk7CiAgICB9OwogICAgY29uc3QgcGxhY2Vob2xkZXJPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHsKICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSBncmlkLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wbGFjZWhvbGRlciIpOwogICAgICBpZiAocGxhY2Vob2xkZXIpIHsKICAgICAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSB7CiAgICAgICAgICBsZWZ0OiBwbGFjZWhvbGRlci5zdHlsZS5sZWZ0LAogICAgICAgICAgdG9wOiBwbGFjZWhvbGRlci5zdHlsZS50b3AsCiAgICAgICAgICB3aWR0aDogcGxhY2Vob2xkZXIuc3R5bGUud2lkdGgsCiAgICAgICAgICBoZWlnaHQ6IHBsYWNlaG9sZGVyLnN0eWxlLmhlaWdodAogICAgICAgIH07CiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRQb3NpdGlvbikgIT09IEpTT04uc3RyaW5naWZ5KGxhc3RQbGFjZWhvbGRlclBvc2l0aW9uKSkgewogICAgICAgICAgY29uc29sZS5ncm91cCgiXHV7MUY0Q0R9IFBsYWNlaG9sZGVyIFBvc2l0aW9uIENoYW5nZWQiKTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJQcmV2aW91czoiLCBsYXN0UGxhY2Vob2xkZXJQb3NpdGlvbik7CiAgICAgICAgICBjb25zb2xlLmxvZygiQ3VycmVudDoiLCBjdXJyZW50UG9zaXRpb24pOwogICAgICAgICAgY29uc3QgZ3JpZEluZm8gPSBncmlkLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ncmlkLWNvbnRhaW5lciIpOwogICAgICAgICAgaWYgKGdyaWRJbmZvKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJHcmlkIENvbnRhaW5lciBEaW1lbnNpb25zOiIsIHsKICAgICAgICAgICAgICB3aWR0aDogZ3JpZEluZm8uY2xpZW50V2lkdGgsCiAgICAgICAgICAgICAgaGVpZ2h0OiBncmlkSW5mby5jbGllbnRIZWlnaHQKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7CiAgICAgICAgICBsYXN0UGxhY2Vob2xkZXJQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbjsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgaWYgKGdyaWQuc2hhZG93Um9vdCkgewogICAgICBwbGFjZWhvbGRlck9ic2VydmVyLm9ic2VydmUoZ3JpZC5zaGFkb3dSb290LCB7CiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLAogICAgICAgIHN1YnRyZWU6IHRydWUsCiAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwKICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsic3R5bGUiXQogICAgICB9KTsKICAgIH0KICAgIGxvZ0dyaWRTdGF0ZSgiSW5pdGlhbCBHcmlkIFN0YXRlIik7CiAgICBncmlkLmFkZEV2ZW50TGlzdGVuZXIoIndpZGdldC1tb3ZlIiwgKGUxMSkgPT4gewogICAgICBsb2dHcmlkU3RhdGUoIldpZGdldCBNb3ZlIiwgewogICAgICAgIHdpZGdldDogZTExLmRldGFpbC53aWRnZXQsCiAgICAgICAgZGlzcGxhY2VkOiBlMTEuZGV0YWlsLmRpc3BsYWNlZCwKICAgICAgICBzd2FwcGVkV2l0aDogZTExLmRldGFpbC5zd2FwcGVkV2l0aAogICAgICB9KTsKICAgIH0pOwogICAgZ3JpZC5hZGRFdmVudExpc3RlbmVyKCJ3aWRnZXQtcmVzaXplIiwgKGUxMSkgPT4gewogICAgICBsb2dHcmlkU3RhdGUoIldpZGdldCBSZXNpemUiLCB7CiAgICAgICAgd2lkZ2V0OiBlMTEuZGV0YWlsLndpZGdldCwKICAgICAgICBkaXNwbGFjZWQ6IGUxMS5kZXRhaWwuZGlzcGxhY2VkLAogICAgICAgIHN3YXBwZWRXaXRoOiBlMTEuZGV0YWlsLnN3YXBwZWRXaXRoCiAgICAgIH0pOwogICAgfSk7CiAgICBncmlkLmFkZEV2ZW50TGlzdGVuZXIoIndpZGdldC1yZW1vdmUiLCAoZTExKSA9PiB7CiAgICAgIGxvZ0dyaWRTdGF0ZSgiV2lkZ2V0IFJlbW92ZSIsIHsKICAgICAgICByZW1vdmVkV2lkZ2V0OiBlMTEuZGV0YWlsLndpZGdldAogICAgICB9KTsKICAgICAgdXBkYXRlU3RhdHVzKCk7CiAgICB9KTsKICAgIGdyaWQuYWRkRXZlbnRMaXN0ZW5lcigibGF5b3V0LWNoYW5nZSIsICgpID0+IHsKICAgICAgbG9nR3JpZFN0YXRlKCJMYXlvdXQgQ2hhbmdlIik7CiAgICAgIHVwZGF0ZVN0YXR1cygpOwogICAgfSk7CiAgICBncmlkLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIiwgKGUxMSkgPT4gewogICAgICBjb25zdCBpc0hlYWRlciA9IGUxMS50YXJnZXQuY2xvc2VzdCgiLndpZGdldC1oZWFkZXIiKTsKICAgICAgY29uc3QgaXNSZXNpemVIYW5kbGUgPSBlMTEudGFyZ2V0LmNsb3Nlc3QoIi5yZXNpemUtaGFuZGxlIik7CiAgICAgIGlmIChpc0hlYWRlciB8fCBpc1Jlc2l6ZUhhbmRsZSkgewogICAgICAgIGNvbnNvbGUuZ3JvdXAoYFx1ezFGM0FGfSBJbnRlcmFjdGlvbiBTdGFydGVkOiAke2lzSGVhZGVyID8gIkRyYWciIDogIlJlc2l6ZSJ9YCk7CiAgICAgICAgY29uc29sZS5sb2coIlRhcmdldCBXaWRnZXQ6IiwgZTExLnRhcmdldC5jbG9zZXN0KCIud2lkZ2V0Iik/LmdldEF0dHJpYnV0ZSgiZGF0YS13aWRnZXQtaWQiKSk7CiAgICAgICAgY29uc29sZS5sb2coIlBvaW50ZXIgUG9zaXRpb246IiwgeyB4OiBlMTEuY2xpZW50WCwgeTogZTExLmNsaWVudFkgfSk7CiAgICAgICAgY29uc29sZS5ncm91cEVuZCgpOwogICAgICAgIGNvbnN0IGhhbmRsZVBvaW50ZXJNb3ZlID0gKG1vdmVFdmVudCkgPT4gewogICAgICAgICAgY29uc3Qgd2lkZ2V0ID0gZTExLnRhcmdldC5jbG9zZXN0KCIud2lkZ2V0Iik7CiAgICAgICAgICBpZiAod2lkZ2V0KSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcdTIxOTRcdUZFMEYgUG9pbnRlciBNb3ZlOmAsIHsKICAgICAgICAgICAgICB3aWRnZXRJZDogd2lkZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS13aWRnZXQtaWQiKSwKICAgICAgICAgICAgICBwb3NpdGlvbjogeyB4OiBtb3ZlRXZlbnQuY2xpZW50WCwgeTogbW92ZUV2ZW50LmNsaWVudFkgfSwKICAgICAgICAgICAgICBkZWx0YTogewogICAgICAgICAgICAgICAgeDogbW92ZUV2ZW50LmNsaWVudFggLSBlMTEuY2xpZW50WCwKICAgICAgICAgICAgICAgIHk6IG1vdmVFdmVudC5jbGllbnRZIC0gZTExLmNsaWVudFkKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgY29uc3QgaGFuZGxlUG9pbnRlclVwID0gKCkgPT4gewogICAgICAgICAgY29uc29sZS5ncm91cCgiXHV7MUYzQzF9IEludGVyYWN0aW9uIEVuZGVkIik7CiAgICAgICAgICBsb2dHcmlkU3RhdGUoIkZpbmFsIFN0YXRlIEFmdGVyIEludGVyYWN0aW9uIik7CiAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7CiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIGhhbmRsZVBvaW50ZXJNb3ZlKTsKICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsIGhhbmRsZVBvaW50ZXJVcCk7CiAgICAgICAgfTsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIGhhbmRsZVBvaW50ZXJNb3ZlKTsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCBoYW5kbGVQb2ludGVyVXApOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IG9yaWdpbmFsQWRkV2lkZ2V0ID0gZ3JpZC5hZGRXaWRnZXQuYmluZChncmlkKTsKICAgIGdyaWQuYWRkV2lkZ2V0ID0gKHdpZGdldCwgYXV0b1Bvc2l0aW9uKSA9PiB7CiAgICAgIGNvbnNvbGUuZ3JvdXAoIlx1Mjc5NSBBZGRpbmcgV2lkZ2V0Iik7CiAgICAgIGNvbnNvbGUubG9nKCJOZXcgV2lkZ2V0OiIsIHdpZGdldCk7CiAgICAgIGNvbnNvbGUubG9nKCJBdXRvIFBvc2l0aW9uOiIsIGF1dG9Qb3NpdGlvbik7CiAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsQWRkV2lkZ2V0KHdpZGdldCwgYXV0b1Bvc2l0aW9uKTsKICAgICAgbG9nR3JpZFN0YXRlKCJBZnRlciBXaWRnZXQgQWRkZWQiKTsKICAgICAgY29uc29sZS5ncm91cEVuZCgpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIGNvbnN0IG9yaWdpbmFsQ29tcGFjdCA9IGdyaWQuY29tcGFjdC5iaW5kKGdyaWQpOwogICAgZ3JpZC5jb21wYWN0ID0gKGRpcmVjdGlvbikgPT4gewogICAgICBjb25zb2xlLmdyb3VwKCJcdXsxRjVEQ31cdUZFMEYgQ29tcGFjdGluZyBHcmlkIik7CiAgICAgIGNvbnNvbGUubG9nKCJEaXJlY3Rpb246IiwgZGlyZWN0aW9uIHx8ICJ2ZXJ0aWNhbCIpOwogICAgICBsb2dHcmlkU3RhdGUoIkJlZm9yZSBDb21wYWN0Iik7CiAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsQ29tcGFjdChkaXJlY3Rpb24pOwogICAgICBsb2dHcmlkU3RhdGUoIkFmdGVyIENvbXBhY3QiKTsKICAgICAgY29uc29sZS5ncm91cEVuZCgpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIHVwZGF0ZVN0YXR1cygpOwogIH19PgogICAgICA8c3R5bGU+CiAgICAgICAgJHtpYAogICAgICAgICAgLmRlbW9Cb3ggewogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMwOTA5MGIiKX07CiAgICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIH0KCiAgICAgICAgICAuZGVtby1jb250cm9scyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgICAgfQoKICAgICAgICAgIC5kZW1vLWNvbnRyb2xzIGRlZXMtYnV0dG9uIHsKICAgICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgICB9CgogICAgICAgICAgLmdyaWQtY29udGFpbmVyLXdyYXBwZXIgewogICAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgICBtaW4taGVpZ2h0OiA2MDBweDsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgfQoKICAgICAgICAgIC5pbmZvIHsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICBnYXA6IDZweDsKICAgICAgICAgIH0KCiAgICAgICAgICAjZGFzaGJvYXJkTGF5b3V0U3RhdHVzIHsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgICAgICB9CiAgICAgICAgYH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0iZGVtb0JveCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb250cm9scyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFuaW1hdGlvbjoiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEFuaW1hdGlvbjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgoKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iRGlzcGxheToiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEdyaWQgTGluZXM8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KCiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFjdGlvbnM6Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkFkZCBXaWRnZXQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+Q29tcGFjdCBHcmlkPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlJlc2V0IExheW91dDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgoKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iTW9kZToiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEVkaXQgTW9kZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWNvbnRhaW5lci13cmFwcGVyIj4KICAgICAgICAgIDxkZWVzLWRhc2hib2FyZGdyaWQgaWQ9ImRhc2hib2FyZEdyaWQiPjwvZGVlcy1kYXNoYm9hcmRncmlkPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvIj4KICAgICAgICAgIDxkaXY+RHJhZyB0byByZXBvc2l0aW9uLCByZXNpemUgZnJvbSBoYW5kbGVzLCBvciByaWdodC1jbGljayBhIGhlYWRlciB0byBkZWxldGUgYSB0aWxlLjwvZGl2PgogICAgICAgICAgPGRpdiBpZD0iZGFzaGJvYXJkTGF5b3V0U3RhdHVzIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1kYXNoYm9hcmRncmlkL3N0eWxlcy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGFzaGJvYXJkR3JpZFN0eWxlcyA9IFsKICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5ncmlkLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1pbi1oZWlnaHQ6IDQwMHB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpbGwtY2hhbmdlOiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbZW5hYmxlYW5pbWF0aW9uXSkgLmdyaWQtd2lkZ2V0IHsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICAuZ3JpZC13aWRnZXQuZHJhZ2dpbmcgewogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KICAgICAgCiAgICAgIC5ncmlkLXdpZGdldC5wbGFjZWhvbGRlciB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQogICAgICAKICAgICAgLmdyaWQtd2lkZ2V0LnBsYWNlaG9sZGVyIC53aWRnZXQtY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIil9OwogICAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldC5yZXNpemluZyB7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAud2lkZ2V0LWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpIiwgIjAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMykiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldDpob3ZlciAud2lkZ2V0LWNvbnRlbnQgewogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSkiLCAiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuNCkiKX07CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldC5kcmFnZ2luZyAud2lkZ2V0LWNvbnRlbnQgewogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDE2cHggNDhweCByZ2JhKDAsIDAsIDAsIDAuMjUpIiwgIjAgMTZweCA0OHB4IHJnYmEoMCwgMCwgMCwgMC42KSIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpOwogICAgICB9CgogICAgICAud2lkZ2V0LWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMGEwYTBhIil9OwogICAgICAgIGN1cnNvcjogZ3JhYjsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLndpZGdldC1oZWFkZXI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMxODE4MWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC53aWRnZXQtaGVhZGVyOmFjdGl2ZSB7CiAgICAgICAgY3Vyc29yOiBncmFiYmluZzsKICAgICAgfQoKICAgICAgLndpZGdldC1oZWFkZXIubG9ja2VkIHsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KICAgICAgCiAgICAgIC53aWRnZXQtaGVhZGVyLmxvY2tlZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzBhMGEwYSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC1oZWFkZXIgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQtYm9keSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC1ib2R5Lmhhcy1oZWFkZXIgewogICAgICAgIHRvcDogNDVweDsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS1lIHsKICAgICAgICBjdXJzb3I6IGV3LXJlc2l6ZTsKICAgICAgICB3aWR0aDogMTJweDsKICAgICAgICByaWdodDogLTZweDsKICAgICAgICB0b3A6IDEwJTsKICAgICAgICBoZWlnaHQ6IDgwJTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtcyB7CiAgICAgICAgY3Vyc29yOiBucy1yZXNpemU7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgICAgYm90dG9tOiAtNnB4OwogICAgICAgIGxlZnQ6IDEwJTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtc2UgewogICAgICAgIGN1cnNvcjogc2UtcmVzaXplOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICByaWdodDogLTJweDsKICAgICAgICBib3R0b206IC0ycHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLnJlc2l6ZS1oYW5kbGUtc2U6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDRweDsKICAgICAgICBib3R0b206IDRweDsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldDpob3ZlciAucmVzaXplLWhhbmRsZS1zZSB7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS1zZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMSAhaW1wb3J0YW50OwogICAgICB9CiAgICAgIAogICAgICAucmVzaXplLWhhbmRsZS1zZTpob3Zlcjo6YWZ0ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgICAgfQoKICAgICAgLmdyaWQtcGxhY2Vob2xkZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDQ4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KICAgICAgCiAgICAgIC5ncmlkLWxpbmVzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHotaW5kZXg6IC0xOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1saW5lLXZlcnRpY2FsIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1saW5lLWhvcml6b250YWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgYApdOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWRhc2hib2FyZGdyaWQvbGF5b3V0LmpzCnZhciBERUZBVUxUX01BUkdJTiA9IDEwOwp2YXIgcmVzb2x2ZU1hcmdpbnMgPSAobWFyZ2luKSA9PiB7CiAgaWYgKHR5cGVvZiBtYXJnaW4gPT09ICJudW1iZXIiKSB7CiAgICByZXR1cm4gewogICAgICBob3Jpem9udGFsOiBtYXJnaW4sCiAgICAgIHZlcnRpY2FsOiBtYXJnaW4sCiAgICAgIHRvcDogbWFyZ2luLAogICAgICByaWdodDogbWFyZ2luLAogICAgICBib3R0b206IG1hcmdpbiwKICAgICAgbGVmdDogbWFyZ2luCiAgICB9OwogIH0KICBjb25zdCByZXNvbHZlZDIgPSB7CiAgICB0b3A6IG1hcmdpbi50b3AgPz8gREVGQVVMVF9NQVJHSU4sCiAgICByaWdodDogbWFyZ2luLnJpZ2h0ID8/IERFRkFVTFRfTUFSR0lOLAogICAgYm90dG9tOiBtYXJnaW4uYm90dG9tID8/IERFRkFVTFRfTUFSR0lOLAogICAgbGVmdDogbWFyZ2luLmxlZnQgPz8gREVGQVVMVF9NQVJHSU4KICB9OwogIHJldHVybiB7CiAgICAuLi5yZXNvbHZlZDIsCiAgICBob3Jpem9udGFsOiAocmVzb2x2ZWQyLmxlZnQgKyByZXNvbHZlZDIucmlnaHQpIC8gMiwKICAgIHZlcnRpY2FsOiAocmVzb2x2ZWQyLnRvcCArIHJlc29sdmVkMi5ib3R0b20pIC8gMgogIH07Cn07CnZhciBjYWxjdWxhdGVDZWxsTWV0cmljcyA9IChjb250YWluZXJXaWR0aCwgY29sdW1ucywgbWFyZ2lucywgY2VsbEhlaWdodCwgY2VsbEhlaWdodFVuaXQpID0+IHsKICBjb25zdCB0b3RhbE1hcmdpbldpZHRoID0gbWFyZ2lucy5ob3Jpem9udGFsICogKGNvbHVtbnMgKyAxKTsKICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IE1hdGgubWF4KGNvbnRhaW5lcldpZHRoIC0gdG90YWxNYXJnaW5XaWR0aCwgMCk7CiAgY29uc3QgY2VsbFdpZHRoUHggPSBjb2x1bW5zID4gMCA/IGF2YWlsYWJsZVdpZHRoIC8gY29sdW1ucyA6IDA7CiAgY29uc3QgY2VsbEhlaWdodFB4ID0gY2VsbEhlaWdodFVuaXQgPT09ICJhdXRvIiA/IGNlbGxXaWR0aFB4IDogY2VsbEhlaWdodDsKICByZXR1cm4gewogICAgY29udGFpbmVyV2lkdGgsCiAgICBjZWxsV2lkdGhQeCwKICAgIG1hcmdpbkhvcml6b250YWxQeDogbWFyZ2lucy5ob3Jpem9udGFsLAogICAgY2VsbEhlaWdodFB4LAogICAgbWFyZ2luVmVydGljYWxQeDogbWFyZ2lucy52ZXJ0aWNhbAogIH07Cn07CnZhciBjYWxjdWxhdGVHcmlkSGVpZ2h0ID0gKHdpZGdldHMsIG1hcmdpbnMsIGNlbGxIZWlnaHQpID0+IHsKICBpZiAod2lkZ2V0cy5sZW5ndGggPT09IDApCiAgICByZXR1cm4gMDsKICBjb25zdCBtYXhZID0gTWF0aC5tYXgoLi4ud2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gd2lkZ2V0LnkgKyB3aWRnZXQuaCksIDApOwogIHJldHVybiBtYXhZICogY2VsbEhlaWdodCArIChtYXhZICsgMSkgKiBtYXJnaW5zLnZlcnRpY2FsOwp9Owp2YXIgb3ZlcmxhcHMgPSAod2lkZ2V0LCB4MywgeTUsIHczLCBoOSkgPT4geDMgPCB3aWRnZXQueCArIHdpZGdldC53ICYmIHgzICsgdzMgPiB3aWRnZXQueCAmJiB5NSA8IHdpZGdldC55ICsgd2lkZ2V0LmggJiYgeTUgKyBoOSA+IHdpZGdldC55Owp2YXIgY29sbGVjdENvbGxpc2lvbnMgPSAod2lkZ2V0cywgdGFyZ2V0LCBuZXh0WCwgbmV4dFksIG5leHRXID0gdGFyZ2V0LncsIG5leHRIID0gdGFyZ2V0LmgpID0+IHsKICByZXR1cm4gd2lkZ2V0cy5maWx0ZXIoKHdpZGdldCkgPT4gewogICAgaWYgKHdpZGdldC5pZCA9PT0gdGFyZ2V0LmlkKQogICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gb3ZlcmxhcHMod2lkZ2V0LCBuZXh0WCwgbmV4dFksIG5leHRXLCBuZXh0SCk7CiAgfSk7Cn07CnZhciBjaGVja0NvbGxpc2lvbiA9ICh3aWRnZXRzLCB0YXJnZXQsIG5leHRYLCBuZXh0WSkgPT4gY29sbGVjdENvbGxpc2lvbnMod2lkZ2V0cywgdGFyZ2V0LCBuZXh0WCwgbmV4dFkpLmxlbmd0aCA+IDA7CnZhciBjbG9uZVdpZGdldCA9ICh3aWRnZXQpID0+ICh7IC4uLndpZGdldCB9KTsKdmFyIGNsb25lV2lkZ2V0cyA9ICh3aWRnZXRzKSA9PiB3aWRnZXRzLm1hcChjbG9uZVdpZGdldCk7CnZhciBmaW5kQXZhaWxhYmxlUG9zaXRpb24gPSAod2lkZ2V0cywgd2lkdGgsIGhlaWdodCwgY29sdW1ucykgPT4gewogIGZvciAobGV0IHk1ID0gMDsgeTUgPCAyMDA7IHk1KyspIHsKICAgIGZvciAobGV0IHgzID0gMDsgeDMgPD0gY29sdW1ucyAtIHdpZHRoOyB4MysrKSB7CiAgICAgIGNvbnN0IGlzRnJlZSA9ICF3aWRnZXRzLnNvbWUoKHdpZGdldCkgPT4gb3ZlcmxhcHMod2lkZ2V0LCB4MywgeTUsIHdpZHRoLCBoZWlnaHQpKTsKICAgICAgaWYgKGlzRnJlZSkgewogICAgICAgIHJldHVybiB7IHg6IHgzLCB5OiB5NSB9OwogICAgICB9CiAgICB9CiAgfQogIGNvbnN0IG1heFkgPSB3aWRnZXRzLnJlZHVjZSgoYWNjLCB3aWRnZXQpID0+IE1hdGgubWF4KGFjYywgd2lkZ2V0LnkgKyB3aWRnZXQuaCksIDApOwogIHJldHVybiB7IHg6IDAsIHk6IG1heFkgfTsKfTsKdmFyIHJlc29sdmVXaWRnZXRQbGFjZW1lbnQgPSAod2lkZ2V0cywgd2lkZ2V0SWQsIG5leHQyLCBjb2x1bW5zLCBwcmV2aW91c1Bvc2l0aW9uKSA9PiB7CiAgY29uc3Qgc291cmNlV2lkZ2V0cyA9IGNsb25lV2lkZ2V0cyh3aWRnZXRzKTsKICBjb25zdCBtb3ZpbmcgPSBzb3VyY2VXaWRnZXRzLmZpbmQoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSB3aWRnZXRJZCk7CiAgY29uc3Qgb3JpZ2luYWwgPSB3aWRnZXRzLmZpbmQoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSB3aWRnZXRJZCk7CiAgaWYgKCFtb3ZpbmcgfHwgIW9yaWdpbmFsKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgY29uc3QgdGFyZ2V0ID0gewogICAgeDogbmV4dDIueCwKICAgIHk6IG5leHQyLnksCiAgICB3OiBuZXh0Mi53ID8/IG1vdmluZy53LAogICAgaDogbmV4dDIuaCA/PyBtb3ZpbmcuaAogIH07CiAgbW92aW5nLnggPSB0YXJnZXQueDsKICBtb3ZpbmcueSA9IHRhcmdldC55OwogIG1vdmluZy53ID0gdGFyZ2V0Lnc7CiAgbW92aW5nLmggPSB0YXJnZXQuaDsKICBjb25zdCBjb2xsaXNpb25zID0gY29sbGVjdENvbGxpc2lvbnMoc291cmNlV2lkZ2V0cywgbW92aW5nLCB0YXJnZXQueCwgdGFyZ2V0LnksIHRhcmdldC53LCB0YXJnZXQuaCk7CiAgaWYgKGNvbGxpc2lvbnMubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm4geyB3aWRnZXRzOiBzb3VyY2VXaWRnZXRzLCBtb3ZlZFdpZGdldHM6IFttb3ZpbmcuaWRdIH07CiAgfQogIGlmIChjb2xsaXNpb25zLmxlbmd0aCA9PT0gMSkgewogICAgY29uc3Qgb3RoZXIgPSBjb2xsaXNpb25zWzBdOwogICAgaWYgKCFvdGhlci5sb2NrZWQgJiYgIW90aGVyLm5vTW92ZSAmJiBvdGhlci53ID09PSBtb3ZpbmcudyAmJiBvdGhlci5oID09PSBtb3ZpbmcuaCkgewogICAgICBjb25zdCBvdGhlckNsb25lID0gc291cmNlV2lkZ2V0cy5maW5kKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gb3RoZXIuaWQpOwogICAgICBpZiAob3RoZXJDbG9uZSkgewogICAgICAgIGNvbnN0IHN3YXBUYXJnZXQgPSBvcmlnaW5hbDsKICAgICAgICBjb25zdCBwcmV2aW91c090aGVyUG9zaXRpb24gPSB7IHg6IG90aGVyQ2xvbmUueCwgeTogb3RoZXJDbG9uZS55IH07CiAgICAgICAgb3RoZXJDbG9uZS54ID0gc3dhcFRhcmdldC54OwogICAgICAgIG90aGVyQ2xvbmUueSA9IHN3YXBUYXJnZXQueTsKICAgICAgICBjb25zdCBzd2FwVmFsaWQgPSBjb2xsZWN0Q29sbGlzaW9ucyhzb3VyY2VXaWRnZXRzLCBtb3ZpbmcsIG1vdmluZy54LCBtb3ZpbmcueSwgbW92aW5nLncsIG1vdmluZy5oKS5sZW5ndGggPT09IDAgJiYgY29sbGVjdENvbGxpc2lvbnMoc291cmNlV2lkZ2V0cywgb3RoZXJDbG9uZSwgb3RoZXJDbG9uZS54LCBvdGhlckNsb25lLnksIG90aGVyQ2xvbmUudywgb3RoZXJDbG9uZS5oKS5sZW5ndGggPT09IDA7CiAgICAgICAgaWYgKHN3YXBWYWxpZCkgewogICAgICAgICAgcmV0dXJuIHsgd2lkZ2V0czogc291cmNlV2lkZ2V0cywgbW92ZWRXaWRnZXRzOiBbbW92aW5nLmlkLCBvdGhlckNsb25lLmlkXSwgc3dhcHBlZFdpdGg6IG90aGVyQ2xvbmUuaWQgfTsKICAgICAgICB9CiAgICAgICAgb3RoZXJDbG9uZS54ID0gcHJldmlvdXNPdGhlclBvc2l0aW9uLng7CiAgICAgICAgb3RoZXJDbG9uZS55ID0gcHJldmlvdXNPdGhlclBvc2l0aW9uLnk7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgbW92ZWRJZHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbbW92aW5nLmlkXSk7CiAgZm9yIChjb25zdCBvZmZlbmRpbmcgb2YgY29sbGlzaW9ucykgewogICAgaWYgKG9mZmVuZGluZy5sb2NrZWQgfHwgb2ZmZW5kaW5nLm5vTW92ZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IGNsb25lID0gc291cmNlV2lkZ2V0cy5maW5kKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gb2ZmZW5kaW5nLmlkKTsKICAgIGlmICghY2xvbmUpCiAgICAgIGNvbnRpbnVlOwogICAgY29uc3QgcmVtYWluaW5nID0gc291cmNlV2lkZ2V0cy5maWx0ZXIoKHdpZGdldCkgPT4gd2lkZ2V0LmlkICE9PSBvZmZlbmRpbmcuaWQpOwogICAgY29uc3QgcG9zaXRpb24zID0gZmluZEF2YWlsYWJsZVBvc2l0aW9uKHJlbWFpbmluZywgY2xvbmUudywgY2xvbmUuaCwgY29sdW1ucyk7CiAgICBjbG9uZS54ID0gcG9zaXRpb24zLng7CiAgICBjbG9uZS55ID0gcG9zaXRpb24zLnk7CiAgICBtb3ZlZElkcy5hZGQoY2xvbmUuaWQpOwogIH0KICBjb25zdCB2ZXJpZnkgPSBjb2xsZWN0Q29sbGlzaW9ucyhzb3VyY2VXaWRnZXRzLCBtb3ZpbmcsIG1vdmluZy54LCBtb3ZpbmcueSwgbW92aW5nLncsIG1vdmluZy5oKTsKICBpZiAodmVyaWZ5Lmxlbmd0aCA+IDApIHsKICAgIHJldHVybiBudWxsOwogIH0KICByZXR1cm4geyB3aWRnZXRzOiBzb3VyY2VXaWRnZXRzLCBtb3ZlZFdpZGdldHM6IEFycmF5LmZyb20obW92ZWRJZHMpIH07Cn07CnZhciBjb21wYWN0TGF5b3V0ID0gKHdpZGdldHMsIGRpcmVjdGlvbiA9ICJ2ZXJ0aWNhbCIpID0+IHsKICBjb25zdCBzb3J0ZWQgPSBbLi4ud2lkZ2V0c10uc29ydCgoYTUsIGI1KSA9PiB7CiAgICBpZiAoZGlyZWN0aW9uID09PSAidmVydGljYWwiKSB7CiAgICAgIGlmIChhNS55ICE9PSBiNS55KQogICAgICAgIHJldHVybiBhNS55IC0gYjUueTsKICAgICAgcmV0dXJuIGE1LnggLSBiNS54OwogICAgfQogICAgaWYgKGE1LnggIT09IGI1LngpCiAgICAgIHJldHVybiBhNS54IC0gYjUueDsKICAgIHJldHVybiBhNS55IC0gYjUueTsKICB9KTsKICBmb3IgKGNvbnN0IHdpZGdldCBvZiBzb3J0ZWQpIHsKICAgIGlmICh3aWRnZXQubG9ja2VkIHx8IHdpZGdldC5ub01vdmUpCiAgICAgIGNvbnRpbnVlOwogICAgaWYgKGRpcmVjdGlvbiA9PT0gInZlcnRpY2FsIikgewogICAgICB3aGlsZSAod2lkZ2V0LnkgPiAwICYmICFjaGVja0NvbGxpc2lvbih3aWRnZXRzLCB3aWRnZXQsIHdpZGdldC54LCB3aWRnZXQueSAtIDEpKSB7CiAgICAgICAgd2lkZ2V0LnkgLT0gMTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgd2hpbGUgKHdpZGdldC54ID4gMCAmJiAhY2hlY2tDb2xsaXNpb24od2lkZ2V0cywgd2lkZ2V0LCB3aWRnZXQueCAtIDEsIHdpZGdldC55KSkgewogICAgICAgIHdpZGdldC54IC09IDE7CiAgICAgIH0KICAgIH0KICB9Cn07CnZhciBhcHBseUxheW91dCA9ICh3aWRnZXRzLCBsYXlvdXQpID0+IHsKICByZXR1cm4gd2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gewogICAgY29uc3QgbGF5b3V0SXRlbSA9IGxheW91dC5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSB3aWRnZXQuaWQpOwogICAgcmV0dXJuIGxheW91dEl0ZW0gPyB7IC4uLndpZGdldCwgLi4ubGF5b3V0SXRlbSB9IDogd2lkZ2V0OwogIH0pOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWRhc2hib2FyZGdyaWQvaW50ZXJhY3Rpb24uanMKdmFyIGNvbXB1dGVHcmlkQ29vcmRpbmF0ZXMgPSAoeyBwb2ludGVyLCBjb250YWluZXJSZWN0LCBtZXRyaWNzLCBjb2x1bW5zLCB3aWRnZXQsIHJ0bCwgZHJhZ09mZnNldFggPSAwLCBkcmFnT2Zmc2V0WSA9IDAgfSkgPT4gewogIGNvbnN0IHJlbGF0aXZlWCA9IHBvaW50ZXIuY2xpZW50WCAtIGNvbnRhaW5lclJlY3QubGVmdCAtIGRyYWdPZmZzZXRYOwogIGNvbnN0IHJlbGF0aXZlWSA9IHBvaW50ZXIuY2xpZW50WSAtIGNvbnRhaW5lclJlY3QudG9wIC0gZHJhZ09mZnNldFk7CiAgY29uc3QgbWFyZ2luWCA9IG1ldHJpY3MubWFyZ2luSG9yaXpvbnRhbFB4OwogIGNvbnN0IG1hcmdpblkgPSBtZXRyaWNzLm1hcmdpblZlcnRpY2FsUHg7CiAgY29uc3QgY2VsbFdpZHRoID0gbWV0cmljcy5jZWxsV2lkdGhQeDsKICBjb25zdCBjZWxsSGVpZ2h0ID0gbWV0cmljcy5jZWxsSGVpZ2h0UHg7CiAgY29uc3QgY2xhbXAzID0gKHZhbHVlMiwgbWluMywgbWF4MykgPT4gTWF0aC5tYXgobWluMywgTWF0aC5taW4obWF4MywgdmFsdWUyKSk7CiAgY29uc3QgYWRqdXN0ZWRYID0gY2xhbXAzKHJlbGF0aXZlWCAtIG1hcmdpblgsIDAsIGNvbnRhaW5lclJlY3Qud2lkdGggLSBtYXJnaW5YKTsKICBjb25zdCBhZGp1c3RlZFkgPSBjbGFtcDMocmVsYXRpdmVZIC0gbWFyZ2luWSwgMCwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTsKICBjb25zdCBjZWxsUGx1c01hcmdpblggPSBjZWxsV2lkdGggKyBtYXJnaW5YOwogIGNvbnN0IGNlbGxQbHVzTWFyZ2luWSA9IGNlbGxIZWlnaHQgKyBtYXJnaW5ZOwogIGxldCBncmlkWCA9IE1hdGgucm91bmQoYWRqdXN0ZWRYIC8gY2VsbFBsdXNNYXJnaW5YKTsKICBpZiAocnRsKSB7CiAgICBncmlkWCA9IGNvbHVtbnMgLSB3aWRnZXQudyAtIGdyaWRYOwogIH0KICBncmlkWCA9IGNsYW1wMyhncmlkWCwgMCwgY29sdW1ucyAtIHdpZGdldC53KTsKICBjb25zdCBncmlkWSA9IGNsYW1wMyhNYXRoLnJvdW5kKGFkanVzdGVkWSAvIGNlbGxQbHVzTWFyZ2luWSksIDAsIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTsKICByZXR1cm4geyB4OiBncmlkWCwgeTogZ3JpZFkgfTsKfTsKdmFyIGNvbXB1dGVSZXNpemVEaW1lbnNpb25zID0gKHsgcG9pbnRlciwgY29udGFpbmVyUmVjdCwgbWV0cmljcywgc3RhcnRXaWR0aCwgc3RhcnRIZWlnaHQsIHN0YXJ0UG9pbnRlciwgaGFuZGxlcjogaGFuZGxlcjIsIHdpZGdldCwgY29sdW1ucyB9KSA9PiB7CiAgY29uc3QgZGVsdGFYID0gcG9pbnRlci5jbGllbnRYIC0gc3RhcnRQb2ludGVyLmNsaWVudFg7CiAgY29uc3QgZGVsdGFZID0gcG9pbnRlci5jbGllbnRZIC0gc3RhcnRQb2ludGVyLmNsaWVudFk7CiAgbGV0IHdpZHRoID0gc3RhcnRXaWR0aDsKICBsZXQgaGVpZ2h0ID0gc3RhcnRIZWlnaHQ7CiAgY29uc3QgY2VsbFBsdXNNYXJnaW5YID0gbWV0cmljcy5jZWxsV2lkdGhQeCArIG1ldHJpY3MubWFyZ2luSG9yaXpvbnRhbFB4OwogIGNvbnN0IGNlbGxQbHVzTWFyZ2luWSA9IG1ldHJpY3MuY2VsbEhlaWdodFB4ICsgbWV0cmljcy5tYXJnaW5WZXJ0aWNhbFB4OwogIGlmIChoYW5kbGVyMi5pbmNsdWRlcygiZSIpKSB7CiAgICBjb25zdCBkZWx0YUNvbHMgPSBNYXRoLnJvdW5kKGRlbHRhWCAvIGNlbGxQbHVzTWFyZ2luWCk7CiAgICB3aWR0aCA9IHN0YXJ0V2lkdGggKyBkZWx0YUNvbHM7CiAgfQogIGlmIChoYW5kbGVyMi5pbmNsdWRlcygicyIpKSB7CiAgICBjb25zdCBkZWx0YVJvd3MgPSBNYXRoLnJvdW5kKGRlbHRhWSAvIGNlbGxQbHVzTWFyZ2luWSk7CiAgICBoZWlnaHQgPSBzdGFydEhlaWdodCArIGRlbHRhUm93czsKICB9CiAgY29uc3QgY2xhbXBlZFdpZHRoID0gTWF0aC5tYXgod2lkZ2V0Lm1pblcgfHwgMSwgTWF0aC5taW4od2lkdGgsIHdpZGdldC5tYXhXIHx8IGNvbHVtbnMgLSB3aWRnZXQueCkpOwogIGNvbnN0IGNsYW1wZWRIZWlnaHQgPSBNYXRoLm1heCh3aWRnZXQubWluSCB8fCAxLCBNYXRoLm1pbihoZWlnaHQsIHdpZGdldC5tYXhIIHx8IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSk7CiAgcmV0dXJuIHsKICAgIHdpZHRoOiBjbGFtcGVkV2lkdGgsCiAgICBoZWlnaHQ6IGNsYW1wZWRIZWlnaHQKICB9Owp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWRhc2hib2FyZGdyaWQvY29udGV4dG1lbnUuanMKdmFyIG9wZW5XaWRnZXRDb250ZXh0TWVudSA9ICh7IHdpZGdldCwgaG9zdCwgZXZlbnQgfSkgPT4gewogIGNvbnN0IGl0ZW1zID0gWwogICAgewogICAgICBuYW1lOiAiRGVsZXRlIHRpbGUiLAogICAgICBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICBob3N0LnJlbW92ZVdpZGdldCh3aWRnZXQuaWQpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgXTsKICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIGl0ZW1zKTsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1kYXNoYm9hcmRncmlkL2RlZXMtZGFzaGJvYXJkZ3JpZC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlNzUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczc2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzRGFzaGJvYXJkZ3JpZCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtZGFzaGJvYXJkZ3JpZCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3dpZGdldHNfZGVjb3JhdG9yczsKICBsZXQgX3dpZGdldHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF93aWRnZXRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jZWxsSGVpZ2h0X2RlY29yYXRvcnM7CiAgbGV0IF9jZWxsSGVpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2VsbEhlaWdodF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFyZ2luX2RlY29yYXRvcnM7CiAgbGV0IF9tYXJnaW5faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXJnaW5fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbHVtbnNfZGVjb3JhdG9yczsKICBsZXQgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2x1bW5zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lZGl0YWJsZV9kZWNvcmF0b3JzOwogIGxldCBfZWRpdGFibGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lZGl0YWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlQW5pbWF0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9lbmFibGVBbmltYXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lbmFibGVBbmltYXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NlbGxIZWlnaHRVbml0X2RlY29yYXRvcnM7CiAgbGV0IF9jZWxsSGVpZ2h0VW5pdF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NlbGxIZWlnaHRVbml0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ydGxfZGVjb3JhdG9yczsKICBsZXQgX3J0bF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3J0bF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0dyaWRMaW5lc19kZWNvcmF0b3JzOwogIGxldCBfc2hvd0dyaWRMaW5lc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dHcmlkTGluZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xheW91dHNfZGVjb3JhdG9yczsKICBsZXQgX2xheW91dHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYXlvdXRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3RpdmVCcmVha3BvaW50X2RlY29yYXRvcnM7CiAgbGV0IF9hY3RpdmVCcmVha3BvaW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZlQnJlYWtwb2ludF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21ldHJpY3NfZGVjb3JhdG9yczsKICBsZXQgX21ldHJpY3NfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZXRyaWNzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZXNvbHZlZE1hcmdpbnNfZGVjb3JhdG9yczsKICBsZXQgX3Jlc29sdmVkTWFyZ2luc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Jlc29sdmVkTWFyZ2luc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcHJldmlld1dpZGdldHNfZGVjb3JhdG9yczsKICBsZXQgX3ByZXZpZXdXaWRnZXRzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcHJldmlld1dpZGdldHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0Rhc2hib2FyZGdyaWQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfd2lkZ2V0c19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfY2VsbEhlaWdodF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX21hcmdpbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX2NvbHVtbnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9lZGl0YWJsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9lbmFibGVBbmltYXRpb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSldOwogICAgICBfY2VsbEhlaWdodFVuaXRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9ydGxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2hvd0dyaWRMaW5lc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9sYXlvdXRzX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX2FjdGl2ZUJyZWFrcG9pbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9wbGFjZWhvbGRlclBvc2l0aW9uX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9tZXRyaWNzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9yZXNvbHZlZE1hcmdpbnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3ByZXZpZXdXaWRnZXRzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF93aWRnZXRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndpZGdldHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIndpZGdldHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud2lkZ2V0cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud2lkZ2V0cyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF93aWRnZXRzX2luaXRpYWxpemVycywgX3dpZGdldHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NSh0aGlzLCBudWxsLCBfY2VsbEhlaWdodF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjZWxsSGVpZ2h0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjZWxsSGVpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNlbGxIZWlnaHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNlbGxIZWlnaHQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY2VsbEhlaWdodF9pbml0aWFsaXplcnMsIF9jZWxsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX21hcmdpbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYXJnaW4iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1hcmdpbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYXJnaW4sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1hcmdpbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXJnaW5faW5pdGlhbGl6ZXJzLCBfbWFyZ2luX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX2NvbHVtbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29sdW1ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sdW1ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb2x1bW5zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jb2x1bW5zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzLCBfY29sdW1uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF9lZGl0YWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlZGl0YWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZWRpdGFibGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZWRpdGFibGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVkaXRhYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VkaXRhYmxlX2luaXRpYWxpemVycywgX2VkaXRhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX2VuYWJsZUFuaW1hdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbmFibGVBbmltYXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVuYWJsZUFuaW1hdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbmFibGVBbmltYXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVuYWJsZUFuaW1hdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lbmFibGVBbmltYXRpb25faW5pdGlhbGl6ZXJzLCBfZW5hYmxlQW5pbWF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX2NlbGxIZWlnaHRVbml0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNlbGxIZWlnaHRVbml0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjZWxsSGVpZ2h0VW5pdCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jZWxsSGVpZ2h0VW5pdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY2VsbEhlaWdodFVuaXQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY2VsbEhlaWdodFVuaXRfaW5pdGlhbGl6ZXJzLCBfY2VsbEhlaWdodFVuaXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NSh0aGlzLCBudWxsLCBfcnRsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJ0bCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicnRsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJ0bCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucnRsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3J0bF9pbml0aWFsaXplcnMsIF9ydGxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NSh0aGlzLCBudWxsLCBfc2hvd0dyaWRMaW5lc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93R3JpZExpbmVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93R3JpZExpbmVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dHcmlkTGluZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dHcmlkTGluZXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0dyaWRMaW5lc19pbml0aWFsaXplcnMsIF9zaG93R3JpZExpbmVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX2xheW91dHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGF5b3V0cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGF5b3V0cyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYXlvdXRzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sYXlvdXRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xheW91dHNfaW5pdGlhbGl6ZXJzLCBfbGF5b3V0c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF9hY3RpdmVCcmVha3BvaW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjdGl2ZUJyZWFrcG9pbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2ZUJyZWFrcG9pbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlQnJlYWtwb2ludCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWN0aXZlQnJlYWtwb2ludCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3RpdmVCcmVha3BvaW50X2luaXRpYWxpemVycywgX2FjdGl2ZUJyZWFrcG9pbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NSh0aGlzLCBudWxsLCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwbGFjZWhvbGRlclBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwbGFjZWhvbGRlclBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBsYWNlaG9sZGVyUG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnBsYWNlaG9sZGVyUG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9pbml0aWFsaXplcnMsIF9wbGFjZWhvbGRlclBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX21ldHJpY3NfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWV0cmljcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWV0cmljcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZXRyaWNzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tZXRyaWNzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21ldHJpY3NfaW5pdGlhbGl6ZXJzLCBfbWV0cmljc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF9yZXNvbHZlZE1hcmdpbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicmVzb2x2ZWRNYXJnaW5zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZXNvbHZlZE1hcmdpbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVzb2x2ZWRNYXJnaW5zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yZXNvbHZlZE1hcmdpbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVzb2x2ZWRNYXJnaW5zX2luaXRpYWxpemVycywgX3Jlc29sdmVkTWFyZ2luc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF9wcmV2aWV3V2lkZ2V0c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwcmV2aWV3V2lkZ2V0cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicHJldmlld1dpZGdldHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucHJldmlld1dpZGdldHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnByZXZpZXdXaWRnZXRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ByZXZpZXdXaWRnZXRzX2luaXRpYWxpemVycywgX3ByZXZpZXdXaWRnZXRzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzRGFzaGJvYXJkZ3JpZDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ2OwogICAgc3RhdGljIHN0eWxlcyA9IGRhc2hib2FyZEdyaWRTdHlsZXM7CiAgICAjd2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfd2lkZ2V0c19pbml0aWFsaXplcnMsIFtdKTsKICAgIGdldCB3aWRnZXRzKCkgewogICAgICByZXR1cm4gdGhpcy4jd2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHdpZGdldHModmFsdWUyKSB7CiAgICAgIHRoaXMuI3dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjZWxsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfd2lkZ2V0c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2NlbGxIZWlnaHRfaW5pdGlhbGl6ZXJzLCA4MCkpOwogICAgZ2V0IGNlbGxIZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjZWxsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2VsbEhlaWdodCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY2VsbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21hcmdpbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2NlbGxIZWlnaHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9tYXJnaW5faW5pdGlhbGl6ZXJzLCAxMCkpOwogICAgZ2V0IG1hcmdpbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI21hcmdpbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1hcmdpbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFyZ2luX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29sdW1uc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX21hcmdpbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzLCAxMikpOwogICAgZ2V0IGNvbHVtbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb2x1bW5zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sdW1ucyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29sdW1uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VkaXRhYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfY29sdW1uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2VkaXRhYmxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IGVkaXRhYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jZWRpdGFibGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlZGl0YWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZWRpdGFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNlbmFibGVBbmltYXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9lZGl0YWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2VuYWJsZUFuaW1hdGlvbl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBlbmFibGVBbmltYXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNlbmFibGVBbmltYXRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlbmFibGVBbmltYXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2VuYWJsZUFuaW1hdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NlbGxIZWlnaHRVbml0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfZW5hYmxlQW5pbWF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfY2VsbEhlaWdodFVuaXRfaW5pdGlhbGl6ZXJzLCAicHgiKSk7CiAgICBnZXQgY2VsbEhlaWdodFVuaXQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjZWxsSGVpZ2h0VW5pdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNlbGxIZWlnaHRVbml0KHZhbHVlMikgewogICAgICB0aGlzLiNjZWxsSGVpZ2h0VW5pdF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3J0bF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2NlbGxIZWlnaHRVbml0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfcnRsX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBydGwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNydGxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBydGwodmFsdWUyKSB7CiAgICAgIHRoaXMuI3J0bF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dHcmlkTGluZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9ydGxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9zaG93R3JpZExpbmVzX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93R3JpZExpbmVzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0dyaWRMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dHcmlkTGluZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dHcmlkTGluZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsYXlvdXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfc2hvd0dyaWRMaW5lc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2xheW91dHNfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBsYXlvdXRzKCkgewogICAgICByZXR1cm4gdGhpcy4jbGF5b3V0c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxheW91dHModmFsdWUyKSB7CiAgICAgIHRoaXMuI2xheW91dHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhY3RpdmVCcmVha3BvaW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfbGF5b3V0c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2FjdGl2ZUJyZWFrcG9pbnRfaW5pdGlhbGl6ZXJzLCAiYmFzZSIpKTsKICAgIGdldCBhY3RpdmVCcmVha3BvaW50KCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZlQnJlYWtwb2ludF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjdGl2ZUJyZWFrcG9pbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2ZUJyZWFrcG9pbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwbGFjZWhvbGRlclBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfYWN0aXZlQnJlYWtwb2ludF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX3BsYWNlaG9sZGVyUG9zaXRpb25faW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgcGxhY2Vob2xkZXJQb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwbGFjZWhvbGRlclBvc2l0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNwbGFjZWhvbGRlclBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX3BsYWNlaG9sZGVyUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9tZXRyaWNzX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IG1ldHJpY3MoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZXRyaWNzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWV0cmljcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Jlc29sdmVkTWFyZ2luc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX21ldHJpY3NfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9yZXNvbHZlZE1hcmdpbnNfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgcmVzb2x2ZWRNYXJnaW5zKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVzb2x2ZWRNYXJnaW5zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcmVzb2x2ZWRNYXJnaW5zKHZhbHVlMikgewogICAgICB0aGlzLiNyZXNvbHZlZE1hcmdpbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwcmV2aWV3V2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX3Jlc29sdmVkTWFyZ2luc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX3ByZXZpZXdXaWRnZXRzX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IHByZXZpZXdXaWRnZXRzKCkgewogICAgICByZXR1cm4gdGhpcy4jcHJldmlld1dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwcmV2aWV3V2lkZ2V0cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcHJldmlld1dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnRhaW5lckJvdW5kcyA9IChfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9wcmV2aWV3V2lkZ2V0c19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgZHJhZ1N0YXRlID0gbnVsbDsKICAgIHJlc2l6ZVN0YXRlID0gbnVsbDsKICAgIHJlc2l6ZU9ic2VydmVyOwogICAgaW50ZXJhY3Rpb25BY3RpdmUgPSBmYWxzZTsKICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB0aGlzLmNvbXB1dGVNZXRyaWNzKCk7CiAgICAgIHRoaXMub2JzZXJ2ZVJlc2l6ZSgpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCk7CiAgICAgIHRoaXMucmVsZWFzZVBvaW50ZXJFdmVudHMoKTsKICAgIH0KICAgIHVwZGF0ZWQoY2hhbmdlZCkgewogICAgICBpZiAoY2hhbmdlZC5oYXMoIm1hcmdpbiIpIHx8IGNoYW5nZWQuaGFzKCJjb2x1bW5zIikgfHwgY2hhbmdlZC5oYXMoImNlbGxIZWlnaHQiKSB8fCBjaGFuZ2VkLmhhcygiY2VsbEhlaWdodFVuaXQiKSkgewogICAgICAgIHRoaXMuY29tcHV0ZU1ldHJpY3MoKTsKICAgICAgfQogICAgICBpZiAoY2hhbmdlZC5oYXMoIndpZGdldHMiKSAmJiAhdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZSkgewogICAgICAgIHRoaXMubm90aWZ5TGF5b3V0Q2hhbmdlKCk7CiAgICAgIH0KICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgYmFzZVdpZGdldHMgPSB0aGlzLndpZGdldHM7CiAgICAgIGlmIChiYXNlV2lkZ2V0cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6bGF5b3V0R3JpZCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgPGRpdj5ObyB3aWRnZXRzIGNvbmZpZ3VyZWQ8L2Rpdj4KICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsgbWFyZ2luLXRvcDogOHB4OyI+QWRkIHdpZGdldHMgdG8gcG9wdWxhdGUgdGhlIGRhc2hib2FyZDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgICB9CiAgICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLmVuc3VyZU1ldHJpY3MoKTsKICAgICAgY29uc3QgbWFyZ2lucyA9IHRoaXMucmVzb2x2ZWRNYXJnaW5zID8/IHJlc29sdmVNYXJnaW5zKHRoaXMubWFyZ2luKTsKICAgICAgY29uc3QgY2VsbEhlaWdodCA9IG1ldHJpY3MuY2VsbEhlaWdodFB4OwogICAgICBjb25zdCBsYXlvdXRGb3JIZWlnaHQgPSB0aGlzLnByZXZpZXdXaWRnZXRzID8/IHRoaXMud2lkZ2V0czsKICAgICAgY29uc3QgZ3JpZEhlaWdodCA9IGNhbGN1bGF0ZUdyaWRIZWlnaHQobGF5b3V0Rm9ySGVpZ2h0LCBtYXJnaW5zLCBjZWxsSGVpZ2h0KTsKICAgICAgY29uc3QgcHJldmlld01hcCA9IHRoaXMucHJldmlld1dpZGdldHMgPyBuZXcgTWFwKHRoaXMucHJldmlld1dpZGdldHMubWFwKCh3aWRnZXQpID0+IFt3aWRnZXQuaWQsIHdpZGdldF0pKSA6IG51bGw7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1jb250YWluZXIiIHN0eWxlPSJoZWlnaHQ6ICR7Z3JpZEhlaWdodH1weDsiPgogICAgICAgICR7dGhpcy5zaG93R3JpZExpbmVzID8gdGhpcy5yZW5kZXJHcmlkTGluZXMobWV0cmljcywgZ3JpZEhlaWdodCkgOiBudWxsfQogICAgICAgICR7YmFzZVdpZGdldHMubWFwKCh3aWRnZXQpID0+IHRoaXMucmVuZGVyV2lkZ2V0KHdpZGdldCwgbWV0cmljcywgbWFyZ2lucywgcHJldmlld01hcCkpfQogICAgICAgICR7dGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uID8gdGhpcy5yZW5kZXJQbGFjZWhvbGRlcihtZXRyaWNzLCBtYXJnaW5zKSA6IG51bGx9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckdyaWRMaW5lcyhtZXRyaWNzLCBncmlkSGVpZ2h0KSB7CiAgICAgIGNvbnN0IHZlcnRpY2FsID0gW107CiAgICAgIGNvbnN0IGhvcml6b250YWwgPSBbXTsKICAgICAgY29uc3QgY2VsbFBsdXNNYXJnaW5YID0gbWV0cmljcy5jZWxsV2lkdGhQeCArIG1ldHJpY3MubWFyZ2luSG9yaXpvbnRhbFB4OwogICAgICBjb25zdCBjZWxsUGx1c01hcmdpblkgPSBtZXRyaWNzLmNlbGxIZWlnaHRQeCArIG1ldHJpY3MubWFyZ2luVmVydGljYWxQeDsKICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDw9IHRoaXMuY29sdW1uczsgaTExKyspIHsKICAgICAgICBjb25zdCBsZWZ0UHggPSBpMTEgKiBjZWxsUGx1c01hcmdpblggKyBtZXRyaWNzLm1hcmdpbkhvcml6b250YWxQeDsKICAgICAgICBjb25zdCBsZWZ0UGVyY2VudCA9IHRoaXMucHhUb1BlcmNlbnQobGVmdFB4LCBtZXRyaWNzLmNvbnRhaW5lcldpZHRoKTsKICAgICAgICB2ZXJ0aWNhbC5wdXNoKGIyYDxkaXYgY2xhc3M9ImdyaWQtbGluZS12ZXJ0aWNhbCIgc3R5bGU9ImxlZnQ6ICR7bGVmdFBlcmNlbnR9JTsiPjwvZGl2PmApOwogICAgICB9CiAgICAgIGNvbnN0IHJvd3MgPSBNYXRoLmNlaWwoZ3JpZEhlaWdodCAvIGNlbGxQbHVzTWFyZ2luWSk7CiAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8PSByb3dzOyByb3crKykgewogICAgICAgIGNvbnN0IHRvcCA9IHJvdyAqIGNlbGxQbHVzTWFyZ2luWTsKICAgICAgICBob3Jpem9udGFsLnB1c2goYjJgPGRpdiBjbGFzcz0iZ3JpZC1saW5lLWhvcml6b250YWwiIHN0eWxlPSJ0b3A6ICR7dG9wfXB4OyI+PC9kaXY+YCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJncmlkLWxpbmVzIj4KICAgICAgICAke3ZlcnRpY2FsfQogICAgICAgICR7aG9yaXpvbnRhbH0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyV2lkZ2V0KHdpZGdldCwgbWV0cmljcywgbWFyZ2lucywgcHJldmlld01hcCkgewogICAgICBjb25zdCBpc0RyYWdnaW5nID0gdGhpcy5kcmFnU3RhdGU/LndpZGdldElkID09PSB3aWRnZXQuaWQ7CiAgICAgIGNvbnN0IGlzUmVzaXppbmcgPSB0aGlzLnJlc2l6ZVN0YXRlPy53aWRnZXRJZCA9PT0gd2lkZ2V0LmlkOwogICAgICBjb25zdCBpc0xvY2tlZCA9IHdpZGdldC5sb2NrZWQgfHwgIXRoaXMuZWRpdGFibGU7CiAgICAgIGNvbnN0IHByZXZpZXdXaWRnZXQgPSBwcmV2aWV3TWFwPy5nZXQod2lkZ2V0LmlkKSA/PyBudWxsOwogICAgICBjb25zdCBsYXlvdXRGb3JSZW5kZXIgPSBpc0RyYWdnaW5nID8gd2lkZ2V0IDogcHJldmlld1dpZGdldCA/PyB3aWRnZXQ7CiAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmNvbXB1dGVXaWRnZXRSZWN0KGxheW91dEZvclJlbmRlciwgbWV0cmljcywgbWFyZ2lucyk7CiAgICAgIGNvbnN0IHNpZGVQcm9wZXJ0eSA9IHRoaXMucnRsID8gInJpZ2h0IiA6ICJsZWZ0IjsKICAgICAgY29uc3Qgc2lkZVZhbHVlID0gdGhpcy5weFRvUGVyY2VudChyZWN0LmxlZnQsIG1ldHJpY3MuY29udGFpbmVyV2lkdGgpOwogICAgICBjb25zdCB3aWR0aFBlcmNlbnQgPSB0aGlzLnB4VG9QZXJjZW50KHJlY3Qud2lkdGgsIG1ldHJpY3MuY29udGFpbmVyV2lkdGgpOwogICAgICBsZXQgdHJhbnNmb3JtMiA9ICIiOwogICAgICBpZiAoaXNEcmFnZ2luZyAmJiB0aGlzLmRyYWdTdGF0ZT8uY3VycmVudFBvaW50ZXIpIHsKICAgICAgICBjb25zdCBwb2ludGVyID0gdGhpcy5kcmFnU3RhdGUuY3VycmVudFBvaW50ZXI7CiAgICAgICAgY29uc3QgYm91bmRzID0gdGhpcy5jb250YWluZXJCb3VuZHMgPz8gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCB0cmFuc2xhdGVYID0gcG9pbnRlci5jbGllbnRYIC0gYm91bmRzLmxlZnQgLSB0aGlzLmRyYWdTdGF0ZS5vZmZzZXRYIC0gcmVjdC5sZWZ0OwogICAgICAgIGNvbnN0IHRyYW5zbGF0ZVkgPSBwb2ludGVyLmNsaWVudFkgLSBib3VuZHMudG9wIC0gdGhpcy5kcmFnU3RhdGUub2Zmc2V0WSAtIHJlY3QudG9wOwogICAgICAgIHRyYW5zZm9ybTIgPSBgdHJhbnNmb3JtOiB0cmFuc2xhdGUoJHt0cmFuc2xhdGVYfXB4LCAke3RyYW5zbGF0ZVl9cHgpO2A7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImdyaWQtd2lkZ2V0ICR7aXNEcmFnZ2luZyA/ICJkcmFnZ2luZyIgOiAiIn0gJHtpc1Jlc2l6aW5nID8gInJlc2l6aW5nIiA6ICIifSIKICAgICAgICBzdHlsZT0iCiAgICAgICAgICAke3NpZGVQcm9wZXJ0eX06ICR7c2lkZVZhbHVlfSU7CiAgICAgICAgICB0b3A6ICR7cmVjdC50b3B9cHg7CiAgICAgICAgICB3aWR0aDogJHt3aWR0aFBlcmNlbnR9JTsKICAgICAgICAgIGhlaWdodDogJHtyZWN0LmhlaWdodH1weDsKICAgICAgICAgICR7dHJhbnNmb3JtMn0KICAgICAgICAiCiAgICAgICAgZGF0YS13aWRnZXQtaWQ9JHt3aWRnZXQuaWR9CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJ3aWRnZXQtY29udGVudCI+CiAgICAgICAgICAke3dpZGdldC50aXRsZSA/IGIyYAogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0id2lkZ2V0LWhlYWRlciAke2lzTG9ja2VkID8gImxvY2tlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgIEBwb2ludGVyZG93bj0keyFpc0xvY2tlZCAmJiAhd2lkZ2V0Lm5vTW92ZSA/IChldnQpID0+IHRoaXMuc3RhcnREcmFnKGV2dCwgd2lkZ2V0KSA6IG51bGx9CiAgICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhldnQpID0+IHRoaXMuaGFuZGxlV2lkZ2V0Q29udGV4dE1lbnUoZXZ0LCB3aWRnZXQpfQogICAgICAgICAgICAgICAgICB0YWJpbmRleD0keyFpc0xvY2tlZCAmJiAhd2lkZ2V0Lm5vTW92ZSA/IDAgOiAtMX0KICAgICAgICAgICAgICAgICAgQGtleWRvd249JHsoZXZ0KSA9PiB0aGlzLmhhbmRsZUhlYWRlcktleWRvd24oZXZ0LCB3aWRnZXQpfQogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAke3dpZGdldC5pY29uID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0ke3dpZGdldC5pY29ufT48L2RlZXMtaWNvbj5gIDogbnVsbH0KICAgICAgICAgICAgICAgICAgJHt3aWRnZXQudGl0bGV9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogbnVsbH0KICAgICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1ib2R5ICR7d2lkZ2V0LnRpdGxlID8gImhhcy1oZWFkZXIiIDogIiJ9Ij4KICAgICAgICAgICAgJHt3aWRnZXQuY29udGVudH0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgJHshaXNMb2NrZWQgJiYgIXdpZGdldC5ub1Jlc2l6ZSA/IGIyYAogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0icmVzaXplLWhhbmRsZSByZXNpemUtaGFuZGxlLWUiCiAgICAgICAgICAgICAgICAgIEBwb2ludGVyZG93bj0keyhldnQpID0+IHRoaXMuc3RhcnRSZXNpemUoZXZ0LCB3aWRnZXQsICJlIil9CiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJyZXNpemUtaGFuZGxlIHJlc2l6ZS1oYW5kbGUtcyIKICAgICAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSR7KGV2dCkgPT4gdGhpcy5zdGFydFJlc2l6ZShldnQsIHdpZGdldCwgInMiKX0KICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9InJlc2l6ZS1oYW5kbGUgcmVzaXplLWhhbmRsZS1zZSIKICAgICAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSR7KGV2dCkgPT4gdGhpcy5zdGFydFJlc2l6ZShldnQsIHdpZGdldCwgInNlIil9CiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgYCA6IG51bGx9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlclBsYWNlaG9sZGVyKG1ldHJpY3MsIG1hcmdpbnMpIHsKICAgICAgaWYgKCF0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24pIHsKICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgfQogICAgICBjb25zdCByZWN0ID0gdGhpcy5jb21wdXRlV2lkZ2V0UmVjdCh0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24sIG1ldHJpY3MsIG1hcmdpbnMpOwogICAgICBjb25zdCBzaWRlUHJvcGVydHkgPSB0aGlzLnJ0bCA/ICJyaWdodCIgOiAibGVmdCI7CiAgICAgIGNvbnN0IHNpZGVWYWx1ZSA9IHRoaXMucHhUb1BlcmNlbnQocmVjdC5sZWZ0LCBtZXRyaWNzLmNvbnRhaW5lcldpZHRoKTsKICAgICAgY29uc3Qgd2lkdGhQZXJjZW50ID0gdGhpcy5weFRvUGVyY2VudChyZWN0LndpZHRoLCBtZXRyaWNzLmNvbnRhaW5lcldpZHRoKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImdyaWQtd2lkZ2V0IHBsYWNlaG9sZGVyIgogICAgICAgIHN0eWxlPSIKICAgICAgICAgICR7c2lkZVByb3BlcnR5fTogJHtzaWRlVmFsdWV9JTsKICAgICAgICAgIHRvcDogJHtyZWN0LnRvcH1weDsKICAgICAgICAgIHdpZHRoOiAke3dpZHRoUGVyY2VudH0lOwogICAgICAgICAgaGVpZ2h0OiAke3JlY3QuaGVpZ2h0fXB4OwogICAgICAgICIKICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1jb250ZW50Ij48L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgc3RhcnREcmFnKGV2ZW50LCB3aWRnZXQpIHsKICAgICAgaWYgKCF0aGlzLmVkaXRhYmxlIHx8IHdpZGdldC5ub01vdmUgfHwgd2lkZ2V0LmxvY2tlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29uc3Qgd2lkZ2V0RWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuY2xvc2VzdCgiLmdyaWQtd2lkZ2V0Iik7CiAgICAgIGlmICghd2lkZ2V0RWxlbWVudCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCB3aWRnZXRSZWN0ID0gd2lkZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgdGhpcy5jb250YWluZXJCb3VuZHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICB0aGlzLmVuc3VyZU1ldHJpY3MoKTsKICAgICAgdGhpcy5kcmFnU3RhdGUgPSB7CiAgICAgICAgd2lkZ2V0SWQ6IHdpZGdldC5pZCwKICAgICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCwKICAgICAgICBvZmZzZXRYOiBldmVudC5jbGllbnRYIC0gd2lkZ2V0UmVjdC5sZWZ0LAogICAgICAgIG9mZnNldFk6IGV2ZW50LmNsaWVudFkgLSB3aWRnZXRSZWN0LnRvcCwKICAgICAgICBzdGFydDogeyBpZDogd2lkZ2V0LmlkLCB4OiB3aWRnZXQueCwgeTogd2lkZ2V0LnksIHc6IHdpZGdldC53LCBoOiB3aWRnZXQuaCB9LAogICAgICAgIHByZXZpb3VzUG9zaXRpb246IHsgaWQ6IHdpZGdldC5pZCwgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCB3OiB3aWRnZXQudywgaDogd2lkZ2V0LmggfSwKICAgICAgICBjdXJyZW50UG9pbnRlcjogeyBjbGllbnRYOiBldmVudC5jbGllbnRYLCBjbGllbnRZOiBldmVudC5jbGllbnRZIH0sCiAgICAgICAgbGFzdFBsYWNlbWVudDogbnVsbAogICAgICB9OwogICAgICB0aGlzLmludGVyYWN0aW9uQWN0aXZlID0gdHJ1ZTsKICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIHRoaXMuaGFuZGxlRHJhZ01vdmUpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCB0aGlzLmhhbmRsZURyYWdFbmQpOwogICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSB7IGlkOiB3aWRnZXQuaWQsIHg6IHdpZGdldC54LCB5OiB3aWRnZXQueSwgdzogd2lkZ2V0LncsIGg6IHdpZGdldC5oIH07CiAgICB9CiAgICBoYW5kbGVEcmFnTW92ZSA9IChldmVudCkgPT4gewogICAgICBpZiAoIXRoaXMuZHJhZ1N0YXRlKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgbWV0cmljcyA9IHRoaXMuZW5zdXJlTWV0cmljcygpOwogICAgICBjb25zdCBhY3RpdmVXaWRnZXRzID0gdGhpcy53aWRnZXRzOwogICAgICBjb25zdCB3aWRnZXQgPSBhY3RpdmVXaWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHRoaXMuZHJhZ1N0YXRlLndpZGdldElkKTsKICAgICAgaWYgKCF3aWRnZXQpCiAgICAgICAgcmV0dXJuOwogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBwcmV2aW91c1Bvc2l0aW9uID0gdGhpcy5kcmFnU3RhdGUucHJldmlvdXNQb3NpdGlvbjsKICAgICAgY29uc3QgY29vcmRzID0gY29tcHV0ZUdyaWRDb29yZGluYXRlcyh7CiAgICAgICAgcG9pbnRlcjogeyBjbGllbnRYOiBldmVudC5jbGllbnRYLCBjbGllbnRZOiBldmVudC5jbGllbnRZIH0sCiAgICAgICAgY29udGFpbmVyUmVjdDogdGhpcy5jb250YWluZXJCb3VuZHMgPz8gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwKICAgICAgICBtZXRyaWNzLAogICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucywKICAgICAgICB3aWRnZXQsCiAgICAgICAgcnRsOiB0aGlzLnJ0bCwKICAgICAgICBkcmFnT2Zmc2V0WDogdGhpcy5kcmFnU3RhdGUub2Zmc2V0WCwKICAgICAgICBkcmFnT2Zmc2V0WTogdGhpcy5kcmFnU3RhdGUub2Zmc2V0WQogICAgICB9KTsKICAgICAgY29uc3QgcGxhY2VtZW50ID0gcmVzb2x2ZVdpZGdldFBsYWNlbWVudChhY3RpdmVXaWRnZXRzLCB3aWRnZXQuaWQsIHsgeDogY29vcmRzLngsIHk6IGNvb3Jkcy55IH0sIHRoaXMuY29sdW1ucywgcHJldmlvdXNQb3NpdGlvbik7CiAgICAgIGlmIChwbGFjZW1lbnQpIHsKICAgICAgICBjb25zdCB1cGRhdGVkV2lkZ2V0ID0gcGxhY2VtZW50LndpZGdldHMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gd2lkZ2V0LmlkKTsKICAgICAgICB0aGlzLmRyYWdTdGF0ZSA9IHsKICAgICAgICAgIC4uLnRoaXMuZHJhZ1N0YXRlLAogICAgICAgICAgY3VycmVudFBvaW50ZXI6IHsgY2xpZW50WDogZXZlbnQuY2xpZW50WCwgY2xpZW50WTogZXZlbnQuY2xpZW50WSB9LAogICAgICAgICAgbGFzdFBsYWNlbWVudDogcGxhY2VtZW50LAogICAgICAgICAgcHJldmlvdXNQb3NpdGlvbjogdXBkYXRlZFdpZGdldCA/IHsgaWQ6IHVwZGF0ZWRXaWRnZXQuaWQsIHg6IHVwZGF0ZWRXaWRnZXQueCwgeTogdXBkYXRlZFdpZGdldC55LCB3OiB1cGRhdGVkV2lkZ2V0LncsIGg6IHVwZGF0ZWRXaWRnZXQuaCB9IDogeyBpZDogd2lkZ2V0LmlkLCB4OiBjb29yZHMueCwgeTogY29vcmRzLnksIHc6IHdpZGdldC53LCBoOiB3aWRnZXQuaCB9CiAgICAgICAgfTsKICAgICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gcGxhY2VtZW50LndpZGdldHM7CiAgICAgICAgY29uc3QgcHJldmlld1dpZGdldCA9IHBsYWNlbWVudC53aWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHdpZGdldC5pZCk7CiAgICAgICAgaWYgKHByZXZpZXdXaWRnZXQpIHsKICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IHsKICAgICAgICAgICAgaWQ6IHByZXZpZXdXaWRnZXQuaWQsCiAgICAgICAgICAgIHg6IHByZXZpZXdXaWRnZXQueCwKICAgICAgICAgICAgeTogcHJldmlld1dpZGdldC55LAogICAgICAgICAgICB3OiBwcmV2aWV3V2lkZ2V0LncsCiAgICAgICAgICAgIGg6IHByZXZpZXdXaWRnZXQuaAogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uID0geyBpZDogd2lkZ2V0LmlkLCB4OiBjb29yZHMueCwgeTogY29vcmRzLnksIHc6IHdpZGdldC53LCBoOiB3aWRnZXQuaCB9OwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gbnVsbDsKICAgICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgICB9CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgfTsKICAgIGhhbmRsZURyYWdFbmQgPSAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgZHJhZ1N0YXRlID0gdGhpcy5kcmFnU3RhdGU7CiAgICAgIGlmICghZHJhZ1N0YXRlIHx8IGV2ZW50LnBvaW50ZXJJZCAhPT0gZHJhZ1N0YXRlLnBvaW50ZXJJZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBsYXlvdXRTb3VyY2UgPSB0aGlzLndpZGdldHM7CiAgICAgIHRoaXMucHJldmlld1dpZGdldHMgPSBudWxsOwogICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPz8gZHJhZ1N0YXRlLnN0YXJ0OwogICAgICBjb25zdCBwbGFjZW1lbnQgPSByZXNvbHZlV2lkZ2V0UGxhY2VtZW50KGxheW91dFNvdXJjZSwgZHJhZ1N0YXRlLndpZGdldElkLCB7IHg6IHRhcmdldC54LCB5OiB0YXJnZXQueSB9LCB0aGlzLmNvbHVtbnMsIGRyYWdTdGF0ZS5wcmV2aW91c1Bvc2l0aW9uKTsKICAgICAgaWYgKHBsYWNlbWVudCkgewogICAgICAgIGNvbnN0IGZpbmFsV2lkZ2V0ID0gcGxhY2VtZW50LndpZGdldHMuZmluZCgodzMpID0+IHczLmlkID09PSBkcmFnU3RhdGUud2lkZ2V0SWQpOwogICAgICAgIGlmIChmaW5hbFdpZGdldCkgewogICAgICAgICAgY29uc3QgaGFzT3ZlcmxhcCA9IHBsYWNlbWVudC53aWRnZXRzLnNvbWUoKHczKSA9PiB7CiAgICAgICAgICAgIGlmICh3My5pZCA9PT0gZHJhZ1N0YXRlLndpZGdldElkKQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgcmV0dXJuIGZpbmFsV2lkZ2V0LnggPCB3My54ICsgdzMudyAmJiBmaW5hbFdpZGdldC54ICsgZmluYWxXaWRnZXQudyA+IHczLnggJiYgZmluYWxXaWRnZXQueSA8IHczLnkgKyB3My5oICYmIGZpbmFsV2lkZ2V0LnkgKyBmaW5hbFdpZGdldC5oID4gdzMueTsKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFoYXNPdmVybGFwKSB7CiAgICAgICAgICAgIHRoaXMuY29tbWl0UGxhY2VtZW50KHBsYWNlbWVudCwgZHJhZ1N0YXRlLndpZGdldElkLCAid2lkZ2V0LW1vdmUiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMud2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSBkcmFnU3RhdGUud2lkZ2V0SWQgPyB7IC4uLndpZGdldCwgeDogZHJhZ1N0YXRlLnN0YXJ0LngsIHk6IGRyYWdTdGF0ZS5zdGFydC55IH0gOiB3aWRnZXQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gZHJhZ1N0YXRlLndpZGdldElkID8geyAuLi53aWRnZXQsIHg6IGRyYWdTdGF0ZS5zdGFydC54LCB5OiBkcmFnU3RhdGUuc3RhcnQueSB9IDogd2lkZ2V0KTsKICAgICAgfQogICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgICB0aGlzLmRyYWdTdGF0ZSA9IG51bGw7CiAgICAgIHRoaXMuaW50ZXJhY3Rpb25BY3RpdmUgPSBmYWxzZTsKICAgICAgdGhpcy5yZWxlYXNlUG9pbnRlckV2ZW50cygpOwogICAgfTsKICAgIHN0YXJ0UmVzaXplKGV2ZW50LCB3aWRnZXQsIGhhbmRsZXIyKSB7CiAgICAgIGlmICghdGhpcy5lZGl0YWJsZSB8fCB3aWRnZXQubm9SZXNpemUgfHwgd2lkZ2V0LmxvY2tlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgdGhpcy5lbnN1cmVNZXRyaWNzKCk7CiAgICAgIHRoaXMucmVzaXplU3RhdGUgPSB7CiAgICAgICAgd2lkZ2V0SWQ6IHdpZGdldC5pZCwKICAgICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCwKICAgICAgICBoYW5kbGVyOiBoYW5kbGVyMiwKICAgICAgICBzdGFydFBvaW50ZXI6IHsgY2xpZW50WDogZXZlbnQuY2xpZW50WCwgY2xpZW50WTogZXZlbnQuY2xpZW50WSB9LAogICAgICAgIHN0YXJ0OiB7IGlkOiB3aWRnZXQuaWQsIHg6IHdpZGdldC54LCB5OiB3aWRnZXQueSwgdzogd2lkZ2V0LncsIGg6IHdpZGdldC5oIH0sCiAgICAgICAgc3RhcnRXaWR0aDogd2lkZ2V0LncsCiAgICAgICAgc3RhcnRIZWlnaHQ6IHdpZGdldC5oLAogICAgICAgIGxhc3RQbGFjZW1lbnQ6IG51bGwKICAgICAgfTsKICAgICAgdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZSA9IHRydWU7CiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCB0aGlzLmhhbmRsZVJlc2l6ZU1vdmUpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCB0aGlzLmhhbmRsZVJlc2l6ZUVuZCk7CiAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IHsgaWQ6IHdpZGdldC5pZCwgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCB3OiB3aWRnZXQudywgaDogd2lkZ2V0LmggfTsKICAgIH0KICAgIGhhbmRsZVJlc2l6ZU1vdmUgPSAoZXZlbnQpID0+IHsKICAgICAgaWYgKCF0aGlzLnJlc2l6ZVN0YXRlKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgbWV0cmljcyA9IHRoaXMuZW5zdXJlTWV0cmljcygpOwogICAgICBjb25zdCBhY3RpdmVXaWRnZXRzID0gdGhpcy53aWRnZXRzOwogICAgICBjb25zdCB3aWRnZXQgPSBhY3RpdmVXaWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHRoaXMucmVzaXplU3RhdGUud2lkZ2V0SWQpOwogICAgICBpZiAoIXdpZGdldCkKICAgICAgICByZXR1cm47CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IG5leHRTaXplID0gY29tcHV0ZVJlc2l6ZURpbWVuc2lvbnMoewogICAgICAgIHBvaW50ZXI6IHsgY2xpZW50WDogZXZlbnQuY2xpZW50WCwgY2xpZW50WTogZXZlbnQuY2xpZW50WSB9LAogICAgICAgIGNvbnRhaW5lclJlY3Q6IHRoaXMuY29udGFpbmVyQm91bmRzID8/IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksCiAgICAgICAgbWV0cmljcywKICAgICAgICBzdGFydFdpZHRoOiB0aGlzLnJlc2l6ZVN0YXRlLnN0YXJ0V2lkdGgsCiAgICAgICAgc3RhcnRIZWlnaHQ6IHRoaXMucmVzaXplU3RhdGUuc3RhcnRIZWlnaHQsCiAgICAgICAgc3RhcnRQb2ludGVyOiB0aGlzLnJlc2l6ZVN0YXRlLnN0YXJ0UG9pbnRlciwKICAgICAgICBoYW5kbGVyOiB0aGlzLnJlc2l6ZVN0YXRlLmhhbmRsZXIsCiAgICAgICAgd2lkZ2V0LAogICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucwogICAgICB9KTsKICAgICAgY29uc3QgcGxhY2VtZW50ID0gcmVzb2x2ZVdpZGdldFBsYWNlbWVudChhY3RpdmVXaWRnZXRzLCB3aWRnZXQuaWQsIHsgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCB3OiBuZXh0U2l6ZS53aWR0aCwgaDogbmV4dFNpemUuaGVpZ2h0IH0sIHRoaXMuY29sdW1ucywgdGhpcy5yZXNpemVTdGF0ZS5zdGFydCk7CiAgICAgIGlmIChwbGFjZW1lbnQpIHsKICAgICAgICB0aGlzLnJlc2l6ZVN0YXRlID0geyAuLi50aGlzLnJlc2l6ZVN0YXRlLCBsYXN0UGxhY2VtZW50OiBwbGFjZW1lbnQgfTsKICAgICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gcGxhY2VtZW50LndpZGdldHM7CiAgICAgICAgY29uc3QgcHJldmlld1dpZGdldCA9IHBsYWNlbWVudC53aWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHdpZGdldC5pZCk7CiAgICAgICAgaWYgKHByZXZpZXdXaWRnZXQpIHsKICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IHsKICAgICAgICAgICAgaWQ6IHByZXZpZXdXaWRnZXQuaWQsCiAgICAgICAgICAgIHg6IHByZXZpZXdXaWRnZXQueCwKICAgICAgICAgICAgeTogcHJldmlld1dpZGdldC55LAogICAgICAgICAgICB3OiBwcmV2aWV3V2lkZ2V0LncsCiAgICAgICAgICAgIGg6IHByZXZpZXdXaWRnZXQuaAogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uID0gewogICAgICAgICAgICBpZDogd2lkZ2V0LmlkLAogICAgICAgICAgICB4OiB3aWRnZXQueCwKICAgICAgICAgICAgeTogd2lkZ2V0LnksCiAgICAgICAgICAgIHc6IG5leHRTaXplLndpZHRoLAogICAgICAgICAgICBoOiBuZXh0U2l6ZS5oZWlnaHQKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMucHJldmlld1dpZGdldHMgPSBudWxsOwogICAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9OwogICAgaGFuZGxlUmVzaXplRW5kID0gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHJlc2l6ZVN0YXRlID0gdGhpcy5yZXNpemVTdGF0ZTsKICAgICAgaWYgKCFyZXNpemVTdGF0ZSB8fCBldmVudC5wb2ludGVySWQgIT09IHJlc2l6ZVN0YXRlLnBvaW50ZXJJZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBsYXlvdXRTb3VyY2UgPSB0aGlzLndpZGdldHM7CiAgICAgIHRoaXMucHJldmlld1dpZGdldHMgPSBudWxsOwogICAgICBjb25zdCBwbGFjZW1lbnQgPSByZXNpemVTdGF0ZS5sYXN0UGxhY2VtZW50ID8/IHJlc29sdmVXaWRnZXRQbGFjZW1lbnQobGF5b3V0U291cmNlLCByZXNpemVTdGF0ZS53aWRnZXRJZCwgewogICAgICAgIHg6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8ueCA/PyByZXNpemVTdGF0ZS5zdGFydC54LAogICAgICAgIHk6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8ueSA/PyByZXNpemVTdGF0ZS5zdGFydC55LAogICAgICAgIHc6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8udyA/PyByZXNpemVTdGF0ZS5zdGFydC53LAogICAgICAgIGg6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8uaCA/PyByZXNpemVTdGF0ZS5zdGFydC5oCiAgICAgIH0sIHRoaXMuY29sdW1ucywgcmVzaXplU3RhdGUuc3RhcnQpOwogICAgICBpZiAocGxhY2VtZW50KSB7CiAgICAgICAgdGhpcy5jb21taXRQbGFjZW1lbnQocGxhY2VtZW50LCByZXNpemVTdGF0ZS53aWRnZXRJZCwgIndpZGdldC1yZXNpemUiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gcmVzaXplU3RhdGUud2lkZ2V0SWQgPyB7IC4uLndpZGdldCwgdzogcmVzaXplU3RhdGUuc3RhcnQudywgaDogcmVzaXplU3RhdGUuc3RhcnQuaCB9IDogd2lkZ2V0KTsKICAgICAgfQogICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgICB0aGlzLnJlc2l6ZVN0YXRlID0gbnVsbDsKICAgICAgdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZSA9IGZhbHNlOwogICAgICB0aGlzLnJlbGVhc2VQb2ludGVyRXZlbnRzKCk7CiAgICB9OwogICAgaGFuZGxlSGVhZGVyS2V5ZG93bihldmVudCwgd2lkZ2V0KSB7CiAgICAgIGlmICghdGhpcy5lZGl0YWJsZSB8fCB3aWRnZXQubm9Nb3ZlIHx8IHdpZGdldC5sb2NrZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qga2V5MiA9IGV2ZW50LmtleTsKICAgICAgY29uc3QgaXNSZXNpemUgPSBldmVudC5zaGlmdEtleTsKICAgICAgbGV0IHBsYWNlbWVudCA9IG51bGw7CiAgICAgIGlmIChpc1Jlc2l6ZSAmJiBbIkFycm93TGVmdCIsICJBcnJvd1JpZ2h0IiwgIkFycm93VXAiLCAiQXJyb3dEb3duIl0uaW5jbHVkZXMoa2V5MikpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IGRlbHRhMiA9IGtleTIgPT09ICJBcnJvd1JpZ2h0IiB8fCBrZXkyID09PSAiQXJyb3dEb3duIiA/IDEgOiAtMTsKICAgICAgICBpZiAoa2V5MiA9PT0gIkFycm93TGVmdCIgfHwga2V5MiA9PT0gIkFycm93UmlnaHQiKSB7CiAgICAgICAgICBjb25zdCBtYXhXaWR0aCA9IHdpZGdldC5tYXhXID8/IHRoaXMuY29sdW1ucyAtIHdpZGdldC54OwogICAgICAgICAgY29uc3QgbmV4dFdpZHRoID0gTWF0aC5tYXgod2lkZ2V0Lm1pblcgPz8gMSwgTWF0aC5taW4obWF4V2lkdGgsIHdpZGdldC53ICsgZGVsdGEyKSk7CiAgICAgICAgICBwbGFjZW1lbnQgPSByZXNvbHZlV2lkZ2V0UGxhY2VtZW50KHRoaXMud2lkZ2V0cywgd2lkZ2V0LmlkLCB7IHg6IHdpZGdldC54LCB5OiB3aWRnZXQueSwgdzogbmV4dFdpZHRoLCBoOiB3aWRnZXQuaCB9LCB0aGlzLmNvbHVtbnMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSB3aWRnZXQubWF4SCA/PyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgICAgICAgICBjb25zdCBuZXh0SGVpZ2h0ID0gTWF0aC5tYXgod2lkZ2V0Lm1pbkggPz8gMSwgTWF0aC5taW4obWF4SGVpZ2h0LCB3aWRnZXQuaCArIGRlbHRhMikpOwogICAgICAgICAgcGxhY2VtZW50ID0gcmVzb2x2ZVdpZGdldFBsYWNlbWVudCh0aGlzLndpZGdldHMsIHdpZGdldC5pZCwgeyB4OiB3aWRnZXQueCwgeTogd2lkZ2V0LnksIHc6IHdpZGdldC53LCBoOiBuZXh0SGVpZ2h0IH0sIHRoaXMuY29sdW1ucyk7CiAgICAgICAgfQogICAgICAgIGlmIChwbGFjZW1lbnQpIHsKICAgICAgICAgIHRoaXMuY29tbWl0UGxhY2VtZW50KHBsYWNlbWVudCwgd2lkZ2V0LmlkLCAid2lkZ2V0LXJlc2l6ZSIpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgbW92ZU1hcCA9IHsKICAgICAgICBBcnJvd0xlZnQ6IHsgZHg6IC0xLCBkeTogMCB9LAogICAgICAgIEFycm93UmlnaHQ6IHsgZHg6IDEsIGR5OiAwIH0sCiAgICAgICAgQXJyb3dVcDogeyBkeDogMCwgZHk6IC0xIH0sCiAgICAgICAgQXJyb3dEb3duOiB7IGR4OiAwLCBkeTogMSB9CiAgICAgIH07CiAgICAgIGNvbnN0IGRlbHRhID0gbW92ZU1hcFtrZXkyXTsKICAgICAgaWYgKCFkZWx0YSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCB0YXJnZXRYID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5jb2x1bW5zIC0gd2lkZ2V0LncsIHdpZGdldC54ICsgZGVsdGEuZHgpKTsKICAgICAgY29uc3QgdGFyZ2V0WSA9IE1hdGgubWF4KDAsIHdpZGdldC55ICsgZGVsdGEuZHkpOwogICAgICBwbGFjZW1lbnQgPSByZXNvbHZlV2lkZ2V0UGxhY2VtZW50KHRoaXMud2lkZ2V0cywgd2lkZ2V0LmlkLCB7IHg6IHRhcmdldFgsIHk6IHRhcmdldFkgfSwgdGhpcy5jb2x1bW5zKTsKICAgICAgaWYgKHBsYWNlbWVudCkgewogICAgICAgIHRoaXMuY29tbWl0UGxhY2VtZW50KHBsYWNlbWVudCwgd2lkZ2V0LmlkLCAid2lkZ2V0LW1vdmUiKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlV2lkZ2V0Q29udGV4dE1lbnUoZXZlbnQsIHdpZGdldCkgewogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgb3BlbldpZGdldENvbnRleHRNZW51KHsgd2lkZ2V0LCBob3N0OiB0aGlzLCBldmVudCB9KTsKICAgIH0KICAgIGNvbW1pdFBsYWNlbWVudChyZXN1bHQsIHdpZGdldElkLCB0eXBlNSkgewogICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gbnVsbDsKICAgICAgdGhpcy53aWRnZXRzID0gcmVzdWx0LndpZGdldHM7CiAgICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLndpZGdldHMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gd2lkZ2V0SWQpOwogICAgICBpZiAoc3ViamVjdCkgewogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQodHlwZTUsIHsKICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICB3aWRnZXQ6IHN1YmplY3QsCiAgICAgICAgICAgIGRpc3BsYWNlZDogcmVzdWx0Lm1vdmVkV2lkZ2V0cy5maWx0ZXIoKGlkKSA9PiBpZCAhPT0gd2lkZ2V0SWQpLAogICAgICAgICAgICBzd2FwcGVkV2l0aDogcmVzdWx0LnN3YXBwZWRXaXRoCiAgICAgICAgICB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9CiAgICB9CiAgICByZW1vdmVXaWRnZXQod2lkZ2V0SWQpIHsKICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy53aWRnZXRzLmZpbmQoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSB3aWRnZXRJZCk7CiAgICAgIGlmICghdGFyZ2V0KQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy53aWRnZXRzID0gdGhpcy53aWRnZXRzLmZpbHRlcigod2lkZ2V0KSA9PiB3aWRnZXQuaWQgIT09IHdpZGdldElkKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgid2lkZ2V0LXJlbW92ZSIsIHsKICAgICAgICBkZXRhaWw6IHsgd2lkZ2V0OiB0YXJnZXQgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIHVwZGF0ZVdpZGdldCh3aWRnZXRJZCwgdXBkYXRlcykgewogICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gd2lkZ2V0SWQgPyB7IC4uLndpZGdldCwgLi4udXBkYXRlcyB9IDogd2lkZ2V0KTsKICAgIH0KICAgIGdldExheW91dCgpIHsKICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0cy5tYXAoKHsgaWQsIHg6IHgzLCB5OiB5NSwgdzogdzMsIGg6IGg5IH0pID0+ICh7IGlkLCB4OiB4MywgeTogeTUsIHc6IHczLCBoOiBoOSB9KSk7CiAgICB9CiAgICBzZXRMYXlvdXQobGF5b3V0KSB7CiAgICAgIHRoaXMud2lkZ2V0cyA9IGFwcGx5TGF5b3V0KHRoaXMud2lkZ2V0cywgbGF5b3V0KTsKICAgIH0KICAgIGxvY2tHcmlkKCkgewogICAgICB0aGlzLmVkaXRhYmxlID0gZmFsc2U7CiAgICB9CiAgICB1bmxvY2tHcmlkKCkgewogICAgICB0aGlzLmVkaXRhYmxlID0gdHJ1ZTsKICAgIH0KICAgIGFkZFdpZGdldCh3aWRnZXQsIGF1dG9Qb3NpdGlvbiA9IGZhbHNlKSB7CiAgICAgIGNvbnN0IG5leHRXaWRnZXQgPSB7IC4uLndpZGdldCB9OwogICAgICBpZiAoYXV0b1Bvc2l0aW9uIHx8IG5leHRXaWRnZXQuYXV0b1Bvc2l0aW9uKSB7CiAgICAgICAgY29uc3QgcG9zaXRpb24zID0gZmluZEF2YWlsYWJsZVBvc2l0aW9uKHRoaXMud2lkZ2V0cywgbmV4dFdpZGdldC53LCBuZXh0V2lkZ2V0LmgsIHRoaXMuY29sdW1ucyk7CiAgICAgICAgbmV4dFdpZGdldC54ID0gcG9zaXRpb24zLng7CiAgICAgICAgbmV4dFdpZGdldC55ID0gcG9zaXRpb24zLnk7CiAgICAgIH0KICAgICAgdGhpcy53aWRnZXRzID0gWy4uLnRoaXMud2lkZ2V0cywgbmV4dFdpZGdldF07CiAgICB9CiAgICBjb21wYWN0KGRpcmVjdGlvbiA9ICJ2ZXJ0aWNhbCIpIHsKICAgICAgY29uc3QgbmV4dFdpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+ICh7IC4uLndpZGdldCB9KSk7CiAgICAgIGNvbXBhY3RMYXlvdXQobmV4dFdpZGdldHMsIGRpcmVjdGlvbik7CiAgICAgIHRoaXMud2lkZ2V0cyA9IG5leHRXaWRnZXRzOwogICAgfQogICAgYXBwbHlCcmVha3BvaW50TGF5b3V0KGJyZWFrcG9pbnQpIHsKICAgICAgdGhpcy5hY3RpdmVCcmVha3BvaW50ID0gYnJlYWtwb2ludDsKICAgICAgY29uc3QgbGF5b3V0ID0gdGhpcy5sYXlvdXRzPy5bYnJlYWtwb2ludF07CiAgICAgIGlmIChsYXlvdXQpIHsKICAgICAgICB0aGlzLnNldExheW91dChsYXlvdXQpOwogICAgICB9CiAgICB9CiAgICBub3RpZnlMYXlvdXRDaGFuZ2UoKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxheW91dC1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IGxheW91dDogdGhpcy5nZXRMYXlvdXQoKSB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgZW5zdXJlTWV0cmljcygpIHsKICAgICAgaWYgKCF0aGlzLm1ldHJpY3MpIHsKICAgICAgICB0aGlzLmNvbXB1dGVNZXRyaWNzKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMubWV0cmljczsKICAgIH0KICAgIGNvbXB1dGVNZXRyaWNzKCkgewogICAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICB0aGlzLmNvbnRhaW5lckJvdW5kcyA9IGJvdW5kczsKICAgICAgY29uc3QgbWFyZ2lucyA9IHJlc29sdmVNYXJnaW5zKHRoaXMubWFyZ2luKTsKICAgICAgdGhpcy5yZXNvbHZlZE1hcmdpbnMgPSBtYXJnaW5zOwogICAgICB0aGlzLm1ldHJpY3MgPSBjYWxjdWxhdGVDZWxsTWV0cmljcyhib3VuZHMud2lkdGgsIHRoaXMuY29sdW1ucywgbWFyZ2lucywgdGhpcy5jZWxsSGVpZ2h0LCB0aGlzLmNlbGxIZWlnaHRVbml0KTsKICAgIH0KICAgIG9ic2VydmVSZXNpemUoKSB7CiAgICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7CiAgICAgICAgdGhpcy5jb21wdXRlTWV0cmljcygpOwogICAgICB9KTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMpOwogICAgfQogICAgZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkgewogICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSB2b2lkIDA7CiAgICB9CiAgICByZWxlYXNlUG9pbnRlckV2ZW50cygpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCB0aGlzLmhhbmRsZURyYWdNb3ZlKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwgdGhpcy5oYW5kbGVEcmFnRW5kKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCB0aGlzLmhhbmRsZVJlc2l6ZU1vdmUpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCB0aGlzLmhhbmRsZVJlc2l6ZUVuZCk7CiAgICB9CiAgICBweFRvUGVyY2VudCh2YWx1ZTIsIGNvbnRhaW5lcikgewogICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICByZXR1cm4gMDsKICAgICAgcmV0dXJuIE51bWJlcigodmFsdWUyIC8gY29udGFpbmVyICogMTAwKS50b0ZpeGVkKDQpKTsKICAgIH0KICAgIGNvbXB1dGVXaWRnZXRSZWN0KHdpZGdldCwgbWV0cmljcywgbWFyZ2lucykgewogICAgICBjb25zdCBjZWxsV2lkdGggPSBtZXRyaWNzLmNlbGxXaWR0aFB4OwogICAgICBjb25zdCBjZWxsSGVpZ2h0ID0gbWV0cmljcy5jZWxsSGVpZ2h0UHg7CiAgICAgIGNvbnN0IGxlZnQgPSB3aWRnZXQueCAqIChjZWxsV2lkdGggKyBtYXJnaW5zLmhvcml6b250YWwpICsgbWFyZ2lucy5ob3Jpem9udGFsOwogICAgICBjb25zdCB0b3AgPSB3aWRnZXQueSAqIChjZWxsSGVpZ2h0ICsgbWFyZ2lucy52ZXJ0aWNhbCkgKyBtYXJnaW5zLnZlcnRpY2FsOwogICAgICBjb25zdCB3aWR0aCA9IHdpZGdldC53ICogY2VsbFdpZHRoICsgTWF0aC5tYXgoMCwgd2lkZ2V0LncgLSAxKSAqIG1hcmdpbnMuaG9yaXpvbnRhbDsKICAgICAgY29uc3QgaGVpZ2h0ID0gd2lkZ2V0LmggKiBjZWxsSGVpZ2h0ICsgTWF0aC5tYXgoMCwgd2lkZ2V0LmggLSAxKSAqIG1hcmdpbnMudmVydGljYWw7CiAgICAgIHJldHVybiB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9OwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3NihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0Rhc2hib2FyZGdyaWQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1oZWFkaW5nL2RlZXMtaGVhZGluZy5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CmZ1bmN0aW9uIGRlbW9GdW5jNDcoKSB7CiAgcmV0dXJuIGIyYAogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iMSI+VGhpcyBpcyBhIEgxIGhlYWRpbmc8L2RlZXMtaGVhZGluZz4KICAgIDxkZWVzLWhlYWRpbmcgbGV2ZWw9IjIiPlRoaXMgaXMgYSBIMiBoZWFkaW5nPC9kZWVzLWhlYWRpbmc+CiAgICA8ZGVlcy1oZWFkaW5nIGxldmVsPSIzIj5UaGlzIGlzIGEgSDMgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iNCI+VGhpcyBpcyBhIEg0IGhlYWRpbmc8L2RlZXMtaGVhZGluZz4KICAgIDxkZWVzLWhlYWRpbmcgbGV2ZWw9IjUiPlRoaXMgaXMgYSBINSBoZWFkaW5nPC9kZWVzLWhlYWRpbmc+CiAgICA8ZGVlcy1oZWFkaW5nIGxldmVsPSI2Ij5UaGlzIGlzIGEgSDYgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iaHIiPlRoaXMgaXMgYW4gaHIgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iaHItc21hbGwiPlRoaXMgaXMgYW4gaHIgc21hbGwgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogIGA7Cn0KCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1oZWFkaW5nL2RlZXMtaGVhZGluZy5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU3NiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNzcgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNIZWFkaW5nID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1oZWFkaW5nIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbGV2ZWxfZGVjb3JhdG9yczsKICBsZXQgX2xldmVsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGV2ZWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0hlYWRpbmcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbGV2ZWxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTc2KHRoaXMsIG51bGwsIF9sZXZlbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsZXZlbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGV2ZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGV2ZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxldmVsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xldmVsX2luaXRpYWxpemVycywgX2xldmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSGVhZGluZzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gZGVtbwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ3OwogICAgI2xldmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczc3KHRoaXMsIF9sZXZlbF9pbml0aWFsaXplcnMsICIxIik7CiAgICAvLyBwcm9wZXJ0aWVzCiAgICAvKioKICAgICAqIEhlYWRpbmcgbGV2ZWw6IDEtNiBmb3IgaDEtaDYsIG9yICdocicgZm9yIGhvcml6b250YWwgcnVsZSBzdHlsZQogICAgICovCiAgICBnZXQgbGV2ZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsZXZlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxldmVsKHZhbHVlMikgewogICAgICB0aGlzLiNsZXZlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gU1RBVElDIFNUWUxFUwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIC8qIEhlYWRpbmcgc3R5bGVzICovCiAgICAgIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYgewogICAgICAgIG1hcmdpbjogMTZweCAwIDhweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMCIsICIjZmZmIil9OwogICAgICB9CiAgICAgIGgxIHsgZm9udC1zaXplOiAzMnB4OyBmb250LWZhbWlseTogJHtjc3NDYWxTYW5zRm9udEZhbWlseX07IGxldHRlci1zcGFjaW5nOiAwLjAyNWVtO30KICAgICAgaDIgeyBmb250LXNpemU6IDI4cHg7IH0KICAgICAgaDMgeyBmb250LXNpemU6IDI0cHg7IH0KICAgICAgaDQgeyBmb250LXNpemU6IDIwcHg7IH0KICAgICAgaDUgeyBmb250LXNpemU6IDE2cHg7IH0KICAgICAgaDYgeyBmb250LXNpemU6IDE0cHg7IH0KICAgICAgLyogSG9yaXpvbnRhbCBydWxlIHN0eWxlIGhlYWRpbmcgKi8KICAgICAgLmhlYWRpbmctaHIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luOiAxNnB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwIiwgIiNmZmYiKX07CiAgICAgIH0KICAgICAgLyogRmFkZSBsaW5lcyB0b3dhcmQgYW5kIGF3YXkgZnJvbSB0ZXh0IGZvciBociBzdHlsZSAqLwogICAgICAuaGVhZGluZy1ocjo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIC8qIGZhZGUgaW4gdG93YXJkIGNlbnRlciAqLwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50LCAjY2NjKSIsICJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50LCAjMzMzKSIpfTsKICAgICAgICBtYXJnaW46IDAgOHB4OwogICAgICB9CiAgICAgIC5oZWFkaW5nLWhyOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgZmxleDogMTsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICAvKiBmYWRlIG91dCBhd2F5IGZyb20gY2VudGVyICovCiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2NjYywgdHJhbnNwYXJlbnQpIiwgImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzMzMywgdHJhbnNwYXJlbnQpIil9OwogICAgICAgIG1hcmdpbjogMCA4cHg7CiAgICAgIH0KICAgICAgLyogU21hbGwgaHIgdmFyaWFudCB3aXRoIHJlZHVjZWQgbWFyZ2lucyAqLwogICAgICAuaGVhZGluZy1oci5oZWFkaW5nLWhyLXNtYWxsIHsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQogICAgICAuaGVhZGluZy1oci5oZWFkaW5nLWhyLXNtYWxsOjpiZWZvcmUsCiAgICAgIC5oZWFkaW5nLWhyLmhlYWRpbmctaHItc21hbGw6OmFmdGVyIHsKICAgICAgICBtYXJnaW46IDAgOHB4OwogICAgICB9CiAgICBgCiAgICBdOwogICAgLy8gSU5TVEFOQ0UKICAgIHJlbmRlcigpIHsKICAgICAgc3dpdGNoICh0aGlzLmxldmVsKSB7CiAgICAgICAgY2FzZSAiMSI6CiAgICAgICAgICByZXR1cm4gYjJgPGgxPjxzbG90Pjwvc2xvdD48L2gxPmA7CiAgICAgICAgY2FzZSAiMiI6CiAgICAgICAgICByZXR1cm4gYjJgPGgyPjxzbG90Pjwvc2xvdD48L2gyPmA7CiAgICAgICAgY2FzZSAiMyI6CiAgICAgICAgICByZXR1cm4gYjJgPGgzPjxzbG90Pjwvc2xvdD48L2gzPmA7CiAgICAgICAgY2FzZSAiNCI6CiAgICAgICAgICByZXR1cm4gYjJgPGg0PjxzbG90Pjwvc2xvdD48L2g0PmA7CiAgICAgICAgY2FzZSAiNSI6CiAgICAgICAgICByZXR1cm4gYjJgPGg1PjxzbG90Pjwvc2xvdD48L2g1PmA7CiAgICAgICAgY2FzZSAiNiI6CiAgICAgICAgICByZXR1cm4gYjJgPGg2PjxzbG90Pjwvc2xvdD48L2g2PmA7CiAgICAgICAgY2FzZSAiaHIiOgogICAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9ImhlYWRpbmctaHIiPjxzbG90Pjwvc2xvdD48L2Rpdj5gOwogICAgICAgIGNhc2UgImhyLXNtYWxsIjoKICAgICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJoZWFkaW5nLWhyIGhlYWRpbmctaHItc21hbGwiPjxzbG90Pjwvc2xvdD48L2Rpdj5gOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gYjJgPGgxPjxzbG90Pjwvc2xvdD48L2gxPmA7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczc3KHRoaXMsIF9sZXZlbF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczc3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSGVhZGluZzIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWhpbnQvZGVlcy1oaW50LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNDggPSAoKSA9PiBiMmAKICA8ZGVlcy1oaW50PjwvZGVlcy1oaW50PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWhpbnQvZGVlcy1oaW50LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTc3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3OCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0hpbnQgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWhpbnQiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF90eXBlX2RlY29yYXRvcnM7CiAgbGV0IF90eXBlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdHlwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSGludDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90eXBlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfX2VzRGVjb3JhdGU3Nyh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSGludDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ4OwogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzgodGhpcywgX3R5cGVfaW5pdGlhbGl6ZXJzLCAiaW5mbyIpOwogICAgZ2V0IHR5cGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdHlwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzgodGhpcywgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBkb210b29sc19lbGVtZW50YmFzaWNfZXhwb3J0cy5zZXR1cCgpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFt0aGVtZURlZmF1bHRTdHlsZXMsIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgIGBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgIDxkaXYgY2xhc3M9Im1haW5ib3giPjwvZGl2PiBgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3OChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0hpbnQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1pY29uL2luZGV4LmpzCmluaXRfZGVlc19pY29uKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtbW9iaWxlbmF2aWdhdGlvbi9kZWVzLW1vYmlsZW5hdmlnYXRpb24uanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNzggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczc5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzTW9iaWxlbmF2aWdhdGlvbiA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtbW9iaWxlbmF2aWdhdGlvbiIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2hlYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX21lbnVJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9iaWxlTmF2WkluZGV4X2RlY29yYXRvcnM7CiAgbGV0IF9tb2JpbGVOYXZaSW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tb2JpbGVOYXZaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc01vYmlsZW5hdmlnYXRpb24yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfaGVhZGluZ19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfbWVudUl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX21vYmlsZU5hdlpJbmRleF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU3OCh0aGlzLCBudWxsLCBfaGVhZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJoZWFkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoZWFkaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhlYWRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmhlYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaGVhZGluZ19pbml0aWFsaXplcnMsIF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzgodGhpcywgbnVsbCwgX21lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVJdGVtcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVJdGVtcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzgodGhpcywgbnVsbCwgX21vYmlsZU5hdlpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtb2JpbGVOYXZaSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1vYmlsZU5hdlpJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tb2JpbGVOYXZaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1vYmlsZU5hdlpJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tb2JpbGVOYXZaSW5kZXhfaW5pdGlhbGl6ZXJzLCBfbW9iaWxlTmF2WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzgobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzTW9iaWxlbmF2aWdhdGlvbjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYAogICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICAgICAgRGVlc01vYmlsZW5hdmlnYXRpb24yLmNyZWF0ZUFuZFNob3coWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEYXNoYm9hcmQiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6bGF5b3V0LWRhc2hib2FyZCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChkZWVzTW9iaWxlTmF2KSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJOYXZpZ2F0ZSB0byBkYXNoYm9hcmQiKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiUHJvZmlsZSIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp1c2VyIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKGRlZXNNb2JpbGVOYXYpID0+IHsKICAgICAgICAgICAgY29uc29sZS5sb2coIk5hdmlnYXRlIHRvIHByb2ZpbGUiKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiU2V0dGluZ3MiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6c2V0dGluZ3MiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoZGVlc01vYmlsZU5hdikgPT4gewogICAgICAgICAgICBjb25zb2xlLmxvZygiTmF2aWdhdGUgdG8gc2V0dGluZ3MiKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiSGVscCIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpoZWxwLWNpcmNsZSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChkZWVzTW9iaWxlTmF2KSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTaG93IGhlbHAiKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiU2lnbiBPdXQiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6bG9nLW91dCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChkZWVzTW9iaWxlTmF2KSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTaWduIG91dCIpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0pOwogICAgfX0+T3BlbiBNb2JpbGUgTmF2aWdhdGlvbjwvZGVlcy1idXR0b24+CiAgYDsKICAgIHN0YXRpYyBzaW5nbGV0b25SZWY7CiAgICBzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdyhtZW51SXRlbXNBcmcpIHsKICAgICAgaWYgKCF0aGlzLnNpbmdsZXRvblJlZikgewogICAgICAgIHRoaXMuc2luZ2xldG9uUmVmID0gbmV3IERlZXNNb2JpbGVuYXZpZ2F0aW9uMigpOwogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMuc2luZ2xldG9uUmVmKTsKICAgICAgICBhd2FpdCB0aGlzLnNpbmdsZXRvblJlZi5pbml0KCk7CiAgICAgIH0KICAgICAgdGhpcy5zaW5nbGV0b25SZWYubWVudUl0ZW1zID0gbWVudUl0ZW1zQXJnOwogICAgICBhd2FpdCB0aGlzLnNpbmdsZXRvblJlZi5yZWFkeURlZmVycmVkLnByb21pc2U7CiAgICAgIHRoaXMuc2luZ2xldG9uUmVmLnNob3coKTsKICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9uUmVmOwogICAgfQogICAgI2hlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzkodGhpcywgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzLCBgTWVudWApOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBoZWFkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhlYWRpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2hlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc5KHRoaXMsIF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3OSh0aGlzLCBfbWVudUl0ZW1zX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBtZW51SXRlbXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtZW51SXRlbXModmFsdWUyKSB7CiAgICAgIHRoaXMuI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21vYmlsZU5hdlpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzkodGhpcywgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzkodGhpcywgX21vYmlsZU5hdlpJbmRleF9pbml0aWFsaXplcnMsIDFlMykpOwogICAgZ2V0IG1vYmlsZU5hdlpJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21vYmlsZU5hdlpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1vYmlsZU5hdlpJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbW9iaWxlTmF2WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICByZWFkeURlZmVycmVkID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzkodGhpcywgX21vYmlsZU5hdlpJbmRleF9leHRyYUluaXRpYWxpemVycyksIGRpc3RfdHNfZXhwb3J0czI1LnBsdWdpbnMuc21hcnRwcm9taXNlLmRlZmVyKCkpOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICB9CiAgICAvKioKICAgICAqIGluaXRzIHRoZSBtb2JpbGUgbmF2aWdhdGlvbgogICAgICovCiAgICBhc3luYyBpbml0KCkgewogICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICB0aGlzLnJlYWR5RGVmZXJyZWQucmVzb2x2ZSgpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICB9CgogICAgICAubWFpbiB7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1heC13aWR0aDogMzIwcHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIHotaW5kZXg6IHZhcigtLXotaW5kZXgpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiLTIwcHggMCAyNXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjEpLCAtMTBweCAwIDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMDQpIiwgIi0yMHB4IDAgMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4zKSwgLTEwcHggMCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgLm1haW4uc2hvdyB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMHB4KTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICAubWVudS1jb250YWluZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAubWVudUl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbTphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtIGRlZXMtaWNvbiB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS10ZXh0IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAubWVudUl0ZW0tZGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICBtYXJnaW46IDhweCAxNnB4OwogICAgICB9CgogICAgICAvKiBNb2JpbGUgcmVzcG9uc2l2ZW5lc3MgKi8KICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDQwMHB4KSB7CiAgICAgICAgLm1haW4gewogICAgICAgICAgbWF4LXdpZHRoOiAxMDB2dzsKICAgICAgICAgIHdpZHRoOiA4NXZ3OwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyogQW5pbWF0aW9uIGZvciBtZW51IGl0ZW1zICovCiAgICAgIEBrZXlmcmFtZXMgc2xpZGVJblJpZ2h0IHsKICAgICAgICBmcm9tIHsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjBweCk7CiAgICAgICAgfQogICAgICAgIHRvIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAubWFpbi5zaG93IC5tZW51SXRlbSB7CiAgICAgICAgYW5pbWF0aW9uOiBzbGlkZUluUmlnaHQgMC4zcyBlYXNlLW91dCBmb3J3YXJkczsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IGNhbGModmFyKC0taXRlbS1pbmRleCwgMCkgKiAwLjA1cyk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgKi8KICAgICAgLm1lbnUtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgfQoKICAgICAgLm1lbnUtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5tZW51LWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAubWVudS1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNTI1MjViIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICAubWFpbiB7CiAgICAgICAgICAtLXotaW5kZXg6ICR7dGhpcy5tb2JpbGVOYXZaSW5kZXh9OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0ibWFpbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxoMiBjbGFzcz0iaGVhZGluZyI+JHt0aGlzLmhlYWRpbmd9PC9oMj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZW51LWNvbnRhaW5lciI+CiAgICAgICAgICAke3RoaXMubWVudUl0ZW1zLm1hcCgobWVudUl0ZW0sIGluZGV4MikgPT4gewogICAgICAgIGlmICgiZGl2aWRlciIgaW4gbWVudUl0ZW0gJiYgbWVudUl0ZW0uZGl2aWRlcikgewogICAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9Im1lbnVJdGVtLWRpdmlkZXIiPjwvZGl2PmA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICBjbGFzcz0ibWVudUl0ZW0iCiAgICAgICAgICAgICAgICBzdHlsZT0iLS1pdGVtLWluZGV4OiAke2luZGV4Mn0iCiAgICAgICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gewogICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICBtZW51SXRlbS5hY3Rpb24odGhpcyk7CiAgICAgICAgfX0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgJHttZW51SXRlbS5pY29uTmFtZSA/IGIyYAogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7bWVudUl0ZW0uaWNvbk5hbWV9IHNpemU9IjIwIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZW51SXRlbS10ZXh0Ij4ke21lbnVJdGVtLm5hbWV9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgd2luZG93TGF5ZXI7CiAgICAvKioKICAgICAqIGluaXRzIHRoZSBzaG93CiAgICAgKi8KICAgIGFzeW5jIHNob3coKSB7CiAgICAgIGNvbnN0IGRvbXRvb2xzID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGNvbnN0IG1haW4gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1haW4iKTsKICAgICAgaWYgKCF0aGlzLndpbmRvd0xheWVyKSB7CiAgICAgICAgdGhpcy53aW5kb3dMYXllciA9IGF3YWl0IERlZXNXaW5kb3dMYXllci5jcmVhdGVBbmRTaG93KHsKICAgICAgICAgIGJsdXI6IHRydWUKICAgICAgICB9KTsKICAgICAgICB0aGlzLndpbmRvd0xheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQodGhpcy53aW5kb3dMYXllcik7CiAgICAgICAgYXdhaXQgdGhpcy53aW5kb3dMYXllci5zaG93KCk7CiAgICAgIH0KICAgICAgdGhpcy5tb2JpbGVOYXZaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMsIHRoaXMubW9iaWxlTmF2WkluZGV4KTsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigxMCk7CiAgICAgIG1haW4uY2xhc3NMaXN0LmFkZCgic2hvdyIpOwogICAgfQogICAgLyoqCiAgICAgKiBpbml0cyB0aGUgaGlkZSBmdW5jdGlvbgogICAgICovCiAgICBhc3luYyBoaWRlKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBjb25zdCBtYWluID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tYWluIik7CiAgICAgIG1haW4uY2xhc3NMaXN0LnJlbW92ZSgic2hvdyIpOwogICAgICB6SW5kZXhSZWdpc3RyeS51bnJlZ2lzdGVyKHRoaXMpOwogICAgICBpZiAodGhpcy53aW5kb3dMYXllcikgewogICAgICAgIGF3YWl0IHRoaXMud2luZG93TGF5ZXIuZGVzdHJveSgpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgekluZGV4UmVnaXN0cnkudW5yZWdpc3Rlcih0aGlzKTsKICAgICAgaWYgKHRoaXMud2luZG93TGF5ZXIpIHsKICAgICAgICBhd2FpdCB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3OShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc01vYmlsZW5hdmlnYXRpb24yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1wYWdpbmF0aW9uL2RlZXMtcGFnaW5hdGlvbi5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzQ5ID0gKCkgPT4gYjJgCiAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxNnB4OyI+CiAgICA8IS0tIFNtYWxsIHNldCBvZiBwYWdlcyAtLT4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNHB4OyI+CiAgICAgIDxzcGFuPjUgcGFnZXMsIHN0YXJ0aW5nIGF0IDE6PC9zcGFuPgogICAgICA8ZGVlcy1wYWdpbmF0aW9uCiAgICAgICAgLnRvdGFsPSR7NX0KICAgICAgICAucGFnZT0kezF9CiAgICAgICAgQHBhZ2UtY2hhbmdlPSR7KGUxMSkgPT4gY29uc29sZS5sb2coIlBhZ2UgY2hhbmdlZCB0byIsIGUxMS5kZXRhaWwucGFnZSl9CiAgICAgID48L2RlZXMtcGFnaW5hdGlvbj4KICAgIDwvZGl2PgoKICAgIDwhLS0gTGFyZ2VyIHNldCBvZiBwYWdlcyAtLT4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNHB4OyI+CiAgICAgIDxzcGFuPjE1IHBhZ2VzLCBzdGFydGluZyBhdCA4Ojwvc3Bhbj4KICAgICAgPGRlZXMtcGFnaW5hdGlvbgogICAgICAgIC50b3RhbD0kezE1fQogICAgICAgIC5wYWdlPSR7OH0KICAgICAgICBAcGFnZS1jaGFuZ2U9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiUGFnZSBjaGFuZ2VkIHRvIiwgZTExLmRldGFpbC5wYWdlKX0KICAgICAgPjwvZGVlcy1wYWdpbmF0aW9uPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtcGFnaW5hdGlvbi9kZWVzLXBhZ2luYXRpb24uanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNzkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczgwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzUGFnaW5hdGlvbiA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtcGFnaW5hdGlvbiIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3BhZ2VfZGVjb3JhdG9yczsKICBsZXQgX3BhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wYWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90b3RhbF9kZWNvcmF0b3JzOwogIGxldCBfdG90YWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90b3RhbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUGFnaW5hdGlvbjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9wYWdlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUgfSldOwogICAgICBfdG90YWxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTc5KHRoaXMsIG51bGwsIF9wYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucGFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGFnZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wYWdlX2luaXRpYWxpemVycywgX3BhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3OSh0aGlzLCBudWxsLCBfdG90YWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidG90YWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRvdGFsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRvdGFsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50b3RhbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90b3RhbF9pbml0aWFsaXplcnMsIF90b3RhbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc5KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1BhZ2luYXRpb24yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM0OTsKICAgICNwYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczgwKHRoaXMsIF9wYWdlX2luaXRpYWxpemVycywgMSk7CiAgICAvKiogQ3VycmVudCBwYWdlICgxLWJhc2VkKSAqLwogICAgZ2V0IHBhZ2UoKSB7CiAgICAgIHJldHVybiB0aGlzLiNwYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RvdGFsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4MCh0aGlzLCBfcGFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODAodGhpcywgX3RvdGFsX2luaXRpYWxpemVycywgMSkpOwogICAgLyoqIFRvdGFsIG51bWJlciBvZiBwYWdlcyAqLwogICAgZ2V0IHRvdGFsKCkgewogICAgICByZXR1cm4gdGhpcy4jdG90YWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0b3RhbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdG90YWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQogICAgICBidXR0b24gewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIG1hcmdpbjogMCAycHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2NjYyIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzOwogICAgICB9CiAgICAgIGJ1dHRvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlZWUiLCAiIzQ0NCIpfTsKICAgICAgfQogICAgICBidXR0b246ZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNhYWEiLCAiIzY2NiIpfTsKICAgICAgfQogICAgICBidXR0b24uY3VycmVudCB7CiAgICAgICAgYmFja2dyb3VuZDogIzAwNTBiOTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KICAgICAgc3Bhbi5lbGxpcHNpcyB7CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2NjYyIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIGdldCBwYWdlcygpIHsKICAgICAgY29uc3QgcGFnZXMgPSBbXTsKICAgICAgY29uc3QgdG90YWwgPSB0aGlzLnRvdGFsOwogICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5wYWdlOwogICAgICBpZiAodG90YWwgPD0gNykgewogICAgICAgIGZvciAobGV0IGkxMSA9IDE7IGkxMSA8PSB0b3RhbDsgaTExKyspIHsKICAgICAgICAgIHBhZ2VzLnB1c2goaTExKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcGFnZXMucHVzaCgxKTsKICAgICAgICBpZiAoY3VycmVudCA+IDQpIHsKICAgICAgICAgIHBhZ2VzLnB1c2goIi4uLiIpOwogICAgICAgIH0KICAgICAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDIsIGN1cnJlbnQgLSAyKTsKICAgICAgICBjb25zdCBlbmQzID0gTWF0aC5taW4odG90YWwgLSAxLCBjdXJyZW50ICsgMik7CiAgICAgICAgZm9yIChsZXQgaTExID0gc3RhcnQ7IGkxMSA8PSBlbmQzOyBpMTErKykgewogICAgICAgICAgcGFnZXMucHVzaChpMTEpOwogICAgICAgIH0KICAgICAgICBpZiAoY3VycmVudCA8IHRvdGFsIC0gMykgewogICAgICAgICAgcGFnZXMucHVzaCgiLi4uIik7CiAgICAgICAgfQogICAgICAgIHBhZ2VzLnB1c2godG90YWwpOwogICAgICB9CiAgICAgIHJldHVybiBwYWdlczsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8YnV0dG9uCiAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5jaGFuZ2VQYWdlKHRoaXMucGFnZSAtIDEpfQogICAgICAgID9kaXNhYmxlZD0ke3RoaXMucGFnZSA8PSAxfQogICAgICAgIGFyaWEtbGFiZWw9IlByZXZpb3VzIHBhZ2UiCiAgICAgID4KICAgICAgICDigLkKICAgICAgPC9idXR0b24+CiAgICAgICR7dGhpcy5wYWdlcy5tYXAoKHA3KSA9PiBwNyA9PT0gIi4uLiIgPyBiMmA8c3BhbiBjbGFzcz0iZWxsaXBzaXMiPuKApjwvc3Bhbj5gIDogYjJgCiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IiR7cDcgPT09IHRoaXMucGFnZSA/ICJjdXJyZW50IiA6ICIifSIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuY2hhbmdlUGFnZShwNyl9CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtwNyA9PT0gdGhpcy5wYWdlfQogICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iUGFnZSAke3A3fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAke3A3fQogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICBgKX0KICAgICAgPGJ1dHRvbgogICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuY2hhbmdlUGFnZSh0aGlzLnBhZ2UgKyAxKX0KICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLnBhZ2UgPj0gdGhpcy50b3RhbH0KICAgICAgICBhcmlhLWxhYmVsPSJOZXh0IHBhZ2UiCiAgICAgID4KICAgICAgICDigLoKICAgICAgPC9idXR0b24+CiAgICBgOwogICAgfQogICAgY2hhbmdlUGFnZShuZXdQYWdlKSB7CiAgICAgIGlmIChuZXdQYWdlIDwgMSB8fCBuZXdQYWdlID4gdGhpcy50b3RhbCB8fCBuZXdQYWdlID09PSB0aGlzLnBhZ2UpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5wYWdlID0gbmV3UGFnZTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicGFnZS1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IHBhZ2U6IHRoaXMucGFnZSB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODAodGhpcywgX3RvdGFsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNQYWdpbmF0aW9uMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtcHJvZ3Jlc3NiYXIvZGVlcy1wcm9ncmVzc2Jhci5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzUwID0gKCkgPT4gewogIHJldHVybiBiMmAKICAgIDxkZWVzLXByb2dyZXNzYmFyCiAgICAgIC5wZXJjZW50YWdlPSR7NTB9CiAgICA+PC9kZWVzLXByb2dyZXNzYmFyPgogIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtcHJvZ3Jlc3NiYXIvZGVlcy1wcm9ncmVzc2Jhci5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU4MCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzODEgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNQcm9ncmVzc2JhciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtcHJvZ3Jlc3NiYXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9wZXJjZW50YWdlX2RlY29yYXRvcnM7CiAgbGV0IF9wZXJjZW50YWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGVyY2VudGFnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUHJvZ3Jlc3NiYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfcGVyY2VudGFnZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBOdW1iZXIKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGU4MCh0aGlzLCBudWxsLCBfcGVyY2VudGFnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwZXJjZW50YWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwZXJjZW50YWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBlcmNlbnRhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnBlcmNlbnRhZ2UgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGVyY2VudGFnZV9pbml0aWFsaXplcnMsIF9wZXJjZW50YWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzUHJvZ3Jlc3NiYXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIFNUQVRJQwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzUwOwogICAgI3BlcmNlbnRhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzODEodGhpcywgX3BlcmNlbnRhZ2VfaW5pdGlhbGl6ZXJzLCAwKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgcGVyY2VudGFnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BlcmNlbnRhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwZXJjZW50YWdlKHZhbHVlMikgewogICAgICB0aGlzLiNwZXJjZW50YWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZShicmlnaHQudGV4dCwgZGFyay50ZXh0KX07CiAgICAgIH0KICAgICAgLnByb2dyZXNzQmFyQ29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgbWluLXdpZHRoOiAyMDBweDsKICAgICAgfQoKICAgICAgLnByb2dyZXNzQmFyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VlZWVlYiIsICIjNDQ0Iil9OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBib3JkZXItdG9wOiAwLjVweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgibm9uZSIsICIjNTU1Iil9OwogICAgICB9CgogICAgICAucHJvZ3Jlc3NCYXJGaWxsIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZShkYXJrLmJsdWVBY3RpdmUsIGJyaWdodC5ibHVlQWN0aXZlKX07CiAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgbWFyZ2luLXRvcDogLTAuNXB4OwogICAgICAgIHRyYW5zaXRpb246IDAuMnMgd2lkdGg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHdpZHRoOiAwcHg7CiAgICAgICAgYm9yZGVyLXRvcDogMC41IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJub25lIiwgIiMzOThmZmYiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzc1RleHQgewogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3NCYXJDb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzQmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzQmFyRmlsbCI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzc1RleHQiPgogICAgICAgICAgICAke3RoaXMucGVyY2VudGFnZX0lCiAgICAgICAgICA8ZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgIHRoaXMudXBkYXRlUGVyY2VudGFnZSgpOwogICAgICB9KTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZVBlcmNlbnRhZ2UoKSB7CiAgICAgIGNvbnN0IHByb2dyZXNzQmFyRmlsbCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIucHJvZ3Jlc3NCYXJGaWxsIik7CiAgICAgIHByb2dyZXNzQmFyRmlsbC5zdHlsZS53aWR0aCA9IGAke3RoaXMucGVyY2VudGFnZX0lYDsKICAgIH0KICAgIHVwZGF0ZWQoKSB7CiAgICAgIHRoaXMudXBkYXRlUGVyY2VudGFnZSgpOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODEodGhpcywgX3BlcmNlbnRhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1Byb2dyZXNzYmFyMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtc2VhcmNoYmFyL2RlZXMtc2VhcmNoYmFyLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNTEgPSAoKSA9PiB7CiAgY29uc3Qgb25DaGFuZ2VkID0gKGUxMSkgPT4gewogICAgY29uc3Qgd3JhcHBlciA9IGUxMS50YXJnZXQuY2xvc2VzdCgiLmRlbW9XcmFwcGVyIik7CiAgICBjb25zdCBlbCA9IHdyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoIiNjaGFuZ2VkIik7CiAgICBpZiAoZWwpCiAgICAgIGVsLnRleHRDb250ZW50ID0gYHNlYXJjaC1jaGFuZ2VkOiAke2UxMS5kZXRhaWwudmFsdWV9YDsKICB9OwogIGNvbnN0IG9uU3VibWl0ID0gKGUxMSkgPT4gewogICAgY29uc3Qgd3JhcHBlciA9IGUxMS50YXJnZXQuY2xvc2VzdCgiLmRlbW9XcmFwcGVyIik7CiAgICBjb25zdCBlbCA9IHdyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoIiNzdWJtaXR0ZWQiKTsKICAgIGlmIChlbCkKICAgICAgZWwudGV4dENvbnRlbnQgPSBgc2VhcmNoLXN1Ym1pdDogJHtlMTEuZGV0YWlsLnZhbHVlfWA7CiAgfTsKICByZXR1cm4gYjJgCiAgICA8c3R5bGU+CiAgICAgIC5kZW1vV3JhcHBlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIAogICAgICAgIGJhY2tncm91bmQ6ICM4ODg4ODg7CiAgICAgIH0KICAgICAgLmxvZ3MgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgd2lkdGg6IDYwMHB4OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIH0KICAgICAgLmxvZ3MgZGl2IHsKICAgICAgICBtYXJnaW46IDRweCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0iZGVtb1dyYXBwZXIiPgogICAgICA8ZGVlcy1zZWFyY2hiYXIKICAgICAgICBAc2VhcmNoLWNoYW5nZWQ9JHtvbkNoYW5nZWR9CiAgICAgICAgQHNlYXJjaC1zdWJtaXQ9JHtvblN1Ym1pdH0KICAgICAgPjwvZGVlcy1zZWFyY2hiYXI+CiAgICAgIDxkaXYgY2xhc3M9ImxvZ3MiPgogICAgICAgIDxkaXYgaWQ9ImNoYW5nZWQiPnNlYXJjaC1jaGFuZ2VkOjwvZGl2PgogICAgICAgIDxkaXYgaWQ9InN1Ym1pdHRlZCI+c2VhcmNoLXN1Ym1pdDo8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNlYXJjaGJhci9kZWVzLXNlYXJjaGJhci5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU4MSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzODIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNTZWFyY2hiYXIgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNlYXJjaGJhciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2ZpbHRlcnNfZGVjb3JhdG9yczsKICBsZXQgX2ZpbHRlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNTZWFyY2hiYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfZmlsdGVyc19kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfX2VzRGVjb3JhdGU4MSh0aGlzLCBudWxsLCBfZmlsdGVyc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJmaWx0ZXJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWx0ZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZpbHRlcnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmZpbHRlcnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsdGVyc19pbml0aWFsaXplcnMsIF9maWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU2VhcmNoYmFyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBERU1PCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNTE7CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICBmb250LWZhbWlseTogRGVlcyBTYW5zOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMwMDAwMDAiKX07CiAgICAgIH0KCiAgICAgIC5zZWFyY2hib3hDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDE1IiwgIiNmZmZmZmYxNSIpfTsKICAgICAgICAtLWJveEhlaWdodDogNjBweDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWJveEhlaWdodCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm94SGVpZ2h0KTsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDE0MHB4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMTUiLCAiI2ZmZmZmZjIwIil9OwogICAgICB9CgogICAgICBpbnB1dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZWVlZWViIil9OwogICAgICAgIHBhZGRpbmctbGVmdDogMjVweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IC04cHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5zZWFyY2hCdXR0b24gewogICAgICAgIC0tYnV0dG9uUGFkZGluZzogOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMwMDAwMDAiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNlZWVlZWIiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IGNhbGModmFyKC0tYm94SGVpZ2h0KSAtICh2YXIoLS1idXR0b25QYWRkaW5nKSAqIDIpKTsKICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3hIZWlnaHQpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA1MCU7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIAogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzLCBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1idXR0b25QYWRkaW5nKTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLnNlYXJjaEJ1dHRvbjpob3ZlciB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoYnJpZ2h0LmJsdWUsIGRhcmsuYmx1ZSl9OwogICAgICB9CgogICAgICAuc2VhcmNoQnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoYnJpZ2h0LmJsdWVBY3RpdmUsIGRhcmsuYmx1ZUFjdGl2ZSl9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICAgIH0KCiAgICAgIC5maWx0ZXJzIHsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgfQogICAgYAogICAgXTsKICAgICNmaWx0ZXJzX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczgyKHRoaXMsIF9maWx0ZXJzX2luaXRpYWxpemVycywgW10pOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBmaWx0ZXJzKCkgewogICAgICByZXR1cm4gdGhpcy4jZmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZpbHRlcnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2ZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHNlYXJjaElucHV0ID0gX19ydW5Jbml0aWFsaXplcnM4Mih0aGlzLCBfZmlsdGVyc19leHRyYUluaXRpYWxpemVycyk7CiAgICBzZWFyY2hCdXR0b247CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJzZWFyY2hib3hDb250YWluZXIiPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iWW91ciBTa2lsbHMgKGUuZy4gVHlwZVNjcmlwdCwgUnVzdCwgUHJvamVjdG1hbmFnZW1lbnQpIiAvPgogICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaEJ1dHRvbiI+U2VhcmNoIC0+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICAke3RoaXMuZmlsdGVycy5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0iZmlsdGVycyI+CiAgICAgICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iaHItc21hbGwiPkZpbHRlcnM8L2RlZXMtaGVhZGluZz4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93biAubGFiZWw9JHsibG9jYXRpb24ifT48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgIDwvZGl2PiAgCiAgICAgIGAgOiBiMmBgfQogICAgYDsKICAgIH0KICAgIC8qKgogICAgICogTGlmZWN5Y2xlOiBhZnRlciBmaXJzdCByZW5kZXIsIHdpcmUgdXAgZXZlbnRzIGZvciBpbnB1dCBhbmQgc3VibWl0IGFjdGlvbnMKICAgICAqLwogICAgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLnNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKCkgPT4gewogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlYXJjaC1jaGFuZ2VkIiwgewogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnNlYXJjaElucHV0LnZhbHVlIH0KICAgICAgICB9KSk7CiAgICAgIH0pOwogICAgICB0aGlzLnNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoU3VibWl0KCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5zZWFyY2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB0aGlzLl9kaXNwYXRjaFN1Ym1pdCgpKTsKICAgIH0KICAgIC8qKgogICAgICogRGlzcGF0Y2ggYSBzdWJtaXQgZXZlbnQgd2l0aCB0aGUgY3VycmVudCBzZWFyY2ggdmFsdWUKICAgICAqLwogICAgX2Rpc3BhdGNoU3VibWl0KCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWFyY2gtc3VibWl0IiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnNlYXJjaElucHV0LnZhbHVlIH0KICAgICAgfSkpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4MihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1NlYXJjaGJhcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNwZWVjaGJ1YmJsZS9kZWVzLXNwZWVjaGJ1YmJsZS5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzUyID0gKCkgPT4gewogIHJldHVybiBiMmAKICAgIDxzdHlsZT4KICAgICAgLnJlZjEgewogICAgICAgIG1hcmdpbjogMjBweDsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0icmVmMSI+PC9kaXY+CiAgICA8ZGVlcy1zcGVlY2hidWJibGUgLnRleHQ9JHtgCiAgICAgICoqVGhpcyBpcyBhIGxvbmdlciBtYXJrZG93biB0ZXh0IHRoYXQgIGNhbiBiZSB1c2VkIHRoZSB3cml0ZSoqICAKICAgICAgYSBsb25nZXIgZGVzY3JpcHRpb24gYWJvdXQgd2hhdHMgZ29pbmcgb24gdGhlIGFwcCAgCiAgCiAgICAgICoqVGhpcyBpcyBhIHN1YmhlYWRlcioqCiAgICAgIGFuZCBhbm90aGVyIHRleHQKICAgIAogICAgYH0+PC9kZWVzLXNwZWVjaGJ1YmJsZT4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNwZWVjaGJ1YmJsZS9kZWVzLXNwZWVjaGJ1YmJsZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU4MiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzODMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNTcGVlY2hidWJibGUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNwZWVjaGJ1YmJsZSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3JlZmZlZEVsZW1lbnRfZGVjb3JhdG9yczsKICBsZXQgX3JlZmZlZEVsZW1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZWZmZWRFbGVtZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXh0X2RlY29yYXRvcnM7CiAgbGV0IF90ZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfd2F2ZV9kZWNvcmF0b3JzOwogIGxldCBfd2F2ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dhdmVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21hbmlmZXN0ZWRfZGVjb3JhdG9yczsKICBsZXQgX21hbmlmZXN0ZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYW5pZmVzdGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdGF0dXNfZGVjb3JhdG9yczsKICBsZXQgX3N0YXR1c19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3N0YXR1c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzU3BlZWNoYnViYmxlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3JlZmZlZEVsZW1lbnRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogT2JqZWN0CiAgICAgIH0pXTsKICAgICAgX3RleHRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfd2F2ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuCiAgICAgIH0pXTsKICAgICAgX21hbmlmZXN0ZWRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9zdGF0dXNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlODIodGhpcywgbnVsbCwgX3JlZmZlZEVsZW1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicmVmZmVkRWxlbWVudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicmVmZmVkRWxlbWVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZWZmZWRFbGVtZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yZWZmZWRFbGVtZW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JlZmZlZEVsZW1lbnRfaW5pdGlhbGl6ZXJzLCBfcmVmZmVkRWxlbWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTgyKHRoaXMsIG51bGwsIF90ZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXh0X2luaXRpYWxpemVycywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Mih0aGlzLCBudWxsLCBfd2F2ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ3YXZlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ3YXZlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLndhdmUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLndhdmUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfd2F2ZV9pbml0aWFsaXplcnMsIF93YXZlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODIodGhpcywgbnVsbCwgX21hbmlmZXN0ZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFuaWZlc3RlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFuaWZlc3RlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYW5pZmVzdGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYW5pZmVzdGVkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21hbmlmZXN0ZWRfaW5pdGlhbGl6ZXJzLCBfbWFuaWZlc3RlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTgyKHRoaXMsIG51bGwsIF9zdGF0dXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RhdHVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzdGF0dXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3RhdHVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdGF0dXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3RhdHVzX2luaXRpYWxpemVycywgX3N0YXR1c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTgyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1NwZWVjaGJ1YmJsZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzUyOwogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdyhyZWZFbGVtZW50LCB0ZXh0QXJnKSB7CiAgICAgIGNvbnN0IHdpbmRvd0xheWVyID0gYXdhaXQgRGVlc1dpbmRvd0xheWVyLmNyZWF0ZUFuZFNob3coewogICAgICAgIGJsdXI6IGZhbHNlCiAgICAgIH0pOwogICAgICBjb25zdCBzcGVlY2hidWJibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWVzLXNwZWVjaGJ1YmJsZSIpOwogICAgICBzcGVlY2hidWJibGUud2luZG93TGF5ZXIgPSB3aW5kb3dMYXllcjsKICAgICAgc3BlZWNoYnViYmxlLnJlZmZlZEVsZW1lbnQgPSByZWZFbGVtZW50OwogICAgICBzcGVlY2hidWJibGUudGV4dCA9IHRleHRBcmc7CiAgICAgIHNwZWVjaGJ1YmJsZS5tYW5pZmVzdGVkID0gdHJ1ZTsKICAgICAgd2luZG93TGF5ZXIuYXBwZW5kQ2hpbGQoc3BlZWNoYnViYmxlKTsKICAgICAgd2luZG93TGF5ZXIuc3R5bGUucG9pbnRlckV2ZW50cyA9ICJub25lIjsKICAgICAgd2luZG93TGF5ZXIuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIud2luZG93T3ZlcmxheSIpLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAibm9uZSI7CiAgICAgIHJldHVybiBzcGVlY2hidWJibGU7CiAgICB9CiAgICAjcmVmZmVkRWxlbWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfcmVmZmVkRWxlbWVudF9pbml0aWFsaXplcnMsIHZvaWQgMCk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHJlZmZlZEVsZW1lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNyZWZmZWRFbGVtZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcmVmZmVkRWxlbWVudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcmVmZmVkRWxlbWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9yZWZmZWRFbGVtZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfdGV4dF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3dhdmVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF90ZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfd2F2ZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgd2F2ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3dhdmVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB3YXZlKHZhbHVlMikgewogICAgICB0aGlzLiN3YXZlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFuaWZlc3RlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODModGhpcywgX3dhdmVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9tYW5pZmVzdGVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBtYW5pZmVzdGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jbWFuaWZlc3RlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1hbmlmZXN0ZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21hbmlmZXN0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9tYW5pZmVzdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfc3RhdHVzX2luaXRpYWxpemVycywgIm5vcm1hbCIpKTsKICAgIGdldCBzdGF0dXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdGF0dXModmFsdWUyKSB7CiAgICAgIHRoaXMuI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgd2luZG93TGF5ZXIgPSBfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNmZmYiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yczsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMHB4KTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgICBtYXJnaW4tbGVmdDogMHB4OwogICAgICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMHB4IDBweCAycHggcmdiYSgwLCAwLCAwLCAwLjIpKTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICB9CgogICAgICAuYXJyb3cgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmYiLCAiIzMzMyIpfTsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgd2lkdGg6IDE1cHg7CiAgICAgICAgbGVmdDogMnB4OwogICAgICAgIHRvcDogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5zcGVlY2hidWJibGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmIiwgIiMzMzMiKX07CiAgICAgICAgcGFkZGluZzogMHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBtaW4td2lkdGg6IDI0MHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiA4cHg7CiAgICAgIH0KCiAgICAgIC53YXZlIHsKICAgICAgICBhbmltYXRpb24tbmFtZTogd2F2ZS1hbmltYXRpb247IC8qIFJlZmVycyB0byB0aGUgbmFtZSBvZiB5b3VyIEBrZXlmcmFtZXMgZWxlbWVudCBiZWxvdyAqLwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMi41czsgLyogQ2hhbmdlIHRvIHNwZWVkIHVwIG9yIHNsb3cgZG93biAqLwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOyAvKiBOZXZlciBzdG9wIHdhdmluZyA6KSAqLwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDcwJSA3MCU7IC8qIFBpdm90IGFyb3VuZCB0aGUgYm90dG9tLWxlZnQgcGFsbSAqLwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyB3YXZlLWFuaW1hdGlvbiB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfQogICAgICAgIDEwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNGRlZyk7CiAgICAgICAgfSAvKiBUaGUgZm9sbG93aW5nIGZpdmUgdmFsdWVzIGNhbiBiZSBwbGF5ZWQgd2l0aCB0byBtYWtlIHRoZSB3YXZpbmcgbW9yZSBvciBsZXNzIGV4dHJlbWUgKi8KICAgICAgICAyMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLThkZWcpOwogICAgICAgIH0KICAgICAgICAzMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTRkZWcpOwogICAgICAgIH0KICAgICAgICA0MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTRkZWcpOwogICAgICAgIH0KICAgICAgICA1MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTBkZWcpOwogICAgICAgIH0KICAgICAgICA2MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfSAvKiBSZXNldCBmb3IgdGhlIGxhc3QgaGFsZiB0byBwYXVzZSAqLwogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfQogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgICR7dGhpcy5tYW5pZmVzdGVkID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiIEBjbGljaz0ke3RoaXMuaGFuZGxlQ2xpY2t9PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGVlY2hidWJibGUiPgogICAgICAgICAgICAgICAgJHt0aGlzLndhdmUgPyBiMmA8c3BhbiBjbGFzcz0id2F2ZSI+8J+Rizwvc3Bhbj5gIDogYjJgYH0KICAgICAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlc29sdmUodGhpcy5nZXRIdG1sKCkpfQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiBiMmBgfQogICAgYDsKICAgIH0KICAgIGFzeW5jIGhhbmRsZUNsaWNrKCkgewogICAgICBjb25zb2xlLmxvZygic3BlZWNoYnViYmxlIGdvdCBjbGlja2VkLiIpOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBpZiAoIXRoaXMucmVmZmVkRWxlbWVudCkgewogICAgICAgIHRoaXMucmVmZmVkRWxlbWVudCA9IHRoaXMucHJldmlvdXNFbGVtZW50U2libGluZzsKICAgICAgfQogICAgICBpZiAodGhpcy5tYW5pZmVzdGVkKSB7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVQb3NpdGlvbigpOwogICAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmNvbnRhaW5lciIpLnN0eWxlLm9wYWNpdHkgPSAiMSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGV0IHNwZWVjaGJ1YmJsZTsKICAgICAgICB0aGlzLnJlZmZlZEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsIGFzeW5jICgpID0+IHsKICAgICAgICAgIHNwZWVjaGJ1YmJsZSA9IGF3YWl0IERlZXNTcGVlY2hidWJibGUyLmNyZWF0ZUFuZFNob3codGhpcy5yZWZmZWRFbGVtZW50LCB0aGlzLnRleHQpOwogICAgICAgIH0pOwogICAgICAgIHRoaXMucmVmZmVkRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIiwgKCkgPT4gewogICAgICAgICAgc3BlZWNoYnViYmxlLmRlc3Ryb3koKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgYXN5bmMgdXBkYXRlUG9zaXRpb24oKSB7CiAgICAgIGNvbnN0IHJlZkVsZW1lbnQgPSB0aGlzLnJlZmZlZEVsZW1lbnQ7CiAgICAgIGNvbnN0IGJvdW5kaW5nQ2xpZW50UmVjdCA9IHJlZkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIHRoaXMuc3R5bGUucG9zaXRpb24gPSAiZml4ZWQiOwogICAgICB0aGlzLnN0eWxlLnRvcCA9IGAke2JvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSAxM31weGA7CiAgICAgIHRoaXMuc3R5bGUubGVmdCA9IGAke2JvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0ICsgcmVmRWxlbWVudC5jbGllbnRXaWR0aCArIDR9cHhgOwogICAgICBpZiAoYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ID4gMjUwKSB7CiAgICAgICAgdGhpcy5zdHlsZS53aWR0aCA9IGAyNTBweGA7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGdldEh0bWwoKSB7CiAgICAgIGlmICghdGhpcy50ZXh0KSB7CiAgICAgICAgcmV0dXJuICIiOwogICAgICB9CiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0c3RyaW5nLm5vcm1hbGl6ZS5zdGFuZGFyZCh0aGlzLnRleHQpOwogICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0bWFya2Rvd24uU21hcnRNYXJrZG93bi5lYXN5TWFya2Rvd25Ub0h0bWwobm9ybWFsaXplZCk7CiAgICAgIHJldHVybiBvOChyZXN1bHQpOwogICAgfQogICAgYXN5bmMgc2hvdygpIHsKICAgIH0KICAgIGFzeW5jIGRlc3Ryb3koKSB7CiAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmNvbnRhaW5lciIpLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgIHRoaXMud2luZG93TGF5ZXIuZGVzdHJveSgpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4MyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1NwZWVjaGJ1YmJsZTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNwaW5uZXIvZGVlcy1zcGlubmVyLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTgzID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM4NCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1NwaW5uZXIgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNwaW5uZXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9zaXplX2RlY29yYXRvcnM7CiAgbGV0IF9zaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYm53X2RlY29yYXRvcnM7CiAgbGV0IF9ibndfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ibndfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3N0YXR1c19kZWNvcmF0b3JzOwogIGxldCBfc3RhdHVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNTcGlubmVyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3NpemVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogTnVtYmVyCiAgICAgIH0pXTsKICAgICAgX2Jud19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfc3RhdHVzX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTgzKHRoaXMsIG51bGwsIF9zaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaXplX2luaXRpYWxpemVycywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Myh0aGlzLCBudWxsLCBfYm53X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJudyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYm53IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJudywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYm53ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Jud19pbml0aWFsaXplcnMsIF9ibndfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Myh0aGlzLCBudWxsLCBfc3RhdHVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RhdHVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXR1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc3RhdHVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0YXR1c19pbml0aWFsaXplcnMsIF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4MyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNTcGlubmVyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYAogICAgPGRlZXMtc3Bpbm5lcj48L2RlZXMtc3Bpbm5lcj4KICAgIDxkZWVzLXNwaW5uZXIgc3RhdHVzPSJzdWNjZXNzIj48L2RlZXMtc3Bpbm5lcj4KICAgIDxkZWVzLXNwaW5uZXIgc3RhdHVzPSJlcnJvciI+PC9kZWVzLXNwaW5uZXI+CiAgICA8ZGVlcy1zcGlubmVyIHNpemU9JHs2NH0gc3RhdHVzPSJzdWNjZXNzIj48L2RlZXMtc3Bpbm5lcj4KICAgIDxkZWVzLXNwaW5uZXIgLnNpemU9JHs2NH0gc3RhdHVzPSJlcnJvciI+PC9kZWVzLXNwaW5uZXI+CiAgYDsKICAgICNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczg0KHRoaXMsIF9zaXplX2luaXRpYWxpemVycywgMjApOwogICAgZ2V0IHNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2l6ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Jud19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODQodGhpcywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczg0KHRoaXMsIF9ibndfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGJudygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Jud19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGJudyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYm53X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4NCh0aGlzLCBfYm53X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4NCh0aGlzLCBfc3RhdHVzX2luaXRpYWxpemVycywgIm5vcm1hbCIpKTsKICAgIGdldCBzdGF0dXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdGF0dXModmFsdWUyKSB7CiAgICAgIHRoaXMuI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODQodGhpcywgX3N0YXR1c19leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAjbG9hZGluZyB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYmFja2dyb3VuZDogIzhiYzM0YTAwOwogICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMyIsICIjZmZmIil9OwogICAgICAgIGFuaW1hdGlvbjogc3BpbiAxcyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogc3BpbiAxcyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgI2xvYWRpbmcuc3VjY2VzcyB7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IG5vbmU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgICNsb2FkaW5nLmVycm9yIHsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGFuaW1hdGlvbjogbm9uZTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogbm9uZTsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICB0byB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBzcGluIHsKICAgICAgICB0byB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgfQogICAgICB9CgogICAgICBkZWVzLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgICNsb2FkaW5nIHsKICAgICAgICAgIHdpZHRoOiAke3RoaXMuc2l6ZX1weDsKICAgICAgICAgIGhlaWdodDogJHt0aGlzLnNpemV9cHg7CiAgICAgICAgfQogICAgICAgICNsb2FkaW5nLnN1Y2Nlc3MgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKHRoaXMuYm53ID8gIiMzMzMiIDogYCM4YmMzNGFgLCB0aGlzLmJudyA/ICIjZmZmIiA6IGAjOGJjMzRhYCl9OwogICAgICAgICAgCiAgICAgICAgfQogICAgICAgICNsb2FkaW5nLmVycm9yIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSh0aGlzLmJudyA/ICIjMzMzIiA6IGAjZTY0YTE5YCwgdGhpcy5ibncgPyAiI2ZmZiIgOiBgI2U2NGExOWApfTsKICAgICAgICB9CiAgICAgICAgZGVlcy1pY29uIHsKICAgICAgICAgIGZvbnQtc2l6ZTogJHt0aGlzLnNpemV9cHg7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSIke3RoaXMuc3RhdHVzfSIgaWQ9ImxvYWRpbmciPgogICAgICAgICR7KCgpID0+IHsKICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09ICJzdWNjZXNzIikgewogICAgICAgICAgcmV0dXJuIGIyYDxkZWVzLWljb24gc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlWCgxJSkgdHJhbnNsYXRlWSgzJSk7IiAuaWNvbj0keyJmYTpjaXJjbGUtY2hlY2sifT48L2RlZXMtaWNvbj5gOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0dXMgPT09ICJlcnJvciIpIHsKICAgICAgICAgIHJldHVybiBiMmA8ZGVlcy1pY29uIC5pY29uPSR7ImZhOmNpcmNsZS14bWFyayJ9PjwvZGVlcy1pY29uPmA7CiAgICAgICAgfQogICAgICB9KSgpfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczg0KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU3Bpbm5lcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXN0ZXBwZXIvZGVlcy1zdGVwcGVyLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHN0ZXBwZXJEZW1vID0gKCkgPT4gYjJgCiAgPGRlZXMtc3RlcHBlcgogICAgLnN0ZXBzPSR7WwogIHsKICAgIHRpdGxlOiAiQWNjb3VudCBTZXR1cCIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJlbWFpbCIgbGFiZWw9IldvcmsgRW1haWwiIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0icGFzc3dvcmQiIGxhYmVsPSJDcmVhdGUgUGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLAogICAgdmFsaWRhdGlvbkZ1bmM6IGFzeW5jIChzdGVwcGVyQXJnLCBlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRlZXNGb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgZGVlc0Zvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoKSA9PiBzdGVwcGVyQXJnLmdvTmV4dCgpLCB7IG9uY2U6IHRydWUgfSk7CiAgICB9CiAgfSwKICB7CiAgICB0aXRsZTogIlByb2ZpbGUgRGV0YWlscyIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJmaXJzdE5hbWUiIGxhYmVsPSJGaXJzdCBOYW1lIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9Imxhc3ROYW1lIiBsYWJlbD0iTGFzdCBOYW1lIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLAogICAgdmFsaWRhdGlvbkZ1bmM6IGFzeW5jIChzdGVwcGVyQXJnLCBlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRlZXNGb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgZGVlc0Zvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoKSA9PiBzdGVwcGVyQXJnLmdvTmV4dCgpLCB7IG9uY2U6IHRydWUgfSk7CiAgICB9CiAgfSwKICB7CiAgICB0aXRsZTogIkNvbnRhY3QgSW5mb3JtYXRpb24iLAogICAgY29udGVudDogYjJgCiAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSBrZXk9InBob25lIiBsYWJlbD0iTW9iaWxlIE51bWJlciIgcmVxdWlyZWQ+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0iY29tcGFueSIgbGFiZWw9IkNvbXBhbnkiPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5Db250aW51ZTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIGAsCiAgICB2YWxpZGF0aW9uRnVuYzogYXN5bmMgKHN0ZXBwZXJBcmcsIGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgZGVlc0Zvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBkZWVzRm9ybS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsICgpID0+IHN0ZXBwZXJBcmcuZ29OZXh0KCksIHsgb25jZTogdHJ1ZSB9KTsKICAgIH0KICB9LAogIHsKICAgIHRpdGxlOiAiVGVhbSBTaXplIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgICBrZXk9InRlYW1TaXplIgogICAgICAgICAgICAgIGxhYmVsPSJIb3cgYmlnIGlzIHlvdXIgdGVhbT8iCiAgICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgbGFiZWw6ICIxLTUiLCB2YWx1ZTogIjEtNSIgfSwKICAgICAgeyBsYWJlbDogIjYtMjAiLCB2YWx1ZTogIjYtMjAiIH0sCiAgICAgIHsgbGFiZWw6ICIyMS01MCIsIHZhbHVlOiAiMjEtNTAiIH0sCiAgICAgIHsgbGFiZWw6ICI1MSsiLCB2YWx1ZTogIjUxKyIgfQogICAgXX0KICAgICAgICAgICAgICByZXF1aXJlZAogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5Db250aW51ZTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIGAsCiAgICB2YWxpZGF0aW9uRnVuYzogYXN5bmMgKHN0ZXBwZXJBcmcsIGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgZGVlc0Zvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBkZWVzRm9ybS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsICgpID0+IHN0ZXBwZXJBcmcuZ29OZXh0KCksIHsgb25jZTogdHJ1ZSB9KTsKICAgIH0KICB9LAogIHsKICAgIHRpdGxlOiAiR29hbHMiLAogICAgY29udGVudDogYjJgCiAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAgIGtleT0iZ29hbCIKICAgICAgICAgICAgICBsYWJlbD0iTWFpbiBvYmplY3RpdmUiCiAgICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgbGFiZWw6ICJPbmJvYXJkaW5nIiwgdmFsdWU6ICJvbmJvYXJkaW5nIiB9LAogICAgICB7IGxhYmVsOiAiQW5hbHl0aWNzIiwgdmFsdWU6ICJhbmFseXRpY3MiIH0sCiAgICAgIHsgbGFiZWw6ICJBdXRvbWF0aW9uIiwgdmFsdWU6ICJhdXRvbWF0aW9uIiB9CiAgICBdfQogICAgICAgICAgICAgIHJlcXVpcmVkCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PkNvbnRpbnVlPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgYCwKICAgIHZhbGlkYXRpb25GdW5jOiBhc3luYyAoc3RlcHBlckFyZywgZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCBkZWVzRm9ybSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIik7CiAgICAgIGRlZXNGb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgKCkgPT4gc3RlcHBlckFyZy5nb05leHQoKSwgeyBvbmNlOiB0cnVlIH0pOwogICAgfQogIH0sCiAgewogICAgdGl0bGU6ICJCcmFuZCBQcmVmZXJlbmNlcyIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJicmFuZENvbG9yIiBsYWJlbD0iUHJpbWFyeSBicmFuZCBjb2xvciI+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJ0b25lIiBsYWJlbD0iUHJlZmVycmVkIHRvbmUgKGUuZy4gZnJpZW5kbHksIGZvcm1hbCkiPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5Db250aW51ZTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIGAsCiAgICB2YWxpZGF0aW9uRnVuYzogYXN5bmMgKHN0ZXBwZXJBcmcsIGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgZGVlc0Zvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBkZWVzRm9ybS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsICgpID0+IHN0ZXBwZXJBcmcuZ29OZXh0KCksIHsgb25jZTogdHJ1ZSB9KTsKICAgIH0KICB9LAogIHsKICAgIHRpdGxlOiAiSW50ZWdyYXRpb25zIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAgIGtleT0iaW50ZWdyYXRpb25zIgogICAgICAgICAgICAgIGxhYmVsPSJJbnRlZ3JhdGlvbnMgaW4gdXNlIgogICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJBZGQgaW50ZWdyYXRpb24iCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLAogICAgdmFsaWRhdGlvbkZ1bmM6IGFzeW5jIChzdGVwcGVyQXJnLCBlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRlZXNGb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgZGVlc0Zvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoKSA9PiBzdGVwcGVyQXJnLmdvTmV4dCgpLCB7IG9uY2U6IHRydWUgfSk7CiAgICB9CiAgfSwKICB7CiAgICB0aXRsZTogIlJldmlldyAmIExhdW5jaCIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLXBhbmVsPgogICAgICAgICAgICA8cD5BbG1vc3QgdGhlcmUhIFJldmlldyB5b3VyIHNlbGVjdGlvbnMgYW5kIGxhdW5jaCB3aGVuZXZlciB5b3UncmUgcmVhZHkuPC9wPgogICAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIGAKICB9Cl19CiAgPjwvZGVlcy1zdGVwcGVyPgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXN0ZXBwZXIvZGVlcy1zdGVwcGVyLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTg0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM4NSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1N0ZXBwZXIgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXN0ZXBwZXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9zdGVwc19kZWNvcmF0b3JzOwogIGxldCBfc3RlcHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdGVwc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRTdGVwX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZFN0ZXBfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFN0ZXBfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1N0ZXBwZXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfc3RlcHNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQXJyYXkKICAgICAgfSldOwogICAgICBfc2VsZWN0ZWRTdGVwX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IE9iamVjdAogICAgICB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTg0KHRoaXMsIG51bGwsIF9zdGVwc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzdGVwcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RlcHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3RlcHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnN0ZXBzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0ZXBzX2luaXRpYWxpemVycywgX3N0ZXBzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODQodGhpcywgbnVsbCwgX3NlbGVjdGVkU3RlcF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFN0ZXAiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkU3RlcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZFN0ZXAsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkU3RlcCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZFN0ZXBfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRTdGVwX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU3RlcHBlcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBzdGVwcGVyRGVtbzsKICAgICNzdGVwc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4NSh0aGlzLCBfc3RlcHNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICBnZXQgc3RlcHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdGVwc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHN0ZXBzKHZhbHVlMikgewogICAgICB0aGlzLiNzdGVwc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkU3RlcF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODUodGhpcywgX3N0ZXBzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4NSh0aGlzLCBfc2VsZWN0ZWRTdGVwX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgc2VsZWN0ZWRTdGVwKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRTdGVwX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VsZWN0ZWRTdGVwKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZFN0ZXBfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5zdGVwcGVyQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5zdGVwIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC43cyBjdWJpYy1iZXppZXIoMC44NywgMCwgMC4xMywgMSksIGJveC1zaGFkb3cgMC43cyBjdWJpYy1iZXppZXIoMC44NywgMCwgMC4xMywgMSksIGZpbHRlciAwLjdzIGN1YmljLWJlemllcigwLjg3LCAwLCAwLjEzLCAxKSwgYm9yZGVyIDAuN3MgY3ViaWMtYmV6aWVyKDAuODcsIDAsIDAuMTMsIDEpOwogICAgICAgIG1heC13aWR0aDogNTAwcHg7CiAgICAgICAgbWluLWhlaWdodDogMzAwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMGYwZjExIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTJlOGYwIiwgIiMyNzI3MjkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGYxNzJhIiwgIiNmNWY1ZjUiKX07CiAgICAgICAgbWFyZ2luOiBhdXRvOwogICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgICAgZmlsdGVyOiBvcGFjaXR5KDAuNTUpIHNhdHVyYXRlKDAuODUpOwogICAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDMycHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAuc3RlcC5zZWxlY3RlZCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDsKICAgICAgICBmaWx0ZXI6IG9wYWNpdHkoMSkgc2F0dXJhdGUoMSk7CiAgICAgICAgdXNlci1zZWxlY3Q6IGF1dG87CiAgICAgIH0KCiAgICAgIC5zdGVwLmhpZGRlblN0ZXAgewogICAgICAgIGZpbHRlcjogb3BhY2l0eSgwKTsKICAgICAgfQoKICAgICAgLnN0ZXAuZW50cmFuY2UgewogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjM1cyBlYXNlLCBib3gtc2hhZG93IDAuMzVzIGVhc2UsIGZpbHRlciAwLjM1cyBlYXNlLCBib3JkZXIgMC4zNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnN0ZXAuZW50cmFuY2UuaGlkZGVuU3RlcCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDE2cHgpOwogICAgICB9CgogICAgICAuc3RlcDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMDB2aDsKICAgICAgfQoKICAgICAgLnN0ZXAgLnN0ZXBDb3VudGVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2NDc0OGIiLCAiI2ExYTFhYSIpfTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMnB4OwogICAgICAgIHJpZ2h0OiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMjYsIDIzMiwgMjQwLCAwLjUpIiwgInJnYmEoNjMsIDYzLCA3MCwgMC40NSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjI2LCAyMzIsIDI0MCwgMC43KSIsICJyZ2JhKDYzLCA2MywgNzAsIDAuNikiKX07CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2sgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgbGVmdDogMTJweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIyNiwgMjMyLCAyNDAsIDAuOSkiLCAicmdiYSg2MywgNjMsIDcwLCAwLjg1KSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpIiwgInJnYmEoMzksIDM5LCA0MiwgMC44NSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNDc1NTY5IiwgIiNkNGQ0ZDgiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGJvcmRlciAwLjJzIGVhc2UsIGNvbG9yIDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjJzIGVhc2UsIHRyYW5zZm9ybSAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2s6aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzBmMTcyYSIsICIjZmFmYWZhIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoZGFyay5ibHVlLCBkYXJrLmJsdWUpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMjYsIDIzMiwgMjQwLCAwLjk1KSIsICJyZ2JhKDYzLCA2MywgNzAsIDAuNykiKX07CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0ycHgpOwogICAgICB9CgogICAgICAuc3RlcCAuZ29CYWNrOmFjdGl2ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGYxNzJhIiwgIiNmYWZhZmEiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZShkYXJrLmJsdWVBY3RpdmUsIGRhcmsuYmx1ZUFjdGl2ZSl9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIyNiwgMjMyLCAyNDAsIDAuODUpIiwgInJnYmEoNjMsIDYzLCA3MCwgMC42KSIpfTsKICAgICAgfQoKICAgICAgLnN0ZXAgLmdvQmFjayBzcGFuIHsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLnN0ZXAgLmdvQmFjazpob3ZlciBzcGFuIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTJweCk7CiAgICAgIH0KCiAgICAgIC5zdGVwIC50aXRsZSB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmctdG9wOiA2NHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgIH0KCiAgICAgIC5zdGVwIC5jb250ZW50IHsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InN0ZXBwZXJDb250YWluZXIiPgogICAgICAgICR7dGhpcy5zdGVwcy5tYXAoKHN0ZXBBcmcpID0+IGIyYDxkaXYKICAgICAgICAgICAgICBjbGFzcz0ic3RlcCAke3N0ZXBBcmcgPT09IHRoaXMuc2VsZWN0ZWRTdGVwID8gInNlbGVjdGVkIiA6IG51bGx9ICR7dGhpcy5nZXRJbmRleE9mU3RlcChzdGVwQXJnKSA+IHRoaXMuZ2V0SW5kZXhPZlN0ZXAodGhpcy5zZWxlY3RlZFN0ZXApID8gImhpZGRlblN0ZXAiIDogIiJ9ICR7dGhpcy5nZXRJbmRleE9mU3RlcChzdGVwQXJnKSA9PT0gMCA/ICJlbnRyYW5jZSIgOiAiIn0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICAke3RoaXMuZ2V0SW5kZXhPZlN0ZXAoc3RlcEFyZykgPiAwID8gYjJgPGRpdiBjbGFzcz0iZ29CYWNrIiBAY2xpY2s9JHt0aGlzLmdvQmFja30+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBJbnRlciI+PC08L3NwYW4+IGdvIHRvIHByZXZpb3VzIHN0ZXA8L2Rpdj5gIDogYGB9CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcENvdW50ZXIiPgogICAgICAgICAgICAgICAgU3RlcCAke3RoaXMuc3RlcHMuZmluZEluZGV4KChlbGVtZW50QXJnKSA9PiBlbGVtZW50QXJnID09PSBzdGVwQXJnKSArIDF9IG9mCiAgICAgICAgICAgICAgICAke3RoaXMuc3RlcHMubGVuZ3RofQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj4ke3N0ZXBBcmcudGl0bGV9PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+JHtzdGVwQXJnLmNvbnRlbnR9PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PiBgKX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgZ2V0SW5kZXhPZlN0ZXAgPSAoX19ydW5Jbml0aWFsaXplcnM4NSh0aGlzLCBfc2VsZWN0ZWRTdGVwX2V4dHJhSW5pdGlhbGl6ZXJzKSwgKHN0ZXBBcmcpID0+IHsKICAgICAgcmV0dXJuIHRoaXMuc3RlcHMuZmluZEluZGV4KChzdGVwQXJnMikgPT4gc3RlcEFyZyA9PT0gc3RlcEFyZzIpOwogICAgfSk7CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBhd2FpdCB0aGlzLmRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwID0gdGhpcy5zdGVwc1swXTsKICAgICAgdGhpcy5zZXRTY3JvbGxTdGF0dXMoKTsKICAgICAgYXdhaXQgdGhpcy5kb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDM1MCk7CiAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc3RlcC5lbnRyYW5jZSIpPy5jbGFzc0xpc3QucmVtb3ZlKCJlbnRyYW5jZSIpOwogICAgfQogICAgYXN5bmMgdXBkYXRlZCgpIHsKICAgICAgdGhpcy5zZXRTY3JvbGxTdGF0dXMoKTsKICAgIH0KICAgIHNjcm9sbGVyOwogICAgYXN5bmMgc2V0U2Nyb2xsU3RhdHVzKCkgewogICAgICBjb25zdCBzdGVwcGVyQ29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zdGVwcGVyQ29udGFpbmVyIik7CiAgICAgIGNvbnN0IGZpcnN0U3RlcEVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnN0ZXAiKTsKICAgICAgY29uc3Qgc2VsZWN0ZWRTdGVwRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VsZWN0ZWQiKTsKICAgICAgaWYgKCFzZWxlY3RlZFN0ZXBFbGVtZW50KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghc3RlcHBlckNvbnRhaW5lci5zdHlsZS5wYWRkaW5nVG9wKSB7CiAgICAgICAgc3RlcHBlckNvbnRhaW5lci5zdHlsZS5wYWRkaW5nVG9wID0gYCR7c3RlcHBlckNvbnRhaW5lci5vZmZzZXRIZWlnaHQgLyAyIC0gc2VsZWN0ZWRTdGVwRWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyfXB4YDsKICAgICAgfQogICAgICBjb25zb2xlLmxvZygiU2V0dGluZyBzY3JvbGwgc3RhdHVzIik7CiAgICAgIGNvbnNvbGUubG9nKHNlbGVjdGVkU3RlcEVsZW1lbnQpOwogICAgICBjb25zdCBzY3JvbGxQb3NpdGlvbiA9IHNlbGVjdGVkU3RlcEVsZW1lbnQub2Zmc2V0VG9wIC0gc3RlcHBlckNvbnRhaW5lci5vZmZzZXRIZWlnaHQgLyAyICsgc2VsZWN0ZWRTdGVwRWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOwogICAgICBjb25zb2xlLmxvZyhzY3JvbGxQb3NpdGlvbik7CiAgICAgIGNvbnN0IGRvbXRvb2xzSW5zdGFuY2UgPSBhd2FpdCBEb21Ub29scy5zZXR1cERvbVRvb2xzKCk7CiAgICAgIGlmICghdGhpcy5zY3JvbGxlcikgewogICAgICAgIHRoaXMuc2Nyb2xsZXIgPSBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLlN3ZWV0U2Nyb2xsKHsKICAgICAgICAgIHZlcnRpY2FsOiB0cnVlLAogICAgICAgICAgaG9yaXpvbnRhbDogZmFsc2UsCiAgICAgICAgICBlYXNpbmc6ICJlYXNlSW5PdXRFeHBvIiwKICAgICAgICAgIGR1cmF0aW9uOiA3MDAKICAgICAgICB9LCBzdGVwcGVyQ29udGFpbmVyKTsKICAgICAgfQogICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkICYmIHRoaXMuc2VsZWN0ZWRTdGVwLnZhbGlkYXRpb25GdW5jKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZFN0ZXAuYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkID0gdHJ1ZTsKICAgICAgICBhd2FpdCB0aGlzLnNlbGVjdGVkU3RlcC52YWxpZGF0aW9uRnVuYyh0aGlzLCBzZWxlY3RlZFN0ZXBFbGVtZW50LCB0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXIuc2lnbmFsKTsKICAgICAgfQogICAgICB0aGlzLnNjcm9sbGVyLnRvKHNjcm9sbFBvc2l0aW9uKTsKICAgIH0KICAgIGFzeW5jIGdvQmFjaygpIHsKICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5zdGVwcy5maW5kSW5kZXgoKHN0ZXBBcmcpID0+IHN0ZXBBcmcgPT09IHRoaXMuc2VsZWN0ZWRTdGVwKTsKICAgICAgaWYgKGN1cnJlbnRJbmRleCA8PSAwKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXIpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgfQogICAgICBjb25zdCBjdXJyZW50U3RlcCA9IHRoaXMuc3RlcHNbY3VycmVudEluZGV4XTsKICAgICAgY3VycmVudFN0ZXAudmFsaWRhdGlvbkZ1bmNDYWxsZWQgPSBmYWxzZTsKICAgICAgY29uc3QgcHJldmlvdXNTdGVwID0gdGhpcy5zdGVwc1tjdXJyZW50SW5kZXggLSAxXTsKICAgICAgcHJldmlvdXNTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkID0gZmFsc2U7CiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwID0gcHJldmlvdXNTdGVwOwogICAgICBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgYXdhaXQgdGhpcy5kb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDEwMCk7CiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwLm9uUmV0dXJuVG9TdGVwRnVuYz8uKHRoaXMsIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VsZWN0ZWQiKSk7CiAgICB9CiAgICBnb05leHQoKSB7CiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuc3RlcHMuZmluZEluZGV4KChzdGVwQXJnKSA9PiBzdGVwQXJnID09PSB0aGlzLnNlbGVjdGVkU3RlcCk7CiAgICAgIGlmIChjdXJyZW50SW5kZXggPCAwIHx8IGN1cnJlbnRJbmRleCA+PSB0aGlzLnN0ZXBzLmxlbmd0aCAtIDEpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTdGVwLmFib3J0Q29udHJvbGxlcikgewogICAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwLmFib3J0Q29udHJvbGxlci5hYm9ydCgpOwogICAgICB9CiAgICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gdGhpcy5zdGVwc1tjdXJyZW50SW5kZXhdOwogICAgICBjdXJyZW50U3RlcC52YWxpZGF0aW9uRnVuY0NhbGxlZCA9IGZhbHNlOwogICAgICBjb25zdCBuZXh0U3RlcCA9IHRoaXMuc3RlcHNbY3VycmVudEluZGV4ICsgMV07CiAgICAgIG5leHRTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkID0gZmFsc2U7CiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwID0gbmV4dFN0ZXA7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczg1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU3RlcHBlcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRvYXN0L2RlZXMtdG9hc3QuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM1MyA9ICgpID0+IGIyYAogICAgPHN0eWxlPgogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIHBhZGRpbmc6IDMycHg7CiAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOGY5ZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgfQoKICAgICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNDhweDsKICAgICAgfQoKICAgICAgLmRlbW8tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNmZmYiKX07CiAgICAgIH0KCiAgICAgIC5kZW1vLWRlc2NyaXB0aW9uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiNhYWEiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjAwcHgsIDFmcikpOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAzMnB4OwogICAgICB9CgogICAgICAudGhlbWUtdG9nZ2xlIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAxNnB4OwogICAgICAgIHJpZ2h0OiAxNnB4OwogICAgICAgIHotaW5kZXg6IDEwMDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLWJ1dHRvbiBjbGFzcz0idGhlbWUtdG9nZ2xlIiBAY2xpY2tlZD0keygpID0+IHsKICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoImJyaWdodCIpOwp9fT5Ub2dnbGUgVGhlbWU8L2RlZXMtYnV0dG9uPgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlRvYXN0IFR5cGVzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBEaWZmZXJlbnQgdG9hc3QgdHlwZXMgZm9yIHZhcmlvdXMgbm90aWZpY2F0aW9uIHNjZW5hcmlvcy4gQ2xpY2sgYW55IGJ1dHRvbiB0byBzaG93IGEgdG9hc3QuCiAgICAgICAgPC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3QuaW5mbygiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UiKTsKfX0+SW5mbyBUb2FzdDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJoaWdobGlnaHRlZCIgQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnN1Y2Nlc3MoIk9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ISIpOwp9fT5TdWNjZXNzIFRvYXN0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC53YXJuaW5nKCJQbGVhc2UgcmV2aWV3IGJlZm9yZSBwcm9jZWVkaW5nIik7Cn19Pldhcm5pbmcgVG9hc3Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LmVycm9yKCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIik7Cn19PkVycm9yIFRvYXN0PC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VG9hc3QgUG9zaXRpb25zPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBUb2FzdHMgY2FuIGFwcGVhciBpbiBkaWZmZXJlbnQgcG9zaXRpb25zIG9uIHRoZSBzY3JlZW4uCiAgICAgICAgPC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiVG9wIFJpZ2h0IFBvc2l0aW9uIiwKICAgIHR5cGU6ICJpbmZvIiwKICAgIHBvc2l0aW9uOiAidG9wLXJpZ2h0IgogIH0pOwp9fT5Ub3AgUmlnaHQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnNob3coewogICAgbWVzc2FnZTogIlRvcCBMZWZ0IFBvc2l0aW9uIiwKICAgIHR5cGU6ICJpbmZvIiwKICAgIHBvc2l0aW9uOiAidG9wLWxlZnQiCiAgfSk7Cn19PlRvcCBMZWZ0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5zaG93KHsKICAgIG1lc3NhZ2U6ICJCb3R0b20gUmlnaHQgUG9zaXRpb24iLAogICAgdHlwZTogImluZm8iLAogICAgcG9zaXRpb246ICJib3R0b20tcmlnaHQiCiAgfSk7Cn19PkJvdHRvbSBSaWdodDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiQm90dG9tIExlZnQgUG9zaXRpb24iLAogICAgdHlwZTogImluZm8iLAogICAgcG9zaXRpb246ICJib3R0b20tbGVmdCIKICB9KTsKfX0+Qm90dG9tIExlZnQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnNob3coewogICAgbWVzc2FnZTogIlRvcCBDZW50ZXIgUG9zaXRpb24iLAogICAgdHlwZTogImluZm8iLAogICAgcG9zaXRpb246ICJ0b3AtY2VudGVyIgogIH0pOwp9fT5Ub3AgQ2VudGVyPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5zaG93KHsKICAgIG1lc3NhZ2U6ICJCb3R0b20gQ2VudGVyIFBvc2l0aW9uIiwKICAgIHR5cGU6ICJpbmZvIiwKICAgIHBvc2l0aW9uOiAiYm90dG9tLWNlbnRlciIKICB9KTsKfX0+Qm90dG9tIENlbnRlcjwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkR1cmF0aW9uIE9wdGlvbnM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENvbnRyb2wgaG93IGxvbmcgdG9hc3RzIHN0YXkgdmlzaWJsZS4gRHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnNob3coewogICAgbWVzc2FnZTogIlF1aWNrIHRvYXN0ICgxIHNlY29uZCkiLAogICAgdHlwZTogImluZm8iLAogICAgZHVyYXRpb246IDFlMwogIH0pOwp9fT4xIFNlY29uZDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiU3RhbmRhcmQgdG9hc3QgKDMgc2Vjb25kcykiLAogICAgdHlwZTogImluZm8iLAogICAgZHVyYXRpb246IDNlMwogIH0pOwp9fT4zIFNlY29uZHMgKERlZmF1bHQpPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5zaG93KHsKICAgIG1lc3NhZ2U6ICJMb25nIHRvYXN0ICg1IHNlY29uZHMpIiwKICAgIHR5cGU6ICJpbmZvIiwKICAgIGR1cmF0aW9uOiA1ZTMKICB9KTsKfX0+NSBTZWNvbmRzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5zaG93KHsKICAgIG1lc3NhZ2U6ICJNYW51YWwgZGlzbWlzcyBvbmx5IChjbGljayB0byBjbG9zZSkiLAogICAgdHlwZTogIndhcm5pbmciLAogICAgZHVyYXRpb246IDAKICB9KTsKfX0+Tm8gQXV0by1EaXNtaXNzPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+TXVsdGlwbGUgVG9hc3RzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBNdWx0aXBsZSB0b2FzdHMgc3RhY2sgYXV0b21hdGljYWxseS4gVGhleSBtYWludGFpbiB0aGVpciBvcmRlciBhbmQgYW5pbWF0ZSBzbW9vdGhseS4KICAgICAgICA8L3A+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5pbmZvKCJGaXJzdCBub3RpZmljYXRpb24iKTsKICBzZXRUaW1lb3V0KCgpID0+IERlZXNUb2FzdC5zdWNjZXNzKCJTZWNvbmQgbm90aWZpY2F0aW9uIiksIDIwMCk7CiAgc2V0VGltZW91dCgoKSA9PiBEZWVzVG9hc3Qud2FybmluZygiVGhpcmQgbm90aWZpY2F0aW9uIiksIDQwMCk7CiAgc2V0VGltZW91dCgoKSA9PiBEZWVzVG9hc3QuZXJyb3IoIkZvdXJ0aCBub3RpZmljYXRpb24iKSwgNjAwKTsKfX0+U2hvdyBNdWx0aXBsZTwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gNTsgaTExKyspIHsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBEZWVzVG9hc3Quc2hvdyh7CiAgICAgICAgbWVzc2FnZTogYE5vdGlmaWNhdGlvbiAjJHtpMTF9YCwKICAgICAgICB0eXBlOiBpMTEgJSAyID09PSAwID8gInN1Y2Nlc3MiIDogImluZm8iLAogICAgICAgIGR1cmF0aW9uOiAyZTMgKyBpMTEgKiA1MDAKICAgICAgfSk7CiAgICB9LCBpMTEgKiAxMDApOwogIH0KfX0+UmFwaWQgRmlyZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlJlYWwtV29ybGQgRXhhbXBsZXM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENvbW1vbiB1c2UgY2FzZXMgZm9yIHRvYXN0IG5vdGlmaWNhdGlvbnMgaW4gYXBwbGljYXRpb25zLgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHthc3luYyAoKSA9PiB7CiAgY29uc3QgdG9hc3QgPSBhd2FpdCBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiU2F2aW5nIGNoYW5nZXMuLi4iLAogICAgdHlwZTogImluZm8iLAogICAgZHVyYXRpb246IDAKICB9KTsKICBzZXRUaW1lb3V0KCgpID0+IHsKICAgIHRvYXN0LmRpc21pc3MoKTsKICAgIERlZXNUb2FzdC5zdWNjZXNzKCJDaGFuZ2VzIHNhdmVkIHN1Y2Nlc3NmdWxseSEiKTsKICB9LCAyZTMpOwp9fT5TYXZlIE9wZXJhdGlvbjwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3QuZXJyb3IoIkZhaWxlZCB0byBjb25uZWN0IHRvIHNlcnZlci4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbi4iKTsKfX0+TmV0d29yayBFcnJvcjwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3Qud2FybmluZygiWW91ciBzZXNzaW9uIHdpbGwgZXhwaXJlIGluIDUgbWludXRlcyIpOwp9fT5TZXNzaW9uIFdhcm5pbmc8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnN1Y2Nlc3MoIkZpbGUgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5ISIpOwp9fT5VcGxvYWQgQ29tcGxldGU8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5Qcm9ncmFtbWF0aWMgQ29udHJvbDwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPgogICAgICAgICAgQWR2YW5jZWQgY29udHJvbCBvdmVyIHRvYXN0IGJlaGF2aW9yLgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHthc3luYyAoKSA9PiB7CiAgY29uc3QgdG9hc3QgPSBhd2FpdCBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiVGhpcyB0b2FzdCBjYW4gYmUgZGlzbWlzc2VkIHByb2dyYW1tYXRpY2FsbHkiLAogICAgdHlwZTogImluZm8iLAogICAgZHVyYXRpb246IDAKICB9KTsKICBzZXRUaW1lb3V0KCgpID0+IHsKICAgIHRvYXN0LmRpc21pc3MoKTsKICAgIERlZXNUb2FzdC5zdWNjZXNzKCJUb2FzdCBkaXNtaXNzZWQgYWZ0ZXIgMiBzZWNvbmRzIik7CiAgfSwgMmUzKTsKfX0+UHJvZ3JhbW1hdGljIERpc21pc3M8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LmluZm8oIkluZm8gbWVzc2FnZSIsIDJlMyk7CiAgc2V0VGltZW91dCgoKSA9PiBEZWVzVG9hc3Quc3VjY2VzcygiU3VjY2VzcyBtZXNzYWdlIiwgMmUzKSwgNTAwKTsKICBzZXRUaW1lb3V0KCgpID0+IERlZXNUb2FzdC53YXJuaW5nKCJXYXJuaW5nIG1lc3NhZ2UiLCAyZTMpLCAxZTMpOwogIHNldFRpbWVvdXQoKCkgPT4gRGVlc1RvYXN0LmVycm9yKCJFcnJvciBtZXNzYWdlIiwgMmUzKSwgMTUwMCk7Cn19PkNvbnZlbmllbmNlIE1ldGhvZHM8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdG9hc3QvZGVlcy10b2FzdC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU4NSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzODYgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNUb2FzdCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtdG9hc3QiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9tZXNzYWdlX2RlY29yYXRvcnM7CiAgbGV0IF9tZXNzYWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVzc2FnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdHlwZV9kZWNvcmF0b3JzOwogIGxldCBfdHlwZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2R1cmF0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9kdXJhdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2R1cmF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc1Zpc2libGVfZGVjb3JhdG9yczsKICBsZXQgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzVG9hc3QyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbWVzc2FnZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3R5cGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9kdXJhdGlvbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2lzVmlzaWJsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTg1KHRoaXMsIG51bGwsIF9tZXNzYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1lc3NhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lc3NhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVzc2FnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWVzc2FnZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZXNzYWdlX2luaXRpYWxpemVycywgX21lc3NhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4NSh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODUodGhpcywgbnVsbCwgX2R1cmF0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImR1cmF0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkdXJhdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kdXJhdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHVyYXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHVyYXRpb25faW5pdGlhbGl6ZXJzLCBfZHVyYXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4NSh0aGlzLCBudWxsLCBfaXNWaXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzVmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNWaXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzVmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNWaXNpYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMsIF9pc1Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4NShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNUb2FzdDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNTM7CiAgICBzdGF0aWMgdG9hc3RDb250YWluZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgIHN0YXRpYyBnZXRPckNyZWF0ZUNvbnRhaW5lcihwb3NpdGlvbjMpIHsKICAgICAgaWYgKCF0aGlzLnRvYXN0Q29udGFpbmVycy5oYXMocG9zaXRpb24zKSkgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSBgdG9hc3QtY29udGFpbmVyIHRvYXN0LWNvbnRhaW5lci0ke3Bvc2l0aW9uM31gOwogICAgICAgIGNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gYAogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB6LWluZGV4OiAke3pJbmRleExheWVycy5vdmVybGF5LnRvYXN0fTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgYDsKICAgICAgICBzd2l0Y2ggKHBvc2l0aW9uMykgewogICAgICAgICAgY2FzZSAidG9wLXJpZ2h0IjoKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnRvcCA9ICIwIjsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gIjAiOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInRvcC1sZWZ0IjoKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnRvcCA9ICIwIjsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAiMCI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYm90dG9tLXJpZ2h0IjoKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvdHRvbSA9ICIwIjsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gIjAiOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImJvdHRvbS1sZWZ0IjoKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvdHRvbSA9ICIwIjsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAiMCI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAidG9wLWNlbnRlciI6CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50b3AgPSAiMCI7CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gIjUwJSI7CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlWCgtNTAlKSI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYm90dG9tLWNlbnRlciI6CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3R0b20gPSAiMCI7CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gIjUwJSI7CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlWCgtNTAlKSI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CiAgICAgICAgdGhpcy50b2FzdENvbnRhaW5lcnMuc2V0KHBvc2l0aW9uMywgY29udGFpbmVyKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy50b2FzdENvbnRhaW5lcnMuZ2V0KHBvc2l0aW9uMyk7CiAgICB9CiAgICBzdGF0aWMgYXN5bmMgc2hvdyhvcHRpb25zKSB7CiAgICAgIGNvbnN0IG9wdHMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gInN0cmluZyIgPyB7IG1lc3NhZ2U6IG9wdGlvbnMgfSA6IG9wdGlvbnM7CiAgICAgIGNvbnN0IHRvYXN0ID0gbmV3IERlZXNUb2FzdDIoKTsKICAgICAgdG9hc3QubWVzc2FnZSA9IG9wdHMubWVzc2FnZTsKICAgICAgdG9hc3QudHlwZSA9IG9wdHMudHlwZSB8fCAiaW5mbyI7CiAgICAgIHRvYXN0LmR1cmF0aW9uID0gb3B0cy5kdXJhdGlvbiB8fCAzZTM7CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuZ2V0T3JDcmVhdGVDb250YWluZXIob3B0cy5wb3NpdGlvbiB8fCAidG9wLXJpZ2h0Iik7CiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0b2FzdCk7CiAgICAgIGF3YWl0IHRvYXN0LnVwZGF0ZUNvbXBsZXRlOwogICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgIHRvYXN0LmlzVmlzaWJsZSA9IHRydWU7CiAgICAgIH0pOwogICAgICBpZiAodG9hc3QuZHVyYXRpb24gPiAwKSB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICB0b2FzdC5kaXNtaXNzKCk7CiAgICAgICAgfSwgdG9hc3QuZHVyYXRpb24pOwogICAgICB9CiAgICAgIHJldHVybiB0b2FzdDsKICAgIH0KICAgIC8vIEFsaWFzIGZvciBjb25zaXN0ZW5jeSB3aXRoIERlZXNNb2RhbAogICAgc3RhdGljIGFzeW5jIGNyZWF0ZUFuZFNob3cob3B0aW9ucykgewogICAgICByZXR1cm4gdGhpcy5zaG93KG9wdGlvbnMpOwogICAgfQogICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kcwogICAgc3RhdGljIGluZm8obWVzc2FnZTIsIGR1cmF0aW9uKSB7CiAgICAgIHJldHVybiB0aGlzLnNob3coeyBtZXNzYWdlOiBtZXNzYWdlMiwgdHlwZTogImluZm8iLCBkdXJhdGlvbiB9KTsKICAgIH0KICAgIHN0YXRpYyBzdWNjZXNzKG1lc3NhZ2UyLCBkdXJhdGlvbikgewogICAgICByZXR1cm4gdGhpcy5zaG93KHsgbWVzc2FnZTogbWVzc2FnZTIsIHR5cGU6ICJzdWNjZXNzIiwgZHVyYXRpb24gfSk7CiAgICB9CiAgICBzdGF0aWMgd2FybmluZyhtZXNzYWdlMiwgZHVyYXRpb24pIHsKICAgICAgcmV0dXJuIHRoaXMuc2hvdyh7IG1lc3NhZ2U6IG1lc3NhZ2UyLCB0eXBlOiAid2FybmluZyIsIGR1cmF0aW9uIH0pOwogICAgfQogICAgc3RhdGljIGVycm9yKG1lc3NhZ2UyLCBkdXJhdGlvbikgewogICAgICByZXR1cm4gdGhpcy5zaG93KHsgbWVzc2FnZTogbWVzc2FnZTIsIHR5cGU6ICJlcnJvciIsIGR1cmF0aW9uIH0pOwogICAgfQogICAgI21lc3NhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX21lc3NhZ2VfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IG1lc3NhZ2UoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWVzc2FnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWVzc2FnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg2KHRoaXMsIF9tZXNzYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Nih0aGlzLCBfdHlwZV9pbml0aWFsaXplcnMsICJpbmZvIikpOwogICAgZ2V0IHR5cGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdHlwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2R1cmF0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4Nih0aGlzLCBfdHlwZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX2R1cmF0aW9uX2luaXRpYWxpemVycywgM2UzKSk7CiAgICBnZXQgZHVyYXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNkdXJhdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGR1cmF0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNkdXJhdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX2R1cmF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Nih0aGlzLCBfaXNWaXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc1Zpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc1Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1Zpc2libGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX2lzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIGRvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnNldHVwKCk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpc3Zpc2libGVdKSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgIH0KCiAgICAgIC50b2FzdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxNnB4IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmIiwgIiMyMjIiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzMzMyIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsMCwwLDAuMSkiLCAicmdiYSgwLDAsMCwwLjMpIil9OwogICAgICAgIG1pbi13aWR0aDogMzAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiA1MDBweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC50b2FzdDpob3ZlciB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjAyKTsKICAgICAgfQoKICAgICAgLmljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5pY29uIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubWVzc2FnZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgfQoKICAgICAgLmNsb3NlIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgIH0KCiAgICAgIC5jbG9zZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNsb3NlIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgLyogVHlwZS1zcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgOmhvc3QoW3R5cGU9ImluZm8iXSkgLmljb24gewogICAgICAgIGNvbG9yOiAjMDA4NGZmOwogICAgICB9CgogICAgICA6aG9zdChbdHlwZT0ic3VjY2VzcyJdKSAuaWNvbiB7CiAgICAgICAgY29sb3I6ICMyMmM1NWU7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0eXBlPSJ3YXJuaW5nIl0pIC5pY29uIHsKICAgICAgICBjb2xvcjogI2Y1OWUwYjsKICAgICAgfQoKICAgICAgOmhvc3QoW3R5cGU9ImVycm9yIl0pIC5pY29uIHsKICAgICAgICBjb2xvcjogI2VmNDQ0NDsKICAgICAgfQoKICAgICAgLyogUHJvZ3Jlc3MgYmFyICovCiAgICAgIC5wcm9ncmVzcyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogM3B4OwogICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDhweCA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnByb2dyZXNzLWJhciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdDsKICAgICAgICBhbmltYXRpb246IHByb2dyZXNzIGxpbmVhciBmb3J3YXJkczsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBwcm9ncmVzcyB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKTsKICAgICAgICB9CiAgICAgICAgdG8gewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCk7CiAgICAgICAgfQogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICBjb25zdCBpY29uczYgPSB7CiAgICAgICAgaW5mbzogYjJgPHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgMThhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnptMS0xMWExIDEgMCAxMC0yIDB2Mkg3YTEgMSAwIDEwMCAyaDJ2MmExIDEgMCAxMDIgMHYtMmgyYTEgMSAwIDEwMC0yaC0yVjd6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz4KICAgICAgPC9zdmc+YCwKICAgICAgICBzdWNjZXNzOiBiMmA8c3ZnIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0zLjcwNy05LjI5M2ExIDEgMCAwMC0xLjQxNC0xLjQxNEw5IDEwLjU4NiA3LjcwNyA5LjI5M2ExIDEgMCAwMC0xLjQxNCAxLjQxNGwyIDJhMSAxIDAgMDAxLjQxNCAwbDQtNHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPgogICAgICA8L3N2Zz5gLAogICAgICAgIHdhcm5pbmc6IGIyYDxzdmcgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTguMjU3IDMuMDk5Yy43NjUtMS4zNiAyLjcyMi0xLjM2IDMuNDg2IDBsNS41OCA5LjkyYy43NSAxLjMzNC0uMjEzIDIuOTgtMS43NDIgMi45OEg0LjQyYy0xLjUzIDAtMi40OTMtMS42NDYtMS43NDMtMi45OGw1LjU4LTkuOTJ6TTExIDEzYTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHptLTEtOGExIDEgMCAwMC0xIDF2M2ExIDEgMCAwMDIgMFY2YTEgMSAwIDAwLTEtMXoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPgogICAgICA8L3N2Zz5gLAogICAgICAgIGVycm9yOiBiMmA8c3ZnIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2ek04LjcwNyA3LjI5M2ExIDEgMCAwMC0xLjQxNCAxLjQxNEw4LjU4NiAxMGwtMS4yOTMgMS4yOTNhMSAxIDAgMTAxLjQxNCAxLjQxNEwxMCAxMS40MTRsMS4yOTMgMS4yOTNhMSAxIDAgMDAxLjQxNC0xLjQxNEwxMS40MTQgMTBsMS4yOTMtMS4yOTNhMSAxIDAgMDAtMS40MTQtMS40MTRMMTAgOC41ODYgOC43MDcgNy4yOTN6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz4KICAgICAgPC9zdmc+YAogICAgICB9OwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InRvYXN0IiBAY2xpY2s9JHt0aGlzLmRpc21pc3N9PgogICAgICAgIDxkaXYgY2xhc3M9Imljb24iPgogICAgICAgICAgJHtpY29uczZbdGhpcy50eXBlXX0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXNzYWdlIj4ke3RoaXMubWVzc2FnZX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjbG9zZSI+CiAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgPHBhdGggZD0iTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOHoiLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgIDwvZGl2PgogICAgICAgICR7dGhpcy5kdXJhdGlvbiA+IDAgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIiBzdHlsZT0iYW5pbWF0aW9uLWR1cmF0aW9uOiAke3RoaXMuZHVyYXRpb259bXMiPjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBkaXNtaXNzKCkgewogICAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDMwMCkpOwogICAgICB0aGlzLnJlbW92ZSgpOwogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnBhcmVudEVsZW1lbnQ7CiAgICAgIGlmIChjb250YWluZXIgJiYgY29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgewogICAgICAgIGNvbnRhaW5lci5yZW1vdmUoKTsKICAgICAgICBmb3IgKGNvbnN0IFtwb3NpdGlvbjMsIGNvbnRdIG9mIERlZXNUb2FzdDIudG9hc3RDb250YWluZXJzLmVudHJpZXMoKSkgewogICAgICAgICAgaWYgKGNvbnQgPT09IGNvbnRhaW5lcikgewogICAgICAgICAgICBEZWVzVG9hc3QyLnRvYXN0Q29udGFpbmVycy5kZWxldGUocG9zaXRpb24zKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJ0eXBlIiwgdGhpcy50eXBlKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODYoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNUb2FzdDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXVwZGF0ZXIvZGVlcy11cGRhdGVyLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNTQgPSBhc3luYyAoKSA9PiB7CiAgY29uc3QgdXBkYXRlciA9IGF3YWl0IERlZXNVcGRhdGVyLmNyZWF0ZUFuZFNob3coKTsKICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgIGF3YWl0IHVwZGF0ZXIuZGVzdHJveSgpOwogIH0sIDFlNCk7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdXBkYXRlci9kZWVzLXVwZGF0ZXIuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlODYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczg3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzVXBkYXRlciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtdXBkYXRlciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2N1cnJlbnRWZXJzaW9uX2RlY29yYXRvcnM7CiAgbGV0IF9jdXJyZW50VmVyc2lvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRWZXJzaW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF91cGRhdGVkVmVyc2lvbl9kZWNvcmF0b3JzOwogIGxldCBfdXBkYXRlZFZlcnNpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF91cGRhdGVkVmVyc2lvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzVXBkYXRlcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9jdXJyZW50VmVyc2lvbl9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfdXBkYXRlZFZlcnNpb25fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlODYodGhpcywgbnVsbCwgX2N1cnJlbnRWZXJzaW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRWZXJzaW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXJyZW50VmVyc2lvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50VmVyc2lvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VycmVudFZlcnNpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudFZlcnNpb25faW5pdGlhbGl6ZXJzLCBfY3VycmVudFZlcnNpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Nih0aGlzLCBudWxsLCBfdXBkYXRlZFZlcnNpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidXBkYXRlZFZlcnNpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInVwZGF0ZWRWZXJzaW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnVwZGF0ZWRWZXJzaW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai51cGRhdGVkVmVyc2lvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF91cGRhdGVkVmVyc2lvbl9pbml0aWFsaXplcnMsIF91cGRhdGVkVmVyc2lvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTg2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1VwZGF0ZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM1NDsKICAgIHN0YXRpYyBhc3luYyBjcmVhdGVBbmRTaG93KCkgewogICAgICBjb25zdCB1cGRhdGVyID0gbmV3IERlZXNVcGRhdGVyMigpOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHVwZGF0ZXIpOwogICAgICByZXR1cm4gdXBkYXRlcjsKICAgIH0KICAgICNjdXJyZW50VmVyc2lvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4Nyh0aGlzLCBfY3VycmVudFZlcnNpb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgZ2V0IGN1cnJlbnRWZXJzaW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFZlcnNpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50VmVyc2lvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VycmVudFZlcnNpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN1cGRhdGVkVmVyc2lvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODcodGhpcywgX2N1cnJlbnRWZXJzaW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Nyh0aGlzLCBfdXBkYXRlZFZlcnNpb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCB1cGRhdGVkVmVyc2lvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3VwZGF0ZWRWZXJzaW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdXBkYXRlZFZlcnNpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3VwZGF0ZWRWZXJzaW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4Nyh0aGlzLCBfdXBkYXRlZFZlcnNpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBkaXN0X3RzX2V4cG9ydHMyNS5lbGVtZW50QmFzaWMuc2V0dXAoKTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAubW9kYWxDb250YWluZXIgewogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMyMjIiKX07CiAgICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMzMzMiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNDBweCA0MHB4OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgbWFyZ2luOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgICBtYXJnaW4tbGVmdDogMjBweDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAuYnV0dG9uQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNTAlIDUwJTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy13aW5kb3dsYXllcgogICAgICAgIEBjbGlja2VkPSIke3RoaXMud2luZG93TGF5ZXJDbGlja2VkfSIKICAgICAgICAub3B0aW9ucz0ke3sKICAgICAgICBibHVyOiB0cnVlCiAgICAgIH19CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbENvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nQ29udGFpbmVyIj4KICAgICAgICAgICAgPGRlZXMtc3Bpbm5lciAuc2l6ZT0kezYwfT48L2RlZXMtc3Bpbm5lcj4KICAgICAgICAgICAgPGgxPlVwZGF0aW5nIHRoZSBhcHBsaWNhdGlvbi4uLjwvaDE+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIj4KICAgICAgICAgICAgPGRlZXMtcHJvZ3Jlc3NiYXIgLnByb2dyZXNzPSR7MC41fT48L2RlZXMtcHJvZ3Jlc3NiYXI+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbkNvbnRhaW5lciI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5Nb3JlIGluZm88L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+Q2hhbmdlbG9nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PiA8L2RlZXMtd2luZG93bGF5ZXIKICAgICAgPj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBkZXN0cm95KCkgewogICAgICB0aGlzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcyk7CiAgICB9CiAgICB3aW5kb3dMYXllckNsaWNrZWQoKSB7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczg3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzVXBkYXRlcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRoZW1lL2RlZXMtdGhlbWUuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM1NSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMzJweDsKICAgICAgcGFkZGluZzogNDhweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOGY5ZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICB9CgogICAgLnNlY3Rpb24gewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICB9CgogICAgLnNlY3Rpb24tdGl0bGUgewogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgfQoKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgIH0KCiAgICAudG9rZW4tZ3JpZCB7CiAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgZ2FwOiAxNnB4OwogICAgfQoKICAgIC50b2tlbi1pdGVtIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICBwYWRkaW5nOiAxNnB4OwogICAgfQoKICAgIC50b2tlbi1uYW1lIHsKICAgICAgZm9udC1mYW1pbHk6ICdJbnRlbCBPbmUgTW9ubycsIG1vbm9zcGFjZTsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgfQoKICAgIC50b2tlbi12YWx1ZSB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICB9CgogICAgLnNwYWNpbmctZGVtbyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgZ2FwOiA4cHg7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIH0KCiAgICAuc3BhY2luZy1ib3ggewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICB9CgogICAgLnJhZGl1cy1kZW1vIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAxNnB4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLnJhZGl1cy1ib3ggewogICAgICB3aWR0aDogNjBweDsKICAgICAgaGVpZ2h0OiA2MHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICB9CgogICAgLnNoYWRvdy1kZW1vIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAyNHB4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLnNoYWRvdy1ib3ggewogICAgICB3aWR0aDogMTAwcHg7CiAgICAgIGhlaWdodDogMTAwcHg7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMyNzI3MmEiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICB9CgogICAgLmhlaWdodC1kZW1vIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAxNnB4OwogICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIH0KCiAgICAuaGVpZ2h0LWJveCB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgIHdpZHRoOiAxMjBweDsKICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy10aGVtZT4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U3BhY2luZyBTY2FsZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPgogICAgICAgICAgQ1NTIHZhcmlhYmxlczogLS1kZWVzLXNwYWNpbmcteHMgdGhyb3VnaCAtLWRlZXMtc3BhY2luZy0zeGwKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWRlbW8iPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2luZy1ib3giIHN0eWxlPSJ3aWR0aDogdmFyKC0tZGVlcy1zcGFjaW5nLXhzKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmcteHMpOyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPnhzICg0cHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy1zbSk7IGhlaWdodDogdmFyKC0tZGVlcy1zcGFjaW5nLXNtKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5zbSAoOHB4KTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWJveCIgc3R5bGU9IndpZHRoOiB2YXIoLS1kZWVzLXNwYWNpbmctbWQpOyBoZWlnaHQ6IHZhcigtLWRlZXMtc3BhY2luZy1tZCk7Ij48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+bWQgKDEycHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy1sZyk7IGhlaWdodDogdmFyKC0tZGVlcy1zcGFjaW5nLWxnKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5sZyAoMTZweCk8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2luZy1ib3giIHN0eWxlPSJ3aWR0aDogdmFyKC0tZGVlcy1zcGFjaW5nLXhsKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmcteGwpOyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPnhsICgyNHB4KTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWJveCIgc3R5bGU9IndpZHRoOiB2YXIoLS1kZWVzLXNwYWNpbmctMnhsKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmctMnhsKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4yeGwgKDMycHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy0zeGwpOyBoZWlnaHQ6IHZhcigtLWRlZXMtc3BhY2luZy0zeGwpOyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjN4bCAoNDhweCk8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkJvcmRlciBSYWRpdXMgU2NhbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENTUyB2YXJpYWJsZXM6IC0tZGVlcy1yYWRpdXMteHMgdGhyb3VnaCAtLWRlZXMtcmFkaXVzLWZ1bGwKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtZGVtbyI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtYm94IiBzdHlsZT0iYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcy1yYWRpdXMteHMpOyI+eHM8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+MnB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGl1cy1ib3giIHN0eWxlPSJib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVzLXJhZGl1cy1zbSk7Ij5zbTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj40cHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmFkaXVzLWJveCIgc3R5bGU9ImJvcmRlci1yYWRpdXM6IHZhcigtLWRlZXMtcmFkaXVzLW1kKTsiPm1kPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjZweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtYm94IiBzdHlsZT0iYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcy1yYWRpdXMtbGcpOyI+bGc8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+OHB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGl1cy1ib3giIHN0eWxlPSJib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVzLXJhZGl1cy14bCk7Ij54bDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4xMnB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGl1cy1ib3giIHN0eWxlPSJib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVzLXJhZGl1cy1mdWxsKTsiPmZ1bGw8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+OTk5cHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNoYWRvdyBFbGV2YXRpb24gU2NhbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENTUyB2YXJpYWJsZXM6IC0tZGVlcy1zaGFkb3cteHMgdGhyb3VnaCAtLWRlZXMtc2hhZG93LWxnCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93LWRlbW8iPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93LWJveCIgc3R5bGU9ImJveC1zaGFkb3c6IHZhcigtLWRlZXMtc2hhZG93LXhzKTsiPnhzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPm1pbmltYWw8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93LWJveCIgc3R5bGU9ImJveC1zaGFkb3c6IHZhcigtLWRlZXMtc2hhZG93LXNtKTsiPnNtPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPnN1YnRsZTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGFkb3ctYm94IiBzdHlsZT0iYm94LXNoYWRvdzogdmFyKC0tZGVlcy1zaGFkb3ctbWQpOyI+bWQ8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+bWVkaXVtPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNoYWRvdy1ib3giIHN0eWxlPSJib3gtc2hhZG93OiB2YXIoLS1kZWVzLXNoYWRvdy1sZyk7Ij5sZzwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5wcm9taW5lbnQ8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkNvbnRyb2wgSGVpZ2h0IFNjYWxlPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDU1MgdmFyaWFibGVzOiAtLWRlZXMtY29udHJvbC1oZWlnaHQtc20gdGhyb3VnaCAtLWRlZXMtY29udHJvbC1oZWlnaHQteGwKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWlnaHQtZGVtbyI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWlnaHQtYm94IiBzdHlsZT0iaGVpZ2h0OiB2YXIoLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXNtKTsiPnNtPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjMycHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVpZ2h0LWJveCIgc3R5bGU9ImhlaWdodDogdmFyKC0tZGVlcy1jb250cm9sLWhlaWdodC1tZCk7Ij5tZDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4zNnB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlaWdodC1ib3giIHN0eWxlPSJoZWlnaHQ6IHZhcigtLWRlZXMtY29udHJvbC1oZWlnaHQtbGcpOyI+bGc8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+NDBweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWlnaHQtYm94IiBzdHlsZT0iaGVpZ2h0OiB2YXIoLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXhsKTsiPnhsPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjQ4cHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlRyYW5zaXRpb24gRHVyYXRpb25zPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDU1MgdmFyaWFibGVzOiAtLWRlZXMtdHJhbnNpdGlvbi1mYXN0IHRocm91Z2ggLS1kZWVzLXRyYW5zaXRpb24tc2xvd2VyCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tZ3JpZCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1pdGVtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+LS1kZWVzLXRyYW5zaXRpb24tZmFzdDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi12YWx1ZSI+MC4xczwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1pdGVtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+LS1kZWVzLXRyYW5zaXRpb24tZGVmYXVsdDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi12YWx1ZSI+MC4xNXM8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4taXRlbSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPi0tZGVlcy10cmFuc2l0aW9uLXNsb3c8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tdmFsdWUiPjAuMnM8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4taXRlbSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPi0tZGVlcy10cmFuc2l0aW9uLXNsb3dlcjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi12YWx1ZSI+MC4zczwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kZWVzLXRoZW1lPgogIDwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRoZW1lL2RlZXMtdGhlbWUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlODcgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczg4ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzVGhlbWUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXRoZW1lIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfY3VzdG9tU3BhY2luZ19kZWNvcmF0b3JzOwogIGxldCBfY3VzdG9tU3BhY2luZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1c3RvbVNwYWNpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1c3RvbVJhZGl1c19kZWNvcmF0b3JzOwogIGxldCBfY3VzdG9tUmFkaXVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VzdG9tUmFkaXVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXN0b21TaGFkb3dzX2RlY29yYXRvcnM7CiAgbGV0IF9jdXN0b21TaGFkb3dzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VzdG9tU2hhZG93c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VzdG9tVHJhbnNpdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2N1c3RvbVRyYW5zaXRpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VzdG9tVHJhbnNpdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1c3RvbUNvbnRyb2xIZWlnaHRzX2RlY29yYXRvcnM7CiAgbGV0IF9jdXN0b21Db250cm9sSGVpZ2h0c19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1c3RvbUNvbnRyb2xIZWlnaHRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNUaGVtZTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9jdXN0b21TcGFjaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfY3VzdG9tUmFkaXVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfY3VzdG9tU2hhZG93c19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX2N1c3RvbVRyYW5zaXRpb25zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfY3VzdG9tQ29udHJvbEhlaWdodHNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTg3KHRoaXMsIG51bGwsIF9jdXN0b21TcGFjaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1c3RvbVNwYWNpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1c3RvbVNwYWNpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VzdG9tU3BhY2luZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VzdG9tU3BhY2luZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jdXN0b21TcGFjaW5nX2luaXRpYWxpemVycywgX2N1c3RvbVNwYWNpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Nyh0aGlzLCBudWxsLCBfY3VzdG9tUmFkaXVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1c3RvbVJhZGl1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VzdG9tUmFkaXVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1c3RvbVJhZGl1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VzdG9tUmFkaXVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1c3RvbVJhZGl1c19pbml0aWFsaXplcnMsIF9jdXN0b21SYWRpdXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Nyh0aGlzLCBudWxsLCBfY3VzdG9tU2hhZG93c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXN0b21TaGFkb3dzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXN0b21TaGFkb3dzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1c3RvbVNoYWRvd3MsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1c3RvbVNoYWRvd3MgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VzdG9tU2hhZG93c19pbml0aWFsaXplcnMsIF9jdXN0b21TaGFkb3dzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODcodGhpcywgbnVsbCwgX2N1c3RvbVRyYW5zaXRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1c3RvbVRyYW5zaXRpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXN0b21UcmFuc2l0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXN0b21UcmFuc2l0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VzdG9tVHJhbnNpdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VzdG9tVHJhbnNpdGlvbnNfaW5pdGlhbGl6ZXJzLCBfY3VzdG9tVHJhbnNpdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Nyh0aGlzLCBudWxsLCBfY3VzdG9tQ29udHJvbEhlaWdodHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VzdG9tQ29udHJvbEhlaWdodHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1c3RvbUNvbnRyb2xIZWlnaHRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1c3RvbUNvbnRyb2xIZWlnaHRzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jdXN0b21Db250cm9sSGVpZ2h0cyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jdXN0b21Db250cm9sSGVpZ2h0c19pbml0aWFsaXplcnMsIF9jdXN0b21Db250cm9sSGVpZ2h0c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTg3KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1RoZW1lMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNTU7CiAgICAjY3VzdG9tU3BhY2luZ19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfY3VzdG9tU3BhY2luZ19pbml0aWFsaXplcnMsIG51bGwpOwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFByb3BlcnRpZXMgZm9yIHRoZW1lIG92ZXJyaWRlcwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIGdldCBjdXN0b21TcGFjaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VzdG9tU3BhY2luZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGN1c3RvbVNwYWNpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1c3RvbVNwYWNpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjdXN0b21SYWRpdXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg4KHRoaXMsIF9jdXN0b21TcGFjaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfY3VzdG9tUmFkaXVzX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IGN1c3RvbVJhZGl1cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1c3RvbVJhZGl1c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGN1c3RvbVJhZGl1cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VzdG9tUmFkaXVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VzdG9tU2hhZG93c19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODgodGhpcywgX2N1c3RvbVJhZGl1c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODgodGhpcywgX2N1c3RvbVNoYWRvd3NfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgY3VzdG9tU2hhZG93cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1c3RvbVNoYWRvd3NfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXN0b21TaGFkb3dzKHZhbHVlMikgewogICAgICB0aGlzLiNjdXN0b21TaGFkb3dzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VzdG9tVHJhbnNpdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg4KHRoaXMsIF9jdXN0b21TaGFkb3dzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfY3VzdG9tVHJhbnNpdGlvbnNfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgY3VzdG9tVHJhbnNpdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjdXN0b21UcmFuc2l0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGN1c3RvbVRyYW5zaXRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNjdXN0b21UcmFuc2l0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1c3RvbUNvbnRyb2xIZWlnaHRzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfY3VzdG9tVHJhbnNpdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczg4KHRoaXMsIF9jdXN0b21Db250cm9sSGVpZ2h0c19pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCBjdXN0b21Db250cm9sSGVpZ2h0cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1c3RvbUNvbnRyb2xIZWlnaHRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VzdG9tQ29udHJvbEhlaWdodHModmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1c3RvbUNvbnRyb2xIZWlnaHRzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gU3R5bGVzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBjb250ZW50czsKICAgICAgfQogICAgYAogICAgXTsKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBSZW5kZXIKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgICR7dGhpcy5nZW5lcmF0ZUN1c3RvbVN0eWxlcygpfQogICAgICA8L3N0eWxlPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICBgOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFByaXZhdGUgTWV0aG9kcwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIGdlbmVyYXRlQ3VzdG9tU3R5bGVzKCkgewogICAgICBjb25zdCBzdHlsZXMzID0gWyI6aG9zdCB7Il07CiAgICAgIGlmICh0aGlzLmN1c3RvbVNwYWNpbmcpIHsKICAgICAgICBmb3IgKGNvbnN0IFtrZXkyLCB2YWx1ZTJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tU3BhY2luZykpIHsKICAgICAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICAgICAgc3R5bGVzMy5wdXNoKGAgIC0tZGVlcy1zcGFjaW5nLSR7a2V5Mn06ICR7dmFsdWUyfTtgKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY3VzdG9tUmFkaXVzKSB7CiAgICAgICAgZm9yIChjb25zdCBba2V5MiwgdmFsdWUyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmN1c3RvbVJhZGl1cykpIHsKICAgICAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICAgICAgc3R5bGVzMy5wdXNoKGAgIC0tZGVlcy1yYWRpdXMtJHtrZXkyfTogJHt2YWx1ZTJ9O2ApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGhpcy5jdXN0b21TaGFkb3dzKSB7CiAgICAgICAgZm9yIChjb25zdCBba2V5MiwgdmFsdWUyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmN1c3RvbVNoYWRvd3MpKSB7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIHN0eWxlczMucHVzaChgICAtLWRlZXMtc2hhZG93LSR7a2V5Mn06ICR7dmFsdWUyfTtgKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY3VzdG9tVHJhbnNpdGlvbnMpIHsKICAgICAgICBmb3IgKGNvbnN0IFtrZXkyLCB2YWx1ZTJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tVHJhbnNpdGlvbnMpKSB7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIGNvbnN0IGNzc0tleSA9IGtleTIgPT09ICJkZWZhdWx0IiA/ICJkZWZhdWx0IiA6IGtleTI7CiAgICAgICAgICAgIHN0eWxlczMucHVzaChgICAtLWRlZXMtdHJhbnNpdGlvbi0ke2Nzc0tleX06ICR7dmFsdWUyfTtgKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY3VzdG9tQ29udHJvbEhlaWdodHMpIHsKICAgICAgICBmb3IgKGNvbnN0IFtrZXkyLCB2YWx1ZTJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tQ29udHJvbEhlaWdodHMpKSB7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIHN0eWxlczMucHVzaChgICAtLWRlZXMtY29udHJvbC1oZWlnaHQtJHtrZXkyfTogJHt2YWx1ZTJ9O2ApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBzdHlsZXMzLnB1c2goIn0iKTsKICAgICAgcmV0dXJuIHN0eWxlczMuam9pbigiXG4iKTsKICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQdWJsaWMgQVBJIE1ldGhvZHMKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIFNldCBhIHNwYWNpbmcgdmFsdWUgZHluYW1pY2FsbHkKICAgICAqLwogICAgc2V0U3BhY2luZyhrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jdXN0b21TcGFjaW5nID0geyAuLi50aGlzLmN1c3RvbVNwYWNpbmcsIFtrZXkyXTogdmFsdWUyIH07CiAgICB9CiAgICAvKioKICAgICAqIFNldCBhIHJhZGl1cyB2YWx1ZSBkeW5hbWljYWxseQogICAgICovCiAgICBzZXRSYWRpdXMoa2V5MiwgdmFsdWUyKSB7CiAgICAgIHRoaXMuY3VzdG9tUmFkaXVzID0geyAuLi50aGlzLmN1c3RvbVJhZGl1cywgW2tleTJdOiB2YWx1ZTIgfTsKICAgIH0KICAgIC8qKgogICAgICogU2V0IGEgc2hhZG93IHZhbHVlIGR5bmFtaWNhbGx5CiAgICAgKi8KICAgIHNldFNoYWRvdyhrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jdXN0b21TaGFkb3dzID0geyAuLi50aGlzLmN1c3RvbVNoYWRvd3MsIFtrZXkyXTogdmFsdWUyIH07CiAgICB9CiAgICAvKioKICAgICAqIFNldCBhIHRyYW5zaXRpb24gdmFsdWUgZHluYW1pY2FsbHkKICAgICAqLwogICAgc2V0VHJhbnNpdGlvbihrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jdXN0b21UcmFuc2l0aW9ucyA9IHsgLi4udGhpcy5jdXN0b21UcmFuc2l0aW9ucywgW2tleTJdOiB2YWx1ZTIgfTsKICAgIH0KICAgIC8qKgogICAgICogU2V0IGEgY29udHJvbCBoZWlnaHQgdmFsdWUgZHluYW1pY2FsbHkKICAgICAqLwogICAgc2V0Q29udHJvbEhlaWdodChrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cyA9IHsgLi4udGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cywgW2tleTJdOiB2YWx1ZTIgfTsKICAgIH0KICAgIC8qKgogICAgICogR2V0IHRoZSBjdXJyZW50IHRoZW1lIGNvbmZpZ3VyYXRpb24gKGRlZmF1bHRzICsgb3ZlcnJpZGVzKQogICAgICovCiAgICBnZXRUaGVtZSgpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBjb2xvcnM6IHRoZW1lRGVmYXVsdHMuY29sb3JzLAogICAgICAgIHNwYWNpbmc6IHsgLi4udGhlbWVEZWZhdWx0cy5zcGFjaW5nLCAuLi50aGlzLmN1c3RvbVNwYWNpbmcgfSwKICAgICAgICByYWRpdXM6IHsgLi4udGhlbWVEZWZhdWx0cy5yYWRpdXMsIC4uLnRoaXMuY3VzdG9tUmFkaXVzIH0sCiAgICAgICAgc2hhZG93czogeyAuLi50aGVtZURlZmF1bHRzLnNoYWRvd3MsIC4uLnRoaXMuY3VzdG9tU2hhZG93cyB9LAogICAgICAgIHRyYW5zaXRpb25zOiB7IC4uLnRoZW1lRGVmYXVsdHMudHJhbnNpdGlvbnMsIC4uLnRoaXMuY3VzdG9tVHJhbnNpdGlvbnMgfSwKICAgICAgICBjb250cm9sSGVpZ2h0czogeyAuLi50aGVtZURlZmF1bHRzLmNvbnRyb2xIZWlnaHRzLCAuLi50aGlzLmN1c3RvbUNvbnRyb2xIZWlnaHRzIH0KICAgICAgfTsKICAgIH0KICAgIC8qKgogICAgICogUmVzZXQgYWxsIGN1c3RvbSBvdmVycmlkZXMgdG8gZGVmYXVsdHMKICAgICAqLwogICAgcmVzZXRUb0RlZmF1bHRzKCkgewogICAgICB0aGlzLmN1c3RvbVNwYWNpbmcgPSBudWxsOwogICAgICB0aGlzLmN1c3RvbVJhZGl1cyA9IG51bGw7CiAgICAgIHRoaXMuY3VzdG9tU2hhZG93cyA9IG51bGw7CiAgICAgIHRoaXMuY3VzdG9tVHJhbnNpdGlvbnMgPSBudWxsOwogICAgICB0aGlzLmN1c3RvbUNvbnRyb2xIZWlnaHRzID0gbnVsbDsKICAgIH0KICAgIC8qKgogICAgICogQXBwbHkgYSBjb21wbGV0ZSB0aGVtZSBvYmplY3QKICAgICAqLwogICAgYXBwbHlUaGVtZSh0aGVtZSkgewogICAgICBpZiAodGhlbWUuc3BhY2luZykKICAgICAgICB0aGlzLmN1c3RvbVNwYWNpbmcgPSB0aGVtZS5zcGFjaW5nOwogICAgICBpZiAodGhlbWUucmFkaXVzKQogICAgICAgIHRoaXMuY3VzdG9tUmFkaXVzID0gdGhlbWUucmFkaXVzOwogICAgICBpZiAodGhlbWUuc2hhZG93cykKICAgICAgICB0aGlzLmN1c3RvbVNoYWRvd3MgPSB0aGVtZS5zaGFkb3dzOwogICAgICBpZiAodGhlbWUudHJhbnNpdGlvbnMpCiAgICAgICAgdGhpcy5jdXN0b21UcmFuc2l0aW9ucyA9IHRoZW1lLnRyYW5zaXRpb25zOwogICAgICBpZiAodGhlbWUuY29udHJvbEhlaWdodHMpCiAgICAgICAgdGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cyA9IHRoZW1lLmNvbnRyb2xIZWlnaHRzOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODgodGhpcywgX2N1c3RvbUNvbnRyb2xIZWlnaHRzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODgoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNUaGVtZTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9pbmRleC5qcwppbml0X3RoZW1lKCk7CmluaXRfZ3JvdXBfcnVudGltZSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi8wMF9jb21taXRpbmZvX2RhdGEuanMKdmFyIGNvbW1pdGluZm8gPSB7CiAgbmFtZTogIkBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZyIsCiAgdmVyc2lvbjogIjMuMzcuMSIsCiAgZGVzY3JpcHRpb246ICJBIGNvbXByZWhlbnNpdmUgbGlicmFyeSB0aGF0IHByb3ZpZGVzIGR5bmFtaWMgd2ViIGNvbXBvbmVudHMgZm9yIGJ1aWxkaW5nIHNvcGhpc3RpY2F0ZWQgYW5kIG1vZGVybiB3ZWIgYXBwbGljYXRpb25zIHVzaW5nIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQuIgp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkc29ja2V0QDQuMS4wX0BwdXNoLnJvY2tzK3NtYXJ0c2VydmVAMi4wLjEvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkc29ja2V0L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czMwID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czMwLCB7CiAgVHlwZWRTb2NrZXQ6ICgpID0+IFR5cGVkU29ja2V0Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2lzb2hhc2hAMi4wLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2lzb2hhc2gvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjkgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjksIHsKICBzaGEyNTZGcm9tU3RyaW5nOiAoKSA9PiBzaGEyNTZGcm9tU3RyaW5nMgp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0ZW52QDUuMC41L25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0ZW52L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czI4ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czI4LCB7CiAgU21hcnRlbnY6ICgpID0+IFNtYXJ0ZW52Mgp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0ZW52QDUuMC41L25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0ZW52L2Rpc3RfdHMvc21hcnRlbnYucGx1Z2lucy5qcwp2YXIgc21hcnRwcm9taXNlID0gX190b0VTTShyZXF1aXJlX2Rpc3RfdHMzKCksIDEpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRlbnZANS4wLjUvbm9kZV9tb2R1bGVzL0BwdXNocm9ja3Mvc21hcnRlbnYvZGlzdF90cy9zbWFydGVudi5jbGFzc2VzLnNtYXJ0ZW52LmpzCnZhciBTbWFydGVudjIgPSBjbGFzcyB7CiAgY29uc3RydWN0b3IoKSB7CiAgICB0aGlzLmxvYWRlZFNjcmlwdHMgPSBbXTsKICB9CiAgYXN5bmMgZ2V0RW52QXdhcmVNb2R1bGUob3B0aW9uc0FyZykgewogICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgIGNvbnN0IG1vZHVsZVJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0U2FmZU5vZGVNb2R1bGUob3B0aW9uc0FyZy5ub2RlTW9kdWxlTmFtZSk7CiAgICAgIHJldHVybiBtb2R1bGVSZXN1bHQ7CiAgICB9IGVsc2UgaWYgKHRoaXMuaXNCcm93c2VyKSB7CiAgICAgIGNvbnN0IG1vZHVsZVJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0U2FmZVdlYk1vZHVsZShvcHRpb25zQXJnLndlYlVybEFyZywgb3B0aW9uc0FyZy5nZXRGdW5jdGlvbik7CiAgICAgIHJldHVybiBtb2R1bGVSZXN1bHQ7CiAgICB9IGVsc2UgewogICAgICBjb25zb2xlLmVycm9yKCJwbGF0Zm9ybSBmb3IgbG9hZGluZyBub3Qgc3VwcG9ydGVkIGJ5IHNtYXJ0ZW52Iik7CiAgICB9CiAgfQogIGFzeW5jIGdldFNhZmVOb2RlTW9kdWxlKG1vZHVsZU5hbWVBcmcpIHsKICAgIGlmICghdGhpcy5pc05vZGUpIHsKICAgICAgY29uc29sZS5lcnJvcihgWW91IHRyaWVkIHRvIGxvYWQgYSBub2RlIG1vZHVsZSBpbiBhIHdyb25nIGNvbnRleHQ6ICR7bW9kdWxlTmFtZUFyZ31gKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgcmV0dXJuIG5ldyBGdW5jdGlvbihgcmV0dXJuIGltcG9ydCgnJHttb2R1bGVOYW1lQXJnfScpYCkoKTsKICB9CiAgYXN5bmMgZ2V0U2FmZVdlYk1vZHVsZSh1cmxBcmcsIGdldEZ1bmN0aW9uQXJnKSB7CiAgICBpZiAoIXRoaXMuaXNCcm93c2VyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIllvdSB0cmllZCB0byBsb2FkIGEgd2ViIG1vZHVsZSBpbiBhIHdyb25nIGNvbnRleHQiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRoaXMubG9hZGVkU2NyaXB0cy5pbmNsdWRlcyh1cmxBcmcpKSB7CiAgICAgIHJldHVybiBnZXRGdW5jdGlvbkFyZygpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5sb2FkZWRTY3JpcHRzLnB1c2godXJsQXJnKTsKICAgIH0KICAgIGNvbnN0IGRvbmUgPSBzbWFydHByb21pc2UuZGVmZXIoKTsKICAgIGlmIChnbG9iYWxUaGlzLmltcG9ydFNjcmlwdHMpIHsKICAgICAgZ2xvYmFsVGhpcy5pbXBvcnRTY3JpcHRzKHVybEFyZyk7CiAgICAgIGRvbmUucmVzb2x2ZSgpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7CiAgICAgICAgZG9uZS5yZXNvbHZlKCk7CiAgICAgIH07CiAgICAgIHNjcmlwdC5zcmMgPSB1cmxBcmc7CiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKICAgIH0KICAgIGF3YWl0IGRvbmUucHJvbWlzZTsKICAgIHJldHVybiBnZXRGdW5jdGlvbkFyZygpOwogIH0KICBnZXQgcnVudGltZUVudigpIHsKICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgcmV0dXJuICJub2RlIjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAiYnJvd3NlciI7CiAgICB9CiAgfQogIGdldCBpc0Jyb3dzZXIoKSB7CiAgICByZXR1cm4gIXRoaXMuaXNOb2RlOwogIH0KICBnZXQgdXNlckFnZW50KCkgewogICAgaWYgKHRoaXMuaXNCcm93c2VyKSB7CiAgICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICJ1bmRlZmluZWQiOwogICAgfQogIH0KICBnZXQgaXNOb2RlKCkgewogICAgcmV0dXJuIHRoaXMucnVudGltZUVudiA9PT0gIm5vZGUiOwogIH0KICBnZXQgbm9kZVZlcnNpb24oKSB7CiAgICByZXR1cm4gcHJvY2Vzcy52ZXJzaW9uOwogIH0KICBnZXQgaXNDSSgpIHsKICAgIGlmICh0aGlzLmlzTm9kZSkgewogICAgICBpZiAocHJvY2Vzcy5lbnYuQ0kpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgYXN5bmMgaXNNYWNBc3luYygpIHsKICAgIGlmICh0aGlzLmlzTm9kZSkgewogICAgICBjb25zdCBvcyA9IGF3YWl0IHRoaXMuZ2V0U2FmZU5vZGVNb2R1bGUoIm9zIik7CiAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAiZGFyd2luIjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgYXN5bmMgaXNXaW5kb3dzQXN5bmMoKSB7CiAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgY29uc3Qgb3MgPSBhd2FpdCB0aGlzLmdldFNhZmVOb2RlTW9kdWxlKCJvcyIpOwogICAgICByZXR1cm4gb3MucGxhdGZvcm0oKSA9PT0gIndpbjMyIjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgYXN5bmMgaXNMaW51eEFzeW5jKCkgewogICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgIGNvbnN0IG9zID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKTsKICAgICAgcmV0dXJuIG9zLnBsYXRmb3JtKCkgPT09ICJsaW51eCI7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIC8qKgogICAqIHByaW50cyB0aGUgZW52aXJvbm1lbnQgdG8gY29uc29sZQogICAqLwogIGFzeW5jIHByaW50RW52KCkgewogICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgIGNvbnNvbGUubG9nKCJydW5uaW5nIG9uIE5PREUiKTsKICAgICAgY29uc29sZS5sb2coIm5vZGUgdmVyc2lvbiBpcyAiICsgdGhpcy5ub2RlVmVyc2lvbik7CiAgICB9IGVsc2UgewogICAgICBjb25zb2xlLmxvZygicnVubmluZyBvbiBCUk9XU0VSIik7CiAgICAgIGNvbnNvbGUubG9nKCJicm93c2VyIGlzICIgKyB0aGlzLnVzZXJBZ2VudCk7CiAgICB9CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2lzb2hhc2hAMi4wLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2lzb2hhc2gvZGlzdF90cy9pbmRleC5qcwp2YXIgaGV4MiA9IChidWZmZXIyKSA9PiB7CiAgY29uc3QgaGV4Q29kZXMgPSBbXTsKICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlcjIpOwogIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHZpZXcuYnl0ZUxlbmd0aDsgaTExICs9IDQpIHsKICAgIGNvbnN0IHZhbHVlMiA9IHZpZXcuZ2V0VWludDMyKGkxMSk7CiAgICBjb25zdCBzdHJpbmdWYWx1ZSA9IHZhbHVlMi50b1N0cmluZygxNik7CiAgICBjb25zdCBwYWRkaW5nID0gIjAwMDAwMDAwIjsKICAgIGNvbnN0IHBhZGRlZFZhbHVlID0gKHBhZGRpbmcgKyBzdHJpbmdWYWx1ZSkuc2xpY2UoLXBhZGRpbmcubGVuZ3RoKTsKICAgIGhleENvZGVzLnB1c2gocGFkZGVkVmFsdWUpOwogIH0KICByZXR1cm4gaGV4Q29kZXMuam9pbigiIik7Cn07CnZhciBzaGEyNTZGcm9tU3RyaW5nMiA9IGFzeW5jIChzdHJpbmdBcmcpID0+IHsKICBjb25zdCBzbWFydGVudiA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyOC5TbWFydGVudigpOwogIGlmIChzbWFydGVudi5pc0Jyb3dzZXIpIHsKICAgIGNvbnN0IGJ1ZmZlcjIgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyaW5nQXJnKTsKICAgIGNvbnN0IGhhc2ggPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgiU0hBLTI1NiIsIGJ1ZmZlcjIpOwogICAgY29uc3QgcmVzdWx0ID0gaGV4MihoYXNoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSBlbHNlIGlmIChzbWFydGVudi5pc05vZGUpIHsKICAgIGNvbnN0IHNtYXJ0aGFzaE1vZHVsZSA9IGF3YWl0IHNtYXJ0ZW52LmdldFNhZmVOb2RlTW9kdWxlKCJAcHVzaHJvY2tzL3NtYXJ0aGFzaCIpOwogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc21hcnRoYXNoTW9kdWxlLnNoYTI1NkZyb21TdHJpbmcoc3RyaW5nQXJnKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkc29ja2V0QDQuMS4wX0BwdXNoLnJvY2tzK3NtYXJ0c2VydmVAMi4wLjEvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkc29ja2V0L2Rpc3RfdHMvdHlwZWRzb2NrZXQucGx1Z2lucy5qcwppbml0X2Rpc3RfdHMxNSgpOwppbml0X2Rpc3RfdHM0KCk7CmluaXRfZGlzdF90czMoKTsKaW5pdF9kaXN0X3RzMTIoKTsKaW5pdF9kaXN0X3RzKCk7CmluaXRfZGlzdF90czIoKTsKaW5pdF9kaXN0X3RzMTEoKTsKaW5pdF9kaXN0X3RzMjAoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHNvY2tldEA0LjEuMF9AcHVzaC5yb2NrcytzbWFydHNlcnZlQDIuMC4xL25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHNvY2tldC9kaXN0X3RzL3R5cGVkc29ja2V0LmNsYXNzZXMudHlwZWRzb2NrZXQuanMKdmFyIFRBR19QUkVGSVggPSAiX190eXBlZHNvY2tldF90YWdfXyI7CmZ1bmN0aW9uIHdyYXBTbWFydFNlcnZlUGVlcihwZWVyKSB7CiAgcmV0dXJuIHsKICAgIHBlZXIsCiAgICBhc3luYyBnZXRUYWdCeUlkKHRhZ0lkKSB7CiAgICAgIGlmICghcGVlci50YWdzLmhhcyh0YWdJZCkpIHsKICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9CiAgICAgIGNvbnN0IHBheWxvYWQgPSBwZWVyLmRhdGEuZ2V0KGAke1RBR19QUkVGSVh9JHt0YWdJZH1gKTsKICAgICAgcmV0dXJuIHsgaWQ6IHRhZ0lkLCBwYXlsb2FkIH07CiAgICB9CiAgfTsKfQp2YXIgVHlwZWRTb2NrZXQgPSBjbGFzcyBfVHlwZWRTb2NrZXQgewogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBTVEFUSUMgTUVUSE9EUwogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvKioKICAgKiBDcmVhdGVzIGEgVHlwZWRTb2NrZXQgY2xpZW50IHVzaW5nIG5hdGl2ZSBXZWJTb2NrZXQuCiAgICogV29ya3MgaW4gYm90aCBicm93c2VyIGFuZCBOb2RlLmpzIGVudmlyb25tZW50cy4KICAgKgogICAqIEBwYXJhbSB0eXBlZHJvdXRlckFyZyAtIFR5cGVkUm91dGVyIGZvciBoYW5kbGluZyBzZXJ2ZXItaW5pdGlhdGVkIHJlcXVlc3RzCiAgICogQHBhcmFtIHNlcnZlclVybEFyZyAtIFNlcnZlciBVUkwgKGUuZy4sICdodHRwOi8vbG9jYWxob3N0OjMwMDAnIG9yICd3c3M6Ly9leGFtcGxlLmNvbScpCiAgICogQHBhcmFtIG9wdGlvbnMgLSBDb25uZWN0aW9uIG9wdGlvbnMKICAgKgogICAqIEBleGFtcGxlCiAgICogYGBgdHlwZXNjcmlwdAogICAqIGNvbnN0IHR5cGVkUm91dGVyID0gbmV3IFR5cGVkUm91dGVyKCk7CiAgICogY29uc3QgY2xpZW50ID0gYXdhaXQgVHlwZWRTb2NrZXQuY3JlYXRlQ2xpZW50KAogICAqICAgdHlwZWRSb3V0ZXIsCiAgICogICAnaHR0cDovL2xvY2FsaG9zdDozMDAwJywKICAgKiAgIHsgYXV0b1JlY29ubmVjdDogdHJ1ZSB9CiAgICogKTsKICAgKiBgYGAKICAgKi8KICBzdGF0aWMgYXN5bmMgY3JlYXRlQ2xpZW50KHR5cGVkcm91dGVyQXJnLCBzZXJ2ZXJVcmxBcmcsIG9wdGlvbnMgPSB7fSkgewogICAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gewogICAgICBhdXRvUmVjb25uZWN0OiB0cnVlLAogICAgICBtYXhSZXRyaWVzOiAxMDAsCiAgICAgIGluaXRpYWxCYWNrb2ZmTXM6IDFlMywKICAgICAgbWF4QmFja29mZk1zOiA2ZTQKICAgIH07CiAgICBjb25zdCBvcHRzID0geyAuLi5kZWZhdWx0T3B0aW9uczIsIC4uLm9wdGlvbnMgfTsKICAgIGNvbnN0IHR5cGVkU29ja2V0ID0gbmV3IF9UeXBlZFNvY2tldCgiY2xpZW50IiwgdHlwZWRyb3V0ZXJBcmcpOwogICAgdHlwZWRTb2NrZXQuY2xpZW50T3B0aW9ucyA9IG9wdHM7CiAgICB0eXBlZFNvY2tldC5zZXJ2ZXJVcmwgPSBzZXJ2ZXJVcmxBcmc7CiAgICB0eXBlZFNvY2tldC5jdXJyZW50QmFja29mZiA9IG9wdHMuaW5pdGlhbEJhY2tvZmZNczsKICAgIGF3YWl0IHR5cGVkU29ja2V0LmNvbm5lY3QoKTsKICAgIHJldHVybiB0eXBlZFNvY2tldDsKICB9CiAgc3RhdGljIHsKICAgIHRoaXMudXNlV2luZG93TG9jYXRpb25PcmlnaW5VcmwgPSAoKSA9PiB7CiAgICAgIHJldHVybiBkaXN0X3RzX2V4cG9ydHMyMC5TbWFydHVybC5jcmVhdGVGcm9tVXJsKGdsb2JhbFRoaXMubG9jYXRpb24ub3JpZ2luKS50b1N0cmluZygpOwogICAgfTsKICB9CiAgLyoqCiAgICogQ3JlYXRlcyBhIFR5cGVkU29ja2V0IHNlcnZlciBmcm9tIGFuIGV4aXN0aW5nIFNtYXJ0U2VydmUgaW5zdGFuY2UuCiAgICogVGhpcyBpcyB0aGUgb25seSB3YXkgdG8gY3JlYXRlIGEgc2VydmVyLXNpZGUgVHlwZWRTb2NrZXQuCiAgICoKICAgKiBAcGFyYW0gc21hcnRTZXJ2ZUFyZyAtIFNtYXJ0U2VydmUgaW5zdGFuY2Ugd2l0aCB0eXBlZFJvdXRlciBjb25maWd1cmVkIGluIHdlYnNvY2tldCBvcHRpb25zCiAgICogQHBhcmFtIHR5cGVkUm91dGVyQXJnIC0gVHlwZWRSb3V0ZXIgZm9yIGhhbmRsaW5nIHJlcXVlc3RzIChtdXN0IG1hdGNoIFNtYXJ0U2VydmUncyB0eXBlZFJvdXRlcikKICAgKgogICAqIEBleGFtcGxlCiAgICogYGBgdHlwZXNjcmlwdAogICAqIGNvbnN0IHR5cGVkUm91dGVyID0gbmV3IFR5cGVkUm91dGVyKCk7CiAgICogY29uc3Qgc21hcnRTZXJ2ZSA9IG5ldyBTbWFydFNlcnZlKHsKICAgKiAgIHBvcnQ6IDMwMDAsCiAgICogICB3ZWJzb2NrZXQ6IHsKICAgKiAgICAgdHlwZWRSb3V0ZXIsCiAgICogICAgIG9uQ29ubmVjdGlvbk9wZW46IChwZWVyKSA9PiBwZWVyLnRhZ3MuYWRkKCdjbGllbnQnKQogICAqICAgfQogICAqIH0pOwogICAqIGF3YWl0IHNtYXJ0U2VydmUuc3RhcnQoKTsKICAgKiBjb25zdCB0eXBlZFNvY2tldCA9IFR5cGVkU29ja2V0LmZyb21TbWFydFNlcnZlKHNtYXJ0U2VydmUsIHR5cGVkUm91dGVyKTsKICAgKiBgYGAKICAgKi8KICBzdGF0aWMgZnJvbVNtYXJ0U2VydmUoc21hcnRTZXJ2ZUFyZywgdHlwZWRSb3V0ZXJBcmcpIHsKICAgIGNvbnN0IGNvbm5lY3Rpb25XcmFwcGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBfVHlwZWRTb2NrZXQucmVnaXN0ZXJUYWdIYW5kbGVycyh0eXBlZFJvdXRlckFyZyk7CiAgICBjb25zdCB0eXBlZFNvY2tldCA9IG5ldyBfVHlwZWRTb2NrZXQoInNlcnZlciIsIHR5cGVkUm91dGVyQXJnKTsKICAgIHR5cGVkU29ja2V0LnNtYXJ0U2VydmVSZWYgPSBzbWFydFNlcnZlQXJnOwogICAgdHlwZWRTb2NrZXQuc21hcnRTZXJ2ZUNvbm5lY3Rpb25XcmFwcGVycyA9IGNvbm5lY3Rpb25XcmFwcGVyczsKICAgIHJldHVybiB0eXBlZFNvY2tldDsKICB9CiAgLyoqCiAgICogUmVnaXN0ZXJzIGJ1aWx0LWluIFR5cGVkSGFuZGxlcnMgZm9yIHRhZyBtYW5hZ2VtZW50CiAgICovCiAgc3RhdGljIHJlZ2lzdGVyVGFnSGFuZGxlcnModHlwZWRSb3V0ZXIpIHsKICAgIHR5cGVkUm91dGVyLmFkZFR5cGVkSGFuZGxlcihuZXcgZGlzdF90c19leHBvcnRzMTUuVHlwZWRIYW5kbGVyKCJfX3R5cGVkc29ja2V0X3NldFRhZyIsIGFzeW5jIChkYXRhLCBtZXRhKSA9PiB7CiAgICAgIGNvbnN0IHBlZXIgPSBtZXRhPy5sb2NhbERhdGE/LnBlZXI7CiAgICAgIGlmICghcGVlcikgewogICAgICAgIGNvbnNvbGUud2Fybigic2V0VGFnOiBObyBwZWVyIGZvdW5kIGluIHJlcXVlc3QgY29udGV4dCIpOwogICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlIH07CiAgICAgIH0KICAgICAgcGVlci50YWdzLmFkZChkYXRhLm5hbWUpOwogICAgICBwZWVyLmRhdGEuc2V0KGAke1RBR19QUkVGSVh9JHtkYXRhLm5hbWV9YCwgZGF0YS5wYXlsb2FkKTsKICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9OwogICAgfSkpOwogICAgdHlwZWRSb3V0ZXIuYWRkVHlwZWRIYW5kbGVyKG5ldyBkaXN0X3RzX2V4cG9ydHMxNS5UeXBlZEhhbmRsZXIoIl9fdHlwZWRzb2NrZXRfcmVtb3ZlVGFnIiwgYXN5bmMgKGRhdGEsIG1ldGEpID0+IHsKICAgICAgY29uc3QgcGVlciA9IG1ldGE/LmxvY2FsRGF0YT8ucGVlcjsKICAgICAgaWYgKCFwZWVyKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJyZW1vdmVUYWc6IE5vIHBlZXIgZm91bmQgaW4gcmVxdWVzdCBjb250ZXh0Iik7CiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UgfTsKICAgICAgfQogICAgICBwZWVyLnRhZ3MuZGVsZXRlKGRhdGEubmFtZSk7CiAgICAgIHBlZXIuZGF0YS5kZWxldGUoYCR7VEFHX1BSRUZJWH0ke2RhdGEubmFtZX1gKTsKICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9OwogICAgfSkpOwogIH0KICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLy8gQ09OU1RSVUNUT1IKICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgY29uc3RydWN0b3Ioc2lkZUFyZywgdHlwZWRyb3V0ZXJBcmcpIHsKICAgIHRoaXMuc3RhdHVzU3ViamVjdCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLnJ4anMuU3ViamVjdCgpOwogICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzID0gIm5ldyI7CiAgICB0aGlzLndlYnNvY2tldCA9IG51bGw7CiAgICB0aGlzLmNsaWVudE9wdGlvbnMgPSBudWxsOwogICAgdGhpcy5zZXJ2ZXJVcmwgPSAiIjsKICAgIHRoaXMucmV0cnlDb3VudCA9IDA7CiAgICB0aGlzLmN1cnJlbnRCYWNrb2ZmID0gMWUzOwogICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgdGhpcy5zbWFydFNlcnZlUmVmID0gbnVsbDsKICAgIHRoaXMuc21hcnRTZXJ2ZUNvbm5lY3Rpb25XcmFwcGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICB0aGlzLnNpZGUgPSBzaWRlQXJnOwogICAgdGhpcy50eXBlZHJvdXRlciA9IHR5cGVkcm91dGVyQXJnOwogIH0KICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLy8gQ0xJRU5UIE1FVEhPRFMKICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLyoqCiAgICogQ29ubmVjdHMgdGhlIGNsaWVudCB0byB0aGUgc2VydmVyIHVzaW5nIG5hdGl2ZSBXZWJTb2NrZXQKICAgKi8KICBhc3luYyBjb25uZWN0KCkgewogICAgY29uc3QgZG9uZSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgdGhpcy51cGRhdGVTdGF0dXMoImNvbm5lY3RpbmciKTsKICAgIGNvbnN0IHdzVXJsID0gdGhpcy50b1dlYlNvY2tldFVybCh0aGlzLnNlcnZlclVybCk7CiAgICBjb25zb2xlLmxvZyhgVHlwZWRTb2NrZXQgY29ubmVjdGluZyB0byAke3dzVXJsfS4uLmApOwogICAgdGhpcy53ZWJzb2NrZXQgPSBuZXcgV2ViU29ja2V0KHdzVXJsKTsKICAgIGNvbnN0IGNvbm5lY3Rpb25UaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMgIT09ICJjb25uZWN0ZWQiKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJUeXBlZFNvY2tldCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKICAgICAgICB0aGlzLndlYnNvY2tldD8uY2xvc2UoKTsKICAgICAgICBkb25lLnJlamVjdChuZXcgRXJyb3IoIkNvbm5lY3Rpb24gdGltZW91dCIpKTsKICAgICAgfQogICAgfSwgMWU0KTsKICAgIHRoaXMud2Vic29ja2V0Lm9ub3BlbiA9ICgpID0+IHsKICAgICAgY2xlYXJUaW1lb3V0KGNvbm5lY3Rpb25UaW1lb3V0KTsKICAgICAgY29uc29sZS5sb2coIlR5cGVkU29ja2V0IGNvbm5lY3RlZCEiKTsKICAgICAgdGhpcy51cGRhdGVTdGF0dXMoImNvbm5lY3RlZCIpOwogICAgICB0aGlzLnJldHJ5Q291bnQgPSAwOwogICAgICB0aGlzLmN1cnJlbnRCYWNrb2ZmID0gdGhpcy5jbGllbnRPcHRpb25zPy5pbml0aWFsQmFja29mZk1zID8/IDFlMzsKICAgICAgZG9uZS5yZXNvbHZlKCk7CiAgICB9OwogICAgdGhpcy53ZWJzb2NrZXQub25tZXNzYWdlID0gYXN5bmMgKGV2ZW50KSA9PiB7CiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlTWVzc2FnZShldmVudC5kYXRhKTsKICAgIH07CiAgICB0aGlzLndlYnNvY2tldC5vbmNsb3NlID0gKCkgPT4gewogICAgICBjbGVhclRpbWVvdXQoY29ubmVjdGlvblRpbWVvdXQpOwogICAgICB0aGlzLmhhbmRsZURpc2Nvbm5lY3QoKTsKICAgIH07CiAgICB0aGlzLndlYnNvY2tldC5vbmVycm9yID0gKGVycm9yKSA9PiB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIlR5cGVkU29ja2V0IFdlYlNvY2tldCBlcnJvcjoiLCBlcnJvcik7CiAgICB9OwogICAgdHJ5IHsKICAgICAgYXdhaXQgZG9uZS5wcm9taXNlOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNsZWFyVGltZW91dChjb25uZWN0aW9uVGltZW91dCk7CiAgICAgIGlmICh0aGlzLmNsaWVudE9wdGlvbnM/LmF1dG9SZWNvbm5lY3QpIHsKICAgICAgICBhd2FpdCB0aGlzLnNjaGVkdWxlUmVjb25uZWN0KCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgZXJyOwogICAgICB9CiAgICB9CiAgfQogIC8qKgogICAqIENvbnZlcnRzIGFuIEhUVFAoUykgVVJMIHRvIGEgV2ViU29ja2V0IFVSTAogICAqLwogIHRvV2ViU29ja2V0VXJsKHVybCkgewogICAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpOwogICAgY29uc3Qgd3NQcm90b2NvbCA9IHBhcnNlZC5wcm90b2NvbCA9PT0gImh0dHBzOiIgPyAid3NzOiIgOiAid3M6IjsKICAgIHJldHVybiBgJHt3c1Byb3RvY29sfS8vJHtwYXJzZWQuaG9zdH0ke3BhcnNlZC5wYXRobmFtZX1gOwogIH0KICAvKioKICAgKiBIYW5kbGVzIGluY29taW5nIFdlYlNvY2tldCBtZXNzYWdlcwogICAqLwogIGFzeW5jIGhhbmRsZU1lc3NhZ2UoZGF0YSkgewogICAgdHJ5IHsKICAgICAgY29uc3QgbWVzc2FnZVRleHQgPSB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgPyBkYXRhIDogbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGRhdGEpOwogICAgICBjb25zdCBtZXNzYWdlMiA9IGRpc3RfdHNfZXhwb3J0czEyLnBhcnNlKG1lc3NhZ2VUZXh0KTsKICAgICAgaWYgKG1lc3NhZ2UyLmNvcnJlbGF0aW9uPy5pZCAmJiB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5oYXMobWVzc2FnZTIuY29ycmVsYXRpb24uaWQpKSB7CiAgICAgICAgY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ1JlcXVlc3RzLmdldChtZXNzYWdlMi5jb3JyZWxhdGlvbi5pZCk7CiAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKG1lc3NhZ2UyLmNvcnJlbGF0aW9uLmlkKTsKICAgICAgICBwZW5kaW5nLnJlc29sdmUobWVzc2FnZTIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMudHlwZWRyb3V0ZXIucm91dGVBbmRBZGRSZXNwb25zZShtZXNzYWdlMik7CiAgICAgIGlmIChyZXNwb25zZSAmJiB0aGlzLndlYnNvY2tldD8ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHsKICAgICAgICB0aGlzLndlYnNvY2tldC5zZW5kKGRpc3RfdHNfZXhwb3J0czEyLnN0cmluZ2lmeShyZXNwb25zZSkpOwogICAgICB9CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiVHlwZWRTb2NrZXQgZmFpbGVkIHRvIHByb2Nlc3MgbWVzc2FnZToiLCBlcnIpOwogICAgfQogIH0KICAvKioKICAgKiBIYW5kbGVzIFdlYlNvY2tldCBkaXNjb25uZWN0aW9uCiAgICovCiAgaGFuZGxlRGlzY29ubmVjdCgpIHsKICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMgPT09ICJkaXNjb25uZWN0ZWQiKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMudXBkYXRlU3RhdHVzKCJkaXNjb25uZWN0ZWQiKTsKICAgIGlmICh0aGlzLmNsaWVudE9wdGlvbnM/LmF1dG9SZWNvbm5lY3QgJiYgdGhpcy5yZXRyeUNvdW50IDwgdGhpcy5jbGllbnRPcHRpb25zLm1heFJldHJpZXMpIHsKICAgICAgdGhpcy5zY2hlZHVsZVJlY29ubmVjdCgpOwogICAgfQogIH0KICAvKioKICAgKiBTY2hlZHVsZXMgYSByZWNvbm5lY3Rpb24gYXR0ZW1wdCB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYKICAgKi8KICBhc3luYyBzY2hlZHVsZVJlY29ubmVjdCgpIHsKICAgIGlmICghdGhpcy5jbGllbnRPcHRpb25zKQogICAgICByZXR1cm47CiAgICB0aGlzLnVwZGF0ZVN0YXR1cygicmVjb25uZWN0aW5nIik7CiAgICB0aGlzLnJldHJ5Q291bnQrKzsKICAgIGNvbnN0IGppdHRlciA9IHRoaXMuY3VycmVudEJhY2tvZmYgKiAwLjIgKiAoTWF0aC5yYW5kb20oKSAqIDIgLSAxKTsKICAgIGNvbnN0IGRlbGF5MiA9IE1hdGgubWluKHRoaXMuY3VycmVudEJhY2tvZmYgKyBqaXR0ZXIsIHRoaXMuY2xpZW50T3B0aW9ucy5tYXhCYWNrb2ZmTXMpOwogICAgY29uc29sZS5sb2coYFR5cGVkU29ja2V0IHJlY29ubmVjdGluZyBpbiAke01hdGgucm91bmQoZGVsYXkyKX1tcyAoYXR0ZW1wdCAke3RoaXMucmV0cnlDb3VudH0vJHt0aGlzLmNsaWVudE9wdGlvbnMubWF4UmV0cmllc30pYCk7CiAgICBhd2FpdCBkaXN0X3RzX2V4cG9ydHMzLmRlbGF5Rm9yKGRlbGF5Mik7CiAgICB0aGlzLmN1cnJlbnRCYWNrb2ZmID0gTWF0aC5taW4odGhpcy5jdXJyZW50QmFja29mZiAqIDIsIHRoaXMuY2xpZW50T3B0aW9ucy5tYXhCYWNrb2ZmTXMpOwogICAgdHJ5IHsKICAgICAgYXdhaXQgdGhpcy5jb25uZWN0KCk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiVHlwZWRTb2NrZXQgcmVjb25uZWN0aW9uIGZhaWxlZDoiLCBlcnIpOwogICAgfQogIH0KICAvKioKICAgKiBVcGRhdGVzIGNvbm5lY3Rpb24gc3RhdHVzIGFuZCBub3RpZmllcyBzdWJzY3JpYmVycwogICAqLwogIHVwZGF0ZVN0YXR1cyhzdGF0dXMpIHsKICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMgIT09IHN0YXR1cykgewogICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMgPSBzdGF0dXM7CiAgICAgIHRoaXMuc3RhdHVzU3ViamVjdC5uZXh0KHN0YXR1cyk7CiAgICB9CiAgfQogIC8qKgogICAqIFNlbmRzIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIGFuZCB3YWl0cyBmb3IgcmVzcG9uc2UgKGNsaWVudC1zaWRlKQogICAqLwogIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QpIHsKICAgIGlmICghdGhpcy53ZWJzb2NrZXQgfHwgdGhpcy53ZWJzb2NrZXQucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0Lk9QRU4pIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXZWJTb2NrZXQgbm90IGNvbm5lY3RlZCIpOwogICAgfQogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgIGNvbnN0IHRpbWVvdXQyID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKHJlcXVlc3QuY29ycmVsYXRpb24uaWQpOwogICAgICAgIHJlamVjdChuZXcgRXJyb3IoIlJlcXVlc3QgdGltZW91dCIpKTsKICAgICAgfSwgM2U0KTsKICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMuc2V0KHJlcXVlc3QuY29ycmVsYXRpb24uaWQsIHsKICAgICAgICByZXNvbHZlOiAocmVzcG9uc2UpID0+IHsKICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0Mik7CiAgICAgICAgICByZXNvbHZlMihyZXNwb25zZSk7CiAgICAgICAgfSwKICAgICAgICByZWplY3Q6IChlcnJvcikgPT4gewogICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTsKICAgICAgICAgIHJlamVjdChlcnJvcik7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy53ZWJzb2NrZXQuc2VuZChkaXN0X3RzX2V4cG9ydHMxMi5zdHJpbmdpZnkocmVxdWVzdCkpOwogICAgfSk7CiAgfQogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBQVUJMSUMgQVBJIC0gU0hBUkVECiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC8qKgogICAqIENyZWF0ZXMgYSBUeXBlZFJlcXVlc3QgZm9yIHRoZSBzcGVjaWZpZWQgbWV0aG9kLgogICAqIE9uIGNsaWVudHMsIHNlbmRzIHRvIHRoZSBzZXJ2ZXIuCiAgICogT24gc2VydmVycywgc2VuZHMgdG8gdGhlIHNwZWNpZmllZCB0YXJnZXQgY29ubmVjdGlvbi4KICAgKi8KICBjcmVhdGVUeXBlZFJlcXVlc3QobWV0aG9kTmFtZSwgdGFyZ2V0Q29ubmVjdGlvbikgewogICAgY29uc3QgcG9zdE1ldGhvZCA9IGFzeW5jIChyZXF1ZXN0RGF0YUFyZykgPT4gewogICAgICBpZiAodGhpcy5zaWRlID09PSAiY2xpZW50IikgewogICAgICAgIHJldHVybiB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3REYXRhQXJnKTsKICAgICAgfQogICAgICBpZiAoIXRoaXMuc21hcnRTZXJ2ZVJlZikgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiU2VydmVyIG5vdCBpbml0aWFsaXplZCIpOwogICAgICB9CiAgICAgIGxldCB0YXJnZXQgPSB0YXJnZXRDb25uZWN0aW9uOwogICAgICBpZiAoIXRhcmdldCkgewogICAgICAgIGNvbnN0IGFsbENvbm5lY3Rpb25zID0gdGhpcy5zbWFydFNlcnZlUmVmLmdldFdlYlNvY2tldENvbm5lY3Rpb25zKCk7CiAgICAgICAgaWYgKGFsbENvbm5lY3Rpb25zLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgY29uc3QgcGVlciA9IGFsbENvbm5lY3Rpb25zWzBdOwogICAgICAgICAgdGFyZ2V0ID0gdGhpcy5nZXRPckNyZWF0ZVdyYXBwZXIocGVlcik7CiAgICAgICAgfSBlbHNlIGlmIChhbGxDb25uZWN0aW9ucy5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gV2ViU29ja2V0IGNvbm5lY3Rpb25zIGF2YWlsYWJsZSIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk11bHRpcGxlIGNvbm5lY3Rpb25zIGF2YWlsYWJsZSAtIHNwZWNpZnkgdGFyZ2V0Q29ubmVjdGlvbiIpOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBpbnRlcmVzdCA9IGF3YWl0IHRoaXMudHlwZWRyb3V0ZXIuZmlyZUV2ZW50SW50ZXJlc3RNYXAuYWRkSW50ZXJlc3QocmVxdWVzdERhdGFBcmcuY29ycmVsYXRpb24uaWQsIHJlcXVlc3REYXRhQXJnKTsKICAgICAgdGFyZ2V0LnBlZXIuc2VuZChkaXN0X3RzX2V4cG9ydHMxMi5zdHJpbmdpZnkocmVxdWVzdERhdGFBcmcpKTsKICAgICAgcmV0dXJuIGF3YWl0IGludGVyZXN0LmludGVyZXN0RnVsbGZpbGxlZDsKICAgIH07CiAgICByZXR1cm4gbmV3IGRpc3RfdHNfZXhwb3J0czE1LlR5cGVkUmVxdWVzdChuZXcgZGlzdF90c19leHBvcnRzMTUuVHlwZWRUYXJnZXQoeyBwb3N0TWV0aG9kIH0pLCBtZXRob2ROYW1lKTsKICB9CiAgLyoqCiAgICogR2V0cyB0aGUgY3VycmVudCBjb25uZWN0aW9uIHN0YXR1cwogICAqLwogIGdldFN0YXR1cygpIHsKICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25TdGF0dXM7CiAgfQogIC8qKgogICAqIFN0b3BzIHRoZSBUeXBlZFNvY2tldCBjbGllbnQgb3IgY2xlYW5zIHVwIHNlcnZlciBzdGF0ZQogICAqLwogIGFzeW5jIHN0b3AoKSB7CiAgICBpZiAodGhpcy5zaWRlID09PSAiY2xpZW50IikgewogICAgICBpZiAodGhpcy5jbGllbnRPcHRpb25zKSB7CiAgICAgICAgdGhpcy5jbGllbnRPcHRpb25zLmF1dG9SZWNvbm5lY3QgPSBmYWxzZTsKICAgICAgfQogICAgICBpZiAodGhpcy53ZWJzb2NrZXQpIHsKICAgICAgICB0aGlzLndlYnNvY2tldC5jbG9zZSgpOwogICAgICAgIHRoaXMud2Vic29ja2V0ID0gbnVsbDsKICAgICAgfQogICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5jbGVhcigpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5zbWFydFNlcnZlQ29ubmVjdGlvbldyYXBwZXJzLmNsZWFyKCk7CiAgICB9CiAgfQogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBDTElFTlQtT05MWSBNRVRIT0RTCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC8qKgogICAqIFNldHMgYSB0YWcgb24gdGhpcyBjbGllbnQgY29ubmVjdGlvbi4KICAgKiBUYWdzIGFyZSBzdG9yZWQgb24gdGhlIHNlcnZlciBhbmQgY2FuIGJlIHVzZWQgZm9yIGZpbHRlcmluZy4KICAgKiBAY2xpZW50LW9ubHkKICAgKi8KICBhc3luYyBzZXRUYWcobmFtZSwgcGF5bG9hZCkgewogICAgaWYgKHRoaXMuc2lkZSAhPT0gImNsaWVudCIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJzZXRUYWcgaXMgb25seSBhdmFpbGFibGUgb24gY2xpZW50cyIpOwogICAgfQogICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuY3JlYXRlVHlwZWRSZXF1ZXN0KCJfX3R5cGVkc29ja2V0X3NldFRhZyIpOwogICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0LmZpcmUoeyBuYW1lLCBwYXlsb2FkIH0pOwogICAgaWYgKCFyZXNwb25zZS5zdWNjZXNzKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNldCB0YWcgb24gc2VydmVyIik7CiAgICB9CiAgfQogIC8qKgogICAqIFJlbW92ZXMgYSB0YWcgZnJvbSB0aGlzIGNsaWVudCBjb25uZWN0aW9uLgogICAqIEBjbGllbnQtb25seQogICAqLwogIGFzeW5jIHJlbW92ZVRhZyhuYW1lKSB7CiAgICBpZiAodGhpcy5zaWRlICE9PSAiY2xpZW50IikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoInJlbW92ZVRhZyBpcyBvbmx5IGF2YWlsYWJsZSBvbiBjbGllbnRzIik7CiAgICB9CiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5jcmVhdGVUeXBlZFJlcXVlc3QoIl9fdHlwZWRzb2NrZXRfcmVtb3ZlVGFnIik7CiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QuZmlyZSh7IG5hbWUgfSk7CiAgICBpZiAoIXJlc3BvbnNlLnN1Y2Nlc3MpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gcmVtb3ZlIHRhZyBvbiBzZXJ2ZXIiKTsKICAgIH0KICB9CiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC8vIFNFUlZFUi1PTkxZIE1FVEhPRFMKICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLyoqCiAgICogR2V0cyBvciBjcmVhdGVzIGEgY29ubmVjdGlvbiB3cmFwcGVyIGZvciBhIHBlZXIKICAgKi8KICBnZXRPckNyZWF0ZVdyYXBwZXIocGVlcikgewogICAgbGV0IHdyYXBwZXIgPSB0aGlzLnNtYXJ0U2VydmVDb25uZWN0aW9uV3JhcHBlcnMuZ2V0KHBlZXIuaWQpOwogICAgaWYgKCF3cmFwcGVyKSB7CiAgICAgIHdyYXBwZXIgPSB3cmFwU21hcnRTZXJ2ZVBlZXIocGVlcik7CiAgICAgIHRoaXMuc21hcnRTZXJ2ZUNvbm5lY3Rpb25XcmFwcGVycy5zZXQocGVlci5pZCwgd3JhcHBlcik7CiAgICB9CiAgICByZXR1cm4gd3JhcHBlcjsKICB9CiAgLyoqCiAgICogRmluZHMgYWxsIGNvbm5lY3Rpb25zIG1hdGNoaW5nIHRoZSBmaWx0ZXIgZnVuY3Rpb24uCiAgICogQHNlcnZlci1vbmx5CiAgICovCiAgYXN5bmMgZmluZEFsbFRhcmdldENvbm5lY3Rpb25zKGFzeW5jRmluZEZ1bmNBcmcpIHsKICAgIGlmICh0aGlzLnNpZGUgIT09ICJzZXJ2ZXIiIHx8ICF0aGlzLnNtYXJ0U2VydmVSZWYpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJmaW5kQWxsVGFyZ2V0Q29ubmVjdGlvbnMgaXMgb25seSBhdmFpbGFibGUgb24gc2VydmVycyIpOwogICAgfQogICAgY29uc3QgbWF0Y2hpbmdDb25uZWN0aW9ucyA9IFtdOwogICAgZm9yIChjb25zdCBwZWVyIG9mIHRoaXMuc21hcnRTZXJ2ZVJlZi5nZXRXZWJTb2NrZXRDb25uZWN0aW9ucygpKSB7CiAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmdldE9yQ3JlYXRlV3JhcHBlcihwZWVyKTsKICAgICAgaWYgKGF3YWl0IGFzeW5jRmluZEZ1bmNBcmcod3JhcHBlcikpIHsKICAgICAgICBtYXRjaGluZ0Nvbm5lY3Rpb25zLnB1c2god3JhcHBlcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBtYXRjaGluZ0Nvbm5lY3Rpb25zOwogIH0KICAvKioKICAgKiBGaW5kcyB0aGUgZmlyc3QgY29ubmVjdGlvbiBtYXRjaGluZyB0aGUgZmlsdGVyIGZ1bmN0aW9uLgogICAqIEBzZXJ2ZXItb25seQogICAqLwogIGFzeW5jIGZpbmRUYXJnZXRDb25uZWN0aW9uKGFzeW5jRmluZEZ1bmNBcmcpIHsKICAgIGNvbnN0IGFsbE1hdGNoaW5nID0gYXdhaXQgdGhpcy5maW5kQWxsVGFyZ2V0Q29ubmVjdGlvbnMoYXN5bmNGaW5kRnVuY0FyZyk7CiAgICByZXR1cm4gYWxsTWF0Y2hpbmdbMF07CiAgfQogIC8qKgogICAqIEZpbmRzIGFsbCBjb25uZWN0aW9ucyB3aXRoIHRoZSBzcGVjaWZpZWQgdGFnLgogICAqIEBzZXJ2ZXItb25seQogICAqLwogIGFzeW5jIGZpbmRBbGxUYXJnZXRDb25uZWN0aW9uc0J5VGFnKGtleUFyZywgcGF5bG9hZEFyZykgewogICAgaWYgKHRoaXMuc2lkZSAhPT0gInNlcnZlciIgfHwgIXRoaXMuc21hcnRTZXJ2ZVJlZikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoImZpbmRBbGxUYXJnZXRDb25uZWN0aW9uc0J5VGFnIGlzIG9ubHkgYXZhaWxhYmxlIG9uIHNlcnZlcnMiKTsKICAgIH0KICAgIGNvbnN0IHBlZXJzID0gdGhpcy5zbWFydFNlcnZlUmVmLmdldFdlYlNvY2tldENvbm5lY3Rpb25zQnlUYWcoa2V5QXJnKTsKICAgIGNvbnN0IHJlc3VsdHMgPSBbXTsKICAgIGZvciAoY29uc3QgcGVlciBvZiBwZWVycykgewogICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5nZXRPckNyZWF0ZVdyYXBwZXIocGVlcik7CiAgICAgIGlmIChwYXlsb2FkQXJnICE9PSB2b2lkIDApIHsKICAgICAgICBjb25zdCB0YWcgPSBhd2FpdCB3cmFwcGVyLmdldFRhZ0J5SWQoa2V5QXJnKTsKICAgICAgICBpZiAoZGlzdF90c19leHBvcnRzMTIuc3RyaW5naWZ5KHRhZz8ucGF5bG9hZCkgIT09IGRpc3RfdHNfZXhwb3J0czEyLnN0cmluZ2lmeShwYXlsb2FkQXJnKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlc3VsdHMucHVzaCh3cmFwcGVyKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvKioKICAgKiBGaW5kcyB0aGUgZmlyc3QgY29ubmVjdGlvbiB3aXRoIHRoZSBzcGVjaWZpZWQgdGFnLgogICAqIEBzZXJ2ZXItb25seQogICAqLwogIGFzeW5jIGZpbmRUYXJnZXRDb25uZWN0aW9uQnlUYWcoa2V5QXJnLCBwYXlsb2FkQXJnKSB7CiAgICBjb25zdCBhbGxSZXN1bHRzID0gYXdhaXQgdGhpcy5maW5kQWxsVGFyZ2V0Q29ubmVjdGlvbnNCeVRhZyhrZXlBcmcsIHBheWxvYWRBcmcpOwogICAgcmV0dXJuIGFsbFJlc3VsdHNbMF07CiAgfQp9OwoKLy8gdHNfd2ViL3BsdWdpbnMudHMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMTUoKTsKaW5pdF9kaXN0X3RzMigpOwp2YXIgaHRtbDcgPSBiMjsKdmFyIGNzczIgPSBpOwp2YXIgY3NzTWFuYWdlcjIgPSBjc3NNYW5hZ2VyOwp2YXIgY3VzdG9tRWxlbWVudCA9IHQ0Owp2YXIgcHJvcGVydHkgPSBuNTsKdmFyIHN0YXRlID0gcjU7CnZhciBEZWVzRWxlbWVudDIgPSBEZWVzRWxlbWVudDsKCi8vIHRzX3dlYi9zZXJ2aWNlcy9hcGkuc2VydmljZS50cwp2YXIgQXBpU2VydmljZSA9IGNsYXNzIHsKICBiYXNlVXJsOwogIGNvbnN0cnVjdG9yKCkgewogICAgdGhpcy5iYXNlVXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiArICIvdHlwZWRyZXF1ZXN0IjsKICB9CiAgLyoqCiAgICogTWFrZSBhIHR5cGVkIHJlcXVlc3QgdG8gdGhlIGJhY2tlbmQKICAgKi8KICBhc3luYyByZXF1ZXN0KG1ldGhvZCwgcmVxdWVzdERhdGEpIHsKICAgIGNvbnN0IHR5cGVkUmVxdWVzdCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxNS5UeXBlZFJlcXVlc3QodGhpcy5iYXNlVXJsLCBtZXRob2QpOwogICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0eXBlZFJlcXVlc3QuZmlyZShyZXF1ZXN0RGF0YSk7CiAgICByZXR1cm4gcmVzcG9uc2U7CiAgfQogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBTMyBBUEkgTWV0aG9kcwogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICBhc3luYyBsaXN0QnVja2V0cygpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgibGlzdEJ1Y2tldHMiLCB7fSk7CiAgICByZXR1cm4gcmVzdWx0LmJ1Y2tldHM7CiAgfQogIGFzeW5jIGNyZWF0ZUJ1Y2tldChidWNrZXROYW1lKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoCiAgICAgICJjcmVhdGVCdWNrZXQiLAogICAgICB7IGJ1Y2tldE5hbWUgfQogICAgKTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgZGVsZXRlQnVja2V0KGJ1Y2tldE5hbWUpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgKICAgICAgImRlbGV0ZUJ1Y2tldCIsCiAgICAgIHsgYnVja2V0TmFtZSB9CiAgICApOwogICAgcmV0dXJuIHJlc3VsdC5zdWNjZXNzOwogIH0KICBhc3luYyBsaXN0T2JqZWN0cyhidWNrZXROYW1lLCBwcmVmaXg0LCBkZWxpbWl0ZXIpIHsKICAgIHJldHVybiB0aGlzLnJlcXVlc3QoImxpc3RPYmplY3RzIiwgeyBidWNrZXROYW1lLCBwcmVmaXg6IHByZWZpeDQsIGRlbGltaXRlciB9KTsKICB9CiAgYXN5bmMgZ2V0T2JqZWN0KGJ1Y2tldE5hbWUsIGtleTIpIHsKICAgIHJldHVybiB0aGlzLnJlcXVlc3QoImdldE9iamVjdCIsIHsgYnVja2V0TmFtZSwga2V5OiBrZXkyIH0pOwogIH0KICBhc3luYyBnZXRPYmplY3RNZXRhZGF0YShidWNrZXROYW1lLCBrZXkyKSB7CiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCJnZXRPYmplY3RNZXRhZGF0YSIsIHsgYnVja2V0TmFtZSwga2V5OiBrZXkyIH0pOwogIH0KICBhc3luYyBwdXRPYmplY3QoYnVja2V0TmFtZSwga2V5MiwgY29udGVudDMsIGNvbnRlbnRUeXBlKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoInB1dE9iamVjdCIsIHsgYnVja2V0TmFtZSwga2V5OiBrZXkyLCBjb250ZW50OiBjb250ZW50MywgY29udGVudFR5cGUgfSk7CiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3M7CiAgfQogIGFzeW5jIGRlbGV0ZU9iamVjdChidWNrZXROYW1lLCBrZXkyKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoImRlbGV0ZU9iamVjdCIsIHsgYnVja2V0TmFtZSwga2V5OiBrZXkyIH0pOwogICAgcmV0dXJuIHJlc3VsdC5zdWNjZXNzOwogIH0KICBhc3luYyBkZWxldGVQcmVmaXgoYnVja2V0TmFtZSwgcHJlZml4NCkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJkZWxldGVQcmVmaXgiLCB7IGJ1Y2tldE5hbWUsIHByZWZpeDogcHJlZml4NCB9KTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgZ2V0T2JqZWN0VXJsKGJ1Y2tldE5hbWUsIGtleTIpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgiZ2V0T2JqZWN0VXJsIiwgeyBidWNrZXROYW1lLCBrZXk6IGtleTIgfSk7CiAgICByZXR1cm4gcmVzdWx0LnVybDsKICB9CiAgYXN5bmMgY29weU9iamVjdChzb3VyY2VCdWNrZXQsIHNvdXJjZUtleSwgZGVzdEJ1Y2tldCwgZGVzdEtleSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJjb3B5T2JqZWN0IiwgeyBzb3VyY2VCdWNrZXQsIHNvdXJjZUtleSwgZGVzdEJ1Y2tldCwgZGVzdEtleSB9KTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC8vIE1vbmdvREIgQVBJIE1ldGhvZHMKICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgYXN5bmMgbGlzdERhdGFiYXNlcygpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgKICAgICAgImxpc3REYXRhYmFzZXMiLAogICAgICB7fQogICAgKTsKICAgIHJldHVybiByZXN1bHQuZGF0YWJhc2VzOwogIH0KICBhc3luYyBjcmVhdGVEYXRhYmFzZShkYXRhYmFzZU5hbWUpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgKICAgICAgImNyZWF0ZURhdGFiYXNlIiwKICAgICAgeyBkYXRhYmFzZU5hbWUgfQogICAgKTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgZHJvcERhdGFiYXNlKGRhdGFiYXNlTmFtZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KAogICAgICAiZHJvcERhdGFiYXNlIiwKICAgICAgeyBkYXRhYmFzZU5hbWUgfQogICAgKTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgbGlzdENvbGxlY3Rpb25zKGRhdGFiYXNlTmFtZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJsaXN0Q29sbGVjdGlvbnMiLCB7IGRhdGFiYXNlTmFtZSB9KTsKICAgIHJldHVybiByZXN1bHQuY29sbGVjdGlvbnM7CiAgfQogIGFzeW5jIGNyZWF0ZUNvbGxlY3Rpb24oZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJjcmVhdGVDb2xsZWN0aW9uIiwgeyBkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lIH0pOwogICAgcmV0dXJuIHJlc3VsdC5zdWNjZXNzOwogIH0KICBhc3luYyBkcm9wQ29sbGVjdGlvbihkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoImRyb3BDb2xsZWN0aW9uIiwgeyBkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lIH0pOwogICAgcmV0dXJuIHJlc3VsdC5zdWNjZXNzOwogIH0KICBhc3luYyBmaW5kRG9jdW1lbnRzKGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUsIG9wdGlvbnMpIHsKICAgIHJldHVybiB0aGlzLnJlcXVlc3QoImZpbmREb2N1bWVudHMiLCB7CiAgICAgIGRhdGFiYXNlTmFtZSwKICAgICAgY29sbGVjdGlvbk5hbWUsCiAgICAgIC4uLm9wdGlvbnMKICAgIH0pOwogIH0KICBhc3luYyBnZXREb2N1bWVudChkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBkb2N1bWVudElkKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoImdldERvY3VtZW50IiwgeyBkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBkb2N1bWVudElkIH0pOwogICAgcmV0dXJuIHJlc3VsdC5kb2N1bWVudDsKICB9CiAgYXN5bmMgaW5zZXJ0RG9jdW1lbnQoZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwgZG9jdW1lbnQ0KSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoImluc2VydERvY3VtZW50IiwgeyBkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBkb2N1bWVudDogZG9jdW1lbnQ0IH0pOwogICAgcmV0dXJuIHJlc3VsdC5pbnNlcnRlZElkOwogIH0KICBhc3luYyB1cGRhdGVEb2N1bWVudChkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBkb2N1bWVudElkLCB1cGRhdGUpIHsKICAgIHJldHVybiB0aGlzLnJlcXVlc3QoInVwZGF0ZURvY3VtZW50IiwgewogICAgICBkYXRhYmFzZU5hbWUsCiAgICAgIGNvbGxlY3Rpb25OYW1lLAogICAgICBkb2N1bWVudElkLAogICAgICB1cGRhdGUKICAgIH0pOwogIH0KICBhc3luYyBkZWxldGVEb2N1bWVudChkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBkb2N1bWVudElkKSB7CiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCJkZWxldGVEb2N1bWVudCIsIHsgZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwgZG9jdW1lbnRJZCB9KTsKICB9CiAgYXN5bmMgcnVuQWdncmVnYXRpb24oZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwgcGlwZWxpbmUpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgicnVuQWdncmVnYXRpb24iLCB7IGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUsIHBpcGVsaW5lIH0pOwogICAgcmV0dXJuIHJlc3VsdC5yZXN1bHRzOwogIH0KICBhc3luYyBsaXN0SW5kZXhlcyhkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoImxpc3RJbmRleGVzIiwgeyBkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lIH0pOwogICAgcmV0dXJuIHJlc3VsdC5pbmRleGVzOwogIH0KICBhc3luYyBjcmVhdGVJbmRleChkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBrZXlzMiwgb3B0aW9ucykgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJjcmVhdGVJbmRleCIsIHsgZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwga2V5czoga2V5czIsIG9wdGlvbnMgfSk7CiAgICByZXR1cm4gcmVzdWx0LmluZGV4TmFtZTsKICB9CiAgYXN5bmMgZHJvcEluZGV4KGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUsIGluZGV4TmFtZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJkcm9wSW5kZXgiLCB7IGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUsIGluZGV4TmFtZSB9KTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgZ2V0Q29sbGVjdGlvblN0YXRzKGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgiZ2V0Q29sbGVjdGlvblN0YXRzIiwgeyBkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lIH0pOwogICAgcmV0dXJuIHJlc3VsdC5zdGF0czsKICB9CiAgYXN5bmMgZ2V0U2VydmVyU3RhdHVzKCkgewogICAgcmV0dXJuIHRoaXMucmVxdWVzdCgiZ2V0U2VydmVyU3RhdHVzIiwge30pOwogIH0KICBhc3luYyBnZXREYXRhYmFzZVN0YXRzKGRhdGFiYXNlTmFtZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJnZXREYXRhYmFzZVN0YXRzIiwgeyBkYXRhYmFzZU5hbWUgfSk7CiAgICByZXR1cm4gcmVzdWx0LnN0YXRzOwogIH0KfTsKCi8vIHRzX3dlYi9zZXJ2aWNlcy9jaGFuZ2VzdHJlYW0uc2VydmljZS50cwp2YXIgQ2hhbmdlU3RyZWFtU2VydmljZSA9IGNsYXNzIHsKICB0eXBlZFNvY2tldCA9IG51bGw7CiAgaXNDb25uZWN0ZWQgPSBmYWxzZTsKICBpc0Nvbm5lY3RpbmcgPSBmYWxzZTsKICBzdWJzY3JpcHRpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAvLyBSeEpTIFN1YmplY3RzIGZvciBVSSBjb21wb25lbnRzCiAgbW9uZ29DaGFuZ2VzJCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLnJ4anMuU3ViamVjdCgpOwogIHMzQ2hhbmdlcyQgPSBuZXcgZGlzdF90c19leHBvcnRzMi5yeGpzLlN1YmplY3QoKTsKICBhY3Rpdml0eUV2ZW50cyQgPSBuZXcgZGlzdF90c19leHBvcnRzMi5yeGpzLlN1YmplY3QoKTsKICBjb25uZWN0aW9uU3RhdHVzJCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLnJ4anMuUmVwbGF5U3ViamVjdCgxKTsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dCgiZGlzY29ubmVjdGVkIik7CiAgfQogIC8qKgogICAqIENvbm5lY3QgdG8gdGhlIFdlYlNvY2tldCBzZXJ2ZXIKICAgKi8KICBhc3luYyBjb25uZWN0KCkgewogICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQgfHwgdGhpcy5pc0Nvbm5lY3RpbmcpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5pc0Nvbm5lY3RpbmcgPSB0cnVlOwogICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KCJjb25uZWN0aW5nIik7CiAgICB0cnkgewogICAgICBjb25zdCBjbGllbnRSb3V0ZXIgPSBuZXcgZGlzdF90c19leHBvcnRzMTUuVHlwZWRSb3V0ZXIoKTsKICAgICAgdGhpcy5yZWdpc3RlclB1c2hIYW5kbGVycyhjbGllbnRSb3V0ZXIpOwogICAgICB0aGlzLnR5cGVkU29ja2V0ID0gYXdhaXQgZGlzdF90c19leHBvcnRzMzAuVHlwZWRTb2NrZXQuY3JlYXRlQ2xpZW50KAogICAgICAgIGNsaWVudFJvdXRlciwKICAgICAgICBkaXN0X3RzX2V4cG9ydHMzMC5UeXBlZFNvY2tldC51c2VXaW5kb3dMb2NhdGlvbk9yaWdpblVybCgpCiAgICAgICk7CiAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSB0cnVlOwogICAgICB0aGlzLmlzQ29ubmVjdGluZyA9IGZhbHNlOwogICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoImNvbm5lY3RlZCIpOwogICAgICBjb25zb2xlLmxvZygiW0NoYW5nZVN0cmVhbV0gV2ViU29ja2V0IGNvbm5lY3RlZCIpOwogICAgICB0aGlzLnR5cGVkU29ja2V0LnN0YXR1c1N1YmplY3Quc3Vic2NyaWJlKChzdGF0dXMpID0+IHsKICAgICAgICBpZiAoc3RhdHVzID09PSAiZGlzY29ubmVjdGVkIikgewogICAgICAgICAgdGhpcy5oYW5kbGVEaXNjb25uZWN0KCk7CiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09ICJjb25uZWN0ZWQiKSB7CiAgICAgICAgICB0aGlzLmhhbmRsZVJlY29ubmVjdCgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICB0aGlzLmlzQ29ubmVjdGluZyA9IGZhbHNlOwogICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoImRpc2Nvbm5lY3RlZCIpOwogICAgICBjb25zb2xlLmVycm9yKCJbQ2hhbmdlU3RyZWFtXSBGYWlsZWQgdG8gY29ubmVjdDoiLCBlcnJvcik7CiAgICAgIHRocm93IGVycm9yOwogICAgfQogIH0KICAvKioKICAgKiBEaXNjb25uZWN0IGZyb20gdGhlIFdlYlNvY2tldCBzZXJ2ZXIKICAgKi8KICBhc3luYyBkaXNjb25uZWN0KCkgewogICAgaWYgKCF0aGlzLnR5cGVkU29ja2V0KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRyeSB7CiAgICAgIGF3YWl0IHRoaXMudHlwZWRTb2NrZXQuc3RvcCgpOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS5lcnJvcigiW0NoYW5nZVN0cmVhbV0gRXJyb3IgZHVyaW5nIGRpc2Nvbm5lY3Q6IiwgZXJyb3IpOwogICAgfQogICAgdGhpcy50eXBlZFNvY2tldCA9IG51bGw7CiAgICB0aGlzLmlzQ29ubmVjdGVkID0gZmFsc2U7CiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuY2xlYXIoKTsKICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dCgiZGlzY29ubmVjdGVkIik7CiAgICBjb25zb2xlLmxvZygiW0NoYW5nZVN0cmVhbV0gV2ViU29ja2V0IGRpc2Nvbm5lY3RlZCIpOwogIH0KICAvKioKICAgKiBSZWdpc3RlciBoYW5kbGVycyBmb3Igc2VydmVyIHB1c2ggZXZlbnRzCiAgICovCiAgcmVnaXN0ZXJQdXNoSGFuZGxlcnMocm91dGVyKSB7CiAgICByb3V0ZXIuYWRkVHlwZWRIYW5kbGVyKAogICAgICBuZXcgZGlzdF90c19leHBvcnRzMTUuVHlwZWRIYW5kbGVyKAogICAgICAgICJwdXNoTW9uZ29DaGFuZ2UiLAogICAgICAgIGFzeW5jIChkYXRhKSA9PiB7CiAgICAgICAgICB0aGlzLm1vbmdvQ2hhbmdlcyQubmV4dChkYXRhLmV2ZW50KTsKICAgICAgICAgIHJldHVybiB7IHJlY2VpdmVkOiB0cnVlIH07CiAgICAgICAgfQogICAgICApCiAgICApOwogICAgcm91dGVyLmFkZFR5cGVkSGFuZGxlcigKICAgICAgbmV3IGRpc3RfdHNfZXhwb3J0czE1LlR5cGVkSGFuZGxlcigKICAgICAgICAicHVzaFMzQ2hhbmdlIiwKICAgICAgICBhc3luYyAoZGF0YSkgPT4gewogICAgICAgICAgdGhpcy5zM0NoYW5nZXMkLm5leHQoZGF0YS5ldmVudCk7CiAgICAgICAgICByZXR1cm4geyByZWNlaXZlZDogdHJ1ZSB9OwogICAgICAgIH0KICAgICAgKQogICAgKTsKICAgIHJvdXRlci5hZGRUeXBlZEhhbmRsZXIoCiAgICAgIG5ldyBkaXN0X3RzX2V4cG9ydHMxNS5UeXBlZEhhbmRsZXIoCiAgICAgICAgInB1c2hBY3Rpdml0eUV2ZW50IiwKICAgICAgICBhc3luYyAoZGF0YSkgPT4gewogICAgICAgICAgdGhpcy5hY3Rpdml0eUV2ZW50cyQubmV4dChkYXRhLmV2ZW50KTsKICAgICAgICAgIHJldHVybiB7IHJlY2VpdmVkOiB0cnVlIH07CiAgICAgICAgfQogICAgICApCiAgICApOwogIH0KICAvKioKICAgKiBIYW5kbGUgV2ViU29ja2V0IGRpc2Nvbm5lY3Rpb24KICAgKi8KICBoYW5kbGVEaXNjb25uZWN0KCkgewogICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlOwogICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KCJkaXNjb25uZWN0ZWQiKTsKICAgIGNvbnNvbGUubG9nKCJbQ2hhbmdlU3RyZWFtXSBXZWJTb2NrZXQgZGlzY29ubmVjdGVkLCB3YWl0aW5nIGZvciByZWNvbm5lY3QuLi4iKTsKICB9CiAgLyoqCiAgICogSGFuZGxlIFdlYlNvY2tldCByZWNvbm5lY3Rpb24gLSByZXN0b3JlIGFsbCBzdWJzY3JpcHRpb25zCiAgICovCiAgYXN5bmMgaGFuZGxlUmVjb25uZWN0KCkgewogICAgdGhpcy5pc0Nvbm5lY3RlZCA9IHRydWU7CiAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoImNvbm5lY3RlZCIpOwogICAgY29uc29sZS5sb2coIltDaGFuZ2VTdHJlYW1dIFdlYlNvY2tldCByZWNvbm5lY3RlZCwgcmVzdG9yaW5nIHN1YnNjcmlwdGlvbnMuLi4iKTsKICAgIGNvbnN0IHN1YnNjcmlwdGlvbnNUb1Jlc3RvcmUgPSBBcnJheS5mcm9tKHRoaXMuc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSk7CiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuY2xlYXIoKTsKICAgIGZvciAoY29uc3Qgc3ViMiBvZiBzdWJzY3JpcHRpb25zVG9SZXN0b3JlKSB7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKHN1YjIudHlwZSA9PT0gIm1vbmdvIikgewogICAgICAgICAgY29uc3QgW2RhdGFiYXNlLCBjb2xsZWN0aW9uXSA9IHN1YjIua2V5LnNwbGl0KCIvIik7CiAgICAgICAgICBhd2FpdCB0aGlzLnN1YnNjcmliZVRvQ29sbGVjdGlvbihkYXRhYmFzZSwgY29sbGVjdGlvbik7CiAgICAgICAgfSBlbHNlIGlmIChzdWIyLnR5cGUgPT09ICJzMyIpIHsKICAgICAgICAgIGNvbnN0IHBhcnRzID0gc3ViMi5rZXkuc3BsaXQoIi8iKTsKICAgICAgICAgIGNvbnN0IGJ1Y2tldCA9IHBhcnRzWzBdOwogICAgICAgICAgY29uc3QgcHJlZml4NCA9IHBhcnRzLnNsaWNlKDEpLmpvaW4oIi8iKSB8fCB2b2lkIDA7CiAgICAgICAgICBhd2FpdCB0aGlzLnN1YnNjcmliZVRvQnVja2V0KGJ1Y2tldCwgcHJlZml4NCk7CiAgICAgICAgfSBlbHNlIGlmIChzdWIyLnR5cGUgPT09ICJhY3Rpdml0eSIpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuc3Vic2NyaWJlVG9BY3Rpdml0eSgpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKGBbQ2hhbmdlU3RyZWFtXSBGYWlsZWQgdG8gcmVzdG9yZSBzdWJzY3JpcHRpb24gJHtzdWIyLmtleX06YCwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgfQogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBNb25nb0RCIFN1YnNjcmlwdGlvbnMKICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLyoqCiAgICogU3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gYSBNb25nb0RCIGNvbGxlY3Rpb24KICAgKi8KICBhc3luYyBzdWJzY3JpYmVUb0NvbGxlY3Rpb24oZGF0YWJhc2UsIGNvbGxlY3Rpb24pIHsKICAgIGlmICghdGhpcy50eXBlZFNvY2tldCB8fCAhdGhpcy5pc0Nvbm5lY3RlZCkgewogICAgICBjb25zb2xlLndhcm4oIltDaGFuZ2VTdHJlYW1dIE5vdCBjb25uZWN0ZWQsIGNhbm5vdCBzdWJzY3JpYmUiKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgY29uc3Qga2V5MiA9IGAke2RhdGFiYXNlfS8ke2NvbGxlY3Rpb259YDsKICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMuaGFzKGBtb25nbzoke2tleTJ9YCkpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICB0cnkgewogICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy50eXBlZFNvY2tldC5jcmVhdGVUeXBlZFJlcXVlc3QoInN1YnNjcmliZU1vbmdvIik7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdC5maXJlKHsgZGF0YWJhc2UsIGNvbGxlY3Rpb24gfSk7CiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7CiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnNldChgbW9uZ286JHtrZXkyfWAsIHsKICAgICAgICAgIHR5cGU6ICJtb25nbyIsCiAgICAgICAgICBrZXk6IGtleTIsCiAgICAgICAgICBzdWJzY3JpcHRpb25JZDogcmVzcG9uc2Uuc3Vic2NyaXB0aW9uSWQKICAgICAgICB9KTsKICAgICAgICBjb25zb2xlLmxvZyhgW0NoYW5nZVN0cmVhbV0gU3Vic2NyaWJlZCB0byBNb25nb0RCICR7a2V5Mn1gKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLmVycm9yKGBbQ2hhbmdlU3RyZWFtXSBGYWlsZWQgdG8gc3Vic2NyaWJlIHRvIE1vbmdvREIgJHtrZXkyfTpgLCBlcnJvcik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgLyoqCiAgICogVW5zdWJzY3JpYmUgZnJvbSBjaGFuZ2VzIGluIGEgTW9uZ29EQiBjb2xsZWN0aW9uCiAgICovCiAgYXN5bmMgdW5zdWJzY3JpYmVGcm9tQ29sbGVjdGlvbihkYXRhYmFzZSwgY29sbGVjdGlvbikgewogICAgaWYgKCF0aGlzLnR5cGVkU29ja2V0IHx8ICF0aGlzLmlzQ29ubmVjdGVkKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGNvbnN0IGtleTIgPSBgJHtkYXRhYmFzZX0vJHtjb2xsZWN0aW9ufWA7CiAgICBjb25zdCBzdWJLZXkgPSBgbW9uZ286JHtrZXkyfWA7CiAgICBpZiAoIXRoaXMuc3Vic2NyaXB0aW9ucy5oYXMoc3ViS2V5KSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnR5cGVkU29ja2V0LmNyZWF0ZVR5cGVkUmVxdWVzdCgidW5zdWJzY3JpYmVNb25nbyIpOwogICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QuZmlyZSh7IGRhdGFiYXNlLCBjb2xsZWN0aW9uIH0pOwogICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcykgewogICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5kZWxldGUoc3ViS2V5KTsKICAgICAgICBjb25zb2xlLmxvZyhgW0NoYW5nZVN0cmVhbV0gVW5zdWJzY3JpYmVkIGZyb20gTW9uZ29EQiAke2tleTJ9YCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlLnN1Y2Nlc3M7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLmVycm9yKGBbQ2hhbmdlU3RyZWFtXSBGYWlsZWQgdG8gdW5zdWJzY3JpYmUgZnJvbSBNb25nb0RCICR7a2V5Mn06YCwgZXJyb3IpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIC8qKgogICAqIENoZWNrIGlmIHN1YnNjcmliZWQgdG8gYSBNb25nb0RCIGNvbGxlY3Rpb24KICAgKi8KICBpc1N1YnNjcmliZWRUb0NvbGxlY3Rpb24oZGF0YWJhc2UsIGNvbGxlY3Rpb24pIHsKICAgIHJldHVybiB0aGlzLnN1YnNjcmlwdGlvbnMuaGFzKGBtb25nbzoke2RhdGFiYXNlfS8ke2NvbGxlY3Rpb259YCk7CiAgfQogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBTMyBTdWJzY3JpcHRpb25zCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC8qKgogICAqIFN1YnNjcmliZSB0byBjaGFuZ2VzIGluIGFuIFMzIGJ1Y2tldC9wcmVmaXgKICAgKi8KICBhc3luYyBzdWJzY3JpYmVUb0J1Y2tldChidWNrZXQsIHByZWZpeDQpIHsKICAgIGlmICghdGhpcy50eXBlZFNvY2tldCB8fCAhdGhpcy5pc0Nvbm5lY3RlZCkgewogICAgICBjb25zb2xlLndhcm4oIltDaGFuZ2VTdHJlYW1dIE5vdCBjb25uZWN0ZWQsIGNhbm5vdCBzdWJzY3JpYmUiKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgY29uc3Qga2V5MiA9IHByZWZpeDQgPyBgJHtidWNrZXR9LyR7cHJlZml4NH1gIDogYnVja2V0OwogICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9ucy5oYXMoYHMzOiR7a2V5Mn1gKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnR5cGVkU29ja2V0LmNyZWF0ZVR5cGVkUmVxdWVzdCgic3Vic2NyaWJlUzMiKTsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0LmZpcmUoeyBidWNrZXQsIHByZWZpeDogcHJlZml4NCB9KTsKICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHsKICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuc2V0KGBzMzoke2tleTJ9YCwgewogICAgICAgICAgdHlwZTogInMzIiwKICAgICAgICAgIGtleToga2V5MiwKICAgICAgICAgIHN1YnNjcmlwdGlvbklkOiByZXNwb25zZS5zdWJzY3JpcHRpb25JZAogICAgICAgIH0pOwogICAgICAgIGNvbnNvbGUubG9nKGBbQ2hhbmdlU3RyZWFtXSBTdWJzY3JpYmVkIHRvIFMzICR7a2V5Mn1gKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLmVycm9yKGBbQ2hhbmdlU3RyZWFtXSBGYWlsZWQgdG8gc3Vic2NyaWJlIHRvIFMzICR7a2V5Mn06YCwgZXJyb3IpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIC8qKgogICAqIFVuc3Vic2NyaWJlIGZyb20gY2hhbmdlcyBpbiBhbiBTMyBidWNrZXQvcHJlZml4CiAgICovCiAgYXN5bmMgdW5zdWJzY3JpYmVGcm9tQnVja2V0KGJ1Y2tldCwgcHJlZml4NCkgewogICAgaWYgKCF0aGlzLnR5cGVkU29ja2V0IHx8ICF0aGlzLmlzQ29ubmVjdGVkKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGNvbnN0IGtleTIgPSBwcmVmaXg0ID8gYCR7YnVja2V0fS8ke3ByZWZpeDR9YCA6IGJ1Y2tldDsKICAgIGNvbnN0IHN1YktleSA9IGBzMzoke2tleTJ9YDsKICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zLmhhcyhzdWJLZXkpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgdHJ5IHsKICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMudHlwZWRTb2NrZXQuY3JlYXRlVHlwZWRSZXF1ZXN0KCJ1bnN1YnNjcmliZVMzIik7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdC5maXJlKHsgYnVja2V0LCBwcmVmaXg6IHByZWZpeDQgfSk7CiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7CiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmRlbGV0ZShzdWJLZXkpOwogICAgICAgIGNvbnNvbGUubG9nKGBbQ2hhbmdlU3RyZWFtXSBVbnN1YnNjcmliZWQgZnJvbSBTMyAke2tleTJ9YCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlLnN1Y2Nlc3M7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLmVycm9yKGBbQ2hhbmdlU3RyZWFtXSBGYWlsZWQgdG8gdW5zdWJzY3JpYmUgZnJvbSBTMyAke2tleTJ9OmAsIGVycm9yKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICAvKioKICAgKiBDaGVjayBpZiBzdWJzY3JpYmVkIHRvIGFuIFMzIGJ1Y2tldC9wcmVmaXgKICAgKi8KICBpc1N1YnNjcmliZWRUb0J1Y2tldChidWNrZXQsIHByZWZpeDQpIHsKICAgIGNvbnN0IGtleTIgPSBwcmVmaXg0ID8gYCR7YnVja2V0fS8ke3ByZWZpeDR9YCA6IGJ1Y2tldDsKICAgIHJldHVybiB0aGlzLnN1YnNjcmlwdGlvbnMuaGFzKGBzMzoke2tleTJ9YCk7CiAgfQogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBBY3Rpdml0eSBTdHJlYW0gU3Vic2NyaXB0aW9ucwogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvKioKICAgKiBTdWJzY3JpYmUgdG8gdGhlIGFjdGl2aXR5IHN0cmVhbQogICAqLwogIGFzeW5jIHN1YnNjcmliZVRvQWN0aXZpdHkoKSB7CiAgICBpZiAoIXRoaXMudHlwZWRTb2NrZXQgfHwgIXRoaXMuaXNDb25uZWN0ZWQpIHsKICAgICAgY29uc29sZS53YXJuKCJbQ2hhbmdlU3RyZWFtXSBOb3QgY29ubmVjdGVkLCBjYW5ub3Qgc3Vic2NyaWJlIik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMuaGFzKCJhY3Rpdml0eTphY3Rpdml0eSIpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgdHJ5IHsKICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMudHlwZWRTb2NrZXQuY3JlYXRlVHlwZWRSZXF1ZXN0KCJzdWJzY3JpYmVBY3Rpdml0eSIpOwogICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QuZmlyZSh7fSk7CiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7CiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnNldCgiYWN0aXZpdHk6YWN0aXZpdHkiLCB7CiAgICAgICAgICB0eXBlOiAiYWN0aXZpdHkiLAogICAgICAgICAga2V5OiAiYWN0aXZpdHkiLAogICAgICAgICAgc3Vic2NyaXB0aW9uSWQ6IHJlc3BvbnNlLnN1YnNjcmlwdGlvbklkCiAgICAgICAgfSk7CiAgICAgICAgY29uc29sZS5sb2coIltDaGFuZ2VTdHJlYW1dIFN1YnNjcmliZWQgdG8gYWN0aXZpdHkgc3RyZWFtIik7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS5lcnJvcigiW0NoYW5nZVN0cmVhbV0gRmFpbGVkIHRvIHN1YnNjcmliZSB0byBhY3Rpdml0eSBzdHJlYW06IiwgZXJyb3IpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIC8qKgogICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGFjdGl2aXR5IHN0cmVhbQogICAqLwogIGFzeW5jIHVuc3Vic2NyaWJlRnJvbUFjdGl2aXR5KCkgewogICAgaWYgKCF0aGlzLnR5cGVkU29ja2V0IHx8ICF0aGlzLmlzQ29ubmVjdGVkKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zLmhhcygiYWN0aXZpdHk6YWN0aXZpdHkiKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnR5cGVkU29ja2V0LmNyZWF0ZVR5cGVkUmVxdWVzdCgidW5zdWJzY3JpYmVBY3Rpdml0eSIpOwogICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QuZmlyZSh7fSk7CiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7CiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmRlbGV0ZSgiYWN0aXZpdHk6YWN0aXZpdHkiKTsKICAgICAgICBjb25zb2xlLmxvZygiW0NoYW5nZVN0cmVhbV0gVW5zdWJzY3JpYmVkIGZyb20gYWN0aXZpdHkgc3RyZWFtIik7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlLnN1Y2Nlc3M7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLmVycm9yKCJbQ2hhbmdlU3RyZWFtXSBGYWlsZWQgdG8gdW5zdWJzY3JpYmUgZnJvbSBhY3Rpdml0eSBzdHJlYW06IiwgZXJyb3IpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIC8qKgogICAqIEdldCByZWNlbnQgYWN0aXZpdHkgZXZlbnRzCiAgICovCiAgYXN5bmMgZ2V0UmVjZW50QWN0aXZpdHkobGltaXQgPSAxMDApIHsKICAgIGlmICghdGhpcy50eXBlZFNvY2tldCB8fCAhdGhpcy5pc0Nvbm5lY3RlZCkgewogICAgICByZXR1cm4gW107CiAgICB9CiAgICB0cnkgewogICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy50eXBlZFNvY2tldC5jcmVhdGVUeXBlZFJlcXVlc3QoImdldFJlY2VudEFjdGl2aXR5Iik7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdC5maXJlKHsgbGltaXQgfSk7CiAgICAgIHJldHVybiByZXNwb25zZS5ldmVudHMgfHwgW107CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLmVycm9yKCJbQ2hhbmdlU3RyZWFtXSBGYWlsZWQgdG8gZ2V0IHJlY2VudCBhY3Rpdml0eToiLCBlcnJvcik7CiAgICAgIHJldHVybiBbXTsKICAgIH0KICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgc3Vic2NyaWJlZCB0byBhY3Rpdml0eSBzdHJlYW0KICAgKi8KICBpc1N1YnNjcmliZWRUb0FjdGl2aXR5KCkgewogICAgcmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9ucy5oYXMoImFjdGl2aXR5OmFjdGl2aXR5Iik7CiAgfQogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBPYnNlcnZhYmxlcyBmb3IgVUkgQ29tcG9uZW50cwogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvKioKICAgKiBHZXQgTW9uZ29EQiBjaGFuZ2VzIGFzIGFuIE9ic2VydmFibGUKICAgKi8KICBnZXRNb25nb0NoYW5nZXMoKSB7CiAgICByZXR1cm4gdGhpcy5tb25nb0NoYW5nZXMkLmFzT2JzZXJ2YWJsZSgpOwogIH0KICAvKioKICAgKiBHZXQgUzMgY2hhbmdlcyBhcyBhbiBPYnNlcnZhYmxlCiAgICovCiAgZ2V0UzNDaGFuZ2VzKCkgewogICAgcmV0dXJuIHRoaXMuczNDaGFuZ2VzJC5hc09ic2VydmFibGUoKTsKICB9CiAgLyoqCiAgICogR2V0IGFjdGl2aXR5IGV2ZW50cyBhcyBhbiBPYnNlcnZhYmxlCiAgICovCiAgZ2V0QWN0aXZpdHlTdHJlYW0oKSB7CiAgICByZXR1cm4gdGhpcy5hY3Rpdml0eUV2ZW50cyQuYXNPYnNlcnZhYmxlKCk7CiAgfQogIC8qKgogICAqIEdldCBmaWx0ZXJlZCBNb25nb0RCIGNoYW5nZXMgZm9yIGEgc3BlY2lmaWMgY29sbGVjdGlvbgogICAqLwogIGdldENvbGxlY3Rpb25DaGFuZ2VzKGRhdGFiYXNlLCBjb2xsZWN0aW9uKSB7CiAgICByZXR1cm4gdGhpcy5tb25nb0NoYW5nZXMkLnBpcGUoCiAgICAgIGRpc3RfdHNfZXhwb3J0czIucnhqcy5vcHMuZmlsdGVyKAogICAgICAgIChldmVudCkgPT4gZXZlbnQuZGF0YWJhc2UgPT09IGRhdGFiYXNlICYmIGV2ZW50LmNvbGxlY3Rpb24gPT09IGNvbGxlY3Rpb24KICAgICAgKQogICAgKTsKICB9CiAgLyoqCiAgICogR2V0IGZpbHRlcmVkIFMzIGNoYW5nZXMgZm9yIGEgc3BlY2lmaWMgYnVja2V0L3ByZWZpeAogICAqLwogIGdldEJ1Y2tldENoYW5nZXMoYnVja2V0LCBwcmVmaXg0KSB7CiAgICByZXR1cm4gdGhpcy5zM0NoYW5nZXMkLnBpcGUoCiAgICAgIGRpc3RfdHNfZXhwb3J0czIucnhqcy5vcHMuZmlsdGVyKChldmVudCkgPT4gewogICAgICAgIGlmIChldmVudC5idWNrZXQgIT09IGJ1Y2tldCkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChwcmVmaXg0ICYmICFldmVudC5rZXkuc3RhcnRzV2l0aChwcmVmaXg0KSkgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9KQogICAgKTsKICB9Cn07CgovLyB0c193ZWIvc2VydmljZXMvaW5kZXgudHMKdmFyIGFwaVNlcnZpY2UgPSBuZXcgQXBpU2VydmljZSgpOwp2YXIgY2hhbmdlU3RyZWFtU2VydmljZSA9IG5ldyBDaGFuZ2VTdHJlYW1TZXJ2aWNlKCk7CgovLyB0c193ZWIvc3R5bGVzL3RoZW1lLnRzCmluaXRfZGlzdF90czI2KCk7CnZhciB0aGVtZVN0eWxlcyA9IGlgCiAgOmhvc3QgewogICAgLyogQmFja2dyb3VuZCBjb2xvcnMgKi8KICAgIC0tdHN2aWV3LWJnLXByaW1hcnk6ICMxYTFhMWE7CiAgICAtLXRzdmlldy1iZy1zZWNvbmRhcnk6ICMxZTFlMWU7CiAgICAtLXRzdmlldy1iZy10ZXJ0aWFyeTogIzE0MTQxNDsKICAgIC0tdHN2aWV3LWJnLW92ZXJsYXk6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgIC0tdHN2aWV3LWJnLW92ZXJsYXktZGFyazogcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgLS10c3ZpZXctYmctZGlhbG9nLW92ZXJsYXk6IHJnYmEoMCwgMCwgMCwgMC43KTsKCiAgICAvKiBCb3JkZXIgY29sb3JzICovCiAgICAtLXRzdmlldy1ib3JkZXItcHJpbWFyeTogIzMzMzsKICAgIC0tdHN2aWV3LWJvcmRlci1zZWNvbmRhcnk6ICM0NDQ7CiAgICAtLXRzdmlldy1ib3JkZXItdGVydGlhcnk6ICMyYTJhM2U7CgogICAgLyogVGV4dCBjb2xvcnMgKi8KICAgIC0tdHN2aWV3LXRleHQtcHJpbWFyeTogI2ZmZjsKICAgIC0tdHN2aWV3LXRleHQtc2Vjb25kYXJ5OiAjZTBlMGUwOwogICAgLS10c3ZpZXctdGV4dC10ZXJ0aWFyeTogI2NjYzsKICAgIC0tdHN2aWV3LXRleHQtbXV0ZWQ6ICM4ODg7CiAgICAtLXRzdmlldy10ZXh0LWRpbTogIzY2NjsKCiAgICAvKiBJbnRlcmFjdGl2ZSBzdGF0ZXMgKi8KICAgIC0tdHN2aWV3LWhvdmVyLWJnOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgLS10c3ZpZXctaG92ZXItYmctc3Ryb25nOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAtLXRzdmlldy1zZWxlY3RlZC1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIC0tdHN2aWV3LWFjdGl2ZS1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwoKICAgIC8qIEFjY2VudCBjb2xvcnMgKi8KICAgIC0tdHN2aWV3LWFjY2VudC1mb2xkZXI6ICNmYmJmMjQ7CgogICAgLyogRGFuZ2VyL2Rlc3RydWN0aXZlIGFjdGlvbnMgKi8KICAgIC0tdHN2aWV3LWRhbmdlcjogI2VmNDQ0NDsKICAgIC0tdHN2aWV3LWRhbmdlci10ZXh0OiAjZjg3MTcxOwogICAgLS10c3ZpZXctZGFuZ2VyLWJnOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjIpOwogICAgLS10c3ZpZXctZGFuZ2VyLWJnLWhvdmVyOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjMpOwoKICAgIC8qIFN1Y2Nlc3Mgc3RhdGVzICovCiAgICAtLXRzdmlldy1zdWNjZXNzOiAjMjJjNTVlOwogICAgLS10c3ZpZXctc3VjY2Vzcy1iZzogcmdiYSgzNCwgMTk3LCA5NCwgMC4yKTsKCiAgICAvKiBCb3JkZXIgcmFkaXVzICovCiAgICAtLXRzdmlldy1yYWRpdXMtc206IDRweDsKICAgIC0tdHN2aWV3LXJhZGl1cy1tZDogNnB4OwogICAgLS10c3ZpZXctcmFkaXVzLWxnOiA4cHg7CiAgICAtLXRzdmlldy1yYWRpdXMteGw6IDEycHg7CgogICAgLyogU3BhY2luZyAqLwogICAgLS10c3ZpZXctc3BhY2luZy14czogNHB4OwogICAgLS10c3ZpZXctc3BhY2luZy1zbTogOHB4OwogICAgLS10c3ZpZXctc3BhY2luZy1tZDogMTJweDsKICAgIC0tdHN2aWV3LXNwYWNpbmctbGc6IDE2cHg7CiAgICAtLXRzdmlldy1zcGFjaW5nLXhsOiAyNHB4OwogIH0KYDsKCi8vIHRzX3dlYi9lbGVtZW50cy90c3ZpZXctYXBwLnRzCnZhciBfaXNSZXNpemluZ1NpZGViYXJfZGVjLCBfc2lkZWJhcldpZHRoX2RlYywgX3MzQ3JlYXRlRGlhbG9nTmFtZV9kZWMsIF9zM0NyZWF0ZURpYWxvZ0J1Y2tldF9kZWMsIF9zM0NyZWF0ZURpYWxvZ1R5cGVfZGVjLCBfc2hvd1MzQ3JlYXRlRGlhbG9nX2RlYywgX3Nob3dTeXN0ZW1EYXRhYmFzZXNfZGVjLCBfbmV3RGF0YWJhc2VOYW1lX2RlYywgX3Nob3dDcmVhdGVEYXRhYmFzZURpYWxvZ19kZWMsIF9uZXdDb2xsZWN0aW9uTmFtZV9kZWMsIF9zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZ19kZWMsIF9uZXdCdWNrZXROYW1lX2RlYywgX3Nob3dDcmVhdGVCdWNrZXREaWFsb2dfZGVjLCBfZGF0YWJhc2VzX2RlYywgX2J1Y2tldHNfZGVjLCBfc2VsZWN0ZWRDb2xsZWN0aW9uX2RlYywgX3NlbGVjdGVkRGF0YWJhc2VfZGVjLCBfc2VsZWN0ZWRCdWNrZXRfZGVjLCBfdmlld01vZGVfZGVjLCBfYTQsIF9Uc3ZpZXdBcHBfZGVjb3JhdG9ycywgX2luaXQsIF92aWV3TW9kZSwgX3NlbGVjdGVkQnVja2V0LCBfc2VsZWN0ZWREYXRhYmFzZSwgX3NlbGVjdGVkQ29sbGVjdGlvbiwgX2J1Y2tldHMsIF9kYXRhYmFzZXMsIF9zaG93Q3JlYXRlQnVja2V0RGlhbG9nLCBfbmV3QnVja2V0TmFtZSwgX3Nob3dDcmVhdGVDb2xsZWN0aW9uRGlhbG9nLCBfbmV3Q29sbGVjdGlvbk5hbWUsIF9zaG93Q3JlYXRlRGF0YWJhc2VEaWFsb2csIF9uZXdEYXRhYmFzZU5hbWUsIF9zaG93U3lzdGVtRGF0YWJhc2VzLCBfc2hvd1MzQ3JlYXRlRGlhbG9nLCBfczNDcmVhdGVEaWFsb2dUeXBlLCBfczNDcmVhdGVEaWFsb2dCdWNrZXQsIF9zM0NyZWF0ZURpYWxvZ05hbWUsIF9zaWRlYmFyV2lkdGgsIF9pc1Jlc2l6aW5nU2lkZWJhcjsKdmFyIHsgaHRtbDogaHRtbDgsIGNzczogY3NzMywgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjMsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQyLCBzdGF0ZTogc3RhdGUyLCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQzIH0gPSBwbHVnaW5zX2V4cG9ydHM1Owp2YXIgeyBEZWVzQ29udGV4dG1lbnU6IERlZXNDb250ZXh0bWVudTIgfSA9IGRpc3RfdHNfd2ViX2V4cG9ydHMyOwpfVHN2aWV3QXBwX2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDIoInRzdmlldy1hcHAiKV07CnZhciBUc3ZpZXdBcHAgPSBjbGFzcyBleHRlbmRzIChfYTQgPSBEZWVzRWxlbWVudDMsIF92aWV3TW9kZV9kZWMgPSBbc3RhdGUyKCldLCBfc2VsZWN0ZWRCdWNrZXRfZGVjID0gW3N0YXRlMigpXSwgX3NlbGVjdGVkRGF0YWJhc2VfZGVjID0gW3N0YXRlMigpXSwgX3NlbGVjdGVkQ29sbGVjdGlvbl9kZWMgPSBbc3RhdGUyKCldLCBfYnVja2V0c19kZWMgPSBbc3RhdGUyKCldLCBfZGF0YWJhc2VzX2RlYyA9IFtzdGF0ZTIoKV0sIF9zaG93Q3JlYXRlQnVja2V0RGlhbG9nX2RlYyA9IFtzdGF0ZTIoKV0sIF9uZXdCdWNrZXROYW1lX2RlYyA9IFtzdGF0ZTIoKV0sIF9zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZ19kZWMgPSBbc3RhdGUyKCldLCBfbmV3Q29sbGVjdGlvbk5hbWVfZGVjID0gW3N0YXRlMigpXSwgX3Nob3dDcmVhdGVEYXRhYmFzZURpYWxvZ19kZWMgPSBbc3RhdGUyKCldLCBfbmV3RGF0YWJhc2VOYW1lX2RlYyA9IFtzdGF0ZTIoKV0sIF9zaG93U3lzdGVtRGF0YWJhc2VzX2RlYyA9IFtzdGF0ZTIoKV0sIF9zaG93UzNDcmVhdGVEaWFsb2dfZGVjID0gW3N0YXRlMigpXSwgX3MzQ3JlYXRlRGlhbG9nVHlwZV9kZWMgPSBbc3RhdGUyKCldLCBfczNDcmVhdGVEaWFsb2dCdWNrZXRfZGVjID0gW3N0YXRlMigpXSwgX3MzQ3JlYXRlRGlhbG9nTmFtZV9kZWMgPSBbc3RhdGUyKCldLCBfc2lkZWJhcldpZHRoX2RlYyA9IFtzdGF0ZTIoKV0sIF9pc1Jlc2l6aW5nU2lkZWJhcl9kZWMgPSBbc3RhdGUyKCldLCBfYTQpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3ZpZXdNb2RlLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgOCwgdGhpcywgInMzIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZEJ1Y2tldCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDEyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZERhdGFiYXNlLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMTYsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAxOSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3NlbGVjdGVkQ29sbGVjdGlvbiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDIwLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMjMsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9idWNrZXRzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMjQsIHRoaXMsIFtdKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAyNywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RhdGFiYXNlcywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDI4LCB0aGlzLCBbXSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMzEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zaG93Q3JlYXRlQnVja2V0RGlhbG9nLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMzIsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAzNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX25ld0J1Y2tldE5hbWUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAzNiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDM5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2csIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA0MCwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDQzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbmV3Q29sbGVjdGlvbk5hbWUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA0NCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDQ3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNDgsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA1MSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX25ld0RhdGFiYXNlTmFtZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDUyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zaG93U3lzdGVtRGF0YWJhc2VzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNTYsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA1OSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3Nob3dTM0NyZWF0ZURpYWxvZywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDYwLCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNjMsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zM0NyZWF0ZURpYWxvZ1R5cGUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA2NCwgdGhpcywgImZvbGRlciIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDY3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfczNDcmVhdGVEaWFsb2dCdWNrZXQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA2OCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDcxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfczNDcmVhdGVEaWFsb2dOYW1lLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNzIsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA3NSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3NpZGViYXJXaWR0aCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDc2LCB0aGlzLCAyNDApKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDc5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfaXNSZXNpemluZ1NpZGViYXIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA4MCwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDgzLCB0aGlzKTsKICAgIF9fcHVibGljRmllbGQodGhpcywgIlNZU1RFTV9EQVRBQkFTRVMiLCBbImFkbWluIiwgImNvbmZpZyIsICJsb2NhbCJdKTsKICAgIF9fcHVibGljRmllbGQodGhpcywgInN0YXJ0U2lkZWJhclJlc2l6ZSIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHRoaXMuaXNSZXNpemluZ1NpZGViYXIgPSB0cnVlOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZVNpZGViYXJSZXNpemUpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5lbmRTaWRlYmFyUmVzaXplKTsKICAgIH0pOwogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiaGFuZGxlU2lkZWJhclJlc2l6ZSIsIChlMTEpID0+IHsKICAgICAgaWYgKCF0aGlzLmlzUmVzaXppbmdTaWRlYmFyKSByZXR1cm47CiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5taW4oTWF0aC5tYXgoZTExLmNsaWVudFgsIDE1MCksIDUwMCk7CiAgICAgIHRoaXMuc2lkZWJhcldpZHRoID0gbmV3V2lkdGg7CiAgICB9KTsKICAgIF9fcHVibGljRmllbGQodGhpcywgImVuZFNpZGViYXJSZXNpemUiLCAoKSA9PiB7CiAgICAgIHRoaXMuaXNSZXNpemluZ1NpZGViYXIgPSBmYWxzZTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVTaWRlYmFyUmVzaXplKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuZW5kU2lkZWJhclJlc2l6ZSk7CiAgICB9KTsKICB9CiAgZ2V0IHZpc2libGVEYXRhYmFzZXMoKSB7CiAgICBpZiAodGhpcy5zaG93U3lzdGVtRGF0YWJhc2VzKSB7CiAgICAgIHJldHVybiB0aGlzLmRhdGFiYXNlczsKICAgIH0KICAgIHJldHVybiB0aGlzLmRhdGFiYXNlcy5maWx0ZXIoKGRiKSA9PiAhdGhpcy5TWVNURU1fREFUQUJBU0VTLmluY2x1ZGVzKGRiLm5hbWUpKTsKICB9CiAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgYXdhaXQgdGhpcy5sb2FkRGF0YSgpOwogICAgdGhpcy5pbml0aWFsaXplQ2hhbmdlU3RyZWFtKCk7CiAgfQogIGFzeW5jIGluaXRpYWxpemVDaGFuZ2VTdHJlYW0oKSB7CiAgICB0cnkgewogICAgICBhd2FpdCBjaGFuZ2VTdHJlYW1TZXJ2aWNlLmNvbm5lY3QoKTsKICAgICAgY29uc29sZS5sb2coIltUc3ZpZXdBcHBdIENoYW5nZVN0cmVhbSBjb25uZWN0ZWQiKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUud2FybigiW1Rzdmlld0FwcF0gRmFpbGVkIHRvIGNvbm5lY3QgdG8gQ2hhbmdlU3RyZWFtOiIsIGVycm9yKTsKICAgIH0KICB9CiAgYXN5bmMgbG9hZERhdGEoKSB7CiAgICB0cnkgewogICAgICB0aGlzLmJ1Y2tldHMgPSBhd2FpdCBhcGlTZXJ2aWNlLmxpc3RCdWNrZXRzKCk7CiAgICAgIHRoaXMuZGF0YWJhc2VzID0gYXdhaXQgYXBpU2VydmljZS5saXN0RGF0YWJhc2VzKCk7CiAgICAgIGlmICh0aGlzLnZpZXdNb2RlID09PSAiczMiICYmIHRoaXMuYnVja2V0cy5sZW5ndGggPiAwICYmICF0aGlzLnNlbGVjdGVkQnVja2V0KSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZEJ1Y2tldCA9IHRoaXMuYnVja2V0c1swXTsKICAgICAgfQogICAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gIm1vbmdvIiAmJiB0aGlzLmRhdGFiYXNlcy5sZW5ndGggPiAwICYmICF0aGlzLnNlbGVjdGVkRGF0YWJhc2UpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YWJhc2UgPSB0aGlzLmRhdGFiYXNlc1swXS5uYW1lOwogICAgICB9CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBkYXRhOiIsIGVycik7CiAgICB9CiAgfQogIHNldFZpZXdNb2RlKG1vZGUpIHsKICAgIHRoaXMudmlld01vZGUgPSBtb2RlOwogIH0KICBzZWxlY3RCdWNrZXQoYnVja2V0KSB7CiAgICB0aGlzLnNlbGVjdGVkQnVja2V0ID0gYnVja2V0OwogIH0KICBzZWxlY3REYXRhYmFzZShkYikgewogICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhYmFzZSA9PT0gZGIpIHsKICAgICAgdGhpcy5zZWxlY3RlZERhdGFiYXNlID0gIiI7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnNlbGVjdGVkRGF0YWJhc2UgPSBkYjsKICAgICAgdGhpcy5zZWxlY3RlZENvbGxlY3Rpb24gPSAiIjsKICAgIH0KICB9CiAgc2VsZWN0Q29sbGVjdGlvbihjb2xsZWN0aW9uKSB7CiAgICB0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbiA9IGNvbGxlY3Rpb247CiAgfQogIGFzeW5jIGNyZWF0ZUJ1Y2tldCgpIHsKICAgIGlmICghdGhpcy5uZXdCdWNrZXROYW1lLnRyaW0oKSkgcmV0dXJuOwogICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuY3JlYXRlQnVja2V0KHRoaXMubmV3QnVja2V0TmFtZS50cmltKCkpOwogICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgdGhpcy5idWNrZXRzID0gWy4uLnRoaXMuYnVja2V0cywgdGhpcy5uZXdCdWNrZXROYW1lLnRyaW0oKV07CiAgICAgIHRoaXMubmV3QnVja2V0TmFtZSA9ICIiOwogICAgICB0aGlzLnNob3dDcmVhdGVCdWNrZXREaWFsb2cgPSBmYWxzZTsKICAgIH0KICB9CiAgYXN5bmMgY3JlYXRlQ29sbGVjdGlvbigpIHsKICAgIGlmICghdGhpcy5uZXdDb2xsZWN0aW9uTmFtZS50cmltKCkgfHwgIXRoaXMuc2VsZWN0ZWREYXRhYmFzZSkgcmV0dXJuOwogICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuY3JlYXRlQ29sbGVjdGlvbih0aGlzLnNlbGVjdGVkRGF0YWJhc2UsIHRoaXMubmV3Q29sbGVjdGlvbk5hbWUudHJpbSgpKTsKICAgIGlmIChzdWNjZXNzKSB7CiAgICAgIHRoaXMubmV3Q29sbGVjdGlvbk5hbWUgPSAiIjsKICAgICAgdGhpcy5zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZyA9IGZhbHNlOwogICAgfQogIH0KICBhc3luYyBjcmVhdGVEYXRhYmFzZSgpIHsKICAgIGlmICghdGhpcy5uZXdEYXRhYmFzZU5hbWUudHJpbSgpKSByZXR1cm47CiAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXBpU2VydmljZS5jcmVhdGVEYXRhYmFzZSh0aGlzLm5ld0RhdGFiYXNlTmFtZS50cmltKCkpOwogICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgdGhpcy5kYXRhYmFzZXMgPSBbLi4udGhpcy5kYXRhYmFzZXMsIHsgbmFtZTogdGhpcy5uZXdEYXRhYmFzZU5hbWUudHJpbSgpIH1dOwogICAgICB0aGlzLm5ld0RhdGFiYXNlTmFtZSA9ICIiOwogICAgICB0aGlzLnNob3dDcmVhdGVEYXRhYmFzZURpYWxvZyA9IGZhbHNlOwogICAgfQogIH0KICBhc3luYyBkZWxldGVCdWNrZXQoYnVja2V0LCBlMTEpIHsKICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgIGlmICghY29uZmlybShgRGVsZXRlIGJ1Y2tldCAiJHtidWNrZXR9Ij8gVGhpcyB3aWxsIGRlbGV0ZSBhbGwgb2JqZWN0cyBpbiB0aGUgYnVja2V0LmApKSByZXR1cm47CiAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXBpU2VydmljZS5kZWxldGVCdWNrZXQoYnVja2V0KTsKICAgIGlmIChzdWNjZXNzKSB7CiAgICAgIHRoaXMuYnVja2V0cyA9IHRoaXMuYnVja2V0cy5maWx0ZXIoKGI1KSA9PiBiNSAhPT0gYnVja2V0KTsKICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRCdWNrZXQgPT09IGJ1Y2tldCkgewogICAgICAgIHRoaXMuc2VsZWN0ZWRCdWNrZXQgPSB0aGlzLmJ1Y2tldHNbMF0gfHwgIiI7CiAgICAgIH0KICAgIH0KICB9CiAgYXN5bmMgZGVsZXRlRGF0YWJhc2UoZGJOYW1lLCBlMTEpIHsKICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgIGlmICghY29uZmlybShgRGVsZXRlIGRhdGFiYXNlICIke2RiTmFtZX0iPyBUaGlzIHdpbGwgZGVsZXRlIGFsbCBjb2xsZWN0aW9ucyBhbmQgZG9jdW1lbnRzLmApKSByZXR1cm47CiAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXBpU2VydmljZS5kcm9wRGF0YWJhc2UoZGJOYW1lKTsKICAgIGlmIChzdWNjZXNzKSB7CiAgICAgIHRoaXMuZGF0YWJhc2VzID0gdGhpcy5kYXRhYmFzZXMuZmlsdGVyKChkNikgPT4gZDYubmFtZSAhPT0gZGJOYW1lKTsKICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhYmFzZSA9PT0gZGJOYW1lKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFiYXNlID0gdGhpcy5kYXRhYmFzZXNbMF0/Lm5hbWUgfHwgIiI7CiAgICAgICAgdGhpcy5zZWxlY3RlZENvbGxlY3Rpb24gPSAiIjsKICAgICAgfQogICAgfQogIH0KICBhc3luYyBkZWxldGVDb2xsZWN0aW9uKGRiTmFtZSwgY29sbGVjdGlvbk5hbWUpIHsKICAgIGlmICghY29uZmlybShgRGVsZXRlIGNvbGxlY3Rpb24gIiR7Y29sbGVjdGlvbk5hbWV9Ij8gVGhpcyB3aWxsIGRlbGV0ZSBhbGwgZG9jdW1lbnRzLmApKSByZXR1cm47CiAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXBpU2VydmljZS5kcm9wQ29sbGVjdGlvbihkYk5hbWUsIGNvbGxlY3Rpb25OYW1lKTsKICAgIGlmIChzdWNjZXNzKSB7CiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbiA9PT0gY29sbGVjdGlvbk5hbWUpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbiA9ICIiOwogICAgICB9CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgfQogIH0KICBoYW5kbGVCdWNrZXRDb250ZXh0TWVudShldmVudCwgYnVja2V0KSB7CiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgRGVlc0NvbnRleHRtZW51Mi5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICB7CiAgICAgICAgbmFtZTogIlZpZXcgQ29udGVudHMiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZvbGRlck9wZW4iLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgdGhpcy5zZWxlY3RCdWNrZXQoYnVja2V0KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7CiAgICAgICAgbmFtZTogIk5ldyBGb2xkZXIiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZvbGRlclBsdXMiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5vcGVuUzNDcmVhdGVEaWFsb2coYnVja2V0LCAiZm9sZGVyIikKICAgICAgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJOZXcgRmlsZSIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVBsdXMiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5vcGVuUzNDcmVhdGVEaWFsb2coYnVja2V0LCAiZmlsZSIpCiAgICAgIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkRlbGV0ZSBCdWNrZXQiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOnRyYXNoMiIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAoY29uZmlybShgRGVsZXRlIGJ1Y2tldCAiJHtidWNrZXR9Ij8gVGhpcyB3aWxsIGRlbGV0ZSBhbGwgb2JqZWN0cyBpbiB0aGUgYnVja2V0LmApKSB7CiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLmRlbGV0ZUJ1Y2tldChidWNrZXQpOwogICAgICAgICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICAgICAgIHRoaXMuYnVja2V0cyA9IHRoaXMuYnVja2V0cy5maWx0ZXIoKGI1KSA9PiBiNSAhPT0gYnVja2V0KTsKICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEJ1Y2tldCA9PT0gYnVja2V0KSB7CiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVja2V0ID0gdGhpcy5idWNrZXRzWzBdIHx8ICIiOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXSk7CiAgfQogIG9wZW5TM0NyZWF0ZURpYWxvZyhidWNrZXQsIHR5cGU1KSB7CiAgICB0aGlzLnMzQ3JlYXRlRGlhbG9nQnVja2V0ID0gYnVja2V0OwogICAgdGhpcy5zM0NyZWF0ZURpYWxvZ1R5cGUgPSB0eXBlNTsKICAgIHRoaXMuczNDcmVhdGVEaWFsb2dOYW1lID0gIiI7CiAgICB0aGlzLnNob3dTM0NyZWF0ZURpYWxvZyA9IHRydWU7CiAgfQogIGdldENvbnRlbnRUeXBlKGV4dCkgewogICAgY29uc3QgY29udGVudFR5cGVzID0gewogICAgICBqc29uOiAiYXBwbGljYXRpb24vanNvbiIsCiAgICAgIHR4dDogInRleHQvcGxhaW4iLAogICAgICBodG1sOiAidGV4dC9odG1sIiwKICAgICAgY3NzOiAidGV4dC9jc3MiLAogICAgICBqczogImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiLAogICAgICB0czogInRleHQvdHlwZXNjcmlwdCIsCiAgICAgIG1kOiAidGV4dC9tYXJrZG93biIsCiAgICAgIHhtbDogImFwcGxpY2F0aW9uL3htbCIsCiAgICAgIHlhbWw6ICJ0ZXh0L3lhbWwiLAogICAgICB5bWw6ICJ0ZXh0L3lhbWwiLAogICAgICBjc3Y6ICJ0ZXh0L2NzdiIKICAgIH07CiAgICByZXR1cm4gY29udGVudFR5cGVzW2V4dF0gfHwgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7CiAgfQogIGdldERlZmF1bHRDb250ZW50KGV4dCkgewogICAgY29uc3QgZGVmYXVsdHMgPSB7CiAgICAgIGpzb246ICJ7XG4gIFxufSIsCiAgICAgIGh0bWw6ICI8IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG4gIDx0aXRsZT48L3RpdGxlPlxuPC9oZWFkPlxuPGJvZHk+XG4gIFxuPC9ib2R5PlxuPC9odG1sPiIsCiAgICAgIG1kOiAiIyBUaXRsZVxuXG4iLAogICAgICB0eHQ6ICIiCiAgICB9OwogICAgcmV0dXJuIGRlZmF1bHRzW2V4dF0gfHwgIiI7CiAgfQogIGFzeW5jIGhhbmRsZVMzQ3JlYXRlKCkgewogICAgaWYgKCF0aGlzLnMzQ3JlYXRlRGlhbG9nTmFtZS50cmltKCkpIHJldHVybjsKICAgIGNvbnN0IG5hbWUgPSB0aGlzLnMzQ3JlYXRlRGlhbG9nTmFtZS50cmltKCk7CiAgICBsZXQgcGF0aDI7CiAgICBpZiAodGhpcy5zM0NyZWF0ZURpYWxvZ1R5cGUgPT09ICJmb2xkZXIiKSB7CiAgICAgIHBhdGgyID0gbmFtZSArICIvLmtlZXAiOwogICAgfSBlbHNlIHsKICAgICAgcGF0aDIgPSBuYW1lOwogICAgfQogICAgY29uc3QgZXh0ID0gbmFtZS5zcGxpdCgiLiIpLnBvcCgpPy50b0xvd2VyQ2FzZSgpIHx8ICIiOwogICAgY29uc3QgY29udGVudFR5cGUgPSB0aGlzLnMzQ3JlYXRlRGlhbG9nVHlwZSA9PT0gImZpbGUiID8gdGhpcy5nZXRDb250ZW50VHlwZShleHQpIDogImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7CiAgICBjb25zdCBjb250ZW50MyA9IHRoaXMuczNDcmVhdGVEaWFsb2dUeXBlID09PSAiZmlsZSIgPyB0aGlzLmdldERlZmF1bHRDb250ZW50KGV4dCkgOiAiIjsKICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLnB1dE9iamVjdCgKICAgICAgdGhpcy5zM0NyZWF0ZURpYWxvZ0J1Y2tldCwKICAgICAgcGF0aDIsCiAgICAgIGJ0b2EoY29udGVudDMpLAogICAgICBjb250ZW50VHlwZQogICAgKTsKICAgIGlmIChzdWNjZXNzKSB7CiAgICAgIHRoaXMuc2hvd1MzQ3JlYXRlRGlhbG9nID0gZmFsc2U7CiAgICAgIHRoaXMuc2VsZWN0ZWRCdWNrZXQgPSB0aGlzLnMzQ3JlYXRlRGlhbG9nQnVja2V0OwogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgIH0KICB9CiAgaGFuZGxlRGF0YWJhc2VDb250ZXh0TWVudShldmVudCwgZGJOYW1lKSB7CiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgRGVlc0NvbnRleHRtZW51Mi5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICB7CiAgICAgICAgbmFtZTogIk5ldyBDb2xsZWN0aW9uIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmb2xkZXJQbHVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhYmFzZSA9IGRiTmFtZTsKICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2cgPSB0cnVlOwogICAgICAgIH0KICAgICAgfSwKICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiRGVsZXRlIERhdGFiYXNlIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgaWYgKGNvbmZpcm0oYERlbGV0ZSBkYXRhYmFzZSAiJHtkYk5hbWV9Ij8gVGhpcyB3aWxsIGRlbGV0ZSBhbGwgY29sbGVjdGlvbnMgYW5kIGRvY3VtZW50cy5gKSkgewogICAgICAgICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXBpU2VydmljZS5kcm9wRGF0YWJhc2UoZGJOYW1lKTsKICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICAgICAgICB0aGlzLmRhdGFiYXNlcyA9IHRoaXMuZGF0YWJhc2VzLmZpbHRlcigoZDYpID0+IGQ2Lm5hbWUgIT09IGRiTmFtZSk7CiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhYmFzZSA9PT0gZGJOYW1lKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YWJhc2UgPSB0aGlzLmRhdGFiYXNlc1swXT8ubmFtZSB8fCAiIjsKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uID0gIiI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICBdKTsKICB9CiAgaGFuZGxlU2lkZWJhckNvbnRleHRNZW51KGV2ZW50KSB7CiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgRGVlc0NvbnRleHRtZW51Mi5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICB7CiAgICAgICAgbmFtZTogdGhpcy5zaG93U3lzdGVtRGF0YWJhc2VzID8gIkhpZGUgU3lzdGVtIERhdGFiYXNlcyIgOiAiU2hvdyBTeXN0ZW0gRGF0YWJhc2VzIiwKICAgICAgICBpY29uTmFtZTogdGhpcy5zaG93U3lzdGVtRGF0YWJhc2VzID8gImx1Y2lkZTpleWVPZmYiIDogImx1Y2lkZTpleWUiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgdGhpcy5zaG93U3lzdGVtRGF0YWJhc2VzID0gIXRoaXMuc2hvd1N5c3RlbURhdGFiYXNlczsKICAgICAgICB9CiAgICAgIH0KICAgIF0pOwogIH0KICByZW5kZXIoKSB7CiAgICByZXR1cm4gaHRtbDhgCiAgICAgIDxkaXYgY2xhc3M9ImFwcC1jb250YWluZXIiPgogICAgICAgIDxoZWFkZXIgY2xhc3M9ImFwcC1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iYXBwLXRpdGxlIj4KICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yIDNoNmE0IDQgMCAwIDEgNCA0djE0YTMgMyAwIDAgMC0zLTNIMnoiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMjIgM2gtNmE0IDQgMCAwIDAtNCA0djE0YTMgMyAwIDAgMSAzLTNoN3oiPjwvcGF0aD4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIFRzVmlldwogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPG5hdiBjbGFzcz0ibmF2LXRhYnMiPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9Im5hdi10YWIgJHt0aGlzLnZpZXdNb2RlID09PSAiczMiID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZXRWaWV3TW9kZSgiczMiKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIFMzIFN0b3JhZ2UKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0ibmF2LXRhYiAke3RoaXMudmlld01vZGUgPT09ICJtb25nbyIgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNldFZpZXdNb2RlKCJtb25nbyIpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgTW9uZ29EQgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJuYXYtdGFiICR7dGhpcy52aWV3TW9kZSA9PT0gImFjdGl2aXR5IiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2V0Vmlld01vZGUoImFjdGl2aXR5Iil9CiAgICAgICAgICAgID4KICAgICAgICAgICAgICBBY3Rpdml0eQogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJuYXYtdGFiICR7dGhpcy52aWV3TW9kZSA9PT0gInNldHRpbmdzIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2V0Vmlld01vZGUoInNldHRpbmdzIil9CiAgICAgICAgICAgID4KICAgICAgICAgICAgICBTZXR0aW5ncwogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvbmF2PgogICAgICAgIDwvaGVhZGVyPgoKICAgICAgICA8bWFpbiBjbGFzcz0iYXBwLW1haW4iIHN0eWxlPSItLXNpZGViYXItd2lkdGg6ICR7dGhpcy5zaWRlYmFyV2lkdGh9cHgiPgogICAgICAgICAgJHt0aGlzLnJlbmRlclNpZGViYXIoKX0KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9InJlc2l6ZS1kaXZpZGVyICR7dGhpcy5pc1Jlc2l6aW5nU2lkZWJhciA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICBAbW91c2Vkb3duPSR7dGhpcy5zdGFydFNpZGViYXJSZXNpemV9CiAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAke3RoaXMucmVuZGVyQ29udGVudCgpfQogICAgICAgIDwvbWFpbj4KICAgICAgPC9kaXY+CiAgICAgICR7dGhpcy5yZW5kZXJDcmVhdGVCdWNrZXREaWFsb2coKX0KICAgICAgJHt0aGlzLnJlbmRlckNyZWF0ZUNvbGxlY3Rpb25EaWFsb2coKX0KICAgICAgJHt0aGlzLnJlbmRlckNyZWF0ZURhdGFiYXNlRGlhbG9nKCl9CiAgICAgICR7dGhpcy5yZW5kZXJTM0NyZWF0ZURpYWxvZygpfQogICAgYDsKICB9CiAgcmVuZGVyQ3JlYXRlQnVja2V0RGlhbG9nKCkgewogICAgaWYgKCF0aGlzLnNob3dDcmVhdGVCdWNrZXREaWFsb2cpIHJldHVybiAiIjsKICAgIHJldHVybiBodG1sOGAKICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLW92ZXJsYXkiIEBjbGljaz0keygpID0+IHRoaXMuc2hvd0NyZWF0ZUJ1Y2tldERpYWxvZyA9IGZhbHNlfT4KICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ciIEBjbGljaz0keyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPkNyZWF0ZSBOZXcgQnVja2V0PC9kaXY+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgY2xhc3M9ImRpYWxvZy1pbnB1dCIKICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkJ1Y2tldCBuYW1lIgogICAgICAgICAgICAudmFsdWU9JHt0aGlzLm5ld0J1Y2tldE5hbWV9CiAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IHRoaXMubmV3QnVja2V0TmFtZSA9IGUxMS50YXJnZXQudmFsdWV9CiAgICAgICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gZTExLmtleSA9PT0gIkVudGVyIiAmJiB0aGlzLmNyZWF0ZUJ1Y2tldCgpfQogICAgICAgICAgLz4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1hY3Rpb25zIj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGlhbG9nLWJ0biBkaWFsb2ctYnRuLWNhbmNlbCIgQGNsaWNrPSR7KCkgPT4gdGhpcy5zaG93Q3JlYXRlQnVja2V0RGlhbG9nID0gZmFsc2V9PgogICAgICAgICAgICAgIENhbmNlbAogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJkaWFsb2ctYnRuIGRpYWxvZy1idG4tY3JlYXRlIgogICAgICAgICAgICAgID9kaXNhYmxlZD0keyF0aGlzLm5ld0J1Y2tldE5hbWUudHJpbSgpfQogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuY3JlYXRlQnVja2V0KCl9CiAgICAgICAgICAgID4KICAgICAgICAgICAgICBDcmVhdGUKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJDcmVhdGVDb2xsZWN0aW9uRGlhbG9nKCkgewogICAgaWYgKCF0aGlzLnNob3dDcmVhdGVDb2xsZWN0aW9uRGlhbG9nKSByZXR1cm4gIiI7CiAgICByZXR1cm4gaHRtbDhgCiAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1vdmVybGF5IiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVDb2xsZWN0aW9uRGlhbG9nID0gZmFsc2V9PgogICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZyIgQGNsaWNrPSR7KGUxMSkgPT4gZTExLnN0b3BQcm9wYWdhdGlvbigpfT4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+Q3JlYXRlIENvbGxlY3Rpb24gaW4gJHt0aGlzLnNlbGVjdGVkRGF0YWJhc2V9PC9kaXY+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgY2xhc3M9ImRpYWxvZy1pbnB1dCIKICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkNvbGxlY3Rpb24gbmFtZSIKICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5uZXdDb2xsZWN0aW9uTmFtZX0KICAgICAgICAgICAgQGlucHV0PSR7KGUxMSkgPT4gdGhpcy5uZXdDb2xsZWN0aW9uTmFtZSA9IGUxMS50YXJnZXQudmFsdWV9CiAgICAgICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gZTExLmtleSA9PT0gIkVudGVyIiAmJiB0aGlzLmNyZWF0ZUNvbGxlY3Rpb24oKX0KICAgICAgICAgIC8+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctYWN0aW9ucyI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRpYWxvZy1idG4gZGlhbG9nLWJ0bi1jYW5jZWwiIEBjbGljaz0keygpID0+IHRoaXMuc2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2cgPSBmYWxzZX0+CiAgICAgICAgICAgICAgQ2FuY2VsCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9ImRpYWxvZy1idG4gZGlhbG9nLWJ0bi1jcmVhdGUiCiAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7IXRoaXMubmV3Q29sbGVjdGlvbk5hbWUudHJpbSgpfQogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuY3JlYXRlQ29sbGVjdGlvbigpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgQ3JlYXRlCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVyQ3JlYXRlRGF0YWJhc2VEaWFsb2coKSB7CiAgICBpZiAoIXRoaXMuc2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nKSByZXR1cm4gIiI7CiAgICByZXR1cm4gaHRtbDhgCiAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1vdmVybGF5IiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVEYXRhYmFzZURpYWxvZyA9IGZhbHNlfT4KICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ciIEBjbGljaz0keyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPkNyZWF0ZSBOZXcgRGF0YWJhc2U8L2Rpdj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICBjbGFzcz0iZGlhbG9nLWlucHV0IgogICAgICAgICAgICBwbGFjZWhvbGRlcj0iRGF0YWJhc2UgbmFtZSIKICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5uZXdEYXRhYmFzZU5hbWV9CiAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IHRoaXMubmV3RGF0YWJhc2VOYW1lID0gZTExLnRhcmdldC52YWx1ZX0KICAgICAgICAgICAgQGtleWRvd249JHsoZTExKSA9PiBlMTEua2V5ID09PSAiRW50ZXIiICYmIHRoaXMuY3JlYXRlRGF0YWJhc2UoKX0KICAgICAgICAgIC8+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctYWN0aW9ucyI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRpYWxvZy1idG4gZGlhbG9nLWJ0bi1jYW5jZWwiIEBjbGljaz0keygpID0+IHRoaXMuc2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nID0gZmFsc2V9PgogICAgICAgICAgICAgIENhbmNlbAogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJkaWFsb2ctYnRuIGRpYWxvZy1idG4tY3JlYXRlIgogICAgICAgICAgICAgID9kaXNhYmxlZD0keyF0aGlzLm5ld0RhdGFiYXNlTmFtZS50cmltKCl9CiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5jcmVhdGVEYXRhYmFzZSgpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgQ3JlYXRlCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVyUzNDcmVhdGVEaWFsb2coKSB7CiAgICBpZiAoIXRoaXMuc2hvd1MzQ3JlYXRlRGlhbG9nKSByZXR1cm4gIiI7CiAgICBjb25zdCBpc0ZvbGRlciA9IHRoaXMuczNDcmVhdGVEaWFsb2dUeXBlID09PSAiZm9sZGVyIjsKICAgIGNvbnN0IHRpdGxlID0gaXNGb2xkZXIgPyAiQ3JlYXRlIE5ldyBGb2xkZXIiIDogIkNyZWF0ZSBOZXcgRmlsZSI7CiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGlzRm9sZGVyID8gImZvbGRlci1uYW1lIG9yIHBhdGgvdG8vZm9sZGVyIiA6ICJmaWxlbmFtZS50eHQgb3IgcGF0aC90by9maWxlLnR4dCI7CiAgICByZXR1cm4gaHRtbDhgCiAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1vdmVybGF5IiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dTM0NyZWF0ZURpYWxvZyA9IGZhbHNlfT4KICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ciIEBjbGljaz0keyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPiR7dGl0bGV9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctbG9jYXRpb24iPgogICAgICAgICAgICBMb2NhdGlvbjogJHt0aGlzLnMzQ3JlYXRlRGlhbG9nQnVja2V0fS8KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIGNsYXNzPSJkaWFsb2ctaW5wdXQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSR7cGxhY2Vob2xkZXJ9CiAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuczNDcmVhdGVEaWFsb2dOYW1lfQogICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiB0aGlzLnMzQ3JlYXRlRGlhbG9nTmFtZSA9IGUxMS50YXJnZXQudmFsdWV9CiAgICAgICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gZTExLmtleSA9PT0gIkVudGVyIiAmJiB0aGlzLmhhbmRsZVMzQ3JlYXRlKCl9CiAgICAgICAgICAvPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWhpbnQiPgogICAgICAgICAgICBVc2UgIi8iIHRvIGNyZWF0ZSBuZXN0ZWQgJHtpc0ZvbGRlciA/ICJmb2xkZXJzIiA6ICJwYXRoIn0gKGUuZy4sICR7aXNGb2xkZXIgPyAicGFyZW50L2NoaWxkIiA6ICJmb2xkZXIvZmlsZS50eHQifSkKICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWFjdGlvbnMiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkaWFsb2ctYnRuIGRpYWxvZy1idG4tY2FuY2VsIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dTM0NyZWF0ZURpYWxvZyA9IGZhbHNlfT4KICAgICAgICAgICAgICBDYW5jZWwKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0iZGlhbG9nLWJ0biBkaWFsb2ctYnRuLWNyZWF0ZSIKICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5zM0NyZWF0ZURpYWxvZ05hbWUudHJpbSgpfQogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuaGFuZGxlUzNDcmVhdGUoKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIENyZWF0ZQogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlclNpZGViYXIoKSB7CiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gInMzIikgewogICAgICByZXR1cm4gaHRtbDhgCiAgICAgICAgPGFzaWRlIGNsYXNzPSJzaWRlYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItaGVhZGVyIj5CdWNrZXRzPC9kaXY+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjcmVhdGUtYnRuIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVCdWNrZXREaWFsb2cgPSB0cnVlfT4KICAgICAgICAgICAgPHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+CiAgICAgICAgICAgICAgPGxpbmUgeDE9IjEyIiB5MT0iNSIgeDI9IjEyIiB5Mj0iMTkiPjwvbGluZT4KICAgICAgICAgICAgICA8bGluZSB4MT0iNSIgeTE9IjEyIiB4Mj0iMTkiIHkyPSIxMiI+PC9saW5lPgogICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgTmV3IEJ1Y2tldAogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWxpc3QiPgogICAgICAgICAgICAke3RoaXMuYnVja2V0cy5sZW5ndGggPT09IDAgPyBodG1sOGA8ZGl2IGNsYXNzPSJzaWRlYmFyLWl0ZW0iIHN0eWxlPSJjb2xvcjogIzY2NjsgY3Vyc29yOiBkZWZhdWx0OyI+Tm8gYnVja2V0cyBmb3VuZDwvZGl2PmAgOiB0aGlzLmJ1Y2tldHMubWFwKAogICAgICAgIChidWNrZXQpID0+IGh0bWw4YAogICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzaWRlYmFyLWl0ZW0gJHtidWNrZXQgPT09IHRoaXMuc2VsZWN0ZWRCdWNrZXQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZWxlY3RCdWNrZXQoYnVja2V0KX0KICAgICAgICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhlMTEpID0+IHRoaXMuaGFuZGxlQnVja2V0Q29udGV4dE1lbnUoZTExLCBidWNrZXQpfQogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaWRlYmFyLWl0ZW0tbmFtZSI+JHtidWNrZXR9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICBgCiAgICAgICl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2FzaWRlPgogICAgICBgOwogICAgfQogICAgaWYgKHRoaXMudmlld01vZGUgPT09ICJtb25nbyIpIHsKICAgICAgcmV0dXJuIGh0bWw4YAogICAgICAgIDxhc2lkZSBjbGFzcz0ic2lkZWJhciIgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVTaWRlYmFyQ29udGV4dE1lbnUoZTExKX0+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWhlYWRlciI+RGF0YWJhc2VzICYgQ29sbGVjdGlvbnM8L2Rpdj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNyZWF0ZS1idG4iIEBjbGljaz0keygpID0+IHRoaXMuc2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nID0gdHJ1ZX0+CiAgICAgICAgICAgIDxzdmcgd2lkdGg9IjE0IiBoZWlnaHQ9IjE0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgIDxsaW5lIHgxPSIxMiIgeTE9IjUiIHgyPSIxMiIgeTI9IjE5Ij48L2xpbmU+CiAgICAgICAgICAgICAgPGxpbmUgeDE9IjUiIHkxPSIxMiIgeDI9IjE5IiB5Mj0iMTIiPjwvbGluZT4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIE5ldyBEYXRhYmFzZQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWxpc3QiPgogICAgICAgICAgICAke3RoaXMudmlzaWJsZURhdGFiYXNlcy5sZW5ndGggPT09IDAgPyBodG1sOGA8ZGl2IGNsYXNzPSJzaWRlYmFyLWl0ZW0iIHN0eWxlPSJjb2xvcjogIzY2NjsgY3Vyc29yOiBkZWZhdWx0OyI+Tm8gZGF0YWJhc2VzIGZvdW5kPC9kaXY+YCA6IHRoaXMudmlzaWJsZURhdGFiYXNlcy5tYXAoKGRiKSA9PiB0aGlzLnJlbmRlckRhdGFiYXNlR3JvdXAoZGIpKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvYXNpZGU+CiAgICAgIGA7CiAgICB9CiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gImFjdGl2aXR5IikgewogICAgICByZXR1cm4gaHRtbDhgCiAgICAgICAgPGFzaWRlIGNsYXNzPSJzaWRlYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItaGVhZGVyIj5BY3Rpdml0eSBTdHJlYW08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItbGlzdCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItaXRlbSIgc3R5bGU9ImNvbG9yOiAjODg4OyBmb250LXNpemU6IDEycHg7IGN1cnNvcjogZGVmYXVsdDsiPgogICAgICAgICAgICAgIFJlYWwtdGltZSBjaGFuZ2VzIGZyb20gTW9uZ29EQiBhbmQgUzMgYXBwZWFyIGhlcmUgYXV0b21hdGljYWxseS4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2FzaWRlPgogICAgICBgOwogICAgfQogICAgcmV0dXJuIGh0bWw4YAogICAgICA8YXNpZGUgY2xhc3M9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItaGVhZGVyIj5TZXR0aW5nczwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItbGlzdCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWl0ZW0iPkNvbm5lY3Rpb248L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItaXRlbSI+RGlzcGxheTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2FzaWRlPgogICAgYDsKICB9CiAgcmVuZGVyRGF0YWJhc2VHcm91cChkYikgewogICAgcmV0dXJuIGh0bWw4YAogICAgICA8ZGl2IGNsYXNzPSJkYi1ncm91cCI+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9ImRiLWdyb3VwLWhlYWRlciAke3RoaXMuc2VsZWN0ZWREYXRhYmFzZSA9PT0gZGIubmFtZSA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNlbGVjdERhdGFiYXNlKGRiLm5hbWUpfQogICAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVEYXRhYmFzZUNvbnRleHRNZW51KGUxMSwgZGIubmFtZSl9CiAgICAgICAgPgogICAgICAgICAgPHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+CiAgICAgICAgICAgIDxlbGxpcHNlIGN4PSIxMiIgY3k9IjUiIHJ4PSI5IiByeT0iMyI+PC9lbGxpcHNlPgogICAgICAgICAgICA8cGF0aCBkPSJNMjEgMTJjMCAxLjY2LTQgMy05IDNzLTktMS4zNC05LTMiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggZD0iTTMgNXYxNGMwIDEuNjYgNCAzIDkgM3M5LTEuMzQgOS0zVjUiPjwvcGF0aD4KICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgPHNwYW4gc3R5bGU9ImZsZXg6IDE7Ij4ke2RiLm5hbWV9PC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgICR7dGhpcy5zZWxlY3RlZERhdGFiYXNlID09PSBkYi5uYW1lID8gdGhpcy5yZW5kZXJDb2xsZWN0aW9uc0xpc3QoZGIubmFtZSkgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJDb2xsZWN0aW9uc0xpc3QoZGJOYW1lKSB7CiAgICByZXR1cm4gaHRtbDhgCiAgICAgIDx0c3ZpZXctbW9uZ28tY29sbGVjdGlvbnMKICAgICAgICAuZGF0YWJhc2VOYW1lPSR7ZGJOYW1lfQogICAgICAgIC5zZWxlY3RlZENvbGxlY3Rpb249JHt0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbn0KICAgICAgICBAY29sbGVjdGlvbi1zZWxlY3RlZD0keyhlMTEpID0+IHRoaXMuc2VsZWN0Q29sbGVjdGlvbihlMTEuZGV0YWlsKX0KICAgICAgICBAY29sbGVjdGlvbi1kZWxldGVkPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVDb2xsZWN0aW9uRGVsZXRlZChlMTEpfQogICAgICA+PC90c3ZpZXctbW9uZ28tY29sbGVjdGlvbnM+CiAgICBgOwogIH0KICBoYW5kbGVDb2xsZWN0aW9uRGVsZXRlZChlMTEpIHsKICAgIGNvbnN0IHsgY29sbGVjdGlvbk5hbWUgfSA9IGUxMS5kZXRhaWw7CiAgICBpZiAodGhpcy5zZWxlY3RlZENvbGxlY3Rpb24gPT09IGNvbGxlY3Rpb25OYW1lKSB7CiAgICAgIHRoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uID0gIiI7CiAgICB9CiAgfQogIHJlbmRlckNvbnRlbnQoKSB7CiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gInMzIikgewogICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRCdWNrZXQpIHsKICAgICAgICByZXR1cm4gaHRtbDhgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWFyZWEiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTIyIDE5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg1bDIgM2g5YTIgMiAwIDAgMSAyIDJ6Ij48L3BhdGg+CiAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgPHA+U2VsZWN0IGEgYnVja2V0IHRvIGJyb3dzZTwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOwogICAgICB9CiAgICAgIHJldHVybiBodG1sOGAKICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWFyZWEiPgogICAgICAgICAgPHRzdmlldy1zMy1icm93c2VyIC5idWNrZXROYW1lPSR7dGhpcy5zZWxlY3RlZEJ1Y2tldH0+PC90c3ZpZXctczMtYnJvd3Nlcj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgIH0KICAgIGlmICh0aGlzLnZpZXdNb2RlID09PSAibW9uZ28iKSB7CiAgICAgIGlmICghdGhpcy5zZWxlY3RlZENvbGxlY3Rpb24pIHsKICAgICAgICByZXR1cm4gaHRtbDhgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWFyZWEiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgICAgPGVsbGlwc2UgY3g9IjEyIiBjeT0iNSIgcng9IjkiIHJ5PSIzIj48L2VsbGlwc2U+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjEgMTJjMCAxLjY2LTQgMy05IDNzLTktMS4zNC05LTMiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zIDV2MTRjMCAxLjY2IDQgMyA5IDNzOS0xLjM0IDktM1Y1Ij48L3BhdGg+CiAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgPHA+U2VsZWN0IGEgY29sbGVjdGlvbiB0byB2aWV3IGRvY3VtZW50czwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOwogICAgICB9CiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbiA9PT0gIl9fb3ZlcnZpZXdfXyIpIHsKICAgICAgICByZXR1cm4gaHRtbDhgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWFyZWEiPgogICAgICAgICAgICA8dHN2aWV3LW1vbmdvLWRiLW92ZXJ2aWV3CiAgICAgICAgICAgICAgLmRhdGFiYXNlTmFtZT0ke3RoaXMuc2VsZWN0ZWREYXRhYmFzZX0KICAgICAgICAgICAgPjwvdHN2aWV3LW1vbmdvLWRiLW92ZXJ2aWV3PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYDsKICAgICAgfQogICAgICByZXR1cm4gaHRtbDhgCiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudC1hcmVhIj4KICAgICAgICAgIDx0c3ZpZXctbW9uZ28tYnJvd3NlcgogICAgICAgICAgICAuZGF0YWJhc2VOYW1lPSR7dGhpcy5zZWxlY3RlZERhdGFiYXNlfQogICAgICAgICAgICAuY29sbGVjdGlvbk5hbWU9JHt0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbn0KICAgICAgICAgID48L3Rzdmlldy1tb25nby1icm93c2VyPgogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgfQogICAgaWYgKHRoaXMudmlld01vZGUgPT09ICJhY3Rpdml0eSIpIHsKICAgICAgcmV0dXJuIGh0bWw4YAogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtYXJlYSIgc3R5bGU9InBhZGRpbmc6IDA7Ij4KICAgICAgICAgIDx0c3ZpZXctYWN0aXZpdHktc3RyZWFtCiAgICAgICAgICAgIEBuYXZpZ2F0ZS10by1tb25nbz0ke3RoaXMuaGFuZGxlTmF2aWdhdGVUb01vbmdvfQogICAgICAgICAgICBAbmF2aWdhdGUtdG8tczM9JHt0aGlzLmhhbmRsZU5hdmlnYXRlVG9TM30KICAgICAgICAgID48L3Rzdmlldy1hY3Rpdml0eS1zdHJlYW0+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICByZXR1cm4gaHRtbDhgCiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtYXJlYSI+CiAgICAgICAgPGgyPlNldHRpbmdzPC9oMj4KICAgICAgICA8cD5Db25maWd1cmF0aW9uIG9wdGlvbnMgY29taW5nIHNvb24uPC9wPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIGhhbmRsZU5hdmlnYXRlVG9Nb25nbyhlMTEpIHsKICAgIGNvbnN0IHsgZGF0YWJhc2UsIGNvbGxlY3Rpb24sIGRvY3VtZW50SWQgfSA9IGUxMS5kZXRhaWw7CiAgICB0aGlzLnZpZXdNb2RlID0gIm1vbmdvIjsKICAgIHRoaXMuc2VsZWN0ZWREYXRhYmFzZSA9IGRhdGFiYXNlOwogICAgdGhpcy5zZWxlY3RlZENvbGxlY3Rpb24gPSBjb2xsZWN0aW9uOwogIH0KICBoYW5kbGVOYXZpZ2F0ZVRvUzMoZTExKSB7CiAgICBjb25zdCB7IGJ1Y2tldCwga2V5OiBrZXkyIH0gPSBlMTEuZGV0YWlsOwogICAgdGhpcy52aWV3TW9kZSA9ICJzMyI7CiAgICB0aGlzLnNlbGVjdGVkQnVja2V0ID0gYnVja2V0OwogIH0KfTsKX2luaXQgPSBfX2RlY29yYXRvclN0YXJ0KF9hNCk7Cl92aWV3TW9kZSA9IG5ldyBXZWFrTWFwKCk7Cl9zZWxlY3RlZEJ1Y2tldCA9IG5ldyBXZWFrTWFwKCk7Cl9zZWxlY3RlZERhdGFiYXNlID0gbmV3IFdlYWtNYXAoKTsKX3NlbGVjdGVkQ29sbGVjdGlvbiA9IG5ldyBXZWFrTWFwKCk7Cl9idWNrZXRzID0gbmV3IFdlYWtNYXAoKTsKX2RhdGFiYXNlcyA9IG5ldyBXZWFrTWFwKCk7Cl9zaG93Q3JlYXRlQnVja2V0RGlhbG9nID0gbmV3IFdlYWtNYXAoKTsKX25ld0J1Y2tldE5hbWUgPSBuZXcgV2Vha01hcCgpOwpfc2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2cgPSBuZXcgV2Vha01hcCgpOwpfbmV3Q29sbGVjdGlvbk5hbWUgPSBuZXcgV2Vha01hcCgpOwpfc2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nID0gbmV3IFdlYWtNYXAoKTsKX25ld0RhdGFiYXNlTmFtZSA9IG5ldyBXZWFrTWFwKCk7Cl9zaG93U3lzdGVtRGF0YWJhc2VzID0gbmV3IFdlYWtNYXAoKTsKX3Nob3dTM0NyZWF0ZURpYWxvZyA9IG5ldyBXZWFrTWFwKCk7Cl9zM0NyZWF0ZURpYWxvZ1R5cGUgPSBuZXcgV2Vha01hcCgpOwpfczNDcmVhdGVEaWFsb2dCdWNrZXQgPSBuZXcgV2Vha01hcCgpOwpfczNDcmVhdGVEaWFsb2dOYW1lID0gbmV3IFdlYWtNYXAoKTsKX3NpZGViYXJXaWR0aCA9IG5ldyBXZWFrTWFwKCk7Cl9pc1Jlc2l6aW5nU2lkZWJhciA9IG5ldyBXZWFrTWFwKCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAidmlld01vZGUiLCBfdmlld01vZGVfZGVjLCBUc3ZpZXdBcHAsIF92aWV3TW9kZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2VsZWN0ZWRCdWNrZXQiLCBfc2VsZWN0ZWRCdWNrZXRfZGVjLCBUc3ZpZXdBcHAsIF9zZWxlY3RlZEJ1Y2tldCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2VsZWN0ZWREYXRhYmFzZSIsIF9zZWxlY3RlZERhdGFiYXNlX2RlYywgVHN2aWV3QXBwLCBfc2VsZWN0ZWREYXRhYmFzZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2VsZWN0ZWRDb2xsZWN0aW9uIiwgX3NlbGVjdGVkQ29sbGVjdGlvbl9kZWMsIFRzdmlld0FwcCwgX3NlbGVjdGVkQ29sbGVjdGlvbik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiYnVja2V0cyIsIF9idWNrZXRzX2RlYywgVHN2aWV3QXBwLCBfYnVja2V0cyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiZGF0YWJhc2VzIiwgX2RhdGFiYXNlc19kZWMsIFRzdmlld0FwcCwgX2RhdGFiYXNlcyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2hvd0NyZWF0ZUJ1Y2tldERpYWxvZyIsIF9zaG93Q3JlYXRlQnVja2V0RGlhbG9nX2RlYywgVHN2aWV3QXBwLCBfc2hvd0NyZWF0ZUJ1Y2tldERpYWxvZyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAibmV3QnVja2V0TmFtZSIsIF9uZXdCdWNrZXROYW1lX2RlYywgVHN2aWV3QXBwLCBfbmV3QnVja2V0TmFtZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2ciLCBfc2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2dfZGVjLCBUc3ZpZXdBcHAsIF9zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAibmV3Q29sbGVjdGlvbk5hbWUiLCBfbmV3Q29sbGVjdGlvbk5hbWVfZGVjLCBUc3ZpZXdBcHAsIF9uZXdDb2xsZWN0aW9uTmFtZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nIiwgX3Nob3dDcmVhdGVEYXRhYmFzZURpYWxvZ19kZWMsIFRzdmlld0FwcCwgX3Nob3dDcmVhdGVEYXRhYmFzZURpYWxvZyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAibmV3RGF0YWJhc2VOYW1lIiwgX25ld0RhdGFiYXNlTmFtZV9kZWMsIFRzdmlld0FwcCwgX25ld0RhdGFiYXNlTmFtZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2hvd1N5c3RlbURhdGFiYXNlcyIsIF9zaG93U3lzdGVtRGF0YWJhc2VzX2RlYywgVHN2aWV3QXBwLCBfc2hvd1N5c3RlbURhdGFiYXNlcyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2hvd1MzQ3JlYXRlRGlhbG9nIiwgX3Nob3dTM0NyZWF0ZURpYWxvZ19kZWMsIFRzdmlld0FwcCwgX3Nob3dTM0NyZWF0ZURpYWxvZyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiczNDcmVhdGVEaWFsb2dUeXBlIiwgX3MzQ3JlYXRlRGlhbG9nVHlwZV9kZWMsIFRzdmlld0FwcCwgX3MzQ3JlYXRlRGlhbG9nVHlwZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiczNDcmVhdGVEaWFsb2dCdWNrZXQiLCBfczNDcmVhdGVEaWFsb2dCdWNrZXRfZGVjLCBUc3ZpZXdBcHAsIF9zM0NyZWF0ZURpYWxvZ0J1Y2tldCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiczNDcmVhdGVEaWFsb2dOYW1lIiwgX3MzQ3JlYXRlRGlhbG9nTmFtZV9kZWMsIFRzdmlld0FwcCwgX3MzQ3JlYXRlRGlhbG9nTmFtZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2lkZWJhcldpZHRoIiwgX3NpZGViYXJXaWR0aF9kZWMsIFRzdmlld0FwcCwgX3NpZGViYXJXaWR0aCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiaXNSZXNpemluZ1NpZGViYXIiLCBfaXNSZXNpemluZ1NpZGViYXJfZGVjLCBUc3ZpZXdBcHAsIF9pc1Jlc2l6aW5nU2lkZWJhcik7ClRzdmlld0FwcCA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCAwLCAiVHN2aWV3QXBwIiwgX1Rzdmlld0FwcF9kZWNvcmF0b3JzLCBUc3ZpZXdBcHApOwpfX3B1YmxpY0ZpZWxkKFRzdmlld0FwcCwgInN0eWxlcyIsIFsKICBjc3NNYW5hZ2VyMy5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczNgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRzdmlldy1iZy1wcmltYXJ5LCAjMWExYTFhKTsKICAgICAgICBjb2xvcjogI2VlZTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5hcHAtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogNDhweCAxZnI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuYXBwLWhlYWRlciB7CiAgICAgICAgYmFja2dyb3VuZDogIzE0MTQxNDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIGdhcDogMjRweDsKICAgICAgfQoKICAgICAgLmFwcC10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuYXBwLXRpdGxlIHN2ZyB7CiAgICAgICAgd2lkdGg6IDI0cHg7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICB9CgogICAgICAubmF2LXRhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5uYXYtdGFiIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7CiAgICAgIH0KCiAgICAgIC5uYXYtdGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICB9CgogICAgICAubmF2LXRhYi5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBjb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLmFwcC1tYWluIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogdmFyKC0tc2lkZWJhci13aWR0aCwgMjQwcHgpIDRweCAxZnI7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1kaXZpZGVyIHsKICAgICAgICB3aWR0aDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtZGl2aWRlcjpob3ZlciwKICAgICAgLnJlc2l6ZS1kaXZpZGVyLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogICAgICB9CgogICAgICAuc2lkZWJhciB7CiAgICAgICAgYmFja2dyb3VuZDogIzFlMWUxZTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjMzMzOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzM7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWxpc3QgewogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgfQoKICAgICAgLnNpZGViYXItaXRlbSB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzOwogICAgICB9CgogICAgICAuc2lkZWJhci1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICB9CgogICAgICAuc2lkZWJhci1pdGVtLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWl0ZW0gLmNvdW50IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQtYXJlYSB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSBzdmcgewogICAgICAgIHdpZHRoOiA2NHB4OwogICAgICAgIGhlaWdodDogNjRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLmRiLWdyb3VwIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC5kYi1ncm91cC1oZWFkZXIgewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAjOTk5OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5kYi1ncm91cC1oZWFkZXI6aG92ZXIgewogICAgICAgIGNvbG9yOiAjY2NjOwogICAgICB9CgogICAgICAuZGItZ3JvdXAtY29sbGVjdGlvbnMgewogICAgICAgIHBhZGRpbmctbGVmdDogMTJweDsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24taXRlbSB7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24taXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24taXRlbS5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgICAgICBjb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLmNyZWF0ZS1idG4gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBtYXJnaW46IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgfQoKICAgICAgLmNyZWF0ZS1idG46aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7CiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctb3ZlcmxheSB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNyk7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgIH0KCiAgICAgIC5kaWFsb2cgewogICAgICAgIGJhY2tncm91bmQ6ICMxZTFlMWU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1pbi13aWR0aDogNDAwcHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAyMHB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjUpOwogICAgICB9CgogICAgICAuZGlhbG9nLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuZGlhbG9nLWlucHV0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAxMHB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogIzE0MTQxNDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuZGlhbG9nLWlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1sb2NhdGlvbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgfQoKICAgICAgLmRpYWxvZy1oaW50IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBtYXJnaW4tdG9wOiAtOHB4OwogICAgICB9CgogICAgICAuZGlhbG9nLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tY2FuY2VsIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0OwogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1jYW5jZWw6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWNyZWF0ZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzQwNDA0MDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWNyZWF0ZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogIzUwNTA1MDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tY3JlYXRlOmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tZGVsZXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjIpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlZjQ0NDQ7CiAgICAgICAgY29sb3I6ICNmODcxNzE7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWRlbGV0ZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4zKTsKICAgICAgfQoKICAgICAgLnNpZGViYXItaXRlbS1jb250ZW50IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWl0ZW0tbmFtZSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMSwgVHN2aWV3QXBwKTsKCi8vIHRzX3dlYi9lbGVtZW50cy90c3ZpZXctczMtYnJvd3Nlci50cwp2YXIgX2lzU3RyZWFtQ29ubmVjdGVkX2RlYywgX3JlY2VudENoYW5nZUNvdW50X2RlYywgX2lzUmVzaXppbmdQcmV2aWV3X2RlYywgX3ByZXZpZXdXaWR0aF9kZWMsIF9yZWZyZXNoS2V5X2RlYywgX3NlbGVjdGVkS2V5X2RlYywgX2N1cnJlbnRQcmVmaXhfZGVjLCBfdmlld1R5cGVfZGVjLCBfYnVja2V0TmFtZV9kZWMsIF9hNSwgX1Rzdmlld1MzQnJvd3Nlcl9kZWNvcmF0b3JzLCBfaW5pdDIsIF9idWNrZXROYW1lLCBfdmlld1R5cGUsIF9jdXJyZW50UHJlZml4LCBfc2VsZWN0ZWRLZXksIF9yZWZyZXNoS2V5LCBfcHJldmlld1dpZHRoLCBfaXNSZXNpemluZ1ByZXZpZXcsIF9yZWNlbnRDaGFuZ2VDb3VudCwgX2lzU3RyZWFtQ29ubmVjdGVkOwp2YXIgeyBodG1sOiBodG1sOSwgY3NzOiBjc3M0LCBjc3NNYW5hZ2VyOiBjc3NNYW5hZ2VyNCwgY3VzdG9tRWxlbWVudDogY3VzdG9tRWxlbWVudDMsIHByb3BlcnR5OiBwcm9wZXJ0eTIsIHN0YXRlOiBzdGF0ZTMsIERlZXNFbGVtZW50OiBEZWVzRWxlbWVudDQgfSA9IHBsdWdpbnNfZXhwb3J0czU7Cl9Uc3ZpZXdTM0Jyb3dzZXJfZGVjb3JhdG9ycyA9IFtjdXN0b21FbGVtZW50MygidHN2aWV3LXMzLWJyb3dzZXIiKV07CnZhciBUc3ZpZXdTM0Jyb3dzZXIgPSBjbGFzcyBleHRlbmRzIChfYTUgPSBEZWVzRWxlbWVudDQsIF9idWNrZXROYW1lX2RlYyA9IFtwcm9wZXJ0eTIoeyB0eXBlOiBTdHJpbmcgfSldLCBfdmlld1R5cGVfZGVjID0gW3N0YXRlMygpXSwgX2N1cnJlbnRQcmVmaXhfZGVjID0gW3N0YXRlMygpXSwgX3NlbGVjdGVkS2V5X2RlYyA9IFtzdGF0ZTMoKV0sIF9yZWZyZXNoS2V5X2RlYyA9IFtzdGF0ZTMoKV0sIF9wcmV2aWV3V2lkdGhfZGVjID0gW3N0YXRlMygpXSwgX2lzUmVzaXppbmdQcmV2aWV3X2RlYyA9IFtzdGF0ZTMoKV0sIF9yZWNlbnRDaGFuZ2VDb3VudF9kZWMgPSBbc3RhdGUzKCldLCBfaXNTdHJlYW1Db25uZWN0ZWRfZGVjID0gW3N0YXRlMygpXSwgX2E1KSB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9idWNrZXROYW1lLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDIsIDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF92aWV3VHlwZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCAxMiwgdGhpcywgImNvbHVtbnMiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jdXJyZW50UHJlZml4LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDIsIDE2LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDIsIDE5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2VsZWN0ZWRLZXksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMjAsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMjMsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9yZWZyZXNoS2V5LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDIsIDI0LCB0aGlzLCAwKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMjcsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9wcmV2aWV3V2lkdGgsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMjgsIHRoaXMsIDM1MCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDIsIDMxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfaXNSZXNpemluZ1ByZXZpZXcsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMzIsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMzUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9yZWNlbnRDaGFuZ2VDb3VudCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCAzNiwgdGhpcywgMCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDIsIDM5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfaXNTdHJlYW1Db25uZWN0ZWQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgNDAsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgNDMsIHRoaXMpOwogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiY2hhbmdlU3Vic2NyaXB0aW9uIiwgbnVsbCk7CiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJzdGFydFByZXZpZXdSZXNpemUiLCAoZTExKSA9PiB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLmlzUmVzaXppbmdQcmV2aWV3ID0gdHJ1ZTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVQcmV2aWV3UmVzaXplKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuZW5kUHJldmlld1Jlc2l6ZSk7CiAgICB9KTsKICAgIF9fcHVibGljRmllbGQodGhpcywgImhhbmRsZVByZXZpZXdSZXNpemUiLCAoZTExKSA9PiB7CiAgICAgIGlmICghdGhpcy5pc1Jlc2l6aW5nUHJldmlldykgcmV0dXJuOwogICAgICBjb25zdCBjb250ZW50RWwgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5jb250ZW50Iik7CiAgICAgIGlmICghY29udGVudEVsKSByZXR1cm47CiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250ZW50RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5taW4oTWF0aC5tYXgoY29udGFpbmVyUmVjdC5yaWdodCAtIGUxMS5jbGllbnRYLCAyNTApLCA2MDApOwogICAgICB0aGlzLnByZXZpZXdXaWR0aCA9IG5ld1dpZHRoOwogICAgfSk7CiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJlbmRQcmV2aWV3UmVzaXplIiwgKCkgPT4gewogICAgICB0aGlzLmlzUmVzaXppbmdQcmV2aWV3ID0gZmFsc2U7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMuaGFuZGxlUHJldmlld1Jlc2l6ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmVuZFByZXZpZXdSZXNpemUpOwogICAgfSk7CiAgfQogIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIHRoaXMuc3Vic2NyaWJlVG9DaGFuZ2VzKCk7CiAgfQogIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tQ2hhbmdlcygpOwogIH0KICBzZXRWaWV3VHlwZSh0eXBlNSkgewogICAgdGhpcy52aWV3VHlwZSA9IHR5cGU1OwogIH0KICBuYXZpZ2F0ZVRvUHJlZml4KHByZWZpeDQpIHsKICAgIHRoaXMuY3VycmVudFByZWZpeCA9IHByZWZpeDQ7CiAgICB0aGlzLnNlbGVjdGVkS2V5ID0gIiI7CiAgfQogIGhhbmRsZUtleVNlbGVjdGVkKGUxMSkgewogICAgdGhpcy5zZWxlY3RlZEtleSA9IGUxMS5kZXRhaWwua2V5OwogIH0KICBoYW5kbGVOYXZpZ2F0ZShlMTEpIHsKICAgIHRoaXMubmF2aWdhdGVUb1ByZWZpeChlMTEuZGV0YWlsLnByZWZpeCk7CiAgfQogIGhhbmRsZU9iamVjdERlbGV0ZWQoZTExKSB7CiAgICB0aGlzLnNlbGVjdGVkS2V5ID0gIiI7CiAgICB0aGlzLnJlZnJlc2hLZXkrKzsKICB9CiAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiYnVja2V0TmFtZSIpKSB7CiAgICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSAiIjsKICAgICAgdGhpcy5jdXJyZW50UHJlZml4ID0gIiI7CiAgICAgIHRoaXMucmVjZW50Q2hhbmdlQ291bnQgPSAwOwogICAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbUNoYW5nZXMoKTsKICAgICAgdGhpcy5zdWJzY3JpYmVUb0NoYW5nZXMoKTsKICAgIH0KICB9CiAgYXN5bmMgc3Vic2NyaWJlVG9DaGFuZ2VzKCkgewogICAgaWYgKCF0aGlzLmJ1Y2tldE5hbWUpIHJldHVybjsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBjaGFuZ2VTdHJlYW1TZXJ2aWNlLnN1YnNjcmliZVRvQnVja2V0KHRoaXMuYnVja2V0TmFtZSwgdGhpcy5jdXJyZW50UHJlZml4IHx8IHZvaWQgMCk7CiAgICAgIHRoaXMuaXNTdHJlYW1Db25uZWN0ZWQgPSBzdWNjZXNzOwogICAgICBpZiAoc3VjY2VzcykgewogICAgICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uID0gY2hhbmdlU3RyZWFtU2VydmljZS5nZXRCdWNrZXRDaGFuZ2VzKHRoaXMuYnVja2V0TmFtZSwgdGhpcy5jdXJyZW50UHJlZml4IHx8IHZvaWQgMCkuc3Vic2NyaWJlKChldmVudCkgPT4gewogICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UoZXZlbnQpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oIltTM0Jyb3dzZXJdIEZhaWxlZCB0byBzdWJzY3JpYmUgdG8gY2hhbmdlczoiLCBlcnJvcik7CiAgICAgIHRoaXMuaXNTdHJlYW1Db25uZWN0ZWQgPSBmYWxzZTsKICAgIH0KICB9CiAgdW5zdWJzY3JpYmVGcm9tQ2hhbmdlcygpIHsKICAgIGlmICh0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbikgewogICAgICB0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICB0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbiA9IG51bGw7CiAgICB9CiAgICBpZiAodGhpcy5idWNrZXROYW1lKSB7CiAgICAgIGNoYW5nZVN0cmVhbVNlcnZpY2UudW5zdWJzY3JpYmVGcm9tQnVja2V0KHRoaXMuYnVja2V0TmFtZSwgdGhpcy5jdXJyZW50UHJlZml4IHx8IHZvaWQgMCk7CiAgICB9CiAgICB0aGlzLmlzU3RyZWFtQ29ubmVjdGVkID0gZmFsc2U7CiAgfQogIGhhbmRsZUNoYW5nZShldmVudCkgewogICAgY29uc29sZS5sb2coIltTM0Jyb3dzZXJdIFJlY2VpdmVkIGNoYW5nZToiLCBldmVudCk7CiAgICB0aGlzLnJlY2VudENoYW5nZUNvdW50Kys7CiAgICB0aGlzLnJlZnJlc2hLZXkrKzsKICB9CiAgcmVuZGVyKCkgewogICAgY29uc3QgYnJlYWRjcnVtYlBhcnRzID0gdGhpcy5jdXJyZW50UHJlZml4ID8gdGhpcy5jdXJyZW50UHJlZml4LnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pIDogW107CiAgICByZXR1cm4gaHRtbDlgCiAgICAgIDxkaXYgY2xhc3M9ImJyb3dzZXItY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImJyZWFkY3J1bWIiPgogICAgICAgICAgICA8c3BhbgogICAgICAgICAgICAgIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5uYXZpZ2F0ZVRvUHJlZml4KCIiKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgICR7dGhpcy5idWNrZXROYW1lfQogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICR7YnJlYWRjcnVtYlBhcnRzLm1hcCgocGFydCwgaW5kZXgyKSA9PiB7CiAgICAgIGNvbnN0IHByZWZpeDQgPSBicmVhZGNydW1iUGFydHMuc2xpY2UoMCwgaW5kZXgyICsgMSkuam9pbigiLyIpICsgIi8iOwogICAgICByZXR1cm4gaHRtbDlgCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYnJlYWRjcnVtYi1zZXBhcmF0b3IiPi88L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbgogICAgICAgICAgICAgICAgICBjbGFzcz0iYnJlYWRjcnVtYi1pdGVtIgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLm5hdmlnYXRlVG9QcmVmaXgocHJlZml4NCl9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICR7cGFydH0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICBgOwogICAgfSl9CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdHJlYW0tc3RhdHVzIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0cmVhbS1kb3QgJHt0aGlzLmlzU3RyZWFtQ29ubmVjdGVkID8gImNvbm5lY3RlZCIgOiAiIn0iPjwvc3Bhbj4KICAgICAgICAgICAgJHt0aGlzLmlzU3RyZWFtQ29ubmVjdGVkID8gIkxpdmUiIDogIk9mZmxpbmUifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAke3RoaXMucmVjZW50Q2hhbmdlQ291bnQgPiAwID8gaHRtbDlgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGFuZ2UtaW5kaWNhdG9yIHB1bHNlIj4KICAgICAgICAgICAgICAgICAgJHt0aGlzLnJlY2VudENoYW5nZUNvdW50fSBjaGFuZ2Uke3RoaXMucmVjZW50Q2hhbmdlQ291bnQgPiAxID8gInMiIDogIiJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3LXRvZ2dsZSI+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0idmlldy1idG4gJHt0aGlzLnZpZXdUeXBlID09PSAiY29sdW1ucyIgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNldFZpZXdUeXBlKCJjb2x1bW5zIil9CiAgICAgICAgICAgID4KICAgICAgICAgICAgICBDb2x1bW5zCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9InZpZXctYnRuICR7dGhpcy52aWV3VHlwZSA9PT0gImtleXMiID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZXRWaWV3VHlwZSgia2V5cyIpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgTGlzdAogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50ICR7dGhpcy5zZWxlY3RlZEtleSA/ICJoYXMtcHJldmlldyIgOiAiIn0iIHN0eWxlPSItLXByZXZpZXctd2lkdGg6ICR7dGhpcy5wcmV2aWV3V2lkdGh9cHgiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFpbi12aWV3Ij4KICAgICAgICAgICAgJHt0aGlzLnZpZXdUeXBlID09PSAiY29sdW1ucyIgPyBodG1sOWAKICAgICAgICAgICAgICAgICAgPHRzdmlldy1zMy1jb2x1bW5zCiAgICAgICAgICAgICAgICAgICAgLmJ1Y2tldE5hbWU9JHt0aGlzLmJ1Y2tldE5hbWV9CiAgICAgICAgICAgICAgICAgICAgLmN1cnJlbnRQcmVmaXg9JHt0aGlzLmN1cnJlbnRQcmVmaXh9CiAgICAgICAgICAgICAgICAgICAgLnJlZnJlc2hLZXk9JHt0aGlzLnJlZnJlc2hLZXl9CiAgICAgICAgICAgICAgICAgICAgQGtleS1zZWxlY3RlZD0ke3RoaXMuaGFuZGxlS2V5U2VsZWN0ZWR9CiAgICAgICAgICAgICAgICAgICAgQG5hdmlnYXRlPSR7dGhpcy5oYW5kbGVOYXZpZ2F0ZX0KICAgICAgICAgICAgICAgICAgPjwvdHN2aWV3LXMzLWNvbHVtbnM+CiAgICAgICAgICAgICAgICBgIDogaHRtbDlgCiAgICAgICAgICAgICAgICAgIDx0c3ZpZXctczMta2V5cwogICAgICAgICAgICAgICAgICAgIC5idWNrZXROYW1lPSR7dGhpcy5idWNrZXROYW1lfQogICAgICAgICAgICAgICAgICAgIC5jdXJyZW50UHJlZml4PSR7dGhpcy5jdXJyZW50UHJlZml4fQogICAgICAgICAgICAgICAgICAgIC5yZWZyZXNoS2V5PSR7dGhpcy5yZWZyZXNoS2V5fQogICAgICAgICAgICAgICAgICAgIEBrZXktc2VsZWN0ZWQ9JHt0aGlzLmhhbmRsZUtleVNlbGVjdGVkfQogICAgICAgICAgICAgICAgICAgIEBuYXZpZ2F0ZT0ke3RoaXMuaGFuZGxlTmF2aWdhdGV9CiAgICAgICAgICAgICAgICAgID48L3Rzdmlldy1zMy1rZXlzPgogICAgICAgICAgICAgICAgYH0KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICR7dGhpcy5zZWxlY3RlZEtleSA/IGh0bWw5YAogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0icmVzaXplLWRpdmlkZXIgJHt0aGlzLmlzUmVzaXppbmdQcmV2aWV3ID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgICAgIEBtb3VzZWRvd249JHt0aGlzLnN0YXJ0UHJldmlld1Jlc2l6ZX0KICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcGFuZWwiPgogICAgICAgICAgICAgICAgICA8dHN2aWV3LXMzLXByZXZpZXcKICAgICAgICAgICAgICAgICAgICAuYnVja2V0TmFtZT0ke3RoaXMuYnVja2V0TmFtZX0KICAgICAgICAgICAgICAgICAgICAub2JqZWN0S2V5PSR7dGhpcy5zZWxlY3RlZEtleX0KICAgICAgICAgICAgICAgICAgICBAb2JqZWN0LWRlbGV0ZWQ9JHt0aGlzLmhhbmRsZU9iamVjdERlbGV0ZWR9CiAgICAgICAgICAgICAgICAgID48L3Rzdmlldy1zMy1wcmV2aWV3PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQp9OwpfaW5pdDIgPSBfX2RlY29yYXRvclN0YXJ0KF9hNSk7Cl9idWNrZXROYW1lID0gbmV3IFdlYWtNYXAoKTsKX3ZpZXdUeXBlID0gbmV3IFdlYWtNYXAoKTsKX2N1cnJlbnRQcmVmaXggPSBuZXcgV2Vha01hcCgpOwpfc2VsZWN0ZWRLZXkgPSBuZXcgV2Vha01hcCgpOwpfcmVmcmVzaEtleSA9IG5ldyBXZWFrTWFwKCk7Cl9wcmV2aWV3V2lkdGggPSBuZXcgV2Vha01hcCgpOwpfaXNSZXNpemluZ1ByZXZpZXcgPSBuZXcgV2Vha01hcCgpOwpfcmVjZW50Q2hhbmdlQ291bnQgPSBuZXcgV2Vha01hcCgpOwpfaXNTdHJlYW1Db25uZWN0ZWQgPSBuZXcgV2Vha01hcCgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDIsIDQsICJidWNrZXROYW1lIiwgX2J1Y2tldE5hbWVfZGVjLCBUc3ZpZXdTM0Jyb3dzZXIsIF9idWNrZXROYW1lKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQyLCA0LCAidmlld1R5cGUiLCBfdmlld1R5cGVfZGVjLCBUc3ZpZXdTM0Jyb3dzZXIsIF92aWV3VHlwZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MiwgNCwgImN1cnJlbnRQcmVmaXgiLCBfY3VycmVudFByZWZpeF9kZWMsIFRzdmlld1MzQnJvd3NlciwgX2N1cnJlbnRQcmVmaXgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDIsIDQsICJzZWxlY3RlZEtleSIsIF9zZWxlY3RlZEtleV9kZWMsIFRzdmlld1MzQnJvd3NlciwgX3NlbGVjdGVkS2V5KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQyLCA0LCAicmVmcmVzaEtleSIsIF9yZWZyZXNoS2V5X2RlYywgVHN2aWV3UzNCcm93c2VyLCBfcmVmcmVzaEtleSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MiwgNCwgInByZXZpZXdXaWR0aCIsIF9wcmV2aWV3V2lkdGhfZGVjLCBUc3ZpZXdTM0Jyb3dzZXIsIF9wcmV2aWV3V2lkdGgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDIsIDQsICJpc1Jlc2l6aW5nUHJldmlldyIsIF9pc1Jlc2l6aW5nUHJldmlld19kZWMsIFRzdmlld1MzQnJvd3NlciwgX2lzUmVzaXppbmdQcmV2aWV3KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQyLCA0LCAicmVjZW50Q2hhbmdlQ291bnQiLCBfcmVjZW50Q2hhbmdlQ291bnRfZGVjLCBUc3ZpZXdTM0Jyb3dzZXIsIF9yZWNlbnRDaGFuZ2VDb3VudCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MiwgNCwgImlzU3RyZWFtQ29ubmVjdGVkIiwgX2lzU3RyZWFtQ29ubmVjdGVkX2RlYywgVHN2aWV3UzNCcm93c2VyLCBfaXNTdHJlYW1Db25uZWN0ZWQpOwpUc3ZpZXdTM0Jyb3dzZXIgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDIsIDAsICJUc3ZpZXdTM0Jyb3dzZXIiLCBfVHN2aWV3UzNCcm93c2VyX2RlY29yYXRvcnMsIFRzdmlld1MzQnJvd3Nlcik7Cl9fcHVibGljRmllbGQoVHN2aWV3UzNCcm93c2VyLCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXI0LmRlZmF1bHRTdHlsZXMsCiAgdGhlbWVTdHlsZXMsCiAgY3NzNGAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmJyb3dzZXItY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAudG9vbGJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWItaXRlbSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7CiAgICAgIH0KCiAgICAgIC5icmVhZGNydW1iLWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWItc2VwYXJhdG9yIHsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgfQoKICAgICAgLnZpZXctdG9nZ2xlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAudmlldy1idG4gewogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0NDQ7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwogICAgICB9CgogICAgICAudmlldy1idG46aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogIzY2NjsKICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgfQoKICAgICAgLnZpZXctYnRuLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGJvcmRlci1jb2xvcjogIzQwNDA0MDsKICAgICAgICBjb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICBnYXA6IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNvbnRlbnQuaGFzLXByZXZpZXcgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDRweCB2YXIoLS1wcmV2aWV3LXdpZHRoLCAzNTBweCk7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtZGl2aWRlciB7CiAgICAgICAgd2lkdGg6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzOwogICAgICB9CgogICAgICAucmVzaXplLWRpdmlkZXI6aG92ZXIsCiAgICAgIC5yZXNpemUtZGl2aWRlci5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgICAgfQoKICAgICAgLm1haW4tdmlldyB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgfQoKICAgICAgLnByZXZpZXctcGFuZWwgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBtYXJnaW4tbGVmdDogMTJweDsKICAgICAgfQoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkgewogICAgICAgIC5jb250ZW50LAogICAgICAgIC5jb250ZW50Lmhhcy1wcmV2aWV3IHsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgIH0KCiAgICAgICAgLnByZXZpZXctcGFuZWwsCiAgICAgICAgLnJlc2l6ZS1kaXZpZGVyIHsKICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgfQogICAgICB9CgogICAgICAuc3RyZWFtLXN0YXR1cyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEycHg7CiAgICAgIH0KCiAgICAgIC5zdHJlYW0tZG90IHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAjODg4OwogICAgICB9CgogICAgICAuc3RyZWFtLWRvdC5jb25uZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICMyMmM1NWU7CiAgICAgIH0KCiAgICAgIC5jaGFuZ2UtaW5kaWNhdG9yIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NSwgMTU4LCAxMSwgMC4yKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAjZjU5ZTBiOwogICAgICAgIG1hcmdpbi1yaWdodDogMTJweDsKICAgICAgfQoKICAgICAgLmNoYW5nZS1pbmRpY2F0b3IucHVsc2UgewogICAgICAgIGFuaW1hdGlvbjogcHVsc2Utb3JhbmdlIDFzIGVhc2UtaW4tb3V0OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHB1bHNlLW9yYW5nZSB7CiAgICAgICAgMCUgeyBiYWNrZ3JvdW5kOiByZ2JhKDI0NSwgMTU4LCAxMSwgMC40KTsgfQogICAgICAgIDEwMCUgeyBiYWNrZ3JvdW5kOiByZ2JhKDI0NSwgMTU4LCAxMSwgMC4yKTsgfQogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdDIsIDEsIFRzdmlld1MzQnJvd3Nlcik7CgovLyB0c193ZWIvdXRpbGl0aWVzL2Zvcm1hdHRlcnMudHMKZnVuY3Rpb24gZm9ybWF0U2l6ZShieXRlcykgewogIGlmIChieXRlcyA9PT0gdm9pZCAwIHx8IGJ5dGVzID09PSBudWxsKSByZXR1cm4gIi0iOwogIGlmIChieXRlcyA9PT0gMCkgcmV0dXJuICIwIEIiOwogIGNvbnN0IHVuaXRzMiA9IFsiQiIsICJLQiIsICJNQiIsICJHQiIsICJUQiJdOwogIGxldCBzaXplID0gYnl0ZXM7CiAgbGV0IHVuaXRJbmRleCA9IDA7CiAgd2hpbGUgKHNpemUgPj0gMTAyNCAmJiB1bml0SW5kZXggPCB1bml0czIubGVuZ3RoIC0gMSkgewogICAgc2l6ZSAvPSAxMDI0OwogICAgdW5pdEluZGV4Kys7CiAgfQogIHJldHVybiBgJHtzaXplLnRvRml4ZWQodW5pdEluZGV4ID4gMCA/IDEgOiAwKX0gJHt1bml0czJbdW5pdEluZGV4XX1gOwp9CmZ1bmN0aW9uIGZvcm1hdENvdW50KGNvdW50MikgewogIGlmIChjb3VudDIgPT09IHZvaWQgMCB8fCBjb3VudDIgPT09IG51bGwpIHJldHVybiAiIjsKICBpZiAoY291bnQyID49IDFlNikgcmV0dXJuIGAkeyhjb3VudDIgLyAxZTYpLnRvRml4ZWQoMSl9TWA7CiAgaWYgKGNvdW50MiA+PSAxZTMpIHJldHVybiBgJHsoY291bnQyIC8gMWUzKS50b0ZpeGVkKDEpfUtgOwogIHJldHVybiBjb3VudDIudG9TdHJpbmcoKTsKfQpmdW5jdGlvbiBnZXRGaWxlTmFtZShwYXRoMikgewogIGNvbnN0IHBhcnRzID0gcGF0aDIucmVwbGFjZSgvXC8kLywgIiIpLnNwbGl0KCIvIik7CiAgcmV0dXJuIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdIHx8IHBhdGgyOwp9CgovLyB0c193ZWIvZWxlbWVudHMvdHN2aWV3LXMzLWNvbHVtbnMudHMKdmFyIF9jcmVhdGVEaWFsb2dOYW1lX2RlYywgX2NyZWF0ZURpYWxvZ1ByZWZpeF9kZWMsIF9jcmVhdGVEaWFsb2dUeXBlX2RlYywgX3Nob3dDcmVhdGVEaWFsb2dfZGVjLCBfbG9hZGluZ19kZWMsIF9jb2x1bW5zX2RlYywgX3JlZnJlc2hLZXlfZGVjMiwgX2N1cnJlbnRQcmVmaXhfZGVjMiwgX2J1Y2tldE5hbWVfZGVjMiwgX2E2LCBfVHN2aWV3UzNDb2x1bW5zX2RlY29yYXRvcnMsIF9pbml0MywgX2J1Y2tldE5hbWUyLCBfY3VycmVudFByZWZpeDIsIF9yZWZyZXNoS2V5MiwgX2NvbHVtbnMsIF9sb2FkaW5nLCBfc2hvd0NyZWF0ZURpYWxvZywgX2NyZWF0ZURpYWxvZ1R5cGUsIF9jcmVhdGVEaWFsb2dQcmVmaXgsIF9jcmVhdGVEaWFsb2dOYW1lOwp2YXIgeyBodG1sOiBodG1sMTAsIGNzczogY3NzNSwgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjUsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQ0LCBwcm9wZXJ0eTogcHJvcGVydHkzLCBzdGF0ZTogc3RhdGU0LCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQ1IH0gPSBwbHVnaW5zX2V4cG9ydHM1Owp2YXIgeyBEZWVzQ29udGV4dG1lbnU6IERlZXNDb250ZXh0bWVudTMgfSA9IGRpc3RfdHNfd2ViX2V4cG9ydHMyOwpfVHN2aWV3UzNDb2x1bW5zX2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDQoInRzdmlldy1zMy1jb2x1bW5zIildOwp2YXIgVHN2aWV3UzNDb2x1bW5zID0gY2xhc3MgZXh0ZW5kcyAoX2E2ID0gRGVlc0VsZW1lbnQ1LCBfYnVja2V0TmFtZV9kZWMyID0gW3Byb3BlcnR5Myh7IHR5cGU6IFN0cmluZyB9KV0sIF9jdXJyZW50UHJlZml4X2RlYzIgPSBbcHJvcGVydHkzKHsgdHlwZTogU3RyaW5nIH0pXSwgX3JlZnJlc2hLZXlfZGVjMiA9IFtwcm9wZXJ0eTMoeyB0eXBlOiBOdW1iZXIgfSldLCBfY29sdW1uc19kZWMgPSBbc3RhdGU0KCldLCBfbG9hZGluZ19kZWMgPSBbc3RhdGU0KCldLCBfc2hvd0NyZWF0ZURpYWxvZ19kZWMgPSBbc3RhdGU0KCldLCBfY3JlYXRlRGlhbG9nVHlwZV9kZWMgPSBbc3RhdGU0KCldLCBfY3JlYXRlRGlhbG9nUHJlZml4X2RlYyA9IFtzdGF0ZTQoKV0sIF9jcmVhdGVEaWFsb2dOYW1lX2RlYyA9IFtzdGF0ZTQoKV0sIF9hNikgewogIGNvbnN0cnVjdG9yKCkgewogICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfYnVja2V0TmFtZTIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgOCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAxMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2N1cnJlbnRQcmVmaXgyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDEyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDE1LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfcmVmcmVzaEtleTIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMTYsIHRoaXMsIDApKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAxOSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NvbHVtbnMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMjAsIHRoaXMsIFtdKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMjMsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9sb2FkaW5nLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDI0LCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDI3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2hvd0NyZWF0ZURpYWxvZywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAyOCwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAzMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NyZWF0ZURpYWxvZ1R5cGUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMzIsIHRoaXMsICJmb2xkZXIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMzUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jcmVhdGVEaWFsb2dQcmVmaXgsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMzYsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMzksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jcmVhdGVEaWFsb2dOYW1lLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDQwLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDQzLCB0aGlzKTsKICAgIF9fcHVibGljRmllbGQodGhpcywgInJlc2l6aW5nIiwgbnVsbCk7CiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJERUZBVUxUX0NPTFVNTl9XSURUSCIsIDI1MCk7CiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJNSU5fQ09MVU1OX1dJRFRIIiwgMTUwKTsKICAgIF9fcHVibGljRmllbGQodGhpcywgIk1BWF9DT0xVTU5fV0lEVEgiLCA1MDApOwogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiaGFuZGxlUmVzaXplIiwgKGUxMSkgPT4gewogICAgICBpZiAoIXRoaXMucmVzaXppbmcpIHJldHVybjsKICAgICAgY29uc3QgZGVsdGEgPSBlMTEuY2xpZW50WCAtIHRoaXMucmVzaXppbmcuc3RhcnRYOwogICAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWluKAogICAgICAgIHRoaXMuTUFYX0NPTFVNTl9XSURUSCwKICAgICAgICBNYXRoLm1heCh0aGlzLk1JTl9DT0xVTU5fV0lEVEgsIHRoaXMucmVzaXppbmcuc3RhcnRXaWR0aCArIGRlbHRhKQogICAgICApOwogICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKChjb2wsIGkxMSkgPT4gewogICAgICAgIGlmIChpMTEgPT09IHRoaXMucmVzaXppbmcuY29sdW1uSW5kZXgpIHsKICAgICAgICAgIHJldHVybiB7IC4uLmNvbCwgd2lkdGg6IG5ld1dpZHRoIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiBjb2w7CiAgICAgIH0pOwogICAgfSk7CiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJzdG9wUmVzaXplIiwgKCkgPT4gewogICAgICB0aGlzLnJlc2l6aW5nID0gbnVsbDsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVSZXNpemUpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5zdG9wUmVzaXplKTsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAiIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gIiI7CiAgICB9KTsKICB9CiAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgYXdhaXQgdGhpcy5sb2FkSW5pdGlhbENvbHVtbigpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJidWNrZXROYW1lIikgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJyZWZyZXNoS2V5IikpIHsKICAgICAgdGhpcy5sb2FkSW5pdGlhbENvbHVtbigpOwogICAgfQogIH0KICBhc3luYyBsb2FkSW5pdGlhbENvbHVtbigpIHsKICAgIHRoaXMubG9hZGluZyA9IHRydWU7CiAgICB0cnkgewogICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGlTZXJ2aWNlLmxpc3RPYmplY3RzKHRoaXMuYnVja2V0TmFtZSwgdGhpcy5jdXJyZW50UHJlZml4LCAiLyIpOwogICAgICB0aGlzLmNvbHVtbnMgPSBbCiAgICAgICAgewogICAgICAgICAgcHJlZml4OiB0aGlzLmN1cnJlbnRQcmVmaXgsCiAgICAgICAgICBvYmplY3RzOiByZXN1bHQub2JqZWN0cywKICAgICAgICAgIHByZWZpeGVzOiByZXN1bHQucHJlZml4ZXMsCiAgICAgICAgICBzZWxlY3RlZEl0ZW06IG51bGwsCiAgICAgICAgICB3aWR0aDogdGhpcy5ERUZBVUxUX0NPTFVNTl9XSURUSAogICAgICAgIH0KICAgICAgXTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBsb2FkaW5nIG9iamVjdHM6IiwgZXJyKTsKICAgICAgdGhpcy5jb2x1bW5zID0gW107CiAgICB9CiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICB9CiAgYXN5bmMgc2VsZWN0Rm9sZGVyKGNvbHVtbkluZGV4LCBwcmVmaXg0KSB7CiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKChjb2wsIGkxMSkgPT4gewogICAgICBpZiAoaTExID09PSBjb2x1bW5JbmRleCkgewogICAgICAgIHJldHVybiB7IC4uLmNvbCwgc2VsZWN0ZWRJdGVtOiBwcmVmaXg0IH07CiAgICAgIH0KICAgICAgcmV0dXJuIGNvbDsKICAgIH0pOwogICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLnNsaWNlKDAsIGNvbHVtbkluZGV4ICsgMSk7CiAgICB0cnkgewogICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGlTZXJ2aWNlLmxpc3RPYmplY3RzKHRoaXMuYnVja2V0TmFtZSwgcHJlZml4NCwgIi8iKTsKICAgICAgdGhpcy5jb2x1bW5zID0gWwogICAgICAgIC4uLnRoaXMuY29sdW1ucywKICAgICAgICB7CiAgICAgICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgICAgICBvYmplY3RzOiByZXN1bHQub2JqZWN0cywKICAgICAgICAgIHByZWZpeGVzOiByZXN1bHQucHJlZml4ZXMsCiAgICAgICAgICBzZWxlY3RlZEl0ZW06IG51bGwsCiAgICAgICAgICB3aWR0aDogdGhpcy5ERUZBVUxUX0NPTFVNTl9XSURUSAogICAgICAgIH0KICAgICAgXTsKICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuc2Nyb2xsVG9FbmQoKSk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBmb2xkZXI6IiwgZXJyKTsKICAgIH0KICB9CiAgc2Nyb2xsVG9FbmQoKSB7CiAgICB0aGlzLnNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbFdpZHRoIC0gdGhpcy5jbGllbnRXaWR0aDsKICB9CiAgc3RhcnRSZXNpemUoZTExLCBjb2x1bW5JbmRleCkgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICB0aGlzLnJlc2l6aW5nID0gewogICAgICBjb2x1bW5JbmRleCwKICAgICAgc3RhcnRYOiBlMTEuY2xpZW50WCwKICAgICAgc3RhcnRXaWR0aDogdGhpcy5jb2x1bW5zW2NvbHVtbkluZGV4XS53aWR0aAogICAgfTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMuaGFuZGxlUmVzaXplKTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLnN0b3BSZXNpemUpOwogICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAiY29sLXJlc2l6ZSI7CiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSAibm9uZSI7CiAgfQogIHNlbGVjdEZpbGUoY29sdW1uSW5kZXgsIGtleTIpIHsKICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbCwgaTExKSA9PiB7CiAgICAgIGlmIChpMTEgPT09IGNvbHVtbkluZGV4KSB7CiAgICAgICAgcmV0dXJuIHsgLi4uY29sLCBzZWxlY3RlZEl0ZW06IGtleTIgfTsKICAgICAgfQogICAgICByZXR1cm4gY29sOwogICAgfSk7CiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuc2xpY2UoMCwgY29sdW1uSW5kZXggKyAxKTsKICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgbmV3IEN1c3RvbUV2ZW50KCJrZXktc2VsZWN0ZWQiLCB7CiAgICAgICAgZGV0YWlsOiB7IGtleToga2V5MiB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkKICAgICk7CiAgfQogIGdldEZpbGVJY29uKGtleTIpIHsKICAgIGNvbnN0IGV4dCA9IGtleTIuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKSB8fCAiIjsKICAgIGNvbnN0IGljb25NYXAgPSB7CiAgICAgIGpzb246ICJNMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjh6IiwKICAgICAgdHh0OiAiTTE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4eiIsCiAgICAgIHBuZzogIk01IDNoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJ6IiwKICAgICAganBnOiAiTTUgM2gxNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMnoiLAogICAgICBqcGVnOiAiTTUgM2gxNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMnoiLAogICAgICBnaWY6ICJNNSAzaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yeiIsCiAgICAgIHBkZjogIk0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHoiCiAgICB9OwogICAgcmV0dXJuIGljb25NYXBbZXh0XSB8fCAiTTE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4eiI7CiAgfQogIGhhbmRsZUZvbGRlckNvbnRleHRNZW51KGV2ZW50LCBjb2x1bW5JbmRleCwgcHJlZml4NCkgewogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIERlZXNDb250ZXh0bWVudTMub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIFsKICAgICAgewogICAgICAgIG5hbWU6ICJPcGVuIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmb2xkZXJPcGVuIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0Rm9sZGVyKGNvbHVtbkluZGV4LCBwcmVmaXg0KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiQ29weSBQYXRoIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjb3B5IiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHByZWZpeDQpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiTmV3IEZvbGRlciBJbnNpZGUiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZvbGRlclBsdXMiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5vcGVuQ3JlYXRlRGlhbG9nKCJmb2xkZXIiLCBwcmVmaXg0KQogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIk5ldyBGaWxlIEluc2lkZSIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVBsdXMiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5vcGVuQ3JlYXRlRGlhbG9nKCJmaWxlIiwgcHJlZml4NCkKICAgICAgfSwKICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiRGVsZXRlIEZvbGRlciIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2gyIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChjb25maXJtKGBEZWxldGUgZm9sZGVyICIke2dldEZpbGVOYW1lKHByZWZpeDQpfSIgYW5kIGFsbCBpdHMgY29udGVudHM/YCkpIHsKICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuZGVsZXRlUHJlZml4KHRoaXMuYnVja2V0TmFtZSwgcHJlZml4NCk7CiAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkSW5pdGlhbENvbHVtbigpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICBdKTsKICB9CiAgaGFuZGxlRmlsZUNvbnRleHRNZW51KGV2ZW50LCBjb2x1bW5JbmRleCwga2V5MikgewogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIERlZXNDb250ZXh0bWVudTMub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIFsKICAgICAgewogICAgICAgIG5hbWU6ICJQcmV2aWV3IiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpleWUiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgdGhpcy5zZWxlY3RGaWxlKGNvbHVtbkluZGV4LCBrZXkyKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiRG93bmxvYWQiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmRvd25sb2FkIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHVybCA9IGF3YWl0IGFwaVNlcnZpY2UuZ2V0T2JqZWN0VXJsKHRoaXMuYnVja2V0TmFtZSwga2V5Mik7CiAgICAgICAgICBjb25zdCBsaW5rMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgICAgICAgIGxpbmszLmhyZWYgPSB1cmw7CiAgICAgICAgICBsaW5rMy5kb3dubG9hZCA9IGdldEZpbGVOYW1lKGtleTIpOwogICAgICAgICAgbGluazMuY2xpY2soKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiQ29weSBQYXRoIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjb3B5IiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGtleTIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiRGVsZXRlIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgaWYgKGNvbmZpcm0oYERlbGV0ZSBmaWxlICIke2dldEZpbGVOYW1lKGtleTIpfSI/YCkpIHsKICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuZGVsZXRlT2JqZWN0KHRoaXMuYnVja2V0TmFtZSwga2V5Mik7CiAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkSW5pdGlhbENvbHVtbigpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICBdKTsKICB9CiAgaGFuZGxlRW1wdHlTcGFjZUNvbnRleHRNZW51KGV2ZW50LCBjb2x1bW5JbmRleCkgewogICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gZXZlbnQuY3VycmVudFRhcmdldCkgcmV0dXJuOwogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIGNvbnN0IHByZWZpeDQgPSB0aGlzLmNvbHVtbnNbY29sdW1uSW5kZXhdLnByZWZpeDsKICAgIERlZXNDb250ZXh0bWVudTMub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIFsKICAgICAgewogICAgICAgIG5hbWU6ICJOZXcgRm9sZGVyIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmb2xkZXJQbHVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMub3BlbkNyZWF0ZURpYWxvZygiZm9sZGVyIiwgcHJlZml4NCkKICAgICAgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJOZXcgRmlsZSIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVBsdXMiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5vcGVuQ3JlYXRlRGlhbG9nKCJmaWxlIiwgcHJlZml4NCkKICAgICAgfQogICAgXSk7CiAgfQogIG9wZW5DcmVhdGVEaWFsb2codHlwZTUsIHByZWZpeDQpIHsKICAgIHRoaXMuY3JlYXRlRGlhbG9nVHlwZSA9IHR5cGU1OwogICAgdGhpcy5jcmVhdGVEaWFsb2dQcmVmaXggPSBwcmVmaXg0OwogICAgdGhpcy5jcmVhdGVEaWFsb2dOYW1lID0gIiI7CiAgICB0aGlzLnNob3dDcmVhdGVEaWFsb2cgPSB0cnVlOwogIH0KICBnZXRDb250ZW50VHlwZShleHQpIHsKICAgIGNvbnN0IGNvbnRlbnRUeXBlcyA9IHsKICAgICAganNvbjogImFwcGxpY2F0aW9uL2pzb24iLAogICAgICB0eHQ6ICJ0ZXh0L3BsYWluIiwKICAgICAgaHRtbDogInRleHQvaHRtbCIsCiAgICAgIGNzczogInRleHQvY3NzIiwKICAgICAganM6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiwKICAgICAgdHM6ICJ0ZXh0L3R5cGVzY3JpcHQiLAogICAgICBtZDogInRleHQvbWFya2Rvd24iLAogICAgICB4bWw6ICJhcHBsaWNhdGlvbi94bWwiLAogICAgICB5YW1sOiAidGV4dC95YW1sIiwKICAgICAgeW1sOiAidGV4dC95YW1sIiwKICAgICAgY3N2OiAidGV4dC9jc3YiCiAgICB9OwogICAgcmV0dXJuIGNvbnRlbnRUeXBlc1tleHRdIHx8ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iOwogIH0KICBnZXREZWZhdWx0Q29udGVudChleHQpIHsKICAgIGNvbnN0IGRlZmF1bHRzID0gewogICAgICBqc29uOiAie1xuICBcbn0iLAogICAgICBodG1sOiAiPCFET0NUWVBFIGh0bWw+XG48aHRtbD5cbjxoZWFkPlxuICA8dGl0bGU+PC90aXRsZT5cbjwvaGVhZD5cbjxib2R5PlxuICBcbjwvYm9keT5cbjwvaHRtbD4iLAogICAgICBtZDogIiMgVGl0bGVcblxuIiwKICAgICAgdHh0OiAiIgogICAgfTsKICAgIHJldHVybiBkZWZhdWx0c1tleHRdIHx8ICIiOwogIH0KICBhc3luYyBoYW5kbGVDcmVhdGUoKSB7CiAgICBpZiAoIXRoaXMuY3JlYXRlRGlhbG9nTmFtZS50cmltKCkpIHJldHVybjsKICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNyZWF0ZURpYWxvZ05hbWUudHJpbSgpOwogICAgbGV0IHBhdGgyOwogICAgaWYgKHRoaXMuY3JlYXRlRGlhbG9nVHlwZSA9PT0gImZvbGRlciIpIHsKICAgICAgcGF0aDIgPSB0aGlzLmNyZWF0ZURpYWxvZ1ByZWZpeCArIG5hbWUgKyAiLy5rZWVwIjsKICAgIH0gZWxzZSB7CiAgICAgIHBhdGgyID0gdGhpcy5jcmVhdGVEaWFsb2dQcmVmaXggKyBuYW1lOwogICAgfQogICAgY29uc3QgZXh0ID0gbmFtZS5zcGxpdCgiLiIpLnBvcCgpPy50b0xvd2VyQ2FzZSgpIHx8ICIiOwogICAgY29uc3QgY29udGVudFR5cGUgPSB0aGlzLmNyZWF0ZURpYWxvZ1R5cGUgPT09ICJmaWxlIiA/IHRoaXMuZ2V0Q29udGVudFR5cGUoZXh0KSA6ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iOwogICAgY29uc3QgY29udGVudDMgPSB0aGlzLmNyZWF0ZURpYWxvZ1R5cGUgPT09ICJmaWxlIiA/IHRoaXMuZ2V0RGVmYXVsdENvbnRlbnQoZXh0KSA6ICIiOwogICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UucHV0T2JqZWN0KAogICAgICB0aGlzLmJ1Y2tldE5hbWUsCiAgICAgIHBhdGgyLAogICAgICBidG9hKGNvbnRlbnQzKSwKICAgICAgY29udGVudFR5cGUKICAgICk7CiAgICBpZiAoc3VjY2VzcykgewogICAgICB0aGlzLnNob3dDcmVhdGVEaWFsb2cgPSBmYWxzZTsKICAgICAgYXdhaXQgdGhpcy5sb2FkSW5pdGlhbENvbHVtbigpOwogICAgfQogIH0KICByZW5kZXJDcmVhdGVEaWFsb2coKSB7CiAgICBpZiAoIXRoaXMuc2hvd0NyZWF0ZURpYWxvZykgcmV0dXJuICIiOwogICAgY29uc3QgaXNGb2xkZXIgPSB0aGlzLmNyZWF0ZURpYWxvZ1R5cGUgPT09ICJmb2xkZXIiOwogICAgY29uc3QgdGl0bGUgPSBpc0ZvbGRlciA/ICJDcmVhdGUgTmV3IEZvbGRlciIgOiAiQ3JlYXRlIE5ldyBGaWxlIjsKICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gaXNGb2xkZXIgPyAiZm9sZGVyLW5hbWUgb3IgcGF0aC90by9mb2xkZXIiIDogImZpbGVuYW1lLnR4dCBvciBwYXRoL3RvL2ZpbGUudHh0IjsKICAgIHJldHVybiBodG1sMTBgCiAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1vdmVybGF5IiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVEaWFsb2cgPSBmYWxzZX0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nIiBAY2xpY2s9JHsoZTExKSA9PiBlMTEuc3RvcFByb3BhZ2F0aW9uKCl9PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj4ke3RpdGxlfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWxvY2F0aW9uIj4KICAgICAgICAgICAgTG9jYXRpb246ICR7dGhpcy5idWNrZXROYW1lfS8ke3RoaXMuY3JlYXRlRGlhbG9nUHJlZml4fQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgY2xhc3M9ImRpYWxvZy1pbnB1dCIKICAgICAgICAgICAgcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0KICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5jcmVhdGVEaWFsb2dOYW1lfQogICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiB0aGlzLmNyZWF0ZURpYWxvZ05hbWUgPSBlMTEudGFyZ2V0LnZhbHVlfQogICAgICAgICAgICBAa2V5ZG93bj0keyhlMTEpID0+IGUxMS5rZXkgPT09ICJFbnRlciIgJiYgdGhpcy5oYW5kbGVDcmVhdGUoKX0KICAgICAgICAgIC8+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctaGludCI+CiAgICAgICAgICAgIFVzZSAiLyIgdG8gY3JlYXRlIG5lc3RlZCAke2lzRm9sZGVyID8gImZvbGRlcnMiIDogInBhdGgifSAoZS5nLiwgJHtpc0ZvbGRlciA/ICJwYXJlbnQvY2hpbGQiIDogImZvbGRlci9maWxlLnR4dCJ9KQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctYWN0aW9ucyI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRpYWxvZy1idG4gZGlhbG9nLWJ0bi1jYW5jZWwiIEBjbGljaz0keygpID0+IHRoaXMuc2hvd0NyZWF0ZURpYWxvZyA9IGZhbHNlfT4KICAgICAgICAgICAgICBDYW5jZWwKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0iZGlhbG9nLWJ0biBkaWFsb2ctYnRuLWNyZWF0ZSIKICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5jcmVhdGVEaWFsb2dOYW1lLnRyaW0oKX0KICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmhhbmRsZUNyZWF0ZSgpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgQ3JlYXRlCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVyKCkgewogICAgaWYgKHRoaXMubG9hZGluZyAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBodG1sMTBgPGRpdiBjbGFzcz0ibG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PmA7CiAgICB9CiAgICByZXR1cm4gaHRtbDEwYAogICAgICA8ZGl2IGNsYXNzPSJjb2x1bW5zLWNvbnRhaW5lciI+CiAgICAgICAgJHt0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4MikgPT4gdGhpcy5yZW5kZXJDb2x1bW5XcmFwcGVyKGNvbHVtbiwgaW5kZXgyKSl9CiAgICAgIDwvZGl2PgogICAgICAke3RoaXMucmVuZGVyQ3JlYXRlRGlhbG9nKCl9CiAgICBgOwogIH0KICByZW5kZXJDb2x1bW5XcmFwcGVyKGNvbHVtbiwgaW5kZXgyKSB7CiAgICByZXR1cm4gaHRtbDEwYAogICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4td3JhcHBlciI+CiAgICAgICAgJHt0aGlzLnJlbmRlckNvbHVtbihjb2x1bW4sIGluZGV4Mil9CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9InJlc2l6ZS1oYW5kbGUgJHt0aGlzLnJlc2l6aW5nPy5jb2x1bW5JbmRleCA9PT0gaW5kZXgyID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICBAbW91c2Vkb3duPSR7KGUxMSkgPT4gdGhpcy5zdGFydFJlc2l6ZShlMTEsIGluZGV4Mil9CiAgICAgICAgPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlckNvbHVtbihjb2x1bW4sIGluZGV4MikgewogICAgY29uc3QgaGVhZGVyTmFtZSA9IGNvbHVtbi5wcmVmaXggPyBnZXRGaWxlTmFtZShjb2x1bW4ucHJlZml4KSA6IHRoaXMuYnVja2V0TmFtZTsKICAgIHJldHVybiBodG1sMTBgCiAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbiIgc3R5bGU9IndpZHRoOiAke2NvbHVtbi53aWR0aH1weCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sdW1uLWhlYWRlciIgdGl0bGU9JHtjb2x1bW4ucHJlZml4IHx8IHRoaXMuYnVja2V0TmFtZX0+CiAgICAgICAgICAke2hlYWRlck5hbWV9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sdW1uLWl0ZW1zIiBAY29udGV4dG1lbnU9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUVtcHR5U3BhY2VDb250ZXh0TWVudShlMTEsIGluZGV4Mil9PgogICAgICAgICAgJHtjb2x1bW4ucHJlZml4ZXMubGVuZ3RoID09PSAwICYmIGNvbHVtbi5vYmplY3RzLmxlbmd0aCA9PT0gMCA/IGh0bWwxMGA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+RW1wdHkgZm9sZGVyPC9kaXY+YCA6ICIifQogICAgICAgICAgJHtjb2x1bW4ucHJlZml4ZXMubWFwKAogICAgICAocHJlZml4NCkgPT4gaHRtbDEwYAogICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgIGNsYXNzPSJjb2x1bW4taXRlbSBmb2xkZXIgJHtjb2x1bW4uc2VsZWN0ZWRJdGVtID09PSBwcmVmaXg0ID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2VsZWN0Rm9sZGVyKGluZGV4MiwgcHJlZml4NCl9CiAgICAgICAgICAgICAgICBAY29udGV4dG1lbnU9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUZvbGRlckNvbnRleHRNZW51KGUxMSwgaW5kZXgyLCBwcmVmaXg0KX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNWwyIDNoOWEyIDIgMCAwIDEgMiAyeiIgLz4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPiR7Z2V0RmlsZU5hbWUocHJlZml4NCl9PC9zcGFuPgogICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iY2hldnJvbiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj4KICAgICAgICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz0iOSAxOCAxNSAxMiA5IDYiPjwvcG9seWxpbmU+CiAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYAogICAgKX0KICAgICAgICAgICR7Y29sdW1uLm9iamVjdHMubWFwKAogICAgICAob2JqKSA9PiBodG1sMTBgCiAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgY2xhc3M9ImNvbHVtbi1pdGVtICR7Y29sdW1uLnNlbGVjdGVkSXRlbSA9PT0gb2JqLmtleSA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNlbGVjdEZpbGUoaW5kZXgyLCBvYmoua2V5KX0KICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhlMTEpID0+IHRoaXMuaGFuZGxlRmlsZUNvbnRleHRNZW51KGUxMSwgaW5kZXgyLCBvYmoua2V5KX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgICAgICA8cGF0aCBkPSIke3RoaXMuZ2V0RmlsZUljb24ob2JqLmtleSl9IiAvPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+JHtnZXRGaWxlTmFtZShvYmoua2V5KX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAKICAgICl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07Cl9pbml0MyA9IF9fZGVjb3JhdG9yU3RhcnQoX2E2KTsKX2J1Y2tldE5hbWUyID0gbmV3IFdlYWtNYXAoKTsKX2N1cnJlbnRQcmVmaXgyID0gbmV3IFdlYWtNYXAoKTsKX3JlZnJlc2hLZXkyID0gbmV3IFdlYWtNYXAoKTsKX2NvbHVtbnMgPSBuZXcgV2Vha01hcCgpOwpfbG9hZGluZyA9IG5ldyBXZWFrTWFwKCk7Cl9zaG93Q3JlYXRlRGlhbG9nID0gbmV3IFdlYWtNYXAoKTsKX2NyZWF0ZURpYWxvZ1R5cGUgPSBuZXcgV2Vha01hcCgpOwpfY3JlYXRlRGlhbG9nUHJlZml4ID0gbmV3IFdlYWtNYXAoKTsKX2NyZWF0ZURpYWxvZ05hbWUgPSBuZXcgV2Vha01hcCgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDMsIDQsICJidWNrZXROYW1lIiwgX2J1Y2tldE5hbWVfZGVjMiwgVHN2aWV3UzNDb2x1bW5zLCBfYnVja2V0TmFtZTIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDMsIDQsICJjdXJyZW50UHJlZml4IiwgX2N1cnJlbnRQcmVmaXhfZGVjMiwgVHN2aWV3UzNDb2x1bW5zLCBfY3VycmVudFByZWZpeDIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDMsIDQsICJyZWZyZXNoS2V5IiwgX3JlZnJlc2hLZXlfZGVjMiwgVHN2aWV3UzNDb2x1bW5zLCBfcmVmcmVzaEtleTIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDMsIDQsICJjb2x1bW5zIiwgX2NvbHVtbnNfZGVjLCBUc3ZpZXdTM0NvbHVtbnMsIF9jb2x1bW5zKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQzLCA0LCAibG9hZGluZyIsIF9sb2FkaW5nX2RlYywgVHN2aWV3UzNDb2x1bW5zLCBfbG9hZGluZyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MywgNCwgInNob3dDcmVhdGVEaWFsb2ciLCBfc2hvd0NyZWF0ZURpYWxvZ19kZWMsIFRzdmlld1MzQ29sdW1ucywgX3Nob3dDcmVhdGVEaWFsb2cpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDMsIDQsICJjcmVhdGVEaWFsb2dUeXBlIiwgX2NyZWF0ZURpYWxvZ1R5cGVfZGVjLCBUc3ZpZXdTM0NvbHVtbnMsIF9jcmVhdGVEaWFsb2dUeXBlKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQzLCA0LCAiY3JlYXRlRGlhbG9nUHJlZml4IiwgX2NyZWF0ZURpYWxvZ1ByZWZpeF9kZWMsIFRzdmlld1MzQ29sdW1ucywgX2NyZWF0ZURpYWxvZ1ByZWZpeCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MywgNCwgImNyZWF0ZURpYWxvZ05hbWUiLCBfY3JlYXRlRGlhbG9nTmFtZV9kZWMsIFRzdmlld1MzQ29sdW1ucywgX2NyZWF0ZURpYWxvZ05hbWUpOwpUc3ZpZXdTM0NvbHVtbnMgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDMsIDAsICJUc3ZpZXdTM0NvbHVtbnMiLCBfVHN2aWV3UzNDb2x1bW5zX2RlY29yYXRvcnMsIFRzdmlld1MzQ29sdW1ucyk7Cl9fcHVibGljRmllbGQoVHN2aWV3UzNDb2x1bW5zLCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXI1LmRlZmF1bHRTdHlsZXMsCiAgdGhlbWVTdHlsZXMsCiAgY3NzNWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNvbHVtbnMtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtaW4td2lkdGg6IG1heC1jb250ZW50OwogICAgICB9CgogICAgICAuY29sdW1uLXdyYXBwZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuY29sdW1uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlIHsKICAgICAgICB3aWR0aDogNXB4OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMnB4OwogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICMzMzM7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlOmhvdmVyOjphZnRlciwKICAgICAgLnJlc2l6ZS1oYW5kbGUuYWN0aXZlOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogIzQwNDA0MDsKICAgICAgICB3aWR0aDogMnB4OwogICAgICAgIGxlZnQ6IDFweDsKICAgICAgfQoKICAgICAgLmNvbHVtbi13cmFwcGVyOmxhc3QtY2hpbGQgLnJlc2l6ZS1oYW5kbGUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5jb2x1bW4taGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAuY29sdW1uLWl0ZW1zIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICAuY29sdW1uLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgIH0KCiAgICAgIC5jb2x1bW4taXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgICAgfQoKICAgICAgLmNvbHVtbi1pdGVtLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5jb2x1bW4taXRlbS5mb2xkZXIgewogICAgICAgIGNvbG9yOiAjZmJiZjI0OwogICAgICB9CgogICAgICAuY29sdW1uLWl0ZW0gLmljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmNvbHVtbi1pdGVtIC5uYW1lIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgLmNvbHVtbi1pdGVtIC5jaGV2cm9uIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgICAgY29sb3I6ICM1NTU7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAubG9hZGluZyB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctb3ZlcmxheSB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNyk7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgIH0KCiAgICAgIC5kaWFsb2cgewogICAgICAgIGJhY2tncm91bmQ6ICMxZTFlMWU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1pbi13aWR0aDogNDAwcHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAyMHB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjUpOwogICAgICB9CgogICAgICAuZGlhbG9nLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuZGlhbG9nLWxvY2F0aW9uIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICB9CgogICAgICAuZGlhbG9nLWlucHV0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAxMHB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogIzE0MTQxNDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctaW5wdXQ6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuZGlhbG9nLWhpbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAuZGlhbG9nLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tY2FuY2VsIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0OwogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1jYW5jZWw6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWNyZWF0ZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzQwNDA0MDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWNyZWF0ZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogIzUwNTA1MDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tY3JlYXRlOmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQogICAgYApdKTsKX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAxLCBUc3ZpZXdTM0NvbHVtbnMpOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1zMy1rZXlzLnRzCnZhciBfY3JlYXRlRGlhbG9nTmFtZV9kZWMyLCBfY3JlYXRlRGlhbG9nUHJlZml4X2RlYzIsIF9jcmVhdGVEaWFsb2dUeXBlX2RlYzIsIF9zaG93Q3JlYXRlRGlhbG9nX2RlYzIsIF9maWx0ZXJUZXh0X2RlYywgX3NlbGVjdGVkS2V5X2RlYzIsIF9sb2FkaW5nX2RlYzIsIF9wcmVmaXhlc19kZWMsIF9hbGxLZXlzX2RlYywgX3JlZnJlc2hLZXlfZGVjMywgX2N1cnJlbnRQcmVmaXhfZGVjMywgX2J1Y2tldE5hbWVfZGVjMywgX2E3LCBfVHN2aWV3UzNLZXlzX2RlY29yYXRvcnMsIF9pbml0NCwgX2J1Y2tldE5hbWUzLCBfY3VycmVudFByZWZpeDMsIF9yZWZyZXNoS2V5MywgX2FsbEtleXMsIF9wcmVmaXhlcywgX2xvYWRpbmcyLCBfc2VsZWN0ZWRLZXkyLCBfZmlsdGVyVGV4dCwgX3Nob3dDcmVhdGVEaWFsb2cyLCBfY3JlYXRlRGlhbG9nVHlwZTIsIF9jcmVhdGVEaWFsb2dQcmVmaXgyLCBfY3JlYXRlRGlhbG9nTmFtZTI7CnZhciB7IGh0bWw6IGh0bWwxMSwgY3NzOiBjc3M2LCBjc3NNYW5hZ2VyOiBjc3NNYW5hZ2VyNiwgY3VzdG9tRWxlbWVudDogY3VzdG9tRWxlbWVudDUsIHByb3BlcnR5OiBwcm9wZXJ0eTQsIHN0YXRlOiBzdGF0ZTUsIERlZXNFbGVtZW50OiBEZWVzRWxlbWVudDYgfSA9IHBsdWdpbnNfZXhwb3J0czU7CnZhciB7IERlZXNDb250ZXh0bWVudTogRGVlc0NvbnRleHRtZW51NCB9ID0gZGlzdF90c193ZWJfZXhwb3J0czI7Cl9Uc3ZpZXdTM0tleXNfZGVjb3JhdG9ycyA9IFtjdXN0b21FbGVtZW50NSgidHN2aWV3LXMzLWtleXMiKV07CnZhciBUc3ZpZXdTM0tleXMgPSBjbGFzcyBleHRlbmRzIChfYTcgPSBEZWVzRWxlbWVudDYsIF9idWNrZXROYW1lX2RlYzMgPSBbcHJvcGVydHk0KHsgdHlwZTogU3RyaW5nIH0pXSwgX2N1cnJlbnRQcmVmaXhfZGVjMyA9IFtwcm9wZXJ0eTQoeyB0eXBlOiBTdHJpbmcgfSldLCBfcmVmcmVzaEtleV9kZWMzID0gW3Byb3BlcnR5NCh7IHR5cGU6IE51bWJlciB9KV0sIF9hbGxLZXlzX2RlYyA9IFtzdGF0ZTUoKV0sIF9wcmVmaXhlc19kZWMgPSBbc3RhdGU1KCldLCBfbG9hZGluZ19kZWMyID0gW3N0YXRlNSgpXSwgX3NlbGVjdGVkS2V5X2RlYzIgPSBbc3RhdGU1KCldLCBfZmlsdGVyVGV4dF9kZWMgPSBbc3RhdGU1KCldLCBfc2hvd0NyZWF0ZURpYWxvZ19kZWMyID0gW3N0YXRlNSgpXSwgX2NyZWF0ZURpYWxvZ1R5cGVfZGVjMiA9IFtzdGF0ZTUoKV0sIF9jcmVhdGVEaWFsb2dQcmVmaXhfZGVjMiA9IFtzdGF0ZTUoKV0sIF9jcmVhdGVEaWFsb2dOYW1lX2RlYzIgPSBbc3RhdGU1KCldLCBfYTcpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2J1Y2tldE5hbWUzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jdXJyZW50UHJlZml4MywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAxMiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAxNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3JlZnJlc2hLZXkzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDE2LCB0aGlzLCAwKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9hbGxLZXlzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDIwLCB0aGlzLCBbXSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDIzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfcHJlZml4ZXMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMjQsIHRoaXMsIFtdKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMjcsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9sb2FkaW5nMiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAyOCwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAzMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3NlbGVjdGVkS2V5MiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAzMiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAzNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2ZpbHRlclRleHQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMzYsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMzksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zaG93Q3JlYXRlRGlhbG9nMiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCA0MCwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCA0MywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NyZWF0ZURpYWxvZ1R5cGUyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDQ0LCB0aGlzLCAiZm9sZGVyIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDQ3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfY3JlYXRlRGlhbG9nUHJlZml4MiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCA0OCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCA1MSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NyZWF0ZURpYWxvZ05hbWUyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDUyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDU1LCB0aGlzKTsKICB9CiAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgYXdhaXQgdGhpcy5sb2FkT2JqZWN0cygpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJidWNrZXROYW1lIikgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJjdXJyZW50UHJlZml4IikgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJyZWZyZXNoS2V5IikpIHsKICAgICAgdGhpcy5sb2FkT2JqZWN0cygpOwogICAgfQogIH0KICBhc3luYyBsb2FkT2JqZWN0cygpIHsKICAgIHRoaXMubG9hZGluZyA9IHRydWU7CiAgICB0cnkgewogICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGlTZXJ2aWNlLmxpc3RPYmplY3RzKHRoaXMuYnVja2V0TmFtZSwgdGhpcy5jdXJyZW50UHJlZml4LCAiLyIpOwogICAgICB0aGlzLmFsbEtleXMgPSByZXN1bHQub2JqZWN0czsKICAgICAgdGhpcy5wcmVmaXhlcyA9IHJlc3VsdC5wcmVmaXhlczsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBsb2FkaW5nIG9iamVjdHM6IiwgZXJyKTsKICAgICAgdGhpcy5hbGxLZXlzID0gW107CiAgICAgIHRoaXMucHJlZml4ZXMgPSBbXTsKICAgIH0KICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogIH0KICBoYW5kbGVGaWx0ZXJJbnB1dChlMTEpIHsKICAgIHRoaXMuZmlsdGVyVGV4dCA9IGUxMS50YXJnZXQudmFsdWU7CiAgfQogIHNlbGVjdEtleShrZXkyLCBpc0ZvbGRlcikgewogICAgdGhpcy5zZWxlY3RlZEtleSA9IGtleTI7CiAgICBpZiAoaXNGb2xkZXIpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KAogICAgICAgIG5ldyBDdXN0b21FdmVudCgibmF2aWdhdGUiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgcHJlZml4OiBrZXkyIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KQogICAgICApOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KAogICAgICAgIG5ldyBDdXN0b21FdmVudCgia2V5LXNlbGVjdGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IGtleToga2V5MiB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkKICAgICAgKTsKICAgIH0KICB9CiAgZ2V0IGZpbHRlcmVkSXRlbXMoKSB7CiAgICBjb25zdCBmaWx0ZXIyID0gdGhpcy5maWx0ZXJUZXh0LnRvTG93ZXJDYXNlKCk7CiAgICBjb25zdCBmb2xkZXJzID0gdGhpcy5wcmVmaXhlcy5maWx0ZXIoKHA3KSA9PiAhZmlsdGVyMiB8fCBnZXRGaWxlTmFtZShwNykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIyKSkubWFwKChwNykgPT4gKHsga2V5OiBwNywgaXNGb2xkZXI6IHRydWUsIHNpemU6IHZvaWQgMCB9KSk7CiAgICBjb25zdCBmaWxlcyA9IHRoaXMuYWxsS2V5cy5maWx0ZXIoKG8xMykgPT4gIWZpbHRlcjIgfHwgZ2V0RmlsZU5hbWUobzEzLmtleSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIyKSkubWFwKChvMTMpID0+ICh7IGtleTogbzEzLmtleSwgaXNGb2xkZXI6IGZhbHNlLCBzaXplOiBvMTMuc2l6ZSB9KSk7CiAgICByZXR1cm4gWy4uLmZvbGRlcnMsIC4uLmZpbGVzXTsKICB9CiAgaGFuZGxlSXRlbUNvbnRleHRNZW51KGV2ZW50LCBrZXkyLCBpc0ZvbGRlcikgewogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIGlmIChpc0ZvbGRlcikgewogICAgICBEZWVzQ29udGV4dG1lbnU0Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIk9wZW4iLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyT3BlbiIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RLZXkoa2V5MiwgdHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiQ29weSBQYXRoIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmNvcHkiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGtleTIpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIk5ldyBGb2xkZXIgSW5zaWRlIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZvbGRlclBsdXMiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLm9wZW5DcmVhdGVEaWFsb2coImZvbGRlciIsIGtleTIpCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiTmV3IEZpbGUgSW5zaWRlIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZpbGVQbHVzIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5vcGVuQ3JlYXRlRGlhbG9nKCJmaWxlIiwga2V5MikKICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEZWxldGUgRm9sZGVyIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnRyYXNoMiIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgaWYgKGNvbmZpcm0oYERlbGV0ZSBmb2xkZXIgIiR7Z2V0RmlsZU5hbWUoa2V5Mil9IiBhbmQgYWxsIGl0cyBjb250ZW50cz9gKSkgewogICAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLmRlbGV0ZVByZWZpeCh0aGlzLmJ1Y2tldE5hbWUsIGtleTIpOwogICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPYmplY3RzKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdKTsKICAgIH0gZWxzZSB7CiAgICAgIERlZXNDb250ZXh0bWVudTQub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiUHJldmlldyIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpleWUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0S2V5KGtleTIsIGZhbHNlKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEb3dubG9hZCIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpkb3dubG9hZCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgYXBpU2VydmljZS5nZXRPYmplY3RVcmwodGhpcy5idWNrZXROYW1lLCBrZXkyKTsKICAgICAgICAgICAgY29uc3QgbGluazMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICAgICAgICAgIGxpbmszLmhyZWYgPSB1cmw7CiAgICAgICAgICAgIGxpbmszLmRvd25sb2FkID0gZ2V0RmlsZU5hbWUoa2V5Mik7CiAgICAgICAgICAgIGxpbmszLmNsaWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiQ29weSBQYXRoIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmNvcHkiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGtleTIpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGlmIChjb25maXJtKGBEZWxldGUgZmlsZSAiJHtnZXRGaWxlTmFtZShrZXkyKX0iP2ApKSB7CiAgICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuZGVsZXRlT2JqZWN0KHRoaXMuYnVja2V0TmFtZSwga2V5Mik7CiAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE9iamVjdHMoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0pOwogICAgfQogIH0KICBoYW5kbGVFbXB0eVNwYWNlQ29udGV4dE1lbnUoZXZlbnQpIHsKICAgIGlmIChldmVudC50YXJnZXQuY2xvc2VzdCgidHIiKSkgcmV0dXJuOwogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIERlZXNDb250ZXh0bWVudTQub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIFsKICAgICAgewogICAgICAgIG5hbWU6ICJOZXcgRm9sZGVyIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmb2xkZXJQbHVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMub3BlbkNyZWF0ZURpYWxvZygiZm9sZGVyIiwgdGhpcy5jdXJyZW50UHJlZml4KQogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIk5ldyBGaWxlIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmaWxlUGx1cyIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLm9wZW5DcmVhdGVEaWFsb2coImZpbGUiLCB0aGlzLmN1cnJlbnRQcmVmaXgpCiAgICAgIH0KICAgIF0pOwogIH0KICBvcGVuQ3JlYXRlRGlhbG9nKHR5cGU1LCBwcmVmaXg0KSB7CiAgICB0aGlzLmNyZWF0ZURpYWxvZ1R5cGUgPSB0eXBlNTsKICAgIHRoaXMuY3JlYXRlRGlhbG9nUHJlZml4ID0gcHJlZml4NDsKICAgIHRoaXMuY3JlYXRlRGlhbG9nTmFtZSA9ICIiOwogICAgdGhpcy5zaG93Q3JlYXRlRGlhbG9nID0gdHJ1ZTsKICB9CiAgZ2V0Q29udGVudFR5cGUoZXh0KSB7CiAgICBjb25zdCBjb250ZW50VHlwZXMgPSB7CiAgICAgIGpzb246ICJhcHBsaWNhdGlvbi9qc29uIiwKICAgICAgdHh0OiAidGV4dC9wbGFpbiIsCiAgICAgIGh0bWw6ICJ0ZXh0L2h0bWwiLAogICAgICBjc3M6ICJ0ZXh0L2NzcyIsCiAgICAgIGpzOiAiYXBwbGljYXRpb24vamF2YXNjcmlwdCIsCiAgICAgIHRzOiAidGV4dC90eXBlc2NyaXB0IiwKICAgICAgbWQ6ICJ0ZXh0L21hcmtkb3duIiwKICAgICAgeG1sOiAiYXBwbGljYXRpb24veG1sIiwKICAgICAgeWFtbDogInRleHQveWFtbCIsCiAgICAgIHltbDogInRleHQveWFtbCIsCiAgICAgIGNzdjogInRleHQvY3N2IgogICAgfTsKICAgIHJldHVybiBjb250ZW50VHlwZXNbZXh0XSB8fCAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIjsKICB9CiAgZ2V0RGVmYXVsdENvbnRlbnQoZXh0KSB7CiAgICBjb25zdCBkZWZhdWx0cyA9IHsKICAgICAganNvbjogIntcbiAgXG59IiwKICAgICAgaHRtbDogIjwhRE9DVFlQRSBodG1sPlxuPGh0bWw+XG48aGVhZD5cbiAgPHRpdGxlPjwvdGl0bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgXG48L2JvZHk+XG48L2h0bWw+IiwKICAgICAgbWQ6ICIjIFRpdGxlXG5cbiIsCiAgICAgIHR4dDogIiIKICAgIH07CiAgICByZXR1cm4gZGVmYXVsdHNbZXh0XSB8fCAiIjsKICB9CiAgYXN5bmMgaGFuZGxlQ3JlYXRlKCkgewogICAgaWYgKCF0aGlzLmNyZWF0ZURpYWxvZ05hbWUudHJpbSgpKSByZXR1cm47CiAgICBjb25zdCBuYW1lID0gdGhpcy5jcmVhdGVEaWFsb2dOYW1lLnRyaW0oKTsKICAgIGxldCBwYXRoMjsKICAgIGlmICh0aGlzLmNyZWF0ZURpYWxvZ1R5cGUgPT09ICJmb2xkZXIiKSB7CiAgICAgIHBhdGgyID0gdGhpcy5jcmVhdGVEaWFsb2dQcmVmaXggKyBuYW1lICsgIi8ua2VlcCI7CiAgICB9IGVsc2UgewogICAgICBwYXRoMiA9IHRoaXMuY3JlYXRlRGlhbG9nUHJlZml4ICsgbmFtZTsKICAgIH0KICAgIGNvbnN0IGV4dCA9IG5hbWUuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKSB8fCAiIjsKICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gdGhpcy5jcmVhdGVEaWFsb2dUeXBlID09PSAiZmlsZSIgPyB0aGlzLmdldENvbnRlbnRUeXBlKGV4dCkgOiAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIjsKICAgIGNvbnN0IGNvbnRlbnQzID0gdGhpcy5jcmVhdGVEaWFsb2dUeXBlID09PSAiZmlsZSIgPyB0aGlzLmdldERlZmF1bHRDb250ZW50KGV4dCkgOiAiIjsKICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLnB1dE9iamVjdCgKICAgICAgdGhpcy5idWNrZXROYW1lLAogICAgICBwYXRoMiwKICAgICAgYnRvYShjb250ZW50MyksCiAgICAgIGNvbnRlbnRUeXBlCiAgICApOwogICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgdGhpcy5zaG93Q3JlYXRlRGlhbG9nID0gZmFsc2U7CiAgICAgIGF3YWl0IHRoaXMubG9hZE9iamVjdHMoKTsKICAgIH0KICB9CiAgcmVuZGVyQ3JlYXRlRGlhbG9nKCkgewogICAgaWYgKCF0aGlzLnNob3dDcmVhdGVEaWFsb2cpIHJldHVybiAiIjsKICAgIGNvbnN0IGlzRm9sZGVyID0gdGhpcy5jcmVhdGVEaWFsb2dUeXBlID09PSAiZm9sZGVyIjsKICAgIGNvbnN0IHRpdGxlID0gaXNGb2xkZXIgPyAiQ3JlYXRlIE5ldyBGb2xkZXIiIDogIkNyZWF0ZSBOZXcgRmlsZSI7CiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGlzRm9sZGVyID8gImZvbGRlci1uYW1lIG9yIHBhdGgvdG8vZm9sZGVyIiA6ICJmaWxlbmFtZS50eHQgb3IgcGF0aC90by9maWxlLnR4dCI7CiAgICByZXR1cm4gaHRtbDExYAogICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctb3ZlcmxheSIgQGNsaWNrPSR7KCkgPT4gdGhpcy5zaG93Q3JlYXRlRGlhbG9nID0gZmFsc2V9PgogICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZyIgQGNsaWNrPSR7KGUxMSkgPT4gZTExLnN0b3BQcm9wYWdhdGlvbigpfT4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+JHt0aXRsZX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1sb2NhdGlvbiI+CiAgICAgICAgICAgIExvY2F0aW9uOiAke3RoaXMuYnVja2V0TmFtZX0vJHt0aGlzLmNyZWF0ZURpYWxvZ1ByZWZpeH0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIGNsYXNzPSJkaWFsb2ctaW5wdXQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSR7cGxhY2Vob2xkZXJ9CiAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuY3JlYXRlRGlhbG9nTmFtZX0KICAgICAgICAgICAgQGlucHV0PSR7KGUxMSkgPT4gdGhpcy5jcmVhdGVEaWFsb2dOYW1lID0gZTExLnRhcmdldC52YWx1ZX0KICAgICAgICAgICAgQGtleWRvd249JHsoZTExKSA9PiBlMTEua2V5ID09PSAiRW50ZXIiICYmIHRoaXMuaGFuZGxlQ3JlYXRlKCl9CiAgICAgICAgICAvPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWhpbnQiPgogICAgICAgICAgICBVc2UgIi8iIHRvIGNyZWF0ZSBuZXN0ZWQgJHtpc0ZvbGRlciA/ICJmb2xkZXJzIiA6ICJwYXRoIn0gKGUuZy4sICR7aXNGb2xkZXIgPyAicGFyZW50L2NoaWxkIiA6ICJmb2xkZXIvZmlsZS50eHQifSkKICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWFjdGlvbnMiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkaWFsb2ctYnRuIGRpYWxvZy1idG4tY2FuY2VsIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVEaWFsb2cgPSBmYWxzZX0+CiAgICAgICAgICAgICAgQ2FuY2VsCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9ImRpYWxvZy1idG4gZGlhbG9nLWJ0bi1jcmVhdGUiCiAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7IXRoaXMuY3JlYXRlRGlhbG9nTmFtZS50cmltKCl9CiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVDcmVhdGUoKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIENyZWF0ZQogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlcigpIHsKICAgIHJldHVybiBodG1sMTFgCiAgICAgIDxkaXYgY2xhc3M9ImtleXMtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWx0ZXItYmFyIj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICBjbGFzcz0iZmlsdGVyLWlucHV0IgogICAgICAgICAgICBwbGFjZWhvbGRlcj0iRmlsdGVyIGZpbGVzLi4uIgogICAgICAgICAgICAudmFsdWU9JHt0aGlzLmZpbHRlclRleHR9CiAgICAgICAgICAgIEBpbnB1dD0ke3RoaXMuaGFuZGxlRmlsdGVySW5wdXR9CiAgICAgICAgICAvPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJrZXlzLWxpc3QiIEBjb250ZXh0bWVudT0keyhlMTEpID0+IHRoaXMuaGFuZGxlRW1wdHlTcGFjZUNvbnRleHRNZW51KGUxMSl9PgogICAgICAgICAgJHt0aGlzLmxvYWRpbmcgPyBodG1sMTFgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPkxvYWRpbmcuLi48L2Rpdj5gIDogdGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCA9PT0gMCA/IGh0bWwxMWA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+Tm8gb2JqZWN0cyBmb3VuZDwvZGl2PmAgOiBodG1sMTFgCiAgICAgICAgICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5OYW1lPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDogMTAwcHg7Ij5TaXplPC90aD4KICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuZmlsdGVyZWRJdGVtcy5tYXAoCiAgICAgIChpdGVtKSA9PiBodG1sMTFgCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iJHt0aGlzLnNlbGVjdGVkS2V5ID09PSBpdGVtLmtleSA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNlbGVjdEtleShpdGVtLmtleSwgaXRlbS5pc0ZvbGRlcil9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY29udGV4dG1lbnU9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUl0ZW1Db250ZXh0TWVudShlMTEsIGl0ZW0ua2V5LCBpdGVtLmlzRm9sZGVyKX0KICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImtleS1jZWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2l0ZW0uaXNGb2xkZXIgPyBodG1sMTFgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ia2V5LWljb24gZm9sZGVyLWljb24iIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNWwyIDNoOWEyIDIgMCAwIDEgMiAyeiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCA6IGh0bWwxMWAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJrZXktaWNvbiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1uYW1lIj4ke2dldEZpbGVOYW1lKGl0ZW0ua2V5KX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ic2l6ZS1jZWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpdGVtLmlzRm9sZGVyID8gIi0iIDogZm9ybWF0U2l6ZShpdGVtLnNpemUpfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICBgCiAgICApfQogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICBgfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLnJlbmRlckNyZWF0ZURpYWxvZygpfQogICAgYDsKICB9Cn07Cl9pbml0NCA9IF9fZGVjb3JhdG9yU3RhcnQoX2E3KTsKX2J1Y2tldE5hbWUzID0gbmV3IFdlYWtNYXAoKTsKX2N1cnJlbnRQcmVmaXgzID0gbmV3IFdlYWtNYXAoKTsKX3JlZnJlc2hLZXkzID0gbmV3IFdlYWtNYXAoKTsKX2FsbEtleXMgPSBuZXcgV2Vha01hcCgpOwpfcHJlZml4ZXMgPSBuZXcgV2Vha01hcCgpOwpfbG9hZGluZzIgPSBuZXcgV2Vha01hcCgpOwpfc2VsZWN0ZWRLZXkyID0gbmV3IFdlYWtNYXAoKTsKX2ZpbHRlclRleHQgPSBuZXcgV2Vha01hcCgpOwpfc2hvd0NyZWF0ZURpYWxvZzIgPSBuZXcgV2Vha01hcCgpOwpfY3JlYXRlRGlhbG9nVHlwZTIgPSBuZXcgV2Vha01hcCgpOwpfY3JlYXRlRGlhbG9nUHJlZml4MiA9IG5ldyBXZWFrTWFwKCk7Cl9jcmVhdGVEaWFsb2dOYW1lMiA9IG5ldyBXZWFrTWFwKCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImJ1Y2tldE5hbWUiLCBfYnVja2V0TmFtZV9kZWMzLCBUc3ZpZXdTM0tleXMsIF9idWNrZXROYW1lMyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImN1cnJlbnRQcmVmaXgiLCBfY3VycmVudFByZWZpeF9kZWMzLCBUc3ZpZXdTM0tleXMsIF9jdXJyZW50UHJlZml4Myk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgInJlZnJlc2hLZXkiLCBfcmVmcmVzaEtleV9kZWMzLCBUc3ZpZXdTM0tleXMsIF9yZWZyZXNoS2V5Myk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImFsbEtleXMiLCBfYWxsS2V5c19kZWMsIFRzdmlld1MzS2V5cywgX2FsbEtleXMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDQsIDQsICJwcmVmaXhlcyIsIF9wcmVmaXhlc19kZWMsIFRzdmlld1MzS2V5cywgX3ByZWZpeGVzKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ0LCA0LCAibG9hZGluZyIsIF9sb2FkaW5nX2RlYzIsIFRzdmlld1MzS2V5cywgX2xvYWRpbmcyKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ0LCA0LCAic2VsZWN0ZWRLZXkiLCBfc2VsZWN0ZWRLZXlfZGVjMiwgVHN2aWV3UzNLZXlzLCBfc2VsZWN0ZWRLZXkyKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ0LCA0LCAiZmlsdGVyVGV4dCIsIF9maWx0ZXJUZXh0X2RlYywgVHN2aWV3UzNLZXlzLCBfZmlsdGVyVGV4dCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgInNob3dDcmVhdGVEaWFsb2ciLCBfc2hvd0NyZWF0ZURpYWxvZ19kZWMyLCBUc3ZpZXdTM0tleXMsIF9zaG93Q3JlYXRlRGlhbG9nMik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImNyZWF0ZURpYWxvZ1R5cGUiLCBfY3JlYXRlRGlhbG9nVHlwZV9kZWMyLCBUc3ZpZXdTM0tleXMsIF9jcmVhdGVEaWFsb2dUeXBlMik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImNyZWF0ZURpYWxvZ1ByZWZpeCIsIF9jcmVhdGVEaWFsb2dQcmVmaXhfZGVjMiwgVHN2aWV3UzNLZXlzLCBfY3JlYXRlRGlhbG9nUHJlZml4Mik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImNyZWF0ZURpYWxvZ05hbWUiLCBfY3JlYXRlRGlhbG9nTmFtZV9kZWMyLCBUc3ZpZXdTM0tleXMsIF9jcmVhdGVEaWFsb2dOYW1lMik7ClRzdmlld1MzS2V5cyA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgMCwgIlRzdmlld1MzS2V5cyIsIF9Uc3ZpZXdTM0tleXNfZGVjb3JhdG9ycywgVHN2aWV3UzNLZXlzKTsKX19wdWJsaWNGaWVsZChUc3ZpZXdTM0tleXMsICJzdHlsZXMiLCBbCiAgY3NzTWFuYWdlcjYuZGVmYXVsdFN0eWxlcywKICB0aGVtZVN0eWxlcywKICBjc3M2YAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5rZXlzLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmZpbHRlci1iYXIgewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzM7CiAgICAgIH0KCiAgICAgIC5maWx0ZXItaW5wdXQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5maWx0ZXItaW5wdXQ6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDA0MDQwOwogICAgICB9CgogICAgICAuZmlsdGVyLWlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5rZXlzLWxpc3QgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KCiAgICAgIHRoZWFkIHsKICAgICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICAgIHRvcDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAjMWExYTFhOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgIH0KCiAgICAgIHRoIHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOwogICAgICB9CgogICAgICB0ZCB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMmEyYTNlOwogICAgICB9CgogICAgICB0cjpob3ZlciB0ZCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKTsKICAgICAgfQoKICAgICAgdHIuc2VsZWN0ZWQgdGQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICAgIH0KCiAgICAgIC5rZXktY2VsbCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLmtleS1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5mb2xkZXItaWNvbiB7CiAgICAgICAgY29sb3I6ICNmYmJmMjQ7CiAgICAgIH0KCiAgICAgIC5rZXktbmFtZSB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAuc2l6ZS1jZWxsIHsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIHBhZGRpbmc6IDMycHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAuZGlhbG9nLW92ZXJsYXkgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjcpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB6LWluZGV4OiAxMDAwOwogICAgICB9CgogICAgICAuZGlhbG9nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMWUxZTFlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBtaW4td2lkdGg6IDQwMHB4OwogICAgICAgIGJveC1zaGFkb3c6IDAgMjBweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC41KTsKICAgICAgfQoKICAgICAgLmRpYWxvZy10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmRpYWxvZy1sb2NhdGlvbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgfQoKICAgICAgLmRpYWxvZy1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICMxNDE0MTQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuZGlhbG9nLWlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1oaW50IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0biB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWNhbmNlbCB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDsKICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tY2FuY2VsOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1jcmVhdGUgewogICAgICAgIGJhY2tncm91bmQ6ICM0MDQwNDA7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1jcmVhdGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICM1MDUwNTA7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWNyZWF0ZTpkaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KICAgIGAKXSk7Cl9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMSwgVHN2aWV3UzNLZXlzKTsKCi8vIHRzX3dlYi9lbGVtZW50cy90c3ZpZXctczMtcHJldmlldy50cwp2YXIgX2Vycm9yX2RlYywgX2xhc3RNb2RpZmllZF9kZWMsIF9zaXplX2RlYywgX2NvbnRlbnRUeXBlX2RlYywgX2hhc0NoYW5nZXNfZGVjLCBfb3JpZ2luYWxUZXh0Q29udGVudF9kZWMsIF9jb250ZW50X2RlYywgX3NhdmluZ19kZWMsIF9sb2FkaW5nX2RlYzMsIF9vYmplY3RLZXlfZGVjLCBfYnVja2V0TmFtZV9kZWM0LCBfYTgsIF9Uc3ZpZXdTM1ByZXZpZXdfZGVjb3JhdG9ycywgX2luaXQ1LCBfYnVja2V0TmFtZTQsIF9vYmplY3RLZXksIF9sb2FkaW5nMywgX3NhdmluZywgX2NvbnRlbnQsIF9vcmlnaW5hbFRleHRDb250ZW50LCBfaGFzQ2hhbmdlcywgX2NvbnRlbnRUeXBlLCBfc2l6ZSwgX2xhc3RNb2RpZmllZCwgX2Vycm9yOwp2YXIgeyBodG1sOiBodG1sMTIsIGNzczogY3NzNywgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjcsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQ2LCBwcm9wZXJ0eTogcHJvcGVydHk1LCBzdGF0ZTogc3RhdGU2LCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQ3IH0gPSBwbHVnaW5zX2V4cG9ydHM1OwpfVHN2aWV3UzNQcmV2aWV3X2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDYoInRzdmlldy1zMy1wcmV2aWV3IildOwp2YXIgVHN2aWV3UzNQcmV2aWV3ID0gY2xhc3MgZXh0ZW5kcyAoX2E4ID0gRGVlc0VsZW1lbnQ3LCBfYnVja2V0TmFtZV9kZWM0ID0gW3Byb3BlcnR5NSh7IHR5cGU6IFN0cmluZyB9KV0sIF9vYmplY3RLZXlfZGVjID0gW3Byb3BlcnR5NSh7IHR5cGU6IFN0cmluZyB9KV0sIF9sb2FkaW5nX2RlYzMgPSBbc3RhdGU2KCldLCBfc2F2aW5nX2RlYyA9IFtzdGF0ZTYoKV0sIF9jb250ZW50X2RlYyA9IFtzdGF0ZTYoKV0sIF9vcmlnaW5hbFRleHRDb250ZW50X2RlYyA9IFtzdGF0ZTYoKV0sIF9oYXNDaGFuZ2VzX2RlYyA9IFtzdGF0ZTYoKV0sIF9jb250ZW50VHlwZV9kZWMgPSBbc3RhdGU2KCldLCBfc2l6ZV9kZWMgPSBbc3RhdGU2KCldLCBfbGFzdE1vZGlmaWVkX2RlYyA9IFtzdGF0ZTYoKV0sIF9lcnJvcl9kZWMgPSBbc3RhdGU2KCldLCBfYTgpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2J1Y2tldE5hbWU0LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9vYmplY3RLZXksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMTIsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9sb2FkaW5nMywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAxNiwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAxOSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3NhdmluZywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAyMCwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAyMywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NvbnRlbnQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMjQsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMjcsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9vcmlnaW5hbFRleHRDb250ZW50LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDI4LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDMxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfaGFzQ2hhbmdlcywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAzMiwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAzNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NvbnRlbnRUeXBlLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDM2LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDM5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2l6ZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCA0MCwgdGhpcywgMCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDQzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbGFzdE1vZGlmaWVkLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDQ0LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDQ3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZXJyb3IsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgNDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgNTEsIHRoaXMpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJvYmplY3RLZXkiKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoImJ1Y2tldE5hbWUiKSkgewogICAgICBpZiAodGhpcy5vYmplY3RLZXkpIHsKICAgICAgICB0aGlzLmxvYWRPYmplY3QoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmNvbnRlbnQgPSAiIjsKICAgICAgICB0aGlzLmNvbnRlbnRUeXBlID0gIiI7CiAgICAgICAgdGhpcy5lcnJvciA9ICIiOwogICAgICAgIHRoaXMub3JpZ2luYWxUZXh0Q29udGVudCA9ICIiOwogICAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgfQogIGFzeW5jIGxvYWRPYmplY3QoKSB7CiAgICBpZiAoIXRoaXMub2JqZWN0S2V5IHx8ICF0aGlzLmJ1Y2tldE5hbWUpIHJldHVybjsKICAgIHRoaXMubG9hZGluZyA9IHRydWU7CiAgICB0aGlzLmVycm9yID0gIiI7CiAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwaVNlcnZpY2UuZ2V0T2JqZWN0KHRoaXMuYnVja2V0TmFtZSwgdGhpcy5vYmplY3RLZXkpOwogICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgIHRoaXMuZXJyb3IgPSAiT2JqZWN0IG5vdCBmb3VuZCI7CiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuY29udGVudCA9IHJlc3VsdC5jb250ZW50IHx8ICIiOwogICAgICB0aGlzLmNvbnRlbnRUeXBlID0gcmVzdWx0LmNvbnRlbnRUeXBlIHx8ICIiOwogICAgICB0aGlzLnNpemUgPSByZXN1bHQuc2l6ZSB8fCAwOwogICAgICB0aGlzLmxhc3RNb2RpZmllZCA9IHJlc3VsdC5sYXN0TW9kaWZpZWQgfHwgIiI7CiAgICAgIGlmICh0aGlzLmlzVGV4dCgpKSB7CiAgICAgICAgdGhpcy5vcmlnaW5hbFRleHRDb250ZW50ID0gdGhpcy5nZXRUZXh0Q29udGVudCgpOwogICAgICB9CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBvYmplY3Q6IiwgZXJyKTsKICAgICAgdGhpcy5lcnJvciA9ICJGYWlsZWQgdG8gbG9hZCBvYmplY3QiOwogICAgfQogICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgfQogIGZvcm1hdERhdGUoZGF0ZVN0cikgewogICAgaWYgKCFkYXRlU3RyKSByZXR1cm4gIi0iOwogICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHIpOwogICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcoKTsKICB9CiAgaXNJbWFnZSgpIHsKICAgIHJldHVybiB0aGlzLmNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpOwogIH0KICBpc1RleHQoKSB7CiAgICByZXR1cm4gdGhpcy5jb250ZW50VHlwZS5zdGFydHNXaXRoKCJ0ZXh0LyIpIHx8IHRoaXMuY29udGVudFR5cGUgPT09ICJhcHBsaWNhdGlvbi9qc29uIiB8fCB0aGlzLmNvbnRlbnRUeXBlID09PSAiYXBwbGljYXRpb24veG1sIiB8fCB0aGlzLmNvbnRlbnRUeXBlID09PSAiYXBwbGljYXRpb24vamF2YXNjcmlwdCI7CiAgfQogIGdldFRleHRDb250ZW50KCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgYmluYXJ5U3RyaW5nID0gYXRvYih0aGlzLmNvbnRlbnQpOwogICAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpbmFyeVN0cmluZy5sZW5ndGgpOwogICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBiaW5hcnlTdHJpbmcubGVuZ3RoOyBpMTErKykgewogICAgICAgIGJ5dGVzW2kxMV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpMTEpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoInV0Zi04IikuZGVjb2RlKGJ5dGVzKTsKICAgIH0gY2F0Y2ggewogICAgICByZXR1cm4gIlVuYWJsZSB0byBkZWNvZGUgY29udGVudCI7CiAgICB9CiAgfQogIGFzeW5jIGhhbmRsZURvd25sb2FkKCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtVaW50OEFycmF5LmZyb20oYXRvYih0aGlzLmNvbnRlbnQpLCAoYzExKSA9PiBjMTEuY2hhckNvZGVBdCgwKSldLCB7CiAgICAgICAgdHlwZTogdGhpcy5jb250ZW50VHlwZQogICAgICB9KTsKICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICAgY29uc3QgYTUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICAgIGE1LmhyZWYgPSB1cmw7CiAgICAgIGE1LmRvd25sb2FkID0gZ2V0RmlsZU5hbWUodGhpcy5vYmplY3RLZXkpOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGE1KTsKICAgICAgYTUuY2xpY2soKTsKICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhNSk7CiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBkb3dubG9hZGluZzoiLCBlcnIpOwogICAgfQogIH0KICBhc3luYyBoYW5kbGVEZWxldGUoKSB7CiAgICBpZiAoIWNvbmZpcm0oYERlbGV0ZSAiJHtnZXRGaWxlTmFtZSh0aGlzLm9iamVjdEtleSl9Ij9gKSkgcmV0dXJuOwogICAgdHJ5IHsKICAgICAgYXdhaXQgYXBpU2VydmljZS5kZWxldGVPYmplY3QodGhpcy5idWNrZXROYW1lLCB0aGlzLm9iamVjdEtleSk7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoIm9iamVjdC1kZWxldGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IGtleTogdGhpcy5vYmplY3RLZXkgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pCiAgICAgICk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgZGVsZXRpbmcgb2JqZWN0OiIsIGVycik7CiAgICB9CiAgfQogIGdldExhbmd1YWdlKCkgewogICAgY29uc3QgZXh0ID0gdGhpcy5vYmplY3RLZXkuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKSB8fCAiIjsKICAgIGNvbnN0IGxhbmd1YWdlTWFwID0gewogICAgICB0czogInR5cGVzY3JpcHQiLAogICAgICB0c3g6ICJ0eXBlc2NyaXB0IiwKICAgICAganM6ICJqYXZhc2NyaXB0IiwKICAgICAganN4OiAiamF2YXNjcmlwdCIsCiAgICAgIG1qczogImphdmFzY3JpcHQiLAogICAgICBjanM6ICJqYXZhc2NyaXB0IiwKICAgICAganNvbjogImpzb24iLAogICAgICBodG1sOiAiaHRtbCIsCiAgICAgIGh0bTogImh0bWwiLAogICAgICBjc3M6ICJjc3MiLAogICAgICBzY3NzOiAic2NzcyIsCiAgICAgIHNhc3M6ICJzY3NzIiwKICAgICAgbGVzczogImxlc3MiLAogICAgICBtZDogIm1hcmtkb3duIiwKICAgICAgbWFya2Rvd246ICJtYXJrZG93biIsCiAgICAgIHhtbDogInhtbCIsCiAgICAgIHlhbWw6ICJ5YW1sIiwKICAgICAgeW1sOiAieWFtbCIsCiAgICAgIHB5OiAicHl0aG9uIiwKICAgICAgcmI6ICJydWJ5IiwKICAgICAgZ286ICJnbyIsCiAgICAgIHJzOiAicnVzdCIsCiAgICAgIGphdmE6ICJqYXZhIiwKICAgICAgYzogImMiLAogICAgICBjcHA6ICJjcHAiLAogICAgICBoOiAiYyIsCiAgICAgIGhwcDogImNwcCIsCiAgICAgIGNzOiAiY3NoYXJwIiwKICAgICAgcGhwOiAicGhwIiwKICAgICAgc2g6ICJzaGVsbCIsCiAgICAgIGJhc2g6ICJzaGVsbCIsCiAgICAgIHpzaDogInNoZWxsIiwKICAgICAgc3FsOiAic3FsIiwKICAgICAgZ3JhcGhxbDogImdyYXBocWwiLAogICAgICBncWw6ICJncmFwaHFsIiwKICAgICAgZG9ja2VyZmlsZTogImRvY2tlcmZpbGUiLAogICAgICB0eHQ6ICJwbGFpbnRleHQiCiAgICB9OwogICAgcmV0dXJuIGxhbmd1YWdlTWFwW2V4dF0gfHwgInBsYWludGV4dCI7CiAgfQogIGhhbmRsZUNvbnRlbnRDaGFuZ2UoZXZlbnQpIHsKICAgIGNvbnN0IG5ld1ZhbHVlID0gZXZlbnQuZGV0YWlsOwogICAgdGhpcy5oYXNDaGFuZ2VzID0gbmV3VmFsdWUgIT09IHRoaXMub3JpZ2luYWxUZXh0Q29udGVudDsKICB9CiAgaGFuZGxlRGlzY2FyZCgpIHsKICAgIGNvbnN0IGNvZGVFZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtY29kZSIpOwogICAgaWYgKGNvZGVFZGl0b3IpIHsKICAgICAgY29kZUVkaXRvci52YWx1ZSA9IHRoaXMub3JpZ2luYWxUZXh0Q29udGVudDsKICAgIH0KICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlOwogIH0KICBhc3luYyBoYW5kbGVTYXZlKCkgewogICAgaWYgKCF0aGlzLmhhc0NoYW5nZXMgfHwgdGhpcy5zYXZpbmcpIHJldHVybjsKICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGNvZGVFZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtY29kZSIpOwogICAgICBjb25zdCBjdXJyZW50Q29udGVudCA9IGNvZGVFZGl0b3I/LnZhbHVlID8/ICIiOwogICAgICBjb25zdCBlbmNvZGVyMiA9IG5ldyBUZXh0RW5jb2RlcigpOwogICAgICBjb25zdCBieXRlcyA9IGVuY29kZXIyLmVuY29kZShjdXJyZW50Q29udGVudCk7CiAgICAgIGNvbnN0IGJhc2U2NENvbnRlbnQgPSBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnl0ZXMpKTsKICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UucHV0T2JqZWN0KAogICAgICAgIHRoaXMuYnVja2V0TmFtZSwKICAgICAgICB0aGlzLm9iamVjdEtleSwKICAgICAgICBiYXNlNjRDb250ZW50LAogICAgICAgIHRoaXMuY29udGVudFR5cGUKICAgICAgKTsKICAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICB0aGlzLm9yaWdpbmFsVGV4dENvbnRlbnQgPSBjdXJyZW50Q29udGVudDsKICAgICAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTsKICAgICAgICB0aGlzLmNvbnRlbnQgPSBiYXNlNjRDb250ZW50OwogICAgICB9CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3Igc2F2aW5nIG9iamVjdDoiLCBlcnIpOwogICAgfQogICAgdGhpcy5zYXZpbmcgPSBmYWxzZTsKICB9CiAgcmVuZGVyKCkgewogICAgaWYgKCF0aGlzLm9iamVjdEtleSkgewogICAgICByZXR1cm4gaHRtbDEyYAogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHoiIC8+CiAgICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz0iMTQgMiAxNCA4IDIwIDgiIC8+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8cD5TZWxlY3QgYSBmaWxlIHRvIHByZXZpZXc8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgIH0KICAgIGlmICh0aGlzLmxvYWRpbmcpIHsKICAgICAgcmV0dXJuIGh0bWwxMmAKICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXN0YXRlIj5Mb2FkaW5nLi4uPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAodGhpcy5lcnJvcikgewogICAgICByZXR1cm4gaHRtbDEyYAogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImVycm9yLXN0YXRlIj4ke3RoaXMuZXJyb3J9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICByZXR1cm4gaHRtbDEyYAogICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy10aXRsZSI+JHtnZXRGaWxlTmFtZSh0aGlzLm9iamVjdEtleSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LW1ldGEiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0YS1pdGVtIj4ke3RoaXMuY29udGVudFR5cGV9PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0YS1pdGVtIj4ke2Zvcm1hdFNpemUodGhpcy5zaXplKX08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXRhLWl0ZW0iPiR7dGhpcy5mb3JtYXREYXRlKHRoaXMubGFzdE1vZGlmaWVkKX08L3NwYW4+CiAgICAgICAgICAgICR7dGhpcy5oYXNDaGFuZ2VzID8gaHRtbDEyYAogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ1bnNhdmVkLWluZGljYXRvciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idW5zYXZlZC1kb3QiPjwvc3Bhbj4KICAgICAgICAgICAgICAgIFVuc2F2ZWQgY2hhbmdlcwogICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctY29udGVudCAke3RoaXMuaXNUZXh0KCkgPyAiY29kZS1lZGl0b3IiIDogIiJ9Ij4KICAgICAgICAgICR7dGhpcy5pc0ltYWdlKCkgPyBodG1sMTJgPGltZyBjbGFzcz0icHJldmlldy1pbWFnZSIgc3JjPSJkYXRhOiR7dGhpcy5jb250ZW50VHlwZX07YmFzZTY0LCR7dGhpcy5jb250ZW50fSIgLz5gIDogdGhpcy5pc1RleHQoKSA/IGh0bWwxMmAKICAgICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtY29kZQogICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMub3JpZ2luYWxUZXh0Q29udGVudH0KICAgICAgICAgICAgICAgICAgICAubGFuZ3VhZ2U9JHt0aGlzLmdldExhbmd1YWdlKCl9CiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIgogICAgICAgICAgICAgICAgICAgIEBjb250ZW50LWNoYW5nZT0keyhlMTEpID0+IHRoaXMuaGFuZGxlQ29udGVudENoYW5nZShlMTEpfQogICAgICAgICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNvZGU+CiAgICAgICAgICAgICAgICBgIDogaHRtbDEyYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiaW5hcnktcHJldmlldyI+CiAgICAgICAgICAgICAgICAgICAgPHA+QmluYXJ5IGZpbGUgcHJldmlldyBub3QgYXZhaWxhYmxlPC9wPgogICAgICAgICAgICAgICAgICAgIDxwPkRvd25sb2FkIHRvIHZpZXc8L3A+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYH0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1hY3Rpb25zIj4KICAgICAgICAgICR7dGhpcy5oYXNDaGFuZ2VzID8gaHRtbDEyYAogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIHNlY29uZGFyeSIgQGNsaWNrPSR7dGhpcy5oYW5kbGVEaXNjYXJkfT5EaXNjYXJkPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0iYWN0aW9uLWJ0biBwcmltYXJ5IgogICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlU2F2ZX0KICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLnNhdmluZ30KICAgICAgICAgICAgPgogICAgICAgICAgICAgICR7dGhpcy5zYXZpbmcgPyAiU2F2aW5nLi4uIiA6ICJTYXZlIn0KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICBgIDogaHRtbDEyYAogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIiBAY2xpY2s9JHt0aGlzLmhhbmRsZURvd25sb2FkfT5Eb3dubG9hZDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIGRhbmdlciIgQGNsaWNrPSR7dGhpcy5oYW5kbGVEZWxldGV9PkRlbGV0ZTwvYnV0dG9uPgogICAgICAgICAgYH0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KfTsKX2luaXQ1ID0gX19kZWNvcmF0b3JTdGFydChfYTgpOwpfYnVja2V0TmFtZTQgPSBuZXcgV2Vha01hcCgpOwpfb2JqZWN0S2V5ID0gbmV3IFdlYWtNYXAoKTsKX2xvYWRpbmczID0gbmV3IFdlYWtNYXAoKTsKX3NhdmluZyA9IG5ldyBXZWFrTWFwKCk7Cl9jb250ZW50ID0gbmV3IFdlYWtNYXAoKTsKX29yaWdpbmFsVGV4dENvbnRlbnQgPSBuZXcgV2Vha01hcCgpOwpfaGFzQ2hhbmdlcyA9IG5ldyBXZWFrTWFwKCk7Cl9jb250ZW50VHlwZSA9IG5ldyBXZWFrTWFwKCk7Cl9zaXplID0gbmV3IFdlYWtNYXAoKTsKX2xhc3RNb2RpZmllZCA9IG5ldyBXZWFrTWFwKCk7Cl9lcnJvciA9IG5ldyBXZWFrTWFwKCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgImJ1Y2tldE5hbWUiLCBfYnVja2V0TmFtZV9kZWM0LCBUc3ZpZXdTM1ByZXZpZXcsIF9idWNrZXROYW1lNCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgIm9iamVjdEtleSIsIF9vYmplY3RLZXlfZGVjLCBUc3ZpZXdTM1ByZXZpZXcsIF9vYmplY3RLZXkpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDUsIDQsICJsb2FkaW5nIiwgX2xvYWRpbmdfZGVjMywgVHN2aWV3UzNQcmV2aWV3LCBfbG9hZGluZzMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDUsIDQsICJzYXZpbmciLCBfc2F2aW5nX2RlYywgVHN2aWV3UzNQcmV2aWV3LCBfc2F2aW5nKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ1LCA0LCAiY29udGVudCIsIF9jb250ZW50X2RlYywgVHN2aWV3UzNQcmV2aWV3LCBfY29udGVudCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgIm9yaWdpbmFsVGV4dENvbnRlbnQiLCBfb3JpZ2luYWxUZXh0Q29udGVudF9kZWMsIFRzdmlld1MzUHJldmlldywgX29yaWdpbmFsVGV4dENvbnRlbnQpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDUsIDQsICJoYXNDaGFuZ2VzIiwgX2hhc0NoYW5nZXNfZGVjLCBUc3ZpZXdTM1ByZXZpZXcsIF9oYXNDaGFuZ2VzKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ1LCA0LCAiY29udGVudFR5cGUiLCBfY29udGVudFR5cGVfZGVjLCBUc3ZpZXdTM1ByZXZpZXcsIF9jb250ZW50VHlwZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgInNpemUiLCBfc2l6ZV9kZWMsIFRzdmlld1MzUHJldmlldywgX3NpemUpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDUsIDQsICJsYXN0TW9kaWZpZWQiLCBfbGFzdE1vZGlmaWVkX2RlYywgVHN2aWV3UzNQcmV2aWV3LCBfbGFzdE1vZGlmaWVkKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ1LCA0LCAiZXJyb3IiLCBfZXJyb3JfZGVjLCBUc3ZpZXdTM1ByZXZpZXcsIF9lcnJvcik7ClRzdmlld1MzUHJldmlldyA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgMCwgIlRzdmlld1MzUHJldmlldyIsIF9Uc3ZpZXdTM1ByZXZpZXdfZGVjb3JhdG9ycywgVHN2aWV3UzNQcmV2aWV3KTsKX19wdWJsaWNGaWVsZChUc3ZpZXdTM1ByZXZpZXcsICJzdHlsZXMiLCBbCiAgY3NzTWFuYWdlcjcuZGVmYXVsdFN0eWxlcywKICB0aGVtZVN0eWxlcywKICBjc3M3YAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAucHJldmlldy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsKICAgICAgfQoKICAgICAgLnByZXZpZXctdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LW1ldGEgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgIH0KCiAgICAgIC5tZXRhLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLnByZXZpZXctY29udGVudCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICB9CgogICAgICAucHJldmlldy1jb250ZW50LmNvZGUtZWRpdG9yIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWNvbnRlbnQuY29kZS1lZGl0b3IgZGVlcy1pbnB1dC1jb2RlIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWltYWdlIHsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LWhlaWdodDogMTAwJTsKICAgICAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLnByZXZpZXctdGV4dCB7CiAgICAgICAgZm9udC1mYW1pbHk6ICdNb25hY28nLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICBjb2xvcjogI2NjYzsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWFjdGlvbnMgewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICMzMzM7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4gewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0MDQwNDA7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ0bjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4uZGFuZ2VyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjIpOwogICAgICAgIGJvcmRlci1jb2xvcjogI2VmNDQ0NDsKICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4uZGFuZ2VyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjMpOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ0bi5wcmltYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKTsKICAgICAgICBib3JkZXItY29sb3I6ICMzYjgyZjY7CiAgICAgICAgY29sb3I6ICM2MGE1ZmE7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnRuLnByaW1hcnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjQpOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ0bi5wcmltYXJ5OmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4uc2Vjb25kYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICAgIGJvcmRlci1jb2xvcjogIzU1NTsKICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4uc2Vjb25kYXJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIC51bnNhdmVkLWluZGljYXRvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjUxLCAxOTEsIDM2LCAwLjEpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjUxLCAxOTEsIDM2LCAwLjMpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICNmYmJmMjQ7CiAgICAgIH0KCiAgICAgIC51bnNhdmVkLWRvdCB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogI2ZiYmYyNDsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSBzdmcgewogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLmxvYWRpbmctc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1zdGF0ZSB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5iaW5hcnktcHJldmlldyB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIH0KICAgIGAKXSk7Cl9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMSwgVHN2aWV3UzNQcmV2aWV3KTsKCi8vIHRzX3dlYi9lbGVtZW50cy90c3ZpZXctbW9uZ28tYnJvd3Nlci50cwp2YXIgX2lzU3RyZWFtQ29ubmVjdGVkX2RlYzIsIF9yZWNlbnRDaGFuZ2VDb3VudF9kZWMyLCBfaXNSZXNpemluZ0VkaXRvcl9kZWMsIF9lZGl0b3JXaWR0aF9kZWMsIF9zdGF0c19kZWMsIF9zZWxlY3RlZERvY3VtZW50SWRfZGVjLCBfYWN0aXZlVGFiX2RlYywgX2NvbGxlY3Rpb25OYW1lX2RlYywgX2RhdGFiYXNlTmFtZV9kZWMsIF9hOSwgX1Rzdmlld01vbmdvQnJvd3Nlcl9kZWNvcmF0b3JzLCBfaW5pdDYsIF9kYXRhYmFzZU5hbWUsIF9jb2xsZWN0aW9uTmFtZSwgX2FjdGl2ZVRhYiwgX3NlbGVjdGVkRG9jdW1lbnRJZCwgX3N0YXRzLCBfZWRpdG9yV2lkdGgsIF9pc1Jlc2l6aW5nRWRpdG9yLCBfcmVjZW50Q2hhbmdlQ291bnQyLCBfaXNTdHJlYW1Db25uZWN0ZWQyOwp2YXIgeyBodG1sOiBodG1sMTMsIGNzczogY3NzOCwgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjgsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQ3LCBwcm9wZXJ0eTogcHJvcGVydHk2LCBzdGF0ZTogc3RhdGU3LCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQ4IH0gPSBwbHVnaW5zX2V4cG9ydHM1OwpfVHN2aWV3TW9uZ29Ccm93c2VyX2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDcoInRzdmlldy1tb25nby1icm93c2VyIildOwp2YXIgVHN2aWV3TW9uZ29Ccm93c2VyID0gY2xhc3MgZXh0ZW5kcyAoX2E5ID0gRGVlc0VsZW1lbnQ4LCBfZGF0YWJhc2VOYW1lX2RlYyA9IFtwcm9wZXJ0eTYoeyB0eXBlOiBTdHJpbmcgfSldLCBfY29sbGVjdGlvbk5hbWVfZGVjID0gW3Byb3BlcnR5Nih7IHR5cGU6IFN0cmluZyB9KV0sIF9hY3RpdmVUYWJfZGVjID0gW3N0YXRlNygpXSwgX3NlbGVjdGVkRG9jdW1lbnRJZF9kZWMgPSBbc3RhdGU3KCldLCBfc3RhdHNfZGVjID0gW3N0YXRlNygpXSwgX2VkaXRvcldpZHRoX2RlYyA9IFtzdGF0ZTcoKV0sIF9pc1Jlc2l6aW5nRWRpdG9yX2RlYyA9IFtzdGF0ZTcoKV0sIF9yZWNlbnRDaGFuZ2VDb3VudF9kZWMyID0gW3N0YXRlNygpXSwgX2lzU3RyZWFtQ29ubmVjdGVkX2RlYzIgPSBbc3RhdGU3KCldLCBfYTkpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RhdGFiYXNlTmFtZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCA4LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDExLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfY29sbGVjdGlvbk5hbWUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMTIsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9hY3RpdmVUYWIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMTYsIHRoaXMsICJkb2N1bWVudHMiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZERvY3VtZW50SWQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMjAsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMjMsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zdGF0cywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAyNCwgdGhpcywgbnVsbCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDI3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZWRpdG9yV2lkdGgsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMjgsIHRoaXMsIDQwMCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDMxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfaXNSZXNpemluZ0VkaXRvciwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAzMiwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAzNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3JlY2VudENoYW5nZUNvdW50MiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAzNiwgdGhpcywgMCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDM5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfaXNTdHJlYW1Db25uZWN0ZWQyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDQwLCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDQzLCB0aGlzKTsKICAgIF9fcHVibGljRmllbGQodGhpcywgImNoYW5nZVN1YnNjcmlwdGlvbiIsIG51bGwpOwogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAic3RhcnRFZGl0b3JSZXNpemUiLCAoZTExKSA9PiB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLmlzUmVzaXppbmdFZGl0b3IgPSB0cnVlOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZUVkaXRvclJlc2l6ZSk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmVuZEVkaXRvclJlc2l6ZSk7CiAgICB9KTsKICAgIF9fcHVibGljRmllbGQodGhpcywgImhhbmRsZUVkaXRvclJlc2l6ZSIsIChlMTEpID0+IHsKICAgICAgaWYgKCF0aGlzLmlzUmVzaXppbmdFZGl0b3IpIHJldHVybjsKICAgICAgY29uc3QgY29udGVudEVsID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuY29udGVudCIpOwogICAgICBpZiAoIWNvbnRlbnRFbCkgcmV0dXJuOwogICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGVudEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWluKE1hdGgubWF4KGNvbnRhaW5lclJlY3QucmlnaHQgLSBlMTEuY2xpZW50WCwgMzAwKSwgNzAwKTsKICAgICAgdGhpcy5lZGl0b3JXaWR0aCA9IG5ld1dpZHRoOwogICAgfSk7CiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJlbmRFZGl0b3JSZXNpemUiLCAoKSA9PiB7CiAgICAgIHRoaXMuaXNSZXNpemluZ0VkaXRvciA9IGZhbHNlOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZUVkaXRvclJlc2l6ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmVuZEVkaXRvclJlc2l6ZSk7CiAgICB9KTsKICB9CiAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgYXdhaXQgdGhpcy5sb2FkU3RhdHMoKTsKICAgIHRoaXMuc3Vic2NyaWJlVG9DaGFuZ2VzKCk7CiAgfQogIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tQ2hhbmdlcygpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJkYXRhYmFzZU5hbWUiKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoImNvbGxlY3Rpb25OYW1lIikpIHsKICAgICAgdGhpcy5sb2FkU3RhdHMoKTsKICAgICAgdGhpcy5zZWxlY3RlZERvY3VtZW50SWQgPSAiIjsKICAgICAgdGhpcy5yZWNlbnRDaGFuZ2VDb3VudCA9IDA7CiAgICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tQ2hhbmdlcygpOwogICAgICB0aGlzLnN1YnNjcmliZVRvQ2hhbmdlcygpOwogICAgfQogIH0KICBhc3luYyBzdWJzY3JpYmVUb0NoYW5nZXMoKSB7CiAgICBpZiAoIXRoaXMuZGF0YWJhc2VOYW1lIHx8ICF0aGlzLmNvbGxlY3Rpb25OYW1lKSByZXR1cm47CiAgICB0cnkgewogICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgY2hhbmdlU3RyZWFtU2VydmljZS5zdWJzY3JpYmVUb0NvbGxlY3Rpb24odGhpcy5kYXRhYmFzZU5hbWUsIHRoaXMuY29sbGVjdGlvbk5hbWUpOwogICAgICB0aGlzLmlzU3RyZWFtQ29ubmVjdGVkID0gc3VjY2VzczsKICAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICB0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbiA9IGNoYW5nZVN0cmVhbVNlcnZpY2UuZ2V0Q29sbGVjdGlvbkNoYW5nZXModGhpcy5kYXRhYmFzZU5hbWUsIHRoaXMuY29sbGVjdGlvbk5hbWUpLnN1YnNjcmliZSgoZXZlbnQpID0+IHsKICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKGV2ZW50KTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCJbTW9uZ29Ccm93c2VyXSBGYWlsZWQgdG8gc3Vic2NyaWJlIHRvIGNoYW5nZXM6IiwgZXJyb3IpOwogICAgICB0aGlzLmlzU3RyZWFtQ29ubmVjdGVkID0gZmFsc2U7CiAgICB9CiAgfQogIHVuc3Vic2NyaWJlRnJvbUNoYW5nZXMoKSB7CiAgICBpZiAodGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24pIHsKICAgICAgdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24gPSBudWxsOwogICAgfQogICAgaWYgKHRoaXMuZGF0YWJhc2VOYW1lICYmIHRoaXMuY29sbGVjdGlvbk5hbWUpIHsKICAgICAgY2hhbmdlU3RyZWFtU2VydmljZS51bnN1YnNjcmliZUZyb21Db2xsZWN0aW9uKHRoaXMuZGF0YWJhc2VOYW1lLCB0aGlzLmNvbGxlY3Rpb25OYW1lKTsKICAgIH0KICAgIHRoaXMuaXNTdHJlYW1Db25uZWN0ZWQgPSBmYWxzZTsKICB9CiAgaGFuZGxlQ2hhbmdlKGV2ZW50KSB7CiAgICBjb25zb2xlLmxvZygiW01vbmdvQnJvd3Nlcl0gUmVjZWl2ZWQgY2hhbmdlOiIsIGV2ZW50KTsKICAgIHRoaXMucmVjZW50Q2hhbmdlQ291bnQrKzsKICAgIHRoaXMubG9hZFN0YXRzKCk7CiAgICBjb25zdCBkb2N1bWVudHNFbCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigidHN2aWV3LW1vbmdvLWRvY3VtZW50cyIpOwogICAgaWYgKGRvY3VtZW50c0VsPy5yZWZyZXNoKSB7CiAgICAgIGRvY3VtZW50c0VsLnJlZnJlc2goKTsKICAgIH0KICB9CiAgYXN5bmMgbG9hZFN0YXRzKCkgewogICAgaWYgKCF0aGlzLmRhdGFiYXNlTmFtZSB8fCAhdGhpcy5jb2xsZWN0aW9uTmFtZSkgcmV0dXJuOwogICAgdHJ5IHsKICAgICAgdGhpcy5zdGF0cyA9IGF3YWl0IGFwaVNlcnZpY2UuZ2V0Q29sbGVjdGlvblN0YXRzKHRoaXMuZGF0YWJhc2VOYW1lLCB0aGlzLmNvbGxlY3Rpb25OYW1lKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBsb2FkaW5nIHN0YXRzOiIsIGVycik7CiAgICAgIHRoaXMuc3RhdHMgPSBudWxsOwogICAgfQogIH0KICBzZXRBY3RpdmVUYWIodGFiMikgewogICAgdGhpcy5hY3RpdmVUYWIgPSB0YWIyOwogIH0KICBoYW5kbGVEb2N1bWVudFNlbGVjdGVkKGUxMSkgewogICAgdGhpcy5zZWxlY3RlZERvY3VtZW50SWQgPSBlMTEuZGV0YWlsLmRvY3VtZW50SWQ7CiAgfQogIHJlbmRlcigpIHsKICAgIHJldHVybiBodG1sMTNgCiAgICAgIDxkaXYgY2xhc3M9ImJyb3dzZXItY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sbGVjdGlvbi1pbmZvIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxlY3Rpb24tdGl0bGUiPiR7dGhpcy5jb2xsZWN0aW9uTmFtZX08L3NwYW4+CiAgICAgICAgICAgICR7dGhpcy5zdGF0cyA/IGh0bWwxM2AKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sbGVjdGlvbi1zdGF0cyI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtaXRlbSI+JHtmb3JtYXRDb3VudCh0aGlzLnN0YXRzLmNvdW50KX0gZG9jczwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC1pdGVtIj4ke2Zvcm1hdFNpemUodGhpcy5zdGF0cy5zaXplKX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtaXRlbSI+JHt0aGlzLnN0YXRzLmluZGV4Q291bnR9IGluZGV4ZXM8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdHJlYW0tc3RhdHVzIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RyZWFtLWRvdCAke3RoaXMuaXNTdHJlYW1Db25uZWN0ZWQgPyAiY29ubmVjdGVkIiA6ICIifSI+PC9zcGFuPgogICAgICAgICAgICAgICR7dGhpcy5pc1N0cmVhbUNvbm5lY3RlZCA/ICJMaXZlIiA6ICJPZmZsaW5lIn0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICR7dGhpcy5yZWNlbnRDaGFuZ2VDb3VudCA+IDAgPyBodG1sMTNgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYW5nZS1pbmRpY2F0b3IgcHVsc2UiPgogICAgICAgICAgICAgICAgICAgICR7dGhpcy5yZWNlbnRDaGFuZ2VDb3VudH0gY2hhbmdlJHt0aGlzLnJlY2VudENoYW5nZUNvdW50ID4gMSA/ICJzIiA6ICIifQogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgY2xhc3M9InRhYnMiPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9InRhYiAke3RoaXMuYWN0aXZlVGFiID09PSAiZG9jdW1lbnRzIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2V0QWN0aXZlVGFiKCJkb2N1bWVudHMiKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIERvY3VtZW50cwogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJ0YWIgJHt0aGlzLmFjdGl2ZVRhYiA9PT0gImluZGV4ZXMiID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZXRBY3RpdmVUYWIoImluZGV4ZXMiKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIEluZGV4ZXMKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0idGFiICR7dGhpcy5hY3RpdmVUYWIgPT09ICJhZ2dyZWdhdGlvbiIgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNldEFjdGl2ZVRhYigiYWdncmVnYXRpb24iKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIEFnZ3JlZ2F0aW9uCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiIHN0eWxlPSItLWVkaXRvci13aWR0aDogJHt0aGlzLmVkaXRvcldpZHRofXB4Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1haW4tcGFuZWwiPgogICAgICAgICAgICAke3RoaXMuYWN0aXZlVGFiID09PSAiZG9jdW1lbnRzIiA/IGh0bWwxM2AKICAgICAgICAgICAgICAgICAgPHRzdmlldy1tb25nby1kb2N1bWVudHMKICAgICAgICAgICAgICAgICAgICAuZGF0YWJhc2VOYW1lPSR7dGhpcy5kYXRhYmFzZU5hbWV9CiAgICAgICAgICAgICAgICAgICAgLmNvbGxlY3Rpb25OYW1lPSR7dGhpcy5jb2xsZWN0aW9uTmFtZX0KICAgICAgICAgICAgICAgICAgICBAZG9jdW1lbnQtc2VsZWN0ZWQ9JHt0aGlzLmhhbmRsZURvY3VtZW50U2VsZWN0ZWR9CiAgICAgICAgICAgICAgICAgID48L3Rzdmlldy1tb25nby1kb2N1bWVudHM+CiAgICAgICAgICAgICAgICBgIDogdGhpcy5hY3RpdmVUYWIgPT09ICJpbmRleGVzIiA/IGh0bWwxM2AKICAgICAgICAgICAgICAgICAgICA8dHN2aWV3LW1vbmdvLWluZGV4ZXMKICAgICAgICAgICAgICAgICAgICAgIC5kYXRhYmFzZU5hbWU9JHt0aGlzLmRhdGFiYXNlTmFtZX0KICAgICAgICAgICAgICAgICAgICAgIC5jb2xsZWN0aW9uTmFtZT0ke3RoaXMuY29sbGVjdGlvbk5hbWV9CiAgICAgICAgICAgICAgICAgICAgPjwvdHN2aWV3LW1vbmdvLWluZGV4ZXM+CiAgICAgICAgICAgICAgICAgIGAgOiBodG1sMTNgCiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzogMjRweDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzY2NjsiPgogICAgICAgICAgICAgICAgICAgICAgQWdncmVnYXRpb24gcGlwZWxpbmUgYnVpbGRlciBjb21pbmcgc29vbgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0icmVzaXplLWRpdmlkZXIgJHt0aGlzLmlzUmVzaXppbmdFZGl0b3IgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgQG1vdXNlZG93bj0ke3RoaXMuc3RhcnRFZGl0b3JSZXNpemV9CiAgICAgICAgICA+PC9kaXY+CgogICAgICAgICAgPGRpdiBjbGFzcz0iZGV0YWlsLXBhbmVsIj4KICAgICAgICAgICAgPHRzdmlldy1tb25nby1kb2N1bWVudAogICAgICAgICAgICAgIC5kYXRhYmFzZU5hbWU9JHt0aGlzLmRhdGFiYXNlTmFtZX0KICAgICAgICAgICAgICAuY29sbGVjdGlvbk5hbWU9JHt0aGlzLmNvbGxlY3Rpb25OYW1lfQogICAgICAgICAgICAgIC5kb2N1bWVudElkPSR7dGhpcy5zZWxlY3RlZERvY3VtZW50SWR9CiAgICAgICAgICAgID48L3Rzdmlldy1tb25nby1kb2N1bWVudD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQp9OwpfaW5pdDYgPSBfX2RlY29yYXRvclN0YXJ0KF9hOSk7Cl9kYXRhYmFzZU5hbWUgPSBuZXcgV2Vha01hcCgpOwpfY29sbGVjdGlvbk5hbWUgPSBuZXcgV2Vha01hcCgpOwpfYWN0aXZlVGFiID0gbmV3IFdlYWtNYXAoKTsKX3NlbGVjdGVkRG9jdW1lbnRJZCA9IG5ldyBXZWFrTWFwKCk7Cl9zdGF0cyA9IG5ldyBXZWFrTWFwKCk7Cl9lZGl0b3JXaWR0aCA9IG5ldyBXZWFrTWFwKCk7Cl9pc1Jlc2l6aW5nRWRpdG9yID0gbmV3IFdlYWtNYXAoKTsKX3JlY2VudENoYW5nZUNvdW50MiA9IG5ldyBXZWFrTWFwKCk7Cl9pc1N0cmVhbUNvbm5lY3RlZDIgPSBuZXcgV2Vha01hcCgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDYsIDQsICJkYXRhYmFzZU5hbWUiLCBfZGF0YWJhc2VOYW1lX2RlYywgVHN2aWV3TW9uZ29Ccm93c2VyLCBfZGF0YWJhc2VOYW1lKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ2LCA0LCAiY29sbGVjdGlvbk5hbWUiLCBfY29sbGVjdGlvbk5hbWVfZGVjLCBUc3ZpZXdNb25nb0Jyb3dzZXIsIF9jb2xsZWN0aW9uTmFtZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NiwgNCwgImFjdGl2ZVRhYiIsIF9hY3RpdmVUYWJfZGVjLCBUc3ZpZXdNb25nb0Jyb3dzZXIsIF9hY3RpdmVUYWIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDYsIDQsICJzZWxlY3RlZERvY3VtZW50SWQiLCBfc2VsZWN0ZWREb2N1bWVudElkX2RlYywgVHN2aWV3TW9uZ29Ccm93c2VyLCBfc2VsZWN0ZWREb2N1bWVudElkKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ2LCA0LCAic3RhdHMiLCBfc3RhdHNfZGVjLCBUc3ZpZXdNb25nb0Jyb3dzZXIsIF9zdGF0cyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NiwgNCwgImVkaXRvcldpZHRoIiwgX2VkaXRvcldpZHRoX2RlYywgVHN2aWV3TW9uZ29Ccm93c2VyLCBfZWRpdG9yV2lkdGgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDYsIDQsICJpc1Jlc2l6aW5nRWRpdG9yIiwgX2lzUmVzaXppbmdFZGl0b3JfZGVjLCBUc3ZpZXdNb25nb0Jyb3dzZXIsIF9pc1Jlc2l6aW5nRWRpdG9yKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ2LCA0LCAicmVjZW50Q2hhbmdlQ291bnQiLCBfcmVjZW50Q2hhbmdlQ291bnRfZGVjMiwgVHN2aWV3TW9uZ29Ccm93c2VyLCBfcmVjZW50Q2hhbmdlQ291bnQyKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ2LCA0LCAiaXNTdHJlYW1Db25uZWN0ZWQiLCBfaXNTdHJlYW1Db25uZWN0ZWRfZGVjMiwgVHN2aWV3TW9uZ29Ccm93c2VyLCBfaXNTdHJlYW1Db25uZWN0ZWQyKTsKVHN2aWV3TW9uZ29Ccm93c2VyID0gX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ2LCAwLCAiVHN2aWV3TW9uZ29Ccm93c2VyIiwgX1Rzdmlld01vbmdvQnJvd3Nlcl9kZWNvcmF0b3JzLCBUc3ZpZXdNb25nb0Jyb3dzZXIpOwpfX3B1YmxpY0ZpZWxkKFRzdmlld01vbmdvQnJvd3NlciwgInN0eWxlcyIsIFsKICBjc3NNYW5hZ2VyOC5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczhgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5icm93c2VyLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24taW5mbyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTZweDsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAuY29sbGVjdGlvbi1zdGF0cyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CgogICAgICAuc3RhdC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC50YWJzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAudGFiIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwogICAgICB9CgogICAgICAudGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICB9CgogICAgICAudGFiLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDRweCB2YXIoLS1lZGl0b3Itd2lkdGgsIDQwMHB4KTsKICAgICAgICBnYXA6IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1kaXZpZGVyIHsKICAgICAgICB3aWR0aDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtZGl2aWRlcjpob3ZlciwKICAgICAgLnJlc2l6ZS1kaXZpZGVyLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogICAgICB9CgogICAgICAubWFpbi1wYW5lbCB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgfQoKICAgICAgLmRldGFpbC1wYW5lbCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMnB4OwogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogMTIwMHB4KSB7CiAgICAgICAgLmNvbnRlbnQgewogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgfQoKICAgICAgICAuZGV0YWlsLXBhbmVsLAogICAgICAgIC5yZXNpemUtZGl2aWRlciB7CiAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmNoYW5nZS1pbmRpY2F0b3IgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzQsIDE5NywgOTQsIDAuMik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogIzRhZGU4MDsKICAgICAgfQoKICAgICAgLmNoYW5nZS1pbmRpY2F0b3IucHVsc2UgewogICAgICAgIGFuaW1hdGlvbjogcHVsc2UtZ3JlZW4gMXMgZWFzZS1pbi1vdXQ7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgcHVsc2UtZ3JlZW4gewogICAgICAgIDAlIHsgYmFja2dyb3VuZDogcmdiYSgzNCwgMTk3LCA5NCwgMC40KTsgfQogICAgICAgIDEwMCUgeyBiYWNrZ3JvdW5kOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjIpOyB9CiAgICAgIH0KCiAgICAgIC5zdHJlYW0tc3RhdHVzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CgogICAgICAuc3RyZWFtLWRvdCB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogIzg4ODsKICAgICAgfQoKICAgICAgLnN0cmVhbS1kb3QuY29ubmVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMjJjNTVlOwogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDEsIFRzdmlld01vbmdvQnJvd3Nlcik7CgovLyB0c193ZWIvZWxlbWVudHMvdHN2aWV3LW1vbmdvLWNvbGxlY3Rpb25zLnRzCnZhciBfbG9hZGluZ19kZWM0LCBfY29sbGVjdGlvbnNfZGVjLCBfc2VsZWN0ZWRDb2xsZWN0aW9uX2RlYzIsIF9kYXRhYmFzZU5hbWVfZGVjMiwgX2ExMCwgX1Rzdmlld01vbmdvQ29sbGVjdGlvbnNfZGVjb3JhdG9ycywgX2luaXQ3LCBfZGF0YWJhc2VOYW1lMiwgX3NlbGVjdGVkQ29sbGVjdGlvbjIsIF9jb2xsZWN0aW9ucywgX2xvYWRpbmc0Owp2YXIgeyBodG1sOiBodG1sMTQsIGNzczogY3NzOSwgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjksIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQ4LCBwcm9wZXJ0eTogcHJvcGVydHk3LCBzdGF0ZTogc3RhdGU4LCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQ5IH0gPSBwbHVnaW5zX2V4cG9ydHM1Owp2YXIgeyBEZWVzQ29udGV4dG1lbnU6IERlZXNDb250ZXh0bWVudTUgfSA9IGRpc3RfdHNfd2ViX2V4cG9ydHMyOwpfVHN2aWV3TW9uZ29Db2xsZWN0aW9uc19kZWNvcmF0b3JzID0gW2N1c3RvbUVsZW1lbnQ4KCJ0c3ZpZXctbW9uZ28tY29sbGVjdGlvbnMiKV07CnZhciBUc3ZpZXdNb25nb0NvbGxlY3Rpb25zID0gY2xhc3MgZXh0ZW5kcyAoX2ExMCA9IERlZXNFbGVtZW50OSwgX2RhdGFiYXNlTmFtZV9kZWMyID0gW3Byb3BlcnR5Nyh7IHR5cGU6IFN0cmluZyB9KV0sIF9zZWxlY3RlZENvbGxlY3Rpb25fZGVjMiA9IFtwcm9wZXJ0eTcoeyB0eXBlOiBTdHJpbmcgfSldLCBfY29sbGVjdGlvbnNfZGVjID0gW3N0YXRlOCgpXSwgX2xvYWRpbmdfZGVjNCA9IFtzdGF0ZTgoKV0sIF9hMTApIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RhdGFiYXNlTmFtZTIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NywgOCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ3LCAxMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3NlbGVjdGVkQ29sbGVjdGlvbjIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NywgMTIsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NywgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jb2xsZWN0aW9ucywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ3LCAxNiwgdGhpcywgW10pKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ3LCAxOSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2xvYWRpbmc0LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDcsIDIwLCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDcsIDIzLCB0aGlzKTsKICB9CiAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgYXdhaXQgdGhpcy5sb2FkQ29sbGVjdGlvbnMoKTsKICB9CiAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiZGF0YWJhc2VOYW1lIikpIHsKICAgICAgdGhpcy5sb2FkQ29sbGVjdGlvbnMoKTsKICAgIH0KICB9CiAgYXN5bmMgbG9hZENvbGxlY3Rpb25zKCkgewogICAgaWYgKCF0aGlzLmRhdGFiYXNlTmFtZSkgcmV0dXJuOwogICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgIHRyeSB7CiAgICAgIHRoaXMuY29sbGVjdGlvbnMgPSBhd2FpdCBhcGlTZXJ2aWNlLmxpc3RDb2xsZWN0aW9ucyh0aGlzLmRhdGFiYXNlTmFtZSk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBjb2xsZWN0aW9uczoiLCBlcnIpOwogICAgICB0aGlzLmNvbGxlY3Rpb25zID0gW107CiAgICB9CiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICB9CiAgc2VsZWN0Q29sbGVjdGlvbihuYW1lKSB7CiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoCiAgICAgIG5ldyBDdXN0b21FdmVudCgiY29sbGVjdGlvbi1zZWxlY3RlZCIsIHsKICAgICAgICBkZXRhaWw6IG5hbWUsCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KQogICAgKTsKICB9CiAgYXN5bmMgZGVsZXRlQ29sbGVjdGlvbihuYW1lKSB7CiAgICBpZiAoIWNvbmZpcm0oYERlbGV0ZSBjb2xsZWN0aW9uICIke25hbWV9Ij8gVGhpcyB3aWxsIGRlbGV0ZSBhbGwgZG9jdW1lbnRzLmApKSByZXR1cm47CiAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXBpU2VydmljZS5kcm9wQ29sbGVjdGlvbih0aGlzLmRhdGFiYXNlTmFtZSwgbmFtZSk7CiAgICBpZiAoc3VjY2VzcykgewogICAgICB0aGlzLmNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9ucy5maWx0ZXIoKGMxMSkgPT4gYzExLm5hbWUgIT09IG5hbWUpOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoCiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCJjb2xsZWN0aW9uLWRlbGV0ZWQiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgZGF0YWJhc2VOYW1lOiB0aGlzLmRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWU6IG5hbWUgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pCiAgICAgICk7CiAgICB9CiAgfQogIGhhbmRsZUNvbGxlY3Rpb25Db250ZXh0TWVudShldmVudCwgY29sbGVjdGlvbikgewogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIERlZXNDb250ZXh0bWVudTUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIFsKICAgICAgewogICAgICAgIG5hbWU6ICJWaWV3IERvY3VtZW50cyIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVRleHQiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgdGhpcy5zZWxlY3RDb2xsZWN0aW9uKGNvbGxlY3Rpb24ubmFtZSk7CiAgICAgICAgfQogICAgICB9LAogICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJEZWxldGUgQ29sbGVjdGlvbiIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2gyIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlQ29sbGVjdGlvbihjb2xsZWN0aW9uLm5hbWUpOwogICAgICAgIH0KICAgICAgfQogICAgXSk7CiAgfQogIGFzeW5jIHJlZnJlc2goKSB7CiAgICBhd2FpdCB0aGlzLmxvYWRDb2xsZWN0aW9ucygpOwogIH0KICBzZWxlY3RPdmVydmlldygpIHsKICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgbmV3IEN1c3RvbUV2ZW50KCJjb2xsZWN0aW9uLXNlbGVjdGVkIiwgewogICAgICAgIGRldGFpbDogIl9fb3ZlcnZpZXdfXyIsCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KQogICAgKTsKICB9CiAgcmVuZGVyKCkgewogICAgaWYgKHRoaXMubG9hZGluZykgewogICAgICByZXR1cm4gaHRtbDE0YDxkaXYgY2xhc3M9ImxvYWRpbmctc3RhdGUiPkxvYWRpbmcgY29sbGVjdGlvbnMuLi48L2Rpdj5gOwogICAgfQogICAgcmV0dXJuIGh0bWwxNGAKICAgICAgPGRpdiBjbGFzcz0iY29sbGVjdGlvbnMtbGlzdCI+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9Im92ZXJ2aWV3LWl0ZW0gJHt0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbiA9PT0gIl9fb3ZlcnZpZXdfXyIgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZWxlY3RPdmVydmlldygpfQogICAgICAgID4KICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj4KICAgICAgICAgICAgPHJlY3QgeD0iMyIgeT0iMyIgd2lkdGg9IjciIGhlaWdodD0iNyI+PC9yZWN0PgogICAgICAgICAgICA8cmVjdCB4PSIxNCIgeT0iMyIgd2lkdGg9IjciIGhlaWdodD0iNyI+PC9yZWN0PgogICAgICAgICAgICA8cmVjdCB4PSIxNCIgeT0iMTQiIHdpZHRoPSI3IiBoZWlnaHQ9IjciPjwvcmVjdD4KICAgICAgICAgICAgPHJlY3QgeD0iMyIgeT0iMTQiIHdpZHRoPSI3IiBoZWlnaHQ9IjciPjwvcmVjdD4KICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgT3ZlcnZpZXcKICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMuY29sbGVjdGlvbnMubGVuZ3RoID09PSAwID8gaHRtbDE0YDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj5ObyBjb2xsZWN0aW9uczwvZGl2PmAgOiB0aGlzLmNvbGxlY3Rpb25zLm1hcCgKICAgICAgKGNvbGwpID0+IGh0bWwxNGAKICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9ImNvbGxlY3Rpb24taXRlbSAke3RoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uID09PSBjb2xsLm5hbWUgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNlbGVjdENvbGxlY3Rpb24oY29sbC5uYW1lKX0KICAgICAgICAgICAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVDb2xsZWN0aW9uQ29udGV4dE1lbnUoZTExLCBjb2xsKX0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxlY3Rpb24tbmFtZSI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iY29sbGVjdGlvbi1pY29uIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTIyIDE5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg1bDIgM2g5YTIgMiAwIDAgMSAyIDJ6Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgJHtjb2xsLm5hbWV9CiAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgJHtjb2xsLmNvdW50ICE9PSB2b2lkIDAgPyBodG1sMTRgPHNwYW4gY2xhc3M9ImNvbGxlY3Rpb24tY291bnQiPiR7Zm9ybWF0Q291bnQoY29sbC5jb3VudCl9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGAKICAgICl9CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07Cl9pbml0NyA9IF9fZGVjb3JhdG9yU3RhcnQoX2ExMCk7Cl9kYXRhYmFzZU5hbWUyID0gbmV3IFdlYWtNYXAoKTsKX3NlbGVjdGVkQ29sbGVjdGlvbjIgPSBuZXcgV2Vha01hcCgpOwpfY29sbGVjdGlvbnMgPSBuZXcgV2Vha01hcCgpOwpfbG9hZGluZzQgPSBuZXcgV2Vha01hcCgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDcsIDQsICJkYXRhYmFzZU5hbWUiLCBfZGF0YWJhc2VOYW1lX2RlYzIsIFRzdmlld01vbmdvQ29sbGVjdGlvbnMsIF9kYXRhYmFzZU5hbWUyKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ3LCA0LCAic2VsZWN0ZWRDb2xsZWN0aW9uIiwgX3NlbGVjdGVkQ29sbGVjdGlvbl9kZWMyLCBUc3ZpZXdNb25nb0NvbGxlY3Rpb25zLCBfc2VsZWN0ZWRDb2xsZWN0aW9uMik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NywgNCwgImNvbGxlY3Rpb25zIiwgX2NvbGxlY3Rpb25zX2RlYywgVHN2aWV3TW9uZ29Db2xsZWN0aW9ucywgX2NvbGxlY3Rpb25zKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ3LCA0LCAibG9hZGluZyIsIF9sb2FkaW5nX2RlYzQsIFRzdmlld01vbmdvQ29sbGVjdGlvbnMsIF9sb2FkaW5nNCk7ClRzdmlld01vbmdvQ29sbGVjdGlvbnMgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDcsIDAsICJUc3ZpZXdNb25nb0NvbGxlY3Rpb25zIiwgX1Rzdmlld01vbmdvQ29sbGVjdGlvbnNfZGVjb3JhdG9ycywgVHN2aWV3TW9uZ29Db2xsZWN0aW9ucyk7Cl9fcHVibGljRmllbGQoVHN2aWV3TW9uZ29Db2xsZWN0aW9ucywgInN0eWxlcyIsIFsKICBjc3NNYW5hZ2VyOS5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb25zLWxpc3QgewogICAgICAgIHBhZGRpbmctbGVmdDogMTJweDsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24taXRlbSB7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgIH0KCiAgICAgIC5jb2xsZWN0aW9uLWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICAgIH0KCiAgICAgIC5jb2xsZWN0aW9uLWl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5jb2xsZWN0aW9uLW5hbWUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24taWNvbiB7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CgogICAgICAuY29sbGVjdGlvbi1jb3VudCB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5sb2FkaW5nLXN0YXRlIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLm92ZXJ2aWV3LWl0ZW0gewogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgICAgY29sb3I6ICNhNWQ2YTc7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICAub3ZlcnZpZXctaXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgICAgfQoKICAgICAgLm92ZXJ2aWV3LWl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTY1LCAyMTQsIDE2NywgMC4xNSk7CiAgICAgICAgY29sb3I6ICNhNWQ2YTc7CiAgICAgIH0KCiAgICAgIC5vdmVydmlldy1pdGVtIHN2ZyB7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdDcsIDEsIFRzdmlld01vbmdvQ29sbGVjdGlvbnMpOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1tb25nby1kb2N1bWVudHMudHMKdmFyIF9zZWxlY3RlZElkX2RlYywgX2ZpbHRlclRleHRfZGVjMiwgX2xvYWRpbmdfZGVjNSwgX3BhZ2VTaXplX2RlYywgX3BhZ2VfZGVjLCBfdG90YWxfZGVjLCBfZG9jdW1lbnRzX2RlYywgX2NvbGxlY3Rpb25OYW1lX2RlYzIsIF9kYXRhYmFzZU5hbWVfZGVjMywgX2ExMSwgX1Rzdmlld01vbmdvRG9jdW1lbnRzX2RlY29yYXRvcnMsIF9pbml0OCwgX2RhdGFiYXNlTmFtZTMsIF9jb2xsZWN0aW9uTmFtZTIsIF9kb2N1bWVudHMsIF90b3RhbCwgX3BhZ2UsIF9wYWdlU2l6ZSwgX2xvYWRpbmc1LCBfZmlsdGVyVGV4dDIsIF9zZWxlY3RlZElkOwp2YXIgeyBodG1sOiBodG1sMTUsIGNzczogY3NzMTAsIGNzc01hbmFnZXI6IGNzc01hbmFnZXIxMCwgY3VzdG9tRWxlbWVudDogY3VzdG9tRWxlbWVudDksIHByb3BlcnR5OiBwcm9wZXJ0eTgsIHN0YXRlOiBzdGF0ZTksIERlZXNFbGVtZW50OiBEZWVzRWxlbWVudDEwIH0gPSBwbHVnaW5zX2V4cG9ydHM1Owp2YXIgeyBEZWVzQ29udGV4dG1lbnU6IERlZXNDb250ZXh0bWVudTYgfSA9IGRpc3RfdHNfd2ViX2V4cG9ydHMyOwpfVHN2aWV3TW9uZ29Eb2N1bWVudHNfZGVjb3JhdG9ycyA9IFtjdXN0b21FbGVtZW50OSgidHN2aWV3LW1vbmdvLWRvY3VtZW50cyIpXTsKdmFyIFRzdmlld01vbmdvRG9jdW1lbnRzID0gY2xhc3MgZXh0ZW5kcyAoX2ExMSA9IERlZXNFbGVtZW50MTAsIF9kYXRhYmFzZU5hbWVfZGVjMyA9IFtwcm9wZXJ0eTgoeyB0eXBlOiBTdHJpbmcgfSldLCBfY29sbGVjdGlvbk5hbWVfZGVjMiA9IFtwcm9wZXJ0eTgoeyB0eXBlOiBTdHJpbmcgfSldLCBfZG9jdW1lbnRzX2RlYyA9IFtzdGF0ZTkoKV0sIF90b3RhbF9kZWMgPSBbc3RhdGU5KCldLCBfcGFnZV9kZWMgPSBbc3RhdGU5KCldLCBfcGFnZVNpemVfZGVjID0gW3N0YXRlOSgpXSwgX2xvYWRpbmdfZGVjNSA9IFtzdGF0ZTkoKV0sIF9maWx0ZXJUZXh0X2RlYzIgPSBbc3RhdGU5KCldLCBfc2VsZWN0ZWRJZF9kZWMgPSBbc3RhdGU5KCldLCBfYTExKSB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9kYXRhYmFzZU5hbWUzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jb2xsZWN0aW9uTmFtZTIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMTIsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9kb2N1bWVudHMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMTYsIHRoaXMsIFtdKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF90b3RhbCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAyMCwgdGhpcywgMCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDIzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfcGFnZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAyNCwgdGhpcywgMSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDI3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfcGFnZVNpemUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMjgsIHRoaXMsIDUwKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMzEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9sb2FkaW5nNSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAzMiwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAzNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2ZpbHRlclRleHQyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDM2LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDM5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2VsZWN0ZWRJZCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCA0MCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCA0MywgdGhpcyk7CiAgfQogIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIGF3YWl0IHRoaXMubG9hZERvY3VtZW50cygpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJkYXRhYmFzZU5hbWUiKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoImNvbGxlY3Rpb25OYW1lIikpIHsKICAgICAgdGhpcy5wYWdlID0gMTsKICAgICAgdGhpcy5sb2FkRG9jdW1lbnRzKCk7CiAgICB9CiAgfQogIGFzeW5jIGxvYWREb2N1bWVudHMoKSB7CiAgICBpZiAoIXRoaXMuZGF0YWJhc2VOYW1lIHx8ICF0aGlzLmNvbGxlY3Rpb25OYW1lKSByZXR1cm47CiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgdHJ5IHsKICAgICAgbGV0IGZpbHRlcjIgPSB7fTsKICAgICAgaWYgKHRoaXMuZmlsdGVyVGV4dC50cmltKCkpIHsKICAgICAgICB0cnkgewogICAgICAgICAgZmlsdGVyMiA9IEpTT04ucGFyc2UodGhpcy5maWx0ZXJUZXh0KTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBpU2VydmljZS5maW5kRG9jdW1lbnRzKAogICAgICAgIHRoaXMuZGF0YWJhc2VOYW1lLAogICAgICAgIHRoaXMuY29sbGVjdGlvbk5hbWUsCiAgICAgICAgewogICAgICAgICAgZmlsdGVyOiBmaWx0ZXIyLAogICAgICAgICAgc2tpcDogKHRoaXMucGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSwKICAgICAgICAgIGxpbWl0OiB0aGlzLnBhZ2VTaXplCiAgICAgICAgfQogICAgICApOwogICAgICB0aGlzLmRvY3VtZW50cyA9IHJlc3VsdC5kb2N1bWVudHM7CiAgICAgIHRoaXMudG90YWwgPSByZXN1bHQudG90YWw7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBkb2N1bWVudHM6IiwgZXJyKTsKICAgICAgdGhpcy5kb2N1bWVudHMgPSBbXTsKICAgICAgdGhpcy50b3RhbCA9IDA7CiAgICB9CiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICB9CiAgLyoqCiAgICogUHVibGljIG1ldGhvZCB0byByZWZyZXNoIGRvY3VtZW50cyAoY2FsbGVkIGJ5IHBhcmVudCBvbiBjaGFuZ2UgZXZlbnRzKQogICAqLwogIGFzeW5jIHJlZnJlc2goKSB7CiAgICBhd2FpdCB0aGlzLmxvYWREb2N1bWVudHMoKTsKICB9CiAgaGFuZGxlRmlsdGVySW5wdXQoZTExKSB7CiAgICB0aGlzLmZpbHRlclRleHQgPSBlMTEudGFyZ2V0LnZhbHVlOwogIH0KICBoYW5kbGVGaWx0ZXJTdWJtaXQoKSB7CiAgICB0aGlzLnBhZ2UgPSAxOwogICAgdGhpcy5sb2FkRG9jdW1lbnRzKCk7CiAgfQogIGhhbmRsZUtleVByZXNzKGUxMSkgewogICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJTdWJtaXQoKTsKICAgIH0KICB9CiAgc2VsZWN0RG9jdW1lbnQoZG9jKSB7CiAgICBjb25zdCBpZCA9IGRvYy5faWQgfHwgIiI7CiAgICB0aGlzLnNlbGVjdGVkSWQgPSBpZDsKICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgbmV3IEN1c3RvbUV2ZW50KCJkb2N1bWVudC1zZWxlY3RlZCIsIHsKICAgICAgICBkZXRhaWw6IHsgZG9jdW1lbnRJZDogaWQsIGRvY3VtZW50OiBkb2MgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pCiAgICApOwogIH0KICBnb1RvUGFnZShwYWdlTnVtKSB7CiAgICB0aGlzLnBhZ2UgPSBwYWdlTnVtOwogICAgdGhpcy5sb2FkRG9jdW1lbnRzKCk7CiAgfQogIGdldERvY3VtZW50UHJldmlldyhkb2MpIHsKICAgIGNvbnN0IHByZXZpZXcgPSB7fTsKICAgIGNvbnN0IGtleXMyID0gT2JqZWN0LmtleXMoZG9jKS5maWx0ZXIoKGs0KSA9PiBrNCAhPT0gIl9pZCIpOwogICAgZm9yIChjb25zdCBrZXkyIG9mIGtleXMyLnNsaWNlKDAsIDMpKSB7CiAgICAgIHByZXZpZXdba2V5Ml0gPSBkb2Nba2V5Ml07CiAgICB9CiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocHJldmlldyk7CiAgfQogIGdldCB0b3RhbFBhZ2VzKCkgewogICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gdGhpcy5wYWdlU2l6ZSk7CiAgfQogIGFzeW5jIGhhbmRsZUluc2VydE5ldygpIHsKICAgIGNvbnN0IG5ld0RvYyA9IHsKICAgICAgLy8gRGVmYXVsdCBlbXB0eSBkb2N1bWVudAogICAgICBjcmVhdGVkQXQ6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKQogICAgfTsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGluc2VydGVkSWQgPSBhd2FpdCBhcGlTZXJ2aWNlLmluc2VydERvY3VtZW50KAogICAgICAgIHRoaXMuZGF0YWJhc2VOYW1lLAogICAgICAgIHRoaXMuY29sbGVjdGlvbk5hbWUsCiAgICAgICAgbmV3RG9jCiAgICAgICk7CiAgICAgIGF3YWl0IHRoaXMubG9hZERvY3VtZW50cygpOwogICAgICB0aGlzLnNlbGVjdGVkSWQgPSBpbnNlcnRlZElkOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoCiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCJkb2N1bWVudC1zZWxlY3RlZCIsIHsKICAgICAgICAgIGRldGFpbDogeyBkb2N1bWVudElkOiBpbnNlcnRlZElkIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KQogICAgICApOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGluc2VydGluZyBkb2N1bWVudDoiLCBlcnIpOwogICAgfQogIH0KICBoYW5kbGVEb2N1bWVudENvbnRleHRNZW51KGV2ZW50LCBkb2MpIHsKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICBjb25zdCBkb2NJZCA9IGRvYy5faWQ7CiAgICBEZWVzQ29udGV4dG1lbnU2Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBbCiAgICAgIHsKICAgICAgICBuYW1lOiAiVmlldy9FZGl0IiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTplZGl0IiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0RG9jdW1lbnQoZG9jKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiQ29weSBhcyBKU09OIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjb3B5IiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3RyaW5naWZ5KGRvYywgbnVsbCwgMikpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJEdXBsaWNhdGUiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmNvcHlQbHVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHsgX2lkLCAuLi5kb2NXaXRob3V0SWQgfSA9IGRvYzsKICAgICAgICAgIGNvbnN0IG5ld0RvYyA9IHsgLi4uZG9jV2l0aG91dElkLCBjcmVhdGVkQXQ6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSB9OwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgaW5zZXJ0ZWRJZCA9IGF3YWl0IGFwaVNlcnZpY2UuaW5zZXJ0RG9jdW1lbnQoCiAgICAgICAgICAgICAgdGhpcy5kYXRhYmFzZU5hbWUsCiAgICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uTmFtZSwKICAgICAgICAgICAgICBuZXdEb2MKICAgICAgICAgICAgKTsKICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkRG9jdW1lbnRzKCk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZCA9IGluc2VydGVkSWQ7CiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoImRvY3VtZW50LXNlbGVjdGVkIiwgewogICAgICAgICAgICAgICAgZGV0YWlsOiB7IGRvY3VtZW50SWQ6IGluc2VydGVkSWQgfSwKICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICk7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgZHVwbGljYXRpbmcgZG9jdW1lbnQ6IiwgZXJyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2gyIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChjb25maXJtKGBEZWxldGUgZG9jdW1lbnQgIiR7ZG9jSWR9Ij9gKSkgewogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGlTZXJ2aWNlLmRlbGV0ZURvY3VtZW50KAogICAgICAgICAgICAgIHRoaXMuZGF0YWJhc2VOYW1lLAogICAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbk5hbWUsCiAgICAgICAgICAgICAgZG9jSWQKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkRG9jdW1lbnRzKCk7CiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJZCA9PT0gZG9jSWQpIHsKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZCA9ICIiOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXSk7CiAgfQogIHJlbmRlcigpIHsKICAgIGNvbnN0IHN0YXJ0UmVjb3JkID0gKHRoaXMucGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSArIDE7CiAgICBjb25zdCBlbmRSZWNvcmQgPSBNYXRoLm1pbih0aGlzLnBhZ2UgKiB0aGlzLnBhZ2VTaXplLCB0aGlzLnRvdGFsKTsKICAgIHJldHVybiBodG1sMTVgCiAgICAgIDxkaXYgY2xhc3M9ImRvY3VtZW50cy1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImZpbHRlci1iYXIiPgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIGNsYXNzPSJmaWx0ZXItaW5wdXQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSdGaWx0ZXI6IHsiZmllbGQiOiAidmFsdWUifScKICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5maWx0ZXJUZXh0fQogICAgICAgICAgICBAaW5wdXQ9JHt0aGlzLmhhbmRsZUZpbHRlcklucHV0fQogICAgICAgICAgICBAa2V5cHJlc3M9JHt0aGlzLmhhbmRsZUtleVByZXNzfQogICAgICAgICAgLz4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImZpbHRlci1idG4iIEBjbGljaz0ke3RoaXMuaGFuZGxlRmlsdGVyU3VibWl0fT5BcHBseTwvYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb25zLWJhciI+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUluc2VydE5ld30+KyBJbnNlcnQgRG9jdW1lbnQ8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnRzLWxpc3QiPgogICAgICAgICAgJHt0aGlzLmxvYWRpbmcgPyBodG1sMTVgPGRpdiBjbGFzcz0ibG9hZGluZy1zdGF0ZSI+TG9hZGluZy4uLjwvZGl2PmAgOiB0aGlzLmRvY3VtZW50cy5sZW5ndGggPT09IDAgPyBodG1sMTVgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPk5vIGRvY3VtZW50cyBmb3VuZDwvZGl2PmAgOiB0aGlzLmRvY3VtZW50cy5tYXAoCiAgICAgIChkb2MpID0+IGh0bWwxNWAKICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZG9jdW1lbnQtcm93ICR7dGhpcy5zZWxlY3RlZElkID09PSBkb2MuX2lkID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2VsZWN0RG9jdW1lbnQoZG9jKX0KICAgICAgICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhlMTEpID0+IHRoaXMuaGFuZGxlRG9jdW1lbnRDb250ZXh0TWVudShlMTEsIGRvYyl9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnQtaWQiPl9pZDogJHtkb2MuX2lkfTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnQtcHJldmlldyI+JHt0aGlzLmdldERvY3VtZW50UHJldmlldyhkb2MpfTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICBgCiAgICApfQogICAgICAgIDwvZGl2PgoKICAgICAgICAke3RoaXMudG90YWwgPiAwID8gaHRtbDE1YAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2luYXRpb24iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFnaW5hdGlvbi1pbmZvIj4KICAgICAgICAgICAgICAgICAgU2hvd2luZyAke3N0YXJ0UmVjb3JkfS0ke2VuZFJlY29yZH0gb2YgJHt0aGlzLnRvdGFsfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdpbmF0aW9uLWNvbnRyb2xzIj4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJwYWdlLWJ0biIKICAgICAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLnBhZ2UgPD0gMX0KICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmdvVG9QYWdlKHRoaXMucGFnZSAtIDEpfQogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgUHJldmlvdXMKICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgICBjbGFzcz0icGFnZS1idG4iCiAgICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5wYWdlID49IHRoaXMudG90YWxQYWdlc30KICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmdvVG9QYWdlKHRoaXMucGFnZSArIDEpfQogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgTmV4dAogICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgIDogIiJ9CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07Cl9pbml0OCA9IF9fZGVjb3JhdG9yU3RhcnQoX2ExMSk7Cl9kYXRhYmFzZU5hbWUzID0gbmV3IFdlYWtNYXAoKTsKX2NvbGxlY3Rpb25OYW1lMiA9IG5ldyBXZWFrTWFwKCk7Cl9kb2N1bWVudHMgPSBuZXcgV2Vha01hcCgpOwpfdG90YWwgPSBuZXcgV2Vha01hcCgpOwpfcGFnZSA9IG5ldyBXZWFrTWFwKCk7Cl9wYWdlU2l6ZSA9IG5ldyBXZWFrTWFwKCk7Cl9sb2FkaW5nNSA9IG5ldyBXZWFrTWFwKCk7Cl9maWx0ZXJUZXh0MiA9IG5ldyBXZWFrTWFwKCk7Cl9zZWxlY3RlZElkID0gbmV3IFdlYWtNYXAoKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ4LCA0LCAiZGF0YWJhc2VOYW1lIiwgX2RhdGFiYXNlTmFtZV9kZWMzLCBUc3ZpZXdNb25nb0RvY3VtZW50cywgX2RhdGFiYXNlTmFtZTMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDgsIDQsICJjb2xsZWN0aW9uTmFtZSIsIF9jb2xsZWN0aW9uTmFtZV9kZWMyLCBUc3ZpZXdNb25nb0RvY3VtZW50cywgX2NvbGxlY3Rpb25OYW1lMik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgImRvY3VtZW50cyIsIF9kb2N1bWVudHNfZGVjLCBUc3ZpZXdNb25nb0RvY3VtZW50cywgX2RvY3VtZW50cyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgInRvdGFsIiwgX3RvdGFsX2RlYywgVHN2aWV3TW9uZ29Eb2N1bWVudHMsIF90b3RhbCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgInBhZ2UiLCBfcGFnZV9kZWMsIFRzdmlld01vbmdvRG9jdW1lbnRzLCBfcGFnZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgInBhZ2VTaXplIiwgX3BhZ2VTaXplX2RlYywgVHN2aWV3TW9uZ29Eb2N1bWVudHMsIF9wYWdlU2l6ZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgImxvYWRpbmciLCBfbG9hZGluZ19kZWM1LCBUc3ZpZXdNb25nb0RvY3VtZW50cywgX2xvYWRpbmc1KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ4LCA0LCAiZmlsdGVyVGV4dCIsIF9maWx0ZXJUZXh0X2RlYzIsIFRzdmlld01vbmdvRG9jdW1lbnRzLCBfZmlsdGVyVGV4dDIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDgsIDQsICJzZWxlY3RlZElkIiwgX3NlbGVjdGVkSWRfZGVjLCBUc3ZpZXdNb25nb0RvY3VtZW50cywgX3NlbGVjdGVkSWQpOwpUc3ZpZXdNb25nb0RvY3VtZW50cyA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgMCwgIlRzdmlld01vbmdvRG9jdW1lbnRzIiwgX1Rzdmlld01vbmdvRG9jdW1lbnRzX2RlY29yYXRvcnMsIFRzdmlld01vbmdvRG9jdW1lbnRzKTsKX19wdWJsaWNGaWVsZChUc3ZpZXdNb25nb0RvY3VtZW50cywgInN0eWxlcyIsIFsKICBjc3NNYW5hZ2VyMTAuZGVmYXVsdFN0eWxlcywKICB0aGVtZVN0eWxlcywKICBjc3MxMGAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuZG9jdW1lbnRzLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmZpbHRlci1iYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzM7CiAgICAgIH0KCiAgICAgIC5maWx0ZXItaW5wdXQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0NDQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICB9CgogICAgICAuZmlsdGVyLWlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogIzQwNDA0MDsKICAgICAgfQoKICAgICAgLmZpbHRlci1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAuZmlsdGVyLWJ0biB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0MDQwNDA7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5maWx0ZXItYnRuOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogICAgICB9CgogICAgICAuZG9jdW1lbnRzLWxpc3QgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgIC5kb2N1bWVudC1yb3cgewogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzOwogICAgICB9CgogICAgICAuZG9jdW1lbnQtcm93OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICB9CgogICAgICAuZG9jdW1lbnQtcm93LnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7CiAgICAgIH0KCiAgICAgIC5kb2N1bWVudC1pZCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICAuZG9jdW1lbnQtcHJldmlldyB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnBhZ2luYXRpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgIzMzMzsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgIH0KCiAgICAgIC5wYWdpbmF0aW9uLWluZm8gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnBhZ2luYXRpb24tY29udHJvbHMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5wYWdlLWJ0biB7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQoKICAgICAgLnBhZ2UtYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsKICAgICAgICBib3JkZXItY29sb3I6ICM2NjY7CiAgICAgICAgY29sb3I6ICNhYWE7CiAgICAgIH0KCiAgICAgIC5wYWdlLWJ0bjpkaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLmxvYWRpbmctc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CgogICAgICAuYWN0aW9ucy1iYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4gewogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzQsIDE5NywgOTQsIDAuMik7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzIyYzU1ZTsKICAgICAgICBjb2xvcjogIzRhZGU4MDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG46aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzQsIDE5NywgOTQsIDAuMyk7CiAgICAgIH0KICAgIGAKXSk7Cl9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMSwgVHN2aWV3TW9uZ29Eb2N1bWVudHMpOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1tb25nby1kb2N1bWVudC50cwp2YXIgX2Vycm9yX2RlYzIsIF9oYXNDaGFuZ2VzX2RlYzIsIF9vcmlnaW5hbENvbnRlbnRfZGVjLCBfZWRpdGluZ19kZWMsIF9sb2FkaW5nX2RlYzYsIF9kb2N1bWVudF9kZWMsIF9kb2N1bWVudElkX2RlYywgX2NvbGxlY3Rpb25OYW1lX2RlYzMsIF9kYXRhYmFzZU5hbWVfZGVjNCwgX2ExMiwgX1Rzdmlld01vbmdvRG9jdW1lbnRfZGVjb3JhdG9ycywgX2luaXQ5LCBfZGF0YWJhc2VOYW1lNCwgX2NvbGxlY3Rpb25OYW1lMywgX2RvY3VtZW50SWQsIF9kb2N1bWVudCwgX2xvYWRpbmc2LCBfZWRpdGluZywgX29yaWdpbmFsQ29udGVudCwgX2hhc0NoYW5nZXMyLCBfZXJyb3IyOwp2YXIgeyBodG1sOiBodG1sMTYsIGNzczogY3NzMTEsIGNzc01hbmFnZXI6IGNzc01hbmFnZXIxMSwgY3VzdG9tRWxlbWVudDogY3VzdG9tRWxlbWVudDEwLCBwcm9wZXJ0eTogcHJvcGVydHk5LCBzdGF0ZTogc3RhdGUxMCwgRGVlc0VsZW1lbnQ6IERlZXNFbGVtZW50MTEgfSA9IHBsdWdpbnNfZXhwb3J0czU7Cl9Uc3ZpZXdNb25nb0RvY3VtZW50X2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDEwKCJ0c3ZpZXctbW9uZ28tZG9jdW1lbnQiKV07CnZhciBUc3ZpZXdNb25nb0RvY3VtZW50ID0gY2xhc3MgZXh0ZW5kcyAoX2ExMiA9IERlZXNFbGVtZW50MTEsIF9kYXRhYmFzZU5hbWVfZGVjNCA9IFtwcm9wZXJ0eTkoeyB0eXBlOiBTdHJpbmcgfSldLCBfY29sbGVjdGlvbk5hbWVfZGVjMyA9IFtwcm9wZXJ0eTkoeyB0eXBlOiBTdHJpbmcgfSldLCBfZG9jdW1lbnRJZF9kZWMgPSBbcHJvcGVydHk5KHsgdHlwZTogU3RyaW5nIH0pXSwgX2RvY3VtZW50X2RlYyA9IFtzdGF0ZTEwKCldLCBfbG9hZGluZ19kZWM2ID0gW3N0YXRlMTAoKV0sIF9lZGl0aW5nX2RlYyA9IFtzdGF0ZTEwKCldLCBfb3JpZ2luYWxDb250ZW50X2RlYyA9IFtzdGF0ZTEwKCldLCBfaGFzQ2hhbmdlc19kZWMyID0gW3N0YXRlMTAoKV0sIF9lcnJvcl9kZWMyID0gW3N0YXRlMTAoKV0sIF9hMTIpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RhdGFiYXNlTmFtZTQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgOCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAxMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NvbGxlY3Rpb25OYW1lMywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAxMiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAxNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RvY3VtZW50SWQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMTYsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9kb2N1bWVudCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAyMCwgdGhpcywgbnVsbCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDIzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbG9hZGluZzYsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMjQsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMjcsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9lZGl0aW5nLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDI4LCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDMxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfb3JpZ2luYWxDb250ZW50LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDMyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDM1LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfaGFzQ2hhbmdlczIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMzYsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMzksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9lcnJvcjIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgNDAsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgNDMsIHRoaXMpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJkb2N1bWVudElkIikpIHsKICAgICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7CiAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlOwogICAgICBpZiAodGhpcy5kb2N1bWVudElkKSB7CiAgICAgICAgdGhpcy5sb2FkRG9jdW1lbnQoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmRvY3VtZW50ID0gbnVsbDsKICAgICAgICB0aGlzLm9yaWdpbmFsQ29udGVudCA9ICIiOwogICAgICB9CiAgICB9CiAgfQogIGFzeW5jIGxvYWREb2N1bWVudCgpIHsKICAgIGlmICghdGhpcy5kb2N1bWVudElkIHx8ICF0aGlzLmRhdGFiYXNlTmFtZSB8fCAhdGhpcy5jb2xsZWN0aW9uTmFtZSkgcmV0dXJuOwogICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgIHRoaXMuZXJyb3IgPSAiIjsKICAgIHRyeSB7CiAgICAgIHRoaXMuZG9jdW1lbnQgPSBhd2FpdCBhcGlTZXJ2aWNlLmdldERvY3VtZW50KAogICAgICAgIHRoaXMuZGF0YWJhc2VOYW1lLAogICAgICAgIHRoaXMuY29sbGVjdGlvbk5hbWUsCiAgICAgICAgdGhpcy5kb2N1bWVudElkCiAgICAgICk7CiAgICAgIHRoaXMub3JpZ2luYWxDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5kb2N1bWVudCwgbnVsbCwgMik7CiAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGxvYWRpbmcgZG9jdW1lbnQ6IiwgZXJyKTsKICAgICAgdGhpcy5lcnJvciA9ICJGYWlsZWQgdG8gbG9hZCBkb2N1bWVudCI7CiAgICB9CiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICB9CiAgc3RhcnRFZGl0aW5nKCkgewogICAgdGhpcy5lZGl0aW5nID0gdHJ1ZTsKICB9CiAgY2FuY2VsRWRpdGluZygpIHsKICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlOwogICAgY29uc3QgY29kZUVkaXRvciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1jb2RlIik7CiAgICBpZiAoY29kZUVkaXRvcikgewogICAgICBjb2RlRWRpdG9yLnZhbHVlID0gdGhpcy5vcmlnaW5hbENvbnRlbnQ7CiAgICB9CiAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTsKICB9CiAgaGFuZGxlQ29udGVudENoYW5nZShlMTEpIHsKICAgIGNvbnN0IG5ld1ZhbHVlID0gZTExLmRldGFpbDsKICAgIHRoaXMuaGFzQ2hhbmdlcyA9IG5ld1ZhbHVlICE9PSB0aGlzLm9yaWdpbmFsQ29udGVudDsKICB9CiAgaGFuZGxlRGlzY2FyZCgpIHsKICAgIGNvbnN0IGNvZGVFZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtY29kZSIpOwogICAgaWYgKGNvZGVFZGl0b3IpIHsKICAgICAgY29kZUVkaXRvci52YWx1ZSA9IHRoaXMub3JpZ2luYWxDb250ZW50OwogICAgfQogICAgdGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7CiAgfQogIGFzeW5jIHNhdmVEb2N1bWVudCgpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGNvZGVFZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtY29kZSIpOwogICAgICBjb25zdCBjb250ZW50MyA9IGNvZGVFZGl0b3I/LnZhbHVlIHx8IHRoaXMub3JpZ2luYWxDb250ZW50OwogICAgICBjb25zdCB1cGRhdGVkRG9jID0gSlNPTi5wYXJzZShjb250ZW50Myk7CiAgICAgIGNvbnN0IHsgX2lkLCAuLi51cGRhdGVGaWVsZHMgfSA9IHVwZGF0ZWREb2M7CiAgICAgIGF3YWl0IGFwaVNlcnZpY2UudXBkYXRlRG9jdW1lbnQoCiAgICAgICAgdGhpcy5kYXRhYmFzZU5hbWUsCiAgICAgICAgdGhpcy5jb2xsZWN0aW9uTmFtZSwKICAgICAgICB0aGlzLmRvY3VtZW50SWQsCiAgICAgICAgdXBkYXRlRmllbGRzCiAgICAgICk7CiAgICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlOwogICAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTsKICAgICAgYXdhaXQgdGhpcy5sb2FkRG9jdW1lbnQoKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KAogICAgICAgIG5ldyBDdXN0b21FdmVudCgiZG9jdW1lbnQtdXBkYXRlZCIsIHsKICAgICAgICAgIGRldGFpbDogeyBkb2N1bWVudElkOiB0aGlzLmRvY3VtZW50SWQgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pCiAgICAgICk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3Igc2F2aW5nIGRvY3VtZW50OiIsIGVycik7CiAgICAgIHRoaXMuZXJyb3IgPSAiSW52YWxpZCBKU09OIG9yIHNhdmUgZmFpbGVkIjsKICAgIH0KICB9CiAgYXN5bmMgZGVsZXRlRG9jdW1lbnQoKSB7CiAgICBpZiAoIWNvbmZpcm0oIkRlbGV0ZSB0aGlzIGRvY3VtZW50PyIpKSByZXR1cm47CiAgICB0cnkgewogICAgICBhd2FpdCBhcGlTZXJ2aWNlLmRlbGV0ZURvY3VtZW50KAogICAgICAgIHRoaXMuZGF0YWJhc2VOYW1lLAogICAgICAgIHRoaXMuY29sbGVjdGlvbk5hbWUsCiAgICAgICAgdGhpcy5kb2N1bWVudElkCiAgICAgICk7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoImRvY3VtZW50LWRlbGV0ZWQiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgZG9jdW1lbnRJZDogdGhpcy5kb2N1bWVudElkIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KQogICAgICApOwogICAgICB0aGlzLmRvY3VtZW50ID0gbnVsbDsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBkZWxldGluZyBkb2N1bWVudDoiLCBlcnIpOwogICAgICB0aGlzLmVycm9yID0gIkRlbGV0ZSBmYWlsZWQiOwogICAgfQogIH0KICByZW5kZXIoKSB7CiAgICBpZiAoIXRoaXMuZG9jdW1lbnRJZCkgewogICAgICByZXR1cm4gaHRtbDE2YAogICAgICAgIDxkaXYgY2xhc3M9ImRvY3VtZW50LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjh6IiAvPgogICAgICAgICAgICAgIDxwb2x5bGluZSBwb2ludHM9IjE0IDIgMTQgOCAyMCA4IiAvPgogICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgPHA+U2VsZWN0IGEgZG9jdW1lbnQgdG8gdmlldzwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgfQogICAgaWYgKHRoaXMubG9hZGluZykgewogICAgICByZXR1cm4gaHRtbDE2YAogICAgICAgIDxkaXYgY2xhc3M9ImRvY3VtZW50LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXN0YXRlIj5Mb2FkaW5nLi4uPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAodGhpcy5lcnJvciAmJiAhdGhpcy5kb2N1bWVudCkgewogICAgICByZXR1cm4gaHRtbDE2YAogICAgICAgIDxkaXYgY2xhc3M9ImRvY3VtZW50LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJlcnJvci1zdGF0ZSI+JHt0aGlzLmVycm9yfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgfQogICAgcmV0dXJuIGh0bWwxNmAKICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnQtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImhlYWRlci10aXRsZSI+RG9jdW1lbnQ8L3NwYW4+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItYWN0aW9ucyI+CiAgICAgICAgICAgICR7dGhpcy5lZGl0aW5nID8gdGhpcy5oYXNDaGFuZ2VzID8gaHRtbDE2YAogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idG4iIEBjbGljaz0ke3RoaXMuaGFuZGxlRGlzY2FyZH0+RGlzY2FyZDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idG4gcHJpbWFyeSIgQGNsaWNrPSR7dGhpcy5zYXZlRG9jdW1lbnR9PlNhdmU8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgYCA6IGh0bWwxNmAKICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIiBAY2xpY2s9JHt0aGlzLmNhbmNlbEVkaXRpbmd9PkNhbmNlbDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICBgIDogaHRtbDE2YAogICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIiBAY2xpY2s9JHt0aGlzLnN0YXJ0RWRpdGluZ30+RWRpdDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIGRhbmdlciIgQGNsaWNrPSR7dGhpcy5kZWxldGVEb2N1bWVudH0+RGVsZXRlPC9idXR0b24+CiAgICAgICAgICAgICAgICBgfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtY29kZQogICAgICAgICAgICAudmFsdWU9JHt0aGlzLm9yaWdpbmFsQ29udGVudH0KICAgICAgICAgICAgLmxhbmd1YWdlPSR7Impzb24ifQogICAgICAgICAgICAuZGlzYWJsZWQ9JHshdGhpcy5lZGl0aW5nfQogICAgICAgICAgICBAY29udGVudC1jaGFuZ2U9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUNvbnRlbnRDaGFuZ2UoZTExKX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY29kZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KfTsKX2luaXQ5ID0gX19kZWNvcmF0b3JTdGFydChfYTEyKTsKX2RhdGFiYXNlTmFtZTQgPSBuZXcgV2Vha01hcCgpOwpfY29sbGVjdGlvbk5hbWUzID0gbmV3IFdlYWtNYXAoKTsKX2RvY3VtZW50SWQgPSBuZXcgV2Vha01hcCgpOwpfZG9jdW1lbnQgPSBuZXcgV2Vha01hcCgpOwpfbG9hZGluZzYgPSBuZXcgV2Vha01hcCgpOwpfZWRpdGluZyA9IG5ldyBXZWFrTWFwKCk7Cl9vcmlnaW5hbENvbnRlbnQgPSBuZXcgV2Vha01hcCgpOwpfaGFzQ2hhbmdlczIgPSBuZXcgV2Vha01hcCgpOwpfZXJyb3IyID0gbmV3IFdlYWtNYXAoKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ5LCA0LCAiZGF0YWJhc2VOYW1lIiwgX2RhdGFiYXNlTmFtZV9kZWM0LCBUc3ZpZXdNb25nb0RvY3VtZW50LCBfZGF0YWJhc2VOYW1lNCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OSwgNCwgImNvbGxlY3Rpb25OYW1lIiwgX2NvbGxlY3Rpb25OYW1lX2RlYzMsIFRzdmlld01vbmdvRG9jdW1lbnQsIF9jb2xsZWN0aW9uTmFtZTMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDksIDQsICJkb2N1bWVudElkIiwgX2RvY3VtZW50SWRfZGVjLCBUc3ZpZXdNb25nb0RvY3VtZW50LCBfZG9jdW1lbnRJZCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OSwgNCwgImRvY3VtZW50IiwgX2RvY3VtZW50X2RlYywgVHN2aWV3TW9uZ29Eb2N1bWVudCwgX2RvY3VtZW50KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ5LCA0LCAibG9hZGluZyIsIF9sb2FkaW5nX2RlYzYsIFRzdmlld01vbmdvRG9jdW1lbnQsIF9sb2FkaW5nNik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OSwgNCwgImVkaXRpbmciLCBfZWRpdGluZ19kZWMsIFRzdmlld01vbmdvRG9jdW1lbnQsIF9lZGl0aW5nKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ5LCA0LCAib3JpZ2luYWxDb250ZW50IiwgX29yaWdpbmFsQ29udGVudF9kZWMsIFRzdmlld01vbmdvRG9jdW1lbnQsIF9vcmlnaW5hbENvbnRlbnQpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDksIDQsICJoYXNDaGFuZ2VzIiwgX2hhc0NoYW5nZXNfZGVjMiwgVHN2aWV3TW9uZ29Eb2N1bWVudCwgX2hhc0NoYW5nZXMyKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ5LCA0LCAiZXJyb3IiLCBfZXJyb3JfZGVjMiwgVHN2aWV3TW9uZ29Eb2N1bWVudCwgX2Vycm9yMik7ClRzdmlld01vbmdvRG9jdW1lbnQgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDksIDAsICJUc3ZpZXdNb25nb0RvY3VtZW50IiwgX1Rzdmlld01vbmdvRG9jdW1lbnRfZGVjb3JhdG9ycywgVHN2aWV3TW9uZ29Eb2N1bWVudCk7Cl9fcHVibGljRmllbGQoVHN2aWV3TW9uZ29Eb2N1bWVudCwgInN0eWxlcyIsIFsKICBjc3NNYW5hZ2VyMTEuZGVmYXVsdFN0eWxlcywKICB0aGVtZVN0eWxlcywKICBjc3MxMWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmRvY3VtZW50LWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuaGVhZGVyLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLmhlYWRlci1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ0biB7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXM7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnRuOmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICM2NjY7CiAgICAgICAgY29sb3I6ICNhYWE7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnRuLnByaW1hcnkgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBib3JkZXItY29sb3I6ICM0MDQwNDA7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnRuLnByaW1hcnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnRuLmRhbmdlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4yKTsKICAgICAgICBib3JkZXItY29sb3I6ICNlZjQ0NDQ7CiAgICAgICAgY29sb3I6ICNmODcxNzE7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnRuLmRhbmdlcjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4zKTsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5jb250ZW50IGRlZXMtaW5wdXQtY29kZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSBzdmcgewogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLmxvYWRpbmctc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1zdGF0ZSB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KICAgIGAKXSk7Cl9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMSwgVHN2aWV3TW9uZ29Eb2N1bWVudCk7CgovLyB0c193ZWIvZWxlbWVudHMvdHN2aWV3LW1vbmdvLWluZGV4ZXMudHMKdmFyIF9uZXdJbmRleFNwYXJzZV9kZWMsIF9uZXdJbmRleFVuaXF1ZV9kZWMsIF9uZXdJbmRleEtleXNfZGVjLCBfc2hvd0NyZWF0ZURpYWxvZ19kZWMzLCBfbG9hZGluZ19kZWM3LCBfaW5kZXhlc19kZWMsIF9jb2xsZWN0aW9uTmFtZV9kZWM0LCBfZGF0YWJhc2VOYW1lX2RlYzUsIF9hMTMsIF9Uc3ZpZXdNb25nb0luZGV4ZXNfZGVjb3JhdG9ycywgX2luaXQxMCwgX2RhdGFiYXNlTmFtZTUsIF9jb2xsZWN0aW9uTmFtZTQsIF9pbmRleGVzLCBfbG9hZGluZzcsIF9zaG93Q3JlYXRlRGlhbG9nMywgX25ld0luZGV4S2V5cywgX25ld0luZGV4VW5pcXVlLCBfbmV3SW5kZXhTcGFyc2U7CnZhciB7IGh0bWw6IGh0bWwxNywgY3NzOiBjc3MxMiwgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjEyLCBjdXN0b21FbGVtZW50OiBjdXN0b21FbGVtZW50MTEsIHByb3BlcnR5OiBwcm9wZXJ0eTEwLCBzdGF0ZTogc3RhdGUxMSwgRGVlc0VsZW1lbnQ6IERlZXNFbGVtZW50MTIgfSA9IHBsdWdpbnNfZXhwb3J0czU7Cl9Uc3ZpZXdNb25nb0luZGV4ZXNfZGVjb3JhdG9ycyA9IFtjdXN0b21FbGVtZW50MTEoInRzdmlldy1tb25nby1pbmRleGVzIildOwp2YXIgVHN2aWV3TW9uZ29JbmRleGVzID0gY2xhc3MgZXh0ZW5kcyAoX2ExMyA9IERlZXNFbGVtZW50MTIsIF9kYXRhYmFzZU5hbWVfZGVjNSA9IFtwcm9wZXJ0eTEwKHsgdHlwZTogU3RyaW5nIH0pXSwgX2NvbGxlY3Rpb25OYW1lX2RlYzQgPSBbcHJvcGVydHkxMCh7IHR5cGU6IFN0cmluZyB9KV0sIF9pbmRleGVzX2RlYyA9IFtzdGF0ZTExKCldLCBfbG9hZGluZ19kZWM3ID0gW3N0YXRlMTEoKV0sIF9zaG93Q3JlYXRlRGlhbG9nX2RlYzMgPSBbc3RhdGUxMSgpXSwgX25ld0luZGV4S2V5c19kZWMgPSBbc3RhdGUxMSgpXSwgX25ld0luZGV4VW5pcXVlX2RlYyA9IFtzdGF0ZTExKCldLCBfbmV3SW5kZXhTcGFyc2VfZGVjID0gW3N0YXRlMTEoKV0sIF9hMTMpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RhdGFiYXNlTmFtZTUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDExLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfY29sbGVjdGlvbk5hbWU0LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAxMiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9pbmRleGVzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAxNiwgdGhpcywgW10pKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9sb2FkaW5nNywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMjAsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDIzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2hvd0NyZWF0ZURpYWxvZzMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDI0LCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAyNywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX25ld0luZGV4S2V5cywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMjgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDMxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbmV3SW5kZXhVbmlxdWUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDMyLCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAzNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX25ld0luZGV4U3BhcnNlLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAzNiwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMzksIHRoaXMpOwogIH0KICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICBhd2FpdCB0aGlzLmxvYWRJbmRleGVzKCk7CiAgfQogIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImRhdGFiYXNlTmFtZSIpIHx8IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiY29sbGVjdGlvbk5hbWUiKSkgewogICAgICB0aGlzLmxvYWRJbmRleGVzKCk7CiAgICB9CiAgfQogIGFzeW5jIGxvYWRJbmRleGVzKCkgewogICAgaWYgKCF0aGlzLmRhdGFiYXNlTmFtZSB8fCAhdGhpcy5jb2xsZWN0aW9uTmFtZSkgcmV0dXJuOwogICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgIHRyeSB7CiAgICAgIHRoaXMuaW5kZXhlcyA9IGF3YWl0IGFwaVNlcnZpY2UubGlzdEluZGV4ZXModGhpcy5kYXRhYmFzZU5hbWUsIHRoaXMuY29sbGVjdGlvbk5hbWUpOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGxvYWRpbmcgaW5kZXhlczoiLCBlcnIpOwogICAgICB0aGlzLmluZGV4ZXMgPSBbXTsKICAgIH0KICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogIH0KICBvcGVuQ3JlYXRlRGlhbG9nKCkgewogICAgdGhpcy5uZXdJbmRleEtleXMgPSAiIjsKICAgIHRoaXMubmV3SW5kZXhVbmlxdWUgPSBmYWxzZTsKICAgIHRoaXMubmV3SW5kZXhTcGFyc2UgPSBmYWxzZTsKICAgIHRoaXMuc2hvd0NyZWF0ZURpYWxvZyA9IHRydWU7CiAgfQogIGNsb3NlQ3JlYXRlRGlhbG9nKCkgewogICAgdGhpcy5zaG93Q3JlYXRlRGlhbG9nID0gZmFsc2U7CiAgfQogIGFzeW5jIGNyZWF0ZUluZGV4KCkgewogICAgdHJ5IHsKICAgICAgY29uc3Qga2V5czIgPSBKU09OLnBhcnNlKHRoaXMubmV3SW5kZXhLZXlzKTsKICAgICAgYXdhaXQgYXBpU2VydmljZS5jcmVhdGVJbmRleCh0aGlzLmRhdGFiYXNlTmFtZSwgdGhpcy5jb2xsZWN0aW9uTmFtZSwga2V5czIsIHsKICAgICAgICB1bmlxdWU6IHRoaXMubmV3SW5kZXhVbmlxdWUsCiAgICAgICAgc3BhcnNlOiB0aGlzLm5ld0luZGV4U3BhcnNlCiAgICAgIH0pOwogICAgICB0aGlzLmNsb3NlQ3JlYXRlRGlhbG9nKCk7CiAgICAgIGF3YWl0IHRoaXMubG9hZEluZGV4ZXMoKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBjcmVhdGluZyBpbmRleDoiLCBlcnIpOwogICAgICBhbGVydCgiSW52YWxpZCBKU09OIG9yIGluZGV4IGNyZWF0aW9uIGZhaWxlZCIpOwogICAgfQogIH0KICBhc3luYyBkcm9wSW5kZXgoaW5kZXhOYW1lKSB7CiAgICBpZiAoaW5kZXhOYW1lID09PSAiX2lkXyIpIHsKICAgICAgYWxlcnQoIkNhbm5vdCBkcm9wIHRoZSBfaWQgaW5kZXgiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFjb25maXJtKGBEcm9wIGluZGV4ICIke2luZGV4TmFtZX0iP2ApKSByZXR1cm47CiAgICB0cnkgewogICAgICBhd2FpdCBhcGlTZXJ2aWNlLmRyb3BJbmRleCh0aGlzLmRhdGFiYXNlTmFtZSwgdGhpcy5jb2xsZWN0aW9uTmFtZSwgaW5kZXhOYW1lKTsKICAgICAgYXdhaXQgdGhpcy5sb2FkSW5kZXhlcygpOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGRyb3BwaW5nIGluZGV4OiIsIGVycik7CiAgICB9CiAgfQogIGZvcm1hdEtleXMoa2V5czIpIHsKICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShrZXlzMik7CiAgfQogIHJlbmRlcigpIHsKICAgIHJldHVybiBodG1sMTdgCiAgICAgIDxkaXYgY2xhc3M9ImluZGV4ZXMtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyIj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNyZWF0ZS1idG4iIEBjbGljaz0ke3RoaXMub3BlbkNyZWF0ZURpYWxvZ30+KyBDcmVhdGUgSW5kZXg8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iaW5kZXhlcy1saXN0Ij4KICAgICAgICAgICR7dGhpcy5sb2FkaW5nID8gaHRtbDE3YDxkaXYgY2xhc3M9ImxvYWRpbmctc3RhdGUiPkxvYWRpbmcuLi48L2Rpdj5gIDogdGhpcy5pbmRleGVzLmxlbmd0aCA9PT0gMCA/IGh0bWwxN2A8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+Tm8gaW5kZXhlcyBmb3VuZDwvZGl2PmAgOiB0aGlzLmluZGV4ZXMubWFwKAogICAgICAoaWR4KSA9PiBodG1sMTdgCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5kZXgtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmRleC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW5kZXgtbmFtZSI+JHtpZHgubmFtZX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZGV4LWJhZGdlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpZHgudW5pcXVlID8gaHRtbDE3YDxzcGFuIGNsYXNzPSJiYWRnZSB1bmlxdWUiPnVuaXF1ZTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpZHguc3BhcnNlID8gaHRtbDE3YDxzcGFuIGNsYXNzPSJiYWRnZSBzcGFyc2UiPnNwYXJzZTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmRleC1rZXlzIj4ke3RoaXMuZm9ybWF0S2V5cyhpZHgua2V5cyl9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmRleC1hY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJkcm9wLWJ0biIKICAgICAgICAgICAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtpZHgubmFtZSA9PT0gIl9pZF8ifQogICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuZHJvcEluZGV4KGlkeC5uYW1lKX0KICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgIERyb3AKICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYAogICAgKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICAke3RoaXMuc2hvd0NyZWF0ZURpYWxvZyA/IGh0bWwxN2AKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLW92ZXJsYXkiIEBjbGljaz0ke3RoaXMuY2xvc2VDcmVhdGVEaWFsb2d9PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZyIgQGNsaWNrPSR7KGUxMSkgPT4gZTExLnN0b3BQcm9wYWdhdGlvbigpfT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+Q3JlYXRlIEluZGV4PC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWZpZWxkIj4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJkaWFsb2ctbGFiZWwiPkluZGV4IEtleXMgKEpTT04pPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZGlhbG9nLWlucHV0IgogICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSd7ImZpZWxkIjogMX0nCiAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5uZXdJbmRleEtleXN9CiAgICAgICAgICAgICAgICAgICAgQGlucHV0PSR7KGUxMSkgPT4gdGhpcy5uZXdJbmRleEtleXMgPSBlMTEudGFyZ2V0LnZhbHVlfQogICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWZpZWxkIj4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJkaWFsb2ctY2hlY2tib3giPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgICAgICAgICAgICAuY2hlY2tlZD0ke3RoaXMubmV3SW5kZXhVbmlxdWV9CiAgICAgICAgICAgICAgICAgICAgICBAY2hhbmdlPSR7KGUxMSkgPT4gdGhpcy5uZXdJbmRleFVuaXF1ZSA9IGUxMS50YXJnZXQuY2hlY2tlZH0KICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgIFVuaXF1ZQogICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWZpZWxkIj4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJkaWFsb2ctY2hlY2tib3giPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgICAgICAgICAgICAuY2hlY2tlZD0ke3RoaXMubmV3SW5kZXhTcGFyc2V9CiAgICAgICAgICAgICAgICAgICAgICBAY2hhbmdlPSR7KGUxMSkgPT4gdGhpcy5uZXdJbmRleFNwYXJzZSA9IGUxMS50YXJnZXQuY2hlY2tlZH0KICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgIFNwYXJzZQogICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkaWFsb2ctYnRuIHNlY29uZGFyeSIgQGNsaWNrPSR7dGhpcy5jbG9zZUNyZWF0ZURpYWxvZ30+Q2FuY2VsPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRpYWxvZy1idG4gcHJpbWFyeSIgQGNsaWNrPSR7dGhpcy5jcmVhdGVJbmRleH0+Q3JlYXRlPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CiAgICBgOwogIH0KfTsKX2luaXQxMCA9IF9fZGVjb3JhdG9yU3RhcnQoX2ExMyk7Cl9kYXRhYmFzZU5hbWU1ID0gbmV3IFdlYWtNYXAoKTsKX2NvbGxlY3Rpb25OYW1lNCA9IG5ldyBXZWFrTWFwKCk7Cl9pbmRleGVzID0gbmV3IFdlYWtNYXAoKTsKX2xvYWRpbmc3ID0gbmV3IFdlYWtNYXAoKTsKX3Nob3dDcmVhdGVEaWFsb2czID0gbmV3IFdlYWtNYXAoKTsKX25ld0luZGV4S2V5cyA9IG5ldyBXZWFrTWFwKCk7Cl9uZXdJbmRleFVuaXF1ZSA9IG5ldyBXZWFrTWFwKCk7Cl9uZXdJbmRleFNwYXJzZSA9IG5ldyBXZWFrTWFwKCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTAsIDQsICJkYXRhYmFzZU5hbWUiLCBfZGF0YWJhc2VOYW1lX2RlYzUsIFRzdmlld01vbmdvSW5kZXhlcywgX2RhdGFiYXNlTmFtZTUpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDEwLCA0LCAiY29sbGVjdGlvbk5hbWUiLCBfY29sbGVjdGlvbk5hbWVfZGVjNCwgVHN2aWV3TW9uZ29JbmRleGVzLCBfY29sbGVjdGlvbk5hbWU0KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMCwgNCwgImluZGV4ZXMiLCBfaW5kZXhlc19kZWMsIFRzdmlld01vbmdvSW5kZXhlcywgX2luZGV4ZXMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDEwLCA0LCAibG9hZGluZyIsIF9sb2FkaW5nX2RlYzcsIFRzdmlld01vbmdvSW5kZXhlcywgX2xvYWRpbmc3KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMCwgNCwgInNob3dDcmVhdGVEaWFsb2ciLCBfc2hvd0NyZWF0ZURpYWxvZ19kZWMzLCBUc3ZpZXdNb25nb0luZGV4ZXMsIF9zaG93Q3JlYXRlRGlhbG9nMyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTAsIDQsICJuZXdJbmRleEtleXMiLCBfbmV3SW5kZXhLZXlzX2RlYywgVHN2aWV3TW9uZ29JbmRleGVzLCBfbmV3SW5kZXhLZXlzKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMCwgNCwgIm5ld0luZGV4VW5pcXVlIiwgX25ld0luZGV4VW5pcXVlX2RlYywgVHN2aWV3TW9uZ29JbmRleGVzLCBfbmV3SW5kZXhVbmlxdWUpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDEwLCA0LCAibmV3SW5kZXhTcGFyc2UiLCBfbmV3SW5kZXhTcGFyc2VfZGVjLCBUc3ZpZXdNb25nb0luZGV4ZXMsIF9uZXdJbmRleFNwYXJzZSk7ClRzdmlld01vbmdvSW5kZXhlcyA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTAsIDAsICJUc3ZpZXdNb25nb0luZGV4ZXMiLCBfVHN2aWV3TW9uZ29JbmRleGVzX2RlY29yYXRvcnMsIFRzdmlld01vbmdvSW5kZXhlcyk7Cl9fcHVibGljRmllbGQoVHN2aWV3TW9uZ29JbmRleGVzLCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXIxMi5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczEyYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5pbmRleGVzLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLnRvb2xiYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOwogICAgICB9CgogICAgICAuY3JlYXRlLWJ0biB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzNCwgMTk3LCA5NCwgMC4yKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMjJjNTVlOwogICAgICAgIGNvbG9yOiAjNGFkZTgwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAuY3JlYXRlLWJ0bjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzNCwgMTk3LCA5NCwgMC4zKTsKICAgICAgfQoKICAgICAgLmluZGV4ZXMtbGlzdCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgIH0KCiAgICAgIC5pbmRleC1jYXJkIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICB9CgogICAgICAuaW5kZXgtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgIH0KCiAgICAgIC5pbmRleC1uYW1lIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmluZGV4LWJhZGdlcyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmJhZGdlIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgcGFkZGluZzogMnB4IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLmJhZGdlLnVuaXF1ZSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuYmFkZ2Uuc3BhcnNlIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1MSwgMTkxLCAzNiwgMC4yKTsKICAgICAgICBjb2xvcjogI2ZiYmYyNDsKICAgICAgfQoKICAgICAgLmluZGV4LWtleXMgewogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQoKICAgICAgLmluZGV4LWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmRyb3AtYnRuIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWY0NDQ0OwogICAgICAgIGNvbG9yOiAjZjg3MTcxOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB9CgogICAgICAuZHJvcC1idG46aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjM5LCA2OCwgNjgsIDAuMik7CiAgICAgIH0KCiAgICAgIC5kcm9wLWJ0bjpkaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLmxvYWRpbmctc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CgogICAgICAvKiBEaWFsb2cgc3R5bGVzICovCiAgICAgIC5kaWFsb2ctb3ZlcmxheSB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNyk7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgIH0KCiAgICAgIC5kaWFsb2cgewogICAgICAgIGJhY2tncm91bmQ6ICMxZTFlMWU7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgd2lkdGg6IDQwMHB4OwogICAgICAgIG1heC13aWR0aDogOTAlOwogICAgICB9CgogICAgICAuZGlhbG9nLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAuZGlhbG9nLWZpZWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAuZGlhbG9nLWxhYmVsIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNnB4OwogICAgICB9CgogICAgICAuZGlhbG9nLWlucHV0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctaW5wdXQ6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDA0MDQwOwogICAgICB9CgogICAgICAuZGlhbG9nLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAuZGlhbG9nLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0biB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLnNlY29uZGFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4uc2Vjb25kYXJ5OmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICM2NjY7CiAgICAgICAgY29sb3I6ICNhYWE7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLnByaW1hcnkgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDA0MDQwOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi5wcmltYXJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAxLCBUc3ZpZXdNb25nb0luZGV4ZXMpOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1tb25nby1kYi1vdmVydmlldy50cwp2YXIgX2Vycm9yX2RlYzMsIF9sb2FkaW5nX2RlYzgsIF9zdGF0c19kZWMyLCBfZGF0YWJhc2VOYW1lX2RlYzYsIF9hMTQsIF9Uc3ZpZXdNb25nb0RiT3ZlcnZpZXdfZGVjb3JhdG9ycywgX2luaXQxMSwgX2RhdGFiYXNlTmFtZTYsIF9zdGF0czIsIF9sb2FkaW5nOCwgX2Vycm9yMzsKdmFyIHsgaHRtbDogaHRtbDE4LCBjc3M6IGNzczEzLCBjc3NNYW5hZ2VyOiBjc3NNYW5hZ2VyMTMsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQxMiwgcHJvcGVydHk6IHByb3BlcnR5MTEsIHN0YXRlOiBzdGF0ZTEyLCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQxMyB9ID0gcGx1Z2luc19leHBvcnRzNTsKX1Rzdmlld01vbmdvRGJPdmVydmlld19kZWNvcmF0b3JzID0gW2N1c3RvbUVsZW1lbnQxMigidHN2aWV3LW1vbmdvLWRiLW92ZXJ2aWV3IildOwp2YXIgVHN2aWV3TW9uZ29EYk92ZXJ2aWV3ID0gY2xhc3MgZXh0ZW5kcyAoX2ExNCA9IERlZXNFbGVtZW50MTMsIF9kYXRhYmFzZU5hbWVfZGVjNiA9IFtwcm9wZXJ0eTExKHsgdHlwZTogU3RyaW5nIH0pXSwgX3N0YXRzX2RlYzIgPSBbc3RhdGUxMigpXSwgX2xvYWRpbmdfZGVjOCA9IFtzdGF0ZTEyKCldLCBfZXJyb3JfZGVjMyA9IFtzdGF0ZTEyKCldLCBfYTE0KSB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9kYXRhYmFzZU5hbWU2LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDExLCA4LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDExLCAxMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3N0YXRzMiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMSwgMTIsIHRoaXMsIG51bGwpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMSwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9sb2FkaW5nOCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMSwgMTYsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTEsIDE5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZXJyb3IzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDExLCAyMCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMSwgMjMsIHRoaXMpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJkYXRhYmFzZU5hbWUiKSAmJiB0aGlzLmRhdGFiYXNlTmFtZSkgewogICAgICB0aGlzLmxvYWRTdGF0cygpOwogICAgfQogIH0KICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICBpZiAodGhpcy5kYXRhYmFzZU5hbWUpIHsKICAgICAgYXdhaXQgdGhpcy5sb2FkU3RhdHMoKTsKICAgIH0KICB9CiAgYXN5bmMgbG9hZFN0YXRzKCkgewogICAgaWYgKCF0aGlzLmRhdGFiYXNlTmFtZSkgcmV0dXJuOwogICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgIHRoaXMuZXJyb3IgPSAiIjsKICAgIHRyeSB7CiAgICAgIHRoaXMuc3RhdHMgPSBhd2FpdCBhcGlTZXJ2aWNlLmdldERhdGFiYXNlU3RhdHModGhpcy5kYXRhYmFzZU5hbWUpOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGxvYWRpbmcgZGF0YWJhc2Ugc3RhdHM6IiwgZXJyKTsKICAgICAgdGhpcy5lcnJvciA9ICJGYWlsZWQgdG8gbG9hZCBkYXRhYmFzZSBzdGF0aXN0aWNzIjsKICAgIH0KICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogIH0KICByZW5kZXIoKSB7CiAgICBpZiAoIXRoaXMuZGF0YWJhc2VOYW1lKSB7CiAgICAgIHJldHVybiBodG1sMThgCiAgICAgICAgPGRpdiBjbGFzcz0ib3ZlcnZpZXctY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgIDxlbGxpcHNlIGN4PSIxMiIgY3k9IjUiIHJ4PSI5IiByeT0iMyI+PC9lbGxpcHNlPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSAxMmMwIDEuNjYtNCAzLTkgM3MtOS0xLjM0LTktMyI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zIDV2MTRjMCAxLjY2IDQgMyA5IDNzOS0xLjM0IDktM1Y1Ij48L3BhdGg+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8cD5TZWxlY3QgYSBkYXRhYmFzZSB0byB2aWV3IG92ZXJ2aWV3PC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAodGhpcy5sb2FkaW5nKSB7CiAgICAgIHJldHVybiBodG1sMThgCiAgICAgICAgPGRpdiBjbGFzcz0ib3ZlcnZpZXctY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctc3RhdGUiPkxvYWRpbmcgZGF0YWJhc2Ugc3RhdGlzdGljcy4uLjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgfQogICAgaWYgKHRoaXMuZXJyb3IpIHsKICAgICAgcmV0dXJuIGh0bWwxOGAKICAgICAgICA8ZGl2IGNsYXNzPSJvdmVydmlldy1jb250YWluZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3Itc3RhdGUiPiR7dGhpcy5lcnJvcn08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgIH0KICAgIGlmICghdGhpcy5zdGF0cykgewogICAgICByZXR1cm4gaHRtbDE4YAogICAgICAgIDxkaXYgY2xhc3M9Im92ZXJ2aWV3LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgIDxwPk5vIHN0YXRpc3RpY3MgYXZhaWxhYmxlPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICByZXR1cm4gaHRtbDE4YAogICAgICA8ZGl2IGNsYXNzPSJvdmVydmlldy1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICA8aDEgY2xhc3M9ImhlYWRlci10aXRsZSI+CiAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj4KICAgICAgICAgICAgICA8ZWxsaXBzZSBjeD0iMTIiIGN5PSI1IiByeD0iOSIgcnk9IjMiPjwvZWxsaXBzZT4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMjEgMTJjMCAxLjY2LTQgMy05IDNzLTktMS4zNC05LTMiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMyA1djE0YzAgMS42NiA0IDMgOSAzczktMS4zNCA5LTNWNSI+PC9wYXRoPgogICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgJHt0aGlzLmRhdGFiYXNlTmFtZX0KICAgICAgICAgIDwvaDE+CiAgICAgICAgICA8cCBjbGFzcz0iaGVhZGVyLXN1YnRpdGxlIj5EYXRhYmFzZSBPdmVydmlldzwvcD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TdG9yYWdlPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0cy1ncmlkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1jYXJkIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC1sYWJlbCI+Q29sbGVjdGlvbnM8L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtdmFsdWUiPiR7dGhpcy5zdGF0cy5jb2xsZWN0aW9uc308L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtZGVzY3JpcHRpb24iPlRvdGFsIGNvbGxlY3Rpb25zIGluIGRhdGFiYXNlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1jYXJkIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC1sYWJlbCI+RG9jdW1lbnRzPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LXZhbHVlIj4ke2Zvcm1hdENvdW50KHRoaXMuc3RhdHMub2JqZWN0cykgfHwgdGhpcy5zdGF0cy5vYmplY3RzfTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC1kZXNjcmlwdGlvbiI+VG90YWwgZG9jdW1lbnRzIHN0b3JlZDwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtY2FyZCI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtbGFiZWwiPkF2ZyBEb2N1bWVudCBTaXplPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LXZhbHVlIHNtYWxsIj4ke2Zvcm1hdFNpemUodGhpcy5zdGF0cy5hdmdPYmpTaXplKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtZGVzY3JpcHRpb24iPkF2ZXJhZ2Ugc2l6ZSBwZXIgZG9jdW1lbnQ8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LWxhYmVsIj5EYXRhIFNpemU8L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtdmFsdWUgc21hbGwiPiR7Zm9ybWF0U2l6ZSh0aGlzLnN0YXRzLmRhdGFTaXplKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtZGVzY3JpcHRpb24iPlVuY29tcHJlc3NlZCBkYXRhIHNpemU8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LWxhYmVsIj5TdG9yYWdlIFNpemU8L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtdmFsdWUgc21hbGwiPiR7Zm9ybWF0U2l6ZSh0aGlzLnN0YXRzLnN0b3JhZ2VTaXplKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtZGVzY3JpcHRpb24iPkFsbG9jYXRlZCBzdG9yYWdlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkluZGV4ZXM8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXRzLWdyaWQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LWxhYmVsIj5JbmRleCBDb3VudDwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC12YWx1ZSI+JHt0aGlzLnN0YXRzLmluZGV4ZXN9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LWRlc2NyaXB0aW9uIj5Ub3RhbCBpbmRleGVzIGluIGRhdGFiYXNlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1jYXJkIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC1sYWJlbCI+SW5kZXggU2l6ZTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC12YWx1ZSBzbWFsbCI+JHtmb3JtYXRTaXplKHRoaXMuc3RhdHMuaW5kZXhTaXplKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtZGVzY3JpcHRpb24iPlRvdGFsIGluZGV4IHN0b3JhZ2U8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07Cl9pbml0MTEgPSBfX2RlY29yYXRvclN0YXJ0KF9hMTQpOwpfZGF0YWJhc2VOYW1lNiA9IG5ldyBXZWFrTWFwKCk7Cl9zdGF0czIgPSBuZXcgV2Vha01hcCgpOwpfbG9hZGluZzggPSBuZXcgV2Vha01hcCgpOwpfZXJyb3IzID0gbmV3IFdlYWtNYXAoKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMSwgNCwgImRhdGFiYXNlTmFtZSIsIF9kYXRhYmFzZU5hbWVfZGVjNiwgVHN2aWV3TW9uZ29EYk92ZXJ2aWV3LCBfZGF0YWJhc2VOYW1lNik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTEsIDQsICJzdGF0cyIsIF9zdGF0c19kZWMyLCBUc3ZpZXdNb25nb0RiT3ZlcnZpZXcsIF9zdGF0czIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDExLCA0LCAibG9hZGluZyIsIF9sb2FkaW5nX2RlYzgsIFRzdmlld01vbmdvRGJPdmVydmlldywgX2xvYWRpbmc4KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMSwgNCwgImVycm9yIiwgX2Vycm9yX2RlYzMsIFRzdmlld01vbmdvRGJPdmVydmlldywgX2Vycm9yMyk7ClRzdmlld01vbmdvRGJPdmVydmlldyA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTEsIDAsICJUc3ZpZXdNb25nb0RiT3ZlcnZpZXciLCBfVHN2aWV3TW9uZ29EYk92ZXJ2aWV3X2RlY29yYXRvcnMsIFRzdmlld01vbmdvRGJPdmVydmlldyk7Cl9fcHVibGljRmllbGQoVHN2aWV3TW9uZ29EYk92ZXJ2aWV3LCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXIxMy5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczEzYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAub3ZlcnZpZXctY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLmhlYWRlci10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgbWFyZ2luOiAwIDAgOHB4IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLmhlYWRlci10aXRsZSBzdmcgewogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLmhlYWRlci1zdWJ0aXRsZSB7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAuc3RhdHMtZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDsKICAgICAgfQoKICAgICAgLnN0YXQtY2FyZCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnN0YXQtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLnN0YXQtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuc3RhdC12YWx1ZS5zbWFsbCB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICB9CgogICAgICAuc3RhdC1kZXNjcmlwdGlvbiB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAuc2VjdGlvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDhweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsKICAgICAgfQoKICAgICAgLmxvYWRpbmctc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAuZXJyb3Itc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHN2ZyB7CiAgICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdDExLCAxLCBUc3ZpZXdNb25nb0RiT3ZlcnZpZXcpOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1hY3Rpdml0eS1zdHJlYW0udHMKdmFyIF9hdXRvU2Nyb2xsX2RlYywgX2lzTG9hZGluZ19kZWMsIF9pc0Nvbm5lY3RlZF9kZWMsIF9maWx0ZXJNb2RlX2RlYywgX2V2ZW50c19kZWMsIF9hMTUsIF9Uc3ZpZXdBY3Rpdml0eVN0cmVhbV9kZWNvcmF0b3JzLCBfaW5pdDEyLCBfZXZlbnRzLCBfZmlsdGVyTW9kZSwgX2lzQ29ubmVjdGVkLCBfaXNMb2FkaW5nLCBfYXV0b1Njcm9sbDsKdmFyIHsgaHRtbDogaHRtbDE5LCBjc3M6IGNzczE0LCBjc3NNYW5hZ2VyOiBjc3NNYW5hZ2VyMTQsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQxMywgcHJvcGVydHk6IHByb3BlcnR5MTIsIHN0YXRlOiBzdGF0ZTEzLCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQxNCB9ID0gcGx1Z2luc19leHBvcnRzNTsKX1Rzdmlld0FjdGl2aXR5U3RyZWFtX2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDEzKCJ0c3ZpZXctYWN0aXZpdHktc3RyZWFtIildOwp2YXIgVHN2aWV3QWN0aXZpdHlTdHJlYW0gPSBjbGFzcyBleHRlbmRzIChfYTE1ID0gRGVlc0VsZW1lbnQxNCwgX2V2ZW50c19kZWMgPSBbc3RhdGUxMygpXSwgX2ZpbHRlck1vZGVfZGVjID0gW3N0YXRlMTMoKV0sIF9pc0Nvbm5lY3RlZF9kZWMgPSBbc3RhdGUxMygpXSwgX2lzTG9hZGluZ19kZWMgPSBbc3RhdGUxMygpXSwgX2F1dG9TY3JvbGxfZGVjID0gW3N0YXRlMTMoKV0sIF9hMTUpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2V2ZW50cywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMiwgOCwgdGhpcywgW10pKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMiwgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9maWx0ZXJNb2RlLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEyLCAxMiwgdGhpcywgImFsbCIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMiwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9pc0Nvbm5lY3RlZCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMiwgMTYsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTIsIDE5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfaXNMb2FkaW5nLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEyLCAyMCwgdGhpcywgdHJ1ZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEyLCAyMywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2F1dG9TY3JvbGwsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTIsIDI0LCB0aGlzLCB0cnVlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTIsIDI3LCB0aGlzKTsKICAgIF9fcHVibGljRmllbGQodGhpcywgInN1YnNjcmlwdGlvbiIsIG51bGwpOwogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiY29ubmVjdGlvblN1YnNjcmlwdGlvbiIsIG51bGwpOwogIH0KICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVTdHJlYW1pbmcoKTsKICB9CiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgdGhpcy5jbGVhbnVwKCk7CiAgfQogIGFzeW5jIGluaXRpYWxpemVTdHJlYW1pbmcoKSB7CiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7CiAgICB0cnkgewogICAgICBhd2FpdCBjaGFuZ2VTdHJlYW1TZXJ2aWNlLmNvbm5lY3QoKTsKICAgICAgdGhpcy5jb25uZWN0aW9uU3Vic2NyaXB0aW9uID0gY2hhbmdlU3RyZWFtU2VydmljZS5jb25uZWN0aW9uU3RhdHVzJC5zdWJzY3JpYmUoKHN0YXR1cykgPT4gewogICAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBzdGF0dXMgPT09ICJjb25uZWN0ZWQiOwogICAgICB9KTsKICAgICAgYXdhaXQgY2hhbmdlU3RyZWFtU2VydmljZS5zdWJzY3JpYmVUb0FjdGl2aXR5KCk7CiAgICAgIGNvbnN0IHJlY2VudEV2ZW50cyA9IGF3YWl0IGNoYW5nZVN0cmVhbVNlcnZpY2UuZ2V0UmVjZW50QWN0aXZpdHkoMTAwKTsKICAgICAgdGhpcy5ldmVudHMgPSByZWNlbnRFdmVudHM7CiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gY2hhbmdlU3RyZWFtU2VydmljZS5nZXRBY3Rpdml0eVN0cmVhbSgpLnN1YnNjcmliZSgoZXZlbnQpID0+IHsKICAgICAgICB0aGlzLmV2ZW50cyA9IFsuLi50aGlzLmV2ZW50cywgZXZlbnRdLnNsaWNlKC01MDApOwogICAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGwpIHsKICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLmlzQ29ubmVjdGVkID0gdHJ1ZTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIGFjdGl2aXR5IHN0cmVhbToiLCBlcnJvcik7CiAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTsKICAgIH0KICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7CiAgfQogIGNsZWFudXAoKSB7CiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHsKICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSBudWxsOwogICAgfQogICAgaWYgKHRoaXMuY29ubmVjdGlvblN1YnNjcmlwdGlvbikgewogICAgICB0aGlzLmNvbm5lY3Rpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgdGhpcy5jb25uZWN0aW9uU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIH0KICAgIGNoYW5nZVN0cmVhbVNlcnZpY2UudW5zdWJzY3JpYmVGcm9tQWN0aXZpdHkoKTsKICB9CiAgc2Nyb2xsVG9Cb3R0b20oKSB7CiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICBjb25zdCBsaXN0NSA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmV2ZW50cy1saXN0Iik7CiAgICAgIGlmIChsaXN0NSkgewogICAgICAgIGxpc3Q1LnNjcm9sbFRvcCA9IGxpc3Q1LnNjcm9sbEhlaWdodDsKICAgICAgfQogICAgfSk7CiAgfQogIHNldEZpbHRlck1vZGUobW9kZSkgewogICAgdGhpcy5maWx0ZXJNb2RlID0gbW9kZTsKICB9CiAgdG9nZ2xlQXV0b1Njcm9sbCgpIHsKICAgIHRoaXMuYXV0b1Njcm9sbCA9ICF0aGlzLmF1dG9TY3JvbGw7CiAgfQogIGdldCBmaWx0ZXJlZEV2ZW50cygpIHsKICAgIGlmICh0aGlzLmZpbHRlck1vZGUgPT09ICJhbGwiKSB7CiAgICAgIHJldHVybiB0aGlzLmV2ZW50czsKICAgIH0KICAgIHJldHVybiB0aGlzLmV2ZW50cy5maWx0ZXIoKGUxMSkgPT4gZTExLnNvdXJjZSA9PT0gdGhpcy5maWx0ZXJNb2RlKTsKICB9CiAgZm9ybWF0VGltZSh0aW1lc3RhbXAyKSB7CiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGltZXN0YW1wMik7CiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoImVuLVVTIiwgewogICAgICBob3VyOiAiMi1kaWdpdCIsCiAgICAgIG1pbnV0ZTogIjItZGlnaXQiLAogICAgICBzZWNvbmQ6ICIyLWRpZ2l0IgogICAgfSk7CiAgfQogIGZvcm1hdFJlbGF0aXZlVGltZSh0aW1lc3RhbXAyKSB7CiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGltZXN0YW1wMik7CiAgICBjb25zdCBub3cyID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICBjb25zdCBkaWZmID0gbm93Mi5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWUoKTsKICAgIGlmIChkaWZmIDwgNmU0KSB7CiAgICAgIHJldHVybiAianVzdCBub3ciOwogICAgfSBlbHNlIGlmIChkaWZmIDwgMzZlNSkgewogICAgICBjb25zdCBtaW5zID0gTWF0aC5mbG9vcihkaWZmIC8gNmU0KTsKICAgICAgcmV0dXJuIGAke21pbnN9bSBhZ29gOwogICAgfSBlbHNlIGlmIChkaWZmIDwgODY0ZTUpIHsKICAgICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKGRpZmYgLyAzNmU1KTsKICAgICAgcmV0dXJuIGAke2hvdXJzfWggYWdvYDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpOwogICAgfQogIH0KICBnZXRFdmVudFRpdGxlKGV2ZW50KSB7CiAgICBpZiAoZXZlbnQuc291cmNlID09PSAibW9uZ29kYiIpIHsKICAgICAgY29uc3QgbW9uZ29FdmVudCA9IGV2ZW50LmV2ZW50OwogICAgICByZXR1cm4gYCR7bW9uZ29FdmVudC5kYXRhYmFzZX0uJHttb25nb0V2ZW50LmNvbGxlY3Rpb259YDsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IHMzRXZlbnQgPSBldmVudC5ldmVudDsKICAgICAgcmV0dXJuIHMzRXZlbnQuYnVja2V0OwogICAgfQogIH0KICBnZXRFdmVudERldGFpbHMoZXZlbnQpIHsKICAgIGlmIChldmVudC5zb3VyY2UgPT09ICJtb25nb2RiIikgewogICAgICBjb25zdCBtb25nb0V2ZW50ID0gZXZlbnQuZXZlbnQ7CiAgICAgIGlmIChtb25nb0V2ZW50LmRvY3VtZW50SWQpIHsKICAgICAgICByZXR1cm4gYERvY3VtZW50OiAke21vbmdvRXZlbnQuZG9jdW1lbnRJZH1gOwogICAgICB9CiAgICAgIHJldHVybiAiIjsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IHMzRXZlbnQgPSBldmVudC5ldmVudDsKICAgICAgcmV0dXJuIHMzRXZlbnQua2V5OwogICAgfQogIH0KICBnZXRFdmVudFR5cGUoZXZlbnQpIHsKICAgIHJldHVybiBldmVudC5ldmVudC50eXBlOwogIH0KICBoYW5kbGVFdmVudENsaWNrKGV2ZW50KSB7CiAgICBpZiAoZXZlbnQuc291cmNlID09PSAibW9uZ29kYiIpIHsKICAgICAgY29uc3QgbW9uZ29FdmVudCA9IGV2ZW50LmV2ZW50OwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoCiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCJuYXZpZ2F0ZS10by1tb25nbyIsIHsKICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICBkYXRhYmFzZTogbW9uZ29FdmVudC5kYXRhYmFzZSwKICAgICAgICAgICAgY29sbGVjdGlvbjogbW9uZ29FdmVudC5jb2xsZWN0aW9uLAogICAgICAgICAgICBkb2N1bWVudElkOiBtb25nb0V2ZW50LmRvY3VtZW50SWQKICAgICAgICAgIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KQogICAgICApOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgczNFdmVudCA9IGV2ZW50LmV2ZW50OwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoCiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCJuYXZpZ2F0ZS10by1zMyIsIHsKICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICBidWNrZXQ6IHMzRXZlbnQuYnVja2V0LAogICAgICAgICAgICBrZXk6IHMzRXZlbnQua2V5CiAgICAgICAgICB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkKICAgICAgKTsKICAgIH0KICB9CiAgcmVuZGVyTW9uZ29JY29uKCkgewogICAgcmV0dXJuIGh0bWwxOWAKICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgIDxlbGxpcHNlIGN4PSIxMiIgY3k9IjUiIHJ4PSI5IiByeT0iMyI+PC9lbGxpcHNlPgogICAgICAgIDxwYXRoIGQ9Ik0yMSAxMmMwIDEuNjYtNCAzLTkgM3MtOS0xLjM0LTktMyI+PC9wYXRoPgogICAgICAgIDxwYXRoIGQ9Ik0zIDV2MTRjMCAxLjY2IDQgMyA5IDNzOS0xLjM0IDktM1Y1Ij48L3BhdGg+CiAgICAgIDwvc3ZnPgogICAgYDsKICB9CiAgcmVuZGVyUzNJY29uKCkgewogICAgcmV0dXJuIGh0bWwxOWAKICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgIDxwYXRoIGQ9Ik0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNWwyIDNoOWEyIDIgMCAwIDEgMiAyeiI+PC9wYXRoPgogICAgICA8L3N2Zz4KICAgIGA7CiAgfQogIGdldENvbm5lY3Rpb25TdGF0dXNUZXh0KCkgewogICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQpIHsKICAgICAgcmV0dXJuICJMaXZlIjsKICAgIH0KICAgIHJldHVybiAiRGlzY29ubmVjdGVkIjsKICB9CiAgcmVuZGVyKCkgewogICAgcmV0dXJuIGh0bWwxOWAKICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHktY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLXRpdGxlIj4KICAgICAgICAgICAgQWN0aXZpdHkgU3RyZWFtCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbm5lY3Rpb24tc3RhdHVzIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdHVzLWRvdCAke3RoaXMuaXNDb25uZWN0ZWQgPyAiY29ubmVjdGVkIiA6ICJkaXNjb25uZWN0ZWQifSI+PC9zcGFuPgogICAgICAgICAgICAgICR7dGhpcy5nZXRDb25uZWN0aW9uU3RhdHVzVGV4dCgpfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLWNvbnRyb2xzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmlsdGVyLXRhYnMiPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJmaWx0ZXItdGFiICR7dGhpcy5maWx0ZXJNb2RlID09PSAiYWxsIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZXRGaWx0ZXJNb2RlKCJhbGwiKX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICBBbGwKICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0iZmlsdGVyLXRhYiAke3RoaXMuZmlsdGVyTW9kZSA9PT0gIm1vbmdvZGIiID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNldEZpbHRlck1vZGUoIm1vbmdvZGIiKX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICBNb25nb0RCCiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9ImZpbHRlci10YWIgJHt0aGlzLmZpbHRlck1vZGUgPT09ICJzMyIgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2V0RmlsdGVyTW9kZSgiczMiKX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICBTMwogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJhdXRvLXNjcm9sbC10b2dnbGUiPgogICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgICAgICAuY2hlY2tlZD0ke3RoaXMuYXV0b1Njcm9sbH0KICAgICAgICAgICAgICAgIEBjaGFuZ2U9JHt0aGlzLnRvZ2dsZUF1dG9TY3JvbGx9CiAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICBBdXRvLXNjcm9sbAogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50cy1saXN0Ij4KICAgICAgICAgICR7dGhpcy5pc0xvYWRpbmcgPyBodG1sMTlgPGRpdiBjbGFzcz0ibG9hZGluZy1zdGF0ZSI+Q29ubmVjdGluZyB0byBhY3Rpdml0eSBzdHJlYW0uLi48L2Rpdj5gIDogdGhpcy5maWx0ZXJlZEV2ZW50cy5sZW5ndGggPT09IDAgPyBodG1sMTlgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+CiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjIgMTJoLTRsLTMgOUw5IDNsLTMgOUgyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgPHA+Tm8gYWN0aXZpdHkgeWV0LiBDaGFuZ2VzIHdpbGwgYXBwZWFyIGhlcmUgaW4gcmVhbC10aW1lLjwvcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgIDogdGhpcy5maWx0ZXJlZEV2ZW50cy5tYXAoCiAgICAgIChldmVudCkgPT4gaHRtbDE5YAogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LWl0ZW0iIEBjbGljaz0keygpID0+IHRoaXMuaGFuZGxlRXZlbnRDbGljayhldmVudCl9PgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXZlbnQtaWNvbiAke2V2ZW50LnNvdXJjZX0iPgogICAgICAgICAgICAgICAgICAgICAgICAke2V2ZW50LnNvdXJjZSA9PT0gIm1vbmdvZGIiID8gdGhpcy5yZW5kZXJNb25nb0ljb24oKSA6IHRoaXMucmVuZGVyUzNJY29uKCl9CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJldmVudC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJldmVudC10eXBlICR7dGhpcy5nZXRFdmVudFR5cGUoZXZlbnQpfSI+JHt0aGlzLmdldEV2ZW50VHlwZShldmVudCl9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmdldEV2ZW50VGl0bGUoZXZlbnQpfQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LXRpbWUiIHRpdGxlPSR7dGhpcy5mb3JtYXRUaW1lKGV2ZW50LnRpbWVzdGFtcCl9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmZvcm1hdFJlbGF0aXZlVGltZShldmVudC50aW1lc3RhbXApfQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXZlbnQtZGV0YWlscyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImV2ZW50LXBhdGgiPiR7dGhpcy5nZXRFdmVudERldGFpbHMoZXZlbnQpfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYAogICAgKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KfTsKX2luaXQxMiA9IF9fZGVjb3JhdG9yU3RhcnQoX2ExNSk7Cl9ldmVudHMgPSBuZXcgV2Vha01hcCgpOwpfZmlsdGVyTW9kZSA9IG5ldyBXZWFrTWFwKCk7Cl9pc0Nvbm5lY3RlZCA9IG5ldyBXZWFrTWFwKCk7Cl9pc0xvYWRpbmcgPSBuZXcgV2Vha01hcCgpOwpfYXV0b1Njcm9sbCA9IG5ldyBXZWFrTWFwKCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTIsIDQsICJldmVudHMiLCBfZXZlbnRzX2RlYywgVHN2aWV3QWN0aXZpdHlTdHJlYW0sIF9ldmVudHMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDEyLCA0LCAiZmlsdGVyTW9kZSIsIF9maWx0ZXJNb2RlX2RlYywgVHN2aWV3QWN0aXZpdHlTdHJlYW0sIF9maWx0ZXJNb2RlKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMiwgNCwgImlzQ29ubmVjdGVkIiwgX2lzQ29ubmVjdGVkX2RlYywgVHN2aWV3QWN0aXZpdHlTdHJlYW0sIF9pc0Nvbm5lY3RlZCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTIsIDQsICJpc0xvYWRpbmciLCBfaXNMb2FkaW5nX2RlYywgVHN2aWV3QWN0aXZpdHlTdHJlYW0sIF9pc0xvYWRpbmcpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDEyLCA0LCAiYXV0b1Njcm9sbCIsIF9hdXRvU2Nyb2xsX2RlYywgVHN2aWV3QWN0aXZpdHlTdHJlYW0sIF9hdXRvU2Nyb2xsKTsKVHN2aWV3QWN0aXZpdHlTdHJlYW0gPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDEyLCAwLCAiVHN2aWV3QWN0aXZpdHlTdHJlYW0iLCBfVHN2aWV3QWN0aXZpdHlTdHJlYW1fZGVjb3JhdG9ycywgVHN2aWV3QWN0aXZpdHlTdHJlYW0pOwpfX3B1YmxpY0ZpZWxkKFRzdmlld0FjdGl2aXR5U3RyZWFtLCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXIxNC5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczE0YAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsKICAgICAgfQoKICAgICAgLmhlYWRlci10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLmNvbm5lY3Rpb24tc3RhdHVzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KCiAgICAgIC5zdGF0dXMtZG90IHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgLnN0YXR1cy1kb3QuY29ubmVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMjJjNTVlOwogICAgICAgIGJveC1zaGFkb3c6IDAgMCA2cHggcmdiYSgzNCwgMTk3LCA5NCwgMC41KTsKICAgICAgfQoKICAgICAgLnN0YXR1cy1kb3QuZGlzY29ubmVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZWY0NDQ0OwogICAgICB9CgogICAgICAuc3RhdHVzLWRvdC5jb25uZWN0aW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjU5ZTBiOwogICAgICAgIGFuaW1hdGlvbjogcHVsc2UgMXMgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgcHVsc2UgewogICAgICAgIDAlLCAxMDAlIHsgb3BhY2l0eTogMTsgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDAuNTsgfQogICAgICB9CgogICAgICAuaGVhZGVyLWNvbnRyb2xzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICB9CgogICAgICAuZmlsdGVyLXRhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5maWx0ZXItdGFiIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICB9CgogICAgICAuZmlsdGVyLXRhYjpob3ZlciB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNjY2OwogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICB9CgogICAgICAuZmlsdGVyLXRhYi5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBib3JkZXItY29sb3I6ICM2NjY7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5hdXRvLXNjcm9sbC10b2dnbGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAuYXV0by1zY3JvbGwtdG9nZ2xlIGlucHV0IHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC5ldmVudHMtbGlzdCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgIH0KCiAgICAgIC5ldmVudC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgIH0KCiAgICAgIC5ldmVudC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICB9CgogICAgICAuZXZlbnQtaWNvbiB7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5ldmVudC1pY29uLm1vbmdvZGIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTYsIDE4NSwgMTI5LCAwLjIpOwogICAgICAgIGNvbG9yOiAjMTBiOTgxOwogICAgICB9CgogICAgICAuZXZlbnQtaWNvbi5zMyB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNDUsIDE1OCwgMTEsIDAuMik7CiAgICAgICAgY29sb3I6ICNmNTllMGI7CiAgICAgIH0KCiAgICAgIC5ldmVudC1pY29uIHN2ZyB7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICB9CgogICAgICAuZXZlbnQtY29udGVudCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5ldmVudC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICAuZXZlbnQtdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuZXZlbnQtdGltZSB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAuZXZlbnQtZGV0YWlscyB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIH0KCiAgICAgIC5ldmVudC10eXBlIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgICAgfQoKICAgICAgLmV2ZW50LXR5cGUuaW5zZXJ0LCAuZXZlbnQtdHlwZS5hZGQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzQsIDE5NywgOTQsIDAuMik7CiAgICAgICAgY29sb3I6ICM0YWRlODA7CiAgICAgIH0KCiAgICAgIC5ldmVudC10eXBlLnVwZGF0ZSwgLmV2ZW50LXR5cGUubW9kaWZ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKTsKICAgICAgICBjb2xvcjogIzYwYTVmYTsKICAgICAgfQoKICAgICAgLmV2ZW50LXR5cGUuZGVsZXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjIpOwogICAgICAgIGNvbG9yOiAjZjg3MTcxOwogICAgICB9CgogICAgICAuZXZlbnQtdHlwZS5yZXBsYWNlIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE2OCwgODUsIDI0NywgMC4yKTsKICAgICAgICBjb2xvcjogI2MwODRmYzsKICAgICAgfQoKICAgICAgLmV2ZW50LXR5cGUuZHJvcCwgLmV2ZW50LXR5cGUuaW52YWxpZGF0ZSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4zKTsKICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgc3ZnIHsKICAgICAgICB3aWR0aDogNjRweDsKICAgICAgICBoZWlnaHQ6IDY0cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgcCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAubG9hZGluZy1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLmV2ZW50LXBhdGggewogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgfQogICAgYApdKTsKX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMiwgMSwgVHN2aWV3QWN0aXZpdHlTdHJlYW0pOwoKLy8gdHNfd2ViL2luZGV4LnRzCnZhciBpbml0QXBwID0gYXN5bmMgKCkgPT4gewogIGNvbnNvbGUubG9nKCJUc1ZpZXcgVUkgaW5pdGlhbGl6aW5nLi4uIik7CiAgYXdhaXQgY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQoInRzdmlldy1hcHAiKTsKICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRzdmlldy1hcHAiKSkgewogICAgY29uc3QgYXBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHN2aWV3LWFwcCIpOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhcHApOwogIH0KICBjb25zb2xlLmxvZygiVHNWaWV3IFVJIHJlYWR5Iik7Cn07CmlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAibG9hZGluZyIpIHsKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgaW5pdEFwcCk7Cn0gZWxzZSB7CiAgaW5pdEFwcCgpOwp9Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246CgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvY3NzLXRhZy5qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgICopCgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvcmVhY3RpdmUtZWxlbWVudC5qczoKbGl0LWh0bWwvbGl0LWh0bWwuanM6CmxpdC1lbGVtZW50L2xpdC1lbGVtZW50LmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9wcm9wZXJ0eS5qczoKbGl0LWh0bWwvZGlyZWN0aXZlLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9jdXN0b20tZWxlbWVudC5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvc3RhdGUuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL2V2ZW50LW9wdGlvbnMuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL2Jhc2UuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hbGwuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFzeW5jLmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3NpZ25lZC1ub2Rlcy5qczoKbGl0LWh0bWwvYXN5bmMtZGlyZWN0aXZlLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL3VudGlsLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL2FzeW5jLXJlcGxhY2UuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMvYXN5bmMtYXBwZW5kLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL3JlcGVhdC5qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgICopCgpsaXQtaHRtbC9pcy1zZXJ2ZXIuanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICAqKQoKc3dlZXQtc2Nyb2xsL3N3ZWV0LXNjcm9sbC5qczoKICAoKiEgQHByZXNlcnZlIHN3ZWV0LXNjcm9sbCB2NC4wLjAgLSB0c3V5b3NoaXdhZGEgfCBNSVQgTGljZW5zZSAqKQogICgqISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZQogICAgICB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZQogICAgICBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogIAogICAgICBUSElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCiAgICAgIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQKICAgICAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwKICAgICAgTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC4KICAKICAgICAgU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zCiAgICAgIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKikKCmxpdC1odG1sL3N0YXRpYy5qczoKbGl0LWh0bWwvZGlyZWN0aXZlLWhlbHBlcnMuanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICAqKQoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXNzaWduZWQtZWxlbWVudHMuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMvcHJpdmF0ZS1hc3luYy1oZWxwZXJzLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL2tleWVkLmpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAgKikKCkBmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZS9pbmRleC5tanM6CkBmb3J0YXdlc29tZS9mcmVlLWJyYW5kcy1zdmctaWNvbnMvaW5kZXgubWpzOgpAZm9ydGF3ZXNvbWUvZnJlZS1yZWd1bGFyLXN2Zy1pY29ucy9pbmRleC5tanM6CkBmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9pbmRleC5tanM6CiAgKCohCiAgICogRm9udCBBd2Vzb21lIEZyZWUgNy4xLjAgYnkgQGZvbnRhd2Vzb21lIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20KICAgKiBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIChJY29uczogQ0MgQlkgNC4wLCBGb250czogU0lMIE9GTCAxLjEsIENvZGU6IE1JVCBMaWNlbnNlKQogICAqIENvcHlyaWdodCAyMDI1IEZvbnRpY29ucywgSW5jLgogICAqKQoKbHVjaWRlL2Rpc3QvY2pzL2x1Y2lkZS5qczoKICAoKioKICAgKiBAbGljZW5zZSBsdWNpZGUgdjAuNTYzLjAgLSBJU0MKICAgKgogICAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLgogICAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogICAqKQoKaWJhbnRvb2xzL2pzbmV4dC9pYmFudG9vbHMuanM6CiAgKCohCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgU2HFoWEgSm92YW5pxIcKICAgKiBMaWNlbnNlZCB1bmRlciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyLjAgb3IgdGhlIE1JVCBsaWNlbnNlLAogICAqIGF0IHlvdXIgb3B0aW9uLiBUaGlzIGZpbGUgbWF5IG5vdCBiZSBjb3BpZWQsIG1vZGlmaWVkLCBvciBkaXN0cmlidXRlZAogICAqIGV4Y2VwdCBhY2NvcmRpbmcgdG8gdGhvc2UgdGVybXMuCiAgICogU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU2HFoWEgSm92YW5pxIcKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUIG9yIE1QTC8yLjAKICAgKikKICAoKioKICAgKiBWYWxpZGF0aW9uLCBleHRyYWN0aW9uIGFuZCBjcmVhdGlvbiBvZiBJQkFOLCBCQkFOLCBCSUMvU1dJRlQgbnVtYmVycyBwbHVzIHNvbWUgb3RoZXIgaGVscGZ1bCBzdHVmZgogICAqIEBwYWNrYWdlIERvY3VtZW50YXRpb24KICAgKiBAYXV0aG9yIFNhxaFhIEpvdmFuacSHCiAgICogQG1vZHVsZSBpYmFudG9vbHMKICAgKiBAdmVyc2lvbiA0LjUuMQogICAqIEBsaWNlbnNlIE1JVCBvciBNUEwtMi4wCiAgICogQHByZWZlcnJlZAogICAqKQoqLwovLyMgc291cmNlTWFwcGluZ1VSTD1idW5kbGUtMTc2OTQzMTY2NDgzNy5qcy5tYXAK" + "contentBase64": "dmFyIF9fY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTsKdmFyIF9fZnJlZXplID0gT2JqZWN0LmZyZWV6ZTsKdmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTsKdmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwp2YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lczsKdmFyIF9fZ2V0UHJvdG9PZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjsKdmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CnZhciBfX2tub3duU3ltYm9sID0gKG5hbWUsIHN5bWJvbCkgPT4gKHN5bWJvbCA9IFN5bWJvbFtuYW1lXSkgPyBzeW1ib2wgOiAvKiBAX19QVVJFX18gKi8gU3ltYm9sLmZvcigiU3ltYm9sLiIgKyBuYW1lKTsKdmFyIF9fdHlwZUVycm9yID0gKG1zZykgPT4gewogIHRocm93IFR5cGVFcnJvcihtc2cpOwp9Owp2YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5MiwgdmFsdWUyKSA9PiBrZXkyIGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleTIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlMiB9KSA6IG9ialtrZXkyXSA9IHZhbHVlMjsKdmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlMikgPT4gX19kZWZQcm9wKHRhcmdldCwgIm5hbWUiLCB7IHZhbHVlOiB2YWx1ZTIsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTsKdmFyIF9fcmVxdWlyZSA9IC8qIEBfX1BVUkVfXyAqLyAoKHgzKSA9PiB0eXBlb2YgcmVxdWlyZSAhPT0gInVuZGVmaW5lZCIgPyByZXF1aXJlIDogdHlwZW9mIFByb3h5ICE9PSAidW5kZWZpbmVkIiA/IG5ldyBQcm94eSh4MywgewogIGdldDogKGE1LCBiNSkgPT4gKHR5cGVvZiByZXF1aXJlICE9PSAidW5kZWZpbmVkIiA/IHJlcXVpcmUgOiBhNSlbYjVdCn0pIDogeDMpKGZ1bmN0aW9uKHgzKSB7CiAgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAidW5kZWZpbmVkIikgcmV0dXJuIHJlcXVpcmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICB0aHJvdyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mICInICsgeDMgKyAnIiBpcyBub3Qgc3VwcG9ydGVkJyk7Cn0pOwp2YXIgX19lc20gPSAoZm4sIHJlcykgPT4gZnVuY3Rpb24gX19pbml0KCkgewogIHJldHVybiBmbiAmJiAocmVzID0gKDAsIGZuW19fZ2V0T3duUHJvcE5hbWVzKGZuKVswXV0pKGZuID0gMCkpLCByZXM7Cn07CnZhciBfX2NvbW1vbkpTID0gKGNiLCBtb2QpID0+IGZ1bmN0aW9uIF9fcmVxdWlyZTIoKSB7CiAgcmV0dXJuIG1vZCB8fCAoMCwgY2JbX19nZXRPd25Qcm9wTmFtZXMoY2IpWzBdXSkoKG1vZCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbW9kKSwgbW9kLmV4cG9ydHM7Cn07CnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbDMpID0+IHsKICBmb3IgKHZhciBuYW1lIGluIGFsbDMpCiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsM1tuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTsKfTsKdmFyIF9fY29weVByb3BzID0gKHRvMiwgZnJvbTIsIGV4Y2VwdCwgZGVzYykgPT4gewogIGlmIChmcm9tMiAmJiB0eXBlb2YgZnJvbTIgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBmcm9tMiA9PT0gImZ1bmN0aW9uIikgewogICAgZm9yIChsZXQga2V5MiBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tMikpCiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8yLCBrZXkyKSAmJiBrZXkyICE9PSBleGNlcHQpCiAgICAgICAgX19kZWZQcm9wKHRvMiwga2V5MiwgeyBnZXQ6ICgpID0+IGZyb20yW2tleTJdLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20yLCBrZXkyKSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pOwogIH0KICByZXR1cm4gdG8yOwp9Owp2YXIgX190b0VTTSA9IChtb2QsIGlzTm9kZU1vZGUsIHRhcmdldCkgPT4gKHRhcmdldCA9IG1vZCAhPSBudWxsID8gX19jcmVhdGUoX19nZXRQcm90b09mKG1vZCkpIDoge30sIF9fY29weVByb3BzKAogIC8vIElmIHRoZSBpbXBvcnRlciBpcyBpbiBub2RlIGNvbXBhdGliaWxpdHkgbW9kZSBvciB0aGlzIGlzIG5vdCBhbiBFU00KICAvLyBmaWxlIHRoYXQgaGFzIGJlZW4gY29udmVydGVkIHRvIGEgQ29tbW9uSlMgZmlsZSB1c2luZyBhIEJhYmVsLQogIC8vIGNvbXBhdGlibGUgdHJhbnNmb3JtIChpLmUuICJfX2VzTW9kdWxlIiBoYXMgbm90IGJlZW4gc2V0KSwgdGhlbiBzZXQKICAvLyAiZGVmYXVsdCIgdG8gdGhlIENvbW1vbkpTICJtb2R1bGUuZXhwb3J0cyIgZm9yIG5vZGUgY29tcGF0aWJpbGl0eS4KICBpc05vZGVNb2RlIHx8ICFtb2QgfHwgIW1vZC5fX2VzTW9kdWxlID8gX19kZWZQcm9wKHRhcmdldCwgImRlZmF1bHQiLCB7IHZhbHVlOiBtb2QsIGVudW1lcmFibGU6IHRydWUgfSkgOiB0YXJnZXQsCiAgbW9kCikpOwp2YXIgX19kZWNvcmF0b3JTdGFydCA9IChiYXNlKSA9PiBbLCAsICwgX19jcmVhdGUoYmFzZT8uW19fa25vd25TeW1ib2woIm1ldGFkYXRhIildID8/IG51bGwpXTsKdmFyIF9fZGVjb3JhdG9yU3RyaW5ncyA9IFsiY2xhc3MiLCAibWV0aG9kIiwgImdldHRlciIsICJzZXR0ZXIiLCAiYWNjZXNzb3IiLCAiZmllbGQiLCAidmFsdWUiLCAiZ2V0IiwgInNldCJdOwp2YXIgX19leHBlY3RGbiA9IChmbikgPT4gZm4gIT09IHZvaWQgMCAmJiB0eXBlb2YgZm4gIT09ICJmdW5jdGlvbiIgPyBfX3R5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKSA6IGZuOwp2YXIgX19kZWNvcmF0b3JDb250ZXh0ID0gKGtpbmQsIG5hbWUsIGRvbmUsIG1ldGFkYXRhLCBmbnMpID0+ICh7IGtpbmQ6IF9fZGVjb3JhdG9yU3RyaW5nc1traW5kXSwgbmFtZSwgbWV0YWRhdGEsIGFkZEluaXRpYWxpemVyOiAoZm4pID0+IGRvbmUuXyA/IF9fdHlwZUVycm9yKCJBbHJlYWR5IGluaXRpYWxpemVkIikgOiBmbnMucHVzaChfX2V4cGVjdEZuKGZuIHx8IG51bGwpKSB9KTsKdmFyIF9fZGVjb3JhdG9yTWV0YWRhdGEgPSAoYXJyYXksIHRhcmdldCkgPT4gX19kZWZOb3JtYWxQcm9wKHRhcmdldCwgX19rbm93blN5bWJvbCgibWV0YWRhdGEiKSwgYXJyYXlbM10pOwp2YXIgX19ydW5Jbml0aWFsaXplcnMgPSAoYXJyYXksIGZsYWdzLCBzZWxmMiwgdmFsdWUyKSA9PiB7CiAgZm9yICh2YXIgaTExID0gMCwgZm5zID0gYXJyYXlbZmxhZ3MgPj4gMV0sIG4xMyA9IGZucyAmJiBmbnMubGVuZ3RoOyBpMTEgPCBuMTM7IGkxMSsrKSBmbGFncyAmIDEgPyBmbnNbaTExXS5jYWxsKHNlbGYyKSA6IHZhbHVlMiA9IGZuc1tpMTFdLmNhbGwoc2VsZjIsIHZhbHVlMik7CiAgcmV0dXJuIHZhbHVlMjsKfTsKdmFyIF9fZGVjb3JhdGVFbGVtZW50ID0gKGFycmF5LCBmbGFncywgbmFtZSwgZGVjb3JhdG9ycywgdGFyZ2V0LCBleHRyYSkgPT4gewogIHZhciBmbiwgaXQsIGRvbmUsIGN0eCwgYWNjZXNzLCBrNCA9IGZsYWdzICYgNywgczkgPSAhIShmbGFncyAmIDgpLCBwNyA9ICEhKGZsYWdzICYgMTYpOwogIHZhciBqNCA9IGs0ID4gMyA/IGFycmF5Lmxlbmd0aCArIDEgOiBrNCA/IHM5ID8gMSA6IDIgOiAwLCBrZXkyID0gX19kZWNvcmF0b3JTdHJpbmdzW2s0ICsgNV07CiAgdmFyIGluaXRpYWxpemVycyA9IGs0ID4gMyAmJiAoYXJyYXlbajQgLSAxXSA9IFtdKSwgZXh0cmFJbml0aWFsaXplcnMgPSBhcnJheVtqNF0gfHwgKGFycmF5W2o0XSA9IFtdKTsKICB2YXIgZGVzYyA9IGs0ICYmICghcDcgJiYgIXM5ICYmICh0YXJnZXQgPSB0YXJnZXQucHJvdG90eXBlKSwgazQgPCA1ICYmIChrNCA+IDMgfHwgIXA3KSAmJiBfX2dldE93blByb3BEZXNjKGs0IDwgNCA/IHRhcmdldCA6IHsgZ2V0IFtuYW1lXSgpIHsKICAgIHJldHVybiBfX3ByaXZhdGVHZXQodGhpcywgZXh0cmEpOwogIH0sIHNldCBbbmFtZV0oeDMpIHsKICAgIHJldHVybiBfX3ByaXZhdGVTZXQodGhpcywgZXh0cmEsIHgzKTsKICB9IH0sIG5hbWUpKTsKICBrNCA/IHA3ICYmIGs0IDwgNCAmJiBfX25hbWUoZXh0cmEsIChrNCA+IDIgPyAic2V0ICIgOiBrNCA+IDEgPyAiZ2V0ICIgOiAiIikgKyBuYW1lKSA6IF9fbmFtZSh0YXJnZXQsIG5hbWUpOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICBjdHggPSBfX2RlY29yYXRvckNvbnRleHQoazQsIG5hbWUsIGRvbmUgPSB7fSwgYXJyYXlbM10sIGV4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGlmIChrNCkgewogICAgICBjdHguc3RhdGljID0gczksIGN0eC5wcml2YXRlID0gcDcsIGFjY2VzcyA9IGN0eC5hY2Nlc3MgPSB7IGhhczogcDcgPyAoeDMpID0+IF9fcHJpdmF0ZUluKHRhcmdldCwgeDMpIDogKHgzKSA9PiBuYW1lIGluIHgzIH07CiAgICAgIGlmIChrNCBeIDMpIGFjY2Vzcy5nZXQgPSBwNyA/ICh4MykgPT4gKGs0IF4gMSA/IF9fcHJpdmF0ZUdldCA6IF9fcHJpdmF0ZU1ldGhvZCkoeDMsIHRhcmdldCwgazQgXiA0ID8gZXh0cmEgOiBkZXNjLmdldCkgOiAoeDMpID0+IHgzW25hbWVdOwogICAgICBpZiAoazQgPiAyKSBhY2Nlc3Muc2V0ID0gcDcgPyAoeDMsIHk1KSA9PiBfX3ByaXZhdGVTZXQoeDMsIHRhcmdldCwgeTUsIGs0IF4gNCA/IGV4dHJhIDogZGVzYy5zZXQpIDogKHgzLCB5NSkgPT4geDNbbmFtZV0gPSB5NTsKICAgIH0KICAgIGl0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoazQgPyBrNCA8IDQgPyBwNyA/IGV4dHJhIDogZGVzY1trZXkyXSA6IGs0ID4gNCA/IHZvaWQgMCA6IHsgZ2V0OiBkZXNjLmdldCwgc2V0OiBkZXNjLnNldCB9IDogdGFyZ2V0LCBjdHgpLCBkb25lLl8gPSAxOwogICAgaWYgKGs0IF4gNCB8fCBpdCA9PT0gdm9pZCAwKSBfX2V4cGVjdEZuKGl0KSAmJiAoazQgPiA0ID8gaW5pdGlhbGl6ZXJzLnVuc2hpZnQoaXQpIDogazQgPyBwNyA/IGV4dHJhID0gaXQgOiBkZXNjW2tleTJdID0gaXQgOiB0YXJnZXQgPSBpdCk7CiAgICBlbHNlIGlmICh0eXBlb2YgaXQgIT09ICJvYmplY3QiIHx8IGl0ID09PSBudWxsKSBfX3R5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICBlbHNlIF9fZXhwZWN0Rm4oZm4gPSBpdC5nZXQpICYmIChkZXNjLmdldCA9IGZuKSwgX19leHBlY3RGbihmbiA9IGl0LnNldCkgJiYgKGRlc2Muc2V0ID0gZm4pLCBfX2V4cGVjdEZuKGZuID0gaXQuaW5pdCkgJiYgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoZm4pOwogIH0KICByZXR1cm4gazQgfHwgX19kZWNvcmF0b3JNZXRhZGF0YShhcnJheSwgdGFyZ2V0KSwgZGVzYyAmJiBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCBkZXNjKSwgcDcgPyBrNCBeIDQgPyBleHRyYSA6IGRlc2MgOiB0YXJnZXQ7Cn07CnZhciBfX3B1YmxpY0ZpZWxkID0gKG9iaiwga2V5MiwgdmFsdWUyKSA9PiBfX2RlZk5vcm1hbFByb3Aob2JqLCB0eXBlb2Yga2V5MiAhPT0gInN5bWJvbCIgPyBrZXkyICsgIiIgOiBrZXkyLCB2YWx1ZTIpOwp2YXIgX19hY2Nlc3NDaGVjayA9IChvYmosIG1lbWJlciwgbXNnKSA9PiBtZW1iZXIuaGFzKG9iaikgfHwgX190eXBlRXJyb3IoIkNhbm5vdCAiICsgbXNnKTsKdmFyIF9fcHJpdmF0ZUluID0gKG1lbWJlciwgb2JqKSA9PiBPYmplY3Qob2JqKSAhPT0gb2JqID8gX190eXBlRXJyb3IoJ0Nhbm5vdCB1c2UgdGhlICJpbiIgb3BlcmF0b3Igb24gdGhpcyB2YWx1ZScpIDogbWVtYmVyLmhhcyhvYmopOwp2YXIgX19wcml2YXRlR2V0ID0gKG9iaiwgbWVtYmVyLCBnZXR0ZXIpID0+IChfX2FjY2Vzc0NoZWNrKG9iaiwgbWVtYmVyLCAicmVhZCBmcm9tIHByaXZhdGUgZmllbGQiKSwgZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IG1lbWJlci5nZXQob2JqKSk7CnZhciBfX3ByaXZhdGVBZGQgPSAob2JqLCBtZW1iZXIsIHZhbHVlMikgPT4gbWVtYmVyLmhhcyhvYmopID8gX190eXBlRXJyb3IoIkNhbm5vdCBhZGQgdGhlIHNhbWUgcHJpdmF0ZSBtZW1iZXIgbW9yZSB0aGFuIG9uY2UiKSA6IG1lbWJlciBpbnN0YW5jZW9mIFdlYWtTZXQgPyBtZW1iZXIuYWRkKG9iaikgOiBtZW1iZXIuc2V0KG9iaiwgdmFsdWUyKTsKdmFyIF9fcHJpdmF0ZVNldCA9IChvYmosIG1lbWJlciwgdmFsdWUyLCBzZXR0ZXIpID0+IChfX2FjY2Vzc0NoZWNrKG9iaiwgbWVtYmVyLCAid3JpdGUgdG8gcHJpdmF0ZSBmaWVsZCIpLCBzZXR0ZXIgPyBzZXR0ZXIuY2FsbChvYmosIHZhbHVlMikgOiBtZW1iZXIuc2V0KG9iaiwgdmFsdWUyKSwgdmFsdWUyKTsKdmFyIF9fcHJpdmF0ZU1ldGhvZCA9IChvYmosIG1lbWJlciwgbWV0aG9kKSA9PiAoX19hY2Nlc3NDaGVjayhvYmosIG1lbWJlciwgImFjY2VzcyBwcml2YXRlIG1ldGhvZCIpLCBtZXRob2QpOwp2YXIgX190ZW1wbGF0ZSA9IChjb29rZWQsIHJhdzIpID0+IF9fZnJlZXplKF9fZGVmUHJvcChjb29rZWQsICJyYXciLCB7IHZhbHVlOiBfX2ZyZWV6ZShyYXcyIHx8IGNvb2tlZC5zbGljZSgpKSB9KSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvY3NzLXRhZy5qcwp2YXIgdCwgZSwgcywgbywgbiwgciwgaSwgUywgYzsKdmFyIGluaXRfY3NzX3RhZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2Nzcy10YWcuanMiKCkgewogICAgdCA9IGdsb2JhbFRoaXMsIGUgPSB0LlNoYWRvd1Jvb3QgJiYgKHZvaWQgMCA9PT0gdC5TaGFkeUNTUyB8fCB0LlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdykgJiYgImFkb3B0ZWRTdHlsZVNoZWV0cyIgaW4gRG9jdW1lbnQucHJvdG90eXBlICYmICJyZXBsYWNlIiBpbiBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZSwgcyA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woKSwgbyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogICAgbiA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodDksIGUxMSwgbzEzKSB7CiAgICAgICAgaWYgKHRoaXMuXyRjc3NSZXN1bHQkID0gdHJ1ZSwgbzEzICE9PSBzKSB0aHJvdyBFcnJvcigiQ1NTUmVzdWx0IGlzIG5vdCBjb25zdHJ1Y3RhYmxlLiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AgaW5zdGVhZC4iKTsKICAgICAgICB0aGlzLmNzc1RleHQgPSB0OSwgdGhpcy50ID0gZTExOwogICAgICB9CiAgICAgIGdldCBzdHlsZVNoZWV0KCkgewogICAgICAgIGxldCB0OSA9IHRoaXMubzsKICAgICAgICBjb25zdCBzOSA9IHRoaXMudDsKICAgICAgICBpZiAoZSAmJiB2b2lkIDAgPT09IHQ5KSB7CiAgICAgICAgICBjb25zdCBlMTEgPSB2b2lkIDAgIT09IHM5ICYmIDEgPT09IHM5Lmxlbmd0aDsKICAgICAgICAgIGUxMSAmJiAodDkgPSBvLmdldChzOSkpLCB2b2lkIDAgPT09IHQ5ICYmICgodGhpcy5vID0gdDkgPSBuZXcgQ1NTU3R5bGVTaGVldCgpKS5yZXBsYWNlU3luYyh0aGlzLmNzc1RleHQpLCBlMTEgJiYgby5zZXQoczksIHQ5KSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0OTsKICAgICAgfQogICAgICB0b1N0cmluZygpIHsKICAgICAgICByZXR1cm4gdGhpcy5jc3NUZXh0OwogICAgICB9CiAgICB9OwogICAgciA9ICh0OSkgPT4gbmV3IG4oInN0cmluZyIgPT0gdHlwZW9mIHQ5ID8gdDkgOiB0OSArICIiLCB2b2lkIDAsIHMpLCBpID0gKHQ5LCAuLi5lMTEpID0+IHsKICAgICAgY29uc3QgbzEzID0gMSA9PT0gdDkubGVuZ3RoID8gdDlbMF0gOiBlMTEucmVkdWNlKChlMTIsIHM5LCBvMTQpID0+IGUxMiArICgodDEwKSA9PiB7CiAgICAgICAgaWYgKHRydWUgPT09IHQxMC5fJGNzc1Jlc3VsdCQpIHJldHVybiB0MTAuY3NzVGV4dDsKICAgICAgICBpZiAoIm51bWJlciIgPT0gdHlwZW9mIHQxMCkgcmV0dXJuIHQxMDsKICAgICAgICB0aHJvdyBFcnJvcigiVmFsdWUgcGFzc2VkIHRvICdjc3MnIGZ1bmN0aW9uIG11c3QgYmUgYSAnY3NzJyBmdW5jdGlvbiByZXN1bHQ6ICIgKyB0MTAgKyAiLiBVc2UgJ3Vuc2FmZUNTUycgdG8gcGFzcyBub24tbGl0ZXJhbCB2YWx1ZXMsIGJ1dCB0YWtlIGNhcmUgdG8gZW5zdXJlIHBhZ2Ugc2VjdXJpdHkuIik7CiAgICAgIH0pKHM5KSArIHQ5W28xNCArIDFdLCB0OVswXSk7CiAgICAgIHJldHVybiBuZXcgbihvMTMsIHQ5LCBzKTsKICAgIH0sIFMgPSAoczksIG8xMykgPT4gewogICAgICBpZiAoZSkgczkuYWRvcHRlZFN0eWxlU2hlZXRzID0gbzEzLm1hcCgodDkpID0+IHQ5IGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCA/IHQ5IDogdDkuc3R5bGVTaGVldCk7CiAgICAgIGVsc2UgZm9yIChjb25zdCBlMTEgb2YgbzEzKSB7CiAgICAgICAgY29uc3QgbzE0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSwgbjEzID0gdC5saXROb25jZTsKICAgICAgICB2b2lkIDAgIT09IG4xMyAmJiBvMTQuc2V0QXR0cmlidXRlKCJub25jZSIsIG4xMyksIG8xNC50ZXh0Q29udGVudCA9IGUxMS5jc3NUZXh0LCBzOS5hcHBlbmRDaGlsZChvMTQpOwogICAgICB9CiAgICB9LCBjID0gZSA/ICh0OSkgPT4gdDkgOiAodDkpID0+IHQ5IGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCA/ICgodDEwKSA9PiB7CiAgICAgIGxldCBlMTEgPSAiIjsKICAgICAgZm9yIChjb25zdCBzOSBvZiB0MTAuY3NzUnVsZXMpIGUxMSArPSBzOS5jc3NUZXh0OwogICAgICByZXR1cm4gcihlMTEpOwogICAgfSkodDkpIDogdDk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9yZWFjdGl2ZS1lbGVtZW50LmpzCnZhciBpMiwgZTIsIGgsIHIyLCBvMiwgbjIsIGEsIGMyLCBsLCBwLCBkLCB1LCBmLCBiLCB5Owp2YXIgaW5pdF9yZWFjdGl2ZV9lbGVtZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvcmVhY3RpdmUtZWxlbWVudC5qcyIoKSB7CiAgICBpbml0X2Nzc190YWcoKTsKICAgIGluaXRfY3NzX3RhZygpOwogICAgKHsgaXM6IGkyLCBkZWZpbmVQcm9wZXJ0eTogZTIsIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogaCwgZ2V0T3duUHJvcGVydHlOYW1lczogcjIsIGdldE93blByb3BlcnR5U3ltYm9sczogbzIsIGdldFByb3RvdHlwZU9mOiBuMiB9ID0gT2JqZWN0KSwgYSA9IGdsb2JhbFRoaXMsIGMyID0gYS50cnVzdGVkVHlwZXMsIGwgPSBjMiA/IGMyLmVtcHR5U2NyaXB0IDogIiIsIHAgPSBhLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCwgZCA9ICh0OSwgczkpID0+IHQ5LCB1ID0geyB0b0F0dHJpYnV0ZSh0OSwgczkpIHsKICAgICAgc3dpdGNoIChzOSkgewogICAgICAgIGNhc2UgQm9vbGVhbjoKICAgICAgICAgIHQ5ID0gdDkgPyBsIDogbnVsbDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgT2JqZWN0OgogICAgICAgIGNhc2UgQXJyYXk6CiAgICAgICAgICB0OSA9IG51bGwgPT0gdDkgPyB0OSA6IEpTT04uc3RyaW5naWZ5KHQ5KTsKICAgICAgfQogICAgICByZXR1cm4gdDk7CiAgICB9LCBmcm9tQXR0cmlidXRlKHQ5LCBzOSkgewogICAgICBsZXQgaTExID0gdDk7CiAgICAgIHN3aXRjaCAoczkpIHsKICAgICAgICBjYXNlIEJvb2xlYW46CiAgICAgICAgICBpMTEgPSBudWxsICE9PSB0OTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTnVtYmVyOgogICAgICAgICAgaTExID0gbnVsbCA9PT0gdDkgPyBudWxsIDogTnVtYmVyKHQ5KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgT2JqZWN0OgogICAgICAgIGNhc2UgQXJyYXk6CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpMTEgPSBKU09OLnBhcnNlKHQ5KTsKICAgICAgICAgIH0gY2F0Y2ggKHQxMCkgewogICAgICAgICAgICBpMTEgPSBudWxsOwogICAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBpMTE7CiAgICB9IH0sIGYgPSAodDksIHM5KSA9PiAhaTIodDksIHM5KSwgYiA9IHsgYXR0cmlidXRlOiB0cnVlLCB0eXBlOiBTdHJpbmcsIGNvbnZlcnRlcjogdSwgcmVmbGVjdDogZmFsc2UsIHVzZURlZmF1bHQ6IGZhbHNlLCBoYXNDaGFuZ2VkOiBmIH07CiAgICBTeW1ib2wubWV0YWRhdGEgPz89IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woIm1ldGFkYXRhIiksIGEubGl0UHJvcGVydHlNZXRhZGF0YSA/Pz0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgICB5ID0gY2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudCB7CiAgICAgIHN0YXRpYyBhZGRJbml0aWFsaXplcih0OSkgewogICAgICAgIHRoaXMuXyRFaSgpLCAodGhpcy5sID8/PSBbXSkucHVzaCh0OSk7CiAgICAgIH0KICAgICAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUoKSwgdGhpcy5fJEVoICYmIFsuLi50aGlzLl8kRWgua2V5cygpXTsKICAgICAgfQogICAgICBzdGF0aWMgY3JlYXRlUHJvcGVydHkodDksIHM5ID0gYikgewogICAgICAgIGlmIChzOS5zdGF0ZSAmJiAoczkuYXR0cmlidXRlID0gZmFsc2UpLCB0aGlzLl8kRWkoKSwgdGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkodDkpICYmICgoczkgPSBPYmplY3QuY3JlYXRlKHM5KSkud3JhcHBlZCA9IHRydWUpLCB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldCh0OSwgczkpLCAhczkubm9BY2Nlc3NvcikgewogICAgICAgICAgY29uc3QgaTExID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpLCBoOSA9IHRoaXMuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQ5LCBpMTEsIHM5KTsKICAgICAgICAgIHZvaWQgMCAhPT0gaDkgJiYgZTIodGhpcy5wcm90b3R5cGUsIHQ5LCBoOSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRpYyBnZXRQcm9wZXJ0eURlc2NyaXB0b3IodDksIHM5LCBpMTEpIHsKICAgICAgICBjb25zdCB7IGdldDogZTExLCBzZXQ6IHIxMSB9ID0gaCh0aGlzLnByb3RvdHlwZSwgdDkpID8/IHsgZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXNbczldOwogICAgICAgIH0sIHNldCh0MTApIHsKICAgICAgICAgIHRoaXNbczldID0gdDEwOwogICAgICAgIH0gfTsKICAgICAgICByZXR1cm4geyBnZXQ6IGUxMSwgc2V0KHMxMCkgewogICAgICAgICAgY29uc3QgaDkgPSBlMTE/LmNhbGwodGhpcyk7CiAgICAgICAgICByMTE/LmNhbGwodGhpcywgczEwKSwgdGhpcy5yZXF1ZXN0VXBkYXRlKHQ5LCBoOSwgaTExKTsKICAgICAgICB9LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfTsKICAgICAgfQogICAgICBzdGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKHQ5KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZ2V0KHQ5KSA/PyBiOwogICAgICB9CiAgICAgIHN0YXRpYyBfJEVpKCkgewogICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGQoImVsZW1lbnRQcm9wZXJ0aWVzIikpKSByZXR1cm47CiAgICAgICAgY29uc3QgdDkgPSBuMih0aGlzKTsKICAgICAgICB0OS5maW5hbGl6ZSgpLCB2b2lkIDAgIT09IHQ5LmwgJiYgKHRoaXMubCA9IFsuLi50OS5sXSksIHRoaXMuZWxlbWVudFByb3BlcnRpZXMgPSBuZXcgTWFwKHQ5LmVsZW1lbnRQcm9wZXJ0aWVzKTsKICAgICAgfQogICAgICBzdGF0aWMgZmluYWxpemUoKSB7CiAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZCgiZmluYWxpemVkIikpKSByZXR1cm47CiAgICAgICAgaWYgKHRoaXMuZmluYWxpemVkID0gdHJ1ZSwgdGhpcy5fJEVpKCksIHRoaXMuaGFzT3duUHJvcGVydHkoZCgicHJvcGVydGllcyIpKSkgewogICAgICAgICAgY29uc3QgdDEwID0gdGhpcy5wcm9wZXJ0aWVzLCBzOSA9IFsuLi5yMih0MTApLCAuLi5vMih0MTApXTsKICAgICAgICAgIGZvciAoY29uc3QgaTExIG9mIHM5KSB0aGlzLmNyZWF0ZVByb3BlcnR5KGkxMSwgdDEwW2kxMV0pOwogICAgICAgIH0KICAgICAgICBjb25zdCB0OSA9IHRoaXNbU3ltYm9sLm1ldGFkYXRhXTsKICAgICAgICBpZiAobnVsbCAhPT0gdDkpIHsKICAgICAgICAgIGNvbnN0IHM5ID0gbGl0UHJvcGVydHlNZXRhZGF0YS5nZXQodDkpOwogICAgICAgICAgaWYgKHZvaWQgMCAhPT0gczkpIGZvciAoY29uc3QgW3QxMCwgaTExXSBvZiBzOSkgdGhpcy5lbGVtZW50UHJvcGVydGllcy5zZXQodDEwLCBpMTEpOwogICAgICAgIH0KICAgICAgICB0aGlzLl8kRWggPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIGZvciAoY29uc3QgW3QxMCwgczldIG9mIHRoaXMuZWxlbWVudFByb3BlcnRpZXMpIHsKICAgICAgICAgIGNvbnN0IGkxMSA9IHRoaXMuXyRFdSh0MTAsIHM5KTsKICAgICAgICAgIHZvaWQgMCAhPT0gaTExICYmIHRoaXMuXyRFaC5zZXQoaTExLCB0MTApOwogICAgICAgIH0KICAgICAgICB0aGlzLmVsZW1lbnRTdHlsZXMgPSB0aGlzLmZpbmFsaXplU3R5bGVzKHRoaXMuc3R5bGVzKTsKICAgICAgfQogICAgICBzdGF0aWMgZmluYWxpemVTdHlsZXMoczkpIHsKICAgICAgICBjb25zdCBpMTEgPSBbXTsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzOSkpIHsKICAgICAgICAgIGNvbnN0IGUxMSA9IG5ldyBTZXQoczkuZmxhdCgxIC8gMCkucmV2ZXJzZSgpKTsKICAgICAgICAgIGZvciAoY29uc3QgczEwIG9mIGUxMSkgaTExLnVuc2hpZnQoYyhzMTApKTsKICAgICAgICB9IGVsc2Ugdm9pZCAwICE9PSBzOSAmJiBpMTEucHVzaChjKHM5KSk7CiAgICAgICAgcmV0dXJuIGkxMTsKICAgICAgfQogICAgICBzdGF0aWMgXyRFdSh0OSwgczkpIHsKICAgICAgICBjb25zdCBpMTEgPSBzOS5hdHRyaWJ1dGU7CiAgICAgICAgcmV0dXJuIGZhbHNlID09PSBpMTEgPyB2b2lkIDAgOiAic3RyaW5nIiA9PSB0eXBlb2YgaTExID8gaTExIDogInN0cmluZyIgPT0gdHlwZW9mIHQ5ID8gdDkudG9Mb3dlckNhc2UoKSA6IHZvaWQgMDsKICAgICAgfQogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlcigpLCB0aGlzLl8kRXAgPSB2b2lkIDAsIHRoaXMuaXNVcGRhdGVQZW5kaW5nID0gZmFsc2UsIHRoaXMuaGFzVXBkYXRlZCA9IGZhbHNlLCB0aGlzLl8kRW0gPSBudWxsLCB0aGlzLl8kRXYoKTsKICAgICAgfQogICAgICBfJEV2KCkgewogICAgICAgIHRoaXMuXyRFUyA9IG5ldyBQcm9taXNlKCh0OSkgPT4gdGhpcy5lbmFibGVVcGRhdGluZyA9IHQ5KSwgdGhpcy5fJEFMID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgdGhpcy5fJEVfKCksIHRoaXMucmVxdWVzdFVwZGF0ZSgpLCB0aGlzLmNvbnN0cnVjdG9yLmw/LmZvckVhY2goKHQ5KSA9PiB0OSh0aGlzKSk7CiAgICAgIH0KICAgICAgYWRkQ29udHJvbGxlcih0OSkgewogICAgICAgICh0aGlzLl8kRU8gPz89IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpLmFkZCh0OSksIHZvaWQgMCAhPT0gdGhpcy5yZW5kZXJSb290ICYmIHRoaXMuaXNDb25uZWN0ZWQgJiYgdDkuaG9zdENvbm5lY3RlZD8uKCk7CiAgICAgIH0KICAgICAgcmVtb3ZlQ29udHJvbGxlcih0OSkgewogICAgICAgIHRoaXMuXyRFTz8uZGVsZXRlKHQ5KTsKICAgICAgfQogICAgICBfJEVfKCkgewogICAgICAgIGNvbnN0IHQ5ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgczkgPSB0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzOwogICAgICAgIGZvciAoY29uc3QgaTExIG9mIHM5LmtleXMoKSkgdGhpcy5oYXNPd25Qcm9wZXJ0eShpMTEpICYmICh0OS5zZXQoaTExLCB0aGlzW2kxMV0pLCBkZWxldGUgdGhpc1tpMTFdKTsKICAgICAgICB0OS5zaXplID4gMCAmJiAodGhpcy5fJEVwID0gdDkpOwogICAgICB9CiAgICAgIGNyZWF0ZVJlbmRlclJvb3QoKSB7CiAgICAgICAgY29uc3QgdDkgPSB0aGlzLnNoYWRvd1Jvb3QgPz8gdGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25zdHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyk7CiAgICAgICAgcmV0dXJuIFModDksIHRoaXMuY29uc3RydWN0b3IuZWxlbWVudFN0eWxlcyksIHQ5OwogICAgICB9CiAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHRoaXMucmVuZGVyUm9vdCA/Pz0gdGhpcy5jcmVhdGVSZW5kZXJSb290KCksIHRoaXMuZW5hYmxlVXBkYXRpbmcodHJ1ZSksIHRoaXMuXyRFTz8uZm9yRWFjaCgodDkpID0+IHQ5Lmhvc3RDb25uZWN0ZWQ/LigpKTsKICAgICAgfQogICAgICBlbmFibGVVcGRhdGluZyh0OSkgewogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHRoaXMuXyRFTz8uZm9yRWFjaCgodDkpID0+IHQ5Lmhvc3REaXNjb25uZWN0ZWQ/LigpKTsKICAgICAgfQogICAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodDksIHM5LCBpMTEpIHsKICAgICAgICB0aGlzLl8kQUsodDksIGkxMSk7CiAgICAgIH0KICAgICAgXyRFVCh0OSwgczkpIHsKICAgICAgICBjb25zdCBpMTEgPSB0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzLmdldCh0OSksIGUxMSA9IHRoaXMuY29uc3RydWN0b3IuXyRFdSh0OSwgaTExKTsKICAgICAgICBpZiAodm9pZCAwICE9PSBlMTEgJiYgdHJ1ZSA9PT0gaTExLnJlZmxlY3QpIHsKICAgICAgICAgIGNvbnN0IGg5ID0gKHZvaWQgMCAhPT0gaTExLmNvbnZlcnRlcj8udG9BdHRyaWJ1dGUgPyBpMTEuY29udmVydGVyIDogdSkudG9BdHRyaWJ1dGUoczksIGkxMS50eXBlKTsKICAgICAgICAgIHRoaXMuXyRFbSA9IHQ5LCBudWxsID09IGg5ID8gdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZTExKSA6IHRoaXMuc2V0QXR0cmlidXRlKGUxMSwgaDkpLCB0aGlzLl8kRW0gPSBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgICBfJEFLKHQ5LCBzOSkgewogICAgICAgIGNvbnN0IGkxMSA9IHRoaXMuY29uc3RydWN0b3IsIGUxMSA9IGkxMS5fJEVoLmdldCh0OSk7CiAgICAgICAgaWYgKHZvaWQgMCAhPT0gZTExICYmIHRoaXMuXyRFbSAhPT0gZTExKSB7CiAgICAgICAgICBjb25zdCB0MTAgPSBpMTEuZ2V0UHJvcGVydHlPcHRpb25zKGUxMSksIGg5ID0gImZ1bmN0aW9uIiA9PSB0eXBlb2YgdDEwLmNvbnZlcnRlciA/IHsgZnJvbUF0dHJpYnV0ZTogdDEwLmNvbnZlcnRlciB9IDogdm9pZCAwICE9PSB0MTAuY29udmVydGVyPy5mcm9tQXR0cmlidXRlID8gdDEwLmNvbnZlcnRlciA6IHU7CiAgICAgICAgICB0aGlzLl8kRW0gPSBlMTE7CiAgICAgICAgICBjb25zdCByMTEgPSBoOS5mcm9tQXR0cmlidXRlKHM5LCB0MTAudHlwZSk7CiAgICAgICAgICB0aGlzW2UxMV0gPSByMTEgPz8gdGhpcy5fJEVqPy5nZXQoZTExKSA/PyByMTEsIHRoaXMuXyRFbSA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlcXVlc3RVcGRhdGUodDksIHM5LCBpMTEsIGUxMSA9IGZhbHNlLCBoOSkgewogICAgICAgIGlmICh2b2lkIDAgIT09IHQ5KSB7CiAgICAgICAgICBjb25zdCByMTEgPSB0aGlzLmNvbnN0cnVjdG9yOwogICAgICAgICAgaWYgKGZhbHNlID09PSBlMTEgJiYgKGg5ID0gdGhpc1t0OV0pLCBpMTEgPz89IHIxMS5nZXRQcm9wZXJ0eU9wdGlvbnModDkpLCAhKChpMTEuaGFzQ2hhbmdlZCA/PyBmKShoOSwgczkpIHx8IGkxMS51c2VEZWZhdWx0ICYmIGkxMS5yZWZsZWN0ICYmIGg5ID09PSB0aGlzLl8kRWo/LmdldCh0OSkgJiYgIXRoaXMuaGFzQXR0cmlidXRlKHIxMS5fJEV1KHQ5LCBpMTEpKSkpIHJldHVybjsKICAgICAgICAgIHRoaXMuQyh0OSwgczksIGkxMSk7CiAgICAgICAgfQogICAgICAgIGZhbHNlID09PSB0aGlzLmlzVXBkYXRlUGVuZGluZyAmJiAodGhpcy5fJEVTID0gdGhpcy5fJEVQKCkpOwogICAgICB9CiAgICAgIEModDksIHM5LCB7IHVzZURlZmF1bHQ6IGkxMSwgcmVmbGVjdDogZTExLCB3cmFwcGVkOiBoOSB9LCByMTEpIHsKICAgICAgICBpMTEgJiYgISh0aGlzLl8kRWogPz89IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpLmhhcyh0OSkgJiYgKHRoaXMuXyRFai5zZXQodDksIHIxMSA/PyBzOSA/PyB0aGlzW3Q5XSksIHRydWUgIT09IGg5IHx8IHZvaWQgMCAhPT0gcjExKSB8fCAodGhpcy5fJEFMLmhhcyh0OSkgfHwgKHRoaXMuaGFzVXBkYXRlZCB8fCBpMTEgfHwgKHM5ID0gdm9pZCAwKSwgdGhpcy5fJEFMLnNldCh0OSwgczkpKSwgdHJ1ZSA9PT0gZTExICYmIHRoaXMuXyRFbSAhPT0gdDkgJiYgKHRoaXMuXyRFcSA/Pz0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkuYWRkKHQ5KSk7CiAgICAgIH0KICAgICAgYXN5bmMgXyRFUCgpIHsKICAgICAgICB0aGlzLmlzVXBkYXRlUGVuZGluZyA9IHRydWU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IHRoaXMuXyRFUzsKICAgICAgICB9IGNhdGNoICh0MTApIHsKICAgICAgICAgIFByb21pc2UucmVqZWN0KHQxMCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHQ5ID0gdGhpcy5zY2hlZHVsZVVwZGF0ZSgpOwogICAgICAgIHJldHVybiBudWxsICE9IHQ5ICYmIGF3YWl0IHQ5LCAhdGhpcy5pc1VwZGF0ZVBlbmRpbmc7CiAgICAgIH0KICAgICAgc2NoZWR1bGVVcGRhdGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybVVwZGF0ZSgpOwogICAgICB9CiAgICAgIHBlcmZvcm1VcGRhdGUoKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzVXBkYXRlUGVuZGluZykgcmV0dXJuOwogICAgICAgIGlmICghdGhpcy5oYXNVcGRhdGVkKSB7CiAgICAgICAgICBpZiAodGhpcy5yZW5kZXJSb290ID8/PSB0aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSwgdGhpcy5fJEVwKSB7CiAgICAgICAgICAgIGZvciAoY29uc3QgW3QxMSwgczEwXSBvZiB0aGlzLl8kRXApIHRoaXNbdDExXSA9IHMxMDsKICAgICAgICAgICAgdGhpcy5fJEVwID0gdm9pZCAwOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgdDEwID0gdGhpcy5jb25zdHJ1Y3Rvci5lbGVtZW50UHJvcGVydGllczsKICAgICAgICAgIGlmICh0MTAuc2l6ZSA+IDApIGZvciAoY29uc3QgW3MxMCwgaTExXSBvZiB0MTApIHsKICAgICAgICAgICAgY29uc3QgeyB3cmFwcGVkOiB0MTEgfSA9IGkxMSwgZTExID0gdGhpc1tzMTBdOwogICAgICAgICAgICB0cnVlICE9PSB0MTEgfHwgdGhpcy5fJEFMLmhhcyhzMTApIHx8IHZvaWQgMCA9PT0gZTExIHx8IHRoaXMuQyhzMTAsIHZvaWQgMCwgaTExLCBlMTEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZXQgdDkgPSBmYWxzZTsKICAgICAgICBjb25zdCBzOSA9IHRoaXMuXyRBTDsKICAgICAgICB0cnkgewogICAgICAgICAgdDkgPSB0aGlzLnNob3VsZFVwZGF0ZShzOSksIHQ5ID8gKHRoaXMud2lsbFVwZGF0ZShzOSksIHRoaXMuXyRFTz8uZm9yRWFjaCgodDEwKSA9PiB0MTAuaG9zdFVwZGF0ZT8uKCkpLCB0aGlzLnVwZGF0ZShzOSkpIDogdGhpcy5fJEVNKCk7CiAgICAgICAgfSBjYXRjaCAoczEwKSB7CiAgICAgICAgICB0aHJvdyB0OSA9IGZhbHNlLCB0aGlzLl8kRU0oKSwgczEwOwogICAgICAgIH0KICAgICAgICB0OSAmJiB0aGlzLl8kQUUoczkpOwogICAgICB9CiAgICAgIHdpbGxVcGRhdGUodDkpIHsKICAgICAgfQogICAgICBfJEFFKHQ5KSB7CiAgICAgICAgdGhpcy5fJEVPPy5mb3JFYWNoKCh0MTApID0+IHQxMC5ob3N0VXBkYXRlZD8uKCkpLCB0aGlzLmhhc1VwZGF0ZWQgfHwgKHRoaXMuaGFzVXBkYXRlZCA9IHRydWUsIHRoaXMuZmlyc3RVcGRhdGVkKHQ5KSksIHRoaXMudXBkYXRlZCh0OSk7CiAgICAgIH0KICAgICAgXyRFTSgpIHsKICAgICAgICB0aGlzLl8kQUwgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCB0aGlzLmlzVXBkYXRlUGVuZGluZyA9IGZhbHNlOwogICAgICB9CiAgICAgIGdldCB1cGRhdGVDb21wbGV0ZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpOwogICAgICB9CiAgICAgIGdldFVwZGF0ZUNvbXBsZXRlKCkgewogICAgICAgIHJldHVybiB0aGlzLl8kRVM7CiAgICAgIH0KICAgICAgc2hvdWxkVXBkYXRlKHQ5KSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgdXBkYXRlKHQ5KSB7CiAgICAgICAgdGhpcy5fJEVxICYmPSB0aGlzLl8kRXEuZm9yRWFjaCgodDEwKSA9PiB0aGlzLl8kRVQodDEwLCB0aGlzW3QxMF0pKSwgdGhpcy5fJEVNKCk7CiAgICAgIH0KICAgICAgdXBkYXRlZCh0OSkgewogICAgICB9CiAgICAgIGZpcnN0VXBkYXRlZCh0OSkgewogICAgICB9CiAgICB9OwogICAgeS5lbGVtZW50U3R5bGVzID0gW10sIHkuc2hhZG93Um9vdE9wdGlvbnMgPSB7IG1vZGU6ICJvcGVuIiB9LCB5W2QoImVsZW1lbnRQcm9wZXJ0aWVzIildID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgeVtkKCJmaW5hbGl6ZWQiKV0gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBwPy4oeyBSZWFjdGl2ZUVsZW1lbnQ6IHkgfSksIChhLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zID8/PSBbXSkucHVzaCgiMi4xLjIiKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9saXQtaHRtbC5qcwpmdW5jdGlvbiBWKHQ5LCBpMTEpIHsKICBpZiAoIXUyKHQ5KSB8fCAhdDkuaGFzT3duUHJvcGVydHkoInJhdyIpKSB0aHJvdyBFcnJvcigiaW52YWxpZCB0ZW1wbGF0ZSBzdHJpbmdzIGFycmF5Iik7CiAgcmV0dXJuIHZvaWQgMCAhPT0gZTMgPyBlMy5jcmVhdGVIVE1MKGkxMSkgOiBpMTE7Cn0KZnVuY3Rpb24gTSh0OSwgaTExLCBzOSA9IHQ5LCBlMTEpIHsKICBpZiAoaTExID09PSBFKSByZXR1cm4gaTExOwogIGxldCBoOSA9IHZvaWQgMCAhPT0gZTExID8gczkuXyRDbz8uW2UxMV0gOiBzOS5fJENsOwogIGNvbnN0IG8xMyA9IGEyKGkxMSkgPyB2b2lkIDAgOiBpMTEuXyRsaXREaXJlY3RpdmUkOwogIHJldHVybiBoOT8uY29uc3RydWN0b3IgIT09IG8xMyAmJiAoaDk/Ll8kQU8/LihmYWxzZSksIHZvaWQgMCA9PT0gbzEzID8gaDkgPSB2b2lkIDAgOiAoaDkgPSBuZXcgbzEzKHQ5KSwgaDkuXyRBVCh0OSwgczksIGUxMSkpLCB2b2lkIDAgIT09IGUxMSA/IChzOS5fJENvID8/PSBbXSlbZTExXSA9IGg5IDogczkuXyRDbCA9IGg5KSwgdm9pZCAwICE9PSBoOSAmJiAoaTExID0gTSh0OSwgaDkuXyRBUyh0OSwgaTExLnZhbHVlcyksIGg5LCBlMTEpKSwgaTExOwp9CnZhciB0MiwgaTMsIHMyLCBlMywgaDIsIG8zLCBuMywgcjMsIGwyLCBjMywgYTIsIHUyLCBkMiwgZjIsIHYsIF8sIG0sIHAyLCBnLCAkLCB5MiwgeCwgYjIsIHcsIFQsIEUsIEEsIEMsIFAsIE4sIFMyLCBSLCBrLCBILCBJLCBMLCB6LCBaLCBqLCBCLCBEOwp2YXIgaW5pdF9saXRfaHRtbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9saXQtaHRtbC5qcyIoKSB7CiAgICB0MiA9IGdsb2JhbFRoaXMsIGkzID0gKHQ5KSA9PiB0OSwgczIgPSB0Mi50cnVzdGVkVHlwZXMsIGUzID0gczIgPyBzMi5jcmVhdGVQb2xpY3koImxpdC1odG1sIiwgeyBjcmVhdGVIVE1MOiAodDkpID0+IHQ5IH0pIDogdm9pZCAwLCBoMiA9ICIkbGl0JCIsIG8zID0gYGxpdCQke01hdGgucmFuZG9tKCkudG9GaXhlZCg5KS5zbGljZSgyKX0kYCwgbjMgPSAiPyIgKyBvMywgcjMgPSBgPCR7bjN9PmAsIGwyID0gZG9jdW1lbnQsIGMzID0gKCkgPT4gbDIuY3JlYXRlQ29tbWVudCgiIiksIGEyID0gKHQ5KSA9PiBudWxsID09PSB0OSB8fCAib2JqZWN0IiAhPSB0eXBlb2YgdDkgJiYgImZ1bmN0aW9uIiAhPSB0eXBlb2YgdDksIHUyID0gQXJyYXkuaXNBcnJheSwgZDIgPSAodDkpID0+IHUyKHQ5KSB8fCAiZnVuY3Rpb24iID09IHR5cGVvZiB0OT8uW1N5bWJvbC5pdGVyYXRvcl0sIGYyID0gIlsgCVxuXGZccl0iLCB2ID0gLzwoPzooIS0tfFwvW15hLXpBLVpdKXwoXC8/W2EtekEtWl1bXj5cc10qKXwoXC8/JCkpL2csIF8gPSAvLS0+L2csIG0gPSAvPi9nLCBwMiA9IFJlZ0V4cChgPnwke2YyfSg/OihbXlxccyInPj0vXSspKCR7ZjJ9Kj0ke2YyfSooPzpbXiAJClxmXHIiJ1xgPD49XXwoInwnKXwpKXwkKWAsICJnIiksIGcgPSAvJy9nLCAkID0gLyIvZywgeTIgPSAvXig/OnNjcmlwdHxzdHlsZXx0ZXh0YXJlYXx0aXRsZSkkL2ksIHggPSAodDkpID0+IChpMTEsIC4uLnM5KSA9PiAoeyBfJGxpdFR5cGUkOiB0OSwgc3RyaW5nczogaTExLCB2YWx1ZXM6IHM5IH0pLCBiMiA9IHgoMSksIHcgPSB4KDIpLCBUID0geCgzKSwgRSA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2wuZm9yKCJsaXQtbm9DaGFuZ2UiKSwgQSA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2wuZm9yKCJsaXQtbm90aGluZyIpLCBDID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCksIFAgPSBsMi5jcmVhdGVUcmVlV2Fsa2VyKGwyLCAxMjkpOwogICAgTiA9ICh0OSwgaTExKSA9PiB7CiAgICAgIGNvbnN0IHM5ID0gdDkubGVuZ3RoIC0gMSwgZTExID0gW107CiAgICAgIGxldCBuMTMsIGw2ID0gMiA9PT0gaTExID8gIjxzdmc+IiA6IDMgPT09IGkxMSA/ICI8bWF0aD4iIDogIiIsIGMxMSA9IHY7CiAgICAgIGZvciAobGV0IGkxMiA9IDA7IGkxMiA8IHM5OyBpMTIrKykgewogICAgICAgIGNvbnN0IHMxMCA9IHQ5W2kxMl07CiAgICAgICAgbGV0IGE1LCB1NywgZDYgPSAtMSwgZjcgPSAwOwogICAgICAgIGZvciAoOyBmNyA8IHMxMC5sZW5ndGggJiYgKGMxMS5sYXN0SW5kZXggPSBmNywgdTcgPSBjMTEuZXhlYyhzMTApLCBudWxsICE9PSB1Nyk7ICkgZjcgPSBjMTEubGFzdEluZGV4LCBjMTEgPT09IHYgPyAiIS0tIiA9PT0gdTdbMV0gPyBjMTEgPSBfIDogdm9pZCAwICE9PSB1N1sxXSA/IGMxMSA9IG0gOiB2b2lkIDAgIT09IHU3WzJdID8gKHkyLnRlc3QodTdbMl0pICYmIChuMTMgPSBSZWdFeHAoIjwvIiArIHU3WzJdLCAiZyIpKSwgYzExID0gcDIpIDogdm9pZCAwICE9PSB1N1szXSAmJiAoYzExID0gcDIpIDogYzExID09PSBwMiA/ICI+IiA9PT0gdTdbMF0gPyAoYzExID0gbjEzID8/IHYsIGQ2ID0gLTEpIDogdm9pZCAwID09PSB1N1sxXSA/IGQ2ID0gLTIgOiAoZDYgPSBjMTEubGFzdEluZGV4IC0gdTdbMl0ubGVuZ3RoLCBhNSA9IHU3WzFdLCBjMTEgPSB2b2lkIDAgPT09IHU3WzNdID8gcDIgOiAnIicgPT09IHU3WzNdID8gJCA6IGcpIDogYzExID09PSAkIHx8IGMxMSA9PT0gZyA/IGMxMSA9IHAyIDogYzExID09PSBfIHx8IGMxMSA9PT0gbSA/IGMxMSA9IHYgOiAoYzExID0gcDIsIG4xMyA9IHZvaWQgMCk7CiAgICAgICAgY29uc3QgeDMgPSBjMTEgPT09IHAyICYmIHQ5W2kxMiArIDFdLnN0YXJ0c1dpdGgoIi8+IikgPyAiICIgOiAiIjsKICAgICAgICBsNiArPSBjMTEgPT09IHYgPyBzMTAgKyByMyA6IGQ2ID49IDAgPyAoZTExLnB1c2goYTUpLCBzMTAuc2xpY2UoMCwgZDYpICsgaDIgKyBzMTAuc2xpY2UoZDYpICsgbzMgKyB4MykgOiBzMTAgKyBvMyArICgtMiA9PT0gZDYgPyBpMTIgOiB4Myk7CiAgICAgIH0KICAgICAgcmV0dXJuIFtWKHQ5LCBsNiArICh0OVtzOV0gfHwgIjw/PiIpICsgKDIgPT09IGkxMSA/ICI8L3N2Zz4iIDogMyA9PT0gaTExID8gIjwvbWF0aD4iIDogIiIpKSwgZTExXTsKICAgIH07CiAgICBTMiA9IGNsYXNzIF9TIHsKICAgICAgY29uc3RydWN0b3IoeyBzdHJpbmdzOiB0OSwgXyRsaXRUeXBlJDogaTExIH0sIGUxMSkgewogICAgICAgIGxldCByMTE7CiAgICAgICAgdGhpcy5wYXJ0cyA9IFtdOwogICAgICAgIGxldCBsNiA9IDAsIGE1ID0gMDsKICAgICAgICBjb25zdCB1NyA9IHQ5Lmxlbmd0aCAtIDEsIGQ2ID0gdGhpcy5wYXJ0cywgW2Y3LCB2NV0gPSBOKHQ5LCBpMTEpOwogICAgICAgIGlmICh0aGlzLmVsID0gX1MuY3JlYXRlRWxlbWVudChmNywgZTExKSwgUC5jdXJyZW50Tm9kZSA9IHRoaXMuZWwuY29udGVudCwgMiA9PT0gaTExIHx8IDMgPT09IGkxMSkgewogICAgICAgICAgY29uc3QgdDEwID0gdGhpcy5lbC5jb250ZW50LmZpcnN0Q2hpbGQ7CiAgICAgICAgICB0MTAucmVwbGFjZVdpdGgoLi4udDEwLmNoaWxkTm9kZXMpOwogICAgICAgIH0KICAgICAgICBmb3IgKDsgbnVsbCAhPT0gKHIxMSA9IFAubmV4dE5vZGUoKSkgJiYgZDYubGVuZ3RoIDwgdTc7ICkgewogICAgICAgICAgaWYgKDEgPT09IHIxMS5ub2RlVHlwZSkgewogICAgICAgICAgICBpZiAocjExLmhhc0F0dHJpYnV0ZXMoKSkgZm9yIChjb25zdCB0MTAgb2YgcjExLmdldEF0dHJpYnV0ZU5hbWVzKCkpIGlmICh0MTAuZW5kc1dpdGgoaDIpKSB7CiAgICAgICAgICAgICAgY29uc3QgaTEyID0gdjVbYTUrK10sIHM5ID0gcjExLmdldEF0dHJpYnV0ZSh0MTApLnNwbGl0KG8zKSwgZTEyID0gLyhbLj9AXSk/KC4qKS8uZXhlYyhpMTIpOwogICAgICAgICAgICAgIGQ2LnB1c2goeyB0eXBlOiAxLCBpbmRleDogbDYsIG5hbWU6IGUxMlsyXSwgc3RyaW5nczogczksIGN0b3I6ICIuIiA9PT0gZTEyWzFdID8gSSA6ICI/IiA9PT0gZTEyWzFdID8gTCA6ICJAIiA9PT0gZTEyWzFdID8geiA6IEggfSksIHIxMS5yZW1vdmVBdHRyaWJ1dGUodDEwKTsKICAgICAgICAgICAgfSBlbHNlIHQxMC5zdGFydHNXaXRoKG8zKSAmJiAoZDYucHVzaCh7IHR5cGU6IDYsIGluZGV4OiBsNiB9KSwgcjExLnJlbW92ZUF0dHJpYnV0ZSh0MTApKTsKICAgICAgICAgICAgaWYgKHkyLnRlc3QocjExLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgY29uc3QgdDEwID0gcjExLnRleHRDb250ZW50LnNwbGl0KG8zKSwgaTEyID0gdDEwLmxlbmd0aCAtIDE7CiAgICAgICAgICAgICAgaWYgKGkxMiA+IDApIHsKICAgICAgICAgICAgICAgIHIxMS50ZXh0Q29udGVudCA9IHMyID8gczIuZW1wdHlTY3JpcHQgOiAiIjsKICAgICAgICAgICAgICAgIGZvciAobGV0IHM5ID0gMDsgczkgPCBpMTI7IHM5KyspIHIxMS5hcHBlbmQodDEwW3M5XSwgYzMoKSksIFAubmV4dE5vZGUoKSwgZDYucHVzaCh7IHR5cGU6IDIsIGluZGV4OiArK2w2IH0pOwogICAgICAgICAgICAgICAgcjExLmFwcGVuZCh0MTBbaTEyXSwgYzMoKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKDggPT09IHIxMS5ub2RlVHlwZSkgaWYgKHIxMS5kYXRhID09PSBuMykgZDYucHVzaCh7IHR5cGU6IDIsIGluZGV4OiBsNiB9KTsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBsZXQgdDEwID0gLTE7CiAgICAgICAgICAgIGZvciAoOyAtMSAhPT0gKHQxMCA9IHIxMS5kYXRhLmluZGV4T2YobzMsIHQxMCArIDEpKTsgKSBkNi5wdXNoKHsgdHlwZTogNywgaW5kZXg6IGw2IH0pLCB0MTAgKz0gbzMubGVuZ3RoIC0gMTsKICAgICAgICAgIH0KICAgICAgICAgIGw2Kys7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRpYyBjcmVhdGVFbGVtZW50KHQ5LCBpMTEpIHsKICAgICAgICBjb25zdCBzOSA9IGwyLmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7CiAgICAgICAgcmV0dXJuIHM5LmlubmVySFRNTCA9IHQ5LCBzOTsKICAgICAgfQogICAgfTsKICAgIFIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHQ5LCBpMTEpIHsKICAgICAgICB0aGlzLl8kQVYgPSBbXSwgdGhpcy5fJEFOID0gdm9pZCAwLCB0aGlzLl8kQUQgPSB0OSwgdGhpcy5fJEFNID0gaTExOwogICAgICB9CiAgICAgIGdldCBwYXJlbnROb2RlKCkgewogICAgICAgIHJldHVybiB0aGlzLl8kQU0ucGFyZW50Tm9kZTsKICAgICAgfQogICAgICBnZXQgXyRBVSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFNLl8kQVU7CiAgICAgIH0KICAgICAgdSh0OSkgewogICAgICAgIGNvbnN0IHsgZWw6IHsgY29udGVudDogaTExIH0sIHBhcnRzOiBzOSB9ID0gdGhpcy5fJEFELCBlMTEgPSAodDk/LmNyZWF0aW9uU2NvcGUgPz8gbDIpLmltcG9ydE5vZGUoaTExLCB0cnVlKTsKICAgICAgICBQLmN1cnJlbnROb2RlID0gZTExOwogICAgICAgIGxldCBoOSA9IFAubmV4dE5vZGUoKSwgbzEzID0gMCwgbjEzID0gMCwgcjExID0gczlbMF07CiAgICAgICAgZm9yICg7IHZvaWQgMCAhPT0gcjExOyApIHsKICAgICAgICAgIGlmIChvMTMgPT09IHIxMS5pbmRleCkgewogICAgICAgICAgICBsZXQgaTEyOwogICAgICAgICAgICAyID09PSByMTEudHlwZSA/IGkxMiA9IG5ldyBrKGg5LCBoOS5uZXh0U2libGluZywgdGhpcywgdDkpIDogMSA9PT0gcjExLnR5cGUgPyBpMTIgPSBuZXcgcjExLmN0b3IoaDksIHIxMS5uYW1lLCByMTEuc3RyaW5ncywgdGhpcywgdDkpIDogNiA9PT0gcjExLnR5cGUgJiYgKGkxMiA9IG5ldyBaKGg5LCB0aGlzLCB0OSkpLCB0aGlzLl8kQVYucHVzaChpMTIpLCByMTEgPSBzOVsrK24xM107CiAgICAgICAgICB9CiAgICAgICAgICBvMTMgIT09IHIxMT8uaW5kZXggJiYgKGg5ID0gUC5uZXh0Tm9kZSgpLCBvMTMrKyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQLmN1cnJlbnROb2RlID0gbDIsIGUxMTsKICAgICAgfQogICAgICBwKHQ5KSB7CiAgICAgICAgbGV0IGkxMSA9IDA7CiAgICAgICAgZm9yIChjb25zdCBzOSBvZiB0aGlzLl8kQVYpIHZvaWQgMCAhPT0gczkgJiYgKHZvaWQgMCAhPT0gczkuc3RyaW5ncyA/IChzOS5fJEFJKHQ5LCBzOSwgaTExKSwgaTExICs9IHM5LnN0cmluZ3MubGVuZ3RoIC0gMikgOiBzOS5fJEFJKHQ5W2kxMV0pKSwgaTExKys7CiAgICAgIH0KICAgIH07CiAgICBrID0gY2xhc3MgX2sgewogICAgICBnZXQgXyRBVSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFNPy5fJEFVID8/IHRoaXMuXyRDdjsKICAgICAgfQogICAgICBjb25zdHJ1Y3Rvcih0OSwgaTExLCBzOSwgZTExKSB7CiAgICAgICAgdGhpcy50eXBlID0gMiwgdGhpcy5fJEFIID0gQSwgdGhpcy5fJEFOID0gdm9pZCAwLCB0aGlzLl8kQUEgPSB0OSwgdGhpcy5fJEFCID0gaTExLCB0aGlzLl8kQU0gPSBzOSwgdGhpcy5vcHRpb25zID0gZTExLCB0aGlzLl8kQ3YgPSBlMTE/LmlzQ29ubmVjdGVkID8/IHRydWU7CiAgICAgIH0KICAgICAgZ2V0IHBhcmVudE5vZGUoKSB7CiAgICAgICAgbGV0IHQ5ID0gdGhpcy5fJEFBLnBhcmVudE5vZGU7CiAgICAgICAgY29uc3QgaTExID0gdGhpcy5fJEFNOwogICAgICAgIHJldHVybiB2b2lkIDAgIT09IGkxMSAmJiAxMSA9PT0gdDk/Lm5vZGVUeXBlICYmICh0OSA9IGkxMS5wYXJlbnROb2RlKSwgdDk7CiAgICAgIH0KICAgICAgZ2V0IHN0YXJ0Tm9kZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFBOwogICAgICB9CiAgICAgIGdldCBlbmROb2RlKCkgewogICAgICAgIHJldHVybiB0aGlzLl8kQUI7CiAgICAgIH0KICAgICAgXyRBSSh0OSwgaTExID0gdGhpcykgewogICAgICAgIHQ5ID0gTSh0aGlzLCB0OSwgaTExKSwgYTIodDkpID8gdDkgPT09IEEgfHwgbnVsbCA9PSB0OSB8fCAiIiA9PT0gdDkgPyAodGhpcy5fJEFIICE9PSBBICYmIHRoaXMuXyRBUigpLCB0aGlzLl8kQUggPSBBKSA6IHQ5ICE9PSB0aGlzLl8kQUggJiYgdDkgIT09IEUgJiYgdGhpcy5fKHQ5KSA6IHZvaWQgMCAhPT0gdDkuXyRsaXRUeXBlJCA/IHRoaXMuJCh0OSkgOiB2b2lkIDAgIT09IHQ5Lm5vZGVUeXBlID8gdGhpcy5UKHQ5KSA6IGQyKHQ5KSA/IHRoaXMuayh0OSkgOiB0aGlzLl8odDkpOwogICAgICB9CiAgICAgIE8odDkpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFBLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQ5LCB0aGlzLl8kQUIpOwogICAgICB9CiAgICAgIFQodDkpIHsKICAgICAgICB0aGlzLl8kQUggIT09IHQ5ICYmICh0aGlzLl8kQVIoKSwgdGhpcy5fJEFIID0gdGhpcy5PKHQ5KSk7CiAgICAgIH0KICAgICAgXyh0OSkgewogICAgICAgIHRoaXMuXyRBSCAhPT0gQSAmJiBhMih0aGlzLl8kQUgpID8gdGhpcy5fJEFBLm5leHRTaWJsaW5nLmRhdGEgPSB0OSA6IHRoaXMuVChsMi5jcmVhdGVUZXh0Tm9kZSh0OSkpLCB0aGlzLl8kQUggPSB0OTsKICAgICAgfQogICAgICAkKHQ5KSB7CiAgICAgICAgY29uc3QgeyB2YWx1ZXM6IGkxMSwgXyRsaXRUeXBlJDogczkgfSA9IHQ5LCBlMTEgPSAibnVtYmVyIiA9PSB0eXBlb2YgczkgPyB0aGlzLl8kQUModDkpIDogKHZvaWQgMCA9PT0gczkuZWwgJiYgKHM5LmVsID0gUzIuY3JlYXRlRWxlbWVudChWKHM5LmgsIHM5LmhbMF0pLCB0aGlzLm9wdGlvbnMpKSwgczkpOwogICAgICAgIGlmICh0aGlzLl8kQUg/Ll8kQUQgPT09IGUxMSkgdGhpcy5fJEFILnAoaTExKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGNvbnN0IHQxMCA9IG5ldyBSKGUxMSwgdGhpcyksIHMxMCA9IHQxMC51KHRoaXMub3B0aW9ucyk7CiAgICAgICAgICB0MTAucChpMTEpLCB0aGlzLlQoczEwKSwgdGhpcy5fJEFIID0gdDEwOwogICAgICAgIH0KICAgICAgfQogICAgICBfJEFDKHQ5KSB7CiAgICAgICAgbGV0IGkxMSA9IEMuZ2V0KHQ5LnN0cmluZ3MpOwogICAgICAgIHJldHVybiB2b2lkIDAgPT09IGkxMSAmJiBDLnNldCh0OS5zdHJpbmdzLCBpMTEgPSBuZXcgUzIodDkpKSwgaTExOwogICAgICB9CiAgICAgIGsodDkpIHsKICAgICAgICB1Mih0aGlzLl8kQUgpIHx8ICh0aGlzLl8kQUggPSBbXSwgdGhpcy5fJEFSKCkpOwogICAgICAgIGNvbnN0IGkxMSA9IHRoaXMuXyRBSDsKICAgICAgICBsZXQgczksIGUxMSA9IDA7CiAgICAgICAgZm9yIChjb25zdCBoOSBvZiB0OSkgZTExID09PSBpMTEubGVuZ3RoID8gaTExLnB1c2goczkgPSBuZXcgX2sodGhpcy5PKGMzKCkpLCB0aGlzLk8oYzMoKSksIHRoaXMsIHRoaXMub3B0aW9ucykpIDogczkgPSBpMTFbZTExXSwgczkuXyRBSShoOSksIGUxMSsrOwogICAgICAgIGUxMSA8IGkxMS5sZW5ndGggJiYgKHRoaXMuXyRBUihzOSAmJiBzOS5fJEFCLm5leHRTaWJsaW5nLCBlMTEpLCBpMTEubGVuZ3RoID0gZTExKTsKICAgICAgfQogICAgICBfJEFSKHQ5ID0gdGhpcy5fJEFBLm5leHRTaWJsaW5nLCBzOSkgewogICAgICAgIGZvciAodGhpcy5fJEFQPy4oZmFsc2UsIHRydWUsIHM5KTsgdDkgIT09IHRoaXMuXyRBQjsgKSB7CiAgICAgICAgICBjb25zdCBzMTAgPSBpMyh0OSkubmV4dFNpYmxpbmc7CiAgICAgICAgICBpMyh0OSkucmVtb3ZlKCksIHQ5ID0gczEwOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXRDb25uZWN0ZWQodDkpIHsKICAgICAgICB2b2lkIDAgPT09IHRoaXMuXyRBTSAmJiAodGhpcy5fJEN2ID0gdDksIHRoaXMuXyRBUD8uKHQ5KSk7CiAgICAgIH0KICAgIH07CiAgICBIID0gY2xhc3MgewogICAgICBnZXQgdGFnTmFtZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LnRhZ05hbWU7CiAgICAgIH0KICAgICAgZ2V0IF8kQVUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuXyRBTS5fJEFVOwogICAgICB9CiAgICAgIGNvbnN0cnVjdG9yKHQ5LCBpMTEsIHM5LCBlMTEsIGg5KSB7CiAgICAgICAgdGhpcy50eXBlID0gMSwgdGhpcy5fJEFIID0gQSwgdGhpcy5fJEFOID0gdm9pZCAwLCB0aGlzLmVsZW1lbnQgPSB0OSwgdGhpcy5uYW1lID0gaTExLCB0aGlzLl8kQU0gPSBlMTEsIHRoaXMub3B0aW9ucyA9IGg5LCBzOS5sZW5ndGggPiAyIHx8ICIiICE9PSBzOVswXSB8fCAiIiAhPT0gczlbMV0gPyAodGhpcy5fJEFIID0gQXJyYXkoczkubGVuZ3RoIC0gMSkuZmlsbChuZXcgU3RyaW5nKCkpLCB0aGlzLnN0cmluZ3MgPSBzOSkgOiB0aGlzLl8kQUggPSBBOwogICAgICB9CiAgICAgIF8kQUkodDksIGkxMSA9IHRoaXMsIHM5LCBlMTEpIHsKICAgICAgICBjb25zdCBoOSA9IHRoaXMuc3RyaW5nczsKICAgICAgICBsZXQgbzEzID0gZmFsc2U7CiAgICAgICAgaWYgKHZvaWQgMCA9PT0gaDkpIHQ5ID0gTSh0aGlzLCB0OSwgaTExLCAwKSwgbzEzID0gIWEyKHQ5KSB8fCB0OSAhPT0gdGhpcy5fJEFIICYmIHQ5ICE9PSBFLCBvMTMgJiYgKHRoaXMuXyRBSCA9IHQ5KTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGNvbnN0IGUxMiA9IHQ5OwogICAgICAgICAgbGV0IG4xMywgcjExOwogICAgICAgICAgZm9yICh0OSA9IGg5WzBdLCBuMTMgPSAwOyBuMTMgPCBoOS5sZW5ndGggLSAxOyBuMTMrKykgcjExID0gTSh0aGlzLCBlMTJbczkgKyBuMTNdLCBpMTEsIG4xMyksIHIxMSA9PT0gRSAmJiAocjExID0gdGhpcy5fJEFIW24xM10pLCBvMTMgfHw9ICFhMihyMTEpIHx8IHIxMSAhPT0gdGhpcy5fJEFIW24xM10sIHIxMSA9PT0gQSA/IHQ5ID0gQSA6IHQ5ICE9PSBBICYmICh0OSArPSAocjExID8/ICIiKSArIGg5W24xMyArIDFdKSwgdGhpcy5fJEFIW24xM10gPSByMTE7CiAgICAgICAgfQogICAgICAgIG8xMyAmJiAhZTExICYmIHRoaXMuaih0OSk7CiAgICAgIH0KICAgICAgaih0OSkgewogICAgICAgIHQ5ID09PSBBID8gdGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpIDogdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsIHQ5ID8/ICIiKTsKICAgICAgfQogICAgfTsKICAgIEkgPSBjbGFzcyBleHRlbmRzIEggewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpLCB0aGlzLnR5cGUgPSAzOwogICAgICB9CiAgICAgIGoodDkpIHsKICAgICAgICB0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXSA9IHQ5ID09PSBBID8gdm9pZCAwIDogdDk7CiAgICAgIH0KICAgIH07CiAgICBMID0gY2xhc3MgZXh0ZW5kcyBIIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKSwgdGhpcy50eXBlID0gNDsKICAgICAgfQogICAgICBqKHQ5KSB7CiAgICAgICAgdGhpcy5lbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSh0aGlzLm5hbWUsICEhdDkgJiYgdDkgIT09IEEpOwogICAgICB9CiAgICB9OwogICAgeiA9IGNsYXNzIGV4dGVuZHMgSCB7CiAgICAgIGNvbnN0cnVjdG9yKHQ5LCBpMTEsIHM5LCBlMTEsIGg5KSB7CiAgICAgICAgc3VwZXIodDksIGkxMSwgczksIGUxMSwgaDkpLCB0aGlzLnR5cGUgPSA1OwogICAgICB9CiAgICAgIF8kQUkodDksIGkxMSA9IHRoaXMpIHsKICAgICAgICBpZiAoKHQ5ID0gTSh0aGlzLCB0OSwgaTExLCAwKSA/PyBBKSA9PT0gRSkgcmV0dXJuOwogICAgICAgIGNvbnN0IHM5ID0gdGhpcy5fJEFILCBlMTEgPSB0OSA9PT0gQSAmJiBzOSAhPT0gQSB8fCB0OS5jYXB0dXJlICE9PSBzOS5jYXB0dXJlIHx8IHQ5Lm9uY2UgIT09IHM5Lm9uY2UgfHwgdDkucGFzc2l2ZSAhPT0gczkucGFzc2l2ZSwgaDkgPSB0OSAhPT0gQSAmJiAoczkgPT09IEEgfHwgZTExKTsKICAgICAgICBlMTEgJiYgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5uYW1lLCB0aGlzLCBzOSksIGg5ICYmIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMubmFtZSwgdGhpcywgdDkpLCB0aGlzLl8kQUggPSB0OTsKICAgICAgfQogICAgICBoYW5kbGVFdmVudCh0OSkgewogICAgICAgICJmdW5jdGlvbiIgPT0gdHlwZW9mIHRoaXMuXyRBSCA/IHRoaXMuXyRBSC5jYWxsKHRoaXMub3B0aW9ucz8uaG9zdCA/PyB0aGlzLmVsZW1lbnQsIHQ5KSA6IHRoaXMuXyRBSC5oYW5kbGVFdmVudCh0OSk7CiAgICAgIH0KICAgIH07CiAgICBaID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih0OSwgaTExLCBzOSkgewogICAgICAgIHRoaXMuZWxlbWVudCA9IHQ5LCB0aGlzLnR5cGUgPSA2LCB0aGlzLl8kQU4gPSB2b2lkIDAsIHRoaXMuXyRBTSA9IGkxMSwgdGhpcy5vcHRpb25zID0gczk7CiAgICAgIH0KICAgICAgZ2V0IF8kQVUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuXyRBTS5fJEFVOwogICAgICB9CiAgICAgIF8kQUkodDkpIHsKICAgICAgICBNKHRoaXMsIHQ5KTsKICAgICAgfQogICAgfTsKICAgIGogPSB7IE06IGgyLCBQOiBvMywgQTogbjMsIEM6IDEsIEw6IE4sIFIsIEQ6IGQyLCBWOiBNLCBJOiBrLCBILCBOOiBMLCBVOiB6LCBCOiBJLCBGOiBaIH0sIEIgPSB0Mi5saXRIdG1sUG9seWZpbGxTdXBwb3J0OwogICAgQj8uKFMyLCBrKSwgKHQyLmxpdEh0bWxWZXJzaW9ucyA/Pz0gW10pLnB1c2goIjMuMy4yIik7CiAgICBEID0gKHQ5LCBpMTEsIHM5KSA9PiB7CiAgICAgIGNvbnN0IGUxMSA9IHM5Py5yZW5kZXJCZWZvcmUgPz8gaTExOwogICAgICBsZXQgaDkgPSBlMTEuXyRsaXRQYXJ0JDsKICAgICAgaWYgKHZvaWQgMCA9PT0gaDkpIHsKICAgICAgICBjb25zdCB0MTAgPSBzOT8ucmVuZGVyQmVmb3JlID8/IG51bGw7CiAgICAgICAgZTExLl8kbGl0UGFydCQgPSBoOSA9IG5ldyBrKGkxMS5pbnNlcnRCZWZvcmUoYzMoKSwgdDEwKSwgdDEwLCB2b2lkIDAsIHM5ID8/IHt9KTsKICAgICAgfQogICAgICByZXR1cm4gaDkuXyRBSSh0OSksIGg5OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1lbGVtZW50QDQuMi4yL25vZGVfbW9kdWxlcy9saXQtZWxlbWVudC9saXQtZWxlbWVudC5qcwp2YXIgczMsIGk0LCBvNCwgbjQ7CnZhciBpbml0X2xpdF9lbGVtZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWVsZW1lbnRANC4yLjIvbm9kZV9tb2R1bGVzL2xpdC1lbGVtZW50L2xpdC1lbGVtZW50LmpzIigpIHsKICAgIGluaXRfcmVhY3RpdmVfZWxlbWVudCgpOwogICAgaW5pdF9yZWFjdGl2ZV9lbGVtZW50KCk7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBzMyA9IGdsb2JhbFRoaXM7CiAgICBpNCA9IGNsYXNzIGV4dGVuZHMgeSB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyksIHRoaXMucmVuZGVyT3B0aW9ucyA9IHsgaG9zdDogdGhpcyB9LCB0aGlzLl8kRG8gPSB2b2lkIDA7CiAgICAgIH0KICAgICAgY3JlYXRlUmVuZGVyUm9vdCgpIHsKICAgICAgICBjb25zdCB0OSA9IHN1cGVyLmNyZWF0ZVJlbmRlclJvb3QoKTsKICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJPcHRpb25zLnJlbmRlckJlZm9yZSA/Pz0gdDkuZmlyc3RDaGlsZCwgdDk7CiAgICAgIH0KICAgICAgdXBkYXRlKHQ5KSB7CiAgICAgICAgY29uc3QgcjExID0gdGhpcy5yZW5kZXIoKTsKICAgICAgICB0aGlzLmhhc1VwZGF0ZWQgfHwgKHRoaXMucmVuZGVyT3B0aW9ucy5pc0Nvbm5lY3RlZCA9IHRoaXMuaXNDb25uZWN0ZWQpLCBzdXBlci51cGRhdGUodDkpLCB0aGlzLl8kRG8gPSBEKHIxMSwgdGhpcy5yZW5kZXJSb290LCB0aGlzLnJlbmRlck9wdGlvbnMpOwogICAgICB9CiAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksIHRoaXMuXyREbz8uc2V0Q29ubmVjdGVkKHRydWUpOwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksIHRoaXMuXyREbz8uc2V0Q29ubmVjdGVkKGZhbHNlKTsKICAgICAgfQogICAgICByZW5kZXIoKSB7CiAgICAgICAgcmV0dXJuIEU7CiAgICAgIH0KICAgIH07CiAgICBpNC5fJGxpdEVsZW1lbnQkID0gdHJ1ZSwgaTRbImZpbmFsaXplZCJdID0gdHJ1ZSwgczMubGl0RWxlbWVudEh5ZHJhdGVTdXBwb3J0Py4oeyBMaXRFbGVtZW50OiBpNCB9KTsKICAgIG80ID0gczMubGl0RWxlbWVudFBvbHlmaWxsU3VwcG9ydDsKICAgIG80Py4oeyBMaXRFbGVtZW50OiBpNCB9KTsKICAgIG40ID0geyBfJEFLOiAodDksIGUxMSwgcjExKSA9PiB7CiAgICAgIHQ5Ll8kQUsoZTExLCByMTEpOwogICAgfSwgXyRBTDogKHQ5KSA9PiB0OS5fJEFMIH07CiAgICAoczMubGl0RWxlbWVudFZlcnNpb25zID8/PSBbXSkucHVzaCgiNC4yLjIiKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9pcy1zZXJ2ZXIuanMKdmFyIG81Owp2YXIgaW5pdF9pc19zZXJ2ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvaXMtc2VydmVyLmpzIigpIHsKICAgIG81ID0gZmFsc2U7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9pbmRleC5qcwp2YXIgaW5pdF9saXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9pbmRleC5qcyIoKSB7CiAgICBpbml0X3JlYWN0aXZlX2VsZW1lbnQoKTsKICAgIGluaXRfbGl0X2h0bWwoKTsKICAgIGluaXRfbGl0X2VsZW1lbnQoKTsKICAgIGluaXRfaXNfc2VydmVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcytpc291bmlxdWVAMS4wLjUvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2lzb3VuaXF1ZS9kaXN0X3RzL2luZGV4LmpzCnZhciByZXF1aXJlX2Rpc3RfdHMgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2lzb3VuaXF1ZUAxLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvaXNvdW5pcXVlL2Rpc3RfdHMvaW5kZXguanMiKGV4cG9ydHMpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICBleHBvcnRzLnVuaSA9IHZvaWQgMDsKICAgIHZhciB1bmkzID0gKHByZWZpeDQgPSAidW5pIikgPT4gewogICAgICByZXR1cm4gYCR7cHJlZml4NH1fJHtgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4YC5yZXBsYWNlKC9beHldL2csIChjMTEpID0+IHsKICAgICAgICBjb25zdCByMTEgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwOwogICAgICAgIGNvbnN0IHY1ID0gYzExID09PSAieCIgPyByMTEgOiByMTEgJiAzIHwgODsKICAgICAgICByZXR1cm4gdjUudG9TdHJpbmcoMTYpOwogICAgICB9KX1gOwogICAgfTsKICAgIGV4cG9ydHMudW5pID0gdW5pMzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cHJvbWlzZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvc21hcnRwcm9taXNlLmNsYXNzZXMuZGVmZXJyZWQuanMKdmFyIERlZmVycmVkLCBkZWZlcjsKdmFyIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfZGVmZXJyZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHByb21pc2VANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmRlZmVycmVkLmpzIigpIHsKICAgIERlZmVycmVkID0gY2xhc3MgewogICAgICBjbGFpbSgpIHsKICAgICAgICBpZiAodGhpcy5jbGFpbWVkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkRlZmVycmVkIGFscmVhZHkgY2xhaW1lZCIpOwogICAgICAgIH0KICAgICAgICB0aGlzLmNsYWltZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGdldCBkdXJhdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zdG9wcGVkQXQpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnN0b3BwZWRBdCAtIHRoaXMuc3RhcnRlZEF0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuc3RhcnRlZEF0OwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmNsYWltZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgICAgICAgdGhpcy5yZXNvbHZlID0gKHZhbHVlQXJnKSA9PiB7CiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gImZ1bGZpbGxlZCI7CiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEF0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgcmVzb2x2ZTIodmFsdWVBcmcpOwogICAgICAgICAgfTsKICAgICAgICAgIHRoaXMucmVqZWN0ID0gKHJlYXNvbikgPT4gewogICAgICAgICAgICB0aGlzLnN0YXR1cyA9ICJyZWplY3RlZCI7CiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEF0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7CiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5zdGFydGVkQXQgPSBEYXRlLm5vdygpOwogICAgICAgICAgdGhpcy5zdGF0dXMgPSAicGVuZGluZyI7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBkZWZlciA9ICgpID0+IHsKICAgICAgcmV0dXJuIG5ldyBEZWZlcnJlZCgpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cHJvbWlzZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvc21hcnRwcm9taXNlLmNsYXNzZXMuY3VtdWxhdGl2ZWRlZmVycmVkLmpzCnZhciBDdW11bGF0aXZlRGVmZXJyZWQsIGN1bXVsYXRpdmVEZWZlcjsKdmFyIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfY3VtdWxhdGl2ZWRlZmVycmVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRwcm9taXNlQDQuMi4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9zbWFydHByb21pc2UuY2xhc3Nlcy5jdW11bGF0aXZlZGVmZXJyZWQuanMiKCkgewogICAgaW5pdF9zbWFydHByb21pc2VfY2xhc3Nlc19kZWZlcnJlZCgpOwogICAgQ3VtdWxhdGl2ZURlZmVycmVkID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMgPSBbXTsKICAgICAgICB0aGlzLmRlZmVycmVkID0gZGVmZXIoKTsKICAgICAgICB0aGlzLnByb21pc2UgPSB0aGlzLmRlZmVycmVkLnByb21pc2U7CiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7CiAgICAgICAgICB3aGlsZSAodGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgY29uc3QgcG9wcGVkUHJvbWlzZSA9IHRoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5zaGlmdCgpOwogICAgICAgICAgICBhd2FpdCBwb3BwZWRQcm9taXNlOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgfSwgMCk7CiAgICAgIH0KICAgICAgc3ViRGVmZXIoKSB7CiAgICAgICAgY29uc3QgZG9uZSA9IGRlZmVyKCk7CiAgICAgICAgdGhpcy5hZGRQcm9taXNlKGRvbmUucHJvbWlzZSk7CiAgICAgICAgcmV0dXJuIGRvbmU7CiAgICAgIH0KICAgICAgYWRkUHJvbWlzZShwcm9taXNlQXJnKSB7CiAgICAgICAgdGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLnB1c2gocHJvbWlzZUFyZyk7CiAgICAgIH0KICAgIH07CiAgICBjdW11bGF0aXZlRGVmZXIgPSAoKSA9PiB7CiAgICAgIHJldHVybiBuZXcgQ3VtdWxhdGl2ZURlZmVycmVkKCk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRwcm9taXNlQDQuMi4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0cywgewogIEN1bXVsYXRpdmVEZWZlcnJlZDogKCkgPT4gQ3VtdWxhdGl2ZURlZmVycmVkLAogIERlZmVycmVkOiAoKSA9PiBEZWZlcnJlZCwKICBjdW11bGF0aXZlRGVmZXI6ICgpID0+IGN1bXVsYXRpdmVEZWZlciwKICBkZWZlcjogKCkgPT4gZGVmZXIsCiAgZnJvbUNhbGxiYWNrOiAoKSA9PiBmcm9tQ2FsbGJhY2ssCiAgZ2V0Rmlyc3RUcnVlT3JGYWxzZTogKCkgPT4gZ2V0Rmlyc3RUcnVlT3JGYWxzZSwKICBtYXA6ICgpID0+IG1hcCwKICByZWplY3RlZFByb21pc2U6ICgpID0+IHJlamVjdGVkUHJvbWlzZSwKICByZXNvbHZlZFByb21pc2U6ICgpID0+IHJlc29sdmVkUHJvbWlzZSwKICB0aW1lb3V0QW5kQ29udGludWU6ICgpID0+IHRpbWVvdXRBbmRDb250aW51ZSwKICB0aW1lb3V0V3JhcDogKCkgPT4gdGltZW91dFdyYXAKfSk7CnZhciByZXNvbHZlZFByb21pc2UsIHJlamVjdGVkUHJvbWlzZSwgbWFwLCB0aW1lb3V0V3JhcCwgdGltZW91dEFuZENvbnRpbnVlLCBnZXRGaXJzdFRydWVPckZhbHNlLCBmcm9tQ2FsbGJhY2s7CnZhciBpbml0X2Rpc3RfdHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHByb21pc2VANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfZGVmZXJyZWQoKTsKICAgIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfY3VtdWxhdGl2ZWRlZmVycmVkKCk7CiAgICBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2RlZmVycmVkKCk7CiAgICByZXNvbHZlZFByb21pc2UgPSAodmFsdWUyKSA9PiB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUyKTsKICAgIH07CiAgICByZWplY3RlZFByb21pc2UgPSAoZXJyKSA9PiB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpOwogICAgfTsKICAgIG1hcCA9IGFzeW5jIChpbnB1dEFyZywgZnVuY3Rpb25BcmcpID0+IHsKICAgICAgY29uc3QgcHJvbWlzZUFycmF5ID0gW107CiAgICAgIGNvbnN0IHJlc3VsdEFycmF5ID0gW107CiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpbnB1dEFyZykgewogICAgICAgIGNvbnN0IHByb21pc2UgPSBmdW5jdGlvbkFyZyhpdGVtKTsKICAgICAgICBwcm9taXNlQXJyYXkucHVzaChwcm9taXNlKTsKICAgICAgICBwcm9taXNlLnRoZW4oKHgzKSA9PiB7CiAgICAgICAgICByZXN1bHRBcnJheS5wdXNoKHgzKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlQXJyYXkpOwogICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CiAgICB9OwogICAgdGltZW91dFdyYXAgPSBhc3luYyAocHJvbWlzZUFyZywgdGltZW91dEluTXNBcmcsIHJlamVjdEFyZyA9IHRydWUpID0+IHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBpZiAocmVqZWN0QXJnKSB7CiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoInRpbWVvdXQiKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgIH0KICAgICAgICB9LCB0aW1lb3V0SW5Nc0FyZyk7CiAgICAgICAgcHJvbWlzZUFyZy50aGVuKHJlc29sdmUyLCByZWplY3QpOwogICAgICB9KTsKICAgIH07CiAgICB0aW1lb3V0QW5kQ29udGludWUgPSBhc3luYyAocHJvbWlzZUFyZywgdGltZW91dEluTXNBcmcgPSA2ZTQpID0+IHsKICAgICAgcmV0dXJuIHRpbWVvdXRXcmFwKHByb21pc2VBcmcsIHRpbWVvdXRJbk1zQXJnLCBmYWxzZSk7CiAgICB9OwogICAgZ2V0Rmlyc3RUcnVlT3JGYWxzZSA9IGFzeW5jIChwcm9taXNlc0FyZykgPT4gewogICAgICBjb25zdCBkb25lID0gZGVmZXIoKTsKICAgICAgZm9yIChjb25zdCBwcm9taXNlQXJnIG9mIHByb21pc2VzQXJnKSB7CiAgICAgICAgcHJvbWlzZUFyZy50aGVuKChyZXN1bHRBcmcpID0+IHsKICAgICAgICAgIGlmIChyZXN1bHRBcmcgPT09IHRydWUpIHsKICAgICAgICAgICAgZG9uZS5yZXNvbHZlKHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIFByb21pc2UuYWxsKHByb21pc2VzQXJnKS50aGVuKCgpID0+IHsKICAgICAgICBkb25lLnJlc29sdmUoZmFsc2UpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGRvbmUucHJvbWlzZTsKICAgIH07CiAgICBmcm9tQ2FsbGJhY2sgPSAoZm4pID0+IHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgICAgZm4oKGVyciwgcmVzdWx0KSA9PiB7CiAgICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICAgIHJlamVjdChlcnIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzb2x2ZTIocmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRyeF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS90c2xpYkAyLjguMS9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcwpmdW5jdGlvbiBfX2V4dGVuZHMoZDYsIGI1KSB7CiAgaWYgKHR5cGVvZiBiNSAhPT0gImZ1bmN0aW9uIiAmJiBiNSAhPT0gbnVsbCkKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIiArIFN0cmluZyhiNSkgKyAiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTsKICBleHRlbmRTdGF0aWNzKGQ2LCBiNSk7CiAgZnVuY3Rpb24gX18oKSB7CiAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDY7CiAgfQogIGQ2LnByb3RvdHlwZSA9IGI1ID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiNSkgOiAoX18ucHJvdG90eXBlID0gYjUucHJvdG90eXBlLCBuZXcgX18oKSk7Cn0KZnVuY3Rpb24gX19yZXN0KHM5LCBlMTEpIHsKICB2YXIgdDkgPSB7fTsKICBmb3IgKHZhciBwNyBpbiBzOSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzOSwgcDcpICYmIGUxMS5pbmRleE9mKHA3KSA8IDApCiAgICB0OVtwN10gPSBzOVtwN107CiAgaWYgKHM5ICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09ICJmdW5jdGlvbiIpCiAgICBmb3IgKHZhciBpMTEgPSAwLCBwNyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoczkpOyBpMTEgPCBwNy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGlmIChlMTEuaW5kZXhPZihwN1tpMTFdKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHM5LCBwN1tpMTFdKSkKICAgICAgICB0OVtwN1tpMTFdXSA9IHM5W3A3W2kxMV1dOwogICAgfQogIHJldHVybiB0OTsKfQpmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5MiwgZGVzYykgewogIHZhciBjMTEgPSBhcmd1bWVudHMubGVuZ3RoLCByMTEgPSBjMTEgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5MikgOiBkZXNjLCBkNjsKICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICJvYmplY3QiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSAiZnVuY3Rpb24iKSByMTEgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5MiwgZGVzYyk7CiAgZWxzZSBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgaWYgKGQ2ID0gZGVjb3JhdG9yc1tpMTFdKSByMTEgPSAoYzExIDwgMyA/IGQ2KHIxMSkgOiBjMTEgPiAzID8gZDYodGFyZ2V0LCBrZXkyLCByMTEpIDogZDYodGFyZ2V0LCBrZXkyKSkgfHwgcjExOwogIHJldHVybiBjMTEgPiAzICYmIHIxMSAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXkyLCByMTEpLCByMTE7Cn0KZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHsKICByZXR1cm4gZnVuY3Rpb24odGFyZ2V0LCBrZXkyKSB7CiAgICBkZWNvcmF0b3IodGFyZ2V0LCBrZXkyLCBwYXJhbUluZGV4KTsKICB9Owp9CmZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn0KZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnMyKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9CmZ1bmN0aW9uIF9fcHJvcEtleSh4MykgewogIHJldHVybiB0eXBlb2YgeDMgPT09ICJzeW1ib2wiID8geDMgOiAiIi5jb25jYXQoeDMpOwp9CmZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGY3LCBuYW1lLCBwcmVmaXg0KSB7CiAgaWYgKHR5cGVvZiBuYW1lID09PSAic3ltYm9sIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyAiWyIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sICJdIikgOiAiIjsKICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGY3LCAibmFtZSIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4NCA/ICIiLmNvbmNhdChwcmVmaXg0LCAiICIsIG5hbWUpIDogbmFtZSB9KTsKfQpmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7CiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gImZ1bmN0aW9uIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpOwp9CmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQNCwgZ2VuZXJhdG9yKSB7CiAgZnVuY3Rpb24gYWRvcHQodmFsdWUyKSB7CiAgICByZXR1cm4gdmFsdWUyIGluc3RhbmNlb2YgUDQgPyB2YWx1ZTIgOiBuZXcgUDQoZnVuY3Rpb24ocmVzb2x2ZTIpIHsKICAgICAgcmVzb2x2ZTIodmFsdWUyKTsKICAgIH0pOwogIH0KICByZXR1cm4gbmV3IChQNCB8fCAoUDQgPSBQcm9taXNlKSkoZnVuY3Rpb24ocmVzb2x2ZTIsIHJlamVjdCkgewogICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlMikgewogICAgICB0cnkgewogICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUyKSk7CiAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIHJlamVjdChlMTEpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZTIpIHsKICAgICAgdHJ5IHsKICAgICAgICBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZTIpKTsKICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgcmVqZWN0KGUxMSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7CiAgICAgIHJlc3VsdC5kb25lID8gcmVzb2x2ZTIocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsKICAgIH0KICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTsKICB9KTsKfQpmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5MykgewogIHZhciBfNCA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgewogICAgaWYgKHQ5WzBdICYgMSkgdGhyb3cgdDlbMV07CiAgICByZXR1cm4gdDlbMV07CiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgZjcsIHk1LCB0OSwgZzQgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09ICJmdW5jdGlvbiIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTsKICByZXR1cm4gZzQubmV4dCA9IHZlcmIoMCksIGc0WyJ0aHJvdyJdID0gdmVyYigxKSwgZzRbInJldHVybiJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiAoZzRbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXM7CiAgfSksIGc0OwogIGZ1bmN0aW9uIHZlcmIobjEzKSB7CiAgICByZXR1cm4gZnVuY3Rpb24odjUpIHsKICAgICAgcmV0dXJuIHN0ZXAoW24xMywgdjVdKTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHN0ZXAob3ApIHsKICAgIGlmIChmNykgdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpOwogICAgd2hpbGUgKGc0ICYmIChnNCA9IDAsIG9wWzBdICYmIChfNCA9IDApKSwgXzQpIHRyeSB7CiAgICAgIGlmIChmNyA9IDEsIHk1ICYmICh0OSA9IG9wWzBdICYgMiA/IHk1WyJyZXR1cm4iXSA6IG9wWzBdID8geTVbInRocm93Il0gfHwgKCh0OSA9IHk1WyJyZXR1cm4iXSkgJiYgdDkuY2FsbCh5NSksIDApIDogeTUubmV4dCkgJiYgISh0OSA9IHQ5LmNhbGwoeTUsIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ5OwogICAgICBpZiAoeTUgPSAwLCB0OSkgb3AgPSBbb3BbMF0gJiAyLCB0OS52YWx1ZV07CiAgICAgIHN3aXRjaCAob3BbMF0pIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgdDkgPSBvcDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNDoKICAgICAgICAgIF80LmxhYmVsKys7CiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgXzQubGFiZWwrKzsKICAgICAgICAgIHk1ID0gb3BbMV07CiAgICAgICAgICBvcCA9IFswXTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGNhc2UgNzoKICAgICAgICAgIG9wID0gXzQub3BzLnBvcCgpOwogICAgICAgICAgXzQudHJ5cy5wb3AoKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBpZiAoISh0OSA9IF80LnRyeXMsIHQ5ID0gdDkubGVuZ3RoID4gMCAmJiB0OVt0OS5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgewogICAgICAgICAgICBfNCA9IDA7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdDkgfHwgb3BbMV0gPiB0OVswXSAmJiBvcFsxXSA8IHQ5WzNdKSkgewogICAgICAgICAgICBfNC5sYWJlbCA9IG9wWzFdOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfNC5sYWJlbCA8IHQ5WzFdKSB7CiAgICAgICAgICAgIF80LmxhYmVsID0gdDlbMV07CiAgICAgICAgICAgIHQ5ID0gb3A7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHQ5ICYmIF80LmxhYmVsIDwgdDlbMl0pIHsKICAgICAgICAgICAgXzQubGFiZWwgPSB0OVsyXTsKICAgICAgICAgICAgXzQub3BzLnB1c2gob3ApOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0OVsyXSkgXzQub3BzLnBvcCgpOwogICAgICAgICAgXzQudHJ5cy5wb3AoKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIG9wID0gYm9keTMuY2FsbCh0aGlzQXJnLCBfNCk7CiAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgb3AgPSBbNiwgZTExXTsKICAgICAgeTUgPSAwOwogICAgfSBmaW5hbGx5IHsKICAgICAgZjcgPSB0OSA9IDA7CiAgICB9CiAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsKICAgIHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07CiAgfQp9CmZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtNiwgbzEzKSB7CiAgZm9yICh2YXIgcDcgaW4gbTYpIGlmIChwNyAhPT0gImRlZmF1bHQiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobzEzLCBwNykpIF9fY3JlYXRlQmluZGluZyhvMTMsIG02LCBwNyk7Cn0KZnVuY3Rpb24gX192YWx1ZXMobzEzKSB7CiAgdmFyIHM5ID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG02ID0gczkgJiYgbzEzW3M5XSwgaTExID0gMDsKICBpZiAobTYpIHJldHVybiBtNi5jYWxsKG8xMyk7CiAgaWYgKG8xMyAmJiB0eXBlb2YgbzEzLmxlbmd0aCA9PT0gIm51bWJlciIpIHJldHVybiB7CiAgICBuZXh0OiBmdW5jdGlvbigpIHsKICAgICAgaWYgKG8xMyAmJiBpMTEgPj0gbzEzLmxlbmd0aCkgbzEzID0gdm9pZCAwOwogICAgICByZXR1cm4geyB2YWx1ZTogbzEzICYmIG8xM1tpMTErK10sIGRvbmU6ICFvMTMgfTsKICAgIH0KICB9OwogIHRocm93IG5ldyBUeXBlRXJyb3IoczkgPyAiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iIDogIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTsKfQpmdW5jdGlvbiBfX3JlYWQobzEzLCBuMTMpIHsKICB2YXIgbTYgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG8xM1tTeW1ib2wuaXRlcmF0b3JdOwogIGlmICghbTYpIHJldHVybiBvMTM7CiAgdmFyIGkxMSA9IG02LmNhbGwobzEzKSwgcjExLCBhciA9IFtdLCBlMTE7CiAgdHJ5IHsKICAgIHdoaWxlICgobjEzID09PSB2b2lkIDAgfHwgbjEzLS0gPiAwKSAmJiAhKHIxMSA9IGkxMS5uZXh0KCkpLmRvbmUpIGFyLnB1c2gocjExLnZhbHVlKTsKICB9IGNhdGNoIChlcnJvcikgewogICAgZTExID0geyBlcnJvciB9OwogIH0gZmluYWxseSB7CiAgICB0cnkgewogICAgICBpZiAocjExICYmICFyMTEuZG9uZSAmJiAobTYgPSBpMTFbInJldHVybiJdKSkgbTYuY2FsbChpMTEpOwogICAgfSBmaW5hbGx5IHsKICAgICAgaWYgKGUxMSkgdGhyb3cgZTExLmVycm9yOwogICAgfQogIH0KICByZXR1cm4gYXI7Cn0KZnVuY3Rpb24gX19zcHJlYWQoKSB7CiAgZm9yICh2YXIgYXIgPSBbXSwgaTExID0gMDsgaTExIDwgYXJndW1lbnRzLmxlbmd0aDsgaTExKyspCiAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2kxMV0pKTsKICByZXR1cm4gYXI7Cn0KZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7CiAgZm9yICh2YXIgczkgPSAwLCBpMTEgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkxMSA8IGlsOyBpMTErKykgczkgKz0gYXJndW1lbnRzW2kxMV0ubGVuZ3RoOwogIGZvciAodmFyIHIxMSA9IEFycmF5KHM5KSwgazQgPSAwLCBpMTEgPSAwOyBpMTEgPCBpbDsgaTExKyspCiAgICBmb3IgKHZhciBhNSA9IGFyZ3VtZW50c1tpMTFdLCBqNCA9IDAsIGpsID0gYTUubGVuZ3RoOyBqNCA8IGpsOyBqNCsrLCBrNCsrKQogICAgICByMTFbazRdID0gYTVbajRdOwogIHJldHVybiByMTE7Cn0KZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bzIsIGZyb20yLCBwYWNrKSB7CiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaTExID0gMCwgbDYgPSBmcm9tMi5sZW5ndGgsIGFyOyBpMTEgPCBsNjsgaTExKyspIHsKICAgIGlmIChhciB8fCAhKGkxMSBpbiBmcm9tMikpIHsKICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tMiwgMCwgaTExKTsKICAgICAgYXJbaTExXSA9IGZyb20yW2kxMV07CiAgICB9CiAgfQogIHJldHVybiB0bzIuY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20yKSk7Cn0KZnVuY3Rpb24gX19hd2FpdCh2NSkgewogIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2NSwgdGhpcykgOiBuZXcgX19hd2FpdCh2NSk7Cn0KZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHsKICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTsKICB2YXIgZzQgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGkxMSwgcTIgPSBbXTsKICByZXR1cm4gaTExID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09ICJmdW5jdGlvbiIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKCJuZXh0IiksIHZlcmIoInRocm93IiksIHZlcmIoInJldHVybiIsIGF3YWl0UmV0dXJuKSwgaTExW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXM7CiAgfSwgaTExOwogIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGY3KSB7CiAgICByZXR1cm4gZnVuY3Rpb24odjUpIHsKICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2NSkudGhlbihmNywgcmVqZWN0KTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHZlcmIobjEzLCBmNykgewogICAgaWYgKGc0W24xM10pIHsKICAgICAgaTExW24xM10gPSBmdW5jdGlvbih2NSkgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihhNSwgYjUpIHsKICAgICAgICAgIHEyLnB1c2goW24xMywgdjUsIGE1LCBiNV0pID4gMSB8fCByZXN1bWUobjEzLCB2NSk7CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIGlmIChmNykgaTExW24xM10gPSBmNyhpMTFbbjEzXSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHJlc3VtZShuMTMsIHY1KSB7CiAgICB0cnkgewogICAgICBzdGVwKGc0W24xM10odjUpKTsKICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICBzZXR0bGUocTJbMF1bM10sIGUxMSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHN0ZXAocjExKSB7CiAgICByMTEudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIxMS52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocTJbMF1bMl0sIHIxMSk7CiAgfQogIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUyKSB7CiAgICByZXN1bWUoIm5leHQiLCB2YWx1ZTIpOwogIH0KICBmdW5jdGlvbiByZWplY3QodmFsdWUyKSB7CiAgICByZXN1bWUoInRocm93IiwgdmFsdWUyKTsKICB9CiAgZnVuY3Rpb24gc2V0dGxlKGY3LCB2NSkgewogICAgaWYgKGY3KHY1KSwgcTIuc2hpZnQoKSwgcTIubGVuZ3RoKSByZXN1bWUocTJbMF1bMF0sIHEyWzBdWzFdKTsKICB9Cn0KZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvMTMpIHsKICB2YXIgaTExLCBwNzsKICByZXR1cm4gaTExID0ge30sIHZlcmIoIm5leHQiKSwgdmVyYigidGhyb3ciLCBmdW5jdGlvbihlMTEpIHsKICAgIHRocm93IGUxMTsKICB9KSwgdmVyYigicmV0dXJuIiksIGkxMVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpczsKICB9LCBpMTE7CiAgZnVuY3Rpb24gdmVyYihuMTMsIGY3KSB7CiAgICBpMTFbbjEzXSA9IG8xM1tuMTNdID8gZnVuY3Rpb24odjUpIHsKICAgICAgcmV0dXJuIChwNyA9ICFwNykgPyB7IHZhbHVlOiBfX2F3YWl0KG8xM1tuMTNdKHY1KSksIGRvbmU6IGZhbHNlIH0gOiBmNyA/IGY3KHY1KSA6IHY1OwogICAgfSA6IGY3OwogIH0KfQpmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8xMykgewogIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpOwogIHZhciBtNiA9IG8xM1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGkxMTsKICByZXR1cm4gbTYgPyBtNi5jYWxsKG8xMykgOiAobzEzID0gdHlwZW9mIF9fdmFsdWVzID09PSAiZnVuY3Rpb24iID8gX192YWx1ZXMobzEzKSA6IG8xM1tTeW1ib2wuaXRlcmF0b3JdKCksIGkxMSA9IHt9LCB2ZXJiKCJuZXh0IiksIHZlcmIoInRocm93IiksIHZlcmIoInJldHVybiIpLCBpMTFbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpczsKICB9LCBpMTEpOwogIGZ1bmN0aW9uIHZlcmIobjEzKSB7CiAgICBpMTFbbjEzXSA9IG8xM1tuMTNdICYmIGZ1bmN0aW9uKHY1KSB7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICAgICAgdjUgPSBvMTNbbjEzXSh2NSksIHNldHRsZShyZXNvbHZlMiwgcmVqZWN0LCB2NS5kb25lLCB2NS52YWx1ZSk7CiAgICAgIH0pOwogICAgfTsKICB9CiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUyLCByZWplY3QsIGQ2LCB2NSkgewogICAgUHJvbWlzZS5yZXNvbHZlKHY1KS50aGVuKGZ1bmN0aW9uKHY2KSB7CiAgICAgIHJlc29sdmUyKHsgdmFsdWU6IHY2LCBkb25lOiBkNiB9KTsKICAgIH0sIHJlamVjdCk7CiAgfQp9CmZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3MikgewogIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsICJyYXciLCB7IHZhbHVlOiByYXcyIH0pOwogIH0gZWxzZSB7CiAgICBjb29rZWQucmF3ID0gcmF3MjsKICB9CiAgcmV0dXJuIGNvb2tlZDsKfQpmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7CiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDsKICB2YXIgcmVzdWx0ID0ge307CiAgaWYgKG1vZCAhPSBudWxsKSB7CiAgICBmb3IgKHZhciBrNCA9IG93bktleXMobW9kKSwgaTExID0gMDsgaTExIDwgazQubGVuZ3RoOyBpMTErKykgaWYgKGs0W2kxMV0gIT09ICJkZWZhdWx0IikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrNFtpMTFdKTsKICB9CiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTsKICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHsKICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTsKfQpmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZTE0LCBraW5kLCBmNykgewogIGlmIChraW5kID09PSAiYSIgJiYgIWY3KSB0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTsKICBpZiAodHlwZW9mIHN0YXRlMTQgPT09ICJmdW5jdGlvbiIgPyByZWNlaXZlciAhPT0gc3RhdGUxNCB8fCAhZjcgOiAhc3RhdGUxNC5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXQiKTsKICByZXR1cm4ga2luZCA9PT0gIm0iID8gZjcgOiBraW5kID09PSAiYSIgPyBmNy5jYWxsKHJlY2VpdmVyKSA6IGY3ID8gZjcudmFsdWUgOiBzdGF0ZTE0LmdldChyZWNlaXZlcik7Cn0KZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUxNCwgdmFsdWUyLCBraW5kLCBmNykgewogIGlmIChraW5kID09PSAibSIpIHRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZSIpOwogIGlmIChraW5kID09PSAiYSIgJiYgIWY3KSB0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTsKICBpZiAodHlwZW9mIHN0YXRlMTQgPT09ICJmdW5jdGlvbiIgPyByZWNlaXZlciAhPT0gc3RhdGUxNCB8fCAhZjcgOiAhc3RhdGUxNC5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpOwogIHJldHVybiBraW5kID09PSAiYSIgPyBmNy5jYWxsKHJlY2VpdmVyLCB2YWx1ZTIpIDogZjcgPyBmNy52YWx1ZSA9IHZhbHVlMiA6IHN0YXRlMTQuc2V0KHJlY2VpdmVyLCB2YWx1ZTIpLCB2YWx1ZTI7Cn0KZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlMTQsIHJlY2VpdmVyKSB7CiAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8IHR5cGVvZiByZWNlaXZlciAhPT0gIm9iamVjdCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdCIpOwogIHJldHVybiB0eXBlb2Ygc3RhdGUxNCA9PT0gImZ1bmN0aW9uIiA/IHJlY2VpdmVyID09PSBzdGF0ZTE0IDogc3RhdGUxNC5oYXMocmVjZWl2ZXIpOwp9CmZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudjIsIHZhbHVlMiwgYXN5bmMyKSB7CiAgaWYgKHZhbHVlMiAhPT0gbnVsbCAmJiB2YWx1ZTIgIT09IHZvaWQgMCkgewogICAgaWYgKHR5cGVvZiB2YWx1ZTIgIT09ICJvYmplY3QiICYmIHR5cGVvZiB2YWx1ZTIgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZC4iKTsKICAgIHZhciBkaXNwb3NlLCBpbm5lcjsKICAgIGlmIChhc3luYzIpIHsKICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICBkaXNwb3NlID0gdmFsdWUyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOwogICAgfQogICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkgewogICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgZGlzcG9zZSA9IHZhbHVlMltTeW1ib2wuZGlzcG9zZV07CiAgICAgIGlmIChhc3luYzIpIGlubmVyID0gZGlzcG9zZTsKICAgIH0KICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLiIpOwogICAgaWYgKGlubmVyKSBkaXNwb3NlID0gZnVuY3Rpb24oKSB7CiAgICAgIHRyeSB7CiAgICAgICAgaW5uZXIuY2FsbCh0aGlzKTsKICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUxMSk7CiAgICAgIH0KICAgIH07CiAgICBlbnYyLnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUyLCBkaXNwb3NlLCBhc3luYzogYXN5bmMyIH0pOwogIH0gZWxzZSBpZiAoYXN5bmMyKSB7CiAgICBlbnYyLnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTsKICB9CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52MikgewogIGZ1bmN0aW9uIGZhaWwoZTExKSB7CiAgICBlbnYyLmVycm9yID0gZW52Mi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUxMSwgZW52Mi5lcnJvciwgIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC4iKSA6IGUxMTsKICAgIGVudjIuaGFzRXJyb3IgPSB0cnVlOwogIH0KICB2YXIgcjExLCBzOSA9IDA7CiAgZnVuY3Rpb24gbmV4dDIoKSB7CiAgICB3aGlsZSAocjExID0gZW52Mi5zdGFjay5wb3AoKSkgewogICAgICB0cnkgewogICAgICAgIGlmICghcjExLmFzeW5jICYmIHM5ID09PSAxKSByZXR1cm4gczkgPSAwLCBlbnYyLnN0YWNrLnB1c2gocjExKSwgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuZXh0Mik7CiAgICAgICAgaWYgKHIxMS5kaXNwb3NlKSB7CiAgICAgICAgICB2YXIgcmVzdWx0ID0gcjExLmRpc3Bvc2UuY2FsbChyMTEudmFsdWUpOwogICAgICAgICAgaWYgKHIxMS5hc3luYykgcmV0dXJuIHM5IHw9IDIsIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dDIsIGZ1bmN0aW9uKGUxMSkgewogICAgICAgICAgICBmYWlsKGUxMSk7CiAgICAgICAgICAgIHJldHVybiBuZXh0MigpOwogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHM5IHw9IDE7CiAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIGZhaWwoZTExKTsKICAgICAgfQogICAgfQogICAgaWYgKHM5ID09PSAxKSByZXR1cm4gZW52Mi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudjIuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7CiAgICBpZiAoZW52Mi5oYXNFcnJvcikgdGhyb3cgZW52Mi5lcnJvcjsKICB9CiAgcmV0dXJuIG5leHQyKCk7Cn0KZnVuY3Rpb24gX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24ocGF0aDIsIHByZXNlcnZlSnN4KSB7CiAgaWYgKHR5cGVvZiBwYXRoMiA9PT0gInN0cmluZyIgJiYgL15cLlwuP1wvLy50ZXN0KHBhdGgyKSkgewogICAgcmV0dXJuIHBhdGgyLnJlcGxhY2UoL1wuKHRzeCkkfCgoPzpcLmQpPykoKD86XC5bXi4vXSs/KT8pXC4oW2NtXT8pdHMkL2ksIGZ1bmN0aW9uKG02LCB0c3gsIGQ2LCBleHQsIGNtKSB7CiAgICAgIHJldHVybiB0c3ggPyBwcmVzZXJ2ZUpzeCA/ICIuanN4IiA6ICIuanMiIDogZDYgJiYgKCFleHQgfHwgIWNtKSA/IG02IDogZDYgKyBleHQgKyAiLiIgKyBjbS50b0xvd2VyQ2FzZSgpICsgImpzIjsKICAgIH0pOwogIH0KICByZXR1cm4gcGF0aDI7Cn0KdmFyIGV4dGVuZFN0YXRpY3MsIF9fYXNzaWduLCBfX2NyZWF0ZUJpbmRpbmcsIF9fc2V0TW9kdWxlRGVmYXVsdCwgb3duS2V5cywgX1N1cHByZXNzZWRFcnJvciwgdHNsaWJfZXM2X2RlZmF1bHQ7CnZhciBpbml0X3RzbGliX2VzNiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3RzbGliQDIuOC4xL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIigpIHsKICAgIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkNiwgYjUpIHsKICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGQ3LCBiNikgewogICAgICAgIGQ3Ll9fcHJvdG9fXyA9IGI2OwogICAgICB9IHx8IGZ1bmN0aW9uKGQ3LCBiNikgewogICAgICAgIGZvciAodmFyIHA3IGluIGI2KSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGI2LCBwNykpIGQ3W3A3XSA9IGI2W3A3XTsKICAgICAgfTsKICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZDYsIGI1KTsKICAgIH07CiAgICBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkgewogICAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24yKHQ5KSB7CiAgICAgICAgZm9yICh2YXIgczksIGkxMSA9IDEsIG4xMyA9IGFyZ3VtZW50cy5sZW5ndGg7IGkxMSA8IG4xMzsgaTExKyspIHsKICAgICAgICAgIHM5ID0gYXJndW1lbnRzW2kxMV07CiAgICAgICAgICBmb3IgKHZhciBwNyBpbiBzOSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzOSwgcDcpKSB0OVtwN10gPSBzOVtwN107CiAgICAgICAgfQogICAgICAgIHJldHVybiB0OTsKICAgICAgfTsKICAgICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICB9OwogICAgOwogICAgOwogICAgOwogICAgOwogICAgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtNiwgazQpOwogICAgICBpZiAoIWRlc2MgfHwgKCJnZXQiIGluIGRlc2MgPyAhbTYuX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7CiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBtNltrNF07CiAgICAgICAgfSB9OwogICAgICB9CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvMTMsIGsyMiwgZGVzYyk7CiAgICB9KSA6IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIG8xM1trMjJdID0gbTZbazRdOwogICAgfSk7CiAgICA7CiAgICBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8xMywgdjUpIHsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8xMywgImRlZmF1bHQiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2NSB9KTsKICAgIH0pIDogZnVuY3Rpb24obzEzLCB2NSkgewogICAgICBvMTNbImRlZmF1bHQiXSA9IHY1OwogICAgfTsKICAgIG93bktleXMgPSBmdW5jdGlvbihvMTMpIHsKICAgICAgb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uKG8xNCkgewogICAgICAgIHZhciBhciA9IFtdOwogICAgICAgIGZvciAodmFyIGs0IGluIG8xNCkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvMTQsIGs0KSkgYXJbYXIubGVuZ3RoXSA9IGs0OwogICAgICAgIHJldHVybiBhcjsKICAgICAgfTsKICAgICAgcmV0dXJuIG93bktleXMobzEzKTsKICAgIH07CiAgICBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gImZ1bmN0aW9uIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlMikgewogICAgICB2YXIgZTExID0gbmV3IEVycm9yKG1lc3NhZ2UyKTsKICAgICAgcmV0dXJuIGUxMS5uYW1lID0gIlN1cHByZXNzZWRFcnJvciIsIGUxMS5lcnJvciA9IGVycm9yLCBlMTEuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGUxMTsKICAgIH07CiAgICB0c2xpYl9lczZfZGVmYXVsdCA9IHsKICAgICAgX19leHRlbmRzLAogICAgICBfX2Fzc2lnbiwKICAgICAgX19yZXN0LAogICAgICBfX2RlY29yYXRlLAogICAgICBfX3BhcmFtLAogICAgICBfX2VzRGVjb3JhdGUsCiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzOiBfX3J1bkluaXRpYWxpemVyczIsCiAgICAgIF9fcHJvcEtleSwKICAgICAgX19zZXRGdW5jdGlvbk5hbWUsCiAgICAgIF9fbWV0YWRhdGEsCiAgICAgIF9fYXdhaXRlciwKICAgICAgX19nZW5lcmF0b3IsCiAgICAgIF9fY3JlYXRlQmluZGluZywKICAgICAgX19leHBvcnRTdGFyLAogICAgICBfX3ZhbHVlcywKICAgICAgX19yZWFkLAogICAgICBfX3NwcmVhZCwKICAgICAgX19zcHJlYWRBcnJheXMsCiAgICAgIF9fc3ByZWFkQXJyYXksCiAgICAgIF9fYXdhaXQsCiAgICAgIF9fYXN5bmNHZW5lcmF0b3IsCiAgICAgIF9fYXN5bmNEZWxlZ2F0b3IsCiAgICAgIF9fYXN5bmNWYWx1ZXMsCiAgICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0LAogICAgICBfX2ltcG9ydFN0YXIsCiAgICAgIF9faW1wb3J0RGVmYXVsdCwKICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCwKICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCwKICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEluLAogICAgICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSwKICAgICAgX19kaXNwb3NlUmVzb3VyY2VzLAogICAgICBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNGdW5jdGlvbi5qcwpmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlMikgewogIHJldHVybiB0eXBlb2YgdmFsdWUyID09PSAiZnVuY3Rpb24iOwp9CnZhciBpbml0X2lzRnVuY3Rpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzRnVuY3Rpb24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9jcmVhdGVFcnJvckNsYXNzLmpzCmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkgewogIHZhciBfc3VwZXIgPSBmdW5jdGlvbihpbnN0YW5jZSkgewogICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7CiAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrOwogIH07CiAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpOwogIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTsKICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYzsKICByZXR1cm4gY3RvckZ1bmM7Cn0KdmFyIGluaXRfY3JlYXRlRXJyb3JDbGFzcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvY3JlYXRlRXJyb3JDbGFzcy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL1Vuc3Vic2NyaXB0aW9uRXJyb3IuanMKdmFyIFVuc3Vic2NyaXB0aW9uRXJyb3I7CnZhciBpbml0X1Vuc3Vic2NyaXB0aW9uRXJyb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL1Vuc3Vic2NyaXB0aW9uRXJyb3IuanMiKCkgewogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykgewogICAgICAgIF9zdXBlcih0aGlzKTsKICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnJvcnMgPyBlcnJvcnMubGVuZ3RoICsgIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuIiArIGVycm9ycy5tYXAoZnVuY3Rpb24oZXJyLCBpMTEpIHsKICAgICAgICAgIHJldHVybiBpMTEgKyAxICsgIikgIiArIGVyci50b1N0cmluZygpOwogICAgICAgIH0pLmpvaW4oIlxuICAiKSA6ICIiOwogICAgICAgIHRoaXMubmFtZSA9ICJVbnN1YnNjcmlwdGlvbkVycm9yIjsKICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9yczsKICAgICAgfTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9hcnJSZW1vdmUuanMKZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkgewogIGlmIChhcnIpIHsKICAgIHZhciBpbmRleDIgPSBhcnIuaW5kZXhPZihpdGVtKTsKICAgIDAgPD0gaW5kZXgyICYmIGFyci5zcGxpY2UoaW5kZXgyLCAxKTsKICB9Cn0KdmFyIGluaXRfYXJyUmVtb3ZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9hcnJSZW1vdmUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU3Vic2NyaXB0aW9uLmpzCmZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHwgdmFsdWUyICYmICJjbG9zZWQiIGluIHZhbHVlMiAmJiBpc0Z1bmN0aW9uKHZhbHVlMi5yZW1vdmUpICYmIGlzRnVuY3Rpb24odmFsdWUyLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZTIudW5zdWJzY3JpYmUpOwp9CmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7CiAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkgewogICAgZmluYWxpemVyKCk7CiAgfSBlbHNlIHsKICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpOwogIH0KfQp2YXIgU3Vic2NyaXB0aW9uLCBFTVBUWV9TVUJTQ1JJUFRJT047CnZhciBpbml0X1N1YnNjcmlwdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL1N1YnNjcmlwdGlvbi5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgICBpbml0X1Vuc3Vic2NyaXB0aW9uRXJyb3IoKTsKICAgIGluaXRfYXJyUmVtb3ZlKCk7CiAgICBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24oKSB7CiAgICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbjIoaW5pdGlhbFRlYXJkb3duKSB7CiAgICAgICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247CiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsOwogICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsOwogICAgICB9CiAgICAgIFN1YnNjcmlwdGlvbjIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGVfMSwgX2ExNiwgZV8yLCBfYjsKICAgICAgICB2YXIgZXJyb3JzOwogICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHsKICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTsKICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlOwogICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHsKICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDsKICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkgewogICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBfcGFyZW50YWdlXzFfMS52YWx1ZTsKICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgICAgICAgICAgICBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OwogICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hMTYgPSBfcGFyZW50YWdlXzEucmV0dXJuKSkgX2ExNi5jYWxsKF9wYXJlbnRhZ2VfMSk7CiAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgICBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgaW5pdGlhbEZpbmFsaXplciA9IHRoaXMuaW5pdGlhbFRlYXJkb3duOwogICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdGlhbEZpbmFsaXplcikpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBpbml0aWFsRmluYWxpemVyKCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgICAgIGVycm9ycyA9IGUxMSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlMTEuZXJyb3JzIDogW2UxMV07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7CiAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHsKICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHsKICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107CiAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoZXJyb3JzKSksIF9fcmVhZChlcnIuZXJyb3JzKSk7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZV8yXzEpIHsKICAgICAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OwogICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7CiAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChlcnJvcnMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YnNjcmlwdGlvbjIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHRlYXJkb3duKSB7CiAgICAgICAgdmFyIF9hMTY7CiAgICAgICAgaWYgKHRlYXJkb3duICYmIHRlYXJkb3duICE9PSB0aGlzKSB7CiAgICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHsKICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24yKSB7CiAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2ExNiA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIF9hMTYgIT09IHZvaWQgMCA/IF9hMTYgOiBbXSkucHVzaCh0ZWFyZG93bik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgICBTdWJzY3JpcHRpb24yLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24ocGFyZW50KSB7CiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7CiAgICAgICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KTsKICAgICAgfTsKICAgICAgU3Vic2NyaXB0aW9uMi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKHBhcmVudCkgewogICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlOwogICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50OwogICAgICB9OwogICAgICBTdWJzY3JpcHRpb24yLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24ocGFyZW50KSB7CiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7CiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkgewogICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDsKICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHsKICAgICAgICAgIGFyclJlbW92ZShfcGFyZW50YWdlLCBwYXJlbnQpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaXB0aW9uMi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24odGVhcmRvd24pIHsKICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzOwogICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pOwogICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbjIpIHsKICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTdWJzY3JpcHRpb24yLkVNUFRZID0gKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBlbXB0eTQgPSBuZXcgU3Vic2NyaXB0aW9uMigpOwogICAgICAgIGVtcHR5NC5jbG9zZWQgPSB0cnVlOwogICAgICAgIHJldHVybiBlbXB0eTQ7CiAgICAgIH0pKCk7CiAgICAgIHJldHVybiBTdWJzY3JpcHRpb24yOwogICAgfSkoKTsKICAgIEVNUFRZX1NVQlNDUklQVElPTiA9IFN1YnNjcmlwdGlvbi5FTVBUWTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL2NvbmZpZy5qcwp2YXIgY29uZmlnOwp2YXIgaW5pdF9jb25maWcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9jb25maWcuanMiKCkgewogICAgY29uZmlnID0gewogICAgICBvblVuaGFuZGxlZEVycm9yOiBudWxsLAogICAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsCiAgICAgIFByb21pc2U6IHZvaWQgMCwKICAgICAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogZmFsc2UsCiAgICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvdGltZW91dFByb3ZpZGVyLmpzCnZhciB0aW1lb3V0UHJvdmlkZXI7CnZhciBpbml0X3RpbWVvdXRQcm92aWRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci90aW1lb3V0UHJvdmlkZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIHRpbWVvdXRQcm92aWRlciA9IHsKICAgICAgc2V0VGltZW91dDogZnVuY3Rpb24oaGFuZGxlcjIsIHRpbWVvdXQyKSB7CiAgICAgICAgdmFyIGFyZ3MgPSBbXTsKICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTsKICAgICAgICB9CiAgICAgICAgdmFyIGRlbGVnYXRlID0gdGltZW91dFByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIGlmIChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuc2V0VGltZW91dCkgewogICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLnNldFRpbWVvdXQuYXBwbHkoZGVsZWdhdGUsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIyLCB0aW1lb3V0Ml0sIF9fcmVhZChhcmdzKSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIyLCB0aW1lb3V0Ml0sIF9fcmVhZChhcmdzKSkpOwogICAgICB9LAogICAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uKGhhbmRsZTMpIHsKICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7CiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLmNsZWFyVGltZW91dCkgfHwgY2xlYXJUaW1lb3V0KShoYW5kbGUzKTsKICAgICAgfSwKICAgICAgZGVsZWdhdGU6IHZvaWQgMAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvcmVwb3J0VW5oYW5kbGVkRXJyb3IuanMKZnVuY3Rpb24gcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyKSB7CiAgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICB2YXIgb25VbmhhbmRsZWRFcnJvciA9IGNvbmZpZy5vblVuaGFuZGxlZEVycm9yOwogICAgaWYgKG9uVW5oYW5kbGVkRXJyb3IpIHsKICAgICAgb25VbmhhbmRsZWRFcnJvcihlcnIpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgZXJyOwogICAgfQogIH0pOwp9CnZhciBpbml0X3JlcG9ydFVuaGFuZGxlZEVycm9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvci5qcyIoKSB7CiAgICBpbml0X2NvbmZpZygpOwogICAgaW5pdF90aW1lb3V0UHJvdmlkZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvbm9vcC5qcwpmdW5jdGlvbiBub29wKCkgewp9CnZhciBpbml0X25vb3AgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL25vb3AuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvTm90aWZpY2F0aW9uRmFjdG9yaWVzLmpzCmZ1bmN0aW9uIGVycm9yTm90aWZpY2F0aW9uKGVycm9yKSB7CiAgcmV0dXJuIGNyZWF0ZU5vdGlmaWNhdGlvbigiRSIsIHZvaWQgMCwgZXJyb3IpOwp9CmZ1bmN0aW9uIG5leHROb3RpZmljYXRpb24odmFsdWUyKSB7CiAgcmV0dXJuIGNyZWF0ZU5vdGlmaWNhdGlvbigiTiIsIHZhbHVlMiwgdm9pZCAwKTsKfQpmdW5jdGlvbiBjcmVhdGVOb3RpZmljYXRpb24oa2luZCwgdmFsdWUyLCBlcnJvcikgewogIHJldHVybiB7CiAgICBraW5kLAogICAgdmFsdWU6IHZhbHVlMiwKICAgIGVycm9yCiAgfTsKfQp2YXIgQ09NUExFVEVfTk9USUZJQ0FUSU9OOwp2YXIgaW5pdF9Ob3RpZmljYXRpb25GYWN0b3JpZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9Ob3RpZmljYXRpb25GYWN0b3JpZXMuanMiKCkgewogICAgQ09NUExFVEVfTk9USUZJQ0FUSU9OID0gKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gY3JlYXRlTm90aWZpY2F0aW9uKCJDIiwgdm9pZCAwLCB2b2lkIDApOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvZXJyb3JDb250ZXh0LmpzCmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikgewogIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZykgewogICAgdmFyIGlzUm9vdCA9ICFjb250ZXh0OwogICAgaWYgKGlzUm9vdCkgewogICAgICBjb250ZXh0ID0geyBlcnJvclRocm93bjogZmFsc2UsIGVycm9yOiBudWxsIH07CiAgICB9CiAgICBjYigpOwogICAgaWYgKGlzUm9vdCkgewogICAgICB2YXIgX2ExNiA9IGNvbnRleHQsIGVycm9yVGhyb3duID0gX2ExNi5lcnJvclRocm93biwgZXJyb3IgPSBfYTE2LmVycm9yOwogICAgICBjb250ZXh0ID0gbnVsbDsKICAgICAgaWYgKGVycm9yVGhyb3duKSB7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0KICAgIH0KICB9IGVsc2UgewogICAgY2IoKTsKICB9Cn0KZnVuY3Rpb24gY2FwdHVyZUVycm9yKGVycikgewogIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyAmJiBjb250ZXh0KSB7CiAgICBjb250ZXh0LmVycm9yVGhyb3duID0gdHJ1ZTsKICAgIGNvbnRleHQuZXJyb3IgPSBlcnI7CiAgfQp9CnZhciBjb250ZXh0Owp2YXIgaW5pdF9lcnJvckNvbnRleHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2Vycm9yQ29udGV4dC5qcyIoKSB7CiAgICBpbml0X2NvbmZpZygpOwogICAgY29udGV4dCA9IG51bGw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TdWJzY3JpYmVyLmpzCmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHsKICByZXR1cm4gX2JpbmQuY2FsbChmbiwgdGhpc0FyZyk7Cn0KZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHsKICBpZiAoY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpIHsKICAgIGNhcHR1cmVFcnJvcihlcnJvcik7CiAgfSBlbHNlIHsKICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTsKICB9Cn0KZnVuY3Rpb24gZGVmYXVsdEVycm9ySGFuZGxlcihlcnIpIHsKICB0aHJvdyBlcnI7Cn0KZnVuY3Rpb24gaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIHN1YnNjcmliZXIpIHsKICB2YXIgb25TdG9wcGVkTm90aWZpY2F0aW9uID0gY29uZmlnLm9uU3RvcHBlZE5vdGlmaWNhdGlvbjsKICBvblN0b3BwZWROb3RpZmljYXRpb24gJiYgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gb25TdG9wcGVkTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgc3Vic2NyaWJlcik7CiAgfSk7Cn0KdmFyIFN1YnNjcmliZXIsIF9iaW5kLCBDb25zdW1lck9ic2VydmVyLCBTYWZlU3Vic2NyaWJlciwgRU1QVFlfT0JTRVJWRVI7CnZhciBpbml0X1N1YnNjcmliZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TdWJzY3JpYmVyLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICAgIGluaXRfU3Vic2NyaXB0aW9uKCk7CiAgICBpbml0X2NvbmZpZygpOwogICAgaW5pdF9yZXBvcnRVbmhhbmRsZWRFcnJvcigpOwogICAgaW5pdF9ub29wKCk7CiAgICBpbml0X05vdGlmaWNhdGlvbkZhY3RvcmllcygpOwogICAgaW5pdF90aW1lb3V0UHJvdmlkZXIoKTsKICAgIGluaXRfZXJyb3JDb250ZXh0KCk7CiAgICBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoU3Vic2NyaWJlcjIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIyKGRlc3RpbmF0aW9uKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpczsKICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTsKICAgICAgICBpZiAoZGVzdGluYXRpb24pIHsKICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247CiAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7CiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChfdGhpcyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBTdWJzY3JpYmVyMi5jcmVhdGUgPSBmdW5jdGlvbihuZXh0MiwgZXJyb3IsIGNvbXBsZXRlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0MiwgZXJyb3IsIGNvbXBsZXRlKTsKICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHsKICAgICAgICAgIGhhbmRsZVN0b3BwZWROb3RpZmljYXRpb24obmV4dE5vdGlmaWNhdGlvbih2YWx1ZTIpLCB0aGlzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5fbmV4dCh2YWx1ZTIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7CiAgICAgICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKGVycm9yTm90aWZpY2F0aW9uKGVyciksIHRoaXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7CiAgICAgICAgICB0aGlzLl9lcnJvcihlcnIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7CiAgICAgICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKENPTVBMRVRFX05PVElGSUNBVElPTiwgdGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTdWJzY3JpYmVyMi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7CiAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7CiAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7CiAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YnNjcmliZXIyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZTIpOwogICAgICB9OwogICAgICBTdWJzY3JpYmVyMi5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBTdWJzY3JpYmVyMjsKICAgIH0pKFN1YnNjcmlwdGlvbik7CiAgICBfYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kOwogICAgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbigpIHsKICAgICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcjIocGFydGlhbE9ic2VydmVyKSB7CiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7CiAgICAgIH0KICAgICAgQ29uc3VtZXJPYnNlcnZlcjIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7CiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIubmV4dCh2YWx1ZTIpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29uc3VtZXJPYnNlcnZlcjIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyOwogICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29uc3VtZXJPYnNlcnZlcjIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyOwogICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSgpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXIyOwogICAgfSkoKTsKICAgIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBTYWZlU3Vic2NyaWJlcjIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjsKICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgIW9ic2VydmVyT3JOZXh0KSB7CiAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7CiAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0ICE9PSBudWxsICYmIG9ic2VydmVyT3JOZXh0ICE9PSB2b2lkIDAgPyBvYnNlcnZlck9yTmV4dCA6IHZvaWQgMCwKICAgICAgICAgICAgZXJyb3I6IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IHZvaWQgMCwKICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHZvaWQgMAogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIGNvbnRleHRfMTsKICAgICAgICAgIGlmIChfdGhpcyAmJiBjb25maWcudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHRfMSA9IE9iamVjdC5jcmVhdGUob2JzZXJ2ZXJPck5leHQpOwogICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMudW5zdWJzY3JpYmUoKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gewogICAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0Lm5leHQgJiYgYmluZChvYnNlcnZlck9yTmV4dC5uZXh0LCBjb250ZXh0XzEpLAogICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLAogICAgICAgICAgICAgIGNvbXBsZXRlOiBvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlLCBjb250ZXh0XzEpCiAgICAgICAgICAgIH07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICByZXR1cm4gU2FmZVN1YnNjcmliZXIyOwogICAgfSkoU3Vic2NyaWJlcik7CiAgICBFTVBUWV9PQlNFUlZFUiA9IHsKICAgICAgY2xvc2VkOiB0cnVlLAogICAgICBuZXh0OiBub29wLAogICAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlciwKICAgICAgY29tcGxldGU6IG5vb3AKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zeW1ib2wvb2JzZXJ2YWJsZS5qcwp2YXIgb2JzZXJ2YWJsZTsKdmFyIGluaXRfb2JzZXJ2YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3N5bWJvbC9vYnNlcnZhYmxlLmpzIigpIHsKICAgIG9ic2VydmFibGUgPSAoZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8ICJAQG9ic2VydmFibGUiOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaWRlbnRpdHkuanMKZnVuY3Rpb24gaWRlbnRpdHkoeDMpIHsKICByZXR1cm4geDM7Cn0KdmFyIGluaXRfaWRlbnRpdHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lkZW50aXR5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvcGlwZS5qcwpmdW5jdGlvbiBwaXBlKCkgewogIHZhciBmbnMgPSBbXTsKICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgZm5zW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgfQogIHJldHVybiBwaXBlRnJvbUFycmF5KGZucyk7Cn0KZnVuY3Rpb24gcGlwZUZyb21BcnJheShmbnMpIHsKICBpZiAoZm5zLmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIGlkZW50aXR5OwogIH0KICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkgewogICAgcmV0dXJuIGZuc1swXTsKICB9CiAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7CiAgICByZXR1cm4gZm5zLnJlZHVjZShmdW5jdGlvbihwcmV2LCBmbikgewogICAgICByZXR1cm4gZm4ocHJldik7CiAgICB9LCBpbnB1dCk7CiAgfTsKfQp2YXIgaW5pdF9waXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9waXBlLmpzIigpIHsKICAgIGluaXRfaWRlbnRpdHkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL09ic2VydmFibGUuanMKZnVuY3Rpb24gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpIHsKICB2YXIgX2ExNjsKICByZXR1cm4gKF9hMTYgPSBwcm9taXNlQ3RvciAhPT0gbnVsbCAmJiBwcm9taXNlQ3RvciAhPT0gdm9pZCAwID8gcHJvbWlzZUN0b3IgOiBjb25maWcuUHJvbWlzZSkgIT09IG51bGwgJiYgX2ExNiAhPT0gdm9pZCAwID8gX2ExNiA6IFByb21pc2U7Cn0KZnVuY3Rpb24gaXNPYnNlcnZlcih2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyICYmIGlzRnVuY3Rpb24odmFsdWUyLm5leHQpICYmIGlzRnVuY3Rpb24odmFsdWUyLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlMi5jb21wbGV0ZSk7Cn0KZnVuY3Rpb24gaXNTdWJzY3JpYmVyKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgJiYgdmFsdWUyIGluc3RhbmNlb2YgU3Vic2NyaWJlciB8fCBpc09ic2VydmVyKHZhbHVlMikgJiYgaXNTdWJzY3JpcHRpb24odmFsdWUyKTsKfQp2YXIgT2JzZXJ2YWJsZTsKdmFyIGluaXRfT2JzZXJ2YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL09ic2VydmFibGUuanMiKCkgewogICAgaW5pdF9TdWJzY3JpYmVyKCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9vYnNlcnZhYmxlKCk7CiAgICBpbml0X3BpcGUoKTsKICAgIGluaXRfY29uZmlnKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICAgIGluaXRfZXJyb3JDb250ZXh0KCk7CiAgICBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uKCkgewogICAgICBmdW5jdGlvbiBPYnNlcnZhYmxlMihzdWJzY3JpYmUyKSB7CiAgICAgICAgaWYgKHN1YnNjcmliZTIpIHsKICAgICAgICAgIHRoaXMuX3N1YnNjcmliZSA9IHN1YnNjcmliZTI7CiAgICAgICAgfQogICAgICB9CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ob3BlcmF0b3IpIHsKICAgICAgICB2YXIgb2JzZXJ2YWJsZTIgPSBuZXcgT2JzZXJ2YWJsZTIoKTsKICAgICAgICBvYnNlcnZhYmxlMi5zb3VyY2UgPSB0aGlzOwogICAgICAgIG9ic2VydmFibGUyLm9wZXJhdG9yID0gb3BlcmF0b3I7CiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUyOwogICAgICB9OwogICAgICBPYnNlcnZhYmxlMi5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkgewogICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBpc1N1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQpID8gb2JzZXJ2ZXJPck5leHQgOiBuZXcgU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSk7CiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIF9hMTYgPSBfdGhpcywgb3BlcmF0b3IgPSBfYTE2Lm9wZXJhdG9yLCBzb3VyY2UgPSBfYTE2LnNvdXJjZTsKICAgICAgICAgIHN1YnNjcmliZXIuYWRkKG9wZXJhdG9yID8gb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpIDogc291cmNlID8gX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKSA6IF90aGlzLl90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcikpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBzdWJzY3JpYmVyOwogICAgICB9OwogICAgICBPYnNlcnZhYmxlMi5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHNpbmspIHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShzaW5rKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24obmV4dDIsIHByb21pc2VDdG9yKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTsKICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uKHJlc29sdmUyLCByZWplY3QpIHsKICAgICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHsKICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIG5leHQyKHZhbHVlMik7CiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGVycm9yOiByZWplY3QsCiAgICAgICAgICAgIGNvbXBsZXRlOiByZXNvbHZlMgogICAgICAgICAgfSk7CiAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgICAgIHZhciBfYTE2OwogICAgICAgIHJldHVybiAoX2ExNiA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYTE2ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE2LnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgfTsKICAgICAgT2JzZXJ2YWJsZTIucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTsKICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgb3BlcmF0aW9uc1tfaV0gPSBhcmd1bWVudHNbX2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTsKICAgICAgfTsKICAgICAgT2JzZXJ2YWJsZTIucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHByb21pc2VDdG9yKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTsKICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uKHJlc29sdmUyLCByZWplY3QpIHsKICAgICAgICAgIHZhciB2YWx1ZTI7CiAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoZnVuY3Rpb24oeDMpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbHVlMiA9IHgzOwogICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTsKICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZTIodmFsdWUyKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9OwogICAgICBPYnNlcnZhYmxlMi5jcmVhdGUgPSBmdW5jdGlvbihzdWJzY3JpYmUyKSB7CiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlMihzdWJzY3JpYmUyKTsKICAgICAgfTsKICAgICAgcmV0dXJuIE9ic2VydmFibGUyOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvbGlmdC5qcwpmdW5jdGlvbiBoYXNMaWZ0KHNvdXJjZSkgewogIHJldHVybiBpc0Z1bmN0aW9uKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZS5saWZ0KTsKfQpmdW5jdGlvbiBvcGVyYXRlKGluaXQpIHsKICByZXR1cm4gZnVuY3Rpb24oc291cmNlKSB7CiAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7CiAgICAgIHJldHVybiBzb3VyY2UubGlmdChmdW5jdGlvbihsaWZ0ZWRTb3VyY2UpIHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIGluaXQobGlmdGVkU291cmNlLCB0aGlzKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKTsKICB9Owp9CnZhciBpbml0X2xpZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2xpZnQuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvT3BlcmF0b3JTdWJzY3JpYmVyLmpzCmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7CiAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7Cn0KdmFyIE9wZXJhdG9yU3Vic2NyaWJlcjsKdmFyIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlci5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9TdWJzY3JpYmVyKCk7CiAgICBPcGVyYXRvclN1YnNjcmliZXIgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhPcGVyYXRvclN1YnNjcmliZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBPcGVyYXRvclN1YnNjcmliZXIyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUsIHNob3VsZFVuc3Vic2NyaWJlKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7CiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7CiAgICAgICAgX3RoaXMuc2hvdWxkVW5zdWJzY3JpYmUgPSBzaG91bGRVbnN1YnNjcmliZTsKICAgICAgICBfdGhpcy5fbmV4dCA9IG9uTmV4dCA/IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgb25OZXh0KHZhbHVlMik7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTsKICAgICAgICAgIH0KICAgICAgICB9IDogX3N1cGVyLnByb3RvdHlwZS5fbmV4dDsKICAgICAgICBfdGhpcy5fZXJyb3IgPSBvbkVycm9yID8gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBvbkVycm9yKGVycik7CiAgICAgICAgICB9IGNhdGNoIChlcnIyKSB7CiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycjIpOwogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpOwogICAgICAgICAgfQogICAgICAgIH0gOiBfc3VwZXIucHJvdG90eXBlLl9lcnJvcjsKICAgICAgICBfdGhpcy5fY29tcGxldGUgPSBvbkNvbXBsZXRlID8gZnVuY3Rpb24oKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBvbkNvbXBsZXRlKCk7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTsKICAgICAgICAgIH0KICAgICAgICB9IDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIE9wZXJhdG9yU3Vic2NyaWJlcjIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF9hMTY7CiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkgewogICAgICAgICAgdmFyIGNsb3NlZF8xID0gdGhpcy5jbG9zZWQ7CiAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7CiAgICAgICAgICAhY2xvc2VkXzEgJiYgKChfYTE2ID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYTE2ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE2LmNhbGwodGhpcykpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIE9wZXJhdG9yU3Vic2NyaWJlcjI7CiAgICB9KShTdWJzY3JpYmVyKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9yZWZDb3VudC5qcwpmdW5jdGlvbiByZWZDb3VudCgpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBjb25uZWN0aW9uID0gbnVsbDsKICAgIHNvdXJjZS5fcmVmQ291bnQrKzsKICAgIHZhciByZWZDb3VudGVyID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBpZiAoIXNvdXJjZSB8fCBzb3VyY2UuX3JlZkNvdW50IDw9IDAgfHwgMCA8IC0tc291cmNlLl9yZWZDb3VudCkgewogICAgICAgIGNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YXIgc2hhcmVkQ29ubmVjdGlvbiA9IHNvdXJjZS5fY29ubmVjdGlvbjsKICAgICAgdmFyIGNvbm4gPSBjb25uZWN0aW9uOwogICAgICBjb25uZWN0aW9uID0gbnVsbDsKICAgICAgaWYgKHNoYXJlZENvbm5lY3Rpb24gJiYgKCFjb25uIHx8IHNoYXJlZENvbm5lY3Rpb24gPT09IGNvbm4pKSB7CiAgICAgICAgc2hhcmVkQ29ubmVjdGlvbi51bnN1YnNjcmliZSgpOwogICAgICB9CiAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgIH0pOwogICAgc291cmNlLnN1YnNjcmliZShyZWZDb3VudGVyKTsKICAgIGlmICghcmVmQ291bnRlci5jbG9zZWQpIHsKICAgICAgY29ubmVjdGlvbiA9IHNvdXJjZS5jb25uZWN0KCk7CiAgICB9CiAgfSk7Cn0KdmFyIGluaXRfcmVmQ291bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVmQ291bnQuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUuanMKdmFyIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTsKdmFyIGluaXRfQ29ubmVjdGFibGVPYnNlcnZhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9TdWJzY3JpcHRpb24oKTsKICAgIGluaXRfcmVmQ291bnQoKTsKICAgIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyKCk7CiAgICBpbml0X2xpZnQoKTsKICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZSA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIoc291cmNlLCBzdWJqZWN0RmFjdG9yeSkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlOwogICAgICAgIF90aGlzLnN1YmplY3RGYWN0b3J5ID0gc3ViamVjdEZhY3Rvcnk7CiAgICAgICAgX3RoaXMuX3N1YmplY3QgPSBudWxsOwogICAgICAgIF90aGlzLl9yZWZDb3VudCA9IDA7CiAgICAgICAgX3RoaXMuX2Nvbm5lY3Rpb24gPSBudWxsOwogICAgICAgIGlmIChoYXNMaWZ0KHNvdXJjZSkpIHsKICAgICAgICAgIF90aGlzLmxpZnQgPSBzb3VyY2UubGlmdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgfTsKICAgICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlMi5wcm90b3R5cGUuZ2V0U3ViamVjdCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzdWJqZWN0ID0gdGhpcy5fc3ViamVjdDsKICAgICAgICBpZiAoIXN1YmplY3QgfHwgc3ViamVjdC5pc1N0b3BwZWQpIHsKICAgICAgICAgIHRoaXMuX3N1YmplY3QgPSB0aGlzLnN1YmplY3RGYWN0b3J5KCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9zdWJqZWN0OwogICAgICB9OwogICAgICBDb25uZWN0YWJsZU9ic2VydmFibGUyLnByb3RvdHlwZS5fdGVhcmRvd24gPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLl9yZWZDb3VudCA9IDA7CiAgICAgICAgdmFyIF9jb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbjsKICAgICAgICB0aGlzLl9zdWJqZWN0ID0gdGhpcy5fY29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgX2Nvbm5lY3Rpb24gPT09IG51bGwgfHwgX2Nvbm5lY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jb25uZWN0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgIH07CiAgICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgIHZhciBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbjsKICAgICAgICBpZiAoIWNvbm5lY3Rpb24pIHsKICAgICAgICAgIGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpOwogICAgICAgICAgdmFyIHN1YmplY3RfMSA9IHRoaXMuZ2V0U3ViamVjdCgpOwogICAgICAgICAgY29ubmVjdGlvbi5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJqZWN0XzEsIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIF90aGlzLl90ZWFyZG93bigpOwogICAgICAgICAgICBzdWJqZWN0XzEuY29tcGxldGUoKTsKICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikgewogICAgICAgICAgICBfdGhpcy5fdGVhcmRvd24oKTsKICAgICAgICAgICAgc3ViamVjdF8xLmVycm9yKGVycik7CiAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIF90aGlzLl90ZWFyZG93bigpOwogICAgICAgICAgfSkpKTsKICAgICAgICAgIGlmIChjb25uZWN0aW9uLmNsb3NlZCkgewogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgICAgY29ubmVjdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb247CiAgICAgIH07CiAgICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIucHJvdG90eXBlLnJlZkNvdW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHJlZkNvdW50KCkodGhpcyk7CiAgICAgIH07CiAgICAgIHJldHVybiBDb25uZWN0YWJsZU9ic2VydmFibGUyOwogICAgfSkoT2JzZXJ2YWJsZSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlci5qcwp2YXIgcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlcjsKdmFyIGluaXRfcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyLmpzIigpIHsKICAgIHBlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXIgPSB7CiAgICAgIG5vdzogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIChwZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyLmRlbGVnYXRlIHx8IHBlcmZvcm1hbmNlKS5ub3coKTsKICAgICAgfSwKICAgICAgZGVsZWdhdGU6IHZvaWQgMAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9hbmltYXRpb25GcmFtZVByb3ZpZGVyLmpzCnZhciBhbmltYXRpb25GcmFtZVByb3ZpZGVyOwp2YXIgaW5pdF9hbmltYXRpb25GcmFtZVByb3ZpZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2FuaW1hdGlvbkZyYW1lUHJvdmlkZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfU3Vic2NyaXB0aW9uKCk7CiAgICBhbmltYXRpb25GcmFtZVByb3ZpZGVyID0gewogICAgICBzY2hlZHVsZTogZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgICAgICB2YXIgcmVxdWVzdCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZTsKICAgICAgICB2YXIgY2FuY2VsID0gY2FuY2VsQW5pbWF0aW9uRnJhbWU7CiAgICAgICAgdmFyIGRlbGVnYXRlID0gYW5pbWF0aW9uRnJhbWVQcm92aWRlci5kZWxlZ2F0ZTsKICAgICAgICBpZiAoZGVsZWdhdGUpIHsKICAgICAgICAgIHJlcXVlc3QgPSBkZWxlZ2F0ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7CiAgICAgICAgICBjYW5jZWwgPSBkZWxlZ2F0ZS5jYW5jZWxBbmltYXRpb25GcmFtZTsKICAgICAgICB9CiAgICAgICAgdmFyIGhhbmRsZTMgPSByZXF1ZXN0KGZ1bmN0aW9uKHRpbWVzdGFtcDIpIHsKICAgICAgICAgIGNhbmNlbCA9IHZvaWQgMDsKICAgICAgICAgIGNhbGxiYWNrKHRpbWVzdGFtcDIpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGNhbmNlbCA9PT0gbnVsbCB8fCBjYW5jZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhbmNlbChoYW5kbGUzKTsKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYXJncyA9IFtdOwogICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgICAgfQogICAgICAgIHZhciBkZWxlZ2F0ZSA9IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuZGVsZWdhdGU7CiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLnJlcXVlc3RBbmltYXRpb25GcmFtZSkgfHwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKS5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpOwogICAgICB9LAogICAgICBjYW5jZWxBbmltYXRpb25GcmFtZTogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGFyZ3MgPSBbXTsKICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldOwogICAgICAgIH0KICAgICAgICB2YXIgZGVsZWdhdGUgPSBhbmltYXRpb25GcmFtZVByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jYW5jZWxBbmltYXRpb25GcmFtZSkgfHwgY2FuY2VsQW5pbWF0aW9uRnJhbWUpLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGFyZ3MpKSk7CiAgICAgIH0sCiAgICAgIGRlbGVnYXRlOiB2b2lkIDAKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2RvbS9hbmltYXRpb25GcmFtZXMuanMKZnVuY3Rpb24gYW5pbWF0aW9uRnJhbWVzKHRpbWVzdGFtcFByb3ZpZGVyKSB7CiAgcmV0dXJuIHRpbWVzdGFtcFByb3ZpZGVyID8gYW5pbWF0aW9uRnJhbWVzRmFjdG9yeSh0aW1lc3RhbXBQcm92aWRlcikgOiBERUZBVUxUX0FOSU1BVElPTl9GUkFNRVM7Cn0KZnVuY3Rpb24gYW5pbWF0aW9uRnJhbWVzRmFjdG9yeSh0aW1lc3RhbXBQcm92aWRlcikgewogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICB2YXIgcHJvdmlkZXIgPSB0aW1lc3RhbXBQcm92aWRlciB8fCBwZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyOwogICAgdmFyIHN0YXJ0ID0gcHJvdmlkZXIubm93KCk7CiAgICB2YXIgaWQgPSAwOwogICAgdmFyIHJ1biA9IGZ1bmN0aW9uKCkgewogICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7CiAgICAgICAgaWQgPSBhbmltYXRpb25GcmFtZVByb3ZpZGVyLnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbih0aW1lc3RhbXAyKSB7CiAgICAgICAgICBpZCA9IDA7CiAgICAgICAgICB2YXIgbm93MiA9IHByb3ZpZGVyLm5vdygpOwogICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHsKICAgICAgICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXBQcm92aWRlciA/IG5vdzIgOiB0aW1lc3RhbXAyLAogICAgICAgICAgICBlbGFwc2VkOiBub3cyIC0gc3RhcnQKICAgICAgICAgIH0pOwogICAgICAgICAgcnVuKCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBydW4oKTsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgaWYgKGlkKSB7CiAgICAgICAgYW5pbWF0aW9uRnJhbWVQcm92aWRlci5jYW5jZWxBbmltYXRpb25GcmFtZShpZCk7CiAgICAgIH0KICAgIH07CiAgfSk7Cn0KdmFyIERFRkFVTFRfQU5JTUFUSU9OX0ZSQU1FUzsKdmFyIGluaXRfYW5pbWF0aW9uRnJhbWVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9kb20vYW5pbWF0aW9uRnJhbWVzLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lUHJvdmlkZXIoKTsKICAgIERFRkFVTFRfQU5JTUFUSU9OX0ZSQU1FUyA9IGFuaW1hdGlvbkZyYW1lc0ZhY3RvcnkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IuanMKdmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yOwp2YXIgaW5pdF9PYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IuanMiKCkgewogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBPYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBPYmplY3RVbnN1YnNjcmliZWRFcnJvckltcGwoKSB7CiAgICAgICAgX3N1cGVyKHRoaXMpOwogICAgICAgIHRoaXMubmFtZSA9ICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciI7CiAgICAgICAgdGhpcy5tZXNzYWdlID0gIm9iamVjdCB1bnN1YnNjcmliZWQiOwogICAgICB9OwogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TdWJqZWN0LmpzCnZhciBTdWJqZWN0LCBBbm9ueW1vdXNTdWJqZWN0Owp2YXIgaW5pdF9TdWJqZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU3ViamVjdC5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9PYnNlcnZhYmxlKCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9PYmplY3RVbnN1YnNjcmliZWRFcnJvcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICAgIGluaXRfZXJyb3JDb250ZXh0KCk7CiAgICBTdWJqZWN0ID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoU3ViamVjdDIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIFN1YmplY3QyKCkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7CiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7CiAgICAgICAgX3RoaXMub2JzZXJ2ZXJzID0gW107CiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7CiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTsKICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IG51bGw7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ob3BlcmF0b3IpIHsKICAgICAgICB2YXIgc3ViamVjdCA9IG5ldyBBbm9ueW1vdXNTdWJqZWN0KHRoaXMsIHRoaXMpOwogICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjsKICAgICAgICByZXR1cm4gc3ViamVjdDsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgZV8xLCBfYTE2OwogICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTsKICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7CiAgICAgICAgICAgIGlmICghX3RoaXMuY3VycmVudE9ic2VydmVycykgewogICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKF90aGlzLm9ic2VydmVycyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKF90aGlzLmN1cnJlbnRPYnNlcnZlcnMpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7CiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfYy52YWx1ZTsKICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUyKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgICAgICAgICAgZV8xID0geyBlcnJvcjogZV8xXzEgfTsKICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYTE2ID0gX2IucmV0dXJuKSkgX2ExNi5jYWxsKF9iKTsKICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9OwogICAgICBTdWJqZWN0Mi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlcnIpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbigpIHsKICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7CiAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkgewogICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7CiAgICAgICAgICAgIF90aGlzLnRocm93bkVycm9yID0gZXJyOwogICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzOwogICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkgewogICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmVycm9yKGVycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24oKSB7CiAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpOwogICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHsKICAgICAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTsKICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVyczsKICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHsKICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlOwogICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDsKICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1YmplY3QyLnByb3RvdHlwZSwgIm9ic2VydmVkIiwgewogICAgICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgX2ExNjsKICAgICAgICAgIHJldHVybiAoKF9hMTYgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2ExNiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNi5sZW5ndGgpID4gMDsKICAgICAgICB9LAogICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICB9KTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpOwogICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpOwogICAgICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7CiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpOwogICAgICB9OwogICAgICBTdWJqZWN0Mi5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgdmFyIF9hMTYgPSB0aGlzLCBoYXNFcnJvciA9IF9hMTYuaGFzRXJyb3IsIGlzU3RvcHBlZCA9IF9hMTYuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYTE2Lm9ic2VydmVyczsKICAgICAgICBpZiAoaGFzRXJyb3IgfHwgaXNTdG9wcGVkKSB7CiAgICAgICAgICByZXR1cm4gRU1QVFlfU1VCU0NSSVBUSU9OOwogICAgICAgIH0KICAgICAgICB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsOwogICAgICAgIG9ic2VydmVycy5wdXNoKHN1YnNjcmliZXIpOwogICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uKCkgewogICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7CiAgICAgICAgICBhcnJSZW1vdmUob2JzZXJ2ZXJzLCBzdWJzY3JpYmVyKTsKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgICAgIHZhciBfYTE2ID0gdGhpcywgaGFzRXJyb3IgPSBfYTE2Lmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hMTYudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hMTYuaXNTdG9wcGVkOwogICAgICAgIGlmIChoYXNFcnJvcikgewogICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7CiAgICAgICAgfSBlbHNlIGlmIChpc1N0b3BwZWQpIHsKICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgb2JzZXJ2YWJsZTIgPSBuZXcgT2JzZXJ2YWJsZSgpOwogICAgICAgIG9ic2VydmFibGUyLnNvdXJjZSA9IHRoaXM7CiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUyOwogICAgICB9OwogICAgICBTdWJqZWN0Mi5jcmVhdGUgPSBmdW5jdGlvbihkZXN0aW5hdGlvbiwgc291cmNlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpOwogICAgICB9OwogICAgICByZXR1cm4gU3ViamVjdDI7CiAgICB9KShPYnNlcnZhYmxlKTsKICAgIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0MiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQW5vbnltb3VzU3ViamVjdDIoZGVzdGluYXRpb24sIHNvdXJjZSkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjsKICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIEFub255bW91c1N1YmplY3QyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgdmFyIF9hMTYsIF9iOwogICAgICAgIChfYiA9IChfYTE2ID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2ExNiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNi5uZXh0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYTE2LCB2YWx1ZTIpOwogICAgICB9OwogICAgICBBbm9ueW1vdXNTdWJqZWN0Mi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlcnIpIHsKICAgICAgICB2YXIgX2ExNiwgX2I7CiAgICAgICAgKF9iID0gKF9hMTYgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYTE2ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE2LmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYTE2LCBlcnIpOwogICAgICB9OwogICAgICBBbm9ueW1vdXNTdWJqZWN0Mi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNiwgX2I7CiAgICAgICAgKF9iID0gKF9hMTYgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYTE2ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE2LmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYTE2KTsKICAgICAgfTsKICAgICAgQW5vbnltb3VzU3ViamVjdDIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdmFyIF9hMTYsIF9iOwogICAgICAgIHJldHVybiAoX2IgPSAoX2ExNiA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYTE2ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE2LnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OOwogICAgICB9OwogICAgICByZXR1cm4gQW5vbnltb3VzU3ViamVjdDI7CiAgICB9KShTdWJqZWN0KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL0JlaGF2aW9yU3ViamVjdC5qcwp2YXIgQmVoYXZpb3JTdWJqZWN0Owp2YXIgaW5pdF9CZWhhdmlvclN1YmplY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3QuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfU3ViamVjdCgpOwogICAgQmVoYXZpb3JTdWJqZWN0ID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQmVoYXZpb3JTdWJqZWN0MiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQmVoYXZpb3JTdWJqZWN0MihfdmFsdWUpIHsKICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOwogICAgICAgIF90aGlzLl92YWx1ZSA9IF92YWx1ZTsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJlaGF2aW9yU3ViamVjdDIucHJvdG90eXBlLCAidmFsdWUiLCB7CiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlKCk7CiAgICAgICAgfSwKICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgfSk7CiAgICAgIEJlaGF2aW9yU3ViamVjdDIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IF9zdXBlci5wcm90b3R5cGUuX3N1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpOwogICAgICAgICFzdWJzY3JpcHRpb24uY2xvc2VkICYmIHN1YnNjcmliZXIubmV4dCh0aGlzLl92YWx1ZSk7CiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjsKICAgICAgfTsKICAgICAgQmVoYXZpb3JTdWJqZWN0Mi5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNiA9IHRoaXMsIGhhc0Vycm9yID0gX2ExNi5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYTE2LnRocm93bkVycm9yLCBfdmFsdWUgPSBfYTE2Ll92YWx1ZTsKICAgICAgICBpZiAoaGFzRXJyb3IpIHsKICAgICAgICAgIHRocm93IHRocm93bkVycm9yOwogICAgICAgIH0KICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7CiAgICAgICAgcmV0dXJuIF92YWx1ZTsKICAgICAgfTsKICAgICAgQmVoYXZpb3JTdWJqZWN0Mi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgIF9zdXBlci5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsIHRoaXMuX3ZhbHVlID0gdmFsdWUyKTsKICAgICAgfTsKICAgICAgcmV0dXJuIEJlaGF2aW9yU3ViamVjdDI7CiAgICB9KShTdWJqZWN0KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXIuanMKdmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlcjsKdmFyIGluaXRfZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2RhdGVUaW1lc3RhbXBQcm92aWRlci5qcyIoKSB7CiAgICBkYXRlVGltZXN0YW1wUHJvdmlkZXIgPSB7CiAgICAgIG5vdzogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIChkYXRlVGltZXN0YW1wUHJvdmlkZXIuZGVsZWdhdGUgfHwgRGF0ZSkubm93KCk7CiAgICAgIH0sCiAgICAgIGRlbGVnYXRlOiB2b2lkIDAKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9SZXBsYXlTdWJqZWN0LmpzCnZhciBSZXBsYXlTdWJqZWN0Owp2YXIgaW5pdF9SZXBsYXlTdWJqZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvUmVwbGF5U3ViamVjdC5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9TdWJqZWN0KCk7CiAgICBpbml0X2RhdGVUaW1lc3RhbXBQcm92aWRlcigpOwogICAgUmVwbGF5U3ViamVjdCA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKFJlcGxheVN1YmplY3QyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBSZXBsYXlTdWJqZWN0MihfYnVmZmVyU2l6ZSwgX3dpbmRvd1RpbWUsIF90aW1lc3RhbXBQcm92aWRlcikgewogICAgICAgIGlmIChfYnVmZmVyU2l6ZSA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBfYnVmZmVyU2l6ZSA9IEluZmluaXR5OwogICAgICAgIH0KICAgICAgICBpZiAoX3dpbmRvd1RpbWUgPT09IHZvaWQgMCkgewogICAgICAgICAgX3dpbmRvd1RpbWUgPSBJbmZpbml0eTsKICAgICAgICB9CiAgICAgICAgaWYgKF90aW1lc3RhbXBQcm92aWRlciA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBfdGltZXN0YW1wUHJvdmlkZXIgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXI7CiAgICAgICAgfQogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuX2J1ZmZlclNpemUgPSBfYnVmZmVyU2l6ZTsKICAgICAgICBfdGhpcy5fd2luZG93VGltZSA9IF93aW5kb3dUaW1lOwogICAgICAgIF90aGlzLl90aW1lc3RhbXBQcm92aWRlciA9IF90aW1lc3RhbXBQcm92aWRlcjsKICAgICAgICBfdGhpcy5fYnVmZmVyID0gW107CiAgICAgICAgX3RoaXMuX2luZmluaXRlVGltZVdpbmRvdyA9IHRydWU7CiAgICAgICAgX3RoaXMuX2luZmluaXRlVGltZVdpbmRvdyA9IF93aW5kb3dUaW1lID09PSBJbmZpbml0eTsKICAgICAgICBfdGhpcy5fYnVmZmVyU2l6ZSA9IE1hdGgubWF4KDEsIF9idWZmZXJTaXplKTsKICAgICAgICBfdGhpcy5fd2luZG93VGltZSA9IE1hdGgubWF4KDEsIF93aW5kb3dUaW1lKTsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgUmVwbGF5U3ViamVjdDIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICB2YXIgX2ExNiA9IHRoaXMsIGlzU3RvcHBlZCA9IF9hMTYuaXNTdG9wcGVkLCBfYnVmZmVyID0gX2ExNi5fYnVmZmVyLCBfaW5maW5pdGVUaW1lV2luZG93ID0gX2ExNi5faW5maW5pdGVUaW1lV2luZG93LCBfdGltZXN0YW1wUHJvdmlkZXIgPSBfYTE2Ll90aW1lc3RhbXBQcm92aWRlciwgX3dpbmRvd1RpbWUgPSBfYTE2Ll93aW5kb3dUaW1lOwogICAgICAgIGlmICghaXNTdG9wcGVkKSB7CiAgICAgICAgICBfYnVmZmVyLnB1c2godmFsdWUyKTsKICAgICAgICAgICFfaW5maW5pdGVUaW1lV2luZG93ICYmIF9idWZmZXIucHVzaChfdGltZXN0YW1wUHJvdmlkZXIubm93KCkgKyBfd2luZG93VGltZSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX3RyaW1CdWZmZXIoKTsKICAgICAgICBfc3VwZXIucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLCB2YWx1ZTIpOwogICAgICB9OwogICAgICBSZXBsYXlTdWJqZWN0Mi5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7CiAgICAgICAgdGhpcy5fdHJpbUJ1ZmZlcigpOwogICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgICB2YXIgX2ExNiA9IHRoaXMsIF9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfYTE2Ll9pbmZpbml0ZVRpbWVXaW5kb3csIF9idWZmZXIgPSBfYTE2Ll9idWZmZXI7CiAgICAgICAgdmFyIGNvcHkgPSBfYnVmZmVyLnNsaWNlKCk7CiAgICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgY29weS5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpMTEgKz0gX2luZmluaXRlVGltZVdpbmRvdyA/IDEgOiAyKSB7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoY29weVtpMTFdKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTsKICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uOwogICAgICB9OwogICAgICBSZXBsYXlTdWJqZWN0Mi5wcm90b3R5cGUuX3RyaW1CdWZmZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNiA9IHRoaXMsIF9idWZmZXJTaXplID0gX2ExNi5fYnVmZmVyU2l6ZSwgX3RpbWVzdGFtcFByb3ZpZGVyID0gX2ExNi5fdGltZXN0YW1wUHJvdmlkZXIsIF9idWZmZXIgPSBfYTE2Ll9idWZmZXIsIF9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfYTE2Ll9pbmZpbml0ZVRpbWVXaW5kb3c7CiAgICAgICAgdmFyIGFkanVzdGVkQnVmZmVyU2l6ZSA9IChfaW5maW5pdGVUaW1lV2luZG93ID8gMSA6IDIpICogX2J1ZmZlclNpemU7CiAgICAgICAgX2J1ZmZlclNpemUgPCBJbmZpbml0eSAmJiBhZGp1c3RlZEJ1ZmZlclNpemUgPCBfYnVmZmVyLmxlbmd0aCAmJiBfYnVmZmVyLnNwbGljZSgwLCBfYnVmZmVyLmxlbmd0aCAtIGFkanVzdGVkQnVmZmVyU2l6ZSk7CiAgICAgICAgaWYgKCFfaW5maW5pdGVUaW1lV2luZG93KSB7CiAgICAgICAgICB2YXIgbm93MiA9IF90aW1lc3RhbXBQcm92aWRlci5ub3coKTsKICAgICAgICAgIHZhciBsYXN0MyA9IDA7CiAgICAgICAgICBmb3IgKHZhciBpMTEgPSAxOyBpMTEgPCBfYnVmZmVyLmxlbmd0aCAmJiBfYnVmZmVyW2kxMV0gPD0gbm93MjsgaTExICs9IDIpIHsKICAgICAgICAgICAgbGFzdDMgPSBpMTE7CiAgICAgICAgICB9CiAgICAgICAgICBsYXN0MyAmJiBfYnVmZmVyLnNwbGljZSgwLCBsYXN0MyArIDEpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIFJlcGxheVN1YmplY3QyOwogICAgfSkoU3ViamVjdCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9Bc3luY1N1YmplY3QuanMKdmFyIEFzeW5jU3ViamVjdDsKdmFyIGluaXRfQXN5bmNTdWJqZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvQXN5bmNTdWJqZWN0LmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X1N1YmplY3QoKTsKICAgIEFzeW5jU3ViamVjdCA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKEFzeW5jU3ViamVjdDIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIEFzeW5jU3ViamVjdDIoKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuX3ZhbHVlID0gbnVsbDsKICAgICAgICBfdGhpcy5faGFzVmFsdWUgPSBmYWxzZTsKICAgICAgICBfdGhpcy5faXNDb21wbGV0ZSA9IGZhbHNlOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBBc3luY1N1YmplY3QyLnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgICAgICB2YXIgX2ExNiA9IHRoaXMsIGhhc0Vycm9yID0gX2ExNi5oYXNFcnJvciwgX2hhc1ZhbHVlID0gX2ExNi5faGFzVmFsdWUsIF92YWx1ZSA9IF9hMTYuX3ZhbHVlLCB0aHJvd25FcnJvciA9IF9hMTYudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hMTYuaXNTdG9wcGVkLCBfaXNDb21wbGV0ZSA9IF9hMTYuX2lzQ29tcGxldGU7CiAgICAgICAgaWYgKGhhc0Vycm9yKSB7CiAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRocm93bkVycm9yKTsKICAgICAgICB9IGVsc2UgaWYgKGlzU3RvcHBlZCB8fCBfaXNDb21wbGV0ZSkgewogICAgICAgICAgX2hhc1ZhbHVlICYmIHN1YnNjcmliZXIubmV4dChfdmFsdWUpOwogICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQXN5bmNTdWJqZWN0Mi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHsKICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUyOwogICAgICAgICAgdGhpcy5faGFzVmFsdWUgPSB0cnVlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQXN5bmNTdWJqZWN0Mi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNiA9IHRoaXMsIF9oYXNWYWx1ZSA9IF9hMTYuX2hhc1ZhbHVlLCBfdmFsdWUgPSBfYTE2Ll92YWx1ZSwgX2lzQ29tcGxldGUgPSBfYTE2Ll9pc0NvbXBsZXRlOwogICAgICAgIGlmICghX2lzQ29tcGxldGUpIHsKICAgICAgICAgIHRoaXMuX2lzQ29tcGxldGUgPSB0cnVlOwogICAgICAgICAgX2hhc1ZhbHVlICYmIF9zdXBlci5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsIF92YWx1ZSk7CiAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLmNvbXBsZXRlLmNhbGwodGhpcyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gQXN5bmNTdWJqZWN0MjsKICAgIH0pKFN1YmplY3QpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FjdGlvbi5qcwp2YXIgQWN0aW9uOwp2YXIgaW5pdF9BY3Rpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQWN0aW9uLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgQWN0aW9uID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQWN0aW9uMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQWN0aW9uMihzY2hlZHVsZXIsIHdvcmspIHsKICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpczsKICAgICAgfQogICAgICBBY3Rpb24yLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHN0YXRlMTQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIHJldHVybiBBY3Rpb24yOwogICAgfSkoU3Vic2NyaXB0aW9uKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9pbnRlcnZhbFByb3ZpZGVyLmpzCnZhciBpbnRlcnZhbFByb3ZpZGVyOwp2YXIgaW5pdF9pbnRlcnZhbFByb3ZpZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2ludGVydmFsUHJvdmlkZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGludGVydmFsUHJvdmlkZXIgPSB7CiAgICAgIHNldEludGVydmFsOiBmdW5jdGlvbihoYW5kbGVyMiwgdGltZW91dDIpIHsKICAgICAgICB2YXIgYXJncyA9IFtdOwogICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldOwogICAgICAgIH0KICAgICAgICB2YXIgZGVsZWdhdGUgPSBpbnRlcnZhbFByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIGlmIChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuc2V0SW50ZXJ2YWwpIHsKICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5zZXRJbnRlcnZhbC5hcHBseShkZWxlZ2F0ZSwgX19zcHJlYWRBcnJheShbaGFuZGxlcjIsIHRpbWVvdXQyXSwgX19yZWFkKGFyZ3MpKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIyLCB0aW1lb3V0Ml0sIF9fcmVhZChhcmdzKSkpOwogICAgICB9LAogICAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbihoYW5kbGUzKSB7CiAgICAgICAgdmFyIGRlbGVnYXRlID0gaW50ZXJ2YWxQcm92aWRlci5kZWxlZ2F0ZTsKICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJJbnRlcnZhbCkgfHwgY2xlYXJJbnRlcnZhbCkoaGFuZGxlMyk7CiAgICAgIH0sCiAgICAgIGRlbGVnYXRlOiB2b2lkIDAKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXN5bmNBY3Rpb24uanMKdmFyIEFzeW5jQWN0aW9uOwp2YXIgaW5pdF9Bc3luY0FjdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9Bc3luY0FjdGlvbi5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9BY3Rpb24oKTsKICAgIGluaXRfaW50ZXJ2YWxQcm92aWRlcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICAgIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24yLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBc3luY0FjdGlvbjIoc2NoZWR1bGVyLCB3b3JrKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzOwogICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKICAgICAgICBfdGhpcy53b3JrID0gd29yazsKICAgICAgICBfdGhpcy5wZW5kaW5nID0gZmFsc2U7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIEFzeW5jQWN0aW9uMi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihzdGF0ZTE0LCBkZWxheTIpIHsKICAgICAgICB2YXIgX2ExNjsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmNsb3NlZCkgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTE0OwogICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7CiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyOwogICAgICAgIGlmIChpZCAhPSBudWxsKSB7CiAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheTIpOwogICAgICAgIH0KICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlOwogICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTI7CiAgICAgICAgdGhpcy5pZCA9IChfYTE2ID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2ExNiAhPT0gdm9pZCAwID8gX2ExNiA6IHRoaXMucmVxdWVzdEFzeW5jSWQoc2NoZWR1bGVyLCB0aGlzLmlkLCBkZWxheTIpOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9OwogICAgICBBc3luY0FjdGlvbjIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24oc2NoZWR1bGVyLCBfaWQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkyKTsKICAgICAgfTsKICAgICAgQXN5bmNBY3Rpb24yLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKF9zY2hlZHVsZXIsIGlkLCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChkZWxheTIgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheTIgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkgewogICAgICAgICAgcmV0dXJuIGlkOwogICAgICAgIH0KICAgICAgICBpZiAoaWQgIT0gbnVsbCkgewogICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgfTsKICAgICAgQXN5bmNBY3Rpb24yLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oc3RhdGUxNCwgZGVsYXkyKSB7CiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7CiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uIik7CiAgICAgICAgfQogICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlOwogICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUxNCwgZGVsYXkyKTsKICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7CiAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBc3luY0FjdGlvbjIucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24oc3RhdGUxNCwgX2RlbGF5KSB7CiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTsKICAgICAgICB2YXIgZXJyb3JWYWx1ZTsKICAgICAgICB0cnkgewogICAgICAgICAgdGhpcy53b3JrKHN0YXRlMTQpOwogICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgZXJyb3JlZCA9IHRydWU7CiAgICAgICAgICBlcnJvclZhbHVlID0gZTExID8gZTExIDogbmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIik7CiAgICAgICAgfQogICAgICAgIGlmIChlcnJvcmVkKSB7CiAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEFzeW5jQWN0aW9uMi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7CiAgICAgICAgICB2YXIgX2ExNiA9IHRoaXMsIGlkID0gX2ExNi5pZCwgc2NoZWR1bGVyID0gX2ExNi5zY2hlZHVsZXI7CiAgICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zOwogICAgICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDsKICAgICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlOwogICAgICAgICAgYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpOwogICAgICAgICAgaWYgKGlkICE9IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDsKICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBBc3luY0FjdGlvbjI7CiAgICB9KShBY3Rpb24pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9JbW1lZGlhdGUuanMKZnVuY3Rpb24gZmluZEFuZENsZWFySGFuZGxlKGhhbmRsZTMpIHsKICBpZiAoaGFuZGxlMyBpbiBhY3RpdmVIYW5kbGVzKSB7CiAgICBkZWxldGUgYWN0aXZlSGFuZGxlc1toYW5kbGUzXTsKICAgIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KdmFyIG5leHRIYW5kbGUsIHJlc29sdmVkLCBhY3RpdmVIYW5kbGVzLCBJbW1lZGlhdGUsIFRlc3RUb29sczsKdmFyIGluaXRfSW1tZWRpYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9JbW1lZGlhdGUuanMiKCkgewogICAgbmV4dEhhbmRsZSA9IDE7CiAgICBhY3RpdmVIYW5kbGVzID0ge307CiAgICBJbW1lZGlhdGUgPSB7CiAgICAgIHNldEltbWVkaWF0ZTogZnVuY3Rpb24oY2IpIHsKICAgICAgICB2YXIgaGFuZGxlMyA9IG5leHRIYW5kbGUrKzsKICAgICAgICBhY3RpdmVIYW5kbGVzW2hhbmRsZTNdID0gdHJ1ZTsKICAgICAgICBpZiAoIXJlc29sdmVkKSB7CiAgICAgICAgICByZXNvbHZlZCA9IFByb21pc2UucmVzb2x2ZSgpOwogICAgICAgIH0KICAgICAgICByZXNvbHZlZC50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGZpbmRBbmRDbGVhckhhbmRsZShoYW5kbGUzKSAmJiBjYigpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBoYW5kbGUzOwogICAgICB9LAogICAgICBjbGVhckltbWVkaWF0ZTogZnVuY3Rpb24oaGFuZGxlMykgewogICAgICAgIGZpbmRBbmRDbGVhckhhbmRsZShoYW5kbGUzKTsKICAgICAgfQogICAgfTsKICAgIFRlc3RUb29scyA9IHsKICAgICAgcGVuZGluZzogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFjdGl2ZUhhbmRsZXMpLmxlbmd0aDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9pbW1lZGlhdGVQcm92aWRlci5qcwp2YXIgc2V0SW1tZWRpYXRlLCBjbGVhckltbWVkaWF0ZSwgaW1tZWRpYXRlUHJvdmlkZXI7CnZhciBpbml0X2ltbWVkaWF0ZVByb3ZpZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2ltbWVkaWF0ZVByb3ZpZGVyLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0ltbWVkaWF0ZSgpOwogICAgc2V0SW1tZWRpYXRlID0gSW1tZWRpYXRlLnNldEltbWVkaWF0ZSwgY2xlYXJJbW1lZGlhdGUgPSBJbW1lZGlhdGUuY2xlYXJJbW1lZGlhdGU7CiAgICBpbW1lZGlhdGVQcm92aWRlciA9IHsKICAgICAgc2V0SW1tZWRpYXRlOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYXJncyA9IFtdOwogICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgICAgfQogICAgICAgIHZhciBkZWxlZ2F0ZSA9IGltbWVkaWF0ZVByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRJbW1lZGlhdGUpIHx8IHNldEltbWVkaWF0ZSkuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpKTsKICAgICAgfSwKICAgICAgY2xlYXJJbW1lZGlhdGU6IGZ1bmN0aW9uKGhhbmRsZTMpIHsKICAgICAgICB2YXIgZGVsZWdhdGUgPSBpbW1lZGlhdGVQcm92aWRlci5kZWxlZ2F0ZTsKICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJJbW1lZGlhdGUpIHx8IGNsZWFySW1tZWRpYXRlKShoYW5kbGUzKTsKICAgICAgfSwKICAgICAgZGVsZWdhdGU6IHZvaWQgMAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9Bc2FwQWN0aW9uLmpzCnZhciBBc2FwQWN0aW9uOwp2YXIgaW5pdF9Bc2FwQWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzYXBBY3Rpb24uanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfQXN5bmNBY3Rpb24oKTsKICAgIGluaXRfaW1tZWRpYXRlUHJvdmlkZXIoKTsKICAgIEFzYXBBY3Rpb24gPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhBc2FwQWN0aW9uMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQXNhcEFjdGlvbjIoc2NoZWR1bGVyLCB3b3JrKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzOwogICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKICAgICAgICBfdGhpcy53b3JrID0gd29yazsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgQXNhcEFjdGlvbjIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24oc2NoZWR1bGVyLCBpZCwgZGVsYXkyKSB7CiAgICAgICAgaWYgKGRlbGF5MiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBkZWxheTIgPSAwOwogICAgICAgIH0KICAgICAgICBpZiAoZGVsYXkyICE9PSBudWxsICYmIGRlbGF5MiA+IDApIHsKICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcywgc2NoZWR1bGVyLCBpZCwgZGVsYXkyKTsKICAgICAgICB9CiAgICAgICAgc2NoZWR1bGVyLmFjdGlvbnMucHVzaCh0aGlzKTsKICAgICAgICByZXR1cm4gc2NoZWR1bGVyLl9zY2hlZHVsZWQgfHwgKHNjaGVkdWxlci5fc2NoZWR1bGVkID0gaW1tZWRpYXRlUHJvdmlkZXIuc2V0SW1tZWRpYXRlKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdm9pZCAwKSkpOwogICAgICB9OwogICAgICBBc2FwQWN0aW9uMi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihzY2hlZHVsZXIsIGlkLCBkZWxheTIpIHsKICAgICAgICB2YXIgX2ExNjsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChkZWxheTIgIT0gbnVsbCA/IGRlbGF5MiA+IDAgOiB0aGlzLmRlbGF5ID4gMCkgewogICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheTIpOwogICAgICAgIH0KICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zOwogICAgICAgIGlmIChpZCAhPSBudWxsICYmICgoX2ExNiA9IGFjdGlvbnNbYWN0aW9ucy5sZW5ndGggLSAxXSkgPT09IG51bGwgfHwgX2ExNiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNi5pZCkgIT09IGlkKSB7CiAgICAgICAgICBpbW1lZGlhdGVQcm92aWRlci5jbGVhckltbWVkaWF0ZShpZCk7CiAgICAgICAgICBpZiAoc2NoZWR1bGVyLl9zY2hlZHVsZWQgPT09IGlkKSB7CiAgICAgICAgICAgIHNjaGVkdWxlci5fc2NoZWR1bGVkID0gdm9pZCAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9OwogICAgICByZXR1cm4gQXNhcEFjdGlvbjI7CiAgICB9KShBc3luY0FjdGlvbik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TY2hlZHVsZXIuanMKdmFyIFNjaGVkdWxlcjsKdmFyIGluaXRfU2NoZWR1bGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU2NoZWR1bGVyLmpzIigpIHsKICAgIGluaXRfZGF0ZVRpbWVzdGFtcFByb3ZpZGVyKCk7CiAgICBTY2hlZHVsZXIgPSAoZnVuY3Rpb24oKSB7CiAgICAgIGZ1bmN0aW9uIFNjaGVkdWxlcjIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93MikgewogICAgICAgIGlmIChub3cyID09PSB2b2lkIDApIHsKICAgICAgICAgIG5vdzIgPSBTY2hlZHVsZXIyLm5vdzsKICAgICAgICB9CiAgICAgICAgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gc2NoZWR1bGVyQWN0aW9uQ3RvcjsKICAgICAgICB0aGlzLm5vdyA9IG5vdzI7CiAgICAgIH0KICAgICAgU2NoZWR1bGVyMi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbih3b3JrLCBkZWxheTIsIHN0YXRlMTQpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlMTQsIGRlbGF5Mik7CiAgICAgIH07CiAgICAgIFNjaGVkdWxlcjIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdzsKICAgICAgcmV0dXJuIFNjaGVkdWxlcjI7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzeW5jU2NoZWR1bGVyLmpzCnZhciBBc3luY1NjaGVkdWxlcjsKdmFyIGluaXRfQXN5bmNTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXN5bmNTY2hlZHVsZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfU2NoZWR1bGVyKCk7CiAgICBBc3luY1NjaGVkdWxlciA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKEFzeW5jU2NoZWR1bGVyMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIyKFNjaGVkdWxlckFjdGlvbiwgbm93MikgewogICAgICAgIGlmIChub3cyID09PSB2b2lkIDApIHsKICAgICAgICAgIG5vdzIgPSBTY2hlZHVsZXIubm93OwogICAgICAgIH0KICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdzIpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdOwogICAgICAgIF90aGlzLl9hY3RpdmUgPSBmYWxzZTsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgQXN5bmNTY2hlZHVsZXIyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKGFjdGlvbikgewogICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zOwogICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHsKICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgZXJyb3I7CiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTsKICAgICAgICBkbyB7CiAgICAgICAgICBpZiAoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKTsKICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTsKICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgIHdoaWxlIChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpIHsKICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjI7CiAgICB9KShTY2hlZHVsZXIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzYXBTY2hlZHVsZXIuanMKdmFyIEFzYXBTY2hlZHVsZXI7CnZhciBpbml0X0FzYXBTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXNhcFNjaGVkdWxlci5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9Bc3luY1NjaGVkdWxlcigpOwogICAgQXNhcFNjaGVkdWxlciA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKEFzYXBTY2hlZHVsZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBc2FwU2NoZWR1bGVyMigpIHsKICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CiAgICAgIH0KICAgICAgQXNhcFNjaGVkdWxlcjIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24oYWN0aW9uKSB7CiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTsKICAgICAgICB2YXIgZmx1c2hJZCA9IHRoaXMuX3NjaGVkdWxlZDsKICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB2b2lkIDA7CiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7CiAgICAgICAgdmFyIGVycm9yOwogICAgICAgIGFjdGlvbiA9IGFjdGlvbiB8fCBhY3Rpb25zLnNoaWZ0KCk7CiAgICAgICAgZG8gewogICAgICAgICAgaWYgKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zWzBdKSAmJiBhY3Rpb24uaWQgPT09IGZsdXNoSWQgJiYgYWN0aW9ucy5zaGlmdCgpKTsKICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTsKICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmlkID09PSBmbHVzaElkICYmIGFjdGlvbnMuc2hpZnQoKSkgewogICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgIH0KICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIEFzYXBTY2hlZHVsZXIyOwogICAgfSkoQXN5bmNTY2hlZHVsZXIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2FzYXAuanMKdmFyIGFzYXBTY2hlZHVsZXIsIGFzYXA7CnZhciBpbml0X2FzYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYXNhcC5qcyIoKSB7CiAgICBpbml0X0FzYXBBY3Rpb24oKTsKICAgIGluaXRfQXNhcFNjaGVkdWxlcigpOwogICAgYXNhcFNjaGVkdWxlciA9IG5ldyBBc2FwU2NoZWR1bGVyKEFzYXBBY3Rpb24pOwogICAgYXNhcCA9IGFzYXBTY2hlZHVsZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYXN5bmMuanMKdmFyIGFzeW5jU2NoZWR1bGVyLCBhc3luYzsKdmFyIGluaXRfYXN5bmMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYXN5bmMuanMiKCkgewogICAgaW5pdF9Bc3luY0FjdGlvbigpOwogICAgaW5pdF9Bc3luY1NjaGVkdWxlcigpOwogICAgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pOwogICAgYXN5bmMgPSBhc3luY1NjaGVkdWxlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9RdWV1ZUFjdGlvbi5qcwp2YXIgUXVldWVBY3Rpb247CnZhciBpbml0X1F1ZXVlQWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlQWN0aW9uLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0FzeW5jQWN0aW9uKCk7CiAgICBRdWV1ZUFjdGlvbiA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKFF1ZXVlQWN0aW9uMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gUXVldWVBY3Rpb24yKHNjaGVkdWxlciwgd29yaykgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpczsKICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7CiAgICAgICAgX3RoaXMud29yayA9IHdvcms7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIFF1ZXVlQWN0aW9uMi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihzdGF0ZTE0LCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChkZWxheTIgPiAwKSB7CiAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsIHN0YXRlMTQsIGRlbGF5Mik7CiAgICAgICAgfQogICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTI7CiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlMTQ7CiAgICAgICAgdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIFF1ZXVlQWN0aW9uMi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHN0YXRlMTQsIGRlbGF5MikgewogICAgICAgIHJldHVybiBkZWxheTIgPiAwIHx8IHRoaXMuY2xvc2VkID8gX3N1cGVyLnByb3RvdHlwZS5leGVjdXRlLmNhbGwodGhpcywgc3RhdGUxNCwgZGVsYXkyKSA6IHRoaXMuX2V4ZWN1dGUoc3RhdGUxNCwgZGVsYXkyKTsKICAgICAgfTsKICAgICAgUXVldWVBY3Rpb24yLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgaWQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKGRlbGF5MiAhPSBudWxsICYmIGRlbGF5MiA+IDAgfHwgZGVsYXkyID09IG51bGwgJiYgdGhpcy5kZWxheSA+IDApIHsKICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcywgc2NoZWR1bGVyLCBpZCwgZGVsYXkyKTsKICAgICAgICB9CiAgICAgICAgc2NoZWR1bGVyLmZsdXNoKHRoaXMpOwogICAgICAgIHJldHVybiAwOwogICAgICB9OwogICAgICByZXR1cm4gUXVldWVBY3Rpb24yOwogICAgfSkoQXN5bmNBY3Rpb24pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlU2NoZWR1bGVyLmpzCnZhciBRdWV1ZVNjaGVkdWxlcjsKdmFyIGluaXRfUXVldWVTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvUXVldWVTY2hlZHVsZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfQXN5bmNTY2hlZHVsZXIoKTsKICAgIFF1ZXVlU2NoZWR1bGVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoUXVldWVTY2hlZHVsZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBRdWV1ZVNjaGVkdWxlcjIoKSB7CiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOwogICAgICB9CiAgICAgIHJldHVybiBRdWV1ZVNjaGVkdWxlcjI7CiAgICB9KShBc3luY1NjaGVkdWxlcik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvcXVldWUuanMKdmFyIHF1ZXVlU2NoZWR1bGVyLCBxdWV1ZTsKdmFyIGluaXRfcXVldWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvcXVldWUuanMiKCkgewogICAgaW5pdF9RdWV1ZUFjdGlvbigpOwogICAgaW5pdF9RdWV1ZVNjaGVkdWxlcigpOwogICAgcXVldWVTY2hlZHVsZXIgPSBuZXcgUXVldWVTY2hlZHVsZXIoUXVldWVBY3Rpb24pOwogICAgcXVldWUgPSBxdWV1ZVNjaGVkdWxlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9BbmltYXRpb25GcmFtZUFjdGlvbi5qcwp2YXIgQW5pbWF0aW9uRnJhbWVBY3Rpb247CnZhciBpbml0X0FuaW1hdGlvbkZyYW1lQWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FuaW1hdGlvbkZyYW1lQWN0aW9uLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0FzeW5jQWN0aW9uKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lUHJvdmlkZXIoKTsKICAgIEFuaW1hdGlvbkZyYW1lQWN0aW9uID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQW5pbWF0aW9uRnJhbWVBY3Rpb24yLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBbmltYXRpb25GcmFtZUFjdGlvbjIoc2NoZWR1bGVyLCB3b3JrKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzOwogICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKICAgICAgICBfdGhpcy53b3JrID0gd29yazsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgQW5pbWF0aW9uRnJhbWVBY3Rpb24yLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgaWQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKGRlbGF5MiAhPT0gbnVsbCAmJiBkZWxheTIgPiAwKSB7CiAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5Mik7CiAgICAgICAgfQogICAgICAgIHNjaGVkdWxlci5hY3Rpb25zLnB1c2godGhpcyk7CiAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5fc2NoZWR1bGVkIHx8IChzY2hlZHVsZXIuX3NjaGVkdWxlZCA9IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5mbHVzaCh2b2lkIDApOwogICAgICAgIH0pKTsKICAgICAgfTsKICAgICAgQW5pbWF0aW9uRnJhbWVBY3Rpb24yLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgaWQsIGRlbGF5MikgewogICAgICAgIHZhciBfYTE2OwogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKGRlbGF5MiAhPSBudWxsID8gZGVsYXkyID4gMCA6IHRoaXMuZGVsYXkgPiAwKSB7CiAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5Mik7CiAgICAgICAgfQogICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7CiAgICAgICAgaWYgKGlkICE9IG51bGwgJiYgaWQgPT09IHNjaGVkdWxlci5fc2NoZWR1bGVkICYmICgoX2ExNiA9IGFjdGlvbnNbYWN0aW9ucy5sZW5ndGggLSAxXSkgPT09IG51bGwgfHwgX2ExNiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNi5pZCkgIT09IGlkKSB7CiAgICAgICAgICBhbmltYXRpb25GcmFtZVByb3ZpZGVyLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTsKICAgICAgICAgIHNjaGVkdWxlci5fc2NoZWR1bGVkID0gdm9pZCAwOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9OwogICAgICByZXR1cm4gQW5pbWF0aW9uRnJhbWVBY3Rpb24yOwogICAgfSkoQXN5bmNBY3Rpb24pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLmpzCnZhciBBbmltYXRpb25GcmFtZVNjaGVkdWxlcjsKdmFyIGluaXRfQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfQXN5bmNTY2hlZHVsZXIoKTsKICAgIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBbmltYXRpb25GcmFtZVNjaGVkdWxlcjIoKSB7CiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOwogICAgICB9CiAgICAgIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyMi5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihhY3Rpb24pIHsKICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlOwogICAgICAgIHZhciBmbHVzaElkOwogICAgICAgIGlmIChhY3Rpb24pIHsKICAgICAgICAgIGZsdXNoSWQgPSBhY3Rpb24uaWQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZsdXNoSWQgPSB0aGlzLl9zY2hlZHVsZWQ7CiAgICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB2b2lkIDA7CiAgICAgICAgfQogICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zOwogICAgICAgIHZhciBlcnJvcjsKICAgICAgICBhY3Rpb24gPSBhY3Rpb24gfHwgYWN0aW9ucy5zaGlmdCgpOwogICAgICAgIGRvIHsKICAgICAgICAgIGlmIChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmlkID09PSBmbHVzaElkICYmIGFjdGlvbnMuc2hpZnQoKSk7CiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7CiAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpIHsKICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBBbmltYXRpb25GcmFtZVNjaGVkdWxlcjI7CiAgICB9KShBc3luY1NjaGVkdWxlcik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYW5pbWF0aW9uRnJhbWUuanMKdmFyIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCBhbmltYXRpb25GcmFtZTsKdmFyIGluaXRfYW5pbWF0aW9uRnJhbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYW5pbWF0aW9uRnJhbWUuanMiKCkgewogICAgaW5pdF9BbmltYXRpb25GcmFtZUFjdGlvbigpOwogICAgaW5pdF9BbmltYXRpb25GcmFtZVNjaGVkdWxlcigpOwogICAgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBuZXcgQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIoQW5pbWF0aW9uRnJhbWVBY3Rpb24pOwogICAgYW5pbWF0aW9uRnJhbWUgPSBhbmltYXRpb25GcmFtZVNjaGVkdWxlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9WaXJ0dWFsVGltZVNjaGVkdWxlci5qcwp2YXIgVmlydHVhbFRpbWVTY2hlZHVsZXIsIFZpcnR1YWxBY3Rpb247CnZhciBpbml0X1ZpcnR1YWxUaW1lU2NoZWR1bGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL1ZpcnR1YWxUaW1lU2NoZWR1bGVyLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0FzeW5jQWN0aW9uKCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9Bc3luY1NjaGVkdWxlcigpOwogICAgVmlydHVhbFRpbWVTY2hlZHVsZXIgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhWaXJ0dWFsVGltZVNjaGVkdWxlcjIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIFZpcnR1YWxUaW1lU2NoZWR1bGVyMihzY2hlZHVsZXJBY3Rpb25DdG9yLCBtYXhGcmFtZXMpIHsKICAgICAgICBpZiAoc2NoZWR1bGVyQWN0aW9uQ3RvciA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBzY2hlZHVsZXJBY3Rpb25DdG9yID0gVmlydHVhbEFjdGlvbjsKICAgICAgICB9CiAgICAgICAgaWYgKG1heEZyYW1lcyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBtYXhGcmFtZXMgPSBJbmZpbml0eTsKICAgICAgICB9CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyQWN0aW9uQ3RvciwgZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMuZnJhbWU7CiAgICAgICAgfSkgfHwgdGhpczsKICAgICAgICBfdGhpcy5tYXhGcmFtZXMgPSBtYXhGcmFtZXM7CiAgICAgICAgX3RoaXMuZnJhbWUgPSAwOwogICAgICAgIF90aGlzLmluZGV4ID0gLTE7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIFZpcnR1YWxUaW1lU2NoZWR1bGVyMi5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNiA9IHRoaXMsIGFjdGlvbnMgPSBfYTE2LmFjdGlvbnMsIG1heEZyYW1lcyA9IF9hMTYubWF4RnJhbWVzOwogICAgICAgIHZhciBlcnJvcjsKICAgICAgICB2YXIgYWN0aW9uOwogICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmRlbGF5IDw9IG1heEZyYW1lcykgewogICAgICAgICAgYWN0aW9ucy5zaGlmdCgpOwogICAgICAgICAgdGhpcy5mcmFtZSA9IGFjdGlvbi5kZWxheTsKICAgICAgICAgIGlmIChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICB3aGlsZSAoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSB7CiAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfQogICAgICB9OwogICAgICBWaXJ0dWFsVGltZVNjaGVkdWxlcjIuZnJhbWVUaW1lRmFjdG9yID0gMTA7CiAgICAgIHJldHVybiBWaXJ0dWFsVGltZVNjaGVkdWxlcjI7CiAgICB9KShBc3luY1NjaGVkdWxlcik7CiAgICBWaXJ0dWFsQWN0aW9uID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoVmlydHVhbEFjdGlvbjIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIFZpcnR1YWxBY3Rpb24yKHNjaGVkdWxlciwgd29yaywgaW5kZXgyKSB7CiAgICAgICAgaWYgKGluZGV4MiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBpbmRleDIgPSBzY2hlZHVsZXIuaW5kZXggKz0gMTsKICAgICAgICB9CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzOwogICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKICAgICAgICBfdGhpcy53b3JrID0gd29yazsKICAgICAgICBfdGhpcy5pbmRleCA9IGluZGV4MjsKICAgICAgICBfdGhpcy5hY3RpdmUgPSB0cnVlOwogICAgICAgIF90aGlzLmluZGV4ID0gc2NoZWR1bGVyLmluZGV4ID0gaW5kZXgyOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBWaXJ0dWFsQWN0aW9uMi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihzdGF0ZTE0LCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUoZGVsYXkyKSkgewogICAgICAgICAgaWYgKCF0aGlzLmlkKSB7CiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcywgc3RhdGUxNCwgZGVsYXkyKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7CiAgICAgICAgICB2YXIgYWN0aW9uID0gbmV3IFZpcnR1YWxBY3Rpb24yKHRoaXMuc2NoZWR1bGVyLCB0aGlzLndvcmspOwogICAgICAgICAgdGhpcy5hZGQoYWN0aW9uKTsKICAgICAgICAgIHJldHVybiBhY3Rpb24uc2NoZWR1bGUoc3RhdGUxNCwgZGVsYXkyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIFN1YnNjcmlwdGlvbi5FTVBUWTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFZpcnR1YWxBY3Rpb24yLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgaWQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgdGhpcy5kZWxheSA9IHNjaGVkdWxlci5mcmFtZSArIGRlbGF5MjsKICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zOwogICAgICAgIGFjdGlvbnMucHVzaCh0aGlzKTsKICAgICAgICBhY3Rpb25zLnNvcnQoVmlydHVhbEFjdGlvbjIuc29ydEFjdGlvbnMpOwogICAgICAgIHJldHVybiAxOwogICAgICB9OwogICAgICBWaXJ0dWFsQWN0aW9uMi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihzY2hlZHVsZXIsIGlkLCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIH07CiAgICAgIFZpcnR1YWxBY3Rpb24yLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKHN0YXRlMTQsIGRlbGF5MikgewogICAgICAgIGlmICh0aGlzLmFjdGl2ZSA9PT0gdHJ1ZSkgewogICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX2V4ZWN1dGUuY2FsbCh0aGlzLCBzdGF0ZTE0LCBkZWxheTIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgVmlydHVhbEFjdGlvbjIuc29ydEFjdGlvbnMgPSBmdW5jdGlvbihhNSwgYjUpIHsKICAgICAgICBpZiAoYTUuZGVsYXkgPT09IGI1LmRlbGF5KSB7CiAgICAgICAgICBpZiAoYTUuaW5kZXggPT09IGI1LmluZGV4KSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgfSBlbHNlIGlmIChhNS5pbmRleCA+IGI1LmluZGV4KSB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoYTUuZGVsYXkgPiBiNS5kZWxheSkgewogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBWaXJ0dWFsQWN0aW9uMjsKICAgIH0pKEFzeW5jQWN0aW9uKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZW1wdHkuanMKZnVuY3Rpb24gZW1wdHkoc2NoZWR1bGVyKSB7CiAgcmV0dXJuIHNjaGVkdWxlciA/IGVtcHR5U2NoZWR1bGVkKHNjaGVkdWxlcikgOiBFTVBUWTsKfQpmdW5jdGlvbiBlbXB0eVNjaGVkdWxlZChzY2hlZHVsZXIpIHsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgIH0pOwogIH0pOwp9CnZhciBFTVBUWTsKdmFyIGluaXRfZW1wdHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2VtcHR5LmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgRU1QVFkgPSBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgIHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNTY2hlZHVsZXIuanMKZnVuY3Rpb24gaXNTY2hlZHVsZXIodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMiAmJiBpc0Z1bmN0aW9uKHZhbHVlMi5zY2hlZHVsZSk7Cn0KdmFyIGluaXRfaXNTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzU2NoZWR1bGVyLmpzIigpIHsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9hcmdzLmpzCmZ1bmN0aW9uIGxhc3QoYXJyKSB7CiAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07Cn0KZnVuY3Rpb24gcG9wUmVzdWx0U2VsZWN0b3IoYXJncykgewogIHJldHVybiBpc0Z1bmN0aW9uKGxhc3QoYXJncykpID8gYXJncy5wb3AoKSA6IHZvaWQgMDsKfQpmdW5jdGlvbiBwb3BTY2hlZHVsZXIoYXJncykgewogIHJldHVybiBpc1NjaGVkdWxlcihsYXN0KGFyZ3MpKSA/IGFyZ3MucG9wKCkgOiB2b2lkIDA7Cn0KZnVuY3Rpb24gcG9wTnVtYmVyKGFyZ3MsIGRlZmF1bHRWYWx1ZSkgewogIHJldHVybiB0eXBlb2YgbGFzdChhcmdzKSA9PT0gIm51bWJlciIgPyBhcmdzLnBvcCgpIDogZGVmYXVsdFZhbHVlOwp9CnZhciBpbml0X2FyZ3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2FyZ3MuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgICBpbml0X2lzU2NoZWR1bGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXJyYXlMaWtlLmpzCnZhciBpc0FycmF5TGlrZTsKdmFyIGluaXRfaXNBcnJheUxpa2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXJyYXlMaWtlLmpzIigpIHsKICAgIGlzQXJyYXlMaWtlID0gKGZ1bmN0aW9uKHgzKSB7CiAgICAgIHJldHVybiB4MyAmJiB0eXBlb2YgeDMubGVuZ3RoID09PSAibnVtYmVyIiAmJiB0eXBlb2YgeDMgIT09ICJmdW5jdGlvbiI7CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNQcm9taXNlLmpzCmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZTIpIHsKICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZTIgPT09IG51bGwgfHwgdmFsdWUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZTIudGhlbik7Cn0KdmFyIGluaXRfaXNQcm9taXNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc1Byb21pc2UuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzSW50ZXJvcE9ic2VydmFibGUuanMKZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkgewogIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTsKfQp2YXIgaW5pdF9pc0ludGVyb3BPYnNlcnZhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc0ludGVyb3BPYnNlcnZhYmxlLmpzIigpIHsKICAgIGluaXRfb2JzZXJ2YWJsZSgpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXN5bmNJdGVyYWJsZS5qcwpmdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7CiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7Cn0KdmFyIGluaXRfaXNBc3luY0l0ZXJhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc0FzeW5jSXRlcmFibGUuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL3Rocm93VW5vYnNlcnZhYmxlRXJyb3IuanMKZnVuY3Rpb24gY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpIHsKICByZXR1cm4gbmV3IFR5cGVFcnJvcigiWW91IHByb3ZpZGVkICIgKyAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAib2JqZWN0IiA/ICJhbiBpbnZhbGlkIG9iamVjdCIgOiAiJyIgKyBpbnB1dCArICInIikgKyAiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuIik7Cn0KdmFyIGluaXRfdGhyb3dVbm9ic2VydmFibGVFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvdGhyb3dVbm9ic2VydmFibGVFcnJvci5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zeW1ib2wvaXRlcmF0b3IuanMKZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7CiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICJmdW5jdGlvbiIgfHwgIVN5bWJvbC5pdGVyYXRvcikgewogICAgcmV0dXJuICJAQGl0ZXJhdG9yIjsKICB9CiAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjsKfQp2YXIgaXRlcmF0b3I7CnZhciBpbml0X2l0ZXJhdG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc3ltYm9sL2l0ZXJhdG9yLmpzIigpIHsKICAgIGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNJdGVyYWJsZS5qcwpmdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7CiAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7Cn0KdmFyIGluaXRfaXNJdGVyYWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNJdGVyYWJsZS5qcyIoKSB7CiAgICBpbml0X2l0ZXJhdG9yKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNSZWFkYWJsZVN0cmVhbUxpa2UuanMKZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkgewogIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcl8xKCkgewogICAgdmFyIHJlYWRlciwgX2ExNiwgdmFsdWUyLCBkb25lOwogICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uKF9iKSB7CiAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTsKICAgICAgICAgIF9iLmxhYmVsID0gMTsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBfYi50cnlzLnB1c2goWzEsICwgOSwgMTBdKTsKICAgICAgICAgIF9iLmxhYmVsID0gMjsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBpZiAoZmFsc2UpIHJldHVybiBbMywgOF07CiAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQocmVhZGVyLnJlYWQoKSldOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIF9hMTYgPSBfYi5zZW50KCksIHZhbHVlMiA9IF9hMTYudmFsdWUsIGRvbmUgPSBfYTE2LmRvbmU7CiAgICAgICAgICBpZiAoIWRvbmUpIHJldHVybiBbMywgNV07CiAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgcmV0dXJuIFsyLCBfYi5zZW50KCldOwogICAgICAgIGNhc2UgNToKICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdCh2YWx1ZTIpXTsKICAgICAgICBjYXNlIDY6CiAgICAgICAgICByZXR1cm4gWzQsIF9iLnNlbnQoKV07CiAgICAgICAgY2FzZSA3OgogICAgICAgICAgX2Iuc2VudCgpOwogICAgICAgICAgcmV0dXJuIFszLCAyXTsKICAgICAgICBjYXNlIDg6CiAgICAgICAgICByZXR1cm4gWzMsIDEwXTsKICAgICAgICBjYXNlIDk6CiAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTsKICAgICAgICAgIHJldHVybiBbN107CiAgICAgICAgY2FzZSAxMDoKICAgICAgICAgIHJldHVybiBbMl07CiAgICAgIH0KICAgIH0pOwogIH0pOwp9CmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikgewogIHJldHVybiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9iai5nZXRSZWFkZXIpOwp9CnZhciBpbml0X2lzUmVhZGFibGVTdHJlYW1MaWtlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc1JlYWRhYmxlU3RyZWFtTGlrZS5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lubmVyRnJvbS5qcwpmdW5jdGlvbiBpbm5lckZyb20oaW5wdXQpIHsKICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7CiAgICByZXR1cm4gaW5wdXQ7CiAgfQogIGlmIChpbnB1dCAhPSBudWxsKSB7CiAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7CiAgICB9CiAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7CiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTsKICAgIH0KICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7CiAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7CiAgICB9CiAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkgewogICAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaW5wdXQpOwogICAgfQogICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7CiAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpOwogICAgfQogICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkgewogICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7CiAgICB9CiAgfQogIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTsKfQpmdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTsKICAgIGlmIChpc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7CiAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpOwogICAgfQogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKTsKICB9KTsKfQpmdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkxMSsrKSB7CiAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpMTFdKTsKICAgIH0KICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICB9KTsKfQpmdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkgewogICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZTIpOwogICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgICAgfQogICAgfSwgZnVuY3Rpb24oZXJyKSB7CiAgICAgIHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7CiAgICB9KS50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTsKICB9KTsKfQpmdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgdmFyIGVfMSwgX2ExNjsKICAgIHRyeSB7CiAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7CiAgICAgICAgdmFyIHZhbHVlMiA9IGl0ZXJhYmxlXzFfMS52YWx1ZTsKICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgIGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07CiAgICB9IGZpbmFsbHkgewogICAgICB0cnkgewogICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYTE2ID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYTE2LmNhbGwoaXRlcmFibGVfMSk7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOwogICAgICB9CiAgICB9CiAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgfSk7Cn0KZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkgewogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICBwcm9jZXNzMihhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbihlcnIpIHsKICAgICAgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsKICAgIH0pOwogIH0pOwp9CmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHsKICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpOwp9CmZ1bmN0aW9uIHByb2Nlc3MyKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHsKICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTsKICB2YXIgZV8yLCBfYTE2OwogIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgdmFyIHZhbHVlMiwgZV8yXzE7CiAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24oX2IpIHsKICAgICAgc3dpdGNoIChfYi5sYWJlbCkgewogICAgICAgIGNhc2UgMDoKICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTsKICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7CiAgICAgICAgICBfYi5sYWJlbCA9IDE7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdOwogICAgICAgICAgdmFsdWUyID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkgewogICAgICAgICAgICByZXR1cm4gWzJdOwogICAgICAgICAgfQogICAgICAgICAgX2IubGFiZWwgPSAzOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIHJldHVybiBbMywgMV07CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgcmV0dXJuIFszLCAxMV07CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7CiAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OwogICAgICAgICAgcmV0dXJuIFszLCAxMV07CiAgICAgICAgY2FzZSA2OgogICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7CiAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSAmJiAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2ExNiA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTsKICAgICAgICAgIHJldHVybiBbNCwgX2ExNi5jYWxsKGFzeW5jSXRlcmFibGVfMSldOwogICAgICAgIGNhc2UgNzoKICAgICAgICAgIF9iLnNlbnQoKTsKICAgICAgICAgIF9iLmxhYmVsID0gODsKICAgICAgICBjYXNlIDg6CiAgICAgICAgICByZXR1cm4gWzMsIDEwXTsKICAgICAgICBjYXNlIDk6CiAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7CiAgICAgICAgICByZXR1cm4gWzddOwogICAgICAgIGNhc2UgMTA6CiAgICAgICAgICByZXR1cm4gWzddOwogICAgICAgIGNhc2UgMTE6CiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgICAgICByZXR1cm4gWzJdOwogICAgICB9CiAgICB9KTsKICB9KTsKfQp2YXIgaW5pdF9pbm5lckZyb20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lubmVyRnJvbS5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9pc0FycmF5TGlrZSgpOwogICAgaW5pdF9pc1Byb21pc2UoKTsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9pc0ludGVyb3BPYnNlcnZhYmxlKCk7CiAgICBpbml0X2lzQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF90aHJvd1Vub2JzZXJ2YWJsZUVycm9yKCk7CiAgICBpbml0X2lzSXRlcmFibGUoKTsKICAgIGluaXRfaXNSZWFkYWJsZVN0cmVhbUxpa2UoKTsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogICAgaW5pdF9yZXBvcnRVbmhhbmRsZWRFcnJvcigpOwogICAgaW5pdF9vYnNlcnZhYmxlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2V4ZWN1dGVTY2hlZHVsZS5qcwpmdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5MiwgcmVwZWF0MykgewogIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgZGVsYXkyID0gMDsKICB9CiAgaWYgKHJlcGVhdDMgPT09IHZvaWQgMCkgewogICAgcmVwZWF0MyA9IGZhbHNlOwogIH0KICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24oKSB7CiAgICB3b3JrKCk7CiAgICBpZiAocmVwZWF0MykgewogICAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgZGVsYXkyKSk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7CiAgICB9CiAgfSwgZGVsYXkyKTsKICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHNjaGVkdWxlU3Vic2NyaXB0aW9uKTsKICBpZiAoIXJlcGVhdDMpIHsKICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjsKICB9Cn0KdmFyIGluaXRfZXhlY3V0ZVNjaGVkdWxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9leGVjdXRlU2NoZWR1bGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29ic2VydmVPbi5qcwpmdW5jdGlvbiBvYnNlcnZlT24oc2NoZWR1bGVyLCBkZWxheTIpIHsKICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgIGRlbGF5MiA9IDA7CiAgfQogIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uKHNvdXJjZSwgc3Vic2NyaWJlcikgewogICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHJldHVybiBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gc3Vic2NyaWJlci5uZXh0KHZhbHVlMik7CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9LCBmdW5jdGlvbihlcnIpIHsKICAgICAgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9KSk7CiAgfSk7Cn0KdmFyIGluaXRfb2JzZXJ2ZU9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29ic2VydmVPbi5qcyIoKSB7CiAgICBpbml0X2V4ZWN1dGVTY2hlZHVsZSgpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N1YnNjcmliZU9uLmpzCmZ1bmN0aW9uIHN1YnNjcmliZU9uKHNjaGVkdWxlciwgZGVsYXkyKSB7CiAgaWYgKGRlbGF5MiA9PT0gdm9pZCAwKSB7CiAgICBkZWxheTIgPSAwOwogIH0KICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHN1YnNjcmliZXIuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7CiAgICB9LCBkZWxheTIpKTsKICB9KTsKfQp2YXIgaW5pdF9zdWJzY3JpYmVPbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zdWJzY3JpYmVPbi5qcyIoKSB7CiAgICBpbml0X2xpZnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZU9ic2VydmFibGUuanMKZnVuY3Rpb24gc2NoZWR1bGVPYnNlcnZhYmxlKGlucHV0LCBzY2hlZHVsZXIpIHsKICByZXR1cm4gaW5uZXJGcm9tKGlucHV0KS5waXBlKHN1YnNjcmliZU9uKHNjaGVkdWxlciksIG9ic2VydmVPbihzY2hlZHVsZXIpKTsKfQp2YXIgaW5pdF9zY2hlZHVsZU9ic2VydmFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVPYnNlcnZhYmxlLmpzIigpIHsKICAgIGluaXRfaW5uZXJGcm9tKCk7CiAgICBpbml0X29ic2VydmVPbigpOwogICAgaW5pdF9zdWJzY3JpYmVPbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlUHJvbWlzZS5qcwpmdW5jdGlvbiBzY2hlZHVsZVByb21pc2UoaW5wdXQsIHNjaGVkdWxlcikgewogIHJldHVybiBpbm5lckZyb20oaW5wdXQpLnBpcGUoc3Vic2NyaWJlT24oc2NoZWR1bGVyKSwgb2JzZXJ2ZU9uKHNjaGVkdWxlcikpOwp9CnZhciBpbml0X3NjaGVkdWxlUHJvbWlzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVByb21pc2UuanMiKCkgewogICAgaW5pdF9pbm5lckZyb20oKTsKICAgIGluaXRfb2JzZXJ2ZU9uKCk7CiAgICBpbml0X3N1YnNjcmliZU9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVBcnJheS5qcwpmdW5jdGlvbiBzY2hlZHVsZUFycmF5KGlucHV0LCBzY2hlZHVsZXIpIHsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgdmFyIGkxMSA9IDA7CiAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uKCkgewogICAgICBpZiAoaTExID09PSBpbnB1dC5sZW5ndGgpIHsKICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3Vic2NyaWJlci5uZXh0KGlucHV0W2kxMSsrXSk7CiAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkgewogICAgICAgICAgdGhpcy5zY2hlZHVsZSgpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfSk7Cn0KdmFyIGluaXRfc2NoZWR1bGVBcnJheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZUFycmF5LmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlSXRlcmFibGUuanMKZnVuY3Rpb24gc2NoZWR1bGVJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIHZhciBpdGVyYXRvcjI7CiAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbigpIHsKICAgICAgaXRlcmF0b3IyID0gaW5wdXRbaXRlcmF0b3JdKCk7CiAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBfYTE2OwogICAgICAgIHZhciB2YWx1ZTI7CiAgICAgICAgdmFyIGRvbmU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9hMTYgPSBpdGVyYXRvcjIubmV4dCgpLCB2YWx1ZTIgPSBfYTE2LnZhbHVlLCBkb25lID0gX2ExNi5kb25lOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoZG9uZSkgewogICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICB9CiAgICAgIH0sIDAsIHRydWUpOwogICAgfSk7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGl0ZXJhdG9yMiA9PT0gbnVsbCB8fCBpdGVyYXRvcjIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGl0ZXJhdG9yMi5yZXR1cm4pICYmIGl0ZXJhdG9yMi5yZXR1cm4oKTsKICAgIH07CiAgfSk7Cn0KdmFyIGluaXRfc2NoZWR1bGVJdGVyYWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZUl0ZXJhYmxlLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9pdGVyYXRvcigpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgICBpbml0X2V4ZWN1dGVTY2hlZHVsZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlQXN5bmNJdGVyYWJsZS5qcwpmdW5jdGlvbiBzY2hlZHVsZUFzeW5jSXRlcmFibGUoaW5wdXQsIHNjaGVkdWxlcikgewogIGlmICghaW5wdXQpIHsKICAgIHRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTsKICB9CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICB2YXIgaXRlcmF0b3IyID0gaW5wdXRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7CiAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIGl0ZXJhdG9yMi5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKICAgICAgICAgIGlmIChyZXN1bHQuZG9uZSkgewogICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocmVzdWx0LnZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSwgMCwgdHJ1ZSk7CiAgICB9KTsKICB9KTsKfQp2YXIgaW5pdF9zY2hlZHVsZUFzeW5jSXRlcmFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVBc3luY0l0ZXJhYmxlLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9leGVjdXRlU2NoZWR1bGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZS5qcwpmdW5jdGlvbiBzY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCwgc2NoZWR1bGVyKSB7CiAgcmV0dXJuIHNjaGVkdWxlQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKGlucHV0KSwgc2NoZWR1bGVyKTsKfQp2YXIgaW5pdF9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZS5qcyIoKSB7CiAgICBpbml0X3NjaGVkdWxlQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF9pc1JlYWRhYmxlU3RyZWFtTGlrZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlZC5qcwpmdW5jdGlvbiBzY2hlZHVsZWQoaW5wdXQsIHNjaGVkdWxlcikgewogIGlmIChpbnB1dCAhPSBudWxsKSB7CiAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlT2JzZXJ2YWJsZShpbnB1dCwgc2NoZWR1bGVyKTsKICAgIH0KICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlQXJyYXkoaW5wdXQsIHNjaGVkdWxlcik7CiAgICB9CiAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkgewogICAgICByZXR1cm4gc2NoZWR1bGVQcm9taXNlKGlucHV0LCBzY2hlZHVsZXIpOwogICAgfQogICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlQXN5bmNJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKTsKICAgIH0KICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkgewogICAgICByZXR1cm4gc2NoZWR1bGVJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKTsKICAgIH0KICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0LCBzY2hlZHVsZXIpOwogICAgfQogIH0KICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7Cn0KdmFyIGluaXRfc2NoZWR1bGVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlZC5qcyIoKSB7CiAgICBpbml0X3NjaGVkdWxlT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9zY2hlZHVsZVByb21pc2UoKTsKICAgIGluaXRfc2NoZWR1bGVBcnJheSgpOwogICAgaW5pdF9zY2hlZHVsZUl0ZXJhYmxlKCk7CiAgICBpbml0X3NjaGVkdWxlQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF9pc0ludGVyb3BPYnNlcnZhYmxlKCk7CiAgICBpbml0X2lzUHJvbWlzZSgpOwogICAgaW5pdF9pc0FycmF5TGlrZSgpOwogICAgaW5pdF9pc0l0ZXJhYmxlKCk7CiAgICBpbml0X2lzQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF90aHJvd1Vub2JzZXJ2YWJsZUVycm9yKCk7CiAgICBpbml0X2lzUmVhZGFibGVTdHJlYW1MaWtlKCk7CiAgICBpbml0X3NjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb20uanMKZnVuY3Rpb24gZnJvbShpbnB1dCwgc2NoZWR1bGVyKSB7CiAgcmV0dXJuIHNjaGVkdWxlciA/IHNjaGVkdWxlZChpbnB1dCwgc2NoZWR1bGVyKSA6IGlubmVyRnJvbShpbnB1dCk7Cn0KdmFyIGluaXRfZnJvbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZnJvbS5qcyIoKSB7CiAgICBpbml0X3NjaGVkdWxlZCgpOwogICAgaW5pdF9pbm5lckZyb20oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvb2YuanMKZnVuY3Rpb24gb2YoKSB7CiAgdmFyIGFyZ3MgPSBbXTsKICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldOwogIH0KICB2YXIgc2NoZWR1bGVyID0gcG9wU2NoZWR1bGVyKGFyZ3MpOwogIHJldHVybiBmcm9tKGFyZ3MsIHNjaGVkdWxlcik7Cn0KdmFyIGluaXRfb2YgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL29mLmpzIigpIHsKICAgIGluaXRfYXJncygpOwogICAgaW5pdF9mcm9tKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3Rocm93RXJyb3IuanMKZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHsKICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OwogIH07CiAgdmFyIGluaXQgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7CiAgfTsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoc2NoZWR1bGVyID8gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShpbml0LCAwLCBzdWJzY3JpYmVyKTsKICB9IDogaW5pdCk7Cn0KdmFyIGluaXRfdGhyb3dFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvdGhyb3dFcnJvci5qcyIoKSB7CiAgICBpbml0X09ic2VydmFibGUoKTsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvTm90aWZpY2F0aW9uLmpzCmZ1bmN0aW9uIG9ic2VydmVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBvYnNlcnZlcikgewogIHZhciBfYTE2LCBfYiwgX2M7CiAgdmFyIF9kID0gbm90aWZpY2F0aW9uLCBraW5kID0gX2Qua2luZCwgdmFsdWUyID0gX2QudmFsdWUsIGVycm9yID0gX2QuZXJyb3I7CiAgaWYgKHR5cGVvZiBraW5kICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBub3RpZmljYXRpb24sIG1pc3NpbmcgImtpbmQiJyk7CiAgfQogIGtpbmQgPT09ICJOIiA/IChfYTE2ID0gb2JzZXJ2ZXIubmV4dCkgPT09IG51bGwgfHwgX2ExNiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNi5jYWxsKG9ic2VydmVyLCB2YWx1ZTIpIDoga2luZCA9PT0gIkUiID8gKF9iID0gb2JzZXJ2ZXIuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKG9ic2VydmVyLCBlcnJvcikgOiAoX2MgPSBvYnNlcnZlci5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhbGwob2JzZXJ2ZXIpOwp9CnZhciBOb3RpZmljYXRpb25LaW5kLCBOb3RpZmljYXRpb247CnZhciBpbml0X05vdGlmaWNhdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL05vdGlmaWNhdGlvbi5qcyIoKSB7CiAgICBpbml0X2VtcHR5KCk7CiAgICBpbml0X29mKCk7CiAgICBpbml0X3Rocm93RXJyb3IoKTsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogICAgKGZ1bmN0aW9uKE5vdGlmaWNhdGlvbktpbmQyKSB7CiAgICAgIE5vdGlmaWNhdGlvbktpbmQyWyJORVhUIl0gPSAiTiI7CiAgICAgIE5vdGlmaWNhdGlvbktpbmQyWyJFUlJPUiJdID0gIkUiOwogICAgICBOb3RpZmljYXRpb25LaW5kMlsiQ09NUExFVEUiXSA9ICJDIjsKICAgIH0pKE5vdGlmaWNhdGlvbktpbmQgfHwgKE5vdGlmaWNhdGlvbktpbmQgPSB7fSkpOwogICAgTm90aWZpY2F0aW9uID0gKGZ1bmN0aW9uKCkgewogICAgICBmdW5jdGlvbiBOb3RpZmljYXRpb24yKGtpbmQsIHZhbHVlMiwgZXJyb3IpIHsKICAgICAgICB0aGlzLmtpbmQgPSBraW5kOwogICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yOwogICAgICAgIHRoaXMuaGFzVmFsdWUgPSBraW5kID09PSAiTiI7CiAgICAgIH0KICAgICAgTm90aWZpY2F0aW9uMi5wcm90b3R5cGUub2JzZXJ2ZSA9IGZ1bmN0aW9uKG9ic2VydmVyKSB7CiAgICAgICAgcmV0dXJuIG9ic2VydmVOb3RpZmljYXRpb24odGhpcywgb2JzZXJ2ZXIpOwogICAgICB9OwogICAgICBOb3RpZmljYXRpb24yLnByb3RvdHlwZS5kbyA9IGZ1bmN0aW9uKG5leHRIYW5kbGVyLCBlcnJvckhhbmRsZXIsIGNvbXBsZXRlSGFuZGxlcikgewogICAgICAgIHZhciBfYTE2ID0gdGhpcywga2luZCA9IF9hMTYua2luZCwgdmFsdWUyID0gX2ExNi52YWx1ZSwgZXJyb3IgPSBfYTE2LmVycm9yOwogICAgICAgIHJldHVybiBraW5kID09PSAiTiIgPyBuZXh0SGFuZGxlciA9PT0gbnVsbCB8fCBuZXh0SGFuZGxlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmV4dEhhbmRsZXIodmFsdWUyKSA6IGtpbmQgPT09ICJFIiA/IGVycm9ySGFuZGxlciA9PT0gbnVsbCB8fCBlcnJvckhhbmRsZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9ySGFuZGxlcihlcnJvcikgOiBjb21wbGV0ZUhhbmRsZXIgPT09IG51bGwgfHwgY29tcGxldGVIYW5kbGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wbGV0ZUhhbmRsZXIoKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obmV4dE9yT2JzZXJ2ZXIsIGVycm9yLCBjb21wbGV0ZSkgewogICAgICAgIHZhciBfYTE2OwogICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKChfYTE2ID0gbmV4dE9yT2JzZXJ2ZXIpID09PSBudWxsIHx8IF9hMTYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hMTYubmV4dCkgPyB0aGlzLm9ic2VydmUobmV4dE9yT2JzZXJ2ZXIpIDogdGhpcy5kbyhuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5wcm90b3R5cGUudG9PYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF9hMTYgPSB0aGlzLCBraW5kID0gX2ExNi5raW5kLCB2YWx1ZTIgPSBfYTE2LnZhbHVlLCBlcnJvciA9IF9hMTYuZXJyb3I7CiAgICAgICAgdmFyIHJlc3VsdCA9IGtpbmQgPT09ICJOIiA/IG9mKHZhbHVlMikgOiBraW5kID09PSAiRSIgPyB0aHJvd0Vycm9yKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgIH0pIDoga2luZCA9PT0gIkMiID8gRU1QVFkgOiAwOwogICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmV4cGVjdGVkIG5vdGlmaWNhdGlvbiBraW5kICIgKyBraW5kKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5jcmVhdGVOZXh0ID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIG5ldyBOb3RpZmljYXRpb24yKCJOIiwgdmFsdWUyKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5jcmVhdGVFcnJvciA9IGZ1bmN0aW9uKGVycikgewogICAgICAgIHJldHVybiBuZXcgTm90aWZpY2F0aW9uMigiRSIsIHZvaWQgMCwgZXJyKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5jcmVhdGVDb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBOb3RpZmljYXRpb24yLmNvbXBsZXRlTm90aWZpY2F0aW9uOwogICAgICB9OwogICAgICBOb3RpZmljYXRpb24yLmNvbXBsZXRlTm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbjIoIkMiKTsKICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbjI7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc09ic2VydmFibGUuanMKdmFyIGluaXRfaXNPYnNlcnZhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc09ic2VydmFibGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9FbXB0eUVycm9yLmpzCnZhciBFbXB0eUVycm9yOwp2YXIgaW5pdF9FbXB0eUVycm9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9FbXB0eUVycm9yLmpzIigpIHsKICAgIGluaXRfY3JlYXRlRXJyb3JDbGFzcygpOwogICAgRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBFbXB0eUVycm9ySW1wbCgpIHsKICAgICAgICBfc3VwZXIodGhpcyk7CiAgICAgICAgdGhpcy5uYW1lID0gIkVtcHR5RXJyb3IiOwogICAgICAgIHRoaXMubWVzc2FnZSA9ICJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSI7CiAgICAgIH07CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL2xhc3RWYWx1ZUZyb20uanMKdmFyIGluaXRfbGFzdFZhbHVlRnJvbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL2xhc3RWYWx1ZUZyb20uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvZmlyc3RWYWx1ZUZyb20uanMKdmFyIGluaXRfZmlyc3RWYWx1ZUZyb20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9maXJzdFZhbHVlRnJvbS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yLmpzCnZhciBBcmd1bWVudE91dE9mUmFuZ2VFcnJvcjsKdmFyIGluaXRfQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yLmpzIigpIHsKICAgIGluaXRfY3JlYXRlRXJyb3JDbGFzcygpOwogICAgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICByZXR1cm4gZnVuY3Rpb24gQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JJbXBsKCkgewogICAgICAgIF9zdXBlcih0aGlzKTsKICAgICAgICB0aGlzLm5hbWUgPSAiQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IiOwogICAgICAgIHRoaXMubWVzc2FnZSA9ICJhcmd1bWVudCBvdXQgb2YgcmFuZ2UiOwogICAgICB9OwogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL05vdEZvdW5kRXJyb3IuanMKdmFyIE5vdEZvdW5kRXJyb3I7CnZhciBpbml0X05vdEZvdW5kRXJyb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL05vdEZvdW5kRXJyb3IuanMiKCkgewogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBOb3RGb3VuZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIE5vdEZvdW5kRXJyb3JJbXBsKG1lc3NhZ2UyKSB7CiAgICAgICAgX3N1cGVyKHRoaXMpOwogICAgICAgIHRoaXMubmFtZSA9ICJOb3RGb3VuZEVycm9yIjsKICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlMjsKICAgICAgfTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9TZXF1ZW5jZUVycm9yLmpzCnZhciBTZXF1ZW5jZUVycm9yOwp2YXIgaW5pdF9TZXF1ZW5jZUVycm9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9TZXF1ZW5jZUVycm9yLmpzIigpIHsKICAgIGluaXRfY3JlYXRlRXJyb3JDbGFzcygpOwogICAgU2VxdWVuY2VFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBTZXF1ZW5jZUVycm9ySW1wbChtZXNzYWdlMikgewogICAgICAgIF9zdXBlcih0aGlzKTsKICAgICAgICB0aGlzLm5hbWUgPSAiU2VxdWVuY2VFcnJvciI7CiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTI7CiAgICAgIH07CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNEYXRlLmpzCmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZTIpOwp9CnZhciBpbml0X2lzRGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNEYXRlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aW1lb3V0LmpzCmZ1bmN0aW9uIHRpbWVvdXQoY29uZmlnMywgc2NoZWR1bGVyQXJnKSB7CiAgdmFyIF9hMTYgPSBpc1ZhbGlkRGF0ZShjb25maWczKSA/IHsgZmlyc3Q6IGNvbmZpZzMgfSA6IHR5cGVvZiBjb25maWczID09PSAibnVtYmVyIiA/IHsgZWFjaDogY29uZmlnMyB9IDogY29uZmlnMywgZmlyc3QyID0gX2ExNi5maXJzdCwgZWFjaCA9IF9hMTYuZWFjaCwgX2IgPSBfYTE2LndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYTE2LnNjaGVkdWxlciwgc2NoZWR1bGVyID0gX2MgPT09IHZvaWQgMCA/IHNjaGVkdWxlckFyZyAhPT0gbnVsbCAmJiBzY2hlZHVsZXJBcmcgIT09IHZvaWQgMCA/IHNjaGVkdWxlckFyZyA6IGFzeW5jU2NoZWR1bGVyIDogX2MsIF9kID0gX2ExNi5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDsKICBpZiAoZmlyc3QyID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJObyB0aW1lb3V0IHByb3ZpZGVkLiIpOwogIH0KICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjsKICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjsKICAgIHZhciBsYXN0VmFsdWUgPSBudWxsOwogICAgdmFyIHNlZW4gPSAwOwogICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbihkZWxheTIpIHsKICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbigpIHsKICAgICAgICB0cnkgewogICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7CiAgICAgICAgICAgIG1ldGEsCiAgICAgICAgICAgIGxhc3RWYWx1ZSwKICAgICAgICAgICAgc2VlbgogICAgICAgICAgfSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsKICAgICAgICB9CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9OwogICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgIHNlZW4rKzsKICAgICAgc3Vic2NyaWJlci5uZXh0KGxhc3RWYWx1ZSA9IHZhbHVlMik7CiAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7CiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7CiAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgIH0KICAgICAgbGFzdFZhbHVlID0gbnVsbDsKICAgIH0pKTsKICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QyICE9IG51bGwgPyB0eXBlb2YgZmlyc3QyID09PSAibnVtYmVyIiA/IGZpcnN0MiA6ICtmaXJzdDIgLSBzY2hlZHVsZXIubm93KCkgOiBlYWNoKTsKICB9KTsKfQpmdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHsKICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pOwp9CnZhciBUaW1lb3V0RXJyb3I7CnZhciBpbml0X3RpbWVvdXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dC5qcyIoKSB7CiAgICBpbml0X2FzeW5jKCk7CiAgICBpbml0X2lzRGF0ZSgpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9leGVjdXRlU2NoZWR1bGUoKTsKICAgIFRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBUaW1lb3V0RXJyb3JJbXBsKGluZm8pIHsKICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBpbmZvID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgX3N1cGVyKHRoaXMpOwogICAgICAgIHRoaXMubWVzc2FnZSA9ICJUaW1lb3V0IGhhcyBvY2N1cnJlZCI7CiAgICAgICAgdGhpcy5uYW1lID0gIlRpbWVvdXRFcnJvciI7CiAgICAgICAgdGhpcy5pbmZvID0gaW5mbzsKICAgICAgfTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hcC5qcwpmdW5jdGlvbiBtYXAyKHByb2plY3QsIHRoaXNBcmcpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBpbmRleDIgPSAwOwogICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHN1YnNjcmliZXIubmV4dChwcm9qZWN0LmNhbGwodGhpc0FyZywgdmFsdWUyLCBpbmRleDIrKykpOwogICAgfSkpOwogIH0pOwp9CnZhciBpbml0X21hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXAuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9tYXBPbmVPck1hbnlBcmdzLmpzCmZ1bmN0aW9uIGNhbGxPckFwcGx5KGZuLCBhcmdzKSB7CiAgcmV0dXJuIGlzQXJyYXkoYXJncykgPyBmbi5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpIDogZm4oYXJncyk7Cn0KZnVuY3Rpb24gbWFwT25lT3JNYW55QXJncyhmbikgewogIHJldHVybiBtYXAyKGZ1bmN0aW9uKGFyZ3MpIHsKICAgIHJldHVybiBjYWxsT3JBcHBseShmbiwgYXJncyk7CiAgfSk7Cn0KdmFyIGlzQXJyYXk7CnZhciBpbml0X21hcE9uZU9yTWFueUFyZ3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL21hcE9uZU9yTWFueUFyZ3MuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfbWFwKCk7CiAgICBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvYmluZENhbGxiYWNrLmpzCnZhciBpbml0X2JpbmRDYWxsYmFjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvYmluZENhbGxiYWNrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvYmluZE5vZGVDYWxsYmFjay5qcwp2YXIgaW5pdF9iaW5kTm9kZUNhbGxiYWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9iaW5kTm9kZUNhbGxiYWNrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29tYmluZUxhdGVzdC5qcwp2YXIgaW5pdF9jb21iaW5lTGF0ZXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZUludGVybmFscy5qcwpmdW5jdGlvbiBtZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQsIG9uQmVmb3JlTmV4dCwgZXhwYW5kMiwgaW5uZXJTdWJTY2hlZHVsZXIsIGFkZGl0aW9uYWxGaW5hbGl6ZXIpIHsKICB2YXIgYnVmZmVyMiA9IFtdOwogIHZhciBhY3RpdmUgPSAwOwogIHZhciBpbmRleDIgPSAwOwogIHZhciBpc0NvbXBsZXRlID0gZmFsc2U7CiAgdmFyIGNoZWNrQ29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgIGlmIChpc0NvbXBsZXRlICYmICFidWZmZXIyLmxlbmd0aCAmJiAhYWN0aXZlKSB7CiAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgIH0KICB9OwogIHZhciBvdXRlck5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgIHJldHVybiBhY3RpdmUgPCBjb25jdXJyZW50ID8gZG9Jbm5lclN1Yih2YWx1ZTIpIDogYnVmZmVyMi5wdXNoKHZhbHVlMik7CiAgfTsKICB2YXIgZG9Jbm5lclN1YiA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgZXhwYW5kMiAmJiBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgIGFjdGl2ZSsrOwogICAgdmFyIGlubmVyQ29tcGxldGUgPSBmYWxzZTsKICAgIGlubmVyRnJvbShwcm9qZWN0KHZhbHVlMiwgaW5kZXgyKyspKS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uKGlubmVyVmFsdWUpIHsKICAgICAgb25CZWZvcmVOZXh0ID09PSBudWxsIHx8IG9uQmVmb3JlTmV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CZWZvcmVOZXh0KGlubmVyVmFsdWUpOwogICAgICBpZiAoZXhwYW5kMikgewogICAgICAgIG91dGVyTmV4dChpbm5lclZhbHVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdWJzY3JpYmVyLm5leHQoaW5uZXJWYWx1ZSk7CiAgICAgIH0KICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICBpbm5lckNvbXBsZXRlID0gdHJ1ZTsKICAgIH0sIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgIGlmIChpbm5lckNvbXBsZXRlKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGFjdGl2ZS0tOwogICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGJ1ZmZlcmVkVmFsdWUgPSBidWZmZXIyLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmIChpbm5lclN1YlNjaGVkdWxlcikgewogICAgICAgICAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBpbm5lclN1YlNjaGVkdWxlciwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZG9Jbm5lclN1YihidWZmZXJlZFZhbHVlKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBkb0lubmVyU3ViKGJ1ZmZlcmVkVmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgd2hpbGUgKGJ1ZmZlcjIubGVuZ3RoICYmIGFjdGl2ZSA8IGNvbmN1cnJlbnQpIHsKICAgICAgICAgICAgX2xvb3BfMSgpOwogICAgICAgICAgfQogICAgICAgICAgY2hlY2tDb21wbGV0ZSgpOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpOwogICAgICAgIH0KICAgICAgfQogICAgfSkpOwogIH07CiAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgb3V0ZXJOZXh0LCBmdW5jdGlvbigpIHsKICAgIGlzQ29tcGxldGUgPSB0cnVlOwogICAgY2hlY2tDb21wbGV0ZSgpOwogIH0pKTsKICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICBhZGRpdGlvbmFsRmluYWxpemVyID09PSBudWxsIHx8IGFkZGl0aW9uYWxGaW5hbGl6ZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxGaW5hbGl6ZXIoKTsKICB9Owp9CnZhciBpbml0X21lcmdlSW50ZXJuYWxzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlSW50ZXJuYWxzLmpzIigpIHsKICAgIGluaXRfaW5uZXJGcm9tKCk7CiAgICBpbml0X2V4ZWN1dGVTY2hlZHVsZSgpOwogICAgaW5pdF9PcGVyYXRvclN1YnNjcmliZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcC5qcwpmdW5jdGlvbiBtZXJnZU1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3RvciwgY29uY3VycmVudCkgewogIGlmIChjb25jdXJyZW50ID09PSB2b2lkIDApIHsKICAgIGNvbmN1cnJlbnQgPSBJbmZpbml0eTsKICB9CiAgaWYgKGlzRnVuY3Rpb24ocmVzdWx0U2VsZWN0b3IpKSB7CiAgICByZXR1cm4gbWVyZ2VNYXAoZnVuY3Rpb24oYTUsIGkxMSkgewogICAgICByZXR1cm4gbWFwMihmdW5jdGlvbihiNSwgaWkpIHsKICAgICAgICByZXR1cm4gcmVzdWx0U2VsZWN0b3IoYTUsIGI1LCBpMTEsIGlpKTsKICAgICAgfSkoaW5uZXJGcm9tKHByb2plY3QoYTUsIGkxMSkpKTsKICAgIH0sIGNvbmN1cnJlbnQpOwogIH0gZWxzZSBpZiAodHlwZW9mIHJlc3VsdFNlbGVjdG9yID09PSAibnVtYmVyIikgewogICAgY29uY3VycmVudCA9IHJlc3VsdFNlbGVjdG9yOwogIH0KICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHJldHVybiBtZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQpOwogIH0pOwp9CnZhciBpbml0X21lcmdlTWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwLmpzIigpIHsKICAgIGluaXRfbWFwKCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X21lcmdlSW50ZXJuYWxzKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZUFsbC5qcwpmdW5jdGlvbiBtZXJnZUFsbChjb25jdXJyZW50KSB7CiAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgewogICAgY29uY3VycmVudCA9IEluZmluaXR5OwogIH0KICByZXR1cm4gbWVyZ2VNYXAoaWRlbnRpdHksIGNvbmN1cnJlbnQpOwp9CnZhciBpbml0X21lcmdlQWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlQWxsLmpzIigpIHsKICAgIGluaXRfbWVyZ2VNYXAoKTsKICAgIGluaXRfaWRlbnRpdHkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRBbGwuanMKZnVuY3Rpb24gY29uY2F0QWxsKCkgewogIHJldHVybiBtZXJnZUFsbCgxKTsKfQp2YXIgaW5pdF9jb25jYXRBbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0QWxsLmpzIigpIHsKICAgIGluaXRfbWVyZ2VBbGwoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29uY2F0LmpzCmZ1bmN0aW9uIGNvbmNhdCgpIHsKICB2YXIgYXJncyA9IFtdOwogIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgfQogIHJldHVybiBjb25jYXRBbGwoKShmcm9tKGFyZ3MsIHBvcFNjaGVkdWxlcihhcmdzKSkpOwp9CnZhciBpbml0X2NvbmNhdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29uY2F0LmpzIigpIHsKICAgIGluaXRfY29uY2F0QWxsKCk7CiAgICBpbml0X2FyZ3MoKTsKICAgIGluaXRfZnJvbSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9kZWZlci5qcwp2YXIgaW5pdF9kZWZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZGVmZXIuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb25uZWN0YWJsZS5qcwp2YXIgaW5pdF9jb25uZWN0YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29ubmVjdGFibGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mb3JrSm9pbi5qcwp2YXIgaW5pdF9mb3JrSm9pbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZm9ya0pvaW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tRXZlbnQuanMKZnVuY3Rpb24gZnJvbUV2ZW50KHRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zLCByZXN1bHRTZWxlY3RvcikgewogIGlmIChpc0Z1bmN0aW9uKG9wdGlvbnMpKSB7CiAgICByZXN1bHRTZWxlY3RvciA9IG9wdGlvbnM7CiAgICBvcHRpb25zID0gdm9pZCAwOwogIH0KICBpZiAocmVzdWx0U2VsZWN0b3IpIHsKICAgIHJldHVybiBmcm9tRXZlbnQodGFyZ2V0LCBldmVudE5hbWUsIG9wdGlvbnMpLnBpcGUobWFwT25lT3JNYW55QXJncyhyZXN1bHRTZWxlY3RvcikpOwogIH0KICB2YXIgX2ExNiA9IF9fcmVhZChpc0V2ZW50VGFyZ2V0KHRhcmdldCkgPyBldmVudFRhcmdldE1ldGhvZHMubWFwKGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHsKICAgIHJldHVybiBmdW5jdGlvbihoYW5kbGVyMikgewogICAgICByZXR1cm4gdGFyZ2V0W21ldGhvZE5hbWVdKGV2ZW50TmFtZSwgaGFuZGxlcjIsIG9wdGlvbnMpOwogICAgfTsKICB9KSA6IGlzTm9kZVN0eWxlRXZlbnRFbWl0dGVyKHRhcmdldCkgPyBub2RlRXZlbnRFbWl0dGVyTWV0aG9kcy5tYXAodG9Db21tb25IYW5kbGVyUmVnaXN0cnkodGFyZ2V0LCBldmVudE5hbWUpKSA6IGlzSlF1ZXJ5U3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KSA/IGpxdWVyeU1ldGhvZHMubWFwKHRvQ29tbW9uSGFuZGxlclJlZ2lzdHJ5KHRhcmdldCwgZXZlbnROYW1lKSkgOiBbXSwgMiksIGFkZDMgPSBfYTE2WzBdLCByZW1vdmUyID0gX2ExNlsxXTsKICBpZiAoIWFkZDMpIHsKICAgIGlmIChpc0FycmF5TGlrZSh0YXJnZXQpKSB7CiAgICAgIHJldHVybiBtZXJnZU1hcChmdW5jdGlvbihzdWJUYXJnZXQpIHsKICAgICAgICByZXR1cm4gZnJvbUV2ZW50KHN1YlRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zKTsKICAgICAgfSkoaW5uZXJGcm9tKHRhcmdldCkpOwogICAgfQogIH0KICBpZiAoIWFkZDMpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7CiAgfQogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICB2YXIgaGFuZGxlcjIgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIGFyZ3MgPSBbXTsKICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgIH0KICAgICAgcmV0dXJuIHN1YnNjcmliZXIubmV4dCgxIDwgYXJncy5sZW5ndGggPyBhcmdzIDogYXJnc1swXSk7CiAgICB9OwogICAgYWRkMyhoYW5kbGVyMik7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiByZW1vdmUyKGhhbmRsZXIyKTsKICAgIH07CiAgfSk7Cn0KZnVuY3Rpb24gdG9Db21tb25IYW5kbGVyUmVnaXN0cnkodGFyZ2V0LCBldmVudE5hbWUpIHsKICByZXR1cm4gZnVuY3Rpb24obWV0aG9kTmFtZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKGhhbmRsZXIyKSB7CiAgICAgIHJldHVybiB0YXJnZXRbbWV0aG9kTmFtZV0oZXZlbnROYW1lLCBoYW5kbGVyMik7CiAgICB9OwogIH07Cn0KZnVuY3Rpb24gaXNOb2RlU3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KSB7CiAgcmV0dXJuIGlzRnVuY3Rpb24odGFyZ2V0LmFkZExpc3RlbmVyKSAmJiBpc0Z1bmN0aW9uKHRhcmdldC5yZW1vdmVMaXN0ZW5lcik7Cn0KZnVuY3Rpb24gaXNKUXVlcnlTdHlsZUV2ZW50RW1pdHRlcih0YXJnZXQpIHsKICByZXR1cm4gaXNGdW5jdGlvbih0YXJnZXQub24pICYmIGlzRnVuY3Rpb24odGFyZ2V0Lm9mZik7Cn0KZnVuY3Rpb24gaXNFdmVudFRhcmdldCh0YXJnZXQpIHsKICByZXR1cm4gaXNGdW5jdGlvbih0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcikgJiYgaXNGdW5jdGlvbih0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcik7Cn0KdmFyIG5vZGVFdmVudEVtaXR0ZXJNZXRob2RzLCBldmVudFRhcmdldE1ldGhvZHMsIGpxdWVyeU1ldGhvZHM7CnZhciBpbml0X2Zyb21FdmVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZnJvbUV2ZW50LmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogICAgaW5pdF9PYnNlcnZhYmxlKCk7CiAgICBpbml0X21lcmdlTWFwKCk7CiAgICBpbml0X2lzQXJyYXlMaWtlKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICAgIGluaXRfbWFwT25lT3JNYW55QXJncygpOwogICAgbm9kZUV2ZW50RW1pdHRlck1ldGhvZHMgPSBbImFkZExpc3RlbmVyIiwgInJlbW92ZUxpc3RlbmVyIl07CiAgICBldmVudFRhcmdldE1ldGhvZHMgPSBbImFkZEV2ZW50TGlzdGVuZXIiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciJdOwogICAganF1ZXJ5TWV0aG9kcyA9IFsib24iLCAib2ZmIl07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21FdmVudFBhdHRlcm4uanMKdmFyIGluaXRfZnJvbUV2ZW50UGF0dGVybiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZnJvbUV2ZW50UGF0dGVybi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2dlbmVyYXRlLmpzCnZhciBpbml0X2dlbmVyYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9nZW5lcmF0ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lpZi5qcwp2YXIgaW5pdF9paWYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lpZi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3RpbWVyLmpzCmZ1bmN0aW9uIHRpbWVyKGR1ZVRpbWUsIGludGVydmFsT3JTY2hlZHVsZXIsIHNjaGVkdWxlcikgewogIGlmIChkdWVUaW1lID09PSB2b2lkIDApIHsKICAgIGR1ZVRpbWUgPSAwOwogIH0KICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsKICAgIHNjaGVkdWxlciA9IGFzeW5jOwogIH0KICB2YXIgaW50ZXJ2YWxEdXJhdGlvbiA9IC0xOwogIGlmIChpbnRlcnZhbE9yU2NoZWR1bGVyICE9IG51bGwpIHsKICAgIGlmIChpc1NjaGVkdWxlcihpbnRlcnZhbE9yU2NoZWR1bGVyKSkgewogICAgICBzY2hlZHVsZXIgPSBpbnRlcnZhbE9yU2NoZWR1bGVyOwogICAgfSBlbHNlIHsKICAgICAgaW50ZXJ2YWxEdXJhdGlvbiA9IGludGVydmFsT3JTY2hlZHVsZXI7CiAgICB9CiAgfQogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICB2YXIgZHVlID0gaXNWYWxpZERhdGUoZHVlVGltZSkgPyArZHVlVGltZSAtIHNjaGVkdWxlci5ub3coKSA6IGR1ZVRpbWU7CiAgICBpZiAoZHVlIDwgMCkgewogICAgICBkdWUgPSAwOwogICAgfQogICAgdmFyIG4xMyA9IDA7CiAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uKCkgewogICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7CiAgICAgICAgc3Vic2NyaWJlci5uZXh0KG4xMysrKTsKICAgICAgICBpZiAoMCA8PSBpbnRlcnZhbER1cmF0aW9uKSB7CiAgICAgICAgICB0aGlzLnNjaGVkdWxlKHZvaWQgMCwgaW50ZXJ2YWxEdXJhdGlvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sIGR1ZSk7CiAgfSk7Cn0KdmFyIGluaXRfdGltZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3RpbWVyLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9hc3luYygpOwogICAgaW5pdF9pc1NjaGVkdWxlcigpOwogICAgaW5pdF9pc0RhdGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvaW50ZXJ2YWwuanMKdmFyIGluaXRfaW50ZXJ2YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2ludGVydmFsLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvbWVyZ2UuanMKdmFyIGluaXRfbWVyZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL21lcmdlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvbmV2ZXIuanMKZnVuY3Rpb24gbmV2ZXIoKSB7CiAgcmV0dXJuIE5FVkVSOwp9CnZhciBORVZFUjsKdmFyIGluaXRfbmV2ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL25ldmVyLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9ub29wKCk7CiAgICBORVZFUiA9IG5ldyBPYnNlcnZhYmxlKG5vb3ApOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9vbkVycm9yUmVzdW1lTmV4dC5qcwp2YXIgaW5pdF9vbkVycm9yUmVzdW1lTmV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvb25FcnJvclJlc3VtZU5leHQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9wYWlycy5qcwp2YXIgaW5pdF9wYWlycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvcGFpcnMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlci5qcwpmdW5jdGlvbiBmaWx0ZXIocHJlZGljYXRlLCB0aGlzQXJnKSB7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgaW5kZXgyID0gMDsKICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uKHZhbHVlMikgewogICAgICByZXR1cm4gcHJlZGljYXRlLmNhbGwodGhpc0FyZywgdmFsdWUyLCBpbmRleDIrKykgJiYgc3Vic2NyaWJlci5uZXh0KHZhbHVlMik7CiAgICB9KSk7CiAgfSk7Cn0KdmFyIGluaXRfZmlsdGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlci5qcyIoKSB7CiAgICBpbml0X2xpZnQoKTsKICAgIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3BhcnRpdGlvbi5qcwp2YXIgaW5pdF9wYXJ0aXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3BhcnRpdGlvbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3JhY2UuanMKdmFyIGluaXRfcmFjZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvcmFjZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3JhbmdlLmpzCnZhciBpbml0X3JhbmdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9yYW5nZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3VzaW5nLmpzCnZhciBpbml0X3VzaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS91c2luZy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3ppcC5qcwp2YXIgaW5pdF96aXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3ppcC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC90eXBlcy5qcwp2YXIgaW5pdF90eXBlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3R5cGVzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9hdWRpdC5qcwp2YXIgaW5pdF9hdWRpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9hdWRpdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvYXVkaXRUaW1lLmpzCnZhciBpbml0X2F1ZGl0VGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9hdWRpdFRpbWUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlci5qcwpmdW5jdGlvbiBidWZmZXIoY2xvc2luZ05vdGlmaWVyKSB7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgY3VycmVudEJ1ZmZlciA9IFtdOwogICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHJldHVybiBjdXJyZW50QnVmZmVyLnB1c2godmFsdWUyKTsKICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICBzdWJzY3JpYmVyLm5leHQoY3VycmVudEJ1ZmZlcik7CiAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgIH0pKTsKICAgIGlubmVyRnJvbShjbG9zaW5nTm90aWZpZXIpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24oKSB7CiAgICAgIHZhciBiNSA9IGN1cnJlbnRCdWZmZXI7CiAgICAgIGN1cnJlbnRCdWZmZXIgPSBbXTsKICAgICAgc3Vic2NyaWJlci5uZXh0KGI1KTsKICAgIH0sIG5vb3ApKTsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgY3VycmVudEJ1ZmZlciA9IG51bGw7CiAgICB9OwogIH0pOwp9CnZhciBpbml0X2J1ZmZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXIuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X25vb3AoKTsKICAgIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyKCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlckNvdW50LmpzCmZ1bmN0aW9uIGJ1ZmZlckNvdW50KGJ1ZmZlclNpemUsIHN0YXJ0QnVmZmVyRXZlcnkpIHsKICBpZiAoc3RhcnRCdWZmZXJFdmVyeSA9PT0gdm9pZCAwKSB7CiAgICBzdGFydEJ1ZmZlckV2ZXJ5ID0gbnVsbDsKICB9CiAgc3RhcnRCdWZmZXJFdmVyeSA9IHN0YXJ0QnVmZmVyRXZlcnkgIT09IG51bGwgJiYgc3RhcnRCdWZmZXJFdmVyeSAhPT0gdm9pZCAwID8gc3RhcnRCdWZmZXJFdmVyeSA6IGJ1ZmZlclNpemU7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgYnVmZmVycyA9IFtdOwogICAgdmFyIGNvdW50MiA9IDA7CiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdmFyIGVfMSwgX2ExNiwgZV8yLCBfYjsKICAgICAgdmFyIHRvRW1pdCA9IG51bGw7CiAgICAgIGlmIChjb3VudDIrKyAlIHN0YXJ0QnVmZmVyRXZlcnkgPT09IDApIHsKICAgICAgICBidWZmZXJzLnB1c2goW10pOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICh2YXIgYnVmZmVyc18xID0gX192YWx1ZXMoYnVmZmVycyksIGJ1ZmZlcnNfMV8xID0gYnVmZmVyc18xLm5leHQoKTsgIWJ1ZmZlcnNfMV8xLmRvbmU7IGJ1ZmZlcnNfMV8xID0gYnVmZmVyc18xLm5leHQoKSkgewogICAgICAgICAgdmFyIGJ1ZmZlcjIgPSBidWZmZXJzXzFfMS52YWx1ZTsKICAgICAgICAgIGJ1ZmZlcjIucHVzaCh2YWx1ZTIpOwogICAgICAgICAgaWYgKGJ1ZmZlclNpemUgPD0gYnVmZmVyMi5sZW5ndGgpIHsKICAgICAgICAgICAgdG9FbWl0ID0gdG9FbWl0ICE9PSBudWxsICYmIHRvRW1pdCAhPT0gdm9pZCAwID8gdG9FbWl0IDogW107CiAgICAgICAgICAgIHRvRW1pdC5wdXNoKGJ1ZmZlcjIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZV8xXzEpIHsKICAgICAgICBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OwogICAgICB9IGZpbmFsbHkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBpZiAoYnVmZmVyc18xXzEgJiYgIWJ1ZmZlcnNfMV8xLmRvbmUgJiYgKF9hMTYgPSBidWZmZXJzXzEucmV0dXJuKSkgX2ExNi5jYWxsKGJ1ZmZlcnNfMSk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRvRW1pdCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBmb3IgKHZhciB0b0VtaXRfMSA9IF9fdmFsdWVzKHRvRW1pdCksIHRvRW1pdF8xXzEgPSB0b0VtaXRfMS5uZXh0KCk7ICF0b0VtaXRfMV8xLmRvbmU7IHRvRW1pdF8xXzEgPSB0b0VtaXRfMS5uZXh0KCkpIHsKICAgICAgICAgICAgdmFyIGJ1ZmZlcjIgPSB0b0VtaXRfMV8xLnZhbHVlOwogICAgICAgICAgICBhcnJSZW1vdmUoYnVmZmVycywgYnVmZmVyMik7CiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChidWZmZXIyKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlXzJfMSkgewogICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKHRvRW1pdF8xXzEgJiYgIXRvRW1pdF8xXzEuZG9uZSAmJiAoX2IgPSB0b0VtaXRfMS5yZXR1cm4pKSBfYi5jYWxsKHRvRW1pdF8xKTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICB2YXIgZV8zLCBfYTE2OwogICAgICB0cnkgewogICAgICAgIGZvciAodmFyIGJ1ZmZlcnNfMiA9IF9fdmFsdWVzKGJ1ZmZlcnMpLCBidWZmZXJzXzJfMSA9IGJ1ZmZlcnNfMi5uZXh0KCk7ICFidWZmZXJzXzJfMS5kb25lOyBidWZmZXJzXzJfMSA9IGJ1ZmZlcnNfMi5uZXh0KCkpIHsKICAgICAgICAgIHZhciBidWZmZXIyID0gYnVmZmVyc18yXzEudmFsdWU7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYnVmZmVyMik7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlXzNfMSkgewogICAgICAgIGVfMyA9IHsgZXJyb3I6IGVfM18xIH07CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGlmIChidWZmZXJzXzJfMSAmJiAhYnVmZmVyc18yXzEuZG9uZSAmJiAoX2ExNiA9IGJ1ZmZlcnNfMi5yZXR1cm4pKSBfYTE2LmNhbGwoYnVmZmVyc18yKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgaWYgKGVfMykgdGhyb3cgZV8zLmVycm9yOwogICAgICAgIH0KICAgICAgfQogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBidWZmZXJzID0gbnVsbDsKICAgIH0pKTsKICB9KTsKfQp2YXIgaW5pdF9idWZmZXJDb3VudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJDb3VudC5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUaW1lLmpzCmZ1bmN0aW9uIGJ1ZmZlclRpbWUoYnVmZmVyVGltZVNwYW4pIHsKICB2YXIgX2ExNiwgX2I7CiAgdmFyIG90aGVyQXJncyA9IFtdOwogIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICBvdGhlckFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07CiAgfQogIHZhciBzY2hlZHVsZXIgPSAoX2ExNiA9IHBvcFNjaGVkdWxlcihvdGhlckFyZ3MpKSAhPT0gbnVsbCAmJiBfYTE2ICE9PSB2b2lkIDAgPyBfYTE2IDogYXN5bmNTY2hlZHVsZXI7CiAgdmFyIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgPSAoX2IgPSBvdGhlckFyZ3NbMF0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG51bGw7CiAgdmFyIG1heEJ1ZmZlclNpemUgPSBvdGhlckFyZ3NbMV0gfHwgSW5maW5pdHk7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgYnVmZmVyUmVjb3JkcyA9IFtdOwogICAgdmFyIHJlc3RhcnRPbkVtaXQgPSBmYWxzZTsKICAgIHZhciBlbWl0ID0gZnVuY3Rpb24ocmVjb3JkKSB7CiAgICAgIHZhciBidWZmZXIyID0gcmVjb3JkLmJ1ZmZlciwgc3VicyA9IHJlY29yZC5zdWJzOwogICAgICBzdWJzLnVuc3Vic2NyaWJlKCk7CiAgICAgIGFyclJlbW92ZShidWZmZXJSZWNvcmRzLCByZWNvcmQpOwogICAgICBzdWJzY3JpYmVyLm5leHQoYnVmZmVyMik7CiAgICAgIHJlc3RhcnRPbkVtaXQgJiYgc3RhcnRCdWZmZXIoKTsKICAgIH07CiAgICB2YXIgc3RhcnRCdWZmZXIgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKGJ1ZmZlclJlY29yZHMpIHsKICAgICAgICB2YXIgc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTsKICAgICAgICBzdWJzY3JpYmVyLmFkZChzdWJzKTsKICAgICAgICB2YXIgYnVmZmVyMiA9IFtdOwogICAgICAgIHZhciByZWNvcmRfMSA9IHsKICAgICAgICAgIGJ1ZmZlcjogYnVmZmVyMiwKICAgICAgICAgIHN1YnMKICAgICAgICB9OwogICAgICAgIGJ1ZmZlclJlY29yZHMucHVzaChyZWNvcmRfMSk7CiAgICAgICAgZXhlY3V0ZVNjaGVkdWxlKHN1YnMsIHNjaGVkdWxlciwgZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gZW1pdChyZWNvcmRfMSk7CiAgICAgICAgfSwgYnVmZmVyVGltZVNwYW4pOwogICAgICB9CiAgICB9OwogICAgaWYgKGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgIT09IG51bGwgJiYgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCA+PSAwKSB7CiAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIHN0YXJ0QnVmZmVyLCBidWZmZXJDcmVhdGlvbkludGVydmFsLCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3RhcnRPbkVtaXQgPSB0cnVlOwogICAgfQogICAgc3RhcnRCdWZmZXIoKTsKICAgIHZhciBidWZmZXJUaW1lU3Vic2NyaWJlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdmFyIGVfMSwgX2ExNzsKICAgICAgdmFyIHJlY29yZHNDb3B5ID0gYnVmZmVyUmVjb3Jkcy5zbGljZSgpOwogICAgICB0cnkgewogICAgICAgIGZvciAodmFyIHJlY29yZHNDb3B5XzEgPSBfX3ZhbHVlcyhyZWNvcmRzQ29weSksIHJlY29yZHNDb3B5XzFfMSA9IHJlY29yZHNDb3B5XzEubmV4dCgpOyAhcmVjb3Jkc0NvcHlfMV8xLmRvbmU7IHJlY29yZHNDb3B5XzFfMSA9IHJlY29yZHNDb3B5XzEubmV4dCgpKSB7CiAgICAgICAgICB2YXIgcmVjb3JkID0gcmVjb3Jkc0NvcHlfMV8xLnZhbHVlOwogICAgICAgICAgdmFyIGJ1ZmZlcjIgPSByZWNvcmQuYnVmZmVyOwogICAgICAgICAgYnVmZmVyMi5wdXNoKHZhbHVlMik7CiAgICAgICAgICBtYXhCdWZmZXJTaXplIDw9IGJ1ZmZlcjIubGVuZ3RoICYmIGVtaXQocmVjb3JkKTsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgICAgZV8xID0geyBlcnJvcjogZV8xXzEgfTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICB0cnkgewogICAgICAgICAgaWYgKHJlY29yZHNDb3B5XzFfMSAmJiAhcmVjb3Jkc0NvcHlfMV8xLmRvbmUgJiYgKF9hMTcgPSByZWNvcmRzQ29weV8xLnJldHVybikpIF9hMTcuY2FsbChyZWNvcmRzQ29weV8xKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOwogICAgICAgIH0KICAgICAgfQogICAgfSwgZnVuY3Rpb24oKSB7CiAgICAgIHdoaWxlIChidWZmZXJSZWNvcmRzID09PSBudWxsIHx8IGJ1ZmZlclJlY29yZHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJ1ZmZlclJlY29yZHMubGVuZ3RoKSB7CiAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlclJlY29yZHMuc2hpZnQoKS5idWZmZXIpOwogICAgICB9CiAgICAgIGJ1ZmZlclRpbWVTdWJzY3JpYmVyID09PSBudWxsIHx8IGJ1ZmZlclRpbWVTdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBidWZmZXJUaW1lU3Vic2NyaWJlci51bnN1YnNjcmliZSgpOwogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgIH0sIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBidWZmZXJSZWNvcmRzID0gbnVsbDsKICAgIH0pOwogICAgc291cmNlLnN1YnNjcmliZShidWZmZXJUaW1lU3Vic2NyaWJlcik7CiAgfSk7Cn0KdmFyIGluaXRfYnVmZmVyVGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUaW1lLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICAgIGluaXRfYXN5bmMoKTsKICAgIGluaXRfYXJncygpOwogICAgaW5pdF9leGVjdXRlU2NoZWR1bGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUb2dnbGUuanMKdmFyIGluaXRfYnVmZmVyVG9nZ2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlclRvZ2dsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyV2hlbi5qcwp2YXIgaW5pdF9idWZmZXJXaGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlcldoZW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NhdGNoRXJyb3IuanMKdmFyIGluaXRfY2F0Y2hFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jYXRjaEVycm9yLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9yZWR1Y2UuanMKdmFyIGluaXRfcmVkdWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JlZHVjZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdG9BcnJheS5qcwp2YXIgaW5pdF90b0FycmF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RvQXJyYXkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVMYXRlc3RBbGwuanMKdmFyIGluaXRfY29tYmluZUxhdGVzdEFsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0QWxsLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lQWxsLmpzCnZhciBpbml0X2NvbWJpbmVBbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUxhdGVzdC5qcwp2YXIgaW5pdF9jb21iaW5lTGF0ZXN0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0V2l0aC5qcwp2YXIgaW5pdF9jb21iaW5lTGF0ZXN0V2l0aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0V2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0TWFwLmpzCnZhciBpbml0X2NvbmNhdE1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRNYXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdE1hcFRvLmpzCnZhciBpbml0X2NvbmNhdE1hcFRvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdE1hcFRvLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXQuanMKdmFyIGluaXRfY29uY2F0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdFdpdGguanMKdmFyIGluaXRfY29uY2F0V2l0aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRXaXRoLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25uZWN0LmpzCnZhciBpbml0X2Nvbm5lY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29ubmVjdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY291bnQuanMKdmFyIGluaXRfY291bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY291bnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlLmpzCmZ1bmN0aW9uIGRlYm91bmNlKGR1cmF0aW9uU2VsZWN0b3IpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlOwogICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7CiAgICB2YXIgZHVyYXRpb25TdWJzY3JpYmVyID0gbnVsbDsKICAgIHZhciBlbWl0ID0gZnVuY3Rpb24oKSB7CiAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9PT0gbnVsbCB8fCBkdXJhdGlvblN1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGR1cmF0aW9uU3Vic2NyaWJlci51bnN1YnNjcmliZSgpOwogICAgICBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsOwogICAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlOwogICAgICAgIHZhciB2YWx1ZTIgPSBsYXN0VmFsdWU7CiAgICAgICAgbGFzdFZhbHVlID0gbnVsbDsKICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgfQogICAgfTsKICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uKHZhbHVlMikgewogICAgICBkdXJhdGlvblN1YnNjcmliZXIgPT09IG51bGwgfHwgZHVyYXRpb25TdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkdXJhdGlvblN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgICAgaGFzVmFsdWUgPSB0cnVlOwogICAgICBsYXN0VmFsdWUgPSB2YWx1ZTI7CiAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBlbWl0LCBub29wKTsKICAgICAgaW5uZXJGcm9tKGR1cmF0aW9uU2VsZWN0b3IodmFsdWUyKSkuc3Vic2NyaWJlKGR1cmF0aW9uU3Vic2NyaWJlcik7CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgZW1pdCgpOwogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBsYXN0VmFsdWUgPSBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsOwogICAgfSkpOwogIH0pOwp9CnZhciBpbml0X2RlYm91bmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlLmpzIigpIHsKICAgIGluaXRfbGlmdCgpOwogICAgaW5pdF9ub29wKCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9pbm5lckZyb20oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWJvdW5jZVRpbWUuanMKZnVuY3Rpb24gZGVib3VuY2VUaW1lKGR1ZVRpbWUsIHNjaGVkdWxlcikgewogIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgewogICAgc2NoZWR1bGVyID0gYXN5bmNTY2hlZHVsZXI7CiAgfQogIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uKHNvdXJjZSwgc3Vic2NyaWJlcikgewogICAgdmFyIGFjdGl2ZVRhc2sgPSBudWxsOwogICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7CiAgICB2YXIgbGFzdFRpbWUgPSBudWxsOwogICAgdmFyIGVtaXQgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKGFjdGl2ZVRhc2spIHsKICAgICAgICBhY3RpdmVUYXNrLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgYWN0aXZlVGFzayA9IG51bGw7CiAgICAgICAgdmFyIHZhbHVlMiA9IGxhc3RWYWx1ZTsKICAgICAgICBsYXN0VmFsdWUgPSBudWxsOwogICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZTIpOwogICAgICB9CiAgICB9OwogICAgZnVuY3Rpb24gZW1pdFdoZW5JZGxlKCkgewogICAgICB2YXIgdGFyZ2V0VGltZSA9IGxhc3RUaW1lICsgZHVlVGltZTsKICAgICAgdmFyIG5vdzIgPSBzY2hlZHVsZXIubm93KCk7CiAgICAgIGlmIChub3cyIDwgdGFyZ2V0VGltZSkgewogICAgICAgIGFjdGl2ZVRhc2sgPSB0aGlzLnNjaGVkdWxlKHZvaWQgMCwgdGFyZ2V0VGltZSAtIG5vdzIpOwogICAgICAgIHN1YnNjcmliZXIuYWRkKGFjdGl2ZVRhc2spOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBlbWl0KCk7CiAgICB9CiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgbGFzdFZhbHVlID0gdmFsdWUyOwogICAgICBsYXN0VGltZSA9IHNjaGVkdWxlci5ub3coKTsKICAgICAgaWYgKCFhY3RpdmVUYXNrKSB7CiAgICAgICAgYWN0aXZlVGFzayA9IHNjaGVkdWxlci5zY2hlZHVsZShlbWl0V2hlbklkbGUsIGR1ZVRpbWUpOwogICAgICAgIHN1YnNjcmliZXIuYWRkKGFjdGl2ZVRhc2spOwogICAgICB9CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgZW1pdCgpOwogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBsYXN0VmFsdWUgPSBhY3RpdmVUYXNrID0gbnVsbDsKICAgIH0pKTsKICB9KTsKfQp2YXIgaW5pdF9kZWJvdW5jZVRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVib3VuY2VUaW1lLmpzIigpIHsKICAgIGluaXRfYXN5bmMoKTsKICAgIGluaXRfbGlmdCgpOwogICAgaW5pdF9PcGVyYXRvclN1YnNjcmliZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eS5qcwp2YXIgaW5pdF9kZWZhdWx0SWZFbXB0eSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZS5qcwp2YXIgaW5pdF90YWtlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2lnbm9yZUVsZW1lbnRzLmpzCnZhciBpbml0X2lnbm9yZUVsZW1lbnRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2lnbm9yZUVsZW1lbnRzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXBUby5qcwp2YXIgaW5pdF9tYXBUbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXBUby5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVsYXlXaGVuLmpzCnZhciBpbml0X2RlbGF5V2hlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWxheVdoZW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlbGF5LmpzCnZhciBpbml0X2RlbGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlbGF5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZW1hdGVyaWFsaXplLmpzCnZhciBpbml0X2RlbWF0ZXJpYWxpemUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVtYXRlcmlhbGl6ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3QuanMKdmFyIGluaXRfZGlzdGluY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxDaGFuZ2VkLmpzCnZhciBpbml0X2Rpc3RpbmN0VW50aWxDaGFuZ2VkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxDaGFuZ2VkLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC5qcwp2YXIgaW5pdF9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3dJZkVtcHR5LmpzCnZhciBpbml0X3Rocm93SWZFbXB0eSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aHJvd0lmRW1wdHkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2VsZW1lbnRBdC5qcwp2YXIgaW5pdF9lbGVtZW50QXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZWxlbWVudEF0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9lbmRXaXRoLmpzCnZhciBpbml0X2VuZFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZW5kV2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXZlcnkuanMKdmFyIGluaXRfZXZlcnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXZlcnkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3RNYXAuanMKdmFyIGluaXRfZXhoYXVzdE1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0TWFwLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0QWxsLmpzCnZhciBpbml0X2V4aGF1c3RBbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdEFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdC5qcwp2YXIgaW5pdF9leGhhdXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V4cGFuZC5qcwp2YXIgaW5pdF9leHBhbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhwYW5kLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maW5hbGl6ZS5qcwp2YXIgaW5pdF9maW5hbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maW5hbGl6ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZC5qcwp2YXIgaW5pdF9maW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmRJbmRleC5qcwp2YXIgaW5pdF9maW5kSW5kZXggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZEluZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maXJzdC5qcwp2YXIgaW5pdF9maXJzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maXJzdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZ3JvdXBCeS5qcwp2YXIgaW5pdF9ncm91cEJ5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2dyb3VwQnkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2lzRW1wdHkuanMKdmFyIGluaXRfaXNFbXB0eSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9pc0VtcHR5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlTGFzdC5qcwp2YXIgaW5pdF90YWtlTGFzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlTGFzdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbGFzdC5qcwp2YXIgaW5pdF9sYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2xhc3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hdGVyaWFsaXplLmpzCnZhciBpbml0X21hdGVyaWFsaXplID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hdGVyaWFsaXplLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXguanMKdmFyIGluaXRfbWF4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21heC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmxhdE1hcC5qcwp2YXIgaW5pdF9mbGF0TWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZsYXRNYXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwVG8uanMKdmFyIGluaXRfbWVyZ2VNYXBUbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcFRvLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVNjYW4uanMKdmFyIGluaXRfbWVyZ2VTY2FuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlU2Nhbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2UuanMKdmFyIGluaXRfbWVyZ2UyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVdpdGguanMKdmFyIGluaXRfbWVyZ2VXaXRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlV2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWluLmpzCnZhciBpbml0X21pbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9taW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL211bHRpY2FzdC5qcwp2YXIgaW5pdF9tdWx0aWNhc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbXVsdGljYXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9vbkVycm9yUmVzdW1lTmV4dFdpdGguanMKdmFyIGluaXRfb25FcnJvclJlc3VtZU5leHRXaXRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29uRXJyb3JSZXN1bWVOZXh0V2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcGFpcndpc2UuanMKdmFyIGluaXRfcGFpcndpc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcGFpcndpc2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3BsdWNrLmpzCnZhciBpbml0X3BsdWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3BsdWNrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoLmpzCnZhciBpbml0X3B1Ymxpc2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaEJlaGF2aW9yLmpzCnZhciBpbml0X3B1Ymxpc2hCZWhhdmlvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoQmVoYXZpb3IuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hMYXN0LmpzCnZhciBpbml0X3B1Ymxpc2hMYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hMYXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoUmVwbGF5LmpzCnZhciBpbml0X3B1Ymxpc2hSZXBsYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaFJlcGxheS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZVdpdGguanMKdmFyIGluaXRfcmFjZVdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZVdpdGguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JlcGVhdC5qcwp2YXIgaW5pdF9yZXBlYXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVwZWF0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXRXaGVuLmpzCnZhciBpbml0X3JlcGVhdFdoZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVwZWF0V2hlbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnkuanMKdmFyIGluaXRfcmV0cnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JldHJ5V2hlbi5qcwp2YXIgaW5pdF9yZXRyeVdoZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnlXaGVuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zYW1wbGUuanMKdmFyIGluaXRfc2FtcGxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NhbXBsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2FtcGxlVGltZS5qcwp2YXIgaW5pdF9zYW1wbGVUaW1lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NhbXBsZVRpbWUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NjYW4uanMKdmFyIGluaXRfc2NhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zY2FuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zZXF1ZW5jZUVxdWFsLmpzCnZhciBpbml0X3NlcXVlbmNlRXF1YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2VxdWVuY2VFcXVhbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2hhcmUuanMKdmFyIGluaXRfc2hhcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2hhcmUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlUmVwbGF5LmpzCnZhciBpbml0X3NoYXJlUmVwbGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlUmVwbGF5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zaW5nbGUuanMKdmFyIGluaXRfc2luZ2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NpbmdsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcC5qcwp2YXIgaW5pdF9za2lwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBMYXN0LmpzCnZhciBpbml0X3NraXBMYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBMYXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9za2lwVW50aWwuanMKdmFyIGluaXRfc2tpcFVudGlsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBVbnRpbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcFdoaWxlLmpzCnZhciBpbml0X3NraXBXaGlsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9za2lwV2hpbGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N0YXJ0V2l0aC5qcwpmdW5jdGlvbiBzdGFydFdpdGgoKSB7CiAgdmFyIHZhbHVlcyA9IFtdOwogIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICB2YWx1ZXNbX2ldID0gYXJndW1lbnRzW19pXTsKICB9CiAgdmFyIHNjaGVkdWxlciA9IHBvcFNjaGVkdWxlcih2YWx1ZXMpOwogIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uKHNvdXJjZSwgc3Vic2NyaWJlcikgewogICAgKHNjaGVkdWxlciA/IGNvbmNhdCh2YWx1ZXMsIHNvdXJjZSwgc2NoZWR1bGVyKSA6IGNvbmNhdCh2YWx1ZXMsIHNvdXJjZSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICB9KTsKfQp2YXIgaW5pdF9zdGFydFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3RhcnRXaXRoLmpzIigpIHsKICAgIGluaXRfY29uY2F0KCk7CiAgICBpbml0X2FyZ3MoKTsKICAgIGluaXRfbGlmdCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaE1hcC5qcwp2YXIgaW5pdF9zd2l0Y2hNYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hBbGwuanMKdmFyIGluaXRfc3dpdGNoQWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaEFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwVG8uanMKdmFyIGluaXRfc3dpdGNoTWFwVG8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwVG8uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaFNjYW4uanMKdmFyIGluaXRfc3dpdGNoU2NhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hTY2FuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlVW50aWwuanMKZnVuY3Rpb24gdGFrZVVudGlsKG5vdGlmaWVyKSB7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICBpbm5lckZyb20obm90aWZpZXIpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCBub29wKSk7CiAgICAhc3Vic2NyaWJlci5jbG9zZWQgJiYgc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICB9KTsKfQp2YXIgaW5pdF90YWtlVW50aWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZVVudGlsLmpzIigpIHsKICAgIGluaXRfbGlmdCgpOwogICAgaW5pdF9PcGVyYXRvclN1YnNjcmliZXIoKTsKICAgIGluaXRfaW5uZXJGcm9tKCk7CiAgICBpbml0X25vb3AoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlV2hpbGUuanMKdmFyIGluaXRfdGFrZVdoaWxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2VXaGlsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFwLmpzCnZhciBpbml0X3RhcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlLmpzCmZ1bmN0aW9uIHRocm90dGxlKGR1cmF0aW9uU2VsZWN0b3IsIGNvbmZpZzMpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBfYTE2ID0gY29uZmlnMyAhPT0gbnVsbCAmJiBjb25maWczICE9PSB2b2lkIDAgPyBjb25maWczIDoge30sIF9iID0gX2ExNi5sZWFkaW5nLCBsZWFkaW5nID0gX2IgPT09IHZvaWQgMCA/IHRydWUgOiBfYiwgX2MgPSBfYTE2LnRyYWlsaW5nLCB0cmFpbGluZyA9IF9jID09PSB2b2lkIDAgPyBmYWxzZSA6IF9jOwogICAgdmFyIGhhc1ZhbHVlID0gZmFsc2U7CiAgICB2YXIgc2VuZFZhbHVlID0gbnVsbDsKICAgIHZhciB0aHJvdHRsZWQgPSBudWxsOwogICAgdmFyIGlzQ29tcGxldGUgPSBmYWxzZTsKICAgIHZhciBlbmRUaHJvdHRsaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgIHRocm90dGxlZCA9PT0gbnVsbCB8fCB0aHJvdHRsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRocm90dGxlZC51bnN1YnNjcmliZSgpOwogICAgICB0aHJvdHRsZWQgPSBudWxsOwogICAgICBpZiAodHJhaWxpbmcpIHsKICAgICAgICBzZW5kKCk7CiAgICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgY2xlYW51cFRocm90dGxpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgdGhyb3R0bGVkID0gbnVsbDsKICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9OwogICAgdmFyIHN0YXJ0VGhyb3R0bGUgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgcmV0dXJuIHRocm90dGxlZCA9IGlubmVyRnJvbShkdXJhdGlvblNlbGVjdG9yKHZhbHVlMikpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZW5kVGhyb3R0bGluZywgY2xlYW51cFRocm90dGxpbmcpKTsKICAgIH07CiAgICB2YXIgc2VuZCA9IGZ1bmN0aW9uKCkgewogICAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlOwogICAgICAgIHZhciB2YWx1ZTIgPSBzZW5kVmFsdWU7CiAgICAgICAgc2VuZFZhbHVlID0gbnVsbDsKICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICAhaXNDb21wbGV0ZSAmJiBzdGFydFRocm90dGxlKHZhbHVlMik7CiAgICAgIH0KICAgIH07CiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgaGFzVmFsdWUgPSB0cnVlOwogICAgICBzZW5kVmFsdWUgPSB2YWx1ZTI7CiAgICAgICEodGhyb3R0bGVkICYmICF0aHJvdHRsZWQuY2xvc2VkKSAmJiAobGVhZGluZyA/IHNlbmQoKSA6IHN0YXJ0VGhyb3R0bGUodmFsdWUyKSk7CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgaXNDb21wbGV0ZSA9IHRydWU7CiAgICAgICEodHJhaWxpbmcgJiYgaGFzVmFsdWUgJiYgdGhyb3R0bGVkICYmICF0aHJvdHRsZWQuY2xvc2VkKSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9KSk7CiAgfSk7Cn0KdmFyIGluaXRfdGhyb3R0bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3R0bGUuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9pbm5lckZyb20oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aHJvdHRsZVRpbWUuanMKZnVuY3Rpb24gdGhyb3R0bGVUaW1lKGR1cmF0aW9uLCBzY2hlZHVsZXIsIGNvbmZpZzMpIHsKICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsKICAgIHNjaGVkdWxlciA9IGFzeW5jU2NoZWR1bGVyOwogIH0KICB2YXIgZHVyYXRpb24kID0gdGltZXIoZHVyYXRpb24sIHNjaGVkdWxlcik7CiAgcmV0dXJuIHRocm90dGxlKGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGR1cmF0aW9uJDsKICB9LCBjb25maWczKTsKfQp2YXIgaW5pdF90aHJvdHRsZVRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3R0bGVUaW1lLmpzIigpIHsKICAgIGluaXRfYXN5bmMoKTsKICAgIGluaXRfdGhyb3R0bGUoKTsKICAgIGluaXRfdGltZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aW1lSW50ZXJ2YWwuanMKdmFyIGluaXRfdGltZUludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVJbnRlcnZhbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFdpdGguanMKdmFyIGluaXRfdGltZW91dFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFdpdGguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVzdGFtcC5qcwp2YXIgaW5pdF90aW1lc3RhbXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZXN0YW1wLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3cuanMKdmFyIGluaXRfd2luZG93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvdy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93Q291bnQuanMKdmFyIGluaXRfd2luZG93Q291bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93Q291bnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RpbWUuanMKdmFyIGluaXRfd2luZG93VGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUaW1lLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUb2dnbGUuanMKdmFyIGluaXRfd2luZG93VG9nZ2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RvZ2dsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93V2hlbi5qcwp2YXIgaW5pdF93aW5kb3dXaGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1doZW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpdGhMYXRlc3RGcm9tLmpzCnZhciBpbml0X3dpdGhMYXRlc3RGcm9tID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpdGhMYXRlc3RGcm9tLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy96aXBBbGwuanMKdmFyIGluaXRfemlwQWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3ppcEFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvemlwLmpzCnZhciBpbml0X3ppcDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvemlwLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy96aXBXaXRoLmpzCnZhciBpbml0X3ppcFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvemlwV2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbmRleC5qcwp2YXIgaW5pdF9lc201ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW5kZXguanMiKCkgewogICAgaW5pdF9PYnNlcnZhYmxlKCk7CiAgICBpbml0X0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9vYnNlcnZhYmxlKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lcygpOwogICAgaW5pdF9TdWJqZWN0KCk7CiAgICBpbml0X0JlaGF2aW9yU3ViamVjdCgpOwogICAgaW5pdF9SZXBsYXlTdWJqZWN0KCk7CiAgICBpbml0X0FzeW5jU3ViamVjdCgpOwogICAgaW5pdF9hc2FwKCk7CiAgICBpbml0X2FzeW5jKCk7CiAgICBpbml0X3F1ZXVlKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lKCk7CiAgICBpbml0X1ZpcnR1YWxUaW1lU2NoZWR1bGVyKCk7CiAgICBpbml0X1NjaGVkdWxlcigpOwogICAgaW5pdF9TdWJzY3JpcHRpb24oKTsKICAgIGluaXRfU3Vic2NyaWJlcigpOwogICAgaW5pdF9Ob3RpZmljYXRpb24oKTsKICAgIGluaXRfcGlwZSgpOwogICAgaW5pdF9ub29wKCk7CiAgICBpbml0X2lkZW50aXR5KCk7CiAgICBpbml0X2lzT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9sYXN0VmFsdWVGcm9tKCk7CiAgICBpbml0X2ZpcnN0VmFsdWVGcm9tKCk7CiAgICBpbml0X0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yKCk7CiAgICBpbml0X0VtcHR5RXJyb3IoKTsKICAgIGluaXRfTm90Rm91bmRFcnJvcigpOwogICAgaW5pdF9PYmplY3RVbnN1YnNjcmliZWRFcnJvcigpOwogICAgaW5pdF9TZXF1ZW5jZUVycm9yKCk7CiAgICBpbml0X3RpbWVvdXQoKTsKICAgIGluaXRfVW5zdWJzY3JpcHRpb25FcnJvcigpOwogICAgaW5pdF9iaW5kQ2FsbGJhY2soKTsKICAgIGluaXRfYmluZE5vZGVDYWxsYmFjaygpOwogICAgaW5pdF9jb21iaW5lTGF0ZXN0KCk7CiAgICBpbml0X2NvbmNhdCgpOwogICAgaW5pdF9jb25uZWN0YWJsZSgpOwogICAgaW5pdF9kZWZlcigpOwogICAgaW5pdF9lbXB0eSgpOwogICAgaW5pdF9mb3JrSm9pbigpOwogICAgaW5pdF9mcm9tKCk7CiAgICBpbml0X2Zyb21FdmVudCgpOwogICAgaW5pdF9mcm9tRXZlbnRQYXR0ZXJuKCk7CiAgICBpbml0X2dlbmVyYXRlKCk7CiAgICBpbml0X2lpZigpOwogICAgaW5pdF9pbnRlcnZhbCgpOwogICAgaW5pdF9tZXJnZSgpOwogICAgaW5pdF9uZXZlcigpOwogICAgaW5pdF9vZigpOwogICAgaW5pdF9vbkVycm9yUmVzdW1lTmV4dCgpOwogICAgaW5pdF9wYWlycygpOwogICAgaW5pdF9wYXJ0aXRpb24oKTsKICAgIGluaXRfcmFjZSgpOwogICAgaW5pdF9yYW5nZSgpOwogICAgaW5pdF90aHJvd0Vycm9yKCk7CiAgICBpbml0X3RpbWVyKCk7CiAgICBpbml0X3VzaW5nKCk7CiAgICBpbml0X3ppcCgpOwogICAgaW5pdF9zY2hlZHVsZWQoKTsKICAgIGluaXRfZW1wdHkoKTsKICAgIGluaXRfbmV2ZXIoKTsKICAgIGluaXRfdHlwZXMoKTsKICAgIGluaXRfY29uZmlnKCk7CiAgICBpbml0X2F1ZGl0KCk7CiAgICBpbml0X2F1ZGl0VGltZSgpOwogICAgaW5pdF9idWZmZXIoKTsKICAgIGluaXRfYnVmZmVyQ291bnQoKTsKICAgIGluaXRfYnVmZmVyVGltZSgpOwogICAgaW5pdF9idWZmZXJUb2dnbGUoKTsKICAgIGluaXRfYnVmZmVyV2hlbigpOwogICAgaW5pdF9jYXRjaEVycm9yKCk7CiAgICBpbml0X2NvbWJpbmVBbGwoKTsKICAgIGluaXRfY29tYmluZUxhdGVzdEFsbCgpOwogICAgaW5pdF9jb21iaW5lTGF0ZXN0V2l0aCgpOwogICAgaW5pdF9jb25jYXRBbGwoKTsKICAgIGluaXRfY29uY2F0TWFwKCk7CiAgICBpbml0X2NvbmNhdE1hcFRvKCk7CiAgICBpbml0X2NvbmNhdFdpdGgoKTsKICAgIGluaXRfY29ubmVjdCgpOwogICAgaW5pdF9jb3VudCgpOwogICAgaW5pdF9kZWJvdW5jZSgpOwogICAgaW5pdF9kZWJvdW5jZVRpbWUoKTsKICAgIGluaXRfZGVmYXVsdElmRW1wdHkoKTsKICAgIGluaXRfZGVsYXkoKTsKICAgIGluaXRfZGVsYXlXaGVuKCk7CiAgICBpbml0X2RlbWF0ZXJpYWxpemUoKTsKICAgIGluaXRfZGlzdGluY3QoKTsKICAgIGluaXRfZGlzdGluY3RVbnRpbENoYW5nZWQoKTsKICAgIGluaXRfZGlzdGluY3RVbnRpbEtleUNoYW5nZWQoKTsKICAgIGluaXRfZWxlbWVudEF0KCk7CiAgICBpbml0X2VuZFdpdGgoKTsKICAgIGluaXRfZXZlcnkoKTsKICAgIGluaXRfZXhoYXVzdCgpOwogICAgaW5pdF9leGhhdXN0QWxsKCk7CiAgICBpbml0X2V4aGF1c3RNYXAoKTsKICAgIGluaXRfZXhwYW5kKCk7CiAgICBpbml0X2ZpbHRlcigpOwogICAgaW5pdF9maW5hbGl6ZSgpOwogICAgaW5pdF9maW5kKCk7CiAgICBpbml0X2ZpbmRJbmRleCgpOwogICAgaW5pdF9maXJzdCgpOwogICAgaW5pdF9ncm91cEJ5KCk7CiAgICBpbml0X2lnbm9yZUVsZW1lbnRzKCk7CiAgICBpbml0X2lzRW1wdHkoKTsKICAgIGluaXRfbGFzdCgpOwogICAgaW5pdF9tYXAoKTsKICAgIGluaXRfbWFwVG8oKTsKICAgIGluaXRfbWF0ZXJpYWxpemUoKTsKICAgIGluaXRfbWF4KCk7CiAgICBpbml0X21lcmdlQWxsKCk7CiAgICBpbml0X2ZsYXRNYXAoKTsKICAgIGluaXRfbWVyZ2VNYXAoKTsKICAgIGluaXRfbWVyZ2VNYXBUbygpOwogICAgaW5pdF9tZXJnZVNjYW4oKTsKICAgIGluaXRfbWVyZ2VXaXRoKCk7CiAgICBpbml0X21pbigpOwogICAgaW5pdF9tdWx0aWNhc3QoKTsKICAgIGluaXRfb2JzZXJ2ZU9uKCk7CiAgICBpbml0X29uRXJyb3JSZXN1bWVOZXh0V2l0aCgpOwogICAgaW5pdF9wYWlyd2lzZSgpOwogICAgaW5pdF9wbHVjaygpOwogICAgaW5pdF9wdWJsaXNoKCk7CiAgICBpbml0X3B1Ymxpc2hCZWhhdmlvcigpOwogICAgaW5pdF9wdWJsaXNoTGFzdCgpOwogICAgaW5pdF9wdWJsaXNoUmVwbGF5KCk7CiAgICBpbml0X3JhY2VXaXRoKCk7CiAgICBpbml0X3JlZHVjZSgpOwogICAgaW5pdF9yZXBlYXQoKTsKICAgIGluaXRfcmVwZWF0V2hlbigpOwogICAgaW5pdF9yZXRyeSgpOwogICAgaW5pdF9yZXRyeVdoZW4oKTsKICAgIGluaXRfcmVmQ291bnQoKTsKICAgIGluaXRfc2FtcGxlKCk7CiAgICBpbml0X3NhbXBsZVRpbWUoKTsKICAgIGluaXRfc2NhbigpOwogICAgaW5pdF9zZXF1ZW5jZUVxdWFsKCk7CiAgICBpbml0X3NoYXJlKCk7CiAgICBpbml0X3NoYXJlUmVwbGF5KCk7CiAgICBpbml0X3NpbmdsZSgpOwogICAgaW5pdF9za2lwKCk7CiAgICBpbml0X3NraXBMYXN0KCk7CiAgICBpbml0X3NraXBVbnRpbCgpOwogICAgaW5pdF9za2lwV2hpbGUoKTsKICAgIGluaXRfc3RhcnRXaXRoKCk7CiAgICBpbml0X3N1YnNjcmliZU9uKCk7CiAgICBpbml0X3N3aXRjaEFsbCgpOwogICAgaW5pdF9zd2l0Y2hNYXAoKTsKICAgIGluaXRfc3dpdGNoTWFwVG8oKTsKICAgIGluaXRfc3dpdGNoU2NhbigpOwogICAgaW5pdF90YWtlKCk7CiAgICBpbml0X3Rha2VMYXN0KCk7CiAgICBpbml0X3Rha2VVbnRpbCgpOwogICAgaW5pdF90YWtlV2hpbGUoKTsKICAgIGluaXRfdGFwKCk7CiAgICBpbml0X3Rocm90dGxlKCk7CiAgICBpbml0X3Rocm90dGxlVGltZSgpOwogICAgaW5pdF90aHJvd0lmRW1wdHkoKTsKICAgIGluaXRfdGltZUludGVydmFsKCk7CiAgICBpbml0X3RpbWVvdXQoKTsKICAgIGluaXRfdGltZW91dFdpdGgoKTsKICAgIGluaXRfdGltZXN0YW1wKCk7CiAgICBpbml0X3RvQXJyYXkoKTsKICAgIGluaXRfd2luZG93KCk7CiAgICBpbml0X3dpbmRvd0NvdW50KCk7CiAgICBpbml0X3dpbmRvd1RpbWUoKTsKICAgIGluaXRfd2luZG93VG9nZ2xlKCk7CiAgICBpbml0X3dpbmRvd1doZW4oKTsKICAgIGluaXRfd2l0aExhdGVzdEZyb20oKTsKICAgIGluaXRfemlwQWxsKCk7CiAgICBpbml0X3ppcFdpdGgoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wYXJ0aXRpb24uanMKdmFyIGluaXRfcGFydGl0aW9uMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wYXJ0aXRpb24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JhY2UuanMKdmFyIGluaXRfcmFjZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9vcGVyYXRvcnMvaW5kZXguanMKdmFyIGluaXRfb3BlcmF0b3JzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvb3BlcmF0b3JzL2luZGV4LmpzIigpIHsKICAgIGluaXRfYXVkaXQoKTsKICAgIGluaXRfYXVkaXRUaW1lKCk7CiAgICBpbml0X2J1ZmZlcigpOwogICAgaW5pdF9idWZmZXJDb3VudCgpOwogICAgaW5pdF9idWZmZXJUaW1lKCk7CiAgICBpbml0X2J1ZmZlclRvZ2dsZSgpOwogICAgaW5pdF9idWZmZXJXaGVuKCk7CiAgICBpbml0X2NhdGNoRXJyb3IoKTsKICAgIGluaXRfY29tYmluZUFsbCgpOwogICAgaW5pdF9jb21iaW5lTGF0ZXN0QWxsKCk7CiAgICBpbml0X2NvbWJpbmVMYXRlc3QyKCk7CiAgICBpbml0X2NvbWJpbmVMYXRlc3RXaXRoKCk7CiAgICBpbml0X2NvbmNhdDIoKTsKICAgIGluaXRfY29uY2F0QWxsKCk7CiAgICBpbml0X2NvbmNhdE1hcCgpOwogICAgaW5pdF9jb25jYXRNYXBUbygpOwogICAgaW5pdF9jb25jYXRXaXRoKCk7CiAgICBpbml0X2Nvbm5lY3QoKTsKICAgIGluaXRfY291bnQoKTsKICAgIGluaXRfZGVib3VuY2UoKTsKICAgIGluaXRfZGVib3VuY2VUaW1lKCk7CiAgICBpbml0X2RlZmF1bHRJZkVtcHR5KCk7CiAgICBpbml0X2RlbGF5KCk7CiAgICBpbml0X2RlbGF5V2hlbigpOwogICAgaW5pdF9kZW1hdGVyaWFsaXplKCk7CiAgICBpbml0X2Rpc3RpbmN0KCk7CiAgICBpbml0X2Rpc3RpbmN0VW50aWxDaGFuZ2VkKCk7CiAgICBpbml0X2Rpc3RpbmN0VW50aWxLZXlDaGFuZ2VkKCk7CiAgICBpbml0X2VsZW1lbnRBdCgpOwogICAgaW5pdF9lbmRXaXRoKCk7CiAgICBpbml0X2V2ZXJ5KCk7CiAgICBpbml0X2V4aGF1c3QoKTsKICAgIGluaXRfZXhoYXVzdEFsbCgpOwogICAgaW5pdF9leGhhdXN0TWFwKCk7CiAgICBpbml0X2V4cGFuZCgpOwogICAgaW5pdF9maWx0ZXIoKTsKICAgIGluaXRfZmluYWxpemUoKTsKICAgIGluaXRfZmluZCgpOwogICAgaW5pdF9maW5kSW5kZXgoKTsKICAgIGluaXRfZmlyc3QoKTsKICAgIGluaXRfZ3JvdXBCeSgpOwogICAgaW5pdF9pZ25vcmVFbGVtZW50cygpOwogICAgaW5pdF9pc0VtcHR5KCk7CiAgICBpbml0X2xhc3QoKTsKICAgIGluaXRfbWFwKCk7CiAgICBpbml0X21hcFRvKCk7CiAgICBpbml0X21hdGVyaWFsaXplKCk7CiAgICBpbml0X21heCgpOwogICAgaW5pdF9tZXJnZTIoKTsKICAgIGluaXRfbWVyZ2VBbGwoKTsKICAgIGluaXRfZmxhdE1hcCgpOwogICAgaW5pdF9tZXJnZU1hcCgpOwogICAgaW5pdF9tZXJnZU1hcFRvKCk7CiAgICBpbml0X21lcmdlU2NhbigpOwogICAgaW5pdF9tZXJnZVdpdGgoKTsKICAgIGluaXRfbWluKCk7CiAgICBpbml0X211bHRpY2FzdCgpOwogICAgaW5pdF9vYnNlcnZlT24oKTsKICAgIGluaXRfb25FcnJvclJlc3VtZU5leHRXaXRoKCk7CiAgICBpbml0X3BhaXJ3aXNlKCk7CiAgICBpbml0X3BhcnRpdGlvbjIoKTsKICAgIGluaXRfcGx1Y2soKTsKICAgIGluaXRfcHVibGlzaCgpOwogICAgaW5pdF9wdWJsaXNoQmVoYXZpb3IoKTsKICAgIGluaXRfcHVibGlzaExhc3QoKTsKICAgIGluaXRfcHVibGlzaFJlcGxheSgpOwogICAgaW5pdF9yYWNlMigpOwogICAgaW5pdF9yYWNlV2l0aCgpOwogICAgaW5pdF9yZWR1Y2UoKTsKICAgIGluaXRfcmVwZWF0KCk7CiAgICBpbml0X3JlcGVhdFdoZW4oKTsKICAgIGluaXRfcmV0cnkoKTsKICAgIGluaXRfcmV0cnlXaGVuKCk7CiAgICBpbml0X3JlZkNvdW50KCk7CiAgICBpbml0X3NhbXBsZSgpOwogICAgaW5pdF9zYW1wbGVUaW1lKCk7CiAgICBpbml0X3NjYW4oKTsKICAgIGluaXRfc2VxdWVuY2VFcXVhbCgpOwogICAgaW5pdF9zaGFyZSgpOwogICAgaW5pdF9zaGFyZVJlcGxheSgpOwogICAgaW5pdF9zaW5nbGUoKTsKICAgIGluaXRfc2tpcCgpOwogICAgaW5pdF9za2lwTGFzdCgpOwogICAgaW5pdF9za2lwVW50aWwoKTsKICAgIGluaXRfc2tpcFdoaWxlKCk7CiAgICBpbml0X3N0YXJ0V2l0aCgpOwogICAgaW5pdF9zdWJzY3JpYmVPbigpOwogICAgaW5pdF9zd2l0Y2hBbGwoKTsKICAgIGluaXRfc3dpdGNoTWFwKCk7CiAgICBpbml0X3N3aXRjaE1hcFRvKCk7CiAgICBpbml0X3N3aXRjaFNjYW4oKTsKICAgIGluaXRfdGFrZSgpOwogICAgaW5pdF90YWtlTGFzdCgpOwogICAgaW5pdF90YWtlVW50aWwoKTsKICAgIGluaXRfdGFrZVdoaWxlKCk7CiAgICBpbml0X3RhcCgpOwogICAgaW5pdF90aHJvdHRsZSgpOwogICAgaW5pdF90aHJvdHRsZVRpbWUoKTsKICAgIGluaXRfdGhyb3dJZkVtcHR5KCk7CiAgICBpbml0X3RpbWVJbnRlcnZhbCgpOwogICAgaW5pdF90aW1lb3V0KCk7CiAgICBpbml0X3RpbWVvdXRXaXRoKCk7CiAgICBpbml0X3RpbWVzdGFtcCgpOwogICAgaW5pdF90b0FycmF5KCk7CiAgICBpbml0X3dpbmRvdygpOwogICAgaW5pdF93aW5kb3dDb3VudCgpOwogICAgaW5pdF93aW5kb3dUaW1lKCk7CiAgICBpbml0X3dpbmRvd1RvZ2dsZSgpOwogICAgaW5pdF93aW5kb3dXaGVuKCk7CiAgICBpbml0X3dpdGhMYXRlc3RGcm9tKCk7CiAgICBpbml0X3ppcDIoKTsKICAgIGluaXRfemlwQWxsKCk7CiAgICBpbml0X3ppcFdpdGgoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5wbHVnaW5zLnJ4anMuanMKdmFyIHNtYXJ0cnhfcGx1Z2luc19yeGpzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoc21hcnRyeF9wbHVnaW5zX3J4anNfZXhwb3J0cywgewogIE9ic2VydmFibGU6ICgpID0+IE9ic2VydmFibGUsCiAgUmVwbGF5U3ViamVjdDogKCkgPT4gUmVwbGF5U3ViamVjdCwKICBTdWJqZWN0OiAoKSA9PiBTdWJqZWN0LAogIFN1YnNjcmlwdGlvbjogKCkgPT4gU3Vic2NyaXB0aW9uLAogIGZyb206ICgpID0+IGZyb20sCiAgZnJvbUV2ZW50OiAoKSA9PiBmcm9tRXZlbnQsCiAgb2Y6ICgpID0+IG9mLAogIG9wczogKCkgPT4gb3BzCn0pOwp2YXIgb3BzOwp2YXIgaW5pdF9zbWFydHJ4X3BsdWdpbnNfcnhqcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5wbHVnaW5zLnJ4anMuanMiKCkgewogICAgaW5pdF9lc201KCk7CiAgICBpbml0X29wZXJhdG9ycygpOwogICAgb3BzID0gewogICAgICBidWZmZXIsCiAgICAgIGJ1ZmZlckNvdW50LAogICAgICBidWZmZXJUaW1lLAogICAgICBkZWJvdW5jZSwKICAgICAgZGVib3VuY2VUaW1lLAogICAgICBmaWx0ZXIsCiAgICAgIG1hcDogbWFwMiwKICAgICAgc3RhcnRXaXRoLAogICAgICB0YWtlVW50aWwsCiAgICAgIHRocm90dGxlVGltZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5jbGFzc2VzLm9ic2VydmFibGVtYXAuanMKdmFyIE9ic2VydmFibGVtYXA7CnZhciBpbml0X3NtYXJ0cnhfY2xhc3Nlc19vYnNlcnZhYmxlbWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LmNsYXNzZXMub2JzZXJ2YWJsZW1hcC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0cnhfcGx1Z2lucygpOwogICAgaW5pdF9zbWFydHJ4X3BsdWdpbnNfcnhqcygpOwogICAgT2JzZXJ2YWJsZW1hcCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5vYnNlcnZhYmxlRXZlbnRFbWl0dGVyQnVuZGxlQXJyYXkgPSBuZXcgQXJyYXkoKTsKICAgICAgICB0aGlzLm9ic2VydmFibGVFdmVudFRhcmdldEJ1bmRsZUFycmF5ID0gbmV3IEFycmF5KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNyZWF0ZXMgYSBob3Qgc3ViamVjdCBpZiBub3QgeWV0IHJlZ2lzdGVyZWQgZm9yIHRoZSBldmVudC4KICAgICAgICogSW4gY2FzZSBldmVudCBoYXMgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSB0aGUgc2FtZSBvYnNlcnZhYmxlIGlzIHJldHVybmVkLgogICAgICAgKi8KICAgICAgZ2V0U3ViamVjdEZvckVtaXR0ZXJFdmVudChlbWl0dGVyQXJnLCBldmVudEFyZykgewogICAgICAgIGNvbnN0IGV4aXN0aW5nQnVuZGxlID0gdGhpcy5vYnNlcnZhYmxlRXZlbnRFbWl0dGVyQnVuZGxlQXJyYXkuZmluZCgoYnVuZGxlQXJnKSA9PiB7CiAgICAgICAgICByZXR1cm4gYnVuZGxlQXJnLmV2ZW50UmVmID09PSBlbWl0dGVyQXJnICYmIGJ1bmRsZUFyZy5ldmVudCA9PT0gZXZlbnRBcmc7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGV4aXN0aW5nQnVuZGxlKSB7CiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdCdW5kbGUuc3ViamVjdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgZW1pdHRlck9ic2VydmFibGUgPSBmcm9tRXZlbnQoZW1pdHRlckFyZywgZXZlbnRBcmcpOwogICAgICAgICAgY29uc3QgZW1pdHRlclN1YmplY3QgPSBuZXcgU3ViamVjdCgpOwogICAgICAgICAgZW1pdHRlck9ic2VydmFibGUuc3Vic2NyaWJlKGVtaXR0ZXJTdWJqZWN0KTsKICAgICAgICAgIGNvbnN0IG5ld0J1bmRsZSA9IHsKICAgICAgICAgICAgc3ViamVjdDogZW1pdHRlclN1YmplY3QsCiAgICAgICAgICAgIGV2ZW50UmVmOiBlbWl0dGVyQXJnLAogICAgICAgICAgICBldmVudDogZXZlbnRBcmcKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLm9ic2VydmFibGVFdmVudEVtaXR0ZXJCdW5kbGVBcnJheS5wdXNoKG5ld0J1bmRsZSk7CiAgICAgICAgICByZXR1cm4gbmV3QnVuZGxlLnN1YmplY3Q7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldFN1YmplY3RGb3JFdmVudFRhcmdldChldmVudFRhcmdldEFyZywgZXZlbnROYW1lQXJnKSB7CiAgICAgICAgY29uc3QgZXhpc3RpbmdCdW5kbGUgPSB0aGlzLm9ic2VydmFibGVFdmVudFRhcmdldEJ1bmRsZUFycmF5LmZpbmQoKGJ1bmRsZUFyZykgPT4gewogICAgICAgICAgcmV0dXJuIGJ1bmRsZUFyZy5ldmVudFJlZiA9PT0gZXZlbnRUYXJnZXRBcmcgJiYgYnVuZGxlQXJnLmV2ZW50ID09PSBldmVudE5hbWVBcmc7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGV4aXN0aW5nQnVuZGxlKSB7CiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdCdW5kbGUuc3ViamVjdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgZW1pdHRlclN1YmplY3QgPSBuZXcgU3ViamVjdCgpOwogICAgICAgICAgY29uc3QgbmV3QnVuZGxlID0gewogICAgICAgICAgICBzdWJqZWN0OiBlbWl0dGVyU3ViamVjdCwKICAgICAgICAgICAgZXZlbnRSZWY6IGV2ZW50VGFyZ2V0QXJnLAogICAgICAgICAgICBldmVudDogZXZlbnROYW1lQXJnCiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5vYnNlcnZhYmxlRXZlbnRUYXJnZXRCdW5kbGVBcnJheS5wdXNoKG5ld0J1bmRsZSk7CiAgICAgICAgICByZXR1cm4gbmV3QnVuZGxlLnN1YmplY3Q7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LmNsYXNzZXMub2JzZXJ2YWJsZWludGFrZS5qcwp2YXIgT2JzZXJ2YWJsZUludGFrZTsKdmFyIGluaXRfc21hcnRyeF9jbGFzc2VzX29ic2VydmFibGVpbnRha2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJ4QDMuMC4xMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyeC9kaXN0X3RzL3NtYXJ0cnguY2xhc3Nlcy5vYnNlcnZhYmxlaW50YWtlLmpzIigpIHsKICAgIGluaXRfc21hcnRyeF9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0cnhfcGx1Z2luc19yeGpzKCk7CiAgICBPYnNlcnZhYmxlSW50YWtlID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLm9ic2VydmFibGVGdW5jdGlvbnMgPSB7CiAgICAgICAgICBuZXh0OiAocGF5bG9hZEFyZykgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIGNvbXBsZXRlOiAocGF5bG9hZEFyZykgPT4gewogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgdGhpcy5nZW5lcmF0b3IgPSBudWxsOwogICAgICAgIHRoaXMuYnVmZmVyZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnBheWxvYWRCdWZmZXIgPSBbXTsKICAgICAgICB0aGlzLm9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXJBcmcpID0+IHsKICAgICAgICAgIHRoaXMub2JzZXJ2YWJsZUZ1bmN0aW9ucy5uZXh0ID0gKC4uLmFyZ3MpID0+IHsKICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyQXJnLm5leHQoYXJncyk7CiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLmNvbXBsZXRlID0gKCkgPT4gewogICAgICAgICAgICB0aGlzLmNvbXBsZXRlZERlZmZlcmVkLnJlc29sdmUoKTsKICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyQXJnLmNvbXBsZXRlKCk7CiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICAgIHRoaXMuY29tcGxldGVkRGVmZmVyZWQgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICB0aGlzLmNvbXBsZXRlZCA9IHRoaXMuY29tcGxldGVkRGVmZmVyZWQucHJvbWlzZTsKICAgICAgfQogICAgICBzZXRPYnNlcnZhYmxlKG9ic2VydmFibGVGdW5jKSB7CiAgICAgICAgdGhpcy5vYnNlcnZhYmxlID0gb2JzZXJ2YWJsZUZ1bmM7CiAgICAgIH0KICAgICAgcHVzaChwYXlsb2FkQXJnKSB7CiAgICAgICAgaWYgKHRoaXMuYnVmZmVyZWQpIHsKICAgICAgICAgIHRoaXMucGF5bG9hZEJ1ZmZlci5wdXNoKHBheWxvYWRBcmcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmludGVybmFsUHVzaChwYXlsb2FkQXJnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHB1c2hlcyBtYW55IHBheWxvYWRzIGFzIGFycmF5CiAgICAgICAqIEBwYXJhbSBwYXlsb2FkQXJnQXJyYXkKICAgICAgICovCiAgICAgIHB1c2hNYW55KHBheWxvYWRBcmdBcnJheSkgewogICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBwYXlsb2FkQXJnQXJyYXkpIHsKICAgICAgICAgIHRoaXMucHVzaChpdGVtKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHNldHMgYSBnZW5lcmF0b3IgdG8gcXVlcnkgdGhlIG5leHQgcHVzaGVkIHZhbHVlCiAgICAgICAqIEBwYXJhbSBnZW5lcmF0b3JBcmcKICAgICAgICovCiAgICAgIHNldEdlbmVyYXRvcihnZW5lcmF0b3JBcmcpIHsKICAgICAgICB0aGlzLmdlbmVyYXRvciA9IGdlbmVyYXRvckFyZzsKICAgICAgfQogICAgICBtYWtlQnVmZmVyZWQoKSB7CiAgICAgICAgdGhpcy5idWZmZXJlZCA9IHRydWU7CiAgICAgIH0KICAgICAgc3Vic2NyaWJlKC4uLmFyZ3MpIHsKICAgICAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSguLi5hcmdzKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVxdWVzdCB0aGUgbmV4dCB2YWx1ZXMgaW4gdGhlIHF1YW50aXR5IHNwZWNpZmllZAogICAgICAgKiBAcGFyYW0gaG93TWFueUFyZyBpZiBhIGdlbmVyYXRvciBpcyBzZXQsIG9mIGEgYnVmZmVyIGV4aXN0cywgdGhpcyBhbGxvd3MgcmV0cmlldmluZyB2YWx1ZXMKICAgICAgICovCiAgICAgIHJlcXVlc3QoaG93TWFueUFyZykgewogICAgICAgIGlmIChob3dNYW55QXJnID09PSAwKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSAhPT0gaG93TWFueUFyZzsgaTExKyspIHsKICAgICAgICAgICAgaWYgKHRoaXMucGF5bG9hZEJ1ZmZlci5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbFB1c2godGhpcy5wYXlsb2FkQnVmZmVyLnNoaWZ0KCkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnN0IG5leHRQYXlsb2FkID0gdGhpcy5nZW5lcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxQdXNoKG5leHRQYXlsb2FkLnZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogc2lnbmFscyB0aGUgY29tcGxldGlvbiBvZiB0aGlzIG9ic2VydmFibGUKICAgICAgICovCiAgICAgIHNpZ25hbENvbXBsZXRlKCkgewogICAgICAgIHRoaXMub2JzZXJ2YWJsZUZ1bmN0aW9ucy5jb21wbGV0ZSgpOwogICAgICB9CiAgICAgIGludGVybmFsUHVzaChwYXlsb2FkQXJnKSB7CiAgICAgICAgdGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLm5leHQocGF5bG9hZEFyZyk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJ4QDMuMC4xMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyeC9kaXN0X3RzL3NtYXJ0cnguZnVuY3Rpb25zLmpzCmZ1bmN0aW9uIGZyb21TdHJlYW1XaXRoQmFja3ByZXNzdXJlKHN0cmVhbSkgewogIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4gewogICAgY29uc3QgcGF1c2VTdHJlYW0gPSAoKSA9PiBzdHJlYW0ucGF1c2UoKTsKICAgIGNvbnN0IHJlc3VtZVN0cmVhbSA9ICgpID0+IHByb2Nlc3MubmV4dFRpY2soKCkgPT4gc3RyZWFtLnJlc3VtZSgpKTsKICAgIGNvbnN0IG9uRGF0YSA9IChkYXRhKSA9PiB7CiAgICAgIHBhdXNlU3RyZWFtKCk7CiAgICAgIHN1YnNjcmliZXIubmV4dChkYXRhKTsKICAgICAgcmVzdW1lU3RyZWFtKCk7CiAgICB9OwogICAgc3RyZWFtLm9uKCJkYXRhIiwgb25EYXRhKTsKICAgIHN0cmVhbS5vbigiZXJyb3IiLCAoZXJyb3IpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpKTsKICAgIHN0cmVhbS5vbigiZW5kIiwgKCkgPT4gc3Vic2NyaWJlci5jb21wbGV0ZSgpKTsKICAgIHN0cmVhbS5vbigiY2xvc2UiLCAoKSA9PiBzdWJzY3JpYmVyLmNvbXBsZXRlKCkpOwogICAgcmV0dXJuICgpID0+IHsKICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJkYXRhIiwgb25EYXRhKTsKICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsIHN1YnNjcmliZXIuZXJyb3IpOwogICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoImVuZCIsIHN1YnNjcmliZXIuY29tcGxldGUpOwogICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoImNsb3NlIiwgc3Vic2NyaWJlci5jb21wbGV0ZSk7CiAgICB9OwogIH0pOwp9CnZhciBpbml0X3NtYXJ0cnhfZnVuY3Rpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LmZ1bmN0aW9ucy5qcyIoKSB7CiAgICBpbml0X2VzbTUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czIgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMiwgewogIE9ic2VydmFibGVJbnRha2U6ICgpID0+IE9ic2VydmFibGVJbnRha2UsCiAgT2JzZXJ2YWJsZW1hcDogKCkgPT4gT2JzZXJ2YWJsZW1hcCwKICBmcm9tU3RyZWFtV2l0aEJhY2twcmVzc3VyZTogKCkgPT4gZnJvbVN0cmVhbVdpdGhCYWNrcHJlc3N1cmUsCiAgcnhqczogKCkgPT4gc21hcnRyeF9wbHVnaW5zX3J4anNfZXhwb3J0cwp9KTsKdmFyIGluaXRfZGlzdF90czIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJ4QDMuMC4xMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyeC9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRyeF9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0cnhfY2xhc3Nlc19vYnNlcnZhYmxlbWFwKCk7CiAgICBpbml0X3NtYXJ0cnhfY2xhc3Nlc19vYnNlcnZhYmxlaW50YWtlKCk7CiAgICBpbml0X3NtYXJ0cnhfZnVuY3Rpb25zKCk7CiAgICBpbml0X3NtYXJ0cnhfcGx1Z2luc19yeGpzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3Byb3BlcnR5LmpzCmZ1bmN0aW9uIG41KHQ5KSB7CiAgcmV0dXJuIChlMTEsIG8xMykgPT4gIm9iamVjdCIgPT0gdHlwZW9mIG8xMyA/IHI0KHQ5LCBlMTEsIG8xMykgOiAoKHQxMCwgZTEyLCBvMTQpID0+IHsKICAgIGNvbnN0IHIxMSA9IGUxMi5oYXNPd25Qcm9wZXJ0eShvMTQpOwogICAgcmV0dXJuIGUxMi5jb25zdHJ1Y3Rvci5jcmVhdGVQcm9wZXJ0eShvMTQsIHQxMCksIHIxMSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZTEyLCBvMTQpIDogdm9pZCAwOwogIH0pKHQ5LCBlMTEsIG8xMyk7Cn0KdmFyIG82LCByNDsKdmFyIGluaXRfcHJvcGVydHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3Byb3BlcnR5LmpzIigpIHsKICAgIGluaXRfcmVhY3RpdmVfZWxlbWVudCgpOwogICAgbzYgPSB7IGF0dHJpYnV0ZTogdHJ1ZSwgdHlwZTogU3RyaW5nLCBjb252ZXJ0ZXI6IHUsIHJlZmxlY3Q6IGZhbHNlLCBoYXNDaGFuZ2VkOiBmIH0sIHI0ID0gKHQ5ID0gbzYsIGUxMSwgcjExKSA9PiB7CiAgICAgIGNvbnN0IHsga2luZDogbjEzLCBtZXRhZGF0YTogaTExIH0gPSByMTE7CiAgICAgIGxldCBzOSA9IGdsb2JhbFRoaXMubGl0UHJvcGVydHlNZXRhZGF0YS5nZXQoaTExKTsKICAgICAgaWYgKHZvaWQgMCA9PT0gczkgJiYgZ2xvYmFsVGhpcy5saXRQcm9wZXJ0eU1ldGFkYXRhLnNldChpMTEsIHM5ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSksICJzZXR0ZXIiID09PSBuMTMgJiYgKCh0OSA9IE9iamVjdC5jcmVhdGUodDkpKS53cmFwcGVkID0gdHJ1ZSksIHM5LnNldChyMTEubmFtZSwgdDkpLCAiYWNjZXNzb3IiID09PSBuMTMpIHsKICAgICAgICBjb25zdCB7IG5hbWU6IG8xMyB9ID0gcjExOwogICAgICAgIHJldHVybiB7IHNldChyMTIpIHsKICAgICAgICAgIGNvbnN0IG4xNCA9IGUxMS5nZXQuY2FsbCh0aGlzKTsKICAgICAgICAgIGUxMS5zZXQuY2FsbCh0aGlzLCByMTIpLCB0aGlzLnJlcXVlc3RVcGRhdGUobzEzLCBuMTQsIHQ5LCB0cnVlLCByMTIpOwogICAgICAgIH0sIGluaXQoZTEyKSB7CiAgICAgICAgICByZXR1cm4gdm9pZCAwICE9PSBlMTIgJiYgdGhpcy5DKG8xMywgdm9pZCAwLCB0OSwgZTEyKSwgZTEyOwogICAgICAgIH0gfTsKICAgICAgfQogICAgICBpZiAoInNldHRlciIgPT09IG4xMykgewogICAgICAgIGNvbnN0IHsgbmFtZTogbzEzIH0gPSByMTE7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHIxMikgewogICAgICAgICAgY29uc3QgbjE0ID0gdGhpc1tvMTNdOwogICAgICAgICAgZTExLmNhbGwodGhpcywgcjEyKSwgdGhpcy5yZXF1ZXN0VXBkYXRlKG8xMywgbjE0LCB0OSwgdHJ1ZSwgcjEyKTsKICAgICAgICB9OwogICAgICB9CiAgICAgIHRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBkZWNvcmF0b3IgbG9jYXRpb246ICIgKyBuMTMpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RlY29yYXRvcnMvcHJvcGVydHkuanMKdmFyIGluaXRfcHJvcGVydHkyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGVjb3JhdG9ycy9wcm9wZXJ0eS5qcyIoKSB7CiAgICBpbml0X3Byb3BlcnR5KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY29sb3JzLmpzCnZhciBpbml0X2RvbXRvb2xzX2NvbG9ycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jb2xvcnMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRkZWxheUAzLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRkZWxheS9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMzID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czMsIHsKICBUaW1lb3V0OiAoKSA9PiBUaW1lb3V0LAogIGRlbGF5Rm9yOiAoKSA9PiBkZWxheUZvciwKICBkZWxheUZvclJhbmRvbTogKCkgPT4gZGVsYXlGb3JSYW5kb20KfSk7CnZhciBkZWxheUZvciwgZGVsYXlGb3JSYW5kb20sIFRpbWVvdXQ7CnZhciBpbml0X2Rpc3RfdHMzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRkZWxheUAzLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRkZWxheS9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGlzdF90cygpOwogICAgZGVsYXlGb3IgPSBhc3luYyAodGltZUluTWlsbGlzZWNvbmRBcmcsIHBhc3NPbkFyZywgdW5yZWZlZEFyZyA9IGZhbHNlKSA9PiB7CiAgICAgIGNvbnN0IHRpbWVvdXQyID0gbmV3IFRpbWVvdXQodGltZUluTWlsbGlzZWNvbmRBcmcsIG51bGwsIHVucmVmZWRBcmcpOwogICAgICBhd2FpdCB0aW1lb3V0Mi5wcm9taXNlOwogICAgICByZXR1cm4gcGFzc09uQXJnOwogICAgfTsKICAgIGRlbGF5Rm9yUmFuZG9tID0gYXN5bmMgKHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnLCB0aW1lTWF4SW5NaWxsaXNlY29uZEFyZywgcGFzc09uQXJnLCB1bnJlZmVkQXJnID0gZmFsc2UpID0+IHsKICAgICAgYXdhaXQgZGVsYXlGb3IoTWF0aC5yYW5kb20oKSAqICh0aW1lTWF4SW5NaWxsaXNlY29uZEFyZyAtIHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnKSArIHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnLCBudWxsLCB1bnJlZmVkQXJnKTsKICAgICAgcmV0dXJuIHBhc3NPbkFyZzsKICAgIH07CiAgICBUaW1lb3V0ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih0aW1lSW5NaWxsaXNlY29uZEFyZywgcGFzc09uLCB1bnJlZmVkQXJnID0gZmFsc2UpIHsKICAgICAgICB0aGlzLl9jYW5jZWxsZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnRpbWVvdXRJbk1pbGxpcyA9IHRpbWVJbk1pbGxpc2Vjb25kQXJnOwogICAgICAgIHRoaXMuX2RlZmVycmVkID0gZGVmZXIoKTsKICAgICAgICB0aGlzLnByb21pc2UgPSB0aGlzLl9kZWZlcnJlZC5wcm9taXNlOwogICAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGlmICghdGhpcy5fY2FuY2VsbGVkKSB7CiAgICAgICAgICAgIHRoaXMuX2RlZmVycmVkLnJlc29sdmUocGFzc09uKTsKICAgICAgICAgIH0KICAgICAgICB9LCB0aW1lSW5NaWxsaXNlY29uZEFyZyk7CiAgICAgICAgdGhpcy5zdGFydGVkID0gRGF0ZS5ub3coKTsKICAgICAgICBpZiAodW5yZWZlZEFyZykgewogICAgICAgICAgdGhpcy5tYWtlVW5yZWZlZCgpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogdW5yZWZmaW5nIGEgdGltZW91dCBjYXVzZXMgdGhlIG5vZGUgcHJvY2VzcyB0byBub3Qgd2FpdCBmb3IgY29tcGxldGlvbiBiZWZvcmUgZXhpdAogICAgICAgKi8KICAgICAgbWFrZVVucmVmZWQoKSB7CiAgICAgICAgdGhpcy5fdGltZW91dC51bnJlZigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjYW5jZWxzIHRoZSB0aW1lcgogICAgICAgKi8KICAgICAgY2FuY2VsKCkgewogICAgICAgIHRoaXMuX2NhbmNlbGxlZCA9IHRydWU7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpOwogICAgICB9CiAgICAgIGdldFRpbWVMZWZ0KCkgewogICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc3RhcnRlZCArIHRoaXMudGltZW91dEluTWlsbGlzIC0gRGF0ZS5ub3coKTsKICAgICAgICByZXR1cm4gcmVzdWx0ID4gMCA/IHJlc3VsdCA6IDA7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3QtaW50ZXJmYWNlc0AzLjAuMTkvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC1pbnRlcmZhY2VzL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czQgPSB7fTsKdmFyIGluaXRfZGlzdF90czQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3QtaW50ZXJmYWNlc0AzLjAuMTkvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC1pbnRlcmZhY2VzL2Rpc3RfdHMvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZXNjYXBlLXN0cmluZy1yZWdleHBANS4wLjAvbm9kZV9tb2R1bGVzL2VzY2FwZS1zdHJpbmctcmVnZXhwL2luZGV4LmpzCmZ1bmN0aW9uIGVzY2FwZVN0cmluZ1JlZ2V4cChzdHJpbmczKSB7CiAgaWYgKHR5cGVvZiBzdHJpbmczICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBzdHJpbmciKTsKICB9CiAgcmV0dXJuIHN0cmluZzMucmVwbGFjZSgvW3xcXHt9KClbXF1eJCsqPy5dL2csICJcXCQmIikucmVwbGFjZSgvLS9nLCAiXFx4MmQiKTsKfQp2YXIgaW5pdF9lc2NhcGVfc3RyaW5nX3JlZ2V4cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2VzY2FwZS1zdHJpbmctcmVnZXhwQDUuMC4wL25vZGVfbW9kdWxlcy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tYXRjaGVyQDUuMC4wL25vZGVfbW9kdWxlcy9tYXRjaGVyL2luZGV4LmpzCnZhciBtYXRjaGVyX2V4cG9ydHMgPSB7fTsKX19leHBvcnQobWF0Y2hlcl9leHBvcnRzLCB7CiAgaXNNYXRjaDogKCkgPT4gaXNNYXRjaCwKICBtYXRjaGVyOiAoKSA9PiBtYXRjaGVyCn0pOwpmdW5jdGlvbiBtYXRjaGVyKGlucHV0cywgcGF0dGVybnMyLCBvcHRpb25zKSB7CiAgcmV0dXJuIGJhc2VNYXRjaGVyKGlucHV0cywgcGF0dGVybnMyLCBvcHRpb25zLCBmYWxzZSk7Cn0KZnVuY3Rpb24gaXNNYXRjaChpbnB1dHMsIHBhdHRlcm5zMiwgb3B0aW9ucykgewogIHJldHVybiBiYXNlTWF0Y2hlcihpbnB1dHMsIHBhdHRlcm5zMiwgb3B0aW9ucywgdHJ1ZSkubGVuZ3RoID4gMDsKfQp2YXIgcmVnZXhwQ2FjaGUsIHNhbml0aXplQXJyYXksIG1ha2VSZWdleHAsIGJhc2VNYXRjaGVyOwp2YXIgaW5pdF9tYXRjaGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWF0Y2hlckA1LjAuMC9ub2RlX21vZHVsZXMvbWF0Y2hlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2VzY2FwZV9zdHJpbmdfcmVnZXhwKCk7CiAgICByZWdleHBDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBzYW5pdGl6ZUFycmF5ID0gKGlucHV0LCBpbnB1dE5hbWUpID0+IHsKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSkgewogICAgICAgIHN3aXRjaCAodHlwZW9mIGlucHV0KSB7CiAgICAgICAgICBjYXNlICJzdHJpbmciOgogICAgICAgICAgICBpbnB1dCA9IFtpbnB1dF07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAidW5kZWZpbmVkIjoKICAgICAgICAgICAgaW5wdXQgPSBbXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAnJHtpbnB1dE5hbWV9JyB0byBiZSBhIHN0cmluZyBvciBhbiBhcnJheSwgYnV0IGdvdCBhIHR5cGUgb2YgJyR7dHlwZW9mIGlucHV0fSdgKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGlucHV0LmZpbHRlcigoc3RyaW5nMykgPT4gewogICAgICAgIGlmICh0eXBlb2Ygc3RyaW5nMyAhPT0gInN0cmluZyIpIHsKICAgICAgICAgIGlmICh0eXBlb2Ygc3RyaW5nMyA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgJyR7aW5wdXROYW1lfScgdG8gYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncywgYnV0IGZvdW5kIGEgdHlwZSBvZiAnJHt0eXBlb2Ygc3RyaW5nM30nIGluIHRoZSBhcnJheWApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSk7CiAgICB9OwogICAgbWFrZVJlZ2V4cCA9IChwYXR0ZXJuLCBvcHRpb25zKSA9PiB7CiAgICAgIG9wdGlvbnMgPSB7CiAgICAgICAgY2FzZVNlbnNpdGl2ZTogZmFsc2UsCiAgICAgICAgLi4ub3B0aW9ucwogICAgICB9OwogICAgICBjb25zdCBjYWNoZUtleSA9IHBhdHRlcm4gKyBKU09OLnN0cmluZ2lmeShvcHRpb25zKTsKICAgICAgaWYgKHJlZ2V4cENhY2hlLmhhcyhjYWNoZUtleSkpIHsKICAgICAgICByZXR1cm4gcmVnZXhwQ2FjaGUuZ2V0KGNhY2hlS2V5KTsKICAgICAgfQogICAgICBjb25zdCBuZWdhdGVkID0gcGF0dGVyblswXSA9PT0gIiEiOwogICAgICBpZiAobmVnYXRlZCkgewogICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKDEpOwogICAgICB9CiAgICAgIHBhdHRlcm4gPSBlc2NhcGVTdHJpbmdSZWdleHAocGF0dGVybikucmVwbGFjZSgvXFxcKi9nLCAiW1xcc1xcU10qIik7CiAgICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoYF4ke3BhdHRlcm59JGAsIG9wdGlvbnMuY2FzZVNlbnNpdGl2ZSA/ICIiIDogImkiKTsKICAgICAgcmVnZXhwLm5lZ2F0ZWQgPSBuZWdhdGVkOwogICAgICByZWdleHBDYWNoZS5zZXQoY2FjaGVLZXksIHJlZ2V4cCk7CiAgICAgIHJldHVybiByZWdleHA7CiAgICB9OwogICAgYmFzZU1hdGNoZXIgPSAoaW5wdXRzLCBwYXR0ZXJuczIsIG9wdGlvbnMsIGZpcnN0TWF0Y2hPbmx5KSA9PiB7CiAgICAgIGlucHV0cyA9IHNhbml0aXplQXJyYXkoaW5wdXRzLCAiaW5wdXRzIik7CiAgICAgIHBhdHRlcm5zMiA9IHNhbml0aXplQXJyYXkocGF0dGVybnMyLCAicGF0dGVybnMiKTsKICAgICAgaWYgKHBhdHRlcm5zMi5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgcGF0dGVybnMyID0gcGF0dGVybnMyLm1hcCgocGF0dGVybikgPT4gbWFrZVJlZ2V4cChwYXR0ZXJuLCBvcHRpb25zKSk7CiAgICAgIGNvbnN0IHsgYWxsUGF0dGVybnMgfSA9IG9wdGlvbnMgfHwge307CiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdOwogICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykgewogICAgICAgIGxldCBtYXRjaGVzOwogICAgICAgIGNvbnN0IGRpZEZpdCA9IFsuLi5wYXR0ZXJuczJdLmZpbGwoZmFsc2UpOwogICAgICAgIGZvciAoY29uc3QgW2luZGV4MiwgcGF0dGVybl0gb2YgcGF0dGVybnMyLmVudHJpZXMoKSkgewogICAgICAgICAgaWYgKHBhdHRlcm4udGVzdChpbnB1dCkpIHsKICAgICAgICAgICAgZGlkRml0W2luZGV4Ml0gPSB0cnVlOwogICAgICAgICAgICBtYXRjaGVzID0gIXBhdHRlcm4ubmVnYXRlZDsKICAgICAgICAgICAgaWYgKCFtYXRjaGVzKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCEobWF0Y2hlcyA9PT0gZmFsc2UgfHwgbWF0Y2hlcyA9PT0gdm9pZCAwICYmIHBhdHRlcm5zMi5zb21lKChwYXR0ZXJuKSA9PiAhcGF0dGVybi5uZWdhdGVkKSB8fCBhbGxQYXR0ZXJucyAmJiBkaWRGaXQuc29tZSgoeWVzLCBpbmRleDIpID0+ICF5ZXMgJiYgIXBhdHRlcm5zMltpbmRleDJdLm5lZ2F0ZWQpKSkgewogICAgICAgICAgcmVzdWx0LnB1c2goaW5wdXQpOwogICAgICAgICAgaWYgKGZpcnN0TWF0Y2hPbmx5KSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWF0Y2hAMi4wLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWF0Y2gvZGlzdF90cy9zbWFydG1hdGNoLnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRtYXRjaF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXRjaEAyLjAuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXRjaC9kaXN0X3RzL3NtYXJ0bWF0Y2gucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X21hdGNoZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWF0Y2hAMi4wLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWF0Y2gvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzNSA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHM1LCB7CiAgU21hcnRNYXRjaDogKCkgPT4gU21hcnRNYXRjaAp9KTsKdmFyIFNtYXJ0TWF0Y2g7CnZhciBpbml0X2Rpc3RfdHM1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXRjaEAyLjAuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXRjaC9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRtYXRjaF9wbHVnaW5zKCk7CiAgICBTbWFydE1hdGNoID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih3aWxkY2FyZEFyZykgewogICAgICAgIHRoaXMud2lsZGNhcmQgPSB3aWxkY2FyZEFyZzsKICAgICAgfQogICAgICBtYXRjaChtYXRjaFN0cmluZ0FyZykgewogICAgICAgIHJldHVybiBtYXRjaGVyX2V4cG9ydHMuaXNNYXRjaChtYXRjaFN0cmluZ0FyZywgdGhpcy53aWxkY2FyZCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9jcm9uZXJAOS4xLjAvbm9kZV9tb2R1bGVzL2Nyb25lci9kaXN0L2Nyb25lci5qcwp2YXIgY3JvbmVyX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoY3JvbmVyX2V4cG9ydHMsIHsKICBDcm9uOiAoKSA9PiBSMiwKICBDcm9uRGF0ZTogKCkgPT4gZjMsCiAgQ3JvblBhdHRlcm46ICgpID0+IGQzLAogIHNjaGVkdWxlZEpvYnM6ICgpID0+IHkzCn0pOwpmdW5jdGlvbiBoMyhuMTMsIHQ5LCBlMTEsIHIxMSwgczksIGkxMSwgYTUsIGw2KSB7CiAgcmV0dXJuIGgzLmZyb21UWihoMy50cChuMTMsIHQ5LCBlMTEsIHIxMSwgczksIGkxMSwgYTUpLCBsNik7Cn0KZnVuY3Rpb24gRDIobjEzLCB0OSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKSB7CiAgbGV0IGUxMSA9IHQ5LnRvTG9jYWxlU3RyaW5nKCJlbi1VUyIsIHsgdGltZVpvbmU6IG4xMywgdGltZVpvbmVOYW1lOiAic2hvcnRPZmZzZXQiIH0pLnNwbGl0KCIgIikuc2xpY2UoLTEpWzBdLCByMTEgPSB0OS50b0xvY2FsZVN0cmluZygiZW4tVVMiKS5yZXBsYWNlKC9bXHUyMDJmXS8sICIgIik7CiAgcmV0dXJuIERhdGUucGFyc2UoYCR7cjExfSBHTVRgKSAtIERhdGUucGFyc2UoYCR7cjExfSAke2UxMX1gKTsKfQpmdW5jdGlvbiBrMihuMTMsIHQ5KSB7CiAgbGV0IGUxMSA9IG5ldyBEYXRlKERhdGUucGFyc2UobjEzKSk7CiAgaWYgKGlzTmFOKGUxMSkpIHRocm93IG5ldyBFcnJvcigibWluaXR6OiBJbnZhbGlkIElTTzg2MDEgcGFzc2VkIHRvIHBhcnNlci4iKTsKICBsZXQgcjExID0gbjEzLnN1YnN0cmluZyg5KTsKICByZXR1cm4gbjEzLmluY2x1ZGVzKCJaIikgfHwgcjExLmluY2x1ZGVzKCItIikgfHwgcjExLmluY2x1ZGVzKCIrIikgPyBoMy50cChlMTEuZ2V0VVRDRnVsbFllYXIoKSwgZTExLmdldFVUQ01vbnRoKCkgKyAxLCBlMTEuZ2V0VVRDRGF0ZSgpLCBlMTEuZ2V0VVRDSG91cnMoKSwgZTExLmdldFVUQ01pbnV0ZXMoKSwgZTExLmdldFVUQ1NlY29uZHMoKSwgIkV0Yy9VVEMiKSA6IGgzLnRwKGUxMS5nZXRGdWxsWWVhcigpLCBlMTEuZ2V0TW9udGgoKSArIDEsIGUxMS5nZXREYXRlKCksIGUxMS5nZXRIb3VycygpLCBlMTEuZ2V0TWludXRlcygpLCBlMTEuZ2V0U2Vjb25kcygpLCB0OSk7Cn0KZnVuY3Rpb24gTjIobjEzKSB7CiAgaWYgKG4xMyA9PT0gdm9pZCAwICYmIChuMTMgPSB7fSksIGRlbGV0ZSBuMTMubmFtZSwgbjEzLmxlZ2FjeU1vZGUgPSBuMTMubGVnYWN5TW9kZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IG4xMy5sZWdhY3lNb2RlLCBuMTMucGF1c2VkID0gbjEzLnBhdXNlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBuMTMucGF1c2VkLCBuMTMubWF4UnVucyA9IG4xMy5tYXhSdW5zID09PSB2b2lkIDAgPyAxIC8gMCA6IG4xMy5tYXhSdW5zLCBuMTMuY2F0Y2ggPSBuMTMuY2F0Y2ggPT09IHZvaWQgMCA/IGZhbHNlIDogbjEzLmNhdGNoLCBuMTMuaW50ZXJ2YWwgPSBuMTMuaW50ZXJ2YWwgPT09IHZvaWQgMCA/IDAgOiBwYXJzZUludChuMTMuaW50ZXJ2YWwudG9TdHJpbmcoKSwgMTApLCBuMTMudXRjT2Zmc2V0ID0gbjEzLnV0Y09mZnNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyc2VJbnQobjEzLnV0Y09mZnNldC50b1N0cmluZygpLCAxMCksIG4xMy51bnJlZiA9IG4xMy51bnJlZiA9PT0gdm9pZCAwID8gZmFsc2UgOiBuMTMudW5yZWYsIG4xMy5zdGFydEF0ICYmIChuMTMuc3RhcnRBdCA9IG5ldyBmMyhuMTMuc3RhcnRBdCwgbjEzLnRpbWV6b25lKSksIG4xMy5zdG9wQXQgJiYgKG4xMy5zdG9wQXQgPSBuZXcgZjMobjEzLnN0b3BBdCwgbjEzLnRpbWV6b25lKSksIG4xMy5pbnRlcnZhbCAhPT0gbnVsbCkgewogICAgaWYgKGlzTmFOKG4xMy5pbnRlcnZhbCkpIHRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IFN1cHBsaWVkIHZhbHVlIGZvciBpbnRlcnZhbCBpcyBub3QgYSBudW1iZXIiKTsKICAgIGlmIChuMTMuaW50ZXJ2YWwgPCAwKSB0aHJvdyBuZXcgRXJyb3IoIkNyb25PcHRpb25zOiBTdXBwbGllZCB2YWx1ZSBmb3IgaW50ZXJ2YWwgY2FuIG5vdCBiZSBuZWdhdGl2ZSIpOwogIH0KICBpZiAobjEzLnV0Y09mZnNldCAhPT0gdm9pZCAwKSB7CiAgICBpZiAoaXNOYU4objEzLnV0Y09mZnNldCkpIHRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IEludmFsaWQgdmFsdWUgcGFzc2VkIGZvciB1dGNPZmZzZXQsIHNob3VsZCBiZSBudW1iZXIgcmVwcmVzZW50aW5nIG1pbnV0ZXMgb2Zmc2V0IGZyb20gVVRDLiIpOwogICAgaWYgKG4xMy51dGNPZmZzZXQgPCAtODcwIHx8IG4xMy51dGNPZmZzZXQgPiA4NzApIHRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IHV0Y09mZnNldCBvdXQgb2YgYm91bmRzLiIpOwogICAgaWYgKG4xMy51dGNPZmZzZXQgIT09IHZvaWQgMCAmJiBuMTMudGltZXpvbmUpIHRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IENvbWJpbmluZyAndXRjT2Zmc2V0JyB3aXRoICd0aW1lem9uZScgaXMgbm90IGFsbG93ZWQuIik7CiAgfQogIGlmIChuMTMudW5yZWYgIT09IHRydWUgJiYgbjEzLnVucmVmICE9PSBmYWxzZSkgdGhyb3cgbmV3IEVycm9yKCJDcm9uT3B0aW9uczogVW5yZWYgc2hvdWxkIGJlIGVpdGhlciB0cnVlLCBmYWxzZSBvciB1bmRlZmluZWQoZmFsc2UpLiIpOwogIHJldHVybiBuMTM7Cn0KZnVuY3Rpb24gZzIobjEzKSB7CiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuMTMpID09PSAiW29iamVjdCBGdW5jdGlvbl0iIHx8IHR5cGVvZiBuMTMgPT0gImZ1bmN0aW9uIiB8fCBuMTMgaW5zdGFuY2VvZiBGdW5jdGlvbjsKfQpmdW5jdGlvbiBTMyhuMTMpIHsKICByZXR1cm4gZzIobjEzKTsKfQpmdW5jdGlvbiBQMihuMTMpIHsKICB0eXBlb2YgRGVubyA8ICJ1IiAmJiB0eXBlb2YgRGVuby51bnJlZlRpbWVyIDwgInUiID8gRGVuby51bnJlZlRpbWVyKG4xMykgOiBuMTMgJiYgdHlwZW9mIG4xMy51bnJlZiA8ICJ1IiAmJiBuMTMudW5yZWYoKTsKfQp2YXIgYjMsIHAzLCB2MiwgZDMsIE8sIG0yLCBmMywgXzIsIHkzLCBSMjsKdmFyIGluaXRfY3JvbmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vY3JvbmVyQDkuMS4wL25vZGVfbW9kdWxlcy9jcm9uZXIvZGlzdC9jcm9uZXIuanMiKCkgewogICAgaDMuZnJvbVRaSVNPID0gKG4xMywgdDksIGUxMSkgPT4gaDMuZnJvbVRaKGsyKG4xMywgdDkpLCBlMTEpOwogICAgaDMuZnJvbVRaID0gZnVuY3Rpb24objEzLCB0OSkgewogICAgICBsZXQgZTExID0gbmV3IERhdGUoRGF0ZS5VVEMobjEzLnksIG4xMy5tIC0gMSwgbjEzLmQsIG4xMy5oLCBuMTMuaSwgbjEzLnMpKSwgcjExID0gRDIobjEzLnR6LCBlMTEpLCBzOSA9IG5ldyBEYXRlKGUxMS5nZXRUaW1lKCkgLSByMTEpLCBpMTEgPSBEMihuMTMudHosIHM5KTsKICAgICAgaWYgKGkxMSAtIHIxMSA9PT0gMCkgcmV0dXJuIHM5OwogICAgICB7CiAgICAgICAgbGV0IGE1ID0gbmV3IERhdGUoZTExLmdldFRpbWUoKSAtIGkxMSksIGw2ID0gRDIobjEzLnR6LCBhNSk7CiAgICAgICAgaWYgKGw2IC0gaTExID09PSAwKSByZXR1cm4gYTU7CiAgICAgICAgaWYgKCF0OSAmJiBsNiAtIGkxMSA+IDApIHJldHVybiBhNTsKICAgICAgICBpZiAodDkpIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkYXRlIHBhc3NlZCB0byBmcm9tVFooKSIpOwogICAgICAgIHJldHVybiBzOTsKICAgICAgfQogICAgfTsKICAgIGgzLnRvVFogPSBmdW5jdGlvbihuMTMsIHQ5KSB7CiAgICAgIGxldCBlMTEgPSBuMTMudG9Mb2NhbGVTdHJpbmcoImVuLVVTIiwgeyB0aW1lWm9uZTogdDkgfSkucmVwbGFjZSgvW1x1MjAyZl0vLCAiICIpLCByMTEgPSBuZXcgRGF0ZShlMTEpOwogICAgICByZXR1cm4geyB5OiByMTEuZ2V0RnVsbFllYXIoKSwgbTogcjExLmdldE1vbnRoKCkgKyAxLCBkOiByMTEuZ2V0RGF0ZSgpLCBoOiByMTEuZ2V0SG91cnMoKSwgaTogcjExLmdldE1pbnV0ZXMoKSwgczogcjExLmdldFNlY29uZHMoKSwgdHo6IHQ5IH07CiAgICB9OwogICAgaDMudHAgPSAobjEzLCB0OSwgZTExLCByMTEsIHM5LCBpMTEsIGE1KSA9PiAoeyB5OiBuMTMsIG06IHQ5LCBkOiBlMTEsIGg6IHIxMSwgaTogczksIHM6IGkxMSwgdHo6IGE1IH0pOwogICAgaDMubWluaXR6ID0gaDM7CiAgICBiMyA9IDMyLCBwMyA9IDMxIHwgYjMsIHYyID0gWzEsIDIsIDQsIDgsIDE2XSwgZDMgPSBjbGFzcyB7CiAgICAgIHBhdHRlcm47CiAgICAgIHRpbWV6b25lOwogICAgICBzZWNvbmQ7CiAgICAgIG1pbnV0ZTsKICAgICAgaG91cjsKICAgICAgZGF5OwogICAgICBtb250aDsKICAgICAgZGF5T2ZXZWVrOwogICAgICBsYXN0RGF5T2ZNb250aDsKICAgICAgc3RhckRPTTsKICAgICAgc3RhckRPVzsKICAgICAgY29uc3RydWN0b3IodDksIGUxMSkgewogICAgICAgIHRoaXMucGF0dGVybiA9IHQ5LCB0aGlzLnRpbWV6b25lID0gZTExLCB0aGlzLnNlY29uZCA9IEFycmF5KDYwKS5maWxsKDApLCB0aGlzLm1pbnV0ZSA9IEFycmF5KDYwKS5maWxsKDApLCB0aGlzLmhvdXIgPSBBcnJheSgyNCkuZmlsbCgwKSwgdGhpcy5kYXkgPSBBcnJheSgzMSkuZmlsbCgwKSwgdGhpcy5tb250aCA9IEFycmF5KDEyKS5maWxsKDApLCB0aGlzLmRheU9mV2VlayA9IEFycmF5KDcpLmZpbGwoMCksIHRoaXMubGFzdERheU9mTW9udGggPSBmYWxzZSwgdGhpcy5zdGFyRE9NID0gZmFsc2UsIHRoaXMuc3RhckRPVyA9IGZhbHNlLCB0aGlzLnBhcnNlKCk7CiAgICAgIH0KICAgICAgcGFyc2UoKSB7CiAgICAgICAgaWYgKCEodHlwZW9mIHRoaXMucGF0dGVybiA9PSAic3RyaW5nIiB8fCB0aGlzLnBhdHRlcm4gaW5zdGFuY2VvZiBTdHJpbmcpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogUGF0dGVybiBoYXMgdG8gYmUgb2YgdHlwZSBzdHJpbmcuIik7CiAgICAgICAgdGhpcy5wYXR0ZXJuLmluZGV4T2YoIkAiKSA+PSAwICYmICh0aGlzLnBhdHRlcm4gPSB0aGlzLmhhbmRsZU5pY2tuYW1lcyh0aGlzLnBhdHRlcm4pLnRyaW0oKSk7CiAgICAgICAgbGV0IHQ5ID0gdGhpcy5wYXR0ZXJuLnJlcGxhY2UoL1xzKy9nLCAiICIpLnNwbGl0KCIgIik7CiAgICAgICAgaWYgKHQ5Lmxlbmd0aCA8IDUgfHwgdDkubGVuZ3RoID4gNikgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IGludmFsaWQgY29uZmlndXJhdGlvbiBmb3JtYXQgKCciICsgdGhpcy5wYXR0ZXJuICsgIicpLCBleGFjdGx5IGZpdmUgb3Igc2l4IHNwYWNlIHNlcGFyYXRlZCBwYXJ0cyBhcmUgcmVxdWlyZWQuIik7CiAgICAgICAgaWYgKHQ5Lmxlbmd0aCA9PT0gNSAmJiB0OS51bnNoaWZ0KCIwIiksIHQ5WzNdLmluZGV4T2YoIkwiKSA+PSAwICYmICh0OVszXSA9IHQ5WzNdLnJlcGxhY2UoIkwiLCAiIiksIHRoaXMubGFzdERheU9mTW9udGggPSB0cnVlKSwgdDlbM10gPT0gIioiICYmICh0aGlzLnN0YXJET00gPSB0cnVlKSwgdDlbNF0ubGVuZ3RoID49IDMgJiYgKHQ5WzRdID0gdGhpcy5yZXBsYWNlQWxwaGFNb250aHModDlbNF0pKSwgdDlbNV0ubGVuZ3RoID49IDMgJiYgKHQ5WzVdID0gdGhpcy5yZXBsYWNlQWxwaGFEYXlzKHQ5WzVdKSksIHQ5WzVdID09ICIqIiAmJiAodGhpcy5zdGFyRE9XID0gdHJ1ZSksIHRoaXMucGF0dGVybi5pbmRleE9mKCI/IikgPj0gMCkgewogICAgICAgICAgbGV0IGUxMSA9IG5ldyBmMygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgdGhpcy50aW1lem9uZSkuZ2V0RGF0ZSh0cnVlKTsKICAgICAgICAgIHQ5WzBdID0gdDlbMF0ucmVwbGFjZSgiPyIsIGUxMS5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSksIHQ5WzFdID0gdDlbMV0ucmVwbGFjZSgiPyIsIGUxMS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSksIHQ5WzJdID0gdDlbMl0ucmVwbGFjZSgiPyIsIGUxMS5nZXRIb3VycygpLnRvU3RyaW5nKCkpLCB0aGlzLnN0YXJET00gfHwgKHQ5WzNdID0gdDlbM10ucmVwbGFjZSgiPyIsIGUxMS5nZXREYXRlKCkudG9TdHJpbmcoKSkpLCB0OVs0XSA9IHQ5WzRdLnJlcGxhY2UoIj8iLCAoZTExLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpKSwgdGhpcy5zdGFyRE9XIHx8ICh0OVs1XSA9IHQ5WzVdLnJlcGxhY2UoIj8iLCBlMTEuZ2V0RGF5KCkudG9TdHJpbmcoKSkpOwogICAgICAgIH0KICAgICAgICB0aGlzLnRocm93QXRJbGxlZ2FsQ2hhcmFjdGVycyh0OSksIHRoaXMucGFydFRvQXJyYXkoInNlY29uZCIsIHQ5WzBdLCAwLCAxKSwgdGhpcy5wYXJ0VG9BcnJheSgibWludXRlIiwgdDlbMV0sIDAsIDEpLCB0aGlzLnBhcnRUb0FycmF5KCJob3VyIiwgdDlbMl0sIDAsIDEpLCB0aGlzLnBhcnRUb0FycmF5KCJkYXkiLCB0OVszXSwgLTEsIDEpLCB0aGlzLnBhcnRUb0FycmF5KCJtb250aCIsIHQ5WzRdLCAtMSwgMSksIHRoaXMucGFydFRvQXJyYXkoImRheU9mV2VlayIsIHQ5WzVdLCAwLCBwMyksIHRoaXMuZGF5T2ZXZWVrWzddICYmICh0aGlzLmRheU9mV2Vla1swXSA9IHRoaXMuZGF5T2ZXZWVrWzddKTsKICAgICAgfQogICAgICBwYXJ0VG9BcnJheSh0OSwgZTExLCByMTEsIHM5KSB7CiAgICAgICAgbGV0IGkxMSA9IHRoaXNbdDldLCBhNSA9IHQ5ID09PSAiZGF5IiAmJiB0aGlzLmxhc3REYXlPZk1vbnRoOwogICAgICAgIGlmIChlMTEgPT09ICIiICYmICFhNSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IGNvbmZpZ3VyYXRpb24gZW50cnkgIiArIHQ5ICsgIiAoIiArIGUxMSArICIpIGlzIGVtcHR5LCBjaGVjayBmb3IgdHJhaWxpbmcgc3BhY2VzLiIpOwogICAgICAgIGlmIChlMTEgPT09ICIqIikgcmV0dXJuIGkxMS5maWxsKHM5KTsKICAgICAgICBsZXQgbDYgPSBlMTEuc3BsaXQoIiwiKTsKICAgICAgICBpZiAobDYubGVuZ3RoID4gMSkgZm9yIChsZXQgbzEzID0gMDsgbzEzIDwgbDYubGVuZ3RoOyBvMTMrKykgdGhpcy5wYXJ0VG9BcnJheSh0OSwgbDZbbzEzXSwgcjExLCBzOSk7CiAgICAgICAgZWxzZSBlMTEuaW5kZXhPZigiLSIpICE9PSAtMSAmJiBlMTEuaW5kZXhPZigiLyIpICE9PSAtMSA/IHRoaXMuaGFuZGxlUmFuZ2VXaXRoU3RlcHBpbmcoZTExLCB0OSwgcjExLCBzOSkgOiBlMTEuaW5kZXhPZigiLSIpICE9PSAtMSA/IHRoaXMuaGFuZGxlUmFuZ2UoZTExLCB0OSwgcjExLCBzOSkgOiBlMTEuaW5kZXhPZigiLyIpICE9PSAtMSA/IHRoaXMuaGFuZGxlU3RlcHBpbmcoZTExLCB0OSwgcjExLCBzOSkgOiBlMTEgIT09ICIiICYmIHRoaXMuaGFuZGxlTnVtYmVyKGUxMSwgdDksIHIxMSwgczkpOwogICAgICB9CiAgICAgIHRocm93QXRJbGxlZ2FsQ2hhcmFjdGVycyh0OSkgewogICAgICAgIGZvciAobGV0IGUxMSA9IDA7IGUxMSA8IHQ5Lmxlbmd0aDsgZTExKyspIGlmICgoZTExID09PSA1ID8gL1teLyowLTksXC0jTF0rLyA6IC9bXi8qMC05LC1dKy8pLnRlc3QodDlbZTExXSkpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBjb25maWd1cmF0aW9uIGVudHJ5ICIgKyBlMTEgKyAiICgiICsgdDlbZTExXSArICIpIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTsKICAgICAgfQogICAgICBoYW5kbGVOdW1iZXIodDksIGUxMSwgcjExLCBzOSkgewogICAgICAgIGxldCBpMTEgPSB0aGlzLmV4dHJhY3ROdGgodDksIGUxMSksIGE1ID0gcGFyc2VJbnQoaTExWzBdLCAxMCkgKyByMTE7CiAgICAgICAgaWYgKGlzTmFOKGE1KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46ICIgKyBlMTEgKyAiIGlzIG5vdCBhIG51bWJlcjogJyIgKyB0OSArICInIik7CiAgICAgICAgdGhpcy5zZXRQYXJ0KGUxMSwgYTUsIGkxMVsxXSB8fCBzOSk7CiAgICAgIH0KICAgICAgc2V0UGFydCh0OSwgZTExLCByMTEpIHsKICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCB0OSkpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHBhcnQgc3BlY2lmaWVkOiAiICsgdDkpOwogICAgICAgIGlmICh0OSA9PT0gImRheU9mV2VlayIpIHsKICAgICAgICAgIGlmIChlMTEgPT09IDcgJiYgKGUxMSA9IDApLCBlMTEgPCAwIHx8IGUxMSA+IDYpIHRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgZGF5T2ZXZWVrOiAiICsgZTExKTsKICAgICAgICAgIHRoaXMuc2V0TnRoV2Vla2RheU9mTW9udGgoZTExLCByMTEpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodDkgPT09ICJzZWNvbmQiIHx8IHQ5ID09PSAibWludXRlIikgewogICAgICAgICAgaWYgKGUxMSA8IDAgfHwgZTExID49IDYwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIgKyB0OSArICI6ICIgKyBlMTEpOwogICAgICAgIH0gZWxzZSBpZiAodDkgPT09ICJob3VyIikgewogICAgICAgICAgaWYgKGUxMSA8IDAgfHwgZTExID49IDI0KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIgKyB0OSArICI6ICIgKyBlMTEpOwogICAgICAgIH0gZWxzZSBpZiAodDkgPT09ICJkYXkiKSB7CiAgICAgICAgICBpZiAoZTExIDwgMCB8fCBlMTEgPj0gMzEpIHRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgIiArIHQ5ICsgIjogIiArIGUxMSk7CiAgICAgICAgfSBlbHNlIGlmICh0OSA9PT0gIm1vbnRoIiAmJiAoZTExIDwgMCB8fCBlMTEgPj0gMTIpKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIgKyB0OSArICI6ICIgKyBlMTEpOwogICAgICAgIHRoaXNbdDldW2UxMV0gPSByMTE7CiAgICAgIH0KICAgICAgaGFuZGxlUmFuZ2VXaXRoU3RlcHBpbmcodDksIGUxMSwgcjExLCBzOSkgewogICAgICAgIGxldCBpMTEgPSB0aGlzLmV4dHJhY3ROdGgodDksIGUxMSksIGE1ID0gaTExWzBdLm1hdGNoKC9eKFxkKyktKFxkKylcLyhcZCspJC8pOwogICAgICAgIGlmIChhNSA9PT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCByYW5nZSB3aXRoIHN0ZXBwaW5nOiAnIiArIHQ5ICsgIiciKTsKICAgICAgICBsZXQgWywgbDYsIG8xMywgdTddID0gYTUsIGMxMSA9IHBhcnNlSW50KGw2LCAxMCkgKyByMTEsIHczID0gcGFyc2VJbnQobzEzLCAxMCkgKyByMTEsIEMzID0gcGFyc2VJbnQodTcsIDEwKTsKICAgICAgICBpZiAoaXNOYU4oYzExKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBsb3dlciByYW5nZSAoTmFOKSIpOwogICAgICAgIGlmIChpc05hTih3MykpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgdXBwZXIgcmFuZ2UgKE5hTikiKTsKICAgICAgICBpZiAoaXNOYU4oQzMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAoTmFOKSIpOwogICAgICAgIGlmIChDMyA9PT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogMCIpOwogICAgICAgIGlmIChDMyA+IHRoaXNbZTExXS5sZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIHN0ZXBzIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gbWF4aW11bSB2YWx1ZSBvZiBwYXJ0ICgiICsgdGhpc1tlMTFdLmxlbmd0aCArICIpIik7CiAgICAgICAgaWYgKGMxMSA+IHczKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogRnJvbSB2YWx1ZSBpcyBsYXJnZXIgdGhhbiB0byB2YWx1ZTogJyIgKyB0OSArICInIik7CiAgICAgICAgZm9yIChsZXQgVDMgPSBjMTE7IFQzIDw9IHczOyBUMyArPSBDMykgdGhpcy5zZXRQYXJ0KGUxMSwgVDMsIGkxMVsxXSB8fCBzOSk7CiAgICAgIH0KICAgICAgZXh0cmFjdE50aCh0OSwgZTExKSB7CiAgICAgICAgbGV0IHIxMSA9IHQ5LCBzOTsKICAgICAgICBpZiAocjExLmluY2x1ZGVzKCIjIikpIHsKICAgICAgICAgIGlmIChlMTEgIT09ICJkYXlPZldlZWsiKSB0aHJvdyBuZXcgRXJyb3IoIkNyb25QYXR0ZXJuOiBudGggKCMpIG9ubHkgYWxsb3dlZCBpbiBkYXktb2Ytd2VlayBmaWVsZCIpOwogICAgICAgICAgczkgPSByMTEuc3BsaXQoIiMiKVsxXSwgcjExID0gcjExLnNwbGl0KCIjIilbMF07CiAgICAgICAgfQogICAgICAgIHJldHVybiBbcjExLCBzOV07CiAgICAgIH0KICAgICAgaGFuZGxlUmFuZ2UodDksIGUxMSwgcjExLCBzOSkgewogICAgICAgIGxldCBpMTEgPSB0aGlzLmV4dHJhY3ROdGgodDksIGUxMSksIGE1ID0gaTExWzBdLnNwbGl0KCItIik7CiAgICAgICAgaWYgKGE1Lmxlbmd0aCAhPT0gMikgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCByYW5nZTogJyIgKyB0OSArICInIik7CiAgICAgICAgbGV0IGw2ID0gcGFyc2VJbnQoYTVbMF0sIDEwKSArIHIxMSwgbzEzID0gcGFyc2VJbnQoYTVbMV0sIDEwKSArIHIxMTsKICAgICAgICBpZiAoaXNOYU4obDYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIGxvd2VyIHJhbmdlIChOYU4pIik7CiAgICAgICAgaWYgKGlzTmFOKG8xMykpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgdXBwZXIgcmFuZ2UgKE5hTikiKTsKICAgICAgICBpZiAobDYgPiBvMTMpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBGcm9tIHZhbHVlIGlzIGxhcmdlciB0aGFuIHRvIHZhbHVlOiAnIiArIHQ5ICsgIiciKTsKICAgICAgICBmb3IgKGxldCB1NyA9IGw2OyB1NyA8PSBvMTM7IHU3KyspIHRoaXMuc2V0UGFydChlMTEsIHU3LCBpMTFbMV0gfHwgczkpOwogICAgICB9CiAgICAgIGhhbmRsZVN0ZXBwaW5nKHQ5LCBlMTEsIHIxMSwgczkpIHsKICAgICAgICBsZXQgaTExID0gdGhpcy5leHRyYWN0TnRoKHQ5LCBlMTEpLCBhNSA9IGkxMVswXS5zcGxpdCgiLyIpOwogICAgICAgIGlmIChhNS5sZW5ndGggIT09IDIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgc3RlcHBpbmc6ICciICsgdDkgKyAiJyIpOwogICAgICAgIGE1WzBdID09PSAiIiAmJiAoYTVbMF0gPSAiKiIpOwogICAgICAgIGxldCBsNiA9IDA7CiAgICAgICAgYTVbMF0gIT09ICIqIiAmJiAobDYgPSBwYXJzZUludChhNVswXSwgMTApICsgcjExKTsKICAgICAgICBsZXQgbzEzID0gcGFyc2VJbnQoYTVbMV0sIDEwKTsKICAgICAgICBpZiAoaXNOYU4obzEzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogKE5hTikiKTsKICAgICAgICBpZiAobzEzID09PSAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAwIik7CiAgICAgICAgaWYgKG8xMyA+IHRoaXNbZTExXS5sZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIG1heCBzdGVwcyBmb3IgcGFydCBpcyAoIiArIHRoaXNbZTExXS5sZW5ndGggKyAiKSIpOwogICAgICAgIGZvciAobGV0IHU3ID0gbDY7IHU3IDwgdGhpc1tlMTFdLmxlbmd0aDsgdTcgKz0gbzEzKSB0aGlzLnNldFBhcnQoZTExLCB1NywgaTExWzFdIHx8IHM5KTsKICAgICAgfQogICAgICByZXBsYWNlQWxwaGFEYXlzKHQ5KSB7CiAgICAgICAgcmV0dXJuIHQ5LnJlcGxhY2UoLy1zdW4vZ2ksICItNyIpLnJlcGxhY2UoL3N1bi9naSwgIjAiKS5yZXBsYWNlKC9tb24vZ2ksICIxIikucmVwbGFjZSgvdHVlL2dpLCAiMiIpLnJlcGxhY2UoL3dlZC9naSwgIjMiKS5yZXBsYWNlKC90aHUvZ2ksICI0IikucmVwbGFjZSgvZnJpL2dpLCAiNSIpLnJlcGxhY2UoL3NhdC9naSwgIjYiKTsKICAgICAgfQogICAgICByZXBsYWNlQWxwaGFNb250aHModDkpIHsKICAgICAgICByZXR1cm4gdDkucmVwbGFjZSgvamFuL2dpLCAiMSIpLnJlcGxhY2UoL2ZlYi9naSwgIjIiKS5yZXBsYWNlKC9tYXIvZ2ksICIzIikucmVwbGFjZSgvYXByL2dpLCAiNCIpLnJlcGxhY2UoL21heS9naSwgIjUiKS5yZXBsYWNlKC9qdW4vZ2ksICI2IikucmVwbGFjZSgvanVsL2dpLCAiNyIpLnJlcGxhY2UoL2F1Zy9naSwgIjgiKS5yZXBsYWNlKC9zZXAvZ2ksICI5IikucmVwbGFjZSgvb2N0L2dpLCAiMTAiKS5yZXBsYWNlKC9ub3YvZ2ksICIxMSIpLnJlcGxhY2UoL2RlYy9naSwgIjEyIik7CiAgICAgIH0KICAgICAgaGFuZGxlTmlja25hbWVzKHQ5KSB7CiAgICAgICAgbGV0IGUxMSA9IHQ5LnRyaW0oKS50b0xvd2VyQ2FzZSgpOwogICAgICAgIHJldHVybiBlMTEgPT09ICJAeWVhcmx5IiB8fCBlMTEgPT09ICJAYW5udWFsbHkiID8gIjAgMCAxIDEgKiIgOiBlMTEgPT09ICJAbW9udGhseSIgPyAiMCAwIDEgKiAqIiA6IGUxMSA9PT0gIkB3ZWVrbHkiID8gIjAgMCAqICogMCIgOiBlMTEgPT09ICJAZGFpbHkiID8gIjAgMCAqICogKiIgOiBlMTEgPT09ICJAaG91cmx5IiA/ICIwICogKiAqICoiIDogdDk7CiAgICAgIH0KICAgICAgc2V0TnRoV2Vla2RheU9mTW9udGgodDksIGUxMSkgewogICAgICAgIGlmICh0eXBlb2YgZTExICE9ICJudW1iZXIiICYmIGUxMSA9PT0gIkwiKSB0aGlzLmRheU9mV2Vla1t0OV0gPSB0aGlzLmRheU9mV2Vla1t0OV0gfCBiMzsKICAgICAgICBlbHNlIGlmIChlMTEgPT09IHAzKSB0aGlzLmRheU9mV2Vla1t0OV0gPSBwMzsKICAgICAgICBlbHNlIGlmIChlMTEgPCA2ICYmIGUxMSA+IDApIHRoaXMuZGF5T2ZXZWVrW3Q5XSA9IHRoaXMuZGF5T2ZXZWVrW3Q5XSB8IHYyW2UxMSAtIDFdOwogICAgICAgIGVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ3JvblBhdHRlcm46IG50aCB3ZWVrZGF5IG91dCBvZiByYW5nZSwgc2hvdWxkIGJlIDEtNSBvciBMLiBWYWx1ZTogJHtlMTF9LCBUeXBlOiAke3R5cGVvZiBlMTF9YCk7CiAgICAgIH0KICAgIH07CiAgICBPID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdLCBtMiA9IFtbIm1vbnRoIiwgInllYXIiLCAwXSwgWyJkYXkiLCAibW9udGgiLCAtMV0sIFsiaG91ciIsICJkYXkiLCAwXSwgWyJtaW51dGUiLCAiaG91ciIsIDBdLCBbInNlY29uZCIsICJtaW51dGUiLCAwXV0sIGYzID0gY2xhc3MgbjYgewogICAgICB0ejsKICAgICAgbXM7CiAgICAgIHNlY29uZDsKICAgICAgbWludXRlOwogICAgICBob3VyOwogICAgICBkYXk7CiAgICAgIG1vbnRoOwogICAgICB5ZWFyOwogICAgICBjb25zdHJ1Y3Rvcih0OSwgZTExKSB7CiAgICAgICAgaWYgKHRoaXMudHogPSBlMTEsIHQ5ICYmIHQ5IGluc3RhbmNlb2YgRGF0ZSkgaWYgKCFpc05hTih0OSkpIHRoaXMuZnJvbURhdGUodDkpOwogICAgICAgIGVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvbkRhdGU6IEludmFsaWQgZGF0ZSBwYXNzZWQgdG8gQ3JvbkRhdGUgY29uc3RydWN0b3IiKTsKICAgICAgICBlbHNlIGlmICh0OSA9PT0gdm9pZCAwKSB0aGlzLmZyb21EYXRlKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKTsKICAgICAgICBlbHNlIGlmICh0OSAmJiB0eXBlb2YgdDkgPT0gInN0cmluZyIpIHRoaXMuZnJvbVN0cmluZyh0OSk7CiAgICAgICAgZWxzZSBpZiAodDkgaW5zdGFuY2VvZiBuNikgdGhpcy5mcm9tQ3JvbkRhdGUodDkpOwogICAgICAgIGVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvbkRhdGU6IEludmFsaWQgdHlwZSAoIiArIHR5cGVvZiB0OSArICIpIHBhc3NlZCB0byBDcm9uRGF0ZSBjb25zdHJ1Y3RvciIpOwogICAgICB9CiAgICAgIGlzTnRoV2Vla2RheU9mTW9udGgodDksIGUxMSwgcjExLCBzOSkgewogICAgICAgIGxldCBhNSA9IG5ldyBEYXRlKERhdGUuVVRDKHQ5LCBlMTEsIHIxMSkpLmdldFVUQ0RheSgpLCBsNiA9IDA7CiAgICAgICAgZm9yIChsZXQgbzEzID0gMTsgbzEzIDw9IHIxMTsgbzEzKyspIG5ldyBEYXRlKERhdGUuVVRDKHQ5LCBlMTEsIG8xMykpLmdldFVUQ0RheSgpID09PSBhNSAmJiBsNisrOwogICAgICAgIGlmIChzOSAmIHAzICYmIHYyW2w2IC0gMV0gJiBzOSkgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKHM5ICYgYjMpIHsKICAgICAgICAgIGxldCBvMTMgPSBuZXcgRGF0ZShEYXRlLlVUQyh0OSwgZTExICsgMSwgMCkpLmdldFVUQ0RhdGUoKTsKICAgICAgICAgIGZvciAobGV0IHU3ID0gcjExICsgMTsgdTcgPD0gbzEzOyB1NysrKSBpZiAobmV3IERhdGUoRGF0ZS5VVEModDksIGUxMSwgdTcpKS5nZXRVVENEYXkoKSA9PT0gYTUpIHJldHVybiBmYWxzZTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgZnJvbURhdGUodDkpIHsKICAgICAgICBpZiAodGhpcy50eiAhPT0gdm9pZCAwKSBpZiAodHlwZW9mIHRoaXMudHogPT0gIm51bWJlciIpIHRoaXMubXMgPSB0OS5nZXRVVENNaWxsaXNlY29uZHMoKSwgdGhpcy5zZWNvbmQgPSB0OS5nZXRVVENTZWNvbmRzKCksIHRoaXMubWludXRlID0gdDkuZ2V0VVRDTWludXRlcygpICsgdGhpcy50eiwgdGhpcy5ob3VyID0gdDkuZ2V0VVRDSG91cnMoKSwgdGhpcy5kYXkgPSB0OS5nZXRVVENEYXRlKCksIHRoaXMubW9udGggPSB0OS5nZXRVVENNb250aCgpLCB0aGlzLnllYXIgPSB0OS5nZXRVVENGdWxsWWVhcigpLCB0aGlzLmFwcGx5KCk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBsZXQgZTExID0gaDMudG9UWih0OSwgdGhpcy50eik7CiAgICAgICAgICB0aGlzLm1zID0gdDkuZ2V0TWlsbGlzZWNvbmRzKCksIHRoaXMuc2Vjb25kID0gZTExLnMsIHRoaXMubWludXRlID0gZTExLmksIHRoaXMuaG91ciA9IGUxMS5oLCB0aGlzLmRheSA9IGUxMS5kLCB0aGlzLm1vbnRoID0gZTExLm0gLSAxLCB0aGlzLnllYXIgPSBlMTEueTsKICAgICAgICB9CiAgICAgICAgZWxzZSB0aGlzLm1zID0gdDkuZ2V0TWlsbGlzZWNvbmRzKCksIHRoaXMuc2Vjb25kID0gdDkuZ2V0U2Vjb25kcygpLCB0aGlzLm1pbnV0ZSA9IHQ5LmdldE1pbnV0ZXMoKSwgdGhpcy5ob3VyID0gdDkuZ2V0SG91cnMoKSwgdGhpcy5kYXkgPSB0OS5nZXREYXRlKCksIHRoaXMubW9udGggPSB0OS5nZXRNb250aCgpLCB0aGlzLnllYXIgPSB0OS5nZXRGdWxsWWVhcigpOwogICAgICB9CiAgICAgIGZyb21Dcm9uRGF0ZSh0OSkgewogICAgICAgIHRoaXMudHogPSB0OS50eiwgdGhpcy55ZWFyID0gdDkueWVhciwgdGhpcy5tb250aCA9IHQ5Lm1vbnRoLCB0aGlzLmRheSA9IHQ5LmRheSwgdGhpcy5ob3VyID0gdDkuaG91ciwgdGhpcy5taW51dGUgPSB0OS5taW51dGUsIHRoaXMuc2Vjb25kID0gdDkuc2Vjb25kLCB0aGlzLm1zID0gdDkubXM7CiAgICAgIH0KICAgICAgYXBwbHkoKSB7CiAgICAgICAgaWYgKHRoaXMubW9udGggPiAxMSB8fCB0aGlzLmRheSA+IE9bdGhpcy5tb250aF0gfHwgdGhpcy5ob3VyID4gNTkgfHwgdGhpcy5taW51dGUgPiA1OSB8fCB0aGlzLnNlY29uZCA+IDU5IHx8IHRoaXMuaG91ciA8IDAgfHwgdGhpcy5taW51dGUgPCAwIHx8IHRoaXMuc2Vjb25kIDwgMCkgewogICAgICAgICAgbGV0IHQ5ID0gbmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLCB0aGlzLm1vbnRoLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMubXMpKTsKICAgICAgICAgIHJldHVybiB0aGlzLm1zID0gdDkuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHRoaXMuc2Vjb25kID0gdDkuZ2V0VVRDU2Vjb25kcygpLCB0aGlzLm1pbnV0ZSA9IHQ5LmdldFVUQ01pbnV0ZXMoKSwgdGhpcy5ob3VyID0gdDkuZ2V0VVRDSG91cnMoKSwgdGhpcy5kYXkgPSB0OS5nZXRVVENEYXRlKCksIHRoaXMubW9udGggPSB0OS5nZXRVVENNb250aCgpLCB0aGlzLnllYXIgPSB0OS5nZXRVVENGdWxsWWVhcigpLCB0cnVlOwogICAgICAgIH0gZWxzZSByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgZnJvbVN0cmluZyh0OSkgewogICAgICAgIGlmICh0eXBlb2YgdGhpcy50eiA9PSAibnVtYmVyIikgewogICAgICAgICAgbGV0IGUxMSA9IGgzLmZyb21UWklTTyh0OSk7CiAgICAgICAgICB0aGlzLm1zID0gZTExLmdldFVUQ01pbGxpc2Vjb25kcygpLCB0aGlzLnNlY29uZCA9IGUxMS5nZXRVVENTZWNvbmRzKCksIHRoaXMubWludXRlID0gZTExLmdldFVUQ01pbnV0ZXMoKSwgdGhpcy5ob3VyID0gZTExLmdldFVUQ0hvdXJzKCksIHRoaXMuZGF5ID0gZTExLmdldFVUQ0RhdGUoKSwgdGhpcy5tb250aCA9IGUxMS5nZXRVVENNb250aCgpLCB0aGlzLnllYXIgPSBlMTEuZ2V0VVRDRnVsbFllYXIoKSwgdGhpcy5hcHBseSgpOwogICAgICAgIH0gZWxzZSByZXR1cm4gdGhpcy5mcm9tRGF0ZShoMy5mcm9tVFpJU08odDksIHRoaXMudHopKTsKICAgICAgfQogICAgICBmaW5kTmV4dCh0OSwgZTExLCByMTEsIHM5KSB7CiAgICAgICAgbGV0IGkxMSA9IHRoaXNbZTExXSwgYTU7CiAgICAgICAgcjExLmxhc3REYXlPZk1vbnRoICYmICh0aGlzLm1vbnRoICE9PSAxID8gYTUgPSBPW3RoaXMubW9udGhdIDogYTUgPSBuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGggKyAxLCAwLCAwLCAwLCAwLCAwKSkuZ2V0VVRDRGF0ZSgpKTsKICAgICAgICBsZXQgbDYgPSAhcjExLnN0YXJET1cgJiYgZTExID09ICJkYXkiID8gbmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLCB0aGlzLm1vbnRoLCAxLCAwLCAwLCAwLCAwKSkuZ2V0VVRDRGF5KCkgOiB2b2lkIDA7CiAgICAgICAgZm9yIChsZXQgbzEzID0gdGhpc1tlMTFdICsgczk7IG8xMyA8IHIxMVtlMTFdLmxlbmd0aDsgbzEzKyspIHsKICAgICAgICAgIGxldCB1NyA9IHIxMVtlMTFdW28xM107CiAgICAgICAgICBpZiAoZTExID09PSAiZGF5IiAmJiByMTEubGFzdERheU9mTW9udGggJiYgbzEzIC0gczkgPT0gYTUgJiYgKHU3ID0gMSksIGUxMSA9PT0gImRheSIgJiYgIXIxMS5zdGFyRE9XKSB7CiAgICAgICAgICAgIGxldCBjMTEgPSByMTEuZGF5T2ZXZWVrWyhsNiArIChvMTMgLSBzOSAtIDEpKSAlIDddOwogICAgICAgICAgICBpZiAoYzExICYmIGMxMSAmIHAzKSBjMTEgPSB0aGlzLmlzTnRoV2Vla2RheU9mTW9udGgodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCBvMTMgLSBzOSwgYzExKSA/IDEgOiAwOwogICAgICAgICAgICBlbHNlIGlmIChjMTEpIHRocm93IG5ldyBFcnJvcihgQ3JvbkRhdGU6IEludmFsaWQgdmFsdWUgZm9yIGRheU9mV2VlayBlbmNvdW50ZXJlZC4gJHtjMTF9YCk7CiAgICAgICAgICAgIHQ5LmxlZ2FjeU1vZGUgJiYgIXIxMS5zdGFyRE9NID8gdTcgPSB1NyB8fCBjMTEgOiB1NyA9IHU3ICYmIGMxMTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh1NykgcmV0dXJuIHRoaXNbZTExXSA9IG8xMyAtIHM5LCBpMTEgIT09IHRoaXNbZTExXSA/IDIgOiAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gMzsKICAgICAgfQogICAgICByZWN1cnNlKHQ5LCBlMTEsIHIxMSkgewogICAgICAgIGxldCBzOSA9IHRoaXMuZmluZE5leHQoZTExLCBtMltyMTFdWzBdLCB0OSwgbTJbcjExXVsyXSk7CiAgICAgICAgaWYgKHM5ID4gMSkgewogICAgICAgICAgbGV0IGkxMSA9IHIxMSArIDE7CiAgICAgICAgICBmb3IgKDsgaTExIDwgbTIubGVuZ3RoOyApIHRoaXNbbTJbaTExXVswXV0gPSAtbTJbaTExXVsyXSwgaTExKys7CiAgICAgICAgICBpZiAoczkgPT09IDMpIHJldHVybiB0aGlzW20yW3IxMV1bMV1dKyssIHRoaXNbbTJbcjExXVswXV0gPSAtbTJbcjExXVsyXSwgdGhpcy5hcHBseSgpLCB0aGlzLnJlY3Vyc2UodDksIGUxMSwgMCk7CiAgICAgICAgICBpZiAodGhpcy5hcHBseSgpKSByZXR1cm4gdGhpcy5yZWN1cnNlKHQ5LCBlMTEsIHIxMSAtIDEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcjExICs9IDEsIHIxMSA+PSBtMi5sZW5ndGggPyB0aGlzIDogdGhpcy55ZWFyID49IDNlMyA/IG51bGwgOiB0aGlzLnJlY3Vyc2UodDksIGUxMSwgcjExKTsKICAgICAgfQogICAgICBpbmNyZW1lbnQodDksIGUxMSwgcjExKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2Vjb25kICs9IGUxMS5pbnRlcnZhbCAhPT0gdm9pZCAwICYmIGUxMS5pbnRlcnZhbCA+IDEgJiYgcjExID8gZTExLmludGVydmFsIDogMSwgdGhpcy5tcyA9IDAsIHRoaXMuYXBwbHkoKSwgdGhpcy5yZWN1cnNlKHQ5LCBlMTEsIDApOwogICAgICB9CiAgICAgIGdldERhdGUodDkpIHsKICAgICAgICByZXR1cm4gdDkgfHwgdGhpcy50eiA9PT0gdm9pZCAwID8gbmV3IERhdGUodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMubXMpIDogdHlwZW9mIHRoaXMudHogPT0gIm51bWJlciIgPyBuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGgsIHRoaXMuZGF5LCB0aGlzLmhvdXIsIHRoaXMubWludXRlIC0gdGhpcy50eiwgdGhpcy5zZWNvbmQsIHRoaXMubXMpKSA6IGgzLmZyb21UWihoMy50cCh0aGlzLnllYXIsIHRoaXMubW9udGggKyAxLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMudHopLCBmYWxzZSk7CiAgICAgIH0KICAgICAgZ2V0VGltZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRlKGZhbHNlKS5nZXRUaW1lKCk7CiAgICAgIH0KICAgIH07CiAgICBfMiA9IDMwICogMWUzLCB5MyA9IFtdLCBSMiA9IGNsYXNzIHsKICAgICAgbmFtZTsKICAgICAgb3B0aW9uczsKICAgICAgX3N0YXRlczsKICAgICAgZm47CiAgICAgIGNvbnN0cnVjdG9yKHQ5LCBlMTEsIHIxMSkgewogICAgICAgIGxldCBzOSwgaTExOwogICAgICAgIGlmIChnMihlMTEpKSBpMTEgPSBlMTE7CiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGUxMSA9PSAib2JqZWN0IikgczkgPSBlMTE7CiAgICAgICAgZWxzZSBpZiAoZTExICE9PSB2b2lkIDApIHRocm93IG5ldyBFcnJvcigiQ3JvbjogSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgZm9yIG9wdGlvbnNJbi4gU2hvdWxkIGJlIG9uZSBvZiBmdW5jdGlvbiwgb3Igb2JqZWN0IChvcHRpb25zKS4iKTsKICAgICAgICBpZiAoZzIocjExKSkgaTExID0gcjExOwogICAgICAgIGVsc2UgaWYgKHR5cGVvZiByMTEgPT0gIm9iamVjdCIpIHM5ID0gcjExOwogICAgICAgIGVsc2UgaWYgKHIxMSAhPT0gdm9pZCAwKSB0aHJvdyBuZXcgRXJyb3IoIkNyb246IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIGZvciBmdW5jSW4uIFNob3VsZCBiZSBvbmUgb2YgZnVuY3Rpb24sIG9yIG9iamVjdCAob3B0aW9ucykuIik7CiAgICAgICAgaWYgKHRoaXMubmFtZSA9IHM5Py5uYW1lLCB0aGlzLm9wdGlvbnMgPSBOMihzOSksIHRoaXMuX3N0YXRlcyA9IHsga2lsbDogZmFsc2UsIGJsb2NraW5nOiBmYWxzZSwgcHJldmlvdXNSdW46IHZvaWQgMCwgY3VycmVudFJ1bjogdm9pZCAwLCBvbmNlOiB2b2lkIDAsIGN1cnJlbnRUaW1lb3V0OiB2b2lkIDAsIG1heFJ1bnM6IHM5ID8gczkubWF4UnVucyA6IHZvaWQgMCwgcGF1c2VkOiBzOSA/IHM5LnBhdXNlZCA6IGZhbHNlLCBwYXR0ZXJuOiBuZXcgZDMoIiogKiAqICogKiIpIH0sIHQ5ICYmICh0OSBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIHQ5ID09ICJzdHJpbmciICYmIHQ5LmluZGV4T2YoIjoiKSA+IDApID8gdGhpcy5fc3RhdGVzLm9uY2UgPSBuZXcgZjModDksIHRoaXMub3B0aW9ucy50aW1lem9uZSB8fCB0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KSA6IHRoaXMuX3N0YXRlcy5wYXR0ZXJuID0gbmV3IGQzKHQ5LCB0aGlzLm9wdGlvbnMudGltZXpvbmUpLCB0aGlzLm5hbWUpIHsKICAgICAgICAgIGlmICh5My5maW5kKChsNikgPT4gbDYubmFtZSA9PT0gdGhpcy5uYW1lKSkgdGhyb3cgbmV3IEVycm9yKCJDcm9uOiBUcmllZCB0byBpbml0aWFsaXplIG5ldyBuYW1lZCBqb2IgJyIgKyB0aGlzLm5hbWUgKyAiJywgYnV0IG5hbWUgYWxyZWFkeSB0YWtlbi4iKTsKICAgICAgICAgIHkzLnB1c2godGhpcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpMTEgIT09IHZvaWQgMCAmJiBTMyhpMTEpICYmICh0aGlzLmZuID0gaTExLCB0aGlzLnNjaGVkdWxlKCkpLCB0aGlzOwogICAgICB9CiAgICAgIG5leHRSdW4odDkpIHsKICAgICAgICBsZXQgZTExID0gdGhpcy5fbmV4dCh0OSk7CiAgICAgICAgcmV0dXJuIGUxMSA/IGUxMS5nZXREYXRlKGZhbHNlKSA6IG51bGw7CiAgICAgIH0KICAgICAgbmV4dFJ1bnModDksIGUxMSkgewogICAgICAgIHRoaXMuX3N0YXRlcy5tYXhSdW5zICE9PSB2b2lkIDAgJiYgdDkgPiB0aGlzLl9zdGF0ZXMubWF4UnVucyAmJiAodDkgPSB0aGlzLl9zdGF0ZXMubWF4UnVucyk7CiAgICAgICAgbGV0IHIxMSA9IFtdLCBzOSA9IGUxMSB8fCB0aGlzLl9zdGF0ZXMuY3VycmVudFJ1biB8fCB2b2lkIDA7CiAgICAgICAgZm9yICg7IHQ5LS0gJiYgKHM5ID0gdGhpcy5uZXh0UnVuKHM5KSk7ICkgcjExLnB1c2goczkpOwogICAgICAgIHJldHVybiByMTE7CiAgICAgIH0KICAgICAgZ2V0UGF0dGVybigpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnBhdHRlcm4gPyB0aGlzLl9zdGF0ZXMucGF0dGVybi5wYXR0ZXJuIDogdm9pZCAwOwogICAgICB9CiAgICAgIGlzUnVubmluZygpIHsKICAgICAgICBsZXQgdDkgPSB0aGlzLm5leHRSdW4odGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4pLCBlMTEgPSAhdGhpcy5fc3RhdGVzLnBhdXNlZCwgcjExID0gdGhpcy5mbiAhPT0gdm9pZCAwLCBzOSA9ICF0aGlzLl9zdGF0ZXMua2lsbDsKICAgICAgICByZXR1cm4gZTExICYmIHIxMSAmJiBzOSAmJiB0OSAhPT0gbnVsbDsKICAgICAgfQogICAgICBpc1N0b3BwZWQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5raWxsOwogICAgICB9CiAgICAgIGlzQnVzeSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLmJsb2NraW5nOwogICAgICB9CiAgICAgIGN1cnJlbnRSdW4oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuID8gdGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4uZ2V0RGF0ZSgpIDogbnVsbDsKICAgICAgfQogICAgICBwcmV2aW91c1J1bigpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuID8gdGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuLmdldERhdGUoKSA6IG51bGw7CiAgICAgIH0KICAgICAgbXNUb05leHQodDkpIHsKICAgICAgICBsZXQgZTExID0gdGhpcy5fbmV4dCh0OSk7CiAgICAgICAgcmV0dXJuIGUxMSA/IHQ5IGluc3RhbmNlb2YgZjMgfHwgdDkgaW5zdGFuY2VvZiBEYXRlID8gZTExLmdldFRpbWUoKSAtIHQ5LmdldFRpbWUoKSA6IGUxMS5nZXRUaW1lKCkgLSBuZXcgZjModDkpLmdldFRpbWUoKSA6IG51bGw7CiAgICAgIH0KICAgICAgc3RvcCgpIHsKICAgICAgICB0aGlzLl9zdGF0ZXMua2lsbCA9IHRydWUsIHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCAmJiBjbGVhclRpbWVvdXQodGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0KTsKICAgICAgICBsZXQgdDkgPSB5My5pbmRleE9mKHRoaXMpOwogICAgICAgIHQ5ID49IDAgJiYgeTMuc3BsaWNlKHQ5LCAxKTsKICAgICAgfQogICAgICBwYXVzZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnBhdXNlZCA9IHRydWUsICF0aGlzLl9zdGF0ZXMua2lsbDsKICAgICAgfQogICAgICByZXN1bWUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5wYXVzZWQgPSBmYWxzZSwgIXRoaXMuX3N0YXRlcy5raWxsOwogICAgICB9CiAgICAgIHNjaGVkdWxlKHQ5KSB7CiAgICAgICAgaWYgKHQ5ICYmIHRoaXMuZm4pIHRocm93IG5ldyBFcnJvcigiQ3JvbjogSXQgaXMgbm90IGFsbG93ZWQgdG8gc2NoZWR1bGUgdHdvIGZ1bmN0aW9ucyB1c2luZyB0aGUgc2FtZSBDcm9uZXIgaW5zdGFuY2UuIik7CiAgICAgICAgdDkgJiYgKHRoaXMuZm4gPSB0OSk7CiAgICAgICAgbGV0IGUxMSA9IHRoaXMubXNUb05leHQoKSwgcjExID0gdGhpcy5uZXh0UnVuKHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuKTsKICAgICAgICByZXR1cm4gZTExID09IG51bGwgfHwgaXNOYU4oZTExKSB8fCByMTEgPT09IG51bGwgPyB0aGlzIDogKGUxMSA+IF8yICYmIChlMTEgPSBfMiksIHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fY2hlY2tUcmlnZ2VyKHIxMSksIGUxMSksIHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCAmJiB0aGlzLm9wdGlvbnMudW5yZWYgJiYgUDIodGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0KSwgdGhpcyk7CiAgICAgIH0KICAgICAgYXN5bmMgX3RyaWdnZXIodDkpIHsKICAgICAgICBpZiAodGhpcy5fc3RhdGVzLmJsb2NraW5nID0gdHJ1ZSwgdGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4gPSBuZXcgZjModm9pZCAwLCB0aGlzLm9wdGlvbnMudGltZXpvbmUgfHwgdGhpcy5vcHRpb25zLnV0Y09mZnNldCksIHRoaXMub3B0aW9ucy5jYXRjaCkgdHJ5IHsKICAgICAgICAgIHRoaXMuZm4gIT09IHZvaWQgMCAmJiBhd2FpdCB0aGlzLmZuKHRoaXMsIHRoaXMub3B0aW9ucy5jb250ZXh0KTsKICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICAgIGcyKHRoaXMub3B0aW9ucy5jYXRjaCkgJiYgdGhpcy5vcHRpb25zLmNhdGNoKGUxMSwgdGhpcyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgdGhpcy5mbiAhPT0gdm9pZCAwICYmIGF3YWl0IHRoaXMuZm4odGhpcywgdGhpcy5vcHRpb25zLmNvbnRleHQpOwogICAgICAgIHRoaXMuX3N0YXRlcy5wcmV2aW91c1J1biA9IG5ldyBmMyh0OSwgdGhpcy5vcHRpb25zLnRpbWV6b25lIHx8IHRoaXMub3B0aW9ucy51dGNPZmZzZXQpLCB0aGlzLl9zdGF0ZXMuYmxvY2tpbmcgPSBmYWxzZTsKICAgICAgfQogICAgICBhc3luYyB0cmlnZ2VyKCkgewogICAgICAgIGF3YWl0IHRoaXMuX3RyaWdnZXIoKTsKICAgICAgfQogICAgICBydW5zTGVmdCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLm1heFJ1bnM7CiAgICAgIH0KICAgICAgX2NoZWNrVHJpZ2dlcih0OSkgewogICAgICAgIGxldCBlMTEgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgcjExID0gIXRoaXMuX3N0YXRlcy5wYXVzZWQgJiYgZTExLmdldFRpbWUoKSA+PSB0OS5nZXRUaW1lKCksIHM5ID0gdGhpcy5fc3RhdGVzLmJsb2NraW5nICYmIHRoaXMub3B0aW9ucy5wcm90ZWN0OwogICAgICAgIHIxMSAmJiAhczkgPyAodGhpcy5fc3RhdGVzLm1heFJ1bnMgIT09IHZvaWQgMCAmJiB0aGlzLl9zdGF0ZXMubWF4UnVucy0tLCB0aGlzLl90cmlnZ2VyKCkpIDogcjExICYmIHM5ICYmIGcyKHRoaXMub3B0aW9ucy5wcm90ZWN0KSAmJiBzZXRUaW1lb3V0KCgpID0+IHRoaXMub3B0aW9ucy5wcm90ZWN0KHRoaXMpLCAwKSwgdGhpcy5zY2hlZHVsZSgpOwogICAgICB9CiAgICAgIF9uZXh0KHQ5KSB7CiAgICAgICAgbGV0IGUxMSA9ICEhKHQ5IHx8IHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuKSwgcjExID0gZmFsc2U7CiAgICAgICAgIXQ5ICYmIHRoaXMub3B0aW9ucy5zdGFydEF0ICYmIHRoaXMub3B0aW9ucy5pbnRlcnZhbCAmJiAoW3Q5LCBlMTFdID0gdGhpcy5fY2FsY3VsYXRlUHJldmlvdXNSdW4odDksIGUxMSksIHIxMSA9ICF0OSksIHQ5ID0gbmV3IGYzKHQ5LCB0aGlzLm9wdGlvbnMudGltZXpvbmUgfHwgdGhpcy5vcHRpb25zLnV0Y09mZnNldCksIHRoaXMub3B0aW9ucy5zdGFydEF0ICYmIHQ5ICYmIHQ5LmdldFRpbWUoKSA8IHRoaXMub3B0aW9ucy5zdGFydEF0LmdldFRpbWUoKSAmJiAodDkgPSB0aGlzLm9wdGlvbnMuc3RhcnRBdCk7CiAgICAgICAgbGV0IHM5ID0gdGhpcy5fc3RhdGVzLm9uY2UgfHwgbmV3IGYzKHQ5LCB0aGlzLm9wdGlvbnMudGltZXpvbmUgfHwgdGhpcy5vcHRpb25zLnV0Y09mZnNldCk7CiAgICAgICAgcmV0dXJuICFyMTEgJiYgczkgIT09IHRoaXMuX3N0YXRlcy5vbmNlICYmIChzOSA9IHM5LmluY3JlbWVudCh0aGlzLl9zdGF0ZXMucGF0dGVybiwgdGhpcy5vcHRpb25zLCBlMTEpKSwgdGhpcy5fc3RhdGVzLm9uY2UgJiYgdGhpcy5fc3RhdGVzLm9uY2UuZ2V0VGltZSgpIDw9IHQ5LmdldFRpbWUoKSB8fCBzOSA9PT0gbnVsbCB8fCB0aGlzLl9zdGF0ZXMubWF4UnVucyAhPT0gdm9pZCAwICYmIHRoaXMuX3N0YXRlcy5tYXhSdW5zIDw9IDAgfHwgdGhpcy5fc3RhdGVzLmtpbGwgfHwgdGhpcy5vcHRpb25zLnN0b3BBdCAmJiBzOS5nZXRUaW1lKCkgPj0gdGhpcy5vcHRpb25zLnN0b3BBdC5nZXRUaW1lKCkgPyBudWxsIDogczk7CiAgICAgIH0KICAgICAgX2NhbGN1bGF0ZVByZXZpb3VzUnVuKHQ5LCBlMTEpIHsKICAgICAgICBsZXQgcjExID0gbmV3IGYzKHZvaWQgMCwgdGhpcy5vcHRpb25zLnRpbWV6b25lIHx8IHRoaXMub3B0aW9ucy51dGNPZmZzZXQpLCBzOSA9IHQ5OwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc3RhcnRBdC5nZXRUaW1lKCkgPD0gcjExLmdldFRpbWUoKSkgewogICAgICAgICAgczkgPSB0aGlzLm9wdGlvbnMuc3RhcnRBdDsKICAgICAgICAgIGxldCBpMTEgPSBzOS5nZXRUaW1lKCkgKyB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwgKiAxZTM7CiAgICAgICAgICBmb3IgKDsgaTExIDw9IHIxMS5nZXRUaW1lKCk7ICkgczkgPSBuZXcgZjMoczksIHRoaXMub3B0aW9ucy50aW1lem9uZSB8fCB0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KS5pbmNyZW1lbnQodGhpcy5fc3RhdGVzLnBhdHRlcm4sIHRoaXMub3B0aW9ucywgdHJ1ZSksIGkxMSA9IHM5LmdldFRpbWUoKSArIHRoaXMub3B0aW9ucy5pbnRlcnZhbCAqIDFlMzsKICAgICAgICAgIGUxMSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzOSA9PT0gbnVsbCAmJiAoczkgPSB2b2lkIDApLCBbczksIGUxMV07CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29uc3RhbnRzLmpzCnZhciBkYXlzSW5XZWVrLCBkYXlzSW5ZZWFyLCBtYXhUaW1lLCBtaW5UaW1lLCBtaWxsaXNlY29uZHNJbldlZWssIG1pbGxpc2Vjb25kc0luRGF5LCBtaWxsaXNlY29uZHNJbk1pbnV0ZSwgbWlsbGlzZWNvbmRzSW5Ib3VyLCBtaWxsaXNlY29uZHNJblNlY29uZCwgbWludXRlc0luWWVhciwgbWludXRlc0luTW9udGgsIG1pbnV0ZXNJbkRheSwgbWludXRlc0luSG91ciwgbW9udGhzSW5RdWFydGVyLCBtb250aHNJblllYXIsIHF1YXJ0ZXJzSW5ZZWFyLCBzZWNvbmRzSW5Ib3VyLCBzZWNvbmRzSW5NaW51dGUsIHNlY29uZHNJbkRheSwgc2Vjb25kc0luV2Vlaywgc2Vjb25kc0luWWVhciwgc2Vjb25kc0luTW9udGgsIHNlY29uZHNJblF1YXJ0ZXIsIGNvbnN0cnVjdEZyb21TeW1ib2w7CnZhciBpbml0X2NvbnN0YW50cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdGFudHMuanMiKCkgewogICAgZGF5c0luV2VlayA9IDc7CiAgICBkYXlzSW5ZZWFyID0gMzY1LjI0MjU7CiAgICBtYXhUaW1lID0gTWF0aC5wb3coMTAsIDgpICogMjQgKiA2MCAqIDYwICogMWUzOwogICAgbWluVGltZSA9IC1tYXhUaW1lOwogICAgbWlsbGlzZWNvbmRzSW5XZWVrID0gNjA0OGU1OwogICAgbWlsbGlzZWNvbmRzSW5EYXkgPSA4NjRlNTsKICAgIG1pbGxpc2Vjb25kc0luTWludXRlID0gNmU0OwogICAgbWlsbGlzZWNvbmRzSW5Ib3VyID0gMzZlNTsKICAgIG1pbGxpc2Vjb25kc0luU2Vjb25kID0gMWUzOwogICAgbWludXRlc0luWWVhciA9IDUyNTYwMDsKICAgIG1pbnV0ZXNJbk1vbnRoID0gNDMyMDA7CiAgICBtaW51dGVzSW5EYXkgPSAxNDQwOwogICAgbWludXRlc0luSG91ciA9IDYwOwogICAgbW9udGhzSW5RdWFydGVyID0gMzsKICAgIG1vbnRoc0luWWVhciA9IDEyOwogICAgcXVhcnRlcnNJblllYXIgPSA0OwogICAgc2Vjb25kc0luSG91ciA9IDM2MDA7CiAgICBzZWNvbmRzSW5NaW51dGUgPSA2MDsKICAgIHNlY29uZHNJbkRheSA9IHNlY29uZHNJbkhvdXIgKiAyNDsKICAgIHNlY29uZHNJbldlZWsgPSBzZWNvbmRzSW5EYXkgKiA3OwogICAgc2Vjb25kc0luWWVhciA9IHNlY29uZHNJbkRheSAqIGRheXNJblllYXI7CiAgICBzZWNvbmRzSW5Nb250aCA9IHNlY29uZHNJblllYXIgLyAxMjsKICAgIHNlY29uZHNJblF1YXJ0ZXIgPSBzZWNvbmRzSW5Nb250aCAqIDM7CiAgICBjb25zdHJ1Y3RGcm9tU3ltYm9sID0gLyogQF9fUFVSRV9fICovIFN5bWJvbC5mb3IoImNvbnN0cnVjdERhdGVGcm9tIik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29uc3RydWN0RnJvbS5qcwpmdW5jdGlvbiBjb25zdHJ1Y3RGcm9tKGRhdGUsIHZhbHVlMikgewogIGlmICh0eXBlb2YgZGF0ZSA9PT0gImZ1bmN0aW9uIikgcmV0dXJuIGRhdGUodmFsdWUyKTsKICBpZiAoZGF0ZSAmJiB0eXBlb2YgZGF0ZSA9PT0gIm9iamVjdCIgJiYgY29uc3RydWN0RnJvbVN5bWJvbCBpbiBkYXRlKQogICAgcmV0dXJuIGRhdGVbY29uc3RydWN0RnJvbVN5bWJvbF0odmFsdWUyKTsKICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBuZXcgZGF0ZS5jb25zdHJ1Y3Rvcih2YWx1ZTIpOwogIHJldHVybiBuZXcgRGF0ZSh2YWx1ZTIpOwp9CnZhciBjb25zdHJ1Y3RGcm9tX2RlZmF1bHQ7CnZhciBpbml0X2NvbnN0cnVjdEZyb20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29uc3RydWN0RnJvbS5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgY29uc3RydWN0RnJvbV9kZWZhdWx0ID0gY29uc3RydWN0RnJvbTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy90b0RhdGUuanMKZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50LCBjb250ZXh0MikgewogIHJldHVybiBjb25zdHJ1Y3RGcm9tKGNvbnRleHQyIHx8IGFyZ3VtZW50LCBhcmd1bWVudCk7Cn0KdmFyIHRvRGF0ZV9kZWZhdWx0Owp2YXIgaW5pdF90b0RhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvdG9EYXRlLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgdG9EYXRlX2RlZmF1bHQgPSB0b0RhdGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkRGF5cy5qcwpmdW5jdGlvbiBhZGREYXlzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoaXNOYU4oYW1vdW50KSkgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgTmFOKTsKICBpZiAoIWFtb3VudCkgcmV0dXJuIF9kYXRlOwogIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpICsgYW1vdW50KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGFkZERheXNfZGVmYXVsdDsKdmFyIGluaXRfYWRkRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGREYXlzLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGFkZERheXNfZGVmYXVsdCA9IGFkZERheXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTW9udGhzLmpzCmZ1bmN0aW9uIGFkZE1vbnRocyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKGlzTmFOKGFtb3VudCkpIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIE5hTik7CiAgaWYgKCFhbW91bnQpIHsKICAgIHJldHVybiBfZGF0ZTsKICB9CiAgY29uc3QgZGF5T2ZNb250aCA9IF9kYXRlLmdldERhdGUoKTsKICBjb25zdCBlbmRPZkRlc2lyZWRNb250aCA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgX2RhdGUuZ2V0VGltZSgpKTsKICBlbmRPZkRlc2lyZWRNb250aC5zZXRNb250aChfZGF0ZS5nZXRNb250aCgpICsgYW1vdW50ICsgMSwgMCk7CiAgY29uc3QgZGF5c0luTW9udGggPSBlbmRPZkRlc2lyZWRNb250aC5nZXREYXRlKCk7CiAgaWYgKGRheU9mTW9udGggPj0gZGF5c0luTW9udGgpIHsKICAgIHJldHVybiBlbmRPZkRlc2lyZWRNb250aDsKICB9IGVsc2UgewogICAgX2RhdGUuc2V0RnVsbFllYXIoCiAgICAgIGVuZE9mRGVzaXJlZE1vbnRoLmdldEZ1bGxZZWFyKCksCiAgICAgIGVuZE9mRGVzaXJlZE1vbnRoLmdldE1vbnRoKCksCiAgICAgIGRheU9mTW9udGgKICAgICk7CiAgICByZXR1cm4gX2RhdGU7CiAgfQp9CnZhciBhZGRNb250aHNfZGVmYXVsdDsKdmFyIGluaXRfYWRkTW9udGhzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZE1vbnRocy5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBhZGRNb250aHNfZGVmYXVsdCA9IGFkZE1vbnRoczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGQuanMKZnVuY3Rpb24gYWRkKGRhdGUsIGR1cmF0aW9uLCBvcHRpb25zKSB7CiAgY29uc3QgewogICAgeWVhcnMgPSAwLAogICAgbW9udGhzOiBtb250aHMyID0gMCwKICAgIHdlZWtzID0gMCwKICAgIGRheXM6IGRheXMyID0gMCwKICAgIGhvdXJzID0gMCwKICAgIG1pbnV0ZXMgPSAwLAogICAgc2Vjb25kcyA9IDAKICB9ID0gZHVyYXRpb247CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRhdGVXaXRoTW9udGhzID0gbW9udGhzMiB8fCB5ZWFycyA/IGFkZE1vbnRocyhfZGF0ZSwgbW9udGhzMiArIHllYXJzICogMTIpIDogX2RhdGU7CiAgY29uc3QgZGF0ZVdpdGhEYXlzID0gZGF5czIgfHwgd2Vla3MgPyBhZGREYXlzKGRhdGVXaXRoTW9udGhzLCBkYXlzMiArIHdlZWtzICogNykgOiBkYXRlV2l0aE1vbnRoczsKICBjb25zdCBtaW51dGVzVG9BZGQgPSBtaW51dGVzICsgaG91cnMgKiA2MDsKICBjb25zdCBzZWNvbmRzVG9BZGQgPSBzZWNvbmRzICsgbWludXRlc1RvQWRkICogNjA7CiAgY29uc3QgbXNUb0FkZCA9IHNlY29uZHNUb0FkZCAqIDFlMzsKICByZXR1cm4gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCArZGF0ZVdpdGhEYXlzICsgbXNUb0FkZCk7Cn0KdmFyIGFkZF9kZWZhdWx0Owp2YXIgaW5pdF9hZGQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkLmpzIigpIHsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9hZGRNb250aHMoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGFkZF9kZWZhdWx0ID0gYWRkOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2F0dXJkYXkuanMKZnVuY3Rpb24gaXNTYXR1cmRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF5KCkgPT09IDY7Cn0KdmFyIGlzU2F0dXJkYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNTYXR1cmRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhdHVyZGF5LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1NhdHVyZGF5X2RlZmF1bHQgPSBpc1NhdHVyZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU3VuZGF5LmpzCmZ1bmN0aW9uIGlzU3VuZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKSA9PT0gMDsKfQp2YXIgaXNTdW5kYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNTdW5kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTdW5kYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzU3VuZGF5X2RlZmF1bHQgPSBpc1N1bmRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1dlZWtlbmQuanMKZnVuY3Rpb24gaXNXZWVrZW5kKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXkgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpOwogIHJldHVybiBkYXkgPT09IDAgfHwgZGF5ID09PSA2Owp9CnZhciBpc1dlZWtlbmRfZGVmYXVsdDsKdmFyIGluaXRfaXNXZWVrZW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzV2Vla2VuZC5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNXZWVrZW5kX2RlZmF1bHQgPSBpc1dlZWtlbmQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkQnVzaW5lc3NEYXlzLmpzCmZ1bmN0aW9uIGFkZEJ1c2luZXNzRGF5cyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3Qgc3RhcnRlZE9uV2Vla2VuZCA9IGlzV2Vla2VuZChfZGF0ZSwgb3B0aW9ucyk7CiAgaWYgKGlzTmFOKGFtb3VudCkpIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCBOYU4pOwogIGNvbnN0IGhvdXJzID0gX2RhdGUuZ2V0SG91cnMoKTsKICBjb25zdCBzaWduID0gYW1vdW50IDwgMCA/IC0xIDogMTsKICBjb25zdCBmdWxsV2Vla3MgPSBNYXRoLnRydW5jKGFtb3VudCAvIDUpOwogIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpICsgZnVsbFdlZWtzICogNyk7CiAgbGV0IHJlc3REYXlzID0gTWF0aC5hYnMoYW1vdW50ICUgNSk7CiAgd2hpbGUgKHJlc3REYXlzID4gMCkgewogICAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBzaWduKTsKICAgIGlmICghaXNXZWVrZW5kKF9kYXRlLCBvcHRpb25zKSkgcmVzdERheXMgLT0gMTsKICB9CiAgaWYgKHN0YXJ0ZWRPbldlZWtlbmQgJiYgaXNXZWVrZW5kKF9kYXRlLCBvcHRpb25zKSAmJiBhbW91bnQgIT09IDApIHsKICAgIGlmIChpc1NhdHVyZGF5KF9kYXRlLCBvcHRpb25zKSkKICAgICAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyAoc2lnbiA8IDAgPyAyIDogLTEpKTsKICAgIGlmIChpc1N1bmRheShfZGF0ZSwgb3B0aW9ucykpCiAgICAgIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpICsgKHNpZ24gPCAwID8gMSA6IC0yKSk7CiAgfQogIF9kYXRlLnNldEhvdXJzKGhvdXJzKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGFkZEJ1c2luZXNzRGF5c19kZWZhdWx0Owp2YXIgaW5pdF9hZGRCdXNpbmVzc0RheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkQnVzaW5lc3NEYXlzLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9pc1NhdHVyZGF5KCk7CiAgICBpbml0X2lzU3VuZGF5KCk7CiAgICBpbml0X2lzV2Vla2VuZCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGFkZEJ1c2luZXNzRGF5c19kZWZhdWx0ID0gYWRkQnVzaW5lc3NEYXlzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZE1pbGxpc2Vjb25kcy5qcwpmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgK3RvRGF0ZShkYXRlKSArIGFtb3VudCk7Cn0KdmFyIGFkZE1pbGxpc2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9hZGRNaWxsaXNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTWlsbGlzZWNvbmRzLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGFkZE1pbGxpc2Vjb25kc19kZWZhdWx0ID0gYWRkTWlsbGlzZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZEhvdXJzLmpzCmZ1bmN0aW9uIGFkZEhvdXJzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGF0ZSwgYW1vdW50ICogbWlsbGlzZWNvbmRzSW5Ib3VyLCBvcHRpb25zKTsKfQp2YXIgYWRkSG91cnNfZGVmYXVsdDsKdmFyIGluaXRfYWRkSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkSG91cnMuanMiKCkgewogICAgaW5pdF9hZGRNaWxsaXNlY29uZHMoKTsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBhZGRIb3Vyc19kZWZhdWx0ID0gYWRkSG91cnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9kZWZhdWx0T3B0aW9ucy5qcwpmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHsKICByZXR1cm4gZGVmYXVsdE9wdGlvbnM7Cn0KZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMobmV3T3B0aW9ucykgewogIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9uczsKfQp2YXIgZGVmYXVsdE9wdGlvbnM7CnZhciBpbml0X2RlZmF1bHRPcHRpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZGVmYXVsdE9wdGlvbnMuanMiKCkgewogICAgZGVmYXVsdE9wdGlvbnMgPSB7fTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mV2Vlay5qcwpmdW5jdGlvbiBzdGFydE9mV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCB3ZWVrU3RhcnRzT24gPSBvcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gMDsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGF5ID0gX2RhdGUuZ2V0RGF5KCk7CiAgY29uc3QgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247CiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgLSBkaWZmKTsKICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHN0YXJ0T2ZXZWVrX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZXZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZXZWVrLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mV2Vla19kZWZhdWx0ID0gc3RhcnRPZldlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZklTT1dlZWsuanMKZnVuY3Rpb24gc3RhcnRPZklTT1dlZWsoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBzdGFydE9mV2VlayhkYXRlLCB7IC4uLm9wdGlvbnMsIHdlZWtTdGFydHNPbjogMSB9KTsKfQp2YXIgc3RhcnRPZklTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZklTT1dlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZklTT1dlZWsuanMiKCkgewogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgc3RhcnRPZklTT1dlZWtfZGVmYXVsdCA9IHN0YXJ0T2ZJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT1dlZWtZZWFyLmpzCmZ1bmN0aW9uIGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IGNvbnN0cnVjdEZyb20oX2RhdGUsIDApOwogIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDQpOwogIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3Qgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZklTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7CiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IGNvbnN0cnVjdEZyb20oX2RhdGUsIDApOwogIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0RnVsbFllYXIoeWVhciwgMCwgNCk7CiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBjb25zdCBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTsKICBpZiAoX2RhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHsKICAgIHJldHVybiB5ZWFyICsgMTsKICB9IGVsc2UgaWYgKF9kYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7CiAgICByZXR1cm4geWVhcjsKICB9IGVsc2UgewogICAgcmV0dXJuIHllYXIgLSAxOwogIH0KfQp2YXIgZ2V0SVNPV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfZ2V0SVNPV2Vla1llYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vla1llYXIuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3N0YXJ0T2ZJU09XZWVrKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0SVNPV2Vla1llYXJfZGVmYXVsdCA9IGdldElTT1dlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy5qcwpmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlKTsKICBjb25zdCB1dGNEYXRlID0gbmV3IERhdGUoCiAgICBEYXRlLlVUQygKICAgICAgX2RhdGUuZ2V0RnVsbFllYXIoKSwKICAgICAgX2RhdGUuZ2V0TW9udGgoKSwKICAgICAgX2RhdGUuZ2V0RGF0ZSgpLAogICAgICBfZGF0ZS5nZXRIb3VycygpLAogICAgICBfZGF0ZS5nZXRNaW51dGVzKCksCiAgICAgIF9kYXRlLmdldFNlY29uZHMoKSwKICAgICAgX2RhdGUuZ2V0TWlsbGlzZWNvbmRzKCkKICAgICkKICApOwogIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoX2RhdGUuZ2V0RnVsbFllYXIoKSk7CiAgcmV0dXJuICtkYXRlIC0gK3V0Y0RhdGU7Cn0KdmFyIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL25vcm1hbGl6ZURhdGVzLmpzCmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGVzKGNvbnRleHQyLCAuLi5kYXRlcykgewogIGNvbnN0IG5vcm1hbGl6ZTQgPSBjb25zdHJ1Y3RGcm9tLmJpbmQoCiAgICBudWxsLAogICAgY29udGV4dDIgfHwgZGF0ZXMuZmluZCgoZGF0ZSkgPT4gdHlwZW9mIGRhdGUgPT09ICJvYmplY3QiKQogICk7CiAgcmV0dXJuIGRhdGVzLm1hcChub3JtYWxpemU0KTsKfQp2YXIgaW5pdF9ub3JtYWxpemVEYXRlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL25vcm1hbGl6ZURhdGVzLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZEYXkuanMKZnVuY3Rpb24gc3RhcnRPZkRheShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc3RhcnRPZkRheV9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZEYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHN0YXJ0T2ZEYXlfZGVmYXVsdCA9IHN0YXJ0T2ZEYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IGxhdGVyU3RhcnRPZkRheSA9IHN0YXJ0T2ZEYXkobGF0ZXJEYXRlXyk7CiAgY29uc3QgZWFybGllclN0YXJ0T2ZEYXkgPSBzdGFydE9mRGF5KGVhcmxpZXJEYXRlXyk7CiAgY29uc3QgbGF0ZXJUaW1lc3RhbXAgPSArbGF0ZXJTdGFydE9mRGF5IC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhsYXRlclN0YXJ0T2ZEYXkpOwogIGNvbnN0IGVhcmxpZXJUaW1lc3RhbXAgPSArZWFybGllclN0YXJ0T2ZEYXkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGVhcmxpZXJTdGFydE9mRGF5KTsKICByZXR1cm4gTWF0aC5yb3VuZCgobGF0ZXJUaW1lc3RhbXAgLSBlYXJsaWVyVGltZXN0YW1wKSAvIG1pbGxpc2Vjb25kc0luRGF5KTsKfQp2YXIgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMuanMiKCkgewogICAgaW5pdF9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9zdGFydE9mRGF5KCk7CiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5czsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSVNPV2Vla1llYXIuanMKZnVuY3Rpb24gc3RhcnRPZklTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCB5ZWFyID0gZ2V0SVNPV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7CiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5ID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTsKICBmb3VydGhPZkphbnVhcnkuc2V0RnVsbFllYXIoeWVhciwgMCwgNCk7CiAgZm91cnRoT2ZKYW51YXJ5LnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpOwp9CnZhciBzdGFydE9mSVNPV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZJU09XZWVrWWVhci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0SVNPV2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIHN0YXJ0T2ZJU09XZWVrWWVhcl9kZWZhdWx0ID0gc3RhcnRPZklTT1dlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldElTT1dlZWtZZWFyLmpzCmZ1bmN0aW9uIHNldElTT1dlZWtZZWFyKGRhdGUsIHdlZWtZZWFyLCBvcHRpb25zKSB7CiAgbGV0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKAogICAgX2RhdGUsCiAgICBzdGFydE9mSVNPV2Vla1llYXIoX2RhdGUsIG9wdGlvbnMpCiAgKTsKICBjb25zdCBmb3VydGhPZkphbnVhcnkgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZvdXJ0aE9mSmFudWFyeS5zZXRGdWxsWWVhcih3ZWVrWWVhciwgMCwgNCk7CiAgZm91cnRoT2ZKYW51YXJ5LnNldEhvdXJzKDAsIDAsIDAsIDApOwogIF9kYXRlID0gc3RhcnRPZklTT1dlZWtZZWFyKGZvdXJ0aE9mSmFudWFyeSk7CiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBkaWZmKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHNldElTT1dlZWtZZWFyX2RlZmF1bHQ7CnZhciBpbml0X3NldElTT1dlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldElTT1dlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0SVNPV2Vla1llYXJfZGVmYXVsdCA9IHNldElTT1dlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZElTT1dlZWtZZWFycy5qcwpmdW5jdGlvbiBhZGRJU09XZWVrWWVhcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIHNldElTT1dlZWtZZWFyKGRhdGUsIGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpICsgYW1vdW50LCBvcHRpb25zKTsKfQp2YXIgYWRkSVNPV2Vla1llYXJzX2RlZmF1bHQ7CnZhciBpbml0X2FkZElTT1dlZWtZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRJU09XZWVrWWVhcnMuanMiKCkgewogICAgaW5pdF9nZXRJU09XZWVrWWVhcigpOwogICAgaW5pdF9zZXRJU09XZWVrWWVhcigpOwogICAgYWRkSVNPV2Vla1llYXJzX2RlZmF1bHQgPSBhZGRJU09XZWVrWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTWludXRlcy5qcwpmdW5jdGlvbiBhZGRNaW51dGVzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBfZGF0ZS5zZXRUaW1lKF9kYXRlLmdldFRpbWUoKSArIGFtb3VudCAqIG1pbGxpc2Vjb25kc0luTWludXRlKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGFkZE1pbnV0ZXNfZGVmYXVsdDsKdmFyIGluaXRfYWRkTWludXRlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRNaW51dGVzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgYWRkTWludXRlc19kZWZhdWx0ID0gYWRkTWludXRlczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRRdWFydGVycy5qcwpmdW5jdGlvbiBhZGRRdWFydGVycyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIGFtb3VudCAqIDMsIG9wdGlvbnMpOwp9CnZhciBhZGRRdWFydGVyc19kZWZhdWx0Owp2YXIgaW5pdF9hZGRRdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRRdWFydGVycy5qcyIoKSB7CiAgICBpbml0X2FkZE1vbnRocygpOwogICAgYWRkUXVhcnRlcnNfZGVmYXVsdCA9IGFkZFF1YXJ0ZXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZFNlY29uZHMuanMKZnVuY3Rpb24gYWRkU2Vjb25kcyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRhdGUsIGFtb3VudCAqIDFlMywgb3B0aW9ucyk7Cn0KdmFyIGFkZFNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfYWRkU2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRTZWNvbmRzLmpzIigpIHsKICAgIGluaXRfYWRkTWlsbGlzZWNvbmRzKCk7CiAgICBhZGRTZWNvbmRzX2RlZmF1bHQgPSBhZGRTZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZFdlZWtzLmpzCmZ1bmN0aW9uIGFkZFdlZWtzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGREYXlzKGRhdGUsIGFtb3VudCAqIDcsIG9wdGlvbnMpOwp9CnZhciBhZGRXZWVrc19kZWZhdWx0Owp2YXIgaW5pdF9hZGRXZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRXZWVrcy5qcyIoKSB7CiAgICBpbml0X2FkZERheXMoKTsKICAgIGFkZFdlZWtzX2RlZmF1bHQgPSBhZGRXZWVrczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRZZWFycy5qcwpmdW5jdGlvbiBhZGRZZWFycyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIGFtb3VudCAqIDEyLCBvcHRpb25zKTsKfQp2YXIgYWRkWWVhcnNfZGVmYXVsdDsKdmFyIGluaXRfYWRkWWVhcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkWWVhcnMuanMiKCkgewogICAgaW5pdF9hZGRNb250aHMoKTsKICAgIGFkZFllYXJzX2RlZmF1bHQgPSBhZGRZZWFyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hcmVJbnRlcnZhbHNPdmVybGFwcGluZy5qcwpmdW5jdGlvbiBhcmVJbnRlcnZhbHNPdmVybGFwcGluZyhpbnRlcnZhbExlZnQsIGludGVydmFsUmlnaHQsIG9wdGlvbnMpIHsKICBjb25zdCBbbGVmdFN0YXJ0VGltZSwgbGVmdEVuZFRpbWVdID0gWwogICAgK3RvRGF0ZShpbnRlcnZhbExlZnQuc3RhcnQsIG9wdGlvbnM/LmluKSwKICAgICt0b0RhdGUoaW50ZXJ2YWxMZWZ0LmVuZCwgb3B0aW9ucz8uaW4pCiAgXS5zb3J0KChhNSwgYjUpID0+IGE1IC0gYjUpOwogIGNvbnN0IFtyaWdodFN0YXJ0VGltZSwgcmlnaHRFbmRUaW1lXSA9IFsKICAgICt0b0RhdGUoaW50ZXJ2YWxSaWdodC5zdGFydCwgb3B0aW9ucz8uaW4pLAogICAgK3RvRGF0ZShpbnRlcnZhbFJpZ2h0LmVuZCwgb3B0aW9ucz8uaW4pCiAgXS5zb3J0KChhNSwgYjUpID0+IGE1IC0gYjUpOwogIGlmIChvcHRpb25zPy5pbmNsdXNpdmUpCiAgICByZXR1cm4gbGVmdFN0YXJ0VGltZSA8PSByaWdodEVuZFRpbWUgJiYgcmlnaHRTdGFydFRpbWUgPD0gbGVmdEVuZFRpbWU7CiAgcmV0dXJuIGxlZnRTdGFydFRpbWUgPCByaWdodEVuZFRpbWUgJiYgcmlnaHRTdGFydFRpbWUgPCBsZWZ0RW5kVGltZTsKfQp2YXIgYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmdfZGVmYXVsdDsKdmFyIGluaXRfYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmcuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGFyZUludGVydmFsc092ZXJsYXBwaW5nX2RlZmF1bHQgPSBhcmVJbnRlcnZhbHNPdmVybGFwcGluZzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tYXguanMKZnVuY3Rpb24gbWF4MihkYXRlcywgb3B0aW9ucykgewogIGxldCByZXN1bHQ7CiAgbGV0IGNvbnRleHQyID0gb3B0aW9ucz8uaW47CiAgZGF0ZXMuZm9yRWFjaCgoZGF0ZSkgPT4gewogICAgaWYgKCFjb250ZXh0MiAmJiB0eXBlb2YgZGF0ZSA9PT0gIm9iamVjdCIpCiAgICAgIGNvbnRleHQyID0gY29uc3RydWN0RnJvbS5iaW5kKG51bGwsIGRhdGUpOwogICAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgY29udGV4dDIpOwogICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0IDwgZGF0ZV8gfHwgaXNOYU4oK2RhdGVfKSkgcmVzdWx0ID0gZGF0ZV87CiAgfSk7CiAgcmV0dXJuIGNvbnN0cnVjdEZyb20oY29udGV4dDIsIHJlc3VsdCB8fCBOYU4pOwp9CnZhciBtYXhfZGVmYXVsdDsKdmFyIGluaXRfbWF4MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tYXguanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgbWF4X2RlZmF1bHQgPSBtYXgyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbi5qcwpmdW5jdGlvbiBtaW4yKGRhdGVzLCBvcHRpb25zKSB7CiAgbGV0IHJlc3VsdDsKICBsZXQgY29udGV4dDIgPSBvcHRpb25zPy5pbjsKICBkYXRlcy5mb3JFYWNoKChkYXRlKSA9PiB7CiAgICBpZiAoIWNvbnRleHQyICYmIHR5cGVvZiBkYXRlID09PSAib2JqZWN0IikKICAgICAgY29udGV4dDIgPSBjb25zdHJ1Y3RGcm9tLmJpbmQobnVsbCwgZGF0ZSk7CiAgICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBjb250ZXh0Mik7CiAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQgPiBkYXRlXyB8fCBpc05hTigrZGF0ZV8pKSByZXN1bHQgPSBkYXRlXzsKICB9KTsKICByZXR1cm4gY29uc3RydWN0RnJvbShjb250ZXh0MiwgcmVzdWx0IHx8IE5hTik7Cn0KdmFyIG1pbl9kZWZhdWx0Owp2YXIgaW5pdF9taW4yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbi5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBtaW5fZGVmYXVsdCA9IG1pbjI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY2xhbXAuanMKZnVuY3Rpb24gY2xhbXAoZGF0ZSwgaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgW2RhdGVfLCBzdGFydCwgZW5kM10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgZGF0ZSwKICAgIGludGVydmFsMy5zdGFydCwKICAgIGludGVydmFsMy5lbmQKICApOwogIHJldHVybiBtaW4yKFttYXgyKFtkYXRlXywgc3RhcnRdLCBvcHRpb25zKSwgZW5kM10sIG9wdGlvbnMpOwp9CnZhciBjbGFtcF9kZWZhdWx0Owp2YXIgaW5pdF9jbGFtcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jbGFtcC5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X21heDIoKTsKICAgIGluaXRfbWluMigpOwogICAgY2xhbXBfZGVmYXVsdCA9IGNsYW1wOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Nsb3Nlc3RJbmRleFRvLmpzCmZ1bmN0aW9uIGNsb3Nlc3RJbmRleFRvKGRhdGVUb0NvbXBhcmUsIGRhdGVzKSB7CiAgY29uc3QgdGltZVRvQ29tcGFyZSA9ICt0b0RhdGUoZGF0ZVRvQ29tcGFyZSk7CiAgaWYgKGlzTmFOKHRpbWVUb0NvbXBhcmUpKSByZXR1cm4gTmFOOwogIGxldCByZXN1bHQ7CiAgbGV0IG1pbkRpc3RhbmNlOwogIGRhdGVzLmZvckVhY2goKGRhdGUsIGluZGV4MikgPT4gewogICAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSk7CiAgICBpZiAoaXNOYU4oK2RhdGVfKSkgewogICAgICByZXN1bHQgPSBOYU47CiAgICAgIG1pbkRpc3RhbmNlID0gTmFOOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKHRpbWVUb0NvbXBhcmUgLSArZGF0ZV8pOwogICAgaWYgKHJlc3VsdCA9PSBudWxsIHx8IGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHsKICAgICAgcmVzdWx0ID0gaW5kZXgyOwogICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlOwogICAgfQogIH0pOwogIHJldHVybiByZXN1bHQ7Cn0KdmFyIGNsb3Nlc3RJbmRleFRvX2RlZmF1bHQ7CnZhciBpbml0X2Nsb3Nlc3RJbmRleFRvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Nsb3Nlc3RJbmRleFRvLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBjbG9zZXN0SW5kZXhUb19kZWZhdWx0ID0gY2xvc2VzdEluZGV4VG87CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY2xvc2VzdFRvLmpzCmZ1bmN0aW9uIGNsb3Nlc3RUbyhkYXRlVG9Db21wYXJlLCBkYXRlcywgb3B0aW9ucykgewogIGNvbnN0IFtkYXRlVG9Db21wYXJlXywgLi4uZGF0ZXNfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBkYXRlVG9Db21wYXJlLAogICAgLi4uZGF0ZXMKICApOwogIGNvbnN0IGluZGV4MiA9IGNsb3Nlc3RJbmRleFRvKGRhdGVUb0NvbXBhcmVfLCBkYXRlc18pOwogIGlmICh0eXBlb2YgaW5kZXgyID09PSAibnVtYmVyIiAmJiBpc05hTihpbmRleDIpKQogICAgcmV0dXJuIGNvbnN0cnVjdEZyb20oZGF0ZVRvQ29tcGFyZV8sIE5hTik7CiAgaWYgKGluZGV4MiAhPT0gdm9pZCAwKSByZXR1cm4gZGF0ZXNfW2luZGV4Ml07Cn0KdmFyIGNsb3Nlc3RUb19kZWZhdWx0Owp2YXIgaW5pdF9jbG9zZXN0VG8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY2xvc2VzdFRvLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfY2xvc2VzdEluZGV4VG8oKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgY2xvc2VzdFRvX2RlZmF1bHQgPSBjbG9zZXN0VG87CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29tcGFyZUFzYy5qcwpmdW5jdGlvbiBjb21wYXJlQXNjKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIHsKICBjb25zdCBkaWZmID0gK3RvRGF0ZShkYXRlTGVmdCkgLSArdG9EYXRlKGRhdGVSaWdodCk7CiAgaWYgKGRpZmYgPCAwKSByZXR1cm4gLTE7CiAgZWxzZSBpZiAoZGlmZiA+IDApIHJldHVybiAxOwogIHJldHVybiBkaWZmOwp9CnZhciBjb21wYXJlQXNjX2RlZmF1bHQ7CnZhciBpbml0X2NvbXBhcmVBc2MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29tcGFyZUFzYy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgY29tcGFyZUFzY19kZWZhdWx0ID0gY29tcGFyZUFzYzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb21wYXJlRGVzYy5qcwpmdW5jdGlvbiBjb21wYXJlRGVzYyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KSB7CiAgY29uc3QgZGlmZiA9ICt0b0RhdGUoZGF0ZUxlZnQpIC0gK3RvRGF0ZShkYXRlUmlnaHQpOwogIGlmIChkaWZmID4gMCkgcmV0dXJuIC0xOwogIGVsc2UgaWYgKGRpZmYgPCAwKSByZXR1cm4gMTsKICByZXR1cm4gZGlmZjsKfQp2YXIgY29tcGFyZURlc2NfZGVmYXVsdDsKdmFyIGluaXRfY29tcGFyZURlc2MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29tcGFyZURlc2MuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGNvbXBhcmVEZXNjX2RlZmF1bHQgPSBjb21wYXJlRGVzYzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdHJ1Y3ROb3cuanMKZnVuY3Rpb24gY29uc3RydWN0Tm93KGRhdGUpIHsKICByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlLCBEYXRlLm5vdygpKTsKfQp2YXIgY29uc3RydWN0Tm93X2RlZmF1bHQ7CnZhciBpbml0X2NvbnN0cnVjdE5vdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdHJ1Y3ROb3cuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBjb25zdHJ1Y3ROb3dfZGVmYXVsdCA9IGNvbnN0cnVjdE5vdzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kYXlzVG9XZWVrcy5qcwpmdW5jdGlvbiBkYXlzVG9XZWVrcyhkYXlzMikgewogIGNvbnN0IHJlc3VsdCA9IE1hdGgudHJ1bmMoZGF5czIgLyBkYXlzSW5XZWVrKTsKICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDsKfQp2YXIgZGF5c1RvV2Vla3NfZGVmYXVsdDsKdmFyIGluaXRfZGF5c1RvV2Vla3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGF5c1RvV2Vla3MuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGRheXNUb1dlZWtzX2RlZmF1bHQgPSBkYXlzVG9XZWVrczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVEYXkuanMKZnVuY3Rpb24gaXNTYW1lRGF5KGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbZGF0ZUxlZnRfLCBkYXRlUmlnaHRfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgcmV0dXJuICtzdGFydE9mRGF5KGRhdGVMZWZ0XykgPT09ICtzdGFydE9mRGF5KGRhdGVSaWdodF8pOwp9CnZhciBpc1NhbWVEYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNTYW1lRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZURheS5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X3N0YXJ0T2ZEYXkoKTsKICAgIGlzU2FtZURheV9kZWZhdWx0ID0gaXNTYW1lRGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRGF0ZS5qcwpmdW5jdGlvbiBpc0RhdGUodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMiBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIHZhbHVlMiA9PT0gIm9iamVjdCIgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlMikgPT09ICJbb2JqZWN0IERhdGVdIjsKfQp2YXIgaXNEYXRlX2RlZmF1bHQ7CnZhciBpbml0X2lzRGF0ZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNEYXRlLmpzIigpIHsKICAgIGlzRGF0ZV9kZWZhdWx0ID0gaXNEYXRlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVmFsaWQuanMKZnVuY3Rpb24gaXNWYWxpZChkYXRlKSB7CiAgcmV0dXJuICEoIWlzRGF0ZShkYXRlKSAmJiB0eXBlb2YgZGF0ZSAhPT0gIm51bWJlciIgfHwgaXNOYU4oK3RvRGF0ZShkYXRlKSkpOwp9CnZhciBpc1ZhbGlkX2RlZmF1bHQ7CnZhciBpbml0X2lzVmFsaWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNWYWxpZC5qcyIoKSB7CiAgICBpbml0X2lzRGF0ZTIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1ZhbGlkX2RlZmF1bHQgPSBpc1ZhbGlkOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkJ1c2luZXNzRGF5cy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5CdXNpbmVzc0RheXMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBpZiAoIWlzVmFsaWQobGF0ZXJEYXRlXykgfHwgIWlzVmFsaWQoZWFybGllckRhdGVfKSkgcmV0dXJuIE5hTjsKICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgY29uc3Qgc2lnbiA9IGRpZmYgPCAwID8gLTEgOiAxOwogIGNvbnN0IHdlZWtzID0gTWF0aC50cnVuYyhkaWZmIC8gNyk7CiAgbGV0IHJlc3VsdCA9IHdlZWtzICogNTsKICBsZXQgbW92aW5nRGF0ZSA9IGFkZERheXMoZWFybGllckRhdGVfLCB3ZWVrcyAqIDcpOwogIHdoaWxlICghaXNTYW1lRGF5KGxhdGVyRGF0ZV8sIG1vdmluZ0RhdGUpKSB7CiAgICByZXN1bHQgKz0gaXNXZWVrZW5kKG1vdmluZ0RhdGUsIG9wdGlvbnMpID8gMCA6IHNpZ247CiAgICBtb3ZpbmdEYXRlID0gYWRkRGF5cyhtb3ZpbmdEYXRlLCBzaWduKTsKICB9CiAgcmV0dXJuIHJlc3VsdCA9PT0gMCA/IDAgOiByZXN1bHQ7Cn0KdmFyIGRpZmZlcmVuY2VJbkJ1c2luZXNzRGF5c19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5CdXNpbmVzc0RheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoKTsKICAgIGluaXRfaXNTYW1lRGF5KCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfaXNXZWVrZW5kKCk7CiAgICBkaWZmZXJlbmNlSW5CdXNpbmVzc0RheXNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkJ1c2luZXNzRGF5czsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIHJldHVybiBnZXRJU09XZWVrWWVhcihsYXRlckRhdGVfLCBvcHRpb25zKSAtIGdldElTT1dlZWtZZWFyKGVhcmxpZXJEYXRlXywgb3B0aW9ucyk7Cn0KdmFyIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfZ2V0SVNPV2Vla1llYXIoKTsKICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBjb25zdCBzdGFydE9mSVNPV2Vla0xlZnQgPSBzdGFydE9mSVNPV2VlayhsYXRlckRhdGVfKTsKICBjb25zdCBzdGFydE9mSVNPV2Vla1JpZ2h0ID0gc3RhcnRPZklTT1dlZWsoZWFybGllckRhdGVfKTsKICBjb25zdCB0aW1lc3RhbXBMZWZ0ID0gK3N0YXJ0T2ZJU09XZWVrTGVmdCAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoc3RhcnRPZklTT1dlZWtMZWZ0KTsKICBjb25zdCB0aW1lc3RhbXBSaWdodCA9ICtzdGFydE9mSVNPV2Vla1JpZ2h0IC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhzdGFydE9mSVNPV2Vla1JpZ2h0KTsKICByZXR1cm4gTWF0aC5yb3VuZCgodGltZXN0YW1wTGVmdCAtIHRpbWVzdGFtcFJpZ2h0KSAvIG1pbGxpc2Vjb25kc0luV2Vlayk7Cn0KdmFyIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3NfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzLmpzIigpIHsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3NfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3M7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBjb25zdCB5ZWFyc0RpZmYgPSBsYXRlckRhdGVfLmdldEZ1bGxZZWFyKCkgLSBlYXJsaWVyRGF0ZV8uZ2V0RnVsbFllYXIoKTsKICBjb25zdCBtb250aHNEaWZmID0gbGF0ZXJEYXRlXy5nZXRNb250aCgpIC0gZWFybGllckRhdGVfLmdldE1vbnRoKCk7CiAgcmV0dXJuIHllYXJzRGlmZiAqIDEyICsgbW9udGhzRGlmZjsKfQp2YXIgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFF1YXJ0ZXIuanMKZnVuY3Rpb24gZ2V0UXVhcnRlcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IHF1YXJ0ZXIgPSBNYXRoLnRydW5jKF9kYXRlLmdldE1vbnRoKCkgLyAzKSArIDE7CiAgcmV0dXJuIHF1YXJ0ZXI7Cn0KdmFyIGdldFF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfZ2V0UXVhcnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRRdWFydGVyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRRdWFydGVyX2RlZmF1bHQgPSBnZXRRdWFydGVyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHllYXJzRGlmZiA9IGxhdGVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAtIGVhcmxpZXJEYXRlXy5nZXRGdWxsWWVhcigpOwogIGNvbnN0IHF1YXJ0ZXJzRGlmZiA9IGdldFF1YXJ0ZXIobGF0ZXJEYXRlXykgLSBnZXRRdWFydGVyKGVhcmxpZXJEYXRlXyk7CiAgcmV0dXJuIHllYXJzRGlmZiAqIDQgKyBxdWFydGVyc0RpZmY7Cn0KdmFyIGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfZ2V0UXVhcnRlcigpOwogICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVyc19kZWZhdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBjb25zdCBsYXRlclN0YXJ0T2ZXZWVrID0gc3RhcnRPZldlZWsobGF0ZXJEYXRlXywgb3B0aW9ucyk7CiAgY29uc3QgZWFybGllclN0YXJ0T2ZXZWVrID0gc3RhcnRPZldlZWsoZWFybGllckRhdGVfLCBvcHRpb25zKTsKICBjb25zdCBsYXRlclRpbWVzdGFtcCA9ICtsYXRlclN0YXJ0T2ZXZWVrIC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhsYXRlclN0YXJ0T2ZXZWVrKTsKICBjb25zdCBlYXJsaWVyVGltZXN0YW1wID0gK2VhcmxpZXJTdGFydE9mV2VlayAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZWFybGllclN0YXJ0T2ZXZWVrKTsKICByZXR1cm4gTWF0aC5yb3VuZCgobGF0ZXJUaW1lc3RhbXAgLSBlYXJsaWVyVGltZXN0YW1wKSAvIG1pbGxpc2Vjb25kc0luV2Vlayk7Cn0KdmFyIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3NfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzLmpzIigpIHsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3NfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3M7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgcmV0dXJuIGxhdGVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAtIGVhcmxpZXJEYXRlXy5nZXRGdWxsWWVhcigpOwp9CnZhciBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycy5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkRheXMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluRGF5cyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHNpZ24gPSBjb21wYXJlTG9jYWxBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICBjb25zdCBkaWZmZXJlbmNlID0gTWF0aC5hYnMoCiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKQogICk7CiAgbGF0ZXJEYXRlXy5zZXREYXRlKGxhdGVyRGF0ZV8uZ2V0RGF0ZSgpIC0gc2lnbiAqIGRpZmZlcmVuY2UpOwogIGNvbnN0IGlzTGFzdERheU5vdEZ1bGwgPSBOdW1iZXIoCiAgICBjb21wYXJlTG9jYWxBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSA9PT0gLXNpZ24KICApOwogIGNvbnN0IHJlc3VsdCA9IHNpZ24gKiAoZGlmZmVyZW5jZSAtIGlzTGFzdERheU5vdEZ1bGwpOwogIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0Owp9CmZ1bmN0aW9uIGNvbXBhcmVMb2NhbEFzYyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7CiAgY29uc3QgZGlmZiA9IGxhdGVyRGF0ZS5nZXRGdWxsWWVhcigpIC0gZWFybGllckRhdGUuZ2V0RnVsbFllYXIoKSB8fCBsYXRlckRhdGUuZ2V0TW9udGgoKSAtIGVhcmxpZXJEYXRlLmdldE1vbnRoKCkgfHwgbGF0ZXJEYXRlLmdldERhdGUoKSAtIGVhcmxpZXJEYXRlLmdldERhdGUoKSB8fCBsYXRlckRhdGUuZ2V0SG91cnMoKSAtIGVhcmxpZXJEYXRlLmdldEhvdXJzKCkgfHwgbGF0ZXJEYXRlLmdldE1pbnV0ZXMoKSAtIGVhcmxpZXJEYXRlLmdldE1pbnV0ZXMoKSB8fCBsYXRlckRhdGUuZ2V0U2Vjb25kcygpIC0gZWFybGllckRhdGUuZ2V0U2Vjb25kcygpIHx8IGxhdGVyRGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGVhcmxpZXJEYXRlLmdldE1pbGxpc2Vjb25kcygpOwogIGlmIChkaWZmIDwgMCkgcmV0dXJuIC0xOwogIGlmIChkaWZmID4gMCkgcmV0dXJuIDE7CiAgcmV0dXJuIGRpZmY7Cn0KdmFyIGRpZmZlcmVuY2VJbkRheXNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5EYXlzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKCk7CiAgICBkaWZmZXJlbmNlSW5EYXlzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5EYXlzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZ2V0Um91bmRpbmdNZXRob2QuanMKZnVuY3Rpb24gZ2V0Um91bmRpbmdNZXRob2QobWV0aG9kKSB7CiAgcmV0dXJuIChudW1iZXIyKSA9PiB7CiAgICBjb25zdCByb3VuZCA9IG1ldGhvZCA/IE1hdGhbbWV0aG9kXSA6IE1hdGgudHJ1bmM7CiAgICBjb25zdCByZXN1bHQgPSByb3VuZChudW1iZXIyKTsKICAgIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0OwogIH07Cn0KdmFyIGluaXRfZ2V0Um91bmRpbmdNZXRob2QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9nZXRSb3VuZGluZ01ldGhvZC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluSG91cnMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluSG91cnMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBjb25zdCBkaWZmID0gKCtsYXRlckRhdGVfIC0gK2VhcmxpZXJEYXRlXykgLyBtaWxsaXNlY29uZHNJbkhvdXI7CiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTsKfQp2YXIgZGlmZmVyZW5jZUluSG91cnNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluSG91cnMuanMiKCkgewogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGRpZmZlcmVuY2VJbkhvdXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5Ib3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJJU09XZWVrWWVhcnMuanMKZnVuY3Rpb24gc3ViSVNPV2Vla1llYXJzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRJU09XZWVrWWVhcnMoZGF0ZSwgLWFtb3VudCwgb3B0aW9ucyk7Cn0KdmFyIHN1YklTT1dlZWtZZWFyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJJU09XZWVrWWVhcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViSVNPV2Vla1llYXJzLmpzIigpIHsKICAgIGluaXRfYWRkSVNPV2Vla1llYXJzKCk7CiAgICBzdWJJU09XZWVrWWVhcnNfZGVmYXVsdCA9IHN1YklTT1dlZWtZZWFyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5JU09XZWVrWWVhcnMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgY29uc3Qgc2lnbiA9IGNvbXBhcmVBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICBjb25zdCBkaWZmID0gTWF0aC5hYnMoCiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8sIG9wdGlvbnMpCiAgKTsKICBjb25zdCBhZGp1c3RlZERhdGUgPSBzdWJJU09XZWVrWWVhcnMobGF0ZXJEYXRlXywgc2lnbiAqIGRpZmYsIG9wdGlvbnMpOwogIGNvbnN0IGlzTGFzdElTT1dlZWtZZWFyTm90RnVsbCA9IE51bWJlcigKICAgIGNvbXBhcmVBc2MoYWRqdXN0ZWREYXRlLCBlYXJsaWVyRGF0ZV8pID09PSAtc2lnbgogICk7CiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmIC0gaXNMYXN0SVNPV2Vla1llYXJOb3RGdWxsKTsKICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDsKfQp2YXIgZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbklTT1dlZWtZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5JU09XZWVrWWVhcnMuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb21wYXJlQXNjKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzKCk7CiAgICBpbml0X3N1YklTT1dlZWtZZWFycygpOwogICAgZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5JU09XZWVrWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7CiAgcmV0dXJuICt0b0RhdGUobGF0ZXJEYXRlKSAtICt0b0RhdGUoZWFybGllckRhdGUpOwp9CnZhciBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTWludXRlcy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5NaW51dGVzKGRhdGVMZWZ0LCBkYXRlUmlnaHQsIG9wdGlvbnMpIHsKICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIC8gbWlsbGlzZWNvbmRzSW5NaW51dGU7CiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTsKfQp2YXIgZGlmZmVyZW5jZUluTWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5NaW51dGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbk1pbnV0ZXMuanMiKCkgewogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzKCk7CiAgICBkaWZmZXJlbmNlSW5NaW51dGVzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5NaW51dGVzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mRGF5LmpzCmZ1bmN0aW9uIGVuZE9mRGF5KGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mRGF5X2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mRGF5LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZkRheV9kZWZhdWx0ID0gZW5kT2ZEYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZNb250aC5qcwpmdW5jdGlvbiBlbmRPZk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgbW9udGggPSBfZGF0ZS5nZXRNb250aCgpOwogIF9kYXRlLnNldEZ1bGxZZWFyKF9kYXRlLmdldEZ1bGxZZWFyKCksIG1vbnRoICsgMSwgMCk7CiAgX2RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZk1vbnRoX2RlZmF1bHQgPSBlbmRPZk1vbnRoOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzTGFzdERheU9mTW9udGguanMKZnVuY3Rpb24gaXNMYXN0RGF5T2ZNb250aChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIHJldHVybiArZW5kT2ZEYXkoX2RhdGUsIG9wdGlvbnMpID09PSArZW5kT2ZNb250aChfZGF0ZSwgb3B0aW9ucyk7Cn0KdmFyIGlzTGFzdERheU9mTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfaXNMYXN0RGF5T2ZNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0xhc3REYXlPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfZW5kT2ZEYXkoKTsKICAgIGluaXRfZW5kT2ZNb250aCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzTGFzdERheU9mTW9udGhfZGVmYXVsdCA9IGlzTGFzdERheU9mTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTW9udGhzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbk1vbnRocyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIHdvcmtpbmdMYXRlckRhdGUsIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHNpZ24gPSBjb21wYXJlQXNjKHdvcmtpbmdMYXRlckRhdGUsIGVhcmxpZXJEYXRlXyk7CiAgY29uc3QgZGlmZmVyZW5jZSA9IE1hdGguYWJzKAogICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMod29ya2luZ0xhdGVyRGF0ZSwgZWFybGllckRhdGVfKQogICk7CiAgaWYgKGRpZmZlcmVuY2UgPCAxKSByZXR1cm4gMDsKICBpZiAod29ya2luZ0xhdGVyRGF0ZS5nZXRNb250aCgpID09PSAxICYmIHdvcmtpbmdMYXRlckRhdGUuZ2V0RGF0ZSgpID4gMjcpCiAgICB3b3JraW5nTGF0ZXJEYXRlLnNldERhdGUoMzApOwogIHdvcmtpbmdMYXRlckRhdGUuc2V0TW9udGgod29ya2luZ0xhdGVyRGF0ZS5nZXRNb250aCgpIC0gc2lnbiAqIGRpZmZlcmVuY2UpOwogIGxldCBpc0xhc3RNb250aE5vdEZ1bGwgPSBjb21wYXJlQXNjKHdvcmtpbmdMYXRlckRhdGUsIGVhcmxpZXJEYXRlXykgPT09IC1zaWduOwogIGlmIChpc0xhc3REYXlPZk1vbnRoKGxhdGVyRGF0ZV8pICYmIGRpZmZlcmVuY2UgPT09IDEgJiYgY29tcGFyZUFzYyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pID09PSAxKSB7CiAgICBpc0xhc3RNb250aE5vdEZ1bGwgPSBmYWxzZTsKICB9CiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmZXJlbmNlIC0gK2lzTGFzdE1vbnRoTm90RnVsbCk7CiAgcmV0dXJuIHJlc3VsdCA9PT0gMCA/IDAgOiByZXN1bHQ7Cn0KdmFyIGRpZmZlcmVuY2VJbk1vbnRoc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5Nb250aHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTW9udGhzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfY29tcGFyZUFzYygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocygpOwogICAgaW5pdF9pc0xhc3REYXlPZk1vbnRoKCk7CiAgICBkaWZmZXJlbmNlSW5Nb250aHNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbk1vbnRoczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5RdWFydGVycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5RdWFydGVycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbk1vbnRocyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSAvIDM7CiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTsKfQp2YXIgZGlmZmVyZW5jZUluUXVhcnRlcnNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluUXVhcnRlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluUXVhcnRlcnMuanMiKCkgewogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5Nb250aHMoKTsKICAgIGRpZmZlcmVuY2VJblF1YXJ0ZXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5RdWFydGVyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5TZWNvbmRzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJblNlY29uZHMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSkgLyAxZTM7CiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTsKfQp2YXIgZGlmZmVyZW5jZUluU2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5TZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJblNlY29uZHMuanMiKCkgewogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMoKTsKICAgIGRpZmZlcmVuY2VJblNlY29uZHNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJblNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluV2Vla3MuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluV2Vla3MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5EYXlzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIC8gNzsKICByZXR1cm4gZ2V0Um91bmRpbmdNZXRob2Qob3B0aW9ucz8ucm91bmRpbmdNZXRob2QpKGRpZmYpOwp9CnZhciBkaWZmZXJlbmNlSW5XZWVrc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5XZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5XZWVrcy5qcyIoKSB7CiAgICBpbml0X2dldFJvdW5kaW5nTWV0aG9kKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkRheXMoKTsKICAgIGRpZmZlcmVuY2VJbldlZWtzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5XZWVrczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5ZZWFycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5ZZWFycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHNpZ24gPSBjb21wYXJlQXNjKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgY29uc3QgZGlmZiA9IE1hdGguYWJzKGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSk7CiAgbGF0ZXJEYXRlXy5zZXRGdWxsWWVhcigxNTg0KTsKICBlYXJsaWVyRGF0ZV8uc2V0RnVsbFllYXIoMTU4NCk7CiAgY29uc3QgcGFydGlhbCA9IGNvbXBhcmVBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSA9PT0gLXNpZ247CiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmIC0gK3BhcnRpYWwpOwogIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0Owp9CnZhciBkaWZmZXJlbmNlSW5ZZWFyc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5ZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5ZZWFycy5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2NvbXBhcmVBc2MoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycygpOwogICAgZGlmZmVyZW5jZUluWWVhcnNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJblllYXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvbm9ybWFsaXplSW50ZXJ2YWwuanMKZnVuY3Rpb24gbm9ybWFsaXplSW50ZXJ2YWwoY29udGV4dDIsIGludGVydmFsMykgewogIGNvbnN0IFtzdGFydCwgZW5kM10gPSBub3JtYWxpemVEYXRlcyhjb250ZXh0MiwgaW50ZXJ2YWwzLnN0YXJ0LCBpbnRlcnZhbDMuZW5kKTsKICByZXR1cm4geyBzdGFydCwgZW5kOiBlbmQzIH07Cn0KdmFyIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9ub3JtYWxpemVJbnRlcnZhbC5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaERheU9mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaERheU9mSW50ZXJ2YWwoaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgeyBzdGFydCwgZW5kOiBlbmQzIH0gPSBub3JtYWxpemVJbnRlcnZhbChvcHRpb25zPy5pbiwgaW50ZXJ2YWwzKTsKICBsZXQgcmV2ZXJzZWQgPSArc3RhcnQgPiArZW5kMzsKICBjb25zdCBlbmRUaW1lID0gcmV2ZXJzZWQgPyArc3RhcnQgOiArZW5kMzsKICBjb25zdCBkYXRlID0gcmV2ZXJzZWQgPyBlbmQzIDogc3RhcnQ7CiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBsZXQgc3RlcCA9IG9wdGlvbnM/LnN0ZXAgPz8gMTsKICBpZiAoIXN0ZXApIHJldHVybiBbXTsKICBpZiAoc3RlcCA8IDApIHsKICAgIHN0ZXAgPSAtc3RlcDsKICAgIHJldmVyc2VkID0gIXJldmVyc2VkOwogIH0KICBjb25zdCBkYXRlcyA9IFtdOwogIHdoaWxlICgrZGF0ZSA8PSBlbmRUaW1lKSB7CiAgICBkYXRlcy5wdXNoKGNvbnN0cnVjdEZyb20oc3RhcnQsIGRhdGUpKTsKICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXApOwogICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICB9CiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7Cn0KdmFyIGVhY2hEYXlPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hEYXlPZkludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hEYXlPZkludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgZWFjaERheU9mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hEYXlPZkludGVydmFsOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hIb3VyT2ZJbnRlcnZhbC5qcwpmdW5jdGlvbiBlYWNoSG91ck9mSW50ZXJ2YWwoaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgeyBzdGFydCwgZW5kOiBlbmQzIH0gPSBub3JtYWxpemVJbnRlcnZhbChvcHRpb25zPy5pbiwgaW50ZXJ2YWwzKTsKICBsZXQgcmV2ZXJzZWQgPSArc3RhcnQgPiArZW5kMzsKICBjb25zdCBlbmRUaW1lID0gcmV2ZXJzZWQgPyArc3RhcnQgOiArZW5kMzsKICBjb25zdCBkYXRlID0gcmV2ZXJzZWQgPyBlbmQzIDogc3RhcnQ7CiAgZGF0ZS5zZXRNaW51dGVzKDAsIDAsIDApOwogIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxOwogIGlmICghc3RlcCkgcmV0dXJuIFtdOwogIGlmIChzdGVwIDwgMCkgewogICAgc3RlcCA9IC1zdGVwOwogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgfQogIGNvbnN0IGRhdGVzID0gW107CiAgd2hpbGUgKCtkYXRlIDw9IGVuZFRpbWUpIHsKICAgIGRhdGVzLnB1c2goY29uc3RydWN0RnJvbShzdGFydCwgZGF0ZSkpOwogICAgZGF0ZS5zZXRIb3VycyhkYXRlLmdldEhvdXJzKCkgKyBzdGVwKTsKICB9CiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7Cn0KdmFyIGVhY2hIb3VyT2ZJbnRlcnZhbF9kZWZhdWx0Owp2YXIgaW5pdF9lYWNoSG91ck9mSW50ZXJ2YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaEhvdXJPZkludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgZWFjaEhvdXJPZkludGVydmFsX2RlZmF1bHQgPSBlYWNoSG91ck9mSW50ZXJ2YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaE1pbnV0ZU9mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaE1pbnV0ZU9mSW50ZXJ2YWwoaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgeyBzdGFydCwgZW5kOiBlbmQzIH0gPSBub3JtYWxpemVJbnRlcnZhbChvcHRpb25zPy5pbiwgaW50ZXJ2YWwzKTsKICBzdGFydC5zZXRTZWNvbmRzKDAsIDApOwogIGxldCByZXZlcnNlZCA9ICtzdGFydCA+ICtlbmQzOwogIGNvbnN0IGVuZFRpbWUgPSByZXZlcnNlZCA/ICtzdGFydCA6ICtlbmQzOwogIGxldCBkYXRlID0gcmV2ZXJzZWQgPyBlbmQzIDogc3RhcnQ7CiAgbGV0IHN0ZXAgPSBvcHRpb25zPy5zdGVwID8/IDE7CiAgaWYgKCFzdGVwKSByZXR1cm4gW107CiAgaWYgKHN0ZXAgPCAwKSB7CiAgICBzdGVwID0gLXN0ZXA7CiAgICByZXZlcnNlZCA9ICFyZXZlcnNlZDsKICB9CiAgY29uc3QgZGF0ZXMgPSBbXTsKICB3aGlsZSAoK2RhdGUgPD0gZW5kVGltZSkgewogICAgZGF0ZXMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7CiAgICBkYXRlID0gYWRkTWludXRlcyhkYXRlLCBzdGVwKTsKICB9CiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7Cn0KdmFyIGVhY2hNaW51dGVPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hNaW51dGVPZkludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hNaW51dGVPZkludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwoKTsKICAgIGluaXRfYWRkTWludXRlcygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBlYWNoTWludXRlT2ZJbnRlcnZhbF9kZWZhdWx0ID0gZWFjaE1pbnV0ZU9mSW50ZXJ2YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaE1vbnRoT2ZJbnRlcnZhbC5qcwpmdW5jdGlvbiBlYWNoTW9udGhPZkludGVydmFsKGludGVydmFsMywgb3B0aW9ucykgewogIGNvbnN0IHsgc3RhcnQsIGVuZDogZW5kMyB9ID0gbm9ybWFsaXplSW50ZXJ2YWwob3B0aW9ucz8uaW4sIGludGVydmFsMyk7CiAgbGV0IHJldmVyc2VkID0gK3N0YXJ0ID4gK2VuZDM7CiAgY29uc3QgZW5kVGltZSA9IHJldmVyc2VkID8gK3N0YXJ0IDogK2VuZDM7CiAgY29uc3QgZGF0ZSA9IHJldmVyc2VkID8gZW5kMyA6IHN0YXJ0OwogIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgZGF0ZS5zZXREYXRlKDEpOwogIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxOwogIGlmICghc3RlcCkgcmV0dXJuIFtdOwogIGlmIChzdGVwIDwgMCkgewogICAgc3RlcCA9IC1zdGVwOwogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgfQogIGNvbnN0IGRhdGVzID0gW107CiAgd2hpbGUgKCtkYXRlIDw9IGVuZFRpbWUpIHsKICAgIGRhdGVzLnB1c2goY29uc3RydWN0RnJvbShzdGFydCwgZGF0ZSkpOwogICAgZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBzdGVwKTsKICB9CiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7Cn0KdmFyIGVhY2hNb250aE9mSW50ZXJ2YWxfZGVmYXVsdDsKdmFyIGluaXRfZWFjaE1vbnRoT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoTW9udGhPZkludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgZWFjaE1vbnRoT2ZJbnRlcnZhbF9kZWZhdWx0ID0gZWFjaE1vbnRoT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mUXVhcnRlci5qcwpmdW5jdGlvbiBzdGFydE9mUXVhcnRlcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGN1cnJlbnRNb250aCA9IF9kYXRlLmdldE1vbnRoKCk7CiAgY29uc3QgbW9udGggPSBjdXJyZW50TW9udGggLSBjdXJyZW50TW9udGggJSAzOwogIF9kYXRlLnNldE1vbnRoKG1vbnRoLCAxKTsKICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHN0YXJ0T2ZRdWFydGVyX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZRdWFydGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZRdWFydGVyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mUXVhcnRlcl9kZWZhdWx0ID0gc3RhcnRPZlF1YXJ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFF1YXJ0ZXJPZkludGVydmFsLmpzCmZ1bmN0aW9uIGVhY2hRdWFydGVyT2ZJbnRlcnZhbChpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB7IHN0YXJ0LCBlbmQ6IGVuZDMgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbDMpOwogIGxldCByZXZlcnNlZCA9ICtzdGFydCA+ICtlbmQzOwogIGNvbnN0IGVuZFRpbWUgPSByZXZlcnNlZCA/ICtzdGFydE9mUXVhcnRlcihzdGFydCkgOiArc3RhcnRPZlF1YXJ0ZXIoZW5kMyk7CiAgbGV0IGRhdGUgPSByZXZlcnNlZCA/IHN0YXJ0T2ZRdWFydGVyKGVuZDMpIDogc3RhcnRPZlF1YXJ0ZXIoc3RhcnQpOwogIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxOwogIGlmICghc3RlcCkgcmV0dXJuIFtdOwogIGlmIChzdGVwIDwgMCkgewogICAgc3RlcCA9IC1zdGVwOwogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgfQogIGNvbnN0IGRhdGVzID0gW107CiAgd2hpbGUgKCtkYXRlIDw9IGVuZFRpbWUpIHsKICAgIGRhdGVzLnB1c2goY29uc3RydWN0RnJvbShzdGFydCwgZGF0ZSkpOwogICAgZGF0ZSA9IGFkZFF1YXJ0ZXJzKGRhdGUsIHN0ZXApOwogIH0KICByZXR1cm4gcmV2ZXJzZWQgPyBkYXRlcy5yZXZlcnNlKCkgOiBkYXRlczsKfQp2YXIgZWFjaFF1YXJ0ZXJPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hRdWFydGVyT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoUXVhcnRlck9mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9hZGRRdWFydGVycygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3N0YXJ0T2ZRdWFydGVyKCk7CiAgICBlYWNoUXVhcnRlck9mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hRdWFydGVyT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla09mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaFdlZWtPZkludGVydmFsKGludGVydmFsMywgb3B0aW9ucykgewogIGNvbnN0IHsgc3RhcnQsIGVuZDogZW5kMyB9ID0gbm9ybWFsaXplSW50ZXJ2YWwob3B0aW9ucz8uaW4sIGludGVydmFsMyk7CiAgbGV0IHJldmVyc2VkID0gK3N0YXJ0ID4gK2VuZDM7CiAgY29uc3Qgc3RhcnREYXRlV2VlayA9IHJldmVyc2VkID8gc3RhcnRPZldlZWsoZW5kMywgb3B0aW9ucykgOiBzdGFydE9mV2VlayhzdGFydCwgb3B0aW9ucyk7CiAgY29uc3QgZW5kRGF0ZVdlZWsgPSByZXZlcnNlZCA/IHN0YXJ0T2ZXZWVrKHN0YXJ0LCBvcHRpb25zKSA6IHN0YXJ0T2ZXZWVrKGVuZDMsIG9wdGlvbnMpOwogIHN0YXJ0RGF0ZVdlZWsuc2V0SG91cnMoMTUpOwogIGVuZERhdGVXZWVrLnNldEhvdXJzKDE1KTsKICBjb25zdCBlbmRUaW1lID0gK2VuZERhdGVXZWVrLmdldFRpbWUoKTsKICBsZXQgY3VycmVudERhdGUgPSBzdGFydERhdGVXZWVrOwogIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxOwogIGlmICghc3RlcCkgcmV0dXJuIFtdOwogIGlmIChzdGVwIDwgMCkgewogICAgc3RlcCA9IC1zdGVwOwogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgfQogIGNvbnN0IGRhdGVzID0gW107CiAgd2hpbGUgKCtjdXJyZW50RGF0ZSA8PSBlbmRUaW1lKSB7CiAgICBjdXJyZW50RGF0ZS5zZXRIb3VycygwKTsKICAgIGRhdGVzLnB1c2goY29uc3RydWN0RnJvbShzdGFydCwgY3VycmVudERhdGUpKTsKICAgIGN1cnJlbnREYXRlID0gYWRkV2Vla3MoY3VycmVudERhdGUsIHN0ZXApOwogICAgY3VycmVudERhdGUuc2V0SG91cnMoMTUpOwogIH0KICByZXR1cm4gcmV2ZXJzZWQgPyBkYXRlcy5yZXZlcnNlKCkgOiBkYXRlczsKfQp2YXIgZWFjaFdlZWtPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hXZWVrT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla09mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9hZGRXZWVrcygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3N0YXJ0T2ZXZWVrKCk7CiAgICBlYWNoV2Vla09mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hXZWVrT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla2VuZE9mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaFdlZWtlbmRPZkludGVydmFsKGludGVydmFsMywgb3B0aW9ucykgewogIGNvbnN0IHsgc3RhcnQsIGVuZDogZW5kMyB9ID0gbm9ybWFsaXplSW50ZXJ2YWwob3B0aW9ucz8uaW4sIGludGVydmFsMyk7CiAgY29uc3QgZGF0ZUludGVydmFsID0gZWFjaERheU9mSW50ZXJ2YWwoeyBzdGFydCwgZW5kOiBlbmQzIH0sIG9wdGlvbnMpOwogIGNvbnN0IHdlZWtlbmRzID0gW107CiAgbGV0IGluZGV4MiA9IDA7CiAgd2hpbGUgKGluZGV4MiA8IGRhdGVJbnRlcnZhbC5sZW5ndGgpIHsKICAgIGNvbnN0IGRhdGUgPSBkYXRlSW50ZXJ2YWxbaW5kZXgyKytdOwogICAgaWYgKGlzV2Vla2VuZChkYXRlKSkgd2Vla2VuZHMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7CiAgfQogIHJldHVybiB3ZWVrZW5kczsKfQp2YXIgZWFjaFdlZWtlbmRPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hXZWVrZW5kT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla2VuZE9mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2VhY2hEYXlPZkludGVydmFsKCk7CiAgICBpbml0X2lzV2Vla2VuZCgpOwogICAgZWFjaFdlZWtlbmRPZkludGVydmFsX2RlZmF1bHQgPSBlYWNoV2Vla2VuZE9mSW50ZXJ2YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZk1vbnRoLmpzCmZ1bmN0aW9uIHN0YXJ0T2ZNb250aChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldERhdGUoMSk7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZNb250aC5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc3RhcnRPZk1vbnRoX2RlZmF1bHQgPSBzdGFydE9mTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZk1vbnRoLmpzCmZ1bmN0aW9uIGVhY2hXZWVrZW5kT2ZNb250aChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3Qgc3RhcnQgPSBzdGFydE9mTW9udGgoZGF0ZSwgb3B0aW9ucyk7CiAgY29uc3QgZW5kMyA9IGVuZE9mTW9udGgoZGF0ZSwgb3B0aW9ucyk7CiAgcmV0dXJuIGVhY2hXZWVrZW5kT2ZJbnRlcnZhbCh7IHN0YXJ0LCBlbmQ6IGVuZDMgfSwgb3B0aW9ucyk7Cn0KdmFyIGVhY2hXZWVrZW5kT2ZNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9lYWNoV2Vla2VuZE9mTW9udGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfZWFjaFdlZWtlbmRPZkludGVydmFsKCk7CiAgICBpbml0X2VuZE9mTW9udGgoKTsKICAgIGluaXRfc3RhcnRPZk1vbnRoKCk7CiAgICBlYWNoV2Vla2VuZE9mTW9udGhfZGVmYXVsdCA9IGVhY2hXZWVrZW5kT2ZNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZlllYXIuanMKZnVuY3Rpb24gZW5kT2ZZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgX2RhdGUuc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDApOwogIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBlbmRPZlllYXJfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mWWVhci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZW5kT2ZZZWFyX2RlZmF1bHQgPSBlbmRPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZlllYXIuanMKZnVuY3Rpb24gc3RhcnRPZlllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBkYXRlXy5zZXRGdWxsWWVhcihkYXRlXy5nZXRGdWxsWWVhcigpLCAwLCAxKTsKICBkYXRlXy5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gZGF0ZV87Cn0KdmFyIHN0YXJ0T2ZZZWFyX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZZZWFyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mWWVhcl9kZWZhdWx0ID0gc3RhcnRPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZlllYXIuanMKZnVuY3Rpb24gZWFjaFdlZWtlbmRPZlllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IHN0YXJ0ID0gc3RhcnRPZlllYXIoZGF0ZSwgb3B0aW9ucyk7CiAgY29uc3QgZW5kMyA9IGVuZE9mWWVhcihkYXRlLCBvcHRpb25zKTsKICByZXR1cm4gZWFjaFdlZWtlbmRPZkludGVydmFsKHsgc3RhcnQsIGVuZDogZW5kMyB9LCBvcHRpb25zKTsKfQp2YXIgZWFjaFdlZWtlbmRPZlllYXJfZGVmYXVsdDsKdmFyIGluaXRfZWFjaFdlZWtlbmRPZlllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZlllYXIuanMiKCkgewogICAgaW5pdF9lYWNoV2Vla2VuZE9mSW50ZXJ2YWwoKTsKICAgIGluaXRfZW5kT2ZZZWFyKCk7CiAgICBpbml0X3N0YXJ0T2ZZZWFyKCk7CiAgICBlYWNoV2Vla2VuZE9mWWVhcl9kZWZhdWx0ID0gZWFjaFdlZWtlbmRPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFllYXJPZkludGVydmFsLmpzCmZ1bmN0aW9uIGVhY2hZZWFyT2ZJbnRlcnZhbChpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB7IHN0YXJ0LCBlbmQ6IGVuZDMgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbDMpOwogIGxldCByZXZlcnNlZCA9ICtzdGFydCA+ICtlbmQzOwogIGNvbnN0IGVuZFRpbWUgPSByZXZlcnNlZCA/ICtzdGFydCA6ICtlbmQzOwogIGNvbnN0IGRhdGUgPSByZXZlcnNlZCA/IGVuZDMgOiBzdGFydDsKICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIGRhdGUuc2V0TW9udGgoMCwgMSk7CiAgbGV0IHN0ZXAgPSBvcHRpb25zPy5zdGVwID8/IDE7CiAgaWYgKCFzdGVwKSByZXR1cm4gW107CiAgaWYgKHN0ZXAgPCAwKSB7CiAgICBzdGVwID0gLXN0ZXA7CiAgICByZXZlcnNlZCA9ICFyZXZlcnNlZDsKICB9CiAgY29uc3QgZGF0ZXMgPSBbXTsKICB3aGlsZSAoK2RhdGUgPD0gZW5kVGltZSkgewogICAgZGF0ZXMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7CiAgICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXApOwogIH0KICByZXR1cm4gcmV2ZXJzZWQgPyBkYXRlcy5yZXZlcnNlKCkgOiBkYXRlczsKfQp2YXIgZWFjaFllYXJPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hZZWFyT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoWWVhck9mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBlYWNoWWVhck9mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hZZWFyT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZkRlY2FkZS5qcwpmdW5jdGlvbiBlbmRPZkRlY2FkZShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpOwogIGNvbnN0IGRlY2FkZSA9IDkgKyBNYXRoLmZsb29yKHllYXIgLyAxMCkgKiAxMDsKICBfZGF0ZS5zZXRGdWxsWWVhcihkZWNhZGUsIDExLCAzMSk7CiAgX2RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mRGVjYWRlX2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mRGVjYWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mRGVjYWRlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZkRlY2FkZV9kZWZhdWx0ID0gZW5kT2ZEZWNhZGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZIb3VyLmpzCmZ1bmN0aW9uIGVuZE9mSG91cihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldE1pbnV0ZXMoNTksIDU5LCA5OTkpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgZW5kT2ZIb3VyX2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mSG91ciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZkhvdXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGVuZE9mSG91cl9kZWZhdWx0ID0gZW5kT2ZIb3VyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mV2Vlay5qcwpmdW5jdGlvbiBlbmRPZldlZWsoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3Qgd2Vla1N0YXJ0c09uID0gb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IDA7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRheSA9IF9kYXRlLmdldERheSgpOwogIGNvbnN0IGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gLTcgOiAwKSArIDYgLSAoZGF5IC0gd2Vla1N0YXJ0c09uKTsKICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSArIGRpZmYpOwogIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBlbmRPZldlZWtfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZXZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mV2Vlay5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZW5kT2ZXZWVrX2RlZmF1bHQgPSBlbmRPZldlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZJU09XZWVrLmpzCmZ1bmN0aW9uIGVuZE9mSVNPV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGVuZE9mV2VlayhkYXRlLCB7IC4uLm9wdGlvbnMsIHdlZWtTdGFydHNPbjogMSB9KTsKfQp2YXIgZW5kT2ZJU09XZWVrX2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mSVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZklTT1dlZWsuanMiKCkgewogICAgaW5pdF9lbmRPZldlZWsoKTsKICAgIGVuZE9mSVNPV2Vla19kZWZhdWx0ID0gZW5kT2ZJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mSVNPV2Vla1llYXIuanMKZnVuY3Rpb24gZW5kT2ZJU09XZWVrWWVhcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgeWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogIGNvbnN0IGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDQpOwogIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3QgX2RhdGUgPSBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLCBvcHRpb25zKTsKICBfZGF0ZS5zZXRNaWxsaXNlY29uZHMoX2RhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSAxKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mSVNPV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZJU09XZWVrWWVhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZklTT1dlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9nZXRJU09XZWVrWWVhcigpOwogICAgaW5pdF9zdGFydE9mSVNPV2VlaygpOwogICAgZW5kT2ZJU09XZWVrWWVhcl9kZWZhdWx0ID0gZW5kT2ZJU09XZWVrWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZk1pbnV0ZS5qcwpmdW5jdGlvbiBlbmRPZk1pbnV0ZShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldFNlY29uZHMoNTksIDk5OSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBlbmRPZk1pbnV0ZV9kZWZhdWx0Owp2YXIgaW5pdF9lbmRPZk1pbnV0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZk1pbnV0ZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZW5kT2ZNaW51dGVfZGVmYXVsdCA9IGVuZE9mTWludXRlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mUXVhcnRlci5qcwpmdW5jdGlvbiBlbmRPZlF1YXJ0ZXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBjdXJyZW50TW9udGggPSBfZGF0ZS5nZXRNb250aCgpOwogIGNvbnN0IG1vbnRoID0gY3VycmVudE1vbnRoIC0gY3VycmVudE1vbnRoICUgMyArIDM7CiAgX2RhdGUuc2V0TW9udGgobW9udGgsIDApOwogIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBlbmRPZlF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZRdWFydGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mUXVhcnRlci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZW5kT2ZRdWFydGVyX2RlZmF1bHQgPSBlbmRPZlF1YXJ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZTZWNvbmQuanMKZnVuY3Rpb24gZW5kT2ZTZWNvbmQoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBfZGF0ZS5zZXRNaWxsaXNlY29uZHMoOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mU2Vjb25kX2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mU2Vjb25kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mU2Vjb25kLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZlNlY29uZF9kZWZhdWx0ID0gZW5kT2ZTZWNvbmQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZUb2RheS5qcwpmdW5jdGlvbiBlbmRPZlRvZGF5KG9wdGlvbnMpIHsKICByZXR1cm4gZW5kT2ZEYXkoRGF0ZS5ub3coKSwgb3B0aW9ucyk7Cn0KdmFyIGVuZE9mVG9kYXlfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZUb2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZlRvZGF5LmpzIigpIHsKICAgIGluaXRfZW5kT2ZEYXkoKTsKICAgIGVuZE9mVG9kYXlfZGVmYXVsdCA9IGVuZE9mVG9kYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZUb21vcnJvdy5qcwpmdW5jdGlvbiBlbmRPZlRvbW9ycm93KG9wdGlvbnMpIHsKICBjb25zdCBub3cyID0gY29uc3RydWN0Tm93KG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gbm93Mi5nZXRGdWxsWWVhcigpOwogIGNvbnN0IG1vbnRoID0gbm93Mi5nZXRNb250aCgpOwogIGNvbnN0IGRheSA9IG5vdzIuZ2V0RGF0ZSgpOwogIGNvbnN0IGRhdGUgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pOwogIGRhdGUuc2V0RnVsbFllYXIoeWVhciwgbW9udGgsIGRheSArIDEpOwogIGRhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gb3B0aW9ucz8uaW4gPyBvcHRpb25zLmluKGRhdGUpIDogZGF0ZTsKfQp2YXIgZW5kT2ZUb21vcnJvd19kZWZhdWx0Owp2YXIgaW5pdF9lbmRPZlRvbW9ycm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mVG9tb3Jyb3cuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGVuZE9mVG9tb3Jyb3dfZGVmYXVsdCA9IGVuZE9mVG9tb3Jyb3c7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZZZXN0ZXJkYXkuanMKZnVuY3Rpb24gZW5kT2ZZZXN0ZXJkYXkob3B0aW9ucykgewogIGNvbnN0IG5vdzIgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pOwogIGNvbnN0IGRhdGUgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCAwKTsKICBkYXRlLnNldEZ1bGxZZWFyKG5vdzIuZ2V0RnVsbFllYXIoKSwgbm93Mi5nZXRNb250aCgpLCBub3cyLmdldERhdGUoKSAtIDEpOwogIGRhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gZGF0ZTsKfQp2YXIgZW5kT2ZZZXN0ZXJkYXlfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZZZXN0ZXJkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZZZXN0ZXJkYXkuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgZW5kT2ZZZXN0ZXJkYXlfZGVmYXVsdCA9IGVuZE9mWWVzdGVyZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlLmpzCnZhciBmb3JtYXREaXN0YW5jZUxvY2FsZSwgZm9ybWF0RGlzdGFuY2U7CnZhciBpbml0X2Zvcm1hdERpc3RhbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlLmpzIigpIHsKICAgIGZvcm1hdERpc3RhbmNlTG9jYWxlID0gewogICAgICBsZXNzVGhhblhTZWNvbmRzOiB7CiAgICAgICAgb25lOiAibGVzcyB0aGFuIGEgc2Vjb25kIiwKICAgICAgICBvdGhlcjogImxlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcyIKICAgICAgfSwKICAgICAgeFNlY29uZHM6IHsKICAgICAgICBvbmU6ICIxIHNlY29uZCIsCiAgICAgICAgb3RoZXI6ICJ7e2NvdW50fX0gc2Vjb25kcyIKICAgICAgfSwKICAgICAgaGFsZkFNaW51dGU6ICJoYWxmIGEgbWludXRlIiwKICAgICAgbGVzc1RoYW5YTWludXRlczogewogICAgICAgIG9uZTogImxlc3MgdGhhbiBhIG1pbnV0ZSIsCiAgICAgICAgb3RoZXI6ICJsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMiCiAgICAgIH0sCiAgICAgIHhNaW51dGVzOiB7CiAgICAgICAgb25lOiAiMSBtaW51dGUiLAogICAgICAgIG90aGVyOiAie3tjb3VudH19IG1pbnV0ZXMiCiAgICAgIH0sCiAgICAgIGFib3V0WEhvdXJzOiB7CiAgICAgICAgb25lOiAiYWJvdXQgMSBob3VyIiwKICAgICAgICBvdGhlcjogImFib3V0IHt7Y291bnR9fSBob3VycyIKICAgICAgfSwKICAgICAgeEhvdXJzOiB7CiAgICAgICAgb25lOiAiMSBob3VyIiwKICAgICAgICBvdGhlcjogInt7Y291bnR9fSBob3VycyIKICAgICAgfSwKICAgICAgeERheXM6IHsKICAgICAgICBvbmU6ICIxIGRheSIsCiAgICAgICAgb3RoZXI6ICJ7e2NvdW50fX0gZGF5cyIKICAgICAgfSwKICAgICAgYWJvdXRYV2Vla3M6IHsKICAgICAgICBvbmU6ICJhYm91dCAxIHdlZWsiLAogICAgICAgIG90aGVyOiAiYWJvdXQge3tjb3VudH19IHdlZWtzIgogICAgICB9LAogICAgICB4V2Vla3M6IHsKICAgICAgICBvbmU6ICIxIHdlZWsiLAogICAgICAgIG90aGVyOiAie3tjb3VudH19IHdlZWtzIgogICAgICB9LAogICAgICBhYm91dFhNb250aHM6IHsKICAgICAgICBvbmU6ICJhYm91dCAxIG1vbnRoIiwKICAgICAgICBvdGhlcjogImFib3V0IHt7Y291bnR9fSBtb250aHMiCiAgICAgIH0sCiAgICAgIHhNb250aHM6IHsKICAgICAgICBvbmU6ICIxIG1vbnRoIiwKICAgICAgICBvdGhlcjogInt7Y291bnR9fSBtb250aHMiCiAgICAgIH0sCiAgICAgIGFib3V0WFllYXJzOiB7CiAgICAgICAgb25lOiAiYWJvdXQgMSB5ZWFyIiwKICAgICAgICBvdGhlcjogImFib3V0IHt7Y291bnR9fSB5ZWFycyIKICAgICAgfSwKICAgICAgeFllYXJzOiB7CiAgICAgICAgb25lOiAiMSB5ZWFyIiwKICAgICAgICBvdGhlcjogInt7Y291bnR9fSB5ZWFycyIKICAgICAgfSwKICAgICAgb3ZlclhZZWFyczogewogICAgICAgIG9uZTogIm92ZXIgMSB5ZWFyIiwKICAgICAgICBvdGhlcjogIm92ZXIge3tjb3VudH19IHllYXJzIgogICAgICB9LAogICAgICBhbG1vc3RYWWVhcnM6IHsKICAgICAgICBvbmU6ICJhbG1vc3QgMSB5ZWFyIiwKICAgICAgICBvdGhlcjogImFsbW9zdCB7e2NvdW50fX0geWVhcnMiCiAgICAgIH0KICAgIH07CiAgICBmb3JtYXREaXN0YW5jZSA9ICh0b2tlbiwgY291bnQyLCBvcHRpb25zKSA9PiB7CiAgICAgIGxldCByZXN1bHQ7CiAgICAgIGNvbnN0IHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07CiAgICAgIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gInN0cmluZyIpIHsKICAgICAgICByZXN1bHQgPSB0b2tlblZhbHVlOwogICAgICB9IGVsc2UgaWYgKGNvdW50MiA9PT0gMSkgewogICAgICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub25lOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub3RoZXIucmVwbGFjZSgie3tjb3VudH19IiwgY291bnQyLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICAgIGlmIChvcHRpb25zPy5hZGRTdWZmaXgpIHsKICAgICAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHsKICAgICAgICAgIHJldHVybiAiaW4gIiArIHJlc3VsdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHJlc3VsdCArICIgYWdvIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4uanMKZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykgewogIHJldHVybiAob3B0aW9ucyA9IHt9KSA9PiB7CiAgICBjb25zdCB3aWR0aCA9IG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDsKICAgIGNvbnN0IGZvcm1hdDIgPSBhcmdzLmZvcm1hdHNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0c1thcmdzLmRlZmF1bHRXaWR0aF07CiAgICByZXR1cm4gZm9ybWF0MjsKICB9Owp9CnZhciBpbml0X2J1aWxkRm9ybWF0TG9uZ0ZuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9fbGliL2J1aWxkRm9ybWF0TG9uZ0ZuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nLmpzCnZhciBkYXRlRm9ybWF0cywgdGltZUZvcm1hdHMsIGRhdGVUaW1lRm9ybWF0cywgZm9ybWF0TG9uZzsKdmFyIGluaXRfZm9ybWF0TG9uZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nLmpzIigpIHsKICAgIGluaXRfYnVpbGRGb3JtYXRMb25nRm4oKTsKICAgIGRhdGVGb3JtYXRzID0gewogICAgICBmdWxsOiAiRUVFRSwgTU1NTSBkbywgeSIsCiAgICAgIGxvbmc6ICJNTU1NIGRvLCB5IiwKICAgICAgbWVkaXVtOiAiTU1NIGQsIHkiLAogICAgICBzaG9ydDogIk1NL2RkL3l5eXkiCiAgICB9OwogICAgdGltZUZvcm1hdHMgPSB7CiAgICAgIGZ1bGw6ICJoOm1tOnNzIGEgenp6eiIsCiAgICAgIGxvbmc6ICJoOm1tOnNzIGEgeiIsCiAgICAgIG1lZGl1bTogImg6bW06c3MgYSIsCiAgICAgIHNob3J0OiAiaDptbSBhIgogICAgfTsKICAgIGRhdGVUaW1lRm9ybWF0cyA9IHsKICAgICAgZnVsbDogInt7ZGF0ZX19ICdhdCcge3t0aW1lfX0iLAogICAgICBsb25nOiAie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fSIsCiAgICAgIG1lZGl1bTogInt7ZGF0ZX19LCB7e3RpbWV9fSIsCiAgICAgIHNob3J0OiAie3tkYXRlfX0sIHt7dGltZX19IgogICAgfTsKICAgIGZvcm1hdExvbmcgPSB7CiAgICAgIGRhdGU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHsKICAgICAgICBmb3JtYXRzOiBkYXRlRm9ybWF0cywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJmdWxsIgogICAgICB9KSwKICAgICAgdGltZTogYnVpbGRGb3JtYXRMb25nRm4oewogICAgICAgIGZvcm1hdHM6IHRpbWVGb3JtYXRzLAogICAgICAgIGRlZmF1bHRXaWR0aDogImZ1bGwiCiAgICAgIH0pLAogICAgICBkYXRlVGltZTogYnVpbGRGb3JtYXRMb25nRm4oewogICAgICAgIGZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJmdWxsIgogICAgICB9KQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRSZWxhdGl2ZS5qcwp2YXIgZm9ybWF0UmVsYXRpdmVMb2NhbGUsIGZvcm1hdFJlbGF0aXZlOwp2YXIgaW5pdF9mb3JtYXRSZWxhdGl2ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRSZWxhdGl2ZS5qcyIoKSB7CiAgICBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHsKICAgICAgbGFzdFdlZWs6ICInbGFzdCcgZWVlZSAnYXQnIHAiLAogICAgICB5ZXN0ZXJkYXk6ICIneWVzdGVyZGF5IGF0JyBwIiwKICAgICAgdG9kYXk6ICIndG9kYXkgYXQnIHAiLAogICAgICB0b21vcnJvdzogIid0b21vcnJvdyBhdCcgcCIsCiAgICAgIG5leHRXZWVrOiAiZWVlZSAnYXQnIHAiLAogICAgICBvdGhlcjogIlAiCiAgICB9OwogICAgZm9ybWF0UmVsYXRpdmUgPSAodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSA9PiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRMb2NhbGl6ZUZuLmpzCmZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7CiAgcmV0dXJuICh2YWx1ZTIsIG9wdGlvbnMpID0+IHsKICAgIGNvbnN0IGNvbnRleHQyID0gb3B0aW9ucz8uY29udGV4dCA/IFN0cmluZyhvcHRpb25zLmNvbnRleHQpIDogInN0YW5kYWxvbmUiOwogICAgbGV0IHZhbHVlc0FycmF5OwogICAgaWYgKGNvbnRleHQyID09PSAiZm9ybWF0dGluZyIgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7CiAgICAgIGNvbnN0IGRlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdEZvcm1hdHRpbmdXaWR0aCB8fCBhcmdzLmRlZmF1bHRXaWR0aDsKICAgICAgY29uc3Qgd2lkdGggPSBvcHRpb25zPy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDsKICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1tkZWZhdWx0V2lkdGhdOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0V2lkdGg7CiAgICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucz8ud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDsKICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLnZhbHVlc1t3aWR0aF0gfHwgYXJncy52YWx1ZXNbZGVmYXVsdFdpZHRoXTsKICAgIH0KICAgIGNvbnN0IGluZGV4MiA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayh2YWx1ZTIpIDogdmFsdWUyOwogICAgcmV0dXJuIHZhbHVlc0FycmF5W2luZGV4Ml07CiAgfTsKfQp2YXIgaW5pdF9idWlsZExvY2FsaXplRm4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRMb2NhbGl6ZUZuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS5qcwp2YXIgZXJhVmFsdWVzLCBxdWFydGVyVmFsdWVzLCBtb250aFZhbHVlcywgZGF5VmFsdWVzLCBkYXlQZXJpb2RWYWx1ZXMsIGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMsIG9yZGluYWxOdW1iZXIsIGxvY2FsaXplOwp2YXIgaW5pdF9sb2NhbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS5qcyIoKSB7CiAgICBpbml0X2J1aWxkTG9jYWxpemVGbigpOwogICAgZXJhVmFsdWVzID0gewogICAgICBuYXJyb3c6IFsiQiIsICJBIl0sCiAgICAgIGFiYnJldmlhdGVkOiBbIkJDIiwgIkFEIl0sCiAgICAgIHdpZGU6IFsiQmVmb3JlIENocmlzdCIsICJBbm5vIERvbWluaSJdCiAgICB9OwogICAgcXVhcnRlclZhbHVlcyA9IHsKICAgICAgbmFycm93OiBbIjEiLCAiMiIsICIzIiwgIjQiXSwKICAgICAgYWJicmV2aWF0ZWQ6IFsiUTEiLCAiUTIiLCAiUTMiLCAiUTQiXSwKICAgICAgd2lkZTogWyIxc3QgcXVhcnRlciIsICIybmQgcXVhcnRlciIsICIzcmQgcXVhcnRlciIsICI0dGggcXVhcnRlciJdCiAgICB9OwogICAgbW9udGhWYWx1ZXMgPSB7CiAgICAgIG5hcnJvdzogWyJKIiwgIkYiLCAiTSIsICJBIiwgIk0iLCAiSiIsICJKIiwgIkEiLCAiUyIsICJPIiwgIk4iLCAiRCJdLAogICAgICBhYmJyZXZpYXRlZDogWwogICAgICAgICJKYW4iLAogICAgICAgICJGZWIiLAogICAgICAgICJNYXIiLAogICAgICAgICJBcHIiLAogICAgICAgICJNYXkiLAogICAgICAgICJKdW4iLAogICAgICAgICJKdWwiLAogICAgICAgICJBdWciLAogICAgICAgICJTZXAiLAogICAgICAgICJPY3QiLAogICAgICAgICJOb3YiLAogICAgICAgICJEZWMiCiAgICAgIF0sCiAgICAgIHdpZGU6IFsKICAgICAgICAiSmFudWFyeSIsCiAgICAgICAgIkZlYnJ1YXJ5IiwKICAgICAgICAiTWFyY2giLAogICAgICAgICJBcHJpbCIsCiAgICAgICAgIk1heSIsCiAgICAgICAgIkp1bmUiLAogICAgICAgICJKdWx5IiwKICAgICAgICAiQXVndXN0IiwKICAgICAgICAiU2VwdGVtYmVyIiwKICAgICAgICAiT2N0b2JlciIsCiAgICAgICAgIk5vdmVtYmVyIiwKICAgICAgICAiRGVjZW1iZXIiCiAgICAgIF0KICAgIH07CiAgICBkYXlWYWx1ZXMgPSB7CiAgICAgIG5hcnJvdzogWyJTIiwgIk0iLCAiVCIsICJXIiwgIlQiLCAiRiIsICJTIl0sCiAgICAgIHNob3J0OiBbIlN1IiwgIk1vIiwgIlR1IiwgIldlIiwgIlRoIiwgIkZyIiwgIlNhIl0sCiAgICAgIGFiYnJldmlhdGVkOiBbIlN1biIsICJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCJdLAogICAgICB3aWRlOiBbCiAgICAgICAgIlN1bmRheSIsCiAgICAgICAgIk1vbmRheSIsCiAgICAgICAgIlR1ZXNkYXkiLAogICAgICAgICJXZWRuZXNkYXkiLAogICAgICAgICJUaHVyc2RheSIsCiAgICAgICAgIkZyaWRheSIsCiAgICAgICAgIlNhdHVyZGF5IgogICAgICBdCiAgICB9OwogICAgZGF5UGVyaW9kVmFsdWVzID0gewogICAgICBuYXJyb3c6IHsKICAgICAgICBhbTogImEiLAogICAgICAgIHBtOiAicCIsCiAgICAgICAgbWlkbmlnaHQ6ICJtaSIsCiAgICAgICAgbm9vbjogIm4iLAogICAgICAgIG1vcm5pbmc6ICJtb3JuaW5nIiwKICAgICAgICBhZnRlcm5vb246ICJhZnRlcm5vb24iLAogICAgICAgIGV2ZW5pbmc6ICJldmVuaW5nIiwKICAgICAgICBuaWdodDogIm5pZ2h0IgogICAgICB9LAogICAgICBhYmJyZXZpYXRlZDogewogICAgICAgIGFtOiAiQU0iLAogICAgICAgIHBtOiAiUE0iLAogICAgICAgIG1pZG5pZ2h0OiAibWlkbmlnaHQiLAogICAgICAgIG5vb246ICJub29uIiwKICAgICAgICBtb3JuaW5nOiAibW9ybmluZyIsCiAgICAgICAgYWZ0ZXJub29uOiAiYWZ0ZXJub29uIiwKICAgICAgICBldmVuaW5nOiAiZXZlbmluZyIsCiAgICAgICAgbmlnaHQ6ICJuaWdodCIKICAgICAgfSwKICAgICAgd2lkZTogewogICAgICAgIGFtOiAiYS5tLiIsCiAgICAgICAgcG06ICJwLm0uIiwKICAgICAgICBtaWRuaWdodDogIm1pZG5pZ2h0IiwKICAgICAgICBub29uOiAibm9vbiIsCiAgICAgICAgbW9ybmluZzogIm1vcm5pbmciLAogICAgICAgIGFmdGVybm9vbjogImFmdGVybm9vbiIsCiAgICAgICAgZXZlbmluZzogImV2ZW5pbmciLAogICAgICAgIG5pZ2h0OiAibmlnaHQiCiAgICAgIH0KICAgIH07CiAgICBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0gewogICAgICBuYXJyb3c6IHsKICAgICAgICBhbTogImEiLAogICAgICAgIHBtOiAicCIsCiAgICAgICAgbWlkbmlnaHQ6ICJtaSIsCiAgICAgICAgbm9vbjogIm4iLAogICAgICAgIG1vcm5pbmc6ICJpbiB0aGUgbW9ybmluZyIsCiAgICAgICAgYWZ0ZXJub29uOiAiaW4gdGhlIGFmdGVybm9vbiIsCiAgICAgICAgZXZlbmluZzogImluIHRoZSBldmVuaW5nIiwKICAgICAgICBuaWdodDogImF0IG5pZ2h0IgogICAgICB9LAogICAgICBhYmJyZXZpYXRlZDogewogICAgICAgIGFtOiAiQU0iLAogICAgICAgIHBtOiAiUE0iLAogICAgICAgIG1pZG5pZ2h0OiAibWlkbmlnaHQiLAogICAgICAgIG5vb246ICJub29uIiwKICAgICAgICBtb3JuaW5nOiAiaW4gdGhlIG1vcm5pbmciLAogICAgICAgIGFmdGVybm9vbjogImluIHRoZSBhZnRlcm5vb24iLAogICAgICAgIGV2ZW5pbmc6ICJpbiB0aGUgZXZlbmluZyIsCiAgICAgICAgbmlnaHQ6ICJhdCBuaWdodCIKICAgICAgfSwKICAgICAgd2lkZTogewogICAgICAgIGFtOiAiYS5tLiIsCiAgICAgICAgcG06ICJwLm0uIiwKICAgICAgICBtaWRuaWdodDogIm1pZG5pZ2h0IiwKICAgICAgICBub29uOiAibm9vbiIsCiAgICAgICAgbW9ybmluZzogImluIHRoZSBtb3JuaW5nIiwKICAgICAgICBhZnRlcm5vb246ICJpbiB0aGUgYWZ0ZXJub29uIiwKICAgICAgICBldmVuaW5nOiAiaW4gdGhlIGV2ZW5pbmciLAogICAgICAgIG5pZ2h0OiAiYXQgbmlnaHQiCiAgICAgIH0KICAgIH07CiAgICBvcmRpbmFsTnVtYmVyID0gKGRpcnR5TnVtYmVyLCBfb3B0aW9ucykgPT4gewogICAgICBjb25zdCBudW1iZXIyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTsKICAgICAgY29uc3QgcmVtMTAwID0gbnVtYmVyMiAlIDEwMDsKICAgICAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7CiAgICAgICAgc3dpdGNoIChyZW0xMDAgJSAxMCkgewogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICByZXR1cm4gbnVtYmVyMiArICJzdCI7CiAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgIHJldHVybiBudW1iZXIyICsgIm5kIjsKICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgcmV0dXJuIG51bWJlcjIgKyAicmQiOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbnVtYmVyMiArICJ0aCI7CiAgICB9OwogICAgbG9jYWxpemUgPSB7CiAgICAgIG9yZGluYWxOdW1iZXIsCiAgICAgIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHsKICAgICAgICB2YWx1ZXM6IGVyYVZhbHVlcywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJ3aWRlIgogICAgICB9KSwKICAgICAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHsKICAgICAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsCiAgICAgICAgZGVmYXVsdFdpZHRoOiAid2lkZSIsCiAgICAgICAgYXJndW1lbnRDYWxsYmFjazogKHF1YXJ0ZXIpID0+IHF1YXJ0ZXIgLSAxCiAgICAgIH0pLAogICAgICBtb250aDogYnVpbGRMb2NhbGl6ZUZuKHsKICAgICAgICB2YWx1ZXM6IG1vbnRoVmFsdWVzLAogICAgICAgIGRlZmF1bHRXaWR0aDogIndpZGUiCiAgICAgIH0pLAogICAgICBkYXk6IGJ1aWxkTG9jYWxpemVGbih7CiAgICAgICAgdmFsdWVzOiBkYXlWYWx1ZXMsCiAgICAgICAgZGVmYXVsdFdpZHRoOiAid2lkZSIKICAgICAgfSksCiAgICAgIGRheVBlcmlvZDogYnVpbGRMb2NhbGl6ZUZuKHsKICAgICAgICB2YWx1ZXM6IGRheVBlcmlvZFZhbHVlcywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJ3aWRlIiwKICAgICAgICBmb3JtYXR0aW5nVmFsdWVzOiBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzLAogICAgICAgIGRlZmF1bHRGb3JtYXR0aW5nV2lkdGg6ICJ3aWRlIgogICAgICB9KQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvX2xpYi9idWlsZE1hdGNoRm4uanMKZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHsKICByZXR1cm4gKHN0cmluZzMsIG9wdGlvbnMgPSB7fSkgPT4gewogICAgY29uc3Qgd2lkdGggPSBvcHRpb25zLndpZHRoOwogICAgY29uc3QgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07CiAgICBjb25zdCBtYXRjaFJlc3VsdCA9IHN0cmluZzMubWF0Y2gobWF0Y2hQYXR0ZXJuKTsKICAgIGlmICghbWF0Y2hSZXN1bHQpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07CiAgICBjb25zdCBwYXJzZVBhdHRlcm5zID0gd2lkdGggJiYgYXJncy5wYXJzZVBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07CiAgICBjb25zdCBrZXkyID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleDIocGFyc2VQYXR0ZXJucywgKHBhdHRlcm4pID0+IHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKSkgOiAoCiAgICAgIC8vIFtUT0RPXSAtLSBJIGNoYWxsZW5nZSB5b3UgdG8gZml4IHRoZSB0eXBlCiAgICAgIGZpbmRLZXkocGFyc2VQYXR0ZXJucywgKHBhdHRlcm4pID0+IHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKSkKICAgICk7CiAgICBsZXQgdmFsdWUyOwogICAgdmFsdWUyID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleTIpIDoga2V5MjsKICAgIHZhbHVlMiA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/ICgKICAgICAgLy8gW1RPRE9dIC0tIEkgY2hhbGxlbmdlIHlvdSB0byBmaXggdGhlIHR5cGUKICAgICAgb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlMikKICAgICkgOiB2YWx1ZTI7CiAgICBjb25zdCByZXN0ID0gc3RyaW5nMy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7CiAgICByZXR1cm4geyB2YWx1ZTogdmFsdWUyLCByZXN0IH07CiAgfTsKfQpmdW5jdGlvbiBmaW5kS2V5KG9iamVjdCwgcHJlZGljYXRlKSB7CiAgZm9yIChjb25zdCBrZXkyIGluIG9iamVjdCkgewogICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleTIpICYmIHByZWRpY2F0ZShvYmplY3Rba2V5Ml0pKSB7CiAgICAgIHJldHVybiBrZXkyOwogICAgfQogIH0KICByZXR1cm4gdm9pZCAwOwp9CmZ1bmN0aW9uIGZpbmRJbmRleDIoYXJyYXksIHByZWRpY2F0ZSkgewogIGZvciAobGV0IGtleTIgPSAwOyBrZXkyIDwgYXJyYXkubGVuZ3RoOyBrZXkyKyspIHsKICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5Ml0pKSB7CiAgICAgIHJldHVybiBrZXkyOwogICAgfQogIH0KICByZXR1cm4gdm9pZCAwOwp9CnZhciBpbml0X2J1aWxkTWF0Y2hGbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvX2xpYi9idWlsZE1hdGNoRm4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4uanMKZnVuY3Rpb24gYnVpbGRNYXRjaFBhdHRlcm5GbihhcmdzKSB7CiAgcmV0dXJuIChzdHJpbmczLCBvcHRpb25zID0ge30pID0+IHsKICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gc3RyaW5nMy5tYXRjaChhcmdzLm1hdGNoUGF0dGVybik7CiAgICBpZiAoIW1hdGNoUmVzdWx0KSByZXR1cm4gbnVsbDsKICAgIGNvbnN0IG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTsKICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gc3RyaW5nMy5tYXRjaChhcmdzLnBhcnNlUGF0dGVybik7CiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDsKICAgIGxldCB2YWx1ZTIgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07CiAgICB2YWx1ZTIgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUyKSA6IHZhbHVlMjsKICAgIGNvbnN0IHJlc3QgPSBzdHJpbmczLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTsKICAgIHJldHVybiB7IHZhbHVlOiB2YWx1ZTIsIHJlc3QgfTsKICB9Owp9CnZhciBpbml0X2J1aWxkTWF0Y2hQYXR0ZXJuRm4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL2VuLVVTL19saWIvbWF0Y2guanMKdmFyIG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sIG1hdGNoRXJhUGF0dGVybnMsIHBhcnNlRXJhUGF0dGVybnMsIG1hdGNoUXVhcnRlclBhdHRlcm5zLCBwYXJzZVF1YXJ0ZXJQYXR0ZXJucywgbWF0Y2hNb250aFBhdHRlcm5zLCBwYXJzZU1vbnRoUGF0dGVybnMsIG1hdGNoRGF5UGF0dGVybnMsIHBhcnNlRGF5UGF0dGVybnMsIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMsIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsIG1hdGNoOwp2YXIgaW5pdF9tYXRjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC5qcyIoKSB7CiAgICBpbml0X2J1aWxkTWF0Y2hGbigpOwogICAgaW5pdF9idWlsZE1hdGNoUGF0dGVybkZuKCk7CiAgICBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXGQrKSh0aHxzdHxuZHxyZCk/L2k7CiAgICBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL1xkKy9pOwogICAgbWF0Y2hFcmFQYXR0ZXJucyA9IHsKICAgICAgbmFycm93OiAvXihifGEpL2ksCiAgICAgIGFiYnJldmlhdGVkOiAvXihiXC4/XHM/Y1wuP3xiXC4/XHM/Y1wuP1xzP2VcLj98YVwuP1xzP2RcLj98Y1wuP1xzP2VcLj8pL2ksCiAgICAgIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaQogICAgfTsKICAgIHBhcnNlRXJhUGF0dGVybnMgPSB7CiAgICAgIGFueTogWy9eYi9pLCAvXihhfGMpL2ldCiAgICB9OwogICAgbWF0Y2hRdWFydGVyUGF0dGVybnMgPSB7CiAgICAgIG5hcnJvdzogL15bMTIzNF0vaSwKICAgICAgYWJicmV2aWF0ZWQ6IC9ecVsxMjM0XS9pLAogICAgICB3aWRlOiAvXlsxMjM0XSh0aHxzdHxuZHxyZCk/IHF1YXJ0ZXIvaQogICAgfTsKICAgIHBhcnNlUXVhcnRlclBhdHRlcm5zID0gewogICAgICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXQogICAgfTsKICAgIG1hdGNoTW9udGhQYXR0ZXJucyA9IHsKICAgICAgbmFycm93OiAvXltqZm1hc29uZF0vaSwKICAgICAgYWJicmV2aWF0ZWQ6IC9eKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKS9pLAogICAgICB3aWRlOiAvXihqYW51YXJ5fGZlYnJ1YXJ5fG1hcmNofGFwcmlsfG1heXxqdW5lfGp1bHl8YXVndXN0fHNlcHRlbWJlcnxvY3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pCiAgICB9OwogICAgcGFyc2VNb250aFBhdHRlcm5zID0gewogICAgICBuYXJyb3c6IFsKICAgICAgICAvXmovaSwKICAgICAgICAvXmYvaSwKICAgICAgICAvXm0vaSwKICAgICAgICAvXmEvaSwKICAgICAgICAvXm0vaSwKICAgICAgICAvXmovaSwKICAgICAgICAvXmovaSwKICAgICAgICAvXmEvaSwKICAgICAgICAvXnMvaSwKICAgICAgICAvXm8vaSwKICAgICAgICAvXm4vaSwKICAgICAgICAvXmQvaQogICAgICBdLAogICAgICBhbnk6IFsKICAgICAgICAvXmphL2ksCiAgICAgICAgL15mL2ksCiAgICAgICAgL15tYXIvaSwKICAgICAgICAvXmFwL2ksCiAgICAgICAgL15tYXkvaSwKICAgICAgICAvXmp1bi9pLAogICAgICAgIC9eanVsL2ksCiAgICAgICAgL15hdS9pLAogICAgICAgIC9ecy9pLAogICAgICAgIC9eby9pLAogICAgICAgIC9ebi9pLAogICAgICAgIC9eZC9pCiAgICAgIF0KICAgIH07CiAgICBtYXRjaERheVBhdHRlcm5zID0gewogICAgICBuYXJyb3c6IC9eW3NtdHdmXS9pLAogICAgICBzaG9ydDogL14oc3V8bW98dHV8d2V8dGh8ZnJ8c2EpL2ksCiAgICAgIGFiYnJldmlhdGVkOiAvXihzdW58bW9ufHR1ZXx3ZWR8dGh1fGZyaXxzYXQpL2ksCiAgICAgIHdpZGU6IC9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pCiAgICB9OwogICAgcGFyc2VEYXlQYXR0ZXJucyA9IHsKICAgICAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLAogICAgICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldCiAgICB9OwogICAgbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyA9IHsKICAgICAgbmFycm93OiAvXihhfHB8bWl8bnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2ksCiAgICAgIGFueTogL14oW2FwXVwuP1xzP21cLj98bWlkbmlnaHR8bm9vbnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2kKICAgIH07CiAgICBwYXJzZURheVBlcmlvZFBhdHRlcm5zID0gewogICAgICBhbnk6IHsKICAgICAgICBhbTogL15hL2ksCiAgICAgICAgcG06IC9ecC9pLAogICAgICAgIG1pZG5pZ2h0OiAvXm1pL2ksCiAgICAgICAgbm9vbjogL15uby9pLAogICAgICAgIG1vcm5pbmc6IC9tb3JuaW5nL2ksCiAgICAgICAgYWZ0ZXJub29uOiAvYWZ0ZXJub29uL2ksCiAgICAgICAgZXZlbmluZzogL2V2ZW5pbmcvaSwKICAgICAgICBuaWdodDogL25pZ2h0L2kKICAgICAgfQogICAgfTsKICAgIG1hdGNoID0gewogICAgICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHsKICAgICAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sCiAgICAgICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLAogICAgICAgIHZhbHVlQ2FsbGJhY2s6ICh2YWx1ZTIpID0+IHBhcnNlSW50KHZhbHVlMiwgMTApCiAgICAgIH0pLAogICAgICBlcmE6IGJ1aWxkTWF0Y2hGbih7CiAgICAgICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hFcmFQYXR0ZXJucywKICAgICAgICBkZWZhdWx0TWF0Y2hXaWR0aDogIndpZGUiLAogICAgICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRXJhUGF0dGVybnMsCiAgICAgICAgZGVmYXVsdFBhcnNlV2lkdGg6ICJhbnkiCiAgICAgIH0pLAogICAgICBxdWFydGVyOiBidWlsZE1hdGNoRm4oewogICAgICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoUXVhcnRlclBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAid2lkZSIsCiAgICAgICAgcGFyc2VQYXR0ZXJuczogcGFyc2VRdWFydGVyUGF0dGVybnMsCiAgICAgICAgZGVmYXVsdFBhcnNlV2lkdGg6ICJhbnkiLAogICAgICAgIHZhbHVlQ2FsbGJhY2s6IChpbmRleDIpID0+IGluZGV4MiArIDEKICAgICAgfSksCiAgICAgIG1vbnRoOiBidWlsZE1hdGNoRm4oewogICAgICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoTW9udGhQYXR0ZXJucywKICAgICAgICBkZWZhdWx0TWF0Y2hXaWR0aDogIndpZGUiLAogICAgICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlTW9udGhQYXR0ZXJucywKICAgICAgICBkZWZhdWx0UGFyc2VXaWR0aDogImFueSIKICAgICAgfSksCiAgICAgIGRheTogYnVpbGRNYXRjaEZuKHsKICAgICAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAid2lkZSIsCiAgICAgICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQYXR0ZXJucywKICAgICAgICBkZWZhdWx0UGFyc2VXaWR0aDogImFueSIKICAgICAgfSksCiAgICAgIGRheVBlcmlvZDogYnVpbGRNYXRjaEZuKHsKICAgICAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBlcmlvZFBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAiYW55IiwKICAgICAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBlcmlvZFBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAiYW55IgogICAgICB9KQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMuanMKdmFyIGVuVVMsIGVuX1VTX2RlZmF1bHQ7CnZhciBpbml0X2VuX1VTID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy5qcyIoKSB7CiAgICBpbml0X2Zvcm1hdERpc3RhbmNlKCk7CiAgICBpbml0X2Zvcm1hdExvbmcoKTsKICAgIGluaXRfZm9ybWF0UmVsYXRpdmUoKTsKICAgIGluaXRfbG9jYWxpemUoKTsKICAgIGluaXRfbWF0Y2goKTsKICAgIGVuVVMgPSB7CiAgICAgIGNvZGU6ICJlbi1VUyIsCiAgICAgIGZvcm1hdERpc3RhbmNlLAogICAgICBmb3JtYXRMb25nLAogICAgICBmb3JtYXRSZWxhdGl2ZSwKICAgICAgbG9jYWxpemUsCiAgICAgIG1hdGNoLAogICAgICBvcHRpb25zOiB7CiAgICAgICAgd2Vla1N0YXJ0c09uOiAwLAogICAgICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogMQogICAgICB9CiAgICB9OwogICAgZW5fVVNfZGVmYXVsdCA9IGVuVVM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9kZWZhdWx0TG9jYWxlLmpzCnZhciBpbml0X2RlZmF1bHRMb2NhbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9kZWZhdWx0TG9jYWxlLmpzIigpIHsKICAgIGluaXRfZW5fVVMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXlPZlllYXIuanMKZnVuY3Rpb24gZ2V0RGF5T2ZZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhfZGF0ZSwgc3RhcnRPZlllYXIoX2RhdGUpKTsKICBjb25zdCBkYXlPZlllYXIgPSBkaWZmICsgMTsKICByZXR1cm4gZGF5T2ZZZWFyOwp9CnZhciBnZXREYXlPZlllYXJfZGVmYXVsdDsKdmFyIGluaXRfZ2V0RGF5T2ZZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERheU9mWWVhci5qcyIoKSB7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9zdGFydE9mWWVhcigpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldERheU9mWWVhcl9kZWZhdWx0ID0gZ2V0RGF5T2ZZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT1dlZWsuanMKZnVuY3Rpb24gZ2V0SVNPV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRpZmYgPSArc3RhcnRPZklTT1dlZWsoX2RhdGUpIC0gK3N0YXJ0T2ZJU09XZWVrWWVhcihfZGF0ZSk7CiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2VlaykgKyAxOwp9CnZhciBnZXRJU09XZWVrX2RlZmF1bHQ7CnZhciBpbml0X2dldElTT1dlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vlay5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9zdGFydE9mSVNPV2VlaygpOwogICAgaW5pdF9zdGFydE9mSVNPV2Vla1llYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRJU09XZWVrX2RlZmF1bHQgPSBnZXRJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWtZZWFyLmpzCmZ1bmN0aW9uIGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCBmaXJzdFdlZWtDb250YWluc0RhdGUgPSBvcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gZGVmYXVsdE9wdGlvbnMyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gMTsKICBjb25zdCBmaXJzdFdlZWtPZk5leHRZZWFyID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTsKICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldEZ1bGxZZWFyKHllYXIgKyAxLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpOwogIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3Qgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZOZXh0WWVhciwgb3B0aW9ucyk7CiAgY29uc3QgZmlyc3RXZWVrT2ZUaGlzWWVhciA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7CiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpOwogIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3Qgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7CiAgaWYgKCtfZGF0ZSA+PSArc3RhcnRPZk5leHRZZWFyKSB7CiAgICByZXR1cm4geWVhciArIDE7CiAgfSBlbHNlIGlmICgrX2RhdGUgPj0gK3N0YXJ0T2ZUaGlzWWVhcikgewogICAgcmV0dXJuIHllYXI7CiAgfSBlbHNlIHsKICAgIHJldHVybiB5ZWFyIC0gMTsKICB9Cn0KdmFyIGdldFdlZWtZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2dldFdlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldFdlZWtZZWFyX2RlZmF1bHQgPSBnZXRXZWVrWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mV2Vla1llYXIuanMKZnVuY3Rpb24gc3RhcnRPZldlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBkZWZhdWx0T3B0aW9uczIuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyAxOwogIGNvbnN0IHllYXIgPSBnZXRXZWVrWWVhcihkYXRlLCBvcHRpb25zKTsKICBjb25zdCBmaXJzdFdlZWsgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZpcnN0V2Vlay5zZXRGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpOwogIGZpcnN0V2Vlay5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBjb25zdCBfZGF0ZSA9IHN0YXJ0T2ZXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZldlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZXZWVrWWVhci5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0V2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIHN0YXJ0T2ZXZWVrWWVhcl9kZWZhdWx0ID0gc3RhcnRPZldlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWsuanMKZnVuY3Rpb24gZ2V0V2VlayhkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRpZmYgPSArc3RhcnRPZldlZWsoX2RhdGUsIG9wdGlvbnMpIC0gK3N0YXJ0T2ZXZWVrWWVhcihfZGF0ZSwgb3B0aW9ucyk7CiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2VlaykgKyAxOwp9CnZhciBnZXRXZWVrX2RlZmF1bHQ7CnZhciBpbml0X2dldFdlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0V2Vlay5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgaW5pdF9zdGFydE9mV2Vla1llYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRXZWVrX2RlZmF1bHQgPSBnZXRXZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvYWRkTGVhZGluZ1plcm9zLmpzCmZ1bmN0aW9uIGFkZExlYWRpbmdaZXJvcyhudW1iZXIyLCB0YXJnZXRMZW5ndGgpIHsKICBjb25zdCBzaWduID0gbnVtYmVyMiA8IDAgPyAiLSIgOiAiIjsKICBjb25zdCBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIyKS50b1N0cmluZygpLnBhZFN0YXJ0KHRhcmdldExlbmd0aCwgIjAiKTsKICByZXR1cm4gc2lnbiArIG91dHB1dDsKfQp2YXIgaW5pdF9hZGRMZWFkaW5nWmVyb3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9hZGRMZWFkaW5nWmVyb3MuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZm9ybWF0L2xpZ2h0Rm9ybWF0dGVycy5qcwp2YXIgbGlnaHRGb3JtYXR0ZXJzOwp2YXIgaW5pdF9saWdodEZvcm1hdHRlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9mb3JtYXQvbGlnaHRGb3JtYXR0ZXJzLmpzIigpIHsKICAgIGluaXRfYWRkTGVhZGluZ1plcm9zKCk7CiAgICBsaWdodEZvcm1hdHRlcnMgPSB7CiAgICAgIC8vIFllYXIKICAgICAgeShkYXRlLCB0b2tlbikgewogICAgICAgIGNvbnN0IHNpZ25lZFllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7CiAgICAgICAgY29uc3QgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyOwogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModG9rZW4gPT09ICJ5eSIgPyB5ZWFyICUgMTAwIDogeWVhciwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gTW9udGgKICAgICAgTShkYXRlLCB0b2tlbikgewogICAgICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpOwogICAgICAgIHJldHVybiB0b2tlbiA9PT0gIk0iID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTsKICAgICAgfSwKICAgICAgLy8gRGF5IG9mIHRoZSBtb250aAogICAgICBkKGRhdGUsIHRva2VuKSB7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldERhdGUoKSwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gQU0gb3IgUE0KICAgICAgYShkYXRlLCB0b2tlbikgewogICAgICAgIGNvbnN0IGRheVBlcmlvZEVudW1WYWx1ZSA9IGRhdGUuZ2V0SG91cnMoKSAvIDEyID49IDEgPyAicG0iIDogImFtIjsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJhIjoKICAgICAgICAgIGNhc2UgImFhIjoKICAgICAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZS50b1VwcGVyQ2FzZSgpOwogICAgICAgICAgY2FzZSAiYWFhIjoKICAgICAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZTsKICAgICAgICAgIGNhc2UgImFhYWFhIjoKICAgICAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZVswXTsKICAgICAgICAgIGNhc2UgImFhYWEiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZSA9PT0gImFtIiA/ICJhLm0uIiA6ICJwLm0uIjsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIEhvdXIgWzEtMTJdCiAgICAgIGgoZGF0ZSwgdG9rZW4pIHsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0SG91cnMoKSAlIDEyIHx8IDEyLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBIb3VyIFswLTIzXQogICAgICBIKGRhdGUsIHRva2VuKSB7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldEhvdXJzKCksIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIE1pbnV0ZQogICAgICBtKGRhdGUsIHRva2VuKSB7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldE1pbnV0ZXMoKSwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gU2Vjb25kCiAgICAgIHMoZGF0ZSwgdG9rZW4pIHsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0U2Vjb25kcygpLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBGcmFjdGlvbiBvZiBzZWNvbmQKICAgICAgUyhkYXRlLCB0b2tlbikgewogICAgICAgIGNvbnN0IG51bWJlck9mRGlnaXRzID0gdG9rZW4ubGVuZ3RoOwogICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kczIgPSBkYXRlLmdldE1pbGxpc2Vjb25kcygpOwogICAgICAgIGNvbnN0IGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC50cnVuYygKICAgICAgICAgIG1pbGxpc2Vjb25kczIgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKQogICAgICAgICk7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzLmpzCmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lU2hvcnQob2Zmc2V0LCBkZWxpbWl0ZXIgPSAiIikgewogIGNvbnN0IHNpZ24gPSBvZmZzZXQgPiAwID8gIi0iIDogIisiOwogIGNvbnN0IGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7CiAgY29uc3QgaG91cnMgPSBNYXRoLnRydW5jKGFic09mZnNldCAvIDYwKTsKICBjb25zdCBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7CiAgaWYgKG1pbnV0ZXMgPT09IDApIHsKICAgIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKTsKICB9CiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpOwp9CmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyhvZmZzZXQsIGRlbGltaXRlcikgewogIGlmIChvZmZzZXQgJSA2MCA9PT0gMCkgewogICAgY29uc3Qgc2lnbiA9IG9mZnNldCA+IDAgPyAiLSIgOiAiKyI7CiAgICByZXR1cm4gc2lnbiArIGFkZExlYWRpbmdaZXJvcyhNYXRoLmFicyhvZmZzZXQpIC8gNjAsIDIpOwogIH0KICByZXR1cm4gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkZWxpbWl0ZXIpOwp9CmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGVsaW1pdGVyID0gIiIpIHsKICBjb25zdCBzaWduID0gb2Zmc2V0ID4gMCA/ICItIiA6ICIrIjsKICBjb25zdCBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpOwogIGNvbnN0IGhvdXJzID0gYWRkTGVhZGluZ1plcm9zKE1hdGgudHJ1bmMoYWJzT2Zmc2V0IC8gNjApLCAyKTsKICBjb25zdCBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTsKICByZXR1cm4gc2lnbiArIGhvdXJzICsgZGVsaW1pdGVyICsgbWludXRlczsKfQp2YXIgZGF5UGVyaW9kRW51bSwgZm9ybWF0dGVyczsKdmFyIGluaXRfZm9ybWF0dGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzLmpzIigpIHsKICAgIGluaXRfZ2V0RGF5T2ZZZWFyKCk7CiAgICBpbml0X2dldElTT1dlZWsoKTsKICAgIGluaXRfZ2V0SVNPV2Vla1llYXIoKTsKICAgIGluaXRfZ2V0V2VlaygpOwogICAgaW5pdF9nZXRXZWVrWWVhcigpOwogICAgaW5pdF9hZGRMZWFkaW5nWmVyb3MoKTsKICAgIGluaXRfbGlnaHRGb3JtYXR0ZXJzKCk7CiAgICBkYXlQZXJpb2RFbnVtID0gewogICAgICBhbTogImFtIiwKICAgICAgcG06ICJwbSIsCiAgICAgIG1pZG5pZ2h0OiAibWlkbmlnaHQiLAogICAgICBub29uOiAibm9vbiIsCiAgICAgIG1vcm5pbmc6ICJtb3JuaW5nIiwKICAgICAgYWZ0ZXJub29uOiAiYWZ0ZXJub29uIiwKICAgICAgZXZlbmluZzogImV2ZW5pbmciLAogICAgICBuaWdodDogIm5pZ2h0IgogICAgfTsKICAgIGZvcm1hdHRlcnMgPSB7CiAgICAgIC8vIEVyYQogICAgICBHOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgZXJhID0gZGF0ZS5nZXRGdWxsWWVhcigpID4gMCA/IDEgOiAwOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIEFELCBCQwogICAgICAgICAgY2FzZSAiRyI6CiAgICAgICAgICBjYXNlICJHRyI6CiAgICAgICAgICBjYXNlICJHR0ciOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmVyYShlcmEsIHsgd2lkdGg6ICJhYmJyZXZpYXRlZCIgfSk7CiAgICAgICAgICAvLyBBLCBCCiAgICAgICAgICBjYXNlICJHR0dHRyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZXJhKGVyYSwgeyB3aWR0aDogIm5hcnJvdyIgfSk7CiAgICAgICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdAogICAgICAgICAgY2FzZSAiR0dHRyI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmVyYShlcmEsIHsgd2lkdGg6ICJ3aWRlIiB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFllYXIKICAgICAgeTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGlmICh0b2tlbiA9PT0gInlvIikgewogICAgICAgICAgY29uc3Qgc2lnbmVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICAgIGNvbnN0IHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjsKICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcih5ZWFyLCB7IHVuaXQ6ICJ5ZWFyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy55KGRhdGUsIHRva2VuKTsKICAgICAgfSwKICAgICAgLy8gTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhcgogICAgICBZOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3Qgc2lnbmVkV2Vla1llYXIgPSBnZXRXZWVrWWVhcihkYXRlLCBvcHRpb25zKTsKICAgICAgICBjb25zdCB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyOwogICAgICAgIGlmICh0b2tlbiA9PT0gIllZIikgewogICAgICAgICAgY29uc3QgdHdvRGlnaXRZZWFyID0gd2Vla1llYXIgJSAxMDA7CiAgICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHR3b0RpZ2l0WWVhciwgMik7CiAgICAgICAgfQogICAgICAgIGlmICh0b2tlbiA9PT0gIllvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKHdlZWtZZWFyLCB7IHVuaXQ6ICJ5ZWFyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXIKICAgICAgUjogZnVuY3Rpb24oZGF0ZSwgdG9rZW4pIHsKICAgICAgICBjb25zdCBpc29XZWVrWWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUpOwogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLgogICAgICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczoKICAgICAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHwKICAgICAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXwKICAgICAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHwKICAgICAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHwKICAgICAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHwKICAgICAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLAogICAgICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuCiAgICAgIHU6IGZ1bmN0aW9uKGRhdGUsIHRva2VuKSB7CiAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIFF1YXJ0ZXIKICAgICAgUTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0TW9udGgoKSArIDEpIC8gMyk7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMSwgMiwgMywgNAogICAgICAgICAgY2FzZSAiUSI6CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7CiAgICAgICAgICAvLyAwMSwgMDIsIDAzLCAwNAogICAgICAgICAgY2FzZSAiUVEiOgogICAgICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpOwogICAgICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoCiAgICAgICAgICBjYXNlICJRbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihxdWFydGVyLCB7IHVuaXQ6ICJxdWFydGVyIiB9KTsKICAgICAgICAgIC8vIFExLCBRMiwgUTMsIFE0CiAgICAgICAgICBjYXNlICJRUVEiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLnF1YXJ0ZXIocXVhcnRlciwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKQogICAgICAgICAgY2FzZSAiUVFRUVEiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLnF1YXJ0ZXIocXVhcnRlciwgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLgogICAgICAgICAgY2FzZSAiUVFRUSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLnF1YXJ0ZXIocXVhcnRlciwgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlcgogICAgICBxOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRNb250aCgpICsgMSkgLyAzKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyAxLCAyLCAzLCA0CiAgICAgICAgICBjYXNlICJxIjoKICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTsKICAgICAgICAgIC8vIDAxLCAwMiwgMDMsIDA0CiAgICAgICAgICBjYXNlICJxcSI6CiAgICAgICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGgKICAgICAgICAgIGNhc2UgInFvIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHsgdW5pdDogInF1YXJ0ZXIiIH0pOwogICAgICAgICAgLy8gUTEsIFEyLCBRMywgUTQKICAgICAgICAgIGNhc2UgInFxcSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIucXVhcnRlcihxdWFydGVyLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpCiAgICAgICAgICBjYXNlICJxcXFxcSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIucXVhcnRlcihxdWFydGVyLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uCiAgICAgICAgICBjYXNlICJxcXFxIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIucXVhcnRlcihxdWFydGVyLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyBNb250aAogICAgICBNOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCk7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiTSI6CiAgICAgICAgICBjYXNlICJNTSI6CiAgICAgICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuTShkYXRlLCB0b2tlbik7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoCiAgICAgICAgICBjYXNlICJNbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihtb250aCArIDEsIHsgdW5pdDogIm1vbnRoIiB9KTsKICAgICAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlYwogICAgICAgICAgY2FzZSAiTU1NIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5tb250aChtb250aCwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIEosIEYsIC4uLiwgRAogICAgICAgICAgY2FzZSAiTU1NTU0iOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm1vbnRoKG1vbnRoLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyCiAgICAgICAgICBjYXNlICJNTU1NIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIubW9udGgobW9udGgsIHsgd2lkdGg6ICJ3aWRlIiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gU3RhbmQtYWxvbmUgbW9udGgKICAgICAgTDogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIDEsIDIsIC4uLiwgMTIKICAgICAgICAgIGNhc2UgIkwiOgogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7CiAgICAgICAgICAvLyAwMSwgMDIsIC4uLiwgMTIKICAgICAgICAgIGNhc2UgIkxMIjoKICAgICAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpOwogICAgICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aAogICAgICAgICAgY2FzZSAiTG8iOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7IHVuaXQ6ICJtb250aCIgfSk7CiAgICAgICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWMKICAgICAgICAgIGNhc2UgIkxMTCI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIubW9udGgobW9udGgsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBKLCBGLCAuLi4sIEQKICAgICAgICAgIGNhc2UgIkxMTExMIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5tb250aChtb250aCwgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlcgogICAgICAgICAgY2FzZSAiTExMTCI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm1vbnRoKG1vbnRoLCB7IHdpZHRoOiAid2lkZSIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIExvY2FsIHdlZWsgb2YgeWVhcgogICAgICB3OiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3Qgd2VlayA9IGdldFdlZWsoZGF0ZSwgb3B0aW9ucyk7CiAgICAgICAgaWYgKHRva2VuID09PSAid28iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIod2VlaywgeyB1bml0OiAid2VlayIgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2VlaywgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gSVNPIHdlZWsgb2YgeWVhcgogICAgICBJOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgaXNvV2VlayA9IGdldElTT1dlZWsoZGF0ZSk7CiAgICAgICAgaWYgKHRva2VuID09PSAiSW8iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoaXNvV2VlaywgeyB1bml0OiAid2VlayIgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gRGF5IG9mIHRoZSBtb250aAogICAgICBkOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgaWYgKHRva2VuID09PSAiZG8iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXREYXRlKCksIHsgdW5pdDogImRhdGUiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmQoZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBEYXkgb2YgeWVhcgogICAgICBEOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgZGF5T2ZZZWFyID0gZ2V0RGF5T2ZZZWFyKGRhdGUpOwogICAgICAgIGlmICh0b2tlbiA9PT0gIkRvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGRheU9mWWVhciwgeyB1bml0OiAiZGF5T2ZZZWFyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIERheSBvZiB3ZWVrCiAgICAgIEU6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIFR1ZQogICAgICAgICAgY2FzZSAiRSI6CiAgICAgICAgICBjYXNlICJFRSI6CiAgICAgICAgICBjYXNlICJFRUUiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUCiAgICAgICAgICBjYXNlICJFRUVFRSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdQogICAgICAgICAgY2FzZSAiRUVFRUVFIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJzaG9ydCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gVHVlc2RheQogICAgICAgICAgY2FzZSAiRUVFRSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIExvY2FsIGRheSBvZiB3ZWVrCiAgICAgIGU6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpOwogICAgICAgIGNvbnN0IGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChOdGggZGF5IG9mIHdlZWsgd2l0aCBjdXJyZW50IGxvY2FsZSBvciB3ZWVrU3RhcnRzT24pCiAgICAgICAgICBjYXNlICJlIjoKICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7CiAgICAgICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlCiAgICAgICAgICBjYXNlICJlZSI6CiAgICAgICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIDIpOwogICAgICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoCiAgICAgICAgICBjYXNlICJlbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2VlaywgeyB1bml0OiAiZGF5IiB9KTsKICAgICAgICAgIGNhc2UgImVlZSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFQKICAgICAgICAgIGNhc2UgImVlZWVlIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJlZWVlZWUiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdWVzZGF5CiAgICAgICAgICBjYXNlICJlZWVlIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWsKICAgICAgYzogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMiwgb3B0aW9ucykgewogICAgICAgIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0RGF5KCk7CiAgICAgICAgY29uc3QgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNzsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKHNhbWUgYXMgaW4gYGVgKQogICAgICAgICAgY2FzZSAiYyI6CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspOwogICAgICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZQogICAgICAgICAgY2FzZSAiY2MiOgogICAgICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpOwogICAgICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoCiAgICAgICAgICBjYXNlICJjbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2VlaywgeyB1bml0OiAiZGF5IiB9KTsKICAgICAgICAgIGNhc2UgImNjYyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFQKICAgICAgICAgIGNhc2UgImNjY2NjIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJjY2NjY2MiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdWVzZGF5CiAgICAgICAgICBjYXNlICJjY2NjIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gSVNPIGRheSBvZiB3ZWVrCiAgICAgIGk6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpOwogICAgICAgIGNvbnN0IGlzb0RheU9mV2VlayA9IGRheU9mV2VlayA9PT0gMCA/IDcgOiBkYXlPZldlZWs7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMgogICAgICAgICAgY2FzZSAiaSI6CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaXNvRGF5T2ZXZWVrKTsKICAgICAgICAgIC8vIDAyCiAgICAgICAgICBjYXNlICJpaSI6CiAgICAgICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpOwogICAgICAgICAgLy8gMm5kCiAgICAgICAgICBjYXNlICJpbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHsgdW5pdDogImRheSIgfSk7CiAgICAgICAgICAvLyBUdWUKICAgICAgICAgIGNhc2UgImlpaSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFQKICAgICAgICAgIGNhc2UgImlpaWlpIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJpaWlpaWkiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdWVzZGF5CiAgICAgICAgICBjYXNlICJpaWlpIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gQU0gb3IgUE0KICAgICAgYTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpOwogICAgICAgIGNvbnN0IGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICJwbSIgOiAiYW0iOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImEiOgogICAgICAgICAgY2FzZSAiYWEiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlICJhYWEiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGNhc2UgImFhYWFhIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgImFhYWEiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uCiAgICAgIGI6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTsKICAgICAgICBsZXQgZGF5UGVyaW9kRW51bVZhbHVlOwogICAgICAgIGlmIChob3VycyA9PT0gMTIpIHsKICAgICAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubm9vbjsKICAgICAgICB9IGVsc2UgaWYgKGhvdXJzID09PSAwKSB7CiAgICAgICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1pZG5pZ2h0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAicG0iIDogImFtIjsKICAgICAgICB9CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiYiI6CiAgICAgICAgICBjYXNlICJiYiI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgImJiYiI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgY2FzZSAiYmJiYmIiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiYmJiYiI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIGluIHRoZSBtb3JuaW5nLCBpbiB0aGUgYWZ0ZXJub29uLCBpbiB0aGUgZXZlbmluZywgYXQgbmlnaHQKICAgICAgQjogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpOwogICAgICAgIGxldCBkYXlQZXJpb2RFbnVtVmFsdWU7CiAgICAgICAgaWYgKGhvdXJzID49IDE3KSB7CiAgICAgICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7CiAgICAgICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikgewogICAgICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247CiAgICAgICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7CiAgICAgICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgIkIiOgogICAgICAgICAgY2FzZSAiQkIiOgogICAgICAgICAgY2FzZSAiQkJCIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiQkJCQkIiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiQkJCQiI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIEhvdXIgWzEtMTJdCiAgICAgIGg6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBpZiAodG9rZW4gPT09ICJobyIpIHsKICAgICAgICAgIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyOwogICAgICAgICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDEyOwogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7IHVuaXQ6ICJob3VyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5oKGRhdGUsIHRva2VuKTsKICAgICAgfSwKICAgICAgLy8gSG91ciBbMC0yM10KICAgICAgSDogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGlmICh0b2tlbiA9PT0gIkhvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0SG91cnMoKSwgeyB1bml0OiAiaG91ciIgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuSChkYXRlLCB0b2tlbik7CiAgICAgIH0sCiAgICAgIC8vIEhvdXIgWzAtMTFdCiAgICAgIEs6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyOwogICAgICAgIGlmICh0b2tlbiA9PT0gIktvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7IHVuaXQ6ICJob3VyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gSG91ciBbMS0yNF0KICAgICAgazogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTsKICAgICAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMjQ7CiAgICAgICAgaWYgKHRva2VuID09PSAia28iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoaG91cnMsIHsgdW5pdDogImhvdXIiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBNaW51dGUKICAgICAgbTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGlmICh0b2tlbiA9PT0gIm1vIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0TWludXRlcygpLCB7IHVuaXQ6ICJtaW51dGUiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBTZWNvbmQKICAgICAgczogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGlmICh0b2tlbiA9PT0gInNvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0U2Vjb25kcygpLCB7IHVuaXQ6ICJzZWNvbmQiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnMoZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBGcmFjdGlvbiBvZiBzZWNvbmQKICAgICAgUzogZnVuY3Rpb24oZGF0ZSwgdG9rZW4pIHsKICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKQogICAgICBYOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7CiAgICAgICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7CiAgICAgICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gIloiOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlcwogICAgICAgICAgY2FzZSAiWCI6CiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpOwogICAgICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyCiAgICAgICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0cwogICAgICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhgCiAgICAgICAgICBjYXNlICJYWFhYIjoKICAgICAgICAgIGNhc2UgIlhYIjoKICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTsKICAgICAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlcgogICAgICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHMKICAgICAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYWGAKICAgICAgICAgIGNhc2UgIlhYWFhYIjoKICAgICAgICAgIGNhc2UgIlhYWCI6CiAgICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXIKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgIjoiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBgJyswMDowMCdgIG9yIGVxdWl2YWxlbnQpCiAgICAgIHg6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlcwogICAgICAgICAgY2FzZSAieCI6CiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpOwogICAgICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyCiAgICAgICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0cwogICAgICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgCiAgICAgICAgICBjYXNlICJ4eHh4IjoKICAgICAgICAgIGNhc2UgInh4IjoKICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTsKICAgICAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlcgogICAgICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHMKICAgICAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGAKICAgICAgICAgIGNhc2UgInh4eHh4IjoKICAgICAgICAgIGNhc2UgInh4eCI6CiAgICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXIKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgIjoiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFRpbWV6b25lIChHTVQpCiAgICAgIE86IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBTaG9ydAogICAgICAgICAgY2FzZSAiTyI6CiAgICAgICAgICBjYXNlICJPTyI6CiAgICAgICAgICBjYXNlICJPT08iOgogICAgICAgICAgICByZXR1cm4gIkdNVCIgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAiOiIpOwogICAgICAgICAgLy8gTG9uZwogICAgICAgICAgY2FzZSAiT09PTyI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gIkdNVCIgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgIjoiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXRpb24pCiAgICAgIHo6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBTaG9ydAogICAgICAgICAgY2FzZSAieiI6CiAgICAgICAgICBjYXNlICJ6eiI6CiAgICAgICAgICBjYXNlICJ6enoiOgogICAgICAgICAgICByZXR1cm4gIkdNVCIgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAiOiIpOwogICAgICAgICAgLy8gTG9uZwogICAgICAgICAgY2FzZSAienp6eiI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gIkdNVCIgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgIjoiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFNlY29uZHMgdGltZXN0YW1wCiAgICAgIHQ6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICBjb25zdCB0aW1lc3RhbXAyID0gTWF0aC50cnVuYygrZGF0ZSAvIDFlMyk7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAyLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBNaWxsaXNlY29uZHMgdGltZXN0YW1wCiAgICAgIFQ6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKCtkYXRlLCB0b2tlbi5sZW5ndGgpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzLmpzCnZhciBkYXRlTG9uZ0Zvcm1hdHRlciwgdGltZUxvbmdGb3JtYXR0ZXIsIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlciwgbG9uZ0Zvcm1hdHRlcnM7CnZhciBpbml0X2xvbmdGb3JtYXR0ZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzLmpzIigpIHsKICAgIGRhdGVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcyKSA9PiB7CiAgICAgIHN3aXRjaCAocGF0dGVybikgewogICAgICAgIGNhc2UgIlAiOgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLmRhdGUoeyB3aWR0aDogInNob3J0IiB9KTsKICAgICAgICBjYXNlICJQUCI6CiAgICAgICAgICByZXR1cm4gZm9ybWF0TG9uZzIuZGF0ZSh7IHdpZHRoOiAibWVkaXVtIiB9KTsKICAgICAgICBjYXNlICJQUFAiOgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLmRhdGUoeyB3aWR0aDogImxvbmciIH0pOwogICAgICAgIGNhc2UgIlBQUFAiOgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gZm9ybWF0TG9uZzIuZGF0ZSh7IHdpZHRoOiAiZnVsbCIgfSk7CiAgICAgIH0KICAgIH07CiAgICB0aW1lTG9uZ0Zvcm1hdHRlciA9IChwYXR0ZXJuLCBmb3JtYXRMb25nMikgPT4gewogICAgICBzd2l0Y2ggKHBhdHRlcm4pIHsKICAgICAgICBjYXNlICJwIjoKICAgICAgICAgIHJldHVybiBmb3JtYXRMb25nMi50aW1lKHsgd2lkdGg6ICJzaG9ydCIgfSk7CiAgICAgICAgY2FzZSAicHAiOgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLnRpbWUoeyB3aWR0aDogIm1lZGl1bSIgfSk7CiAgICAgICAgY2FzZSAicHBwIjoKICAgICAgICAgIHJldHVybiBmb3JtYXRMb25nMi50aW1lKHsgd2lkdGg6ICJsb25nIiB9KTsKICAgICAgICBjYXNlICJwcHBwIjoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLnRpbWUoeyB3aWR0aDogImZ1bGwiIH0pOwogICAgICB9CiAgICB9OwogICAgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcyKSA9PiB7CiAgICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107CiAgICAgIGNvbnN0IGRhdGVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMV07CiAgICAgIGNvbnN0IHRpbWVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMl07CiAgICAgIGlmICghdGltZVBhdHRlcm4pIHsKICAgICAgICByZXR1cm4gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZzIpOwogICAgICB9CiAgICAgIGxldCBkYXRlVGltZUZvcm1hdDsKICAgICAgc3dpdGNoIChkYXRlUGF0dGVybikgewogICAgICAgIGNhc2UgIlAiOgogICAgICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nMi5kYXRlVGltZSh7IHdpZHRoOiAic2hvcnQiIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiUFAiOgogICAgICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nMi5kYXRlVGltZSh7IHdpZHRoOiAibWVkaXVtIiB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlBQUCI6CiAgICAgICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcyLmRhdGVUaW1lKHsgd2lkdGg6ICJsb25nIiB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlBQUFAiOgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcyLmRhdGVUaW1lKHsgd2lkdGg6ICJmdWxsIiB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHJldHVybiBkYXRlVGltZUZvcm1hdC5yZXBsYWNlKCJ7e2RhdGV9fSIsIGRhdGVMb25nRm9ybWF0dGVyKGRhdGVQYXR0ZXJuLCBmb3JtYXRMb25nMikpLnJlcGxhY2UoInt7dGltZX19IiwgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcyKSk7CiAgICB9OwogICAgbG9uZ0Zvcm1hdHRlcnMgPSB7CiAgICAgIHA6IHRpbWVMb25nRm9ybWF0dGVyLAogICAgICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXIKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9wcm90ZWN0ZWRUb2tlbnMuanMKZnVuY3Rpb24gaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbih0b2tlbikgewogIHJldHVybiBkYXlPZlllYXJUb2tlblJFLnRlc3QodG9rZW4pOwp9CmZ1bmN0aW9uIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikgewogIHJldHVybiB3ZWVrWWVhclRva2VuUkUudGVzdCh0b2tlbik7Cn0KZnVuY3Rpb24gd2Fybk9yVGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0MiwgaW5wdXQpIHsKICBjb25zdCBfbWVzc2FnZSA9IG1lc3NhZ2UodG9rZW4sIGZvcm1hdDIsIGlucHV0KTsKICBjb25zb2xlLndhcm4oX21lc3NhZ2UpOwogIGlmICh0aHJvd1Rva2Vucy5pbmNsdWRlcyh0b2tlbikpIHRocm93IG5ldyBSYW5nZUVycm9yKF9tZXNzYWdlKTsKfQpmdW5jdGlvbiBtZXNzYWdlKHRva2VuLCBmb3JtYXQyLCBpbnB1dCkgewogIGNvbnN0IHN1YmplY3QgPSB0b2tlblswXSA9PT0gIlkiID8gInllYXJzIiA6ICJkYXlzIG9mIHRoZSBtb250aCI7CiAgcmV0dXJuIGBVc2UgXGAke3Rva2VuLnRvTG93ZXJDYXNlKCl9XGAgaW5zdGVhZCBvZiBcYCR7dG9rZW59XGAgKGluIFxgJHtmb3JtYXQyfVxgKSBmb3IgZm9ybWF0dGluZyAke3N1YmplY3R9IHRvIHRoZSBpbnB1dCBcYCR7aW5wdXR9XGA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZGA7Cn0KdmFyIGRheU9mWWVhclRva2VuUkUsIHdlZWtZZWFyVG9rZW5SRSwgdGhyb3dUb2tlbnM7CnZhciBpbml0X3Byb3RlY3RlZFRva2VucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL3Byb3RlY3RlZFRva2Vucy5qcyIoKSB7CiAgICBkYXlPZlllYXJUb2tlblJFID0gL15EKyQvOwogICAgd2Vla1llYXJUb2tlblJFID0gL15ZKyQvOwogICAgdGhyb3dUb2tlbnMgPSBbIkQiLCAiREQiLCAiWVkiLCAiWVlZWSJdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdC5qcwpmdW5jdGlvbiBmb3JtYXQoZGF0ZSwgZm9ybWF0U3RyLCBvcHRpb25zKSB7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZSA/PyBlblVTOwogIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBkZWZhdWx0T3B0aW9uczIuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyAxOwogIGNvbnN0IHdlZWtTdGFydHNPbiA9IG9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwOwogIGNvbnN0IG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKCFpc1ZhbGlkKG9yaWdpbmFsRGF0ZSkpIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTsKICB9CiAgbGV0IHBhcnRzID0gZm9ybWF0U3RyLm1hdGNoKGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoKHN1YnN0cmluZykgPT4gewogICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07CiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICJwIiB8fCBmaXJzdENoYXJhY3RlciA9PT0gIlAiKSB7CiAgICAgIGNvbnN0IGxvbmdGb3JtYXR0ZXIgPSBsb25nRm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07CiAgICAgIHJldHVybiBsb25nRm9ybWF0dGVyKHN1YnN0cmluZywgbG9jYWxlLmZvcm1hdExvbmcpOwogICAgfQogICAgcmV0dXJuIHN1YnN0cmluZzsKICB9KS5qb2luKCIiKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoKHN1YnN0cmluZykgPT4gewogICAgaWYgKHN1YnN0cmluZyA9PT0gIicnIikgewogICAgICByZXR1cm4geyBpc1Rva2VuOiBmYWxzZSwgdmFsdWU6ICInIiB9OwogICAgfQogICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07CiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICInIikgewogICAgICByZXR1cm4geyBpc1Rva2VuOiBmYWxzZSwgdmFsdWU6IGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpIH07CiAgICB9CiAgICBpZiAoZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl0pIHsKICAgICAgcmV0dXJuIHsgaXNUb2tlbjogdHJ1ZSwgdmFsdWU6IHN1YnN0cmluZyB9OwogICAgfQogICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigKICAgICAgICAiRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGAiICsgZmlyc3RDaGFyYWN0ZXIgKyAiYCIKICAgICAgKTsKICAgIH0KICAgIHJldHVybiB7IGlzVG9rZW46IGZhbHNlLCB2YWx1ZTogc3Vic3RyaW5nIH07CiAgfSk7CiAgaWYgKGxvY2FsZS5sb2NhbGl6ZS5wcmVwcm9jZXNzb3IpIHsKICAgIHBhcnRzID0gbG9jYWxlLmxvY2FsaXplLnByZXByb2Nlc3NvcihvcmlnaW5hbERhdGUsIHBhcnRzKTsKICB9CiAgY29uc3QgZm9ybWF0dGVyT3B0aW9ucyA9IHsKICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSwKICAgIHdlZWtTdGFydHNPbiwKICAgIGxvY2FsZQogIH07CiAgcmV0dXJuIHBhcnRzLm1hcCgocGFydCkgPT4gewogICAgaWYgKCFwYXJ0LmlzVG9rZW4pIHJldHVybiBwYXJ0LnZhbHVlOwogICAgY29uc3QgdG9rZW4gPSBwYXJ0LnZhbHVlOwogICAgaWYgKCFvcHRpb25zPy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMgJiYgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB8fCAhb3B0aW9ucz8udXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucyAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSkgewogICAgICB3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXRTdHIsIFN0cmluZyhkYXRlKSk7CiAgICB9CiAgICBjb25zdCBmb3JtYXR0ZXIyID0gZm9ybWF0dGVyc1t0b2tlblswXV07CiAgICByZXR1cm4gZm9ybWF0dGVyMihvcmlnaW5hbERhdGUsIHRva2VuLCBsb2NhbGUubG9jYWxpemUsIGZvcm1hdHRlck9wdGlvbnMpOwogIH0pLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIGNsZWFuRXNjYXBlZFN0cmluZyhpbnB1dCkgewogIGNvbnN0IG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTsKICBpZiAoIW1hdGNoZWQpIHsKICAgIHJldHVybiBpbnB1dDsKICB9CiAgcmV0dXJuIG1hdGNoZWRbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cCwgIiciKTsKfQp2YXIgZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCwgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAsIGVzY2FwZWRTdHJpbmdSZWdFeHAsIGRvdWJsZVF1b3RlUmVnRXhwLCB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCwgZm9ybWF0X2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXQuanMiKCkgewogICAgaW5pdF9kZWZhdWx0TG9jYWxlKCk7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X2Zvcm1hdHRlcnMoKTsKICAgIGluaXRfbG9uZ0Zvcm1hdHRlcnMoKTsKICAgIGluaXRfcHJvdGVjdGVkVG9rZW5zKCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFx3KVwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZzsKICAgIGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1ArcCt8UCt8cCt8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7CiAgICBlc2NhcGVkU3RyaW5nUmVnRXhwID0gL14nKFteXSo/KSc/JC87CiAgICBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nOwogICAgdW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAgPSAvW2EtekEtWl0vOwogICAgZm9ybWF0X2RlZmF1bHQgPSBmb3JtYXQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RGlzdGFuY2UuanMKZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2UyKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IGxvY2FsZSA9IG9wdGlvbnM/LmxvY2FsZSA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlID8/IGVuVVM7CiAgY29uc3QgbWludXRlc0luQWxtb3N0VHdvRGF5cyA9IDI1MjA7CiAgY29uc3QgY29tcGFyaXNvbiA9IGNvbXBhcmVBc2MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSk7CiAgaWYgKGlzTmFOKGNvbXBhcmlzb24pKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgY29uc3QgbG9jYWxpemVPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgewogICAgYWRkU3VmZml4OiBvcHRpb25zPy5hZGRTdWZmaXgsCiAgICBjb21wYXJpc29uCiAgfSk7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgLi4uY29tcGFyaXNvbiA+IDAgPyBbZWFybGllckRhdGUsIGxhdGVyRGF0ZV0gOiBbbGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZV0KICApOwogIGNvbnN0IHNlY29uZHMgPSBkaWZmZXJlbmNlSW5TZWNvbmRzKGVhcmxpZXJEYXRlXywgbGF0ZXJEYXRlXyk7CiAgY29uc3Qgb2Zmc2V0SW5TZWNvbmRzID0gKGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZWFybGllckRhdGVfKSAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMobGF0ZXJEYXRlXykpIC8gMWUzOwogIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLnJvdW5kKChzZWNvbmRzIC0gb2Zmc2V0SW5TZWNvbmRzKSAvIDYwKTsKICBsZXQgbW9udGhzMjsKICBpZiAobWludXRlcyA8IDIpIHsKICAgIGlmIChvcHRpb25zPy5pbmNsdWRlU2Vjb25kcykgewogICAgICBpZiAoc2Vjb25kcyA8IDUpIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhTZWNvbmRzIiwgNSwgbG9jYWxpemVPcHRpb25zKTsKICAgICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgMTApIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhTZWNvbmRzIiwgMTAsIGxvY2FsaXplT3B0aW9ucyk7CiAgICAgIH0gZWxzZSBpZiAoc2Vjb25kcyA8IDIwKSB7CiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgibGVzc1RoYW5YU2Vjb25kcyIsIDIwLCBsb2NhbGl6ZU9wdGlvbnMpOwogICAgICB9IGVsc2UgaWYgKHNlY29uZHMgPCA0MCkgewogICAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoImhhbGZBTWludXRlIiwgMCwgbG9jYWxpemVPcHRpb25zKTsKICAgICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgNjApIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhNaW51dGVzIiwgMSwgbG9jYWxpemVPcHRpb25zKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4TWludXRlcyIsIDEsIGxvY2FsaXplT3B0aW9ucyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChtaW51dGVzID09PSAwKSB7CiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgibGVzc1RoYW5YTWludXRlcyIsIDEsIGxvY2FsaXplT3B0aW9ucyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieE1pbnV0ZXMiLCBtaW51dGVzLCBsb2NhbGl6ZU9wdGlvbnMpOwogICAgICB9CiAgICB9CiAgfSBlbHNlIGlmIChtaW51dGVzIDwgNDUpIHsKICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoInhNaW51dGVzIiwgbWludXRlcywgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCA5MCkgewogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgiYWJvdXRYSG91cnMiLCAxLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbkRheSkgewogICAgY29uc3QgaG91cnMgPSBNYXRoLnJvdW5kKG1pbnV0ZXMgLyA2MCk7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJhYm91dFhIb3VycyIsIGhvdXJzLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbkFsbW9zdFR3b0RheXMpIHsKICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoInhEYXlzIiwgMSwgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCBtaW51dGVzSW5Nb250aCkgewogICAgY29uc3QgZGF5czIgPSBNYXRoLnJvdW5kKG1pbnV0ZXMgLyBtaW51dGVzSW5EYXkpOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieERheXMiLCBkYXlzMiwgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCBtaW51dGVzSW5Nb250aCAqIDIpIHsKICAgIG1vbnRoczIgPSBNYXRoLnJvdW5kKG1pbnV0ZXMgLyBtaW51dGVzSW5Nb250aCk7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJhYm91dFhNb250aHMiLCBtb250aHMyLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0KICBtb250aHMyID0gZGlmZmVyZW5jZUluTW9udGhzKGVhcmxpZXJEYXRlXywgbGF0ZXJEYXRlXyk7CiAgaWYgKG1vbnRoczIgPCAxMikgewogICAgY29uc3QgbmVhcmVzdE1vbnRoID0gTWF0aC5yb3VuZChtaW51dGVzIC8gbWludXRlc0luTW9udGgpOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieE1vbnRocyIsIG5lYXJlc3RNb250aCwgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgewogICAgY29uc3QgbW9udGhzU2luY2VTdGFydE9mWWVhciA9IG1vbnRoczIgJSAxMjsKICAgIGNvbnN0IHllYXJzID0gTWF0aC50cnVuYyhtb250aHMyIC8gMTIpOwogICAgaWYgKG1vbnRoc1NpbmNlU3RhcnRPZlllYXIgPCAzKSB7CiAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoImFib3V0WFllYXJzIiwgeWVhcnMsIGxvY2FsaXplT3B0aW9ucyk7CiAgICB9IGVsc2UgaWYgKG1vbnRoc1NpbmNlU3RhcnRPZlllYXIgPCA5KSB7CiAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoIm92ZXJYWWVhcnMiLCB5ZWFycywgbG9jYWxpemVPcHRpb25zKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoImFsbW9zdFhZZWFycyIsIHllYXJzICsgMSwgbG9jYWxpemVPcHRpb25zKTsKICAgIH0KICB9Cn0KdmFyIGZvcm1hdERpc3RhbmNlX2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdERpc3RhbmNlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREaXN0YW5jZS5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRMb2NhbGUoKTsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb21wYXJlQXNjKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5Nb250aHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluU2Vjb25kcygpOwogICAgZm9ybWF0RGlzdGFuY2VfZGVmYXVsdCA9IGZvcm1hdERpc3RhbmNlMjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREaXN0YW5jZVN0cmljdC5qcwpmdW5jdGlvbiBmb3JtYXREaXN0YW5jZVN0cmljdChsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZSA/PyBlblVTOwogIGNvbnN0IGNvbXBhcmlzb24gPSBjb21wYXJlQXNjKGxhdGVyRGF0ZSwgZWFybGllckRhdGUpOwogIGlmIChpc05hTihjb21wYXJpc29uKSkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpOwogIH0KICBjb25zdCBsb2NhbGl6ZU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7CiAgICBhZGRTdWZmaXg6IG9wdGlvbnM/LmFkZFN1ZmZpeCwKICAgIGNvbXBhcmlzb24KICB9KTsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICAuLi5jb21wYXJpc29uID4gMCA/IFtlYXJsaWVyRGF0ZSwgbGF0ZXJEYXRlXSA6IFtsYXRlckRhdGUsIGVhcmxpZXJEYXRlXQogICk7CiAgY29uc3Qgcm91bmRpbmdNZXRob2QgPSBnZXRSb3VuZGluZ01ldGhvZChvcHRpb25zPy5yb3VuZGluZ01ldGhvZCA/PyAicm91bmQiKTsKICBjb25zdCBtaWxsaXNlY29uZHMyID0gZWFybGllckRhdGVfLmdldFRpbWUoKSAtIGxhdGVyRGF0ZV8uZ2V0VGltZSgpOwogIGNvbnN0IG1pbnV0ZXMgPSBtaWxsaXNlY29uZHMyIC8gbWlsbGlzZWNvbmRzSW5NaW51dGU7CiAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGVhcmxpZXJEYXRlXykgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGxhdGVyRGF0ZV8pOwogIGNvbnN0IGRzdE5vcm1hbGl6ZWRNaW51dGVzID0gKG1pbGxpc2Vjb25kczIgLSB0aW1lem9uZU9mZnNldCkgLyBtaWxsaXNlY29uZHNJbk1pbnV0ZTsKICBjb25zdCBkZWZhdWx0VW5pdCA9IG9wdGlvbnM/LnVuaXQ7CiAgbGV0IHVuaXQ7CiAgaWYgKCFkZWZhdWx0VW5pdCkgewogICAgaWYgKG1pbnV0ZXMgPCAxKSB7CiAgICAgIHVuaXQgPSAic2Vjb25kIjsKICAgIH0gZWxzZSBpZiAobWludXRlcyA8IDYwKSB7CiAgICAgIHVuaXQgPSAibWludXRlIjsKICAgIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbkRheSkgewogICAgICB1bml0ID0gImhvdXIiOwogICAgfSBlbHNlIGlmIChkc3ROb3JtYWxpemVkTWludXRlcyA8IG1pbnV0ZXNJbk1vbnRoKSB7CiAgICAgIHVuaXQgPSAiZGF5IjsKICAgIH0gZWxzZSBpZiAoZHN0Tm9ybWFsaXplZE1pbnV0ZXMgPCBtaW51dGVzSW5ZZWFyKSB7CiAgICAgIHVuaXQgPSAibW9udGgiOwogICAgfSBlbHNlIHsKICAgICAgdW5pdCA9ICJ5ZWFyIjsKICAgIH0KICB9IGVsc2UgewogICAgdW5pdCA9IGRlZmF1bHRVbml0OwogIH0KICBpZiAodW5pdCA9PT0gInNlY29uZCIpIHsKICAgIGNvbnN0IHNlY29uZHMgPSByb3VuZGluZ01ldGhvZChtaWxsaXNlY29uZHMyIC8gMWUzKTsKICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoInhTZWNvbmRzIiwgc2Vjb25kcywgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKHVuaXQgPT09ICJtaW51dGUiKSB7CiAgICBjb25zdCByb3VuZGVkTWludXRlcyA9IHJvdW5kaW5nTWV0aG9kKG1pbnV0ZXMpOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieE1pbnV0ZXMiLCByb3VuZGVkTWludXRlcywgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKHVuaXQgPT09ICJob3VyIikgewogICAgY29uc3QgaG91cnMgPSByb3VuZGluZ01ldGhvZChtaW51dGVzIC8gNjApOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieEhvdXJzIiwgaG91cnMsIGxvY2FsaXplT3B0aW9ucyk7CiAgfSBlbHNlIGlmICh1bml0ID09PSAiZGF5IikgewogICAgY29uc3QgZGF5czIgPSByb3VuZGluZ01ldGhvZChkc3ROb3JtYWxpemVkTWludXRlcyAvIG1pbnV0ZXNJbkRheSk7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4RGF5cyIsIGRheXMyLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSBpZiAodW5pdCA9PT0gIm1vbnRoIikgewogICAgY29uc3QgbW9udGhzMiA9IHJvdW5kaW5nTWV0aG9kKGRzdE5vcm1hbGl6ZWRNaW51dGVzIC8gbWludXRlc0luTW9udGgpOwogICAgcmV0dXJuIG1vbnRoczIgPT09IDEyICYmIGRlZmF1bHRVbml0ICE9PSAibW9udGgiID8gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4WWVhcnMiLCAxLCBsb2NhbGl6ZU9wdGlvbnMpIDogbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4TW9udGhzIiwgbW9udGhzMiwgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgewogICAgY29uc3QgeWVhcnMgPSByb3VuZGluZ01ldGhvZChkc3ROb3JtYWxpemVkTWludXRlcyAvIG1pbnV0ZXNJblllYXIpOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieFllYXJzIiwgeWVhcnMsIGxvY2FsaXplT3B0aW9ucyk7CiAgfQp9CnZhciBmb3JtYXREaXN0YW5jZVN0cmljdF9kZWZhdWx0Owp2YXIgaW5pdF9mb3JtYXREaXN0YW5jZVN0cmljdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREaXN0YW5jZVN0cmljdC5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRMb2NhbGUoKTsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfZ2V0Um91bmRpbmdNZXRob2QoKTsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb21wYXJlQXNjKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgZm9ybWF0RGlzdGFuY2VTdHJpY3RfZGVmYXVsdCA9IGZvcm1hdERpc3RhbmNlU3RyaWN0OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdERpc3RhbmNlVG9Ob3cuanMKZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2VUb05vdyhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGZvcm1hdERpc3RhbmNlMihkYXRlLCBjb25zdHJ1Y3ROb3coZGF0ZSksIG9wdGlvbnMpOwp9CnZhciBmb3JtYXREaXN0YW5jZVRvTm93X2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdERpc3RhbmNlVG9Ob3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RGlzdGFuY2VUb05vdy5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9mb3JtYXREaXN0YW5jZTIoKTsKICAgIGZvcm1hdERpc3RhbmNlVG9Ob3dfZGVmYXVsdCA9IGZvcm1hdERpc3RhbmNlVG9Ob3c7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RGlzdGFuY2VUb05vd1N0cmljdC5qcwpmdW5jdGlvbiBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gZm9ybWF0RGlzdGFuY2VTdHJpY3QoZGF0ZSwgY29uc3RydWN0Tm93KGRhdGUpLCBvcHRpb25zKTsKfQp2YXIgZm9ybWF0RGlzdGFuY2VUb05vd1N0cmljdF9kZWZhdWx0Owp2YXIgaW5pdF9mb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3QuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfZm9ybWF0RGlzdGFuY2VTdHJpY3QoKTsKICAgIGZvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3RfZGVmYXVsdCA9IGZvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3Q7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RHVyYXRpb24uanMKZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24oZHVyYXRpb24sIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IGxvY2FsZSA9IG9wdGlvbnM/LmxvY2FsZSA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlID8/IGVuVVM7CiAgY29uc3QgZm9ybWF0MiA9IG9wdGlvbnM/LmZvcm1hdCA/PyBkZWZhdWx0Rm9ybWF0OwogIGNvbnN0IHplcm8gPSBvcHRpb25zPy56ZXJvID8/IGZhbHNlOwogIGNvbnN0IGRlbGltaXRlciA9IG9wdGlvbnM/LmRlbGltaXRlciA/PyAiICI7CiAgaWYgKCFsb2NhbGUuZm9ybWF0RGlzdGFuY2UpIHsKICAgIHJldHVybiAiIjsKICB9CiAgY29uc3QgcmVzdWx0ID0gZm9ybWF0Mi5yZWR1Y2UoKGFjYywgdW5pdCkgPT4gewogICAgY29uc3QgdG9rZW4gPSBgeCR7dW5pdC5yZXBsYWNlKC8oXi4pLywgKG02KSA9PiBtNi50b1VwcGVyQ2FzZSgpKX1gOwogICAgY29uc3QgdmFsdWUyID0gZHVyYXRpb25bdW5pdF07CiAgICBpZiAodmFsdWUyICE9PSB2b2lkIDAgJiYgKHplcm8gfHwgZHVyYXRpb25bdW5pdF0pKSB7CiAgICAgIHJldHVybiBhY2MuY29uY2F0KGxvY2FsZS5mb3JtYXREaXN0YW5jZSh0b2tlbiwgdmFsdWUyKSk7CiAgICB9CiAgICByZXR1cm4gYWNjOwogIH0sIFtdKS5qb2luKGRlbGltaXRlcik7CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgZGVmYXVsdEZvcm1hdCwgZm9ybWF0RHVyYXRpb25fZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0RHVyYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RHVyYXRpb24uanMiKCkgewogICAgaW5pdF9kZWZhdWx0TG9jYWxlKCk7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBkZWZhdWx0Rm9ybWF0ID0gWwogICAgICAieWVhcnMiLAogICAgICAibW9udGhzIiwKICAgICAgIndlZWtzIiwKICAgICAgImRheXMiLAogICAgICAiaG91cnMiLAogICAgICAibWludXRlcyIsCiAgICAgICJzZWNvbmRzIgogICAgXTsKICAgIGZvcm1hdER1cmF0aW9uX2RlZmF1bHQgPSBmb3JtYXREdXJhdGlvbjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRJU08uanMKZnVuY3Rpb24gZm9ybWF0SVNPKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKGlzTmFOKCtkYXRlXykpIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTsKICB9CiAgY29uc3QgZm9ybWF0MiA9IG9wdGlvbnM/LmZvcm1hdCA/PyAiZXh0ZW5kZWQiOwogIGNvbnN0IHJlcHJlc2VudGF0aW9uID0gb3B0aW9ucz8ucmVwcmVzZW50YXRpb24gPz8gImNvbXBsZXRlIjsKICBsZXQgcmVzdWx0ID0gIiI7CiAgbGV0IHR6T2Zmc2V0ID0gIiI7CiAgY29uc3QgZGF0ZURlbGltaXRlciA9IGZvcm1hdDIgPT09ICJleHRlbmRlZCIgPyAiLSIgOiAiIjsKICBjb25zdCB0aW1lRGVsaW1pdGVyID0gZm9ybWF0MiA9PT0gImV4dGVuZGVkIiA/ICI6IiA6ICIiOwogIGlmIChyZXByZXNlbnRhdGlvbiAhPT0gInRpbWUiKSB7CiAgICBjb25zdCBkYXkgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0RGF0ZSgpLCAyKTsKICAgIGNvbnN0IG1vbnRoID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldE1vbnRoKCkgKyAxLCAyKTsKICAgIGNvbnN0IHllYXIgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0RnVsbFllYXIoKSwgNCk7CiAgICByZXN1bHQgPSBgJHt5ZWFyfSR7ZGF0ZURlbGltaXRlcn0ke21vbnRofSR7ZGF0ZURlbGltaXRlcn0ke2RheX1gOwogIH0KICBpZiAocmVwcmVzZW50YXRpb24gIT09ICJkYXRlIikgewogICAgY29uc3Qgb2Zmc2V0ID0gZGF0ZV8uZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgIGlmIChvZmZzZXQgIT09IDApIHsKICAgICAgY29uc3QgYWJzb2x1dGVPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpOwogICAgICBjb25zdCBob3VyT2Zmc2V0ID0gYWRkTGVhZGluZ1plcm9zKE1hdGgudHJ1bmMoYWJzb2x1dGVPZmZzZXQgLyA2MCksIDIpOwogICAgICBjb25zdCBtaW51dGVPZmZzZXQgPSBhZGRMZWFkaW5nWmVyb3MoYWJzb2x1dGVPZmZzZXQgJSA2MCwgMik7CiAgICAgIGNvbnN0IHNpZ24gPSBvZmZzZXQgPCAwID8gIisiIDogIi0iOwogICAgICB0ek9mZnNldCA9IGAke3NpZ259JHtob3VyT2Zmc2V0fToke21pbnV0ZU9mZnNldH1gOwogICAgfSBlbHNlIHsKICAgICAgdHpPZmZzZXQgPSAiWiI7CiAgICB9CiAgICBjb25zdCBob3VyID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldEhvdXJzKCksIDIpOwogICAgY29uc3QgbWludXRlID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldE1pbnV0ZXMoKSwgMik7CiAgICBjb25zdCBzZWNvbmQgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0U2Vjb25kcygpLCAyKTsKICAgIGNvbnN0IHNlcGFyYXRvciA9IHJlc3VsdCA9PT0gIiIgPyAiIiA6ICJUIjsKICAgIGNvbnN0IHRpbWUgPSBbaG91ciwgbWludXRlLCBzZWNvbmRdLmpvaW4odGltZURlbGltaXRlcik7CiAgICByZXN1bHQgPSBgJHtyZXN1bHR9JHtzZXBhcmF0b3J9JHt0aW1lfSR7dHpPZmZzZXR9YDsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgZm9ybWF0SVNPX2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdElTTyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRJU08uanMiKCkgewogICAgaW5pdF9hZGRMZWFkaW5nWmVyb3MoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXRJU09fZGVmYXVsdCA9IGZvcm1hdElTTzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRJU085MDc1LmpzCmZ1bmN0aW9uIGZvcm1hdElTTzkwNzUoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoIWlzVmFsaWQoZGF0ZV8pKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgfQogIGNvbnN0IGZvcm1hdDIgPSBvcHRpb25zPy5mb3JtYXQgPz8gImV4dGVuZGVkIjsKICBjb25zdCByZXByZXNlbnRhdGlvbiA9IG9wdGlvbnM/LnJlcHJlc2VudGF0aW9uID8/ICJjb21wbGV0ZSI7CiAgbGV0IHJlc3VsdCA9ICIiOwogIGNvbnN0IGRhdGVEZWxpbWl0ZXIgPSBmb3JtYXQyID09PSAiZXh0ZW5kZWQiID8gIi0iIDogIiI7CiAgY29uc3QgdGltZURlbGltaXRlciA9IGZvcm1hdDIgPT09ICJleHRlbmRlZCIgPyAiOiIgOiAiIjsKICBpZiAocmVwcmVzZW50YXRpb24gIT09ICJ0aW1lIikgewogICAgY29uc3QgZGF5ID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldERhdGUoKSwgMik7CiAgICBjb25zdCBtb250aCA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRNb250aCgpICsgMSwgMik7CiAgICBjb25zdCB5ZWFyID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldEZ1bGxZZWFyKCksIDQpOwogICAgcmVzdWx0ID0gYCR7eWVhcn0ke2RhdGVEZWxpbWl0ZXJ9JHttb250aH0ke2RhdGVEZWxpbWl0ZXJ9JHtkYXl9YDsKICB9CiAgaWYgKHJlcHJlc2VudGF0aW9uICE9PSAiZGF0ZSIpIHsKICAgIGNvbnN0IGhvdXIgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0SG91cnMoKSwgMik7CiAgICBjb25zdCBtaW51dGUgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0TWludXRlcygpLCAyKTsKICAgIGNvbnN0IHNlY29uZCA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRTZWNvbmRzKCksIDIpOwogICAgY29uc3Qgc2VwYXJhdG9yID0gcmVzdWx0ID09PSAiIiA/ICIiIDogIiAiOwogICAgcmVzdWx0ID0gYCR7cmVzdWx0fSR7c2VwYXJhdG9yfSR7aG91cn0ke3RpbWVEZWxpbWl0ZXJ9JHttaW51dGV9JHt0aW1lRGVsaW1pdGVyfSR7c2Vjb25kfWA7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KdmFyIGZvcm1hdElTTzkwNzVfZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0SVNPOTA3NSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRJU085MDc1LmpzIigpIHsKICAgIGluaXRfYWRkTGVhZGluZ1plcm9zKCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXRJU085MDc1X2RlZmF1bHQgPSBmb3JtYXRJU085MDc1OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdElTT0R1cmF0aW9uLmpzCmZ1bmN0aW9uIGZvcm1hdElTT0R1cmF0aW9uKGR1cmF0aW9uKSB7CiAgY29uc3QgewogICAgeWVhcnMgPSAwLAogICAgbW9udGhzOiBtb250aHMyID0gMCwKICAgIGRheXM6IGRheXMyID0gMCwKICAgIGhvdXJzID0gMCwKICAgIG1pbnV0ZXMgPSAwLAogICAgc2Vjb25kcyA9IDAKICB9ID0gZHVyYXRpb247CiAgcmV0dXJuIGBQJHt5ZWFyc31ZJHttb250aHMyfU0ke2RheXMyfURUJHtob3Vyc31IJHttaW51dGVzfU0ke3NlY29uZHN9U2A7Cn0KdmFyIGZvcm1hdElTT0R1cmF0aW9uX2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdElTT0R1cmF0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdElTT0R1cmF0aW9uLmpzIigpIHsKICAgIGZvcm1hdElTT0R1cmF0aW9uX2RlZmF1bHQgPSBmb3JtYXRJU09EdXJhdGlvbjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRSRkMzMzM5LmpzCmZ1bmN0aW9uIGZvcm1hdFJGQzMzMzkoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoIWlzVmFsaWQoZGF0ZV8pKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgfQogIGNvbnN0IGZyYWN0aW9uRGlnaXRzID0gb3B0aW9ucz8uZnJhY3Rpb25EaWdpdHMgPz8gMDsKICBjb25zdCBkYXkgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0RGF0ZSgpLCAyKTsKICBjb25zdCBtb250aCA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRNb250aCgpICsgMSwgMik7CiAgY29uc3QgeWVhciA9IGRhdGVfLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgaG91ciA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRIb3VycygpLCAyKTsKICBjb25zdCBtaW51dGUgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0TWludXRlcygpLCAyKTsKICBjb25zdCBzZWNvbmQgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0U2Vjb25kcygpLCAyKTsKICBsZXQgZnJhY3Rpb25hbFNlY29uZCA9ICIiOwogIGlmIChmcmFjdGlvbkRpZ2l0cyA+IDApIHsKICAgIGNvbnN0IG1pbGxpc2Vjb25kczIgPSBkYXRlXy5nZXRNaWxsaXNlY29uZHMoKTsKICAgIGNvbnN0IGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC50cnVuYygKICAgICAgbWlsbGlzZWNvbmRzMiAqIE1hdGgucG93KDEwLCBmcmFjdGlvbkRpZ2l0cyAtIDMpCiAgICApOwogICAgZnJhY3Rpb25hbFNlY29uZCA9ICIuIiArIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgZnJhY3Rpb25EaWdpdHMpOwogIH0KICBsZXQgb2Zmc2V0ID0gIiI7CiAgY29uc3QgdHpPZmZzZXQgPSBkYXRlXy5nZXRUaW1lem9uZU9mZnNldCgpOwogIGlmICh0ek9mZnNldCAhPT0gMCkgewogICAgY29uc3QgYWJzb2x1dGVPZmZzZXQgPSBNYXRoLmFicyh0ek9mZnNldCk7CiAgICBjb25zdCBob3VyT2Zmc2V0ID0gYWRkTGVhZGluZ1plcm9zKE1hdGgudHJ1bmMoYWJzb2x1dGVPZmZzZXQgLyA2MCksIDIpOwogICAgY29uc3QgbWludXRlT2Zmc2V0ID0gYWRkTGVhZGluZ1plcm9zKGFic29sdXRlT2Zmc2V0ICUgNjAsIDIpOwogICAgY29uc3Qgc2lnbiA9IHR6T2Zmc2V0IDwgMCA/ICIrIiA6ICItIjsKICAgIG9mZnNldCA9IGAke3NpZ259JHtob3VyT2Zmc2V0fToke21pbnV0ZU9mZnNldH1gOwogIH0gZWxzZSB7CiAgICBvZmZzZXQgPSAiWiI7CiAgfQogIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1UJHtob3VyfToke21pbnV0ZX06JHtzZWNvbmR9JHtmcmFjdGlvbmFsU2Vjb25kfSR7b2Zmc2V0fWA7Cn0KdmFyIGZvcm1hdFJGQzMzMzlfZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0UkZDMzMzOSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRSRkMzMzM5LmpzIigpIHsKICAgIGluaXRfYWRkTGVhZGluZ1plcm9zKCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXRSRkMzMzM5X2RlZmF1bHQgPSBmb3JtYXRSRkMzMzM5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdFJGQzcyMzEuanMKZnVuY3Rpb24gZm9ybWF0UkZDNzIzMShkYXRlKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSk7CiAgaWYgKCFpc1ZhbGlkKF9kYXRlKSkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpOwogIH0KICBjb25zdCBkYXlOYW1lID0gZGF5c1tfZGF0ZS5nZXRVVENEYXkoKV07CiAgY29uc3QgZGF5T2ZNb250aCA9IGFkZExlYWRpbmdaZXJvcyhfZGF0ZS5nZXRVVENEYXRlKCksIDIpOwogIGNvbnN0IG1vbnRoTmFtZSA9IG1vbnRoc1tfZGF0ZS5nZXRVVENNb250aCgpXTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0VVRDRnVsbFllYXIoKTsKICBjb25zdCBob3VyID0gYWRkTGVhZGluZ1plcm9zKF9kYXRlLmdldFVUQ0hvdXJzKCksIDIpOwogIGNvbnN0IG1pbnV0ZSA9IGFkZExlYWRpbmdaZXJvcyhfZGF0ZS5nZXRVVENNaW51dGVzKCksIDIpOwogIGNvbnN0IHNlY29uZCA9IGFkZExlYWRpbmdaZXJvcyhfZGF0ZS5nZXRVVENTZWNvbmRzKCksIDIpOwogIHJldHVybiBgJHtkYXlOYW1lfSwgJHtkYXlPZk1vbnRofSAke21vbnRoTmFtZX0gJHt5ZWFyfSAke2hvdXJ9OiR7bWludXRlfToke3NlY29uZH0gR01UYDsKfQp2YXIgZGF5cywgbW9udGhzLCBmb3JtYXRSRkM3MjMxX2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdFJGQzcyMzEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0UkZDNzIzMS5qcyIoKSB7CiAgICBpbml0X2FkZExlYWRpbmdaZXJvcygpOwogICAgaW5pdF9pc1ZhbGlkKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZGF5cyA9IFsiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0Il07CiAgICBtb250aHMgPSBbCiAgICAgICJKYW4iLAogICAgICAiRmViIiwKICAgICAgIk1hciIsCiAgICAgICJBcHIiLAogICAgICAiTWF5IiwKICAgICAgIkp1biIsCiAgICAgICJKdWwiLAogICAgICAiQXVnIiwKICAgICAgIlNlcCIsCiAgICAgICJPY3QiLAogICAgICAiTm92IiwKICAgICAgIkRlYyIKICAgIF07CiAgICBmb3JtYXRSRkM3MjMxX2RlZmF1bHQgPSBmb3JtYXRSRkM3MjMxOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdFJlbGF0aXZlLmpzCmZ1bmN0aW9uIGZvcm1hdFJlbGF0aXZlMihkYXRlLCBiYXNlRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtkYXRlXywgYmFzZURhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKG9wdGlvbnM/LmluLCBkYXRlLCBiYXNlRGF0ZSk7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZSA/PyBlblVTOwogIGNvbnN0IHdlZWtTdGFydHNPbiA9IG9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwOwogIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZGF0ZV8sIGJhc2VEYXRlXyk7CiAgaWYgKGlzTmFOKGRpZmYpKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgfQogIGxldCB0b2tlbjsKICBpZiAoZGlmZiA8IC02KSB7CiAgICB0b2tlbiA9ICJvdGhlciI7CiAgfSBlbHNlIGlmIChkaWZmIDwgLTEpIHsKICAgIHRva2VuID0gImxhc3RXZWVrIjsKICB9IGVsc2UgaWYgKGRpZmYgPCAwKSB7CiAgICB0b2tlbiA9ICJ5ZXN0ZXJkYXkiOwogIH0gZWxzZSBpZiAoZGlmZiA8IDEpIHsKICAgIHRva2VuID0gInRvZGF5IjsKICB9IGVsc2UgaWYgKGRpZmYgPCAyKSB7CiAgICB0b2tlbiA9ICJ0b21vcnJvdyI7CiAgfSBlbHNlIGlmIChkaWZmIDwgNykgewogICAgdG9rZW4gPSAibmV4dFdlZWsiOwogIH0gZWxzZSB7CiAgICB0b2tlbiA9ICJvdGhlciI7CiAgfQogIGNvbnN0IGZvcm1hdFN0ciA9IGxvY2FsZS5mb3JtYXRSZWxhdGl2ZSh0b2tlbiwgZGF0ZV8sIGJhc2VEYXRlXywgewogICAgbG9jYWxlLAogICAgd2Vla1N0YXJ0c09uCiAgfSk7CiAgcmV0dXJuIGZvcm1hdChkYXRlXywgZm9ybWF0U3RyLCB7IGxvY2FsZSwgd2Vla1N0YXJ0c09uIH0pOwp9CnZhciBmb3JtYXRSZWxhdGl2ZV9kZWZhdWx0Owp2YXIgaW5pdF9mb3JtYXRSZWxhdGl2ZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0UmVsYXRpdmUuanMiKCkgewogICAgaW5pdF9kZWZhdWx0TG9jYWxlKCk7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9mb3JtYXQoKTsKICAgIGZvcm1hdFJlbGF0aXZlX2RlZmF1bHQgPSBmb3JtYXRSZWxhdGl2ZTI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZnJvbVVuaXhUaW1lLmpzCmZ1bmN0aW9uIGZyb21Vbml4VGltZSh1bml4VGltZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUodW5peFRpbWUgKiAxZTMsIG9wdGlvbnM/LmluKTsKfQp2YXIgZnJvbVVuaXhUaW1lX2RlZmF1bHQ7CnZhciBpbml0X2Zyb21Vbml4VGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mcm9tVW5peFRpbWUuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGZyb21Vbml4VGltZV9kZWZhdWx0ID0gZnJvbVVuaXhUaW1lOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERhdGUuanMKZnVuY3Rpb24gZ2V0RGF0ZShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF0ZSgpOwp9CnZhciBnZXREYXRlX2RlZmF1bHQ7CnZhciBpbml0X2dldERhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGF0ZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0RGF0ZV9kZWZhdWx0ID0gZ2V0RGF0ZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXkuanMKZnVuY3Rpb24gZ2V0RGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKTsKfQp2YXIgZ2V0RGF5X2RlZmF1bHQ7CnZhciBpbml0X2dldERheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldERheV9kZWZhdWx0ID0gZ2V0RGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERheXNJbk1vbnRoLmpzCmZ1bmN0aW9uIGdldERheXNJbk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgbW9udGhJbmRleCA9IF9kYXRlLmdldE1vbnRoKCk7CiAgY29uc3QgbGFzdERheU9mTW9udGgyID0gY29uc3RydWN0RnJvbShfZGF0ZSwgMCk7CiAgbGFzdERheU9mTW9udGgyLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoSW5kZXggKyAxLCAwKTsKICBsYXN0RGF5T2ZNb250aDIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIGxhc3REYXlPZk1vbnRoMi5nZXREYXRlKCk7Cn0KdmFyIGdldERheXNJbk1vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2dldERheXNJbk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERheXNJbk1vbnRoLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldERheXNJbk1vbnRoX2RlZmF1bHQgPSBnZXREYXlzSW5Nb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0xlYXBZZWFyLmpzCmZ1bmN0aW9uIGlzTGVhcFllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTsKICByZXR1cm4geWVhciAlIDQwMCA9PT0gMCB8fCB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwOwp9CnZhciBpc0xlYXBZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2lzTGVhcFllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNMZWFwWWVhci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNMZWFwWWVhcl9kZWZhdWx0ID0gaXNMZWFwWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXlzSW5ZZWFyLmpzCmZ1bmN0aW9uIGdldERheXNJblllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoTnVtYmVyLmlzTmFOKCtfZGF0ZSkpIHJldHVybiBOYU47CiAgcmV0dXJuIGlzTGVhcFllYXIoX2RhdGUpID8gMzY2IDogMzY1Owp9CnZhciBnZXREYXlzSW5ZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2dldERheXNJblllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGF5c0luWWVhci5qcyIoKSB7CiAgICBpbml0X2lzTGVhcFllYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXREYXlzSW5ZZWFyX2RlZmF1bHQgPSBnZXREYXlzSW5ZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERlY2FkZS5qcwpmdW5jdGlvbiBnZXREZWNhZGUoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTsKICBjb25zdCBkZWNhZGUgPSBNYXRoLmZsb29yKHllYXIgLyAxMCkgKiAxMDsKICByZXR1cm4gZGVjYWRlOwp9CnZhciBnZXREZWNhZGVfZGVmYXVsdDsKdmFyIGluaXRfZ2V0RGVjYWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERlY2FkZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0RGVjYWRlX2RlZmF1bHQgPSBnZXREZWNhZGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGVmYXVsdE9wdGlvbnMuanMKZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMyKCkgewogIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBnZXREZWZhdWx0T3B0aW9ucygpKTsKfQp2YXIgZ2V0RGVmYXVsdE9wdGlvbnNfZGVmYXVsdDsKdmFyIGluaXRfZ2V0RGVmYXVsdE9wdGlvbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGVmYXVsdE9wdGlvbnMuanMiKCkgewogICAgaW5pdF9kZWZhdWx0T3B0aW9ucygpOwogICAgZ2V0RGVmYXVsdE9wdGlvbnNfZGVmYXVsdCA9IGdldERlZmF1bHRPcHRpb25zMjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRIb3Vycy5qcwpmdW5jdGlvbiBnZXRIb3VycyhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0SG91cnMoKTsKfQp2YXIgZ2V0SG91cnNfZGVmYXVsdDsKdmFyIGluaXRfZ2V0SG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SG91cnMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldEhvdXJzX2RlZmF1bHQgPSBnZXRIb3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRJU09EYXkuanMKZnVuY3Rpb24gZ2V0SVNPRGF5KGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXkgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpOwogIHJldHVybiBkYXkgPT09IDAgPyA3IDogZGF5Owp9CnZhciBnZXRJU09EYXlfZGVmYXVsdDsKdmFyIGluaXRfZ2V0SVNPRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT0RheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0SVNPRGF5X2RlZmF1bHQgPSBnZXRJU09EYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vla3NJblllYXIuanMKZnVuY3Rpb24gZ2V0SVNPV2Vla3NJblllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IHRoaXNZZWFyID0gc3RhcnRPZklTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogIGNvbnN0IG5leHRZZWFyID0gc3RhcnRPZklTT1dlZWtZZWFyKGFkZFdlZWtzKHRoaXNZZWFyLCA2MCkpOwogIGNvbnN0IGRpZmYgPSArbmV4dFllYXIgLSArdGhpc1llYXI7CiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2Vlayk7Cn0KdmFyIGdldElTT1dlZWtzSW5ZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2dldElTT1dlZWtzSW5ZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT1dlZWtzSW5ZZWFyLmpzIigpIHsKICAgIGluaXRfYWRkV2Vla3MoKTsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBpbml0X3N0YXJ0T2ZJU09XZWVrWWVhcigpOwogICAgZ2V0SVNPV2Vla3NJblllYXJfZGVmYXVsdCA9IGdldElTT1dlZWtzSW5ZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldE1pbGxpc2Vjb25kcy5qcwpmdW5jdGlvbiBnZXRNaWxsaXNlY29uZHMoZGF0ZSkgewogIHJldHVybiB0b0RhdGUoZGF0ZSkuZ2V0TWlsbGlzZWNvbmRzKCk7Cn0KdmFyIGdldE1pbGxpc2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9nZXRNaWxsaXNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0TWlsbGlzZWNvbmRzLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRNaWxsaXNlY29uZHNfZGVmYXVsdCA9IGdldE1pbGxpc2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRNaW51dGVzLmpzCmZ1bmN0aW9uIGdldE1pbnV0ZXMoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldE1pbnV0ZXMoKTsKfQp2YXIgZ2V0TWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9nZXRNaW51dGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldE1pbnV0ZXMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldE1pbnV0ZXNfZGVmYXVsdCA9IGdldE1pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0TW9udGguanMKZnVuY3Rpb24gZ2V0TW9udGgoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldE1vbnRoKCk7Cn0KdmFyIGdldE1vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2dldE1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldE1vbnRoLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRNb250aF9kZWZhdWx0ID0gZ2V0TW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHMuanMKZnVuY3Rpb24gZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHMoaW50ZXJ2YWxMZWZ0LCBpbnRlcnZhbFJpZ2h0KSB7CiAgY29uc3QgW2xlZnRTdGFydCwgbGVmdEVuZF0gPSBbCiAgICArdG9EYXRlKGludGVydmFsTGVmdC5zdGFydCksCiAgICArdG9EYXRlKGludGVydmFsTGVmdC5lbmQpCiAgXS5zb3J0KChhNSwgYjUpID0+IGE1IC0gYjUpOwogIGNvbnN0IFtyaWdodFN0YXJ0LCByaWdodEVuZF0gPSBbCiAgICArdG9EYXRlKGludGVydmFsUmlnaHQuc3RhcnQpLAogICAgK3RvRGF0ZShpbnRlcnZhbFJpZ2h0LmVuZCkKICBdLnNvcnQoKGE1LCBiNSkgPT4gYTUgLSBiNSk7CiAgY29uc3QgaXNPdmVybGFwcGluZyA9IGxlZnRTdGFydCA8IHJpZ2h0RW5kICYmIHJpZ2h0U3RhcnQgPCBsZWZ0RW5kOwogIGlmICghaXNPdmVybGFwcGluZykgcmV0dXJuIDA7CiAgY29uc3Qgb3ZlcmxhcExlZnQgPSByaWdodFN0YXJ0IDwgbGVmdFN0YXJ0ID8gbGVmdFN0YXJ0IDogcmlnaHRTdGFydDsKICBjb25zdCBsZWZ0ID0gb3ZlcmxhcExlZnQgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG92ZXJsYXBMZWZ0KTsKICBjb25zdCBvdmVybGFwUmlnaHQgPSByaWdodEVuZCA+IGxlZnRFbmQgPyBsZWZ0RW5kIDogcmlnaHRFbmQ7CiAgY29uc3QgcmlnaHQgPSBvdmVybGFwUmlnaHQgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG92ZXJsYXBSaWdodCk7CiAgcmV0dXJuIE1hdGguY2VpbCgocmlnaHQgLSBsZWZ0KSAvIG1pbGxpc2Vjb25kc0luRGF5KTsKfQp2YXIgZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHNfZGVmYXVsdDsKdmFyIGluaXRfZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHMuanMiKCkgewogICAgaW5pdF9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldE92ZXJsYXBwaW5nRGF5c0luSW50ZXJ2YWxzX2RlZmF1bHQgPSBnZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFsczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRTZWNvbmRzLmpzCmZ1bmN0aW9uIGdldFNlY29uZHMoZGF0ZSkgewogIHJldHVybiB0b0RhdGUoZGF0ZSkuZ2V0U2Vjb25kcygpOwp9CnZhciBnZXRTZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X2dldFNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0U2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0U2Vjb25kc19kZWZhdWx0ID0gZ2V0U2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRUaW1lLmpzCmZ1bmN0aW9uIGdldFRpbWUoZGF0ZSkgewogIHJldHVybiArdG9EYXRlKGRhdGUpOwp9CnZhciBnZXRUaW1lX2RlZmF1bHQ7CnZhciBpbml0X2dldFRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0VGltZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0VGltZV9kZWZhdWx0ID0gZ2V0VGltZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRVbml4VGltZS5qcwpmdW5jdGlvbiBnZXRVbml4VGltZShkYXRlKSB7CiAgcmV0dXJuIE1hdGgudHJ1bmMoK3RvRGF0ZShkYXRlKSAvIDFlMyk7Cn0KdmFyIGdldFVuaXhUaW1lX2RlZmF1bHQ7CnZhciBpbml0X2dldFVuaXhUaW1lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFVuaXhUaW1lLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRVbml4VGltZV9kZWZhdWx0ID0gZ2V0VW5peFRpbWU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0V2Vla09mTW9udGguanMKZnVuY3Rpb24gZ2V0V2Vla09mTW9udGgoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3Qgd2Vla1N0YXJ0c09uID0gb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IDA7CiAgY29uc3QgY3VycmVudERheU9mTW9udGggPSBnZXREYXRlKHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikpOwogIGlmIChpc05hTihjdXJyZW50RGF5T2ZNb250aCkpIHJldHVybiBOYU47CiAgY29uc3Qgc3RhcnRXZWVrRGF5ID0gZ2V0RGF5KHN0YXJ0T2ZNb250aChkYXRlLCBvcHRpb25zKSk7CiAgbGV0IGxhc3REYXlPZkZpcnN0V2VlayA9IHdlZWtTdGFydHNPbiAtIHN0YXJ0V2Vla0RheTsKICBpZiAobGFzdERheU9mRmlyc3RXZWVrIDw9IDApIGxhc3REYXlPZkZpcnN0V2VlayArPSA3OwogIGNvbnN0IHJlbWFpbmluZ0RheXNBZnRlckZpcnN0V2VlayA9IGN1cnJlbnREYXlPZk1vbnRoIC0gbGFzdERheU9mRmlyc3RXZWVrOwogIHJldHVybiBNYXRoLmNlaWwocmVtYWluaW5nRGF5c0FmdGVyRmlyc3RXZWVrIC8gNykgKyAxOwp9CnZhciBnZXRXZWVrT2ZNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9nZXRXZWVrT2ZNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRXZWVrT2ZNb250aC5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X2dldERhdGUoKTsKICAgIGluaXRfZ2V0RGF5KCk7CiAgICBpbml0X3N0YXJ0T2ZNb250aCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldFdlZWtPZk1vbnRoX2RlZmF1bHQgPSBnZXRXZWVrT2ZNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZNb250aC5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZNb250aChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IG1vbnRoID0gX2RhdGUuZ2V0TW9udGgoKTsKICBfZGF0ZS5zZXRGdWxsWWVhcihfZGF0ZS5nZXRGdWxsWWVhcigpLCBtb250aCArIDEsIDApOwogIF9kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiB0b0RhdGUoX2RhdGUsIG9wdGlvbnM/LmluKTsKfQp2YXIgbGFzdERheU9mTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfbGFzdERheU9mTW9udGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mTW9udGguanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGxhc3REYXlPZk1vbnRoX2RlZmF1bHQgPSBsYXN0RGF5T2ZNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRXZWVrc0luTW9udGguanMKZnVuY3Rpb24gZ2V0V2Vla3NJbk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBjb250ZXh0RGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgcmV0dXJuIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MoCiAgICBsYXN0RGF5T2ZNb250aChjb250ZXh0RGF0ZSwgb3B0aW9ucyksCiAgICBzdGFydE9mTW9udGgoY29udGV4dERhdGUsIG9wdGlvbnMpLAogICAgb3B0aW9ucwogICkgKyAxOwp9CnZhciBnZXRXZWVrc0luTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfZ2V0V2Vla3NJbk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWtzSW5Nb250aC5qcyIoKSB7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MoKTsKICAgIGluaXRfbGFzdERheU9mTW9udGgoKTsKICAgIGluaXRfc3RhcnRPZk1vbnRoKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0V2Vla3NJbk1vbnRoX2RlZmF1bHQgPSBnZXRXZWVrc0luTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0WWVhci5qcwpmdW5jdGlvbiBnZXRZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXRGdWxsWWVhcigpOwp9CnZhciBnZXRZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2dldFllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0WWVhci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0WWVhcl9kZWZhdWx0ID0gZ2V0WWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9ob3Vyc1RvTWlsbGlzZWNvbmRzLmpzCmZ1bmN0aW9uIGhvdXJzVG9NaWxsaXNlY29uZHMoaG91cnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyhob3VycyAqIG1pbGxpc2Vjb25kc0luSG91cik7Cn0KdmFyIGhvdXJzVG9NaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfaG91cnNUb01pbGxpc2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9ob3Vyc1RvTWlsbGlzZWNvbmRzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBob3Vyc1RvTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBob3Vyc1RvTWlsbGlzZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2hvdXJzVG9NaW51dGVzLmpzCmZ1bmN0aW9uIGhvdXJzVG9NaW51dGVzKGhvdXJzKSB7CiAgcmV0dXJuIE1hdGgudHJ1bmMoaG91cnMgKiBtaW51dGVzSW5Ib3VyKTsKfQp2YXIgaG91cnNUb01pbnV0ZXNfZGVmYXVsdDsKdmFyIGluaXRfaG91cnNUb01pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaG91cnNUb01pbnV0ZXMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGhvdXJzVG9NaW51dGVzX2RlZmF1bHQgPSBob3Vyc1RvTWludXRlczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9ob3Vyc1RvU2Vjb25kcy5qcwpmdW5jdGlvbiBob3Vyc1RvU2Vjb25kcyhob3VycykgewogIHJldHVybiBNYXRoLnRydW5jKGhvdXJzICogc2Vjb25kc0luSG91cik7Cn0KdmFyIGhvdXJzVG9TZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X2hvdXJzVG9TZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2hvdXJzVG9TZWNvbmRzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBob3Vyc1RvU2Vjb25kc19kZWZhdWx0ID0gaG91cnNUb1NlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaW50ZXJ2YWwuanMKZnVuY3Rpb24gaW50ZXJ2YWwyKHN0YXJ0LCBlbmQzLCBvcHRpb25zKSB7CiAgY29uc3QgW19zdGFydCwgX2VuZF0gPSBub3JtYWxpemVEYXRlcyhvcHRpb25zPy5pbiwgc3RhcnQsIGVuZDMpOwogIGlmIChpc05hTigrX3N0YXJ0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiU3RhcnQgZGF0ZSBpcyBpbnZhbGlkIik7CiAgaWYgKGlzTmFOKCtfZW5kKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiRW5kIGRhdGUgaXMgaW52YWxpZCIpOwogIGlmIChvcHRpb25zPy5hc3NlcnRQb3NpdGl2ZSAmJiArX3N0YXJ0ID4gK19lbmQpCiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFbmQgZGF0ZSBtdXN0IGJlIGFmdGVyIHN0YXJ0IGRhdGUiKTsKICByZXR1cm4geyBzdGFydDogX3N0YXJ0LCBlbmQ6IF9lbmQgfTsKfQp2YXIgaW50ZXJ2YWxfZGVmYXVsdDsKdmFyIGluaXRfaW50ZXJ2YWwyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGludGVydmFsX2RlZmF1bHQgPSBpbnRlcnZhbDI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaW50ZXJ2YWxUb0R1cmF0aW9uLmpzCmZ1bmN0aW9uIGludGVydmFsVG9EdXJhdGlvbihpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB7IHN0YXJ0LCBlbmQ6IGVuZDMgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbDMpOwogIGNvbnN0IGR1cmF0aW9uID0ge307CiAgY29uc3QgeWVhcnMgPSBkaWZmZXJlbmNlSW5ZZWFycyhlbmQzLCBzdGFydCk7CiAgaWYgKHllYXJzKSBkdXJhdGlvbi55ZWFycyA9IHllYXJzOwogIGNvbnN0IHJlbWFpbmluZ01vbnRocyA9IGFkZChzdGFydCwgeyB5ZWFyczogZHVyYXRpb24ueWVhcnMgfSk7CiAgY29uc3QgbW9udGhzMiA9IGRpZmZlcmVuY2VJbk1vbnRocyhlbmQzLCByZW1haW5pbmdNb250aHMpOwogIGlmIChtb250aHMyKSBkdXJhdGlvbi5tb250aHMgPSBtb250aHMyOwogIGNvbnN0IHJlbWFpbmluZ0RheXMgPSBhZGQocmVtYWluaW5nTW9udGhzLCB7IG1vbnRoczogZHVyYXRpb24ubW9udGhzIH0pOwogIGNvbnN0IGRheXMyID0gZGlmZmVyZW5jZUluRGF5cyhlbmQzLCByZW1haW5pbmdEYXlzKTsKICBpZiAoZGF5czIpIGR1cmF0aW9uLmRheXMgPSBkYXlzMjsKICBjb25zdCByZW1haW5pbmdIb3VycyA9IGFkZChyZW1haW5pbmdEYXlzLCB7IGRheXM6IGR1cmF0aW9uLmRheXMgfSk7CiAgY29uc3QgaG91cnMgPSBkaWZmZXJlbmNlSW5Ib3VycyhlbmQzLCByZW1haW5pbmdIb3Vycyk7CiAgaWYgKGhvdXJzKSBkdXJhdGlvbi5ob3VycyA9IGhvdXJzOwogIGNvbnN0IHJlbWFpbmluZ01pbnV0ZXMgPSBhZGQocmVtYWluaW5nSG91cnMsIHsgaG91cnM6IGR1cmF0aW9uLmhvdXJzIH0pOwogIGNvbnN0IG1pbnV0ZXMgPSBkaWZmZXJlbmNlSW5NaW51dGVzKGVuZDMsIHJlbWFpbmluZ01pbnV0ZXMpOwogIGlmIChtaW51dGVzKSBkdXJhdGlvbi5taW51dGVzID0gbWludXRlczsKICBjb25zdCByZW1haW5pbmdTZWNvbmRzID0gYWRkKHJlbWFpbmluZ01pbnV0ZXMsIHsgbWludXRlczogZHVyYXRpb24ubWludXRlcyB9KTsKICBjb25zdCBzZWNvbmRzID0gZGlmZmVyZW5jZUluU2Vjb25kcyhlbmQzLCByZW1haW5pbmdTZWNvbmRzKTsKICBpZiAoc2Vjb25kcykgZHVyYXRpb24uc2Vjb25kcyA9IHNlY29uZHM7CiAgcmV0dXJuIGR1cmF0aW9uOwp9CnZhciBpbnRlcnZhbFRvRHVyYXRpb25fZGVmYXVsdDsKdmFyIGluaXRfaW50ZXJ2YWxUb0R1cmF0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGVydmFsVG9EdXJhdGlvbi5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZUludGVydmFsKCk7CiAgICBpbml0X2FkZCgpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5EYXlzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkhvdXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1pbnV0ZXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluTW9udGhzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJblNlY29uZHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluWWVhcnMoKTsKICAgIGludGVydmFsVG9EdXJhdGlvbl9kZWZhdWx0ID0gaW50ZXJ2YWxUb0R1cmF0aW9uOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGxGb3JtYXQuanMKZnVuY3Rpb24gaW50bEZvcm1hdChkYXRlLCBmb3JtYXRPckxvY2FsZSwgbG9jYWxlT3B0aW9ucykgewogIGxldCBmb3JtYXRPcHRpb25zOwogIGlmIChpc0Zvcm1hdE9wdGlvbnMoZm9ybWF0T3JMb2NhbGUpKSB7CiAgICBmb3JtYXRPcHRpb25zID0gZm9ybWF0T3JMb2NhbGU7CiAgfSBlbHNlIHsKICAgIGxvY2FsZU9wdGlvbnMgPSBmb3JtYXRPckxvY2FsZTsKICB9CiAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZU9wdGlvbnM/LmxvY2FsZSwgZm9ybWF0T3B0aW9ucykuZm9ybWF0KAogICAgdG9EYXRlKGRhdGUpCiAgKTsKfQpmdW5jdGlvbiBpc0Zvcm1hdE9wdGlvbnMob3B0cykgewogIHJldHVybiBvcHRzICE9PSB2b2lkIDAgJiYgISgibG9jYWxlIiBpbiBvcHRzKTsKfQp2YXIgaW50bEZvcm1hdF9kZWZhdWx0Owp2YXIgaW5pdF9pbnRsRm9ybWF0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGxGb3JtYXQuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGludGxGb3JtYXRfZGVmYXVsdCA9IGludGxGb3JtYXQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaW50bEZvcm1hdERpc3RhbmNlLmpzCmZ1bmN0aW9uIGludGxGb3JtYXREaXN0YW5jZShsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgbGV0IHZhbHVlMiA9IDA7CiAgbGV0IHVuaXQ7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGlmICghb3B0aW9ucz8udW5pdCkgewogICAgY29uc3QgZGlmZkluU2Vjb25kcyA9IGRpZmZlcmVuY2VJblNlY29uZHMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgIGlmIChNYXRoLmFicyhkaWZmSW5TZWNvbmRzKSA8IHNlY29uZHNJbk1pbnV0ZSkgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5TZWNvbmRzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICAgIHVuaXQgPSAic2Vjb25kIjsKICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGlmZkluU2Vjb25kcykgPCBzZWNvbmRzSW5Ib3VyKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgICAgdW5pdCA9ICJtaW51dGUiOwogICAgfSBlbHNlIGlmIChNYXRoLmFicyhkaWZmSW5TZWNvbmRzKSA8IHNlY29uZHNJbkRheSAmJiBNYXRoLmFicyhkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSkgPCAxKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbkhvdXJzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICAgIHVuaXQgPSAiaG91ciI7CiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luV2VlayAmJiAodmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXykpICYmIE1hdGguYWJzKHZhbHVlMikgPCA3KSB7CiAgICAgIHVuaXQgPSAiZGF5IjsKICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGlmZkluU2Vjb25kcykgPCBzZWNvbmRzSW5Nb250aCkgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICAgIHVuaXQgPSAid2VlayI7CiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luUXVhcnRlcikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgICB1bml0ID0gIm1vbnRoIjsKICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGlmZkluU2Vjb25kcykgPCBzZWNvbmRzSW5ZZWFyKSB7CiAgICAgIGlmIChkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXykgPCA0KSB7CiAgICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgICAgIHVuaXQgPSAicXVhcnRlciI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgICAgIHVuaXQgPSAieWVhciI7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgICAgdW5pdCA9ICJ5ZWFyIjsKICAgIH0KICB9IGVsc2UgewogICAgdW5pdCA9IG9wdGlvbnM/LnVuaXQ7CiAgICBpZiAodW5pdCA9PT0gInNlY29uZCIpIHsKICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluU2Vjb25kcyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAibWludXRlIikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5NaW51dGVzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICJob3VyIikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5Ib3VycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAiZGF5IikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gIndlZWsiKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gIm1vbnRoIikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAicXVhcnRlciIpIHsKICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAieWVhciIpIHsKICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfQogIH0KICBjb25zdCBydGYgPSBuZXcgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQob3B0aW9ucz8ubG9jYWxlLCB7CiAgICBudW1lcmljOiAiYXV0byIsCiAgICAuLi5vcHRpb25zCiAgfSk7CiAgcmV0dXJuIHJ0Zi5mb3JtYXQodmFsdWUyLCB1bml0KTsKfQp2YXIgaW50bEZvcm1hdERpc3RhbmNlX2RlZmF1bHQ7CnZhciBpbml0X2ludGxGb3JtYXREaXN0YW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pbnRsRm9ybWF0RGlzdGFuY2UuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkhvdXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1pbnV0ZXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluU2Vjb25kcygpOwogICAgaW50bEZvcm1hdERpc3RhbmNlX2RlZmF1bHQgPSBpbnRsRm9ybWF0RGlzdGFuY2U7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNBZnRlci5qcwpmdW5jdGlvbiBpc0FmdGVyKGRhdGUsIGRhdGVUb0NvbXBhcmUpIHsKICByZXR1cm4gK3RvRGF0ZShkYXRlKSA+ICt0b0RhdGUoZGF0ZVRvQ29tcGFyZSk7Cn0KdmFyIGlzQWZ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfaXNBZnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0FmdGVyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0FmdGVyX2RlZmF1bHQgPSBpc0FmdGVyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzQmVmb3JlLmpzCmZ1bmN0aW9uIGlzQmVmb3JlKGRhdGUsIGRhdGVUb0NvbXBhcmUpIHsKICByZXR1cm4gK3RvRGF0ZShkYXRlKSA8ICt0b0RhdGUoZGF0ZVRvQ29tcGFyZSk7Cn0KdmFyIGlzQmVmb3JlX2RlZmF1bHQ7CnZhciBpbml0X2lzQmVmb3JlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzQmVmb3JlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0JlZm9yZV9kZWZhdWx0ID0gaXNCZWZvcmU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNFcXVhbC5qcwpmdW5jdGlvbiBpc0VxdWFsKGxlZnREYXRlLCByaWdodERhdGUpIHsKICByZXR1cm4gK3RvRGF0ZShsZWZ0RGF0ZSkgPT09ICt0b0RhdGUocmlnaHREYXRlKTsKfQp2YXIgaXNFcXVhbF9kZWZhdWx0Owp2YXIgaW5pdF9pc0VxdWFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRXF1YWwuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzRXF1YWxfZGVmYXVsdCA9IGlzRXF1YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNFeGlzdHMuanMKZnVuY3Rpb24gaXNFeGlzdHMoeWVhciwgbW9udGgsIGRheSkgewogIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5KTsKICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGggJiYgZGF0ZS5nZXREYXRlKCkgPT09IGRheTsKfQp2YXIgaXNFeGlzdHNfZGVmYXVsdDsKdmFyIGluaXRfaXNFeGlzdHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNFeGlzdHMuanMiKCkgewogICAgaXNFeGlzdHNfZGVmYXVsdCA9IGlzRXhpc3RzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRmlyc3REYXlPZk1vbnRoLmpzCmZ1bmN0aW9uIGlzRmlyc3REYXlPZk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXRlKCkgPT09IDE7Cn0KdmFyIGlzRmlyc3REYXlPZk1vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2lzRmlyc3REYXlPZk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRmlyc3REYXlPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0ZpcnN0RGF5T2ZNb250aF9kZWZhdWx0ID0gaXNGaXJzdERheU9mTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNGcmlkYXkuanMKZnVuY3Rpb24gaXNGcmlkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpID09PSA1Owp9CnZhciBpc0ZyaWRheV9kZWZhdWx0Owp2YXIgaW5pdF9pc0ZyaWRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0ZyaWRheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNGcmlkYXlfZGVmYXVsdCA9IGlzRnJpZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRnV0dXJlLmpzCmZ1bmN0aW9uIGlzRnV0dXJlKGRhdGUpIHsKICByZXR1cm4gK3RvRGF0ZShkYXRlKSA+IERhdGUubm93KCk7Cn0KdmFyIGlzRnV0dXJlX2RlZmF1bHQ7CnZhciBpbml0X2lzRnV0dXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRnV0dXJlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0Z1dHVyZV9kZWZhdWx0ID0gaXNGdXR1cmU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvdHJhbnNwb3NlLmpzCmZ1bmN0aW9uIHRyYW5zcG9zZShkYXRlLCBjb25zdHJ1Y3RvcikgewogIGNvbnN0IGRhdGVfID0gaXNDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikgPyBuZXcgY29uc3RydWN0b3IoMCkgOiBjb25zdHJ1Y3RGcm9tKGNvbnN0cnVjdG9yLCAwKTsKICBkYXRlXy5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpOwogIGRhdGVfLnNldEhvdXJzKAogICAgZGF0ZS5nZXRIb3VycygpLAogICAgZGF0ZS5nZXRNaW51dGVzKCksCiAgICBkYXRlLmdldFNlY29uZHMoKSwKICAgIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkKICApOwogIHJldHVybiBkYXRlXzsKfQpmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSB7CiAgcmV0dXJuIHR5cGVvZiBjb25zdHJ1Y3RvciA9PT0gImZ1bmN0aW9uIiAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU/LmNvbnN0cnVjdG9yID09PSBjb25zdHJ1Y3RvcjsKfQp2YXIgdHJhbnNwb3NlX2RlZmF1bHQ7CnZhciBpbml0X3RyYW5zcG9zZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy90cmFuc3Bvc2UuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICB0cmFuc3Bvc2VfZGVmYXVsdCA9IHRyYW5zcG9zZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL1NldHRlci5qcwp2YXIgVElNRVpPTkVfVU5JVF9QUklPUklUWSwgU2V0dGVyLCBWYWx1ZVNldHRlciwgRGF0ZVRpbWV6b25lU2V0dGVyOwp2YXIgaW5pdF9TZXR0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9TZXR0ZXIuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3RyYW5zcG9zZSgpOwogICAgVElNRVpPTkVfVU5JVF9QUklPUklUWSA9IDEwOwogICAgU2V0dGVyID0gY2xhc3MgewogICAgICBzdWJQcmlvcml0eSA9IDA7CiAgICAgIHZhbGlkYXRlKF91dGNEYXRlLCBfb3B0aW9ucykgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9OwogICAgVmFsdWVTZXR0ZXIgPSBjbGFzcyBleHRlbmRzIFNldHRlciB7CiAgICAgIGNvbnN0cnVjdG9yKHZhbHVlMiwgdmFsaWRhdGVWYWx1ZSwgc2V0VmFsdWUsIHByaW9yaXR5LCBzdWJQcmlvcml0eSkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgICAgICB0aGlzLnZhbGlkYXRlVmFsdWUgPSB2YWxpZGF0ZVZhbHVlOwogICAgICAgIHRoaXMuc2V0VmFsdWUgPSBzZXRWYWx1ZTsKICAgICAgICB0aGlzLnByaW9yaXR5ID0gcHJpb3JpdHk7CiAgICAgICAgaWYgKHN1YlByaW9yaXR5KSB7CiAgICAgICAgICB0aGlzLnN1YlByaW9yaXR5ID0gc3ViUHJpb3JpdHk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKGRhdGUsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVZhbHVlKGRhdGUsIHRoaXMudmFsdWUsIG9wdGlvbnMpOwogICAgICB9CiAgICAgIHNldChkYXRlLCBmbGFncywgb3B0aW9ucykgewogICAgICAgIHJldHVybiB0aGlzLnNldFZhbHVlKGRhdGUsIGZsYWdzLCB0aGlzLnZhbHVlLCBvcHRpb25zKTsKICAgICAgfQogICAgfTsKICAgIERhdGVUaW1lem9uZVNldHRlciA9IGNsYXNzIGV4dGVuZHMgU2V0dGVyIHsKICAgICAgcHJpb3JpdHkgPSBUSU1FWk9ORV9VTklUX1BSSU9SSVRZOwogICAgICBzdWJQcmlvcml0eSA9IC0xOwogICAgICBjb25zdHJ1Y3Rvcihjb250ZXh0MiwgcmVmZXJlbmNlKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0MiB8fCAoKGRhdGUpID0+IGNvbnN0cnVjdEZyb20ocmVmZXJlbmNlLCBkYXRlKSk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzKSB7CiAgICAgICAgaWYgKGZsYWdzLnRpbWVzdGFtcElzU2V0KSByZXR1cm4gZGF0ZTsKICAgICAgICByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlLCB0cmFuc3Bvc2UoZGF0ZSwgdGhpcy5jb250ZXh0KSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9QYXJzZXIuanMKdmFyIFBhcnNlcjsKdmFyIGluaXRfUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvUGFyc2VyLmpzIigpIHsKICAgIGluaXRfU2V0dGVyKCk7CiAgICBQYXJzZXIgPSBjbGFzcyB7CiAgICAgIHJ1bihkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyLCBvcHRpb25zKTsKICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiB7CiAgICAgICAgICBzZXR0ZXI6IG5ldyBWYWx1ZVNldHRlcigKICAgICAgICAgICAgcmVzdWx0LnZhbHVlLAogICAgICAgICAgICB0aGlzLnZhbGlkYXRlLAogICAgICAgICAgICB0aGlzLnNldCwKICAgICAgICAgICAgdGhpcy5wcmlvcml0eSwKICAgICAgICAgICAgdGhpcy5zdWJQcmlvcml0eQogICAgICAgICAgKSwKICAgICAgICAgIHJlc3Q6IHJlc3VsdC5yZXN0CiAgICAgICAgfTsKICAgICAgfQogICAgICB2YWxpZGF0ZShfdXRjRGF0ZSwgX3ZhbHVlLCBfb3B0aW9ucykgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9FcmFQYXJzZXIuanMKdmFyIEVyYVBhcnNlcjsKdmFyIGluaXRfRXJhUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9FcmFQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIEVyYVBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxNDA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBBRCwgQkMKICAgICAgICAgIGNhc2UgIkciOgogICAgICAgICAgY2FzZSAiR0ciOgogICAgICAgICAgY2FzZSAiR0dHIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5lcmEoZGF0ZVN0cmluZywgeyB3aWR0aDogImFiYnJldmlhdGVkIiB9KSB8fCBtYXRjaDIuZXJhKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciIH0pOwogICAgICAgICAgLy8gQSwgQgogICAgICAgICAgY2FzZSAiR0dHR0ciOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmVyYShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiB9KTsKICAgICAgICAgIC8vIEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0CiAgICAgICAgICBjYXNlICJHR0dHIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZXJhKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJ3aWRlIiB9KSB8fCBtYXRjaDIuZXJhKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJhYmJyZXZpYXRlZCIgfSkgfHwgbWF0Y2gyLmVyYShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBmbGFncy5lcmEgPSB2YWx1ZTI7CiAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih2YWx1ZTIsIDAsIDEpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJSIiwgInUiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvY29uc3RhbnRzLmpzCnZhciBudW1lcmljUGF0dGVybnMsIHRpbWV6b25lUGF0dGVybnM7CnZhciBpbml0X2NvbnN0YW50czIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9jb25zdGFudHMuanMiKCkgewogICAgbnVtZXJpY1BhdHRlcm5zID0gewogICAgICBtb250aDogL14oMVswLTJdfDA/XGQpLywKICAgICAgLy8gMCB0byAxMgogICAgICBkYXRlOiAvXigzWzAtMV18WzAtMl0/XGQpLywKICAgICAgLy8gMCB0byAzMQogICAgICBkYXlPZlllYXI6IC9eKDM2WzAtNl18M1swLTVdXGR8WzAtMl0/XGQ/XGQpLywKICAgICAgLy8gMCB0byAzNjYKICAgICAgd2VlazogL14oNVswLTNdfFswLTRdP1xkKS8sCiAgICAgIC8vIDAgdG8gNTMKICAgICAgaG91cjIzaDogL14oMlswLTNdfFswLTFdP1xkKS8sCiAgICAgIC8vIDAgdG8gMjMKICAgICAgaG91cjI0aDogL14oMlswLTRdfFswLTFdP1xkKS8sCiAgICAgIC8vIDAgdG8gMjQKICAgICAgaG91cjExaDogL14oMVswLTFdfDA/XGQpLywKICAgICAgLy8gMCB0byAxMQogICAgICBob3VyMTJoOiAvXigxWzAtMl18MD9cZCkvLAogICAgICAvLyAwIHRvIDEyCiAgICAgIG1pbnV0ZTogL15bMC01XT9cZC8sCiAgICAgIC8vIDAgdG8gNTkKICAgICAgc2Vjb25kOiAvXlswLTVdP1xkLywKICAgICAgLy8gMCB0byA1OQogICAgICBzaW5nbGVEaWdpdDogL15cZC8sCiAgICAgIC8vIDAgdG8gOQogICAgICB0d29EaWdpdHM6IC9eXGR7MSwyfS8sCiAgICAgIC8vIDAgdG8gOTkKICAgICAgdGhyZWVEaWdpdHM6IC9eXGR7MSwzfS8sCiAgICAgIC8vIDAgdG8gOTk5CiAgICAgIGZvdXJEaWdpdHM6IC9eXGR7MSw0fS8sCiAgICAgIC8vIDAgdG8gOTk5OQogICAgICBhbnlEaWdpdHNTaWduZWQ6IC9eLT9cZCsvLAogICAgICBzaW5nbGVEaWdpdFNpZ25lZDogL14tP1xkLywKICAgICAgLy8gMCB0byA5LCAtMCB0byAtOQogICAgICB0d29EaWdpdHNTaWduZWQ6IC9eLT9cZHsxLDJ9LywKICAgICAgLy8gMCB0byA5OSwgLTAgdG8gLTk5CiAgICAgIHRocmVlRGlnaXRzU2lnbmVkOiAvXi0/XGR7MSwzfS8sCiAgICAgIC8vIDAgdG8gOTk5LCAtMCB0byAtOTk5CiAgICAgIGZvdXJEaWdpdHNTaWduZWQ6IC9eLT9cZHsxLDR9LwogICAgICAvLyAwIHRvIDk5OTksIC0wIHRvIC05OTk5CiAgICB9OwogICAgdGltZXpvbmVQYXR0ZXJucyA9IHsKICAgICAgYmFzaWNPcHRpb25hbE1pbnV0ZXM6IC9eKFsrLV0pKFxkezJ9KShcZHsyfSk/fFovLAogICAgICBiYXNpYzogL14oWystXSkoXGR7Mn0pKFxkezJ9KXxaLywKICAgICAgYmFzaWNPcHRpb25hbFNlY29uZHM6IC9eKFsrLV0pKFxkezJ9KShcZHsyfSkoKFxkezJ9KSk/fFovLAogICAgICBleHRlbmRlZDogL14oWystXSkoXGR7Mn0pOihcZHsyfSl8Wi8sCiAgICAgIGV4dGVuZGVkT3B0aW9uYWxTZWNvbmRzOiAvXihbKy1dKShcZHsyfSk6KFxkezJ9KSg6KFxkezJ9KSk/fFovCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvdXRpbHMuanMKZnVuY3Rpb24gbWFwVmFsdWUocGFyc2VGblJlc3VsdCwgbWFwRm4pIHsKICBpZiAoIXBhcnNlRm5SZXN1bHQpIHsKICAgIHJldHVybiBwYXJzZUZuUmVzdWx0OwogIH0KICByZXR1cm4gewogICAgdmFsdWU6IG1hcEZuKHBhcnNlRm5SZXN1bHQudmFsdWUpLAogICAgcmVzdDogcGFyc2VGblJlc3VsdC5yZXN0CiAgfTsKfQpmdW5jdGlvbiBwYXJzZU51bWVyaWNQYXR0ZXJuKHBhdHRlcm4sIGRhdGVTdHJpbmcpIHsKICBjb25zdCBtYXRjaFJlc3VsdCA9IGRhdGVTdHJpbmcubWF0Y2gocGF0dGVybik7CiAgaWYgKCFtYXRjaFJlc3VsdCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHJldHVybiB7CiAgICB2YWx1ZTogcGFyc2VJbnQobWF0Y2hSZXN1bHRbMF0sIDEwKSwKICAgIHJlc3Q6IGRhdGVTdHJpbmcuc2xpY2UobWF0Y2hSZXN1bHRbMF0ubGVuZ3RoKQogIH07Cn0KZnVuY3Rpb24gcGFyc2VUaW1lem9uZVBhdHRlcm4ocGF0dGVybiwgZGF0ZVN0cmluZykgewogIGNvbnN0IG1hdGNoUmVzdWx0ID0gZGF0ZVN0cmluZy5tYXRjaChwYXR0ZXJuKTsKICBpZiAoIW1hdGNoUmVzdWx0KSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgaWYgKG1hdGNoUmVzdWx0WzBdID09PSAiWiIpIHsKICAgIHJldHVybiB7CiAgICAgIHZhbHVlOiAwLAogICAgICByZXN0OiBkYXRlU3RyaW5nLnNsaWNlKDEpCiAgICB9OwogIH0KICBjb25zdCBzaWduID0gbWF0Y2hSZXN1bHRbMV0gPT09ICIrIiA/IDEgOiAtMTsKICBjb25zdCBob3VycyA9IG1hdGNoUmVzdWx0WzJdID8gcGFyc2VJbnQobWF0Y2hSZXN1bHRbMl0sIDEwKSA6IDA7CiAgY29uc3QgbWludXRlcyA9IG1hdGNoUmVzdWx0WzNdID8gcGFyc2VJbnQobWF0Y2hSZXN1bHRbM10sIDEwKSA6IDA7CiAgY29uc3Qgc2Vjb25kcyA9IG1hdGNoUmVzdWx0WzVdID8gcGFyc2VJbnQobWF0Y2hSZXN1bHRbNV0sIDEwKSA6IDA7CiAgcmV0dXJuIHsKICAgIHZhbHVlOiBzaWduICogKGhvdXJzICogbWlsbGlzZWNvbmRzSW5Ib3VyICsgbWludXRlcyAqIG1pbGxpc2Vjb25kc0luTWludXRlICsgc2Vjb25kcyAqIG1pbGxpc2Vjb25kc0luU2Vjb25kKSwKICAgIHJlc3Q6IGRhdGVTdHJpbmcuc2xpY2UobWF0Y2hSZXN1bHRbMF0ubGVuZ3RoKQogIH07Cn0KZnVuY3Rpb24gcGFyc2VBbnlEaWdpdHNTaWduZWQoZGF0ZVN0cmluZykgewogIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5hbnlEaWdpdHNTaWduZWQsIGRhdGVTdHJpbmcpOwp9CmZ1bmN0aW9uIHBhcnNlTkRpZ2l0cyhuMTMsIGRhdGVTdHJpbmcpIHsKICBzd2l0Y2ggKG4xMykgewogICAgY2FzZSAxOgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuc2luZ2xlRGlnaXQsIGRhdGVTdHJpbmcpOwogICAgY2FzZSAyOgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMudHdvRGlnaXRzLCBkYXRlU3RyaW5nKTsKICAgIGNhc2UgMzoKICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLnRocmVlRGlnaXRzLCBkYXRlU3RyaW5nKTsKICAgIGNhc2UgNDoKICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLmZvdXJEaWdpdHMsIGRhdGVTdHJpbmcpOwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obmV3IFJlZ0V4cCgiXlxcZHsxLCIgKyBuMTMgKyAifSIpLCBkYXRlU3RyaW5nKTsKICB9Cn0KZnVuY3Rpb24gcGFyc2VORGlnaXRzU2lnbmVkKG4xMywgZGF0ZVN0cmluZykgewogIHN3aXRjaCAobjEzKSB7CiAgICBjYXNlIDE6CiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5zaW5nbGVEaWdpdFNpZ25lZCwgZGF0ZVN0cmluZyk7CiAgICBjYXNlIDI6CiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy50d29EaWdpdHNTaWduZWQsIGRhdGVTdHJpbmcpOwogICAgY2FzZSAzOgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMudGhyZWVEaWdpdHNTaWduZWQsIGRhdGVTdHJpbmcpOwogICAgY2FzZSA0OgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuZm91ckRpZ2l0c1NpZ25lZCwgZGF0ZVN0cmluZyk7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihuZXcgUmVnRXhwKCJeLT9cXGR7MSwiICsgbjEzICsgIn0iKSwgZGF0ZVN0cmluZyk7CiAgfQp9CmZ1bmN0aW9uIGRheVBlcmlvZEVudW1Ub0hvdXJzKGRheVBlcmlvZCkgewogIHN3aXRjaCAoZGF5UGVyaW9kKSB7CiAgICBjYXNlICJtb3JuaW5nIjoKICAgICAgcmV0dXJuIDQ7CiAgICBjYXNlICJldmVuaW5nIjoKICAgICAgcmV0dXJuIDE3OwogICAgY2FzZSAicG0iOgogICAgY2FzZSAibm9vbiI6CiAgICBjYXNlICJhZnRlcm5vb24iOgogICAgICByZXR1cm4gMTI7CiAgICBjYXNlICJhbSI6CiAgICBjYXNlICJtaWRuaWdodCI6CiAgICBjYXNlICJuaWdodCI6CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gMDsKICB9Cn0KZnVuY3Rpb24gbm9ybWFsaXplVHdvRGlnaXRZZWFyKHR3b0RpZ2l0WWVhciwgY3VycmVudFllYXIpIHsKICBjb25zdCBpc0NvbW1vbkVyYSA9IGN1cnJlbnRZZWFyID4gMDsKICBjb25zdCBhYnNDdXJyZW50WWVhciA9IGlzQ29tbW9uRXJhID8gY3VycmVudFllYXIgOiAxIC0gY3VycmVudFllYXI7CiAgbGV0IHJlc3VsdDsKICBpZiAoYWJzQ3VycmVudFllYXIgPD0gNTApIHsKICAgIHJlc3VsdCA9IHR3b0RpZ2l0WWVhciB8fCAxMDA7CiAgfSBlbHNlIHsKICAgIGNvbnN0IHJhbmdlRW5kID0gYWJzQ3VycmVudFllYXIgKyA1MDsKICAgIGNvbnN0IHJhbmdlRW5kQ2VudHVyeSA9IE1hdGgudHJ1bmMocmFuZ2VFbmQgLyAxMDApICogMTAwOwogICAgY29uc3QgaXNQcmV2aW91c0NlbnR1cnkgPSB0d29EaWdpdFllYXIgPj0gcmFuZ2VFbmQgJSAxMDA7CiAgICByZXN1bHQgPSB0d29EaWdpdFllYXIgKyByYW5nZUVuZENlbnR1cnkgLSAoaXNQcmV2aW91c0NlbnR1cnkgPyAxMDAgOiAwKTsKICB9CiAgcmV0dXJuIGlzQ29tbW9uRXJhID8gcmVzdWx0IDogMSAtIHJlc3VsdDsKfQpmdW5jdGlvbiBpc0xlYXBZZWFySW5kZXgoeWVhcikgewogIHJldHVybiB5ZWFyICUgNDAwID09PSAwIHx8IHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDA7Cn0KdmFyIGluaXRfdXRpbHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi91dGlscy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1llYXJQYXJzZXIuanMKdmFyIFllYXJQYXJzZXI7CnZhciBpbml0X1llYXJQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1llYXJQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFllYXJQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTMwOwogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbIlkiLCAiUiIsICJ1IiwgInciLCAiSSIsICJpIiwgImUiLCAiYyIsICJ0IiwgIlQiXTsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAoeWVhcikgPT4gKHsKICAgICAgICAgIHllYXIsCiAgICAgICAgICBpc1R3b0RpZ2l0WWVhcjogdG9rZW4gPT09ICJ5eSIKICAgICAgICB9KTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJ5IjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyg0LCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgICBjYXNlICJ5byI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB1bml0OiAieWVhciIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUocGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMi5pc1R3b0RpZ2l0WWVhciB8fCB2YWx1ZTIueWVhciA+IDA7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBjb25zdCBjdXJyZW50WWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICBpZiAodmFsdWUyLmlzVHdvRGlnaXRZZWFyKSB7CiAgICAgICAgICBjb25zdCBub3JtYWxpemVkVHdvRGlnaXRZZWFyID0gbm9ybWFsaXplVHdvRGlnaXRZZWFyKAogICAgICAgICAgICB2YWx1ZTIueWVhciwKICAgICAgICAgICAgY3VycmVudFllYXIKICAgICAgICAgICk7CiAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKG5vcm1hbGl6ZWRUd29EaWdpdFllYXIsIDAsIDEpOwogICAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICAgIHJldHVybiBkYXRlOwogICAgICAgIH0KICAgICAgICBjb25zdCB5ZWFyID0gISgiZXJhIiBpbiBmbGFncykgfHwgZmxhZ3MuZXJhID09PSAxID8gdmFsdWUyLnllYXIgOiAxIC0gdmFsdWUyLnllYXI7CiAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyLCAwLCAxKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Mb2NhbFdlZWtZZWFyUGFyc2VyLmpzCnZhciBMb2NhbFdlZWtZZWFyUGFyc2VyOwp2YXIgaW5pdF9Mb2NhbFdlZWtZZWFyUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Mb2NhbFdlZWtZZWFyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfZ2V0V2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBMb2NhbFdlZWtZZWFyUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEzMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAoeWVhcikgPT4gKHsKICAgICAgICAgIHllYXIsCiAgICAgICAgICBpc1R3b0RpZ2l0WWVhcjogdG9rZW4gPT09ICJZWSIKICAgICAgICB9KTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJZIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyg0LCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgICBjYXNlICJZbyI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB1bml0OiAieWVhciIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUocGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMi5pc1R3b0RpZ2l0WWVhciB8fCB2YWx1ZTIueWVhciA+IDA7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZTIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBjdXJyZW50WWVhciA9IGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogICAgICAgIGlmICh2YWx1ZTIuaXNUd29EaWdpdFllYXIpIHsKICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUd29EaWdpdFllYXIgPSBub3JtYWxpemVUd29EaWdpdFllYXIoCiAgICAgICAgICAgIHZhbHVlMi55ZWFyLAogICAgICAgICAgICBjdXJyZW50WWVhcgogICAgICAgICAgKTsKICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoCiAgICAgICAgICAgIG5vcm1hbGl6ZWRUd29EaWdpdFllYXIsCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlCiAgICAgICAgICApOwogICAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICAgIHJldHVybiBzdGFydE9mV2VlayhkYXRlLCBvcHRpb25zKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgeWVhciA9ICEoImVyYSIgaW4gZmxhZ3MpIHx8IGZsYWdzLmVyYSA9PT0gMSA/IHZhbHVlMi55ZWFyIDogMSAtIHZhbHVlMi55ZWFyOwogICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeWVhciwgMCwgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIHN0YXJ0T2ZXZWVrKGRhdGUsIG9wdGlvbnMpOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAieSIsCiAgICAgICAgIlIiLAogICAgICAgICJ1IiwKICAgICAgICAiUSIsCiAgICAgICAgInEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtZZWFyUGFyc2VyLmpzCnZhciBJU09XZWVrWWVhclBhcnNlcjsKdmFyIGluaXRfSVNPV2Vla1llYXJQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtZZWFyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIElTT1dlZWtZZWFyUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEzMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4pIHsKICAgICAgICBpZiAodG9rZW4gPT09ICJSIikgewogICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0c1NpZ25lZCg0LCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0c1NpZ25lZCh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGNvbnN0IGZpcnN0V2Vla09mWWVhciA9IGNvbnN0cnVjdEZyb20oZGF0ZSwgMCk7CiAgICAgICAgZmlyc3RXZWVrT2ZZZWFyLnNldEZ1bGxZZWFyKHZhbHVlMiwgMCwgNCk7CiAgICAgICAgZmlyc3RXZWVrT2ZZZWFyLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBzdGFydE9mSVNPV2VlayhmaXJzdFdlZWtPZlllYXIpOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiRyIsCiAgICAgICAgInkiLAogICAgICAgICJZIiwKICAgICAgICAidSIsCiAgICAgICAgIlEiLAogICAgICAgICJxIiwKICAgICAgICAiTSIsCiAgICAgICAgIkwiLAogICAgICAgICJ3IiwKICAgICAgICAiZCIsCiAgICAgICAgIkQiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRXh0ZW5kZWRZZWFyUGFyc2VyLmpzCnZhciBFeHRlbmRlZFllYXJQYXJzZXI7CnZhciBpbml0X0V4dGVuZGVkWWVhclBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRXh0ZW5kZWRZZWFyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBFeHRlbmRlZFllYXJQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTMwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbikgewogICAgICAgIGlmICh0b2tlbiA9PT0gInUiKSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzU2lnbmVkKDQsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzU2lnbmVkKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih2YWx1ZTIsIDAsIDEpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJHIiwgInkiLCAiWSIsICJSIiwgInciLCAiSSIsICJpIiwgImUiLCAiYyIsICJ0IiwgIlQiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1F1YXJ0ZXJQYXJzZXIuanMKdmFyIFF1YXJ0ZXJQYXJzZXI7CnZhciBpbml0X1F1YXJ0ZXJQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1F1YXJ0ZXJQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFF1YXJ0ZXJQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTIwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMSwgMiwgMywgNAogICAgICAgICAgY2FzZSAiUSI6CiAgICAgICAgICBjYXNlICJRUSI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aAogICAgICAgICAgY2FzZSAiUW8iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiAicXVhcnRlciIgfSk7CiAgICAgICAgICAvLyBRMSwgUTIsIFEzLCBRNAogICAgICAgICAgY2FzZSAiUVFRIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLnF1YXJ0ZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbCkKICAgICAgICAgIGNhc2UgIlFRUVFRIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4KICAgICAgICAgIGNhc2UgIlFRUVEiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAxICYmIHZhbHVlMiA8PSA0OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0TW9udGgoKHZhbHVlMiAtIDEpICogMywgMSk7CiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbCiAgICAgICAgIlkiLAogICAgICAgICJSIiwKICAgICAgICAicSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIuanMKdmFyIFN0YW5kQWxvbmVRdWFydGVyUGFyc2VyOwp2YXIgaW5pdF9TdGFuZEFsb25lUXVhcnRlclBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFN0YW5kQWxvbmVRdWFydGVyUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEyMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIDEsIDIsIDMsIDQKICAgICAgICAgIGNhc2UgInEiOgogICAgICAgICAgY2FzZSAicXEiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGgKICAgICAgICAgIGNhc2UgInFvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogInF1YXJ0ZXIiIH0pOwogICAgICAgICAgLy8gUTEsIFEyLCBRMywgUTQKICAgICAgICAgIGNhc2UgInFxcSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpCiAgICAgICAgICBjYXNlICJxcXFxcSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uCiAgICAgICAgICBjYXNlICJxcXFxIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLnF1YXJ0ZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gNDsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldE1vbnRoKCh2YWx1ZTIgLSAxKSAqIDMsIDEpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJZIiwKICAgICAgICAiUiIsCiAgICAgICAgIlEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgInciLAogICAgICAgICJJIiwKICAgICAgICAiZCIsCiAgICAgICAgIkQiLAogICAgICAgICJpIiwKICAgICAgICAiZSIsCiAgICAgICAgImMiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL01vbnRoUGFyc2VyLmpzCnZhciBNb250aFBhcnNlcjsKdmFyIGluaXRfTW9udGhQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL01vbnRoUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIE1vbnRoUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbCiAgICAgICAgIlkiLAogICAgICAgICJSIiwKICAgICAgICAicSIsCiAgICAgICAgIlEiLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgIkkiLAogICAgICAgICJEIiwKICAgICAgICAiaSIsCiAgICAgICAgImUiLAogICAgICAgICJjIiwKICAgICAgICAidCIsCiAgICAgICAgIlQiCiAgICAgIF07CiAgICAgIHByaW9yaXR5ID0gMTEwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgY29uc3QgdmFsdWVDYWxsYmFjayA9ICh2YWx1ZTIpID0+IHZhbHVlMiAtIDE7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMSwgMiwgLi4uLCAxMgogICAgICAgICAgY2FzZSAiTSI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5tb250aCwgZGF0ZVN0cmluZyksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gMDEsIDAyLCAuLi4sIDEyCiAgICAgICAgICBjYXNlICJNTSI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHMoMiwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spOwogICAgICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aAogICAgICAgICAgY2FzZSAiTW8iOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUoCiAgICAgICAgICAgICAgbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgdW5pdDogIm1vbnRoIgogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIHZhbHVlQ2FsbGJhY2sKICAgICAgICAgICAgKTsKICAgICAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlYwogICAgICAgICAgY2FzZSAiTU1NIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gSiwgRiwgLi4uLCBECiAgICAgICAgICBjYXNlICJNTU1NTSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIubW9udGgoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlcgogICAgICAgICAgY2FzZSAiTU1NTSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJ3aWRlIiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pIHx8IG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSAxMTsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldE1vbnRoKHZhbHVlMiwgMSk7CiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZU1vbnRoUGFyc2VyLmpzCnZhciBTdGFuZEFsb25lTW9udGhQYXJzZXI7CnZhciBpbml0X1N0YW5kQWxvbmVNb250aFBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZU1vbnRoUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFN0YW5kQWxvbmVNb250aFBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxMTA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBjb25zdCB2YWx1ZUNhbGxiYWNrID0gKHZhbHVlMikgPT4gdmFsdWUyIC0gMTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyAxLCAyLCAuLi4sIDEyCiAgICAgICAgICBjYXNlICJMIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLm1vbnRoLCBkYXRlU3RyaW5nKSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICAvLyAwMSwgMDIsIC4uLiwgMTIKICAgICAgICAgIGNhc2UgIkxMIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cygyLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoCiAgICAgICAgICBjYXNlICJMbyI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB1bml0OiAibW9udGgiCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjCiAgICAgICAgICBjYXNlICJMTEwiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSk7CiAgICAgICAgICAvLyBKLCBGLCAuLi4sIEQKICAgICAgICAgIGNhc2UgIkxMTExMIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyCiAgICAgICAgICBjYXNlICJMTExMIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIubW9udGgoZGF0ZVN0cmluZywgeyB3aWR0aDogIndpZGUiLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSkgfHwgbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDAgJiYgdmFsdWUyIDw9IDExOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0TW9udGgodmFsdWUyLCAxKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiWSIsCiAgICAgICAgIlIiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJ3IiwKICAgICAgICAiSSIsCiAgICAgICAgIkQiLAogICAgICAgICJpIiwKICAgICAgICAiZSIsCiAgICAgICAgImMiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0V2Vlay5qcwpmdW5jdGlvbiBzZXRXZWVrKGRhdGUsIHdlZWssIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGlmZiA9IGdldFdlZWsoZGF0ZV8sIG9wdGlvbnMpIC0gd2VlazsKICBkYXRlXy5zZXREYXRlKGRhdGVfLmdldERhdGUoKSAtIGRpZmYgKiA3KTsKICByZXR1cm4gdG9EYXRlKGRhdGVfLCBvcHRpb25zPy5pbik7Cn0KdmFyIHNldFdlZWtfZGVmYXVsdDsKdmFyIGluaXRfc2V0V2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRXZWVrLmpzIigpIHsKICAgIGluaXRfZ2V0V2VlaygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldFdlZWtfZGVmYXVsdCA9IHNldFdlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsV2Vla1BhcnNlci5qcwp2YXIgTG9jYWxXZWVrUGFyc2VyOwp2YXIgaW5pdF9Mb2NhbFdlZWtQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsV2Vla1BhcnNlci5qcyIoKSB7CiAgICBpbml0X3NldFdlZWsoKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIExvY2FsV2Vla1BhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxMDA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJ3IjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLndlZWssIGRhdGVTdHJpbmcpOwogICAgICAgICAgY2FzZSAid28iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiAid2VlayIgfSk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IDUzOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiBzdGFydE9mV2VlayhzZXRXZWVrKGRhdGUsIHZhbHVlMiwgb3B0aW9ucyksIG9wdGlvbnMpOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAieSIsCiAgICAgICAgIlIiLAogICAgICAgICJ1IiwKICAgICAgICAicSIsCiAgICAgICAgIlEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SVNPV2Vlay5qcwpmdW5jdGlvbiBzZXRJU09XZWVrKGRhdGUsIHdlZWssIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGlmZiA9IGdldElTT1dlZWsoX2RhdGUsIG9wdGlvbnMpIC0gd2VlazsKICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSAtIGRpZmYgKiA3KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHNldElTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfc2V0SVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRJU09XZWVrLmpzIigpIHsKICAgIGluaXRfZ2V0SVNPV2VlaygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldElTT1dlZWtfZGVmYXVsdCA9IHNldElTT1dlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtQYXJzZXIuanMKdmFyIElTT1dlZWtQYXJzZXI7CnZhciBpbml0X0lTT1dlZWtQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtQYXJzZXIuanMiKCkgewogICAgaW5pdF9zZXRJU09XZWVrKCk7CiAgICBpbml0X3N0YXJ0T2ZJU09XZWVrKCk7CiAgICBpbml0X2NvbnN0YW50czIoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBJU09XZWVrUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEwMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgIkkiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMud2VlaywgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJJbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJ3ZWVrIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gNTM7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHN0YXJ0T2ZJU09XZWVrKHNldElTT1dlZWsoZGF0ZSwgdmFsdWUyKSk7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJ5IiwKICAgICAgICAiWSIsCiAgICAgICAgInUiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgImQiLAogICAgICAgICJEIiwKICAgICAgICAiZSIsCiAgICAgICAgImMiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0RhdGVQYXJzZXIuanMKdmFyIERBWVNfSU5fTU9OVEgsIERBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSLCBEYXRlUGFyc2VyOwp2YXIgaW5pdF9EYXRlUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9EYXRlUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIERBWVNfSU5fTU9OVEggPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07CiAgICBEQVlTX0lOX01PTlRIX0xFQVBfWUVBUiA9IFsKICAgICAgMzEsCiAgICAgIDI5LAogICAgICAzMSwKICAgICAgMzAsCiAgICAgIDMxLAogICAgICAzMCwKICAgICAgMzEsCiAgICAgIDMxLAogICAgICAzMCwKICAgICAgMzEsCiAgICAgIDMwLAogICAgICAzMQogICAgXTsKICAgIERhdGVQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gOTA7CiAgICAgIHN1YlByaW9yaXR5ID0gMTsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImQiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuZGF0ZSwgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJkbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJkYXRlIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICBjb25zdCBpc0xlYXBZZWFyMiA9IGlzTGVhcFllYXJJbmRleCh5ZWFyKTsKICAgICAgICBjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTsKICAgICAgICBpZiAoaXNMZWFwWWVhcjIpIHsKICAgICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gREFZU19JTl9NT05USF9MRUFQX1lFQVJbbW9udGhdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IERBWVNfSU5fTU9OVEhbbW9udGhdOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldERhdGUodmFsdWUyKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiWSIsCiAgICAgICAgIlIiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgInciLAogICAgICAgICJJIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5T2ZZZWFyUGFyc2VyLmpzCnZhciBEYXlPZlllYXJQYXJzZXI7CnZhciBpbml0X0RheU9mWWVhclBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5T2ZZZWFyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIERheU9mWWVhclBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA5MDsKICAgICAgc3VicHJpb3JpdHkgPSAxOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiRCI6CiAgICAgICAgICBjYXNlICJERCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5kYXlPZlllYXIsIGRhdGVTdHJpbmcpOwogICAgICAgICAgY2FzZSAiRG8iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiAiZGF0ZSIgfSk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKGRhdGUsIHZhbHVlMikgewogICAgICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7CiAgICAgICAgY29uc3QgaXNMZWFwWWVhcjIgPSBpc0xlYXBZZWFySW5kZXgoeWVhcik7CiAgICAgICAgaWYgKGlzTGVhcFllYXIyKSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IDM2NjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAxICYmIHZhbHVlMiA8PSAzNjU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0TW9udGgoMCwgdmFsdWUyKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiWSIsCiAgICAgICAgIlIiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRSIsCiAgICAgICAgImkiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXREYXkuanMKZnVuY3Rpb24gc2V0RGF5KGRhdGUsIGRheSwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3Qgd2Vla1N0YXJ0c09uID0gb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IDA7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGN1cnJlbnREYXkgPSBkYXRlXy5nZXREYXkoKTsKICBjb25zdCByZW1haW5kZXIgPSBkYXkgJSA3OwogIGNvbnN0IGRheUluZGV4ID0gKHJlbWFpbmRlciArIDcpICUgNzsKICBjb25zdCBkZWx0YSA9IDcgLSB3ZWVrU3RhcnRzT247CiAgY29uc3QgZGlmZiA9IGRheSA8IDAgfHwgZGF5ID4gNiA/IGRheSAtIChjdXJyZW50RGF5ICsgZGVsdGEpICUgNyA6IChkYXlJbmRleCArIGRlbHRhKSAlIDcgLSAoY3VycmVudERheSArIGRlbHRhKSAlIDc7CiAgcmV0dXJuIGFkZERheXMoZGF0ZV8sIGRpZmYsIG9wdGlvbnMpOwp9CnZhciBzZXREYXlfZGVmYXVsdDsKdmFyIGluaXRfc2V0RGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERheS5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X2FkZERheXMoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXREYXlfZGVmYXVsdCA9IHNldERheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5UGFyc2VyLmpzCnZhciBEYXlQYXJzZXI7CnZhciBpbml0X0RheVBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5UGFyc2VyLmpzIigpIHsKICAgIGluaXRfc2V0RGF5KCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgRGF5UGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDkwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gVHVlCiAgICAgICAgICBjYXNlICJFIjoKICAgICAgICAgIGNhc2UgIkVFIjoKICAgICAgICAgIGNhc2UgIkVFRSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gVAogICAgICAgICAgY2FzZSAiRUVFRUUiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJFRUVFRUUiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gVHVlc2RheQogICAgICAgICAgY2FzZSAiRUVFRSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAid2lkZSIsIGNvbnRleHQ6ICJmb3JtYXR0aW5nIiB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSA2OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMiwgb3B0aW9ucykgewogICAgICAgIGRhdGUgPSBzZXREYXkoZGF0ZSwgdmFsdWUyLCBvcHRpb25zKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsiRCIsICJpIiwgImUiLCAiYyIsICJ0IiwgIlQiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsRGF5UGFyc2VyLmpzCnZhciBMb2NhbERheVBhcnNlcjsKdmFyIGluaXRfTG9jYWxEYXlQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsRGF5UGFyc2VyLmpzIigpIHsKICAgIGluaXRfc2V0RGF5KCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgTG9jYWxEYXlQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gOTA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCB2YWx1ZUNhbGxiYWNrID0gKHZhbHVlMikgPT4gewogICAgICAgICAgY29uc3Qgd2hvbGVXZWVrRGF5cyA9IE1hdGguZmxvb3IoKHZhbHVlMiAtIDEpIC8gNykgKiA3OwogICAgICAgICAgcmV0dXJuICh2YWx1ZTIgKyBvcHRpb25zLndlZWtTdGFydHNPbiArIDYpICUgNyArIHdob2xlV2Vla0RheXM7CiAgICAgICAgfTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyAzCiAgICAgICAgICBjYXNlICJlIjoKICAgICAgICAgIGNhc2UgImVlIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpLCB2YWx1ZUNhbGxiYWNrKTsKICAgICAgICAgIC8vIDNyZAogICAgICAgICAgY2FzZSAiZW8iOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUoCiAgICAgICAgICAgICAgbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgdW5pdDogImRheSIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICAvLyBUdWUKICAgICAgICAgIGNhc2UgImVlZSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gVAogICAgICAgICAgY2FzZSAiZWVlZWUiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJlZWVlZWUiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gVHVlc2RheQogICAgICAgICAgY2FzZSAiZWVlZSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAid2lkZSIsIGNvbnRleHQ6ICJmb3JtYXR0aW5nIiB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSA2OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMiwgb3B0aW9ucykgewogICAgICAgIGRhdGUgPSBzZXREYXkoZGF0ZSwgdmFsdWUyLCBvcHRpb25zKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAieSIsCiAgICAgICAgIlIiLAogICAgICAgICJ1IiwKICAgICAgICAicSIsCiAgICAgICAgIlEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgIkUiLAogICAgICAgICJpIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyLmpzCnZhciBTdGFuZEFsb25lTG9jYWxEYXlQYXJzZXI7CnZhciBpbml0X1N0YW5kQWxvbmVMb2NhbERheVBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyLmpzIigpIHsKICAgIGluaXRfc2V0RGF5KCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDkwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgdmFsdWVDYWxsYmFjayA9ICh2YWx1ZTIpID0+IHsKICAgICAgICAgIGNvbnN0IHdob2xlV2Vla0RheXMgPSBNYXRoLmZsb29yKCh2YWx1ZTIgLSAxKSAvIDcpICogNzsKICAgICAgICAgIHJldHVybiAodmFsdWUyICsgb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA2KSAlIDcgKyB3aG9sZVdlZWtEYXlzOwogICAgICAgIH07CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMwogICAgICAgICAgY2FzZSAiYyI6CiAgICAgICAgICBjYXNlICJjYyI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgICAvLyAzcmQKICAgICAgICAgIGNhc2UgImNvIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHVuaXQ6ICJkYXkiCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gVHVlCiAgICAgICAgICBjYXNlICJjY2MiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogInNob3J0IiwgY29udGV4dDogInN0YW5kYWxvbmUiIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogIm5hcnJvdyIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICAgIC8vIFQKICAgICAgICAgIGNhc2UgImNjY2NjIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdQogICAgICAgICAgY2FzZSAiY2NjY2NjIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogInNob3J0IiwgY29udGV4dDogInN0YW5kYWxvbmUiIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogIm5hcnJvdyIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICAgIC8vIFR1ZXNkYXkKICAgICAgICAgIGNhc2UgImNjY2MiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogIndpZGUiLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogInNob3J0IiwgY29udGV4dDogInN0YW5kYWxvbmUiIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogIm5hcnJvdyIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMCAmJiB2YWx1ZTIgPD0gNjsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIsIG9wdGlvbnMpIHsKICAgICAgICBkYXRlID0gc2V0RGF5KGRhdGUsIHZhbHVlMiwgb3B0aW9ucyk7CiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbCiAgICAgICAgInkiLAogICAgICAgICJSIiwKICAgICAgICAidSIsCiAgICAgICAgInEiLAogICAgICAgICJRIiwKICAgICAgICAiTSIsCiAgICAgICAgIkwiLAogICAgICAgICJJIiwKICAgICAgICAiZCIsCiAgICAgICAgIkQiLAogICAgICAgICJFIiwKICAgICAgICAiaSIsCiAgICAgICAgImUiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SVNPRGF5LmpzCmZ1bmN0aW9uIHNldElTT0RheShkYXRlLCBkYXksIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgY3VycmVudERheSA9IGdldElTT0RheShkYXRlXywgb3B0aW9ucyk7CiAgY29uc3QgZGlmZiA9IGRheSAtIGN1cnJlbnREYXk7CiAgcmV0dXJuIGFkZERheXMoZGF0ZV8sIGRpZmYsIG9wdGlvbnMpOwp9CnZhciBzZXRJU09EYXlfZGVmYXVsdDsKdmFyIGluaXRfc2V0SVNPRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldElTT0RheS5qcyIoKSB7CiAgICBpbml0X2FkZERheXMoKTsKICAgIGluaXRfZ2V0SVNPRGF5KCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0SVNPRGF5X2RlZmF1bHQgPSBzZXRJU09EYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT0RheVBhcnNlci5qcwp2YXIgSVNPRGF5UGFyc2VyOwp2YXIgaW5pdF9JU09EYXlQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT0RheVBhcnNlci5qcyIoKSB7CiAgICBpbml0X3NldElTT0RheSgpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIElTT0RheVBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA5MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAodmFsdWUyKSA9PiB7CiAgICAgICAgICBpZiAodmFsdWUyID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiA3OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHZhbHVlMjsKICAgICAgICB9OwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIDIKICAgICAgICAgIGNhc2UgImkiOgogICAgICAgICAgY2FzZSAiaWkiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgICAvLyAybmQKICAgICAgICAgIGNhc2UgImlvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogImRheSIgfSk7CiAgICAgICAgICAvLyBUdWUKICAgICAgICAgIGNhc2UgImlpaSI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gVAogICAgICAgICAgY2FzZSAiaWlpaWkiOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUoCiAgICAgICAgICAgICAgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICAvLyBUdQogICAgICAgICAgY2FzZSAiaWlpaWlpIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJzaG9ydCIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIHZhbHVlQ2FsbGJhY2sKICAgICAgICAgICAgKTsKICAgICAgICAgIC8vIFR1ZXNkYXkKICAgICAgICAgIGNhc2UgImlpaWkiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAic2hvcnQiLAogICAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IDc7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZSA9IHNldElTT0RheShkYXRlLCB2YWx1ZTIpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJ5IiwKICAgICAgICAiWSIsCiAgICAgICAgInUiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgImQiLAogICAgICAgICJEIiwKICAgICAgICAiRSIsCiAgICAgICAgImUiLAogICAgICAgICJjIiwKICAgICAgICAidCIsCiAgICAgICAgIlQiCiAgICAgIF07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9BTVBNUGFyc2VyLmpzCnZhciBBTVBNUGFyc2VyOwp2YXIgaW5pdF9BTVBNUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9BTVBNUGFyc2VyLmpzIigpIHsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBBTVBNUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDgwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiYSI6CiAgICAgICAgICBjYXNlICJhYSI6CiAgICAgICAgICBjYXNlICJhYWEiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlICJhYWFhYSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiYWFhYSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0SG91cnMoZGF5UGVyaW9kRW51bVRvSG91cnModmFsdWUyKSwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJiIiwgIkIiLCAiSCIsICJrIiwgInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvQU1QTU1pZG5pZ2h0UGFyc2VyLmpzCnZhciBBTVBNTWlkbmlnaHRQYXJzZXI7CnZhciBpbml0X0FNUE1NaWRuaWdodFBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvQU1QTU1pZG5pZ2h0UGFyc2VyLmpzIigpIHsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBBTVBNTWlkbmlnaHRQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gODA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJiIjoKICAgICAgICAgIGNhc2UgImJiIjoKICAgICAgICAgIGNhc2UgImJiYiI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgImJiYmJiIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlICJiYmJiIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZS5zZXRIb3VycyhkYXlQZXJpb2RFbnVtVG9Ib3Vycyh2YWx1ZTIpLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbImEiLCAiQiIsICJIIiwgImsiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9EYXlQZXJpb2RQYXJzZXIuanMKdmFyIERheVBlcmlvZFBhcnNlcjsKdmFyIGluaXRfRGF5UGVyaW9kUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9EYXlQZXJpb2RQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIERheVBlcmlvZFBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA4MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgIkIiOgogICAgICAgICAgY2FzZSAiQkIiOgogICAgICAgICAgY2FzZSAiQkJCIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiQkJCQkIiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgIkJCQkIiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldEhvdXJzKGRheVBlcmlvZEVudW1Ub0hvdXJzKHZhbHVlMiksIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsiYSIsICJiIiwgInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSG91cjF0bzEyUGFyc2VyLmpzCnZhciBIb3VyMXRvMTJQYXJzZXI7CnZhciBpbml0X0hvdXIxdG8xMlBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSG91cjF0bzEyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIEhvdXIxdG8xMlBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA3MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImgiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuaG91cjEyaCwgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJobyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJob3VyIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gMTI7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgY29uc3QgaXNQTSA9IGRhdGUuZ2V0SG91cnMoKSA+PSAxMjsKICAgICAgICBpZiAoaXNQTSAmJiB2YWx1ZTIgPCAxMikgewogICAgICAgICAgZGF0ZS5zZXRIb3Vycyh2YWx1ZTIgKyAxMiwgMCwgMCwgMCk7CiAgICAgICAgfSBlbHNlIGlmICghaXNQTSAmJiB2YWx1ZTIgPT09IDEyKSB7CiAgICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkYXRlLnNldEhvdXJzKHZhbHVlMiwgMCwgMCwgMCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsiSCIsICJLIiwgImsiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMHRvMjNQYXJzZXIuanMKdmFyIEhvdXIwdG8yM1BhcnNlcjsKdmFyIGluaXRfSG91cjB0bzIzUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMHRvMjNQYXJzZXIuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSG91cjB0bzIzUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDcwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiSCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5ob3VyMjNoLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgIkhvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogImhvdXIiIH0pOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSAyMzsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldEhvdXJzKHZhbHVlMiwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJhIiwgImIiLCAiaCIsICJLIiwgImsiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMFRvMTFQYXJzZXIuanMKdmFyIEhvdXIwVG8xMVBhcnNlcjsKdmFyIGluaXRfSG91cjBUbzExUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMFRvMTFQYXJzZXIuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSG91cjBUbzExUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDcwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiSyI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5ob3VyMTFoLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgIktvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogImhvdXIiIH0pOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSAxMTsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBjb25zdCBpc1BNID0gZGF0ZS5nZXRIb3VycygpID49IDEyOwogICAgICAgIGlmIChpc1BNICYmIHZhbHVlMiA8IDEyKSB7CiAgICAgICAgICBkYXRlLnNldEhvdXJzKHZhbHVlMiArIDEyLCAwLCAwLCAwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0ZS5zZXRIb3Vycyh2YWx1ZTIsIDAsIDAsIDApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbImgiLCAiSCIsICJrIiwgInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSG91cjFUbzI0UGFyc2VyLmpzCnZhciBIb3VyMVRvMjRQYXJzZXI7CnZhciBpbml0X0hvdXIxVG8yNFBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSG91cjFUbzI0UGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIEhvdXIxVG8yNFBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA3MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImsiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuaG91cjI0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJrbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJob3VyIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gMjQ7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgY29uc3QgaG91cnMgPSB2YWx1ZTIgPD0gMjQgPyB2YWx1ZTIgJSAyNCA6IHZhbHVlMjsKICAgICAgICBkYXRlLnNldEhvdXJzKGhvdXJzLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbImEiLCAiYiIsICJoIiwgIkgiLCAiSyIsICJ0IiwgIlQiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL01pbnV0ZVBhcnNlci5qcwp2YXIgTWludXRlUGFyc2VyOwp2YXIgaW5pdF9NaW51dGVQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL01pbnV0ZVBhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50czIoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBNaW51dGVQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gNjA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJtIjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLm1pbnV0ZSwgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJtbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJtaW51dGUiIH0pOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSA1OTsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldE1pbnV0ZXModmFsdWUyLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU2Vjb25kUGFyc2VyLmpzCnZhciBTZWNvbmRQYXJzZXI7CnZhciBpbml0X1NlY29uZFBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU2Vjb25kUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFNlY29uZFBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA1MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgInMiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuc2Vjb25kLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgInNvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogInNlY29uZCIgfSk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDAgJiYgdmFsdWUyIDw9IDU5OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0U2Vjb25kcyh2YWx1ZTIsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9GcmFjdGlvbk9mU2Vjb25kUGFyc2VyLmpzCnZhciBGcmFjdGlvbk9mU2Vjb25kUGFyc2VyOwp2YXIgaW5pdF9GcmFjdGlvbk9mU2Vjb25kUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9GcmFjdGlvbk9mU2Vjb25kUGFyc2VyLmpzIigpIHsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBGcmFjdGlvbk9mU2Vjb25kUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDMwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbikgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAodmFsdWUyKSA9PiBNYXRoLnRydW5jKHZhbHVlMiAqIE1hdGgucG93KDEwLCAtdG9rZW4ubGVuZ3RoICsgMykpOwogICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHModmFsdWUyKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSVNPVGltZXpvbmVXaXRoWlBhcnNlci5qcwp2YXIgSVNPVGltZXpvbmVXaXRoWlBhcnNlcjsKdmFyIGluaXRfSVNPVGltZXpvbmVXaXRoWlBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSVNPVGltZXpvbmVXaXRoWlBhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSVNPVGltZXpvbmVXaXRoWlBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4pIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJYIjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKAogICAgICAgICAgICAgIHRpbWV6b25lUGF0dGVybnMuYmFzaWNPcHRpb25hbE1pbnV0ZXMsCiAgICAgICAgICAgICAgZGF0ZVN0cmluZwogICAgICAgICAgICApOwogICAgICAgICAgY2FzZSAiWFgiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4odGltZXpvbmVQYXR0ZXJucy5iYXNpYywgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJYWFhYIjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKAogICAgICAgICAgICAgIHRpbWV6b25lUGF0dGVybnMuYmFzaWNPcHRpb25hbFNlY29uZHMsCiAgICAgICAgICAgICAgZGF0ZVN0cmluZwogICAgICAgICAgICApOwogICAgICAgICAgY2FzZSAiWFhYWFgiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4oCiAgICAgICAgICAgICAgdGltZXpvbmVQYXR0ZXJucy5leHRlbmRlZE9wdGlvbmFsU2Vjb25kcywKICAgICAgICAgICAgICBkYXRlU3RyaW5nCiAgICAgICAgICAgICk7CiAgICAgICAgICBjYXNlICJYWFgiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKHRpbWV6b25lUGF0dGVybnMuZXh0ZW5kZWQsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXQoZGF0ZSwgZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGlmIChmbGFncy50aW1lc3RhbXBJc1NldCkgcmV0dXJuIGRhdGU7CiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEZyb20oCiAgICAgICAgICBkYXRlLAogICAgICAgICAgZGF0ZS5nZXRUaW1lKCkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIC0gdmFsdWUyCiAgICAgICAgKTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbInQiLCAiVCIsICJ4Il07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9JU09UaW1lem9uZVBhcnNlci5qcwp2YXIgSVNPVGltZXpvbmVQYXJzZXI7CnZhciBpbml0X0lTT1RpbWV6b25lUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9JU09UaW1lem9uZVBhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSVNPVGltZXpvbmVQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAieCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybigKICAgICAgICAgICAgICB0aW1lem9uZVBhdHRlcm5zLmJhc2ljT3B0aW9uYWxNaW51dGVzLAogICAgICAgICAgICAgIGRhdGVTdHJpbmcKICAgICAgICAgICAgKTsKICAgICAgICAgIGNhc2UgInh4IjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKHRpbWV6b25lUGF0dGVybnMuYmFzaWMsIGRhdGVTdHJpbmcpOwogICAgICAgICAgY2FzZSAieHh4eCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybigKICAgICAgICAgICAgICB0aW1lem9uZVBhdHRlcm5zLmJhc2ljT3B0aW9uYWxTZWNvbmRzLAogICAgICAgICAgICAgIGRhdGVTdHJpbmcKICAgICAgICAgICAgKTsKICAgICAgICAgIGNhc2UgInh4eHh4IjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKAogICAgICAgICAgICAgIHRpbWV6b25lUGF0dGVybnMuZXh0ZW5kZWRPcHRpb25hbFNlY29uZHMsCiAgICAgICAgICAgICAgZGF0ZVN0cmluZwogICAgICAgICAgICApOwogICAgICAgICAgY2FzZSAieHh4IjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmV4dGVuZGVkLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBpZiAoZmxhZ3MudGltZXN0YW1wSXNTZXQpIHJldHVybiBkYXRlOwogICAgICAgIHJldHVybiBjb25zdHJ1Y3RGcm9tKAogICAgICAgICAgZGF0ZSwKICAgICAgICAgIGRhdGUuZ2V0VGltZSgpIC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkYXRlKSAtIHZhbHVlMgogICAgICAgICk7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJ0IiwgIlQiLCAiWCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvVGltZXN0YW1wU2Vjb25kc1BhcnNlci5qcwp2YXIgVGltZXN0YW1wU2Vjb25kc1BhcnNlcjsKdmFyIGluaXRfVGltZXN0YW1wU2Vjb25kc1BhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvVGltZXN0YW1wU2Vjb25kc1BhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBUaW1lc3RhbXBTZWNvbmRzUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDQwOwogICAgICBwYXJzZShkYXRlU3RyaW5nKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlQW55RGlnaXRzU2lnbmVkKGRhdGVTdHJpbmcpOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIHJldHVybiBbY29uc3RydWN0RnJvbShkYXRlLCB2YWx1ZTIgKiAxZTMpLCB7IHRpbWVzdGFtcElzU2V0OiB0cnVlIH1dOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9ICIqIjsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1RpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlci5qcwp2YXIgVGltZXN0YW1wTWlsbGlzZWNvbmRzUGFyc2VyOwp2YXIgaW5pdF9UaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1RpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBUaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMjA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcpIHsKICAgICAgICByZXR1cm4gcGFyc2VBbnlEaWdpdHNTaWduZWQoZGF0ZVN0cmluZyk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIFtjb25zdHJ1Y3RGcm9tKGRhdGUsIHZhbHVlMiksIHsgdGltZXN0YW1wSXNTZXQ6IHRydWUgfV07CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gIioiOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMuanMKdmFyIHBhcnNlcnM7CnZhciBpbml0X3BhcnNlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzLmpzIigpIHsKICAgIGluaXRfRXJhUGFyc2VyKCk7CiAgICBpbml0X1llYXJQYXJzZXIoKTsKICAgIGluaXRfTG9jYWxXZWVrWWVhclBhcnNlcigpOwogICAgaW5pdF9JU09XZWVrWWVhclBhcnNlcigpOwogICAgaW5pdF9FeHRlbmRlZFllYXJQYXJzZXIoKTsKICAgIGluaXRfUXVhcnRlclBhcnNlcigpOwogICAgaW5pdF9TdGFuZEFsb25lUXVhcnRlclBhcnNlcigpOwogICAgaW5pdF9Nb250aFBhcnNlcigpOwogICAgaW5pdF9TdGFuZEFsb25lTW9udGhQYXJzZXIoKTsKICAgIGluaXRfTG9jYWxXZWVrUGFyc2VyKCk7CiAgICBpbml0X0lTT1dlZWtQYXJzZXIoKTsKICAgIGluaXRfRGF0ZVBhcnNlcigpOwogICAgaW5pdF9EYXlPZlllYXJQYXJzZXIoKTsKICAgIGluaXRfRGF5UGFyc2VyKCk7CiAgICBpbml0X0xvY2FsRGF5UGFyc2VyKCk7CiAgICBpbml0X1N0YW5kQWxvbmVMb2NhbERheVBhcnNlcigpOwogICAgaW5pdF9JU09EYXlQYXJzZXIoKTsKICAgIGluaXRfQU1QTVBhcnNlcigpOwogICAgaW5pdF9BTVBNTWlkbmlnaHRQYXJzZXIoKTsKICAgIGluaXRfRGF5UGVyaW9kUGFyc2VyKCk7CiAgICBpbml0X0hvdXIxdG8xMlBhcnNlcigpOwogICAgaW5pdF9Ib3VyMHRvMjNQYXJzZXIoKTsKICAgIGluaXRfSG91cjBUbzExUGFyc2VyKCk7CiAgICBpbml0X0hvdXIxVG8yNFBhcnNlcigpOwogICAgaW5pdF9NaW51dGVQYXJzZXIoKTsKICAgIGluaXRfU2Vjb25kUGFyc2VyKCk7CiAgICBpbml0X0ZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIoKTsKICAgIGluaXRfSVNPVGltZXpvbmVXaXRoWlBhcnNlcigpOwogICAgaW5pdF9JU09UaW1lem9uZVBhcnNlcigpOwogICAgaW5pdF9UaW1lc3RhbXBTZWNvbmRzUGFyc2VyKCk7CiAgICBpbml0X1RpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlcigpOwogICAgcGFyc2VycyA9IHsKICAgICAgRzogbmV3IEVyYVBhcnNlcigpLAogICAgICB5OiBuZXcgWWVhclBhcnNlcigpLAogICAgICBZOiBuZXcgTG9jYWxXZWVrWWVhclBhcnNlcigpLAogICAgICBSOiBuZXcgSVNPV2Vla1llYXJQYXJzZXIoKSwKICAgICAgdTogbmV3IEV4dGVuZGVkWWVhclBhcnNlcigpLAogICAgICBROiBuZXcgUXVhcnRlclBhcnNlcigpLAogICAgICBxOiBuZXcgU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIoKSwKICAgICAgTTogbmV3IE1vbnRoUGFyc2VyKCksCiAgICAgIEw6IG5ldyBTdGFuZEFsb25lTW9udGhQYXJzZXIoKSwKICAgICAgdzogbmV3IExvY2FsV2Vla1BhcnNlcigpLAogICAgICBJOiBuZXcgSVNPV2Vla1BhcnNlcigpLAogICAgICBkOiBuZXcgRGF0ZVBhcnNlcigpLAogICAgICBEOiBuZXcgRGF5T2ZZZWFyUGFyc2VyKCksCiAgICAgIEU6IG5ldyBEYXlQYXJzZXIoKSwKICAgICAgZTogbmV3IExvY2FsRGF5UGFyc2VyKCksCiAgICAgIGM6IG5ldyBTdGFuZEFsb25lTG9jYWxEYXlQYXJzZXIoKSwKICAgICAgaTogbmV3IElTT0RheVBhcnNlcigpLAogICAgICBhOiBuZXcgQU1QTVBhcnNlcigpLAogICAgICBiOiBuZXcgQU1QTU1pZG5pZ2h0UGFyc2VyKCksCiAgICAgIEI6IG5ldyBEYXlQZXJpb2RQYXJzZXIoKSwKICAgICAgaDogbmV3IEhvdXIxdG8xMlBhcnNlcigpLAogICAgICBIOiBuZXcgSG91cjB0bzIzUGFyc2VyKCksCiAgICAgIEs6IG5ldyBIb3VyMFRvMTFQYXJzZXIoKSwKICAgICAgazogbmV3IEhvdXIxVG8yNFBhcnNlcigpLAogICAgICBtOiBuZXcgTWludXRlUGFyc2VyKCksCiAgICAgIHM6IG5ldyBTZWNvbmRQYXJzZXIoKSwKICAgICAgUzogbmV3IEZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIoKSwKICAgICAgWDogbmV3IElTT1RpbWV6b25lV2l0aFpQYXJzZXIoKSwKICAgICAgeDogbmV3IElTT1RpbWV6b25lUGFyc2VyKCksCiAgICAgIHQ6IG5ldyBUaW1lc3RhbXBTZWNvbmRzUGFyc2VyKCksCiAgICAgIFQ6IG5ldyBUaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIoKQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS5qcwpmdW5jdGlvbiBwYXJzZShkYXRlU3RyLCBmb3JtYXRTdHIsIHJlZmVyZW5jZURhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBpbnZhbGlkRGF0ZSA9ICgpID0+IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgcmVmZXJlbmNlRGF0ZSwgTmFOKTsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9uczIoKTsKICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZSA/PyBlblVTOwogIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBkZWZhdWx0T3B0aW9uczIuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyAxOwogIGNvbnN0IHdlZWtTdGFydHNPbiA9IG9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwOwogIGlmICghZm9ybWF0U3RyKQogICAgcmV0dXJuIGRhdGVTdHIgPyBpbnZhbGlkRGF0ZSgpIDogdG9EYXRlKHJlZmVyZW5jZURhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBzdWJGbk9wdGlvbnMgPSB7CiAgICBmaXJzdFdlZWtDb250YWluc0RhdGUsCiAgICB3ZWVrU3RhcnRzT24sCiAgICBsb2NhbGUKICB9OwogIGNvbnN0IHNldHRlcnMgPSBbbmV3IERhdGVUaW1lem9uZVNldHRlcihvcHRpb25zPy5pbiwgcmVmZXJlbmNlRGF0ZSldOwogIGNvbnN0IHRva2VucyA9IGZvcm1hdFN0ci5tYXRjaChsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cDIpLm1hcCgoc3Vic3RyaW5nKSA9PiB7CiAgICBjb25zdCBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTsKICAgIGlmIChmaXJzdENoYXJhY3RlciBpbiBsb25nRm9ybWF0dGVycykgewogICAgICBjb25zdCBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdOwogICAgICByZXR1cm4gbG9uZ0Zvcm1hdHRlcihzdWJzdHJpbmcsIGxvY2FsZS5mb3JtYXRMb25nKTsKICAgIH0KICAgIHJldHVybiBzdWJzdHJpbmc7CiAgfSkuam9pbigiIikubWF0Y2goZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cDIpOwogIGNvbnN0IHVzZWRUb2tlbnMgPSBbXTsKICBmb3IgKGxldCB0b2tlbiBvZiB0b2tlbnMpIHsKICAgIGlmICghb3B0aW9ucz8udXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikpIHsKICAgICAgd2Fybk9yVGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0U3RyLCBkYXRlU3RyKTsKICAgIH0KICAgIGlmICghb3B0aW9ucz8udXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucyAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSkgewogICAgICB3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXRTdHIsIGRhdGVTdHIpOwogICAgfQogICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSB0b2tlblswXTsKICAgIGNvbnN0IHBhcnNlciA9IHBhcnNlcnNbZmlyc3RDaGFyYWN0ZXJdOwogICAgaWYgKHBhcnNlcikgewogICAgICBjb25zdCB7IGluY29tcGF0aWJsZVRva2VucyB9ID0gcGFyc2VyOwogICAgICBpZiAoQXJyYXkuaXNBcnJheShpbmNvbXBhdGlibGVUb2tlbnMpKSB7CiAgICAgICAgY29uc3QgaW5jb21wYXRpYmxlVG9rZW4gPSB1c2VkVG9rZW5zLmZpbmQoCiAgICAgICAgICAodXNlZFRva2VuKSA9PiBpbmNvbXBhdGlibGVUb2tlbnMuaW5jbHVkZXModXNlZFRva2VuLnRva2VuKSB8fCB1c2VkVG9rZW4udG9rZW4gPT09IGZpcnN0Q2hhcmFjdGVyCiAgICAgICAgKTsKICAgICAgICBpZiAoaW5jb21wYXRpYmxlVG9rZW4pIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKAogICAgICAgICAgICBgVGhlIGZvcm1hdCBzdHJpbmcgbXVzdG4ndCBjb250YWluIFxgJHtpbmNvbXBhdGlibGVUb2tlbi5mdWxsVG9rZW59XGAgYW5kIFxgJHt0b2tlbn1cYCBhdCB0aGUgc2FtZSB0aW1lYAogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAocGFyc2VyLmluY29tcGF0aWJsZVRva2VucyA9PT0gIioiICYmIHVzZWRUb2tlbnMubGVuZ3RoID4gMCkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKAogICAgICAgICAgYFRoZSBmb3JtYXQgc3RyaW5nIG11c3RuJ3QgY29udGFpbiBcYCR7dG9rZW59XGAgYW5kIGFueSBvdGhlciB0b2tlbiBhdCB0aGUgc2FtZSB0aW1lYAogICAgICAgICk7CiAgICAgIH0KICAgICAgdXNlZFRva2Vucy5wdXNoKHsgdG9rZW46IGZpcnN0Q2hhcmFjdGVyLCBmdWxsVG9rZW46IHRva2VuIH0pOwogICAgICBjb25zdCBwYXJzZVJlc3VsdCA9IHBhcnNlci5ydW4oCiAgICAgICAgZGF0ZVN0ciwKICAgICAgICB0b2tlbiwKICAgICAgICBsb2NhbGUubWF0Y2gsCiAgICAgICAgc3ViRm5PcHRpb25zCiAgICAgICk7CiAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKICAgICAgICByZXR1cm4gaW52YWxpZERhdGUoKTsKICAgICAgfQogICAgICBzZXR0ZXJzLnB1c2gocGFyc2VSZXN1bHQuc2V0dGVyKTsKICAgICAgZGF0ZVN0ciA9IHBhcnNlUmVzdWx0LnJlc3Q7CiAgICB9IGVsc2UgewogICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIubWF0Y2godW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAyKSkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKAogICAgICAgICAgIkZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgIiArIGZpcnN0Q2hhcmFjdGVyICsgImAiCiAgICAgICAgKTsKICAgICAgfQogICAgICBpZiAodG9rZW4gPT09ICInJyIpIHsKICAgICAgICB0b2tlbiA9ICInIjsKICAgICAgfSBlbHNlIGlmIChmaXJzdENoYXJhY3RlciA9PT0gIiciKSB7CiAgICAgICAgdG9rZW4gPSBjbGVhbkVzY2FwZWRTdHJpbmcyKHRva2VuKTsKICAgICAgfQogICAgICBpZiAoZGF0ZVN0ci5pbmRleE9mKHRva2VuKSA9PT0gMCkgewogICAgICAgIGRhdGVTdHIgPSBkYXRlU3RyLnNsaWNlKHRva2VuLmxlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGludmFsaWREYXRlKCk7CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKGRhdGVTdHIubGVuZ3RoID4gMCAmJiBub3RXaGl0ZXNwYWNlUmVnRXhwLnRlc3QoZGF0ZVN0cikpIHsKICAgIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogIH0KICBjb25zdCB1bmlxdWVQcmlvcml0eVNldHRlcnMgPSBzZXR0ZXJzLm1hcCgoc2V0dGVyKSA9PiBzZXR0ZXIucHJpb3JpdHkpLnNvcnQoKGE1LCBiNSkgPT4gYjUgLSBhNSkuZmlsdGVyKChwcmlvcml0eSwgaW5kZXgyLCBhcnJheSkgPT4gYXJyYXkuaW5kZXhPZihwcmlvcml0eSkgPT09IGluZGV4MikubWFwKAogICAgKHByaW9yaXR5KSA9PiBzZXR0ZXJzLmZpbHRlcigoc2V0dGVyKSA9PiBzZXR0ZXIucHJpb3JpdHkgPT09IHByaW9yaXR5KS5zb3J0KChhNSwgYjUpID0+IGI1LnN1YlByaW9yaXR5IC0gYTUuc3ViUHJpb3JpdHkpCiAgKS5tYXAoKHNldHRlckFycmF5KSA9PiBzZXR0ZXJBcnJheVswXSk7CiAgbGV0IGRhdGUgPSB0b0RhdGUocmVmZXJlbmNlRGF0ZSwgb3B0aW9ucz8uaW4pOwogIGlmIChpc05hTigrZGF0ZSkpIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogIGNvbnN0IGZsYWdzID0ge307CiAgZm9yIChjb25zdCBzZXR0ZXIgb2YgdW5pcXVlUHJpb3JpdHlTZXR0ZXJzKSB7CiAgICBpZiAoIXNldHRlci52YWxpZGF0ZShkYXRlLCBzdWJGbk9wdGlvbnMpKSB7CiAgICAgIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogICAgfQogICAgY29uc3QgcmVzdWx0ID0gc2V0dGVyLnNldChkYXRlLCBmbGFncywgc3ViRm5PcHRpb25zKTsKICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHsKICAgICAgZGF0ZSA9IHJlc3VsdFswXTsKICAgICAgT2JqZWN0LmFzc2lnbihmbGFncywgcmVzdWx0WzFdKTsKICAgIH0gZWxzZSB7CiAgICAgIGRhdGUgPSByZXN1bHQ7CiAgICB9CiAgfQogIHJldHVybiBkYXRlOwp9CmZ1bmN0aW9uIGNsZWFuRXNjYXBlZFN0cmluZzIoaW5wdXQpIHsKICByZXR1cm4gaW5wdXQubWF0Y2goZXNjYXBlZFN0cmluZ1JlZ0V4cDIpWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAyLCAiJyIpOwp9CnZhciBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwMiwgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAyLCBlc2NhcGVkU3RyaW5nUmVnRXhwMiwgZG91YmxlUXVvdGVSZWdFeHAyLCBub3RXaGl0ZXNwYWNlUmVnRXhwLCB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cDIsIHBhcnNlX2RlZmF1bHQ7CnZhciBpbml0X3BhcnNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdExvY2FsZSgpOwogICAgaW5pdF9sb25nRm9ybWF0dGVycygpOwogICAgaW5pdF9wcm90ZWN0ZWRUb2tlbnMoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9nZXREZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGluaXRfU2V0dGVyKCk7CiAgICBpbml0X3BhcnNlcnMoKTsKICAgIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAyID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFx3KVwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZzsKICAgIGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwMiA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nOwogICAgZXNjYXBlZFN0cmluZ1JlZ0V4cDIgPSAvXicoW15dKj8pJz8kLzsKICAgIGRvdWJsZVF1b3RlUmVnRXhwMiA9IC8nJy9nOwogICAgbm90V2hpdGVzcGFjZVJlZ0V4cCA9IC9cUy87CiAgICB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cDIgPSAvW2EtekEtWl0vOwogICAgcGFyc2VfZGVmYXVsdCA9IHBhcnNlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzTWF0Y2guanMKZnVuY3Rpb24gaXNNYXRjaDIoZGF0ZVN0ciwgZm9ybWF0U3RyLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzVmFsaWQocGFyc2UoZGF0ZVN0ciwgZm9ybWF0U3RyLCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgb3B0aW9ucykpOwp9CnZhciBpc01hdGNoX2RlZmF1bHQ7CnZhciBpbml0X2lzTWF0Y2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNNYXRjaC5qcyIoKSB7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfcGFyc2UoKTsKICAgIGlzTWF0Y2hfZGVmYXVsdCA9IGlzTWF0Y2gyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzTW9uZGF5LmpzCmZ1bmN0aW9uIGlzTW9uZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKSA9PT0gMTsKfQp2YXIgaXNNb25kYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNNb25kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNNb25kYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzTW9uZGF5X2RlZmF1bHQgPSBpc01vbmRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1Bhc3QuanMKZnVuY3Rpb24gaXNQYXN0KGRhdGUpIHsKICByZXR1cm4gK3RvRGF0ZShkYXRlKSA8IERhdGUubm93KCk7Cn0KdmFyIGlzUGFzdF9kZWZhdWx0Owp2YXIgaW5pdF9pc1Bhc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNQYXN0LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1Bhc3RfZGVmYXVsdCA9IGlzUGFzdDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSG91ci5qcwpmdW5jdGlvbiBzdGFydE9mSG91cihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldE1pbnV0ZXMoMCwgMCwgMCk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mSG91cl9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mSG91ciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSG91ci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc3RhcnRPZkhvdXJfZGVmYXVsdCA9IHN0YXJ0T2ZIb3VyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZUhvdXIuanMKZnVuY3Rpb24gaXNTYW1lSG91cihkYXRlTGVmdCwgZGF0ZVJpZ2h0LCBvcHRpb25zKSB7CiAgY29uc3QgW2RhdGVMZWZ0XywgZGF0ZVJpZ2h0X10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgZGF0ZUxlZnQsCiAgICBkYXRlUmlnaHQKICApOwogIHJldHVybiArc3RhcnRPZkhvdXIoZGF0ZUxlZnRfKSA9PT0gK3N0YXJ0T2ZIb3VyKGRhdGVSaWdodF8pOwp9CnZhciBpc1NhbWVIb3VyX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZUhvdXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lSG91ci5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X3N0YXJ0T2ZIb3VyKCk7CiAgICBpc1NhbWVIb3VyX2RlZmF1bHQgPSBpc1NhbWVIb3VyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZVdlZWsuanMKZnVuY3Rpb24gaXNTYW1lV2VlayhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIHJldHVybiArc3RhcnRPZldlZWsobGF0ZXJEYXRlXywgb3B0aW9ucykgPT09ICtzdGFydE9mV2VlayhlYXJsaWVyRGF0ZV8sIG9wdGlvbnMpOwp9CnZhciBpc1NhbWVXZWVrX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZVdlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lV2Vlay5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X3N0YXJ0T2ZXZWVrKCk7CiAgICBpc1NhbWVXZWVrX2RlZmF1bHQgPSBpc1NhbWVXZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZUlTT1dlZWsuanMKZnVuY3Rpb24gaXNTYW1lSVNPV2VlayhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZVdlZWsobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgeyAuLi5vcHRpb25zLCB3ZWVrU3RhcnRzT246IDEgfSk7Cn0KdmFyIGlzU2FtZUlTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfaXNTYW1lSVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVJU09XZWVrLmpzIigpIHsKICAgIGluaXRfaXNTYW1lV2VlaygpOwogICAgaXNTYW1lSVNPV2Vla19kZWZhdWx0ID0gaXNTYW1lSVNPV2VlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVJU09XZWVrWWVhci5qcwpmdW5jdGlvbiBpc1NhbWVJU09XZWVrWWVhcihsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIHJldHVybiArc3RhcnRPZklTT1dlZWtZZWFyKGxhdGVyRGF0ZV8pID09PSArc3RhcnRPZklTT1dlZWtZZWFyKGVhcmxpZXJEYXRlXyk7Cn0KdmFyIGlzU2FtZUlTT1dlZWtZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZUlTT1dlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZUlTT1dlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpc1NhbWVJU09XZWVrWWVhcl9kZWZhdWx0ID0gaXNTYW1lSVNPV2Vla1llYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZk1pbnV0ZS5qcwpmdW5jdGlvbiBzdGFydE9mTWludXRlKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgZGF0ZV8uc2V0U2Vjb25kcygwLCAwKTsKICByZXR1cm4gZGF0ZV87Cn0KdmFyIHN0YXJ0T2ZNaW51dGVfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZk1pbnV0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mTWludXRlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mTWludXRlX2RlZmF1bHQgPSBzdGFydE9mTWludXRlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZU1pbnV0ZS5qcwpmdW5jdGlvbiBpc1NhbWVNaW51dGUobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSkgewogIHJldHVybiArc3RhcnRPZk1pbnV0ZShsYXRlckRhdGUpID09PSArc3RhcnRPZk1pbnV0ZShlYXJsaWVyRGF0ZSk7Cn0KdmFyIGlzU2FtZU1pbnV0ZV9kZWZhdWx0Owp2YXIgaW5pdF9pc1NhbWVNaW51dGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lTWludXRlLmpzIigpIHsKICAgIGluaXRfc3RhcnRPZk1pbnV0ZSgpOwogICAgaXNTYW1lTWludXRlX2RlZmF1bHQgPSBpc1NhbWVNaW51dGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lTW9udGguanMKZnVuY3Rpb24gaXNTYW1lTW9udGgobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICByZXR1cm4gbGF0ZXJEYXRlXy5nZXRGdWxsWWVhcigpID09PSBlYXJsaWVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAmJiBsYXRlckRhdGVfLmdldE1vbnRoKCkgPT09IGVhcmxpZXJEYXRlXy5nZXRNb250aCgpOwp9CnZhciBpc1NhbWVNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9pc1NhbWVNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVNb250aC5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpc1NhbWVNb250aF9kZWZhdWx0ID0gaXNTYW1lTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lUXVhcnRlci5qcwpmdW5jdGlvbiBpc1NhbWVRdWFydGVyKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbZGF0ZUxlZnRfLCBkYXRlUmlnaHRfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgcmV0dXJuICtzdGFydE9mUXVhcnRlcihkYXRlTGVmdF8pID09PSArc3RhcnRPZlF1YXJ0ZXIoZGF0ZVJpZ2h0Xyk7Cn0KdmFyIGlzU2FtZVF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfaXNTYW1lUXVhcnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVRdWFydGVyLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfc3RhcnRPZlF1YXJ0ZXIoKTsKICAgIGlzU2FtZVF1YXJ0ZXJfZGVmYXVsdCA9IGlzU2FtZVF1YXJ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZlNlY29uZC5qcwpmdW5jdGlvbiBzdGFydE9mU2Vjb25kKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgZGF0ZV8uc2V0TWlsbGlzZWNvbmRzKDApOwogIHJldHVybiBkYXRlXzsKfQp2YXIgc3RhcnRPZlNlY29uZF9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mU2Vjb25kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZTZWNvbmQuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHN0YXJ0T2ZTZWNvbmRfZGVmYXVsdCA9IHN0YXJ0T2ZTZWNvbmQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lU2Vjb25kLmpzCmZ1bmN0aW9uIGlzU2FtZVNlY29uZChsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7CiAgcmV0dXJuICtzdGFydE9mU2Vjb25kKGxhdGVyRGF0ZSkgPT09ICtzdGFydE9mU2Vjb25kKGVhcmxpZXJEYXRlKTsKfQp2YXIgaXNTYW1lU2Vjb25kX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZVNlY29uZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVTZWNvbmQuanMiKCkgewogICAgaW5pdF9zdGFydE9mU2Vjb25kKCk7CiAgICBpc1NhbWVTZWNvbmRfZGVmYXVsdCA9IGlzU2FtZVNlY29uZDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVZZWFyLmpzCmZ1bmN0aW9uIGlzU2FtZVllYXIobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICByZXR1cm4gbGF0ZXJEYXRlXy5nZXRGdWxsWWVhcigpID09PSBlYXJsaWVyRGF0ZV8uZ2V0RnVsbFllYXIoKTsKfQp2YXIgaXNTYW1lWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9pc1NhbWVZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZVllYXIuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaXNTYW1lWWVhcl9kZWZhdWx0ID0gaXNTYW1lWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNIb3VyLmpzCmZ1bmN0aW9uIGlzVGhpc0hvdXIoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBpc1NhbWVIb3VyKAogICAgdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKSwKICAgIGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKQogICk7Cn0KdmFyIGlzVGhpc0hvdXJfZGVmYXVsdDsKdmFyIGluaXRfaXNUaGlzSG91ciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNIb3VyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBpbml0X2lzU2FtZUhvdXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1RoaXNIb3VyX2RlZmF1bHQgPSBpc1RoaXNIb3VyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc0lTT1dlZWsuanMKZnVuY3Rpb24gaXNUaGlzSVNPV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZUlTT1dlZWsoCiAgICBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIGRhdGUpLAogICAgY29uc3RydWN0Tm93KG9wdGlvbnM/LmluIHx8IGRhdGUpCiAgKTsKfQp2YXIgaXNUaGlzSVNPV2Vla19kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNJU09XZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc0lTT1dlZWsuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVJU09XZWVrKCk7CiAgICBpc1RoaXNJU09XZWVrX2RlZmF1bHQgPSBpc1RoaXNJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc01pbnV0ZS5qcwpmdW5jdGlvbiBpc1RoaXNNaW51dGUoZGF0ZSkgewogIHJldHVybiBpc1NhbWVNaW51dGUoZGF0ZSwgY29uc3RydWN0Tm93KGRhdGUpKTsKfQp2YXIgaXNUaGlzTWludXRlX2RlZmF1bHQ7CnZhciBpbml0X2lzVGhpc01pbnV0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNNaW51dGUuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lTWludXRlKCk7CiAgICBpc1RoaXNNaW51dGVfZGVmYXVsdCA9IGlzVGhpc01pbnV0ZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNNb250aC5qcwpmdW5jdGlvbiBpc1RoaXNNb250aChkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZU1vbnRoKAogICAgY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBkYXRlKSwKICAgIGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKQogICk7Cn0KdmFyIGlzVGhpc01vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2lzVGhpc01vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc01vbnRoLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lTW9udGgoKTsKICAgIGlzVGhpc01vbnRoX2RlZmF1bHQgPSBpc1RoaXNNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNRdWFydGVyLmpzCmZ1bmN0aW9uIGlzVGhpc1F1YXJ0ZXIoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBpc1NhbWVRdWFydGVyKAogICAgY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBkYXRlKSwKICAgIGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKQogICk7Cn0KdmFyIGlzVGhpc1F1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfaXNUaGlzUXVhcnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNRdWFydGVyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lUXVhcnRlcigpOwogICAgaXNUaGlzUXVhcnRlcl9kZWZhdWx0ID0gaXNUaGlzUXVhcnRlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNTZWNvbmQuanMKZnVuY3Rpb24gaXNUaGlzU2Vjb25kKGRhdGUpIHsKICByZXR1cm4gaXNTYW1lU2Vjb25kKGRhdGUsIGNvbnN0cnVjdE5vdyhkYXRlKSk7Cn0KdmFyIGlzVGhpc1NlY29uZF9kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNTZWNvbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzU2Vjb25kLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBpbml0X2lzU2FtZVNlY29uZCgpOwogICAgaXNUaGlzU2Vjb25kX2RlZmF1bHQgPSBpc1RoaXNTZWNvbmQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzV2Vlay5qcwpmdW5jdGlvbiBpc1RoaXNXZWVrKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gaXNTYW1lV2VlaygKICAgIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgZGF0ZSksCiAgICBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSksCiAgICBvcHRpb25zCiAgKTsKfQp2YXIgaXNUaGlzV2Vla19kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNXZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc1dlZWsuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVXZWVrKCk7CiAgICBpc1RoaXNXZWVrX2RlZmF1bHQgPSBpc1RoaXNXZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc1llYXIuanMKZnVuY3Rpb24gaXNUaGlzWWVhcihkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZVllYXIoCiAgICBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIGRhdGUpLAogICAgY29uc3RydWN0Tm93KG9wdGlvbnM/LmluIHx8IGRhdGUpCiAgKTsKfQp2YXIgaXNUaGlzWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc1llYXIuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVZZWFyKCk7CiAgICBpc1RoaXNZZWFyX2RlZmF1bHQgPSBpc1RoaXNZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGh1cnNkYXkuanMKZnVuY3Rpb24gaXNUaHVyc2RheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF5KCkgPT09IDQ7Cn0KdmFyIGlzVGh1cnNkYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNUaHVyc2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RodXJzZGF5LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1RodXJzZGF5X2RlZmF1bHQgPSBpc1RodXJzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVG9kYXkuanMKZnVuY3Rpb24gaXNUb2RheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZURheSgKICAgIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgZGF0ZSksCiAgICBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSkKICApOwp9CnZhciBpc1RvZGF5X2RlZmF1bHQ7CnZhciBpbml0X2lzVG9kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUb2RheS5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBpbml0X2lzU2FtZURheSgpOwogICAgaXNUb2RheV9kZWZhdWx0ID0gaXNUb2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RvbW9ycm93LmpzCmZ1bmN0aW9uIGlzVG9tb3Jyb3coZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBpc1NhbWVEYXkoCiAgICBkYXRlLAogICAgYWRkRGF5cyhjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSksIDEpLAogICAgb3B0aW9ucwogICk7Cn0KdmFyIGlzVG9tb3Jyb3dfZGVmYXVsdDsKdmFyIGluaXRfaXNUb21vcnJvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RvbW9ycm93LmpzIigpIHsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lRGF5KCk7CiAgICBpc1RvbW9ycm93X2RlZmF1bHQgPSBpc1RvbW9ycm93OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVHVlc2RheS5qcwpmdW5jdGlvbiBpc1R1ZXNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpID09PSAyOwp9CnZhciBpc1R1ZXNkYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNUdWVzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVHVlc2RheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNUdWVzZGF5X2RlZmF1bHQgPSBpc1R1ZXNkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNXZWRuZXNkYXkuanMKZnVuY3Rpb24gaXNXZWRuZXNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpID09PSAzOwp9CnZhciBpc1dlZG5lc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9pc1dlZG5lc2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1dlZG5lc2RheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNXZWRuZXNkYXlfZGVmYXVsdCA9IGlzV2VkbmVzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzV2l0aGluSW50ZXJ2YWwuanMKZnVuY3Rpb24gaXNXaXRoaW5JbnRlcnZhbChkYXRlLCBpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB0aW1lID0gK3RvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgW3N0YXJ0VGltZSwgZW5kVGltZV0gPSBbCiAgICArdG9EYXRlKGludGVydmFsMy5zdGFydCwgb3B0aW9ucz8uaW4pLAogICAgK3RvRGF0ZShpbnRlcnZhbDMuZW5kLCBvcHRpb25zPy5pbikKICBdLnNvcnQoKGE1LCBiNSkgPT4gYTUgLSBiNSk7CiAgcmV0dXJuIHRpbWUgPj0gc3RhcnRUaW1lICYmIHRpbWUgPD0gZW5kVGltZTsKfQp2YXIgaXNXaXRoaW5JbnRlcnZhbF9kZWZhdWx0Owp2YXIgaW5pdF9pc1dpdGhpbkludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzV2l0aGluSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzV2l0aGluSW50ZXJ2YWxfZGVmYXVsdCA9IGlzV2l0aGluSW50ZXJ2YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViRGF5cy5qcwpmdW5jdGlvbiBzdWJEYXlzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGREYXlzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJEYXlzX2RlZmF1bHQ7CnZhciBpbml0X3N1YkRheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViRGF5cy5qcyIoKSB7CiAgICBpbml0X2FkZERheXMoKTsKICAgIHN1YkRheXNfZGVmYXVsdCA9IHN1YkRheXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNZZXN0ZXJkYXkuanMKZnVuY3Rpb24gaXNZZXN0ZXJkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBpc1NhbWVEYXkoCiAgICBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIGRhdGUpLAogICAgc3ViRGF5cyhjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSksIDEpCiAgKTsKfQp2YXIgaXNZZXN0ZXJkYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNZZXN0ZXJkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNZZXN0ZXJkYXkuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVEYXkoKTsKICAgIGluaXRfc3ViRGF5cygpOwogICAgaXNZZXN0ZXJkYXlfZGVmYXVsdCA9IGlzWWVzdGVyZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZkRlY2FkZS5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZEZWNhZGUoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTsKICBjb25zdCBkZWNhZGUgPSA5ICsgTWF0aC5mbG9vcih5ZWFyIC8gMTApICogMTA7CiAgX2RhdGUuc2V0RnVsbFllYXIoZGVjYWRlICsgMSwgMCwgMCk7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIHRvRGF0ZShfZGF0ZSwgb3B0aW9ucz8uaW4pOwp9CnZhciBsYXN0RGF5T2ZEZWNhZGVfZGVmYXVsdDsKdmFyIGluaXRfbGFzdERheU9mRGVjYWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZkRlY2FkZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgbGFzdERheU9mRGVjYWRlX2RlZmF1bHQgPSBsYXN0RGF5T2ZEZWNhZGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mV2Vlay5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZXZWVrKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IHdlZWtTdGFydHNPbiA9IG9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwOwogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBkYXkgPSBfZGF0ZS5nZXREYXkoKTsKICBjb25zdCBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IC03IDogMCkgKyA2IC0gKGRheSAtIHdlZWtTdGFydHNPbik7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBkaWZmKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGxhc3REYXlPZldlZWtfZGVmYXVsdDsKdmFyIGluaXRfbGFzdERheU9mV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZXZWVrLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBsYXN0RGF5T2ZXZWVrX2RlZmF1bHQgPSBsYXN0RGF5T2ZXZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZklTT1dlZWsuanMKZnVuY3Rpb24gbGFzdERheU9mSVNPV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGxhc3REYXlPZldlZWsoZGF0ZSwgeyAuLi5vcHRpb25zLCB3ZWVrU3RhcnRzT246IDEgfSk7Cn0KdmFyIGxhc3REYXlPZklTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfbGFzdERheU9mSVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZJU09XZWVrLmpzIigpIHsKICAgIGluaXRfbGFzdERheU9mV2VlaygpOwogICAgbGFzdERheU9mSVNPV2Vla19kZWZhdWx0ID0gbGFzdERheU9mSVNPV2VlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZJU09XZWVrWWVhci5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZJU09XZWVrWWVhcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgeWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogIGNvbnN0IGZvdXJ0aE9mSmFudWFyeSA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7CiAgZm91cnRoT2ZKYW51YXJ5LnNldEZ1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTsKICBmb3VydGhPZkphbnVhcnkuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3QgZGF0ZV8gPSBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnksIG9wdGlvbnMpOwogIGRhdGVfLnNldERhdGUoZGF0ZV8uZ2V0RGF0ZSgpIC0gMSk7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBsYXN0RGF5T2ZJU09XZWVrWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9sYXN0RGF5T2ZJU09XZWVrWWVhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZJU09XZWVrWWVhci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0SVNPV2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGxhc3REYXlPZklTT1dlZWtZZWFyX2RlZmF1bHQgPSBsYXN0RGF5T2ZJU09XZWVrWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZRdWFydGVyLmpzCmZ1bmN0aW9uIGxhc3REYXlPZlF1YXJ0ZXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBjdXJyZW50TW9udGggPSBkYXRlXy5nZXRNb250aCgpOwogIGNvbnN0IG1vbnRoID0gY3VycmVudE1vbnRoIC0gY3VycmVudE1vbnRoICUgMyArIDM7CiAgZGF0ZV8uc2V0TW9udGgobW9udGgsIDApOwogIGRhdGVfLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBkYXRlXzsKfQp2YXIgbGFzdERheU9mUXVhcnRlcl9kZWZhdWx0Owp2YXIgaW5pdF9sYXN0RGF5T2ZRdWFydGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZlF1YXJ0ZXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGxhc3REYXlPZlF1YXJ0ZXJfZGVmYXVsdCA9IGxhc3REYXlPZlF1YXJ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mWWVhci5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IGRhdGVfLmdldEZ1bGxZZWFyKCk7CiAgZGF0ZV8uc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDApOwogIGRhdGVfLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBkYXRlXzsKfQp2YXIgbGFzdERheU9mWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9sYXN0RGF5T2ZZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZlllYXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGxhc3REYXlPZlllYXJfZGVmYXVsdCA9IGxhc3REYXlPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGlnaHRGb3JtYXQuanMKZnVuY3Rpb24gbGlnaHRGb3JtYXQoZGF0ZSwgZm9ybWF0U3RyKSB7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSk7CiAgaWYgKCFpc1ZhbGlkKGRhdGVfKSkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpOwogIH0KICBjb25zdCB0b2tlbnMgPSBmb3JtYXRTdHIubWF0Y2goZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cDMpOwogIGlmICghdG9rZW5zKSByZXR1cm4gIiI7CiAgY29uc3QgcmVzdWx0ID0gdG9rZW5zLm1hcCgoc3Vic3RyaW5nKSA9PiB7CiAgICBpZiAoc3Vic3RyaW5nID09PSAiJyciKSB7CiAgICAgIHJldHVybiAiJyI7CiAgICB9CiAgICBjb25zdCBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTsKICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gIiciKSB7CiAgICAgIHJldHVybiBjbGVhbkVzY2FwZWRTdHJpbmczKHN1YnN0cmluZyk7CiAgICB9CiAgICBjb25zdCBmb3JtYXR0ZXIyID0gbGlnaHRGb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTsKICAgIGlmIChmb3JtYXR0ZXIyKSB7CiAgICAgIHJldHVybiBmb3JtYXR0ZXIyKGRhdGVfLCBzdWJzdHJpbmcpOwogICAgfQogICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwMykpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoCiAgICAgICAgIkZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgIiArIGZpcnN0Q2hhcmFjdGVyICsgImAiCiAgICAgICk7CiAgICB9CiAgICByZXR1cm4gc3Vic3RyaW5nOwogIH0pLmpvaW4oIiIpOwogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nMyhpbnB1dCkgewogIGNvbnN0IG1hdGNoZXMgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwMyk7CiAgaWYgKCFtYXRjaGVzKSByZXR1cm4gaW5wdXQ7CiAgcmV0dXJuIG1hdGNoZXNbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cDMsICInIik7Cn0KdmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAzLCBlc2NhcGVkU3RyaW5nUmVnRXhwMywgZG91YmxlUXVvdGVSZWdFeHAzLCB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cDMsIGxpZ2h0Rm9ybWF0X2RlZmF1bHQ7CnZhciBpbml0X2xpZ2h0Rm9ybWF0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xpZ2h0Rm9ybWF0LmpzIigpIHsKICAgIGluaXRfbGlnaHRGb3JtYXR0ZXJzKCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwMyA9IC8oXHcpXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nOwogICAgZXNjYXBlZFN0cmluZ1JlZ0V4cDMgPSAvXicoW15dKj8pJz8kLzsKICAgIGRvdWJsZVF1b3RlUmVnRXhwMyA9IC8nJy9nOwogICAgdW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAzID0gL1thLXpBLVpdLzsKICAgIGxpZ2h0Rm9ybWF0X2RlZmF1bHQgPSBsaWdodEZvcm1hdDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taWxsaXNlY29uZHMuanMKZnVuY3Rpb24gbWlsbGlzZWNvbmRzKHsKICB5ZWFycywKICBtb250aHM6IG1vbnRoczIsCiAgd2Vla3MsCiAgZGF5czogZGF5czIsCiAgaG91cnMsCiAgbWludXRlcywKICBzZWNvbmRzCn0pIHsKICBsZXQgdG90YWxEYXlzID0gMDsKICBpZiAoeWVhcnMpIHRvdGFsRGF5cyArPSB5ZWFycyAqIGRheXNJblllYXI7CiAgaWYgKG1vbnRoczIpIHRvdGFsRGF5cyArPSBtb250aHMyICogKGRheXNJblllYXIgLyAxMik7CiAgaWYgKHdlZWtzKSB0b3RhbERheXMgKz0gd2Vla3MgKiA3OwogIGlmIChkYXlzMikgdG90YWxEYXlzICs9IGRheXMyOwogIGxldCB0b3RhbFNlY29uZHMgPSB0b3RhbERheXMgKiAyNCAqIDYwICogNjA7CiAgaWYgKGhvdXJzKSB0b3RhbFNlY29uZHMgKz0gaG91cnMgKiA2MCAqIDYwOwogIGlmIChtaW51dGVzKSB0b3RhbFNlY29uZHMgKz0gbWludXRlcyAqIDYwOwogIGlmIChzZWNvbmRzKSB0b3RhbFNlY29uZHMgKz0gc2Vjb25kczsKICByZXR1cm4gTWF0aC50cnVuYyh0b3RhbFNlY29uZHMgKiAxZTMpOwp9CnZhciBtaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfbWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBtaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWlsbGlzZWNvbmRzVG9Ib3Vycy5qcwpmdW5jdGlvbiBtaWxsaXNlY29uZHNUb0hvdXJzKG1pbGxpc2Vjb25kczIpIHsKICBjb25zdCBob3VycyA9IG1pbGxpc2Vjb25kczIgLyBtaWxsaXNlY29uZHNJbkhvdXI7CiAgcmV0dXJuIE1hdGgudHJ1bmMoaG91cnMpOwp9CnZhciBtaWxsaXNlY29uZHNUb0hvdXJzX2RlZmF1bHQ7CnZhciBpbml0X21pbGxpc2Vjb25kc1RvSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWlsbGlzZWNvbmRzVG9Ib3Vycy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWlsbGlzZWNvbmRzVG9Ib3Vyc19kZWZhdWx0ID0gbWlsbGlzZWNvbmRzVG9Ib3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taWxsaXNlY29uZHNUb01pbnV0ZXMuanMKZnVuY3Rpb24gbWlsbGlzZWNvbmRzVG9NaW51dGVzKG1pbGxpc2Vjb25kczIpIHsKICBjb25zdCBtaW51dGVzID0gbWlsbGlzZWNvbmRzMiAvIG1pbGxpc2Vjb25kc0luTWludXRlOwogIHJldHVybiBNYXRoLnRydW5jKG1pbnV0ZXMpOwp9CnZhciBtaWxsaXNlY29uZHNUb01pbnV0ZXNfZGVmYXVsdDsKdmFyIGluaXRfbWlsbGlzZWNvbmRzVG9NaW51dGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbGxpc2Vjb25kc1RvTWludXRlcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWlsbGlzZWNvbmRzVG9NaW51dGVzX2RlZmF1bHQgPSBtaWxsaXNlY29uZHNUb01pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWlsbGlzZWNvbmRzVG9TZWNvbmRzLmpzCmZ1bmN0aW9uIG1pbGxpc2Vjb25kc1RvU2Vjb25kcyhtaWxsaXNlY29uZHMyKSB7CiAgY29uc3Qgc2Vjb25kcyA9IG1pbGxpc2Vjb25kczIgLyBtaWxsaXNlY29uZHNJblNlY29uZDsKICByZXR1cm4gTWF0aC50cnVuYyhzZWNvbmRzKTsKfQp2YXIgbWlsbGlzZWNvbmRzVG9TZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X21pbGxpc2Vjb25kc1RvU2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taWxsaXNlY29uZHNUb1NlY29uZHMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIG1pbGxpc2Vjb25kc1RvU2Vjb25kc19kZWZhdWx0ID0gbWlsbGlzZWNvbmRzVG9TZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbnV0ZXNUb0hvdXJzLmpzCmZ1bmN0aW9uIG1pbnV0ZXNUb0hvdXJzKG1pbnV0ZXMpIHsKICBjb25zdCBob3VycyA9IG1pbnV0ZXMgLyBtaW51dGVzSW5Ib3VyOwogIHJldHVybiBNYXRoLnRydW5jKGhvdXJzKTsKfQp2YXIgbWludXRlc1RvSG91cnNfZGVmYXVsdDsKdmFyIGluaXRfbWludXRlc1RvSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWludXRlc1RvSG91cnMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIG1pbnV0ZXNUb0hvdXJzX2RlZmF1bHQgPSBtaW51dGVzVG9Ib3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taW51dGVzVG9NaWxsaXNlY29uZHMuanMKZnVuY3Rpb24gbWludXRlc1RvTWlsbGlzZWNvbmRzKG1pbnV0ZXMpIHsKICByZXR1cm4gTWF0aC50cnVuYyhtaW51dGVzICogbWlsbGlzZWNvbmRzSW5NaW51dGUpOwp9CnZhciBtaW51dGVzVG9NaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfbWludXRlc1RvTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbnV0ZXNUb01pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWludXRlc1RvTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBtaW51dGVzVG9NaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWludXRlc1RvU2Vjb25kcy5qcwpmdW5jdGlvbiBtaW51dGVzVG9TZWNvbmRzKG1pbnV0ZXMpIHsKICByZXR1cm4gTWF0aC50cnVuYyhtaW51dGVzICogc2Vjb25kc0luTWludXRlKTsKfQp2YXIgbWludXRlc1RvU2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9taW51dGVzVG9TZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbnV0ZXNUb1NlY29uZHMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIG1pbnV0ZXNUb1NlY29uZHNfZGVmYXVsdCA9IG1pbnV0ZXNUb1NlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbW9udGhzVG9RdWFydGVycy5qcwpmdW5jdGlvbiBtb250aHNUb1F1YXJ0ZXJzKG1vbnRoczIpIHsKICBjb25zdCBxdWFydGVycyA9IG1vbnRoczIgLyBtb250aHNJblF1YXJ0ZXI7CiAgcmV0dXJuIE1hdGgudHJ1bmMocXVhcnRlcnMpOwp9CnZhciBtb250aHNUb1F1YXJ0ZXJzX2RlZmF1bHQ7CnZhciBpbml0X21vbnRoc1RvUXVhcnRlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbW9udGhzVG9RdWFydGVycy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbW9udGhzVG9RdWFydGVyc19kZWZhdWx0ID0gbW9udGhzVG9RdWFydGVyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tb250aHNUb1llYXJzLmpzCmZ1bmN0aW9uIG1vbnRoc1RvWWVhcnMobW9udGhzMikgewogIGNvbnN0IHllYXJzID0gbW9udGhzMiAvIG1vbnRoc0luWWVhcjsKICByZXR1cm4gTWF0aC50cnVuYyh5ZWFycyk7Cn0KdmFyIG1vbnRoc1RvWWVhcnNfZGVmYXVsdDsKdmFyIGluaXRfbW9udGhzVG9ZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tb250aHNUb1llYXJzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBtb250aHNUb1llYXJzX2RlZmF1bHQgPSBtb250aHNUb1llYXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHREYXkuanMKZnVuY3Rpb24gbmV4dERheShkYXRlLCBkYXksIG9wdGlvbnMpIHsKICBsZXQgZGVsdGEgPSBkYXkgLSBnZXREYXkoZGF0ZSwgb3B0aW9ucyk7CiAgaWYgKGRlbHRhIDw9IDApIGRlbHRhICs9IDc7CiAgcmV0dXJuIGFkZERheXMoZGF0ZSwgZGVsdGEsIG9wdGlvbnMpOwp9CnZhciBuZXh0RGF5X2RlZmF1bHQ7CnZhciBpbml0X25leHREYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dERheS5qcyIoKSB7CiAgICBpbml0X2FkZERheXMoKTsKICAgIGluaXRfZ2V0RGF5KCk7CiAgICBuZXh0RGF5X2RlZmF1bHQgPSBuZXh0RGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRGcmlkYXkuanMKZnVuY3Rpb24gbmV4dEZyaWRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIG5leHREYXkoZGF0ZSwgNSwgb3B0aW9ucyk7Cn0KdmFyIG5leHRGcmlkYXlfZGVmYXVsdDsKdmFyIGluaXRfbmV4dEZyaWRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0RnJpZGF5LmpzIigpIHsKICAgIGluaXRfbmV4dERheSgpOwogICAgbmV4dEZyaWRheV9kZWZhdWx0ID0gbmV4dEZyaWRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0TW9uZGF5LmpzCmZ1bmN0aW9uIG5leHRNb25kYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBuZXh0RGF5KGRhdGUsIDEsIG9wdGlvbnMpOwp9CnZhciBuZXh0TW9uZGF5X2RlZmF1bHQ7CnZhciBpbml0X25leHRNb25kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dE1vbmRheS5qcyIoKSB7CiAgICBpbml0X25leHREYXkoKTsKICAgIG5leHRNb25kYXlfZGVmYXVsdCA9IG5leHRNb25kYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFNhdHVyZGF5LmpzCmZ1bmN0aW9uIG5leHRTYXR1cmRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIG5leHREYXkoZGF0ZSwgNiwgb3B0aW9ucyk7Cn0KdmFyIG5leHRTYXR1cmRheV9kZWZhdWx0Owp2YXIgaW5pdF9uZXh0U2F0dXJkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFNhdHVyZGF5LmpzIigpIHsKICAgIGluaXRfbmV4dERheSgpOwogICAgbmV4dFNhdHVyZGF5X2RlZmF1bHQgPSBuZXh0U2F0dXJkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFN1bmRheS5qcwpmdW5jdGlvbiBuZXh0U3VuZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gbmV4dERheShkYXRlLCAwLCBvcHRpb25zKTsKfQp2YXIgbmV4dFN1bmRheV9kZWZhdWx0Owp2YXIgaW5pdF9uZXh0U3VuZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRTdW5kYXkuanMiKCkgewogICAgaW5pdF9uZXh0RGF5KCk7CiAgICBuZXh0U3VuZGF5X2RlZmF1bHQgPSBuZXh0U3VuZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRUaHVyc2RheS5qcwpmdW5jdGlvbiBuZXh0VGh1cnNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBuZXh0RGF5KGRhdGUsIDQsIG9wdGlvbnMpOwp9CnZhciBuZXh0VGh1cnNkYXlfZGVmYXVsdDsKdmFyIGluaXRfbmV4dFRodXJzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRUaHVyc2RheS5qcyIoKSB7CiAgICBpbml0X25leHREYXkoKTsKICAgIG5leHRUaHVyc2RheV9kZWZhdWx0ID0gbmV4dFRodXJzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRUdWVzZGF5LmpzCmZ1bmN0aW9uIG5leHRUdWVzZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gbmV4dERheShkYXRlLCAyLCBvcHRpb25zKTsKfQp2YXIgbmV4dFR1ZXNkYXlfZGVmYXVsdDsKdmFyIGluaXRfbmV4dFR1ZXNkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFR1ZXNkYXkuanMiKCkgewogICAgaW5pdF9uZXh0RGF5KCk7CiAgICBuZXh0VHVlc2RheV9kZWZhdWx0ID0gbmV4dFR1ZXNkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFdlZG5lc2RheS5qcwpmdW5jdGlvbiBuZXh0V2VkbmVzZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gbmV4dERheShkYXRlLCAzLCBvcHRpb25zKTsKfQp2YXIgbmV4dFdlZG5lc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9uZXh0V2VkbmVzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRXZWRuZXNkYXkuanMiKCkgewogICAgaW5pdF9uZXh0RGF5KCk7CiAgICBuZXh0V2VkbmVzZGF5X2RlZmF1bHQgPSBuZXh0V2VkbmVzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlSVNPLmpzCmZ1bmN0aW9uIHBhcnNlSVNPKGFyZ3VtZW50LCBvcHRpb25zKSB7CiAgY29uc3QgaW52YWxpZERhdGUgPSAoKSA9PiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCBOYU4pOwogIGNvbnN0IGFkZGl0aW9uYWxEaWdpdHMgPSBvcHRpb25zPy5hZGRpdGlvbmFsRGlnaXRzID8/IDI7CiAgY29uc3QgZGF0ZVN0cmluZ3MgPSBzcGxpdERhdGVTdHJpbmcoYXJndW1lbnQpOwogIGxldCBkYXRlOwogIGlmIChkYXRlU3RyaW5ncy5kYXRlKSB7CiAgICBjb25zdCBwYXJzZVllYXJSZXN1bHQgPSBwYXJzZVllYXIoZGF0ZVN0cmluZ3MuZGF0ZSwgYWRkaXRpb25hbERpZ2l0cyk7CiAgICBkYXRlID0gcGFyc2VEYXRlKHBhcnNlWWVhclJlc3VsdC5yZXN0RGF0ZVN0cmluZywgcGFyc2VZZWFyUmVzdWx0LnllYXIpOwogIH0KICBpZiAoIWRhdGUgfHwgaXNOYU4oK2RhdGUpKSByZXR1cm4gaW52YWxpZERhdGUoKTsKICBjb25zdCB0aW1lc3RhbXAyID0gK2RhdGU7CiAgbGV0IHRpbWUgPSAwOwogIGxldCBvZmZzZXQ7CiAgaWYgKGRhdGVTdHJpbmdzLnRpbWUpIHsKICAgIHRpbWUgPSBwYXJzZVRpbWUoZGF0ZVN0cmluZ3MudGltZSk7CiAgICBpZiAoaXNOYU4odGltZSkpIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogIH0KICBpZiAoZGF0ZVN0cmluZ3MudGltZXpvbmUpIHsKICAgIG9mZnNldCA9IHBhcnNlVGltZXpvbmUoZGF0ZVN0cmluZ3MudGltZXpvbmUpOwogICAgaWYgKGlzTmFOKG9mZnNldCkpIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogIH0gZWxzZSB7CiAgICBjb25zdCB0bXBEYXRlID0gbmV3IERhdGUodGltZXN0YW1wMiArIHRpbWUpOwogICAgY29uc3QgcmVzdWx0ID0gdG9EYXRlKDAsIG9wdGlvbnM/LmluKTsKICAgIHJlc3VsdC5zZXRGdWxsWWVhcigKICAgICAgdG1wRGF0ZS5nZXRVVENGdWxsWWVhcigpLAogICAgICB0bXBEYXRlLmdldFVUQ01vbnRoKCksCiAgICAgIHRtcERhdGUuZ2V0VVRDRGF0ZSgpCiAgICApOwogICAgcmVzdWx0LnNldEhvdXJzKAogICAgICB0bXBEYXRlLmdldFVUQ0hvdXJzKCksCiAgICAgIHRtcERhdGUuZ2V0VVRDTWludXRlcygpLAogICAgICB0bXBEYXRlLmdldFVUQ1NlY29uZHMoKSwKICAgICAgdG1wRGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKQogICAgKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHJldHVybiB0b0RhdGUodGltZXN0YW1wMiArIHRpbWUgKyBvZmZzZXQsIG9wdGlvbnM/LmluKTsKfQpmdW5jdGlvbiBzcGxpdERhdGVTdHJpbmcoZGF0ZVN0cmluZykgewogIGNvbnN0IGRhdGVTdHJpbmdzID0ge307CiAgY29uc3QgYXJyYXkgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLmRhdGVUaW1lRGVsaW1pdGVyKTsKICBsZXQgdGltZVN0cmluZzsKICBpZiAoYXJyYXkubGVuZ3RoID4gMikgewogICAgcmV0dXJuIGRhdGVTdHJpbmdzOwogIH0KICBpZiAoLzovLnRlc3QoYXJyYXlbMF0pKSB7CiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMF07CiAgfSBlbHNlIHsKICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBhcnJheVswXTsKICAgIHRpbWVTdHJpbmcgPSBhcnJheVsxXTsKICAgIGlmIChwYXR0ZXJucy50aW1lWm9uZURlbGltaXRlci50ZXN0KGRhdGVTdHJpbmdzLmRhdGUpKSB7CiAgICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLnRpbWVab25lRGVsaW1pdGVyKVswXTsKICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmcuc3Vic3RyKAogICAgICAgIGRhdGVTdHJpbmdzLmRhdGUubGVuZ3RoLAogICAgICAgIGRhdGVTdHJpbmcubGVuZ3RoCiAgICAgICk7CiAgICB9CiAgfQogIGlmICh0aW1lU3RyaW5nKSB7CiAgICBjb25zdCB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lLmV4ZWModGltZVN0cmluZyk7CiAgICBpZiAodG9rZW4pIHsKICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmcucmVwbGFjZSh0b2tlblsxXSwgIiIpOwogICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IHRva2VuWzFdOwogICAgfSBlbHNlIHsKICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmc7CiAgICB9CiAgfQogIHJldHVybiBkYXRlU3RyaW5nczsKfQpmdW5jdGlvbiBwYXJzZVllYXIoZGF0ZVN0cmluZywgYWRkaXRpb25hbERpZ2l0cykgewogIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgKICAgICJeKD86KFxcZHs0fXxbKy1dXFxkeyIgKyAoNCArIGFkZGl0aW9uYWxEaWdpdHMpICsgIn0pfChcXGR7Mn18WystXVxcZHsiICsgKDIgKyBhZGRpdGlvbmFsRGlnaXRzKSArICJ9KSQpIgogICk7CiAgY29uc3QgY2FwdHVyZXMgPSBkYXRlU3RyaW5nLm1hdGNoKHJlZ2V4KTsKICBpZiAoIWNhcHR1cmVzKSByZXR1cm4geyB5ZWFyOiBOYU4sIHJlc3REYXRlU3RyaW5nOiAiIiB9OwogIGNvbnN0IHllYXIgPSBjYXB0dXJlc1sxXSA/IHBhcnNlSW50KGNhcHR1cmVzWzFdKSA6IG51bGw7CiAgY29uc3QgY2VudHVyeSA9IGNhcHR1cmVzWzJdID8gcGFyc2VJbnQoY2FwdHVyZXNbMl0pIDogbnVsbDsKICByZXR1cm4gewogICAgeWVhcjogY2VudHVyeSA9PT0gbnVsbCA/IHllYXIgOiBjZW50dXJ5ICogMTAwLAogICAgcmVzdERhdGVTdHJpbmc6IGRhdGVTdHJpbmcuc2xpY2UoKGNhcHR1cmVzWzFdIHx8IGNhcHR1cmVzWzJdKS5sZW5ndGgpCiAgfTsKfQpmdW5jdGlvbiBwYXJzZURhdGUoZGF0ZVN0cmluZywgeWVhcikgewogIGlmICh5ZWFyID09PSBudWxsKSByZXR1cm4gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7CiAgY29uc3QgY2FwdHVyZXMgPSBkYXRlU3RyaW5nLm1hdGNoKGRhdGVSZWdleCk7CiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShOYU4pOwogIGNvbnN0IGlzV2Vla0RhdGUgPSAhIWNhcHR1cmVzWzRdOwogIGNvbnN0IGRheU9mWWVhciA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbMV0pOwogIGNvbnN0IG1vbnRoID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1syXSkgLSAxOwogIGNvbnN0IGRheSA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbM10pOwogIGNvbnN0IHdlZWsgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzRdKTsKICBjb25zdCBkYXlPZldlZWsgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzVdKSAtIDE7CiAgaWYgKGlzV2Vla0RhdGUpIHsKICAgIGlmICghdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXlPZldlZWspKSB7CiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoTmFOKTsKICAgIH0KICAgIHJldHVybiBkYXlPZklTT1dlZWtZZWFyKHllYXIsIHdlZWssIGRheU9mV2Vlayk7CiAgfSBlbHNlIHsKICAgIGNvbnN0IGRhdGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoMCk7CiAgICBpZiAoIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF5KSB8fCAhdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikpIHsKICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShOYU4pOwogICAgfQogICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgTWF0aC5tYXgoZGF5T2ZZZWFyLCBkYXkpKTsKICAgIHJldHVybiBkYXRlOwogIH0KfQpmdW5jdGlvbiBwYXJzZURhdGVVbml0KHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgPyBwYXJzZUludCh2YWx1ZTIpIDogMTsKfQpmdW5jdGlvbiBwYXJzZVRpbWUodGltZVN0cmluZykgewogIGNvbnN0IGNhcHR1cmVzID0gdGltZVN0cmluZy5tYXRjaCh0aW1lUmVnZXgpOwogIGlmICghY2FwdHVyZXMpIHJldHVybiBOYU47CiAgY29uc3QgaG91cnMgPSBwYXJzZVRpbWVVbml0KGNhcHR1cmVzWzFdKTsKICBjb25zdCBtaW51dGVzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1syXSk7CiAgY29uc3Qgc2Vjb25kcyA9IHBhcnNlVGltZVVuaXQoY2FwdHVyZXNbM10pOwogIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSkgewogICAgcmV0dXJuIE5hTjsKICB9CiAgcmV0dXJuIGhvdXJzICogbWlsbGlzZWNvbmRzSW5Ib3VyICsgbWludXRlcyAqIG1pbGxpc2Vjb25kc0luTWludXRlICsgc2Vjb25kcyAqIDFlMzsKfQpmdW5jdGlvbiBwYXJzZVRpbWVVbml0KHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgJiYgcGFyc2VGbG9hdCh2YWx1ZTIucmVwbGFjZSgiLCIsICIuIikpIHx8IDA7Cn0KZnVuY3Rpb24gcGFyc2VUaW1lem9uZSh0aW1lem9uZVN0cmluZykgewogIGlmICh0aW1lem9uZVN0cmluZyA9PT0gIloiKSByZXR1cm4gMDsKICBjb25zdCBjYXB0dXJlcyA9IHRpbWV6b25lU3RyaW5nLm1hdGNoKHRpbWV6b25lUmVnZXgpOwogIGlmICghY2FwdHVyZXMpIHJldHVybiAwOwogIGNvbnN0IHNpZ24gPSBjYXB0dXJlc1sxXSA9PT0gIisiID8gLTEgOiAxOwogIGNvbnN0IGhvdXJzID0gcGFyc2VJbnQoY2FwdHVyZXNbMl0pOwogIGNvbnN0IG1pbnV0ZXMgPSBjYXB0dXJlc1szXSAmJiBwYXJzZUludChjYXB0dXJlc1szXSkgfHwgMDsKICBpZiAoIXZhbGlkYXRlVGltZXpvbmUoaG91cnMsIG1pbnV0ZXMpKSB7CiAgICByZXR1cm4gTmFOOwogIH0KICByZXR1cm4gc2lnbiAqIChob3VycyAqIG1pbGxpc2Vjb25kc0luSG91ciArIG1pbnV0ZXMgKiBtaWxsaXNlY29uZHNJbk1pbnV0ZSk7Cn0KZnVuY3Rpb24gZGF5T2ZJU09XZWVrWWVhcihpc29XZWVrWWVhciwgd2VlaywgZGF5KSB7CiAgY29uc3QgZGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgwKTsKICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGlzb1dlZWtZZWFyLCAwLCA0KTsKICBjb25zdCBmb3VydGhPZkphbnVhcnlEYXkgPSBkYXRlLmdldFVUQ0RheSgpIHx8IDc7CiAgY29uc3QgZGlmZiA9ICh3ZWVrIC0gMSkgKiA3ICsgZGF5ICsgMSAtIGZvdXJ0aE9mSmFudWFyeURheTsKICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBkaWZmKTsKICByZXR1cm4gZGF0ZTsKfQpmdW5jdGlvbiBpc0xlYXBZZWFySW5kZXgyKHllYXIpIHsKICByZXR1cm4geWVhciAlIDQwMCA9PT0gMCB8fCB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwOwp9CmZ1bmN0aW9uIHZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSkgewogIHJldHVybiBtb250aCA+PSAwICYmIG1vbnRoIDw9IDExICYmIGRhdGUgPj0gMSAmJiBkYXRlIDw9IChkYXlzSW5Nb250aHNbbW9udGhdIHx8IChpc0xlYXBZZWFySW5kZXgyKHllYXIpID8gMjkgOiAyOCkpOwp9CmZ1bmN0aW9uIHZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpIHsKICByZXR1cm4gZGF5T2ZZZWFyID49IDEgJiYgZGF5T2ZZZWFyIDw9IChpc0xlYXBZZWFySW5kZXgyKHllYXIpID8gMzY2IDogMzY1KTsKfQpmdW5jdGlvbiB2YWxpZGF0ZVdlZWtEYXRlKF95ZWFyLCB3ZWVrLCBkYXkpIHsKICByZXR1cm4gd2VlayA+PSAxICYmIHdlZWsgPD0gNTMgJiYgZGF5ID49IDAgJiYgZGF5IDw9IDY7Cn0KZnVuY3Rpb24gdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7CiAgaWYgKGhvdXJzID09PSAyNCkgewogICAgcmV0dXJuIG1pbnV0ZXMgPT09IDAgJiYgc2Vjb25kcyA9PT0gMDsKICB9CiAgcmV0dXJuIHNlY29uZHMgPj0gMCAmJiBzZWNvbmRzIDwgNjAgJiYgbWludXRlcyA+PSAwICYmIG1pbnV0ZXMgPCA2MCAmJiBob3VycyA+PSAwICYmIGhvdXJzIDwgMjU7Cn0KZnVuY3Rpb24gdmFsaWRhdGVUaW1lem9uZShfaG91cnMsIG1pbnV0ZXMpIHsKICByZXR1cm4gbWludXRlcyA+PSAwICYmIG1pbnV0ZXMgPD0gNTk7Cn0KdmFyIHBhdHRlcm5zLCBkYXRlUmVnZXgsIHRpbWVSZWdleCwgdGltZXpvbmVSZWdleCwgZGF5c0luTW9udGhzLCBwYXJzZUlTT19kZWZhdWx0Owp2YXIgaW5pdF9wYXJzZUlTTyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZUlTTy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgcGF0dGVybnMgPSB7CiAgICAgIGRhdGVUaW1lRGVsaW1pdGVyOiAvW1QgXS8sCiAgICAgIHRpbWVab25lRGVsaW1pdGVyOiAvW1ogXS9pLAogICAgICB0aW1lem9uZTogLyhbWistXS4qKSQvCiAgICB9OwogICAgZGF0ZVJlZ2V4ID0gL14tPyg/OihcZHszfSl8KFxkezJ9KSg/Oi0/KFxkezJ9KSk/fFcoXGR7Mn0pKD86LT8oXGR7MX0pKT98KSQvOwogICAgdGltZVJlZ2V4ID0gL14oXGR7Mn0oPzpbLixdXGQqKT8pKD86Oj8oXGR7Mn0oPzpbLixdXGQqKT8pKT8oPzo6PyhcZHsyfSg/OlsuLF1cZCopPykpPyQvOwogICAgdGltZXpvbmVSZWdleCA9IC9eKFsrLV0pKFxkezJ9KSg/Ojo/KFxkezJ9KSk/JC87CiAgICBkYXlzSW5Nb250aHMgPSBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTsKICAgIHBhcnNlSVNPX2RlZmF1bHQgPSBwYXJzZUlTTzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZUpTT04uanMKZnVuY3Rpb24gcGFyc2VKU09OKGRhdGVTdHIsIG9wdGlvbnMpIHsKICBjb25zdCBwYXJ0cyA9IGRhdGVTdHIubWF0Y2goCiAgICAvKFxkezR9KS0oXGR7Mn0pLShcZHsyfSlbVCBdKFxkezJ9KTooXGR7Mn0pOihcZHsyfSkoPzpcLihcZHswLDd9KSk/KD86WnwoLikoXGR7Mn0pOj8oXGR7Mn0pPyk/LwogICk7CiAgaWYgKCFwYXJ0cykgcmV0dXJuIHRvRGF0ZShOYU4sIG9wdGlvbnM/LmluKTsKICByZXR1cm4gdG9EYXRlKAogICAgRGF0ZS5VVEMoCiAgICAgICtwYXJ0c1sxXSwKICAgICAgK3BhcnRzWzJdIC0gMSwKICAgICAgK3BhcnRzWzNdLAogICAgICArcGFydHNbNF0gLSAoK3BhcnRzWzldIHx8IDApICogKHBhcnRzWzhdID09ICItIiA/IC0xIDogMSksCiAgICAgICtwYXJ0c1s1XSAtICgrcGFydHNbMTBdIHx8IDApICogKHBhcnRzWzhdID09ICItIiA/IC0xIDogMSksCiAgICAgICtwYXJ0c1s2XSwKICAgICAgKygocGFydHNbN10gfHwgIjAiKSArICIwMCIpLnN1YnN0cmluZygwLCAzKQogICAgKSwKICAgIG9wdGlvbnM/LmluCiAgKTsKfQp2YXIgcGFyc2VKU09OX2RlZmF1bHQ7CnZhciBpbml0X3BhcnNlSlNPTiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZUpTT04uanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHBhcnNlSlNPTl9kZWZhdWx0ID0gcGFyc2VKU09OOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzRGF5LmpzCmZ1bmN0aW9uIHByZXZpb3VzRGF5KGRhdGUsIGRheSwgb3B0aW9ucykgewogIGxldCBkZWx0YSA9IGdldERheShkYXRlLCBvcHRpb25zKSAtIGRheTsKICBpZiAoZGVsdGEgPD0gMCkgZGVsdGEgKz0gNzsKICByZXR1cm4gc3ViRGF5cyhkYXRlLCBkZWx0YSwgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzRGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzRGF5LmpzIigpIHsKICAgIGluaXRfZ2V0RGF5KCk7CiAgICBpbml0X3N1YkRheXMoKTsKICAgIHByZXZpb3VzRGF5X2RlZmF1bHQgPSBwcmV2aW91c0RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c0ZyaWRheS5qcwpmdW5jdGlvbiBwcmV2aW91c0ZyaWRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHByZXZpb3VzRGF5KGRhdGUsIDUsIG9wdGlvbnMpOwp9CnZhciBwcmV2aW91c0ZyaWRheV9kZWZhdWx0Owp2YXIgaW5pdF9wcmV2aW91c0ZyaWRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c0ZyaWRheS5qcyIoKSB7CiAgICBpbml0X3ByZXZpb3VzRGF5KCk7CiAgICBwcmV2aW91c0ZyaWRheV9kZWZhdWx0ID0gcHJldmlvdXNGcmlkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNNb25kYXkuanMKZnVuY3Rpb24gcHJldmlvdXNNb25kYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBwcmV2aW91c0RheShkYXRlLCAxLCBvcHRpb25zKTsKfQp2YXIgcHJldmlvdXNNb25kYXlfZGVmYXVsdDsKdmFyIGluaXRfcHJldmlvdXNNb25kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNNb25kYXkuanMiKCkgewogICAgaW5pdF9wcmV2aW91c0RheSgpOwogICAgcHJldmlvdXNNb25kYXlfZGVmYXVsdCA9IHByZXZpb3VzTW9uZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzU2F0dXJkYXkuanMKZnVuY3Rpb24gcHJldmlvdXNTYXR1cmRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHByZXZpb3VzRGF5KGRhdGUsIDYsIG9wdGlvbnMpOwp9CnZhciBwcmV2aW91c1NhdHVyZGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzU2F0dXJkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNTYXR1cmRheS5qcyIoKSB7CiAgICBpbml0X3ByZXZpb3VzRGF5KCk7CiAgICBwcmV2aW91c1NhdHVyZGF5X2RlZmF1bHQgPSBwcmV2aW91c1NhdHVyZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzU3VuZGF5LmpzCmZ1bmN0aW9uIHByZXZpb3VzU3VuZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gcHJldmlvdXNEYXkoZGF0ZSwgMCwgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzU3VuZGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzU3VuZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzU3VuZGF5LmpzIigpIHsKICAgIGluaXRfcHJldmlvdXNEYXkoKTsKICAgIHByZXZpb3VzU3VuZGF5X2RlZmF1bHQgPSBwcmV2aW91c1N1bmRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c1RodXJzZGF5LmpzCmZ1bmN0aW9uIHByZXZpb3VzVGh1cnNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBwcmV2aW91c0RheShkYXRlLCA0LCBvcHRpb25zKTsKfQp2YXIgcHJldmlvdXNUaHVyc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9wcmV2aW91c1RodXJzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzVGh1cnNkYXkuanMiKCkgewogICAgaW5pdF9wcmV2aW91c0RheSgpOwogICAgcHJldmlvdXNUaHVyc2RheV9kZWZhdWx0ID0gcHJldmlvdXNUaHVyc2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c1R1ZXNkYXkuanMKZnVuY3Rpb24gcHJldmlvdXNUdWVzZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gcHJldmlvdXNEYXkoZGF0ZSwgMiwgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzVHVlc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9wcmV2aW91c1R1ZXNkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNUdWVzZGF5LmpzIigpIHsKICAgIGluaXRfcHJldmlvdXNEYXkoKTsKICAgIHByZXZpb3VzVHVlc2RheV9kZWZhdWx0ID0gcHJldmlvdXNUdWVzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzV2VkbmVzZGF5LmpzCmZ1bmN0aW9uIHByZXZpb3VzV2VkbmVzZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gcHJldmlvdXNEYXkoZGF0ZSwgMywgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzV2VkbmVzZGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzV2VkbmVzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzV2VkbmVzZGF5LmpzIigpIHsKICAgIGluaXRfcHJldmlvdXNEYXkoKTsKICAgIHByZXZpb3VzV2VkbmVzZGF5X2RlZmF1bHQgPSBwcmV2aW91c1dlZG5lc2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9xdWFydGVyc1RvTW9udGhzLmpzCmZ1bmN0aW9uIHF1YXJ0ZXJzVG9Nb250aHMocXVhcnRlcnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyhxdWFydGVycyAqIG1vbnRoc0luUXVhcnRlcik7Cn0KdmFyIHF1YXJ0ZXJzVG9Nb250aHNfZGVmYXVsdDsKdmFyIGluaXRfcXVhcnRlcnNUb01vbnRocyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9xdWFydGVyc1RvTW9udGhzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBxdWFydGVyc1RvTW9udGhzX2RlZmF1bHQgPSBxdWFydGVyc1RvTW9udGhzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3F1YXJ0ZXJzVG9ZZWFycy5qcwpmdW5jdGlvbiBxdWFydGVyc1RvWWVhcnMocXVhcnRlcnMpIHsKICBjb25zdCB5ZWFycyA9IHF1YXJ0ZXJzIC8gcXVhcnRlcnNJblllYXI7CiAgcmV0dXJuIE1hdGgudHJ1bmMoeWVhcnMpOwp9CnZhciBxdWFydGVyc1RvWWVhcnNfZGVmYXVsdDsKdmFyIGluaXRfcXVhcnRlcnNUb1llYXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3F1YXJ0ZXJzVG9ZZWFycy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgcXVhcnRlcnNUb1llYXJzX2RlZmF1bHQgPSBxdWFydGVyc1RvWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcm91bmRUb05lYXJlc3RIb3Vycy5qcwpmdW5jdGlvbiByb3VuZFRvTmVhcmVzdEhvdXJzKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBuZWFyZXN0VG8gPSBvcHRpb25zPy5uZWFyZXN0VG8gPz8gMTsKICBpZiAobmVhcmVzdFRvIDwgMSB8fCBuZWFyZXN0VG8gPiAxMikKICAgIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIE5hTik7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGZyYWN0aW9uYWxNaW51dGVzID0gZGF0ZV8uZ2V0TWludXRlcygpIC8gNjA7CiAgY29uc3QgZnJhY3Rpb25hbFNlY29uZHMgPSBkYXRlXy5nZXRTZWNvbmRzKCkgLyA2MCAvIDYwOwogIGNvbnN0IGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgPSBkYXRlXy5nZXRNaWxsaXNlY29uZHMoKSAvIDFlMyAvIDYwIC8gNjA7CiAgY29uc3QgaG91cnMgPSBkYXRlXy5nZXRIb3VycygpICsgZnJhY3Rpb25hbE1pbnV0ZXMgKyBmcmFjdGlvbmFsU2Vjb25kcyArIGZyYWN0aW9uYWxNaWxsaXNlY29uZHM7CiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucz8ucm91bmRpbmdNZXRob2QgPz8gInJvdW5kIjsKICBjb25zdCByb3VuZGluZ01ldGhvZCA9IGdldFJvdW5kaW5nTWV0aG9kKG1ldGhvZCk7CiAgY29uc3Qgcm91bmRlZEhvdXJzID0gcm91bmRpbmdNZXRob2QoaG91cnMgLyBuZWFyZXN0VG8pICogbmVhcmVzdFRvOwogIGRhdGVfLnNldEhvdXJzKHJvdW5kZWRIb3VycywgMCwgMCwgMCk7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciByb3VuZFRvTmVhcmVzdEhvdXJzX2RlZmF1bHQ7CnZhciBpbml0X3JvdW5kVG9OZWFyZXN0SG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcm91bmRUb05lYXJlc3RIb3Vycy5qcyIoKSB7CiAgICBpbml0X2dldFJvdW5kaW5nTWV0aG9kKCk7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICByb3VuZFRvTmVhcmVzdEhvdXJzX2RlZmF1bHQgPSByb3VuZFRvTmVhcmVzdEhvdXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3JvdW5kVG9OZWFyZXN0TWludXRlcy5qcwpmdW5jdGlvbiByb3VuZFRvTmVhcmVzdE1pbnV0ZXMoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IG5lYXJlc3RUbyA9IG9wdGlvbnM/Lm5lYXJlc3RUbyA/PyAxOwogIGlmIChuZWFyZXN0VG8gPCAxIHx8IG5lYXJlc3RUbyA+IDMwKSByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlLCBOYU4pOwogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBmcmFjdGlvbmFsU2Vjb25kcyA9IGRhdGVfLmdldFNlY29uZHMoKSAvIDYwOwogIGNvbnN0IGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgPSBkYXRlXy5nZXRNaWxsaXNlY29uZHMoKSAvIDFlMyAvIDYwOwogIGNvbnN0IG1pbnV0ZXMgPSBkYXRlXy5nZXRNaW51dGVzKCkgKyBmcmFjdGlvbmFsU2Vjb25kcyArIGZyYWN0aW9uYWxNaWxsaXNlY29uZHM7CiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucz8ucm91bmRpbmdNZXRob2QgPz8gInJvdW5kIjsKICBjb25zdCByb3VuZGluZ01ldGhvZCA9IGdldFJvdW5kaW5nTWV0aG9kKG1ldGhvZCk7CiAgY29uc3Qgcm91bmRlZE1pbnV0ZXMgPSByb3VuZGluZ01ldGhvZChtaW51dGVzIC8gbmVhcmVzdFRvKSAqIG5lYXJlc3RUbzsKICBkYXRlXy5zZXRNaW51dGVzKHJvdW5kZWRNaW51dGVzLCAwLCAwKTsKICByZXR1cm4gZGF0ZV87Cn0KdmFyIHJvdW5kVG9OZWFyZXN0TWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9yb3VuZFRvTmVhcmVzdE1pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcm91bmRUb05lYXJlc3RNaW51dGVzLmpzIigpIHsKICAgIGluaXRfZ2V0Um91bmRpbmdNZXRob2QoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIHJvdW5kVG9OZWFyZXN0TWludXRlc19kZWZhdWx0ID0gcm91bmRUb05lYXJlc3RNaW51dGVzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NlY29uZHNUb0hvdXJzLmpzCmZ1bmN0aW9uIHNlY29uZHNUb0hvdXJzKHNlY29uZHMpIHsKICBjb25zdCBob3VycyA9IHNlY29uZHMgLyBzZWNvbmRzSW5Ib3VyOwogIHJldHVybiBNYXRoLnRydW5jKGhvdXJzKTsKfQp2YXIgc2Vjb25kc1RvSG91cnNfZGVmYXVsdDsKdmFyIGluaXRfc2Vjb25kc1RvSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2Vjb25kc1RvSG91cnMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHNlY29uZHNUb0hvdXJzX2RlZmF1bHQgPSBzZWNvbmRzVG9Ib3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZWNvbmRzVG9NaWxsaXNlY29uZHMuanMKZnVuY3Rpb24gc2Vjb25kc1RvTWlsbGlzZWNvbmRzKHNlY29uZHMpIHsKICByZXR1cm4gc2Vjb25kcyAqIG1pbGxpc2Vjb25kc0luU2Vjb25kOwp9CnZhciBzZWNvbmRzVG9NaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfc2Vjb25kc1RvTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NlY29uZHNUb01pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgc2Vjb25kc1RvTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBzZWNvbmRzVG9NaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2Vjb25kc1RvTWludXRlcy5qcwpmdW5jdGlvbiBzZWNvbmRzVG9NaW51dGVzKHNlY29uZHMpIHsKICBjb25zdCBtaW51dGVzID0gc2Vjb25kcyAvIHNlY29uZHNJbk1pbnV0ZTsKICByZXR1cm4gTWF0aC50cnVuYyhtaW51dGVzKTsKfQp2YXIgc2Vjb25kc1RvTWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9zZWNvbmRzVG9NaW51dGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NlY29uZHNUb01pbnV0ZXMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHNlY29uZHNUb01pbnV0ZXNfZGVmYXVsdCA9IHNlY29uZHNUb01pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0TW9udGguanMKZnVuY3Rpb24gc2V0TW9udGgoZGF0ZSwgbW9udGgsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgZGF5ID0gX2RhdGUuZ2V0RGF0ZSgpOwogIGNvbnN0IG1pZE1vbnRoID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTsKICBtaWRNb250aC5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCwgMTUpOwogIG1pZE1vbnRoLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIGNvbnN0IGRheXNJbk1vbnRoID0gZ2V0RGF5c0luTW9udGgobWlkTW9udGgpOwogIF9kYXRlLnNldE1vbnRoKG1vbnRoLCBNYXRoLm1pbihkYXksIGRheXNJbk1vbnRoKSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzZXRNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9zZXRNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRNb250aC5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0RGF5c0luTW9udGgoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRNb250aF9kZWZhdWx0ID0gc2V0TW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0LmpzCmZ1bmN0aW9uIHNldChkYXRlLCB2YWx1ZXMsIG9wdGlvbnMpIHsKICBsZXQgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGlmIChpc05hTigrX2RhdGUpKSByZXR1cm4gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBOYU4pOwogIGlmICh2YWx1ZXMueWVhciAhPSBudWxsKSBfZGF0ZS5zZXRGdWxsWWVhcih2YWx1ZXMueWVhcik7CiAgaWYgKHZhbHVlcy5tb250aCAhPSBudWxsKSBfZGF0ZSA9IHNldE1vbnRoKF9kYXRlLCB2YWx1ZXMubW9udGgpOwogIGlmICh2YWx1ZXMuZGF0ZSAhPSBudWxsKSBfZGF0ZS5zZXREYXRlKHZhbHVlcy5kYXRlKTsKICBpZiAodmFsdWVzLmhvdXJzICE9IG51bGwpIF9kYXRlLnNldEhvdXJzKHZhbHVlcy5ob3Vycyk7CiAgaWYgKHZhbHVlcy5taW51dGVzICE9IG51bGwpIF9kYXRlLnNldE1pbnV0ZXModmFsdWVzLm1pbnV0ZXMpOwogIGlmICh2YWx1ZXMuc2Vjb25kcyAhPSBudWxsKSBfZGF0ZS5zZXRTZWNvbmRzKHZhbHVlcy5zZWNvbmRzKTsKICBpZiAodmFsdWVzLm1pbGxpc2Vjb25kcyAhPSBudWxsKSBfZGF0ZS5zZXRNaWxsaXNlY29uZHModmFsdWVzLm1pbGxpc2Vjb25kcyk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzZXRfZGVmYXVsdDsKdmFyIGluaXRfc2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldC5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfc2V0TW9udGgoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRfZGVmYXVsdCA9IHNldDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXREYXRlLmpzCmZ1bmN0aW9uIHNldERhdGUoZGF0ZSwgZGF5T2ZNb250aCwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBfZGF0ZS5zZXREYXRlKGRheU9mTW9udGgpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc2V0RGF0ZV9kZWZhdWx0Owp2YXIgaW5pdF9zZXREYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERhdGUuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldERhdGVfZGVmYXVsdCA9IHNldERhdGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0RGF5T2ZZZWFyLmpzCmZ1bmN0aW9uIHNldERheU9mWWVhcihkYXRlLCBkYXlPZlllYXIsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgZGF0ZV8uc2V0TW9udGgoMCk7CiAgZGF0ZV8uc2V0RGF0ZShkYXlPZlllYXIpOwogIHJldHVybiBkYXRlXzsKfQp2YXIgc2V0RGF5T2ZZZWFyX2RlZmF1bHQ7CnZhciBpbml0X3NldERheU9mWWVhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXREYXlPZlllYXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldERheU9mWWVhcl9kZWZhdWx0ID0gc2V0RGF5T2ZZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERlZmF1bHRPcHRpb25zLmpzCmZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zMihvcHRpb25zKSB7CiAgY29uc3QgcmVzdWx0ID0ge307CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBmb3IgKGNvbnN0IHByb3BlcnR5MTMgaW4gZGVmYXVsdE9wdGlvbnMyKSB7CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlZmF1bHRPcHRpb25zMiwgcHJvcGVydHkxMykpIHsKICAgICAgcmVzdWx0W3Byb3BlcnR5MTNdID0gZGVmYXVsdE9wdGlvbnMyW3Byb3BlcnR5MTNdOwogICAgfQogIH0KICBmb3IgKGNvbnN0IHByb3BlcnR5MTMgaW4gb3B0aW9ucykgewogICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBwcm9wZXJ0eTEzKSkgewogICAgICBpZiAob3B0aW9uc1twcm9wZXJ0eTEzXSA9PT0gdm9pZCAwKSB7CiAgICAgICAgZGVsZXRlIHJlc3VsdFtwcm9wZXJ0eTEzXTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHRbcHJvcGVydHkxM10gPSBvcHRpb25zW3Byb3BlcnR5MTNdOwogICAgICB9CiAgICB9CiAgfQogIHNldERlZmF1bHRPcHRpb25zKHJlc3VsdCk7Cn0KdmFyIHNldERlZmF1bHRPcHRpb25zX2RlZmF1bHQ7CnZhciBpbml0X3NldERlZmF1bHRPcHRpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERlZmF1bHRPcHRpb25zLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIHNldERlZmF1bHRPcHRpb25zX2RlZmF1bHQgPSBzZXREZWZhdWx0T3B0aW9uczI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SG91cnMuanMKZnVuY3Rpb24gc2V0SG91cnMoZGF0ZSwgaG91cnMsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0SG91cnMoaG91cnMpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc2V0SG91cnNfZGVmYXVsdDsKdmFyIGluaXRfc2V0SG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SG91cnMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldEhvdXJzX2RlZmF1bHQgPSBzZXRIb3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRNaWxsaXNlY29uZHMuanMKZnVuY3Rpb24gc2V0TWlsbGlzZWNvbmRzKGRhdGUsIG1pbGxpc2Vjb25kczIsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0TWlsbGlzZWNvbmRzKG1pbGxpc2Vjb25kczIpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc2V0TWlsbGlzZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X3NldE1pbGxpc2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRNaWxsaXNlY29uZHMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldE1pbGxpc2Vjb25kc19kZWZhdWx0ID0gc2V0TWlsbGlzZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldE1pbnV0ZXMuanMKZnVuY3Rpb24gc2V0TWludXRlcyhkYXRlLCBtaW51dGVzLCBvcHRpb25zKSB7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGRhdGVfLnNldE1pbnV0ZXMobWludXRlcyk7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBzZXRNaW51dGVzX2RlZmF1bHQ7CnZhciBpbml0X3NldE1pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0TWludXRlcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0TWludXRlc19kZWZhdWx0ID0gc2V0TWludXRlczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRRdWFydGVyLmpzCmZ1bmN0aW9uIHNldFF1YXJ0ZXIoZGF0ZSwgcXVhcnRlciwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBvbGRRdWFydGVyID0gTWF0aC50cnVuYyhkYXRlXy5nZXRNb250aCgpIC8gMykgKyAxOwogIGNvbnN0IGRpZmYgPSBxdWFydGVyIC0gb2xkUXVhcnRlcjsKICByZXR1cm4gc2V0TW9udGgoZGF0ZV8sIGRhdGVfLmdldE1vbnRoKCkgKyBkaWZmICogMyk7Cn0KdmFyIHNldFF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfc2V0UXVhcnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRRdWFydGVyLmpzIigpIHsKICAgIGluaXRfc2V0TW9udGgoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRRdWFydGVyX2RlZmF1bHQgPSBzZXRRdWFydGVyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldFNlY29uZHMuanMKZnVuY3Rpb24gc2V0U2Vjb25kcyhkYXRlLCBzZWNvbmRzLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldFNlY29uZHMoc2Vjb25kcyk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzZXRTZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X3NldFNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0U2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0U2Vjb25kc19kZWZhdWx0ID0gc2V0U2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRXZWVrWWVhci5qcwpmdW5jdGlvbiBzZXRXZWVrWWVhcihkYXRlLCB3ZWVrWWVhciwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3QgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gb3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IDE7CiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygKICAgIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbiksCiAgICBzdGFydE9mV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyksCiAgICBvcHRpb25zCiAgKTsKICBjb25zdCBmaXJzdFdlZWsgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZpcnN0V2Vlay5zZXRGdWxsWWVhcih3ZWVrWWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTsKICBmaXJzdFdlZWsuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3QgZGF0ZV8gPSBzdGFydE9mV2Vla1llYXIoZmlyc3RXZWVrLCBvcHRpb25zKTsKICBkYXRlXy5zZXREYXRlKGRhdGVfLmdldERhdGUoKSArIGRpZmYpOwogIHJldHVybiBkYXRlXzsKfQp2YXIgc2V0V2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfc2V0V2Vla1llYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0V2Vla1llYXIuanMiKCkgewogICAgaW5pdF9kZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9zdGFydE9mV2Vla1llYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRXZWVrWWVhcl9kZWZhdWx0ID0gc2V0V2Vla1llYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0WWVhci5qcwpmdW5jdGlvbiBzZXRZZWFyKGRhdGUsIHllYXIsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKGlzTmFOKCtkYXRlXykpIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIE5hTik7CiAgZGF0ZV8uc2V0RnVsbFllYXIoeWVhcik7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBzZXRZZWFyX2RlZmF1bHQ7CnZhciBpbml0X3NldFllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0WWVhci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRZZWFyX2RlZmF1bHQgPSBzZXRZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZEZWNhZGUuanMKZnVuY3Rpb24gc3RhcnRPZkRlY2FkZShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpOwogIGNvbnN0IGRlY2FkZSA9IE1hdGguZmxvb3IoeWVhciAvIDEwKSAqIDEwOwogIF9kYXRlLnNldEZ1bGxZZWFyKGRlY2FkZSwgMCwgMSk7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mRGVjYWRlX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZEZWNhZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZkRlY2FkZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc3RhcnRPZkRlY2FkZV9kZWZhdWx0ID0gc3RhcnRPZkRlY2FkZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mVG9kYXkuanMKZnVuY3Rpb24gc3RhcnRPZlRvZGF5KG9wdGlvbnMpIHsKICByZXR1cm4gc3RhcnRPZkRheShEYXRlLm5vdygpLCBvcHRpb25zKTsKfQp2YXIgc3RhcnRPZlRvZGF5X2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZUb2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mVG9kYXkuanMiKCkgewogICAgaW5pdF9zdGFydE9mRGF5KCk7CiAgICBzdGFydE9mVG9kYXlfZGVmYXVsdCA9IHN0YXJ0T2ZUb2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mVG9tb3Jyb3cuanMKZnVuY3Rpb24gc3RhcnRPZlRvbW9ycm93KG9wdGlvbnMpIHsKICBjb25zdCBub3cyID0gY29uc3RydWN0Tm93KG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gbm93Mi5nZXRGdWxsWWVhcigpOwogIGNvbnN0IG1vbnRoID0gbm93Mi5nZXRNb250aCgpOwogIGNvbnN0IGRheSA9IG5vdzIuZ2V0RGF0ZSgpOwogIGNvbnN0IGRhdGUgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCAwKTsKICBkYXRlLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXkgKyAxKTsKICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBkYXRlOwp9CnZhciBzdGFydE9mVG9tb3Jyb3dfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZlRvbW9ycm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZUb21vcnJvdy5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBzdGFydE9mVG9tb3Jyb3dfZGVmYXVsdCA9IHN0YXJ0T2ZUb21vcnJvdzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mWWVzdGVyZGF5LmpzCmZ1bmN0aW9uIHN0YXJ0T2ZZZXN0ZXJkYXkob3B0aW9ucykgewogIGNvbnN0IG5vdzIgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBub3cyLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgbW9udGggPSBub3cyLmdldE1vbnRoKCk7CiAgY29uc3QgZGF5ID0gbm93Mi5nZXREYXRlKCk7CiAgY29uc3QgZGF0ZSA9IGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbik7CiAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF5IC0gMSk7CiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gZGF0ZTsKfQp2YXIgc3RhcnRPZlllc3RlcmRheV9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mWWVzdGVyZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZZZXN0ZXJkYXkuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIHN0YXJ0T2ZZZXN0ZXJkYXlfZGVmYXVsdCA9IHN0YXJ0T2ZZZXN0ZXJkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTW9udGhzLmpzCmZ1bmN0aW9uIHN1Yk1vbnRocyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJNb250aHNfZGVmYXVsdDsKdmFyIGluaXRfc3ViTW9udGhzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1Yk1vbnRocy5qcyIoKSB7CiAgICBpbml0X2FkZE1vbnRocygpOwogICAgc3ViTW9udGhzX2RlZmF1bHQgPSBzdWJNb250aHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViLmpzCmZ1bmN0aW9uIHN1YihkYXRlLCBkdXJhdGlvbiwgb3B0aW9ucykgewogIGNvbnN0IHsKICAgIHllYXJzID0gMCwKICAgIG1vbnRoczogbW9udGhzMiA9IDAsCiAgICB3ZWVrcyA9IDAsCiAgICBkYXlzOiBkYXlzMiA9IDAsCiAgICBob3VycyA9IDAsCiAgICBtaW51dGVzID0gMCwKICAgIHNlY29uZHMgPSAwCiAgfSA9IGR1cmF0aW9uOwogIGNvbnN0IHdpdGhvdXRNb250aHMgPSBzdWJNb250aHMoZGF0ZSwgbW9udGhzMiArIHllYXJzICogMTIsIG9wdGlvbnMpOwogIGNvbnN0IHdpdGhvdXREYXlzID0gc3ViRGF5cyh3aXRob3V0TW9udGhzLCBkYXlzMiArIHdlZWtzICogNywgb3B0aW9ucyk7CiAgY29uc3QgbWludXRlc1RvU3ViID0gbWludXRlcyArIGhvdXJzICogNjA7CiAgY29uc3Qgc2Vjb25kc1RvU3ViID0gc2Vjb25kcyArIG1pbnV0ZXNUb1N1YiAqIDYwOwogIGNvbnN0IG1zVG9TdWIgPSBzZWNvbmRzVG9TdWIgKiAxZTM7CiAgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgK3dpdGhvdXREYXlzIC0gbXNUb1N1Yik7Cn0KdmFyIHN1Yl9kZWZhdWx0Owp2YXIgaW5pdF9zdWIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9zdWJEYXlzKCk7CiAgICBpbml0X3N1Yk1vbnRocygpOwogICAgc3ViX2RlZmF1bHQgPSBzdWI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViQnVzaW5lc3NEYXlzLmpzCmZ1bmN0aW9uIHN1YkJ1c2luZXNzRGF5cyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkQnVzaW5lc3NEYXlzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJCdXNpbmVzc0RheXNfZGVmYXVsdDsKdmFyIGluaXRfc3ViQnVzaW5lc3NEYXlzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1YkJ1c2luZXNzRGF5cy5qcyIoKSB7CiAgICBpbml0X2FkZEJ1c2luZXNzRGF5cygpOwogICAgc3ViQnVzaW5lc3NEYXlzX2RlZmF1bHQgPSBzdWJCdXNpbmVzc0RheXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViSG91cnMuanMKZnVuY3Rpb24gc3ViSG91cnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZEhvdXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJIb3Vyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJIb3VycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJIb3Vycy5qcyIoKSB7CiAgICBpbml0X2FkZEhvdXJzKCk7CiAgICBzdWJIb3Vyc19kZWZhdWx0ID0gc3ViSG91cnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTWlsbGlzZWNvbmRzLmpzCmZ1bmN0aW9uIHN1Yk1pbGxpc2Vjb25kcyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJNaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfc3ViTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1Yk1pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2FkZE1pbGxpc2Vjb25kcygpOwogICAgc3ViTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBzdWJNaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTWludXRlcy5qcwpmdW5jdGlvbiBzdWJNaW51dGVzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRNaW51dGVzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJNaW51dGVzX2RlZmF1bHQ7CnZhciBpbml0X3N1Yk1pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTWludXRlcy5qcyIoKSB7CiAgICBpbml0X2FkZE1pbnV0ZXMoKTsKICAgIHN1Yk1pbnV0ZXNfZGVmYXVsdCA9IHN1Yk1pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViUXVhcnRlcnMuanMKZnVuY3Rpb24gc3ViUXVhcnRlcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZFF1YXJ0ZXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJRdWFydGVyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJRdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJRdWFydGVycy5qcyIoKSB7CiAgICBpbml0X2FkZFF1YXJ0ZXJzKCk7CiAgICBzdWJRdWFydGVyc19kZWZhdWx0ID0gc3ViUXVhcnRlcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViU2Vjb25kcy5qcwpmdW5jdGlvbiBzdWJTZWNvbmRzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRTZWNvbmRzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJTZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X3N1YlNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViU2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2FkZFNlY29uZHMoKTsKICAgIHN1YlNlY29uZHNfZGVmYXVsdCA9IHN1YlNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViV2Vla3MuanMKZnVuY3Rpb24gc3ViV2Vla3MoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZFdlZWtzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJXZWVrc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJXZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJXZWVrcy5qcyIoKSB7CiAgICBpbml0X2FkZFdlZWtzKCk7CiAgICBzdWJXZWVrc19kZWZhdWx0ID0gc3ViV2Vla3M7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViWWVhcnMuanMKZnVuY3Rpb24gc3ViWWVhcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZFllYXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJZZWFyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJZZWFycy5qcyIoKSB7CiAgICBpbml0X2FkZFllYXJzKCk7CiAgICBzdWJZZWFyc19kZWZhdWx0ID0gc3ViWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvd2Vla3NUb0RheXMuanMKZnVuY3Rpb24gd2Vla3NUb0RheXMod2Vla3MpIHsKICByZXR1cm4gTWF0aC50cnVuYyh3ZWVrcyAqIGRheXNJbldlZWspOwp9CnZhciB3ZWVrc1RvRGF5c19kZWZhdWx0Owp2YXIgaW5pdF93ZWVrc1RvRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy93ZWVrc1RvRGF5cy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgd2Vla3NUb0RheXNfZGVmYXVsdCA9IHdlZWtzVG9EYXlzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3llYXJzVG9EYXlzLmpzCmZ1bmN0aW9uIHllYXJzVG9EYXlzKHllYXJzKSB7CiAgcmV0dXJuIE1hdGgudHJ1bmMoeWVhcnMgKiBkYXlzSW5ZZWFyKTsKfQp2YXIgeWVhcnNUb0RheXNfZGVmYXVsdDsKdmFyIGluaXRfeWVhcnNUb0RheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMveWVhcnNUb0RheXMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHllYXJzVG9EYXlzX2RlZmF1bHQgPSB5ZWFyc1RvRGF5czsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy95ZWFyc1RvTW9udGhzLmpzCmZ1bmN0aW9uIHllYXJzVG9Nb250aHMoeWVhcnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyh5ZWFycyAqIG1vbnRoc0luWWVhcik7Cn0KdmFyIHllYXJzVG9Nb250aHNfZGVmYXVsdDsKdmFyIGluaXRfeWVhcnNUb01vbnRocyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy95ZWFyc1RvTW9udGhzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICB5ZWFyc1RvTW9udGhzX2RlZmF1bHQgPSB5ZWFyc1RvTW9udGhzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3llYXJzVG9RdWFydGVycy5qcwpmdW5jdGlvbiB5ZWFyc1RvUXVhcnRlcnMoeWVhcnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyh5ZWFycyAqIHF1YXJ0ZXJzSW5ZZWFyKTsKfQp2YXIgeWVhcnNUb1F1YXJ0ZXJzX2RlZmF1bHQ7CnZhciBpbml0X3llYXJzVG9RdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy95ZWFyc1RvUXVhcnRlcnMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHllYXJzVG9RdWFydGVyc19kZWZhdWx0ID0geWVhcnNUb1F1YXJ0ZXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2luZGV4LmpzCnZhciBkYXRlX2Zuc19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRhdGVfZm5zX2V4cG9ydHMsIHsKICBhZGQ6ICgpID0+IGFkZCwKICBhZGRCdXNpbmVzc0RheXM6ICgpID0+IGFkZEJ1c2luZXNzRGF5cywKICBhZGREYXlzOiAoKSA9PiBhZGREYXlzLAogIGFkZEhvdXJzOiAoKSA9PiBhZGRIb3VycywKICBhZGRJU09XZWVrWWVhcnM6ICgpID0+IGFkZElTT1dlZWtZZWFycywKICBhZGRNaWxsaXNlY29uZHM6ICgpID0+IGFkZE1pbGxpc2Vjb25kcywKICBhZGRNaW51dGVzOiAoKSA9PiBhZGRNaW51dGVzLAogIGFkZE1vbnRoczogKCkgPT4gYWRkTW9udGhzLAogIGFkZFF1YXJ0ZXJzOiAoKSA9PiBhZGRRdWFydGVycywKICBhZGRTZWNvbmRzOiAoKSA9PiBhZGRTZWNvbmRzLAogIGFkZFdlZWtzOiAoKSA9PiBhZGRXZWVrcywKICBhZGRZZWFyczogKCkgPT4gYWRkWWVhcnMsCiAgYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmc6ICgpID0+IGFyZUludGVydmFsc092ZXJsYXBwaW5nLAogIGNsYW1wOiAoKSA9PiBjbGFtcCwKICBjbG9zZXN0SW5kZXhUbzogKCkgPT4gY2xvc2VzdEluZGV4VG8sCiAgY2xvc2VzdFRvOiAoKSA9PiBjbG9zZXN0VG8sCiAgY29tcGFyZUFzYzogKCkgPT4gY29tcGFyZUFzYywKICBjb21wYXJlRGVzYzogKCkgPT4gY29tcGFyZURlc2MsCiAgY29uc3RydWN0RnJvbTogKCkgPT4gY29uc3RydWN0RnJvbSwKICBjb25zdHJ1Y3ROb3c6ICgpID0+IGNvbnN0cnVjdE5vdywKICBkYXlzVG9XZWVrczogKCkgPT4gZGF5c1RvV2Vla3MsCiAgZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzOiAoKSA9PiBkaWZmZXJlbmNlSW5CdXNpbmVzc0RheXMsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzOiAoKSA9PiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnM6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzLAogIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3M6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3MsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHM6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzLAogIGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnM6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrczogKCkgPT4gZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcywKICBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzOiAoKSA9PiBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzLAogIGRpZmZlcmVuY2VJbkRheXM6ICgpID0+IGRpZmZlcmVuY2VJbkRheXMsCiAgZGlmZmVyZW5jZUluSG91cnM6ICgpID0+IGRpZmZlcmVuY2VJbkhvdXJzLAogIGRpZmZlcmVuY2VJbklTT1dlZWtZZWFyczogKCkgPT4gZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzLAogIGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kczogKCkgPT4gZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzLAogIGRpZmZlcmVuY2VJbk1pbnV0ZXM6ICgpID0+IGRpZmZlcmVuY2VJbk1pbnV0ZXMsCiAgZGlmZmVyZW5jZUluTW9udGhzOiAoKSA9PiBkaWZmZXJlbmNlSW5Nb250aHMsCiAgZGlmZmVyZW5jZUluUXVhcnRlcnM6ICgpID0+IGRpZmZlcmVuY2VJblF1YXJ0ZXJzLAogIGRpZmZlcmVuY2VJblNlY29uZHM6ICgpID0+IGRpZmZlcmVuY2VJblNlY29uZHMsCiAgZGlmZmVyZW5jZUluV2Vla3M6ICgpID0+IGRpZmZlcmVuY2VJbldlZWtzLAogIGRpZmZlcmVuY2VJblllYXJzOiAoKSA9PiBkaWZmZXJlbmNlSW5ZZWFycywKICBlYWNoRGF5T2ZJbnRlcnZhbDogKCkgPT4gZWFjaERheU9mSW50ZXJ2YWwsCiAgZWFjaEhvdXJPZkludGVydmFsOiAoKSA9PiBlYWNoSG91ck9mSW50ZXJ2YWwsCiAgZWFjaE1pbnV0ZU9mSW50ZXJ2YWw6ICgpID0+IGVhY2hNaW51dGVPZkludGVydmFsLAogIGVhY2hNb250aE9mSW50ZXJ2YWw6ICgpID0+IGVhY2hNb250aE9mSW50ZXJ2YWwsCiAgZWFjaFF1YXJ0ZXJPZkludGVydmFsOiAoKSA9PiBlYWNoUXVhcnRlck9mSW50ZXJ2YWwsCiAgZWFjaFdlZWtPZkludGVydmFsOiAoKSA9PiBlYWNoV2Vla09mSW50ZXJ2YWwsCiAgZWFjaFdlZWtlbmRPZkludGVydmFsOiAoKSA9PiBlYWNoV2Vla2VuZE9mSW50ZXJ2YWwsCiAgZWFjaFdlZWtlbmRPZk1vbnRoOiAoKSA9PiBlYWNoV2Vla2VuZE9mTW9udGgsCiAgZWFjaFdlZWtlbmRPZlllYXI6ICgpID0+IGVhY2hXZWVrZW5kT2ZZZWFyLAogIGVhY2hZZWFyT2ZJbnRlcnZhbDogKCkgPT4gZWFjaFllYXJPZkludGVydmFsLAogIGVuZE9mRGF5OiAoKSA9PiBlbmRPZkRheSwKICBlbmRPZkRlY2FkZTogKCkgPT4gZW5kT2ZEZWNhZGUsCiAgZW5kT2ZIb3VyOiAoKSA9PiBlbmRPZkhvdXIsCiAgZW5kT2ZJU09XZWVrOiAoKSA9PiBlbmRPZklTT1dlZWssCiAgZW5kT2ZJU09XZWVrWWVhcjogKCkgPT4gZW5kT2ZJU09XZWVrWWVhciwKICBlbmRPZk1pbnV0ZTogKCkgPT4gZW5kT2ZNaW51dGUsCiAgZW5kT2ZNb250aDogKCkgPT4gZW5kT2ZNb250aCwKICBlbmRPZlF1YXJ0ZXI6ICgpID0+IGVuZE9mUXVhcnRlciwKICBlbmRPZlNlY29uZDogKCkgPT4gZW5kT2ZTZWNvbmQsCiAgZW5kT2ZUb2RheTogKCkgPT4gZW5kT2ZUb2RheSwKICBlbmRPZlRvbW9ycm93OiAoKSA9PiBlbmRPZlRvbW9ycm93LAogIGVuZE9mV2VlazogKCkgPT4gZW5kT2ZXZWVrLAogIGVuZE9mWWVhcjogKCkgPT4gZW5kT2ZZZWFyLAogIGVuZE9mWWVzdGVyZGF5OiAoKSA9PiBlbmRPZlllc3RlcmRheSwKICBmb3JtYXQ6ICgpID0+IGZvcm1hdCwKICBmb3JtYXREYXRlOiAoKSA9PiBmb3JtYXQsCiAgZm9ybWF0RGlzdGFuY2U6ICgpID0+IGZvcm1hdERpc3RhbmNlMiwKICBmb3JtYXREaXN0YW5jZVN0cmljdDogKCkgPT4gZm9ybWF0RGlzdGFuY2VTdHJpY3QsCiAgZm9ybWF0RGlzdGFuY2VUb05vdzogKCkgPT4gZm9ybWF0RGlzdGFuY2VUb05vdywKICBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0OiAoKSA9PiBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0LAogIGZvcm1hdER1cmF0aW9uOiAoKSA9PiBmb3JtYXREdXJhdGlvbiwKICBmb3JtYXRJU086ICgpID0+IGZvcm1hdElTTywKICBmb3JtYXRJU085MDc1OiAoKSA9PiBmb3JtYXRJU085MDc1LAogIGZvcm1hdElTT0R1cmF0aW9uOiAoKSA9PiBmb3JtYXRJU09EdXJhdGlvbiwKICBmb3JtYXRSRkMzMzM5OiAoKSA9PiBmb3JtYXRSRkMzMzM5LAogIGZvcm1hdFJGQzcyMzE6ICgpID0+IGZvcm1hdFJGQzcyMzEsCiAgZm9ybWF0UmVsYXRpdmU6ICgpID0+IGZvcm1hdFJlbGF0aXZlMiwKICBmb3JtYXR0ZXJzOiAoKSA9PiBmb3JtYXR0ZXJzLAogIGZyb21Vbml4VGltZTogKCkgPT4gZnJvbVVuaXhUaW1lLAogIGdldERhdGU6ICgpID0+IGdldERhdGUsCiAgZ2V0RGF5OiAoKSA9PiBnZXREYXksCiAgZ2V0RGF5T2ZZZWFyOiAoKSA9PiBnZXREYXlPZlllYXIsCiAgZ2V0RGF5c0luTW9udGg6ICgpID0+IGdldERheXNJbk1vbnRoLAogIGdldERheXNJblllYXI6ICgpID0+IGdldERheXNJblllYXIsCiAgZ2V0RGVjYWRlOiAoKSA9PiBnZXREZWNhZGUsCiAgZ2V0RGVmYXVsdE9wdGlvbnM6ICgpID0+IGdldERlZmF1bHRPcHRpb25zMiwKICBnZXRIb3VyczogKCkgPT4gZ2V0SG91cnMsCiAgZ2V0SVNPRGF5OiAoKSA9PiBnZXRJU09EYXksCiAgZ2V0SVNPV2VlazogKCkgPT4gZ2V0SVNPV2VlaywKICBnZXRJU09XZWVrWWVhcjogKCkgPT4gZ2V0SVNPV2Vla1llYXIsCiAgZ2V0SVNPV2Vla3NJblllYXI6ICgpID0+IGdldElTT1dlZWtzSW5ZZWFyLAogIGdldE1pbGxpc2Vjb25kczogKCkgPT4gZ2V0TWlsbGlzZWNvbmRzLAogIGdldE1pbnV0ZXM6ICgpID0+IGdldE1pbnV0ZXMsCiAgZ2V0TW9udGg6ICgpID0+IGdldE1vbnRoLAogIGdldE92ZXJsYXBwaW5nRGF5c0luSW50ZXJ2YWxzOiAoKSA9PiBnZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFscywKICBnZXRRdWFydGVyOiAoKSA9PiBnZXRRdWFydGVyLAogIGdldFNlY29uZHM6ICgpID0+IGdldFNlY29uZHMsCiAgZ2V0VGltZTogKCkgPT4gZ2V0VGltZSwKICBnZXRVbml4VGltZTogKCkgPT4gZ2V0VW5peFRpbWUsCiAgZ2V0V2VlazogKCkgPT4gZ2V0V2VlaywKICBnZXRXZWVrT2ZNb250aDogKCkgPT4gZ2V0V2Vla09mTW9udGgsCiAgZ2V0V2Vla1llYXI6ICgpID0+IGdldFdlZWtZZWFyLAogIGdldFdlZWtzSW5Nb250aDogKCkgPT4gZ2V0V2Vla3NJbk1vbnRoLAogIGdldFllYXI6ICgpID0+IGdldFllYXIsCiAgaG91cnNUb01pbGxpc2Vjb25kczogKCkgPT4gaG91cnNUb01pbGxpc2Vjb25kcywKICBob3Vyc1RvTWludXRlczogKCkgPT4gaG91cnNUb01pbnV0ZXMsCiAgaG91cnNUb1NlY29uZHM6ICgpID0+IGhvdXJzVG9TZWNvbmRzLAogIGludGVydmFsOiAoKSA9PiBpbnRlcnZhbDIsCiAgaW50ZXJ2YWxUb0R1cmF0aW9uOiAoKSA9PiBpbnRlcnZhbFRvRHVyYXRpb24sCiAgaW50bEZvcm1hdDogKCkgPT4gaW50bEZvcm1hdCwKICBpbnRsRm9ybWF0RGlzdGFuY2U6ICgpID0+IGludGxGb3JtYXREaXN0YW5jZSwKICBpc0FmdGVyOiAoKSA9PiBpc0FmdGVyLAogIGlzQmVmb3JlOiAoKSA9PiBpc0JlZm9yZSwKICBpc0RhdGU6ICgpID0+IGlzRGF0ZSwKICBpc0VxdWFsOiAoKSA9PiBpc0VxdWFsLAogIGlzRXhpc3RzOiAoKSA9PiBpc0V4aXN0cywKICBpc0ZpcnN0RGF5T2ZNb250aDogKCkgPT4gaXNGaXJzdERheU9mTW9udGgsCiAgaXNGcmlkYXk6ICgpID0+IGlzRnJpZGF5LAogIGlzRnV0dXJlOiAoKSA9PiBpc0Z1dHVyZSwKICBpc0xhc3REYXlPZk1vbnRoOiAoKSA9PiBpc0xhc3REYXlPZk1vbnRoLAogIGlzTGVhcFllYXI6ICgpID0+IGlzTGVhcFllYXIsCiAgaXNNYXRjaDogKCkgPT4gaXNNYXRjaDIsCiAgaXNNb25kYXk6ICgpID0+IGlzTW9uZGF5LAogIGlzUGFzdDogKCkgPT4gaXNQYXN0LAogIGlzU2FtZURheTogKCkgPT4gaXNTYW1lRGF5LAogIGlzU2FtZUhvdXI6ICgpID0+IGlzU2FtZUhvdXIsCiAgaXNTYW1lSVNPV2VlazogKCkgPT4gaXNTYW1lSVNPV2VlaywKICBpc1NhbWVJU09XZWVrWWVhcjogKCkgPT4gaXNTYW1lSVNPV2Vla1llYXIsCiAgaXNTYW1lTWludXRlOiAoKSA9PiBpc1NhbWVNaW51dGUsCiAgaXNTYW1lTW9udGg6ICgpID0+IGlzU2FtZU1vbnRoLAogIGlzU2FtZVF1YXJ0ZXI6ICgpID0+IGlzU2FtZVF1YXJ0ZXIsCiAgaXNTYW1lU2Vjb25kOiAoKSA9PiBpc1NhbWVTZWNvbmQsCiAgaXNTYW1lV2VlazogKCkgPT4gaXNTYW1lV2VlaywKICBpc1NhbWVZZWFyOiAoKSA9PiBpc1NhbWVZZWFyLAogIGlzU2F0dXJkYXk6ICgpID0+IGlzU2F0dXJkYXksCiAgaXNTdW5kYXk6ICgpID0+IGlzU3VuZGF5LAogIGlzVGhpc0hvdXI6ICgpID0+IGlzVGhpc0hvdXIsCiAgaXNUaGlzSVNPV2VlazogKCkgPT4gaXNUaGlzSVNPV2VlaywKICBpc1RoaXNNaW51dGU6ICgpID0+IGlzVGhpc01pbnV0ZSwKICBpc1RoaXNNb250aDogKCkgPT4gaXNUaGlzTW9udGgsCiAgaXNUaGlzUXVhcnRlcjogKCkgPT4gaXNUaGlzUXVhcnRlciwKICBpc1RoaXNTZWNvbmQ6ICgpID0+IGlzVGhpc1NlY29uZCwKICBpc1RoaXNXZWVrOiAoKSA9PiBpc1RoaXNXZWVrLAogIGlzVGhpc1llYXI6ICgpID0+IGlzVGhpc1llYXIsCiAgaXNUaHVyc2RheTogKCkgPT4gaXNUaHVyc2RheSwKICBpc1RvZGF5OiAoKSA9PiBpc1RvZGF5LAogIGlzVG9tb3Jyb3c6ICgpID0+IGlzVG9tb3Jyb3csCiAgaXNUdWVzZGF5OiAoKSA9PiBpc1R1ZXNkYXksCiAgaXNWYWxpZDogKCkgPT4gaXNWYWxpZCwKICBpc1dlZG5lc2RheTogKCkgPT4gaXNXZWRuZXNkYXksCiAgaXNXZWVrZW5kOiAoKSA9PiBpc1dlZWtlbmQsCiAgaXNXaXRoaW5JbnRlcnZhbDogKCkgPT4gaXNXaXRoaW5JbnRlcnZhbCwKICBpc1llc3RlcmRheTogKCkgPT4gaXNZZXN0ZXJkYXksCiAgbGFzdERheU9mRGVjYWRlOiAoKSA9PiBsYXN0RGF5T2ZEZWNhZGUsCiAgbGFzdERheU9mSVNPV2VlazogKCkgPT4gbGFzdERheU9mSVNPV2VlaywKICBsYXN0RGF5T2ZJU09XZWVrWWVhcjogKCkgPT4gbGFzdERheU9mSVNPV2Vla1llYXIsCiAgbGFzdERheU9mTW9udGg6ICgpID0+IGxhc3REYXlPZk1vbnRoLAogIGxhc3REYXlPZlF1YXJ0ZXI6ICgpID0+IGxhc3REYXlPZlF1YXJ0ZXIsCiAgbGFzdERheU9mV2VlazogKCkgPT4gbGFzdERheU9mV2VlaywKICBsYXN0RGF5T2ZZZWFyOiAoKSA9PiBsYXN0RGF5T2ZZZWFyLAogIGxpZ2h0Rm9ybWF0OiAoKSA9PiBsaWdodEZvcm1hdCwKICBsaWdodEZvcm1hdHRlcnM6ICgpID0+IGxpZ2h0Rm9ybWF0dGVycywKICBsb25nRm9ybWF0dGVyczogKCkgPT4gbG9uZ0Zvcm1hdHRlcnMsCiAgbWF4OiAoKSA9PiBtYXgyLAogIG1pbGxpc2Vjb25kczogKCkgPT4gbWlsbGlzZWNvbmRzLAogIG1pbGxpc2Vjb25kc1RvSG91cnM6ICgpID0+IG1pbGxpc2Vjb25kc1RvSG91cnMsCiAgbWlsbGlzZWNvbmRzVG9NaW51dGVzOiAoKSA9PiBtaWxsaXNlY29uZHNUb01pbnV0ZXMsCiAgbWlsbGlzZWNvbmRzVG9TZWNvbmRzOiAoKSA9PiBtaWxsaXNlY29uZHNUb1NlY29uZHMsCiAgbWluOiAoKSA9PiBtaW4yLAogIG1pbnV0ZXNUb0hvdXJzOiAoKSA9PiBtaW51dGVzVG9Ib3VycywKICBtaW51dGVzVG9NaWxsaXNlY29uZHM6ICgpID0+IG1pbnV0ZXNUb01pbGxpc2Vjb25kcywKICBtaW51dGVzVG9TZWNvbmRzOiAoKSA9PiBtaW51dGVzVG9TZWNvbmRzLAogIG1vbnRoc1RvUXVhcnRlcnM6ICgpID0+IG1vbnRoc1RvUXVhcnRlcnMsCiAgbW9udGhzVG9ZZWFyczogKCkgPT4gbW9udGhzVG9ZZWFycywKICBuZXh0RGF5OiAoKSA9PiBuZXh0RGF5LAogIG5leHRGcmlkYXk6ICgpID0+IG5leHRGcmlkYXksCiAgbmV4dE1vbmRheTogKCkgPT4gbmV4dE1vbmRheSwKICBuZXh0U2F0dXJkYXk6ICgpID0+IG5leHRTYXR1cmRheSwKICBuZXh0U3VuZGF5OiAoKSA9PiBuZXh0U3VuZGF5LAogIG5leHRUaHVyc2RheTogKCkgPT4gbmV4dFRodXJzZGF5LAogIG5leHRUdWVzZGF5OiAoKSA9PiBuZXh0VHVlc2RheSwKICBuZXh0V2VkbmVzZGF5OiAoKSA9PiBuZXh0V2VkbmVzZGF5LAogIHBhcnNlOiAoKSA9PiBwYXJzZSwKICBwYXJzZUlTTzogKCkgPT4gcGFyc2VJU08sCiAgcGFyc2VKU09OOiAoKSA9PiBwYXJzZUpTT04sCiAgcGFyc2VyczogKCkgPT4gcGFyc2VycywKICBwcmV2aW91c0RheTogKCkgPT4gcHJldmlvdXNEYXksCiAgcHJldmlvdXNGcmlkYXk6ICgpID0+IHByZXZpb3VzRnJpZGF5LAogIHByZXZpb3VzTW9uZGF5OiAoKSA9PiBwcmV2aW91c01vbmRheSwKICBwcmV2aW91c1NhdHVyZGF5OiAoKSA9PiBwcmV2aW91c1NhdHVyZGF5LAogIHByZXZpb3VzU3VuZGF5OiAoKSA9PiBwcmV2aW91c1N1bmRheSwKICBwcmV2aW91c1RodXJzZGF5OiAoKSA9PiBwcmV2aW91c1RodXJzZGF5LAogIHByZXZpb3VzVHVlc2RheTogKCkgPT4gcHJldmlvdXNUdWVzZGF5LAogIHByZXZpb3VzV2VkbmVzZGF5OiAoKSA9PiBwcmV2aW91c1dlZG5lc2RheSwKICBxdWFydGVyc1RvTW9udGhzOiAoKSA9PiBxdWFydGVyc1RvTW9udGhzLAogIHF1YXJ0ZXJzVG9ZZWFyczogKCkgPT4gcXVhcnRlcnNUb1llYXJzLAogIHJvdW5kVG9OZWFyZXN0SG91cnM6ICgpID0+IHJvdW5kVG9OZWFyZXN0SG91cnMsCiAgcm91bmRUb05lYXJlc3RNaW51dGVzOiAoKSA9PiByb3VuZFRvTmVhcmVzdE1pbnV0ZXMsCiAgc2Vjb25kc1RvSG91cnM6ICgpID0+IHNlY29uZHNUb0hvdXJzLAogIHNlY29uZHNUb01pbGxpc2Vjb25kczogKCkgPT4gc2Vjb25kc1RvTWlsbGlzZWNvbmRzLAogIHNlY29uZHNUb01pbnV0ZXM6ICgpID0+IHNlY29uZHNUb01pbnV0ZXMsCiAgc2V0OiAoKSA9PiBzZXQsCiAgc2V0RGF0ZTogKCkgPT4gc2V0RGF0ZSwKICBzZXREYXk6ICgpID0+IHNldERheSwKICBzZXREYXlPZlllYXI6ICgpID0+IHNldERheU9mWWVhciwKICBzZXREZWZhdWx0T3B0aW9uczogKCkgPT4gc2V0RGVmYXVsdE9wdGlvbnMyLAogIHNldEhvdXJzOiAoKSA9PiBzZXRIb3VycywKICBzZXRJU09EYXk6ICgpID0+IHNldElTT0RheSwKICBzZXRJU09XZWVrOiAoKSA9PiBzZXRJU09XZWVrLAogIHNldElTT1dlZWtZZWFyOiAoKSA9PiBzZXRJU09XZWVrWWVhciwKICBzZXRNaWxsaXNlY29uZHM6ICgpID0+IHNldE1pbGxpc2Vjb25kcywKICBzZXRNaW51dGVzOiAoKSA9PiBzZXRNaW51dGVzLAogIHNldE1vbnRoOiAoKSA9PiBzZXRNb250aCwKICBzZXRRdWFydGVyOiAoKSA9PiBzZXRRdWFydGVyLAogIHNldFNlY29uZHM6ICgpID0+IHNldFNlY29uZHMsCiAgc2V0V2VlazogKCkgPT4gc2V0V2VlaywKICBzZXRXZWVrWWVhcjogKCkgPT4gc2V0V2Vla1llYXIsCiAgc2V0WWVhcjogKCkgPT4gc2V0WWVhciwKICBzdGFydE9mRGF5OiAoKSA9PiBzdGFydE9mRGF5LAogIHN0YXJ0T2ZEZWNhZGU6ICgpID0+IHN0YXJ0T2ZEZWNhZGUsCiAgc3RhcnRPZkhvdXI6ICgpID0+IHN0YXJ0T2ZIb3VyLAogIHN0YXJ0T2ZJU09XZWVrOiAoKSA9PiBzdGFydE9mSVNPV2VlaywKICBzdGFydE9mSVNPV2Vla1llYXI6ICgpID0+IHN0YXJ0T2ZJU09XZWVrWWVhciwKICBzdGFydE9mTWludXRlOiAoKSA9PiBzdGFydE9mTWludXRlLAogIHN0YXJ0T2ZNb250aDogKCkgPT4gc3RhcnRPZk1vbnRoLAogIHN0YXJ0T2ZRdWFydGVyOiAoKSA9PiBzdGFydE9mUXVhcnRlciwKICBzdGFydE9mU2Vjb25kOiAoKSA9PiBzdGFydE9mU2Vjb25kLAogIHN0YXJ0T2ZUb2RheTogKCkgPT4gc3RhcnRPZlRvZGF5LAogIHN0YXJ0T2ZUb21vcnJvdzogKCkgPT4gc3RhcnRPZlRvbW9ycm93LAogIHN0YXJ0T2ZXZWVrOiAoKSA9PiBzdGFydE9mV2VlaywKICBzdGFydE9mV2Vla1llYXI6ICgpID0+IHN0YXJ0T2ZXZWVrWWVhciwKICBzdGFydE9mWWVhcjogKCkgPT4gc3RhcnRPZlllYXIsCiAgc3RhcnRPZlllc3RlcmRheTogKCkgPT4gc3RhcnRPZlllc3RlcmRheSwKICBzdWI6ICgpID0+IHN1YiwKICBzdWJCdXNpbmVzc0RheXM6ICgpID0+IHN1YkJ1c2luZXNzRGF5cywKICBzdWJEYXlzOiAoKSA9PiBzdWJEYXlzLAogIHN1YkhvdXJzOiAoKSA9PiBzdWJIb3VycywKICBzdWJJU09XZWVrWWVhcnM6ICgpID0+IHN1YklTT1dlZWtZZWFycywKICBzdWJNaWxsaXNlY29uZHM6ICgpID0+IHN1Yk1pbGxpc2Vjb25kcywKICBzdWJNaW51dGVzOiAoKSA9PiBzdWJNaW51dGVzLAogIHN1Yk1vbnRoczogKCkgPT4gc3ViTW9udGhzLAogIHN1YlF1YXJ0ZXJzOiAoKSA9PiBzdWJRdWFydGVycywKICBzdWJTZWNvbmRzOiAoKSA9PiBzdWJTZWNvbmRzLAogIHN1YldlZWtzOiAoKSA9PiBzdWJXZWVrcywKICBzdWJZZWFyczogKCkgPT4gc3ViWWVhcnMsCiAgdG9EYXRlOiAoKSA9PiB0b0RhdGUsCiAgdHJhbnNwb3NlOiAoKSA9PiB0cmFuc3Bvc2UsCiAgd2Vla3NUb0RheXM6ICgpID0+IHdlZWtzVG9EYXlzLAogIHllYXJzVG9EYXlzOiAoKSA9PiB5ZWFyc1RvRGF5cywKICB5ZWFyc1RvTW9udGhzOiAoKSA9PiB5ZWFyc1RvTW9udGhzLAogIHllYXJzVG9RdWFydGVyczogKCkgPT4geWVhcnNUb1F1YXJ0ZXJzCn0pOwp2YXIgaW5pdF9kYXRlX2ZucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2FkZCgpOwogICAgaW5pdF9hZGRCdXNpbmVzc0RheXMoKTsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9hZGRIb3VycygpOwogICAgaW5pdF9hZGRJU09XZWVrWWVhcnMoKTsKICAgIGluaXRfYWRkTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X2FkZE1pbnV0ZXMoKTsKICAgIGluaXRfYWRkTW9udGhzKCk7CiAgICBpbml0X2FkZFF1YXJ0ZXJzKCk7CiAgICBpbml0X2FkZFNlY29uZHMoKTsKICAgIGluaXRfYWRkV2Vla3MoKTsKICAgIGluaXRfYWRkWWVhcnMoKTsKICAgIGluaXRfYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmcoKTsKICAgIGluaXRfY2xhbXAoKTsKICAgIGluaXRfY2xvc2VzdEluZGV4VG8oKTsKICAgIGluaXRfY2xvc2VzdFRvKCk7CiAgICBpbml0X2NvbXBhcmVBc2MoKTsKICAgIGluaXRfY29tcGFyZURlc2MoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfZGF5c1RvV2Vla3MoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkRheXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluSG91cnMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5NaW51dGVzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1vbnRocygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5RdWFydGVycygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5TZWNvbmRzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbldlZWtzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJblllYXJzKCk7CiAgICBpbml0X2VhY2hEYXlPZkludGVydmFsKCk7CiAgICBpbml0X2VhY2hIb3VyT2ZJbnRlcnZhbCgpOwogICAgaW5pdF9lYWNoTWludXRlT2ZJbnRlcnZhbCgpOwogICAgaW5pdF9lYWNoTW9udGhPZkludGVydmFsKCk7CiAgICBpbml0X2VhY2hRdWFydGVyT2ZJbnRlcnZhbCgpOwogICAgaW5pdF9lYWNoV2Vla09mSW50ZXJ2YWwoKTsKICAgIGluaXRfZWFjaFdlZWtlbmRPZkludGVydmFsKCk7CiAgICBpbml0X2VhY2hXZWVrZW5kT2ZNb250aCgpOwogICAgaW5pdF9lYWNoV2Vla2VuZE9mWWVhcigpOwogICAgaW5pdF9lYWNoWWVhck9mSW50ZXJ2YWwoKTsKICAgIGluaXRfZW5kT2ZEYXkoKTsKICAgIGluaXRfZW5kT2ZEZWNhZGUoKTsKICAgIGluaXRfZW5kT2ZIb3VyKCk7CiAgICBpbml0X2VuZE9mSVNPV2VlaygpOwogICAgaW5pdF9lbmRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X2VuZE9mTWludXRlKCk7CiAgICBpbml0X2VuZE9mTW9udGgoKTsKICAgIGluaXRfZW5kT2ZRdWFydGVyKCk7CiAgICBpbml0X2VuZE9mU2Vjb25kKCk7CiAgICBpbml0X2VuZE9mVG9kYXkoKTsKICAgIGluaXRfZW5kT2ZUb21vcnJvdygpOwogICAgaW5pdF9lbmRPZldlZWsoKTsKICAgIGluaXRfZW5kT2ZZZWFyKCk7CiAgICBpbml0X2VuZE9mWWVzdGVyZGF5KCk7CiAgICBpbml0X2Zvcm1hdCgpOwogICAgaW5pdF9mb3JtYXREaXN0YW5jZTIoKTsKICAgIGluaXRfZm9ybWF0RGlzdGFuY2VTdHJpY3QoKTsKICAgIGluaXRfZm9ybWF0RGlzdGFuY2VUb05vdygpOwogICAgaW5pdF9mb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0KCk7CiAgICBpbml0X2Zvcm1hdER1cmF0aW9uKCk7CiAgICBpbml0X2Zvcm1hdElTTygpOwogICAgaW5pdF9mb3JtYXRJU085MDc1KCk7CiAgICBpbml0X2Zvcm1hdElTT0R1cmF0aW9uKCk7CiAgICBpbml0X2Zvcm1hdFJGQzMzMzkoKTsKICAgIGluaXRfZm9ybWF0UkZDNzIzMSgpOwogICAgaW5pdF9mb3JtYXRSZWxhdGl2ZTIoKTsKICAgIGluaXRfZnJvbVVuaXhUaW1lKCk7CiAgICBpbml0X2dldERhdGUoKTsKICAgIGluaXRfZ2V0RGF5KCk7CiAgICBpbml0X2dldERheU9mWWVhcigpOwogICAgaW5pdF9nZXREYXlzSW5Nb250aCgpOwogICAgaW5pdF9nZXREYXlzSW5ZZWFyKCk7CiAgICBpbml0X2dldERlY2FkZSgpOwogICAgaW5pdF9nZXREZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF9nZXRIb3VycygpOwogICAgaW5pdF9nZXRJU09EYXkoKTsKICAgIGluaXRfZ2V0SVNPV2VlaygpOwogICAgaW5pdF9nZXRJU09XZWVrWWVhcigpOwogICAgaW5pdF9nZXRJU09XZWVrc0luWWVhcigpOwogICAgaW5pdF9nZXRNaWxsaXNlY29uZHMoKTsKICAgIGluaXRfZ2V0TWludXRlcygpOwogICAgaW5pdF9nZXRNb250aCgpOwogICAgaW5pdF9nZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFscygpOwogICAgaW5pdF9nZXRRdWFydGVyKCk7CiAgICBpbml0X2dldFNlY29uZHMoKTsKICAgIGluaXRfZ2V0VGltZSgpOwogICAgaW5pdF9nZXRVbml4VGltZSgpOwogICAgaW5pdF9nZXRXZWVrKCk7CiAgICBpbml0X2dldFdlZWtPZk1vbnRoKCk7CiAgICBpbml0X2dldFdlZWtZZWFyKCk7CiAgICBpbml0X2dldFdlZWtzSW5Nb250aCgpOwogICAgaW5pdF9nZXRZZWFyKCk7CiAgICBpbml0X2hvdXJzVG9NaWxsaXNlY29uZHMoKTsKICAgIGluaXRfaG91cnNUb01pbnV0ZXMoKTsKICAgIGluaXRfaG91cnNUb1NlY29uZHMoKTsKICAgIGluaXRfaW50ZXJ2YWwyKCk7CiAgICBpbml0X2ludGVydmFsVG9EdXJhdGlvbigpOwogICAgaW5pdF9pbnRsRm9ybWF0KCk7CiAgICBpbml0X2ludGxGb3JtYXREaXN0YW5jZSgpOwogICAgaW5pdF9pc0FmdGVyKCk7CiAgICBpbml0X2lzQmVmb3JlKCk7CiAgICBpbml0X2lzRGF0ZTIoKTsKICAgIGluaXRfaXNFcXVhbCgpOwogICAgaW5pdF9pc0V4aXN0cygpOwogICAgaW5pdF9pc0ZpcnN0RGF5T2ZNb250aCgpOwogICAgaW5pdF9pc0ZyaWRheSgpOwogICAgaW5pdF9pc0Z1dHVyZSgpOwogICAgaW5pdF9pc0xhc3REYXlPZk1vbnRoKCk7CiAgICBpbml0X2lzTGVhcFllYXIoKTsKICAgIGluaXRfaXNNYXRjaCgpOwogICAgaW5pdF9pc01vbmRheSgpOwogICAgaW5pdF9pc1Bhc3QoKTsKICAgIGluaXRfaXNTYW1lRGF5KCk7CiAgICBpbml0X2lzU2FtZUhvdXIoKTsKICAgIGluaXRfaXNTYW1lSVNPV2VlaygpOwogICAgaW5pdF9pc1NhbWVJU09XZWVrWWVhcigpOwogICAgaW5pdF9pc1NhbWVNaW51dGUoKTsKICAgIGluaXRfaXNTYW1lTW9udGgoKTsKICAgIGluaXRfaXNTYW1lUXVhcnRlcigpOwogICAgaW5pdF9pc1NhbWVTZWNvbmQoKTsKICAgIGluaXRfaXNTYW1lV2VlaygpOwogICAgaW5pdF9pc1NhbWVZZWFyKCk7CiAgICBpbml0X2lzU2F0dXJkYXkoKTsKICAgIGluaXRfaXNTdW5kYXkoKTsKICAgIGluaXRfaXNUaGlzSG91cigpOwogICAgaW5pdF9pc1RoaXNJU09XZWVrKCk7CiAgICBpbml0X2lzVGhpc01pbnV0ZSgpOwogICAgaW5pdF9pc1RoaXNNb250aCgpOwogICAgaW5pdF9pc1RoaXNRdWFydGVyKCk7CiAgICBpbml0X2lzVGhpc1NlY29uZCgpOwogICAgaW5pdF9pc1RoaXNXZWVrKCk7CiAgICBpbml0X2lzVGhpc1llYXIoKTsKICAgIGluaXRfaXNUaHVyc2RheSgpOwogICAgaW5pdF9pc1RvZGF5KCk7CiAgICBpbml0X2lzVG9tb3Jyb3coKTsKICAgIGluaXRfaXNUdWVzZGF5KCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfaXNXZWRuZXNkYXkoKTsKICAgIGluaXRfaXNXZWVrZW5kKCk7CiAgICBpbml0X2lzV2l0aGluSW50ZXJ2YWwoKTsKICAgIGluaXRfaXNZZXN0ZXJkYXkoKTsKICAgIGluaXRfbGFzdERheU9mRGVjYWRlKCk7CiAgICBpbml0X2xhc3REYXlPZklTT1dlZWsoKTsKICAgIGluaXRfbGFzdERheU9mSVNPV2Vla1llYXIoKTsKICAgIGluaXRfbGFzdERheU9mTW9udGgoKTsKICAgIGluaXRfbGFzdERheU9mUXVhcnRlcigpOwogICAgaW5pdF9sYXN0RGF5T2ZXZWVrKCk7CiAgICBpbml0X2xhc3REYXlPZlllYXIoKTsKICAgIGluaXRfbGlnaHRGb3JtYXQoKTsKICAgIGluaXRfbWF4MigpOwogICAgaW5pdF9taWxsaXNlY29uZHMoKTsKICAgIGluaXRfbWlsbGlzZWNvbmRzVG9Ib3VycygpOwogICAgaW5pdF9taWxsaXNlY29uZHNUb01pbnV0ZXMoKTsKICAgIGluaXRfbWlsbGlzZWNvbmRzVG9TZWNvbmRzKCk7CiAgICBpbml0X21pbjIoKTsKICAgIGluaXRfbWludXRlc1RvSG91cnMoKTsKICAgIGluaXRfbWludXRlc1RvTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X21pbnV0ZXNUb1NlY29uZHMoKTsKICAgIGluaXRfbW9udGhzVG9RdWFydGVycygpOwogICAgaW5pdF9tb250aHNUb1llYXJzKCk7CiAgICBpbml0X25leHREYXkoKTsKICAgIGluaXRfbmV4dEZyaWRheSgpOwogICAgaW5pdF9uZXh0TW9uZGF5KCk7CiAgICBpbml0X25leHRTYXR1cmRheSgpOwogICAgaW5pdF9uZXh0U3VuZGF5KCk7CiAgICBpbml0X25leHRUaHVyc2RheSgpOwogICAgaW5pdF9uZXh0VHVlc2RheSgpOwogICAgaW5pdF9uZXh0V2VkbmVzZGF5KCk7CiAgICBpbml0X3BhcnNlKCk7CiAgICBpbml0X3BhcnNlSVNPKCk7CiAgICBpbml0X3BhcnNlSlNPTigpOwogICAgaW5pdF9wcmV2aW91c0RheSgpOwogICAgaW5pdF9wcmV2aW91c0ZyaWRheSgpOwogICAgaW5pdF9wcmV2aW91c01vbmRheSgpOwogICAgaW5pdF9wcmV2aW91c1NhdHVyZGF5KCk7CiAgICBpbml0X3ByZXZpb3VzU3VuZGF5KCk7CiAgICBpbml0X3ByZXZpb3VzVGh1cnNkYXkoKTsKICAgIGluaXRfcHJldmlvdXNUdWVzZGF5KCk7CiAgICBpbml0X3ByZXZpb3VzV2VkbmVzZGF5KCk7CiAgICBpbml0X3F1YXJ0ZXJzVG9Nb250aHMoKTsKICAgIGluaXRfcXVhcnRlcnNUb1llYXJzKCk7CiAgICBpbml0X3JvdW5kVG9OZWFyZXN0SG91cnMoKTsKICAgIGluaXRfcm91bmRUb05lYXJlc3RNaW51dGVzKCk7CiAgICBpbml0X3NlY29uZHNUb0hvdXJzKCk7CiAgICBpbml0X3NlY29uZHNUb01pbGxpc2Vjb25kcygpOwogICAgaW5pdF9zZWNvbmRzVG9NaW51dGVzKCk7CiAgICBpbml0X3NldCgpOwogICAgaW5pdF9zZXREYXRlKCk7CiAgICBpbml0X3NldERheSgpOwogICAgaW5pdF9zZXREYXlPZlllYXIoKTsKICAgIGluaXRfc2V0RGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfc2V0SG91cnMoKTsKICAgIGluaXRfc2V0SVNPRGF5KCk7CiAgICBpbml0X3NldElTT1dlZWsoKTsKICAgIGluaXRfc2V0SVNPV2Vla1llYXIoKTsKICAgIGluaXRfc2V0TWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X3NldE1pbnV0ZXMoKTsKICAgIGluaXRfc2V0TW9udGgoKTsKICAgIGluaXRfc2V0UXVhcnRlcigpOwogICAgaW5pdF9zZXRTZWNvbmRzKCk7CiAgICBpbml0X3NldFdlZWsoKTsKICAgIGluaXRfc2V0V2Vla1llYXIoKTsKICAgIGluaXRfc2V0WWVhcigpOwogICAgaW5pdF9zdGFydE9mRGF5KCk7CiAgICBpbml0X3N0YXJ0T2ZEZWNhZGUoKTsKICAgIGluaXRfc3RhcnRPZkhvdXIoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X3N0YXJ0T2ZNaW51dGUoKTsKICAgIGluaXRfc3RhcnRPZk1vbnRoKCk7CiAgICBpbml0X3N0YXJ0T2ZRdWFydGVyKCk7CiAgICBpbml0X3N0YXJ0T2ZTZWNvbmQoKTsKICAgIGluaXRfc3RhcnRPZlRvZGF5KCk7CiAgICBpbml0X3N0YXJ0T2ZUb21vcnJvdygpOwogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgaW5pdF9zdGFydE9mV2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZlllYXIoKTsKICAgIGluaXRfc3RhcnRPZlllc3RlcmRheSgpOwogICAgaW5pdF9zdWIoKTsKICAgIGluaXRfc3ViQnVzaW5lc3NEYXlzKCk7CiAgICBpbml0X3N1YkRheXMoKTsKICAgIGluaXRfc3ViSG91cnMoKTsKICAgIGluaXRfc3ViSVNPV2Vla1llYXJzKCk7CiAgICBpbml0X3N1Yk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9zdWJNaW51dGVzKCk7CiAgICBpbml0X3N1Yk1vbnRocygpOwogICAgaW5pdF9zdWJRdWFydGVycygpOwogICAgaW5pdF9zdWJTZWNvbmRzKCk7CiAgICBpbml0X3N1YldlZWtzKCk7CiAgICBpbml0X3N1YlllYXJzKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaW5pdF90cmFuc3Bvc2UoKTsKICAgIGluaXRfd2Vla3NUb0RheXMoKTsKICAgIGluaXRfeWVhcnNUb0RheXMoKTsKICAgIGluaXRfeWVhcnNUb01vbnRocygpOwogICAgaW5pdF95ZWFyc1RvUXVhcnRlcnMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RheWpzQDEuMTEuMTkvbm9kZV9tb2R1bGVzL2RheWpzL2RheWpzLm1pbi5qcwp2YXIgcmVxdWlyZV9kYXlqc19taW4gPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RheWpzQDEuMTEuMTkvbm9kZV9tb2R1bGVzL2RheWpzL2RheWpzLm1pbi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAhKGZ1bmN0aW9uKHQ5LCBlMTEpIHsKICAgICAgIm9iamVjdCIgPT0gdHlwZW9mIGV4cG9ydHMgJiYgInVuZGVmaW5lZCIgIT0gdHlwZW9mIG1vZHVsZSA/IG1vZHVsZS5leHBvcnRzID0gZTExKCkgOiAiZnVuY3Rpb24iID09IHR5cGVvZiBkZWZpbmUgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShlMTEpIDogKHQ5ID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIGdsb2JhbFRoaXMgPyBnbG9iYWxUaGlzIDogdDkgfHwgc2VsZikuZGF5anMgPSBlMTEoKTsKICAgIH0pKGV4cG9ydHMsIChmdW5jdGlvbigpIHsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgdDkgPSAxZTMsIGUxMSA9IDZlNCwgbjEzID0gMzZlNSwgcjExID0gIm1pbGxpc2Vjb25kIiwgaTExID0gInNlY29uZCIsIHM5ID0gIm1pbnV0ZSIsIHU3ID0gImhvdXIiLCBhNSA9ICJkYXkiLCBvMTMgPSAid2VlayIsIGMxMSA9ICJtb250aCIsIGY3ID0gInF1YXJ0ZXIiLCBoOSA9ICJ5ZWFyIiwgZDYgPSAiZGF0ZSIsIGw2ID0gIkludmFsaWQgRGF0ZSIsICQzID0gL14oXGR7NH0pWy0vXT8oXGR7MSwyfSk/Wy0vXT8oXGR7MCwyfSlbVHRcc10qKFxkezEsMn0pPzo/KFxkezEsMn0pPzo/KFxkezEsMn0pP1suOl0/KFxkKyk/JC8sIHk1ID0gL1xbKFteXF1dKyldfFl7MSw0fXxNezEsNH18RHsxLDJ9fGR7MSw0fXxIezEsMn18aHsxLDJ9fGF8QXxtezEsMn18c3sxLDJ9fFp7MSwyfXxTU1MvZywgTTMgPSB7IG5hbWU6ICJlbiIsIHdlZWtkYXlzOiAiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksIG1vbnRoczogIkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksIG9yZGluYWw6IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHZhciBlMTIgPSBbInRoIiwgInN0IiwgIm5kIiwgInJkIl0sIG4xNCA9IHQxMCAlIDEwMDsKICAgICAgICByZXR1cm4gIlsiICsgdDEwICsgKGUxMlsobjE0IC0gMjApICUgMTBdIHx8IGUxMltuMTRdIHx8IGUxMlswXSkgKyAiXSI7CiAgICAgIH0gfSwgbTYgPSBmdW5jdGlvbih0MTAsIGUxMiwgbjE0KSB7CiAgICAgICAgdmFyIHIxMiA9IFN0cmluZyh0MTApOwogICAgICAgIHJldHVybiAhcjEyIHx8IHIxMi5sZW5ndGggPj0gZTEyID8gdDEwIDogIiIgKyBBcnJheShlMTIgKyAxIC0gcjEyLmxlbmd0aCkuam9pbihuMTQpICsgdDEwOwogICAgICB9LCB2NSA9IHsgczogbTYsIHo6IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHZhciBlMTIgPSAtdDEwLnV0Y09mZnNldCgpLCBuMTQgPSBNYXRoLmFicyhlMTIpLCByMTIgPSBNYXRoLmZsb29yKG4xNCAvIDYwKSwgaTEyID0gbjE0ICUgNjA7CiAgICAgICAgcmV0dXJuIChlMTIgPD0gMCA/ICIrIiA6ICItIikgKyBtNihyMTIsIDIsICIwIikgKyAiOiIgKyBtNihpMTIsIDIsICIwIik7CiAgICAgIH0sIG06IGZ1bmN0aW9uIHQxMChlMTIsIG4xNCkgewogICAgICAgIGlmIChlMTIuZGF0ZSgpIDwgbjE0LmRhdGUoKSkgcmV0dXJuIC10MTAobjE0LCBlMTIpOwogICAgICAgIHZhciByMTIgPSAxMiAqIChuMTQueWVhcigpIC0gZTEyLnllYXIoKSkgKyAobjE0Lm1vbnRoKCkgLSBlMTIubW9udGgoKSksIGkxMiA9IGUxMi5jbG9uZSgpLmFkZChyMTIsIGMxMSksIHMxMCA9IG4xNCAtIGkxMiA8IDAsIHU4ID0gZTEyLmNsb25lKCkuYWRkKHIxMiArIChzMTAgPyAtMSA6IDEpLCBjMTEpOwogICAgICAgIHJldHVybiArKC0ocjEyICsgKG4xNCAtIGkxMikgLyAoczEwID8gaTEyIC0gdTggOiB1OCAtIGkxMikpIHx8IDApOwogICAgICB9LCBhOiBmdW5jdGlvbih0MTApIHsKICAgICAgICByZXR1cm4gdDEwIDwgMCA/IE1hdGguY2VpbCh0MTApIHx8IDAgOiBNYXRoLmZsb29yKHQxMCk7CiAgICAgIH0sIHA6IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHJldHVybiB7IE06IGMxMSwgeTogaDksIHc6IG8xMywgZDogYTUsIEQ6IGQ2LCBoOiB1NywgbTogczksIHM6IGkxMSwgbXM6IHIxMSwgUTogZjcgfVt0MTBdIHx8IFN0cmluZyh0MTAgfHwgIiIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvcyQvLCAiIik7CiAgICAgIH0sIHU6IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHJldHVybiB2b2lkIDAgPT09IHQxMDsKICAgICAgfSB9LCBnNCA9ICJlbiIsIEQ0ID0ge307CiAgICAgIEQ0W2c0XSA9IE0zOwogICAgICB2YXIgcDcgPSAiJGlzRGF5anNPYmplY3QiLCBTNSA9IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHJldHVybiB0MTAgaW5zdGFuY2VvZiBfNCB8fCAhKCF0MTAgfHwgIXQxMFtwN10pOwogICAgICB9LCB3MyA9IGZ1bmN0aW9uIHQxMChlMTIsIG4xNCwgcjEyKSB7CiAgICAgICAgdmFyIGkxMjsKICAgICAgICBpZiAoIWUxMikgcmV0dXJuIGc0OwogICAgICAgIGlmICgic3RyaW5nIiA9PSB0eXBlb2YgZTEyKSB7CiAgICAgICAgICB2YXIgczEwID0gZTEyLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBENFtzMTBdICYmIChpMTIgPSBzMTApLCBuMTQgJiYgKEQ0W3MxMF0gPSBuMTQsIGkxMiA9IHMxMCk7CiAgICAgICAgICB2YXIgdTggPSBlMTIuc3BsaXQoIi0iKTsKICAgICAgICAgIGlmICghaTEyICYmIHU4Lmxlbmd0aCA+IDEpIHJldHVybiB0MTAodThbMF0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgYTYgPSBlMTIubmFtZTsKICAgICAgICAgIEQ0W2E2XSA9IGUxMiwgaTEyID0gYTY7CiAgICAgICAgfQogICAgICAgIHJldHVybiAhcjEyICYmIGkxMiAmJiAoZzQgPSBpMTIpLCBpMTIgfHwgIXIxMiAmJiBnNDsKICAgICAgfSwgTzIgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgIGlmIChTNSh0MTApKSByZXR1cm4gdDEwLmNsb25lKCk7CiAgICAgICAgdmFyIG4xNCA9ICJvYmplY3QiID09IHR5cGVvZiBlMTIgPyBlMTIgOiB7fTsKICAgICAgICByZXR1cm4gbjE0LmRhdGUgPSB0MTAsIG4xNC5hcmdzID0gYXJndW1lbnRzLCBuZXcgXzQobjE0KTsKICAgICAgfSwgYjUgPSB2NTsKICAgICAgYjUubCA9IHczLCBiNS5pID0gUzUsIGI1LncgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgIHJldHVybiBPMih0MTAsIHsgbG9jYWxlOiBlMTIuJEwsIHV0YzogZTEyLiR1LCB4OiBlMTIuJHgsICRvZmZzZXQ6IGUxMi4kb2Zmc2V0IH0pOwogICAgICB9OwogICAgICB2YXIgXzQgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgZnVuY3Rpb24gTTQodDEwKSB7CiAgICAgICAgICB0aGlzLiRMID0gdzModDEwLmxvY2FsZSwgbnVsbCwgdHJ1ZSksIHRoaXMucGFyc2UodDEwKSwgdGhpcy4keCA9IHRoaXMuJHggfHwgdDEwLnggfHwge30sIHRoaXNbcDddID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgdmFyIG03ID0gTTQucHJvdG90eXBlOwogICAgICAgIHJldHVybiBtNy5wYXJzZSA9IGZ1bmN0aW9uKHQxMCkgewogICAgICAgICAgdGhpcy4kZCA9IChmdW5jdGlvbih0MTEpIHsKICAgICAgICAgICAgdmFyIGUxMiA9IHQxMS5kYXRlLCBuMTQgPSB0MTEudXRjOwogICAgICAgICAgICBpZiAobnVsbCA9PT0gZTEyKSByZXR1cm4gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7CiAgICAgICAgICAgIGlmIChiNS51KGUxMikpIHJldHVybiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgICAgICAgaWYgKGUxMiBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBuZXcgRGF0ZShlMTIpOwogICAgICAgICAgICBpZiAoInN0cmluZyIgPT0gdHlwZW9mIGUxMiAmJiAhL1okL2kudGVzdChlMTIpKSB7CiAgICAgICAgICAgICAgdmFyIHIxMiA9IGUxMi5tYXRjaCgkMyk7CiAgICAgICAgICAgICAgaWYgKHIxMikgewogICAgICAgICAgICAgICAgdmFyIGkxMiA9IHIxMlsyXSAtIDEgfHwgMCwgczEwID0gKHIxMls3XSB8fCAiMCIpLnN1YnN0cmluZygwLCAzKTsKICAgICAgICAgICAgICAgIHJldHVybiBuMTQgPyBuZXcgRGF0ZShEYXRlLlVUQyhyMTJbMV0sIGkxMiwgcjEyWzNdIHx8IDEsIHIxMls0XSB8fCAwLCByMTJbNV0gfHwgMCwgcjEyWzZdIHx8IDAsIHMxMCkpIDogbmV3IERhdGUocjEyWzFdLCBpMTIsIHIxMlszXSB8fCAxLCByMTJbNF0gfHwgMCwgcjEyWzVdIHx8IDAsIHIxMls2XSB8fCAwLCBzMTApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZTEyKTsKICAgICAgICAgIH0pKHQxMCksIHRoaXMuaW5pdCgpOwogICAgICAgIH0sIG03LmluaXQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciB0MTAgPSB0aGlzLiRkOwogICAgICAgICAgdGhpcy4keSA9IHQxMC5nZXRGdWxsWWVhcigpLCB0aGlzLiRNID0gdDEwLmdldE1vbnRoKCksIHRoaXMuJEQgPSB0MTAuZ2V0RGF0ZSgpLCB0aGlzLiRXID0gdDEwLmdldERheSgpLCB0aGlzLiRIID0gdDEwLmdldEhvdXJzKCksIHRoaXMuJG0gPSB0MTAuZ2V0TWludXRlcygpLCB0aGlzLiRzID0gdDEwLmdldFNlY29uZHMoKSwgdGhpcy4kbXMgPSB0MTAuZ2V0TWlsbGlzZWNvbmRzKCk7CiAgICAgICAgfSwgbTcuJHV0aWxzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gYjU7CiAgICAgICAgfSwgbTcuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuICEodGhpcy4kZC50b1N0cmluZygpID09PSBsNik7CiAgICAgICAgfSwgbTcuaXNTYW1lID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIHZhciBuMTQgPSBPMih0MTApOwogICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRPZihlMTIpIDw9IG4xNCAmJiBuMTQgPD0gdGhpcy5lbmRPZihlMTIpOwogICAgICAgIH0sIG03LmlzQWZ0ZXIgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgICAgcmV0dXJuIE8yKHQxMCkgPCB0aGlzLnN0YXJ0T2YoZTEyKTsKICAgICAgICB9LCBtNy5pc0JlZm9yZSA9IGZ1bmN0aW9uKHQxMCwgZTEyKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5lbmRPZihlMTIpIDwgTzIodDEwKTsKICAgICAgICB9LCBtNy4kZyA9IGZ1bmN0aW9uKHQxMCwgZTEyLCBuMTQpIHsKICAgICAgICAgIHJldHVybiBiNS51KHQxMCkgPyB0aGlzW2UxMl0gOiB0aGlzLnNldChuMTQsIHQxMCk7CiAgICAgICAgfSwgbTcudW5peCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkgLyAxZTMpOwogICAgICAgIH0sIG03LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiRkLmdldFRpbWUoKTsKICAgICAgICB9LCBtNy5zdGFydE9mID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIHZhciBuMTQgPSB0aGlzLCByMTIgPSAhIWI1LnUoZTEyKSB8fCBlMTIsIGY4ID0gYjUucCh0MTApLCBsNyA9IGZ1bmN0aW9uKHQxMSwgZTEzKSB7CiAgICAgICAgICAgIHZhciBpMTIgPSBiNS53KG4xNC4kdSA/IERhdGUuVVRDKG4xNC4keSwgZTEzLCB0MTEpIDogbmV3IERhdGUobjE0LiR5LCBlMTMsIHQxMSksIG4xNCk7CiAgICAgICAgICAgIHJldHVybiByMTIgPyBpMTIgOiBpMTIuZW5kT2YoYTUpOwogICAgICAgICAgfSwgJDQgPSBmdW5jdGlvbih0MTEsIGUxMykgewogICAgICAgICAgICByZXR1cm4gYjUudyhuMTQudG9EYXRlKClbdDExXS5hcHBseShuMTQudG9EYXRlKCJzIiksIChyMTIgPyBbMCwgMCwgMCwgMF0gOiBbMjMsIDU5LCA1OSwgOTk5XSkuc2xpY2UoZTEzKSksIG4xNCk7CiAgICAgICAgICB9LCB5NiA9IHRoaXMuJFcsIE01ID0gdGhpcy4kTSwgbTggPSB0aGlzLiRELCB2NiA9ICJzZXQiICsgKHRoaXMuJHUgPyAiVVRDIiA6ICIiKTsKICAgICAgICAgIHN3aXRjaCAoZjgpIHsKICAgICAgICAgICAgY2FzZSBoOToKICAgICAgICAgICAgICByZXR1cm4gcjEyID8gbDcoMSwgMCkgOiBsNygzMSwgMTEpOwogICAgICAgICAgICBjYXNlIGMxMToKICAgICAgICAgICAgICByZXR1cm4gcjEyID8gbDcoMSwgTTUpIDogbDcoMCwgTTUgKyAxKTsKICAgICAgICAgICAgY2FzZSBvMTM6CiAgICAgICAgICAgICAgdmFyIGc1ID0gdGhpcy4kbG9jYWxlKCkud2Vla1N0YXJ0IHx8IDAsIEQ1ID0gKHk2IDwgZzUgPyB5NiArIDcgOiB5NikgLSBnNTsKICAgICAgICAgICAgICByZXR1cm4gbDcocjEyID8gbTggLSBENSA6IG04ICsgKDYgLSBENSksIE01KTsKICAgICAgICAgICAgY2FzZSBhNToKICAgICAgICAgICAgY2FzZSBkNjoKICAgICAgICAgICAgICByZXR1cm4gJDQodjYgKyAiSG91cnMiLCAwKTsKICAgICAgICAgICAgY2FzZSB1NzoKICAgICAgICAgICAgICByZXR1cm4gJDQodjYgKyAiTWludXRlcyIsIDEpOwogICAgICAgICAgICBjYXNlIHM5OgogICAgICAgICAgICAgIHJldHVybiAkNCh2NiArICJTZWNvbmRzIiwgMik7CiAgICAgICAgICAgIGNhc2UgaTExOgogICAgICAgICAgICAgIHJldHVybiAkNCh2NiArICJNaWxsaXNlY29uZHMiLCAzKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpOwogICAgICAgICAgfQogICAgICAgIH0sIG03LmVuZE9mID0gZnVuY3Rpb24odDEwKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydE9mKHQxMCwgZmFsc2UpOwogICAgICAgIH0sIG03LiRzZXQgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgICAgdmFyIG4xNCwgbzE0ID0gYjUucCh0MTApLCBmOCA9ICJzZXQiICsgKHRoaXMuJHUgPyAiVVRDIiA6ICIiKSwgbDcgPSAobjE0ID0ge30sIG4xNFthNV0gPSBmOCArICJEYXRlIiwgbjE0W2Q2XSA9IGY4ICsgIkRhdGUiLCBuMTRbYzExXSA9IGY4ICsgIk1vbnRoIiwgbjE0W2g5XSA9IGY4ICsgIkZ1bGxZZWFyIiwgbjE0W3U3XSA9IGY4ICsgIkhvdXJzIiwgbjE0W3M5XSA9IGY4ICsgIk1pbnV0ZXMiLCBuMTRbaTExXSA9IGY4ICsgIlNlY29uZHMiLCBuMTRbcjExXSA9IGY4ICsgIk1pbGxpc2Vjb25kcyIsIG4xNClbbzE0XSwgJDQgPSBvMTQgPT09IGE1ID8gdGhpcy4kRCArIChlMTIgLSB0aGlzLiRXKSA6IGUxMjsKICAgICAgICAgIGlmIChvMTQgPT09IGMxMSB8fCBvMTQgPT09IGg5KSB7CiAgICAgICAgICAgIHZhciB5NiA9IHRoaXMuY2xvbmUoKS5zZXQoZDYsIDEpOwogICAgICAgICAgICB5Ni4kZFtsN10oJDQpLCB5Ni5pbml0KCksIHRoaXMuJGQgPSB5Ni5zZXQoZDYsIE1hdGgubWluKHRoaXMuJEQsIHk2LmRheXNJbk1vbnRoKCkpKS4kZDsKICAgICAgICAgIH0gZWxzZSBsNyAmJiB0aGlzLiRkW2w3XSgkNCk7CiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0KCksIHRoaXM7CiAgICAgICAgfSwgbTcuc2V0ID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuJHNldCh0MTAsIGUxMik7CiAgICAgICAgfSwgbTcuZ2V0ID0gZnVuY3Rpb24odDEwKSB7CiAgICAgICAgICByZXR1cm4gdGhpc1tiNS5wKHQxMCldKCk7CiAgICAgICAgfSwgbTcuYWRkID0gZnVuY3Rpb24ocjEyLCBmOCkgewogICAgICAgICAgdmFyIGQ3LCBsNyA9IHRoaXM7CiAgICAgICAgICByMTIgPSBOdW1iZXIocjEyKTsKICAgICAgICAgIHZhciAkNCA9IGI1LnAoZjgpLCB5NiA9IGZ1bmN0aW9uKHQxMCkgewogICAgICAgICAgICB2YXIgZTEyID0gTzIobDcpOwogICAgICAgICAgICByZXR1cm4gYjUudyhlMTIuZGF0ZShlMTIuZGF0ZSgpICsgTWF0aC5yb3VuZCh0MTAgKiByMTIpKSwgbDcpOwogICAgICAgICAgfTsKICAgICAgICAgIGlmICgkNCA9PT0gYzExKSByZXR1cm4gdGhpcy5zZXQoYzExLCB0aGlzLiRNICsgcjEyKTsKICAgICAgICAgIGlmICgkNCA9PT0gaDkpIHJldHVybiB0aGlzLnNldChoOSwgdGhpcy4keSArIHIxMik7CiAgICAgICAgICBpZiAoJDQgPT09IGE1KSByZXR1cm4geTYoMSk7CiAgICAgICAgICBpZiAoJDQgPT09IG8xMykgcmV0dXJuIHk2KDcpOwogICAgICAgICAgdmFyIE01ID0gKGQ3ID0ge30sIGQ3W3M5XSA9IGUxMSwgZDdbdTddID0gbjEzLCBkN1tpMTFdID0gdDksIGQ3KVskNF0gfHwgMSwgbTggPSB0aGlzLiRkLmdldFRpbWUoKSArIHIxMiAqIE01OwogICAgICAgICAgcmV0dXJuIGI1LncobTgsIHRoaXMpOwogICAgICAgIH0sIG03LnN1YnRyYWN0ID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmFkZCgtMSAqIHQxMCwgZTEyKTsKICAgICAgICB9LCBtNy5mb3JtYXQgPSBmdW5jdGlvbih0MTApIHsKICAgICAgICAgIHZhciBlMTIgPSB0aGlzLCBuMTQgPSB0aGlzLiRsb2NhbGUoKTsKICAgICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHJldHVybiBuMTQuaW52YWxpZERhdGUgfHwgbDY7CiAgICAgICAgICB2YXIgcjEyID0gdDEwIHx8ICJZWVlZLU1NLUREVEhIOm1tOnNzWiIsIGkxMiA9IGI1LnoodGhpcyksIHMxMCA9IHRoaXMuJEgsIHU4ID0gdGhpcy4kbSwgYTYgPSB0aGlzLiRNLCBvMTQgPSBuMTQud2Vla2RheXMsIGMxMiA9IG4xNC5tb250aHMsIGY4ID0gbjE0Lm1lcmlkaWVtLCBoMTAgPSBmdW5jdGlvbih0MTEsIG4xNSwgaTEzLCBzMTEpIHsKICAgICAgICAgICAgcmV0dXJuIHQxMSAmJiAodDExW24xNV0gfHwgdDExKGUxMiwgcjEyKSkgfHwgaTEzW24xNV0uc2xpY2UoMCwgczExKTsKICAgICAgICAgIH0sIGQ3ID0gZnVuY3Rpb24odDExKSB7CiAgICAgICAgICAgIHJldHVybiBiNS5zKHMxMCAlIDEyIHx8IDEyLCB0MTEsICIwIik7CiAgICAgICAgICB9LCAkNCA9IGY4IHx8IGZ1bmN0aW9uKHQxMSwgZTEzLCBuMTUpIHsKICAgICAgICAgICAgdmFyIHIxMyA9IHQxMSA8IDEyID8gIkFNIiA6ICJQTSI7CiAgICAgICAgICAgIHJldHVybiBuMTUgPyByMTMudG9Mb3dlckNhc2UoKSA6IHIxMzsKICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gcjEyLnJlcGxhY2UoeTUsIChmdW5jdGlvbih0MTEsIHIxMykgewogICAgICAgICAgICByZXR1cm4gcjEzIHx8IChmdW5jdGlvbih0MTIpIHsKICAgICAgICAgICAgICBzd2l0Y2ggKHQxMikgewogICAgICAgICAgICAgICAgY2FzZSAiWVkiOgogICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGUxMi4keSkuc2xpY2UoLTIpOwogICAgICAgICAgICAgICAgY2FzZSAiWVlZWSI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBiNS5zKGUxMi4keSwgNCwgIjAiKTsKICAgICAgICAgICAgICAgIGNhc2UgIk0iOgogICAgICAgICAgICAgICAgICByZXR1cm4gYTYgKyAxOwogICAgICAgICAgICAgICAgY2FzZSAiTU0iOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhhNiArIDEsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJNTU0iOgogICAgICAgICAgICAgICAgICByZXR1cm4gaDEwKG4xNC5tb250aHNTaG9ydCwgYTYsIGMxMiwgMyk7CiAgICAgICAgICAgICAgICBjYXNlICJNTU1NIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGgxMChjMTIsIGE2KTsKICAgICAgICAgICAgICAgIGNhc2UgIkQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gZTEyLiREOwogICAgICAgICAgICAgICAgY2FzZSAiREQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhlMTIuJEQsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJkIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlMTIuJFcpOwogICAgICAgICAgICAgICAgY2FzZSAiZGQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gaDEwKG4xNC53ZWVrZGF5c01pbiwgZTEyLiRXLCBvMTQsIDIpOwogICAgICAgICAgICAgICAgY2FzZSAiZGRkIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGgxMChuMTQud2Vla2RheXNTaG9ydCwgZTEyLiRXLCBvMTQsIDMpOwogICAgICAgICAgICAgICAgY2FzZSAiZGRkZCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBvMTRbZTEyLiRXXTsKICAgICAgICAgICAgICAgIGNhc2UgIkgiOgogICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHMxMCk7CiAgICAgICAgICAgICAgICBjYXNlICJISCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBiNS5zKHMxMCwgMiwgIjAiKTsKICAgICAgICAgICAgICAgIGNhc2UgImgiOgogICAgICAgICAgICAgICAgICByZXR1cm4gZDcoMSk7CiAgICAgICAgICAgICAgICBjYXNlICJoaCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBkNygyKTsKICAgICAgICAgICAgICAgIGNhc2UgImEiOgogICAgICAgICAgICAgICAgICByZXR1cm4gJDQoczEwLCB1OCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICBjYXNlICJBIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuICQ0KHMxMCwgdTgsIGZhbHNlKTsKICAgICAgICAgICAgICAgIGNhc2UgIm0iOgogICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHU4KTsKICAgICAgICAgICAgICAgIGNhc2UgIm1tIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGI1LnModTgsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJzIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlMTIuJHMpOwogICAgICAgICAgICAgICAgY2FzZSAic3MiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhlMTIuJHMsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJTU1MiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhlMTIuJG1zLCAzLCAiMCIpOwogICAgICAgICAgICAgICAgY2FzZSAiWiI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBpMTI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9KSh0MTEpIHx8IGkxMi5yZXBsYWNlKCI6IiwgIiIpOwogICAgICAgICAgfSkpOwogICAgICAgIH0sIG03LnV0Y09mZnNldCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIDE1ICogLU1hdGgucm91bmQodGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpIC8gMTUpOwogICAgICAgIH0sIG03LmRpZmYgPSBmdW5jdGlvbihyMTIsIGQ3LCBsNykgewogICAgICAgICAgdmFyICQ0LCB5NiA9IHRoaXMsIE01ID0gYjUucChkNyksIG04ID0gTzIocjEyKSwgdjYgPSAobTgudXRjT2Zmc2V0KCkgLSB0aGlzLnV0Y09mZnNldCgpKSAqIGUxMSwgZzUgPSB0aGlzIC0gbTgsIEQ1ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBiNS5tKHk2LCBtOCk7CiAgICAgICAgICB9OwogICAgICAgICAgc3dpdGNoIChNNSkgewogICAgICAgICAgICBjYXNlIGg5OgogICAgICAgICAgICAgICQ0ID0gRDUoKSAvIDEyOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIGMxMToKICAgICAgICAgICAgICAkNCA9IEQ1KCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgZjc6CiAgICAgICAgICAgICAgJDQgPSBENSgpIC8gMzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBvMTM6CiAgICAgICAgICAgICAgJDQgPSAoZzUgLSB2NikgLyA2MDQ4ZTU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgYTU6CiAgICAgICAgICAgICAgJDQgPSAoZzUgLSB2NikgLyA4NjRlNTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSB1NzoKICAgICAgICAgICAgICAkNCA9IGc1IC8gbjEzOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIHM5OgogICAgICAgICAgICAgICQ0ID0gZzUgLyBlMTE7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgaTExOgogICAgICAgICAgICAgICQ0ID0gZzUgLyB0OTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAkNCA9IGc1OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGw3ID8gJDQgOiBiNS5hKCQ0KTsKICAgICAgICB9LCBtNy5kYXlzSW5Nb250aCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuZW5kT2YoYzExKS4kRDsKICAgICAgICB9LCBtNy4kbG9jYWxlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gRDRbdGhpcy4kTF07CiAgICAgICAgfSwgbTcubG9jYWxlID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIGlmICghdDEwKSByZXR1cm4gdGhpcy4kTDsKICAgICAgICAgIHZhciBuMTQgPSB0aGlzLmNsb25lKCksIHIxMiA9IHczKHQxMCwgZTEyLCB0cnVlKTsKICAgICAgICAgIHJldHVybiByMTIgJiYgKG4xNC4kTCA9IHIxMiksIG4xNDsKICAgICAgICB9LCBtNy5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGI1LncodGhpcy4kZCwgdGhpcyk7CiAgICAgICAgfSwgbTcudG9EYXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpOwogICAgICAgIH0sIG03LnRvSlNPTiA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy50b0lTT1N0cmluZygpIDogbnVsbDsKICAgICAgICB9LCBtNy50b0lTT1N0cmluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuJGQudG9JU09TdHJpbmcoKTsKICAgICAgICB9LCBtNy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuJGQudG9VVENTdHJpbmcoKTsKICAgICAgICB9LCBNNDsKICAgICAgfSkoKSwgazQgPSBfNC5wcm90b3R5cGU7CiAgICAgIHJldHVybiBPMi5wcm90b3R5cGUgPSBrNCwgW1siJG1zIiwgcjExXSwgWyIkcyIsIGkxMV0sIFsiJG0iLCBzOV0sIFsiJEgiLCB1N10sIFsiJFciLCBhNV0sIFsiJE0iLCBjMTFdLCBbIiR5IiwgaDldLCBbIiREIiwgZDZdXS5mb3JFYWNoKChmdW5jdGlvbih0MTApIHsKICAgICAgICBrNFt0MTBbMV1dID0gZnVuY3Rpb24oZTEyKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4kZyhlMTIsIHQxMFswXSwgdDEwWzFdKTsKICAgICAgICB9OwogICAgICB9KSksIE8yLmV4dGVuZCA9IGZ1bmN0aW9uKHQxMCwgZTEyKSB7CiAgICAgICAgcmV0dXJuIHQxMC4kaSB8fCAodDEwKGUxMiwgXzQsIE8yKSwgdDEwLiRpID0gdHJ1ZSksIE8yOwogICAgICB9LCBPMi5sb2NhbGUgPSB3MywgTzIuaXNEYXlqcyA9IFM1LCBPMi51bml4ID0gZnVuY3Rpb24odDEwKSB7CiAgICAgICAgcmV0dXJuIE8yKDFlMyAqIHQxMCk7CiAgICAgIH0sIE8yLmVuID0gRDRbZzRdLCBPMi5McyA9IEQ0LCBPMi5wID0ge30sIE8yOwogICAgfSkpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF5anNAMS4xMS4xOS9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2lzVG9kYXkuanMKdmFyIHJlcXVpcmVfaXNUb2RheSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vZGF5anNAMS4xMS4xOS9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2lzVG9kYXkuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgIShmdW5jdGlvbihlMTEsIG8xMykgewogICAgICAib2JqZWN0IiA9PSB0eXBlb2YgZXhwb3J0cyAmJiAidW5kZWZpbmVkIiAhPSB0eXBlb2YgbW9kdWxlID8gbW9kdWxlLmV4cG9ydHMgPSBvMTMoKSA6ICJmdW5jdGlvbiIgPT0gdHlwZW9mIGRlZmluZSAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKG8xMykgOiAoZTExID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIGdsb2JhbFRoaXMgPyBnbG9iYWxUaGlzIDogZTExIHx8IHNlbGYpLmRheWpzX3BsdWdpbl9pc1RvZGF5ID0gbzEzKCk7CiAgICB9KShleHBvcnRzLCAoZnVuY3Rpb24oKSB7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUxMSwgbzEzLCB0OSkgewogICAgICAgIG8xMy5wcm90b3R5cGUuaXNUb2RheSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIGUxMiA9ICJZWVlZLU1NLUREIiwgbzE0ID0gdDkoKTsKICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChlMTIpID09PSBvMTQuZm9ybWF0KGUxMik7CiAgICAgICAgfTsKICAgICAgfTsKICAgIH0pKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3BhcnNlLW1zQDQuMC4wL25vZGVfbW9kdWxlcy9wYXJzZS1tcy9pbmRleC5qcwpmdW5jdGlvbiBwYXJzZU51bWJlcihtaWxsaXNlY29uZHMyKSB7CiAgcmV0dXJuIHsKICAgIGRheXM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzMiAvIDg2NGU1KSwKICAgIGhvdXJzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kczIgLyAzNmU1ICUgMjQpLAogICAgbWludXRlczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMyIC8gNmU0ICUgNjApLAogICAgc2Vjb25kczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMyIC8gMWUzICUgNjApLAogICAgbWlsbGlzZWNvbmRzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kczIgJSAxZTMpLAogICAgbWljcm9zZWNvbmRzOiBNYXRoLnRydW5jKHRvWmVyb0lmSW5maW5pdHkobWlsbGlzZWNvbmRzMiAqIDFlMykgJSAxZTMpLAogICAgbmFub3NlY29uZHM6IE1hdGgudHJ1bmModG9aZXJvSWZJbmZpbml0eShtaWxsaXNlY29uZHMyICogMWU2KSAlIDFlMykKICB9Owp9CmZ1bmN0aW9uIHBhcnNlQmlnaW50KG1pbGxpc2Vjb25kczIpIHsKICByZXR1cm4gewogICAgZGF5czogbWlsbGlzZWNvbmRzMiAvIDg2NDAwMDAwbiwKICAgIGhvdXJzOiBtaWxsaXNlY29uZHMyIC8gMzYwMDAwMG4gJSAyNG4sCiAgICBtaW51dGVzOiBtaWxsaXNlY29uZHMyIC8gNjAwMDBuICUgNjBuLAogICAgc2Vjb25kczogbWlsbGlzZWNvbmRzMiAvIDEwMDBuICUgNjBuLAogICAgbWlsbGlzZWNvbmRzOiBtaWxsaXNlY29uZHMyICUgMTAwMG4sCiAgICBtaWNyb3NlY29uZHM6IDBuLAogICAgbmFub3NlY29uZHM6IDBuCiAgfTsKfQpmdW5jdGlvbiBwYXJzZU1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMyKSB7CiAgc3dpdGNoICh0eXBlb2YgbWlsbGlzZWNvbmRzMikgewogICAgY2FzZSAibnVtYmVyIjogewogICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG1pbGxpc2Vjb25kczIpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1pbGxpc2Vjb25kczIpOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSAiYmlnaW50IjogewogICAgICByZXR1cm4gcGFyc2VCaWdpbnQobWlsbGlzZWNvbmRzMik7CiAgICB9CiAgfQogIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgZmluaXRlIG51bWJlciBvciBiaWdpbnQiKTsKfQp2YXIgdG9aZXJvSWZJbmZpbml0eTsKdmFyIGluaXRfcGFyc2VfbXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYXJzZS1tc0A0LjAuMC9ub2RlX21vZHVsZXMvcGFyc2UtbXMvaW5kZXguanMiKCkgewogICAgdG9aZXJvSWZJbmZpbml0eSA9ICh2YWx1ZTIpID0+IE51bWJlci5pc0Zpbml0ZSh2YWx1ZTIpID8gdmFsdWUyIDogMDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ByZXR0eS1tc0A5LjMuMC9ub2RlX21vZHVsZXMvcHJldHR5LW1zL2luZGV4LmpzCmZ1bmN0aW9uIHByZXR0eU1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMyLCBvcHRpb25zKSB7CiAgY29uc3QgaXNCaWdJbnQgPSB0eXBlb2YgbWlsbGlzZWNvbmRzMiA9PT0gImJpZ2ludCI7CiAgaWYgKCFpc0JpZ0ludCAmJiAhTnVtYmVyLmlzRmluaXRlKG1pbGxpc2Vjb25kczIpKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGZpbml0ZSBudW1iZXIgb3IgYmlnaW50Iik7CiAgfQogIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfTsKICBjb25zdCBzaWduID0gbWlsbGlzZWNvbmRzMiA8IDAgPyAiLSIgOiAiIjsKICBtaWxsaXNlY29uZHMyID0gbWlsbGlzZWNvbmRzMiA8IDAgPyAtbWlsbGlzZWNvbmRzMiA6IG1pbGxpc2Vjb25kczI7CiAgaWYgKG9wdGlvbnMuY29sb25Ob3RhdGlvbikgewogICAgb3B0aW9ucy5jb21wYWN0ID0gZmFsc2U7CiAgICBvcHRpb25zLmZvcm1hdFN1Yk1pbGxpc2Vjb25kcyA9IGZhbHNlOwogICAgb3B0aW9ucy5zZXBhcmF0ZU1pbGxpc2Vjb25kcyA9IGZhbHNlOwogICAgb3B0aW9ucy52ZXJib3NlID0gZmFsc2U7CiAgfQogIGlmIChvcHRpb25zLmNvbXBhY3QpIHsKICAgIG9wdGlvbnMudW5pdENvdW50ID0gMTsKICAgIG9wdGlvbnMuc2Vjb25kc0RlY2ltYWxEaWdpdHMgPSAwOwogICAgb3B0aW9ucy5taWxsaXNlY29uZHNEZWNpbWFsRGlnaXRzID0gMDsKICB9CiAgbGV0IHJlc3VsdCA9IFtdOwogIGNvbnN0IGZsb29yRGVjaW1hbHMgPSAodmFsdWUyLCBkZWNpbWFsRGlnaXRzKSA9PiB7CiAgICBjb25zdCBmbG9vcmVkSW50ZXJpbVZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZTIgKiAxMCAqKiBkZWNpbWFsRGlnaXRzICsgU0VDT05EX1JPVU5ESU5HX0VQU0lMT04pOwogICAgY29uc3QgZmxvb3JlZFZhbHVlID0gTWF0aC5yb3VuZChmbG9vcmVkSW50ZXJpbVZhbHVlKSAvIDEwICoqIGRlY2ltYWxEaWdpdHM7CiAgICByZXR1cm4gZmxvb3JlZFZhbHVlLnRvRml4ZWQoZGVjaW1hbERpZ2l0cyk7CiAgfTsKICBjb25zdCBhZGQzID0gKHZhbHVlMiwgbG9uZywgc2hvcnQsIHZhbHVlU3RyaW5nKSA9PiB7CiAgICBpZiAoKHJlc3VsdC5sZW5ndGggPT09IDAgfHwgIW9wdGlvbnMuY29sb25Ob3RhdGlvbikgJiYgaXNaZXJvKHZhbHVlMikgJiYgIShvcHRpb25zLmNvbG9uTm90YXRpb24gJiYgc2hvcnQgPT09ICJtIikpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFsdWVTdHJpbmcgPz89IFN0cmluZyh2YWx1ZTIpOwogICAgaWYgKG9wdGlvbnMuY29sb25Ob3RhdGlvbikgewogICAgICBjb25zdCB3aG9sZURpZ2l0cyA9IHZhbHVlU3RyaW5nLmluY2x1ZGVzKCIuIikgPyB2YWx1ZVN0cmluZy5zcGxpdCgiLiIpWzBdLmxlbmd0aCA6IHZhbHVlU3RyaW5nLmxlbmd0aDsKICAgICAgY29uc3QgbWluTGVuZ3RoID0gcmVzdWx0Lmxlbmd0aCA+IDAgPyAyIDogMTsKICAgICAgdmFsdWVTdHJpbmcgPSAiMCIucmVwZWF0KE1hdGgubWF4KDAsIG1pbkxlbmd0aCAtIHdob2xlRGlnaXRzKSkgKyB2YWx1ZVN0cmluZzsKICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlU3RyaW5nICs9IG9wdGlvbnMudmVyYm9zZSA/ICIgIiArIHBsdXJhbGl6ZShsb25nLCB2YWx1ZTIpIDogc2hvcnQ7CiAgICB9CiAgICByZXN1bHQucHVzaCh2YWx1ZVN0cmluZyk7CiAgfTsKICBjb25zdCBwYXJzZWQgPSBwYXJzZU1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMyKTsKICBjb25zdCBkYXlzMiA9IEJpZ0ludChwYXJzZWQuZGF5cyk7CiAgaWYgKG9wdGlvbnMuaGlkZVllYXJBbmREYXlzKSB7CiAgICBhZGQzKEJpZ0ludChkYXlzMikgKiAyNG4gKyBCaWdJbnQocGFyc2VkLmhvdXJzKSwgImhvdXIiLCAiaCIpOwogIH0gZWxzZSB7CiAgICBpZiAob3B0aW9ucy5oaWRlWWVhcikgewogICAgICBhZGQzKGRheXMyLCAiZGF5IiwgImQiKTsKICAgIH0gZWxzZSB7CiAgICAgIGFkZDMoZGF5czIgLyAzNjVuLCAieWVhciIsICJ5Iik7CiAgICAgIGFkZDMoZGF5czIgJSAzNjVuLCAiZGF5IiwgImQiKTsKICAgIH0KICAgIGFkZDMoTnVtYmVyKHBhcnNlZC5ob3VycyksICJob3VyIiwgImgiKTsKICB9CiAgYWRkMyhOdW1iZXIocGFyc2VkLm1pbnV0ZXMpLCAibWludXRlIiwgIm0iKTsKICBpZiAoIW9wdGlvbnMuaGlkZVNlY29uZHMpIHsKICAgIGlmIChvcHRpb25zLnNlcGFyYXRlTWlsbGlzZWNvbmRzIHx8IG9wdGlvbnMuZm9ybWF0U3ViTWlsbGlzZWNvbmRzIHx8ICFvcHRpb25zLmNvbG9uTm90YXRpb24gJiYgbWlsbGlzZWNvbmRzMiA8IDFlMyAmJiAhb3B0aW9ucy5zdWJTZWNvbmRzQXNEZWNpbWFscykgewogICAgICBjb25zdCBzZWNvbmRzID0gTnVtYmVyKHBhcnNlZC5zZWNvbmRzKTsKICAgICAgY29uc3QgbWlsbGlzZWNvbmRzMyA9IE51bWJlcihwYXJzZWQubWlsbGlzZWNvbmRzKTsKICAgICAgY29uc3QgbWljcm9zZWNvbmRzID0gTnVtYmVyKHBhcnNlZC5taWNyb3NlY29uZHMpOwogICAgICBjb25zdCBuYW5vc2Vjb25kcyA9IE51bWJlcihwYXJzZWQubmFub3NlY29uZHMpOwogICAgICBhZGQzKHNlY29uZHMsICJzZWNvbmQiLCAicyIpOwogICAgICBpZiAob3B0aW9ucy5mb3JtYXRTdWJNaWxsaXNlY29uZHMpIHsKICAgICAgICBhZGQzKG1pbGxpc2Vjb25kczMsICJtaWxsaXNlY29uZCIsICJtcyIpOwogICAgICAgIGFkZDMobWljcm9zZWNvbmRzLCAibWljcm9zZWNvbmQiLCAiXHhCNXMiKTsKICAgICAgICBhZGQzKG5hbm9zZWNvbmRzLCAibmFub3NlY29uZCIsICJucyIpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kc0FuZEJlbG93ID0gbWlsbGlzZWNvbmRzMyArIG1pY3Jvc2Vjb25kcyAvIDFlMyArIG5hbm9zZWNvbmRzIC8gMWU2OwogICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kc0RlY2ltYWxEaWdpdHMgPSB0eXBlb2Ygb3B0aW9ucy5taWxsaXNlY29uZHNEZWNpbWFsRGlnaXRzID09PSAibnVtYmVyIiA/IG9wdGlvbnMubWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cyA6IDA7CiAgICAgICAgY29uc3Qgcm91bmRlZE1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kc0FuZEJlbG93ID49IDEgPyBNYXRoLnJvdW5kKG1pbGxpc2Vjb25kc0FuZEJlbG93KSA6IE1hdGguY2VpbChtaWxsaXNlY29uZHNBbmRCZWxvdyk7CiAgICAgICAgY29uc3QgbWlsbGlzZWNvbmRzU3RyaW5nID0gbWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cyA/IG1pbGxpc2Vjb25kc0FuZEJlbG93LnRvRml4ZWQobWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cykgOiByb3VuZGVkTWlsbGlzZWNvbmRzOwogICAgICAgIGFkZDMoCiAgICAgICAgICBOdW1iZXIucGFyc2VGbG9hdChtaWxsaXNlY29uZHNTdHJpbmcpLAogICAgICAgICAgIm1pbGxpc2Vjb25kIiwKICAgICAgICAgICJtcyIsCiAgICAgICAgICBtaWxsaXNlY29uZHNTdHJpbmcKICAgICAgICApOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb25zdCBzZWNvbmRzID0gKGlzQmlnSW50ID8gTnVtYmVyKG1pbGxpc2Vjb25kczIgJSBPTkVfREFZX0lOX01JTExJU0VDT05EUykgOiBtaWxsaXNlY29uZHMyKSAvIDFlMyAlIDYwOwogICAgICBjb25zdCBzZWNvbmRzRGVjaW1hbERpZ2l0cyA9IHR5cGVvZiBvcHRpb25zLnNlY29uZHNEZWNpbWFsRGlnaXRzID09PSAibnVtYmVyIiA/IG9wdGlvbnMuc2Vjb25kc0RlY2ltYWxEaWdpdHMgOiAxOwogICAgICBjb25zdCBzZWNvbmRzRml4ZWQgPSBmbG9vckRlY2ltYWxzKHNlY29uZHMsIHNlY29uZHNEZWNpbWFsRGlnaXRzKTsKICAgICAgY29uc3Qgc2Vjb25kc1N0cmluZyA9IG9wdGlvbnMua2VlcERlY2ltYWxzT25XaG9sZVNlY29uZHMgPyBzZWNvbmRzRml4ZWQgOiBzZWNvbmRzRml4ZWQucmVwbGFjZSgvXC4wKyQvLCAiIik7CiAgICAgIGFkZDMoTnVtYmVyLnBhcnNlRmxvYXQoc2Vjb25kc1N0cmluZyksICJzZWNvbmQiLCAicyIsIHNlY29uZHNTdHJpbmcpOwogICAgfQogIH0KICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIHNpZ24gKyAiMCIgKyAob3B0aW9ucy52ZXJib3NlID8gIiBtaWxsaXNlY29uZHMiIDogIm1zIik7CiAgfQogIGNvbnN0IHNlcGFyYXRvciA9IG9wdGlvbnMuY29sb25Ob3RhdGlvbiA/ICI6IiA6ICIgIjsKICBpZiAodHlwZW9mIG9wdGlvbnMudW5pdENvdW50ID09PSAibnVtYmVyIikgewogICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIE1hdGgubWF4KG9wdGlvbnMudW5pdENvdW50LCAxKSk7CiAgfQogIHJldHVybiBzaWduICsgcmVzdWx0LmpvaW4oc2VwYXJhdG9yKTsKfQp2YXIgaXNaZXJvLCBwbHVyYWxpemUsIFNFQ09ORF9ST1VORElOR19FUFNJTE9OLCBPTkVfREFZX0lOX01JTExJU0VDT05EUzsKdmFyIGluaXRfcHJldHR5X21zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LW1zQDkuMy4wL25vZGVfbW9kdWxlcy9wcmV0dHktbXMvaW5kZXguanMiKCkgewogICAgaW5pdF9wYXJzZV9tcygpOwogICAgaXNaZXJvID0gKHZhbHVlMikgPT4gdmFsdWUyID09PSAwIHx8IHZhbHVlMiA9PT0gMG47CiAgICBwbHVyYWxpemUgPSAod29yZCwgY291bnQyKSA9PiBjb3VudDIgPT09IDEgfHwgY291bnQyID09PSAxbiA/IHdvcmQgOiBgJHt3b3JkfXNgOwogICAgU0VDT05EX1JPVU5ESU5HX0VQU0lMT04gPSAxZS03OwogICAgT05FX0RBWV9JTl9NSUxMSVNFQ09ORFMgPSAyNG4gKiA2MG4gKiA2MG4gKiAxMDAwbjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLnBsdWdpbnMuanMKdmFyIGltcG9ydF9kYXlqcywgaW1wb3J0X2lzVG9kYXk7CnZhciBpbml0X3NtYXJ0dGltZV9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9zbWFydHRpbWUucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHM3KCk7CiAgICBpbml0X2Rpc3RfdHMzKCk7CiAgICBpbml0X2Rpc3RfdHMoKTsKICAgIGluaXRfY3JvbmVyKCk7CiAgICBpbml0X2RhdGVfZm5zKCk7CiAgICBpbXBvcnRfZGF5anMgPSBfX3RvRVNNKHJlcXVpcmVfZGF5anNfbWluKCksIDEpOwogICAgaW1wb3J0X2lzVG9kYXkgPSBfX3RvRVNNKHJlcXVpcmVfaXNUb2RheSgpLCAxKTsKICAgIGluaXRfcHJldHR5X21zKCk7CiAgICBpbXBvcnRfZGF5anMuZGVmYXVsdC5leHRlbmQoaW1wb3J0X2lzVG9kYXkuZGVmYXVsdCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmNyb25wYXJzZXIuanMKdmFyIENyb25QYXJzZXI7CnZhciBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25wYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmNyb25wYXJzZXIuanMiKCkgewogICAgaW5pdF9zbWFydHRpbWVfcGx1Z2lucygpOwogICAgQ3JvblBhcnNlciA9IGNsYXNzIHsKICAgICAgZ2V0IGNyb25BcnJheSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5jcm9uRXhwcmVzc2lvbi5zcGxpdCgiICIpOwogICAgICB9CiAgICAgIGNvbnN0cnVjdG9yKGNyb25FeHByZXNzaW9uQXJnKSB7CiAgICAgICAgdGhpcy5jcm9uRXhwcmVzc2lvbiA9IGNyb25FeHByZXNzaW9uQXJnOwogICAgICAgIGlmICh0aGlzLmNyb25BcnJheS5sZW5ndGggPCA2KSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNyb25QYXJzZXIgbmVlZHMgc2Vjb25kIGxldmVsIGFjY3VyYWN5Iik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldE5leHRQYXJ0TWF0Y2goY3JvblBhcnQsIHN0YXJ0VmFsdWUsIG1vZHVsb0FyZykgewogICAgICAgIGlmIChjcm9uUGFydCA9PT0gIioiKSB7CiAgICAgICAgICByZXR1cm4gc3RhcnRWYWx1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGNyb25QYXJ0LmluY2x1ZGVzKCIvIikpIHsKICAgICAgICAgIGNvbnN0IGV2ZXJ5MyA9IHBhcnNlSW50KGNyb25QYXJ0LnNwbGl0KCIvIilbMV0sIDEwKTsKICAgICAgICAgIGNvbnN0IGZpbmRFdmVuTWF0Y2ggPSAocmVjdXJzaW9uU3RhcnRBcmcpID0+IHsKICAgICAgICAgICAgaWYgKHJlY3Vyc2lvblN0YXJ0QXJnICUgZXZlcnkzID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2lvblN0YXJ0QXJnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJldHVybiBmaW5kRXZlbk1hdGNoKHJlY3Vyc2lvblN0YXJ0QXJnICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gZmluZEV2ZW5NYXRjaChzdGFydFZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaWYgKHBhcnNlSW50KGNyb25QYXJ0LCAxMCkgfHwgY3JvblBhcnQgPT09ICIwIikgewogICAgICAgICAgY29uc3QgbWF0Y2gyID0gcGFyc2VJbnQoY3JvblBhcnQsIDEwKTsKICAgICAgICAgIHJldHVybiBtYXRjaDI7CiAgICAgICAgfQogICAgICB9CiAgICAgIG1zVG9OZXh0KCkgewogICAgICAgIGNvbnN0IGNyb25BcnJheSA9IHRoaXMuY3JvbkFycmF5OwogICAgICAgIGNvbnN0IHNlY29uZEV4cHJlc3Npb24gPSBjcm9uQXJyYXlbMF07CiAgICAgICAgY29uc3QgbWludXRlRXhwcmVzc2lvbiA9IGNyb25BcnJheVsxXTsKICAgICAgICBjb25zdCBob3VyRXhwcmVzc2lvbiA9IGNyb25BcnJheVsyXTsKICAgICAgICBjb25zdCBkYXlFeHByZXNzaW9uID0gY3JvbkFycmF5WzNdOwogICAgICAgIGNvbnN0IG1vbnRoRXhwcmVzc2lvbiA9IGNyb25BcnJheVs0XTsKICAgICAgICBjb25zdCB5ZWFyRXhwcmVzc2lvbiA9IGNyb25BcnJheVs1XTsKICAgICAgICBsZXQgY3VycmVudERhdGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgICBsZXQgY3VycmVudFNlY29uZCA9IGN1cnJlbnREYXRlLmdldFNlY29uZHMoKSArIDE7CiAgICAgICAgbGV0IGN1cnJlbnRNaW51dGUgPSBjdXJyZW50RGF0ZS5nZXRNaW51dGVzKCk7CiAgICAgICAgbGV0IGN1cnJlbnRIb3VyID0gY3VycmVudERhdGUuZ2V0SG91cnMoKTsKICAgICAgICBsZXQgY3VycmVudERheSA9IGN1cnJlbnREYXRlLmdldERhdGUoKTsKICAgICAgICBsZXQgY3VycmVudE1vbnRoID0gY3VycmVudERhdGUuZ2V0TW9udGgoKTsKICAgICAgICBsZXQgY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpOwogICAgICAgIGNvbnN0IHRhcmdldFNlY29uZCA9IHRoaXMuZ2V0TmV4dFBhcnRNYXRjaChzZWNvbmRFeHByZXNzaW9uLCBjdXJyZW50U2Vjb25kLCA1OSk7CiAgICAgICAgaWYgKHRhcmdldFNlY29uZCA8IGN1cnJlbnRTZWNvbmQpIHsKICAgICAgICAgIGN1cnJlbnRNaW51dGUgPSAoY3VycmVudE1pbnV0ZSArIDEpICUgNTk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHRhcmdldE1pbnV0ZSA9IHRoaXMuZ2V0TmV4dFBhcnRNYXRjaChtaW51dGVFeHByZXNzaW9uLCBjdXJyZW50TWludXRlLCA1OSk7CiAgICAgICAgaWYgKHRhcmdldE1pbnV0ZSA8IGN1cnJlbnRNaW51dGUpIHsKICAgICAgICAgIGN1cnJlbnRIb3VyID0gKGN1cnJlbnRIb3VyICsgMSkgJSAyMzsKICAgICAgICB9CiAgICAgICAgY29uc3QgdGFyZ2V0SG91ciA9IHRoaXMuZ2V0TmV4dFBhcnRNYXRjaChob3VyRXhwcmVzc2lvbiwgY3VycmVudEhvdXIsIDIzKTsKICAgICAgICBpZiAodGFyZ2V0SG91ciA8IGN1cnJlbnRIb3VyKSB7CiAgICAgICAgICBjdXJyZW50RGF5ID0gKGN1cnJlbnREYXkgKyAxKSAlIDMwOwogICAgICAgIH0KICAgICAgICBjb25zdCB0YXJnZXREYXkgPSBjdXJyZW50RGF5OwogICAgICAgIGlmICh0YXJnZXREYXkgPCBjdXJyZW50RGF5KSB7CiAgICAgICAgICBjdXJyZW50TW9udGggPSAoY3VycmVudE1vbnRoICsgMSkgJSAxMTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdGFyZ2V0TW9udGggPSBjdXJyZW50TW9udGg7CiAgICAgICAgaWYgKHRhcmdldE1vbnRoIDwgY3VycmVudE1vbnRoKSB7CiAgICAgICAgICBjdXJyZW50WWVhciA9IGN1cnJlbnRZZWFyICsgMTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdGFyZ2V0WWVhciA9IGN1cnJlbnRZZWFyOwogICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBuZXcgRGF0ZSh0YXJnZXRZZWFyLCB0YXJnZXRNb250aCwgdGFyZ2V0RGF5LCB0YXJnZXRIb3VyLCB0YXJnZXRNaW51dGUsIHRhcmdldFNlY29uZCk7CiAgICAgICAgY29uc3QgdGFyZ2V0VGltZSA9IHRhcmdldERhdGUuZ2V0VGltZSgpOwogICAgICAgIHJldHVybiB0YXJnZXRUaW1lIC0gRGF0ZS5ub3coKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3JvbmpvYi5qcwp2YXIgQ3JvbkpvYjsKdmFyIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfY3JvbmpvYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3JvbmpvYi5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25tYW5hZ2VyKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25wYXJzZXIoKTsKICAgIENyb25Kb2IgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGNyb25NYW5hZ2VyLCBjcm9uRXhwcmVzc2lvbkFyZywgam9iRnVuY3Rpb24pIHsKICAgICAgICB0aGlzLnN0YXR1cyA9ICJpbml0aWFsIjsKICAgICAgICB0aGlzLm5leHRFeGVjdXRpb25Vbml4ID0gMDsKICAgICAgICB0aGlzLmNyb25FeHByZXNzaW9uID0gY3JvbkV4cHJlc3Npb25Bcmc7CiAgICAgICAgdGhpcy5qb2JGdW5jdGlvbiA9IGpvYkZ1bmN0aW9uOwogICAgICAgIHRoaXMuY3JvblBhcnNlciA9IG5ldyBjcm9uZXJfZXhwb3J0cy5Dcm9uKGNyb25FeHByZXNzaW9uQXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIHdldGhlciB0aGUgY3JvbmpvYiBuZWVkcyB0byBiZSBleGVjdXRlZAogICAgICAgKi8KICAgICAgY2hlY2tFeGVjdXRpb24oKSB7CiAgICAgICAgaWYgKHRoaXMubmV4dEV4ZWN1dGlvblVuaXggPT09IDApIHsKICAgICAgICAgIHRoaXMuZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKTsKICAgICAgICB9CiAgICAgICAgaWYgKERhdGUubm93KCkgPiB0aGlzLm5leHRFeGVjdXRpb25Vbml4KSB7CiAgICAgICAgICBjb25zdCBtYXliZVByb21pc2UgPSB0aGlzLmpvYkZ1bmN0aW9uKHRoaXMubmV4dEV4ZWN1dGlvblVuaXgpOwogICAgICAgICAgaWYgKG1heWJlUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHsKICAgICAgICAgICAgbWF5YmVQcm9taXNlLmNhdGNoKChlMTEpID0+IGNvbnNvbGUubG9nKGUxMSkpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5uZXh0RXhlY3V0aW9uVW5peCA9IHRoaXMuZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMubmV4dEV4ZWN1dGlvblVuaXg7CiAgICAgIH0KICAgICAgZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubmV4dEV4ZWN1dGlvblVuaXggPSBEYXRlLm5vdygpICsgdGhpcy5nZXRUaW1lVG9OZXh0RXhlY3V0aW9uKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldHMgdGhlIHRpbWUgdG8gbmV4dCBleGVjdXRpb24KICAgICAgICovCiAgICAgIGdldFRpbWVUb05leHRFeGVjdXRpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY3JvblBhcnNlci5tc1RvTmV4dCgpOwogICAgICB9CiAgICAgIHN0YXJ0KCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0YXJ0ZWQiOwogICAgICB9CiAgICAgIHN0b3AoKSB7CiAgICAgICAgdGhpcy5zdGF0dXMgPSAic3RvcHBlZCI7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS51bml0cy5qcwp2YXIgdW5pdHMsIGdldE1pbGxpU2Vjb25kc0Zyb21Vbml0cywgZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlU3RyaW5nLCBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVBZ29UaW1lOwp2YXIgaW5pdF9zbWFydHRpbWVfdW5pdHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS51bml0cy5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICB1bml0cyA9IHsKICAgICAgeWVhcnM6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiAzMTU0ZTc7CiAgICAgIH0sCiAgICAgIG1vbnRoczogKHRpbWVzQXJnID0gMSkgPT4gewogICAgICAgIHJldHVybiB0aW1lc0FyZyAqIDI2MjhlNjsKICAgICAgfSwKICAgICAgd2Vla3M6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiA2MDQ4ZTU7CiAgICAgIH0sCiAgICAgIGRheXM6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiA4NjRlNTsKICAgICAgfSwKICAgICAgaG91cnM6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiAzNmU1OwogICAgICB9LAogICAgICBtaW51dGVzOiAodGltZXNBcmcgPSAxKSA9PiB7CiAgICAgICAgcmV0dXJuIHRpbWVzQXJnICogNmU0OwogICAgICB9LAogICAgICBzZWNvbmRzOiAodGltZXNBcmcgPSAxKSA9PiB7CiAgICAgICAgcmV0dXJuIHRpbWVzQXJnICogMWUzOwogICAgICB9CiAgICB9OwogICAgZ2V0TWlsbGlTZWNvbmRzRnJvbVVuaXRzID0gKGNvbWJpbmF0aW9uQXJnKSA9PiB7CiAgICAgIGxldCB0aW1lSW5NaWxsaXNlY29uZHMgPSAwOwogICAgICBsZXQgYWRkTWlsbGlTZWNvbmRzID0gKG1pbGxpU2Vjb25kc0FyZykgPT4gewogICAgICAgIHRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVJbk1pbGxpc2Vjb25kcyArIG1pbGxpU2Vjb25kc0FyZzsKICAgICAgfTsKICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLnllYXJzKSB7CiAgICAgICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLnllYXJzKGNvbWJpbmF0aW9uQXJnLnllYXJzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLm1vbnRocykgewogICAgICAgIGFkZE1pbGxpU2Vjb25kcyh1bml0cy5tb250aHMoY29tYmluYXRpb25BcmcubW9udGhzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLndlZWtzKSB7CiAgICAgICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLndlZWtzKGNvbWJpbmF0aW9uQXJnLndlZWtzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLmRheXMpIHsKICAgICAgICBhZGRNaWxsaVNlY29uZHModW5pdHMuZGF5cyhjb21iaW5hdGlvbkFyZy5kYXlzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLmhvdXJzKSB7CiAgICAgICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLmhvdXJzKGNvbWJpbmF0aW9uQXJnLmhvdXJzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLm1pbnV0ZXMpIHsKICAgICAgICBhZGRNaWxsaVNlY29uZHModW5pdHMubWludXRlcyhjb21iaW5hdGlvbkFyZy5taW51dGVzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLnNlY29uZHMpIHsKICAgICAgICBhZGRNaWxsaVNlY29uZHModW5pdHMuc2Vjb25kcyhjb21iaW5hdGlvbkFyZy5zZWNvbmRzKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRpbWVJbk1pbGxpc2Vjb25kczsKICAgIH07CiAgICBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVTdHJpbmcgPSAobWlsbGlTZWNvbmRzQXJnKSA9PiB7CiAgICAgIHJldHVybiBwcmV0dHlNaWxsaXNlY29uZHMobWlsbGlTZWNvbmRzQXJnKTsKICAgIH07CiAgICBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVBZ29UaW1lID0gKHRpbWVTdGFtcEFyZykgPT4gewogICAgICByZXR1cm4gZGF0ZV9mbnNfZXhwb3J0cy5mb3JtYXREaXN0YW5jZVRvTm93KG5ldyBEYXRlKHRpbWVTdGFtcEFyZykpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3Jvbm1hbmFnZXIuanMKdmFyIENyb25NYW5hZ2VyOwp2YXIgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19jcm9ubWFuYWdlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3Jvbm1hbmFnZXIuanMiKCkgewogICAgaW5pdF9zbWFydHRpbWVfcGx1Z2lucygpOwogICAgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19jcm9uam9iKCk7CiAgICBpbml0X3NtYXJ0dGltZV91bml0cygpOwogICAgQ3Jvbk1hbmFnZXIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0b3BwZWQiOwogICAgICAgIHRoaXMuY3JvbmpvYnMgPSBuZXcgZGlzdF90c19leHBvcnRzNi5PYmplY3RNYXAoKTsKICAgICAgfQogICAgICBhZGRDcm9uam9iKGNyb25JZGVudGlmaWVyQXJnLCBjcm9uRnVuY3Rpb25BcmcpIHsKICAgICAgICBjb25zdCBuZXdDcm9uSm9iID0gbmV3IENyb25Kb2IodGhpcywgY3JvbklkZW50aWZpZXJBcmcsIGNyb25GdW5jdGlvbkFyZyk7CiAgICAgICAgdGhpcy5jcm9uam9icy5hZGQobmV3Q3JvbkpvYik7CiAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAic3RhcnRlZCIpIHsKICAgICAgICAgIG5ld0Nyb25Kb2Iuc3RhcnQoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ld0Nyb25Kb2I7CiAgICAgIH0KICAgICAgcmVtb3ZlQ3JvbmpvYihjcm9uam9iQXJnKSB7CiAgICAgICAgY3JvbmpvYkFyZy5zdG9wKCk7CiAgICAgICAgdGhpcy5jcm9uam9icy5yZW1vdmUoY3JvbmpvYkFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0YXJ0cyB0aGUgY3JvbmpvYgogICAgICAgKi8KICAgICAgc3RhcnQoKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhdHVzICE9PSAic3RhcnRlZCIpIHsKICAgICAgICAgIHRoaXMuc3RhdHVzID0gInN0YXJ0ZWQiOwogICAgICAgICAgZm9yIChjb25zdCBjcm9uSm9iIG9mIHRoaXMuY3JvbmpvYnMuZ2V0QXJyYXkoKSkgewogICAgICAgICAgICBjcm9uSm9iLnN0YXJ0KCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnJ1bkNyb25DeWNsZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBydW5Dcm9uQ3ljbGUoKSB7CiAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lb3V0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czMuVGltZW91dCgwKTsKICAgICAgICBkbyB7CiAgICAgICAgICBsZXQgbmV4dFJ1bm5pbmdDcm9uam9iOwogICAgICAgICAgZm9yIChjb25zdCBjcm9uSm9iIG9mIHRoaXMuY3JvbmpvYnMuZ2V0QXJyYXkoKSkgewogICAgICAgICAgICBjcm9uSm9iLmNoZWNrRXhlY3V0aW9uKCk7CiAgICAgICAgICAgIGlmICghbmV4dFJ1bm5pbmdDcm9uam9iIHx8IGNyb25Kb2IuZ2V0VGltZVRvTmV4dEV4ZWN1dGlvbigpIDwgbmV4dFJ1bm5pbmdDcm9uam9iLmdldFRpbWVUb05leHRFeGVjdXRpb24oKSkgewogICAgICAgICAgICAgIG5leHRSdW5uaW5nQ3JvbmpvYiA9IGNyb25Kb2I7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChuZXh0UnVubmluZ0Nyb25qb2IpIHsKICAgICAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lb3V0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czMuVGltZW91dChuZXh0UnVubmluZ0Nyb25qb2IuZ2V0VGltZVRvTmV4dEV4ZWN1dGlvbigpKTsKICAgICAgICAgICAgY29uc29sZS5sb2coYE5leHQgQ3JvbkpvYiBzY2hlZHVsZWQgaW4gJHtnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVTdHJpbmcodGhpcy5leGVjdXRpb25UaW1lb3V0LmdldFRpbWVMZWZ0KCkpfWApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lb3V0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czMuVGltZW91dCgxZTMpOwogICAgICAgICAgICBjb25zb2xlLmxvZygibm8gY3JvbmpvYnMgc3BlY2lmaWVkISBDaGVja2luZyBhZ2FpbiBpbiAxIHNlY29uZCIpOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25UaW1lb3V0LnByb21pc2U7CiAgICAgICAgfSB3aGlsZSAodGhpcy5zdGF0dXMgPT09ICJzdGFydGVkIik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0b3BzIGFsbCBjcm9uam9icwogICAgICAgKi8KICAgICAgc3RvcCgpIHsKICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09ICJzdGFydGVkIikgewogICAgICAgICAgdGhpcy5zdGF0dXMgPSAic3RvcHBlZCI7CiAgICAgICAgICB0aGlzLmV4ZWN1dGlvblRpbWVvdXQuY2FuY2VsKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnNvbGUubG9nKGBZb3UgdHJpZWQgdG8gc3RvcCBhIENyb25NYW5hZ2VyIHRoYXQgd2FzIG5vdCBhY3R1YWxseSBzdGFydGVkLmApOwogICAgICAgIH0KICAgICAgICBmb3IgKGNvbnN0IGNyb24gb2YgdGhpcy5jcm9uam9icy5nZXRBcnJheSgpKSB7CiAgICAgICAgICBjcm9uLnN0b3AoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmV4dGVuZGVkZGF0ZS5qcwp2YXIgRXh0ZW5kZWREYXRlOwp2YXIgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19leHRlbmRlZGRhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmV4dGVuZGVkZGF0ZS5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0dGltZV91bml0cygpOwogICAgRXh0ZW5kZWREYXRlID0gY2xhc3MgX0V4dGVuZGVkRGF0ZSBleHRlbmRzIERhdGUgewogICAgICAvLyBTVEFUSUMgZmFjdG9yaWVzCiAgICAgIHN0YXRpYyBmcm9tTWlsbGlzKG1pbGxpU2Vjb25kcykgewogICAgICAgIHJldHVybiBuZXcgX0V4dGVuZGVkRGF0ZShtaWxsaVNlY29uZHMpOwogICAgICB9CiAgICAgIHN0YXRpYyBmcm9tRGF0ZShkYXRlQXJnKSB7CiAgICAgICAgcmV0dXJuIG5ldyBfRXh0ZW5kZWREYXRlKGRhdGVBcmcuZ2V0VGltZSgpKTsKICAgICAgfQogICAgICBzdGF0aWMgZnJvbUV1cm9wZWFuRGF0ZShldXJvcGVhbkRhdGUpIHsKICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAvKC4qKVwuKC4qKVwuKC4qKS8uZXhlYyhldXJvcGVhbkRhdGUpOwogICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgKICAgICAgICAgIHBhcnNlRmxvYXQoZGF0ZUFycmF5WzNdKSwKICAgICAgICAgIC8vIHllYXIKICAgICAgICAgIHBhcnNlRmxvYXQoZGF0ZUFycmF5WzJdKSAtIDEsCiAgICAgICAgICAvLyBtb250aAogICAgICAgICAgcGFyc2VGbG9hdChkYXRlQXJyYXlbMV0pCiAgICAgICAgICAvLyBkYXkKICAgICAgICApOwogICAgICAgIGNvbnN0IHVuaXhNaWxsaSA9IGRhdGUuZ2V0VGltZSgpOwogICAgICAgIHJldHVybiBuZXcgX0V4dGVuZGVkRGF0ZSh1bml4TWlsbGkpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjcmVhdGVzIGFuIEV4dGVuZGVkIGRhdGUgZnJvbSBhIGh5cGVkRGF0ZSBsaWtlICIyMDE4LTAzLTI4IgogICAgICAgKiBAcGFyYW0gZGF0ZVN0cmluZwogICAgICAgKi8KICAgICAgc3RhdGljIGZyb21IeXBoZWREYXRlKGRhdGVTdHJpbmcpIHsKICAgICAgICBjb25zdCBkYXRlTWlsbGlzID0gbmV3IERhdGUoZGF0ZVN0cmluZykuZ2V0VGltZSgpOwogICAgICAgIHJldHVybiBuZXcgX0V4dGVuZGVkRGF0ZShkYXRlTWlsbGlzKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2FtZSBhcyAuZnJvbUV1cm9wZWFuRGF0ZSgpLCBidXQgYWNjZXB0cyBhZGRpdGlvbmFsIHRpbWVBcmcgYW5kIHpvbmVBcmcKICAgICAgICovCiAgICAgIHN0YXRpYyBmcm9tRXVyb3BlYW5EYXRlQW5kVGltZShldXJvcGVhbkRhdGVBcmcsIHRpbWVBcmcgPSAiMTI6MDA6MDAiLCB6b25lQXJnID0gIkV1cm9wZS9CZXJsaW4iKSB7CiAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gLyguKilcLiguKilcLiguKikvLmV4ZWMoZXVyb3BlYW5EYXRlQXJnKTsKICAgICAgICBjb25zdCBzbGljZURhdGUgPSAoZGF0ZVN0cmluZykgPT4gewogICAgICAgICAgcmV0dXJuIGAwJHtkYXRlU3RyaW5nfWAuc2xpY2UoLTIpOwogICAgICAgIH07CiAgICAgICAgY29uc3QgZGF0ZVRpbWVTdHJpbmcgPSBgJHtkYXRlQXJyYXlbM119LSR7c2xpY2VEYXRlKGRhdGVBcnJheVsyXSl9LSR7c2xpY2VEYXRlKGRhdGVBcnJheVsxXSl9VCR7dGltZUFyZ31gOwogICAgICAgIGNvbnN0IGRhdGUgPSBpbXBvcnRfZGF5anMuZGVmYXVsdChkYXRlVGltZVN0cmluZyk7CiAgICAgICAgY29uc3QgdW5peE1pbGxpID0gZGF0ZS50b0RhdGUoKS5nZXRUaW1lKCk7CiAgICAgICAgcmV0dXJuIG5ldyBfRXh0ZW5kZWREYXRlKHVuaXhNaWxsaSk7CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IodW5peE1pbGxpID0gRGF0ZS5ub3coKSkgewogICAgICAgIHN1cGVyKHVuaXhNaWxsaSk7CiAgICAgIH0KICAgICAgLy8KICAgICAgZXhwb3J0VG9FdXJvcGVhbkRhdGUoKSB7CiAgICAgICAgY29uc3QgdW5pdHMyID0gdGhpcy5leHBvcnRUb1VuaXRzKCk7CiAgICAgICAgcmV0dXJuIGAke3VuaXRzMi5kYXlTdHJpbmd9LiR7dW5pdHMyLm1vbnRoU3RyaW5nfS4ke3VuaXRzMi55ZWFyU3RyaW5nfWA7CiAgICAgIH0KICAgICAgZXhwb3J0VG9IeXBoZWRTb3J0YWJsZURhdGUoKSB7CiAgICAgICAgY29uc3QgdW5pdHMyID0gdGhpcy5leHBvcnRUb1VuaXRzKCk7CiAgICAgICAgcmV0dXJuIGAke3VuaXRzMi55ZWFyU3RyaW5nfS0ke3VuaXRzMi5tb250aFN0cmluZ30tJHt1bml0czIuZGF5U3RyaW5nfWA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGV4cG9ydHMgdW5pdHMKICAgICAgICovCiAgICAgIGV4cG9ydFRvVW5pdHMoKSB7CiAgICAgICAgY29uc3QgbW9udGhzQXJyYXkgPSBbCiAgICAgICAgICAiSmFudWFyeSIsCiAgICAgICAgICAiRmVicnVhcnkiLAogICAgICAgICAgIk1hcmNoIiwKICAgICAgICAgICJBcHJpbCIsCiAgICAgICAgICAiTWF5IiwKICAgICAgICAgICJKdW5lIiwKICAgICAgICAgICJKdWx5IiwKICAgICAgICAgICJBdWd1c3QiLAogICAgICAgICAgIlNlcHRlbWJlciIsCiAgICAgICAgICAiT2N0b2JlciIsCiAgICAgICAgICAiTm92ZW1iZXIiLAogICAgICAgICAgIkRlY2VtYmVyIgogICAgICAgIF07CiAgICAgICAgY29uc3QgZGF5c0FycmF5ID0gWwogICAgICAgICAgIk1vbmRheSIsCiAgICAgICAgICAiVHVlc2RheSIsCiAgICAgICAgICAiV2VkbmVzZGF5IiwKICAgICAgICAgICJUaHVyc2RheSIsCiAgICAgICAgICAiRnJpZGF5IiwKICAgICAgICAgICJTYXR1cmRheSIsCiAgICAgICAgICAiU3VuZGF5IgogICAgICAgIF07CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHllYXI6IHRoaXMuZ2V0RnVsbFllYXIoKSwKICAgICAgICAgIHllYXJTdHJpbmc6IGAke3RoaXMuZ2V0RnVsbFllYXIoKX1gLAogICAgICAgICAgbW9udGg6IHRoaXMuZ2V0TW9udGgoKSArIDEsCiAgICAgICAgICBtb250aFN0cmluZzogKCIwIiArICh0aGlzLmdldE1vbnRoKCkgKyAxKSkuc2xpY2UoLTIpLAogICAgICAgICAgbW9udGhOYW1lOiBtb250aHNBcnJheVt0aGlzLmdldE1vbnRoKCldLAogICAgICAgICAgZGF5OiB0aGlzLmdldERhdGUoKSwKICAgICAgICAgIGRheVN0cmluZzogKCIwIiArIHRoaXMuZ2V0RGF0ZSgpKS5zbGljZSgtMiksCiAgICAgICAgICBkYXlPZlRoZVdlZWs6IHRoaXMuZ2V0RGF5KCksCiAgICAgICAgICBkYXlPZlRoZVdlZWtOYW1lOiBkYXlzQXJyYXlbdGhpcy5nZXREYXkoKV0KICAgICAgICB9OwogICAgICB9CiAgICAgIGZvcm1hdChmb3JtYXRBcmcpIHsKICAgICAgICByZXR1cm4gaW1wb3J0X2RheWpzLmRlZmF1bHQodGhpcy5nZXRUaW1lKCkpLmZvcm1hdChmb3JtYXRBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBib29sZWFuIGNoZWNrcwogICAgICAgKi8KICAgICAgaXNUb2RheSgpIHsKICAgICAgICByZXR1cm4gaW1wb3J0X2RheWpzLmRlZmF1bHQodGhpcy5nZXRUaW1lKCkpLmlzVG9kYXkoKTsKICAgICAgfQogICAgICBsZXNzVGltZVBhc3NlZFRvTm93KHVuaXRBcmdzKSB7CiAgICAgICAgY29uc3QgbWF4UGFzc2VkVW5peFRpbWUgPSBnZXRNaWxsaVNlY29uZHNGcm9tVW5pdHModW5pdEFyZ3MpOwogICAgICAgIGNvbnN0IGFjdHVhbFBhc3NlZFVuaXhUaW1lID0gRGF0ZS5ub3coKSAtIHRoaXMuZ2V0VGltZSgpOwogICAgICAgIHJldHVybiBhY3R1YWxQYXNzZWRVbml4VGltZSA8IG1heFBhc3NlZFVuaXhUaW1lOwogICAgICB9CiAgICAgIG1vcmVUaW1lUGFzc2VkVG9Ob3codW5pdEFyZ3MpIHsKICAgICAgICByZXR1cm4gIXRoaXMubGVzc1RpbWVQYXNzZWRUb05vdyh1bml0QXJncyk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmhydG1lYXN1cmVtZW50LmpzCnZhciBIcnRNZWFzdXJlbWVudDsKdmFyIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfaHJ0bWVhc3VyZW1lbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmhydG1lYXN1cmVtZW50LmpzIigpIHsKICAgIEhydE1lYXN1cmVtZW50ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLm5hbm9TZWNvbmRzID0gbnVsbDsKICAgICAgICB0aGlzLm1pbGxpU2Vjb25kcyA9IG51bGw7CiAgICAgICAgdGhpcy5fbWlsbGlTdGFydCA9IG51bGw7CiAgICAgICAgdGhpcy5fbWlsbGlEaWZmID0gbnVsbDsKICAgICAgICB0aGlzLl9zdGFydGVkID0gZmFsc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0YXJ0IHRoZSBtZWFzdXJlbWVudAogICAgICAgKi8KICAgICAgc3RhcnQoKSB7CiAgICAgICAgdGhpcy5fc3RhcnRlZCA9IHRydWU7CiAgICAgICAgdGhpcy5fbWlsbGlTdGFydCA9IERhdGUubm93KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0b3AgdGhlIG1lYXN1cmVtZW50CiAgICAgICAqLwogICAgICBzdG9wKCkgewogICAgICAgIGlmICh0aGlzLl9zdGFydGVkID09PSBmYWxzZSkgewogICAgICAgICAgY29uc29sZS5sb2coIkhhc24ndCBzdGFydGVkIHlldCIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLl9taWxsaURpZmYgPSBEYXRlLm5vdygpIC0gdGhpcy5fbWlsbGlTdGFydDsKICAgICAgICB0aGlzLm5hbm9TZWNvbmRzID0gdGhpcy5fbWlsbGlEaWZmICogMWUzOwogICAgICAgIHRoaXMubWlsbGlTZWNvbmRzID0gdGhpcy5fbWlsbGlEaWZmOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXNldCB0aGUgbWVhc3VyZW1lbnQKICAgICAgICovCiAgICAgIHJlc2V0KCkgewogICAgICAgIHRoaXMubmFub1NlY29uZHMgPSBudWxsOwogICAgICAgIHRoaXMubWlsbGlTZWNvbmRzID0gbnVsbDsKICAgICAgICB0aGlzLl9taWxsaVN0YXJ0ID0gbnVsbDsKICAgICAgICB0aGlzLl9taWxsaURpZmYgPSBudWxsOwogICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuaW50ZXJ2YWwuanMKdmFyIEludGVydmFsOwp2YXIgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19pbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuaW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9zbWFydHRpbWVfcGx1Z2lucygpOwogICAgSW50ZXJ2YWwgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGludGVydmFsTWlsbGlzZW5jb25kc0FyZykgewogICAgICAgIHRoaXMuc3RhdHVzID0gImluaXRpYWwiOwogICAgICAgIHRoaXMuc3RhdHVzQXV0aG9yaXphdGlvbiA9IG51bGw7CiAgICAgICAgdGhpcy5pbnRlcnZhbEpvYnMgPSBbXTsKICAgICAgICB0aGlzLmludGVydmFsTWlsbGlzZWNvbmRzID0gaW50ZXJ2YWxNaWxsaXNlbmNvbmRzQXJnOwogICAgICB9CiAgICAgIHN0YXJ0KCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0YXJ0ZWQiOwogICAgICAgIGNvbnN0IHN0YXR1c0F1dGggPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgICB0aGlzLnN0YXR1c0F1dGhvcml6YXRpb24gPSBzdGF0dXNBdXRoOwogICAgICAgIGNvbnN0IHJ1bkludGVydmFsID0gYXN5bmMgKCkgPT4gewogICAgICAgICAgd2hpbGUgKHRoaXMuc3RhdHVzID09PSAic3RhcnRlZCIgJiYgdGhpcy5zdGF0dXNBdXRob3JpemF0aW9uID09PSBzdGF0dXNBdXRoKSB7CiAgICAgICAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3IodGhpcy5pbnRlcnZhbE1pbGxpc2Vjb25kcyk7CiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUludGVydmFsSm9icygpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgcnVuSW50ZXJ2YWwoKTsKICAgICAgfQogICAgICBzdG9wKCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0b3BwZWQiOwogICAgICAgIHRoaXMuc3RhdHVzQXV0aG9yaXphdGlvbiA9IG51bGw7CiAgICAgIH0KICAgICAgYWRkSW50ZXJ2YWxKb2IoZnVuY0FyZykgewogICAgICAgIHRoaXMuaW50ZXJ2YWxKb2JzLnB1c2goZnVuY0FyZyk7CiAgICAgIH0KICAgICAgZXhlY3V0ZUludGVydmFsSm9icygpIHsKICAgICAgICBmb3IgKGNvbnN0IGZ1bmNBcmcgb2YgdGhpcy5pbnRlcnZhbEpvYnMpIHsKICAgICAgICAgIGZ1bmNBcmcoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLnRpbWVzdGFtcC5qcwp2YXIgVGltZVN0YW1wOwp2YXIgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc190aW1lc3RhbXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLnRpbWVzdGFtcC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBUaW1lU3RhbXAgPSBjbGFzcyBfVGltZVN0YW1wIHsKICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgbmV3IFRpbWVTdGFtcCBmcm9tIG1pbGxpc2Vjb25kcwogICAgICAgKi8KICAgICAgc3RhdGljIGZyb21NaWxsaVNlY29uZHMobWlsbGlTZWNvbmRzQXJnKSB7CiAgICAgICAgcmV0dXJuIG5ldyBfVGltZVN0YW1wKG1pbGxpU2Vjb25kc0FyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgbmV3IFRpbWVTdGFtcCBmb3Igbm93IHdpdGggY2hhbmdlIHNldAogICAgICAgKiBAcGFyYW0gdGltZVN0YW1wQXJnCiAgICAgICAqLwogICAgICBzdGF0aWMgZnJvbVRpbWVTdGFtcCh0aW1lU3RhbXBBcmcpIHsKICAgICAgICBjb25zdCBsb2NhbFRpbWVTdGFtcCA9IG5ldyBfVGltZVN0YW1wKCk7CiAgICAgICAgbG9jYWxUaW1lU3RhbXAuY2hhbmdlID0gbG9jYWxUaW1lU3RhbXAubWlsbGlTZWNvbmRzIC0gdGltZVN0YW1wQXJnLm1pbGxpU2Vjb25kczsKICAgICAgICByZXR1cm4gbG9jYWxUaW1lU3RhbXA7CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IoY3JlYXRvckFyZykgewogICAgICAgIHRoaXMuY2hhbmdlID0gbnVsbDsKICAgICAgICBpZiAoIWNyZWF0b3JBcmcpIHsKICAgICAgICAgIHRoaXMuZGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNyZWF0b3JBcmcgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICB0aGlzLmRhdGUgPSBuZXcgRGF0ZShjcmVhdG9yQXJnKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5taWxsaVNlY29uZHMgPSB0aGlzLmRhdGUuZ2V0VGltZSgpOwogICAgICAgIHRoaXMuZXBvY2h0aW1lID0gTWF0aC5mbG9vcih0aGlzLm1pbGxpU2Vjb25kcyAvIDFlMyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBib29sZWFuIGZvciB3ZXRoZXIgdGhlIHRpbWVzdGFtcCBpcyBvbGRlciB0aGFuIGFub3RoZXIgdGltZXN0YW1wCiAgICAgICAqIEBwYXJhbSBUaW1lU3RhbXBBcmcKICAgICAgICogQHBhcmFtIHRyZXNob2xkVGltZUFyZwogICAgICAgKi8KICAgICAgaXNPbGRlclRoYW5PdGhlclRpbWVTdGFtcChUaW1lU3RhbXBBcmcsIHRyZXNob2xkVGltZUFyZyA9IDApIHsKICAgICAgICBpZiAodGhpcy5taWxsaVNlY29uZHMgPCBUaW1lU3RhbXBBcmcubWlsbGlTZWNvbmRzIC0gdHJlc2hvbGRUaW1lQXJnKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogSXMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2xkZXIgdGhhbiB0aGUgYXJndW1lbnQKICAgICAgICogQHBhcmFtIFRpbWVTdGFtcEFyZwogICAgICAgKi8KICAgICAgaXNPbGRlclRoYW4oVGltZVN0YW1wQXJnLCB0cmVzaG9sZFRpbWVBcmcgPSAwKSB7CiAgICAgICAgaWYgKHRoaXMubWlsbGlTZWNvbmRzICsgdHJlc2hvbGRUaW1lQXJnIDwgVGltZVN0YW1wQXJnLm1pbGxpU2Vjb25kcykgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBib29sZWFuIGZvciB3ZXRoZXIgdGhlIHRpbWVzdGFtcCBpcyB5b3VuZ2VyIHRoYW4gYW5vdGhlciB0aW1lc3RhbXAKICAgICAgICogQHBhcmFtIFRpbWVTdGFtcEFyZwogICAgICAgKiBAcGFyYW0gdHJlc2hvbGRUaW1lQXJnCiAgICAgICAqLwogICAgICBpc1lvdW5nZXJUaGFuT3RoZXJUaW1lU3RhbXAoVGltZVN0YW1wQXJnLCB0cmVzaG9sZFRpbWVBcmcgPSAwKSB7CiAgICAgICAgaWYgKHRoaXMubWlsbGlTZWNvbmRzID4gVGltZVN0YW1wQXJnLm1pbGxpU2Vjb25kcyArIHRyZXNob2xkVGltZUFyZykgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaXNZb3VuZ2VyVGhhbk1pbGxpU2Vjb25kcyhtaWxsaXNlY29uZEFyZykgewogICAgICAgIGNvbnN0IG5vd1RpbWVTdGFtcCA9IG5ldyBfVGltZVN0YW1wKCk7CiAgICAgICAgY29uc3QgY29tcGFyZUVwb2NoVGltZSA9IG5vd1RpbWVTdGFtcC5lcG9jaHRpbWUgLSBtaWxsaXNlY29uZEFyZzsKICAgICAgICBjb25zdCBjb21wYXJlVGltZVN0YW1wID0gbmV3IF9UaW1lU3RhbXAoY29tcGFyZUVwb2NoVGltZSk7CiAgICAgICAgcmV0dXJuIHRoaXMuaXNZb3VuZ2VyVGhhbk90aGVyVGltZVN0YW1wKGNvbXBhcmVUaW1lU3RhbXApOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9zbWFydHRpbWUuY2xhc3Nlcy50aW1lci5qcwp2YXIgVGltZXI7CnZhciBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX3RpbWVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9zbWFydHRpbWUuY2xhc3Nlcy50aW1lci5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX3RpbWVzdGFtcCgpOwogICAgVGltZXIgPSBjbGFzcyB7CiAgICAgIGdldCB0aW1lTGVmdCgpIHsKICAgICAgICByZXR1cm4gdGhpcy50aW1lSW5NaWxsaXNlY29uZHMgLSB0aGlzLnBhdXNlZEF0LmNoYW5nZTsKICAgICAgfQogICAgICBjb25zdHJ1Y3Rvcih0aW1lSW5NaWxsaXNlY29uZHNBcmcpIHsKICAgICAgICB0aGlzLnN0YXRlID0gImluaXRpYXRlZCI7CiAgICAgICAgdGhpcy5jb21wbGV0ZWREZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIHRoaXMudGltZUluTWlsbGlzZWNvbmRzID0gdGltZUluTWlsbGlzZWNvbmRzQXJnOwogICAgICAgIHRoaXMuY29tcGxldGVkID0gdGhpcy5jb21wbGV0ZWREZWZlcnJlZC5wcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBzdGFydHMgdGhlIHRpbWVyCiAgICAgICAqLwogICAgICBzdGFydCgpIHsKICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZEF0KSB7CiAgICAgICAgICB0aGlzLmN1cnJlbnRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuY29tcGxldGVkRGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgICAgfSwgdGhpcy50aW1lSW5NaWxsaXNlY29uZHMpOwogICAgICAgICAgdGhpcy5zdGFydGVkQXQgPSBuZXcgVGltZVN0YW1wKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigidGltZXIgaGFzIGJlZW4gc3RhcnRlZCBiZWZvcmUuIFBsZWFzZSB1c2UgcmVzdW1lIGluc3RlYWQiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcGF1c2UoKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhcnRlZEF0KSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jdXJyZW50VGltZW91dCk7CiAgICAgICAgICB0aGlzLmN1cnJlbnRUaW1lb3V0ID0gbnVsbDsKICAgICAgICAgIHRoaXMucGF1c2VkQXQgPSBUaW1lU3RhbXAuZnJvbVRpbWVTdGFtcCh0aGlzLnN0YXJ0ZWRBdCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlc3VtZSgpIHsKICAgICAgICBpZiAodGhpcy5zdGFydGVkQXQpIHsKICAgICAgICAgIHRoaXMuY3VycmVudFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgdGhpcy5jb21wbGV0ZWREZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgICB9LCB0aGlzLnRpbWVMZWZ0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ0aW1lciBoYXMgTk9UIGJlZW4gc3RhcnRlZCBiZWZvcmUuIFBsZWFzZSB1c2UgLnN0YXJ0KCkgaW5zdGVhZCIpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXNldCgpIHsKICAgICAgICB0aGlzLnBhdXNlKCk7CiAgICAgICAgdGhpcy5zdGFydGVkQXQgPSBudWxsOwogICAgICAgIHRoaXMucGF1c2VkQXQgPSBudWxsOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzNyA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHM3LCB7CiAgQ3JvbkpvYjogKCkgPT4gQ3JvbkpvYiwKICBDcm9uTWFuYWdlcjogKCkgPT4gQ3Jvbk1hbmFnZXIsCiAgRXh0ZW5kZWREYXRlOiAoKSA9PiBFeHRlbmRlZERhdGUsCiAgSHJ0TWVhc3VyZW1lbnQ6ICgpID0+IEhydE1lYXN1cmVtZW50LAogIEludGVydmFsOiAoKSA9PiBJbnRlcnZhbCwKICBUaW1lU3RhbXA6ICgpID0+IFRpbWVTdGFtcCwKICBUaW1lcjogKCkgPT4gVGltZXIsCiAgZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlQWdvVGltZTogKCkgPT4gZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlQWdvVGltZSwKICBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVTdHJpbmc6ICgpID0+IGdldE1pbGxpU2Vjb25kc0FzSHVtYW5SZWFkYWJsZVN0cmluZywKICBnZXRNaWxsaVNlY29uZHNGcm9tVW5pdHM6ICgpID0+IGdldE1pbGxpU2Vjb25kc0Zyb21Vbml0cywKICB1bml0czogKCkgPT4gdW5pdHMKfSk7CnZhciBpbml0X2Rpc3RfdHM2ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25tYW5hZ2VyKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25qb2IoKTsKICAgIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfZXh0ZW5kZWRkYXRlKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2hydG1lYXN1cmVtZW50KCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2ludGVydmFsKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX3RpbWVyKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX3RpbWVzdGFtcCgpOwogICAgaW5pdF9zbWFydHRpbWVfdW5pdHMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N5bWJvbC10cmVlQDMuMi40L25vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZS9saWIvU3ltYm9sVHJlZU5vZGUuanMKdmFyIHJlcXVpcmVfU3ltYm9sVHJlZU5vZGUgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N5bWJvbC10cmVlQDMuMi40L25vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZS9saWIvU3ltYm9sVHJlZU5vZGUuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgbW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBTeW1ib2xUcmVlTm9kZSB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDsKICAgICAgICB0aGlzLnByZXZpb3VzU2libGluZyA9IG51bGw7CiAgICAgICAgdGhpcy5uZXh0U2libGluZyA9IG51bGw7CiAgICAgICAgdGhpcy5maXJzdENoaWxkID0gbnVsbDsKICAgICAgICB0aGlzLmxhc3RDaGlsZCA9IG51bGw7CiAgICAgICAgdGhpcy5jaGlsZHJlblZlcnNpb24gPSAwOwogICAgICAgIHRoaXMuY2hpbGRJbmRleENhY2hlZFVwVG8gPSBudWxsOwogICAgICAgIHRoaXMuY2FjaGVkSW5kZXggPSAtMTsKICAgICAgICB0aGlzLmNhY2hlZEluZGV4VmVyc2lvbiA9IE5hTjsKICAgICAgfQogICAgICBnZXQgaXNBdHRhY2hlZCgpIHsKICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLnBhcmVudCB8fCB0aGlzLnByZXZpb3VzU2libGluZyB8fCB0aGlzLm5leHRTaWJsaW5nKTsKICAgICAgfQogICAgICBnZXQgaGFzQ2hpbGRyZW4oKSB7CiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5maXJzdENoaWxkKTsKICAgICAgfQogICAgICBjaGlsZHJlbkNoYW5nZWQoKSB7CiAgICAgICAgdGhpcy5jaGlsZHJlblZlcnNpb24gPSB0aGlzLmNoaWxkcmVuVmVyc2lvbiArIDEgJiA0Mjk0OTY3Mjk1OwogICAgICAgIHRoaXMuY2hpbGRJbmRleENhY2hlZFVwVG8gPSBudWxsOwogICAgICB9CiAgICAgIGdldENhY2hlZEluZGV4KHBhcmVudE5vZGUpIHsKICAgICAgICBpZiAodGhpcy5jYWNoZWRJbmRleFZlcnNpb24gIT09IHBhcmVudE5vZGUuY2hpbGRyZW5WZXJzaW9uKSB7CiAgICAgICAgICB0aGlzLmNhY2hlZEluZGV4VmVyc2lvbiA9IE5hTjsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkSW5kZXg7CiAgICAgIH0KICAgICAgc2V0Q2FjaGVkSW5kZXgocGFyZW50Tm9kZSwgaW5kZXgyKSB7CiAgICAgICAgdGhpcy5jYWNoZWRJbmRleFZlcnNpb24gPSBwYXJlbnROb2RlLmNoaWxkcmVuVmVyc2lvbjsKICAgICAgICB0aGlzLmNhY2hlZEluZGV4ID0gaW5kZXgyOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3ltYm9sLXRyZWVAMy4yLjQvbm9kZV9tb2R1bGVzL3N5bWJvbC10cmVlL2xpYi9UcmVlUG9zaXRpb24uanMKdmFyIHJlcXVpcmVfVHJlZVBvc2l0aW9uID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zeW1ib2wtdHJlZUAzLjIuNC9ub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1RyZWVQb3NpdGlvbi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5mcmVlemUoewogICAgICAvLyBzYW1lIGFzIERPTSBET0NVTUVOVF9QT1NJVElPTl8KICAgICAgRElTQ09OTkVDVEVEOiAxLAogICAgICBQUkVDRURJTkc6IDIsCiAgICAgIEZPTExPV0lORzogNCwKICAgICAgQ09OVEFJTlM6IDgsCiAgICAgIENPTlRBSU5FRF9CWTogMTYKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3ltYm9sLXRyZWVAMy4yLjQvbm9kZV9tb2R1bGVzL3N5bWJvbC10cmVlL2xpYi9UcmVlSXRlcmF0b3IuanMKdmFyIHJlcXVpcmVfVHJlZUl0ZXJhdG9yID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zeW1ib2wtdHJlZUAzLjIuNC9ub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1RyZWVJdGVyYXRvci5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVFJFRSA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woKTsKICAgIHZhciBST09UID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpOwogICAgdmFyIE5FWFQgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCk7CiAgICB2YXIgSVRFUkFURV9GVU5DID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpOwogICAgdmFyIFRyZWVJdGVyYXRvciA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodHJlZSwgcm9vdDYsIGZpcnN0UmVzdWx0LCBpdGVyYXRlRnVuY3Rpb24pIHsKICAgICAgICB0aGlzW1RSRUVdID0gdHJlZTsKICAgICAgICB0aGlzW1JPT1RdID0gcm9vdDY7CiAgICAgICAgdGhpc1tORVhUXSA9IGZpcnN0UmVzdWx0OwogICAgICAgIHRoaXNbSVRFUkFURV9GVU5DXSA9IGl0ZXJhdGVGdW5jdGlvbjsKICAgICAgfQogICAgICBuZXh0KCkgewogICAgICAgIGNvbnN0IHRyZWUgPSB0aGlzW1RSRUVdOwogICAgICAgIGNvbnN0IGl0ZXJhdGVGdW5jID0gdGhpc1tJVEVSQVRFX0ZVTkNdOwogICAgICAgIGNvbnN0IHJvb3Q2ID0gdGhpc1tST09UXTsKICAgICAgICBpZiAoIXRoaXNbTkVYVF0pIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGRvbmU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiByb290NgogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdmFsdWUyID0gdGhpc1tORVhUXTsKICAgICAgICBpZiAoaXRlcmF0ZUZ1bmMgPT09IDEpIHsKICAgICAgICAgIHRoaXNbTkVYVF0gPSB0cmVlLl9ub2RlKHZhbHVlMikucHJldmlvdXNTaWJsaW5nOwogICAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZUZ1bmMgPT09IDIpIHsKICAgICAgICAgIHRoaXNbTkVYVF0gPSB0cmVlLl9ub2RlKHZhbHVlMikubmV4dFNpYmxpbmc7CiAgICAgICAgfSBlbHNlIGlmIChpdGVyYXRlRnVuYyA9PT0gMykgewogICAgICAgICAgdGhpc1tORVhUXSA9IHRyZWUuX25vZGUodmFsdWUyKS5wYXJlbnQ7CiAgICAgICAgfSBlbHNlIGlmIChpdGVyYXRlRnVuYyA9PT0gNCkgewogICAgICAgICAgdGhpc1tORVhUXSA9IHRyZWUucHJlY2VkaW5nKHZhbHVlMiwgeyByb290OiByb290NiB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpc1tORVhUXSA9IHRyZWUuZm9sbG93aW5nKHZhbHVlMiwgeyByb290OiByb290NiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGRvbmU6IGZhbHNlLAogICAgICAgICAgdmFsdWU6IHZhbHVlMgogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJlZUl0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLml0ZXJhdG9yLCB7CiAgICAgIHZhbHVlOiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfSwKICAgICAgd3JpdGFibGU6IGZhbHNlCiAgICB9KTsKICAgIFRyZWVJdGVyYXRvci5QUkVWID0gMTsKICAgIFRyZWVJdGVyYXRvci5ORVhUID0gMjsKICAgIFRyZWVJdGVyYXRvci5QQVJFTlQgPSAzOwogICAgVHJlZUl0ZXJhdG9yLlBSRUNFRElORyA9IDQ7CiAgICBUcmVlSXRlcmF0b3IuRk9MTE9XSU5HID0gNTsKICAgIE9iamVjdC5mcmVlemUoVHJlZUl0ZXJhdG9yKTsKICAgIE9iamVjdC5mcmVlemUoVHJlZUl0ZXJhdG9yLnByb3RvdHlwZSk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IFRyZWVJdGVyYXRvcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N5bWJvbC10cmVlQDMuMi40L25vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZS9saWIvU3ltYm9sVHJlZS5qcwp2YXIgcmVxdWlyZV9TeW1ib2xUcmVlID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zeW1ib2wtdHJlZUAzLjIuNC9ub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1N5bWJvbFRyZWUuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFN5bWJvbFRyZWVOb2RlID0gcmVxdWlyZV9TeW1ib2xUcmVlTm9kZSgpOwogICAgdmFyIFRyZWVQb3NpdGlvbiA9IHJlcXVpcmVfVHJlZVBvc2l0aW9uKCk7CiAgICB2YXIgVHJlZUl0ZXJhdG9yID0gcmVxdWlyZV9UcmVlSXRlcmF0b3IoKTsKICAgIGZ1bmN0aW9uIHJldHVyblRydWUoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gcmV2ZXJzZUFycmF5SW5kZXgoYXJyYXksIHJldmVyc2VJbmRleCkgewogICAgICByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMSAtIHJldmVyc2VJbmRleF07CiAgICB9CiAgICB2YXIgU3ltYm9sVHJlZSA9IGNsYXNzIHsKICAgICAgLyoqCiAgICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICAgKiBAYWxpYXMgbW9kdWxlOnN5bWJvbC10cmVlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb249J1N5bWJvbFRyZWUgZGF0YSddIERlc2NyaXB0aW9uIHVzZWQgZm9yIHRoZSBTeW1ib2wKICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKGRlc2NyaXB0aW9uKSB7CiAgICAgICAgdGhpcy5zeW1ib2wgPSBTeW1ib2woZGVzY3JpcHRpb24gfHwgIlN5bWJvbFRyZWUgZGF0YSIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBZb3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIChvcHRpb25hbGx5KSBpbml0aWFsaXplIGFuIG9iamVjdCByaWdodCBhZnRlciBpdHMgY3JlYXRpb24sCiAgICAgICAqIHRvIHRha2UgYWR2YW50YWdlIG9mIFY4J3MgZmFzdCBwcm9wZXJ0aWVzLiBBbHNvIHVzZWZ1bCBpZiB5b3Ugd291bGQgbGlrZSB0bwogICAgICAgKiBmcmVlemUgeW91ciBvYmplY3QuCiAgICAgICAqCiAgICAgICAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kCiAgICAgICAqIEBhbGlhcyBtb2R1bGU6c3ltYm9sLXRyZWUjaW5pdGlhbGl6ZQogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gb2JqZWN0CiAgICAgICAqLwogICAgICBpbml0aWFsaXplKG9iamVjdCkgewogICAgICAgIHRoaXMuX25vZGUob2JqZWN0KTsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICB9CiAgICAgIF9ub2RlKG9iamVjdCkgewogICAgICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3Qgbm9kZTIgPSBvYmplY3RbdGhpcy5zeW1ib2xdOwogICAgICAgIGlmIChub2RlMikgewogICAgICAgICAgcmV0dXJuIG5vZGUyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0W3RoaXMuc3ltYm9sXSA9IG5ldyBTeW1ib2xUcmVlTm9kZSgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0IGhhcyBhbnkgY2hpbGRyZW4uIE90aGVyd2lzZSBpdCByZXR1cm5zIGBmYWxzZWAuCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgaGFzQ2hpbGRyZW4KICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtCb29sZWFufQogICAgICAgKi8KICAgICAgaGFzQ2hpbGRyZW4ob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5oYXNDaGlsZHJlbjsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBmaXJzdENoaWxkCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fQogICAgICAgKi8KICAgICAgZmlyc3RDaGlsZChvYmplY3QpIHsKICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLmZpcnN0Q2hpbGQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIGxhc3QgY2hpbGQgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBsYXN0Q2hpbGQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBsYXN0Q2hpbGQob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5sYXN0Q2hpbGQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBwcmV2aW91c1NpYmxpbmcKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBwcmV2aW91c1NpYmxpbmcob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5wcmV2aW91c1NpYmxpbmc7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIG5leHQgc2libGluZyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgogICAgICAgKgogICAgICAgKiAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIG5leHRTaWJsaW5nCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fQogICAgICAgKi8KICAgICAgbmV4dFNpYmxpbmcob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5uZXh0U2libGluZzsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJuIHRoZSBwYXJlbnQgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBwYXJlbnQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBwYXJlbnQob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5wYXJlbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZpbmQgdGhlIGluY2x1c2l2ZSBkZXNjZW5kYW50IHRoYXQgaXMgbGFzdCBpbiB0cmVlIG9yZGVyIG9mIHRoZSBnaXZlbiBvYmplY3QuCiAgICAgICAqCiAgICAgICAqICogYE8obilgICh3b3JzdCBjYXNlKSB3aGVyZSBgbmAgaXMgdGhlIGRlcHRoIG9mIHRoZSBzdWJ0cmVlIG9mIGBvYmplY3RgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgbGFzdEluY2x1c2l2ZURlc2NlbmRhbnQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBsYXN0SW5jbHVzaXZlRGVzY2VuZGFudChvYmplY3QpIHsKICAgICAgICBsZXQgbGFzdENoaWxkOwogICAgICAgIGxldCBjdXJyZW50ID0gb2JqZWN0OwogICAgICAgIHdoaWxlIChsYXN0Q2hpbGQgPSB0aGlzLl9ub2RlKGN1cnJlbnQpLmxhc3RDaGlsZCkgewogICAgICAgICAgY3VycmVudCA9IGxhc3RDaGlsZDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZpbmQgdGhlIHByZWNlZGluZyBvYmplY3QgKEEpIG9mIHRoZSBnaXZlbiBvYmplY3QgKEIpLgogICAgICAgKiBBbiBvYmplY3QgQSBpcyBwcmVjZWRpbmcgYW4gb2JqZWN0IEIgaWYgQSBhbmQgQiBhcmUgaW4gdGhlIHNhbWUgdHJlZQogICAgICAgKiBhbmQgQSBjb21lcyBiZWZvcmUgQiBpbiB0cmVlIG9yZGVyLgogICAgICAgKgogICAgICAgKiAqIGBPKG4pYCAod29yc3QgY2FzZSkKICAgICAgICogKiBgTygxKWAgKGFtb3J0aXplZCB3aGVuIHdhbGtpbmcgdGhlIGVudGlyZSB0cmVlKQogICAgICAgKgogICAgICAgKiBAbWV0aG9kIHByZWNlZGluZwogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnJvb3RdIElmIHNldCwgYHJvb3RgIG11c3QgYmUgYW4gaW5jbHVzaXZlIGFuY2VzdG9yCiAgICAgICAqICAgICAgICBvZiB0aGUgcmV0dXJuIHZhbHVlIChvciBlbHNlIG51bGwgaXMgcmV0dXJuZWQpLiBUaGlzIGNoZWNrIF9hc3N1bWVzXwogICAgICAgKiAgICAgICAgdGhhdCBgcm9vdGAgaXMgYWxzbyBhbiBpbmNsdXNpdmUgYW5jZXN0b3Igb2YgdGhlIGdpdmVuIGBvYmplY3RgCiAgICAgICAqIEByZXR1cm4gez9PYmplY3R9CiAgICAgICAqLwogICAgICBwcmVjZWRpbmcob2JqZWN0LCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgdHJlZVJvb3QgPSBvcHRpb25zICYmIG9wdGlvbnMucm9vdDsKICAgICAgICBpZiAob2JqZWN0ID09PSB0cmVlUm9vdCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHByZXZpb3VzU2libGluZyA9IHRoaXMuX25vZGUob2JqZWN0KS5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgaWYgKHByZXZpb3VzU2libGluZykgewogICAgICAgICAgcmV0dXJuIHRoaXMubGFzdEluY2x1c2l2ZURlc2NlbmRhbnQocHJldmlvdXNTaWJsaW5nKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5wYXJlbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZpbmQgdGhlIGZvbGxvd2luZyBvYmplY3QgKEEpIG9mIHRoZSBnaXZlbiBvYmplY3QgKEIpLgogICAgICAgKiBBbiBvYmplY3QgQSBpcyBmb2xsb3dpbmcgYW4gb2JqZWN0IEIgaWYgQSBhbmQgQiBhcmUgaW4gdGhlIHNhbWUgdHJlZQogICAgICAgKiBhbmQgQSBjb21lcyBhZnRlciBCIGluIHRyZWUgb3JkZXIuCiAgICAgICAqCiAgICAgICAqICogYE8obilgICh3b3JzdCBjYXNlKSB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBvYmplY3RzIGluIHRoZSBlbnRpcmUgdHJlZQogICAgICAgKiAqIGBPKDEpYCAoYW1vcnRpemVkIHdoZW4gd2Fsa2luZyB0aGUgZW50aXJlIHRyZWUpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgZm9sbG93aW5nCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gb2JqZWN0CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnJvb3RdIElmIHNldCwgYHJvb3RgIG11c3QgYmUgYW4gaW5jbHVzaXZlIGFuY2VzdG9yCiAgICAgICAqICAgICAgICBvZiB0aGUgcmV0dXJuIHZhbHVlIChvciBlbHNlIG51bGwgaXMgcmV0dXJuZWQpLiBUaGlzIGNoZWNrIF9hc3N1bWVzXwogICAgICAgKiAgICAgICAgdGhhdCBgcm9vdGAgaXMgYWxzbyBhbiBpbmNsdXNpdmUgYW5jZXN0b3Igb2YgdGhlIGdpdmVuIGBvYmplY3RgCiAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc2tpcENoaWxkcmVuPWZhbHNlXSBJZiBzZXQsIGlnbm9yZSB0aGUgY2hpbGRyZW4gb2YgYG9iamVjdGAKICAgICAgICogQHJldHVybiB7P09iamVjdH0KICAgICAgICovCiAgICAgIGZvbGxvd2luZyhvYmplY3QsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCB0cmVlUm9vdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yb290OwogICAgICAgIGNvbnN0IHNraXBDaGlsZHJlbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5za2lwQ2hpbGRyZW47CiAgICAgICAgY29uc3QgZmlyc3RDaGlsZCA9ICFza2lwQ2hpbGRyZW4gJiYgdGhpcy5fbm9kZShvYmplY3QpLmZpcnN0Q2hpbGQ7CiAgICAgICAgaWYgKGZpcnN0Q2hpbGQpIHsKICAgICAgICAgIHJldHVybiBmaXJzdENoaWxkOwogICAgICAgIH0KICAgICAgICBsZXQgY3VycmVudCA9IG9iamVjdDsKICAgICAgICBkbyB7CiAgICAgICAgICBpZiAoY3VycmVudCA9PT0gdHJlZVJvb3QpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBuZXh0U2libGluZyA9IHRoaXMuX25vZGUoY3VycmVudCkubmV4dFNpYmxpbmc7CiAgICAgICAgICBpZiAobmV4dFNpYmxpbmcpIHsKICAgICAgICAgICAgcmV0dXJuIG5leHRTaWJsaW5nOwogICAgICAgICAgfQogICAgICAgICAgY3VycmVudCA9IHRoaXMuX25vZGUoY3VycmVudCkucGFyZW50OwogICAgICAgIH0gd2hpbGUgKGN1cnJlbnQpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBcHBlbmQgYWxsIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gYW4gYXJyYXkuCiAgICAgICAqCiAgICAgICAqICogYE8obilgIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBgcGFyZW50YAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGNoaWxkcmVuVG9BcnJheQogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyZW50CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KICAgICAgICogQHBhcmFtIHtPYmplY3RbXX0gW29wdGlvbnMuYXJyYXk9W11dCiAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmZpbHRlcl0gRnVuY3Rpb24gdG8gdGVzdCBlYWNoIG9iamVjdCBiZWZvcmUgaXQgaXMgYWRkZWQgdG8gdGhlIGFycmF5LgogICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZva2VkIHdpdGggYXJndW1lbnRzIChvYmplY3QpLiBTaG91bGQgcmV0dXJuIGB0cnVlYCBpZiBhbiBvYmplY3QKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdG8gYmUgaW5jbHVkZWQuCiAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnMudGhpc0FyZ10gVmFsdWUgdG8gdXNlIGFzIGB0aGlzYCB3aGVuIGV4ZWN1dGluZyBgZmlsdGVyYC4KICAgICAgICogQHJldHVybiB7T2JqZWN0W119CiAgICAgICAqLwogICAgICBjaGlsZHJlblRvQXJyYXkocGFyZW50LCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgYXJyYXkgPSBvcHRpb25zICYmIG9wdGlvbnMuYXJyYXkgfHwgW107CiAgICAgICAgY29uc3QgZmlsdGVyMiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXIgfHwgcmV0dXJuVHJ1ZTsKICAgICAgICBjb25zdCB0aGlzQXJnID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoaXNBcmcgfHwgdm9pZCAwOwogICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHBhcmVudCk7CiAgICAgICAgbGV0IG9iamVjdCA9IHBhcmVudE5vZGUuZmlyc3RDaGlsZDsKICAgICAgICBsZXQgaW5kZXgyID0gMDsKICAgICAgICB3aGlsZSAob2JqZWN0KSB7CiAgICAgICAgICBjb25zdCBub2RlMiA9IHRoaXMuX25vZGUob2JqZWN0KTsKICAgICAgICAgIG5vZGUyLnNldENhY2hlZEluZGV4KHBhcmVudE5vZGUsIGluZGV4Mik7CiAgICAgICAgICBpZiAoZmlsdGVyMi5jYWxsKHRoaXNBcmcsIG9iamVjdCkpIHsKICAgICAgICAgICAgYXJyYXkucHVzaChvYmplY3QpOwogICAgICAgICAgfQogICAgICAgICAgb2JqZWN0ID0gbm9kZTIubmV4dFNpYmxpbmc7CiAgICAgICAgICArK2luZGV4MjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBcHBlbmQgYWxsIGluY2x1c2l2ZSBhbmNlc3RvcnMgb2YgdGhlIGdpdmVuIG9iamVjdCB0byBhbiBhcnJheS4KICAgICAgICoKICAgICAgICogKiBgTyhuKWAgd2hlcmUgYG5gIGlzIHRoZSBhbW91bnQgb2YgYW5jZXN0b3JzIG9mIHRoZSBnaXZlbiBgb2JqZWN0YAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGFuY2VzdG9yc1RvQXJyYXkKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0W119IFtvcHRpb25zLmFycmF5PVtdXQogICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5maWx0ZXJdIEZ1bmN0aW9uIHRvIHRlc3QgZWFjaCBvYmplY3QgYmVmb3JlIGl0IGlzIGFkZGVkIHRvIHRoZSBhcnJheS4KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52b2tlZCB3aXRoIGFyZ3VtZW50cyAob2JqZWN0KS4gU2hvdWxkIHJldHVybiBgdHJ1ZWAgaWYgYW4gb2JqZWN0CiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRvIGJlIGluY2x1ZGVkLgogICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zLnRoaXNBcmddIFZhbHVlIHRvIHVzZSBhcyBgdGhpc2Agd2hlbiBleGVjdXRpbmcgYGZpbHRlcmAuCiAgICAgICAqIEByZXR1cm4ge09iamVjdFtdfQogICAgICAgKi8KICAgICAgYW5jZXN0b3JzVG9BcnJheShvYmplY3QsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBhcnJheSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hcnJheSB8fCBbXTsKICAgICAgICBjb25zdCBmaWx0ZXIyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlciB8fCByZXR1cm5UcnVlOwogICAgICAgIGNvbnN0IHRoaXNBcmcgPSBvcHRpb25zICYmIG9wdGlvbnMudGhpc0FyZyB8fCB2b2lkIDA7CiAgICAgICAgbGV0IGFuY2VzdG9yID0gb2JqZWN0OwogICAgICAgIHdoaWxlIChhbmNlc3RvcikgewogICAgICAgICAgaWYgKGZpbHRlcjIuY2FsbCh0aGlzQXJnLCBhbmNlc3RvcikpIHsKICAgICAgICAgICAgYXJyYXkucHVzaChhbmNlc3Rvcik7CiAgICAgICAgICB9CiAgICAgICAgICBhbmNlc3RvciA9IHRoaXMuX25vZGUoYW5jZXN0b3IpLnBhcmVudDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBcHBlbmQgYWxsIGRlc2NlbmRhbnRzIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gYW4gYXJyYXkgKGluIHRyZWUgb3JkZXIpLgogICAgICAgKgogICAgICAgKiAqIGBPKG4pYCB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBvYmplY3RzIGluIHRoZSBzdWItdHJlZSBvZiB0aGUgZ2l2ZW4gYG9iamVjdGAKICAgICAgICoKICAgICAgICogQG1ldGhvZCB0cmVlVG9BcnJheQogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcm9vdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0W119IFtvcHRpb25zLmFycmF5PVtdXQogICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5maWx0ZXJdIEZ1bmN0aW9uIHRvIHRlc3QgZWFjaCBvYmplY3QgYmVmb3JlIGl0IGlzIGFkZGVkIHRvIHRoZSBhcnJheS4KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52b2tlZCB3aXRoIGFyZ3VtZW50cyAob2JqZWN0KS4gU2hvdWxkIHJldHVybiBgdHJ1ZWAgaWYgYW4gb2JqZWN0CiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRvIGJlIGluY2x1ZGVkLgogICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zLnRoaXNBcmddIFZhbHVlIHRvIHVzZSBhcyBgdGhpc2Agd2hlbiBleGVjdXRpbmcgYGZpbHRlcmAuCiAgICAgICAqIEByZXR1cm4ge09iamVjdFtdfQogICAgICAgKi8KICAgICAgdHJlZVRvQXJyYXkocm9vdDYsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBhcnJheSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hcnJheSB8fCBbXTsKICAgICAgICBjb25zdCBmaWx0ZXIyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlciB8fCByZXR1cm5UcnVlOwogICAgICAgIGNvbnN0IHRoaXNBcmcgPSBvcHRpb25zICYmIG9wdGlvbnMudGhpc0FyZyB8fCB2b2lkIDA7CiAgICAgICAgbGV0IG9iamVjdCA9IHJvb3Q2OwogICAgICAgIHdoaWxlIChvYmplY3QpIHsKICAgICAgICAgIGlmIChmaWx0ZXIyLmNhbGwodGhpc0FyZywgb2JqZWN0KSkgewogICAgICAgICAgICBhcnJheS5wdXNoKG9iamVjdCk7CiAgICAgICAgICB9CiAgICAgICAgICBvYmplY3QgPSB0aGlzLmZvbGxvd2luZyhvYmplY3QsIHsgcm9vdDogcm9vdDYgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhcnJheTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSXRlcmF0ZSBvdmVyIGFsbCBjaGlsZHJlbiBvZiB0aGUgZ2l2ZW4gb2JqZWN0CiAgICAgICAqCiAgICAgICAqICogYE8oMSlgIGZvciBhIHNpbmdsZSBpdGVyYXRpb24KICAgICAgICoKICAgICAgICogQG1ldGhvZCBjaGlsZHJlbkl0ZXJhdG9yCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXQogICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnJldmVyc2U9ZmFsc2VdCiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmFibGUgaXRlcmF0b3IgKEVTNikKICAgICAgICovCiAgICAgIGNoaWxkcmVuSXRlcmF0b3IocGFyZW50LCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgcmV2ZXJzZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yZXZlcnNlOwogICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHBhcmVudCk7CiAgICAgICAgcmV0dXJuIG5ldyBUcmVlSXRlcmF0b3IoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgcGFyZW50LAogICAgICAgICAgcmV2ZXJzZSA/IHBhcmVudE5vZGUubGFzdENoaWxkIDogcGFyZW50Tm9kZS5maXJzdENoaWxkLAogICAgICAgICAgcmV2ZXJzZSA/IFRyZWVJdGVyYXRvci5QUkVWIDogVHJlZUl0ZXJhdG9yLk5FWFQKICAgICAgICApOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSBwcmV2aW91cyBzaWJsaW5ncyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LiAoaW4gcmV2ZXJzZSB0cmVlIG9yZGVyKQogICAgICAgKgogICAgICAgKiAqIGBPKDEpYCBmb3IgYSBzaW5nbGUgaXRlcmF0aW9uCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgcHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KQogICAgICAgKi8KICAgICAgcHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdCkgewogICAgICAgIHJldHVybiBuZXcgVHJlZUl0ZXJhdG9yKAogICAgICAgICAgdGhpcywKICAgICAgICAgIG9iamVjdCwKICAgICAgICAgIHRoaXMuX25vZGUob2JqZWN0KS5wcmV2aW91c1NpYmxpbmcsCiAgICAgICAgICBUcmVlSXRlcmF0b3IuUFJFVgogICAgICAgICk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIG5leHQgc2libGluZ3Mgb2YgdGhlIGdpdmVuIG9iamVjdC4gKGluIHRyZWUgb3JkZXIpCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgIGZvciBhIHNpbmdsZSBpdGVyYXRpb24KICAgICAgICoKICAgICAgICogQG1ldGhvZCBuZXh0U2libGluZ3NJdGVyYXRvcgogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmFibGUgaXRlcmF0b3IgKEVTNikKICAgICAgICovCiAgICAgIG5leHRTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdCkgewogICAgICAgIHJldHVybiBuZXcgVHJlZUl0ZXJhdG9yKAogICAgICAgICAgdGhpcywKICAgICAgICAgIG9iamVjdCwKICAgICAgICAgIHRoaXMuX25vZGUob2JqZWN0KS5uZXh0U2libGluZywKICAgICAgICAgIFRyZWVJdGVyYXRvci5ORVhUCiAgICAgICAgKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSXRlcmF0ZSBvdmVyIGFsbCBpbmNsdXNpdmUgYW5jZXN0b3JzIG9mIHRoZSBnaXZlbiBvYmplY3QKICAgICAgICoKICAgICAgICogKiBgTygxKWAgZm9yIGEgc2luZ2xlIGl0ZXJhdGlvbgogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGFuY2VzdG9yc0l0ZXJhdG9yCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KQogICAgICAgKi8KICAgICAgYW5jZXN0b3JzSXRlcmF0b3Iob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG5ldyBUcmVlSXRlcmF0b3IoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgb2JqZWN0LAogICAgICAgICAgb2JqZWN0LAogICAgICAgICAgVHJlZUl0ZXJhdG9yLlBBUkVOVAogICAgICAgICk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEl0ZXJhdGUgb3ZlciBhbGwgZGVzY2VuZGFudHMgb2YgdGhlIGdpdmVuIG9iamVjdCAoaW4gdHJlZSBvcmRlcikuCiAgICAgICAqCiAgICAgICAqIFdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIG9iamVjdHMgaW4gdGhlIHN1Yi10cmVlIG9mIHRoZSBnaXZlbiBgcm9vdGA6CiAgICAgICAqCiAgICAgICAqICogYE8obilgICh3b3JzdCBjYXNlIGZvciBhIHNpbmdsZSBpdGVyYXRpb24pCiAgICAgICAqICogYE8obilgIChhbW9ydGl6ZWQsIHdoZW4gY29tcGxldGluZyB0aGUgaXRlcmF0b3IpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgdHJlZUl0ZXJhdG9yCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByb290CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMucmV2ZXJzZT1mYWxzZV0KICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KQogICAgICAgKi8KICAgICAgdHJlZUl0ZXJhdG9yKHJvb3Q2LCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgcmV2ZXJzZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yZXZlcnNlOwogICAgICAgIHJldHVybiBuZXcgVHJlZUl0ZXJhdG9yKAogICAgICAgICAgdGhpcywKICAgICAgICAgIHJvb3Q2LAogICAgICAgICAgcmV2ZXJzZSA/IHRoaXMubGFzdEluY2x1c2l2ZURlc2NlbmRhbnQocm9vdDYpIDogcm9vdDYsCiAgICAgICAgICByZXZlcnNlID8gVHJlZUl0ZXJhdG9yLlBSRUNFRElORyA6IFRyZWVJdGVyYXRvci5GT0xMT1dJTkcKICAgICAgICApOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBGaW5kIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gb2JqZWN0ICh0aGUgbnVtYmVyIG9mIHByZWNlZGluZyBzaWJsaW5ncykuCiAgICAgICAqCiAgICAgICAqICogYE8obilgIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIHByZWNlZGluZyBzaWJsaW5ncwogICAgICAgKiAqIGBPKDEpYCAoYW1vcnRpemVkLCBpZiB0aGUgdHJlZSBpcyBub3QgbW9kaWZpZWQpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgaW5kZXgKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNoaWxkCiAgICAgICAqIEByZXR1cm4ge051bWJlcn0gVGhlIG51bWJlciBvZiBwcmVjZWRpbmcgc2libGluZ3MsIG9yIC0xIGlmIHRoZSBvYmplY3QgaGFzIG5vIHBhcmVudAogICAgICAgKi8KICAgICAgaW5kZXgoY2hpbGQpIHsKICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSB0aGlzLl9ub2RlKGNoaWxkKTsKICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShjaGlsZE5vZGUucGFyZW50KTsKICAgICAgICBpZiAoIXBhcmVudE5vZGUpIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IGNoaWxkTm9kZS5nZXRDYWNoZWRJbmRleChwYXJlbnROb2RlKTsKICAgICAgICBpZiAoY3VycmVudEluZGV4ID49IDApIHsKICAgICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7CiAgICAgICAgfQogICAgICAgIGN1cnJlbnRJbmRleCA9IDA7CiAgICAgICAgbGV0IG9iamVjdCA9IHBhcmVudE5vZGUuZmlyc3RDaGlsZDsKICAgICAgICBpZiAocGFyZW50Tm9kZS5jaGlsZEluZGV4Q2FjaGVkVXBUbykgewogICAgICAgICAgY29uc3QgY2FjaGVkVXBUb05vZGUgPSB0aGlzLl9ub2RlKHBhcmVudE5vZGUuY2hpbGRJbmRleENhY2hlZFVwVG8pOwogICAgICAgICAgb2JqZWN0ID0gY2FjaGVkVXBUb05vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgICBjdXJyZW50SW5kZXggPSBjYWNoZWRVcFRvTm9kZS5nZXRDYWNoZWRJbmRleChwYXJlbnROb2RlKSArIDE7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChvYmplY3QpIHsKICAgICAgICAgIGNvbnN0IG5vZGUyID0gdGhpcy5fbm9kZShvYmplY3QpOwogICAgICAgICAgbm9kZTIuc2V0Q2FjaGVkSW5kZXgocGFyZW50Tm9kZSwgY3VycmVudEluZGV4KTsKICAgICAgICAgIGlmIChvYmplY3QgPT09IGNoaWxkKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgKytjdXJyZW50SW5kZXg7CiAgICAgICAgICBvYmplY3QgPSBub2RlMi5uZXh0U2libGluZzsKICAgICAgICB9CiAgICAgICAgcGFyZW50Tm9kZS5jaGlsZEluZGV4Q2FjaGVkVXBUbyA9IGNoaWxkOwogICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuLgogICAgICAgKgogICAgICAgKiAqIGBPKG4pYCB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBjaGlsZHJlbgogICAgICAgKiAqIGBPKDEpYCAoYW1vcnRpemVkLCBpZiB0aGUgdHJlZSBpcyBub3QgbW9kaWZpZWQpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgY2hpbGRyZW5Db3VudAogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyZW50CiAgICAgICAqIEByZXR1cm4ge051bWJlcn0KICAgICAgICovCiAgICAgIGNoaWxkcmVuQ291bnQocGFyZW50KSB7CiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUocGFyZW50KTsKICAgICAgICBpZiAoIXBhcmVudE5vZGUubGFzdENoaWxkKSB7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXgocGFyZW50Tm9kZS5sYXN0Q2hpbGQpICsgMTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ29tcGFyZSB0aGUgcG9zaXRpb24gb2YgYW4gb2JqZWN0IHJlbGF0aXZlIHRvIGFub3RoZXIgb2JqZWN0LiBBIGJpdCBzZXQgaXMgcmV0dXJuZWQ6CiAgICAgICAqCiAgICAgICAqIDx1bD4KICAgICAgICogICAgIDxsaT5ESVNDT05ORUNURUQgOiAxPC9saT4KICAgICAgICogICAgIDxsaT5QUkVDRURJTkcgOiAyPC9saT4KICAgICAgICogICAgIDxsaT5GT0xMT1dJTkcgOiA0PC9saT4KICAgICAgICogICAgIDxsaT5DT05UQUlOUyA6IDg8L2xpPgogICAgICAgKiAgICAgPGxpPkNPTlRBSU5FRF9CWSA6IDE2PC9saT4KICAgICAgICogPC91bD4KICAgICAgICoKICAgICAgICogVGhlIHNlbWFudGljcyBhcmUgdGhlIHNhbWUgYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb24gaW4gRE9NLCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdAogICAgICAgKiBESVNDT05ORUNURUQgbmV2ZXIgb2NjdXJzIHdpdGggYW55IG90aGVyIGJpdC4KICAgICAgICoKICAgICAgICogd2hlcmUgYG5gIGFuZCBgbWAgYXJlIHRoZSBhbW91bnQgb2YgYW5jZXN0b3JzIG9mIGBsZWZ0YCBhbmQgYHJpZ2h0YDsKICAgICAgICogd2hlcmUgYG9gIGlzIHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gb2YgdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgYGxlZnRgIGFuZCBgcmlnaHRgOgogICAgICAgKgogICAgICAgKiAqIGBPKG4gKyBtICsgbylgICh3b3JzdCBjYXNlKQogICAgICAgKiAqIGBPKG4gKyBtKWAgKGFtb3J0aXplZCwgaWYgdGhlIHRyZWUgaXMgbm90IG1vZGlmaWVkKQogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGNvbXBhcmVUcmVlUG9zaXRpb24KICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IGxlZnQKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJpZ2h0CiAgICAgICAqIEByZXR1cm4ge051bWJlcn0KICAgICAgICovCiAgICAgIGNvbXBhcmVUcmVlUG9zaXRpb24obGVmdCwgcmlnaHQpIHsKICAgICAgICBpZiAobGVmdCA9PT0gcmlnaHQpIHsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBjb25zdCBsZWZ0QW5jZXN0b3JzID0gW107CiAgICAgICAgewogICAgICAgICAgbGV0IGxlZnRBbmNlc3RvciA9IGxlZnQ7CiAgICAgICAgICB3aGlsZSAobGVmdEFuY2VzdG9yKSB7CiAgICAgICAgICAgIGlmIChsZWZ0QW5jZXN0b3IgPT09IHJpZ2h0KSB7CiAgICAgICAgICAgICAgcmV0dXJuIFRyZWVQb3NpdGlvbi5DT05UQUlOUyB8IFRyZWVQb3NpdGlvbi5QUkVDRURJTkc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGVmdEFuY2VzdG9ycy5wdXNoKGxlZnRBbmNlc3Rvcik7CiAgICAgICAgICAgIGxlZnRBbmNlc3RvciA9IHRoaXMucGFyZW50KGxlZnRBbmNlc3Rvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJpZ2h0QW5jZXN0b3JzID0gW107CiAgICAgICAgewogICAgICAgICAgbGV0IHJpZ2h0QW5jZXN0b3IgPSByaWdodDsKICAgICAgICAgIHdoaWxlIChyaWdodEFuY2VzdG9yKSB7CiAgICAgICAgICAgIGlmIChyaWdodEFuY2VzdG9yID09PSBsZWZ0KSB7CiAgICAgICAgICAgICAgcmV0dXJuIFRyZWVQb3NpdGlvbi5DT05UQUlORURfQlkgfCBUcmVlUG9zaXRpb24uRk9MTE9XSU5HOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJpZ2h0QW5jZXN0b3JzLnB1c2gocmlnaHRBbmNlc3Rvcik7CiAgICAgICAgICAgIHJpZ2h0QW5jZXN0b3IgPSB0aGlzLnBhcmVudChyaWdodEFuY2VzdG9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3Qgcm9vdDYgPSByZXZlcnNlQXJyYXlJbmRleChsZWZ0QW5jZXN0b3JzLCAwKTsKICAgICAgICBpZiAoIXJvb3Q2IHx8IHJvb3Q2ICE9PSByZXZlcnNlQXJyYXlJbmRleChyaWdodEFuY2VzdG9ycywgMCkpIHsKICAgICAgICAgIHJldHVybiBUcmVlUG9zaXRpb24uRElTQ09OTkVDVEVEOwogICAgICAgIH0KICAgICAgICBsZXQgY29tbW9uQW5jZXN0b3JJbmRleCA9IDA7CiAgICAgICAgY29uc3QgYW5jZXN0b3JzTWluTGVuZ3RoID0gTWF0aC5taW4obGVmdEFuY2VzdG9ycy5sZW5ndGgsIHJpZ2h0QW5jZXN0b3JzLmxlbmd0aCk7CiAgICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgYW5jZXN0b3JzTWluTGVuZ3RoOyArK2kxMSkgewogICAgICAgICAgY29uc3QgbGVmdEFuY2VzdG9yID0gcmV2ZXJzZUFycmF5SW5kZXgobGVmdEFuY2VzdG9ycywgaTExKTsKICAgICAgICAgIGNvbnN0IHJpZ2h0QW5jZXN0b3IgPSByZXZlcnNlQXJyYXlJbmRleChyaWdodEFuY2VzdG9ycywgaTExKTsKICAgICAgICAgIGlmIChsZWZ0QW5jZXN0b3IgIT09IHJpZ2h0QW5jZXN0b3IpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBjb21tb25BbmNlc3RvckluZGV4ID0gaTExOwogICAgICAgIH0KICAgICAgICBjb25zdCBsZWZ0SW5kZXggPSB0aGlzLmluZGV4KHJldmVyc2VBcnJheUluZGV4KGxlZnRBbmNlc3RvcnMsIGNvbW1vbkFuY2VzdG9ySW5kZXggKyAxKSk7CiAgICAgICAgY29uc3QgcmlnaHRJbmRleCA9IHRoaXMuaW5kZXgocmV2ZXJzZUFycmF5SW5kZXgocmlnaHRBbmNlc3RvcnMsIGNvbW1vbkFuY2VzdG9ySW5kZXggKyAxKSk7CiAgICAgICAgcmV0dXJuIHJpZ2h0SW5kZXggPCBsZWZ0SW5kZXggPyBUcmVlUG9zaXRpb24uUFJFQ0VESU5HIDogVHJlZVBvc2l0aW9uLkZPTExPV0lORzsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGlzIHRyZWUuCiAgICAgICAqIEhhcyBubyBlZmZlY3QgaWYgYWxyZWFkeSByZW1vdmVkLgogICAgICAgKgogICAgICAgKiAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIHJlbW92ZQogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVtb3ZlT2JqZWN0CiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gcmVtb3ZlT2JqZWN0CiAgICAgICAqLwogICAgICByZW1vdmUocmVtb3ZlT2JqZWN0KSB7CiAgICAgICAgY29uc3QgcmVtb3ZlTm9kZSA9IHRoaXMuX25vZGUocmVtb3ZlT2JqZWN0KTsKICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShyZW1vdmVOb2RlLnBhcmVudCk7CiAgICAgICAgY29uc3QgcHJldk5vZGUgPSB0aGlzLl9ub2RlKHJlbW92ZU5vZGUucHJldmlvdXNTaWJsaW5nKTsKICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IHRoaXMuX25vZGUocmVtb3ZlTm9kZS5uZXh0U2libGluZyk7CiAgICAgICAgaWYgKHBhcmVudE5vZGUpIHsKICAgICAgICAgIGlmIChwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPT09IHJlbW92ZU9iamVjdCkgewogICAgICAgICAgICBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPSByZW1vdmVOb2RlLm5leHRTaWJsaW5nOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHBhcmVudE5vZGUubGFzdENoaWxkID09PSByZW1vdmVPYmplY3QpIHsKICAgICAgICAgICAgcGFyZW50Tm9kZS5sYXN0Q2hpbGQgPSByZW1vdmVOb2RlLnByZXZpb3VzU2libGluZzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHByZXZOb2RlKSB7CiAgICAgICAgICBwcmV2Tm9kZS5uZXh0U2libGluZyA9IHJlbW92ZU5vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgfQogICAgICAgIGlmIChuZXh0Tm9kZSkgewogICAgICAgICAgbmV4dE5vZGUucHJldmlvdXNTaWJsaW5nID0gcmVtb3ZlTm9kZS5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgfQogICAgICAgIHJlbW92ZU5vZGUucGFyZW50ID0gbnVsbDsKICAgICAgICByZW1vdmVOb2RlLnByZXZpb3VzU2libGluZyA9IG51bGw7CiAgICAgICAgcmVtb3ZlTm9kZS5uZXh0U2libGluZyA9IG51bGw7CiAgICAgICAgcmVtb3ZlTm9kZS5jYWNoZWRJbmRleCA9IC0xOwogICAgICAgIHJlbW92ZU5vZGUuY2FjaGVkSW5kZXhWZXJzaW9uID0gTmFOOwogICAgICAgIGlmIChwYXJlbnROb2RlKSB7CiAgICAgICAgICBwYXJlbnROb2RlLmNoaWxkcmVuQ2hhbmdlZCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVtb3ZlT2JqZWN0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIG9iamVjdCBiZWZvcmUgdGhlIHJlZmVyZW5jZSBvYmplY3QuCiAgICAgICAqIGBuZXdPYmplY3RgIGlzIG5vdyB0aGUgcHJldmlvdXMgc2libGluZyBvZiBgcmVmZXJlbmNlT2JqZWN0YC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBpbnNlcnRCZWZvcmUKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9iamVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgbmV3T2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBuZXdPYmplY3QKICAgICAgICovCiAgICAgIGluc2VydEJlZm9yZShyZWZlcmVuY2VPYmplY3QsIG5ld09iamVjdCkgewogICAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU9iamVjdCk7CiAgICAgICAgY29uc3QgcHJldk5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU5vZGUucHJldmlvdXNTaWJsaW5nKTsKICAgICAgICBjb25zdCBuZXdOb2RlID0gdGhpcy5fbm9kZShuZXdPYmplY3QpOwogICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU5vZGUucGFyZW50KTsKICAgICAgICBpZiAobmV3Tm9kZS5pc0F0dGFjaGVkKSB7CiAgICAgICAgICB0aHJvdyBFcnJvcigiR2l2ZW4gb2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUsIHJlbW92ZSBpdCBmaXJzdCIpOwogICAgICAgIH0KICAgICAgICBuZXdOb2RlLnBhcmVudCA9IHJlZmVyZW5jZU5vZGUucGFyZW50OwogICAgICAgIG5ld05vZGUucHJldmlvdXNTaWJsaW5nID0gcmVmZXJlbmNlTm9kZS5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgbmV3Tm9kZS5uZXh0U2libGluZyA9IHJlZmVyZW5jZU9iamVjdDsKICAgICAgICByZWZlcmVuY2VOb2RlLnByZXZpb3VzU2libGluZyA9IG5ld09iamVjdDsKICAgICAgICBpZiAocHJldk5vZGUpIHsKICAgICAgICAgIHByZXZOb2RlLm5leHRTaWJsaW5nID0gbmV3T2JqZWN0OwogICAgICAgIH0KICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPT09IHJlZmVyZW5jZU9iamVjdCkgewogICAgICAgICAgcGFyZW50Tm9kZS5maXJzdENoaWxkID0gbmV3T2JqZWN0OwogICAgICAgIH0KICAgICAgICBpZiAocGFyZW50Tm9kZSkgewogICAgICAgICAgcGFyZW50Tm9kZS5jaGlsZHJlbkNoYW5nZWQoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ld09iamVjdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogSW5zZXJ0IHRoZSBnaXZlbiBvYmplY3QgYWZ0ZXIgdGhlIHJlZmVyZW5jZSBvYmplY3QuCiAgICAgICAqIGBuZXdPYmplY3RgIGlzIG5vdyB0aGUgbmV4dCBzaWJsaW5nIG9mIGByZWZlcmVuY2VPYmplY3RgLgogICAgICAgKgogICAgICAgKiAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGluc2VydEFmdGVyCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZWZlcmVuY2VPYmplY3QKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5ld09iamVjdAogICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIG5ld09iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlCiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqLwogICAgICBpbnNlcnRBZnRlcihyZWZlcmVuY2VPYmplY3QsIG5ld09iamVjdCkgewogICAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU9iamVjdCk7CiAgICAgICAgY29uc3QgbmV4dE5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU5vZGUubmV4dFNpYmxpbmcpOwogICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLl9ub2RlKG5ld09iamVjdCk7CiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlTm9kZS5wYXJlbnQpOwogICAgICAgIGlmIChuZXdOb2RlLmlzQXR0YWNoZWQpIHsKICAgICAgICAgIHRocm93IEVycm9yKCJHaXZlbiBvYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZSwgcmVtb3ZlIGl0IGZpcnN0Iik7CiAgICAgICAgfQogICAgICAgIG5ld05vZGUucGFyZW50ID0gcmVmZXJlbmNlTm9kZS5wYXJlbnQ7CiAgICAgICAgbmV3Tm9kZS5wcmV2aW91c1NpYmxpbmcgPSByZWZlcmVuY2VPYmplY3Q7CiAgICAgICAgbmV3Tm9kZS5uZXh0U2libGluZyA9IHJlZmVyZW5jZU5vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgcmVmZXJlbmNlTm9kZS5uZXh0U2libGluZyA9IG5ld09iamVjdDsKICAgICAgICBpZiAobmV4dE5vZGUpIHsKICAgICAgICAgIG5leHROb2RlLnByZXZpb3VzU2libGluZyA9IG5ld09iamVjdDsKICAgICAgICB9CiAgICAgICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS5sYXN0Q2hpbGQgPT09IHJlZmVyZW5jZU9iamVjdCkgewogICAgICAgICAgcGFyZW50Tm9kZS5sYXN0Q2hpbGQgPSBuZXdPYmplY3Q7CiAgICAgICAgfQogICAgICAgIGlmIChwYXJlbnROb2RlKSB7CiAgICAgICAgICBwYXJlbnROb2RlLmNoaWxkcmVuQ2hhbmdlZCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3T2JqZWN0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIG9iamVjdCBhcyB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIGdpdmVuIHJlZmVyZW5jZSBvYmplY3QuCiAgICAgICAqIGBuZXdPYmplY3RgIGlzIG5vdyB0aGUgZmlyc3QgY2hpbGQgb2YgYHJlZmVyZW5jZU9iamVjdGAuCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgcHJlcGVuZENoaWxkCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZWZlcmVuY2VPYmplY3QKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5ld09iamVjdAogICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIG5ld09iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlCiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqLwogICAgICBwcmVwZW5kQ2hpbGQocmVmZXJlbmNlT2JqZWN0LCBuZXdPYmplY3QpIHsKICAgICAgICBjb25zdCByZWZlcmVuY2VOb2RlID0gdGhpcy5fbm9kZShyZWZlcmVuY2VPYmplY3QpOwogICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLl9ub2RlKG5ld09iamVjdCk7CiAgICAgICAgaWYgKG5ld05vZGUuaXNBdHRhY2hlZCkgewogICAgICAgICAgdGhyb3cgRXJyb3IoIkdpdmVuIG9iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlLCByZW1vdmUgaXQgZmlyc3QiKTsKICAgICAgICB9CiAgICAgICAgaWYgKHJlZmVyZW5jZU5vZGUuaGFzQ2hpbGRyZW4pIHsKICAgICAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKHJlZmVyZW5jZU5vZGUuZmlyc3RDaGlsZCwgbmV3T2JqZWN0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbmV3Tm9kZS5wYXJlbnQgPSByZWZlcmVuY2VPYmplY3Q7CiAgICAgICAgICByZWZlcmVuY2VOb2RlLmZpcnN0Q2hpbGQgPSBuZXdPYmplY3Q7CiAgICAgICAgICByZWZlcmVuY2VOb2RlLmxhc3RDaGlsZCA9IG5ld09iamVjdDsKICAgICAgICAgIHJlZmVyZW5jZU5vZGUuY2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXdPYmplY3Q7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEluc2VydCB0aGUgZ2l2ZW4gb2JqZWN0IGFzIHRoZSBsYXN0IGNoaWxkIG9mIHRoZSBnaXZlbiByZWZlcmVuY2Ugb2JqZWN0LgogICAgICAgKiBgbmV3T2JqZWN0YCBpcyBub3cgdGhlIGxhc3QgY2hpbGQgb2YgYHJlZmVyZW5jZU9iamVjdGAuCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgYXBwZW5kQ2hpbGQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9iamVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgbmV3T2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBuZXdPYmplY3QKICAgICAgICovCiAgICAgIGFwcGVuZENoaWxkKHJlZmVyZW5jZU9iamVjdCwgbmV3T2JqZWN0KSB7CiAgICAgICAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlT2JqZWN0KTsKICAgICAgICBjb25zdCBuZXdOb2RlID0gdGhpcy5fbm9kZShuZXdPYmplY3QpOwogICAgICAgIGlmIChuZXdOb2RlLmlzQXR0YWNoZWQpIHsKICAgICAgICAgIHRocm93IEVycm9yKCJHaXZlbiBvYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZSwgcmVtb3ZlIGl0IGZpcnN0Iik7CiAgICAgICAgfQogICAgICAgIGlmIChyZWZlcmVuY2VOb2RlLmhhc0NoaWxkcmVuKSB7CiAgICAgICAgICB0aGlzLmluc2VydEFmdGVyKHJlZmVyZW5jZU5vZGUubGFzdENoaWxkLCBuZXdPYmplY3QpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBuZXdOb2RlLnBhcmVudCA9IHJlZmVyZW5jZU9iamVjdDsKICAgICAgICAgIHJlZmVyZW5jZU5vZGUuZmlyc3RDaGlsZCA9IG5ld09iamVjdDsKICAgICAgICAgIHJlZmVyZW5jZU5vZGUubGFzdENoaWxkID0gbmV3T2JqZWN0OwogICAgICAgICAgcmVmZXJlbmNlTm9kZS5jaGlsZHJlbkNoYW5nZWQoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ld09iamVjdDsKICAgICAgfQogICAgfTsKICAgIG1vZHVsZS5leHBvcnRzID0gU3ltYm9sVHJlZTsKICAgIFN5bWJvbFRyZWUuVHJlZVBvc2l0aW9uID0gVHJlZVBvc2l0aW9uOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnBsdWdpbnMuanMKdmFyIGltcG9ydF9zeW1ib2xfdHJlZTsKdmFyIGluaXRfY2xhc3Nlc19wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMygpOwogICAgaW5pdF9kaXN0X3RzNSgpOwogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBpbml0X2Rpc3RfdHMyKCk7CiAgICBpbml0X2Rpc3RfdHM2KCk7CiAgICBpbXBvcnRfc3ltYm9sX3RyZWUgPSBfX3RvRVNNKHJlcXVpcmVfU3ltYm9sVHJlZSgpLCAxKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5hc3luY2V4ZWN1dGlvbnN0YWNrLmpzCnZhciBBc3luY0V4ZWN1dGlvblN0YWNrOwp2YXIgaW5pdF9jbGFzc2VzX2FzeW5jZXhlY3V0aW9uc3RhY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuYXN5bmNleGVjdXRpb25zdGFjay5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgQXN5bmNFeGVjdXRpb25TdGFjayA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5leGVjdXRpb25TbG90cyA9IFtdOwogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5ub25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSA9IEluZmluaXR5OwogICAgICAgIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50ID0gMDsKICAgICAgICB0aGlzLm5vbkV4Y2x1c2l2ZVBlbmRpbmdRdWV1ZSA9IFtdOwogICAgICB9CiAgICAgIGFzeW5jIGdldEV4Y2x1c2l2ZUV4ZWN1dGlvblNsb3QoZnVuY0FyZywgdGltZW91dEFyZykgewogICAgICAgIGNvbnN0IGV4ZWN1dGlvbkRlZmVycmVkID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgY29uc3QgZXhlY3V0aW9uU2xvdCA9IHsKICAgICAgICAgIGZ1bmNUb0V4ZWN1dGU6IGZ1bmNBcmcsCiAgICAgICAgICBleGVjdXRpb25EZWZlcnJlZCwKICAgICAgICAgIHRpbWVvdXQ6IHRpbWVvdXRBcmcsCiAgICAgICAgICBtb2RlOiAiZXhjbHVzaXZlIgogICAgICAgIH07CiAgICAgICAgdGhpcy5leGVjdXRpb25TbG90cy5wdXNoKGV4ZWN1dGlvblNsb3QpOwogICAgICAgIHRoaXMucHJvY2Vzc0V4ZWN1dGlvblNsb3RzKCk7CiAgICAgICAgcmV0dXJuIGV4ZWN1dGlvbkRlZmVycmVkLnByb21pc2U7CiAgICAgIH0KICAgICAgYXN5bmMgZ2V0Tm9uRXhjbHVzaXZlRXhlY3V0aW9uU2xvdChmdW5jQXJnLCB0aW1lb3V0QXJnKSB7CiAgICAgICAgY29uc3QgZXhlY3V0aW9uRGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICBjb25zdCBleGVjdXRpb25TbG90ID0gewogICAgICAgICAgZnVuY1RvRXhlY3V0ZTogZnVuY0FyZywKICAgICAgICAgIGV4ZWN1dGlvbkRlZmVycmVkLAogICAgICAgICAgdGltZW91dDogdGltZW91dEFyZywKICAgICAgICAgIG1vZGU6ICJub25leGNsdXNpdmUiCiAgICAgICAgfTsKICAgICAgICB0aGlzLmV4ZWN1dGlvblNsb3RzLnB1c2goZXhlY3V0aW9uU2xvdCk7CiAgICAgICAgdGhpcy5wcm9jZXNzRXhlY3V0aW9uU2xvdHMoKTsKICAgICAgICByZXR1cm4gZXhlY3V0aW9uRGVmZXJyZWQucHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IG5vbi1leGNsdXNpdmUgdGFza3MuCiAgICAgICAqIEBwYXJhbSBjb25jdXJyZW5jeSBtaW5pbXVtIDEgKEluZmluaXR5IG1lYW5zIHVubGltaXRlZCkKICAgICAgICovCiAgICAgIHNldE5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5KGNvbmN1cnJlbmN5KSB7CiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoY29uY3VycmVuY3kpIHx8IGNvbmN1cnJlbmN5IDwgMSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJub25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSBtdXN0IGJlIGEgZmluaXRlIG51bWJlciA+PSAxIik7CiAgICAgICAgfQogICAgICAgIHRoaXMubm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3kgPSBjb25jdXJyZW5jeTsKICAgICAgfQogICAgICAvKiogR2V0IHRoZSBjb25maWd1cmVkIG1heCBjb25jdXJyZW5jeSBmb3Igbm9uLWV4Y2x1c2l2ZSB0YXNrcyAqLwogICAgICBnZXROb25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5ub25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeTsKICAgICAgfQogICAgICAvKiogTnVtYmVyIG9mIG5vbi1leGNsdXNpdmUgdGFza3MgY3VycmVudGx5IHJ1bm5pbmcgKi8KICAgICAgZ2V0QWN0aXZlTm9uRXhjbHVzaXZlQ291bnQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50OwogICAgICB9CiAgICAgIC8qKiBOdW1iZXIgb2Ygbm9uLWV4Y2x1c2l2ZSB0YXNrcyB3YWl0aW5nIGZvciBhIGZyZWUgc2xvdCAqLwogICAgICBnZXRQZW5kaW5nTm9uRXhjbHVzaXZlQ291bnQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubm9uRXhjbHVzaXZlUGVuZGluZ1F1ZXVlLmxlbmd0aDsKICAgICAgfQogICAgICBhc3luYyBwcm9jZXNzRXhlY3V0aW9uU2xvdHMoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNQcm9jZXNzaW5nKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gdHJ1ZTsKICAgICAgICB3aGlsZSAodGhpcy5leGVjdXRpb25TbG90cy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBjb25zdCBjdXJyZW50U2xvdCA9IHRoaXMuZXhlY3V0aW9uU2xvdHNbMF07CiAgICAgICAgICBpZiAoY3VycmVudFNsb3QubW9kZSA9PT0gImV4Y2x1c2l2ZSIpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRlRXhjbHVzaXZlU2xvdChjdXJyZW50U2xvdCk7CiAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uU2xvdHMuc2hpZnQoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IG5vbkV4Y2x1c2l2ZVNsb3RzID0gW107CiAgICAgICAgICAgIHdoaWxlICh0aGlzLmV4ZWN1dGlvblNsb3RzLmxlbmd0aCA+IDAgJiYgdGhpcy5leGVjdXRpb25TbG90c1swXS5tb2RlID09PSAibm9uZXhjbHVzaXZlIikgewogICAgICAgICAgICAgIG5vbkV4Y2x1c2l2ZVNsb3RzLnB1c2godGhpcy5leGVjdXRpb25TbG90cy5zaGlmdCgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVOb25FeGNsdXNpdmVTbG90cyhub25FeGNsdXNpdmVTbG90cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7CiAgICAgIH0KICAgICAgYXN5bmMgZXhlY3V0ZUV4Y2x1c2l2ZVNsb3Qoc2xvdCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBpZiAoc2xvdC50aW1lb3V0KSB7CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbCiAgICAgICAgICAgICAgc2xvdC5mdW5jVG9FeGVjdXRlKCksCiAgICAgICAgICAgICAgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcihzbG90LnRpbWVvdXQpLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaW1lb3V0IHJlYWNoZWQiKTsKICAgICAgICAgICAgICB9KQogICAgICAgICAgICBdKTsKICAgICAgICAgICAgc2xvdC5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzbG90LmZ1bmNUb0V4ZWN1dGUoKTsKICAgICAgICAgICAgc2xvdC5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIHNsb3QuZXhlY3V0aW9uRGVmZXJyZWQucmVqZWN0KGVycm9yKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgZXhlY3V0ZU5vbkV4Y2x1c2l2ZVNsb3RzKHNsb3RzKSB7CiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBzbG90cy5tYXAoYXN5bmMgKHNsb3QpID0+IHsKICAgICAgICAgIGF3YWl0IHRoaXMud2FpdEZvck5vbkV4Y2x1c2l2ZVNsb3QoKTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmIChzbG90LnRpbWVvdXQpIHsKICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoWwogICAgICAgICAgICAgICAgc2xvdC5mdW5jVG9FeGVjdXRlKCksCiAgICAgICAgICAgICAgICBkaXN0X3RzX2V4cG9ydHMzLmRlbGF5Rm9yKHNsb3QudGltZW91dCkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVGltZW91dCByZWFjaGVkIik7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgIHNsb3QuZXhlY3V0aW9uRGVmZXJyZWQucmVzb2x2ZShyZXN1bHQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNsb3QuZnVuY1RvRXhlY3V0ZSgpOwogICAgICAgICAgICAgIHNsb3QuZXhlY3V0aW9uRGVmZXJyZWQucmVzb2x2ZShyZXN1bHQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBzbG90LmV4ZWN1dGlvbkRlZmVycmVkLnJlamVjdChlcnJvcik7CiAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICB0aGlzLnJlbGVhc2VOb25FeGNsdXNpdmVTbG90KCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBXYWl0IHVudGlsIGEgbm9uLWV4Y2x1c2l2ZSBzbG90IGlzIGF2YWlsYWJsZSAocmVzcGVjdHMgbWF4IGNvbmN1cnJlbmN5KS4KICAgICAgICovCiAgICAgIHdhaXRGb3JOb25FeGNsdXNpdmVTbG90KCkgewogICAgICAgIGlmICh0aGlzLm5vbkV4Y2x1c2l2ZUN1cnJlbnRDb3VudCA8IHRoaXMubm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3kpIHsKICAgICAgICAgIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50Kys7CiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgICAgICAgIHRoaXMubm9uRXhjbHVzaXZlUGVuZGluZ1F1ZXVlLnB1c2goKCkgPT4gewogICAgICAgICAgICB0aGlzLm5vbkV4Y2x1c2l2ZUN1cnJlbnRDb3VudCsrOwogICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqIFJlbGVhc2UgYSBub24tZXhjbHVzaXZlIHNsb3QgYW5kIHdha2UgdGhlIG5leHQgd2FpdGVyLCBpZiBhbnkuICovCiAgICAgIHJlbGVhc2VOb25FeGNsdXNpdmVTbG90KCkgewogICAgICAgIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50LS07CiAgICAgICAgY29uc3QgbmV4dDIgPSB0aGlzLm5vbkV4Y2x1c2l2ZVBlbmRpbmdRdWV1ZS5zaGlmdCgpOwogICAgICAgIGlmIChuZXh0MikgewogICAgICAgICAgbmV4dDIoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuYmFja3ByZXNzdXJlZGFycmF5LmpzCnZhciBCYWNrcHJlc3N1cmVkQXJyYXk7CnZhciBpbml0X2NsYXNzZXNfYmFja3ByZXNzdXJlZGFycmF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmJhY2twcmVzc3VyZWRhcnJheS5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgQmFja3ByZXNzdXJlZEFycmF5ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihoaWdoV2F0ZXJNYXJrID0gMTYpIHsKICAgICAgICB0aGlzLmhhc1NwYWNlID0gbmV3IGRpc3RfdHNfZXhwb3J0czIucnhqcy5TdWJqZWN0KCk7CiAgICAgICAgdGhpcy5pdGVtc0F2YWlsYWJsZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLnJ4anMuU3ViamVjdCgpOwogICAgICAgIHRoaXMuZGF0YSA9IFtdOwogICAgICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IGhpZ2hXYXRlck1hcms7CiAgICAgIH0KICAgICAgcHVzaChpdGVtKSB7CiAgICAgICAgdGhpcy5kYXRhLnB1c2goaXRlbSk7CiAgICAgICAgdGhpcy5pdGVtc0F2YWlsYWJsZS5uZXh0KCJpdGVtc0F2YWlsYWJsZSIpOwogICAgICAgIGNvbnN0IHNwYWNlQXZhaWxhYmxlID0gdGhpcy5jaGVja1NwYWNlQXZhaWxhYmxlKCk7CiAgICAgICAgaWYgKHNwYWNlQXZhaWxhYmxlKSB7CiAgICAgICAgICB0aGlzLmhhc1NwYWNlLm5leHQoImhhc1NwYWNlIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzcGFjZUF2YWlsYWJsZTsKICAgICAgfQogICAgICBzaGlmdCgpIHsKICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5kYXRhLnNoaWZ0KCk7CiAgICAgICAgaWYgKHRoaXMuY2hlY2tTcGFjZUF2YWlsYWJsZSgpKSB7CiAgICAgICAgICB0aGlzLmhhc1NwYWNlLm5leHQoImhhc1NwYWNlIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpdGVtOwogICAgICB9CiAgICAgIGNoZWNrU3BhY2VBdmFpbGFibGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPCB0aGlzLmhpZ2hXYXRlck1hcms7CiAgICAgIH0KICAgICAgY2hlY2tIYXNJdGVtcygpIHsKICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aCA+IDA7CiAgICAgIH0KICAgICAgd2FpdEZvclNwYWNlKCkgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgICAgICAgIGlmICh0aGlzLmNoZWNrU3BhY2VBdmFpbGFibGUoKSkgewogICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5oYXNTcGFjZS5zdWJzY3JpYmUoKCkgPT4gewogICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgICAgIHJlc29sdmUyKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHdhaXRGb3JJdGVtcygpIHsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgcmVzb2x2ZTIoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuaXRlbXNBdmFpbGFibGUuc3Vic2NyaWJlKCgpID0+IHsKICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5mYXN0bWFwLmpzCnZhciBGYXN0TWFwOwp2YXIgaW5pdF9jbGFzc2VzX2Zhc3RtYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuZmFzdG1hcC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgRmFzdE1hcCA9IGNsYXNzIF9GYXN0TWFwIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5tYXBPYmplY3QgPSB7fTsKICAgICAgfQogICAgICBpc1VuaXF1ZUtleShrZXlBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5tYXBPYmplY3Rba2V5QXJnXSA/IGZhbHNlIDogdHJ1ZTsKICAgICAgfQogICAgICBhZGRUb01hcChrZXlBcmcsIG9iamVjdEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIGlmICh0aGlzLmlzVW5pcXVlS2V5KGtleUFyZykgfHwgb3B0aW9uc0FyZyAmJiBvcHRpb25zQXJnLmZvcmNlKSB7CiAgICAgICAgICB0aGlzLm1hcE9iamVjdFtrZXlBcmddID0gb2JqZWN0QXJnOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZ2V0QnlLZXkoa2V5QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubWFwT2JqZWN0W2tleUFyZ107CiAgICAgIH0KICAgICAgcmVtb3ZlRnJvbU1hcChrZXlBcmcpIHsKICAgICAgICBjb25zdCByZW1vdmVkSXRlbSA9IHRoaXMuZ2V0QnlLZXkoa2V5QXJnKTsKICAgICAgICBkZWxldGUgdGhpcy5tYXBPYmplY3Rba2V5QXJnXTsKICAgICAgICByZXR1cm4gcmVtb3ZlZEl0ZW07CiAgICAgIH0KICAgICAgZ2V0S2V5cygpIHsKICAgICAgICBjb25zdCBrZXlzMiA9IFtdOwogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIGluIHRoaXMubWFwT2JqZWN0KSB7CiAgICAgICAgICBpZiAodGhpcy5tYXBPYmplY3Rba2V5QXJnXSkgewogICAgICAgICAgICBrZXlzMi5wdXNoKGtleUFyZyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBrZXlzMjsKICAgICAgfQogICAgICBjbGVhbigpIHsKICAgICAgICB0aGlzLm1hcE9iamVjdCA9IHt9OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgbmV3IEZhc3RtYXAgdGhhdCBpbmNsdWRlcyBhbGwgdmFsdWVzIGZyb20gdGhpcyBhbmQgYWxsIGZyb20gdGhlIGZhc3RtYXAgaW4gdGhlIGFyZ3VtZW50CiAgICAgICAqLwogICAgICBjb25jYXQoZmFzdE1hcEFyZykgewogICAgICAgIGNvbnN0IGNvbmNhdGVkRmFzdG1hcCA9IG5ldyBfRmFzdE1hcCgpOwogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiB0aGlzLmdldEtleXMoKSkgewogICAgICAgICAgY29uY2F0ZWRGYXN0bWFwLmFkZFRvTWFwKGtleTIsIHRoaXMuZ2V0QnlLZXkoa2V5MikpOwogICAgICAgIH0KICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2YgZmFzdE1hcEFyZy5nZXRLZXlzKCkpIHsKICAgICAgICAgIGNvbmNhdGVkRmFzdG1hcC5hZGRUb01hcChrZXkyLCBmYXN0TWFwQXJnLmdldEJ5S2V5KGtleTIpLCB7CiAgICAgICAgICAgIGZvcmNlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvbmNhdGVkRmFzdG1hcDsKICAgICAgfQogICAgICAvKioKICAgICAgICogdHJpZXMgdG8gbWVyZ2UgYW5vdGhlciBGYXN0bWFwCiAgICAgICAqIE5vdGU6IHVuaXF1ZUtleUNvbGxpc2lvbnMgd2lsbCBjYXVzZSBvdmVyd3JpdGUKICAgICAgICogQHBhcmFtIGZhc3RNYXBBcmcKICAgICAgICovCiAgICAgIGFkZEFsbEZyb21PdGhlcihmYXN0TWFwQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIGZhc3RNYXBBcmcuZ2V0S2V5cygpKSB7CiAgICAgICAgICB0aGlzLmFkZFRvTWFwKGtleTIsIGZhc3RNYXBBcmcuZ2V0QnlLZXkoa2V5MiksIHsKICAgICAgICAgICAgZm9yY2U6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBmaW5kKGZpbmRGdW5jdGlvbkFyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiB0aGlzLmdldEtleXMoKSkgewogICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0QnlLZXkoa2V5Mik7CiAgICAgICAgICBjb25zdCBmaW5kRnVuY3Rpb25SZXN1bHQgPSBhd2FpdCBmaW5kRnVuY3Rpb25BcmcoaXRlbSk7CiAgICAgICAgICBpZiAoZmluZEZ1bmN0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgIHJldHVybiBpdGVtOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5vYmplY3RtYXAuanMKdmFyIHVuaSwgT2JqZWN0TWFwOwp2YXIgaW5pdF9jbGFzc2VzX29iamVjdG1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5vYmplY3RtYXAuanMiKCkgewogICAgaW5pdF9jbGFzc2VzX3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc19mYXN0bWFwKCk7CiAgICB1bmkgPSAocHJlZml4NCA9ICJ1bmkiKSA9PiB7CiAgICAgIHJldHVybiBgJHtwcmVmaXg0fXh4eHh4eHh4eHh4YC5yZXBsYWNlKC9beHldL2csIChjMTEpID0+IHsKICAgICAgICBjb25zdCByMTEgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwOwogICAgICAgIGNvbnN0IHY1ID0gYzExID09PSAieCIgPyByMTEgOiByMTEgJiAzIHwgODsKICAgICAgICByZXR1cm4gdjUudG9TdHJpbmcoMTYpOwogICAgICB9KTsKICAgIH07CiAgICBPYmplY3RNYXAgPSBjbGFzcyBfT2JqZWN0TWFwIHsKICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBuZXcgaW5zdGFuY2UKICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuZmFzdE1hcCA9IG5ldyBGYXN0TWFwKCk7CiAgICAgICAgdGhpcy5ldmVudFN1YmplY3QgPSBuZXcgZGlzdF90c19leHBvcnRzMi5yeGpzLlN1YmplY3QoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkcyBhbiBvYmplY3QgbWFwcGVkIHRvIGEgc3RyaW5nCiAgICAgICAqIHRoZSBzdHJpbmcgbXVzdCBiZSB1bmlxdWUKICAgICAgICovCiAgICAgIGFkZE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXlBcmcsIG9iamVjdEFyZykgewogICAgICAgIHRoaXMuZmFzdE1hcC5hZGRUb01hcCh1bmlxdWVLZXlBcmcsIG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZhc3Rlc3Qgd2F5IHRvIGdldCBhbiBvYmplY3QgZnJvbSB0aGUgbWFwCiAgICAgICAqIEBwYXJhbSB1bmlxdWVLZXkKICAgICAgICovCiAgICAgIGdldE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXlBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5mYXN0TWFwLmdldEJ5S2V5KHVuaXF1ZUtleUFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJlbW92ZSBrZXkKICAgICAgICogQHBhcmFtIGZ1bmN0aW9uQXJnCiAgICAgICAqLwogICAgICByZW1vdmVNYXBwZWRVbmlxdWUodW5pcXVlS2V5KSB7CiAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5nZXRNYXBwZWRVbmlxdWUodW5pcXVlS2V5KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkIG9iamVjdCB0byBPYmplY3RtYXAKICAgICAgICogcmV0dXJucyBmYWxzZSBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgaW4gdGhlIG1hcAogICAgICAgKiByZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5CiAgICAgICAqLwogICAgICBhZGQob2JqZWN0QXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZyk7CiAgICAgICAgICBpZiAob2JqZWN0ID09PSBvYmplY3RBcmcpIHsKICAgICAgICAgICAgcmV0dXJuIGtleUFyZzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgdW5pcXVlS2V5ID0gdW5pKCJrZXkiKTsKICAgICAgICB0aGlzLmFkZE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXksIG9iamVjdEFyZyk7CiAgICAgICAgdGhpcy5ldmVudFN1YmplY3QubmV4dCh7CiAgICAgICAgICBvcGVyYXRpb246ICJhZGQiLAogICAgICAgICAgcGF5bG9hZDogb2JqZWN0QXJnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHVuaXF1ZUtleTsKICAgICAgfQogICAgICAvKioKICAgICAgICogbGlrZSAuYWRkIGJ1dCBhZGRzIGFuIHdob2xlIGFycmF5IG9mIG9iamVjdHMKICAgICAgICovCiAgICAgIGFkZEFycmF5KG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgICB0aGlzLmFkZChpdGVtKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrIGlmIG9iamVjdCBpcyBpbiBPYmplY3RtYXAKICAgICAgICovCiAgICAgIGNoZWNrRm9yT2JqZWN0KG9iamVjdEFyZykgewogICAgICAgIHJldHVybiAhIXRoaXMuZ2V0S2V5Rm9yT2JqZWN0KG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldCBrZXkgZm9yIG9iamVjdAogICAgICAgKiBAcGFyYW0gZmluZEZ1bmN0aW9uCiAgICAgICAqLwogICAgICBnZXRLZXlGb3JPYmplY3Qob2JqZWN0QXJnKSB7CiAgICAgICAgbGV0IGZvdW5kS2V5ID0gbnVsbDsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICBpZiAoIWZvdW5kS2V5ICYmIHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpID09PSBvYmplY3RBcmcpIHsKICAgICAgICAgICAgZm91bmRLZXkgPSBrZXlBcmc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZvdW5kS2V5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBmaW5kIG9iamVjdAogICAgICAgKi8KICAgICAgYXN5bmMgZmluZChmaW5kRnVuY3Rpb24pIHsKICAgICAgICByZXR1cm4gdGhpcy5mYXN0TWFwLmZpbmQoZmluZEZ1bmN0aW9uKTsKICAgICAgfQogICAgICBmaW5kU3luYyhmaW5kRnVuY3Rpb24pIHsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICBpZiAoZmluZEZ1bmN0aW9uKHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpKSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRNYXBwZWRVbmlxdWUoa2V5QXJnKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZpbmRzIGEgc3BlY2lmaWMgZWxlbWVudCBhbmQgdGhlbiByZW1vdmVzIGl0CiAgICAgICAqLwogICAgICBhc3luYyBmaW5kT25lQW5kUmVtb3ZlKGZpbmRGdW5jdGlvbikgewogICAgICAgIGNvbnN0IGZvdW5kRWxlbWVudCA9IGF3YWl0IHRoaXMuZmluZChmaW5kRnVuY3Rpb24pOwogICAgICAgIGlmIChmb3VuZEVsZW1lbnQpIHsKICAgICAgICAgIHRoaXMucmVtb3ZlKGZvdW5kRWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3VuZEVsZW1lbnQ7CiAgICAgIH0KICAgICAgZmluZE9uZUFuZFJlbW92ZVN5bmMoZmluZEZ1bmN0aW9uKSB7CiAgICAgICAgY29uc3QgZm91bmRFbGVtZW50ID0gdGhpcy5maW5kU3luYyhmaW5kRnVuY3Rpb24pOwogICAgICAgIGlmIChmb3VuZEVsZW1lbnQpIHsKICAgICAgICAgIHRoaXMucmVtb3ZlKGZvdW5kRWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3VuZEVsZW1lbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJ1biBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtIGluIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgYXN5bmMgZm9yRWFjaChmdW5jdGlvbkFyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIGF3YWl0IGZ1bmN0aW9uQXJnKHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldHMgYW4gb2JqZWN0IGluIHRoZSBPYnNlcnZhYmxlbWFwIGFuZCByZW1vdmVzIGl0LCBzbyBpdCBjYW4ndCBiZSByZXRyaWV2ZWQgYWdhaW4KICAgICAgICovCiAgICAgIGdldE9uZUFuZFJlbW92ZSgpIHsKICAgICAgICBjb25zdCBrZXlzMiA9IHRoaXMuZmFzdE1hcC5nZXRLZXlzKCk7CiAgICAgICAgaWYgKGtleXMyLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGtleVRvVXNlID0ga2V5czJbMF07CiAgICAgICAgICBjb25zdCByZW1vdmVkSXRlbSA9IHRoaXMuZmFzdE1hcC5yZW1vdmVGcm9tTWFwKGtleVRvVXNlKTsKICAgICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoewogICAgICAgICAgICBvcGVyYXRpb246ICJyZW1vdmUiLAogICAgICAgICAgICBwYXlsb2FkOiByZW1vdmVkSXRlbQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gcmVtb3ZlZEl0ZW07CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgY2xvbmVkIGFycmF5IG9mIGFsbCB0aGUgb2JqZWN0cyBjdXJyZW50bHkgaW4gdGhlIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgZ2V0QXJyYXkoKSB7CiAgICAgICAgY29uc3QgcmV0dXJuQXJyYXkgPSBbXTsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICByZXR1cm5BcnJheS5wdXNoKHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldHVybkFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVjayBpZiBPYmplY3RtYXAgaXN0IGVtcHR5CiAgICAgICAqLwogICAgICBpc0VtcHR5KCkgewogICAgICAgIHJldHVybiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpLmxlbmd0aCA9PT0gMDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVtb3ZlIG9iamVjdCBmcm9tIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgcmVtb3ZlKG9iamVjdEFyZykgewogICAgICAgIGlmICh0aGlzLmNoZWNrRm9yT2JqZWN0KG9iamVjdEFyZykpIHsKICAgICAgICAgIGNvbnN0IGtleUFyZyA9IHRoaXMuZ2V0S2V5Rm9yT2JqZWN0KG9iamVjdEFyZyk7CiAgICAgICAgICBjb25zdCByZW1vdmVkT2JqZWN0ID0gdGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoa2V5QXJnKTsKICAgICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoewogICAgICAgICAgICBvcGVyYXRpb246ICJyZW1vdmUiLAogICAgICAgICAgICBwYXlsb2FkOiByZW1vdmVkT2JqZWN0CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiByZW1vdmVkT2JqZWN0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICAvKioKICAgICAgICogd2lwZSBPYmplY3RtYXAKICAgICAgICovCiAgICAgIHdpcGUoKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgdGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoa2V5QXJnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBuZXcgT2JqZWN0bWFwIHRoYXQgaW5jbHVkZXMKICAgICAgICovCiAgICAgIGNvbmNhdChvYmplY3RNYXBBcmcpIHsKICAgICAgICBjb25zdCBjb25jYXR0ZWRPYmplY3RNYXAgPSBuZXcgX09iamVjdE1hcCgpOwogICAgICAgIGNvbmNhdHRlZE9iamVjdE1hcC5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcih0aGlzLmZhc3RNYXApOwogICAgICAgIGNvbmNhdHRlZE9iamVjdE1hcC5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcihvYmplY3RNYXBBcmcuZmFzdE1hcCk7CiAgICAgICAgcmV0dXJuIGNvbmNhdHRlZE9iamVjdE1hcDsKICAgICAgfQogICAgICAvKioKICAgICAgICogdHJpZXMgdG8gbWVyZ2UgYW5vdGhlciBPYmplY3RtYXAKICAgICAgICogTm90ZTogdW5pcXVlS2V5Q29sbGlzaW9ucyB3aWxsIGNhdXNlIG92ZXJ3cml0ZQogICAgICAgKiBAcGFyYW0gb2JqZWN0TWFwQXJnCiAgICAgICAqLwogICAgICBhZGRBbGxGcm9tT3RoZXIob2JqZWN0TWFwQXJnKSB7CiAgICAgICAgdGhpcy5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcihvYmplY3RNYXBBcmcuZmFzdE1hcCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuaW50ZXJlc3RtYXAuaW50ZXJlc3QuanMKdmFyIEludGVyZXN0Owp2YXIgaW5pdF9jbGFzc2VzX2ludGVyZXN0bWFwX2ludGVyZXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmludGVyZXN0bWFwLmludGVyZXN0LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBpbml0X2NsYXNzZXNfaW50ZXJlc3RtYXAoKTsKICAgIEludGVyZXN0ID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogcXVpY2sgYWNjZXNzIHRvIGEgc3RyaW5nIHRoYXQgbWFrZXMgdGhlIGludGVyZXN0IGNvbXBhcmFibGUgZm9yIGNoZWNraW5nIGZvciBzaW1pbGFyIGludGVyZXN0cwogICAgICAgKi8KICAgICAgZ2V0IGNvbXBhcmlzb25TdHJpbmcoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyaXNvbkZ1bmModGhpcy5vcmlnaW5hbEludGVyZXN0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZnVsbGZpbGwgdGhlIGludGVyZXN0CiAgICAgICAqLwogICAgICBmdWxsZmlsbEludGVyZXN0KG9iamVjdEFyZykgewogICAgICAgIHRoaXMuaXNGdWxsZmlsbGVkID0gdHJ1ZTsKICAgICAgICB0aGlzLmZ1bGxmaWxsbWVudFN0b3JlID0gW107CiAgICAgICAgdGhpcy5pbnRlcmVzdERlZmVycmVkLnJlc29sdmUob2JqZWN0QXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICoKICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKGludGVyZXN0TWFwQXJnLCBpbnRlcmVzdEFyZywgY29tcGFyaXNvbkZ1bmNBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICB0aGlzLmRlc3RydWN0aW9uVGltZXIgPSBuZXcgZGlzdF90c19leHBvcnRzNy5UaW1lcigxZTQpOwogICAgICAgIHRoaXMuaXNGdWxsZmlsbGVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5mdWxsZmlsbG1lbnRTdG9yZSA9IFtdOwogICAgICAgIHRoaXMuaW50ZXJlc3REZWZlcnJlZCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMuRGVmZXJyZWQoKTsKICAgICAgICB0aGlzLmludGVyZXN0RnVsbGZpbGxlZCA9IHRoaXMuaW50ZXJlc3REZWZlcnJlZC5wcm9taXNlOwogICAgICAgIHRoaXMuaW50ZXJlc3RNYXBSZWYgPSBpbnRlcmVzdE1hcEFyZzsKICAgICAgICB0aGlzLm9yaWdpbmFsSW50ZXJlc3QgPSBpbnRlcmVzdEFyZzsKICAgICAgICB0aGlzLmNvbXBhcmlzb25GdW5jID0gY29tcGFyaXNvbkZ1bmNBcmc7CiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZzsKICAgICAgICB0aGlzLmRlc3RydWN0aW9uVGltZXIuY29tcGxldGVkLnRoZW4oKCkgPT4gewogICAgICAgICAgdGhpcy5kZXN0cm95KCk7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucz8ubWFya0xvc3RBZnRlckRlZmF1bHQpIHsKICAgICAgICAgIGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3IodGhpcy5vcHRpb25zLm1hcmtMb3N0QWZ0ZXJEZWZhdWx0KS50aGVuKHRoaXMubWFya0xvc3QpOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIC8vIExJRkVDWUNMRSBNQU5BR0VNRU5UCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgLyoqCiAgICAgICAqIHNlbGYgZGVzdHJ1Y3RzIHRoZSBpbnRlcmVzdAogICAgICAgKi8KICAgICAgZGVzdHJveSgpIHsKICAgICAgICB0aGlzLmludGVyZXN0TWFwUmVmLnJlbW92ZUludGVyZXN0KHRoaXMpOwogICAgICAgIGlmICghdGhpcy5pc0Z1bGxmaWxsZWQgJiYgdGhpcy5vcHRpb25zLmRlZmF1bHRGdWxsZmlsbG1lbnQpIHsKICAgICAgICAgIHRoaXMuZnVsbGZpbGxJbnRlcmVzdCh0aGlzLm9wdGlvbnMuZGVmYXVsdEZ1bGxmaWxsbWVudCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBub3RpZmllcyB0aGUgaW50ZXJlc3QgdGhhdCB0aGUgaW50ZXJlc3QgaW4gaXQgaGFzIGJlZW4gbG9zdAogICAgICAgKi8KICAgICAgbWFya0xvc3QoKSB7CiAgICAgICAgdGhpcy5kZXN0cnVjdGlvblRpbWVyLnN0YXJ0KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIG5vdGlmaWVzIHRoZSBpbnRlcmVzdCB0aGF0IHRoZSBpbnRlcmVzdCBpbiBpdCBoYXMgYmVlbiByZXN0b3JlZAogICAgICAgKi8KICAgICAgcmVuZXcoKSB7CiAgICAgICAgdGhpcy5kZXN0cnVjdGlvblRpbWVyLnJlc2V0KCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuaW50ZXJlc3RtYXAuanMKdmFyIEludGVyZXN0TWFwOwp2YXIgaW5pdF9jbGFzc2VzX2ludGVyZXN0bWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmludGVyZXN0bWFwLmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBpbml0X2NsYXNzZXNfb2JqZWN0bWFwKCk7CiAgICBpbml0X2NsYXNzZXNfaW50ZXJlc3RtYXBfaW50ZXJlc3QoKTsKICAgIEludGVyZXN0TWFwID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcihjb21wYXJpc29uRnVuY0FyZywgb3B0aW9uc0FyZyA9IHt9KSB7CiAgICAgICAgdGhpcy5pbnRlcmVzdE9iamVjdE1hcCA9IG5ldyBPYmplY3RNYXAoKTsKICAgICAgICB0aGlzLmludGVyZXN0T2JzZXJ2YWJsZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLk9ic2VydmFibGVJbnRha2UoKTsKICAgICAgICB0aGlzLmNvbXBhcmlzb25GdW5jID0gY29tcGFyaXNvbkZ1bmNBcmc7CiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZzsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkcyBhbiBpbnRlcmVzdCB0byB0aGUgSW50ZXJlc3RNYXAKICAgICAgICogQHBhcmFtIGludGVyZXN0SWQKICAgICAgICovCiAgICAgIGFzeW5jIGFkZEludGVyZXN0KGludGVyZXN0SWQsIGRlZmF1bHRGdWxsZmlsbG1lbnRBcmcpIHsKICAgICAgICBjb25zdCBjb21wYXJpc29uU3RyaW5nID0gdGhpcy5jb21wYXJpc29uRnVuYyhpbnRlcmVzdElkKTsKICAgICAgICBsZXQgcmV0dXJuSW50ZXJlc3Q7CiAgICAgICAgY29uc3QgbmV3SW50ZXJlc3QgPSBuZXcgSW50ZXJlc3QodGhpcywgaW50ZXJlc3RJZCwgdGhpcy5jb21wYXJpc29uRnVuYywgewogICAgICAgICAgbWFya0xvc3RBZnRlckRlZmF1bHQ6IHRoaXMub3B0aW9ucy5tYXJrTG9zdEFmdGVyRGVmYXVsdCwKICAgICAgICAgIGRlZmF1bHRGdWxsZmlsbG1lbnQ6IGRlZmF1bHRGdWxsZmlsbG1lbnRBcmcKICAgICAgICB9KTsKICAgICAgICBsZXQgaW50ZXJlc3RFeGlzdHMgPSBmYWxzZTsKICAgICAgICBhd2FpdCB0aGlzLmludGVyZXN0T2JqZWN0TWFwLmZvckVhY2goKGludGVyZXN0QXJnKSA9PiB7CiAgICAgICAgICBpZiAoIWludGVyZXN0RXhpc3RzICYmIGludGVyZXN0QXJnLmNvbXBhcmlzb25TdHJpbmcgPT09IG5ld0ludGVyZXN0LmNvbXBhcmlzb25TdHJpbmcpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coImluZm8iLCBgaW50ZXJlc3QgYWxyZWFkeSBleGlzdHMgZm9yICR7bmV3SW50ZXJlc3QuY29tcGFyaXNvblN0cmluZ31gKTsKICAgICAgICAgICAgaW50ZXJlc3RFeGlzdHMgPSB0cnVlOwogICAgICAgICAgICByZXR1cm5JbnRlcmVzdCA9IGludGVyZXN0QXJnOwogICAgICAgICAgICByZXR1cm5JbnRlcmVzdC5yZW5ldygpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICghcmV0dXJuSW50ZXJlc3QpIHsKICAgICAgICAgIHJldHVybkludGVyZXN0ID0gbmV3SW50ZXJlc3Q7CiAgICAgICAgICB0aGlzLmludGVyZXN0T2JqZWN0TWFwLmFkZChyZXR1cm5JbnRlcmVzdCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuaW50ZXJlc3RPYnNlcnZhYmxlLnB1c2gocmV0dXJuSW50ZXJlc3QpOwogICAgICAgIHJldHVybiByZXR1cm5JbnRlcmVzdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVtb3ZlcyBhbiBpbnRlcmVzdCBmcm9tIHRoZSBpbnRlcmVzdCBtYXAKICAgICAgICovCiAgICAgIHJlbW92ZUludGVyZXN0KGludGVyZXN0QXJnKSB7CiAgICAgICAgY29uc3QgaW50ZXJlc3RUb1JlbW92ZSA9IHRoaXMuaW50ZXJlc3RPYmplY3RNYXAuZmluZE9uZUFuZFJlbW92ZVN5bmMoKGludGVyZXN0QXJnMikgPT4gewogICAgICAgICAgcmV0dXJuIGludGVyZXN0QXJnLmNvbXBhcmlzb25TdHJpbmcgPT09IGludGVyZXN0QXJnMi5jb21wYXJpc29uU3RyaW5nOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVjayBpbnRlcmVzdAogICAgICAgKi8KICAgICAgY2hlY2tJbnRlcmVzdChvYmplY3RBcmcpIHsKICAgICAgICBjb25zdCBjb21wYXJpc29uU3RyaW5nID0gdGhpcy5jb21wYXJpc29uRnVuYyhvYmplY3RBcmcpOwogICAgICAgIHJldHVybiB0aGlzLmNoZWNrSW50ZXJlc3RCeVN0cmluZyhjb21wYXJpc29uU3RyaW5nKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIGFuIGludGVyZXN0CiAgICAgICAqIEBwYXJhbSBjb21wYXJpc29uU3RyaW5nQXJnCiAgICAgICAqLwogICAgICBjaGVja0ludGVyZXN0QnlTdHJpbmcoY29tcGFyaXNvblN0cmluZ0FyZykgewogICAgICAgIGNvbnN0IGZvdW5kSW50ZXJlc3QgPSB0aGlzLmludGVyZXN0T2JqZWN0TWFwLmZpbmRTeW5jKChpbnRlcmVzdCkgPT4gewogICAgICAgICAgcmV0dXJuIGludGVyZXN0LmNvbXBhcmlzb25TdHJpbmcgPT09IGNvbXBhcmlzb25TdHJpbmdBcmc7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGZvdW5kSW50ZXJlc3QpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBpbmZvcm0gbG9zdCBpbnRlcmVzdAogICAgICAgKiBAcGFyYW0gaW50ZXJlc3RJZAogICAgICAgKi8KICAgICAgaW5mb3JtTG9zdEludGVyZXN0KGludGVyZXN0SWQpIHsKICAgICAgICBjb25zdCB3YW50ZWRJbnRlcmVzdCA9IHRoaXMuZmluZEludGVyZXN0KGludGVyZXN0SWQpOwogICAgICAgIGlmICh3YW50ZWRJbnRlcmVzdCkgewogICAgICAgICAgd2FudGVkSW50ZXJlc3QubWFya0xvc3QoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZpbmRzIGFuIGludGVyZXN0CiAgICAgICAqIEBwYXJhbSBpbnRlcmVzdElkCiAgICAgICAqLwogICAgICBmaW5kSW50ZXJlc3QoaW50ZXJlc3RJZCkgewogICAgICAgIGNvbnN0IGNvbXBhcmFibGVTdHJpbmcgPSB0aGlzLmNvbXBhcmlzb25GdW5jKGludGVyZXN0SWQpOwogICAgICAgIGNvbnN0IGludGVyZXN0ID0gdGhpcy5pbnRlcmVzdE9iamVjdE1hcC5maW5kU3luYygoaW50ZXJlc3RBcmcpID0+IHsKICAgICAgICAgIHJldHVybiBpbnRlcmVzdEFyZy5jb21wYXJpc29uU3RyaW5nID09PSBjb21wYXJhYmxlU3RyaW5nOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBpbnRlcmVzdDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5saW1pdGVkYXJyYXkuanMKdmFyIExpbWl0ZWRBcnJheTsKdmFyIGluaXRfY2xhc3Nlc19saW1pdGVkYXJyYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMubGltaXRlZGFycmF5LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBMaW1pdGVkQXJyYXkgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGxpbWl0QXJnKSB7CiAgICAgICAgdGhpcy5hcnJheSA9IFtdOwogICAgICAgIHRoaXMuYXJyYXlMaW1pdCA9IGxpbWl0QXJnOwogICAgICB9CiAgICAgIGFkZE9uZShvYmplY3RBcmcpIHsKICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQob2JqZWN0QXJnKTsKICAgICAgICBpZiAodGhpcy5hcnJheS5sZW5ndGggPiB0aGlzLmFycmF5TGltaXQpIHsKICAgICAgICAgIHRoaXMuYXJyYXkubGVuZ3RoID0gdGhpcy5hcnJheUxpbWl0OwogICAgICAgIH0KICAgICAgfQogICAgICBhZGRNYW55KG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgZm9yIChsZXQgb2JqZWN0QXJnIG9mIG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgICB0aGlzLmFkZE9uZShvYmplY3RBcmcpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXRMaW1pdChsaW1pdEFyZykgewogICAgICAgIHRoaXMuYXJyYXlMaW1pdCA9IGxpbWl0QXJnOwogICAgICAgIGlmICh0aGlzLmFycmF5Lmxlbmd0aCA+IHRoaXMuYXJyYXlMaW1pdCkgewogICAgICAgICAgdGhpcy5hcnJheS5sZW5ndGggPSB0aGlzLmFycmF5TGltaXQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldEF2ZXJhZ2UoKSB7CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFycmF5WzBdID09PSAibnVtYmVyIikgewogICAgICAgICAgbGV0IHN1bSA9IDA7CiAgICAgICAgICBmb3IgKGxldCBsb2NhbE51bWJlciBvZiB0aGlzLmFycmF5KSB7CiAgICAgICAgICAgIGxldCBsb2NhbE51bWJlckFueSA9IGxvY2FsTnVtYmVyOwogICAgICAgICAgICBzdW0gPSBzdW0gKyBsb2NhbE51bWJlckFueTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBzdW0gLyB0aGlzLmFycmF5Lmxlbmd0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmxvb3B0cmFja2VyLmpzCnZhciBMb29wVHJhY2tlcjsKdmFyIGluaXRfY2xhc3Nlc19sb29wdHJhY2tlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5sb29wdHJhY2tlci5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgaW5pdF9jbGFzc2VzX29iamVjdG1hcCgpOwogICAgTG9vcFRyYWNrZXIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMucmVmZXJlbmNlT2JqZWN0TWFwID0gbmV3IE9iamVjdE1hcCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVja3MgYW5kIHRyYWNrcyBhbiBvYmplY3QKICAgICAgICogQHBhcmFtIG9iamVjdEFyZwogICAgICAgKi8KICAgICAgY2hlY2tBbmRUcmFjayhvYmplY3RBcmcpIHsKICAgICAgICBpZiAoIXRoaXMucmVmZXJlbmNlT2JqZWN0TWFwLmNoZWNrRm9yT2JqZWN0KG9iamVjdEFyZykpIHsKICAgICAgICAgIHRoaXMucmVmZXJlbmNlT2JqZWN0TWFwLmFkZChvYmplY3RBcmcpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuc3RyaW5nbWFwLmpzCnZhciBTdHJpbmdtYXA7CnZhciBpbml0X2NsYXNzZXNfc3RyaW5nbWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnN0cmluZ21hcC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgU3RyaW5nbWFwID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLl9zdHJpbmdBcnJheSA9IFtdOwogICAgICAgIHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5ID0gW107CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFkZCBhIHN0cmluZyB0byB0aGUgU3RyaW5nbWFwCiAgICAgICAqLwogICAgICBhZGRTdHJpbmcoc3RyaW5nQXJnKSB7CiAgICAgICAgdGhpcy5fc3RyaW5nQXJyYXkucHVzaChzdHJpbmdBcmcpOwogICAgICAgIHRoaXMubm90aWZ5VHJpZ2dlcigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBsaWtlIGFkZFN0cmluZywgYnV0IGFjY2VwdHMgYW4gYXJyYXkgb2Ygc3RyaW5ncwogICAgICAgKi8KICAgICAgYWRkU3RyaW5nQXJyYXkoc3RyaW5nQXJyYXlBcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IHN0cmluZ0l0ZW0gb2Ygc3RyaW5nQXJyYXlBcmcpIHsKICAgICAgICAgIHRoaXMuYWRkU3RyaW5nKHN0cmluZ0l0ZW0pOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogcmVtb3ZlcyBhIHN0cmluZyBmcm9tIFN0cmluZ21hcAogICAgICAgKi8KICAgICAgcmVtb3ZlU3RyaW5nKHN0cmluZ0FyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIGluIHRoaXMuX3N0cmluZ0FycmF5KSB7CiAgICAgICAgICBpZiAodGhpcy5fc3RyaW5nQXJyYXlba2V5QXJnXSA9PT0gc3RyaW5nQXJnKSB7CiAgICAgICAgICAgIHRoaXMuX3N0cmluZ0FycmF5LnNwbGljZShwYXJzZUludChrZXlBcmcpLCAxKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5ub3RpZnlUcmlnZ2VyKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHdpcGVzIHRoZSBTdHJpbmdtYXAKICAgICAgICovCiAgICAgIHdpcGUoKSB7CiAgICAgICAgdGhpcy5fc3RyaW5nQXJyYXkgPSBbXTsKICAgICAgICB0aGlzLm5vdGlmeVRyaWdnZXIoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2sgaWYgc3RyaW5nIGlzIGluIFN0cmluZ21hcAogICAgICAgKi8KICAgICAgY2hlY2tTdHJpbmcoc3RyaW5nQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmluZ0FycmF5LmluZGV4T2Yoc3RyaW5nQXJnKSAhPT0gLTE7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrcyBzdHJpbmdQcmVzZW5jZSB3aXRoIG1pbmltYXRjaAogICAgICAgKi8KICAgICAgY2hlY2tNaW5pbWF0Y2gobWluaU1hdGNoU3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3Qgc21hcnRNYXRjaEluc3RhbmNlID0gbmV3IGRpc3RfdHNfZXhwb3J0czUuU21hcnRNYXRjaChtaW5pTWF0Y2hTdHJpbmdBcmcpOwogICAgICAgIGxldCBmb3VuZE1hdGNoID0gZmFsc2U7CiAgICAgICAgZm9yIChjb25zdCBzdHJpbmdJdGVtIG9mIHRoaXMuX3N0cmluZ0FycmF5KSB7CiAgICAgICAgICBpZiAoc21hcnRNYXRjaEluc3RhbmNlLm1hdGNoKHN0cmluZ0l0ZW0pKSB7CiAgICAgICAgICAgIGZvdW5kTWF0Y2ggPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZm91bmRNYXRjaDsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIGlmIHRoZSBTdHJpbmdtYXAgaXMgZW1wdHkKICAgICAgICovCiAgICAgIGNoZWNrSXNFbXB0eSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RyaW5nQXJyYXkubGVuZ3RoID09PSAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBnZXRzIGEgY2xvbmVkIGNvcHkgb2YgdGhlIGN1cnJlbnQgc3RyaW5nIEFycmF5CiAgICAgICAqLwogICAgICBnZXRTdHJpbmdBcnJheSgpIHsKICAgICAgICBjb25zdCByZXR1cm5BcnJheSA9IFtdOwogICAgICAgIGZvciAoY29uc3Qgc3RyaW5nSXRlbSBvZiB0aGlzLl9zdHJpbmdBcnJheSkgewogICAgICAgICAgcmV0dXJuQXJyYXkucHVzaChzdHJpbmdJdGVtKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldHVybkFycmF5OwogICAgICB9CiAgICAgIC8vIHRyaWdnZXIgcmVnaXN0ZXJpbmcKICAgICAgLyoqCiAgICAgICAqIHJlZ2lzdGVyIGEgbmV3IHRyaWdnZXIKICAgICAgICovCiAgICAgIHJlZ2lzdGVyVW50aWxUcnVlKGZ1bmN0aW9uQXJnLCBjYWxsYmFja0FyZykgewogICAgICAgIGNvbnN0IHRydWVEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5LnB1c2goKCkgPT4gewogICAgICAgICAgY29uc3QgcmVzdWx0ID0gZnVuY3Rpb25BcmcodGhpcy5nZXRTdHJpbmdBcnJheSgpKTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHsKICAgICAgICAgICAgaWYgKGNhbGxiYWNrQXJnKSB7CiAgICAgICAgICAgICAgY2FsbGJhY2tBcmcoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0cnVlRGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9KTsKICAgICAgICB0aGlzLm5vdGlmeVRyaWdnZXIoKTsKICAgICAgICByZXR1cm4gdHJ1ZURlZmVycmVkLnByb21pc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIG5vdGlmaWVzIHRyaWdnZXJzCiAgICAgICAqLwogICAgICBub3RpZnlUcmlnZ2VyKCkgewogICAgICAgIGNvbnN0IGZpbHRlcmVkQXJyYXkgPSB0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheS5maWx0ZXIoKGZ1bmN0aW9uQXJnKSA9PiB7CiAgICAgICAgICByZXR1cm4gIWZ1bmN0aW9uQXJnKCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXkgPSBmaWx0ZXJlZEFycmF5OwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnRpbWVkYWdncmVnYXRvci5qcwp2YXIgVGltZWRBZ2dyZWd0b3I7CnZhciBpbml0X2NsYXNzZXNfdGltZWRhZ2dyZWdhdG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnRpbWVkYWdncmVnYXRvci5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgVGltZWRBZ2dyZWd0b3IgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmcpIHsKICAgICAgICB0aGlzLnN0b3JhZ2VBcnJheSA9IFtdOwogICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNBcmc7CiAgICAgIH0KICAgICAgY2hlY2tBZ2dyZWdhdGlvblN0YXR1cygpIHsKICAgICAgICBjb25zdCBhZGRBZ2dyZWdhdGlvblRpbWVyID0gKCkgPT4gewogICAgICAgICAgdGhpcy5hZ2dyZWdhdGlvblRpbWVyID0gbmV3IGRpc3RfdHNfZXhwb3J0czcuVGltZXIodGhpcy5vcHRpb25zLmFnZ3JlZ2F0aW9uSW50ZXJ2YWxJbk1pbGxpcyk7CiAgICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9uVGltZXIuY29tcGxldGVkLnRoZW4oKCkgPT4gewogICAgICAgICAgICBjb25zdCBhZ2dyZWdhdGVGb3JQcm9jZXNzaW5nID0gdGhpcy5zdG9yYWdlQXJyYXk7CiAgICAgICAgICAgIGlmIChhZ2dyZWdhdGVGb3JQcm9jZXNzaW5nLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgIHRoaXMuYWdncmVnYXRpb25UaW1lciA9IG51bGw7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuc3RvcmFnZUFycmF5ID0gW107CiAgICAgICAgICAgIGFkZEFnZ3JlZ2F0aW9uVGltZXIoKTsKICAgICAgICAgICAgdGhpcy5vcHRpb25zLmZ1bmN0aW9uRm9yQWdncmVnYXRpb24oYWdncmVnYXRlRm9yUHJvY2Vzc2luZyk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuYWdncmVnYXRpb25UaW1lci5zdGFydCgpOwogICAgICAgIH07CiAgICAgICAgaWYgKCF0aGlzLmFnZ3JlZ2F0aW9uVGltZXIpIHsKICAgICAgICAgIGFkZEFnZ3JlZ2F0aW9uVGltZXIoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYWRkKGFnZ3JlZ2F0aW9uQXJnKSB7CiAgICAgICAgdGhpcy5zdG9yYWdlQXJyYXkucHVzaChhZ2dyZWdhdGlvbkFyZyk7CiAgICAgICAgdGhpcy5jaGVja0FnZ3JlZ2F0aW9uU3RhdHVzKCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMudHJlZS5qcwp2YXIgVHJlZTsKdmFyIGluaXRfY2xhc3Nlc190cmVlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnRyZWUuanMiKCkgewogICAgaW5pdF9jbGFzc2VzX3BsdWdpbnMoKTsKICAgIFRyZWUgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuc3ltYm9sVHJlZSA9IG5ldyBpbXBvcnRfc3ltYm9sX3RyZWUuZGVmYXVsdCgpOwogICAgICB9CiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAvLyBGdW5jdGlvbnMgdGhhdCBtYXAgdG8gdGhlIGZ1bmN0aW9uYWxpdHkgb2Ygc3ltYm9sLXRyZWUKICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIC8qKgogICAgICAgKgogICAgICAgKiBAcGFyYW0gb2JqZWN0QXJnCiAgICAgICAqLwogICAgICBpbml0aWFsaXplKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuaW5pdGlhbGl6ZShvYmplY3RBcmcpOwogICAgICB9CiAgICAgIGhhc0NoaWxkcmVuKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuaGFzQ2hpbGRyZW4ob2JqZWN0QXJnKTsKICAgICAgfQogICAgICBmaXJzdENoaWxkKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuZmlyc3RDaGlsZChvYmplY3RBcmcpOwogICAgICB9CiAgICAgIGxhc3RDaGlsZChvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmxhc3RDaGlsZChvYmplY3RBcmcpOwogICAgICB9CiAgICAgIHByZXZpb3VzU2libGluZyhvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnByZXZpb3VzU2libGluZyhvYmplY3RBcmcpOwogICAgICB9CiAgICAgIG5leHRTaWJsaW5nKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUubmV4dFNpYmxpbmcob2JqZWN0QXJnKTsKICAgICAgfQogICAgICBwYXJlbnQob2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5wYXJlbnQob2JqZWN0QXJnKTsKICAgICAgfQogICAgICBsYXN0SW5jbHVzaXZlRGVzY2VuZGFudChvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgcHJlY2VkaW5nKG9iamVjdEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUucHJlY2VkaW5nKG9iamVjdEFyZywgb3B0aW9uc0FyZyk7CiAgICAgIH0KICAgICAgZm9sbG93aW5nKG9iamVjdCwgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuZm9sbG93aW5nKG9iamVjdCwgb3B0aW9uc0FyZyk7CiAgICAgIH0KICAgICAgY2hpbGRyZW5Ub0FycmF5KHBhcmVudEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuY2hpbGRyZW5Ub0FycmF5KHBhcmVudEFyZywgb3B0aW9uc0FyZyk7CiAgICAgIH0KICAgICAgYW5jZXN0b3JzVG9BcnJheShvYmplY3RBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmFuY2VzdG9yc1RvQXJyYXkob2JqZWN0QXJnLCBvcHRpb25zQXJnKTsKICAgICAgfQogICAgICB0cmVlVG9BcnJheShyb290QXJnLCBvcHRpb25zQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS50cmVlVG9BcnJheShyb290QXJnLCBvcHRpb25zQXJnKTsKICAgICAgfQogICAgICBjaGlsZHJlbkl0ZXJhdG9yKHBhcmVudEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcihwYXJlbnRBcmcsIG9wdGlvbnNBcmcpOwogICAgICB9CiAgICAgIHByZXZpb3VzU2libGluZ3NJdGVyYXRvcihvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnByZXZpb3VzU2libGluZ3NJdGVyYXRvcihvYmplY3RBcmcpOwogICAgICB9CiAgICAgIG5leHRTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUubmV4dFNpYmxpbmdzSXRlcmF0b3IoKTsKICAgICAgfQogICAgICBhbmNlc3RvcnNJdGVyYXRvcihvYmplY3RBcmcpIHsKICAgICAgICB0aGlzLnN5bWJvbFRyZWUuYW5jZXN0b3JzSXRlcmF0b3IoKTsKICAgICAgfQogICAgICB0cmVlSXRlcmF0b3Iocm9vdEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUudHJlZUl0ZXJhdG9yKHJvb3RBcmcpOwogICAgICB9CiAgICAgIGluZGV4KGNoaWxkQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbmRleChjaGlsZEFyZyk7CiAgICAgIH0KICAgICAgY2hpbGRyZW5Db3VudChwYXJlbnRBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmNoaWxkcmVuQ291bnQocGFyZW50QXJnKTsKICAgICAgfQogICAgICBjb21wYXJlVHJlZVBvc2l0aW9uKGxlZnRBcmcsIHJpZ2h0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZVRyZWVQb3NpdGlvbihsZWZ0QXJnLCByaWdodEFyZyk7CiAgICAgIH0KICAgICAgcmVtb3ZlKHJlbW92ZU9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUucmVtb3ZlKHJlbW92ZU9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgaW5zZXJ0QmVmb3JlKHJlZmVyZW5jZU9iamVjdEFyZywgbmV3T2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbnNlcnRCZWZvcmUocmVmZXJlbmNlT2JqZWN0QXJnLCBuZXdPYmplY3RBcmcpOwogICAgICB9CiAgICAgIGluc2VydEFmdGVyKHJlZmVyZW5jZU9iamVjdCwgbmV3T2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbnNlcnRBZnRlcihyZWZlcmVuY2VPYmplY3QsIG5ld09iamVjdEFyZyk7CiAgICAgIH0KICAgICAgcHJlcGVuZENoaWxkKHJlZmVyZW5jZU9iamVjdEFyZywgbmV3T2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5wcmVwZW5kQ2hpbGQocmVmZXJlbmNlT2JqZWN0QXJnLCBuZXdPYmplY3RBcmcpOwogICAgICB9CiAgICAgIGFwcGVuZENoaWxkKHJlZmVyZW5jZU9iamVjdEFyZywgbmV3T2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5hcHBlbmRDaGlsZChyZWZlcmVuY2VPYmplY3RBcmcsIG5ld09iamVjdEFyZyk7CiAgICAgIH0KICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAvLyBGdW5jdGlvbmlvbmFsaXR5IHRoYXQgZXh0ZW5kcyBzeW1ib2wtdHJlZQogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgYnJhbmNoIG9mIHRoZSB0cmVlIGFzIEpTT04KICAgICAgICogY2FuIGJlIHVzZXIKICAgICAgICovCiAgICAgIHRvSnNvbldpdGhIaWVyYWNoeShyb290RWxlbWVudCkgewogICAgICAgIGNvbnN0IHRyZWVJdGVyYWJsZSA9IHRoaXMudHJlZUl0ZXJhdG9yKHJvb3RFbGVtZW50LCB7fSk7CiAgICAgICAgZm9yIChjb25zdCB0cmVlSXRlbSBvZiB0cmVlSXRlcmFibGUpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKHRyZWVJdGVtKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGJ1aWxkcyBhIHRyZWUgZnJvbSBhIEpTT04gd2l0aCBoaWVyYWNoeQogICAgICAgKiBAcGFyYW0gcm9vdEVsZW1lbnQKICAgICAgICovCiAgICAgIGZyb21Kc29uV2l0aEhpZXJhY2h5KHJvb3RFbGVtZW50KSB7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHM2ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czYsIHsKICBBc3luY0V4ZWN1dGlvblN0YWNrOiAoKSA9PiBBc3luY0V4ZWN1dGlvblN0YWNrLAogIEJhY2twcmVzc3VyZWRBcnJheTogKCkgPT4gQmFja3ByZXNzdXJlZEFycmF5LAogIEZhc3RNYXA6ICgpID0+IEZhc3RNYXAsCiAgSW50ZXJlc3Q6ICgpID0+IEludGVyZXN0LAogIEludGVyZXN0TWFwOiAoKSA9PiBJbnRlcmVzdE1hcCwKICBMaW1pdGVkQXJyYXk6ICgpID0+IExpbWl0ZWRBcnJheSwKICBMb29wVHJhY2tlcjogKCkgPT4gTG9vcFRyYWNrZXIsCiAgT2JqZWN0TWFwOiAoKSA9PiBPYmplY3RNYXAsCiAgU3RyaW5nbWFwOiAoKSA9PiBTdHJpbmdtYXAsCiAgVGltZWRBZ2dyZWd0b3I6ICgpID0+IFRpbWVkQWdncmVndG9yLAogIFRyZWU6ICgpID0+IFRyZWUsCiAgdW5pOiAoKSA9PiB1bmkKfSk7CnZhciBpbml0X2Rpc3RfdHM3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfYXN5bmNleGVjdXRpb25zdGFjaygpOwogICAgaW5pdF9jbGFzc2VzX2JhY2twcmVzc3VyZWRhcnJheSgpOwogICAgaW5pdF9jbGFzc2VzX2Zhc3RtYXAoKTsKICAgIGluaXRfY2xhc3Nlc19pbnRlcmVzdG1hcCgpOwogICAgaW5pdF9jbGFzc2VzX2ludGVyZXN0bWFwX2ludGVyZXN0KCk7CiAgICBpbml0X2NsYXNzZXNfbGltaXRlZGFycmF5KCk7CiAgICBpbml0X2NsYXNzZXNfbG9vcHRyYWNrZXIoKTsKICAgIGluaXRfY2xhc3Nlc19vYmplY3RtYXAoKTsKICAgIGluaXRfY2xhc3Nlc19zdHJpbmdtYXAoKTsKICAgIGluaXRfY2xhc3Nlc190aW1lZGFnZ3JlZ2F0b3IoKTsKICAgIGluaXRfY2xhc3Nlc190cmVlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91aW50OGFycmF5LWV4dHJhc0AxLjUuMC9ub2RlX21vZHVsZXMvdWludDhhcnJheS1leHRyYXMvaW5kZXguanMKdmFyIHVpbnQ4YXJyYXlfZXh0cmFzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQodWludDhhcnJheV9leHRyYXNfZXhwb3J0cywgewogIGFyZVVpbnQ4QXJyYXlzRXF1YWw6ICgpID0+IGFyZVVpbnQ4QXJyYXlzRXF1YWwsCiAgYXNzZXJ0VWludDhBcnJheTogKCkgPT4gYXNzZXJ0VWludDhBcnJheSwKICBhc3NlcnRVaW50OEFycmF5T3JBcnJheUJ1ZmZlcjogKCkgPT4gYXNzZXJ0VWludDhBcnJheU9yQXJyYXlCdWZmZXIsCiAgYmFzZTY0VG9TdHJpbmc6ICgpID0+IGJhc2U2NFRvU3RyaW5nLAogIGJhc2U2NFRvVWludDhBcnJheTogKCkgPT4gYmFzZTY0VG9VaW50OEFycmF5LAogIGNvbXBhcmVVaW50OEFycmF5czogKCkgPT4gY29tcGFyZVVpbnQ4QXJyYXlzLAogIGNvbmNhdFVpbnQ4QXJyYXlzOiAoKSA9PiBjb25jYXRVaW50OEFycmF5cywKICBnZXRVaW50QkU6ICgpID0+IGdldFVpbnRCRSwKICBoZXhUb1VpbnQ4QXJyYXk6ICgpID0+IGhleFRvVWludDhBcnJheSwKICBpbmNsdWRlczogKCkgPT4gaW5jbHVkZXMsCiAgaW5kZXhPZjogKCkgPT4gaW5kZXhPZiwKICBpc1VpbnQ4QXJyYXk6ICgpID0+IGlzVWludDhBcnJheSwKICBzdHJpbmdUb0Jhc2U2NDogKCkgPT4gc3RyaW5nVG9CYXNlNjQsCiAgc3RyaW5nVG9VaW50OEFycmF5OiAoKSA9PiBzdHJpbmdUb1VpbnQ4QXJyYXksCiAgdG9VaW50OEFycmF5OiAoKSA9PiB0b1VpbnQ4QXJyYXksCiAgdWludDhBcnJheVRvQmFzZTY0OiAoKSA9PiB1aW50OEFycmF5VG9CYXNlNjQsCiAgdWludDhBcnJheVRvSGV4OiAoKSA9PiB1aW50OEFycmF5VG9IZXgsCiAgdWludDhBcnJheVRvU3RyaW5nOiAoKSA9PiB1aW50OEFycmF5VG9TdHJpbmcKfSk7CmZ1bmN0aW9uIGlzVHlwZSh2YWx1ZTIsIHR5cGVDb25zdHJ1Y3RvciwgdHlwZVN0cmluZ2lmaWVkKSB7CiAgaWYgKCF2YWx1ZTIpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgaWYgKHZhbHVlMi5jb25zdHJ1Y3RvciA9PT0gdHlwZUNvbnN0cnVjdG9yKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUyKSA9PT0gdHlwZVN0cmluZ2lmaWVkOwp9CmZ1bmN0aW9uIGlzVWludDhBcnJheSh2YWx1ZTIpIHsKICByZXR1cm4gaXNUeXBlKHZhbHVlMiwgVWludDhBcnJheSwgdWludDhBcnJheVN0cmluZ2lmaWVkKTsKfQpmdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbHVlMikgewogIHJldHVybiBpc1R5cGUodmFsdWUyLCBBcnJheUJ1ZmZlciwgYXJyYXlCdWZmZXJTdHJpbmdpZmllZCk7Cn0KZnVuY3Rpb24gaXNVaW50OEFycmF5T3JBcnJheUJ1ZmZlcih2YWx1ZTIpIHsKICByZXR1cm4gaXNVaW50OEFycmF5KHZhbHVlMikgfHwgaXNBcnJheUJ1ZmZlcih2YWx1ZTIpOwp9CmZ1bmN0aW9uIGFzc2VydFVpbnQ4QXJyYXkodmFsdWUyKSB7CiAgaWYgKCFpc1VpbnQ4QXJyYXkodmFsdWUyKSkgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXGBVaW50OEFycmF5XGAsIGdvdCBcYCR7dHlwZW9mIHZhbHVlMn1cYGApOwogIH0KfQpmdW5jdGlvbiBhc3NlcnRVaW50OEFycmF5T3JBcnJheUJ1ZmZlcih2YWx1ZTIpIHsKICBpZiAoIWlzVWludDhBcnJheU9yQXJyYXlCdWZmZXIodmFsdWUyKSkgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXGBVaW50OEFycmF5XGAgb3IgXGBBcnJheUJ1ZmZlclxgLCBnb3QgXGAke3R5cGVvZiB2YWx1ZTJ9XGBgKTsKICB9Cn0KZnVuY3Rpb24gdG9VaW50OEFycmF5KHZhbHVlMikgewogIGlmICh2YWx1ZTIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgewogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHZhbHVlMik7CiAgfQogIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUyKSkgewogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHZhbHVlMi5idWZmZXIsIHZhbHVlMi5ieXRlT2Zmc2V0LCB2YWx1ZTIuYnl0ZUxlbmd0aCk7CiAgfQogIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuc3VwcG9ydGVkIHZhbHVlLCBnb3QgXGAke3R5cGVvZiB2YWx1ZTJ9XGAuYCk7Cn0KZnVuY3Rpb24gY29uY2F0VWludDhBcnJheXMoYXJyYXlzLCB0b3RhbExlbmd0aCkgewogIGlmIChhcnJheXMubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7CiAgfQogIHRvdGFsTGVuZ3RoID8/PSBhcnJheXMucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlKSA9PiBhY2N1bXVsYXRvciArIGN1cnJlbnRWYWx1ZS5sZW5ndGgsIDApOwogIGNvbnN0IHJldHVyblZhbHVlID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGgpOwogIGxldCBvZmZzZXQgPSAwOwogIGZvciAoY29uc3QgYXJyYXkgb2YgYXJyYXlzKSB7CiAgICBhc3NlcnRVaW50OEFycmF5KGFycmF5KTsKICAgIHJldHVyblZhbHVlLnNldChhcnJheSwgb2Zmc2V0KTsKICAgIG9mZnNldCArPSBhcnJheS5sZW5ndGg7CiAgfQogIHJldHVybiByZXR1cm5WYWx1ZTsKfQpmdW5jdGlvbiBhcmVVaW50OEFycmF5c0VxdWFsKGE1LCBiNSkgewogIGFzc2VydFVpbnQ4QXJyYXkoYTUpOwogIGFzc2VydFVpbnQ4QXJyYXkoYjUpOwogIGlmIChhNSA9PT0gYjUpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBpZiAoYTUubGVuZ3RoICE9PSBiNS5sZW5ndGgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgZm9yIChsZXQgaW5kZXgyID0gMDsgaW5kZXgyIDwgYTUubGVuZ3RoOyBpbmRleDIrKykgewogICAgaWYgKGE1W2luZGV4Ml0gIT09IGI1W2luZGV4Ml0pIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICByZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiBjb21wYXJlVWludDhBcnJheXMoYTUsIGI1KSB7CiAgYXNzZXJ0VWludDhBcnJheShhNSk7CiAgYXNzZXJ0VWludDhBcnJheShiNSk7CiAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4oYTUubGVuZ3RoLCBiNS5sZW5ndGgpOwogIGZvciAobGV0IGluZGV4MiA9IDA7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyKyspIHsKICAgIGNvbnN0IGRpZmYgPSBhNVtpbmRleDJdIC0gYjVbaW5kZXgyXTsKICAgIGlmIChkaWZmICE9PSAwKSB7CiAgICAgIHJldHVybiBNYXRoLnNpZ24oZGlmZik7CiAgICB9CiAgfQogIHJldHVybiBNYXRoLnNpZ24oYTUubGVuZ3RoIC0gYjUubGVuZ3RoKTsKfQpmdW5jdGlvbiB1aW50OEFycmF5VG9TdHJpbmcoYXJyYXksIGVuY29kaW5nID0gInV0ZjgiKSB7CiAgYXNzZXJ0VWludDhBcnJheU9yQXJyYXlCdWZmZXIoYXJyYXkpOwogIGNhY2hlZERlY29kZXJzW2VuY29kaW5nXSA/Pz0gbmV3IGdsb2JhbFRoaXMuVGV4dERlY29kZXIoZW5jb2RpbmcpOwogIHJldHVybiBjYWNoZWREZWNvZGVyc1tlbmNvZGluZ10uZGVjb2RlKGFycmF5KTsKfQpmdW5jdGlvbiBhc3NlcnRTdHJpbmcodmFsdWUyKSB7CiAgaWYgKHR5cGVvZiB2YWx1ZTIgIT09ICJzdHJpbmciKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcYHN0cmluZ1xgLCBnb3QgXGAke3R5cGVvZiB2YWx1ZTJ9XGBgKTsKICB9Cn0KZnVuY3Rpb24gc3RyaW5nVG9VaW50OEFycmF5KHN0cmluZzMpIHsKICBhc3NlcnRTdHJpbmcoc3RyaW5nMyk7CiAgcmV0dXJuIGNhY2hlZEVuY29kZXIuZW5jb2RlKHN0cmluZzMpOwp9CmZ1bmN0aW9uIGJhc2U2NFRvQmFzZTY0VXJsKGJhc2U2NDIpIHsKICByZXR1cm4gYmFzZTY0Mi5yZXBsYWNlQWxsKCIrIiwgIi0iKS5yZXBsYWNlQWxsKCIvIiwgIl8iKS5yZXBsYWNlKC89KyQvLCAiIik7Cn0KZnVuY3Rpb24gYmFzZTY0VXJsVG9CYXNlNjQoYmFzZTY0dXJsKSB7CiAgY29uc3QgYmFzZTY0MiA9IGJhc2U2NHVybC5yZXBsYWNlQWxsKCItIiwgIisiKS5yZXBsYWNlQWxsKCJfIiwgIi8iKTsKICBjb25zdCBwYWRkaW5nID0gKDQgLSBiYXNlNjQyLmxlbmd0aCAlIDQpICUgNDsKICByZXR1cm4gYmFzZTY0MiArICI9Ii5yZXBlYXQocGFkZGluZyk7Cn0KZnVuY3Rpb24gdWludDhBcnJheVRvQmFzZTY0KGFycmF5LCB7IHVybFNhZmUgPSBmYWxzZSB9ID0ge30pIHsKICBhc3NlcnRVaW50OEFycmF5KGFycmF5KTsKICBsZXQgYmFzZTY0MiA9ICIiOwogIGZvciAobGV0IGluZGV4MiA9IDA7IGluZGV4MiA8IGFycmF5Lmxlbmd0aDsgaW5kZXgyICs9IE1BWF9CTE9DS19TSVpFKSB7CiAgICBjb25zdCBjaHVuayA9IGFycmF5LnN1YmFycmF5KGluZGV4MiwgaW5kZXgyICsgTUFYX0JMT0NLX1NJWkUpOwogICAgYmFzZTY0MiArPSBnbG9iYWxUaGlzLmJ0b2EoU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkodm9pZCAwLCBjaHVuaykpOwogIH0KICByZXR1cm4gdXJsU2FmZSA/IGJhc2U2NFRvQmFzZTY0VXJsKGJhc2U2NDIpIDogYmFzZTY0MjsKfQpmdW5jdGlvbiBiYXNlNjRUb1VpbnQ4QXJyYXkoYmFzZTY0U3RyaW5nKSB7CiAgYXNzZXJ0U3RyaW5nKGJhc2U2NFN0cmluZyk7CiAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShnbG9iYWxUaGlzLmF0b2IoYmFzZTY0VXJsVG9CYXNlNjQoYmFzZTY0U3RyaW5nKSksICh4MykgPT4geDMuY29kZVBvaW50QXQoMCkpOwp9CmZ1bmN0aW9uIHN0cmluZ1RvQmFzZTY0KHN0cmluZzMsIHsgdXJsU2FmZSA9IGZhbHNlIH0gPSB7fSkgewogIGFzc2VydFN0cmluZyhzdHJpbmczKTsKICByZXR1cm4gdWludDhBcnJheVRvQmFzZTY0KHN0cmluZ1RvVWludDhBcnJheShzdHJpbmczKSwgeyB1cmxTYWZlIH0pOwp9CmZ1bmN0aW9uIGJhc2U2NFRvU3RyaW5nKGJhc2U2NFN0cmluZykgewogIGFzc2VydFN0cmluZyhiYXNlNjRTdHJpbmcpOwogIHJldHVybiB1aW50OEFycmF5VG9TdHJpbmcoYmFzZTY0VG9VaW50OEFycmF5KGJhc2U2NFN0cmluZykpOwp9CmZ1bmN0aW9uIHVpbnQ4QXJyYXlUb0hleChhcnJheSkgewogIGFzc2VydFVpbnQ4QXJyYXkoYXJyYXkpOwogIGxldCBoZXhTdHJpbmcgPSAiIjsKICBmb3IgKGxldCBpbmRleDIgPSAwOyBpbmRleDIgPCBhcnJheS5sZW5ndGg7IGluZGV4MisrKSB7CiAgICBoZXhTdHJpbmcgKz0gYnl0ZVRvSGV4TG9va3VwVGFibGVbYXJyYXlbaW5kZXgyXV07CiAgfQogIHJldHVybiBoZXhTdHJpbmc7Cn0KZnVuY3Rpb24gaGV4VG9VaW50OEFycmF5KGhleFN0cmluZykgewogIGFzc2VydFN0cmluZyhoZXhTdHJpbmcpOwogIGlmIChoZXhTdHJpbmcubGVuZ3RoICUgMiAhPT0gMCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhleCBzdHJpbmcgbGVuZ3RoLiIpOwogIH0KICBjb25zdCByZXN1bHRMZW5ndGggPSBoZXhTdHJpbmcubGVuZ3RoIC8gMjsKICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KHJlc3VsdExlbmd0aCk7CiAgZm9yIChsZXQgaW5kZXgyID0gMDsgaW5kZXgyIDwgcmVzdWx0TGVuZ3RoOyBpbmRleDIrKykgewogICAgY29uc3QgaGlnaE5pYmJsZSA9IGhleFRvRGVjaW1hbExvb2t1cFRhYmxlW2hleFN0cmluZ1tpbmRleDIgKiAyXV07CiAgICBjb25zdCBsb3dOaWJibGUgPSBoZXhUb0RlY2ltYWxMb29rdXBUYWJsZVtoZXhTdHJpbmdbaW5kZXgyICogMiArIDFdXTsKICAgIGlmIChoaWdoTmliYmxlID09PSB2b2lkIDAgfHwgbG93TmliYmxlID09PSB2b2lkIDApIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEhleCBjaGFyYWN0ZXIgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gJHtpbmRleDIgKiAyfWApOwogICAgfQogICAgYnl0ZXNbaW5kZXgyXSA9IGhpZ2hOaWJibGUgPDwgNCB8IGxvd05pYmJsZTsKICB9CiAgcmV0dXJuIGJ5dGVzOwp9CmZ1bmN0aW9uIGdldFVpbnRCRSh2aWV3KSB7CiAgY29uc3QgeyBieXRlTGVuZ3RoIH0gPSB2aWV3OwogIGlmIChieXRlTGVuZ3RoID09PSA2KSB7CiAgICByZXR1cm4gdmlldy5nZXRVaW50MTYoMCkgKiAyICoqIDMyICsgdmlldy5nZXRVaW50MzIoMik7CiAgfQogIGlmIChieXRlTGVuZ3RoID09PSA1KSB7CiAgICByZXR1cm4gdmlldy5nZXRVaW50OCgwKSAqIDIgKiogMzIgKyB2aWV3LmdldFVpbnQzMigxKTsKICB9CiAgaWYgKGJ5dGVMZW5ndGggPT09IDQpIHsKICAgIHJldHVybiB2aWV3LmdldFVpbnQzMigwKTsKICB9CiAgaWYgKGJ5dGVMZW5ndGggPT09IDMpIHsKICAgIHJldHVybiB2aWV3LmdldFVpbnQ4KDApICogMiAqKiAxNiArIHZpZXcuZ2V0VWludDE2KDEpOwogIH0KICBpZiAoYnl0ZUxlbmd0aCA9PT0gMikgewogICAgcmV0dXJuIHZpZXcuZ2V0VWludDE2KDApOwogIH0KICBpZiAoYnl0ZUxlbmd0aCA9PT0gMSkgewogICAgcmV0dXJuIHZpZXcuZ2V0VWludDgoMCk7CiAgfQp9CmZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlMikgewogIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoOwogIGNvbnN0IHZhbHVlTGVuZ3RoID0gdmFsdWUyLmxlbmd0aDsKICBpZiAodmFsdWVMZW5ndGggPT09IDApIHsKICAgIHJldHVybiAtMTsKICB9CiAgaWYgKHZhbHVlTGVuZ3RoID4gYXJyYXlMZW5ndGgpIHsKICAgIHJldHVybiAtMTsKICB9CiAgY29uc3QgdmFsaWRPZmZzZXRMZW5ndGggPSBhcnJheUxlbmd0aCAtIHZhbHVlTGVuZ3RoOwogIGZvciAobGV0IGluZGV4MiA9IDA7IGluZGV4MiA8PSB2YWxpZE9mZnNldExlbmd0aDsgaW5kZXgyKyspIHsKICAgIGxldCBpc01hdGNoMyA9IHRydWU7CiAgICBmb3IgKGxldCBpbmRleDIyID0gMDsgaW5kZXgyMiA8IHZhbHVlTGVuZ3RoOyBpbmRleDIyKyspIHsKICAgICAgaWYgKGFycmF5W2luZGV4MiArIGluZGV4MjJdICE9PSB2YWx1ZTJbaW5kZXgyMl0pIHsKICAgICAgICBpc01hdGNoMyA9IGZhbHNlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAoaXNNYXRjaDMpIHsKICAgICAgcmV0dXJuIGluZGV4MjsKICAgIH0KICB9CiAgcmV0dXJuIC0xOwp9CmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCB2YWx1ZTIpIHsKICByZXR1cm4gaW5kZXhPZihhcnJheSwgdmFsdWUyKSAhPT0gLTE7Cn0KdmFyIG9iamVjdFRvU3RyaW5nLCB1aW50OEFycmF5U3RyaW5naWZpZWQsIGFycmF5QnVmZmVyU3RyaW5naWZpZWQsIGNhY2hlZERlY29kZXJzLCBjYWNoZWRFbmNvZGVyLCBNQVhfQkxPQ0tfU0laRSwgYnl0ZVRvSGV4TG9va3VwVGFibGUsIGhleFRvRGVjaW1hbExvb2t1cFRhYmxlOwp2YXIgaW5pdF91aW50OGFycmF5X2V4dHJhcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VpbnQ4YXJyYXktZXh0cmFzQDEuNS4wL25vZGVfbW9kdWxlcy91aW50OGFycmF5LWV4dHJhcy9pbmRleC5qcyIoKSB7CiAgICBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CiAgICB1aW50OEFycmF5U3RyaW5naWZpZWQgPSAiW29iamVjdCBVaW50OEFycmF5XSI7CiAgICBhcnJheUJ1ZmZlclN0cmluZ2lmaWVkID0gIltvYmplY3QgQXJyYXlCdWZmZXJdIjsKICAgIGNhY2hlZERlY29kZXJzID0gewogICAgICB1dGY4OiBuZXcgZ2xvYmFsVGhpcy5UZXh0RGVjb2RlcigidXRmOCIpCiAgICB9OwogICAgY2FjaGVkRW5jb2RlciA9IG5ldyBnbG9iYWxUaGlzLlRleHRFbmNvZGVyKCk7CiAgICBNQVhfQkxPQ0tfU0laRSA9IDY1NTM1OwogICAgYnl0ZVRvSGV4TG9va3VwVGFibGUgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNTYgfSwgKF80LCBpbmRleDIpID0+IGluZGV4Mi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgIjAiKSk7CiAgICBoZXhUb0RlY2ltYWxMb29rdXBUYWJsZSA9IHsKICAgICAgMDogMCwKICAgICAgMTogMSwKICAgICAgMjogMiwKICAgICAgMzogMywKICAgICAgNDogNCwKICAgICAgNTogNSwKICAgICAgNjogNiwKICAgICAgNzogNywKICAgICAgODogOCwKICAgICAgOTogOSwKICAgICAgYTogMTAsCiAgICAgIGI6IDExLAogICAgICBjOiAxMiwKICAgICAgZDogMTMsCiAgICAgIGU6IDE0LAogICAgICBmOiAxNSwKICAgICAgQTogMTAsCiAgICAgIEI6IDExLAogICAgICBDOiAxMiwKICAgICAgRDogMTMsCiAgICAgIEU6IDE0LAogICAgICBGOiAxNQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0YnVmZmVyQDMuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGJ1ZmZlci9kaXN0X3RzL3NtYXJ0YnVmZmVyLnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRidWZmZXJfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0YnVmZmVyQDMuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGJ1ZmZlci9kaXN0X3RzL3NtYXJ0YnVmZmVyLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF91aW50OGFycmF5X2V4dHJhcygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRidWZmZXJAMy4wLjUvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0YnVmZmVyL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czggPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzOCwgewogIGJhc2U2NFRvVWludDhBcnJheTogKCkgPT4gYmFzZTY0VG9VaW50OEFycmF5MiwKICBlbnN1cmVQdXJlVWludDhBcnJheTogKCkgPT4gZW5zdXJlUHVyZVVpbnQ4QXJyYXksCiAgaXNCdWZmZXJMaWtlOiAoKSA9PiBpc0J1ZmZlckxpa2UsCiAgaXNVaW50OEFycmF5OiAoKSA9PiBpc1VpbnQ4QXJyYXkyLAogIHVJbnQ4QXJyYXlFeHRyYXM6ICgpID0+IHVJbnQ4QXJyYXlFeHRyYXMsCiAgdUludDhBcnJheVRvQmFzZTY0OiAoKSA9PiB1SW50OEFycmF5VG9CYXNlNjQKfSk7CmZ1bmN0aW9uIHVJbnQ4QXJyYXlUb0Jhc2U2NCh1SW50OEFycmF5KSB7CiAgcmV0dXJuIHVpbnQ4YXJyYXlfZXh0cmFzX2V4cG9ydHMudWludDhBcnJheVRvQmFzZTY0KHVJbnQ4QXJyYXkpOwp9CmZ1bmN0aW9uIGJhc2U2NFRvVWludDhBcnJheTIoYmFzZTY0MikgewogIHJldHVybiB1aW50OGFycmF5X2V4dHJhc19leHBvcnRzLmJhc2U2NFRvVWludDhBcnJheShiYXNlNjQyKTsKfQpmdW5jdGlvbiBpc0J1ZmZlckxpa2Uob2JqKSB7CiAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqLmJ5dGVMZW5ndGggPT09ICJudW1iZXIiKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICJ1bmRlZmluZWQiICYmIEJ1ZmZlci5pc0J1ZmZlcikgewogICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gZW5zdXJlUHVyZVVpbnQ4QXJyYXkoYnVmZmVyQXJnKSB7CiAgY29uc3QgdWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlckFyZy5sZW5ndGgpOwogIHVpbnQ4QXJyYXkuc2V0KGJ1ZmZlckFyZyk7CiAgcmV0dXJuIHVpbnQ4QXJyYXk7Cn0KdmFyIHVJbnQ4QXJyYXlFeHRyYXMsIGlzVWludDhBcnJheTI7CnZhciBpbml0X2Rpc3RfdHM4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRidWZmZXJAMy4wLjUvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0YnVmZmVyL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydGJ1ZmZlcl9wbHVnaW5zKCk7CiAgICB1SW50OEFycmF5RXh0cmFzID0gdWludDhhcnJheV9leHRyYXNfZXhwb3J0czsKICAgIGlzVWludDhBcnJheTIgPSAob2JqKSA9PiB7CiAgICAgIHJldHVybiB1aW50OGFycmF5X2V4dHJhc19leHBvcnRzLmlzVWludDhBcnJheShvYmopOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9zbWFydGd1YXJkLnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRndWFyZF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC9kaXN0X3RzL3NtYXJ0Z3VhcmQucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9jbGFzc2VzLmd1YXJkLmpzCnZhciBHdWFyZDsKdmFyIGluaXRfY2xhc3Nlc19ndWFyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9jbGFzc2VzLmd1YXJkLmpzIigpIHsKICAgIGluaXRfc21hcnRndWFyZF9wbHVnaW5zKCk7CiAgICBHdWFyZCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoZ3VhcmRGdW5jdGlvbkFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHRoaXMuZ3VhcmRGdW5jdGlvbiA9IGd1YXJkRnVuY3Rpb25Bcmc7CiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZzsKICAgICAgfQogICAgICAvKioKICAgICAgICogZXhlY3V0ZXMgdGhlIGd1YXJkIGFnYWluc3QgYSBkYXRhIGFyZ3VtZW50OwogICAgICAgKiBAcGFyYW0gZGF0YUFyZwogICAgICAgKi8KICAgICAgYXN5bmMgZXhlYyhkYXRhQXJnKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ndWFyZEZ1bmN0aW9uKGRhdGFBcmcpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgYXN5bmMgZ2V0RmFpbGVkSGludChkYXRhQXJnKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjKGRhdGFBcmcpOwogICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZhaWxlZEhpbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9jbGFzc2VzLmd1YXJkZXJyb3IuanMKdmFyIEd1YXJkRXJyb3I7CnZhciBpbml0X2NsYXNzZXNfZ3VhcmRlcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9jbGFzc2VzLmd1YXJkZXJyb3IuanMiKCkgewogICAgaW5pdF9zbWFydGd1YXJkX3BsdWdpbnMoKTsKICAgIEd1YXJkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICAgICAgY29uc3RydWN0b3IobWVzc2FnZTIpIHsKICAgICAgICBzdXBlcihtZXNzYWdlMik7CiAgICAgICAgdGhpcy5uYW1lID0gIkd1YXJkRXJyb3IiOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC9kaXN0X3RzL2NsYXNzZXMuZ3VhcmRzZXQuanMKdmFyIEd1YXJkU2V0Owp2YXIgaW5pdF9jbGFzc2VzX2d1YXJkc2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC9kaXN0X3RzL2NsYXNzZXMuZ3VhcmRzZXQuanMiKCkgewogICAgaW5pdF9zbWFydGd1YXJkX3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc19ndWFyZCgpOwogICAgR3VhcmRTZXQgPSBjbGFzcyBleHRlbmRzIEd1YXJkIHsKICAgICAgY29uc3RydWN0b3IoZ3VhcmRBcnJheSA9IFtdKSB7CiAgICAgICAgc3VwZXIoYXN5bmMgKGRhdGFBcmcpID0+IHsKICAgICAgICAgIHJldHVybiB0aGlzLmFsbEd1YXJkc1Bhc3MoZGF0YUFyZyk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5ndWFyZHMgPSBndWFyZEFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBleGVjdXRlcyBhbGwgZ3VhcmRzIGluIGFsbCBndWFyZFNldHMgYWdhaW5zdCBhIGRhdGEgYXJndW1lbnQKICAgICAgICogQHBhcmFtIGRhdGFBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGV4ZWNBbGxXaXRoRGF0YShkYXRhQXJnLCBvcHRpb25zQXJnID0gewogICAgICAgIG1vZGU6ICJwYXJhbGxlbCIsCiAgICAgICAgc3RvcE9uRmFpbDogZmFsc2UKICAgICAgfSkgewogICAgICAgIGNvbnN0IHJlc3VsdFByb21pc2VzID0gW107CiAgICAgICAgZm9yIChjb25zdCBndWFyZCBvZiB0aGlzLmd1YXJkcykgewogICAgICAgICAgY29uc3QgZ3VhcmRSZXN1bHRQcm9taXNlID0gZ3VhcmQuZXhlYyhkYXRhQXJnKTsKICAgICAgICAgIGlmIChvcHRpb25zQXJnLm1vZGUgPT09ICJzZXJpYWwiKSB7CiAgICAgICAgICAgIGF3YWl0IGd1YXJkUmVzdWx0UHJvbWlzZTsKICAgICAgICAgIH0KICAgICAgICAgIHJlc3VsdFByb21pc2VzLnB1c2goZ3VhcmRSZXN1bHRQcm9taXNlKTsKICAgICAgICAgIGlmIChvcHRpb25zQXJnLnN0b3BPbkZhaWwpIHsKICAgICAgICAgICAgaWYgKCFhd2FpdCBndWFyZFJlc3VsdFByb21pc2UpIHsKICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwocmVzdWx0UHJvbWlzZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChyZXN1bHRQcm9taXNlcyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrcyBpZiBhbGwgZ3VhcmRzIHBhc3MKICAgICAgICogQHBhcmFtIGRhdGFBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGFsbEd1YXJkc1Bhc3MoZGF0YUFyZywgb3B0aW9uc0FyZyA9IHsKICAgICAgICBtb2RlOiAicGFyYWxsZWwiLAogICAgICAgIHN0b3BPbkZhaWw6IGZhbHNlCiAgICAgIH0pIHsKICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5leGVjQWxsV2l0aERhdGEoZGF0YUFyZywgb3B0aW9uc0FyZyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZXZlcnkoKHJlc3VsdCkgPT4gcmVzdWx0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIGlmIGFueSBndWFyZCBwYXNzZXMKICAgICAgICogQHBhcmFtIGRhdGFBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGFueUd1YXJkc1Bhc3MoZGF0YUFyZykgewogICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmV4ZWNBbGxXaXRoRGF0YShkYXRhQXJnLCB7CiAgICAgICAgICBtb2RlOiAicGFyYWxsZWwiLAogICAgICAgICAgc3RvcE9uRmFpbDogZmFsc2UKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gcmVzdWx0cy5zb21lKChyZXN1bHQpID0+IHJlc3VsdCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgdGhlIGZpcnN0IHJlYXNvbiBmb3Igd2h5IHNvbWV0aGluZyBmYWlscwogICAgICAgKiBAcGFyYW0gZGF0YUFyZwogICAgICAgKiBAcmV0dXJucwogICAgICAgKi8KICAgICAgZ2V0RmFpbGVkSGludChkYXRhQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBndWFyZCBvZiB0aGlzLmd1YXJkcykgewogICAgICAgICAgY29uc3QgZmFpbGVkSGludCA9IGd1YXJkLmdldEZhaWxlZEhpbnQoZGF0YUFyZyk7CiAgICAgICAgICBpZiAoZmFpbGVkSGludCkgewogICAgICAgICAgICByZXR1cm4gZmFpbGVkSGludDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGd1YXJkQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGd1YXJkL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czkgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzOSwgewogIEd1YXJkOiAoKSA9PiBHdWFyZCwKICBHdWFyZEVycm9yOiAoKSA9PiBHdWFyZEVycm9yLAogIEd1YXJkU2V0OiAoKSA9PiBHdWFyZFNldCwKICBwYXNzR3VhcmRzT3JSZWplY3Q6ICgpID0+IHBhc3NHdWFyZHNPclJlamVjdAp9KTsKdmFyIHBhc3NHdWFyZHNPclJlamVjdDsKdmFyIGluaXRfZGlzdF90czkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGd1YXJkQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGd1YXJkL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydGd1YXJkX3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc19ndWFyZCgpOwogICAgaW5pdF9jbGFzc2VzX2d1YXJkZXJyb3IoKTsKICAgIGluaXRfY2xhc3Nlc19ndWFyZCgpOwogICAgaW5pdF9jbGFzc2VzX2d1YXJkc2V0KCk7CiAgICBpbml0X2NsYXNzZXNfZ3VhcmRzZXQoKTsKICAgIGluaXRfY2xhc3Nlc19ndWFyZGVycm9yKCk7CiAgICBwYXNzR3VhcmRzT3JSZWplY3QgPSBhc3luYyAoZGF0YUFyZywgZ3VhcmRzKSA9PiB7CiAgICAgIGNvbnN0IGd1YXJkU2V0ID0gbmV3IEd1YXJkU2V0KGd1YXJkcyk7CiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGd1YXJkU2V0LmFsbEd1YXJkc1Bhc3MoZGF0YUFyZyk7CiAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgY29uc3QgZmFpbGVkSGludCA9IGF3YWl0IGd1YXJkU2V0LmdldEZhaWxlZEhpbnQoZGF0YUFyZyk7CiAgICAgICAgdGhyb3cgbmV3IEd1YXJkRXJyb3IoYEd1YXJkcyBmYWlsZWQ6CiR7ZmFpbGVkSGludH0KICAgIGApOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGVudkA1LjAuMTMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0ZW52L2Rpc3RfdHMvc21hcnRlbnYucGx1Z2lucy5qcwp2YXIgaW5pdF9zbWFydGVudl9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL3NtYXJ0ZW52LnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGVudkA1LjAuMTMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0ZW52L2Rpc3RfdHMvaW50ZXJmYWNlcy9pbmRleC5qcwp2YXIgaW5pdF9pbnRlcmZhY2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL2ludGVyZmFjZXMvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL3NtYXJ0ZW52LmNsYXNzZXMuc21hcnRlbnYuanMKdmFyIFNtYXJ0ZW52Owp2YXIgaW5pdF9zbWFydGVudl9jbGFzc2VzX3NtYXJ0ZW52ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL3NtYXJ0ZW52LmNsYXNzZXMuc21hcnRlbnYuanMiKCkgewogICAgaW5pdF9zbWFydGVudl9wbHVnaW5zKCk7CiAgICBpbml0X2ludGVyZmFjZXMoKTsKICAgIFNtYXJ0ZW52ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmxvYWRlZFNjcmlwdHMgPSBbXTsKICAgICAgfQogICAgICBhc3luYyBnZXRFbnZBd2FyZU1vZHVsZShvcHRpb25zQXJnKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgICAgICBjb25zdCBtb2R1bGVSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFNhZmVOb2RlTW9kdWxlKG9wdGlvbnNBcmcubm9kZU1vZHVsZU5hbWUpOwogICAgICAgICAgcmV0dXJuIG1vZHVsZVJlc3VsdDsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNCcm93c2VyKSB7CiAgICAgICAgICBjb25zdCBtb2R1bGVSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFNhZmVXZWJNb2R1bGUob3B0aW9uc0FyZy53ZWJVcmxBcmcsIG9wdGlvbnNBcmcuZ2V0RnVuY3Rpb24pOwogICAgICAgICAgcmV0dXJuIG1vZHVsZVJlc3VsdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc29sZS5lcnJvcigicGxhdGZvcm0gZm9yIGxvYWRpbmcgbm90IHN1cHBvcnRlZCBieSBzbWFydGVudiIpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBnZXRTYWZlTm9kZU1vZHVsZShtb2R1bGVOYW1lQXJnLCBydW5BZnRlckZ1bmMpIHsKICAgICAgICBpZiAoIXRoaXMuaXNOb2RlKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKGBZb3UgdHJpZWQgdG8gbG9hZCBhIG5vZGUgbW9kdWxlIGluIGEgd3JvbmcgY29udGV4dDogJHttb2R1bGVOYW1lQXJnfS4gVGhpcyBkb2VzIG5vdCB0aHJvdy5gKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBhd2FpdCBuZXcgRnVuY3Rpb24oYHJldHVybiBpbXBvcnQoJyR7bW9kdWxlTmFtZUFyZ30nKWApKCk7CiAgICAgICAgaWYgKHJ1bkFmdGVyRnVuYykgewogICAgICAgICAgYXdhaXQgcnVuQWZ0ZXJGdW5jKHJldHVyblZhbHVlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgICB9CiAgICAgIGFzeW5jIGdldFNhZmVXZWJNb2R1bGUodXJsQXJnLCBnZXRGdW5jdGlvbkFyZykgewogICAgICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIllvdSB0cmllZCB0byBsb2FkIGEgd2ViIG1vZHVsZSBpbiBhIHdyb25nIGNvbnRleHQiKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMubG9hZGVkU2NyaXB0cy5pbmNsdWRlcyh1cmxBcmcpKSB7CiAgICAgICAgICByZXR1cm4gZ2V0RnVuY3Rpb25BcmcoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5sb2FkZWRTY3JpcHRzLnB1c2godXJsQXJnKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgZG9uZSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIGlmIChnbG9iYWxUaGlzLmltcG9ydFNjcmlwdHMpIHsKICAgICAgICAgIGdsb2JhbFRoaXMuaW1wb3J0U2NyaXB0cyh1cmxBcmcpOwogICAgICAgICAgZG9uZS5yZXNvbHZlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwogICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHsKICAgICAgICAgICAgZG9uZS5yZXNvbHZlKCk7CiAgICAgICAgICB9OwogICAgICAgICAgc2NyaXB0LnNyYyA9IHVybEFyZzsKICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgZG9uZS5wcm9taXNlOwogICAgICAgIHJldHVybiBnZXRGdW5jdGlvbkFyZygpOwogICAgICB9CiAgICAgIGdldCBydW50aW1lRW52KCkgewogICAgICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiAibm9kZSI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiAiYnJvd3NlciI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldCBpc0Jyb3dzZXIoKSB7CiAgICAgICAgcmV0dXJuICF0aGlzLmlzTm9kZTsKICAgICAgfQogICAgICBnZXQgdXNlckFnZW50KCkgewogICAgICAgIGlmICh0aGlzLmlzQnJvd3NlcikgewogICAgICAgICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiAidW5kZWZpbmVkIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgZ2V0IGlzTm9kZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5ydW50aW1lRW52ID09PSAibm9kZSI7CiAgICAgIH0KICAgICAgZ2V0IG5vZGVWZXJzaW9uKCkgewogICAgICAgIHJldHVybiBwcm9jZXNzLnZlcnNpb247CiAgICAgIH0KICAgICAgZ2V0IGlzQ0koKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuQ0kpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgaXNNYWNBc3luYygpIHsKICAgICAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgICAgIGNvbnN0IG9zID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKTsKICAgICAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAiZGFyd2luIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBpc1dpbmRvd3NBc3luYygpIHsKICAgICAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgICAgIGNvbnN0IG9zID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKTsKICAgICAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAid2luMzIiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzeW5jIGlzTGludXhBc3luYygpIHsKICAgICAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgICAgIGNvbnN0IG9zID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKTsKICAgICAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAibGludXgiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBwcmludHMgdGhlIGVudmlyb25tZW50IHRvIGNvbnNvbGUKICAgICAgICovCiAgICAgIGFzeW5jIHByaW50RW52KCkgewogICAgICAgIGlmICh0aGlzLmlzTm9kZSkgewogICAgICAgICAgY29uc29sZS5sb2coInJ1bm5pbmcgb24gTk9ERSIpOwogICAgICAgICAgY29uc29sZS5sb2coIm5vZGUgdmVyc2lvbiBpcyAiICsgdGhpcy5ub2RlVmVyc2lvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJydW5uaW5nIG9uIEJST1dTRVIiKTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJicm93c2VyIGlzICIgKyB0aGlzLnVzZXJBZ2VudCk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMxMCA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMxMCwgewogIFNtYXJ0ZW52OiAoKSA9PiBTbWFydGVudgp9KTsKdmFyIGluaXRfZGlzdF90czEwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRlbnZfY2xhc3Nlc19zbWFydGVudigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcucGx1Z2lucy5qcwp2YXIgaXNvdW5pcXVlOwp2YXIgaW5pdF9zbWFydHN0cmluZ19wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcucGx1Z2lucy5qcyIoKSB7CiAgICBpc291bmlxdWUgPSBfX3RvRVNNKHJlcXVpcmVfZGlzdF90cygpLCAxKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmNyZWF0ZS5qcwp2YXIgc21hcnRzdHJpbmdfY3JlYXRlX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoc21hcnRzdHJpbmdfY3JlYXRlX2V4cG9ydHMsIHsKICBjcmVhdGVDcnlwdG9SYW5kb21TdHJpbmc6ICgpID0+IGNyZWF0ZUNyeXB0b1JhbmRvbVN0cmluZywKICBjcmVhdGVSYW5kb21TdHJpbmc6ICgpID0+IGNyZWF0ZVJhbmRvbVN0cmluZwp9KTsKdmFyIGdldFJhbmRvbUludCwgY3VzdG9tUmFuZG9tYXRpYywgY3JlYXRlUmFuZG9tU3RyaW5nLCBjcmVhdGVDcnlwdG9SYW5kb21TdHJpbmc7CnZhciBpbml0X3NtYXJ0c3RyaW5nX2NyZWF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmNyZWF0ZS5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIGdldFJhbmRvbUludCA9IChtaW4zLCBtYXgzKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gInVuZGVmaW5lZCIgJiYgZ2xvYmFsVGhpcy5jcnlwdG8gJiYgZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7CiAgICAgICAgY29uc3QgcmFuZ2UyID0gbWF4MyAtIG1pbjM7CiAgICAgICAgY29uc3QgYXJyYXkgPSBuZXcgVWludDMyQXJyYXkoMSk7CiAgICAgICAgZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycmF5KTsKICAgICAgICByZXR1cm4gbWluMyArIGFycmF5WzBdICUgcmFuZ2UyOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4MyAtIG1pbjMpKSArIG1pbjM7CiAgICAgIH0KICAgIH07CiAgICBjdXN0b21SYW5kb21hdGljID0gKHBhdHRlcm4sIGxlbmd0aCwgb3B0aW9ucykgPT4gewogICAgICBjb25zdCBjaGFyU2V0cyA9IHsKICAgICAgICAiQSI6ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIsCiAgICAgICAgImEiOiAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLAogICAgICAgICIwIjogIjAxMjM0NTY3ODkiLAogICAgICAgICIhIjogIiFAIyQlXiYqKClfKy09W117fXw7OiwuPD4/IiwKICAgICAgICAiKiI6ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSFAIyQlXiYqKClfKy09W117fXw7OiwuPD4/IgogICAgICB9OwogICAgICBsZXQgYWN0dWFsUGF0dGVybiA9IHBhdHRlcm47CiAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoID4gcGF0dGVybi5sZW5ndGgpIHsKICAgICAgICBhY3R1YWxQYXR0ZXJuID0gcGF0dGVybi5yZXBlYXQoTWF0aC5jZWlsKGxlbmd0aCAvIHBhdHRlcm4ubGVuZ3RoKSkuc2xpY2UoMCwgbGVuZ3RoKTsKICAgICAgfSBlbHNlIGlmIChsZW5ndGgpIHsKICAgICAgICBhY3R1YWxQYXR0ZXJuID0gcGF0dGVybi5zbGljZSgwLCBsZW5ndGgpOwogICAgICB9CiAgICAgIGxldCByZXN1bHQgPSAiIjsKICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGFjdHVhbFBhdHRlcm4pIHsKICAgICAgICBpZiAoY2hhclNldHNbY2hhcl0pIHsKICAgICAgICAgIGNvbnN0IGNoYXJTZXQgPSBjaGFyU2V0c1tjaGFyXTsKICAgICAgICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gZ2V0UmFuZG9tSW50KDAsIGNoYXJTZXQubGVuZ3RoKTsKICAgICAgICAgIHJlc3VsdCArPSBjaGFyU2V0W3JhbmRvbUluZGV4XTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzdWx0ICs9IGNoYXI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwogICAgY3JlYXRlUmFuZG9tU3RyaW5nID0gKHBhdHRlcm5BcmcsIGxlbmd0aEFyZywgb3B0aW9uc0FyZykgPT4gewogICAgICByZXR1cm4gY3VzdG9tUmFuZG9tYXRpYyhwYXR0ZXJuQXJnLCBsZW5ndGhBcmcsIG9wdGlvbnNBcmcpOwogICAgfTsKICAgIGNyZWF0ZUNyeXB0b1JhbmRvbVN0cmluZyA9ICgpID0+IHsKICAgICAgcmV0dXJuIGlzb3VuaXF1ZS51bmkoKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5kb2NrZXIuanMKdmFyIHNtYXJ0c3RyaW5nX2RvY2tlcl9leHBvcnRzID0ge307Cl9fZXhwb3J0KHNtYXJ0c3RyaW5nX2RvY2tlcl9leHBvcnRzLCB7CiAgbWFrZUVudk9iamVjdDogKCkgPT4gbWFrZUVudk9iamVjdAp9KTsKdmFyIG1ha2VFbnZPYmplY3Q7CnZhciBpbml0X3NtYXJ0c3RyaW5nX2RvY2tlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmRvY2tlci5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIG1ha2VFbnZPYmplY3QgPSBmdW5jdGlvbihlbnZBcnJheUFyZykgewogICAgICBsZXQgcmV0dXJuT2JqZWN0ID0ge307CiAgICAgIGxldCByZWdleFN0cmluZyA9IC8oLiopPSguKikvOwogICAgICBpZiAodHlwZW9mIGVudkFycmF5QXJnICE9PSAidW5kZWZpbmVkIikgewogICAgICAgIGZvciAobGV0IGVudktleSBpbiBlbnZBcnJheUFyZykgewogICAgICAgICAgbGV0IHJlZ2V4TWF0Y2hlcyA9IHJlZ2V4U3RyaW5nLmV4ZWMoZW52QXJyYXlBcmdbZW52S2V5XSk7CiAgICAgICAgICByZXR1cm5PYmplY3RbcmVnZXhNYXRjaGVzWzFdXSA9IHJlZ2V4TWF0Y2hlc1syXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJldHVybk9iamVjdDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5pbmRlbnQuanMKdmFyIHNtYXJ0c3RyaW5nX2luZGVudF9leHBvcnRzID0ge307Cl9fZXhwb3J0KHNtYXJ0c3RyaW5nX2luZGVudF9leHBvcnRzLCB7CiAgaW5kZW50OiAoKSA9PiBpbmRlbnQsCiAgaW5kZW50V2l0aFByZWZpeDogKCkgPT4gaW5kZW50V2l0aFByZWZpeCwKICBub3JtYWxpemU6ICgpID0+IG5vcm1hbGl6ZQp9KTsKdmFyIHNwbGl0U3RyaW5nQXRMaW5lQnJlYWssIGpvaW5TdHJpbmdXaXRoTGluZUJyZWFrcywgY2xlYW5TdHJpbmdBcnJheSwgaW5kZW50LCBpbmRlbnRXaXRoUHJlZml4LCBub3JtYWxpemU7CnZhciBpbml0X3NtYXJ0c3RyaW5nX2luZGVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmluZGVudC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIHNwbGl0U3RyaW5nQXRMaW5lQnJlYWsgPSAoc3RyaW5nQXJnKSA9PiB7CiAgICAgIGxldCByZXN1bHRBcnJheSA9IHN0cmluZ0FyZy5zcGxpdCgiXG4iKTsKICAgICAgcmV0dXJuIGNsZWFuU3RyaW5nQXJyYXkocmVzdWx0QXJyYXkpOwogICAgfTsKICAgIGpvaW5TdHJpbmdXaXRoTGluZUJyZWFrcyA9IChzdHJpbmdBcnJheUFyZykgPT4gewogICAgICBsZXQgcmVzdWx0U3RyaW5nID0gIiI7CiAgICAgIGZvciAobGV0IGxpbmUgb2Ygc3RyaW5nQXJyYXlBcmcpIHsKICAgICAgICByZXN1bHRTdHJpbmcgPSByZXN1bHRTdHJpbmcgKyBsaW5lICsgIlxuIjsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0U3RyaW5nOwogICAgfTsKICAgIGNsZWFuU3RyaW5nQXJyYXkgPSAoc3RyaW5nQXJyYXlBcmcpID0+IHsKICAgICAgbGV0IHRlc3RSZWdleCA9IC9eW1xzXSokLzsKICAgICAgaWYgKHRlc3RSZWdleC50ZXN0KHN0cmluZ0FycmF5QXJnWzBdKSkgewogICAgICAgIHN0cmluZ0FycmF5QXJnLnNoaWZ0KCk7CiAgICAgIH0KICAgICAgaWYgKHRlc3RSZWdleC50ZXN0KHN0cmluZ0FycmF5QXJnW3N0cmluZ0FycmF5QXJnLmxlbmd0aCAtIDFdKSkgewogICAgICAgIHN0cmluZ0FycmF5QXJnLnBvcCgpOwogICAgICB9CiAgICAgIHJldHVybiBzdHJpbmdBcnJheUFyZzsKICAgIH07CiAgICBpbmRlbnQgPSAoc3RyaW5nQXJnLCBzcGFjZUFtb3VudCkgPT4gewogICAgICBsZXQgbG9jYWxTdHJpbmdBcnJheSA9IHNwbGl0U3RyaW5nQXRMaW5lQnJlYWsoc3RyaW5nQXJnKTsKICAgICAgZm9yIChsZXQgc3RyaW5nQXJnMiBvZiBsb2NhbFN0cmluZ0FycmF5KSB7CiAgICAgICAgc3RyaW5nQXJnMiA9ICIgIi5yZXBlYXQoc3BhY2VBbW91bnQpICsgc3RyaW5nQXJnMjsKICAgICAgfQogICAgICBsZXQgcmVzdWx0U3RyaW5nID0gam9pblN0cmluZ1dpdGhMaW5lQnJlYWtzKGxvY2FsU3RyaW5nQXJyYXkpOwogICAgICByZXR1cm4gcmVzdWx0U3RyaW5nOwogICAgfTsKICAgIGluZGVudFdpdGhQcmVmaXggPSAoc3RyaW5nQXJnLCBwcmVmaXhBcmcpID0+IHsKICAgICAgbGV0IHJlc3VsdFN0cmluZzsKICAgICAgbGV0IHN0cmluZ0FycmF5ID0gc3BsaXRTdHJpbmdBdExpbmVCcmVhayhzdHJpbmdBcmcpOwogICAgICBsZXQgcmVzdWx0QXJyYXkgPSBbXTsKICAgICAgZm9yIChsZXQgc3RyaW5nSXRlbSBvZiBzdHJpbmdBcnJheSkgewogICAgICAgIHJlc3VsdEFycmF5LnB1c2gocHJlZml4QXJnICsgc3RyaW5nSXRlbSk7CiAgICAgIH0KICAgICAgcmVzdWx0U3RyaW5nID0gam9pblN0cmluZ1dpdGhMaW5lQnJlYWtzKHJlc3VsdEFycmF5KTsKICAgICAgcmV0dXJuIHJlc3VsdFN0cmluZzsKICAgIH07CiAgICBub3JtYWxpemUgPSAoc3RyaW5nQXJnKSA9PiB7CiAgICAgIGxldCByZXN1bHRTdHJpbmc7CiAgICAgIGxldCBzcGxpdFN0cmluZ0FycmF5ID0gc3BsaXRTdHJpbmdBdExpbmVCcmVhayhzdHJpbmdBcmcpOwogICAgICBsZXQgbWluQ29tbW9uTGVmdE9mZnNldDsKICAgICAgY29uc3QgZGVJbmRlbnRSZWdleCA9IC9eKFxzKikvOwogICAgICBjb25zdCBlbXB0eUxpbmVSZWdleCA9IC9eKFxzKikkLzsKICAgICAgZm9yIChsZXQgc3RyaW5nSXRlbSBvZiBzcGxpdFN0cmluZ0FycmF5KSB7CiAgICAgICAgbGV0IG9mZnNldFN0cmluZyA9IGRlSW5kZW50UmVnZXguZXhlYyhzdHJpbmdJdGVtKVsxXTsKICAgICAgICBpZiAoKHR5cGVvZiBtaW5Db21tb25MZWZ0T2Zmc2V0ID09PSAidW5kZWZpbmVkIiB8fCBvZmZzZXRTdHJpbmcubGVuZ3RoIDwgbWluQ29tbW9uTGVmdE9mZnNldCkgJiYgIWVtcHR5TGluZVJlZ2V4LnRlc3Qoc3RyaW5nSXRlbSkpIHsKICAgICAgICAgIG1pbkNvbW1vbkxlZnRPZmZzZXQgPSBvZmZzZXRTdHJpbmcubGVuZ3RoOwogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgcmVzdWx0U3BsaXRTdHJpbmdBcnJheSA9IFtdOwogICAgICBmb3IgKGxldCBzdHJpbmdJdGVtIG9mIHNwbGl0U3RyaW5nQXJyYXkpIHsKICAgICAgICByZXN1bHRTcGxpdFN0cmluZ0FycmF5LnB1c2goc3RyaW5nSXRlbS5zdWJzdHIobWluQ29tbW9uTGVmdE9mZnNldCkpOwogICAgICB9CiAgICAgIHJlc3VsdFN0cmluZyA9IGpvaW5TdHJpbmdXaXRoTGluZUJyZWFrcyhyZXN1bHRTcGxpdFN0cmluZ0FycmF5KTsKICAgICAgcmV0dXJuIHJlc3VsdFN0cmluZzsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5ub3JtYWxpemUuanMKdmFyIHNtYXJ0c3RyaW5nX25vcm1hbGl6ZV9leHBvcnRzID0ge307Cl9fZXhwb3J0KHNtYXJ0c3RyaW5nX25vcm1hbGl6ZV9leHBvcnRzLCB7CiAgcmVwbGFjZUFsbDogKCkgPT4gcmVwbGFjZUFsbCwKICBzdGFuZGFyZDogKCkgPT4gc3RhbmRhcmQKfSk7CnZhciByZXBsYWNlQWxsLCBzdHJpcEluZGVudCwgc3RhbmRhcmQ7CnZhciBpbml0X3NtYXJ0c3RyaW5nX25vcm1hbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLm5vcm1hbGl6ZS5qcyIoKSB7CiAgICByZXBsYWNlQWxsID0gKHN0cmluZ0FyZywgc2VhcmNoUGF0dGVybiwgcmVwbGFjZW1lbnRTdHJpbmcpID0+IHsKICAgICAgcmV0dXJuIHN0cmluZ0FyZy5yZXBsYWNlKG5ldyBSZWdFeHAoc2VhcmNoUGF0dGVybiwgImciKSwgcmVwbGFjZW1lbnRTdHJpbmcpOwogICAgfTsKICAgIHN0cmlwSW5kZW50ID0gKHN0cikgPT4gewogICAgICBjb25zdCBsaW5lcyA9IHN0ci5zcGxpdCgiXG4iKTsKICAgICAgbGV0IG1pbkluZGVudCA9IEluZmluaXR5OwogICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHsKICAgICAgICBpZiAobGluZS50cmltKCkubGVuZ3RoID4gMCkgewogICAgICAgICAgY29uc3QgbWF0Y2gyID0gbGluZS5tYXRjaCgvXihccyopLyk7CiAgICAgICAgICBpZiAobWF0Y2gyKSB7CiAgICAgICAgICAgIG1pbkluZGVudCA9IE1hdGgubWluKG1pbkluZGVudCwgbWF0Y2gyWzFdLmxlbmd0aCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChtaW5JbmRlbnQgPT09IEluZmluaXR5IHx8IG1pbkluZGVudCA9PT0gMCkgewogICAgICAgIHJldHVybiBzdHI7CiAgICAgIH0KICAgICAgcmV0dXJuIGxpbmVzLm1hcCgobGluZSkgPT4gewogICAgICAgIGlmIChsaW5lLmxlbmd0aCA+PSBtaW5JbmRlbnQpIHsKICAgICAgICAgIHJldHVybiBsaW5lLnNsaWNlKG1pbkluZGVudCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaW5lOwogICAgICB9KS5qb2luKCJcbiIpOwogICAgfTsKICAgIHN0YW5kYXJkID0gKHN0cmluZ0FyZywgb3B0aW9ucykgPT4gewogICAgICBsZXQgcmVzdWx0ID0gc3RyaW5nQXJnOwogICAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5zdHJpcEluZGVudCkgewogICAgICAgIHJlc3VsdCA9IHN0cmlwSW5kZW50KHJlc3VsdCk7CiAgICAgIH0KICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMubm9ybWFsaXplTmV3bGluZSkgewogICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9cclxuL2csICJcbiIpOwogICAgICB9CiAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnJlcGxhY2VUYWJzKSB7CiAgICAgICAgcmVzdWx0ID0gcmVwbGFjZUFsbChyZXN1bHQsICIJLyIsICIgIik7CiAgICAgIH0KICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuc3RyaXBMZWFkaW5nVHJhaWxpbmdFbXB0eUxpbmVzKSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL15ccypbXHJcbl0vZ20sICIiKS5yZXBsYWNlKC9ccypbXHJcbl0kL2dtLCAiIik7CiAgICAgIH0KICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuc3RyaXBBbGxFbXB0eUxpbmVzKSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL15ccypbXHJcbl0vZ20sICIiKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmJhc2U2NC5qcwp2YXIgdW5pdmVyc2FsQmFzZTY0LCBCYXNlNjQsIGJhc2U2NDsKdmFyIGluaXRfc21hcnRzdHJpbmdfYmFzZTY0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcuYmFzZTY0LmpzIigpIHsKICAgIHVuaXZlcnNhbEJhc2U2NCA9IHsKICAgICAgZW5jb2RlOiAoc3RyKSA9PiB7CiAgICAgICAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLCAidXRmOCIpLnRvU3RyaW5nKCJiYXNlNjQiKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBidG9hICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgY29uc3QgdXRmOEJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0cik7CiAgICAgICAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSBBcnJheS5mcm9tKHV0ZjhCeXRlcywgKGJ5dGUpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZSkpLmpvaW4oIiIpOwogICAgICAgICAgcmV0dXJuIGJ0b2EoYmluYXJ5U3RyaW5nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzdHIpOwogICAgICAgICAgbGV0IHJlc3VsdCA9ICIiOwogICAgICAgICAgbGV0IGkxMSA9IDA7CiAgICAgICAgICB3aGlsZSAoaTExIDwgYnl0ZXMubGVuZ3RoKSB7CiAgICAgICAgICAgIGNvbnN0IGE1ID0gYnl0ZXNbaTExKytdOwogICAgICAgICAgICBjb25zdCBiNSA9IGkxMSA8IGJ5dGVzLmxlbmd0aCA/IGJ5dGVzW2kxMSsrXSA6IDA7CiAgICAgICAgICAgIGNvbnN0IGMxMSA9IGkxMSA8IGJ5dGVzLmxlbmd0aCA/IGJ5dGVzW2kxMSsrXSA6IDA7CiAgICAgICAgICAgIGNvbnN0IGJpdG1hcCA9IGE1IDw8IDE2IHwgYjUgPDwgOCB8IGMxMTsKICAgICAgICAgICAgcmVzdWx0ICs9IGNoYXJzLmNoYXJBdChiaXRtYXAgPj4gMTggJiA2Myk7CiAgICAgICAgICAgIHJlc3VsdCArPSBjaGFycy5jaGFyQXQoYml0bWFwID4+IDEyICYgNjMpOwogICAgICAgICAgICByZXN1bHQgKz0gaTExIC0gMiA8IGJ5dGVzLmxlbmd0aCA/IGNoYXJzLmNoYXJBdChiaXRtYXAgPj4gNiAmIDYzKSA6ICI9IjsKICAgICAgICAgICAgcmVzdWx0ICs9IGkxMSAtIDEgPCBieXRlcy5sZW5ndGggPyBjaGFycy5jaGFyQXQoYml0bWFwICYgNjMpIDogIj0iOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlY29kZTogKHN0cikgPT4gewogICAgICAgIGNvbnN0IGJhc2U2NFN0cmluZyA9IHN0ci5yZXBsYWNlKC8tL2csICIrIikucmVwbGFjZSgvXy9nLCAiLyIpLnBhZEVuZChzdHIubGVuZ3RoICsgKDQgLSBzdHIubGVuZ3RoICUgNCkgJSA0LCAiPSIpOwogICAgICAgIGlmICh0eXBlb2YgQnVmZmVyICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJhc2U2NFN0cmluZywgImJhc2U2NCIpLnRvU3RyaW5nKCJ1dGY4Iik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXRvYiAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIGNvbnN0IGJpbmFyeVN0cmluZyA9IGF0b2IoYmFzZTY0U3RyaW5nKTsKICAgICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYmluYXJ5U3RyaW5nLmxlbmd0aCk7CiAgICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBiaW5hcnlTdHJpbmcubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgICBieXRlc1tpMTFdID0gYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaTExKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYnl0ZXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBjaGFycyA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKICAgICAgICAgIGxldCBieXRlcyA9IFtdOwogICAgICAgICAgbGV0IGkxMSA9IDA7CiAgICAgICAgICB3aGlsZSAoaTExIDwgYmFzZTY0U3RyaW5nLmxlbmd0aCkgewogICAgICAgICAgICBjb25zdCBlbmNvZGVkMSA9IGNoYXJzLmluZGV4T2YoYmFzZTY0U3RyaW5nLmNoYXJBdChpMTErKykpOwogICAgICAgICAgICBjb25zdCBlbmNvZGVkMiA9IGNoYXJzLmluZGV4T2YoYmFzZTY0U3RyaW5nLmNoYXJBdChpMTErKykpOwogICAgICAgICAgICBjb25zdCBlbmNvZGVkMyA9IGNoYXJzLmluZGV4T2YoYmFzZTY0U3RyaW5nLmNoYXJBdChpMTErKykpOwogICAgICAgICAgICBjb25zdCBlbmNvZGVkNCA9IGNoYXJzLmluZGV4T2YoYmFzZTY0U3RyaW5nLmNoYXJBdChpMTErKykpOwogICAgICAgICAgICBjb25zdCBiaXRtYXAgPSBlbmNvZGVkMSA8PCAxOCB8IGVuY29kZWQyIDw8IDEyIHwgZW5jb2RlZDMgPDwgNiB8IGVuY29kZWQ0OwogICAgICAgICAgICBieXRlcy5wdXNoKGJpdG1hcCA+PiAxNiAmIDI1NSk7CiAgICAgICAgICAgIGlmIChlbmNvZGVkMyAhPT0gNjQpCiAgICAgICAgICAgICAgYnl0ZXMucHVzaChiaXRtYXAgPj4gOCAmIDI1NSk7CiAgICAgICAgICAgIGlmIChlbmNvZGVkNCAhPT0gNjQpCiAgICAgICAgICAgICAgYnl0ZXMucHVzaChiaXRtYXAgJiAyNTUpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShuZXcgVWludDhBcnJheShieXRlcykpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIEJhc2U2NCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoaW5wdXRTdHJpbmdBcmcsIHR5cGVBcmcpIHsKICAgICAgICBzd2l0Y2ggKHR5cGVBcmcpIHsKICAgICAgICAgIGNhc2UgInN0cmluZyI6CiAgICAgICAgICAgIHRoaXMucmVmU3RyaW5nID0gaW5wdXRTdHJpbmdBcmc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgICAgdGhpcy5yZWZTdHJpbmcgPSBiYXNlNjQuZGVjb2RlKGlucHV0U3RyaW5nQXJnKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJiYXNlNjR1cmkiOgogICAgICAgICAgICB0aGlzLnJlZlN0cmluZyA9IGJhc2U2NC5kZWNvZGUoaW5wdXRTdHJpbmdBcmcpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogdGhlIHNpbXBsZSBzdHJpbmcgKHVuZW5jb2RlZCkKICAgICAgICovCiAgICAgIGdldCBzaW1wbGVTdHJpbmcoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucmVmU3RyaW5nOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB0aGUgYmFzZTY0IGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwgc3RyaW5nCiAgICAgICAqLwogICAgICBnZXQgYmFzZTY0U3RyaW5nKCkgewogICAgICAgIHJldHVybiBiYXNlNjQuZW5jb2RlKHRoaXMucmVmU3RyaW5nKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogdGhlIGJhc2U2NHVyaSBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIG9yaWdpbmFsIHN0cmluZwogICAgICAgKi8KICAgICAgZ2V0IGJhc2U2NFVyaVN0cmluZygpIHsKICAgICAgICByZXR1cm4gYmFzZTY0LmVuY29kZVVyaSh0aGlzLnJlZlN0cmluZyk7CiAgICAgIH0KICAgIH07CiAgICBiYXNlNjQgPSB7CiAgICAgIC8qKgogICAgICAgKiBlbmNvZGVzIHRoZSBzdHJpbmcKICAgICAgICovCiAgICAgIGVuY29kZTogKHN0cmluZ0FyZykgPT4gewogICAgICAgIHJldHVybiB1bml2ZXJzYWxCYXNlNjQuZW5jb2RlKHN0cmluZ0FyZyk7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBlbmNvZGVzIGEgc3RyaW5nQXJnIHRvIGJhc2U2NCB1cmkgc3R5bGUKICAgICAgICovCiAgICAgIGVuY29kZVVyaTogKHN0cmluZ0FyZykgPT4gewogICAgICAgIHJldHVybiB1bml2ZXJzYWxCYXNlNjQuZW5jb2RlKHN0cmluZ0FyZykucmVwbGFjZSgvXCsvZywgIi0iKS5yZXBsYWNlKC9cLy9nLCAiXyIpLnJlcGxhY2UoLz0vZywgIiIpOwogICAgICB9LAogICAgICAvKioKICAgICAgICogZGVjb2RlcyBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZwogICAgICAgKi8KICAgICAgZGVjb2RlOiAoc3RyaW5nQXJnKSA9PiB7CiAgICAgICAgcmV0dXJuIHVuaXZlcnNhbEJhc2U2NC5kZWNvZGUoc3RyaW5nQXJnKTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBzdHJpbmdBcmcKICAgICAgICogY2hlY2tzIHdldGhlciB0aGUgc3RyaW5nIGlzIGJhc2U2NCBlbmNvZGVkCiAgICAgICAqLwogICAgICBpc0Jhc2U2NDogKHN0cmluZ0FyZykgPT4gewogICAgICAgIGNvbnN0IHJlZ2V4ID0gL14oW0EtWmEtejAtOSsvXXs0fSkqKFtBLVphLXowLTkrL117M309fFtBLVphLXowLTkrL117Mn09PSk/JC87CiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3Qoc3RyaW5nQXJnKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLnR5cGUuanMKdmFyIHNtYXJ0c3RyaW5nX3R5cGVfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChzbWFydHN0cmluZ190eXBlX2V4cG9ydHMsIHsKICBpc0Jhc2U2NDogKCkgPT4gaXNCYXNlNjQsCiAgaXNVdGY4OiAoKSA9PiBpc1V0ZjgKfSk7CnZhciBpc1V0ZjgsIGlzQmFzZTY0Owp2YXIgaW5pdF9zbWFydHN0cmluZ190eXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcudHlwZS5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIGluaXRfc21hcnRzdHJpbmdfYmFzZTY0KCk7CiAgICBpc1V0ZjggPSAoc3RyaW5nQXJnKSA9PiB7CiAgICAgIGNvbnN0IGVuY29kZXIyID0gbmV3IFRleHRFbmNvZGVyKCk7CiAgICAgIGNvbnN0IGJ5dGVzID0gZW5jb2RlcjIuZW5jb2RlKHN0cmluZ0FyZyk7CiAgICAgIGxldCBpMTEgPSAwOwogICAgICB3aGlsZSAoaTExIDwgYnl0ZXMubGVuZ3RoKSB7CiAgICAgICAgaWYgKAogICAgICAgICAgLy8gQVNDSUkKICAgICAgICAgIGJ5dGVzW2kxMV0gPT09IDkgfHwgYnl0ZXNbaTExXSA9PT0gMTAgfHwgYnl0ZXNbaTExXSA9PT0gMTMgfHwgMzIgPD0gYnl0ZXNbaTExXSAmJiBieXRlc1tpMTFdIDw9IDEyNgogICAgICAgICkgewogICAgICAgICAgaTExICs9IDE7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKAogICAgICAgICAgLy8gbm9uLW92ZXJsb25nIDItYnl0ZQogICAgICAgICAgMTk0IDw9IGJ5dGVzW2kxMV0gJiYgYnl0ZXNbaTExXSA8PSAyMjMgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDFdICYmIGJ5dGVzW2kxMSArIDFdIDw9IDE5MQogICAgICAgICkgewogICAgICAgICAgaTExICs9IDI7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKAogICAgICAgICAgLy8gZXhjbHVkaW5nIG92ZXJsb25ncwogICAgICAgICAgYnl0ZXNbaTExXSA9PT0gMjI0ICYmIDE2MCA8PSBieXRlc1tpMTEgKyAxXSAmJiBieXRlc1tpMTEgKyAxXSA8PSAxOTEgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDJdICYmIGJ5dGVzW2kxMSArIDJdIDw9IDE5MSB8fCAvLyBzdHJhaWdodCAzLWJ5dGUKICAgICAgICAgICgyMjUgPD0gYnl0ZXNbaTExXSAmJiBieXRlc1tpMTFdIDw9IDIzNiB8fCBieXRlc1tpMTFdID09PSAyMzggfHwgYnl0ZXNbaTExXSA9PT0gMjM5KSAmJiAxMjggPD0gYnl0ZXNbaTExICsgMV0gJiYgYnl0ZXNbaTExICsgMV0gPD0gMTkxICYmIDEyOCA8PSBieXRlc1tpMTEgKyAyXSAmJiBieXRlc1tpMTEgKyAyXSA8PSAxOTEgfHwgLy8gZXhjbHVkaW5nIHN1cnJvZ2F0ZXMKICAgICAgICAgIGJ5dGVzW2kxMV0gPT09IDIzNyAmJiAxMjggPD0gYnl0ZXNbaTExICsgMV0gJiYgYnl0ZXNbaTExICsgMV0gPD0gMTU5ICYmIDEyOCA8PSBieXRlc1tpMTEgKyAyXSAmJiBieXRlc1tpMTEgKyAyXSA8PSAxOTEKICAgICAgICApIHsKICAgICAgICAgIGkxMSArPSAzOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICgKICAgICAgICAgIC8vIHBsYW5lcyAxLTMKICAgICAgICAgIGJ5dGVzW2kxMV0gPT09IDI0MCAmJiAxNDQgPD0gYnl0ZXNbaTExICsgMV0gJiYgYnl0ZXNbaTExICsgMV0gPD0gMTkxICYmIDEyOCA8PSBieXRlc1tpMTEgKyAyXSAmJiBieXRlc1tpMTEgKyAyXSA8PSAxOTEgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDNdICYmIGJ5dGVzW2kxMSArIDNdIDw9IDE5MSB8fCAvLyBwbGFuZXMgNC0xNQogICAgICAgICAgMjQxIDw9IGJ5dGVzW2kxMV0gJiYgYnl0ZXNbaTExXSA8PSAyNDMgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDFdICYmIGJ5dGVzW2kxMSArIDFdIDw9IDE5MSAmJiAxMjggPD0gYnl0ZXNbaTExICsgMl0gJiYgYnl0ZXNbaTExICsgMl0gPD0gMTkxICYmIDEyOCA8PSBieXRlc1tpMTEgKyAzXSAmJiBieXRlc1tpMTEgKyAzXSA8PSAxOTEgfHwgLy8gcGxhbmUgMTYKICAgICAgICAgIGJ5dGVzW2kxMV0gPT09IDI0NCAmJiAxMjggPD0gYnl0ZXNbaTExICsgMV0gJiYgYnl0ZXNbaTExICsgMV0gPD0gMTQzICYmIDEyOCA8PSBieXRlc1tpMTEgKyAyXSAmJiBieXRlc1tpMTEgKyAyXSA8PSAxOTEgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDNdICYmIGJ5dGVzW2kxMSArIDNdIDw9IDE5MQogICAgICAgICkgewogICAgICAgICAgaTExICs9IDQ7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfTsKICAgIGlzQmFzZTY0ID0gKHN0cmluZ0FyZykgPT4gewogICAgICBjb25zdCBub3RCYXNlNjQgPSAvW15BLVowLTkrXC89XS9pOwogICAgICBjb25zdCBsZW4gPSBzdHJpbmdBcmcubGVuZ3RoOwogICAgICBpZiAoIWxlbiB8fCBsZW4gJSA0ICE9PSAwIHx8IG5vdEJhc2U2NC50ZXN0KHN0cmluZ0FyZykpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgY29uc3QgZmlyc3RQYWRkaW5nQ2hhciA9IHN0cmluZ0FyZy5pbmRleE9mKCI9Iik7CiAgICAgIHJldHVybiBmaXJzdFBhZGRpbmdDaGFyID09PSAtMSB8fCBmaXJzdFBhZGRpbmdDaGFyID09PSBsZW4gLSAxIHx8IGZpcnN0UGFkZGluZ0NoYXIgPT09IGxlbiAtIDIgJiYgc3RyaW5nQXJnW2xlbiAtIDFdID09PSAiPSI7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcuZG9tYWluLmpzCnZhciBEb21haW47CnZhciBpbml0X3NtYXJ0c3RyaW5nX2RvbWFpbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmRvbWFpbi5qcyIoKSB7CiAgICBEb21haW4gPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGRvbWFpblN0cmluZ0FyZykgewogICAgICAgIHRoaXMucHJvdG9jb2wgPSB0aGlzLl9wcm90b2NvbFJlZ2V4KGRvbWFpblN0cmluZ0FyZyk7CiAgICAgICAgaWYgKCF0aGlzLnByb3RvY29sKSB7CiAgICAgICAgICBkb21haW5TdHJpbmdBcmcgPSBgaHR0cHM6Ly8ke2RvbWFpblN0cmluZ0FyZ31gOwogICAgICAgIH0KICAgICAgICB0aGlzLm5vZGVQYXJzZWRVcmwgPSBuZXcgVVJMKGRvbWFpblN0cmluZ0FyZyk7CiAgICAgICAgdGhpcy5wb3J0ID0gdGhpcy5ub2RlUGFyc2VkVXJsLnBvcnQ7CiAgICAgICAgY29uc3QgcmVnZXhNYXRjaGVzID0gdGhpcy5fZG9tYWluUmVnZXgoZG9tYWluU3RyaW5nQXJnLnJlcGxhY2UodGhpcy5ub2RlUGFyc2VkVXJsLnBhdGhuYW1lLCAiIikpOwogICAgICAgIHRoaXMuZnVsbE5hbWUgPSAiIjsKICAgICAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gNTsgaTExKyspIHsKICAgICAgICAgIGlmIChyZWdleE1hdGNoZXNbaTExIC0gMV0pIHsKICAgICAgICAgICAgY29uc3QgbG9jYWxNYXRjaCA9IHJlZ2V4TWF0Y2hlc1tpMTEgLSAxXTsKICAgICAgICAgICAgdGhpc1sibGV2ZWwiICsgaTExLnRvU3RyaW5nKCldID0gbG9jYWxNYXRjaDsKICAgICAgICAgICAgaWYgKHRoaXMuZnVsbE5hbWUgPT09ICIiKSB7CiAgICAgICAgICAgICAgdGhpcy5mdWxsTmFtZSA9IGxvY2FsTWF0Y2g7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5mdWxsTmFtZSA9IGxvY2FsTWF0Y2ggKyAiLiIgKyB0aGlzLmZ1bGxOYW1lOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzWyJsZXZlbCIgKyBpMTEudG9TdHJpbmcoKV0gPSB2b2lkIDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuem9uZU5hbWUgPSB0aGlzLmxldmVsMiArICIuIiArIHRoaXMubGV2ZWwxOwogICAgICAgIHRoaXMudG9wTGV2ZWwgPSB0aGlzLmxldmVsMTsKICAgICAgICB0aGlzLmRvbWFpbk5hbWUgPSB0aGlzLmxldmVsMjsKICAgICAgICB0aGlzLnN1YkRvbWFpbiA9IHRoaXMubGV2ZWwzOwogICAgICB9CiAgICAgIC8vIGhlbHBlciBmdW5jdGlvbnMKICAgICAgLyoqICovCiAgICAgIF9kb21haW5SZWdleChzdHJpbmdBcmcpIHsKICAgICAgICBjb25zdCByZWdleFN0cmluZyA9IC8oW2EtekEtWjAtOVwtXF9dKilcLnswLDF9KFthLXpBLVowLTlcLVxfXSopXC57MCwxfShbYS16QS1aMC05XC1cX10qKVwuezAsMX0oW2EtekEtWjAtOVwtXF9dKilcLnswLDF9KFthLXpBLVowLTlcLVxfXSopXC57MCwxfSQvOwogICAgICAgIGNvbnN0IHJlZ2V4TWF0Y2hlcyA9IHJlZ2V4U3RyaW5nLmV4ZWMoc3RyaW5nQXJnKTsKICAgICAgICByZWdleE1hdGNoZXMucmV2ZXJzZSgpOwogICAgICAgIHJlZ2V4TWF0Y2hlcy5wb3AoKTsKICAgICAgICBjb25zdCByZWdleE1hdGNoZXNGaWx0ZXJlZCA9IHJlZ2V4TWF0Y2hlcy5maWx0ZXIoZnVuY3Rpb24oc3RyaW5nQXJnMikgewogICAgICAgICAgcmV0dXJuIHN0cmluZ0FyZzIgIT09ICIiOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiByZWdleE1hdGNoZXNGaWx0ZXJlZDsKICAgICAgfQogICAgICBfcHJvdG9jb2xSZWdleChzdHJpbmdBcmcpIHsKICAgICAgICBjb25zdCByZWdleFN0cmluZyA9IC9eKFthLXpBLVowLTldKik6XC9cLy87CiAgICAgICAgY29uc3QgcmVnZXhNYXRjaGVzID0gcmVnZXhTdHJpbmcuZXhlYyhzdHJpbmdBcmcpOwogICAgICAgIGlmIChyZWdleE1hdGNoZXMpIHsKICAgICAgICAgIHJldHVybiByZWdleE1hdGNoZXNbMV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgICAgfQogICAgICB9CiAgICAgIF9wb3J0UmVnZXgoc3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3QgcmVnZXhTdHJpbmcgPSAvXihbYS16QS1aMC05XSopOlwvXC8vOwogICAgICAgIGNvbnN0IHJlZ2V4TWF0Y2hlcyA9IHJlZ2V4U3RyaW5nLmV4ZWMoc3RyaW5nQXJnKTsKICAgICAgICBpZiAocmVnZXhNYXRjaGVzKSB7CiAgICAgICAgICByZXR1cm4gcmVnZXhNYXRjaGVzWzFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmdpdC5qcwp2YXIgR2l0UmVwbywgZ2l0UmVnZXgsIGdpdExpbms7CnZhciBpbml0X3NtYXJ0c3RyaW5nX2dpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmdpdC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIEdpdFJlcG8gPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHN0cmluZ0FyZywgdG9rZW5BcmcpIHsKICAgICAgICBsZXQgcmVnZXhNYXRjaGVzID0gZ2l0UmVnZXgoc3RyaW5nQXJnKTsKICAgICAgICB0aGlzLmhvc3QgPSByZWdleE1hdGNoZXNbMV07CiAgICAgICAgdGhpcy51c2VyID0gcmVnZXhNYXRjaGVzWzJdOwogICAgICAgIHRoaXMucmVwbyA9IHJlZ2V4TWF0Y2hlc1szXTsKICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gdG9rZW5Bcmc7CiAgICAgICAgdGhpcy5zc2hVcmwgPSBnaXRMaW5rKHRoaXMuaG9zdCwgdGhpcy51c2VyLCB0aGlzLnJlcG8sIHRoaXMuYWNjZXNzVG9rZW4sICJzc2giKTsKICAgICAgICB0aGlzLmh0dHBzVXJsID0gZ2l0TGluayh0aGlzLmhvc3QsIHRoaXMudXNlciwgdGhpcy5yZXBvLCB0aGlzLmFjY2Vzc1Rva2VuLCAiaHR0cHMiKTsKICAgICAgfQogICAgfTsKICAgIGdpdFJlZ2V4ID0gZnVuY3Rpb24oc3RyaW5nQXJnKSB7CiAgICAgIGNvbnN0IHJlZ2V4U3RyaW5nID0gLyhbYS16QS1aMC05XC1fXC5dKikoPzpcL3xcOikoW2EtekEtWjAtOVwtX1wuXSopKD86XC8pKFthLXpBLVowLTlcLV9cLl0qKSg/OlwuZ2l0KS87CiAgICAgIGxldCByZWdleE1hdGNoZXMgPSByZWdleFN0cmluZy5leGVjKHN0cmluZ0FyZyk7CiAgICAgIHJldHVybiByZWdleE1hdGNoZXM7CiAgICB9OwogICAgZ2l0TGluayA9IGZ1bmN0aW9uKGhvc3RBcmcsIHVzZXJBcmcsIHJlcG9BcmcsIHRva2VuQXJnID0gIiIsIGxpbmtUeXBlQXJnKSB7CiAgICAgIGxldCByZXR1cm5TdHJpbmc7CiAgICAgIGlmICh0b2tlbkFyZyAhPT0gIiIpIHsKICAgICAgICB0b2tlbkFyZyA9IHRva2VuQXJnICsgIkAiOwogICAgICB9CiAgICAgIHN3aXRjaCAobGlua1R5cGVBcmcpIHsKICAgICAgICBjYXNlICJodHRwcyI6CiAgICAgICAgICByZXR1cm5TdHJpbmcgPSAiaHR0cHM6Ly8iICsgdG9rZW5BcmcgKyBob3N0QXJnICsgIi8iICsgdXNlckFyZyArICIvIiArIHJlcG9BcmcgKyAiLmdpdCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJzc2giOgogICAgICAgICAgcmV0dXJuU3RyaW5nID0gImdpdEAiICsgaG9zdEFyZyArICI6IiArIHVzZXJBcmcgKyAiLyIgKyByZXBvQXJnICsgIi5naXQiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkxpbmsgVHlwZSAiICsgbGlua1R5cGVBcmcgKyAiIG5vdCBrbm93biIpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcmV0dXJuIHJldHVyblN0cmluZzsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTEgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTEsIHsKICBCYXNlNjQ6ICgpID0+IEJhc2U2NCwKICBEb21haW46ICgpID0+IERvbWFpbiwKICBHaXRSZXBvOiAoKSA9PiBHaXRSZXBvLAogIGJhc2U2NDogKCkgPT4gYmFzZTY0LAogIGNyZWF0ZTogKCkgPT4gc21hcnRzdHJpbmdfY3JlYXRlX2V4cG9ydHMsCiAgZG9ja2VyOiAoKSA9PiBzbWFydHN0cmluZ19kb2NrZXJfZXhwb3J0cywKICBpbmRlbnQ6ICgpID0+IHNtYXJ0c3RyaW5nX2luZGVudF9leHBvcnRzLAogIG5vcm1hbGl6ZTogKCkgPT4gc21hcnRzdHJpbmdfbm9ybWFsaXplX2V4cG9ydHMsCiAgdHlwZTogKCkgPT4gc21hcnRzdHJpbmdfdHlwZV9leHBvcnRzCn0pOwp2YXIgaW5pdF9kaXN0X3RzMTEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX2NyZWF0ZSgpOwogICAgaW5pdF9zbWFydHN0cmluZ19kb2NrZXIoKTsKICAgIGluaXRfc21hcnRzdHJpbmdfaW5kZW50KCk7CiAgICBpbml0X3NtYXJ0c3RyaW5nX25vcm1hbGl6ZSgpOwogICAgaW5pdF9zbWFydHN0cmluZ190eXBlKCk7CiAgICBpbml0X3NtYXJ0c3RyaW5nX2Jhc2U2NCgpOwogICAgaW5pdF9zbWFydHN0cmluZ19kb21haW4oKTsKICAgIGluaXRfc21hcnRzdHJpbmdfZ2l0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2guY2xvbmVkZWVwQDQuNS4wL25vZGVfbW9kdWxlcy9sb2Rhc2guY2xvbmVkZWVwL2luZGV4LmpzCnZhciByZXF1aXJlX2xvZGFzaCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLmNsb25lZGVlcEA0LjUuMC9ub2RlX21vZHVsZXMvbG9kYXNoLmNsb25lZGVlcC9pbmRleC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICB2YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDsKICAgIHZhciBIQVNIX1VOREVGSU5FRCA9ICJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjsKICAgIHZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTsKICAgIHZhciBhcmdzVGFnID0gIltvYmplY3QgQXJndW1lbnRzXSIsIGFycmF5VGFnID0gIltvYmplY3QgQXJyYXldIiwgYm9vbFRhZyA9ICJbb2JqZWN0IEJvb2xlYW5dIiwgZGF0ZVRhZyA9ICJbb2JqZWN0IERhdGVdIiwgZXJyb3JUYWcgPSAiW29iamVjdCBFcnJvcl0iLCBmdW5jVGFnID0gIltvYmplY3QgRnVuY3Rpb25dIiwgZ2VuVGFnID0gIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIiwgbWFwVGFnID0gIltvYmplY3QgTWFwXSIsIG51bWJlclRhZyA9ICJbb2JqZWN0IE51bWJlcl0iLCBvYmplY3RUYWcgPSAiW29iamVjdCBPYmplY3RdIiwgcHJvbWlzZVRhZyA9ICJbb2JqZWN0IFByb21pc2VdIiwgcmVnZXhwVGFnID0gIltvYmplY3QgUmVnRXhwXSIsIHNldFRhZyA9ICJbb2JqZWN0IFNldF0iLCBzdHJpbmdUYWcgPSAiW29iamVjdCBTdHJpbmddIiwgc3ltYm9sVGFnID0gIltvYmplY3QgU3ltYm9sXSIsIHdlYWtNYXBUYWcgPSAiW29iamVjdCBXZWFrTWFwXSI7CiAgICB2YXIgYXJyYXlCdWZmZXJUYWcgPSAiW29iamVjdCBBcnJheUJ1ZmZlcl0iLCBkYXRhVmlld1RhZyA9ICJbb2JqZWN0IERhdGFWaWV3XSIsIGZsb2F0MzJUYWcgPSAiW29iamVjdCBGbG9hdDMyQXJyYXldIiwgZmxvYXQ2NFRhZyA9ICJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLCBpbnQ4VGFnID0gIltvYmplY3QgSW50OEFycmF5XSIsIGludDE2VGFnID0gIltvYmplY3QgSW50MTZBcnJheV0iLCBpbnQzMlRhZyA9ICJbb2JqZWN0IEludDMyQXJyYXldIiwgdWludDhUYWcgPSAiW29iamVjdCBVaW50OEFycmF5XSIsIHVpbnQ4Q2xhbXBlZFRhZyA9ICJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsIHVpbnQxNlRhZyA9ICJbb2JqZWN0IFVpbnQxNkFycmF5XSIsIHVpbnQzMlRhZyA9ICJbb2JqZWN0IFVpbnQzMkFycmF5XSI7CiAgICB2YXIgcmVSZWdFeHBDaGFyID0gL1tcXF4kLiorPygpW1xde318XS9nOwogICAgdmFyIHJlRmxhZ3MgPSAvXHcqJC87CiAgICB2YXIgcmVJc0hvc3RDdG9yID0gL15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC87CiAgICB2YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cZCopJC87CiAgICB2YXIgY2xvbmVhYmxlVGFncyA9IHt9OwogICAgY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID0gY2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGFWaWV3VGFnXSA9IGNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGVUYWddID0gY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDhUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9IGNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9IGNsb25lYWJsZVRhZ3NbcmVnZXhwVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc2V0VGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MzJUYWddID0gdHJ1ZTsKICAgIGNsb25lYWJsZVRhZ3NbZXJyb3JUYWddID0gY2xvbmVhYmxlVGFnc1tmdW5jVGFnXSA9IGNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTsKICAgIHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAib2JqZWN0IiAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDsKICAgIHZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICJvYmplY3QiICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmOwogICAgdmFyIHJvb3Q2ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOwogICAgdmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzOwogICAgdmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTsKICAgIHZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzOwogICAgZnVuY3Rpb24gYWRkTWFwRW50cnkobWFwNywgcGFpcikgewogICAgICBtYXA3LnNldChwYWlyWzBdLCBwYWlyWzFdKTsKICAgICAgcmV0dXJuIG1hcDc7CiAgICB9CiAgICBmdW5jdGlvbiBhZGRTZXRFbnRyeShzZXQzLCB2YWx1ZTIpIHsKICAgICAgc2V0My5hZGQodmFsdWUyKTsKICAgICAgcmV0dXJuIHNldDM7CiAgICB9CiAgICBmdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7CiAgICAgIHZhciBpbmRleDIgPSAtMSwgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBsZW5ndGgpIHsKICAgICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbaW5kZXgyXSwgaW5kZXgyLCBhcnJheSkgPT09IGZhbHNlKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGFycmF5OwogICAgfQogICAgZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLCBvZmZzZXQgPSBhcnJheS5sZW5ndGg7CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IGxlbmd0aCkgewogICAgICAgIGFycmF5W29mZnNldCArIGluZGV4Ml0gPSB2YWx1ZXNbaW5kZXgyXTsKICAgICAgfQogICAgICByZXR1cm4gYXJyYXk7CiAgICB9CiAgICBmdW5jdGlvbiBhcnJheVJlZHVjZShhcnJheSwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0pIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7CiAgICAgIGlmIChpbml0QWNjdW0gJiYgbGVuZ3RoKSB7CiAgICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVsrK2luZGV4Ml07CiAgICAgIH0KICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXgyXSwgaW5kZXgyLCBhcnJheSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwogICAgfQogICAgZnVuY3Rpb24gYmFzZVRpbWVzKG4xMywgaXRlcmF0ZWUpIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCByZXN1bHQgPSBBcnJheShuMTMpOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBuMTMpIHsKICAgICAgICByZXN1bHRbaW5kZXgyXSA9IGl0ZXJhdGVlKGluZGV4Mik7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5MikgewogICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB2b2lkIDAgOiBvYmplY3Rba2V5Ml07CiAgICB9CiAgICBmdW5jdGlvbiBpc0hvc3RPYmplY3QodmFsdWUyKSB7CiAgICAgIHZhciByZXN1bHQgPSBmYWxzZTsKICAgICAgaWYgKHZhbHVlMiAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZTIudG9TdHJpbmcgIT0gImZ1bmN0aW9uIikgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXN1bHQgPSAhISh2YWx1ZTIgKyAiIik7CiAgICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBtYXBUb0FycmF5KG1hcDcpIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCByZXN1bHQgPSBBcnJheShtYXA3LnNpemUpOwogICAgICBtYXA3LmZvckVhY2goZnVuY3Rpb24odmFsdWUyLCBrZXkyKSB7CiAgICAgICAgcmVzdWx0WysraW5kZXgyXSA9IFtrZXkyLCB2YWx1ZTJdOwogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtMikgewogICAgICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7CiAgICAgICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtMihhcmcpKTsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0MykgewogICAgICB2YXIgaW5kZXgyID0gLTEsIHJlc3VsdCA9IEFycmF5KHNldDMuc2l6ZSk7CiAgICAgIHNldDMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICByZXN1bHRbKytpbmRleDJdID0gdmFsdWUyOwogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLCBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTsKICAgIHZhciBjb3JlSnNEYXRhID0gcm9vdDZbIl9fY29yZS1qc19zaGFyZWRfXyJdOwogICAgdmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7CiAgICAgIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAiIik7CiAgICAgIHJldHVybiB1aWQgPyAiU3ltYm9sKHNyYylfMS4iICsgdWlkIDogIiI7CiAgICB9KSgpOwogICAgdmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZzsKICAgIHZhciBoYXNPd25Qcm9wZXJ0eTMgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTsKICAgIHZhciBvYmplY3RUb1N0cmluZzIgPSBvYmplY3RQcm90by50b1N0cmluZzsKICAgIHZhciByZUlzTmF0aXZlID0gUmVnRXhwKAogICAgICAiXiIgKyBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eTMpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csICIkMS4qPyIpICsgIiQiCiAgICApOwogICAgdmFyIEJ1ZmZlcjIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdDYuQnVmZmVyIDogdm9pZCAwLCBTeW1ib2wyID0gcm9vdDYuU3ltYm9sLCBVaW50OEFycmF5MiA9IHJvb3Q2LlVpbnQ4QXJyYXksIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpLCBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlLCBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlLCBzcGxpY2UyID0gYXJyYXlQcm90by5zcGxpY2U7CiAgICB2YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyMiA/IEJ1ZmZlcjIuaXNCdWZmZXIgOiB2b2lkIDAsIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpOwogICAgdmFyIERhdGFWaWV3MiA9IGdldE5hdGl2ZShyb290NiwgIkRhdGFWaWV3IiksIE1hcDIgPSBnZXROYXRpdmUocm9vdDYsICJNYXAiKSwgUHJvbWlzZTIgPSBnZXROYXRpdmUocm9vdDYsICJQcm9taXNlIiksIFNldDIgPSBnZXROYXRpdmUocm9vdDYsICJTZXQiKSwgV2Vha01hcDIgPSBnZXROYXRpdmUocm9vdDYsICJXZWFrTWFwIiksIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICJjcmVhdGUiKTsKICAgIHZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldzIpLCBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwMiksIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZTIpLCBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0MiksIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcDIpOwogICAgdmFyIHN5bWJvbFByb3RvID0gU3ltYm9sMiA/IFN5bWJvbDIucHJvdG90eXBlIDogdm9pZCAwLCBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdm9pZCAwOwogICAgZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7CiAgICAgIHZhciBpbmRleDIgPSAtMSwgbGVuZ3RoID0gZW50cmllcyA/IGVudHJpZXMubGVuZ3RoIDogMDsKICAgICAgdGhpcy5jbGVhcigpOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBsZW5ndGgpIHsKICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4Ml07CiAgICAgICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gaGFzaENsZWFyKCkgewogICAgICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307CiAgICB9CiAgICBmdW5jdGlvbiBoYXNoRGVsZXRlKGtleTIpIHsKICAgICAgcmV0dXJuIHRoaXMuaGFzKGtleTIpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleTJdOwogICAgfQogICAgZnVuY3Rpb24gaGFzaEdldChrZXkyKSB7CiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXzsKICAgICAgaWYgKG5hdGl2ZUNyZWF0ZSkgewogICAgICAgIHZhciByZXN1bHQgPSBkYXRhW2tleTJdOwogICAgICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdm9pZCAwIDogcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBoYXNPd25Qcm9wZXJ0eTMuY2FsbChkYXRhLCBrZXkyKSA/IGRhdGFba2V5Ml0gOiB2b2lkIDA7CiAgICB9CiAgICBmdW5jdGlvbiBoYXNoSGFzKGtleTIpIHsKICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fOwogICAgICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gZGF0YVtrZXkyXSAhPT0gdm9pZCAwIDogaGFzT3duUHJvcGVydHkzLmNhbGwoZGF0YSwga2V5Mik7CiAgICB9CiAgICBmdW5jdGlvbiBoYXNoU2V0KGtleTIsIHZhbHVlMikgewogICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187CiAgICAgIGRhdGFba2V5Ml0gPSBuYXRpdmVDcmVhdGUgJiYgdmFsdWUyID09PSB2b2lkIDAgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlMjsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBIYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjsKICAgIEhhc2gucHJvdG90eXBlWyJkZWxldGUiXSA9IGhhc2hEZWxldGU7CiAgICBIYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0OwogICAgSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhczsKICAgIEhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7CiAgICBmdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykgewogICAgICB2YXIgaW5kZXgyID0gLTEsIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7CiAgICAgIHRoaXMuY2xlYXIoKTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleDJdOwogICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkgewogICAgICB0aGlzLl9fZGF0YV9fID0gW107CiAgICB9CiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5MikgewogICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sIGluZGV4MiA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkyKTsKICAgICAgaWYgKGluZGV4MiA8IDApIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTsKICAgICAgaWYgKGluZGV4MiA9PSBsYXN0SW5kZXgpIHsKICAgICAgICBkYXRhLnBvcCgpOwogICAgICB9IGVsc2UgewogICAgICAgIHNwbGljZTIuY2FsbChkYXRhLCBpbmRleDIsIDEpOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleTIpIHsKICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLCBpbmRleDIgPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5Mik7CiAgICAgIHJldHVybiBpbmRleDIgPCAwID8gdm9pZCAwIDogZGF0YVtpbmRleDJdWzFdOwogICAgfQogICAgZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleTIpIHsKICAgICAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkyKSA+IC0xOwogICAgfQogICAgZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleTIsIHZhbHVlMikgewogICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sIGluZGV4MiA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkyKTsKICAgICAgaWYgKGluZGV4MiA8IDApIHsKICAgICAgICBkYXRhLnB1c2goW2tleTIsIHZhbHVlMl0pOwogICAgICB9IGVsc2UgewogICAgICAgIGRhdGFbaW5kZXgyXVsxXSA9IHZhbHVlMjsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIExpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjsKICAgIExpc3RDYWNoZS5wcm90b3R5cGVbImRlbGV0ZSJdID0gbGlzdENhY2hlRGVsZXRlOwogICAgTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7CiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhczsKICAgIExpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0OwogICAgZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykgewogICAgICB2YXIgaW5kZXgyID0gLTEsIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7CiAgICAgIHRoaXMuY2xlYXIoKTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleDJdOwogICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7CiAgICAgIHRoaXMuX19kYXRhX18gPSB7CiAgICAgICAgImhhc2giOiBuZXcgSGFzaCgpLAogICAgICAgICJtYXAiOiBuZXcgKE1hcDIgfHwgTGlzdENhY2hlKSgpLAogICAgICAgICJzdHJpbmciOiBuZXcgSGFzaCgpCiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkyKSB7CiAgICAgIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleTIpWyJkZWxldGUiXShrZXkyKTsKICAgIH0KICAgIGZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleTIpIHsKICAgICAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5MikuZ2V0KGtleTIpOwogICAgfQogICAgZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5MikgewogICAgICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkyKS5oYXMoa2V5Mik7CiAgICB9CiAgICBmdW5jdGlvbiBtYXBDYWNoZVNldChrZXkyLCB2YWx1ZTIpIHsKICAgICAgZ2V0TWFwRGF0YSh0aGlzLCBrZXkyKS5zZXQoa2V5MiwgdmFsdWUyKTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBNYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyOwogICAgTWFwQ2FjaGUucHJvdG90eXBlWyJkZWxldGUiXSA9IG1hcENhY2hlRGVsZXRlOwogICAgTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0OwogICAgTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzOwogICAgTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0OwogICAgZnVuY3Rpb24gU3RhY2soZW50cmllcykgewogICAgICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTsKICAgIH0KICAgIGZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7CiAgICAgIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKCk7CiAgICB9CiAgICBmdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkyKSB7CiAgICAgIHJldHVybiB0aGlzLl9fZGF0YV9fWyJkZWxldGUiXShrZXkyKTsKICAgIH0KICAgIGZ1bmN0aW9uIHN0YWNrR2V0KGtleTIpIHsKICAgICAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleTIpOwogICAgfQogICAgZnVuY3Rpb24gc3RhY2tIYXMoa2V5MikgewogICAgICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5Mik7CiAgICB9CiAgICBmdW5jdGlvbiBzdGFja1NldChrZXkyLCB2YWx1ZTIpIHsKICAgICAgdmFyIGNhY2hlID0gdGhpcy5fX2RhdGFfXzsKICAgICAgaWYgKGNhY2hlIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7CiAgICAgICAgdmFyIHBhaXJzMiA9IGNhY2hlLl9fZGF0YV9fOwogICAgICAgIGlmICghTWFwMiB8fCBwYWlyczIubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpIHsKICAgICAgICAgIHBhaXJzMi5wdXNoKFtrZXkyLCB2YWx1ZTJdKTsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgICBjYWNoZSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGUocGFpcnMyKTsKICAgICAgfQogICAgICBjYWNoZS5zZXQoa2V5MiwgdmFsdWUyKTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBTdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyOwogICAgU3RhY2sucHJvdG90eXBlWyJkZWxldGUiXSA9IHN0YWNrRGVsZXRlOwogICAgU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0OwogICAgU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzOwogICAgU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0OwogICAgZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZTIsIGluaGVyaXRlZCkgewogICAgICB2YXIgcmVzdWx0ID0gaXNBcnJheTModmFsdWUyKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZTIpID8gYmFzZVRpbWVzKHZhbHVlMi5sZW5ndGgsIFN0cmluZykgOiBbXTsKICAgICAgdmFyIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGgsIHNraXBJbmRleGVzID0gISFsZW5ndGg7CiAgICAgIGZvciAodmFyIGtleTIgaW4gdmFsdWUyKSB7CiAgICAgICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkzLmNhbGwodmFsdWUyLCBrZXkyKSkgJiYgIShza2lwSW5kZXhlcyAmJiAoa2V5MiA9PSAibGVuZ3RoIiB8fCBpc0luZGV4KGtleTIsIGxlbmd0aCkpKSkgewogICAgICAgICAgcmVzdWx0LnB1c2goa2V5Mik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleTIsIHZhbHVlMikgewogICAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5Ml07CiAgICAgIGlmICghKGhhc093blByb3BlcnR5My5jYWxsKG9iamVjdCwga2V5MikgJiYgZXEob2JqVmFsdWUsIHZhbHVlMikpIHx8IHZhbHVlMiA9PT0gdm9pZCAwICYmICEoa2V5MiBpbiBvYmplY3QpKSB7CiAgICAgICAgb2JqZWN0W2tleTJdID0gdmFsdWUyOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleTIpIHsKICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsKICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CiAgICAgICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleTIpKSB7CiAgICAgICAgICByZXR1cm4gbGVuZ3RoOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7CiAgICAgIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXMyKHNvdXJjZSksIG9iamVjdCk7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUyLCBpc0RlZXAsIGlzRnVsbCwgY3VzdG9taXplciwga2V5Miwgb2JqZWN0LCBzdGFjaykgewogICAgICB2YXIgcmVzdWx0OwogICAgICBpZiAoY3VzdG9taXplcikgewogICAgICAgIHJlc3VsdCA9IG9iamVjdCA/IGN1c3RvbWl6ZXIodmFsdWUyLCBrZXkyLCBvYmplY3QsIHN0YWNrKSA6IGN1c3RvbWl6ZXIodmFsdWUyKTsKICAgICAgfQogICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIGlmICghaXNPYmplY3QzKHZhbHVlMikpIHsKICAgICAgICByZXR1cm4gdmFsdWUyOwogICAgICB9CiAgICAgIHZhciBpc0FyciA9IGlzQXJyYXkzKHZhbHVlMik7CiAgICAgIGlmIChpc0FycikgewogICAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUFycmF5KHZhbHVlMik7CiAgICAgICAgaWYgKCFpc0RlZXApIHsKICAgICAgICAgIHJldHVybiBjb3B5QXJyYXkodmFsdWUyLCByZXN1bHQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlMiksIGlzRnVuYyA9IHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7CiAgICAgICAgaWYgKGlzQnVmZmVyKHZhbHVlMikpIHsKICAgICAgICAgIHJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZTIsIGlzRGVlcCk7CiAgICAgICAgfQogICAgICAgIGlmICh0YWcgPT0gb2JqZWN0VGFnIHx8IHRhZyA9PSBhcmdzVGFnIHx8IGlzRnVuYyAmJiAhb2JqZWN0KSB7CiAgICAgICAgICBpZiAoaXNIb3N0T2JqZWN0KHZhbHVlMikpIHsKICAgICAgICAgICAgcmV0dXJuIG9iamVjdCA/IHZhbHVlMiA6IHt9OwogICAgICAgICAgfQogICAgICAgICAgcmVzdWx0ID0gaW5pdENsb25lT2JqZWN0KGlzRnVuYyA/IHt9IDogdmFsdWUyKTsKICAgICAgICAgIGlmICghaXNEZWVwKSB7CiAgICAgICAgICAgIHJldHVybiBjb3B5U3ltYm9scyh2YWx1ZTIsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZTIpKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKCFjbG9uZWFibGVUYWdzW3RhZ10pIHsKICAgICAgICAgICAgcmV0dXJuIG9iamVjdCA/IHZhbHVlMiA6IHt9OwogICAgICAgICAgfQogICAgICAgICAgcmVzdWx0ID0gaW5pdENsb25lQnlUYWcodmFsdWUyLCB0YWcsIGJhc2VDbG9uZSwgaXNEZWVwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKCkpOwogICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZTIpOwogICAgICBpZiAoc3RhY2tlZCkgewogICAgICAgIHJldHVybiBzdGFja2VkOwogICAgICB9CiAgICAgIHN0YWNrLnNldCh2YWx1ZTIsIHJlc3VsdCk7CiAgICAgIGlmICghaXNBcnIpIHsKICAgICAgICB2YXIgcHJvcHMgPSBpc0Z1bGwgPyBnZXRBbGxLZXlzKHZhbHVlMikgOiBrZXlzMih2YWx1ZTIpOwogICAgICB9CiAgICAgIGFycmF5RWFjaChwcm9wcyB8fCB2YWx1ZTIsIGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkzKSB7CiAgICAgICAgaWYgKHByb3BzKSB7CiAgICAgICAgICBrZXkzID0gc3ViVmFsdWU7CiAgICAgICAgICBzdWJWYWx1ZSA9IHZhbHVlMltrZXkzXTsKICAgICAgICB9CiAgICAgICAgYXNzaWduVmFsdWUocmVzdWx0LCBrZXkzLCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGlzRGVlcCwgaXNGdWxsLCBjdXN0b21pemVyLCBrZXkzLCB2YWx1ZTIsIHN0YWNrKSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gYmFzZUNyZWF0ZShwcm90bykgewogICAgICByZXR1cm4gaXNPYmplY3QzKHByb3RvKSA/IG9iamVjdENyZWF0ZShwcm90bykgOiB7fTsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7CiAgICAgIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpOwogICAgICByZXR1cm4gaXNBcnJheTMob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpOwogICAgfQogICAgZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZTIpIHsKICAgICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nMi5jYWxsKHZhbHVlMik7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUyKSB7CiAgICAgIGlmICghaXNPYmplY3QzKHZhbHVlMikgfHwgaXNNYXNrZWQodmFsdWUyKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24yKHZhbHVlMikgfHwgaXNIb3N0T2JqZWN0KHZhbHVlMikgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yOwogICAgICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlMikpOwogICAgfQogICAgZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7CiAgICAgIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkgewogICAgICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7CiAgICAgIH0KICAgICAgdmFyIHJlc3VsdCA9IFtdOwogICAgICBmb3IgKHZhciBrZXkyIGluIE9iamVjdChvYmplY3QpKSB7CiAgICAgICAgaWYgKGhhc093blByb3BlcnR5My5jYWxsKG9iamVjdCwga2V5MikgJiYga2V5MiAhPSAiY29uc3RydWN0b3IiKSB7CiAgICAgICAgICByZXN1bHQucHVzaChrZXkyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlcjIsIGlzRGVlcCkgewogICAgICBpZiAoaXNEZWVwKSB7CiAgICAgICAgcmV0dXJuIGJ1ZmZlcjIuc2xpY2UoKTsKICAgICAgfQogICAgICB2YXIgcmVzdWx0ID0gbmV3IGJ1ZmZlcjIuY29uc3RydWN0b3IoYnVmZmVyMi5sZW5ndGgpOwogICAgICBidWZmZXIyLmNvcHkocmVzdWx0KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHsKICAgICAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTsKICAgICAgbmV3IFVpbnQ4QXJyYXkyKHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5MihhcnJheUJ1ZmZlcikpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gY2xvbmVEYXRhVmlldyhkYXRhVmlldywgaXNEZWVwKSB7CiAgICAgIHZhciBidWZmZXIyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcihkYXRhVmlldy5idWZmZXIpIDogZGF0YVZpZXcuYnVmZmVyOwogICAgICByZXR1cm4gbmV3IGRhdGFWaWV3LmNvbnN0cnVjdG9yKGJ1ZmZlcjIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpOwogICAgfQogICAgZnVuY3Rpb24gY2xvbmVNYXAobWFwNywgaXNEZWVwLCBjbG9uZUZ1bmMpIHsKICAgICAgdmFyIGFycmF5ID0gaXNEZWVwID8gY2xvbmVGdW5jKG1hcFRvQXJyYXkobWFwNyksIHRydWUpIDogbWFwVG9BcnJheShtYXA3KTsKICAgICAgcmV0dXJuIGFycmF5UmVkdWNlKGFycmF5LCBhZGRNYXBFbnRyeSwgbmV3IG1hcDcuY29uc3RydWN0b3IoKSk7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9uZVJlZ0V4cChyZWdleHApIHsKICAgICAgdmFyIHJlc3VsdCA9IG5ldyByZWdleHAuY29uc3RydWN0b3IocmVnZXhwLnNvdXJjZSwgcmVGbGFncy5leGVjKHJlZ2V4cCkpOwogICAgICByZXN1bHQubGFzdEluZGV4ID0gcmVnZXhwLmxhc3RJbmRleDsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGNsb25lU2V0KHNldDMsIGlzRGVlcCwgY2xvbmVGdW5jKSB7CiAgICAgIHZhciBhcnJheSA9IGlzRGVlcCA/IGNsb25lRnVuYyhzZXRUb0FycmF5KHNldDMpLCB0cnVlKSA6IHNldFRvQXJyYXkoc2V0Myk7CiAgICAgIHJldHVybiBhcnJheVJlZHVjZShhcnJheSwgYWRkU2V0RW50cnksIG5ldyBzZXQzLmNvbnN0cnVjdG9yKCkpOwogICAgfQogICAgZnVuY3Rpb24gY2xvbmVTeW1ib2woc3ltYm9sKSB7CiAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mID8gT2JqZWN0KHN5bWJvbFZhbHVlT2YuY2FsbChzeW1ib2wpKSA6IHt9OwogICAgfQogICAgZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkgewogICAgICB2YXIgYnVmZmVyMiA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7CiAgICAgIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7CiAgICAgIHZhciBpbmRleDIgPSAtMSwgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKICAgICAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IGxlbmd0aCkgewogICAgICAgIGFycmF5W2luZGV4Ml0gPSBzb3VyY2VbaW5kZXgyXTsKICAgICAgfQogICAgICByZXR1cm4gYXJyYXk7CiAgICB9CiAgICBmdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikgewogICAgICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTsKICAgICAgdmFyIGluZGV4MiA9IC0xLCBsZW5ndGggPSBwcm9wcy5sZW5ndGg7CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IGxlbmd0aCkgewogICAgICAgIHZhciBrZXkyID0gcHJvcHNbaW5kZXgyXTsKICAgICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyID8gY3VzdG9taXplcihvYmplY3Rba2V5Ml0sIHNvdXJjZVtrZXkyXSwga2V5Miwgb2JqZWN0LCBzb3VyY2UpIDogdm9pZCAwOwogICAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5MiwgbmV3VmFsdWUgPT09IHZvaWQgMCA/IHNvdXJjZVtrZXkyXSA6IG5ld1ZhbHVlKTsKICAgICAgfQogICAgICByZXR1cm4gb2JqZWN0OwogICAgfQogICAgZnVuY3Rpb24gY29weVN5bWJvbHMoc291cmNlLCBvYmplY3QpIHsKICAgICAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzKHNvdXJjZSksIG9iamVjdCk7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkgewogICAgICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzMiwgZ2V0U3ltYm9scyk7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRNYXBEYXRhKG1hcDcsIGtleTIpIHsKICAgICAgdmFyIGRhdGEgPSBtYXA3Ll9fZGF0YV9fOwogICAgICByZXR1cm4gaXNLZXlhYmxlKGtleTIpID8gZGF0YVt0eXBlb2Yga2V5MiA9PSAic3RyaW5nIiA/ICJzdHJpbmciIDogImhhc2giXSA6IGRhdGEubWFwOwogICAgfQogICAgZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5MikgewogICAgICB2YXIgdmFsdWUyID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkyKTsKICAgICAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZTIpID8gdmFsdWUyIDogdm9pZCAwOwogICAgfQogICAgdmFyIGdldFN5bWJvbHMgPSBuYXRpdmVHZXRTeW1ib2xzID8gb3ZlckFyZyhuYXRpdmVHZXRTeW1ib2xzLCBPYmplY3QpIDogc3R1YkFycmF5OwogICAgdmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7CiAgICBpZiAoRGF0YVZpZXcyICYmIGdldFRhZyhuZXcgRGF0YVZpZXcyKG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnIHx8IE1hcDIgJiYgZ2V0VGFnKG5ldyBNYXAyKCkpICE9IG1hcFRhZyB8fCBQcm9taXNlMiAmJiBnZXRUYWcoUHJvbWlzZTIucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnIHx8IFNldDIgJiYgZ2V0VGFnKG5ldyBTZXQyKCkpICE9IHNldFRhZyB8fCBXZWFrTWFwMiAmJiBnZXRUYWcobmV3IFdlYWtNYXAyKCkpICE9IHdlYWtNYXBUYWcpIHsKICAgICAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IG9iamVjdFRvU3RyaW5nMi5jYWxsKHZhbHVlMiksIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUyLmNvbnN0cnVjdG9yIDogdm9pZCAwLCBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogdm9pZCAwOwogICAgICAgIGlmIChjdG9yU3RyaW5nKSB7CiAgICAgICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHsKICAgICAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6CiAgICAgICAgICAgICAgcmV0dXJuIGRhdGFWaWV3VGFnOwogICAgICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6CiAgICAgICAgICAgICAgcmV0dXJuIG1hcFRhZzsKICAgICAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzoKICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZVRhZzsKICAgICAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOgogICAgICAgICAgICAgIHJldHVybiBzZXRUYWc7CiAgICAgICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6CiAgICAgICAgICAgICAgcmV0dXJuIHdlYWtNYXBUYWc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBpbml0Q2xvbmVBcnJheShhcnJheSkgewogICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLCByZXN1bHQgPSBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpOwogICAgICBpZiAobGVuZ3RoICYmIHR5cGVvZiBhcnJheVswXSA9PSAic3RyaW5nIiAmJiBoYXNPd25Qcm9wZXJ0eTMuY2FsbChhcnJheSwgImluZGV4IikpIHsKICAgICAgICByZXN1bHQuaW5kZXggPSBhcnJheS5pbmRleDsKICAgICAgICByZXN1bHQuaW5wdXQgPSBhcnJheS5pbnB1dDsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkgewogICAgICByZXR1cm4gdHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAiZnVuY3Rpb24iICYmICFpc1Byb3RvdHlwZShvYmplY3QpID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSkgOiB7fTsKICAgIH0KICAgIGZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBjbG9uZUZ1bmMsIGlzRGVlcCkgewogICAgICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjsKICAgICAgc3dpdGNoICh0YWcpIHsKICAgICAgICBjYXNlIGFycmF5QnVmZmVyVGFnOgogICAgICAgICAgcmV0dXJuIGNsb25lQXJyYXlCdWZmZXIob2JqZWN0KTsKICAgICAgICBjYXNlIGJvb2xUYWc6CiAgICAgICAgY2FzZSBkYXRlVGFnOgogICAgICAgICAgcmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpOwogICAgICAgIGNhc2UgZGF0YVZpZXdUYWc6CiAgICAgICAgICByZXR1cm4gY2xvbmVEYXRhVmlldyhvYmplY3QsIGlzRGVlcCk7CiAgICAgICAgY2FzZSBmbG9hdDMyVGFnOgogICAgICAgIGNhc2UgZmxvYXQ2NFRhZzoKICAgICAgICBjYXNlIGludDhUYWc6CiAgICAgICAgY2FzZSBpbnQxNlRhZzoKICAgICAgICBjYXNlIGludDMyVGFnOgogICAgICAgIGNhc2UgdWludDhUYWc6CiAgICAgICAgY2FzZSB1aW50OENsYW1wZWRUYWc6CiAgICAgICAgY2FzZSB1aW50MTZUYWc6CiAgICAgICAgY2FzZSB1aW50MzJUYWc6CiAgICAgICAgICByZXR1cm4gY2xvbmVUeXBlZEFycmF5KG9iamVjdCwgaXNEZWVwKTsKICAgICAgICBjYXNlIG1hcFRhZzoKICAgICAgICAgIHJldHVybiBjbG9uZU1hcChvYmplY3QsIGlzRGVlcCwgY2xvbmVGdW5jKTsKICAgICAgICBjYXNlIG51bWJlclRhZzoKICAgICAgICBjYXNlIHN0cmluZ1RhZzoKICAgICAgICAgIHJldHVybiBuZXcgQ3RvcihvYmplY3QpOwogICAgICAgIGNhc2UgcmVnZXhwVGFnOgogICAgICAgICAgcmV0dXJuIGNsb25lUmVnRXhwKG9iamVjdCk7CiAgICAgICAgY2FzZSBzZXRUYWc6CiAgICAgICAgICByZXR1cm4gY2xvbmVTZXQob2JqZWN0LCBpc0RlZXAsIGNsb25lRnVuYyk7CiAgICAgICAgY2FzZSBzeW1ib2xUYWc6CiAgICAgICAgICByZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gaXNJbmRleCh2YWx1ZTIsIGxlbmd0aCkgewogICAgICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7CiAgICAgIHJldHVybiAhIWxlbmd0aCAmJiAodHlwZW9mIHZhbHVlMiA9PSAibnVtYmVyIiB8fCByZUlzVWludC50ZXN0KHZhbHVlMikpICYmICh2YWx1ZTIgPiAtMSAmJiB2YWx1ZTIgJSAxID09IDAgJiYgdmFsdWUyIDwgbGVuZ3RoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZTIpIHsKICAgICAgdmFyIHR5cGU1ID0gdHlwZW9mIHZhbHVlMjsKICAgICAgcmV0dXJuIHR5cGU1ID09ICJzdHJpbmciIHx8IHR5cGU1ID09ICJudW1iZXIiIHx8IHR5cGU1ID09ICJzeW1ib2wiIHx8IHR5cGU1ID09ICJib29sZWFuIiA/IHZhbHVlMiAhPT0gIl9fcHJvdG9fXyIgOiB2YWx1ZTIgPT09IG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7CiAgICAgIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgbWFza1NyY0tleSBpbiBmdW5jOwogICAgfQogICAgZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUyKSB7CiAgICAgIHZhciBDdG9yID0gdmFsdWUyICYmIHZhbHVlMi5jb25zdHJ1Y3RvciwgcHJvdG8gPSB0eXBlb2YgQ3RvciA9PSAiZnVuY3Rpb24iICYmIEN0b3IucHJvdG90eXBlIHx8IG9iamVjdFByb3RvOwogICAgICByZXR1cm4gdmFsdWUyID09PSBwcm90bzsKICAgIH0KICAgIGZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHsKICAgICAgaWYgKGZ1bmMgIT0gbnVsbCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7CiAgICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gZnVuYyArICIiOwogICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gIiI7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9uZURlZXAodmFsdWUyKSB7CiAgICAgIHJldHVybiBiYXNlQ2xvbmUodmFsdWUyLCB0cnVlLCB0cnVlKTsKICAgIH0KICAgIGZ1bmN0aW9uIGVxKHZhbHVlMiwgb3RoZXIpIHsKICAgICAgcmV0dXJuIHZhbHVlMiA9PT0gb3RoZXIgfHwgdmFsdWUyICE9PSB2YWx1ZTIgJiYgb3RoZXIgIT09IG90aGVyOwogICAgfQogICAgZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUyKSB7CiAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZTIpICYmIGhhc093blByb3BlcnR5My5jYWxsKHZhbHVlMiwgImNhbGxlZSIpICYmICghcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZTIsICJjYWxsZWUiKSB8fCBvYmplY3RUb1N0cmluZzIuY2FsbCh2YWx1ZTIpID09IGFyZ3NUYWcpOwogICAgfQogICAgdmFyIGlzQXJyYXkzID0gQXJyYXkuaXNBcnJheTsKICAgIGZ1bmN0aW9uIGlzQXJyYXlMaWtlMih2YWx1ZTIpIHsKICAgICAgcmV0dXJuIHZhbHVlMiAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlMi5sZW5ndGgpICYmICFpc0Z1bmN0aW9uMih2YWx1ZTIpOwogICAgfQogICAgZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUyKSB7CiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUyKSAmJiBpc0FycmF5TGlrZTIodmFsdWUyKTsKICAgIH0KICAgIHZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTsKICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24yKHZhbHVlMikgewogICAgICB2YXIgdGFnID0gaXNPYmplY3QzKHZhbHVlMikgPyBvYmplY3RUb1N0cmluZzIuY2FsbCh2YWx1ZTIpIDogIiI7CiAgICAgIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnOwogICAgfQogICAgZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUyKSB7CiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUyID09ICJudW1iZXIiICYmIHZhbHVlMiA+IC0xICYmIHZhbHVlMiAlIDEgPT0gMCAmJiB2YWx1ZTIgPD0gTUFYX1NBRkVfSU5URUdFUjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzT2JqZWN0Myh2YWx1ZTIpIHsKICAgICAgdmFyIHR5cGU1ID0gdHlwZW9mIHZhbHVlMjsKICAgICAgcmV0dXJuICEhdmFsdWUyICYmICh0eXBlNSA9PSAib2JqZWN0IiB8fCB0eXBlNSA9PSAiZnVuY3Rpb24iKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZTIpIHsKICAgICAgcmV0dXJuICEhdmFsdWUyICYmIHR5cGVvZiB2YWx1ZTIgPT0gIm9iamVjdCI7CiAgICB9CiAgICBmdW5jdGlvbiBrZXlzMihvYmplY3QpIHsKICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlMihvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTsKICAgIH0KICAgIGZ1bmN0aW9uIHN0dWJBcnJheSgpIHsKICAgICAgcmV0dXJuIFtdOwogICAgfQogICAgZnVuY3Rpb24gc3R1YkZhbHNlKCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IGNsb25lRGVlcDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Zhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5QDIuMS4wL25vZGVfbW9kdWxlcy9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeS9pbmRleC5qcwp2YXIgcmVxdWlyZV9mYXN0X2pzb25fc3RhYmxlX3N0cmluZ2lmeSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnlAMi4xLjAvbm9kZV9tb2R1bGVzL2Zhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5L2luZGV4LmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZGF0YSwgb3B0cykgewogICAgICBpZiAoIW9wdHMpIG9wdHMgPSB7fTsKICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAiZnVuY3Rpb24iKSBvcHRzID0geyBjbXA6IG9wdHMgfTsKICAgICAgdmFyIGN5Y2xlcyA9IHR5cGVvZiBvcHRzLmN5Y2xlcyA9PT0gImJvb2xlYW4iID8gb3B0cy5jeWNsZXMgOiBmYWxzZTsKICAgICAgdmFyIGNtcCA9IG9wdHMuY21wICYmIC8qIEBfX1BVUkVfXyAqLyAoZnVuY3Rpb24oZjcpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24obm9kZTIpIHsKICAgICAgICAgIHJldHVybiBmdW5jdGlvbihhNSwgYjUpIHsKICAgICAgICAgICAgdmFyIGFvYmogPSB7IGtleTogYTUsIHZhbHVlOiBub2RlMlthNV0gfTsKICAgICAgICAgICAgdmFyIGJvYmogPSB7IGtleTogYjUsIHZhbHVlOiBub2RlMltiNV0gfTsKICAgICAgICAgICAgcmV0dXJuIGY3KGFvYmosIGJvYmopOwogICAgICAgICAgfTsKICAgICAgICB9OwogICAgICB9KShvcHRzLmNtcCk7CiAgICAgIHZhciBzZWVuID0gW107CiAgICAgIHJldHVybiAoZnVuY3Rpb24gc3RyaW5naWZ5NShub2RlMikgewogICAgICAgIGlmIChub2RlMiAmJiBub2RlMi50b0pTT04gJiYgdHlwZW9mIG5vZGUyLnRvSlNPTiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgbm9kZTIgPSBub2RlMi50b0pTT04oKTsKICAgICAgICB9CiAgICAgICAgaWYgKG5vZGUyID09PSB2b2lkIDApIHJldHVybjsKICAgICAgICBpZiAodHlwZW9mIG5vZGUyID09ICJudW1iZXIiKSByZXR1cm4gaXNGaW5pdGUobm9kZTIpID8gIiIgKyBub2RlMiA6ICJudWxsIjsKICAgICAgICBpZiAodHlwZW9mIG5vZGUyICE9PSAib2JqZWN0IikgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG5vZGUyKTsKICAgICAgICB2YXIgaTExLCBvdXQ7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZTIpKSB7CiAgICAgICAgICBvdXQgPSAiWyI7CiAgICAgICAgICBmb3IgKGkxMSA9IDA7IGkxMSA8IG5vZGUyLmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgICAgaWYgKGkxMSkgb3V0ICs9ICIsIjsKICAgICAgICAgICAgb3V0ICs9IHN0cmluZ2lmeTUobm9kZTJbaTExXSkgfHwgIm51bGwiOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG91dCArICJdIjsKICAgICAgICB9CiAgICAgICAgaWYgKG5vZGUyID09PSBudWxsKSByZXR1cm4gIm51bGwiOwogICAgICAgIGlmIChzZWVuLmluZGV4T2Yobm9kZTIpICE9PSAtMSkgewogICAgICAgICAgaWYgKGN5Y2xlcykgcmV0dXJuIEpTT04uc3RyaW5naWZ5KCJfX2N5Y2xlX18iKTsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT04iKTsKICAgICAgICB9CiAgICAgICAgdmFyIHNlZW5JbmRleCA9IHNlZW4ucHVzaChub2RlMikgLSAxOwogICAgICAgIHZhciBrZXlzMiA9IE9iamVjdC5rZXlzKG5vZGUyKS5zb3J0KGNtcCAmJiBjbXAobm9kZTIpKTsKICAgICAgICBvdXQgPSAiIjsKICAgICAgICBmb3IgKGkxMSA9IDA7IGkxMSA8IGtleXMyLmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgIHZhciBrZXkyID0ga2V5czJbaTExXTsKICAgICAgICAgIHZhciB2YWx1ZTIgPSBzdHJpbmdpZnk1KG5vZGUyW2tleTJdKTsKICAgICAgICAgIGlmICghdmFsdWUyKSBjb250aW51ZTsKICAgICAgICAgIGlmIChvdXQpIG91dCArPSAiLCI7CiAgICAgICAgICBvdXQgKz0gSlNPTi5zdHJpbmdpZnkoa2V5MikgKyAiOiIgKyB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHNlZW4uc3BsaWNlKHNlZW5JbmRleCwgMSk7CiAgICAgICAgcmV0dXJuICJ7IiArIG91dCArICJ9IjsKICAgICAgfSkoZGF0YSk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRqc29uQDUuMi4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGpzb24vZGlzdF90cy9zbWFydGpzb24ucGx1Z2lucy5qcwp2YXIgaW1wb3J0X2xvZGFzaCwgaW1wb3J0X2Zhc3RfanNvbl9zdGFibGVfc3RyaW5naWZ5LCBzdGFibGVKc29uOwp2YXIgaW5pdF9zbWFydGpzb25fcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0anNvbkA1LjIuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRqc29uL2Rpc3RfdHMvc21hcnRqc29uLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMTAoKTsKICAgIGluaXRfZGlzdF90czExKCk7CiAgICBpbXBvcnRfbG9kYXNoID0gX190b0VTTShyZXF1aXJlX2xvZGFzaCgpLCAxKTsKICAgIGltcG9ydF9mYXN0X2pzb25fc3RhYmxlX3N0cmluZ2lmeSA9IF9fdG9FU00ocmVxdWlyZV9mYXN0X2pzb25fc3RhYmxlX3N0cmluZ2lmeSgpLCAxKTsKICAgIHN0YWJsZUpzb24gPSBpbXBvcnRfZmFzdF9qc29uX3N0YWJsZV9zdHJpbmdpZnkuZGVmYXVsdDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0anNvbkA1LjIuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRqc29uL2Rpc3RfdHMvYnVmZmVyaGFuZGxpbmcuanMKZnVuY3Rpb24gYmFzZTY0RW5jb2RlKGRhdGEpIHsKICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gInVuZGVmaW5lZCIpIHsKICAgIHJldHVybiBCdWZmZXIuZnJvbShkYXRhKS50b1N0cmluZygiYmFzZTY0Iik7CiAgfQogIHJldHVybiBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uZGF0YSkpOwp9CmZ1bmN0aW9uIGJhc2U2NERlY29kZShzdHIpIHsKICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gInVuZGVmaW5lZCIpIHsKICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHN0ciwgImJhc2U2NCIpOwogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1Zi5idWZmZXIsIGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZUxlbmd0aCk7CiAgfQogIHJldHVybiBuZXcgVWludDhBcnJheShBcnJheS5mcm9tKGF0b2Ioc3RyKSkubWFwKChjaGFyKSA9PiBjaGFyLmNoYXJDb2RlQXQoMCkpKTsKfQpmdW5jdGlvbiBzdHJpbmdpZnkodmFsdWUyLCBzcGFjZTIpIHsKICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUyLCByZXBsYWNlciwgc3BhY2UyKTsKfQpmdW5jdGlvbiBwYXJzZTIodGV4dDkpIHsKICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0OSwgcmV2aXZlcik7Cn0KZnVuY3Rpb24gaXNFbmNvZGVkQnVmZmVyKHgzKSB7CiAgcmV0dXJuIGlzT2JqZWN0KHgzKSAmJiB4My50eXBlID09PSAiRW5jb2RlZEJ1ZmZlciIgJiYgaXNTdHJpbmcoeDMuZGF0YSk7Cn0KZnVuY3Rpb24gaXNCdWZmZXJMaWtlMih4MykgewogIHJldHVybiBpc09iamVjdCh4MykgJiYgKHgzLnR5cGUgPT09ICJCdWZmZXIiICYmIChpc0FycmF5Mih4My5kYXRhKSB8fCBpc1N0cmluZyh4My5kYXRhKSkpIHx8IHgzIGluc3RhbmNlb2YgVWludDhBcnJheTsKfQpmdW5jdGlvbiBpc0FycmF5Mih4MykgewogIHJldHVybiBBcnJheS5pc0FycmF5KHgzKTsKfQpmdW5jdGlvbiBpc1N0cmluZyh4MykgewogIHJldHVybiB0eXBlb2YgeDMgPT09ICJzdHJpbmciOwp9CmZ1bmN0aW9uIGlzT2JqZWN0KHgzKSB7CiAgcmV0dXJuIHR5cGVvZiB4MyA9PT0gIm9iamVjdCIgJiYgeDMgIT09IG51bGw7Cn0KdmFyIHJlcGxhY2VyLCByZXZpdmVyOwp2YXIgaW5pdF9idWZmZXJoYW5kbGluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0anNvbkA1LjIuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRqc29uL2Rpc3RfdHMvYnVmZmVyaGFuZGxpbmcuanMiKCkgewogICAgaW5pdF9zbWFydGpzb25fcGx1Z2lucygpOwogICAgcmVwbGFjZXIgPSAoa2V5MiwgdmFsdWUyKSA9PiB7CiAgICAgIGlmIChpc0J1ZmZlckxpa2UyKHZhbHVlMikpIHsKICAgICAgICBsZXQgYnVmZmVyRGF0YTsKICAgICAgICBpZiAoImRhdGEiIGluIHZhbHVlMiAmJiBpc0FycmF5Mih2YWx1ZTIuZGF0YSkpIHsKICAgICAgICAgIGJ1ZmZlckRhdGEgPSBuZXcgVWludDhBcnJheSh2YWx1ZTIuZGF0YSk7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZTIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7CiAgICAgICAgICBidWZmZXJEYXRhID0gdmFsdWUyOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUyOwogICAgICAgIH0KICAgICAgICBjb25zdCBiYXNlNjREYXRhID0gImJhc2U2NDoiICsgYmFzZTY0RW5jb2RlKGJ1ZmZlckRhdGEpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiAiRW5jb2RlZEJ1ZmZlciIsCiAgICAgICAgICBkYXRhOiBiYXNlNjREYXRhCiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWUyOwogICAgfTsKICAgIHJldml2ZXIgPSAoa2V5MiwgdmFsdWUyKSA9PiB7CiAgICAgIGlmIChpc0VuY29kZWRCdWZmZXIodmFsdWUyKSkgewogICAgICAgIGlmIChpc1N0cmluZyh2YWx1ZTIuZGF0YSkgJiYgdmFsdWUyLmRhdGEuc3RhcnRzV2l0aCgiYmFzZTY0OiIpKSB7CiAgICAgICAgICBjb25zdCBiYXNlNjREYXRhID0gdmFsdWUyLmRhdGEuc2xpY2UoNyk7CiAgICAgICAgICBjb25zdCBidWZmZXIyID0gYmFzZTY0RGVjb2RlKGJhc2U2NERhdGEpOwogICAgICAgICAgcmV0dXJuIGJ1ZmZlcjI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB2YWx1ZTI7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRqc29uQDUuMi4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGpzb24vZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTIgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTIsIHsKICBTbWFydGpzb246ICgpID0+IFNtYXJ0anNvbiwKICBkZWVwRXF1YWxKc29uTFN0cmluZ3M6ICgpID0+IGRlZXBFcXVhbEpzb25MU3RyaW5ncywKICBkZWVwRXF1YWxPYmplY3RzOiAoKSA9PiBkZWVwRXF1YWxPYmplY3RzLAogIGZvbGREZWM6ICgpID0+IGZvbGREZWMsCiAgcGFyc2U6ICgpID0+IHBhcnNlMywKICBwYXJzZUJhc2U2NDogKCkgPT4gcGFyc2VCYXNlNjQsCiAgcGFyc2VKc29uTDogKCkgPT4gcGFyc2VKc29uTCwKICBzdGFibGVPbmVXYXlTdHJpbmdpZnk6ICgpID0+IHN0YWJsZU9uZVdheVN0cmluZ2lmeSwKICBzdHJpbmdpZnk6ICgpID0+IHN0cmluZ2lmeTIsCiAgc3RyaW5naWZ5QmFzZTY0OiAoKSA9PiBzdHJpbmdpZnlCYXNlNjQsCiAgc3RyaW5naWZ5SnNvbkw6ICgpID0+IHN0cmluZ2lmeUpzb25MLAogIHN0cmluZ2lmeVByZXR0eTogKCkgPT4gc3RyaW5naWZ5UHJldHR5Cn0pOwp2YXIgcGFyc2UzLCBwYXJzZUpzb25MLCBzdHJpbmdpZnlKc29uTCwgc3RhYmxlT25lV2F5U3RyaW5naWZ5LCBzdHJpbmdpZnkyLCBzdHJpbmdpZnlQcmV0dHksIHN0cmluZ2lmeUJhc2U2NCwgcGFyc2VCYXNlNjQsIFNtYXJ0anNvbiwgZm9sZERlYywgZGVlcEVxdWFsT2JqZWN0cywgZGVlcEVxdWFsSnNvbkxTdHJpbmdzOwp2YXIgaW5pdF9kaXN0X3RzMTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGpzb25ANS4yLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0anNvbi9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRqc29uX3BsdWdpbnMoKTsKICAgIGluaXRfYnVmZmVyaGFuZGxpbmcoKTsKICAgIHBhcnNlMyA9IHBhcnNlMjsKICAgIHBhcnNlSnNvbkwgPSAoanNvbmxEYXRhKSA9PiB7CiAgICAgIGNvbnN0IGxpbmVzID0ganNvbmxEYXRhLnNwbGl0KCJcbiIpOwogICAgICBjb25zdCBwYXJzZWREYXRhID0gbGluZXMucmVkdWNlKChhY2MsIGxpbmUpID0+IHsKICAgICAgICBjb25zdCB0cmltbWVkID0gbGluZS50cmltKCk7CiAgICAgICAgaWYgKHRyaW1tZWQubGVuZ3RoID4gMCkgewogICAgICAgICAgYWNjLnB1c2gocGFyc2UzKHRyaW1tZWQpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgfSwgW10pOwogICAgICByZXR1cm4gcGFyc2VkRGF0YTsKICAgIH07CiAgICBzdHJpbmdpZnlKc29uTCA9IChpdGVtcykgPT4gewogICAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtKSA9PiBzdHJpbmdpZnkyKGl0ZW0pKS5qb2luKCJcbiIpOwogICAgfTsKICAgIHN0YWJsZU9uZVdheVN0cmluZ2lmeSA9IChvYmpBcmcsIHNpbXBsZU9yZGVyQXJyYXksIG9wdGlvbnNBcmcgPSB7fSkgPT4gewogICAgICBjb25zdCB2aXNpdGVkID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCk7CiAgICAgIGNvbnN0IHNhbml0aXplMiA9ICh2YWwpID0+IHsKICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgIT09ICJvYmplY3QiKSB7CiAgICAgICAgICByZXR1cm4gdmFsOwogICAgICAgIH0KICAgICAgICBjb25zdCByZXBsYWNlZCA9IHJlcGxhY2VyKCIiLCB2YWwpOwogICAgICAgIGlmIChyZXBsYWNlZCAmJiByZXBsYWNlZC50eXBlID09PSAiRW5jb2RlZEJ1ZmZlciIgJiYgdHlwZW9mIHJlcGxhY2VkLmRhdGEgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICByZXR1cm4gcmVwbGFjZWQ7CiAgICAgICAgfQogICAgICAgIGlmICh2aXNpdGVkLmhhcyh2YWwpKSB7CiAgICAgICAgICByZXR1cm4gIl9fY3ljbGVfXyI7CiAgICAgICAgfQogICAgICAgIHZpc2l0ZWQuYWRkKHZhbCk7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkgewogICAgICAgICAgcmV0dXJuIHZhbC5tYXAoKGl0ZW0pID0+IHNhbml0aXplMihpdGVtKSk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG91dCA9IHt9OwogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBPYmplY3Qua2V5cyh2YWwpKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBvdXRba2V5Ml0gPSBzYW5pdGl6ZTIodmFsW2tleTJdKTsKICAgICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgICBvdXRba2V5Ml0gPSAiX191bnNlcmlhbGl6YWJsZV9fIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG91dDsKICAgICAgfTsKICAgICAgY29uc3Qgb2JqID0gc2FuaXRpemUyKG9iakFyZyk7CiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7CiAgICAgICAgLi4ub3B0aW9uc0FyZywKICAgICAgICBjeWNsZXM6IHRydWUKICAgICAgfTsKICAgICAgaWYgKHNpbXBsZU9yZGVyQXJyYXkgJiYgIW9wdGlvbnMuY21wKSB7CiAgICAgICAgY29uc3Qgb3JkZXIyID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgICBzaW1wbGVPcmRlckFycmF5LmZvckVhY2goKGtleTIsIGlkeCkgPT4gb3JkZXIyLnNldChrZXkyLCBpZHgpKTsKICAgICAgICBvcHRpb25zLmNtcCA9IChhNSwgYjUpID0+IHsKICAgICAgICAgIGNvbnN0IGFJZHggPSBvcmRlcjIuaGFzKGE1LmtleSkgPyBvcmRlcjIuZ2V0KGE1LmtleSkgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgICAgICAgICBjb25zdCBiSWR4ID0gb3JkZXIyLmhhcyhiNS5rZXkpID8gb3JkZXIyLmdldChiNS5rZXkpIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwogICAgICAgICAgaWYgKGFJZHggIT09IGJJZHgpCiAgICAgICAgICAgIHJldHVybiBhSWR4IC0gYklkeDsKICAgICAgICAgIHJldHVybiBhNS5rZXkgPCBiNS5rZXkgPyAtMSA6IGE1LmtleSA+IGI1LmtleSA/IDEgOiAwOwogICAgICAgIH07CiAgICAgIH0KICAgICAgcmV0dXJuIHN0YWJsZUpzb24ob2JqLCBvcHRpb25zKTsKICAgIH07CiAgICBzdHJpbmdpZnkyID0gKG9iakFyZywgc2ltcGxlT3JkZXJBcnJheSwgb3B0aW9uc0FyZyA9IHt9KSA9PiB7CiAgICAgIGNvbnN0IGJ1ZmZlcmVkSnNvbiA9IHN0cmluZ2lmeShvYmpBcmcpOwogICAgICBvYmpBcmcgPSBKU09OLnBhcnNlKGJ1ZmZlcmVkSnNvbik7CiAgICAgIGxldCBvcHRpb25zID0geyAuLi5vcHRpb25zQXJnIH07CiAgICAgIGlmIChzaW1wbGVPcmRlckFycmF5ICYmICFvcHRpb25zLmNtcCkgewogICAgICAgIGNvbnN0IG9yZGVyMiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgICAgc2ltcGxlT3JkZXJBcnJheS5mb3JFYWNoKChrZXkyLCBpZHgpID0+IG9yZGVyMi5zZXQoa2V5MiwgaWR4KSk7CiAgICAgICAgb3B0aW9ucy5jbXAgPSAoYTUsIGI1KSA9PiB7CiAgICAgICAgICBjb25zdCBhSWR4ID0gb3JkZXIyLmhhcyhhNS5rZXkpID8gb3JkZXIyLmdldChhNS5rZXkpIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwogICAgICAgICAgY29uc3QgYklkeCA9IG9yZGVyMi5oYXMoYjUua2V5KSA/IG9yZGVyMi5nZXQoYjUua2V5KSA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKICAgICAgICAgIGlmIChhSWR4ICE9PSBiSWR4KQogICAgICAgICAgICByZXR1cm4gYUlkeCAtIGJJZHg7CiAgICAgICAgICByZXR1cm4gYTUua2V5IDwgYjUua2V5ID8gLTEgOiBhNS5rZXkgPiBiNS5rZXkgPyAxIDogMDsKICAgICAgICB9OwogICAgICB9CiAgICAgIGxldCByZXR1cm5Kc29uID0gc3RhYmxlSnNvbihvYmpBcmcsIG9wdGlvbnMpOwogICAgICByZXR1cm4gcmV0dXJuSnNvbjsKICAgIH07CiAgICBzdHJpbmdpZnlQcmV0dHkgPSAob2JqZWN0QXJnKSA9PiB7CiAgICAgIGNvbnN0IHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5MihvYmplY3RBcmcpOwogICAgICBjb25zdCBvYmplY3QgPSBKU09OLnBhcnNlKHN0cmluZ2lmaWVkKTsKICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iamVjdCwgbnVsbCwgMik7CiAgICB9OwogICAgc3RyaW5naWZ5QmFzZTY0ID0gKC4uLmFyZ3MpID0+IHsKICAgICAgY29uc3Qgc3RyaW5naWZpZWRSZXN1bHQgPSBzdHJpbmdpZnkyKC4uLmFyZ3MpOwogICAgICByZXR1cm4gZGlzdF90c19leHBvcnRzMTEuYmFzZTY0LmVuY29kZVVyaShzdHJpbmdpZmllZFJlc3VsdCk7CiAgICB9OwogICAgcGFyc2VCYXNlNjQgPSAoYmFzZTY0SnNvblN0cmluZ0FyZykgPT4gewogICAgICBjb25zdCBiYXNlNjQyID0gZGlzdF90c19leHBvcnRzMTEuYmFzZTY0OwogICAgICBjb25zdCBkZWNvZGVGbiA9IGJhc2U2NDIuZGVjb2RlVXJpIHx8IGJhc2U2NDIuZGVjb2RlOwogICAgICBjb25zdCBzaW1wbGVTdHJpbmdpZmllZCA9IGRlY29kZUZuKGJhc2U2NEpzb25TdHJpbmdBcmcpOwogICAgICByZXR1cm4gcGFyc2UzKHNpbXBsZVN0cmluZ2lmaWVkKTsKICAgIH07CiAgICBTbWFydGpzb24gPSBjbGFzcyBfU21hcnRqc29uIHsKICAgICAgLyoqCiAgICAgICAqIGVuZm9sZHMgZGF0YSBmcm9tIGFuIG9iamVjdAogICAgICAgKi8KICAgICAgc3RhdGljIGVuZm9sZEZyb21PYmplY3Qob2JqZWN0QXJnKSB7CiAgICAgICAgY29uc3QgbmV3SW5zdGFuY2UgPSBuZXcgdGhpcygpOwogICAgICAgIGNvbnN0IHNhdmVhYmxlcyA9IG5ld0luc3RhbmNlLnNhdmVhYmxlUHJvcGVydGllcyB8fCBbXTsKICAgICAgICBmb3IgKGNvbnN0IGtleU5hbWUgaW4gb2JqZWN0QXJnKSB7CiAgICAgICAgICBpZiAoc2F2ZWFibGVzLmluZGV4T2Yoa2V5TmFtZSkgIT09IC0xKSB7CiAgICAgICAgICAgIG5ld0luc3RhbmNlW2tleU5hbWVdID0gb2JqZWN0QXJnW2tleU5hbWVdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3SW5zdGFuY2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGVuZm9sZCBmcm9tIGpzb24KICAgICAgICovCiAgICAgIHN0YXRpYyBlbmZvbGRGcm9tSnNvbihqc29uQXJnKSB7CiAgICAgICAgY29uc3Qgb2JqZWN0RnJvbUpzb24gPSBwYXJzZTMoanNvbkFyZyk7CiAgICAgICAgcmV0dXJuIHRoaXMuZW5mb2xkRnJvbU9iamVjdChvYmplY3RGcm9tSnNvbik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZvbGRzIGEgY2xhc3MgaW50byBhbiBvYmplY3QKICAgICAgICovCiAgICAgIGZvbGRUb09iamVjdCgpIHsKICAgICAgICBjb25zdCB0cmFja1NldCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgICAgICAgdHJhY2tTZXQuYWRkKHRoaXMpOwogICAgICAgIHJldHVybiB0aGlzLmZvbGRUb09iamVjdEludGVybmFsKHRyYWNrU2V0KTsKICAgICAgfQogICAgICBmb2xkVG9PYmplY3RJbnRlcm5hbCh0cmFja1NldCkgewogICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9OwogICAgICAgIGNvbnN0IGZvbGRWYWx1ZSA9ICh2YWwpID0+IHsKICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBfU21hcnRqc29uKSB7CiAgICAgICAgICAgIGlmICh0cmFja1NldC5oYXModmFsKSkgewogICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiY3ljbGUgZGV0ZWN0ZWQiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0cmFja1NldC5hZGQodmFsKTsKICAgICAgICAgICAgcmV0dXJuIHZhbC5mb2xkVG9PYmplY3RJbnRlcm5hbCh0cmFja1NldCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB2YWwubWFwKChpdGVtKSA9PiBmb2xkVmFsdWUoaXRlbSkpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGltcG9ydF9sb2Rhc2guZGVmYXVsdCh2YWwpOwogICAgICAgIH07CiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnNhdmVhYmxlUHJvcGVydGllcyB8fCBbXTsKICAgICAgICBmb3IgKGNvbnN0IGtleU5hbWUgb2YgcHJvcHMpIHsKICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IHRoaXNba2V5TmFtZV07CiAgICAgICAgICByZXN1bHRba2V5TmFtZV0gPSBmb2xkVmFsdWUodmFsdWUyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogZm9sZHMgYSBjbGFzcyBpbnRvIGFuIG9iamVjdAogICAgICAgKi8KICAgICAgZm9sZFRvSnNvbigpIHsKICAgICAgICBjb25zdCBmb2xkZWRPYmplY3QgPSB0aGlzLmZvbGRUb09iamVjdCgpOwogICAgICAgIHJldHVybiBzdHJpbmdpZnkyKGZvbGRlZE9iamVjdCk7CiAgICAgIH0KICAgIH07CiAgICBmb2xkRGVjID0gKCkgPT4gewogICAgICByZXR1cm4gKHRhcmdldCwga2V5MikgPT4gewogICAgICAgIGlmICghdGFyZ2V0LnNhdmVhYmxlUHJvcGVydGllcykgewogICAgICAgICAgdGFyZ2V0LnNhdmVhYmxlUHJvcGVydGllcyA9IFtdOwogICAgICAgIH0KICAgICAgICB0YXJnZXQuc2F2ZWFibGVQcm9wZXJ0aWVzLnB1c2goa2V5Mik7CiAgICAgIH07CiAgICB9OwogICAgZGVlcEVxdWFsT2JqZWN0cyA9IChvYmplY3QxLCBvYmplY3QyKSA9PiB7CiAgICAgIGNvbnN0IG9iamVjdDFTdHJpbmcgPSBzdHJpbmdpZnkyKG9iamVjdDEpOwogICAgICBjb25zdCBvYmplY3QyU3RyaW5nID0gc3RyaW5naWZ5MihvYmplY3QyKTsKICAgICAgcmV0dXJuIG9iamVjdDFTdHJpbmcgPT09IG9iamVjdDJTdHJpbmc7CiAgICB9OwogICAgZGVlcEVxdWFsSnNvbkxTdHJpbmdzID0gKGpzb25MU3RyaW5nMSwganNvbkxTdHJpbmcyKSA9PiB7CiAgICAgIGNvbnN0IGZpcnN0QXJyYXkgPSBwYXJzZUpzb25MKGpzb25MU3RyaW5nMSk7CiAgICAgIGNvbnN0IHNlY29uZEFycmF5ID0gcGFyc2VKc29uTChqc29uTFN0cmluZzIpOwogICAgICByZXR1cm4gZGVlcEVxdWFsT2JqZWN0cyhmaXJzdEFycmF5LCBzZWNvbmRBcnJheSk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgraWRiQDguMC4zL25vZGVfbW9kdWxlcy9AdGVtcGZpeC9pZGIvYnVpbGQvaW5kZXguanMKdmFyIGJ1aWxkX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoYnVpbGRfZXhwb3J0cywgewogIGRlbGV0ZURCOiAoKSA9PiBkZWxldGVEQiwKICBvcGVuREI6ICgpID0+IG9wZW5EQiwKICB1bndyYXA6ICgpID0+IHVud3JhcCwKICB3cmFwOiAoKSA9PiB3cmFwCn0pOwpmdW5jdGlvbiBnZXRJZGJQcm94eWFibGVUeXBlcygpIHsKICByZXR1cm4gaWRiUHJveHlhYmxlVHlwZXMgfHwgKGlkYlByb3h5YWJsZVR5cGVzID0gWwogICAgSURCRGF0YWJhc2UsCiAgICBJREJPYmplY3RTdG9yZSwKICAgIElEQkluZGV4LAogICAgSURCQ3Vyc29yLAogICAgSURCVHJhbnNhY3Rpb24KICBdKTsKfQpmdW5jdGlvbiBnZXRDdXJzb3JBZHZhbmNlTWV0aG9kcygpIHsKICByZXR1cm4gY3Vyc29yQWR2YW5jZU1ldGhvZHMgfHwgKGN1cnNvckFkdmFuY2VNZXRob2RzID0gWwogICAgSURCQ3Vyc29yLnByb3RvdHlwZS5hZHZhbmNlLAogICAgSURCQ3Vyc29yLnByb3RvdHlwZS5jb250aW51ZSwKICAgIElEQkN1cnNvci5wcm90b3R5cGUuY29udGludWVQcmltYXJ5S2V5CiAgXSk7Cn0KZnVuY3Rpb24gcHJvbWlzaWZ5UmVxdWVzdChyZXF1ZXN0KSB7CiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICBjb25zdCB1bmxpc3RlbiA9ICgpID0+IHsKICAgICAgcmVxdWVzdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzdWNjZXNzIiwgc3VjY2Vzcyk7CiAgICAgIHJlcXVlc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBlcnJvcik7CiAgICB9OwogICAgY29uc3Qgc3VjY2VzcyA9ICgpID0+IHsKICAgICAgcmVzb2x2ZTIod3JhcChyZXF1ZXN0LnJlc3VsdCkpOwogICAgICB1bmxpc3RlbigpOwogICAgfTsKICAgIGNvbnN0IGVycm9yID0gKCkgPT4gewogICAgICByZWplY3QocmVxdWVzdC5lcnJvcik7CiAgICAgIHVubGlzdGVuKCk7CiAgICB9OwogICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCJzdWNjZXNzIiwgc3VjY2Vzcyk7CiAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwgZXJyb3IpOwogIH0pOwogIHJldmVyc2VUcmFuc2Zvcm1DYWNoZS5zZXQocHJvbWlzZSwgcmVxdWVzdCk7CiAgcmV0dXJuIHByb21pc2U7Cn0KZnVuY3Rpb24gY2FjaGVEb25lUHJvbWlzZUZvclRyYW5zYWN0aW9uKHR4KSB7CiAgaWYgKHRyYW5zYWN0aW9uRG9uZU1hcC5oYXModHgpKQogICAgcmV0dXJuOwogIGNvbnN0IGRvbmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgY29uc3QgdW5saXN0ZW4gPSAoKSA9PiB7CiAgICAgIHR4LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbXBsZXRlIiwgY29tcGxldGUpOwogICAgICB0eC5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsIGVycm9yKTsKICAgICAgdHgucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCBlcnJvcik7CiAgICB9OwogICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7CiAgICAgIHJlc29sdmUyKCk7CiAgICAgIHVubGlzdGVuKCk7CiAgICB9OwogICAgY29uc3QgZXJyb3IgPSAoKSA9PiB7CiAgICAgIHJlamVjdCh0eC5lcnJvciB8fCBuZXcgRE9NRXhjZXB0aW9uKCJBYm9ydEVycm9yIiwgIkFib3J0RXJyb3IiKSk7CiAgICAgIHVubGlzdGVuKCk7CiAgICB9OwogICAgdHguYWRkRXZlbnRMaXN0ZW5lcigiY29tcGxldGUiLCBjb21wbGV0ZSk7CiAgICB0eC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsIGVycm9yKTsKICAgIHR4LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwgZXJyb3IpOwogIH0pOwogIHRyYW5zYWN0aW9uRG9uZU1hcC5zZXQodHgsIGRvbmUpOwp9CmZ1bmN0aW9uIHJlcGxhY2VUcmFwcyhjYWxsYmFjaykgewogIGlkYlByb3h5VHJhcHMgPSBjYWxsYmFjayhpZGJQcm94eVRyYXBzKTsKfQpmdW5jdGlvbiB3cmFwRnVuY3Rpb24oZnVuYykgewogIGlmIChnZXRDdXJzb3JBZHZhbmNlTWV0aG9kcygpLmluY2x1ZGVzKGZ1bmMpKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oLi4uYXJncykgewogICAgICBmdW5jLmFwcGx5KHVud3JhcCh0aGlzKSwgYXJncyk7CiAgICAgIHJldHVybiB3cmFwKHRoaXMucmVxdWVzdCk7CiAgICB9OwogIH0KICByZXR1cm4gZnVuY3Rpb24oLi4uYXJncykgewogICAgcmV0dXJuIHdyYXAoZnVuYy5hcHBseSh1bndyYXAodGhpcyksIGFyZ3MpKTsKICB9Owp9CmZ1bmN0aW9uIHRyYW5zZm9ybUNhY2hhYmxlVmFsdWUodmFsdWUyKSB7CiAgaWYgKHR5cGVvZiB2YWx1ZTIgPT09ICJmdW5jdGlvbiIpCiAgICByZXR1cm4gd3JhcEZ1bmN0aW9uKHZhbHVlMik7CiAgaWYgKHZhbHVlMiBpbnN0YW5jZW9mIElEQlRyYW5zYWN0aW9uKQogICAgY2FjaGVEb25lUHJvbWlzZUZvclRyYW5zYWN0aW9uKHZhbHVlMik7CiAgaWYgKGluc3RhbmNlT2ZBbnkodmFsdWUyLCBnZXRJZGJQcm94eWFibGVUeXBlcygpKSkKICAgIHJldHVybiBuZXcgUHJveHkodmFsdWUyLCBpZGJQcm94eVRyYXBzKTsKICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIHdyYXAodmFsdWUyKSB7CiAgaWYgKHZhbHVlMiBpbnN0YW5jZW9mIElEQlJlcXVlc3QpCiAgICByZXR1cm4gcHJvbWlzaWZ5UmVxdWVzdCh2YWx1ZTIpOwogIGlmICh0cmFuc2Zvcm1DYWNoZS5oYXModmFsdWUyKSkKICAgIHJldHVybiB0cmFuc2Zvcm1DYWNoZS5nZXQodmFsdWUyKTsKICBjb25zdCBuZXdWYWx1ZSA9IHRyYW5zZm9ybUNhY2hhYmxlVmFsdWUodmFsdWUyKTsKICBpZiAobmV3VmFsdWUgIT09IHZhbHVlMikgewogICAgdHJhbnNmb3JtQ2FjaGUuc2V0KHZhbHVlMiwgbmV3VmFsdWUpOwogICAgcmV2ZXJzZVRyYW5zZm9ybUNhY2hlLnNldChuZXdWYWx1ZSwgdmFsdWUyKTsKICB9CiAgcmV0dXJuIG5ld1ZhbHVlOwp9CmZ1bmN0aW9uIG9wZW5EQihuYW1lLCB2ZXJzaW9uMiwgeyBibG9ja2VkLCB1cGdyYWRlLCBibG9ja2luZywgdGVybWluYXRlZCB9ID0ge30pIHsKICBjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4obmFtZSwgdmVyc2lvbjIpOwogIGNvbnN0IG9wZW5Qcm9taXNlID0gd3JhcChyZXF1ZXN0KTsKICBpZiAodXBncmFkZSkgewogICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCJ1cGdyYWRlbmVlZGVkIiwgKGV2ZW50KSA9PiB7CiAgICAgIHVwZ3JhZGUod3JhcChyZXF1ZXN0LnJlc3VsdCksIGV2ZW50Lm9sZFZlcnNpb24sIGV2ZW50Lm5ld1ZlcnNpb24sIHdyYXAocmVxdWVzdC50cmFuc2FjdGlvbiksIGV2ZW50KTsKICAgIH0pOwogIH0KICBpZiAoYmxvY2tlZCkgewogICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCJibG9ja2VkIiwgKGV2ZW50KSA9PiBibG9ja2VkKAogICAgICAvLyBDYXN0aW5nIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQtRE9NLWxpYi1nZW5lcmF0b3IvcHVsbC8xNDA1CiAgICAgIGV2ZW50Lm9sZFZlcnNpb24sCiAgICAgIGV2ZW50Lm5ld1ZlcnNpb24sCiAgICAgIGV2ZW50CiAgICApKTsKICB9CiAgb3BlblByb21pc2UudGhlbigoZGIpID0+IHsKICAgIGlmICh0ZXJtaW5hdGVkKQogICAgICBkYi5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsICgpID0+IHRlcm1pbmF0ZWQoKSk7CiAgICBpZiAoYmxvY2tpbmcpIHsKICAgICAgZGIuYWRkRXZlbnRMaXN0ZW5lcigidmVyc2lvbmNoYW5nZSIsIChldmVudCkgPT4gYmxvY2tpbmcoZXZlbnQub2xkVmVyc2lvbiwgZXZlbnQubmV3VmVyc2lvbiwgZXZlbnQpKTsKICAgIH0KICB9KS5jYXRjaCgoKSA9PiB7CiAgfSk7CiAgcmV0dXJuIG9wZW5Qcm9taXNlOwp9CmZ1bmN0aW9uIGRlbGV0ZURCKG5hbWUsIHsgYmxvY2tlZCB9ID0ge30pIHsKICBjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKG5hbWUpOwogIGlmIChibG9ja2VkKSB7CiAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoImJsb2NrZWQiLCAoZXZlbnQpID0+IGJsb2NrZWQoCiAgICAgIC8vIENhc3RpbmcgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC1ET00tbGliLWdlbmVyYXRvci9wdWxsLzE0MDUKICAgICAgZXZlbnQub2xkVmVyc2lvbiwKICAgICAgZXZlbnQKICAgICkpOwogIH0KICByZXR1cm4gd3JhcChyZXF1ZXN0KS50aGVuKCgpID0+IHZvaWQgMCk7Cn0KZnVuY3Rpb24gZ2V0TWV0aG9kKHRhcmdldCwgcHJvcCkgewogIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIElEQkRhdGFiYXNlICYmICEocHJvcCBpbiB0YXJnZXQpICYmIHR5cGVvZiBwcm9wID09PSAic3RyaW5nIikpIHsKICAgIHJldHVybjsKICB9CiAgaWYgKGNhY2hlZE1ldGhvZHMuZ2V0KHByb3ApKQogICAgcmV0dXJuIGNhY2hlZE1ldGhvZHMuZ2V0KHByb3ApOwogIGNvbnN0IHRhcmdldEZ1bmNOYW1lID0gcHJvcC5yZXBsYWNlKC9Gcm9tSW5kZXgkLywgIiIpOwogIGNvbnN0IHVzZUluZGV4ID0gcHJvcCAhPT0gdGFyZ2V0RnVuY05hbWU7CiAgY29uc3QgaXNXcml0ZSA9IHdyaXRlTWV0aG9kcy5pbmNsdWRlcyh0YXJnZXRGdW5jTmFtZSk7CiAgaWYgKAogICAgLy8gQmFpbCBpZiB0aGUgdGFyZ2V0IGRvZXNuJ3QgZXhpc3Qgb24gdGhlIHRhcmdldC4gRWcsIGdldEFsbCBpc24ndCBpbiBFZGdlLgogICAgISh0YXJnZXRGdW5jTmFtZSBpbiAodXNlSW5kZXggPyBJREJJbmRleCA6IElEQk9iamVjdFN0b3JlKS5wcm90b3R5cGUpIHx8ICEoaXNXcml0ZSB8fCByZWFkTWV0aG9kcy5pbmNsdWRlcyh0YXJnZXRGdW5jTmFtZSkpCiAgKSB7CiAgICByZXR1cm47CiAgfQogIGNvbnN0IG1ldGhvZCA9IGFzeW5jIGZ1bmN0aW9uKHN0b3JlTmFtZSwgLi4uYXJncykgewogICAgY29uc3QgdHggPSB0aGlzLnRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgaXNXcml0ZSA/ICJyZWFkd3JpdGUiIDogInJlYWRvbmx5Iik7CiAgICBsZXQgdGFyZ2V0MiA9IHR4LnN0b3JlOwogICAgaWYgKHVzZUluZGV4KQogICAgICB0YXJnZXQyID0gdGFyZ2V0Mi5pbmRleChhcmdzLnNoaWZ0KCkpOwogICAgcmV0dXJuIChhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgIHRhcmdldDJbdGFyZ2V0RnVuY05hbWVdKC4uLmFyZ3MpLAogICAgICBpc1dyaXRlICYmIHR4LmRvbmUKICAgIF0pKVswXTsKICB9OwogIGNhY2hlZE1ldGhvZHMuc2V0KHByb3AsIG1ldGhvZCk7CiAgcmV0dXJuIG1ldGhvZDsKfQphc3luYyBmdW5jdGlvbiogaXRlcmF0ZSguLi5hcmdzKSB7CiAgbGV0IGN1cnNvciA9IHRoaXM7CiAgaWYgKCEoY3Vyc29yIGluc3RhbmNlb2YgSURCQ3Vyc29yKSkgewogICAgY3Vyc29yID0gYXdhaXQgY3Vyc29yLm9wZW5DdXJzb3IoLi4uYXJncyk7CiAgfQogIGlmICghY3Vyc29yKQogICAgcmV0dXJuOwogIGN1cnNvciA9IGN1cnNvcjsKICBjb25zdCBwcm94aWVkQ3Vyc29yID0gbmV3IFByb3h5KGN1cnNvciwgY3Vyc29ySXRlcmF0b3JUcmFwcyk7CiAgaXR0clByb3hpZWRDdXJzb3JUb09yaWdpbmFsUHJveHkuc2V0KHByb3hpZWRDdXJzb3IsIGN1cnNvcik7CiAgcmV2ZXJzZVRyYW5zZm9ybUNhY2hlLnNldChwcm94aWVkQ3Vyc29yLCB1bndyYXAoY3Vyc29yKSk7CiAgd2hpbGUgKGN1cnNvcikgewogICAgeWllbGQgcHJveGllZEN1cnNvcjsKICAgIGN1cnNvciA9IGF3YWl0IChhZHZhbmNlUmVzdWx0cy5nZXQocHJveGllZEN1cnNvcikgfHwgY3Vyc29yLmNvbnRpbnVlKCkpOwogICAgYWR2YW5jZVJlc3VsdHMuZGVsZXRlKHByb3hpZWRDdXJzb3IpOwogIH0KfQpmdW5jdGlvbiBpc0l0ZXJhdG9yUHJvcCh0YXJnZXQsIHByb3ApIHsKICByZXR1cm4gcHJvcCA9PT0gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaW5zdGFuY2VPZkFueSh0YXJnZXQsIFtJREJJbmRleCwgSURCT2JqZWN0U3RvcmUsIElEQkN1cnNvcl0pIHx8IHByb3AgPT09ICJpdGVyYXRlIiAmJiBpbnN0YW5jZU9mQW55KHRhcmdldCwgW0lEQkluZGV4LCBJREJPYmplY3RTdG9yZV0pOwp9CnZhciBpbnN0YW5jZU9mQW55LCBpZGJQcm94eWFibGVUeXBlcywgY3Vyc29yQWR2YW5jZU1ldGhvZHMsIHRyYW5zYWN0aW9uRG9uZU1hcCwgdHJhbnNmb3JtQ2FjaGUsIHJldmVyc2VUcmFuc2Zvcm1DYWNoZSwgaWRiUHJveHlUcmFwcywgdW53cmFwLCByZWFkTWV0aG9kcywgd3JpdGVNZXRob2RzLCBjYWNoZWRNZXRob2RzLCBhZHZhbmNlTWV0aG9kUHJvcHMsIG1ldGhvZE1hcCwgYWR2YW5jZVJlc3VsdHMsIGl0dHJQcm94aWVkQ3Vyc29yVG9PcmlnaW5hbFByb3h5LCBjdXJzb3JJdGVyYXRvclRyYXBzOwp2YXIgaW5pdF9idWlsZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K2lkYkA4LjAuMy9ub2RlX21vZHVsZXMvQHRlbXBmaXgvaWRiL2J1aWxkL2luZGV4LmpzIigpIHsKICAgIGluc3RhbmNlT2ZBbnkgPSAob2JqZWN0LCBjb25zdHJ1Y3RvcnMpID0+IGNvbnN0cnVjdG9ycy5zb21lKChjMTEpID0+IG9iamVjdCBpbnN0YW5jZW9mIGMxMSk7CiAgICB0cmFuc2FjdGlvbkRvbmVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIHRyYW5zZm9ybUNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgICByZXZlcnNlVHJhbnNmb3JtQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIGlkYlByb3h5VHJhcHMgPSB7CiAgICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7CiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIElEQlRyYW5zYWN0aW9uKSB7CiAgICAgICAgICBpZiAocHJvcCA9PT0gImRvbmUiKQogICAgICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb25Eb25lTWFwLmdldCh0YXJnZXQpOwogICAgICAgICAgaWYgKHByb3AgPT09ICJzdG9yZSIpIHsKICAgICAgICAgICAgcmV0dXJuIHJlY2VpdmVyLm9iamVjdFN0b3JlTmFtZXNbMV0gPyB2b2lkIDAgOiByZWNlaXZlci5vYmplY3RTdG9yZShyZWNlaXZlci5vYmplY3RTdG9yZU5hbWVzWzBdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHdyYXAodGFyZ2V0W3Byb3BdKTsKICAgICAgfSwKICAgICAgc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUyKSB7CiAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWUyOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9LAogICAgICBoYXModGFyZ2V0LCBwcm9wKSB7CiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIElEQlRyYW5zYWN0aW9uICYmIChwcm9wID09PSAiZG9uZSIgfHwgcHJvcCA9PT0gInN0b3JlIikpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcHJvcCBpbiB0YXJnZXQ7CiAgICAgIH0KICAgIH07CiAgICB1bndyYXAgPSAodmFsdWUyKSA9PiByZXZlcnNlVHJhbnNmb3JtQ2FjaGUuZ2V0KHZhbHVlMik7CiAgICByZWFkTWV0aG9kcyA9IFsiZ2V0IiwgImdldEtleSIsICJnZXRBbGwiLCAiZ2V0QWxsS2V5cyIsICJjb3VudCJdOwogICAgd3JpdGVNZXRob2RzID0gWyJwdXQiLCAiYWRkIiwgImRlbGV0ZSIsICJjbGVhciJdOwogICAgY2FjaGVkTWV0aG9kcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICByZXBsYWNlVHJhcHMoKG9sZFRyYXBzKSA9PiAoewogICAgICAuLi5vbGRUcmFwcywKICAgICAgZ2V0OiAodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikgPT4gZ2V0TWV0aG9kKHRhcmdldCwgcHJvcCkgfHwgb2xkVHJhcHMuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpLAogICAgICBoYXM6ICh0YXJnZXQsIHByb3ApID0+ICEhZ2V0TWV0aG9kKHRhcmdldCwgcHJvcCkgfHwgb2xkVHJhcHMuaGFzKHRhcmdldCwgcHJvcCkKICAgIH0pKTsKICAgIGFkdmFuY2VNZXRob2RQcm9wcyA9IFsiY29udGludWUiLCAiY29udGludWVQcmltYXJ5S2V5IiwgImFkdmFuY2UiXTsKICAgIG1ldGhvZE1hcCA9IHt9OwogICAgYWR2YW5jZVJlc3VsdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIGl0dHJQcm94aWVkQ3Vyc29yVG9PcmlnaW5hbFByb3h5ID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgICBjdXJzb3JJdGVyYXRvclRyYXBzID0gewogICAgICBnZXQodGFyZ2V0LCBwcm9wKSB7CiAgICAgICAgaWYgKCFhZHZhbmNlTWV0aG9kUHJvcHMuaW5jbHVkZXMocHJvcCkpCiAgICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BdOwogICAgICAgIGxldCBjYWNoZWRGdW5jID0gbWV0aG9kTWFwW3Byb3BdOwogICAgICAgIGlmICghY2FjaGVkRnVuYykgewogICAgICAgICAgY2FjaGVkRnVuYyA9IG1ldGhvZE1hcFtwcm9wXSA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHsKICAgICAgICAgICAgYWR2YW5jZVJlc3VsdHMuc2V0KHRoaXMsIGl0dHJQcm94aWVkQ3Vyc29yVG9PcmlnaW5hbFByb3h5LmdldCh0aGlzKVtwcm9wXSguLi5hcmdzKSk7CiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gY2FjaGVkRnVuYzsKICAgICAgfQogICAgfTsKICAgIHJlcGxhY2VUcmFwcygob2xkVHJhcHMpID0+ICh7CiAgICAgIC4uLm9sZFRyYXBzLAogICAgICBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikgewogICAgICAgIGlmIChpc0l0ZXJhdG9yUHJvcCh0YXJnZXQsIHByb3ApKQogICAgICAgICAgcmV0dXJuIGl0ZXJhdGU7CiAgICAgICAgcmV0dXJuIG9sZFRyYXBzLmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTsKICAgICAgfSwKICAgICAgaGFzKHRhcmdldCwgcHJvcCkgewogICAgICAgIHJldHVybiBpc0l0ZXJhdG9yUHJvcCh0YXJnZXQsIHByb3ApIHx8IG9sZFRyYXBzLmhhcyh0YXJnZXQsIHByb3ApOwogICAgICB9CiAgICB9KSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzdG9yZUAyLjAuMjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnN0b3JlL2Rpc3RfdHMvd2Vic3RvcmUucGx1Z2lucy5qcwp2YXIgaW5pdF93ZWJzdG9yZV9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic3RvcmVAMi4wLjIwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzdG9yZS9kaXN0X3RzL3dlYnN0b3JlLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzNygpOwogICAgaW5pdF9kaXN0X3RzMTAoKTsKICAgIGluaXRfZGlzdF90czEyKCk7CiAgICBpbml0X2Rpc3RfdHMoKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIGluaXRfZGlzdF90czQoKTsKICAgIGluaXRfYnVpbGQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvZGlzdF90cy93ZWJzdG9yZS5jbGFzc2VzLndlYnN0b3JlLmpzCnZhciBXZWJTdG9yZTsKdmFyIGluaXRfd2Vic3RvcmVfY2xhc3Nlc193ZWJzdG9yZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvZGlzdF90cy93ZWJzdG9yZS5jbGFzc2VzLndlYnN0b3JlLmpzIigpIHsKICAgIGluaXRfd2Vic3RvcmVfcGx1Z2lucygpOwogICAgV2ViU3RvcmUgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmcpIHsKICAgICAgICB0aGlzLmluaXRDYWxsZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnJlYWR5RGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zQXJnOwogICAgICB9CiAgICAgIGFzeW5jIGluaXQoKSB7CiAgICAgICAgaWYgKHRoaXMuaW5pdENhbGxlZCkgewogICAgICAgICAgYXdhaXQgdGhpcy5yZWFkeURlZmVycmVkLnByb21pc2U7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuaW5pdENhbGxlZCA9IHRydWU7CiAgICAgICAgY29uc3Qgc21hcnRlbnYgPSBuZXcgZGlzdF90c19leHBvcnRzMTAuU21hcnRlbnYoKTsKICAgICAgICBpZiAoIXNtYXJ0ZW52LmlzQnJvd3NlciAmJiAhZ2xvYmFsVGhpcy5pbmRleGVkREIpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJoZXkiKTsKICAgICAgICAgIGNvbnNvbGUubG9nKGdsb2JhbFRoaXMuaW5kZXhlZERCKTsKICAgICAgICAgIGF3YWl0IHNtYXJ0ZW52LmdldFNhZmVOb2RlTW9kdWxlKCJmYWtlLWluZGV4ZWRkYi9hdXRvIik7CiAgICAgICAgICBpZiAoIWdsb2JhbFRoaXMuaW5kZXhlZERCKSB7CiAgICAgICAgICAgIGNvbnN0IG1vZCA9IGF3YWl0IHNtYXJ0ZW52LmdldFNhZmVOb2RlTW9kdWxlKCJmYWtlLWluZGV4ZWRkYiIpOwogICAgICAgICAgICBnbG9iYWxUaGlzLmluZGV4ZWREQiA9IG5ldyBtb2QuSURCRmFjdG9yeSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmRiID0gYXdhaXQgYnVpbGRfZXhwb3J0cy5vcGVuREIodGhpcy5vcHRpb25zLmRiTmFtZSwgMSwgewogICAgICAgICAgdXBncmFkZTogKGRiKSA9PiB7CiAgICAgICAgICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHRoaXMucmVhZHlEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGFzeW5jIGdldChrZXkyKSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7CiAgICAgICAgcmV0dXJuIHRoaXMuZGIuZ2V0KHRoaXMub3B0aW9ucy5zdG9yZU5hbWUsIGtleTIpOwogICAgICB9CiAgICAgIGFzeW5jIGNoZWNrKGtleUFyZykgewogICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpOwogICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0KGtleUFyZyk7CiAgICAgICAgcmV0dXJuICEhcmVzdWx0OwogICAgICB9CiAgICAgIGFzeW5jIHNldChrZXkyLCB2YWwpIHsKICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTsKICAgICAgICByZXR1cm4gdGhpcy5kYi5wdXQodGhpcy5vcHRpb25zLnN0b3JlTmFtZSwgdmFsLCBrZXkyKTsKICAgICAgfQogICAgICBhc3luYyBkZWxldGUoa2V5MikgewogICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpOwogICAgICAgIHJldHVybiB0aGlzLmRiLmRlbGV0ZSh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lLCBrZXkyKTsKICAgICAgfQogICAgICBhc3luYyBjbGVhcigpIHsKICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTsKICAgICAgICByZXR1cm4gdGhpcy5kYi5jbGVhcih0aGlzLm9wdGlvbnMuc3RvcmVOYW1lKTsKICAgICAgfQogICAgICBhc3luYyBrZXlzKCkgewogICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpOwogICAgICAgIHJldHVybiB0aGlzLmRiLmdldEFsbEtleXModGhpcy5vcHRpb25zLnN0b3JlTmFtZSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzdG9yZUAyLjAuMjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnN0b3JlL2Rpc3RfdHMvd2Vic3RvcmUuY2xhc3Nlcy50eXBlZHJlcXVlc3RjYWNoZS5qcwp2YXIgVHlwZWRyZXF1ZXN0Q2FjaGU7CnZhciBpbml0X3dlYnN0b3JlX2NsYXNzZXNfdHlwZWRyZXF1ZXN0Y2FjaGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzdG9yZUAyLjAuMjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnN0b3JlL2Rpc3RfdHMvd2Vic3RvcmUuY2xhc3Nlcy50eXBlZHJlcXVlc3RjYWNoZS5qcyIoKSB7CiAgICBpbml0X3dlYnN0b3JlX2NsYXNzZXNfd2Vic3RvcmUoKTsKICAgIGluaXRfd2Vic3RvcmVfcGx1Z2lucygpOwogICAgVHlwZWRyZXF1ZXN0Q2FjaGUgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGRvbWFpbkFyZyA9ICJkZWZhdWx0IikgewogICAgICAgIHRoaXMud2Vic3RvcmUgPSBuZXcgV2ViU3RvcmUoewogICAgICAgICAgZGJOYW1lOiAidHJTdG9yZSIsCiAgICAgICAgICBzdG9yZU5hbWU6IGB0clN0b3JlLSR7ZG9tYWluQXJnfWAKICAgICAgICB9KTsKICAgICAgfQogICAgICBidWlsZEtleShyZXF1ZXN0QXJnKSB7CiAgICAgICAgcmV0dXJuIGRpc3RfdHNfZXhwb3J0czEyLnN0cmluZ2lmeSh7CiAgICAgICAgICBtZXRob2Q6IHJlcXVlc3RBcmcubWV0aG9kLAogICAgICAgICAgcmVxdWVzdDogcmVxdWVzdEFyZy5yZXF1ZXN0CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0b3JlcyBieSByZXF1ZXN0CiAgICAgICAqIEBwYXJhbSB0eXBlZHJlcXVlc3RhcmcKICAgICAgICovCiAgICAgIGFzeW5jIHNldEJ5UmVxdWVzdCh0eXBlZHJlcXVlc3RBcmcpIHsKICAgICAgICBpZiAoIXR5cGVkcmVxdWVzdEFyZy5yZXNwb25zZSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJZb3UgY2Fubm90IHN0b3JlIHJlcXVlc3RzIHdpdGhvdXQgYSByZXNwb25zZSBwcmVzZW50Iik7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMud2Vic3RvcmUuc2V0KHRoaXMuYnVpbGRLZXkodHlwZWRyZXF1ZXN0QXJnKSwgdHlwZWRyZXF1ZXN0QXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZ2V0IGJ5IGZ1bGwgdHlvZWRyZXF1ZXN0IGJ5IHBhcnRpYWwgdHlwZWRyZXF1ZXN0CiAgICAgICAqIEBwYXJhbSB0eXBlZHJlcXVlc3RhcmcKICAgICAgICovCiAgICAgIGFzeW5jIGdldEJ5UmVxdWVzdCh0eXBlZHJlcXVlc3RBcmcpIHsKICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLndlYnN0b3JlLmdldCh0aGlzLmJ1aWxkS2V5KHR5cGVkcmVxdWVzdEFyZykpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzdG9yZUAyLjAuMjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnN0b3JlL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czEzID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czEzLCB7CiAgVHlwZWRyZXF1ZXN0Q2FjaGU6ICgpID0+IFR5cGVkcmVxdWVzdENhY2hlLAogIFdlYlN0b3JlOiAoKSA9PiBXZWJTdG9yZQp9KTsKdmFyIGluaXRfZGlzdF90czEzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic3RvcmVAMi4wLjIwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzdG9yZS9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfd2Vic3RvcmVfY2xhc3Nlc190eXBlZHJlcXVlc3RjYWNoZSgpOwogICAgaW5pdF93ZWJzdG9yZV9jbGFzc2VzX3dlYnN0b3JlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJyZXF1ZXN0QDMuMC4zNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2VicmVxdWVzdC9kaXN0X3RzL3dlYnJlcXVlc3QucGx1Z2lucy5qcwp2YXIgaW5pdF93ZWJyZXF1ZXN0X3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJyZXF1ZXN0QDMuMC4zNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2VicmVxdWVzdC9kaXN0X3RzL3dlYnJlcXVlc3QucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMzKCk7CiAgICBpbml0X2Rpc3RfdHMxMCgpOwogICAgaW5pdF9kaXN0X3RzMTIoKTsKICAgIGluaXRfZGlzdF90cygpOwogICAgaW5pdF9kaXN0X3RzMTMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RAMy4wLjM3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czE0ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czE0LCB7CiAgV2ViUmVxdWVzdDogKCkgPT4gV2ViUmVxdWVzdAp9KTsKdmFyIFdlYlJlcXVlc3Q7CnZhciBpbml0X2Rpc3RfdHMxNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RAMy4wLjM3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF93ZWJyZXF1ZXN0X3BsdWdpbnMoKTsKICAgIFdlYlJlcXVlc3QgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmcgPSB7fSkgewogICAgICAgIHRoaXMub3B0aW9uc0FyZyA9IG9wdGlvbnNBcmc7CiAgICAgICAgdGhpcy5jYWNoZVN0b3JlID0gbmV3IGRpc3RfdHNfZXhwb3J0czEzLldlYlN0b3JlKHsKICAgICAgICAgIGRiTmFtZTogIndlYnJlcXVlc3QiLAogICAgICAgICAgc3RvcmVOYW1lOiAid2VicmVxdWVzdCIKICAgICAgICB9KTsKICAgICAgICB0aGlzLm9wdGlvbnMgPSB7CiAgICAgICAgICBsb2dnaW5nOiB0cnVlLAogICAgICAgICAgLi4ub3B0aW9uc0FyZwogICAgICAgIH07CiAgICAgIH0KICAgICAgYXN5bmMgZ2V0SnNvbih1cmxBcmcsIHVzZUNhY2hlQXJnID0gZmFsc2UpIHsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdCh1cmxBcmcsIHsKICAgICAgICAgIG1ldGhvZDogIkdFVCIsCiAgICAgICAgICB1c2VDYWNoZTogdXNlQ2FjaGVBcmcKICAgICAgICB9KTsKICAgICAgICBjb25zdCByZXNwb25zZVRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7CiAgICAgICAgY29uc3QgcmVzcG9uc2VSZXN1bHQgPSBkaXN0X3RzX2V4cG9ydHMxMi5wYXJzZShyZXNwb25zZVRleHQpOwogICAgICAgIHJldHVybiByZXNwb25zZVJlc3VsdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcG9zdEpzb24KICAgICAgICovCiAgICAgIGFzeW5jIHBvc3RKc29uKHVybEFyZywgcmVxdWVzdEJvZHksIHVzZUNhY2hlQXJnID0gZmFsc2UpIHsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdCh1cmxBcmcsIHsKICAgICAgICAgIG1ldGhvZDogIlBPU1QiLAogICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgICB9LAogICAgICAgICAgYm9keTogZGlzdF90c19leHBvcnRzMTIuc3RyaW5naWZ5KHJlcXVlc3RCb2R5KSwKICAgICAgICAgIHVzZUNhY2hlOiB1c2VDYWNoZUFyZwogICAgICAgIH0pOwogICAgICAgIGNvbnN0IHJlc3BvbnNlVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTsKICAgICAgICBjb25zdCByZXNwb25zZVJlc3VsdCA9IGRpc3RfdHNfZXhwb3J0czEyLnBhcnNlKHJlc3BvbnNlVGV4dCk7CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlUmVzdWx0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBwdXQganMKICAgICAgICovCiAgICAgIGFzeW5jIHB1dEpzb24odXJsQXJnLCByZXF1ZXN0Qm9keSwgdXNlU3RvcmVBc0ZhbGxiYWNrID0gZmFsc2UpIHsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdCh1cmxBcmcsIHsKICAgICAgICAgIG1ldGhvZDogIlBVVCIsCiAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICAgIH0sCiAgICAgICAgICBib2R5OiBkaXN0X3RzX2V4cG9ydHMxMi5zdHJpbmdpZnkocmVxdWVzdEJvZHkpCiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICAgIGNvbnN0IHJlc3BvbnNlUmVzdWx0ID0gZGlzdF90c19leHBvcnRzMTIucGFyc2UocmVzcG9uc2VUZXh0KTsKICAgICAgICByZXR1cm4gcmVzcG9uc2VSZXN1bHQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHB1dCBqcwogICAgICAgKi8KICAgICAgYXN5bmMgZGVsZXRlSnNvbih1cmxBcmcsIHVzZVN0b3JlQXNGYWxsYmFjayA9IGZhbHNlKSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QodXJsQXJnLCB7CiAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICAgIH0sCiAgICAgICAgICBtZXRob2Q6ICJHRVQiCiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICAgIGNvbnN0IHJlc3BvbnNlUmVzdWx0ID0gZGlzdF90c19leHBvcnRzMTIucGFyc2UocmVzcG9uc2VUZXh0KTsKICAgICAgICByZXR1cm4gcmVzcG9uc2VSZXN1bHQ7CiAgICAgIH0KICAgICAgYXN5bmMgcmVxdWVzdCh1cmxBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICBvcHRpb25zQXJnID0gewogICAgICAgICAgdGltZW91dE1zOiA2ZTQsCiAgICAgICAgICB1c2VDYWNoZTogZmFsc2UsCiAgICAgICAgICAuLi5vcHRpb25zQXJnCiAgICAgICAgfTsKICAgICAgICBsZXQgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICAgICAgICBkaXN0X3RzX2V4cG9ydHMzLmRlbGF5Rm9yKG9wdGlvbnNBcmcudGltZW91dE1zKS50aGVuKCgpID0+IHsKICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgICB9KTsKICAgICAgICBsZXQgY2FjaGVkUmVzcG9uc2VEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIGxldCBjYWNoZVVzZWQgPSBmYWxzZTsKICAgICAgICBpZiAob3B0aW9uc0FyZy51c2VDYWNoZSAmJiBhd2FpdCB0aGlzLmNhY2hlU3RvcmUuY2hlY2sodXJsQXJnKSkgewogICAgICAgICAgY29uc3QgcmVzcG9uc2VCdWZmZXIgPSBhd2FpdCB0aGlzLmNhY2hlU3RvcmUuZ2V0KHVybEFyZyk7CiAgICAgICAgICBjYWNoZWRSZXNwb25zZURlZmVycmVkLnJlc29sdmUobmV3IFJlc3BvbnNlKHJlc3BvbnNlQnVmZmVyLCB7fSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjYWNoZWRSZXNwb25zZURlZmVycmVkLnJlc29sdmUobnVsbCk7CiAgICAgICAgfQogICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybEFyZywgewogICAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCwKICAgICAgICAgIG1ldGhvZDogb3B0aW9uc0FyZy5tZXRob2QsCiAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgIC4uLm9wdGlvbnNBcmcuaGVhZGVycyB8fCB7fQogICAgICAgICAgfSwKICAgICAgICAgIGJvZHk6IG9wdGlvbnNBcmcuYm9keQogICAgICAgIH0pLmNhdGNoKGFzeW5jIChlcnIpID0+IHsKICAgICAgICAgIGlmIChvcHRpb25zQXJnLnVzZUNhY2hlICYmIGF3YWl0IGNhY2hlZFJlc3BvbnNlRGVmZXJyZWQucHJvbWlzZSkgewogICAgICAgICAgICBjYWNoZVVzZWQgPSB0cnVlOwogICAgICAgICAgICBjb25zdCBjYWNoZWRSZXNwb25zZSA9IGNhY2hlZFJlc3BvbnNlRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFJlc3BvbnNlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAob3B0aW9uc0FyZy51c2VDYWNoZSAmJiBhd2FpdCBjYWNoZWRSZXNwb25zZURlZmVycmVkLnByb21pc2UgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSA1MDApIHsKICAgICAgICAgIGNhY2hlVXNlZCA9IHRydWU7CiAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGNhY2hlZFJlc3BvbnNlRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFjYWNoZVVzZWQgJiYgb3B0aW9uc0FyZy51c2VDYWNoZSAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDApIHsKICAgICAgICAgIGNvbnN0IGJ1ZmZlcjIgPSBhd2FpdCByZXNwb25zZS5jbG9uZSgpLmFycmF5QnVmZmVyKCk7CiAgICAgICAgICBhd2FpdCB0aGlzLmNhY2hlU3RvcmUuc2V0KHVybEFyZywgYnVmZmVyMik7CiAgICAgICAgfQogICAgICAgIHRoaXMubG9nKGAke3VybEFyZ30gYW5zd2VycyB3aXRoIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9YCk7CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhIG11bHRpIGVuZHBvaW50LCBmYXVsdCB0b2xlcmFudCByZXF1ZXN0IGZ1bmN0aW9uCiAgICAgICAqLwogICAgICBhc3luYyByZXF1ZXN0TXVsdGlFbmRwb2ludCh1cmxBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICBsZXQgYWxsVXJsczsKICAgICAgICBsZXQgdXNlZFVybEluZGV4ID0gMDsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh1cmxBcmcpKSB7CiAgICAgICAgICBhbGxVcmxzID0gdXJsQXJnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhbGxVcmxzID0gW3VybEFyZ107CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlcXVlc3RIaXN0b3J5ID0gW107CiAgICAgICAgY29uc3QgZG9IaXN0b3J5Q2hlY2sgPSBhc3luYyAoaGlzdG9yeUVudHJ5VHlwZUFyZykgPT4gewogICAgICAgICAgcmVxdWVzdEhpc3RvcnkucHVzaChoaXN0b3J5RW50cnlUeXBlQXJnKTsKICAgICAgICAgIGlmIChoaXN0b3J5RW50cnlUeXBlQXJnID09PSAiNDI5IikgewogICAgICAgICAgICBjb25zb2xlLmxvZygiZ290IDQyOSwgc28gd2FpdGluZyBhIGxpdHRsZSBiaXQuIik7CiAgICAgICAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3IoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDJlMyAtIDFlMyArIDEpKSArIDFlMyk7CiAgICAgICAgICB9CiAgICAgICAgICBsZXQgbnVtT2ZIaXN0b3J5VHlwZSA9IDA7CiAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlcXVlc3RIaXN0b3J5KSB7CiAgICAgICAgICAgIGlmIChlbnRyeSA9PT0gaGlzdG9yeUVudHJ5VHlwZUFyZykKICAgICAgICAgICAgICBudW1PZkhpc3RvcnlUeXBlKys7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobnVtT2ZIaXN0b3J5VHlwZSA+IDIgKiBhbGxVcmxzLmxlbmd0aCAqIHVzZWRVcmxJbmRleCkgewogICAgICAgICAgICB1c2VkVXJsSW5kZXgrKzsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGNvbnN0IGRvUmVxdWVzdCA9IGFzeW5jICh1cmxUb1VzZSkgPT4gewogICAgICAgICAgaWYgKCF1cmxUb1VzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInJlcXVlc3QgZmFpbGVkIHBlcm1hbmVudGx5Iik7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmxvZyhgR2V0dGluZyAke3VybFRvVXNlfSB3aXRoIG1ldGhvZCAke29wdGlvbnNBcmcubWV0aG9kfWApOwogICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmxUb1VzZSwgewogICAgICAgICAgICBtZXRob2Q6IG9wdGlvbnNBcmcubWV0aG9kLAogICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIiwKICAgICAgICAgICAgICAuLi5vcHRpb25zQXJnLmhlYWRlcnMgfHwge30KICAgICAgICAgICAgfSwKICAgICAgICAgICAgYm9keTogb3B0aW9uc0FyZy5ib2R5CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMubG9nKGAke3VybFRvVXNlfSBhbnN3ZXJzIHdpdGggc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTsKICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMCkgewogICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhd2FpdCBkb0hpc3RvcnlDaGVjayhyZXNwb25zZS5zdGF0dXMudG9TdHJpbmcoKSk7CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRvUmVxdWVzdChhbGxVcmxzW3VzZWRVcmxJbmRleF0pOwogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgY29uc3QgZmluYWxSZXNwb25zZSA9IGF3YWl0IGRvUmVxdWVzdChhbGxVcmxzW3VzZWRVcmxJbmRleF0pOwogICAgICAgIHJldHVybiBmaW5hbFJlc3BvbnNlOwogICAgICB9CiAgICAgIGxvZyhsb2dBcmcpIHsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvZ2dpbmcpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKGxvZ0FyZyk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9wbHVnaW5zLmpzCnZhciBpc291bmlxdWUyOwp2YXIgaW5pdF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90czQoKTsKICAgIGlzb3VuaXF1ZTIgPSBfX3RvRVNNKHJlcXVpcmVfZGlzdF90cygpLCAxKTsKICAgIGluaXRfZGlzdF90czcoKTsKICAgIGluaXRfZGlzdF90czgoKTsKICAgIGluaXRfZGlzdF90czMoKTsKICAgIGluaXRfZGlzdF90czkoKTsKICAgIGluaXRfZGlzdF90cygpOwogICAgaW5pdF9kaXN0X3RzMTQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHJlc3BvbnNlZXJyb3IuanMKdmFyIFR5cGVkUmVzcG9uc2VFcnJvcjsKdmFyIGluaXRfY2xhc3Nlc190eXBlZHJlc3BvbnNlZXJyb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudHlwZWRyZXNwb25zZWVycm9yLmpzIigpIHsKICAgIGluaXRfcGx1Z2lucygpOwogICAgVHlwZWRSZXNwb25zZUVycm9yID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihlcnJvclRleHRBcmcsIGVycm9yRGF0YUFyZykgewogICAgICAgIHRoaXMuZXJyb3JUZXh0ID0gZXJyb3JUZXh0QXJnOwogICAgICAgIHRoaXMuZXJyb3JEYXRhID0gZXJyb3JEYXRhQXJnOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkdG9vbHMuanMKdmFyIFR5cGVkVG9vbHM7CnZhciBpbml0X2NsYXNzZXNfdHlwZWR0b29scyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHRvb2xzLmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJlc3BvbnNlZXJyb3IoKTsKICAgIGluaXRfcGx1Z2lucygpOwogICAgVHlwZWRUb29scyA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5sb2NhbERhdGEgPSB7fTsKICAgICAgfQogICAgICBhc3luYyBwYXNzR3VhcmRzKGd1YXJkc0FyZywgZGF0YUFyZykgewogICAgICAgIGNvbnN0IGd1YXJkU2V0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czkuR3VhcmRTZXQoZ3VhcmRzQXJnKTsKICAgICAgICBjb25zdCBndWFyZFJlc3VsdCA9IGF3YWl0IGd1YXJkU2V0LmFsbEd1YXJkc1Bhc3MoZGF0YUFyZyk7CiAgICAgICAgaWYgKCFndWFyZFJlc3VsdCkgewogICAgICAgICAgY29uc3QgZmFpbGVkSGludCA9IGF3YWl0IGd1YXJkU2V0LmdldEZhaWxlZEhpbnQoZGF0YUFyZyk7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZWRSZXNwb25zZUVycm9yKGBndWFyZCBmYWlsZWQ6ICR7ZmFpbGVkSGludH1gLCB7IGZhaWxlZEhpbnQgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkaGFuZGxlci5qcwp2YXIgVHlwZWRIYW5kbGVyOwp2YXIgaW5pdF9jbGFzc2VzX3R5cGVkaGFuZGxlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZGhhbmRsZXIuanMiKCkgewogICAgaW5pdF9wbHVnaW5zKCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRyZXNwb25zZWVycm9yKCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWR0b29scygpOwogICAgVHlwZWRIYW5kbGVyID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihtZXRob2RBcmcsIGhhbmRsZXJGdW5jdGlvbkFyZykgewogICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kQXJnOwogICAgICAgIHRoaXMuaGFuZGxlckZ1bmN0aW9uID0gaGFuZGxlckZ1bmN0aW9uQXJnOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhZGRzIGEgcmVzcG9uc2UgdG8gdGhlIHR5cGVkUmVxdWVzdAogICAgICAgKiBAcGFyYW0gdHlwZWRSZXF1ZXN0QXJnCiAgICAgICAqLwogICAgICBhc3luYyBhZGRSZXNwb25zZSh0eXBlZFJlcXVlc3RBcmcpIHsKICAgICAgICBpZiAodHlwZWRSZXF1ZXN0QXJnLm1ldGhvZCAhPT0gdGhpcy5tZXRob2QpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigidGhpcyBoYW5kbGVyIGhhcyBiZWVuIGdpdmVuIGEgd3JvbmcgbWV0aG9kIHRvIGFuc3dlciB0by4gUGxlYXNlIHVzZSBhIFR5cGVkUm91dGVyIHRvIGZpbHRlciByZXF1ZXN0cyIpOwogICAgICAgIH0KICAgICAgICBsZXQgdHlwZWRSZXNwb25zZUVycm9yOwogICAgICAgIGNvbnN0IHR5cGVkdG9vbHNJbnN0YW5jZSA9IG5ldyBUeXBlZFRvb2xzKCk7CiAgICAgICAgaWYgKHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGEpIHsKICAgICAgICAgIHR5cGVkdG9vbHNJbnN0YW5jZS5sb2NhbERhdGEgPSB0eXBlZFJlcXVlc3RBcmcubG9jYWxEYXRhOwogICAgICAgIH0KICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFuZGxlckZ1bmN0aW9uKHR5cGVkUmVxdWVzdEFyZy5yZXF1ZXN0LCB0eXBlZHRvb2xzSW5zdGFuY2UpLmNhdGNoKChlMTEpID0+IHsKICAgICAgICAgIGlmIChlMTEgaW5zdGFuY2VvZiBUeXBlZFJlc3BvbnNlRXJyb3IpIHsKICAgICAgICAgICAgdHlwZWRSZXNwb25zZUVycm9yID0gZTExOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS5sb2coZTExKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAodHlwZWRSZXNwb25zZUVycm9yKSB7CiAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcuZXJyb3IgPSB7CiAgICAgICAgICAgIHRleHQ6IHR5cGVkUmVzcG9uc2VFcnJvci5lcnJvclRleHQsCiAgICAgICAgICAgIGRhdGE6IHR5cGVkUmVzcG9uc2VFcnJvci5lcnJvckRhdGEKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmIChyZXNwb25zZSkgewogICAgICAgICAgdHlwZWRSZXF1ZXN0QXJnLnJlc3BvbnNlID0gcmVzcG9uc2U7CiAgICAgICAgfQogICAgICAgIHR5cGVkUmVxdWVzdEFyZz8uY29ycmVsYXRpb24/LnBoYXNlID8gdHlwZWRSZXF1ZXN0QXJnLmNvcnJlbGF0aW9uLnBoYXNlID0gInJlc3BvbnNlIiA6IG51bGw7CiAgICAgICAgcmV0dXJuIHR5cGVkUmVxdWVzdEFyZzsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHJvdXRlci5qcwp2YXIgVHlwZWRSb3V0ZXI7CnZhciBpbml0X2NsYXNzZXNfdHlwZWRyb3V0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudHlwZWRyb3V0ZXIuanMiKCkgewogICAgaW5pdF9wbHVnaW5zKCk7CiAgICBpbml0X2NsYXNzZXNfdmlydHVhbHN0cmVhbSgpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkaGFuZGxlcigpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkcmVxdWVzdCgpOwogICAgVHlwZWRSb3V0ZXIgPSBjbGFzcyBfVHlwZWRSb3V0ZXIgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmhvb2tzID0ge307CiAgICAgICAgdGhpcy5yb3V0ZXJNYXAgPSBuZXcgZGlzdF90c19leHBvcnRzNi5PYmplY3RNYXAoKTsKICAgICAgICB0aGlzLmhhbmRsZXJNYXAgPSBuZXcgZGlzdF90c19leHBvcnRzNi5PYmplY3RNYXAoKTsKICAgICAgICB0aGlzLnJlZ2lzdGVyZWRWaXJ0dWFsU3RyZWFtcyA9IG5ldyBkaXN0X3RzX2V4cG9ydHM2Lk9iamVjdE1hcCgpOwogICAgICAgIHRoaXMuZmlyZUV2ZW50SW50ZXJlc3RNYXAgPSBuZXcgZGlzdF90c19leHBvcnRzNi5JbnRlcmVzdE1hcCgoY29ycmVsYXRpb25JZCkgPT4gY29ycmVsYXRpb25JZCk7CiAgICAgIH0KICAgICAgLy8gVXNlIGdsb2JhbFRoaXMgZm9yIGNyb3NzLWJ1bmRsZSBob29rIHNoYXJpbmcKICAgICAgc3RhdGljIGdldCBnbG9iYWxIb29rcygpIHsKICAgICAgICBpZiAoIWdsb2JhbFRoaXMuX190eXBlZFJvdXRlckdsb2JhbEhvb2tzKSB7CiAgICAgICAgICBnbG9iYWxUaGlzLl9fdHlwZWRSb3V0ZXJHbG9iYWxIb29rcyA9IHt9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gZ2xvYmFsVGhpcy5fX3R5cGVkUm91dGVyR2xvYmFsSG9va3M7CiAgICAgIH0KICAgICAgc3RhdGljIHNldCBnbG9iYWxIb29rcyh2YWx1ZTIpIHsKICAgICAgICBnbG9iYWxUaGlzLl9fdHlwZWRSb3V0ZXJHbG9iYWxIb29rcyA9IHZhbHVlMjsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IGdsb2JhbCBob29rcyBmb3IgbW9uaXRvcmluZyBhbGwgVHlwZWRSZXF1ZXN0IHRyYWZmaWMKICAgICAgICogSG9va3MgYXJlIHNoYXJlZCBhY3Jvc3MgYWxsIGJ1bmRsZXMgdmlhIGdsb2JhbFRoaXMKICAgICAgICovCiAgICAgIHN0YXRpYyBzZXRHbG9iYWxIb29rcyhob29rczgpIHsKICAgICAgICBjb25zdCBjdXJyZW50ID0gX1R5cGVkUm91dGVyLmdsb2JhbEhvb2tzOwogICAgICAgIF9UeXBlZFJvdXRlci5nbG9iYWxIb29rcyA9IHsgLi4uY3VycmVudCwgLi4uaG9va3M4IH07CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENsZWFyIGFsbCBnbG9iYWwgaG9va3MKICAgICAgICovCiAgICAgIHN0YXRpYyBjbGVhckdsb2JhbEhvb2tzKCkgewogICAgICAgIGdsb2JhbFRoaXMuX190eXBlZFJvdXRlckdsb2JhbEhvb2tzID0ge307CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNldCBpbnN0YW5jZS1sZXZlbCBob29rcyBmb3IgbW9uaXRvcmluZyB0cmFmZmljIHRocm91Z2ggdGhpcyByb3V0ZXIKICAgICAgICovCiAgICAgIHNldEhvb2tzKGhvb2tzOCkgewogICAgICAgIHRoaXMuaG9va3MgPSB7IC4uLnRoaXMuaG9va3MsIC4uLmhvb2tzOCB9OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBIZWxwZXIgdG8gY2FsbCBib3RoIGdsb2JhbCBhbmQgaW5zdGFuY2UgaG9va3MKICAgICAgICovCiAgICAgIGNhbGxIb29rKGhvb2tOYW1lLCBlbnRyeSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBfVHlwZWRSb3V0ZXIuZ2xvYmFsSG9va3NbaG9va05hbWVdPy4oZW50cnkpOwogICAgICAgICAgdGhpcy5ob29rc1tob29rTmFtZV0/LihlbnRyeSk7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKGBUeXBlZFJvdXRlciBob29rIGVycm9yICgke2hvb2tOYW1lfSk6YCwgZXJyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFkZHMgdGhlIGhhbmRsZXIgdG8gdGhlIHJvdXRpbmcgbWFwCiAgICAgICAqIEBwYXJhbSB0eXBlZEhhbmRsZXJBcmcKICAgICAgICovCiAgICAgIGFkZFR5cGVkSGFuZGxlcih0eXBlZEhhbmRsZXJBcmcpIHsKICAgICAgICBjb25zdCBleGlzdGluZ1R5cGVkSGFuZGxlciA9IHRoaXMuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKHR5cGVkSGFuZGxlckFyZy5tZXRob2QpOwogICAgICAgIGlmIChleGlzdGluZ1R5cGVkSGFuZGxlcikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBhIFR5cGVkSGFuZGxlciBmb3IgJHt0eXBlZEhhbmRsZXJBcmcubWV0aG9kfSBhbHJlZHkgZXhpc3RzISBDYW4ndCBhZGQgYW5vdGhlciBvbmUuYCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuaGFuZGxlck1hcC5hZGQodHlwZWRIYW5kbGVyQXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkcyBhbm90aGVyIHN1YiB0eXBlZFJvdXRlcgogICAgICAgKiBAcGFyYW0gdHlwZWRSZXF1ZXN0CiAgICAgICAqLwogICAgICBhZGRUeXBlZFJvdXRlcih0eXBlZFJvdXRlckFyZykgewogICAgICAgIGNvbnN0IHJvdXRlckV4aXN0cyA9IHRoaXMucm91dGVyTWFwLmZpbmRTeW5jKChyb3V0ZXJBcmcpID0+IHJvdXRlckFyZyA9PT0gdHlwZWRSb3V0ZXJBcmcpOwogICAgICAgIGlmICghcm91dGVyRXhpc3RzKSB7CiAgICAgICAgICB0aGlzLnJvdXRlck1hcC5hZGQodHlwZWRSb3V0ZXJBcmcpOwogICAgICAgICAgdHlwZWRSb3V0ZXJBcmcuYWRkVHlwZWRSb3V0ZXIodGhpcyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNoZWNrRm9yVHlwZWRIYW5kbGVyKG1ldGhvZEFyZykgewogICAgICAgIHJldHVybiAhIXRoaXMuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKG1ldGhvZEFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldHMgYSB0eXBlZCBSb3V0ZXIgZnJvbSB0aGUgcm91dGVyIGNoYWluLCB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbQogICAgICAgKiBAcGFyYW0gbWV0aG9kQXJnCiAgICAgICAqIEBwYXJhbSBjaGVja1Vwc3RyZWFtUm91dGVyCiAgICAgICAqLwogICAgICBnZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QobWV0aG9kQXJnLCBjaGVja2VkUm91dGVycyA9IFtdKSB7CiAgICAgICAgY2hlY2tlZFJvdXRlcnMucHVzaCh0aGlzKTsKICAgICAgICBsZXQgdHlwZWRIYW5kbGVyOwogICAgICAgIHR5cGVkSGFuZGxlciA9IHRoaXMuaGFuZGxlck1hcC5maW5kU3luYygoaGFuZGxlcjIpID0+IHsKICAgICAgICAgIHJldHVybiBoYW5kbGVyMi5tZXRob2QgPT09IG1ldGhvZEFyZzsKICAgICAgICB9KTsKICAgICAgICBpZiAoIXR5cGVkSGFuZGxlcikgewogICAgICAgICAgdGhpcy5yb3V0ZXJNYXAuZ2V0QXJyYXkoKS5mb3JFYWNoKCh0eXBlZFJvdXRlckFyZykgPT4gewogICAgICAgICAgICBpZiAoIXR5cGVkSGFuZGxlciAmJiAhY2hlY2tlZFJvdXRlcnMuaW5jbHVkZXModHlwZWRSb3V0ZXJBcmcpKSB7CiAgICAgICAgICAgICAgdHlwZWRIYW5kbGVyID0gdHlwZWRSb3V0ZXJBcmcuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKG1ldGhvZEFyZywgY2hlY2tlZFJvdXRlcnMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHR5cGVkSGFuZGxlcjsKICAgICAgfQogICAgICBzdGF0aWMgewogICAgICAgIHRoaXMuZGVmYXVsdFJvdXRlT3B0aW9ucyA9IHsKICAgICAgICAgIGxvY2FsUmVxdWVzdDogZmFsc2UsCiAgICAgICAgICBza2lwSG9va3M6IGZhbHNlCiAgICAgICAgfTsKICAgICAgfQogICAgICAvKioKICAgICAgICogaWYgdHlwZWRyZXF1ZXN0IG9iamVjdCBoYXMgY29ycmVsYXRpb24ucGhhc2UgPT09ICdyZXF1ZXN0JyAtPiByb3V0ZXMgYSB0eXBlZCByZXF1ZXN0IG9iamVjdCB0byBhIGhhbmRsZXIKICAgICAgICogaWYgdHlwZWRyZXF1ZXN0IG9iamVjdCBoYXMgY29ycmVsYXRpb24ucGhhc2UgPT09ICdyZXNwb25zZScgLT4gcm91dGVzIGEgdHlwZWQgcmVxdWVzdCBvYmplY3QgdG8gcmVxdWVzdCBmaXJlIGV2ZW50CiAgICAgICAqIEBwYXJhbSB0eXBlZFJlcXVlc3RBcmcKICAgICAgICogQHBhcmFtIG9wdGlvbnNBcmcgLSBPcHRpb25zIG9iamVjdCB3aXRoOgogICAgICAgKiAgIC0gbG9jYWxSZXF1ZXN0OiB0cmVhdCBhcyBsb2NhbCByZXF1ZXN0IChkZWZhdWx0OiBmYWxzZSkKICAgICAgICogICAtIHNraXBIb29rczogc2tpcCBjYWxsaW5nIGhvb2tzIGZvciB0aGlzIHJvdXRpbmcgKGRlZmF1bHQ6IGZhbHNlLCB1c2UgZm9yIGJyb2FkY2FzdC1yZWNlaXZlZCBtZXNzYWdlcykKICAgICAgICovCiAgICAgIGFzeW5jIHJvdXRlQW5kQWRkUmVzcG9uc2UodHlwZWRSZXF1ZXN0QXJnLCBvcHRpb25zQXJnID0ge30pIHsKICAgICAgICBjb25zdCBvcHRpb25zID0geyAuLi5fVHlwZWRSb3V0ZXIuZGVmYXVsdFJvdXRlT3B0aW9ucywgLi4ub3B0aW9uc0FyZyB9OwogICAgICAgIHR5cGVkUmVxdWVzdEFyZyA9IFZpcnR1YWxTdHJlYW0uZGVjb2RlUGF5bG9hZEZyb21OZXR3b3JrKHR5cGVkUmVxdWVzdEFyZywgewogICAgICAgICAgdHlwZWRyb3V0ZXI6IHRoaXMKICAgICAgICB9KTsKICAgICAgICB0eXBlZFJlcXVlc3RBcmcubG9jYWxEYXRhID0gdHlwZWRSZXF1ZXN0QXJnLmxvY2FsRGF0YSB8fCB7fTsKICAgICAgICB0eXBlZFJlcXVlc3RBcmcubG9jYWxEYXRhLmZpcnN0VHlwZWRyb3V0ZXIgPSB0aGlzOwogICAgICAgIGlmICh0eXBlZFJlcXVlc3RBcmcubWV0aG9kID09PSAiIyNWaXJ0dWFsU3RyZWFtIyMiKSB7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmhhbmRsZVN0cmVhbVR5cGVkUmVxdWVzdCh0eXBlZFJlcXVlc3RBcmcpOwogICAgICAgICAgcmVzdWx0LmxvY2FsRGF0YSA9IG51bGw7CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgICBpZiAodHlwZWRSZXF1ZXN0QXJnPy5jb3JyZWxhdGlvbj8ucGhhc2UgPT09ICJyZXF1ZXN0IiB8fCBvcHRpb25zLmxvY2FsUmVxdWVzdCkgewogICAgICAgICAgY29uc3QgcmVxdWVzdFN0YXJ0VGltZSA9IERhdGUubm93KCk7CiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcEhvb2tzKSB7CiAgICAgICAgICAgIHRoaXMuY2FsbEhvb2soIm9uSW5jb21pbmdSZXF1ZXN0IiwgewogICAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHR5cGVkUmVxdWVzdEFyZy5jb3JyZWxhdGlvbj8uaWQgfHwgInVua25vd24iLAogICAgICAgICAgICAgIG1ldGhvZDogdHlwZWRSZXF1ZXN0QXJnLm1ldGhvZCwKICAgICAgICAgICAgICBkaXJlY3Rpb246ICJpbmNvbWluZyIsCiAgICAgICAgICAgICAgcGhhc2U6ICJyZXF1ZXN0IiwKICAgICAgICAgICAgICB0aW1lc3RhbXA6IHJlcXVlc3RTdGFydFRpbWUsCiAgICAgICAgICAgICAgcGF5bG9hZDogdHlwZWRSZXF1ZXN0QXJnLnJlcXVlc3QKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCB0eXBlZEhhbmRsZXIgPSB0aGlzLmdldFR5cGVkSGFuZGxlckZvck1ldGhvZCh0eXBlZFJlcXVlc3RBcmcubWV0aG9kKTsKICAgICAgICAgIGlmICghdHlwZWRIYW5kbGVyKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDYW5ub3QgZmluZCBoYW5kbGVyIGZvciBtZXRob2RuYW1lICR7dHlwZWRSZXF1ZXN0QXJnLm1ldGhvZH1gKTsKICAgICAgICAgICAgdHlwZWRSZXF1ZXN0QXJnLmVycm9yID0gewogICAgICAgICAgICAgIHRleHQ6ICJUaGVyZSBpcyBubyBhdmFpbGFibGUgbWV0aG9kIGZvciB0aGlzIGNhbGwgb24gdGhlIHNlcnZlciBzaWRlIiwKICAgICAgICAgICAgICBkYXRhOiB7fQogICAgICAgICAgICB9OwogICAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcuY29ycmVsYXRpb24ucGhhc2UgPSAicmVzcG9uc2UiOwogICAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcubG9jYWxEYXRhID0gbnVsbDsKICAgICAgICAgICAgdHlwZWRSZXF1ZXN0QXJnID0gVmlydHVhbFN0cmVhbS5lbmNvZGVQYXlsb2FkRm9yTmV0d29yayh0eXBlZFJlcXVlc3RBcmcsIHsKICAgICAgICAgICAgICB0eXBlZHJvdXRlcjogdGhpcwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKCFvcHRpb25zLnNraXBIb29rcykgewogICAgICAgICAgICAgIHRoaXMuY2FsbEhvb2soIm9uT3V0Z29pbmdSZXNwb25zZSIsIHsKICAgICAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHR5cGVkUmVxdWVzdEFyZy5jb3JyZWxhdGlvbj8uaWQgfHwgInVua25vd24iLAogICAgICAgICAgICAgICAgbWV0aG9kOiB0eXBlZFJlcXVlc3RBcmcubWV0aG9kLAogICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAib3V0Z29pbmciLAogICAgICAgICAgICAgICAgcGhhc2U6ICJyZXNwb25zZSIsCiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksCiAgICAgICAgICAgICAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gcmVxdWVzdFN0YXJ0VGltZSwKICAgICAgICAgICAgICAgIHBheWxvYWQ6IHR5cGVkUmVxdWVzdEFyZy5yZXNwb25zZSwKICAgICAgICAgICAgICAgIGVycm9yOiB0eXBlZFJlcXVlc3RBcmcuZXJyb3I/LnRleHQKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdHlwZWRSZXF1ZXN0QXJnOwogICAgICAgICAgfQogICAgICAgICAgdHlwZWRSZXF1ZXN0QXJnID0gYXdhaXQgdHlwZWRIYW5kbGVyLmFkZFJlc3BvbnNlKHR5cGVkUmVxdWVzdEFyZyk7CiAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcubG9jYWxEYXRhID0gbnVsbDsKICAgICAgICAgIHR5cGVkUmVxdWVzdEFyZyA9IFZpcnR1YWxTdHJlYW0uZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsodHlwZWRSZXF1ZXN0QXJnLCB7CiAgICAgICAgICAgIHR5cGVkcm91dGVyOiB0aGlzCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmICghb3B0aW9ucy5za2lwSG9va3MpIHsKICAgICAgICAgICAgdGhpcy5jYWxsSG9vaygib25PdXRnb2luZ1Jlc3BvbnNlIiwgewogICAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHR5cGVkUmVxdWVzdEFyZy5jb3JyZWxhdGlvbj8uaWQgfHwgInVua25vd24iLAogICAgICAgICAgICAgIG1ldGhvZDogdHlwZWRSZXF1ZXN0QXJnLm1ldGhvZCwKICAgICAgICAgICAgICBkaXJlY3Rpb246ICJvdXRnb2luZyIsCiAgICAgICAgICAgICAgcGhhc2U6ICJyZXNwb25zZSIsCiAgICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLAogICAgICAgICAgICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSByZXF1ZXN0U3RhcnRUaW1lLAogICAgICAgICAgICAgIHBheWxvYWQ6IHR5cGVkUmVxdWVzdEFyZy5yZXNwb25zZSwKICAgICAgICAgICAgICBlcnJvcjogdHlwZWRSZXF1ZXN0QXJnLmVycm9yPy50ZXh0CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHR5cGVkUmVxdWVzdEFyZzsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVkUmVxdWVzdEFyZz8uY29ycmVsYXRpb24/LnBoYXNlID09PSAicmVzcG9uc2UiKSB7CiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcEhvb2tzKSB7CiAgICAgICAgICAgIHRoaXMuY2FsbEhvb2soIm9uSW5jb21pbmdSZXNwb25zZSIsIHsKICAgICAgICAgICAgICBjb3JyZWxhdGlvbklkOiB0eXBlZFJlcXVlc3RBcmcuY29ycmVsYXRpb24/LmlkIHx8ICJ1bmtub3duIiwKICAgICAgICAgICAgICBtZXRob2Q6IHR5cGVkUmVxdWVzdEFyZy5tZXRob2QsCiAgICAgICAgICAgICAgZGlyZWN0aW9uOiAiaW5jb21pbmciLAogICAgICAgICAgICAgIHBoYXNlOiAicmVzcG9uc2UiLAogICAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSwKICAgICAgICAgICAgICBwYXlsb2FkOiB0eXBlZFJlcXVlc3RBcmcucmVzcG9uc2UsCiAgICAgICAgICAgICAgZXJyb3I6IHR5cGVkUmVxdWVzdEFyZy5lcnJvcj8udGV4dAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZmlyZUV2ZW50SW50ZXJlc3RNYXAuZmluZEludGVyZXN0KHR5cGVkUmVxdWVzdEFyZy5jb3JyZWxhdGlvbi5pZCk/LmZ1bGxmaWxsSW50ZXJlc3QodHlwZWRSZXF1ZXN0QXJnKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zb2xlLmxvZygicmVjZWl2ZWQgd2VpcmRseSBzaGFwZWQgcmVxdWVzdCIpOwogICAgICAgICAgY29uc29sZS5sb2codHlwZWRSZXF1ZXN0QXJnKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogaGFuZGxlIHN0cmVhbWluZwogICAgICAgKiBAcGFyYW0gc3RyZWFtVHJBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGhhbmRsZVN0cmVhbVR5cGVkUmVxdWVzdChzdHJlYW1UckFyZykgewogICAgICAgIGNvbnN0IHJlbGV2YW50VmlydHVhbFN0cmVhbSA9IGF3YWl0IHRoaXMucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zLmZpbmQoYXN5bmMgKHZpcnR1YWxTdHJlYW1BcmcpID0+IHsKICAgICAgICAgIHJldHVybiB2aXJ0dWFsU3RyZWFtQXJnLnN0cmVhbUlkID09PSBzdHJlYW1UckFyZy5yZXF1ZXN0LnN0cmVhbUlkOwogICAgICAgIH0pOwogICAgICAgIGlmICghcmVsZXZhbnRWaXJ0dWFsU3RyZWFtKSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhgbm8gcmVsZXZhbnQgdmlydHVhbCBzdHJlYW0gZm91bmQgZm9yIHN0cmVhbSB3aXRoIGlkICR7c3RyZWFtVHJBcmcucmVxdWVzdC5zdHJlYW1JZH1gKTsKICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zLmdldEFycmF5KCkpOwogICAgICAgICAgcmV0dXJuIHN0cmVhbVRyQXJnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhgc3VjY2VzczogZm91bmQgcmVsZXZhbnQgdmlydHVhbCBzdHJlYW0gd2l0aCBpZCAke3N0cmVhbVRyQXJnLnJlcXVlc3Quc3RyZWFtSWR9YCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlbGV2YW50VmlydHVhbFN0cmVhbS5oYW5kbGVTdHJlYW1UcihzdHJlYW1UckFyZyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy52aXJ0dWFsc3RyZWFtLmpzCnZhciBjbG9zaW5nQml0LCBWaXJ0dWFsU3RyZWFtOwp2YXIgaW5pdF9jbGFzc2VzX3ZpcnR1YWxzdHJlYW0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudmlydHVhbHN0cmVhbS5qcyIoKSB7CiAgICBpbml0X3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJvdXRlcigpOwogICAgY2xvc2luZ0JpdCA9ICIjIyMjIyMjIyMjIyMjQ0xPU0lORyBCSVQjIyMjIyMjIyMjIyMjIjsKICAgIFZpcnR1YWxTdHJlYW0gPSBjbGFzcyBfVmlydHVhbFN0cmVhbSB7CiAgICAgIC8vIFNUQVRJQwogICAgICBzdGF0aWMgZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsob2JqZWN0UGF5bG9hZCwgY29tbUZ1bmN0aW9ucywgb3JpZ2luYWxQYXlsb2FkLCBwYXRoMiA9IFtdKSB7CiAgICAgICAgaWYgKCFvYmplY3RQYXlsb2FkKSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0UGF5bG9hZDsKICAgICAgICB9CiAgICAgICAgaWYgKGRpc3RfdHNfZXhwb3J0czguaXNCdWZmZXJMaWtlKG9iamVjdFBheWxvYWQpKSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0UGF5bG9hZDsKICAgICAgICB9CiAgICAgICAgaWYgKG9iamVjdFBheWxvYWQgaW5zdGFuY2VvZiBfVmlydHVhbFN0cmVhbSkgewogICAgICAgICAgaWYgKCFvYmplY3RQYXlsb2FkLnNpZGUgJiYgY29tbUZ1bmN0aW9ucy5zZW5kTWV0aG9kKSB7CiAgICAgICAgICAgIG9iamVjdFBheWxvYWQuc2lkZSA9ICJyZXF1ZXN0aW5nIjsKICAgICAgICAgICAgb2JqZWN0UGF5bG9hZC5zZW5kTWV0aG9kID0gY29tbUZ1bmN0aW9ucy5zZW5kTWV0aG9kOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFvYmplY3RQYXlsb2FkLnNpZGUgJiYgY29tbUZ1bmN0aW9ucy50eXBlZHJvdXRlcikgewogICAgICAgICAgICBvYmplY3RQYXlsb2FkLnNpZGUgPSAicmVzcG9uZGluZyI7CiAgICAgICAgICAgIG9iamVjdFBheWxvYWQudHlwZWRyb3V0ZXIgPSBjb21tRnVuY3Rpb25zLnR5cGVkcm91dGVyOwogICAgICAgICAgICBjb21tRnVuY3Rpb25zLnR5cGVkcm91dGVyLnJlZ2lzdGVyZWRWaXJ0dWFsU3RyZWFtcy5hZGQob2JqZWN0UGF5bG9hZCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIW9yaWdpbmFsUGF5bG9hZC5yZXNwb25zZSB8fCBwYXRoMi5pbmNsdWRlcygicmVzcG9uc2UiKSkgewogICAgICAgICAgICBvYmplY3RQYXlsb2FkLnN0YXJ0S2VlcEFsaXZlTG9vcCgpOwogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIF9pc1ZpcnR1YWxTdHJlYW06IHRydWUsCiAgICAgICAgICAgICAgc3RyZWFtSWQ6IG9iamVjdFBheWxvYWQuc3RyZWFtSWQKICAgICAgICAgICAgfTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgX09CTUlUVEVEX1ZJUlRVQUxfU1RSRUFNOiB0cnVlLAogICAgICAgICAgICAgIHJlYXNvbjogInBhdGggaXMgdW5kZXIgLnJlcXVlc3Q6IG9ibWl0dGVkIGZvciBkZWR1cGxpY2F0aW9uIHJlYXNvbnMgaW4gcmVzcG9uc2UgY3ljbGUuIgogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3RQYXlsb2FkKSkgewogICAgICAgICAgcmV0dXJuIG9iamVjdFBheWxvYWQubWFwKChpdGVtLCBpbmRleDIpID0+IF9WaXJ0dWFsU3RyZWFtLmVuY29kZVBheWxvYWRGb3JOZXR3b3JrKAogICAgICAgICAgICBpdGVtLAogICAgICAgICAgICBjb21tRnVuY3Rpb25zLAogICAgICAgICAgICBvcmlnaW5hbFBheWxvYWQgfHwgb2JqZWN0UGF5bG9hZCwKICAgICAgICAgICAgcGF0aDIuY29uY2F0KFN0cmluZyhpbmRleDIpKQogICAgICAgICAgICAvLyBDb252ZXJ0IGluZGV4IHRvIHN0cmluZyBhbmQgY29uY2F0ZW5hdGUgdG8gcGF0aAogICAgICAgICAgKSk7CiAgICAgICAgfSBlbHNlIGlmIChvYmplY3RQYXlsb2FkICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3RQYXlsb2FkID09PSAib2JqZWN0IikgewogICAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9iamVjdFBheWxvYWQpLnJlZHVjZSgoYWNjLCBba2V5MiwgdmFsdWUyXSkgPT4gewogICAgICAgICAgICBjb25zdCBuZXdQYXRoID0gcGF0aDIuY29uY2F0KGtleTIpOwogICAgICAgICAgICBhY2Nba2V5Ml0gPSBfVmlydHVhbFN0cmVhbS5lbmNvZGVQYXlsb2FkRm9yTmV0d29yayh2YWx1ZTIsIGNvbW1GdW5jdGlvbnMsIG9yaWdpbmFsUGF5bG9hZCB8fCBvYmplY3RQYXlsb2FkLCBuZXdQYXRoKTsKICAgICAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgICAgIH0sIHt9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG9iamVjdFBheWxvYWQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRpYyBkZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmsob2JqZWN0UGF5bG9hZCwgY29tbUZ1bmN0aW9ucykgewogICAgICAgIGlmIChkaXN0X3RzX2V4cG9ydHM4LmlzQnVmZmVyTGlrZShvYmplY3RQYXlsb2FkKSB8fCBvYmplY3RQYXlsb2FkIGluc3RhbmNlb2YgVHlwZWRSb3V0ZXIpIHsKICAgICAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkOwogICAgICAgIH0KICAgICAgICBpZiAob2JqZWN0UGF5bG9hZCAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0UGF5bG9hZCA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIGlmIChvYmplY3RQYXlsb2FkIGluc3RhbmNlb2YgU2V0IHx8IG9iamVjdFBheWxvYWQgaW5zdGFuY2VvZiBNYXAgfHwgb2JqZWN0UGF5bG9hZCBpbnN0YW5jZW9mIERhdGUgfHwgb2JqZWN0UGF5bG9hZCBpbnN0YW5jZW9mIFJlZ0V4cCB8fCBvYmplY3RQYXlsb2FkIGluc3RhbmNlb2YgRXJyb3IgfHwgb2JqZWN0UGF5bG9hZCBpbnN0YW5jZW9mIFByb21pc2UgfHwgdHlwZW9mIG9iamVjdFBheWxvYWQudGhlbiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICByZXR1cm4gb2JqZWN0UGF5bG9hZDsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChvYmplY3RQYXlsb2FkLl9pc1ZpcnR1YWxTdHJlYW0pIHsKICAgICAgICAgICAgY29uc3QgdmlydHVhbFN0cmVhbSA9IG5ldyBfVmlydHVhbFN0cmVhbSgpOwogICAgICAgICAgICB2aXJ0dWFsU3RyZWFtLnN0cmVhbUlkID0gb2JqZWN0UGF5bG9hZC5zdHJlYW1JZDsKICAgICAgICAgICAgaWYgKCF2aXJ0dWFsU3RyZWFtLnNpZGUgJiYgY29tbUZ1bmN0aW9ucy5zZW5kTWV0aG9kKSB7CiAgICAgICAgICAgICAgdmlydHVhbFN0cmVhbS5zaWRlID0gInJlcXVlc3RpbmciOwogICAgICAgICAgICAgIHZpcnR1YWxTdHJlYW0uc2VuZE1ldGhvZCA9IGNvbW1GdW5jdGlvbnMuc2VuZE1ldGhvZDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIXZpcnR1YWxTdHJlYW0uc2lkZSAmJiBjb21tRnVuY3Rpb25zLnR5cGVkcm91dGVyKSB7CiAgICAgICAgICAgICAgdmlydHVhbFN0cmVhbS5zaWRlID0gInJlc3BvbmRpbmciOwogICAgICAgICAgICAgIHZpcnR1YWxTdHJlYW0udHlwZWRyb3V0ZXIgPSBjb21tRnVuY3Rpb25zLnR5cGVkcm91dGVyOwogICAgICAgICAgICAgIGNvbW1GdW5jdGlvbnMudHlwZWRyb3V0ZXIucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zLmFkZCh2aXJ0dWFsU3RyZWFtKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2aXJ0dWFsU3RyZWFtLnN0YXJ0S2VlcEFsaXZlTG9vcCgpOwogICAgICAgICAgICByZXR1cm4gdmlydHVhbFN0cmVhbTsKICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3RQYXlsb2FkKSkgewogICAgICAgICAgICBjb25zdCByZXR1cm5BcnJheSA9IFtdOwogICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygb2JqZWN0UGF5bG9hZCkgewogICAgICAgICAgICAgIHJldHVybkFycmF5LnB1c2goX1ZpcnR1YWxTdHJlYW0uZGVjb2RlUGF5bG9hZEZyb21OZXR3b3JrKGl0ZW0sIGNvbW1GdW5jdGlvbnMpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmV0dXJuQXJyYXk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0UGF5bG9hZCkucmVkdWNlKChhY2MsIGtleTIpID0+IHsKICAgICAgICAgICAgICBhY2Nba2V5Ml0gPSBfVmlydHVhbFN0cmVhbS5kZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmsob2JqZWN0UGF5bG9hZFtrZXkyXSwgY29tbUZ1bmN0aW9ucyk7CiAgICAgICAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgICAgICAgfSwge30pOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0UGF5bG9hZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5zdHJlYW1JZCA9IGlzb3VuaXF1ZTIudW5pKCk7CiAgICAgICAgdGhpcy5rZWVwQWxpdmUgPSB0cnVlOwogICAgICAgIHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheSA9IG5ldyBkaXN0X3RzX2V4cG9ydHM2LkJhY2twcmVzc3VyZWRBcnJheSgxNik7CiAgICAgICAgdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5ID0gbmV3IGRpc3RfdHNfZXhwb3J0czYuQmFja3ByZXNzdXJlZEFycmF5KDE2KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogdGFrZXMgY2FyZSBvZiBzZW5kaW5nCiAgICAgICAqLwogICAgICBhc3luYyB3b3JrT25RdWV1ZSgpIHsKICAgICAgICBpZiAodGhpcy53b3JraW5nRGVmZXJyZWQpIHsKICAgICAgICAgIHJldHVybiB0aGlzLndvcmtpbmdEZWZlcnJlZC5wcm9taXNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLndvcmtpbmdEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5zaWRlID09PSAicmVxdWVzdGluZyIpIHsKICAgICAgICAgIGxldCB0aGlzU2lkZUlzQmFja3ByZXNzdXJlZCA9ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpOwogICAgICAgICAgbGV0IG90aGVyU2lkZUhhc05leHQgPSBmYWxzZTsKICAgICAgICAgIGxldCBvdGhlclNpZGVJc0JhY2twcmVzc3VyZWQgPSBmYWxzZTsKICAgICAgICAgIGNvbnN0IGdldEZlZWRiYWNrID0gYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjb25zdCBzdHJlYW1UciA9IGF3YWl0IHRoaXMuc2VuZE1ldGhvZCh7CiAgICAgICAgICAgICAgbWV0aG9kOiAiIyNWaXJ0dWFsU3RyZWFtIyMiLAogICAgICAgICAgICAgIHJlcXVlc3Q6IHsKICAgICAgICAgICAgICAgIHN0cmVhbUlkOiB0aGlzLnN0cmVhbUlkLAogICAgICAgICAgICAgICAgY3ljbGVJZDogaXNvdW5pcXVlMi51bmkoKSwKICAgICAgICAgICAgICAgIGN5Y2xlOiAicmVxdWVzdCIsCiAgICAgICAgICAgICAgICBtYWluUHVycG9zZTogImZlZWRiYWNrIiwKICAgICAgICAgICAgICAgIG5leHQ6IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCA+IDAsCiAgICAgICAgICAgICAgICBiYWNrcHJlc3N1cmU6ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICByZXNwb25zZTogbnVsbAogICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coInN0cmVhbSBlbmRlZCBpbW1hdHVyZWx5Iik7CiAgICAgICAgICAgICAgdGhpcy5rZWVwQWxpdmUgPSBmYWxzZTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlmIChzdHJlYW1UciAmJiBzdHJlYW1Uci5yZXNwb25zZSkgewogICAgICAgICAgICAgIG90aGVyU2lkZUlzQmFja3ByZXNzdXJlZCA9IHN0cmVhbVRyLnJlc3BvbnNlLmJhY2twcmVzc3VyZTsKICAgICAgICAgICAgICBvdGhlclNpZGVIYXNOZXh0ID0gc3RyZWFtVHIucmVzcG9uc2UubmV4dDsKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIGF3YWl0IGdldEZlZWRiYWNrKCk7CiAgICAgICAgICB3aGlsZSAodGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMCB8fCBvdGhlclNpZGVIYXNOZXh0KSB7CiAgICAgICAgICAgIGlmIChvdGhlclNpZGVJc0JhY2twcmVzc3VyZWQpIHsKICAgICAgICAgICAgICB3aGlsZSAob3RoZXJTaWRlSXNCYWNrcHJlc3N1cmVkKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygid2FpdGluZyBmb3IgZmVlZGJhY2sgYmVjYXVzZSBvZiBiYWNrcHJlc3N1cmUuLi4iKTsKICAgICAgICAgICAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3IoNTApOwogICAgICAgICAgICAgICAgYXdhaXQgZ2V0RmVlZGJhY2soKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGV0IGRhdGFBcmc7CiAgICAgICAgICAgIGlmICh0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgZGF0YUFyZyA9IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5zaGlmdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxldCBzdHJlYW1UcjsKICAgICAgICAgICAgc3RyZWFtVHIgPSBhd2FpdCB0aGlzLnNlbmRNZXRob2QoewogICAgICAgICAgICAgIG1ldGhvZDogIiMjVmlydHVhbFN0cmVhbSMjIiwKICAgICAgICAgICAgICByZXF1ZXN0OiB7CiAgICAgICAgICAgICAgICBzdHJlYW1JZDogdGhpcy5zdHJlYW1JZCwKICAgICAgICAgICAgICAgIGN5Y2xlSWQ6IGlzb3VuaXF1ZTIudW5pKCksCiAgICAgICAgICAgICAgICBjeWNsZTogInJlcXVlc3QiLAogICAgICAgICAgICAgICAgbWFpblB1cnBvc2U6IGRhdGFBcmcgPyAiY2h1bmsiIDogInJlYWQiLAogICAgICAgICAgICAgICAgYmFja3ByZXNzdXJlOiB0aGlzU2lkZUlzQmFja3ByZXNzdXJlZCwKICAgICAgICAgICAgICAgIG5leHQ6IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCA+IDAsCiAgICAgICAgICAgICAgICAuLi5kYXRhQXJnID8geyBjaHVua0RhdGE6IGRhdGFBcmcgfSA6IHt9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICByZXNwb25zZTogbnVsbAogICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coInN0cmVhbSBlbmRlZCBpbW1hdHVyZWx5Iik7CiAgICAgICAgICAgICAgdGhpcy5rZWVwQWxpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlmIChzdHJlYW1UciAmJiBzdHJlYW1Uci5yZXNwb25zZSAmJiBzdHJlYW1Uci5yZXNwb25zZS5jaHVua0RhdGEpIHsKICAgICAgICAgICAgICB0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkucHVzaChzdHJlYW1Uci5yZXNwb25zZS5jaHVua0RhdGEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG90aGVyU2lkZUlzQmFja3ByZXNzdXJlZCA9IHN0cmVhbVRyICYmIHN0cmVhbVRyLnJlc3BvbnNlICYmIHN0cmVhbVRyLnJlc3BvbnNlLmJhY2twcmVzc3VyZTsKICAgICAgICAgICAgdGhpc1NpZGVJc0JhY2twcmVzc3VyZWQgPSAhdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmNoZWNrU3BhY2VBdmFpbGFibGUoKTsKICAgICAgICAgICAgb3RoZXJTaWRlSGFzTmV4dCA9IHN0cmVhbVRyICYmIHN0cmVhbVRyLnJlc3BvbnNlICYmIHN0cmVhbVRyLnJlc3BvbnNlLm5leHQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMud29ya2luZ0RlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICB0aGlzLndvcmtpbmdEZWZlcnJlZCA9IG51bGw7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoaXMgbWV0aG9kIGhhbmRsZXMgdGhlIHN0cmVhbSBvbmx5IG9uIHRoZSByZXNwb25kaW5nIHNpZGUKICAgICAgICogQHBhcmFtIHN0cmVhbVRyQXJnCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqLwogICAgICBhc3luYyBoYW5kbGVTdHJlYW1UcihzdHJlYW1UckFyZykgewogICAgICAgIGlmIChzdHJlYW1UckFyZy5yZXF1ZXN0LmtlZXBBbGl2ZSA9PT0gdHJ1ZSAmJiB0aGlzLmtlZXBBbGl2ZSA9PT0gdHJ1ZSkgewogICAgICAgICAgdGhpcy5sYXN0S2VlcEFsaXZlRXZlbnQgPSBEYXRlLm5vdygpOwogICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtVHJBcmcucmVxdWVzdC5rZWVwQWxpdmUgPT09IGZhbHNlKSB7CiAgICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoc3RyZWFtVHJBcmcucmVxdWVzdC5tYWluUHVycG9zZSA9PT0gImtlZXBBbGl2ZSIpIHsKICAgICAgICAgIHN0cmVhbVRyQXJnLnJlc3BvbnNlID0gewogICAgICAgICAgICBzdHJlYW1JZDogdGhpcy5zdHJlYW1JZCwKICAgICAgICAgICAgY3ljbGVJZDogc3RyZWFtVHJBcmcucmVxdWVzdC5jeWNsZUlkLAogICAgICAgICAgICBjeWNsZTogInJlc3BvbnNlIiwKICAgICAgICAgICAgbWFpblB1cnBvc2U6ICJrZWVwQWxpdmUiLAogICAgICAgICAgICBrZWVwQWxpdmU6IHRoaXMua2VlcEFsaXZlLAogICAgICAgICAgICBuZXh0OiB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAwLAogICAgICAgICAgICBiYWNrcHJlc3N1cmU6ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAoc3RyZWFtVHJBcmcucmVxdWVzdC5tYWluUHVycG9zZSA9PT0gImZlZWRiYWNrIikgewogICAgICAgICAgc3RyZWFtVHJBcmcucmVzcG9uc2UgPSB7CiAgICAgICAgICAgIHN0cmVhbUlkOiB0aGlzLnN0cmVhbUlkLAogICAgICAgICAgICBjeWNsZUlkOiBzdHJlYW1UckFyZy5yZXF1ZXN0LmN5Y2xlSWQsCiAgICAgICAgICAgIGN5Y2xlOiAicmVzcG9uc2UiLAogICAgICAgICAgICBtYWluUHVycG9zZTogImZlZWRiYWNrIiwKICAgICAgICAgICAgbmV4dDogdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMCwKICAgICAgICAgICAgYmFja3ByZXNzdXJlOiAhdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmNoZWNrU3BhY2VBdmFpbGFibGUoKQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0cmVhbVRyQXJnLnJlcXVlc3QubWFpblB1cnBvc2UgPT09ICJjaHVuayIpIHsKICAgICAgICAgIHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5wdXNoKHN0cmVhbVRyQXJnLnJlcXVlc3QuY2h1bmtEYXRhKTsKICAgICAgICAgIGlmICh0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAwICYmIHN0cmVhbVRyQXJnLnJlc3BvbnNlLmJhY2twcmVzc3VyZSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgY29uc3QgZGF0YUFyZyA9IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5zaGlmdCgpOwogICAgICAgICAgICBzdHJlYW1UckFyZy5yZXNwb25zZSA9IHsKICAgICAgICAgICAgICBzdHJlYW1JZDogdGhpcy5zdHJlYW1JZCwKICAgICAgICAgICAgICBjeWNsZUlkOiBzdHJlYW1UckFyZy5yZXF1ZXN0LmN5Y2xlSWQsCiAgICAgICAgICAgICAgY3ljbGU6ICJyZXNwb25zZSIsCiAgICAgICAgICAgICAgbWFpblB1cnBvc2U6ICJjaHVuayIsCiAgICAgICAgICAgICAgbmV4dDogdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMSwKICAgICAgICAgICAgICAvLyAxIGFuZCBub3QgMCBiZWNhdXNlIHdlIGNhbGwgc2hpZnQgYSBmZXcgbGluZXMgZG93bgogICAgICAgICAgICAgIGJhY2twcmVzc3VyZTogIXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCksCiAgICAgICAgICAgICAgY2h1bmtEYXRhOiB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuc2hpZnQoKQogICAgICAgICAgICB9OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RyZWFtVHJBcmcucmVzcG9uc2UgPSB7CiAgICAgICAgICAgICAgc3RyZWFtSWQ6IHRoaXMuc3RyZWFtSWQsCiAgICAgICAgICAgICAgY3ljbGVJZDogc3RyZWFtVHJBcmcucmVxdWVzdC5jeWNsZUlkLAogICAgICAgICAgICAgIGN5Y2xlOiAicmVzcG9uc2UiLAogICAgICAgICAgICAgIG1haW5QdXJwb3NlOiAiZmVlZGJhY2siLAogICAgICAgICAgICAgIG5leHQ6IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCA+IDAsCiAgICAgICAgICAgICAgYmFja3ByZXNzdXJlOiAhdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmNoZWNrU3BhY2VBdmFpbGFibGUoKQogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgICAgc3RyZWFtVHJBcmcucmVxdWVzdCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdHJlYW1UckFyZzsKICAgICAgfQogICAgICAvLyBsaWZlY3ljbGUgbWV0aG9kcwogICAgICAvKioKICAgICAgICogY2xvc2VzIHRoZSB2aXJ0dWFsIHN0cmVhbQogICAgICAgKi8KICAgICAgYXN5bmMgY2xlYW51cCgpIHsKICAgICAgICBpZiAodGhpcy50eXBlZHJvdXRlcikgewogICAgICAgICAgdGhpcy50eXBlZHJvdXRlci5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMucmVtb3ZlKHRoaXMpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogYSBrZWVwQWxpdmUgbG9vcCB0aGF0IHdvcmtzIGFjcm9zcyB0ZWNobm9sb2dpZXMKICAgICAgICovCiAgICAgIGFzeW5jIHN0YXJ0S2VlcEFsaXZlTG9vcCgpIHsKICAgICAgICBpZiAodGhpcy5zaWRlID09PSAicmVzcG9uZGluZyIpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcigwKTsKICAgICAgICBjb25zb2xlLmxvZyhgc3RhcnRpbmcga2VlcGFsaXZlIGxvb3Agb24gc2lkZSAke3RoaXMuc2lkZX1gKTsKICAgICAgICBsZXQgY291bnRlcjIgPSAwOwogICAgICAgIGtlZXBBbGl2ZUxvb3A6IHdoaWxlICh0aGlzLmtlZXBBbGl2ZSkgewogICAgICAgICAgYXdhaXQgdGhpcy50cmlnZ2VyS2VlcEFsaXZlKCk7CiAgICAgICAgICBhd2FpdCBkaXN0X3RzX2V4cG9ydHMzLmRlbGF5Rm9yKDFlMyk7CiAgICAgICAgfQogICAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3IoMWUzKTsKICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXAoKTsKICAgICAgICBjb25zb2xlLmxvZyhgY2xlYW5lZCB1cCBmb3Igc3RyZWFtICR7dGhpcy5zdHJlYW1JZH1gKTsKICAgICAgfQogICAgICBhc3luYyB0cmlnZ2VyS2VlcEFsaXZlKCkgewogICAgICAgIGlmICh0aGlzLnNpZGUgPT09ICJyZXF1ZXN0aW5nIikgewogICAgICAgICAgY29uc29sZS5sb2coYGtlZXBhbGl2ZSBzZW50LmApOwogICAgICAgICAgY29uc3Qgc3RyZWFtVHIgPSBhd2FpdCB0aGlzLnNlbmRNZXRob2QoewogICAgICAgICAgICBtZXRob2Q6ICIjI1ZpcnR1YWxTdHJlYW0jIyIsCiAgICAgICAgICAgIHJlcXVlc3Q6IHsKICAgICAgICAgICAgICBzdHJlYW1JZDogdGhpcy5zdHJlYW1JZCwKICAgICAgICAgICAgICBjeWNsZUlkOiBpc291bmlxdWUyLnVuaSgpLAogICAgICAgICAgICAgIGN5Y2xlOiAicmVxdWVzdCIsCiAgICAgICAgICAgICAgbWFpblB1cnBvc2U6ICJrZWVwQWxpdmUiLAogICAgICAgICAgICAgIGtlZXBBbGl2ZTogdGhpcy5rZWVwQWxpdmUKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVzcG9uc2U6IG51bGwKICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgdGhpcy5rZWVwQWxpdmUgPSBmYWxzZTsKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKHN0cmVhbVRyICYmIHN0cmVhbVRyLnJlc3BvbnNlICYmIHN0cmVhbVRyLnJlc3BvbnNlLmtlZXBBbGl2ZSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhpcy5rZWVwQWxpdmUgPSBmYWxzZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMubGFzdEtlZXBBbGl2ZUV2ZW50ID0gRGF0ZS5ub3coKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdHJlYW1UciAmJiBzdHJlYW1Uci5yZXNwb25zZSAmJiBzdHJlYW1Uci5yZXNwb25zZS5uZXh0KSB7CiAgICAgICAgICAgIHRoaXMud29ya09uUXVldWUoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKERhdGUubm93KCkgLSB0aGlzLmxhc3RLZWVwQWxpdmVFdmVudCA+IDFlNCkgewogICAgICAgICAgY29uc29sZS5sb2coYGNsb3Npbmcgc3RyZWFtIGZvciAke3RoaXMuc3RyZWFtSWR9YCk7CiAgICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBEYXRhIHNlbmRpbmcgYW5kIHJlY2VpdmluZwogICAgICBhc3luYyBzZW5kRGF0YShkYXRhQXJnKSB7CiAgICAgICAgdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LnB1c2goZGF0YUFyZyk7CiAgICAgICAgdGhpcy53b3JrT25RdWV1ZSgpOwogICAgICAgIGF3YWl0IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS53YWl0Rm9yU3BhY2UoKTsKICAgICAgfQogICAgICBhc3luYyBmZXRjaERhdGEoKSB7CiAgICAgICAgaWYgKHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5oYXNTcGFjZSkgewogICAgICAgIH0KICAgICAgICBhd2FpdCB0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkud2FpdEZvckl0ZW1zKCk7CiAgICAgICAgY29uc3QgZGF0YVBhY2thZ2UgPSB0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuc2hpZnQoKTsKICAgICAgICByZXR1cm4gZGF0YVBhY2thZ2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJlYWRzIGZyb20gYSBSZWFkYWJsZSBhbmQgc2VuZHMgaXQgdG8gdGhlIG90aGVyIHNpZGUKICAgICAgICogQHBhcmFtIHJlYWRhYmxlU3RyZWFtQXJnCiAgICAgICAqLwogICAgICBhc3luYyByZWFkRnJvbVdlYnN0cmVhbShyZWFkYWJsZVN0cmVhbUFyZywgY2xvc2VBZnRlclJlYWRpbmcgPSB0cnVlKSB7CiAgICAgICAgY29uc3QgcmVhZGVyID0gcmVhZGFibGVTdHJlYW1BcmcuZ2V0UmVhZGVyKCk7CiAgICAgICAgbGV0IHN0cmVhbUlzRG9uZSA9IGZhbHNlOwogICAgICAgIHdoaWxlICghc3RyZWFtSXNEb25lKSB7CiAgICAgICAgICBjb25zdCB7IHZhbHVlOiB2YWx1ZTIsIGRvbmUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VuZERhdGEodmFsdWUyKTsKICAgICAgICAgIH0KICAgICAgICAgIHN0cmVhbUlzRG9uZSA9IGRvbmU7CiAgICAgICAgfQogICAgICAgIGlmIChjbG9zZUFmdGVyUmVhZGluZykgewogICAgICAgICAgYXdhaXQgdGhpcy5jbG9zZSh0cnVlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgd3JpdGVUb1dlYnN0cmVhbSh3cml0YWJsZVN0cmVhbUFyZykgewogICAgICAgIGNvbnN0IHdyaXRlciA9IHdyaXRhYmxlU3RyZWFtQXJnLmdldFdyaXRlcigpOwogICAgICAgIHdoaWxlICh0aGlzLmtlZXBBbGl2ZSB8fCB0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tIYXNJdGVtcygpKSB7CiAgICAgICAgICBjb25zdCB2YWx1ZTIgPSBhd2FpdCB0aGlzLmZldGNoRGF0YSgpOwogICAgICAgICAgaWYgKHZhbHVlMiA9PT0gY2xvc2luZ0JpdCkgewogICAgICAgICAgICB3cml0ZXIucmVsZWFzZUxvY2soKTsKICAgICAgICAgICAgYXdhaXQgd3JpdGFibGVTdHJlYW1BcmcuY2xvc2UoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBhd2FpdCB3cml0ZXIud3JpdGUodmFsdWUyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNsb3NlcyB0aGUgc3RyZWFtCiAgICAgICAqIGlmIHNlbmRDbG9zaW5nQml0QXJnIGlzIHRydWUsIHRoZSBzdHJlYW0gd2lsbCBzZW5kIGEgY2xvc2luZyBiaXQKICAgICAgICogQHBhcmFtIHNlbmRDbG9zaW5nQml0QXJnCiAgICAgICAqLwogICAgICBhc3luYyBjbG9zZShzZW5kQ2xvc2luZ0JpdEFyZyA9IGZhbHNlKSB7CiAgICAgICAgaWYgKHNlbmRDbG9zaW5nQml0QXJnKSB7CiAgICAgICAgICB0aGlzLnNlbmREYXRhKGNsb3NpbmdCaXQpOwogICAgICAgIH0KICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkdGFyZ2V0LmpzCnZhciBUeXBlZFRhcmdldDsKdmFyIGluaXRfY2xhc3Nlc190eXBlZHRhcmdldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHRhcmdldC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRyb3V0ZXIoKTsKICAgIGluaXRfcGx1Z2lucygpOwogICAgVHlwZWRUYXJnZXQgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmcpIHsKICAgICAgICBpZiAob3B0aW9uc0FyZy5wb3N0TWV0aG9kV2l0aFR5cGVkUm91dGVyICYmICFvcHRpb25zQXJnLnR5cGVkUm91dGVyUmVmKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInlvdSBoYXZlIHRvIHNwZWNpZnkgYSB0eXBlZHJvdXRlciB3aGVuIHVzaW5nIHBvc3RtZXRob2Qgd2l0aCB0eXBlZHJvdXRlciIpOwogICAgICAgIH0KICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zQXJnOwogICAgICB9CiAgICAgIGFzeW5jIHBvc3QocGF5bG9hZEFyZykgewogICAgICAgIGxldCByZXNwb25zZUludGVyZXN0OwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZWRSb3V0ZXJSZWYpIHsKICAgICAgICAgIHJlc3BvbnNlSW50ZXJlc3QgPSBhd2FpdCB0aGlzLm9wdGlvbnMudHlwZWRSb3V0ZXJSZWYuZmlyZUV2ZW50SW50ZXJlc3RNYXAuYWRkSW50ZXJlc3QocGF5bG9hZEFyZy5jb3JyZWxhdGlvbi5pZCwgcGF5bG9hZEFyZyk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHBvc3RNZXRob2QgPSB0aGlzLm9wdGlvbnMucG9zdE1ldGhvZCB8fCB0aGlzLm9wdGlvbnMucG9zdE1ldGhvZFdpdGhUeXBlZFJvdXRlcjsKICAgICAgICBjb25zdCBwb3N0TWV0aG9kUmV0dXJuVmFsdWUgPSBhd2FpdCBwb3N0TWV0aG9kKHBheWxvYWRBcmcpOwogICAgICAgIGxldCByZXNwb25zZUJvZHk7CiAgICAgICAgaWYgKHJlc3BvbnNlSW50ZXJlc3QpIHsKICAgICAgICAgIHJlc3BvbnNlQm9keSA9IGF3YWl0IHJlc3BvbnNlSW50ZXJlc3QuaW50ZXJlc3RGdWxsZmlsbGVkOwogICAgICAgIH0gZWxzZSBpZiAocG9zdE1ldGhvZFJldHVyblZhbHVlKSB7CiAgICAgICAgICByZXNwb25zZUJvZHkgPSBwb3N0TWV0aG9kUmV0dXJuVmFsdWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3BvbnNlQm9keSA9IHBheWxvYWRBcmc7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXNwb25zZUJvZHk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudHlwZWRyZXF1ZXN0LmpzCmZ1bmN0aW9uIGNhbGxHbG9iYWxIb29rKGhvb2tOYW1lLCBlbnRyeSkgewogIHRyeSB7CiAgICBUeXBlZFJvdXRlci5nbG9iYWxIb29rc1tob29rTmFtZV0/LihlbnRyeSk7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICBjb25zb2xlLmVycm9yKGBUeXBlZFJlcXVlc3QgaG9vayBlcnJvciAoJHtob29rTmFtZX0pOmAsIGVycik7CiAgfQp9CnZhciB3ZWJyZXF1ZXN0SW5zdGFuY2UsIFR5cGVkUmVxdWVzdDsKdmFyIGluaXRfY2xhc3Nlc190eXBlZHJlcXVlc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudHlwZWRyZXF1ZXN0LmpzIigpIHsKICAgIGluaXRfcGx1Z2lucygpOwogICAgaW5pdF9jbGFzc2VzX3ZpcnR1YWxzdHJlYW0oKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJlc3BvbnNlZXJyb3IoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJvdXRlcigpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkdGFyZ2V0KCk7CiAgICB3ZWJyZXF1ZXN0SW5zdGFuY2UgPSBuZXcgZGlzdF90c19leHBvcnRzMTQuV2ViUmVxdWVzdCgpOwogICAgVHlwZWRSZXF1ZXN0ID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogQHBhcmFtIHBvc3RFbmRQb2ludEFyZwogICAgICAgKiBAcGFyYW0gbWV0aG9kQXJnCiAgICAgICAqLwogICAgICBjb25zdHJ1Y3Rvcihwb3N0VGFyZ2V0LCBtZXRob2RBcmcpIHsKICAgICAgICB0aGlzLnNraXBIb29rcyA9IGZhbHNlOwogICAgICAgIGlmICh0eXBlb2YgcG9zdFRhcmdldCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIHRoaXMudXJsRW5kUG9pbnQgPSBwb3N0VGFyZ2V0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnR5cGVkVGFyZ2V0ID0gcG9zdFRhcmdldDsKICAgICAgICB9CiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2RBcmc7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZpcmVzIHRoZSByZXF1ZXN0CiAgICAgICAqLwogICAgICBhc3luYyBmaXJlKGZpcmVBcmcsIHVzZUNhY2hlQXJnID0gZmFsc2UpIHsKICAgICAgICBjb25zdCByZXF1ZXN0U3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKICAgICAgICBsZXQgcGF5bG9hZFNlbmRpbmcgPSB7CiAgICAgICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLAogICAgICAgICAgcmVxdWVzdDogZmlyZUFyZywKICAgICAgICAgIHJlc3BvbnNlOiBudWxsLAogICAgICAgICAgY29ycmVsYXRpb246IHsKICAgICAgICAgICAgaWQ6IGlzb3VuaXF1ZTIudW5pKCksCiAgICAgICAgICAgIHBoYXNlOiAicmVxdWVzdCIKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHBheWxvYWRTZW5kaW5nID0gVmlydHVhbFN0cmVhbS5lbmNvZGVQYXlsb2FkRm9yTmV0d29yayhwYXlsb2FkU2VuZGluZywgewogICAgICAgICAgc2VuZE1ldGhvZDogKHBheWxvYWRBcmcpID0+IHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zdFRyT2JqZWN0KHBheWxvYWRBcmcpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICghdGhpcy5za2lwSG9va3MpIHsKICAgICAgICAgIGNhbGxHbG9iYWxIb29rKCJvbk91dGdvaW5nUmVxdWVzdCIsIHsKICAgICAgICAgICAgY29ycmVsYXRpb25JZDogcGF5bG9hZFNlbmRpbmcuY29ycmVsYXRpb24uaWQsCiAgICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsCiAgICAgICAgICAgIGRpcmVjdGlvbjogIm91dGdvaW5nIiwKICAgICAgICAgICAgcGhhc2U6ICJyZXF1ZXN0IiwKICAgICAgICAgICAgdGltZXN0YW1wOiByZXF1ZXN0U3RhcnRUaW1lLAogICAgICAgICAgICBwYXlsb2FkOiBmaXJlQXJnCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgbGV0IHBheWxvYWRSZWNlaXZpbmc7CiAgICAgICAgcGF5bG9hZFJlY2VpdmluZyA9IGF3YWl0IHRoaXMucG9zdFRyT2JqZWN0KHBheWxvYWRTZW5kaW5nLCB1c2VDYWNoZUFyZyk7CiAgICAgICAgcGF5bG9hZFJlY2VpdmluZyA9IFZpcnR1YWxTdHJlYW0uZGVjb2RlUGF5bG9hZEZyb21OZXR3b3JrKHBheWxvYWRSZWNlaXZpbmcsIHsKICAgICAgICAgIHNlbmRNZXRob2Q6IChwYXlsb2FkQXJnKSA9PiB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc3RUck9iamVjdChwYXlsb2FkQXJnKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAoIXRoaXMuc2tpcEhvb2tzKSB7CiAgICAgICAgICBjYWxsR2xvYmFsSG9vaygib25JbmNvbWluZ1Jlc3BvbnNlIiwgewogICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBwYXlsb2FkU2VuZGluZy5jb3JyZWxhdGlvbi5pZCwKICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCwKICAgICAgICAgICAgZGlyZWN0aW9uOiAiaW5jb21pbmciLAogICAgICAgICAgICBwaGFzZTogInJlc3BvbnNlIiwKICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLAogICAgICAgICAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gcmVxdWVzdFN0YXJ0VGltZSwKICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZFJlY2VpdmluZz8ucmVzcG9uc2UsCiAgICAgICAgICAgIGVycm9yOiBwYXlsb2FkUmVjZWl2aW5nPy5lcnJvcj8udGV4dAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwYXlsb2FkUmVjZWl2aW5nLnJlc3BvbnNlOwogICAgICB9CiAgICAgIGFzeW5jIHBvc3RUck9iamVjdChwYXlsb2FkU2VuZGluZ0FyZywgdXNlQ2FjaGVBcmcgPSBmYWxzZSkgewogICAgICAgIGxldCBwYXlsb2FkUmVjZWl2aW5nOwogICAgICAgIGlmICh0aGlzLnVybEVuZFBvaW50KSB7CiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHdlYnJlcXVlc3RJbnN0YW5jZS5wb3N0SnNvbih0aGlzLnVybEVuZFBvaW50LCBwYXlsb2FkU2VuZGluZ0FyZywgdXNlQ2FjaGVBcmcpOwogICAgICAgICAgcGF5bG9hZFJlY2VpdmluZyA9IHJlc3BvbnNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwYXlsb2FkUmVjZWl2aW5nID0gYXdhaXQgdGhpcy50eXBlZFRhcmdldC5wb3N0KHBheWxvYWRTZW5kaW5nQXJnKTsKICAgICAgICB9CiAgICAgICAgaWYgKHBheWxvYWRSZWNlaXZpbmcuZXJyb3IpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYG1ldGhvZDogPj4ke3RoaXMubWV0aG9kfTw8IGdvdCBhbiBFUlJPUjogIiR7cGF5bG9hZFJlY2VpdmluZy5lcnJvci50ZXh0fSIgd2l0aCBkYXRhICR7SlNPTi5zdHJpbmdpZnkocGF5bG9hZFJlY2VpdmluZy5lcnJvci5kYXRhLCBudWxsLCAyKX1gKTsKICAgICAgICAgIGlmICghcGF5bG9hZFJlY2VpdmluZy5yZXRyeSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZWRSZXNwb25zZUVycm9yKHBheWxvYWRSZWNlaXZpbmcuZXJyb3IudGV4dCwgcGF5bG9hZFJlY2VpdmluZy5lcnJvci5kYXRhKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAocGF5bG9hZFJlY2VpdmluZy5yZXRyeSkgewogICAgICAgICAgY29uc29sZS5sb2coYHNlcnZlciByZXF1ZXN0ZWQgcmV0cnkgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uOiAke3BheWxvYWRSZWNlaXZpbmcucmV0cnkucmVhc29ufWApOwogICAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcihwYXlsb2FkUmVjZWl2aW5nLnJldHJ5LndhaXRGb3JNcyk7CiAgICAgICAgICBwYXlsb2FkUmVjZWl2aW5nID0gYXdhaXQgdGhpcy5wb3N0VHJPYmplY3QocGF5bG9hZFNlbmRpbmdBcmcsIHVzZUNhY2hlQXJnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBheWxvYWRSZWNlaXZpbmc7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMxNSA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMxNSwgewogIFR5cGVkSGFuZGxlcjogKCkgPT4gVHlwZWRIYW5kbGVyLAogIFR5cGVkUmVxdWVzdDogKCkgPT4gVHlwZWRSZXF1ZXN0LAogIFR5cGVkUmVzcG9uc2VFcnJvcjogKCkgPT4gVHlwZWRSZXNwb25zZUVycm9yLAogIFR5cGVkUm91dGVyOiAoKSA9PiBUeXBlZFJvdXRlciwKICBUeXBlZFRhcmdldDogKCkgPT4gVHlwZWRUYXJnZXQsCiAgVmlydHVhbFN0cmVhbTogKCkgPT4gVmlydHVhbFN0cmVhbQp9KTsKdmFyIGluaXRfZGlzdF90czE1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRyZXF1ZXN0KCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRoYW5kbGVyKCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRyb3V0ZXIoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJlc3BvbnNlZXJyb3IoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHRhcmdldCgpOwogICAgaW5pdF9jbGFzc2VzX3ZpcnR1YWxzdHJlYW0oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci91dGlsLmpzCmZ1bmN0aW9uIGlzUHJvbWlzZTIob2JqKSB7CiAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICJmdW5jdGlvbiI7Cn0KZnVuY3Rpb24gc2xlZXAodGltZSwgcmVzb2x2ZVdpdGgpIHsKICBpZiAoIXRpbWUpIHRpbWUgPSAwOwogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMpIHsKICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gcmVzKHJlc29sdmVXaXRoKTsKICAgIH0sIHRpbWUpOwogIH0pOwp9CmZ1bmN0aW9uIHJhbmRvbUludChtaW4zLCBtYXgzKSB7CiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXgzIC0gbWluMyArIDEpICsgbWluMyk7Cn0KZnVuY3Rpb24gcmFuZG9tVG9rZW4oKSB7CiAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKTsKfQpmdW5jdGlvbiBtaWNyb1NlY29uZHMoKSB7CiAgdmFyIHJldCA9IERhdGUubm93KCkgKiAxZTM7CiAgaWYgKHJldCA8PSBsYXN0TXMpIHsKICAgIHJldCA9IGxhc3RNcyArIDE7CiAgfQogIGxhc3RNcyA9IHJldDsKICByZXR1cm4gcmV0Owp9CmZ1bmN0aW9uIHN1cHBvcnRzV2ViTG9ja0FQSSgpIHsKICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIG5hdmlnYXRvci5sb2NrcyAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIG5hdmlnYXRvci5sb2Nrcy5yZXF1ZXN0ID09PSAiZnVuY3Rpb24iKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9IGVsc2UgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQp2YXIgUFJPTUlTRV9SRVNPTFZFRF9GQUxTRSwgUFJPTUlTRV9SRVNPTFZFRF9UUlVFLCBQUk9NSVNFX1JFU09MVkVEX1ZPSUQsIGxhc3RNczsKdmFyIGluaXRfdXRpbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci91dGlsLmpzIigpIHsKICAgIFBST01JU0VfUkVTT0xWRURfRkFMU0UgPSBQcm9taXNlLnJlc29sdmUoZmFsc2UpOwogICAgUFJPTUlTRV9SRVNPTFZFRF9UUlVFID0gUHJvbWlzZS5yZXNvbHZlKHRydWUpOwogICAgUFJPTUlTRV9SRVNPTFZFRF9WT0lEID0gUHJvbWlzZS5yZXNvbHZlKCk7CiAgICBsYXN0TXMgPSAwOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL21ldGhvZHMvbmF0aXZlLmpzCmZ1bmN0aW9uIGNyZWF0ZShjaGFubmVsTmFtZSkgewogIHZhciBzdGF0ZTE0ID0gewogICAgdGltZTogbWljcm9TZWNvbmRzKCksCiAgICBtZXNzYWdlc0NhbGxiYWNrOiBudWxsLAogICAgYmM6IG5ldyBCcm9hZGNhc3RDaGFubmVsKGNoYW5uZWxOYW1lKSwKICAgIHN1YkZuczogW10KICAgIC8vIHN1YnNjcmliZXJGdW5jdGlvbnMKICB9OwogIHN0YXRlMTQuYmMub25tZXNzYWdlID0gZnVuY3Rpb24obXNnRXZlbnQpIHsKICAgIGlmIChzdGF0ZTE0Lm1lc3NhZ2VzQ2FsbGJhY2spIHsKICAgICAgc3RhdGUxNC5tZXNzYWdlc0NhbGxiYWNrKG1zZ0V2ZW50LmRhdGEpOwogICAgfQogIH07CiAgcmV0dXJuIHN0YXRlMTQ7Cn0KZnVuY3Rpb24gY2xvc2UoY2hhbm5lbFN0YXRlKSB7CiAgY2hhbm5lbFN0YXRlLmJjLmNsb3NlKCk7CiAgY2hhbm5lbFN0YXRlLnN1YkZucyA9IFtdOwp9CmZ1bmN0aW9uIHBvc3RNZXNzYWdlKGNoYW5uZWxTdGF0ZSwgbWVzc2FnZUpzb24pIHsKICB0cnkgewogICAgY2hhbm5lbFN0YXRlLmJjLnBvc3RNZXNzYWdlKG1lc3NhZ2VKc29uLCBmYWxzZSk7CiAgICByZXR1cm4gUFJPTUlTRV9SRVNPTFZFRF9WT0lEOwogIH0gY2F0Y2ggKGVycikgewogICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7CiAgfQp9CmZ1bmN0aW9uIG9uTWVzc2FnZShjaGFubmVsU3RhdGUsIGZuKSB7CiAgY2hhbm5lbFN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2sgPSBmbjsKfQpmdW5jdGlvbiBjYW5CZVVzZWQoKSB7CiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAidW5kZWZpbmVkIiAmJiBnbG9iYWxUaGlzLkRlbm8gJiYgZ2xvYmFsVGhpcy5EZW5vLmFyZ3MpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBpZiAoKHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIikgJiYgdHlwZW9mIEJyb2FkY2FzdENoYW5uZWwgPT09ICJmdW5jdGlvbiIpIHsKICAgIGlmIChCcm9hZGNhc3RDaGFubmVsLl9wdWJrZXkpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJCcm9hZGNhc3RDaGFubmVsOiBEbyBub3Qgb3ZlcndyaXRlIHdpbmRvdy5Ccm9hZGNhc3RDaGFubmVsIHdpdGggdGhpcyBtb2R1bGUsIHRoaXMgaXMgbm90IGEgcG9seWZpbGwiKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0gZWxzZSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CmZ1bmN0aW9uIGF2ZXJhZ2VSZXNwb25zZVRpbWUoKSB7CiAgcmV0dXJuIDE1MDsKfQp2YXIgbWljcm9TZWNvbmRzMiwgdHlwZSwgTmF0aXZlTWV0aG9kOwp2YXIgaW5pdF9uYXRpdmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9uYXRpdmUuanMiKCkgewogICAgaW5pdF91dGlsKCk7CiAgICBtaWNyb1NlY29uZHMyID0gbWljcm9TZWNvbmRzOwogICAgdHlwZSA9ICJuYXRpdmUiOwogICAgTmF0aXZlTWV0aG9kID0gewogICAgICBjcmVhdGUsCiAgICAgIGNsb3NlLAogICAgICBvbk1lc3NhZ2UsCiAgICAgIHBvc3RNZXNzYWdlLAogICAgICBjYW5CZVVzZWQsCiAgICAgIHR5cGUsCiAgICAgIGF2ZXJhZ2VSZXNwb25zZVRpbWUsCiAgICAgIG1pY3JvU2Vjb25kczogbWljcm9TZWNvbmRzMgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL29ibGl2aW91cy1zZXRAMi4wLjAvbm9kZV9tb2R1bGVzL29ibGl2aW91cy1zZXQvZGlzdC9lc20vc3JjL2luZGV4LmpzCmZ1bmN0aW9uIHJlbW92ZVRvb09sZFZhbHVlcyhvYmxpdmlvdXNTZXQpIHsKICBjb25zdCBvbGRlclRoZW4gPSBub3coKSAtIG9ibGl2aW91c1NldC50dGw7CiAgY29uc3QgaXRlcmF0b3IyID0gb2JsaXZpb3VzU2V0Lm1hcFtTeW1ib2wuaXRlcmF0b3JdKCk7CiAgd2hpbGUgKHRydWUpIHsKICAgIGNvbnN0IG5leHQyID0gaXRlcmF0b3IyLm5leHQoKS52YWx1ZTsKICAgIGlmICghbmV4dDIpIHsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjb25zdCB2YWx1ZTIgPSBuZXh0MlswXTsKICAgIGNvbnN0IHRpbWUgPSBuZXh0MlsxXTsKICAgIGlmICh0aW1lIDwgb2xkZXJUaGVuKSB7CiAgICAgIG9ibGl2aW91c1NldC5tYXAuZGVsZXRlKHZhbHVlMik7CiAgICB9IGVsc2UgewogICAgICBicmVhazsKICAgIH0KICB9Cn0KZnVuY3Rpb24gbm93KCkgewogIHJldHVybiBEYXRlLm5vdygpOwp9CnZhciBPYmxpdmlvdXNTZXQ7CnZhciBpbml0X3NyYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL29ibGl2aW91cy1zZXRAMi4wLjAvbm9kZV9tb2R1bGVzL29ibGl2aW91cy1zZXQvZGlzdC9lc20vc3JjL2luZGV4LmpzIigpIHsKICAgIE9ibGl2aW91c1NldCA9IGNsYXNzIHsKICAgICAgdHRsOwogICAgICBtYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAvKioKICAgICAgICogQ3JlYXRpbmcgY2FsbHMgdG8gc2V0VGltZW91dCgpIGlzIGV4cGVuc2l2ZSwKICAgICAgICogc28gd2Ugb25seSBkbyB0aGF0IGlmIHRoZXJlIGlzIG5vdCB0aW1lb3V0IGFscmVhZHkgb3Blbi4KICAgICAgICovCiAgICAgIF90byA9IGZhbHNlOwogICAgICBjb25zdHJ1Y3Rvcih0dGwpIHsKICAgICAgICB0aGlzLnR0bCA9IHR0bDsKICAgICAgfQogICAgICBoYXModmFsdWUyKSB7CiAgICAgICAgY29uc3QgdmFsdWVUaW1lID0gdGhpcy5tYXAuZ2V0KHZhbHVlMik7CiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZVRpbWUgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICh2YWx1ZVRpbWUgPCBub3coKSAtIHRoaXMudHRsKSB7CiAgICAgICAgICB0aGlzLm1hcC5kZWxldGUodmFsdWUyKTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgYWRkKHZhbHVlMikgewogICAgICAgIHRoaXMubWFwLmRlbGV0ZSh2YWx1ZTIpOwogICAgICAgIHRoaXMubWFwLnNldCh2YWx1ZTIsIG5vdygpKTsKICAgICAgICBpZiAoIXRoaXMuX3RvKSB7CiAgICAgICAgICB0aGlzLl90byA9IHRydWU7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgdGhpcy5fdG8gPSBmYWxzZTsKICAgICAgICAgICAgcmVtb3ZlVG9vT2xkVmFsdWVzKHRoaXMpOwogICAgICAgICAgfSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNsZWFyKCkgewogICAgICAgIHRoaXMubWFwLmNsZWFyKCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvb3B0aW9ucy5qcwpmdW5jdGlvbiBmaWxsT3B0aW9uc1dpdGhEZWZhdWx0cygpIHsKICB2YXIgb3JpZ2luYWxPcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMF0gOiB7fTsKICB2YXIgb3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3JpZ2luYWxPcHRpb25zKSk7CiAgaWYgKHR5cGVvZiBvcHRpb25zLndlYldvcmtlclN1cHBvcnQgPT09ICJ1bmRlZmluZWQiKSBvcHRpb25zLndlYldvcmtlclN1cHBvcnQgPSB0cnVlOwogIGlmICghb3B0aW9ucy5pZGIpIG9wdGlvbnMuaWRiID0ge307CiAgaWYgKCFvcHRpb25zLmlkYi50dGwpIG9wdGlvbnMuaWRiLnR0bCA9IDFlMyAqIDQ1OwogIGlmICghb3B0aW9ucy5pZGIuZmFsbGJhY2tJbnRlcnZhbCkgb3B0aW9ucy5pZGIuZmFsbGJhY2tJbnRlcnZhbCA9IDE1MDsKICBpZiAob3JpZ2luYWxPcHRpb25zLmlkYiAmJiB0eXBlb2Ygb3JpZ2luYWxPcHRpb25zLmlkYi5vbmNsb3NlID09PSAiZnVuY3Rpb24iKSBvcHRpb25zLmlkYi5vbmNsb3NlID0gb3JpZ2luYWxPcHRpb25zLmlkYi5vbmNsb3NlOwogIGlmICghb3B0aW9ucy5sb2NhbHN0b3JhZ2UpIG9wdGlvbnMubG9jYWxzdG9yYWdlID0ge307CiAgaWYgKCFvcHRpb25zLmxvY2Fsc3RvcmFnZS5yZW1vdmVUaW1lb3V0KSBvcHRpb25zLmxvY2Fsc3RvcmFnZS5yZW1vdmVUaW1lb3V0ID0gMWUzICogNjA7CiAgaWYgKG9yaWdpbmFsT3B0aW9ucy5tZXRob2RzKSBvcHRpb25zLm1ldGhvZHMgPSBvcmlnaW5hbE9wdGlvbnMubWV0aG9kczsKICBpZiAoIW9wdGlvbnMubm9kZSkgb3B0aW9ucy5ub2RlID0ge307CiAgaWYgKCFvcHRpb25zLm5vZGUudHRsKSBvcHRpb25zLm5vZGUudHRsID0gMWUzICogNjAgKiAyOwogIGlmICghb3B0aW9ucy5ub2RlLm1heFBhcmFsbGVsV3JpdGVzKSBvcHRpb25zLm5vZGUubWF4UGFyYWxsZWxXcml0ZXMgPSAyMDQ4OwogIGlmICh0eXBlb2Ygb3B0aW9ucy5ub2RlLnVzZUZhc3RQYXRoID09PSAidW5kZWZpbmVkIikgb3B0aW9ucy5ub2RlLnVzZUZhc3RQYXRoID0gdHJ1ZTsKICByZXR1cm4gb3B0aW9uczsKfQp2YXIgaW5pdF9vcHRpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL29wdGlvbnMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL21ldGhvZHMvaW5kZXhlZC1kYi5qcwpmdW5jdGlvbiBnZXRJZGIoKSB7CiAgaWYgKHR5cGVvZiBpbmRleGVkREIgIT09ICJ1bmRlZmluZWQiKSByZXR1cm4gaW5kZXhlZERCOwogIGlmICh0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIikgewogICAgaWYgKHR5cGVvZiB3aW5kb3cubW96SW5kZXhlZERCICE9PSAidW5kZWZpbmVkIikgcmV0dXJuIHdpbmRvdy5tb3pJbmRleGVkREI7CiAgICBpZiAodHlwZW9mIHdpbmRvdy53ZWJraXRJbmRleGVkREIgIT09ICJ1bmRlZmluZWQiKSByZXR1cm4gd2luZG93LndlYmtpdEluZGV4ZWREQjsKICAgIGlmICh0eXBlb2Ygd2luZG93Lm1zSW5kZXhlZERCICE9PSAidW5kZWZpbmVkIikgcmV0dXJuIHdpbmRvdy5tc0luZGV4ZWREQjsKICB9CiAgcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIGNvbW1pdEluZGV4ZWREQlRyYW5zYWN0aW9uKHR4KSB7CiAgaWYgKHR4LmNvbW1pdCkgewogICAgdHguY29tbWl0KCk7CiAgfQp9CmZ1bmN0aW9uIGNyZWF0ZURhdGFiYXNlKGNoYW5uZWxOYW1lKSB7CiAgdmFyIEluZGV4ZWREQiA9IGdldElkYigpOwogIHZhciBkYk5hbWUgPSBEQl9QUkVGSVggKyBjaGFubmVsTmFtZTsKICB2YXIgb3BlblJlcXVlc3QgPSBJbmRleGVkREIub3BlbihkYk5hbWUpOwogIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2KSB7CiAgICB2YXIgZGIgPSBldi50YXJnZXQucmVzdWx0OwogICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoT0JKRUNUX1NUT1JFX0lELCB7CiAgICAgIGtleVBhdGg6ICJpZCIsCiAgICAgIGF1dG9JbmNyZW1lbnQ6IHRydWUKICAgIH0pOwogIH07CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcywgcmVqKSB7CiAgICBvcGVuUmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZXYpIHsKICAgICAgcmV0dXJuIHJlaihldik7CiAgICB9OwogICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CiAgICAgIHJlcyhvcGVuUmVxdWVzdC5yZXN1bHQpOwogICAgfTsKICB9KTsKfQpmdW5jdGlvbiB3cml0ZU1lc3NhZ2UoZGIsIHJlYWRlclV1aWQsIG1lc3NhZ2VKc29uKSB7CiAgdmFyIHRpbWUgPSBEYXRlLm5vdygpOwogIHZhciB3cml0ZU9iamVjdCA9IHsKICAgIHV1aWQ6IHJlYWRlclV1aWQsCiAgICB0aW1lLAogICAgZGF0YTogbWVzc2FnZUpzb24KICB9OwogIHZhciB0eCA9IGRiLnRyYW5zYWN0aW9uKFtPQkpFQ1RfU1RPUkVfSURdLCAicmVhZHdyaXRlIiwgVFJBTlNBQ1RJT05fU0VUVElOR1MpOwogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMsIHJlaikgewogICAgdHgub25jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gcmVzKCk7CiAgICB9OwogICAgdHgub25lcnJvciA9IGZ1bmN0aW9uKGV2KSB7CiAgICAgIHJldHVybiByZWooZXYpOwogICAgfTsKICAgIHZhciBvYmplY3RTdG9yZSA9IHR4Lm9iamVjdFN0b3JlKE9CSkVDVF9TVE9SRV9JRCk7CiAgICBvYmplY3RTdG9yZS5hZGQod3JpdGVPYmplY3QpOwogICAgY29tbWl0SW5kZXhlZERCVHJhbnNhY3Rpb24odHgpOwogIH0pOwp9CmZ1bmN0aW9uIGdldEFsbE1lc3NhZ2VzKGRiKSB7CiAgdmFyIHR4ID0gZGIudHJhbnNhY3Rpb24oT0JKRUNUX1NUT1JFX0lELCAicmVhZG9ubHkiLCBUUkFOU0FDVElPTl9TRVRUSU5HUyk7CiAgdmFyIG9iamVjdFN0b3JlID0gdHgub2JqZWN0U3RvcmUoT0JKRUNUX1NUT1JFX0lEKTsKICB2YXIgcmV0ID0gW107CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcykgewogICAgb2JqZWN0U3RvcmUub3BlbkN1cnNvcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2KSB7CiAgICAgIHZhciBjdXJzb3IgPSBldi50YXJnZXQucmVzdWx0OwogICAgICBpZiAoY3Vyc29yKSB7CiAgICAgICAgcmV0LnB1c2goY3Vyc29yLnZhbHVlKTsKICAgICAgICBjdXJzb3JbImNvbnRpbnVlIl0oKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb21taXRJbmRleGVkREJUcmFuc2FjdGlvbih0eCk7CiAgICAgICAgcmVzKHJldCk7CiAgICAgIH0KICAgIH07CiAgfSk7Cn0KZnVuY3Rpb24gZ2V0TWVzc2FnZXNIaWdoZXJUaGFuKGRiLCBsYXN0Q3Vyc29ySWQpIHsKICB2YXIgdHggPSBkYi50cmFuc2FjdGlvbihPQkpFQ1RfU1RPUkVfSUQsICJyZWFkb25seSIsIFRSQU5TQUNUSU9OX1NFVFRJTkdTKTsKICB2YXIgb2JqZWN0U3RvcmUgPSB0eC5vYmplY3RTdG9yZShPQkpFQ1RfU1RPUkVfSUQpOwogIHZhciByZXQgPSBbXTsKICB2YXIga2V5UmFuZ2VWYWx1ZSA9IElEQktleVJhbmdlLmJvdW5kKGxhc3RDdXJzb3JJZCArIDEsIEluZmluaXR5KTsKICBpZiAob2JqZWN0U3RvcmUuZ2V0QWxsKSB7CiAgICB2YXIgZ2V0QWxsUmVxdWVzdCA9IG9iamVjdFN0b3JlLmdldEFsbChrZXlSYW5nZVZhbHVlKTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMsIHJlaikgewogICAgICBnZXRBbGxSZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihlcnIpIHsKICAgICAgICByZXR1cm4gcmVqKGVycik7CiAgICAgIH07CiAgICAgIGdldEFsbFJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oZTExKSB7CiAgICAgICAgcmVzKGUxMS50YXJnZXQucmVzdWx0KTsKICAgICAgfTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiBvcGVuQ3Vyc29yKCkgewogICAgdHJ5IHsKICAgICAga2V5UmFuZ2VWYWx1ZSA9IElEQktleVJhbmdlLmJvdW5kKGxhc3RDdXJzb3JJZCArIDEsIEluZmluaXR5KTsKICAgICAgcmV0dXJuIG9iamVjdFN0b3JlLm9wZW5DdXJzb3Ioa2V5UmFuZ2VWYWx1ZSk7CiAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgcmV0dXJuIG9iamVjdFN0b3JlLm9wZW5DdXJzb3IoKTsKICAgIH0KICB9CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcywgcmVqKSB7CiAgICB2YXIgb3BlbkN1cnNvclJlcXVlc3QgPSBvcGVuQ3Vyc29yKCk7CiAgICBvcGVuQ3Vyc29yUmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZXJyKSB7CiAgICAgIHJldHVybiByZWooZXJyKTsKICAgIH07CiAgICBvcGVuQ3Vyc29yUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldikgewogICAgICB2YXIgY3Vyc29yID0gZXYudGFyZ2V0LnJlc3VsdDsKICAgICAgaWYgKGN1cnNvcikgewogICAgICAgIGlmIChjdXJzb3IudmFsdWUuaWQgPCBsYXN0Q3Vyc29ySWQgKyAxKSB7CiAgICAgICAgICBjdXJzb3JbImNvbnRpbnVlIl0obGFzdEN1cnNvcklkICsgMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldC5wdXNoKGN1cnNvci52YWx1ZSk7CiAgICAgICAgICBjdXJzb3JbImNvbnRpbnVlIl0oKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29tbWl0SW5kZXhlZERCVHJhbnNhY3Rpb24odHgpOwogICAgICAgIHJlcyhyZXQpOwogICAgICB9CiAgICB9OwogIH0pOwp9CmZ1bmN0aW9uIHJlbW92ZU1lc3NhZ2VzQnlJZChjaGFubmVsU3RhdGUsIGlkcykgewogIGlmIChjaGFubmVsU3RhdGUuY2xvc2VkKSB7CiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTsKICB9CiAgdmFyIHR4ID0gY2hhbm5lbFN0YXRlLmRiLnRyYW5zYWN0aW9uKE9CSkVDVF9TVE9SRV9JRCwgInJlYWR3cml0ZSIsIFRSQU5TQUNUSU9OX1NFVFRJTkdTKTsKICB2YXIgb2JqZWN0U3RvcmUgPSB0eC5vYmplY3RTdG9yZShPQkpFQ1RfU1RPUkVfSUQpOwogIHJldHVybiBQcm9taXNlLmFsbChpZHMubWFwKGZ1bmN0aW9uKGlkKSB7CiAgICB2YXIgZGVsZXRlUmVxdWVzdCA9IG9iamVjdFN0b3JlWyJkZWxldGUiXShpZCk7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzKSB7CiAgICAgIGRlbGV0ZVJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHJlcygpOwogICAgICB9OwogICAgfSk7CiAgfSkpOwp9CmZ1bmN0aW9uIGdldE9sZE1lc3NhZ2VzKGRiLCB0dGwpIHsKICB2YXIgb2xkZXJUaGVuID0gRGF0ZS5ub3coKSAtIHR0bDsKICB2YXIgdHggPSBkYi50cmFuc2FjdGlvbihPQkpFQ1RfU1RPUkVfSUQsICJyZWFkb25seSIsIFRSQU5TQUNUSU9OX1NFVFRJTkdTKTsKICB2YXIgb2JqZWN0U3RvcmUgPSB0eC5vYmplY3RTdG9yZShPQkpFQ1RfU1RPUkVfSUQpOwogIHZhciByZXQgPSBbXTsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzKSB7CiAgICBvYmplY3RTdG9yZS5vcGVuQ3Vyc29yKCkub25zdWNjZXNzID0gZnVuY3Rpb24oZXYpIHsKICAgICAgdmFyIGN1cnNvciA9IGV2LnRhcmdldC5yZXN1bHQ7CiAgICAgIGlmIChjdXJzb3IpIHsKICAgICAgICB2YXIgbXNnT2JrID0gY3Vyc29yLnZhbHVlOwogICAgICAgIGlmIChtc2dPYmsudGltZSA8IG9sZGVyVGhlbikgewogICAgICAgICAgcmV0LnB1c2gobXNnT2JrKTsKICAgICAgICAgIGN1cnNvclsiY29udGludWUiXSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb21taXRJbmRleGVkREJUcmFuc2FjdGlvbih0eCk7CiAgICAgICAgICByZXMocmV0KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzKHJldCk7CiAgICAgIH0KICAgIH07CiAgfSk7Cn0KZnVuY3Rpb24gY2xlYW5PbGRNZXNzYWdlcyhjaGFubmVsU3RhdGUpIHsKICByZXR1cm4gZ2V0T2xkTWVzc2FnZXMoY2hhbm5lbFN0YXRlLmRiLCBjaGFubmVsU3RhdGUub3B0aW9ucy5pZGIudHRsKS50aGVuKGZ1bmN0aW9uKHRvb09sZCkgewogICAgcmV0dXJuIHJlbW92ZU1lc3NhZ2VzQnlJZChjaGFubmVsU3RhdGUsIHRvb09sZC5tYXAoZnVuY3Rpb24obXNnKSB7CiAgICAgIHJldHVybiBtc2cuaWQ7CiAgICB9KSk7CiAgfSk7Cn0KZnVuY3Rpb24gY3JlYXRlMihjaGFubmVsTmFtZSwgb3B0aW9ucykgewogIG9wdGlvbnMgPSBmaWxsT3B0aW9uc1dpdGhEZWZhdWx0cyhvcHRpb25zKTsKICByZXR1cm4gY3JlYXRlRGF0YWJhc2UoY2hhbm5lbE5hbWUpLnRoZW4oZnVuY3Rpb24oZGIpIHsKICAgIHZhciBzdGF0ZTE0ID0gewogICAgICBjbG9zZWQ6IGZhbHNlLAogICAgICBsYXN0Q3Vyc29ySWQ6IDAsCiAgICAgIGNoYW5uZWxOYW1lLAogICAgICBvcHRpb25zLAogICAgICB1dWlkOiByYW5kb21Ub2tlbigpLAogICAgICAvKioKICAgICAgICogZW1pdHRlZE1lc3NhZ2VzSWRzCiAgICAgICAqIGNvbnRhaW5zIGFsbCBtZXNzYWdlcyB0aGF0IGhhdmUgYmVlbiBlbWl0dGVkIGJlZm9yZQogICAgICAgKiBAdHlwZSB7T2JsaXZpb3VzU2V0fQogICAgICAgKi8KICAgICAgZU1JczogbmV3IE9ibGl2aW91c1NldChvcHRpb25zLmlkYi50dGwgKiAyKSwKICAgICAgLy8gZW5zdXJlcyB3ZSBkbyBub3QgcmVhZCBtZXNzYWdlcyBpbiBwYXJhbGxlbAogICAgICB3cml0ZUJsb2NrUHJvbWlzZTogUFJPTUlTRV9SRVNPTFZFRF9WT0lELAogICAgICBtZXNzYWdlc0NhbGxiYWNrOiBudWxsLAogICAgICByZWFkUXVldWVQcm9taXNlczogW10sCiAgICAgIGRiCiAgICB9OwogICAgZGIub25jbG9zZSA9IGZ1bmN0aW9uKCkgewogICAgICBzdGF0ZTE0LmNsb3NlZCA9IHRydWU7CiAgICAgIGlmIChvcHRpb25zLmlkYi5vbmNsb3NlKSBvcHRpb25zLmlkYi5vbmNsb3NlKCk7CiAgICB9OwogICAgX3JlYWRMb29wKHN0YXRlMTQpOwogICAgcmV0dXJuIHN0YXRlMTQ7CiAgfSk7Cn0KZnVuY3Rpb24gX3JlYWRMb29wKHN0YXRlMTQpIHsKICBpZiAoc3RhdGUxNC5jbG9zZWQpIHJldHVybjsKICByZWFkTmV3TWVzc2FnZXMoc3RhdGUxNCkudGhlbihmdW5jdGlvbigpIHsKICAgIHJldHVybiBzbGVlcChzdGF0ZTE0Lm9wdGlvbnMuaWRiLmZhbGxiYWNrSW50ZXJ2YWwpOwogIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gX3JlYWRMb29wKHN0YXRlMTQpOwogIH0pOwp9CmZ1bmN0aW9uIF9maWx0ZXJNZXNzYWdlKG1zZ09iaiwgc3RhdGUxNCkgewogIGlmIChtc2dPYmoudXVpZCA9PT0gc3RhdGUxNC51dWlkKSByZXR1cm4gZmFsc2U7CiAgaWYgKHN0YXRlMTQuZU1Jcy5oYXMobXNnT2JqLmlkKSkgcmV0dXJuIGZhbHNlOwogIGlmIChtc2dPYmouZGF0YS50aW1lIDwgc3RhdGUxNC5tZXNzYWdlc0NhbGxiYWNrVGltZSkgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIHJlYWROZXdNZXNzYWdlcyhzdGF0ZTE0KSB7CiAgaWYgKHN0YXRlMTQuY2xvc2VkKSByZXR1cm4gUFJPTUlTRV9SRVNPTFZFRF9WT0lEOwogIGlmICghc3RhdGUxNC5tZXNzYWdlc0NhbGxiYWNrKSByZXR1cm4gUFJPTUlTRV9SRVNPTFZFRF9WT0lEOwogIHJldHVybiBnZXRNZXNzYWdlc0hpZ2hlclRoYW4oc3RhdGUxNC5kYiwgc3RhdGUxNC5sYXN0Q3Vyc29ySWQpLnRoZW4oZnVuY3Rpb24obmV3ZXJNZXNzYWdlcykgewogICAgdmFyIHVzZU1lc3NhZ2VzID0gbmV3ZXJNZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24obXNnT2JqKSB7CiAgICAgIHJldHVybiAhIW1zZ09iajsKICAgIH0pLm1hcChmdW5jdGlvbihtc2dPYmopIHsKICAgICAgaWYgKG1zZ09iai5pZCA+IHN0YXRlMTQubGFzdEN1cnNvcklkKSB7CiAgICAgICAgc3RhdGUxNC5sYXN0Q3Vyc29ySWQgPSBtc2dPYmouaWQ7CiAgICAgIH0KICAgICAgcmV0dXJuIG1zZ09iajsKICAgIH0pLmZpbHRlcihmdW5jdGlvbihtc2dPYmopIHsKICAgICAgcmV0dXJuIF9maWx0ZXJNZXNzYWdlKG1zZ09iaiwgc3RhdGUxNCk7CiAgICB9KS5zb3J0KGZ1bmN0aW9uKG1zZ09iakEsIG1zZ09iakIpIHsKICAgICAgcmV0dXJuIG1zZ09iakEudGltZSAtIG1zZ09iakIudGltZTsKICAgIH0pOwogICAgdXNlTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbihtc2dPYmopIHsKICAgICAgaWYgKHN0YXRlMTQubWVzc2FnZXNDYWxsYmFjaykgewogICAgICAgIHN0YXRlMTQuZU1Jcy5hZGQobXNnT2JqLmlkKTsKICAgICAgICBzdGF0ZTE0Lm1lc3NhZ2VzQ2FsbGJhY2sobXNnT2JqLmRhdGEpOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQ7CiAgfSk7Cn0KZnVuY3Rpb24gY2xvc2UyKGNoYW5uZWxTdGF0ZSkgewogIGNoYW5uZWxTdGF0ZS5jbG9zZWQgPSB0cnVlOwogIGNoYW5uZWxTdGF0ZS5kYi5jbG9zZSgpOwp9CmZ1bmN0aW9uIHBvc3RNZXNzYWdlMihjaGFubmVsU3RhdGUsIG1lc3NhZ2VKc29uKSB7CiAgY2hhbm5lbFN0YXRlLndyaXRlQmxvY2tQcm9taXNlID0gY2hhbm5lbFN0YXRlLndyaXRlQmxvY2tQcm9taXNlLnRoZW4oZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gd3JpdGVNZXNzYWdlKGNoYW5uZWxTdGF0ZS5kYiwgY2hhbm5lbFN0YXRlLnV1aWQsIG1lc3NhZ2VKc29uKTsKICB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgaWYgKHJhbmRvbUludCgwLCAxMCkgPT09IDApIHsKICAgICAgY2xlYW5PbGRNZXNzYWdlcyhjaGFubmVsU3RhdGUpOwogICAgfQogIH0pOwogIHJldHVybiBjaGFubmVsU3RhdGUud3JpdGVCbG9ja1Byb21pc2U7Cn0KZnVuY3Rpb24gb25NZXNzYWdlMihjaGFubmVsU3RhdGUsIGZuLCB0aW1lKSB7CiAgY2hhbm5lbFN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2tUaW1lID0gdGltZTsKICBjaGFubmVsU3RhdGUubWVzc2FnZXNDYWxsYmFjayA9IGZuOwogIHJlYWROZXdNZXNzYWdlcyhjaGFubmVsU3RhdGUpOwp9CmZ1bmN0aW9uIGNhbkJlVXNlZDIoKSB7CiAgcmV0dXJuICEhZ2V0SWRiKCk7Cn0KZnVuY3Rpb24gYXZlcmFnZVJlc3BvbnNlVGltZTIob3B0aW9ucykgewogIHJldHVybiBvcHRpb25zLmlkYi5mYWxsYmFja0ludGVydmFsICogMjsKfQp2YXIgbWljcm9TZWNvbmRzMywgREJfUFJFRklYLCBPQkpFQ1RfU1RPUkVfSUQsIFRSQU5TQUNUSU9OX1NFVFRJTkdTLCB0eXBlMiwgSW5kZXhlZERCTWV0aG9kOwp2YXIgaW5pdF9pbmRleGVkX2RiID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL21ldGhvZHMvaW5kZXhlZC1kYi5qcyIoKSB7CiAgICBpbml0X3V0aWwoKTsKICAgIGluaXRfc3JjKCk7CiAgICBpbml0X29wdGlvbnMoKTsKICAgIG1pY3JvU2Vjb25kczMgPSBtaWNyb1NlY29uZHM7CiAgICBEQl9QUkVGSVggPSAicHVia2V5LmJyb2FkY2FzdC1jaGFubmVsLTAtIjsKICAgIE9CSkVDVF9TVE9SRV9JRCA9ICJtZXNzYWdlcyI7CiAgICBUUkFOU0FDVElPTl9TRVRUSU5HUyA9IHsKICAgICAgZHVyYWJpbGl0eTogInJlbGF4ZWQiCiAgICB9OwogICAgdHlwZTIgPSAiaWRiIjsKICAgIEluZGV4ZWREQk1ldGhvZCA9IHsKICAgICAgY3JlYXRlOiBjcmVhdGUyLAogICAgICBjbG9zZTogY2xvc2UyLAogICAgICBvbk1lc3NhZ2U6IG9uTWVzc2FnZTIsCiAgICAgIHBvc3RNZXNzYWdlOiBwb3N0TWVzc2FnZTIsCiAgICAgIGNhbkJlVXNlZDogY2FuQmVVc2VkMiwKICAgICAgdHlwZTogdHlwZTIsCiAgICAgIGF2ZXJhZ2VSZXNwb25zZVRpbWU6IGF2ZXJhZ2VSZXNwb25zZVRpbWUyLAogICAgICBtaWNyb1NlY29uZHM6IG1pY3JvU2Vjb25kczMKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9sb2NhbHN0b3JhZ2UuanMKZnVuY3Rpb24gZ2V0TG9jYWxTdG9yYWdlKCkgewogIHZhciBsb2NhbFN0b3JhZ2UyOwogIGlmICh0eXBlb2Ygd2luZG93ID09PSAidW5kZWZpbmVkIikgcmV0dXJuIG51bGw7CiAgdHJ5IHsKICAgIGxvY2FsU3RvcmFnZTIgPSB3aW5kb3cubG9jYWxTdG9yYWdlOwogICAgbG9jYWxTdG9yYWdlMiA9IHdpbmRvd1siaWU4LWV2ZW50bGlzdGVuZXIvc3RvcmFnZSJdIHx8IHdpbmRvdy5sb2NhbFN0b3JhZ2U7CiAgfSBjYXRjaCAoZTExKSB7CiAgfQogIHJldHVybiBsb2NhbFN0b3JhZ2UyOwp9CmZ1bmN0aW9uIHN0b3JhZ2VLZXkoY2hhbm5lbE5hbWUpIHsKICByZXR1cm4gS0VZX1BSRUZJWCArIGNoYW5uZWxOYW1lOwp9CmZ1bmN0aW9uIHBvc3RNZXNzYWdlMyhjaGFubmVsU3RhdGUsIG1lc3NhZ2VKc29uKSB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcykgewogICAgc2xlZXAoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICB2YXIga2V5MiA9IHN0b3JhZ2VLZXkoY2hhbm5lbFN0YXRlLmNoYW5uZWxOYW1lKTsKICAgICAgdmFyIHdyaXRlT2JqID0gewogICAgICAgIHRva2VuOiByYW5kb21Ub2tlbigpLAogICAgICAgIHRpbWU6IERhdGUubm93KCksCiAgICAgICAgZGF0YTogbWVzc2FnZUpzb24sCiAgICAgICAgdXVpZDogY2hhbm5lbFN0YXRlLnV1aWQKICAgICAgfTsKICAgICAgdmFyIHZhbHVlMiA9IEpTT04uc3RyaW5naWZ5KHdyaXRlT2JqKTsKICAgICAgZ2V0TG9jYWxTdG9yYWdlKCkuc2V0SXRlbShrZXkyLCB2YWx1ZTIpOwogICAgICB2YXIgZXYgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKTsKICAgICAgZXYuaW5pdEV2ZW50KCJzdG9yYWdlIiwgdHJ1ZSwgdHJ1ZSk7CiAgICAgIGV2LmtleSA9IGtleTI7CiAgICAgIGV2Lm5ld1ZhbHVlID0gdmFsdWUyOwogICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldik7CiAgICAgIHJlcygpOwogICAgfSk7CiAgfSk7Cn0KZnVuY3Rpb24gYWRkU3RvcmFnZUV2ZW50TGlzdGVuZXIoY2hhbm5lbE5hbWUsIGZuKSB7CiAgdmFyIGtleTIgPSBzdG9yYWdlS2V5KGNoYW5uZWxOYW1lKTsKICB2YXIgbGlzdGVuZXIyID0gZnVuY3Rpb24gbGlzdGVuZXIzKGV2KSB7CiAgICBpZiAoZXYua2V5ID09PSBrZXkyKSB7CiAgICAgIGZuKEpTT04ucGFyc2UoZXYubmV3VmFsdWUpKTsKICAgIH0KICB9OwogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzdG9yYWdlIiwgbGlzdGVuZXIyKTsKICByZXR1cm4gbGlzdGVuZXIyOwp9CmZ1bmN0aW9uIHJlbW92ZVN0b3JhZ2VFdmVudExpc3RlbmVyKGxpc3RlbmVyMikgewogIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzdG9yYWdlIiwgbGlzdGVuZXIyKTsKfQpmdW5jdGlvbiBjcmVhdGUzKGNoYW5uZWxOYW1lLCBvcHRpb25zKSB7CiAgb3B0aW9ucyA9IGZpbGxPcHRpb25zV2l0aERlZmF1bHRzKG9wdGlvbnMpOwogIGlmICghY2FuQmVVc2VkMygpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkJyb2FkY2FzdENoYW5uZWw6IGxvY2Fsc3RvcmFnZSBjYW5ub3QgYmUgdXNlZCIpOwogIH0KICB2YXIgdXVpZCA9IHJhbmRvbVRva2VuKCk7CiAgdmFyIGVNSXMgPSBuZXcgT2JsaXZpb3VzU2V0KG9wdGlvbnMubG9jYWxzdG9yYWdlLnJlbW92ZVRpbWVvdXQpOwogIHZhciBzdGF0ZTE0ID0gewogICAgY2hhbm5lbE5hbWUsCiAgICB1dWlkLAogICAgZU1JcwogICAgLy8gZW1pdHRlZE1lc3NhZ2VzSWRzCiAgfTsKICBzdGF0ZTE0Lmxpc3RlbmVyID0gYWRkU3RvcmFnZUV2ZW50TGlzdGVuZXIoY2hhbm5lbE5hbWUsIGZ1bmN0aW9uKG1zZ09iaikgewogICAgaWYgKCFzdGF0ZTE0Lm1lc3NhZ2VzQ2FsbGJhY2spIHJldHVybjsKICAgIGlmIChtc2dPYmoudXVpZCA9PT0gdXVpZCkgcmV0dXJuOwogICAgaWYgKCFtc2dPYmoudG9rZW4gfHwgZU1Jcy5oYXMobXNnT2JqLnRva2VuKSkgcmV0dXJuOwogICAgaWYgKG1zZ09iai5kYXRhLnRpbWUgJiYgbXNnT2JqLmRhdGEudGltZSA8IHN0YXRlMTQubWVzc2FnZXNDYWxsYmFja1RpbWUpIHJldHVybjsKICAgIGVNSXMuYWRkKG1zZ09iai50b2tlbik7CiAgICBzdGF0ZTE0Lm1lc3NhZ2VzQ2FsbGJhY2sobXNnT2JqLmRhdGEpOwogIH0pOwogIHJldHVybiBzdGF0ZTE0Owp9CmZ1bmN0aW9uIGNsb3NlMyhjaGFubmVsU3RhdGUpIHsKICByZW1vdmVTdG9yYWdlRXZlbnRMaXN0ZW5lcihjaGFubmVsU3RhdGUubGlzdGVuZXIpOwp9CmZ1bmN0aW9uIG9uTWVzc2FnZTMoY2hhbm5lbFN0YXRlLCBmbiwgdGltZSkgewogIGNoYW5uZWxTdGF0ZS5tZXNzYWdlc0NhbGxiYWNrVGltZSA9IHRpbWU7CiAgY2hhbm5lbFN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2sgPSBmbjsKfQpmdW5jdGlvbiBjYW5CZVVzZWQzKCkgewogIHZhciBscyA9IGdldExvY2FsU3RvcmFnZSgpOwogIGlmICghbHMpIHJldHVybiBmYWxzZTsKICB0cnkgewogICAgdmFyIGtleTIgPSAiX19icm9hZGNhc3RjaGFubmVsX2NoZWNrIjsKICAgIGxzLnNldEl0ZW0oa2V5MiwgIndvcmtzIik7CiAgICBscy5yZW1vdmVJdGVtKGtleTIpOwogIH0gY2F0Y2ggKGUxMSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiBhdmVyYWdlUmVzcG9uc2VUaW1lMygpIHsKICB2YXIgZGVmYXVsdFRpbWUgPSAxMjA7CiAgdmFyIHVzZXJBZ2VudDIgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7CiAgaWYgKHVzZXJBZ2VudDIuaW5jbHVkZXMoInNhZmFyaSIpICYmICF1c2VyQWdlbnQyLmluY2x1ZGVzKCJjaHJvbWUiKSkgewogICAgcmV0dXJuIGRlZmF1bHRUaW1lICogMjsKICB9CiAgcmV0dXJuIGRlZmF1bHRUaW1lOwp9CnZhciBtaWNyb1NlY29uZHM0LCBLRVlfUFJFRklYLCB0eXBlMywgTG9jYWxzdG9yYWdlTWV0aG9kOwp2YXIgaW5pdF9sb2NhbHN0b3JhZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9sb2NhbHN0b3JhZ2UuanMiKCkgewogICAgaW5pdF9zcmMoKTsKICAgIGluaXRfb3B0aW9ucygpOwogICAgaW5pdF91dGlsKCk7CiAgICBtaWNyb1NlY29uZHM0ID0gbWljcm9TZWNvbmRzOwogICAgS0VZX1BSRUZJWCA9ICJwdWJrZXkuYnJvYWRjYXN0Q2hhbm5lbC0iOwogICAgdHlwZTMgPSAibG9jYWxzdG9yYWdlIjsKICAgIExvY2Fsc3RvcmFnZU1ldGhvZCA9IHsKICAgICAgY3JlYXRlOiBjcmVhdGUzLAogICAgICBjbG9zZTogY2xvc2UzLAogICAgICBvbk1lc3NhZ2U6IG9uTWVzc2FnZTMsCiAgICAgIHBvc3RNZXNzYWdlOiBwb3N0TWVzc2FnZTMsCiAgICAgIGNhbkJlVXNlZDogY2FuQmVVc2VkMywKICAgICAgdHlwZTogdHlwZTMsCiAgICAgIGF2ZXJhZ2VSZXNwb25zZVRpbWU6IGF2ZXJhZ2VSZXNwb25zZVRpbWUzLAogICAgICBtaWNyb1NlY29uZHM6IG1pY3JvU2Vjb25kczQKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9zaW11bGF0ZS5qcwpmdW5jdGlvbiBjcmVhdGU0KGNoYW5uZWxOYW1lKSB7CiAgdmFyIHN0YXRlMTQgPSB7CiAgICB0aW1lOiBtaWNyb1NlY29uZHM1KCksCiAgICBuYW1lOiBjaGFubmVsTmFtZSwKICAgIG1lc3NhZ2VzQ2FsbGJhY2s6IG51bGwKICB9OwogIFNJTVVMQVRFX0NIQU5ORUxTLmFkZChzdGF0ZTE0KTsKICByZXR1cm4gc3RhdGUxNDsKfQpmdW5jdGlvbiBjbG9zZTQoY2hhbm5lbFN0YXRlKSB7CiAgU0lNVUxBVEVfQ0hBTk5FTFNbImRlbGV0ZSJdKGNoYW5uZWxTdGF0ZSk7Cn0KZnVuY3Rpb24gcG9zdE1lc3NhZ2U0KGNoYW5uZWxTdGF0ZSwgbWVzc2FnZUpzb24pIHsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzKSB7CiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgdmFyIGNoYW5uZWxBcnJheSA9IEFycmF5LmZyb20oU0lNVUxBVEVfQ0hBTk5FTFMpOwogICAgICBjaGFubmVsQXJyYXkuZm9yRWFjaChmdW5jdGlvbihjaGFubmVsKSB7CiAgICAgICAgaWYgKGNoYW5uZWwubmFtZSA9PT0gY2hhbm5lbFN0YXRlLm5hbWUgJiYgLy8gaGFzIHNhbWUgbmFtZQogICAgICAgIGNoYW5uZWwgIT09IGNoYW5uZWxTdGF0ZSAmJiAvLyBub3Qgb3duIGNoYW5uZWwKICAgICAgICAhIWNoYW5uZWwubWVzc2FnZXNDYWxsYmFjayAmJiAvLyBoYXMgc3Vic2NyaWJlcnMKICAgICAgICBjaGFubmVsLnRpbWUgPCBtZXNzYWdlSnNvbi50aW1lKSB7CiAgICAgICAgICBjaGFubmVsLm1lc3NhZ2VzQ2FsbGJhY2sobWVzc2FnZUpzb24pOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJlcygpOwogICAgfSwgU0lNVUxBVEVfREVMQVlfVElNRSk7CiAgfSk7Cn0KZnVuY3Rpb24gb25NZXNzYWdlNChjaGFubmVsU3RhdGUsIGZuKSB7CiAgY2hhbm5lbFN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2sgPSBmbjsKfQpmdW5jdGlvbiBjYW5CZVVzZWQ0KCkgewogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIGF2ZXJhZ2VSZXNwb25zZVRpbWU0KCkgewogIHJldHVybiBTSU1VTEFURV9ERUxBWV9USU1FOwp9CnZhciBtaWNyb1NlY29uZHM1LCB0eXBlNCwgU0lNVUxBVEVfQ0hBTk5FTFMsIFNJTVVMQVRFX0RFTEFZX1RJTUUsIFNpbXVsYXRlTWV0aG9kOwp2YXIgaW5pdF9zaW11bGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2RzL3NpbXVsYXRlLmpzIigpIHsKICAgIGluaXRfdXRpbCgpOwogICAgbWljcm9TZWNvbmRzNSA9IG1pY3JvU2Vjb25kczsKICAgIHR5cGU0ID0gInNpbXVsYXRlIjsKICAgIFNJTVVMQVRFX0NIQU5ORUxTID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgIFNJTVVMQVRFX0RFTEFZX1RJTUUgPSA1OwogICAgU2ltdWxhdGVNZXRob2QgPSB7CiAgICAgIGNyZWF0ZTogY3JlYXRlNCwKICAgICAgY2xvc2U6IGNsb3NlNCwKICAgICAgb25NZXNzYWdlOiBvbk1lc3NhZ2U0LAogICAgICBwb3N0TWVzc2FnZTogcG9zdE1lc3NhZ2U0LAogICAgICBjYW5CZVVzZWQ6IGNhbkJlVXNlZDQsCiAgICAgIHR5cGU6IHR5cGU0LAogICAgICBhdmVyYWdlUmVzcG9uc2VUaW1lOiBhdmVyYWdlUmVzcG9uc2VUaW1lNCwKICAgICAgbWljcm9TZWNvbmRzOiBtaWNyb1NlY29uZHM1CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL21ldGhvZC1jaG9vc2VyLmpzCmZ1bmN0aW9uIGNob29zZU1ldGhvZChvcHRpb25zKSB7CiAgdmFyIGNob29zZU1ldGhvZHMgPSBbXS5jb25jYXQob3B0aW9ucy5tZXRob2RzLCBNRVRIT0RTKS5maWx0ZXIoQm9vbGVhbik7CiAgaWYgKG9wdGlvbnMudHlwZSkgewogICAgaWYgKG9wdGlvbnMudHlwZSA9PT0gInNpbXVsYXRlIikgewogICAgICByZXR1cm4gU2ltdWxhdGVNZXRob2Q7CiAgICB9CiAgICB2YXIgcmV0ID0gY2hvb3NlTWV0aG9kcy5maW5kKGZ1bmN0aW9uKG02KSB7CiAgICAgIHJldHVybiBtNi50eXBlID09PSBvcHRpb25zLnR5cGU7CiAgICB9KTsKICAgIGlmICghcmV0KSB0aHJvdyBuZXcgRXJyb3IoIm1ldGhvZC10eXBlICIgKyBvcHRpb25zLnR5cGUgKyAiIG5vdCBmb3VuZCIpOwogICAgZWxzZSByZXR1cm4gcmV0OwogIH0KICBpZiAoIW9wdGlvbnMud2ViV29ya2VyU3VwcG9ydCkgewogICAgY2hvb3NlTWV0aG9kcyA9IGNob29zZU1ldGhvZHMuZmlsdGVyKGZ1bmN0aW9uKG02KSB7CiAgICAgIHJldHVybiBtNi50eXBlICE9PSAiaWRiIjsKICAgIH0pOwogIH0KICB2YXIgdXNlTWV0aG9kID0gY2hvb3NlTWV0aG9kcy5maW5kKGZ1bmN0aW9uKG1ldGhvZCkgewogICAgcmV0dXJuIG1ldGhvZC5jYW5CZVVzZWQoKTsKICB9KTsKICBpZiAoIXVzZU1ldGhvZCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJObyB1c2FibGUgbWV0aG9kIGZvdW5kIGluICIgKyBKU09OLnN0cmluZ2lmeShNRVRIT0RTLm1hcChmdW5jdGlvbihtNikgewogICAgICByZXR1cm4gbTYudHlwZTsKICAgIH0pKSk7CiAgfSBlbHNlIHsKICAgIHJldHVybiB1c2VNZXRob2Q7CiAgfQp9CnZhciBNRVRIT0RTOwp2YXIgaW5pdF9tZXRob2RfY2hvb3NlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2QtY2hvb3Nlci5qcyIoKSB7CiAgICBpbml0X25hdGl2ZSgpOwogICAgaW5pdF9pbmRleGVkX2RiKCk7CiAgICBpbml0X2xvY2Fsc3RvcmFnZSgpOwogICAgaW5pdF9zaW11bGF0ZSgpOwogICAgTUVUSE9EUyA9IFsKICAgICAgTmF0aXZlTWV0aG9kLAogICAgICAvLyBmYXN0ZXN0CiAgICAgIEluZGV4ZWREQk1ldGhvZCwKICAgICAgTG9jYWxzdG9yYWdlTWV0aG9kCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2Jyb2FkY2FzdC1jaGFubmVsLmpzCmZ1bmN0aW9uIGNsZWFyTm9kZUZvbGRlcihvcHRpb25zKSB7CiAgb3B0aW9ucyA9IGZpbGxPcHRpb25zV2l0aERlZmF1bHRzKG9wdGlvbnMpOwogIHZhciBtZXRob2QgPSBjaG9vc2VNZXRob2Qob3B0aW9ucyk7CiAgaWYgKG1ldGhvZC50eXBlID09PSAibm9kZSIpIHsKICAgIHJldHVybiBtZXRob2QuY2xlYXJOb2RlRm9sZGVyKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9KTsKICB9IGVsc2UgewogICAgcmV0dXJuIFBST01JU0VfUkVTT0xWRURfRkFMU0U7CiAgfQp9CmZ1bmN0aW9uIGVuZm9yY2VPcHRpb25zKG9wdGlvbnMpIHsKICBFTkZPUkNFRF9PUFRJT05TID0gb3B0aW9uczsKfQpmdW5jdGlvbiBfcG9zdChicm9hZGNhc3RDaGFubmVsLCB0eXBlNSwgbXNnKSB7CiAgdmFyIHRpbWUgPSBicm9hZGNhc3RDaGFubmVsLm1ldGhvZC5taWNyb1NlY29uZHMoKTsKICB2YXIgbXNnT2JqID0gewogICAgdGltZSwKICAgIHR5cGU6IHR5cGU1LAogICAgZGF0YTogbXNnCiAgfTsKICB2YXIgYXdhaXRQcmVwYXJlID0gYnJvYWRjYXN0Q2hhbm5lbC5fcHJlcFAgPyBicm9hZGNhc3RDaGFubmVsLl9wcmVwUCA6IFBST01JU0VfUkVTT0xWRURfVk9JRDsKICByZXR1cm4gYXdhaXRQcmVwYXJlLnRoZW4oZnVuY3Rpb24oKSB7CiAgICB2YXIgc2VuZFByb21pc2UgPSBicm9hZGNhc3RDaGFubmVsLm1ldGhvZC5wb3N0TWVzc2FnZShicm9hZGNhc3RDaGFubmVsLl9zdGF0ZSwgbXNnT2JqKTsKICAgIGJyb2FkY2FzdENoYW5uZWwuX3VNUC5hZGQoc2VuZFByb21pc2UpOwogICAgc2VuZFByb21pc2VbImNhdGNoIl0oKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gYnJvYWRjYXN0Q2hhbm5lbC5fdU1QWyJkZWxldGUiXShzZW5kUHJvbWlzZSk7CiAgICB9KTsKICAgIHJldHVybiBzZW5kUHJvbWlzZTsKICB9KTsKfQpmdW5jdGlvbiBfcHJlcGFyZUNoYW5uZWwoY2hhbm5lbCkgewogIHZhciBtYXliZVByb21pc2UgPSBjaGFubmVsLm1ldGhvZC5jcmVhdGUoY2hhbm5lbC5uYW1lLCBjaGFubmVsLm9wdGlvbnMpOwogIGlmIChpc1Byb21pc2UyKG1heWJlUHJvbWlzZSkpIHsKICAgIGNoYW5uZWwuX3ByZXBQID0gbWF5YmVQcm9taXNlOwogICAgbWF5YmVQcm9taXNlLnRoZW4oZnVuY3Rpb24oczkpIHsKICAgICAgY2hhbm5lbC5fc3RhdGUgPSBzOTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICBjaGFubmVsLl9zdGF0ZSA9IG1heWJlUHJvbWlzZTsKICB9Cn0KZnVuY3Rpb24gX2hhc01lc3NhZ2VMaXN0ZW5lcnMoY2hhbm5lbCkgewogIGlmIChjaGFubmVsLl9hZGRFTC5tZXNzYWdlLmxlbmd0aCA+IDApIHJldHVybiB0cnVlOwogIGlmIChjaGFubmVsLl9hZGRFTC5pbnRlcm5hbC5sZW5ndGggPiAwKSByZXR1cm4gdHJ1ZTsKICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gX2FkZExpc3RlbmVyT2JqZWN0KGNoYW5uZWwsIHR5cGU1LCBvYmopIHsKICBjaGFubmVsLl9hZGRFTFt0eXBlNV0ucHVzaChvYmopOwogIF9zdGFydExpc3RlbmluZyhjaGFubmVsKTsKfQpmdW5jdGlvbiBfcmVtb3ZlTGlzdGVuZXJPYmplY3QoY2hhbm5lbCwgdHlwZTUsIG9iaikgewogIGNoYW5uZWwuX2FkZEVMW3R5cGU1XSA9IGNoYW5uZWwuX2FkZEVMW3R5cGU1XS5maWx0ZXIoZnVuY3Rpb24obzEzKSB7CiAgICByZXR1cm4gbzEzICE9PSBvYmo7CiAgfSk7CiAgX3N0b3BMaXN0ZW5pbmcoY2hhbm5lbCk7Cn0KZnVuY3Rpb24gX3N0YXJ0TGlzdGVuaW5nKGNoYW5uZWwpIHsKICBpZiAoIWNoYW5uZWwuX2lMICYmIF9oYXNNZXNzYWdlTGlzdGVuZXJzKGNoYW5uZWwpKSB7CiAgICB2YXIgbGlzdGVuZXJGbiA9IGZ1bmN0aW9uIGxpc3RlbmVyRm4yKG1zZ09iaikgewogICAgICBjaGFubmVsLl9hZGRFTFttc2dPYmoudHlwZV0uZm9yRWFjaChmdW5jdGlvbihsaXN0ZW5lck9iamVjdCkgewogICAgICAgIGlmIChtc2dPYmoudGltZSA+PSBsaXN0ZW5lck9iamVjdC50aW1lKSB7CiAgICAgICAgICBsaXN0ZW5lck9iamVjdC5mbihtc2dPYmouZGF0YSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH07CiAgICB2YXIgdGltZSA9IGNoYW5uZWwubWV0aG9kLm1pY3JvU2Vjb25kcygpOwogICAgaWYgKGNoYW5uZWwuX3ByZXBQKSB7CiAgICAgIGNoYW5uZWwuX3ByZXBQLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgY2hhbm5lbC5faUwgPSB0cnVlOwogICAgICAgIGNoYW5uZWwubWV0aG9kLm9uTWVzc2FnZShjaGFubmVsLl9zdGF0ZSwgbGlzdGVuZXJGbiwgdGltZSk7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgY2hhbm5lbC5faUwgPSB0cnVlOwogICAgICBjaGFubmVsLm1ldGhvZC5vbk1lc3NhZ2UoY2hhbm5lbC5fc3RhdGUsIGxpc3RlbmVyRm4sIHRpbWUpOwogICAgfQogIH0KfQpmdW5jdGlvbiBfc3RvcExpc3RlbmluZyhjaGFubmVsKSB7CiAgaWYgKGNoYW5uZWwuX2lMICYmICFfaGFzTWVzc2FnZUxpc3RlbmVycyhjaGFubmVsKSkgewogICAgY2hhbm5lbC5faUwgPSBmYWxzZTsKICAgIHZhciB0aW1lID0gY2hhbm5lbC5tZXRob2QubWljcm9TZWNvbmRzKCk7CiAgICBjaGFubmVsLm1ldGhvZC5vbk1lc3NhZ2UoY2hhbm5lbC5fc3RhdGUsIG51bGwsIHRpbWUpOwogIH0KfQp2YXIgT1BFTl9CUk9BRENBU1RfQ0hBTk5FTFMsIGxhc3RJZCwgQnJvYWRjYXN0Q2hhbm5lbDIsIEVORk9SQ0VEX09QVElPTlM7CnZhciBpbml0X2Jyb2FkY2FzdF9jaGFubmVsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2Jyb2FkY2FzdC1jaGFubmVsLmpzIigpIHsKICAgIGluaXRfdXRpbCgpOwogICAgaW5pdF9tZXRob2RfY2hvb3NlcigpOwogICAgaW5pdF9vcHRpb25zKCk7CiAgICBPUEVOX0JST0FEQ0FTVF9DSEFOTkVMUyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgICBsYXN0SWQgPSAwOwogICAgQnJvYWRjYXN0Q2hhbm5lbDIgPSBmdW5jdGlvbiBCcm9hZGNhc3RDaGFubmVsMyhuYW1lLCBvcHRpb25zKSB7CiAgICAgIHRoaXMuaWQgPSBsYXN0SWQrKzsKICAgICAgT1BFTl9CUk9BRENBU1RfQ0hBTk5FTFMuYWRkKHRoaXMpOwogICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICBpZiAoRU5GT1JDRURfT1BUSU9OUykgewogICAgICAgIG9wdGlvbnMgPSBFTkZPUkNFRF9PUFRJT05TOwogICAgICB9CiAgICAgIHRoaXMub3B0aW9ucyA9IGZpbGxPcHRpb25zV2l0aERlZmF1bHRzKG9wdGlvbnMpOwogICAgICB0aGlzLm1ldGhvZCA9IGNob29zZU1ldGhvZCh0aGlzLm9wdGlvbnMpOwogICAgICB0aGlzLl9pTCA9IGZhbHNlOwogICAgICB0aGlzLl9vbk1MID0gbnVsbDsKICAgICAgdGhpcy5fYWRkRUwgPSB7CiAgICAgICAgbWVzc2FnZTogW10sCiAgICAgICAgaW50ZXJuYWw6IFtdCiAgICAgIH07CiAgICAgIHRoaXMuX3VNUCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgICAgIHRoaXMuX2JlZkMgPSBbXTsKICAgICAgdGhpcy5fcHJlcFAgPSBudWxsOwogICAgICBfcHJlcGFyZUNoYW5uZWwodGhpcyk7CiAgICB9OwogICAgQnJvYWRjYXN0Q2hhbm5lbDIuX3B1YmtleSA9IHRydWU7CiAgICBCcm9hZGNhc3RDaGFubmVsMi5wcm90b3R5cGUgPSB7CiAgICAgIHBvc3RNZXNzYWdlOiBmdW5jdGlvbiBwb3N0TWVzc2FnZTUobXNnKSB7CiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJyb2FkY2FzdENoYW5uZWwucG9zdE1lc3NhZ2UoKTogQ2Fubm90IHBvc3QgbWVzc2FnZSBhZnRlciBjaGFubmVsIGhhcyBjbG9zZWQgIiArIC8qKgogICAgICAgICAgICogSW4gdGhlIHBhc3Qgd2hlbiB0aGlzIGVycm9yIGFwcGVhcmVkLCBpdCB3YXMgcmVhbGx5IGhhcmQgdG8gZGVidWcuCiAgICAgICAgICAgKiBTbyBub3cgd2UgbG9nIHRoZSBtc2cgdG9nZXRoZXIgd2l0aCB0aGUgZXJyb3Igc28gaXQgYXQgbGVhc3QKICAgICAgICAgICAqIGdpdmVzIHNvbWUgY2x1ZSBhYm91dCB3aGVyZSBpbiB5b3VyIGFwcGxpY2F0aW9uIHRoaXMgaGFwcGVucy4KICAgICAgICAgICAqLwogICAgICAgICAgSlNPTi5zdHJpbmdpZnkobXNnKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfcG9zdCh0aGlzLCAibWVzc2FnZSIsIG1zZyk7CiAgICAgIH0sCiAgICAgIHBvc3RJbnRlcm5hbDogZnVuY3Rpb24gcG9zdEludGVybmFsKG1zZykgewogICAgICAgIHJldHVybiBfcG9zdCh0aGlzLCAiaW50ZXJuYWwiLCBtc2cpOwogICAgICB9LAogICAgICBzZXQgb25tZXNzYWdlKGZuKSB7CiAgICAgICAgdmFyIHRpbWUgPSB0aGlzLm1ldGhvZC5taWNyb1NlY29uZHMoKTsKICAgICAgICB2YXIgbGlzdGVuT2JqID0gewogICAgICAgICAgdGltZSwKICAgICAgICAgIGZuCiAgICAgICAgfTsKICAgICAgICBfcmVtb3ZlTGlzdGVuZXJPYmplY3QodGhpcywgIm1lc3NhZ2UiLCB0aGlzLl9vbk1MKTsKICAgICAgICBpZiAoZm4gJiYgdHlwZW9mIGZuID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICB0aGlzLl9vbk1MID0gbGlzdGVuT2JqOwogICAgICAgICAgX2FkZExpc3RlbmVyT2JqZWN0KHRoaXMsICJtZXNzYWdlIiwgbGlzdGVuT2JqKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5fb25NTCA9IG51bGw7CiAgICAgICAgfQogICAgICB9LAogICAgICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKHR5cGU1LCBmbikgewogICAgICAgIHZhciB0aW1lID0gdGhpcy5tZXRob2QubWljcm9TZWNvbmRzKCk7CiAgICAgICAgdmFyIGxpc3Rlbk9iaiA9IHsKICAgICAgICAgIHRpbWUsCiAgICAgICAgICBmbgogICAgICAgIH07CiAgICAgICAgX2FkZExpc3RlbmVyT2JqZWN0KHRoaXMsIHR5cGU1LCBsaXN0ZW5PYmopOwogICAgICB9LAogICAgICByZW1vdmVFdmVudExpc3RlbmVyOiBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKHR5cGU1LCBmbikgewogICAgICAgIHZhciBvYmogPSB0aGlzLl9hZGRFTFt0eXBlNV0uZmluZChmdW5jdGlvbihvYmoyKSB7CiAgICAgICAgICByZXR1cm4gb2JqMi5mbiA9PT0gZm47CiAgICAgICAgfSk7CiAgICAgICAgX3JlbW92ZUxpc3RlbmVyT2JqZWN0KHRoaXMsIHR5cGU1LCBvYmopOwogICAgICB9LAogICAgICBjbG9zZTogZnVuY3Rpb24gY2xvc2U1KCkgewogICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIE9QRU5fQlJPQURDQVNUX0NIQU5ORUxTWyJkZWxldGUiXSh0aGlzKTsKICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7CiAgICAgICAgdmFyIGF3YWl0UHJlcGFyZSA9IHRoaXMuX3ByZXBQID8gdGhpcy5fcHJlcFAgOiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQ7CiAgICAgICAgdGhpcy5fb25NTCA9IG51bGw7CiAgICAgICAgdGhpcy5fYWRkRUwubWVzc2FnZSA9IFtdOwogICAgICAgIHJldHVybiBhd2FpdFByZXBhcmUudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChBcnJheS5mcm9tKF90aGlzLl91TVApKTsKICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKF90aGlzLl9iZWZDLm1hcChmdW5jdGlvbihmbikgewogICAgICAgICAgICByZXR1cm4gZm4oKTsKICAgICAgICAgIH0pKTsKICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIF90aGlzLm1ldGhvZC5jbG9zZShfdGhpcy5fc3RhdGUpOwogICAgICAgIH0pOwogICAgICB9LAogICAgICBnZXQgdHlwZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5tZXRob2QudHlwZTsKICAgICAgfSwKICAgICAgZ2V0IGlzQ2xvc2VkKCkgewogICAgICAgIHJldHVybiB0aGlzLmNsb3NlZDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VubG9hZEAyLjQuMS9ub2RlX21vZHVsZXMvdW5sb2FkL2Rpc3QvZXMvYnJvd3Nlci5qcwpmdW5jdGlvbiBhZGRCcm93c2VyKGZuKSB7CiAgaWYgKHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSA9PT0gImZ1bmN0aW9uIiAmJiBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUpIHsKICAgIHZhciBvbGRDbG9zZSA9IHNlbGYuY2xvc2UuYmluZChzZWxmKTsKICAgIHNlbGYuY2xvc2UgPSBmdW5jdGlvbigpIHsKICAgICAgZm4oKTsKICAgICAgcmV0dXJuIG9sZENsb3NlKCk7CiAgICB9OwogIH0gZWxzZSB7CiAgICBpZiAodHlwZW9mIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLCBmdW5jdGlvbigpIHsKICAgICAgZm4oKTsKICAgIH0sIHRydWUpOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsIGZ1bmN0aW9uKCkgewogICAgICBmbigpOwogICAgfSwgdHJ1ZSk7CiAgfQp9CnZhciBpbml0X2Jyb3dzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmxvYWRAMi40LjEvbm9kZV9tb2R1bGVzL3VubG9hZC9kaXN0L2VzL2Jyb3dzZXIuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5sb2FkQDIuNC4xL25vZGVfbW9kdWxlcy91bmxvYWQvZGlzdC9lcy9ub2RlLmpzCmZ1bmN0aW9uIGFkZE5vZGUoZm4pIHsKICBwcm9jZXNzLm9uKCJleGl0IiwgZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gZm4oKTsKICB9KTsKICBwcm9jZXNzLm9uKCJiZWZvcmVFeGl0IiwgZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gZm4oKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gcHJvY2Vzcy5leGl0KCk7CiAgICB9KTsKICB9KTsKICBwcm9jZXNzLm9uKCJTSUdJTlQiLCBmdW5jdGlvbigpIHsKICAgIHJldHVybiBmbigpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBwcm9jZXNzLmV4aXQoKTsKICAgIH0pOwogIH0pOwogIHByb2Nlc3Mub24oInVuY2F1Z2h0RXhjZXB0aW9uIiwgZnVuY3Rpb24oZXJyKSB7CiAgICByZXR1cm4gZm4oKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICBjb25zb2xlLnRyYWNlKGVycik7CiAgICAgIHByb2Nlc3MuZXhpdCgxMDEpOwogICAgfSk7CiAgfSk7Cn0KdmFyIGluaXRfbm9kZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VubG9hZEAyLjQuMS9ub2RlX21vZHVsZXMvdW5sb2FkL2Rpc3QvZXMvbm9kZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmxvYWRAMi40LjEvbm9kZV9tb2R1bGVzL3VubG9hZC9kaXN0L2VzL2luZGV4LmpzCmZ1bmN0aW9uIHN0YXJ0TGlzdGVuaW5nKCkgewogIGlmIChzdGFydGVkTGlzdGVuaW5nKSB7CiAgICByZXR1cm47CiAgfQogIHN0YXJ0ZWRMaXN0ZW5pbmcgPSB0cnVlOwogIFVTRV9NRVRIT0QocnVuQWxsKTsKfQpmdW5jdGlvbiBhZGQyKGZuKSB7CiAgc3RhcnRMaXN0ZW5pbmcoKTsKICBpZiAodHlwZW9mIGZuICE9PSAiZnVuY3Rpb24iKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkxpc3RlbmVyIGlzIG5vIGZ1bmN0aW9uIik7CiAgfQogIExJU1RFTkVSUy5hZGQoZm4pOwogIHZhciBhZGRSZXR1cm4gPSB7CiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZTIoKSB7CiAgICAgIHJldHVybiBMSVNURU5FUlNbImRlbGV0ZSJdKGZuKTsKICAgIH0sCiAgICBydW46IGZ1bmN0aW9uIHJ1bigpIHsKICAgICAgTElTVEVORVJTWyJkZWxldGUiXShmbik7CiAgICAgIHJldHVybiBmbigpOwogICAgfQogIH07CiAgcmV0dXJuIGFkZFJldHVybjsKfQpmdW5jdGlvbiBydW5BbGwoKSB7CiAgdmFyIHByb21pc2VzID0gW107CiAgTElTVEVORVJTLmZvckVhY2goZnVuY3Rpb24oZm4pIHsKICAgIHByb21pc2VzLnB1c2goZm4oKSk7CiAgICBMSVNURU5FUlNbImRlbGV0ZSJdKGZuKTsKICB9KTsKICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpOwp9CmZ1bmN0aW9uIHJlbW92ZUFsbCgpIHsKICBMSVNURU5FUlMuY2xlYXIoKTsKfQpmdW5jdGlvbiBnZXRTaXplKCkgewogIHJldHVybiBMSVNURU5FUlMuc2l6ZTsKfQp2YXIgaXNOb2RlLCBVU0VfTUVUSE9ELCBMSVNURU5FUlMsIHN0YXJ0ZWRMaXN0ZW5pbmc7CnZhciBpbml0X2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5sb2FkQDIuNC4xL25vZGVfbW9kdWxlcy91bmxvYWQvZGlzdC9lcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2Jyb3dzZXIoKTsKICAgIGluaXRfbm9kZSgpOwogICAgaXNOb2RlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHR5cGVvZiBwcm9jZXNzICE9PSAidW5kZWZpbmVkIiA/IHByb2Nlc3MgOiAwKSA9PT0gIltvYmplY3QgcHJvY2Vzc10iOwogICAgVVNFX01FVEhPRCA9IGlzTm9kZSA/IGFkZE5vZGUgOiBhZGRCcm93c2VyOwogICAgTElTVEVORVJTID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgIHN0YXJ0ZWRMaXN0ZW5pbmcgPSBmYWxzZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9sZWFkZXItZWxlY3Rpb24tdXRpbC5qcwpmdW5jdGlvbiBzZW5kTGVhZGVyTWVzc2FnZShsZWFkZXJFbGVjdG9yLCBhY3Rpb24pIHsKICB2YXIgbXNnSnNvbiA9IHsKICAgIGNvbnRleHQ6ICJsZWFkZXIiLAogICAgYWN0aW9uLAogICAgdG9rZW46IGxlYWRlckVsZWN0b3IudG9rZW4KICB9OwogIHJldHVybiBsZWFkZXJFbGVjdG9yLmJyb2FkY2FzdENoYW5uZWwucG9zdEludGVybmFsKG1zZ0pzb24pOwp9CmZ1bmN0aW9uIGJlTGVhZGVyKGxlYWRlckVsZWN0b3IpIHsKICBsZWFkZXJFbGVjdG9yLmlzTGVhZGVyID0gdHJ1ZTsKICBsZWFkZXJFbGVjdG9yLl9oYXNMZWFkZXIgPSB0cnVlOwogIHZhciB1bmxvYWRGbiA9IGFkZDIoZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gbGVhZGVyRWxlY3Rvci5kaWUoKTsKICB9KTsKICBsZWFkZXJFbGVjdG9yLl91bmwucHVzaCh1bmxvYWRGbik7CiAgdmFyIGlzTGVhZGVyTGlzdGVuZXIgPSBmdW5jdGlvbiBpc0xlYWRlckxpc3RlbmVyMihtc2cpIHsKICAgIGlmIChtc2cuY29udGV4dCA9PT0gImxlYWRlciIgJiYgbXNnLmFjdGlvbiA9PT0gImFwcGx5IikgewogICAgICBzZW5kTGVhZGVyTWVzc2FnZShsZWFkZXJFbGVjdG9yLCAidGVsbCIpOwogICAgfQogICAgaWYgKG1zZy5jb250ZXh0ID09PSAibGVhZGVyIiAmJiBtc2cuYWN0aW9uID09PSAidGVsbCIgJiYgIWxlYWRlckVsZWN0b3IuX2RwTEMpIHsKICAgICAgbGVhZGVyRWxlY3Rvci5fZHBMQyA9IHRydWU7CiAgICAgIGxlYWRlckVsZWN0b3IuX2RwTCgpOwogICAgICBzZW5kTGVhZGVyTWVzc2FnZShsZWFkZXJFbGVjdG9yLCAidGVsbCIpOwogICAgfQogIH07CiAgbGVhZGVyRWxlY3Rvci5icm9hZGNhc3RDaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoImludGVybmFsIiwgaXNMZWFkZXJMaXN0ZW5lcik7CiAgbGVhZGVyRWxlY3Rvci5fbHN0bnMucHVzaChpc0xlYWRlckxpc3RlbmVyKTsKICByZXR1cm4gc2VuZExlYWRlck1lc3NhZ2UobGVhZGVyRWxlY3RvciwgInRlbGwiKTsKfQp2YXIgaW5pdF9sZWFkZXJfZWxlY3Rpb25fdXRpbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9sZWFkZXItZWxlY3Rpb24tdXRpbC5qcyIoKSB7CiAgICBpbml0X2VzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbGVhZGVyLWVsZWN0aW9uLXdlYi1sb2NrLmpzCnZhciBMZWFkZXJFbGVjdGlvbldlYkxvY2ssIExFQURFUl9ESUVfQUJPUlRfU0lHTkFMX01FU1NBR0U7CnZhciBpbml0X2xlYWRlcl9lbGVjdGlvbl93ZWJfbG9jayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9sZWFkZXItZWxlY3Rpb24td2ViLWxvY2suanMiKCkgewogICAgaW5pdF91dGlsKCk7CiAgICBpbml0X2xlYWRlcl9lbGVjdGlvbl91dGlsKCk7CiAgICBMZWFkZXJFbGVjdGlvbldlYkxvY2sgPSBmdW5jdGlvbiBMZWFkZXJFbGVjdGlvbldlYkxvY2syKGJyb2FkY2FzdENoYW5uZWwsIG9wdGlvbnMpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdGhpcy5icm9hZGNhc3RDaGFubmVsID0gYnJvYWRjYXN0Q2hhbm5lbDsKICAgICAgYnJvYWRjYXN0Q2hhbm5lbC5fYmVmQy5wdXNoKGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBfdGhpcy5kaWUoKTsKICAgICAgfSk7CiAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zOwogICAgICB0aGlzLmlzTGVhZGVyID0gZmFsc2U7CiAgICAgIHRoaXMuaXNEZWFkID0gZmFsc2U7CiAgICAgIHRoaXMudG9rZW4gPSByYW5kb21Ub2tlbigpOwogICAgICB0aGlzLl9sc3RucyA9IFtdOwogICAgICB0aGlzLl91bmwgPSBbXTsKICAgICAgdGhpcy5fZHBMID0gZnVuY3Rpb24oKSB7CiAgICAgIH07CiAgICAgIHRoaXMuX2RwTEMgPSBmYWxzZTsKICAgICAgdGhpcy5fd0tNQyA9IHt9OwogICAgICB0aGlzLmxOID0gInB1YmtleS1iY3x8IiArIGJyb2FkY2FzdENoYW5uZWwubWV0aG9kLnR5cGUgKyAifHwiICsgYnJvYWRjYXN0Q2hhbm5lbC5uYW1lOwogICAgfTsKICAgIExFQURFUl9ESUVfQUJPUlRfU0lHTkFMX01FU1NBR0UgPSAiTGVhZGVyRWxlY3Rpb25XZWJMb2NrLmRpZSgpIGNhbGxlZCI7CiAgICBMZWFkZXJFbGVjdGlvbldlYkxvY2sucHJvdG90eXBlID0gewogICAgICBoYXNMZWFkZXI6IGZ1bmN0aW9uIGhhc0xlYWRlcigpIHsKICAgICAgICB2YXIgX3RoaXMyID0gdGhpczsKICAgICAgICByZXR1cm4gbmF2aWdhdG9yLmxvY2tzLnF1ZXJ5KCkudGhlbihmdW5jdGlvbihsb2NrcykgewogICAgICAgICAgdmFyIHJlbGV2YW50TG9ja3MgPSBsb2Nrcy5oZWxkID8gbG9ja3MuaGVsZC5maWx0ZXIoZnVuY3Rpb24obG9jaykgewogICAgICAgICAgICByZXR1cm4gbG9jay5uYW1lID09PSBfdGhpczIubE47CiAgICAgICAgICB9KSA6IFtdOwogICAgICAgICAgaWYgKHJlbGV2YW50TG9ja3MgJiYgcmVsZXZhbnRMb2Nrcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9LAogICAgICBhd2FpdExlYWRlcnNoaXA6IGZ1bmN0aW9uIGF3YWl0TGVhZGVyc2hpcCgpIHsKICAgICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgICBpZiAoIXRoaXMuX3dMTVApIHsKICAgICAgICAgIHRoaXMuX3dLTUMuYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICAgICAgICAgIHZhciByZXR1cm5Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzLCByZWopIHsKICAgICAgICAgICAgX3RoaXMzLl93S01DLnJlcyA9IHJlczsKICAgICAgICAgICAgX3RoaXMzLl93S01DLnJlaiA9IHJlajsKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5fd0xNUCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcywgcmVqZWN0KSB7CiAgICAgICAgICAgIG5hdmlnYXRvci5sb2Nrcy5yZXF1ZXN0KF90aGlzMy5sTiwgewogICAgICAgICAgICAgIHNpZ25hbDogX3RoaXMzLl93S01DLmMuc2lnbmFsCiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIF90aGlzMy5fd0tNQy5jID0gdm9pZCAwOwogICAgICAgICAgICAgIGJlTGVhZGVyKF90aGlzMyk7CiAgICAgICAgICAgICAgcmVzKCk7CiAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblByb21pc2U7CiAgICAgICAgICAgIH0pWyJjYXRjaCJdKGZ1bmN0aW9uKGVycikgewogICAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZSA9PT0gTEVBREVSX0RJRV9BQk9SVF9TSUdOQUxfTUVTU0FHRSkgewogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoX3RoaXMzLl93S01DLnJlaikgewogICAgICAgICAgICAgICAgICBfdGhpczMuX3dLTUMucmVqKGVycik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl93TE1QOwogICAgICB9LAogICAgICBzZXQgb25kdXBsaWNhdGUoX2ZuKSB7CiAgICAgIH0sCiAgICAgIGRpZTogZnVuY3Rpb24gZGllKCkgewogICAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICAgIHRoaXMuX2xzdG5zLmZvckVhY2goZnVuY3Rpb24obGlzdGVuZXIyKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXM0LmJyb2FkY2FzdENoYW5uZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLCBsaXN0ZW5lcjIpOwogICAgICAgIH0pOwogICAgICAgIHRoaXMuX2xzdG5zID0gW107CiAgICAgICAgdGhpcy5fdW5sLmZvckVhY2goZnVuY3Rpb24odUZuKSB7CiAgICAgICAgICByZXR1cm4gdUZuLnJlbW92ZSgpOwogICAgICAgIH0pOwogICAgICAgIHRoaXMuX3VubCA9IFtdOwogICAgICAgIGlmICh0aGlzLmlzTGVhZGVyKSB7CiAgICAgICAgICB0aGlzLmlzTGVhZGVyID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHRoaXMuaXNEZWFkID0gdHJ1ZTsKICAgICAgICBpZiAodGhpcy5fd0tNQy5yZXMpIHsKICAgICAgICAgIHRoaXMuX3dLTUMucmVzKCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLl93S01DLmMpIHsKICAgICAgICAgIHRoaXMuX3dLTUMuYy5hYm9ydChuZXcgRXJyb3IoTEVBREVSX0RJRV9BQk9SVF9TSUdOQUxfTUVTU0FHRSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VuZExlYWRlck1lc3NhZ2UodGhpcywgImRlYXRoIik7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbGVhZGVyLWVsZWN0aW9uLmpzCmZ1bmN0aW9uIF9hd2FpdExlYWRlcnNoaXBPbmNlKGxlYWRlckVsZWN0b3IpIHsKICBpZiAobGVhZGVyRWxlY3Rvci5pc0xlYWRlcikgewogICAgcmV0dXJuIFBST01JU0VfUkVTT0xWRURfVk9JRDsKICB9CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcykgewogICAgdmFyIHJlc29sdmVkMiA9IGZhbHNlOwogICAgZnVuY3Rpb24gZmluaXNoKCkgewogICAgICBpZiAocmVzb2x2ZWQyKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHJlc29sdmVkMiA9IHRydWU7CiAgICAgIGxlYWRlckVsZWN0b3IuYnJvYWRjYXN0Q2hhbm5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIsIHdoZW5EZWF0aExpc3RlbmVyKTsKICAgICAgcmVzKHRydWUpOwogICAgfQogICAgbGVhZGVyRWxlY3Rvci5hcHBseU9uY2UoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICBpZiAobGVhZGVyRWxlY3Rvci5pc0xlYWRlcikgewogICAgICAgIGZpbmlzaCgpOwogICAgICB9CiAgICB9KTsKICAgIHZhciBfdHJ5T25GYWxsQmFjayA9IGZ1bmN0aW9uIHRyeU9uRmFsbEJhY2soKSB7CiAgICAgIHJldHVybiBzbGVlcChsZWFkZXJFbGVjdG9yLl9vcHRpb25zLmZhbGxiYWNrSW50ZXJ2YWwpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGxlYWRlckVsZWN0b3IuaXNEZWFkIHx8IHJlc29sdmVkMikgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAobGVhZGVyRWxlY3Rvci5pc0xlYWRlcikgewogICAgICAgICAgZmluaXNoKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBsZWFkZXJFbGVjdG9yLmFwcGx5T25jZSh0cnVlKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAobGVhZGVyRWxlY3Rvci5pc0xlYWRlcikgewogICAgICAgICAgICAgIGZpbmlzaCgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF90cnlPbkZhbGxCYWNrKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9OwogICAgX3RyeU9uRmFsbEJhY2soKTsKICAgIHZhciB3aGVuRGVhdGhMaXN0ZW5lciA9IGZ1bmN0aW9uIHdoZW5EZWF0aExpc3RlbmVyMihtc2cpIHsKICAgICAgaWYgKG1zZy5jb250ZXh0ID09PSAibGVhZGVyIiAmJiBtc2cuYWN0aW9uID09PSAiZGVhdGgiKSB7CiAgICAgICAgbGVhZGVyRWxlY3Rvci5faGFzTGVhZGVyID0gZmFsc2U7CiAgICAgICAgbGVhZGVyRWxlY3Rvci5hcHBseU9uY2UoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgaWYgKGxlYWRlckVsZWN0b3IuaXNMZWFkZXIpIHsKICAgICAgICAgICAgZmluaXNoKCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBsZWFkZXJFbGVjdG9yLmJyb2FkY2FzdENoYW5uZWwuYWRkRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLCB3aGVuRGVhdGhMaXN0ZW5lcik7CiAgICBsZWFkZXJFbGVjdG9yLl9sc3Rucy5wdXNoKHdoZW5EZWF0aExpc3RlbmVyKTsKICB9KTsKfQpmdW5jdGlvbiBmaWxsT3B0aW9uc1dpdGhEZWZhdWx0czIob3B0aW9ucywgY2hhbm5lbCkgewogIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9OwogIG9wdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKTsKICBpZiAoIW9wdGlvbnMuZmFsbGJhY2tJbnRlcnZhbCkgewogICAgb3B0aW9ucy5mYWxsYmFja0ludGVydmFsID0gM2UzOwogIH0KICBpZiAoIW9wdGlvbnMucmVzcG9uc2VUaW1lKSB7CiAgICBvcHRpb25zLnJlc3BvbnNlVGltZSA9IGNoYW5uZWwubWV0aG9kLmF2ZXJhZ2VSZXNwb25zZVRpbWUoY2hhbm5lbC5vcHRpb25zKTsKICB9CiAgcmV0dXJuIG9wdGlvbnM7Cn0KZnVuY3Rpb24gY3JlYXRlTGVhZGVyRWxlY3Rpb24oY2hhbm5lbCwgb3B0aW9ucykgewogIGlmIChjaGFubmVsLl9sZWFkZXJFbGVjdG9yKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkJyb2FkY2FzdENoYW5uZWwgYWxyZWFkeSBoYXMgYSBsZWFkZXItZWxlY3RvciIpOwogIH0KICBvcHRpb25zID0gZmlsbE9wdGlvbnNXaXRoRGVmYXVsdHMyKG9wdGlvbnMsIGNoYW5uZWwpOwogIHZhciBlbGVjdG9yID0gc3VwcG9ydHNXZWJMb2NrQVBJKCkgPyBuZXcgTGVhZGVyRWxlY3Rpb25XZWJMb2NrKGNoYW5uZWwsIG9wdGlvbnMpIDogbmV3IExlYWRlckVsZWN0aW9uKGNoYW5uZWwsIG9wdGlvbnMpOwogIGNoYW5uZWwuX2JlZkMucHVzaChmdW5jdGlvbigpIHsKICAgIHJldHVybiBlbGVjdG9yLmRpZSgpOwogIH0pOwogIGNoYW5uZWwuX2xlYWRlckVsZWN0b3IgPSBlbGVjdG9yOwogIHJldHVybiBlbGVjdG9yOwp9CnZhciBMZWFkZXJFbGVjdGlvbjsKdmFyIGluaXRfbGVhZGVyX2VsZWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2xlYWRlci1lbGVjdGlvbi5qcyIoKSB7CiAgICBpbml0X3V0aWwoKTsKICAgIGluaXRfbGVhZGVyX2VsZWN0aW9uX3V0aWwoKTsKICAgIGluaXRfbGVhZGVyX2VsZWN0aW9uX3dlYl9sb2NrKCk7CiAgICBMZWFkZXJFbGVjdGlvbiA9IGZ1bmN0aW9uIExlYWRlckVsZWN0aW9uMihicm9hZGNhc3RDaGFubmVsLCBvcHRpb25zKSB7CiAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCA9IGJyb2FkY2FzdENoYW5uZWw7CiAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zOwogICAgICB0aGlzLmlzTGVhZGVyID0gZmFsc2U7CiAgICAgIHRoaXMuX2hhc0xlYWRlciA9IGZhbHNlOwogICAgICB0aGlzLmlzRGVhZCA9IGZhbHNlOwogICAgICB0aGlzLnRva2VuID0gcmFuZG9tVG9rZW4oKTsKICAgICAgdGhpcy5fYXBsUSA9IFBST01JU0VfUkVTT0xWRURfVk9JRDsKICAgICAgdGhpcy5fYXBsUUMgPSAwOwogICAgICB0aGlzLl91bmwgPSBbXTsKICAgICAgdGhpcy5fbHN0bnMgPSBbXTsKICAgICAgdGhpcy5fZHBMID0gZnVuY3Rpb24oKSB7CiAgICAgIH07CiAgICAgIHRoaXMuX2RwTEMgPSBmYWxzZTsKICAgICAgdmFyIGhhc0xlYWRlckxpc3RlbmVyID0gZnVuY3Rpb24gaGFzTGVhZGVyTGlzdGVuZXIyKG1zZykgewogICAgICAgIGlmIChtc2cuY29udGV4dCA9PT0gImxlYWRlciIpIHsKICAgICAgICAgIGlmIChtc2cuYWN0aW9uID09PSAiZGVhdGgiKSB7CiAgICAgICAgICAgIF90aGlzLl9oYXNMZWFkZXIgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChtc2cuYWN0aW9uID09PSAidGVsbCIpIHsKICAgICAgICAgICAgX3RoaXMuX2hhc0xlYWRlciA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgICB0aGlzLmJyb2FkY2FzdENoYW5uZWwuYWRkRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLCBoYXNMZWFkZXJMaXN0ZW5lcik7CiAgICAgIHRoaXMuX2xzdG5zLnB1c2goaGFzTGVhZGVyTGlzdGVuZXIpOwogICAgfTsKICAgIExlYWRlckVsZWN0aW9uLnByb3RvdHlwZSA9IHsKICAgICAgaGFzTGVhZGVyOiBmdW5jdGlvbiBoYXNMZWFkZXIyKCkgewogICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5faGFzTGVhZGVyKTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgaW5zdGFuY2UgaXMgbGVhZGVyLAogICAgICAgKiBmYWxzZSBpZiBub3QuCiAgICAgICAqIEBhc3luYwogICAgICAgKi8KICAgICAgYXBwbHlPbmNlOiBmdW5jdGlvbiBhcHBseU9uY2UoaXNGcm9tRmFsbGJhY2tJbnRlcnZhbCkgewogICAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICAgIGlmICh0aGlzLmlzTGVhZGVyKSB7CiAgICAgICAgICByZXR1cm4gc2xlZXAoMCwgdHJ1ZSk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmlzRGVhZCkgewogICAgICAgICAgcmV0dXJuIHNsZWVwKDAsIGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuX2FwbFFDID4gMSkgewogICAgICAgICAgcmV0dXJuIHRoaXMuX2FwbFE7CiAgICAgICAgfQogICAgICAgIHZhciBhcHBseVJ1biA9IGZ1bmN0aW9uIGFwcGx5UnVuMigpIHsKICAgICAgICAgIGlmIChfdGhpczIuaXNMZWFkZXIpIHsKICAgICAgICAgICAgcmV0dXJuIFBST01JU0VfUkVTT0xWRURfVFJVRTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBzdG9wQ3JpdGVyaWEgPSBmYWxzZTsKICAgICAgICAgIHZhciBzdG9wQ3JpdGVyaWFQcm9taXNlUmVzb2x2ZTsKICAgICAgICAgIHZhciBzdG9wQ3JpdGVyaWFQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzKSB7CiAgICAgICAgICAgIHN0b3BDcml0ZXJpYVByb21pc2VSZXNvbHZlID0gZnVuY3Rpb24gc3RvcENyaXRlcmlhUHJvbWlzZVJlc29sdmUyKCkgewogICAgICAgICAgICAgIHN0b3BDcml0ZXJpYSA9IHRydWU7CiAgICAgICAgICAgICAgcmVzKCk7CiAgICAgICAgICAgIH07CiAgICAgICAgICB9KTsKICAgICAgICAgIHZhciBoYW5kbGVNZXNzYWdlID0gZnVuY3Rpb24gaGFuZGxlTWVzc2FnZTIobXNnKSB7CiAgICAgICAgICAgIGlmIChtc2cuY29udGV4dCA9PT0gImxlYWRlciIgJiYgbXNnLnRva2VuICE9IF90aGlzMi50b2tlbikgewogICAgICAgICAgICAgIGlmIChtc2cuYWN0aW9uID09PSAiYXBwbHkiKSB7CiAgICAgICAgICAgICAgICBpZiAobXNnLnRva2VuID4gX3RoaXMyLnRva2VuKSB7CiAgICAgICAgICAgICAgICAgIHN0b3BDcml0ZXJpYVByb21pc2VSZXNvbHZlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChtc2cuYWN0aW9uID09PSAidGVsbCIpIHsKICAgICAgICAgICAgICAgIHN0b3BDcml0ZXJpYVByb21pc2VSZXNvbHZlKCk7CiAgICAgICAgICAgICAgICBfdGhpczIuX2hhc0xlYWRlciA9IHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgX3RoaXMyLmJyb2FkY2FzdENoYW5uZWwuYWRkRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLCBoYW5kbGVNZXNzYWdlKTsKICAgICAgICAgIHZhciB3YWl0Rm9yQW5zd2VyVGltZSA9IGlzRnJvbUZhbGxiYWNrSW50ZXJ2YWwgPyBfdGhpczIuX29wdGlvbnMucmVzcG9uc2VUaW1lICogNCA6IF90aGlzMi5fb3B0aW9ucy5yZXNwb25zZVRpbWU7CiAgICAgICAgICByZXR1cm4gc2VuZExlYWRlck1lc3NhZ2UoX3RoaXMyLCAiYXBwbHkiKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtzbGVlcCh3YWl0Rm9yQW5zd2VyVGltZSksIHN0b3BDcml0ZXJpYVByb21pc2UudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCkpOwogICAgICAgICAgICB9KV0pOwogICAgICAgICAgfSkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbmRMZWFkZXJNZXNzYWdlKF90aGlzMiwgImFwcGx5Iik7CiAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtzbGVlcCh3YWl0Rm9yQW5zd2VyVGltZSksIHN0b3BDcml0ZXJpYVByb21pc2UudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCkpOwogICAgICAgICAgICB9KV0pOwogICAgICAgICAgfSlbImNhdGNoIl0oZnVuY3Rpb24oKSB7CiAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBfdGhpczIuYnJvYWRjYXN0Q2hhbm5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIsIGhhbmRsZU1lc3NhZ2UpOwogICAgICAgICAgICBpZiAoIXN0b3BDcml0ZXJpYSkgewogICAgICAgICAgICAgIHJldHVybiBiZUxlYWRlcihfdGhpczIpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgICAgdGhpcy5fYXBsUUMgPSB0aGlzLl9hcGxRQyArIDE7CiAgICAgICAgdGhpcy5fYXBsUSA9IHRoaXMuX2FwbFEudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBhcHBseVJ1bigpOwogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICBfdGhpczIuX2FwbFFDID0gX3RoaXMyLl9hcGxRQyAtIDE7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHRoaXMuX2FwbFEudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBfdGhpczIuaXNMZWFkZXI7CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIGF3YWl0TGVhZGVyc2hpcDogZnVuY3Rpb24gYXdhaXRMZWFkZXJzaGlwMigpIHsKICAgICAgICBpZiAoCiAgICAgICAgICAvKiBfYXdhaXRMZWFkZXJzaGlwUHJvbWlzZSAqLwogICAgICAgICAgIXRoaXMuX2FMUAogICAgICAgICkgewogICAgICAgICAgdGhpcy5fYUxQID0gX2F3YWl0TGVhZGVyc2hpcE9uY2UodGhpcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9hTFA7CiAgICAgIH0sCiAgICAgIHNldCBvbmR1cGxpY2F0ZShmbikgewogICAgICAgIHRoaXMuX2RwTCA9IGZuOwogICAgICB9LAogICAgICBkaWU6IGZ1bmN0aW9uIGRpZTIoKSB7CiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CiAgICAgICAgdGhpcy5fbHN0bnMuZm9yRWFjaChmdW5jdGlvbihsaXN0ZW5lcjIpIHsKICAgICAgICAgIHJldHVybiBfdGhpczMuYnJvYWRjYXN0Q2hhbm5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIsIGxpc3RlbmVyMik7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5fbHN0bnMgPSBbXTsKICAgICAgICB0aGlzLl91bmwuZm9yRWFjaChmdW5jdGlvbih1Rm4pIHsKICAgICAgICAgIHJldHVybiB1Rm4ucmVtb3ZlKCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5fdW5sID0gW107CiAgICAgICAgaWYgKHRoaXMuaXNMZWFkZXIpIHsKICAgICAgICAgIHRoaXMuX2hhc0xlYWRlciA9IGZhbHNlOwogICAgICAgICAgdGhpcy5pc0xlYWRlciA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICB0aGlzLmlzRGVhZCA9IHRydWU7CiAgICAgICAgcmV0dXJuIHNlbmRMZWFkZXJNZXNzYWdlKHRoaXMsICJkZWF0aCIpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2luZGV4LmpzCnZhciBpbml0X2VzYnJvd3NlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2Jyb2FkY2FzdF9jaGFubmVsKCk7CiAgICBpbml0X2xlYWRlcl9lbGVjdGlvbigpOwogICAgaW5pdF9sZWFkZXJfZWxlY3Rpb25fdXRpbCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jb21tc0AxLjAuMzAvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY29tbXMvZGlzdF90cy9kZWVzLWNvbW1zLnBsdWdpbnMuanMKdmFyIGluaXRfZGVlc19jb21tc19wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jb21tc0AxLjAuMzAvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY29tbXMvZGlzdF90cy9kZWVzLWNvbW1zLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMygpOwogICAgaW5pdF9kaXN0X3RzNCgpOwogICAgaW5pdF9kaXN0X3RzMTUoKTsKICAgIGluaXRfZXNicm93c2VyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNvbW1zQDEuMC4zMC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jb21tcy9kaXN0X3RzL2RlZXMtY29tbXMuY2xhc3Nlcy5kZWVzY29tbXMuanMKdmFyIEJyb2FkY2FzdENoYW5uZWw0LCBEZWVzQ29tbXM7CnZhciBpbml0X2RlZXNfY29tbXNfY2xhc3Nlc19kZWVzY29tbXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNvbW1zQDEuMC4zMC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jb21tcy9kaXN0X3RzL2RlZXMtY29tbXMuY2xhc3Nlcy5kZWVzY29tbXMuanMiKCkgewogICAgaW5pdF9kZWVzX2NvbW1zX3BsdWdpbnMoKTsKICAgIEJyb2FkY2FzdENoYW5uZWw0ID0gZ2xvYmFsVGhpcy5Ccm9hZGNhc3RDaGFubmVsOwogICAgaWYgKCFCcm9hZGNhc3RDaGFubmVsNCkgewogICAgICBCcm9hZGNhc3RDaGFubmVsNCA9IEJyb2FkY2FzdENoYW5uZWwyOwogICAgfQogICAgRGVlc0NvbW1zID0gY2xhc3MgewogICAgICAvLyByZWNlaXZpbmcgbWVzc2FnZXMKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5icm9hZGNhc3RDaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWw0KCJkZWVzLWNvbW1zIik7CiAgICAgICAgdGhpcy50eXBlZHJvdXRlciA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxNS5UeXBlZFJvdXRlcigpOwogICAgICAgIHRoaXMudHlwZWR0YXJnZXQgPSBuZXcgZGlzdF90c19leHBvcnRzMTUuVHlwZWRUYXJnZXQoewogICAgICAgICAgcG9zdE1ldGhvZFdpdGhUeXBlZFJvdXRlcjogYXN5bmMgKG1lc3NhZ2VBcmcpID0+IHsKICAgICAgICAgICAgdGhpcy5wb3N0TWVzc2FnZShtZXNzYWdlQXJnKTsKICAgICAgICAgIH0sCiAgICAgICAgICB0eXBlZFJvdXRlclJlZjogdGhpcy50eXBlZHJvdXRlcgogICAgICAgIH0pOwogICAgICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbC5vbm1lc3NhZ2UgPSBhc3luYyAoZXZlbnRBcmcpID0+IHsKICAgICAgICAgIGNvbnN0IG1lc3NhZ2UyID0gZXZlbnRBcmcubWV0aG9kID8gZXZlbnRBcmcgOiBldmVudEFyZy5kYXRhOwogICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkobWVzc2FnZTIpKTsKICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50eXBlZHJvdXRlci5yb3V0ZUFuZEFkZFJlc3BvbnNlKG1lc3NhZ2UyLCB7IHNraXBIb29rczogdHJ1ZSB9KTsKICAgICAgICAgIGlmIChyZXNwb25zZSAmJiAhcmVzcG9uc2UuZXJyb3IpIHsKICAgICAgICAgICAgdGhpcy5wb3N0TWVzc2FnZShyZXNwb25zZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNyZWF0ZXMgYSB0eXBlZHJlcXVlc3Qgd2l0aCB0aGlzIGNsYXNzZXMgcG9zdE1lc3NhZ2UgYXMgcG9zdE1ldGhvZAogICAgICAgKi8KICAgICAgY3JlYXRlVHlwZWRSZXF1ZXN0KG1ldGhvZE5hbWUpIHsKICAgICAgICBjb25zdCB0eXBlZHJlcXVlc3QgPSBuZXcgZGlzdF90c19leHBvcnRzMTUuVHlwZWRSZXF1ZXN0KHRoaXMudHlwZWR0YXJnZXQsIG1ldGhvZE5hbWUpOwogICAgICAgIHJldHVybiB0eXBlZHJlcXVlc3Q7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHBvc3RzIGEgdHlwZWRyZXF1ZXN0bWVzc2FnZQogICAgICAgKi8KICAgICAgYXN5bmMgcG9zdE1lc3NhZ2UobWVzc2FnZUFyZykgewogICAgICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbC5wb3N0TWVzc2FnZShtZXNzYWdlQXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc3Vic2NyaWJlIHRvIG1lc3NhZ2VzCiAgICAgICAqLwogICAgICBhc3luYyBjcmVhdGVUeXBlZEhhbmRsZXIobWV0aG9kQXJnLCBoYW5kbGVyRnVuY3Rpb24pIHsKICAgICAgICB0aGlzLnR5cGVkcm91dGVyLmFkZFR5cGVkSGFuZGxlcihuZXcgZGlzdF90c19leHBvcnRzMTUuVHlwZWRIYW5kbGVyKG1ldGhvZEFyZywgaGFuZGxlckZ1bmN0aW9uKSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNvbW1zQDEuMC4zMC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jb21tcy9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMxNiA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMxNiwgewogIERlZXNDb21tczogKCkgPT4gRGVlc0NvbW1zCn0pOwp2YXIgaW5pdF9kaXN0X3RzMTYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNvbW1zQDEuMC4zMC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jb21tcy9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVlc19jb21tc19jbGFzc2VzX2RlZXNjb21tcygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvY29tbW9uLmpzCnZhciByZXF1aXJlX2NvbW1vbiA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvY29tbW9uLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIGZ1bmN0aW9uIGlzTm90aGluZyhzdWJqZWN0KSB7CiAgICAgIHJldHVybiB0eXBlb2Ygc3ViamVjdCA9PT0gInVuZGVmaW5lZCIgfHwgc3ViamVjdCA9PT0gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIGlzT2JqZWN0MyhzdWJqZWN0KSB7CiAgICAgIHJldHVybiB0eXBlb2Ygc3ViamVjdCA9PT0gIm9iamVjdCIgJiYgc3ViamVjdCAhPT0gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIHRvQXJyYXkzKHNlcXVlbmNlKSB7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNlcXVlbmNlKSkgcmV0dXJuIHNlcXVlbmNlOwogICAgICBlbHNlIGlmIChpc05vdGhpbmcoc2VxdWVuY2UpKSByZXR1cm4gW107CiAgICAgIHJldHVybiBbc2VxdWVuY2VdOwogICAgfQogICAgZnVuY3Rpb24gZXh0ZW5kMyh0YXJnZXQsIHNvdXJjZSkgewogICAgICB2YXIgaW5kZXgyLCBsZW5ndGgsIGtleTIsIHNvdXJjZUtleXM7CiAgICAgIGlmIChzb3VyY2UpIHsKICAgICAgICBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsKICAgICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IHNvdXJjZUtleXMubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgICBrZXkyID0gc291cmNlS2V5c1tpbmRleDJdOwogICAgICAgICAgdGFyZ2V0W2tleTJdID0gc291cmNlW2tleTJdOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdGFyZ2V0OwogICAgfQogICAgZnVuY3Rpb24gcmVwZWF0MyhzdHJpbmczLCBjb3VudDIpIHsKICAgICAgdmFyIHJlc3VsdCA9ICIiLCBjeWNsZTsKICAgICAgZm9yIChjeWNsZSA9IDA7IGN5Y2xlIDwgY291bnQyOyBjeWNsZSArPSAxKSB7CiAgICAgICAgcmVzdWx0ICs9IHN0cmluZzM7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTmVnYXRpdmVaZXJvKG51bWJlcjIpIHsKICAgICAgcmV0dXJuIG51bWJlcjIgPT09IDAgJiYgTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZID09PSAxIC8gbnVtYmVyMjsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzLmlzTm90aGluZyA9IGlzTm90aGluZzsKICAgIG1vZHVsZS5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3QzOwogICAgbW9kdWxlLmV4cG9ydHMudG9BcnJheSA9IHRvQXJyYXkzOwogICAgbW9kdWxlLmV4cG9ydHMucmVwZWF0ID0gcmVwZWF0MzsKICAgIG1vZHVsZS5leHBvcnRzLmlzTmVnYXRpdmVaZXJvID0gaXNOZWdhdGl2ZVplcm87CiAgICBtb2R1bGUuZXhwb3J0cy5leHRlbmQgPSBleHRlbmQzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvZXhjZXB0aW9uLmpzCnZhciByZXF1aXJlX2V4Y2VwdGlvbiA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvZXhjZXB0aW9uLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIGZ1bmN0aW9uIFlBTUxFeGNlcHRpb24ocmVhc29uLCBtYXJrMikgewogICAgICBFcnJvci5jYWxsKHRoaXMpOwogICAgICB0aGlzLm5hbWUgPSAiWUFNTEV4Y2VwdGlvbiI7CiAgICAgIHRoaXMucmVhc29uID0gcmVhc29uOwogICAgICB0aGlzLm1hcmsgPSBtYXJrMjsKICAgICAgdGhpcy5tZXNzYWdlID0gKHRoaXMucmVhc29uIHx8ICIodW5rbm93biByZWFzb24pIikgKyAodGhpcy5tYXJrID8gIiAiICsgdGhpcy5tYXJrLnRvU3RyaW5nKCkgOiAiIik7CiAgICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgewogICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjayB8fCAiIjsKICAgICAgfQogICAgfQogICAgWUFNTEV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7CiAgICBZQU1MRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFlBTUxFeGNlcHRpb247CiAgICBZQU1MRXhjZXB0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nMyhjb21wYWN0KSB7CiAgICAgIHZhciByZXN1bHQgPSB0aGlzLm5hbWUgKyAiOiAiOwogICAgICByZXN1bHQgKz0gdGhpcy5yZWFzb24gfHwgIih1bmtub3duIHJlYXNvbikiOwogICAgICBpZiAoIWNvbXBhY3QgJiYgdGhpcy5tYXJrKSB7CiAgICAgICAgcmVzdWx0ICs9ICIgIiArIHRoaXMubWFyay50b1N0cmluZygpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwogICAgbW9kdWxlLmV4cG9ydHMgPSBZQU1MRXhjZXB0aW9uOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvbWFyay5qcwp2YXIgcmVxdWlyZV9tYXJrID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9tYXJrLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBjb21tb24gPSByZXF1aXJlX2NvbW1vbigpOwogICAgZnVuY3Rpb24gTWFyayhuYW1lLCBidWZmZXIyLCBwb3NpdGlvbjMsIGxpbmUsIGNvbHVtbikgewogICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjI7CiAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjM7CiAgICAgIHRoaXMubGluZSA9IGxpbmU7CiAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uOwogICAgfQogICAgTWFyay5wcm90b3R5cGUuZ2V0U25pcHBldCA9IGZ1bmN0aW9uIGdldFNuaXBwZXQoaW5kZW50MywgbWF4TGVuZ3RoKSB7CiAgICAgIHZhciBoZWFkMiwgc3RhcnQsIHRhaWwsIGVuZDMsIHNuaXBwZXQ7CiAgICAgIGlmICghdGhpcy5idWZmZXIpIHJldHVybiBudWxsOwogICAgICBpbmRlbnQzID0gaW5kZW50MyB8fCA0OwogICAgICBtYXhMZW5ndGggPSBtYXhMZW5ndGggfHwgNzU7CiAgICAgIGhlYWQyID0gIiI7CiAgICAgIHN0YXJ0ID0gdGhpcy5wb3NpdGlvbjsKICAgICAgd2hpbGUgKHN0YXJ0ID4gMCAmJiAiXDBcclxuXHg4NVx1MjAyOFx1MjAyOSIuaW5kZXhPZih0aGlzLmJ1ZmZlci5jaGFyQXQoc3RhcnQgLSAxKSkgPT09IC0xKSB7CiAgICAgICAgc3RhcnQgLT0gMTsKICAgICAgICBpZiAodGhpcy5wb3NpdGlvbiAtIHN0YXJ0ID4gbWF4TGVuZ3RoIC8gMiAtIDEpIHsKICAgICAgICAgIGhlYWQyID0gIiAuLi4gIjsKICAgICAgICAgIHN0YXJ0ICs9IDU7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGFpbCA9ICIiOwogICAgICBlbmQzID0gdGhpcy5wb3NpdGlvbjsKICAgICAgd2hpbGUgKGVuZDMgPCB0aGlzLmJ1ZmZlci5sZW5ndGggJiYgIlwwXHJcblx4ODVcdTIwMjhcdTIwMjkiLmluZGV4T2YodGhpcy5idWZmZXIuY2hhckF0KGVuZDMpKSA9PT0gLTEpIHsKICAgICAgICBlbmQzICs9IDE7CiAgICAgICAgaWYgKGVuZDMgLSB0aGlzLnBvc2l0aW9uID4gbWF4TGVuZ3RoIC8gMiAtIDEpIHsKICAgICAgICAgIHRhaWwgPSAiIC4uLiAiOwogICAgICAgICAgZW5kMyAtPSA1OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNuaXBwZXQgPSB0aGlzLmJ1ZmZlci5zbGljZShzdGFydCwgZW5kMyk7CiAgICAgIHJldHVybiBjb21tb24ucmVwZWF0KCIgIiwgaW5kZW50MykgKyBoZWFkMiArIHNuaXBwZXQgKyB0YWlsICsgIlxuIiArIGNvbW1vbi5yZXBlYXQoIiAiLCBpbmRlbnQzICsgdGhpcy5wb3NpdGlvbiAtIHN0YXJ0ICsgaGVhZDIubGVuZ3RoKSArICJeIjsKICAgIH07CiAgICBNYXJrLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nMyhjb21wYWN0KSB7CiAgICAgIHZhciBzbmlwcGV0LCB3aGVyZSA9ICIiOwogICAgICBpZiAodGhpcy5uYW1lKSB7CiAgICAgICAgd2hlcmUgKz0gJ2luICInICsgdGhpcy5uYW1lICsgJyIgJzsKICAgICAgfQogICAgICB3aGVyZSArPSAiYXQgbGluZSAiICsgKHRoaXMubGluZSArIDEpICsgIiwgY29sdW1uICIgKyAodGhpcy5jb2x1bW4gKyAxKTsKICAgICAgaWYgKCFjb21wYWN0KSB7CiAgICAgICAgc25pcHBldCA9IHRoaXMuZ2V0U25pcHBldCgpOwogICAgICAgIGlmIChzbmlwcGV0KSB7CiAgICAgICAgICB3aGVyZSArPSAiOlxuIiArIHNuaXBwZXQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB3aGVyZTsKICAgIH07CiAgICBtb2R1bGUuZXhwb3J0cyA9IE1hcms7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlLmpzCnZhciByZXF1aXJlX3R5cGUgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFlBTUxFeGNlcHRpb24gPSByZXF1aXJlX2V4Y2VwdGlvbigpOwogICAgdmFyIFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUyA9IFsKICAgICAgImtpbmQiLAogICAgICAicmVzb2x2ZSIsCiAgICAgICJjb25zdHJ1Y3QiLAogICAgICAiaW5zdGFuY2VPZiIsCiAgICAgICJwcmVkaWNhdGUiLAogICAgICAicmVwcmVzZW50IiwKICAgICAgImRlZmF1bHRTdHlsZSIsCiAgICAgICJzdHlsZUFsaWFzZXMiCiAgICBdOwogICAgdmFyIFlBTUxfTk9ERV9LSU5EUyA9IFsKICAgICAgInNjYWxhciIsCiAgICAgICJzZXF1ZW5jZSIsCiAgICAgICJtYXBwaW5nIgogICAgXTsKICAgIGZ1bmN0aW9uIGNvbXBpbGVTdHlsZUFsaWFzZXMobWFwNykgewogICAgICB2YXIgcmVzdWx0ID0ge307CiAgICAgIGlmIChtYXA3ICE9PSBudWxsKSB7CiAgICAgICAgT2JqZWN0LmtleXMobWFwNykuZm9yRWFjaChmdW5jdGlvbihzdHlsZSkgewogICAgICAgICAgbWFwN1tzdHlsZV0uZm9yRWFjaChmdW5jdGlvbihhbGlhcykgewogICAgICAgICAgICByZXN1bHRbU3RyaW5nKGFsaWFzKV0gPSBzdHlsZTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBUeXBlKHRhZywgb3B0aW9ucykgewogICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgaWYgKFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUy5pbmRleE9mKG5hbWUpID09PSAtMSkgewogICAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1Vua25vd24gb3B0aW9uICInICsgbmFtZSArICciIGlzIG1ldCBpbiBkZWZpbml0aW9uIG9mICInICsgdGFnICsgJyIgWUFNTCB0eXBlLicpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMudGFnID0gdGFnOwogICAgICB0aGlzLmtpbmQgPSBvcHRpb25zWyJraW5kIl0gfHwgbnVsbDsKICAgICAgdGhpcy5yZXNvbHZlID0gb3B0aW9uc1sicmVzb2x2ZSJdIHx8IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9OwogICAgICB0aGlzLmNvbnN0cnVjdCA9IG9wdGlvbnNbImNvbnN0cnVjdCJdIHx8IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICByZXR1cm4gZGF0YTsKICAgICAgfTsKICAgICAgdGhpcy5pbnN0YW5jZU9mID0gb3B0aW9uc1siaW5zdGFuY2VPZiJdIHx8IG51bGw7CiAgICAgIHRoaXMucHJlZGljYXRlID0gb3B0aW9uc1sicHJlZGljYXRlIl0gfHwgbnVsbDsKICAgICAgdGhpcy5yZXByZXNlbnQgPSBvcHRpb25zWyJyZXByZXNlbnQiXSB8fCBudWxsOwogICAgICB0aGlzLmRlZmF1bHRTdHlsZSA9IG9wdGlvbnNbImRlZmF1bHRTdHlsZSJdIHx8IG51bGw7CiAgICAgIHRoaXMuc3R5bGVBbGlhc2VzID0gY29tcGlsZVN0eWxlQWxpYXNlcyhvcHRpb25zWyJzdHlsZUFsaWFzZXMiXSB8fCBudWxsKTsKICAgICAgaWYgKFlBTUxfTk9ERV9LSU5EUy5pbmRleE9mKHRoaXMua2luZCkgPT09IC0xKSB7CiAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1Vua25vd24ga2luZCAiJyArIHRoaXMua2luZCArICciIGlzIHNwZWNpZmllZCBmb3IgIicgKyB0YWcgKyAnIiBZQU1MIHR5cGUuJyk7CiAgICAgIH0KICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gVHlwZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS5qcwp2YXIgcmVxdWlyZV9zY2hlbWEgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgY29tbW9uID0gcmVxdWlyZV9jb21tb24oKTsKICAgIHZhciBZQU1MRXhjZXB0aW9uID0gcmVxdWlyZV9leGNlcHRpb24oKTsKICAgIHZhciBUeXBlID0gcmVxdWlyZV90eXBlKCk7CiAgICBmdW5jdGlvbiBjb21waWxlTGlzdChzY2hlbWEsIG5hbWUsIHJlc3VsdCkgewogICAgICB2YXIgZXhjbHVkZSA9IFtdOwogICAgICBzY2hlbWEuaW5jbHVkZS5mb3JFYWNoKGZ1bmN0aW9uKGluY2x1ZGVkU2NoZW1hKSB7CiAgICAgICAgcmVzdWx0ID0gY29tcGlsZUxpc3QoaW5jbHVkZWRTY2hlbWEsIG5hbWUsIHJlc3VsdCk7CiAgICAgIH0pOwogICAgICBzY2hlbWFbbmFtZV0uZm9yRWFjaChmdW5jdGlvbihjdXJyZW50VHlwZSkgewogICAgICAgIHJlc3VsdC5mb3JFYWNoKGZ1bmN0aW9uKHByZXZpb3VzVHlwZSwgcHJldmlvdXNJbmRleCkgewogICAgICAgICAgaWYgKHByZXZpb3VzVHlwZS50YWcgPT09IGN1cnJlbnRUeXBlLnRhZyAmJiBwcmV2aW91c1R5cGUua2luZCA9PT0gY3VycmVudFR5cGUua2luZCkgewogICAgICAgICAgICBleGNsdWRlLnB1c2gocHJldmlvdXNJbmRleCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmVzdWx0LnB1c2goY3VycmVudFR5cGUpOwogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdC5maWx0ZXIoZnVuY3Rpb24odHlwZTUsIGluZGV4MikgewogICAgICAgIHJldHVybiBleGNsdWRlLmluZGV4T2YoaW5kZXgyKSA9PT0gLTE7CiAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gY29tcGlsZU1hcCgpIHsKICAgICAgdmFyIHJlc3VsdCA9IHsKICAgICAgICBzY2FsYXI6IHt9LAogICAgICAgIHNlcXVlbmNlOiB7fSwKICAgICAgICBtYXBwaW5nOiB7fSwKICAgICAgICBmYWxsYmFjazoge30KICAgICAgfSwgaW5kZXgyLCBsZW5ndGg7CiAgICAgIGZ1bmN0aW9uIGNvbGxlY3RUeXBlKHR5cGU1KSB7CiAgICAgICAgcmVzdWx0W3R5cGU1LmtpbmRdW3R5cGU1LnRhZ10gPSByZXN1bHRbImZhbGxiYWNrIl1bdHlwZTUudGFnXSA9IHR5cGU1OwogICAgICB9CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIGFyZ3VtZW50c1tpbmRleDJdLmZvckVhY2goY29sbGVjdFR5cGUpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBTY2hlbWEyKGRlZmluaXRpb24zKSB7CiAgICAgIHRoaXMuaW5jbHVkZSA9IGRlZmluaXRpb24zLmluY2x1ZGUgfHwgW107CiAgICAgIHRoaXMuaW1wbGljaXQgPSBkZWZpbml0aW9uMy5pbXBsaWNpdCB8fCBbXTsKICAgICAgdGhpcy5leHBsaWNpdCA9IGRlZmluaXRpb24zLmV4cGxpY2l0IHx8IFtdOwogICAgICB0aGlzLmltcGxpY2l0LmZvckVhY2goZnVuY3Rpb24odHlwZTUpIHsKICAgICAgICBpZiAodHlwZTUubG9hZEtpbmQgJiYgdHlwZTUubG9hZEtpbmQgIT09ICJzY2FsYXIiKSB7CiAgICAgICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbigiVGhlcmUgaXMgYSBub24tc2NhbGFyIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIEltcGxpY2l0IHJlc29sdmluZyBvZiBzdWNoIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQuIik7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5jb21waWxlZEltcGxpY2l0ID0gY29tcGlsZUxpc3QodGhpcywgImltcGxpY2l0IiwgW10pOwogICAgICB0aGlzLmNvbXBpbGVkRXhwbGljaXQgPSBjb21waWxlTGlzdCh0aGlzLCAiZXhwbGljaXQiLCBbXSk7CiAgICAgIHRoaXMuY29tcGlsZWRUeXBlTWFwID0gY29tcGlsZU1hcCh0aGlzLmNvbXBpbGVkSW1wbGljaXQsIHRoaXMuY29tcGlsZWRFeHBsaWNpdCk7CiAgICB9CiAgICBTY2hlbWEyLkRFRkFVTFQgPSBudWxsOwogICAgU2NoZW1hMi5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGVTY2hlbWEoKSB7CiAgICAgIHZhciBzY2hlbWFzLCB0eXBlczsKICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgc2NoZW1hcyA9IFNjaGVtYTIuREVGQVVMVDsKICAgICAgICAgIHR5cGVzID0gYXJndW1lbnRzWzBdOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAyOgogICAgICAgICAgc2NoZW1hcyA9IGFyZ3VtZW50c1swXTsKICAgICAgICAgIHR5cGVzID0gYXJndW1lbnRzWzFdOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBTY2hlbWEuY3JlYXRlIGZ1bmN0aW9uIik7CiAgICAgIH0KICAgICAgc2NoZW1hcyA9IGNvbW1vbi50b0FycmF5KHNjaGVtYXMpOwogICAgICB0eXBlcyA9IGNvbW1vbi50b0FycmF5KHR5cGVzKTsKICAgICAgaWYgKCFzY2hlbWFzLmV2ZXJ5KGZ1bmN0aW9uKHNjaGVtYSkgewogICAgICAgIHJldHVybiBzY2hlbWEgaW5zdGFuY2VvZiBTY2hlbWEyOwogICAgICB9KSkgewogICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJTcGVjaWZpZWQgbGlzdCBvZiBzdXBlciBzY2hlbWFzIChvciBhIHNpbmdsZSBTY2hlbWEgb2JqZWN0KSBjb250YWlucyBhIG5vbi1TY2hlbWEgb2JqZWN0LiIpOwogICAgICB9CiAgICAgIGlmICghdHlwZXMuZXZlcnkoZnVuY3Rpb24odHlwZTUpIHsKICAgICAgICByZXR1cm4gdHlwZTUgaW5zdGFuY2VvZiBUeXBlOwogICAgICB9KSkgewogICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuIik7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBTY2hlbWEyKHsKICAgICAgICBpbmNsdWRlOiBzY2hlbWFzLAogICAgICAgIGV4cGxpY2l0OiB0eXBlcwogICAgICB9KTsKICAgIH07CiAgICBtb2R1bGUuZXhwb3J0cyA9IFNjaGVtYTI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3N0ci5qcwp2YXIgcmVxdWlyZV9zdHIgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc3RyLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlID0gcmVxdWlyZV90eXBlKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpzdHIiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiAiIjsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3NlcS5qcwp2YXIgcmVxdWlyZV9zZXEgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc2VxLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlID0gcmVxdWlyZV90eXBlKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXEiLCB7CiAgICAgIGtpbmQ6ICJzZXF1ZW5jZSIsCiAgICAgIGNvbnN0cnVjdDogZnVuY3Rpb24oZGF0YSkgewogICAgICAgIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IFtdOwogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbWFwLmpzCnZhciByZXF1aXJlX21hcCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9tYXAuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOm1hcCIsIHsKICAgICAga2luZDogIm1hcHBpbmciLAogICAgICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiB7fTsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZmFpbHNhZmUuanMKdmFyIHJlcXVpcmVfZmFpbHNhZmUgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9mYWlsc2FmZS5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgU2NoZW1hMiA9IHJlcXVpcmVfc2NoZW1hKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEyKHsKICAgICAgZXhwbGljaXQ6IFsKICAgICAgICByZXF1aXJlX3N0cigpLAogICAgICAgIHJlcXVpcmVfc2VxKCksCiAgICAgICAgcmVxdWlyZV9tYXAoKQogICAgICBdCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbnVsbC5qcwp2YXIgcmVxdWlyZV9udWxsID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL251bGwuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIGZ1bmN0aW9uIHJlc29sdmVZYW1sTnVsbChkYXRhKSB7CiAgICAgIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgdmFyIG1heDMgPSBkYXRhLmxlbmd0aDsKICAgICAgcmV0dXJuIG1heDMgPT09IDEgJiYgZGF0YSA9PT0gIn4iIHx8IG1heDMgPT09IDQgJiYgKGRhdGEgPT09ICJudWxsIiB8fCBkYXRhID09PSAiTnVsbCIgfHwgZGF0YSA9PT0gIk5VTEwiKTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxOdWxsKCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTnVsbChvYmplY3QpIHsKICAgICAgcmV0dXJuIG9iamVjdCA9PT0gbnVsbDsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOm51bGwiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlWWFtbE51bGwsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE51bGwsCiAgICAgIHByZWRpY2F0ZTogaXNOdWxsLAogICAgICByZXByZXNlbnQ6IHsKICAgICAgICBjYW5vbmljYWw6IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuICJ+IjsKICAgICAgICB9LAogICAgICAgIGxvd2VyY2FzZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gIm51bGwiOwogICAgICAgIH0sCiAgICAgICAgdXBwZXJjYXNlOiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiAiTlVMTCI7CiAgICAgICAgfSwKICAgICAgICBjYW1lbGNhc2U6IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuICJOdWxsIjsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlZmF1bHRTdHlsZTogImxvd2VyY2FzZSIKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9ib29sLmpzCnZhciByZXF1aXJlX2Jvb2wgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYm9vbC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVHlwZSA9IHJlcXVpcmVfdHlwZSgpOwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxCb29sZWFuKGRhdGEpIHsKICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgdmFyIG1heDMgPSBkYXRhLmxlbmd0aDsKICAgICAgcmV0dXJuIG1heDMgPT09IDQgJiYgKGRhdGEgPT09ICJ0cnVlIiB8fCBkYXRhID09PSAiVHJ1ZSIgfHwgZGF0YSA9PT0gIlRSVUUiKSB8fCBtYXgzID09PSA1ICYmIChkYXRhID09PSAiZmFsc2UiIHx8IGRhdGEgPT09ICJGYWxzZSIgfHwgZGF0YSA9PT0gIkZBTFNFIik7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sQm9vbGVhbihkYXRhKSB7CiAgICAgIHJldHVybiBkYXRhID09PSAidHJ1ZSIgfHwgZGF0YSA9PT0gIlRydWUiIHx8IGRhdGEgPT09ICJUUlVFIjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzQm9vbGVhbihvYmplY3QpIHsKICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAiW29iamVjdCBCb29sZWFuXSI7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpib29sIiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxCb29sZWFuLAogICAgICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxCb29sZWFuLAogICAgICBwcmVkaWNhdGU6IGlzQm9vbGVhbiwKICAgICAgcmVwcmVzZW50OiB7CiAgICAgICAgbG93ZXJjYXNlOiBmdW5jdGlvbihvYmplY3QpIHsKICAgICAgICAgIHJldHVybiBvYmplY3QgPyAidHJ1ZSIgOiAiZmFsc2UiOwogICAgICAgIH0sCiAgICAgICAgdXBwZXJjYXNlOiBmdW5jdGlvbihvYmplY3QpIHsKICAgICAgICAgIHJldHVybiBvYmplY3QgPyAiVFJVRSIgOiAiRkFMU0UiOwogICAgICAgIH0sCiAgICAgICAgY2FtZWxjYXNlOiBmdW5jdGlvbihvYmplY3QpIHsKICAgICAgICAgIHJldHVybiBvYmplY3QgPyAiVHJ1ZSIgOiAiRmFsc2UiOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZGVmYXVsdFN0eWxlOiAibG93ZXJjYXNlIgogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2ludC5qcwp2YXIgcmVxdWlyZV9pbnQgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvaW50LmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBjb21tb24gPSByZXF1aXJlX2NvbW1vbigpOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIGZ1bmN0aW9uIGlzSGV4Q29kZShjMTEpIHsKICAgICAgcmV0dXJuIDQ4IDw9IGMxMSAmJiBjMTEgPD0gNTcgfHwgNjUgPD0gYzExICYmIGMxMSA8PSA3MCB8fCA5NyA8PSBjMTEgJiYgYzExIDw9IDEwMjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzT2N0Q29kZShjMTEpIHsKICAgICAgcmV0dXJuIDQ4IDw9IGMxMSAmJiBjMTEgPD0gNTU7CiAgICB9CiAgICBmdW5jdGlvbiBpc0RlY0NvZGUoYzExKSB7CiAgICAgIHJldHVybiA0OCA8PSBjMTEgJiYgYzExIDw9IDU3OwogICAgfQogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxJbnRlZ2VyKGRhdGEpIHsKICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgdmFyIG1heDMgPSBkYXRhLmxlbmd0aCwgaW5kZXgyID0gMCwgaGFzRGlnaXRzID0gZmFsc2UsIGNoOwogICAgICBpZiAoIW1heDMpIHJldHVybiBmYWxzZTsKICAgICAgY2ggPSBkYXRhW2luZGV4Ml07CiAgICAgIGlmIChjaCA9PT0gIi0iIHx8IGNoID09PSAiKyIpIHsKICAgICAgICBjaCA9IGRhdGFbKytpbmRleDJdOwogICAgICB9CiAgICAgIGlmIChjaCA9PT0gIjAiKSB7CiAgICAgICAgaWYgKGluZGV4MiArIDEgPT09IG1heDMpIHJldHVybiB0cnVlOwogICAgICAgIGNoID0gZGF0YVsrK2luZGV4Ml07CiAgICAgICAgaWYgKGNoID09PSAiYiIpIHsKICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgZm9yICg7IGluZGV4MiA8IG1heDM7IGluZGV4MisrKSB7CiAgICAgICAgICAgIGNoID0gZGF0YVtpbmRleDJdOwogICAgICAgICAgICBpZiAoY2ggPT09ICJfIikgY29udGludWU7CiAgICAgICAgICAgIGlmIChjaCAhPT0gIjAiICYmIGNoICE9PSAiMSIpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBoYXNEaWdpdHMgJiYgY2ggIT09ICJfIjsKICAgICAgICB9CiAgICAgICAgaWYgKGNoID09PSAieCIpIHsKICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgZm9yICg7IGluZGV4MiA8IG1heDM7IGluZGV4MisrKSB7CiAgICAgICAgICAgIGNoID0gZGF0YVtpbmRleDJdOwogICAgICAgICAgICBpZiAoY2ggPT09ICJfIikgY29udGludWU7CiAgICAgICAgICAgIGlmICghaXNIZXhDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleDIpKSkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICBoYXNEaWdpdHMgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gIl8iOwogICAgICAgIH0KICAgICAgICBmb3IgKDsgaW5kZXgyIDwgbWF4MzsgaW5kZXgyKyspIHsKICAgICAgICAgIGNoID0gZGF0YVtpbmRleDJdOwogICAgICAgICAgaWYgKGNoID09PSAiXyIpIGNvbnRpbnVlOwogICAgICAgICAgaWYgKCFpc09jdENvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4MikpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICBoYXNEaWdpdHMgPSB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaGFzRGlnaXRzICYmIGNoICE9PSAiXyI7CiAgICAgIH0KICAgICAgaWYgKGNoID09PSAiXyIpIHJldHVybiBmYWxzZTsKICAgICAgZm9yICg7IGluZGV4MiA8IG1heDM7IGluZGV4MisrKSB7CiAgICAgICAgY2ggPSBkYXRhW2luZGV4Ml07CiAgICAgICAgaWYgKGNoID09PSAiXyIpIGNvbnRpbnVlOwogICAgICAgIGlmIChjaCA9PT0gIjoiKSBicmVhazsKICAgICAgICBpZiAoIWlzRGVjQ29kZShkYXRhLmNoYXJDb2RlQXQoaW5kZXgyKSkpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoIWhhc0RpZ2l0cyB8fCBjaCA9PT0gIl8iKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChjaCAhPT0gIjoiKSByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIC9eKDpbMC01XT9bMC05XSkrJC8udGVzdChkYXRhLnNsaWNlKGluZGV4MikpOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbEludGVnZXIoZGF0YSkgewogICAgICB2YXIgdmFsdWUyID0gZGF0YSwgc2lnbiA9IDEsIGNoLCBiYXNlLCBkaWdpdHMgPSBbXTsKICAgICAgaWYgKHZhbHVlMi5pbmRleE9mKCJfIikgIT09IC0xKSB7CiAgICAgICAgdmFsdWUyID0gdmFsdWUyLnJlcGxhY2UoL18vZywgIiIpOwogICAgICB9CiAgICAgIGNoID0gdmFsdWUyWzBdOwogICAgICBpZiAoY2ggPT09ICItIiB8fCBjaCA9PT0gIisiKSB7CiAgICAgICAgaWYgKGNoID09PSAiLSIpIHNpZ24gPSAtMTsKICAgICAgICB2YWx1ZTIgPSB2YWx1ZTIuc2xpY2UoMSk7CiAgICAgICAgY2ggPSB2YWx1ZTJbMF07CiAgICAgIH0KICAgICAgaWYgKHZhbHVlMiA9PT0gIjAiKSByZXR1cm4gMDsKICAgICAgaWYgKGNoID09PSAiMCIpIHsKICAgICAgICBpZiAodmFsdWUyWzFdID09PSAiYiIpIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUyLnNsaWNlKDIpLCAyKTsKICAgICAgICBpZiAodmFsdWUyWzFdID09PSAieCIpIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUyLCAxNik7CiAgICAgICAgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZTIsIDgpOwogICAgICB9CiAgICAgIGlmICh2YWx1ZTIuaW5kZXhPZigiOiIpICE9PSAtMSkgewogICAgICAgIHZhbHVlMi5zcGxpdCgiOiIpLmZvckVhY2goZnVuY3Rpb24odjUpIHsKICAgICAgICAgIGRpZ2l0cy51bnNoaWZ0KHBhcnNlSW50KHY1LCAxMCkpOwogICAgICAgIH0pOwogICAgICAgIHZhbHVlMiA9IDA7CiAgICAgICAgYmFzZSA9IDE7CiAgICAgICAgZGlnaXRzLmZvckVhY2goZnVuY3Rpb24oZDYpIHsKICAgICAgICAgIHZhbHVlMiArPSBkNiAqIGJhc2U7CiAgICAgICAgICBiYXNlICo9IDYwOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBzaWduICogdmFsdWUyOwogICAgICB9CiAgICAgIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUyLCAxMCk7CiAgICB9CiAgICBmdW5jdGlvbiBpc0ludGVnZXIob2JqZWN0KSB7CiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gIltvYmplY3QgTnVtYmVyXSIgJiYgKG9iamVjdCAlIDEgPT09IDAgJiYgIWNvbW1vbi5pc05lZ2F0aXZlWmVybyhvYmplY3QpKTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOmludCIsIHsKICAgICAga2luZDogInNjYWxhciIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sSW50ZWdlciwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sSW50ZWdlciwKICAgICAgcHJlZGljYXRlOiBpc0ludGVnZXIsCiAgICAgIHJlcHJlc2VudDogewogICAgICAgIGJpbmFyeTogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICByZXR1cm4gb2JqID49IDAgPyAiMGIiICsgb2JqLnRvU3RyaW5nKDIpIDogIi0wYiIgKyBvYmoudG9TdHJpbmcoMikuc2xpY2UoMSk7CiAgICAgICAgfSwKICAgICAgICBvY3RhbDogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICByZXR1cm4gb2JqID49IDAgPyAiMCIgKyBvYmoudG9TdHJpbmcoOCkgOiAiLTAiICsgb2JqLnRvU3RyaW5nKDgpLnNsaWNlKDEpOwogICAgICAgIH0sCiAgICAgICAgZGVjaW1hbDogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICByZXR1cm4gb2JqLnRvU3RyaW5nKDEwKTsKICAgICAgICB9LAogICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi8KICAgICAgICBoZXhhZGVjaW1hbDogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICByZXR1cm4gb2JqID49IDAgPyAiMHgiICsgb2JqLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpIDogIi0weCIgKyBvYmoudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBkZWZhdWx0U3R5bGU6ICJkZWNpbWFsIiwKICAgICAgc3R5bGVBbGlhc2VzOiB7CiAgICAgICAgYmluYXJ5OiBbMiwgImJpbiJdLAogICAgICAgIG9jdGFsOiBbOCwgIm9jdCJdLAogICAgICAgIGRlY2ltYWw6IFsxMCwgImRlYyJdLAogICAgICAgIGhleGFkZWNpbWFsOiBbMTYsICJoZXgiXQogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvZmxvYXQuanMKdmFyIHJlcXVpcmVfZmxvYXQgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvZmxvYXQuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGNvbW1vbiA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICB2YXIgVHlwZSA9IHJlcXVpcmVfdHlwZSgpOwogICAgdmFyIFlBTUxfRkxPQVRfUEFUVEVSTiA9IG5ldyBSZWdFeHAoCiAgICAgIC8vIDIuNWU0LCAyLjUgYW5kIGludGVnZXJzCiAgICAgICJeKD86Wy0rXT8oPzowfFsxLTldWzAtOV9dKikoPzpcXC5bMC05X10qKT8oPzpbZUVdWy0rXT9bMC05XSspP3xcXC5bMC05X10rKD86W2VFXVstK10/WzAtOV0rKT98Wy0rXT9bMC05XVswLTlfXSooPzo6WzAtNV0/WzAtOV0pK1xcLlswLTlfXSp8Wy0rXT9cXC4oPzppbmZ8SW5mfElORil8XFwuKD86bmFufE5hTnxOQU4pKSQiCiAgICApOwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxGbG9hdChkYXRhKSB7CiAgICAgIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmICghWUFNTF9GTE9BVF9QQVRURVJOLnRlc3QoZGF0YSkgfHwgLy8gUXVpY2sgaGFjayB0byBub3QgYWxsb3cgaW50ZWdlcnMgZW5kIHdpdGggYF9gCiAgICAgIC8vIFByb2JhYmx5IHNob3VsZCB1cGRhdGUgcmVnZXhwICYgY2hlY2sgc3BlZWQKICAgICAgZGF0YVtkYXRhLmxlbmd0aCAtIDFdID09PSAiXyIpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sRmxvYXQoZGF0YSkgewogICAgICB2YXIgdmFsdWUyLCBzaWduLCBiYXNlLCBkaWdpdHM7CiAgICAgIHZhbHVlMiA9IGRhdGEucmVwbGFjZSgvXy9nLCAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgc2lnbiA9IHZhbHVlMlswXSA9PT0gIi0iID8gLTEgOiAxOwogICAgICBkaWdpdHMgPSBbXTsKICAgICAgaWYgKCIrLSIuaW5kZXhPZih2YWx1ZTJbMF0pID49IDApIHsKICAgICAgICB2YWx1ZTIgPSB2YWx1ZTIuc2xpY2UoMSk7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlMiA9PT0gIi5pbmYiKSB7CiAgICAgICAgcmV0dXJuIHNpZ24gPT09IDEgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7CiAgICAgIH0gZWxzZSBpZiAodmFsdWUyID09PSAiLm5hbiIpIHsKICAgICAgICByZXR1cm4gTmFOOwogICAgICB9IGVsc2UgaWYgKHZhbHVlMi5pbmRleE9mKCI6IikgPj0gMCkgewogICAgICAgIHZhbHVlMi5zcGxpdCgiOiIpLmZvckVhY2goZnVuY3Rpb24odjUpIHsKICAgICAgICAgIGRpZ2l0cy51bnNoaWZ0KHBhcnNlRmxvYXQodjUsIDEwKSk7CiAgICAgICAgfSk7CiAgICAgICAgdmFsdWUyID0gMDsKICAgICAgICBiYXNlID0gMTsKICAgICAgICBkaWdpdHMuZm9yRWFjaChmdW5jdGlvbihkNikgewogICAgICAgICAgdmFsdWUyICs9IGQ2ICogYmFzZTsKICAgICAgICAgIGJhc2UgKj0gNjA7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHNpZ24gKiB2YWx1ZTI7CiAgICAgIH0KICAgICAgcmV0dXJuIHNpZ24gKiBwYXJzZUZsb2F0KHZhbHVlMiwgMTApOwogICAgfQogICAgdmFyIFNDSUVOVElGSUNfV0lUSE9VVF9ET1QgPSAvXlstK10/WzAtOV0rZS87CiAgICBmdW5jdGlvbiByZXByZXNlbnRZYW1sRmxvYXQob2JqZWN0LCBzdHlsZSkgewogICAgICB2YXIgcmVzOwogICAgICBpZiAoaXNOYU4ob2JqZWN0KSkgewogICAgICAgIHN3aXRjaCAoc3R5bGUpIHsKICAgICAgICAgIGNhc2UgImxvd2VyY2FzZSI6CiAgICAgICAgICAgIHJldHVybiAiLm5hbiI7CiAgICAgICAgICBjYXNlICJ1cHBlcmNhc2UiOgogICAgICAgICAgICByZXR1cm4gIi5OQU4iOwogICAgICAgICAgY2FzZSAiY2FtZWxjYXNlIjoKICAgICAgICAgICAgcmV0dXJuICIuTmFOIjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZID09PSBvYmplY3QpIHsKICAgICAgICBzd2l0Y2ggKHN0eWxlKSB7CiAgICAgICAgICBjYXNlICJsb3dlcmNhc2UiOgogICAgICAgICAgICByZXR1cm4gIi5pbmYiOwogICAgICAgICAgY2FzZSAidXBwZXJjYXNlIjoKICAgICAgICAgICAgcmV0dXJuICIuSU5GIjsKICAgICAgICAgIGNhc2UgImNhbWVsY2FzZSI6CiAgICAgICAgICAgIHJldHVybiAiLkluZiI7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSA9PT0gb2JqZWN0KSB7CiAgICAgICAgc3dpdGNoIChzdHlsZSkgewogICAgICAgICAgY2FzZSAibG93ZXJjYXNlIjoKICAgICAgICAgICAgcmV0dXJuICItLmluZiI7CiAgICAgICAgICBjYXNlICJ1cHBlcmNhc2UiOgogICAgICAgICAgICByZXR1cm4gIi0uSU5GIjsKICAgICAgICAgIGNhc2UgImNhbWVsY2FzZSI6CiAgICAgICAgICAgIHJldHVybiAiLS5JbmYiOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChjb21tb24uaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSkgewogICAgICAgIHJldHVybiAiLTAuMCI7CiAgICAgIH0KICAgICAgcmVzID0gb2JqZWN0LnRvU3RyaW5nKDEwKTsKICAgICAgcmV0dXJuIFNDSUVOVElGSUNfV0lUSE9VVF9ET1QudGVzdChyZXMpID8gcmVzLnJlcGxhY2UoImUiLCAiLmUiKSA6IHJlczsKICAgIH0KICAgIGZ1bmN0aW9uIGlzRmxvYXQob2JqZWN0KSB7CiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gIltvYmplY3QgTnVtYmVyXSIgJiYgKG9iamVjdCAlIDEgIT09IDAgfHwgY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlWWFtbEZsb2F0LAogICAgICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxGbG9hdCwKICAgICAgcHJlZGljYXRlOiBpc0Zsb2F0LAogICAgICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxGbG9hdCwKICAgICAgZGVmYXVsdFN0eWxlOiAibG93ZXJjYXNlIgogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvanNvbi5qcwp2YXIgcmVxdWlyZV9qc29uID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvanNvbi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgU2NoZW1hMiA9IHJlcXVpcmVfc2NoZW1hKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEyKHsKICAgICAgaW5jbHVkZTogWwogICAgICAgIHJlcXVpcmVfZmFpbHNhZmUoKQogICAgICBdLAogICAgICBpbXBsaWNpdDogWwogICAgICAgIHJlcXVpcmVfbnVsbCgpLAogICAgICAgIHJlcXVpcmVfYm9vbCgpLAogICAgICAgIHJlcXVpcmVfaW50KCksCiAgICAgICAgcmVxdWlyZV9mbG9hdCgpCiAgICAgIF0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2NvcmUuanMKdmFyIHJlcXVpcmVfY29yZSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2NvcmUuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFNjaGVtYTIgPSByZXF1aXJlX3NjaGVtYSgpOwogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgU2NoZW1hMih7CiAgICAgIGluY2x1ZGU6IFsKICAgICAgICByZXF1aXJlX2pzb24oKQogICAgICBdCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvdGltZXN0YW1wLmpzCnZhciByZXF1aXJlX3RpbWVzdGFtcCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS90aW1lc3RhbXAuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBZQU1MX0RBVEVfUkVHRVhQID0gbmV3IFJlZ0V4cCgKICAgICAgIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldKS0oWzAtOV1bMC05XSkkIgogICAgKTsKICAgIHZhciBZQU1MX1RJTUVTVEFNUF9SRUdFWFAgPSBuZXcgUmVnRXhwKAogICAgICAiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0/KS0oWzAtOV1bMC05XT8pKD86W1R0XXxbIFxcdF0rKShbMC05XVswLTldPyk6KFswLTldWzAtOV0pOihbMC05XVswLTldKSg/OlxcLihbMC05XSopKT8oPzpbIFxcdF0qKFp8KFstK10pKFswLTldWzAtOV0/KSg/OjooWzAtOV1bMC05XSkpPykpPyQiCiAgICApOwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxUaW1lc3RhbXAoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoWUFNTF9EQVRFX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbFRpbWVzdGFtcChkYXRhKSB7CiAgICAgIHZhciBtYXRjaDIsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmcmFjdGlvbiA9IDAsIGRlbHRhID0gbnVsbCwgdHpfaG91ciwgdHpfbWludXRlLCBkYXRlOwogICAgICBtYXRjaDIgPSBZQU1MX0RBVEVfUkVHRVhQLmV4ZWMoZGF0YSk7CiAgICAgIGlmIChtYXRjaDIgPT09IG51bGwpIG1hdGNoMiA9IFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpOwogICAgICBpZiAobWF0Y2gyID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoIkRhdGUgcmVzb2x2ZSBlcnJvciIpOwogICAgICB5ZWFyID0gK21hdGNoMlsxXTsKICAgICAgbW9udGggPSArbWF0Y2gyWzJdIC0gMTsKICAgICAgZGF5ID0gK21hdGNoMlszXTsKICAgICAgaWYgKCFtYXRjaDJbNF0pIHsKICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSkpOwogICAgICB9CiAgICAgIGhvdXIgPSArbWF0Y2gyWzRdOwogICAgICBtaW51dGUgPSArbWF0Y2gyWzVdOwogICAgICBzZWNvbmQgPSArbWF0Y2gyWzZdOwogICAgICBpZiAobWF0Y2gyWzddKSB7CiAgICAgICAgZnJhY3Rpb24gPSBtYXRjaDJbN10uc2xpY2UoMCwgMyk7CiAgICAgICAgd2hpbGUgKGZyYWN0aW9uLmxlbmd0aCA8IDMpIHsKICAgICAgICAgIGZyYWN0aW9uICs9ICIwIjsKICAgICAgICB9CiAgICAgICAgZnJhY3Rpb24gPSArZnJhY3Rpb247CiAgICAgIH0KICAgICAgaWYgKG1hdGNoMls5XSkgewogICAgICAgIHR6X2hvdXIgPSArbWF0Y2gyWzEwXTsKICAgICAgICB0el9taW51dGUgPSArKG1hdGNoMlsxMV0gfHwgMCk7CiAgICAgICAgZGVsdGEgPSAodHpfaG91ciAqIDYwICsgdHpfbWludXRlKSAqIDZlNDsKICAgICAgICBpZiAobWF0Y2gyWzldID09PSAiLSIpIGRlbHRhID0gLWRlbHRhOwogICAgICB9CiAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24pKTsKICAgICAgaWYgKGRlbHRhKSBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgLSBkZWx0YSk7CiAgICAgIHJldHVybiBkYXRlOwogICAgfQogICAgZnVuY3Rpb24gcmVwcmVzZW50WWFtbFRpbWVzdGFtcChvYmplY3QpIHsKICAgICAgcmV0dXJuIG9iamVjdC50b0lTT1N0cmluZygpOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wIiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxUaW1lc3RhbXAsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFRpbWVzdGFtcCwKICAgICAgaW5zdGFuY2VPZjogRGF0ZSwKICAgICAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sVGltZXN0YW1wCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbWVyZ2UuanMKdmFyIHJlcXVpcmVfbWVyZ2UgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbWVyZ2UuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIGZ1bmN0aW9uIHJlc29sdmVZYW1sTWVyZ2UoZGF0YSkgewogICAgICByZXR1cm4gZGF0YSA9PT0gIjw8IiB8fCBkYXRhID09PSBudWxsOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlWWFtbE1lcmdlCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYmluYXJ5LmpzCnZhciByZXF1aXJlX2JpbmFyeSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9iaW5hcnkuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIE5vZGVCdWZmZXI7CiAgICB0cnkgewogICAgICBfcmVxdWlyZSA9IF9fcmVxdWlyZTsKICAgICAgTm9kZUJ1ZmZlciA9IF9yZXF1aXJlKCJidWZmZXIiKS5CdWZmZXI7CiAgICB9IGNhdGNoIChfXykgewogICAgfQogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBCQVNFNjRfTUFQID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XG5cciI7CiAgICBmdW5jdGlvbiByZXNvbHZlWWFtbEJpbmFyeShkYXRhKSB7CiAgICAgIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIHZhciBjb2RlNCwgaWR4LCBiaXRsZW4gPSAwLCBtYXgzID0gZGF0YS5sZW5ndGgsIG1hcDcgPSBCQVNFNjRfTUFQOwogICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDM7IGlkeCsrKSB7CiAgICAgICAgY29kZTQgPSBtYXA3LmluZGV4T2YoZGF0YS5jaGFyQXQoaWR4KSk7CiAgICAgICAgaWYgKGNvZGU0ID4gNjQpIGNvbnRpbnVlOwogICAgICAgIGlmIChjb2RlNCA8IDApIHJldHVybiBmYWxzZTsKICAgICAgICBiaXRsZW4gKz0gNjsKICAgICAgfQogICAgICByZXR1cm4gYml0bGVuICUgOCA9PT0gMDsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxCaW5hcnkoZGF0YSkgewogICAgICB2YXIgaWR4LCB0YWlsYml0cywgaW5wdXQgPSBkYXRhLnJlcGxhY2UoL1tcclxuPV0vZywgIiIpLCBtYXgzID0gaW5wdXQubGVuZ3RoLCBtYXA3ID0gQkFTRTY0X01BUCwgYml0cyA9IDAsIHJlc3VsdCA9IFtdOwogICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDM7IGlkeCsrKSB7CiAgICAgICAgaWYgKGlkeCAlIDQgPT09IDAgJiYgaWR4KSB7CiAgICAgICAgICByZXN1bHQucHVzaChiaXRzID4+IDE2ICYgMjU1KTsKICAgICAgICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gOCAmIDI1NSk7CiAgICAgICAgICByZXN1bHQucHVzaChiaXRzICYgMjU1KTsKICAgICAgICB9CiAgICAgICAgYml0cyA9IGJpdHMgPDwgNiB8IG1hcDcuaW5kZXhPZihpbnB1dC5jaGFyQXQoaWR4KSk7CiAgICAgIH0KICAgICAgdGFpbGJpdHMgPSBtYXgzICUgNCAqIDY7CiAgICAgIGlmICh0YWlsYml0cyA9PT0gMCkgewogICAgICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gMTYgJiAyNTUpOwogICAgICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gOCAmIDI1NSk7CiAgICAgICAgcmVzdWx0LnB1c2goYml0cyAmIDI1NSk7CiAgICAgIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDE4KSB7CiAgICAgICAgcmVzdWx0LnB1c2goYml0cyA+PiAxMCAmIDI1NSk7CiAgICAgICAgcmVzdWx0LnB1c2goYml0cyA+PiAyICYgMjU1KTsKICAgICAgfSBlbHNlIGlmICh0YWlsYml0cyA9PT0gMTIpIHsKICAgICAgICByZXN1bHQucHVzaChiaXRzID4+IDQgJiAyNTUpOwogICAgICB9CiAgICAgIGlmIChOb2RlQnVmZmVyKSB7CiAgICAgICAgcmV0dXJuIE5vZGVCdWZmZXIuZnJvbSA/IE5vZGVCdWZmZXIuZnJvbShyZXN1bHQpIDogbmV3IE5vZGVCdWZmZXIocmVzdWx0KTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gcmVwcmVzZW50WWFtbEJpbmFyeShvYmplY3QpIHsKICAgICAgdmFyIHJlc3VsdCA9ICIiLCBiaXRzID0gMCwgaWR4LCB0YWlsLCBtYXgzID0gb2JqZWN0Lmxlbmd0aCwgbWFwNyA9IEJBU0U2NF9NQVA7CiAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgbWF4MzsgaWR4KyspIHsKICAgICAgICBpZiAoaWR4ICUgMyA9PT0gMCAmJiBpZHgpIHsKICAgICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPj4gMTggJiA2M107CiAgICAgICAgICByZXN1bHQgKz0gbWFwN1tiaXRzID4+IDEyICYgNjNdOwogICAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiA2ICYgNjNdOwogICAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyAmIDYzXTsKICAgICAgICB9CiAgICAgICAgYml0cyA9IChiaXRzIDw8IDgpICsgb2JqZWN0W2lkeF07CiAgICAgIH0KICAgICAgdGFpbCA9IG1heDMgJSAzOwogICAgICBpZiAodGFpbCA9PT0gMCkgewogICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPj4gMTggJiA2M107CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiAxMiAmIDYzXTsKICAgICAgICByZXN1bHQgKz0gbWFwN1tiaXRzID4+IDYgJiA2M107CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyAmIDYzXTsKICAgICAgfSBlbHNlIGlmICh0YWlsID09PSAyKSB7CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiAxMCAmIDYzXTsKICAgICAgICByZXN1bHQgKz0gbWFwN1tiaXRzID4+IDQgJiA2M107CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA8PCAyICYgNjNdOwogICAgICAgIHJlc3VsdCArPSBtYXA3WzY0XTsKICAgICAgfSBlbHNlIGlmICh0YWlsID09PSAxKSB7CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiAyICYgNjNdOwogICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPDwgNCAmIDYzXTsKICAgICAgICByZXN1bHQgKz0gbWFwN1s2NF07CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbNjRdOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBpc0JpbmFyeShvYmplY3QpIHsKICAgICAgcmV0dXJuIE5vZGVCdWZmZXIgJiYgTm9kZUJ1ZmZlci5pc0J1ZmZlcihvYmplY3QpOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5IiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxCaW5hcnksCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEJpbmFyeSwKICAgICAgcHJlZGljYXRlOiBpc0JpbmFyeSwKICAgICAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sQmluYXJ5CiAgICB9KTsKICAgIHZhciBfcmVxdWlyZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvb21hcC5qcwp2YXIgcmVxdWlyZV9vbWFwID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL29tYXAuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwogICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CiAgICBmdW5jdGlvbiByZXNvbHZlWWFtbE9tYXAoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAgIHZhciBvYmplY3RLZXlzID0gW10sIGluZGV4MiwgbGVuZ3RoLCBwYWlyLCBwYWlyS2V5LCBwYWlySGFzS2V5LCBvYmplY3QgPSBkYXRhOwogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBwYWlyID0gb2JqZWN0W2luZGV4Ml07CiAgICAgICAgcGFpckhhc0tleSA9IGZhbHNlOwogICAgICAgIGlmIChfdG9TdHJpbmcuY2FsbChwYWlyKSAhPT0gIltvYmplY3QgT2JqZWN0XSIpIHJldHVybiBmYWxzZTsKICAgICAgICBmb3IgKHBhaXJLZXkgaW4gcGFpcikgewogICAgICAgICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhaXIsIHBhaXJLZXkpKSB7CiAgICAgICAgICAgIGlmICghcGFpckhhc0tleSkgcGFpckhhc0tleSA9IHRydWU7CiAgICAgICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIXBhaXJIYXNLZXkpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAob2JqZWN0S2V5cy5pbmRleE9mKHBhaXJLZXkpID09PSAtMSkgb2JqZWN0S2V5cy5wdXNoKHBhaXJLZXkpOwogICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbE9tYXAoZGF0YSkgewogICAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBbXTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOm9tYXAiLCB7CiAgICAgIGtpbmQ6ICJzZXF1ZW5jZSIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sT21hcCwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sT21hcAogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3BhaXJzLmpzCnZhciByZXF1aXJlX3BhaXJzID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3BhaXJzLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlID0gcmVxdWlyZV90eXBlKCk7CiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKICAgIGZ1bmN0aW9uIHJlc29sdmVZYW1sUGFpcnMoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAgIHZhciBpbmRleDIsIGxlbmd0aCwgcGFpciwga2V5czIsIHJlc3VsdCwgb2JqZWN0ID0gZGF0YTsKICAgICAgcmVzdWx0ID0gbmV3IEFycmF5KG9iamVjdC5sZW5ndGgpOwogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBwYWlyID0gb2JqZWN0W2luZGV4Ml07CiAgICAgICAgaWYgKF90b1N0cmluZy5jYWxsKHBhaXIpICE9PSAiW29iamVjdCBPYmplY3RdIikgcmV0dXJuIGZhbHNlOwogICAgICAgIGtleXMyID0gT2JqZWN0LmtleXMocGFpcik7CiAgICAgICAgaWYgKGtleXMyLmxlbmd0aCAhPT0gMSkgcmV0dXJuIGZhbHNlOwogICAgICAgIHJlc3VsdFtpbmRleDJdID0gW2tleXMyWzBdLCBwYWlyW2tleXMyWzBdXV07CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sUGFpcnMoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIFtdOwogICAgICB2YXIgaW5kZXgyLCBsZW5ndGgsIHBhaXIsIGtleXMyLCByZXN1bHQsIG9iamVjdCA9IGRhdGE7CiAgICAgIHJlc3VsdCA9IG5ldyBBcnJheShvYmplY3QubGVuZ3RoKTsKICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgcGFpciA9IG9iamVjdFtpbmRleDJdOwogICAgICAgIGtleXMyID0gT2JqZWN0LmtleXMocGFpcik7CiAgICAgICAgcmVzdWx0W2luZGV4Ml0gPSBba2V5czJbMF0sIHBhaXJba2V5czJbMF1dXTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6cGFpcnMiLCB7CiAgICAgIGtpbmQ6ICJzZXF1ZW5jZSIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sUGFpcnMsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFBhaXJzCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc2V0LmpzCnZhciByZXF1aXJlX3NldCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXQuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxTZXQoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAgIHZhciBrZXkyLCBvYmplY3QgPSBkYXRhOwogICAgICBmb3IgKGtleTIgaW4gb2JqZWN0KSB7CiAgICAgICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5MikpIHsKICAgICAgICAgIGlmIChvYmplY3Rba2V5Ml0gIT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sU2V0KGRhdGEpIHsKICAgICAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDoge307CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXQiLCB7CiAgICAgIGtpbmQ6ICJtYXBwaW5nIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxTZXQsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFNldAogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlLmpzCnZhciByZXF1aXJlX2RlZmF1bHRfc2FmZSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfc2FmZS5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgU2NoZW1hMiA9IHJlcXVpcmVfc2NoZW1hKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEyKHsKICAgICAgaW5jbHVkZTogWwogICAgICAgIHJlcXVpcmVfY29yZSgpCiAgICAgIF0sCiAgICAgIGltcGxpY2l0OiBbCiAgICAgICAgcmVxdWlyZV90aW1lc3RhbXAoKSwKICAgICAgICByZXF1aXJlX21lcmdlKCkKICAgICAgXSwKICAgICAgZXhwbGljaXQ6IFsKICAgICAgICByZXF1aXJlX2JpbmFyeSgpLAogICAgICAgIHJlcXVpcmVfb21hcCgpLAogICAgICAgIHJlcXVpcmVfcGFpcnMoKSwKICAgICAgICByZXF1aXJlX3NldCgpCiAgICAgIF0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy91bmRlZmluZWQuanMKdmFyIHJlcXVpcmVfdW5kZWZpbmVkID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2pzL3VuZGVmaW5lZC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVHlwZSA9IHJlcXVpcmVfdHlwZSgpOwogICAgZnVuY3Rpb24gcmVzb2x2ZUphdmFzY3JpcHRVbmRlZmluZWQoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0SmF2YXNjcmlwdFVuZGVmaW5lZCgpIHsKICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIH0KICAgIGZ1bmN0aW9uIHJlcHJlc2VudEphdmFzY3JpcHRVbmRlZmluZWQoKSB7CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG9iamVjdCkgewogICAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gInVuZGVmaW5lZCI7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy91bmRlZmluZWQiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlSmF2YXNjcmlwdFVuZGVmaW5lZCwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RKYXZhc2NyaXB0VW5kZWZpbmVkLAogICAgICBwcmVkaWNhdGU6IGlzVW5kZWZpbmVkLAogICAgICByZXByZXNlbnQ6IHJlcHJlc2VudEphdmFzY3JpcHRVbmRlZmluZWQKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9yZWdleHAuanMKdmFyIHJlcXVpcmVfcmVnZXhwID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2pzL3JlZ2V4cC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVHlwZSA9IHJlcXVpcmVfdHlwZSgpOwogICAgZnVuY3Rpb24gcmVzb2x2ZUphdmFzY3JpcHRSZWdFeHAoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTsKICAgICAgdmFyIHJlZ2V4cCA9IGRhdGEsIHRhaWwgPSAvXC8oW2dpbV0qKSQvLmV4ZWMoZGF0YSksIG1vZGlmaWVycyA9ICIiOwogICAgICBpZiAocmVnZXhwWzBdID09PSAiLyIpIHsKICAgICAgICBpZiAodGFpbCkgbW9kaWZpZXJzID0gdGFpbFsxXTsKICAgICAgICBpZiAobW9kaWZpZXJzLmxlbmd0aCA+IDMpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAocmVnZXhwW3JlZ2V4cC5sZW5ndGggLSBtb2RpZmllcnMubGVuZ3RoIC0gMV0gIT09ICIvIikgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0SmF2YXNjcmlwdFJlZ0V4cChkYXRhKSB7CiAgICAgIHZhciByZWdleHAgPSBkYXRhLCB0YWlsID0gL1wvKFtnaW1dKikkLy5leGVjKGRhdGEpLCBtb2RpZmllcnMgPSAiIjsKICAgICAgaWYgKHJlZ2V4cFswXSA9PT0gIi8iKSB7CiAgICAgICAgaWYgKHRhaWwpIG1vZGlmaWVycyA9IHRhaWxbMV07CiAgICAgICAgcmVnZXhwID0gcmVnZXhwLnNsaWNlKDEsIHJlZ2V4cC5sZW5ndGggLSBtb2RpZmllcnMubGVuZ3RoIC0gMSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBSZWdFeHAocmVnZXhwLCBtb2RpZmllcnMpOwogICAgfQogICAgZnVuY3Rpb24gcmVwcmVzZW50SmF2YXNjcmlwdFJlZ0V4cChvYmplY3QpIHsKICAgICAgdmFyIHJlc3VsdCA9ICIvIiArIG9iamVjdC5zb3VyY2UgKyAiLyI7CiAgICAgIGlmIChvYmplY3QuZ2xvYmFsKSByZXN1bHQgKz0gImciOwogICAgICBpZiAob2JqZWN0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICJtIjsKICAgICAgaWYgKG9iamVjdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gImkiOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gaXNSZWdFeHAob2JqZWN0KSB7CiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gIltvYmplY3QgUmVnRXhwXSI7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy9yZWdleHAiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlSmF2YXNjcmlwdFJlZ0V4cCwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RKYXZhc2NyaXB0UmVnRXhwLAogICAgICBwcmVkaWNhdGU6IGlzUmVnRXhwLAogICAgICByZXByZXNlbnQ6IHJlcHJlc2VudEphdmFzY3JpcHRSZWdFeHAKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9mdW5jdGlvbi5qcwp2YXIgcmVxdWlyZV9mdW5jdGlvbiA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9mdW5jdGlvbi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgZXNwcmltYTsKICAgIHRyeSB7CiAgICAgIF9yZXF1aXJlID0gX19yZXF1aXJlOwogICAgICBlc3ByaW1hID0gX3JlcXVpcmUoImVzcHJpbWEiKTsKICAgIH0gY2F0Y2ggKF80KSB7CiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIikgZXNwcmltYSA9IHdpbmRvdy5lc3ByaW1hOwogICAgfQogICAgdmFyIFR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIGZ1bmN0aW9uIHJlc29sdmVKYXZhc2NyaXB0RnVuY3Rpb24oZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICB0cnkgewogICAgICAgIHZhciBzb3VyY2UgPSAiKCIgKyBkYXRhICsgIikiLCBhc3QgPSBlc3ByaW1hLnBhcnNlKHNvdXJjZSwgeyByYW5nZTogdHJ1ZSB9KTsKICAgICAgICBpZiAoYXN0LnR5cGUgIT09ICJQcm9ncmFtIiB8fCBhc3QuYm9keS5sZW5ndGggIT09IDEgfHwgYXN0LmJvZHlbMF0udHlwZSAhPT0gIkV4cHJlc3Npb25TdGF0ZW1lbnQiIHx8IGFzdC5ib2R5WzBdLmV4cHJlc3Npb24udHlwZSAhPT0gIkFycm93RnVuY3Rpb25FeHByZXNzaW9uIiAmJiBhc3QuYm9keVswXS5leHByZXNzaW9uLnR5cGUgIT09ICJGdW5jdGlvbkV4cHJlc3Npb24iKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdEphdmFzY3JpcHRGdW5jdGlvbihkYXRhKSB7CiAgICAgIHZhciBzb3VyY2UgPSAiKCIgKyBkYXRhICsgIikiLCBhc3QgPSBlc3ByaW1hLnBhcnNlKHNvdXJjZSwgeyByYW5nZTogdHJ1ZSB9KSwgcGFyYW1zMiA9IFtdLCBib2R5MzsKICAgICAgaWYgKGFzdC50eXBlICE9PSAiUHJvZ3JhbSIgfHwgYXN0LmJvZHkubGVuZ3RoICE9PSAxIHx8IGFzdC5ib2R5WzBdLnR5cGUgIT09ICJFeHByZXNzaW9uU3RhdGVtZW50IiB8fCBhc3QuYm9keVswXS5leHByZXNzaW9uLnR5cGUgIT09ICJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiIgJiYgYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlICE9PSAiRnVuY3Rpb25FeHByZXNzaW9uIikgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHJlc29sdmUgZnVuY3Rpb24iKTsKICAgICAgfQogICAgICBhc3QuYm9keVswXS5leHByZXNzaW9uLnBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtKSB7CiAgICAgICAgcGFyYW1zMi5wdXNoKHBhcmFtLm5hbWUpOwogICAgICB9KTsKICAgICAgYm9keTMgPSBhc3QuYm9keVswXS5leHByZXNzaW9uLmJvZHkucmFuZ2U7CiAgICAgIGlmIChhc3QuYm9keVswXS5leHByZXNzaW9uLmJvZHkudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50IikgewogICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24ocGFyYW1zMiwgc291cmNlLnNsaWNlKGJvZHkzWzBdICsgMSwgYm9keTNbMV0gLSAxKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihwYXJhbXMyLCAicmV0dXJuICIgKyBzb3VyY2Uuc2xpY2UoYm9keTNbMF0sIGJvZHkzWzFdKSk7CiAgICB9CiAgICBmdW5jdGlvbiByZXByZXNlbnRKYXZhc2NyaXB0RnVuY3Rpb24ob2JqZWN0KSB7CiAgICAgIHJldHVybiBvYmplY3QudG9TdHJpbmcoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24yKG9iamVjdCkgewogICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT09ICJbb2JqZWN0IEZ1bmN0aW9uXSI7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy9mdW5jdGlvbiIsIHsKICAgICAga2luZDogInNjYWxhciIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVKYXZhc2NyaXB0RnVuY3Rpb24sCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0SmF2YXNjcmlwdEZ1bmN0aW9uLAogICAgICBwcmVkaWNhdGU6IGlzRnVuY3Rpb24yLAogICAgICByZXByZXNlbnQ6IHJlcHJlc2VudEphdmFzY3JpcHRGdW5jdGlvbgogICAgfSk7CiAgICB2YXIgX3JlcXVpcmU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9mdWxsLmpzCnZhciByZXF1aXJlX2RlZmF1bHRfZnVsbCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvc2NoZW1hL2RlZmF1bHRfZnVsbC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgU2NoZW1hMiA9IHJlcXVpcmVfc2NoZW1hKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IFNjaGVtYTIuREVGQVVMVCA9IG5ldyBTY2hlbWEyKHsKICAgICAgaW5jbHVkZTogWwogICAgICAgIHJlcXVpcmVfZGVmYXVsdF9zYWZlKCkKICAgICAgXSwKICAgICAgZXhwbGljaXQ6IFsKICAgICAgICByZXF1aXJlX3VuZGVmaW5lZCgpLAogICAgICAgIHJlcXVpcmVfcmVnZXhwKCksCiAgICAgICAgcmVxdWlyZV9mdW5jdGlvbigpCiAgICAgIF0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvbG9hZGVyLmpzCnZhciByZXF1aXJlX2xvYWRlciA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvbG9hZGVyLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBjb21tb24gPSByZXF1aXJlX2NvbW1vbigpOwogICAgdmFyIFlBTUxFeGNlcHRpb24gPSByZXF1aXJlX2V4Y2VwdGlvbigpOwogICAgdmFyIE1hcmsgPSByZXF1aXJlX21hcmsoKTsKICAgIHZhciBERUZBVUxUX1NBRkVfU0NIRU1BID0gcmVxdWlyZV9kZWZhdWx0X3NhZmUoKTsKICAgIHZhciBERUZBVUxUX0ZVTExfU0NIRU1BID0gcmVxdWlyZV9kZWZhdWx0X2Z1bGwoKTsKICAgIHZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwogICAgdmFyIENPTlRFWFRfRkxPV19JTiA9IDE7CiAgICB2YXIgQ09OVEVYVF9GTE9XX09VVCA9IDI7CiAgICB2YXIgQ09OVEVYVF9CTE9DS19JTiA9IDM7CiAgICB2YXIgQ09OVEVYVF9CTE9DS19PVVQgPSA0OwogICAgdmFyIENIT01QSU5HX0NMSVAgPSAxOwogICAgdmFyIENIT01QSU5HX1NUUklQID0gMjsKICAgIHZhciBDSE9NUElOR19LRUVQID0gMzsKICAgIHZhciBQQVRURVJOX05PTl9QUklOVEFCTEUgPSAvW1x4MDAtXHgwOFx4MEJceDBDXHgwRS1ceDFGXHg3Ri1ceDg0XHg4Ni1ceDlGXHVGRkZFXHVGRkZGXXxbXHVEODAwLVx1REJGRl0oPyFbXHVEQzAwLVx1REZGRl0pfCg/OlteXHVEODAwLVx1REJGRl18XilbXHVEQzAwLVx1REZGRl0vOwogICAgdmFyIFBBVFRFUk5fTk9OX0FTQ0lJX0xJTkVfQlJFQUtTID0gL1tceDg1XHUyMDI4XHUyMDI5XS87CiAgICB2YXIgUEFUVEVSTl9GTE9XX0lORElDQVRPUlMgPSAvWyxcW1xdXHtcfV0vOwogICAgdmFyIFBBVFRFUk5fVEFHX0hBTkRMRSA9IC9eKD86IXwhIXwhW2EtelwtXSshKSQvaTsKICAgIHZhciBQQVRURVJOX1RBR19VUkkgPSAvXig/OiF8W14sXFtcXVx7XH1dKSg/OiVbMC05YS1mXXsyfXxbMC05YS16XC0jO1wvXD86QCY9XCtcJCxfXC4hflwqJ1woXClcW1xdXSkqJC9pOwogICAgZnVuY3Rpb24gX2NsYXNzKG9iaikgewogICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7CiAgICB9CiAgICBmdW5jdGlvbiBpc19FT0woYzExKSB7CiAgICAgIHJldHVybiBjMTEgPT09IDEwIHx8IGMxMSA9PT0gMTM7CiAgICB9CiAgICBmdW5jdGlvbiBpc19XSElURV9TUEFDRShjMTEpIHsKICAgICAgcmV0dXJuIGMxMSA9PT0gOSB8fCBjMTEgPT09IDMyOwogICAgfQogICAgZnVuY3Rpb24gaXNfV1NfT1JfRU9MKGMxMSkgewogICAgICByZXR1cm4gYzExID09PSA5IHx8IGMxMSA9PT0gMzIgfHwgYzExID09PSAxMCB8fCBjMTEgPT09IDEzOwogICAgfQogICAgZnVuY3Rpb24gaXNfRkxPV19JTkRJQ0FUT1IoYzExKSB7CiAgICAgIHJldHVybiBjMTEgPT09IDQ0IHx8IGMxMSA9PT0gOTEgfHwgYzExID09PSA5MyB8fCBjMTEgPT09IDEyMyB8fCBjMTEgPT09IDEyNTsKICAgIH0KICAgIGZ1bmN0aW9uIGZyb21IZXhDb2RlKGMxMSkgewogICAgICB2YXIgbGM7CiAgICAgIGlmICg0OCA8PSBjMTEgJiYgYzExIDw9IDU3KSB7CiAgICAgICAgcmV0dXJuIGMxMSAtIDQ4OwogICAgICB9CiAgICAgIGxjID0gYzExIHwgMzI7CiAgICAgIGlmICg5NyA8PSBsYyAmJiBsYyA8PSAxMDIpIHsKICAgICAgICByZXR1cm4gbGMgLSA5NyArIDEwOwogICAgICB9CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGZ1bmN0aW9uIGVzY2FwZWRIZXhMZW4oYzExKSB7CiAgICAgIGlmIChjMTEgPT09IDEyMCkgewogICAgICAgIHJldHVybiAyOwogICAgICB9CiAgICAgIGlmIChjMTEgPT09IDExNykgewogICAgICAgIHJldHVybiA0OwogICAgICB9CiAgICAgIGlmIChjMTEgPT09IDg1KSB7CiAgICAgICAgcmV0dXJuIDg7CiAgICAgIH0KICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBmdW5jdGlvbiBmcm9tRGVjaW1hbENvZGUoYzExKSB7CiAgICAgIGlmICg0OCA8PSBjMTEgJiYgYzExIDw9IDU3KSB7CiAgICAgICAgcmV0dXJuIGMxMSAtIDQ4OwogICAgICB9CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGZ1bmN0aW9uIHNpbXBsZUVzY2FwZVNlcXVlbmNlKGMxMSkgewogICAgICByZXR1cm4gYzExID09PSA0OCA/ICJcMCIgOiBjMTEgPT09IDk3ID8gIlx4MDciIDogYzExID09PSA5OCA/ICJcYiIgOiBjMTEgPT09IDExNiA/ICIJIiA6IGMxMSA9PT0gOSA/ICIJIiA6IGMxMSA9PT0gMTEwID8gIlxuIiA6IGMxMSA9PT0gMTE4ID8gIlx2IiA6IGMxMSA9PT0gMTAyID8gIlxmIiA6IGMxMSA9PT0gMTE0ID8gIlxyIiA6IGMxMSA9PT0gMTAxID8gIlx4MUIiIDogYzExID09PSAzMiA/ICIgIiA6IGMxMSA9PT0gMzQgPyAnIicgOiBjMTEgPT09IDQ3ID8gIi8iIDogYzExID09PSA5MiA/ICJcXCIgOiBjMTEgPT09IDc4ID8gIlx4ODUiIDogYzExID09PSA5NSA/ICJceEEwIiA6IGMxMSA9PT0gNzYgPyAiXHUyMDI4IiA6IGMxMSA9PT0gODAgPyAiXHUyMDI5IiA6ICIiOwogICAgfQogICAgZnVuY3Rpb24gY2hhckZyb21Db2RlcG9pbnQoYzExKSB7CiAgICAgIGlmIChjMTEgPD0gNjU1MzUpIHsKICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjMTEpOwogICAgICB9CiAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKAogICAgICAgIChjMTEgLSA2NTUzNiA+PiAxMCkgKyA1NTI5NiwKICAgICAgICAoYzExIC0gNjU1MzYgJiAxMDIzKSArIDU2MzIwCiAgICAgICk7CiAgICB9CiAgICBmdW5jdGlvbiBzZXRQcm9wZXJ0eShvYmplY3QsIGtleTIsIHZhbHVlMikgewogICAgICBpZiAoa2V5MiA9PT0gIl9fcHJvdG9fXyIpIHsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXkyLCB7CiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICB2YWx1ZTogdmFsdWUyCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb2JqZWN0W2tleTJdID0gdmFsdWUyOwogICAgICB9CiAgICB9CiAgICB2YXIgc2ltcGxlRXNjYXBlQ2hlY2sgPSBuZXcgQXJyYXkoMjU2KTsKICAgIHZhciBzaW1wbGVFc2NhcGVNYXAgPSBuZXcgQXJyYXkoMjU2KTsKICAgIGZvciAoaTExID0gMDsgaTExIDwgMjU2OyBpMTErKykgewogICAgICBzaW1wbGVFc2NhcGVDaGVja1tpMTFdID0gc2ltcGxlRXNjYXBlU2VxdWVuY2UoaTExKSA/IDEgOiAwOwogICAgICBzaW1wbGVFc2NhcGVNYXBbaTExXSA9IHNpbXBsZUVzY2FwZVNlcXVlbmNlKGkxMSk7CiAgICB9CiAgICBmdW5jdGlvbiBTdGF0ZShpbnB1dCwgb3B0aW9ucykgewogICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7CiAgICAgIHRoaXMuZmlsZW5hbWUgPSBvcHRpb25zWyJmaWxlbmFtZSJdIHx8IG51bGw7CiAgICAgIHRoaXMuc2NoZW1hID0gb3B0aW9uc1sic2NoZW1hIl0gfHwgREVGQVVMVF9GVUxMX1NDSEVNQTsKICAgICAgdGhpcy5vbldhcm5pbmcgPSBvcHRpb25zWyJvbldhcm5pbmciXSB8fCBudWxsOwogICAgICB0aGlzLmxlZ2FjeSA9IG9wdGlvbnNbImxlZ2FjeSJdIHx8IGZhbHNlOwogICAgICB0aGlzLmpzb24gPSBvcHRpb25zWyJqc29uIl0gfHwgZmFsc2U7CiAgICAgIHRoaXMubGlzdGVuZXIgPSBvcHRpb25zWyJsaXN0ZW5lciJdIHx8IG51bGw7CiAgICAgIHRoaXMuaW1wbGljaXRUeXBlcyA9IHRoaXMuc2NoZW1hLmNvbXBpbGVkSW1wbGljaXQ7CiAgICAgIHRoaXMudHlwZU1hcCA9IHRoaXMuc2NoZW1hLmNvbXBpbGVkVHlwZU1hcDsKICAgICAgdGhpcy5sZW5ndGggPSBpbnB1dC5sZW5ndGg7CiAgICAgIHRoaXMucG9zaXRpb24gPSAwOwogICAgICB0aGlzLmxpbmUgPSAwOwogICAgICB0aGlzLmxpbmVTdGFydCA9IDA7CiAgICAgIHRoaXMubGluZUluZGVudCA9IDA7CiAgICAgIHRoaXMuZG9jdW1lbnRzID0gW107CiAgICB9CiAgICBmdW5jdGlvbiBnZW5lcmF0ZUVycm9yKHN0YXRlMTQsIG1lc3NhZ2UyKSB7CiAgICAgIHJldHVybiBuZXcgWUFNTEV4Y2VwdGlvbigKICAgICAgICBtZXNzYWdlMiwKICAgICAgICBuZXcgTWFyayhzdGF0ZTE0LmZpbGVuYW1lLCBzdGF0ZTE0LmlucHV0LCBzdGF0ZTE0LnBvc2l0aW9uLCBzdGF0ZTE0LmxpbmUsIHN0YXRlMTQucG9zaXRpb24gLSBzdGF0ZTE0LmxpbmVTdGFydCkKICAgICAgKTsKICAgIH0KICAgIGZ1bmN0aW9uIHRocm93RXJyb3IyKHN0YXRlMTQsIG1lc3NhZ2UyKSB7CiAgICAgIHRocm93IGdlbmVyYXRlRXJyb3Ioc3RhdGUxNCwgbWVzc2FnZTIpOwogICAgfQogICAgZnVuY3Rpb24gdGhyb3dXYXJuaW5nKHN0YXRlMTQsIG1lc3NhZ2UyKSB7CiAgICAgIGlmIChzdGF0ZTE0Lm9uV2FybmluZykgewogICAgICAgIHN0YXRlMTQub25XYXJuaW5nLmNhbGwobnVsbCwgZ2VuZXJhdGVFcnJvcihzdGF0ZTE0LCBtZXNzYWdlMikpOwogICAgICB9CiAgICB9CiAgICB2YXIgZGlyZWN0aXZlSGFuZGxlcnMgPSB7CiAgICAgIFlBTUw6IGZ1bmN0aW9uIGhhbmRsZVlhbWxEaXJlY3RpdmUoc3RhdGUxNCwgbmFtZSwgYXJncykgewogICAgICAgIHZhciBtYXRjaDIsIG1ham9yLCBtaW5vcjsKICAgICAgICBpZiAoc3RhdGUxNC52ZXJzaW9uICE9PSBudWxsKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAiZHVwbGljYXRpb24gb2YgJVlBTUwgZGlyZWN0aXZlIik7CiAgICAgICAgfQogICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMSkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgIllBTUwgZGlyZWN0aXZlIGFjY2VwdHMgZXhhY3RseSBvbmUgYXJndW1lbnQiKTsKICAgICAgICB9CiAgICAgICAgbWF0Y2gyID0gL14oWzAtOV0rKVwuKFswLTldKykkLy5leGVjKGFyZ3NbMF0pOwogICAgICAgIGlmIChtYXRjaDIgPT09IG51bGwpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJpbGwtZm9ybWVkIGFyZ3VtZW50IG9mIHRoZSBZQU1MIGRpcmVjdGl2ZSIpOwogICAgICAgIH0KICAgICAgICBtYWpvciA9IHBhcnNlSW50KG1hdGNoMlsxXSwgMTApOwogICAgICAgIG1pbm9yID0gcGFyc2VJbnQobWF0Y2gyWzJdLCAxMCk7CiAgICAgICAgaWYgKG1ham9yICE9PSAxKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAidW5hY2NlcHRhYmxlIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKTsKICAgICAgICB9CiAgICAgICAgc3RhdGUxNC52ZXJzaW9uID0gYXJnc1swXTsKICAgICAgICBzdGF0ZTE0LmNoZWNrTGluZUJyZWFrcyA9IG1pbm9yIDwgMjsKICAgICAgICBpZiAobWlub3IgIT09IDEgJiYgbWlub3IgIT09IDIpIHsKICAgICAgICAgIHRocm93V2FybmluZyhzdGF0ZTE0LCAidW5zdXBwb3J0ZWQgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgVEFHOiBmdW5jdGlvbiBoYW5kbGVUYWdEaXJlY3RpdmUoc3RhdGUxNCwgbmFtZSwgYXJncykgewogICAgICAgIHZhciBoYW5kbGUzLCBwcmVmaXg0OwogICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMikgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgIlRBRyBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IHR3byBhcmd1bWVudHMiKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlMyA9IGFyZ3NbMF07CiAgICAgICAgcHJlZml4NCA9IGFyZ3NbMV07CiAgICAgICAgaWYgKCFQQVRURVJOX1RBR19IQU5ETEUudGVzdChoYW5kbGUzKSkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImlsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIik7CiAgICAgICAgfQogICAgICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZTE0LnRhZ01hcCwgaGFuZGxlMykpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICd0aGVyZSBpcyBhIHByZXZpb3VzbHkgZGVjbGFyZWQgc3VmZml4IGZvciAiJyArIGhhbmRsZTMgKyAnIiB0YWcgaGFuZGxlJyk7CiAgICAgICAgfQogICAgICAgIGlmICghUEFUVEVSTl9UQUdfVVJJLnRlc3QocHJlZml4NCkpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJpbGwtZm9ybWVkIHRhZyBwcmVmaXggKHNlY29uZCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUiKTsKICAgICAgICB9CiAgICAgICAgc3RhdGUxNC50YWdNYXBbaGFuZGxlM10gPSBwcmVmaXg0OwogICAgICB9CiAgICB9OwogICAgZnVuY3Rpb24gY2FwdHVyZVNlZ21lbnQoc3RhdGUxNCwgc3RhcnQsIGVuZDMsIGNoZWNrSnNvbikgewogICAgICB2YXIgX3Bvc2l0aW9uLCBfbGVuZ3RoLCBfY2hhcmFjdGVyLCBfcmVzdWx0OwogICAgICBpZiAoc3RhcnQgPCBlbmQzKSB7CiAgICAgICAgX3Jlc3VsdCA9IHN0YXRlMTQuaW5wdXQuc2xpY2Uoc3RhcnQsIGVuZDMpOwogICAgICAgIGlmIChjaGVja0pzb24pIHsKICAgICAgICAgIGZvciAoX3Bvc2l0aW9uID0gMCwgX2xlbmd0aCA9IF9yZXN1bHQubGVuZ3RoOyBfcG9zaXRpb24gPCBfbGVuZ3RoOyBfcG9zaXRpb24gKz0gMSkgewogICAgICAgICAgICBfY2hhcmFjdGVyID0gX3Jlc3VsdC5jaGFyQ29kZUF0KF9wb3NpdGlvbik7CiAgICAgICAgICAgIGlmICghKF9jaGFyYWN0ZXIgPT09IDkgfHwgMzIgPD0gX2NoYXJhY3RlciAmJiBfY2hhcmFjdGVyIDw9IDExMTQxMTEpKSB7CiAgICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImV4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKFBBVFRFUk5fTk9OX1BSSU5UQUJMRS50ZXN0KF9yZXN1bHQpKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAidGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMiKTsKICAgICAgICB9CiAgICAgICAgc3RhdGUxNC5yZXN1bHQgKz0gX3Jlc3VsdDsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gbWVyZ2VNYXBwaW5ncyhzdGF0ZTE0LCBkZXN0aW5hdGlvbiwgc291cmNlLCBvdmVycmlkYWJsZUtleXMpIHsKICAgICAgdmFyIHNvdXJjZUtleXMsIGtleTIsIGluZGV4MiwgcXVhbnRpdHk7CiAgICAgIGlmICghY29tbW9uLmlzT2JqZWN0KHNvdXJjZSkpIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAiY2Fubm90IG1lcmdlIG1hcHBpbmdzOyB0aGUgcHJvdmlkZWQgc291cmNlIG9iamVjdCBpcyB1bmFjY2VwdGFibGUiKTsKICAgICAgfQogICAgICBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsKICAgICAgZm9yIChpbmRleDIgPSAwLCBxdWFudGl0eSA9IHNvdXJjZUtleXMubGVuZ3RoOyBpbmRleDIgPCBxdWFudGl0eTsgaW5kZXgyICs9IDEpIHsKICAgICAgICBrZXkyID0gc291cmNlS2V5c1tpbmRleDJdOwogICAgICAgIGlmICghX2hhc093blByb3BlcnR5LmNhbGwoZGVzdGluYXRpb24sIGtleTIpKSB7CiAgICAgICAgICBzZXRQcm9wZXJ0eShkZXN0aW5hdGlvbiwga2V5Miwgc291cmNlW2tleTJdKTsKICAgICAgICAgIG92ZXJyaWRhYmxlS2V5c1trZXkyXSA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlMTQsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIHN0YXJ0TGluZSwgc3RhcnRQb3MpIHsKICAgICAgdmFyIGluZGV4MiwgcXVhbnRpdHk7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleU5vZGUpKSB7CiAgICAgICAga2V5Tm9kZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGtleU5vZGUpOwogICAgICAgIGZvciAoaW5kZXgyID0gMCwgcXVhbnRpdHkgPSBrZXlOb2RlLmxlbmd0aDsgaW5kZXgyIDwgcXVhbnRpdHk7IGluZGV4MiArPSAxKSB7CiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXlOb2RlW2luZGV4Ml0pKSB7CiAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJuZXN0ZWQgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBrZXlzIik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZW9mIGtleU5vZGUgPT09ICJvYmplY3QiICYmIF9jbGFzcyhrZXlOb2RlW2luZGV4Ml0pID09PSAiW29iamVjdCBPYmplY3RdIikgewogICAgICAgICAgICBrZXlOb2RlW2luZGV4Ml0gPSAiW29iamVjdCBPYmplY3RdIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBrZXlOb2RlID09PSAib2JqZWN0IiAmJiBfY2xhc3Moa2V5Tm9kZSkgPT09ICJbb2JqZWN0IE9iamVjdF0iKSB7CiAgICAgICAga2V5Tm9kZSA9ICJbb2JqZWN0IE9iamVjdF0iOwogICAgICB9CiAgICAgIGtleU5vZGUgPSBTdHJpbmcoa2V5Tm9kZSk7CiAgICAgIGlmIChfcmVzdWx0ID09PSBudWxsKSB7CiAgICAgICAgX3Jlc3VsdCA9IHt9OwogICAgICB9CiAgICAgIGlmIChrZXlUYWcgPT09ICJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZSIpIHsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZU5vZGUpKSB7CiAgICAgICAgICBmb3IgKGluZGV4MiA9IDAsIHF1YW50aXR5ID0gdmFsdWVOb2RlLmxlbmd0aDsgaW5kZXgyIDwgcXVhbnRpdHk7IGluZGV4MiArPSAxKSB7CiAgICAgICAgICAgIG1lcmdlTWFwcGluZ3Moc3RhdGUxNCwgX3Jlc3VsdCwgdmFsdWVOb2RlW2luZGV4Ml0sIG92ZXJyaWRhYmxlS2V5cyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1lcmdlTWFwcGluZ3Moc3RhdGUxNCwgX3Jlc3VsdCwgdmFsdWVOb2RlLCBvdmVycmlkYWJsZUtleXMpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoIXN0YXRlMTQuanNvbiAmJiAhX2hhc093blByb3BlcnR5LmNhbGwob3ZlcnJpZGFibGVLZXlzLCBrZXlOb2RlKSAmJiBfaGFzT3duUHJvcGVydHkuY2FsbChfcmVzdWx0LCBrZXlOb2RlKSkgewogICAgICAgICAgc3RhdGUxNC5saW5lID0gc3RhcnRMaW5lIHx8IHN0YXRlMTQubGluZTsKICAgICAgICAgIHN0YXRlMTQucG9zaXRpb24gPSBzdGFydFBvcyB8fCBzdGF0ZTE0LnBvc2l0aW9uOwogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImR1cGxpY2F0ZWQgbWFwcGluZyBrZXkiKTsKICAgICAgICB9CiAgICAgICAgc2V0UHJvcGVydHkoX3Jlc3VsdCwga2V5Tm9kZSwgdmFsdWVOb2RlKTsKICAgICAgICBkZWxldGUgb3ZlcnJpZGFibGVLZXlzW2tleU5vZGVdOwogICAgICB9CiAgICAgIHJldHVybiBfcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gcmVhZExpbmVCcmVhayhzdGF0ZTE0KSB7CiAgICAgIHZhciBjaDsKICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgIGlmIChjaCA9PT0gMTApIHsKICAgICAgICBzdGF0ZTE0LnBvc2l0aW9uKys7CiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDEzKSB7CiAgICAgICAgc3RhdGUxNC5wb3NpdGlvbisrOwogICAgICAgIGlmIChzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbikgPT09IDEwKSB7CiAgICAgICAgICBzdGF0ZTE0LnBvc2l0aW9uKys7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQiKTsKICAgICAgfQogICAgICBzdGF0ZTE0LmxpbmUgKz0gMTsKICAgICAgc3RhdGUxNC5saW5lU3RhcnQgPSBzdGF0ZTE0LnBvc2l0aW9uOwogICAgfQogICAgZnVuY3Rpb24gc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTE0LCBhbGxvd0NvbW1lbnRzLCBjaGVja0luZGVudCkgewogICAgICB2YXIgbGluZUJyZWFrcyA9IDAsIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICB3aGlsZSAoY2ggIT09IDApIHsKICAgICAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7CiAgICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICBpZiAoYWxsb3dDb21tZW50cyAmJiBjaCA9PT0gMzUpIHsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICAgIH0gd2hpbGUgKGNoICE9PSAxMCAmJiBjaCAhPT0gMTMgJiYgY2ggIT09IDApOwogICAgICAgIH0KICAgICAgICBpZiAoaXNfRU9MKGNoKSkgewogICAgICAgICAgcmVhZExpbmVCcmVhayhzdGF0ZTE0KTsKICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgICAgbGluZUJyZWFrcysrOwogICAgICAgICAgc3RhdGUxNC5saW5lSW5kZW50ID0gMDsKICAgICAgICAgIHdoaWxlIChjaCA9PT0gMzIpIHsKICAgICAgICAgICAgc3RhdGUxNC5saW5lSW5kZW50Kys7CiAgICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoY2hlY2tJbmRlbnQgIT09IC0xICYmIGxpbmVCcmVha3MgIT09IDAgJiYgc3RhdGUxNC5saW5lSW5kZW50IDwgY2hlY2tJbmRlbnQpIHsKICAgICAgICB0aHJvd1dhcm5pbmcoc3RhdGUxNCwgImRlZmljaWVudCBpbmRlbnRhdGlvbiIpOwogICAgICB9CiAgICAgIHJldHVybiBsaW5lQnJlYWtzOwogICAgfQogICAgZnVuY3Rpb24gdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlMTQpIHsKICAgICAgdmFyIF9wb3NpdGlvbiA9IHN0YXRlMTQucG9zaXRpb24sIGNoOwogICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24pOwogICAgICBpZiAoKGNoID09PSA0NSB8fCBjaCA9PT0gNDYpICYmIGNoID09PSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uICsgMSkgJiYgY2ggPT09IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24gKyAyKSkgewogICAgICAgIF9wb3NpdGlvbiArPSAzOwogICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbik7CiAgICAgICAgaWYgKGNoID09PSAwIHx8IGlzX1dTX09SX0VPTChjaCkpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiB3cml0ZUZvbGRlZExpbmVzKHN0YXRlMTQsIGNvdW50MikgewogICAgICBpZiAoY291bnQyID09PSAxKSB7CiAgICAgICAgc3RhdGUxNC5yZXN1bHQgKz0gIiAiOwogICAgICB9IGVsc2UgaWYgKGNvdW50MiA+IDEpIHsKICAgICAgICBzdGF0ZTE0LnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCJcbiIsIGNvdW50MiAtIDEpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiByZWFkUGxhaW5TY2FsYXIoc3RhdGUxNCwgbm9kZUluZGVudCwgd2l0aGluRmxvd0NvbGxlY3Rpb24pIHsKICAgICAgdmFyIHByZWNlZGluZywgZm9sbG93aW5nLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGhhc1BlbmRpbmdDb250ZW50LCBfbGluZSwgX2xpbmVTdGFydCwgX2xpbmVJbmRlbnQsIF9raW5kID0gc3RhdGUxNC5raW5kLCBfcmVzdWx0ID0gc3RhdGUxNC5yZXN1bHQsIGNoOwogICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgaWYgKGlzX1dTX09SX0VPTChjaCkgfHwgaXNfRkxPV19JTkRJQ0FUT1IoY2gpIHx8IGNoID09PSAzNSB8fCBjaCA9PT0gMzggfHwgY2ggPT09IDQyIHx8IGNoID09PSAzMyB8fCBjaCA9PT0gMTI0IHx8IGNoID09PSA2MiB8fCBjaCA9PT0gMzkgfHwgY2ggPT09IDM0IHx8IGNoID09PSAzNyB8fCBjaCA9PT0gNjQgfHwgY2ggPT09IDk2KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChjaCA9PT0gNjMgfHwgY2ggPT09IDQ1KSB7CiAgICAgICAgZm9sbG93aW5nID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24gKyAxKTsKICAgICAgICBpZiAoaXNfV1NfT1JfRU9MKGZvbGxvd2luZykgfHwgd2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNfRkxPV19JTkRJQ0FUT1IoZm9sbG93aW5nKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBzdGF0ZTE0LmtpbmQgPSAic2NhbGFyIjsKICAgICAgc3RhdGUxNC5yZXN1bHQgPSAiIjsKICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlMTQucG9zaXRpb247CiAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gZmFsc2U7CiAgICAgIHdoaWxlIChjaCAhPT0gMCkgewogICAgICAgIGlmIChjaCA9PT0gNTgpIHsKICAgICAgICAgIGZvbGxvd2luZyA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uICsgMSk7CiAgICAgICAgICBpZiAoaXNfV1NfT1JfRU9MKGZvbGxvd2luZykgfHwgd2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNfRkxPV19JTkRJQ0FUT1IoZm9sbG93aW5nKSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAzNSkgewogICAgICAgICAgcHJlY2VkaW5nID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24gLSAxKTsKICAgICAgICAgIGlmIChpc19XU19PUl9FT0wocHJlY2VkaW5nKSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHN0YXRlMTQucG9zaXRpb24gPT09IHN0YXRlMTQubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZTE0KSB8fCB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihjaCkpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSBpZiAoaXNfRU9MKGNoKSkgewogICAgICAgICAgX2xpbmUgPSBzdGF0ZTE0LmxpbmU7CiAgICAgICAgICBfbGluZVN0YXJ0ID0gc3RhdGUxNC5saW5lU3RhcnQ7CiAgICAgICAgICBfbGluZUluZGVudCA9IHN0YXRlMTQubGluZUluZGVudDsKICAgICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxNCwgZmFsc2UsIC0xKTsKICAgICAgICAgIGlmIChzdGF0ZTE0LmxpbmVJbmRlbnQgPj0gbm9kZUluZGVudCkgewogICAgICAgICAgICBoYXNQZW5kaW5nQ29udGVudCA9IHRydWU7CiAgICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlMTQucG9zaXRpb24gPSBjYXB0dXJlRW5kOwogICAgICAgICAgICBzdGF0ZTE0LmxpbmUgPSBfbGluZTsKICAgICAgICAgICAgc3RhdGUxNC5saW5lU3RhcnQgPSBfbGluZVN0YXJ0OwogICAgICAgICAgICBzdGF0ZTE0LmxpbmVJbmRlbnQgPSBfbGluZUluZGVudDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChoYXNQZW5kaW5nQ29udGVudCkgewogICAgICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUxNCwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBmYWxzZSk7CiAgICAgICAgICB3cml0ZUZvbGRlZExpbmVzKHN0YXRlMTQsIHN0YXRlMTQubGluZSAtIF9saW5lKTsKICAgICAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZTE0LnBvc2l0aW9uOwogICAgICAgICAgaGFzUGVuZGluZ0NvbnRlbnQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc19XSElURV9TUEFDRShjaCkpIHsKICAgICAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZTE0LnBvc2l0aW9uICsgMTsKICAgICAgICB9CiAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgfQogICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZTE0LCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTsKICAgICAgaWYgKHN0YXRlMTQucmVzdWx0KSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgc3RhdGUxNC5raW5kID0gX2tpbmQ7CiAgICAgIHN0YXRlMTQucmVzdWx0ID0gX3Jlc3VsdDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZTE0LCBub2RlSW5kZW50KSB7CiAgICAgIHZhciBjaCwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kOwogICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgaWYgKGNoICE9PSAzOSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBzdGF0ZTE0LmtpbmQgPSAic2NhbGFyIjsKICAgICAgc3RhdGUxNC5yZXN1bHQgPSAiIjsKICAgICAgc3RhdGUxNC5wb3NpdGlvbisrOwogICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUxNC5wb3NpdGlvbjsKICAgICAgd2hpbGUgKChjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKSkgIT09IDApIHsKICAgICAgICBpZiAoY2ggPT09IDM5KSB7CiAgICAgICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZTE0LCBjYXB0dXJlU3RhcnQsIHN0YXRlMTQucG9zaXRpb24sIHRydWUpOwogICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICAgIGlmIChjaCA9PT0gMzkpIHsKICAgICAgICAgICAgY2FwdHVyZVN0YXJ0ID0gc3RhdGUxNC5wb3NpdGlvbjsKICAgICAgICAgICAgc3RhdGUxNC5wb3NpdGlvbisrOwogICAgICAgICAgICBjYXB0dXJlRW5kID0gc3RhdGUxNC5wb3NpdGlvbjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoaXNfRU9MKGNoKSkgewogICAgICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUxNCwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCB0cnVlKTsKICAgICAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUxNCwgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTE0LCBmYWxzZSwgbm9kZUluZGVudCkpOwogICAgICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlMTQucG9zaXRpb247CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZTE0LnBvc2l0aW9uID09PSBzdGF0ZTE0LmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUxNCkpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RhdGUxNC5wb3NpdGlvbisrOwogICAgICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlMTQucG9zaXRpb247CiAgICAgICAgfQogICAgICB9CiAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIik7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkRG91YmxlUXVvdGVkU2NhbGFyKHN0YXRlMTQsIG5vZGVJbmRlbnQpIHsKICAgICAgdmFyIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgaGV4TGVuZ3RoLCBoZXhSZXN1bHQsIHRtcCwgY2g7CiAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICBpZiAoY2ggIT09IDM0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHN0YXRlMTQua2luZCA9ICJzY2FsYXIiOwogICAgICBzdGF0ZTE0LnJlc3VsdCA9ICIiOwogICAgICBzdGF0ZTE0LnBvc2l0aW9uKys7CiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZTE0LnBvc2l0aW9uOwogICAgICB3aGlsZSAoKGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pKSAhPT0gMCkgewogICAgICAgIGlmIChjaCA9PT0gMzQpIHsKICAgICAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlMTQsIGNhcHR1cmVTdGFydCwgc3RhdGUxNC5wb3NpdGlvbiwgdHJ1ZSk7CiAgICAgICAgICBzdGF0ZTE0LnBvc2l0aW9uKys7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgaWYgKGNoID09PSA5MikgewogICAgICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUxNCwgY2FwdHVyZVN0YXJ0LCBzdGF0ZTE0LnBvc2l0aW9uLCB0cnVlKTsKICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgICAgICBpZiAoaXNfRU9MKGNoKSkgewogICAgICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIGZhbHNlLCBub2RlSW5kZW50KTsKICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPCAyNTYgJiYgc2ltcGxlRXNjYXBlQ2hlY2tbY2hdKSB7CiAgICAgICAgICAgIHN0YXRlMTQucmVzdWx0ICs9IHNpbXBsZUVzY2FwZU1hcFtjaF07CiAgICAgICAgICAgIHN0YXRlMTQucG9zaXRpb24rKzsKICAgICAgICAgIH0gZWxzZSBpZiAoKHRtcCA9IGVzY2FwZWRIZXhMZW4oY2gpKSA+IDApIHsKICAgICAgICAgICAgaGV4TGVuZ3RoID0gdG1wOwogICAgICAgICAgICBoZXhSZXN1bHQgPSAwOwogICAgICAgICAgICBmb3IgKDsgaGV4TGVuZ3RoID4gMDsgaGV4TGVuZ3RoLS0pIHsKICAgICAgICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICAgICAgICAgIGlmICgodG1wID0gZnJvbUhleENvZGUoY2gpKSA+PSAwKSB7CiAgICAgICAgICAgICAgICBoZXhSZXN1bHQgPSAoaGV4UmVzdWx0IDw8IDQpICsgdG1wOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAiZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHN0YXRlMTQucmVzdWx0ICs9IGNoYXJGcm9tQ29kZXBvaW50KGhleFJlc3VsdCk7CiAgICAgICAgICAgIHN0YXRlMTQucG9zaXRpb24rKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJ1bmtub3duIGVzY2FwZSBzZXF1ZW5jZSIpOwogICAgICAgICAgfQogICAgICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlMTQucG9zaXRpb247CiAgICAgICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7CiAgICAgICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZTE0LCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpOwogICAgICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZTE0LCBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIGZhbHNlLCBub2RlSW5kZW50KSk7CiAgICAgICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUxNC5wb3NpdGlvbjsKICAgICAgICB9IGVsc2UgaWYgKHN0YXRlMTQucG9zaXRpb24gPT09IHN0YXRlMTQubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZTE0KSkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdGF0ZTE0LnBvc2l0aW9uKys7CiAgICAgICAgICBjYXB0dXJlRW5kID0gc3RhdGUxNC5wb3NpdGlvbjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXIiKTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWRGbG93Q29sbGVjdGlvbihzdGF0ZTE0LCBub2RlSW5kZW50KSB7CiAgICAgIHZhciByZWFkTmV4dCA9IHRydWUsIF9saW5lLCBfdGFnID0gc3RhdGUxNC50YWcsIF9yZXN1bHQsIF9hbmNob3IgPSBzdGF0ZTE0LmFuY2hvciwgZm9sbG93aW5nLCB0ZXJtaW5hdG9yLCBpc1BhaXIsIGlzRXhwbGljaXRQYWlyLCBpc01hcHBpbmcsIG92ZXJyaWRhYmxlS2V5cyA9IHt9LCBrZXlOb2RlLCBrZXlUYWcsIHZhbHVlTm9kZSwgY2g7CiAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICBpZiAoY2ggPT09IDkxKSB7CiAgICAgICAgdGVybWluYXRvciA9IDkzOwogICAgICAgIGlzTWFwcGluZyA9IGZhbHNlOwogICAgICAgIF9yZXN1bHQgPSBbXTsKICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMTIzKSB7CiAgICAgICAgdGVybWluYXRvciA9IDEyNTsKICAgICAgICBpc01hcHBpbmcgPSB0cnVlOwogICAgICAgIF9yZXN1bHQgPSB7fTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlMTQuYW5jaG9yICE9PSBudWxsKSB7CiAgICAgICAgc3RhdGUxNC5hbmNob3JNYXBbc3RhdGUxNC5hbmNob3JdID0gX3Jlc3VsdDsKICAgICAgfQogICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICB3aGlsZSAoY2ggIT09IDApIHsKICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIG5vZGVJbmRlbnQpOwogICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgIGlmIChjaCA9PT0gdGVybWluYXRvcikgewogICAgICAgICAgc3RhdGUxNC5wb3NpdGlvbisrOwogICAgICAgICAgc3RhdGUxNC50YWcgPSBfdGFnOwogICAgICAgICAgc3RhdGUxNC5hbmNob3IgPSBfYW5jaG9yOwogICAgICAgICAgc3RhdGUxNC5raW5kID0gaXNNYXBwaW5nID8gIm1hcHBpbmciIDogInNlcXVlbmNlIjsKICAgICAgICAgIHN0YXRlMTQucmVzdWx0ID0gX3Jlc3VsdDsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAoIXJlYWROZXh0KSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAibWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXMiKTsKICAgICAgICB9CiAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7CiAgICAgICAgaXNQYWlyID0gaXNFeHBsaWNpdFBhaXIgPSBmYWxzZTsKICAgICAgICBpZiAoY2ggPT09IDYzKSB7CiAgICAgICAgICBmb2xsb3dpbmcgPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbiArIDEpOwogICAgICAgICAgaWYgKGlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7CiAgICAgICAgICAgIGlzUGFpciA9IGlzRXhwbGljaXRQYWlyID0gdHJ1ZTsKICAgICAgICAgICAgc3RhdGUxNC5wb3NpdGlvbisrOwogICAgICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIG5vZGVJbmRlbnQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfbGluZSA9IHN0YXRlMTQubGluZTsKICAgICAgICBjb21wb3NlTm9kZShzdGF0ZTE0LCBub2RlSW5kZW50LCBDT05URVhUX0ZMT1dfSU4sIGZhbHNlLCB0cnVlKTsKICAgICAgICBrZXlUYWcgPSBzdGF0ZTE0LnRhZzsKICAgICAgICBrZXlOb2RlID0gc3RhdGUxNC5yZXN1bHQ7CiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTE0LCB0cnVlLCBub2RlSW5kZW50KTsKICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICBpZiAoKGlzRXhwbGljaXRQYWlyIHx8IHN0YXRlMTQubGluZSA9PT0gX2xpbmUpICYmIGNoID09PSA1OCkgewogICAgICAgICAgaXNQYWlyID0gdHJ1ZTsKICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIG5vZGVJbmRlbnQpOwogICAgICAgICAgY29tcG9zZU5vZGUoc3RhdGUxNCwgbm9kZUluZGVudCwgQ09OVEVYVF9GTE9XX0lOLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICB2YWx1ZU5vZGUgPSBzdGF0ZTE0LnJlc3VsdDsKICAgICAgICB9CiAgICAgICAgaWYgKGlzTWFwcGluZykgewogICAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZTE0LCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgdmFsdWVOb2RlKTsKICAgICAgICB9IGVsc2UgaWYgKGlzUGFpcikgewogICAgICAgICAgX3Jlc3VsdC5wdXNoKHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUxNCwgbnVsbCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfcmVzdWx0LnB1c2goa2V5Tm9kZSk7CiAgICAgICAgfQogICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxNCwgdHJ1ZSwgbm9kZUluZGVudCk7CiAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgICAgaWYgKGNoID09PSA0NCkgewogICAgICAgICAgcmVhZE5leHQgPSB0cnVlOwogICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVhZE5leHQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZmxvdyBjb2xsZWN0aW9uIik7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkQmxvY2tTY2FsYXIoc3RhdGUxNCwgbm9kZUluZGVudCkgewogICAgICB2YXIgY2FwdHVyZVN0YXJ0LCBmb2xkaW5nLCBjaG9tcGluZyA9IENIT01QSU5HX0NMSVAsIGRpZFJlYWRDb250ZW50ID0gZmFsc2UsIGRldGVjdGVkSW5kZW50ID0gZmFsc2UsIHRleHRJbmRlbnQgPSBub2RlSW5kZW50LCBlbXB0eUxpbmVzID0gMCwgYXRNb3JlSW5kZW50ZWQgPSBmYWxzZSwgdG1wLCBjaDsKICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgIGlmIChjaCA9PT0gMTI0KSB7CiAgICAgICAgZm9sZGluZyA9IGZhbHNlOwogICAgICB9IGVsc2UgaWYgKGNoID09PSA2MikgewogICAgICAgIGZvbGRpbmcgPSB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBzdGF0ZTE0LmtpbmQgPSAic2NhbGFyIjsKICAgICAgc3RhdGUxNC5yZXN1bHQgPSAiIjsKICAgICAgd2hpbGUgKGNoICE9PSAwKSB7CiAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICBpZiAoY2ggPT09IDQzIHx8IGNoID09PSA0NSkgewogICAgICAgICAgaWYgKENIT01QSU5HX0NMSVAgPT09IGNob21waW5nKSB7CiAgICAgICAgICAgIGNob21waW5nID0gY2ggPT09IDQzID8gQ0hPTVBJTkdfS0VFUCA6IENIT01QSU5HX1NUUklQOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgInJlcGVhdCBvZiBhIGNob21waW5nIG1vZGUgaWRlbnRpZmllciIpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoKHRtcCA9IGZyb21EZWNpbWFsQ29kZShjaCkpID49IDApIHsKICAgICAgICAgIGlmICh0bXAgPT09IDApIHsKICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImJhZCBleHBsaWNpdCBpbmRlbnRhdGlvbiB3aWR0aCBvZiBhIGJsb2NrIHNjYWxhcjsgaXQgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmUiKTsKICAgICAgICAgIH0gZWxzZSBpZiAoIWRldGVjdGVkSW5kZW50KSB7CiAgICAgICAgICAgIHRleHRJbmRlbnQgPSBub2RlSW5kZW50ICsgdG1wIC0gMTsKICAgICAgICAgICAgZGV0ZWN0ZWRJbmRlbnQgPSB0cnVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgInJlcGVhdCBvZiBhbiBpbmRlbnRhdGlvbiB3aWR0aCBpZGVudGlmaWVyIik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7CiAgICAgICAgZG8gewogICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICB9IHdoaWxlIChpc19XSElURV9TUEFDRShjaCkpOwogICAgICAgIGlmIChjaCA9PT0gMzUpIHsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICAgIH0gd2hpbGUgKCFpc19FT0woY2gpICYmIGNoICE9PSAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgd2hpbGUgKGNoICE9PSAwKSB7CiAgICAgICAgcmVhZExpbmVCcmVhayhzdGF0ZTE0KTsKICAgICAgICBzdGF0ZTE0LmxpbmVJbmRlbnQgPSAwOwogICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgIHdoaWxlICgoIWRldGVjdGVkSW5kZW50IHx8IHN0YXRlMTQubGluZUluZGVudCA8IHRleHRJbmRlbnQpICYmIGNoID09PSAzMikgewogICAgICAgICAgc3RhdGUxNC5saW5lSW5kZW50Kys7CiAgICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICBpZiAoIWRldGVjdGVkSW5kZW50ICYmIHN0YXRlMTQubGluZUluZGVudCA+IHRleHRJbmRlbnQpIHsKICAgICAgICAgIHRleHRJbmRlbnQgPSBzdGF0ZTE0LmxpbmVJbmRlbnQ7CiAgICAgICAgfQogICAgICAgIGlmIChpc19FT0woY2gpKSB7CiAgICAgICAgICBlbXB0eUxpbmVzKys7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlMTQubGluZUluZGVudCA8IHRleHRJbmRlbnQpIHsKICAgICAgICAgIGlmIChjaG9tcGluZyA9PT0gQ0hPTVBJTkdfS0VFUCkgewogICAgICAgICAgICBzdGF0ZTE0LnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCJcbiIsIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzKTsKICAgICAgICAgIH0gZWxzZSBpZiAoY2hvbXBpbmcgPT09IENIT01QSU5HX0NMSVApIHsKICAgICAgICAgICAgaWYgKGRpZFJlYWRDb250ZW50KSB7CiAgICAgICAgICAgICAgc3RhdGUxNC5yZXN1bHQgKz0gIlxuIjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChmb2xkaW5nKSB7CiAgICAgICAgICBpZiAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7CiAgICAgICAgICAgIGF0TW9yZUluZGVudGVkID0gdHJ1ZTsKICAgICAgICAgICAgc3RhdGUxNC5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgiXG4iLCBkaWRSZWFkQ29udGVudCA/IDEgKyBlbXB0eUxpbmVzIDogZW1wdHlMaW5lcyk7CiAgICAgICAgICB9IGVsc2UgaWYgKGF0TW9yZUluZGVudGVkKSB7CiAgICAgICAgICAgIGF0TW9yZUluZGVudGVkID0gZmFsc2U7CiAgICAgICAgICAgIHN0YXRlMTQucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoIlxuIiwgZW1wdHlMaW5lcyArIDEpOwogICAgICAgICAgfSBlbHNlIGlmIChlbXB0eUxpbmVzID09PSAwKSB7CiAgICAgICAgICAgIGlmIChkaWRSZWFkQ29udGVudCkgewogICAgICAgICAgICAgIHN0YXRlMTQucmVzdWx0ICs9ICIgIjsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUxNC5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgiXG4iLCBlbXB0eUxpbmVzKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RhdGUxNC5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgiXG4iLCBkaWRSZWFkQ29udGVudCA/IDEgKyBlbXB0eUxpbmVzIDogZW1wdHlMaW5lcyk7CiAgICAgICAgfQogICAgICAgIGRpZFJlYWRDb250ZW50ID0gdHJ1ZTsKICAgICAgICBkZXRlY3RlZEluZGVudCA9IHRydWU7CiAgICAgICAgZW1wdHlMaW5lcyA9IDA7CiAgICAgICAgY2FwdHVyZVN0YXJ0ID0gc3RhdGUxNC5wb3NpdGlvbjsKICAgICAgICB3aGlsZSAoIWlzX0VPTChjaCkgJiYgY2ggIT09IDApIHsKICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgICAgfQogICAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlMTQsIGNhcHR1cmVTdGFydCwgc3RhdGUxNC5wb3NpdGlvbiwgZmFsc2UpOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gcmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUxNCwgbm9kZUluZGVudCkgewogICAgICB2YXIgX2xpbmUsIF90YWcgPSBzdGF0ZTE0LnRhZywgX2FuY2hvciA9IHN0YXRlMTQuYW5jaG9yLCBfcmVzdWx0ID0gW10sIGZvbGxvd2luZywgZGV0ZWN0ZWQgPSBmYWxzZSwgY2g7CiAgICAgIGlmIChzdGF0ZTE0LmFuY2hvciAhPT0gbnVsbCkgewogICAgICAgIHN0YXRlMTQuYW5jaG9yTWFwW3N0YXRlMTQuYW5jaG9yXSA9IF9yZXN1bHQ7CiAgICAgIH0KICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgIHdoaWxlIChjaCAhPT0gMCkgewogICAgICAgIGlmIChjaCAhPT0gNDUpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBmb2xsb3dpbmcgPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbiArIDEpOwogICAgICAgIGlmICghaXNfV1NfT1JfRU9MKGZvbGxvd2luZykpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBkZXRlY3RlZCA9IHRydWU7CiAgICAgICAgc3RhdGUxNC5wb3NpdGlvbisrOwogICAgICAgIGlmIChza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKSkgewogICAgICAgICAgaWYgKHN0YXRlMTQubGluZUluZGVudCA8PSBub2RlSW5kZW50KSB7CiAgICAgICAgICAgIF9yZXN1bHQucHVzaChudWxsKTsKICAgICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfbGluZSA9IHN0YXRlMTQubGluZTsKICAgICAgICBjb21wb3NlTm9kZShzdGF0ZTE0LCBub2RlSW5kZW50LCBDT05URVhUX0JMT0NLX0lOLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgX3Jlc3VsdC5wdXNoKHN0YXRlMTQucmVzdWx0KTsKICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKTsKICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICBpZiAoKHN0YXRlMTQubGluZSA9PT0gX2xpbmUgfHwgc3RhdGUxNC5saW5lSW5kZW50ID4gbm9kZUluZGVudCkgJiYgY2ggIT09IDApIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJiYWQgaW5kZW50YXRpb24gb2YgYSBzZXF1ZW5jZSBlbnRyeSIpOwogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUxNC5saW5lSW5kZW50IDwgbm9kZUluZGVudCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChkZXRlY3RlZCkgewogICAgICAgIHN0YXRlMTQudGFnID0gX3RhZzsKICAgICAgICBzdGF0ZTE0LmFuY2hvciA9IF9hbmNob3I7CiAgICAgICAgc3RhdGUxNC5raW5kID0gInNlcXVlbmNlIjsKICAgICAgICBzdGF0ZTE0LnJlc3VsdCA9IF9yZXN1bHQ7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gcmVhZEJsb2NrTWFwcGluZyhzdGF0ZTE0LCBub2RlSW5kZW50LCBmbG93SW5kZW50KSB7CiAgICAgIHZhciBmb2xsb3dpbmcsIGFsbG93Q29tcGFjdCwgX2xpbmUsIF9wb3MsIF90YWcgPSBzdGF0ZTE0LnRhZywgX2FuY2hvciA9IHN0YXRlMTQuYW5jaG9yLCBfcmVzdWx0ID0ge30sIG92ZXJyaWRhYmxlS2V5cyA9IHt9LCBrZXlUYWcgPSBudWxsLCBrZXlOb2RlID0gbnVsbCwgdmFsdWVOb2RlID0gbnVsbCwgYXRFeHBsaWNpdEtleSA9IGZhbHNlLCBkZXRlY3RlZCA9IGZhbHNlLCBjaDsKICAgICAgaWYgKHN0YXRlMTQuYW5jaG9yICE9PSBudWxsKSB7CiAgICAgICAgc3RhdGUxNC5hbmNob3JNYXBbc3RhdGUxNC5hbmNob3JdID0gX3Jlc3VsdDsKICAgICAgfQogICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgd2hpbGUgKGNoICE9PSAwKSB7CiAgICAgICAgZm9sbG93aW5nID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24gKyAxKTsKICAgICAgICBfbGluZSA9IHN0YXRlMTQubGluZTsKICAgICAgICBfcG9zID0gc3RhdGUxNC5wb3NpdGlvbjsKICAgICAgICBpZiAoKGNoID09PSA2MyB8fCBjaCA9PT0gNTgpICYmIGlzX1dTX09SX0VPTChmb2xsb3dpbmcpKSB7CiAgICAgICAgICBpZiAoY2ggPT09IDYzKSB7CiAgICAgICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7CiAgICAgICAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZTE0LCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCk7CiAgICAgICAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlOwogICAgICAgICAgICBhdEV4cGxpY2l0S2V5ID0gdHJ1ZTsKICAgICAgICAgICAgYWxsb3dDb21wYWN0ID0gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSBpZiAoYXRFeHBsaWNpdEtleSkgewogICAgICAgICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2U7CiAgICAgICAgICAgIGFsbG93Q29tcGFjdCA9IHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAiaW5jb21wbGV0ZSBleHBsaWNpdCBtYXBwaW5nIHBhaXI7IGEga2V5IG5vZGUgaXMgbWlzc2VkOyBvciBmb2xsb3dlZCBieSBhIG5vbi10YWJ1bGF0ZWQgZW1wdHkgbGluZSIpOwogICAgICAgICAgfQogICAgICAgICAgc3RhdGUxNC5wb3NpdGlvbiArPSAxOwogICAgICAgICAgY2ggPSBmb2xsb3dpbmc7CiAgICAgICAgfSBlbHNlIGlmIChjb21wb3NlTm9kZShzdGF0ZTE0LCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfT1VULCBmYWxzZSwgdHJ1ZSkpIHsKICAgICAgICAgIGlmIChzdGF0ZTE0LmxpbmUgPT09IF9saW5lKSB7CiAgICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgICAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7CiAgICAgICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY2ggPT09IDU4KSB7CiAgICAgICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICAgICAgICBpZiAoIWlzX1dTX09SX0VPTChjaCkpIHsKICAgICAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJhIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGV4cGVjdGVkIGFmdGVyIHRoZSBrZXktdmFsdWUgc2VwYXJhdG9yIHdpdGhpbiBhIGJsb2NrIG1hcHBpbmciKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHsKICAgICAgICAgICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUxNCwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIG51bGwpOwogICAgICAgICAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGRldGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2U7CiAgICAgICAgICAgICAgYWxsb3dDb21wYWN0ID0gZmFsc2U7CiAgICAgICAgICAgICAga2V5VGFnID0gc3RhdGUxNC50YWc7CiAgICAgICAgICAgICAga2V5Tm9kZSA9IHN0YXRlMTQucmVzdWx0OwogICAgICAgICAgICB9IGVsc2UgaWYgKGRldGVjdGVkKSB7CiAgICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImNhbiBub3QgcmVhZCBhbiBpbXBsaWNpdCBtYXBwaW5nIHBhaXI7IGEgY29sb24gaXMgbWlzc2VkIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgc3RhdGUxNC50YWcgPSBfdGFnOwogICAgICAgICAgICAgIHN0YXRlMTQuYW5jaG9yID0gX2FuY2hvcjsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChkZXRlY3RlZCkgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAiY2FuIG5vdCByZWFkIGEgYmxvY2sgbWFwcGluZyBlbnRyeTsgYSBtdWx0aWxpbmUga2V5IG1heSBub3QgYmUgYW4gaW1wbGljaXQga2V5Iik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGF0ZTE0LnRhZyA9IF90YWc7CiAgICAgICAgICAgIHN0YXRlMTQuYW5jaG9yID0gX2FuY2hvcjsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhdGUxNC5saW5lID09PSBfbGluZSB8fCBzdGF0ZTE0LmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSB7CiAgICAgICAgICBpZiAoY29tcG9zZU5vZGUoc3RhdGUxNCwgbm9kZUluZGVudCwgQ09OVEVYVF9CTE9DS19PVVQsIHRydWUsIGFsbG93Q29tcGFjdCkpIHsKICAgICAgICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHsKICAgICAgICAgICAgICBrZXlOb2RlID0gc3RhdGUxNC5yZXN1bHQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdmFsdWVOb2RlID0gc3RhdGUxNC5yZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmICghYXRFeHBsaWNpdEtleSkgewogICAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlMTQsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUsIF9saW5lLCBfcG9zKTsKICAgICAgICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKTsKICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhdGUxNC5saW5lSW5kZW50ID4gbm9kZUluZGVudCAmJiBjaCAhPT0gMCkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImJhZCBpbmRlbnRhdGlvbiBvZiBhIG1hcHBpbmcgZW50cnkiKTsKICAgICAgICB9IGVsc2UgaWYgKHN0YXRlMTQubGluZUluZGVudCA8IG5vZGVJbmRlbnQpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoYXRFeHBsaWNpdEtleSkgewogICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUxNCwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIG51bGwpOwogICAgICB9CiAgICAgIGlmIChkZXRlY3RlZCkgewogICAgICAgIHN0YXRlMTQudGFnID0gX3RhZzsKICAgICAgICBzdGF0ZTE0LmFuY2hvciA9IF9hbmNob3I7CiAgICAgICAgc3RhdGUxNC5raW5kID0gIm1hcHBpbmciOwogICAgICAgIHN0YXRlMTQucmVzdWx0ID0gX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gZGV0ZWN0ZWQ7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkVGFnUHJvcGVydHkoc3RhdGUxNCkgewogICAgICB2YXIgX3Bvc2l0aW9uLCBpc1ZlcmJhdGltID0gZmFsc2UsIGlzTmFtZWQgPSBmYWxzZSwgdGFnSGFuZGxlLCB0YWdOYW1lLCBjaDsKICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgIGlmIChjaCAhPT0gMzMpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKHN0YXRlMTQudGFnICE9PSBudWxsKSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImR1cGxpY2F0aW9uIG9mIGEgdGFnIHByb3BlcnR5Iik7CiAgICAgIH0KICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgaWYgKGNoID09PSA2MCkgewogICAgICAgIGlzVmVyYmF0aW0gPSB0cnVlOwogICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDMzKSB7CiAgICAgICAgaXNOYW1lZCA9IHRydWU7CiAgICAgICAgdGFnSGFuZGxlID0gIiEhIjsKICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIHRhZ0hhbmRsZSA9ICIhIjsKICAgICAgfQogICAgICBfcG9zaXRpb24gPSBzdGF0ZTE0LnBvc2l0aW9uOwogICAgICBpZiAoaXNWZXJiYXRpbSkgewogICAgICAgIGRvIHsKICAgICAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgICAgfSB3aGlsZSAoY2ggIT09IDAgJiYgY2ggIT09IDYyKTsKICAgICAgICBpZiAoc3RhdGUxNC5wb3NpdGlvbiA8IHN0YXRlMTQubGVuZ3RoKSB7CiAgICAgICAgICB0YWdOYW1lID0gc3RhdGUxNC5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgdmVyYmF0aW0gdGFnIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkgewogICAgICAgICAgaWYgKGNoID09PSAzMykgewogICAgICAgICAgICBpZiAoIWlzTmFtZWQpIHsKICAgICAgICAgICAgICB0YWdIYW5kbGUgPSBzdGF0ZTE0LmlucHV0LnNsaWNlKF9wb3NpdGlvbiAtIDEsIHN0YXRlMTQucG9zaXRpb24gKyAxKTsKICAgICAgICAgICAgICBpZiAoIVBBVFRFUk5fVEFHX0hBTkRMRS50ZXN0KHRhZ0hhbmRsZSkpIHsKICAgICAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJuYW1lZCB0YWcgaGFuZGxlIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVycyIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpc05hbWVkID0gdHJ1ZTsKICAgICAgICAgICAgICBfcG9zaXRpb24gPSBzdGF0ZTE0LnBvc2l0aW9uICsgMTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBleGNsYW1hdGlvbiBtYXJrcyIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICB0YWdOYW1lID0gc3RhdGUxNC5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgIGlmIChQQVRURVJOX0ZMT1dfSU5ESUNBVE9SUy50ZXN0KHRhZ05hbWUpKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBmbG93IGluZGljYXRvciBjaGFyYWN0ZXJzIik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YWdOYW1lICYmICFQQVRURVJOX1RBR19VUkkudGVzdCh0YWdOYW1lKSkgewogICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJ0YWcgbmFtZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnM6ICIgKyB0YWdOYW1lKTsKICAgICAgfQogICAgICBpZiAoaXNWZXJiYXRpbSkgewogICAgICAgIHN0YXRlMTQudGFnID0gdGFnTmFtZTsKICAgICAgfSBlbHNlIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZTE0LnRhZ01hcCwgdGFnSGFuZGxlKSkgewogICAgICAgIHN0YXRlMTQudGFnID0gc3RhdGUxNC50YWdNYXBbdGFnSGFuZGxlXSArIHRhZ05hbWU7CiAgICAgIH0gZWxzZSBpZiAodGFnSGFuZGxlID09PSAiISIpIHsKICAgICAgICBzdGF0ZTE0LnRhZyA9ICIhIiArIHRhZ05hbWU7CiAgICAgIH0gZWxzZSBpZiAodGFnSGFuZGxlID09PSAiISEiKSB7CiAgICAgICAgc3RhdGUxNC50YWcgPSAidGFnOnlhbWwub3JnLDIwMDI6IiArIHRhZ05hbWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgJ3VuZGVjbGFyZWQgdGFnIGhhbmRsZSAiJyArIHRhZ0hhbmRsZSArICciJyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkQW5jaG9yUHJvcGVydHkoc3RhdGUxNCkgewogICAgICB2YXIgX3Bvc2l0aW9uLCBjaDsKICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgIGlmIChjaCAhPT0gMzgpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKHN0YXRlMTQuYW5jaG9yICE9PSBudWxsKSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImR1cGxpY2F0aW9uIG9mIGFuIGFuY2hvciBwcm9wZXJ0eSIpOwogICAgICB9CiAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgIF9wb3NpdGlvbiA9IHN0YXRlMTQucG9zaXRpb247CiAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7CiAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgfQogICAgICBpZiAoc3RhdGUxNC5wb3NpdGlvbiA9PT0gX3Bvc2l0aW9uKSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgIm5hbWUgb2YgYW4gYW5jaG9yIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKTsKICAgICAgfQogICAgICBzdGF0ZTE0LmFuY2hvciA9IHN0YXRlMTQuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkQWxpYXMoc3RhdGUxNCkgewogICAgICB2YXIgX3Bvc2l0aW9uLCBhbGlhcywgY2g7CiAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pOwogICAgICBpZiAoY2ggIT09IDQyKSByZXR1cm4gZmFsc2U7CiAgICAgIGNoID0gc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxNC5wb3NpdGlvbik7CiAgICAgIF9wb3NpdGlvbiA9IHN0YXRlMTQucG9zaXRpb247CiAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSAmJiAhaXNfRkxPV19JTkRJQ0FUT1IoY2gpKSB7CiAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgfQogICAgICBpZiAoc3RhdGUxNC5wb3NpdGlvbiA9PT0gX3Bvc2l0aW9uKSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgIm5hbWUgb2YgYW4gYWxpYXMgbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlciIpOwogICAgICB9CiAgICAgIGFsaWFzID0gc3RhdGUxNC5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlMTQucG9zaXRpb24pOwogICAgICBpZiAoIV9oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlMTQuYW5jaG9yTWFwLCBhbGlhcykpIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAndW5pZGVudGlmaWVkIGFsaWFzICInICsgYWxpYXMgKyAnIicpOwogICAgICB9CiAgICAgIHN0YXRlMTQucmVzdWx0ID0gc3RhdGUxNC5hbmNob3JNYXBbYWxpYXNdOwogICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBjb21wb3NlTm9kZShzdGF0ZTE0LCBwYXJlbnRJbmRlbnQsIG5vZGVDb250ZXh0LCBhbGxvd1RvU2VlaywgYWxsb3dDb21wYWN0KSB7CiAgICAgIHZhciBhbGxvd0Jsb2NrU3R5bGVzLCBhbGxvd0Jsb2NrU2NhbGFycywgYWxsb3dCbG9ja0NvbGxlY3Rpb25zLCBpbmRlbnRTdGF0dXMgPSAxLCBhdE5ld0xpbmUgPSBmYWxzZSwgaGFzQ29udGVudCA9IGZhbHNlLCB0eXBlSW5kZXgsIHR5cGVRdWFudGl0eSwgdHlwZTUsIGZsb3dJbmRlbnQsIGJsb2NrSW5kZW50OwogICAgICBpZiAoc3RhdGUxNC5saXN0ZW5lciAhPT0gbnVsbCkgewogICAgICAgIHN0YXRlMTQubGlzdGVuZXIoIm9wZW4iLCBzdGF0ZTE0KTsKICAgICAgfQogICAgICBzdGF0ZTE0LnRhZyA9IG51bGw7CiAgICAgIHN0YXRlMTQuYW5jaG9yID0gbnVsbDsKICAgICAgc3RhdGUxNC5raW5kID0gbnVsbDsKICAgICAgc3RhdGUxNC5yZXN1bHQgPSBudWxsOwogICAgICBhbGxvd0Jsb2NrU3R5bGVzID0gYWxsb3dCbG9ja1NjYWxhcnMgPSBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBDT05URVhUX0JMT0NLX09VVCA9PT0gbm9kZUNvbnRleHQgfHwgQ09OVEVYVF9CTE9DS19JTiA9PT0gbm9kZUNvbnRleHQ7CiAgICAgIGlmIChhbGxvd1RvU2VlaykgewogICAgICAgIGlmIChza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKSkgewogICAgICAgICAgYXROZXdMaW5lID0gdHJ1ZTsKICAgICAgICAgIGlmIChzdGF0ZTE0LmxpbmVJbmRlbnQgPiBwYXJlbnRJbmRlbnQpIHsKICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gMTsKICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUxNC5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHsKICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gMDsKICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUxNC5saW5lSW5kZW50IDwgcGFyZW50SW5kZW50KSB7CiAgICAgICAgICAgIGluZGVudFN0YXR1cyA9IC0xOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaW5kZW50U3RhdHVzID09PSAxKSB7CiAgICAgICAgd2hpbGUgKHJlYWRUYWdQcm9wZXJ0eShzdGF0ZTE0KSB8fCByZWFkQW5jaG9yUHJvcGVydHkoc3RhdGUxNCkpIHsKICAgICAgICAgIGlmIChza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKSkgewogICAgICAgICAgICBhdE5ld0xpbmUgPSB0cnVlOwogICAgICAgICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhbGxvd0Jsb2NrU3R5bGVzOwogICAgICAgICAgICBpZiAoc3RhdGUxNC5saW5lSW5kZW50ID4gcGFyZW50SW5kZW50KSB7CiAgICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gMTsKICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZTE0LmxpbmVJbmRlbnQgPT09IHBhcmVudEluZGVudCkgewogICAgICAgICAgICAgIGluZGVudFN0YXR1cyA9IDA7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUxNC5saW5lSW5kZW50IDwgcGFyZW50SW5kZW50KSB7CiAgICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gLTE7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoYWxsb3dCbG9ja0NvbGxlY3Rpb25zKSB7CiAgICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gYXROZXdMaW5lIHx8IGFsbG93Q29tcGFjdDsKICAgICAgfQogICAgICBpZiAoaW5kZW50U3RhdHVzID09PSAxIHx8IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCkgewogICAgICAgIGlmIChDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0IHx8IENPTlRFWFRfRkxPV19PVVQgPT09IG5vZGVDb250ZXh0KSB7CiAgICAgICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmbG93SW5kZW50ID0gcGFyZW50SW5kZW50ICsgMTsKICAgICAgICB9CiAgICAgICAgYmxvY2tJbmRlbnQgPSBzdGF0ZTE0LnBvc2l0aW9uIC0gc3RhdGUxNC5saW5lU3RhcnQ7CiAgICAgICAgaWYgKGluZGVudFN0YXR1cyA9PT0gMSkgewogICAgICAgICAgaWYgKGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJiAocmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUxNCwgYmxvY2tJbmRlbnQpIHx8IHJlYWRCbG9ja01hcHBpbmcoc3RhdGUxNCwgYmxvY2tJbmRlbnQsIGZsb3dJbmRlbnQpKSB8fCByZWFkRmxvd0NvbGxlY3Rpb24oc3RhdGUxNCwgZmxvd0luZGVudCkpIHsKICAgICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoYWxsb3dCbG9ja1NjYWxhcnMgJiYgcmVhZEJsb2NrU2NhbGFyKHN0YXRlMTQsIGZsb3dJbmRlbnQpIHx8IHJlYWRTaW5nbGVRdW90ZWRTY2FsYXIoc3RhdGUxNCwgZmxvd0luZGVudCkgfHwgcmVhZERvdWJsZVF1b3RlZFNjYWxhcihzdGF0ZTE0LCBmbG93SW5kZW50KSkgewogICAgICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKHJlYWRBbGlhcyhzdGF0ZTE0KSkgewogICAgICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlOwogICAgICAgICAgICAgIGlmIChzdGF0ZTE0LnRhZyAhPT0gbnVsbCB8fCBzdGF0ZTE0LmFuY2hvciAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImFsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKHJlYWRQbGFpblNjYWxhcihzdGF0ZTE0LCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0KSkgewogICAgICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlOwogICAgICAgICAgICAgIGlmIChzdGF0ZTE0LnRhZyA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgc3RhdGUxNC50YWcgPSAiPyI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdGF0ZTE0LmFuY2hvciAhPT0gbnVsbCkgewogICAgICAgICAgICAgIHN0YXRlMTQuYW5jaG9yTWFwW3N0YXRlMTQuYW5jaG9yXSA9IHN0YXRlMTQucmVzdWx0OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChpbmRlbnRTdGF0dXMgPT09IDApIHsKICAgICAgICAgIGhhc0NvbnRlbnQgPSBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgJiYgcmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUxNCwgYmxvY2tJbmRlbnQpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc3RhdGUxNC50YWcgIT09IG51bGwgJiYgc3RhdGUxNC50YWcgIT09ICIhIikgewogICAgICAgIGlmIChzdGF0ZTE0LnRhZyA9PT0gIj8iKSB7CiAgICAgICAgICBpZiAoc3RhdGUxNC5yZXN1bHQgIT09IG51bGwgJiYgc3RhdGUxNC5raW5kICE9PSAic2NhbGFyIikgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAndW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITw/PiB0YWc7IGl0IHNob3VsZCBiZSAic2NhbGFyIiwgbm90ICInICsgc3RhdGUxNC5raW5kICsgJyInKTsKICAgICAgICAgIH0KICAgICAgICAgIGZvciAodHlwZUluZGV4ID0gMCwgdHlwZVF1YW50aXR5ID0gc3RhdGUxNC5pbXBsaWNpdFR5cGVzLmxlbmd0aDsgdHlwZUluZGV4IDwgdHlwZVF1YW50aXR5OyB0eXBlSW5kZXggKz0gMSkgewogICAgICAgICAgICB0eXBlNSA9IHN0YXRlMTQuaW1wbGljaXRUeXBlc1t0eXBlSW5kZXhdOwogICAgICAgICAgICBpZiAodHlwZTUucmVzb2x2ZShzdGF0ZTE0LnJlc3VsdCkpIHsKICAgICAgICAgICAgICBzdGF0ZTE0LnJlc3VsdCA9IHR5cGU1LmNvbnN0cnVjdChzdGF0ZTE0LnJlc3VsdCk7CiAgICAgICAgICAgICAgc3RhdGUxNC50YWcgPSB0eXBlNS50YWc7CiAgICAgICAgICAgICAgaWYgKHN0YXRlMTQuYW5jaG9yICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBzdGF0ZTE0LmFuY2hvck1hcFtzdGF0ZTE0LmFuY2hvcl0gPSBzdGF0ZTE0LnJlc3VsdDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlMTQudHlwZU1hcFtzdGF0ZTE0LmtpbmQgfHwgImZhbGxiYWNrIl0sIHN0YXRlMTQudGFnKSkgewogICAgICAgICAgdHlwZTUgPSBzdGF0ZTE0LnR5cGVNYXBbc3RhdGUxNC5raW5kIHx8ICJmYWxsYmFjayJdW3N0YXRlMTQudGFnXTsKICAgICAgICAgIGlmIChzdGF0ZTE0LnJlc3VsdCAhPT0gbnVsbCAmJiB0eXBlNS5raW5kICE9PSBzdGF0ZTE0LmtpbmQpIHsKICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgInVuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8IiArIHN0YXRlMTQudGFnICsgJz4gdGFnOyBpdCBzaG91bGQgYmUgIicgKyB0eXBlNS5raW5kICsgJyIsIG5vdCAiJyArIHN0YXRlMTQua2luZCArICciJyk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXR5cGU1LnJlc29sdmUoc3RhdGUxNC5yZXN1bHQpKSB7CiAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTQsICJjYW5ub3QgcmVzb2x2ZSBhIG5vZGUgd2l0aCAhPCIgKyBzdGF0ZTE0LnRhZyArICI+IGV4cGxpY2l0IHRhZyIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUxNC5yZXN1bHQgPSB0eXBlNS5jb25zdHJ1Y3Qoc3RhdGUxNC5yZXN1bHQpOwogICAgICAgICAgICBpZiAoc3RhdGUxNC5hbmNob3IgIT09IG51bGwpIHsKICAgICAgICAgICAgICBzdGF0ZTE0LmFuY2hvck1hcFtzdGF0ZTE0LmFuY2hvcl0gPSBzdGF0ZTE0LnJlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAidW5rbm93biB0YWcgITwiICsgc3RhdGUxNC50YWcgKyAiPiIpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc3RhdGUxNC5saXN0ZW5lciAhPT0gbnVsbCkgewogICAgICAgIHN0YXRlMTQubGlzdGVuZXIoImNsb3NlIiwgc3RhdGUxNCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0YXRlMTQudGFnICE9PSBudWxsIHx8IHN0YXRlMTQuYW5jaG9yICE9PSBudWxsIHx8IGhhc0NvbnRlbnQ7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkRG9jdW1lbnQoc3RhdGUxNCkgewogICAgICB2YXIgZG9jdW1lbnRTdGFydCA9IHN0YXRlMTQucG9zaXRpb24sIF9wb3NpdGlvbiwgZGlyZWN0aXZlTmFtZSwgZGlyZWN0aXZlQXJncywgaGFzRGlyZWN0aXZlcyA9IGZhbHNlLCBjaDsKICAgICAgc3RhdGUxNC52ZXJzaW9uID0gbnVsbDsKICAgICAgc3RhdGUxNC5jaGVja0xpbmVCcmVha3MgPSBzdGF0ZTE0LmxlZ2FjeTsKICAgICAgc3RhdGUxNC50YWdNYXAgPSB7fTsKICAgICAgc3RhdGUxNC5hbmNob3JNYXAgPSB7fTsKICAgICAgd2hpbGUgKChjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKSkgIT09IDApIHsKICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKTsKICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICBpZiAoc3RhdGUxNC5saW5lSW5kZW50ID4gMCB8fCBjaCAhPT0gMzcpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBoYXNEaXJlY3RpdmVzID0gdHJ1ZTsKICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICAgIF9wb3NpdGlvbiA9IHN0YXRlMTQucG9zaXRpb247CiAgICAgICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpKSB7CiAgICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICBkaXJlY3RpdmVOYW1lID0gc3RhdGUxNC5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlMTQucG9zaXRpb24pOwogICAgICAgIGRpcmVjdGl2ZUFyZ3MgPSBbXTsKICAgICAgICBpZiAoZGlyZWN0aXZlTmFtZS5sZW5ndGggPCAxKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAiZGlyZWN0aXZlIG5hbWUgbXVzdCBub3QgYmUgbGVzcyB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gbGVuZ3RoIik7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChjaCAhPT0gMCkgewogICAgICAgICAgd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSkgewogICAgICAgICAgICBjaCA9IHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTQucG9zaXRpb24pOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNoID09PSAzNSkgewogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICAgICAgfSB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX0VPTChjaCkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChpc19FT0woY2gpKSBicmVhazsKICAgICAgICAgIF9wb3NpdGlvbiA9IHN0YXRlMTQucG9zaXRpb247CiAgICAgICAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkpIHsKICAgICAgICAgICAgY2ggPSBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTE0LnBvc2l0aW9uKTsKICAgICAgICAgIH0KICAgICAgICAgIGRpcmVjdGl2ZUFyZ3MucHVzaChzdGF0ZTE0LmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUxNC5wb3NpdGlvbikpOwogICAgICAgIH0KICAgICAgICBpZiAoY2ggIT09IDApIHJlYWRMaW5lQnJlYWsoc3RhdGUxNCk7CiAgICAgICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKGRpcmVjdGl2ZUhhbmRsZXJzLCBkaXJlY3RpdmVOYW1lKSkgewogICAgICAgICAgZGlyZWN0aXZlSGFuZGxlcnNbZGlyZWN0aXZlTmFtZV0oc3RhdGUxNCwgZGlyZWN0aXZlTmFtZSwgZGlyZWN0aXZlQXJncyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93V2FybmluZyhzdGF0ZTE0LCAndW5rbm93biBkb2N1bWVudCBkaXJlY3RpdmUgIicgKyBkaXJlY3RpdmVOYW1lICsgJyInKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTE0LCB0cnVlLCAtMSk7CiAgICAgIGlmIChzdGF0ZTE0LmxpbmVJbmRlbnQgPT09IDAgJiYgc3RhdGUxNC5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTQucG9zaXRpb24pID09PSA0NSAmJiBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbiArIDEpID09PSA0NSAmJiBzdGF0ZTE0LmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxNC5wb3NpdGlvbiArIDIpID09PSA0NSkgewogICAgICAgIHN0YXRlMTQucG9zaXRpb24gKz0gMzsKICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKTsKICAgICAgfSBlbHNlIGlmIChoYXNEaXJlY3RpdmVzKSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgImRpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWQiKTsKICAgICAgfQogICAgICBjb21wb3NlTm9kZShzdGF0ZTE0LCBzdGF0ZTE0LmxpbmVJbmRlbnQgLSAxLCBDT05URVhUX0JMT0NLX09VVCwgZmFsc2UsIHRydWUpOwogICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTQsIHRydWUsIC0xKTsKICAgICAgaWYgKHN0YXRlMTQuY2hlY2tMaW5lQnJlYWtzICYmIFBBVFRFUk5fTk9OX0FTQ0lJX0xJTkVfQlJFQUtTLnRlc3Qoc3RhdGUxNC5pbnB1dC5zbGljZShkb2N1bWVudFN0YXJ0LCBzdGF0ZTE0LnBvc2l0aW9uKSkpIHsKICAgICAgICB0aHJvd1dhcm5pbmcoc3RhdGUxNCwgIm5vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudCIpOwogICAgICB9CiAgICAgIHN0YXRlMTQuZG9jdW1lbnRzLnB1c2goc3RhdGUxNC5yZXN1bHQpOwogICAgICBpZiAoc3RhdGUxNC5wb3NpdGlvbiA9PT0gc3RhdGUxNC5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlMTQpKSB7CiAgICAgICAgaWYgKHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKSA9PT0gNDYpIHsKICAgICAgICAgIHN0YXRlMTQucG9zaXRpb24gKz0gMzsKICAgICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxNCwgdHJ1ZSwgLTEpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHN0YXRlMTQucG9zaXRpb24gPCBzdGF0ZTE0Lmxlbmd0aCAtIDEpIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTE0LCAiZW5kIG9mIHRoZSBzdHJlYW0gb3IgYSBkb2N1bWVudCBzZXBhcmF0b3IgaXMgZXhwZWN0ZWQiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGxvYWREb2N1bWVudHMoaW5wdXQsIG9wdGlvbnMpIHsKICAgICAgaW5wdXQgPSBTdHJpbmcoaW5wdXQpOwogICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgaWYgKGlucHV0Lmxlbmd0aCAhPT0gMCkgewogICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KGlucHV0Lmxlbmd0aCAtIDEpICE9PSAxMCAmJiBpbnB1dC5jaGFyQ29kZUF0KGlucHV0Lmxlbmd0aCAtIDEpICE9PSAxMykgewogICAgICAgICAgaW5wdXQgKz0gIlxuIjsKICAgICAgICB9CiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoMCkgPT09IDY1Mjc5KSB7CiAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDEpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgc3RhdGUxNCA9IG5ldyBTdGF0ZShpbnB1dCwgb3B0aW9ucyk7CiAgICAgIHZhciBudWxscG9zID0gaW5wdXQuaW5kZXhPZigiXDAiKTsKICAgICAgaWYgKG51bGxwb3MgIT09IC0xKSB7CiAgICAgICAgc3RhdGUxNC5wb3NpdGlvbiA9IG51bGxwb3M7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxNCwgIm51bGwgYnl0ZSBpcyBub3QgYWxsb3dlZCBpbiBpbnB1dCIpOwogICAgICB9CiAgICAgIHN0YXRlMTQuaW5wdXQgKz0gIlwwIjsKICAgICAgd2hpbGUgKHN0YXRlMTQuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTE0LnBvc2l0aW9uKSA9PT0gMzIpIHsKICAgICAgICBzdGF0ZTE0LmxpbmVJbmRlbnQgKz0gMTsKICAgICAgICBzdGF0ZTE0LnBvc2l0aW9uICs9IDE7CiAgICAgIH0KICAgICAgd2hpbGUgKHN0YXRlMTQucG9zaXRpb24gPCBzdGF0ZTE0Lmxlbmd0aCAtIDEpIHsKICAgICAgICByZWFkRG9jdW1lbnQoc3RhdGUxNCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0YXRlMTQuZG9jdW1lbnRzOwogICAgfQogICAgZnVuY3Rpb24gbG9hZEFsbChpbnB1dCwgaXRlcmF0b3IyLCBvcHRpb25zKSB7CiAgICAgIGlmIChpdGVyYXRvcjIgIT09IG51bGwgJiYgdHlwZW9mIGl0ZXJhdG9yMiA9PT0gIm9iamVjdCIgJiYgdHlwZW9mIG9wdGlvbnMgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgb3B0aW9ucyA9IGl0ZXJhdG9yMjsKICAgICAgICBpdGVyYXRvcjIgPSBudWxsOwogICAgICB9CiAgICAgIHZhciBkb2N1bWVudHMgPSBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKTsKICAgICAgaWYgKHR5cGVvZiBpdGVyYXRvcjIgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICByZXR1cm4gZG9jdW1lbnRzOwogICAgICB9CiAgICAgIGZvciAodmFyIGluZGV4MiA9IDAsIGxlbmd0aCA9IGRvY3VtZW50cy5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBpdGVyYXRvcjIoZG9jdW1lbnRzW2luZGV4Ml0pOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBsb2FkKGlucHV0LCBvcHRpb25zKSB7CiAgICAgIHZhciBkb2N1bWVudHMgPSBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKTsKICAgICAgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9IGVsc2UgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDEpIHsKICAgICAgICByZXR1cm4gZG9jdW1lbnRzWzBdOwogICAgICB9CiAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJleHBlY3RlZCBhIHNpbmdsZSBkb2N1bWVudCBpbiB0aGUgc3RyZWFtLCBidXQgZm91bmQgbW9yZSIpOwogICAgfQogICAgZnVuY3Rpb24gc2FmZUxvYWRBbGwoaW5wdXQsIGl0ZXJhdG9yMiwgb3B0aW9ucykgewogICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yMiA9PT0gIm9iamVjdCIgJiYgaXRlcmF0b3IyICE9PSBudWxsICYmIHR5cGVvZiBvcHRpb25zID09PSAidW5kZWZpbmVkIikgewogICAgICAgIG9wdGlvbnMgPSBpdGVyYXRvcjI7CiAgICAgICAgaXRlcmF0b3IyID0gbnVsbDsKICAgICAgfQogICAgICByZXR1cm4gbG9hZEFsbChpbnB1dCwgaXRlcmF0b3IyLCBjb21tb24uZXh0ZW5kKHsgc2NoZW1hOiBERUZBVUxUX1NBRkVfU0NIRU1BIH0sIG9wdGlvbnMpKTsKICAgIH0KICAgIGZ1bmN0aW9uIHNhZmVMb2FkKGlucHV0LCBvcHRpb25zKSB7CiAgICAgIHJldHVybiBsb2FkKGlucHV0LCBjb21tb24uZXh0ZW5kKHsgc2NoZW1hOiBERUZBVUxUX1NBRkVfU0NIRU1BIH0sIG9wdGlvbnMpKTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzLmxvYWRBbGwgPSBsb2FkQWxsOwogICAgbW9kdWxlLmV4cG9ydHMubG9hZCA9IGxvYWQ7CiAgICBtb2R1bGUuZXhwb3J0cy5zYWZlTG9hZEFsbCA9IHNhZmVMb2FkQWxsOwogICAgbW9kdWxlLmV4cG9ydHMuc2FmZUxvYWQgPSBzYWZlTG9hZDsKICAgIHZhciBpMTE7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9kdW1wZXIuanMKdmFyIHJlcXVpcmVfZHVtcGVyID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9kdW1wZXIuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGNvbW1vbiA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICB2YXIgWUFNTEV4Y2VwdGlvbiA9IHJlcXVpcmVfZXhjZXB0aW9uKCk7CiAgICB2YXIgREVGQVVMVF9GVUxMX1NDSEVNQSA9IHJlcXVpcmVfZGVmYXVsdF9mdWxsKCk7CiAgICB2YXIgREVGQVVMVF9TQUZFX1NDSEVNQSA9IHJlcXVpcmVfZGVmYXVsdF9zYWZlKCk7CiAgICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKICAgIHZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwogICAgdmFyIENIQVJfVEFCID0gOTsKICAgIHZhciBDSEFSX0xJTkVfRkVFRCA9IDEwOwogICAgdmFyIENIQVJfQ0FSUklBR0VfUkVUVVJOID0gMTM7CiAgICB2YXIgQ0hBUl9TUEFDRSA9IDMyOwogICAgdmFyIENIQVJfRVhDTEFNQVRJT04gPSAzMzsKICAgIHZhciBDSEFSX0RPVUJMRV9RVU9URSA9IDM0OwogICAgdmFyIENIQVJfU0hBUlAgPSAzNTsKICAgIHZhciBDSEFSX1BFUkNFTlQgPSAzNzsKICAgIHZhciBDSEFSX0FNUEVSU0FORCA9IDM4OwogICAgdmFyIENIQVJfU0lOR0xFX1FVT1RFID0gMzk7CiAgICB2YXIgQ0hBUl9BU1RFUklTSyA9IDQyOwogICAgdmFyIENIQVJfQ09NTUEgPSA0NDsKICAgIHZhciBDSEFSX01JTlVTID0gNDU7CiAgICB2YXIgQ0hBUl9DT0xPTiA9IDU4OwogICAgdmFyIENIQVJfRVFVQUxTID0gNjE7CiAgICB2YXIgQ0hBUl9HUkVBVEVSX1RIQU4gPSA2MjsKICAgIHZhciBDSEFSX1FVRVNUSU9OID0gNjM7CiAgICB2YXIgQ0hBUl9DT01NRVJDSUFMX0FUID0gNjQ7CiAgICB2YXIgQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUID0gOTE7CiAgICB2YXIgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCA9IDkzOwogICAgdmFyIENIQVJfR1JBVkVfQUNDRU5UID0gOTY7CiAgICB2YXIgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgPSAxMjM7CiAgICB2YXIgQ0hBUl9WRVJUSUNBTF9MSU5FID0gMTI0OwogICAgdmFyIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCA9IDEyNTsKICAgIHZhciBFU0NBUEVfU0VRVUVOQ0VTID0ge307CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzBdID0gIlxcMCI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzddID0gIlxcYSI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzhdID0gIlxcYiI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzldID0gIlxcdCI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzEwXSA9ICJcXG4iOwogICAgRVNDQVBFX1NFUVVFTkNFU1sxMV0gPSAiXFx2IjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbMTJdID0gIlxcZiI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzEzXSA9ICJcXHIiOwogICAgRVNDQVBFX1NFUVVFTkNFU1syN10gPSAiXFxlIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbMzRdID0gJ1xcIic7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzkyXSA9ICJcXFxcIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbMTMzXSA9ICJcXE4iOwogICAgRVNDQVBFX1NFUVVFTkNFU1sxNjBdID0gIlxcXyI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzgyMzJdID0gIlxcTCI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzgyMzNdID0gIlxcUCI7CiAgICB2YXIgREVQUkVDQVRFRF9CT09MRUFOU19TWU5UQVggPSBbCiAgICAgICJ5IiwKICAgICAgIlkiLAogICAgICAieWVzIiwKICAgICAgIlllcyIsCiAgICAgICJZRVMiLAogICAgICAib24iLAogICAgICAiT24iLAogICAgICAiT04iLAogICAgICAibiIsCiAgICAgICJOIiwKICAgICAgIm5vIiwKICAgICAgIk5vIiwKICAgICAgIk5PIiwKICAgICAgIm9mZiIsCiAgICAgICJPZmYiLAogICAgICAiT0ZGIgogICAgXTsKICAgIGZ1bmN0aW9uIGNvbXBpbGVTdHlsZU1hcChzY2hlbWEsIG1hcDcpIHsKICAgICAgdmFyIHJlc3VsdCwga2V5czIsIGluZGV4MiwgbGVuZ3RoLCB0YWcsIHN0eWxlLCB0eXBlNTsKICAgICAgaWYgKG1hcDcgPT09IG51bGwpIHJldHVybiB7fTsKICAgICAgcmVzdWx0ID0ge307CiAgICAgIGtleXMyID0gT2JqZWN0LmtleXMobWFwNyk7CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0ga2V5czIubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgdGFnID0ga2V5czJbaW5kZXgyXTsKICAgICAgICBzdHlsZSA9IFN0cmluZyhtYXA3W3RhZ10pOwogICAgICAgIGlmICh0YWcuc2xpY2UoMCwgMikgPT09ICIhISIpIHsKICAgICAgICAgIHRhZyA9ICJ0YWc6eWFtbC5vcmcsMjAwMjoiICsgdGFnLnNsaWNlKDIpOwogICAgICAgIH0KICAgICAgICB0eXBlNSA9IHNjaGVtYS5jb21waWxlZFR5cGVNYXBbImZhbGxiYWNrIl1bdGFnXTsKICAgICAgICBpZiAodHlwZTUgJiYgX2hhc093blByb3BlcnR5LmNhbGwodHlwZTUuc3R5bGVBbGlhc2VzLCBzdHlsZSkpIHsKICAgICAgICAgIHN0eWxlID0gdHlwZTUuc3R5bGVBbGlhc2VzW3N0eWxlXTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0W3RhZ10gPSBzdHlsZTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gZW5jb2RlSGV4KGNoYXJhY3RlcikgewogICAgICB2YXIgc3RyaW5nMywgaGFuZGxlMywgbGVuZ3RoOwogICAgICBzdHJpbmczID0gY2hhcmFjdGVyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOwogICAgICBpZiAoY2hhcmFjdGVyIDw9IDI1NSkgewogICAgICAgIGhhbmRsZTMgPSAieCI7CiAgICAgICAgbGVuZ3RoID0gMjsKICAgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPD0gNjU1MzUpIHsKICAgICAgICBoYW5kbGUzID0gInUiOwogICAgICAgIGxlbmd0aCA9IDQ7CiAgICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyIDw9IDQyOTQ5NjcyOTUpIHsKICAgICAgICBoYW5kbGUzID0gIlUiOwogICAgICAgIGxlbmd0aCA9IDg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oImNvZGUgcG9pbnQgd2l0aGluIGEgc3RyaW5nIG1heSBub3QgYmUgZ3JlYXRlciB0aGFuIDB4RkZGRkZGRkYiKTsKICAgICAgfQogICAgICByZXR1cm4gIlxcIiArIGhhbmRsZTMgKyBjb21tb24ucmVwZWF0KCIwIiwgbGVuZ3RoIC0gc3RyaW5nMy5sZW5ndGgpICsgc3RyaW5nMzsKICAgIH0KICAgIGZ1bmN0aW9uIFN0YXRlKG9wdGlvbnMpIHsKICAgICAgdGhpcy5zY2hlbWEgPSBvcHRpb25zWyJzY2hlbWEiXSB8fCBERUZBVUxUX0ZVTExfU0NIRU1BOwogICAgICB0aGlzLmluZGVudCA9IE1hdGgubWF4KDEsIG9wdGlvbnNbImluZGVudCJdIHx8IDIpOwogICAgICB0aGlzLm5vQXJyYXlJbmRlbnQgPSBvcHRpb25zWyJub0FycmF5SW5kZW50Il0gfHwgZmFsc2U7CiAgICAgIHRoaXMuc2tpcEludmFsaWQgPSBvcHRpb25zWyJza2lwSW52YWxpZCJdIHx8IGZhbHNlOwogICAgICB0aGlzLmZsb3dMZXZlbCA9IGNvbW1vbi5pc05vdGhpbmcob3B0aW9uc1siZmxvd0xldmVsIl0pID8gLTEgOiBvcHRpb25zWyJmbG93TGV2ZWwiXTsKICAgICAgdGhpcy5zdHlsZU1hcCA9IGNvbXBpbGVTdHlsZU1hcCh0aGlzLnNjaGVtYSwgb3B0aW9uc1sic3R5bGVzIl0gfHwgbnVsbCk7CiAgICAgIHRoaXMuc29ydEtleXMgPSBvcHRpb25zWyJzb3J0S2V5cyJdIHx8IGZhbHNlOwogICAgICB0aGlzLmxpbmVXaWR0aCA9IG9wdGlvbnNbImxpbmVXaWR0aCJdIHx8IDgwOwogICAgICB0aGlzLm5vUmVmcyA9IG9wdGlvbnNbIm5vUmVmcyJdIHx8IGZhbHNlOwogICAgICB0aGlzLm5vQ29tcGF0TW9kZSA9IG9wdGlvbnNbIm5vQ29tcGF0TW9kZSJdIHx8IGZhbHNlOwogICAgICB0aGlzLmNvbmRlbnNlRmxvdyA9IG9wdGlvbnNbImNvbmRlbnNlRmxvdyJdIHx8IGZhbHNlOwogICAgICB0aGlzLmltcGxpY2l0VHlwZXMgPSB0aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0OwogICAgICB0aGlzLmV4cGxpY2l0VHlwZXMgPSB0aGlzLnNjaGVtYS5jb21waWxlZEV4cGxpY2l0OwogICAgICB0aGlzLnRhZyA9IG51bGw7CiAgICAgIHRoaXMucmVzdWx0ID0gIiI7CiAgICAgIHRoaXMuZHVwbGljYXRlcyA9IFtdOwogICAgICB0aGlzLnVzZWREdXBsaWNhdGVzID0gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIGluZGVudFN0cmluZyhzdHJpbmczLCBzcGFjZXMpIHsKICAgICAgdmFyIGluZCA9IGNvbW1vbi5yZXBlYXQoIiAiLCBzcGFjZXMpLCBwb3NpdGlvbjMgPSAwLCBuZXh0MiA9IC0xLCByZXN1bHQgPSAiIiwgbGluZSwgbGVuZ3RoID0gc3RyaW5nMy5sZW5ndGg7CiAgICAgIHdoaWxlIChwb3NpdGlvbjMgPCBsZW5ndGgpIHsKICAgICAgICBuZXh0MiA9IHN0cmluZzMuaW5kZXhPZigiXG4iLCBwb3NpdGlvbjMpOwogICAgICAgIGlmIChuZXh0MiA9PT0gLTEpIHsKICAgICAgICAgIGxpbmUgPSBzdHJpbmczLnNsaWNlKHBvc2l0aW9uMyk7CiAgICAgICAgICBwb3NpdGlvbjMgPSBsZW5ndGg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxpbmUgPSBzdHJpbmczLnNsaWNlKHBvc2l0aW9uMywgbmV4dDIgKyAxKTsKICAgICAgICAgIHBvc2l0aW9uMyA9IG5leHQyICsgMTsKICAgICAgICB9CiAgICAgICAgaWYgKGxpbmUubGVuZ3RoICYmIGxpbmUgIT09ICJcbiIpIHJlc3VsdCArPSBpbmQ7CiAgICAgICAgcmVzdWx0ICs9IGxpbmU7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGdlbmVyYXRlTmV4dExpbmUoc3RhdGUxNCwgbGV2ZWwpIHsKICAgICAgcmV0dXJuICJcbiIgKyBjb21tb24ucmVwZWF0KCIgIiwgc3RhdGUxNC5pbmRlbnQgKiBsZXZlbCk7CiAgICB9CiAgICBmdW5jdGlvbiB0ZXN0SW1wbGljaXRSZXNvbHZpbmcoc3RhdGUxNCwgc3RyKSB7CiAgICAgIHZhciBpbmRleDIsIGxlbmd0aCwgdHlwZTU7CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gc3RhdGUxNC5pbXBsaWNpdFR5cGVzLmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIHR5cGU1ID0gc3RhdGUxNC5pbXBsaWNpdFR5cGVzW2luZGV4Ml07CiAgICAgICAgaWYgKHR5cGU1LnJlc29sdmUoc3RyKSkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjMTEpIHsKICAgICAgcmV0dXJuIGMxMSA9PT0gQ0hBUl9TUEFDRSB8fCBjMTEgPT09IENIQVJfVEFCOwogICAgfQogICAgZnVuY3Rpb24gaXNQcmludGFibGUoYzExKSB7CiAgICAgIHJldHVybiAzMiA8PSBjMTEgJiYgYzExIDw9IDEyNiB8fCAxNjEgPD0gYzExICYmIGMxMSA8PSA1NTI5NSAmJiBjMTEgIT09IDgyMzIgJiYgYzExICE9PSA4MjMzIHx8IDU3MzQ0IDw9IGMxMSAmJiBjMTEgPD0gNjU1MzMgJiYgYzExICE9PSA2NTI3OSB8fCA2NTUzNiA8PSBjMTEgJiYgYzExIDw9IDExMTQxMTE7CiAgICB9CiAgICBmdW5jdGlvbiBpc05zQ2hhcihjMTEpIHsKICAgICAgcmV0dXJuIGlzUHJpbnRhYmxlKGMxMSkgJiYgIWlzV2hpdGVzcGFjZShjMTEpICYmIGMxMSAhPT0gNjUyNzkgJiYgYzExICE9PSBDSEFSX0NBUlJJQUdFX1JFVFVSTiAmJiBjMTEgIT09IENIQVJfTElORV9GRUVEOwogICAgfQogICAgZnVuY3Rpb24gaXNQbGFpblNhZmUoYzExLCBwcmV2KSB7CiAgICAgIHJldHVybiBpc1ByaW50YWJsZShjMTEpICYmIGMxMSAhPT0gNjUyNzkgJiYgYzExICE9PSBDSEFSX0NPTU1BICYmIGMxMSAhPT0gQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAmJiBjMTEgIT09IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9DT0xPTiAmJiAoYzExICE9PSBDSEFSX1NIQVJQIHx8IHByZXYgJiYgaXNOc0NoYXIocHJldikpOwogICAgfQogICAgZnVuY3Rpb24gaXNQbGFpblNhZmVGaXJzdChjMTEpIHsKICAgICAgcmV0dXJuIGlzUHJpbnRhYmxlKGMxMSkgJiYgYzExICE9PSA2NTI3OSAmJiAhaXNXaGl0ZXNwYWNlKGMxMSkgJiYgYzExICE9PSBDSEFSX01JTlVTICYmIGMxMSAhPT0gQ0hBUl9RVUVTVElPTiAmJiBjMTEgIT09IENIQVJfQ09MT04gJiYgYzExICE9PSBDSEFSX0NPTU1BICYmIGMxMSAhPT0gQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAmJiBjMTEgIT09IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9TSEFSUCAmJiBjMTEgIT09IENIQVJfQU1QRVJTQU5EICYmIGMxMSAhPT0gQ0hBUl9BU1RFUklTSyAmJiBjMTEgIT09IENIQVJfRVhDTEFNQVRJT04gJiYgYzExICE9PSBDSEFSX1ZFUlRJQ0FMX0xJTkUgJiYgYzExICE9PSBDSEFSX0VRVUFMUyAmJiBjMTEgIT09IENIQVJfR1JFQVRFUl9USEFOICYmIGMxMSAhPT0gQ0hBUl9TSU5HTEVfUVVPVEUgJiYgYzExICE9PSBDSEFSX0RPVUJMRV9RVU9URSAmJiBjMTEgIT09IENIQVJfUEVSQ0VOVCAmJiBjMTEgIT09IENIQVJfQ09NTUVSQ0lBTF9BVCAmJiBjMTEgIT09IENIQVJfR1JBVkVfQUNDRU5UOwogICAgfQogICAgZnVuY3Rpb24gbmVlZEluZGVudEluZGljYXRvcihzdHJpbmczKSB7CiAgICAgIHZhciBsZWFkaW5nU3BhY2VSZSA9IC9eXG4qIC87CiAgICAgIHJldHVybiBsZWFkaW5nU3BhY2VSZS50ZXN0KHN0cmluZzMpOwogICAgfQogICAgdmFyIFNUWUxFX1BMQUlOID0gMSwgU1RZTEVfU0lOR0xFID0gMiwgU1RZTEVfTElURVJBTCA9IDMsIFNUWUxFX0ZPTERFRCA9IDQsIFNUWUxFX0RPVUJMRSA9IDU7CiAgICBmdW5jdGlvbiBjaG9vc2VTY2FsYXJTdHlsZShzdHJpbmczLCBzaW5nbGVMaW5lT25seSwgaW5kZW50UGVyTGV2ZWwsIGxpbmVXaWR0aCwgdGVzdEFtYmlndW91c1R5cGUpIHsKICAgICAgdmFyIGkxMTsKICAgICAgdmFyIGNoYXIsIHByZXZfY2hhcjsKICAgICAgdmFyIGhhc0xpbmVCcmVhayA9IGZhbHNlOwogICAgICB2YXIgaGFzRm9sZGFibGVMaW5lID0gZmFsc2U7CiAgICAgIHZhciBzaG91bGRUcmFja1dpZHRoID0gbGluZVdpZHRoICE9PSAtMTsKICAgICAgdmFyIHByZXZpb3VzTGluZUJyZWFrID0gLTE7CiAgICAgIHZhciBwbGFpbiA9IGlzUGxhaW5TYWZlRmlyc3Qoc3RyaW5nMy5jaGFyQ29kZUF0KDApKSAmJiAhaXNXaGl0ZXNwYWNlKHN0cmluZzMuY2hhckNvZGVBdChzdHJpbmczLmxlbmd0aCAtIDEpKTsKICAgICAgaWYgKHNpbmdsZUxpbmVPbmx5KSB7CiAgICAgICAgZm9yIChpMTEgPSAwOyBpMTEgPCBzdHJpbmczLmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgIGNoYXIgPSBzdHJpbmczLmNoYXJDb2RlQXQoaTExKTsKICAgICAgICAgIGlmICghaXNQcmludGFibGUoY2hhcikpIHsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0RPVUJMRTsKICAgICAgICAgIH0KICAgICAgICAgIHByZXZfY2hhciA9IGkxMSA+IDAgPyBzdHJpbmczLmNoYXJDb2RlQXQoaTExIC0gMSkgOiBudWxsOwogICAgICAgICAgcGxhaW4gPSBwbGFpbiAmJiBpc1BsYWluU2FmZShjaGFyLCBwcmV2X2NoYXIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBmb3IgKGkxMSA9IDA7IGkxMSA8IHN0cmluZzMubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgY2hhciA9IHN0cmluZzMuY2hhckNvZGVBdChpMTEpOwogICAgICAgICAgaWYgKGNoYXIgPT09IENIQVJfTElORV9GRUVEKSB7CiAgICAgICAgICAgIGhhc0xpbmVCcmVhayA9IHRydWU7CiAgICAgICAgICAgIGlmIChzaG91bGRUcmFja1dpZHRoKSB7CiAgICAgICAgICAgICAgaGFzRm9sZGFibGVMaW5lID0gaGFzRm9sZGFibGVMaW5lIHx8IC8vIEZvbGRhYmxlIGxpbmUgPSB0b28gbG9uZywgYW5kIG5vdCBtb3JlLWluZGVudGVkLgogICAgICAgICAgICAgIGkxMSAtIHByZXZpb3VzTGluZUJyZWFrIC0gMSA+IGxpbmVXaWR0aCAmJiBzdHJpbmczW3ByZXZpb3VzTGluZUJyZWFrICsgMV0gIT09ICIgIjsKICAgICAgICAgICAgICBwcmV2aW91c0xpbmVCcmVhayA9IGkxMTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmICghaXNQcmludGFibGUoY2hhcikpIHsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0RPVUJMRTsKICAgICAgICAgIH0KICAgICAgICAgIHByZXZfY2hhciA9IGkxMSA+IDAgPyBzdHJpbmczLmNoYXJDb2RlQXQoaTExIC0gMSkgOiBudWxsOwogICAgICAgICAgcGxhaW4gPSBwbGFpbiAmJiBpc1BsYWluU2FmZShjaGFyLCBwcmV2X2NoYXIpOwogICAgICAgIH0KICAgICAgICBoYXNGb2xkYWJsZUxpbmUgPSBoYXNGb2xkYWJsZUxpbmUgfHwgc2hvdWxkVHJhY2tXaWR0aCAmJiAoaTExIC0gcHJldmlvdXNMaW5lQnJlYWsgLSAxID4gbGluZVdpZHRoICYmIHN0cmluZzNbcHJldmlvdXNMaW5lQnJlYWsgKyAxXSAhPT0gIiAiKTsKICAgICAgfQogICAgICBpZiAoIWhhc0xpbmVCcmVhayAmJiAhaGFzRm9sZGFibGVMaW5lKSB7CiAgICAgICAgcmV0dXJuIHBsYWluICYmICF0ZXN0QW1iaWd1b3VzVHlwZShzdHJpbmczKSA/IFNUWUxFX1BMQUlOIDogU1RZTEVfU0lOR0xFOwogICAgICB9CiAgICAgIGlmIChpbmRlbnRQZXJMZXZlbCA+IDkgJiYgbmVlZEluZGVudEluZGljYXRvcihzdHJpbmczKSkgewogICAgICAgIHJldHVybiBTVFlMRV9ET1VCTEU7CiAgICAgIH0KICAgICAgcmV0dXJuIGhhc0ZvbGRhYmxlTGluZSA/IFNUWUxFX0ZPTERFRCA6IFNUWUxFX0xJVEVSQUw7CiAgICB9CiAgICBmdW5jdGlvbiB3cml0ZVNjYWxhcihzdGF0ZTE0LCBzdHJpbmczLCBsZXZlbCwgaXNrZXkpIHsKICAgICAgc3RhdGUxNC5kdW1wID0gKGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChzdHJpbmczLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuICInJyI7CiAgICAgICAgfQogICAgICAgIGlmICghc3RhdGUxNC5ub0NvbXBhdE1vZGUgJiYgREVQUkVDQVRFRF9CT09MRUFOU19TWU5UQVguaW5kZXhPZihzdHJpbmczKSAhPT0gLTEpIHsKICAgICAgICAgIHJldHVybiAiJyIgKyBzdHJpbmczICsgIiciOwogICAgICAgIH0KICAgICAgICB2YXIgaW5kZW50MyA9IHN0YXRlMTQuaW5kZW50ICogTWF0aC5tYXgoMSwgbGV2ZWwpOwogICAgICAgIHZhciBsaW5lV2lkdGggPSBzdGF0ZTE0LmxpbmVXaWR0aCA9PT0gLTEgPyAtMSA6IE1hdGgubWF4KE1hdGgubWluKHN0YXRlMTQubGluZVdpZHRoLCA0MCksIHN0YXRlMTQubGluZVdpZHRoIC0gaW5kZW50Myk7CiAgICAgICAgdmFyIHNpbmdsZUxpbmVPbmx5ID0gaXNrZXkgfHwgc3RhdGUxNC5mbG93TGV2ZWwgPiAtMSAmJiBsZXZlbCA+PSBzdGF0ZTE0LmZsb3dMZXZlbDsKICAgICAgICBmdW5jdGlvbiB0ZXN0QW1iaWd1aXR5KHN0cmluZzQpIHsKICAgICAgICAgIHJldHVybiB0ZXN0SW1wbGljaXRSZXNvbHZpbmcoc3RhdGUxNCwgc3RyaW5nNCk7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAoY2hvb3NlU2NhbGFyU3R5bGUoc3RyaW5nMywgc2luZ2xlTGluZU9ubHksIHN0YXRlMTQuaW5kZW50LCBsaW5lV2lkdGgsIHRlc3RBbWJpZ3VpdHkpKSB7CiAgICAgICAgICBjYXNlIFNUWUxFX1BMQUlOOgogICAgICAgICAgICByZXR1cm4gc3RyaW5nMzsKICAgICAgICAgIGNhc2UgU1RZTEVfU0lOR0xFOgogICAgICAgICAgICByZXR1cm4gIiciICsgc3RyaW5nMy5yZXBsYWNlKC8nL2csICInJyIpICsgIiciOwogICAgICAgICAgY2FzZSBTVFlMRV9MSVRFUkFMOgogICAgICAgICAgICByZXR1cm4gInwiICsgYmxvY2tIZWFkZXIoc3RyaW5nMywgc3RhdGUxNC5pbmRlbnQpICsgZHJvcEVuZGluZ05ld2xpbmUoaW5kZW50U3RyaW5nKHN0cmluZzMsIGluZGVudDMpKTsKICAgICAgICAgIGNhc2UgU1RZTEVfRk9MREVEOgogICAgICAgICAgICByZXR1cm4gIj4iICsgYmxvY2tIZWFkZXIoc3RyaW5nMywgc3RhdGUxNC5pbmRlbnQpICsgZHJvcEVuZGluZ05ld2xpbmUoaW5kZW50U3RyaW5nKGZvbGRTdHJpbmcoc3RyaW5nMywgbGluZVdpZHRoKSwgaW5kZW50MykpOwogICAgICAgICAgY2FzZSBTVFlMRV9ET1VCTEU6CiAgICAgICAgICAgIHJldHVybiAnIicgKyBlc2NhcGVTdHJpbmcoc3RyaW5nMywgbGluZVdpZHRoKSArICciJzsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJpbXBvc3NpYmxlIGVycm9yOiBpbnZhbGlkIHNjYWxhciBzdHlsZSIpOwogICAgICAgIH0KICAgICAgfSkoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGJsb2NrSGVhZGVyKHN0cmluZzMsIGluZGVudFBlckxldmVsKSB7CiAgICAgIHZhciBpbmRlbnRJbmRpY2F0b3IgPSBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZzMpID8gU3RyaW5nKGluZGVudFBlckxldmVsKSA6ICIiOwogICAgICB2YXIgY2xpcCA9IHN0cmluZzNbc3RyaW5nMy5sZW5ndGggLSAxXSA9PT0gIlxuIjsKICAgICAgdmFyIGtlZXAgPSBjbGlwICYmIChzdHJpbmczW3N0cmluZzMubGVuZ3RoIC0gMl0gPT09ICJcbiIgfHwgc3RyaW5nMyA9PT0gIlxuIik7CiAgICAgIHZhciBjaG9tcCA9IGtlZXAgPyAiKyIgOiBjbGlwID8gIiIgOiAiLSI7CiAgICAgIHJldHVybiBpbmRlbnRJbmRpY2F0b3IgKyBjaG9tcCArICJcbiI7CiAgICB9CiAgICBmdW5jdGlvbiBkcm9wRW5kaW5nTmV3bGluZShzdHJpbmczKSB7CiAgICAgIHJldHVybiBzdHJpbmczW3N0cmluZzMubGVuZ3RoIC0gMV0gPT09ICJcbiIgPyBzdHJpbmczLnNsaWNlKDAsIC0xKSA6IHN0cmluZzM7CiAgICB9CiAgICBmdW5jdGlvbiBmb2xkU3RyaW5nKHN0cmluZzMsIHdpZHRoKSB7CiAgICAgIHZhciBsaW5lUmUgPSAvKFxuKykoW15cbl0qKS9nOwogICAgICB2YXIgcmVzdWx0ID0gKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBuZXh0TEYgPSBzdHJpbmczLmluZGV4T2YoIlxuIik7CiAgICAgICAgbmV4dExGID0gbmV4dExGICE9PSAtMSA/IG5leHRMRiA6IHN0cmluZzMubGVuZ3RoOwogICAgICAgIGxpbmVSZS5sYXN0SW5kZXggPSBuZXh0TEY7CiAgICAgICAgcmV0dXJuIGZvbGRMaW5lKHN0cmluZzMuc2xpY2UoMCwgbmV4dExGKSwgd2lkdGgpOwogICAgICB9KSgpOwogICAgICB2YXIgcHJldk1vcmVJbmRlbnRlZCA9IHN0cmluZzNbMF0gPT09ICJcbiIgfHwgc3RyaW5nM1swXSA9PT0gIiAiOwogICAgICB2YXIgbW9yZUluZGVudGVkOwogICAgICB2YXIgbWF0Y2gyOwogICAgICB3aGlsZSAobWF0Y2gyID0gbGluZVJlLmV4ZWMoc3RyaW5nMykpIHsKICAgICAgICB2YXIgcHJlZml4NCA9IG1hdGNoMlsxXSwgbGluZSA9IG1hdGNoMlsyXTsKICAgICAgICBtb3JlSW5kZW50ZWQgPSBsaW5lWzBdID09PSAiICI7CiAgICAgICAgcmVzdWx0ICs9IHByZWZpeDQgKyAoIXByZXZNb3JlSW5kZW50ZWQgJiYgIW1vcmVJbmRlbnRlZCAmJiBsaW5lICE9PSAiIiA/ICJcbiIgOiAiIikgKyBmb2xkTGluZShsaW5lLCB3aWR0aCk7CiAgICAgICAgcHJldk1vcmVJbmRlbnRlZCA9IG1vcmVJbmRlbnRlZDsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gZm9sZExpbmUobGluZSwgd2lkdGgpIHsKICAgICAgaWYgKGxpbmUgPT09ICIiIHx8IGxpbmVbMF0gPT09ICIgIikgcmV0dXJuIGxpbmU7CiAgICAgIHZhciBicmVha1JlID0gLyBbXiBdL2c7CiAgICAgIHZhciBtYXRjaDI7CiAgICAgIHZhciBzdGFydCA9IDAsIGVuZDMsIGN1cnIgPSAwLCBuZXh0MiA9IDA7CiAgICAgIHZhciByZXN1bHQgPSAiIjsKICAgICAgd2hpbGUgKG1hdGNoMiA9IGJyZWFrUmUuZXhlYyhsaW5lKSkgewogICAgICAgIG5leHQyID0gbWF0Y2gyLmluZGV4OwogICAgICAgIGlmIChuZXh0MiAtIHN0YXJ0ID4gd2lkdGgpIHsKICAgICAgICAgIGVuZDMgPSBjdXJyID4gc3RhcnQgPyBjdXJyIDogbmV4dDI7CiAgICAgICAgICByZXN1bHQgKz0gIlxuIiArIGxpbmUuc2xpY2Uoc3RhcnQsIGVuZDMpOwogICAgICAgICAgc3RhcnQgPSBlbmQzICsgMTsKICAgICAgICB9CiAgICAgICAgY3VyciA9IG5leHQyOwogICAgICB9CiAgICAgIHJlc3VsdCArPSAiXG4iOwogICAgICBpZiAobGluZS5sZW5ndGggLSBzdGFydCA+IHdpZHRoICYmIGN1cnIgPiBzdGFydCkgewogICAgICAgIHJlc3VsdCArPSBsaW5lLnNsaWNlKHN0YXJ0LCBjdXJyKSArICJcbiIgKyBsaW5lLnNsaWNlKGN1cnIgKyAxKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHQgKz0gbGluZS5zbGljZShzdGFydCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdC5zbGljZSgxKTsKICAgIH0KICAgIGZ1bmN0aW9uIGVzY2FwZVN0cmluZyhzdHJpbmczKSB7CiAgICAgIHZhciByZXN1bHQgPSAiIjsKICAgICAgdmFyIGNoYXIsIG5leHRDaGFyOwogICAgICB2YXIgZXNjYXBlU2VxOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBzdHJpbmczLmxlbmd0aDsgaTExKyspIHsKICAgICAgICBjaGFyID0gc3RyaW5nMy5jaGFyQ29kZUF0KGkxMSk7CiAgICAgICAgaWYgKGNoYXIgPj0gNTUyOTYgJiYgY2hhciA8PSA1NjMxOSkgewogICAgICAgICAgbmV4dENoYXIgPSBzdHJpbmczLmNoYXJDb2RlQXQoaTExICsgMSk7CiAgICAgICAgICBpZiAobmV4dENoYXIgPj0gNTYzMjAgJiYgbmV4dENoYXIgPD0gNTczNDMpIHsKICAgICAgICAgICAgcmVzdWx0ICs9IGVuY29kZUhleCgoY2hhciAtIDU1Mjk2KSAqIDEwMjQgKyBuZXh0Q2hhciAtIDU2MzIwICsgNjU1MzYpOwogICAgICAgICAgICBpMTErKzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVzY2FwZVNlcSA9IEVTQ0FQRV9TRVFVRU5DRVNbY2hhcl07CiAgICAgICAgcmVzdWx0ICs9ICFlc2NhcGVTZXEgJiYgaXNQcmludGFibGUoY2hhcikgPyBzdHJpbmczW2kxMV0gOiBlc2NhcGVTZXEgfHwgZW5jb2RlSGV4KGNoYXIpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiB3cml0ZUZsb3dTZXF1ZW5jZShzdGF0ZTE0LCBsZXZlbCwgb2JqZWN0KSB7CiAgICAgIHZhciBfcmVzdWx0ID0gIiIsIF90YWcgPSBzdGF0ZTE0LnRhZywgaW5kZXgyLCBsZW5ndGg7CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIGlmICh3cml0ZU5vZGUoc3RhdGUxNCwgbGV2ZWwsIG9iamVjdFtpbmRleDJdLCBmYWxzZSwgZmFsc2UpKSB7CiAgICAgICAgICBpZiAoaW5kZXgyICE9PSAwKSBfcmVzdWx0ICs9ICIsIiArICghc3RhdGUxNC5jb25kZW5zZUZsb3cgPyAiICIgOiAiIik7CiAgICAgICAgICBfcmVzdWx0ICs9IHN0YXRlMTQuZHVtcDsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhdGUxNC50YWcgPSBfdGFnOwogICAgICBzdGF0ZTE0LmR1bXAgPSAiWyIgKyBfcmVzdWx0ICsgIl0iOwogICAgfQogICAgZnVuY3Rpb24gd3JpdGVCbG9ja1NlcXVlbmNlKHN0YXRlMTQsIGxldmVsLCBvYmplY3QsIGNvbXBhY3QpIHsKICAgICAgdmFyIF9yZXN1bHQgPSAiIiwgX3RhZyA9IHN0YXRlMTQudGFnLCBpbmRleDIsIGxlbmd0aDsKICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgaWYgKHdyaXRlTm9kZShzdGF0ZTE0LCBsZXZlbCArIDEsIG9iamVjdFtpbmRleDJdLCB0cnVlLCB0cnVlKSkgewogICAgICAgICAgaWYgKCFjb21wYWN0IHx8IGluZGV4MiAhPT0gMCkgewogICAgICAgICAgICBfcmVzdWx0ICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUxNCwgbGV2ZWwpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0YXRlMTQuZHVtcCAmJiBDSEFSX0xJTkVfRkVFRCA9PT0gc3RhdGUxNC5kdW1wLmNoYXJDb2RlQXQoMCkpIHsKICAgICAgICAgICAgX3Jlc3VsdCArPSAiLSI7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfcmVzdWx0ICs9ICItICI7CiAgICAgICAgICB9CiAgICAgICAgICBfcmVzdWx0ICs9IHN0YXRlMTQuZHVtcDsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhdGUxNC50YWcgPSBfdGFnOwogICAgICBzdGF0ZTE0LmR1bXAgPSBfcmVzdWx0IHx8ICJbXSI7CiAgICB9CiAgICBmdW5jdGlvbiB3cml0ZUZsb3dNYXBwaW5nKHN0YXRlMTQsIGxldmVsLCBvYmplY3QpIHsKICAgICAgdmFyIF9yZXN1bHQgPSAiIiwgX3RhZyA9IHN0YXRlMTQudGFnLCBvYmplY3RLZXlMaXN0ID0gT2JqZWN0LmtleXMob2JqZWN0KSwgaW5kZXgyLCBsZW5ndGgsIG9iamVjdEtleSwgb2JqZWN0VmFsdWUsIHBhaXJCdWZmZXI7CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gb2JqZWN0S2V5TGlzdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBwYWlyQnVmZmVyID0gIiI7CiAgICAgICAgaWYgKGluZGV4MiAhPT0gMCkgcGFpckJ1ZmZlciArPSAiLCAiOwogICAgICAgIGlmIChzdGF0ZTE0LmNvbmRlbnNlRmxvdykgcGFpckJ1ZmZlciArPSAnIic7CiAgICAgICAgb2JqZWN0S2V5ID0gb2JqZWN0S2V5TGlzdFtpbmRleDJdOwogICAgICAgIG9iamVjdFZhbHVlID0gb2JqZWN0W29iamVjdEtleV07CiAgICAgICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUxNCwgbGV2ZWwsIG9iamVjdEtleSwgZmFsc2UsIGZhbHNlKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZTE0LmR1bXAubGVuZ3RoID4gMTAyNCkgcGFpckJ1ZmZlciArPSAiPyAiOwogICAgICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUxNC5kdW1wICsgKHN0YXRlMTQuY29uZGVuc2VGbG93ID8gJyInIDogIiIpICsgIjoiICsgKHN0YXRlMTQuY29uZGVuc2VGbG93ID8gIiIgOiAiICIpOwogICAgICAgIGlmICghd3JpdGVOb2RlKHN0YXRlMTQsIGxldmVsLCBvYmplY3RWYWx1ZSwgZmFsc2UsIGZhbHNlKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUxNC5kdW1wOwogICAgICAgIF9yZXN1bHQgKz0gcGFpckJ1ZmZlcjsKICAgICAgfQogICAgICBzdGF0ZTE0LnRhZyA9IF90YWc7CiAgICAgIHN0YXRlMTQuZHVtcCA9ICJ7IiArIF9yZXN1bHQgKyAifSI7CiAgICB9CiAgICBmdW5jdGlvbiB3cml0ZUJsb2NrTWFwcGluZyhzdGF0ZTE0LCBsZXZlbCwgb2JqZWN0LCBjb21wYWN0KSB7CiAgICAgIHZhciBfcmVzdWx0ID0gIiIsIF90YWcgPSBzdGF0ZTE0LnRhZywgb2JqZWN0S2V5TGlzdCA9IE9iamVjdC5rZXlzKG9iamVjdCksIGluZGV4MiwgbGVuZ3RoLCBvYmplY3RLZXksIG9iamVjdFZhbHVlLCBleHBsaWNpdFBhaXIsIHBhaXJCdWZmZXI7CiAgICAgIGlmIChzdGF0ZTE0LnNvcnRLZXlzID09PSB0cnVlKSB7CiAgICAgICAgb2JqZWN0S2V5TGlzdC5zb3J0KCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YXRlMTQuc29ydEtleXMgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBvYmplY3RLZXlMaXN0LnNvcnQoc3RhdGUxNC5zb3J0S2V5cyk7CiAgICAgIH0gZWxzZSBpZiAoc3RhdGUxNC5zb3J0S2V5cykgewogICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJzb3J0S2V5cyBtdXN0IGJlIGEgYm9vbGVhbiBvciBhIGZ1bmN0aW9uIik7CiAgICAgIH0KICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBvYmplY3RLZXlMaXN0Lmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIHBhaXJCdWZmZXIgPSAiIjsKICAgICAgICBpZiAoIWNvbXBhY3QgfHwgaW5kZXgyICE9PSAwKSB7CiAgICAgICAgICBwYWlyQnVmZmVyICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUxNCwgbGV2ZWwpOwogICAgICAgIH0KICAgICAgICBvYmplY3RLZXkgPSBvYmplY3RLZXlMaXN0W2luZGV4Ml07CiAgICAgICAgb2JqZWN0VmFsdWUgPSBvYmplY3Rbb2JqZWN0S2V5XTsKICAgICAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZTE0LCBsZXZlbCArIDEsIG9iamVjdEtleSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBleHBsaWNpdFBhaXIgPSBzdGF0ZTE0LnRhZyAhPT0gbnVsbCAmJiBzdGF0ZTE0LnRhZyAhPT0gIj8iIHx8IHN0YXRlMTQuZHVtcCAmJiBzdGF0ZTE0LmR1bXAubGVuZ3RoID4gMTAyNDsKICAgICAgICBpZiAoZXhwbGljaXRQYWlyKSB7CiAgICAgICAgICBpZiAoc3RhdGUxNC5kdW1wICYmIENIQVJfTElORV9GRUVEID09PSBzdGF0ZTE0LmR1bXAuY2hhckNvZGVBdCgwKSkgewogICAgICAgICAgICBwYWlyQnVmZmVyICs9ICI/IjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBhaXJCdWZmZXIgKz0gIj8gIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcGFpckJ1ZmZlciArPSBzdGF0ZTE0LmR1bXA7CiAgICAgICAgaWYgKGV4cGxpY2l0UGFpcikgewogICAgICAgICAgcGFpckJ1ZmZlciArPSBnZW5lcmF0ZU5leHRMaW5lKHN0YXRlMTQsIGxldmVsKTsKICAgICAgICB9CiAgICAgICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUxNCwgbGV2ZWwgKyAxLCBvYmplY3RWYWx1ZSwgdHJ1ZSwgZXhwbGljaXRQYWlyKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZTE0LmR1bXAgJiYgQ0hBUl9MSU5FX0ZFRUQgPT09IHN0YXRlMTQuZHVtcC5jaGFyQ29kZUF0KDApKSB7CiAgICAgICAgICBwYWlyQnVmZmVyICs9ICI6IjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcGFpckJ1ZmZlciArPSAiOiAiOwogICAgICAgIH0KICAgICAgICBwYWlyQnVmZmVyICs9IHN0YXRlMTQuZHVtcDsKICAgICAgICBfcmVzdWx0ICs9IHBhaXJCdWZmZXI7CiAgICAgIH0KICAgICAgc3RhdGUxNC50YWcgPSBfdGFnOwogICAgICBzdGF0ZTE0LmR1bXAgPSBfcmVzdWx0IHx8ICJ7fSI7CiAgICB9CiAgICBmdW5jdGlvbiBkZXRlY3RUeXBlKHN0YXRlMTQsIG9iamVjdCwgZXhwbGljaXQpIHsKICAgICAgdmFyIF9yZXN1bHQsIHR5cGVMaXN0LCBpbmRleDIsIGxlbmd0aCwgdHlwZTUsIHN0eWxlOwogICAgICB0eXBlTGlzdCA9IGV4cGxpY2l0ID8gc3RhdGUxNC5leHBsaWNpdFR5cGVzIDogc3RhdGUxNC5pbXBsaWNpdFR5cGVzOwogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IHR5cGVMaXN0Lmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIHR5cGU1ID0gdHlwZUxpc3RbaW5kZXgyXTsKICAgICAgICBpZiAoKHR5cGU1Lmluc3RhbmNlT2YgfHwgdHlwZTUucHJlZGljYXRlKSAmJiAoIXR5cGU1Lmluc3RhbmNlT2YgfHwgdHlwZW9mIG9iamVjdCA9PT0gIm9iamVjdCIgJiYgb2JqZWN0IGluc3RhbmNlb2YgdHlwZTUuaW5zdGFuY2VPZikgJiYgKCF0eXBlNS5wcmVkaWNhdGUgfHwgdHlwZTUucHJlZGljYXRlKG9iamVjdCkpKSB7CiAgICAgICAgICBzdGF0ZTE0LnRhZyA9IGV4cGxpY2l0ID8gdHlwZTUudGFnIDogIj8iOwogICAgICAgICAgaWYgKHR5cGU1LnJlcHJlc2VudCkgewogICAgICAgICAgICBzdHlsZSA9IHN0YXRlMTQuc3R5bGVNYXBbdHlwZTUudGFnXSB8fCB0eXBlNS5kZWZhdWx0U3R5bGU7CiAgICAgICAgICAgIGlmIChfdG9TdHJpbmcuY2FsbCh0eXBlNS5yZXByZXNlbnQpID09PSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgICAgX3Jlc3VsdCA9IHR5cGU1LnJlcHJlc2VudChvYmplY3QsIHN0eWxlKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbCh0eXBlNS5yZXByZXNlbnQsIHN0eWxlKSkgewogICAgICAgICAgICAgIF9yZXN1bHQgPSB0eXBlNS5yZXByZXNlbnRbc3R5bGVdKG9iamVjdCwgc3R5bGUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCIhPCIgKyB0eXBlNS50YWcgKyAnPiB0YWcgcmVzb2x2ZXIgYWNjZXB0cyBub3QgIicgKyBzdHlsZSArICciIHN0eWxlJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3RhdGUxNC5kdW1wID0gX3Jlc3VsdDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiB3cml0ZU5vZGUoc3RhdGUxNCwgbGV2ZWwsIG9iamVjdCwgYmxvY2ssIGNvbXBhY3QsIGlza2V5KSB7CiAgICAgIHN0YXRlMTQudGFnID0gbnVsbDsKICAgICAgc3RhdGUxNC5kdW1wID0gb2JqZWN0OwogICAgICBpZiAoIWRldGVjdFR5cGUoc3RhdGUxNCwgb2JqZWN0LCBmYWxzZSkpIHsKICAgICAgICBkZXRlY3RUeXBlKHN0YXRlMTQsIG9iamVjdCwgdHJ1ZSk7CiAgICAgIH0KICAgICAgdmFyIHR5cGU1ID0gX3RvU3RyaW5nLmNhbGwoc3RhdGUxNC5kdW1wKTsKICAgICAgaWYgKGJsb2NrKSB7CiAgICAgICAgYmxvY2sgPSBzdGF0ZTE0LmZsb3dMZXZlbCA8IDAgfHwgc3RhdGUxNC5mbG93TGV2ZWwgPiBsZXZlbDsKICAgICAgfQogICAgICB2YXIgb2JqZWN0T3JBcnJheSA9IHR5cGU1ID09PSAiW29iamVjdCBPYmplY3RdIiB8fCB0eXBlNSA9PT0gIltvYmplY3QgQXJyYXldIiwgZHVwbGljYXRlSW5kZXgsIGR1cGxpY2F0ZTsKICAgICAgaWYgKG9iamVjdE9yQXJyYXkpIHsKICAgICAgICBkdXBsaWNhdGVJbmRleCA9IHN0YXRlMTQuZHVwbGljYXRlcy5pbmRleE9mKG9iamVjdCk7CiAgICAgICAgZHVwbGljYXRlID0gZHVwbGljYXRlSW5kZXggIT09IC0xOwogICAgICB9CiAgICAgIGlmIChzdGF0ZTE0LnRhZyAhPT0gbnVsbCAmJiBzdGF0ZTE0LnRhZyAhPT0gIj8iIHx8IGR1cGxpY2F0ZSB8fCBzdGF0ZTE0LmluZGVudCAhPT0gMiAmJiBsZXZlbCA+IDApIHsKICAgICAgICBjb21wYWN0ID0gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKGR1cGxpY2F0ZSAmJiBzdGF0ZTE0LnVzZWREdXBsaWNhdGVzW2R1cGxpY2F0ZUluZGV4XSkgewogICAgICAgIHN0YXRlMTQuZHVtcCA9ICIqcmVmXyIgKyBkdXBsaWNhdGVJbmRleDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAob2JqZWN0T3JBcnJheSAmJiBkdXBsaWNhdGUgJiYgIXN0YXRlMTQudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdKSB7CiAgICAgICAgICBzdGF0ZTE0LnVzZWREdXBsaWNhdGVzW2R1cGxpY2F0ZUluZGV4XSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlNSA9PT0gIltvYmplY3QgT2JqZWN0XSIpIHsKICAgICAgICAgIGlmIChibG9jayAmJiBPYmplY3Qua2V5cyhzdGF0ZTE0LmR1bXApLmxlbmd0aCAhPT0gMCkgewogICAgICAgICAgICB3cml0ZUJsb2NrTWFwcGluZyhzdGF0ZTE0LCBsZXZlbCwgc3RhdGUxNC5kdW1wLCBjb21wYWN0KTsKICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSkgewogICAgICAgICAgICAgIHN0YXRlMTQuZHVtcCA9ICImcmVmXyIgKyBkdXBsaWNhdGVJbmRleCArIHN0YXRlMTQuZHVtcDsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgd3JpdGVGbG93TWFwcGluZyhzdGF0ZTE0LCBsZXZlbCwgc3RhdGUxNC5kdW1wKTsKICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSkgewogICAgICAgICAgICAgIHN0YXRlMTQuZHVtcCA9ICImcmVmXyIgKyBkdXBsaWNhdGVJbmRleCArICIgIiArIHN0YXRlMTQuZHVtcDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAodHlwZTUgPT09ICJbb2JqZWN0IEFycmF5XSIpIHsKICAgICAgICAgIHZhciBhcnJheUxldmVsID0gc3RhdGUxNC5ub0FycmF5SW5kZW50ICYmIGxldmVsID4gMCA/IGxldmVsIC0gMSA6IGxldmVsOwogICAgICAgICAgaWYgKGJsb2NrICYmIHN0YXRlMTQuZHVtcC5sZW5ndGggIT09IDApIHsKICAgICAgICAgICAgd3JpdGVCbG9ja1NlcXVlbmNlKHN0YXRlMTQsIGFycmF5TGV2ZWwsIHN0YXRlMTQuZHVtcCwgY29tcGFjdCk7CiAgICAgICAgICAgIGlmIChkdXBsaWNhdGUpIHsKICAgICAgICAgICAgICBzdGF0ZTE0LmR1bXAgPSAiJnJlZl8iICsgZHVwbGljYXRlSW5kZXggKyBzdGF0ZTE0LmR1bXA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHdyaXRlRmxvd1NlcXVlbmNlKHN0YXRlMTQsIGFycmF5TGV2ZWwsIHN0YXRlMTQuZHVtcCk7CiAgICAgICAgICAgIGlmIChkdXBsaWNhdGUpIHsKICAgICAgICAgICAgICBzdGF0ZTE0LmR1bXAgPSAiJnJlZl8iICsgZHVwbGljYXRlSW5kZXggKyAiICIgKyBzdGF0ZTE0LmR1bXA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHR5cGU1ID09PSAiW29iamVjdCBTdHJpbmddIikgewogICAgICAgICAgaWYgKHN0YXRlMTQudGFnICE9PSAiPyIpIHsKICAgICAgICAgICAgd3JpdGVTY2FsYXIoc3RhdGUxNCwgc3RhdGUxNC5kdW1wLCBsZXZlbCwgaXNrZXkpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoc3RhdGUxNC5za2lwSW52YWxpZCkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oInVuYWNjZXB0YWJsZSBraW5kIG9mIGFuIG9iamVjdCB0byBkdW1wICIgKyB0eXBlNSk7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZTE0LnRhZyAhPT0gbnVsbCAmJiBzdGF0ZTE0LnRhZyAhPT0gIj8iKSB7CiAgICAgICAgICBzdGF0ZTE0LmR1bXAgPSAiITwiICsgc3RhdGUxNC50YWcgKyAiPiAiICsgc3RhdGUxNC5kdW1wOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldER1cGxpY2F0ZVJlZmVyZW5jZXMob2JqZWN0LCBzdGF0ZTE0KSB7CiAgICAgIHZhciBvYmplY3RzID0gW10sIGR1cGxpY2F0ZXNJbmRleGVzID0gW10sIGluZGV4MiwgbGVuZ3RoOwogICAgICBpbnNwZWN0Tm9kZShvYmplY3QsIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKTsKICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBkdXBsaWNhdGVzSW5kZXhlcy5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBzdGF0ZTE0LmR1cGxpY2F0ZXMucHVzaChvYmplY3RzW2R1cGxpY2F0ZXNJbmRleGVzW2luZGV4Ml1dKTsKICAgICAgfQogICAgICBzdGF0ZTE0LnVzZWREdXBsaWNhdGVzID0gbmV3IEFycmF5KGxlbmd0aCk7CiAgICB9CiAgICBmdW5jdGlvbiBpbnNwZWN0Tm9kZShvYmplY3QsIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKSB7CiAgICAgIHZhciBvYmplY3RLZXlMaXN0LCBpbmRleDIsIGxlbmd0aDsKICAgICAgaWYgKG9iamVjdCAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAib2JqZWN0IikgewogICAgICAgIGluZGV4MiA9IG9iamVjdHMuaW5kZXhPZihvYmplY3QpOwogICAgICAgIGlmIChpbmRleDIgIT09IC0xKSB7CiAgICAgICAgICBpZiAoZHVwbGljYXRlc0luZGV4ZXMuaW5kZXhPZihpbmRleDIpID09PSAtMSkgewogICAgICAgICAgICBkdXBsaWNhdGVzSW5kZXhlcy5wdXNoKGluZGV4Mik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG9iamVjdHMucHVzaChvYmplY3QpOwogICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkgewogICAgICAgICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICAgICAgICBpbnNwZWN0Tm9kZShvYmplY3RbaW5kZXgyXSwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBvYmplY3RLZXlMaXN0ID0gT2JqZWN0LmtleXMob2JqZWN0KTsKICAgICAgICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBvYmplY3RLZXlMaXN0Lmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgICAgICAgIGluc3BlY3ROb2RlKG9iamVjdFtvYmplY3RLZXlMaXN0W2luZGV4Ml1dLCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGR1bXAoaW5wdXQsIG9wdGlvbnMpIHsKICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgIHZhciBzdGF0ZTE0ID0gbmV3IFN0YXRlKG9wdGlvbnMpOwogICAgICBpZiAoIXN0YXRlMTQubm9SZWZzKSBnZXREdXBsaWNhdGVSZWZlcmVuY2VzKGlucHV0LCBzdGF0ZTE0KTsKICAgICAgaWYgKHdyaXRlTm9kZShzdGF0ZTE0LCAwLCBpbnB1dCwgdHJ1ZSwgdHJ1ZSkpIHJldHVybiBzdGF0ZTE0LmR1bXAgKyAiXG4iOwogICAgICByZXR1cm4gIiI7CiAgICB9CiAgICBmdW5jdGlvbiBzYWZlRHVtcChpbnB1dCwgb3B0aW9ucykgewogICAgICByZXR1cm4gZHVtcChpbnB1dCwgY29tbW9uLmV4dGVuZCh7IHNjaGVtYTogREVGQVVMVF9TQUZFX1NDSEVNQSB9LCBvcHRpb25zKSk7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cy5kdW1wID0gZHVtcDsKICAgIG1vZHVsZS5leHBvcnRzLnNhZmVEdW1wID0gc2FmZUR1bXA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC5qcwp2YXIgcmVxdWlyZV9qc195YW1sID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgbG9hZGVyID0gcmVxdWlyZV9sb2FkZXIoKTsKICAgIHZhciBkdW1wZXIgPSByZXF1aXJlX2R1bXBlcigpOwogICAgZnVuY3Rpb24gZGVwcmVjYXRlZChuYW1lKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkZ1bmN0aW9uICIgKyBuYW1lICsgIiBpcyBkZXByZWNhdGVkIGFuZCBjYW5ub3QgYmUgdXNlZC4iKTsKICAgICAgfTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzLlR5cGUgPSByZXF1aXJlX3R5cGUoKTsKICAgIG1vZHVsZS5leHBvcnRzLlNjaGVtYSA9IHJlcXVpcmVfc2NoZW1hKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5GQUlMU0FGRV9TQ0hFTUEgPSByZXF1aXJlX2ZhaWxzYWZlKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5KU09OX1NDSEVNQSA9IHJlcXVpcmVfanNvbigpOwogICAgbW9kdWxlLmV4cG9ydHMuQ09SRV9TQ0hFTUEgPSByZXF1aXJlX2NvcmUoKTsKICAgIG1vZHVsZS5leHBvcnRzLkRFRkFVTFRfU0FGRV9TQ0hFTUEgPSByZXF1aXJlX2RlZmF1bHRfc2FmZSgpOwogICAgbW9kdWxlLmV4cG9ydHMuREVGQVVMVF9GVUxMX1NDSEVNQSA9IHJlcXVpcmVfZGVmYXVsdF9mdWxsKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5sb2FkID0gbG9hZGVyLmxvYWQ7CiAgICBtb2R1bGUuZXhwb3J0cy5sb2FkQWxsID0gbG9hZGVyLmxvYWRBbGw7CiAgICBtb2R1bGUuZXhwb3J0cy5zYWZlTG9hZCA9IGxvYWRlci5zYWZlTG9hZDsKICAgIG1vZHVsZS5leHBvcnRzLnNhZmVMb2FkQWxsID0gbG9hZGVyLnNhZmVMb2FkQWxsOwogICAgbW9kdWxlLmV4cG9ydHMuZHVtcCA9IGR1bXBlci5kdW1wOwogICAgbW9kdWxlLmV4cG9ydHMuc2FmZUR1bXAgPSBkdW1wZXIuc2FmZUR1bXA7CiAgICBtb2R1bGUuZXhwb3J0cy5ZQU1MRXhjZXB0aW9uID0gcmVxdWlyZV9leGNlcHRpb24oKTsKICAgIG1vZHVsZS5leHBvcnRzLk1JTklNQUxfU0NIRU1BID0gcmVxdWlyZV9mYWlsc2FmZSgpOwogICAgbW9kdWxlLmV4cG9ydHMuU0FGRV9TQ0hFTUEgPSByZXF1aXJlX2RlZmF1bHRfc2FmZSgpOwogICAgbW9kdWxlLmV4cG9ydHMuREVGQVVMVF9TQ0hFTUEgPSByZXF1aXJlX2RlZmF1bHRfZnVsbCgpOwogICAgbW9kdWxlLmV4cG9ydHMuc2NhbiA9IGRlcHJlY2F0ZWQoInNjYW4iKTsKICAgIG1vZHVsZS5leHBvcnRzLnBhcnNlID0gZGVwcmVjYXRlZCgicGFyc2UiKTsKICAgIG1vZHVsZS5leHBvcnRzLmNvbXBvc2UgPSBkZXByZWNhdGVkKCJjb21wb3NlIik7CiAgICBtb2R1bGUuZXhwb3J0cy5hZGRDb25zdHJ1Y3RvciA9IGRlcHJlY2F0ZWQoImFkZENvbnN0cnVjdG9yIik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9pbmRleC5qcwp2YXIgcmVxdWlyZV9qc195YW1sMiA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvaW5kZXguanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIHlhbWwgPSByZXF1aXJlX2pzX3lhbWwoKTsKICAgIG1vZHVsZS5leHBvcnRzID0geWFtbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0eWFtbEAyLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR5YW1sL2Rpc3RfdHMvc21hcnR5YW1sLnBsdWdpbnMuanMKdmFyIHJlcXVpcmVfc21hcnR5YW1sX3BsdWdpbnMgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0eWFtbEAyLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR5YW1sL2Rpc3RfdHMvc21hcnR5YW1sLnBsdWdpbnMuanMiKGV4cG9ydHMpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBfX2NyZWF0ZUJpbmRpbmcyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvMTMsIGsyMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBtNltrNF07CiAgICAgIH0gfSk7CiAgICB9KSA6IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIG8xM1trMjJdID0gbTZbazRdOwogICAgfSkpOwogICAgdmFyIF9fc2V0TW9kdWxlRGVmYXVsdDIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8xMywgdjUpIHsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8xMywgImRlZmF1bHQiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2NSB9KTsKICAgIH0pIDogZnVuY3Rpb24obzEzLCB2NSkgewogICAgICBvMTNbImRlZmF1bHQiXSA9IHY1OwogICAgfSk7CiAgICB2YXIgX19pbXBvcnRTdGFyMiA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24obW9kKSB7CiAgICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7CiAgICAgIHZhciByZXN1bHQgPSB7fTsKICAgICAgaWYgKG1vZCAhPSBudWxsKSB7CiAgICAgICAgZm9yICh2YXIgazQgaW4gbW9kKSBpZiAoazQgIT09ICJkZWZhdWx0IiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGs0KSkgX19jcmVhdGVCaW5kaW5nMihyZXN1bHQsIG1vZCwgazQpOwogICAgICB9CiAgICAgIF9fc2V0TW9kdWxlRGVmYXVsdDIocmVzdWx0LCBtb2QpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICBleHBvcnRzLmpzWWFtbCA9IHZvaWQgMDsKICAgIHZhciBqc1lhbWwgPSBfX2ltcG9ydFN0YXIyKHJlcXVpcmVfanNfeWFtbDIoKSk7CiAgICBleHBvcnRzLmpzWWFtbCA9IGpzWWFtbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0eWFtbEAyLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR5YW1sL2Rpc3RfdHMvaW5kZXguanMKdmFyIHJlcXVpcmVfZGlzdF90czIgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0eWFtbEAyLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR5YW1sL2Rpc3RfdHMvaW5kZXguanMiKGV4cG9ydHMpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBfX2NyZWF0ZUJpbmRpbmcyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvMTMsIGsyMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBtNltrNF07CiAgICAgIH0gfSk7CiAgICB9KSA6IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIG8xM1trMjJdID0gbTZbazRdOwogICAgfSkpOwogICAgdmFyIF9fc2V0TW9kdWxlRGVmYXVsdDIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19zZXRNb2R1bGVEZWZhdWx0IHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8xMywgdjUpIHsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8xMywgImRlZmF1bHQiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2NSB9KTsKICAgIH0pIDogZnVuY3Rpb24obzEzLCB2NSkgewogICAgICBvMTNbImRlZmF1bHQiXSA9IHY1OwogICAgfSk7CiAgICB2YXIgX19pbXBvcnRTdGFyMiA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2ltcG9ydFN0YXIgfHwgZnVuY3Rpb24obW9kKSB7CiAgICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7CiAgICAgIHZhciByZXN1bHQgPSB7fTsKICAgICAgaWYgKG1vZCAhPSBudWxsKSB7CiAgICAgICAgZm9yICh2YXIgazQgaW4gbW9kKSBpZiAoazQgIT09ICJkZWZhdWx0IiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGs0KSkgX19jcmVhdGVCaW5kaW5nMihyZXN1bHQsIG1vZCwgazQpOwogICAgICB9CiAgICAgIF9fc2V0TW9kdWxlRGVmYXVsdDIocmVzdWx0LCBtb2QpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICBleHBvcnRzLm9iamVjdFRvWWFtbFN0cmluZyA9IGV4cG9ydHMueWFtbFN0cmluZ1RvT2JqZWN0ID0gdm9pZCAwOwogICAgdmFyIHBsdWdpbnMzID0gX19pbXBvcnRTdGFyMihyZXF1aXJlX3NtYXJ0eWFtbF9wbHVnaW5zKCkpOwogICAgZXhwb3J0cy55YW1sU3RyaW5nVG9PYmplY3QgPSBhc3luYyAoeWFtbFN0cmluZ0FyZywgb3B0aW9uc0FyZyA9IHt9KSA9PiB7CiAgICAgIHJldHVybiBwbHVnaW5zMy5qc1lhbWwuc2FmZUxvYWQoeWFtbFN0cmluZ0FyZyk7CiAgICB9OwogICAgZXhwb3J0cy5vYmplY3RUb1lhbWxTdHJpbmcgPSBhc3luYyAob2JqZWN0QXJnLCBvcHRpb25zQXJnID0ge30pID0+IHsKICAgICAgcmV0dXJuIHBsdWdpbnMzLmpzWWFtbC5zYWZlRHVtcChvYmplY3RBcmcpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2JhaWxAMi4wLjIvbm9kZV9tb2R1bGVzL2JhaWwvaW5kZXguanMKZnVuY3Rpb24gYmFpbChlcnJvcikgewogIGlmIChlcnJvcikgewogICAgdGhyb3cgZXJyb3I7CiAgfQp9CnZhciBpbml0X2JhaWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9iYWlsQDIuMC4yL25vZGVfbW9kdWxlcy9iYWlsL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2V4dGVuZEAzLjAuMi9ub2RlX21vZHVsZXMvZXh0ZW5kL2luZGV4LmpzCnZhciByZXF1aXJlX2V4dGVuZCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vZXh0ZW5kQDMuMC4yL25vZGVfbW9kdWxlcy9leHRlbmQvaW5kZXguanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgICB2YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwogICAgdmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5OwogICAgdmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwogICAgdmFyIGlzQXJyYXkzID0gZnVuY3Rpb24gaXNBcnJheTQoYXJyKSB7CiAgICAgIGlmICh0eXBlb2YgQXJyYXkuaXNBcnJheSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFycik7CiAgICAgIH0KICAgICAgcmV0dXJuIHRvU3RyLmNhbGwoYXJyKSA9PT0gIltvYmplY3QgQXJyYXldIjsKICAgIH07CiAgICB2YXIgaXNQbGFpbk9iamVjdDIgPSBmdW5jdGlvbiBpc1BsYWluT2JqZWN0MyhvYmopIHsKICAgICAgaWYgKCFvYmogfHwgdG9TdHIuY2FsbChvYmopICE9PSAiW29iamVjdCBPYmplY3RdIikgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB2YXIgaGFzT3duQ29uc3RydWN0b3IgPSBoYXNPd24uY2FsbChvYmosICJjb25zdHJ1Y3RvciIpOwogICAgICB2YXIgaGFzSXNQcm90b3R5cGVPZiA9IG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY29uc3RydWN0b3IucHJvdG90eXBlICYmIGhhc093bi5jYWxsKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsICJpc1Byb3RvdHlwZU9mIik7CiAgICAgIGlmIChvYmouY29uc3RydWN0b3IgJiYgIWhhc093bkNvbnN0cnVjdG9yICYmICFoYXNJc1Byb3RvdHlwZU9mKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHZhciBrZXkyOwogICAgICBmb3IgKGtleTIgaW4gb2JqKSB7CiAgICAgIH0KICAgICAgcmV0dXJuIHR5cGVvZiBrZXkyID09PSAidW5kZWZpbmVkIiB8fCBoYXNPd24uY2FsbChvYmosIGtleTIpOwogICAgfTsKICAgIHZhciBzZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIHNldFByb3BlcnR5Mih0YXJnZXQsIG9wdGlvbnMpIHsKICAgICAgaWYgKGRlZmluZVByb3BlcnR5ICYmIG9wdGlvbnMubmFtZSA9PT0gIl9fcHJvdG9fXyIpIHsKICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG9wdGlvbnMubmFtZSwgewogICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgIHZhbHVlOiBvcHRpb25zLm5ld1ZhbHVlLAogICAgICAgICAgd3JpdGFibGU6IHRydWUKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0YXJnZXRbb3B0aW9ucy5uYW1lXSA9IG9wdGlvbnMubmV3VmFsdWU7CiAgICAgIH0KICAgIH07CiAgICB2YXIgZ2V0UHJvcGVydHkgPSBmdW5jdGlvbiBnZXRQcm9wZXJ0eTIob2JqLCBuYW1lKSB7CiAgICAgIGlmIChuYW1lID09PSAiX19wcm90b19fIikgewogICAgICAgIGlmICghaGFzT3duLmNhbGwob2JqLCBuYW1lKSkgewogICAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgICB9IGVsc2UgaWYgKGdPUEQpIHsKICAgICAgICAgIHJldHVybiBnT1BEKG9iaiwgbmFtZSkudmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBvYmpbbmFtZV07CiAgICB9OwogICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBleHRlbmQzKCkgewogICAgICB2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmU7CiAgICAgIHZhciB0YXJnZXQgPSBhcmd1bWVudHNbMF07CiAgICAgIHZhciBpMTEgPSAxOwogICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsKICAgICAgdmFyIGRlZXAgPSBmYWxzZTsKICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICJib29sZWFuIikgewogICAgICAgIGRlZXAgPSB0YXJnZXQ7CiAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzFdIHx8IHt9OwogICAgICAgIGkxMSA9IDI7CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCA9PSBudWxsIHx8IHR5cGVvZiB0YXJnZXQgIT09ICJvYmplY3QiICYmIHR5cGVvZiB0YXJnZXQgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB0YXJnZXQgPSB7fTsKICAgICAgfQogICAgICBmb3IgKDsgaTExIDwgbGVuZ3RoOyArK2kxMSkgewogICAgICAgIG9wdGlvbnMgPSBhcmd1bWVudHNbaTExXTsKICAgICAgICBpZiAob3B0aW9ucyAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKG5hbWUgaW4gb3B0aW9ucykgewogICAgICAgICAgICBzcmMgPSBnZXRQcm9wZXJ0eSh0YXJnZXQsIG5hbWUpOwogICAgICAgICAgICBjb3B5ID0gZ2V0UHJvcGVydHkob3B0aW9ucywgbmFtZSk7CiAgICAgICAgICAgIGlmICh0YXJnZXQgIT09IGNvcHkpIHsKICAgICAgICAgICAgICBpZiAoZGVlcCAmJiBjb3B5ICYmIChpc1BsYWluT2JqZWN0Mihjb3B5KSB8fCAoY29weUlzQXJyYXkgPSBpc0FycmF5Myhjb3B5KSkpKSB7CiAgICAgICAgICAgICAgICBpZiAoY29weUlzQXJyYXkpIHsKICAgICAgICAgICAgICAgICAgY29weUlzQXJyYXkgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgaXNBcnJheTMoc3JjKSA/IHNyYyA6IFtdOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgaXNQbGFpbk9iamVjdDIoc3JjKSA/IHNyYyA6IHt9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc2V0UHJvcGVydHkodGFyZ2V0LCB7IG5hbWUsIG5ld1ZhbHVlOiBleHRlbmQzKGRlZXAsIGNsb25lLCBjb3B5KSB9KTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb3B5ICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgc2V0UHJvcGVydHkodGFyZ2V0LCB7IG5hbWUsIG5ld1ZhbHVlOiBjb3B5IH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdGFyZ2V0OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RldmxvcEAxLjEuMC9ub2RlX21vZHVsZXMvZGV2bG9wL2xpYi9kZWZhdWx0LmpzCmZ1bmN0aW9uIGRlcHJlY2F0ZShmbikgewogIHJldHVybiBmbjsKfQpmdW5jdGlvbiBlcXVhbCgpIHsKfQpmdW5jdGlvbiBvaygpIHsKfQpmdW5jdGlvbiB1bnJlYWNoYWJsZSgpIHsKfQp2YXIgaW5pdF9kZWZhdWx0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGV2bG9wQDEuMS4wL25vZGVfbW9kdWxlcy9kZXZsb3AvbGliL2RlZmF1bHQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaXMtcGxhaW4tb2JqQDQuMS4wL25vZGVfbW9kdWxlcy9pcy1wbGFpbi1vYmovaW5kZXguanMKZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTIpIHsKICBpZiAodHlwZW9mIHZhbHVlMiAhPT0gIm9iamVjdCIgfHwgdmFsdWUyID09PSBudWxsKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGNvbnN0IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZTIpOwogIHJldHVybiAocHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiYgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsdWUyKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWx1ZTIpOwp9CnZhciBpbml0X2lzX3BsYWluX29iaiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2lzLXBsYWluLW9iakA0LjEuMC9ub2RlX21vZHVsZXMvaXMtcGxhaW4tb2JqL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Ryb3VnaEAyLjIuMC9ub2RlX21vZHVsZXMvdHJvdWdoL2xpYi9pbmRleC5qcwpmdW5jdGlvbiB0cm91Z2goKSB7CiAgY29uc3QgZm5zID0gW107CiAgY29uc3QgcGlwZWxpbmUgPSB7IHJ1biwgdXNlIH07CiAgcmV0dXJuIHBpcGVsaW5lOwogIGZ1bmN0aW9uIHJ1biguLi52YWx1ZXMpIHsKICAgIGxldCBtaWRkbGV3YXJlSW5kZXggPSAtMTsKICAgIGNvbnN0IGNhbGxiYWNrID0gdmFsdWVzLnBvcCgpOwogICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9uIikgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBmdW5jdGlvbiBhcyBsYXN0IGFyZ3VtZW50LCBub3QgIiArIGNhbGxiYWNrKTsKICAgIH0KICAgIG5leHQyKG51bGwsIC4uLnZhbHVlcyk7CiAgICBmdW5jdGlvbiBuZXh0MihlcnJvciwgLi4ub3V0cHV0KSB7CiAgICAgIGNvbnN0IGZuID0gZm5zWysrbWlkZGxld2FyZUluZGV4XTsKICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICBpZiAoZXJyb3IpIHsKICAgICAgICBjYWxsYmFjayhlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IHZhbHVlcy5sZW5ndGgpIHsKICAgICAgICBpZiAob3V0cHV0W2luZGV4Ml0gPT09IG51bGwgfHwgb3V0cHV0W2luZGV4Ml0gPT09IHZvaWQgMCkgewogICAgICAgICAgb3V0cHV0W2luZGV4Ml0gPSB2YWx1ZXNbaW5kZXgyXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsdWVzID0gb3V0cHV0OwogICAgICBpZiAoZm4pIHsKICAgICAgICB3cmFwMihmbiwgbmV4dDIpKC4uLm91dHB1dCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY2FsbGJhY2sobnVsbCwgLi4ub3V0cHV0KTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiB1c2UobWlkZGVsd2FyZSkgewogICAgaWYgKHR5cGVvZiBtaWRkZWx3YXJlICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoCiAgICAgICAgIkV4cGVjdGVkIGBtaWRkZWx3YXJlYCB0byBiZSBhIGZ1bmN0aW9uLCBub3QgIiArIG1pZGRlbHdhcmUKICAgICAgKTsKICAgIH0KICAgIGZucy5wdXNoKG1pZGRlbHdhcmUpOwogICAgcmV0dXJuIHBpcGVsaW5lOwogIH0KfQpmdW5jdGlvbiB3cmFwMihtaWRkbGV3YXJlLCBjYWxsYmFjaykgewogIGxldCBjYWxsZWQ7CiAgcmV0dXJuIHdyYXBwZWQ7CiAgZnVuY3Rpb24gd3JhcHBlZCguLi5wYXJhbWV0ZXJzKSB7CiAgICBjb25zdCBmbkV4cGVjdHNDYWxsYmFjayA9IG1pZGRsZXdhcmUubGVuZ3RoID4gcGFyYW1ldGVycy5sZW5ndGg7CiAgICBsZXQgcmVzdWx0OwogICAgaWYgKGZuRXhwZWN0c0NhbGxiYWNrKSB7CiAgICAgIHBhcmFtZXRlcnMucHVzaChkb25lKTsKICAgIH0KICAgIHRyeSB7CiAgICAgIHJlc3VsdCA9IG1pZGRsZXdhcmUuYXBwbHkodGhpcywgcGFyYW1ldGVycyk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zdCBleGNlcHRpb24gPSAoCiAgICAgICAgLyoqIEB0eXBlIHtFcnJvcn0gKi8KICAgICAgICBlcnJvcgogICAgICApOwogICAgICBpZiAoZm5FeHBlY3RzQ2FsbGJhY2sgJiYgY2FsbGVkKSB7CiAgICAgICAgdGhyb3cgZXhjZXB0aW9uOwogICAgICB9CiAgICAgIHJldHVybiBkb25lKGV4Y2VwdGlvbik7CiAgICB9CiAgICBpZiAoIWZuRXhwZWN0c0NhbGxiYWNrKSB7CiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnRoZW4gJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgcmVzdWx0LnRoZW4odGhlbiwgZG9uZSk7CiAgICAgIH0gZWxzZSBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHsKICAgICAgICBkb25lKHJlc3VsdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhlbihyZXN1bHQpOwogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIGRvbmUoZXJyb3IsIC4uLm91dHB1dCkgewogICAgaWYgKCFjYWxsZWQpIHsKICAgICAgY2FsbGVkID0gdHJ1ZTsKICAgICAgY2FsbGJhY2soZXJyb3IsIC4uLm91dHB1dCk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHRoZW4odmFsdWUyKSB7CiAgICBkb25lKG51bGwsIHZhbHVlMik7CiAgfQp9CnZhciBpbml0X2xpYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Ryb3VnaEAyLjIuMC9ub2RlX21vZHVsZXMvdHJvdWdoL2xpYi9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS90cm91Z2hAMi4yLjAvbm9kZV9tb2R1bGVzL3Ryb3VnaC9pbmRleC5qcwp2YXIgaW5pdF90cm91Z2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS90cm91Z2hAMi4yLjAvbm9kZV9tb2R1bGVzL3Ryb3VnaC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb25ANC4wLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBzdHJpbmdpZnlQb3NpdGlvbih2YWx1ZTIpIHsKICBpZiAoIXZhbHVlMiB8fCB0eXBlb2YgdmFsdWUyICE9PSAib2JqZWN0IikgewogICAgcmV0dXJuICIiOwogIH0KICBpZiAoInBvc2l0aW9uIiBpbiB2YWx1ZTIgfHwgInR5cGUiIGluIHZhbHVlMikgewogICAgcmV0dXJuIHBvc2l0aW9uKHZhbHVlMi5wb3NpdGlvbik7CiAgfQogIGlmICgic3RhcnQiIGluIHZhbHVlMiB8fCAiZW5kIiBpbiB2YWx1ZTIpIHsKICAgIHJldHVybiBwb3NpdGlvbih2YWx1ZTIpOwogIH0KICBpZiAoImxpbmUiIGluIHZhbHVlMiB8fCAiY29sdW1uIiBpbiB2YWx1ZTIpIHsKICAgIHJldHVybiBwb2ludCh2YWx1ZTIpOwogIH0KICByZXR1cm4gIiI7Cn0KZnVuY3Rpb24gcG9pbnQocG9pbnQ0KSB7CiAgcmV0dXJuIGluZGV4KHBvaW50NCAmJiBwb2ludDQubGluZSkgKyAiOiIgKyBpbmRleChwb2ludDQgJiYgcG9pbnQ0LmNvbHVtbik7Cn0KZnVuY3Rpb24gcG9zaXRpb24ocG9zKSB7CiAgcmV0dXJuIHBvaW50KHBvcyAmJiBwb3Muc3RhcnQpICsgIi0iICsgcG9pbnQocG9zICYmIHBvcy5lbmQpOwp9CmZ1bmN0aW9uIGluZGV4KHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgJiYgdHlwZW9mIHZhbHVlMiA9PT0gIm51bWJlciIgPyB2YWx1ZTIgOiAxOwp9CnZhciBpbml0X2xpYjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbkA0LjAuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb24vbGliL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uQDQuMC4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbi9pbmRleC5qcwp2YXIgaW5pdF91bmlzdF91dGlsX3N0cmluZ2lmeV9wb3NpdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uQDQuMC4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlLW1lc3NhZ2VANC4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlLW1lc3NhZ2UvbGliL2luZGV4LmpzCnZhciBWRmlsZU1lc3NhZ2U7CnZhciBpbml0X2xpYjMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZS1tZXNzYWdlQDQuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS1tZXNzYWdlL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X3VuaXN0X3V0aWxfc3RyaW5naWZ5X3Bvc2l0aW9uKCk7CiAgICBWRmlsZU1lc3NhZ2UgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhIG1lc3NhZ2UgZm9yIGByZWFzb25gLgogICAgICAgKgogICAgICAgKiA+IPCfqqYgKipOb3RlKio6IGFsc28gaGFzIG9ic29sZXRlIHNpZ25hdHVyZXMuCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7T3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXQogICAgICAgKiBAcmV0dXJucwogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudAogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7UG9pbnQgfCBQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IHBsYWNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMKICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucwogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucwogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucwogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucwogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlIHwgc3RyaW5nfSBjYXVzZU9yUmVhc29uCiAgICAgICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCBzaG91bGQgdXNlIG1hcmtkb3duLgogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IE9wdGlvbnMgfCBQb2ludCB8IFBvc2l0aW9uIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNPclBhcmVudE9yUGxhY2VdCiAgICAgICAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqICAgUGxhY2UgaW4gY29kZSB3aGVyZSB0aGUgbWVzc2FnZSBvcmlnaW5hdGVzIChleGFtcGxlOgogICAgICAgKiAgIGAnbXktcGFja2FnZTpteS1ydWxlJ2Agb3IgYCdteS1ydWxlJ2ApLgogICAgICAgKiBAcmV0dXJucwogICAgICAgKiAgIEluc3RhbmNlIG9mIGBWRmlsZU1lc3NhZ2VgLgogICAgICAgKi8KICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHkKICAgICAgY29uc3RydWN0b3IoY2F1c2VPclJlYXNvbiwgb3B0aW9uc09yUGFyZW50T3JQbGFjZSwgb3JpZ2luKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNPclBhcmVudE9yUGxhY2UgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBvcmlnaW4gPSBvcHRpb25zT3JQYXJlbnRPclBsYWNlOwogICAgICAgICAgb3B0aW9uc09yUGFyZW50T3JQbGFjZSA9IHZvaWQgMDsKICAgICAgICB9CiAgICAgICAgbGV0IHJlYXNvbiA9ICIiOwogICAgICAgIGxldCBvcHRpb25zID0ge307CiAgICAgICAgbGV0IGxlZ2FjeUNhdXNlID0gZmFsc2U7CiAgICAgICAgaWYgKG9wdGlvbnNPclBhcmVudE9yUGxhY2UpIHsKICAgICAgICAgIGlmICgibGluZSIgaW4gb3B0aW9uc09yUGFyZW50T3JQbGFjZSAmJiAiY29sdW1uIiBpbiBvcHRpb25zT3JQYXJlbnRPclBsYWNlKSB7CiAgICAgICAgICAgIG9wdGlvbnMgPSB7IHBsYWNlOiBvcHRpb25zT3JQYXJlbnRPclBsYWNlIH07CiAgICAgICAgICB9IGVsc2UgaWYgKCJzdGFydCIgaW4gb3B0aW9uc09yUGFyZW50T3JQbGFjZSAmJiAiZW5kIiBpbiBvcHRpb25zT3JQYXJlbnRPclBsYWNlKSB7CiAgICAgICAgICAgIG9wdGlvbnMgPSB7IHBsYWNlOiBvcHRpb25zT3JQYXJlbnRPclBsYWNlIH07CiAgICAgICAgICB9IGVsc2UgaWYgKCJ0eXBlIiBpbiBvcHRpb25zT3JQYXJlbnRPclBsYWNlKSB7CiAgICAgICAgICAgIG9wdGlvbnMgPSB7CiAgICAgICAgICAgICAgYW5jZXN0b3JzOiBbb3B0aW9uc09yUGFyZW50T3JQbGFjZV0sCiAgICAgICAgICAgICAgcGxhY2U6IG9wdGlvbnNPclBhcmVudE9yUGxhY2UucG9zaXRpb24KICAgICAgICAgICAgfTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnNPclBhcmVudE9yUGxhY2UgfTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBjYXVzZU9yUmVhc29uID09PSAic3RyaW5nIikgewogICAgICAgICAgcmVhc29uID0gY2F1c2VPclJlYXNvbjsKICAgICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmNhdXNlICYmIGNhdXNlT3JSZWFzb24pIHsKICAgICAgICAgIGxlZ2FjeUNhdXNlID0gdHJ1ZTsKICAgICAgICAgIHJlYXNvbiA9IGNhdXNlT3JSZWFzb24ubWVzc2FnZTsKICAgICAgICAgIG9wdGlvbnMuY2F1c2UgPSBjYXVzZU9yUmVhc29uOwogICAgICAgIH0KICAgICAgICBpZiAoIW9wdGlvbnMucnVsZUlkICYmICFvcHRpb25zLnNvdXJjZSAmJiB0eXBlb2Ygb3JpZ2luID09PSAic3RyaW5nIikgewogICAgICAgICAgY29uc3QgaW5kZXgyID0gb3JpZ2luLmluZGV4T2YoIjoiKTsKICAgICAgICAgIGlmIChpbmRleDIgPT09IC0xKSB7CiAgICAgICAgICAgIG9wdGlvbnMucnVsZUlkID0gb3JpZ2luOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb3B0aW9ucy5zb3VyY2UgPSBvcmlnaW4uc2xpY2UoMCwgaW5kZXgyKTsKICAgICAgICAgICAgb3B0aW9ucy5ydWxlSWQgPSBvcmlnaW4uc2xpY2UoaW5kZXgyICsgMSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghb3B0aW9ucy5wbGFjZSAmJiBvcHRpb25zLmFuY2VzdG9ycyAmJiBvcHRpb25zLmFuY2VzdG9ycykgewogICAgICAgICAgY29uc3QgcGFyZW50ID0gb3B0aW9ucy5hbmNlc3RvcnNbb3B0aW9ucy5hbmNlc3RvcnMubGVuZ3RoIC0gMV07CiAgICAgICAgICBpZiAocGFyZW50KSB7CiAgICAgICAgICAgIG9wdGlvbnMucGxhY2UgPSBwYXJlbnQucG9zaXRpb247CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHN0YXJ0ID0gb3B0aW9ucy5wbGFjZSAmJiAic3RhcnQiIGluIG9wdGlvbnMucGxhY2UgPyBvcHRpb25zLnBsYWNlLnN0YXJ0IDogb3B0aW9ucy5wbGFjZTsKICAgICAgICB0aGlzLmFuY2VzdG9ycyA9IG9wdGlvbnMuYW5jZXN0b3JzIHx8IHZvaWQgMDsKICAgICAgICB0aGlzLmNhdXNlID0gb3B0aW9ucy5jYXVzZSB8fCB2b2lkIDA7CiAgICAgICAgdGhpcy5jb2x1bW4gPSBzdGFydCA/IHN0YXJ0LmNvbHVtbiA6IHZvaWQgMDsKICAgICAgICB0aGlzLmZhdGFsID0gdm9pZCAwOwogICAgICAgIHRoaXMuZmlsZSA9ICIiOwogICAgICAgIHRoaXMubWVzc2FnZSA9IHJlYXNvbjsKICAgICAgICB0aGlzLmxpbmUgPSBzdGFydCA/IHN0YXJ0LmxpbmUgOiB2b2lkIDA7CiAgICAgICAgdGhpcy5uYW1lID0gc3RyaW5naWZ5UG9zaXRpb24ob3B0aW9ucy5wbGFjZSkgfHwgIjE6MSI7CiAgICAgICAgdGhpcy5wbGFjZSA9IG9wdGlvbnMucGxhY2UgfHwgdm9pZCAwOwogICAgICAgIHRoaXMucmVhc29uID0gdGhpcy5tZXNzYWdlOwogICAgICAgIHRoaXMucnVsZUlkID0gb3B0aW9ucy5ydWxlSWQgfHwgdm9pZCAwOwogICAgICAgIHRoaXMuc291cmNlID0gb3B0aW9ucy5zb3VyY2UgfHwgdm9pZCAwOwogICAgICAgIHRoaXMuc3RhY2sgPSBsZWdhY3lDYXVzZSAmJiBvcHRpb25zLmNhdXNlICYmIHR5cGVvZiBvcHRpb25zLmNhdXNlLnN0YWNrID09PSAic3RyaW5nIiA/IG9wdGlvbnMuY2F1c2Uuc3RhY2sgOiAiIjsKICAgICAgICB0aGlzLmFjdHVhbCA9IHZvaWQgMDsKICAgICAgICB0aGlzLmV4cGVjdGVkID0gdm9pZCAwOwogICAgICAgIHRoaXMubm90ZSA9IHZvaWQgMDsKICAgICAgICB0aGlzLnVybCA9IHZvaWQgMDsKICAgICAgfQogICAgfTsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUuZmlsZSA9ICIiOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5uYW1lID0gIiI7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLnJlYXNvbiA9ICIiOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5tZXNzYWdlID0gIiI7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLnN0YWNrID0gIiI7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLmNvbHVtbiA9IHZvaWQgMDsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUubGluZSA9IHZvaWQgMDsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUuYW5jZXN0b3JzID0gdm9pZCAwOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5jYXVzZSA9IHZvaWQgMDsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUuZmF0YWwgPSB2b2lkIDA7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLnBsYWNlID0gdm9pZCAwOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5ydWxlSWQgPSB2b2lkIDA7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLnNvdXJjZSA9IHZvaWQgMDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlLW1lc3NhZ2VANC4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlLW1lc3NhZ2UvaW5kZXguanMKdmFyIGluaXRfdmZpbGVfbWVzc2FnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlLW1lc3NhZ2VANC4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlLW1lc3NhZ2UvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnBhdGguYnJvd3Nlci5qcwpmdW5jdGlvbiBiYXNlbmFtZShwYXRoMiwgZXh0bmFtZTIpIHsKICBpZiAoZXh0bmFtZTIgIT09IHZvaWQgMCAmJiB0eXBlb2YgZXh0bmFtZTIgIT09ICJzdHJpbmciKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7CiAgfQogIGFzc2VydFBhdGgocGF0aDIpOwogIGxldCBzdGFydCA9IDA7CiAgbGV0IGVuZDMgPSAtMTsKICBsZXQgaW5kZXgyID0gcGF0aDIubGVuZ3RoOwogIGxldCBzZWVuTm9uU2xhc2g7CiAgaWYgKGV4dG5hbWUyID09PSB2b2lkIDAgfHwgZXh0bmFtZTIubGVuZ3RoID09PSAwIHx8IGV4dG5hbWUyLmxlbmd0aCA+IHBhdGgyLmxlbmd0aCkgewogICAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICAgIGlmIChwYXRoMi5jb2RlUG9pbnRBdChpbmRleDIpID09PSA0NykgewogICAgICAgIGlmIChzZWVuTm9uU2xhc2gpIHsKICAgICAgICAgIHN0YXJ0ID0gaW5kZXgyICsgMTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChlbmQzIDwgMCkgewogICAgICAgIHNlZW5Ob25TbGFzaCA9IHRydWU7CiAgICAgICAgZW5kMyA9IGluZGV4MiArIDE7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBlbmQzIDwgMCA/ICIiIDogcGF0aDIuc2xpY2Uoc3RhcnQsIGVuZDMpOwogIH0KICBpZiAoZXh0bmFtZTIgPT09IHBhdGgyKSB7CiAgICByZXR1cm4gIiI7CiAgfQogIGxldCBmaXJzdE5vblNsYXNoRW5kID0gLTE7CiAgbGV0IGV4dG5hbWVJbmRleCA9IGV4dG5hbWUyLmxlbmd0aCAtIDE7CiAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICBpZiAocGF0aDIuY29kZVBvaW50QXQoaW5kZXgyKSA9PT0gNDcpIHsKICAgICAgaWYgKHNlZW5Ob25TbGFzaCkgewogICAgICAgIHN0YXJ0ID0gaW5kZXgyICsgMTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKGZpcnN0Tm9uU2xhc2hFbmQgPCAwKSB7CiAgICAgICAgc2Vlbk5vblNsYXNoID0gdHJ1ZTsKICAgICAgICBmaXJzdE5vblNsYXNoRW5kID0gaW5kZXgyICsgMTsKICAgICAgfQogICAgICBpZiAoZXh0bmFtZUluZGV4ID4gLTEpIHsKICAgICAgICBpZiAocGF0aDIuY29kZVBvaW50QXQoaW5kZXgyKSA9PT0gZXh0bmFtZTIuY29kZVBvaW50QXQoZXh0bmFtZUluZGV4LS0pKSB7CiAgICAgICAgICBpZiAoZXh0bmFtZUluZGV4IDwgMCkgewogICAgICAgICAgICBlbmQzID0gaW5kZXgyOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBleHRuYW1lSW5kZXggPSAtMTsKICAgICAgICAgIGVuZDMgPSBmaXJzdE5vblNsYXNoRW5kOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBpZiAoc3RhcnQgPT09IGVuZDMpIHsKICAgIGVuZDMgPSBmaXJzdE5vblNsYXNoRW5kOwogIH0gZWxzZSBpZiAoZW5kMyA8IDApIHsKICAgIGVuZDMgPSBwYXRoMi5sZW5ndGg7CiAgfQogIHJldHVybiBwYXRoMi5zbGljZShzdGFydCwgZW5kMyk7Cn0KZnVuY3Rpb24gZGlybmFtZShwYXRoMikgewogIGFzc2VydFBhdGgocGF0aDIpOwogIGlmIChwYXRoMi5sZW5ndGggPT09IDApIHsKICAgIHJldHVybiAiLiI7CiAgfQogIGxldCBlbmQzID0gLTE7CiAgbGV0IGluZGV4MiA9IHBhdGgyLmxlbmd0aDsKICBsZXQgdW5tYXRjaGVkU2xhc2g7CiAgd2hpbGUgKC0taW5kZXgyKSB7CiAgICBpZiAocGF0aDIuY29kZVBvaW50QXQoaW5kZXgyKSA9PT0gNDcpIHsKICAgICAgaWYgKHVubWF0Y2hlZFNsYXNoKSB7CiAgICAgICAgZW5kMyA9IGluZGV4MjsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfSBlbHNlIGlmICghdW5tYXRjaGVkU2xhc2gpIHsKICAgICAgdW5tYXRjaGVkU2xhc2ggPSB0cnVlOwogICAgfQogIH0KICByZXR1cm4gZW5kMyA8IDAgPyBwYXRoMi5jb2RlUG9pbnRBdCgwKSA9PT0gNDcgPyAiLyIgOiAiLiIgOiBlbmQzID09PSAxICYmIHBhdGgyLmNvZGVQb2ludEF0KDApID09PSA0NyA/ICIvLyIgOiBwYXRoMi5zbGljZSgwLCBlbmQzKTsKfQpmdW5jdGlvbiBleHRuYW1lKHBhdGgyKSB7CiAgYXNzZXJ0UGF0aChwYXRoMik7CiAgbGV0IGluZGV4MiA9IHBhdGgyLmxlbmd0aDsKICBsZXQgZW5kMyA9IC0xOwogIGxldCBzdGFydFBhcnQgPSAwOwogIGxldCBzdGFydERvdCA9IC0xOwogIGxldCBwcmVEb3RTdGF0ZSA9IDA7CiAgbGV0IHVubWF0Y2hlZFNsYXNoOwogIHdoaWxlIChpbmRleDItLSkgewogICAgY29uc3QgY29kZTQgPSBwYXRoMi5jb2RlUG9pbnRBdChpbmRleDIpOwogICAgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBpZiAodW5tYXRjaGVkU2xhc2gpIHsKICAgICAgICBzdGFydFBhcnQgPSBpbmRleDIgKyAxOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKGVuZDMgPCAwKSB7CiAgICAgIHVubWF0Y2hlZFNsYXNoID0gdHJ1ZTsKICAgICAgZW5kMyA9IGluZGV4MiArIDE7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ2KSB7CiAgICAgIGlmIChzdGFydERvdCA8IDApIHsKICAgICAgICBzdGFydERvdCA9IGluZGV4MjsKICAgICAgfSBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkgewogICAgICAgIHByZURvdFN0YXRlID0gMTsKICAgICAgfQogICAgfSBlbHNlIGlmIChzdGFydERvdCA+IC0xKSB7CiAgICAgIHByZURvdFN0YXRlID0gLTE7CiAgICB9CiAgfQogIGlmIChzdGFydERvdCA8IDAgfHwgZW5kMyA8IDAgfHwgLy8gV2Ugc2F3IGEgbm9uLWRvdCBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBkb3QuCiAgcHJlRG90U3RhdGUgPT09IDAgfHwgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgYC4uYC4KICBwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kMyAtIDEgJiYgc3RhcnREb3QgPT09IHN0YXJ0UGFydCArIDEpIHsKICAgIHJldHVybiAiIjsKICB9CiAgcmV0dXJuIHBhdGgyLnNsaWNlKHN0YXJ0RG90LCBlbmQzKTsKfQpmdW5jdGlvbiBqb2luKC4uLnNlZ21lbnRzKSB7CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBqb2luZWQ7CiAgd2hpbGUgKCsraW5kZXgyIDwgc2VnbWVudHMubGVuZ3RoKSB7CiAgICBhc3NlcnRQYXRoKHNlZ21lbnRzW2luZGV4Ml0pOwogICAgaWYgKHNlZ21lbnRzW2luZGV4Ml0pIHsKICAgICAgam9pbmVkID0gam9pbmVkID09PSB2b2lkIDAgPyBzZWdtZW50c1tpbmRleDJdIDogam9pbmVkICsgIi8iICsgc2VnbWVudHNbaW5kZXgyXTsKICAgIH0KICB9CiAgcmV0dXJuIGpvaW5lZCA9PT0gdm9pZCAwID8gIi4iIDogbm9ybWFsaXplMihqb2luZWQpOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZTIocGF0aDIpIHsKICBhc3NlcnRQYXRoKHBhdGgyKTsKICBjb25zdCBhYnNvbHV0ZSA9IHBhdGgyLmNvZGVQb2ludEF0KDApID09PSA0NzsKICBsZXQgdmFsdWUyID0gbm9ybWFsaXplU3RyaW5nKHBhdGgyLCAhYWJzb2x1dGUpOwogIGlmICh2YWx1ZTIubGVuZ3RoID09PSAwICYmICFhYnNvbHV0ZSkgewogICAgdmFsdWUyID0gIi4iOwogIH0KICBpZiAodmFsdWUyLmxlbmd0aCA+IDAgJiYgcGF0aDIuY29kZVBvaW50QXQocGF0aDIubGVuZ3RoIC0gMSkgPT09IDQ3KSB7CiAgICB2YWx1ZTIgKz0gIi8iOwogIH0KICByZXR1cm4gYWJzb2x1dGUgPyAiLyIgKyB2YWx1ZTIgOiB2YWx1ZTI7Cn0KZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nKHBhdGgyLCBhbGxvd0Fib3ZlUm9vdCkgewogIGxldCByZXN1bHQgPSAiIjsKICBsZXQgbGFzdFNlZ21lbnRMZW5ndGggPSAwOwogIGxldCBsYXN0U2xhc2ggPSAtMTsKICBsZXQgZG90cyA9IDA7CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBjb2RlNDsKICBsZXQgbGFzdFNsYXNoSW5kZXg7CiAgd2hpbGUgKCsraW5kZXgyIDw9IHBhdGgyLmxlbmd0aCkgewogICAgaWYgKGluZGV4MiA8IHBhdGgyLmxlbmd0aCkgewogICAgICBjb2RlNCA9IHBhdGgyLmNvZGVQb2ludEF0KGluZGV4Mik7CiAgICB9IGVsc2UgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBicmVhazsKICAgIH0gZWxzZSB7CiAgICAgIGNvZGU0ID0gNDc7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ3KSB7CiAgICAgIGlmIChsYXN0U2xhc2ggPT09IGluZGV4MiAtIDEgfHwgZG90cyA9PT0gMSkgewogICAgICB9IGVsc2UgaWYgKGxhc3RTbGFzaCAhPT0gaW5kZXgyIC0gMSAmJiBkb3RzID09PSAyKSB7CiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPCAyIHx8IGxhc3RTZWdtZW50TGVuZ3RoICE9PSAyIHx8IHJlc3VsdC5jb2RlUG9pbnRBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IDQ2IHx8IHJlc3VsdC5jb2RlUG9pbnRBdChyZXN1bHQubGVuZ3RoIC0gMikgIT09IDQ2KSB7CiAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDIpIHsKICAgICAgICAgICAgbGFzdFNsYXNoSW5kZXggPSByZXN1bHQubGFzdEluZGV4T2YoIi8iKTsKICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4ICE9PSByZXN1bHQubGVuZ3RoIC0gMSkgewogICAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCA8IDApIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9ICIiOwogICAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpOwogICAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSByZXN1bHQubGVuZ3RoIC0gMSAtIHJlc3VsdC5sYXN0SW5kZXhPZigiLyIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsYXN0U2xhc2ggPSBpbmRleDI7CiAgICAgICAgICAgICAgZG90cyA9IDA7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgcmVzdWx0ID0gIiI7CiAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMDsKICAgICAgICAgICAgbGFzdFNsYXNoID0gaW5kZXgyOwogICAgICAgICAgICBkb3RzID0gMDsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChhbGxvd0Fib3ZlUm9vdCkgewogICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lmxlbmd0aCA+IDAgPyByZXN1bHQgKyAiLy4uIiA6ICIuLiI7CiAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDI7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkgewogICAgICAgICAgcmVzdWx0ICs9ICIvIiArIHBhdGgyLnNsaWNlKGxhc3RTbGFzaCArIDEsIGluZGV4Mik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3VsdCA9IHBhdGgyLnNsaWNlKGxhc3RTbGFzaCArIDEsIGluZGV4Mik7CiAgICAgICAgfQogICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gaW5kZXgyIC0gbGFzdFNsYXNoIC0gMTsKICAgICAgfQogICAgICBsYXN0U2xhc2ggPSBpbmRleDI7CiAgICAgIGRvdHMgPSAwOwogICAgfSBlbHNlIGlmIChjb2RlNCA9PT0gNDYgJiYgZG90cyA+IC0xKSB7CiAgICAgIGRvdHMrKzsKICAgIH0gZWxzZSB7CiAgICAgIGRvdHMgPSAtMTsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBhc3NlcnRQYXRoKHBhdGgyKSB7CiAgaWYgKHR5cGVvZiBwYXRoMiAhPT0gInN0cmluZyIpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoCiAgICAgICJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIgKyBKU09OLnN0cmluZ2lmeShwYXRoMikKICAgICk7CiAgfQp9CnZhciBtaW5wYXRoOwp2YXIgaW5pdF9taW5wYXRoX2Jyb3dzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnBhdGguYnJvd3Nlci5qcyIoKSB7CiAgICBtaW5wYXRoID0geyBiYXNlbmFtZSwgZGlybmFtZSwgZXh0bmFtZSwgam9pbiwgc2VwOiAiLyIgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWlucHJvYy5icm93c2VyLmpzCmZ1bmN0aW9uIGN3ZCgpIHsKICByZXR1cm4gIi8iOwp9CnZhciBtaW5wcm9jOwp2YXIgaW5pdF9taW5wcm9jX2Jyb3dzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnByb2MuYnJvd3Nlci5qcyIoKSB7CiAgICBtaW5wcm9jID0geyBjd2QgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWludXJsLnNoYXJlZC5qcwpmdW5jdGlvbiBpc1VybChmaWxlVXJsT3JQYXRoKSB7CiAgcmV0dXJuIEJvb2xlYW4oCiAgICBmaWxlVXJsT3JQYXRoICE9PSBudWxsICYmIHR5cGVvZiBmaWxlVXJsT3JQYXRoID09PSAib2JqZWN0IiAmJiAiaHJlZiIgaW4gZmlsZVVybE9yUGF0aCAmJiBmaWxlVXJsT3JQYXRoLmhyZWYgJiYgInByb3RvY29sIiBpbiBmaWxlVXJsT3JQYXRoICYmIGZpbGVVcmxPclBhdGgucHJvdG9jb2wgJiYgLy8gQHRzLWV4cGVjdC1lcnJvcjogaW5kZXhpbmcgaXMgZmluZS4KICAgIGZpbGVVcmxPclBhdGguYXV0aCA9PT0gdm9pZCAwCiAgKTsKfQp2YXIgaW5pdF9taW51cmxfc2hhcmVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9taW51cmwuc2hhcmVkLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWludXJsLmJyb3dzZXIuanMKZnVuY3Rpb24gdXJsVG9QYXRoKHBhdGgyKSB7CiAgaWYgKHR5cGVvZiBwYXRoMiA9PT0gInN0cmluZyIpIHsKICAgIHBhdGgyID0gbmV3IFVSTChwYXRoMik7CiAgfSBlbHNlIGlmICghaXNVcmwocGF0aDIpKSB7CiAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoCiAgICAgICdUaGUgInBhdGgiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgVVJMLiBSZWNlaXZlZCBgJyArIHBhdGgyICsgImAiCiAgICApOwogICAgZXJyb3IuY29kZSA9ICJFUlJfSU5WQUxJRF9BUkdfVFlQRSI7CiAgICB0aHJvdyBlcnJvcjsKICB9CiAgaWYgKHBhdGgyLnByb3RvY29sICE9PSAiZmlsZToiKSB7CiAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoIlRoZSBVUkwgbXVzdCBiZSBvZiBzY2hlbWUgZmlsZSIpOwogICAgZXJyb3IuY29kZSA9ICJFUlJfSU5WQUxJRF9VUkxfU0NIRU1FIjsKICAgIHRocm93IGVycm9yOwogIH0KICByZXR1cm4gZ2V0UGF0aEZyb21VUkxQb3NpeChwYXRoMik7Cn0KZnVuY3Rpb24gZ2V0UGF0aEZyb21VUkxQb3NpeCh1cmwpIHsKICBpZiAodXJsLmhvc3RuYW1lICE9PSAiIikgewogICAgY29uc3QgZXJyb3IgPSBuZXcgVHlwZUVycm9yKAogICAgICAnRmlsZSBVUkwgaG9zdCBtdXN0IGJlICJsb2NhbGhvc3QiIG9yIGVtcHR5IG9uIGRhcndpbicKICAgICk7CiAgICBlcnJvci5jb2RlID0gIkVSUl9JTlZBTElEX0ZJTEVfVVJMX0hPU1QiOwogICAgdGhyb3cgZXJyb3I7CiAgfQogIGNvbnN0IHBhdGhuYW1lID0gdXJsLnBhdGhuYW1lOwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBwYXRobmFtZS5sZW5ndGgpIHsKICAgIGlmIChwYXRobmFtZS5jb2RlUG9pbnRBdChpbmRleDIpID09PSAzNyAmJiBwYXRobmFtZS5jb2RlUG9pbnRBdChpbmRleDIgKyAxKSA9PT0gNTApIHsKICAgICAgY29uc3QgdGhpcmQgPSBwYXRobmFtZS5jb2RlUG9pbnRBdChpbmRleDIgKyAyKTsKICAgICAgaWYgKHRoaXJkID09PSA3MCB8fCB0aGlyZCA9PT0gMTAyKSB7CiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgVHlwZUVycm9yKAogICAgICAgICAgIkZpbGUgVVJMIHBhdGggbXVzdCBub3QgaW5jbHVkZSBlbmNvZGVkIC8gY2hhcmFjdGVycyIKICAgICAgICApOwogICAgICAgIGVycm9yLmNvZGUgPSAiRVJSX0lOVkFMSURfRklMRV9VUkxfUEFUSCI7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChwYXRobmFtZSk7Cn0KdmFyIGluaXRfbWludXJsX2Jyb3dzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnVybC5icm93c2VyLmpzIigpIHsKICAgIGluaXRfbWludXJsX3NoYXJlZCgpOwogICAgaW5pdF9taW51cmxfc2hhcmVkKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL2luZGV4LmpzCmZ1bmN0aW9uIGFzc2VydFBhcnQocGFydCwgbmFtZSkgewogIGlmIChwYXJ0ICYmIHBhcnQuaW5jbHVkZXMobWlucGF0aC5zZXApKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJgIiArIG5hbWUgKyAiYCBjYW5ub3QgYmUgYSBwYXRoOiBkaWQgbm90IGV4cGVjdCBgIiArIG1pbnBhdGguc2VwICsgImAiCiAgICApOwogIH0KfQpmdW5jdGlvbiBhc3NlcnROb25FbXB0eShwYXJ0LCBuYW1lKSB7CiAgaWYgKCFwYXJ0KSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoImAiICsgbmFtZSArICJgIGNhbm5vdCBiZSBlbXB0eSIpOwogIH0KfQpmdW5jdGlvbiBhc3NlcnRQYXRoMihwYXRoMiwgbmFtZSkgewogIGlmICghcGF0aDIpIHsKICAgIHRocm93IG5ldyBFcnJvcigiU2V0dGluZyBgIiArIG5hbWUgKyAiYCByZXF1aXJlcyBgcGF0aGAgdG8gYmUgc2V0IHRvbyIpOwogIH0KfQpmdW5jdGlvbiBpc1VpbnQ4QXJyYXkzKHZhbHVlMikgewogIHJldHVybiBCb29sZWFuKAogICAgdmFsdWUyICYmIHR5cGVvZiB2YWx1ZTIgPT09ICJvYmplY3QiICYmICJieXRlTGVuZ3RoIiBpbiB2YWx1ZTIgJiYgImJ5dGVPZmZzZXQiIGluIHZhbHVlMgogICk7Cn0KdmFyIG9yZGVyLCBWRmlsZTsKdmFyIGluaXRfbGliNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF92ZmlsZV9tZXNzYWdlKCk7CiAgICBpbml0X21pbnBhdGhfYnJvd3NlcigpOwogICAgaW5pdF9taW5wcm9jX2Jyb3dzZXIoKTsKICAgIGluaXRfbWludXJsX2Jyb3dzZXIoKTsKICAgIG9yZGVyID0gLyoqIEB0eXBlIHtjb25zdH0gKi8KICAgIFsKICAgICAgImhpc3RvcnkiLAogICAgICAicGF0aCIsCiAgICAgICJiYXNlbmFtZSIsCiAgICAgICJzdGVtIiwKICAgICAgImV4dG5hbWUiLAogICAgICAiZGlybmFtZSIKICAgIF07CiAgICBWRmlsZSA9IGNsYXNzIHsKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhIG5ldyB2aXJ0dWFsIGZpbGUuCiAgICAgICAqCiAgICAgICAqIGBvcHRpb25zYCBpcyB0cmVhdGVkIGFzOgogICAgICAgKgogICAgICAgKiAqICAgYHN0cmluZ2Agb3IgYFVpbnQ4QXJyYXlgIOKAlCBge3ZhbHVlOiBvcHRpb25zfWAKICAgICAgICogKiAgIGBVUkxgIOKAlCBge3BhdGg6IG9wdGlvbnN9YAogICAgICAgKiAqICAgYFZGaWxlYCDigJQgc2hhbGxvdyBjb3BpZXMgaXRzIGRhdGEgb3ZlciB0byB0aGUgbmV3IGZpbGUKICAgICAgICogKiAgIGBvYmplY3RgIOKAlCBhbGwgZmllbGRzIGFyZSBzaGFsbG93IGNvcGllZCBvdmVyIHRvIHRoZSBuZXcgZmlsZQogICAgICAgKgogICAgICAgKiBQYXRoIHJlbGF0ZWQgZmllbGRzIGFyZSBzZXQgaW4gdGhlIGZvbGxvd2luZyBvcmRlciAobGVhc3Qgc3BlY2lmaWMgdG8KICAgICAgICogbW9zdCBzcGVjaWZpYyk6IGBoaXN0b3J5YCwgYHBhdGhgLCBgYmFzZW5hbWVgLCBgc3RlbWAsIGBleHRuYW1lYCwKICAgICAgICogYGRpcm5hbWVgLgogICAgICAgKgogICAgICAgKiBZb3UgY2Fubm90IHNldCBgZGlybmFtZWAgb3IgYGV4dG5hbWVgIHdpdGhvdXQgc2V0dGluZyBlaXRoZXIgYGhpc3RvcnlgLAogICAgICAgKiBgcGF0aGAsIGBiYXNlbmFtZWAsIG9yIGBzdGVtYCB0b28uCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IG51bGwgfCB1bmRlZmluZWR9IFt2YWx1ZV0KICAgICAgICogICBGaWxlIHZhbHVlLgogICAgICAgKiBAcmV0dXJucwogICAgICAgKiAgIE5ldyBpbnN0YW5jZS4KICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKHZhbHVlMikgewogICAgICAgIGxldCBvcHRpb25zOwogICAgICAgIGlmICghdmFsdWUyKSB7CiAgICAgICAgICBvcHRpb25zID0ge307CiAgICAgICAgfSBlbHNlIGlmIChpc1VybCh2YWx1ZTIpKSB7CiAgICAgICAgICBvcHRpb25zID0geyBwYXRoOiB2YWx1ZTIgfTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTIgPT09ICJzdHJpbmciIHx8IGlzVWludDhBcnJheTModmFsdWUyKSkgewogICAgICAgICAgb3B0aW9ucyA9IHsgdmFsdWU6IHZhbHVlMiB9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvcHRpb25zID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICB0aGlzLmN3ZCA9ICJjd2QiIGluIG9wdGlvbnMgPyAiIiA6IG1pbnByb2MuY3dkKCk7CiAgICAgICAgdGhpcy5kYXRhID0ge307CiAgICAgICAgdGhpcy5oaXN0b3J5ID0gW107CiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IFtdOwogICAgICAgIHRoaXMudmFsdWU7CiAgICAgICAgdGhpcy5tYXA7CiAgICAgICAgdGhpcy5yZXN1bHQ7CiAgICAgICAgdGhpcy5zdG9yZWQ7CiAgICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICAgIHdoaWxlICgrK2luZGV4MiA8IG9yZGVyLmxlbmd0aCkgewogICAgICAgICAgY29uc3QgZmllbGQyID0gb3JkZXJbaW5kZXgyXTsKICAgICAgICAgIGlmIChmaWVsZDIgaW4gb3B0aW9ucyAmJiBvcHRpb25zW2ZpZWxkMl0gIT09IHZvaWQgMCAmJiBvcHRpb25zW2ZpZWxkMl0gIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpc1tmaWVsZDJdID0gZmllbGQyID09PSAiaGlzdG9yeSIgPyBbLi4ub3B0aW9uc1tmaWVsZDJdXSA6IG9wdGlvbnNbZmllbGQyXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGV0IGZpZWxkOwogICAgICAgIGZvciAoZmllbGQgaW4gb3B0aW9ucykgewogICAgICAgICAgaWYgKCFvcmRlci5pbmNsdWRlcyhmaWVsZCkpIHsKICAgICAgICAgICAgdGhpc1tmaWVsZF0gPSBvcHRpb25zW2ZpZWxkXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgYmFzZW5hbWUgKGluY2x1ZGluZyBleHRuYW1lKSAoZXhhbXBsZTogYCdpbmRleC5taW4uanMnYCkuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9CiAgICAgICAqICAgQmFzZW5hbWUuCiAgICAgICAqLwogICAgICBnZXQgYmFzZW5hbWUoKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICJzdHJpbmciID8gbWlucGF0aC5iYXNlbmFtZSh0aGlzLnBhdGgpIDogdm9pZCAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgYmFzZW5hbWUgKGluY2x1ZGluZyBleHRuYW1lKSAoYCdpbmRleC5taW4uanMnYCkuCiAgICAgICAqCiAgICAgICAqIENhbm5vdCBjb250YWluIHBhdGggc2VwYXJhdG9ycyAoYCcvJ2Agb24gdW5peCwgbWFjT1MsIGFuZCBicm93c2VycywgYCdcJ2AKICAgICAgICogb24gd2luZG93cykuCiAgICAgICAqIENhbm5vdCBiZSBudWxsaWZpZWQgKHVzZSBgZmlsZS5wYXRoID0gZmlsZS5kaXJuYW1lYCBpbnN0ZWFkKS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VuYW1lCiAgICAgICAqICAgQmFzZW5hbWUuCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqICAgTm90aGluZy4KICAgICAgICovCiAgICAgIHNldCBiYXNlbmFtZShiYXNlbmFtZTIpIHsKICAgICAgICBhc3NlcnROb25FbXB0eShiYXNlbmFtZTIsICJiYXNlbmFtZSIpOwogICAgICAgIGFzc2VydFBhcnQoYmFzZW5hbWUyLCAiYmFzZW5hbWUiKTsKICAgICAgICB0aGlzLnBhdGggPSBtaW5wYXRoLmpvaW4odGhpcy5kaXJuYW1lIHx8ICIiLCBiYXNlbmFtZTIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGhlIHBhcmVudCBwYXRoIChleGFtcGxlOiBgJ34nYCkuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9CiAgICAgICAqICAgRGlybmFtZS4KICAgICAgICovCiAgICAgIGdldCBkaXJuYW1lKCkgewogICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy5wYXRoID09PSAic3RyaW5nIiA/IG1pbnBhdGguZGlybmFtZSh0aGlzLnBhdGgpIDogdm9pZCAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgdGhlIHBhcmVudCBwYXRoIChleGFtcGxlOiBgJ34nYCkuCiAgICAgICAqCiAgICAgICAqIENhbm5vdCBiZSBzZXQgaWYgdGhlcmXigJlzIG5vIGBwYXRoYCB5ZXQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBkaXJuYW1lCiAgICAgICAqICAgRGlybmFtZS4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgc2V0IGRpcm5hbWUoZGlybmFtZTIpIHsKICAgICAgICBhc3NlcnRQYXRoMih0aGlzLmJhc2VuYW1lLCAiZGlybmFtZSIpOwogICAgICAgIHRoaXMucGF0aCA9IG1pbnBhdGguam9pbihkaXJuYW1lMiB8fCAiIiwgdGhpcy5iYXNlbmFtZSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgZXh0bmFtZSAoaW5jbHVkaW5nIGRvdCkgKGV4YW1wbGU6IGAnLmpzJ2ApLgogICAgICAgKgogICAgICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfQogICAgICAgKiAgIEV4dG5hbWUuCiAgICAgICAqLwogICAgICBnZXQgZXh0bmFtZSgpIHsKICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMucGF0aCA9PT0gInN0cmluZyIgPyBtaW5wYXRoLmV4dG5hbWUodGhpcy5wYXRoKSA6IHZvaWQgMDsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IHRoZSBleHRuYW1lIChpbmNsdWRpbmcgZG90KSAoZXhhbXBsZTogYCcuanMnYCkuCiAgICAgICAqCiAgICAgICAqIENhbm5vdCBjb250YWluIHBhdGggc2VwYXJhdG9ycyAoYCcvJ2Agb24gdW5peCwgbWFjT1MsIGFuZCBicm93c2VycywgYCdcJ2AKICAgICAgICogb24gd2luZG93cykuCiAgICAgICAqIENhbm5vdCBiZSBzZXQgaWYgdGhlcmXigJlzIG5vIGBwYXRoYCB5ZXQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBleHRuYW1lCiAgICAgICAqICAgRXh0bmFtZS4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgc2V0IGV4dG5hbWUoZXh0bmFtZTIpIHsKICAgICAgICBhc3NlcnRQYXJ0KGV4dG5hbWUyLCAiZXh0bmFtZSIpOwogICAgICAgIGFzc2VydFBhdGgyKHRoaXMuZGlybmFtZSwgImV4dG5hbWUiKTsKICAgICAgICBpZiAoZXh0bmFtZTIpIHsKICAgICAgICAgIGlmIChleHRuYW1lMi5jb2RlUG9pbnRBdCgwKSAhPT0gNDYpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJgZXh0bmFtZWAgbXVzdCBzdGFydCB3aXRoIGAuYCIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGV4dG5hbWUyLmluY2x1ZGVzKCIuIiwgMSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJgZXh0bmFtZWAgY2Fubm90IGNvbnRhaW4gbXVsdGlwbGUgZG90cyIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLnBhdGggPSBtaW5wYXRoLmpvaW4odGhpcy5kaXJuYW1lLCB0aGlzLnN0ZW0gKyAoZXh0bmFtZTIgfHwgIiIpKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSBmdWxsIHBhdGggKGV4YW1wbGU6IGAnfi9pbmRleC5taW4uanMnYCkuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9CiAgICAgICAqICAgUGF0aC4KICAgICAgICovCiAgICAgIGdldCBwYXRoKCkgewogICAgICAgIHJldHVybiB0aGlzLmhpc3RvcnlbdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDFdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgdGhlIGZ1bGwgcGF0aCAoZXhhbXBsZTogYCd+L2luZGV4Lm1pbi5qcydgKS4KICAgICAgICoKICAgICAgICogQ2Fubm90IGJlIG51bGxpZmllZC4KICAgICAgICogWW91IGNhbiBzZXQgYSBmaWxlIFVSTCAoYSBgVVJMYCBvYmplY3Qgd2l0aCBhIGBmaWxlOmAgcHJvdG9jb2wpIHdoaWNoIHdpbGwKICAgICAgICogYmUgdHVybmVkIGludG8gYSBwYXRoIHdpdGggYHVybC5maWxlVVJMVG9QYXRoYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtVUkwgfCBzdHJpbmd9IHBhdGgKICAgICAgICogICBQYXRoLgogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcuCiAgICAgICAqLwogICAgICBzZXQgcGF0aChwYXRoMikgewogICAgICAgIGlmIChpc1VybChwYXRoMikpIHsKICAgICAgICAgIHBhdGgyID0gdXJsVG9QYXRoKHBhdGgyKTsKICAgICAgICB9CiAgICAgICAgYXNzZXJ0Tm9uRW1wdHkocGF0aDIsICJwYXRoIik7CiAgICAgICAgaWYgKHRoaXMucGF0aCAhPT0gcGF0aDIpIHsKICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKHBhdGgyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgc3RlbSAoYmFzZW5hbWUgdy9vIGV4dG5hbWUpIChleGFtcGxlOiBgJ2luZGV4Lm1pbidgKS4KICAgICAgICoKICAgICAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0KICAgICAgICogICBTdGVtLgogICAgICAgKi8KICAgICAgZ2V0IHN0ZW0oKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICJzdHJpbmciID8gbWlucGF0aC5iYXNlbmFtZSh0aGlzLnBhdGgsIHRoaXMuZXh0bmFtZSkgOiB2b2lkIDA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNldCB0aGUgc3RlbSAoYmFzZW5hbWUgdy9vIGV4dG5hbWUpIChleGFtcGxlOiBgJ2luZGV4Lm1pbidgKS4KICAgICAgICoKICAgICAgICogQ2Fubm90IGNvbnRhaW4gcGF0aCBzZXBhcmF0b3JzIChgJy8nYCBvbiB1bml4LCBtYWNPUywgYW5kIGJyb3dzZXJzLCBgJ1wnYAogICAgICAgKiBvbiB3aW5kb3dzKS4KICAgICAgICogQ2Fubm90IGJlIG51bGxpZmllZCAodXNlIGBmaWxlLnBhdGggPSBmaWxlLmRpcm5hbWVgIGluc3RlYWQpLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RlbQogICAgICAgKiAgIFN0ZW0uCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqICAgTm90aGluZy4KICAgICAgICovCiAgICAgIHNldCBzdGVtKHN0ZW0pIHsKICAgICAgICBhc3NlcnROb25FbXB0eShzdGVtLCAic3RlbSIpOwogICAgICAgIGFzc2VydFBhcnQoc3RlbSwgInN0ZW0iKTsKICAgICAgICB0aGlzLnBhdGggPSBtaW5wYXRoLmpvaW4odGhpcy5kaXJuYW1lIHx8ICIiLCBzdGVtICsgKHRoaXMuZXh0bmFtZSB8fCAiIikpOwogICAgICB9CiAgICAgIC8vIE5vcm1hbCBwcm90b3R5cGFsIG1ldGhvZHMuCiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBmYXRhbCBtZXNzYWdlIGZvciBgcmVhc29uYCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuCiAgICAgICAqCiAgICAgICAqIFRoZSBgZmF0YWxgIGZpZWxkIG9mIHRoZSBtZXNzYWdlIGlzIHNldCB0byBgdHJ1ZWAgKGVycm9yOyBmaWxlIG5vdCB1c2FibGUpCiAgICAgICAqIGFuZCB0aGUgYGZpbGVgIGZpZWxkIGlzIHNldCB0byB0aGUgY3VycmVudCBmaWxlIHBhdGguCiAgICAgICAqIFRoZSBtZXNzYWdlIGlzIGFkZGVkIHRvIHRoZSBgbWVzc2FnZXNgIGZpZWxkIG9uIGBmaWxlYC4KICAgICAgICoKICAgICAgICogPiDwn6qmICoqTm90ZSoqOiBhbHNvIGhhcyBvYnNvbGV0ZSBzaWduYXR1cmVzLgogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge01lc3NhZ2VPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdCiAgICAgICAqIEByZXR1cm5zIHtuZXZlcn0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7bmV2ZXJ9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7UG9pbnQgfCBQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IHBsYWNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge25ldmVyfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtuZXZlcn0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2V9IGNhdXNlCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGFyZW50CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge25ldmVyfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7bmV2ZXJ9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtuZXZlcn0KICAgICAgICoKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZSB8IHN0cmluZ30gY2F1c2VPclJlYXNvbgogICAgICAgKiAgIFJlYXNvbiBmb3IgbWVzc2FnZSwgc2hvdWxkIHVzZSBtYXJrZG93bi4KICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBNZXNzYWdlT3B0aW9ucyB8IFBvaW50IHwgUG9zaXRpb24gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc09yUGFyZW50T3JQbGFjZV0KICAgICAgICogICBDb25maWd1cmF0aW9uIChvcHRpb25hbCkuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogICBQbGFjZSBpbiBjb2RlIHdoZXJlIHRoZSBtZXNzYWdlIG9yaWdpbmF0ZXMgKGV4YW1wbGU6CiAgICAgICAqICAgYCdteS1wYWNrYWdlOm15LXJ1bGUnYCBvciBgJ215LXJ1bGUnYCkuCiAgICAgICAqIEByZXR1cm5zIHtuZXZlcn0KICAgICAgICogICBOZXZlci4KICAgICAgICogQHRocm93cyB7VkZpbGVNZXNzYWdlfQogICAgICAgKiAgIE1lc3NhZ2UuCiAgICAgICAqLwogICAgICBmYWlsKGNhdXNlT3JSZWFzb24sIG9wdGlvbnNPclBhcmVudE9yUGxhY2UsIG9yaWdpbikgewogICAgICAgIGNvbnN0IG1lc3NhZ2UyID0gdGhpcy5tZXNzYWdlKGNhdXNlT3JSZWFzb24sIG9wdGlvbnNPclBhcmVudE9yUGxhY2UsIG9yaWdpbik7CiAgICAgICAgbWVzc2FnZTIuZmF0YWwgPSB0cnVlOwogICAgICAgIHRocm93IG1lc3NhZ2UyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYW4gaW5mbyBtZXNzYWdlIGZvciBgcmVhc29uYCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuCiAgICAgICAqCiAgICAgICAqIFRoZSBgZmF0YWxgIGZpZWxkIG9mIHRoZSBtZXNzYWdlIGlzIHNldCB0byBgdW5kZWZpbmVkYCAoaW5mbzsgY2hhbmdlCiAgICAgICAqIGxpa2VseSBub3QgbmVlZGVkKSBhbmQgdGhlIGBmaWxlYCBmaWVsZCBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgZmlsZSBwYXRoLgogICAgICAgKiBUaGUgbWVzc2FnZSBpcyBhZGRlZCB0byB0aGUgYG1lc3NhZ2VzYCBmaWVsZCBvbiBgZmlsZWAuCiAgICAgICAqCiAgICAgICAqID4g8J+qpiAqKk5vdGUqKjogYWxzbyBoYXMgb2Jzb2xldGUgc2lnbmF0dXJlcy4KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtNZXNzYWdlT3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudAogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7UG9pbnQgfCBQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IHBsYWNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlIHwgc3RyaW5nfSBjYXVzZU9yUmVhc29uCiAgICAgICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCBzaG91bGQgdXNlIG1hcmtkb3duLgogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IE1lc3NhZ2VPcHRpb25zIHwgUG9pbnQgfCBQb3NpdGlvbiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zT3JQYXJlbnRPclBsYWNlXQogICAgICAgKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS4KICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiAgIFBsYWNlIGluIGNvZGUgd2hlcmUgdGhlIG1lc3NhZ2Ugb3JpZ2luYXRlcyAoZXhhbXBsZToKICAgICAgICogICBgJ215LXBhY2thZ2U6bXktcnVsZSdgIG9yIGAnbXktcnVsZSdgKS4KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICogICBNZXNzYWdlLgogICAgICAgKi8KICAgICAgaW5mbyhjYXVzZU9yUmVhc29uLCBvcHRpb25zT3JQYXJlbnRPclBsYWNlLCBvcmlnaW4pIHsKICAgICAgICBjb25zdCBtZXNzYWdlMiA9IHRoaXMubWVzc2FnZShjYXVzZU9yUmVhc29uLCBvcHRpb25zT3JQYXJlbnRPclBsYWNlLCBvcmlnaW4pOwogICAgICAgIG1lc3NhZ2UyLmZhdGFsID0gdm9pZCAwOwogICAgICAgIHJldHVybiBtZXNzYWdlMjsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgbWVzc2FnZSBmb3IgYHJlYXNvbmAgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlLgogICAgICAgKgogICAgICAgKiBUaGUgYGZhdGFsYCBmaWVsZCBvZiB0aGUgbWVzc2FnZSBpcyBzZXQgdG8gYGZhbHNlYCAod2FybmluZzsgY2hhbmdlIG1heSBiZQogICAgICAgKiBuZWVkZWQpIGFuZCB0aGUgYGZpbGVgIGZpZWxkIGlzIHNldCB0byB0aGUgY3VycmVudCBmaWxlIHBhdGguCiAgICAgICAqIFRoZSBtZXNzYWdlIGlzIGFkZGVkIHRvIHRoZSBgbWVzc2FnZXNgIGZpZWxkIG9uIGBmaWxlYC4KICAgICAgICoKICAgICAgICogPiDwn6qmICoqTm90ZSoqOiBhbHNvIGhhcyBvYnNvbGV0ZSBzaWduYXR1cmVzLgogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge01lc3NhZ2VPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGFyZW50CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudAogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge1BvaW50IHwgUG9zaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBwbGFjZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2UgfCBzdHJpbmd9IGNhdXNlT3JSZWFzb24KICAgICAgICogICBSZWFzb24gZm9yIG1lc3NhZ2UsIHNob3VsZCB1c2UgbWFya2Rvd24uCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgTWVzc2FnZU9wdGlvbnMgfCBQb2ludCB8IFBvc2l0aW9uIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNPclBhcmVudE9yUGxhY2VdCiAgICAgICAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqICAgUGxhY2UgaW4gY29kZSB3aGVyZSB0aGUgbWVzc2FnZSBvcmlnaW5hdGVzIChleGFtcGxlOgogICAgICAgKiAgIGAnbXktcGFja2FnZTpteS1ydWxlJ2Agb3IgYCdteS1ydWxlJ2ApLgogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKiAgIE1lc3NhZ2UuCiAgICAgICAqLwogICAgICBtZXNzYWdlKGNhdXNlT3JSZWFzb24sIG9wdGlvbnNPclBhcmVudE9yUGxhY2UsIG9yaWdpbikgewogICAgICAgIGNvbnN0IG1lc3NhZ2UyID0gbmV3IFZGaWxlTWVzc2FnZSgKICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHRoZSBvdmVybG9hZHMgYXJlIGZpbmUuCiAgICAgICAgICBjYXVzZU9yUmVhc29uLAogICAgICAgICAgb3B0aW9uc09yUGFyZW50T3JQbGFjZSwKICAgICAgICAgIG9yaWdpbgogICAgICAgICk7CiAgICAgICAgaWYgKHRoaXMucGF0aCkgewogICAgICAgICAgbWVzc2FnZTIubmFtZSA9IHRoaXMucGF0aCArICI6IiArIG1lc3NhZ2UyLm5hbWU7CiAgICAgICAgICBtZXNzYWdlMi5maWxlID0gdGhpcy5wYXRoOwogICAgICAgIH0KICAgICAgICBtZXNzYWdlMi5mYXRhbCA9IGZhbHNlOwogICAgICAgIHRoaXMubWVzc2FnZXMucHVzaChtZXNzYWdlMik7CiAgICAgICAgcmV0dXJuIG1lc3NhZ2UyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXJpYWxpemUgdGhlIGZpbGUuCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IHdoaWNoIGVuY29kaW5ncyBhcmUgc3VwcG9ydGVkIGRlcGVuZHMgb24gdGhlIGVuZ2luZS4KICAgICAgICogPiBGb3IgaW5mbyBvbiBOb2RlLmpzLCBzZWU6CiAgICAgICAqID4gPGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvdXRpbC5odG1sI3doYXR3Zy1zdXBwb3J0ZWQtZW5jb2RpbmdzPi4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbZW5jb2Rpbmc9J3V0ZjgnXQogICAgICAgKiAgIENoYXJhY3RlciBlbmNvZGluZyB0byB1bmRlcnN0YW5kIGB2YWx1ZWAgYXMgd2hlbiBpdOKAmXMgYSBgVWludDhBcnJheWAKICAgICAgICogICAoZGVmYXVsdDogYCd1dGYtOCdgKS4KICAgICAgICogQHJldHVybnMge3N0cmluZ30KICAgICAgICogICBTZXJpYWxpemVkIGZpbGUuCiAgICAgICAqLwogICAgICB0b1N0cmluZyhlbmNvZGluZykgewogICAgICAgIGlmICh0aGlzLnZhbHVlID09PSB2b2lkIDApIHsKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlID09PSAic3RyaW5nIikgewogICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGRlY29kZXIyID0gbmV3IFRleHREZWNvZGVyKGVuY29kaW5nIHx8IHZvaWQgMCk7CiAgICAgICAgcmV0dXJuIGRlY29kZXIyLmRlY29kZSh0aGlzLnZhbHVlKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9pbmRleC5qcwp2YXIgaW5pdF92ZmlsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaWZpZWRAMTEuMC41L25vZGVfbW9kdWxlcy91bmlmaWVkL2xpYi9jYWxsYWJsZS1pbnN0YW5jZS5qcwp2YXIgQ2FsbGFibGVJbnN0YW5jZTsKdmFyIGluaXRfY2FsbGFibGVfaW5zdGFuY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlmaWVkQDExLjAuNS9ub2RlX21vZHVsZXMvdW5pZmllZC9saWIvY2FsbGFibGUtaW5zdGFuY2UuanMiKCkgewogICAgQ2FsbGFibGVJbnN0YW5jZSA9IC8qKgogICAgICogQHR5cGUge25ldyA8UGFyYW1ldGVycyBleHRlbmRzIEFycmF5PHVua25vd24+LCBSZXN1bHQ+KHByb3BlcnR5OiBzdHJpbmcgfCBzeW1ib2wpID0+ICguLi5wYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzKSA9PiBSZXN1bHR9CiAgICAgKi8KICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi8KICAgIC8qKgogICAgICogQHRoaXMge0Z1bmN0aW9ufQogICAgICogQHBhcmFtIHtzdHJpbmcgfCBzeW1ib2x9IHByb3BlcnR5CiAgICAgKiBAcmV0dXJucyB7KC4uLnBhcmFtZXRlcnM6IEFycmF5PHVua25vd24+KSA9PiB1bmtub3dufQogICAgICovCiAgICAoZnVuY3Rpb24ocHJvcGVydHkxMykgewogICAgICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgICAgIGNvbnN0IGNvbnN0ciA9IHNlbGYyLmNvbnN0cnVjdG9yOwogICAgICBjb25zdCBwcm90byA9ICgKICAgICAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcgfCBzeW1ib2wsIEZ1bmN0aW9uPn0gKi8KICAgICAgICAvLyBQcm90b3R5cGVzIGRvIGV4aXN0LgogICAgICAgIC8vIHR5cGUtY292ZXJhZ2U6aWdub3JlLW5leHQtbGluZQogICAgICAgIGNvbnN0ci5wcm90b3R5cGUKICAgICAgKTsKICAgICAgY29uc3QgdmFsdWUyID0gcHJvdG9bcHJvcGVydHkxM107CiAgICAgIGNvbnN0IGFwcGx5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMi5hcHBseShhcHBseSwgYXJndW1lbnRzKTsKICAgICAgfTsKICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFwcGx5LCBwcm90byk7CiAgICAgIHJldHVybiBhcHBseTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pZmllZEAxMS4wLjUvbm9kZV9tb2R1bGVzL3VuaWZpZWQvbGliL2luZGV4LmpzCmZ1bmN0aW9uIGFzc2VydFBhcnNlcihuYW1lLCB2YWx1ZTIpIHsKICBpZiAodHlwZW9mIHZhbHVlMiAhPT0gImZ1bmN0aW9uIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGAiICsgbmFtZSArICJgIHdpdGhvdXQgYHBhcnNlcmAiKTsKICB9Cn0KZnVuY3Rpb24gYXNzZXJ0Q29tcGlsZXIobmFtZSwgdmFsdWUyKSB7CiAgaWYgKHR5cGVvZiB2YWx1ZTIgIT09ICJmdW5jdGlvbiIpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBgIiArIG5hbWUgKyAiYCB3aXRob3V0IGBjb21waWxlcmAiKTsKICB9Cn0KZnVuY3Rpb24gYXNzZXJ0VW5mcm96ZW4obmFtZSwgZnJvemVuKSB7CiAgaWYgKGZyb3plbikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiQ2Fubm90IGNhbGwgYCIgKyBuYW1lICsgImAgb24gYSBmcm96ZW4gcHJvY2Vzc29yLlxuQ3JlYXRlIGEgbmV3IHByb2Nlc3NvciBmaXJzdCwgYnkgY2FsbGluZyBpdDogdXNlIGBwcm9jZXNzb3IoKWAgaW5zdGVhZCBvZiBgcHJvY2Vzc29yYC4iCiAgICApOwogIH0KfQpmdW5jdGlvbiBhc3NlcnROb2RlKG5vZGUyKSB7CiAgaWYgKCFpc1BsYWluT2JqZWN0KG5vZGUyKSB8fCB0eXBlb2Ygbm9kZTIudHlwZSAhPT0gInN0cmluZyIpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIG5vZGUsIGdvdCBgIiArIG5vZGUyICsgImAiKTsKICB9Cn0KZnVuY3Rpb24gYXNzZXJ0RG9uZShuYW1lLCBhc3luY05hbWUsIGNvbXBsZXRlKSB7CiAgaWYgKCFjb21wbGV0ZSkgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiYCIgKyBuYW1lICsgImAgZmluaXNoZWQgYXN5bmMuIFVzZSBgIiArIGFzeW5jTmFtZSArICJgIGluc3RlYWQiCiAgICApOwogIH0KfQpmdW5jdGlvbiB2ZmlsZSh2YWx1ZTIpIHsKICByZXR1cm4gbG9va3NMaWtlQVZGaWxlKHZhbHVlMikgPyB2YWx1ZTIgOiBuZXcgVkZpbGUodmFsdWUyKTsKfQpmdW5jdGlvbiBsb29rc0xpa2VBVkZpbGUodmFsdWUyKSB7CiAgcmV0dXJuIEJvb2xlYW4oCiAgICB2YWx1ZTIgJiYgdHlwZW9mIHZhbHVlMiA9PT0gIm9iamVjdCIgJiYgIm1lc3NhZ2UiIGluIHZhbHVlMiAmJiAibWVzc2FnZXMiIGluIHZhbHVlMgogICk7Cn0KZnVuY3Rpb24gbG9va3NMaWtlQVZhbHVlKHZhbHVlMikgewogIHJldHVybiB0eXBlb2YgdmFsdWUyID09PSAic3RyaW5nIiB8fCBpc1VpbnQ4QXJyYXk0KHZhbHVlMik7Cn0KZnVuY3Rpb24gaXNVaW50OEFycmF5NCh2YWx1ZTIpIHsKICByZXR1cm4gQm9vbGVhbigKICAgIHZhbHVlMiAmJiB0eXBlb2YgdmFsdWUyID09PSAib2JqZWN0IiAmJiAiYnl0ZUxlbmd0aCIgaW4gdmFsdWUyICYmICJieXRlT2Zmc2V0IiBpbiB2YWx1ZTIKICApOwp9CnZhciBpbXBvcnRfZXh0ZW5kLCBvd24sIFByb2Nlc3NvciwgdW5pZmllZDsKdmFyIGluaXRfbGliNSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaWZpZWRAMTEuMC41L25vZGVfbW9kdWxlcy91bmlmaWVkL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2JhaWwoKTsKICAgIGltcG9ydF9leHRlbmQgPSBfX3RvRVNNKHJlcXVpcmVfZXh0ZW5kKCksIDEpOwogICAgaW5pdF9kZWZhdWx0KCk7CiAgICBpbml0X2lzX3BsYWluX29iaigpOwogICAgaW5pdF90cm91Z2goKTsKICAgIGluaXRfdmZpbGUoKTsKICAgIGluaXRfY2FsbGFibGVfaW5zdGFuY2UoKTsKICAgIG93biA9IHt9Lmhhc093blByb3BlcnR5OwogICAgUHJvY2Vzc29yID0gY2xhc3MgX1Byb2Nlc3NvciBleHRlbmRzIENhbGxhYmxlSW5zdGFuY2UgewogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgcHJvY2Vzc29yLgogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoImNvcHkiKTsKICAgICAgICB0aGlzLkNvbXBpbGVyID0gdm9pZCAwOwogICAgICAgIHRoaXMuUGFyc2VyID0gdm9pZCAwOwogICAgICAgIHRoaXMuYXR0YWNoZXJzID0gW107CiAgICAgICAgdGhpcy5jb21waWxlciA9IHZvaWQgMDsKICAgICAgICB0aGlzLmZyZWV6ZUluZGV4ID0gLTE7CiAgICAgICAgdGhpcy5mcm96ZW4gPSB2b2lkIDA7CiAgICAgICAgdGhpcy5uYW1lc3BhY2UgPSB7fTsKICAgICAgICB0aGlzLnBhcnNlciA9IHZvaWQgMDsKICAgICAgICB0aGlzLnRyYW5zZm9ybWVycyA9IHRyb3VnaCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDb3B5IGEgcHJvY2Vzc29yLgogICAgICAgKgogICAgICAgKiBAZGVwcmVjYXRlZAogICAgICAgKiAgIFRoaXMgaXMgYSBwcml2YXRlIGludGVybmFsIG1ldGhvZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLgogICAgICAgKiBAcmV0dXJucyB7UHJvY2Vzc29yPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdD59CiAgICAgICAqICAgTmV3ICp1bmZyb3plbiogcHJvY2Vzc29yICh7QGxpbmtjb2RlIFByb2Nlc3Nvcn0pIHRoYXQgaXMKICAgICAgICogICBjb25maWd1cmVkIHRvIHdvcmsgdGhlIHNhbWUgYXMgaXRzIGFuY2VzdG9yLgogICAgICAgKiAgIFdoZW4gdGhlIGRlc2NlbmRhbnQgcHJvY2Vzc29yIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGZ1dHVyZSBpdCBkb2VzIG5vdAogICAgICAgKiAgIGFmZmVjdCB0aGUgYW5jZXN0cmFsIHByb2Nlc3Nvci4KICAgICAgICovCiAgICAgIGNvcHkoKSB7CiAgICAgICAgY29uc3QgZGVzdGluYXRpb24gPSAoCiAgICAgICAgICAvKiogQHR5cGUge1Byb2Nlc3NvcjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQ+fSAqLwogICAgICAgICAgbmV3IF9Qcm9jZXNzb3IoKQogICAgICAgICk7CiAgICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICAgIHdoaWxlICgrK2luZGV4MiA8IHRoaXMuYXR0YWNoZXJzLmxlbmd0aCkgewogICAgICAgICAgY29uc3QgYXR0YWNoZXIgPSB0aGlzLmF0dGFjaGVyc1tpbmRleDJdOwogICAgICAgICAgZGVzdGluYXRpb24udXNlKC4uLmF0dGFjaGVyKTsKICAgICAgICB9CiAgICAgICAgZGVzdGluYXRpb24uZGF0YSgoMCwgaW1wb3J0X2V4dGVuZC5kZWZhdWx0KSh0cnVlLCB7fSwgdGhpcy5uYW1lc3BhY2UpKTsKICAgICAgICByZXR1cm4gZGVzdGluYXRpb247CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENvbmZpZ3VyZSB0aGUgcHJvY2Vzc29yIHdpdGggaW5mbyBhdmFpbGFibGUgdG8gYWxsIHBsdWdpbnMuCiAgICAgICAqIEluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiBhbiBvYmplY3QuCiAgICAgICAqCiAgICAgICAqIFR5cGljYWxseSwgb3B0aW9ucyBjYW4gYmUgZ2l2ZW4gdG8gYSBzcGVjaWZpYyBwbHVnaW4sIGJ1dCBzb21ldGltZXMgaXQKICAgICAgICogbWFrZXMgc2Vuc2UgdG8gaGF2ZSBpbmZvcm1hdGlvbiBzaGFyZWQgd2l0aCBzZXZlcmFsIHBsdWdpbnMuCiAgICAgICAqIEZvciBleGFtcGxlLCBhIGxpc3Qgb2YgSFRNTCBlbGVtZW50cyB0aGF0IGFyZSBzZWxmLWNsb3NpbmcsIHdoaWNoIGlzCiAgICAgICAqIG5lZWRlZCBkdXJpbmcgYWxsIHBoYXNlcy4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogc2V0dGluZyBpbmZvcm1hdGlvbiBjYW5ub3Qgb2NjdXIgb24gKmZyb3plbiogcHJvY2Vzc29ycy4KICAgICAgICogPiBDYWxsIHRoZSBwcm9jZXNzb3IgZmlyc3QgdG8gY3JlYXRlIGEgbmV3IHVuZnJvemVuIHByb2Nlc3Nvci4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogdG8gcmVnaXN0ZXIgY3VzdG9tIGRhdGEgaW4gVHlwZVNjcmlwdCwgYXVnbWVudCB0aGUKICAgICAgICogPiB7QGxpbmtjb2RlIERhdGF9IGludGVyZmFjZS4KICAgICAgICoKICAgICAgICogQGV4YW1wbGUKICAgICAgICogICBUaGlzIGV4YW1wbGUgc2hvdyBob3cgdG8gZ2V0IGFuZCBzZXQgaW5mbzoKICAgICAgICoKICAgICAgICogICBgYGBqcwogICAgICAgKiAgIGltcG9ydCB7dW5pZmllZH0gZnJvbSAndW5pZmllZCcKICAgICAgICoKICAgICAgICogICBjb25zdCBwcm9jZXNzb3IgPSB1bmlmaWVkKCkuZGF0YSgnYWxwaGEnLCAnYnJhdm8nKQogICAgICAgKgogICAgICAgKiAgIHByb2Nlc3Nvci5kYXRhKCdhbHBoYScpIC8vID0+ICdicmF2bycKICAgICAgICoKICAgICAgICogICBwcm9jZXNzb3IuZGF0YSgpIC8vID0+IHthbHBoYTogJ2JyYXZvJ30KICAgICAgICoKICAgICAgICogICBwcm9jZXNzb3IuZGF0YSh7Y2hhcmxpZTogJ2RlbHRhJ30pCiAgICAgICAqCiAgICAgICAqICAgcHJvY2Vzc29yLmRhdGEoKSAvLyA9PiB7Y2hhcmxpZTogJ2RlbHRhJ30KICAgICAgICogICBgYGAKICAgICAgICoKICAgICAgICogQHRlbXBsYXRlIHtrZXlvZiBEYXRhfSBLZXkKICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEByZXR1cm5zIHtEYXRhfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtEYXRhfSBkYXRhc2V0CiAgICAgICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7S2V5fSBrZXkKICAgICAgICogQHJldHVybnMge0RhdGFbS2V5XX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7S2V5fSBrZXkKICAgICAgICogQHBhcmFtIHtEYXRhW0tleV19IHZhbHVlCiAgICAgICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn0KICAgICAgICoKICAgICAgICogQHBhcmFtIHtEYXRhIHwgS2V5fSBba2V5XQogICAgICAgKiAgIEtleSB0byBnZXQgb3Igc2V0LCBvciBlbnRpcmUgZGF0YXNldCB0byBzZXQsIG9yIG5vdGhpbmcgdG8gZ2V0IHRoZQogICAgICAgKiAgIGVudGlyZSBkYXRhc2V0IChvcHRpb25hbCkuCiAgICAgICAqIEBwYXJhbSB7RGF0YVtLZXldfSBbdmFsdWVdCiAgICAgICAqICAgVmFsdWUgdG8gc2V0IChvcHRpb25hbCkuCiAgICAgICAqIEByZXR1cm5zIHt1bmtub3dufQogICAgICAgKiAgIFRoZSBjdXJyZW50IHByb2Nlc3NvciB3aGVuIHNldHRpbmcsIHRoZSB2YWx1ZSBhdCBga2V5YCB3aGVuIGdldHRpbmcsIG9yCiAgICAgICAqICAgdGhlIGVudGlyZSBkYXRhc2V0IHdoZW4gZ2V0dGluZyB3aXRob3V0IGtleS4KICAgICAgICovCiAgICAgIGRhdGEoa2V5MiwgdmFsdWUyKSB7CiAgICAgICAgaWYgKHR5cGVvZiBrZXkyID09PSAic3RyaW5nIikgewogICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHsKICAgICAgICAgICAgYXNzZXJ0VW5mcm96ZW4oImRhdGEiLCB0aGlzLmZyb3plbik7CiAgICAgICAgICAgIHRoaXMubmFtZXNwYWNlW2tleTJdID0gdmFsdWUyOwogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBvd24uY2FsbCh0aGlzLm5hbWVzcGFjZSwga2V5MikgJiYgdGhpcy5uYW1lc3BhY2Vba2V5Ml0gfHwgdm9pZCAwOwogICAgICAgIH0KICAgICAgICBpZiAoa2V5MikgewogICAgICAgICAgYXNzZXJ0VW5mcm96ZW4oImRhdGEiLCB0aGlzLmZyb3plbik7CiAgICAgICAgICB0aGlzLm5hbWVzcGFjZSA9IGtleTI7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMubmFtZXNwYWNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBGcmVlemUgYSBwcm9jZXNzb3IuCiAgICAgICAqCiAgICAgICAqIEZyb3plbiBwcm9jZXNzb3JzIGFyZSBtZWFudCB0byBiZSBleHRlbmRlZCBhbmQgbm90IHRvIGJlIGNvbmZpZ3VyZWQKICAgICAgICogZGlyZWN0bHkuCiAgICAgICAqCiAgICAgICAqIFdoZW4gYSBwcm9jZXNzb3IgaXMgZnJvemVuIGl0IGNhbm5vdCBiZSB1bmZyb3plbi4KICAgICAgICogTmV3IHByb2Nlc3NvcnMgd29ya2luZyB0aGUgc2FtZSB3YXkgY2FuIGJlIGNyZWF0ZWQgYnkgY2FsbGluZyB0aGUKICAgICAgICogcHJvY2Vzc29yLgogICAgICAgKgogICAgICAgKiBJdOKAmXMgcG9zc2libGUgdG8gZnJlZXplIHByb2Nlc3NvcnMgZXhwbGljaXRseSBieSBjYWxsaW5nIGAuZnJlZXplKClgLgogICAgICAgKiBQcm9jZXNzb3JzIGZyZWV6ZSBhdXRvbWF0aWNhbGx5IHdoZW4gYC5wYXJzZSgpYCwgYC5ydW4oKWAsIGAucnVuU3luYygpYCwKICAgICAgICogYC5zdHJpbmdpZnkoKWAsIGAucHJvY2VzcygpYCwgb3IgYC5wcm9jZXNzU3luYygpYCBhcmUgY2FsbGVkLgogICAgICAgKgogICAgICAgKiBAcmV0dXJucyB7UHJvY2Vzc29yPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdD59CiAgICAgICAqICAgVGhlIGN1cnJlbnQgcHJvY2Vzc29yLgogICAgICAgKi8KICAgICAgZnJlZXplKCkgewogICAgICAgIGlmICh0aGlzLmZyb3plbikgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHNlbGYyID0gKAogICAgICAgICAgLyoqIEB0eXBlIHtQcm9jZXNzb3J9ICovCiAgICAgICAgICAvKiogQHR5cGUge3Vua25vd259ICovCiAgICAgICAgICB0aGlzCiAgICAgICAgKTsKICAgICAgICB3aGlsZSAoKyt0aGlzLmZyZWV6ZUluZGV4IDwgdGhpcy5hdHRhY2hlcnMubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCBbYXR0YWNoZXIsIC4uLm9wdGlvbnNdID0gdGhpcy5hdHRhY2hlcnNbdGhpcy5mcmVlemVJbmRleF07CiAgICAgICAgICBpZiAob3B0aW9uc1swXSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAob3B0aW9uc1swXSA9PT0gdHJ1ZSkgewogICAgICAgICAgICBvcHRpb25zWzBdID0gdm9pZCAwOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBhdHRhY2hlci5jYWxsKHNlbGYyLCAuLi5vcHRpb25zKTsKICAgICAgICAgIGlmICh0eXBlb2YgdHJhbnNmb3JtZXIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1lcnMudXNlKHRyYW5zZm9ybWVyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5mcm96ZW4gPSB0cnVlOwogICAgICAgIHRoaXMuZnJlZXplSW5kZXggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFBhcnNlIHRleHQgdG8gYSBzeW50YXggdHJlZS4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHBhcnNlYCBmcmVlemVzIHRoZSBwcm9jZXNzb3IgaWYgbm90IGFscmVhZHkgKmZyb3plbiouCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBwYXJzZWAgcGVyZm9ybXMgdGhlIHBhcnNlIHBoYXNlLCBub3QgdGhlIHJ1biBwaGFzZSBvciBvdGhlcgogICAgICAgKiA+IHBoYXNlcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBbZmlsZV0KICAgICAgICogICBmaWxlIHRvIHBhcnNlIChvcHRpb25hbCk7IHR5cGljYWxseSBgc3RyaW5nYCBvciBgVkZpbGVgOyBhbnkgdmFsdWUKICAgICAgICogICBhY2NlcHRlZCBhcyBgeGAgaW4gYG5ldyBWRmlsZSh4KWAuCiAgICAgICAqIEByZXR1cm5zIHtQYXJzZVRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogUGFyc2VUcmVlfQogICAgICAgKiAgIFN5bnRheCB0cmVlIHJlcHJlc2VudGluZyBgZmlsZWAuCiAgICAgICAqLwogICAgICBwYXJzZShmaWxlKSB7CiAgICAgICAgdGhpcy5mcmVlemUoKTsKICAgICAgICBjb25zdCByZWFsRmlsZSA9IHZmaWxlKGZpbGUpOwogICAgICAgIGNvbnN0IHBhcnNlciA9IHRoaXMucGFyc2VyIHx8IHRoaXMuUGFyc2VyOwogICAgICAgIGFzc2VydFBhcnNlcigicGFyc2UiLCBwYXJzZXIpOwogICAgICAgIHJldHVybiBwYXJzZXIoU3RyaW5nKHJlYWxGaWxlKSwgcmVhbEZpbGUpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBQcm9jZXNzIHRoZSBnaXZlbiBmaWxlIGFzIGNvbmZpZ3VyZWQgb24gdGhlIHByb2Nlc3Nvci4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHByb2Nlc3NgIGZyZWV6ZXMgdGhlIHByb2Nlc3NvciBpZiBub3QgYWxyZWFkeSAqZnJvemVuKi4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHByb2Nlc3NgIHBlcmZvcm1zIHRoZSBwYXJzZSwgcnVuLCBhbmQgc3RyaW5naWZ5IHBoYXNlcy4KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gZmlsZQogICAgICAgKiBAcGFyYW0ge1Byb2Nlc3NDYWxsYmFjazxWRmlsZVdpdGhPdXRwdXQ8Q29tcGlsZVJlc3VsdD4+fSBkb25lCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCB1bmRlZmluZWR9IFtmaWxlXQogICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxWRmlsZVdpdGhPdXRwdXQ8Q29tcGlsZVJlc3VsdD4+fQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCB1bmRlZmluZWR9IFtmaWxlXQogICAgICAgKiAgIEZpbGUgKG9wdGlvbmFsKTsgdHlwaWNhbGx5IGBzdHJpbmdgIG9yIGBWRmlsZWBdOyBhbnkgdmFsdWUgYWNjZXB0ZWQgYXMKICAgICAgICogICBgeGAgaW4gYG5ldyBWRmlsZSh4KWAuCiAgICAgICAqIEBwYXJhbSB7UHJvY2Vzc0NhbGxiYWNrPFZGaWxlV2l0aE91dHB1dDxDb21waWxlUmVzdWx0Pj4gfCB1bmRlZmluZWR9IFtkb25lXQogICAgICAgKiAgIENhbGxiYWNrIChvcHRpb25hbCkuCiAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFZGaWxlPiB8IHVuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nIGlmIGBkb25lYCBpcyBnaXZlbi4KICAgICAgICogICBPdGhlcndpc2UgYSBwcm9taXNlLCByZWplY3RlZCB3aXRoIGEgZmF0YWwgZXJyb3Igb3IgcmVzb2x2ZWQgd2l0aCB0aGUKICAgICAgICogICBwcm9jZXNzZWQgZmlsZS4KICAgICAgICoKICAgICAgICogICBUaGUgcGFyc2VkLCB0cmFuc2Zvcm1lZCwgYW5kIGNvbXBpbGVkIHZhbHVlIGlzIGF2YWlsYWJsZSBhdAogICAgICAgKiAgIGBmaWxlLnZhbHVlYCAoc2VlIG5vdGUpLgogICAgICAgKgogICAgICAgKiAgID4gKipOb3RlKio6IHVuaWZpZWQgdHlwaWNhbGx5IGNvbXBpbGVzIGJ5IHNlcmlhbGl6aW5nOiBtb3N0CiAgICAgICAqICAgPiBjb21waWxlcnMgcmV0dXJuIGBzdHJpbmdgIChvciBgVWludDhBcnJheWApLgogICAgICAgKiAgID4gU29tZSBjb21waWxlcnMsIHN1Y2ggYXMgdGhlIG9uZSBjb25maWd1cmVkIHdpdGgKICAgICAgICogICA+IFtgcmVoeXBlLXJlYWN0YF1bcmVoeXBlLXJlYWN0XSwgcmV0dXJuIG90aGVyIHZhbHVlcyAoaW4gdGhpcyBjYXNlLCBhCiAgICAgICAqICAgPiBSZWFjdCB0cmVlKS4KICAgICAgICogICA+IElmIHlvdeKAmXJlIHVzaW5nIGEgY29tcGlsZXIgdGhhdCBkb2VzbuKAmXQgc2VyaWFsaXplLCBleHBlY3QgZGlmZmVyZW50CiAgICAgICAqICAgPiByZXN1bHQgdmFsdWVzLgogICAgICAgKiAgID4KICAgICAgICogICA+IFRvIHJlZ2lzdGVyIGN1c3RvbSByZXN1bHRzIGluIFR5cGVTY3JpcHQsIGFkZCB0aGVtIHRvCiAgICAgICAqICAgPiB7QGxpbmtjb2RlIENvbXBpbGVSZXN1bHRNYXB9LgogICAgICAgKgogICAgICAgKiAgIFtyZWh5cGUtcmVhY3RdOiBodHRwczovL2dpdGh1Yi5jb20vcmVoeXBlanMvcmVoeXBlLXJlYWN0CiAgICAgICAqLwogICAgICBwcm9jZXNzKGZpbGUsIGRvbmUpIHsKICAgICAgICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgICAgICAgdGhpcy5mcmVlemUoKTsKICAgICAgICBhc3NlcnRQYXJzZXIoInByb2Nlc3MiLCB0aGlzLnBhcnNlciB8fCB0aGlzLlBhcnNlcik7CiAgICAgICAgYXNzZXJ0Q29tcGlsZXIoInByb2Nlc3MiLCB0aGlzLmNvbXBpbGVyIHx8IHRoaXMuQ29tcGlsZXIpOwogICAgICAgIHJldHVybiBkb25lID8gZXhlY3V0b3Iodm9pZCAwLCBkb25lKSA6IG5ldyBQcm9taXNlKGV4ZWN1dG9yKTsKICAgICAgICBmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICAgICAgICBjb25zdCByZWFsRmlsZSA9IHZmaWxlKGZpbGUpOwogICAgICAgICAgY29uc3QgcGFyc2VUcmVlID0gKAogICAgICAgICAgICAvKiogQHR5cGUge0hlYWRUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IEhlYWRUcmVlfSAqLwogICAgICAgICAgICAvKiogQHR5cGUge3Vua25vd259ICovCiAgICAgICAgICAgIHNlbGYyLnBhcnNlKHJlYWxGaWxlKQogICAgICAgICAgKTsKICAgICAgICAgIHNlbGYyLnJ1bihwYXJzZVRyZWUsIHJlYWxGaWxlLCBmdW5jdGlvbihlcnJvciwgdHJlZSwgZmlsZTIpIHsKICAgICAgICAgICAgaWYgKGVycm9yIHx8ICF0cmVlIHx8ICFmaWxlMikgewogICAgICAgICAgICAgIHJldHVybiByZWFsRG9uZShlcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgY29tcGlsZVRyZWUgPSAoCiAgICAgICAgICAgICAgLyoqIEB0eXBlIHtDb21waWxlVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBDb21waWxlVHJlZX0gKi8KICAgICAgICAgICAgICAvKiogQHR5cGUge3Vua25vd259ICovCiAgICAgICAgICAgICAgdHJlZQogICAgICAgICAgICApOwogICAgICAgICAgICBjb25zdCBjb21waWxlUmVzdWx0ID0gc2VsZjIuc3RyaW5naWZ5KGNvbXBpbGVUcmVlLCBmaWxlMik7CiAgICAgICAgICAgIGlmIChsb29rc0xpa2VBVmFsdWUoY29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgICAgICBmaWxlMi52YWx1ZSA9IGNvbXBpbGVSZXN1bHQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgZmlsZTIucmVzdWx0ID0gY29tcGlsZVJlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZWFsRG9uZSgKICAgICAgICAgICAgICBlcnJvciwKICAgICAgICAgICAgICAvKiogQHR5cGUge1ZGaWxlV2l0aE91dHB1dDxDb21waWxlUmVzdWx0Pn0gKi8KICAgICAgICAgICAgICBmaWxlMgogICAgICAgICAgICApOwogICAgICAgICAgfSk7CiAgICAgICAgICBmdW5jdGlvbiByZWFsRG9uZShlcnJvciwgZmlsZTIpIHsKICAgICAgICAgICAgaWYgKGVycm9yIHx8ICFmaWxlMikgewogICAgICAgICAgICAgIHJlamVjdChlcnJvcik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb2x2ZTIpIHsKICAgICAgICAgICAgICByZXNvbHZlMihmaWxlMik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgb2soZG9uZSwgImBkb25lYCBpcyBkZWZpbmVkIGlmIGByZXNvbHZlYCBpcyBub3QiKTsKICAgICAgICAgICAgICBkb25lKHZvaWQgMCwgZmlsZTIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBQcm9jZXNzIHRoZSBnaXZlbiBmaWxlIGFzIGNvbmZpZ3VyZWQgb24gdGhlIHByb2Nlc3Nvci4KICAgICAgICoKICAgICAgICogQW4gZXJyb3IgaXMgdGhyb3duIGlmIGFzeW5jaHJvbm91cyB0cmFuc2Zvcm1zIGFyZSBjb25maWd1cmVkLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcHJvY2Vzc1N5bmNgIGZyZWV6ZXMgdGhlIHByb2Nlc3NvciBpZiBub3QgYWxyZWFkeSAqZnJvemVuKi4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHByb2Nlc3NTeW5jYCBwZXJmb3JtcyB0aGUgcGFyc2UsIHJ1biwgYW5kIHN0cmluZ2lmeSBwaGFzZXMuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdCiAgICAgICAqICAgRmlsZSAob3B0aW9uYWwpOyB0eXBpY2FsbHkgYHN0cmluZ2Agb3IgYFZGaWxlYDsgYW55IHZhbHVlIGFjY2VwdGVkIGFzCiAgICAgICAqICAgYHhgIGluIGBuZXcgVkZpbGUoeClgLgogICAgICAgKiBAcmV0dXJucyB7VkZpbGVXaXRoT3V0cHV0PENvbXBpbGVSZXN1bHQ+fQogICAgICAgKiAgIFRoZSBwcm9jZXNzZWQgZmlsZS4KICAgICAgICoKICAgICAgICogICBUaGUgcGFyc2VkLCB0cmFuc2Zvcm1lZCwgYW5kIGNvbXBpbGVkIHZhbHVlIGlzIGF2YWlsYWJsZSBhdAogICAgICAgKiAgIGBmaWxlLnZhbHVlYCAoc2VlIG5vdGUpLgogICAgICAgKgogICAgICAgKiAgID4gKipOb3RlKio6IHVuaWZpZWQgdHlwaWNhbGx5IGNvbXBpbGVzIGJ5IHNlcmlhbGl6aW5nOiBtb3N0CiAgICAgICAqICAgPiBjb21waWxlcnMgcmV0dXJuIGBzdHJpbmdgIChvciBgVWludDhBcnJheWApLgogICAgICAgKiAgID4gU29tZSBjb21waWxlcnMsIHN1Y2ggYXMgdGhlIG9uZSBjb25maWd1cmVkIHdpdGgKICAgICAgICogICA+IFtgcmVoeXBlLXJlYWN0YF1bcmVoeXBlLXJlYWN0XSwgcmV0dXJuIG90aGVyIHZhbHVlcyAoaW4gdGhpcyBjYXNlLCBhCiAgICAgICAqICAgPiBSZWFjdCB0cmVlKS4KICAgICAgICogICA+IElmIHlvdeKAmXJlIHVzaW5nIGEgY29tcGlsZXIgdGhhdCBkb2VzbuKAmXQgc2VyaWFsaXplLCBleHBlY3QgZGlmZmVyZW50CiAgICAgICAqICAgPiByZXN1bHQgdmFsdWVzLgogICAgICAgKiAgID4KICAgICAgICogICA+IFRvIHJlZ2lzdGVyIGN1c3RvbSByZXN1bHRzIGluIFR5cGVTY3JpcHQsIGFkZCB0aGVtIHRvCiAgICAgICAqICAgPiB7QGxpbmtjb2RlIENvbXBpbGVSZXN1bHRNYXB9LgogICAgICAgKgogICAgICAgKiAgIFtyZWh5cGUtcmVhY3RdOiBodHRwczovL2dpdGh1Yi5jb20vcmVoeXBlanMvcmVoeXBlLXJlYWN0CiAgICAgICAqLwogICAgICBwcm9jZXNzU3luYyhmaWxlKSB7CiAgICAgICAgbGV0IGNvbXBsZXRlID0gZmFsc2U7CiAgICAgICAgbGV0IHJlc3VsdDsKICAgICAgICB0aGlzLmZyZWV6ZSgpOwogICAgICAgIGFzc2VydFBhcnNlcigicHJvY2Vzc1N5bmMiLCB0aGlzLnBhcnNlciB8fCB0aGlzLlBhcnNlcik7CiAgICAgICAgYXNzZXJ0Q29tcGlsZXIoInByb2Nlc3NTeW5jIiwgdGhpcy5jb21waWxlciB8fCB0aGlzLkNvbXBpbGVyKTsKICAgICAgICB0aGlzLnByb2Nlc3MoZmlsZSwgcmVhbERvbmUpOwogICAgICAgIGFzc2VydERvbmUoInByb2Nlc3NTeW5jIiwgInByb2Nlc3MiLCBjb21wbGV0ZSk7CiAgICAgICAgb2socmVzdWx0LCAid2UgZWl0aGVyIGJhaWxlZCBvbiBhbiBlcnJvciBvciBoYXZlIGEgdHJlZSIpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgZnVuY3Rpb24gcmVhbERvbmUoZXJyb3IsIGZpbGUyKSB7CiAgICAgICAgICBjb21wbGV0ZSA9IHRydWU7CiAgICAgICAgICBiYWlsKGVycm9yKTsKICAgICAgICAgIHJlc3VsdCA9IGZpbGUyOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogUnVuICp0cmFuc2Zvcm1lcnMqIG9uIGEgc3ludGF4IHRyZWUuCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBydW5gIGZyZWV6ZXMgdGhlIHByb2Nlc3NvciBpZiBub3QgYWxyZWFkeSAqZnJvemVuKi4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHJ1bmAgcGVyZm9ybXMgdGhlIHJ1biBwaGFzZSwgbm90IG90aGVyIHBoYXNlcy4KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7SGVhZFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogSGVhZFRyZWV9IHRyZWUKICAgICAgICogQHBhcmFtIHtSdW5DYWxsYmFjazxUYWlsVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBUYWlsVHJlZT59IGRvbmUKICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7SGVhZFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogSGVhZFRyZWV9IHRyZWUKICAgICAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBmaWxlCiAgICAgICAqIEBwYXJhbSB7UnVuQ2FsbGJhY2s8VGFpbFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogVGFpbFRyZWU+fSBkb25lCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0hlYWRUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IEhlYWRUcmVlfSB0cmVlCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdCiAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFRhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlPn0KICAgICAgICoKICAgICAgICogQHBhcmFtIHtIZWFkVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBIZWFkVHJlZX0gdHJlZQogICAgICAgKiAgIFRyZWUgdG8gdHJhbnNmb3JtIGFuZCBpbnNwZWN0LgogICAgICAgKiBAcGFyYW0geygKICAgICAgICogICBSdW5DYWxsYmFjazxUYWlsVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBUYWlsVHJlZT4gfAogICAgICAgKiAgIENvbXBhdGlibGUKICAgICAgICogKX0gW2ZpbGVdCiAgICAgICAqICAgRmlsZSBhc3NvY2lhdGVkIHdpdGggYG5vZGVgIChvcHRpb25hbCk7IGFueSB2YWx1ZSBhY2NlcHRlZCBhcyBgeGAgaW4KICAgICAgICogICBgbmV3IFZGaWxlKHgpYC4KICAgICAgICogQHBhcmFtIHtSdW5DYWxsYmFjazxUYWlsVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBUYWlsVHJlZT59IFtkb25lXQogICAgICAgKiAgIENhbGxiYWNrIChvcHRpb25hbCkuCiAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFRhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlPiB8IHVuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nIGlmIGBkb25lYCBpcyBnaXZlbi4KICAgICAgICogICBPdGhlcndpc2UsIGEgcHJvbWlzZSByZWplY3RlZCB3aXRoIGEgZmF0YWwgZXJyb3Igb3IgcmVzb2x2ZWQgd2l0aCB0aGUKICAgICAgICogICB0cmFuc2Zvcm1lZCB0cmVlLgogICAgICAgKi8KICAgICAgcnVuKHRyZWUsIGZpbGUsIGRvbmUpIHsKICAgICAgICBhc3NlcnROb2RlKHRyZWUpOwogICAgICAgIHRoaXMuZnJlZXplKCk7CiAgICAgICAgY29uc3QgdHJhbnNmb3JtZXJzID0gdGhpcy50cmFuc2Zvcm1lcnM7CiAgICAgICAgaWYgKCFkb25lICYmIHR5cGVvZiBmaWxlID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBkb25lID0gZmlsZTsKICAgICAgICAgIGZpbGUgPSB2b2lkIDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkb25lID8gZXhlY3V0b3Iodm9pZCAwLCBkb25lKSA6IG5ldyBQcm9taXNlKGV4ZWN1dG9yKTsKICAgICAgICBmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICAgICAgICBvaygKICAgICAgICAgICAgdHlwZW9mIGZpbGUgIT09ICJmdW5jdGlvbiIsCiAgICAgICAgICAgICJgZmlsZWAgY2FuXHUyMDE5dCBiZSBhIGBkb25lYCBhbnltb3JlLCB3ZSBjaGVja2VkIgogICAgICAgICAgKTsKICAgICAgICAgIGNvbnN0IHJlYWxGaWxlID0gdmZpbGUoZmlsZSk7CiAgICAgICAgICB0cmFuc2Zvcm1lcnMucnVuKHRyZWUsIHJlYWxGaWxlLCByZWFsRG9uZSk7CiAgICAgICAgICBmdW5jdGlvbiByZWFsRG9uZShlcnJvciwgb3V0cHV0VHJlZSwgZmlsZTIpIHsKICAgICAgICAgICAgY29uc3QgcmVzdWx0aW5nVHJlZSA9ICgKICAgICAgICAgICAgICAvKiogQHR5cGUge1RhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlfSAqLwogICAgICAgICAgICAgIG91dHB1dFRyZWUgfHwgdHJlZQogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgICByZWplY3QoZXJyb3IpOwogICAgICAgICAgICB9IGVsc2UgaWYgKHJlc29sdmUyKSB7CiAgICAgICAgICAgICAgcmVzb2x2ZTIocmVzdWx0aW5nVHJlZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgb2soZG9uZSwgImBkb25lYCBpcyBkZWZpbmVkIGlmIGByZXNvbHZlYCBpcyBub3QiKTsKICAgICAgICAgICAgICBkb25lKHZvaWQgMCwgcmVzdWx0aW5nVHJlZSwgZmlsZTIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSdW4gKnRyYW5zZm9ybWVycyogb24gYSBzeW50YXggdHJlZS4KICAgICAgICoKICAgICAgICogQW4gZXJyb3IgaXMgdGhyb3duIGlmIGFzeW5jaHJvbm91cyB0cmFuc2Zvcm1zIGFyZSBjb25maWd1cmVkLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcnVuU3luY2AgZnJlZXplcyB0aGUgcHJvY2Vzc29yIGlmIG5vdCBhbHJlYWR5ICpmcm96ZW4qLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcnVuU3luY2AgcGVyZm9ybXMgdGhlIHJ1biBwaGFzZSwgbm90IG90aGVyIHBoYXNlcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtIZWFkVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBIZWFkVHJlZX0gdHJlZQogICAgICAgKiAgIFRyZWUgdG8gdHJhbnNmb3JtIGFuZCBpbnNwZWN0LgogICAgICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCB1bmRlZmluZWR9IFtmaWxlXQogICAgICAgKiAgIEZpbGUgYXNzb2NpYXRlZCB3aXRoIGBub2RlYCAob3B0aW9uYWwpOyBhbnkgdmFsdWUgYWNjZXB0ZWQgYXMgYHhgIGluCiAgICAgICAqICAgYG5ldyBWRmlsZSh4KWAuCiAgICAgICAqIEByZXR1cm5zIHtUYWlsVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBUYWlsVHJlZX0KICAgICAgICogICBUcmFuc2Zvcm1lZCB0cmVlLgogICAgICAgKi8KICAgICAgcnVuU3luYyh0cmVlLCBmaWxlKSB7CiAgICAgICAgbGV0IGNvbXBsZXRlID0gZmFsc2U7CiAgICAgICAgbGV0IHJlc3VsdDsKICAgICAgICB0aGlzLnJ1bih0cmVlLCBmaWxlLCByZWFsRG9uZSk7CiAgICAgICAgYXNzZXJ0RG9uZSgicnVuU3luYyIsICJydW4iLCBjb21wbGV0ZSk7CiAgICAgICAgb2socmVzdWx0LCAid2UgZWl0aGVyIGJhaWxlZCBvbiBhbiBlcnJvciBvciBoYXZlIGEgdHJlZSIpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgZnVuY3Rpb24gcmVhbERvbmUoZXJyb3IsIHRyZWUyKSB7CiAgICAgICAgICBiYWlsKGVycm9yKTsKICAgICAgICAgIHJlc3VsdCA9IHRyZWUyOwogICAgICAgICAgY29tcGxldGUgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogQ29tcGlsZSBhIHN5bnRheCB0cmVlLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgc3RyaW5naWZ5YCBmcmVlemVzIHRoZSBwcm9jZXNzb3IgaWYgbm90IGFscmVhZHkgKmZyb3plbiouCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBzdHJpbmdpZnlgIHBlcmZvcm1zIHRoZSBzdHJpbmdpZnkgcGhhc2UsIG5vdCB0aGUgcnVuIHBoYXNlCiAgICAgICAqID4gb3Igb3RoZXIgcGhhc2VzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0NvbXBpbGVUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IENvbXBpbGVUcmVlfSB0cmVlCiAgICAgICAqICAgVHJlZSB0byBjb21waWxlLgogICAgICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCB1bmRlZmluZWR9IFtmaWxlXQogICAgICAgKiAgIEZpbGUgYXNzb2NpYXRlZCB3aXRoIGBub2RlYCAob3B0aW9uYWwpOyBhbnkgdmFsdWUgYWNjZXB0ZWQgYXMgYHhgIGluCiAgICAgICAqICAgYG5ldyBWRmlsZSh4KWAuCiAgICAgICAqIEByZXR1cm5zIHtDb21waWxlUmVzdWx0IGV4dGVuZHMgdW5kZWZpbmVkID8gVmFsdWUgOiBDb21waWxlUmVzdWx0fQogICAgICAgKiAgIFRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyZWUgKHNlZSBub3RlKS4KICAgICAgICoKICAgICAgICogICA+ICoqTm90ZSoqOiB1bmlmaWVkIHR5cGljYWxseSBjb21waWxlcyBieSBzZXJpYWxpemluZzogbW9zdCBjb21waWxlcnMKICAgICAgICogICA+IHJldHVybiBgc3RyaW5nYCAob3IgYFVpbnQ4QXJyYXlgKS4KICAgICAgICogICA+IFNvbWUgY29tcGlsZXJzLCBzdWNoIGFzIHRoZSBvbmUgY29uZmlndXJlZCB3aXRoCiAgICAgICAqICAgPiBbYHJlaHlwZS1yZWFjdGBdW3JlaHlwZS1yZWFjdF0sIHJldHVybiBvdGhlciB2YWx1ZXMgKGluIHRoaXMgY2FzZSwgYQogICAgICAgKiAgID4gUmVhY3QgdHJlZSkuCiAgICAgICAqICAgPiBJZiB5b3XigJlyZSB1c2luZyBhIGNvbXBpbGVyIHRoYXQgZG9lc27igJl0IHNlcmlhbGl6ZSwgZXhwZWN0IGRpZmZlcmVudAogICAgICAgKiAgID4gcmVzdWx0IHZhbHVlcy4KICAgICAgICogICA+CiAgICAgICAqICAgPiBUbyByZWdpc3RlciBjdXN0b20gcmVzdWx0cyBpbiBUeXBlU2NyaXB0LCBhZGQgdGhlbSB0bwogICAgICAgKiAgID4ge0BsaW5rY29kZSBDb21waWxlUmVzdWx0TWFwfS4KICAgICAgICoKICAgICAgICogICBbcmVoeXBlLXJlYWN0XTogaHR0cHM6Ly9naXRodWIuY29tL3JlaHlwZWpzL3JlaHlwZS1yZWFjdAogICAgICAgKi8KICAgICAgc3RyaW5naWZ5KHRyZWUsIGZpbGUpIHsKICAgICAgICB0aGlzLmZyZWV6ZSgpOwogICAgICAgIGNvbnN0IHJlYWxGaWxlID0gdmZpbGUoZmlsZSk7CiAgICAgICAgY29uc3QgY29tcGlsZXIyID0gdGhpcy5jb21waWxlciB8fCB0aGlzLkNvbXBpbGVyOwogICAgICAgIGFzc2VydENvbXBpbGVyKCJzdHJpbmdpZnkiLCBjb21waWxlcjIpOwogICAgICAgIGFzc2VydE5vZGUodHJlZSk7CiAgICAgICAgcmV0dXJuIGNvbXBpbGVyMih0cmVlLCByZWFsRmlsZSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENvbmZpZ3VyZSB0aGUgcHJvY2Vzc29yIHRvIHVzZSBhIHBsdWdpbiwgYSBsaXN0IG9mIHVzYWJsZSB2YWx1ZXMsIG9yIGEKICAgICAgICogcHJlc2V0LgogICAgICAgKgogICAgICAgKiBJZiB0aGUgcHJvY2Vzc29yIGlzIGFscmVhZHkgdXNpbmcgYSBwbHVnaW4sIHRoZSBwcmV2aW91cyBwbHVnaW4KICAgICAgICogY29uZmlndXJhdGlvbiBpcyBjaGFuZ2VkIGJhc2VkIG9uIHRoZSBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCBpbi4KICAgICAgICogSW4gb3RoZXIgd29yZHMsIHRoZSBwbHVnaW4gaXMgbm90IGFkZGVkIGEgc2Vjb25kIHRpbWUuCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGB1c2VgIGNhbm5vdCBiZSBjYWxsZWQgb24gKmZyb3plbiogcHJvY2Vzc29ycy4KICAgICAgICogPiBDYWxsIHRoZSBwcm9jZXNzb3IgZmlyc3QgdG8gY3JlYXRlIGEgbmV3IHVuZnJvemVuIHByb2Nlc3Nvci4KICAgICAgICoKICAgICAgICogQGV4YW1wbGUKICAgICAgICogICBUaGVyZSBhcmUgbWFueSB3YXlzIHRvIHBhc3MgcGx1Z2lucyB0byBgLnVzZSgpYC4KICAgICAgICogICBUaGlzIGV4YW1wbGUgZ2l2ZXMgYW4gb3ZlcnZpZXc6CiAgICAgICAqCiAgICAgICAqICAgYGBganMKICAgICAgICogICBpbXBvcnQge3VuaWZpZWR9IGZyb20gJ3VuaWZpZWQnCiAgICAgICAqCiAgICAgICAqICAgdW5pZmllZCgpCiAgICAgICAqICAgICAvLyBQbHVnaW4gd2l0aCBvcHRpb25zOgogICAgICAgKiAgICAgLnVzZShwbHVnaW5BLCB7eDogdHJ1ZSwgeTogdHJ1ZX0pCiAgICAgICAqICAgICAvLyBQYXNzaW5nIHRoZSBzYW1lIHBsdWdpbiBhZ2FpbiBtZXJnZXMgY29uZmlndXJhdGlvbiAodG8gYHt4OiB0cnVlLCB5OiBmYWxzZSwgejogdHJ1ZX1gKToKICAgICAgICogICAgIC51c2UocGx1Z2luQSwge3k6IGZhbHNlLCB6OiB0cnVlfSkKICAgICAgICogICAgIC8vIFBsdWdpbnM6CiAgICAgICAqICAgICAudXNlKFtwbHVnaW5CLCBwbHVnaW5DXSkKICAgICAgICogICAgIC8vIFR3byBwbHVnaW5zLCB0aGUgc2Vjb25kIHdpdGggb3B0aW9uczoKICAgICAgICogICAgIC51c2UoW3BsdWdpbkQsIFtwbHVnaW5FLCB7fV1dKQogICAgICAgKiAgICAgLy8gUHJlc2V0IHdpdGggcGx1Z2lucyBhbmQgc2V0dGluZ3M6CiAgICAgICAqICAgICAudXNlKHtwbHVnaW5zOiBbcGx1Z2luRiwgW3BsdWdpbkcsIHt9XV0sIHNldHRpbmdzOiB7cG9zaXRpb246IGZhbHNlfX0pCiAgICAgICAqICAgICAvLyBTZXR0aW5ncyBvbmx5OgogICAgICAgKiAgICAgLnVzZSh7c2V0dGluZ3M6IHtwb3NpdGlvbjogZmFsc2V9fSkKICAgICAgICogICBgYGAKICAgICAgICoKICAgICAgICogQHRlbXBsYXRlIHtBcnJheTx1bmtub3duPn0gW1BhcmFtZXRlcnM9W11dCiAgICAgICAqIEB0ZW1wbGF0ZSB7Tm9kZSB8IHN0cmluZyB8IHVuZGVmaW5lZH0gW0lucHV0PXVuZGVmaW5lZF0KICAgICAgICogQHRlbXBsYXRlIFtPdXRwdXQ9SW5wdXRdCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge1ByZXNldCB8IG51bGwgfCB1bmRlZmluZWR9IFtwcmVzZXRdCiAgICAgICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7UGx1Z2dhYmxlTGlzdH0gbGlzdAogICAgICAgKiBAcmV0dXJucyB7UHJvY2Vzc29yPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdD59CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge1BsdWdpbjxQYXJhbWV0ZXJzLCBJbnB1dCwgT3V0cHV0Pn0gcGx1Z2luCiAgICAgICAqIEBwYXJhbSB7Li4uKFBhcmFtZXRlcnMgfCBbYm9vbGVhbl0pfSBwYXJhbWV0ZXJzCiAgICAgICAqIEByZXR1cm5zIHtVc2VQbHVnaW48UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0LCBJbnB1dCwgT3V0cHV0Pn0KICAgICAgICoKICAgICAgICogQHBhcmFtIHtQbHVnZ2FibGVMaXN0IHwgUGx1Z2luIHwgUHJlc2V0IHwgbnVsbCB8IHVuZGVmaW5lZH0gdmFsdWUKICAgICAgICogICBVc2FibGUgdmFsdWUuCiAgICAgICAqIEBwYXJhbSB7Li4udW5rbm93bn0gcGFyYW1ldGVycwogICAgICAgKiAgIFBhcmFtZXRlcnMsIHdoZW4gYSBwbHVnaW4gaXMgZ2l2ZW4gYXMgYSB1c2FibGUgdmFsdWUuCiAgICAgICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn0KICAgICAgICogICBDdXJyZW50IHByb2Nlc3Nvci4KICAgICAgICovCiAgICAgIHVzZSh2YWx1ZTIsIC4uLnBhcmFtZXRlcnMpIHsKICAgICAgICBjb25zdCBhdHRhY2hlcnMgPSB0aGlzLmF0dGFjaGVyczsKICAgICAgICBjb25zdCBuYW1lc3BhY2UyID0gdGhpcy5uYW1lc3BhY2U7CiAgICAgICAgYXNzZXJ0VW5mcm96ZW4oInVzZSIsIHRoaXMuZnJvemVuKTsKICAgICAgICBpZiAodmFsdWUyID09PSBudWxsIHx8IHZhbHVlMiA9PT0gdm9pZCAwKSB7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUyID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBhZGRQbHVnaW4odmFsdWUyLCBwYXJhbWV0ZXJzKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTIgPT09ICJvYmplY3QiKSB7CiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7CiAgICAgICAgICAgIGFkZExpc3QodmFsdWUyKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFkZFByZXNldCh2YWx1ZTIpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCB1c2FibGUgdmFsdWUsIG5vdCBgIiArIHZhbHVlMiArICJgIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIGZ1bmN0aW9uIGFkZDModmFsdWUzKSB7CiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlMyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICBhZGRQbHVnaW4odmFsdWUzLCBbXSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTMgPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMykpIHsKICAgICAgICAgICAgICBjb25zdCBbcGx1Z2luLCAuLi5wYXJhbWV0ZXJzMl0gPSAoCiAgICAgICAgICAgICAgICAvKiogQHR5cGUge1BsdWdpblR1cGxlPEFycmF5PHVua25vd24+Pn0gKi8KICAgICAgICAgICAgICAgIHZhbHVlMwogICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgYWRkUGx1Z2luKHBsdWdpbiwgcGFyYW1ldGVyczIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGFkZFByZXNldCh2YWx1ZTMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCB1c2FibGUgdmFsdWUsIG5vdCBgIiArIHZhbHVlMyArICJgIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGFkZFByZXNldChyZXN1bHQpIHsKICAgICAgICAgIGlmICghKCJwbHVnaW5zIiBpbiByZXN1bHQpICYmICEoInNldHRpbmdzIiBpbiByZXN1bHQpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICAgICAiRXhwZWN0ZWQgdXNhYmxlIHZhbHVlIGJ1dCByZWNlaXZlZCBhbiBlbXB0eSBwcmVzZXQsIHdoaWNoIGlzIHByb2JhYmx5IGEgbWlzdGFrZTogcHJlc2V0cyB0eXBpY2FsbHkgY29tZSB3aXRoIGBwbHVnaW5zYCBhbmQgc29tZXRpbWVzIHdpdGggYHNldHRpbmdzYCwgYnV0IHRoaXMgaGFzIG5laXRoZXIiCiAgICAgICAgICAgICk7CiAgICAgICAgICB9CiAgICAgICAgICBhZGRMaXN0KHJlc3VsdC5wbHVnaW5zKTsKICAgICAgICAgIGlmIChyZXN1bHQuc2V0dGluZ3MpIHsKICAgICAgICAgICAgbmFtZXNwYWNlMi5zZXR0aW5ncyA9ICgwLCBpbXBvcnRfZXh0ZW5kLmRlZmF1bHQpKHRydWUsIG5hbWVzcGFjZTIuc2V0dGluZ3MsIHJlc3VsdC5zZXR0aW5ncyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGFkZExpc3QocGx1Z2luczMpIHsKICAgICAgICAgIGxldCBpbmRleDIgPSAtMTsKICAgICAgICAgIGlmIChwbHVnaW5zMyA9PT0gbnVsbCB8fCBwbHVnaW5zMyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGx1Z2luczMpKSB7CiAgICAgICAgICAgIHdoaWxlICgrK2luZGV4MiA8IHBsdWdpbnMzLmxlbmd0aCkgewogICAgICAgICAgICAgIGNvbnN0IHRoaW5nID0gcGx1Z2luczNbaW5kZXgyXTsKICAgICAgICAgICAgICBhZGQzKHRoaW5nKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBsaXN0IG9mIHBsdWdpbnMsIG5vdCBgIiArIHBsdWdpbnMzICsgImAiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gYWRkUGx1Z2luKHBsdWdpbiwgcGFyYW1ldGVyczIpIHsKICAgICAgICAgIGxldCBpbmRleDIgPSAtMTsKICAgICAgICAgIGxldCBlbnRyeUluZGV4ID0gLTE7CiAgICAgICAgICB3aGlsZSAoKytpbmRleDIgPCBhdHRhY2hlcnMubGVuZ3RoKSB7CiAgICAgICAgICAgIGlmIChhdHRhY2hlcnNbaW5kZXgyXVswXSA9PT0gcGx1Z2luKSB7CiAgICAgICAgICAgICAgZW50cnlJbmRleCA9IGluZGV4MjsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGVudHJ5SW5kZXggPT09IC0xKSB7CiAgICAgICAgICAgIGF0dGFjaGVycy5wdXNoKFtwbHVnaW4sIC4uLnBhcmFtZXRlcnMyXSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtZXRlcnMyLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgbGV0IFtwcmltYXJ5LCAuLi5yZXN0XSA9IHBhcmFtZXRlcnMyOwogICAgICAgICAgICBjb25zdCBjdXJyZW50UHJpbWFyeSA9IGF0dGFjaGVyc1tlbnRyeUluZGV4XVsxXTsKICAgICAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QoY3VycmVudFByaW1hcnkpICYmIGlzUGxhaW5PYmplY3QocHJpbWFyeSkpIHsKICAgICAgICAgICAgICBwcmltYXJ5ID0gKDAsIGltcG9ydF9leHRlbmQuZGVmYXVsdCkodHJ1ZSwgY3VycmVudFByaW1hcnksIHByaW1hcnkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGF0dGFjaGVyc1tlbnRyeUluZGV4XSA9IFtwbHVnaW4sIHByaW1hcnksIC4uLnJlc3RdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIHVuaWZpZWQgPSBuZXcgUHJvY2Vzc29yKCkuZnJlZXplKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmlmaWVkQDExLjAuNS9ub2RlX21vZHVsZXMvdW5pZmllZC9pbmRleC5qcwp2YXIgaW5pdF91bmlmaWVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pZmllZEAxMS4wLjUvbm9kZV9tb2R1bGVzL3VuaWZpZWQvaW5kZXguanMiKCkgewogICAgaW5pdF9saWI1KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9jY291bnRAMi4wLjEvbm9kZV9tb2R1bGVzL2Njb3VudC9pbmRleC5qcwpmdW5jdGlvbiBjY291bnQodmFsdWUyLCBjaGFyYWN0ZXIpIHsKICBjb25zdCBzb3VyY2UgPSBTdHJpbmcodmFsdWUyKTsKICBpZiAodHlwZW9mIGNoYXJhY3RlciAhPT0gInN0cmluZyIpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGNoYXJhY3RlciIpOwogIH0KICBsZXQgY291bnQyID0gMDsKICBsZXQgaW5kZXgyID0gc291cmNlLmluZGV4T2YoY2hhcmFjdGVyKTsKICB3aGlsZSAoaW5kZXgyICE9PSAtMSkgewogICAgY291bnQyKys7CiAgICBpbmRleDIgPSBzb3VyY2UuaW5kZXhPZihjaGFyYWN0ZXIsIGluZGV4MiArIGNoYXJhY3Rlci5sZW5ndGgpOwogIH0KICByZXR1cm4gY291bnQyOwp9CnZhciBpbml0X2Njb3VudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Njb3VudEAyLjAuMS9ub2RlX21vZHVsZXMvY2NvdW50L2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWNoYXJhY3RlckAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyL2luZGV4LmpzCmZ1bmN0aW9uIGFzY2lpQ29udHJvbChjb2RlNCkgewogIHJldHVybiAoCiAgICAvLyBTcGVjaWFsIHdoaXRlc3BhY2UgY29kZXMgKHdoaWNoIGhhdmUgbmVnYXRpdmUgdmFsdWVzKSwgQzAgYW5kIENvbnRyb2wKICAgIC8vIGNoYXJhY3RlciBERUwKICAgIGNvZGU0ICE9PSBudWxsICYmIChjb2RlNCA8IDMyIHx8IGNvZGU0ID09PSAxMjcpCiAgKTsKfQpmdW5jdGlvbiBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpIHsKICByZXR1cm4gY29kZTQgIT09IG51bGwgJiYgY29kZTQgPCAtMjsKfQpmdW5jdGlvbiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSB7CiAgcmV0dXJuIGNvZGU0ICE9PSBudWxsICYmIChjb2RlNCA8IDAgfHwgY29kZTQgPT09IDMyKTsKfQpmdW5jdGlvbiBtYXJrZG93blNwYWNlKGNvZGU0KSB7CiAgcmV0dXJuIGNvZGU0ID09PSAtMiB8fCBjb2RlNCA9PT0gLTEgfHwgY29kZTQgPT09IDMyOwp9CmZ1bmN0aW9uIHJlZ2V4Q2hlY2socmVnZXgpIHsKICByZXR1cm4gY2hlY2s7CiAgZnVuY3Rpb24gY2hlY2soY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCAhPT0gbnVsbCAmJiBjb2RlNCA+IC0xICYmIHJlZ2V4LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlNCkpOwogIH0KfQp2YXIgYXNjaWlBbHBoYSwgYXNjaWlBbHBoYW51bWVyaWMsIGFzY2lpQXRleHQsIGFzY2lpRGlnaXQsIGFzY2lpSGV4RGlnaXQsIGFzY2lpUHVuY3R1YXRpb24sIHVuaWNvZGVQdW5jdHVhdGlvbiwgdW5pY29kZVdoaXRlc3BhY2U7CnZhciBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWNoYXJhY3RlckAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyL2luZGV4LmpzIigpIHsKICAgIGFzY2lpQWxwaGEgPSByZWdleENoZWNrKC9bQS1aYS16XS8pOwogICAgYXNjaWlBbHBoYW51bWVyaWMgPSByZWdleENoZWNrKC9bXGRBLVphLXpdLyk7CiAgICBhc2NpaUF0ZXh0ID0gcmVnZXhDaGVjaygvWyMtJyorXC0tOT0/QS1aXi1+XS8pOwogICAgYXNjaWlEaWdpdCA9IHJlZ2V4Q2hlY2soL1xkLyk7CiAgICBhc2NpaUhleERpZ2l0ID0gcmVnZXhDaGVjaygvW1xkQS1GYS1mXS8pOwogICAgYXNjaWlQdW5jdHVhdGlvbiA9IHJlZ2V4Q2hlY2soL1shLS86LUBbLWB7LX5dLyk7CiAgICB1bmljb2RlUHVuY3R1YXRpb24gPSByZWdleENoZWNrKC9ccHtQfXxccHtTfS91KTsKICAgIHVuaWNvZGVXaGl0ZXNwYWNlID0gcmVnZXhDaGVjaygvXHMvKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtaXNANi4wLjEvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtaXMvbGliL2luZGV4LmpzCmZ1bmN0aW9uIGFueUZhY3RvcnkodGVzdHMpIHsKICBjb25zdCBjaGVja3MyID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHRlc3RzLmxlbmd0aCkgewogICAgY2hlY2tzMltpbmRleDJdID0gY29udmVydCh0ZXN0c1tpbmRleDJdKTsKICB9CiAgcmV0dXJuIGNhc3RGYWN0b3J5KGFueSk7CiAgZnVuY3Rpb24gYW55KC4uLnBhcmFtZXRlcnMpIHsKICAgIGxldCBpbmRleDMgPSAtMTsKICAgIHdoaWxlICgrK2luZGV4MyA8IGNoZWNrczIubGVuZ3RoKSB7CiAgICAgIGlmIChjaGVja3MyW2luZGV4M10uYXBwbHkodGhpcywgcGFyYW1ldGVycykpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQpmdW5jdGlvbiBwcm9wZXJ0aWVzRmFjdG9yeShjaGVjaykgewogIGNvbnN0IGNoZWNrQXNSZWNvcmQgPSAoCiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLwogICAgY2hlY2sKICApOwogIHJldHVybiBjYXN0RmFjdG9yeShhbGwzKTsKICBmdW5jdGlvbiBhbGwzKG5vZGUyKSB7CiAgICBjb25zdCBub2RlQXNSZWNvcmQgPSAoCiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovCiAgICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi8KICAgICAgbm9kZTIKICAgICk7CiAgICBsZXQga2V5MjsKICAgIGZvciAoa2V5MiBpbiBjaGVjaykgewogICAgICBpZiAobm9kZUFzUmVjb3JkW2tleTJdICE9PSBjaGVja0FzUmVjb3JkW2tleTJdKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KZnVuY3Rpb24gdHlwZUZhY3RvcnkoY2hlY2spIHsKICByZXR1cm4gY2FzdEZhY3RvcnkodHlwZTUpOwogIGZ1bmN0aW9uIHR5cGU1KG5vZGUyKSB7CiAgICByZXR1cm4gbm9kZTIgJiYgbm9kZTIudHlwZSA9PT0gY2hlY2s7CiAgfQp9CmZ1bmN0aW9uIGNhc3RGYWN0b3J5KHRlc3RGdW5jdGlvbikgewogIHJldHVybiBjaGVjazsKICBmdW5jdGlvbiBjaGVjayh2YWx1ZTIsIGluZGV4MiwgcGFyZW50KSB7CiAgICByZXR1cm4gQm9vbGVhbigKICAgICAgbG9va3NMaWtlQU5vZGUodmFsdWUyKSAmJiB0ZXN0RnVuY3Rpb24uY2FsbCgKICAgICAgICB0aGlzLAogICAgICAgIHZhbHVlMiwKICAgICAgICB0eXBlb2YgaW5kZXgyID09PSAibnVtYmVyIiA/IGluZGV4MiA6IHZvaWQgMCwKICAgICAgICBwYXJlbnQgfHwgdm9pZCAwCiAgICAgICkKICAgICk7CiAgfQp9CmZ1bmN0aW9uIG9rMigpIHsKICByZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiBsb29rc0xpa2VBTm9kZSh2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZTIgPT09ICJvYmplY3QiICYmICJ0eXBlIiBpbiB2YWx1ZTI7Cn0KdmFyIGlzLCBjb252ZXJ0Owp2YXIgaW5pdF9saWI2ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1pc0A2LjAuMS9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1pcy9saWIvaW5kZXguanMiKCkgewogICAgaXMgPSAvLyBOb3RlOiBvdmVybG9hZHMgaW4gSlNEb2MgY2Fu4oCZdCB5ZXQgdXNlIGRpZmZlcmVudCBgQHRlbXBsYXRlYHMuCiAgICAvKioKICAgICAqIEB0eXBlIHsoCiAgICAgKiAgICg8Q29uZGl0aW9uIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxzdHJpbmc+Pihub2RlOiB1bmtub3duLCB0ZXN0OiBDb25kaXRpb24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSAmIHt0eXBlOiBDb25kaXRpb25bbnVtYmVyXX0pICYKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBBcnJheTxzdHJpbmc+Pihub2RlOiB1bmtub3duLCB0ZXN0OiBDb25kaXRpb24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSAmIHt0eXBlOiBDb25kaXRpb25bbnVtYmVyXX0pICYKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBzdHJpbmc+KG5vZGU6IHVua25vd24sIHRlc3Q6IENvbmRpdGlvbiwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYge3R5cGU6IENvbmRpdGlvbn0pICYKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBQcm9wcz4obm9kZTogdW5rbm93biwgdGVzdDogQ29uZGl0aW9uLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiBDb25kaXRpb24pICYKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBUZXN0RnVuY3Rpb24+KG5vZGU6IHVua25vd24sIHRlc3Q6IENvbmRpdGlvbiwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYgUHJlZGljYXRlPENvbmRpdGlvbiwgTm9kZT4pICYKICAgICAqICAgKChub2RlPzogbnVsbCB8IHVuZGVmaW5lZCkgPT4gZmFsc2UpICYKICAgICAqICAgKChub2RlOiB1bmtub3duLCB0ZXN0PzogbnVsbCB8IHVuZGVmaW5lZCwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlKSAmCiAgICAgKiAgICgobm9kZTogdW5rbm93biwgdGVzdD86IFRlc3QsIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IGJvb2xlYW4pCiAgICAgKiApfQogICAgICovCiAgICAvKioKICAgICAqIEBwYXJhbSB7dW5rbm93bn0gW25vZGVdCiAgICAgKiBAcGFyYW0ge1Rlc3R9IFt0ZXN0XQogICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbaW5kZXhdCiAgICAgKiBAcGFyYW0ge1BhcmVudCB8IG51bGwgfCB1bmRlZmluZWR9IFtwYXJlbnRdCiAgICAgKiBAcGFyYW0ge3Vua25vd259IFtjb250ZXh0XQogICAgICogQHJldHVybnMge2Jvb2xlYW59CiAgICAgKi8KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtcGFyYW1zCiAgICAoZnVuY3Rpb24obm9kZTIsIHRlc3QsIGluZGV4MiwgcGFyZW50LCBjb250ZXh0MikgewogICAgICBjb25zdCBjaGVjayA9IGNvbnZlcnQodGVzdCk7CiAgICAgIGlmIChpbmRleDIgIT09IHZvaWQgMCAmJiBpbmRleDIgIT09IG51bGwgJiYgKHR5cGVvZiBpbmRleDIgIT09ICJudW1iZXIiIHx8IGluZGV4MiA8IDAgfHwgaW5kZXgyID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBwb3NpdGl2ZSBmaW5pdGUgaW5kZXgiKTsKICAgICAgfQogICAgICBpZiAocGFyZW50ICE9PSB2b2lkIDAgJiYgcGFyZW50ICE9PSBudWxsICYmICghaXMocGFyZW50KSB8fCAhcGFyZW50LmNoaWxkcmVuKSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgcGFyZW50IG5vZGUiKTsKICAgICAgfQogICAgICBpZiAoKHBhcmVudCA9PT0gdm9pZCAwIHx8IHBhcmVudCA9PT0gbnVsbCkgIT09IChpbmRleDIgPT09IHZvaWQgMCB8fCBpbmRleDIgPT09IG51bGwpKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBib3RoIHBhcmVudCBhbmQgaW5kZXgiKTsKICAgICAgfQogICAgICByZXR1cm4gbG9va3NMaWtlQU5vZGUobm9kZTIpID8gY2hlY2suY2FsbChjb250ZXh0Miwgbm9kZTIsIGluZGV4MiwgcGFyZW50KSA6IGZhbHNlOwogICAgfSk7CiAgICBjb252ZXJ0ID0gLy8gTm90ZTogb3ZlcmxvYWRzIGluIEpTRG9jIGNhbuKAmXQgeWV0IHVzZSBkaWZmZXJlbnQgYEB0ZW1wbGF0ZWBzLgogICAgLyoqCiAgICAgKiBAdHlwZSB7KAogICAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIHN0cmluZz4odGVzdDogQ29uZGl0aW9uKSA9PiAobm9kZTogdW5rbm93biwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYge3R5cGU6IENvbmRpdGlvbn0pICYKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBQcm9wcz4odGVzdDogQ29uZGl0aW9uKSA9PiAobm9kZTogdW5rbm93biwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYgQ29uZGl0aW9uKSAmCiAgICAgKiAgICg8Q29uZGl0aW9uIGV4dGVuZHMgVGVzdEZ1bmN0aW9uPih0ZXN0OiBDb25kaXRpb24pID0+IChub2RlOiB1bmtub3duLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiBQcmVkaWNhdGU8Q29uZGl0aW9uLCBOb2RlPikgJgogICAgICogICAoKHRlc3Q/OiBudWxsIHwgdW5kZWZpbmVkKSA9PiAobm9kZT86IHVua25vd24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSkgJgogICAgICogICAoKHRlc3Q/OiBUZXN0KSA9PiBDaGVjaykKICAgICAqICl9CiAgICAgKi8KICAgIC8qKgogICAgICogQHBhcmFtIHtUZXN0fSBbdGVzdF0KICAgICAqIEByZXR1cm5zIHtDaGVja30KICAgICAqLwogICAgKGZ1bmN0aW9uKHRlc3QpIHsKICAgICAgaWYgKHRlc3QgPT09IG51bGwgfHwgdGVzdCA9PT0gdm9pZCAwKSB7CiAgICAgICAgcmV0dXJuIG9rMjsKICAgICAgfQogICAgICBpZiAodHlwZW9mIHRlc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICByZXR1cm4gY2FzdEZhY3RvcnkodGVzdCk7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAib2JqZWN0IikgewogICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRlc3QpID8gYW55RmFjdG9yeSh0ZXN0KSA6ICgKICAgICAgICAgIC8vIENhc3QgYmVjYXVzZSBgUmVhZG9ubHlBcnJheWAgZ29lcyBpbnRvIHRoZSBhYm92ZSBidXQgYGlzQXJyYXlgCiAgICAgICAgICAvLyBuYXJyb3dzIHRvIGBBcnJheWAuCiAgICAgICAgICBwcm9wZXJ0aWVzRmFjdG9yeSgKICAgICAgICAgICAgLyoqIEB0eXBlIHtQcm9wc30gKi8KICAgICAgICAgICAgdGVzdAogICAgICAgICAgKQogICAgICAgICk7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAic3RyaW5nIikgewogICAgICAgIHJldHVybiB0eXBlRmFjdG9yeSh0ZXN0KTsKICAgICAgfQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGZ1bmN0aW9uLCBzdHJpbmcsIG9yIG9iamVjdCBhcyB0ZXN0Iik7CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtaXNANi4wLjEvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtaXMvaW5kZXguanMKdmFyIGluaXRfdW5pc3RfdXRpbF9pcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtaXNANi4wLjEvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtaXMvaW5kZXguanMiKCkgewogICAgaW5pdF9saWI2KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXZpc2l0LXBhcmVudHNANi4wLjIvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cy9saWIvY29sb3IuanMKZnVuY3Rpb24gY29sb3IoZDYpIHsKICByZXR1cm4gZDY7Cn0KdmFyIGluaXRfY29sb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXZpc2l0LXBhcmVudHNANi4wLjIvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cy9saWIvY29sb3IuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzQDYuMC4yL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0LXBhcmVudHMvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHZpc2l0UGFyZW50cyh0cmVlLCB0ZXN0LCB2aXNpdG9yLCByZXZlcnNlKSB7CiAgbGV0IGNoZWNrOwogIGlmICh0eXBlb2YgdGVzdCA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgdmlzaXRvciAhPT0gImZ1bmN0aW9uIikgewogICAgcmV2ZXJzZSA9IHZpc2l0b3I7CiAgICB2aXNpdG9yID0gdGVzdDsKICB9IGVsc2UgewogICAgY2hlY2sgPSB0ZXN0OwogIH0KICBjb25zdCBpczMgPSBjb252ZXJ0KGNoZWNrKTsKICBjb25zdCBzdGVwID0gcmV2ZXJzZSA/IC0xIDogMTsKICBmYWN0b3J5KHRyZWUsIHZvaWQgMCwgW10pKCk7CiAgZnVuY3Rpb24gZmFjdG9yeShub2RlMiwgaW5kZXgyLCBwYXJlbnRzKSB7CiAgICBjb25zdCB2YWx1ZTIgPSAoCiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovCiAgICAgIG5vZGUyICYmIHR5cGVvZiBub2RlMiA9PT0gIm9iamVjdCIgPyBub2RlMiA6IHt9CiAgICApOwogICAgaWYgKHR5cGVvZiB2YWx1ZTIudHlwZSA9PT0gInN0cmluZyIpIHsKICAgICAgY29uc3QgbmFtZSA9ICgKICAgICAgICAvLyBgaGFzdGAKICAgICAgICB0eXBlb2YgdmFsdWUyLnRhZ05hbWUgPT09ICJzdHJpbmciID8gdmFsdWUyLnRhZ05hbWUgOiAoCiAgICAgICAgICAvLyBgeGFzdGAKICAgICAgICAgIHR5cGVvZiB2YWx1ZTIubmFtZSA9PT0gInN0cmluZyIgPyB2YWx1ZTIubmFtZSA6IHZvaWQgMAogICAgICAgICkKICAgICAgKTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpc2l0MiwgIm5hbWUiLCB7CiAgICAgICAgdmFsdWU6ICJub2RlICgiICsgY29sb3Iobm9kZTIudHlwZSArIChuYW1lID8gIjwiICsgbmFtZSArICI+IiA6ICIiKSkgKyAiKSIKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gdmlzaXQyOwogICAgZnVuY3Rpb24gdmlzaXQyKCkgewogICAgICBsZXQgcmVzdWx0ID0gZW1wdHkyOwogICAgICBsZXQgc3VicmVzdWx0OwogICAgICBsZXQgb2Zmc2V0OwogICAgICBsZXQgZ3JhbmRwYXJlbnRzOwogICAgICBpZiAoIXRlc3QgfHwgaXMzKG5vZGUyLCBpbmRleDIsIHBhcmVudHNbcGFyZW50cy5sZW5ndGggLSAxXSB8fCB2b2lkIDApKSB7CiAgICAgICAgcmVzdWx0ID0gdG9SZXN1bHQodmlzaXRvcihub2RlMiwgcGFyZW50cykpOwogICAgICAgIGlmIChyZXN1bHRbMF0gPT09IEVYSVQpIHsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICgiY2hpbGRyZW4iIGluIG5vZGUyICYmIG5vZGUyLmNoaWxkcmVuKSB7CiAgICAgICAgY29uc3Qgbm9kZUFzUGFyZW50ID0gKAogICAgICAgICAgLyoqIEB0eXBlIHtVbmlzdFBhcmVudH0gKi8KICAgICAgICAgIG5vZGUyCiAgICAgICAgKTsKICAgICAgICBpZiAobm9kZUFzUGFyZW50LmNoaWxkcmVuICYmIHJlc3VsdFswXSAhPT0gU0tJUCkgewogICAgICAgICAgb2Zmc2V0ID0gKHJldmVyc2UgPyBub2RlQXNQYXJlbnQuY2hpbGRyZW4ubGVuZ3RoIDogLTEpICsgc3RlcDsKICAgICAgICAgIGdyYW5kcGFyZW50cyA9IHBhcmVudHMuY29uY2F0KG5vZGVBc1BhcmVudCk7CiAgICAgICAgICB3aGlsZSAob2Zmc2V0ID4gLTEgJiYgb2Zmc2V0IDwgbm9kZUFzUGFyZW50LmNoaWxkcmVuLmxlbmd0aCkgewogICAgICAgICAgICBjb25zdCBjaGlsZCA9IG5vZGVBc1BhcmVudC5jaGlsZHJlbltvZmZzZXRdOwogICAgICAgICAgICBzdWJyZXN1bHQgPSBmYWN0b3J5KGNoaWxkLCBvZmZzZXQsIGdyYW5kcGFyZW50cykoKTsKICAgICAgICAgICAgaWYgKHN1YnJlc3VsdFswXSA9PT0gRVhJVCkgewogICAgICAgICAgICAgIHJldHVybiBzdWJyZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgb2Zmc2V0ID0gdHlwZW9mIHN1YnJlc3VsdFsxXSA9PT0gIm51bWJlciIgPyBzdWJyZXN1bHRbMV0gOiBvZmZzZXQgKyBzdGVwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogIH0KfQpmdW5jdGlvbiB0b1Jlc3VsdCh2YWx1ZTIpIHsKICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7CiAgICByZXR1cm4gdmFsdWUyOwogIH0KICBpZiAodHlwZW9mIHZhbHVlMiA9PT0gIm51bWJlciIpIHsKICAgIHJldHVybiBbQ09OVElOVUUsIHZhbHVlMl07CiAgfQogIHJldHVybiB2YWx1ZTIgPT09IG51bGwgfHwgdmFsdWUyID09PSB2b2lkIDAgPyBlbXB0eTIgOiBbdmFsdWUyXTsKfQp2YXIgZW1wdHkyLCBDT05USU5VRSwgRVhJVCwgU0tJUDsKdmFyIGluaXRfbGliNyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50c0A2LjAuMi9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X3VuaXN0X3V0aWxfaXMoKTsKICAgIGluaXRfY29sb3IoKTsKICAgIGVtcHR5MiA9IFtdOwogICAgQ09OVElOVUUgPSB0cnVlOwogICAgRVhJVCA9IGZhbHNlOwogICAgU0tJUCA9ICJza2lwIjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50c0A2LjAuMi9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzL2luZGV4LmpzCnZhciBpbml0X3VuaXN0X3V0aWxfdmlzaXRfcGFyZW50cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50c0A2LjAuMi9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliNygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlQDMuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZpbmQtYW5kLXJlcGxhY2UvbGliL2luZGV4LmpzCmZ1bmN0aW9uIGZpbmRBbmRSZXBsYWNlKHRyZWUsIGxpc3Q1LCBvcHRpb25zKSB7CiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9OwogIGNvbnN0IGlnbm9yZWQgPSBjb252ZXJ0KHNldHRpbmdzLmlnbm9yZSB8fCBbXSk7CiAgY29uc3QgcGFpcnMyID0gdG9QYWlycyhsaXN0NSk7CiAgbGV0IHBhaXJJbmRleCA9IC0xOwogIHdoaWxlICgrK3BhaXJJbmRleCA8IHBhaXJzMi5sZW5ndGgpIHsKICAgIHZpc2l0UGFyZW50cyh0cmVlLCAidGV4dCIsIHZpc2l0b3IpOwogIH0KICBmdW5jdGlvbiB2aXNpdG9yKG5vZGUyLCBwYXJlbnRzKSB7CiAgICBsZXQgaW5kZXgyID0gLTE7CiAgICBsZXQgZ3JhbmRwYXJlbnQ7CiAgICB3aGlsZSAoKytpbmRleDIgPCBwYXJlbnRzLmxlbmd0aCkgewogICAgICBjb25zdCBwYXJlbnQgPSBwYXJlbnRzW2luZGV4Ml07CiAgICAgIGNvbnN0IHNpYmxpbmdzMiA9IGdyYW5kcGFyZW50ID8gZ3JhbmRwYXJlbnQuY2hpbGRyZW4gOiB2b2lkIDA7CiAgICAgIGlmIChpZ25vcmVkKAogICAgICAgIHBhcmVudCwKICAgICAgICBzaWJsaW5nczIgPyBzaWJsaW5nczIuaW5kZXhPZihwYXJlbnQpIDogdm9pZCAwLAogICAgICAgIGdyYW5kcGFyZW50CiAgICAgICkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZ3JhbmRwYXJlbnQgPSBwYXJlbnQ7CiAgICB9CiAgICBpZiAoZ3JhbmRwYXJlbnQpIHsKICAgICAgcmV0dXJuIGhhbmRsZXIyKG5vZGUyLCBwYXJlbnRzKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gaGFuZGxlcjIobm9kZTIsIHBhcmVudHMpIHsKICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudHNbcGFyZW50cy5sZW5ndGggLSAxXTsKICAgIGNvbnN0IGZpbmQzID0gcGFpcnMyW3BhaXJJbmRleF1bMF07CiAgICBjb25zdCByZXBsYWNlNSA9IHBhaXJzMltwYWlySW5kZXhdWzFdOwogICAgbGV0IHN0YXJ0ID0gMDsKICAgIGNvbnN0IHNpYmxpbmdzMiA9IHBhcmVudC5jaGlsZHJlbjsKICAgIGNvbnN0IGluZGV4MiA9IHNpYmxpbmdzMi5pbmRleE9mKG5vZGUyKTsKICAgIGxldCBjaGFuZ2UgPSBmYWxzZTsKICAgIGxldCBub2RlcyA9IFtdOwogICAgZmluZDMubGFzdEluZGV4ID0gMDsKICAgIGxldCBtYXRjaDIgPSBmaW5kMy5leGVjKG5vZGUyLnZhbHVlKTsKICAgIHdoaWxlIChtYXRjaDIpIHsKICAgICAgY29uc3QgcG9zaXRpb24zID0gbWF0Y2gyLmluZGV4OwogICAgICBjb25zdCBtYXRjaE9iamVjdCA9IHsKICAgICAgICBpbmRleDogbWF0Y2gyLmluZGV4LAogICAgICAgIGlucHV0OiBtYXRjaDIuaW5wdXQsCiAgICAgICAgc3RhY2s6IFsuLi5wYXJlbnRzLCBub2RlMl0KICAgICAgfTsKICAgICAgbGV0IHZhbHVlMiA9IHJlcGxhY2U1KC4uLm1hdGNoMiwgbWF0Y2hPYmplY3QpOwogICAgICBpZiAodHlwZW9mIHZhbHVlMiA9PT0gInN0cmluZyIpIHsKICAgICAgICB2YWx1ZTIgPSB2YWx1ZTIubGVuZ3RoID4gMCA/IHsgdHlwZTogInRleHQiLCB2YWx1ZTogdmFsdWUyIH0gOiB2b2lkIDA7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlMiA9PT0gZmFsc2UpIHsKICAgICAgICBmaW5kMy5sYXN0SW5kZXggPSBwb3NpdGlvbjMgKyAxOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChzdGFydCAhPT0gcG9zaXRpb24zKSB7CiAgICAgICAgICBub2Rlcy5wdXNoKHsKICAgICAgICAgICAgdHlwZTogInRleHQiLAogICAgICAgICAgICB2YWx1ZTogbm9kZTIudmFsdWUuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uMykKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7CiAgICAgICAgICBub2Rlcy5wdXNoKC4uLnZhbHVlMik7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZTIpIHsKICAgICAgICAgIG5vZGVzLnB1c2godmFsdWUyKTsKICAgICAgICB9CiAgICAgICAgc3RhcnQgPSBwb3NpdGlvbjMgKyBtYXRjaDJbMF0ubGVuZ3RoOwogICAgICAgIGNoYW5nZSA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKCFmaW5kMy5nbG9iYWwpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBtYXRjaDIgPSBmaW5kMy5leGVjKG5vZGUyLnZhbHVlKTsKICAgIH0KICAgIGlmIChjaGFuZ2UpIHsKICAgICAgaWYgKHN0YXJ0IDwgbm9kZTIudmFsdWUubGVuZ3RoKSB7CiAgICAgICAgbm9kZXMucHVzaCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IG5vZGUyLnZhbHVlLnNsaWNlKHN0YXJ0KSB9KTsKICAgICAgfQogICAgICBwYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4MiwgMSwgLi4ubm9kZXMpOwogICAgfSBlbHNlIHsKICAgICAgbm9kZXMgPSBbbm9kZTJdOwogICAgfQogICAgcmV0dXJuIGluZGV4MiArIG5vZGVzLmxlbmd0aDsKICB9Cn0KZnVuY3Rpb24gdG9QYWlycyh0dXBsZU9yTGlzdCkgewogIGNvbnN0IHJlc3VsdCA9IFtdOwogIGlmICghQXJyYXkuaXNBcnJheSh0dXBsZU9yTGlzdCkpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGZpbmQgYW5kIHJlcGxhY2UgdHVwbGUgb3IgbGlzdCBvZiB0dXBsZXMiKTsKICB9CiAgY29uc3QgbGlzdDUgPSAhdHVwbGVPckxpc3RbMF0gfHwgQXJyYXkuaXNBcnJheSh0dXBsZU9yTGlzdFswXSkgPyB0dXBsZU9yTGlzdCA6IFt0dXBsZU9yTGlzdF07CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGxpc3Q1Lmxlbmd0aCkgewogICAgY29uc3QgdHVwbGUgPSBsaXN0NVtpbmRleDJdOwogICAgcmVzdWx0LnB1c2goW3RvRXhwcmVzc2lvbih0dXBsZVswXSksIHRvRnVuY3Rpb24odHVwbGVbMV0pXSk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gdG9FeHByZXNzaW9uKGZpbmQzKSB7CiAgcmV0dXJuIHR5cGVvZiBmaW5kMyA9PT0gInN0cmluZyIgPyBuZXcgUmVnRXhwKGVzY2FwZVN0cmluZ1JlZ2V4cChmaW5kMyksICJnIikgOiBmaW5kMzsKfQpmdW5jdGlvbiB0b0Z1bmN0aW9uKHJlcGxhY2U1KSB7CiAgcmV0dXJuIHR5cGVvZiByZXBsYWNlNSA9PT0gImZ1bmN0aW9uIiA/IHJlcGxhY2U1IDogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gcmVwbGFjZTU7CiAgfTsKfQp2YXIgaW5pdF9saWI4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlQDMuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZpbmQtYW5kLXJlcGxhY2UvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfZXNjYXBlX3N0cmluZ19yZWdleHAoKTsKICAgIGluaXRfdW5pc3RfdXRpbF92aXNpdF9wYXJlbnRzKCk7CiAgICBpbml0X3VuaXN0X3V0aWxfaXMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZmluZC1hbmQtcmVwbGFjZUAzLjAuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfZmluZF9hbmRfcmVwbGFjZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZmluZC1hbmQtcmVwbGFjZUAzLjAuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliOCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbC9saWIvaW5kZXguanMKZnVuY3Rpb24gZ2ZtQXV0b2xpbmtMaXRlcmFsRnJvbU1hcmtkb3duKCkgewogIHJldHVybiB7CiAgICB0cmFuc2Zvcm1zOiBbdHJhbnNmb3JtR2ZtQXV0b2xpbmtMaXRlcmFsc10sCiAgICBlbnRlcjogewogICAgICBsaXRlcmFsQXV0b2xpbms6IGVudGVyTGl0ZXJhbEF1dG9saW5rLAogICAgICBsaXRlcmFsQXV0b2xpbmtFbWFpbDogZW50ZXJMaXRlcmFsQXV0b2xpbmtWYWx1ZSwKICAgICAgbGl0ZXJhbEF1dG9saW5rSHR0cDogZW50ZXJMaXRlcmFsQXV0b2xpbmtWYWx1ZSwKICAgICAgbGl0ZXJhbEF1dG9saW5rV3d3OiBlbnRlckxpdGVyYWxBdXRvbGlua1ZhbHVlCiAgICB9LAogICAgZXhpdDogewogICAgICBsaXRlcmFsQXV0b2xpbms6IGV4aXRMaXRlcmFsQXV0b2xpbmssCiAgICAgIGxpdGVyYWxBdXRvbGlua0VtYWlsOiBleGl0TGl0ZXJhbEF1dG9saW5rRW1haWwsCiAgICAgIGxpdGVyYWxBdXRvbGlua0h0dHA6IGV4aXRMaXRlcmFsQXV0b2xpbmtIdHRwLAogICAgICBsaXRlcmFsQXV0b2xpbmtXd3c6IGV4aXRMaXRlcmFsQXV0b2xpbmtXd3cKICAgIH0KICB9Owp9CmZ1bmN0aW9uIGdmbUF1dG9saW5rTGl0ZXJhbFRvTWFya2Rvd24oKSB7CiAgcmV0dXJuIHsKICAgIHVuc2FmZTogWwogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiQCIsCiAgICAgICAgYmVmb3JlOiAiWytcXC0uXFx3XSIsCiAgICAgICAgYWZ0ZXI6ICJbXFwtLlxcd10iLAogICAgICAgIGluQ29uc3RydWN0LAogICAgICAgIG5vdEluQ29uc3RydWN0CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBjaGFyYWN0ZXI6ICIuIiwKICAgICAgICBiZWZvcmU6ICJbV3ddIiwKICAgICAgICBhZnRlcjogIltcXC0uXFx3XSIsCiAgICAgICAgaW5Db25zdHJ1Y3QsCiAgICAgICAgbm90SW5Db25zdHJ1Y3QKICAgICAgfSwKICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIjoiLAogICAgICAgIGJlZm9yZTogIltwc10iLAogICAgICAgIGFmdGVyOiAiXFwvIiwKICAgICAgICBpbkNvbnN0cnVjdCwKICAgICAgICBub3RJbkNvbnN0cnVjdAogICAgICB9CiAgICBdCiAgfTsKfQpmdW5jdGlvbiBlbnRlckxpdGVyYWxBdXRvbGluayh0b2tlbikgewogIHRoaXMuZW50ZXIoeyB0eXBlOiAibGluayIsIHRpdGxlOiBudWxsLCB1cmw6ICIiLCBjaGlsZHJlbjogW10gfSwgdG9rZW4pOwp9CmZ1bmN0aW9uIGVudGVyTGl0ZXJhbEF1dG9saW5rVmFsdWUodG9rZW4pIHsKICB0aGlzLmNvbmZpZy5lbnRlci5hdXRvbGlua1Byb3RvY29sLmNhbGwodGhpcywgdG9rZW4pOwp9CmZ1bmN0aW9uIGV4aXRMaXRlcmFsQXV0b2xpbmtIdHRwKHRva2VuKSB7CiAgdGhpcy5jb25maWcuZXhpdC5hdXRvbGlua1Byb3RvY29sLmNhbGwodGhpcywgdG9rZW4pOwp9CmZ1bmN0aW9uIGV4aXRMaXRlcmFsQXV0b2xpbmtXd3codG9rZW4pIHsKICB0aGlzLmNvbmZpZy5leGl0LmRhdGEuY2FsbCh0aGlzLCB0b2tlbik7CiAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgb2sobm9kZTIudHlwZSA9PT0gImxpbmsiKTsKICBub2RlMi51cmwgPSAiaHR0cDovLyIgKyB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKfQpmdW5jdGlvbiBleGl0TGl0ZXJhbEF1dG9saW5rRW1haWwodG9rZW4pIHsKICB0aGlzLmNvbmZpZy5leGl0LmF1dG9saW5rRW1haWwuY2FsbCh0aGlzLCB0b2tlbik7Cn0KZnVuY3Rpb24gZXhpdExpdGVyYWxBdXRvbGluayh0b2tlbikgewogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gdHJhbnNmb3JtR2ZtQXV0b2xpbmtMaXRlcmFscyh0cmVlKSB7CiAgZmluZEFuZFJlcGxhY2UoCiAgICB0cmVlLAogICAgWwogICAgICBbLyhodHRwcz86XC9cL3x3d3coPz1cLikpKFstLlx3XSspKFteIFx0XHJcbl0qKS9naSwgZmluZFVybF0sCiAgICAgIFsvKD88PV58XHN8XHB7UH18XHB7U30pKFstLlx3K10rKUAoWy1cd10rKD86XC5bLVx3XSspKykvZ3UsIGZpbmRFbWFpbF0KICAgIF0sCiAgICB7IGlnbm9yZTogWyJsaW5rIiwgImxpbmtSZWZlcmVuY2UiXSB9CiAgKTsKfQpmdW5jdGlvbiBmaW5kVXJsKF80LCBwcm90b2NvbCwgZG9tYWluMiwgcGF0aDIsIG1hdGNoMikgewogIGxldCBwcmVmaXg0ID0gIiI7CiAgaWYgKCFwcmV2aW91cyhtYXRjaDIpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGlmICgvXncvaS50ZXN0KHByb3RvY29sKSkgewogICAgZG9tYWluMiA9IHByb3RvY29sICsgZG9tYWluMjsKICAgIHByb3RvY29sID0gIiI7CiAgICBwcmVmaXg0ID0gImh0dHA6Ly8iOwogIH0KICBpZiAoIWlzQ29ycmVjdERvbWFpbihkb21haW4yKSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBjb25zdCBwYXJ0cyA9IHNwbGl0VXJsKGRvbWFpbjIgKyBwYXRoMik7CiAgaWYgKCFwYXJ0c1swXSkgcmV0dXJuIGZhbHNlOwogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJsaW5rIiwKICAgIHRpdGxlOiBudWxsLAogICAgdXJsOiBwcmVmaXg0ICsgcHJvdG9jb2wgKyBwYXJ0c1swXSwKICAgIGNoaWxkcmVuOiBbeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBwcm90b2NvbCArIHBhcnRzWzBdIH1dCiAgfTsKICBpZiAocGFydHNbMV0pIHsKICAgIHJldHVybiBbcmVzdWx0LCB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IHBhcnRzWzFdIH1dOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIGZpbmRFbWFpbChfNCwgYXRleHQsIGxhYmVsLCBtYXRjaDIpIHsKICBpZiAoCiAgICAvLyBOb3QgYW4gZXhwZWN0ZWQgcHJldmlvdXMgY2hhcmFjdGVyLgogICAgIXByZXZpb3VzKG1hdGNoMiwgdHJ1ZSkgfHwgLy8gTGFiZWwgZW5kcyBpbiBub3QgYWxsb3dlZCBjaGFyYWN0ZXIuCiAgICAvWy1cZF9dJC8udGVzdChsYWJlbCkKICApIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHsKICAgIHR5cGU6ICJsaW5rIiwKICAgIHRpdGxlOiBudWxsLAogICAgdXJsOiAibWFpbHRvOiIgKyBhdGV4dCArICJAIiArIGxhYmVsLAogICAgY2hpbGRyZW46IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IGF0ZXh0ICsgIkAiICsgbGFiZWwgfV0KICB9Owp9CmZ1bmN0aW9uIGlzQ29ycmVjdERvbWFpbihkb21haW4yKSB7CiAgY29uc3QgcGFydHMgPSBkb21haW4yLnNwbGl0KCIuIik7CiAgaWYgKHBhcnRzLmxlbmd0aCA8IDIgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gJiYgKC9fLy50ZXN0KHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdKSB8fCAhL1thLXpBLVpcZF0vLnRlc3QocGFydHNbcGFydHMubGVuZ3RoIC0gMV0pKSB8fCBwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXSAmJiAoL18vLnRlc3QocGFydHNbcGFydHMubGVuZ3RoIC0gMl0pIHx8ICEvW2EtekEtWlxkXS8udGVzdChwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXSkpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIHNwbGl0VXJsKHVybCkgewogIGNvbnN0IHRyYWlsRXhlYyA9IC9bISImJyksLjo7PD4/XF19XSskLy5leGVjKHVybCk7CiAgaWYgKCF0cmFpbEV4ZWMpIHsKICAgIHJldHVybiBbdXJsLCB2b2lkIDBdOwogIH0KICB1cmwgPSB1cmwuc2xpY2UoMCwgdHJhaWxFeGVjLmluZGV4KTsKICBsZXQgdHJhaWwyID0gdHJhaWxFeGVjWzBdOwogIGxldCBjbG9zaW5nUGFyZW5JbmRleCA9IHRyYWlsMi5pbmRleE9mKCIpIik7CiAgY29uc3Qgb3BlbmluZ1BhcmVucyA9IGNjb3VudCh1cmwsICIoIik7CiAgbGV0IGNsb3NpbmdQYXJlbnMgPSBjY291bnQodXJsLCAiKSIpOwogIHdoaWxlIChjbG9zaW5nUGFyZW5JbmRleCAhPT0gLTEgJiYgb3BlbmluZ1BhcmVucyA+IGNsb3NpbmdQYXJlbnMpIHsKICAgIHVybCArPSB0cmFpbDIuc2xpY2UoMCwgY2xvc2luZ1BhcmVuSW5kZXggKyAxKTsKICAgIHRyYWlsMiA9IHRyYWlsMi5zbGljZShjbG9zaW5nUGFyZW5JbmRleCArIDEpOwogICAgY2xvc2luZ1BhcmVuSW5kZXggPSB0cmFpbDIuaW5kZXhPZigiKSIpOwogICAgY2xvc2luZ1BhcmVucysrOwogIH0KICByZXR1cm4gW3VybCwgdHJhaWwyXTsKfQpmdW5jdGlvbiBwcmV2aW91cyhtYXRjaDIsIGVtYWlsKSB7CiAgY29uc3QgY29kZTQgPSBtYXRjaDIuaW5wdXQuY2hhckNvZGVBdChtYXRjaDIuaW5kZXggLSAxKTsKICByZXR1cm4gKG1hdGNoMi5pbmRleCA9PT0gMCB8fCB1bmljb2RlV2hpdGVzcGFjZShjb2RlNCkgfHwgdW5pY29kZVB1bmN0dWF0aW9uKGNvZGU0KSkgJiYgLy8gSWYgaXTigJlzIGFuIGVtYWlsLCB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIHNob3VsZCBub3QgYmUgYSBzbGFzaC4KICAoIWVtYWlsIHx8IGNvZGU0ICE9PSA0Nyk7Cn0KdmFyIGluQ29uc3RydWN0LCBub3RJbkNvbnN0cnVjdDsKdmFyIGluaXRfbGliOSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4wLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWwvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfY2NvdW50KCk7CiAgICBpbml0X2RlZmF1bHQoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21kYXN0X3V0aWxfZmluZF9hbmRfcmVwbGFjZSgpOwogICAgaW5Db25zdHJ1Y3QgPSAicGhyYXNpbmciOwogICAgbm90SW5Db25zdHJ1Y3QgPSBbImF1dG9saW5rIiwgImxpbmsiLCAiaW1hZ2UiLCAibGFiZWwiXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4wLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWwvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9nZm1fYXV0b2xpbmtfbGl0ZXJhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4wLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWF1dG9saW5rLWxpdGVyYWwvaW5kZXguanMiKCkgewogICAgaW5pdF9saWI5KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1ub3JtYWxpemUtaWRlbnRpZmllckAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtbm9ybWFsaXplLWlkZW50aWZpZXIvaW5kZXguanMKZnVuY3Rpb24gbm9ybWFsaXplSWRlbnRpZmllcih2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyLnJlcGxhY2UoL1tcdFxuXHIgXSsvZywgIiAiKS5yZXBsYWNlKC9eIHwgJC9nLCAiIikudG9Mb3dlckNhc2UoKS50b1VwcGVyQ2FzZSgpOwp9CnZhciBpbml0X21pY3JvbWFya191dGlsX25vcm1hbGl6ZV9pZGVudGlmaWVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtbm9ybWFsaXplLWlkZW50aWZpZXJAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLW5vcm1hbGl6ZS1pZGVudGlmaWVyL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLWZvb3Rub3RlQDIuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS1mb290bm90ZS9saWIvaW5kZXguanMKZnVuY3Rpb24gZW50ZXJGb290bm90ZUNhbGxTdHJpbmcoKSB7CiAgdGhpcy5idWZmZXIoKTsKfQpmdW5jdGlvbiBlbnRlckZvb3Rub3RlQ2FsbCh0b2tlbikgewogIHRoaXMuZW50ZXIoeyB0eXBlOiAiZm9vdG5vdGVSZWZlcmVuY2UiLCBpZGVudGlmaWVyOiAiIiwgbGFiZWw6ICIiIH0sIHRva2VuKTsKfQpmdW5jdGlvbiBlbnRlckZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nKCkgewogIHRoaXMuYnVmZmVyKCk7Cn0KZnVuY3Rpb24gZW50ZXJGb290bm90ZURlZmluaXRpb24odG9rZW4pIHsKICB0aGlzLmVudGVyKAogICAgeyB0eXBlOiAiZm9vdG5vdGVEZWZpbml0aW9uIiwgaWRlbnRpZmllcjogIiIsIGxhYmVsOiAiIiwgY2hpbGRyZW46IFtdIH0sCiAgICB0b2tlbgogICk7Cn0KZnVuY3Rpb24gZXhpdEZvb3Rub3RlQ2FsbFN0cmluZyh0b2tlbikgewogIGNvbnN0IGxhYmVsID0gdGhpcy5yZXN1bWUoKTsKICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICBvayhub2RlMi50eXBlID09PSAiZm9vdG5vdGVSZWZlcmVuY2UiKTsKICBub2RlMi5pZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcigKICAgIHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pCiAgKS50b0xvd2VyQ2FzZSgpOwogIG5vZGUyLmxhYmVsID0gbGFiZWw7Cn0KZnVuY3Rpb24gZXhpdEZvb3Rub3RlQ2FsbCh0b2tlbikgewogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gZXhpdEZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nKHRva2VuKSB7CiAgY29uc3QgbGFiZWwgPSB0aGlzLnJlc3VtZSgpOwogIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogIG9rKG5vZGUyLnR5cGUgPT09ICJmb290bm90ZURlZmluaXRpb24iKTsKICBub2RlMi5pZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcigKICAgIHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pCiAgKS50b0xvd2VyQ2FzZSgpOwogIG5vZGUyLmxhYmVsID0gbGFiZWw7Cn0KZnVuY3Rpb24gZXhpdEZvb3Rub3RlRGVmaW5pdGlvbih0b2tlbikgewogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gZm9vdG5vdGVSZWZlcmVuY2VQZWVrKCkgewogIHJldHVybiAiWyI7Cn0KZnVuY3Rpb24gZm9vdG5vdGVSZWZlcmVuY2Uobm9kZTIsIF80LCBzdGF0ZTE0LCBpbmZvKSB7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTQuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBsZXQgdmFsdWUyID0gdHJhY2tlci5tb3ZlKCJbXiIpOwogIGNvbnN0IGV4aXQzID0gc3RhdGUxNC5lbnRlcigiZm9vdG5vdGVSZWZlcmVuY2UiKTsKICBjb25zdCBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigicmVmZXJlbmNlIik7CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgIHN0YXRlMTQuc2FmZShzdGF0ZTE0LmFzc29jaWF0aW9uSWQobm9kZTIpLCB7IGFmdGVyOiAiXSIsIGJlZm9yZTogdmFsdWUyIH0pCiAgKTsKICBzdWJleGl0KCk7CiAgZXhpdDMoKTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJdIik7CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBnZm1Gb290bm90ZUZyb21NYXJrZG93bigpIHsKICByZXR1cm4gewogICAgZW50ZXI6IHsKICAgICAgZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nOiBlbnRlckZvb3Rub3RlQ2FsbFN0cmluZywKICAgICAgZ2ZtRm9vdG5vdGVDYWxsOiBlbnRlckZvb3Rub3RlQ2FsbCwKICAgICAgZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmc6IGVudGVyRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmcsCiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbjogZW50ZXJGb290bm90ZURlZmluaXRpb24KICAgIH0sCiAgICBleGl0OiB7CiAgICAgIGdmbUZvb3Rub3RlQ2FsbFN0cmluZzogZXhpdEZvb3Rub3RlQ2FsbFN0cmluZywKICAgICAgZ2ZtRm9vdG5vdGVDYWxsOiBleGl0Rm9vdG5vdGVDYWxsLAogICAgICBnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZzogZXhpdEZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nLAogICAgICBnZm1Gb290bm90ZURlZmluaXRpb246IGV4aXRGb290bm90ZURlZmluaXRpb24KICAgIH0KICB9Owp9CmZ1bmN0aW9uIGdmbUZvb3Rub3RlVG9NYXJrZG93bihvcHRpb25zKSB7CiAgbGV0IGZpcnN0TGluZUJsYW5rID0gZmFsc2U7CiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5maXJzdExpbmVCbGFuaykgewogICAgZmlyc3RMaW5lQmxhbmsgPSB0cnVlOwogIH0KICByZXR1cm4gewogICAgaGFuZGxlcnM6IHsgZm9vdG5vdGVEZWZpbml0aW9uLCBmb290bm90ZVJlZmVyZW5jZSB9LAogICAgLy8gVGhpcyBpcyBvbiBieSBkZWZhdWx0IGFscmVhZHkuCiAgICB1bnNhZmU6IFt7IGNoYXJhY3RlcjogIlsiLCBpbkNvbnN0cnVjdDogWyJsYWJlbCIsICJwaHJhc2luZyIsICJyZWZlcmVuY2UiXSB9XQogIH07CiAgZnVuY3Rpb24gZm9vdG5vdGVEZWZpbml0aW9uKG5vZGUyLCBfNCwgc3RhdGUxNCwgaW5mbykgewogICAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTQuY3JlYXRlVHJhY2tlcihpbmZvKTsKICAgIGxldCB2YWx1ZTIgPSB0cmFja2VyLm1vdmUoIlteIik7CiAgICBjb25zdCBleGl0MyA9IHN0YXRlMTQuZW50ZXIoImZvb3Rub3RlRGVmaW5pdGlvbiIpOwogICAgY29uc3Qgc3ViZXhpdCA9IHN0YXRlMTQuZW50ZXIoImxhYmVsIik7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICBzdGF0ZTE0LnNhZmUoc3RhdGUxNC5hc3NvY2lhdGlvbklkKG5vZGUyKSwgeyBiZWZvcmU6IHZhbHVlMiwgYWZ0ZXI6ICJdIiB9KQogICAgKTsKICAgIHN1YmV4aXQoKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIl06Iik7CiAgICBpZiAobm9kZTIuY2hpbGRyZW4gJiYgbm9kZTIuY2hpbGRyZW4ubGVuZ3RoID4gMCkgewogICAgICB0cmFja2VyLnNoaWZ0KDQpOwogICAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICAgIChmaXJzdExpbmVCbGFuayA/ICJcbiIgOiAiICIpICsgc3RhdGUxNC5pbmRlbnRMaW5lcygKICAgICAgICAgIHN0YXRlMTQuY29udGFpbmVyRmxvdyhub2RlMiwgdHJhY2tlci5jdXJyZW50KCkpLAogICAgICAgICAgZmlyc3RMaW5lQmxhbmsgPyBtYXBBbGwgOiBtYXBFeGNlcHRGaXJzdAogICAgICAgICkKICAgICAgKTsKICAgIH0KICAgIGV4aXQzKCk7CiAgICByZXR1cm4gdmFsdWUyOwogIH0KfQpmdW5jdGlvbiBtYXBFeGNlcHRGaXJzdChsaW5lLCBpbmRleDIsIGJsYW5rKSB7CiAgcmV0dXJuIGluZGV4MiA9PT0gMCA/IGxpbmUgOiBtYXBBbGwobGluZSwgaW5kZXgyLCBibGFuayk7Cn0KZnVuY3Rpb24gbWFwQWxsKGxpbmUsIGluZGV4MiwgYmxhbmspIHsKICByZXR1cm4gKGJsYW5rID8gIiIgOiAiICAgICIpICsgbGluZTsKfQp2YXIgaW5pdF9saWIxMCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLWZvb3Rub3RlQDIuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS1mb290bm90ZS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWZhdWx0KCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX25vcm1hbGl6ZV9pZGVudGlmaWVyKCk7CiAgICBmb290bm90ZVJlZmVyZW5jZS5wZWVrID0gZm9vdG5vdGVSZWZlcmVuY2VQZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWZvb3Rub3RlL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfZ2ZtX2Zvb3Rub3RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWZvb3Rub3RlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMTAoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2hAMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2gvbGliL2luZGV4LmpzCmZ1bmN0aW9uIGdmbVN0cmlrZXRocm91Z2hGcm9tTWFya2Rvd24oKSB7CiAgcmV0dXJuIHsKICAgIGNhbkNvbnRhaW5Fb2xzOiBbImRlbGV0ZSJdLAogICAgZW50ZXI6IHsgc3RyaWtldGhyb3VnaDogZW50ZXJTdHJpa2V0aHJvdWdoIH0sCiAgICBleGl0OiB7IHN0cmlrZXRocm91Z2g6IGV4aXRTdHJpa2V0aHJvdWdoIH0KICB9Owp9CmZ1bmN0aW9uIGdmbVN0cmlrZXRocm91Z2hUb01hcmtkb3duKCkgewogIHJldHVybiB7CiAgICB1bnNhZmU6IFsKICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIn4iLAogICAgICAgIGluQ29uc3RydWN0OiAicGhyYXNpbmciLAogICAgICAgIG5vdEluQ29uc3RydWN0OiBjb25zdHJ1Y3RzV2l0aG91dFN0cmlrZXRocm91Z2gKICAgICAgfQogICAgXSwKICAgIGhhbmRsZXJzOiB7IGRlbGV0ZTogaGFuZGxlRGVsZXRlIH0KICB9Owp9CmZ1bmN0aW9uIGVudGVyU3RyaWtldGhyb3VnaCh0b2tlbikgewogIHRoaXMuZW50ZXIoeyB0eXBlOiAiZGVsZXRlIiwgY2hpbGRyZW46IFtdIH0sIHRva2VuKTsKfQpmdW5jdGlvbiBleGl0U3RyaWtldGhyb3VnaCh0b2tlbikgewogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gaGFuZGxlRGVsZXRlKG5vZGUyLCBfNCwgc3RhdGUxNCwgaW5mbykgewogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTE0LmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTE0LmVudGVyKCJzdHJpa2V0aHJvdWdoIik7CiAgbGV0IHZhbHVlMiA9IHRyYWNrZXIubW92ZSgifn4iKTsKICB2YWx1ZTIgKz0gc3RhdGUxNC5jb250YWluZXJQaHJhc2luZyhub2RlMiwgewogICAgLi4udHJhY2tlci5jdXJyZW50KCksCiAgICBiZWZvcmU6IHZhbHVlMiwKICAgIGFmdGVyOiAifiIKICB9KTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJ+fiIpOwogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBwZWVrRGVsZXRlKCkgewogIHJldHVybiAifiI7Cn0KdmFyIGNvbnN0cnVjdHNXaXRob3V0U3RyaWtldGhyb3VnaDsKdmFyIGluaXRfbGliMTEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS1zdHJpa2V0aHJvdWdoQDIuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS1zdHJpa2V0aHJvdWdoL2xpYi9pbmRleC5qcyIoKSB7CiAgICBjb25zdHJ1Y3RzV2l0aG91dFN0cmlrZXRocm91Z2ggPSBbCiAgICAgICJhdXRvbGluayIsCiAgICAgICJkZXN0aW5hdGlvbkxpdGVyYWwiLAogICAgICAiZGVzdGluYXRpb25SYXciLAogICAgICAicmVmZXJlbmNlIiwKICAgICAgInRpdGxlUXVvdGUiLAogICAgICAidGl0bGVBcG9zdHJvcGhlIgogICAgXTsKICAgIGhhbmRsZURlbGV0ZS5wZWVrID0gcGVla0RlbGV0ZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2hAMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2gvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9nZm1fc3RyaWtldGhyb3VnaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2hAMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2gvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxMSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWFya2Rvd24tdGFibGVAMy4wLjQvbm9kZV9tb2R1bGVzL21hcmtkb3duLXRhYmxlL2luZGV4LmpzCmZ1bmN0aW9uIGRlZmF1bHRTdHJpbmdMZW5ndGgodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMi5sZW5ndGg7Cn0KZnVuY3Rpb24gbWFya2Rvd25UYWJsZSh0YWJsZTIsIG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgY29uc3QgYWxpZ24gPSAoc2V0dGluZ3MuYWxpZ24gfHwgW10pLmNvbmNhdCgpOwogIGNvbnN0IHN0cmluZ0xlbmd0aCA9IHNldHRpbmdzLnN0cmluZ0xlbmd0aCB8fCBkZWZhdWx0U3RyaW5nTGVuZ3RoOwogIGNvbnN0IGFsaWdubWVudHMgPSBbXTsKICBjb25zdCBjZWxsTWF0cml4ID0gW107CiAgY29uc3Qgc2l6ZU1hdHJpeCA9IFtdOwogIGNvbnN0IGxvbmdlc3RDZWxsQnlDb2x1bW4gPSBbXTsKICBsZXQgbW9zdENlbGxzUGVyUm93ID0gMDsKICBsZXQgcm93SW5kZXggPSAtMTsKICB3aGlsZSAoKytyb3dJbmRleCA8IHRhYmxlMi5sZW5ndGgpIHsKICAgIGNvbnN0IHJvdzIgPSBbXTsKICAgIGNvbnN0IHNpemVzMiA9IFtdOwogICAgbGV0IGNvbHVtbkluZGV4MiA9IC0xOwogICAgaWYgKHRhYmxlMltyb3dJbmRleF0ubGVuZ3RoID4gbW9zdENlbGxzUGVyUm93KSB7CiAgICAgIG1vc3RDZWxsc1BlclJvdyA9IHRhYmxlMltyb3dJbmRleF0ubGVuZ3RoOwogICAgfQogICAgd2hpbGUgKCsrY29sdW1uSW5kZXgyIDwgdGFibGUyW3Jvd0luZGV4XS5sZW5ndGgpIHsKICAgICAgY29uc3QgY2VsbDIgPSBzZXJpYWxpemUodGFibGUyW3Jvd0luZGV4XVtjb2x1bW5JbmRleDJdKTsKICAgICAgaWYgKHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyAhPT0gZmFsc2UpIHsKICAgICAgICBjb25zdCBzaXplID0gc3RyaW5nTGVuZ3RoKGNlbGwyKTsKICAgICAgICBzaXplczJbY29sdW1uSW5kZXgyXSA9IHNpemU7CiAgICAgICAgaWYgKGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXgyXSA9PT0gdm9pZCAwIHx8IHNpemUgPiBsb25nZXN0Q2VsbEJ5Q29sdW1uW2NvbHVtbkluZGV4Ml0pIHsKICAgICAgICAgIGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXgyXSA9IHNpemU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJvdzIucHVzaChjZWxsMik7CiAgICB9CiAgICBjZWxsTWF0cml4W3Jvd0luZGV4XSA9IHJvdzI7CiAgICBzaXplTWF0cml4W3Jvd0luZGV4XSA9IHNpemVzMjsKICB9CiAgbGV0IGNvbHVtbkluZGV4ID0gLTE7CiAgaWYgKHR5cGVvZiBhbGlnbiA9PT0gIm9iamVjdCIgJiYgImxlbmd0aCIgaW4gYWxpZ24pIHsKICAgIHdoaWxlICgrK2NvbHVtbkluZGV4IDwgbW9zdENlbGxzUGVyUm93KSB7CiAgICAgIGFsaWdubWVudHNbY29sdW1uSW5kZXhdID0gdG9BbGlnbm1lbnQoYWxpZ25bY29sdW1uSW5kZXhdKTsKICAgIH0KICB9IGVsc2UgewogICAgY29uc3QgY29kZTQgPSB0b0FsaWdubWVudChhbGlnbik7CiAgICB3aGlsZSAoKytjb2x1bW5JbmRleCA8IG1vc3RDZWxsc1BlclJvdykgewogICAgICBhbGlnbm1lbnRzW2NvbHVtbkluZGV4XSA9IGNvZGU0OwogICAgfQogIH0KICBjb2x1bW5JbmRleCA9IC0xOwogIGNvbnN0IHJvdyA9IFtdOwogIGNvbnN0IHNpemVzID0gW107CiAgd2hpbGUgKCsrY29sdW1uSW5kZXggPCBtb3N0Q2VsbHNQZXJSb3cpIHsKICAgIGNvbnN0IGNvZGU0ID0gYWxpZ25tZW50c1tjb2x1bW5JbmRleF07CiAgICBsZXQgYmVmb3JlID0gIiI7CiAgICBsZXQgYWZ0ZXIgPSAiIjsKICAgIGlmIChjb2RlNCA9PT0gOTkpIHsKICAgICAgYmVmb3JlID0gIjoiOwogICAgICBhZnRlciA9ICI6IjsKICAgIH0gZWxzZSBpZiAoY29kZTQgPT09IDEwOCkgewogICAgICBiZWZvcmUgPSAiOiI7CiAgICB9IGVsc2UgaWYgKGNvZGU0ID09PSAxMTQpIHsKICAgICAgYWZ0ZXIgPSAiOiI7CiAgICB9CiAgICBsZXQgc2l6ZSA9IHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyA9PT0gZmFsc2UgPyAxIDogTWF0aC5tYXgoCiAgICAgIDEsCiAgICAgIGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXhdIC0gYmVmb3JlLmxlbmd0aCAtIGFmdGVyLmxlbmd0aAogICAgKTsKICAgIGNvbnN0IGNlbGwyID0gYmVmb3JlICsgIi0iLnJlcGVhdChzaXplKSArIGFmdGVyOwogICAgaWYgKHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyAhPT0gZmFsc2UpIHsKICAgICAgc2l6ZSA9IGJlZm9yZS5sZW5ndGggKyBzaXplICsgYWZ0ZXIubGVuZ3RoOwogICAgICBpZiAoc2l6ZSA+IGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXhdKSB7CiAgICAgICAgbG9uZ2VzdENlbGxCeUNvbHVtbltjb2x1bW5JbmRleF0gPSBzaXplOwogICAgICB9CiAgICAgIHNpemVzW2NvbHVtbkluZGV4XSA9IHNpemU7CiAgICB9CiAgICByb3dbY29sdW1uSW5kZXhdID0gY2VsbDI7CiAgfQogIGNlbGxNYXRyaXguc3BsaWNlKDEsIDAsIHJvdyk7CiAgc2l6ZU1hdHJpeC5zcGxpY2UoMSwgMCwgc2l6ZXMpOwogIHJvd0luZGV4ID0gLTE7CiAgY29uc3QgbGluZXMgPSBbXTsKICB3aGlsZSAoKytyb3dJbmRleCA8IGNlbGxNYXRyaXgubGVuZ3RoKSB7CiAgICBjb25zdCByb3cyID0gY2VsbE1hdHJpeFtyb3dJbmRleF07CiAgICBjb25zdCBzaXplczIgPSBzaXplTWF0cml4W3Jvd0luZGV4XTsKICAgIGNvbHVtbkluZGV4ID0gLTE7CiAgICBjb25zdCBsaW5lID0gW107CiAgICB3aGlsZSAoKytjb2x1bW5JbmRleCA8IG1vc3RDZWxsc1BlclJvdykgewogICAgICBjb25zdCBjZWxsMiA9IHJvdzJbY29sdW1uSW5kZXhdIHx8ICIiOwogICAgICBsZXQgYmVmb3JlID0gIiI7CiAgICAgIGxldCBhZnRlciA9ICIiOwogICAgICBpZiAoc2V0dGluZ3MuYWxpZ25EZWxpbWl0ZXJzICE9PSBmYWxzZSkgewogICAgICAgIGNvbnN0IHNpemUgPSBsb25nZXN0Q2VsbEJ5Q29sdW1uW2NvbHVtbkluZGV4XSAtIChzaXplczJbY29sdW1uSW5kZXhdIHx8IDApOwogICAgICAgIGNvbnN0IGNvZGU0ID0gYWxpZ25tZW50c1tjb2x1bW5JbmRleF07CiAgICAgICAgaWYgKGNvZGU0ID09PSAxMTQpIHsKICAgICAgICAgIGJlZm9yZSA9ICIgIi5yZXBlYXQoc2l6ZSk7CiAgICAgICAgfSBlbHNlIGlmIChjb2RlNCA9PT0gOTkpIHsKICAgICAgICAgIGlmIChzaXplICUgMikgewogICAgICAgICAgICBiZWZvcmUgPSAiICIucmVwZWF0KHNpemUgLyAyICsgMC41KTsKICAgICAgICAgICAgYWZ0ZXIgPSAiICIucmVwZWF0KHNpemUgLyAyIC0gMC41KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJlZm9yZSA9ICIgIi5yZXBlYXQoc2l6ZSAvIDIpOwogICAgICAgICAgICBhZnRlciA9IGJlZm9yZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYWZ0ZXIgPSAiICIucmVwZWF0KHNpemUpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc2V0dGluZ3MuZGVsaW1pdGVyU3RhcnQgIT09IGZhbHNlICYmICFjb2x1bW5JbmRleCkgewogICAgICAgIGxpbmUucHVzaCgifCIpOwogICAgICB9CiAgICAgIGlmIChzZXR0aW5ncy5wYWRkaW5nICE9PSBmYWxzZSAmJiAvLyBEb27igJl0IGFkZCB0aGUgb3BlbmluZyBzcGFjZSBpZiB3ZeKAmXJlIG5vdCBhbGlnbmluZyBhbmQgdGhlIGNlbGwgaXMKICAgICAgLy8gZW1wdHk6IHRoZXJlIHdpbGwgYmUgYSBjbG9zaW5nIHNwYWNlLgogICAgICAhKHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyA9PT0gZmFsc2UgJiYgY2VsbDIgPT09ICIiKSAmJiAoc2V0dGluZ3MuZGVsaW1pdGVyU3RhcnQgIT09IGZhbHNlIHx8IGNvbHVtbkluZGV4KSkgewogICAgICAgIGxpbmUucHVzaCgiICIpOwogICAgICB9CiAgICAgIGlmIChzZXR0aW5ncy5hbGlnbkRlbGltaXRlcnMgIT09IGZhbHNlKSB7CiAgICAgICAgbGluZS5wdXNoKGJlZm9yZSk7CiAgICAgIH0KICAgICAgbGluZS5wdXNoKGNlbGwyKTsKICAgICAgaWYgKHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyAhPT0gZmFsc2UpIHsKICAgICAgICBsaW5lLnB1c2goYWZ0ZXIpOwogICAgICB9CiAgICAgIGlmIChzZXR0aW5ncy5wYWRkaW5nICE9PSBmYWxzZSkgewogICAgICAgIGxpbmUucHVzaCgiICIpOwogICAgICB9CiAgICAgIGlmIChzZXR0aW5ncy5kZWxpbWl0ZXJFbmQgIT09IGZhbHNlIHx8IGNvbHVtbkluZGV4ICE9PSBtb3N0Q2VsbHNQZXJSb3cgLSAxKSB7CiAgICAgICAgbGluZS5wdXNoKCJ8Iik7CiAgICAgIH0KICAgIH0KICAgIGxpbmVzLnB1c2goCiAgICAgIHNldHRpbmdzLmRlbGltaXRlckVuZCA9PT0gZmFsc2UgPyBsaW5lLmpvaW4oIiIpLnJlcGxhY2UoLyArJC8sICIiKSA6IGxpbmUuam9pbigiIikKICAgICk7CiAgfQogIHJldHVybiBsaW5lcy5qb2luKCJcbiIpOwp9CmZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyID09PSBudWxsIHx8IHZhbHVlMiA9PT0gdm9pZCAwID8gIiIgOiBTdHJpbmcodmFsdWUyKTsKfQpmdW5jdGlvbiB0b0FsaWdubWVudCh2YWx1ZTIpIHsKICBjb25zdCBjb2RlNCA9IHR5cGVvZiB2YWx1ZTIgPT09ICJzdHJpbmciID8gdmFsdWUyLmNvZGVQb2ludEF0KDApIDogMDsKICByZXR1cm4gY29kZTQgPT09IDY3IHx8IGNvZGU0ID09PSA5OSA/IDk5IDogY29kZTQgPT09IDc2IHx8IGNvZGU0ID09PSAxMDggPyAxMDggOiBjb2RlNCA9PT0gODIgfHwgY29kZTQgPT09IDExNCA/IDExNCA6IDA7Cn0KdmFyIGluaXRfbWFya2Rvd25fdGFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tYXJrZG93bi10YWJsZUAzLjAuNC9ub2RlX21vZHVsZXMvbWFya2Rvd24tdGFibGUvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vendpdGNoQDIuMC40L25vZGVfbW9kdWxlcy96d2l0Y2gvaW5kZXguanMKZnVuY3Rpb24gendpdGNoKGtleTIsIG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgZnVuY3Rpb24gb25lMyh2YWx1ZTIsIC4uLnBhcmFtZXRlcnMpIHsKICAgIGxldCBmbiA9IG9uZTMuaW52YWxpZDsKICAgIGNvbnN0IGhhbmRsZXJzMiA9IG9uZTMuaGFuZGxlcnM7CiAgICBpZiAodmFsdWUyICYmIG93bjIuY2FsbCh2YWx1ZTIsIGtleTIpKSB7CiAgICAgIGNvbnN0IGlkID0gU3RyaW5nKHZhbHVlMltrZXkyXSk7CiAgICAgIGZuID0gb3duMi5jYWxsKGhhbmRsZXJzMiwgaWQpID8gaGFuZGxlcnMyW2lkXSA6IG9uZTMudW5rbm93bjsKICAgIH0KICAgIGlmIChmbikgewogICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCB2YWx1ZTIsIC4uLnBhcmFtZXRlcnMpOwogICAgfQogIH0KICBvbmUzLmhhbmRsZXJzID0gc2V0dGluZ3MuaGFuZGxlcnMgfHwge307CiAgb25lMy5pbnZhbGlkID0gc2V0dGluZ3MuaW52YWxpZDsKICBvbmUzLnVua25vd24gPSBzZXR0aW5ncy51bmtub3duOwogIHJldHVybiBvbmUzOwp9CnZhciBvd24yOwp2YXIgaW5pdF96d2l0Y2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS96d2l0Y2hAMi4wLjQvbm9kZV9tb2R1bGVzL3p3aXRjaC9pbmRleC5qcyIoKSB7CiAgICBvd24yID0ge30uaGFzT3duUHJvcGVydHk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9jb25maWd1cmUuanMKZnVuY3Rpb24gY29uZmlndXJlKGJhc2UsIGV4dGVuc2lvbjIpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGtleTI7CiAgaWYgKGV4dGVuc2lvbjIuZXh0ZW5zaW9ucykgewogICAgd2hpbGUgKCsraW5kZXgyIDwgZXh0ZW5zaW9uMi5leHRlbnNpb25zLmxlbmd0aCkgewogICAgICBjb25maWd1cmUoYmFzZSwgZXh0ZW5zaW9uMi5leHRlbnNpb25zW2luZGV4Ml0pOwogICAgfQogIH0KICBmb3IgKGtleTIgaW4gZXh0ZW5zaW9uMikgewogICAgaWYgKG93bjMuY2FsbChleHRlbnNpb24yLCBrZXkyKSkgewogICAgICBzd2l0Y2ggKGtleTIpIHsKICAgICAgICBjYXNlICJleHRlbnNpb25zIjogewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0IDQgKi8KICAgICAgICBjYXNlICJ1bnNhZmUiOiB7CiAgICAgICAgICBsaXN0KGJhc2Vba2V5Ml0sIGV4dGVuc2lvbjJba2V5Ml0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgImpvaW4iOiB7CiAgICAgICAgICBsaXN0KGJhc2Vba2V5Ml0sIGV4dGVuc2lvbjJba2V5Ml0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgImhhbmRsZXJzIjogewogICAgICAgICAgbWFwMyhiYXNlW2tleTJdLCBleHRlbnNpb24yW2tleTJdKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICBiYXNlLm9wdGlvbnNba2V5Ml0gPSBleHRlbnNpb24yW2tleTJdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4gYmFzZTsKfQpmdW5jdGlvbiBsaXN0KGxlZnQsIHJpZ2h0KSB7CiAgaWYgKHJpZ2h0KSB7CiAgICBsZWZ0LnB1c2goLi4ucmlnaHQpOwogIH0KfQpmdW5jdGlvbiBtYXAzKGxlZnQsIHJpZ2h0KSB7CiAgaWYgKHJpZ2h0KSB7CiAgICBPYmplY3QuYXNzaWduKGxlZnQsIHJpZ2h0KTsKICB9Cn0KdmFyIG93bjM7CnZhciBpbml0X2NvbmZpZ3VyZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2NvbmZpZ3VyZS5qcyIoKSB7CiAgICBvd24zID0ge30uaGFzT3duUHJvcGVydHk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvYmxvY2txdW90ZS5qcwpmdW5jdGlvbiBibG9ja3F1b3RlKG5vZGUyLCBfNCwgc3RhdGUxNCwgaW5mbykgewogIGNvbnN0IGV4aXQzID0gc3RhdGUxNC5lbnRlcigiYmxvY2txdW90ZSIpOwogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTE0LmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgdHJhY2tlci5tb3ZlKCI+ICIpOwogIHRyYWNrZXIuc2hpZnQoMik7CiAgY29uc3QgdmFsdWUyID0gc3RhdGUxNC5pbmRlbnRMaW5lcygKICAgIHN0YXRlMTQuY29udGFpbmVyRmxvdyhub2RlMiwgdHJhY2tlci5jdXJyZW50KCkpLAogICAgbWFwNAogICk7CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIG1hcDQobGluZSwgXzQsIGJsYW5rKSB7CiAgcmV0dXJuICI+IiArIChibGFuayA/ICIiIDogIiAiKSArIGxpbmU7Cn0KdmFyIGluaXRfYmxvY2txdW90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9ibG9ja3F1b3RlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvcGF0dGVybi1pbi1zY29wZS5qcwpmdW5jdGlvbiBwYXR0ZXJuSW5TY29wZShzdGFjaywgcGF0dGVybikgewogIHJldHVybiBsaXN0SW5TY29wZShzdGFjaywgcGF0dGVybi5pbkNvbnN0cnVjdCwgdHJ1ZSkgJiYgIWxpc3RJblNjb3BlKHN0YWNrLCBwYXR0ZXJuLm5vdEluQ29uc3RydWN0LCBmYWxzZSk7Cn0KZnVuY3Rpb24gbGlzdEluU2NvcGUoc3RhY2ssIGxpc3Q1LCBub25lKSB7CiAgaWYgKHR5cGVvZiBsaXN0NSA9PT0gInN0cmluZyIpIHsKICAgIGxpc3Q1ID0gW2xpc3Q1XTsKICB9CiAgaWYgKCFsaXN0NSB8fCBsaXN0NS5sZW5ndGggPT09IDApIHsKICAgIHJldHVybiBub25lOwogIH0KICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgbGlzdDUubGVuZ3RoKSB7CiAgICBpZiAoc3RhY2suaW5jbHVkZXMobGlzdDVbaW5kZXgyXSkpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfQogIHJldHVybiBmYWxzZTsKfQp2YXIgaW5pdF9wYXR0ZXJuX2luX3Njb3BlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9wYXR0ZXJuLWluLXNjb3BlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9icmVhay5qcwpmdW5jdGlvbiBoYXJkQnJlYWsoXzQsIF8xLCBzdGF0ZTE0LCBpbmZvKSB7CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHN0YXRlMTQudW5zYWZlLmxlbmd0aCkgewogICAgaWYgKHN0YXRlMTQudW5zYWZlW2luZGV4Ml0uY2hhcmFjdGVyID09PSAiXG4iICYmIHBhdHRlcm5JblNjb3BlKHN0YXRlMTQuc3RhY2ssIHN0YXRlMTQudW5zYWZlW2luZGV4Ml0pKSB7CiAgICAgIHJldHVybiAvWyBcdF0vLnRlc3QoaW5mby5iZWZvcmUpID8gIiIgOiAiICI7CiAgICB9CiAgfQogIHJldHVybiAiXFxcbiI7Cn0KdmFyIGluaXRfYnJlYWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvYnJlYWsuanMiKCkgewogICAgaW5pdF9wYXR0ZXJuX2luX3Njb3BlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb25nZXN0LXN0cmVha0AzLjEuMC9ub2RlX21vZHVsZXMvbG9uZ2VzdC1zdHJlYWsvaW5kZXguanMKZnVuY3Rpb24gbG9uZ2VzdFN0cmVhayh2YWx1ZTIsIHN1YnN0cmluZykgewogIGNvbnN0IHNvdXJjZSA9IFN0cmluZyh2YWx1ZTIpOwogIGxldCBpbmRleDIgPSBzb3VyY2UuaW5kZXhPZihzdWJzdHJpbmcpOwogIGxldCBleHBlY3RlZCA9IGluZGV4MjsKICBsZXQgY291bnQyID0gMDsKICBsZXQgbWF4MyA9IDA7CiAgaWYgKHR5cGVvZiBzdWJzdHJpbmcgIT09ICJzdHJpbmciKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBzdWJzdHJpbmciKTsKICB9CiAgd2hpbGUgKGluZGV4MiAhPT0gLTEpIHsKICAgIGlmIChpbmRleDIgPT09IGV4cGVjdGVkKSB7CiAgICAgIGlmICgrK2NvdW50MiA+IG1heDMpIHsKICAgICAgICBtYXgzID0gY291bnQyOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb3VudDIgPSAxOwogICAgfQogICAgZXhwZWN0ZWQgPSBpbmRleDIgKyBzdWJzdHJpbmcubGVuZ3RoOwogICAgaW5kZXgyID0gc291cmNlLmluZGV4T2Yoc3Vic3RyaW5nLCBleHBlY3RlZCk7CiAgfQogIHJldHVybiBtYXgzOwp9CnZhciBpbml0X2xvbmdlc3Rfc3RyZWFrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbG9uZ2VzdC1zdHJlYWtAMy4xLjAvbm9kZV9tb2R1bGVzL2xvbmdlc3Qtc3RyZWFrL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvZm9ybWF0LWNvZGUtYXMtaW5kZW50ZWQuanMKZnVuY3Rpb24gZm9ybWF0Q29kZUFzSW5kZW50ZWQobm9kZTIsIHN0YXRlMTQpIHsKICByZXR1cm4gQm9vbGVhbigKICAgIHN0YXRlMTQub3B0aW9ucy5mZW5jZXMgPT09IGZhbHNlICYmIG5vZGUyLnZhbHVlICYmIC8vIElmIHRoZXJl4oCZcyBubyBpbmZv4oCmCiAgICAhbm9kZTIubGFuZyAmJiAvLyBBbmQgdGhlcmXigJlzIGEgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVy4oCmCiAgICAvW14gXHJcbl0vLnRlc3Qobm9kZTIudmFsdWUpICYmIC8vIEFuZCB0aGUgdmFsdWUgZG9lc27igJl0IHN0YXJ0IG9yIGVuZCBpbiBhIGJsYW5r4oCmCiAgICAhL15bXHQgXSooPzpbXHJcbl18JCl8KD86XnxbXHJcbl0pW1x0IF0qJC8udGVzdChub2RlMi52YWx1ZSkKICApOwp9CnZhciBpbml0X2Zvcm1hdF9jb2RlX2FzX2luZGVudGVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9mb3JtYXQtY29kZS1hcy1pbmRlbnRlZC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWZlbmNlLmpzCmZ1bmN0aW9uIGNoZWNrRmVuY2Uoc3RhdGUxNCkgewogIGNvbnN0IG1hcmtlciA9IHN0YXRlMTQub3B0aW9ucy5mZW5jZSB8fCAiYCI7CiAgaWYgKG1hcmtlciAhPT0gImAiICYmIG1hcmtlciAhPT0gIn4iKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3Qgc2VyaWFsaXplIGNvZGUgd2l0aCBgIiArIG1hcmtlciArICJgIGZvciBgb3B0aW9ucy5mZW5jZWAsIGV4cGVjdGVkIGBgIGAgYGAgb3IgYH5gIgogICAgKTsKICB9CiAgcmV0dXJuIG1hcmtlcjsKfQp2YXIgaW5pdF9jaGVja19mZW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stZmVuY2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2NvZGUuanMKZnVuY3Rpb24gY29kZShub2RlMiwgXzQsIHN0YXRlMTQsIGluZm8pIHsKICBjb25zdCBtYXJrZXIgPSBjaGVja0ZlbmNlKHN0YXRlMTQpOwogIGNvbnN0IHJhdzIgPSBub2RlMi52YWx1ZSB8fCAiIjsKICBjb25zdCBzdWZmaXggPSBtYXJrZXIgPT09ICJgIiA/ICJHcmF2ZUFjY2VudCIgOiAiVGlsZGUiOwogIGlmIChmb3JtYXRDb2RlQXNJbmRlbnRlZChub2RlMiwgc3RhdGUxNCkpIHsKICAgIGNvbnN0IGV4aXQ0ID0gc3RhdGUxNC5lbnRlcigiY29kZUluZGVudGVkIik7CiAgICBjb25zdCB2YWx1ZTMgPSBzdGF0ZTE0LmluZGVudExpbmVzKHJhdzIsIG1hcDUpOwogICAgZXhpdDQoKTsKICAgIHJldHVybiB2YWx1ZTM7CiAgfQogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTE0LmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgY29uc3Qgc2VxdWVuY2UgPSBtYXJrZXIucmVwZWF0KE1hdGgubWF4KGxvbmdlc3RTdHJlYWsocmF3MiwgbWFya2VyKSArIDEsIDMpKTsKICBjb25zdCBleGl0MyA9IHN0YXRlMTQuZW50ZXIoImNvZGVGZW5jZWQiKTsKICBsZXQgdmFsdWUyID0gdHJhY2tlci5tb3ZlKHNlcXVlbmNlKTsKICBpZiAobm9kZTIubGFuZykgewogICAgY29uc3Qgc3ViZXhpdCA9IHN0YXRlMTQuZW50ZXIoYGNvZGVGZW5jZWRMYW5nJHtzdWZmaXh9YCk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICBzdGF0ZTE0LnNhZmUobm9kZTIubGFuZywgewogICAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICAgIGFmdGVyOiAiICIsCiAgICAgICAgZW5jb2RlOiBbImAiXSwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICAgIHN1YmV4aXQoKTsKICB9CiAgaWYgKG5vZGUyLmxhbmcgJiYgbm9kZTIubWV0YSkgewogICAgY29uc3Qgc3ViZXhpdCA9IHN0YXRlMTQuZW50ZXIoYGNvZGVGZW5jZWRNZXRhJHtzdWZmaXh9YCk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCIgIik7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICBzdGF0ZTE0LnNhZmUobm9kZTIubWV0YSwgewogICAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICAgIGFmdGVyOiAiXG4iLAogICAgICAgIGVuY29kZTogWyJgIl0sCiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgICAgfSkKICAgICk7CiAgICBzdWJleGl0KCk7CiAgfQogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIlxuIik7CiAgaWYgKHJhdzIpIHsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUocmF3MiArICJcbiIpOwogIH0KICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKHNlcXVlbmNlKTsKICBleGl0MygpOwogIHJldHVybiB2YWx1ZTI7Cn0KZnVuY3Rpb24gbWFwNShsaW5lLCBfNCwgYmxhbmspIHsKICByZXR1cm4gKGJsYW5rID8gIiIgOiAiICAgICIpICsgbGluZTsKfQp2YXIgaW5pdF9jb2RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2NvZGUuanMiKCkgewogICAgaW5pdF9sb25nZXN0X3N0cmVhaygpOwogICAgaW5pdF9mb3JtYXRfY29kZV9hc19pbmRlbnRlZCgpOwogICAgaW5pdF9jaGVja19mZW5jZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1xdW90ZS5qcwpmdW5jdGlvbiBjaGVja1F1b3RlKHN0YXRlMTQpIHsKICBjb25zdCBtYXJrZXIgPSBzdGF0ZTE0Lm9wdGlvbnMucXVvdGUgfHwgJyInOwogIGlmIChtYXJrZXIgIT09ICciJyAmJiBtYXJrZXIgIT09ICInIikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiQ2Fubm90IHNlcmlhbGl6ZSB0aXRsZSB3aXRoIGAiICsgbWFya2VyICsgImAgZm9yIGBvcHRpb25zLnF1b3RlYCwgZXhwZWN0ZWQgYFwiYCwgb3IgYCdgIgogICAgKTsKICB9CiAgcmV0dXJuIG1hcmtlcjsKfQp2YXIgaW5pdF9jaGVja19xdW90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stcXVvdGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2RlZmluaXRpb24uanMKZnVuY3Rpb24gZGVmaW5pdGlvbihub2RlMiwgXzQsIHN0YXRlMTQsIGluZm8pIHsKICBjb25zdCBxdW90ZSA9IGNoZWNrUXVvdGUoc3RhdGUxNCk7CiAgY29uc3Qgc3VmZml4ID0gcXVvdGUgPT09ICciJyA/ICJRdW90ZSIgOiAiQXBvc3Ryb3BoZSI7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTE0LmVudGVyKCJkZWZpbml0aW9uIik7CiAgbGV0IHN1YmV4aXQgPSBzdGF0ZTE0LmVudGVyKCJsYWJlbCIpOwogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTE0LmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgbGV0IHZhbHVlMiA9IHRyYWNrZXIubW92ZSgiWyIpOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICBzdGF0ZTE0LnNhZmUoc3RhdGUxNC5hc3NvY2lhdGlvbklkKG5vZGUyKSwgewogICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgYWZ0ZXI6ICJdIiwKICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgIH0pCiAgKTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJdOiAiKTsKICBzdWJleGl0KCk7CiAgaWYgKAogICAgLy8gSWYgdGhlcmXigJlzIG5vIHVybCwgb3LigKYKICAgICFub2RlMi51cmwgfHwgLy8gSWYgdGhlcmUgYXJlIGNvbnRyb2wgY2hhcmFjdGVycyBvciB3aGl0ZXNwYWNlLgogICAgL1tcMC0gXHUwMDdGXS8udGVzdChub2RlMi51cmwpCiAgKSB7CiAgICBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigiZGVzdGluYXRpb25MaXRlcmFsIik7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCI8Iik7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICBzdGF0ZTE0LnNhZmUobm9kZTIudXJsLCB7IGJlZm9yZTogdmFsdWUyLCBhZnRlcjogIj4iLCAuLi50cmFja2VyLmN1cnJlbnQoKSB9KQogICAgKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIj4iKTsKICB9IGVsc2UgewogICAgc3ViZXhpdCA9IHN0YXRlMTQuZW50ZXIoImRlc3RpbmF0aW9uUmF3Iik7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICBzdGF0ZTE0LnNhZmUobm9kZTIudXJsLCB7CiAgICAgICAgYmVmb3JlOiB2YWx1ZTIsCiAgICAgICAgYWZ0ZXI6IG5vZGUyLnRpdGxlID8gIiAiIDogIlxuIiwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICB9CiAgc3ViZXhpdCgpOwogIGlmIChub2RlMi50aXRsZSkgewogICAgc3ViZXhpdCA9IHN0YXRlMTQuZW50ZXIoYHRpdGxlJHtzdWZmaXh9YCk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCIgIiArIHF1b3RlKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTQuc2FmZShub2RlMi50aXRsZSwgewogICAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICAgIGFmdGVyOiBxdW90ZSwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUocXVvdGUpOwogICAgc3ViZXhpdCgpOwogIH0KICBleGl0MygpOwogIHJldHVybiB2YWx1ZTI7Cn0KdmFyIGluaXRfZGVmaW5pdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9kZWZpbml0aW9uLmpzIigpIHsKICAgIGluaXRfY2hlY2tfcXVvdGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stZW1waGFzaXMuanMKZnVuY3Rpb24gY2hlY2tFbXBoYXNpcyhzdGF0ZTE0KSB7CiAgY29uc3QgbWFya2VyID0gc3RhdGUxNC5vcHRpb25zLmVtcGhhc2lzIHx8ICIqIjsKICBpZiAobWFya2VyICE9PSAiKiIgJiYgbWFya2VyICE9PSAiXyIpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgZW1waGFzaXMgd2l0aCBgIiArIG1hcmtlciArICJgIGZvciBgb3B0aW9ucy5lbXBoYXNpc2AsIGV4cGVjdGVkIGAqYCwgb3IgYF9gIgogICAgKTsKICB9CiAgcmV0dXJuIG1hcmtlcjsKfQp2YXIgaW5pdF9jaGVja19lbXBoYXNpcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stZW1waGFzaXMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9lbmNvZGUtY2hhcmFjdGVyLXJlZmVyZW5jZS5qcwpmdW5jdGlvbiBlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UoY29kZTQpIHsKICByZXR1cm4gIiYjeCIgKyBjb2RlNC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArICI7IjsKfQp2YXIgaW5pdF9lbmNvZGVfY2hhcmFjdGVyX3JlZmVyZW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvZW5jb2RlLWNoYXJhY3Rlci1yZWZlcmVuY2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtY2xhc3NpZnktY2hhcmFjdGVyQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jbGFzc2lmeS1jaGFyYWN0ZXIvaW5kZXguanMKZnVuY3Rpb24gY2xhc3NpZnlDaGFyYWN0ZXIoY29kZTQpIHsKICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgfHwgdW5pY29kZVdoaXRlc3BhY2UoY29kZTQpKSB7CiAgICByZXR1cm4gMTsKICB9CiAgaWYgKHVuaWNvZGVQdW5jdHVhdGlvbihjb2RlNCkpIHsKICAgIHJldHVybiAyOwogIH0KfQp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9jbGFzc2lmeV9jaGFyYWN0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1jbGFzc2lmeS1jaGFyYWN0ZXJAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNsYXNzaWZ5LWNoYXJhY3Rlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9lbmNvZGUtaW5mby5qcwpmdW5jdGlvbiBlbmNvZGVJbmZvKG91dHNpZGUsIGluc2lkZSwgbWFya2VyKSB7CiAgY29uc3Qgb3V0c2lkZUtpbmQgPSBjbGFzc2lmeUNoYXJhY3RlcihvdXRzaWRlKTsKICBjb25zdCBpbnNpZGVLaW5kID0gY2xhc3NpZnlDaGFyYWN0ZXIoaW5zaWRlKTsKICBpZiAob3V0c2lkZUtpbmQgPT09IHZvaWQgMCkgewogICAgcmV0dXJuIGluc2lkZUtpbmQgPT09IHZvaWQgMCA/ICgKICAgICAgLy8gTGV0dGVyIGluc2lkZToKICAgICAgLy8gd2UgaGF2ZSB0byBlbmNvZGUgKmJvdGgqIGxldHRlcnMgZm9yIGBfYCBhcyBpdCBpcyBsb29zZXIuCiAgICAgIC8vIGl0IGFscmVhZHkgZm9ybXMgZm9yIGAqYCAoYW5kIEdGTXMgYH5gKS4KICAgICAgbWFya2VyID09PSAiXyIgPyB7IGluc2lkZTogdHJ1ZSwgb3V0c2lkZTogdHJ1ZSB9IDogeyBpbnNpZGU6IGZhbHNlLCBvdXRzaWRlOiBmYWxzZSB9CiAgICApIDogaW5zaWRlS2luZCA9PT0gMSA/ICgKICAgICAgLy8gV2hpdGVzcGFjZSBpbnNpZGU6IGVuY29kZSBib3RoIChsZXR0ZXIsIHdoaXRlc3BhY2UpLgogICAgICB7IGluc2lkZTogdHJ1ZSwgb3V0c2lkZTogdHJ1ZSB9CiAgICApIDogKAogICAgICAvLyBQdW5jdHVhdGlvbiBpbnNpZGU6IGVuY29kZSBvdXRlciAobGV0dGVyKQogICAgICB7IGluc2lkZTogZmFsc2UsIG91dHNpZGU6IHRydWUgfQogICAgKTsKICB9CiAgaWYgKG91dHNpZGVLaW5kID09PSAxKSB7CiAgICByZXR1cm4gaW5zaWRlS2luZCA9PT0gdm9pZCAwID8gKAogICAgICAvLyBMZXR0ZXIgaW5zaWRlOiBhbHJlYWR5IGZvcm1zLgogICAgICB7IGluc2lkZTogZmFsc2UsIG91dHNpZGU6IGZhbHNlIH0KICAgICkgOiBpbnNpZGVLaW5kID09PSAxID8gKAogICAgICAvLyBXaGl0ZXNwYWNlIGluc2lkZTogZW5jb2RlIGJvdGggKHdoaXRlc3BhY2UpLgogICAgICB7IGluc2lkZTogdHJ1ZSwgb3V0c2lkZTogdHJ1ZSB9CiAgICApIDogKAogICAgICAvLyBQdW5jdHVhdGlvbiBpbnNpZGU6IGFscmVhZHkgZm9ybXMuCiAgICAgIHsgaW5zaWRlOiBmYWxzZSwgb3V0c2lkZTogZmFsc2UgfQogICAgKTsKICB9CiAgcmV0dXJuIGluc2lkZUtpbmQgPT09IHZvaWQgMCA/ICgKICAgIC8vIExldHRlciBpbnNpZGU6IGFscmVhZHkgZm9ybXMuCiAgICB7IGluc2lkZTogZmFsc2UsIG91dHNpZGU6IGZhbHNlIH0KICApIDogaW5zaWRlS2luZCA9PT0gMSA/ICgKICAgIC8vIFdoaXRlc3BhY2UgaW5zaWRlOiBlbmNvZGUgaW5uZXIgKHdoaXRlc3BhY2UpLgogICAgeyBpbnNpZGU6IHRydWUsIG91dHNpZGU6IGZhbHNlIH0KICApIDogKAogICAgLy8gUHVuY3R1YXRpb24gaW5zaWRlOiBhbHJlYWR5IGZvcm1zLgogICAgeyBpbnNpZGU6IGZhbHNlLCBvdXRzaWRlOiBmYWxzZSB9CiAgKTsKfQp2YXIgaW5pdF9lbmNvZGVfaW5mbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvZW5jb2RlLWluZm8uanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jbGFzc2lmeV9jaGFyYWN0ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9lbXBoYXNpcy5qcwpmdW5jdGlvbiBlbXBoYXNpcyhub2RlMiwgXzQsIHN0YXRlMTQsIGluZm8pIHsKICBjb25zdCBtYXJrZXIgPSBjaGVja0VtcGhhc2lzKHN0YXRlMTQpOwogIGNvbnN0IGV4aXQzID0gc3RhdGUxNC5lbnRlcigiZW1waGFzaXMiKTsKICBjb25zdCB0cmFja2VyID0gc3RhdGUxNC5jcmVhdGVUcmFja2VyKGluZm8pOwogIGNvbnN0IGJlZm9yZSA9IHRyYWNrZXIubW92ZShtYXJrZXIpOwogIGxldCBiZXR3ZWVuMiA9IHRyYWNrZXIubW92ZSgKICAgIHN0YXRlMTQuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIHsKICAgICAgYWZ0ZXI6IG1hcmtlciwKICAgICAgYmVmb3JlLAogICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgfSkKICApOwogIGNvbnN0IGJldHdlZW5IZWFkID0gYmV0d2VlbjIuY2hhckNvZGVBdCgwKTsKICBjb25zdCBvcGVuID0gZW5jb2RlSW5mbygKICAgIGluZm8uYmVmb3JlLmNoYXJDb2RlQXQoaW5mby5iZWZvcmUubGVuZ3RoIC0gMSksCiAgICBiZXR3ZWVuSGVhZCwKICAgIG1hcmtlcgogICk7CiAgaWYgKG9wZW4uaW5zaWRlKSB7CiAgICBiZXR3ZWVuMiA9IGVuY29kZUNoYXJhY3RlclJlZmVyZW5jZShiZXR3ZWVuSGVhZCkgKyBiZXR3ZWVuMi5zbGljZSgxKTsKICB9CiAgY29uc3QgYmV0d2VlblRhaWwgPSBiZXR3ZWVuMi5jaGFyQ29kZUF0KGJldHdlZW4yLmxlbmd0aCAtIDEpOwogIGNvbnN0IGNsb3NlNyA9IGVuY29kZUluZm8oaW5mby5hZnRlci5jaGFyQ29kZUF0KDApLCBiZXR3ZWVuVGFpbCwgbWFya2VyKTsKICBpZiAoY2xvc2U3Lmluc2lkZSkgewogICAgYmV0d2VlbjIgPSBiZXR3ZWVuMi5zbGljZSgwLCAtMSkgKyBlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UoYmV0d2VlblRhaWwpOwogIH0KICBjb25zdCBhZnRlciA9IHRyYWNrZXIubW92ZShtYXJrZXIpOwogIGV4aXQzKCk7CiAgc3RhdGUxNC5hdHRlbnRpb25FbmNvZGVTdXJyb3VuZGluZ0luZm8gPSB7CiAgICBhZnRlcjogY2xvc2U3Lm91dHNpZGUsCiAgICBiZWZvcmU6IG9wZW4ub3V0c2lkZQogIH07CiAgcmV0dXJuIGJlZm9yZSArIGJldHdlZW4yICsgYWZ0ZXI7Cn0KZnVuY3Rpb24gZW1waGFzaXNQZWVrKF80LCBfMSwgc3RhdGUxNCkgewogIHJldHVybiBzdGF0ZTE0Lm9wdGlvbnMuZW1waGFzaXMgfHwgIioiOwp9CnZhciBpbml0X2VtcGhhc2lzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2VtcGhhc2lzLmpzIigpIHsKICAgIGluaXRfY2hlY2tfZW1waGFzaXMoKTsKICAgIGluaXRfZW5jb2RlX2NoYXJhY3Rlcl9yZWZlcmVuY2UoKTsKICAgIGluaXRfZW5jb2RlX2luZm8oKTsKICAgIGVtcGhhc2lzLnBlZWsgPSBlbXBoYXNpc1BlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXZpc2l0QDUuMS4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0L2xpYi9pbmRleC5qcwpmdW5jdGlvbiB2aXNpdCh0cmVlLCB0ZXN0T3JWaXNpdG9yLCB2aXNpdG9yT3JSZXZlcnNlLCBtYXliZVJldmVyc2UpIHsKICBsZXQgcmV2ZXJzZTsKICBsZXQgdGVzdDsKICBsZXQgdmlzaXRvcjsKICBpZiAodHlwZW9mIHRlc3RPclZpc2l0b3IgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIHZpc2l0b3JPclJldmVyc2UgIT09ICJmdW5jdGlvbiIpIHsKICAgIHRlc3QgPSB2b2lkIDA7CiAgICB2aXNpdG9yID0gdGVzdE9yVmlzaXRvcjsKICAgIHJldmVyc2UgPSB2aXNpdG9yT3JSZXZlcnNlOwogIH0gZWxzZSB7CiAgICB0ZXN0ID0gdGVzdE9yVmlzaXRvcjsKICAgIHZpc2l0b3IgPSB2aXNpdG9yT3JSZXZlcnNlOwogICAgcmV2ZXJzZSA9IG1heWJlUmV2ZXJzZTsKICB9CiAgdmlzaXRQYXJlbnRzKHRyZWUsIHRlc3QsIG92ZXJsb2FkLCByZXZlcnNlKTsKICBmdW5jdGlvbiBvdmVybG9hZChub2RlMiwgcGFyZW50cykgewogICAgY29uc3QgcGFyZW50ID0gcGFyZW50c1twYXJlbnRzLmxlbmd0aCAtIDFdOwogICAgY29uc3QgaW5kZXgyID0gcGFyZW50ID8gcGFyZW50LmNoaWxkcmVuLmluZGV4T2Yobm9kZTIpIDogdm9pZCAwOwogICAgcmV0dXJuIHZpc2l0b3Iobm9kZTIsIGluZGV4MiwgcGFyZW50KTsKICB9Cn0KdmFyIGluaXRfbGliMTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXZpc2l0QDUuMS4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0L2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X3VuaXN0X3V0aWxfdmlzaXRfcGFyZW50cygpOwogICAgaW5pdF91bmlzdF91dGlsX3Zpc2l0X3BhcmVudHMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXRANS4xLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQvaW5kZXguanMKdmFyIGluaXRfdW5pc3RfdXRpbF92aXNpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXRANS4xLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1zdHJpbmdANC4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tc3RyaW5nL2xpYi9pbmRleC5qcwpmdW5jdGlvbiB0b1N0cmluZyh2YWx1ZTIsIG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwgZW1wdHlPcHRpb25zOwogIGNvbnN0IGluY2x1ZGVJbWFnZUFsdCA9IHR5cGVvZiBzZXR0aW5ncy5pbmNsdWRlSW1hZ2VBbHQgPT09ICJib29sZWFuIiA/IHNldHRpbmdzLmluY2x1ZGVJbWFnZUFsdCA6IHRydWU7CiAgY29uc3QgaW5jbHVkZUh0bWwgPSB0eXBlb2Ygc2V0dGluZ3MuaW5jbHVkZUh0bWwgPT09ICJib29sZWFuIiA/IHNldHRpbmdzLmluY2x1ZGVIdG1sIDogdHJ1ZTsKICByZXR1cm4gb25lKHZhbHVlMiwgaW5jbHVkZUltYWdlQWx0LCBpbmNsdWRlSHRtbCk7Cn0KZnVuY3Rpb24gb25lKHZhbHVlMiwgaW5jbHVkZUltYWdlQWx0LCBpbmNsdWRlSHRtbCkgewogIGlmIChub2RlKHZhbHVlMikpIHsKICAgIGlmICgidmFsdWUiIGluIHZhbHVlMikgewogICAgICByZXR1cm4gdmFsdWUyLnR5cGUgPT09ICJodG1sIiAmJiAhaW5jbHVkZUh0bWwgPyAiIiA6IHZhbHVlMi52YWx1ZTsKICAgIH0KICAgIGlmIChpbmNsdWRlSW1hZ2VBbHQgJiYgImFsdCIgaW4gdmFsdWUyICYmIHZhbHVlMi5hbHQpIHsKICAgICAgcmV0dXJuIHZhbHVlMi5hbHQ7CiAgICB9CiAgICBpZiAoImNoaWxkcmVuIiBpbiB2YWx1ZTIpIHsKICAgICAgcmV0dXJuIGFsbCh2YWx1ZTIuY2hpbGRyZW4sIGluY2x1ZGVJbWFnZUFsdCwgaW5jbHVkZUh0bWwpOwogICAgfQogIH0KICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7CiAgICByZXR1cm4gYWxsKHZhbHVlMiwgaW5jbHVkZUltYWdlQWx0LCBpbmNsdWRlSHRtbCk7CiAgfQogIHJldHVybiAiIjsKfQpmdW5jdGlvbiBhbGwodmFsdWVzLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKSB7CiAgY29uc3QgcmVzdWx0ID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHZhbHVlcy5sZW5ndGgpIHsKICAgIHJlc3VsdFtpbmRleDJdID0gb25lKHZhbHVlc1tpbmRleDJdLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKTsKICB9CiAgcmV0dXJuIHJlc3VsdC5qb2luKCIiKTsKfQpmdW5jdGlvbiBub2RlKHZhbHVlMikgewogIHJldHVybiBCb29sZWFuKHZhbHVlMiAmJiB0eXBlb2YgdmFsdWUyID09PSAib2JqZWN0Iik7Cn0KdmFyIGVtcHR5T3B0aW9uczsKdmFyIGluaXRfbGliMTMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLXN0cmluZ0A0LjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1zdHJpbmcvbGliL2luZGV4LmpzIigpIHsKICAgIGVtcHR5T3B0aW9ucyA9IHt9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1zdHJpbmdANC4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tc3RyaW5nL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfdG9fc3RyaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1zdHJpbmdANC4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tc3RyaW5nL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMTMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvZm9ybWF0LWhlYWRpbmctYXMtc2V0ZXh0LmpzCmZ1bmN0aW9uIGZvcm1hdEhlYWRpbmdBc1NldGV4dChub2RlMiwgc3RhdGUxNCkgewogIGxldCBsaXRlcmFsV2l0aEJyZWFrID0gZmFsc2U7CiAgdmlzaXQobm9kZTIsIGZ1bmN0aW9uKG5vZGUzKSB7CiAgICBpZiAoInZhbHVlIiBpbiBub2RlMyAmJiAvXHI/XG58XHIvLnRlc3Qobm9kZTMudmFsdWUpIHx8IG5vZGUzLnR5cGUgPT09ICJicmVhayIpIHsKICAgICAgbGl0ZXJhbFdpdGhCcmVhayA9IHRydWU7CiAgICAgIHJldHVybiBFWElUOwogICAgfQogIH0pOwogIHJldHVybiBCb29sZWFuKAogICAgKCFub2RlMi5kZXB0aCB8fCBub2RlMi5kZXB0aCA8IDMpICYmIHRvU3RyaW5nKG5vZGUyKSAmJiAoc3RhdGUxNC5vcHRpb25zLnNldGV4dCB8fCBsaXRlcmFsV2l0aEJyZWFrKQogICk7Cn0KdmFyIGluaXRfZm9ybWF0X2hlYWRpbmdfYXNfc2V0ZXh0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9mb3JtYXQtaGVhZGluZy1hcy1zZXRleHQuanMiKCkgewogICAgaW5pdF91bmlzdF91dGlsX3Zpc2l0KCk7CiAgICBpbml0X21kYXN0X3V0aWxfdG9fc3RyaW5nKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaGVhZGluZy5qcwpmdW5jdGlvbiBoZWFkaW5nKG5vZGUyLCBfNCwgc3RhdGUxNCwgaW5mbykgewogIGNvbnN0IHJhbmsgPSBNYXRoLm1heChNYXRoLm1pbig2LCBub2RlMi5kZXB0aCB8fCAxKSwgMSk7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTQuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBpZiAoZm9ybWF0SGVhZGluZ0FzU2V0ZXh0KG5vZGUyLCBzdGF0ZTE0KSkgewogICAgY29uc3QgZXhpdDQgPSBzdGF0ZTE0LmVudGVyKCJoZWFkaW5nU2V0ZXh0Iik7CiAgICBjb25zdCBzdWJleGl0MiA9IHN0YXRlMTQuZW50ZXIoInBocmFzaW5nIik7CiAgICBjb25zdCB2YWx1ZTMgPSBzdGF0ZTE0LmNvbnRhaW5lclBocmFzaW5nKG5vZGUyLCB7CiAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpLAogICAgICBiZWZvcmU6ICJcbiIsCiAgICAgIGFmdGVyOiAiXG4iCiAgICB9KTsKICAgIHN1YmV4aXQyKCk7CiAgICBleGl0NCgpOwogICAgcmV0dXJuIHZhbHVlMyArICJcbiIgKyAocmFuayA9PT0gMSA/ICI9IiA6ICItIikucmVwZWF0KAogICAgICAvLyBUaGUgd2hvbGUgc2l6ZeKApgogICAgICB2YWx1ZTMubGVuZ3RoIC0gLy8gTWludXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGxhc3QgRU9MIChvcgogICAgICAvLyAwIGlmIHRoZXJlIGlzIG5vbmUp4oCmCiAgICAgIChNYXRoLm1heCh2YWx1ZTMubGFzdEluZGV4T2YoIlxyIiksIHZhbHVlMy5sYXN0SW5kZXhPZigiXG4iKSkgKyAxKQogICAgKTsKICB9CiAgY29uc3Qgc2VxdWVuY2UgPSAiIyIucmVwZWF0KHJhbmspOwogIGNvbnN0IGV4aXQzID0gc3RhdGUxNC5lbnRlcigiaGVhZGluZ0F0eCIpOwogIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZTE0LmVudGVyKCJwaHJhc2luZyIpOwogIHRyYWNrZXIubW92ZShzZXF1ZW5jZSArICIgIik7CiAgbGV0IHZhbHVlMiA9IHN0YXRlMTQuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIHsKICAgIGJlZm9yZTogIiMgIiwKICAgIGFmdGVyOiAiXG4iLAogICAgLi4udHJhY2tlci5jdXJyZW50KCkKICB9KTsKICBpZiAoL15bXHQgXS8udGVzdCh2YWx1ZTIpKSB7CiAgICB2YWx1ZTIgPSBlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UodmFsdWUyLmNoYXJDb2RlQXQoMCkpICsgdmFsdWUyLnNsaWNlKDEpOwogIH0KICB2YWx1ZTIgPSB2YWx1ZTIgPyBzZXF1ZW5jZSArICIgIiArIHZhbHVlMiA6IHNlcXVlbmNlOwogIGlmIChzdGF0ZTE0Lm9wdGlvbnMuY2xvc2VBdHgpIHsKICAgIHZhbHVlMiArPSAiICIgKyBzZXF1ZW5jZTsKICB9CiAgc3ViZXhpdCgpOwogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKfQp2YXIgaW5pdF9oZWFkaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2hlYWRpbmcuanMiKCkgewogICAgaW5pdF9lbmNvZGVfY2hhcmFjdGVyX3JlZmVyZW5jZSgpOwogICAgaW5pdF9mb3JtYXRfaGVhZGluZ19hc19zZXRleHQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9odG1sLmpzCmZ1bmN0aW9uIGh0bWwobm9kZTIpIHsKICByZXR1cm4gbm9kZTIudmFsdWUgfHwgIiI7Cn0KZnVuY3Rpb24gaHRtbFBlZWsoKSB7CiAgcmV0dXJuICI8IjsKfQp2YXIgaW5pdF9odG1sID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2h0bWwuanMiKCkgewogICAgaHRtbC5wZWVrID0gaHRtbFBlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaW1hZ2UuanMKZnVuY3Rpb24gaW1hZ2Uobm9kZTIsIF80LCBzdGF0ZTE0LCBpbmZvKSB7CiAgY29uc3QgcXVvdGUgPSBjaGVja1F1b3RlKHN0YXRlMTQpOwogIGNvbnN0IHN1ZmZpeCA9IHF1b3RlID09PSAnIicgPyAiUXVvdGUiIDogIkFwb3N0cm9waGUiOwogIGNvbnN0IGV4aXQzID0gc3RhdGUxNC5lbnRlcigiaW1hZ2UiKTsKICBsZXQgc3ViZXhpdCA9IHN0YXRlMTQuZW50ZXIoImxhYmVsIik7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTQuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBsZXQgdmFsdWUyID0gdHJhY2tlci5tb3ZlKCIhWyIpOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICBzdGF0ZTE0LnNhZmUobm9kZTIuYWx0LCB7IGJlZm9yZTogdmFsdWUyLCBhZnRlcjogIl0iLCAuLi50cmFja2VyLmN1cnJlbnQoKSB9KQogICk7CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiXSgiKTsKICBzdWJleGl0KCk7CiAgaWYgKAogICAgLy8gSWYgdGhlcmXigJlzIG5vIHVybCBidXQgdGhlcmUgaXMgYSB0aXRsZeKApgogICAgIW5vZGUyLnVybCAmJiBub2RlMi50aXRsZSB8fCAvLyBJZiB0aGVyZSBhcmUgY29udHJvbCBjaGFyYWN0ZXJzIG9yIHdoaXRlc3BhY2UuCiAgICAvW1wwLSBcdTAwN0ZdLy50ZXN0KG5vZGUyLnVybCkKICApIHsKICAgIHN1YmV4aXQgPSBzdGF0ZTE0LmVudGVyKCJkZXN0aW5hdGlvbkxpdGVyYWwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIjwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTQuc2FmZShub2RlMi51cmwsIHsgYmVmb3JlOiB2YWx1ZTIsIGFmdGVyOiAiPiIsIC4uLnRyYWNrZXIuY3VycmVudCgpIH0pCiAgICApOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiPiIpOwogIH0gZWxzZSB7CiAgICBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigiZGVzdGluYXRpb25SYXciKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTQuc2FmZShub2RlMi51cmwsIHsKICAgICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgICBhZnRlcjogbm9kZTIudGl0bGUgPyAiICIgOiAiKSIsCiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgICAgfSkKICAgICk7CiAgfQogIHN1YmV4aXQoKTsKICBpZiAobm9kZTIudGl0bGUpIHsKICAgIHN1YmV4aXQgPSBzdGF0ZTE0LmVudGVyKGB0aXRsZSR7c3VmZml4fWApOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiICIgKyBxdW90ZSk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICBzdGF0ZTE0LnNhZmUobm9kZTIudGl0bGUsIHsKICAgICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgICBhZnRlcjogcXVvdGUsCiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgICAgfSkKICAgICk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKHF1b3RlKTsKICAgIHN1YmV4aXQoKTsKICB9CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiKSIpOwogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBpbWFnZVBlZWsoKSB7CiAgcmV0dXJuICIhIjsKfQp2YXIgaW5pdF9pbWFnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbWFnZS5qcyIoKSB7CiAgICBpbml0X2NoZWNrX3F1b3RlKCk7CiAgICBpbWFnZS5wZWVrID0gaW1hZ2VQZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2ltYWdlLXJlZmVyZW5jZS5qcwpmdW5jdGlvbiBpbWFnZVJlZmVyZW5jZShub2RlMiwgXzQsIHN0YXRlMTQsIGluZm8pIHsKICBjb25zdCB0eXBlNSA9IG5vZGUyLnJlZmVyZW5jZVR5cGU7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTE0LmVudGVyKCJpbWFnZVJlZmVyZW5jZSIpOwogIGxldCBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigibGFiZWwiKTsKICBjb25zdCB0cmFja2VyID0gc3RhdGUxNC5jcmVhdGVUcmFja2VyKGluZm8pOwogIGxldCB2YWx1ZTIgPSB0cmFja2VyLm1vdmUoIiFbIik7CiAgY29uc3QgYWx0ID0gc3RhdGUxNC5zYWZlKG5vZGUyLmFsdCwgewogICAgYmVmb3JlOiB2YWx1ZTIsCiAgICBhZnRlcjogIl0iLAogICAgLi4udHJhY2tlci5jdXJyZW50KCkKICB9KTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKGFsdCArICJdWyIpOwogIHN1YmV4aXQoKTsKICBjb25zdCBzdGFjayA9IHN0YXRlMTQuc3RhY2s7CiAgc3RhdGUxNC5zdGFjayA9IFtdOwogIHN1YmV4aXQgPSBzdGF0ZTE0LmVudGVyKCJyZWZlcmVuY2UiKTsKICBjb25zdCByZWZlcmVuY2UgPSBzdGF0ZTE0LnNhZmUoc3RhdGUxNC5hc3NvY2lhdGlvbklkKG5vZGUyKSwgewogICAgYmVmb3JlOiB2YWx1ZTIsCiAgICBhZnRlcjogIl0iLAogICAgLi4udHJhY2tlci5jdXJyZW50KCkKICB9KTsKICBzdWJleGl0KCk7CiAgc3RhdGUxNC5zdGFjayA9IHN0YWNrOwogIGV4aXQzKCk7CiAgaWYgKHR5cGU1ID09PSAiZnVsbCIgfHwgIWFsdCB8fCBhbHQgIT09IHJlZmVyZW5jZSkgewogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZShyZWZlcmVuY2UgKyAiXSIpOwogIH0gZWxzZSBpZiAodHlwZTUgPT09ICJzaG9ydGN1dCIpIHsKICAgIHZhbHVlMiA9IHZhbHVlMi5zbGljZSgwLCAtMSk7CiAgfSBlbHNlIHsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIl0iKTsKICB9CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBpbWFnZVJlZmVyZW5jZVBlZWsoKSB7CiAgcmV0dXJuICIhIjsKfQp2YXIgaW5pdF9pbWFnZV9yZWZlcmVuY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaW1hZ2UtcmVmZXJlbmNlLmpzIigpIHsKICAgIGltYWdlUmVmZXJlbmNlLnBlZWsgPSBpbWFnZVJlZmVyZW5jZVBlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaW5saW5lLWNvZGUuanMKZnVuY3Rpb24gaW5saW5lQ29kZShub2RlMiwgXzQsIHN0YXRlMTQpIHsKICBsZXQgdmFsdWUyID0gbm9kZTIudmFsdWUgfHwgIiI7CiAgbGV0IHNlcXVlbmNlID0gImAiOwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAobmV3IFJlZ0V4cCgiKF58W15gXSkiICsgc2VxdWVuY2UgKyAiKFteYF18JCkiKS50ZXN0KHZhbHVlMikpIHsKICAgIHNlcXVlbmNlICs9ICJgIjsKICB9CiAgaWYgKC9bXiBcclxuXS8udGVzdCh2YWx1ZTIpICYmICgvXlsgXHJcbl0vLnRlc3QodmFsdWUyKSAmJiAvWyBcclxuXSQvLnRlc3QodmFsdWUyKSB8fCAvXmB8YCQvLnRlc3QodmFsdWUyKSkpIHsKICAgIHZhbHVlMiA9ICIgIiArIHZhbHVlMiArICIgIjsKICB9CiAgd2hpbGUgKCsraW5kZXgyIDwgc3RhdGUxNC51bnNhZmUubGVuZ3RoKSB7CiAgICBjb25zdCBwYXR0ZXJuID0gc3RhdGUxNC51bnNhZmVbaW5kZXgyXTsKICAgIGNvbnN0IGV4cHJlc3Npb24gPSBzdGF0ZTE0LmNvbXBpbGVQYXR0ZXJuKHBhdHRlcm4pOwogICAgbGV0IG1hdGNoMjsKICAgIGlmICghcGF0dGVybi5hdEJyZWFrKSBjb250aW51ZTsKICAgIHdoaWxlIChtYXRjaDIgPSBleHByZXNzaW9uLmV4ZWModmFsdWUyKSkgewogICAgICBsZXQgcG9zaXRpb24zID0gbWF0Y2gyLmluZGV4OwogICAgICBpZiAodmFsdWUyLmNoYXJDb2RlQXQocG9zaXRpb24zKSA9PT0gMTAgJiYgdmFsdWUyLmNoYXJDb2RlQXQocG9zaXRpb24zIC0gMSkgPT09IDEzKSB7CiAgICAgICAgcG9zaXRpb24zLS07CiAgICAgIH0KICAgICAgdmFsdWUyID0gdmFsdWUyLnNsaWNlKDAsIHBvc2l0aW9uMykgKyAiICIgKyB2YWx1ZTIuc2xpY2UobWF0Y2gyLmluZGV4ICsgMSk7CiAgICB9CiAgfQogIHJldHVybiBzZXF1ZW5jZSArIHZhbHVlMiArIHNlcXVlbmNlOwp9CmZ1bmN0aW9uIGlubGluZUNvZGVQZWVrKCkgewogIHJldHVybiAiYCI7Cn0KdmFyIGluaXRfaW5saW5lX2NvZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaW5saW5lLWNvZGUuanMiKCkgewogICAgaW5saW5lQ29kZS5wZWVrID0gaW5saW5lQ29kZVBlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2Zvcm1hdC1saW5rLWFzLWF1dG9saW5rLmpzCmZ1bmN0aW9uIGZvcm1hdExpbmtBc0F1dG9saW5rKG5vZGUyLCBzdGF0ZTE0KSB7CiAgY29uc3QgcmF3MiA9IHRvU3RyaW5nKG5vZGUyKTsKICByZXR1cm4gQm9vbGVhbigKICAgICFzdGF0ZTE0Lm9wdGlvbnMucmVzb3VyY2VMaW5rICYmIC8vIElmIHRoZXJl4oCZcyBhIHVybOKApgogICAgbm9kZTIudXJsICYmIC8vIEFuZCB0aGVyZeKAmXMgYSBubyB0aXRsZeKApgogICAgIW5vZGUyLnRpdGxlICYmIC8vIEFuZCB0aGUgY29udGVudCBvZiBgbm9kZWAgaXMgYSBzaW5nbGUgdGV4dCBub2Rl4oCmCiAgICBub2RlMi5jaGlsZHJlbiAmJiBub2RlMi5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgbm9kZTIuY2hpbGRyZW5bMF0udHlwZSA9PT0gInRleHQiICYmIC8vIEFuZCBpZiB0aGUgdXJsIGlzIHRoZSBzYW1lIGFzIHRoZSBjb250ZW504oCmCiAgICAocmF3MiA9PT0gbm9kZTIudXJsIHx8ICJtYWlsdG86IiArIHJhdzIgPT09IG5vZGUyLnVybCkgJiYgLy8gQW5kIHRoYXQgc3RhcnRzIHcvIGEgcHJvdG9jb2zigKYKICAgIC9eW2Etel1bYS16Ky4tXSs6L2kudGVzdChub2RlMi51cmwpICYmIC8vIEFuZCB0aGF0IGRvZXNu4oCZdCBjb250YWluIEFTQ0lJIGNvbnRyb2wgY29kZXMgKGNoYXJhY3RlciBlc2NhcGVzIGFuZAogICAgLy8gcmVmZXJlbmNlcyBkb27igJl0IHdvcmspLCBzcGFjZSwgb3IgYW5nbGUgYnJhY2tldHPigKYKICAgICEvW1wwLSA8Plx1MDA3Rl0vLnRlc3Qobm9kZTIudXJsKQogICk7Cn0KdmFyIGluaXRfZm9ybWF0X2xpbmtfYXNfYXV0b2xpbmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2Zvcm1hdC1saW5rLWFzLWF1dG9saW5rLmpzIigpIHsKICAgIGluaXRfbWRhc3RfdXRpbF90b19zdHJpbmcoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saW5rLmpzCmZ1bmN0aW9uIGxpbmsobm9kZTIsIF80LCBzdGF0ZTE0LCBpbmZvKSB7CiAgY29uc3QgcXVvdGUgPSBjaGVja1F1b3RlKHN0YXRlMTQpOwogIGNvbnN0IHN1ZmZpeCA9IHF1b3RlID09PSAnIicgPyAiUXVvdGUiIDogIkFwb3N0cm9waGUiOwogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTE0LmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgbGV0IGV4aXQzOwogIGxldCBzdWJleGl0OwogIGlmIChmb3JtYXRMaW5rQXNBdXRvbGluayhub2RlMiwgc3RhdGUxNCkpIHsKICAgIGNvbnN0IHN0YWNrID0gc3RhdGUxNC5zdGFjazsKICAgIHN0YXRlMTQuc3RhY2sgPSBbXTsKICAgIGV4aXQzID0gc3RhdGUxNC5lbnRlcigiYXV0b2xpbmsiKTsKICAgIGxldCB2YWx1ZTMgPSB0cmFja2VyLm1vdmUoIjwiKTsKICAgIHZhbHVlMyArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTQuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIHsKICAgICAgICBiZWZvcmU6IHZhbHVlMywKICAgICAgICBhZnRlcjogIj4iLAogICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICAgIH0pCiAgICApOwogICAgdmFsdWUzICs9IHRyYWNrZXIubW92ZSgiPiIpOwogICAgZXhpdDMoKTsKICAgIHN0YXRlMTQuc3RhY2sgPSBzdGFjazsKICAgIHJldHVybiB2YWx1ZTM7CiAgfQogIGV4aXQzID0gc3RhdGUxNC5lbnRlcigibGluayIpOwogIHN1YmV4aXQgPSBzdGF0ZTE0LmVudGVyKCJsYWJlbCIpOwogIGxldCB2YWx1ZTIgPSB0cmFja2VyLm1vdmUoIlsiKTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgc3RhdGUxNC5jb250YWluZXJQaHJhc2luZyhub2RlMiwgewogICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgYWZ0ZXI6ICJdKCIsCiAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICB9KQogICk7CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiXSgiKTsKICBzdWJleGl0KCk7CiAgaWYgKAogICAgLy8gSWYgdGhlcmXigJlzIG5vIHVybCBidXQgdGhlcmUgaXMgYSB0aXRsZeKApgogICAgIW5vZGUyLnVybCAmJiBub2RlMi50aXRsZSB8fCAvLyBJZiB0aGVyZSBhcmUgY29udHJvbCBjaGFyYWN0ZXJzIG9yIHdoaXRlc3BhY2UuCiAgICAvW1wwLSBcdTAwN0ZdLy50ZXN0KG5vZGUyLnVybCkKICApIHsKICAgIHN1YmV4aXQgPSBzdGF0ZTE0LmVudGVyKCJkZXN0aW5hdGlvbkxpdGVyYWwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIjwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTQuc2FmZShub2RlMi51cmwsIHsgYmVmb3JlOiB2YWx1ZTIsIGFmdGVyOiAiPiIsIC4uLnRyYWNrZXIuY3VycmVudCgpIH0pCiAgICApOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiPiIpOwogIH0gZWxzZSB7CiAgICBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigiZGVzdGluYXRpb25SYXciKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTQuc2FmZShub2RlMi51cmwsIHsKICAgICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgICBhZnRlcjogbm9kZTIudGl0bGUgPyAiICIgOiAiKSIsCiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgICAgfSkKICAgICk7CiAgfQogIHN1YmV4aXQoKTsKICBpZiAobm9kZTIudGl0bGUpIHsKICAgIHN1YmV4aXQgPSBzdGF0ZTE0LmVudGVyKGB0aXRsZSR7c3VmZml4fWApOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiICIgKyBxdW90ZSk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgICBzdGF0ZTE0LnNhZmUobm9kZTIudGl0bGUsIHsKICAgICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgICBhZnRlcjogcXVvdGUsCiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgICAgfSkKICAgICk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKHF1b3RlKTsKICAgIHN1YmV4aXQoKTsKICB9CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiKSIpOwogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBsaW5rUGVlayhub2RlMiwgXzQsIHN0YXRlMTQpIHsKICByZXR1cm4gZm9ybWF0TGlua0FzQXV0b2xpbmsobm9kZTIsIHN0YXRlMTQpID8gIjwiIDogIlsiOwp9CnZhciBpbml0X2xpbmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvbGluay5qcyIoKSB7CiAgICBpbml0X2NoZWNrX3F1b3RlKCk7CiAgICBpbml0X2Zvcm1hdF9saW5rX2FzX2F1dG9saW5rKCk7CiAgICBsaW5rLnBlZWsgPSBsaW5rUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saW5rLXJlZmVyZW5jZS5qcwpmdW5jdGlvbiBsaW5rUmVmZXJlbmNlKG5vZGUyLCBfNCwgc3RhdGUxNCwgaW5mbykgewogIGNvbnN0IHR5cGU1ID0gbm9kZTIucmVmZXJlbmNlVHlwZTsKICBjb25zdCBleGl0MyA9IHN0YXRlMTQuZW50ZXIoImxpbmtSZWZlcmVuY2UiKTsKICBsZXQgc3ViZXhpdCA9IHN0YXRlMTQuZW50ZXIoImxhYmVsIik7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTQuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBsZXQgdmFsdWUyID0gdHJhY2tlci5tb3ZlKCJbIik7CiAgY29uc3QgdGV4dDkgPSBzdGF0ZTE0LmNvbnRhaW5lclBocmFzaW5nKG5vZGUyLCB7CiAgICBiZWZvcmU6IHZhbHVlMiwKICAgIGFmdGVyOiAiXSIsCiAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogIH0pOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUodGV4dDkgKyAiXVsiKTsKICBzdWJleGl0KCk7CiAgY29uc3Qgc3RhY2sgPSBzdGF0ZTE0LnN0YWNrOwogIHN0YXRlMTQuc3RhY2sgPSBbXTsKICBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigicmVmZXJlbmNlIik7CiAgY29uc3QgcmVmZXJlbmNlID0gc3RhdGUxNC5zYWZlKHN0YXRlMTQuYXNzb2NpYXRpb25JZChub2RlMiksIHsKICAgIGJlZm9yZTogdmFsdWUyLAogICAgYWZ0ZXI6ICJdIiwKICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgfSk7CiAgc3ViZXhpdCgpOwogIHN0YXRlMTQuc3RhY2sgPSBzdGFjazsKICBleGl0MygpOwogIGlmICh0eXBlNSA9PT0gImZ1bGwiIHx8ICF0ZXh0OSB8fCB0ZXh0OSAhPT0gcmVmZXJlbmNlKSB7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKHJlZmVyZW5jZSArICJdIik7CiAgfSBlbHNlIGlmICh0eXBlNSA9PT0gInNob3J0Y3V0IikgewogICAgdmFsdWUyID0gdmFsdWUyLnNsaWNlKDAsIC0xKTsKICB9IGVsc2UgewogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiXSIpOwogIH0KICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIGxpbmtSZWZlcmVuY2VQZWVrKCkgewogIHJldHVybiAiWyI7Cn0KdmFyIGluaXRfbGlua19yZWZlcmVuY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvbGluay1yZWZlcmVuY2UuanMiKCkgewogICAgbGlua1JlZmVyZW5jZS5wZWVrID0gbGlua1JlZmVyZW5jZVBlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWJ1bGxldC5qcwpmdW5jdGlvbiBjaGVja0J1bGxldChzdGF0ZTE0KSB7CiAgY29uc3QgbWFya2VyID0gc3RhdGUxNC5vcHRpb25zLmJ1bGxldCB8fCAiKiI7CiAgaWYgKG1hcmtlciAhPT0gIioiICYmIG1hcmtlciAhPT0gIisiICYmIG1hcmtlciAhPT0gIi0iKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3Qgc2VyaWFsaXplIGl0ZW1zIHdpdGggYCIgKyBtYXJrZXIgKyAiYCBmb3IgYG9wdGlvbnMuYnVsbGV0YCwgZXhwZWN0ZWQgYCpgLCBgK2AsIG9yIGAtYCIKICAgICk7CiAgfQogIHJldHVybiBtYXJrZXI7Cn0KdmFyIGluaXRfY2hlY2tfYnVsbGV0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1idWxsZXQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1idWxsZXQtb3RoZXIuanMKZnVuY3Rpb24gY2hlY2tCdWxsZXRPdGhlcihzdGF0ZTE0KSB7CiAgY29uc3QgYnVsbGV0ID0gY2hlY2tCdWxsZXQoc3RhdGUxNCk7CiAgY29uc3QgYnVsbGV0T3RoZXIgPSBzdGF0ZTE0Lm9wdGlvbnMuYnVsbGV0T3RoZXI7CiAgaWYgKCFidWxsZXRPdGhlcikgewogICAgcmV0dXJuIGJ1bGxldCA9PT0gIioiID8gIi0iIDogIioiOwogIH0KICBpZiAoYnVsbGV0T3RoZXIgIT09ICIqIiAmJiBidWxsZXRPdGhlciAhPT0gIisiICYmIGJ1bGxldE90aGVyICE9PSAiLSIpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgaXRlbXMgd2l0aCBgIiArIGJ1bGxldE90aGVyICsgImAgZm9yIGBvcHRpb25zLmJ1bGxldE90aGVyYCwgZXhwZWN0ZWQgYCpgLCBgK2AsIG9yIGAtYCIKICAgICk7CiAgfQogIGlmIChidWxsZXRPdGhlciA9PT0gYnVsbGV0KSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJFeHBlY3RlZCBgYnVsbGV0YCAoYCIgKyBidWxsZXQgKyAiYCkgYW5kIGBidWxsZXRPdGhlcmAgKGAiICsgYnVsbGV0T3RoZXIgKyAiYCkgdG8gYmUgZGlmZmVyZW50IgogICAgKTsKICB9CiAgcmV0dXJuIGJ1bGxldE90aGVyOwp9CnZhciBpbml0X2NoZWNrX2J1bGxldF9vdGhlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stYnVsbGV0LW90aGVyLmpzIigpIHsKICAgIGluaXRfY2hlY2tfYnVsbGV0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWJ1bGxldC1vcmRlcmVkLmpzCmZ1bmN0aW9uIGNoZWNrQnVsbGV0T3JkZXJlZChzdGF0ZTE0KSB7CiAgY29uc3QgbWFya2VyID0gc3RhdGUxNC5vcHRpb25zLmJ1bGxldE9yZGVyZWQgfHwgIi4iOwogIGlmIChtYXJrZXIgIT09ICIuIiAmJiBtYXJrZXIgIT09ICIpIikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiQ2Fubm90IHNlcmlhbGl6ZSBpdGVtcyB3aXRoIGAiICsgbWFya2VyICsgImAgZm9yIGBvcHRpb25zLmJ1bGxldE9yZGVyZWRgLCBleHBlY3RlZCBgLmAgb3IgYClgIgogICAgKTsKICB9CiAgcmV0dXJuIG1hcmtlcjsKfQp2YXIgaW5pdF9jaGVja19idWxsZXRfb3JkZXJlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stYnVsbGV0LW9yZGVyZWQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1ydWxlLmpzCmZ1bmN0aW9uIGNoZWNrUnVsZShzdGF0ZTE0KSB7CiAgY29uc3QgbWFya2VyID0gc3RhdGUxNC5vcHRpb25zLnJ1bGUgfHwgIioiOwogIGlmIChtYXJrZXIgIT09ICIqIiAmJiBtYXJrZXIgIT09ICItIiAmJiBtYXJrZXIgIT09ICJfIikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiQ2Fubm90IHNlcmlhbGl6ZSBydWxlcyB3aXRoIGAiICsgbWFya2VyICsgImAgZm9yIGBvcHRpb25zLnJ1bGVgLCBleHBlY3RlZCBgKmAsIGAtYCwgb3IgYF9gIgogICAgKTsKICB9CiAgcmV0dXJuIG1hcmtlcjsKfQp2YXIgaW5pdF9jaGVja19ydWxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1ydWxlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saXN0LmpzCmZ1bmN0aW9uIGxpc3QyKG5vZGUyLCBwYXJlbnQsIHN0YXRlMTQsIGluZm8pIHsKICBjb25zdCBleGl0MyA9IHN0YXRlMTQuZW50ZXIoImxpc3QiKTsKICBjb25zdCBidWxsZXRDdXJyZW50ID0gc3RhdGUxNC5idWxsZXRDdXJyZW50OwogIGxldCBidWxsZXQgPSBub2RlMi5vcmRlcmVkID8gY2hlY2tCdWxsZXRPcmRlcmVkKHN0YXRlMTQpIDogY2hlY2tCdWxsZXQoc3RhdGUxNCk7CiAgY29uc3QgYnVsbGV0T3RoZXIgPSBub2RlMi5vcmRlcmVkID8gYnVsbGV0ID09PSAiLiIgPyAiKSIgOiAiLiIgOiBjaGVja0J1bGxldE90aGVyKHN0YXRlMTQpOwogIGxldCB1c2VEaWZmZXJlbnRNYXJrZXIgPSBwYXJlbnQgJiYgc3RhdGUxNC5idWxsZXRMYXN0VXNlZCA/IGJ1bGxldCA9PT0gc3RhdGUxNC5idWxsZXRMYXN0VXNlZCA6IGZhbHNlOwogIGlmICghbm9kZTIub3JkZXJlZCkgewogICAgY29uc3QgZmlyc3RMaXN0SXRlbSA9IG5vZGUyLmNoaWxkcmVuID8gbm9kZTIuY2hpbGRyZW5bMF0gOiB2b2lkIDA7CiAgICBpZiAoCiAgICAgIC8vIEJ1bGxldCBjb3VsZCBiZSB1c2VkIGFzIGEgdGhlbWF0aWMgYnJlYWsgbWFya2VyOgogICAgICAoYnVsbGV0ID09PSAiKiIgfHwgYnVsbGV0ID09PSAiLSIpICYmIC8vIEVtcHR5IGZpcnN0IGxpc3QgaXRlbToKICAgICAgZmlyc3RMaXN0SXRlbSAmJiAoIWZpcnN0TGlzdEl0ZW0uY2hpbGRyZW4gfHwgIWZpcnN0TGlzdEl0ZW0uY2hpbGRyZW5bMF0pICYmIC8vIERpcmVjdGx5IGluIHR3byBvdGhlciBsaXN0IGl0ZW1zOgogICAgICBzdGF0ZTE0LnN0YWNrW3N0YXRlMTQuc3RhY2subGVuZ3RoIC0gMV0gPT09ICJsaXN0IiAmJiBzdGF0ZTE0LnN0YWNrW3N0YXRlMTQuc3RhY2subGVuZ3RoIC0gMl0gPT09ICJsaXN0SXRlbSIgJiYgc3RhdGUxNC5zdGFja1tzdGF0ZTE0LnN0YWNrLmxlbmd0aCAtIDNdID09PSAibGlzdCIgJiYgc3RhdGUxNC5zdGFja1tzdGF0ZTE0LnN0YWNrLmxlbmd0aCAtIDRdID09PSAibGlzdEl0ZW0iICYmIC8vIFRoYXQgYXJlIGVhY2ggdGhlIGZpcnN0IGNoaWxkLgogICAgICBzdGF0ZTE0LmluZGV4U3RhY2tbc3RhdGUxNC5pbmRleFN0YWNrLmxlbmd0aCAtIDFdID09PSAwICYmIHN0YXRlMTQuaW5kZXhTdGFja1tzdGF0ZTE0LmluZGV4U3RhY2subGVuZ3RoIC0gMl0gPT09IDAgJiYgc3RhdGUxNC5pbmRleFN0YWNrW3N0YXRlMTQuaW5kZXhTdGFjay5sZW5ndGggLSAzXSA9PT0gMAogICAgKSB7CiAgICAgIHVzZURpZmZlcmVudE1hcmtlciA9IHRydWU7CiAgICB9CiAgICBpZiAoY2hlY2tSdWxlKHN0YXRlMTQpID09PSBidWxsZXQgJiYgZmlyc3RMaXN0SXRlbSkgewogICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IG5vZGUyLmNoaWxkcmVuLmxlbmd0aCkgewogICAgICAgIGNvbnN0IGl0ZW0gPSBub2RlMi5jaGlsZHJlbltpbmRleDJdOwogICAgICAgIGlmIChpdGVtICYmIGl0ZW0udHlwZSA9PT0gImxpc3RJdGVtIiAmJiBpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW5bMF0gJiYgaXRlbS5jaGlsZHJlblswXS50eXBlID09PSAidGhlbWF0aWNCcmVhayIpIHsKICAgICAgICAgIHVzZURpZmZlcmVudE1hcmtlciA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKHVzZURpZmZlcmVudE1hcmtlcikgewogICAgYnVsbGV0ID0gYnVsbGV0T3RoZXI7CiAgfQogIHN0YXRlMTQuYnVsbGV0Q3VycmVudCA9IGJ1bGxldDsKICBjb25zdCB2YWx1ZTIgPSBzdGF0ZTE0LmNvbnRhaW5lckZsb3cobm9kZTIsIGluZm8pOwogIHN0YXRlMTQuYnVsbGV0TGFzdFVzZWQgPSBidWxsZXQ7CiAgc3RhdGUxNC5idWxsZXRDdXJyZW50ID0gYnVsbGV0Q3VycmVudDsKICBleGl0MygpOwogIHJldHVybiB2YWx1ZTI7Cn0KdmFyIGluaXRfbGlzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saXN0LmpzIigpIHsKICAgIGluaXRfY2hlY2tfYnVsbGV0KCk7CiAgICBpbml0X2NoZWNrX2J1bGxldF9vdGhlcigpOwogICAgaW5pdF9jaGVja19idWxsZXRfb3JkZXJlZCgpOwogICAgaW5pdF9jaGVja19ydWxlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWxpc3QtaXRlbS1pbmRlbnQuanMKZnVuY3Rpb24gY2hlY2tMaXN0SXRlbUluZGVudChzdGF0ZTE0KSB7CiAgY29uc3Qgc3R5bGUgPSBzdGF0ZTE0Lm9wdGlvbnMubGlzdEl0ZW1JbmRlbnQgfHwgIm9uZSI7CiAgaWYgKHN0eWxlICE9PSAidGFiIiAmJiBzdHlsZSAhPT0gIm9uZSIgJiYgc3R5bGUgIT09ICJtaXhlZCIpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgaXRlbXMgd2l0aCBgIiArIHN0eWxlICsgImAgZm9yIGBvcHRpb25zLmxpc3RJdGVtSW5kZW50YCwgZXhwZWN0ZWQgYHRhYmAsIGBvbmVgLCBvciBgbWl4ZWRgIgogICAgKTsKICB9CiAgcmV0dXJuIHN0eWxlOwp9CnZhciBpbml0X2NoZWNrX2xpc3RfaXRlbV9pbmRlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWxpc3QtaXRlbS1pbmRlbnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2xpc3QtaXRlbS5qcwpmdW5jdGlvbiBsaXN0SXRlbShub2RlMiwgcGFyZW50LCBzdGF0ZTE0LCBpbmZvKSB7CiAgY29uc3QgbGlzdEl0ZW1JbmRlbnQgPSBjaGVja0xpc3RJdGVtSW5kZW50KHN0YXRlMTQpOwogIGxldCBidWxsZXQgPSBzdGF0ZTE0LmJ1bGxldEN1cnJlbnQgfHwgY2hlY2tCdWxsZXQoc3RhdGUxNCk7CiAgaWYgKHBhcmVudCAmJiBwYXJlbnQudHlwZSA9PT0gImxpc3QiICYmIHBhcmVudC5vcmRlcmVkKSB7CiAgICBidWxsZXQgPSAodHlwZW9mIHBhcmVudC5zdGFydCA9PT0gIm51bWJlciIgJiYgcGFyZW50LnN0YXJ0ID4gLTEgPyBwYXJlbnQuc3RhcnQgOiAxKSArIChzdGF0ZTE0Lm9wdGlvbnMuaW5jcmVtZW50TGlzdE1hcmtlciA9PT0gZmFsc2UgPyAwIDogcGFyZW50LmNoaWxkcmVuLmluZGV4T2Yobm9kZTIpKSArIGJ1bGxldDsKICB9CiAgbGV0IHNpemUgPSBidWxsZXQubGVuZ3RoICsgMTsKICBpZiAobGlzdEl0ZW1JbmRlbnQgPT09ICJ0YWIiIHx8IGxpc3RJdGVtSW5kZW50ID09PSAibWl4ZWQiICYmIChwYXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICJsaXN0IiAmJiBwYXJlbnQuc3ByZWFkIHx8IG5vZGUyLnNwcmVhZCkpIHsKICAgIHNpemUgPSBNYXRoLmNlaWwoc2l6ZSAvIDQpICogNDsKICB9CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTQuY3JlYXRlVHJhY2tlcihpbmZvKTsKICB0cmFja2VyLm1vdmUoYnVsbGV0ICsgIiAiLnJlcGVhdChzaXplIC0gYnVsbGV0Lmxlbmd0aCkpOwogIHRyYWNrZXIuc2hpZnQoc2l6ZSk7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTE0LmVudGVyKCJsaXN0SXRlbSIpOwogIGNvbnN0IHZhbHVlMiA9IHN0YXRlMTQuaW5kZW50TGluZXMoCiAgICBzdGF0ZTE0LmNvbnRhaW5lckZsb3cobm9kZTIsIHRyYWNrZXIuY3VycmVudCgpKSwKICAgIG1hcDcKICApOwogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKICBmdW5jdGlvbiBtYXA3KGxpbmUsIGluZGV4MiwgYmxhbmspIHsKICAgIGlmIChpbmRleDIpIHsKICAgICAgcmV0dXJuIChibGFuayA/ICIiIDogIiAiLnJlcGVhdChzaXplKSkgKyBsaW5lOwogICAgfQogICAgcmV0dXJuIChibGFuayA/IGJ1bGxldCA6IGJ1bGxldCArICIgIi5yZXBlYXQoc2l6ZSAtIGJ1bGxldC5sZW5ndGgpKSArIGxpbmU7CiAgfQp9CnZhciBpbml0X2xpc3RfaXRlbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saXN0LWl0ZW0uanMiKCkgewogICAgaW5pdF9jaGVja19idWxsZXQoKTsKICAgIGluaXRfY2hlY2tfbGlzdF9pdGVtX2luZGVudCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL3BhcmFncmFwaC5qcwpmdW5jdGlvbiBwYXJhZ3JhcGgobm9kZTIsIF80LCBzdGF0ZTE0LCBpbmZvKSB7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTE0LmVudGVyKCJwYXJhZ3JhcGgiKTsKICBjb25zdCBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigicGhyYXNpbmciKTsKICBjb25zdCB2YWx1ZTIgPSBzdGF0ZTE0LmNvbnRhaW5lclBocmFzaW5nKG5vZGUyLCBpbmZvKTsKICBzdWJleGl0KCk7CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwp9CnZhciBpbml0X3BhcmFncmFwaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9wYXJhZ3JhcGguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1waHJhc2luZ0A0LjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1waHJhc2luZy9saWIvaW5kZXguanMKdmFyIHBocmFzaW5nOwp2YXIgaW5pdF9saWIxNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtcGhyYXNpbmdANC4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtcGhyYXNpbmcvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfdW5pc3RfdXRpbF9pcygpOwogICAgcGhyYXNpbmcgPSAvKiogQHR5cGUgeyhub2RlPzogdW5rbm93bikgPT4gbm9kZSBpcyBFeGNsdWRlPFBocmFzaW5nQ29udGVudCwgSHRtbD59ICovCiAgICBjb252ZXJ0KFsKICAgICAgImJyZWFrIiwKICAgICAgImRlbGV0ZSIsCiAgICAgICJlbXBoYXNpcyIsCiAgICAgIC8vIFRvIGRvOiBuZXh0IG1ham9yOiByZW1vdmVkIHNpbmNlIGZvb3Rub3RlcyB3ZXJlIGFkZGVkIHRvIEdGTS4KICAgICAgImZvb3Rub3RlIiwKICAgICAgImZvb3Rub3RlUmVmZXJlbmNlIiwKICAgICAgImltYWdlIiwKICAgICAgImltYWdlUmVmZXJlbmNlIiwKICAgICAgImlubGluZUNvZGUiLAogICAgICAvLyBFbmFibGVkIGJ5IGBtZGFzdC11dGlsLW1hdGhgOgogICAgICAiaW5saW5lTWF0aCIsCiAgICAgICJsaW5rIiwKICAgICAgImxpbmtSZWZlcmVuY2UiLAogICAgICAvLyBFbmFibGVkIGJ5IGBtZGFzdC11dGlsLW1keGA6CiAgICAgICJtZHhKc3hUZXh0RWxlbWVudCIsCiAgICAgIC8vIEVuYWJsZWQgYnkgYG1kYXN0LXV0aWwtbWR4YDoKICAgICAgIm1keFRleHRFeHByZXNzaW9uIiwKICAgICAgInN0cm9uZyIsCiAgICAgICJ0ZXh0IiwKICAgICAgLy8gRW5hYmxlZCBieSBgbWRhc3QtdXRpbC1kaXJlY3RpdmVgOgogICAgICAidGV4dERpcmVjdGl2ZSIKICAgIF0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1waHJhc2luZ0A0LjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1waHJhc2luZy9pbmRleC5qcwp2YXIgaW5pdF9tZGFzdF91dGlsX3BocmFzaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1waHJhc2luZ0A0LjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1waHJhc2luZy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjE0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvcm9vdC5qcwpmdW5jdGlvbiByb290KG5vZGUyLCBfNCwgc3RhdGUxNCwgaW5mbykgewogIGNvbnN0IGhhc1BocmFzaW5nID0gbm9kZTIuY2hpbGRyZW4uc29tZShmdW5jdGlvbihkNikgewogICAgcmV0dXJuIHBocmFzaW5nKGQ2KTsKICB9KTsKICBjb25zdCBjb250YWluZXIgPSBoYXNQaHJhc2luZyA/IHN0YXRlMTQuY29udGFpbmVyUGhyYXNpbmcgOiBzdGF0ZTE0LmNvbnRhaW5lckZsb3c7CiAgcmV0dXJuIGNvbnRhaW5lci5jYWxsKHN0YXRlMTQsIG5vZGUyLCBpbmZvKTsKfQp2YXIgaW5pdF9yb290ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL3Jvb3QuanMiKCkgewogICAgaW5pdF9tZGFzdF91dGlsX3BocmFzaW5nKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLXN0cm9uZy5qcwpmdW5jdGlvbiBjaGVja1N0cm9uZyhzdGF0ZTE0KSB7CiAgY29uc3QgbWFya2VyID0gc3RhdGUxNC5vcHRpb25zLnN0cm9uZyB8fCAiKiI7CiAgaWYgKG1hcmtlciAhPT0gIioiICYmIG1hcmtlciAhPT0gIl8iKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3Qgc2VyaWFsaXplIHN0cm9uZyB3aXRoIGAiICsgbWFya2VyICsgImAgZm9yIGBvcHRpb25zLnN0cm9uZ2AsIGV4cGVjdGVkIGAqYCwgb3IgYF9gIgogICAgKTsKICB9CiAgcmV0dXJuIG1hcmtlcjsKfQp2YXIgaW5pdF9jaGVja19zdHJvbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLXN0cm9uZy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvc3Ryb25nLmpzCmZ1bmN0aW9uIHN0cm9uZyhub2RlMiwgXzQsIHN0YXRlMTQsIGluZm8pIHsKICBjb25zdCBtYXJrZXIgPSBjaGVja1N0cm9uZyhzdGF0ZTE0KTsKICBjb25zdCBleGl0MyA9IHN0YXRlMTQuZW50ZXIoInN0cm9uZyIpOwogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTE0LmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgY29uc3QgYmVmb3JlID0gdHJhY2tlci5tb3ZlKG1hcmtlciArIG1hcmtlcik7CiAgbGV0IGJldHdlZW4yID0gdHJhY2tlci5tb3ZlKAogICAgc3RhdGUxNC5jb250YWluZXJQaHJhc2luZyhub2RlMiwgewogICAgICBhZnRlcjogbWFya2VyLAogICAgICBiZWZvcmUsCiAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICB9KQogICk7CiAgY29uc3QgYmV0d2VlbkhlYWQgPSBiZXR3ZWVuMi5jaGFyQ29kZUF0KDApOwogIGNvbnN0IG9wZW4gPSBlbmNvZGVJbmZvKAogICAgaW5mby5iZWZvcmUuY2hhckNvZGVBdChpbmZvLmJlZm9yZS5sZW5ndGggLSAxKSwKICAgIGJldHdlZW5IZWFkLAogICAgbWFya2VyCiAgKTsKICBpZiAob3Blbi5pbnNpZGUpIHsKICAgIGJldHdlZW4yID0gZW5jb2RlQ2hhcmFjdGVyUmVmZXJlbmNlKGJldHdlZW5IZWFkKSArIGJldHdlZW4yLnNsaWNlKDEpOwogIH0KICBjb25zdCBiZXR3ZWVuVGFpbCA9IGJldHdlZW4yLmNoYXJDb2RlQXQoYmV0d2VlbjIubGVuZ3RoIC0gMSk7CiAgY29uc3QgY2xvc2U3ID0gZW5jb2RlSW5mbyhpbmZvLmFmdGVyLmNoYXJDb2RlQXQoMCksIGJldHdlZW5UYWlsLCBtYXJrZXIpOwogIGlmIChjbG9zZTcuaW5zaWRlKSB7CiAgICBiZXR3ZWVuMiA9IGJldHdlZW4yLnNsaWNlKDAsIC0xKSArIGVuY29kZUNoYXJhY3RlclJlZmVyZW5jZShiZXR3ZWVuVGFpbCk7CiAgfQogIGNvbnN0IGFmdGVyID0gdHJhY2tlci5tb3ZlKG1hcmtlciArIG1hcmtlcik7CiAgZXhpdDMoKTsKICBzdGF0ZTE0LmF0dGVudGlvbkVuY29kZVN1cnJvdW5kaW5nSW5mbyA9IHsKICAgIGFmdGVyOiBjbG9zZTcub3V0c2lkZSwKICAgIGJlZm9yZTogb3Blbi5vdXRzaWRlCiAgfTsKICByZXR1cm4gYmVmb3JlICsgYmV0d2VlbjIgKyBhZnRlcjsKfQpmdW5jdGlvbiBzdHJvbmdQZWVrKF80LCBfMSwgc3RhdGUxNCkgewogIHJldHVybiBzdGF0ZTE0Lm9wdGlvbnMuc3Ryb25nIHx8ICIqIjsKfQp2YXIgaW5pdF9zdHJvbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvc3Ryb25nLmpzIigpIHsKICAgIGluaXRfY2hlY2tfc3Ryb25nKCk7CiAgICBpbml0X2VuY29kZV9jaGFyYWN0ZXJfcmVmZXJlbmNlKCk7CiAgICBpbml0X2VuY29kZV9pbmZvKCk7CiAgICBzdHJvbmcucGVlayA9IHN0cm9uZ1BlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvdGV4dC5qcwpmdW5jdGlvbiB0ZXh0KG5vZGUyLCBfNCwgc3RhdGUxNCwgaW5mbykgewogIHJldHVybiBzdGF0ZTE0LnNhZmUobm9kZTIudmFsdWUsIGluZm8pOwp9CnZhciBpbml0X3RleHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvdGV4dC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLXJ1bGUtcmVwZXRpdGlvbi5qcwpmdW5jdGlvbiBjaGVja1J1bGVSZXBldGl0aW9uKHN0YXRlMTQpIHsKICBjb25zdCByZXBldGl0aW9uID0gc3RhdGUxNC5vcHRpb25zLnJ1bGVSZXBldGl0aW9uIHx8IDM7CiAgaWYgKHJlcGV0aXRpb24gPCAzKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3Qgc2VyaWFsaXplIHJ1bGVzIHdpdGggcmVwZXRpdGlvbiBgIiArIHJlcGV0aXRpb24gKyAiYCBmb3IgYG9wdGlvbnMucnVsZVJlcGV0aXRpb25gLCBleHBlY3RlZCBgM2Agb3IgbW9yZSIKICAgICk7CiAgfQogIHJldHVybiByZXBldGl0aW9uOwp9CnZhciBpbml0X2NoZWNrX3J1bGVfcmVwZXRpdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stcnVsZS1yZXBldGl0aW9uLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS90aGVtYXRpYy1icmVhay5qcwpmdW5jdGlvbiB0aGVtYXRpY0JyZWFrKF80LCBfMSwgc3RhdGUxNCkgewogIGNvbnN0IHZhbHVlMiA9IChjaGVja1J1bGUoc3RhdGUxNCkgKyAoc3RhdGUxNC5vcHRpb25zLnJ1bGVTcGFjZXMgPyAiICIgOiAiIikpLnJlcGVhdChjaGVja1J1bGVSZXBldGl0aW9uKHN0YXRlMTQpKTsKICByZXR1cm4gc3RhdGUxNC5vcHRpb25zLnJ1bGVTcGFjZXMgPyB2YWx1ZTIuc2xpY2UoMCwgLTEpIDogdmFsdWUyOwp9CnZhciBpbml0X3RoZW1hdGljX2JyZWFrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL3RoZW1hdGljLWJyZWFrLmpzIigpIHsKICAgIGluaXRfY2hlY2tfcnVsZV9yZXBldGl0aW9uKCk7CiAgICBpbml0X2NoZWNrX3J1bGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbmRleC5qcwp2YXIgaGFuZGxlOwp2YXIgaW5pdF9oYW5kbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaW5kZXguanMiKCkgewogICAgaW5pdF9ibG9ja3F1b3RlKCk7CiAgICBpbml0X2JyZWFrKCk7CiAgICBpbml0X2NvZGUoKTsKICAgIGluaXRfZGVmaW5pdGlvbigpOwogICAgaW5pdF9lbXBoYXNpcygpOwogICAgaW5pdF9oZWFkaW5nKCk7CiAgICBpbml0X2h0bWwoKTsKICAgIGluaXRfaW1hZ2UoKTsKICAgIGluaXRfaW1hZ2VfcmVmZXJlbmNlKCk7CiAgICBpbml0X2lubGluZV9jb2RlKCk7CiAgICBpbml0X2xpbmsoKTsKICAgIGluaXRfbGlua19yZWZlcmVuY2UoKTsKICAgIGluaXRfbGlzdCgpOwogICAgaW5pdF9saXN0X2l0ZW0oKTsKICAgIGluaXRfcGFyYWdyYXBoKCk7CiAgICBpbml0X3Jvb3QoKTsKICAgIGluaXRfc3Ryb25nKCk7CiAgICBpbml0X3RleHQoKTsKICAgIGluaXRfdGhlbWF0aWNfYnJlYWsoKTsKICAgIGhhbmRsZSA9IHsKICAgICAgYmxvY2txdW90ZSwKICAgICAgYnJlYWs6IGhhcmRCcmVhaywKICAgICAgY29kZSwKICAgICAgZGVmaW5pdGlvbiwKICAgICAgZW1waGFzaXMsCiAgICAgIGhhcmRCcmVhaywKICAgICAgaGVhZGluZywKICAgICAgaHRtbCwKICAgICAgaW1hZ2UsCiAgICAgIGltYWdlUmVmZXJlbmNlLAogICAgICBpbmxpbmVDb2RlLAogICAgICBsaW5rLAogICAgICBsaW5rUmVmZXJlbmNlLAogICAgICBsaXN0OiBsaXN0MiwKICAgICAgbGlzdEl0ZW0sCiAgICAgIHBhcmFncmFwaCwKICAgICAgcm9vdCwKICAgICAgc3Ryb25nLAogICAgICB0ZXh0LAogICAgICB0aGVtYXRpY0JyZWFrCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvam9pbi5qcwpmdW5jdGlvbiBqb2luRGVmYXVsdHMobGVmdCwgcmlnaHQsIHBhcmVudCwgc3RhdGUxNCkgewogIGlmIChyaWdodC50eXBlID09PSAiY29kZSIgJiYgZm9ybWF0Q29kZUFzSW5kZW50ZWQocmlnaHQsIHN0YXRlMTQpICYmIChsZWZ0LnR5cGUgPT09ICJsaXN0IiB8fCBsZWZ0LnR5cGUgPT09IHJpZ2h0LnR5cGUgJiYgZm9ybWF0Q29kZUFzSW5kZW50ZWQobGVmdCwgc3RhdGUxNCkpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGlmICgic3ByZWFkIiBpbiBwYXJlbnQgJiYgdHlwZW9mIHBhcmVudC5zcHJlYWQgPT09ICJib29sZWFuIikgewogICAgaWYgKGxlZnQudHlwZSA9PT0gInBhcmFncmFwaCIgJiYgLy8gVHdvIHBhcmFncmFwaHMuCiAgICAobGVmdC50eXBlID09PSByaWdodC50eXBlIHx8IHJpZ2h0LnR5cGUgPT09ICJkZWZpbml0aW9uIiB8fCAvLyBQYXJhZ3JhcGggZm9sbG93ZWQgYnkgYSBzZXRleHQgaGVhZGluZy4KICAgIHJpZ2h0LnR5cGUgPT09ICJoZWFkaW5nIiAmJiBmb3JtYXRIZWFkaW5nQXNTZXRleHQocmlnaHQsIHN0YXRlMTQpKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICByZXR1cm4gcGFyZW50LnNwcmVhZCA/IDEgOiAwOwogIH0KfQp2YXIgam9pbjI7CnZhciBpbml0X2pvaW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9qb2luLmpzIigpIHsKICAgIGluaXRfZm9ybWF0X2NvZGVfYXNfaW5kZW50ZWQoKTsKICAgIGluaXRfZm9ybWF0X2hlYWRpbmdfYXNfc2V0ZXh0KCk7CiAgICBqb2luMiA9IFtqb2luRGVmYXVsdHNdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdW5zYWZlLmpzCnZhciBmdWxsUGhyYXNpbmdTcGFucywgdW5zYWZlOwp2YXIgaW5pdF91bnNhZmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91bnNhZmUuanMiKCkgewogICAgZnVsbFBocmFzaW5nU3BhbnMgPSBbCiAgICAgICJhdXRvbGluayIsCiAgICAgICJkZXN0aW5hdGlvbkxpdGVyYWwiLAogICAgICAiZGVzdGluYXRpb25SYXciLAogICAgICAicmVmZXJlbmNlIiwKICAgICAgInRpdGxlUXVvdGUiLAogICAgICAidGl0bGVBcG9zdHJvcGhlIgogICAgXTsKICAgIHVuc2FmZSA9IFsKICAgICAgeyBjaGFyYWN0ZXI6ICIJIiwgYWZ0ZXI6ICJbXFxyXFxuXSIsIGluQ29uc3RydWN0OiAicGhyYXNpbmciIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiCSIsIGJlZm9yZTogIltcXHJcXG5dIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIgfSwKICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIgkiLAogICAgICAgIGluQ29uc3RydWN0OiBbImNvZGVGZW5jZWRMYW5nR3JhdmVBY2NlbnQiLCAiY29kZUZlbmNlZExhbmdUaWxkZSJdCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBjaGFyYWN0ZXI6ICJcciIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6IFsKICAgICAgICAgICJjb2RlRmVuY2VkTGFuZ0dyYXZlQWNjZW50IiwKICAgICAgICAgICJjb2RlRmVuY2VkTGFuZ1RpbGRlIiwKICAgICAgICAgICJjb2RlRmVuY2VkTWV0YUdyYXZlQWNjZW50IiwKICAgICAgICAgICJjb2RlRmVuY2VkTWV0YVRpbGRlIiwKICAgICAgICAgICJkZXN0aW5hdGlvbkxpdGVyYWwiLAogICAgICAgICAgImhlYWRpbmdBdHgiCiAgICAgICAgXQogICAgICB9LAogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiXG4iLAogICAgICAgIGluQ29uc3RydWN0OiBbCiAgICAgICAgICAiY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCIsCiAgICAgICAgICAiY29kZUZlbmNlZExhbmdUaWxkZSIsCiAgICAgICAgICAiY29kZUZlbmNlZE1ldGFHcmF2ZUFjY2VudCIsCiAgICAgICAgICAiY29kZUZlbmNlZE1ldGFUaWxkZSIsCiAgICAgICAgICAiZGVzdGluYXRpb25MaXRlcmFsIiwKICAgICAgICAgICJoZWFkaW5nQXR4IgogICAgICAgIF0KICAgICAgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICIgIiwgYWZ0ZXI6ICJbXFxyXFxuXSIsIGluQ29uc3RydWN0OiAicGhyYXNpbmciIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiICIsIGJlZm9yZTogIltcXHJcXG5dIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIgfSwKICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIiAiLAogICAgICAgIGluQ29uc3RydWN0OiBbImNvZGVGZW5jZWRMYW5nR3JhdmVBY2NlbnQiLCAiY29kZUZlbmNlZExhbmdUaWxkZSJdCiAgICAgIH0sCiAgICAgIC8vIEFuIGV4Y2xhbWF0aW9uIG1hcmsgY2FuIHN0YXJ0IGFuIGltYWdlLCBpZiBpdCBpcyBmb2xsb3dlZCBieSBhIGxpbmsgb3IKICAgICAgLy8gYSBsaW5rIHJlZmVyZW5jZS4KICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIiEiLAogICAgICAgIGFmdGVyOiAiXFxbIiwKICAgICAgICBpbkNvbnN0cnVjdDogInBocmFzaW5nIiwKICAgICAgICBub3RJbkNvbnN0cnVjdDogZnVsbFBocmFzaW5nU3BhbnMKICAgICAgfSwKICAgICAgLy8gQSBxdW90ZSBjYW4gYnJlYWsgb3V0IG9mIGEgdGl0bGUuCiAgICAgIHsgY2hhcmFjdGVyOiAnIicsIGluQ29uc3RydWN0OiAidGl0bGVRdW90ZSIgfSwKICAgICAgLy8gQSBudW1iZXIgc2lnbiBjb3VsZCBzdGFydCBhbiBBVFggaGVhZGluZyBpZiBpdCBzdGFydHMgYSBsaW5lLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIiMiIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiIyIsIGluQ29uc3RydWN0OiAiaGVhZGluZ0F0eCIsIGFmdGVyOiAiKD86W1xyXG5dfCQpIiB9LAogICAgICAvLyBEb2xsYXIgc2lnbiBhbmQgcGVyY2VudGFnZSBhcmUgbm90IHVzZWQgaW4gbWFya2Rvd24uCiAgICAgIC8vIEFuIGFtcGVyc2FuZCBjb3VsZCBzdGFydCBhIGNoYXJhY3RlciByZWZlcmVuY2UuCiAgICAgIHsgY2hhcmFjdGVyOiAiJiIsIGFmdGVyOiAiWyNBLVphLXpdIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIgfSwKICAgICAgLy8gQW4gYXBvc3Ryb3BoZSBjYW4gYnJlYWsgb3V0IG9mIGEgdGl0bGUuCiAgICAgIHsgY2hhcmFjdGVyOiAiJyIsIGluQ29uc3RydWN0OiAidGl0bGVBcG9zdHJvcGhlIiB9LAogICAgICAvLyBBIGxlZnQgcGFyZW4gY291bGQgYnJlYWsgb3V0IG9mIGEgZGVzdGluYXRpb24gcmF3LgogICAgICB7IGNoYXJhY3RlcjogIigiLCBpbkNvbnN0cnVjdDogImRlc3RpbmF0aW9uUmF3IiB9LAogICAgICAvLyBBIGxlZnQgcGFyZW4gZm9sbG93ZWQgYnkgYF1gIGNvdWxkIG1ha2Ugc29tZXRoaW5nIGludG8gYSBsaW5rIG9yIGltYWdlLgogICAgICB7CiAgICAgICAgYmVmb3JlOiAiXFxdIiwKICAgICAgICBjaGFyYWN0ZXI6ICIoIiwKICAgICAgICBpbkNvbnN0cnVjdDogInBocmFzaW5nIiwKICAgICAgICBub3RJbkNvbnN0cnVjdDogZnVsbFBocmFzaW5nU3BhbnMKICAgICAgfSwKICAgICAgLy8gQSByaWdodCBwYXJlbiBjb3VsZCBzdGFydCBhIGxpc3QgaXRlbSBvciBicmVhayBvdXQgb2YgYSBkZXN0aW5hdGlvbgogICAgICAvLyByYXcuCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgYmVmb3JlOiAiXFxkKyIsIGNoYXJhY3RlcjogIikiIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiKSIsIGluQ29uc3RydWN0OiAiZGVzdGluYXRpb25SYXciIH0sCiAgICAgIC8vIEFuIGFzdGVyaXNrIGNhbiBzdGFydCB0aGVtYXRpYyBicmVha3MsIGxpc3QgaXRlbXMsIGVtcGhhc2lzLCBzdHJvbmcuCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAiKiIsIGFmdGVyOiAiKD86WyAJXHJcbipdKSIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICIqIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIsIG5vdEluQ29uc3RydWN0OiBmdWxsUGhyYXNpbmdTcGFucyB9LAogICAgICAvLyBBIHBsdXMgc2lnbiBjb3VsZCBzdGFydCBhIGxpc3QgaXRlbS4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICIrIiwgYWZ0ZXI6ICIoPzpbIAlcclxuXSkiIH0sCiAgICAgIC8vIEEgZGFzaCBjYW4gc3RhcnQgdGhlbWF0aWMgYnJlYWtzLCBsaXN0IGl0ZW1zLCBhbmQgc2V0ZXh0IGhlYWRpbmcKICAgICAgLy8gdW5kZXJsaW5lcy4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICItIiwgYWZ0ZXI6ICIoPzpbIAlcclxuLV0pIiB9LAogICAgICAvLyBBIGRvdCBjb3VsZCBzdGFydCBhIGxpc3QgaXRlbS4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBiZWZvcmU6ICJcXGQrIiwgY2hhcmFjdGVyOiAiLiIsIGFmdGVyOiAiKD86WyAJXHJcbl18JCkiIH0sCiAgICAgIC8vIFNsYXNoLCBjb2xvbiwgYW5kIHNlbWljb2xvbiBhcmUgbm90IHVzZWQgaW4gbWFya2Rvd24gZm9yIGNvbnN0cnVjdHMuCiAgICAgIC8vIEEgbGVzcyB0aGFuIGNhbiBzdGFydCBodG1sIChmbG93IG9yIHRleHQpIG9yIGFuIGF1dG9saW5rLgogICAgICAvLyBIVE1MIGNvdWxkIHN0YXJ0IHdpdGggYW4gZXhjbGFtYXRpb24gbWFyayAoZGVjbGFyYXRpb24sIGNkYXRhLCBjb21tZW50KSwKICAgICAgLy8gc2xhc2ggKGNsb3NpbmcgdGFnKSwgcXVlc3Rpb24gbWFyayAoaW5zdHJ1Y3Rpb24pLCBvciBhIGxldHRlciAodGFnKS4KICAgICAgLy8gQW4gYXV0b2xpbmsgYWxzbyBzdGFydHMgd2l0aCBhIGxldHRlci4KICAgICAgLy8gRmluYWxseSwgaXQgY291bGQgYnJlYWsgb3V0IG9mIGEgZGVzdGluYXRpb24gbGl0ZXJhbC4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICI8IiwgYWZ0ZXI6ICJbIS8/QS1aYS16XSIgfSwKICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIjwiLAogICAgICAgIGFmdGVyOiAiWyEvP0EtWmEtel0iLAogICAgICAgIGluQ29uc3RydWN0OiAicGhyYXNpbmciLAogICAgICAgIG5vdEluQ29uc3RydWN0OiBmdWxsUGhyYXNpbmdTcGFucwogICAgICB9LAogICAgICB7IGNoYXJhY3RlcjogIjwiLCBpbkNvbnN0cnVjdDogImRlc3RpbmF0aW9uTGl0ZXJhbCIgfSwKICAgICAgLy8gQW4gZXF1YWxzIHRvIGNhbiBzdGFydCBzZXRleHQgaGVhZGluZyB1bmRlcmxpbmVzLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIj0iIH0sCiAgICAgIC8vIEEgZ3JlYXRlciB0aGFuIGNhbiBzdGFydCBibG9jayBxdW90ZXMgYW5kIGl0IGNhbiBicmVhayBvdXQgb2YgYQogICAgICAvLyBkZXN0aW5hdGlvbiBsaXRlcmFsLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIj4iIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiPiIsIGluQ29uc3RydWN0OiAiZGVzdGluYXRpb25MaXRlcmFsIiB9LAogICAgICAvLyBRdWVzdGlvbiBtYXJrIGFuZCBhdCBzaWduIGFyZSBub3QgdXNlZCBpbiBtYXJrZG93biBmb3IgY29uc3RydWN0cy4KICAgICAgLy8gQSBsZWZ0IGJyYWNrZXQgY2FuIHN0YXJ0IGRlZmluaXRpb25zLCByZWZlcmVuY2VzLCBsYWJlbHMsCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAiWyIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICJbIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIsIG5vdEluQ29uc3RydWN0OiBmdWxsUGhyYXNpbmdTcGFucyB9LAogICAgICB7IGNoYXJhY3RlcjogIlsiLCBpbkNvbnN0cnVjdDogWyJsYWJlbCIsICJyZWZlcmVuY2UiXSB9LAogICAgICAvLyBBIGJhY2tzbGFzaCBjYW4gc3RhcnQgYW4gZXNjYXBlICh3aGVuIGZvbGxvd2VkIGJ5IHB1bmN0dWF0aW9uKSBvciBhCiAgICAgIC8vIGhhcmQgYnJlYWsgKHdoZW4gZm9sbG93ZWQgYnkgYW4gZW9sKS4KICAgICAgLy8gTm90ZTogdHlwaWNhbCBlc2NhcGVzIGFyZSBoYW5kbGVkIGluIGBzYWZlYCEKICAgICAgeyBjaGFyYWN0ZXI6ICJcXCIsIGFmdGVyOiAiW1xcclxcbl0iLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiB9LAogICAgICAvLyBBIHJpZ2h0IGJyYWNrZXQgY2FuIGV4aXQgbGFiZWxzLgogICAgICB7IGNoYXJhY3RlcjogIl0iLCBpbkNvbnN0cnVjdDogWyJsYWJlbCIsICJyZWZlcmVuY2UiXSB9LAogICAgICAvLyBDYXJldCBpcyBub3QgdXNlZCBpbiBtYXJrZG93biBmb3IgY29uc3RydWN0cy4KICAgICAgLy8gQW4gdW5kZXJzY29yZSBjYW4gc3RhcnQgZW1waGFzaXMsIHN0cm9uZywgb3IgYSB0aGVtYXRpYyBicmVhay4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICJfIiB9LAogICAgICB7IGNoYXJhY3RlcjogIl8iLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiwgbm90SW5Db25zdHJ1Y3Q6IGZ1bGxQaHJhc2luZ1NwYW5zIH0sCiAgICAgIC8vIEEgZ3JhdmUgYWNjZW50IGNhbiBzdGFydCBjb2RlIChmZW5jZWQgb3IgdGV4dCksIG9yIGl0IGNhbiBicmVhayBvdXQgb2YKICAgICAgLy8gYSBncmF2ZSBhY2NlbnQgY29kZSBmZW5jZS4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICJgIiB9LAogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiYCIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6IFsiY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCIsICJjb2RlRmVuY2VkTWV0YUdyYXZlQWNjZW50Il0KICAgICAgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICJgIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIsIG5vdEluQ29uc3RydWN0OiBmdWxsUGhyYXNpbmdTcGFucyB9LAogICAgICAvLyBMZWZ0IGJyYWNlLCB2ZXJ0aWNhbCBiYXIsIHJpZ2h0IGJyYWNlIGFyZSBub3QgdXNlZCBpbiBtYXJrZG93biBmb3IKICAgICAgLy8gY29uc3RydWN0cy4KICAgICAgLy8gQSB0aWxkZSBjYW4gc3RhcnQgY29kZSAoZmVuY2VkKS4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICJ+IiB9CiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGVjb2RlLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2VAMS4zLjAvbm9kZV9tb2R1bGVzL2RlY29kZS1uYW1lZC1jaGFyYWN0ZXItcmVmZXJlbmNlL2luZGV4LmRvbS5qcwpmdW5jdGlvbiBkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZSh2YWx1ZTIpIHsKICBjb25zdCBjaGFyYWN0ZXJSZWZlcmVuY2UyID0gIiYiICsgdmFsdWUyICsgIjsiOwogIGVsZW1lbnQuaW5uZXJIVE1MID0gY2hhcmFjdGVyUmVmZXJlbmNlMjsKICBjb25zdCBjaGFyYWN0ZXIgPSBlbGVtZW50LnRleHRDb250ZW50OwogIGlmIChjaGFyYWN0ZXIuY2hhckNvZGVBdChjaGFyYWN0ZXIubGVuZ3RoIC0gMSkgPT09IDU5ICYmIHZhbHVlMiAhPT0gInNlbWkiKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBjaGFyYWN0ZXIgPT09IGNoYXJhY3RlclJlZmVyZW5jZTIgPyBmYWxzZSA6IGNoYXJhY3RlcjsKfQp2YXIgZWxlbWVudDsKdmFyIGluaXRfaW5kZXhfZG9tID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGVjb2RlLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2VAMS4zLjAvbm9kZV9tb2R1bGVzL2RlY29kZS1uYW1lZC1jaGFyYWN0ZXItcmVmZXJlbmNlL2luZGV4LmRvbS5qcyIoKSB7CiAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaSIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtZGVjb2RlLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZUAyLjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtZGVjb2RlLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZS9pbmRleC5qcwpmdW5jdGlvbiBkZWNvZGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlKHZhbHVlMiwgYmFzZSkgewogIGNvbnN0IGNvZGU0ID0gTnVtYmVyLnBhcnNlSW50KHZhbHVlMiwgYmFzZSk7CiAgaWYgKAogICAgLy8gQzAgZXhjZXB0IGZvciBIVCwgTEYsIEZGLCBDUiwgc3BhY2UuCiAgICBjb2RlNCA8IDkgfHwgY29kZTQgPT09IDExIHx8IGNvZGU0ID4gMTMgJiYgY29kZTQgPCAzMiB8fCAvLyBDb250cm9sIGNoYXJhY3RlciAoREVMKSBvZiBDMCwgYW5kIEMxIGNvbnRyb2xzLgogICAgY29kZTQgPiAxMjYgJiYgY29kZTQgPCAxNjAgfHwgLy8gTG9uZSBoaWdoIHN1cnJvZ2F0ZXMgYW5kIGxvdyBzdXJyb2dhdGVzLgogICAgY29kZTQgPiA1NTI5NSAmJiBjb2RlNCA8IDU3MzQ0IHx8IC8vIE5vbmNoYXJhY3RlcnMuCiAgICBjb2RlNCA+IDY0OTc1ICYmIGNvZGU0IDwgNjUwMDggfHwgLyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqLwogICAgKGNvZGU0ICYgNjU1MzUpID09PSA2NTUzNSB8fCAoY29kZTQgJiA2NTUzNSkgPT09IDY1NTM0IHx8IC8qIGVzbGludC1lbmFibGUgbm8tYml0d2lzZSAqLwogICAgLy8gT3V0IG9mIHJhbmdlCiAgICBjb2RlNCA+IDExMTQxMTEKICApIHsKICAgIHJldHVybiAiXHVGRkZEIjsKICB9CiAgcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGU0KTsKfQp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9kZWNvZGVfbnVtZXJpY19jaGFyYWN0ZXJfcmVmZXJlbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtZGVjb2RlLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZUAyLjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtZGVjb2RlLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZS9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1kZWNvZGUtc3RyaW5nQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1kZWNvZGUtc3RyaW5nL2luZGV4LmpzCmZ1bmN0aW9uIGRlY29kZVN0cmluZyh2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyLnJlcGxhY2UoY2hhcmFjdGVyRXNjYXBlT3JSZWZlcmVuY2UsIGRlY29kZSk7Cn0KZnVuY3Rpb24gZGVjb2RlKCQwLCAkMSwgJDIyKSB7CiAgaWYgKCQxKSB7CiAgICByZXR1cm4gJDE7CiAgfQogIGNvbnN0IGhlYWQyID0gJDIyLmNoYXJDb2RlQXQoMCk7CiAgaWYgKGhlYWQyID09PSAzNSkgewogICAgY29uc3QgaGVhZDMgPSAkMjIuY2hhckNvZGVBdCgxKTsKICAgIGNvbnN0IGhleDMgPSBoZWFkMyA9PT0gMTIwIHx8IGhlYWQzID09PSA4ODsKICAgIHJldHVybiBkZWNvZGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlKCQyMi5zbGljZShoZXgzID8gMiA6IDEpLCBoZXgzID8gMTYgOiAxMCk7CiAgfQogIHJldHVybiBkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZSgkMjIpIHx8ICQwOwp9CnZhciBjaGFyYWN0ZXJFc2NhcGVPclJlZmVyZW5jZTsKdmFyIGluaXRfbWljcm9tYXJrX3V0aWxfZGVjb2RlX3N0cmluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWRlY29kZS1zdHJpbmdAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWRlY29kZS1zdHJpbmcvaW5kZXguanMiKCkgewogICAgaW5pdF9pbmRleF9kb20oKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfZGVjb2RlX251bWVyaWNfY2hhcmFjdGVyX3JlZmVyZW5jZSgpOwogICAgY2hhcmFjdGVyRXNjYXBlT3JSZWZlcmVuY2UgPSAvXFwoWyEtLzotQFstYHstfl0pfCYoIyg/OlxkezEsN318eFtcZGEtZl17MSw2fSl8W1xkYS16XXsxLDMxfSk7L2dpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9hc3NvY2lhdGlvbi5qcwpmdW5jdGlvbiBhc3NvY2lhdGlvbihub2RlMikgewogIGlmIChub2RlMi5sYWJlbCB8fCAhbm9kZTIuaWRlbnRpZmllcikgewogICAgcmV0dXJuIG5vZGUyLmxhYmVsIHx8ICIiOwogIH0KICByZXR1cm4gZGVjb2RlU3RyaW5nKG5vZGUyLmlkZW50aWZpZXIpOwp9CnZhciBpbml0X2Fzc29jaWF0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9hc3NvY2lhdGlvbi5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2RlY29kZV9zdHJpbmcoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY29tcGlsZS1wYXR0ZXJuLmpzCmZ1bmN0aW9uIGNvbXBpbGVQYXR0ZXJuKHBhdHRlcm4pIHsKICBpZiAoIXBhdHRlcm4uX2NvbXBpbGVkKSB7CiAgICBjb25zdCBiZWZvcmUgPSAocGF0dGVybi5hdEJyZWFrID8gIltcXHJcXG5dW1xcdCBdKiIgOiAiIikgKyAocGF0dGVybi5iZWZvcmUgPyAiKD86IiArIHBhdHRlcm4uYmVmb3JlICsgIikiIDogIiIpOwogICAgcGF0dGVybi5fY29tcGlsZWQgPSBuZXcgUmVnRXhwKAogICAgICAoYmVmb3JlID8gIigiICsgYmVmb3JlICsgIikiIDogIiIpICsgKC9bfFxce30oKVtcXV4kKyo/Li1dLy50ZXN0KHBhdHRlcm4uY2hhcmFjdGVyKSA/ICJcXCIgOiAiIikgKyBwYXR0ZXJuLmNoYXJhY3RlciArIChwYXR0ZXJuLmFmdGVyID8gIig/OiIgKyBwYXR0ZXJuLmFmdGVyICsgIikiIDogIiIpLAogICAgICAiZyIKICAgICk7CiAgfQogIHJldHVybiBwYXR0ZXJuLl9jb21waWxlZDsKfQp2YXIgaW5pdF9jb21waWxlX3BhdHRlcm4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NvbXBpbGUtcGF0dGVybi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NvbnRhaW5lci1waHJhc2luZy5qcwpmdW5jdGlvbiBjb250YWluZXJQaHJhc2luZyhwYXJlbnQsIHN0YXRlMTQsIGluZm8pIHsKICBjb25zdCBpbmRleFN0YWNrID0gc3RhdGUxNC5pbmRleFN0YWNrOwogIGNvbnN0IGNoaWxkcmVuMiA9IHBhcmVudC5jaGlsZHJlbiB8fCBbXTsKICBjb25zdCByZXN1bHRzID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBiZWZvcmUgPSBpbmZvLmJlZm9yZTsKICBsZXQgZW5jb2RlQWZ0ZXI7CiAgaW5kZXhTdGFjay5wdXNoKC0xKTsKICBsZXQgdHJhY2tlciA9IHN0YXRlMTQuY3JlYXRlVHJhY2tlcihpbmZvKTsKICB3aGlsZSAoKytpbmRleDIgPCBjaGlsZHJlbjIubGVuZ3RoKSB7CiAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuMltpbmRleDJdOwogICAgbGV0IGFmdGVyOwogICAgaW5kZXhTdGFja1tpbmRleFN0YWNrLmxlbmd0aCAtIDFdID0gaW5kZXgyOwogICAgaWYgKGluZGV4MiArIDEgPCBjaGlsZHJlbjIubGVuZ3RoKSB7CiAgICAgIGxldCBoYW5kbGUzID0gc3RhdGUxNC5oYW5kbGUuaGFuZGxlcnNbY2hpbGRyZW4yW2luZGV4MiArIDFdLnR5cGVdOwogICAgICBpZiAoaGFuZGxlMyAmJiBoYW5kbGUzLnBlZWspIGhhbmRsZTMgPSBoYW5kbGUzLnBlZWs7CiAgICAgIGFmdGVyID0gaGFuZGxlMyA/IGhhbmRsZTMoY2hpbGRyZW4yW2luZGV4MiArIDFdLCBwYXJlbnQsIHN0YXRlMTQsIHsKICAgICAgICBiZWZvcmU6ICIiLAogICAgICAgIGFmdGVyOiAiIiwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KS5jaGFyQXQoMCkgOiAiIjsKICAgIH0gZWxzZSB7CiAgICAgIGFmdGVyID0gaW5mby5hZnRlcjsKICAgIH0KICAgIGlmIChyZXN1bHRzLmxlbmd0aCA+IDAgJiYgKGJlZm9yZSA9PT0gIlxyIiB8fCBiZWZvcmUgPT09ICJcbiIpICYmIGNoaWxkLnR5cGUgPT09ICJodG1sIikgewogICAgICByZXN1bHRzW3Jlc3VsdHMubGVuZ3RoIC0gMV0gPSByZXN1bHRzW3Jlc3VsdHMubGVuZ3RoIC0gMV0ucmVwbGFjZSgKICAgICAgICAvKFxyP1xufFxyKSQvLAogICAgICAgICIgIgogICAgICApOwogICAgICBiZWZvcmUgPSAiICI7CiAgICAgIHRyYWNrZXIgPSBzdGF0ZTE0LmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgICAgIHRyYWNrZXIubW92ZShyZXN1bHRzLmpvaW4oIiIpKTsKICAgIH0KICAgIGxldCB2YWx1ZTIgPSBzdGF0ZTE0LmhhbmRsZShjaGlsZCwgcGFyZW50LCBzdGF0ZTE0LCB7CiAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpLAogICAgICBhZnRlciwKICAgICAgYmVmb3JlCiAgICB9KTsKICAgIGlmIChlbmNvZGVBZnRlciAmJiBlbmNvZGVBZnRlciA9PT0gdmFsdWUyLnNsaWNlKDAsIDEpKSB7CiAgICAgIHZhbHVlMiA9IGVuY29kZUNoYXJhY3RlclJlZmVyZW5jZShlbmNvZGVBZnRlci5jaGFyQ29kZUF0KDApKSArIHZhbHVlMi5zbGljZSgxKTsKICAgIH0KICAgIGNvbnN0IGVuY29kaW5nSW5mbyA9IHN0YXRlMTQuYXR0ZW50aW9uRW5jb2RlU3Vycm91bmRpbmdJbmZvOwogICAgc3RhdGUxNC5hdHRlbnRpb25FbmNvZGVTdXJyb3VuZGluZ0luZm8gPSB2b2lkIDA7CiAgICBlbmNvZGVBZnRlciA9IHZvaWQgMDsKICAgIGlmIChlbmNvZGluZ0luZm8pIHsKICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID4gMCAmJiBlbmNvZGluZ0luZm8uYmVmb3JlICYmIGJlZm9yZSA9PT0gcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdLnNsaWNlKC0xKSkgewogICAgICAgIHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXSA9IHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXS5zbGljZSgwLCAtMSkgKyBlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UoYmVmb3JlLmNoYXJDb2RlQXQoMCkpOwogICAgICB9CiAgICAgIGlmIChlbmNvZGluZ0luZm8uYWZ0ZXIpIGVuY29kZUFmdGVyID0gYWZ0ZXI7CiAgICB9CiAgICB0cmFja2VyLm1vdmUodmFsdWUyKTsKICAgIHJlc3VsdHMucHVzaCh2YWx1ZTIpOwogICAgYmVmb3JlID0gdmFsdWUyLnNsaWNlKC0xKTsKICB9CiAgaW5kZXhTdGFjay5wb3AoKTsKICByZXR1cm4gcmVzdWx0cy5qb2luKCIiKTsKfQp2YXIgaW5pdF9jb250YWluZXJfcGhyYXNpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NvbnRhaW5lci1waHJhc2luZy5qcyIoKSB7CiAgICBpbml0X2VuY29kZV9jaGFyYWN0ZXJfcmVmZXJlbmNlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NvbnRhaW5lci1mbG93LmpzCmZ1bmN0aW9uIGNvbnRhaW5lckZsb3cocGFyZW50LCBzdGF0ZTE0LCBpbmZvKSB7CiAgY29uc3QgaW5kZXhTdGFjayA9IHN0YXRlMTQuaW5kZXhTdGFjazsKICBjb25zdCBjaGlsZHJlbjIgPSBwYXJlbnQuY2hpbGRyZW4gfHwgW107CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTQuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBjb25zdCByZXN1bHRzID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIGluZGV4U3RhY2sucHVzaCgtMSk7CiAgd2hpbGUgKCsraW5kZXgyIDwgY2hpbGRyZW4yLmxlbmd0aCkgewogICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbjJbaW5kZXgyXTsKICAgIGluZGV4U3RhY2tbaW5kZXhTdGFjay5sZW5ndGggLSAxXSA9IGluZGV4MjsKICAgIHJlc3VsdHMucHVzaCgKICAgICAgdHJhY2tlci5tb3ZlKAogICAgICAgIHN0YXRlMTQuaGFuZGxlKGNoaWxkLCBwYXJlbnQsIHN0YXRlMTQsIHsKICAgICAgICAgIGJlZm9yZTogIlxuIiwKICAgICAgICAgIGFmdGVyOiAiXG4iLAogICAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgICAgICB9KQogICAgICApCiAgICApOwogICAgaWYgKGNoaWxkLnR5cGUgIT09ICJsaXN0IikgewogICAgICBzdGF0ZTE0LmJ1bGxldExhc3RVc2VkID0gdm9pZCAwOwogICAgfQogICAgaWYgKGluZGV4MiA8IGNoaWxkcmVuMi5sZW5ndGggLSAxKSB7CiAgICAgIHJlc3VsdHMucHVzaCgKICAgICAgICB0cmFja2VyLm1vdmUoYmV0d2VlbihjaGlsZCwgY2hpbGRyZW4yW2luZGV4MiArIDFdLCBwYXJlbnQsIHN0YXRlMTQpKQogICAgICApOwogICAgfQogIH0KICBpbmRleFN0YWNrLnBvcCgpOwogIHJldHVybiByZXN1bHRzLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIGJldHdlZW4obGVmdCwgcmlnaHQsIHBhcmVudCwgc3RhdGUxNCkgewogIGxldCBpbmRleDIgPSBzdGF0ZTE0LmpvaW4ubGVuZ3RoOwogIHdoaWxlIChpbmRleDItLSkgewogICAgY29uc3QgcmVzdWx0ID0gc3RhdGUxNC5qb2luW2luZGV4Ml0obGVmdCwgcmlnaHQsIHBhcmVudCwgc3RhdGUxNCk7CiAgICBpZiAocmVzdWx0ID09PSB0cnVlIHx8IHJlc3VsdCA9PT0gMSkgewogICAgICBicmVhazsKICAgIH0KICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAibnVtYmVyIikgewogICAgICByZXR1cm4gIlxuIi5yZXBlYXQoMSArIHJlc3VsdCk7CiAgICB9CiAgICBpZiAocmVzdWx0ID09PSBmYWxzZSkgewogICAgICByZXR1cm4gIlxuXG48IS0tLS0+XG5cbiI7CiAgICB9CiAgfQogIHJldHVybiAiXG5cbiI7Cn0KdmFyIGluaXRfY29udGFpbmVyX2Zsb3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NvbnRhaW5lci1mbG93LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvaW5kZW50LWxpbmVzLmpzCmZ1bmN0aW9uIGluZGVudExpbmVzKHZhbHVlMiwgbWFwNykgewogIGNvbnN0IHJlc3VsdCA9IFtdOwogIGxldCBzdGFydCA9IDA7CiAgbGV0IGxpbmUgPSAwOwogIGxldCBtYXRjaDI7CiAgd2hpbGUgKG1hdGNoMiA9IGVvbC5leGVjKHZhbHVlMikpIHsKICAgIG9uZTModmFsdWUyLnNsaWNlKHN0YXJ0LCBtYXRjaDIuaW5kZXgpKTsKICAgIHJlc3VsdC5wdXNoKG1hdGNoMlswXSk7CiAgICBzdGFydCA9IG1hdGNoMi5pbmRleCArIG1hdGNoMlswXS5sZW5ndGg7CiAgICBsaW5lKys7CiAgfQogIG9uZTModmFsdWUyLnNsaWNlKHN0YXJ0KSk7CiAgcmV0dXJuIHJlc3VsdC5qb2luKCIiKTsKICBmdW5jdGlvbiBvbmUzKHZhbHVlMykgewogICAgcmVzdWx0LnB1c2gobWFwNyh2YWx1ZTMsIGxpbmUsICF2YWx1ZTMpKTsKICB9Cn0KdmFyIGVvbDsKdmFyIGluaXRfaW5kZW50X2xpbmVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9pbmRlbnQtbGluZXMuanMiKCkgewogICAgZW9sID0gL1xyP1xufFxyL2c7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL3NhZmUuanMKZnVuY3Rpb24gc2FmZShzdGF0ZTE0LCBpbnB1dCwgY29uZmlnMykgewogIGNvbnN0IHZhbHVlMiA9IChjb25maWczLmJlZm9yZSB8fCAiIikgKyAoaW5wdXQgfHwgIiIpICsgKGNvbmZpZzMuYWZ0ZXIgfHwgIiIpOwogIGNvbnN0IHBvc2l0aW9ucyA9IFtdOwogIGNvbnN0IHJlc3VsdCA9IFtdOwogIGNvbnN0IGluZm9zID0ge307CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHN0YXRlMTQudW5zYWZlLmxlbmd0aCkgewogICAgY29uc3QgcGF0dGVybiA9IHN0YXRlMTQudW5zYWZlW2luZGV4Ml07CiAgICBpZiAoIXBhdHRlcm5JblNjb3BlKHN0YXRlMTQuc3RhY2ssIHBhdHRlcm4pKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgY29uc3QgZXhwcmVzc2lvbiA9IHN0YXRlMTQuY29tcGlsZVBhdHRlcm4ocGF0dGVybik7CiAgICBsZXQgbWF0Y2gyOwogICAgd2hpbGUgKG1hdGNoMiA9IGV4cHJlc3Npb24uZXhlYyh2YWx1ZTIpKSB7CiAgICAgIGNvbnN0IGJlZm9yZSA9ICJiZWZvcmUiIGluIHBhdHRlcm4gfHwgQm9vbGVhbihwYXR0ZXJuLmF0QnJlYWspOwogICAgICBjb25zdCBhZnRlciA9ICJhZnRlciIgaW4gcGF0dGVybjsKICAgICAgY29uc3QgcG9zaXRpb24zID0gbWF0Y2gyLmluZGV4ICsgKGJlZm9yZSA/IG1hdGNoMlsxXS5sZW5ndGggOiAwKTsKICAgICAgaWYgKHBvc2l0aW9ucy5pbmNsdWRlcyhwb3NpdGlvbjMpKSB7CiAgICAgICAgaWYgKGluZm9zW3Bvc2l0aW9uM10uYmVmb3JlICYmICFiZWZvcmUpIHsKICAgICAgICAgIGluZm9zW3Bvc2l0aW9uM10uYmVmb3JlID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChpbmZvc1twb3NpdGlvbjNdLmFmdGVyICYmICFhZnRlcikgewogICAgICAgICAgaW5mb3NbcG9zaXRpb24zXS5hZnRlciA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBwb3NpdGlvbnMucHVzaChwb3NpdGlvbjMpOwogICAgICAgIGluZm9zW3Bvc2l0aW9uM10gPSB7IGJlZm9yZSwgYWZ0ZXIgfTsKICAgICAgfQogICAgfQogIH0KICBwb3NpdGlvbnMuc29ydChudW1lcmljYWwpOwogIGxldCBzdGFydCA9IGNvbmZpZzMuYmVmb3JlID8gY29uZmlnMy5iZWZvcmUubGVuZ3RoIDogMDsKICBjb25zdCBlbmQzID0gdmFsdWUyLmxlbmd0aCAtIChjb25maWczLmFmdGVyID8gY29uZmlnMy5hZnRlci5sZW5ndGggOiAwKTsKICBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBwb3NpdGlvbnMubGVuZ3RoKSB7CiAgICBjb25zdCBwb3NpdGlvbjMgPSBwb3NpdGlvbnNbaW5kZXgyXTsKICAgIGlmIChwb3NpdGlvbjMgPCBzdGFydCB8fCBwb3NpdGlvbjMgPj0gZW5kMykgewogICAgICBjb250aW51ZTsKICAgIH0KICAgIGlmIChwb3NpdGlvbjMgKyAxIDwgZW5kMyAmJiBwb3NpdGlvbnNbaW5kZXgyICsgMV0gPT09IHBvc2l0aW9uMyArIDEgJiYgaW5mb3NbcG9zaXRpb24zXS5hZnRlciAmJiAhaW5mb3NbcG9zaXRpb24zICsgMV0uYmVmb3JlICYmICFpbmZvc1twb3NpdGlvbjMgKyAxXS5hZnRlciB8fCBwb3NpdGlvbnNbaW5kZXgyIC0gMV0gPT09IHBvc2l0aW9uMyAtIDEgJiYgaW5mb3NbcG9zaXRpb24zXS5iZWZvcmUgJiYgIWluZm9zW3Bvc2l0aW9uMyAtIDFdLmJlZm9yZSAmJiAhaW5mb3NbcG9zaXRpb24zIC0gMV0uYWZ0ZXIpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAoc3RhcnQgIT09IHBvc2l0aW9uMykgewogICAgICByZXN1bHQucHVzaChlc2NhcGVCYWNrc2xhc2hlcyh2YWx1ZTIuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uMyksICJcXCIpKTsKICAgIH0KICAgIHN0YXJ0ID0gcG9zaXRpb24zOwogICAgaWYgKC9bIS0vOi1AWy1gey1+XS8udGVzdCh2YWx1ZTIuY2hhckF0KHBvc2l0aW9uMykpICYmICghY29uZmlnMy5lbmNvZGUgfHwgIWNvbmZpZzMuZW5jb2RlLmluY2x1ZGVzKHZhbHVlMi5jaGFyQXQocG9zaXRpb24zKSkpKSB7CiAgICAgIHJlc3VsdC5wdXNoKCJcXCIpOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0LnB1c2goZW5jb2RlQ2hhcmFjdGVyUmVmZXJlbmNlKHZhbHVlMi5jaGFyQ29kZUF0KHBvc2l0aW9uMykpKTsKICAgICAgc3RhcnQrKzsKICAgIH0KICB9CiAgcmVzdWx0LnB1c2goZXNjYXBlQmFja3NsYXNoZXModmFsdWUyLnNsaWNlKHN0YXJ0LCBlbmQzKSwgY29uZmlnMy5hZnRlcikpOwogIHJldHVybiByZXN1bHQuam9pbigiIik7Cn0KZnVuY3Rpb24gbnVtZXJpY2FsKGE1LCBiNSkgewogIHJldHVybiBhNSAtIGI1Owp9CmZ1bmN0aW9uIGVzY2FwZUJhY2tzbGFzaGVzKHZhbHVlMiwgYWZ0ZXIpIHsKICBjb25zdCBleHByZXNzaW9uID0gL1xcKD89WyEtLzotQFstYHstfl0pL2c7CiAgY29uc3QgcG9zaXRpb25zID0gW107CiAgY29uc3QgcmVzdWx0cyA9IFtdOwogIGNvbnN0IHdob2xlID0gdmFsdWUyICsgYWZ0ZXI7CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBzdGFydCA9IDA7CiAgbGV0IG1hdGNoMjsKICB3aGlsZSAobWF0Y2gyID0gZXhwcmVzc2lvbi5leGVjKHdob2xlKSkgewogICAgcG9zaXRpb25zLnB1c2gobWF0Y2gyLmluZGV4KTsKICB9CiAgd2hpbGUgKCsraW5kZXgyIDwgcG9zaXRpb25zLmxlbmd0aCkgewogICAgaWYgKHN0YXJ0ICE9PSBwb3NpdGlvbnNbaW5kZXgyXSkgewogICAgICByZXN1bHRzLnB1c2godmFsdWUyLnNsaWNlKHN0YXJ0LCBwb3NpdGlvbnNbaW5kZXgyXSkpOwogICAgfQogICAgcmVzdWx0cy5wdXNoKCJcXCIpOwogICAgc3RhcnQgPSBwb3NpdGlvbnNbaW5kZXgyXTsKICB9CiAgcmVzdWx0cy5wdXNoKHZhbHVlMi5zbGljZShzdGFydCkpOwogIHJldHVybiByZXN1bHRzLmpvaW4oIiIpOwp9CnZhciBpbml0X3NhZmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL3NhZmUuanMiKCkgewogICAgaW5pdF9lbmNvZGVfY2hhcmFjdGVyX3JlZmVyZW5jZSgpOwogICAgaW5pdF9wYXR0ZXJuX2luX3Njb3BlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL3RyYWNrLmpzCmZ1bmN0aW9uIHRyYWNrKGNvbmZpZzMpIHsKICBjb25zdCBvcHRpb25zID0gY29uZmlnMyB8fCB7fTsKICBjb25zdCBub3cyID0gb3B0aW9ucy5ub3cgfHwge307CiAgbGV0IGxpbmVTaGlmdCA9IG9wdGlvbnMubGluZVNoaWZ0IHx8IDA7CiAgbGV0IGxpbmUgPSBub3cyLmxpbmUgfHwgMTsKICBsZXQgY29sdW1uID0gbm93Mi5jb2x1bW4gfHwgMTsKICByZXR1cm4geyBtb3ZlLCBjdXJyZW50LCBzaGlmdCB9OwogIGZ1bmN0aW9uIGN1cnJlbnQoKSB7CiAgICByZXR1cm4geyBub3c6IHsgbGluZSwgY29sdW1uIH0sIGxpbmVTaGlmdCB9OwogIH0KICBmdW5jdGlvbiBzaGlmdCh2YWx1ZTIpIHsKICAgIGxpbmVTaGlmdCArPSB2YWx1ZTI7CiAgfQogIGZ1bmN0aW9uIG1vdmUoaW5wdXQpIHsKICAgIGNvbnN0IHZhbHVlMiA9IGlucHV0IHx8ICIiOwogICAgY29uc3QgY2h1bmtzID0gdmFsdWUyLnNwbGl0KC9ccj9cbnxcci9nKTsKICAgIGNvbnN0IHRhaWwgPSBjaHVua3NbY2h1bmtzLmxlbmd0aCAtIDFdOwogICAgbGluZSArPSBjaHVua3MubGVuZ3RoIC0gMTsKICAgIGNvbHVtbiA9IGNodW5rcy5sZW5ndGggPT09IDEgPyBjb2x1bW4gKyB0YWlsLmxlbmd0aCA6IDEgKyB0YWlsLmxlbmd0aCArIGxpbmVTaGlmdDsKICAgIHJldHVybiB2YWx1ZTI7CiAgfQp9CnZhciBpbml0X3RyYWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC90cmFjay5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9pbmRleC5qcwpmdW5jdGlvbiB0b01hcmtkb3duKHRyZWUsIG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgY29uc3Qgc3RhdGUxNCA9IHsKICAgIGFzc29jaWF0aW9uSWQ6IGFzc29jaWF0aW9uLAogICAgY29udGFpbmVyUGhyYXNpbmc6IGNvbnRhaW5lclBocmFzaW5nQm91bmQsCiAgICBjb250YWluZXJGbG93OiBjb250YWluZXJGbG93Qm91bmQsCiAgICBjcmVhdGVUcmFja2VyOiB0cmFjaywKICAgIGNvbXBpbGVQYXR0ZXJuLAogICAgZW50ZXIsCiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBHRk0gLyBmcm9udG1hdHRlciBhcmUgdHlwZWQgaW4gYG1kYXN0YCBidXQgbm90IGRlZmluZWQKICAgIC8vIGhlcmUuCiAgICBoYW5kbGVyczogeyAuLi5oYW5kbGUgfSwKICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGFkZCBgaGFuZGxlYCBpbiBhIHNlY29uZC4KICAgIGhhbmRsZTogdm9pZCAwLAogICAgaW5kZW50TGluZXMsCiAgICBpbmRleFN0YWNrOiBbXSwKICAgIGpvaW46IFsuLi5qb2luMl0sCiAgICBvcHRpb25zOiB7fSwKICAgIHNhZmU6IHNhZmVCb3VuZCwKICAgIHN0YWNrOiBbXSwKICAgIHVuc2FmZTogWy4uLnVuc2FmZV0KICB9OwogIGNvbmZpZ3VyZShzdGF0ZTE0LCBzZXR0aW5ncyk7CiAgaWYgKHN0YXRlMTQub3B0aW9ucy50aWdodERlZmluaXRpb25zKSB7CiAgICBzdGF0ZTE0LmpvaW4ucHVzaChqb2luRGVmaW5pdGlvbik7CiAgfQogIHN0YXRlMTQuaGFuZGxlID0gendpdGNoKCJ0eXBlIiwgewogICAgaW52YWxpZCwKICAgIHVua25vd24sCiAgICBoYW5kbGVyczogc3RhdGUxNC5oYW5kbGVycwogIH0pOwogIGxldCByZXN1bHQgPSBzdGF0ZTE0LmhhbmRsZSh0cmVlLCB2b2lkIDAsIHN0YXRlMTQsIHsKICAgIGJlZm9yZTogIlxuIiwKICAgIGFmdGVyOiAiXG4iLAogICAgbm93OiB7IGxpbmU6IDEsIGNvbHVtbjogMSB9LAogICAgbGluZVNoaWZ0OiAwCiAgfSk7CiAgaWYgKHJlc3VsdCAmJiByZXN1bHQuY2hhckNvZGVBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IDEwICYmIHJlc3VsdC5jaGFyQ29kZUF0KHJlc3VsdC5sZW5ndGggLSAxKSAhPT0gMTMpIHsKICAgIHJlc3VsdCArPSAiXG4iOwogIH0KICByZXR1cm4gcmVzdWx0OwogIGZ1bmN0aW9uIGVudGVyKG5hbWUpIHsKICAgIHN0YXRlMTQuc3RhY2sucHVzaChuYW1lKTsKICAgIHJldHVybiBleGl0MzsKICAgIGZ1bmN0aW9uIGV4aXQzKCkgewogICAgICBzdGF0ZTE0LnN0YWNrLnBvcCgpOwogICAgfQogIH0KfQpmdW5jdGlvbiBpbnZhbGlkKHZhbHVlMikgewogIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGhhbmRsZSB2YWx1ZSBgIiArIHZhbHVlMiArICJgLCBleHBlY3RlZCBub2RlIik7Cn0KZnVuY3Rpb24gdW5rbm93bih2YWx1ZTIpIHsKICBjb25zdCBub2RlMiA9ICgKICAgIC8qKiBAdHlwZSB7Tm9kZXN9ICovCiAgICB2YWx1ZTIKICApOwogIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGhhbmRsZSB1bmtub3duIG5vZGUgYCIgKyBub2RlMi50eXBlICsgImAiKTsKfQpmdW5jdGlvbiBqb2luRGVmaW5pdGlvbihsZWZ0LCByaWdodCkgewogIGlmIChsZWZ0LnR5cGUgPT09ICJkZWZpbml0aW9uIiAmJiBsZWZ0LnR5cGUgPT09IHJpZ2h0LnR5cGUpIHsKICAgIHJldHVybiAwOwogIH0KfQpmdW5jdGlvbiBjb250YWluZXJQaHJhc2luZ0JvdW5kKHBhcmVudCwgaW5mbykgewogIHJldHVybiBjb250YWluZXJQaHJhc2luZyhwYXJlbnQsIHRoaXMsIGluZm8pOwp9CmZ1bmN0aW9uIGNvbnRhaW5lckZsb3dCb3VuZChwYXJlbnQsIGluZm8pIHsKICByZXR1cm4gY29udGFpbmVyRmxvdyhwYXJlbnQsIHRoaXMsIGluZm8pOwp9CmZ1bmN0aW9uIHNhZmVCb3VuZCh2YWx1ZTIsIGNvbmZpZzMpIHsKICByZXR1cm4gc2FmZSh0aGlzLCB2YWx1ZTIsIGNvbmZpZzMpOwp9CnZhciBpbml0X2xpYjE1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF96d2l0Y2goKTsKICAgIGluaXRfY29uZmlndXJlKCk7CiAgICBpbml0X2hhbmRsZSgpOwogICAgaW5pdF9qb2luKCk7CiAgICBpbml0X3Vuc2FmZSgpOwogICAgaW5pdF9hc3NvY2lhdGlvbigpOwogICAgaW5pdF9jb21waWxlX3BhdHRlcm4oKTsKICAgIGluaXRfY29udGFpbmVyX3BocmFzaW5nKCk7CiAgICBpbml0X2NvbnRhaW5lcl9mbG93KCk7CiAgICBpbml0X2luZGVudF9saW5lcygpOwogICAgaW5pdF9zYWZlKCk7CiAgICBpbml0X3RyYWNrKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfdG9fbWFya2Rvd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMTUoKTsKICAgIGluaXRfaGFuZGxlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YWJsZUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFibGUvbGliL2luZGV4LmpzCmZ1bmN0aW9uIGdmbVRhYmxlRnJvbU1hcmtkb3duKCkgewogIHJldHVybiB7CiAgICBlbnRlcjogewogICAgICB0YWJsZTogZW50ZXJUYWJsZSwKICAgICAgdGFibGVEYXRhOiBlbnRlckNlbGwsCiAgICAgIHRhYmxlSGVhZGVyOiBlbnRlckNlbGwsCiAgICAgIHRhYmxlUm93OiBlbnRlclJvdwogICAgfSwKICAgIGV4aXQ6IHsKICAgICAgY29kZVRleHQ6IGV4aXRDb2RlVGV4dCwKICAgICAgdGFibGU6IGV4aXRUYWJsZSwKICAgICAgdGFibGVEYXRhOiBleGl0LAogICAgICB0YWJsZUhlYWRlcjogZXhpdCwKICAgICAgdGFibGVSb3c6IGV4aXQKICAgIH0KICB9Owp9CmZ1bmN0aW9uIGVudGVyVGFibGUodG9rZW4pIHsKICBjb25zdCBhbGlnbiA9IHRva2VuLl9hbGlnbjsKICBvayhhbGlnbiwgImV4cGVjdGVkIGBfYWxpZ25gIG9uIHRhYmxlIik7CiAgdGhpcy5lbnRlcigKICAgIHsKICAgICAgdHlwZTogInRhYmxlIiwKICAgICAgYWxpZ246IGFsaWduLm1hcChmdW5jdGlvbihkNikgewogICAgICAgIHJldHVybiBkNiA9PT0gIm5vbmUiID8gbnVsbCA6IGQ2OwogICAgICB9KSwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9LAogICAgdG9rZW4KICApOwogIHRoaXMuZGF0YS5pblRhYmxlID0gdHJ1ZTsKfQpmdW5jdGlvbiBleGl0VGFibGUodG9rZW4pIHsKICB0aGlzLmV4aXQodG9rZW4pOwogIHRoaXMuZGF0YS5pblRhYmxlID0gdm9pZCAwOwp9CmZ1bmN0aW9uIGVudGVyUm93KHRva2VuKSB7CiAgdGhpcy5lbnRlcih7IHR5cGU6ICJ0YWJsZVJvdyIsIGNoaWxkcmVuOiBbXSB9LCB0b2tlbik7Cn0KZnVuY3Rpb24gZXhpdCh0b2tlbikgewogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gZW50ZXJDZWxsKHRva2VuKSB7CiAgdGhpcy5lbnRlcih7IHR5cGU6ICJ0YWJsZUNlbGwiLCBjaGlsZHJlbjogW10gfSwgdG9rZW4pOwp9CmZ1bmN0aW9uIGV4aXRDb2RlVGV4dCh0b2tlbikgewogIGxldCB2YWx1ZTIgPSB0aGlzLnJlc3VtZSgpOwogIGlmICh0aGlzLmRhdGEuaW5UYWJsZSkgewogICAgdmFsdWUyID0gdmFsdWUyLnJlcGxhY2UoL1xcKFtcXHxdKS9nLCByZXBsYWNlKTsKICB9CiAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgb2sobm9kZTIudHlwZSA9PT0gImlubGluZUNvZGUiKTsKICBub2RlMi52YWx1ZSA9IHZhbHVlMjsKICB0aGlzLmV4aXQodG9rZW4pOwp9CmZ1bmN0aW9uIHJlcGxhY2UoJDAsICQxKSB7CiAgcmV0dXJuICQxID09PSAifCIgPyAkMSA6ICQwOwp9CmZ1bmN0aW9uIGdmbVRhYmxlVG9NYXJrZG93bihvcHRpb25zKSB7CiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9OwogIGNvbnN0IHBhZGRpbmcgPSBzZXR0aW5ncy50YWJsZUNlbGxQYWRkaW5nOwogIGNvbnN0IGFsaWduRGVsaW1pdGVycyA9IHNldHRpbmdzLnRhYmxlUGlwZUFsaWduOwogIGNvbnN0IHN0cmluZ0xlbmd0aCA9IHNldHRpbmdzLnN0cmluZ0xlbmd0aDsKICBjb25zdCBhcm91bmQgPSBwYWRkaW5nID8gIiAiIDogInwiOwogIHJldHVybiB7CiAgICB1bnNhZmU6IFsKICAgICAgeyBjaGFyYWN0ZXI6ICJcciIsIGluQ29uc3RydWN0OiAidGFibGVDZWxsIiB9LAogICAgICB7IGNoYXJhY3RlcjogIlxuIiwgaW5Db25zdHJ1Y3Q6ICJ0YWJsZUNlbGwiIH0sCiAgICAgIC8vIEEgcGlwZSwgd2hlbiBmb2xsb3dlZCBieSBhIHRhYiBvciBzcGFjZSAocGFkZGluZyksIG9yIGEgZGFzaCBvciBjb2xvbgogICAgICAvLyAodW5wYWRkZWQgZGVsaW1pdGVyIHJvdyksIGNvdWxkIHJlc3VsdCBpbiBhIHRhYmxlLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogInwiLCBhZnRlcjogIlsJIDotXSIgfSwKICAgICAgLy8gQSBwaXBlIGluIGEgY2VsbCBtdXN0IGJlIGVuY29kZWQuCiAgICAgIHsgY2hhcmFjdGVyOiAifCIsIGluQ29uc3RydWN0OiAidGFibGVDZWxsIiB9LAogICAgICAvLyBBIGNvbG9uIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBkYXNoLCBpbiB3aGljaCBjYXNlIGl0IGNvdWxkIHN0YXJ0IGEKICAgICAgLy8gZGVsaW1pdGVyIHJvdy4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICI6IiwgYWZ0ZXI6ICItIiB9LAogICAgICAvLyBBIGRlbGltaXRlciByb3cgY2FuIGFsc28gc3RhcnQgd2l0aCBhIGRhc2gsIHdoZW4gZm9sbG93ZWQgYnkgbW9yZQogICAgICAvLyBkYXNoZXMsIGEgY29sb24sIG9yIGEgcGlwZS4KICAgICAgLy8gVGhpcyBpcyBhIHN0cmljdGVyIHZlcnNpb24gdGhhbiB0aGUgYnVpbHQgaW4gY2hlY2sgZm9yIGxpc3RzLCB0aGVtYXRpYwogICAgICAvLyBicmVha3MsIGFuZCBzZXRleCBoZWFkaW5nIHVuZGVybGluZXMgdGhvdWdoOgogICAgICAvLyA8aHR0cHM6Ly9naXRodWIuY29tL3N5bnRheC10cmVlL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vYmxvYi81MWEyMDM4L2xpYi91bnNhZmUuanMjTDU3PgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIi0iLCBhZnRlcjogIls6fC1dIiB9CiAgICBdLAogICAgaGFuZGxlcnM6IHsKICAgICAgaW5saW5lQ29kZTogaW5saW5lQ29kZVdpdGhUYWJsZSwKICAgICAgdGFibGU6IGhhbmRsZVRhYmxlLAogICAgICB0YWJsZUNlbGw6IGhhbmRsZVRhYmxlQ2VsbCwKICAgICAgdGFibGVSb3c6IGhhbmRsZVRhYmxlUm93CiAgICB9CiAgfTsKICBmdW5jdGlvbiBoYW5kbGVUYWJsZShub2RlMiwgXzQsIHN0YXRlMTQsIGluZm8pIHsKICAgIHJldHVybiBzZXJpYWxpemVEYXRhKGhhbmRsZVRhYmxlQXNEYXRhKG5vZGUyLCBzdGF0ZTE0LCBpbmZvKSwgbm9kZTIuYWxpZ24pOwogIH0KICBmdW5jdGlvbiBoYW5kbGVUYWJsZVJvdyhub2RlMiwgXzQsIHN0YXRlMTQsIGluZm8pIHsKICAgIGNvbnN0IHJvdyA9IGhhbmRsZVRhYmxlUm93QXNEYXRhKG5vZGUyLCBzdGF0ZTE0LCBpbmZvKTsKICAgIGNvbnN0IHZhbHVlMiA9IHNlcmlhbGl6ZURhdGEoW3Jvd10pOwogICAgcmV0dXJuIHZhbHVlMi5zbGljZSgwLCB2YWx1ZTIuaW5kZXhPZigiXG4iKSk7CiAgfQogIGZ1bmN0aW9uIGhhbmRsZVRhYmxlQ2VsbChub2RlMiwgXzQsIHN0YXRlMTQsIGluZm8pIHsKICAgIGNvbnN0IGV4aXQzID0gc3RhdGUxNC5lbnRlcigidGFibGVDZWxsIik7CiAgICBjb25zdCBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigicGhyYXNpbmciKTsKICAgIGNvbnN0IHZhbHVlMiA9IHN0YXRlMTQuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIHsKICAgICAgLi4uaW5mbywKICAgICAgYmVmb3JlOiBhcm91bmQsCiAgICAgIGFmdGVyOiBhcm91bmQKICAgIH0pOwogICAgc3ViZXhpdCgpOwogICAgZXhpdDMoKTsKICAgIHJldHVybiB2YWx1ZTI7CiAgfQogIGZ1bmN0aW9uIHNlcmlhbGl6ZURhdGEobWF0cml4LCBhbGlnbikgewogICAgcmV0dXJuIG1hcmtkb3duVGFibGUobWF0cml4LCB7CiAgICAgIGFsaWduLAogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBgbWFya2Rvd24tdGFibGVgIHR5cGVzIHNob3VsZCBzdXBwb3J0IGBudWxsYC4KICAgICAgYWxpZ25EZWxpbWl0ZXJzLAogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBgbWFya2Rvd24tdGFibGVgIHR5cGVzIHNob3VsZCBzdXBwb3J0IGBudWxsYC4KICAgICAgcGFkZGluZywKICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYG1hcmtkb3duLXRhYmxlYCB0eXBlcyBzaG91bGQgc3VwcG9ydCBgbnVsbGAuCiAgICAgIHN0cmluZ0xlbmd0aAogICAgfSk7CiAgfQogIGZ1bmN0aW9uIGhhbmRsZVRhYmxlQXNEYXRhKG5vZGUyLCBzdGF0ZTE0LCBpbmZvKSB7CiAgICBjb25zdCBjaGlsZHJlbjIgPSBub2RlMi5jaGlsZHJlbjsKICAgIGxldCBpbmRleDIgPSAtMTsKICAgIGNvbnN0IHJlc3VsdCA9IFtdOwogICAgY29uc3Qgc3ViZXhpdCA9IHN0YXRlMTQuZW50ZXIoInRhYmxlIik7CiAgICB3aGlsZSAoKytpbmRleDIgPCBjaGlsZHJlbjIubGVuZ3RoKSB7CiAgICAgIHJlc3VsdFtpbmRleDJdID0gaGFuZGxlVGFibGVSb3dBc0RhdGEoY2hpbGRyZW4yW2luZGV4Ml0sIHN0YXRlMTQsIGluZm8pOwogICAgfQogICAgc3ViZXhpdCgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gaGFuZGxlVGFibGVSb3dBc0RhdGEobm9kZTIsIHN0YXRlMTQsIGluZm8pIHsKICAgIGNvbnN0IGNoaWxkcmVuMiA9IG5vZGUyLmNoaWxkcmVuOwogICAgbGV0IGluZGV4MiA9IC0xOwogICAgY29uc3QgcmVzdWx0ID0gW107CiAgICBjb25zdCBzdWJleGl0ID0gc3RhdGUxNC5lbnRlcigidGFibGVSb3ciKTsKICAgIHdoaWxlICgrK2luZGV4MiA8IGNoaWxkcmVuMi5sZW5ndGgpIHsKICAgICAgcmVzdWx0W2luZGV4Ml0gPSBoYW5kbGVUYWJsZUNlbGwoY2hpbGRyZW4yW2luZGV4Ml0sIG5vZGUyLCBzdGF0ZTE0LCBpbmZvKTsKICAgIH0KICAgIHN1YmV4aXQoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIGlubGluZUNvZGVXaXRoVGFibGUobm9kZTIsIHBhcmVudCwgc3RhdGUxNCkgewogICAgbGV0IHZhbHVlMiA9IGhhbmRsZS5pbmxpbmVDb2RlKG5vZGUyLCBwYXJlbnQsIHN0YXRlMTQpOwogICAgaWYgKHN0YXRlMTQuc3RhY2suaW5jbHVkZXMoInRhYmxlQ2VsbCIpKSB7CiAgICAgIHZhbHVlMiA9IHZhbHVlMi5yZXBsYWNlKC9cfC9nLCAiXFwkJiIpOwogICAgfQogICAgcmV0dXJuIHZhbHVlMjsKICB9Cn0KdmFyIGluaXRfbGliMTYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YWJsZUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFibGUvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVmYXVsdCgpOwogICAgaW5pdF9tYXJrZG93bl90YWJsZSgpOwogICAgaW5pdF9tZGFzdF91dGlsX3RvX21hcmtkb3duKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YWJsZUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFibGUvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9nZm1fdGFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YWJsZUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFibGUvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxNigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW1AMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXRhc2stbGlzdC1pdGVtL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBnZm1UYXNrTGlzdEl0ZW1Gcm9tTWFya2Rvd24oKSB7CiAgcmV0dXJuIHsKICAgIGV4aXQ6IHsKICAgICAgdGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZDogZXhpdENoZWNrLAogICAgICB0YXNrTGlzdENoZWNrVmFsdWVVbmNoZWNrZWQ6IGV4aXRDaGVjaywKICAgICAgcGFyYWdyYXBoOiBleGl0UGFyYWdyYXBoV2l0aFRhc2tMaXN0SXRlbQogICAgfQogIH07Cn0KZnVuY3Rpb24gZ2ZtVGFza0xpc3RJdGVtVG9NYXJrZG93bigpIHsKICByZXR1cm4gewogICAgdW5zYWZlOiBbeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICItIiwgYWZ0ZXI6ICJbOnwtXSIgfV0sCiAgICBoYW5kbGVyczogeyBsaXN0SXRlbTogbGlzdEl0ZW1XaXRoVGFza0xpc3RJdGVtIH0KICB9Owp9CmZ1bmN0aW9uIGV4aXRDaGVjayh0b2tlbikgewogIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDJdOwogIG9rKG5vZGUyLnR5cGUgPT09ICJsaXN0SXRlbSIpOwogIG5vZGUyLmNoZWNrZWQgPSB0b2tlbi50eXBlID09PSAidGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZCI7Cn0KZnVuY3Rpb24gZXhpdFBhcmFncmFwaFdpdGhUYXNrTGlzdEl0ZW0odG9rZW4pIHsKICBjb25zdCBwYXJlbnQgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMl07CiAgaWYgKHBhcmVudCAmJiBwYXJlbnQudHlwZSA9PT0gImxpc3RJdGVtIiAmJiB0eXBlb2YgcGFyZW50LmNoZWNrZWQgPT09ICJib29sZWFuIikgewogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBvayhub2RlMi50eXBlID09PSAicGFyYWdyYXBoIik7CiAgICBjb25zdCBoZWFkMiA9IG5vZGUyLmNoaWxkcmVuWzBdOwogICAgaWYgKGhlYWQyICYmIGhlYWQyLnR5cGUgPT09ICJ0ZXh0IikgewogICAgICBjb25zdCBzaWJsaW5nczIgPSBwYXJlbnQuY2hpbGRyZW47CiAgICAgIGxldCBpbmRleDIgPSAtMTsKICAgICAgbGV0IGZpcnN0UGFyYWdocmFwaDsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgc2libGluZ3MyLmxlbmd0aCkgewogICAgICAgIGNvbnN0IHNpYmxpbmcgPSBzaWJsaW5nczJbaW5kZXgyXTsKICAgICAgICBpZiAoc2libGluZy50eXBlID09PSAicGFyYWdyYXBoIikgewogICAgICAgICAgZmlyc3RQYXJhZ2hyYXBoID0gc2libGluZzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZmlyc3RQYXJhZ2hyYXBoID09PSBub2RlMikgewogICAgICAgIGhlYWQyLnZhbHVlID0gaGVhZDIudmFsdWUuc2xpY2UoMSk7CiAgICAgICAgaWYgKGhlYWQyLnZhbHVlLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgbm9kZTIuY2hpbGRyZW4uc2hpZnQoKTsKICAgICAgICB9IGVsc2UgaWYgKG5vZGUyLnBvc2l0aW9uICYmIGhlYWQyLnBvc2l0aW9uICYmIHR5cGVvZiBoZWFkMi5wb3NpdGlvbi5zdGFydC5vZmZzZXQgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICBoZWFkMi5wb3NpdGlvbi5zdGFydC5jb2x1bW4rKzsKICAgICAgICAgIGhlYWQyLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCsrOwogICAgICAgICAgbm9kZTIucG9zaXRpb24uc3RhcnQgPSBPYmplY3QuYXNzaWduKHt9LCBoZWFkMi5wb3NpdGlvbi5zdGFydCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gbGlzdEl0ZW1XaXRoVGFza0xpc3RJdGVtKG5vZGUyLCBwYXJlbnQsIHN0YXRlMTQsIGluZm8pIHsKICBjb25zdCBoZWFkMiA9IG5vZGUyLmNoaWxkcmVuWzBdOwogIGNvbnN0IGNoZWNrYWJsZSA9IHR5cGVvZiBub2RlMi5jaGVja2VkID09PSAiYm9vbGVhbiIgJiYgaGVhZDIgJiYgaGVhZDIudHlwZSA9PT0gInBhcmFncmFwaCI7CiAgY29uc3QgY2hlY2tib3ggPSAiWyIgKyAobm9kZTIuY2hlY2tlZCA/ICJ4IiA6ICIgIikgKyAiXSAiOwogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTE0LmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgaWYgKGNoZWNrYWJsZSkgewogICAgdHJhY2tlci5tb3ZlKGNoZWNrYm94KTsKICB9CiAgbGV0IHZhbHVlMiA9IGhhbmRsZS5saXN0SXRlbShub2RlMiwgcGFyZW50LCBzdGF0ZTE0LCB7CiAgICAuLi5pbmZvLAogICAgLi4udHJhY2tlci5jdXJyZW50KCkKICB9KTsKICBpZiAoY2hlY2thYmxlKSB7CiAgICB2YWx1ZTIgPSB2YWx1ZTIucmVwbGFjZSgvXig/OlsqKy1dfFxkK1wuKShbXHJcbl18IHsxLDN9KS8sIGNoZWNrKTsKICB9CiAgcmV0dXJuIHZhbHVlMjsKICBmdW5jdGlvbiBjaGVjaygkMCkgewogICAgcmV0dXJuICQwICsgY2hlY2tib3g7CiAgfQp9CnZhciBpbml0X2xpYjE3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW1AMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXRhc2stbGlzdC1pdGVtL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHQoKTsKICAgIGluaXRfbWRhc3RfdXRpbF90b19tYXJrZG93bigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW1AMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXRhc2stbGlzdC1pdGVtL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfZ2ZtX3Rhc2tfbGlzdF9pdGVtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW1AMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXRhc2stbGlzdC1pdGVtL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMTcoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtQDMuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS9saWIvaW5kZXguanMKZnVuY3Rpb24gZ2ZtRnJvbU1hcmtkb3duKCkgewogIHJldHVybiBbCiAgICBnZm1BdXRvbGlua0xpdGVyYWxGcm9tTWFya2Rvd24oKSwKICAgIGdmbUZvb3Rub3RlRnJvbU1hcmtkb3duKCksCiAgICBnZm1TdHJpa2V0aHJvdWdoRnJvbU1hcmtkb3duKCksCiAgICBnZm1UYWJsZUZyb21NYXJrZG93bigpLAogICAgZ2ZtVGFza0xpc3RJdGVtRnJvbU1hcmtkb3duKCkKICBdOwp9CmZ1bmN0aW9uIGdmbVRvTWFya2Rvd24ob3B0aW9ucykgewogIHJldHVybiB7CiAgICBleHRlbnNpb25zOiBbCiAgICAgIGdmbUF1dG9saW5rTGl0ZXJhbFRvTWFya2Rvd24oKSwKICAgICAgZ2ZtRm9vdG5vdGVUb01hcmtkb3duKG9wdGlvbnMpLAogICAgICBnZm1TdHJpa2V0aHJvdWdoVG9NYXJrZG93bigpLAogICAgICBnZm1UYWJsZVRvTWFya2Rvd24ob3B0aW9ucyksCiAgICAgIGdmbVRhc2tMaXN0SXRlbVRvTWFya2Rvd24oKQogICAgXQogIH07Cn0KdmFyIGluaXRfbGliMTggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbUAzLjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0vbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWRhc3RfdXRpbF9nZm1fYXV0b2xpbmtfbGl0ZXJhbCgpOwogICAgaW5pdF9tZGFzdF91dGlsX2dmbV9mb290bm90ZSgpOwogICAgaW5pdF9tZGFzdF91dGlsX2dmbV9zdHJpa2V0aHJvdWdoKCk7CiAgICBpbml0X21kYXN0X3V0aWxfZ2ZtX3RhYmxlKCk7CiAgICBpbml0X21kYXN0X3V0aWxfZ2ZtX3Rhc2tfbGlzdF9pdGVtKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbUAzLjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0vaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9nZm0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbUAzLjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0vaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxOCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtY2h1bmtlZEAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY2h1bmtlZC9pbmRleC5qcwpmdW5jdGlvbiBzcGxpY2UobGlzdDUsIHN0YXJ0LCByZW1vdmUyLCBpdGVtcykgewogIGNvbnN0IGVuZDMgPSBsaXN0NS5sZW5ndGg7CiAgbGV0IGNodW5rU3RhcnQgPSAwOwogIGxldCBwYXJhbWV0ZXJzOwogIGlmIChzdGFydCA8IDApIHsKICAgIHN0YXJ0ID0gLXN0YXJ0ID4gZW5kMyA/IDAgOiBlbmQzICsgc3RhcnQ7CiAgfSBlbHNlIHsKICAgIHN0YXJ0ID0gc3RhcnQgPiBlbmQzID8gZW5kMyA6IHN0YXJ0OwogIH0KICByZW1vdmUyID0gcmVtb3ZlMiA+IDAgPyByZW1vdmUyIDogMDsKICBpZiAoaXRlbXMubGVuZ3RoIDwgMWU0KSB7CiAgICBwYXJhbWV0ZXJzID0gQXJyYXkuZnJvbShpdGVtcyk7CiAgICBwYXJhbWV0ZXJzLnVuc2hpZnQoc3RhcnQsIHJlbW92ZTIpOwogICAgbGlzdDUuc3BsaWNlKC4uLnBhcmFtZXRlcnMpOwogIH0gZWxzZSB7CiAgICBpZiAocmVtb3ZlMikgbGlzdDUuc3BsaWNlKHN0YXJ0LCByZW1vdmUyKTsKICAgIHdoaWxlIChjaHVua1N0YXJ0IDwgaXRlbXMubGVuZ3RoKSB7CiAgICAgIHBhcmFtZXRlcnMgPSBpdGVtcy5zbGljZShjaHVua1N0YXJ0LCBjaHVua1N0YXJ0ICsgMWU0KTsKICAgICAgcGFyYW1ldGVycy51bnNoaWZ0KHN0YXJ0LCAwKTsKICAgICAgbGlzdDUuc3BsaWNlKC4uLnBhcmFtZXRlcnMpOwogICAgICBjaHVua1N0YXJ0ICs9IDFlNDsKICAgICAgc3RhcnQgKz0gMWU0OwogICAgfQogIH0KfQpmdW5jdGlvbiBwdXNoKGxpc3Q1LCBpdGVtcykgewogIGlmIChsaXN0NS5sZW5ndGggPiAwKSB7CiAgICBzcGxpY2UobGlzdDUsIGxpc3Q1Lmxlbmd0aCwgMCwgaXRlbXMpOwogICAgcmV0dXJuIGxpc3Q1OwogIH0KICByZXR1cm4gaXRlbXM7Cn0KdmFyIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWNodW5rZWRAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNodW5rZWQvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtY29tYmluZS1leHRlbnNpb25zQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jb21iaW5lLWV4dGVuc2lvbnMvaW5kZXguanMKZnVuY3Rpb24gY29tYmluZUV4dGVuc2lvbnMoZXh0ZW5zaW9ucykgewogIGNvbnN0IGFsbDMgPSB7fTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgZXh0ZW5zaW9ucy5sZW5ndGgpIHsKICAgIHN5bnRheEV4dGVuc2lvbihhbGwzLCBleHRlbnNpb25zW2luZGV4Ml0pOwogIH0KICByZXR1cm4gYWxsMzsKfQpmdW5jdGlvbiBzeW50YXhFeHRlbnNpb24oYWxsMywgZXh0ZW5zaW9uMikgewogIGxldCBob29rOwogIGZvciAoaG9vayBpbiBleHRlbnNpb24yKSB7CiAgICBjb25zdCBtYXliZSA9IGhhc093blByb3BlcnR5LmNhbGwoYWxsMywgaG9vaykgPyBhbGwzW2hvb2tdIDogdm9pZCAwOwogICAgY29uc3QgbGVmdCA9IG1heWJlIHx8IChhbGwzW2hvb2tdID0ge30pOwogICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb24yW2hvb2tdOwogICAgbGV0IGNvZGU0OwogICAgaWYgKHJpZ2h0KSB7CiAgICAgIGZvciAoY29kZTQgaW4gcmlnaHQpIHsKICAgICAgICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwobGVmdCwgY29kZTQpKSBsZWZ0W2NvZGU0XSA9IFtdOwogICAgICAgIGNvbnN0IHZhbHVlMiA9IHJpZ2h0W2NvZGU0XTsKICAgICAgICBjb25zdHJ1Y3RzKAogICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBMb29rcyBsaWtlIGEgbGlzdC4KICAgICAgICAgIGxlZnRbY29kZTRdLAogICAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZTIpID8gdmFsdWUyIDogdmFsdWUyID8gW3ZhbHVlMl0gOiBbXQogICAgICAgICk7CiAgICAgIH0KICAgIH0KICB9Cn0KZnVuY3Rpb24gY29uc3RydWN0cyhleGlzdGluZywgbGlzdDUpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgY29uc3QgYmVmb3JlID0gW107CiAgd2hpbGUgKCsraW5kZXgyIDwgbGlzdDUubGVuZ3RoKSB7CiAgICA7CiAgICAobGlzdDVbaW5kZXgyXS5hZGQgPT09ICJhZnRlciIgPyBleGlzdGluZyA6IGJlZm9yZSkucHVzaChsaXN0NVtpbmRleDJdKTsKICB9CiAgc3BsaWNlKGV4aXN0aW5nLCAwLCAwLCBiZWZvcmUpOwp9CmZ1bmN0aW9uIGNvbWJpbmVIdG1sRXh0ZW5zaW9ucyhodG1sRXh0ZW5zaW9ucykgewogIGNvbnN0IGhhbmRsZXJzMiA9IHt9OwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBodG1sRXh0ZW5zaW9ucy5sZW5ndGgpIHsKICAgIGh0bWxFeHRlbnNpb24oaGFuZGxlcnMyLCBodG1sRXh0ZW5zaW9uc1tpbmRleDJdKTsKICB9CiAgcmV0dXJuIGhhbmRsZXJzMjsKfQpmdW5jdGlvbiBodG1sRXh0ZW5zaW9uKGFsbDMsIGV4dGVuc2lvbjIpIHsKICBsZXQgaG9vazsKICBmb3IgKGhvb2sgaW4gZXh0ZW5zaW9uMikgewogICAgY29uc3QgbWF5YmUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFsbDMsIGhvb2spID8gYWxsM1tob29rXSA6IHZvaWQgMDsKICAgIGNvbnN0IGxlZnQgPSBtYXliZSB8fCAoYWxsM1tob29rXSA9IHt9KTsKICAgIGNvbnN0IHJpZ2h0ID0gZXh0ZW5zaW9uMltob29rXTsKICAgIGxldCB0eXBlNTsKICAgIGlmIChyaWdodCkgewogICAgICBmb3IgKHR5cGU1IGluIHJpZ2h0KSB7CiAgICAgICAgbGVmdFt0eXBlNV0gPSByaWdodFt0eXBlNV07CiAgICAgIH0KICAgIH0KICB9Cn0KdmFyIGhhc093blByb3BlcnR5Owp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9jb21iaW5lX2V4dGVuc2lvbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1jb21iaW5lLWV4dGVuc2lvbnNAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNvbWJpbmUtZXh0ZW5zaW9ucy9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NodW5rZWQoKTsKICAgIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsL2xpYi9zeW50YXguanMKZnVuY3Rpb24gZ2ZtQXV0b2xpbmtMaXRlcmFsKCkgewogIHJldHVybiB7CiAgICB0ZXh0OiB0ZXh0MgogIH07Cn0KZnVuY3Rpb24gdG9rZW5pemVFbWFpbEF1dG9saW5rKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBkb3Q7CiAgbGV0IGRhdGE7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoIWdmbUF0ZXh0KGNvZGU0KSB8fCAhcHJldmlvdXNFbWFpbC5jYWxsKHNlbGYyLCBzZWxmMi5wcmV2aW91cykgfHwgcHJldmlvdXNVbmJhbGFuY2VkKHNlbGYyLmV2ZW50cykpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJsaXRlcmFsQXV0b2xpbmsiKTsKICAgIGVmZmVjdHMuZW50ZXIoImxpdGVyYWxBdXRvbGlua0VtYWlsIik7CiAgICByZXR1cm4gYXRleHQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhdGV4dChjb2RlNCkgewogICAgaWYgKGdmbUF0ZXh0KGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gYXRleHQ7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDY0KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBlbWFpbERvbWFpbjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBlbWFpbERvbWFpbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NikgewogICAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhlbWFpbERvbWFpbkRvdFRyYWlsLCBlbWFpbERvbWFpbkFmdGVyLCBlbWFpbERvbWFpbkRvdCkoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NSB8fCBjb2RlNCA9PT0gOTUgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpKSB7CiAgICAgIGRhdGEgPSB0cnVlOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gZW1haWxEb21haW47CiAgICB9CiAgICByZXR1cm4gZW1haWxEb21haW5BZnRlcihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGVtYWlsRG9tYWluRG90KGNvZGU0KSB7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZG90ID0gdHJ1ZTsKICAgIHJldHVybiBlbWFpbERvbWFpbjsKICB9CiAgZnVuY3Rpb24gZW1haWxEb21haW5BZnRlcihjb2RlNCkgewogICAgaWYgKGRhdGEgJiYgZG90ICYmIGFzY2lpQWxwaGEoc2VsZjIucHJldmlvdXMpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgibGl0ZXJhbEF1dG9saW5rRW1haWwiKTsKICAgICAgZWZmZWN0cy5leGl0KCJsaXRlcmFsQXV0b2xpbmsiKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVXd3dBdXRvbGluayhlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gd3d3U3RhcnQ7CiAgZnVuY3Rpb24gd3d3U3RhcnQoY29kZTQpIHsKICAgIGlmIChjb2RlNCAhPT0gODcgJiYgY29kZTQgIT09IDExOSB8fCAhcHJldmlvdXNXd3cuY2FsbChzZWxmMiwgc2VsZjIucHJldmlvdXMpIHx8IHByZXZpb3VzVW5iYWxhbmNlZChzZWxmMi5ldmVudHMpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigibGl0ZXJhbEF1dG9saW5rIik7CiAgICBlZmZlY3RzLmVudGVyKCJsaXRlcmFsQXV0b2xpbmtXd3ciKTsKICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKHd3d1ByZWZpeCwgZWZmZWN0cy5hdHRlbXB0KGRvbWFpbiwgZWZmZWN0cy5hdHRlbXB0KHBhdGgsIHd3d0FmdGVyKSwgbm9rKSwgbm9rKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHd3d0FmdGVyKGNvZGU0KSB7CiAgICBlZmZlY3RzLmV4aXQoImxpdGVyYWxBdXRvbGlua1d3dyIpOwogICAgZWZmZWN0cy5leGl0KCJsaXRlcmFsQXV0b2xpbmsiKTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVByb3RvY29sQXV0b2xpbmsoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IGJ1ZmZlcjIgPSAiIjsKICBsZXQgc2VlbiA9IGZhbHNlOwogIHJldHVybiBwcm90b2NvbFN0YXJ0OwogIGZ1bmN0aW9uIHByb3RvY29sU3RhcnQoY29kZTQpIHsKICAgIGlmICgoY29kZTQgPT09IDcyIHx8IGNvZGU0ID09PSAxMDQpICYmIHByZXZpb3VzUHJvdG9jb2wuY2FsbChzZWxmMiwgc2VsZjIucHJldmlvdXMpICYmICFwcmV2aW91c1VuYmFsYW5jZWQoc2VsZjIuZXZlbnRzKSkgewogICAgICBlZmZlY3RzLmVudGVyKCJsaXRlcmFsQXV0b2xpbmsiKTsKICAgICAgZWZmZWN0cy5lbnRlcigibGl0ZXJhbEF1dG9saW5rSHR0cCIpOwogICAgICBidWZmZXIyICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGU0KTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHByb3RvY29sUHJlZml4SW5zaWRlOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHByb3RvY29sUHJlZml4SW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoYXNjaWlBbHBoYShjb2RlNCkgJiYgYnVmZmVyMi5sZW5ndGggPCA1KSB7CiAgICAgIGJ1ZmZlcjIgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZTQpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gcHJvdG9jb2xQcmVmaXhJbnNpZGU7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDU4KSB7CiAgICAgIGNvbnN0IHByb3RvY29sID0gYnVmZmVyMi50b0xvd2VyQ2FzZSgpOwogICAgICBpZiAocHJvdG9jb2wgPT09ICJodHRwIiB8fCBwcm90b2NvbCA9PT0gImh0dHBzIikgewogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgcmV0dXJuIHByb3RvY29sU2xhc2hlc0luc2lkZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHByb3RvY29sU2xhc2hlc0luc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBpZiAoc2VlbikgewogICAgICAgIHJldHVybiBhZnRlclByb3RvY29sOwogICAgICB9CiAgICAgIHNlZW4gPSB0cnVlOwogICAgICByZXR1cm4gcHJvdG9jb2xTbGFzaGVzSW5zaWRlOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGFmdGVyUHJvdG9jb2woY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCA9PT0gbnVsbCB8fCBhc2NpaUNvbnRyb2woY29kZTQpIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpIHx8IHVuaWNvZGVXaGl0ZXNwYWNlKGNvZGU0KSB8fCB1bmljb2RlUHVuY3R1YXRpb24oY29kZTQpID8gbm9rKGNvZGU0KSA6IGVmZmVjdHMuYXR0ZW1wdChkb21haW4sIGVmZmVjdHMuYXR0ZW1wdChwYXRoLCBwcm90b2NvbEFmdGVyKSwgbm9rKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHByb3RvY29sQWZ0ZXIoY29kZTQpIHsKICAgIGVmZmVjdHMuZXhpdCgibGl0ZXJhbEF1dG9saW5rSHR0cCIpOwogICAgZWZmZWN0cy5leGl0KCJsaXRlcmFsQXV0b2xpbmsiKTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVd3d1ByZWZpeChlZmZlY3RzLCBvazMsIG5vaykgewogIGxldCBzaXplID0gMDsKICByZXR1cm4gd3d3UHJlZml4SW5zaWRlOwogIGZ1bmN0aW9uIHd3d1ByZWZpeEluc2lkZShjb2RlNCkgewogICAgaWYgKChjb2RlNCA9PT0gODcgfHwgY29kZTQgPT09IDExOSkgJiYgc2l6ZSA8IDMpIHsKICAgICAgc2l6ZSsrOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gd3d3UHJlZml4SW5zaWRlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NiAmJiBzaXplID09PSAzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB3d3dQcmVmaXhBZnRlcjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiB3d3dQcmVmaXhBZnRlcihjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSBudWxsID8gbm9rKGNvZGU0KSA6IG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplRG9tYWluKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgbGV0IHVuZGVyc2NvcmVJbkxhc3RTZWdtZW50OwogIGxldCB1bmRlcnNjb3JlSW5MYXN0TGFzdFNlZ21lbnQ7CiAgbGV0IHNlZW47CiAgcmV0dXJuIGRvbWFpbkluc2lkZTsKICBmdW5jdGlvbiBkb21haW5JbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDYgfHwgY29kZTQgPT09IDk1KSB7CiAgICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKHRyYWlsLCBkb21haW5BZnRlciwgZG9tYWluQXRQdW5jdHVhdGlvbikoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpIHx8IHVuaWNvZGVXaGl0ZXNwYWNlKGNvZGU0KSB8fCBjb2RlNCAhPT0gNDUgJiYgdW5pY29kZVB1bmN0dWF0aW9uKGNvZGU0KSkgewogICAgICByZXR1cm4gZG9tYWluQWZ0ZXIoY29kZTQpOwogICAgfQogICAgc2VlbiA9IHRydWU7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGRvbWFpbkluc2lkZTsKICB9CiAgZnVuY3Rpb24gZG9tYWluQXRQdW5jdHVhdGlvbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5NSkgewogICAgICB1bmRlcnNjb3JlSW5MYXN0U2VnbWVudCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICB1bmRlcnNjb3JlSW5MYXN0TGFzdFNlZ21lbnQgPSB1bmRlcnNjb3JlSW5MYXN0U2VnbWVudDsKICAgICAgdW5kZXJzY29yZUluTGFzdFNlZ21lbnQgPSB2b2lkIDA7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGRvbWFpbkluc2lkZTsKICB9CiAgZnVuY3Rpb24gZG9tYWluQWZ0ZXIoY29kZTQpIHsKICAgIGlmICh1bmRlcnNjb3JlSW5MYXN0TGFzdFNlZ21lbnQgfHwgdW5kZXJzY29yZUluTGFzdFNlZ21lbnQgfHwgIXNlZW4pIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVQYXRoKGVmZmVjdHMsIG9rMykgewogIGxldCBzaXplT3BlbiA9IDA7CiAgbGV0IHNpemVDbG9zZSA9IDA7CiAgcmV0dXJuIHBhdGhJbnNpZGU7CiAgZnVuY3Rpb24gcGF0aEluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0MCkgewogICAgICBzaXplT3BlbisrOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gcGF0aEluc2lkZTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDEgJiYgc2l6ZUNsb3NlIDwgc2l6ZU9wZW4pIHsKICAgICAgcmV0dXJuIHBhdGhBdFB1bmN0dWF0aW9uKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gMzMgfHwgY29kZTQgPT09IDM0IHx8IGNvZGU0ID09PSAzOCB8fCBjb2RlNCA9PT0gMzkgfHwgY29kZTQgPT09IDQxIHx8IGNvZGU0ID09PSA0MiB8fCBjb2RlNCA9PT0gNDQgfHwgY29kZTQgPT09IDQ2IHx8IGNvZGU0ID09PSA1OCB8fCBjb2RlNCA9PT0gNTkgfHwgY29kZTQgPT09IDYwIHx8IGNvZGU0ID09PSA2MyB8fCBjb2RlNCA9PT0gOTMgfHwgY29kZTQgPT09IDk1IHx8IGNvZGU0ID09PSAxMjYpIHsKICAgICAgcmV0dXJuIGVmZmVjdHMuY2hlY2sodHJhaWwsIG9rMywgcGF0aEF0UHVuY3R1YXRpb24pKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSB8fCB1bmljb2RlV2hpdGVzcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIHBhdGhJbnNpZGU7CiAgfQogIGZ1bmN0aW9uIHBhdGhBdFB1bmN0dWF0aW9uKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQxKSB7CiAgICAgIHNpemVDbG9zZSsrOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBwYXRoSW5zaWRlOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVRyYWlsKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIHRyYWlsMjsKICBmdW5jdGlvbiB0cmFpbDIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMzMgfHwgY29kZTQgPT09IDM0IHx8IGNvZGU0ID09PSAzOSB8fCBjb2RlNCA9PT0gNDEgfHwgY29kZTQgPT09IDQyIHx8IGNvZGU0ID09PSA0NCB8fCBjb2RlNCA9PT0gNDYgfHwgY29kZTQgPT09IDU4IHx8IGNvZGU0ID09PSA1OSB8fCBjb2RlNCA9PT0gNjMgfHwgY29kZTQgPT09IDk1IHx8IGNvZGU0ID09PSAxMjYpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRyYWlsMjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gMzgpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRyYWlsQ2hhcmFjdGVyUmVmZXJlbmNlU3RhcnQ7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0cmFpbEJyYWNrZXRBZnRlcjsKICAgIH0KICAgIGlmICgKICAgICAgLy8gYDxgIGlzIGFuIGVuZC4KICAgICAgY29kZTQgPT09IDYwIHx8IC8vIFNvIGlzIHdoaXRlc3BhY2UuCiAgICAgIGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpIHx8IHVuaWNvZGVXaGl0ZXNwYWNlKGNvZGU0KQogICAgKSB7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRyYWlsQnJhY2tldEFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDQwIHx8IGNvZGU0ID09PSA5MSB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSB8fCB1bmljb2RlV2hpdGVzcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gdHJhaWwyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdHJhaWxDaGFyYWN0ZXJSZWZlcmVuY2VTdGFydChjb2RlNCkgewogICAgcmV0dXJuIGFzY2lpQWxwaGEoY29kZTQpID8gdHJhaWxDaGFyYWN0ZXJSZWZlcmVuY2VJbnNpZGUoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdHJhaWxDaGFyYWN0ZXJSZWZlcmVuY2VJbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNTkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRyYWlsMjsKICAgIH0KICAgIGlmIChhc2NpaUFscGhhKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdHJhaWxDaGFyYWN0ZXJSZWZlcmVuY2VJbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVFbWFpbERvbWFpbkRvdFRyYWlsKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGFmdGVyOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgcmV0dXJuIGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSA/IG5vayhjb2RlNCkgOiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiBwcmV2aW91c1d3dyhjb2RlNCkgewogIHJldHVybiBjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gNDAgfHwgY29kZTQgPT09IDQyIHx8IGNvZGU0ID09PSA5NSB8fCBjb2RlNCA9PT0gOTEgfHwgY29kZTQgPT09IDkzIHx8IGNvZGU0ID09PSAxMjYgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCk7Cn0KZnVuY3Rpb24gcHJldmlvdXNQcm90b2NvbChjb2RlNCkgewogIHJldHVybiAhYXNjaWlBbHBoYShjb2RlNCk7Cn0KZnVuY3Rpb24gcHJldmlvdXNFbWFpbChjb2RlNCkgewogIHJldHVybiAhKGNvZGU0ID09PSA0NyB8fCBnZm1BdGV4dChjb2RlNCkpOwp9CmZ1bmN0aW9uIGdmbUF0ZXh0KGNvZGU0KSB7CiAgcmV0dXJuIGNvZGU0ID09PSA0MyB8fCBjb2RlNCA9PT0gNDUgfHwgY29kZTQgPT09IDQ2IHx8IGNvZGU0ID09PSA5NSB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCk7Cn0KZnVuY3Rpb24gcHJldmlvdXNVbmJhbGFuY2VkKGV2ZW50cykgewogIGxldCBpbmRleDIgPSBldmVudHMubGVuZ3RoOwogIGxldCByZXN1bHQgPSBmYWxzZTsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIGNvbnN0IHRva2VuID0gZXZlbnRzW2luZGV4Ml1bMV07CiAgICBpZiAoKHRva2VuLnR5cGUgPT09ICJsYWJlbExpbmsiIHx8IHRva2VuLnR5cGUgPT09ICJsYWJlbEltYWdlIikgJiYgIXRva2VuLl9iYWxhbmNlZCkgewogICAgICByZXN1bHQgPSB0cnVlOwogICAgICBicmVhazsKICAgIH0KICAgIGlmICh0b2tlbi5fZ2ZtQXV0b2xpbmtMaXRlcmFsV2Fsa2VkSW50bykgewogICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgYnJlYWs7CiAgICB9CiAgfQogIGlmIChldmVudHMubGVuZ3RoID4gMCAmJiAhcmVzdWx0KSB7CiAgICBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLl9nZm1BdXRvbGlua0xpdGVyYWxXYWxrZWRJbnRvID0gdHJ1ZTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgd3d3UHJlZml4LCBkb21haW4sIHBhdGgsIHRyYWlsLCBlbWFpbERvbWFpbkRvdFRyYWlsLCB3d3dBdXRvbGluaywgcHJvdG9jb2xBdXRvbGluaywgZW1haWxBdXRvbGluaywgdGV4dDIsIGNvZGUyOwp2YXIgaW5pdF9zeW50YXggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsL2xpYi9zeW50YXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIHd3d1ByZWZpeCA9IHsKICAgICAgdG9rZW5pemU6IHRva2VuaXplV3d3UHJlZml4LAogICAgICBwYXJ0aWFsOiB0cnVlCiAgICB9OwogICAgZG9tYWluID0gewogICAgICB0b2tlbml6ZTogdG9rZW5pemVEb21haW4sCiAgICAgIHBhcnRpYWw6IHRydWUKICAgIH07CiAgICBwYXRoID0gewogICAgICB0b2tlbml6ZTogdG9rZW5pemVQYXRoLAogICAgICBwYXJ0aWFsOiB0cnVlCiAgICB9OwogICAgdHJhaWwgPSB7CiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVRyYWlsLAogICAgICBwYXJ0aWFsOiB0cnVlCiAgICB9OwogICAgZW1haWxEb21haW5Eb3RUcmFpbCA9IHsKICAgICAgdG9rZW5pemU6IHRva2VuaXplRW1haWxEb21haW5Eb3RUcmFpbCwKICAgICAgcGFydGlhbDogdHJ1ZQogICAgfTsKICAgIHd3d0F1dG9saW5rID0gewogICAgICBuYW1lOiAid3d3QXV0b2xpbmsiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVXd3dBdXRvbGluaywKICAgICAgcHJldmlvdXM6IHByZXZpb3VzV3d3CiAgICB9OwogICAgcHJvdG9jb2xBdXRvbGluayA9IHsKICAgICAgbmFtZTogInByb3RvY29sQXV0b2xpbmsiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVQcm90b2NvbEF1dG9saW5rLAogICAgICBwcmV2aW91czogcHJldmlvdXNQcm90b2NvbAogICAgfTsKICAgIGVtYWlsQXV0b2xpbmsgPSB7CiAgICAgIG5hbWU6ICJlbWFpbEF1dG9saW5rIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplRW1haWxBdXRvbGluaywKICAgICAgcHJldmlvdXM6IHByZXZpb3VzRW1haWwKICAgIH07CiAgICB0ZXh0MiA9IHt9OwogICAgY29kZTIgPSA0ODsKICAgIHdoaWxlIChjb2RlMiA8IDEyMykgewogICAgICB0ZXh0Mltjb2RlMl0gPSBlbWFpbEF1dG9saW5rOwogICAgICBjb2RlMisrOwogICAgICBpZiAoY29kZTIgPT09IDU4KSBjb2RlMiA9IDY1OwogICAgICBlbHNlIGlmIChjb2RlMiA9PT0gOTEpIGNvZGUyID0gOTc7CiAgICB9CiAgICB0ZXh0Mls0M10gPSBlbWFpbEF1dG9saW5rOwogICAgdGV4dDJbNDVdID0gZW1haWxBdXRvbGluazsKICAgIHRleHQyWzQ2XSA9IGVtYWlsQXV0b2xpbms7CiAgICB0ZXh0Mls5NV0gPSBlbWFpbEF1dG9saW5rOwogICAgdGV4dDJbNzJdID0gW2VtYWlsQXV0b2xpbmssIHByb3RvY29sQXV0b2xpbmtdOwogICAgdGV4dDJbMTA0XSA9IFtlbWFpbEF1dG9saW5rLCBwcm90b2NvbEF1dG9saW5rXTsKICAgIHRleHQyWzg3XSA9IFtlbWFpbEF1dG9saW5rLCB3d3dBdXRvbGlua107CiAgICB0ZXh0MlsxMTldID0gW2VtYWlsQXV0b2xpbmssIHd3d0F1dG9saW5rXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWVuY29kZUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtZW5jb2RlL2luZGV4LmpzCmZ1bmN0aW9uIGVuY29kZSh2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyLnJlcGxhY2UoL1siJjw+XS9nLCByZXBsYWNlNSk7CiAgZnVuY3Rpb24gcmVwbGFjZTUodmFsdWUzKSB7CiAgICByZXR1cm4gIiYiICsgY2hhcmFjdGVyUmVmZXJlbmNlc1sKICAgICAgLyoqIEB0eXBlIHtrZXlvZiB0eXBlb2YgY2hhcmFjdGVyUmVmZXJlbmNlc30gKi8KICAgICAgdmFsdWUzCiAgICBdICsgIjsiOwogIH0KfQp2YXIgY2hhcmFjdGVyUmVmZXJlbmNlczsKdmFyIGluaXRfbWljcm9tYXJrX3V0aWxfZW5jb2RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtZW5jb2RlQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1lbmNvZGUvaW5kZXguanMiKCkgewogICAgY2hhcmFjdGVyUmVmZXJlbmNlcyA9IHsgJyInOiAicXVvdCIsICImIjogImFtcCIsICI8IjogImx0IiwgIj4iOiAiZ3QiIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1zYW5pdGl6ZS11cmlAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXNhbml0aXplLXVyaS9pbmRleC5qcwpmdW5jdGlvbiBzYW5pdGl6ZVVyaSh1cmwsIHByb3RvY29sKSB7CiAgY29uc3QgdmFsdWUyID0gZW5jb2RlKG5vcm1hbGl6ZVVyaSh1cmwgfHwgIiIpKTsKICBpZiAoIXByb3RvY29sKSB7CiAgICByZXR1cm4gdmFsdWUyOwogIH0KICBjb25zdCBjb2xvbiA9IHZhbHVlMi5pbmRleE9mKCI6Iik7CiAgY29uc3QgcXVlc3Rpb25NYXJrID0gdmFsdWUyLmluZGV4T2YoIj8iKTsKICBjb25zdCBudW1iZXJTaWduID0gdmFsdWUyLmluZGV4T2YoIiMiKTsKICBjb25zdCBzbGFzaCA9IHZhbHVlMi5pbmRleE9mKCIvIik7CiAgaWYgKAogICAgLy8gSWYgdGhlcmUgaXMgbm8gcHJvdG9jb2wsIGl04oCZcyByZWxhdGl2ZS4KICAgIGNvbG9uIDwgMCB8fCAvLyBJZiB0aGUgZmlyc3QgY29sb24gaXMgYWZ0ZXIgYSBgP2AsIGAjYCwgb3IgYC9gLCBpdOKAmXMgbm90IGEgcHJvdG9jb2wuCiAgICBzbGFzaCA+IC0xICYmIGNvbG9uID4gc2xhc2ggfHwgcXVlc3Rpb25NYXJrID4gLTEgJiYgY29sb24gPiBxdWVzdGlvbk1hcmsgfHwgbnVtYmVyU2lnbiA+IC0xICYmIGNvbG9uID4gbnVtYmVyU2lnbiB8fCAvLyBJdCBpcyBhIHByb3RvY29sLCBpdCBzaG91bGQgYmUgYWxsb3dlZC4KICAgIHByb3RvY29sLnRlc3QodmFsdWUyLnNsaWNlKDAsIGNvbG9uKSkKICApIHsKICAgIHJldHVybiB2YWx1ZTI7CiAgfQogIHJldHVybiAiIjsKfQpmdW5jdGlvbiBub3JtYWxpemVVcmkodmFsdWUyKSB7CiAgY29uc3QgcmVzdWx0ID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBzdGFydCA9IDA7CiAgbGV0IHNraXAyID0gMDsKICB3aGlsZSAoKytpbmRleDIgPCB2YWx1ZTIubGVuZ3RoKSB7CiAgICBjb25zdCBjb2RlNCA9IHZhbHVlMi5jaGFyQ29kZUF0KGluZGV4Mik7CiAgICBsZXQgcmVwbGFjZTUgPSAiIjsKICAgIGlmIChjb2RlNCA9PT0gMzcgJiYgYXNjaWlBbHBoYW51bWVyaWModmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyICsgMSkpICYmIGFzY2lpQWxwaGFudW1lcmljKHZhbHVlMi5jaGFyQ29kZUF0KGluZGV4MiArIDIpKSkgewogICAgICBza2lwMiA9IDI7CiAgICB9IGVsc2UgaWYgKGNvZGU0IDwgMTI4KSB7CiAgICAgIGlmICghL1shIyQmLTs9Py1aX2Eten5dLy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTQpKSkgewogICAgICAgIHJlcGxhY2U1ID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlNCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY29kZTQgPiA1NTI5NSAmJiBjb2RlNCA8IDU3MzQ0KSB7CiAgICAgIGNvbnN0IG5leHQyID0gdmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyICsgMSk7CiAgICAgIGlmIChjb2RlNCA8IDU2MzIwICYmIG5leHQyID4gNTYzMTkgJiYgbmV4dDIgPCA1NzM0NCkgewogICAgICAgIHJlcGxhY2U1ID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlNCwgbmV4dDIpOwogICAgICAgIHNraXAyID0gMTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXBsYWNlNSA9ICJcdUZGRkQiOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXBsYWNlNSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTQpOwogICAgfQogICAgaWYgKHJlcGxhY2U1KSB7CiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlMi5zbGljZShzdGFydCwgaW5kZXgyKSwgZW5jb2RlVVJJQ29tcG9uZW50KHJlcGxhY2U1KSk7CiAgICAgIHN0YXJ0ID0gaW5kZXgyICsgc2tpcDIgKyAxOwogICAgICByZXBsYWNlNSA9ICIiOwogICAgfQogICAgaWYgKHNraXAyKSB7CiAgICAgIGluZGV4MiArPSBza2lwMjsKICAgICAgc2tpcDIgPSAwOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0LmpvaW4oIiIpICsgdmFsdWUyLnNsaWNlKHN0YXJ0KTsKfQp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9zYW5pdGl6ZV91cmkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1zYW5pdGl6ZS11cmlAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXNhbml0aXplLXVyaS9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9lbmNvZGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWwvbGliL2h0bWwuanMKZnVuY3Rpb24gZ2ZtQXV0b2xpbmtMaXRlcmFsSHRtbCgpIHsKICByZXR1cm4gewogICAgZXhpdDogewogICAgICBsaXRlcmFsQXV0b2xpbmtFbWFpbCwKICAgICAgbGl0ZXJhbEF1dG9saW5rSHR0cCwKICAgICAgbGl0ZXJhbEF1dG9saW5rV3d3CiAgICB9CiAgfTsKfQpmdW5jdGlvbiBsaXRlcmFsQXV0b2xpbmtXd3codG9rZW4pIHsKICBhbmNob3JGcm9tVG9rZW4uY2FsbCh0aGlzLCB0b2tlbiwgImh0dHA6Ly8iKTsKfQpmdW5jdGlvbiBsaXRlcmFsQXV0b2xpbmtFbWFpbCh0b2tlbikgewogIGFuY2hvckZyb21Ub2tlbi5jYWxsKHRoaXMsIHRva2VuLCAibWFpbHRvOiIpOwp9CmZ1bmN0aW9uIGxpdGVyYWxBdXRvbGlua0h0dHAodG9rZW4pIHsKICBhbmNob3JGcm9tVG9rZW4uY2FsbCh0aGlzLCB0b2tlbik7Cn0KZnVuY3Rpb24gYW5jaG9yRnJvbVRva2VuKHRva2VuLCBwcm90b2NvbCkgewogIGNvbnN0IHVybCA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogIHRoaXMudGFnKCc8YSBocmVmPSInICsgc2FuaXRpemVVcmkoKHByb3RvY29sIHx8ICIiKSArIHVybCkgKyAnIj4nKTsKICB0aGlzLnJhdyh0aGlzLmVuY29kZSh1cmwpKTsKICB0aGlzLnRhZygiPC9hPiIpOwp9CnZhciBpbml0X2h0bWwyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbC9saWIvaHRtbC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Nhbml0aXplX3VyaSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbC9pbmRleC5qcwp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV9hdXRvbGlua19saXRlcmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbC9pbmRleC5qcyIoKSB7CiAgICBpbml0X3N5bnRheCgpOwogICAgaW5pdF9odG1sMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtcmVzb2x2ZS1hbGxAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXJlc29sdmUtYWxsL2luZGV4LmpzCmZ1bmN0aW9uIHJlc29sdmVBbGwoY29uc3RydWN0czIsIGV2ZW50cywgY29udGV4dDIpIHsKICBjb25zdCBjYWxsZWQgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgY29uc3RydWN0czIubGVuZ3RoKSB7CiAgICBjb25zdCByZXNvbHZlMiA9IGNvbnN0cnVjdHMyW2luZGV4Ml0ucmVzb2x2ZUFsbDsKICAgIGlmIChyZXNvbHZlMiAmJiAhY2FsbGVkLmluY2x1ZGVzKHJlc29sdmUyKSkgewogICAgICBldmVudHMgPSByZXNvbHZlMihldmVudHMsIGNvbnRleHQyKTsKICAgICAgY2FsbGVkLnB1c2gocmVzb2x2ZTIpOwogICAgfQogIH0KICByZXR1cm4gZXZlbnRzOwp9CnZhciBpbml0X21pY3JvbWFya191dGlsX3Jlc29sdmVfYWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtcmVzb2x2ZS1hbGxAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXJlc29sdmUtYWxsL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2F0dGVudGlvbi5qcwpmdW5jdGlvbiByZXNvbHZlQWxsQXR0ZW50aW9uKGV2ZW50cywgY29udGV4dDIpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IG9wZW47CiAgbGV0IGdyb3VwOwogIGxldCB0ZXh0OTsKICBsZXQgb3BlbmluZ1NlcXVlbmNlOwogIGxldCBjbG9zaW5nU2VxdWVuY2U7CiAgbGV0IHVzZTsKICBsZXQgbmV4dEV2ZW50czsKICBsZXQgb2Zmc2V0OwogIHdoaWxlICgrK2luZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIiAmJiBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAiYXR0ZW50aW9uU2VxdWVuY2UiICYmIGV2ZW50c1tpbmRleDJdWzFdLl9jbG9zZSkgewogICAgICBvcGVuID0gaW5kZXgyOwogICAgICB3aGlsZSAob3Blbi0tKSB7CiAgICAgICAgaWYgKGV2ZW50c1tvcGVuXVswXSA9PT0gImV4aXQiICYmIGV2ZW50c1tvcGVuXVsxXS50eXBlID09PSAiYXR0ZW50aW9uU2VxdWVuY2UiICYmIGV2ZW50c1tvcGVuXVsxXS5fb3BlbiAmJiAvLyBJZiB0aGUgbWFya2VycyBhcmUgdGhlIHNhbWU6CiAgICAgICAgY29udGV4dDIuc2xpY2VTZXJpYWxpemUoZXZlbnRzW29wZW5dWzFdKS5jaGFyQ29kZUF0KDApID09PSBjb250ZXh0Mi5zbGljZVNlcmlhbGl6ZShldmVudHNbaW5kZXgyXVsxXSkuY2hhckNvZGVBdCgwKSkgewogICAgICAgICAgaWYgKChldmVudHNbb3Blbl1bMV0uX2Nsb3NlIHx8IGV2ZW50c1tpbmRleDJdWzFdLl9vcGVuKSAmJiAoZXZlbnRzW2luZGV4Ml1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0Lm9mZnNldCkgJSAzICYmICEoKGV2ZW50c1tvcGVuXVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW29wZW5dWzFdLnN0YXJ0Lm9mZnNldCArIGV2ZW50c1tpbmRleDJdWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbaW5kZXgyXVsxXS5zdGFydC5vZmZzZXQpICUgMykpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICB1c2UgPSBldmVudHNbb3Blbl1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tvcGVuXVsxXS5zdGFydC5vZmZzZXQgPiAxICYmIGV2ZW50c1tpbmRleDJdWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbaW5kZXgyXVsxXS5zdGFydC5vZmZzZXQgPiAxID8gMiA6IDE7CiAgICAgICAgICBjb25zdCBzdGFydCA9IHsKICAgICAgICAgICAgLi4uZXZlbnRzW29wZW5dWzFdLmVuZAogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IGVuZDMgPSB7CiAgICAgICAgICAgIC4uLmV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0CiAgICAgICAgICB9OwogICAgICAgICAgbW92ZVBvaW50KHN0YXJ0LCAtdXNlKTsKICAgICAgICAgIG1vdmVQb2ludChlbmQzLCB1c2UpOwogICAgICAgICAgb3BlbmluZ1NlcXVlbmNlID0gewogICAgICAgICAgICB0eXBlOiB1c2UgPiAxID8gInN0cm9uZ1NlcXVlbmNlIiA6ICJlbXBoYXNpc1NlcXVlbmNlIiwKICAgICAgICAgICAgc3RhcnQsCiAgICAgICAgICAgIGVuZDogewogICAgICAgICAgICAgIC4uLmV2ZW50c1tvcGVuXVsxXS5lbmQKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIGNsb3NpbmdTZXF1ZW5jZSA9IHsKICAgICAgICAgICAgdHlwZTogdXNlID4gMSA/ICJzdHJvbmdTZXF1ZW5jZSIgOiAiZW1waGFzaXNTZXF1ZW5jZSIsCiAgICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgICAgLi4uZXZlbnRzW2luZGV4Ml1bMV0uc3RhcnQKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZW5kOiBlbmQzCiAgICAgICAgICB9OwogICAgICAgICAgdGV4dDkgPSB7CiAgICAgICAgICAgIHR5cGU6IHVzZSA+IDEgPyAic3Ryb25nVGV4dCIgOiAiZW1waGFzaXNUZXh0IiwKICAgICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgICAuLi5ldmVudHNbb3Blbl1bMV0uZW5kCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGVuZDogewogICAgICAgICAgICAgIC4uLmV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBncm91cCA9IHsKICAgICAgICAgICAgdHlwZTogdXNlID4gMSA/ICJzdHJvbmciIDogImVtcGhhc2lzIiwKICAgICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgICAuLi5vcGVuaW5nU2VxdWVuY2Uuc3RhcnQKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgICAgLi4uY2xvc2luZ1NlcXVlbmNlLmVuZAogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgZXZlbnRzW29wZW5dWzFdLmVuZCA9IHsKICAgICAgICAgICAgLi4ub3BlbmluZ1NlcXVlbmNlLnN0YXJ0CiAgICAgICAgICB9OwogICAgICAgICAgZXZlbnRzW2luZGV4Ml1bMV0uc3RhcnQgPSB7CiAgICAgICAgICAgIC4uLmNsb3NpbmdTZXF1ZW5jZS5lbmQKICAgICAgICAgIH07CiAgICAgICAgICBuZXh0RXZlbnRzID0gW107CiAgICAgICAgICBpZiAoZXZlbnRzW29wZW5dWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbb3Blbl1bMV0uc3RhcnQub2Zmc2V0KSB7CiAgICAgICAgICAgIG5leHRFdmVudHMgPSBwdXNoKG5leHRFdmVudHMsIFtbImVudGVyIiwgZXZlbnRzW29wZW5dWzFdLCBjb250ZXh0Ml0sIFsiZXhpdCIsIGV2ZW50c1tvcGVuXVsxXSwgY29udGV4dDJdXSk7CiAgICAgICAgICB9CiAgICAgICAgICBuZXh0RXZlbnRzID0gcHVzaChuZXh0RXZlbnRzLCBbWyJlbnRlciIsIGdyb3VwLCBjb250ZXh0Ml0sIFsiZW50ZXIiLCBvcGVuaW5nU2VxdWVuY2UsIGNvbnRleHQyXSwgWyJleGl0Iiwgb3BlbmluZ1NlcXVlbmNlLCBjb250ZXh0Ml0sIFsiZW50ZXIiLCB0ZXh0OSwgY29udGV4dDJdXSk7CiAgICAgICAgICBuZXh0RXZlbnRzID0gcHVzaChuZXh0RXZlbnRzLCByZXNvbHZlQWxsKGNvbnRleHQyLnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbCwgZXZlbnRzLnNsaWNlKG9wZW4gKyAxLCBpbmRleDIpLCBjb250ZXh0MikpOwogICAgICAgICAgbmV4dEV2ZW50cyA9IHB1c2gobmV4dEV2ZW50cywgW1siZXhpdCIsIHRleHQ5LCBjb250ZXh0Ml0sIFsiZW50ZXIiLCBjbG9zaW5nU2VxdWVuY2UsIGNvbnRleHQyXSwgWyJleGl0IiwgY2xvc2luZ1NlcXVlbmNlLCBjb250ZXh0Ml0sIFsiZXhpdCIsIGdyb3VwLCBjb250ZXh0Ml1dKTsKICAgICAgICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW2luZGV4Ml1bMV0uc3RhcnQub2Zmc2V0KSB7CiAgICAgICAgICAgIG9mZnNldCA9IDI7CiAgICAgICAgICAgIG5leHRFdmVudHMgPSBwdXNoKG5leHRFdmVudHMsIFtbImVudGVyIiwgZXZlbnRzW2luZGV4Ml1bMV0sIGNvbnRleHQyXSwgWyJleGl0IiwgZXZlbnRzW2luZGV4Ml1bMV0sIGNvbnRleHQyXV0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb2Zmc2V0ID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIHNwbGljZShldmVudHMsIG9wZW4gLSAxLCBpbmRleDIgLSBvcGVuICsgMywgbmV4dEV2ZW50cyk7CiAgICAgICAgICBpbmRleDIgPSBvcGVuICsgbmV4dEV2ZW50cy5sZW5ndGggLSBvZmZzZXQgLSAyOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAiYXR0ZW50aW9uU2VxdWVuY2UiKSB7CiAgICAgIGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPSAiZGF0YSI7CiAgICB9CiAgfQogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gdG9rZW5pemVBdHRlbnRpb24oZWZmZWN0cywgb2szKSB7CiAgY29uc3QgYXR0ZW50aW9uTWFya2VyczIgPSB0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmF0dGVudGlvbk1hcmtlcnMubnVsbDsKICBjb25zdCBwcmV2aW91czMgPSB0aGlzLnByZXZpb3VzOwogIGNvbnN0IGJlZm9yZSA9IGNsYXNzaWZ5Q2hhcmFjdGVyKHByZXZpb3VzMyk7CiAgbGV0IG1hcmtlcjsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIG1hcmtlciA9IGNvZGU0OwogICAgZWZmZWN0cy5lbnRlcigiYXR0ZW50aW9uU2VxdWVuY2UiKTsKICAgIHJldHVybiBpbnNpZGUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBpbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBpbnNpZGU7CiAgICB9CiAgICBjb25zdCB0b2tlbiA9IGVmZmVjdHMuZXhpdCgiYXR0ZW50aW9uU2VxdWVuY2UiKTsKICAgIGNvbnN0IGFmdGVyID0gY2xhc3NpZnlDaGFyYWN0ZXIoY29kZTQpOwogICAgY29uc3Qgb3BlbiA9ICFhZnRlciB8fCBhZnRlciA9PT0gMiAmJiBiZWZvcmUgfHwgYXR0ZW50aW9uTWFya2VyczIuaW5jbHVkZXMoY29kZTQpOwogICAgY29uc3QgY2xvc2U3ID0gIWJlZm9yZSB8fCBiZWZvcmUgPT09IDIgJiYgYWZ0ZXIgfHwgYXR0ZW50aW9uTWFya2VyczIuaW5jbHVkZXMocHJldmlvdXMzKTsKICAgIHRva2VuLl9vcGVuID0gQm9vbGVhbihtYXJrZXIgPT09IDQyID8gb3BlbiA6IG9wZW4gJiYgKGJlZm9yZSB8fCAhY2xvc2U3KSk7CiAgICB0b2tlbi5fY2xvc2UgPSBCb29sZWFuKG1hcmtlciA9PT0gNDIgPyBjbG9zZTcgOiBjbG9zZTcgJiYgKGFmdGVyIHx8ICFvcGVuKSk7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gbW92ZVBvaW50KHBvaW50NCwgb2Zmc2V0KSB7CiAgcG9pbnQ0LmNvbHVtbiArPSBvZmZzZXQ7CiAgcG9pbnQ0Lm9mZnNldCArPSBvZmZzZXQ7CiAgcG9pbnQ0Ll9idWZmZXJJbmRleCArPSBvZmZzZXQ7Cn0KdmFyIGF0dGVudGlvbjsKdmFyIGluaXRfYXR0ZW50aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYXR0ZW50aW9uLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jbGFzc2lmeV9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfcmVzb2x2ZV9hbGwoKTsKICAgIGF0dGVudGlvbiA9IHsKICAgICAgbmFtZTogImF0dGVudGlvbiIsCiAgICAgIHJlc29sdmVBbGw6IHJlc29sdmVBbGxBdHRlbnRpb24sCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUF0dGVudGlvbgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2F1dG9saW5rLmpzCmZ1bmN0aW9uIHRva2VuaXplQXV0b2xpbmsoZWZmZWN0cywgb2szLCBub2spIHsKICBsZXQgc2l6ZSA9IDA7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJhdXRvbGluayIpOwogICAgZWZmZWN0cy5lbnRlcigiYXV0b2xpbmtNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImF1dG9saW5rTWFya2VyIik7CiAgICBlZmZlY3RzLmVudGVyKCJhdXRvbGlua1Byb3RvY29sIik7CiAgICByZXR1cm4gb3BlbjsKICB9CiAgZnVuY3Rpb24gb3Blbihjb2RlNCkgewogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBzY2hlbWVPckVtYWlsQXRleHQ7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDY0KSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgcmV0dXJuIGVtYWlsQXRleHQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBzY2hlbWVPckVtYWlsQXRleHQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDMgfHwgY29kZTQgPT09IDQ1IHx8IGNvZGU0ID09PSA0NiB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCkpIHsKICAgICAgc2l6ZSA9IDE7CiAgICAgIHJldHVybiBzY2hlbWVJbnNpZGVPckVtYWlsQXRleHQoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGVtYWlsQXRleHQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBzY2hlbWVJbnNpZGVPckVtYWlsQXRleHQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNTgpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgc2l6ZSA9IDA7CiAgICAgIHJldHVybiB1cmxJbnNpZGU7CiAgICB9CiAgICBpZiAoKGNvZGU0ID09PSA0MyB8fCBjb2RlNCA9PT0gNDUgfHwgY29kZTQgPT09IDQ2IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgJiYgc2l6ZSsrIDwgMzIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHNjaGVtZUluc2lkZU9yRW1haWxBdGV4dDsKICAgIH0KICAgIHNpemUgPSAwOwogICAgcmV0dXJuIGVtYWlsQXRleHQoY29kZTQpOwogIH0KICBmdW5jdGlvbiB1cmxJbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgZWZmZWN0cy5leGl0KCJhdXRvbGlua1Byb3RvY29sIik7CiAgICAgIGVmZmVjdHMuZW50ZXIoImF1dG9saW5rTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiYXV0b2xpbmtNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5leGl0KCJhdXRvbGluayIpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSAzMiB8fCBjb2RlNCA9PT0gNjAgfHwgYXNjaWlDb250cm9sKGNvZGU0KSkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gdXJsSW5zaWRlOwogIH0KICBmdW5jdGlvbiBlbWFpbEF0ZXh0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDY0KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBlbWFpbEF0U2lnbk9yRG90OwogICAgfQogICAgaWYgKGFzY2lpQXRleHQoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBlbWFpbEF0ZXh0OwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGVtYWlsQXRTaWduT3JEb3QoY29kZTQpIHsKICAgIHJldHVybiBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCkgPyBlbWFpbExhYmVsKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGVtYWlsTGFiZWwoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDYpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgc2l6ZSA9IDA7CiAgICAgIHJldHVybiBlbWFpbEF0U2lnbk9yRG90OwogICAgfQogICAgaWYgKGNvZGU0ID09PSA2MikgewogICAgICBlZmZlY3RzLmV4aXQoImF1dG9saW5rUHJvdG9jb2wiKS50eXBlID0gImF1dG9saW5rRW1haWwiOwogICAgICBlZmZlY3RzLmVudGVyKCJhdXRvbGlua01hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImF1dG9saW5rTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiYXV0b2xpbmsiKTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIHJldHVybiBlbWFpbFZhbHVlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZW1haWxWYWx1ZShjb2RlNCkgewogICAgaWYgKChjb2RlNCA9PT0gNDUgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpKSAmJiBzaXplKysgPCA2MykgewogICAgICBjb25zdCBuZXh0MiA9IGNvZGU0ID09PSA0NSA/IGVtYWlsVmFsdWUgOiBlbWFpbExhYmVsOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gbmV4dDI7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGF1dG9saW5rOwp2YXIgaW5pdF9hdXRvbGluayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2F1dG9saW5rLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBhdXRvbGluayA9IHsKICAgICAgbmFtZTogImF1dG9saW5rIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQXV0b2xpbmsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS1zcGFjZUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UvaW5kZXguanMKZnVuY3Rpb24gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIG9rMywgdHlwZTUsIG1heDMpIHsKICBjb25zdCBsaW1pdCA9IG1heDMgPyBtYXgzIC0gMSA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKICBsZXQgc2l6ZSA9IDA7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcih0eXBlNSk7CiAgICAgIHJldHVybiBwcmVmaXg0KGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KICBmdW5jdGlvbiBwcmVmaXg0KGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkgJiYgc2l6ZSsrIDwgbGltaXQpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHByZWZpeDQ7CiAgICB9CiAgICBlZmZlY3RzLmV4aXQodHlwZTUpOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQp9CnZhciBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3Rvcnktc3BhY2VAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXNwYWNlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9ibGFuay1saW5lLmpzCmZ1bmN0aW9uIHRva2VuaXplQmxhbmtMaW5lKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlNCkgPyBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYWZ0ZXIsICJsaW5lUHJlZml4IikoY29kZTQpIDogYWZ0ZXIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkgPyBvazMoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGJsYW5rTGluZTsKdmFyIGluaXRfYmxhbmtfbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2JsYW5rLWxpbmUuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGJsYW5rTGluZSA9IHsKICAgICAgcGFydGlhbDogdHJ1ZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQmxhbmtMaW5lCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYmxvY2stcXVvdGUuanMKZnVuY3Rpb24gdG9rZW5pemVCbG9ja1F1b3RlU3RhcnQoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGNvbnN0IHN0YXRlMTQgPSBzZWxmMi5jb250YWluZXJTdGF0ZTsKICAgICAgaWYgKCFzdGF0ZTE0Lm9wZW4pIHsKICAgICAgICBlZmZlY3RzLmVudGVyKCJibG9ja1F1b3RlIiwgewogICAgICAgICAgX2NvbnRhaW5lcjogdHJ1ZQogICAgICAgIH0pOwogICAgICAgIHN0YXRlMTQub3BlbiA9IHRydWU7CiAgICAgIH0KICAgICAgZWZmZWN0cy5lbnRlcigiYmxvY2tRdW90ZVByZWZpeCIpOwogICAgICBlZmZlY3RzLmVudGVyKCJibG9ja1F1b3RlTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiYmxvY2tRdW90ZU1hcmtlciIpOwogICAgICByZXR1cm4gYWZ0ZXI7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmVudGVyKCJibG9ja1F1b3RlUHJlZml4V2hpdGVzcGFjZSIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiYmxvY2tRdW90ZVByZWZpeCIpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgZWZmZWN0cy5leGl0KCJibG9ja1F1b3RlUHJlZml4Iik7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVCbG9ja1F1b3RlQ29udGludWF0aW9uKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiBjb250U3RhcnQ7CiAgZnVuY3Rpb24gY29udFN0YXJ0KGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBjb250QmVmb3JlLCAibGluZVByZWZpeCIsIHNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIikgPyB2b2lkIDAgOiA0KShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gY29udEJlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRCZWZvcmUoY29kZTQpIHsKICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoYmxvY2tRdW90ZSwgb2szLCBub2spKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gZXhpdDIoZWZmZWN0cykgewogIGVmZmVjdHMuZXhpdCgiYmxvY2tRdW90ZSIpOwp9CnZhciBibG9ja1F1b3RlOwp2YXIgaW5pdF9ibG9ja19xdW90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2Jsb2NrLXF1b3RlLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBibG9ja1F1b3RlID0gewogICAgICBjb250aW51YXRpb246IHsKICAgICAgICB0b2tlbml6ZTogdG9rZW5pemVCbG9ja1F1b3RlQ29udGludWF0aW9uCiAgICAgIH0sCiAgICAgIGV4aXQ6IGV4aXQyLAogICAgICBuYW1lOiAiYmxvY2tRdW90ZSIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUJsb2NrUXVvdGVTdGFydAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NoYXJhY3Rlci1lc2NhcGUuanMKZnVuY3Rpb24gdG9rZW5pemVDaGFyYWN0ZXJFc2NhcGUoZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlckVzY2FwZSIpOwogICAgZWZmZWN0cy5lbnRlcigiZXNjYXBlTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJlc2NhcGVNYXJrZXIiKTsKICAgIHJldHVybiBpbnNpZGU7CiAgfQogIGZ1bmN0aW9uIGluc2lkZShjb2RlNCkgewogICAgaWYgKGFzY2lpUHVuY3R1YXRpb24oY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlckVzY2FwZVZhbHVlIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2hhcmFjdGVyRXNjYXBlVmFsdWUiKTsKICAgICAgZWZmZWN0cy5leGl0KCJjaGFyYWN0ZXJFc2NhcGUiKTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQp2YXIgY2hhcmFjdGVyRXNjYXBlOwp2YXIgaW5pdF9jaGFyYWN0ZXJfZXNjYXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY2hhcmFjdGVyLWVzY2FwZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgY2hhcmFjdGVyRXNjYXBlID0gewogICAgICBuYW1lOiAiY2hhcmFjdGVyRXNjYXBlIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQ2hhcmFjdGVyRXNjYXBlCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY2hhcmFjdGVyLXJlZmVyZW5jZS5qcwpmdW5jdGlvbiB0b2tlbml6ZUNoYXJhY3RlclJlZmVyZW5jZShlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBsZXQgc2l6ZSA9IDA7CiAgbGV0IG1heDM7CiAgbGV0IHRlc3Q7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2UiKTsKICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIik7CiAgICByZXR1cm4gb3BlbjsKICB9CiAgZnVuY3Rpb24gb3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAzNSkgewogICAgICBlZmZlY3RzLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYyIpOwogICAgICByZXR1cm4gbnVtZXJpYzsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIik7CiAgICBtYXgzID0gMzE7CiAgICB0ZXN0ID0gYXNjaWlBbHBoYW51bWVyaWM7CiAgICByZXR1cm4gdmFsdWUyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbnVtZXJpYyhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA4OCB8fCBjb2RlNCA9PT0gMTIwKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWwiKTsKICAgICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKTsKICAgICAgbWF4MyA9IDY7CiAgICAgIHRlc3QgPSBhc2NpaUhleERpZ2l0OwogICAgICByZXR1cm4gdmFsdWUyOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKTsKICAgIG1heDMgPSA3OwogICAgdGVzdCA9IGFzY2lpRGlnaXQ7CiAgICByZXR1cm4gdmFsdWUyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdmFsdWUyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDU5ICYmIHNpemUpIHsKICAgICAgY29uc3QgdG9rZW4gPSBlZmZlY3RzLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIik7CiAgICAgIGlmICh0ZXN0ID09PSBhc2NpaUFscGhhbnVtZXJpYyAmJiAhZGVjb2RlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2Uoc2VsZjIuc2xpY2VTZXJpYWxpemUodG9rZW4pKSkgewogICAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgICB9CiAgICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpOwogICAgICBlZmZlY3RzLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZSIpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgaWYgKHRlc3QoY29kZTQpICYmIHNpemUrKyA8IG1heDMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHZhbHVlMjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQp2YXIgY2hhcmFjdGVyUmVmZXJlbmNlOwp2YXIgaW5pdF9jaGFyYWN0ZXJfcmVmZXJlbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY2hhcmFjdGVyLXJlZmVyZW5jZS5qcyIoKSB7CiAgICBpbml0X2luZGV4X2RvbSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGNoYXJhY3RlclJlZmVyZW5jZSA9IHsKICAgICAgbmFtZTogImNoYXJhY3RlclJlZmVyZW5jZSIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUNoYXJhY3RlclJlZmVyZW5jZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NvZGUtZmVuY2VkLmpzCmZ1bmN0aW9uIHRva2VuaXplQ29kZUZlbmNlZChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBjb25zdCBjbG9zZVN0YXJ0ID0gewogICAgcGFydGlhbDogdHJ1ZSwKICAgIHRva2VuaXplOiB0b2tlbml6ZUNsb3NlU3RhcnQKICB9OwogIGxldCBpbml0aWFsUHJlZml4ID0gMDsKICBsZXQgc2l6ZU9wZW4gPSAwOwogIGxldCBtYXJrZXI7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICByZXR1cm4gYmVmb3JlU2VxdWVuY2VPcGVuKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlU2VxdWVuY2VPcGVuKGNvZGU0KSB7CiAgICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICAgIGluaXRpYWxQcmVmaXggPSB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gImxpbmVQcmVmaXgiID8gdGFpbFsyXS5zbGljZVNlcmlhbGl6ZSh0YWlsWzFdLCB0cnVlKS5sZW5ndGggOiAwOwogICAgbWFya2VyID0gY29kZTQ7CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlRmVuY2VkIik7CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlRmVuY2VkRmVuY2UiKTsKICAgIGVmZmVjdHMuZW50ZXIoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIik7CiAgICByZXR1cm4gc2VxdWVuY2VPcGVuKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gc2VxdWVuY2VPcGVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICBzaXplT3BlbisrOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gc2VxdWVuY2VPcGVuOwogICAgfQogICAgaWYgKHNpemVPcGVuIDwgMykgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZXhpdCgiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKTsKICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBpbmZvQmVmb3JlLCAid2hpdGVzcGFjZSIpKGNvZGU0KSA6IGluZm9CZWZvcmUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBpbmZvQmVmb3JlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImNvZGVGZW5jZWRGZW5jZSIpOwogICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ID8gb2szKGNvZGU0KSA6IGVmZmVjdHMuY2hlY2sobm9uTGF6eUNvbnRpbnVhdGlvbiwgYXROb25MYXp5QnJlYWssIGFmdGVyKShjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlRmVuY2VkRmVuY2VJbmZvIik7CiAgICBlZmZlY3RzLmVudGVyKCJjaHVua1N0cmluZyIsIHsKICAgICAgY29udGVudFR5cGU6ICJzdHJpbmciCiAgICB9KTsKICAgIHJldHVybiBpbmZvKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaW5mbyhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjaHVua1N0cmluZyIpOwogICAgICBlZmZlY3RzLmV4aXQoImNvZGVGZW5jZWRGZW5jZUluZm8iKTsKICAgICAgcmV0dXJuIGluZm9CZWZvcmUoY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtTdHJpbmciKTsKICAgICAgZWZmZWN0cy5leGl0KCJjb2RlRmVuY2VkRmVuY2VJbmZvIik7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgbWV0YUJlZm9yZSwgIndoaXRlc3BhY2UiKShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDk2ICYmIGNvZGU0ID09PSBtYXJrZXIpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGluZm87CiAgfQogIGZ1bmN0aW9uIG1ldGFCZWZvcmUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBpbmZvQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImNvZGVGZW5jZWRGZW5jZU1ldGEiKTsKICAgIGVmZmVjdHMuZW50ZXIoImNodW5rU3RyaW5nIiwgewogICAgICBjb250ZW50VHlwZTogInN0cmluZyIKICAgIH0pOwogICAgcmV0dXJuIG1ldGEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBtZXRhKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rU3RyaW5nIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiY29kZUZlbmNlZEZlbmNlTWV0YSIpOwogICAgICByZXR1cm4gaW5mb0JlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDk2ICYmIGNvZGU0ID09PSBtYXJrZXIpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIG1ldGE7CiAgfQogIGZ1bmN0aW9uIGF0Tm9uTGF6eUJyZWFrKGNvZGU0KSB7CiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGNsb3NlU3RhcnQsIGFmdGVyLCBjb250ZW50QmVmb3JlKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRlbnRCZWZvcmUoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgIHJldHVybiBjb250ZW50U3RhcnQ7CiAgfQogIGZ1bmN0aW9uIGNvbnRlbnRTdGFydChjb2RlNCkgewogICAgcmV0dXJuIGluaXRpYWxQcmVmaXggPiAwICYmIG1hcmtkb3duU3BhY2UoY29kZTQpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGJlZm9yZUNvbnRlbnRDaHVuaywgImxpbmVQcmVmaXgiLCBpbml0aWFsUHJlZml4ICsgMSkoY29kZTQpIDogYmVmb3JlQ29udGVudENodW5rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlQ29udGVudENodW5rKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhub25MYXp5Q29udGludWF0aW9uLCBhdE5vbkxhenlCcmVhaywgYWZ0ZXIpKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImNvZGVGbG93VmFsdWUiKTsKICAgIHJldHVybiBjb250ZW50Q2h1bmsoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb250ZW50Q2h1bmsoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY29kZUZsb3dWYWx1ZSIpOwogICAgICByZXR1cm4gYmVmb3JlQ29udGVudENodW5rKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gY29udGVudENodW5rOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgZWZmZWN0cy5leGl0KCJjb2RlRmVuY2VkIik7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdG9rZW5pemVDbG9zZVN0YXJ0KGVmZmVjdHMyLCBvazQsIG5vazIpIHsKICAgIGxldCBzaXplID0gMDsKICAgIHJldHVybiBzdGFydEJlZm9yZTsKICAgIGZ1bmN0aW9uIHN0YXJ0QmVmb3JlKGNvZGU0KSB7CiAgICAgIGVmZmVjdHMyLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICAgIGVmZmVjdHMyLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzMi5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgIHJldHVybiBzdGFydDI7CiAgICB9CiAgICBmdW5jdGlvbiBzdGFydDIoY29kZTQpIHsKICAgICAgZWZmZWN0czIuZW50ZXIoImNvZGVGZW5jZWRGZW5jZSIpOwogICAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlNCkgPyBmYWN0b3J5U3BhY2UoZWZmZWN0czIsIGJlZm9yZVNlcXVlbmNlQ2xvc2UsICJsaW5lUHJlZml4Iiwgc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSA/IHZvaWQgMCA6IDQpKGNvZGU0KSA6IGJlZm9yZVNlcXVlbmNlQ2xvc2UoY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gYmVmb3JlU2VxdWVuY2VDbG9zZShjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICAgIGVmZmVjdHMyLmVudGVyKCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSIpOwogICAgICAgIHJldHVybiBzZXF1ZW5jZUNsb3NlKGNvZGU0KTsKICAgICAgfQogICAgICByZXR1cm4gbm9rMihjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBzZXF1ZW5jZUNsb3NlKGNvZGU0KSB7CiAgICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgICAgc2l6ZSsrOwogICAgICAgIGVmZmVjdHMyLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHJldHVybiBzZXF1ZW5jZUNsb3NlOwogICAgICB9CiAgICAgIGlmIChzaXplID49IHNpemVPcGVuKSB7CiAgICAgICAgZWZmZWN0czIuZXhpdCgiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKTsKICAgICAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlNCkgPyBmYWN0b3J5U3BhY2UoZWZmZWN0czIsIHNlcXVlbmNlQ2xvc2VBZnRlciwgIndoaXRlc3BhY2UiKShjb2RlNCkgOiBzZXF1ZW5jZUNsb3NlQWZ0ZXIoY29kZTQpOwogICAgICB9CiAgICAgIHJldHVybiBub2syKGNvZGU0KTsKICAgIH0KICAgIGZ1bmN0aW9uIHNlcXVlbmNlQ2xvc2VBZnRlcihjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMyLmV4aXQoImNvZGVGZW5jZWRGZW5jZSIpOwogICAgICAgIHJldHVybiBvazQoY29kZTQpOwogICAgICB9CiAgICAgIHJldHVybiBub2syKGNvZGU0KTsKICAgIH0KICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVOb25MYXp5Q29udGludWF0aW9uKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgcmV0dXJuIGxpbmVTdGFydDsKICB9CiAgZnVuY3Rpb24gbGluZVN0YXJ0KGNvZGU0KSB7CiAgICByZXR1cm4gc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0gPyBub2soY29kZTQpIDogb2szKGNvZGU0KTsKICB9Cn0KdmFyIG5vbkxhenlDb250aW51YXRpb24sIGNvZGVGZW5jZWQ7CnZhciBpbml0X2NvZGVfZmVuY2VkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY29kZS1mZW5jZWQuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIG5vbkxhenlDb250aW51YXRpb24gPSB7CiAgICAgIHBhcnRpYWw6IHRydWUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZU5vbkxhenlDb250aW51YXRpb24KICAgIH07CiAgICBjb2RlRmVuY2VkID0gewogICAgICBjb25jcmV0ZTogdHJ1ZSwKICAgICAgbmFtZTogImNvZGVGZW5jZWQiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVDb2RlRmVuY2VkCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY29kZS1pbmRlbnRlZC5qcwpmdW5jdGlvbiB0b2tlbml6ZUNvZGVJbmRlbnRlZChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImNvZGVJbmRlbnRlZCIpOwogICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlclByZWZpeCwgImxpbmVQcmVmaXgiLCA0ICsgMSkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlclByZWZpeChjb2RlNCkgewogICAgY29uc3QgdGFpbCA9IHNlbGYyLmV2ZW50c1tzZWxmMi5ldmVudHMubGVuZ3RoIC0gMV07CiAgICByZXR1cm4gdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09ICJsaW5lUHJlZml4IiAmJiB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA+PSA0ID8gYXRCcmVhayhjb2RlNCkgOiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBhdEJyZWFrKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIGFmdGVyKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoZnVydGhlclN0YXJ0LCBhdEJyZWFrLCBhZnRlcikoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiY29kZUZsb3dWYWx1ZSIpOwogICAgcmV0dXJuIGluc2lkZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjb2RlRmxvd1ZhbHVlIik7CiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gaW5zaWRlOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgZWZmZWN0cy5leGl0KCJjb2RlSW5kZW50ZWQiKTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZUZ1cnRoZXJTdGFydChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gZnVydGhlclN0YXJ0MjsKICBmdW5jdGlvbiBmdXJ0aGVyU3RhcnQyKGNvZGU0KSB7CiAgICBpZiAoc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0pIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgICByZXR1cm4gZnVydGhlclN0YXJ0MjsKICAgIH0KICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYWZ0ZXJQcmVmaXgsICJsaW5lUHJlZml4IiwgNCArIDEpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYWZ0ZXJQcmVmaXgoY29kZTQpIHsKICAgIGNvbnN0IHRhaWwgPSBzZWxmMi5ldmVudHNbc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDFdOwogICAgcmV0dXJuIHRhaWwgJiYgdGFpbFsxXS50eXBlID09PSAibGluZVByZWZpeCIgJiYgdGFpbFsyXS5zbGljZVNlcmlhbGl6ZSh0YWlsWzFdLCB0cnVlKS5sZW5ndGggPj0gNCA/IG9rMyhjb2RlNCkgOiBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpID8gZnVydGhlclN0YXJ0Mihjb2RlNCkgOiBub2soY29kZTQpOwogIH0KfQp2YXIgY29kZUluZGVudGVkLCBmdXJ0aGVyU3RhcnQ7CnZhciBpbml0X2NvZGVfaW5kZW50ZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb2RlLWluZGVudGVkLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBjb2RlSW5kZW50ZWQgPSB7CiAgICAgIG5hbWU6ICJjb2RlSW5kZW50ZWQiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVDb2RlSW5kZW50ZWQKICAgIH07CiAgICBmdXJ0aGVyU3RhcnQgPSB7CiAgICAgIHBhcnRpYWw6IHRydWUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUZ1cnRoZXJTdGFydAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NvZGUtdGV4dC5qcwpmdW5jdGlvbiByZXNvbHZlQ29kZVRleHQoZXZlbnRzKSB7CiAgbGV0IHRhaWxFeGl0SW5kZXggPSBldmVudHMubGVuZ3RoIC0gNDsKICBsZXQgaGVhZEVudGVySW5kZXggPSAzOwogIGxldCBpbmRleDI7CiAgbGV0IGVudGVyOwogIGlmICgoZXZlbnRzW2hlYWRFbnRlckluZGV4XVsxXS50eXBlID09PSAibGluZUVuZGluZyIgfHwgZXZlbnRzW2hlYWRFbnRlckluZGV4XVsxXS50eXBlID09PSAic3BhY2UiKSAmJiAoZXZlbnRzW3RhaWxFeGl0SW5kZXhdWzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nIiB8fCBldmVudHNbdGFpbEV4aXRJbmRleF1bMV0udHlwZSA9PT0gInNwYWNlIikpIHsKICAgIGluZGV4MiA9IGhlYWRFbnRlckluZGV4OwogICAgd2hpbGUgKCsraW5kZXgyIDwgdGFpbEV4aXRJbmRleCkgewogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImNvZGVUZXh0RGF0YSIpIHsKICAgICAgICBldmVudHNbaGVhZEVudGVySW5kZXhdWzFdLnR5cGUgPSAiY29kZVRleHRQYWRkaW5nIjsKICAgICAgICBldmVudHNbdGFpbEV4aXRJbmRleF1bMV0udHlwZSA9ICJjb2RlVGV4dFBhZGRpbmciOwogICAgICAgIGhlYWRFbnRlckluZGV4ICs9IDI7CiAgICAgICAgdGFpbEV4aXRJbmRleCAtPSAyOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfQogIGluZGV4MiA9IGhlYWRFbnRlckluZGV4IC0gMTsKICB0YWlsRXhpdEluZGV4Kys7CiAgd2hpbGUgKCsraW5kZXgyIDw9IHRhaWxFeGl0SW5kZXgpIHsKICAgIGlmIChlbnRlciA9PT0gdm9pZCAwKSB7CiAgICAgIGlmIChpbmRleDIgIT09IHRhaWxFeGl0SW5kZXggJiYgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSAhPT0gImxpbmVFbmRpbmciKSB7CiAgICAgICAgZW50ZXIgPSBpbmRleDI7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaW5kZXgyID09PSB0YWlsRXhpdEluZGV4IHx8IGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nIikgewogICAgICBldmVudHNbZW50ZXJdWzFdLnR5cGUgPSAiY29kZVRleHREYXRhIjsKICAgICAgaWYgKGluZGV4MiAhPT0gZW50ZXIgKyAyKSB7CiAgICAgICAgZXZlbnRzW2VudGVyXVsxXS5lbmQgPSBldmVudHNbaW5kZXgyIC0gMV1bMV0uZW5kOwogICAgICAgIGV2ZW50cy5zcGxpY2UoZW50ZXIgKyAyLCBpbmRleDIgLSBlbnRlciAtIDIpOwogICAgICAgIHRhaWxFeGl0SW5kZXggLT0gaW5kZXgyIC0gZW50ZXIgLSAyOwogICAgICAgIGluZGV4MiA9IGVudGVyICsgMjsKICAgICAgfQogICAgICBlbnRlciA9IHZvaWQgMDsKICAgIH0KICB9CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiBwcmV2aW91czIoY29kZTQpIHsKICByZXR1cm4gY29kZTQgIT09IDk2IHx8IHRoaXMuZXZlbnRzW3RoaXMuZXZlbnRzLmxlbmd0aCAtIDFdWzFdLnR5cGUgPT09ICJjaGFyYWN0ZXJFc2NhcGUiOwp9CmZ1bmN0aW9uIHRva2VuaXplQ29kZVRleHQoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IHNpemVPcGVuID0gMDsKICBsZXQgc2l6ZTsKICBsZXQgdG9rZW47CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlVGV4dCIpOwogICAgZWZmZWN0cy5lbnRlcigiY29kZVRleHRTZXF1ZW5jZSIpOwogICAgcmV0dXJuIHNlcXVlbmNlT3Blbihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHNlcXVlbmNlT3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5NikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBzaXplT3BlbisrOwogICAgICByZXR1cm4gc2VxdWVuY2VPcGVuOwogICAgfQogICAgZWZmZWN0cy5leGl0KCJjb2RlVGV4dFNlcXVlbmNlIik7CiAgICByZXR1cm4gYmV0d2VlbjIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBiZXR3ZWVuMihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSAzMikgewogICAgICBlZmZlY3RzLmVudGVyKCJzcGFjZSIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInNwYWNlIik7CiAgICAgIHJldHVybiBiZXR3ZWVuMjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gOTYpIHsKICAgICAgdG9rZW4gPSBlZmZlY3RzLmVudGVyKCJjb2RlVGV4dFNlcXVlbmNlIik7CiAgICAgIHNpemUgPSAwOwogICAgICByZXR1cm4gc2VxdWVuY2VDbG9zZShjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgICByZXR1cm4gYmV0d2VlbjI7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlVGV4dERhdGEiKTsKICAgIHJldHVybiBkYXRhKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZGF0YShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSAzMiB8fCBjb2RlNCA9PT0gOTYgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImNvZGVUZXh0RGF0YSIpOwogICAgICByZXR1cm4gYmV0d2VlbjIoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBkYXRhOwogIH0KICBmdW5jdGlvbiBzZXF1ZW5jZUNsb3NlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDk2KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHNpemUrKzsKICAgICAgcmV0dXJuIHNlcXVlbmNlQ2xvc2U7CiAgICB9CiAgICBpZiAoc2l6ZSA9PT0gc2l6ZU9wZW4pIHsKICAgICAgZWZmZWN0cy5leGl0KCJjb2RlVGV4dFNlcXVlbmNlIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiY29kZVRleHQiKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICB0b2tlbi50eXBlID0gImNvZGVUZXh0RGF0YSI7CiAgICByZXR1cm4gZGF0YShjb2RlNCk7CiAgfQp9CnZhciBjb2RlVGV4dDsKdmFyIGluaXRfY29kZV90ZXh0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY29kZS10ZXh0LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBjb2RlVGV4dCA9IHsKICAgICAgbmFtZTogImNvZGVUZXh0IiwKICAgICAgcHJldmlvdXM6IHByZXZpb3VzMiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZUNvZGVUZXh0LAogICAgICB0b2tlbml6ZTogdG9rZW5pemVDb2RlVGV4dAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1zdWJ0b2tlbml6ZS9saWIvc3BsaWNlLWJ1ZmZlci5qcwpmdW5jdGlvbiBjaHVua2VkUHVzaChsaXN0NSwgcmlnaHQpIHsKICBsZXQgY2h1bmtTdGFydCA9IDA7CiAgaWYgKHJpZ2h0Lmxlbmd0aCA8IDFlNCkgewogICAgbGlzdDUucHVzaCguLi5yaWdodCk7CiAgfSBlbHNlIHsKICAgIHdoaWxlIChjaHVua1N0YXJ0IDwgcmlnaHQubGVuZ3RoKSB7CiAgICAgIGxpc3Q1LnB1c2goLi4ucmlnaHQuc2xpY2UoY2h1bmtTdGFydCwgY2h1bmtTdGFydCArIDFlNCkpOwogICAgICBjaHVua1N0YXJ0ICs9IDFlNDsKICAgIH0KICB9Cn0KdmFyIFNwbGljZUJ1ZmZlcjsKdmFyIGluaXRfc3BsaWNlX2J1ZmZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1zdWJ0b2tlbml6ZS9saWIvc3BsaWNlLWJ1ZmZlci5qcyIoKSB7CiAgICBTcGxpY2VCdWZmZXIgPSBjbGFzcyB7CiAgICAgIC8qKgogICAgICAgKiBAcGFyYW0ge1JlYWRvbmx5QXJyYXk8VD4gfCBudWxsIHwgdW5kZWZpbmVkfSBbaW5pdGlhbF0KICAgICAgICogICBJbml0aWFsIGl0ZW1zIChvcHRpb25hbCkuCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqICAgU3BsaWNlIGJ1ZmZlci4KICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKGluaXRpYWwyKSB7CiAgICAgICAgdGhpcy5sZWZ0ID0gaW5pdGlhbDIgPyBbLi4uaW5pdGlhbDJdIDogW107CiAgICAgICAgdGhpcy5yaWdodCA9IFtdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBcnJheSBhY2Nlc3M7CiAgICAgICAqIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvci4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4CiAgICAgICAqICAgSW5kZXguCiAgICAgICAqIEByZXR1cm4ge1R9CiAgICAgICAqICAgSXRlbS4KICAgICAgICovCiAgICAgIGdldChpbmRleDIpIHsKICAgICAgICBpZiAoaW5kZXgyIDwgMCB8fCBpbmRleDIgPj0gdGhpcy5sZWZ0Lmxlbmd0aCArIHRoaXMucmlnaHQubGVuZ3RoKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ2Fubm90IGFjY2VzcyBpbmRleCBgIiArIGluZGV4MiArICJgIGluIGEgc3BsaWNlIGJ1ZmZlciBvZiBzaXplIGAiICsgKHRoaXMubGVmdC5sZW5ndGggKyB0aGlzLnJpZ2h0Lmxlbmd0aCkgKyAiYCIpOwogICAgICAgIH0KICAgICAgICBpZiAoaW5kZXgyIDwgdGhpcy5sZWZ0Lmxlbmd0aCkgcmV0dXJuIHRoaXMubGVmdFtpbmRleDJdOwogICAgICAgIHJldHVybiB0aGlzLnJpZ2h0W3RoaXMucmlnaHQubGVuZ3RoIC0gaW5kZXgyICsgdGhpcy5sZWZ0Lmxlbmd0aCAtIDFdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSBzcGxpY2UgYnVmZmVyLCBvbmUgZ3JlYXRlciB0aGFuIHRoZSBsYXJnZXN0IGluZGV4IGluIHRoZQogICAgICAgKiBhcnJheS4KICAgICAgICovCiAgICAgIGdldCBsZW5ndGgoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubGVmdC5sZW5ndGggKyB0aGlzLnJpZ2h0Lmxlbmd0aDsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVtb3ZlIGFuZCByZXR1cm4gYGxpc3RbMF1gOwogICAgICAgKiBtb3ZlcyB0aGUgY3Vyc29yIHRvIGAwYC4KICAgICAgICoKICAgICAgICogQHJldHVybnMge1QgfCB1bmRlZmluZWR9CiAgICAgICAqICAgSXRlbSwgb3B0aW9uYWwuCiAgICAgICAqLwogICAgICBzaGlmdCgpIHsKICAgICAgICB0aGlzLnNldEN1cnNvcigwKTsKICAgICAgICByZXR1cm4gdGhpcy5yaWdodC5wb3AoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2xpY2UgdGhlIGJ1ZmZlciB0byBnZXQgYW4gYXJyYXk7CiAgICAgICAqIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvci4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0CiAgICAgICAqICAgU3RhcnQuCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2VuZF0KICAgICAgICogICBFbmQgKG9wdGlvbmFsKS4KICAgICAgICogQHJldHVybnMge0FycmF5PFQ+fQogICAgICAgKiAgIEFycmF5IG9mIGl0ZW1zLgogICAgICAgKi8KICAgICAgc2xpY2Uoc3RhcnQsIGVuZDMpIHsKICAgICAgICBjb25zdCBzdG9wID0gZW5kMyA9PT0gbnVsbCB8fCBlbmQzID09PSB2b2lkIDAgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiBlbmQzOwogICAgICAgIGlmIChzdG9wIDwgdGhpcy5sZWZ0Lmxlbmd0aCkgewogICAgICAgICAgcmV0dXJuIHRoaXMubGVmdC5zbGljZShzdGFydCwgc3RvcCk7CiAgICAgICAgfQogICAgICAgIGlmIChzdGFydCA+IHRoaXMubGVmdC5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnJpZ2h0LnNsaWNlKHRoaXMucmlnaHQubGVuZ3RoIC0gc3RvcCArIHRoaXMubGVmdC5sZW5ndGgsIHRoaXMucmlnaHQubGVuZ3RoIC0gc3RhcnQgKyB0aGlzLmxlZnQubGVuZ3RoKS5yZXZlcnNlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLmxlZnQuc2xpY2Uoc3RhcnQpLmNvbmNhdCh0aGlzLnJpZ2h0LnNsaWNlKHRoaXMucmlnaHQubGVuZ3RoIC0gc3RvcCArIHRoaXMubGVmdC5sZW5ndGgpLnJldmVyc2UoKSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIE1pbWljcyB0aGUgYmVoYXZpb3Igb2YgQXJyYXkucHJvdG90eXBlLnNwbGljZSgpIGV4Y2VwdCBmb3IgdGhlIGNoYW5nZSBvZgogICAgICAgKiBpbnRlcmZhY2UgbmVjZXNzYXJ5IHRvIGF2b2lkIHNlZ2ZhdWx0cyB3aGVuIHBhdGNoaW5nIGluIHZlcnkgbGFyZ2UgYXJyYXlzLgogICAgICAgKgogICAgICAgKiBUaGlzIG9wZXJhdGlvbiBtb3ZlcyBjdXJzb3IgaXMgbW92ZWQgdG8gYHN0YXJ0YCBhbmQgcmVzdWx0cyBpbiB0aGUgY3Vyc29yCiAgICAgICAqIHBsYWNlZCBhZnRlciBhbnkgaW5zZXJ0ZWQgaXRlbXMuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydAogICAgICAgKiAgIFN0YXJ0OwogICAgICAgKiAgIHplcm8tYmFzZWQgaW5kZXggYXQgd2hpY2ggdG8gc3RhcnQgY2hhbmdpbmcgdGhlIGFycmF5OwogICAgICAgKiAgIG5lZ2F0aXZlIG51bWJlcnMgY291bnQgYmFja3dhcmRzIGZyb20gdGhlIGVuZCBvZiB0aGUgYXJyYXkgYW5kIHZhbHVlcwogICAgICAgKiAgIHRoYXQgYXJlIG91dC1vZiBib3VuZHMgYXJlIGNsYW1wZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGVuZCBvZiB0aGUgYXJyYXkuCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2RlbGV0ZUNvdW50PTBdCiAgICAgICAqICAgRGVsZXRlIGNvdW50IChkZWZhdWx0OiBgMGApOwogICAgICAgKiAgIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRlbGV0ZSwgc3RhcnRpbmcgZnJvbSBzdGFydC4KICAgICAgICogQHBhcmFtIHtBcnJheTxUPiB8IG51bGwgfCB1bmRlZmluZWR9IFtpdGVtcz1bXV0KICAgICAgICogICBJdGVtcyB0byBpbmNsdWRlIGluIHBsYWNlIG9mIHRoZSBkZWxldGVkIGl0ZW1zIChkZWZhdWx0OiBgW11gKS4KICAgICAgICogQHJldHVybiB7QXJyYXk8VD59CiAgICAgICAqICAgQW55IHJlbW92ZWQgaXRlbXMuCiAgICAgICAqLwogICAgICBzcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBpdGVtcykgewogICAgICAgIGNvbnN0IGNvdW50MiA9IGRlbGV0ZUNvdW50IHx8IDA7CiAgICAgICAgdGhpcy5zZXRDdXJzb3IoTWF0aC50cnVuYyhzdGFydCkpOwogICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLnJpZ2h0LnNwbGljZSh0aGlzLnJpZ2h0Lmxlbmd0aCAtIGNvdW50MiwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTsKICAgICAgICBpZiAoaXRlbXMpIGNodW5rZWRQdXNoKHRoaXMubGVmdCwgaXRlbXMpOwogICAgICAgIHJldHVybiByZW1vdmVkLnJldmVyc2UoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGhpZ2hlc3QtbnVtYmVyZWQgaXRlbSBpbiB0aGUgYXJyYXksIHNvCiAgICAgICAqIGBsaXN0W2xpc3QubGVuZ3RoIC0gMV1gOwogICAgICAgKiBNb3ZlcyB0aGUgY3Vyc29yIHRvIGBsZW5ndGhgLgogICAgICAgKgogICAgICAgKiBAcmV0dXJucyB7VCB8IHVuZGVmaW5lZH0KICAgICAgICogICBJdGVtLCBvcHRpb25hbC4KICAgICAgICovCiAgICAgIHBvcCgpIHsKICAgICAgICB0aGlzLnNldEN1cnNvcihOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOwogICAgICAgIHJldHVybiB0aGlzLmxlZnQucG9wKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEluc2VydHMgYSBzaW5nbGUgaXRlbSB0byB0aGUgaGlnaC1udW1iZXJlZCBzaWRlIG9mIHRoZSBhcnJheTsKICAgICAgICogbW92ZXMgdGhlIGN1cnNvciB0byBgbGVuZ3RoYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtUfSBpdGVtCiAgICAgICAqICAgSXRlbS4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgcHVzaChpdGVtKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3IoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTsKICAgICAgICB0aGlzLmxlZnQucHVzaChpdGVtKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSW5zZXJ0cyBtYW55IGl0ZW1zIHRvIHRoZSBoaWdoLW51bWJlcmVkIHNpZGUgb2YgdGhlIGFycmF5LgogICAgICAgKiBNb3ZlcyB0aGUgY3Vyc29yIHRvIGBsZW5ndGhgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0FycmF5PFQ+fSBpdGVtcwogICAgICAgKiAgIEl0ZW1zLgogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcuCiAgICAgICAqLwogICAgICBwdXNoTWFueShpdGVtcykgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7CiAgICAgICAgY2h1bmtlZFB1c2godGhpcy5sZWZ0LCBpdGVtcyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEluc2VydHMgYSBzaW5nbGUgaXRlbSB0byB0aGUgbG93LW51bWJlcmVkIHNpZGUgb2YgdGhlIGFycmF5OwogICAgICAgKiBNb3ZlcyB0aGUgY3Vyc29yIHRvIGAwYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtUfSBpdGVtCiAgICAgICAqICAgSXRlbS4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgdW5zaGlmdChpdGVtKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3IoMCk7CiAgICAgICAgdGhpcy5yaWdodC5wdXNoKGl0ZW0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJbnNlcnRzIG1hbnkgaXRlbXMgdG8gdGhlIGxvdy1udW1iZXJlZCBzaWRlIG9mIHRoZSBhcnJheTsKICAgICAgICogbW92ZXMgdGhlIGN1cnNvciB0byBgMGAuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7QXJyYXk8VD59IGl0ZW1zCiAgICAgICAqICAgSXRlbXMuCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqICAgTm90aGluZy4KICAgICAgICovCiAgICAgIHVuc2hpZnRNYW55KGl0ZW1zKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3IoMCk7CiAgICAgICAgY2h1bmtlZFB1c2godGhpcy5yaWdodCwgaXRlbXMucmV2ZXJzZSgpKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTW92ZSB0aGUgY3Vyc29yIHRvIGEgc3BlY2lmaWMgcG9zaXRpb24gaW4gdGhlIGFycmF5LiBSZXF1aXJlcwogICAgICAgKiB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgZGlzdGFuY2UgbW92ZWQuCiAgICAgICAqCiAgICAgICAqIElmIGBuIDwgMGAsIHRoZSBjdXJzb3Igd2lsbCBlbmQgdXAgYXQgdGhlIGJlZ2lubmluZy4KICAgICAgICogSWYgYG4gPiBsZW5ndGhgLCB0aGUgY3Vyc29yIHdpbGwgZW5kIHVwIGF0IHRoZSBlbmQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuCiAgICAgICAqICAgUG9zaXRpb24uCiAgICAgICAqIEByZXR1cm4ge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgc2V0Q3Vyc29yKG4xMykgewogICAgICAgIGlmIChuMTMgPT09IHRoaXMubGVmdC5sZW5ndGggfHwgbjEzID4gdGhpcy5sZWZ0Lmxlbmd0aCAmJiB0aGlzLnJpZ2h0Lmxlbmd0aCA9PT0gMCB8fCBuMTMgPCAwICYmIHRoaXMubGVmdC5sZW5ndGggPT09IDApIHJldHVybjsKICAgICAgICBpZiAobjEzIDwgdGhpcy5sZWZ0Lmxlbmd0aCkgewogICAgICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMubGVmdC5zcGxpY2UobjEzLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOwogICAgICAgICAgY2h1bmtlZFB1c2godGhpcy5yaWdodCwgcmVtb3ZlZC5yZXZlcnNlKCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5yaWdodC5zcGxpY2UodGhpcy5sZWZ0Lmxlbmd0aCArIHRoaXMucmlnaHQubGVuZ3RoIC0gbjEzLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOwogICAgICAgICAgY2h1bmtlZFB1c2godGhpcy5sZWZ0LCByZW1vdmVkLnJldmVyc2UoKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtc3VidG9rZW5pemVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplL2luZGV4LmpzCmZ1bmN0aW9uIHN1YnRva2VuaXplKGV2ZW50c0FycmF5KSB7CiAgY29uc3QganVtcHMgPSB7fTsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGV2ZW50OwogIGxldCBsaW5lSW5kZXg7CiAgbGV0IG90aGVySW5kZXg7CiAgbGV0IG90aGVyRXZlbnQ7CiAgbGV0IHBhcmFtZXRlcnM7CiAgbGV0IHN1YmV2ZW50czsKICBsZXQgbW9yZTsKICBjb25zdCBldmVudHMgPSBuZXcgU3BsaWNlQnVmZmVyKGV2ZW50c0FycmF5KTsKICB3aGlsZSAoKytpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICB3aGlsZSAoaW5kZXgyIGluIGp1bXBzKSB7CiAgICAgIGluZGV4MiA9IGp1bXBzW2luZGV4Ml07CiAgICB9CiAgICBldmVudCA9IGV2ZW50cy5nZXQoaW5kZXgyKTsKICAgIGlmIChpbmRleDIgJiYgZXZlbnRbMV0udHlwZSA9PT0gImNodW5rRmxvdyIgJiYgZXZlbnRzLmdldChpbmRleDIgLSAxKVsxXS50eXBlID09PSAibGlzdEl0ZW1QcmVmaXgiKSB7CiAgICAgIHN1YmV2ZW50cyA9IGV2ZW50WzFdLl90b2tlbml6ZXIuZXZlbnRzOwogICAgICBvdGhlckluZGV4ID0gMDsKICAgICAgaWYgKG90aGVySW5kZXggPCBzdWJldmVudHMubGVuZ3RoICYmIHN1YmV2ZW50c1tvdGhlckluZGV4XVsxXS50eXBlID09PSAibGluZUVuZGluZ0JsYW5rIikgewogICAgICAgIG90aGVySW5kZXggKz0gMjsKICAgICAgfQogICAgICBpZiAob3RoZXJJbmRleCA8IHN1YmV2ZW50cy5sZW5ndGggJiYgc3ViZXZlbnRzW290aGVySW5kZXhdWzFdLnR5cGUgPT09ICJjb250ZW50IikgewogICAgICAgIHdoaWxlICgrK290aGVySW5kZXggPCBzdWJldmVudHMubGVuZ3RoKSB7CiAgICAgICAgICBpZiAoc3ViZXZlbnRzW290aGVySW5kZXhdWzFdLnR5cGUgPT09ICJjb250ZW50IikgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdWJldmVudHNbb3RoZXJJbmRleF1bMV0udHlwZSA9PT0gImNodW5rVGV4dCIpIHsKICAgICAgICAgICAgc3ViZXZlbnRzW290aGVySW5kZXhdWzFdLl9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSA9IHRydWU7CiAgICAgICAgICAgIG90aGVySW5kZXgrKzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChldmVudFswXSA9PT0gImVudGVyIikgewogICAgICBpZiAoZXZlbnRbMV0uY29udGVudFR5cGUpIHsKICAgICAgICBPYmplY3QuYXNzaWduKGp1bXBzLCBzdWJjb250ZW50KGV2ZW50cywgaW5kZXgyKSk7CiAgICAgICAgaW5kZXgyID0ganVtcHNbaW5kZXgyXTsKICAgICAgICBtb3JlID0gdHJ1ZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChldmVudFsxXS5fY29udGFpbmVyKSB7CiAgICAgIG90aGVySW5kZXggPSBpbmRleDI7CiAgICAgIGxpbmVJbmRleCA9IHZvaWQgMDsKICAgICAgd2hpbGUgKG90aGVySW5kZXgtLSkgewogICAgICAgIG90aGVyRXZlbnQgPSBldmVudHMuZ2V0KG90aGVySW5kZXgpOwogICAgICAgIGlmIChvdGhlckV2ZW50WzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nIiB8fCBvdGhlckV2ZW50WzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nQmxhbmsiKSB7CiAgICAgICAgICBpZiAob3RoZXJFdmVudFswXSA9PT0gImVudGVyIikgewogICAgICAgICAgICBpZiAobGluZUluZGV4KSB7CiAgICAgICAgICAgICAgZXZlbnRzLmdldChsaW5lSW5kZXgpWzFdLnR5cGUgPSAibGluZUVuZGluZ0JsYW5rIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBvdGhlckV2ZW50WzFdLnR5cGUgPSAibGluZUVuZGluZyI7CiAgICAgICAgICAgIGxpbmVJbmRleCA9IG90aGVySW5kZXg7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChvdGhlckV2ZW50WzFdLnR5cGUgPT09ICJsaW5lUHJlZml4IiB8fCBvdGhlckV2ZW50WzFdLnR5cGUgPT09ICJsaXN0SXRlbUluZGVudCIpIHsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChsaW5lSW5kZXgpIHsKICAgICAgICBldmVudFsxXS5lbmQgPSB7CiAgICAgICAgICAuLi5ldmVudHMuZ2V0KGxpbmVJbmRleClbMV0uc3RhcnQKICAgICAgICB9OwogICAgICAgIHBhcmFtZXRlcnMgPSBldmVudHMuc2xpY2UobGluZUluZGV4LCBpbmRleDIpOwogICAgICAgIHBhcmFtZXRlcnMudW5zaGlmdChldmVudCk7CiAgICAgICAgZXZlbnRzLnNwbGljZShsaW5lSW5kZXgsIGluZGV4MiAtIGxpbmVJbmRleCArIDEsIHBhcmFtZXRlcnMpOwogICAgICB9CiAgICB9CiAgfQogIHNwbGljZShldmVudHNBcnJheSwgMCwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLCBldmVudHMuc2xpY2UoMCkpOwogIHJldHVybiAhbW9yZTsKfQpmdW5jdGlvbiBzdWJjb250ZW50KGV2ZW50cywgZXZlbnRJbmRleCkgewogIGNvbnN0IHRva2VuID0gZXZlbnRzLmdldChldmVudEluZGV4KVsxXTsKICBjb25zdCBjb250ZXh0MiA9IGV2ZW50cy5nZXQoZXZlbnRJbmRleClbMl07CiAgbGV0IHN0YXJ0UG9zaXRpb24gPSBldmVudEluZGV4IC0gMTsKICBjb25zdCBzdGFydFBvc2l0aW9ucyA9IFtdOwogIGxldCB0b2tlbml6ZXIgPSB0b2tlbi5fdG9rZW5pemVyOwogIGlmICghdG9rZW5pemVyKSB7CiAgICB0b2tlbml6ZXIgPSBjb250ZXh0Mi5wYXJzZXJbdG9rZW4uY29udGVudFR5cGVdKHRva2VuLnN0YXJ0KTsKICAgIGlmICh0b2tlbi5fY29udGVudFR5cGVUZXh0VHJhaWxpbmcpIHsKICAgICAgdG9rZW5pemVyLl9jb250ZW50VHlwZVRleHRUcmFpbGluZyA9IHRydWU7CiAgICB9CiAgfQogIGNvbnN0IGNoaWxkRXZlbnRzID0gdG9rZW5pemVyLmV2ZW50czsKICBjb25zdCBqdW1wcyA9IFtdOwogIGNvbnN0IGdhcHMgPSB7fTsKICBsZXQgc3RyZWFtOwogIGxldCBwcmV2aW91czM7CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBjdXJyZW50ID0gdG9rZW47CiAgbGV0IGFkanVzdCA9IDA7CiAgbGV0IHN0YXJ0ID0gMDsKICBjb25zdCBicmVha3MgPSBbc3RhcnRdOwogIHdoaWxlIChjdXJyZW50KSB7CiAgICB3aGlsZSAoZXZlbnRzLmdldCgrK3N0YXJ0UG9zaXRpb24pWzFdICE9PSBjdXJyZW50KSB7CiAgICB9CiAgICBzdGFydFBvc2l0aW9ucy5wdXNoKHN0YXJ0UG9zaXRpb24pOwogICAgaWYgKCFjdXJyZW50Ll90b2tlbml6ZXIpIHsKICAgICAgc3RyZWFtID0gY29udGV4dDIuc2xpY2VTdHJlYW0oY3VycmVudCk7CiAgICAgIGlmICghY3VycmVudC5uZXh0KSB7CiAgICAgICAgc3RyZWFtLnB1c2gobnVsbCk7CiAgICAgIH0KICAgICAgaWYgKHByZXZpb3VzMykgewogICAgICAgIHRva2VuaXplci5kZWZpbmVTa2lwKGN1cnJlbnQuc3RhcnQpOwogICAgICB9CiAgICAgIGlmIChjdXJyZW50Ll9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSkgewogICAgICAgIHRva2VuaXplci5fZ2ZtVGFza2xpc3RGaXJzdENvbnRlbnRPZkxpc3RJdGVtID0gdHJ1ZTsKICAgICAgfQogICAgICB0b2tlbml6ZXIud3JpdGUoc3RyZWFtKTsKICAgICAgaWYgKGN1cnJlbnQuX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtKSB7CiAgICAgICAgdG9rZW5pemVyLl9nZm1UYXNrbGlzdEZpcnN0Q29udGVudE9mTGlzdEl0ZW0gPSB2b2lkIDA7CiAgICAgIH0KICAgIH0KICAgIHByZXZpb3VzMyA9IGN1cnJlbnQ7CiAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0OwogIH0KICBjdXJyZW50ID0gdG9rZW47CiAgd2hpbGUgKCsraW5kZXgyIDwgY2hpbGRFdmVudHMubGVuZ3RoKSB7CiAgICBpZiAoCiAgICAgIC8vIEZpbmQgYSB2b2lkIHRva2VuIHRoYXQgaW5jbHVkZXMgYSBicmVhay4KICAgICAgY2hpbGRFdmVudHNbaW5kZXgyXVswXSA9PT0gImV4aXQiICYmIGNoaWxkRXZlbnRzW2luZGV4MiAtIDFdWzBdID09PSAiZW50ZXIiICYmIGNoaWxkRXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gY2hpbGRFdmVudHNbaW5kZXgyIC0gMV1bMV0udHlwZSAmJiBjaGlsZEV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0LmxpbmUgIT09IGNoaWxkRXZlbnRzW2luZGV4Ml1bMV0uZW5kLmxpbmUKICAgICkgewogICAgICBzdGFydCA9IGluZGV4MiArIDE7CiAgICAgIGJyZWFrcy5wdXNoKHN0YXJ0KTsKICAgICAgY3VycmVudC5fdG9rZW5pemVyID0gdm9pZCAwOwogICAgICBjdXJyZW50LnByZXZpb3VzID0gdm9pZCAwOwogICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0OwogICAgfQogIH0KICB0b2tlbml6ZXIuZXZlbnRzID0gW107CiAgaWYgKGN1cnJlbnQpIHsKICAgIGN1cnJlbnQuX3Rva2VuaXplciA9IHZvaWQgMDsKICAgIGN1cnJlbnQucHJldmlvdXMgPSB2b2lkIDA7CiAgfSBlbHNlIHsKICAgIGJyZWFrcy5wb3AoKTsKICB9CiAgaW5kZXgyID0gYnJlYWtzLmxlbmd0aDsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIGNvbnN0IHNsaWNlID0gY2hpbGRFdmVudHMuc2xpY2UoYnJlYWtzW2luZGV4Ml0sIGJyZWFrc1tpbmRleDIgKyAxXSk7CiAgICBjb25zdCBzdGFydDIgPSBzdGFydFBvc2l0aW9ucy5wb3AoKTsKICAgIGp1bXBzLnB1c2goW3N0YXJ0Miwgc3RhcnQyICsgc2xpY2UubGVuZ3RoIC0gMV0pOwogICAgZXZlbnRzLnNwbGljZShzdGFydDIsIDIsIHNsaWNlKTsKICB9CiAganVtcHMucmV2ZXJzZSgpOwogIGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGp1bXBzLmxlbmd0aCkgewogICAgZ2Fwc1thZGp1c3QgKyBqdW1wc1tpbmRleDJdWzBdXSA9IGFkanVzdCArIGp1bXBzW2luZGV4Ml1bMV07CiAgICBhZGp1c3QgKz0ganVtcHNbaW5kZXgyXVsxXSAtIGp1bXBzW2luZGV4Ml1bMF0gLSAxOwogIH0KICByZXR1cm4gZ2FwczsKfQp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9zdWJ0b2tlbml6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1zdWJ0b2tlbml6ZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NodW5rZWQoKTsKICAgIGluaXRfc3BsaWNlX2J1ZmZlcigpOwogICAgaW5pdF9zcGxpY2VfYnVmZmVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb250ZW50LmpzCmZ1bmN0aW9uIHJlc29sdmVDb250ZW50KGV2ZW50cykgewogIHN1YnRva2VuaXplKGV2ZW50cyk7CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiB0b2tlbml6ZUNvbnRlbnQoZWZmZWN0cywgb2szKSB7CiAgbGV0IHByZXZpb3VzMzsKICByZXR1cm4gY2h1bmtTdGFydDsKICBmdW5jdGlvbiBjaHVua1N0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJjb250ZW50Iik7CiAgICBwcmV2aW91czMgPSBlZmZlY3RzLmVudGVyKCJjaHVua0NvbnRlbnQiLCB7CiAgICAgIGNvbnRlbnRUeXBlOiAiY29udGVudCIKICAgIH0pOwogICAgcmV0dXJuIGNodW5rSW5zaWRlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY2h1bmtJbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gY29udGVudEVuZChjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhjb250aW51YXRpb25Db25zdHJ1Y3QsIGNvbnRlbnRDb250aW51ZSwgY29udGVudEVuZCkoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjaHVua0luc2lkZTsKICB9CiAgZnVuY3Rpb24gY29udGVudEVuZChjb2RlNCkgewogICAgZWZmZWN0cy5leGl0KCJjaHVua0NvbnRlbnQiKTsKICAgIGVmZmVjdHMuZXhpdCgiY29udGVudCIpOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRlbnRDb250aW51ZShjb2RlNCkgewogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtDb250ZW50Iik7CiAgICBwcmV2aW91czMubmV4dCA9IGVmZmVjdHMuZW50ZXIoImNodW5rQ29udGVudCIsIHsKICAgICAgY29udGVudFR5cGU6ICJjb250ZW50IiwKICAgICAgcHJldmlvdXM6IHByZXZpb3VzMwogICAgfSk7CiAgICBwcmV2aW91czMgPSBwcmV2aW91czMubmV4dDsKICAgIHJldHVybiBjaHVua0luc2lkZTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVDb250aW51YXRpb24oZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHN0YXJ0TG9va2FoZWFkOwogIGZ1bmN0aW9uIHN0YXJ0TG9va2FoZWFkKGNvZGU0KSB7CiAgICBlZmZlY3RzLmV4aXQoImNodW5rQ29udGVudCIpOwogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBwcmVmaXhlZCwgImxpbmVQcmVmaXgiKTsKICB9CiAgZnVuY3Rpb24gcHJlZml4ZWQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgY29uc3QgdGFpbCA9IHNlbGYyLmV2ZW50c1tzZWxmMi5ldmVudHMubGVuZ3RoIC0gMV07CiAgICBpZiAoIXNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIikgJiYgdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09ICJsaW5lUHJlZml4IiAmJiB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA+PSA0KSB7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGVmZmVjdHMuaW50ZXJydXB0KHNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzLmZsb3csIG5vaywgb2szKShjb2RlNCk7CiAgfQp9CnZhciBjb250ZW50LCBjb250aW51YXRpb25Db25zdHJ1Y3Q7CnZhciBpbml0X2NvbnRlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb250ZW50LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX3N1YnRva2VuaXplKCk7CiAgICBjb250ZW50ID0gewogICAgICByZXNvbHZlOiByZXNvbHZlQ29udGVudCwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQ29udGVudAogICAgfTsKICAgIGNvbnRpbnVhdGlvbkNvbnN0cnVjdCA9IHsKICAgICAgcGFydGlhbDogdHJ1ZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQ29udGludWF0aW9uCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3RvcnktZGVzdGluYXRpb25AMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LWRlc3RpbmF0aW9uL2luZGV4LmpzCmZ1bmN0aW9uIGZhY3RvcnlEZXN0aW5hdGlvbihlZmZlY3RzLCBvazMsIG5vaywgdHlwZTUsIGxpdGVyYWxUeXBlLCBsaXRlcmFsTWFya2VyVHlwZSwgcmF3VHlwZSwgc3RyaW5nVHlwZSwgbWF4MykgewogIGNvbnN0IGxpbWl0ID0gbWF4MyB8fCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgbGV0IGJhbGFuY2UgPSAwOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MCkgewogICAgICBlZmZlY3RzLmVudGVyKHR5cGU1KTsKICAgICAgZWZmZWN0cy5lbnRlcihsaXRlcmFsVHlwZSk7CiAgICAgIGVmZmVjdHMuZW50ZXIobGl0ZXJhbE1hcmtlclR5cGUpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQobGl0ZXJhbE1hcmtlclR5cGUpOwogICAgICByZXR1cm4gZW5jbG9zZWRCZWZvcmU7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDMyIHx8IGNvZGU0ID09PSA0MSB8fCBhc2NpaUNvbnRyb2woY29kZTQpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcih0eXBlNSk7CiAgICBlZmZlY3RzLmVudGVyKHJhd1R5cGUpOwogICAgZWZmZWN0cy5lbnRlcihzdHJpbmdUeXBlKTsKICAgIGVmZmVjdHMuZW50ZXIoImNodW5rU3RyaW5nIiwgewogICAgICBjb250ZW50VHlwZTogInN0cmluZyIKICAgIH0pOwogICAgcmV0dXJuIHJhdzIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBlbmNsb3NlZEJlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MikgewogICAgICBlZmZlY3RzLmVudGVyKGxpdGVyYWxNYXJrZXJUeXBlKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KGxpdGVyYWxNYXJrZXJUeXBlKTsKICAgICAgZWZmZWN0cy5leGl0KGxpdGVyYWxUeXBlKTsKICAgICAgZWZmZWN0cy5leGl0KHR5cGU1KTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoc3RyaW5nVHlwZSk7CiAgICBlZmZlY3RzLmVudGVyKCJjaHVua1N0cmluZyIsIHsKICAgICAgY29udGVudFR5cGU6ICJzdHJpbmciCiAgICB9KTsKICAgIHJldHVybiBlbmNsb3NlZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGVuY2xvc2VkKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtTdHJpbmciKTsKICAgICAgZWZmZWN0cy5leGl0KHN0cmluZ1R5cGUpOwogICAgICByZXR1cm4gZW5jbG9zZWRCZWZvcmUoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA2MCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb2RlNCA9PT0gOTIgPyBlbmNsb3NlZEVzY2FwZSA6IGVuY2xvc2VkOwogIH0KICBmdW5jdGlvbiBlbmNsb3NlZEVzY2FwZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MCB8fCBjb2RlNCA9PT0gNjIgfHwgY29kZTQgPT09IDkyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBlbmNsb3NlZDsKICAgIH0KICAgIHJldHVybiBlbmNsb3NlZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHJhdzIoY29kZTQpIHsKICAgIGlmICghYmFsYW5jZSAmJiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDQxIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSkgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rU3RyaW5nIik7CiAgICAgIGVmZmVjdHMuZXhpdChzdHJpbmdUeXBlKTsKICAgICAgZWZmZWN0cy5leGl0KHJhd1R5cGUpOwogICAgICBlZmZlY3RzLmV4aXQodHlwZTUpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIGlmIChiYWxhbmNlIDwgbGltaXQgJiYgY29kZTQgPT09IDQwKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGJhbGFuY2UrKzsKICAgICAgcmV0dXJuIHJhdzI7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQxKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGJhbGFuY2UtLTsKICAgICAgcmV0dXJuIHJhdzI7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDMyIHx8IGNvZGU0ID09PSA0MCB8fCBhc2NpaUNvbnRyb2woY29kZTQpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb2RlNCA9PT0gOTIgPyByYXdFc2NhcGUgOiByYXcyOwogIH0KICBmdW5jdGlvbiByYXdFc2NhcGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDAgfHwgY29kZTQgPT09IDQxIHx8IGNvZGU0ID09PSA5MikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gcmF3MjsKICAgIH0KICAgIHJldHVybiByYXcyKGNvZGU0KTsKICB9Cn0KdmFyIGluaXRfbWljcm9tYXJrX2ZhY3RvcnlfZGVzdGluYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS1kZXN0aW5hdGlvbkAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3RvcnktZGVzdGluYXRpb24vaW5kZXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LWxhYmVsQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS1sYWJlbC9pbmRleC5qcwpmdW5jdGlvbiBmYWN0b3J5TGFiZWwoZWZmZWN0cywgb2szLCBub2ssIHR5cGU1LCBtYXJrZXJUeXBlLCBzdHJpbmdUeXBlKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBzaXplID0gMDsKICBsZXQgc2VlbjsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIodHlwZTUpOwogICAgZWZmZWN0cy5lbnRlcihtYXJrZXJUeXBlKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQobWFya2VyVHlwZSk7CiAgICBlZmZlY3RzLmVudGVyKHN0cmluZ1R5cGUpOwogICAgcmV0dXJuIGF0QnJlYWs7CiAgfQogIGZ1bmN0aW9uIGF0QnJlYWsoY29kZTQpIHsKICAgIGlmIChzaXplID4gOTk5IHx8IGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA5MSB8fCBjb2RlNCA9PT0gOTMgJiYgIXNlZW4gfHwgLy8gVG8gZG86IHJlbW92ZSBpbiB0aGUgZnV0dXJlIG9uY2Ugd2XigJl2ZSBzd2l0Y2hlZCBmcm9tCiAgICAvLyBgbWljcm9tYXJrLWV4dGVuc2lvbi1mb290bm90ZWAgdG8gYG1pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlYCwKICAgIC8vIHdoaWNoIGRvZXNu4oCZdCBuZWVkIHRoaXMuCiAgICAvLyBIaWRkZW4gZm9vdG5vdGVzIGhvb2suCiAgICAvKiBjOCBpZ25vcmUgbmV4dCAzICovCiAgICBjb2RlNCA9PT0gOTQgJiYgIXNpemUgJiYgIl9oaWRkZW5Gb290bm90ZVN1cHBvcnQiIGluIHNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmV4aXQoc3RyaW5nVHlwZSk7CiAgICAgIGVmZmVjdHMuZW50ZXIobWFya2VyVHlwZSk7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdChtYXJrZXJUeXBlKTsKICAgICAgZWZmZWN0cy5leGl0KHR5cGU1KTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgIHJldHVybiBhdEJyZWFrOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiY2h1bmtTdHJpbmciLCB7CiAgICAgIGNvbnRlbnRUeXBlOiAic3RyaW5nIgogICAgfSk7CiAgICByZXR1cm4gbGFiZWxJbnNpZGUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBsYWJlbEluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA5MSB8fCBjb2RlNCA9PT0gOTMgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSB8fCBzaXplKysgPiA5OTkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjaHVua1N0cmluZyIpOwogICAgICByZXR1cm4gYXRCcmVhayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgaWYgKCFzZWVuKSBzZWVuID0gIW1hcmtkb3duU3BhY2UoY29kZTQpOwogICAgcmV0dXJuIGNvZGU0ID09PSA5MiA/IGxhYmVsRXNjYXBlIDogbGFiZWxJbnNpZGU7CiAgfQogIGZ1bmN0aW9uIGxhYmVsRXNjYXBlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDkxIHx8IGNvZGU0ID09PSA5MiB8fCBjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgc2l6ZSsrOwogICAgICByZXR1cm4gbGFiZWxJbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbGFiZWxJbnNpZGUoY29kZTQpOwogIH0KfQp2YXIgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9sYWJlbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LWxhYmVsQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS1sYWJlbC9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3RvcnktdGl0bGVAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXRpdGxlL2luZGV4LmpzCmZ1bmN0aW9uIGZhY3RvcnlUaXRsZShlZmZlY3RzLCBvazMsIG5vaywgdHlwZTUsIG1hcmtlclR5cGUsIHN0cmluZ1R5cGUpIHsKICBsZXQgbWFya2VyOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAzNCB8fCBjb2RlNCA9PT0gMzkgfHwgY29kZTQgPT09IDQwKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIodHlwZTUpOwogICAgICBlZmZlY3RzLmVudGVyKG1hcmtlclR5cGUpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQobWFya2VyVHlwZSk7CiAgICAgIG1hcmtlciA9IGNvZGU0ID09PSA0MCA/IDQxIDogY29kZTQ7CiAgICAgIHJldHVybiBiZWdpbjM7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVnaW4zKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICBlZmZlY3RzLmVudGVyKG1hcmtlclR5cGUpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQobWFya2VyVHlwZSk7CiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlNSk7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKHN0cmluZ1R5cGUpOwogICAgcmV0dXJuIGF0QnJlYWsoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhdEJyZWFrKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICBlZmZlY3RzLmV4aXQoc3RyaW5nVHlwZSk7CiAgICAgIHJldHVybiBiZWdpbjMobWFya2VyKTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYXRCcmVhaywgImxpbmVQcmVmaXgiKTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImNodW5rU3RyaW5nIiwgewogICAgICBjb250ZW50VHlwZTogInN0cmluZyIKICAgIH0pOwogICAgcmV0dXJuIGluc2lkZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBtYXJrZXIgfHwgY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rU3RyaW5nIik7CiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gY29kZTQgPT09IDkyID8gZXNjYXBlIDogaW5zaWRlOwogIH0KICBmdW5jdGlvbiBlc2NhcGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyIHx8IGNvZGU0ID09PSA5MikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gaW5zaWRlOwogICAgfQogICAgcmV0dXJuIGluc2lkZShjb2RlNCk7CiAgfQp9CnZhciBpbml0X21pY3JvbWFya19mYWN0b3J5X3RpdGxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3RvcnktdGl0bGVAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXRpdGxlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS13aGl0ZXNwYWNlQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS13aGl0ZXNwYWNlL2luZGV4LmpzCmZ1bmN0aW9uIGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIG9rMykgewogIGxldCBzZWVuOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgICAgc2VlbiA9IHRydWU7CiAgICAgIHJldHVybiBzdGFydDsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIHN0YXJ0LCBzZWVuID8gImxpbmVQcmVmaXgiIDogImxpbmVTdWZmaXgiKShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KdmFyIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfd2hpdGVzcGFjZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LXdoaXRlc3BhY2VAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXdoaXRlc3BhY2UvaW5kZXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2RlZmluaXRpb24uanMKZnVuY3Rpb24gdG9rZW5pemVEZWZpbml0aW9uKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBpZGVudGlmaWVyOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiZGVmaW5pdGlvbiIpOwogICAgcmV0dXJuIGJlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJlZm9yZShjb2RlNCkgewogICAgcmV0dXJuIGZhY3RvcnlMYWJlbC5jYWxsKAogICAgICBzZWxmMiwKICAgICAgZWZmZWN0cywKICAgICAgbGFiZWxBZnRlciwKICAgICAgLy8gTm90ZTogd2UgZG9u4oCZdCBuZWVkIHRvIHJlc2V0IHRoZSB3YXkgYG1hcmtkb3duLXJzYCBkb2VzLgogICAgICBub2ssCiAgICAgICJkZWZpbml0aW9uTGFiZWwiLAogICAgICAiZGVmaW5pdGlvbkxhYmVsTWFya2VyIiwKICAgICAgImRlZmluaXRpb25MYWJlbFN0cmluZyIKICAgICkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBsYWJlbEFmdGVyKGNvZGU0KSB7CiAgICBpZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcihzZWxmMi5zbGljZVNlcmlhbGl6ZShzZWxmMi5ldmVudHNbc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDFdWzFdKS5zbGljZSgxLCAtMSkpOwogICAgaWYgKGNvZGU0ID09PSA1OCkgewogICAgICBlZmZlY3RzLmVudGVyKCJkZWZpbml0aW9uTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiZGVmaW5pdGlvbk1hcmtlciIpOwogICAgICByZXR1cm4gbWFya2VyQWZ0ZXI7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbWFya2VyQWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSA/IGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIGRlc3RpbmF0aW9uQmVmb3JlKShjb2RlNCkgOiBkZXN0aW5hdGlvbkJlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGRlc3RpbmF0aW9uQmVmb3JlKGNvZGU0KSB7CiAgICByZXR1cm4gZmFjdG9yeURlc3RpbmF0aW9uKAogICAgICBlZmZlY3RzLAogICAgICBkZXN0aW5hdGlvbkFmdGVyLAogICAgICAvLyBOb3RlOiB3ZSBkb27igJl0IG5lZWQgdG8gcmVzZXQgdGhlIHdheSBgbWFya2Rvd24tcnNgIGRvZXMuCiAgICAgIG5vaywKICAgICAgImRlZmluaXRpb25EZXN0aW5hdGlvbiIsCiAgICAgICJkZWZpbml0aW9uRGVzdGluYXRpb25MaXRlcmFsIiwKICAgICAgImRlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXIiLAogICAgICAiZGVmaW5pdGlvbkRlc3RpbmF0aW9uUmF3IiwKICAgICAgImRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZyIKICAgICkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkZXN0aW5hdGlvbkFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KHRpdGxlQmVmb3JlLCBhZnRlciwgYWZ0ZXIpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlcldoaXRlc3BhY2UsICJ3aGl0ZXNwYWNlIikoY29kZTQpIDogYWZ0ZXJXaGl0ZXNwYWNlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYWZ0ZXJXaGl0ZXNwYWNlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImRlZmluaXRpb24iKTsKICAgICAgc2VsZjIucGFyc2VyLmRlZmluZWQucHVzaChpZGVudGlmaWVyKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVUaXRsZUJlZm9yZShlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiB0aXRsZUJlZm9yZTI7CiAgZnVuY3Rpb24gdGl0bGVCZWZvcmUyKGNvZGU0KSB7CiAgICByZXR1cm4gbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgPyBmYWN0b3J5V2hpdGVzcGFjZShlZmZlY3RzLCBiZWZvcmVNYXJrZXIpKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJlZm9yZU1hcmtlcihjb2RlNCkgewogICAgcmV0dXJuIGZhY3RvcnlUaXRsZShlZmZlY3RzLCB0aXRsZUFmdGVyLCBub2ssICJkZWZpbml0aW9uVGl0bGUiLCAiZGVmaW5pdGlvblRpdGxlTWFya2VyIiwgImRlZmluaXRpb25UaXRsZVN0cmluZyIpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGl0bGVBZnRlcihjb2RlNCkgewogICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZTQpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIHRpdGxlQWZ0ZXJPcHRpb25hbFdoaXRlc3BhY2UsICJ3aGl0ZXNwYWNlIikoY29kZTQpIDogdGl0bGVBZnRlck9wdGlvbmFsV2hpdGVzcGFjZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRpdGxlQWZ0ZXJPcHRpb25hbFdoaXRlc3BhY2UoY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpID8gb2szKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQp9CnZhciBkZWZpbml0aW9uMiwgdGl0bGVCZWZvcmU7CnZhciBpbml0X2RlZmluaXRpb24yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvZGVmaW5pdGlvbi5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X2Rlc3RpbmF0aW9uKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X2xhYmVsKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3RpdGxlKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3doaXRlc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX25vcm1hbGl6ZV9pZGVudGlmaWVyKCk7CiAgICBkZWZpbml0aW9uMiA9IHsKICAgICAgbmFtZTogImRlZmluaXRpb24iLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVEZWZpbml0aW9uCiAgICB9OwogICAgdGl0bGVCZWZvcmUgPSB7CiAgICAgIHBhcnRpYWw6IHRydWUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVRpdGxlQmVmb3JlCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaGFyZC1icmVhay1lc2NhcGUuanMKZnVuY3Rpb24gdG9rZW5pemVIYXJkQnJlYWtFc2NhcGUoZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImhhcmRCcmVha0VzY2FwZSIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBhZnRlcjsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiaGFyZEJyZWFrRXNjYXBlIik7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CnZhciBoYXJkQnJlYWtFc2NhcGU7CnZhciBpbml0X2hhcmRfYnJlYWtfZXNjYXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaGFyZC1icmVhay1lc2NhcGUuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGhhcmRCcmVha0VzY2FwZSA9IHsKICAgICAgbmFtZTogImhhcmRCcmVha0VzY2FwZSIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUhhcmRCcmVha0VzY2FwZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2hlYWRpbmctYXR4LmpzCmZ1bmN0aW9uIHJlc29sdmVIZWFkaW5nQXR4KGV2ZW50cywgY29udGV4dDIpIHsKICBsZXQgY29udGVudEVuZCA9IGV2ZW50cy5sZW5ndGggLSAyOwogIGxldCBjb250ZW50U3RhcnQgPSAzOwogIGxldCBjb250ZW50MzsKICBsZXQgdGV4dDk7CiAgaWYgKGV2ZW50c1tjb250ZW50U3RhcnRdWzFdLnR5cGUgPT09ICJ3aGl0ZXNwYWNlIikgewogICAgY29udGVudFN0YXJ0ICs9IDI7CiAgfQogIGlmIChjb250ZW50RW5kIC0gMiA+IGNvbnRlbnRTdGFydCAmJiBldmVudHNbY29udGVudEVuZF1bMV0udHlwZSA9PT0gIndoaXRlc3BhY2UiKSB7CiAgICBjb250ZW50RW5kIC09IDI7CiAgfQogIGlmIChldmVudHNbY29udGVudEVuZF1bMV0udHlwZSA9PT0gImF0eEhlYWRpbmdTZXF1ZW5jZSIgJiYgKGNvbnRlbnRTdGFydCA9PT0gY29udGVudEVuZCAtIDEgfHwgY29udGVudEVuZCAtIDQgPiBjb250ZW50U3RhcnQgJiYgZXZlbnRzW2NvbnRlbnRFbmQgLSAyXVsxXS50eXBlID09PSAid2hpdGVzcGFjZSIpKSB7CiAgICBjb250ZW50RW5kIC09IGNvbnRlbnRTdGFydCArIDEgPT09IGNvbnRlbnRFbmQgPyAyIDogNDsKICB9CiAgaWYgKGNvbnRlbnRFbmQgPiBjb250ZW50U3RhcnQpIHsKICAgIGNvbnRlbnQzID0gewogICAgICB0eXBlOiAiYXR4SGVhZGluZ1RleHQiLAogICAgICBzdGFydDogZXZlbnRzW2NvbnRlbnRTdGFydF1bMV0uc3RhcnQsCiAgICAgIGVuZDogZXZlbnRzW2NvbnRlbnRFbmRdWzFdLmVuZAogICAgfTsKICAgIHRleHQ5ID0gewogICAgICB0eXBlOiAiY2h1bmtUZXh0IiwKICAgICAgc3RhcnQ6IGV2ZW50c1tjb250ZW50U3RhcnRdWzFdLnN0YXJ0LAogICAgICBlbmQ6IGV2ZW50c1tjb250ZW50RW5kXVsxXS5lbmQsCiAgICAgIGNvbnRlbnRUeXBlOiAidGV4dCIKICAgIH07CiAgICBzcGxpY2UoZXZlbnRzLCBjb250ZW50U3RhcnQsIGNvbnRlbnRFbmQgLSBjb250ZW50U3RhcnQgKyAxLCBbWyJlbnRlciIsIGNvbnRlbnQzLCBjb250ZXh0Ml0sIFsiZW50ZXIiLCB0ZXh0OSwgY29udGV4dDJdLCBbImV4aXQiLCB0ZXh0OSwgY29udGV4dDJdLCBbImV4aXQiLCBjb250ZW50MywgY29udGV4dDJdXSk7CiAgfQogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gdG9rZW5pemVIZWFkaW5nQXR4KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgbGV0IHNpemUgPSAwOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiYXR4SGVhZGluZyIpOwogICAgcmV0dXJuIGJlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJlZm9yZShjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiYXR4SGVhZGluZ1NlcXVlbmNlIik7CiAgICByZXR1cm4gc2VxdWVuY2VPcGVuKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gc2VxdWVuY2VPcGVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDM1ICYmIHNpemUrKyA8IDYpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHNlcXVlbmNlT3BlbjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpOwogICAgICByZXR1cm4gYXRCcmVhayhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYXRCcmVhayhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAzNSkgewogICAgICBlZmZlY3RzLmVudGVyKCJhdHhIZWFkaW5nU2VxdWVuY2UiKTsKICAgICAgcmV0dXJuIHNlcXVlbmNlRnVydGhlcihjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImF0eEhlYWRpbmciKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhdEJyZWFrLCAid2hpdGVzcGFjZSIpKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImF0eEhlYWRpbmdUZXh0Iik7CiAgICByZXR1cm4gZGF0YShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHNlcXVlbmNlRnVydGhlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAzNSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gc2VxdWVuY2VGdXJ0aGVyOwogICAgfQogICAgZWZmZWN0cy5leGl0KCJhdHhIZWFkaW5nU2VxdWVuY2UiKTsKICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZGF0YShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSAzNSB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImF0eEhlYWRpbmdUZXh0Iik7CiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gZGF0YTsKICB9Cn0KdmFyIGhlYWRpbmdBdHg7CnZhciBpbml0X2hlYWRpbmdfYXR4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaGVhZGluZy1hdHguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCgpOwogICAgaGVhZGluZ0F0eCA9IHsKICAgICAgbmFtZTogImhlYWRpbmdBdHgiLAogICAgICByZXNvbHZlOiByZXNvbHZlSGVhZGluZ0F0eCwKICAgICAgdG9rZW5pemU6IHRva2VuaXplSGVhZGluZ0F0eAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWh0bWwtdGFnLW5hbWVAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWh0bWwtdGFnLW5hbWUvaW5kZXguanMKdmFyIGh0bWxCbG9ja05hbWVzLCBodG1sUmF3TmFtZXM7CnZhciBpbml0X21pY3JvbWFya191dGlsX2h0bWxfdGFnX25hbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1odG1sLXRhZy1uYW1lQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1odG1sLXRhZy1uYW1lL2luZGV4LmpzIigpIHsKICAgIGh0bWxCbG9ja05hbWVzID0gWwogICAgICAiYWRkcmVzcyIsCiAgICAgICJhcnRpY2xlIiwKICAgICAgImFzaWRlIiwKICAgICAgImJhc2UiLAogICAgICAiYmFzZWZvbnQiLAogICAgICAiYmxvY2txdW90ZSIsCiAgICAgICJib2R5IiwKICAgICAgImNhcHRpb24iLAogICAgICAiY2VudGVyIiwKICAgICAgImNvbCIsCiAgICAgICJjb2xncm91cCIsCiAgICAgICJkZCIsCiAgICAgICJkZXRhaWxzIiwKICAgICAgImRpYWxvZyIsCiAgICAgICJkaXIiLAogICAgICAiZGl2IiwKICAgICAgImRsIiwKICAgICAgImR0IiwKICAgICAgImZpZWxkc2V0IiwKICAgICAgImZpZ2NhcHRpb24iLAogICAgICAiZmlndXJlIiwKICAgICAgImZvb3RlciIsCiAgICAgICJmb3JtIiwKICAgICAgImZyYW1lIiwKICAgICAgImZyYW1lc2V0IiwKICAgICAgImgxIiwKICAgICAgImgyIiwKICAgICAgImgzIiwKICAgICAgImg0IiwKICAgICAgImg1IiwKICAgICAgImg2IiwKICAgICAgImhlYWQiLAogICAgICAiaGVhZGVyIiwKICAgICAgImhyIiwKICAgICAgImh0bWwiLAogICAgICAiaWZyYW1lIiwKICAgICAgImxlZ2VuZCIsCiAgICAgICJsaSIsCiAgICAgICJsaW5rIiwKICAgICAgIm1haW4iLAogICAgICAibWVudSIsCiAgICAgICJtZW51aXRlbSIsCiAgICAgICJuYXYiLAogICAgICAibm9mcmFtZXMiLAogICAgICAib2wiLAogICAgICAib3B0Z3JvdXAiLAogICAgICAib3B0aW9uIiwKICAgICAgInAiLAogICAgICAicGFyYW0iLAogICAgICAic2VhcmNoIiwKICAgICAgInNlY3Rpb24iLAogICAgICAic3VtbWFyeSIsCiAgICAgICJ0YWJsZSIsCiAgICAgICJ0Ym9keSIsCiAgICAgICJ0ZCIsCiAgICAgICJ0Zm9vdCIsCiAgICAgICJ0aCIsCiAgICAgICJ0aGVhZCIsCiAgICAgICJ0aXRsZSIsCiAgICAgICJ0ciIsCiAgICAgICJ0cmFjayIsCiAgICAgICJ1bCIKICAgIF07CiAgICBodG1sUmF3TmFtZXMgPSBbInByZSIsICJzY3JpcHQiLCAic3R5bGUiLCAidGV4dGFyZWEiXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2h0bWwtZmxvdy5qcwpmdW5jdGlvbiByZXNvbHZlVG9IdG1sRmxvdyhldmVudHMpIHsKICBsZXQgaW5kZXgyID0gZXZlbnRzLmxlbmd0aDsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIiAmJiBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAiaHRtbEZsb3ciKSB7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICBpZiAoaW5kZXgyID4gMSAmJiBldmVudHNbaW5kZXgyIC0gMl1bMV0udHlwZSA9PT0gImxpbmVQcmVmaXgiKSB7CiAgICBldmVudHNbaW5kZXgyXVsxXS5zdGFydCA9IGV2ZW50c1tpbmRleDIgLSAyXVsxXS5zdGFydDsKICAgIGV2ZW50c1tpbmRleDIgKyAxXVsxXS5zdGFydCA9IGV2ZW50c1tpbmRleDIgLSAyXVsxXS5zdGFydDsKICAgIGV2ZW50cy5zcGxpY2UoaW5kZXgyIC0gMiwgMik7CiAgfQogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gdG9rZW5pemVIdG1sRmxvdyhlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBsZXQgbWFya2VyOwogIGxldCBjbG9zaW5nVGFnOwogIGxldCBidWZmZXIyOwogIGxldCBpbmRleDI7CiAgbGV0IG1hcmtlckI7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICByZXR1cm4gYmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlKGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJodG1sRmxvdyIpOwogICAgZWZmZWN0cy5lbnRlcigiaHRtbEZsb3dEYXRhIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIG9wZW47CiAgfQogIGZ1bmN0aW9uIG9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMzMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uT3BlbjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDcpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgY2xvc2luZ1RhZyA9IHRydWU7CiAgICAgIHJldHVybiB0YWdDbG9zZVN0YXJ0OwogICAgfQogICAgaWYgKGNvZGU0ID09PSA2MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBtYXJrZXIgPSAzOwogICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ID8gb2szIDogY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7CiAgICB9CiAgICBpZiAoYXNjaWlBbHBoYShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgYnVmZmVyMiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTQpOwogICAgICByZXR1cm4gdGFnTmFtZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBkZWNsYXJhdGlvbk9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDUpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgbWFya2VyID0gMjsKICAgICAgcmV0dXJuIGNvbW1lbnRPcGVuSW5zaWRlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBtYXJrZXIgPSA1OwogICAgICBpbmRleDIgPSAwOwogICAgICByZXR1cm4gY2RhdGFPcGVuSW5zaWRlOwogICAgfQogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIG1hcmtlciA9IDQ7CiAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMgOiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21tZW50T3Blbkluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ID8gb2szIDogY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY2RhdGFPcGVuSW5zaWRlKGNvZGU0KSB7CiAgICBjb25zdCB2YWx1ZTIgPSAiQ0RBVEFbIjsKICAgIGlmIChjb2RlNCA9PT0gdmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyKyspKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGlmIChpbmRleDIgPT09IHZhbHVlMi5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ID8gb2szIDogY29udGludWF0aW9uOwogICAgICB9CiAgICAgIHJldHVybiBjZGF0YU9wZW5JbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGFnQ2xvc2VTdGFydChjb2RlNCkgewogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGJ1ZmZlcjIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ05hbWU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGFnTmFtZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA0NyB8fCBjb2RlNCA9PT0gNjIgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgY29uc3Qgc2xhc2ggPSBjb2RlNCA9PT0gNDc7CiAgICAgIGNvbnN0IG5hbWUgPSBidWZmZXIyLnRvTG93ZXJDYXNlKCk7CiAgICAgIGlmICghc2xhc2ggJiYgIWNsb3NpbmdUYWcgJiYgaHRtbFJhd05hbWVzLmluY2x1ZGVzKG5hbWUpKSB7CiAgICAgICAgbWFya2VyID0gMTsKICAgICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ID8gb2szKGNvZGU0KSA6IGNvbnRpbnVhdGlvbihjb2RlNCk7CiAgICAgIH0KICAgICAgaWYgKGh0bWxCbG9ja05hbWVzLmluY2x1ZGVzKGJ1ZmZlcjIudG9Mb3dlckNhc2UoKSkpIHsKICAgICAgICBtYXJrZXIgPSA2OwogICAgICAgIGlmIChzbGFzaCkgewogICAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgICAgIHJldHVybiBiYXNpY1NlbGZDbG9zaW5nOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ID8gb2szKGNvZGU0KSA6IGNvbnRpbnVhdGlvbihjb2RlNCk7CiAgICAgIH0KICAgICAgbWFya2VyID0gNzsKICAgICAgcmV0dXJuIHNlbGYyLmludGVycnVwdCAmJiAhc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0gPyBub2soY29kZTQpIDogY2xvc2luZ1RhZyA/IGNvbXBsZXRlQ2xvc2luZ1RhZ0FmdGVyKGNvZGU0KSA6IGNvbXBsZXRlQXR0cmlidXRlTmFtZUJlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBidWZmZXIyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTQpOwogICAgICByZXR1cm4gdGFnTmFtZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBiYXNpY1NlbGZDbG9zaW5nKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMgOiBjb250aW51YXRpb247CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tcGxldGVDbG9zaW5nVGFnQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tcGxldGVDbG9zaW5nVGFnQWZ0ZXI7CiAgICB9CiAgICByZXR1cm4gY29tcGxldGVFbmQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVCZWZvcmUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDcpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlRW5kOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA1OCB8fCBjb2RlNCA9PT0gOTUgfHwgYXNjaWlBbHBoYShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lQmVmb3JlOwogICAgfQogICAgcmV0dXJuIGNvbXBsZXRlRW5kKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tcGxldGVBdHRyaWJ1dGVOYW1lKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1IHx8IGNvZGU0ID09PSA0NiB8fCBjb2RlNCA9PT0gNTggfHwgY29kZTQgPT09IDk1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lOwogICAgfQogICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUFmdGVyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tcGxldGVBdHRyaWJ1dGVOYW1lQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjEpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVCZWZvcmU7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUFmdGVyOwogICAgfQogICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUJlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVCZWZvcmUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gNjAgfHwgY29kZTQgPT09IDYxIHx8IGNvZGU0ID09PSA2MiB8fCBjb2RlNCA9PT0gOTYpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDM0IHx8IGNvZGU0ID09PSAzOSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBtYXJrZXJCID0gY29kZTQ7CiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlUXVvdGVkOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlQmVmb3JlOwogICAgfQogICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVVbnF1b3RlZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVRdW90ZWQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyQikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBtYXJrZXJCID0gbnVsbDsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVRdW90ZWRBZnRlcjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlUXVvdGVkOwogIH0KICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gMzQgfHwgY29kZTQgPT09IDM5IHx8IGNvZGU0ID09PSA0NyB8fCBjb2RlNCA9PT0gNjAgfHwgY29kZTQgPT09IDYxIHx8IGNvZGU0ID09PSA2MiB8fCBjb2RlNCA9PT0gOTYgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUFmdGVyKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZVVucXVvdGVkOwogIH0KICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlUXVvdGVkQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDcgfHwgY29kZTQgPT09IDYyIHx8IG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVCZWZvcmUoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlRW5kKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21wbGV0ZUFmdGVyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBjb250aW51YXRpb24oY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21wbGV0ZUFmdGVyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRpbnVhdGlvbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSAmJiBtYXJrZXIgPT09IDIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkNvbW1lbnRJbnNpZGU7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDYwICYmIG1hcmtlciA9PT0gMSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGludWF0aW9uUmF3VGFnT3BlbjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNjIgJiYgbWFya2VyID09PSA0KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb250aW51YXRpb25DbG9zZTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNjMgJiYgbWFya2VyID09PSAzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gOTMgJiYgbWFya2VyID09PSA1KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb250aW51YXRpb25DZGF0YUluc2lkZTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpICYmIChtYXJrZXIgPT09IDYgfHwgbWFya2VyID09PSA3KSkgewogICAgICBlZmZlY3RzLmV4aXQoImh0bWxGbG93RGF0YSIpOwogICAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhibGFua0xpbmVCZWZvcmUsIGNvbnRpbnVhdGlvbkFmdGVyLCBjb250aW51YXRpb25TdGFydCkoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJodG1sRmxvd0RhdGEiKTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvblN0YXJ0KGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gY29udGludWF0aW9uOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25TdGFydChjb2RlNCkgewogICAgcmV0dXJuIGVmZmVjdHMuY2hlY2sobm9uTGF6eUNvbnRpbnVhdGlvblN0YXJ0LCBjb250aW51YXRpb25TdGFydE5vbkxhenksIGNvbnRpbnVhdGlvbkFmdGVyKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRpbnVhdGlvblN0YXJ0Tm9uTGF6eShjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgcmV0dXJuIGNvbnRpbnVhdGlvbkJlZm9yZTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uQmVmb3JlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm4gY29udGludWF0aW9uU3RhcnQoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiaHRtbEZsb3dEYXRhIik7CiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uQ29tbWVudEluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7CiAgICB9CiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uUmF3VGFnT3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBidWZmZXIyID0gIiI7CiAgICAgIHJldHVybiBjb250aW51YXRpb25SYXdFbmRUYWc7CiAgICB9CiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uUmF3RW5kVGFnKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGNvbnN0IG5hbWUgPSBidWZmZXIyLnRvTG93ZXJDYXNlKCk7CiAgICAgIGlmIChodG1sUmF3TmFtZXMuaW5jbHVkZXMobmFtZSkpIHsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHJldHVybiBjb250aW51YXRpb25DbG9zZTsKICAgICAgfQogICAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGU0KTsKICAgIH0KICAgIGlmIChhc2NpaUFscGhhKGNvZGU0KSAmJiBidWZmZXIyLmxlbmd0aCA8IDgpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgYnVmZmVyMiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvblJhd0VuZFRhZzsKICAgIH0KICAgIHJldHVybiBjb250aW51YXRpb24oY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25DZGF0YUluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7CiAgICB9CiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkNsb3NlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NSAmJiBtYXJrZXIgPT09IDIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkRlY2xhcmF0aW9uSW5zaWRlOwogICAgfQogICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRpbnVhdGlvbkNsb3NlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImh0bWxGbG93RGF0YSIpOwogICAgICByZXR1cm4gY29udGludWF0aW9uQWZ0ZXIoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb250aW51YXRpb25DbG9zZTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uQWZ0ZXIoY29kZTQpIHsKICAgIGVmZmVjdHMuZXhpdCgiaHRtbEZsb3ciKTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZU5vbkxhenlDb250aW51YXRpb25TdGFydChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgIHJldHVybiBhZnRlcjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgcmV0dXJuIHNlbGYyLnBhcnNlci5sYXp5W3NlbGYyLm5vdygpLmxpbmVdID8gbm9rKGNvZGU0KSA6IG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplQmxhbmtMaW5lQmVmb3JlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGJsYW5rTGluZSwgb2szLCBub2spOwogIH0KfQp2YXIgaHRtbEZsb3csIGJsYW5rTGluZUJlZm9yZSwgbm9uTGF6eUNvbnRpbnVhdGlvblN0YXJ0Owp2YXIgaW5pdF9odG1sX2Zsb3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9odG1sLWZsb3cuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfaHRtbF90YWdfbmFtZSgpOwogICAgaW5pdF9ibGFua19saW5lKCk7CiAgICBodG1sRmxvdyA9IHsKICAgICAgY29uY3JldGU6IHRydWUsCiAgICAgIG5hbWU6ICJodG1sRmxvdyIsCiAgICAgIHJlc29sdmVUbzogcmVzb2x2ZVRvSHRtbEZsb3csCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUh0bWxGbG93CiAgICB9OwogICAgYmxhbmtMaW5lQmVmb3JlID0gewogICAgICBwYXJ0aWFsOiB0cnVlLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVCbGFua0xpbmVCZWZvcmUKICAgIH07CiAgICBub25MYXp5Q29udGludWF0aW9uU3RhcnQgPSB7CiAgICAgIHBhcnRpYWw6IHRydWUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZU5vbkxhenlDb250aW51YXRpb25TdGFydAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2h0bWwtdGV4dC5qcwpmdW5jdGlvbiB0b2tlbml6ZUh0bWxUZXh0KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBtYXJrZXI7CiAgbGV0IGluZGV4MjsKICBsZXQgcmV0dXJuU3RhdGU7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJodG1sVGV4dCIpOwogICAgZWZmZWN0cy5lbnRlcigiaHRtbFRleHREYXRhIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIG9wZW47CiAgfQogIGZ1bmN0aW9uIG9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMzMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uT3BlbjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDcpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ0Nsb3NlU3RhcnQ7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDYzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBpbnN0cnVjdGlvbjsKICAgIH0KICAgIGlmIChhc2NpaUFscGhhKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBkZWNsYXJhdGlvbk9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDUpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbW1lbnRPcGVuSW5zaWRlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBpbmRleDIgPSAwOwogICAgICByZXR1cm4gY2RhdGFPcGVuSW5zaWRlOwogICAgfQogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21tZW50T3Blbkluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tbWVudEVuZDsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21tZW50Myhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tbWVudENsb3NlOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuU3RhdGUgPSBjb21tZW50MzsKICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb21tZW50MzsKICB9CiAgZnVuY3Rpb24gY29tbWVudENsb3NlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21tZW50RW5kOwogICAgfQogICAgcmV0dXJuIGNvbW1lbnQzKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tbWVudEVuZChjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSA2MiA/IGVuZDMoY29kZTQpIDogY29kZTQgPT09IDQ1ID8gY29tbWVudENsb3NlKGNvZGU0KSA6IGNvbW1lbnQzKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY2RhdGFPcGVuSW5zaWRlKGNvZGU0KSB7CiAgICBjb25zdCB2YWx1ZTIgPSAiQ0RBVEFbIjsKICAgIGlmIChjb2RlNCA9PT0gdmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyKyspKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBpbmRleDIgPT09IHZhbHVlMi5sZW5ndGggPyBjZGF0YSA6IGNkYXRhT3Blbkluc2lkZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjZGF0YShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY2RhdGFDbG9zZTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVyblN0YXRlID0gY2RhdGE7CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gY2RhdGE7CiAgfQogIGZ1bmN0aW9uIGNkYXRhQ2xvc2UoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNkYXRhRW5kOwogICAgfQogICAgcmV0dXJuIGNkYXRhKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY2RhdGFFbmQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgcmV0dXJuIGVuZDMoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY2RhdGFFbmQ7CiAgICB9CiAgICByZXR1cm4gY2RhdGEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkZWNsYXJhdGlvbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA2MikgewogICAgICByZXR1cm4gZW5kMyhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm5TdGF0ZSA9IGRlY2xhcmF0aW9uOwogICAgICByZXR1cm4gbGluZUVuZGluZ0JlZm9yZShjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogIH0KICBmdW5jdGlvbiBpbnN0cnVjdGlvbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA2MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25DbG9zZTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVyblN0YXRlID0gaW5zdHJ1Y3Rpb247CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gaW5zdHJ1Y3Rpb247CiAgfQogIGZ1bmN0aW9uIGluc3RydWN0aW9uQ2xvc2UoY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCA9PT0gNjIgPyBlbmQzKGNvZGU0KSA6IGluc3RydWN0aW9uKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGFnQ2xvc2VTdGFydChjb2RlNCkgewogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdDbG9zZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdDbG9zZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ0Nsb3NlOwogICAgfQogICAgcmV0dXJuIHRhZ0Nsb3NlQmV0d2Vlbihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRhZ0Nsb3NlQmV0d2Vlbihjb2RlNCkgewogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuU3RhdGUgPSB0YWdDbG9zZUJldHdlZW47CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnQ2xvc2VCZXR3ZWVuOwogICAgfQogICAgcmV0dXJuIGVuZDMoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdPcGVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDcgfHwgY29kZTQgPT09IDYyIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiB0YWdPcGVuQmV0d2Vlbihjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGFnT3BlbkJldHdlZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDcpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGVuZDM7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDU4IHx8IGNvZGU0ID09PSA5NSB8fCBhc2NpaUFscGhhKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZU5hbWU7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm5TdGF0ZSA9IHRhZ09wZW5CZXR3ZWVuOwogICAgICByZXR1cm4gbGluZUVuZGluZ0JlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ09wZW5CZXR3ZWVuOwogICAgfQogICAgcmV0dXJuIGVuZDMoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdPcGVuQXR0cmlidXRlTmFtZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSB8fCBjb2RlNCA9PT0gNDYgfHwgY29kZTQgPT09IDU4IHx8IGNvZGU0ID09PSA5NSB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVOYW1lOwogICAgfQogICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVOYW1lQWZ0ZXIoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdPcGVuQXR0cmlidXRlTmFtZUFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYxKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVCZWZvcmU7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm5TdGF0ZSA9IHRhZ09wZW5BdHRyaWJ1dGVOYW1lQWZ0ZXI7CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZU5hbWVBZnRlcjsKICAgIH0KICAgIHJldHVybiB0YWdPcGVuQmV0d2Vlbihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZUJlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA2MCB8fCBjb2RlNCA9PT0gNjEgfHwgY29kZTQgPT09IDYyIHx8IGNvZGU0ID09PSA5NikgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gMzQgfHwgY29kZTQgPT09IDM5KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIG1hcmtlciA9IGNvZGU0OwogICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuU3RhdGUgPSB0YWdPcGVuQXR0cmlidXRlVmFsdWVCZWZvcmU7CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlQmVmb3JlOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVVbnF1b3RlZDsKICB9CiAgZnVuY3Rpb24gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBtYXJrZXIgPSB2b2lkIDA7CiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVRdW90ZWRBZnRlcjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVyblN0YXRlID0gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkOwogICAgICByZXR1cm4gbGluZUVuZGluZ0JlZm9yZShjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVF1b3RlZDsKICB9CiAgZnVuY3Rpb24gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gMzQgfHwgY29kZTQgPT09IDM5IHx8IGNvZGU0ID09PSA2MCB8fCBjb2RlNCA9PT0gNjEgfHwgY29kZTQgPT09IDk2KSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NyB8fCBjb2RlNCA9PT0gNjIgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIHRhZ09wZW5CZXR3ZWVuKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQ7CiAgfQogIGZ1bmN0aW9uIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVF1b3RlZEFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ3IHx8IGNvZGU0ID09PSA2MiB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gdGFnT3BlbkJldHdlZW4oY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGVuZDMoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJodG1sVGV4dERhdGEiKTsKICAgICAgZWZmZWN0cy5leGl0KCJodG1sVGV4dCIpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGxpbmVFbmRpbmdCZWZvcmUoY29kZTQpIHsKICAgIGVmZmVjdHMuZXhpdCgiaHRtbFRleHREYXRhIik7CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICByZXR1cm4gbGluZUVuZGluZ0FmdGVyOwogIH0KICBmdW5jdGlvbiBsaW5lRW5kaW5nQWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBsaW5lRW5kaW5nQWZ0ZXJQcmVmaXgsICJsaW5lUHJlZml4Iiwgc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSA/IHZvaWQgMCA6IDQpKGNvZGU0KSA6IGxpbmVFbmRpbmdBZnRlclByZWZpeChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGxpbmVFbmRpbmdBZnRlclByZWZpeChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiaHRtbFRleHREYXRhIik7CiAgICByZXR1cm4gcmV0dXJuU3RhdGUoY29kZTQpOwogIH0KfQp2YXIgaHRtbFRleHQ7CnZhciBpbml0X2h0bWxfdGV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2h0bWwtdGV4dC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaHRtbFRleHQgPSB7CiAgICAgIG5hbWU6ICJodG1sVGV4dCIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUh0bWxUZXh0CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGFiZWwtZW5kLmpzCmZ1bmN0aW9uIHJlc29sdmVBbGxMYWJlbEVuZChldmVudHMpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgY29uc3QgbmV3RXZlbnRzID0gW107CiAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgY29uc3QgdG9rZW4gPSBldmVudHNbaW5kZXgyXVsxXTsKICAgIG5ld0V2ZW50cy5wdXNoKGV2ZW50c1tpbmRleDJdKTsKICAgIGlmICh0b2tlbi50eXBlID09PSAibGFiZWxJbWFnZSIgfHwgdG9rZW4udHlwZSA9PT0gImxhYmVsTGluayIgfHwgdG9rZW4udHlwZSA9PT0gImxhYmVsRW5kIikgewogICAgICBjb25zdCBvZmZzZXQgPSB0b2tlbi50eXBlID09PSAibGFiZWxJbWFnZSIgPyA0IDogMjsKICAgICAgdG9rZW4udHlwZSA9ICJkYXRhIjsKICAgICAgaW5kZXgyICs9IG9mZnNldDsKICAgIH0KICB9CiAgaWYgKGV2ZW50cy5sZW5ndGggIT09IG5ld0V2ZW50cy5sZW5ndGgpIHsKICAgIHNwbGljZShldmVudHMsIDAsIGV2ZW50cy5sZW5ndGgsIG5ld0V2ZW50cyk7CiAgfQogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gcmVzb2x2ZVRvTGFiZWxFbmQoZXZlbnRzLCBjb250ZXh0MikgewogIGxldCBpbmRleDIgPSBldmVudHMubGVuZ3RoOwogIGxldCBvZmZzZXQgPSAwOwogIGxldCB0b2tlbjsKICBsZXQgb3BlbjsKICBsZXQgY2xvc2U3OwogIGxldCBtZWRpYTsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIHRva2VuID0gZXZlbnRzW2luZGV4Ml1bMV07CiAgICBpZiAob3BlbikgewogICAgICBpZiAodG9rZW4udHlwZSA9PT0gImxpbmsiIHx8IHRva2VuLnR5cGUgPT09ICJsYWJlbExpbmsiICYmIHRva2VuLl9pbmFjdGl2ZSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIiAmJiB0b2tlbi50eXBlID09PSAibGFiZWxMaW5rIikgewogICAgICAgIHRva2VuLl9pbmFjdGl2ZSA9IHRydWU7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY2xvc2U3KSB7CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIiAmJiAodG9rZW4udHlwZSA9PT0gImxhYmVsSW1hZ2UiIHx8IHRva2VuLnR5cGUgPT09ICJsYWJlbExpbmsiKSAmJiAhdG9rZW4uX2JhbGFuY2VkKSB7CiAgICAgICAgb3BlbiA9IGluZGV4MjsKICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gImxhYmVsTGluayIpIHsKICAgICAgICAgIG9mZnNldCA9IDI7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gImxhYmVsRW5kIikgewogICAgICBjbG9zZTcgPSBpbmRleDI7CiAgICB9CiAgfQogIGNvbnN0IGdyb3VwID0gewogICAgdHlwZTogZXZlbnRzW29wZW5dWzFdLnR5cGUgPT09ICJsYWJlbExpbmsiID8gImxpbmsiIDogImltYWdlIiwKICAgIHN0YXJ0OiB7CiAgICAgIC4uLmV2ZW50c1tvcGVuXVsxXS5zdGFydAogICAgfSwKICAgIGVuZDogewogICAgICAuLi5ldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLmVuZAogICAgfQogIH07CiAgY29uc3QgbGFiZWwgPSB7CiAgICB0eXBlOiAibGFiZWwiLAogICAgc3RhcnQ6IHsKICAgICAgLi4uZXZlbnRzW29wZW5dWzFdLnN0YXJ0CiAgICB9LAogICAgZW5kOiB7CiAgICAgIC4uLmV2ZW50c1tjbG9zZTddWzFdLmVuZAogICAgfQogIH07CiAgY29uc3QgdGV4dDkgPSB7CiAgICB0eXBlOiAibGFiZWxUZXh0IiwKICAgIHN0YXJ0OiB7CiAgICAgIC4uLmV2ZW50c1tvcGVuICsgb2Zmc2V0ICsgMl1bMV0uZW5kCiAgICB9LAogICAgZW5kOiB7CiAgICAgIC4uLmV2ZW50c1tjbG9zZTcgLSAyXVsxXS5zdGFydAogICAgfQogIH07CiAgbWVkaWEgPSBbWyJlbnRlciIsIGdyb3VwLCBjb250ZXh0Ml0sIFsiZW50ZXIiLCBsYWJlbCwgY29udGV4dDJdXTsKICBtZWRpYSA9IHB1c2gobWVkaWEsIGV2ZW50cy5zbGljZShvcGVuICsgMSwgb3BlbiArIG9mZnNldCArIDMpKTsKICBtZWRpYSA9IHB1c2gobWVkaWEsIFtbImVudGVyIiwgdGV4dDksIGNvbnRleHQyXV0pOwogIG1lZGlhID0gcHVzaChtZWRpYSwgcmVzb2x2ZUFsbChjb250ZXh0Mi5wYXJzZXIuY29uc3RydWN0cy5pbnNpZGVTcGFuLm51bGwsIGV2ZW50cy5zbGljZShvcGVuICsgb2Zmc2V0ICsgNCwgY2xvc2U3IC0gMyksIGNvbnRleHQyKSk7CiAgbWVkaWEgPSBwdXNoKG1lZGlhLCBbWyJleGl0IiwgdGV4dDksIGNvbnRleHQyXSwgZXZlbnRzW2Nsb3NlNyAtIDJdLCBldmVudHNbY2xvc2U3IC0gMV0sIFsiZXhpdCIsIGxhYmVsLCBjb250ZXh0Ml1dKTsKICBtZWRpYSA9IHB1c2gobWVkaWEsIGV2ZW50cy5zbGljZShjbG9zZTcgKyAxKSk7CiAgbWVkaWEgPSBwdXNoKG1lZGlhLCBbWyJleGl0IiwgZ3JvdXAsIGNvbnRleHQyXV0pOwogIHNwbGljZShldmVudHMsIG9wZW4sIGV2ZW50cy5sZW5ndGgsIG1lZGlhKTsKICByZXR1cm4gZXZlbnRzOwp9CmZ1bmN0aW9uIHRva2VuaXplTGFiZWxFbmQoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IGluZGV4MiA9IHNlbGYyLmV2ZW50cy5sZW5ndGg7CiAgbGV0IGxhYmVsU3RhcnQ7CiAgbGV0IGRlZmluZWQ7CiAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICBpZiAoKHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJsYWJlbEltYWdlIiB8fCBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGFiZWxMaW5rIikgJiYgIXNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLl9iYWxhbmNlZCkgewogICAgICBsYWJlbFN0YXJ0ID0gc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV07CiAgICAgIGJyZWFrOwogICAgfQogIH0KICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmICghbGFiZWxTdGFydCkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChsYWJlbFN0YXJ0Ll9pbmFjdGl2ZSkgewogICAgICByZXR1cm4gbGFiZWxFbmROb2soY29kZTQpOwogICAgfQogICAgZGVmaW5lZCA9IHNlbGYyLnBhcnNlci5kZWZpbmVkLmluY2x1ZGVzKG5vcm1hbGl6ZUlkZW50aWZpZXIoc2VsZjIuc2xpY2VTZXJpYWxpemUoewogICAgICBzdGFydDogbGFiZWxTdGFydC5lbmQsCiAgICAgIGVuZDogc2VsZjIubm93KCkKICAgIH0pKSk7CiAgICBlZmZlY3RzLmVudGVyKCJsYWJlbEVuZCIpOwogICAgZWZmZWN0cy5lbnRlcigibGFiZWxNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxhYmVsTWFya2VyIik7CiAgICBlZmZlY3RzLmV4aXQoImxhYmVsRW5kIik7CiAgICByZXR1cm4gYWZ0ZXI7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQwKSB7CiAgICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQocmVzb3VyY2VDb25zdHJ1Y3QsIGxhYmVsRW5kT2ssIGRlZmluZWQgPyBsYWJlbEVuZE9rIDogbGFiZWxFbmROb2spKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gOTEpIHsKICAgICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChyZWZlcmVuY2VGdWxsQ29uc3RydWN0LCBsYWJlbEVuZE9rLCBkZWZpbmVkID8gcmVmZXJlbmNlTm90RnVsbCA6IGxhYmVsRW5kTm9rKShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gZGVmaW5lZCA/IGxhYmVsRW5kT2soY29kZTQpIDogbGFiZWxFbmROb2soY29kZTQpOwogIH0KICBmdW5jdGlvbiByZWZlcmVuY2VOb3RGdWxsKGNvZGU0KSB7CiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KHJlZmVyZW5jZUNvbGxhcHNlZENvbnN0cnVjdCwgbGFiZWxFbmRPaywgbGFiZWxFbmROb2spKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbGFiZWxFbmRPayhjb2RlNCkgewogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGxhYmVsRW5kTm9rKGNvZGU0KSB7CiAgICBsYWJlbFN0YXJ0Ll9iYWxhbmNlZCA9IHRydWU7CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVSZXNvdXJjZShlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiByZXNvdXJjZVN0YXJ0OwogIGZ1bmN0aW9uIHJlc291cmNlU3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoInJlc291cmNlIik7CiAgICBlZmZlY3RzLmVudGVyKCJyZXNvdXJjZU1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgicmVzb3VyY2VNYXJrZXIiKTsKICAgIHJldHVybiByZXNvdXJjZUJlZm9yZTsKICB9CiAgZnVuY3Rpb24gcmVzb3VyY2VCZWZvcmUoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSA/IGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIHJlc291cmNlT3BlbikoY29kZTQpIDogcmVzb3VyY2VPcGVuKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVzb3VyY2VPcGVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQxKSB7CiAgICAgIHJldHVybiByZXNvdXJjZUVuZChjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gZmFjdG9yeURlc3RpbmF0aW9uKGVmZmVjdHMsIHJlc291cmNlRGVzdGluYXRpb25BZnRlciwgcmVzb3VyY2VEZXN0aW5hdGlvbk1pc3NpbmcsICJyZXNvdXJjZURlc3RpbmF0aW9uIiwgInJlc291cmNlRGVzdGluYXRpb25MaXRlcmFsIiwgInJlc291cmNlRGVzdGluYXRpb25MaXRlcmFsTWFya2VyIiwgInJlc291cmNlRGVzdGluYXRpb25SYXciLCAicmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZyIsIDMyKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHJlc291cmNlRGVzdGluYXRpb25BZnRlcihjb2RlNCkgewogICAgcmV0dXJuIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpID8gZmFjdG9yeVdoaXRlc3BhY2UoZWZmZWN0cywgcmVzb3VyY2VCZXR3ZWVuKShjb2RlNCkgOiByZXNvdXJjZUVuZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHJlc291cmNlRGVzdGluYXRpb25NaXNzaW5nKGNvZGU0KSB7CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVzb3VyY2VCZXR3ZWVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDM0IHx8IGNvZGU0ID09PSAzOSB8fCBjb2RlNCA9PT0gNDApIHsKICAgICAgcmV0dXJuIGZhY3RvcnlUaXRsZShlZmZlY3RzLCByZXNvdXJjZVRpdGxlQWZ0ZXIsIG5vaywgInJlc291cmNlVGl0bGUiLCAicmVzb3VyY2VUaXRsZU1hcmtlciIsICJyZXNvdXJjZVRpdGxlU3RyaW5nIikoY29kZTQpOwogICAgfQogICAgcmV0dXJuIHJlc291cmNlRW5kKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVzb3VyY2VUaXRsZUFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgPyBmYWN0b3J5V2hpdGVzcGFjZShlZmZlY3RzLCByZXNvdXJjZUVuZCkoY29kZTQpIDogcmVzb3VyY2VFbmQoY29kZTQpOwogIH0KICBmdW5jdGlvbiByZXNvdXJjZUVuZChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0MSkgewogICAgICBlZmZlY3RzLmVudGVyKCJyZXNvdXJjZU1hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInJlc291cmNlTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZXhpdCgicmVzb3VyY2UiKTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVJlZmVyZW5jZUZ1bGwoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHJlZmVyZW5jZUZ1bGw7CiAgZnVuY3Rpb24gcmVmZXJlbmNlRnVsbChjb2RlNCkgewogICAgcmV0dXJuIGZhY3RvcnlMYWJlbC5jYWxsKHNlbGYyLCBlZmZlY3RzLCByZWZlcmVuY2VGdWxsQWZ0ZXIsIHJlZmVyZW5jZUZ1bGxNaXNzaW5nLCAicmVmZXJlbmNlIiwgInJlZmVyZW5jZU1hcmtlciIsICJyZWZlcmVuY2VTdHJpbmciKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHJlZmVyZW5jZUZ1bGxBZnRlcihjb2RlNCkgewogICAgcmV0dXJuIHNlbGYyLnBhcnNlci5kZWZpbmVkLmluY2x1ZGVzKG5vcm1hbGl6ZUlkZW50aWZpZXIoc2VsZjIuc2xpY2VTZXJpYWxpemUoc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXVsxXSkuc2xpY2UoMSwgLTEpKSkgPyBvazMoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVmZXJlbmNlRnVsbE1pc3NpbmcoY29kZTQpIHsKICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVJlZmVyZW5jZUNvbGxhcHNlZChlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiByZWZlcmVuY2VDb2xsYXBzZWRTdGFydDsKICBmdW5jdGlvbiByZWZlcmVuY2VDb2xsYXBzZWRTdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigicmVmZXJlbmNlIik7CiAgICBlZmZlY3RzLmVudGVyKCJyZWZlcmVuY2VNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoInJlZmVyZW5jZU1hcmtlciIpOwogICAgcmV0dXJuIHJlZmVyZW5jZUNvbGxhcHNlZE9wZW47CiAgfQogIGZ1bmN0aW9uIHJlZmVyZW5jZUNvbGxhcHNlZE9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5lbnRlcigicmVmZXJlbmNlTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgicmVmZXJlbmNlTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZXhpdCgicmVmZXJlbmNlIik7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGxhYmVsRW5kLCByZXNvdXJjZUNvbnN0cnVjdCwgcmVmZXJlbmNlRnVsbENvbnN0cnVjdCwgcmVmZXJlbmNlQ29sbGFwc2VkQ29uc3RydWN0Owp2YXIgaW5pdF9sYWJlbF9lbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9sYWJlbC1lbmQuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9kZXN0aW5hdGlvbigpOwogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9sYWJlbCgpOwogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV90aXRsZSgpOwogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV93aGl0ZXNwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaHVua2VkKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX25vcm1hbGl6ZV9pZGVudGlmaWVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Jlc29sdmVfYWxsKCk7CiAgICBsYWJlbEVuZCA9IHsKICAgICAgbmFtZTogImxhYmVsRW5kIiwKICAgICAgcmVzb2x2ZUFsbDogcmVzb2x2ZUFsbExhYmVsRW5kLAogICAgICByZXNvbHZlVG86IHJlc29sdmVUb0xhYmVsRW5kLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVMYWJlbEVuZAogICAgfTsKICAgIHJlc291cmNlQ29uc3RydWN0ID0gewogICAgICB0b2tlbml6ZTogdG9rZW5pemVSZXNvdXJjZQogICAgfTsKICAgIHJlZmVyZW5jZUZ1bGxDb25zdHJ1Y3QgPSB7CiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVJlZmVyZW5jZUZ1bGwKICAgIH07CiAgICByZWZlcmVuY2VDb2xsYXBzZWRDb25zdHJ1Y3QgPSB7CiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVJlZmVyZW5jZUNvbGxhcHNlZAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xhYmVsLXN0YXJ0LWltYWdlLmpzCmZ1bmN0aW9uIHRva2VuaXplTGFiZWxTdGFydEltYWdlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigibGFiZWxJbWFnZSIpOwogICAgZWZmZWN0cy5lbnRlcigibGFiZWxJbWFnZU1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGFiZWxJbWFnZU1hcmtlciIpOwogICAgcmV0dXJuIG9wZW47CiAgfQogIGZ1bmN0aW9uIG9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTEpIHsKICAgICAgZWZmZWN0cy5lbnRlcigibGFiZWxNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJsYWJlbE1hcmtlciIpOwogICAgICBlZmZlY3RzLmV4aXQoImxhYmVsSW1hZ2UiKTsKICAgICAgcmV0dXJuIGFmdGVyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gY29kZTQgPT09IDk0ICYmICJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0IiBpbiBzZWxmMi5wYXJzZXIuY29uc3RydWN0cyA/IG5vayhjb2RlNCkgOiBvazMoY29kZTQpOwogIH0KfQp2YXIgbGFiZWxTdGFydEltYWdlOwp2YXIgaW5pdF9sYWJlbF9zdGFydF9pbWFnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xhYmVsLXN0YXJ0LWltYWdlLmpzIigpIHsKICAgIGluaXRfbGFiZWxfZW5kKCk7CiAgICBsYWJlbFN0YXJ0SW1hZ2UgPSB7CiAgICAgIG5hbWU6ICJsYWJlbFN0YXJ0SW1hZ2UiLAogICAgICByZXNvbHZlQWxsOiBsYWJlbEVuZC5yZXNvbHZlQWxsLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVMYWJlbFN0YXJ0SW1hZ2UKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9sYWJlbC1zdGFydC1saW5rLmpzCmZ1bmN0aW9uIHRva2VuaXplTGFiZWxTdGFydExpbmsoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJsYWJlbExpbmsiKTsKICAgIGVmZmVjdHMuZW50ZXIoImxhYmVsTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsYWJlbE1hcmtlciIpOwogICAgZWZmZWN0cy5leGl0KCJsYWJlbExpbmsiKTsKICAgIHJldHVybiBhZnRlcjsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCA9PT0gOTQgJiYgIl9oaWRkZW5Gb290bm90ZVN1cHBvcnQiIGluIHNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzID8gbm9rKGNvZGU0KSA6IG9rMyhjb2RlNCk7CiAgfQp9CnZhciBsYWJlbFN0YXJ0TGluazsKdmFyIGluaXRfbGFiZWxfc3RhcnRfbGluayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xhYmVsLXN0YXJ0LWxpbmsuanMiKCkgewogICAgaW5pdF9sYWJlbF9lbmQoKTsKICAgIGxhYmVsU3RhcnRMaW5rID0gewogICAgICBuYW1lOiAibGFiZWxTdGFydExpbmsiLAogICAgICByZXNvbHZlQWxsOiBsYWJlbEVuZC5yZXNvbHZlQWxsLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVMYWJlbFN0YXJ0TGluawogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xpbmUtZW5kaW5nLmpzCmZ1bmN0aW9uIHRva2VuaXplTGluZUVuZGluZyhlZmZlY3RzLCBvazMpIHsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgb2szLCAibGluZVByZWZpeCIpOwogIH0KfQp2YXIgbGluZUVuZGluZzsKdmFyIGluaXRfbGluZV9lbmRpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9saW5lLWVuZGluZy5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgbGluZUVuZGluZyA9IHsKICAgICAgbmFtZTogImxpbmVFbmRpbmciLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVMaW5lRW5kaW5nCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvdGhlbWF0aWMtYnJlYWsuanMKZnVuY3Rpb24gdG9rZW5pemVUaGVtYXRpY0JyZWFrKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgbGV0IHNpemUgPSAwOwogIGxldCBtYXJrZXI7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJ0aGVtYXRpY0JyZWFrIik7CiAgICByZXR1cm4gYmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlKGNvZGU0KSB7CiAgICBtYXJrZXIgPSBjb2RlNDsKICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYXRCcmVhayhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBtYXJrZXIpIHsKICAgICAgZWZmZWN0cy5lbnRlcigidGhlbWF0aWNCcmVha1NlcXVlbmNlIik7CiAgICAgIHJldHVybiBzZXF1ZW5jZShjb2RlNCk7CiAgICB9CiAgICBpZiAoc2l6ZSA+PSAzICYmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSkgewogICAgICBlZmZlY3RzLmV4aXQoInRoZW1hdGljQnJlYWsiKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gc2VxdWVuY2UoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHNpemUrKzsKICAgICAgcmV0dXJuIHNlcXVlbmNlOwogICAgfQogICAgZWZmZWN0cy5leGl0KCJ0aGVtYXRpY0JyZWFrU2VxdWVuY2UiKTsKICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhdEJyZWFrLCAid2hpdGVzcGFjZSIpKGNvZGU0KSA6IGF0QnJlYWsoY29kZTQpOwogIH0KfQp2YXIgdGhlbWF0aWNCcmVhazI7CnZhciBpbml0X3RoZW1hdGljX2JyZWFrMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL3RoZW1hdGljLWJyZWFrLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICB0aGVtYXRpY0JyZWFrMiA9IHsKICAgICAgbmFtZTogInRoZW1hdGljQnJlYWsiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVUaGVtYXRpY0JyZWFrCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGlzdC5qcwpmdW5jdGlvbiB0b2tlbml6ZUxpc3RTdGFydChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICBsZXQgaW5pdGlhbFNpemUgPSB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gImxpbmVQcmVmaXgiID8gdGFpbFsyXS5zbGljZVNlcmlhbGl6ZSh0YWlsWzFdLCB0cnVlKS5sZW5ndGggOiAwOwogIGxldCBzaXplID0gMDsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGNvbnN0IGtpbmQgPSBzZWxmMi5jb250YWluZXJTdGF0ZS50eXBlIHx8IChjb2RlNCA9PT0gNDIgfHwgY29kZTQgPT09IDQzIHx8IGNvZGU0ID09PSA0NSA/ICJsaXN0VW5vcmRlcmVkIiA6ICJsaXN0T3JkZXJlZCIpOwogICAgaWYgKGtpbmQgPT09ICJsaXN0VW5vcmRlcmVkIiA/ICFzZWxmMi5jb250YWluZXJTdGF0ZS5tYXJrZXIgfHwgY29kZTQgPT09IHNlbGYyLmNvbnRhaW5lclN0YXRlLm1hcmtlciA6IGFzY2lpRGlnaXQoY29kZTQpKSB7CiAgICAgIGlmICghc2VsZjIuY29udGFpbmVyU3RhdGUudHlwZSkgewogICAgICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLnR5cGUgPSBraW5kOwogICAgICAgIGVmZmVjdHMuZW50ZXIoa2luZCwgewogICAgICAgICAgX2NvbnRhaW5lcjogdHJ1ZQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChraW5kID09PSAibGlzdFVub3JkZXJlZCIpIHsKICAgICAgICBlZmZlY3RzLmVudGVyKCJsaXN0SXRlbVByZWZpeCIpOwogICAgICAgIHJldHVybiBjb2RlNCA9PT0gNDIgfHwgY29kZTQgPT09IDQ1ID8gZWZmZWN0cy5jaGVjayh0aGVtYXRpY0JyZWFrMiwgbm9rLCBhdE1hcmtlcikoY29kZTQpIDogYXRNYXJrZXIoY29kZTQpOwogICAgICB9CiAgICAgIGlmICghc2VsZjIuaW50ZXJydXB0IHx8IGNvZGU0ID09PSA0OSkgewogICAgICAgIGVmZmVjdHMuZW50ZXIoImxpc3RJdGVtUHJlZml4Iik7CiAgICAgICAgZWZmZWN0cy5lbnRlcigibGlzdEl0ZW1WYWx1ZSIpOwogICAgICAgIHJldHVybiBpbnNpZGUoY29kZTQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoYXNjaWlEaWdpdChjb2RlNCkgJiYgKytzaXplIDwgMTApIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGluc2lkZTsKICAgIH0KICAgIGlmICgoIXNlbGYyLmludGVycnVwdCB8fCBzaXplIDwgMikgJiYgKHNlbGYyLmNvbnRhaW5lclN0YXRlLm1hcmtlciA/IGNvZGU0ID09PSBzZWxmMi5jb250YWluZXJTdGF0ZS5tYXJrZXIgOiBjb2RlNCA9PT0gNDEgfHwgY29kZTQgPT09IDQ2KSkgewogICAgICBlZmZlY3RzLmV4aXQoImxpc3RJdGVtVmFsdWUiKTsKICAgICAgcmV0dXJuIGF0TWFya2VyKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBhdE1hcmtlcihjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigibGlzdEl0ZW1NYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpc3RJdGVtTWFya2VyIik7CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5tYXJrZXIgPSBzZWxmMi5jb250YWluZXJTdGF0ZS5tYXJrZXIgfHwgY29kZTQ7CiAgICByZXR1cm4gZWZmZWN0cy5jaGVjaygKICAgICAgYmxhbmtMaW5lLAogICAgICAvLyBDYW7igJl0IGJlIGVtcHR5IHdoZW4gaW50ZXJydXB0aW5nLgogICAgICBzZWxmMi5pbnRlcnJ1cHQgPyBub2sgOiBvbkJsYW5rLAogICAgICBlZmZlY3RzLmF0dGVtcHQobGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlQ29uc3RydWN0LCBlbmRPZlByZWZpeCwgb3RoZXJQcmVmaXgpCiAgICApOwogIH0KICBmdW5jdGlvbiBvbkJsYW5rKGNvZGU0KSB7CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lID0gdHJ1ZTsKICAgIGluaXRpYWxTaXplKys7CiAgICByZXR1cm4gZW5kT2ZQcmVmaXgoY29kZTQpOwogIH0KICBmdW5jdGlvbiBvdGhlclByZWZpeChjb2RlNCkgewogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpOwogICAgICByZXR1cm4gZW5kT2ZQcmVmaXg7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZW5kT2ZQcmVmaXgoY29kZTQpIHsKICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLnNpemUgPSBpbml0aWFsU2l6ZSArIHNlbGYyLnNsaWNlU2VyaWFsaXplKGVmZmVjdHMuZXhpdCgibGlzdEl0ZW1QcmVmaXgiKSwgdHJ1ZSkubGVuZ3RoOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplTGlzdENvbnRpbnVhdGlvbihlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBzZWxmMi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93ID0gdm9pZCAwOwogIHJldHVybiBlZmZlY3RzLmNoZWNrKGJsYW5rTGluZSwgb25CbGFuaywgbm90QmxhbmspOwogIGZ1bmN0aW9uIG9uQmxhbmsoY29kZTQpIHsKICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzID0gc2VsZjIuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXMgfHwgc2VsZjIuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZTsKICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgb2szLCAibGlzdEl0ZW1JbmRlbnQiLCBzZWxmMi5jb250YWluZXJTdGF0ZS5zaXplICsgMSkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBub3RCbGFuayhjb2RlNCkgewogICAgaWYgKHNlbGYyLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzIHx8ICFtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcyA9IHZvaWQgMDsKICAgICAgc2VsZjIuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZSA9IHZvaWQgMDsKICAgICAgcmV0dXJuIG5vdEluQ3VycmVudEl0ZW0oY29kZTQpOwogICAgfQogICAgc2VsZjIuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXMgPSB2b2lkIDA7CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lID0gdm9pZCAwOwogICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChpbmRlbnRDb25zdHJ1Y3QsIG9rMywgbm90SW5DdXJyZW50SXRlbSkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBub3RJbkN1cnJlbnRJdGVtKGNvZGU0KSB7CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93ID0gdHJ1ZTsKICAgIHNlbGYyLmludGVycnVwdCA9IHZvaWQgMDsKICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgZWZmZWN0cy5hdHRlbXB0KGxpc3QzLCBvazMsIG5vayksICJsaW5lUHJlZml4Iiwgc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSA/IHZvaWQgMCA6IDQpKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVJbmRlbnQoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlclByZWZpeCwgImxpc3RJdGVtSW5kZW50Iiwgc2VsZjIuY29udGFpbmVyU3RhdGUuc2l6ZSArIDEpOwogIGZ1bmN0aW9uIGFmdGVyUHJlZml4KGNvZGU0KSB7CiAgICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICAgIHJldHVybiB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gImxpc3RJdGVtSW5kZW50IiAmJiB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA9PT0gc2VsZjIuY29udGFpbmVyU3RhdGUuc2l6ZSA/IG9rMyhjb2RlNCkgOiBub2soY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZUxpc3RFbmQoZWZmZWN0cykgewogIGVmZmVjdHMuZXhpdCh0aGlzLmNvbnRhaW5lclN0YXRlLnR5cGUpOwp9CmZ1bmN0aW9uIHRva2VuaXplTGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYWZ0ZXJQcmVmaXgsICJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiLCBzZWxmMi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpID8gdm9pZCAwIDogNCArIDEpOwogIGZ1bmN0aW9uIGFmdGVyUHJlZml4KGNvZGU0KSB7CiAgICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICAgIHJldHVybiAhbWFya2Rvd25TcGFjZShjb2RlNCkgJiYgdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09ICJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiID8gb2szKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQp9CnZhciBsaXN0MywgbGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlQ29uc3RydWN0LCBpbmRlbnRDb25zdHJ1Y3Q7CnZhciBpbml0X2xpc3QyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGlzdC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9ibGFua19saW5lKCk7CiAgICBpbml0X3RoZW1hdGljX2JyZWFrMigpOwogICAgbGlzdDMgPSB7CiAgICAgIGNvbnRpbnVhdGlvbjogewogICAgICAgIHRva2VuaXplOiB0b2tlbml6ZUxpc3RDb250aW51YXRpb24KICAgICAgfSwKICAgICAgZXhpdDogdG9rZW5pemVMaXN0RW5kLAogICAgICBuYW1lOiAibGlzdCIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUxpc3RTdGFydAogICAgfTsKICAgIGxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZUNvbnN0cnVjdCA9IHsKICAgICAgcGFydGlhbDogdHJ1ZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplTGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlCiAgICB9OwogICAgaW5kZW50Q29uc3RydWN0ID0gewogICAgICBwYXJ0aWFsOiB0cnVlLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVJbmRlbnQKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9zZXRleHQtdW5kZXJsaW5lLmpzCmZ1bmN0aW9uIHJlc29sdmVUb1NldGV4dFVuZGVybGluZShldmVudHMsIGNvbnRleHQyKSB7CiAgbGV0IGluZGV4MiA9IGV2ZW50cy5sZW5ndGg7CiAgbGV0IGNvbnRlbnQzOwogIGxldCB0ZXh0OTsKICBsZXQgZGVmaW5pdGlvbjM7CiAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMF0gPT09ICJlbnRlciIpIHsKICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJjb250ZW50IikgewogICAgICAgIGNvbnRlbnQzID0gaW5kZXgyOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAicGFyYWdyYXBoIikgewogICAgICAgIHRleHQ5ID0gaW5kZXgyOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImNvbnRlbnQiKSB7CiAgICAgICAgZXZlbnRzLnNwbGljZShpbmRleDIsIDEpOwogICAgICB9CiAgICAgIGlmICghZGVmaW5pdGlvbjMgJiYgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImRlZmluaXRpb24iKSB7CiAgICAgICAgZGVmaW5pdGlvbjMgPSBpbmRleDI7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgaGVhZGluZzMgPSB7CiAgICB0eXBlOiAic2V0ZXh0SGVhZGluZyIsCiAgICBzdGFydDogewogICAgICAuLi5ldmVudHNbY29udGVudDNdWzFdLnN0YXJ0CiAgICB9LAogICAgZW5kOiB7CiAgICAgIC4uLmV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV1bMV0uZW5kCiAgICB9CiAgfTsKICBldmVudHNbdGV4dDldWzFdLnR5cGUgPSAic2V0ZXh0SGVhZGluZ1RleHQiOwogIGlmIChkZWZpbml0aW9uMykgewogICAgZXZlbnRzLnNwbGljZSh0ZXh0OSwgMCwgWyJlbnRlciIsIGhlYWRpbmczLCBjb250ZXh0Ml0pOwogICAgZXZlbnRzLnNwbGljZShkZWZpbml0aW9uMyArIDEsIDAsIFsiZXhpdCIsIGV2ZW50c1tjb250ZW50M11bMV0sIGNvbnRleHQyXSk7CiAgICBldmVudHNbY29udGVudDNdWzFdLmVuZCA9IHsKICAgICAgLi4uZXZlbnRzW2RlZmluaXRpb24zXVsxXS5lbmQKICAgIH07CiAgfSBlbHNlIHsKICAgIGV2ZW50c1tjb250ZW50M11bMV0gPSBoZWFkaW5nMzsKICB9CiAgZXZlbnRzLnB1c2goWyJleGl0IiwgaGVhZGluZzMsIGNvbnRleHQyXSk7CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiB0b2tlbml6ZVNldGV4dFVuZGVybGluZShlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBsZXQgbWFya2VyOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgbGV0IGluZGV4MiA9IHNlbGYyLmV2ZW50cy5sZW5ndGg7CiAgICBsZXQgcGFyYWdyYXBoMzsKICAgIHdoaWxlIChpbmRleDItLSkgewogICAgICBpZiAoc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0udHlwZSAhPT0gImxpbmVFbmRpbmciICYmIHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLnR5cGUgIT09ICJsaW5lUHJlZml4IiAmJiBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXS50eXBlICE9PSAiY29udGVudCIpIHsKICAgICAgICBwYXJhZ3JhcGgzID0gc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gInBhcmFncmFwaCI7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmICghc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0gJiYgKHNlbGYyLmludGVycnVwdCB8fCBwYXJhZ3JhcGgzKSkgewogICAgICBlZmZlY3RzLmVudGVyKCJzZXRleHRIZWFkaW5nTGluZSIpOwogICAgICBtYXJrZXIgPSBjb2RlNDsKICAgICAgcmV0dXJuIGJlZm9yZShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlKGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlIik7CiAgICByZXR1cm4gaW5zaWRlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gaW5zaWRlOwogICAgfQogICAgZWZmZWN0cy5leGl0KCJzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlIik7CiAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlNCkgPyBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYWZ0ZXIsICJsaW5lU3VmZml4IikoY29kZTQpIDogYWZ0ZXIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJzZXRleHRIZWFkaW5nTGluZSIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQp2YXIgc2V0ZXh0VW5kZXJsaW5lOwp2YXIgaW5pdF9zZXRleHRfdW5kZXJsaW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvc2V0ZXh0LXVuZGVybGluZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgc2V0ZXh0VW5kZXJsaW5lID0gewogICAgICBuYW1lOiAic2V0ZXh0VW5kZXJsaW5lIiwKICAgICAgcmVzb2x2ZVRvOiByZXNvbHZlVG9TZXRleHRVbmRlcmxpbmUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVNldGV4dFVuZGVybGluZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvaW5kZXguanMKdmFyIGluaXRfbWljcm9tYXJrX2NvcmVfY29tbW9ubWFyayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvaW5kZXguanMiKCkgewogICAgaW5pdF9hdHRlbnRpb24oKTsKICAgIGluaXRfYXV0b2xpbmsoKTsKICAgIGluaXRfYmxhbmtfbGluZSgpOwogICAgaW5pdF9ibG9ja19xdW90ZSgpOwogICAgaW5pdF9jaGFyYWN0ZXJfZXNjYXBlKCk7CiAgICBpbml0X2NoYXJhY3Rlcl9yZWZlcmVuY2UoKTsKICAgIGluaXRfY29kZV9mZW5jZWQoKTsKICAgIGluaXRfY29kZV9pbmRlbnRlZCgpOwogICAgaW5pdF9jb2RlX3RleHQoKTsKICAgIGluaXRfY29udGVudCgpOwogICAgaW5pdF9kZWZpbml0aW9uMigpOwogICAgaW5pdF9oYXJkX2JyZWFrX2VzY2FwZSgpOwogICAgaW5pdF9oZWFkaW5nX2F0eCgpOwogICAgaW5pdF9odG1sX2Zsb3coKTsKICAgIGluaXRfaHRtbF90ZXh0KCk7CiAgICBpbml0X2xhYmVsX2VuZCgpOwogICAgaW5pdF9sYWJlbF9zdGFydF9pbWFnZSgpOwogICAgaW5pdF9sYWJlbF9zdGFydF9saW5rKCk7CiAgICBpbml0X2xpbmVfZW5kaW5nKCk7CiAgICBpbml0X2xpc3QyKCk7CiAgICBpbml0X3NldGV4dF91bmRlcmxpbmUoKTsKICAgIGluaXRfdGhlbWF0aWNfYnJlYWsyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGUvbGliL3N5bnRheC5qcwpmdW5jdGlvbiBnZm1Gb290bm90ZSgpIHsKICByZXR1cm4gewogICAgZG9jdW1lbnQ6IHsKICAgICAgWzkxXTogewogICAgICAgIG5hbWU6ICJnZm1Gb290bm90ZURlZmluaXRpb24iLAogICAgICAgIHRva2VuaXplOiB0b2tlbml6ZURlZmluaXRpb25TdGFydCwKICAgICAgICBjb250aW51YXRpb246IHsKICAgICAgICAgIHRva2VuaXplOiB0b2tlbml6ZURlZmluaXRpb25Db250aW51YXRpb24KICAgICAgICB9LAogICAgICAgIGV4aXQ6IGdmbUZvb3Rub3RlRGVmaW5pdGlvbkVuZAogICAgICB9CiAgICB9LAogICAgdGV4dDogewogICAgICBbOTFdOiB7CiAgICAgICAgbmFtZTogImdmbUZvb3Rub3RlQ2FsbCIsCiAgICAgICAgdG9rZW5pemU6IHRva2VuaXplR2ZtRm9vdG5vdGVDYWxsCiAgICAgIH0sCiAgICAgIFs5M106IHsKICAgICAgICBuYW1lOiAiZ2ZtUG90ZW50aWFsRm9vdG5vdGVDYWxsIiwKICAgICAgICBhZGQ6ICJhZnRlciIsCiAgICAgICAgdG9rZW5pemU6IHRva2VuaXplUG90ZW50aWFsR2ZtRm9vdG5vdGVDYWxsLAogICAgICAgIHJlc29sdmVUbzogcmVzb2x2ZVRvUG90ZW50aWFsR2ZtRm9vdG5vdGVDYWxsCiAgICAgIH0KICAgIH0KICB9Owp9CmZ1bmN0aW9uIHRva2VuaXplUG90ZW50aWFsR2ZtRm9vdG5vdGVDYWxsKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBpbmRleDIgPSBzZWxmMi5ldmVudHMubGVuZ3RoOwogIGNvbnN0IGRlZmluZWQgPSBzZWxmMi5wYXJzZXIuZ2ZtRm9vdG5vdGVzIHx8IChzZWxmMi5wYXJzZXIuZ2ZtRm9vdG5vdGVzID0gW10pOwogIGxldCBsYWJlbFN0YXJ0OwogIHdoaWxlIChpbmRleDItLSkgewogICAgY29uc3QgdG9rZW4gPSBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXTsKICAgIGlmICh0b2tlbi50eXBlID09PSAibGFiZWxJbWFnZSIpIHsKICAgICAgbGFiZWxTdGFydCA9IHRva2VuOwogICAgICBicmVhazsKICAgIH0KICAgIGlmICh0b2tlbi50eXBlID09PSAiZ2ZtRm9vdG5vdGVDYWxsIiB8fCB0b2tlbi50eXBlID09PSAibGFiZWxMaW5rIiB8fCB0b2tlbi50eXBlID09PSAibGFiZWwiIHx8IHRva2VuLnR5cGUgPT09ICJpbWFnZSIgfHwgdG9rZW4udHlwZSA9PT0gImxpbmsiKSB7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmICghbGFiZWxTdGFydCB8fCAhbGFiZWxTdGFydC5fYmFsYW5jZWQpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBjb25zdCBpZCA9IG5vcm1hbGl6ZUlkZW50aWZpZXIoc2VsZjIuc2xpY2VTZXJpYWxpemUoewogICAgICBzdGFydDogbGFiZWxTdGFydC5lbmQsCiAgICAgIGVuZDogc2VsZjIubm93KCkKICAgIH0pKTsKICAgIGlmIChpZC5jb2RlUG9pbnRBdCgwKSAhPT0gOTQgfHwgIWRlZmluZWQuaW5jbHVkZXMoaWQuc2xpY2UoMSkpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyIik7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gcmVzb2x2ZVRvUG90ZW50aWFsR2ZtRm9vdG5vdGVDYWxsKGV2ZW50cywgY29udGV4dDIpIHsKICBsZXQgaW5kZXgyID0gZXZlbnRzLmxlbmd0aDsKICBsZXQgbGFiZWxTdGFydDsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGFiZWxJbWFnZSIgJiYgZXZlbnRzW2luZGV4Ml1bMF0gPT09ICJlbnRlciIpIHsKICAgICAgbGFiZWxTdGFydCA9IGV2ZW50c1tpbmRleDJdWzFdOwogICAgICBicmVhazsKICAgIH0KICB9CiAgZXZlbnRzW2luZGV4MiArIDFdWzFdLnR5cGUgPSAiZGF0YSI7CiAgZXZlbnRzW2luZGV4MiArIDNdWzFdLnR5cGUgPSAiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiOwogIGNvbnN0IGNhbGwgPSB7CiAgICB0eXBlOiAiZ2ZtRm9vdG5vdGVDYWxsIiwKICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbaW5kZXgyICsgM11bMV0uc3RhcnQpLAogICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLmVuZCkKICB9OwogIGNvbnN0IG1hcmtlciA9IHsKICAgIHR5cGU6ICJnZm1Gb290bm90ZUNhbGxNYXJrZXIiLAogICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tpbmRleDIgKyAzXVsxXS5lbmQpLAogICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbaW5kZXgyICsgM11bMV0uZW5kKQogIH07CiAgbWFya2VyLmVuZC5jb2x1bW4rKzsKICBtYXJrZXIuZW5kLm9mZnNldCsrOwogIG1hcmtlci5lbmQuX2J1ZmZlckluZGV4Kys7CiAgY29uc3Qgc3RyaW5nMyA9IHsKICAgIHR5cGU6ICJnZm1Gb290bm90ZUNhbGxTdHJpbmciLAogICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIG1hcmtlci5lbmQpLAogICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLnN0YXJ0KQogIH07CiAgY29uc3QgY2h1bmsgPSB7CiAgICB0eXBlOiAiY2h1bmtTdHJpbmciLAogICAgY29udGVudFR5cGU6ICJzdHJpbmciLAogICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIHN0cmluZzMuc3RhcnQpLAogICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBzdHJpbmczLmVuZCkKICB9OwogIGNvbnN0IHJlcGxhY2VtZW50ID0gWwogICAgLy8gVGFrZSB0aGUgYGxhYmVsSW1hZ2VNYXJrZXJgIChub3cgYGRhdGFgLCB0aGUgYCFgKQogICAgZXZlbnRzW2luZGV4MiArIDFdLAogICAgZXZlbnRzW2luZGV4MiArIDJdLAogICAgWyJlbnRlciIsIGNhbGwsIGNvbnRleHQyXSwKICAgIC8vIFRoZSBgW2AKICAgIGV2ZW50c1tpbmRleDIgKyAzXSwKICAgIGV2ZW50c1tpbmRleDIgKyA0XSwKICAgIC8vIFRoZSBgXmAuCiAgICBbImVudGVyIiwgbWFya2VyLCBjb250ZXh0Ml0sCiAgICBbImV4aXQiLCBtYXJrZXIsIGNvbnRleHQyXSwKICAgIC8vIEV2ZXJ5dGhpbmcgaW4gYmV0d2Vlbi4KICAgIFsiZW50ZXIiLCBzdHJpbmczLCBjb250ZXh0Ml0sCiAgICBbImVudGVyIiwgY2h1bmssIGNvbnRleHQyXSwKICAgIFsiZXhpdCIsIGNodW5rLCBjb250ZXh0Ml0sCiAgICBbImV4aXQiLCBzdHJpbmczLCBjb250ZXh0Ml0sCiAgICAvLyBUaGUgZW5kaW5nIChgXWAsIHByb3Blcmx5IHBhcnNlZCBhbmQgbGFiZWxsZWQpLgogICAgZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAyXSwKICAgIGV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV0sCiAgICBbImV4aXQiLCBjYWxsLCBjb250ZXh0Ml0KICBdOwogIGV2ZW50cy5zcGxpY2UoaW5kZXgyLCBldmVudHMubGVuZ3RoIC0gaW5kZXgyICsgMSwgLi4ucmVwbGFjZW1lbnQpOwogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gdG9rZW5pemVHZm1Gb290bm90ZUNhbGwoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgY29uc3QgZGVmaW5lZCA9IHNlbGYyLnBhcnNlci5nZm1Gb290bm90ZXMgfHwgKHNlbGYyLnBhcnNlci5nZm1Gb290bm90ZXMgPSBbXSk7CiAgbGV0IHNpemUgPSAwOwogIGxldCBkYXRhOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVDYWxsIik7CiAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiKTsKICAgIHJldHVybiBjYWxsU3RhcnQ7CiAgfQogIGZ1bmN0aW9uIGNhbGxTdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ICE9PSA5NCkgcmV0dXJuIG5vayhjb2RlNCk7CiAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZUNhbGxNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlQ2FsbE1hcmtlciIpOwogICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nIik7CiAgICBlZmZlY3RzLmVudGVyKCJjaHVua1N0cmluZyIpLmNvbnRlbnRUeXBlID0gInN0cmluZyI7CiAgICByZXR1cm4gY2FsbERhdGE7CiAgfQogIGZ1bmN0aW9uIGNhbGxEYXRhKGNvZGU0KSB7CiAgICBpZiAoCiAgICAgIC8vIFRvbyBsb25nLgogICAgICBzaXplID4gOTk5IHx8IC8vIENsb3NpbmcgYnJhY2Ugd2l0aCBub3RoaW5nLgogICAgICBjb2RlNCA9PT0gOTMgJiYgIWRhdGEgfHwgLy8gU3BhY2Ugb3IgdGFiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR0ZNIGZvciBzb21lIHJlYXNvbi4KICAgICAgLy8gYFxuYCBhbmQgYFtgIG5vdCBiZWluZyBzdXBwb3J0ZWQgbWFrZXMgc2Vuc2UuCiAgICAgIGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA5MSB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KQogICAgKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rU3RyaW5nIik7CiAgICAgIGNvbnN0IHRva2VuID0gZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZUNhbGxTdHJpbmciKTsKICAgICAgaWYgKCFkZWZpbmVkLmluY2x1ZGVzKG5vcm1hbGl6ZUlkZW50aWZpZXIoc2VsZjIuc2xpY2VTZXJpYWxpemUodG9rZW4pKSkpIHsKICAgICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgICAgfQogICAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsIik7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICBpZiAoIW1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSB7CiAgICAgIGRhdGEgPSB0cnVlOwogICAgfQogICAgc2l6ZSsrOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb2RlNCA9PT0gOTIgPyBjYWxsRXNjYXBlIDogY2FsbERhdGE7CiAgfQogIGZ1bmN0aW9uIGNhbGxFc2NhcGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTEgfHwgY29kZTQgPT09IDkyIHx8IGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBzaXplKys7CiAgICAgIHJldHVybiBjYWxsRGF0YTsKICAgIH0KICAgIHJldHVybiBjYWxsRGF0YShjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplRGVmaW5pdGlvblN0YXJ0KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGNvbnN0IGRlZmluZWQgPSBzZWxmMi5wYXJzZXIuZ2ZtRm9vdG5vdGVzIHx8IChzZWxmMi5wYXJzZXIuZ2ZtRm9vdG5vdGVzID0gW10pOwogIGxldCBpZGVudGlmaWVyOwogIGxldCBzaXplID0gMDsKICBsZXQgZGF0YTsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImdmbUZvb3Rub3RlRGVmaW5pdGlvbiIpLl9jb250YWluZXIgPSB0cnVlOwogICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWwiKTsKICAgIGVmZmVjdHMuZW50ZXIoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbE1hcmtlciIpOwogICAgcmV0dXJuIGxhYmVsQXRNYXJrZXI7CiAgfQogIGZ1bmN0aW9uIGxhYmVsQXRNYXJrZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTQpIHsKICAgICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZW50ZXIoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nIik7CiAgICAgIGVmZmVjdHMuZW50ZXIoImNodW5rU3RyaW5nIikuY29udGVudFR5cGUgPSAic3RyaW5nIjsKICAgICAgcmV0dXJuIGxhYmVsSW5zaWRlOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGxhYmVsSW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoCiAgICAgIC8vIFRvbyBsb25nLgogICAgICBzaXplID4gOTk5IHx8IC8vIENsb3NpbmcgYnJhY2Ugd2l0aCBub3RoaW5nLgogICAgICBjb2RlNCA9PT0gOTMgJiYgIWRhdGEgfHwgLy8gU3BhY2Ugb3IgdGFiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR0ZNIGZvciBzb21lIHJlYXNvbi4KICAgICAgLy8gYFxuYCBhbmQgYFtgIG5vdCBiZWluZyBzdXBwb3J0ZWQgbWFrZXMgc2Vuc2UuCiAgICAgIGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA5MSB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KQogICAgKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rU3RyaW5nIik7CiAgICAgIGNvbnN0IHRva2VuID0gZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZyIpOwogICAgICBpZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcihzZWxmMi5zbGljZVNlcmlhbGl6ZSh0b2tlbikpOwogICAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbE1hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWwiKTsKICAgICAgcmV0dXJuIGxhYmVsQWZ0ZXI7CiAgICB9CiAgICBpZiAoIW1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSB7CiAgICAgIGRhdGEgPSB0cnVlOwogICAgfQogICAgc2l6ZSsrOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb2RlNCA9PT0gOTIgPyBsYWJlbEVzY2FwZSA6IGxhYmVsSW5zaWRlOwogIH0KICBmdW5jdGlvbiBsYWJlbEVzY2FwZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MSB8fCBjb2RlNCA9PT0gOTIgfHwgY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHNpemUrKzsKICAgICAgcmV0dXJuIGxhYmVsSW5zaWRlOwogICAgfQogICAgcmV0dXJuIGxhYmVsSW5zaWRlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbGFiZWxBZnRlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA1OCkgewogICAgICBlZmZlY3RzLmVudGVyKCJkZWZpbml0aW9uTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiZGVmaW5pdGlvbk1hcmtlciIpOwogICAgICBpZiAoIWRlZmluZWQuaW5jbHVkZXMoaWRlbnRpZmllcikpIHsKICAgICAgICBkZWZpbmVkLnB1c2goaWRlbnRpZmllcik7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCB3aGl0ZXNwYWNlQWZ0ZXIsICJnZm1Gb290bm90ZURlZmluaXRpb25XaGl0ZXNwYWNlIik7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gd2hpdGVzcGFjZUFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVEZWZpbml0aW9uQ29udGludWF0aW9uKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIGVmZmVjdHMuY2hlY2soYmxhbmtMaW5lLCBvazMsIGVmZmVjdHMuYXR0ZW1wdChpbmRlbnQyLCBvazMsIG5vaykpOwp9CmZ1bmN0aW9uIGdmbUZvb3Rub3RlRGVmaW5pdGlvbkVuZChlZmZlY3RzKSB7CiAgZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb24iKTsKfQpmdW5jdGlvbiB0b2tlbml6ZUluZGVudDIoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlclByZWZpeCwgImdmbUZvb3Rub3RlRGVmaW5pdGlvbkluZGVudCIsIDQgKyAxKTsKICBmdW5jdGlvbiBhZnRlclByZWZpeChjb2RlNCkgewogICAgY29uc3QgdGFpbCA9IHNlbGYyLmV2ZW50c1tzZWxmMi5ldmVudHMubGVuZ3RoIC0gMV07CiAgICByZXR1cm4gdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09ICJnZm1Gb290bm90ZURlZmluaXRpb25JbmRlbnQiICYmIHRhaWxbMl0uc2xpY2VTZXJpYWxpemUodGFpbFsxXSwgdHJ1ZSkubGVuZ3RoID09PSA0ID8gb2szKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQp9CnZhciBpbmRlbnQyOwp2YXIgaW5pdF9zeW50YXgyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlL2xpYi9zeW50YXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfY29yZV9jb21tb25tYXJrKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9ub3JtYWxpemVfaWRlbnRpZmllcigpOwogICAgaW5kZW50MiA9IHsKICAgICAgdG9rZW5pemU6IHRva2VuaXplSW5kZW50MiwKICAgICAgcGFydGlhbDogdHJ1ZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZS9saWIvaHRtbC5qcwpmdW5jdGlvbiBkZWZhdWx0QmFja0xhYmVsKHJlZmVyZW5jZUluZGV4LCByZXJlZmVyZW5jZUluZGV4KSB7CiAgcmV0dXJuICJCYWNrIHRvIHJlZmVyZW5jZSAiICsgKHJlZmVyZW5jZUluZGV4ICsgMSkgKyAocmVyZWZlcmVuY2VJbmRleCA+IDEgPyAiLSIgKyByZXJlZmVyZW5jZUluZGV4IDogIiIpOwp9CmZ1bmN0aW9uIGdmbUZvb3Rub3RlSHRtbChvcHRpb25zKSB7CiAgY29uc3QgY29uZmlnMyA9IG9wdGlvbnMgfHwgZW1wdHlPcHRpb25zMjsKICBjb25zdCBsYWJlbCA9IGNvbmZpZzMubGFiZWwgfHwgIkZvb3Rub3RlcyI7CiAgY29uc3QgbGFiZWxUYWdOYW1lID0gY29uZmlnMy5sYWJlbFRhZ05hbWUgfHwgImgyIjsKICBjb25zdCBsYWJlbEF0dHJpYnV0ZXMgPSBjb25maWczLmxhYmVsQXR0cmlidXRlcyA9PT0gbnVsbCB8fCBjb25maWczLmxhYmVsQXR0cmlidXRlcyA9PT0gdm9pZCAwID8gJ2NsYXNzPSJzci1vbmx5IicgOiBjb25maWczLmxhYmVsQXR0cmlidXRlczsKICBjb25zdCBiYWNrTGFiZWwgPSBjb25maWczLmJhY2tMYWJlbCB8fCBkZWZhdWx0QmFja0xhYmVsOwogIGNvbnN0IGNsb2JiZXJQcmVmaXggPSBjb25maWczLmNsb2JiZXJQcmVmaXggPT09IG51bGwgfHwgY29uZmlnMy5jbG9iYmVyUHJlZml4ID09PSB2b2lkIDAgPyAidXNlci1jb250ZW50LSIgOiBjb25maWczLmNsb2JiZXJQcmVmaXg7CiAgcmV0dXJuIHsKICAgIGVudGVyOiB7CiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbigpIHsKICAgICAgICBjb25zdCBzdGFjayA9IHRoaXMuZ2V0RGF0YSgidGlnaHRTdGFjayIpOwogICAgICAgIHN0YWNrLnB1c2goZmFsc2UpOwogICAgICB9LAogICAgICBnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZygpIHsKICAgICAgICB0aGlzLmJ1ZmZlcigpOwogICAgICB9LAogICAgICBnZm1Gb290bm90ZUNhbGxTdHJpbmcoKSB7CiAgICAgICAgdGhpcy5idWZmZXIoKTsKICAgICAgfQogICAgfSwKICAgIGV4aXQ6IHsKICAgICAgZ2ZtRm9vdG5vdGVEZWZpbml0aW9uKCkgewogICAgICAgIGxldCBkZWZpbml0aW9ucyA9IHRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9ucyIpOwogICAgICAgIGNvbnN0IGZvb3Rub3RlU3RhY2sgPSB0aGlzLmdldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvblN0YWNrIik7CiAgICAgICAgY29uc3QgdGlnaHRTdGFjayA9IHRoaXMuZ2V0RGF0YSgidGlnaHRTdGFjayIpOwogICAgICAgIGNvbnN0IGN1cnJlbnQgPSBmb290bm90ZVN0YWNrLnBvcCgpOwogICAgICAgIGNvbnN0IHZhbHVlMiA9IHRoaXMucmVzdW1lKCk7CiAgICAgICAgaWYgKCFkZWZpbml0aW9ucykgewogICAgICAgICAgdGhpcy5zZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25zIiwgZGVmaW5pdGlvbnMgPSB7fSk7CiAgICAgICAgfQogICAgICAgIGlmICghb3duNC5jYWxsKGRlZmluaXRpb25zLCBjdXJyZW50KSkgZGVmaW5pdGlvbnNbY3VycmVudF0gPSB2YWx1ZTI7CiAgICAgICAgdGlnaHRTdGFjay5wb3AoKTsKICAgICAgICB0aGlzLnNldERhdGEoInNsdXJwT25lTGluZUVuZGluZyIsIHRydWUpOwogICAgICAgIHRoaXMuc2V0RGF0YSgibGFzdFdhc1RhZyIpOwogICAgICB9LAogICAgICBnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZyh0b2tlbikgewogICAgICAgIGxldCBmb290bm90ZVN0YWNrID0gdGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25TdGFjayIpOwogICAgICAgIGlmICghZm9vdG5vdGVTdGFjaykgewogICAgICAgICAgdGhpcy5zZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25TdGFjayIsIGZvb3Rub3RlU3RhY2sgPSBbXSk7CiAgICAgICAgfQogICAgICAgIGZvb3Rub3RlU3RhY2sucHVzaChub3JtYWxpemVJZGVudGlmaWVyKHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pKSk7CiAgICAgICAgdGhpcy5yZXN1bWUoKTsKICAgICAgICB0aGlzLmJ1ZmZlcigpOwogICAgICB9LAogICAgICBnZm1Gb290bm90ZUNhbGxTdHJpbmcodG9rZW4pIHsKICAgICAgICBsZXQgY2FsbHMgPSB0aGlzLmdldERhdGEoImdmbUZvb3Rub3RlQ2FsbE9yZGVyIik7CiAgICAgICAgbGV0IGNvdW50cyA9IHRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsQ291bnRzIik7CiAgICAgICAgY29uc3QgaWQgPSBub3JtYWxpemVJZGVudGlmaWVyKHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pKTsKICAgICAgICBsZXQgY291bnRlcjI7CiAgICAgICAgdGhpcy5yZXN1bWUoKTsKICAgICAgICBpZiAoIWNhbGxzKSB0aGlzLnNldERhdGEoImdmbUZvb3Rub3RlQ2FsbE9yZGVyIiwgY2FsbHMgPSBbXSk7CiAgICAgICAgaWYgKCFjb3VudHMpIHRoaXMuc2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsQ291bnRzIiwgY291bnRzID0ge30pOwogICAgICAgIGNvbnN0IGluZGV4MiA9IGNhbGxzLmluZGV4T2YoaWQpOwogICAgICAgIGNvbnN0IHNhZmVJZCA9IHNhbml0aXplVXJpKGlkLnRvTG93ZXJDYXNlKCkpOwogICAgICAgIGlmIChpbmRleDIgPT09IC0xKSB7CiAgICAgICAgICBjYWxscy5wdXNoKGlkKTsKICAgICAgICAgIGNvdW50c1tpZF0gPSAxOwogICAgICAgICAgY291bnRlcjIgPSBjYWxscy5sZW5ndGg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvdW50c1tpZF0rKzsKICAgICAgICAgIGNvdW50ZXIyID0gaW5kZXgyICsgMTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmV1c2VDb3VudGVyID0gY291bnRzW2lkXTsKICAgICAgICB0aGlzLnRhZygnPHN1cD48YSBocmVmPSIjJyArIGNsb2JiZXJQcmVmaXggKyAiZm4tIiArIHNhZmVJZCArICciIGlkPSInICsgY2xvYmJlclByZWZpeCArICJmbnJlZi0iICsgc2FmZUlkICsgKHJldXNlQ291bnRlciA+IDEgPyAiLSIgKyByZXVzZUNvdW50ZXIgOiAiIikgKyAnIiBkYXRhLWZvb3Rub3RlLXJlZj0iIiBhcmlhLWRlc2NyaWJlZGJ5PSJmb290bm90ZS1sYWJlbCI+JyArIFN0cmluZyhjb3VudGVyMikgKyAiPC9hPjwvc3VwPiIpOwogICAgICB9LAogICAgICBudWxsKCkgewogICAgICAgIGNvbnN0IGNhbGxzID0gdGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZUNhbGxPcmRlciIpIHx8IFtdOwogICAgICAgIGNvbnN0IGNvdW50cyA9IHRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsQ291bnRzIikgfHwge307CiAgICAgICAgY29uc3QgZGVmaW5pdGlvbnMgPSB0aGlzLmdldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvbnMiKSB8fCB7fTsKICAgICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgICAgaWYgKGNhbGxzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygnPHNlY3Rpb24gZGF0YS1mb290bm90ZXM9IiIgY2xhc3M9ImZvb3Rub3RlcyI+PCcgKyBsYWJlbFRhZ05hbWUgKyAnIGlkPSJmb290bm90ZS1sYWJlbCInICsgKGxhYmVsQXR0cmlidXRlcyA/ICIgIiArIGxhYmVsQXR0cmlidXRlcyA6ICIiKSArICI+Iik7CiAgICAgICAgICB0aGlzLnJhdyh0aGlzLmVuY29kZShsYWJlbCkpOwogICAgICAgICAgdGhpcy50YWcoIjwvIiArIGxhYmVsVGFnTmFtZSArICI+Iik7CiAgICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgICAgdGhpcy50YWcoIjxvbD4iKTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKCsraW5kZXgyIDwgY2FsbHMubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCBpZCA9IGNhbGxzW2luZGV4Ml07CiAgICAgICAgICBjb25zdCBzYWZlSWQgPSBzYW5pdGl6ZVVyaShpZC50b0xvd2VyQ2FzZSgpKTsKICAgICAgICAgIGxldCByZWZlcmVuY2VJbmRleCA9IDA7CiAgICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gW107CiAgICAgICAgICB3aGlsZSAoKytyZWZlcmVuY2VJbmRleCA8PSBjb3VudHNbaWRdKSB7CiAgICAgICAgICAgIHJlZmVyZW5jZXMucHVzaCgnPGEgaHJlZj0iIycgKyBjbG9iYmVyUHJlZml4ICsgImZucmVmLSIgKyBzYWZlSWQgKyAocmVmZXJlbmNlSW5kZXggPiAxID8gIi0iICsgcmVmZXJlbmNlSW5kZXggOiAiIikgKyAnIiBkYXRhLWZvb3Rub3RlLWJhY2tyZWY9IiIgYXJpYS1sYWJlbD0iJyArIHRoaXMuZW5jb2RlKHR5cGVvZiBiYWNrTGFiZWwgPT09ICJzdHJpbmciID8gYmFja0xhYmVsIDogYmFja0xhYmVsKGluZGV4MiwgcmVmZXJlbmNlSW5kZXgpKSArICciIGNsYXNzPSJkYXRhLWZvb3Rub3RlLWJhY2tyZWYiPlx1MjFBOScgKyAocmVmZXJlbmNlSW5kZXggPiAxID8gIjxzdXA+IiArIHJlZmVyZW5jZUluZGV4ICsgIjwvc3VwPiIgOiAiIikgKyAiPC9hPiIpOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5qb2luKCIgIik7CiAgICAgICAgICBsZXQgaW5qZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygnPGxpIGlkPSInICsgY2xvYmJlclByZWZpeCArICJmbi0iICsgc2FmZUlkICsgJyI+Jyk7CiAgICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgICAgdGhpcy50YWcoZGVmaW5pdGlvbnNbaWRdLnJlcGxhY2UoLzxcL3A+KD86XHI/XG58XHIpPyQvLCBmdW5jdGlvbigkMCkgewogICAgICAgICAgICBpbmplY3RlZCA9IHRydWU7CiAgICAgICAgICAgIHJldHVybiAiICIgKyByZWZlcmVuY2UgKyAkMDsKICAgICAgICAgIH0pKTsKICAgICAgICAgIGlmICghaW5qZWN0ZWQpIHsKICAgICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICAgICAgdGhpcy50YWcocmVmZXJlbmNlKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygiPC9saT4iKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNhbGxzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygiPC9vbD4iKTsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygiPC9zZWN0aW9uPiIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07Cn0KdmFyIG93bjQsIGVtcHR5T3B0aW9uczI7CnZhciBpbml0X2h0bWwzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlL2xpYi9odG1sLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfbm9ybWFsaXplX2lkZW50aWZpZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgICBvd240ID0ge30uaGFzT3duUHJvcGVydHk7CiAgICBlbXB0eU9wdGlvbnMyID0ge307CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGUvaW5kZXguanMKdmFyIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fZm9vdG5vdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGUvaW5kZXguanMiKCkgewogICAgaW5pdF9zeW50YXgyKCk7CiAgICBpbml0X2h0bWwzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoL2xpYi9odG1sLmpzCmZ1bmN0aW9uIGdmbVN0cmlrZXRocm91Z2hIdG1sKCkgewogIHJldHVybiB7CiAgICBlbnRlcjogewogICAgICBzdHJpa2V0aHJvdWdoKCkgewogICAgICAgIHRoaXMudGFnKCI8ZGVsPiIpOwogICAgICB9CiAgICB9LAogICAgZXhpdDogewogICAgICBzdHJpa2V0aHJvdWdoKCkgewogICAgICAgIHRoaXMudGFnKCI8L2RlbD4iKTsKICAgICAgfQogICAgfQogIH07Cn0KdmFyIGluaXRfaHRtbDQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoL2xpYi9odG1sLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2hAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2gvbGliL3N5bnRheC5qcwpmdW5jdGlvbiBnZm1TdHJpa2V0aHJvdWdoKG9wdGlvbnMpIHsKICBjb25zdCBvcHRpb25zXyA9IG9wdGlvbnMgfHwge307CiAgbGV0IHNpbmdsZTIgPSBvcHRpb25zXy5zaW5nbGVUaWxkZTsKICBjb25zdCB0b2tlbml6ZXIgPSB7CiAgICBuYW1lOiAic3RyaWtldGhyb3VnaCIsCiAgICB0b2tlbml6ZTogdG9rZW5pemVTdHJpa2V0aHJvdWdoLAogICAgcmVzb2x2ZUFsbDogcmVzb2x2ZUFsbFN0cmlrZXRocm91Z2gKICB9OwogIGlmIChzaW5nbGUyID09PSBudWxsIHx8IHNpbmdsZTIgPT09IHZvaWQgMCkgewogICAgc2luZ2xlMiA9IHRydWU7CiAgfQogIHJldHVybiB7CiAgICB0ZXh0OiB7CiAgICAgIFsxMjZdOiB0b2tlbml6ZXIKICAgIH0sCiAgICBpbnNpZGVTcGFuOiB7CiAgICAgIG51bGw6IFt0b2tlbml6ZXJdCiAgICB9LAogICAgYXR0ZW50aW9uTWFya2VyczogewogICAgICBudWxsOiBbMTI2XQogICAgfQogIH07CiAgZnVuY3Rpb24gcmVzb2x2ZUFsbFN0cmlrZXRocm91Z2goZXZlbnRzLCBjb250ZXh0MikgewogICAgbGV0IGluZGV4MiA9IC0xOwogICAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMF0gPT09ICJlbnRlciIgJiYgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gInN0cmlrZXRocm91Z2hTZXF1ZW5jZVRlbXBvcmFyeSIgJiYgZXZlbnRzW2luZGV4Ml1bMV0uX2Nsb3NlKSB7CiAgICAgICAgbGV0IG9wZW4gPSBpbmRleDI7CiAgICAgICAgd2hpbGUgKG9wZW4tLSkgewogICAgICAgICAgaWYgKGV2ZW50c1tvcGVuXVswXSA9PT0gImV4aXQiICYmIGV2ZW50c1tvcGVuXVsxXS50eXBlID09PSAic3RyaWtldGhyb3VnaFNlcXVlbmNlVGVtcG9yYXJ5IiAmJiBldmVudHNbb3Blbl1bMV0uX29wZW4gJiYgLy8gSWYgdGhlIHNpemVzIGFyZSB0aGUgc2FtZToKICAgICAgICAgIGV2ZW50c1tpbmRleDJdWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbaW5kZXgyXVsxXS5zdGFydC5vZmZzZXQgPT09IGV2ZW50c1tvcGVuXVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW29wZW5dWzFdLnN0YXJ0Lm9mZnNldCkgewogICAgICAgICAgICBldmVudHNbaW5kZXgyXVsxXS50eXBlID0gInN0cmlrZXRocm91Z2hTZXF1ZW5jZSI7CiAgICAgICAgICAgIGV2ZW50c1tvcGVuXVsxXS50eXBlID0gInN0cmlrZXRocm91Z2hTZXF1ZW5jZSI7CiAgICAgICAgICAgIGNvbnN0IHN0cmlrZXRocm91Z2gzID0gewogICAgICAgICAgICAgIHR5cGU6ICJzdHJpa2V0aHJvdWdoIiwKICAgICAgICAgICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW29wZW5dWzFdLnN0YXJ0KSwKICAgICAgICAgICAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tpbmRleDJdWzFdLmVuZCkKICAgICAgICAgICAgfTsKICAgICAgICAgICAgY29uc3QgdGV4dDkgPSB7CiAgICAgICAgICAgICAgdHlwZTogInN0cmlrZXRocm91Z2hUZXh0IiwKICAgICAgICAgICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW29wZW5dWzFdLmVuZCksCiAgICAgICAgICAgICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbaW5kZXgyXVsxXS5zdGFydCkKICAgICAgICAgICAgfTsKICAgICAgICAgICAgY29uc3QgbmV4dEV2ZW50cyA9IFtbImVudGVyIiwgc3RyaWtldGhyb3VnaDMsIGNvbnRleHQyXSwgWyJlbnRlciIsIGV2ZW50c1tvcGVuXVsxXSwgY29udGV4dDJdLCBbImV4aXQiLCBldmVudHNbb3Blbl1bMV0sIGNvbnRleHQyXSwgWyJlbnRlciIsIHRleHQ5LCBjb250ZXh0Ml1dOwogICAgICAgICAgICBjb25zdCBpbnNpZGVTcGFuMiA9IGNvbnRleHQyLnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbDsKICAgICAgICAgICAgaWYgKGluc2lkZVNwYW4yKSB7CiAgICAgICAgICAgICAgc3BsaWNlKG5leHRFdmVudHMsIG5leHRFdmVudHMubGVuZ3RoLCAwLCByZXNvbHZlQWxsKGluc2lkZVNwYW4yLCBldmVudHMuc2xpY2Uob3BlbiArIDEsIGluZGV4MiksIGNvbnRleHQyKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3BsaWNlKG5leHRFdmVudHMsIG5leHRFdmVudHMubGVuZ3RoLCAwLCBbWyJleGl0IiwgdGV4dDksIGNvbnRleHQyXSwgWyJlbnRlciIsIGV2ZW50c1tpbmRleDJdWzFdLCBjb250ZXh0Ml0sIFsiZXhpdCIsIGV2ZW50c1tpbmRleDJdWzFdLCBjb250ZXh0Ml0sIFsiZXhpdCIsIHN0cmlrZXRocm91Z2gzLCBjb250ZXh0Ml1dKTsKICAgICAgICAgICAgc3BsaWNlKGV2ZW50cywgb3BlbiAtIDEsIGluZGV4MiAtIG9wZW4gKyAzLCBuZXh0RXZlbnRzKTsKICAgICAgICAgICAgaW5kZXgyID0gb3BlbiArIG5leHRFdmVudHMubGVuZ3RoIC0gMjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpbmRleDIgPSAtMTsKICAgIHdoaWxlICgrK2luZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJzdHJpa2V0aHJvdWdoU2VxdWVuY2VUZW1wb3JhcnkiKSB7CiAgICAgICAgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9ICJkYXRhIjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGV2ZW50czsKICB9CiAgZnVuY3Rpb24gdG9rZW5pemVTdHJpa2V0aHJvdWdoKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgICBjb25zdCBwcmV2aW91czMgPSB0aGlzLnByZXZpb3VzOwogICAgY29uc3QgZXZlbnRzID0gdGhpcy5ldmVudHM7CiAgICBsZXQgc2l6ZSA9IDA7CiAgICByZXR1cm4gc3RhcnQ7CiAgICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgICBpZiAocHJldmlvdXMzID09PSAxMjYgJiYgZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAxXVsxXS50eXBlICE9PSAiY2hhcmFjdGVyRXNjYXBlIikgewogICAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgICB9CiAgICAgIGVmZmVjdHMuZW50ZXIoInN0cmlrZXRocm91Z2hTZXF1ZW5jZVRlbXBvcmFyeSIpOwogICAgICByZXR1cm4gbW9yZShjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBtb3JlKGNvZGU0KSB7CiAgICAgIGNvbnN0IGJlZm9yZSA9IGNsYXNzaWZ5Q2hhcmFjdGVyKHByZXZpb3VzMyk7CiAgICAgIGlmIChjb2RlNCA9PT0gMTI2KSB7CiAgICAgICAgaWYgKHNpemUgPiAxKSByZXR1cm4gbm9rKGNvZGU0KTsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHNpemUrKzsKICAgICAgICByZXR1cm4gbW9yZTsKICAgICAgfQogICAgICBpZiAoc2l6ZSA8IDIgJiYgIXNpbmdsZTIpIHJldHVybiBub2soY29kZTQpOwogICAgICBjb25zdCB0b2tlbiA9IGVmZmVjdHMuZXhpdCgic3RyaWtldGhyb3VnaFNlcXVlbmNlVGVtcG9yYXJ5Iik7CiAgICAgIGNvbnN0IGFmdGVyID0gY2xhc3NpZnlDaGFyYWN0ZXIoY29kZTQpOwogICAgICB0b2tlbi5fb3BlbiA9ICFhZnRlciB8fCBhZnRlciA9PT0gMiAmJiBCb29sZWFuKGJlZm9yZSk7CiAgICAgIHRva2VuLl9jbG9zZSA9ICFiZWZvcmUgfHwgYmVmb3JlID09PSAyICYmIEJvb2xlYW4oYWZ0ZXIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICB9Cn0KdmFyIGluaXRfc3ludGF4MyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2hAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2gvbGliL3N5bnRheC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NodW5rZWQoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2xhc3NpZnlfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Jlc29sdmVfYWxsKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoL2luZGV4LmpzCnZhciBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX3N0cmlrZXRocm91Z2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1zdHJpa2V0aHJvdWdoL2luZGV4LmpzIigpIHsKICAgIGluaXRfaHRtbDQoKTsKICAgIGluaXRfc3ludGF4MygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9odG1sLmpzCmZ1bmN0aW9uIGdmbVRhYmxlSHRtbCgpIHsKICByZXR1cm4gewogICAgZW50ZXI6IHsKICAgICAgdGFibGUodG9rZW4pIHsKICAgICAgICBjb25zdCB0YWJsZUFsaWduID0gdG9rZW4uX2FsaWduOwogICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgdGhpcy50YWcoIjx0YWJsZT4iKTsKICAgICAgICB0aGlzLnNldERhdGEoInRhYmxlQWxpZ24iLCB0YWJsZUFsaWduKTsKICAgICAgfSwKICAgICAgdGFibGVCb2R5KCkgewogICAgICAgIHRoaXMudGFnKCI8dGJvZHk+Iik7CiAgICAgIH0sCiAgICAgIHRhYmxlRGF0YSgpIHsKICAgICAgICBjb25zdCB0YWJsZUFsaWduID0gdGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIik7CiAgICAgICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7CiAgICAgICAgY29uc3QgYWxpZ24gPSBhbGlnbm1lbnRbdGFibGVBbGlnblt0YWJsZUNvbHVtbl1dOwogICAgICAgIGlmIChhbGlnbiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICB0aGlzLmJ1ZmZlcigpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgICAgdGhpcy50YWcoIjx0ZCIgKyBhbGlnbiArICI+Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICB0YWJsZUhlYWQoKSB7CiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICB0aGlzLnRhZygiPHRoZWFkPiIpOwogICAgICB9LAogICAgICB0YWJsZUhlYWRlcigpIHsKICAgICAgICBjb25zdCB0YWJsZUFsaWduID0gdGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIik7CiAgICAgICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7CiAgICAgICAgY29uc3QgYWxpZ24gPSBhbGlnbm1lbnRbdGFibGVBbGlnblt0YWJsZUNvbHVtbl1dOwogICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgdGhpcy50YWcoIjx0aCIgKyBhbGlnbiArICI+Iik7CiAgICAgIH0sCiAgICAgIHRhYmxlUm93KCkgewogICAgICAgIHRoaXMuc2V0RGF0YSgidGFibGVDb2x1bW4iLCAwKTsKICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgIHRoaXMudGFnKCI8dHI+Iik7CiAgICAgIH0KICAgIH0sCiAgICBleGl0OiB7CiAgICAgIC8vIE92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBjb2RlIHRleHQgZGF0YSBoYW5kbGVyIHRvIHVuZXNjYXBlIGVzY2FwZWQgcGlwZXMgd2hlbgogICAgICAvLyB0aGV5IGFyZSBpbiB0YWJsZXMuCiAgICAgIGNvZGVUZXh0RGF0YSh0b2tlbikgewogICAgICAgIGxldCB2YWx1ZTIgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICAgICAgICBpZiAodGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIikpIHsKICAgICAgICAgIHZhbHVlMiA9IHZhbHVlMi5yZXBsYWNlKC9cXChbXFx8XSkvZywgcmVwbGFjZTIpOwogICAgICAgIH0KICAgICAgICB0aGlzLnJhdyh0aGlzLmVuY29kZSh2YWx1ZTIpKTsKICAgICAgfSwKICAgICAgdGFibGUoKSB7CiAgICAgICAgdGhpcy5zZXREYXRhKCJ0YWJsZUFsaWduIik7CiAgICAgICAgdGhpcy5zZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIik7CiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICB0aGlzLnRhZygiPC90YWJsZT4iKTsKICAgICAgfSwKICAgICAgdGFibGVCb2R5KCkgewogICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgdGhpcy50YWcoIjwvdGJvZHk+Iik7CiAgICAgIH0sCiAgICAgIHRhYmxlRGF0YSgpIHsKICAgICAgICBjb25zdCB0YWJsZUFsaWduID0gdGhpcy5nZXREYXRhKCJ0YWJsZUFsaWduIik7CiAgICAgICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7CiAgICAgICAgaWYgKHRhYmxlQ29sdW1uIGluIHRhYmxlQWxpZ24pIHsKICAgICAgICAgIHRoaXMudGFnKCI8L3RkPiIpOwogICAgICAgICAgdGhpcy5zZXREYXRhKCJ0YWJsZUNvbHVtbiIsIHRhYmxlQ29sdW1uICsgMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMucmVzdW1lKCk7CiAgICAgICAgfQogICAgICB9LAogICAgICB0YWJsZUhlYWQoKSB7CiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICB0aGlzLnRhZygiPC90aGVhZD4iKTsKICAgICAgfSwKICAgICAgdGFibGVIZWFkZXIoKSB7CiAgICAgICAgY29uc3QgdGFibGVDb2x1bW4gPSB0aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7CiAgICAgICAgdGhpcy50YWcoIjwvdGg+Iik7CiAgICAgICAgdGhpcy5zZXREYXRhKCJ0YWJsZUNvbHVtbiIsIHRhYmxlQ29sdW1uICsgMSk7CiAgICAgIH0sCiAgICAgIHRhYmxlUm93KCkgewogICAgICAgIGNvbnN0IHRhYmxlQWxpZ24gPSB0aGlzLmdldERhdGEoInRhYmxlQWxpZ24iKTsKICAgICAgICBsZXQgdGFibGVDb2x1bW4gPSB0aGlzLmdldERhdGEoInRhYmxlQ29sdW1uIik7CiAgICAgICAgd2hpbGUgKHRhYmxlQ29sdW1uIDwgdGFibGVBbGlnbi5sZW5ndGgpIHsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygiPHRkIiArIGFsaWdubWVudFt0YWJsZUFsaWduW3RhYmxlQ29sdW1uXV0gKyAiPjwvdGQ+Iik7CiAgICAgICAgICB0YWJsZUNvbHVtbisrOwogICAgICAgIH0KICAgICAgICB0aGlzLnNldERhdGEoInRhYmxlQ29sdW1uIiwgdGFibGVDb2x1bW4pOwogICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgdGhpcy50YWcoIjwvdHI+Iik7CiAgICAgIH0KICAgIH0KICB9Owp9CmZ1bmN0aW9uIHJlcGxhY2UyKCQwLCAkMSkgewogIHJldHVybiAkMSA9PT0gInwiID8gJDEgOiAkMDsKfQp2YXIgYWxpZ25tZW50Owp2YXIgaW5pdF9odG1sNSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZS9saWIvaHRtbC5qcyIoKSB7CiAgICBhbGlnbm1lbnQgPSB7CiAgICAgIG5vbmU6ICIiLAogICAgICBsZWZ0OiAnIGFsaWduPSJsZWZ0IicsCiAgICAgIHJpZ2h0OiAnIGFsaWduPSJyaWdodCInLAogICAgICBjZW50ZXI6ICcgYWxpZ249ImNlbnRlciInCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9lZGl0LW1hcC5qcwpmdW5jdGlvbiBhZGRJbXBsZW1lbnRhdGlvbihlZGl0TWFwLCBhdCwgcmVtb3ZlMiwgYWRkMykgewogIGxldCBpbmRleDIgPSAwOwogIGlmIChyZW1vdmUyID09PSAwICYmIGFkZDMubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm47CiAgfQogIHdoaWxlIChpbmRleDIgPCBlZGl0TWFwLm1hcC5sZW5ndGgpIHsKICAgIGlmIChlZGl0TWFwLm1hcFtpbmRleDJdWzBdID09PSBhdCkgewogICAgICBlZGl0TWFwLm1hcFtpbmRleDJdWzFdICs9IHJlbW92ZTI7CiAgICAgIGVkaXRNYXAubWFwW2luZGV4Ml1bMl0ucHVzaCguLi5hZGQzKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaW5kZXgyICs9IDE7CiAgfQogIGVkaXRNYXAubWFwLnB1c2goW2F0LCByZW1vdmUyLCBhZGQzXSk7Cn0KdmFyIEVkaXRNYXA7CnZhciBpbml0X2VkaXRfbWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9lZGl0LW1hcC5qcyIoKSB7CiAgICBFZGl0TWFwID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgbmV3IGVkaXQgbWFwLgogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5tYXAgPSBbXTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGFuIGVkaXQ6IGEgcmVtb3ZlIGFuZC9vciBhZGQgYXQgYSBjZXJ0YWluIHBsYWNlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZQogICAgICAgKiBAcGFyYW0ge0FycmF5PEV2ZW50Pn0gYWRkCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqLwogICAgICBhZGQoaW5kZXgyLCByZW1vdmUyLCBhZGQzKSB7CiAgICAgICAgYWRkSW1wbGVtZW50YXRpb24odGhpcywgaW5kZXgyLCByZW1vdmUyLCBhZGQzKTsKICAgICAgfQogICAgICAvLyBUbyBkbzogYWRkIHRoaXMgd2hlbiBtb3ZpbmcgdG8gYG1pY3JvbWFya2AuCiAgICAgIC8vIC8qKgogICAgICAvLyAgKiBDcmVhdGUgYW4gZWRpdDogYnV0IGluc2VydCBgYWRkYCBiZWZvcmUgZXhpc3RpbmcgYWRkaXRpb25zLgogICAgICAvLyAgKgogICAgICAvLyAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKICAgICAgLy8gICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZQogICAgICAvLyAgKiBAcGFyYW0ge0FycmF5PEV2ZW50Pn0gYWRkCiAgICAgIC8vICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgIC8vICAqLwogICAgICAvLyBhZGRCZWZvcmUoaW5kZXgsIHJlbW92ZSwgYWRkKSB7CiAgICAgIC8vICAgYWRkSW1wbGVtZW50YXRpb24odGhpcywgaW5kZXgsIHJlbW92ZSwgYWRkLCB0cnVlKQogICAgICAvLyB9CiAgICAgIC8qKgogICAgICAgKiBEb25lLCBjaGFuZ2UgdGhlIGV2ZW50cy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtBcnJheTxFdmVudD59IGV2ZW50cwogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKi8KICAgICAgY29uc3VtZShldmVudHMpIHsKICAgICAgICB0aGlzLm1hcC5zb3J0KGZ1bmN0aW9uKGE1LCBiNSkgewogICAgICAgICAgcmV0dXJuIGE1WzBdIC0gYjVbMF07CiAgICAgICAgfSk7CiAgICAgICAgaWYgKHRoaXMubWFwLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsZXQgaW5kZXgyID0gdGhpcy5tYXAubGVuZ3RoOwogICAgICAgIGNvbnN0IHZlY3MgPSBbXTsKICAgICAgICB3aGlsZSAoaW5kZXgyID4gMCkgewogICAgICAgICAgaW5kZXgyIC09IDE7CiAgICAgICAgICB2ZWNzLnB1c2goZXZlbnRzLnNsaWNlKHRoaXMubWFwW2luZGV4Ml1bMF0gKyB0aGlzLm1hcFtpbmRleDJdWzFdKSwgdGhpcy5tYXBbaW5kZXgyXVsyXSk7CiAgICAgICAgICBldmVudHMubGVuZ3RoID0gdGhpcy5tYXBbaW5kZXgyXVswXTsKICAgICAgICB9CiAgICAgICAgdmVjcy5wdXNoKGV2ZW50cy5zbGljZSgpKTsKICAgICAgICBldmVudHMubGVuZ3RoID0gMDsKICAgICAgICBsZXQgc2xpY2UgPSB2ZWNzLnBvcCgpOwogICAgICAgIHdoaWxlIChzbGljZSkgewogICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50NCBvZiBzbGljZSkgewogICAgICAgICAgICBldmVudHMucHVzaChlbGVtZW50NCk7CiAgICAgICAgICB9CiAgICAgICAgICBzbGljZSA9IHZlY3MucG9wKCk7CiAgICAgICAgfQogICAgICAgIHRoaXMubWFwLmxlbmd0aCA9IDA7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZUAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGUvbGliL2luZmVyLmpzCmZ1bmN0aW9uIGdmbVRhYmxlQWxpZ24oZXZlbnRzLCBpbmRleDIpIHsKICBsZXQgaW5EZWxpbWl0ZXJSb3cgPSBmYWxzZTsKICBjb25zdCBhbGlnbiA9IFtdOwogIHdoaWxlIChpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICBjb25zdCBldmVudCA9IGV2ZW50c1tpbmRleDJdOwogICAgaWYgKGluRGVsaW1pdGVyUm93KSB7CiAgICAgIGlmIChldmVudFswXSA9PT0gImVudGVyIikgewogICAgICAgIGlmIChldmVudFsxXS50eXBlID09PSAidGFibGVDb250ZW50IikgewogICAgICAgICAgYWxpZ24ucHVzaChldmVudHNbaW5kZXgyICsgMV1bMV0udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyTWFya2VyIiA/ICJsZWZ0IiA6ICJub25lIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGV2ZW50WzFdLnR5cGUgPT09ICJ0YWJsZUNvbnRlbnQiKSB7CiAgICAgICAgaWYgKGV2ZW50c1tpbmRleDIgLSAxXVsxXS50eXBlID09PSAidGFibGVEZWxpbWl0ZXJNYXJrZXIiKSB7CiAgICAgICAgICBjb25zdCBhbGlnbkluZGV4ID0gYWxpZ24ubGVuZ3RoIC0gMTsKICAgICAgICAgIGFsaWduW2FsaWduSW5kZXhdID0gYWxpZ25bYWxpZ25JbmRleF0gPT09ICJsZWZ0IiA/ICJjZW50ZXIiIDogInJpZ2h0IjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZXZlbnRbMV0udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyUm93IikgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiICYmIGV2ZW50WzFdLnR5cGUgPT09ICJ0YWJsZURlbGltaXRlclJvdyIpIHsKICAgICAgaW5EZWxpbWl0ZXJSb3cgPSB0cnVlOwogICAgfQogICAgaW5kZXgyICs9IDE7CiAgfQogIHJldHVybiBhbGlnbjsKfQp2YXIgaW5pdF9pbmZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZS9saWIvaW5mZXIuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9zeW50YXguanMKZnVuY3Rpb24gZ2ZtVGFibGUoKSB7CiAgcmV0dXJuIHsKICAgIGZsb3c6IHsKICAgICAgbnVsbDogewogICAgICAgIG5hbWU6ICJ0YWJsZSIsCiAgICAgICAgdG9rZW5pemU6IHRva2VuaXplVGFibGUsCiAgICAgICAgcmVzb2x2ZUFsbDogcmVzb2x2ZVRhYmxlCiAgICAgIH0KICAgIH0KICB9Owp9CmZ1bmN0aW9uIHRva2VuaXplVGFibGUoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IHNpemUgPSAwOwogIGxldCBzaXplQiA9IDA7CiAgbGV0IHNlZW47CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBsZXQgaW5kZXgyID0gc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDE7CiAgICB3aGlsZSAoaW5kZXgyID4gLTEpIHsKICAgICAgY29uc3QgdHlwZTUgPSBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXS50eXBlOwogICAgICBpZiAodHlwZTUgPT09ICJsaW5lRW5kaW5nIiB8fCAvLyBOb3RlOiBtYXJrZG93bi1ycyB1c2VzIGB3aGl0ZXNwYWNlYCBpbnN0ZWFkIG9mIGBsaW5lUHJlZml4YAogICAgICB0eXBlNSA9PT0gImxpbmVQcmVmaXgiKSBpbmRleDItLTsKICAgICAgZWxzZSBicmVhazsKICAgIH0KICAgIGNvbnN0IHRhaWwgPSBpbmRleDIgPiAtMSA/IHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLnR5cGUgOiBudWxsOwogICAgY29uc3QgbmV4dDIgPSB0YWlsID09PSAidGFibGVIZWFkIiB8fCB0YWlsID09PSAidGFibGVSb3ciID8gYm9keVJvd1N0YXJ0IDogaGVhZFJvd0JlZm9yZTsKICAgIGlmIChuZXh0MiA9PT0gYm9keVJvd1N0YXJ0ICYmIHNlbGYyLnBhcnNlci5sYXp5W3NlbGYyLm5vdygpLmxpbmVdKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5leHQyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZFJvd0JlZm9yZShjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigidGFibGVIZWFkIik7CiAgICBlZmZlY3RzLmVudGVyKCJ0YWJsZVJvdyIpOwogICAgcmV0dXJuIGhlYWRSb3dTdGFydChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGhlYWRSb3dTdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAxMjQpIHsKICAgICAgcmV0dXJuIGhlYWRSb3dCcmVhayhjb2RlNCk7CiAgICB9CiAgICBzZWVuID0gdHJ1ZTsKICAgIHNpemVCICs9IDE7CiAgICByZXR1cm4gaGVhZFJvd0JyZWFrKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZFJvd0JyZWFrKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBpZiAoc2l6ZUIgPiAxKSB7CiAgICAgICAgc2l6ZUIgPSAwOwogICAgICAgIHNlbGYyLmludGVycnVwdCA9IHRydWU7CiAgICAgICAgZWZmZWN0cy5leGl0KCJ0YWJsZVJvdyIpOwogICAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyU3RhcnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBoZWFkUm93QnJlYWssICJ3aGl0ZXNwYWNlIikoY29kZTQpOwogICAgfQogICAgc2l6ZUIgKz0gMTsKICAgIGlmIChzZWVuKSB7CiAgICAgIHNlZW4gPSBmYWxzZTsKICAgICAgc2l6ZSArPSAxOwogICAgfQogICAgaWYgKGNvZGU0ID09PSAxMjQpIHsKICAgICAgZWZmZWN0cy5lbnRlcigidGFibGVDZWxsRGl2aWRlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlQ2VsbERpdmlkZXIiKTsKICAgICAgc2VlbiA9IHRydWU7CiAgICAgIHJldHVybiBoZWFkUm93QnJlYWs7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJkYXRhIik7CiAgICByZXR1cm4gaGVhZFJvd0RhdGEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkUm93RGF0YShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSAxMjQgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJkYXRhIik7CiAgICAgIHJldHVybiBoZWFkUm93QnJlYWsoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb2RlNCA9PT0gOTIgPyBoZWFkUm93RXNjYXBlIDogaGVhZFJvd0RhdGE7CiAgfQogIGZ1bmN0aW9uIGhlYWRSb3dFc2NhcGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTIgfHwgY29kZTQgPT09IDEyNCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gaGVhZFJvd0RhdGE7CiAgICB9CiAgICByZXR1cm4gaGVhZFJvd0RhdGEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyU3RhcnQoY29kZTQpIHsKICAgIHNlbGYyLmludGVycnVwdCA9IGZhbHNlOwogICAgaWYgKHNlbGYyLnBhcnNlci5sYXp5W3NlbGYyLm5vdygpLmxpbmVdKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigidGFibGVEZWxpbWl0ZXJSb3ciKTsKICAgIHNlZW4gPSBmYWxzZTsKICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGhlYWREZWxpbWl0ZXJCZWZvcmUsICJsaW5lUHJlZml4Iiwgc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSA/IHZvaWQgMCA6IDQpKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBoZWFkRGVsaW1pdGVyQmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZERlbGltaXRlckJlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSB8fCBjb2RlNCA9PT0gNTgpIHsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJWYWx1ZUJlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDEyNCkgewogICAgICBzZWVuID0gdHJ1ZTsKICAgICAgZWZmZWN0cy5lbnRlcigidGFibGVDZWxsRGl2aWRlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlQ2VsbERpdmlkZXIiKTsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJDZWxsQmVmb3JlOwogICAgfQogICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJOb2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyQ2VsbEJlZm9yZShjb2RlNCkgewogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgaGVhZERlbGltaXRlclZhbHVlQmVmb3JlLCAid2hpdGVzcGFjZSIpKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBoZWFkRGVsaW1pdGVyVmFsdWVCZWZvcmUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyVmFsdWVCZWZvcmUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNTgpIHsKICAgICAgc2l6ZUIgKz0gMTsKICAgICAgc2VlbiA9IHRydWU7CiAgICAgIGVmZmVjdHMuZW50ZXIoInRhYmxlRGVsaW1pdGVyTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFibGVEZWxpbWl0ZXJNYXJrZXIiKTsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJMZWZ0QWxpZ25tZW50QWZ0ZXI7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ1KSB7CiAgICAgIHNpemVCICs9IDE7CiAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyTGVmdEFsaWdubWVudEFmdGVyKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyQ2VsbEFmdGVyKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBoZWFkRGVsaW1pdGVyTm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZERlbGltaXRlckxlZnRBbGlnbm1lbnRBZnRlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmVudGVyKCJ0YWJsZURlbGltaXRlckZpbGxlciIpOwogICAgICByZXR1cm4gaGVhZERlbGltaXRlckZpbGxlcihjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gaGVhZERlbGltaXRlck5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGhlYWREZWxpbWl0ZXJGaWxsZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDUpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJGaWxsZXI7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDU4KSB7CiAgICAgIHNlZW4gPSB0cnVlOwogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlRGVsaW1pdGVyRmlsbGVyIik7CiAgICAgIGVmZmVjdHMuZW50ZXIoInRhYmxlRGVsaW1pdGVyTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFibGVEZWxpbWl0ZXJNYXJrZXIiKTsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJSaWdodEFsaWdubWVudEFmdGVyOwogICAgfQogICAgZWZmZWN0cy5leGl0KCJ0YWJsZURlbGltaXRlckZpbGxlciIpOwogICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJSaWdodEFsaWdubWVudEFmdGVyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZERlbGltaXRlclJpZ2h0QWxpZ25tZW50QWZ0ZXIoY29kZTQpIHsKICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGhlYWREZWxpbWl0ZXJDZWxsQWZ0ZXIsICJ3aGl0ZXNwYWNlIikoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJDZWxsQWZ0ZXIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyQ2VsbEFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDEyNCkgewogICAgICByZXR1cm4gaGVhZERlbGltaXRlckJlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBpZiAoIXNlZW4gfHwgc2l6ZSAhPT0gc2l6ZUIpIHsKICAgICAgICByZXR1cm4gaGVhZERlbGltaXRlck5vayhjb2RlNCk7CiAgICAgIH0KICAgICAgZWZmZWN0cy5leGl0KCJ0YWJsZURlbGltaXRlclJvdyIpOwogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlSGVhZCIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBoZWFkRGVsaW1pdGVyTm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZERlbGltaXRlck5vayhjb2RlNCkgewogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJvZHlSb3dTdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigidGFibGVSb3ciKTsKICAgIHJldHVybiBib2R5Um93QnJlYWsoY29kZTQpOwogIH0KICBmdW5jdGlvbiBib2R5Um93QnJlYWsoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMTI0KSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoInRhYmxlQ2VsbERpdmlkZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJ0YWJsZUNlbGxEaXZpZGVyIik7CiAgICAgIHJldHVybiBib2R5Um93QnJlYWs7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlUm93Iik7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYm9keVJvd0JyZWFrLCAid2hpdGVzcGFjZSIpKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImRhdGEiKTsKICAgIHJldHVybiBib2R5Um93RGF0YShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJvZHlSb3dEYXRhKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDEyNCB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImRhdGEiKTsKICAgICAgcmV0dXJuIGJvZHlSb3dCcmVhayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvZGU0ID09PSA5MiA/IGJvZHlSb3dFc2NhcGUgOiBib2R5Um93RGF0YTsKICB9CiAgZnVuY3Rpb24gYm9keVJvd0VzY2FwZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MiB8fCBjb2RlNCA9PT0gMTI0KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBib2R5Um93RGF0YTsKICAgIH0KICAgIHJldHVybiBib2R5Um93RGF0YShjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHJlc29sdmVUYWJsZShldmVudHMsIGNvbnRleHQyKSB7CiAgbGV0IGluZGV4MiA9IC0xOwogIGxldCBpbkZpcnN0Q2VsbEF3YWl0aW5nUGlwZSA9IHRydWU7CiAgbGV0IHJvd0tpbmQgPSAwOwogIGxldCBsYXN0Q2VsbCA9IFswLCAwLCAwLCAwXTsKICBsZXQgY2VsbDIgPSBbMCwgMCwgMCwgMF07CiAgbGV0IGFmdGVySGVhZEF3YWl0aW5nRmlyc3RCb2R5Um93ID0gZmFsc2U7CiAgbGV0IGxhc3RUYWJsZUVuZCA9IDA7CiAgbGV0IGN1cnJlbnRUYWJsZTsKICBsZXQgY3VycmVudEJvZHk7CiAgbGV0IGN1cnJlbnRDZWxsOwogIGNvbnN0IG1hcDcgPSBuZXcgRWRpdE1hcCgpOwogIHdoaWxlICgrK2luZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2luZGV4Ml07CiAgICBjb25zdCB0b2tlbiA9IGV2ZW50WzFdOwogICAgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiKSB7CiAgICAgIGlmICh0b2tlbi50eXBlID09PSAidGFibGVIZWFkIikgewogICAgICAgIGFmdGVySGVhZEF3YWl0aW5nRmlyc3RCb2R5Um93ID0gZmFsc2U7CiAgICAgICAgaWYgKGxhc3RUYWJsZUVuZCAhPT0gMCkgewogICAgICAgICAgZmx1c2hUYWJsZUVuZChtYXA3LCBjb250ZXh0MiwgbGFzdFRhYmxlRW5kLCBjdXJyZW50VGFibGUsIGN1cnJlbnRCb2R5KTsKICAgICAgICAgIGN1cnJlbnRCb2R5ID0gdm9pZCAwOwogICAgICAgICAgbGFzdFRhYmxlRW5kID0gMDsKICAgICAgICB9CiAgICAgICAgY3VycmVudFRhYmxlID0gewogICAgICAgICAgdHlwZTogInRhYmxlIiwKICAgICAgICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCB0b2tlbi5zdGFydCksCiAgICAgICAgICAvLyBOb3RlOiBjb3JyZWN0IGVuZCBpcyBzZXQgbGF0ZXIuCiAgICAgICAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIHRva2VuLmVuZCkKICAgICAgICB9OwogICAgICAgIG1hcDcuYWRkKGluZGV4MiwgMCwgW1siZW50ZXIiLCBjdXJyZW50VGFibGUsIGNvbnRleHQyXV0pOwogICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09ICJ0YWJsZVJvdyIgfHwgdG9rZW4udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyUm93IikgewogICAgICAgIGluRmlyc3RDZWxsQXdhaXRpbmdQaXBlID0gdHJ1ZTsKICAgICAgICBjdXJyZW50Q2VsbCA9IHZvaWQgMDsKICAgICAgICBsYXN0Q2VsbCA9IFswLCAwLCAwLCAwXTsKICAgICAgICBjZWxsMiA9IFswLCBpbmRleDIgKyAxLCAwLCAwXTsKICAgICAgICBpZiAoYWZ0ZXJIZWFkQXdhaXRpbmdGaXJzdEJvZHlSb3cpIHsKICAgICAgICAgIGFmdGVySGVhZEF3YWl0aW5nRmlyc3RCb2R5Um93ID0gZmFsc2U7CiAgICAgICAgICBjdXJyZW50Qm9keSA9IHsKICAgICAgICAgICAgdHlwZTogInRhYmxlQm9keSIsCiAgICAgICAgICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCB0b2tlbi5zdGFydCksCiAgICAgICAgICAgIC8vIE5vdGU6IGNvcnJlY3QgZW5kIGlzIHNldCBsYXRlci4KICAgICAgICAgICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCB0b2tlbi5lbmQpCiAgICAgICAgICB9OwogICAgICAgICAgbWFwNy5hZGQoaW5kZXgyLCAwLCBbWyJlbnRlciIsIGN1cnJlbnRCb2R5LCBjb250ZXh0Ml1dKTsKICAgICAgICB9CiAgICAgICAgcm93S2luZCA9IHRva2VuLnR5cGUgPT09ICJ0YWJsZURlbGltaXRlclJvdyIgPyAyIDogY3VycmVudEJvZHkgPyAzIDogMTsKICAgICAgfSBlbHNlIGlmIChyb3dLaW5kICYmICh0b2tlbi50eXBlID09PSAiZGF0YSIgfHwgdG9rZW4udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyTWFya2VyIiB8fCB0b2tlbi50eXBlID09PSAidGFibGVEZWxpbWl0ZXJGaWxsZXIiKSkgewogICAgICAgIGluRmlyc3RDZWxsQXdhaXRpbmdQaXBlID0gZmFsc2U7CiAgICAgICAgaWYgKGNlbGwyWzJdID09PSAwKSB7CiAgICAgICAgICBpZiAobGFzdENlbGxbMV0gIT09IDApIHsKICAgICAgICAgICAgY2VsbDJbMF0gPSBjZWxsMlsxXTsKICAgICAgICAgICAgY3VycmVudENlbGwgPSBmbHVzaENlbGwobWFwNywgY29udGV4dDIsIGxhc3RDZWxsLCByb3dLaW5kLCB2b2lkIDAsIGN1cnJlbnRDZWxsKTsKICAgICAgICAgICAgbGFzdENlbGwgPSBbMCwgMCwgMCwgMF07CiAgICAgICAgICB9CiAgICAgICAgICBjZWxsMlsyXSA9IGluZGV4MjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gInRhYmxlQ2VsbERpdmlkZXIiKSB7CiAgICAgICAgaWYgKGluRmlyc3RDZWxsQXdhaXRpbmdQaXBlKSB7CiAgICAgICAgICBpbkZpcnN0Q2VsbEF3YWl0aW5nUGlwZSA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAobGFzdENlbGxbMV0gIT09IDApIHsKICAgICAgICAgICAgY2VsbDJbMF0gPSBjZWxsMlsxXTsKICAgICAgICAgICAgY3VycmVudENlbGwgPSBmbHVzaENlbGwobWFwNywgY29udGV4dDIsIGxhc3RDZWxsLCByb3dLaW5kLCB2b2lkIDAsIGN1cnJlbnRDZWxsKTsKICAgICAgICAgIH0KICAgICAgICAgIGxhc3RDZWxsID0gY2VsbDI7CiAgICAgICAgICBjZWxsMiA9IFtsYXN0Q2VsbFsxXSwgaW5kZXgyLCAwLCAwXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gInRhYmxlSGVhZCIpIHsKICAgICAgYWZ0ZXJIZWFkQXdhaXRpbmdGaXJzdEJvZHlSb3cgPSB0cnVlOwogICAgICBsYXN0VGFibGVFbmQgPSBpbmRleDI7CiAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09ICJ0YWJsZVJvdyIgfHwgdG9rZW4udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyUm93IikgewogICAgICBsYXN0VGFibGVFbmQgPSBpbmRleDI7CiAgICAgIGlmIChsYXN0Q2VsbFsxXSAhPT0gMCkgewogICAgICAgIGNlbGwyWzBdID0gY2VsbDJbMV07CiAgICAgICAgY3VycmVudENlbGwgPSBmbHVzaENlbGwobWFwNywgY29udGV4dDIsIGxhc3RDZWxsLCByb3dLaW5kLCBpbmRleDIsIGN1cnJlbnRDZWxsKTsKICAgICAgfSBlbHNlIGlmIChjZWxsMlsxXSAhPT0gMCkgewogICAgICAgIGN1cnJlbnRDZWxsID0gZmx1c2hDZWxsKG1hcDcsIGNvbnRleHQyLCBjZWxsMiwgcm93S2luZCwgaW5kZXgyLCBjdXJyZW50Q2VsbCk7CiAgICAgIH0KICAgICAgcm93S2luZCA9IDA7CiAgICB9IGVsc2UgaWYgKHJvd0tpbmQgJiYgKHRva2VuLnR5cGUgPT09ICJkYXRhIiB8fCB0b2tlbi50eXBlID09PSAidGFibGVEZWxpbWl0ZXJNYXJrZXIiIHx8IHRva2VuLnR5cGUgPT09ICJ0YWJsZURlbGltaXRlckZpbGxlciIpKSB7CiAgICAgIGNlbGwyWzNdID0gaW5kZXgyOwogICAgfQogIH0KICBpZiAobGFzdFRhYmxlRW5kICE9PSAwKSB7CiAgICBmbHVzaFRhYmxlRW5kKG1hcDcsIGNvbnRleHQyLCBsYXN0VGFibGVFbmQsIGN1cnJlbnRUYWJsZSwgY3VycmVudEJvZHkpOwogIH0KICBtYXA3LmNvbnN1bWUoY29udGV4dDIuZXZlbnRzKTsKICBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBjb250ZXh0Mi5ldmVudHMubGVuZ3RoKSB7CiAgICBjb25zdCBldmVudCA9IGNvbnRleHQyLmV2ZW50c1tpbmRleDJdOwogICAgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiICYmIGV2ZW50WzFdLnR5cGUgPT09ICJ0YWJsZSIpIHsKICAgICAgZXZlbnRbMV0uX2FsaWduID0gZ2ZtVGFibGVBbGlnbihjb250ZXh0Mi5ldmVudHMsIGluZGV4Mik7CiAgICB9CiAgfQogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gZmx1c2hDZWxsKG1hcDcsIGNvbnRleHQyLCByYW5nZTIsIHJvd0tpbmQsIHJvd0VuZCwgcHJldmlvdXNDZWxsKSB7CiAgY29uc3QgZ3JvdXBOYW1lID0gcm93S2luZCA9PT0gMSA/ICJ0YWJsZUhlYWRlciIgOiByb3dLaW5kID09PSAyID8gInRhYmxlRGVsaW1pdGVyIiA6ICJ0YWJsZURhdGEiOwogIGNvbnN0IHZhbHVlTmFtZSA9ICJ0YWJsZUNvbnRlbnQiOwogIGlmIChyYW5nZTJbMF0gIT09IDApIHsKICAgIHByZXZpb3VzQ2VsbC5lbmQgPSBPYmplY3QuYXNzaWduKHt9LCBnZXRQb2ludChjb250ZXh0Mi5ldmVudHMsIHJhbmdlMlswXSkpOwogICAgbWFwNy5hZGQocmFuZ2UyWzBdLCAwLCBbWyJleGl0IiwgcHJldmlvdXNDZWxsLCBjb250ZXh0Ml1dKTsKICB9CiAgY29uc3Qgbm93MiA9IGdldFBvaW50KGNvbnRleHQyLmV2ZW50cywgcmFuZ2UyWzFdKTsKICBwcmV2aW91c0NlbGwgPSB7CiAgICB0eXBlOiBncm91cE5hbWUsCiAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgbm93MiksCiAgICAvLyBOb3RlOiBjb3JyZWN0IGVuZCBpcyBzZXQgbGF0ZXIuCiAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIG5vdzIpCiAgfTsKICBtYXA3LmFkZChyYW5nZTJbMV0sIDAsIFtbImVudGVyIiwgcHJldmlvdXNDZWxsLCBjb250ZXh0Ml1dKTsKICBpZiAocmFuZ2UyWzJdICE9PSAwKSB7CiAgICBjb25zdCByZWxhdGVkU3RhcnQgPSBnZXRQb2ludChjb250ZXh0Mi5ldmVudHMsIHJhbmdlMlsyXSk7CiAgICBjb25zdCByZWxhdGVkRW5kID0gZ2V0UG9pbnQoY29udGV4dDIuZXZlbnRzLCByYW5nZTJbM10pOwogICAgY29uc3QgdmFsdWVUb2tlbiA9IHsKICAgICAgdHlwZTogdmFsdWVOYW1lLAogICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgcmVsYXRlZFN0YXJ0KSwKICAgICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCByZWxhdGVkRW5kKQogICAgfTsKICAgIG1hcDcuYWRkKHJhbmdlMlsyXSwgMCwgW1siZW50ZXIiLCB2YWx1ZVRva2VuLCBjb250ZXh0Ml1dKTsKICAgIGlmIChyb3dLaW5kICE9PSAyKSB7CiAgICAgIGNvbnN0IHN0YXJ0ID0gY29udGV4dDIuZXZlbnRzW3JhbmdlMlsyXV07CiAgICAgIGNvbnN0IGVuZDMgPSBjb250ZXh0Mi5ldmVudHNbcmFuZ2UyWzNdXTsKICAgICAgc3RhcnRbMV0uZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgZW5kM1sxXS5lbmQpOwogICAgICBzdGFydFsxXS50eXBlID0gImNodW5rVGV4dCI7CiAgICAgIHN0YXJ0WzFdLmNvbnRlbnRUeXBlID0gInRleHQiOwogICAgICBpZiAocmFuZ2UyWzNdID4gcmFuZ2UyWzJdICsgMSkgewogICAgICAgIGNvbnN0IGE1ID0gcmFuZ2UyWzJdICsgMTsKICAgICAgICBjb25zdCBiNSA9IHJhbmdlMlszXSAtIHJhbmdlMlsyXSAtIDE7CiAgICAgICAgbWFwNy5hZGQoYTUsIGI1LCBbXSk7CiAgICAgIH0KICAgIH0KICAgIG1hcDcuYWRkKHJhbmdlMlszXSArIDEsIDAsIFtbImV4aXQiLCB2YWx1ZVRva2VuLCBjb250ZXh0Ml1dKTsKICB9CiAgaWYgKHJvd0VuZCAhPT0gdm9pZCAwKSB7CiAgICBwcmV2aW91c0NlbGwuZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgZ2V0UG9pbnQoY29udGV4dDIuZXZlbnRzLCByb3dFbmQpKTsKICAgIG1hcDcuYWRkKHJvd0VuZCwgMCwgW1siZXhpdCIsIHByZXZpb3VzQ2VsbCwgY29udGV4dDJdXSk7CiAgICBwcmV2aW91c0NlbGwgPSB2b2lkIDA7CiAgfQogIHJldHVybiBwcmV2aW91c0NlbGw7Cn0KZnVuY3Rpb24gZmx1c2hUYWJsZUVuZChtYXA3LCBjb250ZXh0MiwgaW5kZXgyLCB0YWJsZTIsIHRhYmxlQm9keSkgewogIGNvbnN0IGV4aXRzID0gW107CiAgY29uc3QgcmVsYXRlZCA9IGdldFBvaW50KGNvbnRleHQyLmV2ZW50cywgaW5kZXgyKTsKICBpZiAodGFibGVCb2R5KSB7CiAgICB0YWJsZUJvZHkuZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgcmVsYXRlZCk7CiAgICBleGl0cy5wdXNoKFsiZXhpdCIsIHRhYmxlQm9keSwgY29udGV4dDJdKTsKICB9CiAgdGFibGUyLmVuZCA9IE9iamVjdC5hc3NpZ24oe30sIHJlbGF0ZWQpOwogIGV4aXRzLnB1c2goWyJleGl0IiwgdGFibGUyLCBjb250ZXh0Ml0pOwogIG1hcDcuYWRkKGluZGV4MiArIDEsIDAsIGV4aXRzKTsKfQpmdW5jdGlvbiBnZXRQb2ludChldmVudHMsIGluZGV4MikgewogIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2luZGV4Ml07CiAgY29uc3Qgc2lkZSA9IGV2ZW50WzBdID09PSAiZW50ZXIiID8gInN0YXJ0IiA6ICJlbmQiOwogIHJldHVybiBldmVudFsxXVtzaWRlXTsKfQp2YXIgaW5pdF9zeW50YXg0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9zeW50YXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfZWRpdF9tYXAoKTsKICAgIGluaXRfaW5mZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZS9pbmRleC5qcwp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV90YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2h0bWw1KCk7CiAgICBpbml0X3N5bnRheDQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhZ2ZpbHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBnZm1UYWdmaWx0ZXJIdG1sKCkgewogIHJldHVybiB7CiAgICBleGl0OiB7CiAgICAgIGh0bWxGbG93RGF0YSh0b2tlbikgewogICAgICAgIGV4aXRIdG1sRGF0YS5jYWxsKHRoaXMsIHRva2VuLCByZUZsb3cpOwogICAgICB9LAogICAgICBodG1sVGV4dERhdGEodG9rZW4pIHsKICAgICAgICBleGl0SHRtbERhdGEuY2FsbCh0aGlzLCB0b2tlbiwgcmVUZXh0KTsKICAgICAgfQogICAgfQogIH07Cn0KZnVuY3Rpb24gZXhpdEh0bWxEYXRhKHRva2VuLCBmaWx0ZXIyKSB7CiAgbGV0IHZhbHVlMiA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dEYW5nZXJvdXNIdG1sKSB7CiAgICB2YWx1ZTIgPSB2YWx1ZTIucmVwbGFjZShmaWx0ZXIyLCAiJmx0OyQxJDIiKTsKICB9CiAgdGhpcy5yYXcodGhpcy5lbmNvZGUodmFsdWUyKSk7Cn0KdmFyIHJlRmxvdywgcmVUZXh0Owp2YXIgaW5pdF9saWIxOSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhZ2ZpbHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyL2xpYi9pbmRleC5qcyIoKSB7CiAgICByZUZsb3cgPSAvPChcLz8pKGlmcmFtZXxub2VtYmVkfG5vZnJhbWVzfHBsYWludGV4dHxzY3JpcHR8c3R5bGV8dGl0bGV8dGV4dGFyZWF8eG1wKSg/PVtcdFxuXGZcciAvPl0pL2dpOwogICAgcmVUZXh0ID0gbmV3IFJlZ0V4cCgiXiIgKyByZUZsb3cuc291cmNlLCAiaSIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWdmaWx0ZXIvaW5kZXguanMKdmFyIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fdGFnZmlsdGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWdmaWx0ZXIvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxOSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW1AMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtL2xpYi9odG1sLmpzCmZ1bmN0aW9uIGdmbVRhc2tMaXN0SXRlbUh0bWwoKSB7CiAgcmV0dXJuIHsKICAgIGVudGVyOiB7CiAgICAgIHRhc2tMaXN0Q2hlY2soKSB7CiAgICAgICAgdGhpcy50YWcoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgZGlzYWJsZWQ9IiIgJyk7CiAgICAgIH0KICAgIH0sCiAgICBleGl0OiB7CiAgICAgIHRhc2tMaXN0Q2hlY2soKSB7CiAgICAgICAgdGhpcy50YWcoIi8+Iik7CiAgICAgIH0sCiAgICAgIHRhc2tMaXN0Q2hlY2tWYWx1ZUNoZWNrZWQoKSB7CiAgICAgICAgdGhpcy50YWcoJ2NoZWNrZWQ9IiIgJyk7CiAgICAgIH0KICAgIH0KICB9Owp9CnZhciBpbml0X2h0bWw2ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW1AMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtL2xpYi9odG1sLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbS9saWIvc3ludGF4LmpzCmZ1bmN0aW9uIGdmbVRhc2tMaXN0SXRlbSgpIHsKICByZXR1cm4gewogICAgdGV4dDogewogICAgICBbOTFdOiB0YXNrbGlzdENoZWNrCiAgICB9CiAgfTsKfQpmdW5jdGlvbiB0b2tlbml6ZVRhc2tsaXN0Q2hlY2soZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIG9wZW47CiAgZnVuY3Rpb24gb3Blbihjb2RlNCkgewogICAgaWYgKAogICAgICAvLyBFeGl0IGlmIHRoZXJl4oCZcyBzdHVmZiBiZWZvcmUuCiAgICAgIHNlbGYyLnByZXZpb3VzICE9PSBudWxsIHx8IC8vIEV4aXQgaWYgbm90IGluIHRoZSBmaXJzdCBjb250ZW50IHRoYXQgaXMgdGhlIGZpcnN0IGNoaWxkIG9mIGEgbGlzdAogICAgICAvLyBpdGVtLgogICAgICAhc2VsZjIuX2dmbVRhc2tsaXN0Rmlyc3RDb250ZW50T2ZMaXN0SXRlbQogICAgKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigidGFza0xpc3RDaGVjayIpOwogICAgZWZmZWN0cy5lbnRlcigidGFza0xpc3RDaGVja01hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgidGFza0xpc3RDaGVja01hcmtlciIpOwogICAgcmV0dXJuIGluc2lkZTsKICB9CiAgZnVuY3Rpb24gaW5zaWRlKGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigidGFza0xpc3RDaGVja1ZhbHVlVW5jaGVja2VkIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFza0xpc3RDaGVja1ZhbHVlVW5jaGVja2VkIik7CiAgICAgIHJldHVybiBjbG9zZTc7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDg4IHx8IGNvZGU0ID09PSAxMjApIHsKICAgICAgZWZmZWN0cy5lbnRlcigidGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZCIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInRhc2tMaXN0Q2hlY2tWYWx1ZUNoZWNrZWQiKTsKICAgICAgcmV0dXJuIGNsb3NlNzsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjbG9zZTcoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5lbnRlcigidGFza0xpc3RDaGVja01hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInRhc2tMaXN0Q2hlY2tNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5leGl0KCJ0YXNrTGlzdENoZWNrIik7CiAgICAgIHJldHVybiBhZnRlcjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGVmZmVjdHMuY2hlY2soewogICAgICAgIHRva2VuaXplOiBzcGFjZVRoZW5Ob25TcGFjZQogICAgICB9LCBvazMsIG5vaykoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHNwYWNlVGhlbk5vblNwYWNlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlciwgIndoaXRlc3BhY2UiKTsKICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSBudWxsID8gbm9rKGNvZGU0KSA6IG9rMyhjb2RlNCk7CiAgfQp9CnZhciB0YXNrbGlzdENoZWNrOwp2YXIgaW5pdF9zeW50YXg1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW1AMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtL2xpYi9zeW50YXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIHRhc2tsaXN0Q2hlY2sgPSB7CiAgICAgIG5hbWU6ICJ0YXNrbGlzdENoZWNrIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplVGFza2xpc3RDaGVjawogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbS9pbmRleC5qcwp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV90YXNrX2xpc3RfaXRlbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2h0bWw2KCk7CiAgICBpbml0X3N5bnRheDUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtQDMuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS9pbmRleC5qcwpmdW5jdGlvbiBnZm0ob3B0aW9ucykgewogIHJldHVybiBjb21iaW5lRXh0ZW5zaW9ucyhbCiAgICBnZm1BdXRvbGlua0xpdGVyYWwoKSwKICAgIGdmbUZvb3Rub3RlKCksCiAgICBnZm1TdHJpa2V0aHJvdWdoKG9wdGlvbnMpLAogICAgZ2ZtVGFibGUoKSwKICAgIGdmbVRhc2tMaXN0SXRlbSgpCiAgXSk7Cn0KZnVuY3Rpb24gZ2ZtSHRtbChvcHRpb25zKSB7CiAgcmV0dXJuIGNvbWJpbmVIdG1sRXh0ZW5zaW9ucyhbCiAgICBnZm1BdXRvbGlua0xpdGVyYWxIdG1sKCksCiAgICBnZm1Gb290bm90ZUh0bWwob3B0aW9ucyksCiAgICBnZm1TdHJpa2V0aHJvdWdoSHRtbCgpLAogICAgZ2ZtVGFibGVIdG1sKCksCiAgICBnZm1UYWdmaWx0ZXJIdG1sKCksCiAgICBnZm1UYXNrTGlzdEl0ZW1IdG1sKCkKICBdKTsKfQp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtQDMuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NvbWJpbmVfZXh0ZW5zaW9ucygpOwogICAgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV9hdXRvbGlua19saXRlcmFsKCk7CiAgICBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX2Zvb3Rub3RlKCk7CiAgICBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX3N0cmlrZXRocm91Z2goKTsKICAgIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fdGFibGUoKTsKICAgIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fdGFnZmlsdGVyKCk7CiAgICBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX3Rhc2tfbGlzdF9pdGVtKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstZ2ZtQDQuMC4xL25vZGVfbW9kdWxlcy9yZW1hcmstZ2ZtL2xpYi9pbmRleC5qcwpmdW5jdGlvbiByZW1hcmtHZm0ob3B0aW9ucykgewogIGNvbnN0IHNlbGYyID0gKAogICAgLyoqIEB0eXBlIHtQcm9jZXNzb3I8Um9vdD59ICovCiAgICB0aGlzCiAgKTsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwgZW1wdHlPcHRpb25zMzsKICBjb25zdCBkYXRhID0gc2VsZjIuZGF0YSgpOwogIGNvbnN0IG1pY3JvbWFya0V4dGVuc2lvbnMgPSBkYXRhLm1pY3JvbWFya0V4dGVuc2lvbnMgfHwgKGRhdGEubWljcm9tYXJrRXh0ZW5zaW9ucyA9IFtdKTsKICBjb25zdCBmcm9tTWFya2Rvd25FeHRlbnNpb25zID0gZGF0YS5mcm9tTWFya2Rvd25FeHRlbnNpb25zIHx8IChkYXRhLmZyb21NYXJrZG93bkV4dGVuc2lvbnMgPSBbXSk7CiAgY29uc3QgdG9NYXJrZG93bkV4dGVuc2lvbnMgPSBkYXRhLnRvTWFya2Rvd25FeHRlbnNpb25zIHx8IChkYXRhLnRvTWFya2Rvd25FeHRlbnNpb25zID0gW10pOwogIG1pY3JvbWFya0V4dGVuc2lvbnMucHVzaChnZm0oc2V0dGluZ3MpKTsKICBmcm9tTWFya2Rvd25FeHRlbnNpb25zLnB1c2goZ2ZtRnJvbU1hcmtkb3duKCkpOwogIHRvTWFya2Rvd25FeHRlbnNpb25zLnB1c2goZ2ZtVG9NYXJrZG93bihzZXR0aW5ncykpOwp9CnZhciBlbXB0eU9wdGlvbnMzOwp2YXIgaW5pdF9saWIyMCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1nZm1ANC4wLjEvbm9kZV9tb2R1bGVzL3JlbWFyay1nZm0vbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWRhc3RfdXRpbF9nZm0oKTsKICAgIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm0oKTsKICAgIGVtcHR5T3B0aW9uczMgPSB7fTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1nZm1ANC4wLjEvbm9kZV9tb2R1bGVzL3JlbWFyay1nZm0vaW5kZXguanMKdmFyIGluaXRfcmVtYXJrX2dmbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1nZm1ANC4wLjEvbm9kZV9tb2R1bGVzL3JlbWFyay1nZm0vaW5kZXguanMiKCkgewogICAgaW5pdF9saWIyMCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2NvbXBpbGUuanMKZnVuY3Rpb24gY29tcGlsZShvcHRpb25zKSB7CiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9OwogIGxldCB0YWdzID0gdHJ1ZTsKICBjb25zdCBkZWZpbml0aW9ucyA9IHt9OwogIGNvbnN0IGJ1ZmZlcnMgPSBbW11dOwogIGNvbnN0IG1lZGlhU3RhY2sgPSBbXTsKICBjb25zdCB0aWdodFN0YWNrID0gW107CiAgY29uc3QgZGVmYXVsdEhhbmRsZXJzID0gewogICAgZW50ZXI6IHsKICAgICAgYmxvY2tRdW90ZTogb25lbnRlcmJsb2NrcXVvdGUsCiAgICAgIGNvZGVGZW5jZWQ6IG9uZW50ZXJjb2RlZmVuY2VkLAogICAgICBjb2RlRmVuY2VkRmVuY2VJbmZvOiBidWZmZXIyLAogICAgICBjb2RlRmVuY2VkRmVuY2VNZXRhOiBidWZmZXIyLAogICAgICBjb2RlSW5kZW50ZWQ6IG9uZW50ZXJjb2RlaW5kZW50ZWQsCiAgICAgIGNvZGVUZXh0OiBvbmVudGVyY29kZXRleHQsCiAgICAgIGNvbnRlbnQ6IG9uZW50ZXJjb250ZW50LAogICAgICBkZWZpbml0aW9uOiBvbmVudGVyZGVmaW5pdGlvbiwKICAgICAgZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOiBvbmVudGVyZGVmaW5pdGlvbmRlc3RpbmF0aW9uc3RyaW5nLAogICAgICBkZWZpbml0aW9uTGFiZWxTdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIGRlZmluaXRpb25UaXRsZVN0cmluZzogYnVmZmVyMiwKICAgICAgZW1waGFzaXM6IG9uZW50ZXJlbXBoYXNpcywKICAgICAgaHRtbEZsb3c6IG9uZW50ZXJodG1sZmxvdywKICAgICAgaHRtbFRleHQ6IG9uZW50ZXJodG1sLAogICAgICBpbWFnZTogb25lbnRlcmltYWdlLAogICAgICBsYWJlbDogYnVmZmVyMiwKICAgICAgbGluazogb25lbnRlcmxpbmssCiAgICAgIGxpc3RJdGVtTWFya2VyOiBvbmVudGVybGlzdGl0ZW1tYXJrZXIsCiAgICAgIGxpc3RJdGVtVmFsdWU6IG9uZW50ZXJsaXN0aXRlbXZhbHVlLAogICAgICBsaXN0T3JkZXJlZDogb25lbnRlcmxpc3RvcmRlcmVkLAogICAgICBsaXN0VW5vcmRlcmVkOiBvbmVudGVybGlzdHVub3JkZXJlZCwKICAgICAgcGFyYWdyYXBoOiBvbmVudGVycGFyYWdyYXBoLAogICAgICByZWZlcmVuY2U6IGJ1ZmZlcjIsCiAgICAgIHJlc291cmNlOiBvbmVudGVycmVzb3VyY2UsCiAgICAgIHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6IG9uZW50ZXJyZXNvdXJjZWRlc3RpbmF0aW9uc3RyaW5nLAogICAgICByZXNvdXJjZVRpdGxlU3RyaW5nOiBidWZmZXIyLAogICAgICBzZXRleHRIZWFkaW5nOiBvbmVudGVyc2V0ZXh0aGVhZGluZywKICAgICAgc3Ryb25nOiBvbmVudGVyc3Ryb25nCiAgICB9LAogICAgZXhpdDogewogICAgICBhdHhIZWFkaW5nOiBvbmV4aXRhdHhoZWFkaW5nLAogICAgICBhdHhIZWFkaW5nU2VxdWVuY2U6IG9uZXhpdGF0eGhlYWRpbmdzZXF1ZW5jZSwKICAgICAgYXV0b2xpbmtFbWFpbDogb25leGl0YXV0b2xpbmtlbWFpbCwKICAgICAgYXV0b2xpbmtQcm90b2NvbDogb25leGl0YXV0b2xpbmtwcm90b2NvbCwKICAgICAgYmxvY2tRdW90ZTogb25leGl0YmxvY2txdW90ZSwKICAgICAgY2hhcmFjdGVyRXNjYXBlVmFsdWU6IG9uZXhpdGRhdGEsCiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsOiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2VtYXJrZXIsCiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWM6IG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlciwKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWU6IG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZXZhbHVlLAogICAgICBjb2RlRmVuY2VkOiBvbmV4aXRmbG93Y29kZSwKICAgICAgY29kZUZlbmNlZEZlbmNlOiBvbmV4aXRjb2RlZmVuY2VkZmVuY2UsCiAgICAgIGNvZGVGZW5jZWRGZW5jZUluZm86IG9uZXhpdGNvZGVmZW5jZWRmZW5jZWluZm8sCiAgICAgIGNvZGVGZW5jZWRGZW5jZU1ldGE6IG9ucmVzdW1lZHJvcCwKICAgICAgY29kZUZsb3dWYWx1ZTogb25leGl0Y29kZWZsb3d2YWx1ZSwKICAgICAgY29kZUluZGVudGVkOiBvbmV4aXRmbG93Y29kZSwKICAgICAgY29kZVRleHQ6IG9uZXhpdGNvZGV0ZXh0LAogICAgICBjb2RlVGV4dERhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGRhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGRlZmluaXRpb246IG9uZXhpdGRlZmluaXRpb24sCiAgICAgIGRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZzogb25leGl0ZGVmaW5pdGlvbmRlc3RpbmF0aW9uc3RyaW5nLAogICAgICBkZWZpbml0aW9uTGFiZWxTdHJpbmc6IG9uZXhpdGRlZmluaXRpb25sYWJlbHN0cmluZywKICAgICAgZGVmaW5pdGlvblRpdGxlU3RyaW5nOiBvbmV4aXRkZWZpbml0aW9udGl0bGVzdHJpbmcsCiAgICAgIGVtcGhhc2lzOiBvbmV4aXRlbXBoYXNpcywKICAgICAgaGFyZEJyZWFrRXNjYXBlOiBvbmV4aXRoYXJkYnJlYWssCiAgICAgIGhhcmRCcmVha1RyYWlsaW5nOiBvbmV4aXRoYXJkYnJlYWssCiAgICAgIGh0bWxGbG93OiBvbmV4aXRodG1sLAogICAgICBodG1sRmxvd0RhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGh0bWxUZXh0OiBvbmV4aXRodG1sLAogICAgICBodG1sVGV4dERhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGltYWdlOiBvbmV4aXRtZWRpYSwKICAgICAgbGFiZWw6IG9uZXhpdGxhYmVsLAogICAgICBsYWJlbFRleHQ6IG9uZXhpdGxhYmVsdGV4dCwKICAgICAgbGluZUVuZGluZzogb25leGl0bGluZWVuZGluZywKICAgICAgbGluazogb25leGl0bWVkaWEsCiAgICAgIGxpc3RPcmRlcmVkOiBvbmV4aXRsaXN0b3JkZXJlZCwKICAgICAgbGlzdFVub3JkZXJlZDogb25leGl0bGlzdHVub3JkZXJlZCwKICAgICAgcGFyYWdyYXBoOiBvbmV4aXRwYXJhZ3JhcGgsCiAgICAgIHJlZmVyZW5jZTogb25yZXN1bWVkcm9wLAogICAgICByZWZlcmVuY2VTdHJpbmc6IG9uZXhpdHJlZmVyZW5jZXN0cmluZywKICAgICAgcmVzb3VyY2U6IG9ucmVzdW1lZHJvcCwKICAgICAgcmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzogb25leGl0cmVzb3VyY2VkZXN0aW5hdGlvbnN0cmluZywKICAgICAgcmVzb3VyY2VUaXRsZVN0cmluZzogb25leGl0cmVzb3VyY2V0aXRsZXN0cmluZywKICAgICAgc2V0ZXh0SGVhZGluZzogb25leGl0c2V0ZXh0aGVhZGluZywKICAgICAgc2V0ZXh0SGVhZGluZ0xpbmVTZXF1ZW5jZTogb25leGl0c2V0ZXh0aGVhZGluZ2xpbmVzZXF1ZW5jZSwKICAgICAgc2V0ZXh0SGVhZGluZ1RleHQ6IG9uZXhpdHNldGV4dGhlYWRpbmd0ZXh0LAogICAgICBzdHJvbmc6IG9uZXhpdHN0cm9uZywKICAgICAgdGhlbWF0aWNCcmVhazogb25leGl0dGhlbWF0aWNicmVhawogICAgfQogIH07CiAgY29uc3QgaGFuZGxlcnMyID0gKAogICAgLyoqIEB0eXBlIHtOb3JtYWxpemVkSHRtbEV4dGVuc2lvbn0gKi8KICAgIGNvbWJpbmVIdG1sRXh0ZW5zaW9ucyhbZGVmYXVsdEhhbmRsZXJzLCAuLi5zZXR0aW5ncy5odG1sRXh0ZW5zaW9ucyB8fCBbXV0pCiAgKTsKICBjb25zdCBkYXRhID0gewogICAgZGVmaW5pdGlvbnMsCiAgICB0aWdodFN0YWNrCiAgfTsKICBjb25zdCBjb250ZXh0MiA9IHsKICAgIGJ1ZmZlcjogYnVmZmVyMiwKICAgIGVuY29kZTogZW5jb2RlMiwKICAgIGdldERhdGEsCiAgICBsaW5lRW5kaW5nSWZOZWVkZWQsCiAgICBvcHRpb25zOiBzZXR0aW5ncywKICAgIHJhdzogcmF3MiwKICAgIHJlc3VtZSwKICAgIHNldERhdGEsCiAgICB0YWcKICB9OwogIGxldCBsaW5lRW5kaW5nU3R5bGUgPSBzZXR0aW5ncy5kZWZhdWx0TGluZUVuZGluZzsKICByZXR1cm4gY29tcGlsZTI7CiAgZnVuY3Rpb24gY29tcGlsZTIoZXZlbnRzKSB7CiAgICBsZXQgaW5kZXgyID0gLTE7CiAgICBsZXQgc3RhcnQgPSAwOwogICAgY29uc3QgbGlzdFN0YWNrID0gW107CiAgICBsZXQgaGVhZDIgPSBbXTsKICAgIGxldCBib2R5MyA9IFtdOwogICAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgICBpZiAoIWxpbmVFbmRpbmdTdHlsZSAmJiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImxpbmVFbmRpbmciIHx8IGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nQmxhbmsiKSkgewogICAgICAgIGxpbmVFbmRpbmdTdHlsZSA9IC8qKiBAdHlwZSB7TGluZUVuZGluZ30gKi8KICAgICAgICBldmVudHNbaW5kZXgyXVsyXS5zbGljZVNlcmlhbGl6ZShldmVudHNbaW5kZXgyXVsxXSk7CiAgICAgIH0KICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJsaXN0T3JkZXJlZCIgfHwgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImxpc3RVbm9yZGVyZWQiKSB7CiAgICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzBdID09PSAiZW50ZXIiKSB7CiAgICAgICAgICBsaXN0U3RhY2sucHVzaChpbmRleDIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwcmVwYXJlTGlzdChldmVudHMuc2xpY2UobGlzdFN0YWNrLnBvcCgpLCBpbmRleDIpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJkZWZpbml0aW9uIikgewogICAgICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIikgewogICAgICAgICAgYm9keTMgPSBwdXNoKGJvZHkzLCBldmVudHMuc2xpY2Uoc3RhcnQsIGluZGV4MikpOwogICAgICAgICAgc3RhcnQgPSBpbmRleDI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGhlYWQyID0gcHVzaChoZWFkMiwgZXZlbnRzLnNsaWNlKHN0YXJ0LCBpbmRleDIgKyAxKSk7CiAgICAgICAgICBzdGFydCA9IGluZGV4MiArIDE7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBoZWFkMiA9IHB1c2goaGVhZDIsIGJvZHkzKTsKICAgIGhlYWQyID0gcHVzaChoZWFkMiwgZXZlbnRzLnNsaWNlKHN0YXJ0KSk7CiAgICBpbmRleDIgPSAtMTsKICAgIGNvbnN0IHJlc3VsdCA9IGhlYWQyOwogICAgaWYgKGhhbmRsZXJzMi5lbnRlci5udWxsKSB7CiAgICAgIGhhbmRsZXJzMi5lbnRlci5udWxsLmNhbGwoY29udGV4dDIpOwogICAgfQogICAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgICBjb25zdCBoYW5kbGVzID0gaGFuZGxlcnMyW3Jlc3VsdFtpbmRleDJdWzBdXTsKICAgICAgY29uc3Qga2luZCA9IHJlc3VsdFtpbmRleDJdWzFdLnR5cGU7CiAgICAgIGNvbnN0IGhhbmRsZTMgPSBoYW5kbGVzW2tpbmRdOwogICAgICBpZiAoaGFzT3duUHJvcGVydHkyLmNhbGwoaGFuZGxlcywga2luZCkgJiYgaGFuZGxlMykgewogICAgICAgIGhhbmRsZTMuY2FsbCh7CiAgICAgICAgICBzbGljZVNlcmlhbGl6ZTogcmVzdWx0W2luZGV4Ml1bMl0uc2xpY2VTZXJpYWxpemUsCiAgICAgICAgICAuLi5jb250ZXh0MgogICAgICAgIH0sIHJlc3VsdFtpbmRleDJdWzFdKTsKICAgICAgfQogICAgfQogICAgaWYgKGhhbmRsZXJzMi5leGl0Lm51bGwpIHsKICAgICAgaGFuZGxlcnMyLmV4aXQubnVsbC5jYWxsKGNvbnRleHQyKTsKICAgIH0KICAgIHJldHVybiBidWZmZXJzWzBdLmpvaW4oIiIpOwogIH0KICBmdW5jdGlvbiBwcmVwYXJlTGlzdChzbGljZSkgewogICAgY29uc3QgbGVuZ3RoID0gc2xpY2UubGVuZ3RoOwogICAgbGV0IGluZGV4MiA9IDA7CiAgICBsZXQgY29udGFpbmVyQmFsYW5jZSA9IDA7CiAgICBsZXQgbG9vc2UgPSBmYWxzZTsKICAgIGxldCBhdE1hcmtlcjsKICAgIHdoaWxlICgrK2luZGV4MiA8IGxlbmd0aCkgewogICAgICBjb25zdCBldmVudCA9IHNsaWNlW2luZGV4Ml07CiAgICAgIGlmIChldmVudFsxXS5fY29udGFpbmVyKSB7CiAgICAgICAgYXRNYXJrZXIgPSB2b2lkIDA7CiAgICAgICAgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiKSB7CiAgICAgICAgICBjb250YWluZXJCYWxhbmNlKys7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnRhaW5lckJhbGFuY2UtLTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBzd2l0Y2ggKGV2ZW50WzFdLnR5cGUpIHsKICAgICAgICBjYXNlICJsaXN0SXRlbVByZWZpeCI6IHsKICAgICAgICAgIGlmIChldmVudFswXSA9PT0gImV4aXQiKSB7CiAgICAgICAgICAgIGF0TWFya2VyID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjYXNlICJsaW5lUHJlZml4IjogewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgImxpbmVFbmRpbmdCbGFuayI6IHsKICAgICAgICAgIGlmIChldmVudFswXSA9PT0gImVudGVyIiAmJiAhY29udGFpbmVyQmFsYW5jZSkgewogICAgICAgICAgICBpZiAoYXRNYXJrZXIpIHsKICAgICAgICAgICAgICBhdE1hcmtlciA9IHZvaWQgMDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsb29zZSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICBhdE1hcmtlciA9IHZvaWQgMDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHNsaWNlWzBdWzFdLl9sb29zZSA9IGxvb3NlOwogIH0KICBmdW5jdGlvbiBzZXREYXRhKGtleTIsIHZhbHVlMikgewogICAgZGF0YVtrZXkyXSA9IHZhbHVlMjsKICB9CiAgZnVuY3Rpb24gZ2V0RGF0YShrZXkyKSB7CiAgICByZXR1cm4gZGF0YVtrZXkyXTsKICB9CiAgZnVuY3Rpb24gYnVmZmVyMigpIHsKICAgIGJ1ZmZlcnMucHVzaChbXSk7CiAgfQogIGZ1bmN0aW9uIHJlc3VtZSgpIHsKICAgIGNvbnN0IGJ1ZiA9IGJ1ZmZlcnMucG9wKCk7CiAgICByZXR1cm4gYnVmLmpvaW4oIiIpOwogIH0KICBmdW5jdGlvbiB0YWcodmFsdWUyKSB7CiAgICBpZiAoIXRhZ3MpIHJldHVybjsKICAgIHNldERhdGEoImxhc3RXYXNUYWciLCB0cnVlKTsKICAgIGJ1ZmZlcnNbYnVmZmVycy5sZW5ndGggLSAxXS5wdXNoKHZhbHVlMik7CiAgfQogIGZ1bmN0aW9uIHJhdzIodmFsdWUyKSB7CiAgICBzZXREYXRhKCJsYXN0V2FzVGFnIik7CiAgICBidWZmZXJzW2J1ZmZlcnMubGVuZ3RoIC0gMV0ucHVzaCh2YWx1ZTIpOwogIH0KICBmdW5jdGlvbiBsaW5lRW5kaW5nMigpIHsKICAgIHJhdzIobGluZUVuZGluZ1N0eWxlIHx8ICJcbiIpOwogIH0KICBmdW5jdGlvbiBsaW5lRW5kaW5nSWZOZWVkZWQoKSB7CiAgICBjb25zdCBidWZmZXIzID0gYnVmZmVyc1tidWZmZXJzLmxlbmd0aCAtIDFdOwogICAgY29uc3Qgc2xpY2UgPSBidWZmZXIzW2J1ZmZlcjMubGVuZ3RoIC0gMV07CiAgICBjb25zdCBwcmV2aW91czMgPSBzbGljZSA/IHNsaWNlLmNoYXJDb2RlQXQoc2xpY2UubGVuZ3RoIC0gMSkgOiBudWxsOwogICAgaWYgKHByZXZpb3VzMyA9PT0gMTAgfHwgcHJldmlvdXMzID09PSAxMyB8fCBwcmV2aW91czMgPT09IG51bGwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgbGluZUVuZGluZzIoKTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlMih2YWx1ZTIpIHsKICAgIHJldHVybiBnZXREYXRhKCJpZ25vcmVFbmNvZGUiKSA/IHZhbHVlMiA6IGVuY29kZSh2YWx1ZTIpOwogIH0KICBmdW5jdGlvbiBvbnJlc3VtZWRyb3AoKSB7CiAgICByZXN1bWUoKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmxpc3RvcmRlcmVkKHRva2VuKSB7CiAgICB0aWdodFN0YWNrLnB1c2goIXRva2VuLl9sb29zZSk7CiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIHRhZygiPG9sIik7CiAgICBzZXREYXRhKCJleHBlY3RGaXJzdEl0ZW0iLCB0cnVlKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmxpc3R1bm9yZGVyZWQodG9rZW4pIHsKICAgIHRpZ2h0U3RhY2sucHVzaCghdG9rZW4uX2xvb3NlKTsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8dWwiKTsKICAgIHNldERhdGEoImV4cGVjdEZpcnN0SXRlbSIsIHRydWUpOwogIH0KICBmdW5jdGlvbiBvbmVudGVybGlzdGl0ZW12YWx1ZSh0b2tlbikgewogICAgaWYgKGdldERhdGEoImV4cGVjdEZpcnN0SXRlbSIpKSB7CiAgICAgIGNvbnN0IHZhbHVlMiA9IE51bWJlci5wYXJzZUludCh0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKSwgMTApOwogICAgICBpZiAodmFsdWUyICE9PSAxKSB7CiAgICAgICAgdGFnKCcgc3RhcnQ9IicgKyBlbmNvZGUyKFN0cmluZyh2YWx1ZTIpKSArICciJyk7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gb25lbnRlcmxpc3RpdGVtbWFya2VyKCkgewogICAgaWYgKGdldERhdGEoImV4cGVjdEZpcnN0SXRlbSIpKSB7CiAgICAgIHRhZygiPiIpOwogICAgfSBlbHNlIHsKICAgICAgb25leGl0bGlzdGl0ZW0oKTsKICAgIH0KICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8bGk+Iik7CiAgICBzZXREYXRhKCJleHBlY3RGaXJzdEl0ZW0iKTsKICAgIHNldERhdGEoImxhc3RXYXNUYWciKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGlzdG9yZGVyZWQoKSB7CiAgICBvbmV4aXRsaXN0aXRlbSgpOwogICAgdGlnaHRTdGFjay5wb3AoKTsKICAgIGxpbmVFbmRpbmcyKCk7CiAgICB0YWcoIjwvb2w+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGxpc3R1bm9yZGVyZWQoKSB7CiAgICBvbmV4aXRsaXN0aXRlbSgpOwogICAgdGlnaHRTdGFjay5wb3AoKTsKICAgIGxpbmVFbmRpbmcyKCk7CiAgICB0YWcoIjwvdWw+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGxpc3RpdGVtKCkgewogICAgaWYgKGdldERhdGEoImxhc3RXYXNUYWciKSAmJiAhZ2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpKSB7CiAgICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgfQogICAgdGFnKCI8L2xpPiIpOwogICAgc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyYmxvY2txdW90ZSgpIHsKICAgIHRpZ2h0U3RhY2sucHVzaChmYWxzZSk7CiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIHRhZygiPGJsb2NrcXVvdGU+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGJsb2NrcXVvdGUoKSB7CiAgICB0aWdodFN0YWNrLnBvcCgpOwogICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB0YWcoIjwvYmxvY2txdW90ZT4iKTsKICAgIHNldERhdGEoInNsdXJwQWxsTGluZUVuZGluZ3MiKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcnBhcmFncmFwaCgpIHsKICAgIGlmICghdGlnaHRTdGFja1t0aWdodFN0YWNrLmxlbmd0aCAtIDFdKSB7CiAgICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICB0YWcoIjxwPiIpOwogICAgfQogICAgc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRwYXJhZ3JhcGgoKSB7CiAgICBpZiAodGlnaHRTdGFja1t0aWdodFN0YWNrLmxlbmd0aCAtIDFdKSB7CiAgICAgIHNldERhdGEoInNsdXJwQWxsTGluZUVuZGluZ3MiLCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHRhZygiPC9wPiIpOwogICAgfQogIH0KICBmdW5jdGlvbiBvbmVudGVyY29kZWZlbmNlZCgpIHsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8cHJlPjxjb2RlIik7CiAgICBzZXREYXRhKCJmZW5jZXNDb3VudCIsIDApOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjb2RlZmVuY2VkZmVuY2VpbmZvKCkgewogICAgY29uc3QgdmFsdWUyID0gcmVzdW1lKCk7CiAgICB0YWcoJyBjbGFzcz0ibGFuZ3VhZ2UtJyArIHZhbHVlMiArICciJyk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGVmZW5jZWRmZW5jZSgpIHsKICAgIGNvbnN0IGNvdW50MiA9IGdldERhdGEoImZlbmNlc0NvdW50IikgfHwgMDsKICAgIGlmICghY291bnQyKSB7CiAgICAgIHRhZygiPiIpOwogICAgICBzZXREYXRhKCJzbHVycE9uZUxpbmVFbmRpbmciLCB0cnVlKTsKICAgIH0KICAgIHNldERhdGEoImZlbmNlc0NvdW50IiwgY291bnQyICsgMSk7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJjb2RlaW5kZW50ZWQoKSB7CiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIHRhZygiPHByZT48Y29kZT4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0Zmxvd2NvZGUoKSB7CiAgICBjb25zdCBjb3VudDIgPSBnZXREYXRhKCJmZW5jZXNDb3VudCIpOwogICAgaWYgKGNvdW50MiAhPT0gdm9pZCAwICYmIGNvdW50MiA8IDIgJiYgZGF0YS50aWdodFN0YWNrLmxlbmd0aCA+IDAgJiYgIWdldERhdGEoImxhc3RXYXNUYWciKSkgewogICAgICBsaW5lRW5kaW5nMigpOwogICAgfQogICAgaWYgKGdldERhdGEoImZsb3dDb2RlU2VlbkRhdGEiKSkgewogICAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIH0KICAgIHRhZygiPC9jb2RlPjwvcHJlPiIpOwogICAgaWYgKGNvdW50MiAhPT0gdm9pZCAwICYmIGNvdW50MiA8IDIpIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgc2V0RGF0YSgiZmxvd0NvZGVTZWVuRGF0YSIpOwogICAgc2V0RGF0YSgiZmVuY2VzQ291bnQiKTsKICAgIHNldERhdGEoInNsdXJwT25lTGluZUVuZGluZyIpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyaW1hZ2UoKSB7CiAgICBtZWRpYVN0YWNrLnB1c2goewogICAgICBpbWFnZTogdHJ1ZQogICAgfSk7CiAgICB0YWdzID0gdm9pZCAwOwogIH0KICBmdW5jdGlvbiBvbmVudGVybGluaygpIHsKICAgIG1lZGlhU3RhY2sucHVzaCh7fSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGxhYmVsdGV4dCh0b2tlbikgewogICAgbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdLmxhYmVsSWQgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGFiZWwoKSB7CiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0ubGFiZWwgPSByZXN1bWUoKTsKICB9CiAgZnVuY3Rpb24gb25leGl0cmVmZXJlbmNlc3RyaW5nKHRva2VuKSB7CiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0ucmVmZXJlbmNlSWQgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcnJlc291cmNlKCkgewogICAgYnVmZmVyMigpOwogICAgbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uID0gIiI7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJyZXNvdXJjZWRlc3RpbmF0aW9uc3RyaW5nKCkgewogICAgYnVmZmVyMigpOwogICAgc2V0RGF0YSgiaWdub3JlRW5jb2RlIiwgdHJ1ZSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHJlc291cmNlZGVzdGluYXRpb25zdHJpbmcoKSB7CiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0uZGVzdGluYXRpb24gPSByZXN1bWUoKTsKICAgIHNldERhdGEoImlnbm9yZUVuY29kZSIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRyZXNvdXJjZXRpdGxlc3RyaW5nKCkgewogICAgbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdLnRpdGxlID0gcmVzdW1lKCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdG1lZGlhKCkgewogICAgbGV0IGluZGV4MiA9IG1lZGlhU3RhY2subGVuZ3RoIC0gMTsKICAgIGNvbnN0IG1lZGlhID0gbWVkaWFTdGFja1tpbmRleDJdOwogICAgY29uc3QgaWQgPSBtZWRpYS5yZWZlcmVuY2VJZCB8fCBtZWRpYS5sYWJlbElkOwogICAgY29uc3QgY29udGV4dDMgPSBtZWRpYS5kZXN0aW5hdGlvbiA9PT0gdm9pZCAwID8gZGVmaW5pdGlvbnNbbm9ybWFsaXplSWRlbnRpZmllcihpZCldIDogbWVkaWE7CiAgICB0YWdzID0gdHJ1ZTsKICAgIHdoaWxlIChpbmRleDItLSkgewogICAgICBpZiAobWVkaWFTdGFja1tpbmRleDJdLmltYWdlKSB7CiAgICAgICAgdGFncyA9IHZvaWQgMDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKG1lZGlhLmltYWdlKSB7CiAgICAgIHRhZygnPGltZyBzcmM9IicgKyBzYW5pdGl6ZVVyaShjb250ZXh0My5kZXN0aW5hdGlvbiwgc2V0dGluZ3MuYWxsb3dEYW5nZXJvdXNQcm90b2NvbCA/IHZvaWQgMCA6IHByb3RvY29sU291cmNlKSArICciIGFsdD0iJyk7CiAgICAgIHJhdzIobWVkaWEubGFiZWwpOwogICAgICB0YWcoJyInKTsKICAgIH0gZWxzZSB7CiAgICAgIHRhZygnPGEgaHJlZj0iJyArIHNhbml0aXplVXJpKGNvbnRleHQzLmRlc3RpbmF0aW9uLCBzZXR0aW5ncy5hbGxvd0Rhbmdlcm91c1Byb3RvY29sID8gdm9pZCAwIDogcHJvdG9jb2xIcmVmKSArICciJyk7CiAgICB9CiAgICB0YWcoY29udGV4dDMudGl0bGUgPyAnIHRpdGxlPSInICsgY29udGV4dDMudGl0bGUgKyAnIicgOiAiIik7CiAgICBpZiAobWVkaWEuaW1hZ2UpIHsKICAgICAgdGFnKCIgLz4iKTsKICAgIH0gZWxzZSB7CiAgICAgIHRhZygiPiIpOwogICAgICByYXcyKG1lZGlhLmxhYmVsKTsKICAgICAgdGFnKCI8L2E+Iik7CiAgICB9CiAgICBtZWRpYVN0YWNrLnBvcCgpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyZGVmaW5pdGlvbigpIHsKICAgIGJ1ZmZlcjIoKTsKICAgIG1lZGlhU3RhY2sucHVzaCh7fSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb25sYWJlbHN0cmluZyh0b2tlbikgewogICAgcmVzdW1lKCk7CiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0ubGFiZWxJZCA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogIH0KICBmdW5jdGlvbiBvbmVudGVyZGVmaW5pdGlvbmRlc3RpbmF0aW9uc3RyaW5nKCkgewogICAgYnVmZmVyMigpOwogICAgc2V0RGF0YSgiaWdub3JlRW5jb2RlIiwgdHJ1ZSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb25kZXN0aW5hdGlvbnN0cmluZygpIHsKICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbiA9IHJlc3VtZSgpOwogICAgc2V0RGF0YSgiaWdub3JlRW5jb2RlIik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb250aXRsZXN0cmluZygpIHsKICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS50aXRsZSA9IHJlc3VtZSgpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRkZWZpbml0aW9uKCkgewogICAgY29uc3QgbWVkaWEgPSBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV07CiAgICBjb25zdCBpZCA9IG5vcm1hbGl6ZUlkZW50aWZpZXIobWVkaWEubGFiZWxJZCk7CiAgICByZXN1bWUoKTsKICAgIGlmICghaGFzT3duUHJvcGVydHkyLmNhbGwoZGVmaW5pdGlvbnMsIGlkKSkgewogICAgICBkZWZpbml0aW9uc1tpZF0gPSBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV07CiAgICB9CiAgICBtZWRpYVN0YWNrLnBvcCgpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyY29udGVudCgpIHsKICAgIHNldERhdGEoInNsdXJwQWxsTGluZUVuZGluZ3MiLCB0cnVlKTsKICB9CiAgZnVuY3Rpb24gb25leGl0YXR4aGVhZGluZ3NlcXVlbmNlKHRva2VuKSB7CiAgICBpZiAoZ2V0RGF0YSgiaGVhZGluZ1JhbmsiKSkgcmV0dXJuOwogICAgc2V0RGF0YSgiaGVhZGluZ1JhbmsiLCB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKS5sZW5ndGgpOwogICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB0YWcoIjxoIiArIGdldERhdGEoImhlYWRpbmdSYW5rIikgKyAiPiIpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyc2V0ZXh0aGVhZGluZygpIHsKICAgIGJ1ZmZlcjIoKTsKICAgIHNldERhdGEoInNsdXJwQWxsTGluZUVuZGluZ3MiKTsKICB9CiAgZnVuY3Rpb24gb25leGl0c2V0ZXh0aGVhZGluZ3RleHQoKSB7CiAgICBzZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIiwgdHJ1ZSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGF0eGhlYWRpbmcoKSB7CiAgICB0YWcoIjwvaCIgKyBnZXREYXRhKCJoZWFkaW5nUmFuayIpICsgIj4iKTsKICAgIHNldERhdGEoImhlYWRpbmdSYW5rIik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHNldGV4dGhlYWRpbmdsaW5lc2VxdWVuY2UodG9rZW4pIHsKICAgIHNldERhdGEoImhlYWRpbmdSYW5rIiwgdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikuY2hhckNvZGVBdCgwKSA9PT0gNjEgPyAxIDogMik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHNldGV4dGhlYWRpbmcoKSB7CiAgICBjb25zdCB2YWx1ZTIgPSByZXN1bWUoKTsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8aCIgKyBnZXREYXRhKCJoZWFkaW5nUmFuayIpICsgIj4iKTsKICAgIHJhdzIodmFsdWUyKTsKICAgIHRhZygiPC9oIiArIGdldERhdGEoImhlYWRpbmdSYW5rIikgKyAiPiIpOwogICAgc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpOwogICAgc2V0RGF0YSgiaGVhZGluZ1JhbmsiKTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGF0YSh0b2tlbikgewogICAgcmF3MihlbmNvZGUyKHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pKSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGxpbmVlbmRpbmcodG9rZW4pIHsKICAgIGlmIChnZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIikpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGdldERhdGEoInNsdXJwT25lTGluZUVuZGluZyIpKSB7CiAgICAgIHNldERhdGEoInNsdXJwT25lTGluZUVuZGluZyIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoZ2V0RGF0YSgiaW5Db2RlVGV4dCIpKSB7CiAgICAgIHJhdzIoIiAiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgcmF3MihlbmNvZGUyKHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pKSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGVmbG93dmFsdWUodG9rZW4pIHsKICAgIHJhdzIoZW5jb2RlMih0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKSkpOwogICAgc2V0RGF0YSgiZmxvd0NvZGVTZWVuRGF0YSIsIHRydWUpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRoYXJkYnJlYWsoKSB7CiAgICB0YWcoIjxiciAvPiIpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyaHRtbGZsb3coKSB7CiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIG9uZW50ZXJodG1sKCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGh0bWwoKSB7CiAgICBzZXREYXRhKCJpZ25vcmVFbmNvZGUiKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmh0bWwoKSB7CiAgICBpZiAoc2V0dGluZ3MuYWxsb3dEYW5nZXJvdXNIdG1sKSB7CiAgICAgIHNldERhdGEoImlnbm9yZUVuY29kZSIsIHRydWUpOwogICAgfQogIH0KICBmdW5jdGlvbiBvbmVudGVyZW1waGFzaXMoKSB7CiAgICB0YWcoIjxlbT4iKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcnN0cm9uZygpIHsKICAgIHRhZygiPHN0cm9uZz4iKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmNvZGV0ZXh0KCkgewogICAgc2V0RGF0YSgiaW5Db2RlVGV4dCIsIHRydWUpOwogICAgdGFnKCI8Y29kZT4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZXRleHQoKSB7CiAgICBzZXREYXRhKCJpbkNvZGVUZXh0Iik7CiAgICB0YWcoIjwvY29kZT4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZW1waGFzaXMoKSB7CiAgICB0YWcoIjwvZW0+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHN0cm9uZygpIHsKICAgIHRhZygiPC9zdHJvbmc+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHRoZW1hdGljYnJlYWsoKSB7CiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIHRhZygiPGhyIC8+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlcih0b2tlbikgewogICAgc2V0RGF0YSgiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIsIHRva2VuLnR5cGUpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2V2YWx1ZSh0b2tlbikgewogICAgY29uc3QgdmFsdWUyID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgICBjb25zdCBkZWNvZGVkID0gZ2V0RGF0YSgiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpID8gZGVjb2RlTnVtZXJpY0NoYXJhY3RlclJlZmVyZW5jZSh2YWx1ZTIsIGdldERhdGEoImNoYXJhY3RlclJlZmVyZW5jZVR5cGUiKSA9PT0gImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiID8gMTAgOiAxNikgOiBkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZSh2YWx1ZTIpOwogICAgcmF3MihlbmNvZGUyKAogICAgICAvKiogQHR5cGUge3N0cmluZ30gKi8KICAgICAgZGVjb2RlZAogICAgKSk7CiAgICBzZXREYXRhKCJjaGFyYWN0ZXJSZWZlcmVuY2VUeXBlIik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGF1dG9saW5rcHJvdG9jb2wodG9rZW4pIHsKICAgIGNvbnN0IHVyaSA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogICAgdGFnKCc8YSBocmVmPSInICsgc2FuaXRpemVVcmkodXJpLCBzZXR0aW5ncy5hbGxvd0Rhbmdlcm91c1Byb3RvY29sID8gdm9pZCAwIDogcHJvdG9jb2xIcmVmKSArICciPicpOwogICAgcmF3MihlbmNvZGUyKHVyaSkpOwogICAgdGFnKCI8L2E+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGF1dG9saW5rZW1haWwodG9rZW4pIHsKICAgIGNvbnN0IHVyaSA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogICAgdGFnKCc8YSBocmVmPSInICsgc2FuaXRpemVVcmkoIm1haWx0bzoiICsgdXJpKSArICciPicpOwogICAgcmF3MihlbmNvZGUyKHVyaSkpOwogICAgdGFnKCI8L2E+Iik7CiAgfQp9CnZhciBoYXNPd25Qcm9wZXJ0eTIsIHByb3RvY29sSHJlZiwgcHJvdG9jb2xTb3VyY2U7CnZhciBpbml0X2NvbXBpbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvY29tcGlsZS5qcyIoKSB7CiAgICBpbml0X2luZGV4X2RvbSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaHVua2VkKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NvbWJpbmVfZXh0ZW5zaW9ucygpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9kZWNvZGVfbnVtZXJpY19jaGFyYWN0ZXJfcmVmZXJlbmNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2VuY29kZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9ub3JtYWxpemVfaWRlbnRpZmllcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9zYW5pdGl6ZV91cmkoKTsKICAgIGhhc093blByb3BlcnR5MiA9IHt9Lmhhc093blByb3BlcnR5OwogICAgcHJvdG9jb2xIcmVmID0gL14oaHR0cHM/fGlyY3M/fG1haWx0b3x4bXBwKSQvaTsKICAgIHByb3RvY29sU291cmNlID0gL15odHRwcz8kL2k7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvaW5pdGlhbGl6ZS9jb250ZW50LmpzCmZ1bmN0aW9uIGluaXRpYWxpemVDb250ZW50KGVmZmVjdHMpIHsKICBjb25zdCBjb250ZW50U3RhcnQgPSBlZmZlY3RzLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5jb250ZW50SW5pdGlhbCwgYWZ0ZXJDb250ZW50U3RhcnRDb25zdHJ1Y3QsIHBhcmFncmFwaEluaXRpYWwpOwogIGxldCBwcmV2aW91czM7CiAgcmV0dXJuIGNvbnRlbnRTdGFydDsKICBmdW5jdGlvbiBhZnRlckNvbnRlbnRTdGFydENvbnN0cnVjdChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgY29udGVudFN0YXJ0LCAibGluZVByZWZpeCIpOwogIH0KICBmdW5jdGlvbiBwYXJhZ3JhcGhJbml0aWFsKGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJwYXJhZ3JhcGgiKTsKICAgIHJldHVybiBsaW5lU3RhcnQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBsaW5lU3RhcnQoY29kZTQpIHsKICAgIGNvbnN0IHRva2VuID0gZWZmZWN0cy5lbnRlcigiY2h1bmtUZXh0IiwgewogICAgICBjb250ZW50VHlwZTogInRleHQiLAogICAgICBwcmV2aW91czogcHJldmlvdXMzCiAgICB9KTsKICAgIGlmIChwcmV2aW91czMpIHsKICAgICAgcHJldmlvdXMzLm5leHQgPSB0b2tlbjsKICAgIH0KICAgIHByZXZpb3VzMyA9IHRva2VuOwogICAgcmV0dXJuIGRhdGEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkYXRhKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjaHVua1RleHQiKTsKICAgICAgZWZmZWN0cy5leGl0KCJwYXJhZ3JhcGgiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJjaHVua1RleHQiKTsKICAgICAgcmV0dXJuIGxpbmVTdGFydDsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gZGF0YTsKICB9Cn0KdmFyIGNvbnRlbnQyOwp2YXIgaW5pdF9jb250ZW50MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL2NvbnRlbnQuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGNvbnRlbnQyID0gewogICAgICB0b2tlbml6ZTogaW5pdGlhbGl6ZUNvbnRlbnQKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvaW5pdGlhbGl6ZS9kb2N1bWVudC5qcwpmdW5jdGlvbiBpbml0aWFsaXplRG9jdW1lbnQoZWZmZWN0cykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBjb25zdCBzdGFjayA9IFtdOwogIGxldCBjb250aW51ZWQgPSAwOwogIGxldCBjaGlsZEZsb3c7CiAgbGV0IGNoaWxkVG9rZW47CiAgbGV0IGxpbmVTdGFydE9mZnNldDsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmIChjb250aW51ZWQgPCBzdGFjay5sZW5ndGgpIHsKICAgICAgY29uc3QgaXRlbSA9IHN0YWNrW2NvbnRpbnVlZF07CiAgICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlID0gaXRlbVsxXTsKICAgICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChpdGVtWzBdLmNvbnRpbnVhdGlvbiwgZG9jdW1lbnRDb250aW51ZSwgY2hlY2tOZXdDb250YWluZXJzKShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gY2hlY2tOZXdDb250YWluZXJzKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZG9jdW1lbnRDb250aW51ZShjb2RlNCkgewogICAgY29udGludWVkKys7CiAgICBpZiAoc2VsZjIuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdykgewogICAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93ID0gdm9pZCAwOwogICAgICBpZiAoY2hpbGRGbG93KSB7CiAgICAgICAgY2xvc2VGbG93KCk7CiAgICAgIH0KICAgICAgY29uc3QgaW5kZXhCZWZvcmVFeGl0cyA9IHNlbGYyLmV2ZW50cy5sZW5ndGg7CiAgICAgIGxldCBpbmRleEJlZm9yZUZsb3cgPSBpbmRleEJlZm9yZUV4aXRzOwogICAgICBsZXQgcG9pbnQ0OwogICAgICB3aGlsZSAoaW5kZXhCZWZvcmVGbG93LS0pIHsKICAgICAgICBpZiAoc2VsZjIuZXZlbnRzW2luZGV4QmVmb3JlRmxvd11bMF0gPT09ICJleGl0IiAmJiBzZWxmMi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVsxXS50eXBlID09PSAiY2h1bmtGbG93IikgewogICAgICAgICAgcG9pbnQ0ID0gc2VsZjIuZXZlbnRzW2luZGV4QmVmb3JlRmxvd11bMV0uZW5kOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGV4aXRDb250YWluZXJzKGNvbnRpbnVlZCk7CiAgICAgIGxldCBpbmRleDIgPSBpbmRleEJlZm9yZUV4aXRzOwogICAgICB3aGlsZSAoaW5kZXgyIDwgc2VsZjIuZXZlbnRzLmxlbmd0aCkgewogICAgICAgIHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLmVuZCA9IHsKICAgICAgICAgIC4uLnBvaW50NAogICAgICAgIH07CiAgICAgICAgaW5kZXgyKys7CiAgICAgIH0KICAgICAgc3BsaWNlKHNlbGYyLmV2ZW50cywgaW5kZXhCZWZvcmVGbG93ICsgMSwgMCwgc2VsZjIuZXZlbnRzLnNsaWNlKGluZGV4QmVmb3JlRXhpdHMpKTsKICAgICAgc2VsZjIuZXZlbnRzLmxlbmd0aCA9IGluZGV4MjsKICAgICAgcmV0dXJuIGNoZWNrTmV3Q29udGFpbmVycyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gc3RhcnQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjaGVja05ld0NvbnRhaW5lcnMoY29kZTQpIHsKICAgIGlmIChjb250aW51ZWQgPT09IHN0YWNrLmxlbmd0aCkgewogICAgICBpZiAoIWNoaWxkRmxvdykgewogICAgICAgIHJldHVybiBkb2N1bWVudENvbnRpbnVlZChjb2RlNCk7CiAgICAgIH0KICAgICAgaWYgKGNoaWxkRmxvdy5jdXJyZW50Q29uc3RydWN0ICYmIGNoaWxkRmxvdy5jdXJyZW50Q29uc3RydWN0LmNvbmNyZXRlKSB7CiAgICAgICAgcmV0dXJuIGZsb3dTdGFydChjb2RlNCk7CiAgICAgIH0KICAgICAgc2VsZjIuaW50ZXJydXB0ID0gQm9vbGVhbihjaGlsZEZsb3cuY3VycmVudENvbnN0cnVjdCAmJiAhY2hpbGRGbG93Ll9nZm1UYWJsZUR5bmFtaWNJbnRlcnJ1cHRIYWNrKTsKICAgIH0KICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlID0ge307CiAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhjb250YWluZXJDb25zdHJ1Y3QsIHRoZXJlSXNBTmV3Q29udGFpbmVyLCB0aGVyZUlzTm9OZXdDb250YWluZXIpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGhlcmVJc0FOZXdDb250YWluZXIoY29kZTQpIHsKICAgIGlmIChjaGlsZEZsb3cpIGNsb3NlRmxvdygpOwogICAgZXhpdENvbnRhaW5lcnMoY29udGludWVkKTsKICAgIHJldHVybiBkb2N1bWVudENvbnRpbnVlZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRoZXJlSXNOb05ld0NvbnRhaW5lcihjb2RlNCkgewogICAgc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0gPSBjb250aW51ZWQgIT09IHN0YWNrLmxlbmd0aDsKICAgIGxpbmVTdGFydE9mZnNldCA9IHNlbGYyLm5vdygpLm9mZnNldDsKICAgIHJldHVybiBmbG93U3RhcnQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkb2N1bWVudENvbnRpbnVlZChjb2RlNCkgewogICAgc2VsZjIuY29udGFpbmVyU3RhdGUgPSB7fTsKICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoY29udGFpbmVyQ29uc3RydWN0LCBjb250YWluZXJDb250aW51ZSwgZmxvd1N0YXJ0KShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRhaW5lckNvbnRpbnVlKGNvZGU0KSB7CiAgICBjb250aW51ZWQrKzsKICAgIHN0YWNrLnB1c2goW3NlbGYyLmN1cnJlbnRDb25zdHJ1Y3QsIHNlbGYyLmNvbnRhaW5lclN0YXRlXSk7CiAgICByZXR1cm4gZG9jdW1lbnRDb250aW51ZWQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBmbG93U3RhcnQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICBpZiAoY2hpbGRGbG93KSBjbG9zZUZsb3coKTsKICAgICAgZXhpdENvbnRhaW5lcnMoMCk7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNoaWxkRmxvdyA9IGNoaWxkRmxvdyB8fCBzZWxmMi5wYXJzZXIuZmxvdyhzZWxmMi5ub3coKSk7CiAgICBlZmZlY3RzLmVudGVyKCJjaHVua0Zsb3ciLCB7CiAgICAgIF90b2tlbml6ZXI6IGNoaWxkRmxvdywKICAgICAgY29udGVudFR5cGU6ICJmbG93IiwKICAgICAgcHJldmlvdXM6IGNoaWxkVG9rZW4KICAgIH0pOwogICAgcmV0dXJuIGZsb3dDb250aW51ZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGZsb3dDb250aW51ZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHdyaXRlVG9DaGlsZChlZmZlY3RzLmV4aXQoImNodW5rRmxvdyIpLCB0cnVlKTsKICAgICAgZXhpdENvbnRhaW5lcnMoMCk7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHdyaXRlVG9DaGlsZChlZmZlY3RzLmV4aXQoImNodW5rRmxvdyIpKTsKICAgICAgY29udGludWVkID0gMDsKICAgICAgc2VsZjIuaW50ZXJydXB0ID0gdm9pZCAwOwogICAgICByZXR1cm4gc3RhcnQ7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGZsb3dDb250aW51ZTsKICB9CiAgZnVuY3Rpb24gd3JpdGVUb0NoaWxkKHRva2VuLCBlbmRPZkZpbGUpIHsKICAgIGNvbnN0IHN0cmVhbSA9IHNlbGYyLnNsaWNlU3RyZWFtKHRva2VuKTsKICAgIGlmIChlbmRPZkZpbGUpIHN0cmVhbS5wdXNoKG51bGwpOwogICAgdG9rZW4ucHJldmlvdXMgPSBjaGlsZFRva2VuOwogICAgaWYgKGNoaWxkVG9rZW4pIGNoaWxkVG9rZW4ubmV4dCA9IHRva2VuOwogICAgY2hpbGRUb2tlbiA9IHRva2VuOwogICAgY2hpbGRGbG93LmRlZmluZVNraXAodG9rZW4uc3RhcnQpOwogICAgY2hpbGRGbG93LndyaXRlKHN0cmVhbSk7CiAgICBpZiAoc2VsZjIucGFyc2VyLmxhenlbdG9rZW4uc3RhcnQubGluZV0pIHsKICAgICAgbGV0IGluZGV4MiA9IGNoaWxkRmxvdy5ldmVudHMubGVuZ3RoOwogICAgICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgICAgICBpZiAoCiAgICAgICAgICAvLyBUaGUgdG9rZW4gc3RhcnRzIGJlZm9yZSB0aGUgbGluZSBlbmRpbmfigKYKICAgICAgICAgIGNoaWxkRmxvdy5ldmVudHNbaW5kZXgyXVsxXS5zdGFydC5vZmZzZXQgPCBsaW5lU3RhcnRPZmZzZXQgJiYgLy8g4oCmYW5kIGVpdGhlciBpcyBub3QgZW5kZWQgeWV04oCmCiAgICAgICAgICAoIWNoaWxkRmxvdy5ldmVudHNbaW5kZXgyXVsxXS5lbmQgfHwgLy8g4oCmb3IgZW5kcyBhZnRlciBpdC4KICAgICAgICAgIGNoaWxkRmxvdy5ldmVudHNbaW5kZXgyXVsxXS5lbmQub2Zmc2V0ID4gbGluZVN0YXJ0T2Zmc2V0KQogICAgICAgICkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBpbmRleEJlZm9yZUV4aXRzID0gc2VsZjIuZXZlbnRzLmxlbmd0aDsKICAgICAgbGV0IGluZGV4QmVmb3JlRmxvdyA9IGluZGV4QmVmb3JlRXhpdHM7CiAgICAgIGxldCBzZWVuOwogICAgICBsZXQgcG9pbnQ0OwogICAgICB3aGlsZSAoaW5kZXhCZWZvcmVGbG93LS0pIHsKICAgICAgICBpZiAoc2VsZjIuZXZlbnRzW2luZGV4QmVmb3JlRmxvd11bMF0gPT09ICJleGl0IiAmJiBzZWxmMi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVsxXS50eXBlID09PSAiY2h1bmtGbG93IikgewogICAgICAgICAgaWYgKHNlZW4pIHsKICAgICAgICAgICAgcG9pbnQ0ID0gc2VsZjIuZXZlbnRzW2luZGV4QmVmb3JlRmxvd11bMV0uZW5kOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIHNlZW4gPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBleGl0Q29udGFpbmVycyhjb250aW51ZWQpOwogICAgICBpbmRleDIgPSBpbmRleEJlZm9yZUV4aXRzOwogICAgICB3aGlsZSAoaW5kZXgyIDwgc2VsZjIuZXZlbnRzLmxlbmd0aCkgewogICAgICAgIHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLmVuZCA9IHsKICAgICAgICAgIC4uLnBvaW50NAogICAgICAgIH07CiAgICAgICAgaW5kZXgyKys7CiAgICAgIH0KICAgICAgc3BsaWNlKHNlbGYyLmV2ZW50cywgaW5kZXhCZWZvcmVGbG93ICsgMSwgMCwgc2VsZjIuZXZlbnRzLnNsaWNlKGluZGV4QmVmb3JlRXhpdHMpKTsKICAgICAgc2VsZjIuZXZlbnRzLmxlbmd0aCA9IGluZGV4MjsKICAgIH0KICB9CiAgZnVuY3Rpb24gZXhpdENvbnRhaW5lcnMoc2l6ZSkgewogICAgbGV0IGluZGV4MiA9IHN0YWNrLmxlbmd0aDsKICAgIHdoaWxlIChpbmRleDItLSA+IHNpemUpIHsKICAgICAgY29uc3QgZW50cnkgPSBzdGFja1tpbmRleDJdOwogICAgICBzZWxmMi5jb250YWluZXJTdGF0ZSA9IGVudHJ5WzFdOwogICAgICBlbnRyeVswXS5leGl0LmNhbGwoc2VsZjIsIGVmZmVjdHMpOwogICAgfQogICAgc3RhY2subGVuZ3RoID0gc2l6ZTsKICB9CiAgZnVuY3Rpb24gY2xvc2VGbG93KCkgewogICAgY2hpbGRGbG93LndyaXRlKFtudWxsXSk7CiAgICBjaGlsZFRva2VuID0gdm9pZCAwOwogICAgY2hpbGRGbG93ID0gdm9pZCAwOwogICAgc2VsZjIuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdyA9IHZvaWQgMDsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVDb250YWluZXIoZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGVmZmVjdHMuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmRvY3VtZW50LCBvazMsIG5vayksICJsaW5lUHJlZml4IiwgdGhpcy5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpID8gdm9pZCAwIDogNCk7Cn0KdmFyIGRvY3VtZW50MiwgY29udGFpbmVyQ29uc3RydWN0Owp2YXIgaW5pdF9kb2N1bWVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL2RvY3VtZW50LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NodW5rZWQoKTsKICAgIGRvY3VtZW50MiA9IHsKICAgICAgdG9rZW5pemU6IGluaXRpYWxpemVEb2N1bWVudAogICAgfTsKICAgIGNvbnRhaW5lckNvbnN0cnVjdCA9IHsKICAgICAgdG9rZW5pemU6IHRva2VuaXplQ29udGFpbmVyCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2luaXRpYWxpemUvZmxvdy5qcwpmdW5jdGlvbiBpbml0aWFsaXplRmxvdyhlZmZlY3RzKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGNvbnN0IGluaXRpYWwyID0gZWZmZWN0cy5hdHRlbXB0KAogICAgLy8gVHJ5IHRvIHBhcnNlIGEgYmxhbmsgbGluZS4KICAgIGJsYW5rTGluZSwKICAgIGF0QmxhbmtFbmRpbmcsCiAgICAvLyBUcnkgdG8gcGFyc2UgaW5pdGlhbCBmbG93IChlc3NlbnRpYWxseSwgb25seSBjb2RlKS4KICAgIGVmZmVjdHMuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmZsb3dJbml0aWFsLCBhZnRlckNvbnN0cnVjdCwgZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGVmZmVjdHMuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmZsb3csIGFmdGVyQ29uc3RydWN0LCBlZmZlY3RzLmF0dGVtcHQoY29udGVudCwgYWZ0ZXJDb25zdHJ1Y3QpKSwgImxpbmVQcmVmaXgiKSkKICApOwogIHJldHVybiBpbml0aWFsMjsKICBmdW5jdGlvbiBhdEJsYW5rRW5kaW5nKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZ0JsYW5rIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nQmxhbmsiKTsKICAgIHNlbGYyLmN1cnJlbnRDb25zdHJ1Y3QgPSB2b2lkIDA7CiAgICByZXR1cm4gaW5pdGlhbDI7CiAgfQogIGZ1bmN0aW9uIGFmdGVyQ29uc3RydWN0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgc2VsZjIuY3VycmVudENvbnN0cnVjdCA9IHZvaWQgMDsKICAgIHJldHVybiBpbml0aWFsMjsKICB9Cn0KdmFyIGZsb3c7CnZhciBpbml0X2Zsb3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvaW5pdGlhbGl6ZS9mbG93LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2NvcmVfY29tbW9ubWFyaygpOwogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGZsb3cgPSB7CiAgICAgIHRva2VuaXplOiBpbml0aWFsaXplRmxvdwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL3RleHQuanMKZnVuY3Rpb24gaW5pdGlhbGl6ZUZhY3RvcnkoZmllbGQpIHsKICByZXR1cm4gewogICAgcmVzb2x2ZUFsbDogY3JlYXRlUmVzb2x2ZXIoZmllbGQgPT09ICJ0ZXh0IiA/IHJlc29sdmVBbGxMaW5lU3VmZml4ZXMgOiB2b2lkIDApLAogICAgdG9rZW5pemU6IGluaXRpYWxpemVUZXh0CiAgfTsKICBmdW5jdGlvbiBpbml0aWFsaXplVGV4dChlZmZlY3RzKSB7CiAgICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgICBjb25zdCBjb25zdHJ1Y3RzMiA9IHRoaXMucGFyc2VyLmNvbnN0cnVjdHNbZmllbGRdOwogICAgY29uc3QgdGV4dDkgPSBlZmZlY3RzLmF0dGVtcHQoY29uc3RydWN0czIsIHN0YXJ0LCBub3RUZXh0KTsKICAgIHJldHVybiBzdGFydDsKICAgIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KSA/IHRleHQ5KGNvZGU0KSA6IG5vdFRleHQoY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gbm90VGV4dChjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBlZmZlY3RzLmVudGVyKCJkYXRhIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBkYXRhOwogICAgfQogICAgZnVuY3Rpb24gZGF0YShjb2RlNCkgewogICAgICBpZiAoYXRCcmVhayhjb2RlNCkpIHsKICAgICAgICBlZmZlY3RzLmV4aXQoImRhdGEiKTsKICAgICAgICByZXR1cm4gdGV4dDkoY29kZTQpOwogICAgICB9CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBkYXRhOwogICAgfQogICAgZnVuY3Rpb24gYXRCcmVhayhjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBjb25zdCBsaXN0NSA9IGNvbnN0cnVjdHMyW2NvZGU0XTsKICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICBpZiAobGlzdDUpIHsKICAgICAgICB3aGlsZSAoKytpbmRleDIgPCBsaXN0NS5sZW5ndGgpIHsKICAgICAgICAgIGNvbnN0IGl0ZW0gPSBsaXN0NVtpbmRleDJdOwogICAgICAgICAgaWYgKCFpdGVtLnByZXZpb3VzIHx8IGl0ZW0ucHJldmlvdXMuY2FsbChzZWxmMiwgc2VsZjIucHJldmlvdXMpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIGNyZWF0ZVJlc29sdmVyKGV4dHJhUmVzb2x2ZXIpIHsKICByZXR1cm4gcmVzb2x2ZUFsbFRleHQ7CiAgZnVuY3Rpb24gcmVzb2x2ZUFsbFRleHQoZXZlbnRzLCBjb250ZXh0MikgewogICAgbGV0IGluZGV4MiA9IC0xOwogICAgbGV0IGVudGVyOwogICAgd2hpbGUgKCsraW5kZXgyIDw9IGV2ZW50cy5sZW5ndGgpIHsKICAgICAgaWYgKGVudGVyID09PSB2b2lkIDApIHsKICAgICAgICBpZiAoZXZlbnRzW2luZGV4Ml0gJiYgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImRhdGEiKSB7CiAgICAgICAgICBlbnRlciA9IGluZGV4MjsKICAgICAgICAgIGluZGV4MisrOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICghZXZlbnRzW2luZGV4Ml0gfHwgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSAhPT0gImRhdGEiKSB7CiAgICAgICAgaWYgKGluZGV4MiAhPT0gZW50ZXIgKyAyKSB7CiAgICAgICAgICBldmVudHNbZW50ZXJdWzFdLmVuZCA9IGV2ZW50c1tpbmRleDIgLSAxXVsxXS5lbmQ7CiAgICAgICAgICBldmVudHMuc3BsaWNlKGVudGVyICsgMiwgaW5kZXgyIC0gZW50ZXIgLSAyKTsKICAgICAgICAgIGluZGV4MiA9IGVudGVyICsgMjsKICAgICAgICB9CiAgICAgICAgZW50ZXIgPSB2b2lkIDA7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBleHRyYVJlc29sdmVyID8gZXh0cmFSZXNvbHZlcihldmVudHMsIGNvbnRleHQyKSA6IGV2ZW50czsKICB9Cn0KZnVuY3Rpb24gcmVzb2x2ZUFsbExpbmVTdWZmaXhlcyhldmVudHMsIGNvbnRleHQyKSB7CiAgbGV0IGV2ZW50SW5kZXggPSAwOwogIHdoaWxlICgrK2V2ZW50SW5kZXggPD0gZXZlbnRzLmxlbmd0aCkgewogICAgaWYgKChldmVudEluZGV4ID09PSBldmVudHMubGVuZ3RoIHx8IGV2ZW50c1tldmVudEluZGV4XVsxXS50eXBlID09PSAibGluZUVuZGluZyIpICYmIGV2ZW50c1tldmVudEluZGV4IC0gMV1bMV0udHlwZSA9PT0gImRhdGEiKSB7CiAgICAgIGNvbnN0IGRhdGEgPSBldmVudHNbZXZlbnRJbmRleCAtIDFdWzFdOwogICAgICBjb25zdCBjaHVua3MgPSBjb250ZXh0Mi5zbGljZVN0cmVhbShkYXRhKTsKICAgICAgbGV0IGluZGV4MiA9IGNodW5rcy5sZW5ndGg7CiAgICAgIGxldCBidWZmZXJJbmRleCA9IC0xOwogICAgICBsZXQgc2l6ZSA9IDA7CiAgICAgIGxldCB0YWJzOwogICAgICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgICAgICBjb25zdCBjaHVuayA9IGNodW5rc1tpbmRleDJdOwogICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBidWZmZXJJbmRleCA9IGNodW5rLmxlbmd0aDsKICAgICAgICAgIHdoaWxlIChjaHVuay5jaGFyQ29kZUF0KGJ1ZmZlckluZGV4IC0gMSkgPT09IDMyKSB7CiAgICAgICAgICAgIHNpemUrKzsKICAgICAgICAgICAgYnVmZmVySW5kZXgtLTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChidWZmZXJJbmRleCkgYnJlYWs7CiAgICAgICAgICBidWZmZXJJbmRleCA9IC0xOwogICAgICAgIH0gZWxzZSBpZiAoY2h1bmsgPT09IC0yKSB7CiAgICAgICAgICB0YWJzID0gdHJ1ZTsKICAgICAgICAgIHNpemUrKzsKICAgICAgICB9IGVsc2UgaWYgKGNodW5rID09PSAtMSkgewogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbmRleDIrKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoY29udGV4dDIuX2NvbnRlbnRUeXBlVGV4dFRyYWlsaW5nICYmIGV2ZW50SW5kZXggPT09IGV2ZW50cy5sZW5ndGgpIHsKICAgICAgICBzaXplID0gMDsKICAgICAgfQogICAgICBpZiAoc2l6ZSkgewogICAgICAgIGNvbnN0IHRva2VuID0gewogICAgICAgICAgdHlwZTogZXZlbnRJbmRleCA9PT0gZXZlbnRzLmxlbmd0aCB8fCB0YWJzIHx8IHNpemUgPCAyID8gImxpbmVTdWZmaXgiIDogImhhcmRCcmVha1RyYWlsaW5nIiwKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIF9idWZmZXJJbmRleDogaW5kZXgyID8gYnVmZmVySW5kZXggOiBkYXRhLnN0YXJ0Ll9idWZmZXJJbmRleCArIGJ1ZmZlckluZGV4LAogICAgICAgICAgICBfaW5kZXg6IGRhdGEuc3RhcnQuX2luZGV4ICsgaW5kZXgyLAogICAgICAgICAgICBsaW5lOiBkYXRhLmVuZC5saW5lLAogICAgICAgICAgICBjb2x1bW46IGRhdGEuZW5kLmNvbHVtbiAtIHNpemUsCiAgICAgICAgICAgIG9mZnNldDogZGF0YS5lbmQub2Zmc2V0IC0gc2l6ZQogICAgICAgICAgfSwKICAgICAgICAgIGVuZDogewogICAgICAgICAgICAuLi5kYXRhLmVuZAogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgZGF0YS5lbmQgPSB7CiAgICAgICAgICAuLi50b2tlbi5zdGFydAogICAgICAgIH07CiAgICAgICAgaWYgKGRhdGEuc3RhcnQub2Zmc2V0ID09PSBkYXRhLmVuZC5vZmZzZXQpIHsKICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YSwgdG9rZW4pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBldmVudHMuc3BsaWNlKGV2ZW50SW5kZXgsIDAsIFsiZW50ZXIiLCB0b2tlbiwgY29udGV4dDJdLCBbImV4aXQiLCB0b2tlbiwgY29udGV4dDJdKTsKICAgICAgICAgIGV2ZW50SW5kZXggKz0gMjsKICAgICAgICB9CiAgICAgIH0KICAgICAgZXZlbnRJbmRleCsrOwogICAgfQogIH0KICByZXR1cm4gZXZlbnRzOwp9CnZhciByZXNvbHZlciwgc3RyaW5nLCB0ZXh0MzsKdmFyIGluaXRfdGV4dDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvaW5pdGlhbGl6ZS90ZXh0LmpzIigpIHsKICAgIHJlc29sdmVyID0gewogICAgICByZXNvbHZlQWxsOiBjcmVhdGVSZXNvbHZlcigpCiAgICB9OwogICAgc3RyaW5nID0gaW5pdGlhbGl6ZUZhY3RvcnkoInN0cmluZyIpOwogICAgdGV4dDMgPSBpbml0aWFsaXplRmFjdG9yeSgidGV4dCIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2NvbnN0cnVjdHMuanMKdmFyIGNvbnN0cnVjdHNfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChjb25zdHJ1Y3RzX2V4cG9ydHMsIHsKICBhdHRlbnRpb25NYXJrZXJzOiAoKSA9PiBhdHRlbnRpb25NYXJrZXJzLAogIGNvbnRlbnRJbml0aWFsOiAoKSA9PiBjb250ZW50SW5pdGlhbCwKICBkaXNhYmxlOiAoKSA9PiBkaXNhYmxlLAogIGRvY3VtZW50OiAoKSA9PiBkb2N1bWVudDMsCiAgZmxvdzogKCkgPT4gZmxvdzIsCiAgZmxvd0luaXRpYWw6ICgpID0+IGZsb3dJbml0aWFsLAogIGluc2lkZVNwYW46ICgpID0+IGluc2lkZVNwYW4sCiAgc3RyaW5nOiAoKSA9PiBzdHJpbmcyLAogIHRleHQ6ICgpID0+IHRleHQ0Cn0pOwp2YXIgZG9jdW1lbnQzLCBjb250ZW50SW5pdGlhbCwgZmxvd0luaXRpYWwsIGZsb3cyLCBzdHJpbmcyLCB0ZXh0NCwgaW5zaWRlU3BhbiwgYXR0ZW50aW9uTWFya2VycywgZGlzYWJsZTsKdmFyIGluaXRfY29uc3RydWN0cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9jb25zdHJ1Y3RzLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2NvcmVfY29tbW9ubWFyaygpOwogICAgaW5pdF90ZXh0MigpOwogICAgZG9jdW1lbnQzID0gewogICAgICBbNDJdOiBsaXN0MywKICAgICAgWzQzXTogbGlzdDMsCiAgICAgIFs0NV06IGxpc3QzLAogICAgICBbNDhdOiBsaXN0MywKICAgICAgWzQ5XTogbGlzdDMsCiAgICAgIFs1MF06IGxpc3QzLAogICAgICBbNTFdOiBsaXN0MywKICAgICAgWzUyXTogbGlzdDMsCiAgICAgIFs1M106IGxpc3QzLAogICAgICBbNTRdOiBsaXN0MywKICAgICAgWzU1XTogbGlzdDMsCiAgICAgIFs1Nl06IGxpc3QzLAogICAgICBbNTddOiBsaXN0MywKICAgICAgWzYyXTogYmxvY2tRdW90ZQogICAgfTsKICAgIGNvbnRlbnRJbml0aWFsID0gewogICAgICBbOTFdOiBkZWZpbml0aW9uMgogICAgfTsKICAgIGZsb3dJbml0aWFsID0gewogICAgICBbLTJdOiBjb2RlSW5kZW50ZWQsCiAgICAgIFstMV06IGNvZGVJbmRlbnRlZCwKICAgICAgWzMyXTogY29kZUluZGVudGVkCiAgICB9OwogICAgZmxvdzIgPSB7CiAgICAgIFszNV06IGhlYWRpbmdBdHgsCiAgICAgIFs0Ml06IHRoZW1hdGljQnJlYWsyLAogICAgICBbNDVdOiBbc2V0ZXh0VW5kZXJsaW5lLCB0aGVtYXRpY0JyZWFrMl0sCiAgICAgIFs2MF06IGh0bWxGbG93LAogICAgICBbNjFdOiBzZXRleHRVbmRlcmxpbmUsCiAgICAgIFs5NV06IHRoZW1hdGljQnJlYWsyLAogICAgICBbOTZdOiBjb2RlRmVuY2VkLAogICAgICBbMTI2XTogY29kZUZlbmNlZAogICAgfTsKICAgIHN0cmluZzIgPSB7CiAgICAgIFszOF06IGNoYXJhY3RlclJlZmVyZW5jZSwKICAgICAgWzkyXTogY2hhcmFjdGVyRXNjYXBlCiAgICB9OwogICAgdGV4dDQgPSB7CiAgICAgIFstNV06IGxpbmVFbmRpbmcsCiAgICAgIFstNF06IGxpbmVFbmRpbmcsCiAgICAgIFstM106IGxpbmVFbmRpbmcsCiAgICAgIFszM106IGxhYmVsU3RhcnRJbWFnZSwKICAgICAgWzM4XTogY2hhcmFjdGVyUmVmZXJlbmNlLAogICAgICBbNDJdOiBhdHRlbnRpb24sCiAgICAgIFs2MF06IFthdXRvbGluaywgaHRtbFRleHRdLAogICAgICBbOTFdOiBsYWJlbFN0YXJ0TGluaywKICAgICAgWzkyXTogW2hhcmRCcmVha0VzY2FwZSwgY2hhcmFjdGVyRXNjYXBlXSwKICAgICAgWzkzXTogbGFiZWxFbmQsCiAgICAgIFs5NV06IGF0dGVudGlvbiwKICAgICAgWzk2XTogY29kZVRleHQKICAgIH07CiAgICBpbnNpZGVTcGFuID0gewogICAgICBudWxsOiBbYXR0ZW50aW9uLCByZXNvbHZlcl0KICAgIH07CiAgICBhdHRlbnRpb25NYXJrZXJzID0gewogICAgICBudWxsOiBbNDIsIDk1XQogICAgfTsKICAgIGRpc2FibGUgPSB7CiAgICAgIG51bGw6IFtdCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2NyZWF0ZS10b2tlbml6ZXIuanMKZnVuY3Rpb24gY3JlYXRlVG9rZW5pemVyKHBhcnNlciwgaW5pdGlhbGl6ZSwgZnJvbTIpIHsKICBsZXQgcG9pbnQ0ID0gewogICAgX2J1ZmZlckluZGV4OiAtMSwKICAgIF9pbmRleDogMCwKICAgIGxpbmU6IGZyb20yICYmIGZyb20yLmxpbmUgfHwgMSwKICAgIGNvbHVtbjogZnJvbTIgJiYgZnJvbTIuY29sdW1uIHx8IDEsCiAgICBvZmZzZXQ6IGZyb20yICYmIGZyb20yLm9mZnNldCB8fCAwCiAgfTsKICBjb25zdCBjb2x1bW5TdGFydCA9IHt9OwogIGNvbnN0IHJlc29sdmVBbGxDb25zdHJ1Y3RzID0gW107CiAgbGV0IGNodW5rcyA9IFtdOwogIGxldCBzdGFjayA9IFtdOwogIGxldCBjb25zdW1lZCA9IHRydWU7CiAgY29uc3QgZWZmZWN0cyA9IHsKICAgIGF0dGVtcHQ6IGNvbnN0cnVjdEZhY3Rvcnkob25zdWNjZXNzZnVsY29uc3RydWN0KSwKICAgIGNoZWNrOiBjb25zdHJ1Y3RGYWN0b3J5KG9uc3VjY2Vzc2Z1bGNoZWNrKSwKICAgIGNvbnN1bWUsCiAgICBlbnRlciwKICAgIGV4aXQ6IGV4aXQzLAogICAgaW50ZXJydXB0OiBjb25zdHJ1Y3RGYWN0b3J5KG9uc3VjY2Vzc2Z1bGNoZWNrLCB7CiAgICAgIGludGVycnVwdDogdHJ1ZQogICAgfSkKICB9OwogIGNvbnN0IGNvbnRleHQyID0gewogICAgY29kZTogbnVsbCwKICAgIGNvbnRhaW5lclN0YXRlOiB7fSwKICAgIGRlZmluZVNraXAsCiAgICBldmVudHM6IFtdLAogICAgbm93OiBub3cyLAogICAgcGFyc2VyLAogICAgcHJldmlvdXM6IG51bGwsCiAgICBzbGljZVNlcmlhbGl6ZSwKICAgIHNsaWNlU3RyZWFtLAogICAgd3JpdGUKICB9OwogIGxldCBzdGF0ZTE0ID0gaW5pdGlhbGl6ZS50b2tlbml6ZS5jYWxsKGNvbnRleHQyLCBlZmZlY3RzKTsKICBsZXQgZXhwZWN0ZWRDb2RlOwogIGlmIChpbml0aWFsaXplLnJlc29sdmVBbGwpIHsKICAgIHJlc29sdmVBbGxDb25zdHJ1Y3RzLnB1c2goaW5pdGlhbGl6ZSk7CiAgfQogIHJldHVybiBjb250ZXh0MjsKICBmdW5jdGlvbiB3cml0ZShzbGljZSkgewogICAgY2h1bmtzID0gcHVzaChjaHVua3MsIHNsaWNlKTsKICAgIG1haW4oKTsKICAgIGlmIChjaHVua3NbY2h1bmtzLmxlbmd0aCAtIDFdICE9PSBudWxsKSB7CiAgICAgIHJldHVybiBbXTsKICAgIH0KICAgIGFkZFJlc3VsdChpbml0aWFsaXplLCAwKTsKICAgIGNvbnRleHQyLmV2ZW50cyA9IHJlc29sdmVBbGwocmVzb2x2ZUFsbENvbnN0cnVjdHMsIGNvbnRleHQyLmV2ZW50cywgY29udGV4dDIpOwogICAgcmV0dXJuIGNvbnRleHQyLmV2ZW50czsKICB9CiAgZnVuY3Rpb24gc2xpY2VTZXJpYWxpemUodG9rZW4sIGV4cGFuZFRhYnMpIHsKICAgIHJldHVybiBzZXJpYWxpemVDaHVua3Moc2xpY2VTdHJlYW0odG9rZW4pLCBleHBhbmRUYWJzKTsKICB9CiAgZnVuY3Rpb24gc2xpY2VTdHJlYW0odG9rZW4pIHsKICAgIHJldHVybiBzbGljZUNodW5rcyhjaHVua3MsIHRva2VuKTsKICB9CiAgZnVuY3Rpb24gbm93MigpIHsKICAgIGNvbnN0IHsKICAgICAgX2J1ZmZlckluZGV4LAogICAgICBfaW5kZXgsCiAgICAgIGxpbmUsCiAgICAgIGNvbHVtbiwKICAgICAgb2Zmc2V0CiAgICB9ID0gcG9pbnQ0OwogICAgcmV0dXJuIHsKICAgICAgX2J1ZmZlckluZGV4LAogICAgICBfaW5kZXgsCiAgICAgIGxpbmUsCiAgICAgIGNvbHVtbiwKICAgICAgb2Zmc2V0CiAgICB9OwogIH0KICBmdW5jdGlvbiBkZWZpbmVTa2lwKHZhbHVlMikgewogICAgY29sdW1uU3RhcnRbdmFsdWUyLmxpbmVdID0gdmFsdWUyLmNvbHVtbjsKICAgIGFjY291bnRGb3JQb3RlbnRpYWxTa2lwKCk7CiAgfQogIGZ1bmN0aW9uIG1haW4oKSB7CiAgICBsZXQgY2h1bmtJbmRleDsKICAgIHdoaWxlIChwb2ludDQuX2luZGV4IDwgY2h1bmtzLmxlbmd0aCkgewogICAgICBjb25zdCBjaHVuayA9IGNodW5rc1twb2ludDQuX2luZGV4XTsKICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gInN0cmluZyIpIHsKICAgICAgICBjaHVua0luZGV4ID0gcG9pbnQ0Ll9pbmRleDsKICAgICAgICBpZiAocG9pbnQ0Ll9idWZmZXJJbmRleCA8IDApIHsKICAgICAgICAgIHBvaW50NC5fYnVmZmVySW5kZXggPSAwOwogICAgICAgIH0KICAgICAgICB3aGlsZSAocG9pbnQ0Ll9pbmRleCA9PT0gY2h1bmtJbmRleCAmJiBwb2ludDQuX2J1ZmZlckluZGV4IDwgY2h1bmsubGVuZ3RoKSB7CiAgICAgICAgICBnbyhjaHVuay5jaGFyQ29kZUF0KHBvaW50NC5fYnVmZmVySW5kZXgpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZ28oY2h1bmspOwogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIGdvKGNvZGU0KSB7CiAgICBjb25zdW1lZCA9IHZvaWQgMDsKICAgIGV4cGVjdGVkQ29kZSA9IGNvZGU0OwogICAgc3RhdGUxNCA9IHN0YXRlMTQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb25zdW1lKGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBwb2ludDQubGluZSsrOwogICAgICBwb2ludDQuY29sdW1uID0gMTsKICAgICAgcG9pbnQ0Lm9mZnNldCArPSBjb2RlNCA9PT0gLTMgPyAyIDogMTsKICAgICAgYWNjb3VudEZvclBvdGVudGlhbFNraXAoKTsKICAgIH0gZWxzZSBpZiAoY29kZTQgIT09IC0xKSB7CiAgICAgIHBvaW50NC5jb2x1bW4rKzsKICAgICAgcG9pbnQ0Lm9mZnNldCsrOwogICAgfQogICAgaWYgKHBvaW50NC5fYnVmZmVySW5kZXggPCAwKSB7CiAgICAgIHBvaW50NC5faW5kZXgrKzsKICAgIH0gZWxzZSB7CiAgICAgIHBvaW50NC5fYnVmZmVySW5kZXgrKzsKICAgICAgaWYgKHBvaW50NC5fYnVmZmVySW5kZXggPT09IC8vIFBvaW50cyB3LyBub24tbmVnYXRpdmUgYF9idWZmZXJJbmRleGAgcmVmZXJlbmNlCiAgICAgIC8vIHN0cmluZ3MuCiAgICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqLwogICAgICBjaHVua3NbcG9pbnQ0Ll9pbmRleF0ubGVuZ3RoKSB7CiAgICAgICAgcG9pbnQ0Ll9idWZmZXJJbmRleCA9IC0xOwogICAgICAgIHBvaW50NC5faW5kZXgrKzsKICAgICAgfQogICAgfQogICAgY29udGV4dDIucHJldmlvdXMgPSBjb2RlNDsKICAgIGNvbnN1bWVkID0gdHJ1ZTsKICB9CiAgZnVuY3Rpb24gZW50ZXIodHlwZTUsIGZpZWxkcykgewogICAgY29uc3QgdG9rZW4gPSBmaWVsZHMgfHwge307CiAgICB0b2tlbi50eXBlID0gdHlwZTU7CiAgICB0b2tlbi5zdGFydCA9IG5vdzIoKTsKICAgIGNvbnRleHQyLmV2ZW50cy5wdXNoKFsiZW50ZXIiLCB0b2tlbiwgY29udGV4dDJdKTsKICAgIHN0YWNrLnB1c2godG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KICBmdW5jdGlvbiBleGl0Myh0eXBlNSkgewogICAgY29uc3QgdG9rZW4gPSBzdGFjay5wb3AoKTsKICAgIHRva2VuLmVuZCA9IG5vdzIoKTsKICAgIGNvbnRleHQyLmV2ZW50cy5wdXNoKFsiZXhpdCIsIHRva2VuLCBjb250ZXh0Ml0pOwogICAgcmV0dXJuIHRva2VuOwogIH0KICBmdW5jdGlvbiBvbnN1Y2Nlc3NmdWxjb25zdHJ1Y3QoY29uc3RydWN0LCBpbmZvKSB7CiAgICBhZGRSZXN1bHQoY29uc3RydWN0LCBpbmZvLmZyb20pOwogIH0KICBmdW5jdGlvbiBvbnN1Y2Nlc3NmdWxjaGVjayhfNCwgaW5mbykgewogICAgaW5mby5yZXN0b3JlKCk7CiAgfQogIGZ1bmN0aW9uIGNvbnN0cnVjdEZhY3Rvcnkob25yZXR1cm4sIGZpZWxkcykgewogICAgcmV0dXJuIGhvb2s7CiAgICBmdW5jdGlvbiBob29rKGNvbnN0cnVjdHMyLCByZXR1cm5TdGF0ZSwgYm9ndXNTdGF0ZSkgewogICAgICBsZXQgbGlzdE9mQ29uc3RydWN0czsKICAgICAgbGV0IGNvbnN0cnVjdEluZGV4OwogICAgICBsZXQgY3VycmVudENvbnN0cnVjdDsKICAgICAgbGV0IGluZm87CiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGNvbnN0cnVjdHMyKSA/ICgKICAgICAgICAvKiBjOCBpZ25vcmUgbmV4dCAxICovCiAgICAgICAgaGFuZGxlTGlzdE9mQ29uc3RydWN0cyhjb25zdHJ1Y3RzMikKICAgICAgKSA6ICJ0b2tlbml6ZSIgaW4gY29uc3RydWN0czIgPyAoCiAgICAgICAgLy8gTG9va3MgbGlrZSBhIGNvbnN0cnVjdC4KICAgICAgICBoYW5kbGVMaXN0T2ZDb25zdHJ1Y3RzKFsKICAgICAgICAgIC8qKiBAdHlwZSB7Q29uc3RydWN0fSAqLwogICAgICAgICAgY29uc3RydWN0czIKICAgICAgICBdKQogICAgICApIDogaGFuZGxlTWFwT2ZDb25zdHJ1Y3RzKGNvbnN0cnVjdHMyKTsKICAgICAgZnVuY3Rpb24gaGFuZGxlTWFwT2ZDb25zdHJ1Y3RzKG1hcDcpIHsKICAgICAgICByZXR1cm4gc3RhcnQ7CiAgICAgICAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgICAgICAgIGNvbnN0IGxlZnQgPSBjb2RlNCAhPT0gbnVsbCAmJiBtYXA3W2NvZGU0XTsKICAgICAgICAgIGNvbnN0IGFsbDMgPSBjb2RlNCAhPT0gbnVsbCAmJiBtYXA3Lm51bGw7CiAgICAgICAgICBjb25zdCBsaXN0NSA9IFsKICAgICAgICAgICAgLy8gVG8gZG86IGFkZCBtb3JlIGV4dGVuc2lvbiB0ZXN0cy4KICAgICAgICAgICAgLyogYzggaWdub3JlIG5leHQgMiAqLwogICAgICAgICAgICAuLi5BcnJheS5pc0FycmF5KGxlZnQpID8gbGVmdCA6IGxlZnQgPyBbbGVmdF0gOiBbXSwKICAgICAgICAgICAgLi4uQXJyYXkuaXNBcnJheShhbGwzKSA/IGFsbDMgOiBhbGwzID8gW2FsbDNdIDogW10KICAgICAgICAgIF07CiAgICAgICAgICByZXR1cm4gaGFuZGxlTGlzdE9mQ29uc3RydWN0cyhsaXN0NSkoY29kZTQpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBoYW5kbGVMaXN0T2ZDb25zdHJ1Y3RzKGxpc3Q1KSB7CiAgICAgICAgbGlzdE9mQ29uc3RydWN0cyA9IGxpc3Q1OwogICAgICAgIGNvbnN0cnVjdEluZGV4ID0gMDsKICAgICAgICBpZiAobGlzdDUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gYm9ndXNTdGF0ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGhhbmRsZUNvbnN0cnVjdChsaXN0NVtjb25zdHJ1Y3RJbmRleF0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGhhbmRsZUNvbnN0cnVjdChjb25zdHJ1Y3QpIHsKICAgICAgICByZXR1cm4gc3RhcnQ7CiAgICAgICAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgICAgICAgIGluZm8gPSBzdG9yZSgpOwogICAgICAgICAgY3VycmVudENvbnN0cnVjdCA9IGNvbnN0cnVjdDsKICAgICAgICAgIGlmICghY29uc3RydWN0LnBhcnRpYWwpIHsKICAgICAgICAgICAgY29udGV4dDIuY3VycmVudENvbnN0cnVjdCA9IGNvbnN0cnVjdDsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjb25zdHJ1Y3QubmFtZSAmJiBjb250ZXh0Mi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoY29uc3RydWN0Lm5hbWUpKSB7CiAgICAgICAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdC50b2tlbml6ZS5jYWxsKAogICAgICAgICAgICAvLyBJZiB3ZSBkbyBoYXZlIGZpZWxkcywgY3JlYXRlIGFuIG9iamVjdCB3LyBgY29udGV4dGAgYXMgaXRzCiAgICAgICAgICAgIC8vIHByb3RvdHlwZS4KICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgYSDigJxsaXZlIGJpbmRpbmfigJ0sIHdoaWNoIGlzIG5lZWRlZCBmb3IgYGludGVycnVwdGAuCiAgICAgICAgICAgIGZpZWxkcyA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShjb250ZXh0MiksIGZpZWxkcykgOiBjb250ZXh0MiwKICAgICAgICAgICAgZWZmZWN0cywKICAgICAgICAgICAgb2szLAogICAgICAgICAgICBub2sKICAgICAgICAgICkoY29kZTQpOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBvazMoY29kZTQpIHsKICAgICAgICBjb25zdW1lZCA9IHRydWU7CiAgICAgICAgb25yZXR1cm4oY3VycmVudENvbnN0cnVjdCwgaW5mbyk7CiAgICAgICAgcmV0dXJuIHJldHVyblN0YXRlOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIG5vayhjb2RlNCkgewogICAgICAgIGNvbnN1bWVkID0gdHJ1ZTsKICAgICAgICBpbmZvLnJlc3RvcmUoKTsKICAgICAgICBpZiAoKytjb25zdHJ1Y3RJbmRleCA8IGxpc3RPZkNvbnN0cnVjdHMubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gaGFuZGxlQ29uc3RydWN0KGxpc3RPZkNvbnN0cnVjdHNbY29uc3RydWN0SW5kZXhdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJvZ3VzU3RhdGU7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gYWRkUmVzdWx0KGNvbnN0cnVjdCwgZnJvbTMpIHsKICAgIGlmIChjb25zdHJ1Y3QucmVzb2x2ZUFsbCAmJiAhcmVzb2x2ZUFsbENvbnN0cnVjdHMuaW5jbHVkZXMoY29uc3RydWN0KSkgewogICAgICByZXNvbHZlQWxsQ29uc3RydWN0cy5wdXNoKGNvbnN0cnVjdCk7CiAgICB9CiAgICBpZiAoY29uc3RydWN0LnJlc29sdmUpIHsKICAgICAgc3BsaWNlKGNvbnRleHQyLmV2ZW50cywgZnJvbTMsIGNvbnRleHQyLmV2ZW50cy5sZW5ndGggLSBmcm9tMywgY29uc3RydWN0LnJlc29sdmUoY29udGV4dDIuZXZlbnRzLnNsaWNlKGZyb20zKSwgY29udGV4dDIpKTsKICAgIH0KICAgIGlmIChjb25zdHJ1Y3QucmVzb2x2ZVRvKSB7CiAgICAgIGNvbnRleHQyLmV2ZW50cyA9IGNvbnN0cnVjdC5yZXNvbHZlVG8oY29udGV4dDIuZXZlbnRzLCBjb250ZXh0Mik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHN0b3JlKCkgewogICAgY29uc3Qgc3RhcnRQb2ludCA9IG5vdzIoKTsKICAgIGNvbnN0IHN0YXJ0UHJldmlvdXMgPSBjb250ZXh0Mi5wcmV2aW91czsKICAgIGNvbnN0IHN0YXJ0Q3VycmVudENvbnN0cnVjdCA9IGNvbnRleHQyLmN1cnJlbnRDb25zdHJ1Y3Q7CiAgICBjb25zdCBzdGFydEV2ZW50c0luZGV4ID0gY29udGV4dDIuZXZlbnRzLmxlbmd0aDsKICAgIGNvbnN0IHN0YXJ0U3RhY2sgPSBBcnJheS5mcm9tKHN0YWNrKTsKICAgIHJldHVybiB7CiAgICAgIGZyb206IHN0YXJ0RXZlbnRzSW5kZXgsCiAgICAgIHJlc3RvcmUKICAgIH07CiAgICBmdW5jdGlvbiByZXN0b3JlKCkgewogICAgICBwb2ludDQgPSBzdGFydFBvaW50OwogICAgICBjb250ZXh0Mi5wcmV2aW91cyA9IHN0YXJ0UHJldmlvdXM7CiAgICAgIGNvbnRleHQyLmN1cnJlbnRDb25zdHJ1Y3QgPSBzdGFydEN1cnJlbnRDb25zdHJ1Y3Q7CiAgICAgIGNvbnRleHQyLmV2ZW50cy5sZW5ndGggPSBzdGFydEV2ZW50c0luZGV4OwogICAgICBzdGFjayA9IHN0YXJ0U3RhY2s7CiAgICAgIGFjY291bnRGb3JQb3RlbnRpYWxTa2lwKCk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGFjY291bnRGb3JQb3RlbnRpYWxTa2lwKCkgewogICAgaWYgKHBvaW50NC5saW5lIGluIGNvbHVtblN0YXJ0ICYmIHBvaW50NC5jb2x1bW4gPCAyKSB7CiAgICAgIHBvaW50NC5jb2x1bW4gPSBjb2x1bW5TdGFydFtwb2ludDQubGluZV07CiAgICAgIHBvaW50NC5vZmZzZXQgKz0gY29sdW1uU3RhcnRbcG9pbnQ0LmxpbmVdIC0gMTsKICAgIH0KICB9Cn0KZnVuY3Rpb24gc2xpY2VDaHVua3MoY2h1bmtzLCB0b2tlbikgewogIGNvbnN0IHN0YXJ0SW5kZXggPSB0b2tlbi5zdGFydC5faW5kZXg7CiAgY29uc3Qgc3RhcnRCdWZmZXJJbmRleCA9IHRva2VuLnN0YXJ0Ll9idWZmZXJJbmRleDsKICBjb25zdCBlbmRJbmRleCA9IHRva2VuLmVuZC5faW5kZXg7CiAgY29uc3QgZW5kQnVmZmVySW5kZXggPSB0b2tlbi5lbmQuX2J1ZmZlckluZGV4OwogIGxldCB2aWV3OwogIGlmIChzdGFydEluZGV4ID09PSBlbmRJbmRleCkgewogICAgdmlldyA9IFtjaHVua3Nbc3RhcnRJbmRleF0uc2xpY2Uoc3RhcnRCdWZmZXJJbmRleCwgZW5kQnVmZmVySW5kZXgpXTsKICB9IGVsc2UgewogICAgdmlldyA9IGNodW5rcy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7CiAgICBpZiAoc3RhcnRCdWZmZXJJbmRleCA+IC0xKSB7CiAgICAgIGNvbnN0IGhlYWQyID0gdmlld1swXTsKICAgICAgaWYgKHR5cGVvZiBoZWFkMiA9PT0gInN0cmluZyIpIHsKICAgICAgICB2aWV3WzBdID0gaGVhZDIuc2xpY2Uoc3RhcnRCdWZmZXJJbmRleCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmlldy5zaGlmdCgpOwogICAgICB9CiAgICB9CiAgICBpZiAoZW5kQnVmZmVySW5kZXggPiAwKSB7CiAgICAgIHZpZXcucHVzaChjaHVua3NbZW5kSW5kZXhdLnNsaWNlKDAsIGVuZEJ1ZmZlckluZGV4KSk7CiAgICB9CiAgfQogIHJldHVybiB2aWV3Owp9CmZ1bmN0aW9uIHNlcmlhbGl6ZUNodW5rcyhjaHVua3MsIGV4cGFuZFRhYnMpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgY29uc3QgcmVzdWx0ID0gW107CiAgbGV0IGF0VGFiOwogIHdoaWxlICgrK2luZGV4MiA8IGNodW5rcy5sZW5ndGgpIHsKICAgIGNvbnN0IGNodW5rID0gY2h1bmtzW2luZGV4Ml07CiAgICBsZXQgdmFsdWUyOwogICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gInN0cmluZyIpIHsKICAgICAgdmFsdWUyID0gY2h1bms7CiAgICB9IGVsc2Ugc3dpdGNoIChjaHVuaykgewogICAgICBjYXNlIC01OiB7CiAgICAgICAgdmFsdWUyID0gIlxyIjsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIC00OiB7CiAgICAgICAgdmFsdWUyID0gIlxuIjsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIC0zOiB7CiAgICAgICAgdmFsdWUyID0gIlxyXG4iOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgLTI6IHsKICAgICAgICB2YWx1ZTIgPSBleHBhbmRUYWJzID8gIiAiIDogIgkiOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgLTE6IHsKICAgICAgICBpZiAoIWV4cGFuZFRhYnMgJiYgYXRUYWIpIGNvbnRpbnVlOwogICAgICAgIHZhbHVlMiA9ICIgIjsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBkZWZhdWx0OiB7CiAgICAgICAgdmFsdWUyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaHVuayk7CiAgICAgIH0KICAgIH0KICAgIGF0VGFiID0gY2h1bmsgPT09IC0yOwogICAgcmVzdWx0LnB1c2godmFsdWUyKTsKICB9CiAgcmV0dXJuIHJlc3VsdC5qb2luKCIiKTsKfQp2YXIgaW5pdF9jcmVhdGVfdG9rZW5pemVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2NyZWF0ZS10b2tlbml6ZXIuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9yZXNvbHZlX2FsbCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL3BhcnNlLmpzCmZ1bmN0aW9uIHBhcnNlNChvcHRpb25zKSB7CiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9OwogIGNvbnN0IGNvbnN0cnVjdHMyID0gKAogICAgLyoqIEB0eXBlIHtGdWxsTm9ybWFsaXplZEV4dGVuc2lvbn0gKi8KICAgIGNvbWJpbmVFeHRlbnNpb25zKFtjb25zdHJ1Y3RzX2V4cG9ydHMsIC4uLnNldHRpbmdzLmV4dGVuc2lvbnMgfHwgW11dKQogICk7CiAgY29uc3QgcGFyc2VyID0gewogICAgY29uc3RydWN0czogY29uc3RydWN0czIsCiAgICBjb250ZW50OiBjcmVhdGU3KGNvbnRlbnQyKSwKICAgIGRlZmluZWQ6IFtdLAogICAgZG9jdW1lbnQ6IGNyZWF0ZTcoZG9jdW1lbnQyKSwKICAgIGZsb3c6IGNyZWF0ZTcoZmxvdyksCiAgICBsYXp5OiB7fSwKICAgIHN0cmluZzogY3JlYXRlNyhzdHJpbmcpLAogICAgdGV4dDogY3JlYXRlNyh0ZXh0MykKICB9OwogIHJldHVybiBwYXJzZXI7CiAgZnVuY3Rpb24gY3JlYXRlNyhpbml0aWFsMikgewogICAgcmV0dXJuIGNyZWF0b3I7CiAgICBmdW5jdGlvbiBjcmVhdG9yKGZyb20yKSB7CiAgICAgIHJldHVybiBjcmVhdGVUb2tlbml6ZXIocGFyc2VyLCBpbml0aWFsMiwgZnJvbTIpOwogICAgfQogIH0KfQp2YXIgaW5pdF9wYXJzZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvcGFyc2UuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jb21iaW5lX2V4dGVuc2lvbnMoKTsKICAgIGluaXRfY29udGVudDIoKTsKICAgIGluaXRfZG9jdW1lbnQoKTsKICAgIGluaXRfZmxvdygpOwogICAgaW5pdF90ZXh0MigpOwogICAgaW5pdF9jb25zdHJ1Y3RzKCk7CiAgICBpbml0X2NyZWF0ZV90b2tlbml6ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9wb3N0cHJvY2Vzcy5qcwpmdW5jdGlvbiBwb3N0cHJvY2VzcyhldmVudHMpIHsKICB3aGlsZSAoIXN1YnRva2VuaXplKGV2ZW50cykpIHsKICB9CiAgcmV0dXJuIGV2ZW50czsKfQp2YXIgaW5pdF9wb3N0cHJvY2VzcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9wb3N0cHJvY2Vzcy5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX3N1YnRva2VuaXplKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvcHJlcHJvY2Vzcy5qcwpmdW5jdGlvbiBwcmVwcm9jZXNzKCkgewogIGxldCBjb2x1bW4gPSAxOwogIGxldCBidWZmZXIyID0gIiI7CiAgbGV0IHN0YXJ0ID0gdHJ1ZTsKICBsZXQgYXRDYXJyaWFnZVJldHVybjsKICByZXR1cm4gcHJlcHJvY2Vzc29yOwogIGZ1bmN0aW9uIHByZXByb2Nlc3Nvcih2YWx1ZTIsIGVuY29kaW5nLCBlbmQzKSB7CiAgICBjb25zdCBjaHVua3MgPSBbXTsKICAgIGxldCBtYXRjaDI7CiAgICBsZXQgbmV4dDI7CiAgICBsZXQgc3RhcnRQb3NpdGlvbjsKICAgIGxldCBlbmRQb3NpdGlvbjsKICAgIGxldCBjb2RlNDsKICAgIHZhbHVlMiA9IGJ1ZmZlcjIgKyAodHlwZW9mIHZhbHVlMiA9PT0gInN0cmluZyIgPyB2YWx1ZTIudG9TdHJpbmcoKSA6IG5ldyBUZXh0RGVjb2RlcihlbmNvZGluZyB8fCB2b2lkIDApLmRlY29kZSh2YWx1ZTIpKTsKICAgIHN0YXJ0UG9zaXRpb24gPSAwOwogICAgYnVmZmVyMiA9ICIiOwogICAgaWYgKHN0YXJ0KSB7CiAgICAgIGlmICh2YWx1ZTIuY2hhckNvZGVBdCgwKSA9PT0gNjUyNzkpIHsKICAgICAgICBzdGFydFBvc2l0aW9uKys7CiAgICAgIH0KICAgICAgc3RhcnQgPSB2b2lkIDA7CiAgICB9CiAgICB3aGlsZSAoc3RhcnRQb3NpdGlvbiA8IHZhbHVlMi5sZW5ndGgpIHsKICAgICAgc2VhcmNoLmxhc3RJbmRleCA9IHN0YXJ0UG9zaXRpb247CiAgICAgIG1hdGNoMiA9IHNlYXJjaC5leGVjKHZhbHVlMik7CiAgICAgIGVuZFBvc2l0aW9uID0gbWF0Y2gyICYmIG1hdGNoMi5pbmRleCAhPT0gdm9pZCAwID8gbWF0Y2gyLmluZGV4IDogdmFsdWUyLmxlbmd0aDsKICAgICAgY29kZTQgPSB2YWx1ZTIuY2hhckNvZGVBdChlbmRQb3NpdGlvbik7CiAgICAgIGlmICghbWF0Y2gyKSB7CiAgICAgICAgYnVmZmVyMiA9IHZhbHVlMi5zbGljZShzdGFydFBvc2l0aW9uKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpZiAoY29kZTQgPT09IDEwICYmIHN0YXJ0UG9zaXRpb24gPT09IGVuZFBvc2l0aW9uICYmIGF0Q2FycmlhZ2VSZXR1cm4pIHsKICAgICAgICBjaHVua3MucHVzaCgtMyk7CiAgICAgICAgYXRDYXJyaWFnZVJldHVybiA9IHZvaWQgMDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoYXRDYXJyaWFnZVJldHVybikgewogICAgICAgICAgY2h1bmtzLnB1c2goLTUpOwogICAgICAgICAgYXRDYXJyaWFnZVJldHVybiA9IHZvaWQgMDsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbikgewogICAgICAgICAgY2h1bmtzLnB1c2godmFsdWUyLnNsaWNlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSk7CiAgICAgICAgICBjb2x1bW4gKz0gZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKGNvZGU0KSB7CiAgICAgICAgICBjYXNlIDA6IHsKICAgICAgICAgICAgY2h1bmtzLnB1c2goNjU1MzMpOwogICAgICAgICAgICBjb2x1bW4rKzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIDk6IHsKICAgICAgICAgICAgbmV4dDIgPSBNYXRoLmNlaWwoY29sdW1uIC8gNCkgKiA0OwogICAgICAgICAgICBjaHVua3MucHVzaCgtMik7CiAgICAgICAgICAgIHdoaWxlIChjb2x1bW4rKyA8IG5leHQyKSBjaHVua3MucHVzaCgtMSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgY2FzZSAxMDogewogICAgICAgICAgICBjaHVua3MucHVzaCgtNCk7CiAgICAgICAgICAgIGNvbHVtbiA9IDE7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICBhdENhcnJpYWdlUmV0dXJuID0gdHJ1ZTsKICAgICAgICAgICAgY29sdW1uID0gMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhcnRQb3NpdGlvbiA9IGVuZFBvc2l0aW9uICsgMTsKICAgIH0KICAgIGlmIChlbmQzKSB7CiAgICAgIGlmIChhdENhcnJpYWdlUmV0dXJuKSBjaHVua3MucHVzaCgtNSk7CiAgICAgIGlmIChidWZmZXIyKSBjaHVua3MucHVzaChidWZmZXIyKTsKICAgICAgY2h1bmtzLnB1c2gobnVsbCk7CiAgICB9CiAgICByZXR1cm4gY2h1bmtzOwogIH0KfQp2YXIgc2VhcmNoOwp2YXIgaW5pdF9wcmVwcm9jZXNzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL3ByZXByb2Nlc3MuanMiKCkgewogICAgc2VhcmNoID0gL1tcMFx0XG5ccl0vZzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2luZGV4LmpzCmZ1bmN0aW9uIG1pY3JvbWFyayh2YWx1ZTIsIGVuY29kaW5nLCBvcHRpb25zKSB7CiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gInN0cmluZyIpIHsKICAgIG9wdGlvbnMgPSBlbmNvZGluZzsKICAgIGVuY29kaW5nID0gdm9pZCAwOwogIH0KICByZXR1cm4gY29tcGlsZShvcHRpb25zKShwb3N0cHJvY2VzcyhwYXJzZTQob3B0aW9ucykuZG9jdW1lbnQoKS53cml0ZShwcmVwcm9jZXNzKCkodmFsdWUyLCBlbmNvZGluZywgdHJ1ZSkpKSk7Cn0KdmFyIGluaXRfbWljcm9tYXJrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvaW5kZXguanMiKCkgewogICAgaW5pdF9jb21waWxlKCk7CiAgICBpbml0X3BhcnNlMigpOwogICAgaW5pdF9wb3N0cHJvY2VzcygpOwogICAgaW5pdF9wcmVwcm9jZXNzKCk7CiAgICBpbml0X2NvbXBpbGUoKTsKICAgIGluaXRfcGFyc2UyKCk7CiAgICBpbml0X3Bvc3Rwcm9jZXNzKCk7CiAgICBpbml0X3ByZXByb2Nlc3MoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bkAyLjAuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBmcm9tTWFya2Rvd24odmFsdWUyLCBlbmNvZGluZywgb3B0aW9ucykgewogIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICJzdHJpbmciKSB7CiAgICBvcHRpb25zID0gZW5jb2Rpbmc7CiAgICBlbmNvZGluZyA9IHZvaWQgMDsKICB9CiAgcmV0dXJuIGNvbXBpbGVyKG9wdGlvbnMpKHBvc3Rwcm9jZXNzKHBhcnNlNChvcHRpb25zKS5kb2N1bWVudCgpLndyaXRlKHByZXByb2Nlc3MoKSh2YWx1ZTIsIGVuY29kaW5nLCB0cnVlKSkpKTsKfQpmdW5jdGlvbiBjb21waWxlcihvcHRpb25zKSB7CiAgY29uc3QgY29uZmlnMyA9IHsKICAgIHRyYW5zZm9ybXM6IFtdLAogICAgY2FuQ29udGFpbkVvbHM6IFsiZW1waGFzaXMiLCAiZnJhZ21lbnQiLCAiaGVhZGluZyIsICJwYXJhZ3JhcGgiLCAic3Ryb25nIl0sCiAgICBlbnRlcjogewogICAgICBhdXRvbGluazogb3BlbmVyMihsaW5rMyksCiAgICAgIGF1dG9saW5rUHJvdG9jb2w6IG9uZW50ZXJkYXRhLAogICAgICBhdXRvbGlua0VtYWlsOiBvbmVudGVyZGF0YSwKICAgICAgYXR4SGVhZGluZzogb3BlbmVyMihoZWFkaW5nMyksCiAgICAgIGJsb2NrUXVvdGU6IG9wZW5lcjIoYmxvY2tRdW90ZTIpLAogICAgICBjaGFyYWN0ZXJFc2NhcGU6IG9uZW50ZXJkYXRhLAogICAgICBjaGFyYWN0ZXJSZWZlcmVuY2U6IG9uZW50ZXJkYXRhLAogICAgICBjb2RlRmVuY2VkOiBvcGVuZXIyKGNvZGVGbG93KSwKICAgICAgY29kZUZlbmNlZEZlbmNlSW5mbzogYnVmZmVyMiwKICAgICAgY29kZUZlbmNlZEZlbmNlTWV0YTogYnVmZmVyMiwKICAgICAgY29kZUluZGVudGVkOiBvcGVuZXIyKGNvZGVGbG93LCBidWZmZXIyKSwKICAgICAgY29kZVRleHQ6IG9wZW5lcjIoY29kZVRleHQyLCBidWZmZXIyKSwKICAgICAgY29kZVRleHREYXRhOiBvbmVudGVyZGF0YSwKICAgICAgZGF0YTogb25lbnRlcmRhdGEsCiAgICAgIGNvZGVGbG93VmFsdWU6IG9uZW50ZXJkYXRhLAogICAgICBkZWZpbml0aW9uOiBvcGVuZXIyKGRlZmluaXRpb24zKSwKICAgICAgZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOiBidWZmZXIyLAogICAgICBkZWZpbml0aW9uTGFiZWxTdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIGRlZmluaXRpb25UaXRsZVN0cmluZzogYnVmZmVyMiwKICAgICAgZW1waGFzaXM6IG9wZW5lcjIoZW1waGFzaXMzKSwKICAgICAgaGFyZEJyZWFrRXNjYXBlOiBvcGVuZXIyKGhhcmRCcmVhazMpLAogICAgICBoYXJkQnJlYWtUcmFpbGluZzogb3BlbmVyMihoYXJkQnJlYWszKSwKICAgICAgaHRtbEZsb3c6IG9wZW5lcjIoaHRtbDIwLCBidWZmZXIyKSwKICAgICAgaHRtbEZsb3dEYXRhOiBvbmVudGVyZGF0YSwKICAgICAgaHRtbFRleHQ6IG9wZW5lcjIoaHRtbDIwLCBidWZmZXIyKSwKICAgICAgaHRtbFRleHREYXRhOiBvbmVudGVyZGF0YSwKICAgICAgaW1hZ2U6IG9wZW5lcjIoaW1hZ2UzKSwKICAgICAgbGFiZWw6IGJ1ZmZlcjIsCiAgICAgIGxpbms6IG9wZW5lcjIobGluazMpLAogICAgICBsaXN0SXRlbTogb3BlbmVyMihsaXN0SXRlbTMpLAogICAgICBsaXN0SXRlbVZhbHVlOiBvbmVudGVybGlzdGl0ZW12YWx1ZSwKICAgICAgbGlzdE9yZGVyZWQ6IG9wZW5lcjIobGlzdDUsIG9uZW50ZXJsaXN0b3JkZXJlZCksCiAgICAgIGxpc3RVbm9yZGVyZWQ6IG9wZW5lcjIobGlzdDUpLAogICAgICBwYXJhZ3JhcGg6IG9wZW5lcjIocGFyYWdyYXBoMyksCiAgICAgIHJlZmVyZW5jZTogb25lbnRlcnJlZmVyZW5jZSwKICAgICAgcmVmZXJlbmNlU3RyaW5nOiBidWZmZXIyLAogICAgICByZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOiBidWZmZXIyLAogICAgICByZXNvdXJjZVRpdGxlU3RyaW5nOiBidWZmZXIyLAogICAgICBzZXRleHRIZWFkaW5nOiBvcGVuZXIyKGhlYWRpbmczKSwKICAgICAgc3Ryb25nOiBvcGVuZXIyKHN0cm9uZzMpLAogICAgICB0aGVtYXRpY0JyZWFrOiBvcGVuZXIyKHRoZW1hdGljQnJlYWs0KQogICAgfSwKICAgIGV4aXQ6IHsKICAgICAgYXR4SGVhZGluZzogY2xvc2VyKCksCiAgICAgIGF0eEhlYWRpbmdTZXF1ZW5jZTogb25leGl0YXR4aGVhZGluZ3NlcXVlbmNlLAogICAgICBhdXRvbGluazogY2xvc2VyKCksCiAgICAgIGF1dG9saW5rRW1haWw6IG9uZXhpdGF1dG9saW5rZW1haWwsCiAgICAgIGF1dG9saW5rUHJvdG9jb2w6IG9uZXhpdGF1dG9saW5rcHJvdG9jb2wsCiAgICAgIGJsb2NrUXVvdGU6IGNsb3NlcigpLAogICAgICBjaGFyYWN0ZXJFc2NhcGVWYWx1ZTogb25leGl0ZGF0YSwKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWw6IG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlciwKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYzogb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlbWFya2VyLAogICAgICBjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZTogb25leGl0Y2hhcmFjdGVycmVmZXJlbmNldmFsdWUsCiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZTogb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlLAogICAgICBjb2RlRmVuY2VkOiBjbG9zZXIob25leGl0Y29kZWZlbmNlZCksCiAgICAgIGNvZGVGZW5jZWRGZW5jZTogb25leGl0Y29kZWZlbmNlZGZlbmNlLAogICAgICBjb2RlRmVuY2VkRmVuY2VJbmZvOiBvbmV4aXRjb2RlZmVuY2VkZmVuY2VpbmZvLAogICAgICBjb2RlRmVuY2VkRmVuY2VNZXRhOiBvbmV4aXRjb2RlZmVuY2VkZmVuY2VtZXRhLAogICAgICBjb2RlRmxvd1ZhbHVlOiBvbmV4aXRkYXRhLAogICAgICBjb2RlSW5kZW50ZWQ6IGNsb3NlcihvbmV4aXRjb2RlaW5kZW50ZWQpLAogICAgICBjb2RlVGV4dDogY2xvc2VyKG9uZXhpdGNvZGV0ZXh0KSwKICAgICAgY29kZVRleHREYXRhOiBvbmV4aXRkYXRhLAogICAgICBkYXRhOiBvbmV4aXRkYXRhLAogICAgICBkZWZpbml0aW9uOiBjbG9zZXIoKSwKICAgICAgZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOiBvbmV4aXRkZWZpbml0aW9uZGVzdGluYXRpb25zdHJpbmcsCiAgICAgIGRlZmluaXRpb25MYWJlbFN0cmluZzogb25leGl0ZGVmaW5pdGlvbmxhYmVsc3RyaW5nLAogICAgICBkZWZpbml0aW9uVGl0bGVTdHJpbmc6IG9uZXhpdGRlZmluaXRpb250aXRsZXN0cmluZywKICAgICAgZW1waGFzaXM6IGNsb3NlcigpLAogICAgICBoYXJkQnJlYWtFc2NhcGU6IGNsb3NlcihvbmV4aXRoYXJkYnJlYWspLAogICAgICBoYXJkQnJlYWtUcmFpbGluZzogY2xvc2VyKG9uZXhpdGhhcmRicmVhayksCiAgICAgIGh0bWxGbG93OiBjbG9zZXIob25leGl0aHRtbGZsb3cpLAogICAgICBodG1sRmxvd0RhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGh0bWxUZXh0OiBjbG9zZXIob25leGl0aHRtbHRleHQpLAogICAgICBodG1sVGV4dERhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGltYWdlOiBjbG9zZXIob25leGl0aW1hZ2UpLAogICAgICBsYWJlbDogb25leGl0bGFiZWwsCiAgICAgIGxhYmVsVGV4dDogb25leGl0bGFiZWx0ZXh0LAogICAgICBsaW5lRW5kaW5nOiBvbmV4aXRsaW5lZW5kaW5nLAogICAgICBsaW5rOiBjbG9zZXIob25leGl0bGluayksCiAgICAgIGxpc3RJdGVtOiBjbG9zZXIoKSwKICAgICAgbGlzdE9yZGVyZWQ6IGNsb3NlcigpLAogICAgICBsaXN0VW5vcmRlcmVkOiBjbG9zZXIoKSwKICAgICAgcGFyYWdyYXBoOiBjbG9zZXIoKSwKICAgICAgcmVmZXJlbmNlU3RyaW5nOiBvbmV4aXRyZWZlcmVuY2VzdHJpbmcsCiAgICAgIHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6IG9uZXhpdHJlc291cmNlZGVzdGluYXRpb25zdHJpbmcsCiAgICAgIHJlc291cmNlVGl0bGVTdHJpbmc6IG9uZXhpdHJlc291cmNldGl0bGVzdHJpbmcsCiAgICAgIHJlc291cmNlOiBvbmV4aXRyZXNvdXJjZSwKICAgICAgc2V0ZXh0SGVhZGluZzogY2xvc2VyKG9uZXhpdHNldGV4dGhlYWRpbmcpLAogICAgICBzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlOiBvbmV4aXRzZXRleHRoZWFkaW5nbGluZXNlcXVlbmNlLAogICAgICBzZXRleHRIZWFkaW5nVGV4dDogb25leGl0c2V0ZXh0aGVhZGluZ3RleHQsCiAgICAgIHN0cm9uZzogY2xvc2VyKCksCiAgICAgIHRoZW1hdGljQnJlYWs6IGNsb3NlcigpCiAgICB9CiAgfTsKICBjb25maWd1cmUyKGNvbmZpZzMsIChvcHRpb25zIHx8IHt9KS5tZGFzdEV4dGVuc2lvbnMgfHwgW10pOwogIGNvbnN0IGRhdGEgPSB7fTsKICByZXR1cm4gY29tcGlsZTI7CiAgZnVuY3Rpb24gY29tcGlsZTIoZXZlbnRzKSB7CiAgICBsZXQgdHJlZSA9IHsKICAgICAgdHlwZTogInJvb3QiLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgICBjb25zdCBjb250ZXh0MiA9IHsKICAgICAgc3RhY2s6IFt0cmVlXSwKICAgICAgdG9rZW5TdGFjazogW10sCiAgICAgIGNvbmZpZzogY29uZmlnMywKICAgICAgZW50ZXIsCiAgICAgIGV4aXQ6IGV4aXQzLAogICAgICBidWZmZXI6IGJ1ZmZlcjIsCiAgICAgIHJlc3VtZSwKICAgICAgZGF0YQogICAgfTsKICAgIGNvbnN0IGxpc3RTdGFjayA9IFtdOwogICAgbGV0IGluZGV4MiA9IC0xOwogICAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImxpc3RPcmRlcmVkIiB8fCBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGlzdFVub3JkZXJlZCIpIHsKICAgICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMF0gPT09ICJlbnRlciIpIHsKICAgICAgICAgIGxpc3RTdGFjay5wdXNoKGluZGV4Mik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHRhaWwgPSBsaXN0U3RhY2sucG9wKCk7CiAgICAgICAgICBpbmRleDIgPSBwcmVwYXJlTGlzdChldmVudHMsIHRhaWwsIGluZGV4Mik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpbmRleDIgPSAtMTsKICAgIHdoaWxlICgrK2luZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBjb25maWczW2V2ZW50c1tpbmRleDJdWzBdXTsKICAgICAgaWYgKG93bjUuY2FsbChoYW5kbGVyMiwgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSkpIHsKICAgICAgICBoYW5kbGVyMltldmVudHNbaW5kZXgyXVsxXS50eXBlXS5jYWxsKE9iamVjdC5hc3NpZ24oewogICAgICAgICAgc2xpY2VTZXJpYWxpemU6IGV2ZW50c1tpbmRleDJdWzJdLnNsaWNlU2VyaWFsaXplCiAgICAgICAgfSwgY29udGV4dDIpLCBldmVudHNbaW5kZXgyXVsxXSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChjb250ZXh0Mi50b2tlblN0YWNrLmxlbmd0aCA+IDApIHsKICAgICAgY29uc3QgdGFpbCA9IGNvbnRleHQyLnRva2VuU3RhY2tbY29udGV4dDIudG9rZW5TdGFjay5sZW5ndGggLSAxXTsKICAgICAgY29uc3QgaGFuZGxlcjIgPSB0YWlsWzFdIHx8IGRlZmF1bHRPbkVycm9yOwogICAgICBoYW5kbGVyMi5jYWxsKGNvbnRleHQyLCB2b2lkIDAsIHRhaWxbMF0pOwogICAgfQogICAgdHJlZS5wb3NpdGlvbiA9IHsKICAgICAgc3RhcnQ6IHBvaW50MihldmVudHMubGVuZ3RoID4gMCA/IGV2ZW50c1swXVsxXS5zdGFydCA6IHsKICAgICAgICBsaW5lOiAxLAogICAgICAgIGNvbHVtbjogMSwKICAgICAgICBvZmZzZXQ6IDAKICAgICAgfSksCiAgICAgIGVuZDogcG9pbnQyKGV2ZW50cy5sZW5ndGggPiAwID8gZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAyXVsxXS5lbmQgOiB7CiAgICAgICAgbGluZTogMSwKICAgICAgICBjb2x1bW46IDEsCiAgICAgICAgb2Zmc2V0OiAwCiAgICAgIH0pCiAgICB9OwogICAgaW5kZXgyID0gLTE7CiAgICB3aGlsZSAoKytpbmRleDIgPCBjb25maWczLnRyYW5zZm9ybXMubGVuZ3RoKSB7CiAgICAgIHRyZWUgPSBjb25maWczLnRyYW5zZm9ybXNbaW5kZXgyXSh0cmVlKSB8fCB0cmVlOwogICAgfQogICAgcmV0dXJuIHRyZWU7CiAgfQogIGZ1bmN0aW9uIHByZXBhcmVMaXN0KGV2ZW50cywgc3RhcnQsIGxlbmd0aCkgewogICAgbGV0IGluZGV4MiA9IHN0YXJ0IC0gMTsKICAgIGxldCBjb250YWluZXJCYWxhbmNlID0gLTE7CiAgICBsZXQgbGlzdFNwcmVhZCA9IGZhbHNlOwogICAgbGV0IGxpc3RJdGVtNDsKICAgIGxldCBsaW5lSW5kZXg7CiAgICBsZXQgZmlyc3RCbGFua0xpbmVJbmRleDsKICAgIGxldCBhdE1hcmtlcjsKICAgIHdoaWxlICgrK2luZGV4MiA8PSBsZW5ndGgpIHsKICAgICAgY29uc3QgZXZlbnQgPSBldmVudHNbaW5kZXgyXTsKICAgICAgc3dpdGNoIChldmVudFsxXS50eXBlKSB7CiAgICAgICAgY2FzZSAibGlzdFVub3JkZXJlZCI6CiAgICAgICAgY2FzZSAibGlzdE9yZGVyZWQiOgogICAgICAgIGNhc2UgImJsb2NrUXVvdGUiOiB7CiAgICAgICAgICBpZiAoZXZlbnRbMF0gPT09ICJlbnRlciIpIHsKICAgICAgICAgICAgY29udGFpbmVyQmFsYW5jZSsrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29udGFpbmVyQmFsYW5jZS0tOwogICAgICAgICAgfQogICAgICAgICAgYXRNYXJrZXIgPSB2b2lkIDA7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAibGluZUVuZGluZ0JsYW5rIjogewogICAgICAgICAgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiKSB7CiAgICAgICAgICAgIGlmIChsaXN0SXRlbTQgJiYgIWF0TWFya2VyICYmICFjb250YWluZXJCYWxhbmNlICYmICFmaXJzdEJsYW5rTGluZUluZGV4KSB7CiAgICAgICAgICAgICAgZmlyc3RCbGFua0xpbmVJbmRleCA9IGluZGV4MjsKICAgICAgICAgICAgfQogICAgICAgICAgICBhdE1hcmtlciA9IHZvaWQgMDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjYXNlICJsaW5lUHJlZml4IjoKICAgICAgICBjYXNlICJsaXN0SXRlbVZhbHVlIjoKICAgICAgICBjYXNlICJsaXN0SXRlbU1hcmtlciI6CiAgICAgICAgY2FzZSAibGlzdEl0ZW1QcmVmaXgiOgogICAgICAgIGNhc2UgImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSI6IHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICBhdE1hcmtlciA9IHZvaWQgMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFjb250YWluZXJCYWxhbmNlICYmIGV2ZW50WzBdID09PSAiZW50ZXIiICYmIGV2ZW50WzFdLnR5cGUgPT09ICJsaXN0SXRlbVByZWZpeCIgfHwgY29udGFpbmVyQmFsYW5jZSA9PT0gLTEgJiYgZXZlbnRbMF0gPT09ICJleGl0IiAmJiAoZXZlbnRbMV0udHlwZSA9PT0gImxpc3RVbm9yZGVyZWQiIHx8IGV2ZW50WzFdLnR5cGUgPT09ICJsaXN0T3JkZXJlZCIpKSB7CiAgICAgICAgaWYgKGxpc3RJdGVtNCkgewogICAgICAgICAgbGV0IHRhaWxJbmRleCA9IGluZGV4MjsKICAgICAgICAgIGxpbmVJbmRleCA9IHZvaWQgMDsKICAgICAgICAgIHdoaWxlICh0YWlsSW5kZXgtLSkgewogICAgICAgICAgICBjb25zdCB0YWlsRXZlbnQgPSBldmVudHNbdGFpbEluZGV4XTsKICAgICAgICAgICAgaWYgKHRhaWxFdmVudFsxXS50eXBlID09PSAibGluZUVuZGluZyIgfHwgdGFpbEV2ZW50WzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nQmxhbmsiKSB7CiAgICAgICAgICAgICAgaWYgKHRhaWxFdmVudFswXSA9PT0gImV4aXQiKSBjb250aW51ZTsKICAgICAgICAgICAgICBpZiAobGluZUluZGV4KSB7CiAgICAgICAgICAgICAgICBldmVudHNbbGluZUluZGV4XVsxXS50eXBlID0gImxpbmVFbmRpbmdCbGFuayI7CiAgICAgICAgICAgICAgICBsaXN0U3ByZWFkID0gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdGFpbEV2ZW50WzFdLnR5cGUgPSAibGluZUVuZGluZyI7CiAgICAgICAgICAgICAgbGluZUluZGV4ID0gdGFpbEluZGV4OwogICAgICAgICAgICB9IGVsc2UgaWYgKHRhaWxFdmVudFsxXS50eXBlID09PSAibGluZVByZWZpeCIgfHwgdGFpbEV2ZW50WzFdLnR5cGUgPT09ICJibG9ja1F1b3RlUHJlZml4IiB8fCB0YWlsRXZlbnRbMV0udHlwZSA9PT0gImJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlIiB8fCB0YWlsRXZlbnRbMV0udHlwZSA9PT0gImJsb2NrUXVvdGVNYXJrZXIiIHx8IHRhaWxFdmVudFsxXS50eXBlID09PSAibGlzdEl0ZW1JbmRlbnQiKSB7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChmaXJzdEJsYW5rTGluZUluZGV4ICYmICghbGluZUluZGV4IHx8IGZpcnN0QmxhbmtMaW5lSW5kZXggPCBsaW5lSW5kZXgpKSB7CiAgICAgICAgICAgIGxpc3RJdGVtNC5fc3ByZWFkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGxpc3RJdGVtNC5lbmQgPSBPYmplY3QuYXNzaWduKHt9LCBsaW5lSW5kZXggPyBldmVudHNbbGluZUluZGV4XVsxXS5zdGFydCA6IGV2ZW50WzFdLmVuZCk7CiAgICAgICAgICBldmVudHMuc3BsaWNlKGxpbmVJbmRleCB8fCBpbmRleDIsIDAsIFsiZXhpdCIsIGxpc3RJdGVtNCwgZXZlbnRbMl1dKTsKICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgbGVuZ3RoKys7CiAgICAgICAgfQogICAgICAgIGlmIChldmVudFsxXS50eXBlID09PSAibGlzdEl0ZW1QcmVmaXgiKSB7CiAgICAgICAgICBjb25zdCBpdGVtID0gewogICAgICAgICAgICB0eXBlOiAibGlzdEl0ZW0iLAogICAgICAgICAgICBfc3ByZWFkOiBmYWxzZSwKICAgICAgICAgICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50WzFdLnN0YXJ0KSwKICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogd2XigJlsbCBhZGQgYGVuZGAgaW4gYSBzZWNvbmQuCiAgICAgICAgICAgIGVuZDogdm9pZCAwCiAgICAgICAgICB9OwogICAgICAgICAgbGlzdEl0ZW00ID0gaXRlbTsKICAgICAgICAgIGV2ZW50cy5zcGxpY2UoaW5kZXgyLCAwLCBbImVudGVyIiwgaXRlbSwgZXZlbnRbMl1dKTsKICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgbGVuZ3RoKys7CiAgICAgICAgICBmaXJzdEJsYW5rTGluZUluZGV4ID0gdm9pZCAwOwogICAgICAgICAgYXRNYXJrZXIgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZXZlbnRzW3N0YXJ0XVsxXS5fc3ByZWFkID0gbGlzdFNwcmVhZDsKICAgIHJldHVybiBsZW5ndGg7CiAgfQogIGZ1bmN0aW9uIG9wZW5lcjIoY3JlYXRlNywgYW5kKSB7CiAgICByZXR1cm4gb3BlbjsKICAgIGZ1bmN0aW9uIG9wZW4odG9rZW4pIHsKICAgICAgZW50ZXIuY2FsbCh0aGlzLCBjcmVhdGU3KHRva2VuKSwgdG9rZW4pOwogICAgICBpZiAoYW5kKSBhbmQuY2FsbCh0aGlzLCB0b2tlbik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGJ1ZmZlcjIoKSB7CiAgICB0aGlzLnN0YWNrLnB1c2goewogICAgICB0eXBlOiAiZnJhZ21lbnQiLAogICAgICBjaGlsZHJlbjogW10KICAgIH0pOwogIH0KICBmdW5jdGlvbiBlbnRlcihub2RlMiwgdG9rZW4sIGVycm9ySGFuZGxlcikgewogICAgY29uc3QgcGFyZW50ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgY29uc3Qgc2libGluZ3MyID0gcGFyZW50LmNoaWxkcmVuOwogICAgc2libGluZ3MyLnB1c2gobm9kZTIpOwogICAgdGhpcy5zdGFjay5wdXNoKG5vZGUyKTsKICAgIHRoaXMudG9rZW5TdGFjay5wdXNoKFt0b2tlbiwgZXJyb3JIYW5kbGVyIHx8IHZvaWQgMF0pOwogICAgbm9kZTIucG9zaXRpb24gPSB7CiAgICAgIHN0YXJ0OiBwb2ludDIodG9rZW4uc3RhcnQpLAogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBgZW5kYCB3aWxsIGJlIHBhdGNoZWQgbGF0ZXIuCiAgICAgIGVuZDogdm9pZCAwCiAgICB9OwogIH0KICBmdW5jdGlvbiBjbG9zZXIoYW5kKSB7CiAgICByZXR1cm4gY2xvc2U3OwogICAgZnVuY3Rpb24gY2xvc2U3KHRva2VuKSB7CiAgICAgIGlmIChhbmQpIGFuZC5jYWxsKHRoaXMsIHRva2VuKTsKICAgICAgZXhpdDMuY2FsbCh0aGlzLCB0b2tlbik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGV4aXQzKHRva2VuLCBvbkV4aXRFcnJvcikgewogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrLnBvcCgpOwogICAgY29uc3Qgb3BlbiA9IHRoaXMudG9rZW5TdGFjay5wb3AoKTsKICAgIGlmICghb3BlbikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjbG9zZSBgIiArIHRva2VuLnR5cGUgKyAiYCAoIiArIHN0cmluZ2lmeVBvc2l0aW9uKHsKICAgICAgICBzdGFydDogdG9rZW4uc3RhcnQsCiAgICAgICAgZW5kOiB0b2tlbi5lbmQKICAgICAgfSkgKyAiKTogaXRcdTIwMTlzIG5vdCBvcGVuIik7CiAgICB9IGVsc2UgaWYgKG9wZW5bMF0udHlwZSAhPT0gdG9rZW4udHlwZSkgewogICAgICBpZiAob25FeGl0RXJyb3IpIHsKICAgICAgICBvbkV4aXRFcnJvci5jYWxsKHRoaXMsIHRva2VuLCBvcGVuWzBdKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBoYW5kbGVyMiA9IG9wZW5bMV0gfHwgZGVmYXVsdE9uRXJyb3I7CiAgICAgICAgaGFuZGxlcjIuY2FsbCh0aGlzLCB0b2tlbiwgb3BlblswXSk7CiAgICAgIH0KICAgIH0KICAgIG5vZGUyLnBvc2l0aW9uLmVuZCA9IHBvaW50Mih0b2tlbi5lbmQpOwogIH0KICBmdW5jdGlvbiByZXN1bWUoKSB7CiAgICByZXR1cm4gdG9TdHJpbmcodGhpcy5zdGFjay5wb3AoKSk7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJsaXN0b3JkZXJlZCgpIHsKICAgIHRoaXMuZGF0YS5leHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWUgPSB0cnVlOwogIH0KICBmdW5jdGlvbiBvbmVudGVybGlzdGl0ZW12YWx1ZSh0b2tlbikgewogICAgaWYgKHRoaXMuZGF0YS5leHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWUpIHsKICAgICAgY29uc3QgYW5jZXN0b3IgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMl07CiAgICAgIGFuY2VzdG9yLnN0YXJ0ID0gTnVtYmVyLnBhcnNlSW50KHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pLCAxMCk7CiAgICAgIHRoaXMuZGF0YS5leHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWUgPSB2b2lkIDA7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGVmZW5jZWRmZW5jZWluZm8oKSB7CiAgICBjb25zdCBkYXRhMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLmxhbmcgPSBkYXRhMjsKICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZWZlbmNlZGZlbmNlbWV0YSgpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIubWV0YSA9IGRhdGEyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjb2RlZmVuY2VkZmVuY2UoKSB7CiAgICBpZiAodGhpcy5kYXRhLmZsb3dDb2RlSW5zaWRlKSByZXR1cm47CiAgICB0aGlzLmJ1ZmZlcigpOwogICAgdGhpcy5kYXRhLmZsb3dDb2RlSW5zaWRlID0gdHJ1ZTsKICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZWZlbmNlZCgpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudmFsdWUgPSBkYXRhMi5yZXBsYWNlKC9eKFxyP1xufFxyKXwoXHI/XG58XHIpJC9nLCAiIik7CiAgICB0aGlzLmRhdGEuZmxvd0NvZGVJbnNpZGUgPSB2b2lkIDA7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGVpbmRlbnRlZCgpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudmFsdWUgPSBkYXRhMi5yZXBsYWNlKC8oXHI/XG58XHIpJC9nLCAiIik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb25sYWJlbHN0cmluZyh0b2tlbikgewogICAgY29uc3QgbGFiZWwgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi5sYWJlbCA9IGxhYmVsOwogICAgbm9kZTIuaWRlbnRpZmllciA9IG5vcm1hbGl6ZUlkZW50aWZpZXIodGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikpLnRvTG93ZXJDYXNlKCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb250aXRsZXN0cmluZygpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudGl0bGUgPSBkYXRhMjsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbmRlc3RpbmF0aW9uc3RyaW5nKCkgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi51cmwgPSBkYXRhMjsKICB9CiAgZnVuY3Rpb24gb25leGl0YXR4aGVhZGluZ3NlcXVlbmNlKHRva2VuKSB7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIGlmICghbm9kZTIuZGVwdGgpIHsKICAgICAgY29uc3QgZGVwdGggPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKS5sZW5ndGg7CiAgICAgIG5vZGUyLmRlcHRoID0gZGVwdGg7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHNldGV4dGhlYWRpbmd0ZXh0KCkgewogICAgdGhpcy5kYXRhLnNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmcgPSB0cnVlOwogIH0KICBmdW5jdGlvbiBvbmV4aXRzZXRleHRoZWFkaW5nbGluZXNlcXVlbmNlKHRva2VuKSB7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLmRlcHRoID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikuY29kZVBvaW50QXQoMCkgPT09IDYxID8gMSA6IDI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHNldGV4dGhlYWRpbmcoKSB7CiAgICB0aGlzLmRhdGEuc2V0ZXh0SGVhZGluZ1NsdXJwTGluZUVuZGluZyA9IHZvaWQgMDsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmRhdGEodG9rZW4pIHsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgY29uc3Qgc2libGluZ3MyID0gbm9kZTIuY2hpbGRyZW47CiAgICBsZXQgdGFpbCA9IHNpYmxpbmdzMltzaWJsaW5nczIubGVuZ3RoIC0gMV07CiAgICBpZiAoIXRhaWwgfHwgdGFpbC50eXBlICE9PSAidGV4dCIpIHsKICAgICAgdGFpbCA9IHRleHQ5KCk7CiAgICAgIHRhaWwucG9zaXRpb24gPSB7CiAgICAgICAgc3RhcnQ6IHBvaW50Mih0b2tlbi5zdGFydCksCiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogd2XigJlsbCBhZGQgYGVuZGAgbGF0ZXIuCiAgICAgICAgZW5kOiB2b2lkIDAKICAgICAgfTsKICAgICAgc2libGluZ3MyLnB1c2godGFpbCk7CiAgICB9CiAgICB0aGlzLnN0YWNrLnB1c2godGFpbCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGRhdGEodG9rZW4pIHsKICAgIGNvbnN0IHRhaWwgPSB0aGlzLnN0YWNrLnBvcCgpOwogICAgdGFpbC52YWx1ZSArPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICAgIHRhaWwucG9zaXRpb24uZW5kID0gcG9pbnQyKHRva2VuLmVuZCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGxpbmVlbmRpbmcodG9rZW4pIHsKICAgIGNvbnN0IGNvbnRleHQyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgaWYgKHRoaXMuZGF0YS5hdEhhcmRCcmVhaykgewogICAgICBjb25zdCB0YWlsID0gY29udGV4dDIuY2hpbGRyZW5bY29udGV4dDIuY2hpbGRyZW4ubGVuZ3RoIC0gMV07CiAgICAgIHRhaWwucG9zaXRpb24uZW5kID0gcG9pbnQyKHRva2VuLmVuZCk7CiAgICAgIHRoaXMuZGF0YS5hdEhhcmRCcmVhayA9IHZvaWQgMDsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCF0aGlzLmRhdGEuc2V0ZXh0SGVhZGluZ1NsdXJwTGluZUVuZGluZyAmJiBjb25maWczLmNhbkNvbnRhaW5Fb2xzLmluY2x1ZGVzKGNvbnRleHQyLnR5cGUpKSB7CiAgICAgIG9uZW50ZXJkYXRhLmNhbGwodGhpcywgdG9rZW4pOwogICAgICBvbmV4aXRkYXRhLmNhbGwodGhpcywgdG9rZW4pOwogICAgfQogIH0KICBmdW5jdGlvbiBvbmV4aXRoYXJkYnJlYWsoKSB7CiAgICB0aGlzLmRhdGEuYXRIYXJkQnJlYWsgPSB0cnVlOwogIH0KICBmdW5jdGlvbiBvbmV4aXRodG1sZmxvdygpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudmFsdWUgPSBkYXRhMjsKICB9CiAgZnVuY3Rpb24gb25leGl0aHRtbHRleHQoKSB7CiAgICBjb25zdCBkYXRhMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnZhbHVlID0gZGF0YTI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGV0ZXh0KCkgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi52YWx1ZSA9IGRhdGEyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRsaW5rKCkgewogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBpZiAodGhpcy5kYXRhLmluUmVmZXJlbmNlKSB7CiAgICAgIGNvbnN0IHJlZmVyZW5jZVR5cGUgPSB0aGlzLmRhdGEucmVmZXJlbmNlVHlwZSB8fCAic2hvcnRjdXQiOwogICAgICBub2RlMi50eXBlICs9ICJSZWZlcmVuY2UiOwogICAgICBub2RlMi5yZWZlcmVuY2VUeXBlID0gcmVmZXJlbmNlVHlwZTsKICAgICAgZGVsZXRlIG5vZGUyLnVybDsKICAgICAgZGVsZXRlIG5vZGUyLnRpdGxlOwogICAgfSBlbHNlIHsKICAgICAgZGVsZXRlIG5vZGUyLmlkZW50aWZpZXI7CiAgICAgIGRlbGV0ZSBub2RlMi5sYWJlbDsKICAgIH0KICAgIHRoaXMuZGF0YS5yZWZlcmVuY2VUeXBlID0gdm9pZCAwOwogIH0KICBmdW5jdGlvbiBvbmV4aXRpbWFnZSgpIHsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgaWYgKHRoaXMuZGF0YS5pblJlZmVyZW5jZSkgewogICAgICBjb25zdCByZWZlcmVuY2VUeXBlID0gdGhpcy5kYXRhLnJlZmVyZW5jZVR5cGUgfHwgInNob3J0Y3V0IjsKICAgICAgbm9kZTIudHlwZSArPSAiUmVmZXJlbmNlIjsKICAgICAgbm9kZTIucmVmZXJlbmNlVHlwZSA9IHJlZmVyZW5jZVR5cGU7CiAgICAgIGRlbGV0ZSBub2RlMi51cmw7CiAgICAgIGRlbGV0ZSBub2RlMi50aXRsZTsKICAgIH0gZWxzZSB7CiAgICAgIGRlbGV0ZSBub2RlMi5pZGVudGlmaWVyOwogICAgICBkZWxldGUgbm9kZTIubGFiZWw7CiAgICB9CiAgICB0aGlzLmRhdGEucmVmZXJlbmNlVHlwZSA9IHZvaWQgMDsKICB9CiAgZnVuY3Rpb24gb25leGl0bGFiZWx0ZXh0KHRva2VuKSB7CiAgICBjb25zdCBzdHJpbmczID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgICBjb25zdCBhbmNlc3RvciA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAyXTsKICAgIGFuY2VzdG9yLmxhYmVsID0gZGVjb2RlU3RyaW5nKHN0cmluZzMpOwogICAgYW5jZXN0b3IuaWRlbnRpZmllciA9IG5vcm1hbGl6ZUlkZW50aWZpZXIoc3RyaW5nMykudG9Mb3dlckNhc2UoKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGFiZWwoKSB7CiAgICBjb25zdCBmcmFnbWVudCA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIGNvbnN0IHZhbHVlMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIHRoaXMuZGF0YS5pblJlZmVyZW5jZSA9IHRydWU7CiAgICBpZiAobm9kZTIudHlwZSA9PT0gImxpbmsiKSB7CiAgICAgIGNvbnN0IGNoaWxkcmVuMiA9IGZyYWdtZW50LmNoaWxkcmVuOwogICAgICBub2RlMi5jaGlsZHJlbiA9IGNoaWxkcmVuMjsKICAgIH0gZWxzZSB7CiAgICAgIG5vZGUyLmFsdCA9IHZhbHVlMjsKICAgIH0KICB9CiAgZnVuY3Rpb24gb25leGl0cmVzb3VyY2VkZXN0aW5hdGlvbnN0cmluZygpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudXJsID0gZGF0YTI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHJlc291cmNldGl0bGVzdHJpbmcoKSB7CiAgICBjb25zdCBkYXRhMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnRpdGxlID0gZGF0YTI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHJlc291cmNlKCkgewogICAgdGhpcy5kYXRhLmluUmVmZXJlbmNlID0gdm9pZCAwOwogIH0KICBmdW5jdGlvbiBvbmVudGVycmVmZXJlbmNlKCkgewogICAgdGhpcy5kYXRhLnJlZmVyZW5jZVR5cGUgPSAiY29sbGFwc2VkIjsKICB9CiAgZnVuY3Rpb24gb25leGl0cmVmZXJlbmNlc3RyaW5nKHRva2VuKSB7CiAgICBjb25zdCBsYWJlbCA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLmxhYmVsID0gbGFiZWw7CiAgICBub2RlMi5pZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcih0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKSkudG9Mb3dlckNhc2UoKTsKICAgIHRoaXMuZGF0YS5yZWZlcmVuY2VUeXBlID0gImZ1bGwiOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2VtYXJrZXIodG9rZW4pIHsKICAgIHRoaXMuZGF0YS5jaGFyYWN0ZXJSZWZlcmVuY2VUeXBlID0gdG9rZW4udHlwZTsKICB9CiAgZnVuY3Rpb24gb25leGl0Y2hhcmFjdGVycmVmZXJlbmNldmFsdWUodG9rZW4pIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgICBjb25zdCB0eXBlNSA9IHRoaXMuZGF0YS5jaGFyYWN0ZXJSZWZlcmVuY2VUeXBlOwogICAgbGV0IHZhbHVlMjsKICAgIGlmICh0eXBlNSkgewogICAgICB2YWx1ZTIgPSBkZWNvZGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlKGRhdGEyLCB0eXBlNSA9PT0gImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiID8gMTAgOiAxNik7CiAgICAgIHRoaXMuZGF0YS5jaGFyYWN0ZXJSZWZlcmVuY2VUeXBlID0gdm9pZCAwOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgcmVzdWx0ID0gZGVjb2RlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UoZGF0YTIpOwogICAgICB2YWx1ZTIgPSByZXN1bHQ7CiAgICB9CiAgICBjb25zdCB0YWlsID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgdGFpbC52YWx1ZSArPSB2YWx1ZTI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZSh0b2tlbikgewogICAgY29uc3QgdGFpbCA9IHRoaXMuc3RhY2sucG9wKCk7CiAgICB0YWlsLnBvc2l0aW9uLmVuZCA9IHBvaW50Mih0b2tlbi5lbmQpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRhdXRvbGlua3Byb3RvY29sKHRva2VuKSB7CiAgICBvbmV4aXRkYXRhLmNhbGwodGhpcywgdG9rZW4pOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi51cmwgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICB9CiAgZnVuY3Rpb24gb25leGl0YXV0b2xpbmtlbWFpbCh0b2tlbikgewogICAgb25leGl0ZGF0YS5jYWxsKHRoaXMsIHRva2VuKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudXJsID0gIm1haWx0bzoiICsgdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgfQogIGZ1bmN0aW9uIGJsb2NrUXVvdGUyKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImJsb2NrcXVvdGUiLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgfQogIGZ1bmN0aW9uIGNvZGVGbG93KCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImNvZGUiLAogICAgICBsYW5nOiBudWxsLAogICAgICBtZXRhOiBudWxsLAogICAgICB2YWx1ZTogIiIKICAgIH07CiAgfQogIGZ1bmN0aW9uIGNvZGVUZXh0MigpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJpbmxpbmVDb2RlIiwKICAgICAgdmFsdWU6ICIiCiAgICB9OwogIH0KICBmdW5jdGlvbiBkZWZpbml0aW9uMygpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJkZWZpbml0aW9uIiwKICAgICAgaWRlbnRpZmllcjogIiIsCiAgICAgIGxhYmVsOiBudWxsLAogICAgICB0aXRsZTogbnVsbCwKICAgICAgdXJsOiAiIgogICAgfTsKICB9CiAgZnVuY3Rpb24gZW1waGFzaXMzKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImVtcGhhc2lzIiwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9OwogIH0KICBmdW5jdGlvbiBoZWFkaW5nMygpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJoZWFkaW5nIiwKICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgZGVwdGhgIHdpbGwgYmUgc2V0IGxhdGVyLgogICAgICBkZXB0aDogMCwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9OwogIH0KICBmdW5jdGlvbiBoYXJkQnJlYWszKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImJyZWFrIgogICAgfTsKICB9CiAgZnVuY3Rpb24gaHRtbDIwKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImh0bWwiLAogICAgICB2YWx1ZTogIiIKICAgIH07CiAgfQogIGZ1bmN0aW9uIGltYWdlMygpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJpbWFnZSIsCiAgICAgIHRpdGxlOiBudWxsLAogICAgICB1cmw6ICIiLAogICAgICBhbHQ6IG51bGwKICAgIH07CiAgfQogIGZ1bmN0aW9uIGxpbmszKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImxpbmsiLAogICAgICB0aXRsZTogbnVsbCwKICAgICAgdXJsOiAiIiwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9OwogIH0KICBmdW5jdGlvbiBsaXN0NSh0b2tlbikgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImxpc3QiLAogICAgICBvcmRlcmVkOiB0b2tlbi50eXBlID09PSAibGlzdE9yZGVyZWQiLAogICAgICBzdGFydDogbnVsbCwKICAgICAgc3ByZWFkOiB0b2tlbi5fc3ByZWFkLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgfQogIGZ1bmN0aW9uIGxpc3RJdGVtMyh0b2tlbikgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImxpc3RJdGVtIiwKICAgICAgc3ByZWFkOiB0b2tlbi5fc3ByZWFkLAogICAgICBjaGVja2VkOiBudWxsLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgfQogIGZ1bmN0aW9uIHBhcmFncmFwaDMoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9OwogIH0KICBmdW5jdGlvbiBzdHJvbmczKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogInN0cm9uZyIsCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfTsKICB9CiAgZnVuY3Rpb24gdGV4dDkoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAidGV4dCIsCiAgICAgIHZhbHVlOiAiIgogICAgfTsKICB9CiAgZnVuY3Rpb24gdGhlbWF0aWNCcmVhazQoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAidGhlbWF0aWNCcmVhayIKICAgIH07CiAgfQp9CmZ1bmN0aW9uIHBvaW50MihkNikgewogIHJldHVybiB7CiAgICBsaW5lOiBkNi5saW5lLAogICAgY29sdW1uOiBkNi5jb2x1bW4sCiAgICBvZmZzZXQ6IGQ2Lm9mZnNldAogIH07Cn0KZnVuY3Rpb24gY29uZmlndXJlMihjb21iaW5lZCwgZXh0ZW5zaW9ucykgewogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBleHRlbnNpb25zLmxlbmd0aCkgewogICAgY29uc3QgdmFsdWUyID0gZXh0ZW5zaW9uc1tpbmRleDJdOwogICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUyKSkgewogICAgICBjb25maWd1cmUyKGNvbWJpbmVkLCB2YWx1ZTIpOwogICAgfSBlbHNlIHsKICAgICAgZXh0ZW5zaW9uKGNvbWJpbmVkLCB2YWx1ZTIpOwogICAgfQogIH0KfQpmdW5jdGlvbiBleHRlbnNpb24oY29tYmluZWQsIGV4dGVuc2lvbjIpIHsKICBsZXQga2V5MjsKICBmb3IgKGtleTIgaW4gZXh0ZW5zaW9uMikgewogICAgaWYgKG93bjUuY2FsbChleHRlbnNpb24yLCBrZXkyKSkgewogICAgICBzd2l0Y2ggKGtleTIpIHsKICAgICAgICBjYXNlICJjYW5Db250YWluRW9scyI6IHsKICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gZXh0ZW5zaW9uMltrZXkyXTsKICAgICAgICAgIGlmIChyaWdodCkgewogICAgICAgICAgICBjb21iaW5lZFtrZXkyXS5wdXNoKC4uLnJpZ2h0KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjYXNlICJ0cmFuc2Zvcm1zIjogewogICAgICAgICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb24yW2tleTJdOwogICAgICAgICAgaWYgKHJpZ2h0KSB7CiAgICAgICAgICAgIGNvbWJpbmVkW2tleTJdLnB1c2goLi4ucmlnaHQpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgImVudGVyIjoKICAgICAgICBjYXNlICJleGl0IjogewogICAgICAgICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb24yW2tleTJdOwogICAgICAgICAgaWYgKHJpZ2h0KSB7CiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29tYmluZWRba2V5Ml0sIHJpZ2h0KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQpmdW5jdGlvbiBkZWZhdWx0T25FcnJvcihsZWZ0LCByaWdodCkgewogIGlmIChsZWZ0KSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjbG9zZSBgIiArIGxlZnQudHlwZSArICJgICgiICsgc3RyaW5naWZ5UG9zaXRpb24oewogICAgICBzdGFydDogbGVmdC5zdGFydCwKICAgICAgZW5kOiBsZWZ0LmVuZAogICAgfSkgKyAiKTogYSBkaWZmZXJlbnQgdG9rZW4gKGAiICsgcmlnaHQudHlwZSArICJgLCAiICsgc3RyaW5naWZ5UG9zaXRpb24oewogICAgICBzdGFydDogcmlnaHQuc3RhcnQsCiAgICAgIGVuZDogcmlnaHQuZW5kCiAgICB9KSArICIpIGlzIG9wZW4iKTsKICB9IGVsc2UgewogICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2xvc2UgZG9jdW1lbnQsIGEgdG9rZW4gKGAiICsgcmlnaHQudHlwZSArICJgLCAiICsgc3RyaW5naWZ5UG9zaXRpb24oewogICAgICBzdGFydDogcmlnaHQuc3RhcnQsCiAgICAgIGVuZDogcmlnaHQuZW5kCiAgICB9KSArICIpIGlzIHN0aWxsIG9wZW4iKTsKICB9Cn0KdmFyIG93bjU7CnZhciBpbml0X2xpYjIxID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duQDIuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb20tbWFya2Rvd24vbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWRhc3RfdXRpbF90b19zdHJpbmcoKTsKICAgIGluaXRfbWljcm9tYXJrKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2RlY29kZV9udW1lcmljX2NoYXJhY3Rlcl9yZWZlcmVuY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfZGVjb2RlX3N0cmluZygpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9ub3JtYWxpemVfaWRlbnRpZmllcigpOwogICAgaW5pdF9pbmRleF9kb20oKTsKICAgIGluaXRfdW5pc3RfdXRpbF9zdHJpbmdpZnlfcG9zaXRpb24oKTsKICAgIG93bjUgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bkAyLjAuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfZnJvbV9tYXJrZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bkAyLjAuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMjEoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1wYXJzZUAxMS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9saWIvaW5kZXguanMKZnVuY3Rpb24gcmVtYXJrUGFyc2Uob3B0aW9ucykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBzZWxmMi5wYXJzZXIgPSBwYXJzZXI7CiAgZnVuY3Rpb24gcGFyc2VyKGRvYykgewogICAgcmV0dXJuIGZyb21NYXJrZG93bihkb2MsIHsKICAgICAgLi4uc2VsZjIuZGF0YSgic2V0dGluZ3MiKSwKICAgICAgLi4ub3B0aW9ucywKICAgICAgLy8gTm90ZTogdGhlc2Ugb3B0aW9ucyBhcmUgbm90IGluIHRoZSByZWFkbWUuCiAgICAgIC8vIFRoZSBnb2FsIGlzIGZvciB0aGVtIHRvIGJlIHNldCBieSBwbHVnaW5zIG9uIGBkYXRhYCBpbnN0ZWFkIG9mIGJlaW5nCiAgICAgIC8vIHBhc3NlZCBieSB1c2Vycy4KICAgICAgZXh0ZW5zaW9uczogc2VsZjIuZGF0YSgibWljcm9tYXJrRXh0ZW5zaW9ucyIpIHx8IFtdLAogICAgICBtZGFzdEV4dGVuc2lvbnM6IHNlbGYyLmRhdGEoImZyb21NYXJrZG93bkV4dGVuc2lvbnMiKSB8fCBbXQogICAgfSk7CiAgfQp9CnZhciBpbml0X2xpYjIyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLXBhcnNlQDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X21kYXN0X3V0aWxfZnJvbV9tYXJrZG93bigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLXBhcnNlQDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2luZGV4LmpzCnZhciBpbml0X3JlbWFya19wYXJzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1wYXJzZUAxMS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1wYXJzZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjIyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9mb3JtYXRAMC4yLjIvbm9kZV9tb2R1bGVzL2Zvcm1hdC9mb3JtYXQuanMKdmFyIHJlcXVpcmVfZm9ybWF0ID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9mb3JtYXRAMC4yLjIvbm9kZV9tb2R1bGVzL2Zvcm1hdC9mb3JtYXQuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgOwogICAgKGZ1bmN0aW9uKCkgewogICAgICB2YXIgbmFtZXNwYWNlMjsKICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgbmFtZXNwYWNlMiA9IG1vZHVsZS5leHBvcnRzID0gZm9ybWF0MjsKICAgICAgfSBlbHNlIHsKICAgICAgICBuYW1lc3BhY2UyID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMgfHwgKDEsIGV2YWwpKCJ0aGlzIik7CiAgICAgICAgfSkoKTsKICAgICAgfQogICAgICBuYW1lc3BhY2UyLmZvcm1hdCA9IGZvcm1hdDI7CiAgICAgIG5hbWVzcGFjZTIudnNwcmludGYgPSB2c3ByaW50ZjsKICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgY29uc29sZS5sb2cgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBuYW1lc3BhY2UyLnByaW50ZiA9IHByaW50ZjsKICAgICAgfQogICAgICBmdW5jdGlvbiBwcmludGYoKSB7CiAgICAgICAgY29uc29sZS5sb2coZm9ybWF0Mi5hcHBseShudWxsLCBhcmd1bWVudHMpKTsKICAgICAgfQogICAgICBmdW5jdGlvbiB2c3ByaW50ZihmbXQsIHJlcGxhY2VtZW50cykgewogICAgICAgIHJldHVybiBmb3JtYXQyLmFwcGx5KG51bGwsIFtmbXRdLmNvbmNhdChyZXBsYWNlbWVudHMpKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBmb3JtYXQyKGZtdCkgewogICAgICAgIHZhciBhcmdJbmRleCA9IDEsIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyksIGkxMSA9IDAsIG4xMyA9IGZtdC5sZW5ndGgsIHJlc3VsdCA9ICIiLCBjMTEsIGVzY2FwZWQgPSBmYWxzZSwgYXJnLCB0bXAsIGxlYWRpbmdaZXJvID0gZmFsc2UsIHByZWNpc2lvbiwgbmV4dEFyZyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107CiAgICAgICAgfSwgc2x1cnBOdW1iZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBkaWdpdHMgPSAiIjsKICAgICAgICAgIHdoaWxlICgvXGQvLnRlc3QoZm10W2kxMV0pKSB7CiAgICAgICAgICAgIGRpZ2l0cyArPSBmbXRbaTExKytdOwogICAgICAgICAgICBjMTEgPSBmbXRbaTExXTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBkaWdpdHMubGVuZ3RoID4gMCA/IHBhcnNlSW50KGRpZ2l0cykgOiBudWxsOwogICAgICAgIH07CiAgICAgICAgZm9yICg7IGkxMSA8IG4xMzsgKytpMTEpIHsKICAgICAgICAgIGMxMSA9IGZtdFtpMTFdOwogICAgICAgICAgaWYgKGVzY2FwZWQpIHsKICAgICAgICAgICAgZXNjYXBlZCA9IGZhbHNlOwogICAgICAgICAgICBpZiAoYzExID09ICIuIikgewogICAgICAgICAgICAgIGxlYWRpbmdaZXJvID0gZmFsc2U7CiAgICAgICAgICAgICAgYzExID0gZm10WysraTExXTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjMTEgPT0gIjAiICYmIGZtdFtpMTEgKyAxXSA9PSAiLiIpIHsKICAgICAgICAgICAgICBsZWFkaW5nWmVybyA9IHRydWU7CiAgICAgICAgICAgICAgaTExICs9IDI7CiAgICAgICAgICAgICAgYzExID0gZm10W2kxMV07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbGVhZGluZ1plcm8gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHByZWNpc2lvbiA9IHNsdXJwTnVtYmVyKCk7CiAgICAgICAgICAgIHN3aXRjaCAoYzExKSB7CiAgICAgICAgICAgICAgY2FzZSAiYiI6CiAgICAgICAgICAgICAgICByZXN1bHQgKz0gcGFyc2VJbnQobmV4dEFyZygpLCAxMCkudG9TdHJpbmcoMik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJjIjoKICAgICAgICAgICAgICAgIGFyZyA9IG5leHRBcmcoKTsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAic3RyaW5nIiB8fCBhcmcgaW5zdGFuY2VvZiBTdHJpbmcpCiAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBhcmc7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGFyZywgMTApKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImQiOgogICAgICAgICAgICAgICAgcmVzdWx0ICs9IHBhcnNlSW50KG5leHRBcmcoKSwgMTApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAiZiI6CiAgICAgICAgICAgICAgICB0bXAgPSBTdHJpbmcocGFyc2VGbG9hdChuZXh0QXJnKCkpLnRvRml4ZWQocHJlY2lzaW9uIHx8IDYpKTsKICAgICAgICAgICAgICAgIHJlc3VsdCArPSBsZWFkaW5nWmVybyA/IHRtcCA6IHRtcC5yZXBsYWNlKC9eMC8sICIiKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImoiOgogICAgICAgICAgICAgICAgcmVzdWx0ICs9IEpTT04uc3RyaW5naWZ5KG5leHRBcmcoKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJvIjoKICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiMCIgKyBwYXJzZUludChuZXh0QXJnKCksIDEwKS50b1N0cmluZyg4KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgInMiOgogICAgICAgICAgICAgICAgcmVzdWx0ICs9IG5leHRBcmcoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgIngiOgogICAgICAgICAgICAgICAgcmVzdWx0ICs9ICIweCIgKyBwYXJzZUludChuZXh0QXJnKCksIDEwKS50b1N0cmluZygxNik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJYIjoKICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiMHgiICsgcGFyc2VJbnQobmV4dEFyZygpLCAxMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcmVzdWx0ICs9IGMxMTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGMxMSA9PT0gIiUiKSB7CiAgICAgICAgICAgIGVzY2FwZWQgPSB0cnVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0ICs9IGMxMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2ZhdWx0QDIuMC4xL25vZGVfbW9kdWxlcy9mYXVsdC9pbmRleC5qcwpmdW5jdGlvbiBjcmVhdGU1KENvbnN0cnVjdG9yKSB7CiAgRm9ybWF0dGVkRXJyb3IuZGlzcGxheU5hbWUgPSBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCBDb25zdHJ1Y3Rvci5uYW1lOwogIHJldHVybiBGb3JtYXR0ZWRFcnJvcjsKICBmdW5jdGlvbiBGb3JtYXR0ZWRFcnJvcihmb3JtYXQyLCAuLi52YWx1ZXMpIHsKICAgIGNvbnN0IHJlYXNvbiA9IGZvcm1hdDIgPyAoMCwgaW1wb3J0X2Zvcm1hdDIuZGVmYXVsdCkoZm9ybWF0MiwgLi4udmFsdWVzKSA6IGZvcm1hdDI7CiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHJlYXNvbik7CiAgfQp9CnZhciBpbXBvcnRfZm9ybWF0MiwgZmF1bHQ7CnZhciBpbml0X2ZhdWx0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZmF1bHRAMi4wLjEvbm9kZV9tb2R1bGVzL2ZhdWx0L2luZGV4LmpzIigpIHsKICAgIGltcG9ydF9mb3JtYXQyID0gX190b0VTTShyZXF1aXJlX2Zvcm1hdCgpLCAxKTsKICAgIGZhdWx0ID0gT2JqZWN0LmFzc2lnbihjcmVhdGU1KEVycm9yKSwgewogICAgICBldmFsOiBjcmVhdGU1KEV2YWxFcnJvciksCiAgICAgIHJhbmdlOiBjcmVhdGU1KFJhbmdlRXJyb3IpLAogICAgICByZWZlcmVuY2U6IGNyZWF0ZTUoUmVmZXJlbmNlRXJyb3IpLAogICAgICBzeW50YXg6IGNyZWF0ZTUoU3ludGF4RXJyb3IpLAogICAgICB0eXBlOiBjcmVhdGU1KFR5cGVFcnJvciksCiAgICAgIHVyaTogY3JlYXRlNShVUklFcnJvcikKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9saWIvdG8tbWF0dGVycy5qcwpmdW5jdGlvbiB0b01hdHRlcnMob3B0aW9ucykgewogIGNvbnN0IHJlc3VsdCA9IFtdOwogIGxldCBpbmRleDIgPSAtMTsKICBjb25zdCBwcmVzZXRzT3JNYXR0ZXJzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBvcHRpb25zID8gW29wdGlvbnNdIDogWyJ5YW1sIl07CiAgd2hpbGUgKCsraW5kZXgyIDwgcHJlc2V0c09yTWF0dGVycy5sZW5ndGgpIHsKICAgIHJlc3VsdFtpbmRleDJdID0gbWF0dGVyKHByZXNldHNPck1hdHRlcnNbaW5kZXgyXSk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gbWF0dGVyKG9wdGlvbjIpIHsKICBsZXQgcmVzdWx0ID0gb3B0aW9uMjsKICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gInN0cmluZyIpIHsKICAgIGlmICghb3duNi5jYWxsKG1hcmtlcnMsIHJlc3VsdCkpIHsKICAgICAgdGhyb3cgZmF1bHQoIk1pc3NpbmcgbWF0dGVyIGRlZmluaXRpb24gZm9yIGAlc2AiLCByZXN1bHQpOwogICAgfQogICAgcmVzdWx0ID0gewogICAgICB0eXBlOiByZXN1bHQsCiAgICAgIG1hcmtlcjogbWFya2Vyc1tyZXN1bHRdCiAgICB9OwogIH0gZWxzZSBpZiAodHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHsKICAgIHRocm93IGZhdWx0KCJFeHBlY3RlZCBtYXR0ZXIgdG8gYmUgYW4gb2JqZWN0LCBub3QgYCVqYCIsIHJlc3VsdCk7CiAgfQogIGlmICghb3duNi5jYWxsKHJlc3VsdCwgInR5cGUiKSkgewogICAgdGhyb3cgZmF1bHQoIk1pc3NpbmcgYHR5cGVgIGluIG1hdHRlciBgJWpgIiwgcmVzdWx0KTsKICB9CiAgaWYgKCFvd242LmNhbGwocmVzdWx0LCAiZmVuY2UiKSAmJiAhb3duNi5jYWxsKHJlc3VsdCwgIm1hcmtlciIpKSB7CiAgICB0aHJvdyBmYXVsdCgiTWlzc2luZyBgbWFya2VyYCBvciBgZmVuY2VgIGluIG1hdHRlciBgJWpgIiwgcmVzdWx0KTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgb3duNiwgbWFya2VyczsKdmFyIGluaXRfdG9fbWF0dGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXJAMi4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXIvbGliL3RvLW1hdHRlcnMuanMiKCkgewogICAgaW5pdF9mYXVsdCgpOwogICAgb3duNiA9IHt9Lmhhc093blByb3BlcnR5OwogICAgbWFya2VycyA9IHsKICAgICAgeWFtbDogIi0iLAogICAgICB0b21sOiAiKyIKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyL2xpYi9zeW50YXguanMKZnVuY3Rpb24gZnJvbnRtYXR0ZXIob3B0aW9ucykgewogIGNvbnN0IG1hdHRlcnMgPSB0b01hdHRlcnMob3B0aW9ucyk7CiAgY29uc3QgZmxvdzMgPSB7fTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgbWF0dGVycy5sZW5ndGgpIHsKICAgIGNvbnN0IG1hdHRlcjIgPSBtYXR0ZXJzW2luZGV4Ml07CiAgICBjb25zdCBjb2RlNCA9IGZlbmNlKG1hdHRlcjIsICJvcGVuIikuY2hhckNvZGVBdCgwKTsKICAgIGNvbnN0IGNvbnN0cnVjdCA9IGNyZWF0ZUNvbnN0cnVjdChtYXR0ZXIyKTsKICAgIGNvbnN0IGV4aXN0aW5nID0gZmxvdzNbY29kZTRdOwogICAgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmcpKSB7CiAgICAgIGV4aXN0aW5nLnB1c2goY29uc3RydWN0KTsKICAgIH0gZWxzZSB7CiAgICAgIGZsb3czW2NvZGU0XSA9IFtjb25zdHJ1Y3RdOwogICAgfQogIH0KICByZXR1cm4gewogICAgZmxvdzogZmxvdzMKICB9Owp9CmZ1bmN0aW9uIGNyZWF0ZUNvbnN0cnVjdChtYXR0ZXIyKSB7CiAgY29uc3QgYW55d2hlcmUgPSBtYXR0ZXIyLmFueXdoZXJlOwogIGNvbnN0IGZyb250bWF0dGVyVHlwZSA9ICgKICAgIC8qKiBAdHlwZSB7VG9rZW5UeXBlfSAqLwogICAgbWF0dGVyMi50eXBlCiAgKTsKICBjb25zdCBmZW5jZVR5cGUgPSAoCiAgICAvKiogQHR5cGUge1Rva2VuVHlwZX0gKi8KICAgIGZyb250bWF0dGVyVHlwZSArICJGZW5jZSIKICApOwogIGNvbnN0IHNlcXVlbmNlVHlwZSA9ICgKICAgIC8qKiBAdHlwZSB7VG9rZW5UeXBlfSAqLwogICAgZmVuY2VUeXBlICsgIlNlcXVlbmNlIgogICk7CiAgY29uc3QgdmFsdWVUeXBlID0gKAogICAgLyoqIEB0eXBlIHtUb2tlblR5cGV9ICovCiAgICBmcm9udG1hdHRlclR5cGUgKyAiVmFsdWUiCiAgKTsKICBjb25zdCBjbG9zaW5nRmVuY2VDb25zdHJ1Y3QgPSB7CiAgICB0b2tlbml6ZTogdG9rZW5pemVDbG9zaW5nRmVuY2UsCiAgICBwYXJ0aWFsOiB0cnVlCiAgfTsKICBsZXQgYnVmZmVyMjsKICBsZXQgYnVmZmVySW5kZXggPSAwOwogIHJldHVybiB7CiAgICB0b2tlbml6ZTogdG9rZW5pemVGcm9udG1hdHRlciwKICAgIGNvbmNyZXRlOiB0cnVlCiAgfTsKICBmdW5jdGlvbiB0b2tlbml6ZUZyb250bWF0dGVyKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgICByZXR1cm4gc3RhcnQ7CiAgICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgICBjb25zdCBwb3NpdGlvbjMgPSBzZWxmMi5ub3coKTsKICAgICAgaWYgKAogICAgICAgIC8vIEluZGVudCBub3QgYWxsb3dlZC4KICAgICAgICBwb3NpdGlvbjMuY29sdW1uID09PSAxICYmIC8vIE5vcm1hbGx5LCBvbmx5IGFsbG93ZWQgaW4gZmlyc3QgbGluZS4KICAgICAgICAocG9zaXRpb24zLmxpbmUgPT09IDEgfHwgYW55d2hlcmUpCiAgICAgICkgewogICAgICAgIGJ1ZmZlcjIgPSBmZW5jZShtYXR0ZXIyLCAib3BlbiIpOwogICAgICAgIGJ1ZmZlckluZGV4ID0gMDsKICAgICAgICBpZiAoY29kZTQgPT09IGJ1ZmZlcjIuY2hhckNvZGVBdChidWZmZXJJbmRleCkpIHsKICAgICAgICAgIGVmZmVjdHMuZW50ZXIoZnJvbnRtYXR0ZXJUeXBlKTsKICAgICAgICAgIGVmZmVjdHMuZW50ZXIoZmVuY2VUeXBlKTsKICAgICAgICAgIGVmZmVjdHMuZW50ZXIoc2VxdWVuY2VUeXBlKTsKICAgICAgICAgIHJldHVybiBvcGVuU2VxdWVuY2UoY29kZTQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGZ1bmN0aW9uIG9wZW5TZXF1ZW5jZShjb2RlNCkgewogICAgICBpZiAoYnVmZmVySW5kZXggPT09IGJ1ZmZlcjIubGVuZ3RoKSB7CiAgICAgICAgZWZmZWN0cy5leGl0KHNlcXVlbmNlVHlwZSk7CiAgICAgICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgICAgICBlZmZlY3RzLmVudGVyKCJ3aGl0ZXNwYWNlIik7CiAgICAgICAgICByZXR1cm4gb3BlblNlcXVlbmNlV2hpdGVzcGFjZShjb2RlNCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvcGVuQWZ0ZXIoY29kZTQpOwogICAgICB9CiAgICAgIGlmIChjb2RlNCA9PT0gYnVmZmVyMi5jaGFyQ29kZUF0KGJ1ZmZlckluZGV4KyspKSB7CiAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgICByZXR1cm4gb3BlblNlcXVlbmNlOwogICAgICB9CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gb3BlblNlcXVlbmNlV2hpdGVzcGFjZShjb2RlNCkgewogICAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHJldHVybiBvcGVuU2VxdWVuY2VXaGl0ZXNwYWNlOwogICAgICB9CiAgICAgIGVmZmVjdHMuZXhpdCgid2hpdGVzcGFjZSIpOwogICAgICByZXR1cm4gb3BlbkFmdGVyKGNvZGU0KTsKICAgIH0KICAgIGZ1bmN0aW9uIG9wZW5BZnRlcihjb2RlNCkgewogICAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMuZXhpdChmZW5jZVR5cGUpOwogICAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgICAgIGJ1ZmZlcjIgPSBmZW5jZShtYXR0ZXIyLCAiY2xvc2UiKTsKICAgICAgICBidWZmZXJJbmRleCA9IDA7CiAgICAgICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChjbG9zaW5nRmVuY2VDb25zdHJ1Y3QsIGFmdGVyLCBjb250ZW50U3RhcnQpOwogICAgICB9CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gY29udGVudFN0YXJ0KGNvZGU0KSB7CiAgICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgICAgcmV0dXJuIGNvbnRlbnRFbmQoY29kZTQpOwogICAgICB9CiAgICAgIGVmZmVjdHMuZW50ZXIodmFsdWVUeXBlKTsKICAgICAgcmV0dXJuIGNvbnRlbnRJbnNpZGUoY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gY29udGVudEluc2lkZShjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMuZXhpdCh2YWx1ZVR5cGUpOwogICAgICAgIHJldHVybiBjb250ZW50RW5kKGNvZGU0KTsKICAgICAgfQogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGVudEluc2lkZTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbnRlbnRFbmQoY29kZTQpIHsKICAgICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICAgIH0KICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChjbG9zaW5nRmVuY2VDb25zdHJ1Y3QsIGFmdGVyLCBjb250ZW50U3RhcnQpOwogICAgfQogICAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgICAgZWZmZWN0cy5leGl0KGZyb250bWF0dGVyVHlwZSk7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogIH0KICBmdW5jdGlvbiB0b2tlbml6ZUNsb3NpbmdGZW5jZShlZmZlY3RzLCBvazMsIG5vaykgewogICAgbGV0IGJ1ZmZlckluZGV4MiA9IDA7CiAgICByZXR1cm4gY2xvc2VTdGFydDsKICAgIGZ1bmN0aW9uIGNsb3NlU3RhcnQoY29kZTQpIHsKICAgICAgaWYgKGNvZGU0ID09PSBidWZmZXIyLmNoYXJDb2RlQXQoYnVmZmVySW5kZXgyKSkgewogICAgICAgIGVmZmVjdHMuZW50ZXIoZmVuY2VUeXBlKTsKICAgICAgICBlZmZlY3RzLmVudGVyKHNlcXVlbmNlVHlwZSk7CiAgICAgICAgcmV0dXJuIGNsb3NlU2VxdWVuY2UoY29kZTQpOwogICAgICB9CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gY2xvc2VTZXF1ZW5jZShjb2RlNCkgewogICAgICBpZiAoYnVmZmVySW5kZXgyID09PSBidWZmZXIyLmxlbmd0aCkgewogICAgICAgIGVmZmVjdHMuZXhpdChzZXF1ZW5jZVR5cGUpOwogICAgICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICAgICAgZWZmZWN0cy5lbnRlcigid2hpdGVzcGFjZSIpOwogICAgICAgICAgcmV0dXJuIGNsb3NlU2VxdWVuY2VXaGl0ZXNwYWNlKGNvZGU0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNsb3NlQWZ0ZXIoY29kZTQpOwogICAgICB9CiAgICAgIGlmIChjb2RlNCA9PT0gYnVmZmVyMi5jaGFyQ29kZUF0KGJ1ZmZlckluZGV4MisrKSkgewogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgcmV0dXJuIGNsb3NlU2VxdWVuY2U7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9zZVNlcXVlbmNlV2hpdGVzcGFjZShjb2RlNCkgewogICAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHJldHVybiBjbG9zZVNlcXVlbmNlV2hpdGVzcGFjZTsKICAgICAgfQogICAgICBlZmZlY3RzLmV4aXQoIndoaXRlc3BhY2UiKTsKICAgICAgcmV0dXJuIGNsb3NlQWZ0ZXIoY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gY2xvc2VBZnRlcihjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMuZXhpdChmZW5jZVR5cGUpOwogICAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgICB9CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogIH0KfQpmdW5jdGlvbiBmZW5jZShtYXR0ZXIyLCBwcm9wKSB7CiAgcmV0dXJuIG1hdHRlcjIubWFya2VyID8gcGljayhtYXR0ZXIyLm1hcmtlciwgcHJvcCkucmVwZWF0KDMpIDogKAogICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVGhleeKAmXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KICAgIHBpY2sobWF0dGVyMi5mZW5jZSwgcHJvcCkKICApOwp9CmZ1bmN0aW9uIHBpY2soc2NoZW1hLCBwcm9wKSB7CiAgcmV0dXJuIHR5cGVvZiBzY2hlbWEgPT09ICJzdHJpbmciID8gc2NoZW1hIDogc2NoZW1hW3Byb3BdOwp9CnZhciBpbml0X3N5bnRheDYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyL2xpYi9zeW50YXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfdG9fbWF0dGVycygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9saWIvaHRtbC5qcwp2YXIgaW5pdF9odG1sNyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXJAMi4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXIvbGliL2h0bWwuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9pbmRleC5qcwp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2Zyb250bWF0dGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X3N5bnRheDYoKTsKICAgIGluaXRfaHRtbDcoKTsKICAgIGluaXRfdG9fbWF0dGVycygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9udG1hdHRlckAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9udG1hdHRlci9saWIvaW5kZXguanMKZnVuY3Rpb24gZnJvbnRtYXR0ZXJGcm9tTWFya2Rvd24ob3B0aW9ucykgewogIGNvbnN0IG1hdHRlcnMgPSB0b01hdHRlcnMob3B0aW9ucyk7CiAgY29uc3QgZW50ZXIgPSB7fTsKICBjb25zdCBleGl0MyA9IHt9OwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBtYXR0ZXJzLmxlbmd0aCkgewogICAgY29uc3QgbWF0dGVyMiA9IG1hdHRlcnNbaW5kZXgyXTsKICAgIGVudGVyW21hdHRlcjIudHlwZV0gPSBvcGVuZXIobWF0dGVyMik7CiAgICBleGl0M1ttYXR0ZXIyLnR5cGVdID0gY2xvc2U2OwogICAgZXhpdDNbbWF0dGVyMi50eXBlICsgIlZhbHVlIl0gPSB2YWx1ZTsKICB9CiAgcmV0dXJuIHsgZW50ZXIsIGV4aXQ6IGV4aXQzIH07Cn0KZnVuY3Rpb24gb3BlbmVyKG1hdHRlcjIpIHsKICByZXR1cm4gb3BlbjsKICBmdW5jdGlvbiBvcGVuKHRva2VuKSB7CiAgICB0aGlzLmVudGVyKHsgdHlwZTogbWF0dGVyMi50eXBlLCB2YWx1ZTogIiIgfSwgdG9rZW4pOwogICAgdGhpcy5idWZmZXIoKTsKICB9Cn0KZnVuY3Rpb24gY2xvc2U2KHRva2VuKSB7CiAgY29uc3QgZGF0YSA9IHRoaXMucmVzdW1lKCk7CiAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgb2soInZhbHVlIiBpbiBub2RlMik7CiAgdGhpcy5leGl0KHRva2VuKTsKICBub2RlMi52YWx1ZSA9IGRhdGEucmVwbGFjZSgvXihccj9cbnxccil8KFxyP1xufFxyKSQvZywgIiIpOwp9CmZ1bmN0aW9uIHZhbHVlKHRva2VuKSB7CiAgdGhpcy5jb25maWcuZW50ZXIuZGF0YS5jYWxsKHRoaXMsIHRva2VuKTsKICB0aGlzLmNvbmZpZy5leGl0LmRhdGEuY2FsbCh0aGlzLCB0b2tlbik7Cn0KZnVuY3Rpb24gZnJvbnRtYXR0ZXJUb01hcmtkb3duKG9wdGlvbnMpIHsKICBjb25zdCB1bnNhZmUyID0gW107CiAgY29uc3QgaGFuZGxlcnMyID0ge307CiAgY29uc3QgbWF0dGVycyA9IHRvTWF0dGVycyhvcHRpb25zKTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgbWF0dGVycy5sZW5ndGgpIHsKICAgIGNvbnN0IG1hdHRlcjIgPSBtYXR0ZXJzW2luZGV4Ml07CiAgICBoYW5kbGVyczJbbWF0dGVyMi50eXBlXSA9IGhhbmRsZXIobWF0dGVyMik7CiAgICBjb25zdCBvcGVuID0gZmVuY2UyKG1hdHRlcjIsICJvcGVuIik7CiAgICB1bnNhZmUyLnB1c2goewogICAgICBhdEJyZWFrOiB0cnVlLAogICAgICBjaGFyYWN0ZXI6IG9wZW4uY2hhckF0KDApLAogICAgICBhZnRlcjogZXNjYXBlU3RyaW5nUmVnZXhwKG9wZW4uY2hhckF0KDEpKQogICAgfSk7CiAgfQogIHJldHVybiB7IHVuc2FmZTogdW5zYWZlMiwgaGFuZGxlcnM6IGhhbmRsZXJzMiB9Owp9CmZ1bmN0aW9uIGhhbmRsZXIobWF0dGVyMikgewogIGNvbnN0IG9wZW4gPSBmZW5jZTIobWF0dGVyMiwgIm9wZW4iKTsKICBjb25zdCBjbG9zZTcgPSBmZW5jZTIobWF0dGVyMiwgImNsb3NlIik7CiAgcmV0dXJuIGhhbmRsZTM7CiAgZnVuY3Rpb24gaGFuZGxlMyhub2RlMikgewogICAgcmV0dXJuIG9wZW4gKyAobm9kZTIudmFsdWUgPyAiXG4iICsgbm9kZTIudmFsdWUgOiAiIikgKyAiXG4iICsgY2xvc2U3OwogIH0KfQpmdW5jdGlvbiBmZW5jZTIobWF0dGVyMiwgcHJvcCkgewogIHJldHVybiBtYXR0ZXIyLm1hcmtlciA/IHBpY2syKG1hdHRlcjIubWFya2VyLCBwcm9wKS5yZXBlYXQoMykgOiAoCiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBUaGV54oCZcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgogICAgcGljazIobWF0dGVyMi5mZW5jZSwgcHJvcCkKICApOwp9CmZ1bmN0aW9uIHBpY2syKHNjaGVtYSwgcHJvcCkgewogIHJldHVybiB0eXBlb2Ygc2NoZW1hID09PSAic3RyaW5nIiA/IHNjaGVtYSA6IHNjaGVtYVtwcm9wXTsKfQp2YXIgaW5pdF9saWIyMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZnJvbnRtYXR0ZXJAMi4wLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZnJvbnRtYXR0ZXIvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVmYXVsdCgpOwogICAgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2Zyb250bWF0dGVyKCk7CiAgICBpbml0X2VzY2FwZV9zdHJpbmdfcmVnZXhwKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWZyb250bWF0dGVyQDIuMC4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb250bWF0dGVyL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfZnJvbnRtYXR0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWZyb250bWF0dGVyQDIuMC4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb250bWF0dGVyL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMjMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1mcm9udG1hdHRlckA1LjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLWZyb250bWF0dGVyL2xpYi9pbmRleC5qcwpmdW5jdGlvbiByZW1hcmtGcm9udG1hdHRlcihvcHRpb25zKSB7CiAgY29uc3Qgc2VsZjIgPSAoCiAgICAvKiogQHR5cGUge1Byb2Nlc3Nvcn0gKi8KICAgIHRoaXMKICApOwogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnM0OwogIGNvbnN0IGRhdGEgPSBzZWxmMi5kYXRhKCk7CiAgY29uc3QgbWljcm9tYXJrRXh0ZW5zaW9ucyA9IGRhdGEubWljcm9tYXJrRXh0ZW5zaW9ucyB8fCAoZGF0YS5taWNyb21hcmtFeHRlbnNpb25zID0gW10pOwogIGNvbnN0IGZyb21NYXJrZG93bkV4dGVuc2lvbnMgPSBkYXRhLmZyb21NYXJrZG93bkV4dGVuc2lvbnMgfHwgKGRhdGEuZnJvbU1hcmtkb3duRXh0ZW5zaW9ucyA9IFtdKTsKICBjb25zdCB0b01hcmtkb3duRXh0ZW5zaW9ucyA9IGRhdGEudG9NYXJrZG93bkV4dGVuc2lvbnMgfHwgKGRhdGEudG9NYXJrZG93bkV4dGVuc2lvbnMgPSBbXSk7CiAgbWljcm9tYXJrRXh0ZW5zaW9ucy5wdXNoKGZyb250bWF0dGVyKHNldHRpbmdzKSk7CiAgZnJvbU1hcmtkb3duRXh0ZW5zaW9ucy5wdXNoKGZyb250bWF0dGVyRnJvbU1hcmtkb3duKHNldHRpbmdzKSk7CiAgdG9NYXJrZG93bkV4dGVuc2lvbnMucHVzaChmcm9udG1hdHRlclRvTWFya2Rvd24oc2V0dGluZ3MpKTsKfQp2YXIgZW1wdHlPcHRpb25zNDsKdmFyIGluaXRfbGliMjQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstZnJvbnRtYXR0ZXJANS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1mcm9udG1hdHRlci9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9tZGFzdF91dGlsX2Zyb250bWF0dGVyKCk7CiAgICBpbml0X21pY3JvbWFya19leHRlbnNpb25fZnJvbnRtYXR0ZXIoKTsKICAgIGVtcHR5T3B0aW9uczQgPSAieWFtbCI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstZnJvbnRtYXR0ZXJANS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1mcm9udG1hdHRlci9pbmRleC5qcwp2YXIgaW5pdF9yZW1hcmtfZnJvbnRtYXR0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstZnJvbnRtYXR0ZXJANS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1mcm9udG1hdHRlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjI0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdW5nYXArc3RydWN0dXJlZC1jbG9uZUAxLjMuMC9ub2RlX21vZHVsZXMvQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUvZXNtL3R5cGVzLmpzCnZhciBWT0lELCBQUklNSVRJVkUsIEFSUkFZLCBPQkpFQ1QsIERBVEUsIFJFR0VYUCwgTUFQLCBTRVQsIEVSUk9SLCBCSUdJTlQ7CnZhciBpbml0X3R5cGVzMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vdHlwZXMuanMiKCkgewogICAgVk9JRCA9IC0xOwogICAgUFJJTUlUSVZFID0gMDsKICAgIEFSUkFZID0gMTsKICAgIE9CSkVDVCA9IDI7CiAgICBEQVRFID0gMzsKICAgIFJFR0VYUCA9IDQ7CiAgICBNQVAgPSA1OwogICAgU0VUID0gNjsKICAgIEVSUk9SID0gNzsKICAgIEJJR0lOVCA9IDg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdW5nYXArc3RydWN0dXJlZC1jbG9uZUAxLjMuMC9ub2RlX21vZHVsZXMvQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUvZXNtL2Rlc2VyaWFsaXplLmpzCnZhciBlbnYsIGRlc2VyaWFsaXplciwgZGVzZXJpYWxpemU7CnZhciBpbml0X2Rlc2VyaWFsaXplID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHVuZ2FwK3N0cnVjdHVyZWQtY2xvbmVAMS4zLjAvbm9kZV9tb2R1bGVzL0B1bmdhcC9zdHJ1Y3R1cmVkLWNsb25lL2VzbS9kZXNlcmlhbGl6ZS5qcyIoKSB7CiAgICBpbml0X3R5cGVzMigpOwogICAgZW52ID0gdHlwZW9mIHNlbGYgPT09ICJvYmplY3QiID8gc2VsZiA6IGdsb2JhbFRoaXM7CiAgICBkZXNlcmlhbGl6ZXIgPSAoJDMsIF80KSA9PiB7CiAgICAgIGNvbnN0IGFzID0gKG91dCwgaW5kZXgyKSA9PiB7CiAgICAgICAgJDMuc2V0KGluZGV4Miwgb3V0KTsKICAgICAgICByZXR1cm4gb3V0OwogICAgICB9OwogICAgICBjb25zdCB1bnBhaXIgPSAoaW5kZXgyKSA9PiB7CiAgICAgICAgaWYgKCQzLmhhcyhpbmRleDIpKQogICAgICAgICAgcmV0dXJuICQzLmdldChpbmRleDIpOwogICAgICAgIGNvbnN0IFt0eXBlNSwgdmFsdWUyXSA9IF80W2luZGV4Ml07CiAgICAgICAgc3dpdGNoICh0eXBlNSkgewogICAgICAgICAgY2FzZSBQUklNSVRJVkU6CiAgICAgICAgICBjYXNlIFZPSUQ6CiAgICAgICAgICAgIHJldHVybiBhcyh2YWx1ZTIsIGluZGV4Mik7CiAgICAgICAgICBjYXNlIEFSUkFZOiB7CiAgICAgICAgICAgIGNvbnN0IGFyciA9IGFzKFtdLCBpbmRleDIpOwogICAgICAgICAgICBmb3IgKGNvbnN0IGluZGV4MyBvZiB2YWx1ZTIpCiAgICAgICAgICAgICAgYXJyLnB1c2godW5wYWlyKGluZGV4MykpOwogICAgICAgICAgICByZXR1cm4gYXJyOwogICAgICAgICAgfQogICAgICAgICAgY2FzZSBPQkpFQ1Q6IHsKICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gYXMoe30sIGluZGV4Mik7CiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleTIsIGluZGV4M10gb2YgdmFsdWUyKQogICAgICAgICAgICAgIG9iamVjdFt1bnBhaXIoa2V5MildID0gdW5wYWlyKGluZGV4Myk7CiAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIERBVEU6CiAgICAgICAgICAgIHJldHVybiBhcyhuZXcgRGF0ZSh2YWx1ZTIpLCBpbmRleDIpOwogICAgICAgICAgY2FzZSBSRUdFWFA6IHsKICAgICAgICAgICAgY29uc3QgeyBzb3VyY2UsIGZsYWdzIH0gPSB2YWx1ZTI7CiAgICAgICAgICAgIHJldHVybiBhcyhuZXcgUmVnRXhwKHNvdXJjZSwgZmxhZ3MpLCBpbmRleDIpOwogICAgICAgICAgfQogICAgICAgICAgY2FzZSBNQVA6IHsKICAgICAgICAgICAgY29uc3QgbWFwNyA9IGFzKC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIGluZGV4Mik7CiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleTIsIGluZGV4M10gb2YgdmFsdWUyKQogICAgICAgICAgICAgIG1hcDcuc2V0KHVucGFpcihrZXkyKSwgdW5wYWlyKGluZGV4MykpOwogICAgICAgICAgICByZXR1cm4gbWFwNzsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgU0VUOiB7CiAgICAgICAgICAgIGNvbnN0IHNldDMgPSBhcygvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCBpbmRleDIpOwogICAgICAgICAgICBmb3IgKGNvbnN0IGluZGV4MyBvZiB2YWx1ZTIpCiAgICAgICAgICAgICAgc2V0My5hZGQodW5wYWlyKGluZGV4MykpOwogICAgICAgICAgICByZXR1cm4gc2V0MzsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgRVJST1I6IHsKICAgICAgICAgICAgY29uc3QgeyBuYW1lLCBtZXNzYWdlOiBtZXNzYWdlMiB9ID0gdmFsdWUyOwogICAgICAgICAgICByZXR1cm4gYXMobmV3IGVudltuYW1lXShtZXNzYWdlMiksIGluZGV4Mik7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIEJJR0lOVDoKICAgICAgICAgICAgcmV0dXJuIGFzKEJpZ0ludCh2YWx1ZTIpLCBpbmRleDIpOwogICAgICAgICAgY2FzZSAiQmlnSW50IjoKICAgICAgICAgICAgcmV0dXJuIGFzKE9iamVjdChCaWdJbnQodmFsdWUyKSksIGluZGV4Mik7CiAgICAgICAgICBjYXNlICJBcnJheUJ1ZmZlciI6CiAgICAgICAgICAgIHJldHVybiBhcyhuZXcgVWludDhBcnJheSh2YWx1ZTIpLmJ1ZmZlciwgdmFsdWUyKTsKICAgICAgICAgIGNhc2UgIkRhdGFWaWV3IjogewogICAgICAgICAgICBjb25zdCB7IGJ1ZmZlcjogYnVmZmVyMiB9ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUyKTsKICAgICAgICAgICAgcmV0dXJuIGFzKG5ldyBEYXRhVmlldyhidWZmZXIyKSwgdmFsdWUyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFzKG5ldyBlbnZbdHlwZTVdKHZhbHVlMiksIGluZGV4Mik7CiAgICAgIH07CiAgICAgIHJldHVybiB1bnBhaXI7CiAgICB9OwogICAgZGVzZXJpYWxpemUgPSAoc2VyaWFsaXplZCkgPT4gZGVzZXJpYWxpemVyKC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIHNlcmlhbGl6ZWQpKDApOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHVuZ2FwK3N0cnVjdHVyZWQtY2xvbmVAMS4zLjAvbm9kZV9tb2R1bGVzL0B1bmdhcC9zdHJ1Y3R1cmVkLWNsb25lL2VzbS9zZXJpYWxpemUuanMKdmFyIEVNUFRZMiwgdG9TdHJpbmcyLCBrZXlzLCB0eXBlT2YsIHNob3VsZFNraXAsIHNlcmlhbGl6ZXIsIHNlcmlhbGl6ZTI7CnZhciBpbml0X3NlcmlhbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vc2VyaWFsaXplLmpzIigpIHsKICAgIGluaXRfdHlwZXMyKCk7CiAgICBFTVBUWTIgPSAiIjsKICAgICh7IHRvU3RyaW5nOiB0b1N0cmluZzIgfSA9IHt9KTsKICAgICh7IGtleXMgfSA9IE9iamVjdCk7CiAgICB0eXBlT2YgPSAodmFsdWUyKSA9PiB7CiAgICAgIGNvbnN0IHR5cGU1ID0gdHlwZW9mIHZhbHVlMjsKICAgICAgaWYgKHR5cGU1ICE9PSAib2JqZWN0IiB8fCAhdmFsdWUyKQogICAgICAgIHJldHVybiBbUFJJTUlUSVZFLCB0eXBlNV07CiAgICAgIGNvbnN0IGFzU3RyaW5nID0gdG9TdHJpbmcyLmNhbGwodmFsdWUyKS5zbGljZSg4LCAtMSk7CiAgICAgIHN3aXRjaCAoYXNTdHJpbmcpIHsKICAgICAgICBjYXNlICJBcnJheSI6CiAgICAgICAgICByZXR1cm4gW0FSUkFZLCBFTVBUWTJdOwogICAgICAgIGNhc2UgIk9iamVjdCI6CiAgICAgICAgICByZXR1cm4gW09CSkVDVCwgRU1QVFkyXTsKICAgICAgICBjYXNlICJEYXRlIjoKICAgICAgICAgIHJldHVybiBbREFURSwgRU1QVFkyXTsKICAgICAgICBjYXNlICJSZWdFeHAiOgogICAgICAgICAgcmV0dXJuIFtSRUdFWFAsIEVNUFRZMl07CiAgICAgICAgY2FzZSAiTWFwIjoKICAgICAgICAgIHJldHVybiBbTUFQLCBFTVBUWTJdOwogICAgICAgIGNhc2UgIlNldCI6CiAgICAgICAgICByZXR1cm4gW1NFVCwgRU1QVFkyXTsKICAgICAgICBjYXNlICJEYXRhVmlldyI6CiAgICAgICAgICByZXR1cm4gW0FSUkFZLCBhc1N0cmluZ107CiAgICAgIH0KICAgICAgaWYgKGFzU3RyaW5nLmluY2x1ZGVzKCJBcnJheSIpKQogICAgICAgIHJldHVybiBbQVJSQVksIGFzU3RyaW5nXTsKICAgICAgaWYgKGFzU3RyaW5nLmluY2x1ZGVzKCJFcnJvciIpKQogICAgICAgIHJldHVybiBbRVJST1IsIGFzU3RyaW5nXTsKICAgICAgcmV0dXJuIFtPQkpFQ1QsIGFzU3RyaW5nXTsKICAgIH07CiAgICBzaG91bGRTa2lwID0gKFtUWVBFLCB0eXBlNV0pID0+IFRZUEUgPT09IFBSSU1JVElWRSAmJiAodHlwZTUgPT09ICJmdW5jdGlvbiIgfHwgdHlwZTUgPT09ICJzeW1ib2wiKTsKICAgIHNlcmlhbGl6ZXIgPSAoc3RyaWN0LCBqc29uLCAkMywgXzQpID0+IHsKICAgICAgY29uc3QgYXMgPSAob3V0LCB2YWx1ZTIpID0+IHsKICAgICAgICBjb25zdCBpbmRleDIgPSBfNC5wdXNoKG91dCkgLSAxOwogICAgICAgICQzLnNldCh2YWx1ZTIsIGluZGV4Mik7CiAgICAgICAgcmV0dXJuIGluZGV4MjsKICAgICAgfTsKICAgICAgY29uc3QgcGFpciA9ICh2YWx1ZTIpID0+IHsKICAgICAgICBpZiAoJDMuaGFzKHZhbHVlMikpCiAgICAgICAgICByZXR1cm4gJDMuZ2V0KHZhbHVlMik7CiAgICAgICAgbGV0IFtUWVBFLCB0eXBlNV0gPSB0eXBlT2YodmFsdWUyKTsKICAgICAgICBzd2l0Y2ggKFRZUEUpIHsKICAgICAgICAgIGNhc2UgUFJJTUlUSVZFOiB7CiAgICAgICAgICAgIGxldCBlbnRyeSA9IHZhbHVlMjsKICAgICAgICAgICAgc3dpdGNoICh0eXBlNSkgewogICAgICAgICAgICAgIGNhc2UgImJpZ2ludCI6CiAgICAgICAgICAgICAgICBUWVBFID0gQklHSU5UOwogICAgICAgICAgICAgICAgZW50cnkgPSB2YWx1ZTIudG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImZ1bmN0aW9uIjoKICAgICAgICAgICAgICBjYXNlICJzeW1ib2wiOgogICAgICAgICAgICAgICAgaWYgKHN0cmljdCkKICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigidW5hYmxlIHRvIHNlcmlhbGl6ZSAiICsgdHlwZTUpOwogICAgICAgICAgICAgICAgZW50cnkgPSBudWxsOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAidW5kZWZpbmVkIjoKICAgICAgICAgICAgICAgIHJldHVybiBhcyhbVk9JRF0sIHZhbHVlMik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGFzKFtUWVBFLCBlbnRyeV0sIHZhbHVlMik7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIEFSUkFZOiB7CiAgICAgICAgICAgIGlmICh0eXBlNSkgewogICAgICAgICAgICAgIGxldCBzcHJlYWQgPSB2YWx1ZTI7CiAgICAgICAgICAgICAgaWYgKHR5cGU1ID09PSAiRGF0YVZpZXciKSB7CiAgICAgICAgICAgICAgICBzcHJlYWQgPSBuZXcgVWludDhBcnJheSh2YWx1ZTIuYnVmZmVyKTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGU1ID09PSAiQXJyYXlCdWZmZXIiKSB7CiAgICAgICAgICAgICAgICBzcHJlYWQgPSBuZXcgVWludDhBcnJheSh2YWx1ZTIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gYXMoW3R5cGU1LCBbLi4uc3ByZWFkXV0sIHZhbHVlMik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgYXJyID0gW107CiAgICAgICAgICAgIGNvbnN0IGluZGV4MiA9IGFzKFtUWVBFLCBhcnJdLCB2YWx1ZTIpOwogICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHZhbHVlMikKICAgICAgICAgICAgICBhcnIucHVzaChwYWlyKGVudHJ5KSk7CiAgICAgICAgICAgIHJldHVybiBpbmRleDI7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIE9CSkVDVDogewogICAgICAgICAgICBpZiAodHlwZTUpIHsKICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGU1KSB7CiAgICAgICAgICAgICAgICBjYXNlICJCaWdJbnQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYXMoW3R5cGU1LCB2YWx1ZTIudG9TdHJpbmcoKV0sIHZhbHVlMik7CiAgICAgICAgICAgICAgICBjYXNlICJCb29sZWFuIjoKICAgICAgICAgICAgICAgIGNhc2UgIk51bWJlciI6CiAgICAgICAgICAgICAgICBjYXNlICJTdHJpbmciOgogICAgICAgICAgICAgICAgICByZXR1cm4gYXMoW3R5cGU1LCB2YWx1ZTIudmFsdWVPZigpXSwgdmFsdWUyKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGpzb24gJiYgInRvSlNPTiIgaW4gdmFsdWUyKQogICAgICAgICAgICAgIHJldHVybiBwYWlyKHZhbHVlMi50b0pTT04oKSk7CiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBbXTsKICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gYXMoW1RZUEUsIGVudHJpZXNdLCB2YWx1ZTIpOwogICAgICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2Yga2V5cyh2YWx1ZTIpKSB7CiAgICAgICAgICAgICAgaWYgKHN0cmljdCB8fCAhc2hvdWxkU2tpcCh0eXBlT2YodmFsdWUyW2tleTJdKSkpCiAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goW3BhaXIoa2V5MiksIHBhaXIodmFsdWUyW2tleTJdKV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBpbmRleDI7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIERBVEU6CiAgICAgICAgICAgIHJldHVybiBhcyhbVFlQRSwgdmFsdWUyLnRvSVNPU3RyaW5nKCldLCB2YWx1ZTIpOwogICAgICAgICAgY2FzZSBSRUdFWFA6IHsKICAgICAgICAgICAgY29uc3QgeyBzb3VyY2UsIGZsYWdzIH0gPSB2YWx1ZTI7CiAgICAgICAgICAgIHJldHVybiBhcyhbVFlQRSwgeyBzb3VyY2UsIGZsYWdzIH1dLCB2YWx1ZTIpOwogICAgICAgICAgfQogICAgICAgICAgY2FzZSBNQVA6IHsKICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IFtdOwogICAgICAgICAgICBjb25zdCBpbmRleDIgPSBhcyhbVFlQRSwgZW50cmllc10sIHZhbHVlMik7CiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleTIsIGVudHJ5XSBvZiB2YWx1ZTIpIHsKICAgICAgICAgICAgICBpZiAoc3RyaWN0IHx8ICEoc2hvdWxkU2tpcCh0eXBlT2Yoa2V5MikpIHx8IHNob3VsZFNraXAodHlwZU9mKGVudHJ5KSkpKQogICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKFtwYWlyKGtleTIpLCBwYWlyKGVudHJ5KV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBpbmRleDI7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIFNFVDogewogICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gW107CiAgICAgICAgICAgIGNvbnN0IGluZGV4MiA9IGFzKFtUWVBFLCBlbnRyaWVzXSwgdmFsdWUyKTsKICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB2YWx1ZTIpIHsKICAgICAgICAgICAgICBpZiAoc3RyaWN0IHx8ICFzaG91bGRTa2lwKHR5cGVPZihlbnRyeSkpKQogICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKHBhaXIoZW50cnkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gaW5kZXgyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCB7IG1lc3NhZ2U6IG1lc3NhZ2UyIH0gPSB2YWx1ZTI7CiAgICAgICAgcmV0dXJuIGFzKFtUWVBFLCB7IG5hbWU6IHR5cGU1LCBtZXNzYWdlOiBtZXNzYWdlMiB9XSwgdmFsdWUyKTsKICAgICAgfTsKICAgICAgcmV0dXJuIHBhaXI7CiAgICB9OwogICAgc2VyaWFsaXplMiA9ICh2YWx1ZTIsIHsganNvbiwgbG9zc3kgfSA9IHt9KSA9PiB7CiAgICAgIGNvbnN0IF80ID0gW107CiAgICAgIHJldHVybiBzZXJpYWxpemVyKCEoanNvbiB8fCBsb3NzeSksICEhanNvbiwgLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgXzQpKHZhbHVlMiksIF80OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vaW5kZXguanMKdmFyIGVzbV9kZWZhdWx0Owp2YXIgaW5pdF9lc20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdW5nYXArc3RydWN0dXJlZC1jbG9uZUAxLjMuMC9ub2RlX21vZHVsZXMvQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUvZXNtL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVzZXJpYWxpemUoKTsKICAgIGluaXRfc2VyaWFsaXplKCk7CiAgICBlc21fZGVmYXVsdCA9IHR5cGVvZiBzdHJ1Y3R1cmVkQ2xvbmUgPT09ICJmdW5jdGlvbiIgPyAoCiAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqLwogICAgICAoYW55LCBvcHRpb25zKSA9PiBvcHRpb25zICYmICgianNvbiIgaW4gb3B0aW9ucyB8fCAibG9zc3kiIGluIG9wdGlvbnMpID8gZGVzZXJpYWxpemUoc2VyaWFsaXplMihhbnksIG9wdGlvbnMpKSA6IHN0cnVjdHVyZWRDbG9uZShhbnkpCiAgICApIDogKGFueSwgb3B0aW9ucykgPT4gZGVzZXJpYWxpemUoc2VyaWFsaXplMihhbnksIG9wdGlvbnMpKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtcG9zaXRpb25ANS4wLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtcG9zaXRpb24vbGliL2luZGV4LmpzCmZ1bmN0aW9uIHBvaW50Myh0eXBlNSkgewogIHJldHVybiBwb2ludDQ7CiAgZnVuY3Rpb24gcG9pbnQ0KG5vZGUyKSB7CiAgICBjb25zdCBwb2ludDUgPSBub2RlMiAmJiBub2RlMi5wb3NpdGlvbiAmJiBub2RlMi5wb3NpdGlvblt0eXBlNV0gfHwge307CiAgICBpZiAodHlwZW9mIHBvaW50NS5saW5lID09PSAibnVtYmVyIiAmJiBwb2ludDUubGluZSA+IDAgJiYgdHlwZW9mIHBvaW50NS5jb2x1bW4gPT09ICJudW1iZXIiICYmIHBvaW50NS5jb2x1bW4gPiAwKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgbGluZTogcG9pbnQ1LmxpbmUsCiAgICAgICAgY29sdW1uOiBwb2ludDUuY29sdW1uLAogICAgICAgIG9mZnNldDogdHlwZW9mIHBvaW50NS5vZmZzZXQgPT09ICJudW1iZXIiICYmIHBvaW50NS5vZmZzZXQgPiAtMSA/IHBvaW50NS5vZmZzZXQgOiB2b2lkIDAKICAgICAgfTsKICAgIH0KICB9Cn0KZnVuY3Rpb24gcG9zaXRpb24yKG5vZGUyKSB7CiAgY29uc3Qgc3RhcnQgPSBwb2ludFN0YXJ0KG5vZGUyKTsKICBjb25zdCBlbmQzID0gcG9pbnRFbmQobm9kZTIpOwogIGlmIChzdGFydCAmJiBlbmQzKSB7CiAgICByZXR1cm4geyBzdGFydCwgZW5kOiBlbmQzIH07CiAgfQp9CnZhciBwb2ludEVuZCwgcG9pbnRTdGFydDsKdmFyIGluaXRfbGliMjUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXBvc2l0aW9uQDUuMC4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXBvc2l0aW9uL2xpYi9pbmRleC5qcyIoKSB7CiAgICBwb2ludEVuZCA9IHBvaW50MygiZW5kIik7CiAgICBwb2ludFN0YXJ0ID0gcG9pbnQzKCJzdGFydCIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1wb3NpdGlvbkA1LjAuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1wb3NpdGlvbi9pbmRleC5qcwp2YXIgaW5pdF91bmlzdF91dGlsX3Bvc2l0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1wb3NpdGlvbkA1LjAuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1wb3NpdGlvbi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjI1KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtc2FuaXRpemVANS4wLjIvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC1zYW5pdGl6ZS9saWIvc2NoZW1hLmpzCnZhciBhcmlhLCBkZWZhdWx0U2NoZW1hOwp2YXIgaW5pdF9zY2hlbWEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtc2FuaXRpemVANS4wLjIvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC1zYW5pdGl6ZS9saWIvc2NoZW1hLmpzIigpIHsKICAgIGFyaWEgPSBbImFyaWFEZXNjcmliZWRCeSIsICJhcmlhTGFiZWwiLCAiYXJpYUxhYmVsbGVkQnkiXTsKICAgIGRlZmF1bHRTY2hlbWEgPSB7CiAgICAgIGFuY2VzdG9yczogewogICAgICAgIHRib2R5OiBbInRhYmxlIl0sCiAgICAgICAgdGQ6IFsidGFibGUiXSwKICAgICAgICB0aDogWyJ0YWJsZSJdLAogICAgICAgIHRoZWFkOiBbInRhYmxlIl0sCiAgICAgICAgdGZvb3Q6IFsidGFibGUiXSwKICAgICAgICB0cjogWyJ0YWJsZSJdCiAgICAgIH0sCiAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBhOiBbCiAgICAgICAgICAuLi5hcmlhLAogICAgICAgICAgLy8gTm90ZTogdGhlc2UgMyBhcmUgdXNlZCBieSBHRk0gZm9vdG5vdGVzLCB0aGV5IGRvIHdvcmsgb24gYWxsIGxpbmtzLgogICAgICAgICAgImRhdGFGb290bm90ZUJhY2tyZWYiLAogICAgICAgICAgImRhdGFGb290bm90ZVJlZiIsCiAgICAgICAgICBbImNsYXNzTmFtZSIsICJkYXRhLWZvb3Rub3RlLWJhY2tyZWYiXSwKICAgICAgICAgICJocmVmIgogICAgICAgIF0sCiAgICAgICAgYmxvY2txdW90ZTogWyJjaXRlIl0sCiAgICAgICAgLy8gTm90ZTogdGhpcyBjbGFzcyBpcyBub3Qgbm9ybWFsbHkgYWxsb3dlZCBieSBHSCwgd2hlbiBtYW51YWxseSB3cml0aW5nCiAgICAgICAgLy8gYGNvZGVgIGFzIEhUTUwgaW4gbWFya2Rvd24sIHRoZXkgYWRkcyBpdCBzb21lIG90aGVyIHdheS4KICAgICAgICAvLyBXZSBjYW7igJl0IGRvIHRoYXQsIHNvIHdlIGhhdmUgdG8gYWxsb3cgaXQuCiAgICAgICAgY29kZTogW1siY2xhc3NOYW1lIiwgL15sYW5ndWFnZS0uL11dLAogICAgICAgIGRlbDogWyJjaXRlIl0sCiAgICAgICAgZGl2OiBbIml0ZW1TY29wZSIsICJpdGVtVHlwZSJdLAogICAgICAgIGRsOiBbLi4uYXJpYV0sCiAgICAgICAgLy8gTm90ZTogdGhpcyBpcyB1c2VkIGJ5IEdGTSBmb290bm90ZXMuCiAgICAgICAgaDI6IFtbImNsYXNzTmFtZSIsICJzci1vbmx5Il1dLAogICAgICAgIGltZzogWy4uLmFyaWEsICJsb25nRGVzYyIsICJzcmMiXSwKICAgICAgICAvLyBOb3RlOiBgaW5wdXRgIGlzIG5vdCBub3JtYWxseSBhbGxvd2VkIGJ5IEdILCB3aGVuIG1hbnVhbGx5IHdyaXRpbmcKICAgICAgICAvLyBpdCBpbiBtYXJrZG93biwgdGhleSBhZGQgaXQgZnJvbSB0YXNrbGlzdHMgc29tZSBvdGhlciB3YXkuCiAgICAgICAgLy8gV2UgY2Fu4oCZdCBkbyB0aGF0LCBzbyB3ZSBoYXZlIHRvIGFsbG93IGl0LgogICAgICAgIGlucHV0OiBbCiAgICAgICAgICBbImRpc2FibGVkIiwgdHJ1ZV0sCiAgICAgICAgICBbInR5cGUiLCAiY2hlY2tib3giXQogICAgICAgIF0sCiAgICAgICAgaW5zOiBbImNpdGUiXSwKICAgICAgICAvLyBOb3RlOiB0aGlzIGNsYXNzIGlzIG5vdCBub3JtYWxseSBhbGxvd2VkIGJ5IEdILCB3aGVuIG1hbnVhbGx5IHdyaXRpbmcKICAgICAgICAvLyBgbGlgIGFzIEhUTUwgaW4gbWFya2Rvd24sIHRoZXkgYWRkcyBpdCBzb21lIG90aGVyIHdheS4KICAgICAgICAvLyBXZSBjYW7igJl0IGRvIHRoYXQsIHNvIHdlIGhhdmUgdG8gYWxsb3cgaXQuCiAgICAgICAgbGk6IFtbImNsYXNzTmFtZSIsICJ0YXNrLWxpc3QtaXRlbSJdXSwKICAgICAgICAvLyBOb3RlOiB0aGlzIGNsYXNzIGlzIG5vdCBub3JtYWxseSBhbGxvd2VkIGJ5IEdILCB3aGVuIG1hbnVhbGx5IHdyaXRpbmcKICAgICAgICAvLyBgb2xgIGFzIEhUTUwgaW4gbWFya2Rvd24sIHRoZXkgYWRkcyBpdCBzb21lIG90aGVyIHdheS4KICAgICAgICAvLyBXZSBjYW7igJl0IGRvIHRoYXQsIHNvIHdlIGhhdmUgdG8gYWxsb3cgaXQuCiAgICAgICAgb2w6IFsuLi5hcmlhLCBbImNsYXNzTmFtZSIsICJjb250YWlucy10YXNrLWxpc3QiXV0sCiAgICAgICAgcTogWyJjaXRlIl0sCiAgICAgICAgc2VjdGlvbjogWyJkYXRhRm9vdG5vdGVzIiwgWyJjbGFzc05hbWUiLCAiZm9vdG5vdGVzIl1dLAogICAgICAgIHNvdXJjZTogWyJzcmNTZXQiXSwKICAgICAgICBzdW1tYXJ5OiBbLi4uYXJpYV0sCiAgICAgICAgdGFibGU6IFsuLi5hcmlhXSwKICAgICAgICAvLyBOb3RlOiB0aGlzIGNsYXNzIGlzIG5vdCBub3JtYWxseSBhbGxvd2VkIGJ5IEdILCB3aGVuIG1hbnVhbGx5IHdyaXRpbmcKICAgICAgICAvLyBgb2xgIGFzIEhUTUwgaW4gbWFya2Rvd24sIHRoZXkgYWRkcyBpdCBzb21lIG90aGVyIHdheS4KICAgICAgICAvLyBXZSBjYW7igJl0IGRvIHRoYXQsIHNvIHdlIGhhdmUgdG8gYWxsb3cgaXQuCiAgICAgICAgdWw6IFsuLi5hcmlhLCBbImNsYXNzTmFtZSIsICJjb250YWlucy10YXNrLWxpc3QiXV0sCiAgICAgICAgIioiOiBbCiAgICAgICAgICAiYWJiciIsCiAgICAgICAgICAiYWNjZXB0IiwKICAgICAgICAgICJhY2NlcHRDaGFyc2V0IiwKICAgICAgICAgICJhY2Nlc3NLZXkiLAogICAgICAgICAgImFjdGlvbiIsCiAgICAgICAgICAiYWxpZ24iLAogICAgICAgICAgImFsdCIsCiAgICAgICAgICAiYXhpcyIsCiAgICAgICAgICAiYm9yZGVyIiwKICAgICAgICAgICJjZWxsUGFkZGluZyIsCiAgICAgICAgICAiY2VsbFNwYWNpbmciLAogICAgICAgICAgImNoYXIiLAogICAgICAgICAgImNoYXJPZmYiLAogICAgICAgICAgImNoYXJTZXQiLAogICAgICAgICAgImNoZWNrZWQiLAogICAgICAgICAgImNsZWFyIiwKICAgICAgICAgICJjb2xTcGFuIiwKICAgICAgICAgICJjb2xvciIsCiAgICAgICAgICAiY29scyIsCiAgICAgICAgICAiY29tcGFjdCIsCiAgICAgICAgICAiY29vcmRzIiwKICAgICAgICAgICJkYXRlVGltZSIsCiAgICAgICAgICAiZGlyIiwKICAgICAgICAgIC8vIE5vdGU6IGBkaXNhYmxlZGAgaXMgdGVjaG5pY2FsbHkgYWxsb3dlZCBvbiBhbGwgZWxlbWVudHMgYnkgR0guCiAgICAgICAgICAvLyBCdXQgaXQgaXMgdXNlbGVzcyBvbiBldmVyeXRoaW5nIGV4Y2VwdCBgaW5wdXRgLgogICAgICAgICAgLy8gQmVjYXVzZSBgaW5wdXRgcyBhcmUgbm9ybWFsbHkgbm90IGFsbG93ZWQsIGJ1dCB3ZSBhbGxvdyB0aGVtIGZvcgogICAgICAgICAgLy8gY2hlY2tib3hlcyBkdWUgdG8gdGFza2xpc3RzLCB3ZSBhbGxvdyBgZGlzYWJsZWRgIG9ubHkgdGhlcmUuCiAgICAgICAgICAiZW5jVHlwZSIsCiAgICAgICAgICAiZnJhbWUiLAogICAgICAgICAgImhTcGFjZSIsCiAgICAgICAgICAiaGVhZGVycyIsCiAgICAgICAgICAiaGVpZ2h0IiwKICAgICAgICAgICJocmVmTGFuZyIsCiAgICAgICAgICAiaHRtbEZvciIsCiAgICAgICAgICAiaWQiLAogICAgICAgICAgImlzTWFwIiwKICAgICAgICAgICJpdGVtUHJvcCIsCiAgICAgICAgICAibGFiZWwiLAogICAgICAgICAgImxhbmciLAogICAgICAgICAgIm1heExlbmd0aCIsCiAgICAgICAgICAibWVkaWEiLAogICAgICAgICAgIm1ldGhvZCIsCiAgICAgICAgICAibXVsdGlwbGUiLAogICAgICAgICAgIm5hbWUiLAogICAgICAgICAgIm5vSHJlZiIsCiAgICAgICAgICAibm9TaGFkZSIsCiAgICAgICAgICAibm9XcmFwIiwKICAgICAgICAgICJvcGVuIiwKICAgICAgICAgICJwcm9tcHQiLAogICAgICAgICAgInJlYWRPbmx5IiwKICAgICAgICAgICJyZXYiLAogICAgICAgICAgInJvd1NwYW4iLAogICAgICAgICAgInJvd3MiLAogICAgICAgICAgInJ1bGVzIiwKICAgICAgICAgICJzY29wZSIsCiAgICAgICAgICAic2VsZWN0ZWQiLAogICAgICAgICAgInNoYXBlIiwKICAgICAgICAgICJzaXplIiwKICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICJzdGFydCIsCiAgICAgICAgICAic3VtbWFyeSIsCiAgICAgICAgICAidGFiSW5kZXgiLAogICAgICAgICAgInRpdGxlIiwKICAgICAgICAgICJ1c2VNYXAiLAogICAgICAgICAgInZBbGlnbiIsCiAgICAgICAgICAidmFsdWUiLAogICAgICAgICAgIndpZHRoIgogICAgICAgIF0KICAgICAgfSwKICAgICAgY2xvYmJlcjogWyJhcmlhRGVzY3JpYmVkQnkiLCAiYXJpYUxhYmVsbGVkQnkiLCAiaWQiLCAibmFtZSJdLAogICAgICBjbG9iYmVyUHJlZml4OiAidXNlci1jb250ZW50LSIsCiAgICAgIHByb3RvY29sczogewogICAgICAgIGNpdGU6IFsiaHR0cCIsICJodHRwcyJdLAogICAgICAgIGhyZWY6IFsiaHR0cCIsICJodHRwcyIsICJpcmMiLCAiaXJjcyIsICJtYWlsdG8iLCAieG1wcCJdLAogICAgICAgIGxvbmdEZXNjOiBbImh0dHAiLCAiaHR0cHMiXSwKICAgICAgICBzcmM6IFsiaHR0cCIsICJodHRwcyJdCiAgICAgIH0sCiAgICAgIHJlcXVpcmVkOiB7CiAgICAgICAgaW5wdXQ6IHsgZGlzYWJsZWQ6IHRydWUsIHR5cGU6ICJjaGVja2JveCIgfQogICAgICB9LAogICAgICBzdHJpcDogWyJzY3JpcHQiXSwKICAgICAgdGFnTmFtZXM6IFsKICAgICAgICAiYSIsCiAgICAgICAgImIiLAogICAgICAgICJibG9ja3F1b3RlIiwKICAgICAgICAiYnIiLAogICAgICAgICJjb2RlIiwKICAgICAgICAiZGQiLAogICAgICAgICJkZWwiLAogICAgICAgICJkZXRhaWxzIiwKICAgICAgICAiZGl2IiwKICAgICAgICAiZGwiLAogICAgICAgICJkdCIsCiAgICAgICAgImVtIiwKICAgICAgICAiaDEiLAogICAgICAgICJoMiIsCiAgICAgICAgImgzIiwKICAgICAgICAiaDQiLAogICAgICAgICJoNSIsCiAgICAgICAgImg2IiwKICAgICAgICAiaHIiLAogICAgICAgICJpIiwKICAgICAgICAiaW1nIiwKICAgICAgICAvLyBOb3RlOiBgaW5wdXRgIGlzIG5vdCBub3JtYWxseSBhbGxvd2VkIGJ5IEdILCB3aGVuIG1hbnVhbGx5IHdyaXRpbmcKICAgICAgICAvLyBpdCBpbiBtYXJrZG93biwgdGhleSBhZGQgaXQgZnJvbSB0YXNrbGlzdHMgc29tZSBvdGhlciB3YXkuCiAgICAgICAgLy8gV2UgY2Fu4oCZdCBkbyB0aGF0LCBzbyB3ZSBoYXZlIHRvIGFsbG93IGl0LgogICAgICAgICJpbnB1dCIsCiAgICAgICAgImlucyIsCiAgICAgICAgImtiZCIsCiAgICAgICAgImxpIiwKICAgICAgICAib2wiLAogICAgICAgICJwIiwKICAgICAgICAicGljdHVyZSIsCiAgICAgICAgInByZSIsCiAgICAgICAgInEiLAogICAgICAgICJycCIsCiAgICAgICAgInJ0IiwKICAgICAgICAicnVieSIsCiAgICAgICAgInMiLAogICAgICAgICJzYW1wIiwKICAgICAgICAic2VjdGlvbiIsCiAgICAgICAgInNvdXJjZSIsCiAgICAgICAgInNwYW4iLAogICAgICAgICJzdHJpa2UiLAogICAgICAgICJzdHJvbmciLAogICAgICAgICJzdWIiLAogICAgICAgICJzdW1tYXJ5IiwKICAgICAgICAic3VwIiwKICAgICAgICAidGFibGUiLAogICAgICAgICJ0Ym9keSIsCiAgICAgICAgInRkIiwKICAgICAgICAidGZvb3QiLAogICAgICAgICJ0aCIsCiAgICAgICAgInRoZWFkIiwKICAgICAgICAidHIiLAogICAgICAgICJ0dCIsCiAgICAgICAgInVsIiwKICAgICAgICAidmFyIgogICAgICBdCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXNhbml0aXplQDUuMC4yL25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtc2FuaXRpemUvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHNhbml0aXplKG5vZGUyLCBvcHRpb25zKSB7CiAgbGV0IHJlc3VsdCA9IHsgdHlwZTogInJvb3QiLCBjaGlsZHJlbjogW10gfTsKICBjb25zdCBzdGF0ZTE0ID0gewogICAgc2NoZW1hOiBvcHRpb25zID8geyAuLi5kZWZhdWx0U2NoZW1hLCAuLi5vcHRpb25zIH0gOiBkZWZhdWx0U2NoZW1hLAogICAgc3RhY2s6IFtdCiAgfTsKICBjb25zdCByZXBsYWNlNSA9IHRyYW5zZm9ybShzdGF0ZTE0LCBub2RlMik7CiAgaWYgKHJlcGxhY2U1KSB7CiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXBsYWNlNSkpIHsKICAgICAgaWYgKHJlcGxhY2U1Lmxlbmd0aCA9PT0gMSkgewogICAgICAgIHJlc3VsdCA9IHJlcGxhY2U1WzBdOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IHJlcGxhY2U1OwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSByZXBsYWNlNTsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiB0cmFuc2Zvcm0oc3RhdGUxNCwgbm9kZTIpIHsKICBpZiAobm9kZTIgJiYgdHlwZW9mIG5vZGUyID09PSAib2JqZWN0IikgewogICAgY29uc3QgdW5zYWZlMiA9ICgKICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBSZWFkb25seTx1bmtub3duPj59ICovCiAgICAgIG5vZGUyCiAgICApOwogICAgY29uc3QgdHlwZTUgPSB0eXBlb2YgdW5zYWZlMi50eXBlID09PSAic3RyaW5nIiA/IHVuc2FmZTIudHlwZSA6ICIiOwogICAgc3dpdGNoICh0eXBlNSkgewogICAgICBjYXNlICJjb21tZW50IjogewogICAgICAgIHJldHVybiBjb21tZW50KHN0YXRlMTQsIHVuc2FmZTIpOwogICAgICB9CiAgICAgIGNhc2UgImRvY3R5cGUiOiB7CiAgICAgICAgcmV0dXJuIGRvY3R5cGUoc3RhdGUxNCwgdW5zYWZlMik7CiAgICAgIH0KICAgICAgY2FzZSAiZWxlbWVudCI6IHsKICAgICAgICByZXR1cm4gZWxlbWVudDIoc3RhdGUxNCwgdW5zYWZlMik7CiAgICAgIH0KICAgICAgY2FzZSAicm9vdCI6IHsKICAgICAgICByZXR1cm4gcm9vdDIoc3RhdGUxNCwgdW5zYWZlMik7CiAgICAgIH0KICAgICAgY2FzZSAidGV4dCI6IHsKICAgICAgICByZXR1cm4gdGV4dDUoc3RhdGUxNCwgdW5zYWZlMik7CiAgICAgIH0KICAgICAgZGVmYXVsdDoKICAgIH0KICB9Cn0KZnVuY3Rpb24gY29tbWVudChzdGF0ZTE0LCB1bnNhZmUyKSB7CiAgaWYgKHN0YXRlMTQuc2NoZW1hLmFsbG93Q29tbWVudHMpIHsKICAgIGNvbnN0IHJlc3VsdCA9IHR5cGVvZiB1bnNhZmUyLnZhbHVlID09PSAic3RyaW5nIiA/IHVuc2FmZTIudmFsdWUgOiAiIjsKICAgIGNvbnN0IGluZGV4MiA9IHJlc3VsdC5pbmRleE9mKCItLT4iKTsKICAgIGNvbnN0IHZhbHVlMiA9IGluZGV4MiA8IDAgPyByZXN1bHQgOiByZXN1bHQuc2xpY2UoMCwgaW5kZXgyKTsKICAgIGNvbnN0IG5vZGUyID0geyB0eXBlOiAiY29tbWVudCIsIHZhbHVlOiB2YWx1ZTIgfTsKICAgIHBhdGNoKG5vZGUyLCB1bnNhZmUyKTsKICAgIHJldHVybiBub2RlMjsKICB9Cn0KZnVuY3Rpb24gZG9jdHlwZShzdGF0ZTE0LCB1bnNhZmUyKSB7CiAgaWYgKHN0YXRlMTQuc2NoZW1hLmFsbG93RG9jdHlwZXMpIHsKICAgIGNvbnN0IG5vZGUyID0geyB0eXBlOiAiZG9jdHlwZSIgfTsKICAgIHBhdGNoKG5vZGUyLCB1bnNhZmUyKTsKICAgIHJldHVybiBub2RlMjsKICB9Cn0KZnVuY3Rpb24gZWxlbWVudDIoc3RhdGUxNCwgdW5zYWZlMikgewogIGNvbnN0IG5hbWUgPSB0eXBlb2YgdW5zYWZlMi50YWdOYW1lID09PSAic3RyaW5nIiA/IHVuc2FmZTIudGFnTmFtZSA6ICIiOwogIHN0YXRlMTQuc3RhY2sucHVzaChuYW1lKTsKICBjb25zdCBjb250ZW50MyA9ICgKICAgIC8qKiBAdHlwZSB7QXJyYXk8RWxlbWVudENvbnRlbnQ+fSAqLwogICAgY2hpbGRyZW4oc3RhdGUxNCwgdW5zYWZlMi5jaGlsZHJlbikKICApOwogIGNvbnN0IHByb3BlcnRpZXNfID0gcHJvcGVydGllcyhzdGF0ZTE0LCB1bnNhZmUyLnByb3BlcnRpZXMpOwogIHN0YXRlMTQuc3RhY2sucG9wKCk7CiAgbGV0IHNhZmVFbGVtZW50ID0gZmFsc2U7CiAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gIioiICYmICghc3RhdGUxNC5zY2hlbWEudGFnTmFtZXMgfHwgc3RhdGUxNC5zY2hlbWEudGFnTmFtZXMuaW5jbHVkZXMobmFtZSkpKSB7CiAgICBzYWZlRWxlbWVudCA9IHRydWU7CiAgICBpZiAoc3RhdGUxNC5zY2hlbWEuYW5jZXN0b3JzICYmIG93bjcuY2FsbChzdGF0ZTE0LnNjaGVtYS5hbmNlc3RvcnMsIG5hbWUpKSB7CiAgICAgIGNvbnN0IGFuY2VzdG9ycyA9IHN0YXRlMTQuc2NoZW1hLmFuY2VzdG9yc1tuYW1lXTsKICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICBzYWZlRWxlbWVudCA9IGZhbHNlOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBhbmNlc3RvcnMubGVuZ3RoKSB7CiAgICAgICAgaWYgKHN0YXRlMTQuc3RhY2suaW5jbHVkZXMoYW5jZXN0b3JzW2luZGV4Ml0pKSB7CiAgICAgICAgICBzYWZlRWxlbWVudCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIGlmICghc2FmZUVsZW1lbnQpIHsKICAgIHJldHVybiBzdGF0ZTE0LnNjaGVtYS5zdHJpcCAmJiAhc3RhdGUxNC5zY2hlbWEuc3RyaXAuaW5jbHVkZXMobmFtZSkgPyBjb250ZW50MyA6IHZvaWQgMDsKICB9CiAgY29uc3Qgbm9kZTIgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiBuYW1lLAogICAgcHJvcGVydGllczogcHJvcGVydGllc18sCiAgICBjaGlsZHJlbjogY29udGVudDMKICB9OwogIHBhdGNoKG5vZGUyLCB1bnNhZmUyKTsKICByZXR1cm4gbm9kZTI7Cn0KZnVuY3Rpb24gcm9vdDIoc3RhdGUxNCwgdW5zYWZlMikgewogIGNvbnN0IGNvbnRlbnQzID0gKAogICAgLyoqIEB0eXBlIHtBcnJheTxSb290Q29udGVudD59ICovCiAgICBjaGlsZHJlbihzdGF0ZTE0LCB1bnNhZmUyLmNoaWxkcmVuKQogICk7CiAgY29uc3Qgbm9kZTIgPSB7IHR5cGU6ICJyb290IiwgY2hpbGRyZW46IGNvbnRlbnQzIH07CiAgcGF0Y2gobm9kZTIsIHVuc2FmZTIpOwogIHJldHVybiBub2RlMjsKfQpmdW5jdGlvbiB0ZXh0NShfNCwgdW5zYWZlMikgewogIGNvbnN0IHZhbHVlMiA9IHR5cGVvZiB1bnNhZmUyLnZhbHVlID09PSAic3RyaW5nIiA/IHVuc2FmZTIudmFsdWUgOiAiIjsKICBjb25zdCBub2RlMiA9IHsgdHlwZTogInRleHQiLCB2YWx1ZTogdmFsdWUyIH07CiAgcGF0Y2gobm9kZTIsIHVuc2FmZTIpOwogIHJldHVybiBub2RlMjsKfQpmdW5jdGlvbiBjaGlsZHJlbihzdGF0ZTE0LCBjaGlsZHJlbjIpIHsKICBjb25zdCByZXN1bHRzID0gW107CiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4yKSkgewogICAgY29uc3QgY2hpbGRyZW5Vbmtub3duID0gKAogICAgICAvKiogQHR5cGUge0FycmF5PFJlYWRvbmx5PHVua25vd24+Pn0gKi8KICAgICAgY2hpbGRyZW4yCiAgICApOwogICAgbGV0IGluZGV4MiA9IC0xOwogICAgd2hpbGUgKCsraW5kZXgyIDwgY2hpbGRyZW5Vbmtub3duLmxlbmd0aCkgewogICAgICBjb25zdCB2YWx1ZTIgPSB0cmFuc2Zvcm0oc3RhdGUxNCwgY2hpbGRyZW5Vbmtub3duW2luZGV4Ml0pOwogICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUyKSkgewogICAgICAgICAgcmVzdWx0cy5wdXNoKC4uLnZhbHVlMik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3VsdHMucHVzaCh2YWx1ZTIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4gcmVzdWx0czsKfQpmdW5jdGlvbiBwcm9wZXJ0aWVzKHN0YXRlMTQsIHByb3BlcnRpZXMyKSB7CiAgY29uc3QgdGFnTmFtZSA9IHN0YXRlMTQuc3RhY2tbc3RhdGUxNC5zdGFjay5sZW5ndGggLSAxXTsKICBjb25zdCBhdHRyaWJ1dGVzID0gc3RhdGUxNC5zY2hlbWEuYXR0cmlidXRlczsKICBjb25zdCByZXF1aXJlZCA9IHN0YXRlMTQuc2NoZW1hLnJlcXVpcmVkOwogIGNvbnN0IHNwZWNpZmljID0gYXR0cmlidXRlcyAmJiBvd243LmNhbGwoYXR0cmlidXRlcywgdGFnTmFtZSkgPyBhdHRyaWJ1dGVzW3RhZ05hbWVdIDogdm9pZCAwOwogIGNvbnN0IGRlZmF1bHRzID0gYXR0cmlidXRlcyAmJiBvd243LmNhbGwoYXR0cmlidXRlcywgIioiKSA/IGF0dHJpYnV0ZXNbIioiXSA6IHZvaWQgMDsKICBjb25zdCBwcm9wZXJ0aWVzXyA9ICgKICAgIC8qKiBAdHlwZSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgUmVhZG9ubHk8dW5rbm93bj4+Pn0gKi8KICAgIHByb3BlcnRpZXMyICYmIHR5cGVvZiBwcm9wZXJ0aWVzMiA9PT0gIm9iamVjdCIgPyBwcm9wZXJ0aWVzMiA6IHt9CiAgKTsKICBjb25zdCByZXN1bHQgPSB7fTsKICBsZXQga2V5MjsKICBmb3IgKGtleTIgaW4gcHJvcGVydGllc18pIHsKICAgIGlmIChvd243LmNhbGwocHJvcGVydGllc18sIGtleTIpKSB7CiAgICAgIGNvbnN0IHVuc2FmZTIgPSBwcm9wZXJ0aWVzX1trZXkyXTsKICAgICAgbGV0IHNhZmUyID0gcHJvcGVydHlWYWx1ZSgKICAgICAgICBzdGF0ZTE0LAogICAgICAgIGZpbmREZWZpbml0aW9uKHNwZWNpZmljLCBrZXkyKSwKICAgICAgICBrZXkyLAogICAgICAgIHVuc2FmZTIKICAgICAgKTsKICAgICAgaWYgKHNhZmUyID09PSBudWxsIHx8IHNhZmUyID09PSB2b2lkIDApIHsKICAgICAgICBzYWZlMiA9IHByb3BlcnR5VmFsdWUoc3RhdGUxNCwgZmluZERlZmluaXRpb24oZGVmYXVsdHMsIGtleTIpLCBrZXkyLCB1bnNhZmUyKTsKICAgICAgfQogICAgICBpZiAoc2FmZTIgIT09IG51bGwgJiYgc2FmZTIgIT09IHZvaWQgMCkgewogICAgICAgIHJlc3VsdFtrZXkyXSA9IHNhZmUyOwogICAgICB9CiAgICB9CiAgfQogIGlmIChyZXF1aXJlZCAmJiBvd243LmNhbGwocmVxdWlyZWQsIHRhZ05hbWUpKSB7CiAgICBjb25zdCBwcm9wZXJ0aWVzMyA9IHJlcXVpcmVkW3RhZ05hbWVdOwogICAgZm9yIChrZXkyIGluIHByb3BlcnRpZXMzKSB7CiAgICAgIGlmIChvd243LmNhbGwocHJvcGVydGllczMsIGtleTIpICYmICFvd243LmNhbGwocmVzdWx0LCBrZXkyKSkgewogICAgICAgIHJlc3VsdFtrZXkyXSA9IHByb3BlcnRpZXMzW2tleTJdOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gcHJvcGVydHlWYWx1ZShzdGF0ZTE0LCBkZWZpbml0aW9uMywga2V5MiwgdmFsdWUyKSB7CiAgcmV0dXJuIGRlZmluaXRpb24zID8gQXJyYXkuaXNBcnJheSh2YWx1ZTIpID8gcHJvcGVydHlWYWx1ZU1hbnkoc3RhdGUxNCwgZGVmaW5pdGlvbjMsIGtleTIsIHZhbHVlMikgOiBwcm9wZXJ0eVZhbHVlUHJpbWl0aXZlKHN0YXRlMTQsIGRlZmluaXRpb24zLCBrZXkyLCB2YWx1ZTIpIDogdm9pZCAwOwp9CmZ1bmN0aW9uIHByb3BlcnR5VmFsdWVNYW55KHN0YXRlMTQsIGRlZmluaXRpb24zLCBrZXkyLCB2YWx1ZXMpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgY29uc3QgcmVzdWx0ID0gW107CiAgd2hpbGUgKCsraW5kZXgyIDwgdmFsdWVzLmxlbmd0aCkgewogICAgY29uc3QgdmFsdWUyID0gcHJvcGVydHlWYWx1ZVByaW1pdGl2ZShzdGF0ZTE0LCBkZWZpbml0aW9uMywga2V5MiwgdmFsdWVzW2luZGV4Ml0pOwogICAgaWYgKHR5cGVvZiB2YWx1ZTIgPT09ICJudW1iZXIiIHx8IHR5cGVvZiB2YWx1ZTIgPT09ICJzdHJpbmciKSB7CiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlMik7CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gcHJvcGVydHlWYWx1ZVByaW1pdGl2ZShzdGF0ZTE0LCBkZWZpbml0aW9uMywga2V5MiwgdmFsdWUyKSB7CiAgaWYgKHR5cGVvZiB2YWx1ZTIgIT09ICJib29sZWFuIiAmJiB0eXBlb2YgdmFsdWUyICE9PSAibnVtYmVyIiAmJiB0eXBlb2YgdmFsdWUyICE9PSAic3RyaW5nIikgewogICAgcmV0dXJuOwogIH0KICBpZiAoIXNhZmVQcm90b2NvbChzdGF0ZTE0LCBrZXkyLCB2YWx1ZTIpKSB7CiAgICByZXR1cm47CiAgfQogIGlmICh0eXBlb2YgZGVmaW5pdGlvbjMgPT09ICJvYmplY3QiICYmIGRlZmluaXRpb24zLmxlbmd0aCA+IDEpIHsKICAgIGxldCBvazMgPSBmYWxzZTsKICAgIGxldCBpbmRleDIgPSAwOwogICAgd2hpbGUgKCsraW5kZXgyIDwgZGVmaW5pdGlvbjMubGVuZ3RoKSB7CiAgICAgIGNvbnN0IGFsbG93ZWQgPSBkZWZpbml0aW9uM1tpbmRleDJdOwogICAgICBpZiAoYWxsb3dlZCAmJiB0eXBlb2YgYWxsb3dlZCA9PT0gIm9iamVjdCIgJiYgImZsYWdzIiBpbiBhbGxvd2VkKSB7CiAgICAgICAgaWYgKGFsbG93ZWQudGVzdChTdHJpbmcodmFsdWUyKSkpIHsKICAgICAgICAgIG9rMyA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoYWxsb3dlZCA9PT0gdmFsdWUyKSB7CiAgICAgICAgb2szID0gdHJ1ZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKCFvazMpIHJldHVybjsKICB9CiAgcmV0dXJuIHN0YXRlMTQuc2NoZW1hLmNsb2JiZXIgJiYgc3RhdGUxNC5zY2hlbWEuY2xvYmJlclByZWZpeCAmJiBzdGF0ZTE0LnNjaGVtYS5jbG9iYmVyLmluY2x1ZGVzKGtleTIpID8gc3RhdGUxNC5zY2hlbWEuY2xvYmJlclByZWZpeCArIHZhbHVlMiA6IHZhbHVlMjsKfQpmdW5jdGlvbiBzYWZlUHJvdG9jb2woc3RhdGUxNCwga2V5MiwgdmFsdWUyKSB7CiAgY29uc3QgcHJvdG9jb2xzID0gc3RhdGUxNC5zY2hlbWEucHJvdG9jb2xzICYmIG93bjcuY2FsbChzdGF0ZTE0LnNjaGVtYS5wcm90b2NvbHMsIGtleTIpID8gc3RhdGUxNC5zY2hlbWEucHJvdG9jb2xzW2tleTJdIDogdm9pZCAwOwogIGlmICghcHJvdG9jb2xzIHx8IHByb3RvY29scy5sZW5ndGggPT09IDApIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBjb25zdCB1cmwgPSBTdHJpbmcodmFsdWUyKTsKICBjb25zdCBjb2xvbiA9IHVybC5pbmRleE9mKCI6Iik7CiAgY29uc3QgcXVlc3Rpb25NYXJrID0gdXJsLmluZGV4T2YoIj8iKTsKICBjb25zdCBudW1iZXJTaWduID0gdXJsLmluZGV4T2YoIiMiKTsKICBjb25zdCBzbGFzaCA9IHVybC5pbmRleE9mKCIvIik7CiAgaWYgKGNvbG9uIDwgMCB8fCAvLyBJZiB0aGUgZmlyc3QgY29sb24gaXMgYWZ0ZXIgYSBgP2AsIGAjYCwgb3IgYC9gLCBpdOKAmXMgbm90IGEgcHJvdG9jb2wuCiAgc2xhc2ggPiAtMSAmJiBjb2xvbiA+IHNsYXNoIHx8IHF1ZXN0aW9uTWFyayA+IC0xICYmIGNvbG9uID4gcXVlc3Rpb25NYXJrIHx8IG51bWJlclNpZ24gPiAtMSAmJiBjb2xvbiA+IG51bWJlclNpZ24pIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgcHJvdG9jb2xzLmxlbmd0aCkgewogICAgY29uc3QgcHJvdG9jb2wgPSBwcm90b2NvbHNbaW5kZXgyXTsKICAgIGlmIChjb2xvbiA9PT0gcHJvdG9jb2wubGVuZ3RoICYmIHVybC5zbGljZSgwLCBwcm90b2NvbC5sZW5ndGgpID09PSBwcm90b2NvbCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CiAgcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIHBhdGNoKG5vZGUyLCB1bnNhZmUyKSB7CiAgY29uc3QgY2xlYW5Qb3NpdGlvbiA9IHBvc2l0aW9uMigKICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGxvb2tzIGxpa2UgYSBub2RlLgogICAgdW5zYWZlMgogICk7CiAgaWYgKHVuc2FmZTIuZGF0YSkgewogICAgbm9kZTIuZGF0YSA9IGVzbV9kZWZhdWx0KHVuc2FmZTIuZGF0YSk7CiAgfQogIGlmIChjbGVhblBvc2l0aW9uKSBub2RlMi5wb3NpdGlvbiA9IGNsZWFuUG9zaXRpb247Cn0KZnVuY3Rpb24gZmluZERlZmluaXRpb24oZGVmaW5pdGlvbnMsIGtleTIpIHsKICBsZXQgZGF0YURlZmF1bHQ7CiAgbGV0IGluZGV4MiA9IC0xOwogIGlmIChkZWZpbml0aW9ucykgewogICAgd2hpbGUgKCsraW5kZXgyIDwgZGVmaW5pdGlvbnMubGVuZ3RoKSB7CiAgICAgIGNvbnN0IGVudHJ5ID0gZGVmaW5pdGlvbnNbaW5kZXgyXTsKICAgICAgY29uc3QgbmFtZSA9IHR5cGVvZiBlbnRyeSA9PT0gInN0cmluZyIgPyBlbnRyeSA6IGVudHJ5WzBdOwogICAgICBpZiAobmFtZSA9PT0ga2V5MikgewogICAgICAgIHJldHVybiBlbnRyeTsKICAgICAgfQogICAgICBpZiAobmFtZSA9PT0gImRhdGEqIikgZGF0YURlZmF1bHQgPSBlbnRyeTsKICAgIH0KICB9CiAgaWYgKGtleTIubGVuZ3RoID4gNCAmJiBrZXkyLnNsaWNlKDAsIDQpLnRvTG93ZXJDYXNlKCkgPT09ICJkYXRhIikgewogICAgcmV0dXJuIGRhdGFEZWZhdWx0OwogIH0KfQp2YXIgb3duNzsKdmFyIGluaXRfbGliMjYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtc2FuaXRpemVANS4wLjIvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC1zYW5pdGl6ZS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9lc20oKTsKICAgIGluaXRfdW5pc3RfdXRpbF9wb3NpdGlvbigpOwogICAgaW5pdF9zY2hlbWEoKTsKICAgIG93bjcgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC1zYW5pdGl6ZUA1LjAuMi9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXNhbml0aXplL2luZGV4LmpzCnZhciBpbml0X2hhc3RfdXRpbF9zYW5pdGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC1zYW5pdGl6ZUA1LjAuMi9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXNhbml0aXplL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMjYoKTsKICAgIGluaXRfc2NoZW1hKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2Jsb2NrcXVvdGUuanMKZnVuY3Rpb24gYmxvY2txdW90ZTIoc3RhdGUxNCwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiYmxvY2txdW90ZSIsCiAgICBwcm9wZXJ0aWVzOiB7fSwKICAgIGNoaWxkcmVuOiBzdGF0ZTE0LndyYXAoc3RhdGUxNC5hbGwobm9kZTIpLCB0cnVlKQogIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfYmxvY2txdW90ZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2Jsb2NrcXVvdGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9icmVhay5qcwpmdW5jdGlvbiBoYXJkQnJlYWsyKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWU6ICJiciIsIHByb3BlcnRpZXM6IHt9LCBjaGlsZHJlbjogW10gfTsKICBzdGF0ZTE0LnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBbc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCksIHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlxuIiB9XTsKfQp2YXIgaW5pdF9icmVhazIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2JyZWFrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvY29kZS5qcwpmdW5jdGlvbiBjb2RlMyhzdGF0ZTE0LCBub2RlMikgewogIGNvbnN0IHZhbHVlMiA9IG5vZGUyLnZhbHVlID8gbm9kZTIudmFsdWUgKyAiXG4iIDogIiI7CiAgY29uc3QgcHJvcGVydGllczIgPSB7fTsKICBjb25zdCBsYW5ndWFnZSA9IG5vZGUyLmxhbmcgPyBub2RlMi5sYW5nLnNwbGl0KC9ccysvKSA6IFtdOwogIGlmIChsYW5ndWFnZS5sZW5ndGggPiAwKSB7CiAgICBwcm9wZXJ0aWVzMi5jbGFzc05hbWUgPSBbImxhbmd1YWdlLSIgKyBsYW5ndWFnZVswXV07CiAgfQogIGxldCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiY29kZSIsCiAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzMiwKICAgIGNoaWxkcmVuOiBbeyB0eXBlOiAidGV4dCIsIHZhbHVlOiB2YWx1ZTIgfV0KICB9OwogIGlmIChub2RlMi5tZXRhKSB7CiAgICByZXN1bHQuZGF0YSA9IHsgbWV0YTogbm9kZTIubWV0YSB9OwogIH0KICBzdGF0ZTE0LnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJlc3VsdCA9IHN0YXRlMTQuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwogIHJlc3VsdCA9IHsgdHlwZTogImVsZW1lbnQiLCB0YWdOYW1lOiAicHJlIiwgcHJvcGVydGllczoge30sIGNoaWxkcmVuOiBbcmVzdWx0XSB9OwogIHN0YXRlMTQucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgaW5pdF9jb2RlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvY29kZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2RlbGV0ZS5qcwpmdW5jdGlvbiBzdHJpa2V0aHJvdWdoKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogImRlbCIsCiAgICBwcm9wZXJ0aWVzOiB7fSwKICAgIGNoaWxkcmVuOiBzdGF0ZTE0LmFsbChub2RlMikKICB9OwogIHN0YXRlMTQucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTQuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X2RlbGV0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZGVsZXRlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZW1waGFzaXMuanMKZnVuY3Rpb24gZW1waGFzaXMyKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogImVtIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlMTQuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfZW1waGFzaXMyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9lbXBoYXNpcy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2Zvb3Rub3RlLXJlZmVyZW5jZS5qcwpmdW5jdGlvbiBmb290bm90ZVJlZmVyZW5jZTIoc3RhdGUxNCwgbm9kZTIpIHsKICBjb25zdCBjbG9iYmVyUHJlZml4ID0gdHlwZW9mIHN0YXRlMTQub3B0aW9ucy5jbG9iYmVyUHJlZml4ID09PSAic3RyaW5nIiA/IHN0YXRlMTQub3B0aW9ucy5jbG9iYmVyUHJlZml4IDogInVzZXItY29udGVudC0iOwogIGNvbnN0IGlkID0gU3RyaW5nKG5vZGUyLmlkZW50aWZpZXIpLnRvVXBwZXJDYXNlKCk7CiAgY29uc3Qgc2FmZUlkID0gbm9ybWFsaXplVXJpKGlkLnRvTG93ZXJDYXNlKCkpOwogIGNvbnN0IGluZGV4MiA9IHN0YXRlMTQuZm9vdG5vdGVPcmRlci5pbmRleE9mKGlkKTsKICBsZXQgY291bnRlcjI7CiAgbGV0IHJldXNlQ291bnRlciA9IHN0YXRlMTQuZm9vdG5vdGVDb3VudHMuZ2V0KGlkKTsKICBpZiAocmV1c2VDb3VudGVyID09PSB2b2lkIDApIHsKICAgIHJldXNlQ291bnRlciA9IDA7CiAgICBzdGF0ZTE0LmZvb3Rub3RlT3JkZXIucHVzaChpZCk7CiAgICBjb3VudGVyMiA9IHN0YXRlMTQuZm9vdG5vdGVPcmRlci5sZW5ndGg7CiAgfSBlbHNlIHsKICAgIGNvdW50ZXIyID0gaW5kZXgyICsgMTsKICB9CiAgcmV1c2VDb3VudGVyICs9IDE7CiAgc3RhdGUxNC5mb290bm90ZUNvdW50cy5zZXQoaWQsIHJldXNlQ291bnRlcik7CiAgY29uc3QgbGluazMgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiYSIsCiAgICBwcm9wZXJ0aWVzOiB7CiAgICAgIGhyZWY6ICIjIiArIGNsb2JiZXJQcmVmaXggKyAiZm4tIiArIHNhZmVJZCwKICAgICAgaWQ6IGNsb2JiZXJQcmVmaXggKyAiZm5yZWYtIiArIHNhZmVJZCArIChyZXVzZUNvdW50ZXIgPiAxID8gIi0iICsgcmV1c2VDb3VudGVyIDogIiIpLAogICAgICBkYXRhRm9vdG5vdGVSZWY6IHRydWUsCiAgICAgIGFyaWFEZXNjcmliZWRCeTogWyJmb290bm90ZS1sYWJlbCJdCiAgICB9LAogICAgY2hpbGRyZW46IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IFN0cmluZyhjb3VudGVyMikgfV0KICB9OwogIHN0YXRlMTQucGF0Y2gobm9kZTIsIGxpbmszKTsKICBjb25zdCBzdXAgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAic3VwIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IFtsaW5rM10KICB9OwogIHN0YXRlMTQucGF0Y2gobm9kZTIsIHN1cCk7CiAgcmV0dXJuIHN0YXRlMTQuYXBwbHlEYXRhKG5vZGUyLCBzdXApOwp9CnZhciBpbml0X2Zvb3Rub3RlX3JlZmVyZW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZm9vdG5vdGUtcmVmZXJlbmNlLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2hlYWRpbmcuanMKZnVuY3Rpb24gaGVhZGluZzIoc3RhdGUxNCwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiaCIgKyBub2RlMi5kZXB0aCwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlMTQuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfaGVhZGluZzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2hlYWRpbmcuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9odG1sLmpzCmZ1bmN0aW9uIGh0bWwyKHN0YXRlMTQsIG5vZGUyKSB7CiAgaWYgKHN0YXRlMTQub3B0aW9ucy5hbGxvd0Rhbmdlcm91c0h0bWwpIHsKICAgIGNvbnN0IHJlc3VsdCA9IHsgdHlwZTogInJhdyIsIHZhbHVlOiBub2RlMi52YWx1ZSB9OwogICAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICAgIHJldHVybiBzdGF0ZTE0LmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKICB9CiAgcmV0dXJuIHZvaWQgMDsKfQp2YXIgaW5pdF9odG1sOCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaHRtbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL3JldmVydC5qcwpmdW5jdGlvbiByZXZlcnQoc3RhdGUxNCwgbm9kZTIpIHsKICBjb25zdCBzdWJ0eXBlID0gbm9kZTIucmVmZXJlbmNlVHlwZTsKICBsZXQgc3VmZml4ID0gIl0iOwogIGlmIChzdWJ0eXBlID09PSAiY29sbGFwc2VkIikgewogICAgc3VmZml4ICs9ICJbXSI7CiAgfSBlbHNlIGlmIChzdWJ0eXBlID09PSAiZnVsbCIpIHsKICAgIHN1ZmZpeCArPSAiWyIgKyAobm9kZTIubGFiZWwgfHwgbm9kZTIuaWRlbnRpZmllcikgKyAiXSI7CiAgfQogIGlmIChub2RlMi50eXBlID09PSAiaW1hZ2VSZWZlcmVuY2UiKSB7CiAgICByZXR1cm4gW3sgdHlwZTogInRleHQiLCB2YWx1ZTogIiFbIiArIG5vZGUyLmFsdCArIHN1ZmZpeCB9XTsKICB9CiAgY29uc3QgY29udGVudHMgPSBzdGF0ZTE0LmFsbChub2RlMik7CiAgY29uc3QgaGVhZDIgPSBjb250ZW50c1swXTsKICBpZiAoaGVhZDIgJiYgaGVhZDIudHlwZSA9PT0gInRleHQiKSB7CiAgICBoZWFkMi52YWx1ZSA9ICJbIiArIGhlYWQyLnZhbHVlOwogIH0gZWxzZSB7CiAgICBjb250ZW50cy51bnNoaWZ0KHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlsiIH0pOwogIH0KICBjb25zdCB0YWlsID0gY29udGVudHNbY29udGVudHMubGVuZ3RoIC0gMV07CiAgaWYgKHRhaWwgJiYgdGFpbC50eXBlID09PSAidGV4dCIpIHsKICAgIHRhaWwudmFsdWUgKz0gc3VmZml4OwogIH0gZWxzZSB7CiAgICBjb250ZW50cy5wdXNoKHsgdHlwZTogInRleHQiLCB2YWx1ZTogc3VmZml4IH0pOwogIH0KICByZXR1cm4gY29udGVudHM7Cn0KdmFyIGluaXRfcmV2ZXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9yZXZlcnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9pbWFnZS1yZWZlcmVuY2UuanMKZnVuY3Rpb24gaW1hZ2VSZWZlcmVuY2UyKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgaWQgPSBTdHJpbmcobm9kZTIuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKTsKICBjb25zdCBkZWZpbml0aW9uMyA9IHN0YXRlMTQuZGVmaW5pdGlvbkJ5SWQuZ2V0KGlkKTsKICBpZiAoIWRlZmluaXRpb24zKSB7CiAgICByZXR1cm4gcmV2ZXJ0KHN0YXRlMTQsIG5vZGUyKTsKICB9CiAgY29uc3QgcHJvcGVydGllczIgPSB7IHNyYzogbm9ybWFsaXplVXJpKGRlZmluaXRpb24zLnVybCB8fCAiIiksIGFsdDogbm9kZTIuYWx0IH07CiAgaWYgKGRlZmluaXRpb24zLnRpdGxlICE9PSBudWxsICYmIGRlZmluaXRpb24zLnRpdGxlICE9PSB2b2lkIDApIHsKICAgIHByb3BlcnRpZXMyLnRpdGxlID0gZGVmaW5pdGlvbjMudGl0bGU7CiAgfQogIGNvbnN0IHJlc3VsdCA9IHsgdHlwZTogImVsZW1lbnQiLCB0YWdOYW1lOiAiaW1nIiwgcHJvcGVydGllczogcHJvcGVydGllczIsIGNoaWxkcmVuOiBbXSB9OwogIHN0YXRlMTQucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTQuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X2ltYWdlX3JlZmVyZW5jZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2ltYWdlLXJlZmVyZW5jZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Nhbml0aXplX3VyaSgpOwogICAgaW5pdF9yZXZlcnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW1hZ2UuanMKZnVuY3Rpb24gaW1hZ2UyKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgcHJvcGVydGllczIgPSB7IHNyYzogbm9ybWFsaXplVXJpKG5vZGUyLnVybCkgfTsKICBpZiAobm9kZTIuYWx0ICE9PSBudWxsICYmIG5vZGUyLmFsdCAhPT0gdm9pZCAwKSB7CiAgICBwcm9wZXJ0aWVzMi5hbHQgPSBub2RlMi5hbHQ7CiAgfQogIGlmIChub2RlMi50aXRsZSAhPT0gbnVsbCAmJiBub2RlMi50aXRsZSAhPT0gdm9pZCAwKSB7CiAgICBwcm9wZXJ0aWVzMi50aXRsZSA9IG5vZGUyLnRpdGxlOwogIH0KICBjb25zdCByZXN1bHQgPSB7IHR5cGU6ICJlbGVtZW50IiwgdGFnTmFtZTogImltZyIsIHByb3BlcnRpZXM6IHByb3BlcnRpZXMyLCBjaGlsZHJlbjogW10gfTsKICBzdGF0ZTE0LnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTE0LmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9pbWFnZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2ltYWdlLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2lubGluZS1jb2RlLmpzCmZ1bmN0aW9uIGlubGluZUNvZGUyKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgdGV4dDkgPSB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IG5vZGUyLnZhbHVlLnJlcGxhY2UoL1xyP1xufFxyL2csICIgIikgfTsKICBzdGF0ZTE0LnBhdGNoKG5vZGUyLCB0ZXh0OSk7CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogImNvZGUiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogW3RleHQ5XQogIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfaW5saW5lX2NvZGUyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9pbmxpbmUtY29kZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2xpbmstcmVmZXJlbmNlLmpzCmZ1bmN0aW9uIGxpbmtSZWZlcmVuY2UyKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgaWQgPSBTdHJpbmcobm9kZTIuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKTsKICBjb25zdCBkZWZpbml0aW9uMyA9IHN0YXRlMTQuZGVmaW5pdGlvbkJ5SWQuZ2V0KGlkKTsKICBpZiAoIWRlZmluaXRpb24zKSB7CiAgICByZXR1cm4gcmV2ZXJ0KHN0YXRlMTQsIG5vZGUyKTsKICB9CiAgY29uc3QgcHJvcGVydGllczIgPSB7IGhyZWY6IG5vcm1hbGl6ZVVyaShkZWZpbml0aW9uMy51cmwgfHwgIiIpIH07CiAgaWYgKGRlZmluaXRpb24zLnRpdGxlICE9PSBudWxsICYmIGRlZmluaXRpb24zLnRpdGxlICE9PSB2b2lkIDApIHsKICAgIHByb3BlcnRpZXMyLnRpdGxlID0gZGVmaW5pdGlvbjMudGl0bGU7CiAgfQogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJhIiwKICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMyLAogICAgY2hpbGRyZW46IHN0YXRlMTQuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfbGlua19yZWZlcmVuY2UyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9saW5rLXJlZmVyZW5jZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Nhbml0aXplX3VyaSgpOwogICAgaW5pdF9yZXZlcnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGluay5qcwpmdW5jdGlvbiBsaW5rMihzdGF0ZTE0LCBub2RlMikgewogIGNvbnN0IHByb3BlcnRpZXMyID0geyBocmVmOiBub3JtYWxpemVVcmkobm9kZTIudXJsKSB9OwogIGlmIChub2RlMi50aXRsZSAhPT0gbnVsbCAmJiBub2RlMi50aXRsZSAhPT0gdm9pZCAwKSB7CiAgICBwcm9wZXJ0aWVzMi50aXRsZSA9IG5vZGUyLnRpdGxlOwogIH0KICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiYSIsCiAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzMiwKICAgIGNoaWxkcmVuOiBzdGF0ZTE0LmFsbChub2RlMikKICB9OwogIHN0YXRlMTQucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTQuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X2xpbmsyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9saW5rLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2xpc3QtaXRlbS5qcwpmdW5jdGlvbiBsaXN0SXRlbTIoc3RhdGUxNCwgbm9kZTIsIHBhcmVudCkgewogIGNvbnN0IHJlc3VsdHMgPSBzdGF0ZTE0LmFsbChub2RlMik7CiAgY29uc3QgbG9vc2UgPSBwYXJlbnQgPyBsaXN0TG9vc2UocGFyZW50KSA6IGxpc3RJdGVtTG9vc2Uobm9kZTIpOwogIGNvbnN0IHByb3BlcnRpZXMyID0ge307CiAgY29uc3QgY2hpbGRyZW4yID0gW107CiAgaWYgKHR5cGVvZiBub2RlMi5jaGVja2VkID09PSAiYm9vbGVhbiIpIHsKICAgIGNvbnN0IGhlYWQyID0gcmVzdWx0c1swXTsKICAgIGxldCBwYXJhZ3JhcGgzOwogICAgaWYgKGhlYWQyICYmIGhlYWQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiBoZWFkMi50YWdOYW1lID09PSAicCIpIHsKICAgICAgcGFyYWdyYXBoMyA9IGhlYWQyOwogICAgfSBlbHNlIHsKICAgICAgcGFyYWdyYXBoMyA9IHsgdHlwZTogImVsZW1lbnQiLCB0YWdOYW1lOiAicCIsIHByb3BlcnRpZXM6IHt9LCBjaGlsZHJlbjogW10gfTsKICAgICAgcmVzdWx0cy51bnNoaWZ0KHBhcmFncmFwaDMpOwogICAgfQogICAgaWYgKHBhcmFncmFwaDMuY2hpbGRyZW4ubGVuZ3RoID4gMCkgewogICAgICBwYXJhZ3JhcGgzLmNoaWxkcmVuLnVuc2hpZnQoeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiICIgfSk7CiAgICB9CiAgICBwYXJhZ3JhcGgzLmNoaWxkcmVuLnVuc2hpZnQoewogICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgIHRhZ05hbWU6ICJpbnB1dCIsCiAgICAgIHByb3BlcnRpZXM6IHsgdHlwZTogImNoZWNrYm94IiwgY2hlY2tlZDogbm9kZTIuY2hlY2tlZCwgZGlzYWJsZWQ6IHRydWUgfSwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9KTsKICAgIHByb3BlcnRpZXMyLmNsYXNzTmFtZSA9IFsidGFzay1saXN0LWl0ZW0iXTsKICB9CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHJlc3VsdHMubGVuZ3RoKSB7CiAgICBjb25zdCBjaGlsZCA9IHJlc3VsdHNbaW5kZXgyXTsKICAgIGlmIChsb29zZSB8fCBpbmRleDIgIT09IDAgfHwgY2hpbGQudHlwZSAhPT0gImVsZW1lbnQiIHx8IGNoaWxkLnRhZ05hbWUgIT09ICJwIikgewogICAgICBjaGlsZHJlbjIucHVzaCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICJcbiIgfSk7CiAgICB9CiAgICBpZiAoY2hpbGQudHlwZSA9PT0gImVsZW1lbnQiICYmIGNoaWxkLnRhZ05hbWUgPT09ICJwIiAmJiAhbG9vc2UpIHsKICAgICAgY2hpbGRyZW4yLnB1c2goLi4uY2hpbGQuY2hpbGRyZW4pOwogICAgfSBlbHNlIHsKICAgICAgY2hpbGRyZW4yLnB1c2goY2hpbGQpOwogICAgfQogIH0KICBjb25zdCB0YWlsID0gcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdOwogIGlmICh0YWlsICYmIChsb29zZSB8fCB0YWlsLnR5cGUgIT09ICJlbGVtZW50IiB8fCB0YWlsLnRhZ05hbWUgIT09ICJwIikpIHsKICAgIGNoaWxkcmVuMi5wdXNoKHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlxuIiB9KTsKICB9CiAgY29uc3QgcmVzdWx0ID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWU6ICJsaSIsIHByb3BlcnRpZXM6IHByb3BlcnRpZXMyLCBjaGlsZHJlbjogY2hpbGRyZW4yIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KZnVuY3Rpb24gbGlzdExvb3NlKG5vZGUyKSB7CiAgbGV0IGxvb3NlID0gZmFsc2U7CiAgaWYgKG5vZGUyLnR5cGUgPT09ICJsaXN0IikgewogICAgbG9vc2UgPSBub2RlMi5zcHJlYWQgfHwgZmFsc2U7CiAgICBjb25zdCBjaGlsZHJlbjIgPSBub2RlMi5jaGlsZHJlbjsKICAgIGxldCBpbmRleDIgPSAtMTsKICAgIHdoaWxlICghbG9vc2UgJiYgKytpbmRleDIgPCBjaGlsZHJlbjIubGVuZ3RoKSB7CiAgICAgIGxvb3NlID0gbGlzdEl0ZW1Mb29zZShjaGlsZHJlbjJbaW5kZXgyXSk7CiAgICB9CiAgfQogIHJldHVybiBsb29zZTsKfQpmdW5jdGlvbiBsaXN0SXRlbUxvb3NlKG5vZGUyKSB7CiAgY29uc3Qgc3ByZWFkID0gbm9kZTIuc3ByZWFkOwogIHJldHVybiBzcHJlYWQgPT09IG51bGwgfHwgc3ByZWFkID09PSB2b2lkIDAgPyBub2RlMi5jaGlsZHJlbi5sZW5ndGggPiAxIDogc3ByZWFkOwp9CnZhciBpbml0X2xpc3RfaXRlbTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2xpc3QtaXRlbS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2xpc3QuanMKZnVuY3Rpb24gbGlzdDQoc3RhdGUxNCwgbm9kZTIpIHsKICBjb25zdCBwcm9wZXJ0aWVzMiA9IHt9OwogIGNvbnN0IHJlc3VsdHMgPSBzdGF0ZTE0LmFsbChub2RlMik7CiAgbGV0IGluZGV4MiA9IC0xOwogIGlmICh0eXBlb2Ygbm9kZTIuc3RhcnQgPT09ICJudW1iZXIiICYmIG5vZGUyLnN0YXJ0ICE9PSAxKSB7CiAgICBwcm9wZXJ0aWVzMi5zdGFydCA9IG5vZGUyLnN0YXJ0OwogIH0KICB3aGlsZSAoKytpbmRleDIgPCByZXN1bHRzLmxlbmd0aCkgewogICAgY29uc3QgY2hpbGQgPSByZXN1bHRzW2luZGV4Ml07CiAgICBpZiAoY2hpbGQudHlwZSA9PT0gImVsZW1lbnQiICYmIGNoaWxkLnRhZ05hbWUgPT09ICJsaSIgJiYgY2hpbGQucHJvcGVydGllcyAmJiBBcnJheS5pc0FycmF5KGNoaWxkLnByb3BlcnRpZXMuY2xhc3NOYW1lKSAmJiBjaGlsZC5wcm9wZXJ0aWVzLmNsYXNzTmFtZS5pbmNsdWRlcygidGFzay1saXN0LWl0ZW0iKSkgewogICAgICBwcm9wZXJ0aWVzMi5jbGFzc05hbWUgPSBbImNvbnRhaW5zLXRhc2stbGlzdCJdOwogICAgICBicmVhazsKICAgIH0KICB9CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogbm9kZTIub3JkZXJlZCA/ICJvbCIgOiAidWwiLAogICAgcHJvcGVydGllczogcHJvcGVydGllczIsCiAgICBjaGlsZHJlbjogc3RhdGUxNC53cmFwKHJlc3VsdHMsIHRydWUpCiAgfTsKICBzdGF0ZTE0LnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTE0LmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9saXN0MyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGlzdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3BhcmFncmFwaC5qcwpmdW5jdGlvbiBwYXJhZ3JhcGgyKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogInAiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUxNC5hbGwobm9kZTIpCiAgfTsKICBzdGF0ZTE0LnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTE0LmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9wYXJhZ3JhcGgyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9wYXJhZ3JhcGguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9yb290LmpzCmZ1bmN0aW9uIHJvb3QzKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0geyB0eXBlOiAicm9vdCIsIGNoaWxkcmVuOiBzdGF0ZTE0LndyYXAoc3RhdGUxNC5hbGwobm9kZTIpKSB9OwogIHN0YXRlMTQucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTQuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X3Jvb3QyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9yb290LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvc3Ryb25nLmpzCmZ1bmN0aW9uIHN0cm9uZzIoc3RhdGUxNCwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAic3Ryb25nIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlMTQuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfc3Ryb25nMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvc3Ryb25nLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGFibGUuanMKZnVuY3Rpb24gdGFibGUoc3RhdGUxNCwgbm9kZTIpIHsKICBjb25zdCByb3dzID0gc3RhdGUxNC5hbGwobm9kZTIpOwogIGNvbnN0IGZpcnN0Um93ID0gcm93cy5zaGlmdCgpOwogIGNvbnN0IHRhYmxlQ29udGVudCA9IFtdOwogIGlmIChmaXJzdFJvdykgewogICAgY29uc3QgaGVhZDIgPSB7CiAgICAgIHR5cGU6ICJlbGVtZW50IiwKICAgICAgdGFnTmFtZTogInRoZWFkIiwKICAgICAgcHJvcGVydGllczoge30sCiAgICAgIGNoaWxkcmVuOiBzdGF0ZTE0LndyYXAoW2ZpcnN0Um93XSwgdHJ1ZSkKICAgIH07CiAgICBzdGF0ZTE0LnBhdGNoKG5vZGUyLmNoaWxkcmVuWzBdLCBoZWFkMik7CiAgICB0YWJsZUNvbnRlbnQucHVzaChoZWFkMik7CiAgfQogIGlmIChyb3dzLmxlbmd0aCA+IDApIHsKICAgIGNvbnN0IGJvZHkzID0gewogICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgIHRhZ05hbWU6ICJ0Ym9keSIsCiAgICAgIHByb3BlcnRpZXM6IHt9LAogICAgICBjaGlsZHJlbjogc3RhdGUxNC53cmFwKHJvd3MsIHRydWUpCiAgICB9OwogICAgY29uc3Qgc3RhcnQgPSBwb2ludFN0YXJ0KG5vZGUyLmNoaWxkcmVuWzFdKTsKICAgIGNvbnN0IGVuZDMgPSBwb2ludEVuZChub2RlMi5jaGlsZHJlbltub2RlMi5jaGlsZHJlbi5sZW5ndGggLSAxXSk7CiAgICBpZiAoc3RhcnQgJiYgZW5kMykgYm9keTMucG9zaXRpb24gPSB7IHN0YXJ0LCBlbmQ6IGVuZDMgfTsKICAgIHRhYmxlQ29udGVudC5wdXNoKGJvZHkzKTsKICB9CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogInRhYmxlIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlMTQud3JhcCh0YWJsZUNvbnRlbnQsIHRydWUpCiAgfTsKICBzdGF0ZTE0LnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTE0LmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF90YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGFibGUuanMiKCkgewogICAgaW5pdF91bmlzdF91dGlsX3Bvc2l0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3RhYmxlLXJvdy5qcwpmdW5jdGlvbiB0YWJsZVJvdyhzdGF0ZTE0LCBub2RlMiwgcGFyZW50KSB7CiAgY29uc3Qgc2libGluZ3MyID0gcGFyZW50ID8gcGFyZW50LmNoaWxkcmVuIDogdm9pZCAwOwogIGNvbnN0IHJvd0luZGV4ID0gc2libGluZ3MyID8gc2libGluZ3MyLmluZGV4T2Yobm9kZTIpIDogMTsKICBjb25zdCB0YWdOYW1lID0gcm93SW5kZXggPT09IDAgPyAidGgiIDogInRkIjsKICBjb25zdCBhbGlnbiA9IHBhcmVudCAmJiBwYXJlbnQudHlwZSA9PT0gInRhYmxlIiA/IHBhcmVudC5hbGlnbiA6IHZvaWQgMDsKICBjb25zdCBsZW5ndGggPSBhbGlnbiA/IGFsaWduLmxlbmd0aCA6IG5vZGUyLmNoaWxkcmVuLmxlbmd0aDsKICBsZXQgY2VsbEluZGV4ID0gLTE7CiAgY29uc3QgY2VsbHMyID0gW107CiAgd2hpbGUgKCsrY2VsbEluZGV4IDwgbGVuZ3RoKSB7CiAgICBjb25zdCBjZWxsMiA9IG5vZGUyLmNoaWxkcmVuW2NlbGxJbmRleF07CiAgICBjb25zdCBwcm9wZXJ0aWVzMiA9IHt9OwogICAgY29uc3QgYWxpZ25WYWx1ZSA9IGFsaWduID8gYWxpZ25bY2VsbEluZGV4XSA6IHZvaWQgMDsKICAgIGlmIChhbGlnblZhbHVlKSB7CiAgICAgIHByb3BlcnRpZXMyLmFsaWduID0gYWxpZ25WYWx1ZTsKICAgIH0KICAgIGxldCByZXN1bHQyID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWUsIHByb3BlcnRpZXM6IHByb3BlcnRpZXMyLCBjaGlsZHJlbjogW10gfTsKICAgIGlmIChjZWxsMikgewogICAgICByZXN1bHQyLmNoaWxkcmVuID0gc3RhdGUxNC5hbGwoY2VsbDIpOwogICAgICBzdGF0ZTE0LnBhdGNoKGNlbGwyLCByZXN1bHQyKTsKICAgICAgcmVzdWx0MiA9IHN0YXRlMTQuYXBwbHlEYXRhKGNlbGwyLCByZXN1bHQyKTsKICAgIH0KICAgIGNlbGxzMi5wdXNoKHJlc3VsdDIpOwogIH0KICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAidHIiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUxNC53cmFwKGNlbGxzMiwgdHJ1ZSkKICB9OwogIHN0YXRlMTQucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTQuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X3RhYmxlX3JvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGFibGUtcm93LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGFibGUtY2VsbC5qcwpmdW5jdGlvbiB0YWJsZUNlbGwoc3RhdGUxNCwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAidGQiLAogICAgLy8gQXNzdW1lIGJvZHkgY2VsbC4KICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlMTQuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfdGFibGVfY2VsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGFibGUtY2VsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS90cmltLWxpbmVzQDMuMC4xL25vZGVfbW9kdWxlcy90cmltLWxpbmVzL2luZGV4LmpzCmZ1bmN0aW9uIHRyaW1MaW5lcyh2YWx1ZTIpIHsKICBjb25zdCBzb3VyY2UgPSBTdHJpbmcodmFsdWUyKTsKICBjb25zdCBzZWFyY2gyID0gL1xyP1xufFxyL2c7CiAgbGV0IG1hdGNoMiA9IHNlYXJjaDIuZXhlYyhzb3VyY2UpOwogIGxldCBsYXN0MyA9IDA7CiAgY29uc3QgbGluZXMgPSBbXTsKICB3aGlsZSAobWF0Y2gyKSB7CiAgICBsaW5lcy5wdXNoKAogICAgICB0cmltTGluZShzb3VyY2Uuc2xpY2UobGFzdDMsIG1hdGNoMi5pbmRleCksIGxhc3QzID4gMCwgdHJ1ZSksCiAgICAgIG1hdGNoMlswXQogICAgKTsKICAgIGxhc3QzID0gbWF0Y2gyLmluZGV4ICsgbWF0Y2gyWzBdLmxlbmd0aDsKICAgIG1hdGNoMiA9IHNlYXJjaDIuZXhlYyhzb3VyY2UpOwogIH0KICBsaW5lcy5wdXNoKHRyaW1MaW5lKHNvdXJjZS5zbGljZShsYXN0MyksIGxhc3QzID4gMCwgZmFsc2UpKTsKICByZXR1cm4gbGluZXMuam9pbigiIik7Cn0KZnVuY3Rpb24gdHJpbUxpbmUodmFsdWUyLCBzdGFydCwgZW5kMykgewogIGxldCBzdGFydEluZGV4ID0gMDsKICBsZXQgZW5kSW5kZXggPSB2YWx1ZTIubGVuZ3RoOwogIGlmIChzdGFydCkgewogICAgbGV0IGNvZGU0ID0gdmFsdWUyLmNvZGVQb2ludEF0KHN0YXJ0SW5kZXgpOwogICAgd2hpbGUgKGNvZGU0ID09PSB0YWIgfHwgY29kZTQgPT09IHNwYWNlKSB7CiAgICAgIHN0YXJ0SW5kZXgrKzsKICAgICAgY29kZTQgPSB2YWx1ZTIuY29kZVBvaW50QXQoc3RhcnRJbmRleCk7CiAgICB9CiAgfQogIGlmIChlbmQzKSB7CiAgICBsZXQgY29kZTQgPSB2YWx1ZTIuY29kZVBvaW50QXQoZW5kSW5kZXggLSAxKTsKICAgIHdoaWxlIChjb2RlNCA9PT0gdGFiIHx8IGNvZGU0ID09PSBzcGFjZSkgewogICAgICBlbmRJbmRleC0tOwogICAgICBjb2RlNCA9IHZhbHVlMi5jb2RlUG9pbnRBdChlbmRJbmRleCAtIDEpOwogICAgfQogIH0KICByZXR1cm4gZW5kSW5kZXggPiBzdGFydEluZGV4ID8gdmFsdWUyLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KSA6ICIiOwp9CnZhciB0YWIsIHNwYWNlOwp2YXIgaW5pdF90cmltX2xpbmVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdHJpbS1saW5lc0AzLjAuMS9ub2RlX21vZHVsZXMvdHJpbS1saW5lcy9pbmRleC5qcyIoKSB7CiAgICB0YWIgPSA5OwogICAgc3BhY2UgPSAzMjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGV4dC5qcwpmdW5jdGlvbiB0ZXh0NihzdGF0ZTE0LCBub2RlMikgewogIGNvbnN0IHJlc3VsdCA9IHsgdHlwZTogInRleHQiLCB2YWx1ZTogdHJpbUxpbmVzKFN0cmluZyhub2RlMi52YWx1ZSkpIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfdGV4dDMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3RleHQuanMiKCkgewogICAgaW5pdF90cmltX2xpbmVzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3RoZW1hdGljLWJyZWFrLmpzCmZ1bmN0aW9uIHRoZW1hdGljQnJlYWszKHN0YXRlMTQsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogImhyIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IFtdCiAgfTsKICBzdGF0ZTE0LnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTE0LmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF90aGVtYXRpY19icmVhazMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3RoZW1hdGljLWJyZWFrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW5kZXguanMKZnVuY3Rpb24gaWdub3JlKCkgewogIHJldHVybiB2b2lkIDA7Cn0KdmFyIGhhbmRsZXJzOwp2YXIgaW5pdF9oYW5kbGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW5kZXguanMiKCkgewogICAgaW5pdF9ibG9ja3F1b3RlMigpOwogICAgaW5pdF9icmVhazIoKTsKICAgIGluaXRfY29kZTIoKTsKICAgIGluaXRfZGVsZXRlKCk7CiAgICBpbml0X2VtcGhhc2lzMigpOwogICAgaW5pdF9mb290bm90ZV9yZWZlcmVuY2UoKTsKICAgIGluaXRfaGVhZGluZzIoKTsKICAgIGluaXRfaHRtbDgoKTsKICAgIGluaXRfaW1hZ2VfcmVmZXJlbmNlMigpOwogICAgaW5pdF9pbWFnZTIoKTsKICAgIGluaXRfaW5saW5lX2NvZGUyKCk7CiAgICBpbml0X2xpbmtfcmVmZXJlbmNlMigpOwogICAgaW5pdF9saW5rMigpOwogICAgaW5pdF9saXN0X2l0ZW0yKCk7CiAgICBpbml0X2xpc3QzKCk7CiAgICBpbml0X3BhcmFncmFwaDIoKTsKICAgIGluaXRfcm9vdDIoKTsKICAgIGluaXRfc3Ryb25nMigpOwogICAgaW5pdF90YWJsZSgpOwogICAgaW5pdF90YWJsZV9yb3coKTsKICAgIGluaXRfdGFibGVfY2VsbCgpOwogICAgaW5pdF90ZXh0MygpOwogICAgaW5pdF90aGVtYXRpY19icmVhazMoKTsKICAgIGhhbmRsZXJzID0gewogICAgICBibG9ja3F1b3RlOiBibG9ja3F1b3RlMiwKICAgICAgYnJlYWs6IGhhcmRCcmVhazIsCiAgICAgIGNvZGU6IGNvZGUzLAogICAgICBkZWxldGU6IHN0cmlrZXRocm91Z2gsCiAgICAgIGVtcGhhc2lzOiBlbXBoYXNpczIsCiAgICAgIGZvb3Rub3RlUmVmZXJlbmNlOiBmb290bm90ZVJlZmVyZW5jZTIsCiAgICAgIGhlYWRpbmc6IGhlYWRpbmcyLAogICAgICBodG1sOiBodG1sMiwKICAgICAgaW1hZ2VSZWZlcmVuY2U6IGltYWdlUmVmZXJlbmNlMiwKICAgICAgaW1hZ2U6IGltYWdlMiwKICAgICAgaW5saW5lQ29kZTogaW5saW5lQ29kZTIsCiAgICAgIGxpbmtSZWZlcmVuY2U6IGxpbmtSZWZlcmVuY2UyLAogICAgICBsaW5rOiBsaW5rMiwKICAgICAgbGlzdEl0ZW06IGxpc3RJdGVtMiwKICAgICAgbGlzdDogbGlzdDQsCiAgICAgIHBhcmFncmFwaDogcGFyYWdyYXBoMiwKICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogcm9vdCBpcyBkaWZmZXJlbnQsIGJ1dCBoYXJkIHRvIHR5cGUuCiAgICAgIHJvb3Q6IHJvb3QzLAogICAgICBzdHJvbmc6IHN0cm9uZzIsCiAgICAgIHRhYmxlLAogICAgICB0YWJsZUNlbGwsCiAgICAgIHRhYmxlUm93LAogICAgICB0ZXh0OiB0ZXh0NiwKICAgICAgdGhlbWF0aWNCcmVhazogdGhlbWF0aWNCcmVhazMsCiAgICAgIHRvbWw6IGlnbm9yZSwKICAgICAgeWFtbDogaWdub3JlLAogICAgICBkZWZpbml0aW9uOiBpZ25vcmUsCiAgICAgIGZvb3Rub3RlRGVmaW5pdGlvbjogaWdub3JlCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9mb290ZXIuanMKZnVuY3Rpb24gZGVmYXVsdEZvb3Rub3RlQmFja0NvbnRlbnQoXzQsIHJlcmVmZXJlbmNlSW5kZXgpIHsKICBjb25zdCByZXN1bHQgPSBbeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXHUyMUE5IiB9XTsKICBpZiAocmVyZWZlcmVuY2VJbmRleCA+IDEpIHsKICAgIHJlc3VsdC5wdXNoKHsKICAgICAgdHlwZTogImVsZW1lbnQiLAogICAgICB0YWdOYW1lOiAic3VwIiwKICAgICAgcHJvcGVydGllczoge30sCiAgICAgIGNoaWxkcmVuOiBbeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBTdHJpbmcocmVyZWZlcmVuY2VJbmRleCkgfV0KICAgIH0pOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIGRlZmF1bHRGb290bm90ZUJhY2tMYWJlbChyZWZlcmVuY2VJbmRleCwgcmVyZWZlcmVuY2VJbmRleCkgewogIHJldHVybiAiQmFjayB0byByZWZlcmVuY2UgIiArIChyZWZlcmVuY2VJbmRleCArIDEpICsgKHJlcmVmZXJlbmNlSW5kZXggPiAxID8gIi0iICsgcmVyZWZlcmVuY2VJbmRleCA6ICIiKTsKfQpmdW5jdGlvbiBmb290ZXIoc3RhdGUxNCkgewogIGNvbnN0IGNsb2JiZXJQcmVmaXggPSB0eXBlb2Ygc3RhdGUxNC5vcHRpb25zLmNsb2JiZXJQcmVmaXggPT09ICJzdHJpbmciID8gc3RhdGUxNC5vcHRpb25zLmNsb2JiZXJQcmVmaXggOiAidXNlci1jb250ZW50LSI7CiAgY29uc3QgZm9vdG5vdGVCYWNrQ29udGVudCA9IHN0YXRlMTQub3B0aW9ucy5mb290bm90ZUJhY2tDb250ZW50IHx8IGRlZmF1bHRGb290bm90ZUJhY2tDb250ZW50OwogIGNvbnN0IGZvb3Rub3RlQmFja0xhYmVsID0gc3RhdGUxNC5vcHRpb25zLmZvb3Rub3RlQmFja0xhYmVsIHx8IGRlZmF1bHRGb290bm90ZUJhY2tMYWJlbDsKICBjb25zdCBmb290bm90ZUxhYmVsID0gc3RhdGUxNC5vcHRpb25zLmZvb3Rub3RlTGFiZWwgfHwgIkZvb3Rub3RlcyI7CiAgY29uc3QgZm9vdG5vdGVMYWJlbFRhZ05hbWUgPSBzdGF0ZTE0Lm9wdGlvbnMuZm9vdG5vdGVMYWJlbFRhZ05hbWUgfHwgImgyIjsKICBjb25zdCBmb290bm90ZUxhYmVsUHJvcGVydGllcyA9IHN0YXRlMTQub3B0aW9ucy5mb290bm90ZUxhYmVsUHJvcGVydGllcyB8fCB7CiAgICBjbGFzc05hbWU6IFsic3Itb25seSJdCiAgfTsKICBjb25zdCBsaXN0SXRlbXMgPSBbXTsKICBsZXQgcmVmZXJlbmNlSW5kZXggPSAtMTsKICB3aGlsZSAoKytyZWZlcmVuY2VJbmRleCA8IHN0YXRlMTQuZm9vdG5vdGVPcmRlci5sZW5ndGgpIHsKICAgIGNvbnN0IGRlZmluaXRpb24zID0gc3RhdGUxNC5mb290bm90ZUJ5SWQuZ2V0KAogICAgICBzdGF0ZTE0LmZvb3Rub3RlT3JkZXJbcmVmZXJlbmNlSW5kZXhdCiAgICApOwogICAgaWYgKCFkZWZpbml0aW9uMykgewogICAgICBjb250aW51ZTsKICAgIH0KICAgIGNvbnN0IGNvbnRlbnQzID0gc3RhdGUxNC5hbGwoZGVmaW5pdGlvbjMpOwogICAgY29uc3QgaWQgPSBTdHJpbmcoZGVmaW5pdGlvbjMuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKTsKICAgIGNvbnN0IHNhZmVJZCA9IG5vcm1hbGl6ZVVyaShpZC50b0xvd2VyQ2FzZSgpKTsKICAgIGxldCByZXJlZmVyZW5jZUluZGV4ID0gMDsKICAgIGNvbnN0IGJhY2tSZWZlcmVuY2VzID0gW107CiAgICBjb25zdCBjb3VudHMgPSBzdGF0ZTE0LmZvb3Rub3RlQ291bnRzLmdldChpZCk7CiAgICB3aGlsZSAoY291bnRzICE9PSB2b2lkIDAgJiYgKytyZXJlZmVyZW5jZUluZGV4IDw9IGNvdW50cykgewogICAgICBpZiAoYmFja1JlZmVyZW5jZXMubGVuZ3RoID4gMCkgewogICAgICAgIGJhY2tSZWZlcmVuY2VzLnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiICIgfSk7CiAgICAgIH0KICAgICAgbGV0IGNoaWxkcmVuMiA9IHR5cGVvZiBmb290bm90ZUJhY2tDb250ZW50ID09PSAic3RyaW5nIiA/IGZvb3Rub3RlQmFja0NvbnRlbnQgOiBmb290bm90ZUJhY2tDb250ZW50KHJlZmVyZW5jZUluZGV4LCByZXJlZmVyZW5jZUluZGV4KTsKICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbjIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgY2hpbGRyZW4yID0geyB0eXBlOiAidGV4dCIsIHZhbHVlOiBjaGlsZHJlbjIgfTsKICAgICAgfQogICAgICBiYWNrUmVmZXJlbmNlcy5wdXNoKHsKICAgICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgICAgdGFnTmFtZTogImEiLAogICAgICAgIHByb3BlcnRpZXM6IHsKICAgICAgICAgIGhyZWY6ICIjIiArIGNsb2JiZXJQcmVmaXggKyAiZm5yZWYtIiArIHNhZmVJZCArIChyZXJlZmVyZW5jZUluZGV4ID4gMSA/ICItIiArIHJlcmVmZXJlbmNlSW5kZXggOiAiIiksCiAgICAgICAgICBkYXRhRm9vdG5vdGVCYWNrcmVmOiAiIiwKICAgICAgICAgIGFyaWFMYWJlbDogdHlwZW9mIGZvb3Rub3RlQmFja0xhYmVsID09PSAic3RyaW5nIiA/IGZvb3Rub3RlQmFja0xhYmVsIDogZm9vdG5vdGVCYWNrTGFiZWwocmVmZXJlbmNlSW5kZXgsIHJlcmVmZXJlbmNlSW5kZXgpLAogICAgICAgICAgY2xhc3NOYW1lOiBbImRhdGEtZm9vdG5vdGUtYmFja3JlZiJdCiAgICAgICAgfSwKICAgICAgICBjaGlsZHJlbjogQXJyYXkuaXNBcnJheShjaGlsZHJlbjIpID8gY2hpbGRyZW4yIDogW2NoaWxkcmVuMl0KICAgICAgfSk7CiAgICB9CiAgICBjb25zdCB0YWlsID0gY29udGVudDNbY29udGVudDMubGVuZ3RoIC0gMV07CiAgICBpZiAodGFpbCAmJiB0YWlsLnR5cGUgPT09ICJlbGVtZW50IiAmJiB0YWlsLnRhZ05hbWUgPT09ICJwIikgewogICAgICBjb25zdCB0YWlsVGFpbCA9IHRhaWwuY2hpbGRyZW5bdGFpbC5jaGlsZHJlbi5sZW5ndGggLSAxXTsKICAgICAgaWYgKHRhaWxUYWlsICYmIHRhaWxUYWlsLnR5cGUgPT09ICJ0ZXh0IikgewogICAgICAgIHRhaWxUYWlsLnZhbHVlICs9ICIgIjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0YWlsLmNoaWxkcmVuLnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiICIgfSk7CiAgICAgIH0KICAgICAgdGFpbC5jaGlsZHJlbi5wdXNoKC4uLmJhY2tSZWZlcmVuY2VzKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnRlbnQzLnB1c2goLi4uYmFja1JlZmVyZW5jZXMpOwogICAgfQogICAgY29uc3QgbGlzdEl0ZW0zID0gewogICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgIHRhZ05hbWU6ICJsaSIsCiAgICAgIHByb3BlcnRpZXM6IHsgaWQ6IGNsb2JiZXJQcmVmaXggKyAiZm4tIiArIHNhZmVJZCB9LAogICAgICBjaGlsZHJlbjogc3RhdGUxNC53cmFwKGNvbnRlbnQzLCB0cnVlKQogICAgfTsKICAgIHN0YXRlMTQucGF0Y2goZGVmaW5pdGlvbjMsIGxpc3RJdGVtMyk7CiAgICBsaXN0SXRlbXMucHVzaChsaXN0SXRlbTMpOwogIH0KICBpZiAobGlzdEl0ZW1zLmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuOwogIH0KICByZXR1cm4gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogInNlY3Rpb24iLAogICAgcHJvcGVydGllczogeyBkYXRhRm9vdG5vdGVzOiB0cnVlLCBjbGFzc05hbWU6IFsiZm9vdG5vdGVzIl0gfSwKICAgIGNoaWxkcmVuOiBbCiAgICAgIHsKICAgICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgICAgdGFnTmFtZTogZm9vdG5vdGVMYWJlbFRhZ05hbWUsCiAgICAgICAgcHJvcGVydGllczogewogICAgICAgICAgLi4uZXNtX2RlZmF1bHQoZm9vdG5vdGVMYWJlbFByb3BlcnRpZXMpLAogICAgICAgICAgaWQ6ICJmb290bm90ZS1sYWJlbCIKICAgICAgICB9LAogICAgICAgIGNoaWxkcmVuOiBbeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBmb290bm90ZUxhYmVsIH1dCiAgICAgIH0sCiAgICAgIHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlxuIiB9LAogICAgICB7CiAgICAgICAgdHlwZTogImVsZW1lbnQiLAogICAgICAgIHRhZ05hbWU6ICJvbCIsCiAgICAgICAgcHJvcGVydGllczoge30sCiAgICAgICAgY2hpbGRyZW46IHN0YXRlMTQud3JhcChsaXN0SXRlbXMsIHRydWUpCiAgICAgIH0sCiAgICAgIHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlxuIiB9CiAgICBdCiAgfTsKfQp2YXIgaW5pdF9mb290ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2Zvb3Rlci5qcyIoKSB7CiAgICBpbml0X2VzbSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9zYW5pdGl6ZV91cmkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvc3RhdGUuanMKZnVuY3Rpb24gY3JlYXRlU3RhdGUodHJlZSwgb3B0aW9ucykgewogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnM1OwogIGNvbnN0IGRlZmluaXRpb25CeUlkID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBjb25zdCBmb290bm90ZUJ5SWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIGNvbnN0IGZvb3Rub3RlQ291bnRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBjb25zdCBoYW5kbGVyczIgPSB7IC4uLmhhbmRsZXJzLCAuLi5zZXR0aW5ncy5oYW5kbGVycyB9OwogIGNvbnN0IHN0YXRlMTQgPSB7CiAgICBhbGw6IGFsbDMsCiAgICBhcHBseURhdGEsCiAgICBkZWZpbml0aW9uQnlJZCwKICAgIGZvb3Rub3RlQnlJZCwKICAgIGZvb3Rub3RlQ291bnRzLAogICAgZm9vdG5vdGVPcmRlcjogW10sCiAgICBoYW5kbGVyczogaGFuZGxlcnMyLAogICAgb25lOiBvbmUzLAogICAgb3B0aW9uczogc2V0dGluZ3MsCiAgICBwYXRjaDogcGF0Y2gyLAogICAgd3JhcDogd3JhcDMKICB9OwogIHZpc2l0KHRyZWUsIGZ1bmN0aW9uKG5vZGUyKSB7CiAgICBpZiAobm9kZTIudHlwZSA9PT0gImRlZmluaXRpb24iIHx8IG5vZGUyLnR5cGUgPT09ICJmb290bm90ZURlZmluaXRpb24iKSB7CiAgICAgIGNvbnN0IG1hcDcgPSBub2RlMi50eXBlID09PSAiZGVmaW5pdGlvbiIgPyBkZWZpbml0aW9uQnlJZCA6IGZvb3Rub3RlQnlJZDsKICAgICAgY29uc3QgaWQgPSBTdHJpbmcobm9kZTIuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKTsKICAgICAgaWYgKCFtYXA3LmhhcyhpZCkpIHsKICAgICAgICBtYXA3LnNldChpZCwgbm9kZTIpOwogICAgICB9CiAgICB9CiAgfSk7CiAgcmV0dXJuIHN0YXRlMTQ7CiAgZnVuY3Rpb24gb25lMyhub2RlMiwgcGFyZW50KSB7CiAgICBjb25zdCB0eXBlNSA9IG5vZGUyLnR5cGU7CiAgICBjb25zdCBoYW5kbGUzID0gc3RhdGUxNC5oYW5kbGVyc1t0eXBlNV07CiAgICBpZiAob3duOC5jYWxsKHN0YXRlMTQuaGFuZGxlcnMsIHR5cGU1KSAmJiBoYW5kbGUzKSB7CiAgICAgIHJldHVybiBoYW5kbGUzKHN0YXRlMTQsIG5vZGUyLCBwYXJlbnQpOwogICAgfQogICAgaWYgKHN0YXRlMTQub3B0aW9ucy5wYXNzVGhyb3VnaCAmJiBzdGF0ZTE0Lm9wdGlvbnMucGFzc1Rocm91Z2guaW5jbHVkZXModHlwZTUpKSB7CiAgICAgIGlmICgiY2hpbGRyZW4iIGluIG5vZGUyKSB7CiAgICAgICAgY29uc3QgeyBjaGlsZHJlbjogY2hpbGRyZW4yLCAuLi5zaGFsbG93IH0gPSBub2RlMjsKICAgICAgICBjb25zdCByZXN1bHQgPSBlc21fZGVmYXVsdChzaGFsbG93KTsKICAgICAgICByZXN1bHQuY2hpbGRyZW4gPSBzdGF0ZTE0LmFsbChub2RlMik7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gZXNtX2RlZmF1bHQobm9kZTIpOwogICAgfQogICAgY29uc3QgdW5rbm93bjMgPSBzdGF0ZTE0Lm9wdGlvbnMudW5rbm93bkhhbmRsZXIgfHwgZGVmYXVsdFVua25vd25IYW5kbGVyOwogICAgcmV0dXJuIHVua25vd24zKHN0YXRlMTQsIG5vZGUyLCBwYXJlbnQpOwogIH0KICBmdW5jdGlvbiBhbGwzKHBhcmVudCkgewogICAgY29uc3QgdmFsdWVzID0gW107CiAgICBpZiAoImNoaWxkcmVuIiBpbiBwYXJlbnQpIHsKICAgICAgY29uc3Qgbm9kZXMgPSBwYXJlbnQuY2hpbGRyZW47CiAgICAgIGxldCBpbmRleDIgPSAtMTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbm9kZXMubGVuZ3RoKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gc3RhdGUxNC5vbmUobm9kZXNbaW5kZXgyXSwgcGFyZW50KTsKICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICBpZiAoaW5kZXgyICYmIG5vZGVzW2luZGV4MiAtIDFdLnR5cGUgPT09ICJicmVhayIpIHsKICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkgJiYgcmVzdWx0LnR5cGUgPT09ICJ0ZXh0IikgewogICAgICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHRyaW1NYXJrZG93blNwYWNlU3RhcnQocmVzdWx0LnZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0KSAmJiByZXN1bHQudHlwZSA9PT0gImVsZW1lbnQiKSB7CiAgICAgICAgICAgICAgY29uc3QgaGVhZDIgPSByZXN1bHQuY2hpbGRyZW5bMF07CiAgICAgICAgICAgICAgaWYgKGhlYWQyICYmIGhlYWQyLnR5cGUgPT09ICJ0ZXh0IikgewogICAgICAgICAgICAgICAgaGVhZDIudmFsdWUgPSB0cmltTWFya2Rvd25TcGFjZVN0YXJ0KGhlYWQyLnZhbHVlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHsKICAgICAgICAgICAgdmFsdWVzLnB1c2goLi4ucmVzdWx0KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHJlc3VsdCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gdmFsdWVzOwogIH0KfQpmdW5jdGlvbiBwYXRjaDIoZnJvbTIsIHRvMikgewogIGlmIChmcm9tMi5wb3NpdGlvbikgdG8yLnBvc2l0aW9uID0gcG9zaXRpb24yKGZyb20yKTsKfQpmdW5jdGlvbiBhcHBseURhdGEoZnJvbTIsIHRvMikgewogIGxldCByZXN1bHQgPSB0bzI7CiAgaWYgKGZyb20yICYmIGZyb20yLmRhdGEpIHsKICAgIGNvbnN0IGhOYW1lID0gZnJvbTIuZGF0YS5oTmFtZTsKICAgIGNvbnN0IGhDaGlsZHJlbiA9IGZyb20yLmRhdGEuaENoaWxkcmVuOwogICAgY29uc3QgaFByb3BlcnRpZXMgPSBmcm9tMi5kYXRhLmhQcm9wZXJ0aWVzOwogICAgaWYgKHR5cGVvZiBoTmFtZSA9PT0gInN0cmluZyIpIHsKICAgICAgaWYgKHJlc3VsdC50eXBlID09PSAiZWxlbWVudCIpIHsKICAgICAgICByZXN1bHQudGFnTmFtZSA9IGhOYW1lOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGNoaWxkcmVuMiA9ICJjaGlsZHJlbiIgaW4gcmVzdWx0ID8gcmVzdWx0LmNoaWxkcmVuIDogW3Jlc3VsdF07CiAgICAgICAgcmVzdWx0ID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWU6IGhOYW1lLCBwcm9wZXJ0aWVzOiB7fSwgY2hpbGRyZW46IGNoaWxkcmVuMiB9OwogICAgICB9CiAgICB9CiAgICBpZiAocmVzdWx0LnR5cGUgPT09ICJlbGVtZW50IiAmJiBoUHJvcGVydGllcykgewogICAgICBPYmplY3QuYXNzaWduKHJlc3VsdC5wcm9wZXJ0aWVzLCBlc21fZGVmYXVsdChoUHJvcGVydGllcykpOwogICAgfQogICAgaWYgKCJjaGlsZHJlbiIgaW4gcmVzdWx0ICYmIHJlc3VsdC5jaGlsZHJlbiAmJiBoQ2hpbGRyZW4gIT09IG51bGwgJiYgaENoaWxkcmVuICE9PSB2b2lkIDApIHsKICAgICAgcmVzdWx0LmNoaWxkcmVuID0gaENoaWxkcmVuOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIGRlZmF1bHRVbmtub3duSGFuZGxlcihzdGF0ZTE0LCBub2RlMikgewogIGNvbnN0IGRhdGEgPSBub2RlMi5kYXRhIHx8IHt9OwogIGNvbnN0IHJlc3VsdCA9ICJ2YWx1ZSIgaW4gbm9kZTIgJiYgIShvd244LmNhbGwoZGF0YSwgImhQcm9wZXJ0aWVzIikgfHwgb3duOC5jYWxsKGRhdGEsICJoQ2hpbGRyZW4iKSkgPyB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IG5vZGUyLnZhbHVlIH0gOiB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiZGl2IiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlMTQuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUxNC5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxNC5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KZnVuY3Rpb24gd3JhcDMobm9kZXMsIGxvb3NlKSB7CiAgY29uc3QgcmVzdWx0ID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIGlmIChsb29zZSkgewogICAgcmVzdWx0LnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH0pOwogIH0KICB3aGlsZSAoKytpbmRleDIgPCBub2Rlcy5sZW5ndGgpIHsKICAgIGlmIChpbmRleDIpIHJlc3VsdC5wdXNoKHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlxuIiB9KTsKICAgIHJlc3VsdC5wdXNoKG5vZGVzW2luZGV4Ml0pOwogIH0KICBpZiAobG9vc2UgJiYgbm9kZXMubGVuZ3RoID4gMCkgewogICAgcmVzdWx0LnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH0pOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIHRyaW1NYXJrZG93blNwYWNlU3RhcnQodmFsdWUyKSB7CiAgbGV0IGluZGV4MiA9IDA7CiAgbGV0IGNvZGU0ID0gdmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyKTsKICB3aGlsZSAoY29kZTQgPT09IDkgfHwgY29kZTQgPT09IDMyKSB7CiAgICBpbmRleDIrKzsKICAgIGNvZGU0ID0gdmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyKTsKICB9CiAgcmV0dXJuIHZhbHVlMi5zbGljZShpbmRleDIpOwp9CnZhciBvd244LCBlbXB0eU9wdGlvbnM1Owp2YXIgaW5pdF9zdGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvc3RhdGUuanMiKCkgewogICAgaW5pdF9lc20oKTsKICAgIGluaXRfdW5pc3RfdXRpbF92aXNpdCgpOwogICAgaW5pdF91bmlzdF91dGlsX3Bvc2l0aW9uKCk7CiAgICBpbml0X2hhbmRsZXJzKCk7CiAgICBvd244ID0ge30uaGFzT3duUHJvcGVydHk7CiAgICBlbXB0eU9wdGlvbnM1ID0ge307CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHRvSGFzdCh0cmVlLCBvcHRpb25zKSB7CiAgY29uc3Qgc3RhdGUxNCA9IGNyZWF0ZVN0YXRlKHRyZWUsIG9wdGlvbnMpOwogIGNvbnN0IG5vZGUyID0gc3RhdGUxNC5vbmUodHJlZSwgdm9pZCAwKTsKICBjb25zdCBmb290ID0gZm9vdGVyKHN0YXRlMTQpOwogIGNvbnN0IHJlc3VsdCA9IEFycmF5LmlzQXJyYXkobm9kZTIpID8geyB0eXBlOiAicm9vdCIsIGNoaWxkcmVuOiBub2RlMiB9IDogbm9kZTIgfHwgeyB0eXBlOiAicm9vdCIsIGNoaWxkcmVuOiBbXSB9OwogIGlmIChmb290KSB7CiAgICBvaygiY2hpbGRyZW4iIGluIHJlc3VsdCk7CiAgICByZXN1bHQuY2hpbGRyZW4ucHVzaCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICJcbiIgfSwgZm9vdCk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KdmFyIGluaXRfbGliMjcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVmYXVsdCgpOwogICAgaW5pdF9mb290ZXIoKTsKICAgIGluaXRfc3RhdGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9pbmRleC5qcwp2YXIgaW5pdF9tZGFzdF91dGlsX3RvX2hhc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvaW5kZXguanMiKCkgewogICAgaW5pdF9oYW5kbGVycygpOwogICAgaW5pdF9saWIyNygpOwogICAgaW5pdF9mb290ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2h0bWwtdm9pZC1lbGVtZW50c0AzLjAuMC9ub2RlX21vZHVsZXMvaHRtbC12b2lkLWVsZW1lbnRzL2luZGV4LmpzCnZhciBodG1sVm9pZEVsZW1lbnRzOwp2YXIgaW5pdF9odG1sX3ZvaWRfZWxlbWVudHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9odG1sLXZvaWQtZWxlbWVudHNAMy4wLjAvbm9kZV9tb2R1bGVzL2h0bWwtdm9pZC1lbGVtZW50cy9pbmRleC5qcyIoKSB7CiAgICBodG1sVm9pZEVsZW1lbnRzID0gWwogICAgICAiYXJlYSIsCiAgICAgICJiYXNlIiwKICAgICAgImJhc2Vmb250IiwKICAgICAgImJnc291bmQiLAogICAgICAiYnIiLAogICAgICAiY29sIiwKICAgICAgImNvbW1hbmQiLAogICAgICAiZW1iZWQiLAogICAgICAiZnJhbWUiLAogICAgICAiaHIiLAogICAgICAiaW1hZ2UiLAogICAgICAiaW1nIiwKICAgICAgImlucHV0IiwKICAgICAgImtleWdlbiIsCiAgICAgICJsaW5rIiwKICAgICAgIm1ldGEiLAogICAgICAicGFyYW0iLAogICAgICAic291cmNlIiwKICAgICAgInRyYWNrIiwKICAgICAgIndiciIKICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvc2NoZW1hLmpzCnZhciBTY2hlbWE7CnZhciBpbml0X3NjaGVtYTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvc2NoZW1hLmpzIigpIHsKICAgIFNjaGVtYSA9IGNsYXNzIHsKICAgICAgLyoqCiAgICAgICAqIEBwYXJhbSB7U2NoZW1hVHlwZVsncHJvcGVydHknXX0gcHJvcGVydHkKICAgICAgICogICBQcm9wZXJ0eS4KICAgICAgICogQHBhcmFtIHtTY2hlbWFUeXBlWydub3JtYWwnXX0gbm9ybWFsCiAgICAgICAqICAgTm9ybWFsLgogICAgICAgKiBAcGFyYW0ge1NwYWNlIHwgdW5kZWZpbmVkfSBbc3BhY2VdCiAgICAgICAqICAgU3BhY2UuCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqICAgU2NoZW1hLgogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IocHJvcGVydHkxMywgbm9ybWFsLCBzcGFjZTIpIHsKICAgICAgICB0aGlzLm5vcm1hbCA9IG5vcm1hbDsKICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHkxMzsKICAgICAgICBpZiAoc3BhY2UyKSB7CiAgICAgICAgICB0aGlzLnNwYWNlID0gc3BhY2UyOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIFNjaGVtYS5wcm90b3R5cGUubm9ybWFsID0ge307CiAgICBTY2hlbWEucHJvdG90eXBlLnByb3BlcnR5ID0ge307CiAgICBTY2hlbWEucHJvdG90eXBlLnNwYWNlID0gdm9pZCAwOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL21lcmdlLmpzCmZ1bmN0aW9uIG1lcmdlMyhkZWZpbml0aW9ucywgc3BhY2UyKSB7CiAgY29uc3QgcHJvcGVydHkxMyA9IHt9OwogIGNvbnN0IG5vcm1hbCA9IHt9OwogIGZvciAoY29uc3QgZGVmaW5pdGlvbjMgb2YgZGVmaW5pdGlvbnMpIHsKICAgIE9iamVjdC5hc3NpZ24ocHJvcGVydHkxMywgZGVmaW5pdGlvbjMucHJvcGVydHkpOwogICAgT2JqZWN0LmFzc2lnbihub3JtYWwsIGRlZmluaXRpb24zLm5vcm1hbCk7CiAgfQogIHJldHVybiBuZXcgU2NoZW1hKHByb3BlcnR5MTMsIG5vcm1hbCwgc3BhY2UyKTsKfQp2YXIgaW5pdF9tZXJnZTMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvbWVyZ2UuanMiKCkgewogICAgaW5pdF9zY2hlbWEyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL25vcm1hbGl6ZS5qcwpmdW5jdGlvbiBub3JtYWxpemUzKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIudG9Mb3dlckNhc2UoKTsKfQp2YXIgaW5pdF9ub3JtYWxpemUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL25vcm1hbGl6ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvaW5mby5qcwp2YXIgSW5mbzsKdmFyIGluaXRfaW5mbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9pbmZvLmpzIigpIHsKICAgIEluZm8gPSBjbGFzcyB7CiAgICAgIC8qKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkKICAgICAgICogICBQcm9wZXJ0eS4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZQogICAgICAgKiAgIEF0dHJpYnV0ZS4KICAgICAgICogQHJldHVybnMKICAgICAgICogICBJbmZvLgogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IocHJvcGVydHkxMywgYXR0cmlidXRlKSB7CiAgICAgICAgdGhpcy5hdHRyaWJ1dGUgPSBhdHRyaWJ1dGU7CiAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5MTM7CiAgICAgIH0KICAgIH07CiAgICBJbmZvLnByb3RvdHlwZS5hdHRyaWJ1dGUgPSAiIjsKICAgIEluZm8ucHJvdG90eXBlLmJvb2xlYW5pc2ggPSBmYWxzZTsKICAgIEluZm8ucHJvdG90eXBlLmJvb2xlYW4gPSBmYWxzZTsKICAgIEluZm8ucHJvdG90eXBlLmNvbW1hT3JTcGFjZVNlcGFyYXRlZCA9IGZhbHNlOwogICAgSW5mby5wcm90b3R5cGUuY29tbWFTZXBhcmF0ZWQgPSBmYWxzZTsKICAgIEluZm8ucHJvdG90eXBlLmRlZmluZWQgPSBmYWxzZTsKICAgIEluZm8ucHJvdG90eXBlLm11c3RVc2VQcm9wZXJ0eSA9IGZhbHNlOwogICAgSW5mby5wcm90b3R5cGUubnVtYmVyID0gZmFsc2U7CiAgICBJbmZvLnByb3RvdHlwZS5vdmVybG9hZGVkQm9vbGVhbiA9IGZhbHNlOwogICAgSW5mby5wcm90b3R5cGUucHJvcGVydHkgPSAiIjsKICAgIEluZm8ucHJvdG90eXBlLnNwYWNlU2VwYXJhdGVkID0gZmFsc2U7CiAgICBJbmZvLnByb3RvdHlwZS5zcGFjZSA9IHZvaWQgMDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC90eXBlcy5qcwp2YXIgdHlwZXNfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydCh0eXBlc19leHBvcnRzLCB7CiAgYm9vbGVhbjogKCkgPT4gYm9vbGVhbiwKICBib29sZWFuaXNoOiAoKSA9PiBib29sZWFuaXNoLAogIGNvbW1hT3JTcGFjZVNlcGFyYXRlZDogKCkgPT4gY29tbWFPclNwYWNlU2VwYXJhdGVkLAogIGNvbW1hU2VwYXJhdGVkOiAoKSA9PiBjb21tYVNlcGFyYXRlZCwKICBudW1iZXI6ICgpID0+IG51bWJlciwKICBvdmVybG9hZGVkQm9vbGVhbjogKCkgPT4gb3ZlcmxvYWRlZEJvb2xlYW4sCiAgc3BhY2VTZXBhcmF0ZWQ6ICgpID0+IHNwYWNlU2VwYXJhdGVkCn0pOwpmdW5jdGlvbiBpbmNyZW1lbnQoKSB7CiAgcmV0dXJuIDIgKiogKytwb3dlcnM7Cn0KdmFyIHBvd2VycywgYm9vbGVhbiwgYm9vbGVhbmlzaCwgb3ZlcmxvYWRlZEJvb2xlYW4sIG51bWJlciwgc3BhY2VTZXBhcmF0ZWQsIGNvbW1hU2VwYXJhdGVkLCBjb21tYU9yU3BhY2VTZXBhcmF0ZWQ7CnZhciBpbml0X3R5cGVzMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC90eXBlcy5qcyIoKSB7CiAgICBwb3dlcnMgPSAwOwogICAgYm9vbGVhbiA9IGluY3JlbWVudCgpOwogICAgYm9vbGVhbmlzaCA9IGluY3JlbWVudCgpOwogICAgb3ZlcmxvYWRlZEJvb2xlYW4gPSBpbmNyZW1lbnQoKTsKICAgIG51bWJlciA9IGluY3JlbWVudCgpOwogICAgc3BhY2VTZXBhcmF0ZWQgPSBpbmNyZW1lbnQoKTsKICAgIGNvbW1hU2VwYXJhdGVkID0gaW5jcmVtZW50KCk7CiAgICBjb21tYU9yU3BhY2VTZXBhcmF0ZWQgPSBpbmNyZW1lbnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9kZWZpbmVkLWluZm8uanMKZnVuY3Rpb24gbWFyayh2YWx1ZXMsIGtleTIsIHZhbHVlMikgewogIGlmICh2YWx1ZTIpIHsKICAgIHZhbHVlc1trZXkyXSA9IHZhbHVlMjsKICB9Cn0KdmFyIGNoZWNrcywgRGVmaW5lZEluZm87CnZhciBpbml0X2RlZmluZWRfaW5mbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9kZWZpbmVkLWluZm8uanMiKCkgewogICAgaW5pdF9pbmZvKCk7CiAgICBpbml0X3R5cGVzMygpOwogICAgY2hlY2tzID0gLyoqIEB0eXBlIHtSZWFkb25seUFycmF5PGtleW9mIHR5cGVvZiB0eXBlcz59ICovCiAgICBPYmplY3Qua2V5cyh0eXBlc19leHBvcnRzKTsKICAgIERlZmluZWRJbmZvID0gY2xhc3MgZXh0ZW5kcyBJbmZvIHsKICAgICAgLyoqCiAgICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkKICAgICAgICogICBQcm9wZXJ0eS4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZQogICAgICAgKiAgIEF0dHJpYnV0ZS4KICAgICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbbWFza10KICAgICAgICogICBNYXNrLgogICAgICAgKiBAcGFyYW0ge1NwYWNlIHwgdW5kZWZpbmVkfSBbc3BhY2VdCiAgICAgICAqICAgU3BhY2UuCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqICAgSW5mby4KICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5MTMsIGF0dHJpYnV0ZSwgbWFzaywgc3BhY2UyKSB7CiAgICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICAgIHN1cGVyKHByb3BlcnR5MTMsIGF0dHJpYnV0ZSk7CiAgICAgICAgbWFyayh0aGlzLCAic3BhY2UiLCBzcGFjZTIpOwogICAgICAgIGlmICh0eXBlb2YgbWFzayA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIHdoaWxlICgrK2luZGV4MiA8IGNoZWNrcy5sZW5ndGgpIHsKICAgICAgICAgICAgY29uc3QgY2hlY2sgPSBjaGVja3NbaW5kZXgyXTsKICAgICAgICAgICAgbWFyayh0aGlzLCBjaGVja3NbaW5kZXgyXSwgKG1hc2sgJiB0eXBlc19leHBvcnRzW2NoZWNrXSkgPT09IHR5cGVzX2V4cG9ydHNbY2hlY2tdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBEZWZpbmVkSW5mby5wcm90b3R5cGUuZGVmaW5lZCA9IHRydWU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvY3JlYXRlLmpzCmZ1bmN0aW9uIGNyZWF0ZTYoZGVmaW5pdGlvbjMpIHsKICBjb25zdCBwcm9wZXJ0aWVzMiA9IHt9OwogIGNvbnN0IG5vcm1hbHMgPSB7fTsKICBmb3IgKGNvbnN0IFtwcm9wZXJ0eTEzLCB2YWx1ZTJdIG9mIE9iamVjdC5lbnRyaWVzKGRlZmluaXRpb24zLnByb3BlcnRpZXMpKSB7CiAgICBjb25zdCBpbmZvID0gbmV3IERlZmluZWRJbmZvKAogICAgICBwcm9wZXJ0eTEzLAogICAgICBkZWZpbml0aW9uMy50cmFuc2Zvcm0oZGVmaW5pdGlvbjMuYXR0cmlidXRlcyB8fCB7fSwgcHJvcGVydHkxMyksCiAgICAgIHZhbHVlMiwKICAgICAgZGVmaW5pdGlvbjMuc3BhY2UKICAgICk7CiAgICBpZiAoZGVmaW5pdGlvbjMubXVzdFVzZVByb3BlcnR5ICYmIGRlZmluaXRpb24zLm11c3RVc2VQcm9wZXJ0eS5pbmNsdWRlcyhwcm9wZXJ0eTEzKSkgewogICAgICBpbmZvLm11c3RVc2VQcm9wZXJ0eSA9IHRydWU7CiAgICB9CiAgICBwcm9wZXJ0aWVzMltwcm9wZXJ0eTEzXSA9IGluZm87CiAgICBub3JtYWxzW25vcm1hbGl6ZTMocHJvcGVydHkxMyldID0gcHJvcGVydHkxMzsKICAgIG5vcm1hbHNbbm9ybWFsaXplMyhpbmZvLmF0dHJpYnV0ZSldID0gcHJvcGVydHkxMzsKICB9CiAgcmV0dXJuIG5ldyBTY2hlbWEocHJvcGVydGllczIsIG5vcm1hbHMsIGRlZmluaXRpb24zLnNwYWNlKTsKfQp2YXIgaW5pdF9jcmVhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvY3JlYXRlLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplKCk7CiAgICBpbml0X2RlZmluZWRfaW5mbygpOwogICAgaW5pdF9zY2hlbWEyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2FyaWEuanMKdmFyIGFyaWEyOwp2YXIgaW5pdF9hcmlhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9hcmlhLmpzIigpIHsKICAgIGluaXRfY3JlYXRlKCk7CiAgICBpbml0X3R5cGVzMygpOwogICAgYXJpYTIgPSBjcmVhdGU2KHsKICAgICAgcHJvcGVydGllczogewogICAgICAgIGFyaWFBY3RpdmVEZXNjZW5kYW50OiBudWxsLAogICAgICAgIGFyaWFBdG9taWM6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYUF1dG9Db21wbGV0ZTogbnVsbCwKICAgICAgICBhcmlhQnVzeTogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhQ2hlY2tlZDogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhQ29sQ291bnQ6IG51bWJlciwKICAgICAgICBhcmlhQ29sSW5kZXg6IG51bWJlciwKICAgICAgICBhcmlhQ29sU3BhbjogbnVtYmVyLAogICAgICAgIGFyaWFDb250cm9sczogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYXJpYUN1cnJlbnQ6IG51bGwsCiAgICAgICAgYXJpYURlc2NyaWJlZEJ5OiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBhcmlhRGV0YWlsczogbnVsbCwKICAgICAgICBhcmlhRGlzYWJsZWQ6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYURyb3BFZmZlY3Q6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGFyaWFFcnJvck1lc3NhZ2U6IG51bGwsCiAgICAgICAgYXJpYUV4cGFuZGVkOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFGbG93VG86IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGFyaWFHcmFiYmVkOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFIYXNQb3B1cDogbnVsbCwKICAgICAgICBhcmlhSGlkZGVuOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFJbnZhbGlkOiBudWxsLAogICAgICAgIGFyaWFLZXlTaG9ydGN1dHM6IG51bGwsCiAgICAgICAgYXJpYUxhYmVsOiBudWxsLAogICAgICAgIGFyaWFMYWJlbGxlZEJ5OiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBhcmlhTGV2ZWw6IG51bWJlciwKICAgICAgICBhcmlhTGl2ZTogbnVsbCwKICAgICAgICBhcmlhTW9kYWw6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYU11bHRpTGluZTogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhTXVsdGlTZWxlY3RhYmxlOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFPcmllbnRhdGlvbjogbnVsbCwKICAgICAgICBhcmlhT3duczogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYXJpYVBsYWNlaG9sZGVyOiBudWxsLAogICAgICAgIGFyaWFQb3NJblNldDogbnVtYmVyLAogICAgICAgIGFyaWFQcmVzc2VkOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFSZWFkT25seTogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhUmVsZXZhbnQ6IG51bGwsCiAgICAgICAgYXJpYVJlcXVpcmVkOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFSb2xlRGVzY3JpcHRpb246IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGFyaWFSb3dDb3VudDogbnVtYmVyLAogICAgICAgIGFyaWFSb3dJbmRleDogbnVtYmVyLAogICAgICAgIGFyaWFSb3dTcGFuOiBudW1iZXIsCiAgICAgICAgYXJpYVNlbGVjdGVkOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFTZXRTaXplOiBudW1iZXIsCiAgICAgICAgYXJpYVNvcnQ6IG51bGwsCiAgICAgICAgYXJpYVZhbHVlTWF4OiBudW1iZXIsCiAgICAgICAgYXJpYVZhbHVlTWluOiBudW1iZXIsCiAgICAgICAgYXJpYVZhbHVlTm93OiBudW1iZXIsCiAgICAgICAgYXJpYVZhbHVlVGV4dDogbnVsbCwKICAgICAgICByb2xlOiBudWxsCiAgICAgIH0sCiAgICAgIHRyYW5zZm9ybShfNCwgcHJvcGVydHkxMykgewogICAgICAgIHJldHVybiBwcm9wZXJ0eTEzID09PSAicm9sZSIgPyBwcm9wZXJ0eTEzIDogImFyaWEtIiArIHByb3BlcnR5MTMuc2xpY2UoNCkudG9Mb3dlckNhc2UoKTsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvY2FzZS1zZW5zaXRpdmUtdHJhbnNmb3JtLmpzCmZ1bmN0aW9uIGNhc2VTZW5zaXRpdmVUcmFuc2Zvcm0oYXR0cmlidXRlcywgYXR0cmlidXRlKSB7CiAgcmV0dXJuIGF0dHJpYnV0ZSBpbiBhdHRyaWJ1dGVzID8gYXR0cmlidXRlc1thdHRyaWJ1dGVdIDogYXR0cmlidXRlOwp9CnZhciBpbml0X2Nhc2Vfc2Vuc2l0aXZlX3RyYW5zZm9ybSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9jYXNlLXNlbnNpdGl2ZS10cmFuc2Zvcm0uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2Nhc2UtaW5zZW5zaXRpdmUtdHJhbnNmb3JtLmpzCmZ1bmN0aW9uIGNhc2VJbnNlbnNpdGl2ZVRyYW5zZm9ybShhdHRyaWJ1dGVzLCBwcm9wZXJ0eTEzKSB7CiAgcmV0dXJuIGNhc2VTZW5zaXRpdmVUcmFuc2Zvcm0oYXR0cmlidXRlcywgcHJvcGVydHkxMy50b0xvd2VyQ2FzZSgpKTsKfQp2YXIgaW5pdF9jYXNlX2luc2Vuc2l0aXZlX3RyYW5zZm9ybSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9jYXNlLWluc2Vuc2l0aXZlLXRyYW5zZm9ybS5qcyIoKSB7CiAgICBpbml0X2Nhc2Vfc2Vuc2l0aXZlX3RyYW5zZm9ybSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9odG1sLmpzCnZhciBodG1sMzsKdmFyIGluaXRfaHRtbDkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2h0bWwuanMiKCkgewogICAgaW5pdF9jYXNlX2luc2Vuc2l0aXZlX3RyYW5zZm9ybSgpOwogICAgaW5pdF9jcmVhdGUoKTsKICAgIGluaXRfdHlwZXMzKCk7CiAgICBodG1sMyA9IGNyZWF0ZTYoewogICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgYWNjZXB0Y2hhcnNldDogImFjY2VwdC1jaGFyc2V0IiwKICAgICAgICBjbGFzc25hbWU6ICJjbGFzcyIsCiAgICAgICAgaHRtbGZvcjogImZvciIsCiAgICAgICAgaHR0cGVxdWl2OiAiaHR0cC1lcXVpdiIKICAgICAgfSwKICAgICAgbXVzdFVzZVByb3BlcnR5OiBbImNoZWNrZWQiLCAibXVsdGlwbGUiLCAibXV0ZWQiLCAic2VsZWN0ZWQiXSwKICAgICAgcHJvcGVydGllczogewogICAgICAgIC8vIFN0YW5kYXJkIFByb3BlcnRpZXMuCiAgICAgICAgYWJicjogbnVsbCwKICAgICAgICBhY2NlcHQ6IGNvbW1hU2VwYXJhdGVkLAogICAgICAgIGFjY2VwdENoYXJzZXQ6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGFjY2Vzc0tleTogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYWN0aW9uOiBudWxsLAogICAgICAgIGFsbG93OiBudWxsLAogICAgICAgIGFsbG93RnVsbFNjcmVlbjogYm9vbGVhbiwKICAgICAgICBhbGxvd1BheW1lbnRSZXF1ZXN0OiBib29sZWFuLAogICAgICAgIGFsbG93VXNlck1lZGlhOiBib29sZWFuLAogICAgICAgIGFsdDogbnVsbCwKICAgICAgICBhczogbnVsbCwKICAgICAgICBhc3luYzogYm9vbGVhbiwKICAgICAgICBhdXRvQ2FwaXRhbGl6ZTogbnVsbCwKICAgICAgICBhdXRvQ29tcGxldGU6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGF1dG9Gb2N1czogYm9vbGVhbiwKICAgICAgICBhdXRvUGxheTogYm9vbGVhbiwKICAgICAgICBibG9ja2luZzogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgY2FwdHVyZTogbnVsbCwKICAgICAgICBjaGFyU2V0OiBudWxsLAogICAgICAgIGNoZWNrZWQ6IGJvb2xlYW4sCiAgICAgICAgY2l0ZTogbnVsbCwKICAgICAgICBjbGFzc05hbWU6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGNvbHM6IG51bWJlciwKICAgICAgICBjb2xTcGFuOiBudWxsLAogICAgICAgIGNvbnRlbnQ6IG51bGwsCiAgICAgICAgY29udGVudEVkaXRhYmxlOiBib29sZWFuaXNoLAogICAgICAgIGNvbnRyb2xzOiBib29sZWFuLAogICAgICAgIGNvbnRyb2xzTGlzdDogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgY29vcmRzOiBudW1iZXIgfCBjb21tYVNlcGFyYXRlZCwKICAgICAgICBjcm9zc09yaWdpbjogbnVsbCwKICAgICAgICBkYXRhOiBudWxsLAogICAgICAgIGRhdGVUaW1lOiBudWxsLAogICAgICAgIGRlY29kaW5nOiBudWxsLAogICAgICAgIGRlZmF1bHQ6IGJvb2xlYW4sCiAgICAgICAgZGVmZXI6IGJvb2xlYW4sCiAgICAgICAgZGlyOiBudWxsLAogICAgICAgIGRpck5hbWU6IG51bGwsCiAgICAgICAgZGlzYWJsZWQ6IGJvb2xlYW4sCiAgICAgICAgZG93bmxvYWQ6IG92ZXJsb2FkZWRCb29sZWFuLAogICAgICAgIGRyYWdnYWJsZTogYm9vbGVhbmlzaCwKICAgICAgICBlbmNUeXBlOiBudWxsLAogICAgICAgIGVudGVyS2V5SGludDogbnVsbCwKICAgICAgICBmZXRjaFByaW9yaXR5OiBudWxsLAogICAgICAgIGZvcm06IG51bGwsCiAgICAgICAgZm9ybUFjdGlvbjogbnVsbCwKICAgICAgICBmb3JtRW5jVHlwZTogbnVsbCwKICAgICAgICBmb3JtTWV0aG9kOiBudWxsLAogICAgICAgIGZvcm1Ob1ZhbGlkYXRlOiBib29sZWFuLAogICAgICAgIGZvcm1UYXJnZXQ6IG51bGwsCiAgICAgICAgaGVhZGVyczogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgaGVpZ2h0OiBudW1iZXIsCiAgICAgICAgaGlkZGVuOiBvdmVybG9hZGVkQm9vbGVhbiwKICAgICAgICBoaWdoOiBudW1iZXIsCiAgICAgICAgaHJlZjogbnVsbCwKICAgICAgICBocmVmTGFuZzogbnVsbCwKICAgICAgICBodG1sRm9yOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBodHRwRXF1aXY6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGlkOiBudWxsLAogICAgICAgIGltYWdlU2l6ZXM6IG51bGwsCiAgICAgICAgaW1hZ2VTcmNTZXQ6IG51bGwsCiAgICAgICAgaW5lcnQ6IGJvb2xlYW4sCiAgICAgICAgaW5wdXRNb2RlOiBudWxsLAogICAgICAgIGludGVncml0eTogbnVsbCwKICAgICAgICBpczogbnVsbCwKICAgICAgICBpc01hcDogYm9vbGVhbiwKICAgICAgICBpdGVtSWQ6IG51bGwsCiAgICAgICAgaXRlbVByb3A6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGl0ZW1SZWY6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGl0ZW1TY29wZTogYm9vbGVhbiwKICAgICAgICBpdGVtVHlwZTogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAga2luZDogbnVsbCwKICAgICAgICBsYWJlbDogbnVsbCwKICAgICAgICBsYW5nOiBudWxsLAogICAgICAgIGxhbmd1YWdlOiBudWxsLAogICAgICAgIGxpc3Q6IG51bGwsCiAgICAgICAgbG9hZGluZzogbnVsbCwKICAgICAgICBsb29wOiBib29sZWFuLAogICAgICAgIGxvdzogbnVtYmVyLAogICAgICAgIG1hbmlmZXN0OiBudWxsLAogICAgICAgIG1heDogbnVsbCwKICAgICAgICBtYXhMZW5ndGg6IG51bWJlciwKICAgICAgICBtZWRpYTogbnVsbCwKICAgICAgICBtZXRob2Q6IG51bGwsCiAgICAgICAgbWluOiBudWxsLAogICAgICAgIG1pbkxlbmd0aDogbnVtYmVyLAogICAgICAgIG11bHRpcGxlOiBib29sZWFuLAogICAgICAgIG11dGVkOiBib29sZWFuLAogICAgICAgIG5hbWU6IG51bGwsCiAgICAgICAgbm9uY2U6IG51bGwsCiAgICAgICAgbm9Nb2R1bGU6IGJvb2xlYW4sCiAgICAgICAgbm9WYWxpZGF0ZTogYm9vbGVhbiwKICAgICAgICBvbkFib3J0OiBudWxsLAogICAgICAgIG9uQWZ0ZXJQcmludDogbnVsbCwKICAgICAgICBvbkF1eENsaWNrOiBudWxsLAogICAgICAgIG9uQmVmb3JlTWF0Y2g6IG51bGwsCiAgICAgICAgb25CZWZvcmVQcmludDogbnVsbCwKICAgICAgICBvbkJlZm9yZVRvZ2dsZTogbnVsbCwKICAgICAgICBvbkJlZm9yZVVubG9hZDogbnVsbCwKICAgICAgICBvbkJsdXI6IG51bGwsCiAgICAgICAgb25DYW5jZWw6IG51bGwsCiAgICAgICAgb25DYW5QbGF5OiBudWxsLAogICAgICAgIG9uQ2FuUGxheVRocm91Z2g6IG51bGwsCiAgICAgICAgb25DaGFuZ2U6IG51bGwsCiAgICAgICAgb25DbGljazogbnVsbCwKICAgICAgICBvbkNsb3NlOiBudWxsLAogICAgICAgIG9uQ29udGV4dExvc3Q6IG51bGwsCiAgICAgICAgb25Db250ZXh0TWVudTogbnVsbCwKICAgICAgICBvbkNvbnRleHRSZXN0b3JlZDogbnVsbCwKICAgICAgICBvbkNvcHk6IG51bGwsCiAgICAgICAgb25DdWVDaGFuZ2U6IG51bGwsCiAgICAgICAgb25DdXQ6IG51bGwsCiAgICAgICAgb25EYmxDbGljazogbnVsbCwKICAgICAgICBvbkRyYWc6IG51bGwsCiAgICAgICAgb25EcmFnRW5kOiBudWxsLAogICAgICAgIG9uRHJhZ0VudGVyOiBudWxsLAogICAgICAgIG9uRHJhZ0V4aXQ6IG51bGwsCiAgICAgICAgb25EcmFnTGVhdmU6IG51bGwsCiAgICAgICAgb25EcmFnT3ZlcjogbnVsbCwKICAgICAgICBvbkRyYWdTdGFydDogbnVsbCwKICAgICAgICBvbkRyb3A6IG51bGwsCiAgICAgICAgb25EdXJhdGlvbkNoYW5nZTogbnVsbCwKICAgICAgICBvbkVtcHRpZWQ6IG51bGwsCiAgICAgICAgb25FbmRlZDogbnVsbCwKICAgICAgICBvbkVycm9yOiBudWxsLAogICAgICAgIG9uRm9jdXM6IG51bGwsCiAgICAgICAgb25Gb3JtRGF0YTogbnVsbCwKICAgICAgICBvbkhhc2hDaGFuZ2U6IG51bGwsCiAgICAgICAgb25JbnB1dDogbnVsbCwKICAgICAgICBvbkludmFsaWQ6IG51bGwsCiAgICAgICAgb25LZXlEb3duOiBudWxsLAogICAgICAgIG9uS2V5UHJlc3M6IG51bGwsCiAgICAgICAgb25LZXlVcDogbnVsbCwKICAgICAgICBvbkxhbmd1YWdlQ2hhbmdlOiBudWxsLAogICAgICAgIG9uTG9hZDogbnVsbCwKICAgICAgICBvbkxvYWRlZERhdGE6IG51bGwsCiAgICAgICAgb25Mb2FkZWRNZXRhZGF0YTogbnVsbCwKICAgICAgICBvbkxvYWRFbmQ6IG51bGwsCiAgICAgICAgb25Mb2FkU3RhcnQ6IG51bGwsCiAgICAgICAgb25NZXNzYWdlOiBudWxsLAogICAgICAgIG9uTWVzc2FnZUVycm9yOiBudWxsLAogICAgICAgIG9uTW91c2VEb3duOiBudWxsLAogICAgICAgIG9uTW91c2VFbnRlcjogbnVsbCwKICAgICAgICBvbk1vdXNlTGVhdmU6IG51bGwsCiAgICAgICAgb25Nb3VzZU1vdmU6IG51bGwsCiAgICAgICAgb25Nb3VzZU91dDogbnVsbCwKICAgICAgICBvbk1vdXNlT3ZlcjogbnVsbCwKICAgICAgICBvbk1vdXNlVXA6IG51bGwsCiAgICAgICAgb25PZmZsaW5lOiBudWxsLAogICAgICAgIG9uT25saW5lOiBudWxsLAogICAgICAgIG9uUGFnZUhpZGU6IG51bGwsCiAgICAgICAgb25QYWdlU2hvdzogbnVsbCwKICAgICAgICBvblBhc3RlOiBudWxsLAogICAgICAgIG9uUGF1c2U6IG51bGwsCiAgICAgICAgb25QbGF5OiBudWxsLAogICAgICAgIG9uUGxheWluZzogbnVsbCwKICAgICAgICBvblBvcFN0YXRlOiBudWxsLAogICAgICAgIG9uUHJvZ3Jlc3M6IG51bGwsCiAgICAgICAgb25SYXRlQ2hhbmdlOiBudWxsLAogICAgICAgIG9uUmVqZWN0aW9uSGFuZGxlZDogbnVsbCwKICAgICAgICBvblJlc2V0OiBudWxsLAogICAgICAgIG9uUmVzaXplOiBudWxsLAogICAgICAgIG9uU2Nyb2xsOiBudWxsLAogICAgICAgIG9uU2Nyb2xsRW5kOiBudWxsLAogICAgICAgIG9uU2VjdXJpdHlQb2xpY3lWaW9sYXRpb246IG51bGwsCiAgICAgICAgb25TZWVrZWQ6IG51bGwsCiAgICAgICAgb25TZWVraW5nOiBudWxsLAogICAgICAgIG9uU2VsZWN0OiBudWxsLAogICAgICAgIG9uU2xvdENoYW5nZTogbnVsbCwKICAgICAgICBvblN0YWxsZWQ6IG51bGwsCiAgICAgICAgb25TdG9yYWdlOiBudWxsLAogICAgICAgIG9uU3VibWl0OiBudWxsLAogICAgICAgIG9uU3VzcGVuZDogbnVsbCwKICAgICAgICBvblRpbWVVcGRhdGU6IG51bGwsCiAgICAgICAgb25Ub2dnbGU6IG51bGwsCiAgICAgICAgb25VbmhhbmRsZWRSZWplY3Rpb246IG51bGwsCiAgICAgICAgb25VbmxvYWQ6IG51bGwsCiAgICAgICAgb25Wb2x1bWVDaGFuZ2U6IG51bGwsCiAgICAgICAgb25XYWl0aW5nOiBudWxsLAogICAgICAgIG9uV2hlZWw6IG51bGwsCiAgICAgICAgb3BlbjogYm9vbGVhbiwKICAgICAgICBvcHRpbXVtOiBudW1iZXIsCiAgICAgICAgcGF0dGVybjogbnVsbCwKICAgICAgICBwaW5nOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBwbGFjZWhvbGRlcjogbnVsbCwKICAgICAgICBwbGF5c0lubGluZTogYm9vbGVhbiwKICAgICAgICBwb3BvdmVyOiBudWxsLAogICAgICAgIHBvcG92ZXJUYXJnZXQ6IG51bGwsCiAgICAgICAgcG9wb3ZlclRhcmdldEFjdGlvbjogbnVsbCwKICAgICAgICBwb3N0ZXI6IG51bGwsCiAgICAgICAgcHJlbG9hZDogbnVsbCwKICAgICAgICByZWFkT25seTogYm9vbGVhbiwKICAgICAgICByZWZlcnJlclBvbGljeTogbnVsbCwKICAgICAgICByZWw6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIHJlcXVpcmVkOiBib29sZWFuLAogICAgICAgIHJldmVyc2VkOiBib29sZWFuLAogICAgICAgIHJvd3M6IG51bWJlciwKICAgICAgICByb3dTcGFuOiBudW1iZXIsCiAgICAgICAgc2FuZGJveDogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgc2NvcGU6IG51bGwsCiAgICAgICAgc2NvcGVkOiBib29sZWFuLAogICAgICAgIHNlYW1sZXNzOiBib29sZWFuLAogICAgICAgIHNlbGVjdGVkOiBib29sZWFuLAogICAgICAgIHNoYWRvd1Jvb3RDbG9uYWJsZTogYm9vbGVhbiwKICAgICAgICBzaGFkb3dSb290RGVsZWdhdGVzRm9jdXM6IGJvb2xlYW4sCiAgICAgICAgc2hhZG93Um9vdE1vZGU6IG51bGwsCiAgICAgICAgc2hhcGU6IG51bGwsCiAgICAgICAgc2l6ZTogbnVtYmVyLAogICAgICAgIHNpemVzOiBudWxsLAogICAgICAgIHNsb3Q6IG51bGwsCiAgICAgICAgc3BhbjogbnVtYmVyLAogICAgICAgIHNwZWxsQ2hlY2s6IGJvb2xlYW5pc2gsCiAgICAgICAgc3JjOiBudWxsLAogICAgICAgIHNyY0RvYzogbnVsbCwKICAgICAgICBzcmNMYW5nOiBudWxsLAogICAgICAgIHNyY1NldDogbnVsbCwKICAgICAgICBzdGFydDogbnVtYmVyLAogICAgICAgIHN0ZXA6IG51bGwsCiAgICAgICAgc3R5bGU6IG51bGwsCiAgICAgICAgdGFiSW5kZXg6IG51bWJlciwKICAgICAgICB0YXJnZXQ6IG51bGwsCiAgICAgICAgdGl0bGU6IG51bGwsCiAgICAgICAgdHJhbnNsYXRlOiBudWxsLAogICAgICAgIHR5cGU6IG51bGwsCiAgICAgICAgdHlwZU11c3RNYXRjaDogYm9vbGVhbiwKICAgICAgICB1c2VNYXA6IG51bGwsCiAgICAgICAgdmFsdWU6IGJvb2xlYW5pc2gsCiAgICAgICAgd2lkdGg6IG51bWJlciwKICAgICAgICB3cmFwOiBudWxsLAogICAgICAgIHdyaXRpbmdTdWdnZXN0aW9uczogbnVsbCwKICAgICAgICAvLyBMZWdhY3kuCiAgICAgICAgLy8gU2VlOiBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNvdGhlci1lbGVtZW50cywtYXR0cmlidXRlcy1hbmQtYXBpcwogICAgICAgIGFsaWduOiBudWxsLAogICAgICAgIC8vIFNldmVyYWwuIFVzZSBDU1MgYHRleHQtYWxpZ25gIGluc3RlYWQsCiAgICAgICAgYUxpbms6IG51bGwsCiAgICAgICAgLy8gYDxib2R5PmAuIFVzZSBDU1MgYGE6YWN0aXZlIHtjb2xvcn1gIGluc3RlYWQKICAgICAgICBhcmNoaXZlOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICAvLyBgPG9iamVjdD5gLiBMaXN0IG9mIFVSSXMgdG8gYXJjaGl2ZXMKICAgICAgICBheGlzOiBudWxsLAogICAgICAgIC8vIGA8dGQ+YCBhbmQgYDx0aD5gLiBVc2UgYHNjb3BlYCBvbiBgPHRoPmAKICAgICAgICBiYWNrZ3JvdW5kOiBudWxsLAogICAgICAgIC8vIGA8Ym9keT5gLiBVc2UgQ1NTIGBiYWNrZ3JvdW5kLWltYWdlYCBpbnN0ZWFkCiAgICAgICAgYmdDb2xvcjogbnVsbCwKICAgICAgICAvLyBgPGJvZHk+YCBhbmQgdGFibGUgZWxlbWVudHMuIFVzZSBDU1MgYGJhY2tncm91bmQtY29sb3JgIGluc3RlYWQKICAgICAgICBib3JkZXI6IG51bWJlciwKICAgICAgICAvLyBgPHRhYmxlPmAuIFVzZSBDU1MgYGJvcmRlci13aWR0aGAgaW5zdGVhZCwKICAgICAgICBib3JkZXJDb2xvcjogbnVsbCwKICAgICAgICAvLyBgPHRhYmxlPmAuIFVzZSBDU1MgYGJvcmRlci1jb2xvcmAgaW5zdGVhZCwKICAgICAgICBib3R0b21NYXJnaW46IG51bWJlciwKICAgICAgICAvLyBgPGJvZHk+YAogICAgICAgIGNlbGxQYWRkaW5nOiBudWxsLAogICAgICAgIC8vIGA8dGFibGU+YAogICAgICAgIGNlbGxTcGFjaW5nOiBudWxsLAogICAgICAgIC8vIGA8dGFibGU+YAogICAgICAgIGNoYXI6IG51bGwsCiAgICAgICAgLy8gU2V2ZXJhbCB0YWJsZSBlbGVtZW50cy4gV2hlbiBgYWxpZ249Y2hhcmAsIHNldHMgdGhlIGNoYXJhY3RlciB0byBhbGlnbiBvbgogICAgICAgIGNoYXJPZmY6IG51bGwsCiAgICAgICAgLy8gU2V2ZXJhbCB0YWJsZSBlbGVtZW50cy4gV2hlbiBgY2hhcmAsIG9mZnNldHMgdGhlIGFsaWdubWVudAogICAgICAgIGNsYXNzSWQ6IG51bGwsCiAgICAgICAgLy8gYDxvYmplY3Q+YAogICAgICAgIGNsZWFyOiBudWxsLAogICAgICAgIC8vIGA8YnI+YC4gVXNlIENTUyBgY2xlYXJgIGluc3RlYWQKICAgICAgICBjb2RlOiBudWxsLAogICAgICAgIC8vIGA8b2JqZWN0PmAKICAgICAgICBjb2RlQmFzZTogbnVsbCwKICAgICAgICAvLyBgPG9iamVjdD5gCiAgICAgICAgY29kZVR5cGU6IG51bGwsCiAgICAgICAgLy8gYDxvYmplY3Q+YAogICAgICAgIGNvbG9yOiBudWxsLAogICAgICAgIC8vIGA8Zm9udD5gIGFuZCBgPGhyPmAuIFVzZSBDU1MgaW5zdGVhZAogICAgICAgIGNvbXBhY3Q6IGJvb2xlYW4sCiAgICAgICAgLy8gTGlzdHMuIFVzZSBDU1MgdG8gcmVkdWNlIHNwYWNlIGJldHdlZW4gaXRlbXMgaW5zdGVhZAogICAgICAgIGRlY2xhcmU6IGJvb2xlYW4sCiAgICAgICAgLy8gYDxvYmplY3Q+YAogICAgICAgIGV2ZW50OiBudWxsLAogICAgICAgIC8vIGA8c2NyaXB0PmAKICAgICAgICBmYWNlOiBudWxsLAogICAgICAgIC8vIGA8Zm9udD5gLiBVc2UgQ1NTIGluc3RlYWQKICAgICAgICBmcmFtZTogbnVsbCwKICAgICAgICAvLyBgPHRhYmxlPmAKICAgICAgICBmcmFtZUJvcmRlcjogbnVsbCwKICAgICAgICAvLyBgPGlmcmFtZT5gLiBVc2UgQ1NTIGBib3JkZXJgIGluc3RlYWQKICAgICAgICBoU3BhY2U6IG51bWJlciwKICAgICAgICAvLyBgPGltZz5gIGFuZCBgPG9iamVjdD5gCiAgICAgICAgbGVmdE1hcmdpbjogbnVtYmVyLAogICAgICAgIC8vIGA8Ym9keT5gCiAgICAgICAgbGluazogbnVsbCwKICAgICAgICAvLyBgPGJvZHk+YC4gVXNlIENTUyBgYTpsaW5rIHtjb2xvcjogKn1gIGluc3RlYWQKICAgICAgICBsb25nRGVzYzogbnVsbCwKICAgICAgICAvLyBgPGZyYW1lPmAsIGA8aWZyYW1lPmAsIGFuZCBgPGltZz5gLiBVc2UgYW4gYDxhPmAKICAgICAgICBsb3dTcmM6IG51bGwsCiAgICAgICAgLy8gYDxpbWc+YC4gVXNlIGEgYDxwaWN0dXJlPmAKICAgICAgICBtYXJnaW5IZWlnaHQ6IG51bWJlciwKICAgICAgICAvLyBgPGJvZHk+YAogICAgICAgIG1hcmdpbldpZHRoOiBudW1iZXIsCiAgICAgICAgLy8gYDxib2R5PmAKICAgICAgICBub1Jlc2l6ZTogYm9vbGVhbiwKICAgICAgICAvLyBgPGZyYW1lPmAKICAgICAgICBub0hyZWY6IGJvb2xlYW4sCiAgICAgICAgLy8gYDxhcmVhPmAuIFVzZSBubyBocmVmIGluc3RlYWQgb2YgYW4gZXhwbGljaXQgYG5vaHJlZmAKICAgICAgICBub1NoYWRlOiBib29sZWFuLAogICAgICAgIC8vIGA8aHI+YC4gVXNlIGJhY2tncm91bmQtY29sb3IgYW5kIGhlaWdodCBpbnN0ZWFkIG9mIGJvcmRlcnMKICAgICAgICBub1dyYXA6IGJvb2xlYW4sCiAgICAgICAgLy8gYDx0ZD5gIGFuZCBgPHRoPmAKICAgICAgICBvYmplY3Q6IG51bGwsCiAgICAgICAgLy8gYDxhcHBsZXQ+YAogICAgICAgIHByb2ZpbGU6IG51bGwsCiAgICAgICAgLy8gYDxoZWFkPmAKICAgICAgICBwcm9tcHQ6IG51bGwsCiAgICAgICAgLy8gYDxpc2luZGV4PmAKICAgICAgICByZXY6IG51bGwsCiAgICAgICAgLy8gYDxsaW5rPmAKICAgICAgICByaWdodE1hcmdpbjogbnVtYmVyLAogICAgICAgIC8vIGA8Ym9keT5gCiAgICAgICAgcnVsZXM6IG51bGwsCiAgICAgICAgLy8gYDx0YWJsZT5gCiAgICAgICAgc2NoZW1lOiBudWxsLAogICAgICAgIC8vIGA8bWV0YT5gCiAgICAgICAgc2Nyb2xsaW5nOiBib29sZWFuaXNoLAogICAgICAgIC8vIGA8ZnJhbWU+YC4gVXNlIG92ZXJmbG93IGluIHRoZSBjaGlsZCBjb250ZXh0CiAgICAgICAgc3RhbmRieTogbnVsbCwKICAgICAgICAvLyBgPG9iamVjdD5gCiAgICAgICAgc3VtbWFyeTogbnVsbCwKICAgICAgICAvLyBgPHRhYmxlPmAKICAgICAgICB0ZXh0OiBudWxsLAogICAgICAgIC8vIGA8Ym9keT5gLiBVc2UgQ1NTIGBjb2xvcmAgaW5zdGVhZAogICAgICAgIHRvcE1hcmdpbjogbnVtYmVyLAogICAgICAgIC8vIGA8Ym9keT5gCiAgICAgICAgdmFsdWVUeXBlOiBudWxsLAogICAgICAgIC8vIGA8cGFyYW0+YAogICAgICAgIHZlcnNpb246IG51bGwsCiAgICAgICAgLy8gYDxodG1sPmAuIFVzZSBhIGRvY3R5cGUuCiAgICAgICAgdkFsaWduOiBudWxsLAogICAgICAgIC8vIFNldmVyYWwuIFVzZSBDU1MgYHZlcnRpY2FsLWFsaWduYCBpbnN0ZWFkCiAgICAgICAgdkxpbms6IG51bGwsCiAgICAgICAgLy8gYDxib2R5PmAuIFVzZSBDU1MgYGE6dmlzaXRlZCB7Y29sb3J9YCBpbnN0ZWFkCiAgICAgICAgdlNwYWNlOiBudW1iZXIsCiAgICAgICAgLy8gYDxpbWc+YCBhbmQgYDxvYmplY3Q+YAogICAgICAgIC8vIE5vbi1zdGFuZGFyZCBQcm9wZXJ0aWVzLgogICAgICAgIGFsbG93VHJhbnNwYXJlbmN5OiBudWxsLAogICAgICAgIGF1dG9Db3JyZWN0OiBudWxsLAogICAgICAgIGF1dG9TYXZlOiBudWxsLAogICAgICAgIGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlOiBib29sZWFuLAogICAgICAgIGRpc2FibGVSZW1vdGVQbGF5YmFjazogYm9vbGVhbiwKICAgICAgICBwcmVmaXg6IG51bGwsCiAgICAgICAgcHJvcGVydHk6IG51bGwsCiAgICAgICAgcmVzdWx0czogbnVtYmVyLAogICAgICAgIHNlY3VyaXR5OiBudWxsLAogICAgICAgIHVuc2VsZWN0YWJsZTogbnVsbAogICAgICB9LAogICAgICBzcGFjZTogImh0bWwiLAogICAgICB0cmFuc2Zvcm06IGNhc2VJbnNlbnNpdGl2ZVRyYW5zZm9ybQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3N2Zy5qcwp2YXIgc3ZnOwp2YXIgaW5pdF9zdmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3N2Zy5qcyIoKSB7CiAgICBpbml0X2Nhc2Vfc2Vuc2l0aXZlX3RyYW5zZm9ybSgpOwogICAgaW5pdF9jcmVhdGUoKTsKICAgIGluaXRfdHlwZXMzKCk7CiAgICBzdmcgPSBjcmVhdGU2KHsKICAgICAgYXR0cmlidXRlczogewogICAgICAgIGFjY2VudEhlaWdodDogImFjY2VudC1oZWlnaHQiLAogICAgICAgIGFsaWdubWVudEJhc2VsaW5lOiAiYWxpZ25tZW50LWJhc2VsaW5lIiwKICAgICAgICBhcmFiaWNGb3JtOiAiYXJhYmljLWZvcm0iLAogICAgICAgIGJhc2VsaW5lU2hpZnQ6ICJiYXNlbGluZS1zaGlmdCIsCiAgICAgICAgY2FwSGVpZ2h0OiAiY2FwLWhlaWdodCIsCiAgICAgICAgY2xhc3NOYW1lOiAiY2xhc3MiLAogICAgICAgIGNsaXBQYXRoOiAiY2xpcC1wYXRoIiwKICAgICAgICBjbGlwUnVsZTogImNsaXAtcnVsZSIsCiAgICAgICAgY29sb3JJbnRlcnBvbGF0aW9uOiAiY29sb3ItaW50ZXJwb2xhdGlvbiIsCiAgICAgICAgY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczogImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyIsCiAgICAgICAgY29sb3JQcm9maWxlOiAiY29sb3ItcHJvZmlsZSIsCiAgICAgICAgY29sb3JSZW5kZXJpbmc6ICJjb2xvci1yZW5kZXJpbmciLAogICAgICAgIGNyb3NzT3JpZ2luOiAiY3Jvc3NvcmlnaW4iLAogICAgICAgIGRhdGFUeXBlOiAiZGF0YXR5cGUiLAogICAgICAgIGRvbWluYW50QmFzZWxpbmU6ICJkb21pbmFudC1iYXNlbGluZSIsCiAgICAgICAgZW5hYmxlQmFja2dyb3VuZDogImVuYWJsZS1iYWNrZ3JvdW5kIiwKICAgICAgICBmaWxsT3BhY2l0eTogImZpbGwtb3BhY2l0eSIsCiAgICAgICAgZmlsbFJ1bGU6ICJmaWxsLXJ1bGUiLAogICAgICAgIGZsb29kQ29sb3I6ICJmbG9vZC1jb2xvciIsCiAgICAgICAgZmxvb2RPcGFjaXR5OiAiZmxvb2Qtb3BhY2l0eSIsCiAgICAgICAgZm9udEZhbWlseTogImZvbnQtZmFtaWx5IiwKICAgICAgICBmb250U2l6ZTogImZvbnQtc2l6ZSIsCiAgICAgICAgZm9udFNpemVBZGp1c3Q6ICJmb250LXNpemUtYWRqdXN0IiwKICAgICAgICBmb250U3RyZXRjaDogImZvbnQtc3RyZXRjaCIsCiAgICAgICAgZm9udFN0eWxlOiAiZm9udC1zdHlsZSIsCiAgICAgICAgZm9udFZhcmlhbnQ6ICJmb250LXZhcmlhbnQiLAogICAgICAgIGZvbnRXZWlnaHQ6ICJmb250LXdlaWdodCIsCiAgICAgICAgZ2x5cGhOYW1lOiAiZ2x5cGgtbmFtZSIsCiAgICAgICAgZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6ICJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwKICAgICAgICBnbHlwaE9yaWVudGF0aW9uVmVydGljYWw6ICJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCIsCiAgICAgICAgaHJlZkxhbmc6ICJocmVmbGFuZyIsCiAgICAgICAgaG9yaXpBZHZYOiAiaG9yaXotYWR2LXgiLAogICAgICAgIGhvcml6T3JpZ2luWDogImhvcml6LW9yaWdpbi14IiwKICAgICAgICBob3Jpek9yaWdpblk6ICJob3Jpei1vcmlnaW4teSIsCiAgICAgICAgaW1hZ2VSZW5kZXJpbmc6ICJpbWFnZS1yZW5kZXJpbmciLAogICAgICAgIGxldHRlclNwYWNpbmc6ICJsZXR0ZXItc3BhY2luZyIsCiAgICAgICAgbGlnaHRpbmdDb2xvcjogImxpZ2h0aW5nLWNvbG9yIiwKICAgICAgICBtYXJrZXJFbmQ6ICJtYXJrZXItZW5kIiwKICAgICAgICBtYXJrZXJNaWQ6ICJtYXJrZXItbWlkIiwKICAgICAgICBtYXJrZXJTdGFydDogIm1hcmtlci1zdGFydCIsCiAgICAgICAgbmF2RG93bjogIm5hdi1kb3duIiwKICAgICAgICBuYXZEb3duTGVmdDogIm5hdi1kb3duLWxlZnQiLAogICAgICAgIG5hdkRvd25SaWdodDogIm5hdi1kb3duLXJpZ2h0IiwKICAgICAgICBuYXZMZWZ0OiAibmF2LWxlZnQiLAogICAgICAgIG5hdk5leHQ6ICJuYXYtbmV4dCIsCiAgICAgICAgbmF2UHJldjogIm5hdi1wcmV2IiwKICAgICAgICBuYXZSaWdodDogIm5hdi1yaWdodCIsCiAgICAgICAgbmF2VXA6ICJuYXYtdXAiLAogICAgICAgIG5hdlVwTGVmdDogIm5hdi11cC1sZWZ0IiwKICAgICAgICBuYXZVcFJpZ2h0OiAibmF2LXVwLXJpZ2h0IiwKICAgICAgICBvbkFib3J0OiAib25hYm9ydCIsCiAgICAgICAgb25BY3RpdmF0ZTogIm9uYWN0aXZhdGUiLAogICAgICAgIG9uQWZ0ZXJQcmludDogIm9uYWZ0ZXJwcmludCIsCiAgICAgICAgb25CZWZvcmVQcmludDogIm9uYmVmb3JlcHJpbnQiLAogICAgICAgIG9uQmVnaW46ICJvbmJlZ2luIiwKICAgICAgICBvbkNhbmNlbDogIm9uY2FuY2VsIiwKICAgICAgICBvbkNhblBsYXk6ICJvbmNhbnBsYXkiLAogICAgICAgIG9uQ2FuUGxheVRocm91Z2g6ICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICAgICBvbkNoYW5nZTogIm9uY2hhbmdlIiwKICAgICAgICBvbkNsaWNrOiAib25jbGljayIsCiAgICAgICAgb25DbG9zZTogIm9uY2xvc2UiLAogICAgICAgIG9uQ29weTogIm9uY29weSIsCiAgICAgICAgb25DdWVDaGFuZ2U6ICJvbmN1ZWNoYW5nZSIsCiAgICAgICAgb25DdXQ6ICJvbmN1dCIsCiAgICAgICAgb25EYmxDbGljazogIm9uZGJsY2xpY2siLAogICAgICAgIG9uRHJhZzogIm9uZHJhZyIsCiAgICAgICAgb25EcmFnRW5kOiAib25kcmFnZW5kIiwKICAgICAgICBvbkRyYWdFbnRlcjogIm9uZHJhZ2VudGVyIiwKICAgICAgICBvbkRyYWdFeGl0OiAib25kcmFnZXhpdCIsCiAgICAgICAgb25EcmFnTGVhdmU6ICJvbmRyYWdsZWF2ZSIsCiAgICAgICAgb25EcmFnT3ZlcjogIm9uZHJhZ292ZXIiLAogICAgICAgIG9uRHJhZ1N0YXJ0OiAib25kcmFnc3RhcnQiLAogICAgICAgIG9uRHJvcDogIm9uZHJvcCIsCiAgICAgICAgb25EdXJhdGlvbkNoYW5nZTogIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgICAgIG9uRW1wdGllZDogIm9uZW1wdGllZCIsCiAgICAgICAgb25FbmQ6ICJvbmVuZCIsCiAgICAgICAgb25FbmRlZDogIm9uZW5kZWQiLAogICAgICAgIG9uRXJyb3I6ICJvbmVycm9yIiwKICAgICAgICBvbkZvY3VzOiAib25mb2N1cyIsCiAgICAgICAgb25Gb2N1c0luOiAib25mb2N1c2luIiwKICAgICAgICBvbkZvY3VzT3V0OiAib25mb2N1c291dCIsCiAgICAgICAgb25IYXNoQ2hhbmdlOiAib25oYXNoY2hhbmdlIiwKICAgICAgICBvbklucHV0OiAib25pbnB1dCIsCiAgICAgICAgb25JbnZhbGlkOiAib25pbnZhbGlkIiwKICAgICAgICBvbktleURvd246ICJvbmtleWRvd24iLAogICAgICAgIG9uS2V5UHJlc3M6ICJvbmtleXByZXNzIiwKICAgICAgICBvbktleVVwOiAib25rZXl1cCIsCiAgICAgICAgb25Mb2FkOiAib25sb2FkIiwKICAgICAgICBvbkxvYWRlZERhdGE6ICJvbmxvYWRlZGRhdGEiLAogICAgICAgIG9uTG9hZGVkTWV0YWRhdGE6ICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICAgICBvbkxvYWRTdGFydDogIm9ubG9hZHN0YXJ0IiwKICAgICAgICBvbk1lc3NhZ2U6ICJvbm1lc3NhZ2UiLAogICAgICAgIG9uTW91c2VEb3duOiAib25tb3VzZWRvd24iLAogICAgICAgIG9uTW91c2VFbnRlcjogIm9ubW91c2VlbnRlciIsCiAgICAgICAgb25Nb3VzZUxlYXZlOiAib25tb3VzZWxlYXZlIiwKICAgICAgICBvbk1vdXNlTW92ZTogIm9ubW91c2Vtb3ZlIiwKICAgICAgICBvbk1vdXNlT3V0OiAib25tb3VzZW91dCIsCiAgICAgICAgb25Nb3VzZU92ZXI6ICJvbm1vdXNlb3ZlciIsCiAgICAgICAgb25Nb3VzZVVwOiAib25tb3VzZXVwIiwKICAgICAgICBvbk1vdXNlV2hlZWw6ICJvbm1vdXNld2hlZWwiLAogICAgICAgIG9uT2ZmbGluZTogIm9ub2ZmbGluZSIsCiAgICAgICAgb25PbmxpbmU6ICJvbm9ubGluZSIsCiAgICAgICAgb25QYWdlSGlkZTogIm9ucGFnZWhpZGUiLAogICAgICAgIG9uUGFnZVNob3c6ICJvbnBhZ2VzaG93IiwKICAgICAgICBvblBhc3RlOiAib25wYXN0ZSIsCiAgICAgICAgb25QYXVzZTogIm9ucGF1c2UiLAogICAgICAgIG9uUGxheTogIm9ucGxheSIsCiAgICAgICAgb25QbGF5aW5nOiAib25wbGF5aW5nIiwKICAgICAgICBvblBvcFN0YXRlOiAib25wb3BzdGF0ZSIsCiAgICAgICAgb25Qcm9ncmVzczogIm9ucHJvZ3Jlc3MiLAogICAgICAgIG9uUmF0ZUNoYW5nZTogIm9ucmF0ZWNoYW5nZSIsCiAgICAgICAgb25SZXBlYXQ6ICJvbnJlcGVhdCIsCiAgICAgICAgb25SZXNldDogIm9ucmVzZXQiLAogICAgICAgIG9uUmVzaXplOiAib25yZXNpemUiLAogICAgICAgIG9uU2Nyb2xsOiAib25zY3JvbGwiLAogICAgICAgIG9uU2Vla2VkOiAib25zZWVrZWQiLAogICAgICAgIG9uU2Vla2luZzogIm9uc2Vla2luZyIsCiAgICAgICAgb25TZWxlY3Q6ICJvbnNlbGVjdCIsCiAgICAgICAgb25TaG93OiAib25zaG93IiwKICAgICAgICBvblN0YWxsZWQ6ICJvbnN0YWxsZWQiLAogICAgICAgIG9uU3RvcmFnZTogIm9uc3RvcmFnZSIsCiAgICAgICAgb25TdWJtaXQ6ICJvbnN1Ym1pdCIsCiAgICAgICAgb25TdXNwZW5kOiAib25zdXNwZW5kIiwKICAgICAgICBvblRpbWVVcGRhdGU6ICJvbnRpbWV1cGRhdGUiLAogICAgICAgIG9uVG9nZ2xlOiAib250b2dnbGUiLAogICAgICAgIG9uVW5sb2FkOiAib251bmxvYWQiLAogICAgICAgIG9uVm9sdW1lQ2hhbmdlOiAib252b2x1bWVjaGFuZ2UiLAogICAgICAgIG9uV2FpdGluZzogIm9ud2FpdGluZyIsCiAgICAgICAgb25ab29tOiAib256b29tIiwKICAgICAgICBvdmVybGluZVBvc2l0aW9uOiAib3ZlcmxpbmUtcG9zaXRpb24iLAogICAgICAgIG92ZXJsaW5lVGhpY2tuZXNzOiAib3ZlcmxpbmUtdGhpY2tuZXNzIiwKICAgICAgICBwYWludE9yZGVyOiAicGFpbnQtb3JkZXIiLAogICAgICAgIHBhbm9zZTE6ICJwYW5vc2UtMSIsCiAgICAgICAgcG9pbnRlckV2ZW50czogInBvaW50ZXItZXZlbnRzIiwKICAgICAgICByZWZlcnJlclBvbGljeTogInJlZmVycmVycG9saWN5IiwKICAgICAgICByZW5kZXJpbmdJbnRlbnQ6ICJyZW5kZXJpbmctaW50ZW50IiwKICAgICAgICBzaGFwZVJlbmRlcmluZzogInNoYXBlLXJlbmRlcmluZyIsCiAgICAgICAgc3RvcENvbG9yOiAic3RvcC1jb2xvciIsCiAgICAgICAgc3RvcE9wYWNpdHk6ICJzdG9wLW9wYWNpdHkiLAogICAgICAgIHN0cmlrZXRocm91Z2hQb3NpdGlvbjogInN0cmlrZXRocm91Z2gtcG9zaXRpb24iLAogICAgICAgIHN0cmlrZXRocm91Z2hUaGlja25lc3M6ICJzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyIsCiAgICAgICAgc3Ryb2tlRGFzaEFycmF5OiAic3Ryb2tlLWRhc2hhcnJheSIsCiAgICAgICAgc3Ryb2tlRGFzaE9mZnNldDogInN0cm9rZS1kYXNob2Zmc2V0IiwKICAgICAgICBzdHJva2VMaW5lQ2FwOiAic3Ryb2tlLWxpbmVjYXAiLAogICAgICAgIHN0cm9rZUxpbmVKb2luOiAic3Ryb2tlLWxpbmVqb2luIiwKICAgICAgICBzdHJva2VNaXRlckxpbWl0OiAic3Ryb2tlLW1pdGVybGltaXQiLAogICAgICAgIHN0cm9rZU9wYWNpdHk6ICJzdHJva2Utb3BhY2l0eSIsCiAgICAgICAgc3Ryb2tlV2lkdGg6ICJzdHJva2Utd2lkdGgiLAogICAgICAgIHRhYkluZGV4OiAidGFiaW5kZXgiLAogICAgICAgIHRleHRBbmNob3I6ICJ0ZXh0LWFuY2hvciIsCiAgICAgICAgdGV4dERlY29yYXRpb246ICJ0ZXh0LWRlY29yYXRpb24iLAogICAgICAgIHRleHRSZW5kZXJpbmc6ICJ0ZXh0LXJlbmRlcmluZyIsCiAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiAidHJhbnNmb3JtLW9yaWdpbiIsCiAgICAgICAgdHlwZU9mOiAidHlwZW9mIiwKICAgICAgICB1bmRlcmxpbmVQb3NpdGlvbjogInVuZGVybGluZS1wb3NpdGlvbiIsCiAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzOiAidW5kZXJsaW5lLXRoaWNrbmVzcyIsCiAgICAgICAgdW5pY29kZUJpZGk6ICJ1bmljb2RlLWJpZGkiLAogICAgICAgIHVuaWNvZGVSYW5nZTogInVuaWNvZGUtcmFuZ2UiLAogICAgICAgIHVuaXRzUGVyRW06ICJ1bml0cy1wZXItZW0iLAogICAgICAgIHZBbHBoYWJldGljOiAidi1hbHBoYWJldGljIiwKICAgICAgICB2SGFuZ2luZzogInYtaGFuZ2luZyIsCiAgICAgICAgdklkZW9ncmFwaGljOiAidi1pZGVvZ3JhcGhpYyIsCiAgICAgICAgdk1hdGhlbWF0aWNhbDogInYtbWF0aGVtYXRpY2FsIiwKICAgICAgICB2ZWN0b3JFZmZlY3Q6ICJ2ZWN0b3ItZWZmZWN0IiwKICAgICAgICB2ZXJ0QWR2WTogInZlcnQtYWR2LXkiLAogICAgICAgIHZlcnRPcmlnaW5YOiAidmVydC1vcmlnaW4teCIsCiAgICAgICAgdmVydE9yaWdpblk6ICJ2ZXJ0LW9yaWdpbi15IiwKICAgICAgICB3b3JkU3BhY2luZzogIndvcmQtc3BhY2luZyIsCiAgICAgICAgd3JpdGluZ01vZGU6ICJ3cml0aW5nLW1vZGUiLAogICAgICAgIHhIZWlnaHQ6ICJ4LWhlaWdodCIsCiAgICAgICAgLy8gVGhlc2Ugd2VyZSBjYW1lbGNhc2VkIGluIFRpbnkuIE5vdyBsb3dlcmNhc2VkIGluIFNWRyAyCiAgICAgICAgcGxheWJhY2tPcmRlcjogInBsYXliYWNrb3JkZXIiLAogICAgICAgIHRpbWVsaW5lQmVnaW46ICJ0aW1lbGluZWJlZ2luIgogICAgICB9LAogICAgICBwcm9wZXJ0aWVzOiB7CiAgICAgICAgYWJvdXQ6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICBhY2NlbnRIZWlnaHQ6IG51bWJlciwKICAgICAgICBhY2N1bXVsYXRlOiBudWxsLAogICAgICAgIGFkZGl0aXZlOiBudWxsLAogICAgICAgIGFsaWdubWVudEJhc2VsaW5lOiBudWxsLAogICAgICAgIGFscGhhYmV0aWM6IG51bWJlciwKICAgICAgICBhbXBsaXR1ZGU6IG51bWJlciwKICAgICAgICBhcmFiaWNGb3JtOiBudWxsLAogICAgICAgIGFzY2VudDogbnVtYmVyLAogICAgICAgIGF0dHJpYnV0ZU5hbWU6IG51bGwsCiAgICAgICAgYXR0cmlidXRlVHlwZTogbnVsbCwKICAgICAgICBhemltdXRoOiBudW1iZXIsCiAgICAgICAgYmFuZHdpZHRoOiBudWxsLAogICAgICAgIGJhc2VsaW5lU2hpZnQ6IG51bGwsCiAgICAgICAgYmFzZUZyZXF1ZW5jeTogbnVsbCwKICAgICAgICBiYXNlUHJvZmlsZTogbnVsbCwKICAgICAgICBiYm94OiBudWxsLAogICAgICAgIGJlZ2luOiBudWxsLAogICAgICAgIGJpYXM6IG51bWJlciwKICAgICAgICBieTogbnVsbCwKICAgICAgICBjYWxjTW9kZTogbnVsbCwKICAgICAgICBjYXBIZWlnaHQ6IG51bWJlciwKICAgICAgICBjbGFzc05hbWU6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGNsaXA6IG51bGwsCiAgICAgICAgY2xpcFBhdGg6IG51bGwsCiAgICAgICAgY2xpcFBhdGhVbml0czogbnVsbCwKICAgICAgICBjbGlwUnVsZTogbnVsbCwKICAgICAgICBjb2xvcjogbnVsbCwKICAgICAgICBjb2xvckludGVycG9sYXRpb246IG51bGwsCiAgICAgICAgY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczogbnVsbCwKICAgICAgICBjb2xvclByb2ZpbGU6IG51bGwsCiAgICAgICAgY29sb3JSZW5kZXJpbmc6IG51bGwsCiAgICAgICAgY29udGVudDogbnVsbCwKICAgICAgICBjb250ZW50U2NyaXB0VHlwZTogbnVsbCwKICAgICAgICBjb250ZW50U3R5bGVUeXBlOiBudWxsLAogICAgICAgIGNyb3NzT3JpZ2luOiBudWxsLAogICAgICAgIGN1cnNvcjogbnVsbCwKICAgICAgICBjeDogbnVsbCwKICAgICAgICBjeTogbnVsbCwKICAgICAgICBkOiBudWxsLAogICAgICAgIGRhdGFUeXBlOiBudWxsLAogICAgICAgIGRlZmF1bHRBY3Rpb246IG51bGwsCiAgICAgICAgZGVzY2VudDogbnVtYmVyLAogICAgICAgIGRpZmZ1c2VDb25zdGFudDogbnVtYmVyLAogICAgICAgIGRpcmVjdGlvbjogbnVsbCwKICAgICAgICBkaXNwbGF5OiBudWxsLAogICAgICAgIGR1cjogbnVsbCwKICAgICAgICBkaXZpc29yOiBudW1iZXIsCiAgICAgICAgZG9taW5hbnRCYXNlbGluZTogbnVsbCwKICAgICAgICBkb3dubG9hZDogYm9vbGVhbiwKICAgICAgICBkeDogbnVsbCwKICAgICAgICBkeTogbnVsbCwKICAgICAgICBlZGdlTW9kZTogbnVsbCwKICAgICAgICBlZGl0YWJsZTogbnVsbCwKICAgICAgICBlbGV2YXRpb246IG51bWJlciwKICAgICAgICBlbmFibGVCYWNrZ3JvdW5kOiBudWxsLAogICAgICAgIGVuZDogbnVsbCwKICAgICAgICBldmVudDogbnVsbCwKICAgICAgICBleHBvbmVudDogbnVtYmVyLAogICAgICAgIGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6IG51bGwsCiAgICAgICAgZmlsbDogbnVsbCwKICAgICAgICBmaWxsT3BhY2l0eTogbnVtYmVyLAogICAgICAgIGZpbGxSdWxlOiBudWxsLAogICAgICAgIGZpbHRlcjogbnVsbCwKICAgICAgICBmaWx0ZXJSZXM6IG51bGwsCiAgICAgICAgZmlsdGVyVW5pdHM6IG51bGwsCiAgICAgICAgZmxvb2RDb2xvcjogbnVsbCwKICAgICAgICBmbG9vZE9wYWNpdHk6IG51bGwsCiAgICAgICAgZm9jdXNhYmxlOiBudWxsLAogICAgICAgIGZvY3VzSGlnaGxpZ2h0OiBudWxsLAogICAgICAgIGZvbnRGYW1pbHk6IG51bGwsCiAgICAgICAgZm9udFNpemU6IG51bGwsCiAgICAgICAgZm9udFNpemVBZGp1c3Q6IG51bGwsCiAgICAgICAgZm9udFN0cmV0Y2g6IG51bGwsCiAgICAgICAgZm9udFN0eWxlOiBudWxsLAogICAgICAgIGZvbnRWYXJpYW50OiBudWxsLAogICAgICAgIGZvbnRXZWlnaHQ6IG51bGwsCiAgICAgICAgZm9ybWF0OiBudWxsLAogICAgICAgIGZyOiBudWxsLAogICAgICAgIGZyb206IG51bGwsCiAgICAgICAgZng6IG51bGwsCiAgICAgICAgZnk6IG51bGwsCiAgICAgICAgZzE6IGNvbW1hU2VwYXJhdGVkLAogICAgICAgIGcyOiBjb21tYVNlcGFyYXRlZCwKICAgICAgICBnbHlwaE5hbWU6IGNvbW1hU2VwYXJhdGVkLAogICAgICAgIGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOiBudWxsLAogICAgICAgIGdseXBoT3JpZW50YXRpb25WZXJ0aWNhbDogbnVsbCwKICAgICAgICBnbHlwaFJlZjogbnVsbCwKICAgICAgICBncmFkaWVudFRyYW5zZm9ybTogbnVsbCwKICAgICAgICBncmFkaWVudFVuaXRzOiBudWxsLAogICAgICAgIGhhbmRsZXI6IG51bGwsCiAgICAgICAgaGFuZ2luZzogbnVtYmVyLAogICAgICAgIGhhdGNoQ29udGVudFVuaXRzOiBudWxsLAogICAgICAgIGhhdGNoVW5pdHM6IG51bGwsCiAgICAgICAgaGVpZ2h0OiBudWxsLAogICAgICAgIGhyZWY6IG51bGwsCiAgICAgICAgaHJlZkxhbmc6IG51bGwsCiAgICAgICAgaG9yaXpBZHZYOiBudW1iZXIsCiAgICAgICAgaG9yaXpPcmlnaW5YOiBudW1iZXIsCiAgICAgICAgaG9yaXpPcmlnaW5ZOiBudW1iZXIsCiAgICAgICAgaWQ6IG51bGwsCiAgICAgICAgaWRlb2dyYXBoaWM6IG51bWJlciwKICAgICAgICBpbWFnZVJlbmRlcmluZzogbnVsbCwKICAgICAgICBpbml0aWFsVmlzaWJpbGl0eTogbnVsbCwKICAgICAgICBpbjogbnVsbCwKICAgICAgICBpbjI6IG51bGwsCiAgICAgICAgaW50ZXJjZXB0OiBudW1iZXIsCiAgICAgICAgazogbnVtYmVyLAogICAgICAgIGsxOiBudW1iZXIsCiAgICAgICAgazI6IG51bWJlciwKICAgICAgICBrMzogbnVtYmVyLAogICAgICAgIGs0OiBudW1iZXIsCiAgICAgICAga2VybmVsTWF0cml4OiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAga2VybmVsVW5pdExlbmd0aDogbnVsbCwKICAgICAgICBrZXlQb2ludHM6IG51bGwsCiAgICAgICAgLy8gU0VNSV9DT0xPTl9TRVBBUkFURUQKICAgICAgICBrZXlTcGxpbmVzOiBudWxsLAogICAgICAgIC8vIFNFTUlfQ09MT05fU0VQQVJBVEVECiAgICAgICAga2V5VGltZXM6IG51bGwsCiAgICAgICAgLy8gU0VNSV9DT0xPTl9TRVBBUkFURUQKICAgICAgICBrZXJuaW5nOiBudWxsLAogICAgICAgIGxhbmc6IG51bGwsCiAgICAgICAgbGVuZ3RoQWRqdXN0OiBudWxsLAogICAgICAgIGxldHRlclNwYWNpbmc6IG51bGwsCiAgICAgICAgbGlnaHRpbmdDb2xvcjogbnVsbCwKICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZTogbnVtYmVyLAogICAgICAgIGxvY2FsOiBudWxsLAogICAgICAgIG1hcmtlckVuZDogbnVsbCwKICAgICAgICBtYXJrZXJNaWQ6IG51bGwsCiAgICAgICAgbWFya2VyU3RhcnQ6IG51bGwsCiAgICAgICAgbWFya2VySGVpZ2h0OiBudWxsLAogICAgICAgIG1hcmtlclVuaXRzOiBudWxsLAogICAgICAgIG1hcmtlcldpZHRoOiBudWxsLAogICAgICAgIG1hc2s6IG51bGwsCiAgICAgICAgbWFza0NvbnRlbnRVbml0czogbnVsbCwKICAgICAgICBtYXNrVW5pdHM6IG51bGwsCiAgICAgICAgbWF0aGVtYXRpY2FsOiBudWxsLAogICAgICAgIG1heDogbnVsbCwKICAgICAgICBtZWRpYTogbnVsbCwKICAgICAgICBtZWRpYUNoYXJhY3RlckVuY29kaW5nOiBudWxsLAogICAgICAgIG1lZGlhQ29udGVudEVuY29kaW5nczogbnVsbCwKICAgICAgICBtZWRpYVNpemU6IG51bWJlciwKICAgICAgICBtZWRpYVRpbWU6IG51bGwsCiAgICAgICAgbWV0aG9kOiBudWxsLAogICAgICAgIG1pbjogbnVsbCwKICAgICAgICBtb2RlOiBudWxsLAogICAgICAgIG5hbWU6IG51bGwsCiAgICAgICAgbmF2RG93bjogbnVsbCwKICAgICAgICBuYXZEb3duTGVmdDogbnVsbCwKICAgICAgICBuYXZEb3duUmlnaHQ6IG51bGwsCiAgICAgICAgbmF2TGVmdDogbnVsbCwKICAgICAgICBuYXZOZXh0OiBudWxsLAogICAgICAgIG5hdlByZXY6IG51bGwsCiAgICAgICAgbmF2UmlnaHQ6IG51bGwsCiAgICAgICAgbmF2VXA6IG51bGwsCiAgICAgICAgbmF2VXBMZWZ0OiBudWxsLAogICAgICAgIG5hdlVwUmlnaHQ6IG51bGwsCiAgICAgICAgbnVtT2N0YXZlczogbnVsbCwKICAgICAgICBvYnNlcnZlcjogbnVsbCwKICAgICAgICBvZmZzZXQ6IG51bGwsCiAgICAgICAgb25BYm9ydDogbnVsbCwKICAgICAgICBvbkFjdGl2YXRlOiBudWxsLAogICAgICAgIG9uQWZ0ZXJQcmludDogbnVsbCwKICAgICAgICBvbkJlZm9yZVByaW50OiBudWxsLAogICAgICAgIG9uQmVnaW46IG51bGwsCiAgICAgICAgb25DYW5jZWw6IG51bGwsCiAgICAgICAgb25DYW5QbGF5OiBudWxsLAogICAgICAgIG9uQ2FuUGxheVRocm91Z2g6IG51bGwsCiAgICAgICAgb25DaGFuZ2U6IG51bGwsCiAgICAgICAgb25DbGljazogbnVsbCwKICAgICAgICBvbkNsb3NlOiBudWxsLAogICAgICAgIG9uQ29weTogbnVsbCwKICAgICAgICBvbkN1ZUNoYW5nZTogbnVsbCwKICAgICAgICBvbkN1dDogbnVsbCwKICAgICAgICBvbkRibENsaWNrOiBudWxsLAogICAgICAgIG9uRHJhZzogbnVsbCwKICAgICAgICBvbkRyYWdFbmQ6IG51bGwsCiAgICAgICAgb25EcmFnRW50ZXI6IG51bGwsCiAgICAgICAgb25EcmFnRXhpdDogbnVsbCwKICAgICAgICBvbkRyYWdMZWF2ZTogbnVsbCwKICAgICAgICBvbkRyYWdPdmVyOiBudWxsLAogICAgICAgIG9uRHJhZ1N0YXJ0OiBudWxsLAogICAgICAgIG9uRHJvcDogbnVsbCwKICAgICAgICBvbkR1cmF0aW9uQ2hhbmdlOiBudWxsLAogICAgICAgIG9uRW1wdGllZDogbnVsbCwKICAgICAgICBvbkVuZDogbnVsbCwKICAgICAgICBvbkVuZGVkOiBudWxsLAogICAgICAgIG9uRXJyb3I6IG51bGwsCiAgICAgICAgb25Gb2N1czogbnVsbCwKICAgICAgICBvbkZvY3VzSW46IG51bGwsCiAgICAgICAgb25Gb2N1c091dDogbnVsbCwKICAgICAgICBvbkhhc2hDaGFuZ2U6IG51bGwsCiAgICAgICAgb25JbnB1dDogbnVsbCwKICAgICAgICBvbkludmFsaWQ6IG51bGwsCiAgICAgICAgb25LZXlEb3duOiBudWxsLAogICAgICAgIG9uS2V5UHJlc3M6IG51bGwsCiAgICAgICAgb25LZXlVcDogbnVsbCwKICAgICAgICBvbkxvYWQ6IG51bGwsCiAgICAgICAgb25Mb2FkZWREYXRhOiBudWxsLAogICAgICAgIG9uTG9hZGVkTWV0YWRhdGE6IG51bGwsCiAgICAgICAgb25Mb2FkU3RhcnQ6IG51bGwsCiAgICAgICAgb25NZXNzYWdlOiBudWxsLAogICAgICAgIG9uTW91c2VEb3duOiBudWxsLAogICAgICAgIG9uTW91c2VFbnRlcjogbnVsbCwKICAgICAgICBvbk1vdXNlTGVhdmU6IG51bGwsCiAgICAgICAgb25Nb3VzZU1vdmU6IG51bGwsCiAgICAgICAgb25Nb3VzZU91dDogbnVsbCwKICAgICAgICBvbk1vdXNlT3ZlcjogbnVsbCwKICAgICAgICBvbk1vdXNlVXA6IG51bGwsCiAgICAgICAgb25Nb3VzZVdoZWVsOiBudWxsLAogICAgICAgIG9uT2ZmbGluZTogbnVsbCwKICAgICAgICBvbk9ubGluZTogbnVsbCwKICAgICAgICBvblBhZ2VIaWRlOiBudWxsLAogICAgICAgIG9uUGFnZVNob3c6IG51bGwsCiAgICAgICAgb25QYXN0ZTogbnVsbCwKICAgICAgICBvblBhdXNlOiBudWxsLAogICAgICAgIG9uUGxheTogbnVsbCwKICAgICAgICBvblBsYXlpbmc6IG51bGwsCiAgICAgICAgb25Qb3BTdGF0ZTogbnVsbCwKICAgICAgICBvblByb2dyZXNzOiBudWxsLAogICAgICAgIG9uUmF0ZUNoYW5nZTogbnVsbCwKICAgICAgICBvblJlcGVhdDogbnVsbCwKICAgICAgICBvblJlc2V0OiBudWxsLAogICAgICAgIG9uUmVzaXplOiBudWxsLAogICAgICAgIG9uU2Nyb2xsOiBudWxsLAogICAgICAgIG9uU2Vla2VkOiBudWxsLAogICAgICAgIG9uU2Vla2luZzogbnVsbCwKICAgICAgICBvblNlbGVjdDogbnVsbCwKICAgICAgICBvblNob3c6IG51bGwsCiAgICAgICAgb25TdGFsbGVkOiBudWxsLAogICAgICAgIG9uU3RvcmFnZTogbnVsbCwKICAgICAgICBvblN1Ym1pdDogbnVsbCwKICAgICAgICBvblN1c3BlbmQ6IG51bGwsCiAgICAgICAgb25UaW1lVXBkYXRlOiBudWxsLAogICAgICAgIG9uVG9nZ2xlOiBudWxsLAogICAgICAgIG9uVW5sb2FkOiBudWxsLAogICAgICAgIG9uVm9sdW1lQ2hhbmdlOiBudWxsLAogICAgICAgIG9uV2FpdGluZzogbnVsbCwKICAgICAgICBvblpvb206IG51bGwsCiAgICAgICAgb3BhY2l0eTogbnVsbCwKICAgICAgICBvcGVyYXRvcjogbnVsbCwKICAgICAgICBvcmRlcjogbnVsbCwKICAgICAgICBvcmllbnQ6IG51bGwsCiAgICAgICAgb3JpZW50YXRpb246IG51bGwsCiAgICAgICAgb3JpZ2luOiBudWxsLAogICAgICAgIG92ZXJmbG93OiBudWxsLAogICAgICAgIG92ZXJsYXk6IG51bGwsCiAgICAgICAgb3ZlcmxpbmVQb3NpdGlvbjogbnVtYmVyLAogICAgICAgIG92ZXJsaW5lVGhpY2tuZXNzOiBudW1iZXIsCiAgICAgICAgcGFpbnRPcmRlcjogbnVsbCwKICAgICAgICBwYW5vc2UxOiBudWxsLAogICAgICAgIHBhdGg6IG51bGwsCiAgICAgICAgcGF0aExlbmd0aDogbnVtYmVyLAogICAgICAgIHBhdHRlcm5Db250ZW50VW5pdHM6IG51bGwsCiAgICAgICAgcGF0dGVyblRyYW5zZm9ybTogbnVsbCwKICAgICAgICBwYXR0ZXJuVW5pdHM6IG51bGwsCiAgICAgICAgcGhhc2U6IG51bGwsCiAgICAgICAgcGluZzogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgcGl0Y2g6IG51bGwsCiAgICAgICAgcGxheWJhY2tPcmRlcjogbnVsbCwKICAgICAgICBwb2ludGVyRXZlbnRzOiBudWxsLAogICAgICAgIHBvaW50czogbnVsbCwKICAgICAgICBwb2ludHNBdFg6IG51bWJlciwKICAgICAgICBwb2ludHNBdFk6IG51bWJlciwKICAgICAgICBwb2ludHNBdFo6IG51bWJlciwKICAgICAgICBwcmVzZXJ2ZUFscGhhOiBudWxsLAogICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW86IG51bGwsCiAgICAgICAgcHJpbWl0aXZlVW5pdHM6IG51bGwsCiAgICAgICAgcHJvcGFnYXRlOiBudWxsLAogICAgICAgIHByb3BlcnR5OiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgcjogbnVsbCwKICAgICAgICByYWRpdXM6IG51bGwsCiAgICAgICAgcmVmZXJyZXJQb2xpY3k6IG51bGwsCiAgICAgICAgcmVmWDogbnVsbCwKICAgICAgICByZWZZOiBudWxsLAogICAgICAgIHJlbDogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIHJldjogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIHJlbmRlcmluZ0ludGVudDogbnVsbCwKICAgICAgICByZXBlYXRDb3VudDogbnVsbCwKICAgICAgICByZXBlYXREdXI6IG51bGwsCiAgICAgICAgcmVxdWlyZWRFeHRlbnNpb25zOiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgcmVxdWlyZWRGZWF0dXJlczogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIHJlcXVpcmVkRm9udHM6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICByZXF1aXJlZEZvcm1hdHM6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICByZXNvdXJjZTogbnVsbCwKICAgICAgICByZXN0YXJ0OiBudWxsLAogICAgICAgIHJlc3VsdDogbnVsbCwKICAgICAgICByb3RhdGU6IG51bGwsCiAgICAgICAgcng6IG51bGwsCiAgICAgICAgcnk6IG51bGwsCiAgICAgICAgc2NhbGU6IG51bGwsCiAgICAgICAgc2VlZDogbnVsbCwKICAgICAgICBzaGFwZVJlbmRlcmluZzogbnVsbCwKICAgICAgICBzaWRlOiBudWxsLAogICAgICAgIHNsb3BlOiBudWxsLAogICAgICAgIHNuYXBzaG90VGltZTogbnVsbCwKICAgICAgICBzcGVjdWxhckNvbnN0YW50OiBudW1iZXIsCiAgICAgICAgc3BlY3VsYXJFeHBvbmVudDogbnVtYmVyLAogICAgICAgIHNwcmVhZE1ldGhvZDogbnVsbCwKICAgICAgICBzcGFjaW5nOiBudWxsLAogICAgICAgIHN0YXJ0T2Zmc2V0OiBudWxsLAogICAgICAgIHN0ZERldmlhdGlvbjogbnVsbCwKICAgICAgICBzdGVtaDogbnVsbCwKICAgICAgICBzdGVtdjogbnVsbCwKICAgICAgICBzdGl0Y2hUaWxlczogbnVsbCwKICAgICAgICBzdG9wQ29sb3I6IG51bGwsCiAgICAgICAgc3RvcE9wYWNpdHk6IG51bGwsCiAgICAgICAgc3RyaWtldGhyb3VnaFBvc2l0aW9uOiBudW1iZXIsCiAgICAgICAgc3RyaWtldGhyb3VnaFRoaWNrbmVzczogbnVtYmVyLAogICAgICAgIHN0cmluZzogbnVsbCwKICAgICAgICBzdHJva2U6IG51bGwsCiAgICAgICAgc3Ryb2tlRGFzaEFycmF5OiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgc3Ryb2tlRGFzaE9mZnNldDogbnVsbCwKICAgICAgICBzdHJva2VMaW5lQ2FwOiBudWxsLAogICAgICAgIHN0cm9rZUxpbmVKb2luOiBudWxsLAogICAgICAgIHN0cm9rZU1pdGVyTGltaXQ6IG51bWJlciwKICAgICAgICBzdHJva2VPcGFjaXR5OiBudW1iZXIsCiAgICAgICAgc3Ryb2tlV2lkdGg6IG51bGwsCiAgICAgICAgc3R5bGU6IG51bGwsCiAgICAgICAgc3VyZmFjZVNjYWxlOiBudW1iZXIsCiAgICAgICAgc3luY0JlaGF2aW9yOiBudWxsLAogICAgICAgIHN5bmNCZWhhdmlvckRlZmF1bHQ6IG51bGwsCiAgICAgICAgc3luY01hc3RlcjogbnVsbCwKICAgICAgICBzeW5jVG9sZXJhbmNlOiBudWxsLAogICAgICAgIHN5bmNUb2xlcmFuY2VEZWZhdWx0OiBudWxsLAogICAgICAgIHN5c3RlbUxhbmd1YWdlOiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgdGFiSW5kZXg6IG51bWJlciwKICAgICAgICB0YWJsZVZhbHVlczogbnVsbCwKICAgICAgICB0YXJnZXQ6IG51bGwsCiAgICAgICAgdGFyZ2V0WDogbnVtYmVyLAogICAgICAgIHRhcmdldFk6IG51bWJlciwKICAgICAgICB0ZXh0QW5jaG9yOiBudWxsLAogICAgICAgIHRleHREZWNvcmF0aW9uOiBudWxsLAogICAgICAgIHRleHRSZW5kZXJpbmc6IG51bGwsCiAgICAgICAgdGV4dExlbmd0aDogbnVsbCwKICAgICAgICB0aW1lbGluZUJlZ2luOiBudWxsLAogICAgICAgIHRpdGxlOiBudWxsLAogICAgICAgIHRyYW5zZm9ybUJlaGF2aW9yOiBudWxsLAogICAgICAgIHR5cGU6IG51bGwsCiAgICAgICAgdHlwZU9mOiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgdG86IG51bGwsCiAgICAgICAgdHJhbnNmb3JtOiBudWxsLAogICAgICAgIHRyYW5zZm9ybU9yaWdpbjogbnVsbCwKICAgICAgICB1MTogbnVsbCwKICAgICAgICB1MjogbnVsbCwKICAgICAgICB1bmRlcmxpbmVQb3NpdGlvbjogbnVtYmVyLAogICAgICAgIHVuZGVybGluZVRoaWNrbmVzczogbnVtYmVyLAogICAgICAgIHVuaWNvZGU6IG51bGwsCiAgICAgICAgdW5pY29kZUJpZGk6IG51bGwsCiAgICAgICAgdW5pY29kZVJhbmdlOiBudWxsLAogICAgICAgIHVuaXRzUGVyRW06IG51bWJlciwKICAgICAgICB2YWx1ZXM6IG51bGwsCiAgICAgICAgdkFscGhhYmV0aWM6IG51bWJlciwKICAgICAgICB2TWF0aGVtYXRpY2FsOiBudW1iZXIsCiAgICAgICAgdmVjdG9yRWZmZWN0OiBudWxsLAogICAgICAgIHZIYW5naW5nOiBudW1iZXIsCiAgICAgICAgdklkZW9ncmFwaGljOiBudW1iZXIsCiAgICAgICAgdmVyc2lvbjogbnVsbCwKICAgICAgICB2ZXJ0QWR2WTogbnVtYmVyLAogICAgICAgIHZlcnRPcmlnaW5YOiBudW1iZXIsCiAgICAgICAgdmVydE9yaWdpblk6IG51bWJlciwKICAgICAgICB2aWV3Qm94OiBudWxsLAogICAgICAgIHZpZXdUYXJnZXQ6IG51bGwsCiAgICAgICAgdmlzaWJpbGl0eTogbnVsbCwKICAgICAgICB3aWR0aDogbnVsbCwKICAgICAgICB3aWR0aHM6IG51bGwsCiAgICAgICAgd29yZFNwYWNpbmc6IG51bGwsCiAgICAgICAgd3JpdGluZ01vZGU6IG51bGwsCiAgICAgICAgeDogbnVsbCwKICAgICAgICB4MTogbnVsbCwKICAgICAgICB4MjogbnVsbCwKICAgICAgICB4Q2hhbm5lbFNlbGVjdG9yOiBudWxsLAogICAgICAgIHhIZWlnaHQ6IG51bWJlciwKICAgICAgICB5OiBudWxsLAogICAgICAgIHkxOiBudWxsLAogICAgICAgIHkyOiBudWxsLAogICAgICAgIHlDaGFubmVsU2VsZWN0b3I6IG51bGwsCiAgICAgICAgejogbnVsbCwKICAgICAgICB6b29tQW5kUGFuOiBudWxsCiAgICAgIH0sCiAgICAgIHNwYWNlOiAic3ZnIiwKICAgICAgdHJhbnNmb3JtOiBjYXNlU2Vuc2l0aXZlVHJhbnNmb3JtCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIveGxpbmsuanMKdmFyIHhsaW5rOwp2YXIgaW5pdF94bGluayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIveGxpbmsuanMiKCkgewogICAgaW5pdF9jcmVhdGUoKTsKICAgIHhsaW5rID0gY3JlYXRlNih7CiAgICAgIHByb3BlcnRpZXM6IHsKICAgICAgICB4TGlua0FjdHVhdGU6IG51bGwsCiAgICAgICAgeExpbmtBcmNSb2xlOiBudWxsLAogICAgICAgIHhMaW5rSHJlZjogbnVsbCwKICAgICAgICB4TGlua1JvbGU6IG51bGwsCiAgICAgICAgeExpbmtTaG93OiBudWxsLAogICAgICAgIHhMaW5rVGl0bGU6IG51bGwsCiAgICAgICAgeExpbmtUeXBlOiBudWxsCiAgICAgIH0sCiAgICAgIHNwYWNlOiAieGxpbmsiLAogICAgICB0cmFuc2Zvcm0oXzQsIHByb3BlcnR5MTMpIHsKICAgICAgICByZXR1cm4gInhsaW5rOiIgKyBwcm9wZXJ0eTEzLnNsaWNlKDUpLnRvTG93ZXJDYXNlKCk7CiAgICAgIH0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi94bWxucy5qcwp2YXIgeG1sbnM7CnZhciBpbml0X3htbG5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi94bWxucy5qcyIoKSB7CiAgICBpbml0X2NyZWF0ZSgpOwogICAgaW5pdF9jYXNlX2luc2Vuc2l0aXZlX3RyYW5zZm9ybSgpOwogICAgeG1sbnMgPSBjcmVhdGU2KHsKICAgICAgYXR0cmlidXRlczogeyB4bWxuc3hsaW5rOiAieG1sbnM6eGxpbmsiIH0sCiAgICAgIHByb3BlcnRpZXM6IHsgeG1sbnNYTGluazogbnVsbCwgeG1sbnM6IG51bGwgfSwKICAgICAgc3BhY2U6ICJ4bWxucyIsCiAgICAgIHRyYW5zZm9ybTogY2FzZUluc2Vuc2l0aXZlVHJhbnNmb3JtCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIveG1sLmpzCnZhciB4bWw7CnZhciBpbml0X3htbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIveG1sLmpzIigpIHsKICAgIGluaXRfY3JlYXRlKCk7CiAgICB4bWwgPSBjcmVhdGU2KHsKICAgICAgcHJvcGVydGllczogeyB4bWxCYXNlOiBudWxsLCB4bWxMYW5nOiBudWxsLCB4bWxTcGFjZTogbnVsbCB9LAogICAgICBzcGFjZTogInhtbCIsCiAgICAgIHRyYW5zZm9ybShfNCwgcHJvcGVydHkxMykgewogICAgICAgIHJldHVybiAieG1sOiIgKyBwcm9wZXJ0eTEzLnNsaWNlKDMpLnRvTG93ZXJDYXNlKCk7CiAgICAgIH0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9oYXN0LXRvLXJlYWN0LmpzCnZhciBpbml0X2hhc3RfdG9fcmVhY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2hhc3QtdG8tcmVhY3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9maW5kLmpzCmZ1bmN0aW9uIGZpbmQyKHNjaGVtYSwgdmFsdWUyKSB7CiAgY29uc3Qgbm9ybWFsID0gbm9ybWFsaXplMyh2YWx1ZTIpOwogIGxldCBwcm9wZXJ0eTEzID0gdmFsdWUyOwogIGxldCBUeXBlID0gSW5mbzsKICBpZiAobm9ybWFsIGluIHNjaGVtYS5ub3JtYWwpIHsKICAgIHJldHVybiBzY2hlbWEucHJvcGVydHlbc2NoZW1hLm5vcm1hbFtub3JtYWxdXTsKICB9CiAgaWYgKG5vcm1hbC5sZW5ndGggPiA0ICYmIG5vcm1hbC5zbGljZSgwLCA0KSA9PT0gImRhdGEiICYmIHZhbGlkLnRlc3QodmFsdWUyKSkgewogICAgaWYgKHZhbHVlMi5jaGFyQXQoNCkgPT09ICItIikgewogICAgICBjb25zdCByZXN0ID0gdmFsdWUyLnNsaWNlKDUpLnJlcGxhY2UoZGFzaCwgY2FtZWxjYXNlKTsKICAgICAgcHJvcGVydHkxMyA9ICJkYXRhIiArIHJlc3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByZXN0LnNsaWNlKDEpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgcmVzdCA9IHZhbHVlMi5zbGljZSg0KTsKICAgICAgaWYgKCFkYXNoLnRlc3QocmVzdCkpIHsKICAgICAgICBsZXQgZGFzaGVzID0gcmVzdC5yZXBsYWNlKGNhcCwga2ViYWIpOwogICAgICAgIGlmIChkYXNoZXMuY2hhckF0KDApICE9PSAiLSIpIHsKICAgICAgICAgIGRhc2hlcyA9ICItIiArIGRhc2hlczsKICAgICAgICB9CiAgICAgICAgdmFsdWUyID0gImRhdGEiICsgZGFzaGVzOwogICAgICB9CiAgICB9CiAgICBUeXBlID0gRGVmaW5lZEluZm87CiAgfQogIHJldHVybiBuZXcgVHlwZShwcm9wZXJ0eTEzLCB2YWx1ZTIpOwp9CmZ1bmN0aW9uIGtlYmFiKCQwKSB7CiAgcmV0dXJuICItIiArICQwLnRvTG93ZXJDYXNlKCk7Cn0KZnVuY3Rpb24gY2FtZWxjYXNlKCQwKSB7CiAgcmV0dXJuICQwLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpOwp9CnZhciBjYXAsIGRhc2gsIHZhbGlkOwp2YXIgaW5pdF9maW5kMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvZmluZC5qcyIoKSB7CiAgICBpbml0X2RlZmluZWRfaW5mbygpOwogICAgaW5pdF9pbmZvKCk7CiAgICBpbml0X25vcm1hbGl6ZSgpOwogICAgY2FwID0gL1tBLVpdL2c7CiAgICBkYXNoID0gLy1bYS16XS9nOwogICAgdmFsaWQgPSAvXmRhdGFbLVx3LjpdKyQvaTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9pbmRleC5qcwp2YXIgaHRtbDQsIHN2ZzI7CnZhciBpbml0X3Byb3BlcnR5X2luZm9ybWF0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWVyZ2UzKCk7CiAgICBpbml0X2FyaWEoKTsKICAgIGluaXRfaHRtbDkoKTsKICAgIGluaXRfc3ZnKCk7CiAgICBpbml0X3hsaW5rKCk7CiAgICBpbml0X3htbG5zKCk7CiAgICBpbml0X3htbCgpOwogICAgaW5pdF9oYXN0X3RvX3JlYWN0KCk7CiAgICBpbml0X2ZpbmQyKCk7CiAgICBpbml0X25vcm1hbGl6ZSgpOwogICAgaHRtbDQgPSBtZXJnZTMoW2FyaWEyLCBodG1sMywgeGxpbmssIHhtbG5zLCB4bWxdLCAiaHRtbCIpOwogICAgc3ZnMiA9IG1lcmdlMyhbYXJpYTIsIHN2ZywgeGxpbmssIHhtbG5zLCB4bWxdLCAic3ZnIik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvY29yZS5qcwpmdW5jdGlvbiBjb3JlKHZhbHVlMiwgb3B0aW9ucykgewogIHZhbHVlMiA9IHZhbHVlMi5yZXBsYWNlKAogICAgb3B0aW9ucy5zdWJzZXQgPyBjaGFyYWN0ZXJzVG9FeHByZXNzaW9uQ2FjaGVkKG9wdGlvbnMuc3Vic2V0KSA6IGRlZmF1bHRTdWJzZXRSZWdleCwKICAgIGJhc2ljCiAgKTsKICBpZiAob3B0aW9ucy5zdWJzZXQgfHwgb3B0aW9ucy5lc2NhcGVPbmx5KSB7CiAgICByZXR1cm4gdmFsdWUyOwogIH0KICByZXR1cm4gdmFsdWUyLnJlcGxhY2Uoc3Vycm9nYXRlUGFpcnNSZWdleCwgc3Vycm9nYXRlKS5yZXBsYWNlKGNvbnRyb2xDaGFyYWN0ZXJzUmVnZXgsIGJhc2ljKTsKICBmdW5jdGlvbiBzdXJyb2dhdGUocGFpciwgaW5kZXgyLCBhbGwzKSB7CiAgICByZXR1cm4gb3B0aW9ucy5mb3JtYXQoCiAgICAgIChwYWlyLmNoYXJDb2RlQXQoMCkgLSA1NTI5NikgKiAxMDI0ICsgcGFpci5jaGFyQ29kZUF0KDEpIC0gNTYzMjAgKyA2NTUzNiwKICAgICAgYWxsMy5jaGFyQ29kZUF0KGluZGV4MiArIDIpLAogICAgICBvcHRpb25zCiAgICApOwogIH0KICBmdW5jdGlvbiBiYXNpYyhjaGFyYWN0ZXIsIGluZGV4MiwgYWxsMykgewogICAgcmV0dXJuIG9wdGlvbnMuZm9ybWF0KAogICAgICBjaGFyYWN0ZXIuY2hhckNvZGVBdCgwKSwKICAgICAgYWxsMy5jaGFyQ29kZUF0KGluZGV4MiArIDEpLAogICAgICBvcHRpb25zCiAgICApOwogIH0KfQpmdW5jdGlvbiBjaGFyYWN0ZXJzVG9FeHByZXNzaW9uQ2FjaGVkKHN1YnNldCkgewogIGxldCBjYWNoZWQgPSBzdWJzZXRUb1JlZ2V4Q2FjaGUuZ2V0KHN1YnNldCk7CiAgaWYgKCFjYWNoZWQpIHsKICAgIGNhY2hlZCA9IGNoYXJhY3RlcnNUb0V4cHJlc3Npb24oc3Vic2V0KTsKICAgIHN1YnNldFRvUmVnZXhDYWNoZS5zZXQoc3Vic2V0LCBjYWNoZWQpOwogIH0KICByZXR1cm4gY2FjaGVkOwp9CmZ1bmN0aW9uIGNoYXJhY3RlcnNUb0V4cHJlc3Npb24oc3Vic2V0KSB7CiAgY29uc3QgZ3JvdXBzID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHN1YnNldC5sZW5ndGgpIHsKICAgIGdyb3Vwcy5wdXNoKHN1YnNldFtpbmRleDJdLnJlcGxhY2UocmVnZXhFc2NhcGVSZWdleCwgIlxcJCYiKSk7CiAgfQogIHJldHVybiBuZXcgUmVnRXhwKCIoPzoiICsgZ3JvdXBzLmpvaW4oInwiKSArICIpIiwgImciKTsKfQp2YXIgZGVmYXVsdFN1YnNldFJlZ2V4LCBzdXJyb2dhdGVQYWlyc1JlZ2V4LCBjb250cm9sQ2hhcmFjdGVyc1JlZ2V4LCByZWdleEVzY2FwZVJlZ2V4LCBzdWJzZXRUb1JlZ2V4Q2FjaGU7CnZhciBpbml0X2NvcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvY29yZS5qcyIoKSB7CiAgICBkZWZhdWx0U3Vic2V0UmVnZXggPSAvWyImJzw+YF0vZzsKICAgIHN1cnJvZ2F0ZVBhaXJzUmVnZXggPSAvW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2c7CiAgICBjb250cm9sQ2hhcmFjdGVyc1JlZ2V4ID0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXgsIHVuaWNvcm4vbm8taGV4LWVzY2FwZQogICAgL1tceDAxLVx0XHZcZlx4MEUtXHgxRlx4N0ZceDgxXHg4RFx4OEZceDkwXHg5RFx4QTAtXHVGRkZGXS9nOwogICAgcmVnZXhFc2NhcGVSZWdleCA9IC9bfFxce30oKVtcXV4kKyo/Ll0vZzsKICAgIHN1YnNldFRvUmVnZXhDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvdG8taGV4YWRlY2ltYWwuanMKZnVuY3Rpb24gdG9IZXhhZGVjaW1hbChjb2RlNCwgbmV4dDIsIG9taXQpIHsKICBjb25zdCB2YWx1ZTIgPSAiJiN4IiArIGNvZGU0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOwogIHJldHVybiBvbWl0ICYmIG5leHQyICYmICFoZXhhZGVjaW1hbFJlZ2V4LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShuZXh0MikpID8gdmFsdWUyIDogdmFsdWUyICsgIjsiOwp9CnZhciBoZXhhZGVjaW1hbFJlZ2V4Owp2YXIgaW5pdF90b19oZXhhZGVjaW1hbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL3RvLWhleGFkZWNpbWFsLmpzIigpIHsKICAgIGhleGFkZWNpbWFsUmVnZXggPSAvW1xkQS1GYS1mXS87CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvdXRpbC90by1kZWNpbWFsLmpzCmZ1bmN0aW9uIHRvRGVjaW1hbChjb2RlNCwgbmV4dDIsIG9taXQpIHsKICBjb25zdCB2YWx1ZTIgPSAiJiMiICsgU3RyaW5nKGNvZGU0KTsKICByZXR1cm4gb21pdCAmJiBuZXh0MiAmJiAhZGVjaW1hbFJlZ2V4LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShuZXh0MikpID8gdmFsdWUyIDogdmFsdWUyICsgIjsiOwp9CnZhciBkZWNpbWFsUmVnZXg7CnZhciBpbml0X3RvX2RlY2ltYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvdXRpbC90by1kZWNpbWFsLmpzIigpIHsKICAgIGRlY2ltYWxSZWdleCA9IC9cZC87CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9jaGFyYWN0ZXItZW50aXRpZXMtbGVnYWN5QDMuMC4wL25vZGVfbW9kdWxlcy9jaGFyYWN0ZXItZW50aXRpZXMtbGVnYWN5L2luZGV4LmpzCnZhciBjaGFyYWN0ZXJFbnRpdGllc0xlZ2FjeTsKdmFyIGluaXRfY2hhcmFjdGVyX2VudGl0aWVzX2xlZ2FjeSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJhY3Rlci1lbnRpdGllcy1sZWdhY3lAMy4wLjAvbm9kZV9tb2R1bGVzL2NoYXJhY3Rlci1lbnRpdGllcy1sZWdhY3kvaW5kZXguanMiKCkgewogICAgY2hhcmFjdGVyRW50aXRpZXNMZWdhY3kgPSBbCiAgICAgICJBRWxpZyIsCiAgICAgICJBTVAiLAogICAgICAiQWFjdXRlIiwKICAgICAgIkFjaXJjIiwKICAgICAgIkFncmF2ZSIsCiAgICAgICJBcmluZyIsCiAgICAgICJBdGlsZGUiLAogICAgICAiQXVtbCIsCiAgICAgICJDT1BZIiwKICAgICAgIkNjZWRpbCIsCiAgICAgICJFVEgiLAogICAgICAiRWFjdXRlIiwKICAgICAgIkVjaXJjIiwKICAgICAgIkVncmF2ZSIsCiAgICAgICJFdW1sIiwKICAgICAgIkdUIiwKICAgICAgIklhY3V0ZSIsCiAgICAgICJJY2lyYyIsCiAgICAgICJJZ3JhdmUiLAogICAgICAiSXVtbCIsCiAgICAgICJMVCIsCiAgICAgICJOdGlsZGUiLAogICAgICAiT2FjdXRlIiwKICAgICAgIk9jaXJjIiwKICAgICAgIk9ncmF2ZSIsCiAgICAgICJPc2xhc2giLAogICAgICAiT3RpbGRlIiwKICAgICAgIk91bWwiLAogICAgICAiUVVPVCIsCiAgICAgICJSRUciLAogICAgICAiVEhPUk4iLAogICAgICAiVWFjdXRlIiwKICAgICAgIlVjaXJjIiwKICAgICAgIlVncmF2ZSIsCiAgICAgICJVdW1sIiwKICAgICAgIllhY3V0ZSIsCiAgICAgICJhYWN1dGUiLAogICAgICAiYWNpcmMiLAogICAgICAiYWN1dGUiLAogICAgICAiYWVsaWciLAogICAgICAiYWdyYXZlIiwKICAgICAgImFtcCIsCiAgICAgICJhcmluZyIsCiAgICAgICJhdGlsZGUiLAogICAgICAiYXVtbCIsCiAgICAgICJicnZiYXIiLAogICAgICAiY2NlZGlsIiwKICAgICAgImNlZGlsIiwKICAgICAgImNlbnQiLAogICAgICAiY29weSIsCiAgICAgICJjdXJyZW4iLAogICAgICAiZGVnIiwKICAgICAgImRpdmlkZSIsCiAgICAgICJlYWN1dGUiLAogICAgICAiZWNpcmMiLAogICAgICAiZWdyYXZlIiwKICAgICAgImV0aCIsCiAgICAgICJldW1sIiwKICAgICAgImZyYWMxMiIsCiAgICAgICJmcmFjMTQiLAogICAgICAiZnJhYzM0IiwKICAgICAgImd0IiwKICAgICAgImlhY3V0ZSIsCiAgICAgICJpY2lyYyIsCiAgICAgICJpZXhjbCIsCiAgICAgICJpZ3JhdmUiLAogICAgICAiaXF1ZXN0IiwKICAgICAgIml1bWwiLAogICAgICAibGFxdW8iLAogICAgICAibHQiLAogICAgICAibWFjciIsCiAgICAgICJtaWNybyIsCiAgICAgICJtaWRkb3QiLAogICAgICAibmJzcCIsCiAgICAgICJub3QiLAogICAgICAibnRpbGRlIiwKICAgICAgIm9hY3V0ZSIsCiAgICAgICJvY2lyYyIsCiAgICAgICJvZ3JhdmUiLAogICAgICAib3JkZiIsCiAgICAgICJvcmRtIiwKICAgICAgIm9zbGFzaCIsCiAgICAgICJvdGlsZGUiLAogICAgICAib3VtbCIsCiAgICAgICJwYXJhIiwKICAgICAgInBsdXNtbiIsCiAgICAgICJwb3VuZCIsCiAgICAgICJxdW90IiwKICAgICAgInJhcXVvIiwKICAgICAgInJlZyIsCiAgICAgICJzZWN0IiwKICAgICAgInNoeSIsCiAgICAgICJzdXAxIiwKICAgICAgInN1cDIiLAogICAgICAic3VwMyIsCiAgICAgICJzemxpZyIsCiAgICAgICJ0aG9ybiIsCiAgICAgICJ0aW1lcyIsCiAgICAgICJ1YWN1dGUiLAogICAgICAidWNpcmMiLAogICAgICAidWdyYXZlIiwKICAgICAgInVtbCIsCiAgICAgICJ1dW1sIiwKICAgICAgInlhY3V0ZSIsCiAgICAgICJ5ZW4iLAogICAgICAieXVtbCIKICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9jaGFyYWN0ZXItZW50aXRpZXMtaHRtbDRAMi4xLjAvbm9kZV9tb2R1bGVzL2NoYXJhY3Rlci1lbnRpdGllcy1odG1sNC9pbmRleC5qcwp2YXIgY2hhcmFjdGVyRW50aXRpZXNIdG1sNDsKdmFyIGluaXRfY2hhcmFjdGVyX2VudGl0aWVzX2h0bWw0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vY2hhcmFjdGVyLWVudGl0aWVzLWh0bWw0QDIuMS4wL25vZGVfbW9kdWxlcy9jaGFyYWN0ZXItZW50aXRpZXMtaHRtbDQvaW5kZXguanMiKCkgewogICAgY2hhcmFjdGVyRW50aXRpZXNIdG1sNCA9IHsKICAgICAgbmJzcDogIlx4QTAiLAogICAgICBpZXhjbDogIlx4QTEiLAogICAgICBjZW50OiAiXHhBMiIsCiAgICAgIHBvdW5kOiAiXHhBMyIsCiAgICAgIGN1cnJlbjogIlx4QTQiLAogICAgICB5ZW46ICJceEE1IiwKICAgICAgYnJ2YmFyOiAiXHhBNiIsCiAgICAgIHNlY3Q6ICJceEE3IiwKICAgICAgdW1sOiAiXHhBOCIsCiAgICAgIGNvcHk6ICJceEE5IiwKICAgICAgb3JkZjogIlx4QUEiLAogICAgICBsYXF1bzogIlx4QUIiLAogICAgICBub3Q6ICJceEFDIiwKICAgICAgc2h5OiAiXHhBRCIsCiAgICAgIHJlZzogIlx4QUUiLAogICAgICBtYWNyOiAiXHhBRiIsCiAgICAgIGRlZzogIlx4QjAiLAogICAgICBwbHVzbW46ICJceEIxIiwKICAgICAgc3VwMjogIlx4QjIiLAogICAgICBzdXAzOiAiXHhCMyIsCiAgICAgIGFjdXRlOiAiXHhCNCIsCiAgICAgIG1pY3JvOiAiXHhCNSIsCiAgICAgIHBhcmE6ICJceEI2IiwKICAgICAgbWlkZG90OiAiXHhCNyIsCiAgICAgIGNlZGlsOiAiXHhCOCIsCiAgICAgIHN1cDE6ICJceEI5IiwKICAgICAgb3JkbTogIlx4QkEiLAogICAgICByYXF1bzogIlx4QkIiLAogICAgICBmcmFjMTQ6ICJceEJDIiwKICAgICAgZnJhYzEyOiAiXHhCRCIsCiAgICAgIGZyYWMzNDogIlx4QkUiLAogICAgICBpcXVlc3Q6ICJceEJGIiwKICAgICAgQWdyYXZlOiAiXHhDMCIsCiAgICAgIEFhY3V0ZTogIlx4QzEiLAogICAgICBBY2lyYzogIlx4QzIiLAogICAgICBBdGlsZGU6ICJceEMzIiwKICAgICAgQXVtbDogIlx4QzQiLAogICAgICBBcmluZzogIlx4QzUiLAogICAgICBBRWxpZzogIlx4QzYiLAogICAgICBDY2VkaWw6ICJceEM3IiwKICAgICAgRWdyYXZlOiAiXHhDOCIsCiAgICAgIEVhY3V0ZTogIlx4QzkiLAogICAgICBFY2lyYzogIlx4Q0EiLAogICAgICBFdW1sOiAiXHhDQiIsCiAgICAgIElncmF2ZTogIlx4Q0MiLAogICAgICBJYWN1dGU6ICJceENEIiwKICAgICAgSWNpcmM6ICJceENFIiwKICAgICAgSXVtbDogIlx4Q0YiLAogICAgICBFVEg6ICJceEQwIiwKICAgICAgTnRpbGRlOiAiXHhEMSIsCiAgICAgIE9ncmF2ZTogIlx4RDIiLAogICAgICBPYWN1dGU6ICJceEQzIiwKICAgICAgT2NpcmM6ICJceEQ0IiwKICAgICAgT3RpbGRlOiAiXHhENSIsCiAgICAgIE91bWw6ICJceEQ2IiwKICAgICAgdGltZXM6ICJceEQ3IiwKICAgICAgT3NsYXNoOiAiXHhEOCIsCiAgICAgIFVncmF2ZTogIlx4RDkiLAogICAgICBVYWN1dGU6ICJceERBIiwKICAgICAgVWNpcmM6ICJceERCIiwKICAgICAgVXVtbDogIlx4REMiLAogICAgICBZYWN1dGU6ICJceEREIiwKICAgICAgVEhPUk46ICJceERFIiwKICAgICAgc3psaWc6ICJceERGIiwKICAgICAgYWdyYXZlOiAiXHhFMCIsCiAgICAgIGFhY3V0ZTogIlx4RTEiLAogICAgICBhY2lyYzogIlx4RTIiLAogICAgICBhdGlsZGU6ICJceEUzIiwKICAgICAgYXVtbDogIlx4RTQiLAogICAgICBhcmluZzogIlx4RTUiLAogICAgICBhZWxpZzogIlx4RTYiLAogICAgICBjY2VkaWw6ICJceEU3IiwKICAgICAgZWdyYXZlOiAiXHhFOCIsCiAgICAgIGVhY3V0ZTogIlx4RTkiLAogICAgICBlY2lyYzogIlx4RUEiLAogICAgICBldW1sOiAiXHhFQiIsCiAgICAgIGlncmF2ZTogIlx4RUMiLAogICAgICBpYWN1dGU6ICJceEVEIiwKICAgICAgaWNpcmM6ICJceEVFIiwKICAgICAgaXVtbDogIlx4RUYiLAogICAgICBldGg6ICJceEYwIiwKICAgICAgbnRpbGRlOiAiXHhGMSIsCiAgICAgIG9ncmF2ZTogIlx4RjIiLAogICAgICBvYWN1dGU6ICJceEYzIiwKICAgICAgb2NpcmM6ICJceEY0IiwKICAgICAgb3RpbGRlOiAiXHhGNSIsCiAgICAgIG91bWw6ICJceEY2IiwKICAgICAgZGl2aWRlOiAiXHhGNyIsCiAgICAgIG9zbGFzaDogIlx4RjgiLAogICAgICB1Z3JhdmU6ICJceEY5IiwKICAgICAgdWFjdXRlOiAiXHhGQSIsCiAgICAgIHVjaXJjOiAiXHhGQiIsCiAgICAgIHV1bWw6ICJceEZDIiwKICAgICAgeWFjdXRlOiAiXHhGRCIsCiAgICAgIHRob3JuOiAiXHhGRSIsCiAgICAgIHl1bWw6ICJceEZGIiwKICAgICAgZm5vZjogIlx1MDE5MiIsCiAgICAgIEFscGhhOiAiXHUwMzkxIiwKICAgICAgQmV0YTogIlx1MDM5MiIsCiAgICAgIEdhbW1hOiAiXHUwMzkzIiwKICAgICAgRGVsdGE6ICJcdTAzOTQiLAogICAgICBFcHNpbG9uOiAiXHUwMzk1IiwKICAgICAgWmV0YTogIlx1MDM5NiIsCiAgICAgIEV0YTogIlx1MDM5NyIsCiAgICAgIFRoZXRhOiAiXHUwMzk4IiwKICAgICAgSW90YTogIlx1MDM5OSIsCiAgICAgIEthcHBhOiAiXHUwMzlBIiwKICAgICAgTGFtYmRhOiAiXHUwMzlCIiwKICAgICAgTXU6ICJcdTAzOUMiLAogICAgICBOdTogIlx1MDM5RCIsCiAgICAgIFhpOiAiXHUwMzlFIiwKICAgICAgT21pY3JvbjogIlx1MDM5RiIsCiAgICAgIFBpOiAiXHUwM0EwIiwKICAgICAgUmhvOiAiXHUwM0ExIiwKICAgICAgU2lnbWE6ICJcdTAzQTMiLAogICAgICBUYXU6ICJcdTAzQTQiLAogICAgICBVcHNpbG9uOiAiXHUwM0E1IiwKICAgICAgUGhpOiAiXHUwM0E2IiwKICAgICAgQ2hpOiAiXHUwM0E3IiwKICAgICAgUHNpOiAiXHUwM0E4IiwKICAgICAgT21lZ2E6ICJcdTAzQTkiLAogICAgICBhbHBoYTogIlx1MDNCMSIsCiAgICAgIGJldGE6ICJcdTAzQjIiLAogICAgICBnYW1tYTogIlx1MDNCMyIsCiAgICAgIGRlbHRhOiAiXHUwM0I0IiwKICAgICAgZXBzaWxvbjogIlx1MDNCNSIsCiAgICAgIHpldGE6ICJcdTAzQjYiLAogICAgICBldGE6ICJcdTAzQjciLAogICAgICB0aGV0YTogIlx1MDNCOCIsCiAgICAgIGlvdGE6ICJcdTAzQjkiLAogICAgICBrYXBwYTogIlx1MDNCQSIsCiAgICAgIGxhbWJkYTogIlx1MDNCQiIsCiAgICAgIG11OiAiXHUwM0JDIiwKICAgICAgbnU6ICJcdTAzQkQiLAogICAgICB4aTogIlx1MDNCRSIsCiAgICAgIG9taWNyb246ICJcdTAzQkYiLAogICAgICBwaTogIlx1MDNDMCIsCiAgICAgIHJobzogIlx1MDNDMSIsCiAgICAgIHNpZ21hZjogIlx1MDNDMiIsCiAgICAgIHNpZ21hOiAiXHUwM0MzIiwKICAgICAgdGF1OiAiXHUwM0M0IiwKICAgICAgdXBzaWxvbjogIlx1MDNDNSIsCiAgICAgIHBoaTogIlx1MDNDNiIsCiAgICAgIGNoaTogIlx1MDNDNyIsCiAgICAgIHBzaTogIlx1MDNDOCIsCiAgICAgIG9tZWdhOiAiXHUwM0M5IiwKICAgICAgdGhldGFzeW06ICJcdTAzRDEiLAogICAgICB1cHNpaDogIlx1MDNEMiIsCiAgICAgIHBpdjogIlx1MDNENiIsCiAgICAgIGJ1bGw6ICJcdTIwMjIiLAogICAgICBoZWxsaXA6ICJcdTIwMjYiLAogICAgICBwcmltZTogIlx1MjAzMiIsCiAgICAgIFByaW1lOiAiXHUyMDMzIiwKICAgICAgb2xpbmU6ICJcdTIwM0UiLAogICAgICBmcmFzbDogIlx1MjA0NCIsCiAgICAgIHdlaWVycDogIlx1MjExOCIsCiAgICAgIGltYWdlOiAiXHUyMTExIiwKICAgICAgcmVhbDogIlx1MjExQyIsCiAgICAgIHRyYWRlOiAiXHUyMTIyIiwKICAgICAgYWxlZnN5bTogIlx1MjEzNSIsCiAgICAgIGxhcnI6ICJcdTIxOTAiLAogICAgICB1YXJyOiAiXHUyMTkxIiwKICAgICAgcmFycjogIlx1MjE5MiIsCiAgICAgIGRhcnI6ICJcdTIxOTMiLAogICAgICBoYXJyOiAiXHUyMTk0IiwKICAgICAgY3JhcnI6ICJcdTIxQjUiLAogICAgICBsQXJyOiAiXHUyMUQwIiwKICAgICAgdUFycjogIlx1MjFEMSIsCiAgICAgIHJBcnI6ICJcdTIxRDIiLAogICAgICBkQXJyOiAiXHUyMUQzIiwKICAgICAgaEFycjogIlx1MjFENCIsCiAgICAgIGZvcmFsbDogIlx1MjIwMCIsCiAgICAgIHBhcnQ6ICJcdTIyMDIiLAogICAgICBleGlzdDogIlx1MjIwMyIsCiAgICAgIGVtcHR5OiAiXHUyMjA1IiwKICAgICAgbmFibGE6ICJcdTIyMDciLAogICAgICBpc2luOiAiXHUyMjA4IiwKICAgICAgbm90aW46ICJcdTIyMDkiLAogICAgICBuaTogIlx1MjIwQiIsCiAgICAgIHByb2Q6ICJcdTIyMEYiLAogICAgICBzdW06ICJcdTIyMTEiLAogICAgICBtaW51czogIlx1MjIxMiIsCiAgICAgIGxvd2FzdDogIlx1MjIxNyIsCiAgICAgIHJhZGljOiAiXHUyMjFBIiwKICAgICAgcHJvcDogIlx1MjIxRCIsCiAgICAgIGluZmluOiAiXHUyMjFFIiwKICAgICAgYW5nOiAiXHUyMjIwIiwKICAgICAgYW5kOiAiXHUyMjI3IiwKICAgICAgb3I6ICJcdTIyMjgiLAogICAgICBjYXA6ICJcdTIyMjkiLAogICAgICBjdXA6ICJcdTIyMkEiLAogICAgICBpbnQ6ICJcdTIyMkIiLAogICAgICB0aGVyZTQ6ICJcdTIyMzQiLAogICAgICBzaW06ICJcdTIyM0MiLAogICAgICBjb25nOiAiXHUyMjQ1IiwKICAgICAgYXN5bXA6ICJcdTIyNDgiLAogICAgICBuZTogIlx1MjI2MCIsCiAgICAgIGVxdWl2OiAiXHUyMjYxIiwKICAgICAgbGU6ICJcdTIyNjQiLAogICAgICBnZTogIlx1MjI2NSIsCiAgICAgIHN1YjogIlx1MjI4MiIsCiAgICAgIHN1cDogIlx1MjI4MyIsCiAgICAgIG5zdWI6ICJcdTIyODQiLAogICAgICBzdWJlOiAiXHUyMjg2IiwKICAgICAgc3VwZTogIlx1MjI4NyIsCiAgICAgIG9wbHVzOiAiXHUyMjk1IiwKICAgICAgb3RpbWVzOiAiXHUyMjk3IiwKICAgICAgcGVycDogIlx1MjJBNSIsCiAgICAgIHNkb3Q6ICJcdTIyQzUiLAogICAgICBsY2VpbDogIlx1MjMwOCIsCiAgICAgIHJjZWlsOiAiXHUyMzA5IiwKICAgICAgbGZsb29yOiAiXHUyMzBBIiwKICAgICAgcmZsb29yOiAiXHUyMzBCIiwKICAgICAgbGFuZzogIlx1MjMyOSIsCiAgICAgIHJhbmc6ICJcdTIzMkEiLAogICAgICBsb3o6ICJcdTI1Q0EiLAogICAgICBzcGFkZXM6ICJcdTI2NjAiLAogICAgICBjbHViczogIlx1MjY2MyIsCiAgICAgIGhlYXJ0czogIlx1MjY2NSIsCiAgICAgIGRpYW1zOiAiXHUyNjY2IiwKICAgICAgcXVvdDogJyInLAogICAgICBhbXA6ICImIiwKICAgICAgbHQ6ICI8IiwKICAgICAgZ3Q6ICI+IiwKICAgICAgT0VsaWc6ICJcdTAxNTIiLAogICAgICBvZWxpZzogIlx1MDE1MyIsCiAgICAgIFNjYXJvbjogIlx1MDE2MCIsCiAgICAgIHNjYXJvbjogIlx1MDE2MSIsCiAgICAgIFl1bWw6ICJcdTAxNzgiLAogICAgICBjaXJjOiAiXHUwMkM2IiwKICAgICAgdGlsZGU6ICJcdTAyREMiLAogICAgICBlbnNwOiAiXHUyMDAyIiwKICAgICAgZW1zcDogIlx1MjAwMyIsCiAgICAgIHRoaW5zcDogIlx1MjAwOSIsCiAgICAgIHp3bmo6ICJcdTIwMEMiLAogICAgICB6d2o6ICJcdTIwMEQiLAogICAgICBscm06ICJcdTIwMEUiLAogICAgICBybG06ICJcdTIwMEYiLAogICAgICBuZGFzaDogIlx1MjAxMyIsCiAgICAgIG1kYXNoOiAiXHUyMDE0IiwKICAgICAgbHNxdW86ICJcdTIwMTgiLAogICAgICByc3F1bzogIlx1MjAxOSIsCiAgICAgIHNicXVvOiAiXHUyMDFBIiwKICAgICAgbGRxdW86ICJcdTIwMUMiLAogICAgICByZHF1bzogIlx1MjAxRCIsCiAgICAgIGJkcXVvOiAiXHUyMDFFIiwKICAgICAgZGFnZ2VyOiAiXHUyMDIwIiwKICAgICAgRGFnZ2VyOiAiXHUyMDIxIiwKICAgICAgcGVybWlsOiAiXHUyMDMwIiwKICAgICAgbHNhcXVvOiAiXHUyMDM5IiwKICAgICAgcnNhcXVvOiAiXHUyMDNBIiwKICAgICAgZXVybzogIlx1MjBBQyIKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvY29uc3RhbnQvZGFuZ2Vyb3VzLmpzCnZhciBkYW5nZXJvdXM7CnZhciBpbml0X2Rhbmdlcm91cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi9jb25zdGFudC9kYW5nZXJvdXMuanMiKCkgewogICAgZGFuZ2Vyb3VzID0gWwogICAgICAiY2VudCIsCiAgICAgICJjb3B5IiwKICAgICAgImRpdmlkZSIsCiAgICAgICJndCIsCiAgICAgICJsdCIsCiAgICAgICJub3QiLAogICAgICAicGFyYSIsCiAgICAgICJ0aW1lcyIKICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvdXRpbC90by1uYW1lZC5qcwpmdW5jdGlvbiB0b05hbWVkKGNvZGU0LCBuZXh0Miwgb21pdCwgYXR0cmlidXRlKSB7CiAgY29uc3QgY2hhcmFjdGVyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlNCk7CiAgaWYgKG93bjkuY2FsbChjaGFyYWN0ZXJzLCBjaGFyYWN0ZXIpKSB7CiAgICBjb25zdCBuYW1lID0gY2hhcmFjdGVyc1tjaGFyYWN0ZXJdOwogICAgY29uc3QgdmFsdWUyID0gIiYiICsgbmFtZTsKICAgIGlmIChvbWl0ICYmIGNoYXJhY3RlckVudGl0aWVzTGVnYWN5LmluY2x1ZGVzKG5hbWUpICYmICFkYW5nZXJvdXMuaW5jbHVkZXMobmFtZSkgJiYgKCFhdHRyaWJ1dGUgfHwgbmV4dDIgJiYgbmV4dDIgIT09IDYxICYmIG5vdEFscGhhbnVtZXJpY1JlZ2V4LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShuZXh0MikpKSkgewogICAgICByZXR1cm4gdmFsdWUyOwogICAgfQogICAgcmV0dXJuIHZhbHVlMiArICI7IjsKICB9CiAgcmV0dXJuICIiOwp9CnZhciBvd245LCBjaGFyYWN0ZXJzLCBrZXksIG5vdEFscGhhbnVtZXJpY1JlZ2V4Owp2YXIgaW5pdF90b19uYW1lZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL3RvLW5hbWVkLmpzIigpIHsKICAgIGluaXRfY2hhcmFjdGVyX2VudGl0aWVzX2xlZ2FjeSgpOwogICAgaW5pdF9jaGFyYWN0ZXJfZW50aXRpZXNfaHRtbDQoKTsKICAgIGluaXRfZGFuZ2Vyb3VzKCk7CiAgICBvd245ID0ge30uaGFzT3duUHJvcGVydHk7CiAgICBjaGFyYWN0ZXJzID0ge307CiAgICBmb3IgKGtleSBpbiBjaGFyYWN0ZXJFbnRpdGllc0h0bWw0KSB7CiAgICAgIGlmIChvd245LmNhbGwoY2hhcmFjdGVyRW50aXRpZXNIdG1sNCwga2V5KSkgewogICAgICAgIGNoYXJhY3RlcnNbY2hhcmFjdGVyRW50aXRpZXNIdG1sNFtrZXldXSA9IGtleTsKICAgICAgfQogICAgfQogICAgbm90QWxwaGFudW1lcmljUmVnZXggPSAvW15cZEEtWmEtel0vOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvZm9ybWF0LXNtYXJ0LmpzCmZ1bmN0aW9uIGZvcm1hdFNtYXJ0KGNvZGU0LCBuZXh0Miwgb3B0aW9ucykgewogIGxldCBudW1lcmljID0gdG9IZXhhZGVjaW1hbChjb2RlNCwgbmV4dDIsIG9wdGlvbnMub21pdE9wdGlvbmFsU2VtaWNvbG9ucyk7CiAgbGV0IG5hbWVkOwogIGlmIChvcHRpb25zLnVzZU5hbWVkUmVmZXJlbmNlcyB8fCBvcHRpb25zLnVzZVNob3J0ZXN0UmVmZXJlbmNlcykgewogICAgbmFtZWQgPSB0b05hbWVkKAogICAgICBjb2RlNCwKICAgICAgbmV4dDIsCiAgICAgIG9wdGlvbnMub21pdE9wdGlvbmFsU2VtaWNvbG9ucywKICAgICAgb3B0aW9ucy5hdHRyaWJ1dGUKICAgICk7CiAgfQogIGlmICgob3B0aW9ucy51c2VTaG9ydGVzdFJlZmVyZW5jZXMgfHwgIW5hbWVkKSAmJiBvcHRpb25zLnVzZVNob3J0ZXN0UmVmZXJlbmNlcykgewogICAgY29uc3QgZGVjaW1hbCA9IHRvRGVjaW1hbChjb2RlNCwgbmV4dDIsIG9wdGlvbnMub21pdE9wdGlvbmFsU2VtaWNvbG9ucyk7CiAgICBpZiAoZGVjaW1hbC5sZW5ndGggPCBudW1lcmljLmxlbmd0aCkgewogICAgICBudW1lcmljID0gZGVjaW1hbDsKICAgIH0KICB9CiAgcmV0dXJuIG5hbWVkICYmICghb3B0aW9ucy51c2VTaG9ydGVzdFJlZmVyZW5jZXMgfHwgbmFtZWQubGVuZ3RoIDwgbnVtZXJpYy5sZW5ndGgpID8gbmFtZWQgOiBudW1lcmljOwp9CnZhciBpbml0X2Zvcm1hdF9zbWFydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL2Zvcm1hdC1zbWFydC5qcyIoKSB7CiAgICBpbml0X3RvX2hleGFkZWNpbWFsKCk7CiAgICBpbml0X3RvX2RlY2ltYWwoKTsKICAgIGluaXRfdG9fbmFtZWQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL2Zvcm1hdC1iYXNpYy5qcwpmdW5jdGlvbiBmb3JtYXRCYXNpYyhjb2RlNCkgewogIHJldHVybiAiJiN4IiArIGNvZGU0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgIjsiOwp9CnZhciBpbml0X2Zvcm1hdF9iYXNpYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL2Zvcm1hdC1iYXNpYy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvaW5kZXguanMKZnVuY3Rpb24gc3RyaW5naWZ5RW50aXRpZXModmFsdWUyLCBvcHRpb25zKSB7CiAgcmV0dXJuIGNvcmUodmFsdWUyLCBPYmplY3QuYXNzaWduKHsgZm9ybWF0OiBmb3JtYXRTbWFydCB9LCBvcHRpb25zKSk7Cn0KZnVuY3Rpb24gc3RyaW5naWZ5RW50aXRpZXNMaWdodCh2YWx1ZTIsIG9wdGlvbnMpIHsKICByZXR1cm4gY29yZSh2YWx1ZTIsIE9iamVjdC5hc3NpZ24oeyBmb3JtYXQ6IGZvcm1hdEJhc2ljIH0sIG9wdGlvbnMpKTsKfQp2YXIgaW5pdF9saWIyOCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NvcmUoKTsKICAgIGluaXRfZm9ybWF0X3NtYXJ0KCk7CiAgICBpbml0X2Zvcm1hdF9iYXNpYygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvaW5kZXguanMKdmFyIGluaXRfc3RyaW5naWZ5X2VudGl0aWVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIyOCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvY29tbWVudC5qcwpmdW5jdGlvbiBjb21tZW50Mihub2RlMiwgXzEsIF8yMiwgc3RhdGUxNCkgewogIHJldHVybiBzdGF0ZTE0LnNldHRpbmdzLmJvZ3VzQ29tbWVudHMgPyAiPD8iICsgc3RyaW5naWZ5RW50aXRpZXMoCiAgICBub2RlMi52YWx1ZSwKICAgIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlMTQuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcywgewogICAgICBzdWJzZXQ6IGJvZ3VzQ29tbWVudEVudGl0eVN1YnNldAogICAgfSkKICApICsgIj4iIDogIjwhLS0iICsgbm9kZTIudmFsdWUucmVwbGFjZShodG1sQ29tbWVudFJlZ2V4LCBlbmNvZGUyKSArICItLT4iOwogIGZ1bmN0aW9uIGVuY29kZTIoJDApIHsKICAgIHJldHVybiBzdHJpbmdpZnlFbnRpdGllcygKICAgICAgJDAsCiAgICAgIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlMTQuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcywgewogICAgICAgIHN1YnNldDogY29tbWVudEVudGl0eVN1YnNldAogICAgICB9KQogICAgKTsKICB9Cn0KdmFyIGh0bWxDb21tZW50UmVnZXgsIGJvZ3VzQ29tbWVudEVudGl0eVN1YnNldCwgY29tbWVudEVudGl0eVN1YnNldDsKdmFyIGluaXRfY29tbWVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL2NvbW1lbnQuanMiKCkgewogICAgaW5pdF9zdHJpbmdpZnlfZW50aXRpZXMoKTsKICAgIGh0bWxDb21tZW50UmVnZXggPSAvXj58Xi0+fDwhLS18LS0+fC0tIT58PCEtJC9nOwogICAgYm9ndXNDb21tZW50RW50aXR5U3Vic2V0ID0gWyI+Il07CiAgICBjb21tZW50RW50aXR5U3Vic2V0ID0gWyI8IiwgIj4iXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL2RvY3R5cGUuanMKZnVuY3Rpb24gZG9jdHlwZTIoXzEsIF8yMiwgXzMyLCBzdGF0ZTE0KSB7CiAgcmV0dXJuICI8ISIgKyAoc3RhdGUxNC5zZXR0aW5ncy51cHBlckRvY3R5cGUgPyAiRE9DVFlQRSIgOiAiZG9jdHlwZSIpICsgKHN0YXRlMTQuc2V0dGluZ3MudGlnaHREb2N0eXBlID8gIiIgOiAiICIpICsgImh0bWw+IjsKfQp2YXIgaW5pdF9kb2N0eXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvZG9jdHlwZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9jb21tYS1zZXBhcmF0ZWQtdG9rZW5zQDIuMC4zL25vZGVfbW9kdWxlcy9jb21tYS1zZXBhcmF0ZWQtdG9rZW5zL2luZGV4LmpzCmZ1bmN0aW9uIHBhcnNlNSh2YWx1ZTIpIHsKICBjb25zdCB0b2tlbnMgPSBbXTsKICBjb25zdCBpbnB1dCA9IFN0cmluZyh2YWx1ZTIgfHwgIiIpOwogIGxldCBpbmRleDIgPSBpbnB1dC5pbmRleE9mKCIsIik7CiAgbGV0IHN0YXJ0ID0gMDsKICBsZXQgZW5kMyA9IGZhbHNlOwogIHdoaWxlICghZW5kMykgewogICAgaWYgKGluZGV4MiA9PT0gLTEpIHsKICAgICAgaW5kZXgyID0gaW5wdXQubGVuZ3RoOwogICAgICBlbmQzID0gdHJ1ZTsKICAgIH0KICAgIGNvbnN0IHRva2VuID0gaW5wdXQuc2xpY2Uoc3RhcnQsIGluZGV4MikudHJpbSgpOwogICAgaWYgKHRva2VuIHx8ICFlbmQzKSB7CiAgICAgIHRva2Vucy5wdXNoKHRva2VuKTsKICAgIH0KICAgIHN0YXJ0ID0gaW5kZXgyICsgMTsKICAgIGluZGV4MiA9IGlucHV0LmluZGV4T2YoIiwiLCBzdGFydCk7CiAgfQogIHJldHVybiB0b2tlbnM7Cn0KZnVuY3Rpb24gc3RyaW5naWZ5Myh2YWx1ZXMsIG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgY29uc3QgaW5wdXQgPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdID09PSAiIiA/IFsuLi52YWx1ZXMsICIiXSA6IHZhbHVlczsKICByZXR1cm4gaW5wdXQuam9pbigKICAgIChzZXR0aW5ncy5wYWRSaWdodCA/ICIgIiA6ICIiKSArICIsIiArIChzZXR0aW5ncy5wYWRMZWZ0ID09PSBmYWxzZSA/ICIiIDogIiAiKQogICkudHJpbSgpOwp9CnZhciBpbml0X2NvbW1hX3NlcGFyYXRlZF90b2tlbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb21tYS1zZXBhcmF0ZWQtdG9rZW5zQDIuMC4zL25vZGVfbW9kdWxlcy9jb21tYS1zZXBhcmF0ZWQtdG9rZW5zL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3NwYWNlLXNlcGFyYXRlZC10b2tlbnNAMi4wLjIvbm9kZV9tb2R1bGVzL3NwYWNlLXNlcGFyYXRlZC10b2tlbnMvaW5kZXguanMKZnVuY3Rpb24gcGFyc2U2KHZhbHVlMikgewogIGNvbnN0IGlucHV0ID0gU3RyaW5nKHZhbHVlMiB8fCAiIikudHJpbSgpOwogIHJldHVybiBpbnB1dCA/IGlucHV0LnNwbGl0KC9bIFx0XG5cclxmXSsvZykgOiBbXTsKfQpmdW5jdGlvbiBzdHJpbmdpZnk0KHZhbHVlcykgewogIHJldHVybiB2YWx1ZXMuam9pbigiICIpLnRyaW0oKTsKfQp2YXIgaW5pdF9zcGFjZV9zZXBhcmF0ZWRfdG9rZW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3BhY2Utc2VwYXJhdGVkLXRva2Vuc0AyLjAuMi9ub2RlX21vZHVsZXMvc3BhY2Utc2VwYXJhdGVkLXRva2Vucy9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtd2hpdGVzcGFjZUAzLjAuMC9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXdoaXRlc3BhY2UvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHdoaXRlc3BhY2UodGhpbmcpIHsKICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSAib2JqZWN0IiA/IHRoaW5nLnR5cGUgPT09ICJ0ZXh0IiA/IGVtcHR5Myh0aGluZy52YWx1ZSkgOiBmYWxzZSA6IGVtcHR5Myh0aGluZyk7Cn0KZnVuY3Rpb24gZW1wdHkzKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIucmVwbGFjZShyZSwgIiIpID09PSAiIjsKfQp2YXIgcmU7CnZhciBpbml0X2xpYjI5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXdoaXRlc3BhY2VAMy4wLjAvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC13aGl0ZXNwYWNlL2xpYi9pbmRleC5qcyIoKSB7CiAgICByZSA9IC9bIFx0XG5cZlxyXS9nOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXdoaXRlc3BhY2VAMy4wLjAvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC13aGl0ZXNwYWNlL2luZGV4LmpzCnZhciBpbml0X2hhc3RfdXRpbF93aGl0ZXNwYWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXdoaXRlc3BhY2VAMy4wLjAvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC13aGl0ZXNwYWNlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMjkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvb21pc3Npb24vdXRpbC9zaWJsaW5ncy5qcwpmdW5jdGlvbiBzaWJsaW5ncyhpbmNyZW1lbnQyKSB7CiAgcmV0dXJuIHNpYmxpbmc7CiAgZnVuY3Rpb24gc2libGluZyhwYXJlbnQsIGluZGV4MiwgaW5jbHVkZVdoaXRlc3BhY2UpIHsKICAgIGNvbnN0IHNpYmxpbmdzMiA9IHBhcmVudCA/IHBhcmVudC5jaGlsZHJlbiA6IGVtcHR5Q2hpbGRyZW47CiAgICBsZXQgb2Zmc2V0ID0gKGluZGV4MiB8fCAwKSArIGluY3JlbWVudDI7CiAgICBsZXQgbmV4dDIgPSBzaWJsaW5nczJbb2Zmc2V0XTsKICAgIGlmICghaW5jbHVkZVdoaXRlc3BhY2UpIHsKICAgICAgd2hpbGUgKG5leHQyICYmIHdoaXRlc3BhY2UobmV4dDIpKSB7CiAgICAgICAgb2Zmc2V0ICs9IGluY3JlbWVudDI7CiAgICAgICAgbmV4dDIgPSBzaWJsaW5nczJbb2Zmc2V0XTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5leHQyOwogIH0KfQp2YXIgc2libGluZ0FmdGVyLCBzaWJsaW5nQmVmb3JlLCBlbXB0eUNoaWxkcmVuOwp2YXIgaW5pdF9zaWJsaW5ncyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvb21pc3Npb24vdXRpbC9zaWJsaW5ncy5qcyIoKSB7CiAgICBpbml0X2hhc3RfdXRpbF93aGl0ZXNwYWNlKCk7CiAgICBzaWJsaW5nQWZ0ZXIgPSBzaWJsaW5ncygxKTsKICAgIHNpYmxpbmdCZWZvcmUgPSBzaWJsaW5ncygtMSk7CiAgICBlbXB0eUNoaWxkcmVuID0gW107CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL29taXNzaW9uLmpzCmZ1bmN0aW9uIG9taXNzaW9uKGhhbmRsZXJzMikgewogIHJldHVybiBvbWl0OwogIGZ1bmN0aW9uIG9taXQobm9kZTIsIGluZGV4MiwgcGFyZW50KSB7CiAgICByZXR1cm4gb3duMTAuY2FsbChoYW5kbGVyczIsIG5vZGUyLnRhZ05hbWUpICYmIGhhbmRsZXJzMltub2RlMi50YWdOYW1lXShub2RlMiwgaW5kZXgyLCBwYXJlbnQpOwogIH0KfQp2YXIgb3duMTA7CnZhciBpbml0X29taXNzaW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9vbWlzc2lvbi9vbWlzc2lvbi5qcyIoKSB7CiAgICBvd24xMCA9IHt9Lmhhc093blByb3BlcnR5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9vbWlzc2lvbi9jbG9zaW5nLmpzCmZ1bmN0aW9uIGhlYWRPckNvbGdyb3VwT3JDYXB0aW9uKF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyLCB0cnVlKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgIT09ICJjb21tZW50IiAmJiAhKG5leHQyLnR5cGUgPT09ICJ0ZXh0IiAmJiB3aGl0ZXNwYWNlKG5leHQyLnZhbHVlLmNoYXJBdCgwKSkpOwp9CmZ1bmN0aW9uIGh0bWw1KF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgIT09ICJjb21tZW50IjsKfQpmdW5jdGlvbiBib2R5KF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgIT09ICJjb21tZW50IjsKfQpmdW5jdGlvbiBwNChfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuIG5leHQyID8gbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIChuZXh0Mi50YWdOYW1lID09PSAiYWRkcmVzcyIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImFydGljbGUiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJhc2lkZSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImJsb2NrcXVvdGUiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJkZXRhaWxzIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiZGl2IiB8fCBuZXh0Mi50YWdOYW1lID09PSAiZGwiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJmaWVsZHNldCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImZpZ2NhcHRpb24iIHx8IG5leHQyLnRhZ05hbWUgPT09ICJmaWd1cmUiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJmb290ZXIiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJmb3JtIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaDEiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJoMiIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImgzIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaDQiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJoNSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImg2IiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaGVhZGVyIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaGdyb3VwIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaHIiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJtYWluIiB8fCBuZXh0Mi50YWdOYW1lID09PSAibWVudSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gIm5hdiIgfHwgbmV4dDIudGFnTmFtZSA9PT0gIm9sIiB8fCBuZXh0Mi50YWdOYW1lID09PSAicCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInByZSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInNlY3Rpb24iIHx8IG5leHQyLnRhZ05hbWUgPT09ICJ0YWJsZSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInVsIikgOiAhcGFyZW50IHx8IC8vIENvbmZ1c2luZyBwYXJlbnQuCiAgIShwYXJlbnQudHlwZSA9PT0gImVsZW1lbnQiICYmIChwYXJlbnQudGFnTmFtZSA9PT0gImEiIHx8IHBhcmVudC50YWdOYW1lID09PSAiYXVkaW8iIHx8IHBhcmVudC50YWdOYW1lID09PSAiZGVsIiB8fCBwYXJlbnQudGFnTmFtZSA9PT0gImlucyIgfHwgcGFyZW50LnRhZ05hbWUgPT09ICJtYXAiIHx8IHBhcmVudC50YWdOYW1lID09PSAibm9zY3JpcHQiIHx8IHBhcmVudC50YWdOYW1lID09PSAidmlkZW8iKSk7Cn0KZnVuY3Rpb24gbGkoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiAhbmV4dDIgfHwgbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIG5leHQyLnRhZ05hbWUgPT09ICJsaSI7Cn0KZnVuY3Rpb24gZHQoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiBCb29sZWFuKAogICAgbmV4dDIgJiYgbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIChuZXh0Mi50YWdOYW1lID09PSAiZHQiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJkZCIpCiAgKTsKfQpmdW5jdGlvbiBkZChfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgKG5leHQyLnRhZ05hbWUgPT09ICJkdCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImRkIik7Cn0KZnVuY3Rpb24gcnVieUVsZW1lbnQoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiAhbmV4dDIgfHwgbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIChuZXh0Mi50YWdOYW1lID09PSAicnAiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJydCIpOwp9CmZ1bmN0aW9uIG9wdGdyb3VwKF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiBuZXh0Mi50YWdOYW1lID09PSAib3B0Z3JvdXAiOwp9CmZ1bmN0aW9uIG9wdGlvbihfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgKG5leHQyLnRhZ05hbWUgPT09ICJvcHRpb24iIHx8IG5leHQyLnRhZ05hbWUgPT09ICJvcHRncm91cCIpOwp9CmZ1bmN0aW9uIHRoZWFkKF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gQm9vbGVhbigKICAgIG5leHQyICYmIG5leHQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiAobmV4dDIudGFnTmFtZSA9PT0gInRib2R5IiB8fCBuZXh0Mi50YWdOYW1lID09PSAidGZvb3QiKQogICk7Cn0KZnVuY3Rpb24gdGJvZHkoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiAhbmV4dDIgfHwgbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIChuZXh0Mi50YWdOYW1lID09PSAidGJvZHkiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJ0Zm9vdCIpOwp9CmZ1bmN0aW9uIHRmb290KF80LCBpbmRleDIsIHBhcmVudCkgewogIHJldHVybiAhc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKfQpmdW5jdGlvbiB0cihfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgbmV4dDIudGFnTmFtZSA9PT0gInRyIjsKfQpmdW5jdGlvbiBjZWxscyhfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgKG5leHQyLnRhZ05hbWUgPT09ICJ0ZCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInRoIik7Cn0KdmFyIGNsb3Npbmc7CnZhciBpbml0X2Nsb3NpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL2Nsb3NpbmcuanMiKCkgewogICAgaW5pdF9oYXN0X3V0aWxfd2hpdGVzcGFjZSgpOwogICAgaW5pdF9zaWJsaW5ncygpOwogICAgaW5pdF9vbWlzc2lvbigpOwogICAgY2xvc2luZyA9IG9taXNzaW9uKHsKICAgICAgYm9keSwKICAgICAgY2FwdGlvbjogaGVhZE9yQ29sZ3JvdXBPckNhcHRpb24sCiAgICAgIGNvbGdyb3VwOiBoZWFkT3JDb2xncm91cE9yQ2FwdGlvbiwKICAgICAgZGQsCiAgICAgIGR0LAogICAgICBoZWFkOiBoZWFkT3JDb2xncm91cE9yQ2FwdGlvbiwKICAgICAgaHRtbDogaHRtbDUsCiAgICAgIGxpLAogICAgICBvcHRncm91cCwKICAgICAgb3B0aW9uLAogICAgICBwOiBwNCwKICAgICAgcnA6IHJ1YnlFbGVtZW50LAogICAgICBydDogcnVieUVsZW1lbnQsCiAgICAgIHRib2R5LAogICAgICB0ZDogY2VsbHMsCiAgICAgIHRmb290LAogICAgICB0aDogY2VsbHMsCiAgICAgIHRoZWFkLAogICAgICB0cgogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL29wZW5pbmcuanMKZnVuY3Rpb24gaHRtbDYobm9kZTIpIHsKICBjb25zdCBoZWFkMiA9IHNpYmxpbmdBZnRlcihub2RlMiwgLTEpOwogIHJldHVybiAhaGVhZDIgfHwgaGVhZDIudHlwZSAhPT0gImNvbW1lbnQiOwp9CmZ1bmN0aW9uIGhlYWQobm9kZTIpIHsKICBjb25zdCBzZWVuID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICBmb3IgKGNvbnN0IGNoaWxkMiBvZiBub2RlMi5jaGlsZHJlbikgewogICAgaWYgKGNoaWxkMi50eXBlID09PSAiZWxlbWVudCIgJiYgKGNoaWxkMi50YWdOYW1lID09PSAiYmFzZSIgfHwgY2hpbGQyLnRhZ05hbWUgPT09ICJ0aXRsZSIpKSB7CiAgICAgIGlmIChzZWVuLmhhcyhjaGlsZDIudGFnTmFtZSkpIHJldHVybiBmYWxzZTsKICAgICAgc2Vlbi5hZGQoY2hpbGQyLnRhZ05hbWUpOwogICAgfQogIH0KICBjb25zdCBjaGlsZCA9IG5vZGUyLmNoaWxkcmVuWzBdOwogIHJldHVybiAhY2hpbGQgfHwgY2hpbGQudHlwZSA9PT0gImVsZW1lbnQiOwp9CmZ1bmN0aW9uIGJvZHkyKG5vZGUyKSB7CiAgY29uc3QgaGVhZDIgPSBzaWJsaW5nQWZ0ZXIobm9kZTIsIC0xLCB0cnVlKTsKICByZXR1cm4gIWhlYWQyIHx8IGhlYWQyLnR5cGUgIT09ICJjb21tZW50IiAmJiAhKGhlYWQyLnR5cGUgPT09ICJ0ZXh0IiAmJiB3aGl0ZXNwYWNlKGhlYWQyLnZhbHVlLmNoYXJBdCgwKSkpICYmICEoaGVhZDIudHlwZSA9PT0gImVsZW1lbnQiICYmIChoZWFkMi50YWdOYW1lID09PSAibWV0YSIgfHwgaGVhZDIudGFnTmFtZSA9PT0gImxpbmsiIHx8IGhlYWQyLnRhZ05hbWUgPT09ICJzY3JpcHQiIHx8IGhlYWQyLnRhZ05hbWUgPT09ICJzdHlsZSIgfHwgaGVhZDIudGFnTmFtZSA9PT0gInRlbXBsYXRlIikpOwp9CmZ1bmN0aW9uIGNvbGdyb3VwKG5vZGUyLCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IHByZXZpb3VzMyA9IHNpYmxpbmdCZWZvcmUocGFyZW50LCBpbmRleDIpOwogIGNvbnN0IGhlYWQyID0gc2libGluZ0FmdGVyKG5vZGUyLCAtMSwgdHJ1ZSk7CiAgaWYgKHBhcmVudCAmJiBwcmV2aW91czMgJiYgcHJldmlvdXMzLnR5cGUgPT09ICJlbGVtZW50IiAmJiBwcmV2aW91czMudGFnTmFtZSA9PT0gImNvbGdyb3VwIiAmJiBjbG9zaW5nKHByZXZpb3VzMywgcGFyZW50LmNoaWxkcmVuLmluZGV4T2YocHJldmlvdXMzKSwgcGFyZW50KSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gQm9vbGVhbihoZWFkMiAmJiBoZWFkMi50eXBlID09PSAiZWxlbWVudCIgJiYgaGVhZDIudGFnTmFtZSA9PT0gImNvbCIpOwp9CmZ1bmN0aW9uIHRib2R5Mihub2RlMiwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBwcmV2aW91czMgPSBzaWJsaW5nQmVmb3JlKHBhcmVudCwgaW5kZXgyKTsKICBjb25zdCBoZWFkMiA9IHNpYmxpbmdBZnRlcihub2RlMiwgLTEpOwogIGlmIChwYXJlbnQgJiYgcHJldmlvdXMzICYmIHByZXZpb3VzMy50eXBlID09PSAiZWxlbWVudCIgJiYgKHByZXZpb3VzMy50YWdOYW1lID09PSAidGhlYWQiIHx8IHByZXZpb3VzMy50YWdOYW1lID09PSAidGJvZHkiKSAmJiBjbG9zaW5nKHByZXZpb3VzMywgcGFyZW50LmNoaWxkcmVuLmluZGV4T2YocHJldmlvdXMzKSwgcGFyZW50KSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gQm9vbGVhbihoZWFkMiAmJiBoZWFkMi50eXBlID09PSAiZWxlbWVudCIgJiYgaGVhZDIudGFnTmFtZSA9PT0gInRyIik7Cn0KdmFyIG9wZW5pbmc7CnZhciBpbml0X29wZW5pbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL29wZW5pbmcuanMiKCkgewogICAgaW5pdF9oYXN0X3V0aWxfd2hpdGVzcGFjZSgpOwogICAgaW5pdF9zaWJsaW5ncygpOwogICAgaW5pdF9jbG9zaW5nKCk7CiAgICBpbml0X29taXNzaW9uKCk7CiAgICBvcGVuaW5nID0gb21pc3Npb24oewogICAgICBib2R5OiBib2R5MiwKICAgICAgY29sZ3JvdXAsCiAgICAgIGhlYWQsCiAgICAgIGh0bWw6IGh0bWw2LAogICAgICB0Ym9keTogdGJvZHkyCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL2VsZW1lbnQuanMKZnVuY3Rpb24gZWxlbWVudDMobm9kZTIsIGluZGV4MiwgcGFyZW50LCBzdGF0ZTE0KSB7CiAgY29uc3Qgc2NoZW1hID0gc3RhdGUxNC5zY2hlbWE7CiAgY29uc3Qgb21pdCA9IHNjaGVtYS5zcGFjZSA9PT0gInN2ZyIgPyBmYWxzZSA6IHN0YXRlMTQuc2V0dGluZ3Mub21pdE9wdGlvbmFsVGFnczsKICBsZXQgc2VsZkNsb3NpbmcgPSBzY2hlbWEuc3BhY2UgPT09ICJzdmciID8gc3RhdGUxNC5zZXR0aW5ncy5jbG9zZUVtcHR5RWxlbWVudHMgOiBzdGF0ZTE0LnNldHRpbmdzLnZvaWRzLmluY2x1ZGVzKG5vZGUyLnRhZ05hbWUudG9Mb3dlckNhc2UoKSk7CiAgY29uc3QgcGFydHMgPSBbXTsKICBsZXQgbGFzdDM7CiAgaWYgKHNjaGVtYS5zcGFjZSA9PT0gImh0bWwiICYmIG5vZGUyLnRhZ05hbWUgPT09ICJzdmciKSB7CiAgICBzdGF0ZTE0LnNjaGVtYSA9IHN2ZzI7CiAgfQogIGNvbnN0IGF0dHJpYnV0ZXMgPSBzZXJpYWxpemVBdHRyaWJ1dGVzKHN0YXRlMTQsIG5vZGUyLnByb3BlcnRpZXMpOwogIGNvbnN0IGNvbnRlbnQzID0gc3RhdGUxNC5hbGwoCiAgICBzY2hlbWEuc3BhY2UgPT09ICJodG1sIiAmJiBub2RlMi50YWdOYW1lID09PSAidGVtcGxhdGUiID8gbm9kZTIuY29udGVudCA6IG5vZGUyCiAgKTsKICBzdGF0ZTE0LnNjaGVtYSA9IHNjaGVtYTsKICBpZiAoY29udGVudDMpIHNlbGZDbG9zaW5nID0gZmFsc2U7CiAgaWYgKGF0dHJpYnV0ZXMgfHwgIW9taXQgfHwgIW9wZW5pbmcobm9kZTIsIGluZGV4MiwgcGFyZW50KSkgewogICAgcGFydHMucHVzaCgiPCIsIG5vZGUyLnRhZ05hbWUsIGF0dHJpYnV0ZXMgPyAiICIgKyBhdHRyaWJ1dGVzIDogIiIpOwogICAgaWYgKHNlbGZDbG9zaW5nICYmIChzY2hlbWEuc3BhY2UgPT09ICJzdmciIHx8IHN0YXRlMTQuc2V0dGluZ3MuY2xvc2VTZWxmQ2xvc2luZykpIHsKICAgICAgbGFzdDMgPSBhdHRyaWJ1dGVzLmNoYXJBdChhdHRyaWJ1dGVzLmxlbmd0aCAtIDEpOwogICAgICBpZiAoIXN0YXRlMTQuc2V0dGluZ3MudGlnaHRTZWxmQ2xvc2luZyB8fCBsYXN0MyA9PT0gIi8iIHx8IGxhc3QzICYmIGxhc3QzICE9PSAnIicgJiYgbGFzdDMgIT09ICInIikgewogICAgICAgIHBhcnRzLnB1c2goIiAiKTsKICAgICAgfQogICAgICBwYXJ0cy5wdXNoKCIvIik7CiAgICB9CiAgICBwYXJ0cy5wdXNoKCI+Iik7CiAgfQogIHBhcnRzLnB1c2goY29udGVudDMpOwogIGlmICghc2VsZkNsb3NpbmcgJiYgKCFvbWl0IHx8ICFjbG9zaW5nKG5vZGUyLCBpbmRleDIsIHBhcmVudCkpKSB7CiAgICBwYXJ0cy5wdXNoKCI8LyIgKyBub2RlMi50YWdOYW1lICsgIj4iKTsKICB9CiAgcmV0dXJuIHBhcnRzLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIHNlcmlhbGl6ZUF0dHJpYnV0ZXMoc3RhdGUxNCwgcHJvcGVydGllczIpIHsKICBjb25zdCB2YWx1ZXMgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGtleTI7CiAgaWYgKHByb3BlcnRpZXMyKSB7CiAgICBmb3IgKGtleTIgaW4gcHJvcGVydGllczIpIHsKICAgICAgaWYgKHByb3BlcnRpZXMyW2tleTJdICE9PSBudWxsICYmIHByb3BlcnRpZXMyW2tleTJdICE9PSB2b2lkIDApIHsKICAgICAgICBjb25zdCB2YWx1ZTIgPSBzZXJpYWxpemVBdHRyaWJ1dGUoc3RhdGUxNCwga2V5MiwgcHJvcGVydGllczJba2V5Ml0pOwogICAgICAgIGlmICh2YWx1ZTIpIHZhbHVlcy5wdXNoKHZhbHVlMik7CiAgICAgIH0KICAgIH0KICB9CiAgd2hpbGUgKCsraW5kZXgyIDwgdmFsdWVzLmxlbmd0aCkgewogICAgY29uc3QgbGFzdDMgPSBzdGF0ZTE0LnNldHRpbmdzLnRpZ2h0QXR0cmlidXRlcyA/IHZhbHVlc1tpbmRleDJdLmNoYXJBdCh2YWx1ZXNbaW5kZXgyXS5sZW5ndGggLSAxKSA6IHZvaWQgMDsKICAgIGlmIChpbmRleDIgIT09IHZhbHVlcy5sZW5ndGggLSAxICYmIGxhc3QzICE9PSAnIicgJiYgbGFzdDMgIT09ICInIikgewogICAgICB2YWx1ZXNbaW5kZXgyXSArPSAiICI7CiAgICB9CiAgfQogIHJldHVybiB2YWx1ZXMuam9pbigiIik7Cn0KZnVuY3Rpb24gc2VyaWFsaXplQXR0cmlidXRlKHN0YXRlMTQsIGtleTIsIHZhbHVlMikgewogIGNvbnN0IGluZm8gPSBmaW5kMihzdGF0ZTE0LnNjaGVtYSwga2V5Mik7CiAgY29uc3QgeDMgPSBzdGF0ZTE0LnNldHRpbmdzLmFsbG93UGFyc2VFcnJvcnMgJiYgc3RhdGUxNC5zY2hlbWEuc3BhY2UgPT09ICJodG1sIiA/IDAgOiAxOwogIGNvbnN0IHk1ID0gc3RhdGUxNC5zZXR0aW5ncy5hbGxvd0Rhbmdlcm91c0NoYXJhY3RlcnMgPyAwIDogMTsKICBsZXQgcXVvdGUgPSBzdGF0ZTE0LnF1b3RlOwogIGxldCByZXN1bHQ7CiAgaWYgKGluZm8ub3ZlcmxvYWRlZEJvb2xlYW4gJiYgKHZhbHVlMiA9PT0gaW5mby5hdHRyaWJ1dGUgfHwgdmFsdWUyID09PSAiIikpIHsKICAgIHZhbHVlMiA9IHRydWU7CiAgfSBlbHNlIGlmICgoaW5mby5ib29sZWFuIHx8IGluZm8ub3ZlcmxvYWRlZEJvb2xlYW4pICYmICh0eXBlb2YgdmFsdWUyICE9PSAic3RyaW5nIiB8fCB2YWx1ZTIgPT09IGluZm8uYXR0cmlidXRlIHx8IHZhbHVlMiA9PT0gIiIpKSB7CiAgICB2YWx1ZTIgPSBCb29sZWFuKHZhbHVlMik7CiAgfQogIGlmICh2YWx1ZTIgPT09IG51bGwgfHwgdmFsdWUyID09PSB2b2lkIDAgfHwgdmFsdWUyID09PSBmYWxzZSB8fCB0eXBlb2YgdmFsdWUyID09PSAibnVtYmVyIiAmJiBOdW1iZXIuaXNOYU4odmFsdWUyKSkgewogICAgcmV0dXJuICIiOwogIH0KICBjb25zdCBuYW1lID0gc3RyaW5naWZ5RW50aXRpZXMoCiAgICBpbmZvLmF0dHJpYnV0ZSwKICAgIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlMTQuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcywgewogICAgICAvLyBBbHdheXMgZW5jb2RlIHdpdGhvdXQgcGFyc2UgZXJyb3JzIGluIG5vbi1IVE1MLgogICAgICBzdWJzZXQ6IGNvbnN0YW50cy5uYW1lW3gzXVt5NV0KICAgIH0pCiAgKTsKICBpZiAodmFsdWUyID09PSB0cnVlKSByZXR1cm4gbmFtZTsKICB2YWx1ZTIgPSBBcnJheS5pc0FycmF5KHZhbHVlMikgPyAoaW5mby5jb21tYVNlcGFyYXRlZCA/IHN0cmluZ2lmeTMgOiBzdHJpbmdpZnk0KSh2YWx1ZTIsIHsKICAgIHBhZExlZnQ6ICFzdGF0ZTE0LnNldHRpbmdzLnRpZ2h0Q29tbWFTZXBhcmF0ZWRMaXN0cwogIH0pIDogU3RyaW5nKHZhbHVlMik7CiAgaWYgKHN0YXRlMTQuc2V0dGluZ3MuY29sbGFwc2VFbXB0eUF0dHJpYnV0ZXMgJiYgIXZhbHVlMikgcmV0dXJuIG5hbWU7CiAgaWYgKHN0YXRlMTQuc2V0dGluZ3MucHJlZmVyVW5xdW90ZWQpIHsKICAgIHJlc3VsdCA9IHN0cmluZ2lmeUVudGl0aWVzKAogICAgICB2YWx1ZTIsCiAgICAgIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlMTQuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcywgewogICAgICAgIGF0dHJpYnV0ZTogdHJ1ZSwKICAgICAgICBzdWJzZXQ6IGNvbnN0YW50cy51bnF1b3RlZFt4M11beTVdCiAgICAgIH0pCiAgICApOwogIH0KICBpZiAocmVzdWx0ICE9PSB2YWx1ZTIpIHsKICAgIGlmIChzdGF0ZTE0LnNldHRpbmdzLnF1b3RlU21hcnQgJiYgY2NvdW50KHZhbHVlMiwgcXVvdGUpID4gY2NvdW50KHZhbHVlMiwgc3RhdGUxNC5hbHRlcm5hdGl2ZSkpIHsKICAgICAgcXVvdGUgPSBzdGF0ZTE0LmFsdGVybmF0aXZlOwogICAgfQogICAgcmVzdWx0ID0gcXVvdGUgKyBzdHJpbmdpZnlFbnRpdGllcygKICAgICAgdmFsdWUyLAogICAgICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZTE0LnNldHRpbmdzLmNoYXJhY3RlclJlZmVyZW5jZXMsIHsKICAgICAgICAvLyBBbHdheXMgZW5jb2RlIHdpdGhvdXQgcGFyc2UgZXJyb3JzIGluIG5vbi1IVE1MLgogICAgICAgIHN1YnNldDogKHF1b3RlID09PSAiJyIgPyBjb25zdGFudHMuc2luZ2xlIDogY29uc3RhbnRzLmRvdWJsZSlbeDNdW3k1XSwKICAgICAgICBhdHRyaWJ1dGU6IHRydWUKICAgICAgfSkKICAgICkgKyBxdW90ZTsKICB9CiAgcmV0dXJuIG5hbWUgKyAocmVzdWx0ID8gIj0iICsgcmVzdWx0IDogcmVzdWx0KTsKfQp2YXIgY29uc3RhbnRzOwp2YXIgaW5pdF9lbGVtZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvZWxlbWVudC5qcyIoKSB7CiAgICBpbml0X2Njb3VudCgpOwogICAgaW5pdF9jb21tYV9zZXBhcmF0ZWRfdG9rZW5zKCk7CiAgICBpbml0X3Byb3BlcnR5X2luZm9ybWF0aW9uKCk7CiAgICBpbml0X3NwYWNlX3NlcGFyYXRlZF90b2tlbnMoKTsKICAgIGluaXRfc3RyaW5naWZ5X2VudGl0aWVzKCk7CiAgICBpbml0X2Nsb3NpbmcoKTsKICAgIGluaXRfb3BlbmluZygpOwogICAgY29uc3RhbnRzID0gewogICAgICAvLyBTZWU6IDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNhdHRyaWJ1dGUtbmFtZS1zdGF0ZT4uCiAgICAgIG5hbWU6IFsKICAgICAgICBbIglcblxmXHIgJi89PiIuc3BsaXQoIiIpLCAiCVxuXGZcciBcIiYnLz0+YCIuc3BsaXQoIiIpXSwKICAgICAgICBbYFwwCQpcZlxyICImJy88PT5gLnNwbGl0KCIiKSwgIlwwCVxuXGZcciBcIiYnLzw9PmAiLnNwbGl0KCIiKV0KICAgICAgXSwKICAgICAgLy8gU2VlOiA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jYXR0cmlidXRlLXZhbHVlLSh1bnF1b3RlZCktc3RhdGU+LgogICAgICB1bnF1b3RlZDogWwogICAgICAgIFsiCVxuXGZcciAmPiIuc3BsaXQoIiIpLCAiXDAJXG5cZlxyIFwiJic8PT5gIi5zcGxpdCgiIildLAogICAgICAgIFsiXDAJXG5cZlxyIFwiJic8PT5gIi5zcGxpdCgiIiksICJcMAlcblxmXHIgXCImJzw9PmAiLnNwbGl0KCIiKV0KICAgICAgXSwKICAgICAgLy8gU2VlOiA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jYXR0cmlidXRlLXZhbHVlLShzaW5nbGUtcXVvdGVkKS1zdGF0ZT4uCiAgICAgIHNpbmdsZTogWwogICAgICAgIFsiJiciLnNwbGl0KCIiKSwgIlwiJidgIi5zcGxpdCgiIildLAogICAgICAgIFsiXDAmJyIuc3BsaXQoIiIpLCAiXDBcIiYnYCIuc3BsaXQoIiIpXQogICAgICBdLAogICAgICAvLyBTZWU6IDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNhdHRyaWJ1dGUtdmFsdWUtKGRvdWJsZS1xdW90ZWQpLXN0YXRlPi4KICAgICAgZG91YmxlOiBbCiAgICAgICAgWyciJicuc3BsaXQoIiIpLCAiXCImJ2AiLnNwbGl0KCIiKV0sCiAgICAgICAgWydcMCImJy5zcGxpdCgiIiksICJcMFwiJidgIi5zcGxpdCgiIildCiAgICAgIF0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS90ZXh0LmpzCmZ1bmN0aW9uIHRleHQ3KG5vZGUyLCBfNCwgcGFyZW50LCBzdGF0ZTE0KSB7CiAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQudHlwZSA9PT0gImVsZW1lbnQiICYmIChwYXJlbnQudGFnTmFtZSA9PT0gInNjcmlwdCIgfHwgcGFyZW50LnRhZ05hbWUgPT09ICJzdHlsZSIpID8gbm9kZTIudmFsdWUgOiBzdHJpbmdpZnlFbnRpdGllcygKICAgIG5vZGUyLnZhbHVlLAogICAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUxNC5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLCB7CiAgICAgIHN1YnNldDogdGV4dEVudGl0eVN1YnNldAogICAgfSkKICApOwp9CnZhciB0ZXh0RW50aXR5U3Vic2V0Owp2YXIgaW5pdF90ZXh0NCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL3RleHQuanMiKCkgewogICAgaW5pdF9zdHJpbmdpZnlfZW50aXRpZXMoKTsKICAgIHRleHRFbnRpdHlTdWJzZXQgPSBbIjwiLCAiJiJdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvcmF3LmpzCmZ1bmN0aW9uIHJhdyhub2RlMiwgaW5kZXgyLCBwYXJlbnQsIHN0YXRlMTQpIHsKICByZXR1cm4gc3RhdGUxNC5zZXR0aW5ncy5hbGxvd0Rhbmdlcm91c0h0bWwgPyBub2RlMi52YWx1ZSA6IHRleHQ3KG5vZGUyLCBpbmRleDIsIHBhcmVudCwgc3RhdGUxNCk7Cn0KdmFyIGluaXRfcmF3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvcmF3LmpzIigpIHsKICAgIGluaXRfdGV4dDQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL3Jvb3QuanMKZnVuY3Rpb24gcm9vdDQobm9kZTIsIF8xLCBfMjIsIHN0YXRlMTQpIHsKICByZXR1cm4gc3RhdGUxNC5hbGwobm9kZTIpOwp9CnZhciBpbml0X3Jvb3QzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvcm9vdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9pbmRleC5qcwpmdW5jdGlvbiBpbnZhbGlkMihub2RlMikgewogIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbm9kZSwgbm90IGAiICsgbm9kZTIgKyAiYCIpOwp9CmZ1bmN0aW9uIHVua25vd24yKG5vZGVfKSB7CiAgY29uc3Qgbm9kZTIgPSAoCiAgICAvKiogQHR5cGUge05vZGVzfSAqLwogICAgbm9kZV8KICApOwogIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvbXBpbGUgdW5rbm93biBub2RlIGAiICsgbm9kZTIudHlwZSArICJgIik7Cn0KdmFyIGhhbmRsZTI7CnZhciBpbml0X2hhbmRsZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X3p3aXRjaCgpOwogICAgaW5pdF9jb21tZW50KCk7CiAgICBpbml0X2RvY3R5cGUoKTsKICAgIGluaXRfZWxlbWVudCgpOwogICAgaW5pdF9yYXcoKTsKICAgIGluaXRfcm9vdDMoKTsKICAgIGluaXRfdGV4dDQoKTsKICAgIGhhbmRsZTIgPSB6d2l0Y2goInR5cGUiLCB7CiAgICAgIGludmFsaWQ6IGludmFsaWQyLAogICAgICB1bmtub3duOiB1bmtub3duMiwKICAgICAgaGFuZGxlcnM6IHsgY29tbWVudDogY29tbWVudDIsIGRvY3R5cGU6IGRvY3R5cGUyLCBlbGVtZW50OiBlbGVtZW50MywgcmF3LCByb290OiByb290NCwgdGV4dDogdGV4dDcgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHRvSHRtbCh0cmVlLCBvcHRpb25zKSB7CiAgY29uc3Qgb3B0aW9uc18gPSBvcHRpb25zIHx8IGVtcHR5T3B0aW9uczY7CiAgY29uc3QgcXVvdGUgPSBvcHRpb25zXy5xdW90ZSB8fCAnIic7CiAgY29uc3QgYWx0ZXJuYXRpdmUgPSBxdW90ZSA9PT0gJyInID8gIiciIDogJyInOwogIGlmIChxdW90ZSAhPT0gJyInICYmIHF1b3RlICE9PSAiJyIpIHsKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBxdW90ZSBgIiArIHF1b3RlICsgImAsIGV4cGVjdGVkIGAnYCBvciBgXCJgIik7CiAgfQogIGNvbnN0IHN0YXRlMTQgPSB7CiAgICBvbmU6IG9uZTIsCiAgICBhbGw6IGFsbDIsCiAgICBzZXR0aW5nczogewogICAgICBvbWl0T3B0aW9uYWxUYWdzOiBvcHRpb25zXy5vbWl0T3B0aW9uYWxUYWdzIHx8IGZhbHNlLAogICAgICBhbGxvd1BhcnNlRXJyb3JzOiBvcHRpb25zXy5hbGxvd1BhcnNlRXJyb3JzIHx8IGZhbHNlLAogICAgICBhbGxvd0Rhbmdlcm91c0NoYXJhY3RlcnM6IG9wdGlvbnNfLmFsbG93RGFuZ2Vyb3VzQ2hhcmFjdGVycyB8fCBmYWxzZSwKICAgICAgcXVvdGVTbWFydDogb3B0aW9uc18ucXVvdGVTbWFydCB8fCBmYWxzZSwKICAgICAgcHJlZmVyVW5xdW90ZWQ6IG9wdGlvbnNfLnByZWZlclVucXVvdGVkIHx8IGZhbHNlLAogICAgICB0aWdodEF0dHJpYnV0ZXM6IG9wdGlvbnNfLnRpZ2h0QXR0cmlidXRlcyB8fCBmYWxzZSwKICAgICAgdXBwZXJEb2N0eXBlOiBvcHRpb25zXy51cHBlckRvY3R5cGUgfHwgZmFsc2UsCiAgICAgIHRpZ2h0RG9jdHlwZTogb3B0aW9uc18udGlnaHREb2N0eXBlIHx8IGZhbHNlLAogICAgICBib2d1c0NvbW1lbnRzOiBvcHRpb25zXy5ib2d1c0NvbW1lbnRzIHx8IGZhbHNlLAogICAgICB0aWdodENvbW1hU2VwYXJhdGVkTGlzdHM6IG9wdGlvbnNfLnRpZ2h0Q29tbWFTZXBhcmF0ZWRMaXN0cyB8fCBmYWxzZSwKICAgICAgdGlnaHRTZWxmQ2xvc2luZzogb3B0aW9uc18udGlnaHRTZWxmQ2xvc2luZyB8fCBmYWxzZSwKICAgICAgY29sbGFwc2VFbXB0eUF0dHJpYnV0ZXM6IG9wdGlvbnNfLmNvbGxhcHNlRW1wdHlBdHRyaWJ1dGVzIHx8IGZhbHNlLAogICAgICBhbGxvd0Rhbmdlcm91c0h0bWw6IG9wdGlvbnNfLmFsbG93RGFuZ2Vyb3VzSHRtbCB8fCBmYWxzZSwKICAgICAgdm9pZHM6IG9wdGlvbnNfLnZvaWRzIHx8IGh0bWxWb2lkRWxlbWVudHMsCiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZXM6IG9wdGlvbnNfLmNoYXJhY3RlclJlZmVyZW5jZXMgfHwgZW1wdHlDaGFyYWN0ZXJSZWZlcmVuY2VzLAogICAgICBjbG9zZVNlbGZDbG9zaW5nOiBvcHRpb25zXy5jbG9zZVNlbGZDbG9zaW5nIHx8IGZhbHNlLAogICAgICBjbG9zZUVtcHR5RWxlbWVudHM6IG9wdGlvbnNfLmNsb3NlRW1wdHlFbGVtZW50cyB8fCBmYWxzZQogICAgfSwKICAgIHNjaGVtYTogb3B0aW9uc18uc3BhY2UgPT09ICJzdmciID8gc3ZnMiA6IGh0bWw0LAogICAgcXVvdGUsCiAgICBhbHRlcm5hdGl2ZQogIH07CiAgcmV0dXJuIHN0YXRlMTQub25lKAogICAgQXJyYXkuaXNBcnJheSh0cmVlKSA/IHsgdHlwZTogInJvb3QiLCBjaGlsZHJlbjogdHJlZSB9IDogdHJlZSwKICAgIHZvaWQgMCwKICAgIHZvaWQgMAogICk7Cn0KZnVuY3Rpb24gb25lMihub2RlMiwgaW5kZXgyLCBwYXJlbnQpIHsKICByZXR1cm4gaGFuZGxlMihub2RlMiwgaW5kZXgyLCBwYXJlbnQsIHRoaXMpOwp9CmZ1bmN0aW9uIGFsbDIocGFyZW50KSB7CiAgY29uc3QgcmVzdWx0cyA9IFtdOwogIGNvbnN0IGNoaWxkcmVuMiA9IHBhcmVudCAmJiBwYXJlbnQuY2hpbGRyZW4gfHwgZW1wdHlDaGlsZHJlbjI7CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGNoaWxkcmVuMi5sZW5ndGgpIHsKICAgIHJlc3VsdHNbaW5kZXgyXSA9IHRoaXMub25lKGNoaWxkcmVuMltpbmRleDJdLCBpbmRleDIsIHBhcmVudCk7CiAgfQogIHJldHVybiByZXN1bHRzLmpvaW4oIiIpOwp9CnZhciBlbXB0eU9wdGlvbnM2LCBlbXB0eUNoYXJhY3RlclJlZmVyZW5jZXMsIGVtcHR5Q2hpbGRyZW4yOwp2YXIgaW5pdF9saWIzMCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9odG1sX3ZvaWRfZWxlbWVudHMoKTsKICAgIGluaXRfcHJvcGVydHlfaW5mb3JtYXRpb24oKTsKICAgIGluaXRfaGFuZGxlMigpOwogICAgZW1wdHlPcHRpb25zNiA9IHt9OwogICAgZW1wdHlDaGFyYWN0ZXJSZWZlcmVuY2VzID0ge307CiAgICBlbXB0eUNoaWxkcmVuMiA9IFtdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2luZGV4LmpzCnZhciBpbml0X2hhc3RfdXRpbF90b19odG1sID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMzAoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1odG1sQDE2LjAuMS9ub2RlX21vZHVsZXMvcmVtYXJrLWh0bWwvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHJlbWFya0h0bWwob3B0aW9ucykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBjb25zdCB7IGhhbmRsZXJzOiBoYW5kbGVyczIsIHNhbml0aXplOiBjbGVhbiwgLi4udG9IdG1sT3B0aW9ucyB9ID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnM3OwogIGxldCBhbGxvd0Rhbmdlcm91c0h0bWwgPSBmYWxzZTsKICBsZXQgc2NoZW1hOwogIGlmICh0eXBlb2YgY2xlYW4gPT09ICJib29sZWFuIikgewogICAgYWxsb3dEYW5nZXJvdXNIdG1sID0gIWNsZWFuOwogIH0gZWxzZSBpZiAoY2xlYW4pIHsKICAgIHNjaGVtYSA9IGNsZWFuOwogIH0KICBzZWxmMi5jb21waWxlciA9IGNvbXBpbGVyMjsKICBmdW5jdGlvbiBjb21waWxlcjIodHJlZSwgZmlsZSkgewogICAgY29uc3QgaGFzdCA9IHRvSGFzdCh0cmVlLCB7IGhhbmRsZXJzOiBoYW5kbGVyczIsIGFsbG93RGFuZ2Vyb3VzSHRtbCB9KTsKICAgIGNvbnN0IHNhZmVIYXN0ID0gYWxsb3dEYW5nZXJvdXNIdG1sID8gaGFzdCA6IHNhbml0aXplKGhhc3QsIHNjaGVtYSk7CiAgICBjb25zdCByZXN1bHQgPSB0b0h0bWwoc2FmZUhhc3QsIHsgLi4udG9IdG1sT3B0aW9ucywgYWxsb3dEYW5nZXJvdXNIdG1sIH0pOwogICAgaWYgKGZpbGUuZXh0bmFtZSkgewogICAgICBmaWxlLmV4dG5hbWUgPSAiLmh0bWwiOwogICAgfQogICAgcmV0dXJuIHRyZWUgJiYgdHJlZS50eXBlID09PSAicm9vdCIgJiYgcmVzdWx0ICYmIC9bXlxyXG5dLy50ZXN0KHJlc3VsdC5jaGFyQXQocmVzdWx0Lmxlbmd0aCAtIDEpKSA/IHJlc3VsdCArICJcbiIgOiByZXN1bHQ7CiAgfQp9CnZhciBlbXB0eU9wdGlvbnM3Owp2YXIgaW5pdF9saWIzMSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1odG1sQDE2LjAuMS9ub2RlX21vZHVsZXMvcmVtYXJrLWh0bWwvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfaGFzdF91dGlsX3Nhbml0aXplKCk7CiAgICBpbml0X21kYXN0X3V0aWxfdG9faGFzdCgpOwogICAgaW5pdF9oYXN0X3V0aWxfdG9faHRtbCgpOwogICAgZW1wdHlPcHRpb25zNyA9IHt9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWh0bWxAMTYuMC4xL25vZGVfbW9kdWxlcy9yZW1hcmstaHRtbC9pbmRleC5qcwp2YXIgaW5pdF9yZW1hcmtfaHRtbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1odG1sQDE2LjAuMS9ub2RlX21vZHVsZXMvcmVtYXJrLWh0bWwvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIzMSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLXN0cmluZ2lmeUAxMS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHJlbWFya1N0cmluZ2lmeShvcHRpb25zKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHNlbGYyLmNvbXBpbGVyID0gY29tcGlsZXIyOwogIGZ1bmN0aW9uIGNvbXBpbGVyMih0cmVlKSB7CiAgICByZXR1cm4gdG9NYXJrZG93bih0cmVlLCB7CiAgICAgIC4uLnNlbGYyLmRhdGEoInNldHRpbmdzIiksCiAgICAgIC4uLm9wdGlvbnMsCiAgICAgIC8vIE5vdGU6IHRoaXMgb3B0aW9uIGlzIG5vdCBpbiB0aGUgcmVhZG1lLgogICAgICAvLyBUaGUgZ29hbCBpcyBmb3IgaXQgdG8gYmUgc2V0IGJ5IHBsdWdpbnMgb24gYGRhdGFgIGluc3RlYWQgb2YgYmVpbmcKICAgICAgLy8gcGFzc2VkIGJ5IHVzZXJzLgogICAgICBleHRlbnNpb25zOiBzZWxmMi5kYXRhKCJ0b01hcmtkb3duRXh0ZW5zaW9ucyIpIHx8IFtdCiAgICB9KTsKICB9Cn0KdmFyIGluaXRfbGliMzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstc3RyaW5naWZ5QDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9tZGFzdF91dGlsX3RvX21hcmtkb3duKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstc3RyaW5naWZ5QDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9pbmRleC5qcwp2YXIgaW5pdF9yZW1hcmtfc3RyaW5naWZ5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLXN0cmluZ2lmeUAxMS4wLjAvbm9kZV9tb2R1bGVzL3JlbWFyay1zdHJpbmdpZnkvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIzMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdHVybmRvd25ANy4yLjIvbm9kZV9tb2R1bGVzL3R1cm5kb3duL2xpYi90dXJuZG93bi5icm93c2VyLmVzLmpzCmZ1bmN0aW9uIGV4dGVuZDIoZGVzdGluYXRpb24pIHsKICBmb3IgKHZhciBpMTEgPSAxOyBpMTEgPCBhcmd1bWVudHMubGVuZ3RoOyBpMTErKykgewogICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpMTFdOwogICAgZm9yICh2YXIga2V5MiBpbiBzb3VyY2UpIHsKICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkyKSkgZGVzdGluYXRpb25ba2V5Ml0gPSBzb3VyY2Vba2V5Ml07CiAgICB9CiAgfQogIHJldHVybiBkZXN0aW5hdGlvbjsKfQpmdW5jdGlvbiByZXBlYXQyKGNoYXJhY3RlciwgY291bnQyKSB7CiAgcmV0dXJuIEFycmF5KGNvdW50MiArIDEpLmpvaW4oY2hhcmFjdGVyKTsKfQpmdW5jdGlvbiB0cmltTGVhZGluZ05ld2xpbmVzKHN0cmluZzMpIHsKICByZXR1cm4gc3RyaW5nMy5yZXBsYWNlKC9eXG4qLywgIiIpOwp9CmZ1bmN0aW9uIHRyaW1UcmFpbGluZ05ld2xpbmVzKHN0cmluZzMpIHsKICB2YXIgaW5kZXhFbmQgPSBzdHJpbmczLmxlbmd0aDsKICB3aGlsZSAoaW5kZXhFbmQgPiAwICYmIHN0cmluZzNbaW5kZXhFbmQgLSAxXSA9PT0gIlxuIikgaW5kZXhFbmQtLTsKICByZXR1cm4gc3RyaW5nMy5zdWJzdHJpbmcoMCwgaW5kZXhFbmQpOwp9CmZ1bmN0aW9uIHRyaW1OZXdsaW5lcyhzdHJpbmczKSB7CiAgcmV0dXJuIHRyaW1UcmFpbGluZ05ld2xpbmVzKHRyaW1MZWFkaW5nTmV3bGluZXMoc3RyaW5nMykpOwp9CmZ1bmN0aW9uIGlzQmxvY2sobm9kZTIpIHsKICByZXR1cm4gaXMyKG5vZGUyLCBibG9ja0VsZW1lbnRzKTsKfQpmdW5jdGlvbiBpc1ZvaWQobm9kZTIpIHsKICByZXR1cm4gaXMyKG5vZGUyLCB2b2lkRWxlbWVudHMpOwp9CmZ1bmN0aW9uIGhhc1ZvaWQobm9kZTIpIHsKICByZXR1cm4gaGFzKG5vZGUyLCB2b2lkRWxlbWVudHMpOwp9CmZ1bmN0aW9uIGlzTWVhbmluZ2Z1bFdoZW5CbGFuayhub2RlMikgewogIHJldHVybiBpczIobm9kZTIsIG1lYW5pbmdmdWxXaGVuQmxhbmtFbGVtZW50cyk7Cn0KZnVuY3Rpb24gaGFzTWVhbmluZ2Z1bFdoZW5CbGFuayhub2RlMikgewogIHJldHVybiBoYXMobm9kZTIsIG1lYW5pbmdmdWxXaGVuQmxhbmtFbGVtZW50cyk7Cn0KZnVuY3Rpb24gaXMyKG5vZGUyLCB0YWdOYW1lcykgewogIHJldHVybiB0YWdOYW1lcy5pbmRleE9mKG5vZGUyLm5vZGVOYW1lKSA+PSAwOwp9CmZ1bmN0aW9uIGhhcyhub2RlMiwgdGFnTmFtZXMpIHsKICByZXR1cm4gbm9kZTIuZ2V0RWxlbWVudHNCeVRhZ05hbWUgJiYgdGFnTmFtZXMuc29tZShmdW5jdGlvbih0YWdOYW1lKSB7CiAgICByZXR1cm4gbm9kZTIuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSkubGVuZ3RoOwogIH0pOwp9CmZ1bmN0aW9uIGNsZWFuQXR0cmlidXRlKGF0dHJpYnV0ZSkgewogIHJldHVybiBhdHRyaWJ1dGUgPyBhdHRyaWJ1dGUucmVwbGFjZSgvKFxuK1xzKikrL2csICJcbiIpIDogIiI7Cn0KZnVuY3Rpb24gUnVsZXMob3B0aW9ucykgewogIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CiAgdGhpcy5fa2VlcCA9IFtdOwogIHRoaXMuX3JlbW92ZSA9IFtdOwogIHRoaXMuYmxhbmtSdWxlID0gewogICAgcmVwbGFjZW1lbnQ6IG9wdGlvbnMuYmxhbmtSZXBsYWNlbWVudAogIH07CiAgdGhpcy5rZWVwUmVwbGFjZW1lbnQgPSBvcHRpb25zLmtlZXBSZXBsYWNlbWVudDsKICB0aGlzLmRlZmF1bHRSdWxlID0gewogICAgcmVwbGFjZW1lbnQ6IG9wdGlvbnMuZGVmYXVsdFJlcGxhY2VtZW50CiAgfTsKICB0aGlzLmFycmF5ID0gW107CiAgZm9yICh2YXIga2V5MiBpbiBvcHRpb25zLnJ1bGVzKSB0aGlzLmFycmF5LnB1c2gob3B0aW9ucy5ydWxlc1trZXkyXSk7Cn0KZnVuY3Rpb24gZmluZFJ1bGUocnVsZXMzLCBub2RlMiwgb3B0aW9ucykgewogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IHJ1bGVzMy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YXIgcnVsZSA9IHJ1bGVzM1tpMTFdOwogICAgaWYgKGZpbHRlclZhbHVlKHJ1bGUsIG5vZGUyLCBvcHRpb25zKSkgcmV0dXJuIHJ1bGU7CiAgfQogIHJldHVybiB2b2lkIDA7Cn0KZnVuY3Rpb24gZmlsdGVyVmFsdWUocnVsZSwgbm9kZTIsIG9wdGlvbnMpIHsKICB2YXIgZmlsdGVyMiA9IHJ1bGUuZmlsdGVyOwogIGlmICh0eXBlb2YgZmlsdGVyMiA9PT0gInN0cmluZyIpIHsKICAgIGlmIChmaWx0ZXIyID09PSBub2RlMi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSByZXR1cm4gdHJ1ZTsKICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyMikpIHsKICAgIGlmIChmaWx0ZXIyLmluZGV4T2Yobm9kZTIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgPiAtMSkgcmV0dXJuIHRydWU7CiAgfSBlbHNlIGlmICh0eXBlb2YgZmlsdGVyMiA9PT0gImZ1bmN0aW9uIikgewogICAgaWYgKGZpbHRlcjIuY2FsbChydWxlLCBub2RlMiwgb3B0aW9ucykpIHJldHVybiB0cnVlOwogIH0gZWxzZSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJgZmlsdGVyYCBuZWVkcyB0byBiZSBhIHN0cmluZywgYXJyYXksIG9yIGZ1bmN0aW9uIik7CiAgfQp9CmZ1bmN0aW9uIGNvbGxhcHNlV2hpdGVzcGFjZShvcHRpb25zKSB7CiAgdmFyIGVsZW1lbnQ0ID0gb3B0aW9ucy5lbGVtZW50OwogIHZhciBpc0Jsb2NrMiA9IG9wdGlvbnMuaXNCbG9jazsKICB2YXIgaXNWb2lkMiA9IG9wdGlvbnMuaXNWb2lkOwogIHZhciBpc1ByZSA9IG9wdGlvbnMuaXNQcmUgfHwgZnVuY3Rpb24obm9kZTMpIHsKICAgIHJldHVybiBub2RlMy5ub2RlTmFtZSA9PT0gIlBSRSI7CiAgfTsKICBpZiAoIWVsZW1lbnQ0LmZpcnN0Q2hpbGQgfHwgaXNQcmUoZWxlbWVudDQpKSByZXR1cm47CiAgdmFyIHByZXZUZXh0ID0gbnVsbDsKICB2YXIga2VlcExlYWRpbmdXcyA9IGZhbHNlOwogIHZhciBwcmV2ID0gbnVsbDsKICB2YXIgbm9kZTIgPSBuZXh0KHByZXYsIGVsZW1lbnQ0LCBpc1ByZSk7CiAgd2hpbGUgKG5vZGUyICE9PSBlbGVtZW50NCkgewogICAgaWYgKG5vZGUyLm5vZGVUeXBlID09PSAzIHx8IG5vZGUyLm5vZGVUeXBlID09PSA0KSB7CiAgICAgIHZhciB0ZXh0OSA9IG5vZGUyLmRhdGEucmVwbGFjZSgvWyBcclxuXHRdKy9nLCAiICIpOwogICAgICBpZiAoKCFwcmV2VGV4dCB8fCAvICQvLnRlc3QocHJldlRleHQuZGF0YSkpICYmICFrZWVwTGVhZGluZ1dzICYmIHRleHQ5WzBdID09PSAiICIpIHsKICAgICAgICB0ZXh0OSA9IHRleHQ5LnN1YnN0cigxKTsKICAgICAgfQogICAgICBpZiAoIXRleHQ5KSB7CiAgICAgICAgbm9kZTIgPSByZW1vdmUobm9kZTIpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIG5vZGUyLmRhdGEgPSB0ZXh0OTsKICAgICAgcHJldlRleHQgPSBub2RlMjsKICAgIH0gZWxzZSBpZiAobm9kZTIubm9kZVR5cGUgPT09IDEpIHsKICAgICAgaWYgKGlzQmxvY2syKG5vZGUyKSB8fCBub2RlMi5ub2RlTmFtZSA9PT0gIkJSIikgewogICAgICAgIGlmIChwcmV2VGV4dCkgewogICAgICAgICAgcHJldlRleHQuZGF0YSA9IHByZXZUZXh0LmRhdGEucmVwbGFjZSgvICQvLCAiIik7CiAgICAgICAgfQogICAgICAgIHByZXZUZXh0ID0gbnVsbDsKICAgICAgICBrZWVwTGVhZGluZ1dzID0gZmFsc2U7CiAgICAgIH0gZWxzZSBpZiAoaXNWb2lkMihub2RlMikgfHwgaXNQcmUobm9kZTIpKSB7CiAgICAgICAgcHJldlRleHQgPSBudWxsOwogICAgICAgIGtlZXBMZWFkaW5nV3MgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKHByZXZUZXh0KSB7CiAgICAgICAga2VlcExlYWRpbmdXcyA9IGZhbHNlOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBub2RlMiA9IHJlbW92ZShub2RlMik7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgdmFyIG5leHROb2RlID0gbmV4dChwcmV2LCBub2RlMiwgaXNQcmUpOwogICAgcHJldiA9IG5vZGUyOwogICAgbm9kZTIgPSBuZXh0Tm9kZTsKICB9CiAgaWYgKHByZXZUZXh0KSB7CiAgICBwcmV2VGV4dC5kYXRhID0gcHJldlRleHQuZGF0YS5yZXBsYWNlKC8gJC8sICIiKTsKICAgIGlmICghcHJldlRleHQuZGF0YSkgewogICAgICByZW1vdmUocHJldlRleHQpOwogICAgfQogIH0KfQpmdW5jdGlvbiByZW1vdmUobm9kZTIpIHsKICB2YXIgbmV4dDIgPSBub2RlMi5uZXh0U2libGluZyB8fCBub2RlMi5wYXJlbnROb2RlOwogIG5vZGUyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZTIpOwogIHJldHVybiBuZXh0MjsKfQpmdW5jdGlvbiBuZXh0KHByZXYsIGN1cnJlbnQsIGlzUHJlKSB7CiAgaWYgKHByZXYgJiYgcHJldi5wYXJlbnROb2RlID09PSBjdXJyZW50IHx8IGlzUHJlKGN1cnJlbnQpKSB7CiAgICByZXR1cm4gY3VycmVudC5uZXh0U2libGluZyB8fCBjdXJyZW50LnBhcmVudE5vZGU7CiAgfQogIHJldHVybiBjdXJyZW50LmZpcnN0Q2hpbGQgfHwgY3VycmVudC5uZXh0U2libGluZyB8fCBjdXJyZW50LnBhcmVudE5vZGU7Cn0KZnVuY3Rpb24gY2FuUGFyc2VIVE1MTmF0aXZlbHkoKSB7CiAgdmFyIFBhcnNlcjIgPSByb290NS5ET01QYXJzZXI7CiAgdmFyIGNhblBhcnNlID0gZmFsc2U7CiAgdHJ5IHsKICAgIGlmIChuZXcgUGFyc2VyMigpLnBhcnNlRnJvbVN0cmluZygiIiwgInRleHQvaHRtbCIpKSB7CiAgICAgIGNhblBhcnNlID0gdHJ1ZTsKICAgIH0KICB9IGNhdGNoIChlMTEpIHsKICB9CiAgcmV0dXJuIGNhblBhcnNlOwp9CmZ1bmN0aW9uIGNyZWF0ZUhUTUxQYXJzZXIoKSB7CiAgdmFyIFBhcnNlcjIgPSBmdW5jdGlvbigpIHsKICB9OwogIHsKICAgIGlmIChzaG91bGRVc2VBY3RpdmVYKCkpIHsKICAgICAgUGFyc2VyMi5wcm90b3R5cGUucGFyc2VGcm9tU3RyaW5nID0gZnVuY3Rpb24oc3RyaW5nMykgewogICAgICAgIHZhciBkb2MgPSBuZXcgd2luZG93LkFjdGl2ZVhPYmplY3QoImh0bWxmaWxlIik7CiAgICAgICAgZG9jLmRlc2lnbk1vZGUgPSAib24iOwogICAgICAgIGRvYy5vcGVuKCk7CiAgICAgICAgZG9jLndyaXRlKHN0cmluZzMpOwogICAgICAgIGRvYy5jbG9zZSgpOwogICAgICAgIHJldHVybiBkb2M7CiAgICAgIH07CiAgICB9IGVsc2UgewogICAgICBQYXJzZXIyLnByb3RvdHlwZS5wYXJzZUZyb21TdHJpbmcgPSBmdW5jdGlvbihzdHJpbmczKSB7CiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIik7CiAgICAgICAgZG9jLm9wZW4oKTsKICAgICAgICBkb2Mud3JpdGUoc3RyaW5nMyk7CiAgICAgICAgZG9jLmNsb3NlKCk7CiAgICAgICAgcmV0dXJuIGRvYzsKICAgICAgfTsKICAgIH0KICB9CiAgcmV0dXJuIFBhcnNlcjI7Cn0KZnVuY3Rpb24gc2hvdWxkVXNlQWN0aXZlWCgpIHsKICB2YXIgdXNlQWN0aXZlWCA9IGZhbHNlOwogIHRyeSB7CiAgICBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLm9wZW4oKTsKICB9IGNhdGNoIChlMTEpIHsKICAgIGlmIChyb290NS5BY3RpdmVYT2JqZWN0KSB1c2VBY3RpdmVYID0gdHJ1ZTsKICB9CiAgcmV0dXJuIHVzZUFjdGl2ZVg7Cn0KZnVuY3Rpb24gUm9vdE5vZGUoaW5wdXQsIG9wdGlvbnMpIHsKICB2YXIgcm9vdDY7CiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gInN0cmluZyIpIHsKICAgIHZhciBkb2MgPSBodG1sUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKAogICAgICAvLyBET00gcGFyc2VycyBhcnJhbmdlIGVsZW1lbnRzIGluIHRoZSA8aGVhZD4gYW5kIDxib2R5Pi4KICAgICAgLy8gV3JhcHBpbmcgaW4gYSBjdXN0b20gZWxlbWVudCBlbnN1cmVzIGVsZW1lbnRzIGFyZSByZWxpYWJseSBhcnJhbmdlZCBpbgogICAgICAvLyBhIHNpbmdsZSBlbGVtZW50LgogICAgICAnPHgtdHVybmRvd24gaWQ9InR1cm5kb3duLXJvb3QiPicgKyBpbnB1dCArICI8L3gtdHVybmRvd24+IiwKICAgICAgInRleHQvaHRtbCIKICAgICk7CiAgICByb290NiA9IGRvYy5nZXRFbGVtZW50QnlJZCgidHVybmRvd24tcm9vdCIpOwogIH0gZWxzZSB7CiAgICByb290NiA9IGlucHV0LmNsb25lTm9kZSh0cnVlKTsKICB9CiAgY29sbGFwc2VXaGl0ZXNwYWNlKHsKICAgIGVsZW1lbnQ6IHJvb3Q2LAogICAgaXNCbG9jaywKICAgIGlzVm9pZCwKICAgIGlzUHJlOiBvcHRpb25zLnByZWZvcm1hdHRlZENvZGUgPyBpc1ByZU9yQ29kZSA6IG51bGwKICB9KTsKICByZXR1cm4gcm9vdDY7Cn0KZnVuY3Rpb24gaHRtbFBhcnNlcigpIHsKICBfaHRtbFBhcnNlciA9IF9odG1sUGFyc2VyIHx8IG5ldyBIVE1MUGFyc2VyKCk7CiAgcmV0dXJuIF9odG1sUGFyc2VyOwp9CmZ1bmN0aW9uIGlzUHJlT3JDb2RlKG5vZGUyKSB7CiAgcmV0dXJuIG5vZGUyLm5vZGVOYW1lID09PSAiUFJFIiB8fCBub2RlMi5ub2RlTmFtZSA9PT0gIkNPREUiOwp9CmZ1bmN0aW9uIE5vZGUyKG5vZGUyLCBvcHRpb25zKSB7CiAgbm9kZTIuaXNCbG9jayA9IGlzQmxvY2sobm9kZTIpOwogIG5vZGUyLmlzQ29kZSA9IG5vZGUyLm5vZGVOYW1lID09PSAiQ09ERSIgfHwgbm9kZTIucGFyZW50Tm9kZS5pc0NvZGU7CiAgbm9kZTIuaXNCbGFuayA9IGlzQmxhbmsobm9kZTIpOwogIG5vZGUyLmZsYW5raW5nV2hpdGVzcGFjZSA9IGZsYW5raW5nV2hpdGVzcGFjZShub2RlMiwgb3B0aW9ucyk7CiAgcmV0dXJuIG5vZGUyOwp9CmZ1bmN0aW9uIGlzQmxhbmsobm9kZTIpIHsKICByZXR1cm4gIWlzVm9pZChub2RlMikgJiYgIWlzTWVhbmluZ2Z1bFdoZW5CbGFuayhub2RlMikgJiYgL15ccyokL2kudGVzdChub2RlMi50ZXh0Q29udGVudCkgJiYgIWhhc1ZvaWQobm9kZTIpICYmICFoYXNNZWFuaW5nZnVsV2hlbkJsYW5rKG5vZGUyKTsKfQpmdW5jdGlvbiBmbGFua2luZ1doaXRlc3BhY2Uobm9kZTIsIG9wdGlvbnMpIHsKICBpZiAobm9kZTIuaXNCbG9jayB8fCBvcHRpb25zLnByZWZvcm1hdHRlZENvZGUgJiYgbm9kZTIuaXNDb2RlKSB7CiAgICByZXR1cm4geyBsZWFkaW5nOiAiIiwgdHJhaWxpbmc6ICIiIH07CiAgfQogIHZhciBlZGdlcyA9IGVkZ2VXaGl0ZXNwYWNlKG5vZGUyLnRleHRDb250ZW50KTsKICBpZiAoZWRnZXMubGVhZGluZ0FzY2lpICYmIGlzRmxhbmtlZEJ5V2hpdGVzcGFjZSgibGVmdCIsIG5vZGUyLCBvcHRpb25zKSkgewogICAgZWRnZXMubGVhZGluZyA9IGVkZ2VzLmxlYWRpbmdOb25Bc2NpaTsKICB9CiAgaWYgKGVkZ2VzLnRyYWlsaW5nQXNjaWkgJiYgaXNGbGFua2VkQnlXaGl0ZXNwYWNlKCJyaWdodCIsIG5vZGUyLCBvcHRpb25zKSkgewogICAgZWRnZXMudHJhaWxpbmcgPSBlZGdlcy50cmFpbGluZ05vbkFzY2lpOwogIH0KICByZXR1cm4geyBsZWFkaW5nOiBlZGdlcy5sZWFkaW5nLCB0cmFpbGluZzogZWRnZXMudHJhaWxpbmcgfTsKfQpmdW5jdGlvbiBlZGdlV2hpdGVzcGFjZShzdHJpbmczKSB7CiAgdmFyIG02ID0gc3RyaW5nMy5tYXRjaCgvXigoWyBcdFxyXG5dKikoXHMqKSkoPzooPz1cUylbXHNcU10qXFMpPygoXHMqPykoWyBcdFxyXG5dKikpJC8pOwogIHJldHVybiB7CiAgICBsZWFkaW5nOiBtNlsxXSwKICAgIC8vIHdob2xlIHN0cmluZyBmb3Igd2hpdGVzcGFjZS1vbmx5IHN0cmluZ3MKICAgIGxlYWRpbmdBc2NpaTogbTZbMl0sCiAgICBsZWFkaW5nTm9uQXNjaWk6IG02WzNdLAogICAgdHJhaWxpbmc6IG02WzRdLAogICAgLy8gZW1wdHkgZm9yIHdoaXRlc3BhY2Utb25seSBzdHJpbmdzCiAgICB0cmFpbGluZ05vbkFzY2lpOiBtNls1XSwKICAgIHRyYWlsaW5nQXNjaWk6IG02WzZdCiAgfTsKfQpmdW5jdGlvbiBpc0ZsYW5rZWRCeVdoaXRlc3BhY2Uoc2lkZSwgbm9kZTIsIG9wdGlvbnMpIHsKICB2YXIgc2libGluZzsKICB2YXIgcmVnRXhwOwogIHZhciBpc0ZsYW5rZWQ7CiAgaWYgKHNpZGUgPT09ICJsZWZ0IikgewogICAgc2libGluZyA9IG5vZGUyLnByZXZpb3VzU2libGluZzsKICAgIHJlZ0V4cCA9IC8gJC87CiAgfSBlbHNlIHsKICAgIHNpYmxpbmcgPSBub2RlMi5uZXh0U2libGluZzsKICAgIHJlZ0V4cCA9IC9eIC87CiAgfQogIGlmIChzaWJsaW5nKSB7CiAgICBpZiAoc2libGluZy5ub2RlVHlwZSA9PT0gMykgewogICAgICBpc0ZsYW5rZWQgPSByZWdFeHAudGVzdChzaWJsaW5nLm5vZGVWYWx1ZSk7CiAgICB9IGVsc2UgaWYgKG9wdGlvbnMucHJlZm9ybWF0dGVkQ29kZSAmJiBzaWJsaW5nLm5vZGVOYW1lID09PSAiQ09ERSIpIHsKICAgICAgaXNGbGFua2VkID0gZmFsc2U7CiAgICB9IGVsc2UgaWYgKHNpYmxpbmcubm9kZVR5cGUgPT09IDEgJiYgIWlzQmxvY2soc2libGluZykpIHsKICAgICAgaXNGbGFua2VkID0gcmVnRXhwLnRlc3Qoc2libGluZy50ZXh0Q29udGVudCk7CiAgICB9CiAgfQogIHJldHVybiBpc0ZsYW5rZWQ7Cn0KZnVuY3Rpb24gVHVybmRvd25TZXJ2aWNlKG9wdGlvbnMpIHsKICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVHVybmRvd25TZXJ2aWNlKSkgcmV0dXJuIG5ldyBUdXJuZG93blNlcnZpY2Uob3B0aW9ucyk7CiAgdmFyIGRlZmF1bHRzID0gewogICAgcnVsZXMsCiAgICBoZWFkaW5nU3R5bGU6ICJzZXRleHQiLAogICAgaHI6ICIqICogKiIsCiAgICBidWxsZXRMaXN0TWFya2VyOiAiKiIsCiAgICBjb2RlQmxvY2tTdHlsZTogImluZGVudGVkIiwKICAgIGZlbmNlOiAiYGBgIiwKICAgIGVtRGVsaW1pdGVyOiAiXyIsCiAgICBzdHJvbmdEZWxpbWl0ZXI6ICIqKiIsCiAgICBsaW5rU3R5bGU6ICJpbmxpbmVkIiwKICAgIGxpbmtSZWZlcmVuY2VTdHlsZTogImZ1bGwiLAogICAgYnI6ICIgICIsCiAgICBwcmVmb3JtYXR0ZWRDb2RlOiBmYWxzZSwKICAgIGJsYW5rUmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMikgewogICAgICByZXR1cm4gbm9kZTIuaXNCbG9jayA/ICJcblxuIiA6ICIiOwogICAgfSwKICAgIGtlZXBSZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgIHJldHVybiBub2RlMi5pc0Jsb2NrID8gIlxuXG4iICsgbm9kZTIub3V0ZXJIVE1MICsgIlxuXG4iIDogbm9kZTIub3V0ZXJIVE1MOwogICAgfSwKICAgIGRlZmF1bHRSZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgIHJldHVybiBub2RlMi5pc0Jsb2NrID8gIlxuXG4iICsgY29udGVudDMgKyAiXG5cbiIgOiBjb250ZW50MzsKICAgIH0KICB9OwogIHRoaXMub3B0aW9ucyA9IGV4dGVuZDIoe30sIGRlZmF1bHRzLCBvcHRpb25zKTsKICB0aGlzLnJ1bGVzID0gbmV3IFJ1bGVzKHRoaXMub3B0aW9ucyk7Cn0KZnVuY3Rpb24gcHJvY2VzczMocGFyZW50Tm9kZSkgewogIHZhciBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHJlZHVjZTIuY2FsbChwYXJlbnROb2RlLmNoaWxkTm9kZXMsIGZ1bmN0aW9uKG91dHB1dCwgbm9kZTIpIHsKICAgIG5vZGUyID0gbmV3IE5vZGUyKG5vZGUyLCBzZWxmMi5vcHRpb25zKTsKICAgIHZhciByZXBsYWNlbWVudCA9ICIiOwogICAgaWYgKG5vZGUyLm5vZGVUeXBlID09PSAzKSB7CiAgICAgIHJlcGxhY2VtZW50ID0gbm9kZTIuaXNDb2RlID8gbm9kZTIubm9kZVZhbHVlIDogc2VsZjIuZXNjYXBlKG5vZGUyLm5vZGVWYWx1ZSk7CiAgICB9IGVsc2UgaWYgKG5vZGUyLm5vZGVUeXBlID09PSAxKSB7CiAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnRGb3JOb2RlLmNhbGwoc2VsZjIsIG5vZGUyKTsKICAgIH0KICAgIHJldHVybiBqb2luMyhvdXRwdXQsIHJlcGxhY2VtZW50KTsKICB9LCAiIik7Cn0KZnVuY3Rpb24gcG9zdFByb2Nlc3Mob3V0cHV0KSB7CiAgdmFyIHNlbGYyID0gdGhpczsKICB0aGlzLnJ1bGVzLmZvckVhY2goZnVuY3Rpb24ocnVsZSkgewogICAgaWYgKHR5cGVvZiBydWxlLmFwcGVuZCA9PT0gImZ1bmN0aW9uIikgewogICAgICBvdXRwdXQgPSBqb2luMyhvdXRwdXQsIHJ1bGUuYXBwZW5kKHNlbGYyLm9wdGlvbnMpKTsKICAgIH0KICB9KTsKICByZXR1cm4gb3V0cHV0LnJlcGxhY2UoL15bXHRcclxuXSsvLCAiIikucmVwbGFjZSgvW1x0XHJcblxzXSskLywgIiIpOwp9CmZ1bmN0aW9uIHJlcGxhY2VtZW50Rm9yTm9kZShub2RlMikgewogIHZhciBydWxlID0gdGhpcy5ydWxlcy5mb3JOb2RlKG5vZGUyKTsKICB2YXIgY29udGVudDMgPSBwcm9jZXNzMy5jYWxsKHRoaXMsIG5vZGUyKTsKICB2YXIgd2hpdGVzcGFjZTIgPSBub2RlMi5mbGFua2luZ1doaXRlc3BhY2U7CiAgaWYgKHdoaXRlc3BhY2UyLmxlYWRpbmcgfHwgd2hpdGVzcGFjZTIudHJhaWxpbmcpIGNvbnRlbnQzID0gY29udGVudDMudHJpbSgpOwogIHJldHVybiB3aGl0ZXNwYWNlMi5sZWFkaW5nICsgcnVsZS5yZXBsYWNlbWVudChjb250ZW50Mywgbm9kZTIsIHRoaXMub3B0aW9ucykgKyB3aGl0ZXNwYWNlMi50cmFpbGluZzsKfQpmdW5jdGlvbiBqb2luMyhvdXRwdXQsIHJlcGxhY2VtZW50KSB7CiAgdmFyIHMxID0gdHJpbVRyYWlsaW5nTmV3bGluZXMob3V0cHV0KTsKICB2YXIgczIyID0gdHJpbUxlYWRpbmdOZXdsaW5lcyhyZXBsYWNlbWVudCk7CiAgdmFyIG5scyA9IE1hdGgubWF4KG91dHB1dC5sZW5ndGggLSBzMS5sZW5ndGgsIHJlcGxhY2VtZW50Lmxlbmd0aCAtIHMyMi5sZW5ndGgpOwogIHZhciBzZXBhcmF0b3IgPSAiXG5cbiIuc3Vic3RyaW5nKDAsIG5scyk7CiAgcmV0dXJuIHMxICsgc2VwYXJhdG9yICsgczIyOwp9CmZ1bmN0aW9uIGNhbkNvbnZlcnQoaW5wdXQpIHsKICByZXR1cm4gaW5wdXQgIT0gbnVsbCAmJiAodHlwZW9mIGlucHV0ID09PSAic3RyaW5nIiB8fCBpbnB1dC5ub2RlVHlwZSAmJiAoaW5wdXQubm9kZVR5cGUgPT09IDEgfHwgaW5wdXQubm9kZVR5cGUgPT09IDkgfHwgaW5wdXQubm9kZVR5cGUgPT09IDExKSk7Cn0KdmFyIGJsb2NrRWxlbWVudHMsIHZvaWRFbGVtZW50cywgbWVhbmluZ2Z1bFdoZW5CbGFua0VsZW1lbnRzLCBydWxlcywgcm9vdDUsIEhUTUxQYXJzZXIsIF9odG1sUGFyc2VyLCByZWR1Y2UyLCBlc2NhcGVzLCB0dXJuZG93bl9icm93c2VyX2VzX2RlZmF1bHQ7CnZhciBpbml0X3R1cm5kb3duX2Jyb3dzZXJfZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS90dXJuZG93bkA3LjIuMi9ub2RlX21vZHVsZXMvdHVybmRvd24vbGliL3R1cm5kb3duLmJyb3dzZXIuZXMuanMiKCkgewogICAgYmxvY2tFbGVtZW50cyA9IFsKICAgICAgIkFERFJFU1MiLAogICAgICAiQVJUSUNMRSIsCiAgICAgICJBU0lERSIsCiAgICAgICJBVURJTyIsCiAgICAgICJCTE9DS1FVT1RFIiwKICAgICAgIkJPRFkiLAogICAgICAiQ0FOVkFTIiwKICAgICAgIkNFTlRFUiIsCiAgICAgICJERCIsCiAgICAgICJESVIiLAogICAgICAiRElWIiwKICAgICAgIkRMIiwKICAgICAgIkRUIiwKICAgICAgIkZJRUxEU0VUIiwKICAgICAgIkZJR0NBUFRJT04iLAogICAgICAiRklHVVJFIiwKICAgICAgIkZPT1RFUiIsCiAgICAgICJGT1JNIiwKICAgICAgIkZSQU1FU0VUIiwKICAgICAgIkgxIiwKICAgICAgIkgyIiwKICAgICAgIkgzIiwKICAgICAgIkg0IiwKICAgICAgIkg1IiwKICAgICAgIkg2IiwKICAgICAgIkhFQURFUiIsCiAgICAgICJIR1JPVVAiLAogICAgICAiSFIiLAogICAgICAiSFRNTCIsCiAgICAgICJJU0lOREVYIiwKICAgICAgIkxJIiwKICAgICAgIk1BSU4iLAogICAgICAiTUVOVSIsCiAgICAgICJOQVYiLAogICAgICAiTk9GUkFNRVMiLAogICAgICAiTk9TQ1JJUFQiLAogICAgICAiT0wiLAogICAgICAiT1VUUFVUIiwKICAgICAgIlAiLAogICAgICAiUFJFIiwKICAgICAgIlNFQ1RJT04iLAogICAgICAiVEFCTEUiLAogICAgICAiVEJPRFkiLAogICAgICAiVEQiLAogICAgICAiVEZPT1QiLAogICAgICAiVEgiLAogICAgICAiVEhFQUQiLAogICAgICAiVFIiLAogICAgICAiVUwiCiAgICBdOwogICAgdm9pZEVsZW1lbnRzID0gWwogICAgICAiQVJFQSIsCiAgICAgICJCQVNFIiwKICAgICAgIkJSIiwKICAgICAgIkNPTCIsCiAgICAgICJDT01NQU5EIiwKICAgICAgIkVNQkVEIiwKICAgICAgIkhSIiwKICAgICAgIklNRyIsCiAgICAgICJJTlBVVCIsCiAgICAgICJLRVlHRU4iLAogICAgICAiTElOSyIsCiAgICAgICJNRVRBIiwKICAgICAgIlBBUkFNIiwKICAgICAgIlNPVVJDRSIsCiAgICAgICJUUkFDSyIsCiAgICAgICJXQlIiCiAgICBdOwogICAgbWVhbmluZ2Z1bFdoZW5CbGFua0VsZW1lbnRzID0gWwogICAgICAiQSIsCiAgICAgICJUQUJMRSIsCiAgICAgICJUSEVBRCIsCiAgICAgICJUQk9EWSIsCiAgICAgICJURk9PVCIsCiAgICAgICJUSCIsCiAgICAgICJURCIsCiAgICAgICJJRlJBTUUiLAogICAgICAiU0NSSVBUIiwKICAgICAgIkFVRElPIiwKICAgICAgIlZJREVPIgogICAgXTsKICAgIHJ1bGVzID0ge307CiAgICBydWxlcy5wYXJhZ3JhcGggPSB7CiAgICAgIGZpbHRlcjogInAiLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMpIHsKICAgICAgICByZXR1cm4gIlxuXG4iICsgY29udGVudDMgKyAiXG5cbiI7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5saW5lQnJlYWsgPSB7CiAgICAgIGZpbHRlcjogImJyIiwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiBvcHRpb25zLmJyICsgIlxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmhlYWRpbmcgPSB7CiAgICAgIGZpbHRlcjogWyJoMSIsICJoMiIsICJoMyIsICJoNCIsICJoNSIsICJoNiJdLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIGhMZXZlbCA9IE51bWJlcihub2RlMi5ub2RlTmFtZS5jaGFyQXQoMSkpOwogICAgICAgIGlmIChvcHRpb25zLmhlYWRpbmdTdHlsZSA9PT0gInNldGV4dCIgJiYgaExldmVsIDwgMykgewogICAgICAgICAgdmFyIHVuZGVybGluZSA9IHJlcGVhdDIoaExldmVsID09PSAxID8gIj0iIDogIi0iLCBjb250ZW50My5sZW5ndGgpOwogICAgICAgICAgcmV0dXJuICJcblxuIiArIGNvbnRlbnQzICsgIlxuIiArIHVuZGVybGluZSArICJcblxuIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuICJcblxuIiArIHJlcGVhdDIoIiMiLCBoTGV2ZWwpICsgIiAiICsgY29udGVudDMgKyAiXG5cbiI7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgcnVsZXMuYmxvY2txdW90ZSA9IHsKICAgICAgZmlsdGVyOiAiYmxvY2txdW90ZSIsCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50MykgewogICAgICAgIGNvbnRlbnQzID0gdHJpbU5ld2xpbmVzKGNvbnRlbnQzKS5yZXBsYWNlKC9eL2dtLCAiPiAiKTsKICAgICAgICByZXR1cm4gIlxuXG4iICsgY29udGVudDMgKyAiXG5cbiI7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5saXN0ID0gewogICAgICBmaWx0ZXI6IFsidWwiLCAib2wiXSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMikgewogICAgICAgIHZhciBwYXJlbnQgPSBub2RlMi5wYXJlbnROb2RlOwogICAgICAgIGlmIChwYXJlbnQubm9kZU5hbWUgPT09ICJMSSIgJiYgcGFyZW50Lmxhc3RFbGVtZW50Q2hpbGQgPT09IG5vZGUyKSB7CiAgICAgICAgICByZXR1cm4gIlxuIiArIGNvbnRlbnQzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gIlxuXG4iICsgY29udGVudDMgKyAiXG5cbiI7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgcnVsZXMubGlzdEl0ZW0gPSB7CiAgICAgIGZpbHRlcjogImxpIiwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMiwgb3B0aW9ucykgewogICAgICAgIHZhciBwcmVmaXg0ID0gb3B0aW9ucy5idWxsZXRMaXN0TWFya2VyICsgIiAgICI7CiAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7CiAgICAgICAgaWYgKHBhcmVudC5ub2RlTmFtZSA9PT0gIk9MIikgewogICAgICAgICAgdmFyIHN0YXJ0ID0gcGFyZW50LmdldEF0dHJpYnV0ZSgic3RhcnQiKTsKICAgICAgICAgIHZhciBpbmRleDIgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHBhcmVudC5jaGlsZHJlbiwgbm9kZTIpOwogICAgICAgICAgcHJlZml4NCA9IChzdGFydCA/IE51bWJlcihzdGFydCkgKyBpbmRleDIgOiBpbmRleDIgKyAxKSArICIuICAiOwogICAgICAgIH0KICAgICAgICB2YXIgaXNQYXJhZ3JhcGggPSAvXG4kLy50ZXN0KGNvbnRlbnQzKTsKICAgICAgICBjb250ZW50MyA9IHRyaW1OZXdsaW5lcyhjb250ZW50MykgKyAoaXNQYXJhZ3JhcGggPyAiXG4iIDogIiIpOwogICAgICAgIGNvbnRlbnQzID0gY29udGVudDMucmVwbGFjZSgvXG4vZ20sICJcbiIgKyAiICIucmVwZWF0KHByZWZpeDQubGVuZ3RoKSk7CiAgICAgICAgcmV0dXJuIHByZWZpeDQgKyBjb250ZW50MyArIChub2RlMi5uZXh0U2libGluZyA/ICJcbiIgOiAiIik7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5pbmRlbnRlZENvZGVCbG9jayA9IHsKICAgICAgZmlsdGVyOiBmdW5jdGlvbihub2RlMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiBvcHRpb25zLmNvZGVCbG9ja1N0eWxlID09PSAiaW5kZW50ZWQiICYmIG5vZGUyLm5vZGVOYW1lID09PSAiUFJFIiAmJiBub2RlMi5maXJzdENoaWxkICYmIG5vZGUyLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT09ICJDT0RFIjsKICAgICAgfSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiAiXG5cbiAgICAiICsgbm9kZTIuZmlyc3RDaGlsZC50ZXh0Q29udGVudC5yZXBsYWNlKC9cbi9nLCAiXG4gICAgIikgKyAiXG5cbiI7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5mZW5jZWRDb2RlQmxvY2sgPSB7CiAgICAgIGZpbHRlcjogZnVuY3Rpb24obm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gb3B0aW9ucy5jb2RlQmxvY2tTdHlsZSA9PT0gImZlbmNlZCIgJiYgbm9kZTIubm9kZU5hbWUgPT09ICJQUkUiICYmIG5vZGUyLmZpcnN0Q2hpbGQgJiYgbm9kZTIuZmlyc3RDaGlsZC5ub2RlTmFtZSA9PT0gIkNPREUiOwogICAgICB9LAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIGNsYXNzTmFtZSA9IG5vZGUyLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpIHx8ICIiOwogICAgICAgIHZhciBsYW5ndWFnZSA9IChjbGFzc05hbWUubWF0Y2goL2xhbmd1YWdlLShcUyspLykgfHwgW251bGwsICIiXSlbMV07CiAgICAgICAgdmFyIGNvZGU0ID0gbm9kZTIuZmlyc3RDaGlsZC50ZXh0Q29udGVudDsKICAgICAgICB2YXIgZmVuY2VDaGFyID0gb3B0aW9ucy5mZW5jZS5jaGFyQXQoMCk7CiAgICAgICAgdmFyIGZlbmNlU2l6ZSA9IDM7CiAgICAgICAgdmFyIGZlbmNlSW5Db2RlUmVnZXggPSBuZXcgUmVnRXhwKCJeIiArIGZlbmNlQ2hhciArICJ7Myx9IiwgImdtIik7CiAgICAgICAgdmFyIG1hdGNoMjsKICAgICAgICB3aGlsZSAobWF0Y2gyID0gZmVuY2VJbkNvZGVSZWdleC5leGVjKGNvZGU0KSkgewogICAgICAgICAgaWYgKG1hdGNoMlswXS5sZW5ndGggPj0gZmVuY2VTaXplKSB7CiAgICAgICAgICAgIGZlbmNlU2l6ZSA9IG1hdGNoMlswXS5sZW5ndGggKyAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgZmVuY2UzID0gcmVwZWF0MihmZW5jZUNoYXIsIGZlbmNlU2l6ZSk7CiAgICAgICAgcmV0dXJuICJcblxuIiArIGZlbmNlMyArIGxhbmd1YWdlICsgIlxuIiArIGNvZGU0LnJlcGxhY2UoL1xuJC8sICIiKSArICJcbiIgKyBmZW5jZTMgKyAiXG5cbiI7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5ob3Jpem9udGFsUnVsZSA9IHsKICAgICAgZmlsdGVyOiAiaHIiLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuICJcblxuIiArIG9wdGlvbnMuaHIgKyAiXG5cbiI7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5pbmxpbmVMaW5rID0gewogICAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMubGlua1N0eWxlID09PSAiaW5saW5lZCIgJiYgbm9kZTIubm9kZU5hbWUgPT09ICJBIiAmJiBub2RlMi5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICAgICAgfSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMikgewogICAgICAgIHZhciBocmVmID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgICAgICAgaWYgKGhyZWYpIGhyZWYgPSBocmVmLnJlcGxhY2UoLyhbKCldKS9nLCAiXFwkMSIpOwogICAgICAgIHZhciB0aXRsZSA9IGNsZWFuQXR0cmlidXRlKG5vZGUyLmdldEF0dHJpYnV0ZSgidGl0bGUiKSk7CiAgICAgICAgaWYgKHRpdGxlKSB0aXRsZSA9ICcgIicgKyB0aXRsZS5yZXBsYWNlKC8iL2csICdcXCInKSArICciJzsKICAgICAgICByZXR1cm4gIlsiICsgY29udGVudDMgKyAiXSgiICsgaHJlZiArIHRpdGxlICsgIikiOwogICAgICB9CiAgICB9OwogICAgcnVsZXMucmVmZXJlbmNlTGluayA9IHsKICAgICAgZmlsdGVyOiBmdW5jdGlvbihub2RlMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiBvcHRpb25zLmxpbmtTdHlsZSA9PT0gInJlZmVyZW5jZWQiICYmIG5vZGUyLm5vZGVOYW1lID09PSAiQSIgJiYgbm9kZTIuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgICAgIH0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgaHJlZiA9IG5vZGUyLmdldEF0dHJpYnV0ZSgiaHJlZiIpOwogICAgICAgIHZhciB0aXRsZSA9IGNsZWFuQXR0cmlidXRlKG5vZGUyLmdldEF0dHJpYnV0ZSgidGl0bGUiKSk7CiAgICAgICAgaWYgKHRpdGxlKSB0aXRsZSA9ICcgIicgKyB0aXRsZSArICciJzsKICAgICAgICB2YXIgcmVwbGFjZW1lbnQ7CiAgICAgICAgdmFyIHJlZmVyZW5jZTsKICAgICAgICBzd2l0Y2ggKG9wdGlvbnMubGlua1JlZmVyZW5jZVN0eWxlKSB7CiAgICAgICAgICBjYXNlICJjb2xsYXBzZWQiOgogICAgICAgICAgICByZXBsYWNlbWVudCA9ICJbIiArIGNvbnRlbnQzICsgIl1bXSI7CiAgICAgICAgICAgIHJlZmVyZW5jZSA9ICJbIiArIGNvbnRlbnQzICsgIl06ICIgKyBocmVmICsgdGl0bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAic2hvcnRjdXQiOgogICAgICAgICAgICByZXBsYWNlbWVudCA9ICJbIiArIGNvbnRlbnQzICsgIl0iOwogICAgICAgICAgICByZWZlcmVuY2UgPSAiWyIgKyBjb250ZW50MyArICJdOiAiICsgaHJlZiArIHRpdGxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHZhciBpZCA9IHRoaXMucmVmZXJlbmNlcy5sZW5ndGggKyAxOwogICAgICAgICAgICByZXBsYWNlbWVudCA9ICJbIiArIGNvbnRlbnQzICsgIl1bIiArIGlkICsgIl0iOwogICAgICAgICAgICByZWZlcmVuY2UgPSAiWyIgKyBpZCArICJdOiAiICsgaHJlZiArIHRpdGxlOwogICAgICAgIH0KICAgICAgICB0aGlzLnJlZmVyZW5jZXMucHVzaChyZWZlcmVuY2UpOwogICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKICAgICAgfSwKICAgICAgcmVmZXJlbmNlczogW10sCiAgICAgIGFwcGVuZDogZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIHZhciByZWZlcmVuY2VzID0gIiI7CiAgICAgICAgaWYgKHRoaXMucmVmZXJlbmNlcy5sZW5ndGgpIHsKICAgICAgICAgIHJlZmVyZW5jZXMgPSAiXG5cbiIgKyB0aGlzLnJlZmVyZW5jZXMuam9pbigiXG4iKSArICJcblxuIjsKICAgICAgICAgIHRoaXMucmVmZXJlbmNlcyA9IFtdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVmZXJlbmNlczsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmVtcGhhc2lzID0gewogICAgICBmaWx0ZXI6IFsiZW0iLCAiaSJdLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgaWYgKCFjb250ZW50My50cmltKCkpIHJldHVybiAiIjsKICAgICAgICByZXR1cm4gb3B0aW9ucy5lbURlbGltaXRlciArIGNvbnRlbnQzICsgb3B0aW9ucy5lbURlbGltaXRlcjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLnN0cm9uZyA9IHsKICAgICAgZmlsdGVyOiBbInN0cm9uZyIsICJiIl0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICBpZiAoIWNvbnRlbnQzLnRyaW0oKSkgcmV0dXJuICIiOwogICAgICAgIHJldHVybiBvcHRpb25zLnN0cm9uZ0RlbGltaXRlciArIGNvbnRlbnQzICsgb3B0aW9ucy5zdHJvbmdEZWxpbWl0ZXI7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5jb2RlID0gewogICAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyKSB7CiAgICAgICAgdmFyIGhhc1NpYmxpbmdzID0gbm9kZTIucHJldmlvdXNTaWJsaW5nIHx8IG5vZGUyLm5leHRTaWJsaW5nOwogICAgICAgIHZhciBpc0NvZGVCbG9jayA9IG5vZGUyLnBhcmVudE5vZGUubm9kZU5hbWUgPT09ICJQUkUiICYmICFoYXNTaWJsaW5nczsKICAgICAgICByZXR1cm4gbm9kZTIubm9kZU5hbWUgPT09ICJDT0RFIiAmJiAhaXNDb2RlQmxvY2s7CiAgICAgIH0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50MykgewogICAgICAgIGlmICghY29udGVudDMpIHJldHVybiAiIjsKICAgICAgICBjb250ZW50MyA9IGNvbnRlbnQzLnJlcGxhY2UoL1xyP1xufFxyL2csICIgIik7CiAgICAgICAgdmFyIGV4dHJhU3BhY2UgPSAvXmB8XiAuKj9bXiBdLiogJHxgJC8udGVzdChjb250ZW50MykgPyAiICIgOiAiIjsKICAgICAgICB2YXIgZGVsaW1pdGVyID0gImAiOwogICAgICAgIHZhciBtYXRjaGVzID0gY29udGVudDMubWF0Y2goL2ArL2dtKSB8fCBbXTsKICAgICAgICB3aGlsZSAobWF0Y2hlcy5pbmRleE9mKGRlbGltaXRlcikgIT09IC0xKSBkZWxpbWl0ZXIgPSBkZWxpbWl0ZXIgKyAiYCI7CiAgICAgICAgcmV0dXJuIGRlbGltaXRlciArIGV4dHJhU3BhY2UgKyBjb250ZW50MyArIGV4dHJhU3BhY2UgKyBkZWxpbWl0ZXI7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5pbWFnZSA9IHsKICAgICAgZmlsdGVyOiAiaW1nIiwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMikgewogICAgICAgIHZhciBhbHQgPSBjbGVhbkF0dHJpYnV0ZShub2RlMi5nZXRBdHRyaWJ1dGUoImFsdCIpKTsKICAgICAgICB2YXIgc3JjID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJzcmMiKSB8fCAiIjsKICAgICAgICB2YXIgdGl0bGUgPSBjbGVhbkF0dHJpYnV0ZShub2RlMi5nZXRBdHRyaWJ1dGUoInRpdGxlIikpOwogICAgICAgIHZhciB0aXRsZVBhcnQgPSB0aXRsZSA/ICcgIicgKyB0aXRsZSArICciJyA6ICIiOwogICAgICAgIHJldHVybiBzcmMgPyAiIVsiICsgYWx0ICsgIl0oIiArIHNyYyArIHRpdGxlUGFydCArICIpIiA6ICIiOwogICAgICB9CiAgICB9OwogICAgUnVsZXMucHJvdG90eXBlID0gewogICAgICBhZGQ6IGZ1bmN0aW9uKGtleTIsIHJ1bGUpIHsKICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQocnVsZSk7CiAgICAgIH0sCiAgICAgIGtlZXA6IGZ1bmN0aW9uKGZpbHRlcjIpIHsKICAgICAgICB0aGlzLl9rZWVwLnVuc2hpZnQoewogICAgICAgICAgZmlsdGVyOiBmaWx0ZXIyLAogICAgICAgICAgcmVwbGFjZW1lbnQ6IHRoaXMua2VlcFJlcGxhY2VtZW50CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIHJlbW92ZTogZnVuY3Rpb24oZmlsdGVyMikgewogICAgICAgIHRoaXMuX3JlbW92ZS51bnNoaWZ0KHsKICAgICAgICAgIGZpbHRlcjogZmlsdGVyMiwKICAgICAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9LAogICAgICBmb3JOb2RlOiBmdW5jdGlvbihub2RlMikgewogICAgICAgIGlmIChub2RlMi5pc0JsYW5rKSByZXR1cm4gdGhpcy5ibGFua1J1bGU7CiAgICAgICAgdmFyIHJ1bGU7CiAgICAgICAgaWYgKHJ1bGUgPSBmaW5kUnVsZSh0aGlzLmFycmF5LCBub2RlMiwgdGhpcy5vcHRpb25zKSkgcmV0dXJuIHJ1bGU7CiAgICAgICAgaWYgKHJ1bGUgPSBmaW5kUnVsZSh0aGlzLl9rZWVwLCBub2RlMiwgdGhpcy5vcHRpb25zKSkgcmV0dXJuIHJ1bGU7CiAgICAgICAgaWYgKHJ1bGUgPSBmaW5kUnVsZSh0aGlzLl9yZW1vdmUsIG5vZGUyLCB0aGlzLm9wdGlvbnMpKSByZXR1cm4gcnVsZTsKICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UnVsZTsKICAgICAgfSwKICAgICAgZm9yRWFjaDogZnVuY3Rpb24oZm4pIHsKICAgICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCB0aGlzLmFycmF5Lmxlbmd0aDsgaTExKyspIGZuKHRoaXMuYXJyYXlbaTExXSwgaTExKTsKICAgICAgfQogICAgfTsKICAgIHJvb3Q1ID0gdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB7fTsKICAgIEhUTUxQYXJzZXIgPSBjYW5QYXJzZUhUTUxOYXRpdmVseSgpID8gcm9vdDUuRE9NUGFyc2VyIDogY3JlYXRlSFRNTFBhcnNlcigpOwogICAgcmVkdWNlMiA9IEFycmF5LnByb3RvdHlwZS5yZWR1Y2U7CiAgICBlc2NhcGVzID0gWwogICAgICBbL1xcL2csICJcXFxcIl0sCiAgICAgIFsvXCovZywgIlxcKiJdLAogICAgICBbL14tL2csICJcXC0iXSwKICAgICAgWy9eXCsgL2csICJcXCsgIl0sCiAgICAgIFsvXig9KykvZywgIlxcJDEiXSwKICAgICAgWy9eKCN7MSw2fSkgL2csICJcXCQxICJdLAogICAgICBbL2AvZywgIlxcYCJdLAogICAgICBbL15+fn4vZywgIlxcfn5+Il0sCiAgICAgIFsvXFsvZywgIlxcWyJdLAogICAgICBbL1xdL2csICJcXF0iXSwKICAgICAgWy9ePi9nLCAiXFw+Il0sCiAgICAgIFsvXy9nLCAiXFxfIl0sCiAgICAgIFsvXihcZCspXC4gL2csICIkMVxcLiAiXQogICAgXTsKICAgIFR1cm5kb3duU2VydmljZS5wcm90b3R5cGUgPSB7CiAgICAgIC8qKgogICAgICAgKiBUaGUgZW50cnkgcG9pbnQgZm9yIGNvbnZlcnRpbmcgYSBzdHJpbmcgb3IgRE9NIG5vZGUgdG8gTWFya2Rvd24KICAgICAgICogQHB1YmxpYwogICAgICAgKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudH0gaW5wdXQgVGhlIHN0cmluZyBvciBET00gbm9kZSB0byBjb252ZXJ0CiAgICAgICAqIEByZXR1cm5zIEEgTWFya2Rvd24gcmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0CiAgICAgICAqIEB0eXBlIFN0cmluZwogICAgICAgKi8KICAgICAgdHVybmRvd246IGZ1bmN0aW9uKGlucHV0KSB7CiAgICAgICAgaWYgKCFjYW5Db252ZXJ0KGlucHV0KSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigKICAgICAgICAgICAgaW5wdXQgKyAiIGlzIG5vdCBhIHN0cmluZywgb3IgYW4gZWxlbWVudC9kb2N1bWVudC9mcmFnbWVudCBub2RlLiIKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGlmIChpbnB1dCA9PT0gIiIpIHJldHVybiAiIjsKICAgICAgICB2YXIgb3V0cHV0ID0gcHJvY2VzczMuY2FsbCh0aGlzLCBuZXcgUm9vdE5vZGUoaW5wdXQsIHRoaXMub3B0aW9ucykpOwogICAgICAgIHJldHVybiBwb3N0UHJvY2Vzcy5jYWxsKHRoaXMsIG91dHB1dCk7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBBZGQgb25lIG9yIG1vcmUgcGx1Z2lucwogICAgICAgKiBAcHVibGljCiAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IHBsdWdpbiBUaGUgcGx1Z2luIG9yIGFycmF5IG9mIHBsdWdpbnMgdG8gYWRkCiAgICAgICAqIEByZXR1cm5zIFRoZSBUdXJuZG93biBpbnN0YW5jZSBmb3IgY2hhaW5pbmcKICAgICAgICogQHR5cGUgT2JqZWN0CiAgICAgICAqLwogICAgICB1c2U6IGZ1bmN0aW9uKHBsdWdpbikgewogICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBsdWdpbikpIHsKICAgICAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IHBsdWdpbi5sZW5ndGg7IGkxMSsrKSB0aGlzLnVzZShwbHVnaW5baTExXSk7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcGx1Z2luID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBwbHVnaW4odGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInBsdWdpbiBtdXN0IGJlIGEgRnVuY3Rpb24gb3IgYW4gQXJyYXkgb2YgRnVuY3Rpb25zIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9LAogICAgICAvKioKICAgICAgICogQWRkcyBhIHJ1bGUKICAgICAgICogQHB1YmxpYwogICAgICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5IFRoZSB1bmlxdWUga2V5IG9mIHRoZSBydWxlCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBydWxlIFRoZSBydWxlCiAgICAgICAqIEByZXR1cm5zIFRoZSBUdXJuZG93biBpbnN0YW5jZSBmb3IgY2hhaW5pbmcKICAgICAgICogQHR5cGUgT2JqZWN0CiAgICAgICAqLwogICAgICBhZGRSdWxlOiBmdW5jdGlvbihrZXkyLCBydWxlKSB7CiAgICAgICAgdGhpcy5ydWxlcy5hZGQoa2V5MiwgcnVsZSk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBLZWVwIGEgbm9kZSAoYXMgSFRNTCkgdGhhdCBtYXRjaGVzIHRoZSBmaWx0ZXIKICAgICAgICogQHB1YmxpYwogICAgICAgKiBAcGFyYW0ge1N0cmluZ3xBcnJheXxGdW5jdGlvbn0gZmlsdGVyIFRoZSB1bmlxdWUga2V5IG9mIHRoZSBydWxlCiAgICAgICAqIEByZXR1cm5zIFRoZSBUdXJuZG93biBpbnN0YW5jZSBmb3IgY2hhaW5pbmcKICAgICAgICogQHR5cGUgT2JqZWN0CiAgICAgICAqLwogICAgICBrZWVwOiBmdW5jdGlvbihmaWx0ZXIyKSB7CiAgICAgICAgdGhpcy5ydWxlcy5rZWVwKGZpbHRlcjIpOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9LAogICAgICAvKioKICAgICAgICogUmVtb3ZlIGEgbm9kZSB0aGF0IG1hdGNoZXMgdGhlIGZpbHRlcgogICAgICAgKiBAcHVibGljCiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fEZ1bmN0aW9ufSBmaWx0ZXIgVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIHJ1bGUKICAgICAgICogQHJldHVybnMgVGhlIFR1cm5kb3duIGluc3RhbmNlIGZvciBjaGFpbmluZwogICAgICAgKiBAdHlwZSBPYmplY3QKICAgICAgICovCiAgICAgIHJlbW92ZTogZnVuY3Rpb24oZmlsdGVyMikgewogICAgICAgIHRoaXMucnVsZXMucmVtb3ZlKGZpbHRlcjIpOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9LAogICAgICAvKioKICAgICAgICogRXNjYXBlcyBNYXJrZG93biBzeW50YXgKICAgICAgICogQHB1YmxpYwogICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gZXNjYXBlCiAgICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIHdpdGggTWFya2Rvd24gc3ludGF4IGVzY2FwZWQKICAgICAgICogQHR5cGUgU3RyaW5nCiAgICAgICAqLwogICAgICBlc2NhcGU6IGZ1bmN0aW9uKHN0cmluZzMpIHsKICAgICAgICByZXR1cm4gZXNjYXBlcy5yZWR1Y2UoZnVuY3Rpb24oYWNjdW11bGF0b3IsIGVzY2FwZSkgewogICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yLnJlcGxhY2UoZXNjYXBlWzBdLCBlc2NhcGVbMV0pOwogICAgICAgIH0sIHN0cmluZzMpOwogICAgICB9CiAgICB9OwogICAgdHVybmRvd25fYnJvd3Nlcl9lc19kZWZhdWx0ID0gVHVybmRvd25TZXJ2aWNlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdHVybmRvd24tcGx1Z2luLWdmbUAxLjAuMi9ub2RlX21vZHVsZXMvdHVybmRvd24tcGx1Z2luLWdmbS9saWIvdHVybmRvd24tcGx1Z2luLWdmbS5lcy5qcwp2YXIgdHVybmRvd25fcGx1Z2luX2dmbV9lc19leHBvcnRzID0ge307Cl9fZXhwb3J0KHR1cm5kb3duX3BsdWdpbl9nZm1fZXNfZXhwb3J0cywgewogIGdmbTogKCkgPT4gZ2ZtMiwKICBoaWdobGlnaHRlZENvZGVCbG9jazogKCkgPT4gaGlnaGxpZ2h0ZWRDb2RlQmxvY2ssCiAgc3RyaWtldGhyb3VnaDogKCkgPT4gc3RyaWtldGhyb3VnaDIsCiAgdGFibGVzOiAoKSA9PiB0YWJsZXMsCiAgdGFza0xpc3RJdGVtczogKCkgPT4gdGFza0xpc3RJdGVtcwp9KTsKZnVuY3Rpb24gaGlnaGxpZ2h0ZWRDb2RlQmxvY2sodHVybmRvd25TZXJ2aWNlKSB7CiAgdHVybmRvd25TZXJ2aWNlLmFkZFJ1bGUoImhpZ2hsaWdodGVkQ29kZUJsb2NrIiwgewogICAgZmlsdGVyOiBmdW5jdGlvbihub2RlMikgewogICAgICB2YXIgZmlyc3RDaGlsZCA9IG5vZGUyLmZpcnN0Q2hpbGQ7CiAgICAgIHJldHVybiBub2RlMi5ub2RlTmFtZSA9PT0gIkRJViIgJiYgaGlnaGxpZ2h0UmVnRXhwLnRlc3Qobm9kZTIuY2xhc3NOYW1lKSAmJiBmaXJzdENoaWxkICYmIGZpcnN0Q2hpbGQubm9kZU5hbWUgPT09ICJQUkUiOwogICAgfSwKICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgdmFyIGNsYXNzTmFtZSA9IG5vZGUyLmNsYXNzTmFtZSB8fCAiIjsKICAgICAgdmFyIGxhbmd1YWdlID0gKGNsYXNzTmFtZS5tYXRjaChoaWdobGlnaHRSZWdFeHApIHx8IFtudWxsLCAiIl0pWzFdOwogICAgICByZXR1cm4gIlxuXG4iICsgb3B0aW9ucy5mZW5jZSArIGxhbmd1YWdlICsgIlxuIiArIG5vZGUyLmZpcnN0Q2hpbGQudGV4dENvbnRlbnQgKyAiXG4iICsgb3B0aW9ucy5mZW5jZSArICJcblxuIjsKICAgIH0KICB9KTsKfQpmdW5jdGlvbiBzdHJpa2V0aHJvdWdoMih0dXJuZG93blNlcnZpY2UpIHsKICB0dXJuZG93blNlcnZpY2UuYWRkUnVsZSgic3RyaWtldGhyb3VnaCIsIHsKICAgIGZpbHRlcjogWyJkZWwiLCAicyIsICJzdHJpa2UiXSwKICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50MykgewogICAgICByZXR1cm4gIn4iICsgY29udGVudDMgKyAifiI7CiAgICB9CiAgfSk7Cn0KZnVuY3Rpb24gaXNIZWFkaW5nUm93KHRyMikgewogIHZhciBwYXJlbnROb2RlID0gdHIyLnBhcmVudE5vZGU7CiAgcmV0dXJuIHBhcmVudE5vZGUubm9kZU5hbWUgPT09ICJUSEVBRCIgfHwgcGFyZW50Tm9kZS5maXJzdENoaWxkID09PSB0cjIgJiYgKHBhcmVudE5vZGUubm9kZU5hbWUgPT09ICJUQUJMRSIgfHwgaXNGaXJzdFRib2R5KHBhcmVudE5vZGUpKSAmJiBldmVyeTIuY2FsbCh0cjIuY2hpbGROb2RlcywgZnVuY3Rpb24objEzKSB7CiAgICByZXR1cm4gbjEzLm5vZGVOYW1lID09PSAiVEgiOwogIH0pOwp9CmZ1bmN0aW9uIGlzRmlyc3RUYm9keShlbGVtZW50NCkgewogIHZhciBwcmV2aW91c1NpYmxpbmcgPSBlbGVtZW50NC5wcmV2aW91c1NpYmxpbmc7CiAgcmV0dXJuIGVsZW1lbnQ0Lm5vZGVOYW1lID09PSAiVEJPRFkiICYmICghcHJldmlvdXNTaWJsaW5nIHx8IHByZXZpb3VzU2libGluZy5ub2RlTmFtZSA9PT0gIlRIRUFEIiAmJiAvXlxzKiQvaS50ZXN0KHByZXZpb3VzU2libGluZy50ZXh0Q29udGVudCkpOwp9CmZ1bmN0aW9uIGNlbGwoY29udGVudDMsIG5vZGUyKSB7CiAgdmFyIGluZGV4MiA9IGluZGV4T2YyLmNhbGwobm9kZTIucGFyZW50Tm9kZS5jaGlsZE5vZGVzLCBub2RlMik7CiAgdmFyIHByZWZpeDQgPSAiICI7CiAgaWYgKGluZGV4MiA9PT0gMCkgcHJlZml4NCA9ICJ8ICI7CiAgcmV0dXJuIHByZWZpeDQgKyBjb250ZW50MyArICIgfCI7Cn0KZnVuY3Rpb24gdGFibGVzKHR1cm5kb3duU2VydmljZSkgewogIHR1cm5kb3duU2VydmljZS5rZWVwKGZ1bmN0aW9uKG5vZGUyKSB7CiAgICByZXR1cm4gbm9kZTIubm9kZU5hbWUgPT09ICJUQUJMRSIgJiYgIWlzSGVhZGluZ1Jvdyhub2RlMi5yb3dzWzBdKTsKICB9KTsKICBmb3IgKHZhciBrZXkyIGluIHJ1bGVzMikgdHVybmRvd25TZXJ2aWNlLmFkZFJ1bGUoa2V5MiwgcnVsZXMyW2tleTJdKTsKfQpmdW5jdGlvbiB0YXNrTGlzdEl0ZW1zKHR1cm5kb3duU2VydmljZSkgewogIHR1cm5kb3duU2VydmljZS5hZGRSdWxlKCJ0YXNrTGlzdEl0ZW1zIiwgewogICAgZmlsdGVyOiBmdW5jdGlvbihub2RlMikgewogICAgICByZXR1cm4gbm9kZTIudHlwZSA9PT0gImNoZWNrYm94IiAmJiBub2RlMi5wYXJlbnROb2RlLm5vZGVOYW1lID09PSAiTEkiOwogICAgfSwKICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIpIHsKICAgICAgcmV0dXJuIChub2RlMi5jaGVja2VkID8gIlt4XSIgOiAiWyBdIikgKyAiICI7CiAgICB9CiAgfSk7Cn0KZnVuY3Rpb24gZ2ZtMih0dXJuZG93blNlcnZpY2UpIHsKICB0dXJuZG93blNlcnZpY2UudXNlKFsKICAgIGhpZ2hsaWdodGVkQ29kZUJsb2NrLAogICAgc3RyaWtldGhyb3VnaDIsCiAgICB0YWJsZXMsCiAgICB0YXNrTGlzdEl0ZW1zCiAgXSk7Cn0KdmFyIGhpZ2hsaWdodFJlZ0V4cCwgaW5kZXhPZjIsIGV2ZXJ5MiwgcnVsZXMyOwp2YXIgaW5pdF90dXJuZG93bl9wbHVnaW5fZ2ZtX2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdHVybmRvd24tcGx1Z2luLWdmbUAxLjAuMi9ub2RlX21vZHVsZXMvdHVybmRvd24tcGx1Z2luLWdmbS9saWIvdHVybmRvd24tcGx1Z2luLWdmbS5lcy5qcyIoKSB7CiAgICBoaWdobGlnaHRSZWdFeHAgPSAvaGlnaGxpZ2h0LSg/OnRleHR8c291cmNlKS0oW2EtejAtOV0rKS87CiAgICBpbmRleE9mMiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mOwogICAgZXZlcnkyID0gQXJyYXkucHJvdG90eXBlLmV2ZXJ5OwogICAgcnVsZXMyID0ge307CiAgICBydWxlczIudGFibGVDZWxsID0gewogICAgICBmaWx0ZXI6IFsidGgiLCAidGQiXSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMikgewogICAgICAgIHJldHVybiBjZWxsKGNvbnRlbnQzLCBub2RlMik7CiAgICAgIH0KICAgIH07CiAgICBydWxlczIudGFibGVSb3cgPSB7CiAgICAgIGZpbHRlcjogInRyIiwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMikgewogICAgICAgIHZhciBib3JkZXJDZWxscyA9ICIiOwogICAgICAgIHZhciBhbGlnbk1hcCA9IHsgbGVmdDogIjotLSIsIHJpZ2h0OiAiLS06IiwgY2VudGVyOiAiOi06IiB9OwogICAgICAgIGlmIChpc0hlYWRpbmdSb3cobm9kZTIpKSB7CiAgICAgICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBub2RlMi5jaGlsZE5vZGVzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgICAgdmFyIGJvcmRlciA9ICItLS0iOwogICAgICAgICAgICB2YXIgYWxpZ24gPSAobm9kZTIuY2hpbGROb2Rlc1tpMTFdLmdldEF0dHJpYnV0ZSgiYWxpZ24iKSB8fCAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgaWYgKGFsaWduKSBib3JkZXIgPSBhbGlnbk1hcFthbGlnbl0gfHwgYm9yZGVyOwogICAgICAgICAgICBib3JkZXJDZWxscyArPSBjZWxsKGJvcmRlciwgbm9kZTIuY2hpbGROb2Rlc1tpMTFdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICJcbiIgKyBjb250ZW50MyArIChib3JkZXJDZWxscyA/ICJcbiIgKyBib3JkZXJDZWxscyA6ICIiKTsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzMi50YWJsZSA9IHsKICAgICAgLy8gT25seSBjb252ZXJ0IHRhYmxlcyB3aXRoIGEgaGVhZGluZyByb3cuCiAgICAgIC8vIFRhYmxlcyB3aXRoIG5vIGhlYWRpbmcgcm93IGFyZSBrZXB0IHVzaW5nIGBrZWVwYCAoc2VlIGJlbG93KS4KICAgICAgZmlsdGVyOiBmdW5jdGlvbihub2RlMikgewogICAgICAgIHJldHVybiBub2RlMi5ub2RlTmFtZSA9PT0gIlRBQkxFIiAmJiBpc0hlYWRpbmdSb3cobm9kZTIucm93c1swXSk7CiAgICAgIH0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50MykgewogICAgICAgIGNvbnRlbnQzID0gY29udGVudDMucmVwbGFjZSgiXG5cbiIsICJcbiIpOwogICAgICAgIHJldHVybiAiXG5cbiIgKyBjb250ZW50MyArICJcblxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzMi50YWJsZVNlY3Rpb24gPSB7CiAgICAgIGZpbHRlcjogWyJ0aGVhZCIsICJ0Ym9keSIsICJ0Zm9vdCJdLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMpIHsKICAgICAgICByZXR1cm4gY29udGVudDM7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydG1hcmtkb3duQDMuMC4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydG1hcmtkb3duL2Rpc3RfdHMvc21hcnRtYXJrZG93bi5wbHVnaW5zLmpzCnZhciBzbWFydHlhbWw7CnZhciBpbml0X3NtYXJ0bWFya2Rvd25fcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWFya2Rvd25AMy4wLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWFya2Rvd24vZGlzdF90cy9zbWFydG1hcmtkb3duLnBsdWdpbnMuanMiKCkgewogICAgc21hcnR5YW1sID0gX190b0VTTShyZXF1aXJlX2Rpc3RfdHMyKCksIDEpOwogICAgaW5pdF91bmlmaWVkKCk7CiAgICBpbml0X3JlbWFya19nZm0oKTsKICAgIGluaXRfcmVtYXJrX3BhcnNlKCk7CiAgICBpbml0X3JlbWFya19mcm9udG1hdHRlcigpOwogICAgaW5pdF9yZW1hcmtfaHRtbCgpOwogICAgaW5pdF9yZW1hcmtfc3RyaW5naWZ5KCk7CiAgICBpbml0X3R1cm5kb3duX2Jyb3dzZXJfZXMoKTsKICAgIGluaXRfdHVybmRvd25fcGx1Z2luX2dmbV9lcygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXJrZG93bkAzLjAuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXJrZG93bi9kaXN0X3RzL3NtYXJ0bWFya2Rvd24uY2xhc3Nlcy5tZHBhcnNlZHJlc3VsdC5qcwp2YXIgTWRQYXJzZWRSZXN1bHQ7CnZhciBpbml0X3NtYXJ0bWFya2Rvd25fY2xhc3Nlc19tZHBhcnNlZHJlc3VsdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWFya2Rvd25AMy4wLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWFya2Rvd24vZGlzdF90cy9zbWFydG1hcmtkb3duLmNsYXNzZXMubWRwYXJzZWRyZXN1bHQuanMiKCkgewogICAgaW5pdF9zbWFydG1hcmtkb3duX3BsdWdpbnMoKTsKICAgIE1kUGFyc2VkUmVzdWx0ID0gY2xhc3MgX01kUGFyc2VkUmVzdWx0IHsKICAgICAgc3RhdGljIGFzeW5jIGNyZWF0ZUZyb21NYXJrZG93blN0cmluZyhtZFN0cmluZ0FyZykgewogICAgICAgIGNvbnN0IG1kUGFyc2VkUmVzdWx0ID0gbmV3IF9NZFBhcnNlZFJlc3VsdCgpOwogICAgICAgIGF3YWl0IG1kUGFyc2VkUmVzdWx0LnVwZGF0ZUZyb21NYXJrZG93blN0cmluZyhtZFN0cmluZ0FyZyk7CiAgICAgICAgcmV0dXJuIG1kUGFyc2VkUmVzdWx0OwogICAgICB9CiAgICAgIGFzeW5jIHVwZGF0ZUZyb21NYXJrZG93blN0cmluZyhtZFN0cmluZ0FyZykgewogICAgICAgIGxldCB5YW1sU3RyaW5nOwogICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHVuaWZpZWQoKS51c2UocmVtYXJrUGFyc2UpLnVzZShyZW1hcmtHZm0pLnVzZShyZW1hcmtGcm9udG1hdHRlciwgWyJ5YW1sIiwgInRvbWwiXSkudXNlKHJlbWFya1N0cmluZ2lmeSkudXNlKHJlbWFya0h0bWwpLnVzZSgoKSA9PiAodHJlZSkgPT4gewogICAgICAgICAgY29uc29sZS5kaXIodHJlZSk7CiAgICAgICAgICBjb25zdCB5YW1sQ2hpbGQgPSB0cmVlLmNoaWxkcmVuLmZpbmQoKG9iamVjdEFyZykgPT4gb2JqZWN0QXJnLnR5cGUgPT09ICJ5YW1sIik7CiAgICAgICAgICBpZiAoeWFtbENoaWxkKSB7CiAgICAgICAgICAgIHlhbWxTdHJpbmcgPSB5YW1sQ2hpbGQudmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfSkucHJvY2VzcyhtZFN0cmluZ0FyZyk7CiAgICAgICAgdGhpcy5odG1sID0gcmVzdWx0LnRvU3RyaW5nKCk7CiAgICAgICAgaWYgKHlhbWxTdHJpbmcpIHsKICAgICAgICAgIHRoaXMuZnJvbnRtYXR0ZXJEYXRhID0gYXdhaXQgc21hcnR5YW1sLnlhbWxTdHJpbmdUb09iamVjdCh5YW1sU3RyaW5nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5mcm9udG1hdHRlckRhdGEgPSB7fTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydG1hcmtkb3duQDMuMC4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydG1hcmtkb3duL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czE3ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czE3LCB7CiAgU21hcnRNYXJrZG93bjogKCkgPT4gU21hcnRNYXJrZG93bgp9KTsKdmFyIFNtYXJ0TWFya2Rvd247CnZhciBpbml0X2Rpc3RfdHMxNyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWFya2Rvd25AMy4wLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWFya2Rvd24vZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0bWFya2Rvd25fcGx1Z2lucygpOwogICAgaW5pdF9zbWFydG1hcmtkb3duX2NsYXNzZXNfbWRwYXJzZWRyZXN1bHQoKTsKICAgIFNtYXJ0TWFya2Rvd24gPSBjbGFzcyBfU21hcnRNYXJrZG93biB7CiAgICAgIHN0YXRpYyBhc3luYyBlYXN5TWFya2Rvd25Ub0h0bWwobWRTdHJpbmdBcmcpIHsKICAgICAgICBjb25zdCBzbWFydG1hcmtkb3duSW5zdGFuY2UgPSBuZXcgX1NtYXJ0TWFya2Rvd24oKTsKICAgICAgICBjb25zdCBtZFBhcnNlZFJlc3VsdCA9IGF3YWl0IHNtYXJ0bWFya2Rvd25JbnN0YW5jZS5nZXRNZFBhcnNlZFJlc3VsdEZyb21NYXJrZG93bihtZFN0cmluZ0FyZyk7CiAgICAgICAgcmV0dXJuIG1kUGFyc2VkUmVzdWx0Lmh0bWw7CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNyZWF0ZSBhIE1kUGFyc2VkUmVzdWx0IGZyb20gbWFya2Rvd24KICAgICAgICogQHBhcmFtIG1kU3RyaW5nQXJnCiAgICAgICAqLwogICAgICBhc3luYyBnZXRNZFBhcnNlZFJlc3VsdEZyb21NYXJrZG93bihtZFN0cmluZ0FyZykgewogICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IE1kUGFyc2VkUmVzdWx0LmNyZWF0ZUZyb21NYXJrZG93blN0cmluZyhtZFN0cmluZ0FyZyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICBodG1sVG9NYXJrZG93bihodG1sU3RyaW5nKSB7CiAgICAgICAgY29uc3QgdHVybmRvd25JbnN0YW5jZSA9IG5ldyB0dXJuZG93bl9icm93c2VyX2VzX2RlZmF1bHQoewogICAgICAgICAgaGVhZGluZ1N0eWxlOiAiYXR4IiwKICAgICAgICAgIGNvZGVCbG9ja1N0eWxlOiAiZmVuY2VkIgogICAgICAgIH0pOwogICAgICAgIHR1cm5kb3duSW5zdGFuY2UudXNlKHR1cm5kb3duX3BsdWdpbl9nZm1fZXNfZXhwb3J0cy5nZm0pOwogICAgICAgIHJldHVybiB0dXJuZG93bkluc3RhbmNlLnR1cm5kb3duKGh0bWxTdHJpbmcpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcGF0aC10by1yZWdleHBAOC4zLjAvbm9kZV9tb2R1bGVzL3BhdGgtdG8tcmVnZXhwL2Rpc3QvaW5kZXguanMKdmFyIHJlcXVpcmVfZGlzdCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vcGF0aC10by1yZWdleHBAOC4zLjAvbm9kZV9tb2R1bGVzL3BhdGgtdG8tcmVnZXhwL2Rpc3QvaW5kZXguanMiKGV4cG9ydHMpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICBleHBvcnRzLlBhdGhFcnJvciA9IGV4cG9ydHMuVG9rZW5EYXRhID0gdm9pZCAwOwogICAgZXhwb3J0cy5wYXJzZSA9IHBhcnNlODsKICAgIGV4cG9ydHMuY29tcGlsZSA9IGNvbXBpbGUyOwogICAgZXhwb3J0cy5tYXRjaCA9IG1hdGNoMjsKICAgIGV4cG9ydHMucGF0aFRvUmVnZXhwID0gcGF0aFRvUmVnZXhwOwogICAgZXhwb3J0cy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk1OwogICAgdmFyIERFRkFVTFRfREVMSU1JVEVSID0gIi8iOwogICAgdmFyIE5PT1BfVkFMVUUgPSAodmFsdWUyKSA9PiB2YWx1ZTI7CiAgICB2YXIgSURfU1RBUlQgPSAvXlskX1xwe0lEX1N0YXJ0fV0kL3U7CiAgICB2YXIgSURfQ09OVElOVUUgPSAvXlskXHUyMDBjXHUyMDBkXHB7SURfQ29udGludWV9XSQvdTsKICAgIHZhciBTSU1QTEVfVE9LRU5TID0gewogICAgICAvLyBHcm91cHMuCiAgICAgICJ7IjogInsiLAogICAgICAifSI6ICJ9IiwKICAgICAgLy8gUmVzZXJ2ZWQuCiAgICAgICIoIjogIigiLAogICAgICAiKSI6ICIpIiwKICAgICAgIlsiOiAiWyIsCiAgICAgICJdIjogIl0iLAogICAgICAiKyI6ICIrIiwKICAgICAgIj8iOiAiPyIsCiAgICAgICIhIjogIiEiCiAgICB9OwogICAgZnVuY3Rpb24gZXNjYXBlVGV4dChzdHIpIHsKICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9be30oKVxbXF0rPyE6KlxcXS9nLCAiXFwkJiIpOwogICAgfQogICAgZnVuY3Rpb24gZXNjYXBlKHN0cikgewogICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1suKyo/XiR7fSgpW1xdfC9cXF0vZywgIlxcJCYiKTsKICAgIH0KICAgIHZhciBUb2tlbkRhdGEgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHRva2Vucywgb3JpZ2luYWxQYXRoKSB7CiAgICAgICAgdGhpcy50b2tlbnMgPSB0b2tlbnM7CiAgICAgICAgdGhpcy5vcmlnaW5hbFBhdGggPSBvcmlnaW5hbFBhdGg7CiAgICAgIH0KICAgIH07CiAgICBleHBvcnRzLlRva2VuRGF0YSA9IFRva2VuRGF0YTsKICAgIHZhciBQYXRoRXJyb3IgPSBjbGFzcyBleHRlbmRzIFR5cGVFcnJvciB7CiAgICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UyLCBvcmlnaW5hbFBhdGgpIHsKICAgICAgICBsZXQgdGV4dDkgPSBtZXNzYWdlMjsKICAgICAgICBpZiAob3JpZ2luYWxQYXRoKQogICAgICAgICAgdGV4dDkgKz0gYDogJHtvcmlnaW5hbFBhdGh9YDsKICAgICAgICB0ZXh0OSArPSBgOyB2aXNpdCBodHRwczovL2dpdC5uZXcvcGF0aFRvUmVnZXhwRXJyb3IgZm9yIGluZm9gOwogICAgICAgIHN1cGVyKHRleHQ5KTsKICAgICAgICB0aGlzLm9yaWdpbmFsUGF0aCA9IG9yaWdpbmFsUGF0aDsKICAgICAgfQogICAgfTsKICAgIGV4cG9ydHMuUGF0aEVycm9yID0gUGF0aEVycm9yOwogICAgZnVuY3Rpb24gcGFyc2U4KHN0ciwgb3B0aW9ucyA9IHt9KSB7CiAgICAgIGNvbnN0IHsgZW5jb2RlUGF0aCA9IE5PT1BfVkFMVUUgfSA9IG9wdGlvbnM7CiAgICAgIGNvbnN0IGNoYXJzID0gWy4uLnN0cl07CiAgICAgIGNvbnN0IHRva2VucyA9IFtdOwogICAgICBsZXQgaW5kZXgyID0gMDsKICAgICAgbGV0IHBvcyA9IDA7CiAgICAgIGZ1bmN0aW9uIG5hbWUoKSB7CiAgICAgICAgbGV0IHZhbHVlMiA9ICIiOwogICAgICAgIGlmIChJRF9TVEFSVC50ZXN0KGNoYXJzW2luZGV4Ml0pKSB7CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIHZhbHVlMiArPSBjaGFyc1tpbmRleDIrK107CiAgICAgICAgICB9IHdoaWxlIChJRF9DT05USU5VRS50ZXN0KGNoYXJzW2luZGV4Ml0pKTsKICAgICAgICB9IGVsc2UgaWYgKGNoYXJzW2luZGV4Ml0gPT09ICciJykgewogICAgICAgICAgbGV0IHF1b3RlU3RhcnQgPSBpbmRleDI7CiAgICAgICAgICB3aGlsZSAoaW5kZXgyKysgPCBjaGFycy5sZW5ndGgpIHsKICAgICAgICAgICAgaWYgKGNoYXJzW2luZGV4Ml0gPT09ICciJykgewogICAgICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgICAgIHF1b3RlU3RhcnQgPSAwOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjaGFyc1tpbmRleDJdID09PSAiXFwiKQogICAgICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgICB2YWx1ZTIgKz0gY2hhcnNbaW5kZXgyXTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChxdW90ZVN0YXJ0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXRoRXJyb3IoYFVudGVybWluYXRlZCBxdW90ZSBhdCBpbmRleCAke3F1b3RlU3RhcnR9YCwgc3RyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCF2YWx1ZTIpIHsKICAgICAgICAgIHRocm93IG5ldyBQYXRoRXJyb3IoYE1pc3NpbmcgcGFyYW1ldGVyIG5hbWUgYXQgaW5kZXggJHtpbmRleDJ9YCwgc3RyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhbHVlMjsKICAgICAgfQogICAgICB3aGlsZSAoaW5kZXgyIDwgY2hhcnMubGVuZ3RoKSB7CiAgICAgICAgY29uc3QgdmFsdWUyID0gY2hhcnNbaW5kZXgyXTsKICAgICAgICBjb25zdCB0eXBlNSA9IFNJTVBMRV9UT0tFTlNbdmFsdWUyXTsKICAgICAgICBpZiAodHlwZTUpIHsKICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogdHlwZTUsIGluZGV4OiBpbmRleDIrKywgdmFsdWU6IHZhbHVlMiB9KTsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlMiA9PT0gIlxcIikgewogICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiAiZXNjYXBlIiwgaW5kZXg6IGluZGV4MisrLCB2YWx1ZTogY2hhcnNbaW5kZXgyKytdIH0pOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWUyID09PSAiOiIpIHsKICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogInBhcmFtIiwgaW5kZXg6IGluZGV4MisrLCB2YWx1ZTogbmFtZSgpIH0pOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWUyID09PSAiKiIpIHsKICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogIndpbGRjYXJkIiwgaW5kZXg6IGluZGV4MisrLCB2YWx1ZTogbmFtZSgpIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6ICJjaGFyIiwgaW5kZXg6IGluZGV4MisrLCB2YWx1ZTogdmFsdWUyIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB0b2tlbnMucHVzaCh7IHR5cGU6ICJlbmQiLCBpbmRleDogaW5kZXgyLCB2YWx1ZTogIiIgfSk7CiAgICAgIGZ1bmN0aW9uIGNvbnN1bWVVbnRpbChlbmRUeXBlKSB7CiAgICAgICAgY29uc3Qgb3V0cHV0ID0gW107CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW3BvcysrXTsKICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBlbmRUeXBlKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAiY2hhciIgfHwgdG9rZW4udHlwZSA9PT0gImVzY2FwZSIpIHsKICAgICAgICAgICAgbGV0IHBhdGgyID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgIGxldCBjdXIgPSB0b2tlbnNbcG9zXTsKICAgICAgICAgICAgd2hpbGUgKGN1ci50eXBlID09PSAiY2hhciIgfHwgY3VyLnR5cGUgPT09ICJlc2NhcGUiKSB7CiAgICAgICAgICAgICAgcGF0aDIgKz0gY3VyLnZhbHVlOwogICAgICAgICAgICAgIGN1ciA9IHRva2Vuc1srK3Bvc107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgb3V0cHV0LnB1c2goewogICAgICAgICAgICAgIHR5cGU6ICJ0ZXh0IiwKICAgICAgICAgICAgICB2YWx1ZTogZW5jb2RlUGF0aChwYXRoMikKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJwYXJhbSIgfHwgdG9rZW4udHlwZSA9PT0gIndpbGRjYXJkIikgewogICAgICAgICAgICBvdXRwdXQucHVzaCh7CiAgICAgICAgICAgICAgdHlwZTogdG9rZW4udHlwZSwKICAgICAgICAgICAgICBuYW1lOiB0b2tlbi52YWx1ZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gInsiKSB7CiAgICAgICAgICAgIG91dHB1dC5wdXNoKHsKICAgICAgICAgICAgICB0eXBlOiAiZ3JvdXAiLAogICAgICAgICAgICAgIHRva2VuczogY29uc3VtZVVudGlsKCJ9IikKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgbmV3IFBhdGhFcnJvcihgVW5leHBlY3RlZCAke3Rva2VuLnR5cGV9IGF0IGluZGV4ICR7dG9rZW4uaW5kZXh9LCBleHBlY3RlZCAke2VuZFR5cGV9YCwgc3RyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG91dHB1dDsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFRva2VuRGF0YShjb25zdW1lVW50aWwoImVuZCIpLCBzdHIpOwogICAgfQogICAgZnVuY3Rpb24gY29tcGlsZTIocGF0aDIsIG9wdGlvbnMgPSB7fSkgewogICAgICBjb25zdCB7IGVuY29kZTogZW5jb2RlMiA9IGVuY29kZVVSSUNvbXBvbmVudCwgZGVsaW1pdGVyID0gREVGQVVMVF9ERUxJTUlURVIgfSA9IG9wdGlvbnM7CiAgICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgcGF0aDIgPT09ICJvYmplY3QiID8gcGF0aDIgOiBwYXJzZTgocGF0aDIsIG9wdGlvbnMpOwogICAgICBjb25zdCBmbiA9IHRva2Vuc1RvRnVuY3Rpb24oZGF0YS50b2tlbnMsIGRlbGltaXRlciwgZW5jb2RlMik7CiAgICAgIHJldHVybiBmdW5jdGlvbiBwYXRoMyhwYXJhbXMyID0ge30pIHsKICAgICAgICBjb25zdCBbcGF0aDQsIC4uLm1pc3NpbmddID0gZm4ocGFyYW1zMik7CiAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBNaXNzaW5nIHBhcmFtZXRlcnM6ICR7bWlzc2luZy5qb2luKCIsICIpfWApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGF0aDQ7CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiB0b2tlbnNUb0Z1bmN0aW9uKHRva2VucywgZGVsaW1pdGVyLCBlbmNvZGUyKSB7CiAgICAgIGNvbnN0IGVuY29kZXJzID0gdG9rZW5zLm1hcCgodG9rZW4pID0+IHRva2VuVG9GdW5jdGlvbih0b2tlbiwgZGVsaW1pdGVyLCBlbmNvZGUyKSk7CiAgICAgIHJldHVybiAoZGF0YSkgPT4gewogICAgICAgIGNvbnN0IHJlc3VsdCA9IFsiIl07CiAgICAgICAgZm9yIChjb25zdCBlbmNvZGVyMiBvZiBlbmNvZGVycykgewogICAgICAgICAgY29uc3QgW3ZhbHVlMiwgLi4uZXh0cmFzXSA9IGVuY29kZXIyKGRhdGEpOwogICAgICAgICAgcmVzdWx0WzBdICs9IHZhbHVlMjsKICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLmV4dHJhcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiB0b2tlblRvRnVuY3Rpb24odG9rZW4sIGRlbGltaXRlciwgZW5jb2RlMikgewogICAgICBpZiAodG9rZW4udHlwZSA9PT0gInRleHQiKQogICAgICAgIHJldHVybiAoKSA9PiBbdG9rZW4udmFsdWVdOwogICAgICBpZiAodG9rZW4udHlwZSA9PT0gImdyb3VwIikgewogICAgICAgIGNvbnN0IGZuID0gdG9rZW5zVG9GdW5jdGlvbih0b2tlbi50b2tlbnMsIGRlbGltaXRlciwgZW5jb2RlMik7CiAgICAgICAgcmV0dXJuIChkYXRhKSA9PiB7CiAgICAgICAgICBjb25zdCBbdmFsdWUyLCAuLi5taXNzaW5nXSA9IGZuKGRhdGEpOwogICAgICAgICAgaWYgKCFtaXNzaW5nLmxlbmd0aCkKICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZTJdOwogICAgICAgICAgcmV0dXJuIFsiIl07CiAgICAgICAgfTsKICAgICAgfQogICAgICBjb25zdCBlbmNvZGVWYWx1ZSA9IGVuY29kZTIgfHwgTk9PUF9WQUxVRTsKICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJ3aWxkY2FyZCIgJiYgZW5jb2RlMiAhPT0gZmFsc2UpIHsKICAgICAgICByZXR1cm4gKGRhdGEpID0+IHsKICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IGRhdGFbdG9rZW4ubmFtZV07CiAgICAgICAgICBpZiAodmFsdWUyID09IG51bGwpCiAgICAgICAgICAgIHJldHVybiBbIiIsIHRva2VuLm5hbWVdOwogICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlMikgfHwgdmFsdWUyLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAiJHt0b2tlbi5uYW1lfSIgdG8gYmUgYSBub24tZW1wdHkgYXJyYXlgKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgIHZhbHVlMi5tYXAoKHZhbHVlMywgaW5kZXgyKSA9PiB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZTMgIT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAiJHt0b2tlbi5uYW1lfS8ke2luZGV4Mn0iIHRvIGJlIGEgc3RyaW5nYCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBlbmNvZGVWYWx1ZSh2YWx1ZTMpOwogICAgICAgICAgICB9KS5qb2luKGRlbGltaXRlcikKICAgICAgICAgIF07CiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gKGRhdGEpID0+IHsKICAgICAgICBjb25zdCB2YWx1ZTIgPSBkYXRhW3Rva2VuLm5hbWVdOwogICAgICAgIGlmICh2YWx1ZTIgPT0gbnVsbCkKICAgICAgICAgIHJldHVybiBbIiIsIHRva2VuLm5hbWVdOwogICAgICAgIGlmICh0eXBlb2YgdmFsdWUyICE9PSAic3RyaW5nIikgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgIiR7dG9rZW4ubmFtZX0iIHRvIGJlIGEgc3RyaW5nYCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBbZW5jb2RlVmFsdWUodmFsdWUyKV07CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBtYXRjaDIocGF0aDIsIG9wdGlvbnMgPSB7fSkgewogICAgICBjb25zdCB7IGRlY29kZTogZGVjb2RlMiA9IGRlY29kZVVSSUNvbXBvbmVudCwgZGVsaW1pdGVyID0gREVGQVVMVF9ERUxJTUlURVIgfSA9IG9wdGlvbnM7CiAgICAgIGNvbnN0IHsgcmVnZXhwLCBrZXlzOiBrZXlzMiB9ID0gcGF0aFRvUmVnZXhwKHBhdGgyLCBvcHRpb25zKTsKICAgICAgY29uc3QgZGVjb2RlcnMgPSBrZXlzMi5tYXAoKGtleTIpID0+IHsKICAgICAgICBpZiAoZGVjb2RlMiA9PT0gZmFsc2UpCiAgICAgICAgICByZXR1cm4gTk9PUF9WQUxVRTsKICAgICAgICBpZiAoa2V5Mi50eXBlID09PSAicGFyYW0iKQogICAgICAgICAgcmV0dXJuIGRlY29kZTI7CiAgICAgICAgcmV0dXJuICh2YWx1ZTIpID0+IHZhbHVlMi5zcGxpdChkZWxpbWl0ZXIpLm1hcChkZWNvZGUyKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBmdW5jdGlvbiBtYXRjaDMoaW5wdXQpIHsKICAgICAgICBjb25zdCBtNiA9IHJlZ2V4cC5leGVjKGlucHV0KTsKICAgICAgICBpZiAoIW02KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGNvbnN0IHBhdGgzID0gbTZbMF07CiAgICAgICAgY29uc3QgcGFyYW1zMiA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgICAgIGZvciAobGV0IGkxMSA9IDE7IGkxMSA8IG02Lmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgIGlmIChtNltpMTFdID09PSB2b2lkIDApCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgY29uc3Qga2V5MiA9IGtleXMyW2kxMSAtIDFdOwogICAgICAgICAgY29uc3QgZGVjb2RlcjIgPSBkZWNvZGVyc1tpMTEgLSAxXTsKICAgICAgICAgIHBhcmFtczJba2V5Mi5uYW1lXSA9IGRlY29kZXIyKG02W2kxMV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4geyBwYXRoOiBwYXRoMywgcGFyYW1zOiBwYXJhbXMyIH07CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBwYXRoVG9SZWdleHAocGF0aDIsIG9wdGlvbnMgPSB7fSkgewogICAgICBjb25zdCB7IGRlbGltaXRlciA9IERFRkFVTFRfREVMSU1JVEVSLCBlbmQ6IGVuZDMgPSB0cnVlLCBzZW5zaXRpdmUgPSBmYWxzZSwgdHJhaWxpbmcgPSB0cnVlIH0gPSBvcHRpb25zOwogICAgICBjb25zdCBrZXlzMiA9IFtdOwogICAgICBjb25zdCBmbGFncyA9IHNlbnNpdGl2ZSA/ICIiIDogImkiOwogICAgICBjb25zdCBzb3VyY2VzID0gW107CiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgcGF0aHNUb0FycmF5KHBhdGgyLCBbXSkpIHsKICAgICAgICBjb25zdCBkYXRhID0gdHlwZW9mIGlucHV0ID09PSAib2JqZWN0IiA/IGlucHV0IDogcGFyc2U4KGlucHV0LCBvcHRpb25zKTsKICAgICAgICBmb3IgKGNvbnN0IHRva2VucyBvZiBmbGF0dGVuKGRhdGEudG9rZW5zLCAwLCBbXSkpIHsKICAgICAgICAgIHNvdXJjZXMucHVzaCh0b1JlZ0V4cFNvdXJjZSh0b2tlbnMsIGRlbGltaXRlciwga2V5czIsIGRhdGEub3JpZ2luYWxQYXRoKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGxldCBwYXR0ZXJuID0gYF4oPzoke3NvdXJjZXMuam9pbigifCIpfSlgOwogICAgICBpZiAodHJhaWxpbmcpCiAgICAgICAgcGF0dGVybiArPSBgKD86JHtlc2NhcGUoZGVsaW1pdGVyKX0kKT9gOwogICAgICBwYXR0ZXJuICs9IGVuZDMgPyAiJCIgOiBgKD89JHtlc2NhcGUoZGVsaW1pdGVyKX18JClgOwogICAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTsKICAgICAgcmV0dXJuIHsgcmVnZXhwLCBrZXlzOiBrZXlzMiB9OwogICAgfQogICAgZnVuY3Rpb24gcGF0aHNUb0FycmF5KHBhdGhzLCBpbml0KSB7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGhzKSkgewogICAgICAgIGZvciAoY29uc3QgcDcgb2YgcGF0aHMpCiAgICAgICAgICBwYXRoc1RvQXJyYXkocDcsIGluaXQpOwogICAgICB9IGVsc2UgewogICAgICAgIGluaXQucHVzaChwYXRocyk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluaXQ7CiAgICB9CiAgICBmdW5jdGlvbiogZmxhdHRlbih0b2tlbnMsIGluZGV4MiwgaW5pdCkgewogICAgICBpZiAoaW5kZXgyID09PSB0b2tlbnMubGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIHlpZWxkIGluaXQ7CiAgICAgIH0KICAgICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXgyXTsKICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJncm91cCIpIHsKICAgICAgICBmb3IgKGNvbnN0IHNlcSBvZiBmbGF0dGVuKHRva2VuLnRva2VucywgMCwgaW5pdC5zbGljZSgpKSkgewogICAgICAgICAgeWllbGQqIGZsYXR0ZW4odG9rZW5zLCBpbmRleDIgKyAxLCBzZXEpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpbml0LnB1c2godG9rZW4pOwogICAgICB9CiAgICAgIHlpZWxkKiBmbGF0dGVuKHRva2VucywgaW5kZXgyICsgMSwgaW5pdCk7CiAgICB9CiAgICBmdW5jdGlvbiB0b1JlZ0V4cFNvdXJjZSh0b2tlbnMsIGRlbGltaXRlciwga2V5czIsIG9yaWdpbmFsUGF0aCkgewogICAgICBsZXQgcmVzdWx0ID0gIiI7CiAgICAgIGxldCBiYWNrdHJhY2sgPSAiIjsKICAgICAgbGV0IGlzU2FmZVNlZ21lbnRQYXJhbSA9IHRydWU7CiAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7CiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJ0ZXh0IikgewogICAgICAgICAgcmVzdWx0ICs9IGVzY2FwZSh0b2tlbi52YWx1ZSk7CiAgICAgICAgICBiYWNrdHJhY2sgKz0gdG9rZW4udmFsdWU7CiAgICAgICAgICBpc1NhZmVTZWdtZW50UGFyYW0gfHwgKGlzU2FmZVNlZ21lbnRQYXJhbSA9IHRva2VuLnZhbHVlLmluY2x1ZGVzKGRlbGltaXRlcikpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICh0b2tlbi50eXBlID09PSAicGFyYW0iIHx8IHRva2VuLnR5cGUgPT09ICJ3aWxkY2FyZCIpIHsKICAgICAgICAgIGlmICghaXNTYWZlU2VnbWVudFBhcmFtICYmICFiYWNrdHJhY2spIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhdGhFcnJvcihgTWlzc2luZyB0ZXh0IGJlZm9yZSAiJHt0b2tlbi5uYW1lfSIgJHt0b2tlbi50eXBlfWAsIG9yaWdpbmFsUGF0aCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gInBhcmFtIikgewogICAgICAgICAgICByZXN1bHQgKz0gYCgke25lZ2F0ZShkZWxpbWl0ZXIsIGlzU2FmZVNlZ21lbnRQYXJhbSA/ICIiIDogYmFja3RyYWNrKX0rKWA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXN1bHQgKz0gYChbXFxzXFxTXSspYDsKICAgICAgICAgIH0KICAgICAgICAgIGtleXMyLnB1c2godG9rZW4pOwogICAgICAgICAgYmFja3RyYWNrID0gIiI7CiAgICAgICAgICBpc1NhZmVTZWdtZW50UGFyYW0gPSBmYWxzZTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gbmVnYXRlKGRlbGltaXRlciwgYmFja3RyYWNrKSB7CiAgICAgIGlmIChiYWNrdHJhY2subGVuZ3RoIDwgMikgewogICAgICAgIGlmIChkZWxpbWl0ZXIubGVuZ3RoIDwgMikKICAgICAgICAgIHJldHVybiBgW14ke2VzY2FwZShkZWxpbWl0ZXIgKyBiYWNrdHJhY2spfV1gOwogICAgICAgIHJldHVybiBgKD86KD8hJHtlc2NhcGUoZGVsaW1pdGVyKX0pW14ke2VzY2FwZShiYWNrdHJhY2spfV0pYDsKICAgICAgfQogICAgICBpZiAoZGVsaW1pdGVyLmxlbmd0aCA8IDIpIHsKICAgICAgICByZXR1cm4gYCg/Oig/ISR7ZXNjYXBlKGJhY2t0cmFjayl9KVteJHtlc2NhcGUoZGVsaW1pdGVyKX1dKWA7CiAgICAgIH0KICAgICAgcmV0dXJuIGAoPzooPyEke2VzY2FwZShiYWNrdHJhY2spfXwke2VzY2FwZShkZWxpbWl0ZXIpfSlbXFxzXFxTXSlgOwogICAgfQogICAgZnVuY3Rpb24gc3RyaW5naWZ5VG9rZW5zKHRva2VucykgewogICAgICBsZXQgdmFsdWUyID0gIiI7CiAgICAgIGxldCBpMTEgPSAwOwogICAgICBmdW5jdGlvbiBuYW1lKHZhbHVlMykgewogICAgICAgIGNvbnN0IGlzU2FmZSA9IGlzTmFtZVNhZmUodmFsdWUzKSAmJiBpc05leHROYW1lU2FmZSh0b2tlbnNbaTExXSk7CiAgICAgICAgcmV0dXJuIGlzU2FmZSA/IHZhbHVlMyA6IEpTT04uc3RyaW5naWZ5KHZhbHVlMyk7CiAgICAgIH0KICAgICAgd2hpbGUgKGkxMSA8IHRva2Vucy5sZW5ndGgpIHsKICAgICAgICBjb25zdCB0b2tlbiA9IHRva2Vuc1tpMTErK107CiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJ0ZXh0IikgewogICAgICAgICAgdmFsdWUyICs9IGVzY2FwZVRleHQodG9rZW4udmFsdWUpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICh0b2tlbi50eXBlID09PSAiZ3JvdXAiKSB7CiAgICAgICAgICB2YWx1ZTIgKz0gYHske3N0cmluZ2lmeVRva2Vucyh0b2tlbi50b2tlbnMpfX1gOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICh0b2tlbi50eXBlID09PSAicGFyYW0iKSB7CiAgICAgICAgICB2YWx1ZTIgKz0gYDoke25hbWUodG9rZW4ubmFtZSl9YDsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gIndpbGRjYXJkIikgewogICAgICAgICAgdmFsdWUyICs9IGAqJHtuYW1lKHRva2VuLm5hbWUpfWA7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5rbm93biB0b2tlbiB0eXBlOiAke3Rva2VuLnR5cGV9YCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHZhbHVlMjsKICAgIH0KICAgIGZ1bmN0aW9uIHN0cmluZ2lmeTUoZGF0YSkgewogICAgICByZXR1cm4gc3RyaW5naWZ5VG9rZW5zKGRhdGEudG9rZW5zKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTmFtZVNhZmUobmFtZSkgewogICAgICBjb25zdCBbZmlyc3QyLCAuLi5yZXN0XSA9IG5hbWU7CiAgICAgIHJldHVybiBJRF9TVEFSVC50ZXN0KGZpcnN0MikgJiYgcmVzdC5ldmVyeSgoY2hhcikgPT4gSURfQ09OVElOVUUudGVzdChjaGFyKSk7CiAgICB9CiAgICBmdW5jdGlvbiBpc05leHROYW1lU2FmZSh0b2tlbikgewogICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gInRleHQiKQogICAgICAgIHJldHVybiAhSURfQ09OVElOVUUudGVzdCh0b2tlbi52YWx1ZVswXSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyb3V0ZXJAMS4zLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cm91dGVyL2Rpc3RfdHMvc21hcnRyb3V0ZXIucGx1Z2lucy5qcwp2YXIgcGF0aFRvUmVnRXhwOwp2YXIgaW5pdF9zbWFydHJvdXRlcl9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyb3V0ZXJAMS4zLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cm91dGVyL2Rpc3RfdHMvc21hcnRyb3V0ZXIucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHM3KCk7CiAgICBpbml0X2Rpc3RfdHMyKCk7CiAgICBwYXRoVG9SZWdFeHAgPSBfX3RvRVNNKHJlcXVpcmVfZGlzdCgpLCAxKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cm91dGVyQDEuMy4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJvdXRlci9kaXN0X3RzL3NtYXJ0cm91dGVyLmNsYXNzZXMucXVlcnlwYXJhbXMuanMKdmFyIFF1ZXJ5UGFyYW1zOwp2YXIgaW5pdF9zbWFydHJvdXRlcl9jbGFzc2VzX3F1ZXJ5cGFyYW1zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyb3V0ZXJAMS4zLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cm91dGVyL2Rpc3RfdHMvc21hcnRyb3V0ZXIuY2xhc3Nlcy5xdWVyeXBhcmFtcy5qcyIoKSB7CiAgICBpbml0X3NtYXJ0cm91dGVyX3BsdWdpbnMoKTsKICAgIFF1ZXJ5UGFyYW1zID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgfQogICAgICBnZXRBbGxBc09iamVjdCgpIHsKICAgICAgICBjb25zdCB1cmxTZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXModXJsU2VhcmNoUGFyYW1zLmVudHJpZXMoKSk7CiAgICAgIH0KICAgICAgc2V0UXVlcnlQYXJhbShxdWVyeUtleUFyZywgcXVlcnlDb250ZW50QXJnLCBwdXNoT3JSZXBsYWNlQXJnID0gInJlcGxhY2UiKSB7CiAgICAgICAgdmFyIHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsKICAgICAgICBxdWVyeVBhcmFtcy5zZXQocXVlcnlLZXlBcmcsIHF1ZXJ5Q29udGVudEFyZyk7CiAgICAgICAgcHVzaE9yUmVwbGFjZUFyZyA9PT0gInB1c2giID8gaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgIj8iICsgcXVlcnlQYXJhbXMudG9TdHJpbmcoKSkgOiBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCBudWxsLCAiPyIgKyBxdWVyeVBhcmFtcy50b1N0cmluZygpKTsKICAgICAgfQogICAgICBkZWxldGVRdWVyeVBhcmFtKHF1ZXJ5S2V5QXJnLCBwdXNoT3JSZXBsYWNlQXJnID0gInJlcGxhY2UiKSB7CiAgICAgICAgdmFyIHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsKICAgICAgICBxdWVyeVBhcmFtcy5kZWxldGUocXVlcnlLZXlBcmcpOwogICAgICAgIHB1c2hPclJlcGxhY2VBcmcgPT09ICJwdXNoIiA/IGhpc3RvcnkucHVzaFN0YXRlKG51bGwsIG51bGwsICI/IiArIHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKCkpIDogaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgbnVsbCwgIj8iICsgcXVlcnlQYXJhbXMudG9TdHJpbmcoKSk7CiAgICAgIH0KICAgICAgZ2V0UXVlcnlQYXJhbShxdWVyeVBhcmFtTmFtZSkgewogICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5nZXRBbGxBc09iamVjdCgpOwogICAgICAgIHJldHVybiBxdWVyeVBhcmFtc1txdWVyeVBhcmFtTmFtZV07CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJvdXRlckAxLjMuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyb3V0ZXIvZGlzdF90cy9zbWFydHJvdXRlci5jbGFzc2VzLnNtYXJ0cm91dGVyLmpzCnZhciByb3V0ZUxvZywgU21hcnRSb3V0ZXI7CnZhciBpbml0X3NtYXJ0cm91dGVyX2NsYXNzZXNfc21hcnRyb3V0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJvdXRlckAxLjMuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyb3V0ZXIvZGlzdF90cy9zbWFydHJvdXRlci5jbGFzc2VzLnNtYXJ0cm91dGVyLmpzIigpIHsKICAgIGluaXRfc21hcnRyb3V0ZXJfcGx1Z2lucygpOwogICAgaW5pdF9zbWFydHJvdXRlcl9jbGFzc2VzX3F1ZXJ5cGFyYW1zKCk7CiAgICByb3V0ZUxvZyA9IChtZXNzYWdlMikgPT4gewogICAgICBjb25zb2xlLmxvZyhgJWNbUm91dGVyXSVjICR7bWVzc2FnZTJ9YCwgImNvbG9yOiByZ2IoMjU1LCAxMDUsIDEwMCk7IiwgImNvbG9yOiBpbmhlcml0Iik7CiAgICB9OwogICAgU21hcnRSb3V0ZXIgPSBjbGFzcyBfU21hcnRSb3V0ZXIgewogICAgICAvKioKICAgICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBSb3V0ZXIuCiAgICAgICAqLwogICAgICBjb25zdHJ1Y3RvcihvcHRpb25zQXJnLCBiYXNlUGF0aCA9ICIiKSB7CiAgICAgICAgdGhpcy5vcHRpb25zID0gewogICAgICAgICAgZGVidWc6IGZhbHNlCiAgICAgICAgfTsKICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gbmV3IFF1ZXJ5UGFyYW1zKCk7CiAgICAgICAgdGhpcy5yb3V0ZXMgPSBbXTsKICAgICAgICB0aGlzLm9wdGlvbnMgPSB7CiAgICAgICAgICAuLi50aGlzLm9wdGlvbnMsCiAgICAgICAgICAuLi5vcHRpb25zQXJnCiAgICAgICAgfTsKICAgICAgICB0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGg7CiAgICAgICAgdGhpcy5wb3BzdGF0ZUxpc3RlbmVyID0gKHBvcFN0YXRlRXZlbnRBcmcpID0+IHsKICAgICAgICAgIHBvcFN0YXRlRXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuX2hhbmRsZVJvdXRlU3RhdGUoKTsKICAgICAgICB9OwogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsIHRoaXMucG9wc3RhdGVMaXN0ZW5lcik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhIHN1Yi1yb3V0ZXIgd2l0aCBhIHNwZWNpZmljIHByZWZpeAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3ViUGF0aAogICAgICAgKiBAcGFyYW0ge0lSb3V0ZXJPcHRpb25zfSBbb3B0aW9uc10KICAgICAgICovCiAgICAgIGNyZWF0ZVN1YlJvdXRlcihzdWJQYXRoLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgbmV3QmFzZVBhdGggPSBgJHt0aGlzLmJhc2VQYXRofSR7c3ViUGF0aH1gOwogICAgICAgIHJldHVybiBuZXcgX1NtYXJ0Um91dGVyKHsgLi4udGhpcy5vcHRpb25zLCAuLi5vcHRpb25zIH0sIG5ld0Jhc2VQYXRoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUHVzaCByb3V0ZSBzdGF0ZSB0byBoaXN0b3J5IHN0YWNrCiAgICAgICAqLwogICAgICBhc3luYyBwdXNoVXJsKHVybCA9ICIvIiwgc3RhdGUxNCA9IHt9KSB7CiAgICAgICAgY29uc3QgZnVsbFVybCA9IGAke3RoaXMuYmFzZVBhdGh9JHt1cmx9YDsKICAgICAgICBpZiAoZnVsbFVybCAhPT0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKSB7CiAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoc3RhdGUxNCwgd2luZG93LmRvY3VtZW50LnRpdGxlLCBmdWxsVXJsKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHN0YXRlMTQsIHdpbmRvdy5kb2N1bWVudC50aXRsZSwgZnVsbFVybCk7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMuX2hhbmRsZVJvdXRlU3RhdGUoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQXR0YWNoIHJvdXRlIHdpdGggaGFuZGxlcgogICAgICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHJvdXRlQXJnCiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGhhbmRsZXJBcmcKICAgICAgICovCiAgICAgIG9uKHJvdXRlQXJnLCBoYW5kbGVyQXJnKSB7CiAgICAgICAgY29uc3QgZnVsbFJvdXRlID0gYCR7dGhpcy5iYXNlUGF0aH0ke3JvdXRlQXJnfWA7CiAgICAgICAgY29uc3Qgcm91dGVPYmplY3QgPSB7CiAgICAgICAgICBtYXRjaEZ1bmN0aW9uOiBwYXRoVG9SZWdFeHAubWF0Y2goZnVsbFJvdXRlKSwKICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXJBcmcKICAgICAgICB9OwogICAgICAgIHRoaXMucm91dGVzLnB1c2gocm91dGVPYmplY3QpOwogICAgICAgIGNvbnN0IHJlbW92ZUZ1bmN0aW9uID0gKCkgPT4gewogICAgICAgICAgdGhpcy5yb3V0ZXMuc3BsaWNlKHRoaXMucm91dGVzLmluZGV4T2Yocm91dGVPYmplY3QpLCAxKTsKICAgICAgICB9OwogICAgICAgIHJldHVybiByZW1vdmVGdW5jdGlvbjsKICAgICAgfQogICAgICAvKioKICAgICAgICogQXBwbHkgcm91dGVzIGhhbmRsZXIgdG8gY3VycmVudCByb3V0ZQogICAgICAgKi8KICAgICAgYXN5bmMgX2hhbmRsZVJvdXRlU3RhdGUoKSB7CiAgICAgICAgY29uc3QgY3VycmVudExvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lOwogICAgICAgIGNvbnN0IHdhbnRlZFJvdXRlcyA9IHRoaXMucm91dGVzLmZpbHRlcigocm91dGVBcmcpID0+IHsKICAgICAgICAgIHJldHVybiAhIXJvdXRlQXJnLm1hdGNoRnVuY3Rpb24oY3VycmVudExvY2F0aW9uKTsKICAgICAgICB9KTsKICAgICAgICBmb3IgKGNvbnN0IHdhbnRlZFJvdXRlIG9mIHdhbnRlZFJvdXRlcykgewogICAgICAgICAgY29uc3Qgcm91dGVSZXN1bHQgPSB3YW50ZWRSb3V0ZS5tYXRjaEZ1bmN0aW9uKGN1cnJlbnRMb2NhdGlvbik7CiAgICAgICAgICB3YW50ZWRSb3V0ZS5oYW5kbGVyKHsKICAgICAgICAgICAgLi4ucm91dGVSZXN1bHQudmFsdWVPZigpLAogICAgICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtcy5nZXRBbGxBc09iamVjdCgpCiAgICAgICAgICAgIC8vIFRPRE8gY2hlY2sgd2V0aGVyIGVudHJpZXMgaXMgc3VwcG9ydGVkIGluIHR5cGluZ3MKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogRGVzdHJveSB0aGUgcm91dGVyIGluc3RhbmNlLCByZW1vdmluZyBhbGwgZXh0ZXJuYWwgcmVmZXJlbmNlcwogICAgICAgKi8KICAgICAgZGVzdHJveSgpIHsKICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLCB0aGlzLnBvcHN0YXRlTGlzdGVuZXIpOwogICAgICAgIHRoaXMucm91dGVzID0gW107CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJvdXRlckAxLjMuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyb3V0ZXIvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTggPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTgsIHsKICBTbWFydFJvdXRlcjogKCkgPT4gU21hcnRSb3V0ZXIKfSk7CnZhciBpbml0X2Rpc3RfdHMxOCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cm91dGVyQDEuMy4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJvdXRlci9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRyb3V0ZXJfY2xhc3Nlc19zbWFydHJvdXRlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRoYXNoQDMuMi42L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGhhc2gvZGlzdF90c193ZWIvcGx1Z2lucy5qcwp2YXIgaW5pdF9wbHVnaW5zMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0aGFzaEAzLjIuNi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRoYXNoL2Rpc3RfdHNfd2ViL3BsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMTAoKTsKICAgIGluaXRfZGlzdF90czEyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGhhc2hAMy4yLjYvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0aGFzaC9kaXN0X3RzX3dlYi9zaGEyNTYuZmFsbGJhY2suanMKZnVuY3Rpb24gcm90cihuMTMsIGI1KSB7CiAgcmV0dXJuIG4xMyA+Pj4gYjUgfCBuMTMgPDwgMzIgLSBiNTsKfQpmdW5jdGlvbiBzaGEyNTZUcmFuc2Zvcm0oVzIsIEg0KSB7CiAgbGV0IGE1ID0gSDRbMF07CiAgbGV0IGI1ID0gSDRbMV07CiAgbGV0IGMxMSA9IEg0WzJdOwogIGxldCBkNiA9IEg0WzNdOwogIGxldCBlMTEgPSBINFs0XTsKICBsZXQgZjcgPSBINFs1XTsKICBsZXQgZzQgPSBINFs2XTsKICBsZXQgaDkgPSBINFs3XTsKICBmb3IgKGxldCBqNCA9IDA7IGo0IDwgNjQ7IGo0KyspIHsKICAgIGlmIChqNCA+PSAxNikgewogICAgICBjb25zdCBzMCA9IHJvdHIoVzJbajQgLSAxNV0sIDcpIF4gcm90cihXMltqNCAtIDE1XSwgMTgpIF4gVzJbajQgLSAxNV0gPj4+IDM7CiAgICAgIGNvbnN0IHMxID0gcm90cihXMltqNCAtIDJdLCAxNykgXiByb3RyKFcyW2o0IC0gMl0sIDE5KSBeIFcyW2o0IC0gMl0gPj4+IDEwOwogICAgICBXMltqNF0gPSBXMltqNCAtIDE2XSArIHMwICsgVzJbajQgLSA3XSArIHMxID4+PiAwOwogICAgfQogICAgY29uc3QgUzEgPSByb3RyKGUxMSwgNikgXiByb3RyKGUxMSwgMTEpIF4gcm90cihlMTEsIDI1KTsKICAgIGNvbnN0IGNoID0gZTExICYgZjcgXiB+ZTExICYgZzQ7CiAgICBjb25zdCB0ZW1wMSA9IGg5ICsgUzEgKyBjaCArIEtbajRdICsgVzJbajRdID4+PiAwOwogICAgY29uc3QgUzAgPSByb3RyKGE1LCAyKSBeIHJvdHIoYTUsIDEzKSBeIHJvdHIoYTUsIDIyKTsKICAgIGNvbnN0IG1haiA9IGE1ICYgYjUgXiBhNSAmIGMxMSBeIGI1ICYgYzExOwogICAgY29uc3QgdGVtcDIgPSBTMCArIG1haiA+Pj4gMDsKICAgIGg5ID0gZzQ7CiAgICBnNCA9IGY3OwogICAgZjcgPSBlMTE7CiAgICBlMTEgPSBkNiArIHRlbXAxID4+PiAwOwogICAgZDYgPSBjMTE7CiAgICBjMTEgPSBiNTsKICAgIGI1ID0gYTU7CiAgICBhNSA9IHRlbXAxICsgdGVtcDIgPj4+IDA7CiAgfQogIEg0WzBdID0gSDRbMF0gKyBhNSA+Pj4gMDsKICBINFsxXSA9IEg0WzFdICsgYjUgPj4+IDA7CiAgSDRbMl0gPSBINFsyXSArIGMxMSA+Pj4gMDsKICBINFszXSA9IEg0WzNdICsgZDYgPj4+IDA7CiAgSDRbNF0gPSBINFs0XSArIGUxMSA+Pj4gMDsKICBINFs1XSA9IEg0WzVdICsgZjcgPj4+IDA7CiAgSDRbNl0gPSBINFs2XSArIGc0ID4+PiAwOwogIEg0WzddID0gSDRbN10gKyBoOSA+Pj4gMDsKfQpmdW5jdGlvbiBzaGEyNTZGYWxsYmFjayhieXRlcykgewogIGNvbnN0IEhfY29weSA9IFsuLi5IMl07CiAgY29uc3QgbXNnTGVuID0gYnl0ZXMubGVuZ3RoOwogIGNvbnN0IG1zZ0JpdExlbiA9IG1zZ0xlbiAqIDg7CiAgY29uc3QgcGFkTGVuID0gbXNnTGVuICUgNjQgPCA1NiA/IDU2IC0gbXNnTGVuICUgNjQgOiAxMjAgLSBtc2dMZW4gJSA2NDsKICBjb25zdCBwYWRkZWQgPSBuZXcgVWludDhBcnJheShtc2dMZW4gKyBwYWRMZW4gKyA4KTsKICBwYWRkZWQuc2V0KGJ5dGVzKTsKICBwYWRkZWRbbXNnTGVuXSA9IDEyODsKICBjb25zdCBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhwYWRkZWQuYnVmZmVyKTsKICBkYXRhVmlldy5zZXRVaW50MzIocGFkZGVkLmxlbmd0aCAtIDgsIDAsIGZhbHNlKTsKICBkYXRhVmlldy5zZXRVaW50MzIocGFkZGVkLmxlbmd0aCAtIDQsIG1zZ0JpdExlbiA+Pj4gMCwgZmFsc2UpOwogIGZvciAobGV0IG9mZnNldCA9IDA7IG9mZnNldCA8IHBhZGRlZC5sZW5ndGg7IG9mZnNldCArPSA2NCkgewogICAgY29uc3QgVzIgPSBuZXcgQXJyYXkoNjQpOwogICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgMTY7IGkxMSsrKSB7CiAgICAgIFcyW2kxMV0gPSBkYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0ICsgaTExICogNCwgZmFsc2UpOwogICAgfQogICAgc2hhMjU2VHJhbnNmb3JtKFcyLCBIX2NvcHkpOwogIH0KICBsZXQgaGV4MyA9ICIiOwogIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IDg7IGkxMSsrKSB7CiAgICBoZXgzICs9IEhfY29weVtpMTFdLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCAiMCIpOwogIH0KICByZXR1cm4gaGV4MzsKfQp2YXIgSywgSDI7CnZhciBpbml0X3NoYTI1Nl9mYWxsYmFjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0aGFzaEAzLjIuNi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRoYXNoL2Rpc3RfdHNfd2ViL3NoYTI1Ni5mYWxsYmFjay5qcyIoKSB7CiAgICBLID0gWwogICAgICAxMTE2MzUyNDA4LAogICAgICAxODk5NDQ3NDQxLAogICAgICAzMDQ5MzIzNDcxLAogICAgICAzOTIxMDA5NTczLAogICAgICA5NjE5ODcxNjMsCiAgICAgIDE1MDg5NzA5OTMsCiAgICAgIDI0NTM2MzU3NDgsCiAgICAgIDI4NzA3NjMyMjEsCiAgICAgIDM2MjQzODEwODAsCiAgICAgIDMxMDU5ODQwMSwKICAgICAgNjA3MjI1Mjc4LAogICAgICAxNDI2ODgxOTg3LAogICAgICAxOTI1MDc4Mzg4LAogICAgICAyMTYyMDc4MjA2LAogICAgICAyNjE0ODg4MTAzLAogICAgICAzMjQ4MjIyNTgwLAogICAgICAzODM1MzkwNDAxLAogICAgICA0MDIyMjI0Nzc0LAogICAgICAyNjQzNDcwNzgsCiAgICAgIDYwNDgwNzYyOCwKICAgICAgNzcwMjU1OTgzLAogICAgICAxMjQ5MTUwMTIyLAogICAgICAxNTU1MDgxNjkyLAogICAgICAxOTk2MDY0OTg2LAogICAgICAyNTU0MjIwODgyLAogICAgICAyODIxODM0MzQ5LAogICAgICAyOTUyOTk2ODA4LAogICAgICAzMjEwMzEzNjcxLAogICAgICAzMzM2NTcxODkxLAogICAgICAzNTg0NTI4NzExLAogICAgICAxMTM5MjY5OTMsCiAgICAgIDMzODI0MTg5NSwKICAgICAgNjY2MzA3MjA1LAogICAgICA3NzM1Mjk5MTIsCiAgICAgIDEyOTQ3NTczNzIsCiAgICAgIDEzOTYxODIyOTEsCiAgICAgIDE2OTUxODM3MDAsCiAgICAgIDE5ODY2NjEwNTEsCiAgICAgIDIxNzcwMjYzNTAsCiAgICAgIDI0NTY5NTYwMzcsCiAgICAgIDI3MzA0ODU5MjEsCiAgICAgIDI4MjAzMDI0MTEsCiAgICAgIDMyNTk3MzA4MDAsCiAgICAgIDMzNDU3NjQ3NzEsCiAgICAgIDM1MTYwNjU4MTcsCiAgICAgIDM2MDAzNTI4MDQsCiAgICAgIDQwOTQ1NzE5MDksCiAgICAgIDI3NTQyMzM0NCwKICAgICAgNDMwMjI3NzM0LAogICAgICA1MDY5NDg2MTYsCiAgICAgIDY1OTA2MDU1NiwKICAgICAgODgzOTk3ODc3LAogICAgICA5NTgxMzk1NzEsCiAgICAgIDEzMjI4MjIyMTgsCiAgICAgIDE1MzcwMDIwNjMsCiAgICAgIDE3NDc4NzM3NzksCiAgICAgIDE5NTU1NjIyMjIsCiAgICAgIDIwMjQxMDQ4MTUsCiAgICAgIDIyMjc3MzA0NTIsCiAgICAgIDIzNjE4NTI0MjQsCiAgICAgIDI0Mjg0MzY0NzQsCiAgICAgIDI3NTY3MzQxODcsCiAgICAgIDMyMDQwMzE0NzksCiAgICAgIDMzMjkzMjUyOTgKICAgIF07CiAgICBIMiA9IFsKICAgICAgMTc3OTAzMzcwMywKICAgICAgMzE0NDEzNDI3NywKICAgICAgMTAxMzkwNDI0MiwKICAgICAgMjc3MzQ4MDc2MiwKICAgICAgMTM1OTg5MzExOSwKICAgICAgMjYwMDgyMjkyNCwKICAgICAgNTI4NzM0NjM1LAogICAgICAxNTQxNDU5MjI1CiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRoYXNoQDMuMi42L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGhhc2gvZGlzdF90c193ZWIvaW5kZXguanMKdmFyIGRpc3RfdHNfd2ViX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoZGlzdF90c193ZWJfZXhwb3J0cywgewogIG1kNUZyb21TdHJpbmc6ICgpID0+IG1kNUZyb21TdHJpbmcsCiAgc2hhMjU2RnJvbUJ1ZmZlcjogKCkgPT4gc2hhMjU2RnJvbUJ1ZmZlciwKICBzaGEyNTZGcm9tRmlsZTogKCkgPT4gc2hhMjU2RnJvbUZpbGUsCiAgc2hhMjU2RnJvbVN0cmVhbTogKCkgPT4gc2hhMjU2RnJvbVN0cmVhbSwKICBzaGEyNTZGcm9tU3RyaW5nOiAoKSA9PiBzaGEyNTZGcm9tU3RyaW5nLAogIHNoYTI1NkZyb21TdHJpbmdTeW5jOiAoKSA9PiBzaGEyNTZGcm9tU3RyaW5nU3luYywKICBzaGEyNjVGcm9tT2JqZWN0OiAoKSA9PiBzaGEyNjVGcm9tT2JqZWN0Cn0pOwp2YXIgaGV4LCBpc0NyeXB0b1N1YnRsZUF2YWlsYWJsZSwgc2hhMjU2RnJvbVN0cmluZywgc2hhMjU2RnJvbVN0cmluZ1N5bmMsIHNoYTI1NkZyb21CdWZmZXIsIHNoYTI2NUZyb21PYmplY3QsIHNoYTI1NkZyb21TdHJlYW0sIHNoYTI1NkZyb21GaWxlLCBtZDVGcm9tU3RyaW5nOwp2YXIgaW5pdF9kaXN0X3RzX3dlYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0aGFzaEAzLjIuNi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRoYXNoL2Rpc3RfdHNfd2ViL2luZGV4LmpzIigpIHsKICAgIGluaXRfcGx1Z2luczIoKTsKICAgIGluaXRfc2hhMjU2X2ZhbGxiYWNrKCk7CiAgICBoZXggPSAoYnVmZmVyMikgPT4gewogICAgICBjb25zdCBoZXhDb2RlcyA9IFtdOwogICAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlcjIpOwogICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCB2aWV3LmJ5dGVMZW5ndGg7IGkxMSArPSA0KSB7CiAgICAgICAgY29uc3QgdmFsdWUyID0gdmlldy5nZXRVaW50MzIoaTExKTsKICAgICAgICBjb25zdCBzdHJpbmdWYWx1ZSA9IHZhbHVlMi50b1N0cmluZygxNik7CiAgICAgICAgY29uc3QgcGFkZGluZyA9ICIwMDAwMDAwMCI7CiAgICAgICAgY29uc3QgcGFkZGVkVmFsdWUgPSAocGFkZGluZyArIHN0cmluZ1ZhbHVlKS5zbGljZSgtcGFkZGluZy5sZW5ndGgpOwogICAgICAgIGhleENvZGVzLnB1c2gocGFkZGVkVmFsdWUpOwogICAgICB9CiAgICAgIHJldHVybiBoZXhDb2Rlcy5qb2luKCIiKTsKICAgIH07CiAgICBpc0NyeXB0b1N1YnRsZUF2YWlsYWJsZSA9ICgpID0+IHsKICAgICAgcmV0dXJuIHR5cGVvZiBjcnlwdG8gIT09ICJ1bmRlZmluZWQiICYmIGNyeXB0by5zdWJ0bGUgIT09IHZvaWQgMDsKICAgIH07CiAgICBzaGEyNTZGcm9tU3RyaW5nID0gYXN5bmMgKHN0cmluZ0FyZykgPT4gewogICAgICBjb25zdCBidWZmZXIyID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0cmluZ0FyZyk7CiAgICAgIGlmIChpc0NyeXB0b1N1YnRsZUF2YWlsYWJsZSgpKSB7CiAgICAgICAgY29uc3QgaGFzaCA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCJTSEEtMjU2IiwgYnVmZmVyMik7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gaGV4KGhhc2gpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHNoYTI1NkZhbGxiYWNrKGJ1ZmZlcjIpOwogICAgICB9CiAgICB9OwogICAgc2hhMjU2RnJvbVN0cmluZ1N5bmMgPSAoc3RyaW5nQXJnKSA9PiB7CiAgICAgIGNvbnNvbGUud2Fybigic2hhMjU2RnJvbVN0cmluZ1N5bmMgaXMgbm90IHRydWx5IHN5bmNocm9ub3VzIGluIGJyb3dzZXIgZW52aXJvbm1lbnQiKTsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJzaGEyNTZGcm9tU3RyaW5nU3luYyBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgZW52aXJvbm1lbnQuIFVzZSBzaGEyNTZGcm9tU3RyaW5nIGluc3RlYWQuIik7CiAgICB9OwogICAgc2hhMjU2RnJvbUJ1ZmZlciA9IGFzeW5jIChidWZmZXJBcmcpID0+IHsKICAgICAgaWYgKGlzQ3J5cHRvU3VidGxlQXZhaWxhYmxlKCkpIHsKICAgICAgICBsZXQgaW5wdXRCdWZmZXI7CiAgICAgICAgaWYgKGJ1ZmZlckFyZyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgICAgICAgIGNvbnN0IHZpZXcgPSBidWZmZXJBcmc7CiAgICAgICAgICBpbnB1dEJ1ZmZlciA9IHZpZXcuYnVmZmVyLnNsaWNlKHZpZXcuYnl0ZU9mZnNldCwgdmlldy5ieXRlT2Zmc2V0ICsgdmlldy5ieXRlTGVuZ3RoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW5wdXRCdWZmZXIgPSBidWZmZXJBcmc7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGhhc2ggPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgiU0hBLTI1NiIsIGlucHV0QnVmZmVyKTsKICAgICAgICBjb25zdCByZXN1bHQgPSBoZXgoaGFzaCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCB1aW50OEFycmF5ID0gYnVmZmVyQXJnIGluc3RhbmNlb2YgVWludDhBcnJheSA/IGJ1ZmZlckFyZyA6IG5ldyBVaW50OEFycmF5KGJ1ZmZlckFyZyk7CiAgICAgICAgcmV0dXJuIHNoYTI1NkZhbGxiYWNrKHVpbnQ4QXJyYXkpOwogICAgICB9CiAgICB9OwogICAgc2hhMjY1RnJvbU9iamVjdCA9IGFzeW5jIChvYmplY3RBcmcpID0+IHsKICAgICAgY29uc3Qgc3RyaW5naWZpZWRPYmplY3QgPSBkaXN0X3RzX2V4cG9ydHMxMi5zdHJpbmdpZnkob2JqZWN0QXJnKTsKICAgICAgY29uc3QgaGFzaFJlc3VsdCA9IGF3YWl0IHNoYTI1NkZyb21TdHJpbmcoc3RyaW5naWZpZWRPYmplY3QpOwogICAgICByZXR1cm4gaGFzaFJlc3VsdDsKICAgIH07CiAgICBzaGEyNTZGcm9tU3RyZWFtID0gKGlucHV0KSA9PiB7CiAgICAgIHRocm93IG5ldyBFcnJvcigic2hhMjU2RnJvbVN0cmVhbSBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgZW52aXJvbm1lbnQiKTsKICAgIH07CiAgICBzaGEyNTZGcm9tRmlsZSA9IGFzeW5jIChmaWxlUGF0aCkgPT4gewogICAgICB0aHJvdyBuZXcgRXJyb3IoInNoYTI1NkZyb21GaWxlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciBlbnZpcm9ubWVudCIpOwogICAgfTsKICAgIG1kNUZyb21TdHJpbmcgPSBhc3luYyAoc3RyaW5nVG9IYXNoKSA9PiB7CiAgICAgIHRocm93IG5ldyBFcnJvcigibWQ1RnJvbVN0cmluZyBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgZW52aXJvbm1lbnQuIFdlYiBDcnlwdG8gQVBJIGRvZXMgbm90IHN1cHBvcnQgTUQ1LiIpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvc21hcnRzdGF0ZS5wbHVnaW5zLmpzCnZhciBpbml0X3NtYXJ0c3RhdGVfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvc21hcnRzdGF0ZS5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90c193ZWIoKTsKICAgIGluaXRfZGlzdF90czEyKCk7CiAgICBpbml0X2Rpc3RfdHMoKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIGluaXRfZGlzdF90czEzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0YXRlQDIuMC4yNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdGF0ZS9kaXN0X3RzL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zdGF0ZWFjdGlvbi5qcwp2YXIgU3RhdGVBY3Rpb247CnZhciBpbml0X3NtYXJ0c3RhdGVfY2xhc3Nlc19zdGF0ZWFjdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvc21hcnRzdGF0ZS5jbGFzc2VzLnN0YXRlYWN0aW9uLmpzIigpIHsKICAgIGluaXRfc21hcnRzdGF0ZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0c3RhdGVfY2xhc3Nlc19zdGF0ZXBhcnQoKTsKICAgIFN0YXRlQWN0aW9uID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihzdGF0ZVBhcnRSZWYsIGFjdGlvbkRlZikgewogICAgICAgIHRoaXMuc3RhdGVQYXJ0UmVmID0gc3RhdGVQYXJ0UmVmOwogICAgICAgIHRoaXMuYWN0aW9uRGVmID0gYWN0aW9uRGVmOwogICAgICB9CiAgICAgIHRyaWdnZXIocGF5bG9hZCkgewogICAgICAgIHJldHVybiB0aGlzLnN0YXRlUGFydFJlZi5kaXNwYXRjaEFjdGlvbih0aGlzLCBwYXlsb2FkKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvc21hcnRzdGF0ZS5jbGFzc2VzLnN0YXRlcGFydC5qcwp2YXIgU3RhdGVQYXJ0Owp2YXIgaW5pdF9zbWFydHN0YXRlX2NsYXNzZXNfc3RhdGVwYXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMjcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9zbWFydHN0YXRlLmNsYXNzZXMuc3RhdGVwYXJ0LmpzIigpIHsKICAgIGluaXRfc21hcnRzdGF0ZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0c3RhdGVfY2xhc3Nlc19zdGF0ZWFjdGlvbigpOwogICAgU3RhdGVQYXJ0ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihuYW1lQXJnLCB3ZWJTdG9yZU9wdGlvbnNBcmcpIHsKICAgICAgICB0aGlzLnN0YXRlID0gbmV3IGRpc3RfdHNfZXhwb3J0czIucnhqcy5TdWJqZWN0KCk7CiAgICAgICAgdGhpcy5jdW11bGF0aXZlRGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMuY3VtdWxhdGl2ZURlZmVyKCk7CiAgICAgICAgdGhpcy53ZWJTdG9yZSA9IG51bGw7CiAgICAgICAgdGhpcy5uYW1lID0gbmFtZUFyZzsKICAgICAgICBpZiAod2ViU3RvcmVPcHRpb25zQXJnKSB7CiAgICAgICAgICB0aGlzLndlYlN0b3JlT3B0aW9ucyA9IHdlYlN0b3JlT3B0aW9uc0FyZzsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGluaXRpYWxpemVzIHRoZSB3ZWJzdG9yZQogICAgICAgKi8KICAgICAgYXN5bmMgaW5pdCgpIHsKICAgICAgICBpZiAodGhpcy53ZWJTdG9yZU9wdGlvbnMpIHsKICAgICAgICAgIHRoaXMud2ViU3RvcmUgPSBuZXcgZGlzdF90c19leHBvcnRzMTMuV2ViU3RvcmUodGhpcy53ZWJTdG9yZU9wdGlvbnMpOwogICAgICAgICAgYXdhaXQgdGhpcy53ZWJTdG9yZS5pbml0KCk7CiAgICAgICAgICBjb25zdCBzdG9yZWRTdGF0ZSA9IGF3YWl0IHRoaXMud2ViU3RvcmUuZ2V0KFN0cmluZyh0aGlzLm5hbWUpKTsKICAgICAgICAgIGlmIChzdG9yZWRTdGF0ZSAmJiB0aGlzLnZhbGlkYXRlU3RhdGUoc3RvcmVkU3RhdGUpKSB7CiAgICAgICAgICAgIHRoaXMuc3RhdGVTdG9yZSA9IHN0b3JlZFN0YXRlOwogICAgICAgICAgICBhd2FpdCB0aGlzLm5vdGlmeUNoYW5nZSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogZ2V0cyB0aGUgc3RhdGUgZnJvbSB0aGUgc3RhdGUgc3RvcmUKICAgICAgICovCiAgICAgIGdldFN0YXRlKCkgewogICAgICAgIHJldHVybiB0aGlzLnN0YXRlU3RvcmU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHNldHMgdGhlIHN0YXRlU3RvcmUgdG8gdGhlIG5ldyBzdGF0ZQogICAgICAgKiBAcGFyYW0gbmV3U3RhdGVBcmcKICAgICAgICovCiAgICAgIGFzeW5jIHNldFN0YXRlKG5ld1N0YXRlQXJnKSB7CiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlU3RhdGUobmV3U3RhdGVBcmcpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc3RhdGUgc3RydWN0dXJlIGZvciBzdGF0ZSBwYXJ0ICcke3RoaXMubmFtZX0nYCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc3RhdGVTdG9yZSA9IG5ld1N0YXRlQXJnOwogICAgICAgIGF3YWl0IHRoaXMubm90aWZ5Q2hhbmdlKCk7CiAgICAgICAgaWYgKHRoaXMud2ViU3RvcmUpIHsKICAgICAgICAgIGF3YWl0IHRoaXMud2ViU3RvcmUuc2V0KFN0cmluZyh0aGlzLm5hbWUpLCBuZXdTdGF0ZUFyZyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLnN0YXRlU3RvcmU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFZhbGlkYXRlcyBzdGF0ZSBzdHJ1Y3R1cmUgLSBjYW4gYmUgb3ZlcnJpZGRlbiBmb3IgY3VzdG9tIHZhbGlkYXRpb24KICAgICAgICogQHBhcmFtIHN0YXRlQXJnCiAgICAgICAqLwogICAgICB2YWxpZGF0ZVN0YXRlKHN0YXRlQXJnKSB7CiAgICAgICAgcmV0dXJuIHN0YXRlQXJnICE9PSBudWxsICYmIHN0YXRlQXJnICE9PSB2b2lkIDA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIG5vdGlmaWVzIG9mIGEgY2hhbmdlIG9uIHRoZSBzdGF0ZQogICAgICAgKi8KICAgICAgYXN5bmMgbm90aWZ5Q2hhbmdlKCkgewogICAgICAgIGlmICghdGhpcy5zdGF0ZVN0b3JlKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IGNyZWF0ZVN0YXRlSGFzaCA9IGFzeW5jIChzdGF0ZUFyZykgPT4gewogICAgICAgICAgcmV0dXJuIGF3YWl0IGRpc3RfdHNfd2ViX2V4cG9ydHMuc2hhMjU2RnJvbVN0cmluZyhkaXN0X3RzX2V4cG9ydHMxMi5zdGFibGVPbmVXYXlTdHJpbmdpZnkoc3RhdGVBcmcpKTsKICAgICAgICB9OwogICAgICAgIGNvbnN0IGN1cnJlbnRIYXNoID0gYXdhaXQgY3JlYXRlU3RhdGVIYXNoKHRoaXMuc3RhdGVTdG9yZSk7CiAgICAgICAgaWYgKHRoaXMubGFzdFN0YXRlTm90aWZpY2F0aW9uUGF5bG9hZEhhc2ggJiYgY3VycmVudEhhc2ggPT09IHRoaXMubGFzdFN0YXRlTm90aWZpY2F0aW9uUGF5bG9hZEhhc2gpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5sYXN0U3RhdGVOb3RpZmljYXRpb25QYXlsb2FkSGFzaCA9IGN1cnJlbnRIYXNoOwogICAgICAgIH0KICAgICAgICB0aGlzLnN0YXRlLm5leHQodGhpcy5zdGF0ZVN0b3JlKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY3JlYXRlcyBhIGN1bXVsYXRpdmUgbm90aWZpY2F0aW9uIGJ5IGFkZGluZyBhIGNoYW5nZSBub3RpZmljYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgY2FsbCBzdGFjazsKICAgICAgICovCiAgICAgIG5vdGlmeUNoYW5nZUN1bXVsYXRpdmUoKSB7CiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5zdGF0ZVN0b3JlKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMubm90aWZ5Q2hhbmdlKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgMCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHNlbGVjdHMgYSBzdGF0ZSBvciBhIHN1YnN0YXRlCiAgICAgICAqLwogICAgICBzZWxlY3Qoc2VsZWN0b3JGbikgewogICAgICAgIGlmICghc2VsZWN0b3JGbikgewogICAgICAgICAgc2VsZWN0b3JGbiA9IChzdGF0ZTE0KSA9PiBzdGF0ZTE0OwogICAgICAgIH0KICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLnN0YXRlLnBpcGUoZGlzdF90c19leHBvcnRzMi5yeGpzLm9wcy5zdGFydFdpdGgodGhpcy5nZXRTdGF0ZSgpKSwgZGlzdF90c19leHBvcnRzMi5yeGpzLm9wcy5maWx0ZXIoKHN0YXRlQXJnKSA9PiBzdGF0ZUFyZyAhPT0gdm9pZCAwKSwgZGlzdF90c19leHBvcnRzMi5yeGpzLm9wcy5tYXAoKHN0YXRlQXJnKSA9PiB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gc2VsZWN0b3JGbihzdGF0ZUFyZyk7CiAgICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICAgIH0KICAgICAgICB9KSk7CiAgICAgICAgcmV0dXJuIG1hcHBlZDsKICAgICAgfQogICAgICAvKioKICAgICAgICogY3JlYXRlcyBhbiBhY3Rpb24gY2FwYWJsZSBvZiBtb2RpZnlpbmcgdGhlIHN0YXRlCiAgICAgICAqLwogICAgICBjcmVhdGVBY3Rpb24oYWN0aW9uRGVmKSB7CiAgICAgICAgcmV0dXJuIG5ldyBTdGF0ZUFjdGlvbih0aGlzLCBhY3Rpb25EZWYpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBkaXNwYXRjaGVzIGFuIGFjdGlvbiBvbiB0aGUgc3RhdGVwYXJ0IGxldmVsCiAgICAgICAqLwogICAgICBhc3luYyBkaXNwYXRjaEFjdGlvbihzdGF0ZUFjdGlvbiwgYWN0aW9uUGF5bG9hZCkgewogICAgICAgIGF3YWl0IHRoaXMuY3VtdWxhdGl2ZURlZmVycmVkLnByb21pc2U7CiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSBhd2FpdCBzdGF0ZUFjdGlvbi5hY3Rpb25EZWYodGhpcywgYWN0aW9uUGF5bG9hZCk7CiAgICAgICAgYXdhaXQgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGUoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogd2FpdHMgdW50aWwgYSBjZXJ0YWluIHBhcnQgb2YgdGhlIHN0YXRlIGJlY29tZXMgYXZhaWxhYmxlCiAgICAgICAqIEBwYXJhbSBzZWxlY3RvckZuCiAgICAgICAqLwogICAgICBhc3luYyB3YWl0VW50aWxQcmVzZW50KHNlbGVjdG9yRm4pIHsKICAgICAgICBjb25zdCBkb25lID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgY29uc3Qgc2VsZWN0ZWRPYnNlcnZhYmxlID0gdGhpcy5zZWxlY3Qoc2VsZWN0b3JGbik7CiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gc2VsZWN0ZWRPYnNlcnZhYmxlLnN1YnNjcmliZShhc3luYyAodmFsdWUyKSA9PiB7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIGRvbmUucmVzb2x2ZSh2YWx1ZTIpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRvbmUucHJvbWlzZTsKICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBpcyBleGVjdXRlZAogICAgICAgKi8KICAgICAgYXN5bmMgc3RhdGVTZXR1cChmdW5jQXJnKSB7CiAgICAgICAgY29uc3QgcmVzdWx0UHJvbWlzZSA9IGZ1bmNBcmcodGhpcyk7CiAgICAgICAgdGhpcy5jdW11bGF0aXZlRGVmZXJyZWQuYWRkUHJvbWlzZShyZXN1bHRQcm9taXNlKTsKICAgICAgICB0aGlzLnNldFN0YXRlKGF3YWl0IHJlc3VsdFByb21pc2UpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMjcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9zbWFydHN0YXRlLmNsYXNzZXMuc21hcnRzdGF0ZS5qcwp2YXIgU21hcnRzdGF0ZTsKdmFyIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3NtYXJ0c3RhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0YXRlQDIuMC4yNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdGF0ZS9kaXN0X3RzL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zbWFydHN0YXRlLmpzIigpIHsKICAgIGluaXRfc21hcnRzdGF0ZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0c3RhdGVfY2xhc3Nlc19zdGF0ZXBhcnQoKTsKICAgIFNtYXJ0c3RhdGUgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuc3RhdGVQYXJ0TWFwID0ge307CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEFsbG93cyBnZXR0aW5nIGFuZCBpbml0aWFsaXppbmcgYSBuZXcgc3RhdGVwYXJ0CiAgICAgICAqIGluaXRNb2RlID09PSAnc29mdCcgKGRlZmF1bHQpIC0gcmV0dXJucyBleGlzdGluZyBzdGF0ZXBhcnQgaWYgZXhpc3RzLCBjcmVhdGVzIG5ldyBpZiBub3QKICAgICAgICogaW5pdE1vZGUgPT09ICdtYW5kYXRvcnknIC0gcmVxdWlyZXMgc3RhdGVwYXJ0IHRvIG5vdCBleGlzdCwgZmFpbHMgaWYgaXQgZG9lcwogICAgICAgKiBpbml0TW9kZSA9PT0gJ2ZvcmNlJyAtIGFsd2F5cyBjcmVhdGVzIG5ldyBzdGF0ZXBhcnQsIG92ZXJ3cml0aW5nIGFueSBleGlzdGluZwogICAgICAgKiBpbml0TW9kZSA9PT0gJ3BlcnNpc3RlbnQnIC0gbGlrZSAnc29mdCcgYnV0IHdpdGggd2Vic3RvcmUgcGVyc2lzdGVuY2UKICAgICAgICogQHBhcmFtIHN0YXRlUGFydE5hbWVBcmcKICAgICAgICogQHBhcmFtIGluaXRpYWxBcmcKICAgICAgICogQHBhcmFtIGluaXRNb2RlCiAgICAgICAqLwogICAgICBhc3luYyBnZXRTdGF0ZVBhcnQoc3RhdGVQYXJ0TmFtZUFyZywgaW5pdGlhbEFyZywgaW5pdE1vZGUgPSAic29mdCIpIHsKICAgICAgICBjb25zdCBleGlzdGluZ1N0YXRlUGFydCA9IHRoaXMuc3RhdGVQYXJ0TWFwW3N0YXRlUGFydE5hbWVBcmddOwogICAgICAgIGlmIChleGlzdGluZ1N0YXRlUGFydCkgewogICAgICAgICAgc3dpdGNoIChpbml0TW9kZSkgewogICAgICAgICAgICBjYXNlICJtYW5kYXRvcnkiOgogICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RhdGUgcGFydCAnJHtzdGF0ZVBhcnROYW1lQXJnfScgYWxyZWFkeSBleGlzdHMsIGJ1dCBpbml0TW9kZSBpcyAnbWFuZGF0b3J5J2ApOwogICAgICAgICAgICBjYXNlICJmb3JjZSI6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU3RhdGVQYXJ0KHN0YXRlUGFydE5hbWVBcmcsIGluaXRpYWxBcmcsIGluaXRNb2RlKTsKICAgICAgICAgICAgY2FzZSAic29mdCI6CiAgICAgICAgICAgIGNhc2UgInBlcnNpc3RlbnQiOgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHJldHVybiBleGlzdGluZ1N0YXRlUGFydDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKCFpbml0aWFsQXJnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RhdGUgcGFydCAnJHtzdGF0ZVBhcnROYW1lQXJnfScgZG9lcyBub3QgZXhpc3QgYW5kIG5vIGluaXRpYWwgc3RhdGUgcHJvdmlkZWRgKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVN0YXRlUGFydChzdGF0ZVBhcnROYW1lQXJnLCBpbml0aWFsQXJnLCBpbml0TW9kZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGVzIGEgc3RhdGVwYXJ0CiAgICAgICAqIEBwYXJhbSBzdGF0ZVBhcnROYW1lCiAgICAgICAqIEBwYXJhbSBpbml0aWFsUGF5bG9hZEFyZwogICAgICAgKiBAcGFyYW0gaW5pdE1vZGUKICAgICAgICovCiAgICAgIGFzeW5jIGNyZWF0ZVN0YXRlUGFydChzdGF0ZVBhcnROYW1lLCBpbml0aWFsUGF5bG9hZEFyZywgaW5pdE1vZGUgPSAic29mdCIpIHsKICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IG5ldyBTdGF0ZVBhcnQoc3RhdGVQYXJ0TmFtZSwgaW5pdE1vZGUgPT09ICJwZXJzaXN0ZW50IiA/IHsKICAgICAgICAgIGRiTmFtZTogInNtYXJ0c3RhdGUiLAogICAgICAgICAgc3RvcmVOYW1lOiBzdGF0ZVBhcnROYW1lCiAgICAgICAgfSA6IG51bGwpOwogICAgICAgIGF3YWl0IG5ld1N0YXRlLmluaXQoKTsKICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBuZXdTdGF0ZS5nZXRTdGF0ZSgpOwogICAgICAgIGF3YWl0IG5ld1N0YXRlLnNldFN0YXRlKHsKICAgICAgICAgIC4uLmN1cnJlbnRTdGF0ZSwKICAgICAgICAgIC4uLmluaXRpYWxQYXlsb2FkQXJnCiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5zdGF0ZVBhcnRNYXBbc3RhdGVQYXJ0TmFtZV0gPSBuZXdTdGF0ZTsKICAgICAgICByZXR1cm4gbmV3U3RhdGU7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0YXRlQDIuMC4yNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdGF0ZS9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMxOSA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMxOSwgewogIFNtYXJ0c3RhdGU6ICgpID0+IFNtYXJ0c3RhdGUsCiAgU3RhdGVBY3Rpb246ICgpID0+IFN0YXRlQWN0aW9uLAogIFN0YXRlUGFydDogKCkgPT4gU3RhdGVQYXJ0Cn0pOwp2YXIgaW5pdF9kaXN0X3RzMTkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0YXRlQDIuMC4yNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdGF0ZS9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3NtYXJ0c3RhdGUoKTsKICAgIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3N0YXRlcGFydCgpOwogICAgaW5pdF9zbWFydHN0YXRlX2NsYXNzZXNfc3RhdGVhY3Rpb24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dXJsQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHVybC9kaXN0X3RzL3NtYXJ0dXJsLnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnR1cmxfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dXJsQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHVybC9kaXN0X3RzL3NtYXJ0dXJsLnBsdWdpbnMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR1cmxAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dXJsL2Rpc3RfdHMvc21hcnR1cmwuY2xhc3Nlcy5zbWFydHVybC5qcwp2YXIgU21hcnR1cmw7CnZhciBpbml0X3NtYXJ0dXJsX2NsYXNzZXNfc21hcnR1cmwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHVybEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR1cmwvZGlzdF90cy9zbWFydHVybC5jbGFzc2VzLnNtYXJ0dXJsLmpzIigpIHsKICAgIGluaXRfc21hcnR1cmxfcGx1Z2lucygpOwogICAgU21hcnR1cmwgPSBjbGFzcyBfU21hcnR1cmwgewogICAgICAvLyBTdGF0aWMgbWV0aG9kIHRvIGNyZWF0ZSBhIFNtYXJ0dXJsIGluc3RhbmNlIGZyb20gYSBVUkwgc3RyaW5nCiAgICAgIHN0YXRpYyBjcmVhdGVGcm9tVXJsKHVybEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIGNvbnN0IHBhcnNlZFVybEluc3RhbmNlID0gbmV3IFVSTCh1cmxBcmcpOwogICAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHt9OwogICAgICAgIGNvbnN0IHNlYXJjaFBhcmFtUGFpcnMgPSBbXTsKICAgICAgICBpZiAocGFyc2VkVXJsSW5zdGFuY2Uuc2VhcmNoKSB7CiAgICAgICAgICBwYXJzZWRVcmxJbnN0YW5jZS5zZWFyY2gucmVwbGFjZSgiPyIsICIiKS5zcGxpdCgiJiIpLm1hcCgoc2VhcmNoUGFyYW1QYWlyKSA9PiB7CiAgICAgICAgICAgIHNlYXJjaFBhcmFtUGFpcnMucHVzaCh7CiAgICAgICAgICAgICAga2V5OiBzZWFyY2hQYXJhbVBhaXIuc3BsaXQoIj0iKVswXSwKICAgICAgICAgICAgICB2YWx1ZTogc2VhcmNoUGFyYW1QYWlyLnNwbGl0KCI9IilbMV0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgZm9yIChjb25zdCBzZWFyY2hQYXJhbVBhaXIgb2Ygc2VhcmNoUGFyYW1QYWlycykgewogICAgICAgICAgc2VhcmNoUGFyYW1zW3NlYXJjaFBhcmFtUGFpci5rZXldID0gc2VhcmNoUGFyYW1QYWlyLnZhbHVlOwogICAgICAgIH0KICAgICAgICBpZiAob3B0aW9uc0FyZz8uc2VhcmNoUGFyYW1zKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2YgT2JqZWN0LmtleXMob3B0aW9uc0FyZy5zZWFyY2hQYXJhbXMpKSB7CiAgICAgICAgICAgIHNlYXJjaFBhcmFtc1trZXkyXSA9IG9wdGlvbnNBcmcuc2VhcmNoUGFyYW1zW2tleTJdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZXQgcGF0aDIgPSBwYXJzZWRVcmxJbnN0YW5jZS5wYXRobmFtZSB8fCAiIjsKICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2VhcmNoUGFyYW1zKS5sZW5ndGggPiAwKSB7CiAgICAgICAgICBwYXRoMiArPSAiPyI7CiAgICAgICAgICBsZXQgZmlyc3QyID0gdHJ1ZTsKICAgICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBPYmplY3Qua2V5cyhzZWFyY2hQYXJhbXMpKSB7CiAgICAgICAgICAgIGlmIChmaXJzdDIpIHsKICAgICAgICAgICAgICBmaXJzdDIgPSBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBwYXRoMiArPSAiJiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcGF0aDIgKz0gYCR7a2V5Mn09JHtzZWFyY2hQYXJhbXNba2V5Ml19YDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gewogICAgICAgICAgLi4ucGFyc2VkVXJsSW5zdGFuY2UsCiAgICAgICAgICBocmVmOiBwYXJzZWRVcmxJbnN0YW5jZS5ocmVmLAogICAgICAgICAgb3JpZ2luOiBwYXJzZWRVcmxJbnN0YW5jZS5vcmlnaW4sCiAgICAgICAgICBwcm90b2NvbDogcGFyc2VkVXJsSW5zdGFuY2UucHJvdG9jb2wsCiAgICAgICAgICB1c2VybmFtZTogcGFyc2VkVXJsSW5zdGFuY2UudXNlcm5hbWUsCiAgICAgICAgICBwYXNzd29yZDogcGFyc2VkVXJsSW5zdGFuY2UucGFzc3dvcmQsCiAgICAgICAgICBob3N0OiBwYXJzZWRVcmxJbnN0YW5jZS5ob3N0LAogICAgICAgICAgaG9zdG5hbWU6IHBhcnNlZFVybEluc3RhbmNlLmhvc3RuYW1lLAogICAgICAgICAgcG9ydDogcGFyc2VkVXJsSW5zdGFuY2UucG9ydCwKICAgICAgICAgIHBhdGg6IHBhdGgyLAogICAgICAgICAgcGF0aG5hbWU6IHBhcnNlZFVybEluc3RhbmNlLnBhdGhuYW1lLAogICAgICAgICAgc2VhcmNoOiBwYXJzZWRVcmxJbnN0YW5jZS5zZWFyY2gsCiAgICAgICAgICBzZWFyY2hQYXJhbXMsCiAgICAgICAgICBoYXNoOiBwYXJzZWRVcmxJbnN0YW5jZS5oYXNoCiAgICAgICAgfTsKICAgICAgICBpZiAoIXBhcnNlZFVybC5wb3J0ICYmIHBhcnNlZFVybC5wcm90b2NvbCA9PT0gImh0dHBzOiIpIHsKICAgICAgICAgIHBhcnNlZFVybC5wb3J0ID0gIjQ0MyI7CiAgICAgICAgfQogICAgICAgIGlmICghcGFyc2VkVXJsLnBvcnQgJiYgcGFyc2VkVXJsLnByb3RvY29sID09PSAiaHR0cDoiKSB7CiAgICAgICAgICBwYXJzZWRVcmwucG9ydCA9ICI4MCI7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJldHVyblNtYXJ0dXJsID0gbmV3IF9TbWFydHVybCgpOwogICAgICAgIE9iamVjdC5hc3NpZ24ocmV0dXJuU21hcnR1cmwsIHBhcnNlZFVybCk7CiAgICAgICAgcmV0dXJuIHJldHVyblNtYXJ0dXJsOwogICAgICB9CiAgICAgIC8vIFN0YXRpYyBtZXRob2QgdG8gY3JlYXRlIGEgU21hcnR1cmwgaW5zdGFuY2UgZnJvbSBhbiBleGlzdGluZyBJVXJsT2JqZWN0CiAgICAgIHN0YXRpYyBjcmVhdGVGcm9tUGFyc2VkVXJsKHBhcnNlZFVybEFyZykgewogICAgICAgIGNvbnN0IHJldHVyblNtYXJ0dXJsID0gbmV3IF9TbWFydHVybCgpOwogICAgICAgIE9iamVjdC5hc3NpZ24ocmV0dXJuU21hcnR1cmwsIHBhcnNlZFVybEFyZyk7CiAgICAgICAgcmV0dXJuIHJldHVyblNtYXJ0dXJsOwogICAgICB9CiAgICAgIC8vIENvbnN0cnVjdG9yIGluaXRpYWxpemVzIHNlYXJjaFBhcmFtcyBhcyBhbiBlbXB0eSBvYmplY3QKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5zZWFyY2hQYXJhbXMgPSB7fTsKICAgICAgfQogICAgICAvLyBNZXRob2QgdG8gY3JlYXRlIGFuIGluZGVwZW5kZW50IGNsb25lIG9mIHRoZSBjdXJyZW50IFNtYXJ0dXJsIGluc3RhbmNlCiAgICAgIGNsb25lKCkgewogICAgICAgIGNvbnN0IGNsb25lZEluc3RhbmNlID0gbmV3IF9TbWFydHVybCgpOwogICAgICAgIE9iamVjdC5hc3NpZ24oY2xvbmVkSW5zdGFuY2UsIHRoaXMpOwogICAgICAgIGNsb25lZEluc3RhbmNlLnNlYXJjaFBhcmFtcyA9IHsgLi4udGhpcy5zZWFyY2hQYXJhbXMgfTsKICAgICAgICByZXR1cm4gY2xvbmVkSW5zdGFuY2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFR5cGVkIG1ldGhvZCB0byBzZXQgYSBwcm9wZXJ0eSBhbmQgcmV0dXJuIHRoZSBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuCiAgICAgICAqIEBwYXJhbSBwcm9wIC0gVGhlIHByb3BlcnR5IG5hbWUgdG8gc2V0IChtdXN0IGJlIGEga2V5IG9mIFNtYXJ0dXJsKQogICAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBwcm9wZXJ0eQogICAgICAgKiBAcmV0dXJucyBUaGUgU21hcnR1cmwgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZwogICAgICAgKi8KICAgICAgc2V0KHByb3AsIHZhbHVlMikgewogICAgICAgIHRoaXNbcHJvcF0gPSB2YWx1ZTI7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgICAgLy8gTWV0aG9kIHRvIGNvbnZlcnQgdGhlIFNtYXJ0dXJsIGluc3RhbmNlIGJhY2sgaW50byBhIFVSTCBzdHJpbmcKICAgICAgdG9TdHJpbmcoKSB7CiAgICAgICAgbGV0IHVzZXJwYXJ0ID0gYGA7CiAgICAgICAgaWYgKHRoaXMudXNlcm5hbWUgJiYgIXRoaXMucGFzc3dvcmQpIHsKICAgICAgICAgIHVzZXJwYXJ0ID0gYCR7dGhpcy51c2VybmFtZX1AYDsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMudXNlcm5hbWUgJiYgdGhpcy5wYXNzd29yZCkgewogICAgICAgICAgdXNlcnBhcnQgPSBgJHt0aGlzLnVzZXJuYW1lfToke3RoaXMucGFzc3dvcmR9QGA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBgJHt0aGlzLnByb3RvY29sfS8vJHt1c2VycGFydH0ke3RoaXMuaG9zdG5hbWV9OiR7dGhpcy5wb3J0fSR7dGhpcy5wYXRofWA7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHVybEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR1cmwvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjAgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjAsIHsKICBTbWFydHVybDogKCkgPT4gU21hcnR1cmwKfSk7CnZhciBpbml0X2Rpc3RfdHMyMCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dXJsQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHVybC9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnR1cmxfY2xhc3Nlc19zbWFydHVybCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2hyb2NrcytzbWFydHByb21pc2VANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNocm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvc21hcnRwcm9taXNlLmNsYXNzZXMuZGVmZXJyZWQuanMKdmFyIERlZmVycmVkMiwgZGVmZXIzOwp2YXIgaW5pdF9zbWFydHByb21pc2VfY2xhc3Nlc19kZWZlcnJlZDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0cHJvbWlzZUA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9zbWFydHByb21pc2UuY2xhc3Nlcy5kZWZlcnJlZC5qcyIoKSB7CiAgICBEZWZlcnJlZDIgPSBjbGFzcyB7CiAgICAgIGNsYWltKCkgewogICAgICAgIGlmICh0aGlzLmNsYWltZWQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRGVmZXJyZWQgYWxyZWFkeSBjbGFpbWVkIik7CiAgICAgICAgfQogICAgICAgIHRoaXMuY2xhaW1lZCA9IHRydWU7CiAgICAgIH0KICAgICAgZ2V0IGR1cmF0aW9uKCkgewogICAgICAgIGlmICh0aGlzLnN0b3BwZWRBdCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcHBlZEF0IC0gdGhpcy5zdGFydGVkQXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydGVkQXQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuY2xhaW1lZCA9IGZhbHNlOwogICAgICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgICAgICB0aGlzLnJlc29sdmUgPSAodmFsdWVBcmcpID0+IHsKICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSAiZnVsZmlsbGVkIjsKICAgICAgICAgICAgdGhpcy5zdG9wcGVkQXQgPSBEYXRlLm5vdygpOwogICAgICAgICAgICByZXNvbHZlMih2YWx1ZUFyZyk7CiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5yZWplY3QgPSAocmVhc29uKSA9PiB7CiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gInJlamVjdGVkIjsKICAgICAgICAgICAgdGhpcy5zdG9wcGVkQXQgPSBEYXRlLm5vdygpOwogICAgICAgICAgICByZWplY3QocmVhc29uKTsKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLnN0YXJ0ZWRBdCA9IERhdGUubm93KCk7CiAgICAgICAgICB0aGlzLnN0YXR1cyA9ICJwZW5kaW5nIjsKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIGRlZmVyMyA9ICgpID0+IHsKICAgICAgcmV0dXJuIG5ldyBEZWZlcnJlZDIoKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0cHJvbWlzZUA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9zbWFydHByb21pc2UuY2xhc3Nlcy5jdW11bGF0aXZlZGVmZXJyZWQuanMKdmFyIEN1bXVsYXRpdmVEZWZlcnJlZDIsIGN1bXVsYXRpdmVEZWZlcjI7CnZhciBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2N1bXVsYXRpdmVkZWZlcnJlZDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0cHJvbWlzZUA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9zbWFydHByb21pc2UuY2xhc3Nlcy5jdW11bGF0aXZlZGVmZXJyZWQuanMiKCkgewogICAgaW5pdF9zbWFydHByb21pc2VfY2xhc3Nlc19kZWZlcnJlZDIoKTsKICAgIEN1bXVsYXRpdmVEZWZlcnJlZDIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuYWNjdW11bGF0ZWRQcm9taXNlcyA9IFtdOwogICAgICAgIHRoaXMuZGVmZXJyZWQgPSBkZWZlcjMoKTsKICAgICAgICB0aGlzLnByb21pc2UgPSB0aGlzLmRlZmVycmVkLnByb21pc2U7CiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7CiAgICAgICAgICB3aGlsZSAodGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgY29uc3QgcG9wcGVkUHJvbWlzZSA9IHRoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5zaGlmdCgpOwogICAgICAgICAgICBhd2FpdCBwb3BwZWRQcm9taXNlOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgfSwgMCk7CiAgICAgIH0KICAgICAgYWRkUHJvbWlzZShwcm9taXNlQXJnKSB7CiAgICAgICAgdGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLnB1c2gocHJvbWlzZUFyZyk7CiAgICAgIH0KICAgIH07CiAgICBjdW11bGF0aXZlRGVmZXIyID0gKCkgPT4gewogICAgICByZXR1cm4gbmV3IEN1bXVsYXRpdmVEZWZlcnJlZDIoKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0cHJvbWlzZUA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjEgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjEsIHsKICBDdW11bGF0aXZlRGVmZXJyZWQ6ICgpID0+IEN1bXVsYXRpdmVEZWZlcnJlZDIsCiAgRGVmZXJyZWQ6ICgpID0+IERlZmVycmVkMiwKICBjdW11bGF0aXZlRGVmZXI6ICgpID0+IGN1bXVsYXRpdmVEZWZlcjIsCiAgZGVmZXI6ICgpID0+IGRlZmVyMywKICBnZXRGaXJzdFRydWVPckZhbHNlOiAoKSA9PiBnZXRGaXJzdFRydWVPckZhbHNlMiwKICBtYXA6ICgpID0+IG1hcDYsCiAgcmVqZWN0ZWRQcm9taXNlOiAoKSA9PiByZWplY3RlZFByb21pc2UyLAogIHJlc29sdmVkUHJvbWlzZTogKCkgPT4gcmVzb2x2ZWRQcm9taXNlMiwKICB0aW1lb3V0QW5kQ29udGludWU6ICgpID0+IHRpbWVvdXRBbmRDb250aW51ZTIsCiAgdGltZW91dFdyYXA6ICgpID0+IHRpbWVvdXRXcmFwMgp9KTsKdmFyIHJlc29sdmVkUHJvbWlzZTIsIHJlamVjdGVkUHJvbWlzZTIsIG1hcDYsIHRpbWVvdXRXcmFwMiwgdGltZW91dEFuZENvbnRpbnVlMiwgZ2V0Rmlyc3RUcnVlT3JGYWxzZTI7CnZhciBpbml0X2Rpc3RfdHMyMSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRwcm9taXNlQDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfZGVmZXJyZWQyKCk7CiAgICBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2N1bXVsYXRpdmVkZWZlcnJlZDIoKTsKICAgIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfZGVmZXJyZWQyKCk7CiAgICByZXNvbHZlZFByb21pc2UyID0gKHZhbHVlMikgPT4gewogICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlMik7CiAgICB9OwogICAgcmVqZWN0ZWRQcm9taXNlMiA9IChlcnIpID0+IHsKICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7CiAgICB9OwogICAgbWFwNiA9IGFzeW5jIChpbnB1dEFyZywgZnVuY3Rpb25BcmcpID0+IHsKICAgICAgY29uc3QgcHJvbWlzZUFycmF5ID0gW107CiAgICAgIGNvbnN0IHJlc3VsdEFycmF5ID0gW107CiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpbnB1dEFyZykgewogICAgICAgIGNvbnN0IHByb21pc2UgPSBmdW5jdGlvbkFyZyhpdGVtKTsKICAgICAgICBwcm9taXNlQXJyYXkucHVzaChwcm9taXNlKTsKICAgICAgICBwcm9taXNlLnRoZW4oKHgzKSA9PiB7CiAgICAgICAgICByZXN1bHRBcnJheS5wdXNoKHgzKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlQXJyYXkpOwogICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CiAgICB9OwogICAgdGltZW91dFdyYXAyID0gYXN5bmMgKHByb21pc2VBcmcsIHRpbWVvdXRJbk1zQXJnLCByZWplY3RBcmcgPSB0cnVlKSA9PiB7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgaWYgKHJlamVjdEFyZykgewogICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCJ0aW1lb3V0IikpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzb2x2ZTIobnVsbCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgdGltZW91dEluTXNBcmcpOwogICAgICAgIHByb21pc2VBcmcudGhlbihyZXNvbHZlMiwgcmVqZWN0KTsKICAgICAgfSk7CiAgICB9OwogICAgdGltZW91dEFuZENvbnRpbnVlMiA9IGFzeW5jIChwcm9taXNlQXJnLCB0aW1lb3V0SW5Nc0FyZyA9IDZlNCkgPT4gewogICAgICByZXR1cm4gdGltZW91dFdyYXAyKHByb21pc2VBcmcsIHRpbWVvdXRJbk1zQXJnLCBmYWxzZSk7CiAgICB9OwogICAgZ2V0Rmlyc3RUcnVlT3JGYWxzZTIgPSBhc3luYyAocHJvbWlzZXNBcmcpID0+IHsKICAgICAgY29uc3QgZG9uZSA9IGRlZmVyMygpOwogICAgICBmb3IgKGNvbnN0IHByb21pc2VBcmcgb2YgcHJvbWlzZXNBcmcpIHsKICAgICAgICBwcm9taXNlQXJnLnRoZW4oKHJlc3VsdEFyZykgPT4gewogICAgICAgICAgaWYgKHJlc3VsdEFyZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICBkb25lLnJlc29sdmUodHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXNBcmcpLnRoZW4oKCkgPT4gewogICAgICAgIGRvbmUucmVzb2x2ZShmYWxzZSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gZG9uZS5wcm9taXNlOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRkZWxheUAzLjAuMS9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydGRlbGF5L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czIyID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czIyLCB7CiAgVGltZW91dDogKCkgPT4gVGltZW91dDIsCiAgZGVsYXlGb3I6ICgpID0+IGRlbGF5Rm9yMiwKICBkZWxheUZvclJhbmRvbTogKCkgPT4gZGVsYXlGb3JSYW5kb20yCn0pOwp2YXIgZGVsYXlGb3IyLCBkZWxheUZvclJhbmRvbTIsIFRpbWVvdXQyOwp2YXIgaW5pdF9kaXN0X3RzMjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0ZGVsYXlAMy4wLjEvbm9kZV9tb2R1bGVzL0BwdXNocm9ja3Mvc21hcnRkZWxheS9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGlzdF90czIxKCk7CiAgICBkZWxheUZvcjIgPSBhc3luYyAodGltZUluTWlsbGlzZWNvbmRBcmcsIHBhc3NPbkFyZywgdW5yZWZlZEFyZyA9IGZhbHNlKSA9PiB7CiAgICAgIGNvbnN0IHRpbWVvdXQyID0gbmV3IFRpbWVvdXQyKHRpbWVJbk1pbGxpc2Vjb25kQXJnLCBudWxsLCB1bnJlZmVkQXJnKTsKICAgICAgYXdhaXQgdGltZW91dDIucHJvbWlzZTsKICAgICAgcmV0dXJuIHBhc3NPbkFyZzsKICAgIH07CiAgICBkZWxheUZvclJhbmRvbTIgPSBhc3luYyAodGltZU1pbkluTWlsbGlzZWNvbmRBcmcsIHRpbWVNYXhJbk1pbGxpc2Vjb25kQXJnLCBwYXNzT25BcmcsIHVucmVmZWRBcmcgPSBmYWxzZSkgPT4gewogICAgICBhd2FpdCBkZWxheUZvcjIoTWF0aC5yYW5kb20oKSAqICh0aW1lTWF4SW5NaWxsaXNlY29uZEFyZyAtIHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnKSArIHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnLCBudWxsLCB1bnJlZmVkQXJnKTsKICAgICAgcmV0dXJuIHBhc3NPbkFyZzsKICAgIH07CiAgICBUaW1lb3V0MiA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodGltZUluTWlsbGlzZWNvbmRBcmcsIHBhc3NPbiwgdW5yZWZlZEFyZyA9IGZhbHNlKSB7CiAgICAgICAgdGhpcy5fY2FuY2VsbGVkID0gZmFsc2U7CiAgICAgICAgdGhpcy50aW1lb3V0SW5NaWxsaXMgPSB0aW1lSW5NaWxsaXNlY29uZEFyZzsKICAgICAgICB0aGlzLl9kZWZlcnJlZCA9IGRlZmVyMygpOwogICAgICAgIHRoaXMucHJvbWlzZSA9IHRoaXMuX2RlZmVycmVkLnByb21pc2U7CiAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgaWYgKCF0aGlzLl9jYW5jZWxsZWQpIHsKICAgICAgICAgICAgdGhpcy5fZGVmZXJyZWQucmVzb2x2ZShwYXNzT24pOwogICAgICAgICAgfQogICAgICAgIH0sIHRpbWVJbk1pbGxpc2Vjb25kQXJnKTsKICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBEYXRlLm5vdygpOwogICAgICAgIGlmICh1bnJlZmVkQXJnKSB7CiAgICAgICAgICB0aGlzLm1ha2VVbnJlZmVkKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB1bnJlZmZpbmcgYSB0aW1lb3V0IGNhdXNlcyB0aGUgbm9kZSBwcm9jZXNzIHRvIG5vdCB3YWl0IGZvciBjb21wbGV0aW9uIGJlZm9yZSBleGl0CiAgICAgICAqLwogICAgICBtYWtlVW5yZWZlZCgpIHsKICAgICAgICB0aGlzLl90aW1lb3V0LnVucmVmKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNhbmNlbHMgdGhlIHRpbWVyCiAgICAgICAqLwogICAgICBjYW5jZWwoKSB7CiAgICAgICAgdGhpcy5fY2FuY2VsbGVkID0gdHJ1ZTsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7CiAgICAgIH0KICAgICAgZ2V0VGltZUxlZnQoKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zdGFydGVkICsgdGhpcy50aW1lb3V0SW5NaWxsaXMgLSBEYXRlLm5vdygpOwogICAgICAgIHJldHVybiByZXN1bHQgPiAwID8gcmVzdWx0IDogMDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9hZGRyZXNzLmpzCnZhciBpbml0X2FkZHJlc3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvYWRkcmVzcy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvY29tcGFueS5qcwp2YXIgaW5pdF9jb21wYW55ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2NvbXBhbnkuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9jb250YWN0LmpzCnZhciBpbml0X2NvbnRhY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvY29udGFjdC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyMygpOwogICAgaW5pdF9kaXN0X3RzMjMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2NoZWNraW5nYWNjb3VudC5qcwp2YXIgaW5pdF9jaGVja2luZ2FjY291bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9jaGVja2luZ2FjY291bnQuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2N1cnJlbmN5LmpzCnZhciBpbml0X2N1cnJlbmN5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvY3VycmVuY3kuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvZXhwZW5zZS5qcwp2YXIgaW5pdF9leHBlbnNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvZXhwZW5zZS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvaW52b2ljZS5qcwp2YXIgaW5pdF9pbnZvaWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvaW52b2ljZS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvcGF5bWVudC5qcwp2YXIgaW5pdF9wYXltZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvcGF5bWVudC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS90cmFuc2FjdGlvbi5qcwp2YXIgaW5pdF90cmFuc2FjdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL3RyYW5zYWN0aW9uLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2luZGV4LmpzCnZhciBmaW5hbmNlX2V4cG9ydHMgPSB7fTsKdmFyIGluaXRfZmluYW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2luZGV4LmpzIigpIHsKICAgIGluaXRfY2hlY2tpbmdhY2NvdW50KCk7CiAgICBpbml0X2N1cnJlbmN5KCk7CiAgICBpbml0X2V4cGVuc2UoKTsKICAgIGluaXRfaW52b2ljZSgpOwogICAgaW5pdF9wYXltZW50KCk7CiAgICBpbml0X3RyYW5zYWN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3Mvam9iLmpzCnZhciBJSm9iOwp2YXIgaW5pdF9qb2IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3Mvam9iLmpzIigpIHsKICAgIGluaXRfZmluYW5jZSgpOwogICAgaW5pdF9jb21wYW55KCk7CiAgICBpbml0X2NvbnRhY3QoKTsKICAgIElKb2IgPSBjbGFzcyB7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL21vbmdvZGVzY3JpcHRvci5qcwp2YXIgaW5pdF9tb25nb2Rlc2NyaXB0b3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2UvbW9uZ29kZXNjcmlwdG9yLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9vYmplY3RhY3Rpb24uanMKdmFyIGluaXRfb2JqZWN0YWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL29iamVjdGFjdGlvbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2Uvb2JqZWN0c3RhdHVzLmpzCnZhciBpbml0X29iamVjdHN0YXR1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9vYmplY3RzdGF0dXMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL3dyYXBwZWRkYXRhLmpzCnZhciBpbml0X3dyYXBwZWRkYXRhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL3dyYXBwZWRkYXRhLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9pbmRleC5qcwp2YXIgZGF0YWJhc2VfZXhwb3J0cyA9IHt9Owp2YXIgaW5pdF9kYXRhYmFzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X21vbmdvZGVzY3JpcHRvcigpOwogICAgaW5pdF9vYmplY3RhY3Rpb24oKTsKICAgIGluaXRfb2JqZWN0c3RhdHVzKCk7CiAgICBpbml0X3dyYXBwZWRkYXRhKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvbGV0dGVyLmpzCnZhciBpbml0X2xldHRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9sZXR0ZXIuanMiKCkgewogICAgaW5pdF9idXNpbmVzcygpOwogICAgaW5pdF9maW5hbmNlKCk7CiAgICBpbml0X2RhdGFiYXNlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvcGRmLmpzCnZhciBpbml0X3BkZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9wZGYuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL3BlcnNvbi5qcwp2YXIgaW5pdF9wZXJzb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvcGVyc29uLmpzIigpIHsKICAgIGluaXRfY29udGFjdCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL3Byb2plY3QuanMKdmFyIGluaXRfcHJvamVjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9wcm9qZWN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9pbmRleC5qcwp2YXIgYnVzaW5lc3NfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChidXNpbmVzc19leHBvcnRzLCB7CiAgSUpvYjogKCkgPT4gSUpvYgp9KTsKdmFyIGluaXRfYnVzaW5lc3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvaW5kZXguanMiKCkgewogICAgaW5pdF9hZGRyZXNzKCk7CiAgICBpbml0X2NvbXBhbnkoKTsKICAgIGluaXRfY29udGFjdCgpOwogICAgaW5pdF9qb2IoKTsKICAgIGluaXRfbGV0dGVyKCk7CiAgICBpbml0X3BkZigpOwogICAgaW5pdF9wZXJzb24oKTsKICAgIGluaXRfcHJvamVjdCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvZGUvY29tbWl0aW5mby5qcwp2YXIgaW5pdF9jb21taXRpbmZvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvZGUvY29tbWl0aW5mby5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29kZS9zdGF0dXNvYmplY3QuanMKdmFyIGluaXRfc3RhdHVzb2JqZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvZGUvc3RhdHVzb2JqZWN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb2RlL2luZGV4LmpzCnZhciBjb2RlX2V4cG9ydHMgPSB7fTsKdmFyIGluaXRfY29kZTMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29kZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NvbW1pdGluZm8oKTsKICAgIGluaXRfc3RhdHVzb2JqZWN0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGFpbmVyL2NvbnRhaW5lci5qcwp2YXIgaW5pdF9jb250YWluZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGFpbmVyL2NvbnRhaW5lci5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGFpbmVyL3ZvbHVtZW1vdW50LmpzCnZhciBpbml0X3ZvbHVtZW1vdW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRhaW5lci92b2x1bWVtb3VudC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGFpbmVyL2luZGV4LmpzCnZhciBjb250YWluZXJfZXhwb3J0cyA9IHt9Owp2YXIgaW5pdF9jb250YWluZXIyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRhaW5lci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NvbnRhaW5lcigpOwogICAgaW5pdF92b2x1bWVtb3VudCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvYXJ0aWNsZS5qcwp2YXIgaW5pdF9hcnRpY2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvYXJ0aWNsZS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvYXV0aG9yLmpzCnZhciBpbml0X2F1dGhvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250ZW50L2F1dGhvci5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvZG9jdW1lbnRhdGlvbnNldC5qcwp2YXIgaW5pdF9kb2N1bWVudGF0aW9uc2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvZG9jdW1lbnRhdGlvbnNldC5qcyIoKSB7CiAgICBpbml0X2FydGljbGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250ZW50L2luZGV4LmpzCnZhciBjb250ZW50X2V4cG9ydHMgPSB7fTsKdmFyIGluaXRfY29udGVudDMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGVudC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2FydGljbGUoKTsKICAgIGluaXRfYXV0aG9yKCk7CiAgICBpbml0X2RvY3VtZW50YXRpb25zZXQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9nZW5lcmFsL2RhdGUuanMKdmFyIGluaXRfZGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9nZW5lcmFsL2RhdGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2dlbmVyYWwvdGltZS5qcwp2YXIgaW5pdF90aW1lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2dlbmVyYWwvdGltZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZ2VuZXJhbC9pbmRleC5qcwp2YXIgZ2VuZXJhbF9leHBvcnRzID0ge307CnZhciBpbml0X2dlbmVyYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZ2VuZXJhbC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RhdGUoKTsKICAgIGluaXRfdGltZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvY2VydC5qcwp2YXIgaW5pdF9jZXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvY2VydC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9jbmFtZS5qcwp2YXIgSUNuYW1lRGVzY3JpcHRvcjsKdmFyIGluaXRfY25hbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9jbmFtZS5qcyIoKSB7CiAgICBpbml0X2NlcnQoKTsKICAgIElDbmFtZURlc2NyaXB0b3IgPSBjbGFzcyB7CiAgICB9OwogICAgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZGV2aWNlLmpzCnZhciBpbml0X2RldmljZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2RldmljZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9kbnMuanMKdmFyIGluaXRfZG5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZG5zLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2Ruc2NoYWxsZW5nZS5qcwp2YXIgaW5pdF9kbnNjaGFsbGVuZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9kbnNjaGFsbGVuZ2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZG9tYWluZGVsZWdhdGlvbi5qcwp2YXIgaW5pdF9kb21haW5kZWxlZ2F0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZG9tYWluZGVsZWdhdGlvbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9qd3QuanMKdmFyIGluaXRfand0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvand0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL25ldHdvcmtub2RlLmpzCnZhciBpbml0X25ldHdvcmtub2RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvbmV0d29ya25vZGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvcmVxdWVzdC5qcwp2YXIgaW5pdF9yZXF1ZXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvcmVxdWVzdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9yZXZlcnNlcHJveHkuanMKdmFyIGluaXRfcmV2ZXJzZXByb3h5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvcmV2ZXJzZXByb3h5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL3NzaC5qcwp2YXIgaW5pdF9zc2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9zc2guanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvaW5kZXguanMKdmFyIG5ldHdvcmtfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChuZXR3b3JrX2V4cG9ydHMsIHsKICBJQ25hbWVEZXNjcmlwdG9yOiAoKSA9PiBJQ25hbWVEZXNjcmlwdG9yCn0pOwp2YXIgaW5pdF9uZXR3b3JrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvaW5kZXguanMiKCkgewogICAgaW5pdF9jZXJ0KCk7CiAgICBpbml0X2NuYW1lKCk7CiAgICBpbml0X2RldmljZSgpOwogICAgaW5pdF9kbnMoKTsKICAgIGluaXRfZG5zY2hhbGxlbmdlKCk7CiAgICBpbml0X2RvbWFpbmRlbGVnYXRpb24oKTsKICAgIGluaXRfand0KCk7CiAgICBpbml0X25ldHdvcmtub2RlKCk7CiAgICBpbml0X3JlcXVlc3QoKTsKICAgIGluaXRfcmV2ZXJzZXByb3h5KCk7CiAgICBpbml0X3NzaCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3NhYXMvcHJvZHVjdC5qcwp2YXIgaW5pdF9wcm9kdWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3NhYXMvcHJvZHVjdC5qcyIoKSB7CiAgICBpbml0X2NvbXBhbnkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zYWFzL3N1YnNjcmlwdGlvbnBsYW4uanMKdmFyIGluaXRfc3Vic2NyaXB0aW9ucGxhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zYWFzL3N1YnNjcmlwdGlvbnBsYW4uanMiKCkgewogICAgaW5pdF9wcm9kdWN0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc2Fhcy9pbmRleC5qcwp2YXIgc2Fhc19leHBvcnRzID0ge307CnZhciBpbml0X3NhYXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc2Fhcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3N1YnNjcmlwdGlvbnBsYW4oKTsKICAgIGluaXRfcHJvZHVjdCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3N0b3JhZ2UvaW5kZXguanMKdmFyIHN0b3JhZ2VfZXhwb3J0cyA9IHt9Owp2YXIgaW5pdF9zdG9yYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3N0b3JhZ2UvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3dlYnNpdGUvbGluay5qcwp2YXIgaW5pdF9saW5rMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL2xpbmsuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3dlYnNpdGUvbWVudWl0ZW0uanMKdmFyIGluaXRfbWVudWl0ZW0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9tZW51aXRlbS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9saW5rYmxvY2suanMKdmFyIGluaXRfbGlua2Jsb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3dlYnNpdGUvbGlua2Jsb2NrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL2luZGV4LmpzCnZhciB3ZWJzaXRlX2V4cG9ydHMgPSB7fTsKdmFyIGluaXRfd2Vic2l0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGluazMoKTsKICAgIGluaXRfbWVudWl0ZW0oKTsKICAgIGluaXRfbGlua2Jsb2NrKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvdHlwZWZlc3Qub3duLmpzCnZhciBpbml0X3R5cGVmZXN0X293biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy90eXBlZmVzdC5vd24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMyMyA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMyMywgewogIGJ1c2luZXNzOiAoKSA9PiBidXNpbmVzc19leHBvcnRzLAogIGNvZGU6ICgpID0+IGNvZGVfZXhwb3J0cywKICBjb250YWluZXI6ICgpID0+IGNvbnRhaW5lcl9leHBvcnRzLAogIGNvbnRlbnQ6ICgpID0+IGNvbnRlbnRfZXhwb3J0cywKICBkYXRhYmFzZTogKCkgPT4gZGF0YWJhc2VfZXhwb3J0cywKICBmaW5hbmNlOiAoKSA9PiBmaW5hbmNlX2V4cG9ydHMsCiAgZ2VuZXJhbDogKCkgPT4gZ2VuZXJhbF9leHBvcnRzLAogIG5ldHdvcms6ICgpID0+IG5ldHdvcmtfZXhwb3J0cywKICBzYWFzOiAoKSA9PiBzYWFzX2V4cG9ydHMsCiAgc3RvcmFnZTogKCkgPT4gc3RvcmFnZV9leHBvcnRzLAogIHdlYnNpdGU6ICgpID0+IHdlYnNpdGVfZXhwb3J0cwp9KTsKdmFyIGluaXRfZGlzdF90czIzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfYnVzaW5lc3MoKTsKICAgIGluaXRfY29kZTMoKTsKICAgIGluaXRfY29udGFpbmVyMigpOwogICAgaW5pdF9kYXRhYmFzZSgpOwogICAgaW5pdF9maW5hbmNlKCk7CiAgICBpbml0X2NvbnRlbnQzKCk7CiAgICBpbml0X2dlbmVyYWwoKTsKICAgIGluaXRfbmV0d29yaygpOwogICAgaW5pdF9zYWFzKCk7CiAgICBpbml0X3N0b3JhZ2UoKTsKICAgIGluaXRfd2Vic2l0ZSgpOwogICAgaW5pdF90eXBlZmVzdF9vd24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5wbHVnaW5zLmpzCnZhciBpbml0X3dlYnNldHVwX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyMigpOwogICAgaW5pdF9kaXN0X3RzMjEoKTsKICAgIGluaXRfZGlzdF90czIzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvaW50ZXJmYWNlcy9pbmRleC5qcwp2YXIgaW5pdF9pbnRlcmZhY2VzMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy9pbnRlcmZhY2VzL2luZGV4LmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfcGx1Z2lucygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnLmpzCnZhciBUYWc7CnZhciBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnLmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfcGx1Z2lucygpOwogICAgVGFnID0gY2xhc3MgewogICAgICBhcHBlbmRUb0RvbSgpIHsKICAgICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5wYXJlbnRFbGVtZW50ICYmICF0aGlzLmVsZW1lbnRSZWYucGFyZW50Tm9kZSkgewogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnRSZWYpOwogICAgICAgIH0KICAgICAgfQogICAgICByZW1vdmVGcm9tRG9tKCkgewogICAgICAgIGlmICh0aGlzLmVsZW1lbnRSZWYucGFyZW50RWxlbWVudCkgewogICAgICAgICAgdGhpcy5lbGVtZW50UmVmLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50UmVmKTsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudFJlZi5wYXJlbnROb2RlKSB7CiAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnRSZWYpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZy5qc29ubGR0YWcuanMKdmFyIEpzb25MZFRhZzsKdmFyIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfanNvbmxkdGFnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnLmpzb25sZHRhZy5qcyIoKSB7CiAgICBpbml0X3dlYnNldHVwX3BsdWdpbnMoKTsKICAgIGluaXRfaW50ZXJmYWNlczIoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWcoKTsKICAgIEpzb25MZFRhZyA9IGNsYXNzIF9Kc29uTGRUYWcgZXh0ZW5kcyBUYWcgewogICAgICBzdGF0aWMgY3JlYXRlQ29tcGFueUpzb25MZChjb21wYW55RGF0YUFyZykgewogICAgICAgIGNvbnN0IGNvbXBhbnlMZCA9IHsKICAgICAgICAgICJAY29udGV4dCI6ICJodHRwczovL3NjaGVtYS5vcmciLAogICAgICAgICAgIkB0eXBlIjogIkNvcnBvcmF0aW9uIiwKICAgICAgICAgIG5hbWU6IGNvbXBhbnlEYXRhQXJnLm5hbWUsCiAgICAgICAgICBhbHRlcm5hdGVOYW1lOiBjb21wYW55RGF0YUFyZy5uYW1lLnJlcGxhY2UoIiBHbWJIIiwgIiIpLAogICAgICAgICAgdXJsOiBjb21wYW55RGF0YUFyZy5jb250YWN0LndlYnNpdGUsCiAgICAgICAgICBsb2dvOiBjb21wYW55RGF0YUFyZy5jb250YWN0LmxvZ29VcmwsCiAgICAgICAgICBjb250YWN0UG9pbnQ6IHsKICAgICAgICAgICAgIkB0eXBlIjogIkNvbnRhY3RQb2ludCIsCiAgICAgICAgICAgIHRlbGVwaG9uZTogY29tcGFueURhdGFBcmcuY29udGFjdC5waG9uZSwKICAgICAgICAgICAgY29udGFjdFR5cGU6ICJjdXN0b21lciBzZXJ2aWNlIiwKICAgICAgICAgICAgYXJlYVNlcnZlZDogIkRFIiwKICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2U6IFsiZW4iLCAiR2VybWFuIl0KICAgICAgICAgIH0sCiAgICAgICAgICBzYW1lQXM6IFtdCiAgICAgICAgfTsKICAgICAgICBpZiAoY29tcGFueURhdGFBcmcuY29udGFjdC5mYWNlYm9va1VybCkgewogICAgICAgICAgY29tcGFueUxkLnNhbWVBcy5wdXNoKGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QuZmFjZWJvb2tVcmwpOwogICAgICAgIH0KICAgICAgICBpZiAoY29tcGFueURhdGFBcmcuY29udGFjdC50d2l0dGVyVXJsKSB7CiAgICAgICAgICBjb21wYW55TGQuc2FtZUFzLnB1c2goY29tcGFueURhdGFBcmcuY29udGFjdC50d2l0dGVyVXJsKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgbGRUYWcgPSBuZXcgX0pzb25MZFRhZyhjb21wYW55TGQpOwogICAgICAgIHJldHVybiBsZFRhZzsKICAgICAgfQogICAgICBzdGF0aWMgY3JlYXRlTmV3c0FydGljbGVKc29uTGQobmV3c0FydGljbGVBcmcpIHsKICAgICAgICBjb25zdCBuZXdzQXJ0aWNsZUxkID0gewogICAgICAgICAgIkBjb250ZXh0IjogImh0dHBzOi8vc2NoZW1hLm9yZyIsCiAgICAgICAgICAiQHR5cGUiOiAiTmV3c0FydGljbGUiLAogICAgICAgICAgbWFpbkVudGl0eU9mUGFnZTogewogICAgICAgICAgICAiQHR5cGUiOiAiV2ViUGFnZSIsCiAgICAgICAgICAgICJAaWQiOiB3aW5kb3cubG9jYXRpb24uaHJlZgogICAgICAgICAgfSwKICAgICAgICAgIGhlYWRsaW5lOiAiQXJ0aWNsZSBoZWFkbGluZSIsCiAgICAgICAgICBpbWFnZTogW25ld3NBcnRpY2xlQXJnLmZlYXR1cmVkSW1hZ2VVcmxdLAogICAgICAgICAgZGF0ZVB1Ymxpc2hlZDogbmV3IERhdGUobmV3c0FydGljbGVBcmcudGltZXN0YW1wKS50b0lTT1N0cmluZygpLAogICAgICAgICAgZGF0ZU1vZGlmaWVkOiBuZXcgRGF0ZShuZXdzQXJ0aWNsZUFyZy50aW1lc3RhbXApLnRvSVNPU3RyaW5nKCksCiAgICAgICAgICBhdXRob3I6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlBlcnNvbiIsCiAgICAgICAgICAgIG5hbWU6IGAke25ld3NBcnRpY2xlQXJnLmF1dGhvci5maXJzdE5hbWV9ICR7bmV3c0FydGljbGVBcmcuYXV0aG9yLnN1ck5hbWV9YAogICAgICAgICAgfSwKICAgICAgICAgIHB1Ymxpc2hlcjogewogICAgICAgICAgICAiQHR5cGUiOiAiT3JnYW5pemF0aW9uIiwKICAgICAgICAgICAgbmFtZTogbmV3c0FydGljbGVBcmcuYXV0aG9yLnN1ck5hbWUsCiAgICAgICAgICAgIGxvZ286IHsKICAgICAgICAgICAgICAiQHR5cGUiOiAiSW1hZ2VPYmplY3QiLAogICAgICAgICAgICAgIHVybDogbmV3c0FydGljbGVBcmcuYXV0aG9yLnN1ck5hbWUKICAgICAgICAgICAgICAvLyBUT0RPCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBkZXNjcmlwdGlvbjogbmV3c0FydGljbGVBcmcuYXV0aG9yLmZpcnN0TmFtZQogICAgICAgIH07CiAgICAgICAgY29uc3QgbGRUYWcgPSBuZXcgX0pzb25MZFRhZyhuZXdzQXJ0aWNsZUxkKTsKICAgICAgICByZXR1cm4gbGRUYWc7CiAgICAgIH0KICAgICAgc3RhdGljIGNyZWF0ZVByb2R1Y3RKc29uTGQocHJvZHVjdEFyZywgcHVibGlzaGVyQXJnKSB7CiAgICAgICAgY29uc3QgcHJvZHVjdExkID0gewogICAgICAgICAgIkBjb250ZXh0IjogImh0dHBzOi8vc2NoZW1hLm9yZyIsCiAgICAgICAgICAiQHR5cGUiOiAiU29mdHdhcmVBcHBsaWNhdGlvbiIsCiAgICAgICAgICBuYW1lOiBwcm9kdWN0QXJnLm5hbWUsCiAgICAgICAgICBkZXNjcmlwdGlvbjogcHJvZHVjdEFyZy5kZXNjcmlwdGlvbiwKICAgICAgICAgIG9wZXJhdGluZ1N5c3RlbTogcHJvZHVjdEFyZy5vcywKICAgICAgICAgIGFwcGxpY2F0aW9uQ2F0ZWdvcnk6IHByb2R1Y3RBcmcuY2F0ZWdvcnksCiAgICAgICAgICBvZmZlcnM6IHsKICAgICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICAgbmFtZTogIlVzZXItYmFzZWQgUGxhbiIsCiAgICAgICAgICAgIHByaWNlU3BlY2lmaWNhdGlvbjogewogICAgICAgICAgICAgICJAdHlwZSI6ICJQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvbiIsCiAgICAgICAgICAgICAgdmFsdWVOYW1lOiAiTnVtYmVyIG9mIFVzZXJzIiwKICAgICAgICAgICAgICB2YWx1ZVJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgICAgIHByaWNlOiAiNC45OSIsCiAgICAgICAgICAgICAgcHJpY2VDdXJyZW5jeTogIkVVUiIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHB1Ymxpc2hlcjogdGhpcy5jcmVhdGVDb21wYW55SnNvbkxkKHB1Ymxpc2hlckFyZykuZWxlbWVudFJlZi50ZXh0Q29udGVudCwKICAgICAgICAgIHNjcmVlbnNob3Q6ICJodHRwczovL3d3dy5zb2NpYWwuaW8vc2NyZWVuc2hvdC5wbmciLAogICAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cuc29jaWFsLmlvLyIKICAgICAgICB9OwogICAgICAgIGNvbnN0IGxkVGFnID0gbmV3IF9Kc29uTGRUYWcocHJvZHVjdExkKTsKICAgICAgICByZXR1cm4gbGRUYWc7CiAgICAgIH0KICAgICAgLy8gSU5TVEFOQ0UKICAgICAgY29uc3RydWN0b3IobGRPYmplY3RBcmcpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIGNvbnN0IGpzb25MZEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKICAgICAgICBqc29uTGRFbGVtZW50LnR5cGUgPSAiYXBwbGljYXRpb24vbGQranNvbiI7CiAgICAgICAganNvbkxkRWxlbWVudC50ZXh0ID0gSlNPTi5zdHJpbmdpZnkobGRPYmplY3RBcmcpOwogICAgICAgIHRoaXMuZWxlbWVudFJlZiA9IGpzb25MZEVsZW1lbnQ7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWcub3BlbmdyYXBodGFnLmpzCnZhciBPcGVuZ3JhcGhUYWc7CnZhciBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnX29wZW5ncmFwaHRhZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZy5vcGVuZ3JhcGh0YWcuanMiKCkgewogICAgaW5pdF93ZWJzZXR1cF9wbHVnaW5zKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnKCk7CiAgICBPcGVuZ3JhcGhUYWcgPSBjbGFzcyBfT3BlbmdyYXBoVGFnIGV4dGVuZHMgVGFnIHsKICAgICAgc3RhdGljIGNyZWF0ZU5ld3NBcnRpY2xlT2dUYWdzKG5ld3NBcnRpY2xlQXJnKSB7CiAgICAgICAgY29uc3QgdGFnQXJyYXkgPSBbXTsKICAgICAgICB0YWdBcnJheS5wdXNoKG5ldyBfT3BlbmdyYXBoVGFnKCJvZzp1cmwiLCBuZXdzQXJ0aWNsZUFyZy51cmwpKTsKICAgICAgICB0YWdBcnJheS5wdXNoKG5ldyBfT3BlbmdyYXBoVGFnKCJvZzp0aXRsZSIsIG5ld3NBcnRpY2xlQXJnLnRpdGxlKSk7CiAgICAgICAgdGFnQXJyYXkucHVzaChuZXcgX09wZW5ncmFwaFRhZygib2c6ZGVzY3JpcHRpb24iLCBuZXdzQXJ0aWNsZUFyZy5jb250ZW50KSk7CiAgICAgICAgdGFnQXJyYXkucHVzaChuZXcgX09wZW5ncmFwaFRhZygib2c6aW1hZ2UiLCBuZXdzQXJ0aWNsZUFyZy5mZWF0dXJlZEltYWdlVXJsKSk7CiAgICAgICAgcmV0dXJuIHRhZ0FycmF5OwogICAgICB9CiAgICAgIHN0YXRpYyBjcmVhdGVQcm9kdWN0T2dUYWdzKHByb2R1Y3RBcmcpIHsKICAgICAgICBjb25zdCB0YWdBcnJheSA9IFtdOwogICAgICAgIHRhZ0FycmF5LnB1c2gobmV3IF9PcGVuZ3JhcGhUYWcoIm9nOnVybCIsIGdsb2JhbFRoaXMubG9jYXRpb24uaHJlZikpOwogICAgICAgIHRhZ0FycmF5LnB1c2gobmV3IF9PcGVuZ3JhcGhUYWcoIm9nOnRpdGxlIiwgYCR7cHJvZHVjdEFyZy5uYW1lfSAtICR7cHJvZHVjdEFyZy5zbG9nYW59YCkpOwogICAgICAgIHRhZ0FycmF5LnB1c2gobmV3IF9PcGVuZ3JhcGhUYWcoIm9nOnNpdGVfbmFtZSIsIHByb2R1Y3RBcmcubmFtZSkpOwogICAgICAgIHRhZ0FycmF5LnB1c2gobmV3IF9PcGVuZ3JhcGhUYWcoIm9nOmRlc2NyaXB0aW9uIiwgcHJvZHVjdEFyZy5kZXNjcmlwdGlvbikpOwogICAgICAgIHRhZ0FycmF5LnB1c2gobmV3IF9PcGVuZ3JhcGhUYWcoIm9nOmltYWdlIiwgcHJvZHVjdEFyZy5sb2dvTGluaykpOwogICAgICAgIHJldHVybiB0YWdBcnJheTsKICAgICAgfQogICAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eU5hbWVBcmcsIGNvbnRlbnRBcmcpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIGNvbnN0IG9wZW5HcmFwaEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJtZXRhIik7CiAgICAgICAgb3BlbkdyYXBoRWxlbWVudC5zZXRBdHRyaWJ1dGUoInByb3BlcnR5IiwgcHJvcGVydHlOYW1lQXJnKTsKICAgICAgICBvcGVuR3JhcGhFbGVtZW50LmNvbnRlbnQgPSBjb250ZW50QXJnOwogICAgICAgIHRoaXMuZWxlbWVudFJlZiA9IG9wZW5HcmFwaEVsZW1lbnQ7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWdsZXZlbC5qcwp2YXIgVGFnTGV2ZWw7CnZhciBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnbGV2ZWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWdsZXZlbC5qcyIoKSB7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnX2pzb25sZHRhZygpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19vcGVuZ3JhcGh0YWcoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdtYW5hZ2VyKCk7CiAgICBpbml0X3dlYnNldHVwX3BsdWdpbnMoKTsKICAgIFRhZ0xldmVsID0gY2xhc3MgewogICAgICBzZXQgdGl0bGUodGl0bGVBcmcpIHsKICAgICAgICB0aGlzLnRpdGxlU3RvcmUgPSB0aXRsZUFyZzsKICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gImVuYWJsZWQiKSB7CiAgICAgICAgICBkb2N1bWVudC50aXRsZSA9IHRoaXMudGl0bGVTdG9yZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZ2V0IHRpdGxlKCkgewogICAgICAgIHJldHVybiB0aGlzLnRpdGxlU3RvcmU7CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IodGFnTWFuYWdlclJlZkFyZywgbGV2ZWxUeXBlKSB7CiAgICAgICAgdGhpcy50YWdzID0gW107CiAgICAgICAgdGhpcy5zdGF0ZSA9ICJkaXNhYmxlZCI7CiAgICAgICAgdGhpcy50YWdNYW5hZ2VyUmVmID0gdGFnTWFuYWdlclJlZkFyZzsKICAgICAgfQogICAgICBhZGRUYWcodGFnQXJnKSB7CiAgICAgICAgaWYgKHRhZ0FyZyBpbnN0YW5jZW9mIEFycmF5KSB7CiAgICAgICAgICBmb3IgKGNvbnN0IHRhZ0FyZzIgb2YgdGFnQXJnKSB7CiAgICAgICAgICAgIHRoaXMuYWRkVGFnKHRhZ0FyZzIpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnRhZ3MucHVzaCh0YWdBcmcpOwogICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09ICJlbmFibGVkIikgewogICAgICAgICAgICB0YWdBcmcuYXBwZW5kVG9Eb20oKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgYWRkQ29tcGFueUluZm8oY29tcGFueURhdGFBcmcpIHsKICAgICAgICB0aGlzLmFkZFRhZyhKc29uTGRUYWcuY3JlYXRlQ29tcGFueUpzb25MZChjb21wYW55RGF0YUFyZykpOwogICAgICAgIHRoaXMuYWRkVGFnKG5ldyBPcGVuZ3JhcGhUYWcoIm9nOnR5cGUiLCAiYnVzaW5lc3MuYnVzaW5lc3MiKSk7CiAgICAgICAgdGhpcy5hZGRUYWcobmV3IE9wZW5ncmFwaFRhZygib2c6dGl0bGUiLCBjb21wYW55RGF0YUFyZy5uYW1lKSk7CiAgICAgICAgdGhpcy5hZGRUYWcobmV3IE9wZW5ncmFwaFRhZygib2c6dXJsIiwgY29tcGFueURhdGFBcmcuY29udGFjdC53ZWJzaXRlKSk7CiAgICAgICAgdGhpcy5hZGRUYWcobmV3IE9wZW5ncmFwaFRhZygib2c6aW1hZ2UiLCBjb21wYW55RGF0YUFyZy5jb250YWN0LmxvZ29VcmwpKTsKICAgICAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCJidXNpbmVzczpjb250YWN0X2RhdGE6c3RyZWV0X2FkZHJlc3MiLCBgJHtjb21wYW55RGF0YUFyZy5jb250YWN0LmFkZHJlc3Muc3RyZWV0TmFtZX0gJHtjb21wYW55RGF0YUFyZy5jb250YWN0LmFkZHJlc3MuaG91c2VOdW1iZXJ9YCkpOwogICAgICAgIHRoaXMuYWRkVGFnKG5ldyBPcGVuZ3JhcGhUYWcoImJ1c2luZXNzOmNvbnRhY3RfZGF0YTpsb2NhbGl0eSIsIGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QuYWRkcmVzcy5wb3N0YWxDb2RlKSk7CiAgICAgICAgdGhpcy5hZGRUYWcobmV3IE9wZW5ncmFwaFRhZygiYnVzaW5lc3M6Y29udGFjdF9kYXRhOnJlZ2lvbiIsIGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QuYWRkcmVzcy5jaXR5KSk7CiAgICAgICAgdGhpcy5hZGRUYWcobmV3IE9wZW5ncmFwaFRhZygiYnVzaW5lc3M6Y29udGFjdF9kYXRhOnBvc3RhbF9jb2RlIiwgY29tcGFueURhdGFBcmcuY29udGFjdC5hZGRyZXNzLnBvc3RhbENvZGUpKTsKICAgICAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCJidXNpbmVzczpjb250YWN0X2RhdGE6Y291bnRyeV9uYW1lIiwgY29tcGFueURhdGFBcmcuY29udGFjdC5hZGRyZXNzLmNvdW50cnkpKTsKICAgICAgfQogICAgICBhZGROZXdzQXJ0aWNsZUluZm8oYXJ0aWNsZUFyZykgewogICAgICAgIHRoaXMuYWRkVGFnKEpzb25MZFRhZy5jcmVhdGVOZXdzQXJ0aWNsZUpzb25MZChhcnRpY2xlQXJnKSk7CiAgICAgICAgdGhpcy5hZGRUYWcoT3BlbmdyYXBoVGFnLmNyZWF0ZU5ld3NBcnRpY2xlT2dUYWdzKGFydGljbGVBcmcpKTsKICAgICAgfQogICAgICBhZGRQcm9kdWN0SW5mbyhwcm9kdWN0QXJnLCBjb21wYW55QXJnKSB7CiAgICAgICAgdGhpcy5hZGRUYWcoSnNvbkxkVGFnLmNyZWF0ZVByb2R1Y3RKc29uTGQocHJvZHVjdEFyZywgY29tcGFueUFyZykpOwogICAgICAgIHRoaXMuYWRkVGFnKE9wZW5ncmFwaFRhZy5jcmVhdGVQcm9kdWN0T2dUYWdzKHByb2R1Y3RBcmcpKTsKICAgICAgfQogICAgICBhc3luYyBlbmFibGUoKSB7CiAgICAgICAgaWYgKHRoaXMudGl0bGUpIHsKICAgICAgICAgIGRvY3VtZW50LnRpdGxlID0gdGhpcy50aXRsZTsKICAgICAgICB9CiAgICAgICAgZm9yIChjb25zdCB0YWdBcmcgb2YgdGhpcy50YWdzKSB7CiAgICAgICAgICB0YWdBcmcuYXBwZW5kVG9Eb20oKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zdGF0ZSA9ICJlbmFibGVkIjsKICAgICAgfQogICAgICBhc3luYyBkaXNhYmxlKCkgewogICAgICAgIGZvciAoY29uc3QgdGFnQXJnIG9mIHRoaXMudGFncykgewogICAgICAgICAgdGFnQXJnLnJlbW92ZUZyb21Eb20oKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zdGF0ZSA9ICJkaXNhYmxlZCI7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWcubWV0YXRhZy5qcwp2YXIgTWV0YVRhZzsKdmFyIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfbWV0YXRhZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZy5tZXRhdGFnLmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWcoKTsKICAgIE1ldGFUYWcgPSBjbGFzcyBleHRlbmRzIFRhZyB7CiAgICAgIGNvbnN0cnVjdG9yKG1ldGFOYW1lQXJnLCBjb250ZW50QXJnKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICBjb25zdCBtZXRhRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKTsKICAgICAgICBtZXRhRWxlbWVudC5uYW1lID0gbWV0YU5hbWVBcmc7CiAgICAgICAgbWV0YUVsZW1lbnQuY29udGVudCA9IGNvbnRlbnRBcmc7CiAgICAgICAgdGhpcy5lbGVtZW50UmVmID0gbWV0YUVsZW1lbnQ7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWdtYW5hZ2VyLmpzCnZhciBUYWdNYW5hZ2VyOwp2YXIgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ21hbmFnZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWdtYW5hZ2VyLmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdsZXZlbCgpOwogICAgaW5pdF93ZWJzZXR1cF9wbHVnaW5zKCk7CiAgICBpbml0X2ludGVyZmFjZXMyKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnX21ldGF0YWcoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfanNvbmxkdGFnKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnX29wZW5ncmFwaHRhZygpOwogICAgVGFnTWFuYWdlciA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5nbG9iYWxMZXZlbCA9IG5ldyBUYWdMZXZlbCh0aGlzLCAiZ2xvYmFsIik7CiAgICAgICAgdGhpcy5iYXNlTGV2ZWwgPSBuZXcgVGFnTGV2ZWwodGhpcywgImJhc2UiKTsKICAgICAgfQogICAgICBhc3luYyBzZXR1cChtZXRhT2JqZWN0QXJnKSB7CiAgICAgICAgdGhpcy5nbG9iYWxMZXZlbC5hZGRUYWcobmV3IE1ldGFUYWcoImdvb2dsZSIsICJub3RyYW5zbGF0ZSIpKTsKICAgICAgICB0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygicmV2aXNpdC1hZnRlciIsICIxIGRheXMiKSk7CiAgICAgICAgaWYgKG1ldGFPYmplY3RBcmcudHdpdHRlckhhbmRsZSkgewogICAgICAgICAgdGhpcy5nbG9iYWxMZXZlbC5hZGRUYWcobmV3IE1ldGFUYWcoInR3aXR0ZXI6Y2FyZCIsICJzdW1tYXJ5X2xhcmdlX2ltYWdlIikpOwogICAgICAgICAgdGhpcy5nbG9iYWxMZXZlbC5hZGRUYWcobmV3IE1ldGFUYWcoInR3aXR0ZXI6c2l0ZSIsIG1ldGFPYmplY3RBcmcudHdpdHRlckhhbmRsZSkpOwogICAgICAgICAgdGhpcy5nbG9iYWxMZXZlbC5hZGRUYWcobmV3IE1ldGFUYWcoInR3aXR0ZXI6Y3JlYXRvciIsIG1ldGFPYmplY3RBcmcudHdpdHRlckhhbmRsZSkpOwogICAgICAgIH0KICAgICAgICB0aGlzLmJhc2VMZXZlbC50aXRsZSA9IG1ldGFPYmplY3RBcmcudGl0bGU7CiAgICAgICAgaWYgKG1ldGFPYmplY3RBcmcuZGVzY3JpcHRpb24pIHsKICAgICAgICAgIHRoaXMuYmFzZUxldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygiZGVzY3JpcHRpb24iLCBtZXRhT2JqZWN0QXJnLmRlc2NyaXB0aW9uKSk7CiAgICAgICAgfQogICAgICAgIGlmIChtZXRhT2JqZWN0QXJnLmNhbm9uaWNhbERvbWFpbikgewogICAgICAgICAgdGhpcy5iYXNlTGV2ZWwuYWRkVGFnKG5ldyBNZXRhVGFnKCJjYW5vbmljYWwiLCBtZXRhT2JqZWN0QXJnLmNhbm9uaWNhbERvbWFpbikpOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgIGNhc2UgKG1ldGFPYmplY3RBcmcubGRDb21wYW55ICYmICFtZXRhT2JqZWN0QXJnLmxkUHJvZHVjdCk6CiAgICAgICAgICAgIHRoaXMuYmFzZUxldmVsLmFkZENvbXBhbnlJbmZvKG1ldGFPYmplY3RBcmcubGRDb21wYW55KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICEhbWV0YU9iamVjdEFyZy5sZFByb2R1Y3Q6CiAgICAgICAgICAgIHRoaXMuYmFzZUxldmVsLmFkZFByb2R1Y3RJbmZvKG1ldGFPYmplY3RBcmcubGRQcm9kdWN0LCBtZXRhT2JqZWN0QXJnLmxkQ29tcGFueSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBhd2FpdCB0aGlzLmdsb2JhbExldmVsLmVuYWJsZSgpOwogICAgICAgIHRoaXMuYWN0aXZlTGV2ZWwgPSB0aGlzLmJhc2VMZXZlbDsKICAgICAgICBhd2FpdCB0aGlzLmFjdGl2ZUxldmVsLmVuYWJsZSgpOwogICAgICB9CiAgICAgIGFzeW5jIHNldFN1YlBhZ2VMZXZlbChtZXRhT2JqZWN0QXJnKSB7CiAgICAgICAgY29uc3Qgc3ViUGFnZUxldmVsID0gbmV3IFRhZ0xldmVsKHRoaXMsICJzdWJwYWdlIik7CiAgICAgICAgc3ViUGFnZUxldmVsLnRpdGxlID0gbWV0YU9iamVjdEFyZy50aXRsZTsKICAgICAgICBpZiAobWV0YU9iamVjdEFyZy5kZXNjcmlwdGlvbikgewogICAgICAgICAgc3ViUGFnZUxldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygiZGVzY3JpcHRpb24iLCBtZXRhT2JqZWN0QXJnLmRlc2NyaXB0aW9uKSk7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMuYWN0aXZlTGV2ZWwuZGlzYWJsZSgpOwogICAgICAgIHRoaXMuYWN0aXZlTGV2ZWwgPSBzdWJQYWdlTGV2ZWw7CiAgICAgICAgYXdhaXQgdGhpcy5hY3RpdmVMZXZlbC5lbmFibGUoKTsKICAgICAgICByZXR1cm4gc3ViUGFnZUxldmVsOwogICAgICB9CiAgICAgIGFzeW5jIHJldmVydFRvQmFzZUxldmVsKCkgewogICAgICAgIGlmICh0aGlzLmFjdGl2ZUxldmVsICE9PSB0aGlzLmJhc2VMZXZlbCkgewogICAgICAgICAgYXdhaXQgdGhpcy5hY3RpdmVMZXZlbC5kaXNhYmxlKCk7CiAgICAgICAgICB0aGlzLmFjdGl2ZUxldmVsID0gdGhpcy5iYXNlTGV2ZWw7CiAgICAgICAgICBhd2FpdCB0aGlzLmFjdGl2ZUxldmVsLmVuYWJsZSgpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLndlYnNldHVwLmpzCnZhciBXZWJTZXR1cDsKdmFyIGluaXRfd2Vic2V0dXBfY2xhc3Nlc193ZWJzZXR1cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLndlYnNldHVwLmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfcGx1Z2lucygpOwogICAgaW5pdF9pbnRlcmZhY2VzMigpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ21hbmFnZXIoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdsZXZlbCgpOwogICAgV2ViU2V0dXAgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmcpIHsKICAgICAgICB0aGlzLnRhZ01hbmFnZXIgPSBuZXcgVGFnTWFuYWdlcigpOwogICAgICAgIHRoaXMucmVhZHlEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0czIxLmRlZmVyKCk7CiAgICAgICAgdGhpcy5yZWFkeUZvclNtYXJ0c3NyRGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMyMS5kZWZlcigpOwogICAgICAgIHRoaXMucmVhZHlQcm9taXNlID0gdGhpcy5yZWFkeURlZmVycmVkLnByb21pc2U7CiAgICAgICAgdGhpcy5yZWFkeUZvclNtYXJ0c3NyUHJvbWlzZSA9IHRoaXMucmVhZHlGb3JTbWFydHNzckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZzsKICAgICAgICB0aGlzLnNldHVwKCkudGhlbigoKSA9PiB7CiAgICAgICAgICB0aGlzLnJlYWR5RGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc21hcnRzc3JXYWl0Rm9yUmVhZHlTaWduYWwpIHsKICAgICAgICAgICAgdGhpcy5yZWFkeUZvclNtYXJ0c3NyRGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhbiBhc3luYyBzZXR1cCBjYWxsZWQgYnkgdGhlIGNvbnN0cnVjdG9yCiAgICAgICAqLwogICAgICBhc3luYyBzZXR1cChvcHRpb25zQXJnKSB7CiAgICAgICAgaWYgKG9wdGlvbnNBcmcpIHsKICAgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNBcmc7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMudGFnTWFuYWdlci5zZXR1cCh0aGlzLm9wdGlvbnMubWV0YU9iamVjdCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldmVydHMgdGhlIGFjdGl2ZSBsZXZlbCBhbmQgcmV0dXJucyB0byB0aGUgYmFzZSBsZXZlbAogICAgICAgKi8KICAgICAgcmV2ZXJ0VG9CYXNlTGV2ZWwoKSB7CiAgICAgICAgdGhpcy50YWdNYW5hZ2VyLnJldmVydFRvQmFzZUxldmVsKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHNldHMgYSBzdWJwYWdlCiAgICAgICAqIEBwYXJhbSBtZXRhT2JqZWN0QXJnCiAgICAgICAqLwogICAgICBhc3luYyBzZXRTdWJMZXZlbChtZXRhT2JqZWN0QXJnKSB7CiAgICAgICAgY29uc3Qgc3ViTGV2ZWwgPSBhd2FpdCB0aGlzLnRhZ01hbmFnZXIuc2V0U3ViUGFnZUxldmVsKG1ldGFPYmplY3RBcmcpOwogICAgICAgIHJldHVybiBzdWJMZXZlbDsKICAgICAgfQogICAgICAvKioKICAgICAgICogZmxhc2hlcyB0aGUgdGl0bGUgd2l0aCB0aGUgZ2l2ZW4gdGV4dAogICAgICAgKiBAcGFyYW0gZmxhc2hUZXh0QXJnCiAgICAgICAqLwogICAgICBmbGFzaFRpdGxlKGZsYXNoVGV4dEFyZykgewogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBpbmZvcm1zIHNtYXJ0c3NyIHRoYXQgdGhlIHBhZ2UgaXMgcmVhZHkgdG8gYmUgcmVuZGVyZWQKICAgICAgICovCiAgICAgIGluZm9ybVJlYWR5Rm9yU21hcnRzc3IoKSB7CiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc21hcnRzc3JXYWl0Rm9yUmVhZHlTaWduYWwpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFlvdSBoYXZlIG5vdCBpbmRpY2F0ZWQgdGhhdCB5b3UgaW5mb3JtIHNtYXJ0c3NyIGJ5IGEgZGVkaWNhdGVkIHNpZ25hbCEgUGxlYXNlIGNvbnNpZGVyIGRvaW5nIHNvIWApOwogICAgICAgIH0KICAgICAgICB0aGlzLnJlYWR5Rm9yU21hcnRzc3JEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50aXRsZS5qcwp2YXIgVGl0bGU7CnZhciBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGl0bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50aXRsZS5qcyIoKSB7CiAgICBpbml0X3dlYnNldHVwX3BsdWdpbnMoKTsKICAgIFRpdGxlID0gY2xhc3MgewogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjQgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjQsIHsKICBKc29uTGRUYWc6ICgpID0+IEpzb25MZFRhZywKICBNZXRhVGFnOiAoKSA9PiBNZXRhVGFnLAogIE9wZW5ncmFwaFRhZzogKCkgPT4gT3BlbmdyYXBoVGFnLAogIFRpdGxlOiAoKSA9PiBUaXRsZSwKICBXZWJTZXR1cDogKCkgPT4gV2ViU2V0dXAKfSk7CnZhciBpbml0X2Rpc3RfdHMyNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfd2Vic2V0dXAoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfbWV0YXRhZygpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19vcGVuZ3JhcGh0YWcoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfanNvbmxkdGFnKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGl0bGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvbGlrLnBsdWdpbnMuanMKdmFyIGltcG9ydF9zeW1ib2xfdHJlZTI7CnZhciBpbml0X2xpa19wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9saWsucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMzKCk7CiAgICBpbml0X2Rpc3RfdHM1KCk7CiAgICBpbml0X2Rpc3RfdHMoKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIGluaXRfZGlzdF90czYoKTsKICAgIGltcG9ydF9zeW1ib2xfdHJlZTIgPSBfX3RvRVNNKHJlcXVpcmVfU3ltYm9sVHJlZSgpLCAxKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvbGlrLmZhc3RtYXAuanMKdmFyIEZhc3RNYXAyOwp2YXIgaW5pdF9saWtfZmFzdG1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvbGlrLmZhc3RtYXAuanMiKCkgewogICAgaW5pdF9saWtfcGx1Z2lucygpOwogICAgRmFzdE1hcDIgPSBjbGFzcyBfRmFzdE1hcCB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMubWFwT2JqZWN0ID0ge307CiAgICAgIH0KICAgICAgaXNVbmlxdWVLZXkoa2V5QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubWFwT2JqZWN0W2tleUFyZ10gPyBmYWxzZSA6IHRydWU7CiAgICAgIH0KICAgICAgYWRkVG9NYXAoa2V5QXJnLCBvYmplY3RBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICBpZiAodGhpcy5pc1VuaXF1ZUtleShrZXlBcmcpIHx8IG9wdGlvbnNBcmcgJiYgb3B0aW9uc0FyZy5mb3JjZSkgewogICAgICAgICAgdGhpcy5tYXBPYmplY3Rba2V5QXJnXSA9IG9iamVjdEFyZzsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldEJ5S2V5KGtleUFyZykgewogICAgICAgIHJldHVybiB0aGlzLm1hcE9iamVjdFtrZXlBcmddOwogICAgICB9CiAgICAgIHJlbW92ZUZyb21NYXAoa2V5QXJnKSB7CiAgICAgICAgY29uc3QgcmVtb3ZlZEl0ZW0gPSB0aGlzLmdldEJ5S2V5KGtleUFyZyk7CiAgICAgICAgZGVsZXRlIHRoaXMubWFwT2JqZWN0W2tleUFyZ107CiAgICAgICAgcmV0dXJuIHJlbW92ZWRJdGVtOwogICAgICB9CiAgICAgIGdldEtleXMoKSB7CiAgICAgICAgY29uc3Qga2V5czIgPSBbXTsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBpbiB0aGlzLm1hcE9iamVjdCkgewogICAgICAgICAgaWYgKHRoaXMubWFwT2JqZWN0W2tleUFyZ10pIHsKICAgICAgICAgICAga2V5czIucHVzaChrZXlBcmcpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4ga2V5czI7CiAgICAgIH0KICAgICAgY2xlYW4oKSB7CiAgICAgICAgdGhpcy5tYXBPYmplY3QgPSB7fTsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmV0dXJucyBhIG5ldyBGYXN0bWFwIHRoYXQgaW5jbHVkZXMgYWxsIHZhbHVlcyBmcm9tIHRoaXMgYW5kIGFsbCBmcm9tIHRoZSBmYXN0bWFwIGluIHRoZSBhcmd1bWVudAogICAgICAgKi8KICAgICAgY29uY2F0KGZhc3RNYXBBcmcpIHsKICAgICAgICBjb25zdCBjb25jYXRlZEZhc3RtYXAgPSBuZXcgX0Zhc3RNYXAoKTsKICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2YgdGhpcy5nZXRLZXlzKCkpIHsKICAgICAgICAgIGNvbmNhdGVkRmFzdG1hcC5hZGRUb01hcChrZXkyLCB0aGlzLmdldEJ5S2V5KGtleTIpKTsKICAgICAgICB9CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIGZhc3RNYXBBcmcuZ2V0S2V5cygpKSB7CiAgICAgICAgICBjb25jYXRlZEZhc3RtYXAuYWRkVG9NYXAoa2V5MiwgZmFzdE1hcEFyZy5nZXRCeUtleShrZXkyKSwgewogICAgICAgICAgICBmb3JjZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjb25jYXRlZEZhc3RtYXA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHRyaWVzIHRvIG1lcmdlIGFub3RoZXIgRmFzdG1hcAogICAgICAgKiBOb3RlOiB1bmlxdWVLZXlDb2xsaXNpb25zIHdpbGwgY2F1c2Ugb3ZlcndyaXRlCiAgICAgICAqIEBwYXJhbSBmYXN0TWFwQXJnCiAgICAgICAqLwogICAgICBhZGRBbGxGcm9tT3RoZXIoZmFzdE1hcEFyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBmYXN0TWFwQXJnLmdldEtleXMoKSkgewogICAgICAgICAgdGhpcy5hZGRUb01hcChrZXkyLCBmYXN0TWFwQXJnLmdldEJ5S2V5KGtleTIpLCB7CiAgICAgICAgICAgIGZvcmNlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgZmluZChmaW5kRnVuY3Rpb25BcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2YgdGhpcy5nZXRLZXlzKCkpIHsKICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEJ5S2V5KGtleTIpOwogICAgICAgICAgY29uc3QgZmluZEZ1bmN0aW9uUmVzdWx0ID0gYXdhaXQgZmluZEZ1bmN0aW9uQXJnKGl0ZW0pOwogICAgICAgICAgaWYgKGZpbmRGdW5jdGlvblJlc3VsdCkgewogICAgICAgICAgICByZXR1cm4gaXRlbTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2xpay5vYmplY3RtYXAuanMKdmFyIHVuaTIsIE9iamVjdE1hcDI7CnZhciBpbml0X2xpa19vYmplY3RtYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2xpay5vYmplY3RtYXAuanMiKCkgewogICAgaW5pdF9saWtfcGx1Z2lucygpOwogICAgaW5pdF9saWtfZmFzdG1hcCgpOwogICAgdW5pMiA9IChwcmVmaXg0ID0gInVuaSIpID0+IHsKICAgICAgcmV0dXJuIGAke3ByZWZpeDR9eHh4eHh4eHh4eHhgLnJlcGxhY2UoL1t4eV0vZywgKGMxMSkgPT4gewogICAgICAgIGNvbnN0IHIxMSA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDA7CiAgICAgICAgY29uc3QgdjUgPSBjMTEgPT09ICJ4IiA/IHIxMSA6IHIxMSAmIDMgfCA4OwogICAgICAgIHJldHVybiB2NS50b1N0cmluZygxNik7CiAgICAgIH0pOwogICAgfTsKICAgIE9iamVjdE1hcDIgPSBjbGFzcyBfT2JqZWN0TWFwIHsKICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBuZXcgaW5zdGFuY2UKICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuZmFzdE1hcCA9IG5ldyBGYXN0TWFwMigpOwogICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czIucnhqcy5TdWJqZWN0KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFkZHMgYW4gb2JqZWN0IG1hcHBlZCB0byBhIHN0cmluZwogICAgICAgKiB0aGUgc3RyaW5nIG11c3QgYmUgdW5pcXVlCiAgICAgICAqLwogICAgICBhZGRNYXBwZWRVbmlxdWUodW5pcXVlS2V5QXJnLCBvYmplY3RBcmcpIHsKICAgICAgICB0aGlzLmZhc3RNYXAuYWRkVG9NYXAodW5pcXVlS2V5QXJnLCBvYmplY3RBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBmYXN0ZXN0IHdheSB0byBnZXQgYW4gb2JqZWN0IGZyb20gdGhlIG1hcAogICAgICAgKiBAcGFyYW0gdW5pcXVlS2V5CiAgICAgICAqLwogICAgICBnZXRNYXBwZWRVbmlxdWUodW5pcXVlS2V5QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZmFzdE1hcC5nZXRCeUtleSh1bmlxdWVLZXlBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZW1vdmUga2V5CiAgICAgICAqIEBwYXJhbSBmdW5jdGlvbkFyZwogICAgICAgKi8KICAgICAgcmVtb3ZlTWFwcGVkVW5pcXVlKHVuaXF1ZUtleSkgewogICAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuZ2V0TWFwcGVkVW5pcXVlKHVuaXF1ZUtleSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFkZCBvYmplY3QgdG8gT2JqZWN0bWFwCiAgICAgICAqIHJldHVybnMgZmFsc2UgaWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5IGluIHRoZSBtYXAKICAgICAgICogcmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3Qgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseQogICAgICAgKi8KICAgICAgYWRkKG9iamVjdEFyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpOwogICAgICAgICAgaWYgKG9iamVjdCA9PT0gb2JqZWN0QXJnKSB7CiAgICAgICAgICAgIHJldHVybiBrZXlBcmc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IHVuaTIoImtleSIpOwogICAgICAgIHRoaXMuYWRkTWFwcGVkVW5pcXVlKHVuaXF1ZUtleSwgb2JqZWN0QXJnKTsKICAgICAgICB0aGlzLmV2ZW50U3ViamVjdC5uZXh0KHsKICAgICAgICAgIG9wZXJhdGlvbjogImFkZCIsCiAgICAgICAgICBwYXlsb2FkOiBvYmplY3RBcmcKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdW5pcXVlS2V5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBsaWtlIC5hZGQgYnV0IGFkZHMgYW4gd2hvbGUgYXJyYXkgb2Ygb2JqZWN0cwogICAgICAgKi8KICAgICAgYWRkQXJyYXkob2JqZWN0QXJyYXlBcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygb2JqZWN0QXJyYXlBcmcpIHsKICAgICAgICAgIHRoaXMuYWRkKGl0ZW0pOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2sgaWYgb2JqZWN0IGlzIGluIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgY2hlY2tGb3JPYmplY3Qob2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXRLZXlGb3JPYmplY3Qob2JqZWN0QXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZ2V0IGtleSBmb3Igb2JqZWN0CiAgICAgICAqIEBwYXJhbSBmaW5kRnVuY3Rpb24KICAgICAgICovCiAgICAgIGdldEtleUZvck9iamVjdChvYmplY3RBcmcpIHsKICAgICAgICBsZXQgZm91bmRLZXkgPSBudWxsOwogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIGlmICghZm91bmRLZXkgJiYgdGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZykgPT09IG9iamVjdEFyZykgewogICAgICAgICAgICBmb3VuZEtleSA9IGtleUFyZzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZm91bmRLZXk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZpbmQgb2JqZWN0CiAgICAgICAqLwogICAgICBhc3luYyBmaW5kKGZpbmRGdW5jdGlvbikgewogICAgICAgIHJldHVybiB0aGlzLmZhc3RNYXAuZmluZChmaW5kRnVuY3Rpb24pOwogICAgICB9CiAgICAgIGZpbmRTeW5jKGZpbmRGdW5jdGlvbikgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIGlmIChmaW5kRnVuY3Rpb24odGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZykpKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE1hcHBlZFVuaXF1ZShrZXlBcmcpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogZmluZHMgYSBzcGVjaWZpYyBlbGVtZW50IGFuZCB0aGVuIHJlbW92ZXMgaXQKICAgICAgICovCiAgICAgIGFzeW5jIGZpbmRPbmVBbmRSZW1vdmUoZmluZEZ1bmN0aW9uKSB7CiAgICAgICAgY29uc3QgZm91bmRFbGVtZW50ID0gYXdhaXQgdGhpcy5maW5kKGZpbmRGdW5jdGlvbik7CiAgICAgICAgaWYgKGZvdW5kRWxlbWVudCkgewogICAgICAgICAgdGhpcy5yZW1vdmUoZm91bmRFbGVtZW50KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZvdW5kRWxlbWVudDsKICAgICAgfQogICAgICBmaW5kT25lQW5kUmVtb3ZlU3luYyhmaW5kRnVuY3Rpb24pIHsKICAgICAgICBjb25zdCBmb3VuZEVsZW1lbnQgPSB0aGlzLmZpbmRTeW5jKGZpbmRGdW5jdGlvbik7CiAgICAgICAgaWYgKGZvdW5kRWxlbWVudCkgewogICAgICAgICAgdGhpcy5yZW1vdmUoZm91bmRFbGVtZW50KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZvdW5kRWxlbWVudDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcnVuIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0gaW4gT2JqZWN0bWFwCiAgICAgICAqLwogICAgICBhc3luYyBmb3JFYWNoKGZ1bmN0aW9uQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgYXdhaXQgZnVuY3Rpb25BcmcodGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZykpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogZ2V0cyBhbiBvYmplY3QgaW4gdGhlIE9ic2VydmFibGVtYXAgYW5kIHJlbW92ZXMgaXQsIHNvIGl0IGNhbid0IGJlIHJldHJpZXZlZCBhZ2FpbgogICAgICAgKi8KICAgICAgZ2V0T25lQW5kUmVtb3ZlKCkgewogICAgICAgIGNvbnN0IGtleXMyID0gdGhpcy5mYXN0TWFwLmdldEtleXMoKTsKICAgICAgICBpZiAoa2V5czIubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3Qga2V5VG9Vc2UgPSBrZXlzMlswXTsKICAgICAgICAgIGNvbnN0IHJlbW92ZWRJdGVtID0gdGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoa2V5VG9Vc2UpOwogICAgICAgICAgdGhpcy5ldmVudFN1YmplY3QubmV4dCh7CiAgICAgICAgICAgIG9wZXJhdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIHBheWxvYWQ6IHJlbW92ZWRJdGVtCiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiByZW1vdmVkSXRlbTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBjbG9uZWQgYXJyYXkgb2YgYWxsIHRoZSBvYmplY3RzIGN1cnJlbnRseSBpbiB0aGUgT2JqZWN0bWFwCiAgICAgICAqLwogICAgICBnZXRBcnJheSgpIHsKICAgICAgICBjb25zdCByZXR1cm5BcnJheSA9IFtdOwogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIHJldHVybkFycmF5LnB1c2godGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZykpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0dXJuQXJyYXk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrIGlmIE9iamVjdG1hcCBpc3QgZW1wdHkKICAgICAgICovCiAgICAgIGlzRW1wdHkoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkubGVuZ3RoID09PSAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZW1vdmUgb2JqZWN0IGZyb20gT2JqZWN0bWFwCiAgICAgICAqLwogICAgICByZW1vdmUob2JqZWN0QXJnKSB7CiAgICAgICAgaWYgKHRoaXMuY2hlY2tGb3JPYmplY3Qob2JqZWN0QXJnKSkgewogICAgICAgICAgY29uc3Qga2V5QXJnID0gdGhpcy5nZXRLZXlGb3JPYmplY3Qob2JqZWN0QXJnKTsKICAgICAgICAgIGNvbnN0IHJlbW92ZWRPYmplY3QgPSB0aGlzLmZhc3RNYXAucmVtb3ZlRnJvbU1hcChrZXlBcmcpOwogICAgICAgICAgdGhpcy5ldmVudFN1YmplY3QubmV4dCh7CiAgICAgICAgICAgIG9wZXJhdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIHBheWxvYWQ6IHJlbW92ZWRPYmplY3QKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIHJlbW92ZWRPYmplY3Q7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB3aXBlIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgd2lwZSgpIHsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICB0aGlzLmZhc3RNYXAucmVtb3ZlRnJvbU1hcChrZXlBcmcpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogcmV0dXJucyBhIG5ldyBPYmplY3RtYXAgdGhhdCBpbmNsdWRlcwogICAgICAgKi8KICAgICAgY29uY2F0KG9iamVjdE1hcEFyZykgewogICAgICAgIGNvbnN0IGNvbmNhdHRlZE9iamVjdE1hcCA9IG5ldyBfT2JqZWN0TWFwKCk7CiAgICAgICAgY29uY2F0dGVkT2JqZWN0TWFwLmZhc3RNYXAuYWRkQWxsRnJvbU90aGVyKHRoaXMuZmFzdE1hcCk7CiAgICAgICAgY29uY2F0dGVkT2JqZWN0TWFwLmZhc3RNYXAuYWRkQWxsRnJvbU90aGVyKG9iamVjdE1hcEFyZy5mYXN0TWFwKTsKICAgICAgICByZXR1cm4gY29uY2F0dGVkT2JqZWN0TWFwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB0cmllcyB0byBtZXJnZSBhbm90aGVyIE9iamVjdG1hcAogICAgICAgKiBOb3RlOiB1bmlxdWVLZXlDb2xsaXNpb25zIHdpbGwgY2F1c2Ugb3ZlcndyaXRlCiAgICAgICAqIEBwYXJhbSBvYmplY3RNYXBBcmcKICAgICAgICovCiAgICAgIGFkZEFsbEZyb21PdGhlcihvYmplY3RNYXBBcmcpIHsKICAgICAgICB0aGlzLmZhc3RNYXAuYWRkQWxsRnJvbU90aGVyKG9iamVjdE1hcEFyZy5mYXN0TWFwKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvbGlrLnN0cmluZ21hcC5qcwp2YXIgU3RyaW5nbWFwMjsKdmFyIGluaXRfbGlrX3N0cmluZ21hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvbGlrLnN0cmluZ21hcC5qcyIoKSB7CiAgICBpbml0X2xpa19wbHVnaW5zKCk7CiAgICBTdHJpbmdtYXAyID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLl9zdHJpbmdBcnJheSA9IFtdOwogICAgICAgIHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5ID0gW107CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFkZCBhIHN0cmluZyB0byB0aGUgU3RyaW5nbWFwCiAgICAgICAqLwogICAgICBhZGRTdHJpbmcoc3RyaW5nQXJnKSB7CiAgICAgICAgdGhpcy5fc3RyaW5nQXJyYXkucHVzaChzdHJpbmdBcmcpOwogICAgICAgIHRoaXMubm90aWZ5VHJpZ2dlcigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBsaWtlIGFkZFN0cmluZywgYnV0IGFjY2VwdHMgYW4gYXJyYXkgb2Ygc3RyaW5ncwogICAgICAgKi8KICAgICAgYWRkU3RyaW5nQXJyYXkoc3RyaW5nQXJyYXlBcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IHN0cmluZ0l0ZW0gb2Ygc3RyaW5nQXJyYXlBcmcpIHsKICAgICAgICAgIHRoaXMuYWRkU3RyaW5nKHN0cmluZ0l0ZW0pOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogcmVtb3ZlcyBhIHN0cmluZyBmcm9tIFN0cmluZ21hcAogICAgICAgKi8KICAgICAgcmVtb3ZlU3RyaW5nKHN0cmluZ0FyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIGluIHRoaXMuX3N0cmluZ0FycmF5KSB7CiAgICAgICAgICBpZiAodGhpcy5fc3RyaW5nQXJyYXlba2V5QXJnXSA9PT0gc3RyaW5nQXJnKSB7CiAgICAgICAgICAgIHRoaXMuX3N0cmluZ0FycmF5LnNwbGljZShwYXJzZUludChrZXlBcmcpLCAxKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5ub3RpZnlUcmlnZ2VyKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHdpcGVzIHRoZSBTdHJpbmdtYXAKICAgICAgICovCiAgICAgIHdpcGUoKSB7CiAgICAgICAgdGhpcy5fc3RyaW5nQXJyYXkgPSBbXTsKICAgICAgICB0aGlzLm5vdGlmeVRyaWdnZXIoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2sgaWYgc3RyaW5nIGlzIGluIFN0cmluZ21hcAogICAgICAgKi8KICAgICAgY2hlY2tTdHJpbmcoc3RyaW5nQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmluZ0FycmF5LmluZGV4T2Yoc3RyaW5nQXJnKSAhPT0gLTE7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrcyBzdHJpbmdQcmVzZW5jZSB3aXRoIG1pbmltYXRjaAogICAgICAgKi8KICAgICAgY2hlY2tNaW5pbWF0Y2gobWluaU1hdGNoU3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3Qgc21hcnRNYXRjaEluc3RhbmNlID0gbmV3IGRpc3RfdHNfZXhwb3J0czUuU21hcnRNYXRjaChtaW5pTWF0Y2hTdHJpbmdBcmcpOwogICAgICAgIGxldCBmb3VuZE1hdGNoID0gZmFsc2U7CiAgICAgICAgZm9yIChjb25zdCBzdHJpbmdJdGVtIG9mIHRoaXMuX3N0cmluZ0FycmF5KSB7CiAgICAgICAgICBpZiAoc21hcnRNYXRjaEluc3RhbmNlLm1hdGNoKHN0cmluZ0l0ZW0pKSB7CiAgICAgICAgICAgIGZvdW5kTWF0Y2ggPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZm91bmRNYXRjaDsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIGlmIHRoZSBTdHJpbmdtYXAgaXMgZW1wdHkKICAgICAgICovCiAgICAgIGNoZWNrSXNFbXB0eSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RyaW5nQXJyYXkubGVuZ3RoID09PSAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBnZXRzIGEgY2xvbmVkIGNvcHkgb2YgdGhlIGN1cnJlbnQgc3RyaW5nIEFycmF5CiAgICAgICAqLwogICAgICBnZXRTdHJpbmdBcnJheSgpIHsKICAgICAgICBjb25zdCByZXR1cm5BcnJheSA9IFtdOwogICAgICAgIGZvciAoY29uc3Qgc3RyaW5nSXRlbSBvZiB0aGlzLl9zdHJpbmdBcnJheSkgewogICAgICAgICAgcmV0dXJuQXJyYXkucHVzaChzdHJpbmdJdGVtKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldHVybkFycmF5OwogICAgICB9CiAgICAgIC8vIHRyaWdnZXIgcmVnaXN0ZXJpbmcKICAgICAgLyoqCiAgICAgICAqIHJlZ2lzdGVyIGEgbmV3IHRyaWdnZXIKICAgICAgICovCiAgICAgIHJlZ2lzdGVyVW50aWxUcnVlKGZ1bmN0aW9uQXJnLCBjYWxsYmFja0FyZykgewogICAgICAgIGNvbnN0IHRydWVEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5LnB1c2goKCkgPT4gewogICAgICAgICAgY29uc3QgcmVzdWx0ID0gZnVuY3Rpb25BcmcodGhpcy5nZXRTdHJpbmdBcnJheSgpKTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHsKICAgICAgICAgICAgaWYgKGNhbGxiYWNrQXJnKSB7CiAgICAgICAgICAgICAgY2FsbGJhY2tBcmcoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0cnVlRGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9KTsKICAgICAgICB0aGlzLm5vdGlmeVRyaWdnZXIoKTsKICAgICAgICByZXR1cm4gdHJ1ZURlZmVycmVkLnByb21pc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIG5vdGlmaWVzIHRyaWdnZXJzCiAgICAgICAqLwogICAgICBub3RpZnlUcmlnZ2VyKCkgewogICAgICAgIGNvbnN0IGZpbHRlcmVkQXJyYXkgPSB0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheS5maWx0ZXIoKGZ1bmN0aW9uQXJnKSA9PiB7CiAgICAgICAgICByZXR1cm4gIWZ1bmN0aW9uQXJnKCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXkgPSBmaWx0ZXJlZEFycmF5OwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrbGVuaXNAMS4zLjIwL25vZGVfbW9kdWxlcy9AdGVtcGZpeC9sZW5pcy9kaXN0L2xlbmlzLm1qcwpmdW5jdGlvbiBjbGFtcDIobWluMywgaW5wdXQsIG1heDMpIHsKICByZXR1cm4gTWF0aC5tYXgobWluMywgTWF0aC5taW4oaW5wdXQsIG1heDMpKTsKfQpmdW5jdGlvbiBsZXJwKHgzLCB5NSwgdDkpIHsKICByZXR1cm4gKDEgLSB0OSkgKiB4MyArIHQ5ICogeTU7Cn0KZnVuY3Rpb24gZGFtcCh4MywgeTUsIGxhbWJkYSwgZGVsdGFUaW1lKSB7CiAgcmV0dXJuIGxlcnAoeDMsIHk1LCAxIC0gTWF0aC5leHAoLWxhbWJkYSAqIGRlbHRhVGltZSkpOwp9CmZ1bmN0aW9uIG1vZHVsbyhuMTMsIGQ2KSB7CiAgcmV0dXJuIChuMTMgJSBkNiArIGQ2KSAlIGQ2Owp9CmZ1bmN0aW9uIGRlYm91bmNlMihjYWxsYmFjaywgZGVsYXkyKSB7CiAgbGV0IHRpbWVyMjsKICByZXR1cm4gZnVuY3Rpb24oLi4uYXJncykgewogICAgbGV0IGNvbnRleHQyID0gdGhpczsKICAgIGNsZWFyVGltZW91dCh0aW1lcjIpOwogICAgdGltZXIyID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHRpbWVyMiA9IHZvaWQgMDsKICAgICAgY2FsbGJhY2suYXBwbHkoY29udGV4dDIsIGFyZ3MpOwogICAgfSwgZGVsYXkyKTsKICB9Owp9CnZhciB2ZXJzaW9uLCBBbmltYXRlLCBEaW1lbnNpb25zLCBFbWl0dGVyLCBMSU5FX0hFSUdIVCwgbGlzdGVuZXJPcHRpb25zLCBWaXJ0dWFsU2Nyb2xsLCBkZWZhdWx0RWFzaW5nLCBMZW5pczsKdmFyIGluaXRfbGVuaXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCtsZW5pc0AxLjMuMjAvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L2xlbmlzL2Rpc3QvbGVuaXMubWpzIigpIHsKICAgIHZlcnNpb24gPSAiMS4zLjE3IjsKICAgIEFuaW1hdGUgPSBjbGFzcyB7CiAgICAgIGlzUnVubmluZyA9IGZhbHNlOwogICAgICB2YWx1ZSA9IDA7CiAgICAgIGZyb20gPSAwOwogICAgICB0byA9IDA7CiAgICAgIGN1cnJlbnRUaW1lID0gMDsKICAgICAgLy8gVGhlc2UgYXJlIGluc3RhbmNpYXRlZCBpbiB0aGUgZnJvbVRvIG1ldGhvZAogICAgICBsZXJwOwogICAgICBkdXJhdGlvbjsKICAgICAgZWFzaW5nOwogICAgICBvblVwZGF0ZTsKICAgICAgLyoqCiAgICAgICAqIEFkdmFuY2UgdGhlIGFuaW1hdGlvbiBieSB0aGUgZ2l2ZW4gZGVsdGEgdGltZQogICAgICAgKgogICAgICAgKiBAcGFyYW0gZGVsdGFUaW1lIC0gVGhlIHRpbWUgaW4gc2Vjb25kcyB0byBhZHZhbmNlIHRoZSBhbmltYXRpb24KICAgICAgICovCiAgICAgIGFkdmFuY2UoZGVsdGFUaW1lKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzUnVubmluZykgcmV0dXJuOwogICAgICAgIGxldCBjb21wbGV0ZWQgPSBmYWxzZTsKICAgICAgICBpZiAodGhpcy5kdXJhdGlvbiAmJiB0aGlzLmVhc2luZykgewogICAgICAgICAgdGhpcy5jdXJyZW50VGltZSArPSBkZWx0YVRpbWU7CiAgICAgICAgICBjb25zdCBsaW5lYXJQcm9ncmVzcyA9IGNsYW1wMigwLCB0aGlzLmN1cnJlbnRUaW1lIC8gdGhpcy5kdXJhdGlvbiwgMSk7CiAgICAgICAgICBjb21wbGV0ZWQgPSBsaW5lYXJQcm9ncmVzcyA+PSAxOwogICAgICAgICAgY29uc3QgZWFzZWRQcm9ncmVzcyA9IGNvbXBsZXRlZCA/IDEgOiB0aGlzLmVhc2luZyhsaW5lYXJQcm9ncmVzcyk7CiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5mcm9tICsgKHRoaXMudG8gLSB0aGlzLmZyb20pICogZWFzZWRQcm9ncmVzczsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGVycCkgewogICAgICAgICAgdGhpcy52YWx1ZSA9IGRhbXAodGhpcy52YWx1ZSwgdGhpcy50bywgdGhpcy5sZXJwICogNjAsIGRlbHRhVGltZSk7CiAgICAgICAgICBpZiAoTWF0aC5yb3VuZCh0aGlzLnZhbHVlKSA9PT0gdGhpcy50bykgewogICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50bzsKICAgICAgICAgICAgY29tcGxldGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudG87CiAgICAgICAgICBjb21wbGV0ZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoY29tcGxldGVkKSB7CiAgICAgICAgICB0aGlzLnN0b3AoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5vblVwZGF0ZT8uKHRoaXMudmFsdWUsIGNvbXBsZXRlZCk7CiAgICAgIH0KICAgICAgLyoqIFN0b3AgdGhlIGFuaW1hdGlvbiAqLwogICAgICBzdG9wKCkgewogICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNldCB1cCB0aGUgYW5pbWF0aW9uIGZyb20gYSBzdGFydGluZyB2YWx1ZSB0byBhbiBlbmRpbmcgdmFsdWUKICAgICAgICogd2l0aCBvcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBsZXJwaW5nLCBkdXJhdGlvbiwgZWFzaW5nLCBhbmQgb25VcGRhdGUgY2FsbGJhY2sKICAgICAgICoKICAgICAgICogQHBhcmFtIGZyb20gLSBUaGUgc3RhcnRpbmcgdmFsdWUKICAgICAgICogQHBhcmFtIHRvIC0gVGhlIGVuZGluZyB2YWx1ZQogICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBhbmltYXRpb24KICAgICAgICovCiAgICAgIGZyb21Ubyhmcm9tMiwgdG8yLCB7IGxlcnA6IGxlcnAyLCBkdXJhdGlvbiwgZWFzaW5nLCBvblN0YXJ0LCBvblVwZGF0ZSB9KSB7CiAgICAgICAgdGhpcy5mcm9tID0gdGhpcy52YWx1ZSA9IGZyb20yOwogICAgICAgIHRoaXMudG8gPSB0bzI7CiAgICAgICAgdGhpcy5sZXJwID0gbGVycDI7CiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uOwogICAgICAgIHRoaXMuZWFzaW5nID0gZWFzaW5nOwogICAgICAgIHRoaXMuY3VycmVudFRpbWUgPSAwOwogICAgICAgIHRoaXMuaXNSdW5uaW5nID0gdHJ1ZTsKICAgICAgICBvblN0YXJ0Py4oKTsKICAgICAgICB0aGlzLm9uVXBkYXRlID0gb25VcGRhdGU7CiAgICAgIH0KICAgIH07CiAgICBEaW1lbnNpb25zID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih3cmFwcGVyLCBjb250ZW50MywgeyBhdXRvUmVzaXplID0gdHJ1ZSwgZGVib3VuY2U6IGRlYm91bmNlVmFsdWUgPSAyNTAgfSA9IHt9KSB7CiAgICAgICAgdGhpcy53cmFwcGVyID0gd3JhcHBlcjsKICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50MzsKICAgICAgICBpZiAoYXV0b1Jlc2l6ZSkgewogICAgICAgICAgdGhpcy5kZWJvdW5jZWRSZXNpemUgPSBkZWJvdW5jZTIodGhpcy5yZXNpemUsIGRlYm91bmNlVmFsdWUpOwogICAgICAgICAgaWYgKHRoaXMud3JhcHBlciBpbnN0YW5jZW9mIFdpbmRvdykgewogICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy5kZWJvdW5jZWRSZXNpemUsIGZhbHNlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMud3JhcHBlclJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuZGVib3VuY2VkUmVzaXplKTsKICAgICAgICAgICAgdGhpcy53cmFwcGVyUmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLndyYXBwZXIpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5jb250ZW50UmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5kZWJvdW5jZWRSZXNpemUpOwogICAgICAgICAgdGhpcy5jb250ZW50UmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNvbnRlbnQpOwogICAgICAgIH0KICAgICAgICB0aGlzLnJlc2l6ZSgpOwogICAgICB9CiAgICAgIHdpZHRoID0gMDsKICAgICAgaGVpZ2h0ID0gMDsKICAgICAgc2Nyb2xsSGVpZ2h0ID0gMDsKICAgICAgc2Nyb2xsV2lkdGggPSAwOwogICAgICAvLyBUaGVzZSBhcmUgaW5zdGFuY2lhdGVkIGluIHRoZSBjb25zdHJ1Y3RvciBhcyB0aGV5IG5lZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3B0aW9ucwogICAgICBkZWJvdW5jZWRSZXNpemU7CiAgICAgIHdyYXBwZXJSZXNpemVPYnNlcnZlcjsKICAgICAgY29udGVudFJlc2l6ZU9ic2VydmVyOwogICAgICBkZXN0cm95KCkgewogICAgICAgIHRoaXMud3JhcHBlclJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7CiAgICAgICAgdGhpcy5jb250ZW50UmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTsKICAgICAgICBpZiAodGhpcy53cmFwcGVyID09PSB3aW5kb3cgJiYgdGhpcy5kZWJvdW5jZWRSZXNpemUpIHsKICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlzLmRlYm91bmNlZFJlc2l6ZSwgZmFsc2UpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXNpemUgPSAoKSA9PiB7CiAgICAgICAgdGhpcy5vbldyYXBwZXJSZXNpemUoKTsKICAgICAgICB0aGlzLm9uQ29udGVudFJlc2l6ZSgpOwogICAgICB9OwogICAgICBvbldyYXBwZXJSZXNpemUgPSAoKSA9PiB7CiAgICAgICAgaWYgKHRoaXMud3JhcHBlciBpbnN0YW5jZW9mIFdpbmRvdykgewogICAgICAgICAgdGhpcy53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOwogICAgICAgICAgdGhpcy5oZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLndyYXBwZXIuY2xpZW50V2lkdGg7CiAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMud3JhcHBlci5jbGllbnRIZWlnaHQ7CiAgICAgICAgfQogICAgICB9OwogICAgICBvbkNvbnRlbnRSZXNpemUgPSAoKSA9PiB7CiAgICAgICAgaWYgKHRoaXMud3JhcHBlciBpbnN0YW5jZW9mIFdpbmRvdykgewogICAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSB0aGlzLmNvbnRlbnQuc2Nyb2xsSGVpZ2h0OwogICAgICAgICAgdGhpcy5zY3JvbGxXaWR0aCA9IHRoaXMuY29udGVudC5zY3JvbGxXaWR0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSB0aGlzLndyYXBwZXIuc2Nyb2xsSGVpZ2h0OwogICAgICAgICAgdGhpcy5zY3JvbGxXaWR0aCA9IHRoaXMud3JhcHBlci5zY3JvbGxXaWR0aDsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGdldCBsaW1pdCgpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgeDogdGhpcy5zY3JvbGxXaWR0aCAtIHRoaXMud2lkdGgsCiAgICAgICAgICB5OiB0aGlzLnNjcm9sbEhlaWdodCAtIHRoaXMuaGVpZ2h0CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIEVtaXR0ZXIgPSBjbGFzcyB7CiAgICAgIGV2ZW50cyA9IHt9OwogICAgICAvKioKICAgICAgICogRW1pdCBhbiBldmVudCB3aXRoIHRoZSBnaXZlbiBkYXRhCiAgICAgICAqIEBwYXJhbSBldmVudCBFdmVudCBuYW1lCiAgICAgICAqIEBwYXJhbSBhcmdzIERhdGEgdG8gcGFzcyB0byB0aGUgZXZlbnQgaGFuZGxlcnMKICAgICAgICovCiAgICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHsKICAgICAgICBsZXQgY2FsbGJhY2tzID0gdGhpcy5ldmVudHNbZXZlbnRdIHx8IFtdOwogICAgICAgIGZvciAobGV0IGkxMSA9IDAsIGxlbmd0aCA9IGNhbGxiYWNrcy5sZW5ndGg7IGkxMSA8IGxlbmd0aDsgaTExKyspIHsKICAgICAgICAgIGNhbGxiYWNrc1tpMTFdPy4oLi4uYXJncyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBZGQgYSBjYWxsYmFjayB0byB0aGUgZXZlbnQKICAgICAgICogQHBhcmFtIGV2ZW50IEV2ZW50IG5hbWUKICAgICAgICogQHBhcmFtIGNiIENhbGxiYWNrIGZ1bmN0aW9uCiAgICAgICAqIEByZXR1cm5zIFVuc3Vic2NyaWJlIGZ1bmN0aW9uCiAgICAgICAqLwogICAgICBvbihldmVudCwgY2IpIHsKICAgICAgICB0aGlzLmV2ZW50c1tldmVudF0/LnB1c2goY2IpIHx8ICh0aGlzLmV2ZW50c1tldmVudF0gPSBbY2JdKTsKICAgICAgICByZXR1cm4gKCkgPT4gewogICAgICAgICAgdGhpcy5ldmVudHNbZXZlbnRdID0gdGhpcy5ldmVudHNbZXZlbnRdPy5maWx0ZXIoKGkxMSkgPT4gY2IgIT09IGkxMSk7CiAgICAgICAgfTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgZXZlbnQKICAgICAgICogQHBhcmFtIGV2ZW50IEV2ZW50IG5hbWUKICAgICAgICogQHBhcmFtIGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uCiAgICAgICAqLwogICAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7CiAgICAgICAgdGhpcy5ldmVudHNbZXZlbnRdID0gdGhpcy5ldmVudHNbZXZlbnRdPy5maWx0ZXIoKGkxMSkgPT4gY2FsbGJhY2sgIT09IGkxMSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJlbW92ZSBhbGwgZXZlbnQgbGlzdGVuZXJzIGFuZCBjbGVhbiB1cAogICAgICAgKi8KICAgICAgZGVzdHJveSgpIHsKICAgICAgICB0aGlzLmV2ZW50cyA9IHt9OwogICAgICB9CiAgICB9OwogICAgTElORV9IRUlHSFQgPSAxMDAgLyA2OwogICAgbGlzdGVuZXJPcHRpb25zID0geyBwYXNzaXZlOiBmYWxzZSB9OwogICAgVmlydHVhbFNjcm9sbCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoZWxlbWVudDQsIG9wdGlvbnMgPSB7IHdoZWVsTXVsdGlwbGllcjogMSwgdG91Y2hNdWx0aXBsaWVyOiAxIH0pIHsKICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50NDsKICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlzLm9uV2luZG93UmVzaXplLCBmYWxzZSk7CiAgICAgICAgdGhpcy5vbldpbmRvd1Jlc2l6ZSgpOwogICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsIHRoaXMub25XaGVlbCwgbGlzdGVuZXJPcHRpb25zKTsKICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICJ0b3VjaHN0YXJ0IiwKICAgICAgICAgIHRoaXMub25Ub3VjaFN0YXJ0LAogICAgICAgICAgbGlzdGVuZXJPcHRpb25zCiAgICAgICAgKTsKICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICJ0b3VjaG1vdmUiLAogICAgICAgICAgdGhpcy5vblRvdWNoTW92ZSwKICAgICAgICAgIGxpc3RlbmVyT3B0aW9ucwogICAgICAgICk7CiAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIiwgdGhpcy5vblRvdWNoRW5kLCBsaXN0ZW5lck9wdGlvbnMpOwogICAgICB9CiAgICAgIHRvdWNoU3RhcnQgPSB7CiAgICAgICAgeDogMCwKICAgICAgICB5OiAwCiAgICAgIH07CiAgICAgIGxhc3REZWx0YSA9IHsKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAKICAgICAgfTsKICAgICAgd2luZG93ID0gewogICAgICAgIHdpZHRoOiAwLAogICAgICAgIGhlaWdodDogMAogICAgICB9OwogICAgICBlbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTsKICAgICAgLyoqCiAgICAgICAqIEFkZCBhbiBldmVudCBsaXN0ZW5lciBmb3IgdGhlIGdpdmVuIGV2ZW50IGFuZCBjYWxsYmFjawogICAgICAgKgogICAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnQgbmFtZQogICAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24KICAgICAgICovCiAgICAgIG9uKGV2ZW50LCBjYWxsYmFjaykgewogICAgICAgIHJldHVybiB0aGlzLmVtaXR0ZXIub24oZXZlbnQsIGNhbGxiYWNrKTsKICAgICAgfQogICAgICAvKiogUmVtb3ZlIGFsbCBldmVudCBsaXN0ZW5lcnMgYW5kIGNsZWFuIHVwICovCiAgICAgIGRlc3Ryb3koKSB7CiAgICAgICAgdGhpcy5lbWl0dGVyLmRlc3Ryb3koKTsKICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy5vbldpbmRvd1Jlc2l6ZSwgZmFsc2UpOwogICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsIHRoaXMub25XaGVlbCwgbGlzdGVuZXJPcHRpb25zKTsKICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICJ0b3VjaHN0YXJ0IiwKICAgICAgICAgIHRoaXMub25Ub3VjaFN0YXJ0LAogICAgICAgICAgbGlzdGVuZXJPcHRpb25zCiAgICAgICAgKTsKICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICJ0b3VjaG1vdmUiLAogICAgICAgICAgdGhpcy5vblRvdWNoTW92ZSwKICAgICAgICAgIGxpc3RlbmVyT3B0aW9ucwogICAgICAgICk7CiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoCiAgICAgICAgICAidG91Y2hlbmQiLAogICAgICAgICAgdGhpcy5vblRvdWNoRW5kLAogICAgICAgICAgbGlzdGVuZXJPcHRpb25zCiAgICAgICAgKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogRXZlbnQgaGFuZGxlciBmb3IgJ3RvdWNoc3RhcnQnIGV2ZW50CiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBldmVudCBUb3VjaCBldmVudAogICAgICAgKi8KICAgICAgb25Ub3VjaFN0YXJ0ID0gKGV2ZW50KSA9PiB7CiAgICAgICAgY29uc3QgeyBjbGllbnRYLCBjbGllbnRZIH0gPSBldmVudC50YXJnZXRUb3VjaGVzID8gZXZlbnQudGFyZ2V0VG91Y2hlc1swXSA6IGV2ZW50OwogICAgICAgIHRoaXMudG91Y2hTdGFydC54ID0gY2xpZW50WDsKICAgICAgICB0aGlzLnRvdWNoU3RhcnQueSA9IGNsaWVudFk7CiAgICAgICAgdGhpcy5sYXN0RGVsdGEgPSB7CiAgICAgICAgICB4OiAwLAogICAgICAgICAgeTogMAogICAgICAgIH07CiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoInNjcm9sbCIsIHsKICAgICAgICAgIGRlbHRhWDogMCwKICAgICAgICAgIGRlbHRhWTogMCwKICAgICAgICAgIGV2ZW50CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIC8qKiBFdmVudCBoYW5kbGVyIGZvciAndG91Y2htb3ZlJyBldmVudCAqLwogICAgICBvblRvdWNoTW92ZSA9IChldmVudCkgPT4gewogICAgICAgIGNvbnN0IHsgY2xpZW50WCwgY2xpZW50WSB9ID0gZXZlbnQudGFyZ2V0VG91Y2hlcyA/IGV2ZW50LnRhcmdldFRvdWNoZXNbMF0gOiBldmVudDsKICAgICAgICBjb25zdCBkZWx0YVggPSAtKGNsaWVudFggLSB0aGlzLnRvdWNoU3RhcnQueCkgKiB0aGlzLm9wdGlvbnMudG91Y2hNdWx0aXBsaWVyOwogICAgICAgIGNvbnN0IGRlbHRhWSA9IC0oY2xpZW50WSAtIHRoaXMudG91Y2hTdGFydC55KSAqIHRoaXMub3B0aW9ucy50b3VjaE11bHRpcGxpZXI7CiAgICAgICAgdGhpcy50b3VjaFN0YXJ0LnggPSBjbGllbnRYOwogICAgICAgIHRoaXMudG91Y2hTdGFydC55ID0gY2xpZW50WTsKICAgICAgICB0aGlzLmxhc3REZWx0YSA9IHsKICAgICAgICAgIHg6IGRlbHRhWCwKICAgICAgICAgIHk6IGRlbHRhWQogICAgICAgIH07CiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoInNjcm9sbCIsIHsKICAgICAgICAgIGRlbHRhWCwKICAgICAgICAgIGRlbHRhWSwKICAgICAgICAgIGV2ZW50CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIG9uVG91Y2hFbmQgPSAoZXZlbnQpID0+IHsKICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgic2Nyb2xsIiwgewogICAgICAgICAgZGVsdGFYOiB0aGlzLmxhc3REZWx0YS54LAogICAgICAgICAgZGVsdGFZOiB0aGlzLmxhc3REZWx0YS55LAogICAgICAgICAgZXZlbnQKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgLyoqIEV2ZW50IGhhbmRsZXIgZm9yICd3aGVlbCcgZXZlbnQgKi8KICAgICAgb25XaGVlbCA9IChldmVudCkgPT4gewogICAgICAgIGxldCB7IGRlbHRhWCwgZGVsdGFZLCBkZWx0YU1vZGUgfSA9IGV2ZW50OwogICAgICAgIGNvbnN0IG11bHRpcGxpZXJYID0gZGVsdGFNb2RlID09PSAxID8gTElORV9IRUlHSFQgOiBkZWx0YU1vZGUgPT09IDIgPyB0aGlzLndpbmRvdy53aWR0aCA6IDE7CiAgICAgICAgY29uc3QgbXVsdGlwbGllclkgPSBkZWx0YU1vZGUgPT09IDEgPyBMSU5FX0hFSUdIVCA6IGRlbHRhTW9kZSA9PT0gMiA/IHRoaXMud2luZG93LmhlaWdodCA6IDE7CiAgICAgICAgZGVsdGFYICo9IG11bHRpcGxpZXJYOwogICAgICAgIGRlbHRhWSAqPSBtdWx0aXBsaWVyWTsKICAgICAgICBkZWx0YVggKj0gdGhpcy5vcHRpb25zLndoZWVsTXVsdGlwbGllcjsKICAgICAgICBkZWx0YVkgKj0gdGhpcy5vcHRpb25zLndoZWVsTXVsdGlwbGllcjsKICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgic2Nyb2xsIiwgeyBkZWx0YVgsIGRlbHRhWSwgZXZlbnQgfSk7CiAgICAgIH07CiAgICAgIG9uV2luZG93UmVzaXplID0gKCkgPT4gewogICAgICAgIHRoaXMud2luZG93ID0gewogICAgICAgICAgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLAogICAgICAgICAgaGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQKICAgICAgICB9OwogICAgICB9OwogICAgfTsKICAgIGRlZmF1bHRFYXNpbmcgPSAodDkpID0+IE1hdGgubWluKDEsIDEuMDAxIC0gTWF0aC5wb3coMiwgLTEwICogdDkpKTsKICAgIExlbmlzID0gY2xhc3MgewogICAgICBfaXNTY3JvbGxpbmcgPSBmYWxzZTsKICAgICAgLy8gdHJ1ZSB3aGVuIHNjcm9sbCBpcyBhbmltYXRpbmcKICAgICAgX2lzU3RvcHBlZCA9IGZhbHNlOwogICAgICAvLyB0cnVlIGlmIHVzZXIgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIHNjcm9sbCAtIGVuYWJsZS9kaXNhYmxlIHByb2dyYW1tYXRpY2FsbHkKICAgICAgX2lzTG9ja2VkID0gZmFsc2U7CiAgICAgIC8vIHNhbWUgYXMgaXNTdG9wcGVkIGJ1dCBlbmFibGVkL2Rpc2FibGVkIHdoZW4gc2Nyb2xsIHJlYWNoZXMgdGFyZ2V0CiAgICAgIF9wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50ID0gZmFsc2U7CiAgICAgIF9yZXNldFZlbG9jaXR5VGltZW91dCA9IG51bGw7CiAgICAgIF9yYWZJZCA9IG51bGw7CiAgICAgIC8qKgogICAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgdXNlciBpcyB0b3VjaGluZyB0aGUgc2NyZWVuCiAgICAgICAqLwogICAgICBpc1RvdWNoaW5nOwogICAgICAvKioKICAgICAgICogVGhlIHRpbWUgaW4gbXMgc2luY2UgdGhlIGxlbmlzIGluc3RhbmNlIHdhcyBjcmVhdGVkCiAgICAgICAqLwogICAgICB0aW1lID0gMDsKICAgICAgLyoqCiAgICAgICAqIFVzZXIgZGF0YSB0aGF0IHdpbGwgYmUgZm9yd2FyZGVkIHRocm91Z2ggdGhlIHNjcm9sbCBldmVudAogICAgICAgKgogICAgICAgKiBAZXhhbXBsZQogICAgICAgKiBsZW5pcy5zY3JvbGxUbygxMDAsIHsKICAgICAgICogICB1c2VyRGF0YTogewogICAgICAgKiAgICAgZm9vOiAnYmFyJwogICAgICAgKiAgIH0KICAgICAgICogfSkKICAgICAgICovCiAgICAgIHVzZXJEYXRhID0ge307CiAgICAgIC8qKgogICAgICAgKiBUaGUgbGFzdCB2ZWxvY2l0eSBvZiB0aGUgc2Nyb2xsCiAgICAgICAqLwogICAgICBsYXN0VmVsb2NpdHkgPSAwOwogICAgICAvKioKICAgICAgICogVGhlIGN1cnJlbnQgdmVsb2NpdHkgb2YgdGhlIHNjcm9sbAogICAgICAgKi8KICAgICAgdmVsb2NpdHkgPSAwOwogICAgICAvKioKICAgICAgICogVGhlIGRpcmVjdGlvbiBvZiB0aGUgc2Nyb2xsCiAgICAgICAqLwogICAgICBkaXJlY3Rpb24gPSAwOwogICAgICAvKioKICAgICAgICogVGhlIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBsZW5pcyBpbnN0YW5jZQogICAgICAgKi8KICAgICAgb3B0aW9uczsKICAgICAgLyoqCiAgICAgICAqIFRoZSB0YXJnZXQgc2Nyb2xsIHZhbHVlCiAgICAgICAqLwogICAgICB0YXJnZXRTY3JvbGw7CiAgICAgIC8qKgogICAgICAgKiBUaGUgYW5pbWF0ZWQgc2Nyb2xsIHZhbHVlCiAgICAgICAqLwogICAgICBhbmltYXRlZFNjcm9sbDsKICAgICAgLy8gVGhlc2UgYXJlIGluc3RhbmNpYXRlZCBoZXJlIGFzIHRoZXkgZG9uJ3QgbmVlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvcHRpb25zCiAgICAgIGFuaW1hdGUgPSBuZXcgQW5pbWF0ZSgpOwogICAgICBlbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTsKICAgICAgLy8gVGhlc2UgYXJlIGluc3RhbmNpYXRlZCBpbiB0aGUgY29uc3RydWN0b3IgYXMgdGhleSBuZWVkIGluZm9ybWF0aW9uIGZyb20gdGhlIG9wdGlvbnMKICAgICAgZGltZW5zaW9uczsKICAgICAgLy8gVGhpcyBpcyBub3QgcHJpdmF0ZSBiZWNhdXNlIGl0J3MgdXNlZCBpbiB0aGUgU25hcCBjbGFzcwogICAgICB2aXJ0dWFsU2Nyb2xsOwogICAgICBjb25zdHJ1Y3Rvcih7CiAgICAgICAgd3JhcHBlciA9IHdpbmRvdywKICAgICAgICBjb250ZW50OiBjb250ZW50MyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwKICAgICAgICBldmVudHNUYXJnZXQgPSB3cmFwcGVyLAogICAgICAgIHNtb290aFdoZWVsID0gdHJ1ZSwKICAgICAgICBzeW5jVG91Y2ggPSBmYWxzZSwKICAgICAgICBzeW5jVG91Y2hMZXJwID0gMC4wNzUsCiAgICAgICAgdG91Y2hJbmVydGlhRXhwb25lbnQgPSAxLjcsCiAgICAgICAgZHVyYXRpb24sCiAgICAgICAgLy8gaW4gc2Vjb25kcwogICAgICAgIGVhc2luZywKICAgICAgICBsZXJwOiBsZXJwMiA9IDAuMSwKICAgICAgICBpbmZpbml0ZSA9IGZhbHNlLAogICAgICAgIG9yaWVudGF0aW9uID0gInZlcnRpY2FsIiwKICAgICAgICAvLyB2ZXJ0aWNhbCwgaG9yaXpvbnRhbAogICAgICAgIGdlc3R1cmVPcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uID09PSAiaG9yaXpvbnRhbCIgPyAiYm90aCIgOiAidmVydGljYWwiLAogICAgICAgIC8vIHZlcnRpY2FsLCBob3Jpem9udGFsLCBib3RoCiAgICAgICAgdG91Y2hNdWx0aXBsaWVyID0gMSwKICAgICAgICB3aGVlbE11bHRpcGxpZXIgPSAxLAogICAgICAgIGF1dG9SZXNpemUgPSB0cnVlLAogICAgICAgIHByZXZlbnQsCiAgICAgICAgdmlydHVhbFNjcm9sbCwKICAgICAgICBvdmVyc2Nyb2xsID0gdHJ1ZSwKICAgICAgICBhdXRvUmFmID0gZmFsc2UsCiAgICAgICAgYW5jaG9ycyA9IGZhbHNlLAogICAgICAgIGF1dG9Ub2dnbGUgPSBmYWxzZSwKICAgICAgICAvLyBodHRwczovL2Nhbml1c2UuY29tLz9zZWFyY2g9dHJhbnNpdGlvbi1iZWhhdmlvcgogICAgICAgIGFsbG93TmVzdGVkU2Nyb2xsID0gZmFsc2UsCiAgICAgICAgLy8gQHRzLWlnbm9yZTogdGhpcyB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZQogICAgICAgIF9fZXhwZXJpbWVudGFsX19uYWl2ZURpbWVuc2lvbnMgPSBmYWxzZSwKICAgICAgICBuYWl2ZURpbWVuc2lvbnMgPSBfX2V4cGVyaW1lbnRhbF9fbmFpdmVEaW1lbnNpb25zLAogICAgICAgIHN0b3BJbmVydGlhT25OYXZpZ2F0ZSA9IGZhbHNlCiAgICAgIH0gPSB7fSkgewogICAgICAgIHdpbmRvdy5sZW5pc1ZlcnNpb24gPSB2ZXJzaW9uOwogICAgICAgIGlmICghd3JhcHBlciB8fCB3cmFwcGVyID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHsKICAgICAgICAgIHdyYXBwZXIgPSB3aW5kb3c7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgZHVyYXRpb24gPT09ICJudW1iZXIiICYmIHR5cGVvZiBlYXNpbmcgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGVhc2luZyA9IGRlZmF1bHRFYXNpbmc7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZWFzaW5nID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBkdXJhdGlvbiAhPT0gIm51bWJlciIpIHsKICAgICAgICAgIGR1cmF0aW9uID0gMTsKICAgICAgICB9CiAgICAgICAgdGhpcy5vcHRpb25zID0gewogICAgICAgICAgd3JhcHBlciwKICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICAgICAgZXZlbnRzVGFyZ2V0LAogICAgICAgICAgc21vb3RoV2hlZWwsCiAgICAgICAgICBzeW5jVG91Y2gsCiAgICAgICAgICBzeW5jVG91Y2hMZXJwLAogICAgICAgICAgdG91Y2hJbmVydGlhRXhwb25lbnQsCiAgICAgICAgICBkdXJhdGlvbiwKICAgICAgICAgIGVhc2luZywKICAgICAgICAgIGxlcnA6IGxlcnAyLAogICAgICAgICAgaW5maW5pdGUsCiAgICAgICAgICBnZXN0dXJlT3JpZW50YXRpb24sCiAgICAgICAgICBvcmllbnRhdGlvbiwKICAgICAgICAgIHRvdWNoTXVsdGlwbGllciwKICAgICAgICAgIHdoZWVsTXVsdGlwbGllciwKICAgICAgICAgIGF1dG9SZXNpemUsCiAgICAgICAgICBwcmV2ZW50LAogICAgICAgICAgdmlydHVhbFNjcm9sbCwKICAgICAgICAgIG92ZXJzY3JvbGwsCiAgICAgICAgICBhdXRvUmFmLAogICAgICAgICAgYW5jaG9ycywKICAgICAgICAgIGF1dG9Ub2dnbGUsCiAgICAgICAgICBhbGxvd05lc3RlZFNjcm9sbCwKICAgICAgICAgIG5haXZlRGltZW5zaW9ucywKICAgICAgICAgIHN0b3BJbmVydGlhT25OYXZpZ2F0ZQogICAgICAgIH07CiAgICAgICAgdGhpcy5kaW1lbnNpb25zID0gbmV3IERpbWVuc2lvbnMod3JhcHBlciwgY29udGVudDMsIHsgYXV0b1Jlc2l6ZSB9KTsKICAgICAgICB0aGlzLnVwZGF0ZUNsYXNzTmFtZSgpOwogICAgICAgIHRoaXMudGFyZ2V0U2Nyb2xsID0gdGhpcy5hbmltYXRlZFNjcm9sbCA9IHRoaXMuYWN0dWFsU2Nyb2xsOwogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMub25OYXRpdmVTY3JvbGwsIGZhbHNlKTsKICAgICAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGxlbmQiLCB0aGlzLm9uU2Nyb2xsRW5kLCB7CiAgICAgICAgICBjYXB0dXJlOiB0cnVlCiAgICAgICAgfSk7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hbmNob3JzIHx8IHRoaXMub3B0aW9ucy5zdG9wSW5lcnRpYU9uTmF2aWdhdGUpIHsKICAgICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoCiAgICAgICAgICAgICJjbGljayIsCiAgICAgICAgICAgIHRoaXMub25DbGljaywKICAgICAgICAgICAgZmFsc2UKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoCiAgICAgICAgICAicG9pbnRlcmRvd24iLAogICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duLAogICAgICAgICAgZmFsc2UKICAgICAgICApOwogICAgICAgIHRoaXMudmlydHVhbFNjcm9sbCA9IG5ldyBWaXJ0dWFsU2Nyb2xsKGV2ZW50c1RhcmdldCwgewogICAgICAgICAgdG91Y2hNdWx0aXBsaWVyLAogICAgICAgICAgd2hlZWxNdWx0aXBsaWVyCiAgICAgICAgfSk7CiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsLm9uKCJzY3JvbGwiLCB0aGlzLm9uVmlydHVhbFNjcm9sbCk7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvVG9nZ2xlKSB7CiAgICAgICAgICB0aGlzLmNoZWNrT3ZlcmZsb3coKTsKICAgICAgICAgIHRoaXMucm9vdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsIHRoaXMub25UcmFuc2l0aW9uRW5kLCB7CiAgICAgICAgICAgIHBhc3NpdmU6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9SYWYpIHsKICAgICAgICAgIHRoaXMuX3JhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmFmKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIERlc3Ryb3kgdGhlIGxlbmlzIGluc3RhbmNlLCByZW1vdmUgYWxsIGV2ZW50IGxpc3RlbmVycyBhbmQgY2xlYW4gdXAgdGhlIGNsYXNzIG5hbWUKICAgICAgICovCiAgICAgIGRlc3Ryb3koKSB7CiAgICAgICAgdGhpcy5lbWl0dGVyLmRlc3Ryb3koKTsKICAgICAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5yZW1vdmVFdmVudExpc3RlbmVyKAogICAgICAgICAgInNjcm9sbCIsCiAgICAgICAgICB0aGlzLm9uTmF0aXZlU2Nyb2xsLAogICAgICAgICAgZmFsc2UKICAgICAgICApOwogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbGVuZCIsIHRoaXMub25TY3JvbGxFbmQsIHsKICAgICAgICAgIGNhcHR1cmU6IHRydWUKICAgICAgICB9KTsKICAgICAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5yZW1vdmVFdmVudExpc3RlbmVyKAogICAgICAgICAgInBvaW50ZXJkb3duIiwKICAgICAgICAgIHRoaXMub25Qb2ludGVyRG93biwKICAgICAgICAgIGZhbHNlCiAgICAgICAgKTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFuY2hvcnMgfHwgdGhpcy5vcHRpb25zLnN0b3BJbmVydGlhT25OYXZpZ2F0ZSkgewogICAgICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICAgImNsaWNrIiwKICAgICAgICAgICAgdGhpcy5vbkNsaWNrLAogICAgICAgICAgICBmYWxzZQogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsLmRlc3Ryb3koKTsKICAgICAgICB0aGlzLmRpbWVuc2lvbnMuZGVzdHJveSgpOwogICAgICAgIHRoaXMuY2xlYW5VcENsYXNzTmFtZSgpOwogICAgICAgIGlmICh0aGlzLl9yYWZJZCkgewogICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmSWQpOwogICAgICAgIH0KICAgICAgfQogICAgICBvbihldmVudCwgY2FsbGJhY2spIHsKICAgICAgICByZXR1cm4gdGhpcy5lbWl0dGVyLm9uKGV2ZW50LCBjYWxsYmFjayk7CiAgICAgIH0KICAgICAgb2ZmKGV2ZW50LCBjYWxsYmFjaykgewogICAgICAgIHJldHVybiB0aGlzLmVtaXR0ZXIub2ZmKGV2ZW50LCBjYWxsYmFjayk7CiAgICAgIH0KICAgICAgb25TY3JvbGxFbmQgPSAoZTExKSA9PiB7CiAgICAgICAgaWYgKCEoZTExIGluc3RhbmNlb2YgQ3VzdG9tRXZlbnQpKSB7CiAgICAgICAgICBpZiAodGhpcy5pc1Njcm9sbGluZyA9PT0gInNtb290aCIgfHwgdGhpcy5pc1Njcm9sbGluZyA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgZGlzcGF0Y2hTY3JvbGxlbmRFdmVudCA9ICgpID0+IHsKICAgICAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5kaXNwYXRjaEV2ZW50KAogICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCJzY3JvbGxlbmQiLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRoaXMub3B0aW9ucy53cmFwcGVyID09PSB3aW5kb3csCiAgICAgICAgICAgIC8vIGNhbmNlbGFibGU6IGZhbHNlLAogICAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgICBsZW5pc1Njcm9sbEVuZDogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgICB9KQogICAgICAgICk7CiAgICAgIH07CiAgICAgIGdldCBvdmVyZmxvdygpIHsKICAgICAgICBjb25zdCBwcm9wZXJ0eTEzID0gdGhpcy5pc0hvcml6b250YWwgPyAib3ZlcmZsb3cteCIgOiAib3ZlcmZsb3cteSI7CiAgICAgICAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUodGhpcy5yb290RWxlbWVudClbcHJvcGVydHkxM107CiAgICAgIH0KICAgICAgY2hlY2tPdmVyZmxvdygpIHsKICAgICAgICBpZiAoWyJoaWRkZW4iLCAiY2xpcCJdLmluY2x1ZGVzKHRoaXMub3ZlcmZsb3cpKSB7CiAgICAgICAgICB0aGlzLmludGVybmFsU3RvcCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmludGVybmFsU3RhcnQoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgb25UcmFuc2l0aW9uRW5kID0gKGV2ZW50KSA9PiB7CiAgICAgICAgaWYgKGV2ZW50LnByb3BlcnR5TmFtZS5pbmNsdWRlcygib3ZlcmZsb3ciKSkgewogICAgICAgICAgdGhpcy5jaGVja092ZXJmbG93KCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBzZXRTY3JvbGwoc2Nyb2xsKSB7CiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKSB7CiAgICAgICAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5zY3JvbGxUbyh7IGxlZnQ6IHNjcm9sbCwgYmVoYXZpb3I6ICJpbnN0YW50IiB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIuc2Nyb2xsVG8oeyB0b3A6IHNjcm9sbCwgYmVoYXZpb3I6ICJpbnN0YW50IiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgb25DbGljayA9IChldmVudCkgPT4gewogICAgICAgIGNvbnN0IHBhdGgyID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7CiAgICAgICAgY29uc3QgYW5jaG9yRWxlbWVudHMgPSBwYXRoMi5maWx0ZXIoCiAgICAgICAgICAobm9kZTIpID0+IG5vZGUyIGluc3RhbmNlb2YgSFRNTEFuY2hvckVsZW1lbnQgJiYgbm9kZTIuZ2V0QXR0cmlidXRlKCJocmVmIikKICAgICAgICApOwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYW5jaG9ycykgewogICAgICAgICAgY29uc3QgYW5jaG9yID0gYW5jaG9yRWxlbWVudHMuZmluZCgKICAgICAgICAgICAgKG5vZGUyKSA9PiBub2RlMi5nZXRBdHRyaWJ1dGUoImhyZWYiKT8uaW5jbHVkZXMoIiMiKQogICAgICAgICAgKTsKICAgICAgICAgIGlmIChhbmNob3IpIHsKICAgICAgICAgICAgY29uc3QgaHJlZiA9IGFuY2hvci5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICAgICAgICAgICAgaWYgKGhyZWYpIHsKICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdHlwZW9mIHRoaXMub3B0aW9ucy5hbmNob3JzID09PSAib2JqZWN0IiAmJiB0aGlzLm9wdGlvbnMuYW5jaG9ycyA/IHRoaXMub3B0aW9ucy5hbmNob3JzIDogdm9pZCAwOwogICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGAjJHtocmVmLnNwbGl0KCIjIilbMV19YDsKICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKHRhcmdldCwgb3B0aW9ucyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdG9wSW5lcnRpYU9uTmF2aWdhdGUpIHsKICAgICAgICAgIGNvbnN0IGludGVybmFsTGluayA9IGFuY2hvckVsZW1lbnRzLmZpbmQoCiAgICAgICAgICAgIChub2RlMikgPT4gbm9kZTIuaG9zdCA9PT0gd2luZG93LmxvY2F0aW9uLmhvc3QKICAgICAgICAgICk7CiAgICAgICAgICBpZiAoaW50ZXJuYWxMaW5rKSB7CiAgICAgICAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICAgIG9uUG9pbnRlckRvd24gPSAoZXZlbnQpID0+IHsKICAgICAgICBpZiAoZXZlbnQuYnV0dG9uID09PSAxKSB7CiAgICAgICAgICB0aGlzLnJlc2V0KCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBvblZpcnR1YWxTY3JvbGwgPSAoZGF0YSkgPT4gewogICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLnZpcnR1YWxTY3JvbGwgPT09ICJmdW5jdGlvbiIgJiYgdGhpcy5vcHRpb25zLnZpcnR1YWxTY3JvbGwoZGF0YSkgPT09IGZhbHNlKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IHsgZGVsdGFYLCBkZWx0YVksIGV2ZW50IH0gPSBkYXRhOwogICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCJ2aXJ0dWFsLXNjcm9sbCIsIHsgZGVsdGFYLCBkZWx0YVksIGV2ZW50IH0pOwogICAgICAgIGlmIChldmVudC5jdHJsS2V5KSByZXR1cm47CiAgICAgICAgaWYgKGV2ZW50LmxlbmlzU3RvcFByb3BhZ2F0aW9uKSByZXR1cm47CiAgICAgICAgY29uc3QgaXNUb3VjaCA9IGV2ZW50LnR5cGUuaW5jbHVkZXMoInRvdWNoIik7CiAgICAgICAgY29uc3QgaXNXaGVlbCA9IGV2ZW50LnR5cGUuaW5jbHVkZXMoIndoZWVsIik7CiAgICAgICAgdGhpcy5pc1RvdWNoaW5nID0gZXZlbnQudHlwZSA9PT0gInRvdWNoc3RhcnQiIHx8IGV2ZW50LnR5cGUgPT09ICJ0b3VjaG1vdmUiOwogICAgICAgIGNvbnN0IGlzQ2xpY2tPclRhcCA9IGRlbHRhWCA9PT0gMCAmJiBkZWx0YVkgPT09IDA7CiAgICAgICAgY29uc3QgaXNUYXBUb1N0b3AgPSB0aGlzLm9wdGlvbnMuc3luY1RvdWNoICYmIGlzVG91Y2ggJiYgZXZlbnQudHlwZSA9PT0gInRvdWNoc3RhcnQiICYmIGlzQ2xpY2tPclRhcCAmJiAhdGhpcy5pc1N0b3BwZWQgJiYgIXRoaXMuaXNMb2NrZWQ7CiAgICAgICAgaWYgKGlzVGFwVG9TdG9wKSB7CiAgICAgICAgICB0aGlzLnJlc2V0KCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IGlzVW5rbm93bkdlc3R1cmUgPSB0aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uID09PSAidmVydGljYWwiICYmIGRlbHRhWSA9PT0gMCB8fCB0aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uID09PSAiaG9yaXpvbnRhbCIgJiYgZGVsdGFYID09PSAwOwogICAgICAgIGlmIChpc0NsaWNrT3JUYXAgfHwgaXNVbmtub3duR2VzdHVyZSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsZXQgY29tcG9zZWRQYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7CiAgICAgICAgY29tcG9zZWRQYXRoID0gY29tcG9zZWRQYXRoLnNsaWNlKDAsIGNvbXBvc2VkUGF0aC5pbmRleE9mKHRoaXMucm9vdEVsZW1lbnQpKTsKICAgICAgICBjb25zdCBwcmV2ZW50ID0gdGhpcy5vcHRpb25zLnByZXZlbnQ7CiAgICAgICAgaWYgKCEhY29tcG9zZWRQYXRoLmZpbmQoCiAgICAgICAgICAobm9kZTIpID0+IG5vZGUyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgKHR5cGVvZiBwcmV2ZW50ID09PSAiZnVuY3Rpb24iICYmIHByZXZlbnQ/Lihub2RlMikgfHwgbm9kZTIuaGFzQXR0cmlidXRlPy4oImRhdGEtbGVuaXMtcHJldmVudCIpIHx8IGlzVG91Y2ggJiYgbm9kZTIuaGFzQXR0cmlidXRlPy4oImRhdGEtbGVuaXMtcHJldmVudC10b3VjaCIpIHx8IGlzV2hlZWwgJiYgbm9kZTIuaGFzQXR0cmlidXRlPy4oImRhdGEtbGVuaXMtcHJldmVudC13aGVlbCIpIHx8IHRoaXMub3B0aW9ucy5hbGxvd05lc3RlZFNjcm9sbCAmJiB0aGlzLmNoZWNrTmVzdGVkU2Nyb2xsKG5vZGUyLCB7IGRlbHRhWCwgZGVsdGFZIH0pKQogICAgICAgICkpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkIHx8IHRoaXMuaXNMb2NrZWQpIHsKICAgICAgICAgIGlmIChldmVudC5jYW5jZWxhYmxlKSB7CiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IGlzU21vb3RoID0gdGhpcy5vcHRpb25zLnN5bmNUb3VjaCAmJiBpc1RvdWNoIHx8IHRoaXMub3B0aW9ucy5zbW9vdGhXaGVlbCAmJiBpc1doZWVsOwogICAgICAgIGlmICghaXNTbW9vdGgpIHsKICAgICAgICAgIHRoaXMuaXNTY3JvbGxpbmcgPSAibmF0aXZlIjsKICAgICAgICAgIHRoaXMuYW5pbWF0ZS5zdG9wKCk7CiAgICAgICAgICBldmVudC5sZW5pc1N0b3BQcm9wYWdhdGlvbiA9IHRydWU7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGxldCBkZWx0YSA9IGRlbHRhWTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmdlc3R1cmVPcmllbnRhdGlvbiA9PT0gImJvdGgiKSB7CiAgICAgICAgICBkZWx0YSA9IE1hdGguYWJzKGRlbHRhWSkgPiBNYXRoLmFicyhkZWx0YVgpID8gZGVsdGFZIDogZGVsdGFYOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmdlc3R1cmVPcmllbnRhdGlvbiA9PT0gImhvcml6b250YWwiKSB7CiAgICAgICAgICBkZWx0YSA9IGRlbHRhWDsKICAgICAgICB9CiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMub3ZlcnNjcm9sbCB8fCB0aGlzLm9wdGlvbnMuaW5maW5pdGUgfHwgdGhpcy5vcHRpb25zLndyYXBwZXIgIT09IHdpbmRvdyAmJiB0aGlzLmxpbWl0ID4gMCAmJiAodGhpcy5hbmltYXRlZFNjcm9sbCA+IDAgJiYgdGhpcy5hbmltYXRlZFNjcm9sbCA8IHRoaXMubGltaXQgfHwgdGhpcy5hbmltYXRlZFNjcm9sbCA9PT0gMCAmJiBkZWx0YVkgPiAwIHx8IHRoaXMuYW5pbWF0ZWRTY3JvbGwgPT09IHRoaXMubGltaXQgJiYgZGVsdGFZIDwgMCkpIHsKICAgICAgICAgIGV2ZW50LmxlbmlzU3RvcFByb3BhZ2F0aW9uID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGV2ZW50LmNhbmNlbGFibGUpIHsKICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGlzU3luY1RvdWNoID0gaXNUb3VjaCAmJiB0aGlzLm9wdGlvbnMuc3luY1RvdWNoOwogICAgICAgIGNvbnN0IGlzVG91Y2hFbmQgPSBpc1RvdWNoICYmIGV2ZW50LnR5cGUgPT09ICJ0b3VjaGVuZCI7CiAgICAgICAgY29uc3QgaGFzVG91Y2hJbmVydGlhID0gaXNUb3VjaEVuZDsKICAgICAgICBpZiAoaGFzVG91Y2hJbmVydGlhKSB7CiAgICAgICAgICBkZWx0YSA9IE1hdGguc2lnbih0aGlzLnZlbG9jaXR5KSAqIE1hdGgucG93KE1hdGguYWJzKHRoaXMudmVsb2NpdHkpLCB0aGlzLm9wdGlvbnMudG91Y2hJbmVydGlhRXhwb25lbnQpOwogICAgICAgIH0KICAgICAgICB0aGlzLnNjcm9sbFRvKHRoaXMudGFyZ2V0U2Nyb2xsICsgZGVsdGEsIHsKICAgICAgICAgIHByb2dyYW1tYXRpYzogZmFsc2UsCiAgICAgICAgICAuLi5pc1N5bmNUb3VjaCA/IHsKICAgICAgICAgICAgbGVycDogaGFzVG91Y2hJbmVydGlhID8gdGhpcy5vcHRpb25zLnN5bmNUb3VjaExlcnAgOiAxCiAgICAgICAgICB9IDogewogICAgICAgICAgICBsZXJwOiB0aGlzLm9wdGlvbnMubGVycCwKICAgICAgICAgICAgZHVyYXRpb246IHRoaXMub3B0aW9ucy5kdXJhdGlvbiwKICAgICAgICAgICAgZWFzaW5nOiB0aGlzLm9wdGlvbnMuZWFzaW5nCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIC8qKgogICAgICAgKiBGb3JjZSBsZW5pcyB0byByZWNhbGN1bGF0ZSB0aGUgZGltZW5zaW9ucwogICAgICAgKi8KICAgICAgcmVzaXplKCkgewogICAgICAgIHRoaXMuZGltZW5zaW9ucy5yZXNpemUoKTsKICAgICAgICB0aGlzLmFuaW1hdGVkU2Nyb2xsID0gdGhpcy50YXJnZXRTY3JvbGwgPSB0aGlzLmFjdHVhbFNjcm9sbDsKICAgICAgICB0aGlzLmVtaXQoKTsKICAgICAgfQogICAgICBlbWl0KCkgewogICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCJzY3JvbGwiLCB0aGlzKTsKICAgICAgfQogICAgICBvbk5hdGl2ZVNjcm9sbCA9ICgpID0+IHsKICAgICAgICBpZiAodGhpcy5fcmVzZXRWZWxvY2l0eVRpbWVvdXQgIT09IG51bGwpIHsKICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNldFZlbG9jaXR5VGltZW91dCk7CiAgICAgICAgICB0aGlzLl9yZXNldFZlbG9jaXR5VGltZW91dCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLl9wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50KSB7CiAgICAgICAgICB0aGlzLl9wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50ID0gZmFsc2U7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsaW5nID09PSBmYWxzZSB8fCB0aGlzLmlzU2Nyb2xsaW5nID09PSAibmF0aXZlIikgewogICAgICAgICAgY29uc3QgbGFzdFNjcm9sbCA9IHRoaXMuYW5pbWF0ZWRTY3JvbGw7CiAgICAgICAgICB0aGlzLmFuaW1hdGVkU2Nyb2xsID0gdGhpcy50YXJnZXRTY3JvbGwgPSB0aGlzLmFjdHVhbFNjcm9sbDsKICAgICAgICAgIHRoaXMubGFzdFZlbG9jaXR5ID0gdGhpcy52ZWxvY2l0eTsKICAgICAgICAgIHRoaXMudmVsb2NpdHkgPSB0aGlzLmFuaW1hdGVkU2Nyb2xsIC0gbGFzdFNjcm9sbDsKICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gTWF0aC5zaWduKAogICAgICAgICAgICB0aGlzLmFuaW1hdGVkU2Nyb2xsIC0gbGFzdFNjcm9sbAogICAgICAgICAgKTsKICAgICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHsKICAgICAgICAgICAgdGhpcy5pc1Njcm9sbGluZyA9ICJuYXRpdmUiOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5lbWl0KCk7CiAgICAgICAgICBpZiAodGhpcy52ZWxvY2l0eSAhPT0gMCkgewogICAgICAgICAgICB0aGlzLl9yZXNldFZlbG9jaXR5VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIHRoaXMubGFzdFZlbG9jaXR5ID0gdGhpcy52ZWxvY2l0eTsKICAgICAgICAgICAgICB0aGlzLnZlbG9jaXR5ID0gMDsKICAgICAgICAgICAgICB0aGlzLmlzU2Nyb2xsaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgdGhpcy5lbWl0KCk7CiAgICAgICAgICAgIH0sIDQwMCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgICByZXNldCgpIHsKICAgICAgICB0aGlzLmlzTG9ja2VkID0gZmFsc2U7CiAgICAgICAgdGhpcy5pc1Njcm9sbGluZyA9IGZhbHNlOwogICAgICAgIHRoaXMuYW5pbWF0ZWRTY3JvbGwgPSB0aGlzLnRhcmdldFNjcm9sbCA9IHRoaXMuYWN0dWFsU2Nyb2xsOwogICAgICAgIHRoaXMubGFzdFZlbG9jaXR5ID0gdGhpcy52ZWxvY2l0eSA9IDA7CiAgICAgICAgdGhpcy5hbmltYXRlLnN0b3AoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU3RhcnQgbGVuaXMgc2Nyb2xsIGFmdGVyIGl0IGhhcyBiZWVuIHN0b3BwZWQKICAgICAgICovCiAgICAgIHN0YXJ0KCkgewogICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHJldHVybjsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Ub2dnbGUpIHsKICAgICAgICAgIHRoaXMucm9vdEVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoIm92ZXJmbG93Iik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuaW50ZXJuYWxTdGFydCgpOwogICAgICB9CiAgICAgIGludGVybmFsU3RhcnQoKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzU3RvcHBlZCkgcmV0dXJuOwogICAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IGZhbHNlOwogICAgICAgIHRoaXMuZW1pdCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTdG9wIGxlbmlzIHNjcm9sbAogICAgICAgKi8KICAgICAgc3RvcCgpIHsKICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHJldHVybjsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Ub2dnbGUpIHsKICAgICAgICAgIHRoaXMucm9vdEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoIm92ZXJmbG93IiwgImNsaXAiKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5pbnRlcm5hbFN0b3AoKTsKICAgICAgfQogICAgICBpbnRlcm5hbFN0b3AoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSByZXR1cm47CiAgICAgICAgdGhpcy5yZXNldCgpOwogICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTsKICAgICAgICB0aGlzLmVtaXQoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVxdWVzdEFuaW1hdGlvbkZyYW1lIGZvciBsZW5pcwogICAgICAgKgogICAgICAgKiBAcGFyYW0gdGltZSBUaGUgdGltZSBpbiBtcyBmcm9tIGFuIGV4dGVybmFsIGNsb2NrIGxpa2UgYHJlcXVlc3RBbmltYXRpb25GcmFtZWAgb3IgVGVtcHVzCiAgICAgICAqLwogICAgICByYWYgPSAodGltZSkgPT4gewogICAgICAgIGNvbnN0IGRlbHRhVGltZSA9IHRpbWUgLSAodGhpcy50aW1lIHx8IHRpbWUpOwogICAgICAgIHRoaXMudGltZSA9IHRpbWU7CiAgICAgICAgdGhpcy5hbmltYXRlLmFkdmFuY2UoZGVsdGFUaW1lICogMWUtMyk7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUmFmKSB7CiAgICAgICAgICB0aGlzLl9yYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnJhZik7CiAgICAgICAgfQogICAgICB9OwogICAgICAvKioKICAgICAgICogU2Nyb2xsIHRvIGEgdGFyZ2V0IHZhbHVlCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCB2YWx1ZSB0byBzY3JvbGwgdG8KICAgICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSBzY3JvbGwKICAgICAgICoKICAgICAgICogQGV4YW1wbGUKICAgICAgICogbGVuaXMuc2Nyb2xsVG8oMTAwLCB7CiAgICAgICAqICAgb2Zmc2V0OiAxMDAsCiAgICAgICAqICAgZHVyYXRpb246IDEsCiAgICAgICAqICAgZWFzaW5nOiAodCkgPT4gMSAtIE1hdGguY29zKCh0ICogTWF0aC5QSSkgLyAyKSwKICAgICAgICogICBsZXJwOiAwLjEsCiAgICAgICAqICAgb25TdGFydDogKCkgPT4gewogICAgICAgKiAgICAgY29uc29sZS5sb2coJ29uU3RhcnQnKQogICAgICAgKiAgIH0sCiAgICAgICAqICAgb25Db21wbGV0ZTogKCkgPT4gewogICAgICAgKiAgICAgY29uc29sZS5sb2coJ29uQ29tcGxldGUnKQogICAgICAgKiAgIH0sCiAgICAgICAqIH0pCiAgICAgICAqLwogICAgICBzY3JvbGxUbyh0YXJnZXQsIHsKICAgICAgICBvZmZzZXQgPSAwLAogICAgICAgIGltbWVkaWF0ZSA9IGZhbHNlLAogICAgICAgIGxvY2sgPSBmYWxzZSwKICAgICAgICBwcm9ncmFtbWF0aWMgPSB0cnVlLAogICAgICAgIC8vIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhlIGNsYXNzCiAgICAgICAgbGVycDogbGVycDIgPSBwcm9ncmFtbWF0aWMgPyB0aGlzLm9wdGlvbnMubGVycCA6IHZvaWQgMCwKICAgICAgICBkdXJhdGlvbiA9IHByb2dyYW1tYXRpYyA/IHRoaXMub3B0aW9ucy5kdXJhdGlvbiA6IHZvaWQgMCwKICAgICAgICBlYXNpbmcgPSBwcm9ncmFtbWF0aWMgPyB0aGlzLm9wdGlvbnMuZWFzaW5nIDogdm9pZCAwLAogICAgICAgIG9uU3RhcnQsCiAgICAgICAgb25Db21wbGV0ZSwKICAgICAgICBmb3JjZSA9IGZhbHNlLAogICAgICAgIC8vIHNjcm9sbCBldmVuIGlmIHN0b3BwZWQKICAgICAgICB1c2VyRGF0YQogICAgICB9ID0ge30pIHsKICAgICAgICBpZiAoKHRoaXMuaXNTdG9wcGVkIHx8IHRoaXMuaXNMb2NrZWQpICYmICFmb3JjZSkgcmV0dXJuOwogICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAic3RyaW5nIiAmJiBbInRvcCIsICJsZWZ0IiwgInN0YXJ0IiwgIiMiXS5pbmNsdWRlcyh0YXJnZXQpKSB7CiAgICAgICAgICB0YXJnZXQgPSAwOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRhcmdldCA9PT0gInN0cmluZyIgJiYgWyJib3R0b20iLCAicmlnaHQiLCAiZW5kIl0uaW5jbHVkZXModGFyZ2V0KSkgewogICAgICAgICAgdGFyZ2V0ID0gdGhpcy5saW1pdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGV0IG5vZGUyOwogICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIG5vZGUyID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpOwogICAgICAgICAgICBpZiAoIW5vZGUyKSB7CiAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gIiN0b3AiKSB7CiAgICAgICAgICAgICAgICB0YXJnZXQgPSAwOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oIkxlbmlzOiBUYXJnZXQgbm90IGZvdW5kIiwgdGFyZ2V0KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgdGFyZ2V0Py5ub2RlVHlwZSkgewogICAgICAgICAgICBub2RlMiA9IHRhcmdldDsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChub2RlMikgewogICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLndyYXBwZXIgIT09IHdpbmRvdykgewogICAgICAgICAgICAgIGNvbnN0IHdyYXBwZXJSZWN0ID0gdGhpcy5yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgICBvZmZzZXQgLT0gdGhpcy5pc0hvcml6b250YWwgPyB3cmFwcGVyUmVjdC5sZWZ0IDogd3JhcHBlclJlY3QudG9wOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBub2RlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgdGFyZ2V0ID0gKHRoaXMuaXNIb3Jpem9udGFsID8gcmVjdC5sZWZ0IDogcmVjdC50b3ApICsgdGhpcy5hbmltYXRlZFNjcm9sbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICJudW1iZXIiKSByZXR1cm47CiAgICAgICAgdGFyZ2V0ICs9IG9mZnNldDsKICAgICAgICB0YXJnZXQgPSBNYXRoLnJvdW5kKHRhcmdldCk7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbmZpbml0ZSkgewogICAgICAgICAgaWYgKHByb2dyYW1tYXRpYykgewogICAgICAgICAgICB0aGlzLnRhcmdldFNjcm9sbCA9IHRoaXMuYW5pbWF0ZWRTY3JvbGwgPSB0aGlzLnNjcm9sbDsKICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSB0YXJnZXQgLSB0aGlzLmFuaW1hdGVkU2Nyb2xsOwogICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiB0aGlzLmxpbWl0IC8gMikgewogICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldCAtIHRoaXMubGltaXQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlzdGFuY2UgPCAtdGhpcy5saW1pdCAvIDIpIHsKICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQgKyB0aGlzLmxpbWl0OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRhcmdldCA9IGNsYW1wMigwLCB0YXJnZXQsIHRoaXMubGltaXQpOwogICAgICAgIH0KICAgICAgICBpZiAodGFyZ2V0ID09PSB0aGlzLnRhcmdldFNjcm9sbCkgewogICAgICAgICAgb25TdGFydD8uKHRoaXMpOwogICAgICAgICAgb25Db21wbGV0ZT8uKHRoaXMpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLnVzZXJEYXRhID0gdXNlckRhdGEgPz8ge307CiAgICAgICAgaWYgKGltbWVkaWF0ZSkgewogICAgICAgICAgdGhpcy5hbmltYXRlZFNjcm9sbCA9IHRoaXMudGFyZ2V0U2Nyb2xsID0gdGFyZ2V0OwogICAgICAgICAgdGhpcy5zZXRTY3JvbGwodGhpcy5zY3JvbGwpOwogICAgICAgICAgdGhpcy5yZXNldCgpOwogICAgICAgICAgdGhpcy5wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50KCk7CiAgICAgICAgICB0aGlzLmVtaXQoKTsKICAgICAgICAgIG9uQ29tcGxldGU/Lih0aGlzKTsKICAgICAgICAgIHRoaXMudXNlckRhdGEgPSB7fTsKICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTY3JvbGxlbmRFdmVudCgpOwogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICghcHJvZ3JhbW1hdGljKSB7CiAgICAgICAgICB0aGlzLnRhcmdldFNjcm9sbCA9IHRhcmdldDsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBkdXJhdGlvbiA9PT0gIm51bWJlciIgJiYgdHlwZW9mIGVhc2luZyAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgZWFzaW5nID0gZGVmYXVsdEVhc2luZzsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlYXNpbmcgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIGR1cmF0aW9uICE9PSAibnVtYmVyIikgewogICAgICAgICAgZHVyYXRpb24gPSAxOwogICAgICAgIH0KICAgICAgICB0aGlzLmFuaW1hdGUuZnJvbVRvKHRoaXMuYW5pbWF0ZWRTY3JvbGwsIHRhcmdldCwgewogICAgICAgICAgZHVyYXRpb24sCiAgICAgICAgICBlYXNpbmcsCiAgICAgICAgICBsZXJwOiBsZXJwMiwKICAgICAgICAgIG9uU3RhcnQ6ICgpID0+IHsKICAgICAgICAgICAgaWYgKGxvY2spIHRoaXMuaXNMb2NrZWQgPSB0cnVlOwogICAgICAgICAgICB0aGlzLmlzU2Nyb2xsaW5nID0gInNtb290aCI7CiAgICAgICAgICAgIG9uU3RhcnQ/Lih0aGlzKTsKICAgICAgICAgIH0sCiAgICAgICAgICBvblVwZGF0ZTogKHZhbHVlMiwgY29tcGxldGVkKSA9PiB7CiAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxpbmcgPSAic21vb3RoIjsKICAgICAgICAgICAgdGhpcy5sYXN0VmVsb2NpdHkgPSB0aGlzLnZlbG9jaXR5OwogICAgICAgICAgICB0aGlzLnZlbG9jaXR5ID0gdmFsdWUyIC0gdGhpcy5hbmltYXRlZFNjcm9sbDsKICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBNYXRoLnNpZ24odGhpcy52ZWxvY2l0eSk7CiAgICAgICAgICAgIHRoaXMuYW5pbWF0ZWRTY3JvbGwgPSB2YWx1ZTI7CiAgICAgICAgICAgIHRoaXMuc2V0U2Nyb2xsKHRoaXMuc2Nyb2xsKTsKICAgICAgICAgICAgaWYgKHByb2dyYW1tYXRpYykgewogICAgICAgICAgICAgIHRoaXMudGFyZ2V0U2Nyb2xsID0gdmFsdWUyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghY29tcGxldGVkKSB0aGlzLmVtaXQoKTsKICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCkgewogICAgICAgICAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgICAgICAgICB0aGlzLmVtaXQoKTsKICAgICAgICAgICAgICBvbkNvbXBsZXRlPy4odGhpcyk7CiAgICAgICAgICAgICAgdGhpcy51c2VyRGF0YSA9IHt9OwogICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoU2Nyb2xsZW5kRXZlbnQoKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB0aGlzLnByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQoKSB7CiAgICAgICAgdGhpcy5fcHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudCA9IHRydWU7CiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgIHRoaXMuX3ByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQgPSBmYWxzZTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBjaGVja05lc3RlZFNjcm9sbChub2RlMiwgeyBkZWx0YVgsIGRlbHRhWSB9KSB7CiAgICAgICAgY29uc3QgdGltZSA9IERhdGUubm93KCk7CiAgICAgICAgY29uc3QgY2FjaGUgPSBub2RlMi5fbGVuaXMgPz89IHt9OwogICAgICAgIGxldCBoYXNPdmVyZmxvd1gsIGhhc092ZXJmbG93WSwgaXNTY3JvbGxhYmxlWCwgaXNTY3JvbGxhYmxlWSwgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCwgY2xpZW50V2lkdGgsIGNsaWVudEhlaWdodDsKICAgICAgICBjb25zdCBnZXN0dXJlT3JpZW50YXRpb24gPSB0aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uOwogICAgICAgIGlmICh0aW1lIC0gKGNhY2hlLnRpbWUgPz8gMCkgPiAyZTMpIHsKICAgICAgICAgIGNhY2hlLnRpbWUgPSBEYXRlLm5vdygpOwogICAgICAgICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUyKTsKICAgICAgICAgIGNhY2hlLmNvbXB1dGVkU3R5bGUgPSBjb21wdXRlZFN0eWxlOwogICAgICAgICAgY29uc3Qgb3ZlcmZsb3dYU3RyaW5nID0gY29tcHV0ZWRTdHlsZS5vdmVyZmxvd1g7CiAgICAgICAgICBjb25zdCBvdmVyZmxvd1lTdHJpbmcgPSBjb21wdXRlZFN0eWxlLm92ZXJmbG93WTsKICAgICAgICAgIGhhc092ZXJmbG93WCA9IFsiYXV0byIsICJvdmVybGF5IiwgInNjcm9sbCJdLmluY2x1ZGVzKG92ZXJmbG93WFN0cmluZyk7CiAgICAgICAgICBoYXNPdmVyZmxvd1kgPSBbImF1dG8iLCAib3ZlcmxheSIsICJzY3JvbGwiXS5pbmNsdWRlcyhvdmVyZmxvd1lTdHJpbmcpOwogICAgICAgICAgY2FjaGUuaGFzT3ZlcmZsb3dYID0gaGFzT3ZlcmZsb3dYOwogICAgICAgICAgY2FjaGUuaGFzT3ZlcmZsb3dZID0gaGFzT3ZlcmZsb3dZOwogICAgICAgICAgaWYgKCFoYXNPdmVyZmxvd1ggJiYgIWhhc092ZXJmbG93WSkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgaWYgKGdlc3R1cmVPcmllbnRhdGlvbiA9PT0gInZlcnRpY2FsIiAmJiAhaGFzT3ZlcmZsb3dZKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICBpZiAoZ2VzdHVyZU9yaWVudGF0aW9uID09PSAiaG9yaXpvbnRhbCIgJiYgIWhhc092ZXJmbG93WCkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgc2Nyb2xsV2lkdGggPSBub2RlMi5zY3JvbGxXaWR0aDsKICAgICAgICAgIHNjcm9sbEhlaWdodCA9IG5vZGUyLnNjcm9sbEhlaWdodDsKICAgICAgICAgIGNsaWVudFdpZHRoID0gbm9kZTIuY2xpZW50V2lkdGg7CiAgICAgICAgICBjbGllbnRIZWlnaHQgPSBub2RlMi5jbGllbnRIZWlnaHQ7CiAgICAgICAgICBpc1Njcm9sbGFibGVYID0gc2Nyb2xsV2lkdGggPiBjbGllbnRXaWR0aDsKICAgICAgICAgIGlzU2Nyb2xsYWJsZVkgPSBzY3JvbGxIZWlnaHQgPiBjbGllbnRIZWlnaHQ7CiAgICAgICAgICBjYWNoZS5pc1Njcm9sbGFibGVYID0gaXNTY3JvbGxhYmxlWDsKICAgICAgICAgIGNhY2hlLmlzU2Nyb2xsYWJsZVkgPSBpc1Njcm9sbGFibGVZOwogICAgICAgICAgY2FjaGUuc2Nyb2xsV2lkdGggPSBzY3JvbGxXaWR0aDsKICAgICAgICAgIGNhY2hlLnNjcm9sbEhlaWdodCA9IHNjcm9sbEhlaWdodDsKICAgICAgICAgIGNhY2hlLmNsaWVudFdpZHRoID0gY2xpZW50V2lkdGg7CiAgICAgICAgICBjYWNoZS5jbGllbnRIZWlnaHQgPSBjbGllbnRIZWlnaHQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlzU2Nyb2xsYWJsZVggPSBjYWNoZS5pc1Njcm9sbGFibGVYOwogICAgICAgICAgaXNTY3JvbGxhYmxlWSA9IGNhY2hlLmlzU2Nyb2xsYWJsZVk7CiAgICAgICAgICBoYXNPdmVyZmxvd1ggPSBjYWNoZS5oYXNPdmVyZmxvd1g7CiAgICAgICAgICBoYXNPdmVyZmxvd1kgPSBjYWNoZS5oYXNPdmVyZmxvd1k7CiAgICAgICAgICBzY3JvbGxXaWR0aCA9IGNhY2hlLnNjcm9sbFdpZHRoOwogICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gY2FjaGUuc2Nyb2xsSGVpZ2h0OwogICAgICAgICAgY2xpZW50V2lkdGggPSBjYWNoZS5jbGllbnRXaWR0aDsKICAgICAgICAgIGNsaWVudEhlaWdodCA9IGNhY2hlLmNsaWVudEhlaWdodDsKICAgICAgICB9CiAgICAgICAgaWYgKCFoYXNPdmVyZmxvd1ggJiYgIWhhc092ZXJmbG93WSB8fCAhaXNTY3JvbGxhYmxlWCAmJiAhaXNTY3JvbGxhYmxlWSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoZ2VzdHVyZU9yaWVudGF0aW9uID09PSAidmVydGljYWwiICYmICghaGFzT3ZlcmZsb3dZIHx8ICFpc1Njcm9sbGFibGVZKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoZ2VzdHVyZU9yaWVudGF0aW9uID09PSAiaG9yaXpvbnRhbCIgJiYgKCFoYXNPdmVyZmxvd1ggfHwgIWlzU2Nyb2xsYWJsZVgpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGxldCBvcmllbnRhdGlvbjsKICAgICAgICBpZiAoZ2VzdHVyZU9yaWVudGF0aW9uID09PSAiaG9yaXpvbnRhbCIpIHsKICAgICAgICAgIG9yaWVudGF0aW9uID0gIngiOwogICAgICAgIH0gZWxzZSBpZiAoZ2VzdHVyZU9yaWVudGF0aW9uID09PSAidmVydGljYWwiKSB7CiAgICAgICAgICBvcmllbnRhdGlvbiA9ICJ5IjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgaXNTY3JvbGxpbmdYID0gZGVsdGFYICE9PSAwOwogICAgICAgICAgY29uc3QgaXNTY3JvbGxpbmdZID0gZGVsdGFZICE9PSAwOwogICAgICAgICAgaWYgKGlzU2Nyb2xsaW5nWCAmJiBoYXNPdmVyZmxvd1ggJiYgaXNTY3JvbGxhYmxlWCkgewogICAgICAgICAgICBvcmllbnRhdGlvbiA9ICJ4IjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChpc1Njcm9sbGluZ1kgJiYgaGFzT3ZlcmZsb3dZICYmIGlzU2Nyb2xsYWJsZVkpIHsKICAgICAgICAgICAgb3JpZW50YXRpb24gPSAieSI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghb3JpZW50YXRpb24pIHJldHVybiBmYWxzZTsKICAgICAgICBsZXQgc2Nyb2xsLCBtYXhTY3JvbGwsIGRlbHRhLCBoYXNPdmVyZmxvdywgaXNTY3JvbGxhYmxlOwogICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gIngiKSB7CiAgICAgICAgICBzY3JvbGwgPSBub2RlMi5zY3JvbGxMZWZ0OwogICAgICAgICAgbWF4U2Nyb2xsID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aDsKICAgICAgICAgIGRlbHRhID0gZGVsdGFYOwogICAgICAgICAgaGFzT3ZlcmZsb3cgPSBoYXNPdmVyZmxvd1g7CiAgICAgICAgICBpc1Njcm9sbGFibGUgPSBpc1Njcm9sbGFibGVYOwogICAgICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb24gPT09ICJ5IikgewogICAgICAgICAgc2Nyb2xsID0gbm9kZTIuc2Nyb2xsVG9wOwogICAgICAgICAgbWF4U2Nyb2xsID0gc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0OwogICAgICAgICAgZGVsdGEgPSBkZWx0YVk7CiAgICAgICAgICBoYXNPdmVyZmxvdyA9IGhhc092ZXJmbG93WTsKICAgICAgICAgIGlzU2Nyb2xsYWJsZSA9IGlzU2Nyb2xsYWJsZVk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgY29uc3Qgd2lsbFNjcm9sbCA9IGRlbHRhID4gMCA/IHNjcm9sbCA8IG1heFNjcm9sbCA6IHNjcm9sbCA+IDA7CiAgICAgICAgcmV0dXJuIHdpbGxTY3JvbGwgJiYgaGFzT3ZlcmZsb3cgJiYgaXNTY3JvbGxhYmxlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBUaGUgcm9vdCBlbGVtZW50IG9uIHdoaWNoIGxlbmlzIGlzIGluc3RhbmNlZAogICAgICAgKi8KICAgICAgZ2V0IHJvb3RFbGVtZW50KCkgewogICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JhcHBlciA9PT0gd2luZG93ID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogdGhpcy5vcHRpb25zLndyYXBwZXI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSBsaW1pdCB3aGljaCBpcyB0aGUgbWF4aW11bSBzY3JvbGwgdmFsdWUKICAgICAgICovCiAgICAgIGdldCBsaW1pdCgpIHsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLm5haXZlRGltZW5zaW9ucykgewogICAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3RFbGVtZW50LnNjcm9sbFdpZHRoIC0gdGhpcy5yb290RWxlbWVudC5jbGllbnRXaWR0aDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3RFbGVtZW50LnNjcm9sbEhlaWdodCAtIHRoaXMucm9vdEVsZW1lbnQuY2xpZW50SGVpZ2h0OwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5kaW1lbnNpb25zLmxpbWl0W3RoaXMuaXNIb3Jpem9udGFsID8gIngiIDogInkiXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBzY3JvbGwgaXMgaG9yaXpvbnRhbAogICAgICAgKi8KICAgICAgZ2V0IGlzSG9yaXpvbnRhbCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9yaWVudGF0aW9uID09PSAiaG9yaXpvbnRhbCI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSBhY3R1YWwgc2Nyb2xsIHZhbHVlCiAgICAgICAqLwogICAgICBnZXQgYWN0dWFsU2Nyb2xsKCkgewogICAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLm9wdGlvbnMud3JhcHBlcjsKICAgICAgICByZXR1cm4gdGhpcy5pc0hvcml6b250YWwgPyB3cmFwcGVyLnNjcm9sbFggPz8gd3JhcHBlci5zY3JvbGxMZWZ0IDogd3JhcHBlci5zY3JvbGxZID8/IHdyYXBwZXIuc2Nyb2xsVG9wOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBUaGUgY3VycmVudCBzY3JvbGwgdmFsdWUKICAgICAgICovCiAgICAgIGdldCBzY3JvbGwoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5pbmZpbml0ZSA/IG1vZHVsbyh0aGlzLmFuaW1hdGVkU2Nyb2xsLCB0aGlzLmxpbWl0KSA6IHRoaXMuYW5pbWF0ZWRTY3JvbGw7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSBwcm9ncmVzcyBvZiB0aGUgc2Nyb2xsIHJlbGF0aXZlIHRvIHRoZSBsaW1pdAogICAgICAgKi8KICAgICAgZ2V0IHByb2dyZXNzKCkgewogICAgICAgIHJldHVybiB0aGlzLmxpbWl0ID09PSAwID8gMSA6IHRoaXMuc2Nyb2xsIC8gdGhpcy5saW1pdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3VycmVudCBzY3JvbGwgc3RhdGUKICAgICAgICovCiAgICAgIGdldCBpc1Njcm9sbGluZygpIHsKICAgICAgICByZXR1cm4gdGhpcy5faXNTY3JvbGxpbmc7CiAgICAgIH0KICAgICAgc2V0IGlzU2Nyb2xsaW5nKHZhbHVlMikgewogICAgICAgIGlmICh0aGlzLl9pc1Njcm9sbGluZyAhPT0gdmFsdWUyKSB7CiAgICAgICAgICB0aGlzLl9pc1Njcm9sbGluZyA9IHZhbHVlMjsKICAgICAgICAgIHRoaXMudXBkYXRlQ2xhc3NOYW1lKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiBsZW5pcyBpcyBzdG9wcGVkCiAgICAgICAqLwogICAgICBnZXQgaXNTdG9wcGVkKCkgewogICAgICAgIHJldHVybiB0aGlzLl9pc1N0b3BwZWQ7CiAgICAgIH0KICAgICAgc2V0IGlzU3RvcHBlZCh2YWx1ZTIpIHsKICAgICAgICBpZiAodGhpcy5faXNTdG9wcGVkICE9PSB2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuX2lzU3RvcHBlZCA9IHZhbHVlMjsKICAgICAgICAgIHRoaXMudXBkYXRlQ2xhc3NOYW1lKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiBsZW5pcyBpcyBsb2NrZWQKICAgICAgICovCiAgICAgIGdldCBpc0xvY2tlZCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5faXNMb2NrZWQ7CiAgICAgIH0KICAgICAgc2V0IGlzTG9ja2VkKHZhbHVlMikgewogICAgICAgIGlmICh0aGlzLl9pc0xvY2tlZCAhPT0gdmFsdWUyKSB7CiAgICAgICAgICB0aGlzLl9pc0xvY2tlZCA9IHZhbHVlMjsKICAgICAgICAgIHRoaXMudXBkYXRlQ2xhc3NOYW1lKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiBsZW5pcyBpcyBzbW9vdGggc2Nyb2xsaW5nCiAgICAgICAqLwogICAgICBnZXQgaXNTbW9vdGgoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaXNTY3JvbGxpbmcgPT09ICJzbW9vdGgiOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBUaGUgY2xhc3MgbmFtZSBhcHBsaWVkIHRvIHRoZSB3cmFwcGVyIGVsZW1lbnQKICAgICAgICovCiAgICAgIGdldCBjbGFzc05hbWUoKSB7CiAgICAgICAgbGV0IGNsYXNzTmFtZSA9ICJsZW5pcyI7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvVG9nZ2xlKSBjbGFzc05hbWUgKz0gIiBsZW5pcy1hdXRvVG9nZ2xlIjsKICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIGNsYXNzTmFtZSArPSAiIGxlbmlzLXN0b3BwZWQiOwogICAgICAgIGlmICh0aGlzLmlzTG9ja2VkKSBjbGFzc05hbWUgKz0gIiBsZW5pcy1sb2NrZWQiOwogICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsaW5nKSBjbGFzc05hbWUgKz0gIiBsZW5pcy1zY3JvbGxpbmciOwogICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsaW5nID09PSAic21vb3RoIikgY2xhc3NOYW1lICs9ICIgbGVuaXMtc21vb3RoIjsKICAgICAgICByZXR1cm4gY2xhc3NOYW1lOwogICAgICB9CiAgICAgIHVwZGF0ZUNsYXNzTmFtZSgpIHsKICAgICAgICB0aGlzLmNsZWFuVXBDbGFzc05hbWUoKTsKICAgICAgICB0aGlzLnJvb3RFbGVtZW50LmNsYXNzTmFtZSA9IGAke3RoaXMucm9vdEVsZW1lbnQuY2xhc3NOYW1lfSAke3RoaXMuY2xhc3NOYW1lfWAudHJpbSgpOwogICAgICB9CiAgICAgIGNsZWFuVXBDbGFzc05hbWUoKSB7CiAgICAgICAgdGhpcy5yb290RWxlbWVudC5jbGFzc05hbWUgPSB0aGlzLnJvb3RFbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKC9sZW5pcygtXHcrKT8vZywgIiIpLnRyaW0oKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N3ZWV0LXNjcm9sbEA0LjAuMC9ub2RlX21vZHVsZXMvc3dlZXQtc2Nyb2xsL3N3ZWV0LXNjcm9sbC5qcwp2YXIgcmVxdWlyZV9zd2VldF9zY3JvbGwgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N3ZWV0LXNjcm9sbEA0LjAuMC9ub2RlX21vZHVsZXMvc3dlZXQtc2Nyb2xsL3N3ZWV0LXNjcm9sbC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAoZnVuY3Rpb24oZ2xvYmFsMiwgZmFjdG9yeSkgewogICAgICB0eXBlb2YgZXhwb3J0cyA9PT0gIm9iamVjdCIgJiYgdHlwZW9mIG1vZHVsZSAhPT0gInVuZGVmaW5lZCIgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6IHR5cGVvZiBkZWZpbmUgPT09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6IChnbG9iYWwyID0gZ2xvYmFsMiB8fCBzZWxmLCBnbG9iYWwyLlN3ZWV0U2Nyb2xsID0gZmFjdG9yeSgpKTsKICAgIH0pKGV4cG9ydHMsIGZ1bmN0aW9uKCkgewogICAgICAidXNlIHN0cmljdCI7CiAgICAgIHZhciBfX2Fzc2lnbjIgPSBmdW5jdGlvbigpIHsKICAgICAgICBfX2Fzc2lnbjIgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduMyh0OSkgewogICAgICAgICAgZm9yICh2YXIgczksIGkxMSA9IDEsIG4xMyA9IGFyZ3VtZW50cy5sZW5ndGg7IGkxMSA8IG4xMzsgaTExKyspIHsKICAgICAgICAgICAgczkgPSBhcmd1bWVudHNbaTExXTsKICAgICAgICAgICAgZm9yICh2YXIgcDcgaW4gczkpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoczksIHA3KSkgdDlbcDddID0gczlbcDddOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHQ5OwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIF9fYXNzaWduMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICB9OwogICAgICB2YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTsKICAgICAgdmFyIGNhblVzZUhpc3RvcnkgPSAhY2FuVXNlRE9NID8gZmFsc2UgOiB3aW5kb3cuaGlzdG9yeSAmJiAicHVzaFN0YXRlIiBpbiB3aW5kb3cuaGlzdG9yeSAmJiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgIT09ICJmaWxlOiI7CiAgICAgIHZhciBjYW5Vc2VQYXNzaXZlT3B0aW9uID0gKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzdXBwb3J0ID0gZmFsc2U7CiAgICAgICAgaWYgKCFjYW5Vc2VET00pIHsKICAgICAgICAgIHJldHVybiBzdXBwb3J0OwogICAgICAgIH0KICAgICAgICB0cnkgewogICAgICAgICAgdmFyIHdpbiA9IHdpbmRvdzsKICAgICAgICAgIHZhciBvcHRzID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAicGFzc2l2ZSIsIHsKICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBzdXBwb3J0ID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICB3aW4uYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsIG51bGwsIG9wdHMpOwogICAgICAgICAgd2luLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLCBudWxsLCBvcHRzKTsKICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN1cHBvcnQ7CiAgICAgIH0pKCk7CiAgICAgIHZhciBpc1N0cmluZzIgPSBmdW5jdGlvbihvYmopIHsKICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gInN0cmluZyI7CiAgICAgIH07CiAgICAgIHZhciBpc0Z1bmN0aW9uMiA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAiZnVuY3Rpb24iOwogICAgICB9OwogICAgICB2YXIgaXNBcnJheTMgPSBmdW5jdGlvbihvYmopIHsKICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmopOwogICAgICB9OwogICAgICB2YXIgaXNOdW1lcmljID0gZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgcmV0dXJuICFpc0FycmF5MyhvYmopICYmIG9iaiAtIHBhcnNlRmxvYXQob2JqKSArIDEgPj0gMDsKICAgICAgfTsKICAgICAgdmFyIGhhc1Byb3AgPSBmdW5jdGlvbihvYmosIGtleTIpIHsKICAgICAgICByZXR1cm4gb2JqICYmIG9iai5oYXNPd25Qcm9wZXJ0eShrZXkyKTsKICAgICAgfTsKICAgICAgdmFyIHJhZiA9IGNhblVzZURPTSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpIDogbnVsbDsKICAgICAgdmFyIGNhZiA9IGNhblVzZURPTSA/IHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdykgOiBudWxsOwogICAgICB2YXIgY29zID0gTWF0aC5jb3MsIHNpbiA9IE1hdGguc2luLCBwb3cgPSBNYXRoLnBvdywgc3FydCA9IE1hdGguc3FydCwgUEkgPSBNYXRoLlBJOwogICAgICB2YXIgZWFzaW5ncyA9IHsKICAgICAgICBsaW5lYXI6IGZ1bmN0aW9uKHA3KSB7CiAgICAgICAgICByZXR1cm4gcDc7CiAgICAgICAgfSwKICAgICAgICBlYXNlSW5RdWFkOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gYzExICogKHQ5IC89IGQ2KSAqIHQ5ICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlT3V0UXVhZDogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIC1jMTEgKiAodDkgLz0gZDYpICogKHQ5IC0gMikgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbk91dFF1YWQ6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiAodDkgLz0gZDYgLyAyKSA8IDEgPyBjMTEgLyAyICogdDkgKiB0OSArIGI1IDogLWMxMSAvIDIgKiAoLS10OSAqICh0OSAtIDIpIC0gMSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbkN1YmljOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gYzExICogKHQ5IC89IGQ2KSAqIHQ5ICogdDkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VPdXRDdWJpYzogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIGMxMSAqICgodDkgPSB0OSAvIGQ2IC0gMSkgKiB0OSAqIHQ5ICsgMSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbk91dEN1YmljOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gKHQ5IC89IGQ2IC8gMikgPCAxID8gYzExIC8gMiAqIHQ5ICogdDkgKiB0OSArIGI1IDogYzExIC8gMiAqICgodDkgLT0gMikgKiB0OSAqIHQ5ICsgMikgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJblF1YXJ0OiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gYzExICogKHQ5IC89IGQ2KSAqIHQ5ICogdDkgKiB0OSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZU91dFF1YXJ0OiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gLWMxMSAqICgodDkgPSB0OSAvIGQ2IC0gMSkgKiB0OSAqIHQ5ICogdDkgLSAxKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluT3V0UXVhcnQ6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiAodDkgLz0gZDYgLyAyKSA8IDEgPyBjMTEgLyAyICogdDkgKiB0OSAqIHQ5ICogdDkgKyBiNSA6IC1jMTEgLyAyICogKCh0OSAtPSAyKSAqIHQ5ICogdDkgKiB0OSAtIDIpICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlSW5RdWludDogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIGMxMSAqICh0OSAvPSBkNikgKiB0OSAqIHQ5ICogdDkgKiB0OSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZU91dFF1aW50OiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gYzExICogKCh0OSA9IHQ5IC8gZDYgLSAxKSAqIHQ5ICogdDkgKiB0OSAqIHQ5ICsgMSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbk91dFF1aW50OiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gKHQ5IC89IGQ2IC8gMikgPCAxID8gYzExIC8gMiAqIHQ5ICogdDkgKiB0OSAqIHQ5ICogdDkgKyBiNSA6IGMxMSAvIDIgKiAoKHQ5IC09IDIpICogdDkgKiB0OSAqIHQ5ICogdDkgKyAyKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluU2luZTogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIC1jMTEgKiBjb3ModDkgLyBkNiAqIChQSSAvIDIpKSArIGMxMSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZU91dFNpbmU6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiBjMTEgKiBzaW4odDkgLyBkNiAqIChQSSAvIDIpKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluT3V0U2luZTogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIC1jMTEgLyAyICogKGNvcyhQSSAqIHQ5IC8gZDYpIC0gMSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbkV4cG86IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiB0OSA9PT0gMCA/IGI1IDogYzExICogcG93KDIsIDEwICogKHQ5IC8gZDYgLSAxKSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VPdXRFeHBvOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gdDkgPT09IGQ2ID8gYjUgKyBjMTEgOiBjMTEgKiAoLXBvdygyLCAtMTAgKiB0OSAvIGQ2KSArIDEpICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlSW5PdXRFeHBvOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICBpZiAodDkgPT09IDApCiAgICAgICAgICAgIHJldHVybiBiNTsKICAgICAgICAgIGlmICh0OSA9PT0gZDYpCiAgICAgICAgICAgIHJldHVybiBiNSArIGMxMTsKICAgICAgICAgIGlmICgodDkgLz0gZDYgLyAyKSA8IDEpCiAgICAgICAgICAgIHJldHVybiBjMTEgLyAyICogcG93KDIsIDEwICogKHQ5IC0gMSkpICsgYjU7CiAgICAgICAgICByZXR1cm4gYzExIC8gMiAqICgtcG93KDIsIC0xMCAqIC0tdDkpICsgMikgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbkNpcmM6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiAtYzExICogKHNxcnQoMSAtICh0OSAvPSBkNikgKiB0OSkgLSAxKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZU91dENpcmM6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiBjMTEgKiBzcXJ0KDEgLSAodDkgPSB0OSAvIGQ2IC0gMSkgKiB0OSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbk91dENpcmM6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiAodDkgLz0gZDYgLyAyKSA8IDEgPyAtYzExIC8gMiAqIChzcXJ0KDEgLSB0OSAqIHQ5KSAtIDEpICsgYjUgOiBjMTEgLyAyICogKHNxcnQoMSAtICh0OSAtPSAyKSAqIHQ5KSArIDEpICsgYjU7CiAgICAgICAgfQogICAgICB9OwogICAgICB2YXIgJCQgPSBmdW5jdGlvbihzZWxlY3RvcikgewogICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCghc2VsZWN0b3IgPyBbXSA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKTsKICAgICAgfTsKICAgICAgdmFyICQzID0gZnVuY3Rpb24oc2VsZWN0b3IpIHsKICAgICAgICByZXR1cm4gJCQoc2VsZWN0b3IpLnNoaWZ0KCkgfHwgbnVsbDsKICAgICAgfTsKICAgICAgdmFyIGlzRWxlbWVudCA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBFbGVtZW50OwogICAgICB9OwogICAgICB2YXIgaXNXaW5kb3cgPSBmdW5jdGlvbigkZWwpIHsKICAgICAgICByZXR1cm4gJGVsID09PSB3aW5kb3c7CiAgICAgIH07CiAgICAgIHZhciBpc1Jvb3RDb250YWluZXIgPSBmdW5jdGlvbigkZWwpIHsKICAgICAgICByZXR1cm4gJGVsID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgJGVsID09PSBkb2N1bWVudC5ib2R5OwogICAgICB9OwogICAgICB2YXIgbWF0Y2hlcyA9IGZ1bmN0aW9uKCRlbCwgc2VsZWN0b3IpIHsKICAgICAgICBpZiAoaXNFbGVtZW50KHNlbGVjdG9yKSkgewogICAgICAgICAgcmV0dXJuICRlbCA9PT0gc2VsZWN0b3I7CiAgICAgICAgfQogICAgICAgIHZhciByZXN1bHRzID0gJCQoc2VsZWN0b3IpOwogICAgICAgIHZhciBpMTEgPSByZXN1bHRzLmxlbmd0aDsKICAgICAgICB3aGlsZSAoLS1pMTEgPj0gMCAmJiByZXN1bHRzW2kxMV0gIT09ICRlbCkgewogICAgICAgIH0KICAgICAgICByZXR1cm4gaTExID4gLTE7CiAgICAgIH07CiAgICAgIHZhciBnZXRIZWlnaHQgPSBmdW5jdGlvbigkZWwpIHsKICAgICAgICByZXR1cm4gTWF0aC5tYXgoJGVsLnNjcm9sbEhlaWdodCwgJGVsLmNsaWVudEhlaWdodCwgJGVsLm9mZnNldEhlaWdodCk7CiAgICAgIH07CiAgICAgIHZhciBnZXRXaWR0aCA9IGZ1bmN0aW9uKCRlbCkgewogICAgICAgIHJldHVybiBNYXRoLm1heCgkZWwuc2Nyb2xsV2lkdGgsICRlbC5jbGllbnRXaWR0aCwgJGVsLm9mZnNldFdpZHRoKTsKICAgICAgfTsKICAgICAgdmFyIGdldFNpemUyID0gZnVuY3Rpb24oJGVsKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHdpZHRoOiBnZXRXaWR0aCgkZWwpLAogICAgICAgICAgaGVpZ2h0OiBnZXRIZWlnaHQoJGVsKQogICAgICAgIH07CiAgICAgIH07CiAgICAgIHZhciBnZXRWaWV3cG9ydEFuZEVsZW1lbnRTaXplcyA9IGZ1bmN0aW9uKCRlbCkgewogICAgICAgIHZhciBpc1Jvb3QgPSBpc1dpbmRvdygkZWwpIHx8IGlzUm9vdENvbnRhaW5lcigkZWwpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICB2aWV3cG9ydDogewogICAgICAgICAgICB3aWR0aDogaXNSb290ID8gTWF0aC5taW4od2luZG93LmlubmVyV2lkdGgsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCkgOiAkZWwuY2xpZW50V2lkdGgsCiAgICAgICAgICAgIGhlaWdodDogaXNSb290ID8gd2luZG93LmlubmVySGVpZ2h0IDogJGVsLmNsaWVudEhlaWdodAogICAgICAgICAgfSwKICAgICAgICAgIHNpemU6IGlzUm9vdCA/IHsKICAgICAgICAgICAgd2lkdGg6IE1hdGgubWF4KGdldFdpZHRoKGRvY3VtZW50LmJvZHkpLCBnZXRXaWR0aChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKSwKICAgICAgICAgICAgaGVpZ2h0OiBNYXRoLm1heChnZXRIZWlnaHQoZG9jdW1lbnQuYm9keSksIGdldEhlaWdodChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKQogICAgICAgICAgfSA6IGdldFNpemUyKCRlbCkKICAgICAgICB9OwogICAgICB9OwogICAgICB2YXIgZGlyZWN0aW9uTWV0aG9kTWFwID0gewogICAgICAgIHk6ICJzY3JvbGxUb3AiLAogICAgICAgIHg6ICJzY3JvbGxMZWZ0IgogICAgICB9OwogICAgICB2YXIgZGlyZWN0aW9uUHJvcE1hcCA9IHsKICAgICAgICB5OiAicGFnZVlPZmZzZXQiLAogICAgICAgIHg6ICJwYWdlWE9mZnNldCIKICAgICAgfTsKICAgICAgdmFyIGdldFNjcm9sbCA9IGZ1bmN0aW9uKCRlbCwgZGlyZWN0aW9uKSB7CiAgICAgICAgcmV0dXJuIGlzV2luZG93KCRlbCkgPyAkZWxbZGlyZWN0aW9uUHJvcE1hcFtkaXJlY3Rpb25dXSA6ICRlbFtkaXJlY3Rpb25NZXRob2RNYXBbZGlyZWN0aW9uXV07CiAgICAgIH07CiAgICAgIHZhciBzZXRTY3JvbGwgPSBmdW5jdGlvbigkZWwsIG9mZnNldCwgZGlyZWN0aW9uKSB7CiAgICAgICAgaWYgKGlzV2luZG93KCRlbCkpIHsKICAgICAgICAgIHZhciB0b3BfMSA9IGRpcmVjdGlvbiA9PT0gInkiOwogICAgICAgICAgJGVsLnNjcm9sbFRvKCF0b3BfMSA/IG9mZnNldCA6ICRlbC5wYWdlWE9mZnNldCwgdG9wXzEgPyBvZmZzZXQgOiAkZWwucGFnZVlPZmZzZXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAkZWxbZGlyZWN0aW9uTWV0aG9kTWFwW2RpcmVjdGlvbl1dID0gb2Zmc2V0OwogICAgICAgIH0KICAgICAgfTsKICAgICAgdmFyIGdldE9mZnNldCA9IGZ1bmN0aW9uKCRlbCwgJGNvbnRleHQpIHsKICAgICAgICB2YXIgcmVjdCA9ICRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBpZiAocmVjdC53aWR0aCB8fCByZWN0LmhlaWdodCkgewogICAgICAgICAgdmFyIHNjcm9sbF8xID0geyB0b3A6IDAsIGxlZnQ6IDAgfTsKICAgICAgICAgIHZhciAkY3R4ID0gdm9pZCAwOwogICAgICAgICAgaWYgKGlzV2luZG93KCRjb250ZXh0KSB8fCBpc1Jvb3RDb250YWluZXIoJGNvbnRleHQpKSB7CiAgICAgICAgICAgICRjdHggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CiAgICAgICAgICAgIHNjcm9sbF8xLnRvcCA9IHdpbmRvd1tkaXJlY3Rpb25Qcm9wTWFwLnldOwogICAgICAgICAgICBzY3JvbGxfMS5sZWZ0ID0gd2luZG93W2RpcmVjdGlvblByb3BNYXAueF07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY3R4ID0gJGNvbnRleHQ7CiAgICAgICAgICAgIHZhciBjUmVjdCA9ICRjdHguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgIHNjcm9sbF8xLnRvcCA9IGNSZWN0LnRvcCAqIC0xICsgJGN0eFtkaXJlY3Rpb25NZXRob2RNYXAueV07CiAgICAgICAgICAgIHNjcm9sbF8xLmxlZnQgPSBjUmVjdC5sZWZ0ICogLTEgKyAkY3R4W2RpcmVjdGlvbk1ldGhvZE1hcC54XTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHRvcDogcmVjdC50b3AgKyBzY3JvbGxfMS50b3AgLSAkY3R4LmNsaWVudFRvcCwKICAgICAgICAgICAgbGVmdDogcmVjdC5sZWZ0ICsgc2Nyb2xsXzEubGVmdCAtICRjdHguY2xpZW50TGVmdAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlY3Q7CiAgICAgIH07CiAgICAgIHZhciB3aGVlbEV2ZW50TmFtZSA9IChmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIWNhblVzZURPTSkgewogICAgICAgICAgcmV0dXJuICJ3aGVlbCI7CiAgICAgICAgfQogICAgICAgIHJldHVybiAib253aGVlbCIgaW4gZG9jdW1lbnQgPyAid2hlZWwiIDogIm1vdXNld2hlZWwiOwogICAgICB9KSgpOwogICAgICB2YXIgZXZlbnROYW1lID0gZnVuY3Rpb24obmFtZSkgewogICAgICAgIHJldHVybiBuYW1lID09PSAid2hlZWwiID8gd2hlZWxFdmVudE5hbWUgOiBuYW1lOwogICAgICB9OwogICAgICB2YXIgYXBwbHkgPSBmdW5jdGlvbigkZWwsIG1ldGhvZCwgZXZlbnQsIGxpc3RlbmVyMiwgcGFzc2l2ZSkgewogICAgICAgIGV2ZW50LnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICAkZWxbbWV0aG9kXShldmVudE5hbWUobmFtZSksIGxpc3RlbmVyMiwgY2FuVXNlUGFzc2l2ZU9wdGlvbiA/IHsgcGFzc2l2ZSB9IDogZmFsc2UpOwogICAgICAgIH0pOwogICAgICB9OwogICAgICB2YXIgYWRkRXZlbnQgPSBmdW5jdGlvbigkZWwsIGV2ZW50LCBsaXN0ZW5lcjIsIHBhc3NpdmUpIHsKICAgICAgICByZXR1cm4gYXBwbHkoJGVsLCAiYWRkRXZlbnRMaXN0ZW5lciIsIGV2ZW50LCBsaXN0ZW5lcjIsIHBhc3NpdmUpOwogICAgICB9OwogICAgICB2YXIgcmVtb3ZlRXZlbnQgPSBmdW5jdGlvbigkZWwsIGV2ZW50LCBsaXN0ZW5lcjIsIHBhc3NpdmUpIHsKICAgICAgICByZXR1cm4gYXBwbHkoJGVsLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIGV2ZW50LCBsaXN0ZW5lcjIsIHBhc3NpdmUpOwogICAgICB9OwogICAgICB2YXIgcmVSZWxhdGl2ZVRva2VuID0gL14oXCt8LSk9KFxkKyg/OlwuXGQrKT8pJC87CiAgICAgIHZhciBwYXJzZUNvb3JkaW5hdGUgPSBmdW5jdGlvbihjb29yZGluYXRlLCBlbmFibGVWZXJ0aWNhbCkgewogICAgICAgIHZhciByZXMgPSB7IHRvcDogMCwgbGVmdDogMCwgcmVsYXRpdmU6IGZhbHNlIH07CiAgICAgICAgaWYgKGhhc1Byb3AoY29vcmRpbmF0ZSwgInRvcCIpIHx8IGhhc1Byb3AoY29vcmRpbmF0ZSwgImxlZnQiKSkgewogICAgICAgICAgcmVzID0gX19hc3NpZ24yKHt9LCByZXMsIGNvb3JkaW5hdGUpOwogICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheTMoY29vcmRpbmF0ZSkpIHsKICAgICAgICAgIGlmIChjb29yZGluYXRlLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgcmVzLnRvcCA9IGNvb3JkaW5hdGVbMF07CiAgICAgICAgICAgIHJlcy5sZWZ0ID0gY29vcmRpbmF0ZVsxXTsKICAgICAgICAgIH0gZWxzZSBpZiAoY29vcmRpbmF0ZS5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgcmVzLnRvcCA9IGVuYWJsZVZlcnRpY2FsID8gY29vcmRpbmF0ZVswXSA6IDA7CiAgICAgICAgICAgIHJlcy5sZWZ0ID0gIWVuYWJsZVZlcnRpY2FsID8gY29vcmRpbmF0ZVswXSA6IDA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGlzTnVtZXJpYyhjb29yZGluYXRlKSkgewogICAgICAgICAgaWYgKGVuYWJsZVZlcnRpY2FsKSB7CiAgICAgICAgICAgIHJlcy50b3AgPSBjb29yZGluYXRlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzLmxlZnQgPSBjb29yZGluYXRlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcyKGNvb3JkaW5hdGUpKSB7CiAgICAgICAgICB2YXIgbTYgPSBjb29yZGluYXRlLnRyaW0oKS5tYXRjaChyZVJlbGF0aXZlVG9rZW4pOwogICAgICAgICAgaWYgKCFtNikgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBvcCA9IG02WzFdOwogICAgICAgICAgdmFyIHZhbCA9IHBhcnNlSW50KG02WzJdLCAxMCk7CiAgICAgICAgICBpZiAob3AgPT09ICIrIikgewogICAgICAgICAgICByZXMudG9wID0gZW5hYmxlVmVydGljYWwgPyB2YWwgOiAwOwogICAgICAgICAgICByZXMubGVmdCA9ICFlbmFibGVWZXJ0aWNhbCA/IHZhbCA6IDA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXMudG9wID0gZW5hYmxlVmVydGljYWwgPyAtdmFsIDogMDsKICAgICAgICAgICAgcmVzLmxlZnQgPSAhZW5hYmxlVmVydGljYWwgPyAtdmFsIDogMDsKICAgICAgICAgIH0KICAgICAgICAgIHJlcy5yZWxhdGl2ZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzOwogICAgICB9OwogICAgICB2YXIgZGVmYXVsdE9wdGlvbnMyID0gewogICAgICAgIHRyaWdnZXI6ICJbZGF0YS1zY3JvbGxdIiwKICAgICAgICBoZWFkZXI6ICJbZGF0YS1zY3JvbGwtaGVhZGVyXSIsCiAgICAgICAgZHVyYXRpb246IDFlMywKICAgICAgICBlYXNpbmc6ICJlYXNlT3V0UXVpbnQiLAogICAgICAgIG9mZnNldDogMCwKICAgICAgICB2ZXJ0aWNhbDogdHJ1ZSwKICAgICAgICBob3Jpem9udGFsOiBmYWxzZSwKICAgICAgICBjYW5jZWxsYWJsZTogdHJ1ZSwKICAgICAgICB1cGRhdGVVUkw6IGZhbHNlLAogICAgICAgIHByZXZlbnREZWZhdWx0OiB0cnVlLAogICAgICAgIHN0b3BQcm9wYWdhdGlvbjogdHJ1ZSwKICAgICAgICAvLyBDYWxsYmFja3MKICAgICAgICBiZWZvcmU6IG51bGwsCiAgICAgICAgYWZ0ZXI6IG51bGwsCiAgICAgICAgY2FuY2VsOiBudWxsLAogICAgICAgIGNvbXBsZXRlOiBudWxsLAogICAgICAgIHN0ZXA6IG51bGwKICAgICAgfTsKICAgICAgdmFyIENPTlRBSU5FUl9DTElDS19FVkVOVCA9ICJjbGljayI7CiAgICAgIHZhciBDT05UQUlORVJfU1RPUF9FVkVOVCA9ICJ3aGVlbCB0b3VjaHN0YXJ0IHRvdWNobW92ZSI7CiAgICAgIHZhciBTd2VldFNjcm9sbDMgPSAoCiAgICAgICAgLyoqIEBjbGFzcyAqLwogICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgIGZ1bmN0aW9uIFN3ZWV0U2Nyb2xsNChvcHRpb25zLCBjb250YWluZXIpIHsKICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kZWwgPSBudWxsOwogICAgICAgICAgICB0aGlzLmN0eCA9IHsKICAgICAgICAgICAgICAkdHJpZ2dlcjogbnVsbCwKICAgICAgICAgICAgICBvcHRzOiBudWxsLAogICAgICAgICAgICAgIHByb2dyZXNzOiBmYWxzZSwKICAgICAgICAgICAgICBwb3M6IG51bGwsCiAgICAgICAgICAgICAgc3RhcnRQb3M6IG51bGwsCiAgICAgICAgICAgICAgZWFzaW5nOiBudWxsLAogICAgICAgICAgICAgIHN0YXJ0OiAwLAogICAgICAgICAgICAgIGlkOiAwLAogICAgICAgICAgICAgIGNhbmNlbDogZmFsc2UsCiAgICAgICAgICAgICAgaGFzaDogbnVsbAogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLmxvb3AgPSBmdW5jdGlvbih0aW1lKSB7CiAgICAgICAgICAgICAgdmFyIF9hMTYgPSBfdGhpcywgJGVsID0gX2ExNi4kZWwsIGN0eCA9IF9hMTYuY3R4OwogICAgICAgICAgICAgIGlmICghY3R4LnN0YXJ0KSB7CiAgICAgICAgICAgICAgICBjdHguc3RhcnQgPSB0aW1lOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoIWN0eC5wcm9ncmVzcyB8fCAhJGVsKSB7CiAgICAgICAgICAgICAgICBfdGhpcy5zdG9wKCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHZhciBvcHRpb25zMiA9IGN0eC5vcHRzOwogICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBjdHgucG9zOwogICAgICAgICAgICAgIHZhciBzdGFydCA9IGN0eC5zdGFydDsKICAgICAgICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSBjdHguc3RhcnRQb3M7CiAgICAgICAgICAgICAgdmFyIGVhc2luZyA9IGN0eC5lYXNpbmc7CiAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gb3B0aW9uczIuZHVyYXRpb247CiAgICAgICAgICAgICAgdmFyIGRpcmVjdGlvbk1hcCA9IHsgdG9wOiAieSIsIGxlZnQ6ICJ4IiB9OwogICAgICAgICAgICAgIHZhciB0aW1lRWxhcHNlZCA9IHRpbWUgLSBzdGFydDsKICAgICAgICAgICAgICB2YXIgdDkgPSBNYXRoLm1pbigxLCBNYXRoLm1heCh0aW1lRWxhcHNlZCAvIGR1cmF0aW9uLCAwKSk7CiAgICAgICAgICAgICAgT2JqZWN0LmtleXMob2Zmc2V0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleTIpIHsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZTIgPSBvZmZzZXRba2V5Ml07CiAgICAgICAgICAgICAgICB2YXIgaW5pdGlhbDIgPSBzdGFydE9mZnNldFtrZXkyXTsKICAgICAgICAgICAgICAgIHZhciBkZWx0YSA9IHZhbHVlMiAtIGluaXRpYWwyOwogICAgICAgICAgICAgICAgaWYgKGRlbHRhICE9PSAwKSB7CiAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBlYXNpbmcodDksIGR1cmF0aW9uICogdDksIDAsIDEsIGR1cmF0aW9uKTsKICAgICAgICAgICAgICAgICAgc2V0U2Nyb2xsKCRlbCwgTWF0aC5yb3VuZChpbml0aWFsMiArIGRlbHRhICogdmFsKSwgZGlyZWN0aW9uTWFwW2tleTJdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBpZiAodGltZUVsYXBzZWQgPD0gZHVyYXRpb24pIHsKICAgICAgICAgICAgICAgIF90aGlzLmhvb2sob3B0aW9uczIsICJzdGVwIiwgdDkpOwogICAgICAgICAgICAgICAgY3R4LmlkID0gU3dlZXRTY3JvbGw0LnJhZihfdGhpcy5sb29wKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgX3RoaXMuc3RvcCh0cnVlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbihlMTEpIHsKICAgICAgICAgICAgICB2YXIgb3B0cyA9IF90aGlzLm9wdHM7CiAgICAgICAgICAgICAgdmFyICRlbCA9IGUxMS50YXJnZXQ7CiAgICAgICAgICAgICAgZm9yICg7ICRlbCAmJiAkZWwgIT09IGRvY3VtZW50OyAkZWwgPSAkZWwucGFyZW50Tm9kZSkgewogICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKCRlbCwgb3B0cy50cmlnZ2VyKSkgewogICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBkYXRhT3B0aW9ucyA9IEpTT04ucGFyc2UoJGVsLmdldEF0dHJpYnV0ZSgiZGF0YS1zY3JvbGwtb3B0aW9ucyIpIHx8ICJ7fSIpOwogICAgICAgICAgICAgICAgdmFyIGRhdGEgPSAkZWwuZ2V0QXR0cmlidXRlKCJkYXRhLXNjcm9sbCIpOwogICAgICAgICAgICAgICAgdmFyIHRvMiA9IGRhdGEgfHwgJGVsLmdldEF0dHJpYnV0ZSgiaHJlZiIpOwogICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMyID0gX19hc3NpZ24yKHt9LCBvcHRzLCBkYXRhT3B0aW9ucyk7CiAgICAgICAgICAgICAgICB2YXIgcHJldmVudERlZmF1bHQgPSBvcHRpb25zMi5wcmV2ZW50RGVmYXVsdCwgc3RvcFByb3BhZ2F0aW9uID0gb3B0aW9uczIuc3RvcFByb3BhZ2F0aW9uLCB2ZXJ0aWNhbCA9IG9wdGlvbnMyLnZlcnRpY2FsLCBob3Jpem9udGFsID0gb3B0aW9uczIuaG9yaXpvbnRhbDsKICAgICAgICAgICAgICAgIGlmIChwcmV2ZW50RGVmYXVsdCkgewogICAgICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzdG9wUHJvcGFnYXRpb24pIHsKICAgICAgICAgICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX3RoaXMuY3R4LiR0cmlnZ2VyID0gJGVsOwogICAgICAgICAgICAgICAgaWYgKGhvcml6b250YWwgJiYgdmVydGljYWwpIHsKICAgICAgICAgICAgICAgICAgX3RoaXMudG8odG8yLCBvcHRpb25zMik7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZlcnRpY2FsKSB7CiAgICAgICAgICAgICAgICAgIF90aGlzLnRvVG9wKHRvMiwgb3B0aW9uczIpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChob3Jpem9udGFsKSB7CiAgICAgICAgICAgICAgICAgIF90aGlzLnRvTGVmdCh0bzIsIG9wdGlvbnMyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5oYW5kbGVTdG9wID0gZnVuY3Rpb24oZTExKSB7CiAgICAgICAgICAgICAgdmFyIGN0eCA9IF90aGlzLmN0eDsKICAgICAgICAgICAgICB2YXIgb3B0cyA9IGN0eC5vcHRzOwogICAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMuY2FuY2VsbGFibGUpIHsKICAgICAgICAgICAgICAgIGN0eC5jYW5jZWwgPSB0cnVlOwogICAgICAgICAgICAgICAgX3RoaXMuc3RvcCgpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMub3B0cyA9IF9fYXNzaWduMih7fSwgZGVmYXVsdE9wdGlvbnMyLCBvcHRpb25zIHx8IHt9KTsKICAgICAgICAgICAgdmFyICRjb250YWluZXIgPSBudWxsOwogICAgICAgICAgICBpZiAoY2FuVXNlRE9NKSB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250YWluZXIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICAkY29udGFpbmVyID0gJDMoY29udGFpbmVyKTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRhaW5lciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAkY29udGFpbmVyID0gY29udGFpbmVyOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkY29udGFpbmVyID0gd2luZG93OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLiRlbCA9ICRjb250YWluZXI7CiAgICAgICAgICAgIGlmICgkY29udGFpbmVyKSB7CiAgICAgICAgICAgICAgdGhpcy5iaW5kKHRydWUsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgU3dlZXRTY3JvbGw0LmNyZWF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMsIGNvbnRhaW5lcikgewogICAgICAgICAgICByZXR1cm4gbmV3IFN3ZWV0U2Nyb2xsNChvcHRpb25zLCBjb250YWluZXIpOwogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUudG8gPSBmdW5jdGlvbihkaXN0YW5jZSwgb3B0aW9ucykgewogICAgICAgICAgICBpZiAoIWNhblVzZURPTSkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgX2ExNiA9IHRoaXMsICRlbCA9IF9hMTYuJGVsLCBjdHggPSBfYTE2LmN0eCwgY3VycmVudE9wdGlvbnMgPSBfYTE2Lm9wdHM7CiAgICAgICAgICAgIHZhciAkdHJpZ2dlciA9IGN0eC4kdHJpZ2dlcjsKICAgICAgICAgICAgdmFyIG9wdHMgPSBfX2Fzc2lnbjIoe30sIGN1cnJlbnRPcHRpb25zLCBvcHRpb25zIHx8IHt9KTsKICAgICAgICAgICAgdmFyIG9wdE9mZnNldCA9IG9wdHMub2Zmc2V0LCB2ZXJ0aWNhbCA9IG9wdHMudmVydGljYWwsIGhvcml6b250YWwgPSBvcHRzLmhvcml6b250YWw7CiAgICAgICAgICAgIHZhciAkaGVhZGVyID0gaXNFbGVtZW50KG9wdHMuaGVhZGVyKSA/IG9wdHMuaGVhZGVyIDogJDMob3B0cy5oZWFkZXIpOwogICAgICAgICAgICB2YXIgcmVnID0gL14jLzsKICAgICAgICAgICAgdmFyIGhhc2ggPSBpc1N0cmluZzIoZGlzdGFuY2UpICYmIHJlZy50ZXN0KGRpc3RhbmNlKSA/IGRpc3RhbmNlIDogbnVsbDsKICAgICAgICAgICAgY3R4Lm9wdHMgPSBvcHRzOwogICAgICAgICAgICBjdHguY2FuY2VsID0gZmFsc2U7CiAgICAgICAgICAgIGN0eC5oYXNoID0gaGFzaDsKICAgICAgICAgICAgdGhpcy5zdG9wKCk7CiAgICAgICAgICAgIGlmICghJGVsKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBvZmZzZXQgPSBwYXJzZUNvb3JkaW5hdGUob3B0T2Zmc2V0LCB2ZXJ0aWNhbCk7CiAgICAgICAgICAgIHZhciBjb29yZGluYXRlID0gcGFyc2VDb29yZGluYXRlKGRpc3RhbmNlLCB2ZXJ0aWNhbCk7CiAgICAgICAgICAgIHZhciBzY3JvbGwgPSB7IHRvcDogMCwgbGVmdDogMCB9OwogICAgICAgICAgICBpZiAoY29vcmRpbmF0ZSkgewogICAgICAgICAgICAgIGlmIChjb29yZGluYXRlLnJlbGF0aXZlKSB7CiAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IGdldFNjcm9sbCgkZWwsIHZlcnRpY2FsID8gInkiIDogIngiKTsKICAgICAgICAgICAgICAgIHNjcm9sbC50b3AgPSB2ZXJ0aWNhbCA/IGN1cnJlbnQgKyBjb29yZGluYXRlLnRvcCA6IGNvb3JkaW5hdGUudG9wOwogICAgICAgICAgICAgICAgc2Nyb2xsLmxlZnQgPSAhdmVydGljYWwgPyBjdXJyZW50ICsgY29vcmRpbmF0ZS5sZWZ0IDogY29vcmRpbmF0ZS5sZWZ0OwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzY3JvbGwgPSBjb29yZGluYXRlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZzIoZGlzdGFuY2UpICYmIGRpc3RhbmNlICE9PSAiIyIpIHsKICAgICAgICAgICAgICB2YXIgJHRhcmdldCA9ICQzKGRpc3RhbmNlKTsKICAgICAgICAgICAgICBpZiAoISR0YXJnZXQpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc2Nyb2xsID0gZ2V0T2Zmc2V0KCR0YXJnZXQsICRlbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG9mZnNldCkgewogICAgICAgICAgICAgIHNjcm9sbC50b3AgKz0gb2Zmc2V0LnRvcDsKICAgICAgICAgICAgICBzY3JvbGwubGVmdCArPSBvZmZzZXQubGVmdDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJGhlYWRlcikgewogICAgICAgICAgICAgIHNjcm9sbC50b3AgPSBNYXRoLm1heCgwLCBzY3JvbGwudG9wIC0gZ2V0U2l6ZTIoJGhlYWRlcikuaGVpZ2h0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgX2IgPSBnZXRWaWV3cG9ydEFuZEVsZW1lbnRTaXplcygkZWwpLCB2aWV3cG9ydCA9IF9iLnZpZXdwb3J0LCBzaXplID0gX2Iuc2l6ZTsKICAgICAgICAgICAgc2Nyb2xsLnRvcCA9IHZlcnRpY2FsID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2l6ZS5oZWlnaHQgLSB2aWV3cG9ydC5oZWlnaHQsIHNjcm9sbC50b3ApKSA6IGdldFNjcm9sbCgkZWwsICJ5Iik7CiAgICAgICAgICAgIHNjcm9sbC5sZWZ0ID0gaG9yaXpvbnRhbCA/IE1hdGgubWF4KDAsIE1hdGgubWluKHNpemUud2lkdGggLSB2aWV3cG9ydC53aWR0aCwgc2Nyb2xsLmxlZnQpKSA6IGdldFNjcm9sbCgkZWwsICJ4Iik7CiAgICAgICAgICAgIGlmICh0aGlzLmhvb2sob3B0cywgImJlZm9yZSIsIHNjcm9sbCwgJHRyaWdnZXIpID09PSBmYWxzZSkgewogICAgICAgICAgICAgIGN0eC5vcHRzID0gbnVsbDsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3R4LnBvcyA9IHNjcm9sbDsKICAgICAgICAgICAgdGhpcy5zdGFydChvcHRzKTsKICAgICAgICAgICAgdGhpcy5iaW5kKGZhbHNlLCB0cnVlKTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLnRvVG9wID0gZnVuY3Rpb24oZGlzdGFuY2UsIG9wdGlvbnMpIHsKICAgICAgICAgICAgdGhpcy50byhkaXN0YW5jZSwgX19hc3NpZ24yKHt9LCBvcHRpb25zIHx8IHt9LCB7IHZlcnRpY2FsOiB0cnVlLCBob3Jpem9udGFsOiBmYWxzZSB9KSk7CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS50b0xlZnQgPSBmdW5jdGlvbihkaXN0YW5jZSwgb3B0aW9ucykgewogICAgICAgICAgICB0aGlzLnRvKGRpc3RhbmNlLCBfX2Fzc2lnbjIoe30sIG9wdGlvbnMgfHwge30sIHsgdmVydGljYWw6IGZhbHNlLCBob3Jpem9udGFsOiB0cnVlIH0pKTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLnRvRWxlbWVudCA9IGZ1bmN0aW9uKCRlbGVtZW50LCBvcHRpb25zKSB7CiAgICAgICAgICAgIHZhciAkZWwgPSB0aGlzLiRlbDsKICAgICAgICAgICAgaWYgKCFjYW5Vc2VET00gfHwgISRlbCkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnRvKGdldE9mZnNldCgkZWxlbWVudCwgJGVsKSwgb3B0aW9ucyB8fCB7fSk7CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24oZ290b0VuZCkgewogICAgICAgICAgICBpZiAoZ290b0VuZCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICAgICAgZ290b0VuZCA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBfYTE2ID0gdGhpcywgJGVsID0gX2ExNi4kZWwsIGN0eCA9IF9hMTYuY3R4OwogICAgICAgICAgICB2YXIgcG9zID0gY3R4LnBvczsKICAgICAgICAgICAgaWYgKCEkZWwgfHwgIWN0eC5wcm9ncmVzcykgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBTd2VldFNjcm9sbDQuY2FmKGN0eC5pZCk7CiAgICAgICAgICAgIGN0eC5wcm9ncmVzcyA9IGZhbHNlOwogICAgICAgICAgICBjdHguc3RhcnQgPSAwOwogICAgICAgICAgICBjdHguaWQgPSAwOwogICAgICAgICAgICBpZiAoZ290b0VuZCAmJiBwb3MpIHsKICAgICAgICAgICAgICBzZXRTY3JvbGwoJGVsLCBwb3MubGVmdCwgIngiKTsKICAgICAgICAgICAgICBzZXRTY3JvbGwoJGVsLCBwb3MudG9wLCAieSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuY29tcGxldGUoKTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICAgICAgaWYgKHRoaXMuJGVsKSB7CiAgICAgICAgICAgICAgdmFyIG9wdHMgPSBfX2Fzc2lnbjIoe30sIHRoaXMub3B0cywgb3B0aW9ucyk7CiAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7CiAgICAgICAgICAgICAgdGhpcy51bmJpbmQodHJ1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgdGhpcy5vcHRzID0gb3B0czsKICAgICAgICAgICAgICB0aGlzLmJpbmQodHJ1ZSwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICh0aGlzLiRlbCkgewogICAgICAgICAgICAgIHRoaXMuc3RvcCgpOwogICAgICAgICAgICAgIHRoaXMudW5iaW5kKHRydWUsIHRydWUpOwogICAgICAgICAgICAgIHRoaXMuJGVsID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUub25CZWZvcmUgPSBmdW5jdGlvbihfNCwgX18pIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS5vblN0ZXAgPSBmdW5jdGlvbihfNCkgewogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUub25BZnRlciA9IGZ1bmN0aW9uKF80LCBfXykgewogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUub25DYW5jZWwgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLm9uQ29tcGxldGUgPSBmdW5jdGlvbihfNCkgewogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbihvcHRzKSB7CiAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDsKICAgICAgICAgICAgY3R4Lm9wdHMgPSBvcHRzOwogICAgICAgICAgICBjdHgucHJvZ3Jlc3MgPSB0cnVlOwogICAgICAgICAgICBjdHguZWFzaW5nID0gaXNGdW5jdGlvbjIob3B0cy5lYXNpbmcpID8gb3B0cy5lYXNpbmcgOiBlYXNpbmdzW29wdHMuZWFzaW5nXTsKICAgICAgICAgICAgdmFyICRjb250YWluZXIgPSB0aGlzLiRlbDsKICAgICAgICAgICAgdmFyIHN0YXJ0ID0gewogICAgICAgICAgICAgIHRvcDogZ2V0U2Nyb2xsKCRjb250YWluZXIsICJ5IiksCiAgICAgICAgICAgICAgbGVmdDogZ2V0U2Nyb2xsKCRjb250YWluZXIsICJ4IikKICAgICAgICAgICAgfTsKICAgICAgICAgICAgY3R4LnN0YXJ0UG9zID0gc3RhcnQ7CiAgICAgICAgICAgIGN0eC5pZCA9IFN3ZWV0U2Nyb2xsNC5yYWYodGhpcy5sb29wKTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBfYTE2ID0gdGhpcywgJGVsID0gX2ExNi4kZWwsIGN0eCA9IF9hMTYuY3R4OwogICAgICAgICAgICB2YXIgaGFzaCA9IGN0eC5oYXNoLCBjYW5jZWwgPSBjdHguY2FuY2VsLCBvcHRzID0gY3R4Lm9wdHMsIHBvcyA9IGN0eC5wb3MsICR0cmlnZ2VyID0gY3R4LiR0cmlnZ2VyOwogICAgICAgICAgICBpZiAoISRlbCB8fCAhb3B0cykgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaGFzaCAhPSBudWxsICYmIGhhc2ggIT09IHdpbmRvdy5sb2NhdGlvbi5oYXNoKSB7CiAgICAgICAgICAgICAgdmFyIHVwZGF0ZVVSTCA9IG9wdHMudXBkYXRlVVJMOwogICAgICAgICAgICAgIGlmIChjYW5Vc2VET00gJiYgY2FuVXNlSGlzdG9yeSAmJiB1cGRhdGVVUkwgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cuaGlzdG9yeVt1cGRhdGVVUkwgPT09ICJyZXBsYWNlIiA/ICJyZXBsYWNlU3RhdGUiIDogInB1c2hTdGF0ZSJdKG51bGwsICIiLCBoYXNoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy51bmJpbmQoZmFsc2UsIHRydWUpOwogICAgICAgICAgICBjdHgub3B0cyA9IG51bGw7CiAgICAgICAgICAgIGN0eC4kdHJpZ2dlciA9IG51bGw7CiAgICAgICAgICAgIGlmIChjYW5jZWwpIHsKICAgICAgICAgICAgICB0aGlzLmhvb2sob3B0cywgImNhbmNlbCIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuaG9vayhvcHRzLCAiYWZ0ZXIiLCBwb3MsICR0cmlnZ2VyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmhvb2sob3B0cywgImNvbXBsZXRlIiwgY2FuY2VsKTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLmhvb2sgPSBmdW5jdGlvbihvcHRpb25zLCB0eXBlNSkgewogICAgICAgICAgICB2YXIgYXJncyA9IFtdOwogICAgICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIF9hMTY7CiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IG9wdGlvbnNbdHlwZTVdOwogICAgICAgICAgICB2YXIgY2FsbGJhY2tSZXN1bHQ7CiAgICAgICAgICAgIHZhciBtZXRob2RSZXN1bHQ7CiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uMihjYWxsYmFjaykpIHsKICAgICAgICAgICAgICBjYWxsYmFja1Jlc3VsdCA9IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MuY29uY2F0KFt0aGlzXSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG1ldGhvZFJlc3VsdCA9IChfYTE2ID0gdGhpcylbIm9uIiArICh0eXBlNVswXS50b1VwcGVyQ2FzZSgpICsgdHlwZTUuc2xpY2UoMSkpXS5hcHBseShfYTE2LCBhcmdzKTsKICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrUmVzdWx0ICE9PSB2b2lkIDAgPyBjYWxsYmFja1Jlc3VsdCA6IG1ldGhvZFJlc3VsdDsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihjbGljaywgc3RvcCkgewogICAgICAgICAgICB2YXIgX2ExNiA9IHRoaXMsICRlbCA9IF9hMTYuJGVsLCBvcHRzID0gX2ExNi5jdHgub3B0czsKICAgICAgICAgICAgaWYgKCRlbCkgewogICAgICAgICAgICAgIGlmIChjbGljaykgewogICAgICAgICAgICAgICAgYWRkRXZlbnQoJGVsLCBDT05UQUlORVJfQ0xJQ0tfRVZFTlQsIHRoaXMuaGFuZGxlQ2xpY2ssIGZhbHNlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKICAgICAgICAgICAgICAgIGFkZEV2ZW50KCRlbCwgQ09OVEFJTkVSX1NUT1BfRVZFTlQsIHRoaXMuaGFuZGxlU3RvcCwgb3B0cyA/IG9wdHMuY2FuY2VsbGFibGUgOiB0cnVlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKGNsaWNrLCBzdG9wKSB7CiAgICAgICAgICAgIHZhciBfYTE2ID0gdGhpcywgJGVsID0gX2ExNi4kZWwsIG9wdHMgPSBfYTE2LmN0eC5vcHRzOwogICAgICAgICAgICBpZiAoJGVsKSB7CiAgICAgICAgICAgICAgaWYgKGNsaWNrKSB7CiAgICAgICAgICAgICAgICByZW1vdmVFdmVudCgkZWwsIENPTlRBSU5FUl9DTElDS19FVkVOVCwgdGhpcy5oYW5kbGVDbGljaywgZmFsc2UpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQoJGVsLCBDT05UQUlORVJfU1RPUF9FVkVOVCwgdGhpcy5oYW5kbGVTdG9wLCBvcHRzID8gb3B0cy5jYW5jZWxsYWJsZSA6IHRydWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5yYWYgPSByYWY7CiAgICAgICAgICBTd2VldFNjcm9sbDQuY2FmID0gY2FmOwogICAgICAgICAgcmV0dXJuIFN3ZWV0U2Nyb2xsNDsKICAgICAgICB9KSgpCiAgICAgICk7CiAgICAgIHJldHVybiBTd2VldFNjcm9sbDM7CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5wbHVnaW5zLmpzCnZhciBpbXBvcnRfc3dlZXRfc2Nyb2xsLCBsaWs7CnZhciBpbml0X2RvbXRvb2xzX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMxNigpOwogICAgaW5pdF9kaXN0X3RzMTUoKTsKICAgIGluaXRfZGlzdF90czMoKTsKICAgIGluaXRfZGlzdF90czEyKCk7CiAgICBpbml0X2Rpc3RfdHMxNygpOwogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBpbml0X2Rpc3RfdHMxOCgpOwogICAgaW5pdF9kaXN0X3RzMigpOwogICAgaW5pdF9kaXN0X3RzMTkoKTsKICAgIGluaXRfZGlzdF90czExKCk7CiAgICBpbml0X2Rpc3RfdHMyMCgpOwogICAgaW5pdF9kaXN0X3RzMTQoKTsKICAgIGluaXRfZGlzdF90czI0KCk7CiAgICBpbml0X2Rpc3RfdHMxMygpOwogICAgaW5pdF9saWtfb2JqZWN0bWFwKCk7CiAgICBpbml0X2xpa19zdHJpbmdtYXAoKTsKICAgIGluaXRfbGlrX2Zhc3RtYXAoKTsKICAgIGluaXRfbGVuaXMoKTsKICAgIGltcG9ydF9zd2VldF9zY3JvbGwgPSBfX3RvRVNNKHJlcXVpcmVfc3dlZXRfc2Nyb2xsKCksIDEpOwogICAgbGlrID0gewogICAgICBPYmplY3RNYXA6IE9iamVjdE1hcDIsCiAgICAgIFN0cmluZ21hcDogU3RyaW5nbWFwMiwKICAgICAgRmFzdE1hcDogRmFzdE1hcDIKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY3NzLmJyZWFrcG9pbnRzLmpzCnZhciBkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cywgewogIGNzc0ZvckRlc2t0b3A6ICgpID0+IGNzc0ZvckRlc2t0b3AsCiAgY3NzRm9yTm90ZWJvb2s6ICgpID0+IGNzc0Zvck5vdGVib29rLAogIGNzc0ZvclBoYWJsZXQ6ICgpID0+IGNzc0ZvclBoYWJsZXQsCiAgY3NzRm9yUGhvbmU6ICgpID0+IGNzc0ZvclBob25lLAogIGNzc0ZvclRhYmxldDogKCkgPT4gY3NzRm9yVGFibGV0LAogIGRlc2t0b3A6ICgpID0+IGRlc2t0b3AsCiAgbm90ZWJvb2s6ICgpID0+IG5vdGVib29rLAogIHBoYWJsZXQ6ICgpID0+IHBoYWJsZXQsCiAgcGhvbmU6ICgpID0+IHBob25lLAogIHRhYmxldDogKCkgPT4gdGFibGV0Cn0pOwp2YXIgZGVza3RvcCwgbm90ZWJvb2ssIHRhYmxldCwgcGhhYmxldCwgcGhvbmUsIGNzc0ZvckRlc2t0b3AsIGNzc0Zvck5vdGVib29rLCBjc3NGb3JUYWJsZXQsIGNzc0ZvclBoYWJsZXQsIGNzc0ZvclBob25lOwp2YXIgaW5pdF9kb210b29sc19jc3NfYnJlYWtwb2ludHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY3NzLmJyZWFrcG9pbnRzLmpzIigpIHsKICAgIGluaXRfZG9tdG9vbHNfY2xhc3Nlc19kb210b29scygpOwogICAgaW5pdF9saXQoKTsKICAgIGRlc2t0b3AgPSAxNjAwOwogICAgbm90ZWJvb2sgPSAxMjQwOwogICAgdGFibGV0ID0gMTAyNDsKICAgIHBoYWJsZXQgPSA2MDA7CiAgICBwaG9uZSA9IDQwMDsKICAgIGNzc0ZvckRlc2t0b3AgPSAoY3NzQXJnKSA9PiB7CiAgICAgIHJldHVybiByKGAKICAgIEBjb250YWluZXIgd2NjVG9vbHNWaWV3cG9ydCAobWluLXdpZHRoOiAke2Rlc2t0b3B9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWluLXdpZHRoOiAke2Rlc2t0b3B9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICBgKTsKICAgIH07CiAgICBjc3NGb3JOb3RlYm9vayA9IChjc3NBcmcpID0+IHsKICAgICAgcmV0dXJuIHIoYAogICAgQGNvbnRhaW5lciB3Y2NUb29sc1ZpZXdwb3J0IChtYXgtd2lkdGg6ICR7bm90ZWJvb2t9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke25vdGVib29rfXB4KSB7CiAgICAgICR7Y3NzQXJnLmNzc1RleHR9CiAgICB9CiAgYCk7CiAgICB9OwogICAgY3NzRm9yVGFibGV0ID0gKGNzc0FyZykgPT4gewogICAgICByZXR1cm4gcihgCiAgICBAY29udGFpbmVyIHdjY1Rvb2xzVmlld3BvcnQgKG1heC13aWR0aDogJHt0YWJsZXR9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke3RhYmxldH1weCkgewogICAgICAke2Nzc0FyZy5jc3NUZXh0fQogICAgfQogIGApOwogICAgfTsKICAgIGNzc0ZvclBoYWJsZXQgPSAoY3NzQXJnKSA9PiB7CiAgICAgIHJldHVybiByKGAKICAgIEBjb250YWluZXIgd2NjVG9vbHNWaWV3cG9ydCAobWF4LXdpZHRoOiAke3BoYWJsZXR9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke3BoYWJsZXR9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICBgKTsKICAgIH07CiAgICBjc3NGb3JQaG9uZSA9IChjc3NBcmcpID0+IHsKICAgICAgcmV0dXJuIHIoYAogICAgQGNvbnRhaW5lciB3Y2NUb29sc1ZpZXdwb3J0IChtYXgtd2lkdGg6ICR7cGhvbmV9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiAke3Bob25lfXB4KSB7CiAgICAgICR7Y3NzQXJnLmNzc1RleHR9CiAgICB9CiAgYCk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmNsYXNzZXMuc2Nyb2xsZXIuanMKdmFyIFNjcm9sbGVyOwp2YXIgaW5pdF9kb210b29sc19jbGFzc2VzX3Njcm9sbGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmNsYXNzZXMuc2Nyb2xsZXIuanMiKCkgewogICAgaW5pdF9kb210b29sc19wbHVnaW5zKCk7CiAgICBTY3JvbGxlciA9IGNsYXNzIHsKICAgICAgZG9tdG9vbHNJbnN0YW5jZTsKICAgICAgLy8gQXJyYXkgdG8gc3RvcmUgc2Nyb2xsIGNhbGxiYWNrIGZ1bmN0aW9ucy4KICAgICAgc2Nyb2xsQ2FsbGJhY2tzID0gW107CiAgICAgIC8vIExlbmlzIGluc3RhbmNlIChpZiBhY3RpdmF0ZWQpIG9yIG51bGwuCiAgICAgIGxlbmlzSW5zdGFuY2UgPSBudWxsOwogICAgICAvLyBCb3VuZCBoYW5kbGVycyB0byBhbGxvdyByZW1vdmFsIGZyb20gZXZlbnQgbGlzdGVuZXJzLgogICAgICBoYW5kbGVOYXRpdmVTY3JvbGwgPSAoZXZlbnQpID0+IHsKICAgICAgICB0aGlzLmV4ZWN1dGVTY3JvbGxDYWxsYmFja3MoKTsKICAgICAgfTsKICAgICAgaGFuZGxlTGVuaXNTY3JvbGwgPSAoaW5mbykgPT4gewogICAgICAgIHRoaXMuZXhlY3V0ZVNjcm9sbENhbGxiYWNrcygpOwogICAgICB9OwogICAgICBjb25zdHJ1Y3Rvcihkb210b29sc0luc3RhbmNlQXJnKSB7CiAgICAgICAgdGhpcy5kb210b29sc0luc3RhbmNlID0gZG9tdG9vbHNJbnN0YW5jZUFyZzsKICAgICAgICB0aGlzLmF0dGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCk7CiAgICAgIH0KICAgICAgc3dlZXRTY3JvbGxlciA9IG5ldyBpbXBvcnRfc3dlZXRfc2Nyb2xsLmRlZmF1bHQoe30pOwogICAgICAvKioKICAgICAgICogU2Nyb2xscyB0byBhIGdpdmVuIGVsZW1lbnQgd2l0aCBvcHRpb25zLgogICAgICAgKi8KICAgICAgYXN5bmMgdG9FbGVtZW50KGVsZW1lbnRBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICB0aGlzLnN3ZWV0U2Nyb2xsZXIudG9FbGVtZW50KGVsZW1lbnRBcmcsIG9wdGlvbnNBcmcpOwogICAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3Iob3B0aW9uc0FyZy5kdXJhdGlvbik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIERldGVjdHMgd2hldGhlciBuYXRpdmUgc21vb3RoIHNjcm9sbGluZyBpcyBlbmFibGVkLgogICAgICAgKi8KICAgICAgYXN5bmMgZGV0ZWN0TmF0aXZlU21vb3RoU2Nyb2xsKCkgewogICAgICAgIGNvbnN0IGRvbmUgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICBjb25zdCBzYW1wbGVTaXplID0gMTAwOwogICAgICAgIGNvbnN0IGFjY2VwdGFibGVEZWx0YURpZmZlcmVuY2UgPSAzOwogICAgICAgIGNvbnN0IG1pbmltdW1TbW9vdGhSYXRpbyA9IDAuNzU7CiAgICAgICAgY29uc3QgZXZlbnREZWx0YXMgPSBbXTsKICAgICAgICBmdW5jdGlvbiBvbldoZWVsKGV2ZW50KSB7CiAgICAgICAgICBldmVudERlbHRhcy5wdXNoKGV2ZW50LmRlbHRhWSk7CiAgICAgICAgICBpZiAoZXZlbnREZWx0YXMubGVuZ3RoID49IHNhbXBsZVNpemUpIHsKICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIiwgb25XaGVlbCk7CiAgICAgICAgICAgIGFuYWx5emVFdmVudHMoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gYW5hbHl6ZUV2ZW50cygpIHsKICAgICAgICAgIGNvbnN0IHRvdGFsRGlmZnMgPSBldmVudERlbHRhcy5sZW5ndGggLSAxOwogICAgICAgICAgbGV0IHNtYWxsRGlmZkNvdW50ID0gMDsKICAgICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHRvdGFsRGlmZnM7IGkxMSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhldmVudERlbHRhc1tpMTEgKyAxXSAtIGV2ZW50RGVsdGFzW2kxMV0pOwogICAgICAgICAgICBpZiAoZGlmZiA8PSBhY2NlcHRhYmxlRGVsdGFEaWZmZXJlbmNlKSB7CiAgICAgICAgICAgICAgc21hbGxEaWZmQ291bnQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgY29uc3Qgc21vb3RoUmF0aW8gPSBzbWFsbERpZmZDb3VudCAvIHRvdGFsRGlmZnM7CiAgICAgICAgICBpZiAoc21vb3RoUmF0aW8gPj0gbWluaW11bVNtb290aFJhdGlvKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTbW9vdGggc2Nyb2xsaW5nIGRldGVjdGVkLiIpOwogICAgICAgICAgICBkb25lLnJlc29sdmUodHJ1ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLmxvZygiU21vb3RoIHNjcm9sbGluZyBOT1QgZGV0ZWN0ZWQuIik7CiAgICAgICAgICAgIGRvbmUucmVzb2x2ZShmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsIG9uV2hlZWwpOwogICAgICAgIHJldHVybiBkb25lLnByb21pc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEVuYWJsZXMgTGVuaXMgc2Nyb2xsaW5nLgogICAgICAgKiBJZiBvcHRpb25zQXJnLmRpc2FibGVPbk5hdGl2ZVNtb290aFNjcm9sbCBpcyB0cnVlIGFuZCBuYXRpdmUgc21vb3RoIHNjcm9sbGluZyBpcyBkZXRlY3RlZCwKICAgICAgICogTGVuaXMgd2lsbCBiZSBkZXN0cm95ZWQgaW1tZWRpYXRlbHkuCiAgICAgICAqLwogICAgICBhc3luYyBlbmFibGVMZW5pc1Njcm9sbChvcHRpb25zQXJnKSB7CiAgICAgICAgY29uc3QgbGVuaXMgPSBuZXcgTGVuaXMoewogICAgICAgICAgYXV0b1JhZjogdHJ1ZQogICAgICAgIH0pOwogICAgICAgIGlmIChvcHRpb25zQXJnPy5kaXNhYmxlT25OYXRpdmVTbW9vdGhTY3JvbGwpIHsKICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmRldGVjdE5hdGl2ZVNtb290aFNjcm9sbCgpKSB7CiAgICAgICAgICAgIGxlbmlzLmRlc3Ryb3koKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmxlbmlzSW5zdGFuY2UgPSBsZW5pczsKICAgICAgICB0aGlzLmRldGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCk7CiAgICAgICAgdGhpcy5hdHRhY2hMZW5pc1Njcm9sbExpc3RlbmVyKCk7CiAgICAgICAgY29uc3Qgb3JpZ2luYWxEZXN0cm95ID0gbGVuaXMuZGVzdHJveS5iaW5kKGxlbmlzKTsKICAgICAgICBsZW5pcy5kZXN0cm95ID0gKCkgPT4gewogICAgICAgICAgb3JpZ2luYWxEZXN0cm95KCk7CiAgICAgICAgICB0aGlzLmRldGFjaExlbmlzU2Nyb2xsTGlzdGVuZXIoKTsKICAgICAgICAgIHRoaXMuYXR0YWNoTmF0aXZlU2Nyb2xsTGlzdGVuZXIoKTsKICAgICAgICAgIHRoaXMubGVuaXNJbnN0YW5jZSA9IG51bGw7CiAgICAgICAgfTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWQgb24gc2Nyb2xsLgogICAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBleGVjdXRlIG9uIGVhY2ggc2Nyb2xsIGV2ZW50LgogICAgICAgKi8KICAgICAgb25TY3JvbGwoY2FsbGJhY2spIHsKICAgICAgICB0aGlzLnNjcm9sbENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogRXhlY3V0ZXMgYWxsIHJlZ2lzdGVyZWQgc2Nyb2xsIGNhbGxiYWNrcyBjb25jdXJyZW50bHkuCiAgICAgICAqLwogICAgICBleGVjdXRlU2Nyb2xsQ2FsbGJhY2tzKCkgewogICAgICAgIHRoaXMuc2Nyb2xsQ2FsbGJhY2tzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjYWxsYmFjaygpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgaW4gc2Nyb2xsIGNhbGxiYWNrOiIsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQXR0YWNoZXMgdGhlIG5hdGl2ZSBzY3JvbGwgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAqLwogICAgICBhdHRhY2hOYXRpdmVTY3JvbGxMaXN0ZW5lcigpIHsKICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5oYW5kbGVOYXRpdmVTY3JvbGwpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBEZXRhY2hlcyB0aGUgbmF0aXZlIHNjcm9sbCBldmVudCBsaXN0ZW5lci4KICAgICAgICovCiAgICAgIGRldGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCkgewogICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLmhhbmRsZU5hdGl2ZVNjcm9sbCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEF0dGFjaGVzIHRoZSBMZW5pcyBzY3JvbGwgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAqLwogICAgICBhdHRhY2hMZW5pc1Njcm9sbExpc3RlbmVyKCkgewogICAgICAgIGlmICh0aGlzLmxlbmlzSW5zdGFuY2UpIHsKICAgICAgICAgIHRoaXMubGVuaXNJbnN0YW5jZS5vbigic2Nyb2xsIiwgdGhpcy5oYW5kbGVMZW5pc1Njcm9sbCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBEZXRhY2hlcyB0aGUgTGVuaXMgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyLgogICAgICAgKi8KICAgICAgZGV0YWNoTGVuaXNTY3JvbGxMaXN0ZW5lcigpIHsKICAgICAgICBpZiAodGhpcy5sZW5pc0luc3RhbmNlKSB7CiAgICAgICAgICB0aGlzLmxlbmlzSW5zdGFuY2Uub2ZmKCJzY3JvbGwiLCB0aGlzLmhhbmRsZUxlbmlzU2Nyb2xsKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy50aGVtZW1hbmFnZXIuanMKdmFyIFRoZW1lTWFuYWdlcjsKdmFyIGluaXRfZG9tdG9vbHNfY2xhc3Nlc190aGVtZW1hbmFnZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy50aGVtZW1hbmFnZXIuanMiKCkgewogICAgaW5pdF9kb210b29sc19jbGFzc2VzX2RvbXRvb2xzKCk7CiAgICBpbml0X2RvbXRvb2xzX3BsdWdpbnMoKTsKICAgIFRoZW1lTWFuYWdlciA9IGNsYXNzIHsKICAgICAgZG9tdG9vbHNSZWY7CiAgICAgIGdvQnJpZ2h0Qm9vbGVhbiA9IGZhbHNlOwogICAgICBwcmVmZXJyZWRDb2xvclNjaGVtZU1lZGlhTWF0Y2ggPSB3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiKTsKICAgICAgdGhlbWVPYnNlcnZhYmxlID0gbmV3IGRpc3RfdHNfZXhwb3J0czIucnhqcy5SZXBsYXlTdWJqZWN0KDEpOwogICAgICBjb25zdHJ1Y3Rvcihkb210b29sc1JlZkFyZykgewogICAgICAgIHRoaXMuZG9tdG9vbHNSZWYgPSBkb210b29sc1JlZkFyZzsKICAgICAgICB0aGlzLmdvQnJpZ2h0Qm9vbGVhbiA9IHRoaXMucHJlZmVycmVkQ29sb3JTY2hlbWVNZWRpYU1hdGNoLm1hdGNoZXM7CiAgICAgICAgdGhpcy5wcmVmZXJyZWRDb2xvclNjaGVtZU1lZGlhTWF0Y2guYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50QXJnKSA9PiB7CiAgICAgICAgICB0aGlzLmdvQnJpZ2h0Qm9vbGVhbiA9IGV2ZW50QXJnLm1hdGNoZXM7CiAgICAgICAgICB0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy51cGRhdGVBbGxDb25uZWN0ZWRFbGVtZW50cygpOwogICAgICB9CiAgICAgIGFzeW5jIGVuYWJsZUF1dG9tYXRpY0dsb2JhbFRoZW1lQ2hhbmdlKCkgewogICAgICAgIGlmIChkb2N1bWVudC5ib2R5ICYmIGRvY3VtZW50LmJvZHkuc3R5bGUpIHsKICAgICAgICAgIHRoaXMudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSh7CiAgICAgICAgICAgIG5leHQ6IChnb0JyaWdodCkgPT4gewogICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZCA9IGdvQnJpZ2h0ID8gIiNmZmYiIDogIiMwMDAiOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgdXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKSB7CiAgICAgICAgdGhpcy50aGVtZU9ic2VydmFibGUubmV4dCh0aGlzLmdvQnJpZ2h0Qm9vbGVhbik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHNldCB0aGUgdGhlbWUgb2YgdGhlIHdlYnNpdGUgdG8gYnJpZ2h0CiAgICAgICAqLwogICAgICBnb0JyaWdodCgpIHsKICAgICAgICB0aGlzLmdvQnJpZ2h0Qm9vbGVhbiA9IHRydWU7CiAgICAgICAgdGhpcy51cGRhdGVBbGxDb25uZWN0ZWRFbGVtZW50cygpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBzZXQgdGhlIHRoZW1lIG9mIHRoZSB3ZWJzaXRlIHRvIGRhcmsKICAgICAgICovCiAgICAgIGdvRGFyaygpIHsKICAgICAgICB0aGlzLmdvQnJpZ2h0Qm9vbGVhbiA9IGZhbHNlOwogICAgICAgIHRoaXMudXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc2ltcGx5IHRvZ2dsZSBiZXR3ZWVuIGJyaWdodCBhbmQgZGFyawogICAgICAgKi8KICAgICAgdG9nZ2xlRGFya0JyaWdodCgpIHsKICAgICAgICB0aGlzLmdvQnJpZ2h0Qm9vbGVhbiA9ICF0aGlzLmdvQnJpZ2h0Qm9vbGVhbjsKICAgICAgICB0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy5rZXlib2FyZC5qcwp2YXIgS2V5LCBLZXlib2FyZDsKdmFyIGluaXRfZG9tdG9vbHNfY2xhc3Nlc19rZXlib2FyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jbGFzc2VzLmtleWJvYXJkLmpzIigpIHsKICAgIGluaXRfZG9tdG9vbHNfcGx1Z2lucygpOwogICAgKGZ1bmN0aW9uKEtleTIpIHsKICAgICAgS2V5MltLZXkyWyJCYWNrc3BhY2UiXSA9IDhdID0gIkJhY2tzcGFjZSI7CiAgICAgIEtleTJbS2V5MlsiVGFiIl0gPSA5XSA9ICJUYWIiOwogICAgICBLZXkyW0tleTJbIkVudGVyIl0gPSAxM10gPSAiRW50ZXIiOwogICAgICBLZXkyW0tleTJbIlNoaWZ0Il0gPSAxNl0gPSAiU2hpZnQiOwogICAgICBLZXkyW0tleTJbIkN0cmwiXSA9IDE3XSA9ICJDdHJsIjsKICAgICAgS2V5MltLZXkyWyJBbHQiXSA9IDE4XSA9ICJBbHQiOwogICAgICBLZXkyW0tleTJbIlBhdXNlQnJlYWsiXSA9IDE5XSA9ICJQYXVzZUJyZWFrIjsKICAgICAgS2V5MltLZXkyWyJDYXBzTG9jayJdID0gMjBdID0gIkNhcHNMb2NrIjsKICAgICAgS2V5MltLZXkyWyJFc2NhcGUiXSA9IDI3XSA9ICJFc2NhcGUiOwogICAgICBLZXkyW0tleTJbIlNwYWNlIl0gPSAzMl0gPSAiU3BhY2UiOwogICAgICBLZXkyW0tleTJbIlBhZ2VVcCJdID0gMzNdID0gIlBhZ2VVcCI7CiAgICAgIEtleTJbS2V5MlsiUGFnZURvd24iXSA9IDM0XSA9ICJQYWdlRG93biI7CiAgICAgIEtleTJbS2V5MlsiRW5kIl0gPSAzNV0gPSAiRW5kIjsKICAgICAgS2V5MltLZXkyWyJIb21lIl0gPSAzNl0gPSAiSG9tZSI7CiAgICAgIEtleTJbS2V5MlsiTGVmdEFycm93Il0gPSAzN10gPSAiTGVmdEFycm93IjsKICAgICAgS2V5MltLZXkyWyJVcEFycm93Il0gPSAzOF0gPSAiVXBBcnJvdyI7CiAgICAgIEtleTJbS2V5MlsiUmlnaHRBcnJvdyJdID0gMzldID0gIlJpZ2h0QXJyb3ciOwogICAgICBLZXkyW0tleTJbIkRvd25BcnJvdyJdID0gNDBdID0gIkRvd25BcnJvdyI7CiAgICAgIEtleTJbS2V5MlsiSW5zZXJ0Il0gPSA0NV0gPSAiSW5zZXJ0IjsKICAgICAgS2V5MltLZXkyWyJEZWxldGUiXSA9IDQ2XSA9ICJEZWxldGUiOwogICAgICBLZXkyW0tleTJbIlplcm8iXSA9IDQ4XSA9ICJaZXJvIjsKICAgICAgS2V5MltLZXkyWyJDbG9zZWRQYXJlbiJdID0gNDhdID0gIkNsb3NlZFBhcmVuIjsKICAgICAgS2V5MltLZXkyWyJPbmUiXSA9IDQ5XSA9ICJPbmUiOwogICAgICBLZXkyW0tleTJbIkV4Y2xhbWF0aW9uTWFyayJdID0gNDldID0gIkV4Y2xhbWF0aW9uTWFyayI7CiAgICAgIEtleTJbS2V5MlsiVHdvIl0gPSA1MF0gPSAiVHdvIjsKICAgICAgS2V5MltLZXkyWyJBdFNpZ24iXSA9IDUwXSA9ICJBdFNpZ24iOwogICAgICBLZXkyW0tleTJbIlRocmVlIl0gPSA1MV0gPSAiVGhyZWUiOwogICAgICBLZXkyW0tleTJbIlBvdW5kU2lnbiJdID0gNTFdID0gIlBvdW5kU2lnbiI7CiAgICAgIEtleTJbS2V5MlsiSGFzaCJdID0gNTFdID0gIkhhc2giOwogICAgICBLZXkyW0tleTJbIkZvdXIiXSA9IDUyXSA9ICJGb3VyIjsKICAgICAgS2V5MltLZXkyWyJEb2xsYXJTaWduIl0gPSA1Ml0gPSAiRG9sbGFyU2lnbiI7CiAgICAgIEtleTJbS2V5MlsiRml2ZSJdID0gNTNdID0gIkZpdmUiOwogICAgICBLZXkyW0tleTJbIlBlcmNlbnRTaWduIl0gPSA1M10gPSAiUGVyY2VudFNpZ24iOwogICAgICBLZXkyW0tleTJbIlNpeCJdID0gNTRdID0gIlNpeCI7CiAgICAgIEtleTJbS2V5MlsiQ2FyZXQiXSA9IDU0XSA9ICJDYXJldCI7CiAgICAgIEtleTJbS2V5MlsiSGF0Il0gPSA1NF0gPSAiSGF0IjsKICAgICAgS2V5MltLZXkyWyJTZXZlbiJdID0gNTVdID0gIlNldmVuIjsKICAgICAgS2V5MltLZXkyWyJBbXBlcnNhbmQiXSA9IDU1XSA9ICJBbXBlcnNhbmQiOwogICAgICBLZXkyW0tleTJbIkVpZ2h0Il0gPSA1Nl0gPSAiRWlnaHQiOwogICAgICBLZXkyW0tleTJbIlN0YXIiXSA9IDU2XSA9ICJTdGFyIjsKICAgICAgS2V5MltLZXkyWyJBc3RlcmlrIl0gPSA1Nl0gPSAiQXN0ZXJpayI7CiAgICAgIEtleTJbS2V5MlsiTmluZSJdID0gNTddID0gIk5pbmUiOwogICAgICBLZXkyW0tleTJbIk9wZW5QYXJlbiJdID0gNTddID0gIk9wZW5QYXJlbiI7CiAgICAgIEtleTJbS2V5MlsiQSJdID0gNjVdID0gIkEiOwogICAgICBLZXkyW0tleTJbIkIiXSA9IDY2XSA9ICJCIjsKICAgICAgS2V5MltLZXkyWyJDIl0gPSA2N10gPSAiQyI7CiAgICAgIEtleTJbS2V5MlsiRCJdID0gNjhdID0gIkQiOwogICAgICBLZXkyW0tleTJbIkUiXSA9IDY5XSA9ICJFIjsKICAgICAgS2V5MltLZXkyWyJGIl0gPSA3MF0gPSAiRiI7CiAgICAgIEtleTJbS2V5MlsiRyJdID0gNzFdID0gIkciOwogICAgICBLZXkyW0tleTJbIkgiXSA9IDcyXSA9ICJIIjsKICAgICAgS2V5MltLZXkyWyJJIl0gPSA3M10gPSAiSSI7CiAgICAgIEtleTJbS2V5MlsiSiJdID0gNzRdID0gIkoiOwogICAgICBLZXkyW0tleTJbIksiXSA9IDc1XSA9ICJLIjsKICAgICAgS2V5MltLZXkyWyJMIl0gPSA3Nl0gPSAiTCI7CiAgICAgIEtleTJbS2V5MlsiTSJdID0gNzddID0gIk0iOwogICAgICBLZXkyW0tleTJbIk4iXSA9IDc4XSA9ICJOIjsKICAgICAgS2V5MltLZXkyWyJPIl0gPSA3OV0gPSAiTyI7CiAgICAgIEtleTJbS2V5MlsiUCJdID0gODBdID0gIlAiOwogICAgICBLZXkyW0tleTJbIlEiXSA9IDgxXSA9ICJRIjsKICAgICAgS2V5MltLZXkyWyJSIl0gPSA4Ml0gPSAiUiI7CiAgICAgIEtleTJbS2V5MlsiUyJdID0gODNdID0gIlMiOwogICAgICBLZXkyW0tleTJbIlQiXSA9IDg0XSA9ICJUIjsKICAgICAgS2V5MltLZXkyWyJVIl0gPSA4NV0gPSAiVSI7CiAgICAgIEtleTJbS2V5MlsiViJdID0gODZdID0gIlYiOwogICAgICBLZXkyW0tleTJbIlciXSA9IDg3XSA9ICJXIjsKICAgICAgS2V5MltLZXkyWyJYIl0gPSA4OF0gPSAiWCI7CiAgICAgIEtleTJbS2V5MlsiWSJdID0gODldID0gIlkiOwogICAgICBLZXkyW0tleTJbIloiXSA9IDkwXSA9ICJaIjsKICAgICAgS2V5MltLZXkyWyJMZWZ0V2luZG93S2V5Il0gPSA5MV0gPSAiTGVmdFdpbmRvd0tleSI7CiAgICAgIEtleTJbS2V5MlsiUmlnaHRXaW5kb3dLZXkiXSA9IDkyXSA9ICJSaWdodFdpbmRvd0tleSI7CiAgICAgIEtleTJbS2V5MlsiU2VsZWN0S2V5Il0gPSA5M10gPSAiU2VsZWN0S2V5IjsKICAgICAgS2V5MltLZXkyWyJOdW1wYWQwIl0gPSA5Nl0gPSAiTnVtcGFkMCI7CiAgICAgIEtleTJbS2V5MlsiTnVtcGFkMSJdID0gOTddID0gIk51bXBhZDEiOwogICAgICBLZXkyW0tleTJbIk51bXBhZDIiXSA9IDk4XSA9ICJOdW1wYWQyIjsKICAgICAgS2V5MltLZXkyWyJOdW1wYWQzIl0gPSA5OV0gPSAiTnVtcGFkMyI7CiAgICAgIEtleTJbS2V5MlsiTnVtcGFkNCJdID0gMTAwXSA9ICJOdW1wYWQ0IjsKICAgICAgS2V5MltLZXkyWyJOdW1wYWQ1Il0gPSAxMDFdID0gIk51bXBhZDUiOwogICAgICBLZXkyW0tleTJbIk51bXBhZDYiXSA9IDEwMl0gPSAiTnVtcGFkNiI7CiAgICAgIEtleTJbS2V5MlsiTnVtcGFkNyJdID0gMTAzXSA9ICJOdW1wYWQ3IjsKICAgICAgS2V5MltLZXkyWyJOdW1wYWQ4Il0gPSAxMDRdID0gIk51bXBhZDgiOwogICAgICBLZXkyW0tleTJbIk51bXBhZDkiXSA9IDEwNV0gPSAiTnVtcGFkOSI7CiAgICAgIEtleTJbS2V5MlsiTXVsdGlwbHkiXSA9IDEwNl0gPSAiTXVsdGlwbHkiOwogICAgICBLZXkyW0tleTJbIkFkZCJdID0gMTA3XSA9ICJBZGQiOwogICAgICBLZXkyW0tleTJbIlN1YnRyYWN0Il0gPSAxMDldID0gIlN1YnRyYWN0IjsKICAgICAgS2V5MltLZXkyWyJEZWNpbWFsUG9pbnQiXSA9IDExMF0gPSAiRGVjaW1hbFBvaW50IjsKICAgICAgS2V5MltLZXkyWyJEaXZpZGUiXSA9IDExMV0gPSAiRGl2aWRlIjsKICAgICAgS2V5MltLZXkyWyJGMSJdID0gMTEyXSA9ICJGMSI7CiAgICAgIEtleTJbS2V5MlsiRjIiXSA9IDExM10gPSAiRjIiOwogICAgICBLZXkyW0tleTJbIkYzIl0gPSAxMTRdID0gIkYzIjsKICAgICAgS2V5MltLZXkyWyJGNCJdID0gMTE1XSA9ICJGNCI7CiAgICAgIEtleTJbS2V5MlsiRjUiXSA9IDExNl0gPSAiRjUiOwogICAgICBLZXkyW0tleTJbIkY2Il0gPSAxMTddID0gIkY2IjsKICAgICAgS2V5MltLZXkyWyJGNyJdID0gMTE4XSA9ICJGNyI7CiAgICAgIEtleTJbS2V5MlsiRjgiXSA9IDExOV0gPSAiRjgiOwogICAgICBLZXkyW0tleTJbIkY5Il0gPSAxMjBdID0gIkY5IjsKICAgICAgS2V5MltLZXkyWyJGMTAiXSA9IDEyMV0gPSAiRjEwIjsKICAgICAgS2V5MltLZXkyWyJGMTEiXSA9IDEyMl0gPSAiRjExIjsKICAgICAgS2V5MltLZXkyWyJGMTIiXSA9IDEyM10gPSAiRjEyIjsKICAgICAgS2V5MltLZXkyWyJOdW1Mb2NrIl0gPSAxNDRdID0gIk51bUxvY2siOwogICAgICBLZXkyW0tleTJbIlNjcm9sbExvY2siXSA9IDE0NV0gPSAiU2Nyb2xsTG9jayI7CiAgICAgIEtleTJbS2V5MlsiU2VtaUNvbG9uIl0gPSAxODZdID0gIlNlbWlDb2xvbiI7CiAgICAgIEtleTJbS2V5MlsiRXF1YWxzIl0gPSAxODddID0gIkVxdWFscyI7CiAgICAgIEtleTJbS2V5MlsiQ29tbWEiXSA9IDE4OF0gPSAiQ29tbWEiOwogICAgICBLZXkyW0tleTJbIkRhc2giXSA9IDE4OV0gPSAiRGFzaCI7CiAgICAgIEtleTJbS2V5MlsiUGVyaW9kIl0gPSAxOTBdID0gIlBlcmlvZCI7CiAgICAgIEtleTJbS2V5MlsiVW5kZXJTY29yZSJdID0gMTg5XSA9ICJVbmRlclNjb3JlIjsKICAgICAgS2V5MltLZXkyWyJQbHVzU2lnbiJdID0gMTg3XSA9ICJQbHVzU2lnbiI7CiAgICAgIEtleTJbS2V5MlsiRm9yd2FyZFNsYXNoIl0gPSAxOTFdID0gIkZvcndhcmRTbGFzaCI7CiAgICAgIEtleTJbS2V5MlsiVGlsZGUiXSA9IDE5Ml0gPSAiVGlsZGUiOwogICAgICBLZXkyW0tleTJbIkdyYXZlQWNjZW50Il0gPSAxOTJdID0gIkdyYXZlQWNjZW50IjsKICAgICAgS2V5MltLZXkyWyJPcGVuQnJhY2tldCJdID0gMjE5XSA9ICJPcGVuQnJhY2tldCI7CiAgICAgIEtleTJbS2V5MlsiQ2xvc2VkQnJhY2tldCJdID0gMjIxXSA9ICJDbG9zZWRCcmFja2V0IjsKICAgICAgS2V5MltLZXkyWyJRdW90ZSJdID0gMjIyXSA9ICJRdW90ZSI7CiAgICB9KShLZXkgfHwgKEtleSA9IHt9KSk7CiAgICBLZXlib2FyZCA9IGNsYXNzIHsKICAgICAgZG9tTm9kZTsKICAgICAgbWFwQ29tYm9zVG9IYW5kbGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIHByZXNzZWRLZXlzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgICAgY29uc3RydWN0b3IoZG9tTm9kZSkgewogICAgICAgIHRoaXMuZG9tTm9kZSA9IGRvbU5vZGU7CiAgICAgICAgdGhpcy5zdGFydExpc3RlbmluZygpOwogICAgICB9CiAgICAgIGtleUVudW0gPSBLZXk7CiAgICAgIG9uKGtleXMyKSB7CiAgICAgICAgY29uc3Qgc3ViamVjdCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLnJ4anMuU3ViamVjdCgpOwogICAgICAgIHRoaXMucmVnaXN0ZXJLZXlzKGtleXMyLCBzdWJqZWN0KTsKICAgICAgICByZXR1cm4gc3ViamVjdDsKICAgICAgfQogICAgICB0cmlnZ2VyS2V5UHJlc3Moa2V5c0FyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBrZXlzQXJnKSB7CiAgICAgICAgICB0aGlzLnByZXNzZWRLZXlzLmFkZChrZXkyKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5jaGVja01hdGNoaW5nS2V5Ym9hcmRTdWJqZWN0cygpOwogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBrZXlzQXJnKSB7CiAgICAgICAgICB0aGlzLnByZXNzZWRLZXlzLmRlbGV0ZShrZXkyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhcnRMaXN0ZW5pbmcoKSB7CiAgICAgICAgdGhpcy5kb21Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLmhhbmRsZUtleURvd24pOwogICAgICAgIHRoaXMuZG9tTm9kZS5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsIHRoaXMuaGFuZGxlS2V5VXApOwogICAgICB9CiAgICAgIHN0b3BMaXN0ZW5pbmcoKSB7CiAgICAgICAgdGhpcy5kb21Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLmhhbmRsZUtleURvd24pOwogICAgICAgIHRoaXMuZG9tTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsIHRoaXMuaGFuZGxlS2V5VXApOwogICAgICB9CiAgICAgIGNsZWFyKCkgewogICAgICAgIHRoaXMuc3RvcExpc3RlbmluZygpOwogICAgICAgIHRoaXMubWFwQ29tYm9zVG9IYW5kbGVycy5jbGVhcigpOwogICAgICAgIHRoaXMucHJlc3NlZEtleXMuY2xlYXIoKTsKICAgICAgfQogICAgICBoYW5kbGVLZXlEb3duID0gKGV2ZW50KSA9PiB7CiAgICAgICAgdGhpcy5wcmVzc2VkS2V5cy5hZGQoZXZlbnQua2V5Q29kZSk7CiAgICAgICAgdGhpcy5jaGVja01hdGNoaW5nS2V5Ym9hcmRTdWJqZWN0cyhldmVudCk7CiAgICAgIH07CiAgICAgIGNoZWNrTWF0Y2hpbmdLZXlib2FyZFN1YmplY3RzKHBheWxvYWRBcmcpIHsKICAgICAgICB0aGlzLm1hcENvbWJvc1RvSGFuZGxlcnMuZm9yRWFjaCgoc3ViamVjdEFyZywga2V5c0FyZykgPT4gewogICAgICAgICAgaWYgKHRoaXMuYXJlQWxsS2V5c1ByZXNzZWQoa2V5c0FyZykpIHsKICAgICAgICAgICAgc3ViamVjdEFyZy5uZXh0KHBheWxvYWRBcmcpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGhhbmRsZUtleVVwID0gKGV2ZW50KSA9PiB7CiAgICAgICAgdGhpcy5wcmVzc2VkS2V5cy5kZWxldGUoZXZlbnQua2V5Q29kZSk7CiAgICAgIH07CiAgICAgIGFyZUFsbEtleXNQcmVzc2VkKGtleXNBcmcpIHsKICAgICAgICBsZXQgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICBrZXlzQXJnLmZvckVhY2goKGtleTIpID0+IHsKICAgICAgICAgIGlmICghdGhpcy5wcmVzc2VkS2V5cy5oYXMoa2V5MikpIHsKICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICByZWdpc3RlcktleXMoa2V5c0FyZywgc3ViamVjdEFyZykgewogICAgICAgIGlmICghdGhpcy5tYXBDb21ib3NUb0hhbmRsZXJzLmhhcyhrZXlzQXJnKSkgewogICAgICAgICAgdGhpcy5tYXBDb21ib3NUb0hhbmRsZXJzLnNldChrZXlzQXJnLCBzdWJqZWN0QXJnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3Qgc3ViamVjdCA9IHRoaXMubWFwQ29tYm9zVG9IYW5kbGVycy5nZXQoa2V5c0FyZyk7CiAgICAgICAgICByZXR1cm4gc3ViamVjdDsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy5qcwp2YXIgRG9tVG9vbHM7CnZhciBpbml0X2RvbXRvb2xzX2NsYXNzZXNfZG9tdG9vbHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy5kb210b29scy5qcyIoKSB7CiAgICBpbml0X2RvbXRvb2xzX3BsdWdpbnMoKTsKICAgIGluaXRfZG9tdG9vbHNfY3NzX2JyZWFrcG9pbnRzKCk7CiAgICBpbml0X2RvbXRvb2xzX2NsYXNzZXNfc2Nyb2xsZXIoKTsKICAgIGluaXRfZGlzdF90czI0KCk7CiAgICBpbml0X2RvbXRvb2xzX2NsYXNzZXNfdGhlbWVtYW5hZ2VyKCk7CiAgICBpbml0X2RvbXRvb2xzX2NsYXNzZXNfa2V5Ym9hcmQoKTsKICAgIERvbVRvb2xzID0gY2xhc3MgX0RvbVRvb2xzIHsKICAgICAgLy8gPT09PT09CiAgICAgIC8vIFNUQVRJQwogICAgICAvLyA9PT09PT0KICAgICAgc3RhdGljIGluaXRpYWxpemF0aW9uUHJvbWlzZSA9IG51bGw7CiAgICAgIC8qKgogICAgICAgKiBzZXR1cHMgZG9tdG9vbHMKICAgICAgICovCiAgICAgIHN0YXRpYyBhc3luYyBzZXR1cERvbVRvb2xzKG9wdGlvbnNBcmcgPSB7fSkgewogICAgICAgIGlmICghb3B0aW9uc0FyZy5pZ25vcmVHbG9iYWwgJiYgX0RvbVRvb2xzLmluaXRpYWxpemF0aW9uUHJvbWlzZSkgewogICAgICAgICAgcmV0dXJuIGF3YWl0IF9Eb21Ub29scy5pbml0aWFsaXphdGlvblByb21pc2U7CiAgICAgICAgfQogICAgICAgIGlmICghb3B0aW9uc0FyZy5pZ25vcmVHbG9iYWwpIHsKICAgICAgICAgIF9Eb21Ub29scy5pbml0aWFsaXphdGlvblByb21pc2UgPSAoYXN5bmMgKCkgPT4gewogICAgICAgICAgICBsZXQgZG9tVG9vbHNJbnN0YW5jZTsKICAgICAgICAgICAgaWYgKCFnbG9iYWxUaGlzLmRlZXNEb21Ub29scykgewogICAgICAgICAgICAgIGdsb2JhbFRoaXMuZGVlc0RvbVRvb2xzID0gbmV3IF9Eb21Ub29scyhvcHRpb25zQXJnKTsKICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlID0gZ2xvYmFsVGhpcy5kZWVzRG9tVG9vbHM7CiAgICAgICAgICAgICAgY29uc3QgcmVhZHlTdGF0ZUNoYW5nZWRGdW5jID0gKCkgPT4gewogICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJpbnRlcmFjdGl2ZSIgfHwgZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIikgewogICAgICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlLmVsZW1lbnRzLmhlYWRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaGVhZCIpOwogICAgICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlLmVsZW1lbnRzLmJvZHlFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpOwogICAgICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlLmtleWJvYXJkID0gbmV3IEtleWJvYXJkKGRvY3VtZW50LmJvZHkpOwogICAgICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlLmRvbVJlYWR5LnJlc29sdmUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiaW50ZXJhY3RpdmUiIHx8IGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICAgICAgICAgIHJlYWR5U3RhdGVDaGFuZ2VkRnVuYygpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIiwgcmVhZHlTdGF0ZUNoYW5nZWRGdW5jKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZG9tVG9vbHNJbnN0YW5jZS5kb21Ub29sc1JlYWR5LnJlc29sdmUoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlID0gZ2xvYmFsVGhpcy5kZWVzRG9tVG9vbHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXdhaXQgZG9tVG9vbHNJbnN0YW5jZS5kb21Ub29sc1JlYWR5LnByb21pc2U7CiAgICAgICAgICAgIHJldHVybiBkb21Ub29sc0luc3RhbmNlOwogICAgICAgICAgfSkoKTsKICAgICAgICAgIHJldHVybiBhd2FpdCBfRG9tVG9vbHMuaW5pdGlhbGl6YXRpb25Qcm9taXNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBkb21Ub29sc0luc3RhbmNlID0gbmV3IF9Eb21Ub29scyhvcHRpb25zQXJnKTsKICAgICAgICAgIHJldHVybiBkb21Ub29sc0luc3RhbmNlOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogaWYgeW91IGNhbiwgdXNlIHRoZSBzdGF0aWMgYXN5c25jIC5zZXR1cERvbVRvb2xzKCkgZnVuY3Rpb24gaW5zdGVhZCBzaW5jZSBpdCBpcyBzYWZlciB0byB1c2UuCiAgICAgICAqLwogICAgICBzdGF0aWMgZ2V0R2xvYmFsRG9tVG9vbHNTeW5jKCkgewogICAgICAgIGNvbnN0IGdsb2JhbERvbVRvb2xzID0gZ2xvYmFsVGhpcy5kZWVzRG9tVG9vbHM7CiAgICAgICAgaWYgKCFnbG9iYWxEb21Ub29scykgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJZb3UgdHJpZWQgdG8gYWNjZXNzIGRvbXRvb2xzIHN5bmNocm9ub3VzbHkgdG9vIGVhcmx5Iik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBnbG9iYWxUaGlzLmRlZXNEb21Ub29sczsKICAgICAgfQogICAgICAvLyA9PT09PT09PQogICAgICAvLyBJTlNUQU5DRQogICAgICAvLyA9PT09PT09PQogICAgICAvLyBlbGVtZW50cwogICAgICBlbGVtZW50cyA9IHsKICAgICAgICBoZWFkRWxlbWVudDogbnVsbCwKICAgICAgICBib2R5RWxlbWVudDogbnVsbAogICAgICB9OwogICAgICB3ZWJzZXR1cCA9IG5ldyBXZWJTZXR1cCh7CiAgICAgICAgbWV0YU9iamVjdDogewogICAgICAgICAgdGl0bGU6ICJsb2FkaW5nLi4uIgogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHNtYXJ0c3RhdGUgPSBuZXcgZGlzdF90c19leHBvcnRzMTkuU21hcnRzdGF0ZSgpOwogICAgICBkb21Ub29sc1N0YXRlUGFydCA9IHRoaXMuc21hcnRzdGF0ZS5nZXRTdGF0ZVBhcnQoImRvbXRvb2xzIiwgewogICAgICAgIHZpcnR1YWxWaWV3cG9ydDogIm5hdGl2ZSIsCiAgICAgICAgand0OiBudWxsCiAgICAgIH0pOwogICAgICByb3V0ZXIgPSBuZXcgZGlzdF90c19leHBvcnRzMTguU21hcnRSb3V0ZXIoewogICAgICAgIGRlYnVnOiBmYWxzZQogICAgICB9KTsKICAgICAgY29udmVuaWVuY2UgPSB7CiAgICAgICAgdHlwZWRyZXF1ZXN0OiBkaXN0X3RzX2V4cG9ydHMxNSwKICAgICAgICBzbWFydGRlbGF5OiBkaXN0X3RzX2V4cG9ydHMzLAogICAgICAgIHNtYXJ0anNvbjogZGlzdF90c19leHBvcnRzMTIsCiAgICAgICAgc21hcnR1cmw6IGRpc3RfdHNfZXhwb3J0czIwCiAgICAgIH07CiAgICAgIGRlZXNDb21tcyA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxNi5EZWVzQ29tbXMoKTsKICAgICAgc2Nyb2xsZXIgPSBuZXcgU2Nyb2xsZXIodGhpcyk7CiAgICAgIHRoZW1lTWFuYWdlciA9IG5ldyBUaGVtZU1hbmFnZXIodGhpcyk7CiAgICAgIGtleWJvYXJkID0gbnVsbDsKICAgICAgLy8gSW5pdGlhbGl6ZWQgYWZ0ZXIgRE9NIHJlYWR5IHRvIGF2b2lkIGFjY2Vzc2luZyBkb2N1bWVudC5ib2R5IGJlZm9yZSBpdCBleGlzdHMKICAgICAgZG9tVG9vbHNSZWFkeSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICBkb21SZWFkeSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICBnbG9iYWxTdHlsZXNSZWFkeSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICBjb25zdHJ1Y3RvcihvcHRpb25zQXJnKSB7CiAgICAgIH0KICAgICAgcnVuT25jZVRyYWNrZXJTdHJpbmdNYXAgPSBuZXcgbGlrLlN0cmluZ21hcCgpOwogICAgICBydW5PbmNlUmVzdWx0TWFwID0gbmV3IGxpay5GYXN0TWFwKCk7CiAgICAgIHJ1bk9uY2VFcnJvck1hcCA9IG5ldyBsaWsuRmFzdE1hcCgpOwogICAgICAvKioKICAgICAgICogcnVuIGEgZnVuY3Rpb24gb25jZSBhbmQgYWx3YXlzIGdldCB0aGUgUHJvbWlzZSBvZiB0aGUgZmlyc3QgZXhlY3V0aW9uCiAgICAgICAqIEBwYXJhbSBpZGVudGlmaWVyQXJnIHRoZSBpbmRlbnRpZmllciBhcmcgaWRlbnRpZmllcyBmdW5jdGlvbnMuIGZ1bmN0aW9ucyB3aXRoIHRoZSBzYW1lIGlkZW50aWZpZXIgYXJlIGNvbnNpZGVyZWQgZXF1YWwKICAgICAgICogQHBhcmFtIGZ1bmNBcmcgdGhlIGFjdHVhbCBmdW5jIGFyZyB0byBydW4KICAgICAgICovCiAgICAgIGFzeW5jIHJ1bk9uY2UoaWRlbnRpZmllckFyZywgZnVuY0FyZykgewogICAgICAgIGNvbnN0IHJ1bm5pbmdJZCA9IGAke2lkZW50aWZpZXJBcmd9K3J1bm5pbmdDaGVja2A7CiAgICAgICAgaWYgKCF0aGlzLnJ1bk9uY2VUcmFja2VyU3RyaW5nTWFwLmNoZWNrU3RyaW5nKGlkZW50aWZpZXJBcmcpKSB7CiAgICAgICAgICB0aGlzLnJ1bk9uY2VUcmFja2VyU3RyaW5nTWFwLmFkZFN0cmluZyhpZGVudGlmaWVyQXJnKTsKICAgICAgICAgIHRoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAuYWRkU3RyaW5nKHJ1bm5pbmdJZCk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmdW5jQXJnKCk7CiAgICAgICAgICAgIHRoaXMucnVuT25jZVJlc3VsdE1hcC5hZGRUb01hcChpZGVudGlmaWVyQXJnLCByZXN1bHQpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgdGhpcy5ydW5PbmNlRXJyb3JNYXAuYWRkVG9NYXAoaWRlbnRpZmllckFyZywgZXJyb3IpOwogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgdGhpcy5ydW5PbmNlVHJhY2tlclN0cmluZ01hcC5yZW1vdmVTdHJpbmcocnVubmluZ0lkKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAucmVnaXN0ZXJVbnRpbFRydWUoKHN0cmluZ01hcCkgPT4gewogICAgICAgICAgcmV0dXJuICFzdHJpbmdNYXAuaW5jbHVkZXMocnVubmluZ0lkKTsKICAgICAgICB9LCAoKSA9PiB7CiAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMucnVuT25jZUVycm9yTWFwLmdldEJ5S2V5KGlkZW50aWZpZXJBcmcpOwogICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXMucnVuT25jZVJlc3VsdE1hcC5nZXRCeUtleShpZGVudGlmaWVyQXJnKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICAvLyBzZXRTdHVmZgogICAgICAvKioKICAgICAgICogYWxsb3dzIHRvIHNldCBnbG9iYWwgc3R5bGVzCiAgICAgICAqIEBwYXJhbSBzdHlsZXNUZXh0IHRoZSBjc3MgdGV4dCB5b3Ugd2FudCB0byBzZXQKICAgICAgICovCiAgICAgIGFzeW5jIHNldEdsb2JhbFN0eWxlcyhzdHlsZXNUZXh0KSB7CiAgICAgICAgYXdhaXQgdGhpcy5kb21SZWFkeS5wcm9taXNlOwogICAgICAgIGNvbnN0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgICAgc3R5bGVFbGVtZW50LnR5cGUgPSAidGV4dC9jc3MiOwogICAgICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHlsZXNUZXh0KSk7CiAgICAgICAgdGhpcy5lbGVtZW50cy5oZWFkRWxlbWVudC5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhbGxvd3MgdG8gc2V0IGdsb2JhbCBzdHlsZXMKICAgICAgICogQHBhcmFtIHN0eWxlc1RleHQgdGhlIGNzcyB0ZXh0IHlvdSB3YW50IHRvIHNldAogICAgICAgKi8KICAgICAgYXN5bmMgc2V0RXh0ZXJuYWxTY3JpcHQoc2NyaXB0TGlua0FyZykgewogICAgICAgIGF3YWl0IHRoaXMuZG9tUmVhZHkucHJvbWlzZTsKICAgICAgICBjb25zdCBkb25lID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgc2NyaXB0LnNyYyA9IHNjcmlwdExpbmtBcmc7CiAgICAgICAgc2NyaXB0LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmdW5jdGlvbigpIHsKICAgICAgICAgIGRvbmUucmVzb2x2ZSgpOwogICAgICAgIH0pOwogICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmJvZHk7CiAgICAgICAgcGFyZW50Tm9kZS5hcHBlbmQoc2NyaXB0KTsKICAgICAgICBhd2FpdCBkb25lLnByb21pc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFsbG93cyBzZXR0aW5nIGV4dGVybmFsIGNzcyBmaWxlcwogICAgICAgKiBAcGFyYW0gY3NzTGlua0FyZyBhIHVybCB0byBhbiBleHRlcm5hbCBzdHlsZXNoZWV0CiAgICAgICAqLwogICAgICBhc3luYyBzZXRFeHRlcm5hbENzcyhjc3NMaW5rQXJnKSB7CiAgICAgICAgY29uc3QgY3NzVGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpOwogICAgICAgIGNzc1RhZy5yZWwgPSAic3R5bGVzaGVldCI7CiAgICAgICAgY3NzVGFnLmNyb3NzT3JpZ2luID0gImFub255bW91cyI7CiAgICAgICAgY3NzVGFnLmhyZWYgPSBjc3NMaW5rQXJnOwogICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kKGNzc1RhZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFsbG93cyBzZXR0aW5nIG9mIHdlYnNpdGUgaW5mb3MKICAgICAgICogQHBhcmFtIG9wdGlvbnNBcmcgdGhlIHdlYnNpdGUgaW5mbwogICAgICAgKi8KICAgICAgYXN5bmMgc2V0V2Vic2l0ZUluZm8ob3B0aW9uc0FyZykgewogICAgICAgIGF3YWl0IHRoaXMud2Vic2V0dXAuc2V0dXAob3B0aW9uc0FyZyk7CiAgICAgICAgYXdhaXQgdGhpcy53ZWJzZXR1cC5yZWFkeVByb21pc2U7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY3NzLmJhc2VzdHlsZXMuanMKdmFyIHNjcm9sbEJhclN0eWxlcywgZ2xvYmFsQmFzZVN0eWxlczsKdmFyIGluaXRfZG9tdG9vbHNfY3NzX2Jhc2VzdHlsZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY3NzLmJhc2VzdHlsZXMuanMiKCkgewogICAgaW5pdF9kb210b29sc19jbGFzc2VzX2RvbXRvb2xzKCk7CiAgICBpbml0X2xpdCgpOwogICAgc2Nyb2xsQmFyU3R5bGVzID0gKCgpID0+IHsKICAgICAgY29uc3QgcmV0dXJuU3R5bGVzT2xkID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNYWMgT1MgWCIpID09PSAtMSA/IGlgYC5jc3NUZXh0IDogYGA7CiAgICAgIGNvbnN0IHJldHVyblN0eWxlcyA9IGlgCiAgICAvKiB3aWR0aCAqLwogICAgOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgIHdpZHRoOiAwcHg7CiAgICB9CiAgICBib2R5IHsKICAgICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lOwogICAgfQogIGAuY3NzVGV4dDsKICAgICAgcmV0dXJuIHJldHVyblN0eWxlczsKICAgIH0pKCk7CiAgICBnbG9iYWxCYXNlU3R5bGVzID0gaWAKICAvKgogIEBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6ICdNYXRlcmlhbCBJY29ucyc7CiAgICBmb250LXN0eWxlOiBub3JtYWw7CiAgICBmb250LXdlaWdodDogNDAwOwogICAgc3JjOiB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL21hdGVyaWFsaWNvbnMvdjQyL2ZsVWhScTZ0elpjbFFFSi1WZGctSXVpYURzTmNJaFE4dFEud29mZjIpCiAgICAgIGZvcm1hdCgnd29mZjInKTsKICB9ICovCgogIC8qIGdsb2JhbCBib2R5IHN0eWxlcyAqLwogIGJvZHkgewogICAgbWFyZ2luOiAwcHg7CiAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCBzYW5zLXNlcmlmOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB9CgogIC8qIHNjcm9sbCBiYXIgc3R5bGVzICovCiAgJHtyKHNjcm9sbEJhclN0eWxlcyl9CmAuY3NzVGV4dDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5lbGVtZW50YmFzaWMuanMKdmFyIGRvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLCB7CiAgc2V0dXA6ICgpID0+IHNldHVwLAogIHN0YXRpY1N0eWxlczogKCkgPT4gc3RhdGljU3R5bGVzLAogIHN0eWxlczogKCkgPT4gc3R5bGVzCn0pOwp2YXIgc3RhdGljU3R5bGVzLCBzdHlsZXMsIHNldHVwOwp2YXIgaW5pdF9kb210b29sc19lbGVtZW50YmFzaWMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuZWxlbWVudGJhc2ljLmpzIigpIHsKICAgIGluaXRfZG9tdG9vbHNfcGx1Z2lucygpOwogICAgaW5pdF9kb210b29sc19jbGFzc2VzX2RvbXRvb2xzKCk7CiAgICBpbml0X2RvbXRvb2xzX2Nzc19iYXNlc3R5bGVzKCk7CiAgICBpbml0X2xpdCgpOwogICAgc3RhdGljU3R5bGVzID0gaWAKICAqIHsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xcywgY29sb3IgMC4xczsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgfQoKICA6aG9zdCB7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgc2Fucy1zZXJpZjsKICB9CgogICR7cihzY3JvbGxCYXJTdHlsZXMpfQpgOwogICAgc3R5bGVzID0gYjJgCiAgPHN0eWxlPgogICAgKiB7CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xcywgY29sb3IgMC4xczsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIH0KCiAgICA6aG9zdCB7CiAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIHNhbnMtc2VyaWY7CiAgICB9CgogICAgJHtzY3JvbGxCYXJTdHlsZXN9CiAgPC9zdHlsZT4KYDsKICAgIHNldHVwID0gYXN5bmMgKGVsZW1lbnRBcmcsIG9wdGlvbnNBcmcgPSB7fSkgPT4gewogICAgICBjb25zdCBkb21Ub29scyA9IGF3YWl0IERvbVRvb2xzLnNldHVwRG9tVG9vbHMob3B0aW9uc0FyZyk7CiAgICAgIGlmIChlbGVtZW50QXJnKSB7CiAgICAgIH0KICAgICAgZG9tVG9vbHMucnVuT25jZSgiZWxlbWVudEJhc2ljU2V0dXAiLCBhc3luYyAoKSA9PiB7CiAgICAgICAgZG9tVG9vbHMuc2V0R2xvYmFsU3R5bGVzKGdsb2JhbEJhc2VTdHlsZXMpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGRvbVRvb2xzOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jc3MuanMKdmFyIGRvbXRvb2xzX2Nzc19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRvbXRvb2xzX2Nzc19leHBvcnRzLCB7CiAgY3NzR3JpZENvbHVtbnM6ICgpID0+IGNzc0dyaWRDb2x1bW5zCn0pOwp2YXIgY3NzR3JpZENvbHVtbnM7CnZhciBpbml0X2RvbXRvb2xzX2NzcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jc3MuanMiKCkgewogICAgY3NzR3JpZENvbHVtbnMgPSAoYW1vdW50T2ZDb2x1bW5zQXJnLCBnYXBTaXplQXJnKSA9PiB7CiAgICAgIGxldCByZXR1cm5TdHJpbmcgPSBgYDsKICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgYW1vdW50T2ZDb2x1bW5zQXJnOyBpMTErKykgewogICAgICAgIHJldHVyblN0cmluZyArPSBgIGNhbGMoKDEwMCUvJHthbW91bnRPZkNvbHVtbnNBcmd9KSAtICgke2dhcFNpemVBcmcgKiAoYW1vdW50T2ZDb2x1bW5zQXJnIC0gMSl9cHgvJHthbW91bnRPZkNvbHVtbnNBcmd9KSlgOwogICAgICB9CiAgICAgIHJldHVybiByZXR1cm5TdHJpbmc7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLnBsdWdpbmV4cG9ydHMuanMKdmFyIGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMsIHsKICBTd2VldFNjcm9sbDogKCkgPT4gaW1wb3J0X3N3ZWV0X3Njcm9sbDIuZGVmYXVsdCwKICBzbWFydGRlbGF5OiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMzLAogIHNtYXJ0bWFya2Rvd246ICgpID0+IGRpc3RfdHNfZXhwb3J0czE3LAogIHNtYXJ0cHJvbWlzZTogKCkgPT4gZGlzdF90c19leHBvcnRzLAogIHNtYXJ0cm91dGVyOiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMxOCwKICBzbWFydHJ4OiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMyLAogIHNtYXJ0c3RhdGU6ICgpID0+IGRpc3RfdHNfZXhwb3J0czE5LAogIHNtYXJ0c3RyaW5nOiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMxMSwKICBzbWFydHVybDogKCkgPT4gZGlzdF90c19leHBvcnRzMjAsCiAgdHlwZWRyZXF1ZXN0OiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMxNQp9KTsKdmFyIGltcG9ydF9zd2VldF9zY3JvbGwyOwp2YXIgaW5pdF9kb210b29sc19wbHVnaW5leHBvcnRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLnBsdWdpbmV4cG9ydHMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMygpOwogICAgaW5pdF9kaXN0X3RzMTcoKTsKICAgIGluaXRfZGlzdF90cygpOwogICAgaW1wb3J0X3N3ZWV0X3Njcm9sbDIgPSBfX3RvRVNNKHJlcXVpcmVfc3dlZXRfc2Nyb2xsKCksIDEpOwogICAgaW5pdF9kaXN0X3RzMTkoKTsKICAgIGluaXRfZGlzdF90czE4KCk7CiAgICBpbml0X2Rpc3RfdHMyKCk7CiAgICBpbml0X2Rpc3RfdHMxMSgpOwogICAgaW5pdF9kaXN0X3RzMjAoKTsKICAgIGluaXRfZGlzdF90czE1KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czI1ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czI1LCB7CiAgRG9tVG9vbHM6ICgpID0+IERvbVRvb2xzLAogIFR5cGVkUmVxdWVzdDogKCkgPT4gVHlwZWRSZXF1ZXN0LAogIGJyZWFrcG9pbnRzOiAoKSA9PiBkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cywKICBjc3M6ICgpID0+IGRvbXRvb2xzX2Nzc19leHBvcnRzLAogIGVsZW1lbnRCYXNpYzogKCkgPT4gZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMsCiAgcGx1Z2luczogKCkgPT4gZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzCn0pOwp2YXIgaW5pdF9kaXN0X3RzMjUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9kb210b29sc19jb2xvcnMoKTsKICAgIGluaXRfZG9tdG9vbHNfZWxlbWVudGJhc2ljKCk7CiAgICBpbml0X2RvbXRvb2xzX2Nzc19icmVha3BvaW50cygpOwogICAgaW5pdF9kb210b29sc19jc3MoKTsKICAgIGluaXRfZG9tdG9vbHNfY2xhc3Nlc19kb210b29scygpOwogICAgaW5pdF9kaXN0X3RzMTUoKTsKICAgIGluaXRfZGlzdF90czI0KCk7CiAgICBpbml0X2RvbXRvb2xzX3BsdWdpbmV4cG9ydHMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvcGx1Z2lucy5qcwp2YXIgaXNvdW5pcXVlMywgbGl0Owp2YXIgaW5pdF9wbHVnaW5zMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvcGx1Z2lucy5qcyIoKSB7CiAgICBpc291bmlxdWUzID0gX190b0VTTShyZXF1aXJlX2Rpc3RfdHMoKSwgMSk7CiAgICBpbml0X2Rpc3RfdHMyKCk7CiAgICBpbml0X2xpdCgpOwogICAgaW5pdF9wcm9wZXJ0eTIoKTsKICAgIGluaXRfZGlzdF90czI1KCk7CiAgICBsaXQgPSB7CiAgICAgIGNzczogaSwKICAgICAgdW5zYWZlQ1NTOiByLAogICAgICBMaXRFbGVtZW50OiBpNCwKICAgICAgcHJvcGVydHk6IG41CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9jbGFzc2VzLmNzc21hbmFnZXIuanMKdmFyIENzc01hbmFnZXI7CnZhciBpbml0X2NsYXNzZXNfY3NzbWFuYWdlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvY2xhc3Nlcy5jc3NtYW5hZ2VyLmpzIigpIHsKICAgIGluaXRfbGl0KCk7CiAgICBpbml0X3BsdWdpbnMzKCk7CiAgICBpbml0X2Rpc3RfdHMyNSgpOwogICAgQ3NzTWFuYWdlciA9IGNsYXNzIF9Dc3NNYW5hZ2VyIHsKICAgICAgLy8gU1RBVElDCiAgICAgIHN0YXRpYyBpbnN0YW5jZSA9IG51bGw7CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgQ3NzTWFuYWdlcgogICAgICAgKi8KICAgICAgc3RhdGljIGdldFNpbmdsZXRvbigpIHsKICAgICAgICBpZiAoIV9Dc3NNYW5hZ2VyLmluc3RhbmNlKSB7CiAgICAgICAgICBfQ3NzTWFuYWdlci5pbnN0YW5jZSA9IG5ldyBfQ3NzTWFuYWdlcigpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX0Nzc01hbmFnZXIuaW5zdGFuY2U7CiAgICAgIH0KICAgICAgLy8gSU5TVEFOQ0UKICAgICAgZG9tdG9vbHNQcm9taXNlID0gRG9tVG9vbHMuc2V0dXBEb21Ub29scygpOwogICAgICBnb0JyaWdodCA9IGZhbHNlOwogICAgICBiZFZhclRyaXBsZXRTdG9yZSA9IFtdOwogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmRvbXRvb2xzUHJvbWlzZS50aGVuKGFzeW5jIChkb210b29sc0FyZykgPT4gewogICAgICAgICAgZG9tdG9vbHNBcmcudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoYXN5bmMgKGdvQnJpZ2h0QXJnKSA9PiB7CiAgICAgICAgICAgIHRoaXMuZ29CcmlnaHQgPSBnb0JyaWdodEFyZzsKICAgICAgICAgICAgYXdhaXQgZG9tdG9vbHNBcmcuZG9tUmVhZHkucHJvbWlzZTsKICAgICAgICAgICAgZm9yIChjb25zdCBiZFRyaXBsZXRBcmcgb2YgdGhpcy5iZFZhclRyaXBsZXRTdG9yZSkgewogICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkoYmRUcmlwbGV0QXJnLmNzc1Zhck5hbWUsIHRoaXMuZ29CcmlnaHQgPyBiZFRyaXBsZXRBcmcuYnJpZ2h0VmFsdWUgOiBiZFRyaXBsZXRBcmcuZGFya1ZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZ2V0IGRlZmF1bHRTdHlsZXMoKSB7CiAgICAgICAgcmV0dXJuIGRvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnN0YXRpY1N0eWxlczsKICAgICAgfQogICAgICBjc3NGb3JEZXNrdG9wKGNvbnRlbnRBcmcpIHsKICAgICAgICByZXR1cm4gcihkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cy5jc3NGb3JEZXNrdG9wKGNvbnRlbnRBcmcpKTsKICAgICAgfQogICAgICBjc3NGb3JOb3RlYm9vayhjb250ZW50QXJnKSB7CiAgICAgICAgcmV0dXJuIHIoZG9tdG9vbHNfY3NzX2JyZWFrcG9pbnRzX2V4cG9ydHMuY3NzRm9yTm90ZWJvb2soY29udGVudEFyZykpOwogICAgICB9CiAgICAgIGNzc0ZvclRhYmxldChjb250ZW50QXJnKSB7CiAgICAgICAgcmV0dXJuIHIoZG9tdG9vbHNfY3NzX2JyZWFrcG9pbnRzX2V4cG9ydHMuY3NzRm9yVGFibGV0KGNvbnRlbnRBcmcpKTsKICAgICAgfQogICAgICBjc3NGb3JQaGFibGV0KGNvbnRlbnRBcmcpIHsKICAgICAgICByZXR1cm4gcihkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cy5jc3NGb3JQaGFibGV0KGNvbnRlbnRBcmcpKTsKICAgICAgfQogICAgICBjc3NGb3JQaG9uZShjb250ZW50QXJnKSB7CiAgICAgICAgcmV0dXJuIHIoZG9tdG9vbHNfY3NzX2JyZWFrcG9pbnRzX2V4cG9ydHMuY3NzRm9yUGhvbmUoY29udGVudEFyZykpOwogICAgICB9CiAgICAgIGJkVGhlbWUoYnJpZ2h0VmFsdWVBcmcsIGRhcmtWYWx1ZUFyZykgewogICAgICAgIGxldCByZXR1cm5Dc3NWYXI7CiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZTsKICAgICAgICBpZiAoRG9tVG9vbHMuZ2V0R2xvYmFsRG9tVG9vbHNTeW5jKCkpIHsKICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IERvbVRvb2xzLmdldEdsb2JhbERvbVRvb2xzU3luYygpLnRoZW1lTWFuYWdlci5nb0JyaWdodEJvb2xlYW4gPyBicmlnaHRWYWx1ZUFyZyA6IGRhcmtWYWx1ZUFyZzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGVmYXVsdFZhbHVlID0gZGFya1ZhbHVlQXJnOwogICAgICAgIH0KICAgICAgICBjb25zdCBleGlzdGluZ1RyaXBsZXQgPSB0aGlzLmJkVmFyVHJpcGxldFN0b3JlLmZpbmQoKHRyaXBsZXRBcmcpID0+IHRyaXBsZXRBcmcuZGFya1ZhbHVlID09PSBkYXJrVmFsdWVBcmcgJiYgdHJpcGxldEFyZy5icmlnaHRWYWx1ZSA9PT0gYnJpZ2h0VmFsdWVBcmcpOwogICAgICAgIGlmIChleGlzdGluZ1RyaXBsZXQpIHsKICAgICAgICAgIHJldHVybkNzc1ZhciA9IGV4aXN0aW5nVHJpcGxldC5jc3NWYXJOYW1lOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBuZXdUcmlwbGV0ID0gewogICAgICAgICAgICBjc3NWYXJOYW1lOiBgLS0ke2lzb3VuaXF1ZTMudW5pKCl9YCwKICAgICAgICAgICAgYnJpZ2h0VmFsdWU6IGJyaWdodFZhbHVlQXJnLAogICAgICAgICAgICBkYXJrVmFsdWU6IGRhcmtWYWx1ZUFyZwogICAgICAgICAgfTsKICAgICAgICAgIHRoaXMuYmRWYXJUcmlwbGV0U3RvcmUucHVzaChuZXdUcmlwbGV0KTsKICAgICAgICAgIHRoaXMuZG9tdG9vbHNQcm9taXNlLnRoZW4oYXN5bmMgKGRvbXRvb2xzQXJnKSA9PiB7CiAgICAgICAgICAgIGF3YWl0IGRvbXRvb2xzQXJnLmRvbVJlYWR5LnByb21pc2U7CiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkobmV3VHJpcGxldC5jc3NWYXJOYW1lLCBkZWZhdWx0VmFsdWUpOwogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm5Dc3NWYXIgPSBuZXdUcmlwbGV0LmNzc1Zhck5hbWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaXQudW5zYWZlQ1NTKGB2YXIoJHtyZXR1cm5Dc3NWYXJ9LCAke2RlZmF1bHRWYWx1ZX0pYCk7CiAgICAgIH0KICAgICAgY3NzR3JpZENvbHVtbnMgPSAoYW1vdW50T2ZDb2x1bW5zQXJnLCBnYXBTaXplQXJnKSA9PiB7CiAgICAgICAgbGV0IHJldHVyblN0cmluZyA9IGBgOwogICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGFtb3VudE9mQ29sdW1uc0FyZzsgaTExKyspIHsKICAgICAgICAgIHJldHVyblN0cmluZyArPSBgIGNhbGMoKDEwMCUvJHthbW91bnRPZkNvbHVtbnNBcmd9KSAtICgke2dhcFNpemVBcmcgKiAoYW1vdW50T2ZDb2x1bW5zQXJnIC0gMSl9cHgvJHthbW91bnRPZkNvbHVtbnNBcmd9KSlgOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGl0LnVuc2FmZUNTUyhyZXR1cm5TdHJpbmcpOwogICAgICB9OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9zdGF0aWMuanMKdmFyIGEzLCBvNywgczQsIGk1LCBsMywgbjcsIHUzLCBjNCwgJDI7CnZhciBpbml0X3N0YXRpYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9zdGF0aWMuanMiKCkgewogICAgaW5pdF9saXRfaHRtbCgpOwogICAgYTMgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sLmZvcigiIiksIG83ID0gKHQ5KSA9PiB7CiAgICAgIGlmICh0OT8uciA9PT0gYTMpIHJldHVybiB0OT8uXyRsaXRTdGF0aWMkOwogICAgfSwgczQgPSAodDkpID0+ICh7IF8kbGl0U3RhdGljJDogdDksIHI6IGEzIH0pLCBpNSA9ICh0OSwgLi4ucjExKSA9PiAoeyBfJGxpdFN0YXRpYyQ6IHIxMS5yZWR1Y2UoKHIxMiwgZTExLCBhNSkgPT4gcjEyICsgKCh0MTApID0+IHsKICAgICAgaWYgKHZvaWQgMCAhPT0gdDEwLl8kbGl0U3RhdGljJCkgcmV0dXJuIHQxMC5fJGxpdFN0YXRpYyQ7CiAgICAgIHRocm93IEVycm9yKGBWYWx1ZSBwYXNzZWQgdG8gJ2xpdGVyYWwnIGZ1bmN0aW9uIG11c3QgYmUgYSAnbGl0ZXJhbCcgcmVzdWx0OiAke3QxMH0uIFVzZSAndW5zYWZlU3RhdGljJyB0byBwYXNzIG5vbi1saXRlcmFsIHZhbHVlcywgYnV0CiAgICAgICAgICAgIHRha2UgY2FyZSB0byBlbnN1cmUgcGFnZSBzZWN1cml0eS5gKTsKICAgIH0pKGUxMSkgKyB0OVthNSArIDFdLCB0OVswXSksIHI6IGEzIH0pLCBsMyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIG43ID0gKHQ5KSA9PiAocjExLCAuLi5lMTEpID0+IHsKICAgICAgY29uc3QgYTUgPSBlMTEubGVuZ3RoOwogICAgICBsZXQgczksIGkxMTsKICAgICAgY29uc3QgbjEzID0gW10sIHU3ID0gW107CiAgICAgIGxldCBjMTEsICQzID0gMCwgZjcgPSBmYWxzZTsKICAgICAgZm9yICg7ICQzIDwgYTU7ICkgewogICAgICAgIGZvciAoYzExID0gcjExWyQzXTsgJDMgPCBhNSAmJiB2b2lkIDAgIT09IChpMTEgPSBlMTFbJDNdLCBzOSA9IG83KGkxMSkpOyApIGMxMSArPSBzOSArIHIxMVsrKyQzXSwgZjcgPSB0cnVlOwogICAgICAgICQzICE9PSBhNSAmJiB1Ny5wdXNoKGkxMSksIG4xMy5wdXNoKGMxMSksICQzKys7CiAgICAgIH0KICAgICAgaWYgKCQzID09PSBhNSAmJiBuMTMucHVzaChyMTFbYTVdKSwgZjcpIHsKICAgICAgICBjb25zdCB0MTAgPSBuMTMuam9pbigiJCRsaXQkJCIpOwogICAgICAgIHZvaWQgMCA9PT0gKHIxMSA9IGwzLmdldCh0MTApKSAmJiAobjEzLnJhdyA9IG4xMywgbDMuc2V0KHQxMCwgcjExID0gbjEzKSksIGUxMSA9IHU3OwogICAgICB9CiAgICAgIHJldHVybiB0OShyMTEsIC4uLmUxMSk7CiAgICB9LCB1MyA9IG43KGIyKSwgYzQgPSBuNyh3KSwgJDIgPSBuNyhUKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L3N0YXRpYy1odG1sLmpzCnZhciBpbml0X3N0YXRpY19odG1sID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvc3RhdGljLWh0bWwuanMiKCkgewogICAgaW5pdF9zdGF0aWMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmUuanMKdmFyIHQzLCBlNCwgaTY7CnZhciBpbml0X2RpcmVjdGl2ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmUuanMiKCkgewogICAgdDMgPSB7IEFUVFJJQlVURTogMSwgQ0hJTEQ6IDIsIFBST1BFUlRZOiAzLCBCT09MRUFOX0FUVFJJQlVURTogNCwgRVZFTlQ6IDUsIEVMRU1FTlQ6IDYgfSwgZTQgPSAodDkpID0+ICguLi5lMTEpID0+ICh7IF8kbGl0RGlyZWN0aXZlJDogdDksIHZhbHVlczogZTExIH0pOwogICAgaTYgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHQ5KSB7CiAgICAgIH0KICAgICAgZ2V0IF8kQVUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuXyRBTS5fJEFVOwogICAgICB9CiAgICAgIF8kQVQodDksIGUxMSwgaTExKSB7CiAgICAgICAgdGhpcy5fJEN0ID0gdDksIHRoaXMuXyRBTSA9IGUxMSwgdGhpcy5fJENpID0gaTExOwogICAgICB9CiAgICAgIF8kQVModDksIGUxMSkgewogICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZSh0OSwgZTExKTsKICAgICAgfQogICAgICB1cGRhdGUodDksIGUxMSkgewogICAgICAgIHJldHVybiB0aGlzLnJlbmRlciguLi5lMTEpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvdW5zYWZlLWh0bWwuanMKdmFyIGU1LCBvODsKdmFyIGluaXRfdW5zYWZlX2h0bWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcyIoKSB7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBpbml0X2RpcmVjdGl2ZSgpOwogICAgZTUgPSBjbGFzcyBleHRlbmRzIGk2IHsKICAgICAgY29uc3RydWN0b3IoaTExKSB7CiAgICAgICAgaWYgKHN1cGVyKGkxMSksIHRoaXMuaXQgPSBBLCBpMTEudHlwZSAhPT0gdDMuQ0hJTEQpIHRocm93IEVycm9yKHRoaXMuY29uc3RydWN0b3IuZGlyZWN0aXZlTmFtZSArICIoKSBjYW4gb25seSBiZSB1c2VkIGluIGNoaWxkIGJpbmRpbmdzIik7CiAgICAgIH0KICAgICAgcmVuZGVyKHIxMSkgewogICAgICAgIGlmIChyMTEgPT09IEEgfHwgbnVsbCA9PSByMTEpIHJldHVybiB0aGlzLl90ID0gdm9pZCAwLCB0aGlzLml0ID0gcjExOwogICAgICAgIGlmIChyMTEgPT09IEUpIHJldHVybiByMTE7CiAgICAgICAgaWYgKCJzdHJpbmciICE9IHR5cGVvZiByMTEpIHRocm93IEVycm9yKHRoaXMuY29uc3RydWN0b3IuZGlyZWN0aXZlTmFtZSArICIoKSBjYWxsZWQgd2l0aCBhIG5vbi1zdHJpbmcgdmFsdWUiKTsKICAgICAgICBpZiAocjExID09PSB0aGlzLml0KSByZXR1cm4gdGhpcy5fdDsKICAgICAgICB0aGlzLml0ID0gcjExOwogICAgICAgIGNvbnN0IHM5ID0gW3IxMV07CiAgICAgICAgcmV0dXJuIHM5LnJhdyA9IHM5LCB0aGlzLl90ID0geyBfJGxpdFR5cGUkOiB0aGlzLmNvbnN0cnVjdG9yLnJlc3VsdFR5cGUsIHN0cmluZ3M6IHM5LCB2YWx1ZXM6IFtdIH07CiAgICAgIH0KICAgIH07CiAgICBlNS5kaXJlY3RpdmVOYW1lID0gInVuc2FmZUhUTUwiLCBlNS5yZXN1bHRUeXBlID0gMTsKICAgIG84ID0gZTQoZTUpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcwp2YXIgaW5pdF91bnNhZmVfaHRtbDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzIigpIHsKICAgIGluaXRfdW5zYWZlX2h0bWwoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvY3VzdG9tLWVsZW1lbnQuanMKdmFyIHQ0Owp2YXIgaW5pdF9jdXN0b21fZWxlbWVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvY3VzdG9tLWVsZW1lbnQuanMiKCkgewogICAgdDQgPSAodDkpID0+IChlMTEsIG8xMykgPT4gewogICAgICB2b2lkIDAgIT09IG8xMyA/IG8xMy5hZGRJbml0aWFsaXplcigoKSA9PiB7CiAgICAgICAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKHQ5LCBlMTEpOwogICAgICB9KSA6IGN1c3RvbUVsZW1lbnRzLmRlZmluZSh0OSwgZTExKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kZWNvcmF0b3JzL2N1c3RvbS1lbGVtZW50LmpzCnZhciBpbml0X2N1c3RvbV9lbGVtZW50MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RlY29yYXRvcnMvY3VzdG9tLWVsZW1lbnQuanMiKCkgewogICAgaW5pdF9jdXN0b21fZWxlbWVudCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9zdGF0ZS5qcwpmdW5jdGlvbiByNShyMTEpIHsKICByZXR1cm4gbjUoeyAuLi5yMTEsIHN0YXRlOiB0cnVlLCBhdHRyaWJ1dGU6IGZhbHNlIH0pOwp9CnZhciBpbml0X3N0YXRlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvc3RhdGUuanMiKCkgewogICAgaW5pdF9wcm9wZXJ0eSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9ldmVudC1vcHRpb25zLmpzCmZ1bmN0aW9uIHQ1KHQ5KSB7CiAgcmV0dXJuIChuMTMsIG8xMykgPT4gewogICAgY29uc3QgYzExID0gImZ1bmN0aW9uIiA9PSB0eXBlb2YgbjEzID8gbjEzIDogbjEzW28xM107CiAgICBPYmplY3QuYXNzaWduKGMxMSwgdDkpOwogIH07Cn0KdmFyIGluaXRfZXZlbnRfb3B0aW9ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvZXZlbnQtb3B0aW9ucy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL2Jhc2UuanMKdmFyIGU2Owp2YXIgaW5pdF9iYXNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9iYXNlLmpzIigpIHsKICAgIGU2ID0gKGUxMSwgdDksIGMxMSkgPT4gKGMxMS5jb25maWd1cmFibGUgPSB0cnVlLCBjMTEuZW51bWVyYWJsZSA9IHRydWUsIFJlZmxlY3QuZGVjb3JhdGUgJiYgIm9iamVjdCIgIT0gdHlwZW9mIHQ5ICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlMTEsIHQ5LCBjMTEpLCBjMTEpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS5qcwpmdW5jdGlvbiBlNyhlMTEsIHIxMSkgewogIHJldHVybiAobjEzLCBzOSwgaTExKSA9PiB7CiAgICBjb25zdCBvMTMgPSAodDkpID0+IHQ5LnJlbmRlclJvb3Q/LnF1ZXJ5U2VsZWN0b3IoZTExKSA/PyBudWxsOwogICAgaWYgKHIxMSkgewogICAgICBjb25zdCB7IGdldDogZTEyLCBzZXQ6IHIxMiB9ID0gIm9iamVjdCIgPT0gdHlwZW9mIHM5ID8gbjEzIDogaTExID8/IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gewogICAgICAgIGNvbnN0IHQ5ID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpOwogICAgICAgIHJldHVybiB7IGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzW3Q5XTsKICAgICAgICB9LCBzZXQoZTEzKSB7CiAgICAgICAgICB0aGlzW3Q5XSA9IGUxMzsKICAgICAgICB9IH07CiAgICAgIH0pKCk7CiAgICAgIHJldHVybiBlNihuMTMsIHM5LCB7IGdldCgpIHsKICAgICAgICBsZXQgdDkgPSBlMTIuY2FsbCh0aGlzKTsKICAgICAgICByZXR1cm4gdm9pZCAwID09PSB0OSAmJiAodDkgPSBvMTModGhpcyksIChudWxsICE9PSB0OSB8fCB0aGlzLmhhc1VwZGF0ZWQpICYmIHIxMi5jYWxsKHRoaXMsIHQ5KSksIHQ5OwogICAgICB9IH0pOwogICAgfQogICAgcmV0dXJuIGU2KG4xMywgczksIHsgZ2V0KCkgewogICAgICByZXR1cm4gbzEzKHRoaXMpOwogICAgfSB9KTsKICB9Owp9CnZhciBpbml0X3F1ZXJ5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS5qcyIoKSB7CiAgICBpbml0X2Jhc2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYWxsLmpzCmZ1bmN0aW9uIHI2KHIxMSkgewogIHJldHVybiAobjEzLCBvMTMpID0+IGU2KG4xMywgbzEzLCB7IGdldCgpIHsKICAgIHJldHVybiAodGhpcy5yZW5kZXJSb290ID8/IChlOCA/Pz0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKSkucXVlcnlTZWxlY3RvckFsbChyMTEpOwogIH0gfSk7Cn0KdmFyIGU4Owp2YXIgaW5pdF9xdWVyeV9hbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFsbC5qcyIoKSB7CiAgICBpbml0X2Jhc2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXN5bmMuanMKZnVuY3Rpb24gcjcocjExKSB7CiAgcmV0dXJuIChuMTMsIGUxMSkgPT4gZTYobjEzLCBlMTEsIHsgYXN5bmMgZ2V0KCkgewogICAgcmV0dXJuIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGUsIHRoaXMucmVuZGVyUm9vdD8ucXVlcnlTZWxlY3RvcihyMTEpID8/IG51bGw7CiAgfSB9KTsKfQp2YXIgaW5pdF9xdWVyeV9hc3luYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXN5bmMuanMiKCkgewogICAgaW5pdF9iYXNlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFzc2lnbmVkLWVsZW1lbnRzLmpzCmZ1bmN0aW9uIG85KG8xMykgewogIHJldHVybiAoZTExLCBuMTMpID0+IHsKICAgIGNvbnN0IHsgc2xvdDogcjExLCBzZWxlY3RvcjogczkgfSA9IG8xMyA/PyB7fSwgYzExID0gInNsb3QiICsgKHIxMSA/IGBbbmFtZT0ke3IxMX1dYCA6ICI6bm90KFtuYW1lXSkiKTsKICAgIHJldHVybiBlNihlMTEsIG4xMywgeyBnZXQoKSB7CiAgICAgIGNvbnN0IHQ5ID0gdGhpcy5yZW5kZXJSb290Py5xdWVyeVNlbGVjdG9yKGMxMSksIGUxMiA9IHQ5Py5hc3NpZ25lZEVsZW1lbnRzKG8xMykgPz8gW107CiAgICAgIHJldHVybiB2b2lkIDAgPT09IHM5ID8gZTEyIDogZTEyLmZpbHRlcigodDEwKSA9PiB0MTAubWF0Y2hlcyhzOSkpOwogICAgfSB9KTsKICB9Owp9CnZhciBpbml0X3F1ZXJ5X2Fzc2lnbmVkX2VsZW1lbnRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3NpZ25lZC1lbGVtZW50cy5qcyIoKSB7CiAgICBpbml0X2Jhc2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXNzaWduZWQtbm9kZXMuanMKZnVuY3Rpb24gbjgobjEzKSB7CiAgcmV0dXJuIChvMTMsIHIxMSkgPT4gewogICAgY29uc3QgeyBzbG90OiBlMTEgfSA9IG4xMyA/PyB7fSwgczkgPSAic2xvdCIgKyAoZTExID8gYFtuYW1lPSR7ZTExfV1gIDogIjpub3QoW25hbWVdKSIpOwogICAgcmV0dXJuIGU2KG8xMywgcjExLCB7IGdldCgpIHsKICAgICAgY29uc3QgdDkgPSB0aGlzLnJlbmRlclJvb3Q/LnF1ZXJ5U2VsZWN0b3IoczkpOwogICAgICByZXR1cm4gdDk/LmFzc2lnbmVkTm9kZXMobjEzKSA/PyBbXTsKICAgIH0gfSk7CiAgfTsKfQp2YXIgaW5pdF9xdWVyeV9hc3NpZ25lZF9ub2RlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXNzaWduZWQtbm9kZXMuanMiKCkgewogICAgaW5pdF9iYXNlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kZWNvcmF0b3JzLmpzCnZhciBpbml0X2RlY29yYXRvcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kZWNvcmF0b3JzLmpzIigpIHsKICAgIGluaXRfY3VzdG9tX2VsZW1lbnQoKTsKICAgIGluaXRfcHJvcGVydHkoKTsKICAgIGluaXRfc3RhdGUyKCk7CiAgICBpbml0X2V2ZW50X29wdGlvbnMoKTsKICAgIGluaXRfcXVlcnkoKTsKICAgIGluaXRfcXVlcnlfYWxsKCk7CiAgICBpbml0X3F1ZXJ5X2FzeW5jKCk7CiAgICBpbml0X3F1ZXJ5X2Fzc2lnbmVkX2VsZW1lbnRzKCk7CiAgICBpbml0X3F1ZXJ5X2Fzc2lnbmVkX25vZGVzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2NsYXNzZXMuZGVlcy1lbGVtZW50LmpzCnZhciBfX2VzRGVjb3JhdGUyLCBfX3J1bkluaXRpYWxpemVyczMsIERlZXNFbGVtZW50Owp2YXIgaW5pdF9jbGFzc2VzX2RlZXNfZWxlbWVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvY2xhc3Nlcy5kZWVzLWVsZW1lbnQuanMiKCkgewogICAgaW5pdF9wbHVnaW5zMygpOwogICAgX19lc0RlY29yYXRlMiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNFbGVtZW50ID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gbGl0LkxpdEVsZW1lbnQ7CiAgICAgIGxldCBfZ29CcmlnaHRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9nb0JyaWdodF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9nb0JyaWdodF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2RvbXRvb2xzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZG9tdG9vbHNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZG9tdG9vbHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgcmV0dXJuIGNsYXNzIERlZXNFbGVtZW50IGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9nb0JyaWdodF9kZWNvcmF0b3JzID0gW2xpdC5wcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICAgICAgX2RvbXRvb2xzX2RlY29yYXRvcnMgPSBbbGl0LnByb3BlcnR5KCldOwogICAgICAgICAgX19lc0RlY29yYXRlMih0aGlzLCBudWxsLCBfZ29CcmlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZ29CcmlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImdvQnJpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmdvQnJpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZ29CcmlnaHQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2dvQnJpZ2h0X2luaXRpYWxpemVycywgX2dvQnJpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTIodGhpcywgbnVsbCwgX2RvbXRvb2xzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRvbXRvb2xzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkb210b29scyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kb210b29scywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmRvbXRvb2xzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kb210b29sc19pbml0aWFsaXplcnMsIF9kb210b29sc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgICNnb0JyaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzKHRoaXMsIF9nb0JyaWdodF9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgICAgICAvLyBJTlNUQU5DRQogICAgICAgIGdldCBnb0JyaWdodCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNnb0JyaWdodF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZ29CcmlnaHQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNnb0JyaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAvLyBkb210b29scwogICAgICAgIGRvbXRvb2xzUHJvbWlzZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMyh0aGlzLCBfZ29CcmlnaHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICNkb210b29sc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzKHRoaXMsIF9kb210b29sc19pbml0aWFsaXplcnMsIHZvaWQgMCk7CiAgICAgICAgZ2V0IGRvbXRvb2xzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2RvbXRvb2xzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBkb210b29scyh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2RvbXRvb2xzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHJ4U3Vic2NyaXB0aW9ucyA9IChfX3J1bkluaXRpYWxpemVyczModGhpcywgX2RvbXRvb2xzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgW10pOwogICAgICAgIHRoZW1lU3Vic2NyaXB0aW9uOwogICAgICAgIGVsZW1lbnREb21SZWFkeURlZmVycmVkID0gZGlzdF90c19leHBvcnRzMjUucGx1Z2lucy5zbWFydHByb21pc2UuZGVmZXIoKTsKICAgICAgICBlbGVtZW50RG9tUmVhZHkgPSB0aGlzLmVsZW1lbnREb21SZWFkeURlZmVycmVkLnByb21pc2U7CiAgICAgICAgY29uc3RydWN0b3Iob3B0aW9uc0FyZyA9IHt9KSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgdGhpcy5kb210b29sc1Byb21pc2UgPSBkaXN0X3RzX2V4cG9ydHMyNS5lbGVtZW50QmFzaWMuc2V0dXAodGhpcywgb3B0aW9uc0FyZyk7CiAgICAgICAgICB0aGlzLmRvbXRvb2xzUHJvbWlzZS50aGVuKChkb210b29sc0FyZykgPT4gewogICAgICAgICAgICB0aGlzLmRvbXRvb2xzID0gZG9tdG9vbHNBcmc7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgY29uc3QgZG9tdG9vbHMgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgICAgIHRoaXMudGhlbWVTdWJzY3JpcHRpb24gPSBkb210b29scy50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZ29CcmlnaHRBcmcpID0+IHsKICAgICAgICAgICAgdGhpcy5nb0JyaWdodCA9IGdvQnJpZ2h0QXJnOwogICAgICAgICAgICBpZiAodGhpcy50aGVtZUNoYW5nZWQpIHsKICAgICAgICAgICAgICB0aGlzLnRoZW1lQ2hhbmdlZChnb0JyaWdodEFyZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5yeFN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRoZW1lU3Vic2NyaXB0aW9uKTsKICAgICAgICAgIGZvciAoY29uc3Qgc3RhcnR1cEZ1bmN0aW9uIG9mIHRoaXMuc3RhcnR1cEZ1bmN0aW9ucykgewogICAgICAgICAgICBhd2FpdCBzdGFydHVwRnVuY3Rpb24oKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRlZXNFbGVtZW50Q29ubmVjdGVkIikpOwogICAgICAgIH0KICAgICAgICBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgICAgICBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgICAgIHRoaXMuZWxlbWVudERvbVJlYWR5RGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgIH0KICAgICAgICBzdGFydHVwRnVuY3Rpb25zID0gW107CiAgICAgICAgcmVnaXN0ZXJTdGFydHVwRnVuY3Rpb24oc3RhcnR1cEZ1bmN0aW9uQXJnKSB7CiAgICAgICAgICB0aGlzLnN0YXJ0dXBGdW5jdGlvbnMucHVzaChzdGFydHVwRnVuY3Rpb25BcmcpOwogICAgICAgIH0KICAgICAgICBnYXJiYWdlRnVuY3Rpb25zID0gW107CiAgICAgICAgcmVnaXN0ZXJHYXJiYWdlRnVuY3Rpb24oZ2FyYmFnZUZ1bmN0aW9uQXJnKSB7CiAgICAgICAgICB0aGlzLmdhcmJhZ2VGdW5jdGlvbnMucHVzaChnYXJiYWdlRnVuY3Rpb25BcmcpOwogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHRoaXMucnhTdWJzY3JpcHRpb25zKSB7CiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChjb25zdCBnYXJiYWdlRnVuY3Rpb24gb2YgdGhpcy5nYXJiYWdlRnVuY3Rpb25zKSB7CiAgICAgICAgICAgIGF3YWl0IGdhcmJhZ2VGdW5jdGlvbigpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZGVlc0VsZW1lbnREaXNjb25uZWN0ZWQiKSk7CiAgICAgICAgfQogICAgICB9OwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmUtaGVscGVycy5qcwp2YXIgdDYsIGk3LCBuOSwgZTksIGw0LCBkNCwgYzUsIGY0LCByOCwgczUsIHYzLCB1NCwgbTMsIHA1LCBNMiwgaDQsIGoyOwp2YXIgaW5pdF9kaXJlY3RpdmVfaGVscGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmUtaGVscGVycy5qcyIoKSB7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICAoeyBJOiB0NiB9ID0gaiksIGk3ID0gKG8xMykgPT4gbzEzLCBuOSA9IChvMTMpID0+IG51bGwgPT09IG8xMyB8fCAib2JqZWN0IiAhPSB0eXBlb2YgbzEzICYmICJmdW5jdGlvbiIgIT0gdHlwZW9mIG8xMywgZTkgPSB7IEhUTUw6IDEsIFNWRzogMiwgTUFUSE1MOiAzIH0sIGw0ID0gKG8xMywgdDkpID0+IHZvaWQgMCA9PT0gdDkgPyB2b2lkIDAgIT09IG8xMz8uXyRsaXRUeXBlJCA6IG8xMz8uXyRsaXRUeXBlJCA9PT0gdDksIGQ0ID0gKG8xMykgPT4gbnVsbCAhPSBvMTM/Ll8kbGl0VHlwZSQ/LmgsIGM1ID0gKG8xMykgPT4gdm9pZCAwICE9PSBvMTM/Ll8kbGl0RGlyZWN0aXZlJCwgZjQgPSAobzEzKSA9PiBvMTM/Ll8kbGl0RGlyZWN0aXZlJCwgcjggPSAobzEzKSA9PiB2b2lkIDAgPT09IG8xMy5zdHJpbmdzLCBzNSA9ICgpID0+IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpLCB2MyA9IChvMTMsIG4xMywgZTExKSA9PiB7CiAgICAgIGNvbnN0IGw2ID0gbzEzLl8kQUEucGFyZW50Tm9kZSwgZDYgPSB2b2lkIDAgPT09IG4xMyA/IG8xMy5fJEFCIDogbjEzLl8kQUE7CiAgICAgIGlmICh2b2lkIDAgPT09IGUxMSkgewogICAgICAgIGNvbnN0IGkxMSA9IGw2Lmluc2VydEJlZm9yZShzNSgpLCBkNiksIG4xNCA9IGw2Lmluc2VydEJlZm9yZShzNSgpLCBkNik7CiAgICAgICAgZTExID0gbmV3IHQ2KGkxMSwgbjE0LCBvMTMsIG8xMy5vcHRpb25zKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCB0OSA9IGUxMS5fJEFCLm5leHRTaWJsaW5nLCBuMTQgPSBlMTEuXyRBTSwgYzExID0gbjE0ICE9PSBvMTM7CiAgICAgICAgaWYgKGMxMSkgewogICAgICAgICAgbGV0IHQxMDsKICAgICAgICAgIGUxMS5fJEFRPy4obzEzKSwgZTExLl8kQU0gPSBvMTMsIHZvaWQgMCAhPT0gZTExLl8kQVAgJiYgKHQxMCA9IG8xMy5fJEFVKSAhPT0gbjE0Ll8kQVUgJiYgZTExLl8kQVAodDEwKTsKICAgICAgICB9CiAgICAgICAgaWYgKHQ5ICE9PSBkNiB8fCBjMTEpIHsKICAgICAgICAgIGxldCBvMTQgPSBlMTEuXyRBQTsKICAgICAgICAgIGZvciAoOyBvMTQgIT09IHQ5OyApIHsKICAgICAgICAgICAgY29uc3QgdDEwID0gaTcobzE0KS5uZXh0U2libGluZzsKICAgICAgICAgICAgaTcobDYpLmluc2VydEJlZm9yZShvMTQsIGQ2KSwgbzE0ID0gdDEwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZTExOwogICAgfSwgdTQgPSAobzEzLCB0OSwgaTExID0gbzEzKSA9PiAobzEzLl8kQUkodDksIGkxMSksIG8xMyksIG0zID0ge30sIHA1ID0gKG8xMywgdDkgPSBtMykgPT4gbzEzLl8kQUggPSB0OSwgTTIgPSAobzEzKSA9PiBvMTMuXyRBSCwgaDQgPSAobzEzKSA9PiB7CiAgICAgIG8xMy5fJEFSKCksIG8xMy5fJEFBLnJlbW92ZSgpOwogICAgfSwgajIgPSAobzEzKSA9PiB7CiAgICAgIG8xMy5fJEFSKCk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2FzeW5jLWRpcmVjdGl2ZS5qcwpmdW5jdGlvbiBoNShpMTEpIHsKICB2b2lkIDAgIT09IHRoaXMuXyRBTiA/IChvMTAodGhpcyksIHRoaXMuXyRBTSA9IGkxMSwgcjkodGhpcykpIDogdGhpcy5fJEFNID0gaTExOwp9CmZ1bmN0aW9uIG4xMChpMTEsIHQ5ID0gZmFsc2UsIGUxMSA9IDApIHsKICBjb25zdCByMTEgPSB0aGlzLl8kQUgsIGg5ID0gdGhpcy5fJEFOOwogIGlmICh2b2lkIDAgIT09IGg5ICYmIDAgIT09IGg5LnNpemUpIGlmICh0OSkgaWYgKEFycmF5LmlzQXJyYXkocjExKSkgZm9yIChsZXQgaTEyID0gZTExOyBpMTIgPCByMTEubGVuZ3RoOyBpMTIrKykgczYocjExW2kxMl0sIGZhbHNlKSwgbzEwKHIxMVtpMTJdKTsKICBlbHNlIG51bGwgIT0gcjExICYmIChzNihyMTEsIGZhbHNlKSwgbzEwKHIxMSkpOwogIGVsc2UgczYodGhpcywgaTExKTsKfQp2YXIgczYsIG8xMCwgcjksIGM2LCBmNTsKdmFyIGluaXRfYXN5bmNfZGlyZWN0aXZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2FzeW5jLWRpcmVjdGl2ZS5qcyIoKSB7CiAgICBpbml0X2RpcmVjdGl2ZV9oZWxwZXJzKCk7CiAgICBpbml0X2RpcmVjdGl2ZSgpOwogICAgaW5pdF9kaXJlY3RpdmUoKTsKICAgIHM2ID0gKGkxMSwgdDkpID0+IHsKICAgICAgY29uc3QgZTExID0gaTExLl8kQU47CiAgICAgIGlmICh2b2lkIDAgPT09IGUxMSkgcmV0dXJuIGZhbHNlOwogICAgICBmb3IgKGNvbnN0IGkxMiBvZiBlMTEpIGkxMi5fJEFPPy4odDksIGZhbHNlKSwgczYoaTEyLCB0OSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSwgbzEwID0gKGkxMSkgPT4gewogICAgICBsZXQgdDksIGUxMTsKICAgICAgZG8gewogICAgICAgIGlmICh2b2lkIDAgPT09ICh0OSA9IGkxMS5fJEFNKSkgYnJlYWs7CiAgICAgICAgZTExID0gdDkuXyRBTiwgZTExLmRlbGV0ZShpMTEpLCBpMTEgPSB0OTsKICAgICAgfSB3aGlsZSAoMCA9PT0gZTExPy5zaXplKTsKICAgIH0sIHI5ID0gKGkxMSkgPT4gewogICAgICBmb3IgKGxldCB0OTsgdDkgPSBpMTEuXyRBTTsgaTExID0gdDkpIHsKICAgICAgICBsZXQgZTExID0gdDkuXyRBTjsKICAgICAgICBpZiAodm9pZCAwID09PSBlMTEpIHQ5Ll8kQU4gPSBlMTEgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICAgIGVsc2UgaWYgKGUxMS5oYXMoaTExKSkgYnJlYWs7CiAgICAgICAgZTExLmFkZChpMTEpLCBjNih0OSk7CiAgICAgIH0KICAgIH07CiAgICBjNiA9IChpMTEpID0+IHsKICAgICAgaTExLnR5cGUgPT0gdDMuQ0hJTEQgJiYgKGkxMS5fJEFQID8/PSBuMTAsIGkxMS5fJEFRID8/PSBoNSk7CiAgICB9OwogICAgZjUgPSBjbGFzcyBleHRlbmRzIGk2IHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKSwgdGhpcy5fJEFOID0gdm9pZCAwOwogICAgICB9CiAgICAgIF8kQVQoaTExLCB0OSwgZTExKSB7CiAgICAgICAgc3VwZXIuXyRBVChpMTEsIHQ5LCBlMTEpLCByOSh0aGlzKSwgdGhpcy5pc0Nvbm5lY3RlZCA9IGkxMS5fJEFVOwogICAgICB9CiAgICAgIF8kQU8oaTExLCB0OSA9IHRydWUpIHsKICAgICAgICBpMTEgIT09IHRoaXMuaXNDb25uZWN0ZWQgJiYgKHRoaXMuaXNDb25uZWN0ZWQgPSBpMTEsIGkxMSA/IHRoaXMucmVjb25uZWN0ZWQ/LigpIDogdGhpcy5kaXNjb25uZWN0ZWQ/LigpKSwgdDkgJiYgKHM2KHRoaXMsIGkxMSksIG8xMCh0aGlzKSk7CiAgICAgIH0KICAgICAgc2V0VmFsdWUodDkpIHsKICAgICAgICBpZiAocjgodGhpcy5fJEN0KSkgdGhpcy5fJEN0Ll8kQUkodDksIHRoaXMpOwogICAgICAgIGVsc2UgewogICAgICAgICAgY29uc3QgaTExID0gWy4uLnRoaXMuXyRDdC5fJEFIXTsKICAgICAgICAgIGkxMVt0aGlzLl8kQ2ldID0gdDksIHRoaXMuXyRDdC5fJEFJKGkxMSwgdGhpcywgMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZCgpIHsKICAgICAgfQogICAgICByZWNvbm5lY3RlZCgpIHsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2FzeW5jLWRpcmVjdGl2ZS5qcwp2YXIgaW5pdF9hc3luY19kaXJlY3RpdmUyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvYXN5bmMtZGlyZWN0aXZlLmpzIigpIHsKICAgIGluaXRfYXN5bmNfZGlyZWN0aXZlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2RpcmVjdGl2ZXMvY2xhc3Nlcy5yZXNvbHZlZGlyZWN0aXZlLmpzCnZhciBSZXNvbHZlRGlyZWN0aXZlLCByZXNvbHZlLCByZXNvbHZlRXhlYzsKdmFyIGluaXRfY2xhc3Nlc19yZXNvbHZlZGlyZWN0aXZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9kaXJlY3RpdmVzL2NsYXNzZXMucmVzb2x2ZWRpcmVjdGl2ZS5qcyIoKSB7CiAgICBpbml0X2xpdCgpOwogICAgaW5pdF9hc3luY19kaXJlY3RpdmUyKCk7CiAgICBSZXNvbHZlRGlyZWN0aXZlID0gY2xhc3MgZXh0ZW5kcyBmNSB7CiAgICAgIHByb21pc2U7CiAgICAgIGhhc1Byb21pc2VTZXR0bGVkID0gZmFsc2U7CiAgICAgIHJlbmRlcihwcm9taXNlKSB7CiAgICAgICAgaWYgKHRoaXMucHJvbWlzZSAhPT0gcHJvbWlzZSkgewogICAgICAgICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTsKICAgICAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKSB7CiAgICAgICAgICAgIHRoaXMuaGFuZGxlUHJvbWlzZShwcm9taXNlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEU7CiAgICAgIH0KICAgICAgaGFuZGxlUHJvbWlzZShwcm9taXNlKSB7CiAgICAgICAgdGhpcy5oYXNQcm9taXNlU2V0dGxlZCA9IGZhbHNlOwogICAgICAgIHByb21pc2UudGhlbigodmFsdWUyKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5wcm9taXNlID09PSBwcm9taXNlICYmICF0aGlzLmhhc1Byb21pc2VTZXR0bGVkKSB7CiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUyKTsKICAgICAgICAgICAgdGhpcy5oYXNQcm9taXNlU2V0dGxlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5wcm9taXNlID09PSBwcm9taXNlICYmICF0aGlzLmhhc1Byb21pc2VTZXR0bGVkKSB7CiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoZXJyb3IpOwogICAgICAgICAgICB0aGlzLmhhc1Byb21pc2VTZXR0bGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBkaXNjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5oYXNQcm9taXNlU2V0dGxlZCA9IHRydWU7CiAgICAgIH0KICAgICAgcmVjb25uZWN0ZWQoKSB7CiAgICAgICAgaWYgKCF0aGlzLmhhc1Byb21pc2VTZXR0bGVkKSB7CiAgICAgICAgICB0aGlzLmhhbmRsZVByb21pc2UodGhpcy5wcm9taXNlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICByZXNvbHZlID0gZTQoUmVzb2x2ZURpcmVjdGl2ZSk7CiAgICByZXNvbHZlRXhlYyA9IChmdW5jQXJnKSA9PiB7CiAgICAgIHJldHVybiByZXNvbHZlKGZ1bmNBcmcoKSk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9kaXJlY3RpdmVzL2NsYXNzZXMuc3Vic2NyaWJlZGlyZWN0aXZlLmpzCnZhciBTdWJzY3JpYmVEaXJlY3RpdmUsIHN1YnNjcmliZTsKdmFyIGluaXRfY2xhc3Nlc19zdWJzY3JpYmVkaXJlY3RpdmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2RpcmVjdGl2ZXMvY2xhc3Nlcy5zdWJzY3JpYmVkaXJlY3RpdmUuanMiKCkgewogICAgaW5pdF9saXQoKTsKICAgIGluaXRfYXN5bmNfZGlyZWN0aXZlMigpOwogICAgaW5pdF9kaXN0X3RzMigpOwogICAgU3Vic2NyaWJlRGlyZWN0aXZlID0gY2xhc3MgZXh0ZW5kcyBmNSB7CiAgICAgIG9ic2VydmFibGU7CiAgICAgIHN1YiA9IG51bGw7CiAgICAgIHJlbmRlcihvYnNlcnZhYmxlMikgewogICAgICAgIGlmICh0aGlzLm9ic2VydmFibGUgIT09IG9ic2VydmFibGUyKSB7CiAgICAgICAgICB0aGlzLnN1Yj8udW5zdWJzY3JpYmUoKTsKICAgICAgICAgIHRoaXMub2JzZXJ2YWJsZSA9IG9ic2VydmFibGUyOwogICAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQpIHsKICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmUob2JzZXJ2YWJsZTIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gRTsKICAgICAgfQogICAgICBzdWJzY3JpYmUob2JzZXJ2YWJsZTIpIHsKICAgICAgICB0aGlzLnN1YiA9IG9ic2VydmFibGUyLnN1YnNjcmliZSgodjUpID0+IHsKICAgICAgICAgIHRoaXMuc2V0VmFsdWUodjUpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLnN1Yj8udW5zdWJzY3JpYmUoKTsKICAgICAgfQogICAgICByZWNvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLnN1YnNjcmliZSh0aGlzLm9ic2VydmFibGUpOwogICAgICB9CiAgICB9OwogICAgc3Vic2NyaWJlID0gZTQoU3Vic2NyaWJlRGlyZWN0aXZlKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvZGlyZWN0aXZlcy9jbGFzc2VzLnN1YnNjcmliZXdpdGh0ZW1wbGF0ZS5qcwp2YXIgU3Vic2NyaWJlV2l0aFRlbXBsYXRlRGlyZWN0aXZlLCBzdWJzY3JpYmVXaXRoVGVtcGxhdGU7CnZhciBpbml0X2NsYXNzZXNfc3Vic2NyaWJld2l0aHRlbXBsYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9kaXJlY3RpdmVzL2NsYXNzZXMuc3Vic2NyaWJld2l0aHRlbXBsYXRlLmpzIigpIHsKICAgIGluaXRfbGl0KCk7CiAgICBpbml0X2FzeW5jX2RpcmVjdGl2ZTIoKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIFN1YnNjcmliZVdpdGhUZW1wbGF0ZURpcmVjdGl2ZSA9IGNsYXNzIGV4dGVuZHMgZjUgewogICAgICBvYnNlcnZhYmxlOwogICAgICB0ZW1wbGF0ZUZuOwogICAgICBzdWIgPSBudWxsOwogICAgICByZW5kZXIob2JzZXJ2YWJsZTIsIHRlbXBsYXRlRm4pIHsKICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5vYnNlcnZhYmxlICE9PSBvYnNlcnZhYmxlMiB8fCB0aGlzLnRlbXBsYXRlRm4gIT09IHRlbXBsYXRlRm47CiAgICAgICAgaWYgKGNoYW5nZWQpIHsKICAgICAgICAgIHRoaXMuc3ViPy51bnN1YnNjcmliZSgpOwogICAgICAgICAgdGhpcy5vYnNlcnZhYmxlID0gb2JzZXJ2YWJsZTI7CiAgICAgICAgICB0aGlzLnRlbXBsYXRlRm4gPSB0ZW1wbGF0ZUZuOwogICAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQpIHsKICAgICAgICAgICAgdGhpcy5zdGFydFN1YnNjcmlwdGlvbigpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gRTsKICAgICAgfQogICAgICBzdGFydFN1YnNjcmlwdGlvbigpIHsKICAgICAgICB0aGlzLnN1YiA9IHRoaXMub2JzZXJ2YWJsZS5zdWJzY3JpYmUoKHY1KSA9PiB7CiAgICAgICAgICBjb25zdCBvdXQgPSB0aGlzLnRlbXBsYXRlRm4odjUpOwogICAgICAgICAgdGhpcy5zZXRWYWx1ZShvdXQpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLnN1Yj8udW5zdWJzY3JpYmUoKTsKICAgICAgfQogICAgICByZWNvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLnN0YXJ0U3Vic2NyaXB0aW9uKCk7CiAgICAgIH0KICAgIH07CiAgICBzdWJzY3JpYmVXaXRoVGVtcGxhdGUgPSBlNChTdWJzY3JpYmVXaXRoVGVtcGxhdGVEaXJlY3RpdmUpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvcHJpdmF0ZS1hc3luYy1oZWxwZXJzLmpzCnZhciB0NywgczcsIGk4Owp2YXIgaW5pdF9wcml2YXRlX2FzeW5jX2hlbHBlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy9wcml2YXRlLWFzeW5jLWhlbHBlcnMuanMiKCkgewogICAgdDcgPSBhc3luYyAodDksIHM5KSA9PiB7CiAgICAgIGZvciBhd2FpdCAoY29uc3QgaTExIG9mIHQ5KSBpZiAoZmFsc2UgPT09IGF3YWl0IHM5KGkxMSkpIHJldHVybjsKICAgIH07CiAgICBzNyA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodDkpIHsKICAgICAgICB0aGlzLkcgPSB0OTsKICAgICAgfQogICAgICBkaXNjb25uZWN0KCkgewogICAgICAgIHRoaXMuRyA9IHZvaWQgMDsKICAgICAgfQogICAgICByZWNvbm5lY3QodDkpIHsKICAgICAgICB0aGlzLkcgPSB0OTsKICAgICAgfQogICAgICBkZXJlZigpIHsKICAgICAgICByZXR1cm4gdGhpcy5HOwogICAgICB9CiAgICB9OwogICAgaTggPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuWSA9IHZvaWQgMCwgdGhpcy5aID0gdm9pZCAwOwogICAgICB9CiAgICAgIGdldCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5ZOwogICAgICB9CiAgICAgIHBhdXNlKCkgewogICAgICAgIHRoaXMuWSA/Pz0gbmV3IFByb21pc2UoKHQ5KSA9PiB0aGlzLlogPSB0OSk7CiAgICAgIH0KICAgICAgcmVzdW1lKCkgewogICAgICAgIHRoaXMuWj8uKCksIHRoaXMuWSA9IHRoaXMuWiA9IHZvaWQgMDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL3VudGlsLmpzCnZhciBuMTEsIGg2LCBjNywgbTQ7CnZhciBpbml0X3VudGlsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvdW50aWwuanMiKCkgewogICAgaW5pdF9saXRfaHRtbCgpOwogICAgaW5pdF9kaXJlY3RpdmVfaGVscGVycygpOwogICAgaW5pdF9hc3luY19kaXJlY3RpdmUoKTsKICAgIGluaXRfcHJpdmF0ZV9hc3luY19oZWxwZXJzKCk7CiAgICBpbml0X2RpcmVjdGl2ZSgpOwogICAgbjExID0gKHQ5KSA9PiAhbjkodDkpICYmICJmdW5jdGlvbiIgPT0gdHlwZW9mIHQ5LnRoZW4sIGg2ID0gMTA3Mzc0MTgyMzsKICAgIGM3ID0gY2xhc3MgZXh0ZW5kcyBmNSB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyksIHRoaXMuXyRDd3QgPSBoNiwgdGhpcy5fJENidCA9IFtdLCB0aGlzLl8kQ0sgPSBuZXcgczcodGhpcyksIHRoaXMuXyRDWCA9IG5ldyBpOCgpOwogICAgICB9CiAgICAgIHJlbmRlciguLi5zOSkgewogICAgICAgIHJldHVybiBzOS5maW5kKCh0OSkgPT4gIW4xMSh0OSkpID8/IEU7CiAgICAgIH0KICAgICAgdXBkYXRlKHM5LCBpMTEpIHsKICAgICAgICBjb25zdCBlMTEgPSB0aGlzLl8kQ2J0OwogICAgICAgIGxldCByMTEgPSBlMTEubGVuZ3RoOwogICAgICAgIHRoaXMuXyRDYnQgPSBpMTE7CiAgICAgICAgY29uc3QgbzEzID0gdGhpcy5fJENLLCBjMTEgPSB0aGlzLl8kQ1g7CiAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCB8fCB0aGlzLmRpc2Nvbm5lY3RlZCgpOwogICAgICAgIGZvciAobGV0IHQ5ID0gMDsgdDkgPCBpMTEubGVuZ3RoICYmICEodDkgPiB0aGlzLl8kQ3d0KTsgdDkrKykgewogICAgICAgICAgY29uc3QgczEwID0gaTExW3Q5XTsKICAgICAgICAgIGlmICghbjExKHMxMCkpIHJldHVybiB0aGlzLl8kQ3d0ID0gdDksIHMxMDsKICAgICAgICAgIHQ5IDwgcjExICYmIHMxMCA9PT0gZTExW3Q5XSB8fCAodGhpcy5fJEN3dCA9IGg2LCByMTEgPSAwLCBQcm9taXNlLnJlc29sdmUoczEwKS50aGVuKGFzeW5jICh0MTApID0+IHsKICAgICAgICAgICAgZm9yICg7IGMxMS5nZXQoKTsgKSBhd2FpdCBjMTEuZ2V0KCk7CiAgICAgICAgICAgIGNvbnN0IGkxMiA9IG8xMy5kZXJlZigpOwogICAgICAgICAgICBpZiAodm9pZCAwICE9PSBpMTIpIHsKICAgICAgICAgICAgICBjb25zdCBlMTIgPSBpMTIuXyRDYnQuaW5kZXhPZihzMTApOwogICAgICAgICAgICAgIGUxMiA+IC0xICYmIGUxMiA8IGkxMi5fJEN3dCAmJiAoaTEyLl8kQ3d0ID0gZTEyLCBpMTIuc2V0VmFsdWUodDEwKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEU7CiAgICAgIH0KICAgICAgZGlzY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuXyRDSy5kaXNjb25uZWN0KCksIHRoaXMuXyRDWC5wYXVzZSgpOwogICAgICB9CiAgICAgIHJlY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuXyRDSy5yZWNvbm5lY3QodGhpcyksIHRoaXMuXyRDWC5yZXN1bWUoKTsKICAgICAgfQogICAgfTsKICAgIG00ID0gZTQoYzcpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGlyZWN0aXZlcy91bnRpbC5qcwp2YXIgaW5pdF91bnRpbDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL3VudGlsLmpzIigpIHsKICAgIGluaXRfdW50aWwoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL2FzeW5jLXJlcGxhY2UuanMKdmFyIG8xMSwgaDc7CnZhciBpbml0X2FzeW5jX3JlcGxhY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy9hc3luYy1yZXBsYWNlLmpzIigpIHsKICAgIGluaXRfbGl0X2h0bWwoKTsKICAgIGluaXRfYXN5bmNfZGlyZWN0aXZlKCk7CiAgICBpbml0X3ByaXZhdGVfYXN5bmNfaGVscGVycygpOwogICAgaW5pdF9kaXJlY3RpdmUoKTsKICAgIG8xMSA9IGNsYXNzIGV4dGVuZHMgZjUgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpLCB0aGlzLl8kQ0sgPSBuZXcgczcodGhpcyksIHRoaXMuXyRDWCA9IG5ldyBpOCgpOwogICAgICB9CiAgICAgIHJlbmRlcihpMTEsIHM5KSB7CiAgICAgICAgcmV0dXJuIEU7CiAgICAgIH0KICAgICAgdXBkYXRlKGkxMSwgW3M5LCByMTFdKSB7CiAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQgfHwgdGhpcy5kaXNjb25uZWN0ZWQoKSwgczkgPT09IHRoaXMuXyRDSikgcmV0dXJuIEU7CiAgICAgICAgdGhpcy5fJENKID0gczk7CiAgICAgICAgbGV0IG4xMyA9IDA7CiAgICAgICAgY29uc3QgeyBfJENLOiBvMTMsIF8kQ1g6IGg5IH0gPSB0aGlzOwogICAgICAgIHJldHVybiB0NyhzOSwgYXN5bmMgKHQ5KSA9PiB7CiAgICAgICAgICBmb3IgKDsgaDkuZ2V0KCk7ICkgYXdhaXQgaDkuZ2V0KCk7CiAgICAgICAgICBjb25zdCBpMTIgPSBvMTMuZGVyZWYoKTsKICAgICAgICAgIGlmICh2b2lkIDAgIT09IGkxMikgewogICAgICAgICAgICBpZiAoaTEyLl8kQ0ogIT09IHM5KSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIHZvaWQgMCAhPT0gcjExICYmICh0OSA9IHIxMSh0OSwgbjEzKSksIGkxMi5jb21taXRWYWx1ZSh0OSwgbjEzKSwgbjEzKys7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9KSwgRTsKICAgICAgfQogICAgICBjb21taXRWYWx1ZSh0OSwgaTExKSB7CiAgICAgICAgdGhpcy5zZXRWYWx1ZSh0OSk7CiAgICAgIH0KICAgICAgZGlzY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuXyRDSy5kaXNjb25uZWN0KCksIHRoaXMuXyRDWC5wYXVzZSgpOwogICAgICB9CiAgICAgIHJlY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuXyRDSy5yZWNvbm5lY3QodGhpcyksIHRoaXMuXyRDWC5yZXN1bWUoKTsKICAgICAgfQogICAgfTsKICAgIGg3ID0gZTQobzExKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL2FzeW5jLWFwcGVuZC5qcwp2YXIgYzg7CnZhciBpbml0X2FzeW5jX2FwcGVuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL2FzeW5jLWFwcGVuZC5qcyIoKSB7CiAgICBpbml0X2RpcmVjdGl2ZSgpOwogICAgaW5pdF9hc3luY19yZXBsYWNlKCk7CiAgICBpbml0X2RpcmVjdGl2ZV9oZWxwZXJzKCk7CiAgICBjOCA9IGU0KGNsYXNzIGV4dGVuZHMgbzExIHsKICAgICAgY29uc3RydWN0b3IocjExKSB7CiAgICAgICAgaWYgKHN1cGVyKHIxMSksIHIxMS50eXBlICE9PSB0My5DSElMRCkgdGhyb3cgRXJyb3IoImFzeW5jQXBwZW5kIGNhbiBvbmx5IGJlIHVzZWQgaW4gY2hpbGQgZXhwcmVzc2lvbnMiKTsKICAgICAgfQogICAgICB1cGRhdGUocjExLCBlMTEpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEN0dCA9IHIxMSwgc3VwZXIudXBkYXRlKHIxMSwgZTExKTsKICAgICAgfQogICAgICBjb21taXRWYWx1ZShyMTEsIGUxMSkgewogICAgICAgIDAgPT09IGUxMSAmJiBqMih0aGlzLl8kQ3R0KTsKICAgICAgICBjb25zdCBzOSA9IHYzKHRoaXMuXyRDdHQpOwogICAgICAgIHU0KHM5LCByMTEpOwogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RpcmVjdGl2ZXMvYXN5bmMtYXBwZW5kLmpzCnZhciBpbml0X2FzeW5jX2FwcGVuZDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL2FzeW5jLWFwcGVuZC5qcyIoKSB7CiAgICBpbml0X2FzeW5jX2FwcGVuZCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMva2V5ZWQuanMKdmFyIGk5Owp2YXIgaW5pdF9rZXllZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL2tleWVkLmpzIigpIHsKICAgIGluaXRfbGl0X2h0bWwoKTsKICAgIGluaXRfZGlyZWN0aXZlKCk7CiAgICBpbml0X2RpcmVjdGl2ZV9oZWxwZXJzKCk7CiAgICBpOSA9IGU0KGNsYXNzIGV4dGVuZHMgaTYgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpLCB0aGlzLmtleSA9IEE7CiAgICAgIH0KICAgICAgcmVuZGVyKHIxMSwgdDkpIHsKICAgICAgICByZXR1cm4gdGhpcy5rZXkgPSByMTEsIHQ5OwogICAgICB9CiAgICAgIHVwZGF0ZShyMTEsIFt0OSwgZTExXSkgewogICAgICAgIHJldHVybiB0OSAhPT0gdGhpcy5rZXkgJiYgKHA1KHIxMSksIHRoaXMua2V5ID0gdDkpLCBlMTE7CiAgICAgIH0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGlyZWN0aXZlcy9rZXllZC5qcwp2YXIgaW5pdF9rZXllZDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL2tleWVkLmpzIigpIHsKICAgIGluaXRfa2V5ZWQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL3JlcGVhdC5qcwp2YXIgdTUsIGM5Owp2YXIgaW5pdF9yZXBlYXQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvcmVwZWF0LmpzIigpIHsKICAgIGluaXRfbGl0X2h0bWwoKTsKICAgIGluaXRfZGlyZWN0aXZlKCk7CiAgICBpbml0X2RpcmVjdGl2ZV9oZWxwZXJzKCk7CiAgICB1NSA9IChlMTEsIHM5LCB0OSkgPT4gewogICAgICBjb25zdCByMTEgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICBmb3IgKGxldCBsNiA9IHM5OyBsNiA8PSB0OTsgbDYrKykgcjExLnNldChlMTFbbDZdLCBsNik7CiAgICAgIHJldHVybiByMTE7CiAgICB9LCBjOSA9IGU0KGNsYXNzIGV4dGVuZHMgaTYgewogICAgICBjb25zdHJ1Y3RvcihlMTEpIHsKICAgICAgICBpZiAoc3VwZXIoZTExKSwgZTExLnR5cGUgIT09IHQzLkNISUxEKSB0aHJvdyBFcnJvcigicmVwZWF0KCkgY2FuIG9ubHkgYmUgdXNlZCBpbiB0ZXh0IGV4cHJlc3Npb25zIik7CiAgICAgIH0KICAgICAgZHQoZTExLCBzOSwgdDkpIHsKICAgICAgICBsZXQgcjExOwogICAgICAgIHZvaWQgMCA9PT0gdDkgPyB0OSA9IHM5IDogdm9pZCAwICE9PSBzOSAmJiAocjExID0gczkpOwogICAgICAgIGNvbnN0IGw2ID0gW10sIG8xMyA9IFtdOwogICAgICAgIGxldCBpMTEgPSAwOwogICAgICAgIGZvciAoY29uc3QgczEwIG9mIGUxMSkgbDZbaTExXSA9IHIxMSA/IHIxMShzMTAsIGkxMSkgOiBpMTEsIG8xM1tpMTFdID0gdDkoczEwLCBpMTEpLCBpMTErKzsKICAgICAgICByZXR1cm4geyB2YWx1ZXM6IG8xMywga2V5czogbDYgfTsKICAgICAgfQogICAgICByZW5kZXIoZTExLCBzOSwgdDkpIHsKICAgICAgICByZXR1cm4gdGhpcy5kdChlMTEsIHM5LCB0OSkudmFsdWVzOwogICAgICB9CiAgICAgIHVwZGF0ZShzOSwgW3Q5LCByMTEsIGMxMV0pIHsKICAgICAgICBjb25zdCBkNiA9IE0yKHM5KSwgeyB2YWx1ZXM6IHA3LCBrZXlzOiBhNSB9ID0gdGhpcy5kdCh0OSwgcjExLCBjMTEpOwogICAgICAgIGlmICghQXJyYXkuaXNBcnJheShkNikpIHJldHVybiB0aGlzLnV0ID0gYTUsIHA3OwogICAgICAgIGNvbnN0IGg5ID0gdGhpcy51dCA/Pz0gW10sIHY1ID0gW107CiAgICAgICAgbGV0IG02LCB5NSwgeDMgPSAwLCBqNCA9IGQ2Lmxlbmd0aCAtIDEsIGs0ID0gMCwgdzMgPSBwNy5sZW5ndGggLSAxOwogICAgICAgIGZvciAoOyB4MyA8PSBqNCAmJiBrNCA8PSB3MzsgKSBpZiAobnVsbCA9PT0gZDZbeDNdKSB4MysrOwogICAgICAgIGVsc2UgaWYgKG51bGwgPT09IGQ2W2o0XSkgajQtLTsKICAgICAgICBlbHNlIGlmIChoOVt4M10gPT09IGE1W2s0XSkgdjVbazRdID0gdTQoZDZbeDNdLCBwN1trNF0pLCB4MysrLCBrNCsrOwogICAgICAgIGVsc2UgaWYgKGg5W2o0XSA9PT0gYTVbdzNdKSB2NVt3M10gPSB1NChkNltqNF0sIHA3W3czXSksIGo0LS0sIHczLS07CiAgICAgICAgZWxzZSBpZiAoaDlbeDNdID09PSBhNVt3M10pIHY1W3czXSA9IHU0KGQ2W3gzXSwgcDdbdzNdKSwgdjMoczksIHY1W3czICsgMV0sIGQ2W3gzXSksIHgzKyssIHczLS07CiAgICAgICAgZWxzZSBpZiAoaDlbajRdID09PSBhNVtrNF0pIHY1W2s0XSA9IHU0KGQ2W2o0XSwgcDdbazRdKSwgdjMoczksIGQ2W3gzXSwgZDZbajRdKSwgajQtLSwgazQrKzsKICAgICAgICBlbHNlIGlmICh2b2lkIDAgPT09IG02ICYmIChtNiA9IHU1KGE1LCBrNCwgdzMpLCB5NSA9IHU1KGg5LCB4MywgajQpKSwgbTYuaGFzKGg5W3gzXSkpIGlmIChtNi5oYXMoaDlbajRdKSkgewogICAgICAgICAgY29uc3QgZTExID0geTUuZ2V0KGE1W2s0XSksIHQxMCA9IHZvaWQgMCAhPT0gZTExID8gZDZbZTExXSA6IG51bGw7CiAgICAgICAgICBpZiAobnVsbCA9PT0gdDEwKSB7CiAgICAgICAgICAgIGNvbnN0IGUxMiA9IHYzKHM5LCBkNlt4M10pOwogICAgICAgICAgICB1NChlMTIsIHA3W2s0XSksIHY1W2s0XSA9IGUxMjsKICAgICAgICAgIH0gZWxzZSB2NVtrNF0gPSB1NCh0MTAsIHA3W2s0XSksIHYzKHM5LCBkNlt4M10sIHQxMCksIGQ2W2UxMV0gPSBudWxsOwogICAgICAgICAgazQrKzsKICAgICAgICB9IGVsc2UgaDQoZDZbajRdKSwgajQtLTsKICAgICAgICBlbHNlIGg0KGQ2W3gzXSksIHgzKys7CiAgICAgICAgZm9yICg7IGs0IDw9IHczOyApIHsKICAgICAgICAgIGNvbnN0IGUxMSA9IHYzKHM5LCB2NVt3MyArIDFdKTsKICAgICAgICAgIHU0KGUxMSwgcDdbazRdKSwgdjVbazQrK10gPSBlMTE7CiAgICAgICAgfQogICAgICAgIGZvciAoOyB4MyA8PSBqNDsgKSB7CiAgICAgICAgICBjb25zdCBlMTEgPSBkNlt4MysrXTsKICAgICAgICAgIG51bGwgIT09IGUxMSAmJiBoNChlMTEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy51dCA9IGE1LCBwNShzOSwgdjUpLCBFOwogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RpcmVjdGl2ZXMvcmVwZWF0LmpzCnZhciBpbml0X3JlcGVhdDMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL3JlcGVhdC5qcyIoKSB7CiAgICBpbml0X3JlcGVhdDIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvZGlyZWN0aXZlcy9pbmRleC5qcwp2YXIgZGlyZWN0aXZlc19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRpcmVjdGl2ZXNfZXhwb3J0cywgewogIGFzeW5jQXBwZW5kOiAoKSA9PiBjOCwKICBrZXllZDogKCkgPT4gaTksCiAgcmVwZWF0OiAoKSA9PiBjOSwKICByZXNvbHZlOiAoKSA9PiByZXNvbHZlLAogIHJlc29sdmVFeGVjOiAoKSA9PiByZXNvbHZlRXhlYywKICBzdWJzY3JpYmU6ICgpID0+IHN1YnNjcmliZSwKICBzdWJzY3JpYmVXaXRoVGVtcGxhdGU6ICgpID0+IHN1YnNjcmliZVdpdGhUZW1wbGF0ZSwKICB1bnRpbDogKCkgPT4gbTQKfSk7CnZhciBpbml0X2RpcmVjdGl2ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2RpcmVjdGl2ZXMvaW5kZXguanMiKCkgewogICAgaW5pdF9jbGFzc2VzX3Jlc29sdmVkaXJlY3RpdmUoKTsKICAgIGluaXRfY2xhc3Nlc19zdWJzY3JpYmVkaXJlY3RpdmUoKTsKICAgIGluaXRfY2xhc3Nlc19zdWJzY3JpYmV3aXRodGVtcGxhdGUoKTsKICAgIGluaXRfdW50aWwyKCk7CiAgICBpbml0X2FzeW5jX2FwcGVuZDIoKTsKICAgIGluaXRfa2V5ZWQyKCk7CiAgICBpbml0X3JlcGVhdDMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czI2ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czI2LCB7CiAgRGVlc0VsZW1lbnQ6ICgpID0+IERlZXNFbGVtZW50LAogIGNzczogKCkgPT4gaSwKICBjc3NNYW5hZ2VyOiAoKSA9PiBjc3NNYW5hZ2VyLAogIGN1c3RvbUVsZW1lbnQ6ICgpID0+IHQ0LAogIGRpcmVjdGl2ZXM6ICgpID0+IGRpcmVjdGl2ZXNfZXhwb3J0cywKICBkb210b29sczogKCkgPT4gZGlzdF90c19leHBvcnRzMjUsCiAgaHRtbDogKCkgPT4gYjIsCiAgcHJvcGVydHk6ICgpID0+IG41LAogIHF1ZXJ5OiAoKSA9PiBlNywKICBxdWVyeUFsbDogKCkgPT4gcjYsCiAgcXVlcnlBc3luYzogKCkgPT4gcjcsCiAgcmVuZGVyOiAoKSA9PiBELAogIHN0YXRlOiAoKSA9PiByNSwKICBzdGF0aWM6ICgpID0+IHUzLAogIHVuc2FmZUNTUzogKCkgPT4gciwKICB1bnNhZmVIVE1MOiAoKSA9PiBvOCwKICB1bnNhZmVTdGF0aWM6ICgpID0+IHM0Cn0pOwp2YXIgY3NzTWFuYWdlcjsKdmFyIGluaXRfZGlzdF90czI2ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfY3NzbWFuYWdlcigpOwogICAgaW5pdF9saXQoKTsKICAgIGluaXRfc3RhdGljX2h0bWwoKTsKICAgIGluaXRfdW5zYWZlX2h0bWwyKCk7CiAgICBpbml0X2N1c3RvbV9lbGVtZW50MigpOwogICAgaW5pdF9kZWNvcmF0b3JzKCk7CiAgICBpbml0X2Rpc3RfdHMyNSgpOwogICAgaW5pdF9jbGFzc2VzX2RlZXNfZWxlbWVudCgpOwogICAgaW5pdF9kaXJlY3RpdmVzKCk7CiAgICBjc3NNYW5hZ2VyID0gQ3NzTWFuYWdlci5nZXRTaW5nbGV0b24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMHRoZW1lLmpzCnZhciB0aGVtZURlZmF1bHRzLCB0aGVtZURlZmF1bHRTdHlsZXM7CnZhciBpbml0X3RoZW1lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwdGhlbWUuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjYoKTsKICAgIHRoZW1lRGVmYXVsdHMgPSB7CiAgICAgIGNvbG9yczogewogICAgICAgIGxpZ2h0OiB7CiAgICAgICAgICBiZ1ByaW1hcnk6ICIjZmZmZmZmIiwKICAgICAgICAgIGJnU2Vjb25kYXJ5OiAiI2ZhZmFmYSIsCiAgICAgICAgICBiZ1RlcnRpYXJ5OiAiI2Y0ZjRmNSIsCiAgICAgICAgICB0ZXh0UHJpbWFyeTogIiMwOTA5MGIiLAogICAgICAgICAgdGV4dFNlY29uZGFyeTogIiMzNzQxNTEiLAogICAgICAgICAgdGV4dE11dGVkOiAiIzcxNzE3YSIsCiAgICAgICAgICBib3JkZXJEZWZhdWx0OiAiI2U1ZTdlYiIsCiAgICAgICAgICBib3JkZXJTdWJ0bGU6ICIjZjRmNGY1IiwKICAgICAgICAgIGJvcmRlclN0cm9uZzogIiNkMWQ1ZGIiLAogICAgICAgICAgYWNjZW50UHJpbWFyeTogIiMzYjgyZjYiLAogICAgICAgICAgYWNjZW50U3VjY2VzczogIiMyMmM1NWUiLAogICAgICAgICAgYWNjZW50V2FybmluZzogIiNmNTllMGIiLAogICAgICAgICAgYWNjZW50RXJyb3I6ICIjZWY0NDQ0IgogICAgICAgIH0sCiAgICAgICAgZGFyazogewogICAgICAgICAgYmdQcmltYXJ5OiAiIzA5MDkwYiIsCiAgICAgICAgICBiZ1NlY29uZGFyeTogIiMwYTBhMGEiLAogICAgICAgICAgYmdUZXJ0aWFyeTogIiMxODE4MWIiLAogICAgICAgICAgdGV4dFByaW1hcnk6ICIjZmFmYWZhIiwKICAgICAgICAgIHRleHRTZWNvbmRhcnk6ICIjZDRkNGQ4IiwKICAgICAgICAgIHRleHRNdXRlZDogIiNhMWExYWEiLAogICAgICAgICAgYm9yZGVyRGVmYXVsdDogIiMyNzI3MmEiLAogICAgICAgICAgYm9yZGVyU3VidGxlOiAiIzFhMWExYSIsCiAgICAgICAgICBib3JkZXJTdHJvbmc6ICIjM2YzZjQ2IiwKICAgICAgICAgIGFjY2VudFByaW1hcnk6ICIjM2I4MmY2IiwKICAgICAgICAgIGFjY2VudFN1Y2Nlc3M6ICIjMjJjNTVlIiwKICAgICAgICAgIGFjY2VudFdhcm5pbmc6ICIjZjU5ZTBiIiwKICAgICAgICAgIGFjY2VudEVycm9yOiAiI2VmNDQ0NCIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHNwYWNpbmc6IHsKICAgICAgICB4czogIjRweCIsCiAgICAgICAgc206ICI4cHgiLAogICAgICAgIG1kOiAiMTJweCIsCiAgICAgICAgbGc6ICIxNnB4IiwKICAgICAgICB4bDogIjI0cHgiLAogICAgICAgICIyeGwiOiAiMzJweCIsCiAgICAgICAgIjN4bCI6ICI0OHB4IgogICAgICB9LAogICAgICByYWRpdXM6IHsKICAgICAgICB4czogIjJweCIsCiAgICAgICAgc206ICI0cHgiLAogICAgICAgIG1kOiAiNnB4IiwKICAgICAgICBsZzogIjhweCIsCiAgICAgICAgeGw6ICIxMnB4IiwKICAgICAgICBmdWxsOiAiOTk5cHgiCiAgICAgIH0sCiAgICAgIHNoYWRvd3M6IHsKICAgICAgICB4czogIjAgMXB4IDJweCAwIHJnYigwIDAgMCAvIDAuMDUpIiwKICAgICAgICBzbTogIjAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSkiLAogICAgICAgIG1kOiAiMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xNSkiLAogICAgICAgIGxnOiAiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpIgogICAgICB9LAogICAgICB0cmFuc2l0aW9uczogewogICAgICAgIGZhc3Q6ICIwLjFzIiwKICAgICAgICBkZWZhdWx0OiAiMC4xNXMiLAogICAgICAgIHNsb3c6ICIwLjJzIiwKICAgICAgICBzbG93ZXI6ICIwLjNzIgogICAgICB9LAogICAgICBjb250cm9sSGVpZ2h0czogewogICAgICAgIHNtOiAiMzJweCIsCiAgICAgICAgbWQ6ICIzNnB4IiwKICAgICAgICBsZzogIjQwcHgiLAogICAgICAgIHhsOiAiNDhweCIKICAgICAgfQogICAgfTsKICAgIHRoZW1lRGVmYXVsdFN0eWxlcyA9IGlgCiAgOmhvc3QgewogICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICogU3BhY2luZyBTY2FsZQogICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogICAgLS1kZWVzLXNwYWNpbmcteHM6IDRweDsKICAgIC0tZGVlcy1zcGFjaW5nLXNtOiA4cHg7CiAgICAtLWRlZXMtc3BhY2luZy1tZDogMTJweDsKICAgIC0tZGVlcy1zcGFjaW5nLWxnOiAxNnB4OwogICAgLS1kZWVzLXNwYWNpbmcteGw6IDI0cHg7CiAgICAtLWRlZXMtc3BhY2luZy0yeGw6IDMycHg7CiAgICAtLWRlZXMtc3BhY2luZy0zeGw6IDQ4cHg7CgogICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICogQm9yZGVyIFJhZGl1cyBTY2FsZQogICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogICAgLS1kZWVzLXJhZGl1cy14czogMnB4OwogICAgLS1kZWVzLXJhZGl1cy1zbTogNHB4OwogICAgLS1kZWVzLXJhZGl1cy1tZDogNnB4OwogICAgLS1kZWVzLXJhZGl1cy1sZzogOHB4OwogICAgLS1kZWVzLXJhZGl1cy14bDogMTJweDsKICAgIC0tZGVlcy1yYWRpdXMtZnVsbDogOTk5cHg7CgogICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICogU2hhZG93IEVsZXZhdGlvbiBTY2FsZQogICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogICAgLS1kZWVzLXNoYWRvdy14czogMCAxcHggMnB4IDAgcmdiKDAgMCAwIC8gMC4wNSk7CiAgICAtLWRlZXMtc2hhZG93LXNtOiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgLS1kZWVzLXNoYWRvdy1tZDogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAtLWRlZXMtc2hhZG93LWxnOiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CgogICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICogVHJhbnNpdGlvbiBEdXJhdGlvbiBTY2FsZQogICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogICAgLS1kZWVzLXRyYW5zaXRpb24tZmFzdDogMC4xczsKICAgIC0tZGVlcy10cmFuc2l0aW9uLWRlZmF1bHQ6IDAuMTVzOwogICAgLS1kZWVzLXRyYW5zaXRpb24tc2xvdzogMC4yczsKICAgIC0tZGVlcy10cmFuc2l0aW9uLXNsb3dlcjogMC4zczsKCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgKiBDb250cm9sIEhlaWdodCBTY2FsZQogICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogICAgLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXNtOiAzMnB4OwogICAgLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LW1kOiAzNnB4OwogICAgLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LWxnOiA0MHB4OwogICAgLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXhsOiA0OHB4OwogIH0KYDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0Bmb3J0YXdlc29tZStmb250YXdlc29tZS1zdmctY29yZUA3LjEuMC9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlL2luZGV4Lm1qcwpmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyMTEsIGE1KSB7CiAgKG51bGwgPT0gYTUgfHwgYTUgPiByMTEubGVuZ3RoKSAmJiAoYTUgPSByMTEubGVuZ3RoKTsKICBmb3IgKHZhciBlMTEgPSAwLCBuMTMgPSBBcnJheShhNSk7IGUxMSA8IGE1OyBlMTErKykgbjEzW2UxMV0gPSByMTFbZTExXTsKICByZXR1cm4gbjEzOwp9CmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyMTEpIHsKICBpZiAoQXJyYXkuaXNBcnJheShyMTEpKSByZXR1cm4gcjExOwp9CmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyMTEpIHsKICBpZiAoQXJyYXkuaXNBcnJheShyMTEpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocjExKTsKfQpmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYTUsIG4xMykgewogIGlmICghKGE1IGluc3RhbmNlb2YgbjEzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7Cn0KZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZTExLCByMTEpIHsKICBmb3IgKHZhciB0OSA9IDA7IHQ5IDwgcjExLmxlbmd0aDsgdDkrKykgewogICAgdmFyIG8xMyA9IHIxMVt0OV07CiAgICBvMTMuZW51bWVyYWJsZSA9IG8xMy5lbnVtZXJhYmxlIHx8IGZhbHNlLCBvMTMuY29uZmlndXJhYmxlID0gdHJ1ZSwgInZhbHVlIiBpbiBvMTMgJiYgKG8xMy53cml0YWJsZSA9IHRydWUpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZTExLCBfdG9Qcm9wZXJ0eUtleShvMTMua2V5KSwgbzEzKTsKICB9Cn0KZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUxMSwgcjExLCB0OSkgewogIHJldHVybiByMTEgJiYgX2RlZmluZVByb3BlcnRpZXMoZTExLnByb3RvdHlwZSwgcjExKSwgdDkgJiYgX2RlZmluZVByb3BlcnRpZXMoZTExLCB0OSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlMTEsICJwcm90b3R5cGUiLCB7CiAgICB3cml0YWJsZTogZmFsc2UKICB9KSwgZTExOwp9CmZ1bmN0aW9uIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHIxMSwgZTExKSB7CiAgdmFyIHQ5ID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByMTFbU3ltYm9sLml0ZXJhdG9yXSB8fCByMTFbIkBAaXRlcmF0b3IiXTsKICBpZiAoIXQ5KSB7CiAgICBpZiAoQXJyYXkuaXNBcnJheShyMTEpIHx8ICh0OSA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyMTEpKSB8fCBlMTEgJiYgcjExICYmICJudW1iZXIiID09IHR5cGVvZiByMTEubGVuZ3RoKSB7CiAgICAgIHQ5ICYmIChyMTEgPSB0OSk7CiAgICAgIHZhciBuMTMgPSAwLCBGMiA9IGZ1bmN0aW9uKCkgewogICAgICB9OwogICAgICByZXR1cm4gewogICAgICAgIHM6IEYyLAogICAgICAgIG46IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIG4xMyA+PSByMTEubGVuZ3RoID8gewogICAgICAgICAgICBkb25lOiB0cnVlCiAgICAgICAgICB9IDogewogICAgICAgICAgICBkb25lOiBmYWxzZSwKICAgICAgICAgICAgdmFsdWU6IHIxMVtuMTMrK10KICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICBlOiBmdW5jdGlvbihyMTIpIHsKICAgICAgICAgIHRocm93IHIxMjsKICAgICAgICB9LAogICAgICAgIGY6IEYyCiAgICAgIH07CiAgICB9CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIik7CiAgfQogIHZhciBvMTMsIGE1ID0gdHJ1ZSwgdTcgPSBmYWxzZTsKICByZXR1cm4gewogICAgczogZnVuY3Rpb24oKSB7CiAgICAgIHQ5ID0gdDkuY2FsbChyMTEpOwogICAgfSwKICAgIG46IGZ1bmN0aW9uKCkgewogICAgICB2YXIgcjEyID0gdDkubmV4dCgpOwogICAgICByZXR1cm4gYTUgPSByMTIuZG9uZSwgcjEyOwogICAgfSwKICAgIGU6IGZ1bmN0aW9uKHIxMikgewogICAgICB1NyA9IHRydWUsIG8xMyA9IHIxMjsKICAgIH0sCiAgICBmOiBmdW5jdGlvbigpIHsKICAgICAgdHJ5IHsKICAgICAgICBhNSB8fCBudWxsID09IHQ5LnJldHVybiB8fCB0OS5yZXR1cm4oKTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBpZiAodTcpIHRocm93IG8xMzsKICAgICAgfQogICAgfQogIH07Cn0KZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUxMSwgcjExLCB0OSkgewogIHJldHVybiAocjExID0gX3RvUHJvcGVydHlLZXkocjExKSkgaW4gZTExID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUxMSwgcjExLCB7CiAgICB2YWx1ZTogdDksCiAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgd3JpdGFibGU6IHRydWUKICB9KSA6IGUxMVtyMTFdID0gdDksIGUxMTsKfQpmdW5jdGlvbiBfaW5oZXJpdHModDksIGUxMSkgewogIGlmICgiZnVuY3Rpb24iICE9IHR5cGVvZiBlMTEgJiYgbnVsbCAhPT0gZTExKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpOwogIHQ5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZTExICYmIGUxMS5wcm90b3R5cGUsIHsKICAgIGNvbnN0cnVjdG9yOiB7CiAgICAgIHZhbHVlOiB0OSwKICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgfQogIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodDksICJwcm90b3R5cGUiLCB7CiAgICB3cml0YWJsZTogZmFsc2UKICB9KSwgZTExICYmIF9zZXRQcm90b3R5cGVPZih0OSwgZTExKTsKfQpmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIxMSkgewogIGlmICgidW5kZWZpbmVkIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcjExW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByMTFbIkBAaXRlcmF0b3IiXSkgcmV0dXJuIEFycmF5LmZyb20ocjExKTsKfQpmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQocjExLCBsNikgewogIHZhciB0OSA9IG51bGwgPT0gcjExID8gbnVsbCA6ICJ1bmRlZmluZWQiICE9IHR5cGVvZiBTeW1ib2wgJiYgcjExW1N5bWJvbC5pdGVyYXRvcl0gfHwgcjExWyJAQGl0ZXJhdG9yIl07CiAgaWYgKG51bGwgIT0gdDkpIHsKICAgIHZhciBlMTEsIG4xMywgaTExLCB1NywgYTUgPSBbXSwgZjcgPSB0cnVlLCBvMTMgPSBmYWxzZTsKICAgIHRyeSB7CiAgICAgIGlmIChpMTEgPSAodDkgPSB0OS5jYWxsKHIxMSkpLm5leHQsIDAgPT09IGw2KSB7CiAgICAgICAgaWYgKE9iamVjdCh0OSkgIT09IHQ5KSByZXR1cm47CiAgICAgICAgZjcgPSBmYWxzZTsKICAgICAgfSBlbHNlIGZvciAoOyAhKGY3ID0gKGUxMSA9IGkxMS5jYWxsKHQ5KSkuZG9uZSkgJiYgKGE1LnB1c2goZTExLnZhbHVlKSwgYTUubGVuZ3RoICE9PSBsNik7IGY3ID0gdHJ1ZSkgOwogICAgfSBjYXRjaCAocjEyKSB7CiAgICAgIG8xMyA9IHRydWUsIG4xMyA9IHIxMjsKICAgIH0gZmluYWxseSB7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKCFmNyAmJiBudWxsICE9IHQ5LnJldHVybiAmJiAodTcgPSB0OS5yZXR1cm4oKSwgT2JqZWN0KHU3KSAhPT0gdTcpKSByZXR1cm47CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgaWYgKG8xMykgdGhyb3cgbjEzOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYTU7CiAgfQp9CmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7CiAgdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKTsKfQpmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7CiAgdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIik7Cn0KZnVuY3Rpb24gb3duS2V5czIoZTExLCByMTEpIHsKICB2YXIgdDkgPSBPYmplY3Qua2V5cyhlMTEpOwogIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7CiAgICB2YXIgbzEzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlMTEpOwogICAgcjExICYmIChvMTMgPSBvMTMuZmlsdGVyKGZ1bmN0aW9uKHIxMikgewogICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlMTEsIHIxMikuZW51bWVyYWJsZTsKICAgIH0pKSwgdDkucHVzaC5hcHBseSh0OSwgbzEzKTsKICB9CiAgcmV0dXJuIHQ5Owp9CmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKGUxMSkgewogIGZvciAodmFyIHIxMSA9IDE7IHIxMSA8IGFyZ3VtZW50cy5sZW5ndGg7IHIxMSsrKSB7CiAgICB2YXIgdDkgPSBudWxsICE9IGFyZ3VtZW50c1tyMTFdID8gYXJndW1lbnRzW3IxMV0gOiB7fTsKICAgIHIxMSAlIDIgPyBvd25LZXlzMihPYmplY3QodDkpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uKHIxMikgewogICAgICBfZGVmaW5lUHJvcGVydHkoZTExLCByMTIsIHQ5W3IxMl0pOwogICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUxMSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModDkpKSA6IG93bktleXMyKE9iamVjdCh0OSkpLmZvckVhY2goZnVuY3Rpb24ocjEyKSB7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlMTEsIHIxMiwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0OSwgcjEyKSk7CiAgICB9KTsKICB9CiAgcmV0dXJuIGUxMTsKfQpmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodDksIGUxMSkgewogIHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgIHJldHVybiB0MTAuX19wcm90b19fID0gZTEyLCB0MTA7CiAgfSwgX3NldFByb3RvdHlwZU9mKHQ5LCBlMTEpOwp9CmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIxMSwgZTExKSB7CiAgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhyMTEpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyMTEsIGUxMSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIxMSwgZTExKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7Cn0KZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIxMSkgewogIHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMocjExKSB8fCBfaXRlcmFibGVUb0FycmF5KHIxMSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIxMSkgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7Cn0KZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQ5LCByMTEpIHsKICBpZiAoIm9iamVjdCIgIT0gdHlwZW9mIHQ5IHx8ICF0OSkgcmV0dXJuIHQ5OwogIHZhciBlMTEgPSB0OVtTeW1ib2wudG9QcmltaXRpdmVdOwogIGlmICh2b2lkIDAgIT09IGUxMSkgewogICAgdmFyIGkxMSA9IGUxMS5jYWxsKHQ5LCByMTEgfHwgImRlZmF1bHQiKTsKICAgIGlmICgib2JqZWN0IiAhPSB0eXBlb2YgaTExKSByZXR1cm4gaTExOwogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKTsKICB9CiAgcmV0dXJuICgic3RyaW5nIiA9PT0gcjExID8gU3RyaW5nIDogTnVtYmVyKSh0OSk7Cn0KZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodDkpIHsKICB2YXIgaTExID0gX3RvUHJpbWl0aXZlKHQ5LCAic3RyaW5nIik7CiAgcmV0dXJuICJzeW1ib2wiID09IHR5cGVvZiBpMTEgPyBpMTEgOiBpMTEgKyAiIjsKfQpmdW5jdGlvbiBfdHlwZW9mKG8xMykgewogICJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7CiAgcmV0dXJuIF90eXBlb2YgPSAiZnVuY3Rpb24iID09IHR5cGVvZiBTeW1ib2wgJiYgInN5bWJvbCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uKG8xNCkgewogICAgcmV0dXJuIHR5cGVvZiBvMTQ7CiAgfSA6IGZ1bmN0aW9uKG8xNCkgewogICAgcmV0dXJuIG8xNCAmJiAiZnVuY3Rpb24iID09IHR5cGVvZiBTeW1ib2wgJiYgbzE0LmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbzE0ICE9PSBTeW1ib2wucHJvdG90eXBlID8gInN5bWJvbCIgOiB0eXBlb2YgbzE0OwogIH0sIF90eXBlb2YobzEzKTsKfQpmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocjExLCBhNSkgewogIGlmIChyMTEpIHsKICAgIGlmICgic3RyaW5nIiA9PSB0eXBlb2YgcjExKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkocjExLCBhNSk7CiAgICB2YXIgdDkgPSB7fS50b1N0cmluZy5jYWxsKHIxMSkuc2xpY2UoOCwgLTEpOwogICAgcmV0dXJuICJPYmplY3QiID09PSB0OSAmJiByMTEuY29uc3RydWN0b3IgJiYgKHQ5ID0gcjExLmNvbnN0cnVjdG9yLm5hbWUpLCAiTWFwIiA9PT0gdDkgfHwgIlNldCIgPT09IHQ5ID8gQXJyYXkuZnJvbShyMTEpIDogIkFyZ3VtZW50cyIgPT09IHQ5IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQ5KSA/IF9hcnJheUxpa2VUb0FycmF5KHIxMSwgYTUpIDogdm9pZCAwOwogIH0KfQpmdW5jdGlvbiBfd3JhcFJlZ0V4cCgpIHsKICBfd3JhcFJlZ0V4cCA9IGZ1bmN0aW9uKGUxMiwgcjEyKSB7CiAgICByZXR1cm4gbmV3IEJhYmVsUmVnRXhwKGUxMiwgdm9pZCAwLCByMTIpOwogIH07CiAgdmFyIGUxMSA9IFJlZ0V4cC5wcm90b3R5cGUsIHIxMSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogIGZ1bmN0aW9uIEJhYmVsUmVnRXhwKGUxMiwgdDksIHA3KSB7CiAgICB2YXIgbzEzID0gUmVnRXhwKGUxMiwgdDkpOwogICAgcmV0dXJuIHIxMS5zZXQobzEzLCBwNyB8fCByMTEuZ2V0KGUxMikpLCBfc2V0UHJvdG90eXBlT2YobzEzLCBCYWJlbFJlZ0V4cC5wcm90b3R5cGUpOwogIH0KICBmdW5jdGlvbiBidWlsZEdyb3VwcyhlMTIsIHQ5KSB7CiAgICB2YXIgcDcgPSByMTEuZ2V0KHQ5KTsKICAgIHJldHVybiBPYmplY3Qua2V5cyhwNykucmVkdWNlKGZ1bmN0aW9uKHIxMiwgdDEwKSB7CiAgICAgIHZhciBvMTMgPSBwN1t0MTBdOwogICAgICBpZiAoIm51bWJlciIgPT0gdHlwZW9mIG8xMykgcjEyW3QxMF0gPSBlMTJbbzEzXTsKICAgICAgZWxzZSB7CiAgICAgICAgZm9yICh2YXIgaTExID0gMDsgdm9pZCAwID09PSBlMTJbbzEzW2kxMV1dICYmIGkxMSArIDEgPCBvMTMubGVuZ3RoOyApIGkxMSsrOwogICAgICAgIHIxMlt0MTBdID0gZTEyW28xM1tpMTFdXTsKICAgICAgfQogICAgICByZXR1cm4gcjEyOwogICAgfSwgLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCkpOwogIH0KICByZXR1cm4gX2luaGVyaXRzKEJhYmVsUmVnRXhwLCBSZWdFeHApLCBCYWJlbFJlZ0V4cC5wcm90b3R5cGUuZXhlYyA9IGZ1bmN0aW9uKHIxMikgewogICAgdmFyIHQ5ID0gZTExLmV4ZWMuY2FsbCh0aGlzLCByMTIpOwogICAgaWYgKHQ5KSB7CiAgICAgIHQ5Lmdyb3VwcyA9IGJ1aWxkR3JvdXBzKHQ5LCB0aGlzKTsKICAgICAgdmFyIHA3ID0gdDkuaW5kaWNlczsKICAgICAgcDcgJiYgKHA3Lmdyb3VwcyA9IGJ1aWxkR3JvdXBzKHA3LCB0aGlzKSk7CiAgICB9CiAgICByZXR1cm4gdDk7CiAgfSwgQmFiZWxSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5yZXBsYWNlXSA9IGZ1bmN0aW9uKHQ5LCBwNykgewogICAgaWYgKCJzdHJpbmciID09IHR5cGVvZiBwNykgewogICAgICB2YXIgbzEzID0gcjExLmdldCh0aGlzKTsKICAgICAgcmV0dXJuIGUxMVtTeW1ib2wucmVwbGFjZV0uY2FsbCh0aGlzLCB0OSwgcDcucmVwbGFjZSgvXCQ8KFtePl0rKSg+fCQpL2csIGZ1bmN0aW9uKGUxMiwgcjEyLCB0MTApIHsKICAgICAgICBpZiAoIiIgPT09IHQxMCkgcmV0dXJuIGUxMjsKICAgICAgICB2YXIgcDggPSBvMTNbcjEyXTsKICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwOCkgPyAiJCIgKyBwOC5qb2luKCIkIikgOiAibnVtYmVyIiA9PSB0eXBlb2YgcDggPyAiJCIgKyBwOCA6ICIiOwogICAgICB9KSk7CiAgICB9CiAgICBpZiAoImZ1bmN0aW9uIiA9PSB0eXBlb2YgcDcpIHsKICAgICAgdmFyIGkxMSA9IHRoaXM7CiAgICAgIHJldHVybiBlMTFbU3ltYm9sLnJlcGxhY2VdLmNhbGwodGhpcywgdDksIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBlMTIgPSBhcmd1bWVudHM7CiAgICAgICAgcmV0dXJuICJvYmplY3QiICE9IHR5cGVvZiBlMTJbZTEyLmxlbmd0aCAtIDFdICYmIChlMTIgPSBbXS5zbGljZS5jYWxsKGUxMikpLnB1c2goYnVpbGRHcm91cHMoZTEyLCBpMTEpKSwgcDcuYXBwbHkodGhpcywgZTEyKTsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gZTExW1N5bWJvbC5yZXBsYWNlXS5jYWxsKHRoaXMsIHQ5LCBwNyk7CiAgfSwgX3dyYXBSZWdFeHAuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKfQpmdW5jdGlvbiBmYW1pbHlQcm94eShvYmopIHsKICByZXR1cm4gbmV3IFByb3h5KG9iaiwgewogICAgZ2V0OiBmdW5jdGlvbiBnZXQyKHRhcmdldCwgcHJvcCkgewogICAgICByZXR1cm4gcHJvcCBpbiB0YXJnZXQgPyB0YXJnZXRbcHJvcF0gOiB0YXJnZXRbaTEwXTsKICAgIH0KICB9KTsKfQpmdW5jdGlvbiBnZXRBdHRyQ29uZmlnKGF0dHIpIHsKICB2YXIgZWxlbWVudDQgPSBET0NVTUVOVC5xdWVyeVNlbGVjdG9yKCJzY3JpcHRbIiArIGF0dHIgKyAiXSIpOwogIGlmIChlbGVtZW50NCkgewogICAgcmV0dXJuIGVsZW1lbnQ0LmdldEF0dHJpYnV0ZShhdHRyKTsKICB9Cn0KZnVuY3Rpb24gY29lcmNlKHZhbCkgewogIGlmICh2YWwgPT09ICIiKSByZXR1cm4gdHJ1ZTsKICBpZiAodmFsID09PSAiZmFsc2UiKSByZXR1cm4gZmFsc2U7CiAgaWYgKHZhbCA9PT0gInRydWUiKSByZXR1cm4gdHJ1ZTsKICByZXR1cm4gdmFsOwp9CmZ1bmN0aW9uIG9uQ2hhbmdlKGNiKSB7CiAgX29uQ2hhbmdlQ2IucHVzaChjYik7CiAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgX29uQ2hhbmdlQ2Iuc3BsaWNlKF9vbkNoYW5nZUNiLmluZGV4T2YoY2IpLCAxKTsKICB9Owp9CmZ1bmN0aW9uIGluc2VydENzcyhjc3MxNSkgewogIGlmICghY3NzMTUgfHwgIUlTX0RPTSkgewogICAgcmV0dXJuOwogIH0KICB2YXIgc3R5bGUgPSBET0NVTUVOVC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogIHN0eWxlLnNldEF0dHJpYnV0ZSgidHlwZSIsICJ0ZXh0L2NzcyIpOwogIHN0eWxlLmlubmVySFRNTCA9IGNzczE1OwogIHZhciBoZWFkQ2hpbGRyZW4gPSBET0NVTUVOVC5oZWFkLmNoaWxkTm9kZXM7CiAgdmFyIGJlZm9yZUNoaWxkID0gbnVsbDsKICBmb3IgKHZhciBpMTEgPSBoZWFkQ2hpbGRyZW4ubGVuZ3RoIC0gMTsgaTExID4gLTE7IGkxMS0tKSB7CiAgICB2YXIgY2hpbGQgPSBoZWFkQ2hpbGRyZW5baTExXTsKICAgIHZhciB0YWdOYW1lID0gKGNoaWxkLnRhZ05hbWUgfHwgIiIpLnRvVXBwZXJDYXNlKCk7CiAgICBpZiAoWyJTVFlMRSIsICJMSU5LIl0uaW5kZXhPZih0YWdOYW1lKSA+IC0xKSB7CiAgICAgIGJlZm9yZUNoaWxkID0gY2hpbGQ7CiAgICB9CiAgfQogIERPQ1VNRU5ULmhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBiZWZvcmVDaGlsZCk7CiAgcmV0dXJuIGNzczE1Owp9CmZ1bmN0aW9uIG5leHRVbmlxdWVJZCgpIHsKICB2YXIgc2l6ZSA9IDEyOwogIHZhciBpZCA9ICIiOwogIHdoaWxlIChzaXplLS0gPiAwKSB7CiAgICBpZCArPSBpZFBvb2xbTWF0aC5yYW5kb20oKSAqIDYyIHwgMF07CiAgfQogIHJldHVybiBpZDsKfQpmdW5jdGlvbiB0b0FycmF5MihvYmopIHsKICB2YXIgYXJyYXkgPSBbXTsKICBmb3IgKHZhciBpMTEgPSAob2JqIHx8IFtdKS5sZW5ndGggPj4+IDA7IGkxMS0tOyApIHsKICAgIGFycmF5W2kxMV0gPSBvYmpbaTExXTsKICB9CiAgcmV0dXJuIGFycmF5Owp9CmZ1bmN0aW9uIGNsYXNzQXJyYXkobm9kZTIpIHsKICBpZiAobm9kZTIuY2xhc3NMaXN0KSB7CiAgICByZXR1cm4gdG9BcnJheTIobm9kZTIuY2xhc3NMaXN0KTsKICB9IGVsc2UgewogICAgcmV0dXJuIChub2RlMi5nZXRBdHRyaWJ1dGUoImNsYXNzIikgfHwgIiIpLnNwbGl0KCIgIikuZmlsdGVyKGZ1bmN0aW9uKGkxMSkgewogICAgICByZXR1cm4gaTExOwogICAgfSk7CiAgfQp9CmZ1bmN0aW9uIGh0bWxFc2NhcGUoc3RyKSB7CiAgcmV0dXJuICIiLmNvbmNhdChzdHIpLnJlcGxhY2UoLyYvZywgIiZhbXA7IikucmVwbGFjZSgvIi9nLCAiJnF1b3Q7IikucmVwbGFjZSgvJy9nLCAiJiMzOTsiKS5yZXBsYWNlKC88L2csICImbHQ7IikucmVwbGFjZSgvPi9nLCAiJmd0OyIpOwp9CmZ1bmN0aW9uIGpvaW5BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpIHsKICByZXR1cm4gT2JqZWN0LmtleXMoYXR0cmlidXRlcyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uKGFjYywgYXR0cmlidXRlTmFtZSkgewogICAgcmV0dXJuIGFjYyArICIiLmNvbmNhdChhdHRyaWJ1dGVOYW1lLCAnPSInKS5jb25jYXQoaHRtbEVzY2FwZShhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdKSwgJyIgJyk7CiAgfSwgIiIpLnRyaW0oKTsKfQpmdW5jdGlvbiBqb2luU3R5bGVzKHN0eWxlczMpIHsKICByZXR1cm4gT2JqZWN0LmtleXMoc3R5bGVzMyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uKGFjYywgc3R5bGVOYW1lKSB7CiAgICByZXR1cm4gYWNjICsgIiIuY29uY2F0KHN0eWxlTmFtZSwgIjogIikuY29uY2F0KHN0eWxlczNbc3R5bGVOYW1lXS50cmltKCksICI7Iik7CiAgfSwgIiIpOwp9CmZ1bmN0aW9uIHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0yKSB7CiAgcmV0dXJuIHRyYW5zZm9ybTIuc2l6ZSAhPT0gbWVhbmluZ2xlc3NUcmFuc2Zvcm0uc2l6ZSB8fCB0cmFuc2Zvcm0yLnggIT09IG1lYW5pbmdsZXNzVHJhbnNmb3JtLnggfHwgdHJhbnNmb3JtMi55ICE9PSBtZWFuaW5nbGVzc1RyYW5zZm9ybS55IHx8IHRyYW5zZm9ybTIucm90YXRlICE9PSBtZWFuaW5nbGVzc1RyYW5zZm9ybS5yb3RhdGUgfHwgdHJhbnNmb3JtMi5mbGlwWCB8fCB0cmFuc2Zvcm0yLmZsaXBZOwp9CmZ1bmN0aW9uIHRyYW5zZm9ybUZvclN2ZyhfcmVmMikgewogIHZhciB0cmFuc2Zvcm0yID0gX3JlZjIudHJhbnNmb3JtLCBjb250YWluZXJXaWR0aCA9IF9yZWYyLmNvbnRhaW5lcldpZHRoLCBpY29uV2lkdGggPSBfcmVmMi5pY29uV2lkdGg7CiAgdmFyIG91dGVyID0gewogICAgdHJhbnNmb3JtOiAidHJhbnNsYXRlKCIuY29uY2F0KGNvbnRhaW5lcldpZHRoIC8gMiwgIiAyNTYpIikKICB9OwogIHZhciBpbm5lclRyYW5zbGF0ZSA9ICJ0cmFuc2xhdGUoIi5jb25jYXQodHJhbnNmb3JtMi54ICogMzIsICIsICIpLmNvbmNhdCh0cmFuc2Zvcm0yLnkgKiAzMiwgIikgIik7CiAgdmFyIGlubmVyU2NhbGUgPSAic2NhbGUoIi5jb25jYXQodHJhbnNmb3JtMi5zaXplIC8gMTYgKiAodHJhbnNmb3JtMi5mbGlwWCA/IC0xIDogMSksICIsICIpLmNvbmNhdCh0cmFuc2Zvcm0yLnNpemUgLyAxNiAqICh0cmFuc2Zvcm0yLmZsaXBZID8gLTEgOiAxKSwgIikgIik7CiAgdmFyIGlubmVyUm90YXRlID0gInJvdGF0ZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnJvdGF0ZSwgIiAwIDApIik7CiAgdmFyIGlubmVyID0gewogICAgdHJhbnNmb3JtOiAiIi5jb25jYXQoaW5uZXJUcmFuc2xhdGUsICIgIikuY29uY2F0KGlubmVyU2NhbGUsICIgIikuY29uY2F0KGlubmVyUm90YXRlKQogIH07CiAgdmFyIHBhdGgyID0gewogICAgdHJhbnNmb3JtOiAidHJhbnNsYXRlKCIuY29uY2F0KGljb25XaWR0aCAvIDIgKiAtMSwgIiAtMjU2KSIpCiAgfTsKICByZXR1cm4gewogICAgb3V0ZXIsCiAgICBpbm5lciwKICAgIHBhdGg6IHBhdGgyCiAgfTsKfQpmdW5jdGlvbiB0cmFuc2Zvcm1Gb3JDc3MoX3JlZjIpIHsKICB2YXIgdHJhbnNmb3JtMiA9IF9yZWYyLnRyYW5zZm9ybSwgX3JlZjIkd2lkdGggPSBfcmVmMi53aWR0aCwgd2lkdGggPSBfcmVmMiR3aWR0aCA9PT0gdm9pZCAwID8gVU5JVFNfSU5fR1JJRCA6IF9yZWYyJHdpZHRoLCBfcmVmMiRoZWlnaHQgPSBfcmVmMi5oZWlnaHQsIGhlaWdodCA9IF9yZWYyJGhlaWdodCA9PT0gdm9pZCAwID8gVU5JVFNfSU5fR1JJRCA6IF9yZWYyJGhlaWdodCwgX3JlZjIkc3RhcnRDZW50ZXJlZCA9IF9yZWYyLnN0YXJ0Q2VudGVyZWQsIHN0YXJ0Q2VudGVyZWQgPSBfcmVmMiRzdGFydENlbnRlcmVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYyJHN0YXJ0Q2VudGVyZWQ7CiAgdmFyIHZhbCA9ICIiOwogIGlmIChzdGFydENlbnRlcmVkICYmIElTX0lFKSB7CiAgICB2YWwgKz0gInRyYW5zbGF0ZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnggLyBkJDIgLSB3aWR0aCAvIDIsICJlbSwgIikuY29uY2F0KHRyYW5zZm9ybTIueSAvIGQkMiAtIGhlaWdodCAvIDIsICJlbSkgIik7CiAgfSBlbHNlIGlmIChzdGFydENlbnRlcmVkKSB7CiAgICB2YWwgKz0gInRyYW5zbGF0ZShjYWxjKC01MCUgKyAiLmNvbmNhdCh0cmFuc2Zvcm0yLnggLyBkJDIsICJlbSksIGNhbGMoLTUwJSArICIpLmNvbmNhdCh0cmFuc2Zvcm0yLnkgLyBkJDIsICJlbSkpICIpOwogIH0gZWxzZSB7CiAgICB2YWwgKz0gInRyYW5zbGF0ZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnggLyBkJDIsICJlbSwgIikuY29uY2F0KHRyYW5zZm9ybTIueSAvIGQkMiwgImVtKSAiKTsKICB9CiAgdmFsICs9ICJzY2FsZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnNpemUgLyBkJDIgKiAodHJhbnNmb3JtMi5mbGlwWCA/IC0xIDogMSksICIsICIpLmNvbmNhdCh0cmFuc2Zvcm0yLnNpemUgLyBkJDIgKiAodHJhbnNmb3JtMi5mbGlwWSA/IC0xIDogMSksICIpICIpOwogIHZhbCArPSAicm90YXRlKCIuY29uY2F0KHRyYW5zZm9ybTIucm90YXRlLCAiZGVnKSAiKTsKICByZXR1cm4gdmFsOwp9CmZ1bmN0aW9uIGNzcygpIHsKICB2YXIgZGNwID0gREVGQVVMVF9DU1NfUFJFRklYOwogIHZhciBkcmMgPSBERUZBVUxUX1JFUExBQ0VNRU5UX0NMQVNTOwogIHZhciBmcCA9IGNvbmZpZzIuY3NzUHJlZml4OwogIHZhciByYyA9IGNvbmZpZzIucmVwbGFjZW1lbnRDbGFzczsKICB2YXIgczkgPSBiYXNlU3R5bGVzOwogIGlmIChmcCAhPT0gZGNwIHx8IHJjICE9PSBkcmMpIHsKICAgIHZhciBkUGF0dCA9IG5ldyBSZWdFeHAoIlxcLiIuY29uY2F0KGRjcCwgIlxcLSIpLCAiZyIpOwogICAgdmFyIGN1c3RvbVByb3BQYXR0ID0gbmV3IFJlZ0V4cCgiXFwtLSIuY29uY2F0KGRjcCwgIlxcLSIpLCAiZyIpOwogICAgdmFyIHJQYXR0ID0gbmV3IFJlZ0V4cCgiXFwuIi5jb25jYXQoZHJjKSwgImciKTsKICAgIHM5ID0gczkucmVwbGFjZShkUGF0dCwgIi4iLmNvbmNhdChmcCwgIi0iKSkucmVwbGFjZShjdXN0b21Qcm9wUGF0dCwgIi0tIi5jb25jYXQoZnAsICItIikpLnJlcGxhY2UoclBhdHQsICIuIi5jb25jYXQocmMpKTsKICB9CiAgcmV0dXJuIHM5Owp9CmZ1bmN0aW9uIGVuc3VyZUNzcygpIHsKICBpZiAoY29uZmlnMi5hdXRvQWRkQ3NzICYmICFfY3NzSW5zZXJ0ZWQpIHsKICAgIGluc2VydENzcyhjc3MoKSk7CiAgICBfY3NzSW5zZXJ0ZWQgPSB0cnVlOwogIH0KfQpmdW5jdGlvbiBkb21yZWFkeShmbikgewogIGlmICghSVNfRE9NKSByZXR1cm47CiAgbG9hZGVkID8gc2V0VGltZW91dChmbiwgMCkgOiBmdW5jdGlvbnMucHVzaChmbik7Cn0KZnVuY3Rpb24gdG9IdG1sMihhYnN0cmFjdE5vZGVzKSB7CiAgdmFyIHRhZyA9IGFic3RyYWN0Tm9kZXMudGFnLCBfYWJzdHJhY3ROb2RlcyRhdHRyaWIgPSBhYnN0cmFjdE5vZGVzLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMgPSBfYWJzdHJhY3ROb2RlcyRhdHRyaWIgPT09IHZvaWQgMCA/IHt9IDogX2Fic3RyYWN0Tm9kZXMkYXR0cmliLCBfYWJzdHJhY3ROb2RlcyRjaGlsZHIgPSBhYnN0cmFjdE5vZGVzLmNoaWxkcmVuLCBjaGlsZHJlbjIgPSBfYWJzdHJhY3ROb2RlcyRjaGlsZHIgPT09IHZvaWQgMCA/IFtdIDogX2Fic3RyYWN0Tm9kZXMkY2hpbGRyOwogIGlmICh0eXBlb2YgYWJzdHJhY3ROb2RlcyA9PT0gInN0cmluZyIpIHsKICAgIHJldHVybiBodG1sRXNjYXBlKGFic3RyYWN0Tm9kZXMpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gIjwiLmNvbmNhdCh0YWcsICIgIikuY29uY2F0KGpvaW5BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpLCAiPiIpLmNvbmNhdChjaGlsZHJlbjIubWFwKHRvSHRtbDIpLmpvaW4oIiIpLCAiPC8iKS5jb25jYXQodGFnLCAiPiIpOwogIH0KfQpmdW5jdGlvbiBpY29uRnJvbU1hcHBpbmcobWFwcGluZywgcHJlZml4NCwgaWNvbk5hbWUpIHsKICBpZiAobWFwcGluZyAmJiBtYXBwaW5nW3ByZWZpeDRdICYmIG1hcHBpbmdbcHJlZml4NF1baWNvbk5hbWVdKSB7CiAgICByZXR1cm4gewogICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgIGljb25OYW1lLAogICAgICBpY29uOiBtYXBwaW5nW3ByZWZpeDRdW2ljb25OYW1lXQogICAgfTsKICB9Cn0KZnVuY3Rpb24gdG9IZXgodW5pY29kZSkgewogIGlmIChfdG9Db25zdW1hYmxlQXJyYXkodW5pY29kZSkubGVuZ3RoICE9PSAxKSByZXR1cm4gbnVsbDsKICByZXR1cm4gdW5pY29kZS5jb2RlUG9pbnRBdCgwKS50b1N0cmluZygxNik7Cn0KZnVuY3Rpb24gbm9ybWFsaXplSWNvbnMoaWNvbnM2KSB7CiAgcmV0dXJuIE9iamVjdC5rZXlzKGljb25zNikucmVkdWNlKGZ1bmN0aW9uKGFjYywgaWNvbk5hbWUpIHsKICAgIHZhciBpY29uMyA9IGljb25zNltpY29uTmFtZV07CiAgICB2YXIgZXhwYW5kZWQgPSAhIWljb24zLmljb247CiAgICBpZiAoZXhwYW5kZWQpIHsKICAgICAgYWNjW2ljb24zLmljb25OYW1lXSA9IGljb24zLmljb247CiAgICB9IGVsc2UgewogICAgICBhY2NbaWNvbk5hbWVdID0gaWNvbjM7CiAgICB9CiAgICByZXR1cm4gYWNjOwogIH0sIHt9KTsKfQpmdW5jdGlvbiBkZWZpbmVJY29ucyhwcmVmaXg0LCBpY29uczYpIHsKICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzJdIDoge307CiAgdmFyIF9wYXJhbXMkc2tpcEhvb2tzID0gcGFyYW1zMi5za2lwSG9va3MsIHNraXBIb29rcyA9IF9wYXJhbXMkc2tpcEhvb2tzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wYXJhbXMkc2tpcEhvb2tzOwogIHZhciBub3JtYWxpemVkID0gbm9ybWFsaXplSWNvbnMoaWNvbnM2KTsKICBpZiAodHlwZW9mIG5hbWVzcGFjZS5ob29rcy5hZGRQYWNrID09PSAiZnVuY3Rpb24iICYmICFza2lwSG9va3MpIHsKICAgIG5hbWVzcGFjZS5ob29rcy5hZGRQYWNrKHByZWZpeDQsIG5vcm1hbGl6ZUljb25zKGljb25zNikpOwogIH0gZWxzZSB7CiAgICBuYW1lc3BhY2Uuc3R5bGVzW3ByZWZpeDRdID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG5hbWVzcGFjZS5zdHlsZXNbcHJlZml4NF0gfHwge30pLCBub3JtYWxpemVkKTsKICB9CiAgaWYgKHByZWZpeDQgPT09ICJmYXMiKSB7CiAgICBkZWZpbmVJY29ucygiZmEiLCBpY29uczYpOwogIH0KfQpmdW5jdGlvbiBpc1Jlc2VydmVkKG5hbWUpIHsKICByZXR1cm4gflJFU0VSVkVEX0NMQVNTRVMuaW5kZXhPZihuYW1lKTsKfQpmdW5jdGlvbiBnZXRJY29uTmFtZShjc3NQcmVmaXgsIGNscykgewogIHZhciBwYXJ0cyA9IGNscy5zcGxpdCgiLSIpOwogIHZhciBwcmVmaXg0ID0gcGFydHNbMF07CiAgdmFyIGljb25OYW1lID0gcGFydHMuc2xpY2UoMSkuam9pbigiLSIpOwogIGlmIChwcmVmaXg0ID09PSBjc3NQcmVmaXggJiYgaWNvbk5hbWUgIT09ICIiICYmICFpc1Jlc2VydmVkKGljb25OYW1lKSkgewogICAgcmV0dXJuIGljb25OYW1lOwogIH0gZWxzZSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KZnVuY3Rpb24gYnlVbmljb2RlKHByZWZpeDQsIHVuaWNvZGUpIHsKICByZXR1cm4gKF9ieVVuaWNvZGVbcHJlZml4NF0gfHwge30pW3VuaWNvZGVdOwp9CmZ1bmN0aW9uIGJ5TGlnYXR1cmUocHJlZml4NCwgbGlnYXR1cmUpIHsKICByZXR1cm4gKF9ieUxpZ2F0dXJlW3ByZWZpeDRdIHx8IHt9KVtsaWdhdHVyZV07Cn0KZnVuY3Rpb24gYnlBbGlhcyhwcmVmaXg0LCBhbGlhcykgewogIHJldHVybiAoX2J5QWxpYXNbcHJlZml4NF0gfHwge30pW2FsaWFzXTsKfQpmdW5jdGlvbiBieU9sZE5hbWUobmFtZSkgewogIHJldHVybiBfYnlPbGROYW1lW25hbWVdIHx8IHsKICAgIHByZWZpeDogbnVsbCwKICAgIGljb25OYW1lOiBudWxsCiAgfTsKfQpmdW5jdGlvbiBieU9sZFVuaWNvZGUodW5pY29kZSkgewogIHZhciBvbGRVbmljb2RlID0gX2J5T2xkVW5pY29kZVt1bmljb2RlXTsKICB2YXIgbmV3VW5pY29kZSA9IGJ5VW5pY29kZSgiZmFzIiwgdW5pY29kZSk7CiAgcmV0dXJuIG9sZFVuaWNvZGUgfHwgKG5ld1VuaWNvZGUgPyB7CiAgICBwcmVmaXg6ICJmYXMiLAogICAgaWNvbk5hbWU6IG5ld1VuaWNvZGUKICB9IDogbnVsbCkgfHwgewogICAgcHJlZml4OiBudWxsLAogICAgaWNvbk5hbWU6IG51bGwKICB9Owp9CmZ1bmN0aW9uIGdldERlZmF1bHRVc2FibGVQcmVmaXgoKSB7CiAgcmV0dXJuIF9kZWZhdWx0VXNhYmxlUHJlZml4Owp9CmZ1bmN0aW9uIGdldEZhbWlseUlkKHZhbHVlcykgewogIHZhciBmYW1pbHkgPSBpMTA7CiAgdmFyIGZhbVByb3BzID0gRkFNSUxZX05BTUVTLnJlZHVjZShmdW5jdGlvbihhY2MsIGZhbWlseUlkKSB7CiAgICBhY2NbZmFtaWx5SWRdID0gIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLSIpLmNvbmNhdChmYW1pbHlJZCk7CiAgICByZXR1cm4gYWNjOwogIH0sIHt9KTsKICBydC5mb3JFYWNoKGZ1bmN0aW9uKGZhbWlseUlkKSB7CiAgICBpZiAodmFsdWVzLmluY2x1ZGVzKGZhbVByb3BzW2ZhbWlseUlkXSkgfHwgdmFsdWVzLnNvbWUoZnVuY3Rpb24odiQkMSkgewogICAgICByZXR1cm4gUFJFRklYRVNfRk9SX0ZBTUlMWVtmYW1pbHlJZF0uaW5jbHVkZXModiQkMSk7CiAgICB9KSkgewogICAgICBmYW1pbHkgPSBmYW1pbHlJZDsKICAgIH0KICB9KTsKICByZXR1cm4gZmFtaWx5Owp9CmZ1bmN0aW9uIGdldENhbm9uaWNhbFByZWZpeChzdHlsZU9yUHJlZml4KSB7CiAgdmFyIHBhcmFtczIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9OwogIHZhciBfcGFyYW1zJGZhbWlseSA9IHBhcmFtczIuZmFtaWx5LCBmYW1pbHkgPSBfcGFyYW1zJGZhbWlseSA9PT0gdm9pZCAwID8gaTEwIDogX3BhcmFtcyRmYW1pbHk7CiAgdmFyIHN0eWxlID0gUFJFRklYX1RPX1NUWUxFW2ZhbWlseV1bc3R5bGVPclByZWZpeF07CiAgaWYgKGZhbWlseSA9PT0gdDggJiYgIXN0eWxlT3JQcmVmaXgpIHsKICAgIHJldHVybiAiZmFkIjsKICB9CiAgdmFyIHByZWZpeDQgPSBTVFlMRV9UT19QUkVGSVhbZmFtaWx5XVtzdHlsZU9yUHJlZml4XSB8fCBTVFlMRV9UT19QUkVGSVhbZmFtaWx5XVtzdHlsZV07CiAgdmFyIGRlZmluZWQgPSBzdHlsZU9yUHJlZml4IGluIG5hbWVzcGFjZS5zdHlsZXMgPyBzdHlsZU9yUHJlZml4IDogbnVsbDsKICB2YXIgcmVzdWx0ID0gcHJlZml4NCB8fCBkZWZpbmVkIHx8IG51bGw7CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBtb3ZlTm9uRmFDbGFzc2VzVG9SZXN0KGNsYXNzTmFtZXMpIHsKICB2YXIgcmVzdCA9IFtdOwogIHZhciBpY29uTmFtZSA9IG51bGw7CiAgY2xhc3NOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGNscykgewogICAgdmFyIHJlc3VsdCA9IGdldEljb25OYW1lKGNvbmZpZzIuY3NzUHJlZml4LCBjbHMpOwogICAgaWYgKHJlc3VsdCkgewogICAgICBpY29uTmFtZSA9IHJlc3VsdDsKICAgIH0gZWxzZSBpZiAoY2xzKSB7CiAgICAgIHJlc3QucHVzaChjbHMpOwogICAgfQogIH0pOwogIHJldHVybiB7CiAgICBpY29uTmFtZSwKICAgIHJlc3QKICB9Owp9CmZ1bmN0aW9uIHNvcnRlZFVuaXF1ZVZhbHVlcyhhcnIpIHsKICByZXR1cm4gYXJyLnNvcnQoKS5maWx0ZXIoZnVuY3Rpb24odmFsdWUyLCBpbmRleDIsIGFycjIpIHsKICAgIHJldHVybiBhcnIyLmluZGV4T2YodmFsdWUyKSA9PT0gaW5kZXgyOwogIH0pOwp9CmZ1bmN0aW9uIGdldENhbm9uaWNhbEljb24odmFsdWVzKSB7CiAgdmFyIHBhcmFtczIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9OwogIHZhciBfcGFyYW1zJHNraXBMb29rdXBzID0gcGFyYW1zMi5za2lwTG9va3Vwcywgc2tpcExvb2t1cHMgPSBfcGFyYW1zJHNraXBMb29rdXBzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wYXJhbXMkc2tpcExvb2t1cHM7CiAgdmFyIGdpdmVuUHJlZml4ID0gbnVsbDsKICB2YXIgZmFTdHlsZU9yRmFtaWx5Q2xhc3NlcyA9IHNvcnRlZFVuaXF1ZVZhbHVlcyh2YWx1ZXMuZmlsdGVyKGZ1bmN0aW9uKGNscykgewogICAgcmV0dXJuIF9mYUNvbWJpbmVkQ2xhc3Nlcy5pbmNsdWRlcyhjbHMpOwogIH0pKTsKICB2YXIgbm9uU3R5bGVPckZhbWlseUNsYXNzZXMgPSBzb3J0ZWRVbmlxdWVWYWx1ZXModmFsdWVzLmZpbHRlcihmdW5jdGlvbihjbHMpIHsKICAgIHJldHVybiAhX2ZhQ29tYmluZWRDbGFzc2VzLmluY2x1ZGVzKGNscyk7CiAgfSkpOwogIHZhciBmYVN0eWxlcyA9IGZhU3R5bGVPckZhbWlseUNsYXNzZXMuZmlsdGVyKGZ1bmN0aW9uKGNscykgewogICAgZ2l2ZW5QcmVmaXggPSBjbHM7CiAgICByZXR1cm4gIVEuaW5jbHVkZXMoY2xzKTsKICB9KTsKICB2YXIgX2ZhU3R5bGVzID0gX3NsaWNlZFRvQXJyYXkoZmFTdHlsZXMsIDEpLCBfZmFTdHlsZXMkID0gX2ZhU3R5bGVzWzBdLCBzdHlsZUZyb21WYWx1ZXMgPSBfZmFTdHlsZXMkID09PSB2b2lkIDAgPyBudWxsIDogX2ZhU3R5bGVzJDsKICB2YXIgZmFtaWx5ID0gZ2V0RmFtaWx5SWQoZmFTdHlsZU9yRmFtaWx5Q2xhc3Nlcyk7CiAgdmFyIGNhbm9uaWNhbCA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtb3ZlTm9uRmFDbGFzc2VzVG9SZXN0KG5vblN0eWxlT3JGYW1pbHlDbGFzc2VzKSksIHt9LCB7CiAgICBwcmVmaXg6IGdldENhbm9uaWNhbFByZWZpeChzdHlsZUZyb21WYWx1ZXMsIHsKICAgICAgZmFtaWx5CiAgICB9KQogIH0pOwogIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgY2Fub25pY2FsKSwgZ2V0RGVmYXVsdENhbm9uaWNhbFByZWZpeCh7CiAgICB2YWx1ZXMsCiAgICBmYW1pbHksCiAgICBzdHlsZXM6IHN0eWxlczIsCiAgICBjb25maWc6IGNvbmZpZzIsCiAgICBjYW5vbmljYWwsCiAgICBnaXZlblByZWZpeAogIH0pKSwgYXBwbHlTaGltQW5kQWxpYXMoc2tpcExvb2t1cHMsIGdpdmVuUHJlZml4LCBjYW5vbmljYWwpKTsKfQpmdW5jdGlvbiBhcHBseVNoaW1BbmRBbGlhcyhza2lwTG9va3VwcywgZ2l2ZW5QcmVmaXgsIGNhbm9uaWNhbCkgewogIHZhciBwcmVmaXg0ID0gY2Fub25pY2FsLnByZWZpeCwgaWNvbk5hbWUgPSBjYW5vbmljYWwuaWNvbk5hbWU7CiAgaWYgKHNraXBMb29rdXBzIHx8ICFwcmVmaXg0IHx8ICFpY29uTmFtZSkgewogICAgcmV0dXJuIHsKICAgICAgcHJlZml4OiBwcmVmaXg0LAogICAgICBpY29uTmFtZQogICAgfTsKICB9CiAgdmFyIHNoaW0gPSBnaXZlblByZWZpeCA9PT0gImZhIiA/IGJ5T2xkTmFtZShpY29uTmFtZSkgOiB7fTsKICB2YXIgYWxpYXNJY29uTmFtZSA9IGJ5QWxpYXMocHJlZml4NCwgaWNvbk5hbWUpOwogIGljb25OYW1lID0gc2hpbS5pY29uTmFtZSB8fCBhbGlhc0ljb25OYW1lIHx8IGljb25OYW1lOwogIHByZWZpeDQgPSBzaGltLnByZWZpeCB8fCBwcmVmaXg0OwogIGlmIChwcmVmaXg0ID09PSAiZmFyIiAmJiAhc3R5bGVzMlsiZmFyIl0gJiYgc3R5bGVzMlsiZmFzIl0gJiYgIWNvbmZpZzIuYXV0b0ZldGNoU3ZnKSB7CiAgICBwcmVmaXg0ID0gImZhcyI7CiAgfQogIHJldHVybiB7CiAgICBwcmVmaXg6IHByZWZpeDQsCiAgICBpY29uTmFtZQogIH07Cn0KZnVuY3Rpb24gZ2V0RGVmYXVsdENhbm9uaWNhbFByZWZpeChwcmVmaXhPcHRpb25zKSB7CiAgdmFyIHZhbHVlcyA9IHByZWZpeE9wdGlvbnMudmFsdWVzLCBmYW1pbHkgPSBwcmVmaXhPcHRpb25zLmZhbWlseSwgY2Fub25pY2FsID0gcHJlZml4T3B0aW9ucy5jYW5vbmljYWwsIF9wcmVmaXhPcHRpb25zJGdpdmVuUCA9IHByZWZpeE9wdGlvbnMuZ2l2ZW5QcmVmaXgsIGdpdmVuUHJlZml4ID0gX3ByZWZpeE9wdGlvbnMkZ2l2ZW5QID09PSB2b2lkIDAgPyAiIiA6IF9wcmVmaXhPcHRpb25zJGdpdmVuUCwgX3ByZWZpeE9wdGlvbnMkc3R5bGVzID0gcHJlZml4T3B0aW9ucy5zdHlsZXMsIHN0eWxlczMgPSBfcHJlZml4T3B0aW9ucyRzdHlsZXMgPT09IHZvaWQgMCA/IHt9IDogX3ByZWZpeE9wdGlvbnMkc3R5bGVzLCBfcHJlZml4T3B0aW9ucyRjb25maWcgPSBwcmVmaXhPcHRpb25zLmNvbmZpZywgY29uZmlnJCQxID0gX3ByZWZpeE9wdGlvbnMkY29uZmlnID09PSB2b2lkIDAgPyB7fSA6IF9wcmVmaXhPcHRpb25zJGNvbmZpZzsKICB2YXIgaXNEdW90b25lRmFtaWx5ID0gZmFtaWx5ID09PSB0ODsKICB2YXIgdmFsdWVzSGFzRHVvdG9uZSA9IHZhbHVlcy5pbmNsdWRlcygiZmEtZHVvdG9uZSIpIHx8IHZhbHVlcy5pbmNsdWRlcygiZmFkIik7CiAgdmFyIGRlZmF1bHRGYW1pbHlJc0R1b3RvbmUgPSBjb25maWckJDEuZmFtaWx5RGVmYXVsdCA9PT0gImR1b3RvbmUiOwogIHZhciBjYW5vbmljYWxQcmVmaXhJc0R1b3RvbmUgPSBjYW5vbmljYWwucHJlZml4ID09PSAiZmFkIiB8fCBjYW5vbmljYWwucHJlZml4ID09PSAiZmEtZHVvdG9uZSI7CiAgaWYgKCFpc0R1b3RvbmVGYW1pbHkgJiYgKHZhbHVlc0hhc0R1b3RvbmUgfHwgZGVmYXVsdEZhbWlseUlzRHVvdG9uZSB8fCBjYW5vbmljYWxQcmVmaXhJc0R1b3RvbmUpKSB7CiAgICBjYW5vbmljYWwucHJlZml4ID0gImZhZCI7CiAgfQogIGlmICh2YWx1ZXMuaW5jbHVkZXMoImZhLWJyYW5kcyIpIHx8IHZhbHVlcy5pbmNsdWRlcygiZmFiIikpIHsKICAgIGNhbm9uaWNhbC5wcmVmaXggPSAiZmFiIjsKICB9CiAgaWYgKCFjYW5vbmljYWwucHJlZml4ICYmIG5ld0Nhbm9uaWNhbEZhbWlsaWVzLmluY2x1ZGVzKGZhbWlseSkpIHsKICAgIHZhciB2YWxpZFByZWZpeCA9IE9iamVjdC5rZXlzKHN0eWxlczMpLmZpbmQoZnVuY3Rpb24oa2V5MikgewogICAgICByZXR1cm4gbmV3Q2Fub25pY2FsU3R5bGVzLmluY2x1ZGVzKGtleTIpOwogICAgfSk7CiAgICBpZiAodmFsaWRQcmVmaXggfHwgY29uZmlnJCQxLmF1dG9GZXRjaFN2ZykgewogICAgICB2YXIgZGVmYXVsdFByZWZpeCA9IFV0LmdldChmYW1pbHkpLmRlZmF1bHRTaG9ydFByZWZpeElkOwogICAgICBjYW5vbmljYWwucHJlZml4ID0gZGVmYXVsdFByZWZpeDsKICAgICAgY2Fub25pY2FsLmljb25OYW1lID0gYnlBbGlhcyhjYW5vbmljYWwucHJlZml4LCBjYW5vbmljYWwuaWNvbk5hbWUpIHx8IGNhbm9uaWNhbC5pY29uTmFtZTsKICAgIH0KICB9CiAgaWYgKGNhbm9uaWNhbC5wcmVmaXggPT09ICJmYSIgfHwgZ2l2ZW5QcmVmaXggPT09ICJmYSIpIHsKICAgIGNhbm9uaWNhbC5wcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCkgfHwgImZhcyI7CiAgfQogIHJldHVybiBjYW5vbmljYWw7Cn0KZnVuY3Rpb24gcmVnaXN0ZXJQbHVnaW5zKG5leHRQbHVnaW5zLCBfcmVmMikgewogIHZhciBvYmogPSBfcmVmMi5taXhvdXRzVG87CiAgX3BsdWdpbnMgPSBuZXh0UGx1Z2luczsKICBfaG9va3MgPSB7fTsKICBPYmplY3Qua2V5cyhwcm92aWRlcnMpLmZvckVhY2goZnVuY3Rpb24oazQpIHsKICAgIGlmIChkZWZhdWx0UHJvdmlkZXJLZXlzLmluZGV4T2YoazQpID09PSAtMSkgewogICAgICBkZWxldGUgcHJvdmlkZXJzW2s0XTsKICAgIH0KICB9KTsKICBfcGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uKHBsdWdpbikgewogICAgdmFyIG1peG91dDggPSBwbHVnaW4ubWl4b3V0ID8gcGx1Z2luLm1peG91dCgpIDoge307CiAgICBPYmplY3Qua2V5cyhtaXhvdXQ4KS5mb3JFYWNoKGZ1bmN0aW9uKHRrKSB7CiAgICAgIGlmICh0eXBlb2YgbWl4b3V0OFt0a10gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBvYmpbdGtdID0gbWl4b3V0OFt0a107CiAgICAgIH0KICAgICAgaWYgKF90eXBlb2YobWl4b3V0OFt0a10pID09PSAib2JqZWN0IikgewogICAgICAgIE9iamVjdC5rZXlzKG1peG91dDhbdGtdKS5mb3JFYWNoKGZ1bmN0aW9uKHNrKSB7CiAgICAgICAgICBpZiAoIW9ialt0a10pIHsKICAgICAgICAgICAgb2JqW3RrXSA9IHt9OwogICAgICAgICAgfQogICAgICAgICAgb2JqW3RrXVtza10gPSBtaXhvdXQ4W3RrXVtza107CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0pOwogICAgaWYgKHBsdWdpbi5ob29rcykgewogICAgICB2YXIgaG9va3M4ID0gcGx1Z2luLmhvb2tzKCk7CiAgICAgIE9iamVjdC5rZXlzKGhvb2tzOCkuZm9yRWFjaChmdW5jdGlvbihob29rKSB7CiAgICAgICAgaWYgKCFfaG9va3NbaG9va10pIHsKICAgICAgICAgIF9ob29rc1tob29rXSA9IFtdOwogICAgICAgIH0KICAgICAgICBfaG9va3NbaG9va10ucHVzaChob29rczhbaG9va10pOwogICAgICB9KTsKICAgIH0KICAgIGlmIChwbHVnaW4ucHJvdmlkZXMpIHsKICAgICAgcGx1Z2luLnByb3ZpZGVzKHByb3ZpZGVycyk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG9iajsKfQpmdW5jdGlvbiBjaGFpbkhvb2tzKGhvb2ssIGFjY3VtdWxhdG9yKSB7CiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykgewogICAgYXJnc1tfa2V5IC0gMl0gPSBhcmd1bWVudHNbX2tleV07CiAgfQogIHZhciBob29rRm5zID0gX2hvb2tzW2hvb2tdIHx8IFtdOwogIGhvb2tGbnMuZm9yRWFjaChmdW5jdGlvbihob29rRm4pIHsKICAgIGFjY3VtdWxhdG9yID0gaG9va0ZuLmFwcGx5KG51bGwsIFthY2N1bXVsYXRvcl0uY29uY2F0KGFyZ3MpKTsKICB9KTsKICByZXR1cm4gYWNjdW11bGF0b3I7Cn0KZnVuY3Rpb24gY2FsbEhvb2tzKGhvb2spIHsKICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgewogICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTsKICB9CiAgdmFyIGhvb2tGbnMgPSBfaG9va3NbaG9va10gfHwgW107CiAgaG9va0Zucy5mb3JFYWNoKGZ1bmN0aW9uKGhvb2tGbikgewogICAgaG9va0ZuLmFwcGx5KG51bGwsIGFyZ3MpOwogIH0pOwogIHJldHVybiB2b2lkIDA7Cn0KZnVuY3Rpb24gY2FsbFByb3ZpZGVkKCkgewogIHZhciBob29rID0gYXJndW1lbnRzWzBdOwogIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKICByZXR1cm4gcHJvdmlkZXJzW2hvb2tdID8gcHJvdmlkZXJzW2hvb2tdLmFwcGx5KG51bGwsIGFyZ3MpIDogdm9pZCAwOwp9CmZ1bmN0aW9uIGZpbmRJY29uRGVmaW5pdGlvbihpY29uTG9va3VwKSB7CiAgaWYgKGljb25Mb29rdXAucHJlZml4ID09PSAiZmEiKSB7CiAgICBpY29uTG9va3VwLnByZWZpeCA9ICJmYXMiOwogIH0KICB2YXIgaWNvbk5hbWUgPSBpY29uTG9va3VwLmljb25OYW1lOwogIHZhciBwcmVmaXg0ID0gaWNvbkxvb2t1cC5wcmVmaXggfHwgZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpOwogIGlmICghaWNvbk5hbWUpIHJldHVybjsKICBpY29uTmFtZSA9IGJ5QWxpYXMocHJlZml4NCwgaWNvbk5hbWUpIHx8IGljb25OYW1lOwogIHJldHVybiBpY29uRnJvbU1hcHBpbmcobGlicmFyeS5kZWZpbml0aW9ucywgcHJlZml4NCwgaWNvbk5hbWUpIHx8IGljb25Gcm9tTWFwcGluZyhuYW1lc3BhY2Uuc3R5bGVzLCBwcmVmaXg0LCBpY29uTmFtZSk7Cn0KZnVuY3Rpb24gZG9tVmFyaWFudHModmFsLCBhYnN0cmFjdENyZWF0b3IpIHsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsLCAiYWJzdHJhY3QiLCB7CiAgICBnZXQ6IGFic3RyYWN0Q3JlYXRvcgogIH0pOwogIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWwsICJodG1sIiwgewogICAgZ2V0OiBmdW5jdGlvbiBnZXQyKCkgewogICAgICByZXR1cm4gdmFsLmFic3RyYWN0Lm1hcChmdW5jdGlvbihhNSkgewogICAgICAgIHJldHVybiB0b0h0bWwyKGE1KTsKICAgICAgfSk7CiAgICB9CiAgfSk7CiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbCwgIm5vZGUiLCB7CiAgICBnZXQ6IGZ1bmN0aW9uIGdldDIoKSB7CiAgICAgIGlmICghSVNfRE9NKSByZXR1cm4gdm9pZCAwOwogICAgICB2YXIgY29udGFpbmVyID0gRE9DVU1FTlQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSB2YWwuaHRtbDsKICAgICAgcmV0dXJuIGNvbnRhaW5lci5jaGlsZHJlbjsKICAgIH0KICB9KTsKICByZXR1cm4gdmFsOwp9CmZ1bmN0aW9uIGFzSWNvbihfcmVmMikgewogIHZhciBjaGlsZHJlbjIgPSBfcmVmMi5jaGlsZHJlbiwgbWFpbiA9IF9yZWYyLm1haW4sIG1hc2sgPSBfcmVmMi5tYXNrLCBhdHRyaWJ1dGVzID0gX3JlZjIuYXR0cmlidXRlcywgc3R5bGVzMyA9IF9yZWYyLnN0eWxlcywgdHJhbnNmb3JtMiA9IF9yZWYyLnRyYW5zZm9ybTsKICBpZiAodHJhbnNmb3JtSXNNZWFuaW5nZnVsKHRyYW5zZm9ybTIpICYmIG1haW4uZm91bmQgJiYgIW1hc2suZm91bmQpIHsKICAgIHZhciB3aWR0aCA9IG1haW4ud2lkdGgsIGhlaWdodCA9IG1haW4uaGVpZ2h0OwogICAgdmFyIG9mZnNldCA9IHsKICAgICAgeDogd2lkdGggLyBoZWlnaHQgLyAyLAogICAgICB5OiAwLjUKICAgIH07CiAgICBhdHRyaWJ1dGVzWyJzdHlsZSJdID0gam9pblN0eWxlcyhfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgc3R5bGVzMyksIHt9LCB7CiAgICAgICJ0cmFuc2Zvcm0tb3JpZ2luIjogIiIuY29uY2F0KG9mZnNldC54ICsgdHJhbnNmb3JtMi54IC8gMTYsICJlbSAiKS5jb25jYXQob2Zmc2V0LnkgKyB0cmFuc2Zvcm0yLnkgLyAxNiwgImVtIikKICAgIH0pKTsKICB9CiAgcmV0dXJuIFt7CiAgICB0YWc6ICJzdmciLAogICAgYXR0cmlidXRlcywKICAgIGNoaWxkcmVuOiBjaGlsZHJlbjIKICB9XTsKfQpmdW5jdGlvbiBhc1N5bWJvbChfcmVmMikgewogIHZhciBwcmVmaXg0ID0gX3JlZjIucHJlZml4LCBpY29uTmFtZSA9IF9yZWYyLmljb25OYW1lLCBjaGlsZHJlbjIgPSBfcmVmMi5jaGlsZHJlbiwgYXR0cmlidXRlcyA9IF9yZWYyLmF0dHJpYnV0ZXMsIHN5bWJvbCA9IF9yZWYyLnN5bWJvbDsKICB2YXIgaWQgPSBzeW1ib2wgPT09IHRydWUgPyAiIi5jb25jYXQocHJlZml4NCwgIi0iKS5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItIikuY29uY2F0KGljb25OYW1lKSA6IHN5bWJvbDsKICByZXR1cm4gW3sKICAgIHRhZzogInN2ZyIsCiAgICBhdHRyaWJ1dGVzOiB7CiAgICAgIHN0eWxlOiAiZGlzcGxheTogbm9uZTsiCiAgICB9LAogICAgY2hpbGRyZW46IFt7CiAgICAgIHRhZzogInN5bWJvbCIsCiAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBhdHRyaWJ1dGVzKSwge30sIHsKICAgICAgICBpZAogICAgICB9KSwKICAgICAgY2hpbGRyZW46IGNoaWxkcmVuMgogICAgfV0KICB9XTsKfQpmdW5jdGlvbiBpc0xhYmVsZWQoYXR0cmlidXRlcykgewogIHZhciBsYWJlbHMgPSBbImFyaWEtbGFiZWwiLCAiYXJpYS1sYWJlbGxlZGJ5IiwgInRpdGxlIiwgInJvbGUiXTsKICByZXR1cm4gbGFiZWxzLnNvbWUoZnVuY3Rpb24obGFiZWwpIHsKICAgIHJldHVybiBsYWJlbCBpbiBhdHRyaWJ1dGVzOwogIH0pOwp9CmZ1bmN0aW9uIG1ha2VJbmxpbmVTdmdBYnN0cmFjdChwYXJhbXMyKSB7CiAgdmFyIF9wYXJhbXMkaWNvbnMgPSBwYXJhbXMyLmljb25zLCBtYWluID0gX3BhcmFtcyRpY29ucy5tYWluLCBtYXNrID0gX3BhcmFtcyRpY29ucy5tYXNrLCBwcmVmaXg0ID0gcGFyYW1zMi5wcmVmaXgsIGljb25OYW1lID0gcGFyYW1zMi5pY29uTmFtZSwgdHJhbnNmb3JtMiA9IHBhcmFtczIudHJhbnNmb3JtLCBzeW1ib2wgPSBwYXJhbXMyLnN5bWJvbCwgbWFza0lkID0gcGFyYW1zMi5tYXNrSWQsIGV4dHJhID0gcGFyYW1zMi5leHRyYSwgX3BhcmFtcyR3YXRjaGFibGUgPSBwYXJhbXMyLndhdGNoYWJsZSwgd2F0Y2hhYmxlID0gX3BhcmFtcyR3YXRjaGFibGUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhcmFtcyR3YXRjaGFibGU7CiAgdmFyIF9yZWYyID0gbWFzay5mb3VuZCA/IG1hc2sgOiBtYWluLCB3aWR0aCA9IF9yZWYyLndpZHRoLCBoZWlnaHQgPSBfcmVmMi5oZWlnaHQ7CiAgdmFyIGF0dHJDbGFzcyA9IFtjb25maWcyLnJlcGxhY2VtZW50Q2xhc3MsIGljb25OYW1lID8gIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLSIpLmNvbmNhdChpY29uTmFtZSkgOiAiIl0uZmlsdGVyKGZ1bmN0aW9uKGMxMSkgewogICAgcmV0dXJuIGV4dHJhLmNsYXNzZXMuaW5kZXhPZihjMTEpID09PSAtMTsKICB9KS5maWx0ZXIoZnVuY3Rpb24oYzExKSB7CiAgICByZXR1cm4gYzExICE9PSAiIiB8fCAhIWMxMTsKICB9KS5jb25jYXQoZXh0cmEuY2xhc3Nlcykuam9pbigiICIpOwogIHZhciBjb250ZW50MyA9IHsKICAgIGNoaWxkcmVuOiBbXSwKICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBleHRyYS5hdHRyaWJ1dGVzKSwge30sIHsKICAgICAgImRhdGEtcHJlZml4IjogcHJlZml4NCwKICAgICAgImRhdGEtaWNvbiI6IGljb25OYW1lLAogICAgICAiY2xhc3MiOiBhdHRyQ2xhc3MsCiAgICAgICJyb2xlIjogZXh0cmEuYXR0cmlidXRlcy5yb2xlIHx8ICJpbWciLAogICAgICAidmlld0JveCI6ICIwIDAgIi5jb25jYXQod2lkdGgsICIgIikuY29uY2F0KGhlaWdodCkKICAgIH0pCiAgfTsKICBpZiAoIWlzTGFiZWxlZChleHRyYS5hdHRyaWJ1dGVzKSAmJiAhZXh0cmEuYXR0cmlidXRlc1siYXJpYS1oaWRkZW4iXSkgewogICAgY29udGVudDMuYXR0cmlidXRlc1siYXJpYS1oaWRkZW4iXSA9ICJ0cnVlIjsKICB9CiAgaWYgKHdhdGNoYWJsZSkgewogICAgY29udGVudDMuYXR0cmlidXRlc1tEQVRBX0ZBX0kyU1ZHXSA9ICIiOwogIH0KICB2YXIgYXJncyA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBjb250ZW50MyksIHt9LCB7CiAgICBwcmVmaXg6IHByZWZpeDQsCiAgICBpY29uTmFtZSwKICAgIG1haW4sCiAgICBtYXNrLAogICAgbWFza0lkLAogICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0yLAogICAgc3ltYm9sLAogICAgc3R5bGVzOiBfb2JqZWN0U3ByZWFkMih7fSwgZXh0cmEuc3R5bGVzKQogIH0pOwogIHZhciBfcmVmMjIgPSBtYXNrLmZvdW5kICYmIG1haW4uZm91bmQgPyBjYWxsUHJvdmlkZWQoImdlbmVyYXRlQWJzdHJhY3RNYXNrIiwgYXJncykgfHwgewogICAgY2hpbGRyZW46IFtdLAogICAgYXR0cmlidXRlczoge30KICB9IDogY2FsbFByb3ZpZGVkKCJnZW5lcmF0ZUFic3RyYWN0SWNvbiIsIGFyZ3MpIHx8IHsKICAgIGNoaWxkcmVuOiBbXSwKICAgIGF0dHJpYnV0ZXM6IHt9CiAgfSwgY2hpbGRyZW4yID0gX3JlZjIyLmNoaWxkcmVuLCBhdHRyaWJ1dGVzID0gX3JlZjIyLmF0dHJpYnV0ZXM7CiAgYXJncy5jaGlsZHJlbiA9IGNoaWxkcmVuMjsKICBhcmdzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogIGlmIChzeW1ib2wpIHsKICAgIHJldHVybiBhc1N5bWJvbChhcmdzKTsKICB9IGVsc2UgewogICAgcmV0dXJuIGFzSWNvbihhcmdzKTsKICB9Cn0KZnVuY3Rpb24gbWFrZUxheWVyc1RleHRBYnN0cmFjdChwYXJhbXMyKSB7CiAgdmFyIGNvbnRlbnQzID0gcGFyYW1zMi5jb250ZW50LCB3aWR0aCA9IHBhcmFtczIud2lkdGgsIGhlaWdodCA9IHBhcmFtczIuaGVpZ2h0LCB0cmFuc2Zvcm0yID0gcGFyYW1zMi50cmFuc2Zvcm0sIGV4dHJhID0gcGFyYW1zMi5leHRyYSwgX3BhcmFtcyR3YXRjaGFibGUyID0gcGFyYW1zMi53YXRjaGFibGUsIHdhdGNoYWJsZSA9IF9wYXJhbXMkd2F0Y2hhYmxlMiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcGFyYW1zJHdhdGNoYWJsZTI7CiAgdmFyIGF0dHJpYnV0ZXMgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgZXh0cmEuYXR0cmlidXRlcyksIHt9LCB7CiAgICBjbGFzczogZXh0cmEuY2xhc3Nlcy5qb2luKCIgIikKICB9KTsKICBpZiAod2F0Y2hhYmxlKSB7CiAgICBhdHRyaWJ1dGVzW0RBVEFfRkFfSTJTVkddID0gIiI7CiAgfQogIHZhciBzdHlsZXMzID0gX29iamVjdFNwcmVhZDIoe30sIGV4dHJhLnN0eWxlcyk7CiAgaWYgKHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0yKSkgewogICAgc3R5bGVzM1sidHJhbnNmb3JtIl0gPSB0cmFuc2Zvcm1Gb3JDc3MoewogICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybTIsCiAgICAgIHN0YXJ0Q2VudGVyZWQ6IHRydWUsCiAgICAgIHdpZHRoLAogICAgICBoZWlnaHQKICAgIH0pOwogICAgc3R5bGVzM1siLXdlYmtpdC10cmFuc2Zvcm0iXSA9IHN0eWxlczNbInRyYW5zZm9ybSJdOwogIH0KICB2YXIgc3R5bGVTdHJpbmcgPSBqb2luU3R5bGVzKHN0eWxlczMpOwogIGlmIChzdHlsZVN0cmluZy5sZW5ndGggPiAwKSB7CiAgICBhdHRyaWJ1dGVzWyJzdHlsZSJdID0gc3R5bGVTdHJpbmc7CiAgfQogIHZhciB2YWwgPSBbXTsKICB2YWwucHVzaCh7CiAgICB0YWc6ICJzcGFuIiwKICAgIGF0dHJpYnV0ZXMsCiAgICBjaGlsZHJlbjogW2NvbnRlbnQzXQogIH0pOwogIHJldHVybiB2YWw7Cn0KZnVuY3Rpb24gbWFrZUxheWVyc0NvdW50ZXJBYnN0cmFjdChwYXJhbXMyKSB7CiAgdmFyIGNvbnRlbnQzID0gcGFyYW1zMi5jb250ZW50LCBleHRyYSA9IHBhcmFtczIuZXh0cmE7CiAgdmFyIGF0dHJpYnV0ZXMgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgZXh0cmEuYXR0cmlidXRlcyksIHt9LCB7CiAgICBjbGFzczogZXh0cmEuY2xhc3Nlcy5qb2luKCIgIikKICB9KTsKICB2YXIgc3R5bGVTdHJpbmcgPSBqb2luU3R5bGVzKGV4dHJhLnN0eWxlcyk7CiAgaWYgKHN0eWxlU3RyaW5nLmxlbmd0aCA+IDApIHsKICAgIGF0dHJpYnV0ZXNbInN0eWxlIl0gPSBzdHlsZVN0cmluZzsKICB9CiAgdmFyIHZhbCA9IFtdOwogIHZhbC5wdXNoKHsKICAgIHRhZzogInNwYW4iLAogICAgYXR0cmlidXRlcywKICAgIGNoaWxkcmVuOiBbY29udGVudDNdCiAgfSk7CiAgcmV0dXJuIHZhbDsKfQpmdW5jdGlvbiBhc0ZvdW5kSWNvbihpY29uMykgewogIHZhciB3aWR0aCA9IGljb24zWzBdOwogIHZhciBoZWlnaHQgPSBpY29uM1sxXTsKICB2YXIgX2ljb24kc2xpY2UgPSBpY29uMy5zbGljZSg0KSwgX2ljb24kc2xpY2UyID0gX3NsaWNlZFRvQXJyYXkoX2ljb24kc2xpY2UsIDEpLCB2ZWN0b3JEYXRhID0gX2ljb24kc2xpY2UyWzBdOwogIHZhciBlbGVtZW50NCA9IG51bGw7CiAgaWYgKEFycmF5LmlzQXJyYXkodmVjdG9yRGF0YSkpIHsKICAgIGVsZW1lbnQ0ID0gewogICAgICB0YWc6ICJnIiwKICAgICAgYXR0cmlidXRlczogewogICAgICAgIGNsYXNzOiAiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItIikuY29uY2F0KERVT1RPTkVfQ0xBU1NFUy5HUk9VUCkKICAgICAgfSwKICAgICAgY2hpbGRyZW46IFt7CiAgICAgICAgdGFnOiAicGF0aCIsCiAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgY2xhc3M6ICIiLmNvbmNhdChjb25maWcyLmNzc1ByZWZpeCwgIi0iKS5jb25jYXQoRFVPVE9ORV9DTEFTU0VTLlNFQ09OREFSWSksCiAgICAgICAgICBmaWxsOiAiY3VycmVudENvbG9yIiwKICAgICAgICAgIGQ6IHZlY3RvckRhdGFbMF0KICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICB0YWc6ICJwYXRoIiwKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBjbGFzczogIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLSIpLmNvbmNhdChEVU9UT05FX0NMQVNTRVMuUFJJTUFSWSksCiAgICAgICAgICBmaWxsOiAiY3VycmVudENvbG9yIiwKICAgICAgICAgIGQ6IHZlY3RvckRhdGFbMV0KICAgICAgICB9CiAgICAgIH1dCiAgICB9OwogIH0gZWxzZSB7CiAgICBlbGVtZW50NCA9IHsKICAgICAgdGFnOiAicGF0aCIsCiAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBmaWxsOiAiY3VycmVudENvbG9yIiwKICAgICAgICBkOiB2ZWN0b3JEYXRhCiAgICAgIH0KICAgIH07CiAgfQogIHJldHVybiB7CiAgICBmb3VuZDogdHJ1ZSwKICAgIHdpZHRoLAogICAgaGVpZ2h0LAogICAgaWNvbjogZWxlbWVudDQKICB9Owp9CmZ1bmN0aW9uIG1heWJlTm90aWZ5TWlzc2luZyhpY29uTmFtZSwgcHJlZml4NCkgewogIGlmICghUFJPRFVDVElPTiAmJiAhY29uZmlnMi5zaG93TWlzc2luZ0ljb25zICYmIGljb25OYW1lKSB7CiAgICBjb25zb2xlLmVycm9yKCdJY29uIHdpdGggbmFtZSAiJy5jb25jYXQoaWNvbk5hbWUsICciIGFuZCBwcmVmaXggIicpLmNvbmNhdChwcmVmaXg0LCAnIiBpcyBtaXNzaW5nLicpKTsKICB9Cn0KZnVuY3Rpb24gZmluZEljb24oaWNvbk5hbWUsIHByZWZpeDQpIHsKICB2YXIgZ2l2ZW5QcmVmaXggPSBwcmVmaXg0OwogIGlmIChwcmVmaXg0ID09PSAiZmEiICYmIGNvbmZpZzIuc3R5bGVEZWZhdWx0ICE9PSBudWxsKSB7CiAgICBwcmVmaXg0ID0gZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpOwogIH0KICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZTIsIHJlamVjdCkgewogICAgaWYgKGdpdmVuUHJlZml4ID09PSAiZmEiKSB7CiAgICAgIHZhciBzaGltID0gYnlPbGROYW1lKGljb25OYW1lKSB8fCB7fTsKICAgICAgaWNvbk5hbWUgPSBzaGltLmljb25OYW1lIHx8IGljb25OYW1lOwogICAgICBwcmVmaXg0ID0gc2hpbS5wcmVmaXggfHwgcHJlZml4NDsKICAgIH0KICAgIGlmIChpY29uTmFtZSAmJiBwcmVmaXg0ICYmIHN0eWxlcyQxW3ByZWZpeDRdICYmIHN0eWxlcyQxW3ByZWZpeDRdW2ljb25OYW1lXSkgewogICAgICB2YXIgaWNvbjMgPSBzdHlsZXMkMVtwcmVmaXg0XVtpY29uTmFtZV07CiAgICAgIHJldHVybiByZXNvbHZlMihhc0ZvdW5kSWNvbihpY29uMykpOwogICAgfQogICAgbWF5YmVOb3RpZnlNaXNzaW5nKGljb25OYW1lLCBwcmVmaXg0KTsKICAgIHJlc29sdmUyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtaXNzaW5nSWNvblJlc29sdXRpb25NaXhpbiksIHt9LCB7CiAgICAgIGljb246IGNvbmZpZzIuc2hvd01pc3NpbmdJY29ucyAmJiBpY29uTmFtZSA/IGNhbGxQcm92aWRlZCgibWlzc2luZ0ljb25BYnN0cmFjdCIpIHx8IHt9IDoge30KICAgIH0pKTsKICB9KTsKfQpmdW5jdGlvbiBpc1dhdGNoZWQobm9kZTIpIHsKICB2YXIgaTJzdmcyID0gbm9kZTIuZ2V0QXR0cmlidXRlID8gbm9kZTIuZ2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcpIDogbnVsbDsKICByZXR1cm4gdHlwZW9mIGkyc3ZnMiA9PT0gInN0cmluZyI7Cn0KZnVuY3Rpb24gaGFzUHJlZml4QW5kSWNvbihub2RlMikgewogIHZhciBwcmVmaXg0ID0gbm9kZTIuZ2V0QXR0cmlidXRlID8gbm9kZTIuZ2V0QXR0cmlidXRlKERBVEFfUFJFRklYKSA6IG51bGw7CiAgdmFyIGljb24zID0gbm9kZTIuZ2V0QXR0cmlidXRlID8gbm9kZTIuZ2V0QXR0cmlidXRlKERBVEFfSUNPTikgOiBudWxsOwogIHJldHVybiBwcmVmaXg0ICYmIGljb24zOwp9CmZ1bmN0aW9uIGhhc0JlZW5SZXBsYWNlZChub2RlMikgewogIHJldHVybiBub2RlMiAmJiBub2RlMi5jbGFzc0xpc3QgJiYgbm9kZTIuY2xhc3NMaXN0LmNvbnRhaW5zICYmIG5vZGUyLmNsYXNzTGlzdC5jb250YWlucyhjb25maWcyLnJlcGxhY2VtZW50Q2xhc3MpOwp9CmZ1bmN0aW9uIGdldE11dGF0b3IoKSB7CiAgaWYgKGNvbmZpZzIuYXV0b1JlcGxhY2VTdmcgPT09IHRydWUpIHsKICAgIHJldHVybiBtdXRhdG9ycy5yZXBsYWNlOwogIH0KICB2YXIgbXV0YXRvciA9IG11dGF0b3JzW2NvbmZpZzIuYXV0b1JlcGxhY2VTdmddOwogIHJldHVybiBtdXRhdG9yIHx8IG11dGF0b3JzLnJlcGxhY2U7Cn0KZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TKHRhZykgewogIHJldHVybiBET0NVTUVOVC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgdGFnKTsKfQpmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZykgewogIHJldHVybiBET0NVTUVOVC5jcmVhdGVFbGVtZW50KHRhZyk7Cn0KZnVuY3Rpb24gY29udmVydFNWRyhhYnN0cmFjdE9iaikgewogIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTsKICB2YXIgX3BhcmFtcyRjZUZuID0gcGFyYW1zMi5jZUZuLCBjZUZuID0gX3BhcmFtcyRjZUZuID09PSB2b2lkIDAgPyBhYnN0cmFjdE9iai50YWcgPT09ICJzdmciID8gY3JlYXRlRWxlbWVudE5TIDogY3JlYXRlRWxlbWVudCA6IF9wYXJhbXMkY2VGbjsKICBpZiAodHlwZW9mIGFic3RyYWN0T2JqID09PSAic3RyaW5nIikgewogICAgcmV0dXJuIERPQ1VNRU5ULmNyZWF0ZVRleHROb2RlKGFic3RyYWN0T2JqKTsKICB9CiAgdmFyIHRhZyA9IGNlRm4oYWJzdHJhY3RPYmoudGFnKTsKICBPYmplY3Qua2V5cyhhYnN0cmFjdE9iai5hdHRyaWJ1dGVzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGtleTIpIHsKICAgIHRhZy5zZXRBdHRyaWJ1dGUoa2V5MiwgYWJzdHJhY3RPYmouYXR0cmlidXRlc1trZXkyXSk7CiAgfSk7CiAgdmFyIGNoaWxkcmVuMiA9IGFic3RyYWN0T2JqLmNoaWxkcmVuIHx8IFtdOwogIGNoaWxkcmVuMi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKSB7CiAgICB0YWcuYXBwZW5kQ2hpbGQoY29udmVydFNWRyhjaGlsZCwgewogICAgICBjZUZuCiAgICB9KSk7CiAgfSk7CiAgcmV0dXJuIHRhZzsKfQpmdW5jdGlvbiBub2RlQXNDb21tZW50KG5vZGUyKSB7CiAgdmFyIGNvbW1lbnQzID0gIiAiLmNvbmNhdChub2RlMi5vdXRlckhUTUwsICIgIik7CiAgY29tbWVudDMgPSAiIi5jb25jYXQoY29tbWVudDMsICJGb250IEF3ZXNvbWUgZm9udGF3ZXNvbWUuY29tICIpOwogIHJldHVybiBjb21tZW50MzsKfQpmdW5jdGlvbiBwZXJmb3JtT3BlcmF0aW9uU3luYyhvcCkgewogIG9wKCk7Cn0KZnVuY3Rpb24gcGVyZm9ybShtdXRhdGlvbnMsIGNhbGxiYWNrKSB7CiAgdmFyIGNhbGxiYWNrRnVuY3Rpb24gPSB0eXBlb2YgY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIgPyBjYWxsYmFjayA6IG5vb3AkMjsKICBpZiAobXV0YXRpb25zLmxlbmd0aCA9PT0gMCkgewogICAgY2FsbGJhY2tGdW5jdGlvbigpOwogIH0gZWxzZSB7CiAgICB2YXIgZnJhbWUgPSBwZXJmb3JtT3BlcmF0aW9uU3luYzsKICAgIGlmIChjb25maWcyLm11dGF0ZUFwcHJvYWNoID09PSBNVVRBVElPTl9BUFBST0FDSF9BU1lOQykgewogICAgICBmcmFtZSA9IFdJTkRPVy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgcGVyZm9ybU9wZXJhdGlvblN5bmM7CiAgICB9CiAgICBmcmFtZShmdW5jdGlvbigpIHsKICAgICAgdmFyIG11dGF0b3IgPSBnZXRNdXRhdG9yKCk7CiAgICAgIHZhciBtYXJrMiA9IHBlcmYuYmVnaW4oIm11dGF0ZSIpOwogICAgICBtdXRhdGlvbnMubWFwKG11dGF0b3IpOwogICAgICBtYXJrMigpOwogICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICB9KTsKICB9Cn0KZnVuY3Rpb24gZGlzYWJsZU9ic2VydmF0aW9uKCkgewogIGRpc2FibGVkID0gdHJ1ZTsKfQpmdW5jdGlvbiBlbmFibGVPYnNlcnZhdGlvbigpIHsKICBkaXNhYmxlZCA9IGZhbHNlOwp9CmZ1bmN0aW9uIG9ic2VydmUob3B0aW9ucykgewogIGlmICghTVVUQVRJT05fT0JTRVJWRVIpIHsKICAgIHJldHVybjsKICB9CiAgaWYgKCFjb25maWcyLm9ic2VydmVNdXRhdGlvbnMpIHsKICAgIHJldHVybjsKICB9CiAgdmFyIF9vcHRpb25zJHRyZWVDYWxsYmFjayA9IG9wdGlvbnMudHJlZUNhbGxiYWNrLCB0cmVlQ2FsbGJhY2sgPSBfb3B0aW9ucyR0cmVlQ2FsbGJhY2sgPT09IHZvaWQgMCA/IG5vb3AkMiA6IF9vcHRpb25zJHRyZWVDYWxsYmFjaywgX29wdGlvbnMkbm9kZUNhbGxiYWNrID0gb3B0aW9ucy5ub2RlQ2FsbGJhY2ssIG5vZGVDYWxsYmFjayA9IF9vcHRpb25zJG5vZGVDYWxsYmFjayA9PT0gdm9pZCAwID8gbm9vcCQyIDogX29wdGlvbnMkbm9kZUNhbGxiYWNrLCBfb3B0aW9ucyRwc2V1ZG9FbGVtZW4gPSBvcHRpb25zLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2ssIHBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sgPSBfb3B0aW9ucyRwc2V1ZG9FbGVtZW4gPT09IHZvaWQgMCA/IG5vb3AkMiA6IF9vcHRpb25zJHBzZXVkb0VsZW1lbiwgX29wdGlvbnMkb2JzZXJ2ZU11dGF0ID0gb3B0aW9ucy5vYnNlcnZlTXV0YXRpb25zUm9vdCwgb2JzZXJ2ZU11dGF0aW9uc1Jvb3QgPSBfb3B0aW9ucyRvYnNlcnZlTXV0YXQgPT09IHZvaWQgMCA/IERPQ1VNRU5UIDogX29wdGlvbnMkb2JzZXJ2ZU11dGF0OwogIG1vID0gbmV3IE1VVEFUSU9OX09CU0VSVkVSKGZ1bmN0aW9uKG9iamVjdHMpIHsKICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuOwogICAgdmFyIGRlZmF1bHRQcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7CiAgICB0b0FycmF5MihvYmplY3RzKS5mb3JFYWNoKGZ1bmN0aW9uKG11dGF0aW9uUmVjb3JkKSB7CiAgICAgIGlmIChtdXRhdGlvblJlY29yZC50eXBlID09PSAiY2hpbGRMaXN0IiAmJiBtdXRhdGlvblJlY29yZC5hZGRlZE5vZGVzLmxlbmd0aCA+IDAgJiYgIWlzV2F0Y2hlZChtdXRhdGlvblJlY29yZC5hZGRlZE5vZGVzWzBdKSkgewogICAgICAgIGlmIChjb25maWcyLnNlYXJjaFBzZXVkb0VsZW1lbnRzKSB7CiAgICAgICAgICBwc2V1ZG9FbGVtZW50c0NhbGxiYWNrKG11dGF0aW9uUmVjb3JkLnRhcmdldCk7CiAgICAgICAgfQogICAgICAgIHRyZWVDYWxsYmFjayhtdXRhdGlvblJlY29yZC50YXJnZXQpOwogICAgICB9CiAgICAgIGlmIChtdXRhdGlvblJlY29yZC50eXBlID09PSAiYXR0cmlidXRlcyIgJiYgbXV0YXRpb25SZWNvcmQudGFyZ2V0LnBhcmVudE5vZGUgJiYgY29uZmlnMi5zZWFyY2hQc2V1ZG9FbGVtZW50cykgewogICAgICAgIHBzZXVkb0VsZW1lbnRzQ2FsbGJhY2soW211dGF0aW9uUmVjb3JkLnRhcmdldF0sIHRydWUpOwogICAgICB9CiAgICAgIGlmIChtdXRhdGlvblJlY29yZC50eXBlID09PSAiYXR0cmlidXRlcyIgJiYgaXNXYXRjaGVkKG11dGF0aW9uUmVjb3JkLnRhcmdldCkgJiYgfkFUVFJJQlVURVNfV0FUQ0hFRF9GT1JfTVVUQVRJT04uaW5kZXhPZihtdXRhdGlvblJlY29yZC5hdHRyaWJ1dGVOYW1lKSkgewogICAgICAgIGlmIChtdXRhdGlvblJlY29yZC5hdHRyaWJ1dGVOYW1lID09PSAiY2xhc3MiICYmIGhhc1ByZWZpeEFuZEljb24obXV0YXRpb25SZWNvcmQudGFyZ2V0KSkgewogICAgICAgICAgdmFyIF9nZXRDYW5vbmljYWxJY29uID0gZ2V0Q2Fub25pY2FsSWNvbihjbGFzc0FycmF5KG11dGF0aW9uUmVjb3JkLnRhcmdldCkpLCBwcmVmaXg0ID0gX2dldENhbm9uaWNhbEljb24ucHJlZml4LCBpY29uTmFtZSA9IF9nZXRDYW5vbmljYWxJY29uLmljb25OYW1lOwogICAgICAgICAgbXV0YXRpb25SZWNvcmQudGFyZ2V0LnNldEF0dHJpYnV0ZShEQVRBX1BSRUZJWCwgcHJlZml4NCB8fCBkZWZhdWx0UHJlZml4KTsKICAgICAgICAgIGlmIChpY29uTmFtZSkgbXV0YXRpb25SZWNvcmQudGFyZ2V0LnNldEF0dHJpYnV0ZShEQVRBX0lDT04sIGljb25OYW1lKTsKICAgICAgICB9IGVsc2UgaWYgKGhhc0JlZW5SZXBsYWNlZChtdXRhdGlvblJlY29yZC50YXJnZXQpKSB7CiAgICAgICAgICBub2RlQ2FsbGJhY2sobXV0YXRpb25SZWNvcmQudGFyZ2V0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0pOwogIGlmICghSVNfRE9NKSByZXR1cm47CiAgbW8ub2JzZXJ2ZShvYnNlcnZlTXV0YXRpb25zUm9vdCwgewogICAgY2hpbGRMaXN0OiB0cnVlLAogICAgYXR0cmlidXRlczogdHJ1ZSwKICAgIGNoYXJhY3RlckRhdGE6IHRydWUsCiAgICBzdWJ0cmVlOiB0cnVlCiAgfSk7Cn0KZnVuY3Rpb24gZGlzY29ubmVjdCgpIHsKICBpZiAoIW1vKSByZXR1cm47CiAgbW8uZGlzY29ubmVjdCgpOwp9CmZ1bmN0aW9uIHN0eWxlUGFyc2VyKG5vZGUyKSB7CiAgdmFyIHN0eWxlID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJzdHlsZSIpOwogIHZhciB2YWwgPSBbXTsKICBpZiAoc3R5bGUpIHsKICAgIHZhbCA9IHN0eWxlLnNwbGl0KCI7IikucmVkdWNlKGZ1bmN0aW9uKGFjYywgc3R5bGUyKSB7CiAgICAgIHZhciBzdHlsZXMzID0gc3R5bGUyLnNwbGl0KCI6Iik7CiAgICAgIHZhciBwcm9wID0gc3R5bGVzM1swXTsKICAgICAgdmFyIHZhbHVlMiA9IHN0eWxlczMuc2xpY2UoMSk7CiAgICAgIGlmIChwcm9wICYmIHZhbHVlMi5sZW5ndGggPiAwKSB7CiAgICAgICAgYWNjW3Byb3BdID0gdmFsdWUyLmpvaW4oIjoiKS50cmltKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGFjYzsKICAgIH0sIHt9KTsKICB9CiAgcmV0dXJuIHZhbDsKfQpmdW5jdGlvbiBjbGFzc1BhcnNlcihub2RlMikgewogIHZhciBleGlzdGluZ1ByZWZpeCA9IG5vZGUyLmdldEF0dHJpYnV0ZSgiZGF0YS1wcmVmaXgiKTsKICB2YXIgZXhpc3RpbmdJY29uTmFtZSA9IG5vZGUyLmdldEF0dHJpYnV0ZSgiZGF0YS1pY29uIik7CiAgdmFyIGlubmVyVGV4dCA9IG5vZGUyLmlubmVyVGV4dCAhPT0gdm9pZCAwID8gbm9kZTIuaW5uZXJUZXh0LnRyaW0oKSA6ICIiOwogIHZhciB2YWwgPSBnZXRDYW5vbmljYWxJY29uKGNsYXNzQXJyYXkobm9kZTIpKTsKICBpZiAoIXZhbC5wcmVmaXgpIHsKICAgIHZhbC5wcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7CiAgfQogIGlmIChleGlzdGluZ1ByZWZpeCAmJiBleGlzdGluZ0ljb25OYW1lKSB7CiAgICB2YWwucHJlZml4ID0gZXhpc3RpbmdQcmVmaXg7CiAgICB2YWwuaWNvbk5hbWUgPSBleGlzdGluZ0ljb25OYW1lOwogIH0KICBpZiAodmFsLmljb25OYW1lICYmIHZhbC5wcmVmaXgpIHsKICAgIHJldHVybiB2YWw7CiAgfQogIGlmICh2YWwucHJlZml4ICYmIGlubmVyVGV4dC5sZW5ndGggPiAwKSB7CiAgICB2YWwuaWNvbk5hbWUgPSBieUxpZ2F0dXJlKHZhbC5wcmVmaXgsIG5vZGUyLmlubmVyVGV4dCkgfHwgYnlVbmljb2RlKHZhbC5wcmVmaXgsIHRvSGV4KG5vZGUyLmlubmVyVGV4dCkpOwogIH0KICBpZiAoIXZhbC5pY29uTmFtZSAmJiBjb25maWcyLmF1dG9GZXRjaFN2ZyAmJiBub2RlMi5maXJzdENoaWxkICYmIG5vZGUyLmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICB2YWwuaWNvbk5hbWUgPSBub2RlMi5maXJzdENoaWxkLmRhdGE7CiAgfQogIHJldHVybiB2YWw7Cn0KZnVuY3Rpb24gYXR0cmlidXRlc1BhcnNlcihub2RlMikgewogIHZhciBleHRyYUF0dHJpYnV0ZXMgPSB0b0FycmF5Mihub2RlMi5hdHRyaWJ1dGVzKS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBhdHRyKSB7CiAgICBpZiAoYWNjLm5hbWUgIT09ICJjbGFzcyIgJiYgYWNjLm5hbWUgIT09ICJzdHlsZSIpIHsKICAgICAgYWNjW2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlOwogICAgfQogICAgcmV0dXJuIGFjYzsKICB9LCB7fSk7CiAgcmV0dXJuIGV4dHJhQXR0cmlidXRlczsKfQpmdW5jdGlvbiBibGFua01ldGEoKSB7CiAgcmV0dXJuIHsKICAgIGljb25OYW1lOiBudWxsLAogICAgcHJlZml4OiBudWxsLAogICAgdHJhbnNmb3JtOiBtZWFuaW5nbGVzc1RyYW5zZm9ybSwKICAgIHN5bWJvbDogZmFsc2UsCiAgICBtYXNrOiB7CiAgICAgIGljb25OYW1lOiBudWxsLAogICAgICBwcmVmaXg6IG51bGwsCiAgICAgIHJlc3Q6IFtdCiAgICB9LAogICAgbWFza0lkOiBudWxsLAogICAgZXh0cmE6IHsKICAgICAgY2xhc3NlczogW10sCiAgICAgIHN0eWxlczoge30sCiAgICAgIGF0dHJpYnV0ZXM6IHt9CiAgICB9CiAgfTsKfQpmdW5jdGlvbiBwYXJzZU1ldGEobm9kZTIpIHsKICB2YXIgcGFyc2VyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7CiAgICBzdHlsZVBhcnNlcjogdHJ1ZQogIH07CiAgdmFyIF9jbGFzc1BhcnNlciA9IGNsYXNzUGFyc2VyKG5vZGUyKSwgaWNvbk5hbWUgPSBfY2xhc3NQYXJzZXIuaWNvbk5hbWUsIHByZWZpeDQgPSBfY2xhc3NQYXJzZXIucHJlZml4LCBleHRyYUNsYXNzZXMgPSBfY2xhc3NQYXJzZXIucmVzdDsKICB2YXIgZXh0cmFBdHRyaWJ1dGVzID0gYXR0cmlidXRlc1BhcnNlcihub2RlMik7CiAgdmFyIHBsdWdpbk1ldGEgPSBjaGFpbkhvb2tzKCJwYXJzZU5vZGVBdHRyaWJ1dGVzIiwge30sIG5vZGUyKTsKICB2YXIgZXh0cmFTdHlsZXMgPSBwYXJzZXIuc3R5bGVQYXJzZXIgPyBzdHlsZVBhcnNlcihub2RlMikgOiBbXTsKICByZXR1cm4gX29iamVjdFNwcmVhZDIoewogICAgaWNvbk5hbWUsCiAgICBwcmVmaXg6IHByZWZpeDQsCiAgICB0cmFuc2Zvcm06IG1lYW5pbmdsZXNzVHJhbnNmb3JtLAogICAgbWFzazogewogICAgICBpY29uTmFtZTogbnVsbCwKICAgICAgcHJlZml4OiBudWxsLAogICAgICByZXN0OiBbXQogICAgfSwKICAgIG1hc2tJZDogbnVsbCwKICAgIHN5bWJvbDogZmFsc2UsCiAgICBleHRyYTogewogICAgICBjbGFzc2VzOiBleHRyYUNsYXNzZXMsCiAgICAgIHN0eWxlczogZXh0cmFTdHlsZXMsCiAgICAgIGF0dHJpYnV0ZXM6IGV4dHJhQXR0cmlidXRlcwogICAgfQogIH0sIHBsdWdpbk1ldGEpOwp9CmZ1bmN0aW9uIGdlbmVyYXRlTXV0YXRpb24obm9kZTIpIHsKICB2YXIgbm9kZU1ldGEgPSBjb25maWcyLmF1dG9SZXBsYWNlU3ZnID09PSAibmVzdCIgPyBwYXJzZU1ldGEobm9kZTIsIHsKICAgIHN0eWxlUGFyc2VyOiBmYWxzZQogIH0pIDogcGFyc2VNZXRhKG5vZGUyKTsKICBpZiAofm5vZGVNZXRhLmV4dHJhLmNsYXNzZXMuaW5kZXhPZihMQVlFUlNfVEVYVF9DTEFTU05BTUUpKSB7CiAgICByZXR1cm4gY2FsbFByb3ZpZGVkKCJnZW5lcmF0ZUxheWVyc1RleHQiLCBub2RlMiwgbm9kZU1ldGEpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gY2FsbFByb3ZpZGVkKCJnZW5lcmF0ZVN2Z1JlcGxhY2VtZW50TXV0YXRpb24iLCBub2RlMiwgbm9kZU1ldGEpOwogIH0KfQpmdW5jdGlvbiBnZXRLbm93blByZWZpeGVzKCkgewogIHJldHVybiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KFl0KSwgX3RvQ29uc3VtYWJsZUFycmF5KFp0JDEpKTsKfQpmdW5jdGlvbiBvblRyZWUocm9vdDYpIHsKICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IG51bGw7CiAgaWYgKCFJU19ET00pIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKICB2YXIgaHRtbENsYXNzTGlzdCA9IERPQ1VNRU5ULmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3Q7CiAgdmFyIGhjbEFkZCA9IGZ1bmN0aW9uIGhjbEFkZDIoc3VmZml4KSB7CiAgICByZXR1cm4gaHRtbENsYXNzTGlzdC5hZGQoIiIuY29uY2F0KEhUTUxfQ0xBU1NfSTJTVkdfQkFTRV9DTEFTUywgIi0iKS5jb25jYXQoc3VmZml4KSk7CiAgfTsKICB2YXIgaGNsUmVtb3ZlID0gZnVuY3Rpb24gaGNsUmVtb3ZlMihzdWZmaXgpIHsKICAgIHJldHVybiBodG1sQ2xhc3NMaXN0LnJlbW92ZSgiIi5jb25jYXQoSFRNTF9DTEFTU19JMlNWR19CQVNFX0NMQVNTLCAiLSIpLmNvbmNhdChzdWZmaXgpKTsKICB9OwogIHZhciBwcmVmaXhlcyA9IGNvbmZpZzIuYXV0b0ZldGNoU3ZnID8gZ2V0S25vd25QcmVmaXhlcygpIDogUS5jb25jYXQoT2JqZWN0LmtleXMoc3R5bGVzJDIpKTsKICBpZiAoIXByZWZpeGVzLmluY2x1ZGVzKCJmYSIpKSB7CiAgICBwcmVmaXhlcy5wdXNoKCJmYSIpOwogIH0KICB2YXIgcHJlZml4ZXNEb21RdWVyeSA9IFsiLiIuY29uY2F0KExBWUVSU19URVhUX0NMQVNTTkFNRSwgIjpub3QoWyIpLmNvbmNhdChEQVRBX0ZBX0kyU1ZHLCAiXSkiKV0uY29uY2F0KHByZWZpeGVzLm1hcChmdW5jdGlvbihwJCQxKSB7CiAgICByZXR1cm4gIi4iLmNvbmNhdChwJCQxLCAiOm5vdChbIikuY29uY2F0KERBVEFfRkFfSTJTVkcsICJdKSIpOwogIH0pKS5qb2luKCIsICIpOwogIGlmIChwcmVmaXhlc0RvbVF1ZXJ5Lmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwogIH0KICB2YXIgY2FuZGlkYXRlcyA9IFtdOwogIHRyeSB7CiAgICBjYW5kaWRhdGVzID0gdG9BcnJheTIocm9vdDYucXVlcnlTZWxlY3RvckFsbChwcmVmaXhlc0RvbVF1ZXJ5KSk7CiAgfSBjYXRjaCAoZSQkMSkgewogIH0KICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPiAwKSB7CiAgICBoY2xBZGQoInBlbmRpbmciKTsKICAgIGhjbFJlbW92ZSgiY29tcGxldGUiKTsKICB9IGVsc2UgewogICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwogIH0KICB2YXIgbWFyazIgPSBwZXJmLmJlZ2luKCJvblRyZWUiKTsKICB2YXIgbXV0YXRpb25zID0gY2FuZGlkYXRlcy5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBub2RlMikgewogICAgdHJ5IHsKICAgICAgdmFyIG11dGF0aW9uID0gZ2VuZXJhdGVNdXRhdGlvbihub2RlMik7CiAgICAgIGlmIChtdXRhdGlvbikgewogICAgICAgIGFjYy5wdXNoKG11dGF0aW9uKTsKICAgICAgfQogICAgfSBjYXRjaCAoZSQkMSkgewogICAgICBpZiAoIVBST0RVQ1RJT04pIHsKICAgICAgICBpZiAoZSQkMS5uYW1lID09PSAiTWlzc2luZ0ljb24iKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKGUkJDEpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGFjYzsKICB9LCBbXSk7CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUyLCByZWplY3QpIHsKICAgIFByb21pc2UuYWxsKG11dGF0aW9ucykudGhlbihmdW5jdGlvbihyZXNvbHZlZE11dGF0aW9ucykgewogICAgICBwZXJmb3JtKHJlc29sdmVkTXV0YXRpb25zLCBmdW5jdGlvbigpIHsKICAgICAgICBoY2xBZGQoImFjdGl2ZSIpOwogICAgICAgIGhjbEFkZCgiY29tcGxldGUiKTsKICAgICAgICBoY2xSZW1vdmUoInBlbmRpbmciKTsKICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAiZnVuY3Rpb24iKSBjYWxsYmFjaygpOwogICAgICAgIG1hcmsyKCk7CiAgICAgICAgcmVzb2x2ZTIoKTsKICAgICAgfSk7CiAgICB9KS5jYXRjaChmdW5jdGlvbihlJCQxKSB7CiAgICAgIG1hcmsyKCk7CiAgICAgIHJlamVjdChlJCQxKTsKICAgIH0pOwogIH0pOwp9CmZ1bmN0aW9uIG9uTm9kZShub2RlMikgewogIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogbnVsbDsKICBnZW5lcmF0ZU11dGF0aW9uKG5vZGUyKS50aGVuKGZ1bmN0aW9uKG11dGF0aW9uKSB7CiAgICBpZiAobXV0YXRpb24pIHsKICAgICAgcGVyZm9ybShbbXV0YXRpb25dLCBjYWxsYmFjayk7CiAgICB9CiAgfSk7Cn0KZnVuY3Rpb24gcmVzb2x2ZUljb25zKG5leHQyKSB7CiAgcmV0dXJuIGZ1bmN0aW9uKG1heWJlSWNvbkRlZmluaXRpb24pIHsKICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTsKICAgIHZhciBpY29uRGVmaW5pdGlvbiA9IChtYXliZUljb25EZWZpbml0aW9uIHx8IHt9KS5pY29uID8gbWF5YmVJY29uRGVmaW5pdGlvbiA6IGZpbmRJY29uRGVmaW5pdGlvbihtYXliZUljb25EZWZpbml0aW9uIHx8IHt9KTsKICAgIHZhciBtYXNrID0gcGFyYW1zMi5tYXNrOwogICAgaWYgKG1hc2spIHsKICAgICAgbWFzayA9IChtYXNrIHx8IHt9KS5pY29uID8gbWFzayA6IGZpbmRJY29uRGVmaW5pdGlvbihtYXNrIHx8IHt9KTsKICAgIH0KICAgIHJldHVybiBuZXh0MihpY29uRGVmaW5pdGlvbiwgX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHBhcmFtczIpLCB7fSwgewogICAgICBtYXNrCiAgICB9KSk7CiAgfTsKfQpmdW5jdGlvbiBoZXhWYWx1ZUZyb21Db250ZW50KGNvbnRlbnQzKSB7CiAgdmFyIGNsZWFuZWQgPSBjb250ZW50My5yZXBsYWNlKENMRUFOX0NPTlRFTlRfUEFUVEVSTiwgIiIpOwogIHJldHVybiB0b0hleChfdG9Db25zdW1hYmxlQXJyYXkoY2xlYW5lZClbMF0gfHwgIiIpOwp9CmZ1bmN0aW9uIGlzU2Vjb25kYXJ5TGF5ZXIoc3R5bGVzMykgewogIHZhciBoYXNTdHlsaXN0aWNTZXQgPSBzdHlsZXMzLmdldFByb3BlcnR5VmFsdWUoImZvbnQtZmVhdHVyZS1zZXR0aW5ncyIpLmluY2x1ZGVzKCJzczAxIik7CiAgdmFyIGNvbnRlbnQzID0gc3R5bGVzMy5nZXRQcm9wZXJ0eVZhbHVlKCJjb250ZW50Iik7CiAgdmFyIGNsZWFuZWQgPSBjb250ZW50My5yZXBsYWNlKENMRUFOX0NPTlRFTlRfUEFUVEVSTiwgIiIpOwogIHZhciBjb2RlUG9pbnQgPSBjbGVhbmVkLmNvZGVQb2ludEF0KDApOwogIHZhciBpc1ByZXBlbmRUZW4gPSBjb2RlUG9pbnQgPj0gU0VDT05EQVJZX1VOSUNPREVfUkFOR0VbMF0gJiYgY29kZVBvaW50IDw9IFNFQ09OREFSWV9VTklDT0RFX1JBTkdFWzFdOwogIHZhciBpc0RvdWJsZWQgPSBjbGVhbmVkLmxlbmd0aCA9PT0gMiA/IGNsZWFuZWRbMF0gPT09IGNsZWFuZWRbMV0gOiBmYWxzZTsKICByZXR1cm4gaXNQcmVwZW5kVGVuIHx8IGlzRG91YmxlZCB8fCBoYXNTdHlsaXN0aWNTZXQ7Cn0KZnVuY3Rpb24gZ2V0UHJlZml4KGZvbnRGYW1pbHksIGZvbnRXZWlnaHQpIHsKICB2YXIgZm9udEZhbWlseVNhbml0aXplZCA9IGZvbnRGYW1pbHkucmVwbGFjZSgvXlsnIl18WyciXSQvZywgIiIpLnRvTG93ZXJDYXNlKCk7CiAgdmFyIGZvbnRXZWlnaHRJbnRlZ2VyID0gcGFyc2VJbnQoZm9udFdlaWdodCk7CiAgdmFyIGZvbnRXZWlnaHRTYW5pdGl6ZWQgPSBpc05hTihmb250V2VpZ2h0SW50ZWdlcikgPyAibm9ybWFsIiA6IGZvbnRXZWlnaHRJbnRlZ2VyOwogIHJldHVybiAoRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWFtmb250RmFtaWx5U2FuaXRpemVkXSB8fCB7fSlbZm9udFdlaWdodFNhbml0aXplZF0gfHwgRk9OVF9GQU1JTFlfV0VJR0hUX0ZBTExCQUNLW2ZvbnRGYW1pbHlTYW5pdGl6ZWRdOwp9CmZ1bmN0aW9uIHJlcGxhY2VGb3JQb3NpdGlvbihub2RlMiwgcG9zaXRpb24zKSB7CiAgdmFyIHBlbmRpbmdBdHRyaWJ1dGUgPSAiIi5jb25jYXQoREFUQV9GQV9QU0VVRE9fRUxFTUVOVF9QRU5ESU5HKS5jb25jYXQocG9zaXRpb24zLnJlcGxhY2UoIjoiLCAiLSIpKTsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZTIsIHJlamVjdCkgewogICAgaWYgKG5vZGUyLmdldEF0dHJpYnV0ZShwZW5kaW5nQXR0cmlidXRlKSAhPT0gbnVsbCkgewogICAgICByZXR1cm4gcmVzb2x2ZTIoKTsKICAgIH0KICAgIHZhciBjaGlsZHJlbjIgPSB0b0FycmF5Mihub2RlMi5jaGlsZHJlbik7CiAgICB2YXIgYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQgPSBjaGlsZHJlbjIuZmlsdGVyKGZ1bmN0aW9uKGMkJDEpIHsKICAgICAgcmV0dXJuIGMkJDEuZ2V0QXR0cmlidXRlKERBVEFfRkFfUFNFVURPX0VMRU1FTlQpID09PSBwb3NpdGlvbjM7CiAgICB9KVswXTsKICAgIHZhciBzdHlsZXMzID0gV0lORE9XLmdldENvbXB1dGVkU3R5bGUobm9kZTIsIHBvc2l0aW9uMyk7CiAgICB2YXIgZm9udEZhbWlseSA9IHN0eWxlczMuZ2V0UHJvcGVydHlWYWx1ZSgiZm9udC1mYW1pbHkiKTsKICAgIHZhciBmb250RmFtaWx5TWF0Y2ggPSBmb250RmFtaWx5Lm1hdGNoKEZPTlRfRkFNSUxZX1BBVFRFUk4pOwogICAgdmFyIGZvbnRXZWlnaHQgPSBzdHlsZXMzLmdldFByb3BlcnR5VmFsdWUoImZvbnQtd2VpZ2h0Iik7CiAgICB2YXIgY29udGVudDMgPSBzdHlsZXMzLmdldFByb3BlcnR5VmFsdWUoImNvbnRlbnQiKTsKICAgIGlmIChhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudCAmJiAhZm9udEZhbWlseU1hdGNoKSB7CiAgICAgIG5vZGUyLnJlbW92ZUNoaWxkKGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50KTsKICAgICAgcmV0dXJuIHJlc29sdmUyKCk7CiAgICB9IGVsc2UgaWYgKGZvbnRGYW1pbHlNYXRjaCAmJiBjb250ZW50MyAhPT0gIm5vbmUiICYmIGNvbnRlbnQzICE9PSAiIikgewogICAgICB2YXIgX2NvbnRlbnQyID0gc3R5bGVzMy5nZXRQcm9wZXJ0eVZhbHVlKCJjb250ZW50Iik7CiAgICAgIHZhciBwcmVmaXg0ID0gZ2V0UHJlZml4KGZvbnRGYW1pbHksIGZvbnRXZWlnaHQpOwogICAgICB2YXIgaGV4VmFsdWUgPSBoZXhWYWx1ZUZyb21Db250ZW50KF9jb250ZW50Mik7CiAgICAgIHZhciBpc1Y0ID0gZm9udEZhbWlseU1hdGNoWzBdLnN0YXJ0c1dpdGgoIkZvbnRBd2Vzb21lIik7CiAgICAgIHZhciBpc1NlY29uZGFyeSA9IGlzU2Vjb25kYXJ5TGF5ZXIoc3R5bGVzMyk7CiAgICAgIHZhciBpY29uTmFtZSA9IGJ5VW5pY29kZShwcmVmaXg0LCBoZXhWYWx1ZSk7CiAgICAgIHZhciBpY29uSWRlbnRpZmllciA9IGljb25OYW1lOwogICAgICBpZiAoaXNWNCkgewogICAgICAgIHZhciBpY29uTmFtZTQgPSBieU9sZFVuaWNvZGUoaGV4VmFsdWUpOwogICAgICAgIGlmIChpY29uTmFtZTQuaWNvbk5hbWUgJiYgaWNvbk5hbWU0LnByZWZpeCkgewogICAgICAgICAgaWNvbk5hbWUgPSBpY29uTmFtZTQuaWNvbk5hbWU7CiAgICAgICAgICBwcmVmaXg0ID0gaWNvbk5hbWU0LnByZWZpeDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGljb25OYW1lICYmICFpc1NlY29uZGFyeSAmJiAoIWFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50IHx8IGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50LmdldEF0dHJpYnV0ZShEQVRBX1BSRUZJWCkgIT09IHByZWZpeDQgfHwgYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQuZ2V0QXR0cmlidXRlKERBVEFfSUNPTikgIT09IGljb25JZGVudGlmaWVyKSkgewogICAgICAgIG5vZGUyLnNldEF0dHJpYnV0ZShwZW5kaW5nQXR0cmlidXRlLCBpY29uSWRlbnRpZmllcik7CiAgICAgICAgaWYgKGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50KSB7CiAgICAgICAgICBub2RlMi5yZW1vdmVDaGlsZChhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIHZhciBtZXRhID0gYmxhbmtNZXRhKCk7CiAgICAgICAgdmFyIGV4dHJhID0gbWV0YS5leHRyYTsKICAgICAgICBleHRyYS5hdHRyaWJ1dGVzW0RBVEFfRkFfUFNFVURPX0VMRU1FTlRdID0gcG9zaXRpb24zOwogICAgICAgIGZpbmRJY29uKGljb25OYW1lLCBwcmVmaXg0KS50aGVuKGZ1bmN0aW9uKG1haW4pIHsKICAgICAgICAgIHZhciBhYnN0cmFjdCA9IG1ha2VJbmxpbmVTdmdBYnN0cmFjdChfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWV0YSksIHt9LCB7CiAgICAgICAgICAgIGljb25zOiB7CiAgICAgICAgICAgICAgbWFpbiwKICAgICAgICAgICAgICBtYXNrOiBlbXB0eUNhbm9uaWNhbEljb24oKQogICAgICAgICAgICB9LAogICAgICAgICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgICAgICAgIGljb25OYW1lOiBpY29uSWRlbnRpZmllciwKICAgICAgICAgICAgZXh0cmEsCiAgICAgICAgICAgIHdhdGNoYWJsZTogdHJ1ZQogICAgICAgICAgfSkpOwogICAgICAgICAgdmFyIGVsZW1lbnQ0ID0gRE9DVU1FTlQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsICJzdmciKTsKICAgICAgICAgIGlmIChwb3NpdGlvbjMgPT09ICI6OmJlZm9yZSIpIHsKICAgICAgICAgICAgbm9kZTIuaW5zZXJ0QmVmb3JlKGVsZW1lbnQ0LCBub2RlMi5maXJzdENoaWxkKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5vZGUyLmFwcGVuZENoaWxkKGVsZW1lbnQ0KTsKICAgICAgICAgIH0KICAgICAgICAgIGVsZW1lbnQ0Lm91dGVySFRNTCA9IGFic3RyYWN0Lm1hcChmdW5jdGlvbihhJCQxKSB7CiAgICAgICAgICAgIHJldHVybiB0b0h0bWwyKGEkJDEpOwogICAgICAgICAgfSkuam9pbigiXG4iKTsKICAgICAgICAgIG5vZGUyLnJlbW92ZUF0dHJpYnV0ZShwZW5kaW5nQXR0cmlidXRlKTsKICAgICAgICAgIHJlc29sdmUyKCk7CiAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXNvbHZlMigpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXNvbHZlMigpOwogICAgfQogIH0pOwp9CmZ1bmN0aW9uIHJlcGxhY2U0KG5vZGUyKSB7CiAgcmV0dXJuIFByb21pc2UuYWxsKFtyZXBsYWNlRm9yUG9zaXRpb24obm9kZTIsICI6OmJlZm9yZSIpLCByZXBsYWNlRm9yUG9zaXRpb24obm9kZTIsICI6OmFmdGVyIildKTsKfQpmdW5jdGlvbiBwcm9jZXNzYWJsZShub2RlMikgewogIHJldHVybiBub2RlMi5wYXJlbnROb2RlICE9PSBkb2N1bWVudC5oZWFkICYmICF+VEFHTkFNRVNfVE9fU0tJUF9GT1JfUFNFVURPRUxFTUVOVFMuaW5kZXhPZihub2RlMi50YWdOYW1lLnRvVXBwZXJDYXNlKCkpICYmICFub2RlMi5nZXRBdHRyaWJ1dGUoREFUQV9GQV9QU0VVRE9fRUxFTUVOVCkgJiYgKCFub2RlMi5wYXJlbnROb2RlIHx8IG5vZGUyLnBhcmVudE5vZGUudGFnTmFtZSAhPT0gInN2ZyIpOwp9CmZ1bmN0aW9uIHNlYXJjaFBzZXVkb0VsZW1lbnRzKHJvb3Q2KSB7CiAgdmFyIHVzZUFzTm9kZUxpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlOwogIGlmICghSVNfRE9NKSByZXR1cm47CiAgdmFyIG5vZGVMaXN0OwogIGlmICh1c2VBc05vZGVMaXN0KSB7CiAgICBub2RlTGlzdCA9IHJvb3Q2OwogIH0gZWxzZSBpZiAoY29uZmlnMi5zZWFyY2hQc2V1ZG9FbGVtZW50c0Z1bGxTY2FuKSB7CiAgICBub2RlTGlzdCA9IHJvb3Q2LnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTsKICB9IGVsc2UgewogICAgdmFyIHNlbGVjdG9yU2V0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgIHZhciBfaXRlcmF0b3IyID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoZG9jdW1lbnQuc3R5bGVTaGVldHMpLCBfc3RlcDI7CiAgICB0cnkgewogICAgICBmb3IgKF9pdGVyYXRvcjIucygpOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIubigpKS5kb25lOyApIHsKICAgICAgICB2YXIgc3R5bGVzaGVldCA9IF9zdGVwMi52YWx1ZTsKICAgICAgICB0cnkgewogICAgICAgICAgdmFyIF9pdGVyYXRvcjMgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihzdHlsZXNoZWV0LmNzc1J1bGVzKSwgX3N0ZXAzOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgZm9yIChfaXRlcmF0b3IzLnMoKTsgIShfc3RlcDMgPSBfaXRlcmF0b3IzLm4oKSkuZG9uZTsgKSB7CiAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBfc3RlcDMudmFsdWU7CiAgICAgICAgICAgICAgdmFyIHBhcnNlZFNlbGVjdG9ycyA9IHBhcnNlQ1NTUnVsZUZvclBzZXVkb3MocnVsZS5zZWxlY3RvclRleHQpOwogICAgICAgICAgICAgIHZhciBfaXRlcmF0b3I0ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIocGFyc2VkU2VsZWN0b3JzKSwgX3N0ZXA0OwogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBmb3IgKF9pdGVyYXRvcjQucygpOyAhKF9zdGVwNCA9IF9pdGVyYXRvcjQubigpKS5kb25lOyApIHsKICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gX3N0ZXA0LnZhbHVlOwogICAgICAgICAgICAgICAgICBzZWxlY3RvclNldC5hZGQoc2VsZWN0b3IpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgX2l0ZXJhdG9yNC5lKGVycik7CiAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgIF9pdGVyYXRvcjQuZigpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIF9pdGVyYXRvcjMuZShlcnIpOwogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgX2l0ZXJhdG9yMy5mKCk7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZSQkMSkgewogICAgICAgICAgaWYgKGNvbmZpZzIuc2VhcmNoUHNldWRvRWxlbWVudHNXYXJuaW5ncykgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIkZvbnQgQXdlc29tZTogY2Fubm90IHBhcnNlIHN0eWxlc2hlZXQ6ICIuY29uY2F0KHN0eWxlc2hlZXQuaHJlZiwgIiAoIikuY29uY2F0KGUkJDEubWVzc2FnZSwgJylcbklmIGl0IGRlY2xhcmVzIGFueSBGb250IEF3ZXNvbWUgQ1NTIHBzZXVkby1lbGVtZW50cywgdGhleSB3aWxsIG5vdCBiZSByZW5kZXJlZCBhcyBTVkcgaWNvbnMuIEFkZCBjcm9zc29yaWdpbj0iYW5vbnltb3VzIiB0byB0aGUgPGxpbms+LCBlbmFibGUgc2VhcmNoUHNldWRvRWxlbWVudHNGdWxsU2NhbiBmb3Igc2xvd2VyIGJ1dCBtb3JlIHRob3JvdWdoIERPTSBwYXJzaW5nLCBvciBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgYnkgc2V0dGluZyBzZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzIHRvIGZhbHNlLicpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVycikgewogICAgICBfaXRlcmF0b3IyLmUoZXJyKTsKICAgIH0gZmluYWxseSB7CiAgICAgIF9pdGVyYXRvcjIuZigpOwogICAgfQogICAgaWYgKCFzZWxlY3RvclNldC5zaXplKSByZXR1cm47CiAgICB2YXIgY2xlYW5TZWxlY3RvcnMgPSBBcnJheS5mcm9tKHNlbGVjdG9yU2V0KS5qb2luKCIsICIpOwogICAgdHJ5IHsKICAgICAgbm9kZUxpc3QgPSByb290Ni5xdWVyeVNlbGVjdG9yQWxsKGNsZWFuU2VsZWN0b3JzKTsKICAgIH0gY2F0Y2ggKF91bnVzZWQpIHsKICAgIH0KICB9CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUyLCByZWplY3QpIHsKICAgIHZhciBvcGVyYXRpb25zID0gdG9BcnJheTIobm9kZUxpc3QpLmZpbHRlcihwcm9jZXNzYWJsZSkubWFwKHJlcGxhY2U0KTsKICAgIHZhciBlbmQzID0gcGVyZi5iZWdpbigic2VhcmNoUHNldWRvRWxlbWVudHMiKTsKICAgIGRpc2FibGVPYnNlcnZhdGlvbigpOwogICAgUHJvbWlzZS5hbGwob3BlcmF0aW9ucykudGhlbihmdW5jdGlvbigpIHsKICAgICAgZW5kMygpOwogICAgICBlbmFibGVPYnNlcnZhdGlvbigpOwogICAgICByZXNvbHZlMigpOwogICAgfSkuY2F0Y2goZnVuY3Rpb24oKSB7CiAgICAgIGVuZDMoKTsKICAgICAgZW5hYmxlT2JzZXJ2YXRpb24oKTsKICAgICAgcmVqZWN0KCk7CiAgICB9KTsKICB9KTsKfQpmdW5jdGlvbiBmaWxsQmxhY2soYWJzdHJhY3QpIHsKICB2YXIgZm9yY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7CiAgaWYgKGFic3RyYWN0LmF0dHJpYnV0ZXMgJiYgKGFic3RyYWN0LmF0dHJpYnV0ZXMuZmlsbCB8fCBmb3JjZSkpIHsKICAgIGFic3RyYWN0LmF0dHJpYnV0ZXMuZmlsbCA9ICJibGFjayI7CiAgfQogIHJldHVybiBhYnN0cmFjdDsKfQpmdW5jdGlvbiBkZUdyb3VwKGFic3RyYWN0KSB7CiAgaWYgKGFic3RyYWN0LnRhZyA9PT0gImciKSB7CiAgICByZXR1cm4gYWJzdHJhY3QuY2hpbGRyZW47CiAgfSBlbHNlIHsKICAgIHJldHVybiBbYWJzdHJhY3RdOwogIH0KfQp2YXIgbm9vcDIsIF9XSU5ET1csIF9ET0NVTUVOVCwgX01VVEFUSU9OX09CU0VSVkVSLCBfUEVSRk9STUFOQ0UsIF9yZWYsIF9yZWYkdXNlckFnZW50LCB1c2VyQWdlbnQsIFdJTkRPVywgRE9DVU1FTlQsIE1VVEFUSU9OX09CU0VSVkVSLCBQRVJGT1JNQU5DRSwgSVNfQlJPV1NFUiwgSVNfRE9NLCBJU19JRSwgX2R0LCBFMiwgXzMsIHEsIEgzLCBRLCBpMTAsIHQ4LCBkNSwgbDUsIGY2LCBuMTIsIGg4LCBvMTIsIHU2LCBnMywgczgsIHk0LCBtNSwgZTEwLCBwNiwgYTQsIHcyLCB4MiwgYjQsIGMxMCwgSTIsIEYsIHY0LCBTNCwgQTIsIFAzLCBqMywgQjIsIE4zLCBrMywgRDMsIFQyLCBDMiwgVywgSzIsIFIzLCBydCwgZHQyLCBndCwgQ3QsIFV0LCBfdCwgWXQsIHF0LCBIdCwgTDIsIHIxMCwgVSwgSiwgJHQsIG9sLCBkbCwgZmwsIHVsLCBfbWwsIGwkMSwgZiQxLCBuJDEsIG8kMSwgdSQxLCBzJDEsIGgkMSwgZyQxLCB5JDEsIGUkMSwgbSQxLCBwJDEsIGEkMSwgdyQxLCBiJDEsIHIkMSwgYyQxLCBpJDEsIHgkMSwgSSQxLCBGJDEsIHYkMSwgUyQxLCBBJDEsIFAkMSwgaiQxLCBCJDEsIE4kMSwgayQxLCBEJDEsIEMkMSwgVCQxLCBMJDEsIFckMSwgUiQxLCBLJDEsIFUkMSwgSiQxLCBtbCQxLCBFJDEsIGQkMSwgXyQxLCBNJDEsIHJ0JDEsICR0JDEsIHoyLCBIdCQxLCBZJDEsIFp0JDEsIEckMSwgTyQxLCBWJDEsICQkMSwgdG8sIHJvLCBOQU1FU1BBQ0VfSURFTlRJRklFUiwgVU5JVFNfSU5fR1JJRCwgREVGQVVMVF9DU1NfUFJFRklYLCBERUZBVUxUX1JFUExBQ0VNRU5UX0NMQVNTLCBEQVRBX0ZBX0kyU1ZHLCBEQVRBX0ZBX1BTRVVET19FTEVNRU5ULCBEQVRBX0ZBX1BTRVVET19FTEVNRU5UX1BFTkRJTkcsIERBVEFfUFJFRklYLCBEQVRBX0lDT04sIEhUTUxfQ0xBU1NfSTJTVkdfQkFTRV9DTEFTUywgTVVUQVRJT05fQVBQUk9BQ0hfQVNZTkMsIFRBR05BTUVTX1RPX1NLSVBfRk9SX1BTRVVET0VMRU1FTlRTLCBQU0VVRE9fRUxFTUVOVFMsIFBST0RVQ1RJT04sIF9QUkVGSVhfVE9fU1RZTEUsIFBSRUZJWF9UT19TVFlMRSwgX1NUWUxFX1RPX1BSRUZJWCwgU1RZTEVfVE9fUFJFRklYLCBfUFJFRklYX1RPX0xPTkdfU1RZTEUsIFBSRUZJWF9UT19MT05HX1NUWUxFLCBfTE9OR19TVFlMRV9UT19QUkVGSVgsIExPTkdfU1RZTEVfVE9fUFJFRklYLCBJQ09OX1NFTEVDVElPTl9TWU5UQVhfUEFUVEVSTiwgTEFZRVJTX1RFWFRfQ0xBU1NOQU1FLCBGT05UX0ZBTUlMWV9QQVRURVJOLCBfRk9OVF9XRUlHSFRfVE9fUFJFRklYLCBGT05UX1dFSUdIVF9UT19QUkVGSVgsIEFUVFJJQlVURVNfV0FUQ0hFRF9GT1JfTVVUQVRJT04sIERVT1RPTkVfQ0xBU1NFUywgUkVTRVJWRURfQ0xBU1NFUywgaW5pdGlhbCwgX2RlZmF1bHQsIF9jb25maWcsIGNvbmZpZzIsIF9vbkNoYW5nZUNiLCBkJDIsIG1lYW5pbmdsZXNzVHJhbnNmb3JtLCBpZFBvb2wsIGJhc2VTdHlsZXMsIF9jc3NJbnNlcnRlZCwgSW5qZWN0Q1NTLCB3JDIsIG5hbWVzcGFjZSwgZnVuY3Rpb25zLCBfbGlzdGVuZXIsIGxvYWRlZCwgYmluZEludGVybmFsNCwgcmVkdWNlMywgTU9OTywgRFVPLCBtb2Rlcm5NYXRjaGVzLCBsZWdhY3lNYXRjaGVzLCBzdHlsZXMyLCBzaGltcywgRkFNSUxZX05BTUVTLCBQUkVGSVhFU19GT1JfRkFNSUxZLCBfZGVmYXVsdFVzYWJsZVByZWZpeCwgX2J5VW5pY29kZSwgX2J5TGlnYXR1cmUsIF9ieU9sZE5hbWUsIF9ieU9sZFVuaWNvZGUsIF9ieUFsaWFzLCBidWlsZCwgZW1wdHlDYW5vbmljYWxJY29uLCBfZmFDb21iaW5lZENsYXNzZXMsIG5ld0Nhbm9uaWNhbEZhbWlsaWVzLCBuZXdDYW5vbmljYWxTdHlsZXMsIExpYnJhcnksIF9wbHVnaW5zLCBfaG9va3MsIHByb3ZpZGVycywgZGVmYXVsdFByb3ZpZGVyS2V5cywgbGlicmFyeSwgbm9BdXRvLCBkb20sIHBhcnNlNywgYXBpLCBhdXRvUmVwbGFjZSwgc3R5bGVzJDEsIG1pc3NpbmdJY29uUmVzb2x1dGlvbk1peGluLCBub29wJDEsIHAkMiwgcHJlYW1ibGUsIGJlZ2luLCBlbmQsIHBlcmYsIG5vb3AkMiwgbXV0YXRvcnMsIGRpc2FibGVkLCBtbywgc3R5bGVzJDIsIHJlbmRlciwgUmVwbGFjZUVsZW1lbnRzLCBMYXllcnMsIExheWVyc0NvdW50ZXIsIExheWVyc1RleHQsIENMRUFOX0NPTlRFTlRfUEFUVEVSTiwgU0VDT05EQVJZX1VOSUNPREVfUkFOR0UsIF9GT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYLCBGT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYLCBGT05UX0ZBTUlMWV9XRUlHSFRfRkFMTEJBQ0ssIGhhc1BzZXVkb0VsZW1lbnQsIHBhcnNlQ1NTUnVsZUZvclBzZXVkb3MsIFBzZXVkb0VsZW1lbnRzLCBfdW53YXRjaGVkLCBNdXRhdGlvbk9ic2VydmVyJDEsIHBhcnNlVHJhbnNmb3JtU3RyaW5nLCBQb3dlclRyYW5zZm9ybXMsIEFMTF9TUEFDRSwgTWFza3MsIE1pc3NpbmdJY29uSW5kaWNhdG9yLCBTdmdTeW1ib2xzLCBwbHVnaW5zLCBub0F1dG8kMSwgY29uZmlnJDEsIGxpYnJhcnkkMSwgZG9tJDEsIHBhcnNlJDEsIGZpbmRJY29uRGVmaW5pdGlvbiQxLCB0b0h0bWwkMSwgaWNvbjIsIGxheWVyLCB0ZXh0OCwgY291bnRlciwgYXR0cnM7CnZhciBpbml0X2ZvbnRhd2Vzb21lX3N2Z19jb3JlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGZvcnRhd2Vzb21lK2ZvbnRhd2Vzb21lLXN2Zy1jb3JlQDcuMS4wL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUvaW5kZXgubWpzIigpIHsKICAgIG5vb3AyID0gZnVuY3Rpb24gbm9vcDMoKSB7CiAgICB9OwogICAgX1dJTkRPVyA9IHt9OwogICAgX0RPQ1VNRU5UID0ge307CiAgICBfTVVUQVRJT05fT0JTRVJWRVIgPSBudWxsOwogICAgX1BFUkZPUk1BTkNFID0gewogICAgICBtYXJrOiBub29wMiwKICAgICAgbWVhc3VyZTogbm9vcDIKICAgIH07CiAgICB0cnkgewogICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIpIF9XSU5ET1cgPSB3aW5kb3c7CiAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICJ1bmRlZmluZWQiKSBfRE9DVU1FTlQgPSBkb2N1bWVudDsKICAgICAgaWYgKHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAidW5kZWZpbmVkIikgX01VVEFUSU9OX09CU0VSVkVSID0gTXV0YXRpb25PYnNlcnZlcjsKICAgICAgaWYgKHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gInVuZGVmaW5lZCIpIF9QRVJGT1JNQU5DRSA9IHBlcmZvcm1hbmNlOwogICAgfSBjYXRjaCAoZTExKSB7CiAgICB9CiAgICBfcmVmID0gX1dJTkRPVy5uYXZpZ2F0b3IgfHwge30sIF9yZWYkdXNlckFnZW50ID0gX3JlZi51c2VyQWdlbnQsIHVzZXJBZ2VudCA9IF9yZWYkdXNlckFnZW50ID09PSB2b2lkIDAgPyAiIiA6IF9yZWYkdXNlckFnZW50OwogICAgV0lORE9XID0gX1dJTkRPVzsKICAgIERPQ1VNRU5UID0gX0RPQ1VNRU5UOwogICAgTVVUQVRJT05fT0JTRVJWRVIgPSBfTVVUQVRJT05fT0JTRVJWRVI7CiAgICBQRVJGT1JNQU5DRSA9IF9QRVJGT1JNQU5DRTsKICAgIElTX0JST1dTRVIgPSAhIVdJTkRPVy5kb2N1bWVudDsKICAgIElTX0RPTSA9ICEhRE9DVU1FTlQuZG9jdW1lbnRFbGVtZW50ICYmICEhRE9DVU1FTlQuaGVhZCAmJiB0eXBlb2YgRE9DVU1FTlQuYWRkRXZlbnRMaXN0ZW5lciA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgRE9DVU1FTlQuY3JlYXRlRWxlbWVudCA9PT0gImZ1bmN0aW9uIjsKICAgIElTX0lFID0gfnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIikgfHwgfnVzZXJBZ2VudC5pbmRleE9mKCJUcmlkZW50LyIpOwogICAgRTIgPSAvZmEoa3xrZHxzfHJ8bHx0fGR8ZHJ8ZGx8ZHR8YnxzbHJ8c2xwcnx3c2J8dGx8bnN8bmRzfGVzfGpyfGpmcnxqZHJ8dXNifHVmc2J8dWRzYnxjcnxzc3xzcnxzbHxzdHxzZHN8c2RyfHNkbHxzZHQpP1tcLVwgXS8sIF8zID0gL0ZvbnQgP0F3ZXNvbWUgPyhbNTY3IF0qKShTb2xpZHxSZWd1bGFyfExpZ2h0fFRoaW58RHVvdG9uZXxCcmFuZHN8RnJlZXxQcm98U2hhcnAgRHVvdG9uZXxTaGFycHxLaXR8Tm90ZG9nIER1b3xOb3Rkb2d8Q2hpc2VsfEV0Y2h8VGh1bWJwcmludHxKZWxseSBGaWxsfEplbGx5IER1b3xKZWxseXxVdGlsaXR5fFV0aWxpdHkgRmlsbHxVdGlsaXR5IER1b3xTbGFiIFByZXNzfFNsYWJ8V2hpdGVib2FyZCk/LiovaTsKICAgIHEgPSB7CiAgICAgIGNsYXNzaWM6IHsKICAgICAgICBmYTogInNvbGlkIiwKICAgICAgICBmYXM6ICJzb2xpZCIsCiAgICAgICAgImZhLXNvbGlkIjogInNvbGlkIiwKICAgICAgICBmYXI6ICJyZWd1bGFyIiwKICAgICAgICAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwKICAgICAgICBmYWw6ICJsaWdodCIsCiAgICAgICAgImZhLWxpZ2h0IjogImxpZ2h0IiwKICAgICAgICBmYXQ6ICJ0aGluIiwKICAgICAgICAiZmEtdGhpbiI6ICJ0aGluIiwKICAgICAgICBmYWI6ICJicmFuZHMiLAogICAgICAgICJmYS1icmFuZHMiOiAiYnJhbmRzIgogICAgICB9LAogICAgICBkdW90b25lOiB7CiAgICAgICAgZmE6ICJzb2xpZCIsCiAgICAgICAgZmFkOiAic29saWQiLAogICAgICAgICJmYS1zb2xpZCI6ICJzb2xpZCIsCiAgICAgICAgImZhLWR1b3RvbmUiOiAic29saWQiLAogICAgICAgIGZhZHI6ICJyZWd1bGFyIiwKICAgICAgICAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwKICAgICAgICBmYWRsOiAibGlnaHQiLAogICAgICAgICJmYS1saWdodCI6ICJsaWdodCIsCiAgICAgICAgZmFkdDogInRoaW4iLAogICAgICAgICJmYS10aGluIjogInRoaW4iCiAgICAgIH0sCiAgICAgIHNoYXJwOiB7CiAgICAgICAgZmE6ICJzb2xpZCIsCiAgICAgICAgZmFzczogInNvbGlkIiwKICAgICAgICAiZmEtc29saWQiOiAic29saWQiLAogICAgICAgIGZhc3I6ICJyZWd1bGFyIiwKICAgICAgICAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwKICAgICAgICBmYXNsOiAibGlnaHQiLAogICAgICAgICJmYS1saWdodCI6ICJsaWdodCIsCiAgICAgICAgZmFzdDogInRoaW4iLAogICAgICAgICJmYS10aGluIjogInRoaW4iCiAgICAgIH0sCiAgICAgICJzaGFycC1kdW90b25lIjogewogICAgICAgIGZhOiAic29saWQiLAogICAgICAgIGZhc2RzOiAic29saWQiLAogICAgICAgICJmYS1zb2xpZCI6ICJzb2xpZCIsCiAgICAgICAgZmFzZHI6ICJyZWd1bGFyIiwKICAgICAgICAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwKICAgICAgICBmYXNkbDogImxpZ2h0IiwKICAgICAgICAiZmEtbGlnaHQiOiAibGlnaHQiLAogICAgICAgIGZhc2R0OiAidGhpbiIsCiAgICAgICAgImZhLXRoaW4iOiAidGhpbiIKICAgICAgfSwKICAgICAgc2xhYjogewogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhc2xyOiAicmVndWxhciIKICAgICAgfSwKICAgICAgInNsYWItcHJlc3MiOiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAicmVndWxhciIsCiAgICAgICAgZmFzbHByOiAicmVndWxhciIKICAgICAgfSwKICAgICAgdGh1bWJwcmludDogewogICAgICAgICJmYS1saWdodCI6ICJsaWdodCIsCiAgICAgICAgZmF0bDogImxpZ2h0IgogICAgICB9LAogICAgICB3aGl0ZWJvYXJkOiB7CiAgICAgICAgImZhLXNlbWlib2xkIjogInNlbWlib2xkIiwKICAgICAgICBmYXdzYjogInNlbWlib2xkIgogICAgICB9LAogICAgICBub3Rkb2c6IHsKICAgICAgICAiZmEtc29saWQiOiAic29saWQiLAogICAgICAgIGZhbnM6ICJzb2xpZCIKICAgICAgfSwKICAgICAgIm5vdGRvZy1kdW8iOiB7CiAgICAgICAgImZhLXNvbGlkIjogInNvbGlkIiwKICAgICAgICBmYW5kczogInNvbGlkIgogICAgICB9LAogICAgICBldGNoOiB7CiAgICAgICAgImZhLXNvbGlkIjogInNvbGlkIiwKICAgICAgICBmYWVzOiAic29saWQiCiAgICAgIH0sCiAgICAgIGplbGx5OiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAicmVndWxhciIsCiAgICAgICAgZmFqcjogInJlZ3VsYXIiCiAgICAgIH0sCiAgICAgICJqZWxseS1maWxsIjogewogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhamZyOiAicmVndWxhciIKICAgICAgfSwKICAgICAgImplbGx5LWR1byI6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwKICAgICAgICBmYWpkcjogInJlZ3VsYXIiCiAgICAgIH0sCiAgICAgIGNoaXNlbDogewogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhY3I6ICJyZWd1bGFyIgogICAgICB9LAogICAgICB1dGlsaXR5OiB7CiAgICAgICAgImZhLXNlbWlib2xkIjogInNlbWlib2xkIiwKICAgICAgICBmYXVzYjogInNlbWlib2xkIgogICAgICB9LAogICAgICAidXRpbGl0eS1kdW8iOiB7CiAgICAgICAgImZhLXNlbWlib2xkIjogInNlbWlib2xkIiwKICAgICAgICBmYXVkc2I6ICJzZW1pYm9sZCIKICAgICAgfSwKICAgICAgInV0aWxpdHktZmlsbCI6IHsKICAgICAgICAiZmEtc2VtaWJvbGQiOiAic2VtaWJvbGQiLAogICAgICAgIGZhdWZzYjogInNlbWlib2xkIgogICAgICB9CiAgICB9LCBIMyA9IHsKICAgICAgR1JPVVA6ICJkdW90b25lLWdyb3VwIiwKICAgICAgU1dBUF9PUEFDSVRZOiAic3dhcC1vcGFjaXR5IiwKICAgICAgUFJJTUFSWTogInByaW1hcnkiLAogICAgICBTRUNPTkRBUlk6ICJzZWNvbmRhcnkiCiAgICB9LCBRID0gWyJmYS1jbGFzc2ljIiwgImZhLWR1b3RvbmUiLCAiZmEtc2hhcnAiLCAiZmEtc2hhcnAtZHVvdG9uZSIsICJmYS10aHVtYnByaW50IiwgImZhLXdoaXRlYm9hcmQiLCAiZmEtbm90ZG9nIiwgImZhLW5vdGRvZy1kdW8iLCAiZmEtY2hpc2VsIiwgImZhLWV0Y2giLCAiZmEtamVsbHkiLCAiZmEtamVsbHktZmlsbCIsICJmYS1qZWxseS1kdW8iLCAiZmEtc2xhYiIsICJmYS1zbGFiLXByZXNzIiwgImZhLXV0aWxpdHkiLCAiZmEtdXRpbGl0eS1kdW8iLCAiZmEtdXRpbGl0eS1maWxsIl07CiAgICBpMTAgPSAiY2xhc3NpYyIsIHQ4ID0gImR1b3RvbmUiLCBkNSA9ICJzaGFycCIsIGw1ID0gInNoYXJwLWR1b3RvbmUiLCBmNiA9ICJjaGlzZWwiLCBuMTIgPSAiZXRjaCIsIGg4ID0gImplbGx5IiwgbzEyID0gImplbGx5LWR1byIsIHU2ID0gImplbGx5LWZpbGwiLCBnMyA9ICJub3Rkb2ciLCBzOCA9ICJub3Rkb2ctZHVvIiwgeTQgPSAic2xhYiIsIG01ID0gInNsYWItcHJlc3MiLCBlMTAgPSAidGh1bWJwcmludCIsIHA2ID0gInV0aWxpdHkiLCBhNCA9ICJ1dGlsaXR5LWR1byIsIHcyID0gInV0aWxpdHktZmlsbCIsIHgyID0gIndoaXRlYm9hcmQiLCBiNCA9ICJDbGFzc2ljIiwgYzEwID0gIkR1b3RvbmUiLCBJMiA9ICJTaGFycCIsIEYgPSAiU2hhcnAgRHVvdG9uZSIsIHY0ID0gIkNoaXNlbCIsIFM0ID0gIkV0Y2giLCBBMiA9ICJKZWxseSIsIFAzID0gIkplbGx5IER1byIsIGozID0gIkplbGx5IEZpbGwiLCBCMiA9ICJOb3Rkb2ciLCBOMyA9ICJOb3Rkb2cgRHVvIiwgazMgPSAiU2xhYiIsIEQzID0gIlNsYWIgUHJlc3MiLCBUMiA9ICJUaHVtYnByaW50IiwgQzIgPSAiVXRpbGl0eSIsIFcgPSAiVXRpbGl0eSBEdW8iLCBLMiA9ICJVdGlsaXR5IEZpbGwiLCBSMyA9ICJXaGl0ZWJvYXJkIiwgcnQgPSBbaTEwLCB0OCwgZDUsIGw1LCBmNiwgbjEyLCBoOCwgbzEyLCB1NiwgZzMsIHM4LCB5NCwgbTUsIGUxMCwgcDYsIGE0LCB3MiwgeDJdLCBkdDIgPSAoX2R0ID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZHQsIGkxMCwgYjQpLCB0OCwgYzEwKSwgZDUsIEkyKSwgbDUsIEYpLCBmNiwgdjQpLCBuMTIsIFM0KSwgaDgsIEEyKSwgbzEyLCBQMyksIHU2LCBqMyksIGczLCBCMiksIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2R0LCBzOCwgTjMpLCB5NCwgazMpLCBtNSwgRDMpLCBlMTAsIFQyKSwgcDYsIEMyKSwgYTQsIFcpLCB3MiwgSzIpLCB4MiwgUjMpKTsKICAgIGd0ID0gewogICAgICBjbGFzc2ljOiB7CiAgICAgICAgOTAwOiAiZmFzIiwKICAgICAgICA0MDA6ICJmYXIiLAogICAgICAgIG5vcm1hbDogImZhciIsCiAgICAgICAgMzAwOiAiZmFsIiwKICAgICAgICAxMDA6ICJmYXQiCiAgICAgIH0sCiAgICAgIGR1b3RvbmU6IHsKICAgICAgICA5MDA6ICJmYWQiLAogICAgICAgIDQwMDogImZhZHIiLAogICAgICAgIDMwMDogImZhZGwiLAogICAgICAgIDEwMDogImZhZHQiCiAgICAgIH0sCiAgICAgIHNoYXJwOiB7CiAgICAgICAgOTAwOiAiZmFzcyIsCiAgICAgICAgNDAwOiAiZmFzciIsCiAgICAgICAgMzAwOiAiZmFzbCIsCiAgICAgICAgMTAwOiAiZmFzdCIKICAgICAgfSwKICAgICAgInNoYXJwLWR1b3RvbmUiOiB7CiAgICAgICAgOTAwOiAiZmFzZHMiLAogICAgICAgIDQwMDogImZhc2RyIiwKICAgICAgICAzMDA6ICJmYXNkbCIsCiAgICAgICAgMTAwOiAiZmFzZHQiCiAgICAgIH0sCiAgICAgIHNsYWI6IHsKICAgICAgICA0MDA6ICJmYXNsciIKICAgICAgfSwKICAgICAgInNsYWItcHJlc3MiOiB7CiAgICAgICAgNDAwOiAiZmFzbHByIgogICAgICB9LAogICAgICB3aGl0ZWJvYXJkOiB7CiAgICAgICAgNjAwOiAiZmF3c2IiCiAgICAgIH0sCiAgICAgIHRodW1icHJpbnQ6IHsKICAgICAgICAzMDA6ICJmYXRsIgogICAgICB9LAogICAgICBub3Rkb2c6IHsKICAgICAgICA5MDA6ICJmYW5zIgogICAgICB9LAogICAgICAibm90ZG9nLWR1byI6IHsKICAgICAgICA5MDA6ICJmYW5kcyIKICAgICAgfSwKICAgICAgZXRjaDogewogICAgICAgIDkwMDogImZhZXMiCiAgICAgIH0sCiAgICAgIGNoaXNlbDogewogICAgICAgIDQwMDogImZhY3IiCiAgICAgIH0sCiAgICAgIGplbGx5OiB7CiAgICAgICAgNDAwOiAiZmFqciIKICAgICAgfSwKICAgICAgImplbGx5LWZpbGwiOiB7CiAgICAgICAgNDAwOiAiZmFqZnIiCiAgICAgIH0sCiAgICAgICJqZWxseS1kdW8iOiB7CiAgICAgICAgNDAwOiAiZmFqZHIiCiAgICAgIH0sCiAgICAgIHV0aWxpdHk6IHsKICAgICAgICA2MDA6ICJmYXVzYiIKICAgICAgfSwKICAgICAgInV0aWxpdHktZHVvIjogewogICAgICAgIDYwMDogImZhdWRzYiIKICAgICAgfSwKICAgICAgInV0aWxpdHktZmlsbCI6IHsKICAgICAgICA2MDA6ICJmYXVmc2IiCiAgICAgIH0KICAgIH07CiAgICBDdCA9IHsKICAgICAgIkZvbnQgQXdlc29tZSA3IEZyZWUiOiB7CiAgICAgICAgOTAwOiAiZmFzIiwKICAgICAgICA0MDA6ICJmYXIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBQcm8iOiB7CiAgICAgICAgOTAwOiAiZmFzIiwKICAgICAgICA0MDA6ICJmYXIiLAogICAgICAgIG5vcm1hbDogImZhciIsCiAgICAgICAgMzAwOiAiZmFsIiwKICAgICAgICAxMDA6ICJmYXQiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBCcmFuZHMiOiB7CiAgICAgICAgNDAwOiAiZmFiIiwKICAgICAgICBub3JtYWw6ICJmYWIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBEdW90b25lIjogewogICAgICAgIDkwMDogImZhZCIsCiAgICAgICAgNDAwOiAiZmFkciIsCiAgICAgICAgbm9ybWFsOiAiZmFkciIsCiAgICAgICAgMzAwOiAiZmFkbCIsCiAgICAgICAgMTAwOiAiZmFkdCIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFNoYXJwIjogewogICAgICAgIDkwMDogImZhc3MiLAogICAgICAgIDQwMDogImZhc3IiLAogICAgICAgIG5vcm1hbDogImZhc3IiLAogICAgICAgIDMwMDogImZhc2wiLAogICAgICAgIDEwMDogImZhc3QiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBTaGFycCBEdW90b25lIjogewogICAgICAgIDkwMDogImZhc2RzIiwKICAgICAgICA0MDA6ICJmYXNkciIsCiAgICAgICAgbm9ybWFsOiAiZmFzZHIiLAogICAgICAgIDMwMDogImZhc2RsIiwKICAgICAgICAxMDA6ICJmYXNkdCIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IEplbGx5IjogewogICAgICAgIDQwMDogImZhanIiLAogICAgICAgIG5vcm1hbDogImZhanIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBKZWxseSBGaWxsIjogewogICAgICAgIDQwMDogImZhamZyIiwKICAgICAgICBub3JtYWw6ICJmYWpmciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IEplbGx5IER1byI6IHsKICAgICAgICA0MDA6ICJmYWpkciIsCiAgICAgICAgbm9ybWFsOiAiZmFqZHIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBTbGFiIjogewogICAgICAgIDQwMDogImZhc2xyIiwKICAgICAgICBub3JtYWw6ICJmYXNsciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MiOiB7CiAgICAgICAgNDAwOiAiZmFzbHByIiwKICAgICAgICBub3JtYWw6ICJmYXNscHIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBUaHVtYnByaW50IjogewogICAgICAgIDMwMDogImZhdGwiLAogICAgICAgIG5vcm1hbDogImZhdGwiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBOb3Rkb2ciOiB7CiAgICAgICAgOTAwOiAiZmFucyIsCiAgICAgICAgbm9ybWFsOiAiZmFucyIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IE5vdGRvZyBEdW8iOiB7CiAgICAgICAgOTAwOiAiZmFuZHMiLAogICAgICAgIG5vcm1hbDogImZhbmRzIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgRXRjaCI6IHsKICAgICAgICA5MDA6ICJmYWVzIiwKICAgICAgICBub3JtYWw6ICJmYWVzIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgQ2hpc2VsIjogewogICAgICAgIDQwMDogImZhY3IiLAogICAgICAgIG5vcm1hbDogImZhY3IiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBXaGl0ZWJvYXJkIjogewogICAgICAgIDYwMDogImZhd3NiIiwKICAgICAgICBub3JtYWw6ICJmYXdzYiIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFV0aWxpdHkiOiB7CiAgICAgICAgNjAwOiAiZmF1c2IiLAogICAgICAgIG5vcm1hbDogImZhdXNiIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgVXRpbGl0eSBEdW8iOiB7CiAgICAgICAgNjAwOiAiZmF1ZHNiIiwKICAgICAgICBub3JtYWw6ICJmYXVkc2IiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IEZpbGwiOiB7CiAgICAgICAgNjAwOiAiZmF1ZnNiIiwKICAgICAgICBub3JtYWw6ICJmYXVmc2IiCiAgICAgIH0KICAgIH07CiAgICBVdCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKFtbImNsYXNzaWMiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFzIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJzb2xpZCIsCiAgICAgIHN0eWxlSWRzOiBbInNvbGlkIiwgInJlZ3VsYXIiLCAibGlnaHQiLCAidGhpbiIsICJicmFuZHMiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogOTAwCiAgICB9XSwgWyJkdW90b25lIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhZCIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic29saWQiLAogICAgICBzdHlsZUlkczogWyJzb2xpZCIsICJyZWd1bGFyIiwgImxpZ2h0IiwgInRoaW4iXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogOTAwCiAgICB9XSwgWyJzaGFycCIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXNzIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJzb2xpZCIsCiAgICAgIHN0eWxlSWRzOiBbInNvbGlkIiwgInJlZ3VsYXIiLCAibGlnaHQiLCAidGhpbiJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA5MDAKICAgIH1dLCBbInNoYXJwLWR1b3RvbmUiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFzZHMiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNvbGlkIiwKICAgICAgc3R5bGVJZHM6IFsic29saWQiLCAicmVndWxhciIsICJsaWdodCIsICJ0aGluIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDkwMAogICAgfV0sIFsiY2hpc2VsIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhY3IiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInJlZ3VsYXIiLAogICAgICBzdHlsZUlkczogWyJyZWd1bGFyIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDQwMAogICAgfV0sIFsiZXRjaCIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYWVzIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJzb2xpZCIsCiAgICAgIHN0eWxlSWRzOiBbInNvbGlkIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDkwMAogICAgfV0sIFsiamVsbHkiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFqciIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAicmVndWxhciIsCiAgICAgIHN0eWxlSWRzOiBbInJlZ3VsYXIiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNDAwCiAgICB9XSwgWyJqZWxseS1kdW8iLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFqZHIiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInJlZ3VsYXIiLAogICAgICBzdHlsZUlkczogWyJyZWd1bGFyIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDQwMAogICAgfV0sIFsiamVsbHktZmlsbCIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYWpmciIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAicmVndWxhciIsCiAgICAgIHN0eWxlSWRzOiBbInJlZ3VsYXIiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNDAwCiAgICB9XSwgWyJub3Rkb2ciLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFucyIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic29saWQiLAogICAgICBzdHlsZUlkczogWyJzb2xpZCJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA5MDAKICAgIH1dLCBbIm5vdGRvZy1kdW8iLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFuZHMiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNvbGlkIiwKICAgICAgc3R5bGVJZHM6IFsic29saWQiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogOTAwCiAgICB9XSwgWyJzbGFiIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhc2xyIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJyZWd1bGFyIiwKICAgICAgc3R5bGVJZHM6IFsicmVndWxhciJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA0MDAKICAgIH1dLCBbInNsYWItcHJlc3MiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFzbHByIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJyZWd1bGFyIiwKICAgICAgc3R5bGVJZHM6IFsicmVndWxhciJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA0MDAKICAgIH1dLCBbInRodW1icHJpbnQiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmF0bCIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAibGlnaHQiLAogICAgICBzdHlsZUlkczogWyJsaWdodCJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiAzMDAKICAgIH1dLCBbInV0aWxpdHkiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmF1c2IiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNlbWlib2xkIiwKICAgICAgc3R5bGVJZHM6IFsic2VtaWJvbGQiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNjAwCiAgICB9XSwgWyJ1dGlsaXR5LWR1byIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXVkc2IiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNlbWlib2xkIiwKICAgICAgc3R5bGVJZHM6IFsic2VtaWJvbGQiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNjAwCiAgICB9XSwgWyJ1dGlsaXR5LWZpbGwiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmF1ZnNiIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJzZW1pYm9sZCIsCiAgICAgIHN0eWxlSWRzOiBbInNlbWlib2xkIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDYwMAogICAgfV0sIFsid2hpdGVib2FyZCIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXdzYiIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic2VtaWJvbGQiLAogICAgICBzdHlsZUlkczogWyJzZW1pYm9sZCJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA2MDAKICAgIH1dXSksIF90ID0gewogICAgICBjaGlzZWw6IHsKICAgICAgICByZWd1bGFyOiAiZmFjciIKICAgICAgfSwKICAgICAgY2xhc3NpYzogewogICAgICAgIGJyYW5kczogImZhYiIsCiAgICAgICAgbGlnaHQ6ICJmYWwiLAogICAgICAgIHJlZ3VsYXI6ICJmYXIiLAogICAgICAgIHNvbGlkOiAiZmFzIiwKICAgICAgICB0aGluOiAiZmF0IgogICAgICB9LAogICAgICBkdW90b25lOiB7CiAgICAgICAgbGlnaHQ6ICJmYWRsIiwKICAgICAgICByZWd1bGFyOiAiZmFkciIsCiAgICAgICAgc29saWQ6ICJmYWQiLAogICAgICAgIHRoaW46ICJmYWR0IgogICAgICB9LAogICAgICBldGNoOiB7CiAgICAgICAgc29saWQ6ICJmYWVzIgogICAgICB9LAogICAgICBqZWxseTogewogICAgICAgIHJlZ3VsYXI6ICJmYWpyIgogICAgICB9LAogICAgICAiamVsbHktZHVvIjogewogICAgICAgIHJlZ3VsYXI6ICJmYWpkciIKICAgICAgfSwKICAgICAgImplbGx5LWZpbGwiOiB7CiAgICAgICAgcmVndWxhcjogImZhamZyIgogICAgICB9LAogICAgICBub3Rkb2c6IHsKICAgICAgICBzb2xpZDogImZhbnMiCiAgICAgIH0sCiAgICAgICJub3Rkb2ctZHVvIjogewogICAgICAgIHNvbGlkOiAiZmFuZHMiCiAgICAgIH0sCiAgICAgIHNoYXJwOiB7CiAgICAgICAgbGlnaHQ6ICJmYXNsIiwKICAgICAgICByZWd1bGFyOiAiZmFzciIsCiAgICAgICAgc29saWQ6ICJmYXNzIiwKICAgICAgICB0aGluOiAiZmFzdCIKICAgICAgfSwKICAgICAgInNoYXJwLWR1b3RvbmUiOiB7CiAgICAgICAgbGlnaHQ6ICJmYXNkbCIsCiAgICAgICAgcmVndWxhcjogImZhc2RyIiwKICAgICAgICBzb2xpZDogImZhc2RzIiwKICAgICAgICB0aGluOiAiZmFzZHQiCiAgICAgIH0sCiAgICAgIHNsYWI6IHsKICAgICAgICByZWd1bGFyOiAiZmFzbHIiCiAgICAgIH0sCiAgICAgICJzbGFiLXByZXNzIjogewogICAgICAgIHJlZ3VsYXI6ICJmYXNscHIiCiAgICAgIH0sCiAgICAgIHRodW1icHJpbnQ6IHsKICAgICAgICBsaWdodDogImZhdGwiCiAgICAgIH0sCiAgICAgIHV0aWxpdHk6IHsKICAgICAgICBzZW1pYm9sZDogImZhdXNiIgogICAgICB9LAogICAgICAidXRpbGl0eS1kdW8iOiB7CiAgICAgICAgc2VtaWJvbGQ6ICJmYXVkc2IiCiAgICAgIH0sCiAgICAgICJ1dGlsaXR5LWZpbGwiOiB7CiAgICAgICAgc2VtaWJvbGQ6ICJmYXVmc2IiCiAgICAgIH0sCiAgICAgIHdoaXRlYm9hcmQ6IHsKICAgICAgICBzZW1pYm9sZDogImZhd3NiIgogICAgICB9CiAgICB9OwogICAgWXQgPSBbImZhayIsICJmYS1raXQiLCAiZmFrZCIsICJmYS1raXQtZHVvdG9uZSJdLCBxdCA9IHsKICAgICAga2l0OiB7CiAgICAgICAgZmFrOiAia2l0IiwKICAgICAgICAiZmEta2l0IjogImtpdCIKICAgICAgfSwKICAgICAgImtpdC1kdW90b25lIjogewogICAgICAgIGZha2Q6ICJraXQtZHVvdG9uZSIsCiAgICAgICAgImZhLWtpdC1kdW90b25lIjogImtpdC1kdW90b25lIgogICAgICB9CiAgICB9LCBIdCA9IFsia2l0Il07CiAgICBMMiA9ICJraXQiLCByMTAgPSAia2l0LWR1b3RvbmUiLCBVID0gIktpdCIsIEogPSAiS2l0IER1b3RvbmUiLCAkdCA9IF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIEwyLCBVKSwgcjEwLCBKKTsKICAgIG9sID0gewogICAgICBraXQ6IHsKICAgICAgICAiZmEta2l0IjogImZhayIKICAgICAgfSwKICAgICAgImtpdC1kdW90b25lIjogewogICAgICAgICJmYS1raXQtZHVvdG9uZSI6ICJmYWtkIgogICAgICB9CiAgICB9OwogICAgZGwgPSB7CiAgICAgICJGb250IEF3ZXNvbWUgS2l0IjogewogICAgICAgIDQwMDogImZhayIsCiAgICAgICAgbm9ybWFsOiAiZmFrIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIEtpdCBEdW90b25lIjogewogICAgICAgIDQwMDogImZha2QiLAogICAgICAgIG5vcm1hbDogImZha2QiCiAgICAgIH0KICAgIH0sIGZsID0gewogICAgICBraXQ6IHsKICAgICAgICBmYWs6ICJmYS1raXQiCiAgICAgIH0sCiAgICAgICJraXQtZHVvdG9uZSI6IHsKICAgICAgICBmYWtkOiAiZmEta2l0LWR1b3RvbmUiCiAgICAgIH0KICAgIH07CiAgICB1bCA9IHsKICAgICAga2l0OiB7CiAgICAgICAga2l0OiAiZmFrIgogICAgICB9LAogICAgICAia2l0LWR1b3RvbmUiOiB7CiAgICAgICAgImtpdC1kdW90b25lIjogImZha2QiCiAgICAgIH0KICAgIH07CiAgICBsJDEgPSB7CiAgICAgIEdST1VQOiAiZHVvdG9uZS1ncm91cCIsCiAgICAgIFNXQVBfT1BBQ0lUWTogInN3YXAtb3BhY2l0eSIsCiAgICAgIFBSSU1BUlk6ICJwcmltYXJ5IiwKICAgICAgU0VDT05EQVJZOiAic2Vjb25kYXJ5IgogICAgfSwgZiQxID0gWyJmYS1jbGFzc2ljIiwgImZhLWR1b3RvbmUiLCAiZmEtc2hhcnAiLCAiZmEtc2hhcnAtZHVvdG9uZSIsICJmYS10aHVtYnByaW50IiwgImZhLXdoaXRlYm9hcmQiLCAiZmEtbm90ZG9nIiwgImZhLW5vdGRvZy1kdW8iLCAiZmEtY2hpc2VsIiwgImZhLWV0Y2giLCAiZmEtamVsbHkiLCAiZmEtamVsbHktZmlsbCIsICJmYS1qZWxseS1kdW8iLCAiZmEtc2xhYiIsICJmYS1zbGFiLXByZXNzIiwgImZhLXV0aWxpdHkiLCAiZmEtdXRpbGl0eS1kdW8iLCAiZmEtdXRpbGl0eS1maWxsIl07CiAgICBuJDEgPSAiY2xhc3NpYyIsIG8kMSA9ICJkdW90b25lIiwgdSQxID0gInNoYXJwIiwgcyQxID0gInNoYXJwLWR1b3RvbmUiLCBoJDEgPSAiY2hpc2VsIiwgZyQxID0gImV0Y2giLCB5JDEgPSAiamVsbHkiLCBlJDEgPSAiamVsbHktZHVvIiwgbSQxID0gImplbGx5LWZpbGwiLCBwJDEgPSAibm90ZG9nIiwgYSQxID0gIm5vdGRvZy1kdW8iLCB3JDEgPSAic2xhYiIsIGIkMSA9ICJzbGFiLXByZXNzIiwgciQxID0gInRodW1icHJpbnQiLCBjJDEgPSAidXRpbGl0eSIsIGkkMSA9ICJ1dGlsaXR5LWR1byIsIHgkMSA9ICJ1dGlsaXR5LWZpbGwiLCBJJDEgPSAid2hpdGVib2FyZCIsIEYkMSA9ICJDbGFzc2ljIiwgdiQxID0gIkR1b3RvbmUiLCBTJDEgPSAiU2hhcnAiLCBBJDEgPSAiU2hhcnAgRHVvdG9uZSIsIFAkMSA9ICJDaGlzZWwiLCBqJDEgPSAiRXRjaCIsIEIkMSA9ICJKZWxseSIsIE4kMSA9ICJKZWxseSBEdW8iLCBrJDEgPSAiSmVsbHkgRmlsbCIsIEQkMSA9ICJOb3Rkb2ciLCBDJDEgPSAiTm90ZG9nIER1byIsIFQkMSA9ICJTbGFiIiwgTCQxID0gIlNsYWIgUHJlc3MiLCBXJDEgPSAiVGh1bWJwcmludCIsIFIkMSA9ICJVdGlsaXR5IiwgSyQxID0gIlV0aWxpdHkgRHVvIiwgVSQxID0gIlV0aWxpdHkgRmlsbCIsIEokMSA9ICJXaGl0ZWJvYXJkIiwgbWwkMSA9IChfbWwgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9tbCwgbiQxLCBGJDEpLCBvJDEsIHYkMSksIHUkMSwgUyQxKSwgcyQxLCBBJDEpLCBoJDEsIFAkMSksIGckMSwgaiQxKSwgeSQxLCBCJDEpLCBlJDEsIE4kMSksIG0kMSwgayQxKSwgcCQxLCBEJDEpLCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9tbCwgYSQxLCBDJDEpLCB3JDEsIFQkMSksIGIkMSwgTCQxKSwgciQxLCBXJDEpLCBjJDEsIFIkMSksIGkkMSwgSyQxKSwgeCQxLCBVJDEpLCBJJDEsIEokMSkpOwogICAgRSQxID0gImtpdCIsIGQkMSA9ICJraXQtZHVvdG9uZSIsIF8kMSA9ICJLaXQiLCBNJDEgPSAiS2l0IER1b3RvbmUiLCBydCQxID0gX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgRSQxLCBfJDEpLCBkJDEsIE0kMSk7CiAgICAkdCQxID0gewogICAgICBjbGFzc2ljOiB7CiAgICAgICAgImZhLWJyYW5kcyI6ICJmYWIiLAogICAgICAgICJmYS1kdW90b25lIjogImZhZCIsCiAgICAgICAgImZhLWxpZ2h0IjogImZhbCIsCiAgICAgICAgImZhLXJlZ3VsYXIiOiAiZmFyIiwKICAgICAgICAiZmEtc29saWQiOiAiZmFzIiwKICAgICAgICAiZmEtdGhpbiI6ICJmYXQiCiAgICAgIH0sCiAgICAgIGR1b3RvbmU6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJmYWRyIiwKICAgICAgICAiZmEtbGlnaHQiOiAiZmFkbCIsCiAgICAgICAgImZhLXRoaW4iOiAiZmFkdCIKICAgICAgfSwKICAgICAgc2hhcnA6IHsKICAgICAgICAiZmEtc29saWQiOiAiZmFzcyIsCiAgICAgICAgImZhLXJlZ3VsYXIiOiAiZmFzciIsCiAgICAgICAgImZhLWxpZ2h0IjogImZhc2wiLAogICAgICAgICJmYS10aGluIjogImZhc3QiCiAgICAgIH0sCiAgICAgICJzaGFycC1kdW90b25lIjogewogICAgICAgICJmYS1zb2xpZCI6ICJmYXNkcyIsCiAgICAgICAgImZhLXJlZ3VsYXIiOiAiZmFzZHIiLAogICAgICAgICJmYS1saWdodCI6ICJmYXNkbCIsCiAgICAgICAgImZhLXRoaW4iOiAiZmFzZHQiCiAgICAgIH0sCiAgICAgIHNsYWI6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJmYXNsciIKICAgICAgfSwKICAgICAgInNsYWItcHJlc3MiOiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAiZmFzbHByIgogICAgICB9LAogICAgICB3aGl0ZWJvYXJkOiB7CiAgICAgICAgImZhLXNlbWlib2xkIjogImZhd3NiIgogICAgICB9LAogICAgICB0aHVtYnByaW50OiB7CiAgICAgICAgImZhLWxpZ2h0IjogImZhdGwiCiAgICAgIH0sCiAgICAgIG5vdGRvZzogewogICAgICAgICJmYS1zb2xpZCI6ICJmYW5zIgogICAgICB9LAogICAgICAibm90ZG9nLWR1byI6IHsKICAgICAgICAiZmEtc29saWQiOiAiZmFuZHMiCiAgICAgIH0sCiAgICAgIGV0Y2g6IHsKICAgICAgICAiZmEtc29saWQiOiAiZmFlcyIKICAgICAgfSwKICAgICAgamVsbHk6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJmYWpyIgogICAgICB9LAogICAgICAiamVsbHktZmlsbCI6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJmYWpmciIKICAgICAgfSwKICAgICAgImplbGx5LWR1byI6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJmYWpkciIKICAgICAgfSwKICAgICAgY2hpc2VsOiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAiZmFjciIKICAgICAgfSwKICAgICAgdXRpbGl0eTogewogICAgICAgICJmYS1zZW1pYm9sZCI6ICJmYXVzYiIKICAgICAgfSwKICAgICAgInV0aWxpdHktZHVvIjogewogICAgICAgICJmYS1zZW1pYm9sZCI6ICJmYXVkc2IiCiAgICAgIH0sCiAgICAgICJ1dGlsaXR5LWZpbGwiOiB7CiAgICAgICAgImZhLXNlbWlib2xkIjogImZhdWZzYiIKICAgICAgfQogICAgfSwgejIgPSB7CiAgICAgIGNsYXNzaWM6IFsiZmFzIiwgImZhciIsICJmYWwiLCAiZmF0IiwgImZhZCJdLAogICAgICBkdW90b25lOiBbImZhZHIiLCAiZmFkbCIsICJmYWR0Il0sCiAgICAgIHNoYXJwOiBbImZhc3MiLCAiZmFzciIsICJmYXNsIiwgImZhc3QiXSwKICAgICAgInNoYXJwLWR1b3RvbmUiOiBbImZhc2RzIiwgImZhc2RyIiwgImZhc2RsIiwgImZhc2R0Il0sCiAgICAgIHNsYWI6IFsiZmFzbHIiXSwKICAgICAgInNsYWItcHJlc3MiOiBbImZhc2xwciJdLAogICAgICB3aGl0ZWJvYXJkOiBbImZhd3NiIl0sCiAgICAgIHRodW1icHJpbnQ6IFsiZmF0bCJdLAogICAgICBub3Rkb2c6IFsiZmFucyJdLAogICAgICAibm90ZG9nLWR1byI6IFsiZmFuZHMiXSwKICAgICAgZXRjaDogWyJmYWVzIl0sCiAgICAgIGplbGx5OiBbImZhanIiXSwKICAgICAgImplbGx5LWZpbGwiOiBbImZhamZyIl0sCiAgICAgICJqZWxseS1kdW8iOiBbImZhamRyIl0sCiAgICAgIGNoaXNlbDogWyJmYWNyIl0sCiAgICAgIHV0aWxpdHk6IFsiZmF1c2IiXSwKICAgICAgInV0aWxpdHktZHVvIjogWyJmYXVkc2IiXSwKICAgICAgInV0aWxpdHktZmlsbCI6IFsiZmF1ZnNiIl0KICAgIH0sIEh0JDEgPSB7CiAgICAgIGNsYXNzaWM6IHsKICAgICAgICBmYWI6ICJmYS1icmFuZHMiLAogICAgICAgIGZhZDogImZhLWR1b3RvbmUiLAogICAgICAgIGZhbDogImZhLWxpZ2h0IiwKICAgICAgICBmYXI6ICJmYS1yZWd1bGFyIiwKICAgICAgICBmYXM6ICJmYS1zb2xpZCIsCiAgICAgICAgZmF0OiAiZmEtdGhpbiIKICAgICAgfSwKICAgICAgZHVvdG9uZTogewogICAgICAgIGZhZHI6ICJmYS1yZWd1bGFyIiwKICAgICAgICBmYWRsOiAiZmEtbGlnaHQiLAogICAgICAgIGZhZHQ6ICJmYS10aGluIgogICAgICB9LAogICAgICBzaGFycDogewogICAgICAgIGZhc3M6ICJmYS1zb2xpZCIsCiAgICAgICAgZmFzcjogImZhLXJlZ3VsYXIiLAogICAgICAgIGZhc2w6ICJmYS1saWdodCIsCiAgICAgICAgZmFzdDogImZhLXRoaW4iCiAgICAgIH0sCiAgICAgICJzaGFycC1kdW90b25lIjogewogICAgICAgIGZhc2RzOiAiZmEtc29saWQiLAogICAgICAgIGZhc2RyOiAiZmEtcmVndWxhciIsCiAgICAgICAgZmFzZGw6ICJmYS1saWdodCIsCiAgICAgICAgZmFzZHQ6ICJmYS10aGluIgogICAgICB9LAogICAgICBzbGFiOiB7CiAgICAgICAgZmFzbHI6ICJmYS1yZWd1bGFyIgogICAgICB9LAogICAgICAic2xhYi1wcmVzcyI6IHsKICAgICAgICBmYXNscHI6ICJmYS1yZWd1bGFyIgogICAgICB9LAogICAgICB3aGl0ZWJvYXJkOiB7CiAgICAgICAgZmF3c2I6ICJmYS1zZW1pYm9sZCIKICAgICAgfSwKICAgICAgdGh1bWJwcmludDogewogICAgICAgIGZhdGw6ICJmYS1saWdodCIKICAgICAgfSwKICAgICAgbm90ZG9nOiB7CiAgICAgICAgZmFuczogImZhLXNvbGlkIgogICAgICB9LAogICAgICAibm90ZG9nLWR1byI6IHsKICAgICAgICBmYW5kczogImZhLXNvbGlkIgogICAgICB9LAogICAgICBldGNoOiB7CiAgICAgICAgZmFlczogImZhLXNvbGlkIgogICAgICB9LAogICAgICBqZWxseTogewogICAgICAgIGZhanI6ICJmYS1yZWd1bGFyIgogICAgICB9LAogICAgICAiamVsbHktZmlsbCI6IHsKICAgICAgICBmYWpmcjogImZhLXJlZ3VsYXIiCiAgICAgIH0sCiAgICAgICJqZWxseS1kdW8iOiB7CiAgICAgICAgZmFqZHI6ICJmYS1yZWd1bGFyIgogICAgICB9LAogICAgICBjaGlzZWw6IHsKICAgICAgICBmYWNyOiAiZmEtcmVndWxhciIKICAgICAgfSwKICAgICAgdXRpbGl0eTogewogICAgICAgIGZhdXNiOiAiZmEtc2VtaWJvbGQiCiAgICAgIH0sCiAgICAgICJ1dGlsaXR5LWR1byI6IHsKICAgICAgICBmYXVkc2I6ICJmYS1zZW1pYm9sZCIKICAgICAgfSwKICAgICAgInV0aWxpdHktZmlsbCI6IHsKICAgICAgICBmYXVmc2I6ICJmYS1zZW1pYm9sZCIKICAgICAgfQogICAgfSwgWSQxID0gWyJmYS1zb2xpZCIsICJmYS1yZWd1bGFyIiwgImZhLWxpZ2h0IiwgImZhLXRoaW4iLCAiZmEtZHVvdG9uZSIsICJmYS1icmFuZHMiLCAiZmEtc2VtaWJvbGQiXSwgWnQkMSA9IFsiZmEiLCAiZmFzIiwgImZhciIsICJmYWwiLCAiZmF0IiwgImZhZCIsICJmYWRyIiwgImZhZGwiLCAiZmFkdCIsICJmYWIiLCAiZmFzcyIsICJmYXNyIiwgImZhc2wiLCAiZmFzdCIsICJmYXNkcyIsICJmYXNkciIsICJmYXNkbCIsICJmYXNkdCIsICJmYXNsciIsICJmYXNscHIiLCAiZmF3c2IiLCAiZmF0bCIsICJmYW5zIiwgImZhbmRzIiwgImZhZXMiLCAiZmFqciIsICJmYWpmciIsICJmYWpkciIsICJmYWNyIiwgImZhdXNiIiwgImZhdWRzYiIsICJmYXVmc2IiXS5jb25jYXQoZiQxLCBZJDEpLCBHJDEgPSBbInNvbGlkIiwgInJlZ3VsYXIiLCAibGlnaHQiLCAidGhpbiIsICJkdW90b25lIiwgImJyYW5kcyIsICJzZW1pYm9sZCJdLCBPJDEgPSBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdLCBWJDEgPSBPJDEuY29uY2F0KFsxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMF0pLCAkJDEgPSBbImF3IiwgImZ3IiwgInB1bGwtbGVmdCIsICJwdWxsLXJpZ2h0Il0sIHRvID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShPYmplY3Qua2V5cyh6MikpLCBHJDEsICQkMSwgWyIyeHMiLCAieHMiLCAic20iLCAibGciLCAieGwiLCAiMnhsIiwgImJlYXQiLCAiYm9yZGVyIiwgImZhZGUiLCAiYmVhdC1mYWRlIiwgImJvdW5jZSIsICJmbGlwLWJvdGgiLCAiZmxpcC1ob3Jpem9udGFsIiwgImZsaXAtdmVydGljYWwiLCAiZmxpcCIsICJpbnZlcnNlIiwgImxheWVycyIsICJsYXllcnMtYm90dG9tLWxlZnQiLCAibGF5ZXJzLWJvdHRvbS1yaWdodCIsICJsYXllcnMtY291bnRlciIsICJsYXllcnMtdGV4dCIsICJsYXllcnMtdG9wLWxlZnQiLCAibGF5ZXJzLXRvcC1yaWdodCIsICJsaSIsICJwdWxsLWVuZCIsICJwdWxsLXN0YXJ0IiwgInB1bHNlIiwgInJvdGF0ZS0xODAiLCAicm90YXRlLTI3MCIsICJyb3RhdGUtOTAiLCAicm90YXRlLWJ5IiwgInNoYWtlIiwgInNwaW4tcHVsc2UiLCAic3Bpbi1yZXZlcnNlIiwgInNwaW4iLCAic3RhY2stMXgiLCAic3RhY2stMngiLCAic3RhY2siLCAidWwiLCAid2lkdGgtYXV0byIsICJ3aWR0aC1maXhlZCIsIGwkMS5HUk9VUCwgbCQxLlNXQVBfT1BBQ0lUWSwgbCQxLlBSSU1BUlksIGwkMS5TRUNPTkRBUlldKS5jb25jYXQoTyQxLm1hcChmdW5jdGlvbih0OSkgewogICAgICByZXR1cm4gIiIuY29uY2F0KHQ5LCAieCIpOwogICAgfSkpLmNvbmNhdChWJDEubWFwKGZ1bmN0aW9uKHQ5KSB7CiAgICAgIHJldHVybiAidy0iLmNvbmNhdCh0OSk7CiAgICB9KSk7CiAgICBybyA9IHsKICAgICAgIkZvbnQgQXdlc29tZSA1IEZyZWUiOiB7CiAgICAgICAgOTAwOiAiZmFzIiwKICAgICAgICA0MDA6ICJmYXIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNSBQcm8iOiB7CiAgICAgICAgOTAwOiAiZmFzIiwKICAgICAgICA0MDA6ICJmYXIiLAogICAgICAgIG5vcm1hbDogImZhciIsCiAgICAgICAgMzAwOiAiZmFsIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDUgQnJhbmRzIjogewogICAgICAgIDQwMDogImZhYiIsCiAgICAgICAgbm9ybWFsOiAiZmFiIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDUgRHVvdG9uZSI6IHsKICAgICAgICA5MDA6ICJmYWQiCiAgICAgIH0KICAgIH07CiAgICBOQU1FU1BBQ0VfSURFTlRJRklFUiA9ICJfX19GT05UX0FXRVNPTUVfX18iOwogICAgVU5JVFNfSU5fR1JJRCA9IDE2OwogICAgREVGQVVMVF9DU1NfUFJFRklYID0gImZhIjsKICAgIERFRkFVTFRfUkVQTEFDRU1FTlRfQ0xBU1MgPSAic3ZnLWlubGluZS0tZmEiOwogICAgREFUQV9GQV9JMlNWRyA9ICJkYXRhLWZhLWkyc3ZnIjsKICAgIERBVEFfRkFfUFNFVURPX0VMRU1FTlQgPSAiZGF0YS1mYS1wc2V1ZG8tZWxlbWVudCI7CiAgICBEQVRBX0ZBX1BTRVVET19FTEVNRU5UX1BFTkRJTkcgPSAiZGF0YS1mYS1wc2V1ZG8tZWxlbWVudC1wZW5kaW5nIjsKICAgIERBVEFfUFJFRklYID0gImRhdGEtcHJlZml4IjsKICAgIERBVEFfSUNPTiA9ICJkYXRhLWljb24iOwogICAgSFRNTF9DTEFTU19JMlNWR19CQVNFX0NMQVNTID0gImZvbnRhd2Vzb21lLWkyc3ZnIjsKICAgIE1VVEFUSU9OX0FQUFJPQUNIX0FTWU5DID0gImFzeW5jIjsKICAgIFRBR05BTUVTX1RPX1NLSVBfRk9SX1BTRVVET0VMRU1FTlRTID0gWyJIVE1MIiwgIkhFQUQiLCAiU1RZTEUiLCAiU0NSSVBUIl07CiAgICBQU0VVRE9fRUxFTUVOVFMgPSBbIjo6YmVmb3JlIiwgIjo6YWZ0ZXIiLCAiOmJlZm9yZSIsICI6YWZ0ZXIiXTsKICAgIFBST0RVQ1RJT04gPSAoZnVuY3Rpb24oKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9IGNhdGNoIChlJCQxKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9KSgpOwogICAgX1BSRUZJWF9UT19TVFlMRSA9IF9vYmplY3RTcHJlYWQyKHt9LCBxKTsKICAgIF9QUkVGSVhfVE9fU1RZTEVbaTEwXSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCB7CiAgICAgICJmYS1kdW90b25lIjogImR1b3RvbmUiCiAgICB9KSwgcVtpMTBdKSwgcXRbImtpdCJdKSwgcXRbImtpdC1kdW90b25lIl0pOwogICAgUFJFRklYX1RPX1NUWUxFID0gZmFtaWx5UHJveHkoX1BSRUZJWF9UT19TVFlMRSk7CiAgICBfU1RZTEVfVE9fUFJFRklYID0gX29iamVjdFNwcmVhZDIoe30sIF90KTsKICAgIF9TVFlMRV9UT19QUkVGSVhbaTEwXSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCB7CiAgICAgIGR1b3RvbmU6ICJmYWQiCiAgICB9KSwgX1NUWUxFX1RPX1BSRUZJWFtpMTBdKSwgdWxbImtpdCJdKSwgdWxbImtpdC1kdW90b25lIl0pOwogICAgU1RZTEVfVE9fUFJFRklYID0gZmFtaWx5UHJveHkoX1NUWUxFX1RPX1BSRUZJWCk7CiAgICBfUFJFRklYX1RPX0xPTkdfU1RZTEUgPSBfb2JqZWN0U3ByZWFkMih7fSwgSHQkMSk7CiAgICBfUFJFRklYX1RPX0xPTkdfU1RZTEVbaTEwXSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBfUFJFRklYX1RPX0xPTkdfU1RZTEVbaTEwXSksIGZsWyJraXQiXSk7CiAgICBQUkVGSVhfVE9fTE9OR19TVFlMRSA9IGZhbWlseVByb3h5KF9QUkVGSVhfVE9fTE9OR19TVFlMRSk7CiAgICBfTE9OR19TVFlMRV9UT19QUkVGSVggPSBfb2JqZWN0U3ByZWFkMih7fSwgJHQkMSk7CiAgICBfTE9OR19TVFlMRV9UT19QUkVGSVhbaTEwXSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBfTE9OR19TVFlMRV9UT19QUkVGSVhbaTEwXSksIG9sWyJraXQiXSk7CiAgICBMT05HX1NUWUxFX1RPX1BSRUZJWCA9IGZhbWlseVByb3h5KF9MT05HX1NUWUxFX1RPX1BSRUZJWCk7CiAgICBJQ09OX1NFTEVDVElPTl9TWU5UQVhfUEFUVEVSTiA9IEUyOwogICAgTEFZRVJTX1RFWFRfQ0xBU1NOQU1FID0gImZhLWxheWVycy10ZXh0IjsKICAgIEZPTlRfRkFNSUxZX1BBVFRFUk4gPSBfMzsKICAgIF9GT05UX1dFSUdIVF9UT19QUkVGSVggPSBfb2JqZWN0U3ByZWFkMih7fSwgZ3QpOwogICAgRk9OVF9XRUlHSFRfVE9fUFJFRklYID0gZmFtaWx5UHJveHkoX0ZPTlRfV0VJR0hUX1RPX1BSRUZJWCk7CiAgICBBVFRSSUJVVEVTX1dBVENIRURfRk9SX01VVEFUSU9OID0gWyJjbGFzcyIsICJkYXRhLXByZWZpeCIsICJkYXRhLWljb24iLCAiZGF0YS1mYS10cmFuc2Zvcm0iLCAiZGF0YS1mYS1tYXNrIl07CiAgICBEVU9UT05FX0NMQVNTRVMgPSBIMzsKICAgIFJFU0VSVkVEX0NMQVNTRVMgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KEh0KSwgX3RvQ29uc3VtYWJsZUFycmF5KHRvKSk7CiAgICBpbml0aWFsID0gV0lORE9XLkZvbnRBd2Vzb21lQ29uZmlnIHx8IHt9OwogICAgaWYgKERPQ1VNRU5UICYmIHR5cGVvZiBET0NVTUVOVC5xdWVyeVNlbGVjdG9yID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGF0dHJzID0gW1siZGF0YS1mYW1pbHktcHJlZml4IiwgImZhbWlseVByZWZpeCJdLCBbImRhdGEtY3NzLXByZWZpeCIsICJjc3NQcmVmaXgiXSwgWyJkYXRhLWZhbWlseS1kZWZhdWx0IiwgImZhbWlseURlZmF1bHQiXSwgWyJkYXRhLXN0eWxlLWRlZmF1bHQiLCAic3R5bGVEZWZhdWx0Il0sIFsiZGF0YS1yZXBsYWNlbWVudC1jbGFzcyIsICJyZXBsYWNlbWVudENsYXNzIl0sIFsiZGF0YS1hdXRvLXJlcGxhY2Utc3ZnIiwgImF1dG9SZXBsYWNlU3ZnIl0sIFsiZGF0YS1hdXRvLWFkZC1jc3MiLCAiYXV0b0FkZENzcyJdLCBbImRhdGEtc2VhcmNoLXBzZXVkby1lbGVtZW50cyIsICJzZWFyY2hQc2V1ZG9FbGVtZW50cyJdLCBbImRhdGEtc2VhcmNoLXBzZXVkby1lbGVtZW50cy13YXJuaW5ncyIsICJzZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzIl0sIFsiZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLWZ1bGwtc2NhbiIsICJzZWFyY2hQc2V1ZG9FbGVtZW50c0Z1bGxTY2FuIl0sIFsiZGF0YS1vYnNlcnZlLW11dGF0aW9ucyIsICJvYnNlcnZlTXV0YXRpb25zIl0sIFsiZGF0YS1tdXRhdGUtYXBwcm9hY2giLCAibXV0YXRlQXBwcm9hY2giXSwgWyJkYXRhLWtlZXAtb3JpZ2luYWwtc291cmNlIiwgImtlZXBPcmlnaW5hbFNvdXJjZSJdLCBbImRhdGEtbWVhc3VyZS1wZXJmb3JtYW5jZSIsICJtZWFzdXJlUGVyZm9ybWFuY2UiXSwgWyJkYXRhLXNob3ctbWlzc2luZy1pY29ucyIsICJzaG93TWlzc2luZ0ljb25zIl1dOwogICAgICBhdHRycy5mb3JFYWNoKGZ1bmN0aW9uKF9yZWYyKSB7CiAgICAgICAgdmFyIF9yZWYyMiA9IF9zbGljZWRUb0FycmF5KF9yZWYyLCAyKSwgYXR0ciA9IF9yZWYyMlswXSwga2V5MiA9IF9yZWYyMlsxXTsKICAgICAgICB2YXIgdmFsID0gY29lcmNlKGdldEF0dHJDb25maWcoYXR0cikpOwogICAgICAgIGlmICh2YWwgIT09IHZvaWQgMCAmJiB2YWwgIT09IG51bGwpIHsKICAgICAgICAgIGluaXRpYWxba2V5Ml0gPSB2YWw7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIF9kZWZhdWx0ID0gewogICAgICBzdHlsZURlZmF1bHQ6ICJzb2xpZCIsCiAgICAgIGZhbWlseURlZmF1bHQ6IGkxMCwKICAgICAgY3NzUHJlZml4OiBERUZBVUxUX0NTU19QUkVGSVgsCiAgICAgIHJlcGxhY2VtZW50Q2xhc3M6IERFRkFVTFRfUkVQTEFDRU1FTlRfQ0xBU1MsCiAgICAgIGF1dG9SZXBsYWNlU3ZnOiB0cnVlLAogICAgICBhdXRvQWRkQ3NzOiB0cnVlLAogICAgICBzZWFyY2hQc2V1ZG9FbGVtZW50czogZmFsc2UsCiAgICAgIHNlYXJjaFBzZXVkb0VsZW1lbnRzV2FybmluZ3M6IHRydWUsCiAgICAgIHNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW46IGZhbHNlLAogICAgICBvYnNlcnZlTXV0YXRpb25zOiB0cnVlLAogICAgICBtdXRhdGVBcHByb2FjaDogImFzeW5jIiwKICAgICAga2VlcE9yaWdpbmFsU291cmNlOiB0cnVlLAogICAgICBtZWFzdXJlUGVyZm9ybWFuY2U6IGZhbHNlLAogICAgICBzaG93TWlzc2luZ0ljb25zOiB0cnVlCiAgICB9OwogICAgaWYgKGluaXRpYWwuZmFtaWx5UHJlZml4KSB7CiAgICAgIGluaXRpYWwuY3NzUHJlZml4ID0gaW5pdGlhbC5mYW1pbHlQcmVmaXg7CiAgICB9CiAgICBfY29uZmlnID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIF9kZWZhdWx0KSwgaW5pdGlhbCk7CiAgICBpZiAoIV9jb25maWcuYXV0b1JlcGxhY2VTdmcpIF9jb25maWcub2JzZXJ2ZU11dGF0aW9ucyA9IGZhbHNlOwogICAgY29uZmlnMiA9IHt9OwogICAgT2JqZWN0LmtleXMoX2RlZmF1bHQpLmZvckVhY2goZnVuY3Rpb24oa2V5MikgewogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uZmlnMiwga2V5MiwgewogICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQzKHZhbCkgewogICAgICAgICAgX2NvbmZpZ1trZXkyXSA9IHZhbDsKICAgICAgICAgIF9vbkNoYW5nZUNiLmZvckVhY2goZnVuY3Rpb24oY2IpIHsKICAgICAgICAgICAgcmV0dXJuIGNiKGNvbmZpZzIpOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldDIoKSB7CiAgICAgICAgICByZXR1cm4gX2NvbmZpZ1trZXkyXTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uZmlnMiwgImZhbWlseVByZWZpeCIsIHsKICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgc2V0OiBmdW5jdGlvbiBzZXQyKHZhbCkgewogICAgICAgIF9jb25maWcuY3NzUHJlZml4ID0gdmFsOwogICAgICAgIF9vbkNoYW5nZUNiLmZvckVhY2goZnVuY3Rpb24oY2IpIHsKICAgICAgICAgIHJldHVybiBjYihjb25maWcyKTsKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgcmV0dXJuIF9jb25maWcuY3NzUHJlZml4OwogICAgICB9CiAgICB9KTsKICAgIFdJTkRPVy5Gb250QXdlc29tZUNvbmZpZyA9IGNvbmZpZzI7CiAgICBfb25DaGFuZ2VDYiA9IFtdOwogICAgZCQyID0gVU5JVFNfSU5fR1JJRDsKICAgIG1lYW5pbmdsZXNzVHJhbnNmb3JtID0gewogICAgICBzaXplOiAxNiwKICAgICAgeDogMCwKICAgICAgeTogMCwKICAgICAgcm90YXRlOiAwLAogICAgICBmbGlwWDogZmFsc2UsCiAgICAgIGZsaXBZOiBmYWxzZQogICAgfTsKICAgIGlkUG9vbCA9ICIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7CiAgICBiYXNlU3R5bGVzID0gYDpyb290LCA6aG9zdCB7CiAgLS1mYS1mb250LXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBGcmVlIjsKICAtLWZhLWZvbnQtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgRnJlZSI7CiAgLS1mYS1mb250LWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBQcm8iOwogIC0tZmEtZm9udC10aGluOiBub3JtYWwgMTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBQcm8iOwogIC0tZmEtZm9udC1kdW90b25lOiBub3JtYWwgOTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBEdW90b25lIjsKICAtLWZhLWZvbnQtZHVvdG9uZS1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBEdW90b25lIjsKICAtLWZhLWZvbnQtZHVvdG9uZS1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgRHVvdG9uZSI7CiAgLS1mYS1mb250LWR1b3RvbmUtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgRHVvdG9uZSI7CiAgLS1mYS1mb250LWJyYW5kczogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgQnJhbmRzIjsKICAtLWZhLWZvbnQtc2hhcnAtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNoYXJwIjsKICAtLWZhLWZvbnQtc2hhcnAtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgU2hhcnAiOwogIC0tZmEtZm9udC1zaGFycC1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgU2hhcnAiOwogIC0tZmEtZm9udC1zaGFycC10aGluOiBub3JtYWwgMTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTaGFycCI7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUiOwogIC0tZmEtZm9udC1zaGFycC1kdW90b25lLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUiOwogIC0tZmEtZm9udC1zaGFycC1kdW90b25lLWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTaGFycCBEdW90b25lIjsKICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS10aGluOiBub3JtYWwgMTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTaGFycCBEdW90b25lIjsKICAtLWZhLWZvbnQtc2xhYi1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTbGFiIjsKICAtLWZhLWZvbnQtc2xhYi1wcmVzcy1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTbGFiIFByZXNzIjsKICAtLWZhLWZvbnQtd2hpdGVib2FyZC1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgV2hpdGVib2FyZCI7CiAgLS1mYS1mb250LXRodW1icHJpbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFRodW1icHJpbnQiOwogIC0tZmEtZm9udC1ub3Rkb2ctc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IE5vdGRvZyI7CiAgLS1mYS1mb250LW5vdGRvZy1kdW8tc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IE5vdGRvZyBEdW8iOwogIC0tZmEtZm9udC1ldGNoLXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBFdGNoIjsKICAtLWZhLWZvbnQtamVsbHktcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgSmVsbHkiOwogIC0tZmEtZm9udC1qZWxseS1maWxsLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IEplbGx5IEZpbGwiOwogIC0tZmEtZm9udC1qZWxseS1kdW8tcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgSmVsbHkgRHVvIjsKICAtLWZhLWZvbnQtY2hpc2VsLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IENoaXNlbCI7CiAgLS1mYS1mb250LXV0aWxpdHktc2VtaWJvbGQ6IG5vcm1hbCA2MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFV0aWxpdHkiOwogIC0tZmEtZm9udC11dGlsaXR5LWR1by1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgVXRpbGl0eSBEdW8iOwogIC0tZmEtZm9udC11dGlsaXR5LWZpbGwtc2VtaWJvbGQ6IG5vcm1hbCA2MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFV0aWxpdHkgRmlsbCI7Cn0KCi5zdmctaW5saW5lLS1mYSB7CiAgYm94LXNpemluZzogY29udGVudC1ib3g7CiAgZGlzcGxheTogdmFyKC0tZmEtZGlzcGxheSwgaW5saW5lLWJsb2NrKTsKICBoZWlnaHQ6IDFlbTsKICBvdmVyZmxvdzogdmlzaWJsZTsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTI1ZW07CiAgd2lkdGg6IHZhcigtLWZhLXdpZHRoLCAxLjI1ZW0pOwp9Ci5zdmctaW5saW5lLS1mYS5mYS0yeHMgewogIHZlcnRpY2FsLWFsaWduOiAwLjFlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEteHMgewogIHZlcnRpY2FsLWFsaWduOiAwZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXNtIHsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMDcxNDI4NTcxNGVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1sZyB7CiAgdmVydGljYWwtYWxpZ246IC0wLjJlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEteGwgewogIHZlcnRpY2FsLWFsaWduOiAtMC4yNWVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS0yeGwgewogIHZlcnRpY2FsLWFsaWduOiAtMC4zMTI1ZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtbGVmdCwKLnN2Zy1pbmxpbmUtLWZhIC5mYS1wdWxsLXN0YXJ0IHsKICBmbG9hdDogaW5saW5lLXN0YXJ0OwogIG1hcmdpbi1pbmxpbmUtZW5kOiB2YXIoLS1mYS1wdWxsLW1hcmdpbiwgMC4zZW0pOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1wdWxsLXJpZ2h0LAouc3ZnLWlubGluZS0tZmEgLmZhLXB1bGwtZW5kIHsKICBmbG9hdDogaW5saW5lLWVuZDsKICBtYXJnaW4taW5saW5lLXN0YXJ0OiB2YXIoLS1mYS1wdWxsLW1hcmdpbiwgMC4zZW0pOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1saSB7CiAgd2lkdGg6IHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pOwogIGluc2V0LWlubGluZS1zdGFydDogY2FsYygtMSAqIHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pKTsKICBpbnNldC1ibG9jay1zdGFydDogMC4yNWVtOyAvKiBzeW5jaW5nIHZlcnRpY2FsIGFsaWdubWVudCB3aXRoIFdlYiBGb250IHJlbmRlcmluZyAqLwp9CgouZmEtbGF5ZXJzLWNvdW50ZXIsIC5mYS1sYXllcnMtdGV4dCB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5mYS1sYXllcnMgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBoZWlnaHQ6IDFlbTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgsIDEuMjVlbSk7Cn0KLmZhLWxheWVycyAuc3ZnLWlubGluZS0tZmEgewogIGluc2V0OiAwOwogIG1hcmdpbjogYXV0bzsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKfQoKLmZhLWxheWVycy10ZXh0IHsKICBsZWZ0OiA1MCU7CiAgdG9wOiA1MCU7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKfQoKLmZhLWxheWVycy1jb3VudGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1mYS1jb3VudGVyLWJhY2tncm91bmQtY29sb3IsICNmZjI1M2EpOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWZhLWNvdW50ZXItYm9yZGVyLXJhZGl1cywgMWVtKTsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIGNvbG9yOiB2YXIoLS1mYS1pbnZlcnNlLCAjZmZmKTsKICBsaW5lLWhlaWdodDogdmFyKC0tZmEtY291bnRlci1saW5lLWhlaWdodCwgMSk7CiAgbWF4LXdpZHRoOiB2YXIoLS1mYS1jb3VudGVyLW1heC13aWR0aCwgNWVtKTsKICBtaW4td2lkdGg6IHZhcigtLWZhLWNvdW50ZXItbWluLXdpZHRoLCAxLjVlbSk7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBwYWRkaW5nOiB2YXIoLS1mYS1jb3VudGVyLXBhZGRpbmcsIDAuMjVlbSAwLjVlbSk7CiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICB0b3A6IHZhcigtLWZhLXRvcCwgMCk7CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1jb3VudGVyLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0Owp9CgouZmEtbGF5ZXJzLWJvdHRvbS1yaWdodCB7CiAgYm90dG9tOiB2YXIoLS1mYS1ib3R0b20sIDApOwogIHJpZ2h0OiB2YXIoLS1mYS1yaWdodCwgMCk7CiAgdG9wOiBhdXRvOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIHJpZ2h0Owp9CgouZmEtbGF5ZXJzLWJvdHRvbS1sZWZ0IHsKICBib3R0b206IHZhcigtLWZhLWJvdHRvbSwgMCk7CiAgbGVmdDogdmFyKC0tZmEtbGVmdCwgMCk7CiAgcmlnaHQ6IGF1dG87CiAgdG9wOiBhdXRvOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIGxlZnQ7Cn0KCi5mYS1sYXllcnMtdG9wLXJpZ2h0IHsKICB0b3A6IHZhcigtLWZhLXRvcCwgMCk7CiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpOwogIHRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDsKfQoKLmZhLWxheWVycy10b3AtbGVmdCB7CiAgbGVmdDogdmFyKC0tZmEtbGVmdCwgMCk7CiAgcmlnaHQ6IGF1dG87CiAgdG9wOiB2YXIoLS1mYS10b3AsIDApOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGxlZnQ7Cn0KCi5mYS0xeCB7CiAgZm9udC1zaXplOiAxZW07Cn0KCi5mYS0yeCB7CiAgZm9udC1zaXplOiAyZW07Cn0KCi5mYS0zeCB7CiAgZm9udC1zaXplOiAzZW07Cn0KCi5mYS00eCB7CiAgZm9udC1zaXplOiA0ZW07Cn0KCi5mYS01eCB7CiAgZm9udC1zaXplOiA1ZW07Cn0KCi5mYS02eCB7CiAgZm9udC1zaXplOiA2ZW07Cn0KCi5mYS03eCB7CiAgZm9udC1zaXplOiA3ZW07Cn0KCi5mYS04eCB7CiAgZm9udC1zaXplOiA4ZW07Cn0KCi5mYS05eCB7CiAgZm9udC1zaXplOiA5ZW07Cn0KCi5mYS0xMHggewogIGZvbnQtc2l6ZTogMTBlbTsKfQoKLmZhLTJ4cyB7CiAgZm9udC1zaXplOiBjYWxjKDEwIC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDEwcHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMTAgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDEwIC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLXhzIHsKICBmb250LXNpemU6IGNhbGMoMTIgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMTJweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAxMiAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMTIgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEtc20gewogIGZvbnQtc2l6ZTogY2FsYygxNCAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAxNHB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDE0ICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAxNCAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS1sZyB7CiAgZm9udC1zaXplOiBjYWxjKDIwIC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDIwcHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMjAgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDIwIC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLXhsIHsKICBmb250LXNpemU6IGNhbGMoMjQgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMjRweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAyNCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMjQgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEtMnhsIHsKICBmb250LXNpemU6IGNhbGMoMzIgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMzJweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAzMiAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMzIgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEtd2lkdGgtYXV0byB7CiAgLS1mYS13aWR0aDogYXV0bzsKfQoKLmZhLWZ3LAouZmEtd2lkdGgtZml4ZWQgewogIC0tZmEtd2lkdGg6IDEuMjVlbTsKfQoKLmZhLXVsIHsKICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0tZmEtbGktbWFyZ2luLCAyLjVlbSk7CiAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDA7Cn0KLmZhLXVsID4gbGkgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmZhLWxpIHsKICBpbnNldC1pbmxpbmUtc3RhcnQ6IGNhbGMoLTEgKiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKSk7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB3aWR0aDogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSk7CiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7Cn0KCi8qIEhlYWRzIFVwOiBCb3JkZXJlZCBJY29ucyB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgaW4gdGhlIGZ1dHVyZSEKICAtIFRoaXMgZmVhdHVyZSB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZSBvZiBGb250IEF3ZXNvbWUgKHY4KSEKICAtIFlvdSBtYXkgY29udGludWUgdG8gdXNlIGl0IGluIHRoaXMgdmVyc2lvbiAqdjcpLCBidXQgaXQgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGluIEZvbnQgQXdlc29tZSB2OC4KKi8KLyogTm90ZXM6CiogLS1Ae3YuJGNzcy1wcmVmaXh9LWJvcmRlci13aWR0aCA9IDEvMTYgYnkgZGVmYXVsdCAodG8gcmVuZGVyIGFzIH4xcHggYmFzZWQgb24gYSAxNnB4IGRlZmF1bHQgZm9udC1zaXplKQoqIC0tQHt2LiRjc3MtcHJlZml4fS1ib3JkZXItcGFkZGluZyA9CiAgKiogMy8xNiBmb3IgdmVydGljYWwgcGFkZGluZyAodG8gZ2l2ZSB+MnB4IG9mIHZlcnRpY2FsIHdoaXRlc3BhY2UgYXJvdW5kIGFuIGljb24gY29uc2lkZXJpbmcgaXQncyB2ZXJ0aWNhbCBhbGlnbm1lbnQpCiAgKiogNC8xNiBmb3IgaG9yaXpvbnRhbCBwYWRkaW5nICh0byBnaXZlIH40cHggb2YgaG9yaXpvbnRhbCB3aGl0ZXNwYWNlIGFyb3VuZCBhbiBpY29uKQoqLwouZmEtYm9yZGVyIHsKICBib3JkZXItY29sb3I6IHZhcigtLWZhLWJvcmRlci1jb2xvciwgI2VlZSk7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZmEtYm9yZGVyLXJhZGl1cywgMC4xZW0pOwogIGJvcmRlci1zdHlsZTogdmFyKC0tZmEtYm9yZGVyLXN0eWxlLCBzb2xpZCk7CiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1mYS1ib3JkZXItd2lkdGgsIDAuMDYyNWVtKTsKICBib3gtc2l6aW5nOiB2YXIoLS1mYS1ib3JkZXItYm94LXNpemluZywgY29udGVudC1ib3gpOwogIHBhZGRpbmc6IHZhcigtLWZhLWJvcmRlci1wYWRkaW5nLCAwLjE4NzVlbSAwLjI1ZW0pOwp9CgouZmEtcHVsbC1sZWZ0LAouZmEtcHVsbC1zdGFydCB7CiAgZmxvYXQ6IGlubGluZS1zdGFydDsKICBtYXJnaW4taW5saW5lLWVuZDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTsKfQoKLmZhLXB1bGwtcmlnaHQsCi5mYS1wdWxsLWVuZCB7CiAgZmxvYXQ6IGlubGluZS1lbmQ7CiAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTsKfQoKLmZhLWJlYXQgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1iZWF0OwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7Cn0KCi5mYS1ib3VuY2UgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1ib3VuY2U7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjI4LCAwLjg0LCAwLjQyLCAxKSk7Cn0KCi5mYS1mYWRlIHsKICBhbmltYXRpb24tbmFtZTogZmEtZmFkZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSk7Cn0KCi5mYS1iZWF0LWZhZGUgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1iZWF0LWZhZGU7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSkpOwp9CgouZmEtZmxpcCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWZsaXA7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTsKfQoKLmZhLXNoYWtlIHsKICBhbmltYXRpb24tbmFtZTogZmEtc2hha2U7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1zcGluIHsKICBhbmltYXRpb24tbmFtZTogZmEtc3BpbjsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDJzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTsKfQoKLmZhLXNwaW4tcmV2ZXJzZSB7CiAgLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uOiByZXZlcnNlOwp9CgouZmEtcHVsc2UsCi5mYS1zcGluLXB1bHNlIHsKICBhbmltYXRpb24tbmFtZTogZmEtc3BpbjsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIHN0ZXBzKDgpKTsKfQoKQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHsKICAuZmEtYmVhdCwKICAuZmEtYm91bmNlLAogIC5mYS1mYWRlLAogIC5mYS1iZWF0LWZhZGUsCiAgLmZhLWZsaXAsCiAgLmZhLXB1bHNlLAogIC5mYS1zaGFrZSwKICAuZmEtc3BpbiwKICAuZmEtc3Bpbi1wdWxzZSB7CiAgICBhbmltYXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KQGtleWZyYW1lcyBmYS1iZWF0IHsKICAwJSwgOTAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgfQogIDQ1JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtc2NhbGUsIDEuMjUpKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1ib3VuY2UgewogIDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTsKICB9CiAgMTAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXgsIDEuMSksIHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS15LCAwLjkpKSB0cmFuc2xhdGVZKDApOwogIH0KICAzMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtanVtcC1zY2FsZS14LCAwLjkpLCB2YXIoLS1mYS1ib3VuY2UtanVtcC1zY2FsZS15LCAxLjEpKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1oZWlnaHQsIC0wLjVlbSkpOwogIH0KICA1MCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS14LCAxLjA1KSwgdmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteSwgMC45NSkpIHRyYW5zbGF0ZVkoMCk7CiAgfQogIDU3JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkodmFyKC0tZmEtYm91bmNlLXJlYm91bmQsIC0wLjEyNWVtKSk7CiAgfQogIDY0JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWZhZGUgewogIDUwJSB7CiAgICBvcGFjaXR5OiB2YXIoLS1mYS1mYWRlLW9wYWNpdHksIDAuNCk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtYmVhdC1mYWRlIHsKICAwJSwgMTAwJSB7CiAgICBvcGFjaXR5OiB2YXIoLS1mYS1iZWF0LWZhZGUtb3BhY2l0eSwgMC40KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgfQogIDUwJSB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMTI1KSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtZmxpcCB7CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgdmFyKC0tZmEtZmxpcC1hbmdsZSwgLTE4MGRlZykpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLXNoYWtlIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTVkZWcpOwogIH0KICA0JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNWRlZyk7CiAgfQogIDglLCAyNCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoLTE4ZGVnKTsKICB9CiAgMTIlLCAyOCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMThkZWcpOwogIH0KICAxNiUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoLTIyZGVnKTsKICB9CiAgMjAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDIyZGVnKTsKICB9CiAgMzIlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMmRlZyk7CiAgfQogIDM2JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMmRlZyk7CiAgfQogIDQwJSwgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zcGluIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQouZmEtcm90YXRlLTkwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cn0KCi5mYS1yb3RhdGUtMTgwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwp9CgouZmEtcm90YXRlLTI3MCB7CiAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsKfQoKLmZhLWZsaXAtaG9yaXpvbnRhbCB7CiAgdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7Cn0KCi5mYS1mbGlwLXZlcnRpY2FsIHsKICB0cmFuc2Zvcm06IHNjYWxlKDEsIC0xKTsKfQoKLmZhLWZsaXAtYm90aCwKLmZhLWZsaXAtaG9yaXpvbnRhbC5mYS1mbGlwLXZlcnRpY2FsIHsKICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAtMSk7Cn0KCi5mYS1yb3RhdGUtYnkgewogIHRyYW5zZm9ybTogcm90YXRlKHZhcigtLWZhLXJvdGF0ZS1hbmdsZSwgMCkpOwp9Cgouc3ZnLWlubGluZS0tZmEgLmZhLXByaW1hcnkgewogIGZpbGw6IHZhcigtLWZhLXByaW1hcnktY29sb3IsIGN1cnJlbnRDb2xvcik7CiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTsKfQoKLnN2Zy1pbmxpbmUtLWZhIC5mYS1zZWNvbmRhcnkgewogIGZpbGw6IHZhcigtLWZhLXNlY29uZGFyeS1jb2xvciwgY3VycmVudENvbG9yKTsKICBvcGFjaXR5OiB2YXIoLS1mYS1zZWNvbmRhcnktb3BhY2l0eSwgMC40KTsKfQoKLnN2Zy1pbmxpbmUtLWZhLmZhLXN3YXAtb3BhY2l0eSAuZmEtcHJpbWFyeSB7CiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7Cn0KCi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXNlY29uZGFyeSB7CiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTsKfQoKLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXByaW1hcnksCi5zdmctaW5saW5lLS1mYSBtYXNrIC5mYS1zZWNvbmRhcnkgewogIGZpbGw6IGJsYWNrOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtaW52ZXJzZSB7CiAgZmlsbDogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7Cn0KCi5mYS1zdGFjayB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGhlaWdodDogMmVtOwogIGxpbmUtaGVpZ2h0OiAyZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgd2lkdGg6IDIuNWVtOwp9CgouZmEtaW52ZXJzZSB7CiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtc3RhY2stMXggewogIC0tZmEtd2lkdGg6IDEuMjVlbTsKICBoZWlnaHQ6IDFlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgpOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0yeCB7CiAgLS1mYS13aWR0aDogMi41ZW07CiAgaGVpZ2h0OiAyZW07CiAgd2lkdGg6IHZhcigtLWZhLXdpZHRoKTsKfQoKLmZhLXN0YWNrLTF4LAouZmEtc3RhY2stMnggewogIGluc2V0OiAwOwogIG1hcmdpbjogYXV0bzsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogdmFyKC0tZmEtc3RhY2stei1pbmRleCwgYXV0byk7Cn1gOwogICAgX2Nzc0luc2VydGVkID0gZmFsc2U7CiAgICBJbmplY3RDU1MgPSB7CiAgICAgIG1peG91dDogZnVuY3Rpb24gbWl4b3V0KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBkb206IHsKICAgICAgICAgICAgY3NzLAogICAgICAgICAgICBpbnNlcnRDc3M6IGVuc3VyZUNzcwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIGhvb2tzOiBmdW5jdGlvbiBob29rcygpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uOiBmdW5jdGlvbiBiZWZvcmVET01FbGVtZW50Q3JlYXRpb24oKSB7CiAgICAgICAgICAgIGVuc3VyZUNzcygpOwogICAgICAgICAgfSwKICAgICAgICAgIGJlZm9yZUkyc3ZnOiBmdW5jdGlvbiBiZWZvcmVJMnN2ZygpIHsKICAgICAgICAgICAgZW5zdXJlQ3NzKCk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIHckMiA9IFdJTkRPVyB8fCB7fTsKICAgIGlmICghdyQyW05BTUVTUEFDRV9JREVOVElGSUVSXSkgdyQyW05BTUVTUEFDRV9JREVOVElGSUVSXSA9IHt9OwogICAgaWYgKCF3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdLnN0eWxlcykgdyQyW05BTUVTUEFDRV9JREVOVElGSUVSXS5zdHlsZXMgPSB7fTsKICAgIGlmICghdyQyW05BTUVTUEFDRV9JREVOVElGSUVSXS5ob29rcykgdyQyW05BTUVTUEFDRV9JREVOVElGSUVSXS5ob29rcyA9IHt9OwogICAgaWYgKCF3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdLnNoaW1zKSB3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdLnNoaW1zID0gW107CiAgICBuYW1lc3BhY2UgPSB3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdOwogICAgZnVuY3Rpb25zID0gW107CiAgICBfbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcigpIHsKICAgICAgRE9DVU1FTlQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIF9saXN0ZW5lcik7CiAgICAgIGxvYWRlZCA9IDE7CiAgICAgIGZ1bmN0aW9ucy5tYXAoZnVuY3Rpb24oZm4pIHsKICAgICAgICByZXR1cm4gZm4oKTsKICAgICAgfSk7CiAgICB9OwogICAgbG9hZGVkID0gZmFsc2U7CiAgICBpZiAoSVNfRE9NKSB7CiAgICAgIGxvYWRlZCA9IChET0NVTUVOVC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgPyAvXmxvYWRlZHxeYy8gOiAvXmxvYWRlZHxeaXxeYy8pLnRlc3QoRE9DVU1FTlQucmVhZHlTdGF0ZSk7CiAgICAgIGlmICghbG9hZGVkKSBET0NVTUVOVC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgX2xpc3RlbmVyKTsKICAgIH0KICAgIGJpbmRJbnRlcm5hbDQgPSBmdW5jdGlvbiBiaW5kSW50ZXJuYWw0MihmdW5jLCB0aGlzQ29udGV4dCkgewogICAgICByZXR1cm4gZnVuY3Rpb24oYTUsIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQ29udGV4dCwgYTUsIGI1LCBjMTEsIGQ2KTsKICAgICAgfTsKICAgIH07CiAgICByZWR1Y2UzID0gZnVuY3Rpb24gZmFzdFJlZHVjZU9iamVjdChzdWJqZWN0LCBmbiwgaW5pdGlhbFZhbHVlLCB0aGlzQ29udGV4dCkgewogICAgICB2YXIga2V5czIgPSBPYmplY3Qua2V5cyhzdWJqZWN0KSwgbGVuZ3RoID0ga2V5czIubGVuZ3RoLCBpdGVyYXRvcjIgPSB0aGlzQ29udGV4dCAhPT0gdm9pZCAwID8gYmluZEludGVybmFsNChmbiwgdGhpc0NvbnRleHQpIDogZm4sIGkxMSwga2V5MiwgcmVzdWx0OwogICAgICBpZiAoaW5pdGlhbFZhbHVlID09PSB2b2lkIDApIHsKICAgICAgICBpMTEgPSAxOwogICAgICAgIHJlc3VsdCA9IHN1YmplY3Rba2V5czJbMF1dOwogICAgICB9IGVsc2UgewogICAgICAgIGkxMSA9IDA7CiAgICAgICAgcmVzdWx0ID0gaW5pdGlhbFZhbHVlOwogICAgICB9CiAgICAgIGZvciAoOyBpMTEgPCBsZW5ndGg7IGkxMSsrKSB7CiAgICAgICAga2V5MiA9IGtleXMyW2kxMV07CiAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3IyKHJlc3VsdCwgc3ViamVjdFtrZXkyXSwga2V5Miwgc3ViamVjdCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07CiAgICBNT05PID0gMTsKICAgIERVTyA9IDI7CiAgICBtb2Rlcm5NYXRjaGVzID0gW1tEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBvcGFjaXR5PSIoW14iXSopIi4qZD0iKFteIl0qKSIuKnBhdGguKmQ9IihbXiJdKikiLywgewogICAgICBkMjogMiwKICAgICAgZDE6IDMKICAgIH0pXSwgW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIG9wYWNpdHk9IihbXiJdKikiLipkPSIoW14iXSopIi8sIHsKICAgICAgZDI6IDIKICAgIH0pXSwgW01PTk8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBmaWxsPSJjdXJyZW50Q29sb3IiLipkPSIoW14iXSspIi8sIHsKICAgICAgZDE6IDEKICAgIH0pXV07CiAgICBsZWdhY3lNYXRjaGVzID0gW1tEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBjbGFzcz0iKFteIl0qc2Vjb25kYXJ5W14iXSopIi4qZD0iKFteIl0rKSIuKnBhdGggY2xhc3M9IihbXiJdKnByaW1hcnlbXiJdKikiLipkPSIoW14iXSspIi8sIHsKICAgICAgYXR0cjI6IDEsCiAgICAgIGQyOiAyLAogICAgICBhdHRyMTogMywKICAgICAgZDE6IDQKICAgIH0pXSwgW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGNsYXNzPSIoW14iXSpwcmltYXJ5W14iXSopIi4qZD0iKFteIl0rKSIuKnBhdGggY2xhc3M9IihbXiJdKnNlY29uZGFyeVteIl0qKSIuKmQ9IihbXiJdKykiLywgewogICAgICBhdHRyMTogMSwKICAgICAgZDE6IDIsCiAgICAgIGF0dHIyOiAzLAogICAgICBkMjogNAogICAgfSldLCBbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggY2xhc3M9IihbXiJdKnByaW1hcnlbXiJdKikiLipkPSIoW14iXSspIi8sIHsKICAgICAgYXR0cjE6IDEsCiAgICAgIGQxOiAyCiAgICB9KV0sIFtEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBjbGFzcz0iKFteIl0qc2Vjb25kYXJ5W14iXSopIi4qZD0iKFteIl0rKSIvLCB7CiAgICAgIGF0dHIyOiAxLAogICAgICBkMjogMgogICAgfSldLCBbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggZD0iKFteIl0rKSIuKmNsYXNzPSIoW14iXSpzZWNvbmRhcnlbXiJdKikiLipwYXRoIGQ9IihbXiJdKykiLipjbGFzcz0iKFteIl0qcHJpbWFyeVteIl0qKSIvLCB7CiAgICAgIGQyOiAxLAogICAgICBhdHRyMjogMiwKICAgICAgZDE6IDMsCiAgICAgIGF0dHIxOiA0CiAgICB9KV0sIFtEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBkPSIoW14iXSspIi4qY2xhc3M9IihbXiJdKnByaW1hcnlbXiJdKikiLipwYXRoIGQ9IihbXiJdKykiLipjbGFzcz0iKFteIl0qc2Vjb25kYXJ5W14iXSopIi8sIHsKICAgICAgZDE6IDEsCiAgICAgIGF0dHIxOiAyLAogICAgICBkMjogMywKICAgICAgYXR0cjI6IDQKICAgIH0pXSwgW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGQ9IihbXiJdKykiLipjbGFzcz0iKFteIl0qcHJpbWFyeVteIl0qKSIvLCB7CiAgICAgIGQxOiAxLAogICAgICBhdHRyMTogMgogICAgfSldLCBbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggZD0iKFteIl0rKSIuKmNsYXNzPSIoW14iXSpzZWNvbmRhcnlbXiJdKikiLywgewogICAgICBkMjogMSwKICAgICAgYXR0cjI6IDIKICAgIH0pXSwgW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGQ9IihbXiJdKykiLipwYXRoIGQ9IihbXiJdKykiLywgewogICAgICBkMTogMSwKICAgICAgZDI6IDIKICAgIH0pXSwgW01PTk8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBkPSIoW14iXSspIi8sIHsKICAgICAgZDE6IDEKICAgIH0pXSwgW01PTk8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBzdHlsZT0iKFteIl0rKSIuKmQ9IihbXiJdKykiLywgewogICAgICBhdHRyMTogMSwKICAgICAgZDE6IDIKICAgIH0pXV07CiAgICBzdHlsZXMyID0gbmFtZXNwYWNlLnN0eWxlcywgc2hpbXMgPSBuYW1lc3BhY2Uuc2hpbXM7CiAgICBGQU1JTFlfTkFNRVMgPSBPYmplY3Qua2V5cyhQUkVGSVhfVE9fTE9OR19TVFlMRSk7CiAgICBQUkVGSVhFU19GT1JfRkFNSUxZID0gRkFNSUxZX05BTUVTLnJlZHVjZShmdW5jdGlvbihhY2MsIGZhbWlseUlkKSB7CiAgICAgIGFjY1tmYW1pbHlJZF0gPSBPYmplY3Qua2V5cyhQUkVGSVhfVE9fTE9OR19TVFlMRVtmYW1pbHlJZF0pOwogICAgICByZXR1cm4gYWNjOwogICAgfSwge30pOwogICAgX2RlZmF1bHRVc2FibGVQcmVmaXggPSBudWxsOwogICAgX2J5VW5pY29kZSA9IHt9OwogICAgX2J5TGlnYXR1cmUgPSB7fTsKICAgIF9ieU9sZE5hbWUgPSB7fTsKICAgIF9ieU9sZFVuaWNvZGUgPSB7fTsKICAgIF9ieUFsaWFzID0ge307CiAgICBidWlsZCA9IGZ1bmN0aW9uIGJ1aWxkMigpIHsKICAgICAgdmFyIGxvb2t1cCA9IGZ1bmN0aW9uIGxvb2t1cDIocmVkdWNlcikgewogICAgICAgIHJldHVybiByZWR1Y2UzKHN0eWxlczIsIGZ1bmN0aW9uKG8kJDEsIHN0eWxlLCBwcmVmaXg0KSB7CiAgICAgICAgICBvJCQxW3ByZWZpeDRdID0gcmVkdWNlMyhzdHlsZSwgcmVkdWNlciwge30pOwogICAgICAgICAgcmV0dXJuIG8kJDE7CiAgICAgICAgfSwge30pOwogICAgICB9OwogICAgICBfYnlVbmljb2RlID0gbG9va3VwKGZ1bmN0aW9uKGFjYywgaWNvbjMsIGljb25OYW1lKSB7CiAgICAgICAgaWYgKGljb24zWzNdKSB7CiAgICAgICAgICBhY2NbaWNvbjNbM11dID0gaWNvbk5hbWU7CiAgICAgICAgfQogICAgICAgIGlmIChpY29uM1syXSkgewogICAgICAgICAgdmFyIGFsaWFzZXMgPSBpY29uM1syXS5maWx0ZXIoZnVuY3Rpb24oYSQkMSkgewogICAgICAgICAgICByZXR1cm4gdHlwZW9mIGEkJDEgPT09ICJudW1iZXIiOwogICAgICAgICAgfSk7CiAgICAgICAgICBhbGlhc2VzLmZvckVhY2goZnVuY3Rpb24oYWxpYXMpIHsKICAgICAgICAgICAgYWNjW2FsaWFzLnRvU3RyaW5nKDE2KV0gPSBpY29uTmFtZTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWNjOwogICAgICB9KTsKICAgICAgX2J5TGlnYXR1cmUgPSBsb29rdXAoZnVuY3Rpb24oYWNjLCBpY29uMywgaWNvbk5hbWUpIHsKICAgICAgICBhY2NbaWNvbk5hbWVdID0gaWNvbk5hbWU7CiAgICAgICAgaWYgKGljb24zWzJdKSB7CiAgICAgICAgICB2YXIgYWxpYXNlcyA9IGljb24zWzJdLmZpbHRlcihmdW5jdGlvbihhJCQxKSB7CiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSQkMSA9PT0gInN0cmluZyI7CiAgICAgICAgICB9KTsKICAgICAgICAgIGFsaWFzZXMuZm9yRWFjaChmdW5jdGlvbihhbGlhcykgewogICAgICAgICAgICBhY2NbYWxpYXNdID0gaWNvbk5hbWU7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgfSk7CiAgICAgIF9ieUFsaWFzID0gbG9va3VwKGZ1bmN0aW9uKGFjYywgaWNvbjMsIGljb25OYW1lKSB7CiAgICAgICAgdmFyIGFsaWFzZXMgPSBpY29uM1syXTsKICAgICAgICBhY2NbaWNvbk5hbWVdID0gaWNvbk5hbWU7CiAgICAgICAgYWxpYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGFsaWFzKSB7CiAgICAgICAgICBhY2NbYWxpYXNdID0gaWNvbk5hbWU7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgfSk7CiAgICAgIHZhciBoYXNSZWd1bGFyID0gImZhciIgaW4gc3R5bGVzMiB8fCBjb25maWcyLmF1dG9GZXRjaFN2ZzsKICAgICAgdmFyIHNoaW1Mb29rdXBzID0gcmVkdWNlMyhzaGltcywgZnVuY3Rpb24oYWNjLCBzaGltKSB7CiAgICAgICAgdmFyIG1heWJlTmFtZU1heWJlVW5pY29kZSA9IHNoaW1bMF07CiAgICAgICAgdmFyIHByZWZpeDQgPSBzaGltWzFdOwogICAgICAgIHZhciBpY29uTmFtZSA9IHNoaW1bMl07CiAgICAgICAgaWYgKHByZWZpeDQgPT09ICJmYXIiICYmICFoYXNSZWd1bGFyKSB7CiAgICAgICAgICBwcmVmaXg0ID0gImZhcyI7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgbWF5YmVOYW1lTWF5YmVVbmljb2RlID09PSAic3RyaW5nIikgewogICAgICAgICAgYWNjLm5hbWVzW21heWJlTmFtZU1heWJlVW5pY29kZV0gPSB7CiAgICAgICAgICAgIHByZWZpeDogcHJlZml4NCwKICAgICAgICAgICAgaWNvbk5hbWUKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgbWF5YmVOYW1lTWF5YmVVbmljb2RlID09PSAibnVtYmVyIikgewogICAgICAgICAgYWNjLnVuaWNvZGVzW21heWJlTmFtZU1heWJlVW5pY29kZS50b1N0cmluZygxNildID0gewogICAgICAgICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgICAgICAgIGljb25OYW1lCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWNjOwogICAgICB9LCB7CiAgICAgICAgbmFtZXM6IHt9LAogICAgICAgIHVuaWNvZGVzOiB7fQogICAgICB9KTsKICAgICAgX2J5T2xkTmFtZSA9IHNoaW1Mb29rdXBzLm5hbWVzOwogICAgICBfYnlPbGRVbmljb2RlID0gc2hpbUxvb2t1cHMudW5pY29kZXM7CiAgICAgIF9kZWZhdWx0VXNhYmxlUHJlZml4ID0gZ2V0Q2Fub25pY2FsUHJlZml4KGNvbmZpZzIuc3R5bGVEZWZhdWx0LCB7CiAgICAgICAgZmFtaWx5OiBjb25maWcyLmZhbWlseURlZmF1bHQKICAgICAgfSk7CiAgICB9OwogICAgb25DaGFuZ2UoZnVuY3Rpb24oYyQkMSkgewogICAgICBfZGVmYXVsdFVzYWJsZVByZWZpeCA9IGdldENhbm9uaWNhbFByZWZpeChjJCQxLnN0eWxlRGVmYXVsdCwgewogICAgICAgIGZhbWlseTogY29uZmlnMi5mYW1pbHlEZWZhdWx0CiAgICAgIH0pOwogICAgfSk7CiAgICBidWlsZCgpOwogICAgZW1wdHlDYW5vbmljYWxJY29uID0gZnVuY3Rpb24gZW1wdHlDYW5vbmljYWxJY29uMigpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBwcmVmaXg6IG51bGwsCiAgICAgICAgaWNvbk5hbWU6IG51bGwsCiAgICAgICAgcmVzdDogW10KICAgICAgfTsKICAgIH07CiAgICBfZmFDb21iaW5lZENsYXNzZXMgPSBadCQxLmNvbmNhdChZdCk7CiAgICBuZXdDYW5vbmljYWxGYW1pbGllcyA9IHJ0LmZpbHRlcihmdW5jdGlvbihmYW1pbHlJZCkgewogICAgICByZXR1cm4gZmFtaWx5SWQgIT09IGkxMCB8fCBmYW1pbHlJZCAhPT0gdDg7CiAgICB9KTsKICAgIG5ld0Nhbm9uaWNhbFN0eWxlcyA9IE9iamVjdC5rZXlzKEh0JDEpLmZpbHRlcihmdW5jdGlvbihrZXkyKSB7CiAgICAgIHJldHVybiBrZXkyICE9PSBpMTA7CiAgICB9KS5tYXAoZnVuY3Rpb24oa2V5MikgewogICAgICByZXR1cm4gT2JqZWN0LmtleXMoSHQkMVtrZXkyXSk7CiAgICB9KS5mbGF0KCk7CiAgICBMaWJyYXJ5ID0gLyogQF9fUFVSRV9fICovIChmdW5jdGlvbigpIHsKICAgICAgZnVuY3Rpb24gTGlicmFyeTIoKSB7CiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExpYnJhcnkyKTsKICAgICAgICB0aGlzLmRlZmluaXRpb25zID0ge307CiAgICAgIH0KICAgICAgcmV0dXJuIF9jcmVhdGVDbGFzcyhMaWJyYXJ5MiwgW3sKICAgICAgICBrZXk6ICJhZGQiLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhZGQzKCkgewogICAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBkZWZpbml0aW9ucyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKICAgICAgICAgICAgZGVmaW5pdGlvbnNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgYWRkaXRpb25zID0gZGVmaW5pdGlvbnMucmVkdWNlKHRoaXMuX3B1bGxEZWZpbml0aW9ucywge30pOwogICAgICAgICAgT2JqZWN0LmtleXMoYWRkaXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGtleTIpIHsKICAgICAgICAgICAgX3RoaXMuZGVmaW5pdGlvbnNba2V5Ml0gPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgX3RoaXMuZGVmaW5pdGlvbnNba2V5Ml0gfHwge30pLCBhZGRpdGlvbnNba2V5Ml0pOwogICAgICAgICAgICBkZWZpbmVJY29ucyhrZXkyLCBhZGRpdGlvbnNba2V5Ml0pOwogICAgICAgICAgICB2YXIgbG9uZ1ByZWZpeCA9IFBSRUZJWF9UT19MT05HX1NUWUxFW2kxMF1ba2V5Ml07CiAgICAgICAgICAgIGlmIChsb25nUHJlZml4KSBkZWZpbmVJY29ucyhsb25nUHJlZml4LCBhZGRpdGlvbnNba2V5Ml0pOwogICAgICAgICAgICBidWlsZCgpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAga2V5OiAicmVzZXQiLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHsKICAgICAgICAgIHRoaXMuZGVmaW5pdGlvbnMgPSB7fTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJfcHVsbERlZmluaXRpb25zIiwKICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3B1bGxEZWZpbml0aW9ucyhhZGRpdGlvbnMsIGRlZmluaXRpb24zKSB7CiAgICAgICAgICB2YXIgbm9ybWFsaXplZCA9IGRlZmluaXRpb24zLnByZWZpeCAmJiBkZWZpbml0aW9uMy5pY29uTmFtZSAmJiBkZWZpbml0aW9uMy5pY29uID8gewogICAgICAgICAgICAwOiBkZWZpbml0aW9uMwogICAgICAgICAgfSA6IGRlZmluaXRpb24zOwogICAgICAgICAgT2JqZWN0LmtleXMobm9ybWFsaXplZCkubWFwKGZ1bmN0aW9uKGtleTIpIHsKICAgICAgICAgICAgdmFyIF9ub3JtYWxpemVkJGtleSA9IG5vcm1hbGl6ZWRba2V5Ml0sIHByZWZpeDQgPSBfbm9ybWFsaXplZCRrZXkucHJlZml4LCBpY29uTmFtZSA9IF9ub3JtYWxpemVkJGtleS5pY29uTmFtZSwgaWNvbjMgPSBfbm9ybWFsaXplZCRrZXkuaWNvbjsKICAgICAgICAgICAgdmFyIGFsaWFzZXMgPSBpY29uM1syXTsKICAgICAgICAgICAgaWYgKCFhZGRpdGlvbnNbcHJlZml4NF0pIGFkZGl0aW9uc1twcmVmaXg0XSA9IHt9OwogICAgICAgICAgICBpZiAoYWxpYXNlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgYWxpYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGFsaWFzKSB7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFsaWFzID09PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgICBhZGRpdGlvbnNbcHJlZml4NF1bYWxpYXNdID0gaWNvbjM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYWRkaXRpb25zW3ByZWZpeDRdW2ljb25OYW1lXSA9IGljb24zOwogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gYWRkaXRpb25zOwogICAgICAgIH0KICAgICAgfV0pOwogICAgfSkoKTsKICAgIF9wbHVnaW5zID0gW107CiAgICBfaG9va3MgPSB7fTsKICAgIHByb3ZpZGVycyA9IHt9OwogICAgZGVmYXVsdFByb3ZpZGVyS2V5cyA9IE9iamVjdC5rZXlzKHByb3ZpZGVycyk7CiAgICBsaWJyYXJ5ID0gbmV3IExpYnJhcnkoKTsKICAgIG5vQXV0byA9IGZ1bmN0aW9uIG5vQXV0bzIoKSB7CiAgICAgIGNvbmZpZzIuYXV0b1JlcGxhY2VTdmcgPSBmYWxzZTsKICAgICAgY29uZmlnMi5vYnNlcnZlTXV0YXRpb25zID0gZmFsc2U7CiAgICAgIGNhbGxIb29rcygibm9BdXRvIik7CiAgICB9OwogICAgZG9tID0gewogICAgICBpMnN2ZzogZnVuY3Rpb24gaTJzdmcoKSB7CiAgICAgICAgdmFyIHBhcmFtczIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1swXSA6IHt9OwogICAgICAgIGlmIChJU19ET00pIHsKICAgICAgICAgIGNhbGxIb29rcygiYmVmb3JlSTJzdmciLCBwYXJhbXMyKTsKICAgICAgICAgIGNhbGxQcm92aWRlZCgicHNldWRvRWxlbWVudHMyc3ZnIiwgcGFyYW1zMik7CiAgICAgICAgICByZXR1cm4gY2FsbFByb3ZpZGVkKCJpMnN2ZyIsIHBhcmFtczIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJPcGVyYXRpb24gcmVxdWlyZXMgYSBET00gb2Ygc29tZSBraW5kLiIpKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHdhdGNoOiBmdW5jdGlvbiB3YXRjaCgpIHsKICAgICAgICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDoge307CiAgICAgICAgdmFyIGF1dG9SZXBsYWNlU3ZnUm9vdCA9IHBhcmFtczIuYXV0b1JlcGxhY2VTdmdSb290OwogICAgICAgIGlmIChjb25maWcyLmF1dG9SZXBsYWNlU3ZnID09PSBmYWxzZSkgewogICAgICAgICAgY29uZmlnMi5hdXRvUmVwbGFjZVN2ZyA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGNvbmZpZzIub2JzZXJ2ZU11dGF0aW9ucyA9IHRydWU7CiAgICAgICAgZG9tcmVhZHkoZnVuY3Rpb24oKSB7CiAgICAgICAgICBhdXRvUmVwbGFjZSh7CiAgICAgICAgICAgIGF1dG9SZXBsYWNlU3ZnUm9vdAogICAgICAgICAgfSk7CiAgICAgICAgICBjYWxsSG9va3MoIndhdGNoIiwgcGFyYW1zMik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBwYXJzZTcgPSB7CiAgICAgIGljb246IGZ1bmN0aW9uIGljb24oX2ljb24pIHsKICAgICAgICBpZiAoX2ljb24gPT09IG51bGwpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoX3R5cGVvZihfaWNvbikgPT09ICJvYmplY3QiICYmIF9pY29uLnByZWZpeCAmJiBfaWNvbi5pY29uTmFtZSkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcHJlZml4OiBfaWNvbi5wcmVmaXgsCiAgICAgICAgICAgIGljb25OYW1lOiBieUFsaWFzKF9pY29uLnByZWZpeCwgX2ljb24uaWNvbk5hbWUpIHx8IF9pY29uLmljb25OYW1lCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfaWNvbikgJiYgX2ljb24ubGVuZ3RoID09PSAyKSB7CiAgICAgICAgICB2YXIgaWNvbk5hbWUgPSBfaWNvblsxXS5pbmRleE9mKCJmYS0iKSA9PT0gMCA/IF9pY29uWzFdLnNsaWNlKDMpIDogX2ljb25bMV07CiAgICAgICAgICB2YXIgcHJlZml4NCA9IGdldENhbm9uaWNhbFByZWZpeChfaWNvblswXSk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgICAgICAgIGljb25OYW1lOiBieUFsaWFzKHByZWZpeDQsIGljb25OYW1lKSB8fCBpY29uTmFtZQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBfaWNvbiA9PT0gInN0cmluZyIgJiYgKF9pY29uLmluZGV4T2YoIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLSIpKSA+IC0xIHx8IF9pY29uLm1hdGNoKElDT05fU0VMRUNUSU9OX1NZTlRBWF9QQVRURVJOKSkpIHsKICAgICAgICAgIHZhciBjYW5vbmljYWxJY29uID0gZ2V0Q2Fub25pY2FsSWNvbihfaWNvbi5zcGxpdCgiICIpLCB7CiAgICAgICAgICAgIHNraXBMb29rdXBzOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHByZWZpeDogY2Fub25pY2FsSWNvbi5wcmVmaXggfHwgZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpLAogICAgICAgICAgICBpY29uTmFtZTogYnlBbGlhcyhjYW5vbmljYWxJY29uLnByZWZpeCwgY2Fub25pY2FsSWNvbi5pY29uTmFtZSkgfHwgY2Fub25pY2FsSWNvbi5pY29uTmFtZQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBfaWNvbiA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIHZhciBfcHJlZml4ID0gZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcHJlZml4OiBfcHJlZml4LAogICAgICAgICAgICBpY29uTmFtZTogYnlBbGlhcyhfcHJlZml4LCBfaWNvbikgfHwgX2ljb24KICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgYXBpID0gewogICAgICBub0F1dG8sCiAgICAgIGNvbmZpZzogY29uZmlnMiwKICAgICAgZG9tLAogICAgICBwYXJzZTogcGFyc2U3LAogICAgICBsaWJyYXJ5LAogICAgICBmaW5kSWNvbkRlZmluaXRpb24sCiAgICAgIHRvSHRtbDogdG9IdG1sMgogICAgfTsKICAgIGF1dG9SZXBsYWNlID0gZnVuY3Rpb24gYXV0b1JlcGxhY2UyKCkgewogICAgICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDoge307CiAgICAgIHZhciBfcGFyYW1zJGF1dG9SZXBsYWNlU3YgPSBwYXJhbXMyLmF1dG9SZXBsYWNlU3ZnUm9vdCwgYXV0b1JlcGxhY2VTdmdSb290ID0gX3BhcmFtcyRhdXRvUmVwbGFjZVN2ID09PSB2b2lkIDAgPyBET0NVTUVOVCA6IF9wYXJhbXMkYXV0b1JlcGxhY2VTdjsKICAgICAgaWYgKChPYmplY3Qua2V5cyhuYW1lc3BhY2Uuc3R5bGVzKS5sZW5ndGggPiAwIHx8IGNvbmZpZzIuYXV0b0ZldGNoU3ZnKSAmJiBJU19ET00gJiYgY29uZmlnMi5hdXRvUmVwbGFjZVN2ZykgYXBpLmRvbS5pMnN2Zyh7CiAgICAgICAgbm9kZTogYXV0b1JlcGxhY2VTdmdSb290CiAgICAgIH0pOwogICAgfTsKICAgIHN0eWxlcyQxID0gbmFtZXNwYWNlLnN0eWxlczsKICAgIG1pc3NpbmdJY29uUmVzb2x1dGlvbk1peGluID0gewogICAgICBmb3VuZDogZmFsc2UsCiAgICAgIHdpZHRoOiA1MTIsCiAgICAgIGhlaWdodDogNTEyCiAgICB9OwogICAgbm9vcCQxID0gZnVuY3Rpb24gbm9vcDQoKSB7CiAgICB9OwogICAgcCQyID0gY29uZmlnMi5tZWFzdXJlUGVyZm9ybWFuY2UgJiYgUEVSRk9STUFOQ0UgJiYgUEVSRk9STUFOQ0UubWFyayAmJiBQRVJGT1JNQU5DRS5tZWFzdXJlID8gUEVSRk9STUFOQ0UgOiB7CiAgICAgIG1hcms6IG5vb3AkMSwKICAgICAgbWVhc3VyZTogbm9vcCQxCiAgICB9OwogICAgcHJlYW1ibGUgPSAnRkEgIjcuMS4wIic7CiAgICBiZWdpbiA9IGZ1bmN0aW9uIGJlZ2luMihuYW1lKSB7CiAgICAgIHAkMi5tYXJrKCIiLmNvbmNhdChwcmVhbWJsZSwgIiAiKS5jb25jYXQobmFtZSwgIiBiZWdpbnMiKSk7CiAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gZW5kKG5hbWUpOwogICAgICB9OwogICAgfTsKICAgIGVuZCA9IGZ1bmN0aW9uIGVuZDIobmFtZSkgewogICAgICBwJDIubWFyaygiIi5jb25jYXQocHJlYW1ibGUsICIgIikuY29uY2F0KG5hbWUsICIgZW5kcyIpKTsKICAgICAgcCQyLm1lYXN1cmUoIiIuY29uY2F0KHByZWFtYmxlLCAiICIpLmNvbmNhdChuYW1lKSwgIiIuY29uY2F0KHByZWFtYmxlLCAiICIpLmNvbmNhdChuYW1lLCAiIGJlZ2lucyIpLCAiIi5jb25jYXQocHJlYW1ibGUsICIgIikuY29uY2F0KG5hbWUsICIgZW5kcyIpKTsKICAgIH07CiAgICBwZXJmID0gewogICAgICBiZWdpbiwKICAgICAgZW5kCiAgICB9OwogICAgbm9vcCQyID0gZnVuY3Rpb24gbm9vcDUoKSB7CiAgICB9OwogICAgbXV0YXRvcnMgPSB7CiAgICAgIHJlcGxhY2U6IGZ1bmN0aW9uIHJlcGxhY2UzKG11dGF0aW9uKSB7CiAgICAgICAgdmFyIG5vZGUyID0gbXV0YXRpb25bMF07CiAgICAgICAgaWYgKG5vZGUyLnBhcmVudE5vZGUpIHsKICAgICAgICAgIG11dGF0aW9uWzFdLmZvckVhY2goZnVuY3Rpb24oYWJzdHJhY3QpIHsKICAgICAgICAgICAgbm9kZTIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY29udmVydFNWRyhhYnN0cmFjdCksIG5vZGUyKTsKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKG5vZGUyLmdldEF0dHJpYnV0ZShEQVRBX0ZBX0kyU1ZHKSA9PT0gbnVsbCAmJiBjb25maWcyLmtlZXBPcmlnaW5hbFNvdXJjZSkgewogICAgICAgICAgICB2YXIgY29tbWVudDMgPSBET0NVTUVOVC5jcmVhdGVDb21tZW50KG5vZGVBc0NvbW1lbnQobm9kZTIpKTsKICAgICAgICAgICAgbm9kZTIucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoY29tbWVudDMsIG5vZGUyKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5vZGUyLnJlbW92ZSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgbmVzdDogZnVuY3Rpb24gbmVzdChtdXRhdGlvbikgewogICAgICAgIHZhciBub2RlMiA9IG11dGF0aW9uWzBdOwogICAgICAgIHZhciBhYnN0cmFjdCA9IG11dGF0aW9uWzFdOwogICAgICAgIGlmICh+Y2xhc3NBcnJheShub2RlMikuaW5kZXhPZihjb25maWcyLnJlcGxhY2VtZW50Q2xhc3MpKSB7CiAgICAgICAgICByZXR1cm4gbXV0YXRvcnMucmVwbGFjZShtdXRhdGlvbik7CiAgICAgICAgfQogICAgICAgIHZhciBmb3JTdmcgPSBuZXcgUmVnRXhwKCIiLmNvbmNhdChjb25maWcyLmNzc1ByZWZpeCwgIi0uKiIpKTsKICAgICAgICBkZWxldGUgYWJzdHJhY3RbMF0uYXR0cmlidXRlcy5pZDsKICAgICAgICBpZiAoYWJzdHJhY3RbMF0uYXR0cmlidXRlcy5jbGFzcykgewogICAgICAgICAgdmFyIHNwbGl0Q2xhc3NlcyA9IGFic3RyYWN0WzBdLmF0dHJpYnV0ZXMuY2xhc3Muc3BsaXQoIiAiKS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBjbHMpIHsKICAgICAgICAgICAgaWYgKGNscyA9PT0gY29uZmlnMi5yZXBsYWNlbWVudENsYXNzIHx8IGNscy5tYXRjaChmb3JTdmcpKSB7CiAgICAgICAgICAgICAgYWNjLnRvU3ZnLnB1c2goY2xzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBhY2MudG9Ob2RlLnB1c2goY2xzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gYWNjOwogICAgICAgICAgfSwgewogICAgICAgICAgICB0b05vZGU6IFtdLAogICAgICAgICAgICB0b1N2ZzogW10KICAgICAgICAgIH0pOwogICAgICAgICAgYWJzdHJhY3RbMF0uYXR0cmlidXRlcy5jbGFzcyA9IHNwbGl0Q2xhc3Nlcy50b1N2Zy5qb2luKCIgIik7CiAgICAgICAgICBpZiAoc3BsaXRDbGFzc2VzLnRvTm9kZS5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgbm9kZTIucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbm9kZTIuc2V0QXR0cmlidXRlKCJjbGFzcyIsIHNwbGl0Q2xhc3Nlcy50b05vZGUuam9pbigiICIpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIG5ld0lubmVySFRNTCA9IGFic3RyYWN0Lm1hcChmdW5jdGlvbihhNSkgewogICAgICAgICAgcmV0dXJuIHRvSHRtbDIoYTUpOwogICAgICAgIH0pLmpvaW4oIlxuIik7CiAgICAgICAgbm9kZTIuc2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcsICIiKTsKICAgICAgICBub2RlMi5pbm5lckhUTUwgPSBuZXdJbm5lckhUTUw7CiAgICAgIH0KICAgIH07CiAgICBkaXNhYmxlZCA9IGZhbHNlOwogICAgbW8gPSBudWxsOwogICAgc3R5bGVzJDIgPSBuYW1lc3BhY2Uuc3R5bGVzOwogICAgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyMihpY29uRGVmaW5pdGlvbikgewogICAgICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge307CiAgICAgIHZhciBfcGFyYW1zJHRyYW5zZm9ybSA9IHBhcmFtczIudHJhbnNmb3JtLCB0cmFuc2Zvcm0yID0gX3BhcmFtcyR0cmFuc2Zvcm0gPT09IHZvaWQgMCA/IG1lYW5pbmdsZXNzVHJhbnNmb3JtIDogX3BhcmFtcyR0cmFuc2Zvcm0sIF9wYXJhbXMkc3ltYm9sID0gcGFyYW1zMi5zeW1ib2wsIHN5bWJvbCA9IF9wYXJhbXMkc3ltYm9sID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wYXJhbXMkc3ltYm9sLCBfcGFyYW1zJG1hc2sgPSBwYXJhbXMyLm1hc2ssIG1hc2sgPSBfcGFyYW1zJG1hc2sgPT09IHZvaWQgMCA/IG51bGwgOiBfcGFyYW1zJG1hc2ssIF9wYXJhbXMkbWFza0lkID0gcGFyYW1zMi5tYXNrSWQsIG1hc2tJZCA9IF9wYXJhbXMkbWFza0lkID09PSB2b2lkIDAgPyBudWxsIDogX3BhcmFtcyRtYXNrSWQsIF9wYXJhbXMkY2xhc3NlcyA9IHBhcmFtczIuY2xhc3NlcywgY2xhc3NlcyA9IF9wYXJhbXMkY2xhc3NlcyA9PT0gdm9pZCAwID8gW10gOiBfcGFyYW1zJGNsYXNzZXMsIF9wYXJhbXMkYXR0cmlidXRlcyA9IHBhcmFtczIuYXR0cmlidXRlcywgYXR0cmlidXRlcyA9IF9wYXJhbXMkYXR0cmlidXRlcyA9PT0gdm9pZCAwID8ge30gOiBfcGFyYW1zJGF0dHJpYnV0ZXMsIF9wYXJhbXMkc3R5bGVzID0gcGFyYW1zMi5zdHlsZXMsIHN0eWxlczMgPSBfcGFyYW1zJHN0eWxlcyA9PT0gdm9pZCAwID8ge30gOiBfcGFyYW1zJHN0eWxlczsKICAgICAgaWYgKCFpY29uRGVmaW5pdGlvbikgcmV0dXJuOwogICAgICB2YXIgcHJlZml4NCA9IGljb25EZWZpbml0aW9uLnByZWZpeCwgaWNvbk5hbWUgPSBpY29uRGVmaW5pdGlvbi5pY29uTmFtZSwgaWNvbjMgPSBpY29uRGVmaW5pdGlvbi5pY29uOwogICAgICByZXR1cm4gZG9tVmFyaWFudHMoX29iamVjdFNwcmVhZDIoewogICAgICAgIHR5cGU6ICJpY29uIgogICAgICB9LCBpY29uRGVmaW5pdGlvbiksIGZ1bmN0aW9uKCkgewogICAgICAgIGNhbGxIb29rcygiYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uIiwgewogICAgICAgICAgaWNvbkRlZmluaXRpb24sCiAgICAgICAgICBwYXJhbXM6IHBhcmFtczIKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gbWFrZUlubGluZVN2Z0Fic3RyYWN0KHsKICAgICAgICAgIGljb25zOiB7CiAgICAgICAgICAgIG1haW46IGFzRm91bmRJY29uKGljb24zKSwKICAgICAgICAgICAgbWFzazogbWFzayA/IGFzRm91bmRJY29uKG1hc2suaWNvbikgOiB7CiAgICAgICAgICAgICAgZm91bmQ6IGZhbHNlLAogICAgICAgICAgICAgIHdpZHRoOiBudWxsLAogICAgICAgICAgICAgIGhlaWdodDogbnVsbCwKICAgICAgICAgICAgICBpY29uOiB7fQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgcHJlZml4OiBwcmVmaXg0LAogICAgICAgICAgaWNvbk5hbWUsCiAgICAgICAgICB0cmFuc2Zvcm06IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtZWFuaW5nbGVzc1RyYW5zZm9ybSksIHRyYW5zZm9ybTIpLAogICAgICAgICAgc3ltYm9sLAogICAgICAgICAgbWFza0lkLAogICAgICAgICAgZXh0cmE6IHsKICAgICAgICAgICAgYXR0cmlidXRlcywKICAgICAgICAgICAgc3R5bGVzOiBzdHlsZXMzLAogICAgICAgICAgICBjbGFzc2VzCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfTsKICAgIFJlcGxhY2VFbGVtZW50cyA9IHsKICAgICAgbWl4b3V0OiBmdW5jdGlvbiBtaXhvdXQyKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBpY29uOiByZXNvbHZlSWNvbnMocmVuZGVyKQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIGhvb2tzOiBmdW5jdGlvbiBob29rczIoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIG11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3M6IGZ1bmN0aW9uIG11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3MoYWNjdW11bGF0b3IpIHsKICAgICAgICAgICAgYWNjdW11bGF0b3IudHJlZUNhbGxiYWNrID0gb25UcmVlOwogICAgICAgICAgICBhY2N1bXVsYXRvci5ub2RlQ2FsbGJhY2sgPSBvbk5vZGU7CiAgICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9LAogICAgICBwcm92aWRlczogZnVuY3Rpb24gcHJvdmlkZXMocHJvdmlkZXJzJCQxKSB7CiAgICAgICAgcHJvdmlkZXJzJCQxLmkyc3ZnID0gZnVuY3Rpb24ocGFyYW1zMikgewogICAgICAgICAgdmFyIF9wYXJhbXMkbm9kZSA9IHBhcmFtczIubm9kZSwgbm9kZTIgPSBfcGFyYW1zJG5vZGUgPT09IHZvaWQgMCA/IERPQ1VNRU5UIDogX3BhcmFtcyRub2RlLCBfcGFyYW1zJGNhbGxiYWNrID0gcGFyYW1zMi5jYWxsYmFjaywgY2FsbGJhY2sgPSBfcGFyYW1zJGNhbGxiYWNrID09PSB2b2lkIDAgPyBmdW5jdGlvbigpIHsKICAgICAgICAgIH0gOiBfcGFyYW1zJGNhbGxiYWNrOwogICAgICAgICAgcmV0dXJuIG9uVHJlZShub2RlMiwgY2FsbGJhY2spOwogICAgICAgIH07CiAgICAgICAgcHJvdmlkZXJzJCQxLmdlbmVyYXRlU3ZnUmVwbGFjZW1lbnRNdXRhdGlvbiA9IGZ1bmN0aW9uKG5vZGUyLCBub2RlTWV0YSkgewogICAgICAgICAgdmFyIGljb25OYW1lID0gbm9kZU1ldGEuaWNvbk5hbWUsIHByZWZpeDQgPSBub2RlTWV0YS5wcmVmaXgsIHRyYW5zZm9ybTIgPSBub2RlTWV0YS50cmFuc2Zvcm0sIHN5bWJvbCA9IG5vZGVNZXRhLnN5bWJvbCwgbWFzayA9IG5vZGVNZXRhLm1hc2ssIG1hc2tJZCA9IG5vZGVNZXRhLm1hc2tJZCwgZXh0cmEgPSBub2RlTWV0YS5leHRyYTsKICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICAgICAgICAgIFByb21pc2UuYWxsKFtmaW5kSWNvbihpY29uTmFtZSwgcHJlZml4NCksIG1hc2suaWNvbk5hbWUgPyBmaW5kSWNvbihtYXNrLmljb25OYW1lLCBtYXNrLnByZWZpeCkgOiBQcm9taXNlLnJlc29sdmUoewogICAgICAgICAgICAgIGZvdW5kOiBmYWxzZSwKICAgICAgICAgICAgICB3aWR0aDogNTEyLAogICAgICAgICAgICAgIGhlaWdodDogNTEyLAogICAgICAgICAgICAgIGljb246IHt9CiAgICAgICAgICAgIH0pXSkudGhlbihmdW5jdGlvbihfcmVmMikgewogICAgICAgICAgICAgIHZhciBfcmVmMjIgPSBfc2xpY2VkVG9BcnJheShfcmVmMiwgMiksIG1haW4gPSBfcmVmMjJbMF0sIG1hc2syID0gX3JlZjIyWzFdOwogICAgICAgICAgICAgIHJlc29sdmUyKFtub2RlMiwgbWFrZUlubGluZVN2Z0Fic3RyYWN0KHsKICAgICAgICAgICAgICAgIGljb25zOiB7CiAgICAgICAgICAgICAgICAgIG1haW4sCiAgICAgICAgICAgICAgICAgIG1hc2s6IG1hc2syCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcHJlZml4OiBwcmVmaXg0LAogICAgICAgICAgICAgICAgaWNvbk5hbWUsCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybTIsCiAgICAgICAgICAgICAgICBzeW1ib2wsCiAgICAgICAgICAgICAgICBtYXNrSWQsCiAgICAgICAgICAgICAgICBleHRyYSwKICAgICAgICAgICAgICAgIHdhdGNoYWJsZTogdHJ1ZQogICAgICAgICAgICAgIH0pXSk7CiAgICAgICAgICAgIH0pLmNhdGNoKHJlamVjdCk7CiAgICAgICAgICB9KTsKICAgICAgICB9OwogICAgICAgIHByb3ZpZGVycyQkMS5nZW5lcmF0ZUFic3RyYWN0SWNvbiA9IGZ1bmN0aW9uKF9yZWYzKSB7CiAgICAgICAgICB2YXIgY2hpbGRyZW4yID0gX3JlZjMuY2hpbGRyZW4sIGF0dHJpYnV0ZXMgPSBfcmVmMy5hdHRyaWJ1dGVzLCBtYWluID0gX3JlZjMubWFpbiwgdHJhbnNmb3JtMiA9IF9yZWYzLnRyYW5zZm9ybSwgc3R5bGVzMyA9IF9yZWYzLnN0eWxlczsKICAgICAgICAgIHZhciBzdHlsZVN0cmluZyA9IGpvaW5TdHlsZXMoc3R5bGVzMyk7CiAgICAgICAgICBpZiAoc3R5bGVTdHJpbmcubGVuZ3RoID4gMCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzWyJzdHlsZSJdID0gc3R5bGVTdHJpbmc7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbmV4dENoaWxkOwogICAgICAgICAgaWYgKHRyYW5zZm9ybUlzTWVhbmluZ2Z1bCh0cmFuc2Zvcm0yKSkgewogICAgICAgICAgICBuZXh0Q2hpbGQgPSBjYWxsUHJvdmlkZWQoImdlbmVyYXRlQWJzdHJhY3RUcmFuc2Zvcm1Hcm91cGluZyIsIHsKICAgICAgICAgICAgICBtYWluLAogICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtMiwKICAgICAgICAgICAgICBjb250YWluZXJXaWR0aDogbWFpbi53aWR0aCwKICAgICAgICAgICAgICBpY29uV2lkdGg6IG1haW4ud2lkdGgKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBjaGlsZHJlbjIucHVzaChuZXh0Q2hpbGQgfHwgbWFpbi5pY29uKTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbjIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXMKICAgICAgICAgIH07CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIExheWVycyA9IHsKICAgICAgbWl4b3V0OiBmdW5jdGlvbiBtaXhvdXQzKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBsYXllcjogZnVuY3Rpb24gbGF5ZXIyKGFzc2VtYmxlcikgewogICAgICAgICAgICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge307CiAgICAgICAgICAgIHZhciBfcGFyYW1zJGNsYXNzZXMgPSBwYXJhbXMyLmNsYXNzZXMsIGNsYXNzZXMgPSBfcGFyYW1zJGNsYXNzZXMgPT09IHZvaWQgMCA/IFtdIDogX3BhcmFtcyRjbGFzc2VzOwogICAgICAgICAgICByZXR1cm4gZG9tVmFyaWFudHMoewogICAgICAgICAgICAgIHR5cGU6ICJsYXllciIKICAgICAgICAgICAgfSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgY2FsbEhvb2tzKCJiZWZvcmVET01FbGVtZW50Q3JlYXRpb24iLCB7CiAgICAgICAgICAgICAgICBhc3NlbWJsZXIsCiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtczIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4yID0gW107CiAgICAgICAgICAgICAgYXNzZW1ibGVyKGZ1bmN0aW9uKGFyZ3MpIHsKICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzLm1hcChmdW5jdGlvbihhNSkgewogICAgICAgICAgICAgICAgICBjaGlsZHJlbjIgPSBjaGlsZHJlbjIuY29uY2F0KGE1LmFic3RyYWN0KTsKICAgICAgICAgICAgICAgIH0pIDogY2hpbGRyZW4yID0gY2hpbGRyZW4yLmNvbmNhdChhcmdzLmFic3RyYWN0KTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gW3sKICAgICAgICAgICAgICAgIHRhZzogInNwYW4iLAogICAgICAgICAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgICAgICAgICBjbGFzczogWyIiLmNvbmNhdChjb25maWcyLmNzc1ByZWZpeCwgIi1sYXllcnMiKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjbGFzc2VzKSkuam9pbigiICIpCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuMgogICAgICAgICAgICAgIH1dOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgTGF5ZXJzQ291bnRlciA9IHsKICAgICAgbWl4b3V0OiBmdW5jdGlvbiBtaXhvdXQ0KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBjb3VudGVyOiBmdW5jdGlvbiBjb3VudGVyMihjb250ZW50MykgewogICAgICAgICAgICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge307CiAgICAgICAgICAgIHZhciBfcGFyYW1zJHRpdGxlID0gcGFyYW1zMi50aXRsZSwgdGl0bGUgPSBfcGFyYW1zJHRpdGxlID09PSB2b2lkIDAgPyBudWxsIDogX3BhcmFtcyR0aXRsZSwgX3BhcmFtcyRjbGFzc2VzID0gcGFyYW1zMi5jbGFzc2VzLCBjbGFzc2VzID0gX3BhcmFtcyRjbGFzc2VzID09PSB2b2lkIDAgPyBbXSA6IF9wYXJhbXMkY2xhc3NlcywgX3BhcmFtcyRhdHRyaWJ1dGVzID0gcGFyYW1zMi5hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzID0gX3BhcmFtcyRhdHRyaWJ1dGVzID09PSB2b2lkIDAgPyB7fSA6IF9wYXJhbXMkYXR0cmlidXRlcywgX3BhcmFtcyRzdHlsZXMgPSBwYXJhbXMyLnN0eWxlcywgc3R5bGVzMyA9IF9wYXJhbXMkc3R5bGVzID09PSB2b2lkIDAgPyB7fSA6IF9wYXJhbXMkc3R5bGVzOwogICAgICAgICAgICByZXR1cm4gZG9tVmFyaWFudHMoewogICAgICAgICAgICAgIHR5cGU6ICJjb3VudGVyIiwKICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50MwogICAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBjYWxsSG9va3MoImJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbiIsIHsKICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMyCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMYXllcnNDb3VudGVyQWJzdHJhY3QoewogICAgICAgICAgICAgICAgY29udGVudDogY29udGVudDMudG9TdHJpbmcoKSwKICAgICAgICAgICAgICAgIHRpdGxlLAogICAgICAgICAgICAgICAgZXh0cmE6IHsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgc3R5bGVzOiBzdHlsZXMzLAogICAgICAgICAgICAgICAgICBjbGFzc2VzOiBbIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLWxheWVycy1jb3VudGVyIildLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoY2xhc3NlcykpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBMYXllcnNUZXh0ID0gewogICAgICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dDUoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uIHRleHQ5KGNvbnRlbnQzKSB7CiAgICAgICAgICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTsKICAgICAgICAgICAgdmFyIF9wYXJhbXMkdHJhbnNmb3JtID0gcGFyYW1zMi50cmFuc2Zvcm0sIHRyYW5zZm9ybTIgPSBfcGFyYW1zJHRyYW5zZm9ybSA9PT0gdm9pZCAwID8gbWVhbmluZ2xlc3NUcmFuc2Zvcm0gOiBfcGFyYW1zJHRyYW5zZm9ybSwgX3BhcmFtcyRjbGFzc2VzID0gcGFyYW1zMi5jbGFzc2VzLCBjbGFzc2VzID0gX3BhcmFtcyRjbGFzc2VzID09PSB2b2lkIDAgPyBbXSA6IF9wYXJhbXMkY2xhc3NlcywgX3BhcmFtcyRhdHRyaWJ1dGVzID0gcGFyYW1zMi5hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzID0gX3BhcmFtcyRhdHRyaWJ1dGVzID09PSB2b2lkIDAgPyB7fSA6IF9wYXJhbXMkYXR0cmlidXRlcywgX3BhcmFtcyRzdHlsZXMgPSBwYXJhbXMyLnN0eWxlcywgc3R5bGVzMyA9IF9wYXJhbXMkc3R5bGVzID09PSB2b2lkIDAgPyB7fSA6IF9wYXJhbXMkc3R5bGVzOwogICAgICAgICAgICByZXR1cm4gZG9tVmFyaWFudHMoewogICAgICAgICAgICAgIHR5cGU6ICJ0ZXh0IiwKICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50MwogICAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBjYWxsSG9va3MoImJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbiIsIHsKICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMyCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMYXllcnNUZXh0QWJzdHJhY3QoewogICAgICAgICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtZWFuaW5nbGVzc1RyYW5zZm9ybSksIHRyYW5zZm9ybTIpLAogICAgICAgICAgICAgICAgZXh0cmE6IHsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgc3R5bGVzOiBzdHlsZXMzLAogICAgICAgICAgICAgICAgICBjbGFzc2VzOiBbIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLWxheWVycy10ZXh0IildLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoY2xhc3NlcykpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIHByb3ZpZGVzOiBmdW5jdGlvbiBwcm92aWRlczIocHJvdmlkZXJzJCQxKSB7CiAgICAgICAgcHJvdmlkZXJzJCQxLmdlbmVyYXRlTGF5ZXJzVGV4dCA9IGZ1bmN0aW9uKG5vZGUyLCBub2RlTWV0YSkgewogICAgICAgICAgdmFyIHRyYW5zZm9ybTIgPSBub2RlTWV0YS50cmFuc2Zvcm0sIGV4dHJhID0gbm9kZU1ldGEuZXh0cmE7CiAgICAgICAgICB2YXIgd2lkdGggPSBudWxsOwogICAgICAgICAgdmFyIGhlaWdodCA9IG51bGw7CiAgICAgICAgICBpZiAoSVNfSUUpIHsKICAgICAgICAgICAgdmFyIGNvbXB1dGVkRm9udFNpemUgPSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKG5vZGUyKS5mb250U2l6ZSwgMTApOwogICAgICAgICAgICB2YXIgYm91bmRpbmdDbGllbnRSZWN0ID0gbm9kZTIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgIHdpZHRoID0gYm91bmRpbmdDbGllbnRSZWN0LndpZHRoIC8gY29tcHV0ZWRGb250U2l6ZTsKICAgICAgICAgICAgaGVpZ2h0ID0gYm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAvIGNvbXB1dGVkRm9udFNpemU7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtub2RlMiwgbWFrZUxheWVyc1RleHRBYnN0cmFjdCh7CiAgICAgICAgICAgIGNvbnRlbnQ6IG5vZGUyLmlubmVySFRNTCwKICAgICAgICAgICAgd2lkdGgsCiAgICAgICAgICAgIGhlaWdodCwKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0yLAogICAgICAgICAgICBleHRyYSwKICAgICAgICAgICAgd2F0Y2hhYmxlOiB0cnVlCiAgICAgICAgICB9KV0pOwogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBDTEVBTl9DT05URU5UX1BBVFRFUk4gPSBuZXcgUmVnRXhwKCciJywgInVnIik7CiAgICBTRUNPTkRBUllfVU5JQ09ERV9SQU5HRSA9IFsxMTA1OTIwLCAxMTEyMzE5XTsKICAgIF9GT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHsKICAgICAgRm9udEF3ZXNvbWU6IHsKICAgICAgICBub3JtYWw6ICJmYXMiLAogICAgICAgIDQwMDogImZhcyIKICAgICAgfQogICAgfSksIEN0KSwgcm8pLCBkbCk7CiAgICBGT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYID0gT2JqZWN0LmtleXMoX0ZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVgpLnJlZHVjZShmdW5jdGlvbihhY2MsIGtleTIpIHsKICAgICAgYWNjW2tleTIudG9Mb3dlckNhc2UoKV0gPSBfRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWFtrZXkyXTsKICAgICAgcmV0dXJuIGFjYzsKICAgIH0sIHt9KTsKICAgIEZPTlRfRkFNSUxZX1dFSUdIVF9GQUxMQkFDSyA9IE9iamVjdC5rZXlzKEZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVgpLnJlZHVjZShmdW5jdGlvbihhY2MsIGZvbnRGYW1pbHkpIHsKICAgICAgdmFyIHdlaWdodHMgPSBGT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYW2ZvbnRGYW1pbHldOwogICAgICBhY2NbZm9udEZhbWlseV0gPSB3ZWlnaHRzWzkwMF0gfHwgX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdC5lbnRyaWVzKHdlaWdodHMpKVswXVsxXTsKICAgICAgcmV0dXJuIGFjYzsKICAgIH0sIHt9KTsKICAgIGhhc1BzZXVkb0VsZW1lbnQgPSBmdW5jdGlvbiBoYXNQc2V1ZG9FbGVtZW50MihzZWxlY3RvcikgewogICAgICByZXR1cm4gISFzZWxlY3RvciAmJiBQU0VVRE9fRUxFTUVOVFMuc29tZShmdW5jdGlvbihwc2V1ZG9TZWxlY3RvcikgewogICAgICAgIHJldHVybiBzZWxlY3Rvci5pbmNsdWRlcyhwc2V1ZG9TZWxlY3Rvcik7CiAgICAgIH0pOwogICAgfTsKICAgIHBhcnNlQ1NTUnVsZUZvclBzZXVkb3MgPSBmdW5jdGlvbiBwYXJzZUNTU1J1bGVGb3JQc2V1ZG9zMihzZWxlY3RvclRleHQpIHsKICAgICAgaWYgKCFzZWxlY3RvclRleHQpIHJldHVybiBbXTsKICAgICAgdmFyIHNlbGVjdG9yU2V0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgICAgdmFyIHNlbGVjdG9ycyA9IHNlbGVjdG9yVGV4dC5zcGxpdCgvLCg/IVteKCldKlwpKS8pLm1hcChmdW5jdGlvbihzJCQxKSB7CiAgICAgICAgcmV0dXJuIHMkJDEudHJpbSgpOwogICAgICB9KTsKICAgICAgc2VsZWN0b3JzID0gc2VsZWN0b3JzLmZsYXRNYXAoZnVuY3Rpb24oc2VsZWN0b3IyKSB7CiAgICAgICAgcmV0dXJuIHNlbGVjdG9yMi5pbmNsdWRlcygiKCIpID8gc2VsZWN0b3IyIDogc2VsZWN0b3IyLnNwbGl0KCIsIikubWFwKGZ1bmN0aW9uKHMkJDEpIHsKICAgICAgICAgIHJldHVybiBzJCQxLnRyaW0oKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihzZWxlY3RvcnMpLCBfc3RlcDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOyApIHsKICAgICAgICAgIHZhciBzZWxlY3RvciA9IF9zdGVwLnZhbHVlOwogICAgICAgICAgaWYgKGhhc1BzZXVkb0VsZW1lbnQoc2VsZWN0b3IpKSB7CiAgICAgICAgICAgIHZhciBzZWxlY3RvcldpdGhvdXRQc2V1ZG8gPSBQU0VVRE9fRUxFTUVOVFMucmVkdWNlKGZ1bmN0aW9uKGFjYywgcHNldWRvU2VsZWN0b3IpIHsKICAgICAgICAgICAgICByZXR1cm4gYWNjLnJlcGxhY2UocHNldWRvU2VsZWN0b3IsICIiKTsKICAgICAgICAgICAgfSwgc2VsZWN0b3IpOwogICAgICAgICAgICBpZiAoc2VsZWN0b3JXaXRob3V0UHNldWRvICE9PSAiIiAmJiBzZWxlY3RvcldpdGhvdXRQc2V1ZG8gIT09ICIqIikgewogICAgICAgICAgICAgIHNlbGVjdG9yU2V0LmFkZChzZWxlY3RvcldpdGhvdXRQc2V1ZG8pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBfaXRlcmF0b3IuZShlcnIpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIF9pdGVyYXRvci5mKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHNlbGVjdG9yU2V0OwogICAgfTsKICAgIFBzZXVkb0VsZW1lbnRzID0gewogICAgICBob29rczogZnVuY3Rpb24gaG9va3MzKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzOiBmdW5jdGlvbiBtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzKGFjY3VtdWxhdG9yKSB7CiAgICAgICAgICAgIGFjY3VtdWxhdG9yLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sgPSBzZWFyY2hQc2V1ZG9FbGVtZW50czsKICAgICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIHByb3ZpZGVzOiBmdW5jdGlvbiBwcm92aWRlczMocHJvdmlkZXJzMikgewogICAgICAgIHByb3ZpZGVyczIucHNldWRvRWxlbWVudHMyc3ZnID0gZnVuY3Rpb24ocGFyYW1zMikgewogICAgICAgICAgdmFyIF9wYXJhbXMkbm9kZSA9IHBhcmFtczIubm9kZSwgbm9kZTIgPSBfcGFyYW1zJG5vZGUgPT09IHZvaWQgMCA/IERPQ1VNRU5UIDogX3BhcmFtcyRub2RlOwogICAgICAgICAgaWYgKGNvbmZpZzIuc2VhcmNoUHNldWRvRWxlbWVudHMpIHsKICAgICAgICAgICAgc2VhcmNoUHNldWRvRWxlbWVudHMobm9kZTIpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBfdW53YXRjaGVkID0gZmFsc2U7CiAgICBNdXRhdGlvbk9ic2VydmVyJDEgPSB7CiAgICAgIG1peG91dDogZnVuY3Rpb24gbWl4b3V0NigpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgZG9tOiB7CiAgICAgICAgICAgIHVud2F0Y2g6IGZ1bmN0aW9uIHVud2F0Y2goKSB7CiAgICAgICAgICAgICAgZGlzYWJsZU9ic2VydmF0aW9uKCk7CiAgICAgICAgICAgICAgX3Vud2F0Y2hlZCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9LAogICAgICBob29rczogZnVuY3Rpb24gaG9va3M0KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBib290c3RyYXA6IGZ1bmN0aW9uIGJvb3RzdHJhcCgpIHsKICAgICAgICAgICAgb2JzZXJ2ZShjaGFpbkhvb2tzKCJtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzIiwge30pKTsKICAgICAgICAgIH0sCiAgICAgICAgICBub0F1dG86IGZ1bmN0aW9uIG5vQXV0bzMoKSB7CiAgICAgICAgICAgIGRpc2Nvbm5lY3QoKTsKICAgICAgICAgIH0sCiAgICAgICAgICB3YXRjaDogZnVuY3Rpb24gd2F0Y2gyKHBhcmFtczIpIHsKICAgICAgICAgICAgdmFyIG9ic2VydmVNdXRhdGlvbnNSb290ID0gcGFyYW1zMi5vYnNlcnZlTXV0YXRpb25zUm9vdDsKICAgICAgICAgICAgaWYgKF91bndhdGNoZWQpIHsKICAgICAgICAgICAgICBlbmFibGVPYnNlcnZhdGlvbigpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG9ic2VydmUoY2hhaW5Ib29rcygibXV0YXRpb25PYnNlcnZlckNhbGxiYWNrcyIsIHsKICAgICAgICAgICAgICAgIG9ic2VydmVNdXRhdGlvbnNSb290CiAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIHBhcnNlVHJhbnNmb3JtU3RyaW5nID0gZnVuY3Rpb24gcGFyc2VUcmFuc2Zvcm1TdHJpbmcyKHRyYW5zZm9ybVN0cmluZykgewogICAgICB2YXIgdHJhbnNmb3JtMiA9IHsKICAgICAgICBzaXplOiAxNiwKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAsCiAgICAgICAgZmxpcFg6IGZhbHNlLAogICAgICAgIGZsaXBZOiBmYWxzZSwKICAgICAgICByb3RhdGU6IDAKICAgICAgfTsKICAgICAgcmV0dXJuIHRyYW5zZm9ybVN0cmluZy50b0xvd2VyQ2FzZSgpLnNwbGl0KCIgIikucmVkdWNlKGZ1bmN0aW9uKGFjYywgbjEzKSB7CiAgICAgICAgdmFyIHBhcnRzID0gbjEzLnRvTG93ZXJDYXNlKCkuc3BsaXQoIi0iKTsKICAgICAgICB2YXIgZmlyc3QyID0gcGFydHNbMF07CiAgICAgICAgdmFyIHJlc3QgPSBwYXJ0cy5zbGljZSgxKS5qb2luKCItIik7CiAgICAgICAgaWYgKGZpcnN0MiAmJiByZXN0ID09PSAiaCIpIHsKICAgICAgICAgIGFjYy5mbGlwWCA9IHRydWU7CiAgICAgICAgICByZXR1cm4gYWNjOwogICAgICAgIH0KICAgICAgICBpZiAoZmlyc3QyICYmIHJlc3QgPT09ICJ2IikgewogICAgICAgICAgYWNjLmZsaXBZID0gdHJ1ZTsKICAgICAgICAgIHJldHVybiBhY2M7CiAgICAgICAgfQogICAgICAgIHJlc3QgPSBwYXJzZUZsb2F0KHJlc3QpOwogICAgICAgIGlmIChpc05hTihyZXN0KSkgewogICAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgICB9CiAgICAgICAgc3dpdGNoIChmaXJzdDIpIHsKICAgICAgICAgIGNhc2UgImdyb3ciOgogICAgICAgICAgICBhY2Muc2l6ZSA9IGFjYy5zaXplICsgcmVzdDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJzaHJpbmsiOgogICAgICAgICAgICBhY2Muc2l6ZSA9IGFjYy5zaXplIC0gcmVzdDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJsZWZ0IjoKICAgICAgICAgICAgYWNjLnggPSBhY2MueCAtIHJlc3Q7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAicmlnaHQiOgogICAgICAgICAgICBhY2MueCA9IGFjYy54ICsgcmVzdDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJ1cCI6CiAgICAgICAgICAgIGFjYy55ID0gYWNjLnkgLSByZXN0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImRvd24iOgogICAgICAgICAgICBhY2MueSA9IGFjYy55ICsgcmVzdDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJyb3RhdGUiOgogICAgICAgICAgICBhY2Mucm90YXRlID0gYWNjLnJvdGF0ZSArIHJlc3Q7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWNjOwogICAgICB9LCB0cmFuc2Zvcm0yKTsKICAgIH07CiAgICBQb3dlclRyYW5zZm9ybXMgPSB7CiAgICAgIG1peG91dDogZnVuY3Rpb24gbWl4b3V0NygpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgcGFyc2U6IHsKICAgICAgICAgICAgdHJhbnNmb3JtOiBmdW5jdGlvbiB0cmFuc2Zvcm0yKHRyYW5zZm9ybVN0cmluZykgewogICAgICAgICAgICAgIHJldHVybiBwYXJzZVRyYW5zZm9ybVN0cmluZyh0cmFuc2Zvcm1TdHJpbmcpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfSwKICAgICAgaG9va3M6IGZ1bmN0aW9uIGhvb2tzNSgpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgcGFyc2VOb2RlQXR0cmlidXRlczogZnVuY3Rpb24gcGFyc2VOb2RlQXR0cmlidXRlcyhhY2N1bXVsYXRvciwgbm9kZTIpIHsKICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmluZyA9IG5vZGUyLmdldEF0dHJpYnV0ZSgiZGF0YS1mYS10cmFuc2Zvcm0iKTsKICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmluZykgewogICAgICAgICAgICAgIGFjY3VtdWxhdG9yLnRyYW5zZm9ybSA9IHBhcnNlVHJhbnNmb3JtU3RyaW5nKHRyYW5zZm9ybVN0cmluZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIHByb3ZpZGVzOiBmdW5jdGlvbiBwcm92aWRlczQocHJvdmlkZXJzMikgewogICAgICAgIHByb3ZpZGVyczIuZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nID0gZnVuY3Rpb24oX3JlZjIpIHsKICAgICAgICAgIHZhciBtYWluID0gX3JlZjIubWFpbiwgdHJhbnNmb3JtMiA9IF9yZWYyLnRyYW5zZm9ybSwgY29udGFpbmVyV2lkdGggPSBfcmVmMi5jb250YWluZXJXaWR0aCwgaWNvbldpZHRoID0gX3JlZjIuaWNvbldpZHRoOwogICAgICAgICAgdmFyIG91dGVyID0gewogICAgICAgICAgICB0cmFuc2Zvcm06ICJ0cmFuc2xhdGUoIi5jb25jYXQoY29udGFpbmVyV2lkdGggLyAyLCAiIDI1NikiKQogICAgICAgICAgfTsKICAgICAgICAgIHZhciBpbm5lclRyYW5zbGF0ZSA9ICJ0cmFuc2xhdGUoIi5jb25jYXQodHJhbnNmb3JtMi54ICogMzIsICIsICIpLmNvbmNhdCh0cmFuc2Zvcm0yLnkgKiAzMiwgIikgIik7CiAgICAgICAgICB2YXIgaW5uZXJTY2FsZSA9ICJzY2FsZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnNpemUgLyAxNiAqICh0cmFuc2Zvcm0yLmZsaXBYID8gLTEgOiAxKSwgIiwgIikuY29uY2F0KHRyYW5zZm9ybTIuc2l6ZSAvIDE2ICogKHRyYW5zZm9ybTIuZmxpcFkgPyAtMSA6IDEpLCAiKSAiKTsKICAgICAgICAgIHZhciBpbm5lclJvdGF0ZSA9ICJyb3RhdGUoIi5jb25jYXQodHJhbnNmb3JtMi5yb3RhdGUsICIgMCAwKSIpOwogICAgICAgICAgdmFyIGlubmVyID0gewogICAgICAgICAgICB0cmFuc2Zvcm06ICIiLmNvbmNhdChpbm5lclRyYW5zbGF0ZSwgIiAiKS5jb25jYXQoaW5uZXJTY2FsZSwgIiAiKS5jb25jYXQoaW5uZXJSb3RhdGUpCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIHBhdGgyID0gewogICAgICAgICAgICB0cmFuc2Zvcm06ICJ0cmFuc2xhdGUoIi5jb25jYXQoaWNvbldpZHRoIC8gMiAqIC0xLCAiIC0yNTYpIikKICAgICAgICAgIH07CiAgICAgICAgICB2YXIgb3BlcmF0aW9ucyA9IHsKICAgICAgICAgICAgb3V0ZXIsCiAgICAgICAgICAgIGlubmVyLAogICAgICAgICAgICBwYXRoOiBwYXRoMgogICAgICAgICAgfTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHRhZzogImciLAogICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMih7fSwgb3BlcmF0aW9ucy5vdXRlciksCiAgICAgICAgICAgIGNoaWxkcmVuOiBbewogICAgICAgICAgICAgIHRhZzogImciLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKHt9LCBvcGVyYXRpb25zLmlubmVyKSwKICAgICAgICAgICAgICBjaGlsZHJlbjogW3sKICAgICAgICAgICAgICAgIHRhZzogbWFpbi5pY29uLnRhZywKICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBtYWluLmljb24uY2hpbGRyZW4sCiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWFpbi5pY29uLmF0dHJpYnV0ZXMpLCBvcGVyYXRpb25zLnBhdGgpCiAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfV0KICAgICAgICAgIH07CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIEFMTF9TUEFDRSA9IHsKICAgICAgeDogMCwKICAgICAgeTogMCwKICAgICAgd2lkdGg6ICIxMDAlIiwKICAgICAgaGVpZ2h0OiAiMTAwJSIKICAgIH07CiAgICBNYXNrcyA9IHsKICAgICAgaG9va3M6IGZ1bmN0aW9uIGhvb2tzNigpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgcGFyc2VOb2RlQXR0cmlidXRlczogZnVuY3Rpb24gcGFyc2VOb2RlQXR0cmlidXRlcyhhY2N1bXVsYXRvciwgbm9kZTIpIHsKICAgICAgICAgICAgdmFyIG1hc2tEYXRhID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJkYXRhLWZhLW1hc2siKTsKICAgICAgICAgICAgdmFyIG1hc2sgPSAhbWFza0RhdGEgPyBlbXB0eUNhbm9uaWNhbEljb24oKSA6IGdldENhbm9uaWNhbEljb24obWFza0RhdGEuc3BsaXQoIiAiKS5tYXAoZnVuY3Rpb24oaTExKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGkxMS50cmltKCk7CiAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgaWYgKCFtYXNrLnByZWZpeCkgewogICAgICAgICAgICAgIG1hc2sucHJlZml4ID0gZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGFjY3VtdWxhdG9yLm1hc2sgPSBtYXNrOwogICAgICAgICAgICBhY2N1bXVsYXRvci5tYXNrSWQgPSBub2RlMi5nZXRBdHRyaWJ1dGUoImRhdGEtZmEtbWFzay1pZCIpOwogICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfSwKICAgICAgcHJvdmlkZXM6IGZ1bmN0aW9uIHByb3ZpZGVzNShwcm92aWRlcnMyKSB7CiAgICAgICAgcHJvdmlkZXJzMi5nZW5lcmF0ZUFic3RyYWN0TWFzayA9IGZ1bmN0aW9uKF9yZWYyKSB7CiAgICAgICAgICB2YXIgY2hpbGRyZW4yID0gX3JlZjIuY2hpbGRyZW4sIGF0dHJpYnV0ZXMgPSBfcmVmMi5hdHRyaWJ1dGVzLCBtYWluID0gX3JlZjIubWFpbiwgbWFzayA9IF9yZWYyLm1hc2ssIGV4cGxpY2l0TWFza0lkID0gX3JlZjIubWFza0lkLCB0cmFuc2Zvcm0yID0gX3JlZjIudHJhbnNmb3JtOwogICAgICAgICAgdmFyIG1haW5XaWR0aCA9IG1haW4ud2lkdGgsIG1haW5QYXRoID0gbWFpbi5pY29uOwogICAgICAgICAgdmFyIG1hc2tXaWR0aCA9IG1hc2sud2lkdGgsIG1hc2tQYXRoID0gbWFzay5pY29uOwogICAgICAgICAgdmFyIHRyYW5zID0gdHJhbnNmb3JtRm9yU3ZnKHsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0yLAogICAgICAgICAgICBjb250YWluZXJXaWR0aDogbWFza1dpZHRoLAogICAgICAgICAgICBpY29uV2lkdGg6IG1haW5XaWR0aAogICAgICAgICAgfSk7CiAgICAgICAgICB2YXIgbWFza1JlY3QgPSB7CiAgICAgICAgICAgIHRhZzogInJlY3QiLAogICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgQUxMX1NQQUNFKSwge30sIHsKICAgICAgICAgICAgICBmaWxsOiAid2hpdGUiCiAgICAgICAgICAgIH0pCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIG1hc2tJbm5lckdyb3VwQ2hpbGRyZW5NaXhpbiA9IG1haW5QYXRoLmNoaWxkcmVuID8gewogICAgICAgICAgICBjaGlsZHJlbjogbWFpblBhdGguY2hpbGRyZW4ubWFwKGZpbGxCbGFjaykKICAgICAgICAgIH0gOiB7fTsKICAgICAgICAgIHZhciBtYXNrSW5uZXJHcm91cCA9IHsKICAgICAgICAgICAgdGFnOiAiZyIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKHt9LCB0cmFucy5pbm5lciksCiAgICAgICAgICAgIGNoaWxkcmVuOiBbZmlsbEJsYWNrKF9vYmplY3RTcHJlYWQyKHsKICAgICAgICAgICAgICB0YWc6IG1haW5QYXRoLnRhZywKICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbWFpblBhdGguYXR0cmlidXRlcyksIHRyYW5zLnBhdGgpCiAgICAgICAgICAgIH0sIG1hc2tJbm5lckdyb3VwQ2hpbGRyZW5NaXhpbikpXQogICAgICAgICAgfTsKICAgICAgICAgIHZhciBtYXNrT3V0ZXJHcm91cCA9IHsKICAgICAgICAgICAgdGFnOiAiZyIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKHt9LCB0cmFucy5vdXRlciksCiAgICAgICAgICAgIGNoaWxkcmVuOiBbbWFza0lubmVyR3JvdXBdCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIG1hc2tJZCA9ICJtYXNrLSIuY29uY2F0KGV4cGxpY2l0TWFza0lkIHx8IG5leHRVbmlxdWVJZCgpKTsKICAgICAgICAgIHZhciBjbGlwSWQgPSAiY2xpcC0iLmNvbmNhdChleHBsaWNpdE1hc2tJZCB8fCBuZXh0VW5pcXVlSWQoKSk7CiAgICAgICAgICB2YXIgbWFza1RhZyA9IHsKICAgICAgICAgICAgdGFnOiAibWFzayIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBBTExfU1BBQ0UpLCB7fSwgewogICAgICAgICAgICAgIGlkOiBtYXNrSWQsCiAgICAgICAgICAgICAgbWFza1VuaXRzOiAidXNlclNwYWNlT25Vc2UiLAogICAgICAgICAgICAgIG1hc2tDb250ZW50VW5pdHM6ICJ1c2VyU3BhY2VPblVzZSIKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIGNoaWxkcmVuOiBbbWFza1JlY3QsIG1hc2tPdXRlckdyb3VwXQogICAgICAgICAgfTsKICAgICAgICAgIHZhciBkZWZzID0gewogICAgICAgICAgICB0YWc6ICJkZWZzIiwKICAgICAgICAgICAgY2hpbGRyZW46IFt7CiAgICAgICAgICAgICAgdGFnOiAiY2xpcFBhdGgiLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICAgICAgICAgIGlkOiBjbGlwSWQKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGNoaWxkcmVuOiBkZUdyb3VwKG1hc2tQYXRoKQogICAgICAgICAgICB9LCBtYXNrVGFnXQogICAgICAgICAgfTsKICAgICAgICAgIGNoaWxkcmVuMi5wdXNoKGRlZnMsIHsKICAgICAgICAgICAgdGFnOiAicmVjdCIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKHsKICAgICAgICAgICAgICAiZmlsbCI6ICJjdXJyZW50Q29sb3IiLAogICAgICAgICAgICAgICJjbGlwLXBhdGgiOiAidXJsKCMiLmNvbmNhdChjbGlwSWQsICIpIiksCiAgICAgICAgICAgICAgIm1hc2siOiAidXJsKCMiLmNvbmNhdChtYXNrSWQsICIpIikKICAgICAgICAgICAgfSwgQUxMX1NQQUNFKQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4yLAogICAgICAgICAgICBhdHRyaWJ1dGVzCiAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBNaXNzaW5nSWNvbkluZGljYXRvciA9IHsKICAgICAgcHJvdmlkZXM6IGZ1bmN0aW9uIHByb3ZpZGVzNihwcm92aWRlcnMyKSB7CiAgICAgICAgdmFyIHJlZHVjZU1vdGlvbiA9IGZhbHNlOwogICAgICAgIGlmIChXSU5ET1cubWF0Y2hNZWRpYSkgewogICAgICAgICAgcmVkdWNlTW90aW9uID0gV0lORE9XLm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlczsKICAgICAgICB9CiAgICAgICAgcHJvdmlkZXJzMi5taXNzaW5nSWNvbkFic3RyYWN0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgZ0NoaWxkcmVuID0gW107CiAgICAgICAgICB2YXIgRklMTCA9IHsKICAgICAgICAgICAgZmlsbDogImN1cnJlbnRDb2xvciIKICAgICAgICAgIH07CiAgICAgICAgICB2YXIgQU5JTUFUSU9OX0JBU0UgPSB7CiAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGU6ICJYTUwiLAogICAgICAgICAgICByZXBlYXRDb3VudDogImluZGVmaW5pdGUiLAogICAgICAgICAgICBkdXI6ICIycyIKICAgICAgICAgIH07CiAgICAgICAgICBnQ2hpbGRyZW4ucHVzaCh7CiAgICAgICAgICAgIHRhZzogInBhdGgiLAogICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgRklMTCksIHt9LCB7CiAgICAgICAgICAgICAgZDogIk0xNTYuNSw0NDcuN2wtMTIuNiwyOS41Yy0xOC43LTkuNS0zNS45LTIxLjItNTEuNS0zNC45bDIyLjctMjIuN0MxMjcuNiw0MzAuNSwxNDEuNSw0NDAsMTU2LjUsNDQ3Ljd6IE00MC42LDI3Mkg4LjUgYzEuNCwyMS4yLDUuNCw0MS43LDExLjcsNjEuMUw1MCwzMjEuMkM0NS4xLDMwNS41LDQxLjgsMjg5LDQwLjYsMjcyeiBNNDAuNiwyNDBjMS40LTE4LjgsNS4yLTM3LDExLjEtNTQuMWwtMjkuNS0xMi42IEMxNC43LDE5NC4zLDEwLDIxNi43LDguNSwyNDBINDAuNnogTTY0LjMsMTU2LjVjNy44LTE0LjksMTcuMi0yOC44LDI4LjEtNDEuNUw2OS43LDkyLjNjLTEzLjcsMTUuNi0yNS41LDMyLjgtMzQuOSw1MS41IEw2NC4zLDE1Ni41eiBNMzk3LDQxOS42Yy0xMy45LDEyLTI5LjQsMjIuMy00Ni4xLDMwLjRsMTEuOSwyOS44YzIwLjctOS45LDM5LjgtMjIuNiw1Ni45LTM3LjZMMzk3LDQxOS42eiBNMTE1LDkyLjQgYzEzLjktMTIsMjkuNC0yMi4zLDQ2LjEtMzAuNGwtMTEuOS0yOS44Yy0yMC43LDkuOS0zOS44LDIyLjYtNTYuOCwzNy42TDExNSw5Mi40eiBNNDQ3LjcsMzU1LjVjLTcuOCwxNC45LTE3LjIsMjguOC0yOC4xLDQxLjUgbDIyLjcsMjIuN2MxMy43LTE1LjYsMjUuNS0zMi45LDM0LjktNTEuNUw0NDcuNywzNTUuNXogTTQ3MS40LDI3MmMtMS40LDE4LjgtNS4yLDM3LTExLjEsNTQuMWwyOS41LDEyLjYgYzcuNS0yMS4xLDEyLjItNDMuNSwxMy42LTY2LjhINDcxLjR6IE0zMjEuMiw0NjJjLTE1LjcsNS0zMi4yLDguMi00OS4yLDkuNHYzMi4xYzIxLjItMS40LDQxLjctNS40LDYxLjEtMTEuN0wzMjEuMiw0NjJ6IE0yNDAsNDcxLjRjLTE4LjgtMS40LTM3LTUuMi01NC4xLTExLjFsLTEyLjYsMjkuNWMyMS4xLDcuNSw0My41LDEyLjIsNjYuOCwxMy42VjQ3MS40eiBNNDYyLDE5MC44YzUsMTUuNyw4LjIsMzIuMiw5LjQsNDkuMmgzMi4xIGMtMS40LTIxLjItNS40LTQxLjctMTEuNy02MS4xTDQ2MiwxOTAuOHogTTkyLjQsMzk3Yy0xMi0xMy45LTIyLjMtMjkuNC0zMC40LTQ2LjFsLTI5LjgsMTEuOWM5LjksMjAuNywyMi42LDM5LjgsMzcuNiw1Ni45IEw5Mi40LDM5N3ogTTI3Miw0MC42YzE4LjgsMS40LDM2LjksNS4yLDU0LjEsMTEuMWwxMi42LTI5LjVDMzE3LjcsMTQuNywyOTUuMywxMCwyNzIsOC41VjQwLjZ6IE0xOTAuOCw1MCBjMTUuNy01LDMyLjItOC4yLDQ5LjItOS40VjguNWMtMjEuMiwxLjQtNDEuNyw1LjQtNjEuMSwxMS43TDE5MC44LDUweiBNNDQyLjMsOTIuM0w0MTkuNiwxMTVjMTIsMTMuOSwyMi4zLDI5LjQsMzAuNSw0Ni4xIGwyOS44LTExLjlDNDcwLDEyOC41LDQ1Ny4zLDEwOS40LDQ0Mi4zLDkyLjN6IE0zOTcsOTIuNGwyMi43LTIyLjdjLTE1LjYtMTMuNy0zMi44LTI1LjUtNTEuNS0zNC45bC0xMi42LDI5LjUgQzM3MC40LDcyLjEsMzg0LjQsODEuNSwzOTcsOTIuNHoiCiAgICAgICAgICAgIH0pCiAgICAgICAgICB9KTsKICAgICAgICAgIHZhciBPUEFDSVRZX0FOSU1BVEUgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgQU5JTUFUSU9OX0JBU0UpLCB7fSwgewogICAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiAib3BhY2l0eSIKICAgICAgICAgIH0pOwogICAgICAgICAgdmFyIGRvdCA9IHsKICAgICAgICAgICAgdGFnOiAiY2lyY2xlIiwKICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIEZJTEwpLCB7fSwgewogICAgICAgICAgICAgIGN4OiAiMjU2IiwKICAgICAgICAgICAgICBjeTogIjM2NCIsCiAgICAgICAgICAgICAgcjogIjI4IgogICAgICAgICAgICB9KSwKICAgICAgICAgICAgY2hpbGRyZW46IFtdCiAgICAgICAgICB9OwogICAgICAgICAgaWYgKCFyZWR1Y2VNb3Rpb24pIHsKICAgICAgICAgICAgZG90LmNoaWxkcmVuLnB1c2goewogICAgICAgICAgICAgIHRhZzogImFuaW1hdGUiLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBBTklNQVRJT05fQkFTRSksIHt9LCB7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiAiciIsCiAgICAgICAgICAgICAgICB2YWx1ZXM6ICIyODsxNDsyODsyODsxNDsyODsiCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgIHRhZzogImFuaW1hdGUiLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBPUEFDSVRZX0FOSU1BVEUpLCB7fSwgewogICAgICAgICAgICAgICAgdmFsdWVzOiAiMTswOzE7MTswOzE7IgogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgZ0NoaWxkcmVuLnB1c2goZG90KTsKICAgICAgICAgIGdDaGlsZHJlbi5wdXNoKHsKICAgICAgICAgICAgdGFnOiAicGF0aCIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBGSUxMKSwge30sIHsKICAgICAgICAgICAgICBvcGFjaXR5OiAiMSIsCiAgICAgICAgICAgICAgZDogIk0yNjMuNywzMTJoLTE2Yy02LjYsMC0xMi01LjQtMTItMTJjMC03MSw3Ny40LTYzLjksNzcuNC0xMDcuOGMwLTIwLTE3LjgtNDAuMi01Ny40LTQwLjJjLTI5LjEsMC00NC4zLDkuNi01OS4yLDI4LjcgYy0zLjksNS0xMS4xLDYtMTYuMiwyLjRsLTEzLjEtOS4yYy01LjYtMy45LTYuOS0xMS44LTIuNi0xNy4yYzIxLjItMjcuMiw0Ni40LTQ0LjcsOTEuMi00NC43YzUyLjMsMCw5Ny40LDI5LjgsOTcuNCw4MC4yIGMwLDY3LjYtNzcuNCw2My41LTc3LjQsMTA3LjhDMjc1LjcsMzA2LjYsMjcwLjMsMzEyLDI2My43LDMxMnoiCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBjaGlsZHJlbjogcmVkdWNlTW90aW9uID8gW10gOiBbewogICAgICAgICAgICAgIHRhZzogImFuaW1hdGUiLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBPUEFDSVRZX0FOSU1BVEUpLCB7fSwgewogICAgICAgICAgICAgICAgdmFsdWVzOiAiMTswOzA7MDswOzE7IgogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgIH1dCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmICghcmVkdWNlTW90aW9uKSB7CiAgICAgICAgICAgIGdDaGlsZHJlbi5wdXNoKHsKICAgICAgICAgICAgICB0YWc6ICJwYXRoIiwKICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgRklMTCksIHt9LCB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAiMCIsCiAgICAgICAgICAgICAgICBkOiAiTTIzMi41LDEzNC41bDcsMTY4YzAuMyw2LjQsNS42LDExLjUsMTIsMTEuNWg5YzYuNCwwLDExLjctNS4xLDEyLTExLjVsNy0xNjhjMC4zLTYuOC01LjItMTIuNS0xMi0xMi41aC0yMyBDMjM3LjcsMTIyLDIzMi4yLDEyNy43LDIzMi41LDEzNC41eiIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICBjaGlsZHJlbjogW3sKICAgICAgICAgICAgICAgIHRhZzogImFuaW1hdGUiLAogICAgICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIE9QQUNJVFlfQU5JTUFURSksIHt9LCB7CiAgICAgICAgICAgICAgICAgIHZhbHVlczogIjA7MDsxOzE7MDswOyIKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0YWc6ICJnIiwKICAgICAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgICAgIGNsYXNzOiAibWlzc2luZyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY2hpbGRyZW46IGdDaGlsZHJlbgogICAgICAgICAgfTsKICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgU3ZnU3ltYm9scyA9IHsKICAgICAgaG9va3M6IGZ1bmN0aW9uIGhvb2tzNygpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgcGFyc2VOb2RlQXR0cmlidXRlczogZnVuY3Rpb24gcGFyc2VOb2RlQXR0cmlidXRlcyhhY2N1bXVsYXRvciwgbm9kZTIpIHsKICAgICAgICAgICAgdmFyIHN5bWJvbERhdGEgPSBub2RlMi5nZXRBdHRyaWJ1dGUoImRhdGEtZmEtc3ltYm9sIik7CiAgICAgICAgICAgIHZhciBzeW1ib2wgPSBzeW1ib2xEYXRhID09PSBudWxsID8gZmFsc2UgOiBzeW1ib2xEYXRhID09PSAiIiA/IHRydWUgOiBzeW1ib2xEYXRhOwogICAgICAgICAgICBhY2N1bXVsYXRvclsic3ltYm9sIl0gPSBzeW1ib2w7CiAgICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgcGx1Z2lucyA9IFtJbmplY3RDU1MsIFJlcGxhY2VFbGVtZW50cywgTGF5ZXJzLCBMYXllcnNDb3VudGVyLCBMYXllcnNUZXh0LCBQc2V1ZG9FbGVtZW50cywgTXV0YXRpb25PYnNlcnZlciQxLCBQb3dlclRyYW5zZm9ybXMsIE1hc2tzLCBNaXNzaW5nSWNvbkluZGljYXRvciwgU3ZnU3ltYm9sc107CiAgICByZWdpc3RlclBsdWdpbnMocGx1Z2lucywgewogICAgICBtaXhvdXRzVG86IGFwaQogICAgfSk7CiAgICBub0F1dG8kMSA9IGFwaS5ub0F1dG87CiAgICBjb25maWckMSA9IGFwaS5jb25maWc7CiAgICBsaWJyYXJ5JDEgPSBhcGkubGlicmFyeTsKICAgIGRvbSQxID0gYXBpLmRvbTsKICAgIHBhcnNlJDEgPSBhcGkucGFyc2U7CiAgICBmaW5kSWNvbkRlZmluaXRpb24kMSA9IGFwaS5maW5kSWNvbkRlZmluaXRpb247CiAgICB0b0h0bWwkMSA9IGFwaS50b0h0bWw7CiAgICBpY29uMiA9IGFwaS5pY29uOwogICAgbGF5ZXIgPSBhcGkubGF5ZXI7CiAgICB0ZXh0OCA9IGFwaS50ZXh0OwogICAgY291bnRlciA9IGFwaS5jb3VudGVyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGZvcnRhd2Vzb21lK2ZyZWUtYnJhbmRzLXN2Zy1pY29uc0A3LjEuMC9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZyZWUtYnJhbmRzLXN2Zy1pY29ucy9pbmRleC5tanMKdmFyIHByZWZpeCwgZmFTcXVhcmVHaXRodWIsIGZhR2l0aHViU3F1YXJlLCBmYVRoaW5rUGVha3MsIGZhR29vZ2xlRHJpdmUsIGZhQXV0b3ByZWZpeGVyLCBmYVNxdWFyZVZpYWRlbywgZmFWaWFkZW9TcXVhcmUsIGZhQ3BhbmVsLCBmYU1lbmRlbGV5LCBmYURyYWZ0MmRpZ2l0YWwsIGZhUmVwbHlkLCBmYUVtcGlyZSwgZmFBY2Nlc3NpYmxlSWNvbiwgZmFRdW9yYSwgZmFDY0pjYiwgZmFGZWRvcmEsIGZhRHVvbGluZ28sIGZhRmlyc3RkcmFmdCwgZmFGcmVlYnNkLCBmYU9keXNlZSwgZmFHZ0NpcmNsZSwgZmFDbG91ZGZsYXJlLCBmYUhhY2tlcnJhbmssIGZhU2t5YXRsYXMsIGZhRGVza3BybywgZmFSZXNvbHZpbmcsIGZhQmxhY2tiZXJyeSwgZmFTdHJpcGVTLCBmYVNxdWFyZUJlaGFuY2UsIGZhQmVoYW5jZVNxdWFyZSwgZmFTZXJ2aWNlc3RhY2ssIGZhUm9ja2V0Y2hhdCwgZmFSZWJlbCwgZmFTcXVhcmVXZWJBd2Vzb21lLCBmYUxpbmt0cmVlLCBmYVNpbXBseWJ1aWx0LCBmYVN0dWJiZXIsIGZhQXBwZXIsIGZhR29vZ2xlU2Nob2xhciwgZmFZYXJuLCBmYVN0YWNrT3ZlcmZsb3csIGZhQmx1ZXRvb3RoLCBmYUNyZWF0aXZlQ29tbW9uc05jSnAsIGZhUmVkZGl0LCBmYUNvbm5lY3RkZXZlbG9wLCBmYVJlc2VhcmNoZ2F0ZSwgZmFTaWduYWxNZXNzZW5nZXIsIGZhWGluZywgZmFTcXVhcmVKcywgZmFKc1NxdWFyZSwgZmFGb250aWNvbnMsIGZhVXBzLCBmYUFtYXpvblBheSwgZmFQYW5kb3JhLCBmYU9wZW5pZCwgZmFWc2NvLCBmYVVidW50dSwgZmFWaWFjb2luLCBmYVpoaWh1LCBmYVlhbmRleCwgZmFQaXhpdiwgZmFPcGVuYWksIGZhU2l0aCwgZmFOZmNEaXJlY3Rpb25hbCwgZmFDcmVhdGl2ZUNvbW1vbnNCeSwgZmFVbWJyYWNvLCBmYUhvb2xpLCBmYVNxdWFyZUdpdCwgZmFHaXRTcXVhcmUsIGZhT2Rub2tsYXNzbmlraSwgZmFEcnVwYWwsIGZhQmxvZ2dlckIsIGZhSW52aXNpb24sIGZhRmFjZWJvb2tGLCBmYUNlbnRvcywgZmFDY0FtYXpvblBheSwgZmFFYmF5LCBmYUNvbnRhbywgZmFFbGxvLCBmYVNpc3RyaXgsIGZhUGVyaXNjb3BlLCBmYUV4cGVkaXRlZHNzbCwgZmFOYXBzdGVyLCBmYURlbGljaW91cywgZmFHdWlsZGVkLCBmYVhib3gsIGZhVW50YXBwZCwgZmFHb29nbGVQbHVzRywgZmFHaXRodWJBbHQsIGZhR2V0UG9ja2V0LCBmYUdsaWRlLCBmYUJpdHksIGZhV3BleHBsb3JlciwgZmFNZWdhcG9ydCwgZmFNZGIsIGZhUGFnZTQsIGZhVGhlUmVkWWV0aSwgZmFKaXJhLCBmYUZlZGV4LCBmYUV2ZXJub3RlLCBmYVVzYiwgZmFBbmdyeWNyZWF0aXZlLCBmYU1penVuaSwgZmFJdGNoSW8sIGZhV2luZG93cywgZmFTdHVtYmxldXBvbiwgZmFHb29nbGUsIGZhRGlzY29yZCwgZmFIYWNrZXJOZXdzLCBmYUVsZXZlbnR5LCBmYTExdHksIGZhVGVhbXNwZWFrLCBmYVN1cHBsZSwgZmFTcXVhcmVUd2l0dGVyLCBmYVR3aXR0ZXJTcXVhcmUsIGZhRm9udEF3ZXNvbWUsIGZhRm9udEF3ZXNvbWVGbGFnLCBmYUZvbnRBd2Vzb21lTG9nb0Z1bGwsIGZhV2lyc2luZGhhbmR3ZXJrLCBmYVdzaCwgZmFDb25mbHVlbmNlLCBmYURpZ2csIGZhVGhyZWFkcywgZmFXcHJlc3NyLCBmYVJlbmRhY3QsIGZhWW9hc3QsIGZhTmltYmxyLCBmYVBpeGVsZmVkLCBmYVlhaG9vLCBmYUJsdWVza3ksIGZhU2NyaWJkLCBmYUNyZWF0aXZlQ29tbW9uc1BkLCBmYUVhcmx5YmlyZHMsIGZhU3F1YXJlT2Rub2tsYXNzbmlraSwgZmFPZG5va2xhc3NuaWtpU3F1YXJlLCBmYU1hcmtkb3duLCBmYVR5cG8zLCBmYUpvb21sYSwgZmFXZWl4aW4sIGZhR3J1bnQsIGZhUm9ja3JtcywgZmFVbnNwbGFzaCwgZmFTcXVhcmVJbnN0YWdyYW0sIGZhSW5zdGFncmFtU3F1YXJlLCBmYUZpcnN0T3JkZXJBbHQsIGZhRnVsY3J1bSwgZmFCcmF2ZVJldmVyc2UsIGZhQXZpYW5leCwgZmFOczgsIGZhU3F1YXJlUGludGVyZXN0LCBmYVBpbnRlcmVzdFNxdWFyZSwgZmFCbHVldG9vdGhCLCBmYUdyaXBmaXJlLCBmYVNxdWFyZUdvb2dsZVBsdXMsIGZhR29vZ2xlUGx1c1NxdWFyZSwgZmFBcHBTdG9yZSwgZmFXaXgsIGZhSW50ZXJjb20sIGZhUmVhY3RldXJvcGUsIGZhV2F6ZSwgZmFDcmVhdGl2ZUNvbW1vbnNSZW1peCwgZmFCYW5kY2FtcCwgZmFTcXVhcmVXZWJBd2Vzb21lU3Ryb2tlLCBmYVZpbWVvViwgZmFTdHJhdmEsIGZhVW5pcmVnaXN0cnksIGZhQ2NEaW5lcnNDbHViLCBmYVBpbnRlcmVzdCwgZmFBbGdvbGlhLCBmYVN0YWNrcGF0aCwgZmFPY3RvcHVzRGVwbG95LCBmYVlhbW1lciwgZmFNb2R4LCBmYVNxdWFyZVRocmVhZHMsIGZhT2xkUmVwdWJsaWMsIGZhU3VzZSwgZmFBcHBTdG9yZUlvcywgZmFTcXVhcmVEcmliYmJsZSwgZmFEcmliYmJsZVNxdWFyZSwgZmFVaWtpdCwgZmFTdXBlcnBvd2VycywgZmFZb3V0dWJlLCBmYUVtYmVyLCBmYUJvb3RzdHJhcCwgZmFJdHVuZXMsIGZhU3F1YXJlWGluZywgZmFYaW5nU3F1YXJlLCBmYUNzczNBbHQsIGZhU3F1YXJlc3BhY2UsIGZhVHJlbGxvLCBmYVZpYWRlbywgZmFTZWFyY2hlbmdpbiwgZmFQYXlwYWwsIGZhU3F1YXJlQmx1ZXNreSwgZmFEQW5kREJleW9uZCwgZmFNaWNyb3NvZnQsIGZhRmx5LCBmYUNjU3RyaXBlLCBmYVdvcmRwcmVzc1NpbXBsZSwgZmFTZWxsc3ksIGZhRGFzaGN1YmUsIGZhR2l0dGVyLCBmYVdvbGZQYWNrQmF0dGFsaW9uLCBmYUxhc3RmbSwgZmFTaG9wd2FyZSwgZmFCbG9nZ2VyLCBmYUVkZ2UsIGZhSW94aG9zdCwgZmFTY2hsaXgsIGZhREFuZEQsIGZhVnVlanMsIGZhTWV0YSwgZmFDcmVhdGl2ZUNvbW1vbnNTaGFyZSwgZmFTdHVkaW92aW5hcmksIGZhQml0YnVja2V0LCBmYVZrLCBmYUdpdGh1YiwgZmFDb2RpZXBpZSwgZmFQaWVkUGlwZXIsIGZhUmFzcGJlcnJ5UGksIGZhQ3NzMywgZmFIdWJzcG90LCBmYUNtcGxpZCwgZmFEeWFsb2csIGZhRWxlbWVudG9yLCBmYUZpcnN0T3JkZXIsIGZhRHJpYmJibGUsIGZhTGlua2VkaW4sIGZhQ2NQYXlwYWwsIGZhRGhsLCBmYVRleCwgZmFTaG9waWZ5LCBmYVNxdWFyZVJlZGRpdCwgZmFSZWRkaXRTcXVhcmUsIGZhQ3JlYXRpdmVDb21tb25zTmMsIGZhR2FsYWN0aWNSZXB1YmxpYywgZmFGYWNlYm9vaywgZmFHaXRsYWIsIGZhUXEsIGZhU3RyaXBlLCBmYURhaWx5bW90aW9uLCBmYVN0ZWFtLCBmYVNuYXBjaGF0LCBmYVNuYXBjaGF0R2hvc3QsIGZhR2FsYWN0aWNTZW5hdGUsIGZhUGhvZW5peEZyYW1ld29yaywgZmFHaXQsIGZhT3B0aW5Nb25zdGVyLCBmYUplbmtpbnMsIGZhU2xpZGVzaGFyZSwgZmFVYmVyLCBmYURpZ2l0YWxPY2VhbiwgZmFTb3VuZGNsb3VkLCBmYVNxdWFyZUZpZ21hLCBmYUNyZWF0aXZlQ29tbW9uc1NhLCBmYUNocm9tZSwgZmFUcmFkZUZlZGVyYXRpb24sIGZhVmFhZGluLCBmYURldmlhbnRhcnQsIGZhTWVkaXVtLCBmYU1lZGl1bU0sIGZhT3BlbmNhcnQsIGZhWUNvbWJpbmF0b3IsIGZhTGluZSwgZmFBbWlsaWEsIGZhQXN5bW1ldHJpaywgZmFQaGFicmljYXRvciwgZmFCb3RzLCBmYVZpbmUsIGZhTWVkcnQsIGZhT3NpLCBmYUdnLCBmYUJ1eXNlbGxhZHMsIGZhR29vZ2xlUGx1cywgZmFTY3JlZW5wYWwsIGZhQml0Y29pbiwgZmFTd2lmdCwgZmFGaWxlc1BpbndoZWVsLCBmYUxhcmF2ZWwsIGZhV3Bmb3JtcywgZmFTcGVha2VyRGVjaywgZmFGbGlja3IsIGZhQ2NWaXNhLCBmYVVwd29yaywgZmFLYWthb1RhbGssIGZhRmx1dHRlciwgZmFCdWZmZXIsIGZhR3JhdGlwYXksIGZhR29vZ2xlUGF5LCBmYUFwcGxlLCBmYVR1bWJsciwgZmFQaG9lbml4U3F1YWRyb24sIGZhQ2VudGVyY29kZSwgZmFEZWJpYW4sIGZhTWFzdG9kb24sIGZhU2tldGNoLCBmYVdlYkF3ZXNvbWUsIGZhU2FzcywgZmFTcXVhcmVXaGF0c2FwcCwgZmFXaGF0c2FwcFNxdWFyZSwgZmFTa3lwZSwgZmFBbmd1bGFyLCBmYU9wZW5zdXNlLCBmYURyb3Bib3gsIGZhRGVlemVyLCBmYUNyZWF0aXZlQ29tbW9uc1NhbXBsaW5nLCBmYUplZGlPcmRlciwgZmFSUHJvamVjdCwgZmFJbnN0YWxvZCwgZmFDYW5hZGlhbk1hcGxlTGVhZiwgZmFFdGhlcmV1bSwgZmFIb3V6eiwgZmFWaWJlciwgZmFLaWNrc3RhcnRlciwgZmFTcXVhcmVLaWNrc3RhcnRlciwgZmFTcG90aWZ5LCBmYUxlYW5wdWIsIGZhSmF2YSwgZmFOZmNTeW1ib2wsIGZhV29kdSwgZmFTcXVhcmVTdGVhbSwgZmFTdGVhbVNxdWFyZSwgZmFDcmVhdGl2ZUNvbW1vbnNOY0V1LCBmYU5wbSwgZmFDbG91ZHNjYWxlLCBmYVRoZW1lY28sIGZhR29vZ2xlUGxheSwgZmFLb3J2dWUsIGZhVzNjLCBmYUdyYXYsIGZhQXdzLCBmYUdsaWRlRywgZmFKc2ZpZGRsZSwgZmFLZXliYXNlLCBmYUx1bW9uRHJvcCwgZmFXZWVibHksIGZhRG9ja2VyLCBmYU1hZ2VudG8sIGZhR2l0QWx0LCBmYUZpcmVmb3hCcm93c2VyLCBmYUNsb3Vkc21pdGgsIGZhV2l6YXJkc09mVGhlQ29hc3QsIGZhQ3JlYXRpdmVDb21tb25zTmQsIGZhVXNwcywgZmFTcXVhcmVMZXR0ZXJib3hkLCBmYU1hbmRhbG9yaWFuLCBmYVNsYWNrLCBmYVNsYWNrSGFzaCwgZmFBbmdlbGxpc3QsIGZhQW5kcm9pZCwgZmFNZWV0dXAsIGZhRm9udGljb25zRmksIGZhUGFsZmVkLCBmYVdwYmVnaW5uZXIsIGZhRGlhc3BvcmEsIGZhUHJvZHVjdEh1bnQsIGZhU3F1YXJlVXB3b3JrLCBmYUN1dHRsZWZpc2gsIGZhTWVkYXBwcywgZmFQaXgsIGZhU3F1YXJlVHVtYmxyLCBmYVR1bWJsclNxdWFyZSwgZmFSZWFjdCwgZmFKeGwsIGZhU3F1YXJlTGlua2VkaW4sIGZhQ3NzLCBmYUhhc2hub2RlLCBmYVJlZGRpdEFsaWVuLCBmYVRpa3RvaywgZmFXb3JkcHJlc3MsIGZhSWRlYWwsIGZhUGllZFBpcGVyUHAsIGZhVXNzdW5uYWgsIGZhRm9ydEF3ZXNvbWVBbHQsIGZhQnVyb21vYmVsZXhwZXJ0ZSwgZmFCaWxpYmlsaSwgZmFOZW9zLCBmYURldiwgZmFIb3RqYXIsIGZhRG9jaHViLCBmYVZpbWVvLCBmYU1heGNkbiwgZmFTcXVhcmVGb250QXdlc29tZVN0cm9rZSwgZmFGb250QXdlc29tZUFsdCwgZmFTcGVha2FwLCBmYUZhbnRhc3lGbGlnaHRHYW1lcywgZmFMaW51eCwgZmFDb3R0b25CdXJlYXUsIGZhR29vZ2xlV2FsbGV0LCBmYUZvdXJzcXVhcmUsIGZhU2hpcnRzaW5idWxrLCBmYU1pbnRiaXQsIGZhU3RheWxpbmtlZCwgZmFXZWJmbG93LCBmYVJlbnJlbiwgZmFSZXYsIGZhS2V5Y2RuLCBmYUhpcmVBSGVscGVyLCBmYVNxdWFyZUhhY2tlck5ld3MsIGZhSGFja2VyTmV3c1NxdWFyZSwgZmFDcmVhdGl2ZUNvbW1vbnNQZEFsdCwgZmFPcmNpZCwgZmFCZWhhbmNlLCBmYU1vbmVybywgZmFGaWdtYSwgZmFJbnN0YWdyYW0sIGZhUGVyYnl0ZSwgZmFTcXVhcmVWaW1lbywgZmFWaW1lb1NxdWFyZSwgZmFQdXNoZWQsIGZhTWl4Y2xvdWQsIGZhWWFuZGV4SW50ZXJuYXRpb25hbCwgZmFIaXZlLCBmYUNyZWF0aXZlQ29tbW9uc1plcm8sIGZhU3F1YXJlU25hcGNoYXQsIGZhU25hcGNoYXRTcXVhcmUsIGZhVGhlbWVpc2xlLCBmYURhcnRMYW5nLCBmYURlcGxveWRvZywgZmFGbGlwYm9hcmQsIGZhQnV5TkxhcmdlLCBmYVdhdGNobWFuTW9uaXRvcmluZywgZmFIaXBzLCBmYUNsb3VkdmVyc2lmeSwgZmFHb29kcmVhZHMsIGZhVGlkYWwsIGZhVW5pdHksIGZhVGVuY2VudFdlaWJvLCBmYUZyZWVDb2RlQ2FtcCwgZmFYVHdpdHRlciwgZmFTdGlja2VyTXVsZSwgZmFUd2l0Y2gsIGZhS2lja3N0YXJ0ZXJLLCBmYUNyaXRpY2FsUm9sZSwgZmFTdGVhbVN5bWJvbCwgZmFNYWlsY2hpbXAsIGZhTHVtb24sIGZhTnV0cml0aW9uaXgsIGZhQ3JlYXRpdmVDb21tb25zU2FtcGxpbmdQbHVzLCBmYVJlZGhhdCwgZmFTcXVhcmVQaWVkUGlwZXIsIGZhUGllZFBpcGVyU3F1YXJlLCBmYVdoYXRzYXBwLCBmYUltZGIsIGZhUHl0aG9uLCBmYUNhc2hBcHAsIGZhUGludGVyZXN0UCwgZmFXaG1jcywgZmFKb2dldCwgZmFTcXVhcmVZb3V0dWJlLCBmYVlvdXR1YmVTcXVhcmUsIGZhQXRsYXNzaWFuLCBmYVBpZWRQaXBlckhhdCwgZmFJbnRlcm5ldEV4cGxvcmVyLCBmYUFpcmJuYiwgZmFKcywgZmFRdWluc2NhcGUsIGZhQWR2ZXJzYWwsIGZhQ3JlYXRpdmVDb21tb25zLCBmYU5vdGlvbiwgZmFDaHJvbWVjYXN0LCBmYVdpa2lwZWRpYVcsIGZhU2l0cm94LCBmYVNxdWFyZUdpdGxhYiwgZmFHaXRsYWJTcXVhcmUsIGZhU2hvZWxhY2UsIGZhU2VsbGNhc3QsIGZhTWl4LCBmYUNjQXBwbGVQYXksIGZhQnJhdmUsIGZhRXRzeSwgZmFCdGMsIGZhQWRuLCBmYVNxdWFyZVhUd2l0dGVyLCBmYVNxdWFyZUZvbnRBd2Vzb21lLCBmYUZvcnVtYmVlLCBmYTQyR3JvdXAsIGZhSW5ub3NvZnQsIGZhU3R1bWJsZXVwb25DaXJjbGUsIGZhU3ltZm9ueSwgZmFTYWxlc2ZvcmNlLCBmYVNvdXJjZXRyZWUsIGZhTGlua2VkaW5JbiwgZmFIdG1sNSwgZmFSdXN0LCBmYUhvcm5iaWxsLCBmYVBocCwgZmFEaXNxdXMsIGZhNTAwcHgsIGZhQWZmaWxpYXRldGhlbWUsIGZhUmVkUml2ZXIsIGZhVHdpdHRlciwgZmFGb3J0QXdlc29tZSwgZmFNaXhlciwgZmFMeWZ0LCBmYUFwcGxlUGF5LCBmYUFydHN0YXRpb24sIGZhTm9kZUpzLCBmYVVuY2hhcnRlZCwgZmFQbGF5c3RhdGlvbiwgZmFNaWNyb2Jsb2csIGZhR2l0a3Jha2VuLCBmYVRlbGVncmFtLCBmYVRlbGVncmFtUGxhbmUsIGZhSXR1bmVzTm90ZSwgZmFMZXNzLCBmYUZpcmVmb3gsIGZhS2FnZ2xlLCBmYUZhY2Vib29rTWVzc2VuZ2VyLCBmYUF1ZGlibGUsIGZhUGF0cmVvbiwgZmFWbnYsIGZhUGFnZWxpbmVzLCBmYUFtYXpvbiwgZmFFbnZpcmEsIGZhTGlub2RlLCBmYUFjY3Vzb2Z0LCBmYUVybGFuZywgZmFDY0Rpc2NvdmVyLCBmYVNhZmFyaSwgZmFTcGFjZUF3ZXNvbWUsIGZhTm9kZSwgZmFDb2RlcGVuLCBmYVJhdmVscnksIGZhQWxpcGF5LCBmYUNjQW1leCwgZmFQaWVkUGlwZXJBbHQsIGZhTGV0dGVyYm94ZCwgZmFPcGVyYSwgZmFXZWlibywgZmFSZWFkbWUsIGZhR29sYW5nLCBmYVN0YWNrRXhjaGFuZ2UsIGZhR3VscCwgZmFZZWxwLCBmYUdvZm9yZSwgZmFBdmlhdG8sIGZhUGFkbGV0LCBmYUVkZ2VMZWdhY3ksIGZhU3F1YXJlTGFzdGZtLCBmYUxhc3RmbVNxdWFyZSwgZmFHb29kcmVhZHNHLCBmYUNjTWFzdGVyY2FyZCwgZmFEaXNjb3Vyc2UsIGZhQmxhY2tUaWUsIGZhU3F1YXJlRmFjZWJvb2ssIGZhRmFjZWJvb2tTcXVhcmUsIGZhQmF0dGxlTmV0LCBmYUJpbW9iamVjdCwgaWNvbnM7CnZhciBpbml0X2ZyZWVfYnJhbmRzX3N2Z19pY29ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0Bmb3J0YXdlc29tZStmcmVlLWJyYW5kcy1zdmctaWNvbnNANy4xLjAvbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mcmVlLWJyYW5kcy1zdmctaWNvbnMvaW5kZXgubWpzIigpIHsKICAgIHByZWZpeCA9ICJmYWIiOwogICAgZmFTcXVhcmVHaXRodWIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWdpdGh1YiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJnaXRodWItc3F1YXJlIl0sICJmMDkyIiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMjY1LjggNDA3LjdjMC0xLjggMC02IC4xLTExLjYgLjEtMTEuNCAuMS0yOC44IC4xLTQzLjcgMC0xNS42LTUuMi0yNS41LTExLjMtMzAuNyAzNy00LjEgNzYtOS4yIDc2LTczLjEgMC0xOC4yLTYuNS0yNy4zLTE3LjEtMzkgMS43LTQuMyA3LjQtMjItMS43LTQ1LTEzLjktNC4zLTQ1LjcgMTcuOS00NS43IDE3LjktMjYuNi03LjUtNTYuNi03LjUtODMuMiAwIDAgMC0zMS44LTIyLjItNDUuNy0xNy45LTkuMSAyMi45LTMuNSA0MC42LTEuNyA0NS0xMC42IDExLjctMTUuNiAyMC44LTE1LjYgMzkgMCA2My42IDM3LjMgNjkgNzQuMyA3My4xLTQuOCA0LjMtOS4xIDExLjctMTAuNiAyMi4zLTkuNSA0LjMtMzMuOCAxMS43LTQ4LjMtMTMuOS05LjEtMTUuOC0yNS41LTE3LjEtMjUuNS0xNy4xLTE2LjItLjItMS4xIDEwLjItMS4xIDEwLjIgMTAuOCA1IDE4LjQgMjQuMiAxOC40IDI0LjIgOS43IDI5LjcgNTYuMSAxOS43IDU2LjEgMTkuNyAwIDkgLjEgMjEuNyAuMSAzMC42IDAgNC44IC4xIDguNiAuMSAxMCAwIDQuMy0zIDkuNS0xMS41IDgtNjYtMjIuMS0xMTIuMi04NC45LTExMi4yLTE1OC4zIDAtOTEuOCA3MC4yLTE2MS41IDE2Mi0xNjEuNVMzODggMTY1LjYgMzg4IDI1Ny40Yy4xIDczLjQtNDQuNyAxMzYuMy0xMTAuNyAxNTguMy04LjQgMS41LTExLjUtMy43LTExLjUtOHptLTkwLjUtNTQuOGMtLjItMS41IDEuMS0yLjggMy0zLjIgMS45LS4yIDMuNyAuNiAzLjkgMS45IC4zIDEuMy0xIDIuNi0zIDMtMS45IC40LTMuNy0uNC0zLjktMS43em0tOS4xIDMuMmMtMi4yIC4yLTMuNy0uOS0zLjctMi40IDAtMS4zIDEuNS0yLjQgMy41LTIuNCAxLjktLjIgMy43IC45IDMuNyAyLjQgMCAxLjMtMS41IDIuNC0zLjUgMi40em0tMTQuMy0yLjJjLTEuOS0uNC0zLjItMS45LTIuOC0zLjJzMi40LTEuOSA0LjEtMS41YzIgLjYgMy4zIDIuMSAyLjggMy40LS40IDEuMy0yLjQgMS45LTQuMSAxLjN6bS0xMi41LTcuM2MtMS41LTEuMy0xLjktMy4yLS45LTQuMSAuOS0xLjEgMi44LS45IDQuMyAuNiAxLjMgMS4zIDEuOCAzLjMgLjkgNC4xLS45IDEuMS0yLjggLjktNC4zLS42em0tOC41LTEwYy0xLjEtMS41LTEuMS0zLjIgMC0zLjkgMS4xLS45IDIuOC0uMiAzLjcgMS4zIDEuMSAxLjUgMS4xIDMuMyAwIDQuMS0uOSAuNi0yLjYgMC0zLjctMS41em0tNi4zLTguOGMtMS4xLTEuMy0xLjMtMi44LS40LTMuNSAuOS0uOSAyLjQtLjQgMy41IC42IDEuMSAxLjMgMS4zIDIuOCAuNCAzLjUtLjkgLjktMi40IC40LTMuNS0uNnptLTYtNi40Yy0xLjMtLjYtMS45LTEuNy0xLjUtMi42IC40LS42IDEuNS0uOSAyLjgtLjQgMS4zIC43IDEuOSAxLjggMS41IDIuNi0uNCAuOS0xLjcgMS4xLTIuOCAuNHoiXQogICAgfTsKICAgIGZhR2l0aHViU3F1YXJlID0gZmFTcXVhcmVHaXRodWI7CiAgICBmYVRoaW5rUGVha3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGhpbmstcGVha3MiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjczMSIsICJNNDY1LjQgNDA5LjRsODcuMS0xNTAuMi0zMi0uMy01NS4xIDk1LTIwNi4yLTM1My45LTIzNi4yIDQwNy40IDMyIC4zIDIwNC4yLTM1Mi4xIDIwNi4yIDM1My44ek0xMTAuMSAzNjUuM2wzMi4xIDAgMTE3LjQtMjAyLjUgMjAzLjQgMzQ5LjEgMzIuNSAuMS0yMzUuOC00MDQuNi0xNDkuNiAyNTcuOXoiXQogICAgfTsKICAgIGZhR29vZ2xlRHJpdmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlLWRyaXZlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzYWEiLCAiTTMzOSAzMTQuOUwxNzUuNCAzMiAzMzYuNiAzMiA1MDAuMiAzMTQuOSAzMzkgMzE0Ljl6TTIwMS41IDMzOC41bC04MC42IDE0MS41IDMxMC41IDAgODAuNi0xNDEuNS0zMTAuNSAwek0xNTQuMSA2Ny40TDAgMzM4LjUgODAuNiA0ODAgMjM3IDIwOC44IDE1NC4xIDY3LjR6Il0KICAgIH07CiAgICBmYUF1dG9wcmVmaXhlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhdXRvcHJlZml4ZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQxYyIsICJNMzE4LjQgMTZsLTE2MSA0ODAgNzcuNSAwIDI1LjQtODEuNCAxMTkuNSAwIDI1LjIgODEuNCA3Ny41IDAtMTY0LjEtNDgwek0yNzguMSAzNTcuOWw0MS4yLTEzMC40IDEuNSAwIDQwLjkgMTMwLjQtODMuNiAwek02NDAgNDA1TDYzMCAzNzMuNiA0NjIuMSAzNTggNDgxLjUgNDE0LjUgNjQwIDQwNXpNMTc3LjkgMzU4TDEwIDM3My43IDAgNDA1IDE1OC41IDQxNC40IDE3Ny45IDM1OHoiXQogICAgfTsKICAgIGZhU3F1YXJlVmlhZGVvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS12aWFkZW8iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidmlhZGVvLXNxdWFyZSJdLCAiZjJhYSIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTExOC4zIDM4MS4yYy02OC03My42LTE5LjgtMTk2LjEgODEuMi0xOTYuMSAxMy4zIDAgMjYuNiAyLjEgMzkuMSA2LjctNC4zIDguNC03LjMgMTcuNi04LjQgMjcuMS05LjctNC4xLTIwLjItNi0zMC43LTYtNDguOCAwLTg0LjYgNDEuNy04NC42IDg4LjkgMCA0MyAyOC41IDc4LjcgNjkuNSA4NS45IDYxLjUtMjQgNzIuOS0xMTcuNiA3Mi45LTE3NSAwLTcuMyAwLTE0LjgtLjYtMjIuMS0xMS4yLTMyLjktMjYuNi02NC42LTQ0LjItOTQuNSAyNy4xIDE4LjMgNDEuOSA2Mi41IDQ0LjIgOTQuMWwwIC40YzcuNyAyMi41IDExLjggNDYuMiAxMS44IDcwIDAgNTQuMS0yMS45IDk5LTY4LjMgMTI4LjJsLTIuNCAuMmM1MCAxIDg2LjItMzguNiA4Ni4yLTg3LjIgMC0xMi4yLTIuMS0yNC4zLTYuOS0zNS43IDkuNS0xLjkgMTguNS01LjYgMjYuNC0xMC41IDE1LjMgMzYuNiAxMi42IDg3LjMtMjIuOCAxMjUuNi00Mi40IDQ2LjItMTIwIDQ2LjYtMTYyLjQgMHpNMjc0LjYgMjE3LjZjMjEuOS0xMiA0OS42LTMwLjcgNjIuMy01MyAxLjUtMyA0LjEtOC42IDQuNS0xMi0xMi41IDI3LjktNDQuMiA0OS44LTczLjkgNTYuNy00LjctNy4zLTcuNS0xNS41LTcuNS0yNC4zIDAtMTAuMyA1LjItMjQuMSAxMi45LTMxLjYgOC4zLTcuOSAxOC0xMC45IDI3LjktMTQuMSAxNi01LjEgMzIuNS0xMC4zIDQ0LjUtMzUuOSAzMi41IDQ2LjIgMTMuMSAxMzAuMy0zNi4zIDEzMC4zLTEzLjMgMC0yNS4xLTcuMS0zNC40LTE2LjF6Il0KICAgIH07CiAgICBmYVZpYWRlb1NxdWFyZSA9IGZhU3F1YXJlVmlhZGVvOwogICAgZmFDcGFuZWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3BhbmVsIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzODgiLCAiTTIxMC4zIDIyMC4yYy01LjYtMjQuOC0yNi45LTQxLjItNTEtNDEuMmwtMzcgMGMtNy4xIDAtMTIuNSA0LjUtMTQuMyAxMC45TDczLjEgMzIwIDk3LjggMzE5LjljNi44IDAgMTIuMy00LjUgMTQuMi0xMC43bDI1LjgtOTUuNyAxOS44IDBjOC40IDAgMTYuMiA1LjYgMTguMyAxNC44IDIuNSAxMC45LTUuOSAyMi42LTE4LjMgMjIuNmwtMTAuMyAwYy03IDAtMTIuNSA0LjYtMTQuMyAxMC44bC02LjQgMjMuOCAzMiAwYzM3LjIgMCA1OC4zLTM2LjIgNTEuNy02NS4zem0tMTU2LjUgMjhsMTguNiAwYzYuOSAwIDEyLjQtNC40IDE0LjMtMTAuOWw2LjItMjMuNi00MCAwQzMwIDIxMy43IDkgMjI3LjggMS43IDI1NC44LTcgMjg4LjYgMTguNSAzMjAgNTIgMzIwbDEyLjQgMCA3LjEtMjYuMWMxLjItNC40LTIuMi04LjMtNi40LTguM2wtMTEuMyAwYy0yNC43IDAtMjQuOS0zNy40IDAtMzcuNHptMjQ3LjUtMzQuOGwtNzcuOSAwLTMuNSAxMy40Yy0yLjQgOS42IDQuNSAxOC41IDE0LjIgMTguNWw1Ny41IDBjNCAwIDIuNCA0LjMgMi4xIDUuM2wtOC42IDMxLjhjLS40IDEuNC0uOSA1LjMtNS41IDUuM2wtMzQuOSAwYy01LjMgMC01LjMtNy45IDAtNy45bDIxLjYgMGM2LjggMCAxMi4zLTQuNiAxNC4yLTEwLjhsMy41LTEzLjItNDguNCAwYy0zOS4yIDAtNDMuNiA2My44LS43IDYzLjhsNTcuNSAuMmMxMS4yIDAgMjAuNi03LjIgMjMuNC0xNy44bDE0LTUxLjhjNC44LTE5LjItOS43LTM2LjgtMjguNS0zNi44ek02MzMuMSAxNzlsLTE4LjkgMGMtNC45IDAtOS4yIDMuMi0xMC40IDcuOUw1NjguMiAzMjBjMjAuNyAwIDM5LjgtMTMuOCA0NC45LTM0LjVsMjYuNS05OC4yYzEuMi00LjMtMi04LjMtNi41LTguM3pNMzk2LjggMjEzLjdsMCAuMS00OC4zIDAtMjYuMiA5OGMtMS4yIDQuNCAyLjIgOC4zIDYuNCA4LjNsMTguOSAwYzQuOCAwIDkuMi0zIDEwLjQtNy44bDE3LjItNjQgMTkuOCAwYzEyLjUgMCAyMS40IDExLjggMTguMSAyMy40bC0xMC42IDQwYy0xLjIgNC4zIDEuOSA4LjMgNi40IDguM2wxOS4xIDBjNC42IDAgOS4xLTIuOSAxMC4zLTcuOGw4LjgtMzMuMWM5LTMzLjEtMTUuOS02NS40LTUwLjMtNjUuNHptOTguMyA3NC42Yy0zLjYgMC02LTMuNC01LjEtNi43bDgtMzBjLjktMy45IDMuNy02IDcuOC02bDMyLjkgMGMyLjYgMCA0LjYgMi40IDMuOSA1LjFsLS43IDIuNmMtLjYgMi0xLjkgMy0zLjkgM2wtMjEuNiAwYy03IDAtMTIuNiA0LjYtMTQuMiAxMC44bC0zLjUgMTMgNTMuNCAwYzEwLjUgMCAyMC4zLTYuNiAyMy4yLTE3LjZsMy4yLTEyYzQuOS0xOS4xLTkuMy0zNi44LTI4LjMtMzYuOGwtNDcuMyAwYy0xNy45IDAtMzMuOCAxMi0zOC42IDI5LjZsLTEwLjggNDBjLTUgMTcuNyA4LjMgMzYuNyAyOC4zIDM2LjdsNjYuNyAwYzYuOCAwIDEyLjMtNC41IDE0LjItMTAuN2w1LjctMjEtNzMuMyAweiJdCiAgICB9OwogICAgZmFNZW5kZWxleSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtZW5kZWxleSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmN2IzIiwgIk02MjQuNiAzMjUuMmMtMTIuMy0xMi40LTI5LjctMTkuMi00OC40LTE3LjItNDMuMy0xLTQ5LjctMzQuOS0zNy41LTk4LjggMjIuOC01Ny41LTE0LjktMTMxLjUtODcuNC0xMzAuOC03Ny40IC43LTgxLjcgODItMTMwLjkgODItNDguMSAwLTU0LTgxLjMtMTMwLjktODItNzIuOS0uOC0xMTAuMSA3My4zLTg3LjQgMTMwLjggMTIuMiA2My45IDUuOCA5Ny44LTM3LjUgOTguOC0yMS4yLTIuMy0zNyA2LjUtNTMgMjIuNS0xOS45IDE5LjctMTkuMyA5NC44IDQyLjYgMTAyLjYgNDcuMSA1LjkgODEuNi00Mi45IDYxLjItODcuOC00Ny4zLTEwMy43IDE4NS45LTEwNi4xIDE0Ni41LTguMi0uMSAuMS0uMiAuMi0uMyAuNC0yNi44IDQyLjggNi44IDk3LjQgNTguOCA5NS4yIDUyLjEgMi4xIDg1LjQtNTIuNiA1OC44LTk1LjItLjEtLjItLjItLjMtLjMtLjQtMzkuNC05Ny45IDE5My44LTk1LjUgMTQ2LjUgOC4yLTQuNiAxMC02LjcgMjEuMy01LjcgMzMgNC45IDUzLjQgNjguNyA3NC4xIDEwNC45IDM1LjIgMTcuOC0xNC44IDIzLjEtNjUuNiAwLTg4LjN6TTMyMC43IDMwNi4xbC0uNiAwYy00My40IDAtNjIuOC0zNy41LTYyLjgtNjIuOCAwLTM0LjcgMjguMi02Mi44IDYyLjgtNjIuOGwuNiAwYzM0LjcgMCA2Mi44IDI4LjEgNjIuOCA2Mi44IDAgMjUtMTkuMiA2Mi44LTYyLjggNjIuOHoiXQogICAgfTsKICAgIGZhRHJhZnQyZGlnaXRhbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkcmFmdDJkaWdpdGFsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzOTYiLCAiTTQ5NiAzOTguMWwtMTQ0LTgyLjIgMCA2NC43LTkxLjMgMGMzMC44LTM1IDgxLjgtOTUuOSAxMTEuOC0xNDkuMyAzNS4yLTYyLjYgMTYuMS0xMjMuNC0xMi44LTE1My4zLTQuNC00LjYtNjIuMi02Mi45LTE2Ni00MS4yLTU5LjEgMTIuNC04OS40IDQzLjQtMTA0LjMgNjcuMy0xMy4xIDIwLjktMTcgMzkuOC0xOC4yIDQ3LjctNS41IDMzIDE5LjQgNjcuMSA1Ni43IDY3LjEgMzEuNyAwIDU3LjMtMjUuNyA1Ny4zLTU3LjQgMC0yNy4xLTE5LjctNTIuMS00OC01Ni44IDEuOC03LjMgMTcuNy0yMS4xIDI2LjMtMjQuNyA0MS4xLTE3LjMgNzggNS4yIDgzLjMgMzMuNSA4LjMgNDQuMy0zNy4xIDkwLjQtNjkuNyAxMjcuNi03Ni42IDg3LTE0Mi44IDE1NS43LTE2MS4xIDE3NC44bDMzNi0uMSAwIDY0LjIgMTQ0LTgxLjl6TTM4NS45IDM3MWw0Ny4xIDI3LjItNDcuMSAyNy4yIDAtNTQuNHpNMTA1LjQgMTYxLjRhMjIuNCAyMi40IDAgMSAxIDQ0LjggMCAyMi40IDIyLjQgMCAxIDEgLTQ0LjggMHpNOTguNSAzODAuNWMyNS42LTI3LjQgOTcuNy0xMDQuNyAxNTAuOC0xNjkuOSAzNS4xLTQzLjEgNDAuMy04Mi40IDI4LjQtMTEyLjctNy40LTE4LjgtMTcuNS0zMC4yLTI0LjMtMzUuNyA0NS4zIDIuMSA2OCAyMy40IDgyLjIgMzguMyAwIDAgNDIuNCA0OC4yIDUuOCAxMTMuMy0zNyA2NS45LTExMC45IDE0Ny41LTEyOC41IDE2Ni43bC0xMTQuNCAweiJdCiAgICB9OwogICAgZmFSZXBseWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVwbHlkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZTYiLCAiTTMyMCA0ODBsLTE5MiAwQzU3LjYgNDgwIDAgNDIyLjQgMCAzNTJMMCAxNjBDMCA4OS42IDU3LjYgMzIgMTI4IDMybDE5MiAwYzcwLjQgMCAxMjggNTcuNiAxMjggMTI4bDAgMTkyYzAgNzAuNC01Ny42IDEyOC0xMjggMTI4ek0xOTMuNCAyNzMuMmMtNi4xLTItMTEuNi0zLjEtMTYuNC0zLjEtNy4yIDAtMTMuNSAxLjktMTguOSA1LjZzLTkuNiA5LTEyLjggMTUuOGwtMS4xIDAtNC4yLTE4LjMtMjggMCAwIDEzOC45IDM2LjEgMCAwLTg5LjdjMS41LTUuNCA0LjQtOS44IDguNy0xMy4yczkuOC01LjEgMTYuMi01LjFjNC42IDAgOS44IDEgMTUuNiAzLjFsNC44LTM0ek0zMDguNiAzNzYuNmMtMy4yIDIuNC03LjcgNC44LTEzLjcgNy4xcy0xMi44IDMuNS0yMC40IDMuNWMtMTIuMiAwLTIxLjEtMy0yNi41LTguOS01LjUtNS45LTguNS0xNC43LTktMjYuNGw4My4zIDBjLjktNC44IDEuNi05LjQgMi4xLTEzLjkgLjUtNC40IC43LTguNiAuNy0xMi41IDAtMTAuNy0xLjYtMTkuNy00LjctMjYuOS0zLjItNy4yLTcuMy0xMy0xMi41LTE3LjItNS4yLTQuMy0xMS4xLTcuMy0xNy44LTkuMi02LjctMS44LTEzLjUtMi44LTIwLjYtMi44LTIxLjEgMC0zNy41IDYuMS00OS4yIDE4LjNzLTE3LjUgMzAuNS0xNy41IDU1YzAgMjIuOCA1LjIgNDAuNyAxNS42IDUzLjcgMTAuNCAxMy4xIDI2LjggMTkuNiA0OS4yIDE5LjYgMTAuNyAwIDIwLjktMS41IDMwLjQtNC42czE3LjEtNi44IDIyLjYtMTEuMmwtMTItMjMuNnptLTIxLjgtNzAuM2MzLjggNS40IDUuMyAxMy4xIDQuNiAyMy4xbC01MS43IDBjLjktOS40IDMuNy0xNyA4LjItMjIuNnMxMS41LTguNSAyMS04LjVjOC4yLS4xIDE0LjEgMi42IDE3LjkgOHptNzkuOSAyLjVjNC4xIDMuOSA5LjQgNS44IDE2LjEgNS44IDcgMCAxMi42LTEuOSAxNi43LTUuOHM2LjEtOS4xIDYuMS0xNS42LTItMTEuNi02LjEtMTUuNC05LjYtNS43LTE2LjctNS43Yy02LjcgMC0xMiAxLjktMTYuMSA1LjdzLTYuMSA4LjktNi4xIDE1LjQgMiAxMS43IDYuMSAxNS42em0wIDEwMC41YzQuMSAzLjkgOS40IDUuOCAxNi4xIDUuOCA3IDAgMTIuNi0xLjkgMTYuNy01LjhzNi4xLTkuMSA2LjEtMTUuNi0yLTExLjYtNi4xLTE1LjQtOS42LTUuNy0xNi43LTUuN2MtNi43IDAtMTIgMS45LTE2LjEgNS43cy02LjEgOC45LTYuMSAxNS40YzAgNi42IDIgMTEuNyA2LjEgMTUuNnoiXQogICAgfTsKICAgIGZhRW1waXJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVtcGlyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWQxIiwgIk0yOTUuNiA1NC4yYy0xMC44LTIuMi0yMi4xLTMuMy0zMy41LTMuNmwwLTE4LjJjNzguMSAyLjIgMTQ2LjEgNDQgMTg0LjYgMTA2LjZsLTE1LjggOS4xYy02LjEtOS43LTEyLjctMTguOC0yMC4yLTI3LjFsLTE4IDE1LjVjLTI2LTI5LjYtNjEuNC01MC43LTEwMS45LTU4LjRsNC44LTIzLjl6TTYxLjQgMzIyLjRsMjMtNy43Yy02LjQtMTguMy0xMC0zOC4yLTEwLTU4LjdzMy4zLTQwLjQgOS43LTU4LjdsLTIyLjctNy43YzMuNi0xMC44IDguMy0yMS4zIDEzLjYtMzFsLTE1LjgtOS4xQzQyIDE4MSAzMi4xIDIxNy41IDMyLjEgMjU2czEwIDc1IDI3LjEgMTA2LjZMNzUgMzUzLjVjLTUuMy0xMC05LjctMjAuMy0xMy42LTMxLjF6TTIyMS4xIDQzNGMtNDAuNC04LTc1LjgtMjkuMS0xMDEuOS01OC43bC0xOCAxNS44Yy03LjUtOC42LTE0LjQtMTcuNy0yMC4yLTI3LjRsLTE2IDkuNGMzOC41IDYyLjMgMTA2LjggMTA0LjMgMTg0LjkgMTA2LjZsMC0xOC4zYy0xMS4zLS4zLTIyLjctMS43LTMzLjUtMy42bDQuNy0yMy44ek0xMDEuMyAxMjAuOWwxOCAxNS41YzI2LTI5LjYgNjEuNC01MC43IDEwMS45LTU4LjRsLTQuNy0yMy44YzEwLjgtMi4yIDIyLjEtMy4zIDMzLjUtMy42bDAtMTguMkMxNzEuOSAzNC42IDEwMy45IDc2LjQgNjUuNCAxMzlsMTUuOCA5LjFjNi05LjcgMTIuNi0xOC45IDIwLjEtMjcuMnpNNDEwLjcgMzkxLjFsLTE4LTE1LjhjLTI2IDI5LjYtNjEuNCA1MC43LTEwMS45IDU4LjdsNC43IDIzLjhjLTEwLjggMS45LTIyLjEgMy4zLTMzLjUgMy42bDAgMTguM2M3OC4xLTIuMiAxNDYuNC00NC4zIDE4NC45LTEwNi42bC0xNi4xLTkuNGMtNS43IDkuNy0xMi42IDE4LjgtMjAuMSAyNy40ek04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem00ODMuOCAwYTIzNS44IDIzNS44IDAgMSAwIC00NzEuNiAwIDIzNS44IDIzNS44IDAgMSAwIDQ3MS42IDB6bS0zOS0xMDYuNkw0MzcgMTU4LjVjNS4zIDkuNyAxMCAyMC4yIDEzLjYgMzFsLTIyLjcgNy43YzYuNCAxOC4zIDkuNyAzOC4yIDkuNyA1OC43cy0zLjYgNDAuNC0xMCA1OC43bDIzIDcuN2MtMy45IDEwLjgtOC4zIDIxLTEzLjYgMzFsMTUuOCA5LjFDNDcwIDMzMSA0NzkuOSAyOTQuNSA0NzkuOSAyNTZzLTkuOS03NS0yNy4xLTEwNi42em0tMTgzIDE3Ny43YzE2LjMtMy4zIDMwLjQtMTEuNiA0MC43LTIzLjVsNTEuMiA0NC44YzExLjktMTMuNiAyMS4zLTI5LjMgMjcuMS00Ni44bC02NC4yLTIyLjFjMi41LTcuNSAzLjktMTUuMiAzLjktMjMuNXMtMS40LTE2LjEtMy45LTIzLjVsNjQuNS0yMi4xYy02LjEtMTcuNC0xNS41LTMzLjItMjcuNC00Ni44bC01MS4yIDQ0LjhjLTEwLjItMTEuOS0yNC40LTIwLjUtNDAuNy0yMy44bDEzLjMtNjYuNGMtOC42LTEuOS0xNy43LTIuOC0yNy4xLTIuOHMtMTguNSAuOC0yNy4xIDIuOGwxMy4zIDY2LjRjLTE2LjMgMy4zLTMwLjQgMTEuOS00MC43IDIzLjhsLTUxLjItNDQuOGMtMTEuOSAxMy42LTIxLjMgMjkuMy0yNy40IDQ2LjhsNjQuNSAyMi4xYy0yLjUgNy41LTMuOSAxNS4yLTMuOSAyMy41czEuNCAxNi4xIDMuOSAyMy41bC02NC4yIDIyLjFjNS44IDE3LjQgMTUuMiAzMy4yIDI3LjEgNDYuOGw1MS4yLTQ0LjhjMTAuMiAxMS45IDI0LjQgMjAuMiA0MC43IDIzLjVsLTEzLjMgNjYuN2M4LjYgMS43IDE3LjcgMi44IDI3LjEgMi44czE4LjUtMS4xIDI3LjEtMi44bC0xMy4zLTY2Ljd6Il0KICAgIH07CiAgICBmYUFjY2Vzc2libGVJY29uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFjY2Vzc2libGUtaWNvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYyMTA3XSwgImYzNjgiLCAiTTQyMy45IDI1NS44TDQxMSA0MTMuMWMtMy4zIDQwLjctNjMuOSAzNS4xLTYwLjYtNC45bDEwLTEyMi41LTQxLjEgMi4zYzEwLjEgMjAuNyAxNS44IDQzLjkgMTUuOCA2OC41IDAgNDEuMi0xNi4xIDc4LjctNDIuMyAxMDYuNWwtMzkuMy0zOS4zYzU3LjktNjMuNyAxMy4xLTE2Ny4yLTc0LTE2Ny4yLTI1LjkgMC00OS41IDkuOS02Ny4yIDI2TDczIDI0My4yYzIyLTIwLjcgNTAuMS0zNS4xIDgxLjQtNDAuMmw3NS4zLTg1LjctNDIuNi0yNC44LTUxLjYgNDZDMTA1LjUgMTY1LjMgNjQuOSAxMjAgOTUgOTMuMWw2OC02MC43YzkuOC04LjggMjQuMS0xMC4yIDM1LjUtMy42IDAgMCAxMzkuMyA4MC45IDEzOS41IDgxLjEgMTYuMiAxMC4xIDIwLjcgMzYgNi4xIDUyLjZsLTU4LjQgNjYuNSAxMDYuMS01LjljMTguNS0xLjEgMzMuNiAxNC40IDMyLjEgMzIuN3pNMzU5IDEwMS44QTUwLjkgNTAuOSAwIDEgMCAzNTkgMCA1MC45IDUwLjkgMCAxIDAgMzU5IDEwMS44ek0xNzkuNiA0NTYuNWMtODAuNiAwLTEyNy40LTkwLjYtODIuNy0xNTYuMUw1Ny4yIDI2MC43QzM2LjQgMjg3IDI0IDMyMC4zIDI0IDM1Ni40IDI0IDQ4Ny4xIDE3NC43IDU1Ny44IDI3NS40IDQ3OC45bC0zOS43LTM5LjdjLTE2IDEwLjktMzUuMyAxNy4zLTU2LjEgMTcuM3oiXQogICAgfTsKICAgIGZhUXVvcmEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicXVvcmEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJjNCIsICJNNDQwLjcgMzg2LjdsLTI5LjMgMGMtMS41IDEzLjUtMTAuNSAzMC44LTMzIDMwLjgtMjAuNSAwLTM1LjMtMTQuMi00OS41LTM1LjggNDQuMi0zNC4yIDc0LjctODcuNSA3NC43LTE1MyAuMS0xMTcuNS05Ni42LTE5Ni43LTE5OC40LTE5Ni43LTk5LjcgMC0xOTcuNyA3OS43LTE5Ny43IDE5Ni43IDAgMTM0LjEgMTMxLjMgMjIxLjYgMjQ5IDE4OSAxOS43IDMzLjYgNDUuNyA2Mi4zIDk1LjIgNjIuMyA4MS44IDAgOTAuOC03NS4zIDg5LTkzLjN6TTI5Ny4yIDMyOS4yYy0xOS41LTI5LjItNDMuNy01Mi4yLTkxLjUtNTIuMi0zMC41IDAtNTQuMyAxMC02OSAyMi44bDEyLjIgMjQuM2M2LjItMyAxMy00IDE5LjgtNCAzNS41IDAgNTMuNyAzMC44IDY5LjIgNjEuMy0xMCAzLTIwLjcgNC4yLTMyLjcgNC4yLTc1IDAtMTA3LjUtNTMtMTA3LjUtMTU2LjcgMC0xMDQuNCAzMi41LTE1Ny45IDEwNy41LTE1Ny45IDc2LjIgMCAxMDguNyA1My41IDEwOC43IDE1Ny43IC4xIDQxLjgtNS40IDc1LjYtMTYuNyAxMDAuNXoiXQogICAgfTsKICAgIGZhQ2NKY2IgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2MtamNiIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyNGIiLCAiTTQzMS41IDI0NC4zbDAtMzIuM2M0MS4yIDAgMzguNSAuMiAzOC41IC4yIDcuMyAxLjMgMTMuMyA3LjMgMTMuMyAxNiAwIDguOC02IDE0LjUtMTMuMyAxNS44LTEuMiAuNC0zLjMgLjMtMzguNSAuM3ptNDIuOCAyMC4yYy0yLjgtLjctMy4zLS41LTQyLjgtLjVsMCAzNWMzOS42IDAgNDAgLjIgNDIuOC0uNSA3LjUtMS41IDEzLjUtOCAxMy41LTE3IDAtOC43LTYtMTUuNS0xMy41LTE3ek01NzYgODBsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDQ4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0xODIgMTkyLjNsLTU3IDBjMCA2Ny4xIDEwLjcgMTA5LjctMzUuOCAxMDkuNy0xOS41IDAtMzguOC01LjctNTcuMi0xNC44bDAgMjhjMzAgOC4zIDY4IDguMyA2OCA4LjMgOTcuOSAwIDgyLTQ3LjcgODItMTMxLjJ6bTE3OC41IDQuNWMtNjMuNC0xNi0xNjUtMTQuOS0xNjUgNTkuMyAwIDc3LjEgMTA4LjIgNzMuNiAxNjUgNTkuMmwwLTI4LjNDMzEyLjkgMzExLjcgMjUzIDMwOSAyNTMgMjU2czU5LjgtNTUuNiAxMDcuNS0zMS4ybDAtMjh6TTU0NCAyODYuNWMwLTE4LjUtMTYuNS0zMC41LTM4LTMybDAtLjhjMTkuNS0yLjcgMzAuMy0xNS41IDMwLjMtMzAuMiAwLTE5LTE1LjctMzAtMzctMzEgMCAwIDYuMy0uMy0xMjAuMy0uM2wwIDEyNy41IDEyMi43IDBjMjQuMyAuMSA0Mi4zLTEyLjkgNDIuMy0zMy4yeiJdCiAgICB9OwogICAgZmFGZWRvcmEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmVkb3JhIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3OTgiLCAiTTAgMjU1LjhDLjEgMTMyLjIgMTAwLjMgMzIgMjI0IDMyUzQ0OCAxMzIuMyA0NDggMjU2IDM0Ny44IDQ3OS45IDIyNC4xIDQ4MEw1MC45IDQ4MEMyMi44IDQ4MCAuMSA0NTcuMyAwIDQyOS4ybDAgMCAwLTE3My40IDAgMHptMzQyLjYtNjMuMWMwLTM5LjctMzUuNi02OC41LTczLjItNjguNS0zNC45IDAtNjUuOCAyNi4zLTcwLjEgNTkuOS0uMiAzLjgtLjQgNS0uNCA4LjUtLjEgMjEuMSAwIDQyLjgtLjggNjQuNCAuOSAyNi4xIDEgNTIuMSAwIDc2LjYgMCAyNy4xLTE5LjQgNDUuNS00NC43IDQ1LjVzLTQ1LjgtMjAuMi00NS44LTQ1LjVjLjUtMjcuNyAyMi42LTQ1LjMgNDguNS00Ni4xbC4yIDAgMjYuMy0uMiAwLTM3LjMtMjYuMyAuMmMtNDcuMS0uNC04NC42IDM2LjUtODUuOSA4My40IDAgNDUuNiAzNy41IDgyLjkgODMgODIuOSA0MyAwIDc4LjctMzMuNiA4Mi42LTc1LjZsLjItNTMuNSAzMi42LS4zYzI1LjMgLjIgMjUtMzcuOC0uMi0zNy4zbC0zMi40IC4zYzAtNi40IC4xLTEyLjggLjEtMTkuMiAuMS0xMi43IC4xLTI1LjQtLjEtMzguMiAuMS0xNi41IDE1LjgtMzEuMiAzMy4yLTMxLjIgMTcuNSAwIDM1LjkgOC43IDM1LjkgMzEuMiAwIDMuMi0uMSA1LjEtLjMgNi4zLTEuOSAxMC41IDUuMiAyMC40IDE1LjcgMjEuOSAxMC42IDEuNSAyMC4yLTYuMSAyMS4yLTE2LjYgLjYtNC4yIC43LTcuOSAuNy0xMS42eiJdCiAgICB9OwogICAgZmFEdW9saW5nbyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkdW9saW5nbyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlODEyIiwgIk01MDQuMyAyMzAuNWMxMC40IDg4LjUtNDMuNCAxNzIuMS0xMjguMiAxOTlzLTE3Ni42LTEwLjMtMjE4LjktODguN2MtNzIgMy0xMzcuNC0zOS44LTE2My4yLTEwNS41LTIuNi02LjYtMS45LTE0IDEuOS0xOS45czEwLjItOS43IDE3LjItMTAuMWw5Ni4xLTYtMjMuOC03NS45Yy02LjMtMjAtMi4yLTQxLjkgMTEtNTguM3MzMy43LTI1IDU0LjUtMjNjNTIuMiA1IDg2LjggNC44IDEwNC0uNlMzMDAgMTYuNyAzMzktMTYuOWMxNS45LTEzLjcgMzcuNy0xOC41IDU3LjgtMTIuN3MzNi4xIDIxLjMgNDIuNCA0MS40TDQ2Mi44IDg3IDU0My42IDM3LjNjNi0zLjcgMTMuNC00LjMgMTkuOS0xLjZzMTEuMyA4LjMgMTIuOSAxNS4yYzE2LjIgNjguMi0xMi40IDE0MC4zLTcyLjEgMTc5LjV6TTI1OC41IDQ3NS45bDAgMGMxNS4xIDcuNSAyMS41IDI1LjggMTQuMiA0MXMtMjUuNCAyMS45LTQwLjcgMTQuOWwtNDMuOS0yMWMtMTUuMS03LjUtMjEuNS0yNS44LTE0LjItNDFzMjUuNC0yMS45IDQwLjctMTQuOWw0My44IDIxek01NjQuNiAzNDUuN2MxNC44IDguNCAyMCAyNy4zIDExLjYgNDIuMmwtMjMuOSA0Mi40Yy04LjcgMTQuMy0yNy4xIDE5LjItNDEuNiAxMC45cy0xOS45LTI2LjYtMTItNDEuNGwyMy45LTQyLjRjNC03LjEgMTAuNy0xMi40IDE4LjYtMTQuNnMxNi4zLTEuMiAyMy40IDIuOXoiXQogICAgfTsKICAgIGZhRmlyc3RkcmFmdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmaXJzdGRyYWZ0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYzYTEiLCAiTTM4NCAxOTJsLTY0IDAgMCAxMjgtMTI4IDAgMCAxMjgtMTkyIDAgMC0yNS42IDE2Ni40IDAgMC0xMjggMTI4IDAgMC0xMjggODkuNiAwIDAgMjUuNnptLTI1LjYgMzguNGwwIDEyOC0xMjggMCAwIDEyOC0xNjYuNCAwIDAgMjUuNiAxOTIgMCAwLTEyOCAxMjggMCAwLTE1My42LTI1LjYgMHptMjUuNiAxOTJsLTg5LjYgMCAwIDg5LjYgMjUuNiAwIDAtNjQgNjQgMCAwLTI1LjZ6TTAgMGwwIDM4NCAxMjggMCAwLTEyOCAxMjggMCAwLTEyOCAxMjggMCAwLTEyOC0zODQgMHoiXQogICAgfTsKICAgIGZhRnJlZWJzZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmcmVlYnNkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYTQiLCAiTTMwMy43IDk2LjJjMTEuMS0xMS4xIDExNS41LTc3IDEzOS4yLTUzLjIgMjMuNyAyMy43LTQyLjEgMTI4LjEtNTMuMiAxMzkuMnMtMzkuNCAuOS02My4xLTIyLjljLTIzLjgtMjMuNy0zNC4xLTUyLTIyLjktNjMuMXpNMTA5LjkgNjguMUM3My42IDQ3LjUgMjIgMjQuNiA1LjYgNDEuMS0xMSA1Ny43IDEyLjcgMTEwLjUgMzMuNSAxNDYuOCA1MiAxMTQuNiA3OC4zIDg3LjUgMTA5LjkgNjguMXpNNDA2LjcgMTc0YzMuMyAxMS4zIDIuNyAyMC43LTIuNyAyNi4xLTIwLjMgMjAuMy04Ny41LTI3LTEwOS4zLTcwLjEtMTgtMzIuMy0xMS4xLTUzLjQgMTQuOS00OC43IDUuNy0zLjYgMTIuMy03LjYgMTkuNi0xMS42LTI5LjgtMTUuNS02My42LTI0LjMtOTkuNS0yNC4zLTExOS4xIDAtMjE1LjYgOTYuNS0yMTUuNiAyMTUuNiAwIDExOSA5Ni41IDIxNS42IDIxNS42IDIxNS42UzQ0NS4zIDM4MC4xIDQ0NS4zIDI2MWMwLTM4LjQtMTAuMS03NC41LTI3LjctMTA1LjgtMy45IDctNy42IDEzLjMtMTAuOSAxOC44eiJdCiAgICB9OwogICAgZmFPZHlzZWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib2R5c2VlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1YzYiLCAiTTQwNi43IDQ2M2MtNDIuMyAzMC44LTk0LjQgNDktMTUwLjcgNDktMTExLjEgMC0yMDUuNy03MC44LTI0MS4xLTE2OS44IDIuNCAxLjcgNS45IDMuNiA3LjkgNC40IDE2LjMgNy40IDQwLjEtNS40IDYyLjktMjguNyA2LjktNi45IDE0LjQtMTIuNCAyMi44LTE3LjMgMTguMy0xMS45IDM3LjYtMjAuOCA1OC40LTI3LjIgMCAwIDIyLjMgMzQuMiA0My4xIDc0LjhzLTIyLjMgNTQtMjcuMiA1NGMtLjMgMC0uOCAwLTEuNS0uMS0xMS0uNS03MC0zLTU2IDUxLjEgMTQuOSA1Ny40IDk3LjUgMzYuNiAxMzkuNiA4LjlzMzEuNy0xMTguMyAzMS43LTExOC4zYzQxLjEtNi40IDU0IDM3LjEgNTcuOSA1OS40IC44IDQuNiAxLjEgOS45IDEuNCAxNS41IDEuMSAyMS4yIDIuMyA0NS42IDM1LjMgNDYuNCA1LjMgMCAxMC42LS44IDE1LjUtMmwwLS4xem0tOTUuMy0yMy43Yy0yLS41LTMuNS0yLjUtMy01IDEtMi41IDMtMy41IDUtM3MzLjUgMyAzIDUtMi41IDMuNS01IDN6bS0yMDctOTUuNmMxLjUtLjUgMy41IDEgNCAzIDAgMi0xIDQtMyA0LTEuNSAuNS0zLjUtMS00LTMtLjUtMS41IDEtMy41IDMtNHpNNDUxLjggNDIxYzM3LjUtNDQuNiA2MC4yLTEwMi4yIDYwLjItMTY1IDAtNjcuNS0yNi4xLTEyOC45LTY4LjgtMTc0LjctLjEgMjMuNS02LjEgNDguMi0xNi44IDY5LjItMTEuOSAyMC4zLTQ5IDU4LjktNjkuOCA3OC43LS43IC4zLTEuMSAuOS0xLjUgMS40LS4yIC4yLS4zIC40LS41IC42LTUgNi45LTQgMTYuOCAzIDIxLjggMjEuMyAxNS44IDU2LjQgNDUuNiA1OS40IDcyLjggMy41IDM0LjkgMjcuOSA3NS42IDM0LjIgODYuMiAuOCAxLjMgMS4zIDIuMSAxLjQgMi40IDAgMi4yLS40IDQuMy0uOCA2LjVsMCAuMXpNMzkwLjcgMjUxYy0uNSAzIDEgNS45IDQgNi40czUuOS0xIDYuNC00LTEtNS45LTQtNi40Yy0zLTEtNS45IDEtNi40IDR6bTYxLjQtNjAuOWwtMTEuNCA1LjQtMyAxMi45LTUuNC0xMS40LTEyLjktMyAxMS40LTUuNCAzLTEyLjkgNS40IDExLjQgMTIuOSAzek0zOTUuNSA0MS4zYy0xNi4yIDguMi0yMi4xIDMyLjgtMjkgNjEuNC0uMyAxLjQtLjcgMi44LTEgNC4yLTkuNSAzOC41LTMwLjYgMzcuNi00MS43IDM3LjItMS4xIDAtMi0uMS0yLjktLjEtNS4xIDAtNi00LTguOS0xNy4xLTIuNi0xMi4xLTYuOS0zMi0xNy45LTYzLjYtMjIuNy02NS44LTgyLjctNDkuNC0xMjguMi0yMi4yLTU1LjMgMzMuMS0zNC40IDEwMS45LTE5LjggMTQ5LjQgLjcgMi4yIDEuNCA0LjQgMiA2LjYtNCA0LTEzLjggNy41LTI2IDExLjktMTIuMSA0LjMtMjYuNiA5LjUtNDAuMyAxNi45LTMzLjkgMTgtNzAuMyA0OS03OS44IDYyLjYtMS4zLTEwLjctMi0yMS41LTItMzIuNSAwLTE0MS40IDExNC42LTI1NiAyNTYtMjU2IDUxLjQgMCA5OS40IDE1LjIgMTM5LjUgNDEuM3pNNTguOSAxODkuNmMtMS41LTItNC41LTMtNi40LTEuNXMtMyA0LjUtMS41IDYuNCA0LjUgMyA2LjQgMS41YzIuNS0xLjUgMy00LjUgMS41LTYuNHpNMzI3LjMgNjQuOWMyLTEuNSA1LS41IDYuNCAxLjUgMS41IDIuNSAxIDUuNC0xLjUgNi40LTIgMS41LTUgLjUtNi40LTEuNXMtLjUtNSAxLjUtNi40ek05NS4xIDEwNWMtLjUgMS41IC41IDMgMiAzIDEuNSAuNSAzLS41IDMtMiAuNS0xLjUtLjUtMy0yLTNzLTMgLjUtMyAyem04NC43LS41Yy0zLjUtNDMuMSAzNy4xLTU0IDM3LjEtNTQgNDQuMS0xNS40IDU2IDUuOSA2Ni40IDM3LjZzMyA0Mi42LTM4LjYgNTguOS02MS45LTQuNS02NC45LTQyLjZsMCAuMXptODkuNiAxNC45bDEgMGMyLjUgMCA1LTIgNS01IDItNi45IDEtMTQuNC0yLTIwLjgtMS41LTItNC0zLjUtNi40LTIuNS0zIDEtNC41IDQtMy41IDYuOSAyIDQuNSAzIDkuOSAxLjUgMTQuOS0uNSAzIDEuNSA1LjkgNC41IDYuNGwtLjEgLjF6bS05LjktNDEuNmMtMiAwLTQtMS01LTNzLTItMy41LTMtNWMtMi0yLTItNS40IDAtNy40czUuNC0yIDcuNCAwYzIgMi41IDMuNSA1IDUgNy40cy41IDUuOS0yLjUgNy40Yy0uNiAwLTEgLjItMS4zIC4zLS4yIC4xLS40IC4yLS42IC4ybDAgLjF6Il0KICAgIH07CiAgICBmYUdnQ2lyY2xlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdnLWNpcmNsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjYxIiwgIk0yNTcuNSA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMjA4IDM4Mi44bC0xMjUuNy0xMjUuNyAxMjUuNy0xMjUuNyAzNS4yIDM1LjQtMjQuMiAyNC4yLTExLjEtMTEuMS03Ny4yIDc3LjIgNzcuMiA3Ny4yIDI2LjYtMjYuNi01My4xLTUyLjkgMjQuNC0yNC40IDc3LjIgNzcuMi03NSA3NS4yem05OS0yLjJsLTM1LjItMzUuMiAyNC4xLTI0LjQgMTEuMSAxMS4xIDc3LjItNzcuMi03Ny4yLTc3LjItMjYuNSAyNi41IDUzLjEgNTIuOS0yNC40IDI0LjQtNzcuMi03Ny4yIDc1LTc1IDEyNS43IDEyNS43LTEyNS43IDEyNS42eiJdCiAgICB9OwogICAgZmFDbG91ZGZsYXJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNsb3VkZmxhcmUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTA3ZCIsICJNNDA3LjkgMzE5LjlMMTc3LjEgMzE3Yy0uNyAwLTEuNC0uMi0yLS41cy0xLjItLjgtMS42LTEuNGMtLjQtLjYtLjctMS4zLS43LTJzMC0xLjQgLjItMi4xYy40LTEuMSAxLjEtMi4xIDIuMS0yLjhzMi4xLTEuMiAzLjMtMS4ybDIzMi45LTIuOWMyNy42LTEuMyA1Ny41LTIzLjYgNjgtNTAuOGwxMy4zLTM0LjVjLjQtLjkgLjUtMS45IC41LTIuOSAwLS41LS4xLTEuMS0uMi0xLjYtNy40LTMyLjItMjUtNjEuMS01MC4zLTgyLjNzLTU2LjctMzMuNy04OS43LTM1LjUtNjUuNiA3LjMtOTMgMjUuNy00OCA0NS4zLTU4LjggNzYuNWMtMTEuMy04LjUtMjQuOS0xMy4zLTM5LTEzLjdzLTI4IDMuNS0zOS44IDExLjQtMjAuOCAxOS4xLTI1LjkgMzIuMy01LjkgMjcuNi0yLjQgNDEuM2MtNTIuMyAxLjUtOTQuMiA0NC4xLTk0LjIgOTYuNSAwIDQuNyAuMyA5LjMgMSAxNCAuMiAxLjEgLjcgMi4xIDEuNSAyLjhzMS45IDEuMSAyLjkgMS4xbDQyNi4xIC4xYzAgMCAuMSAwIC4xIDAgMS4yIDAgMi4zLS40IDMuMy0xLjFzMS42LTEuNyAyLTIuOWwzLjMtMTEuM2MzLjktMTMuNCAyLjQtMjUuOC00LjEtMzQuOS02LTguNC0xNi4xLTEzLjMtMjguMi0xMy45em0xMDUuOS05OC44Yy0yLjEgMC00LjMgLjEtNi40IC4yLS44IC4xLTEuNSAuMy0yLjEgLjhzLTEgMS4xLTEuMyAxLjhsLTkuMSAzMS4yYy0zLjkgMTMuNC0yLjQgMjUuOCA0LjEgMzQuOSA2IDguNCAxNi4xIDEzLjMgMjguMiAxMy45bDQ5LjIgMi45Yy43IDAgMS40IC4yIDIgLjVzMS4xIC44IDEuNSAxLjRjLjQgLjYgLjcgMS4zIC44IDJzMCAxLjUtLjIgMi4xYy0uNCAxLjEtMS4xIDIuMS0yLjEgMi44cy0yLjEgMS4yLTMuMyAxLjJsLTUxLjEgMi45Yy0yNy44IDEuMy01Ny43IDIzLjYtNjguMSA1MC44bC0zLjcgOS42Yy0uMiAuNC0uMiAuOC0uMiAxLjNzLjIgLjggLjQgMS4yIC42IC43IC45IC45IC44IC4zIDEuMiAuM2MwIDAgLjEgMCAuMSAwbDE3NS45IDBjMSAwIDItLjMgMi44LS45czEuNC0xLjUgMS43LTIuNGMzLjEtMTEuMSA0LjctMjIuNSA0LjctMzQgMC02OS4zLTU2LjUtMTI1LjUtMTI2LjEtMTI1LjV6Il0KICAgIH07CiAgICBmYUhhY2tlcnJhbmsgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaGFja2VycmFuayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWY3IiwgIk00NzcuOSAxMjhDNDYzLjQgMTAzIDI4NS41IDAgMjU2LjUgMHMtMjA2LjkgMTAyLjgtMjIxLjMgMTI4LTE0LjUgMjMwLjggMCAyNTYgMTkyLjQgMTI4IDIyMS4zIDEyOCAyMDYuOC0xMDIuOSAyMjEuMy0xMjggMTQuNS0yMzEgMC0yNTZ6TTMxNi41IDQxNC4yYy00IDAtNDAuOS0zNS44LTM4LTM4LjcgLjktLjkgNi4zLTEuNSAxNy41LTEuOCAwLTI2LjIgLjYtNjguNiAuOS04Ni4zIDAtMi0uNC0zLjQtLjQtNS44bC03OS45IDBjMCA3LjEtLjUgMzYuMiAxLjQgNzIuOSAuMiA0LjUtMS42IDYtNS43IDUuOS0xMC4xIDAtMjAuMy0uMS0zMC40LS4xLTQuMSAwLTUuOS0xLjUtNS43LTYuMSAuOS0zMy40IDMtODQtLjItMjEyLjdsMC0zLjJjLTkuNy0uNC0xNi40LTEtMTcuMy0xLjgtMi45LTIuOSAzNC41LTM4LjcgMzguNS0zOC43czQxLjIgMzUuOCAzOC4zIDM4LjdjLS45IC45LTcuOSAxLjUtMTYuOCAxLjhsMCAzLjJjLTIuNCAyNS44LTIgNzkuNi0yLjYgMTA1LjRsODAuMyAwYzAtNC42IC40LTM0LjctMS4yLTgzLjYtLjEtMy40IDEtNS4yIDQuMi01LjIgMTEuMS0uMSAyMi4yLS4xIDMzLjItLjEgMy41IDAgNC42IDEuNyA0LjUgNS40LTMuNyAxOTEuMy0uNyAxNzcuOS0uNyAyMTAuMyA4LjkgLjQgMTYuOCAxIDE3LjcgMS44IDIuOSAyLjktMzMuNiAzOC43LTM3LjYgMzguN2wwIDB6Il0KICAgIH07CiAgICBmYVNreWF0bGFzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNreWF0bGFzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyMTYiLCAiTTY0MCAzMjkuM2MwIDY1LjktNTIuNSAxMTQuNC0xMTcuNSAxMTQuNC0xNjUuOSAwLTE5Ni42LTI0OS43LTM1OS43LTI0OS43LTE0Ni45IDAtMTQ3LjEgMjEyLjIgNS42IDIxMi4yIDQyLjUgMCA5MC45LTE3LjggMTI1LjMtNDIuNSA1LjYtNC4xIDE2LjktMTYuMyAyMi44LTE2LjNzMTAuOSA1IDEwLjkgMTAuOWMwIDcuOC0xMy4xIDE5LjEtMTguNyAyNC4xLTQwLjkgMzUuNi0xMDAuMyA2MS4yLTE1NC43IDYxLjItODMuNCAuMS0xNTQtNTktMTU0LTE0NC45UzY3LjUgMTQ5LjYgMTUyLjggMTQ5LjZjMTg1LjMgMCAyMjIuNSAyNDUuOSAzNjEuOSAyNDUuOSA5OS45IDAgOTQuOC0xMzkuNyAzLjQtMTM5LjctMTcuNSAwLTM1IDExLjYtNDYuOSAxMS42LTguNCAwLTE1LjktNy4yLTE1LjktMTUuNiAwLTExLjYgNS4zLTIzLjcgNS4zLTM2LjMgMC02Ni42LTUwLjktMTE0LjctMTE2LjktMTE0LjctNTMuMSAwLTgwIDM2LjktODguOCAzNi45LTYuMiAwLTExLjItNS0xMS4yLTExLjIgMC01LjYgNC4xLTEwLjMgNy44LTE0LjQgMjUuMy0yOC44IDY0LjctNDMuNyAxMDIuOC00My43IDc5LjQgMCAxMzkuMSA1OC40IDEzOS4xIDEzNy44IDAgNi45LS4zIDEzLjctMS4yIDIwLjYgMTEuOS0zLjEgMjQuMS00LjcgMzUuOS00LjcgNjAuNyAwIDExMS45IDQ1LjMgMTExLjkgMTA3LjJ6Il0KICAgIH07CiAgICBmYURlc2twcm8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGVza3BybyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzhmIiwgIk0yMjIgNTEybDMxLjEtMzguNGMxMi4zLS4yIDI1LjYtMS40IDM2LjUtNi42IDM4LjktMTguNiAzOC40LTYxLjkgMzguMy02My44LS4xLTUtLjgtNC40LTI4LjktMzcuNGw3OS4xIDBjLS4yIDUwLjEtNy4zIDY4LjUtMTAuMiA3NS43LTkuNCAyMy43LTQzLjkgNjIuOC05NS4yIDY5LjQtOC43IDEuMS0zMi44IDEuMi01MC43IDEuMXpNNDIyLjQgMzQ0LjNjMzguNiAwIDU4LjUtMTMuNiA3My43LTMwLjlsLTE3NS41LS4zLTE3LjQgMzEuMyAxMTkuMi0uMXpNMzc4LjggMTIwLjRsMCAxNjguMy03My41IDAtMzIuNyA1NS41LTYuNSAwYy01Mi4zIDAtNTguMS01Ni41LTU4LjMtNTguOS0xLjItMTMuMi0yMS4zLTExLjYtMjAuMSAxLjggMS40IDE1LjggOC44IDQwIDI2LjQgNTcuMWwtOTEgMGMtMjUuNSAwLTExMC44LTI2LjgtMTA3LTExNGwwLTIxMy4zYzAtMTYgOS43LTE2LjYgMTUtMTYuOGw4MiAwYy4yIDAgLjMgLjEgLjUgLjEgNC4zLS40IDUwLjEtMi4xIDUwLjEgNDMuNyAwIDEzLjMgMjAuMiAxMy40IDIwLjIgMCAwLTE4LjItNS41LTMyLjgtMTUuOC00My43bDg0LjIgMEMzNjEtLjIgMzc4LjggNzkuNiAzNzguOCAxMjAuNHptLTEzMi41IDU2bDY0IDI5LjNjMTMuMy00NS41LTQyLjItNzEuNy02NC0yOS4zeiJdCiAgICB9OwogICAgZmFSZXNvbHZpbmcgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVzb2x2aW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzZTciLCAiTTI4OS4yIDI3OC4yYzQ2LTEzLjMgNDkuNi0yMy41IDQ0LTQzLjRMMzIyIDE5NS41Yy02LjEtMjAuOS0xOC40LTI4LjEtNzEuMS0xMi44bC0xODguMiA1NC4xIDI4LjYgOTguNiAxOTcuOS01Ny4yek0yNTYuNSA4QzEzOS40IDggNDEuMiA4OC43IDE1LjIgMTk3LjVsMjIxLjktNjMuOWMzNC44LTEwLjIgNTQuMi0xMS43IDc5LjMtOC4yIDM2LjMgNi4xIDUyLjcgMjUgNjEuNCA1NS4ybDEwLjcgMzcuOGM4LjIgMjguMSAxIDUwLjYtMjMuNSA3My42LTE5LjQgMTcuNC0zMS4yIDI0LjUtNjEuNCAzMy4ybC05Mi42IDI2LjYgMjIwLjQgMjcuMSA5LjcgMzQuMi00OC4xIDEzLjMtMjg2LjgtMzcuMyAyMyA4MC4yQzE2NiA0OTEuMyAyMDkuNSA1MDQgMjU1LjUgNTA0IDM5Mi41IDUwNCA1MDQgMzkyLjYgNTA0IDI1NS43IDUwNSAxMTkuNCAzOTMuNSA4IDI1Ni41IDh6TTQ2LjMgMzg4LjZMOCAyNTYuOGMwIDQ4LjUgMTQuMyA5My40IDM4LjMgMTMxLjh6Il0KICAgIH07CiAgICBmYUJsYWNrYmVycnkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmxhY2tiZXJyeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzdiIiwgIk0xNjYgMTE2LjljMCAyMy40LTE2LjQgNDkuMS03Mi41IDQ5LjFsLTcwLjEgMCAyMS04OC44IDY3LjggMGM0Mi4xIDAgNTMuOCAyMy4zIDUzLjggMzkuN3pNMjkyLjIgNzcuMmwtNjcuOCAwLTE4LjcgODguOCA3MC4xIDBjNTMuOCAwIDcwLjEtMjUuNyA3MC4xLTQ5LjEgLjEtMTYuNC0xMS42LTM5LjctNTMuNy0zOS43ek04OC44IDIwOC4xbC02Ny44IDAtMjEgODguOCA3MC4xIDBjNTYuMSAwIDcyLjUtMjMuNCA3Mi41LTQ5LjEgMC0xNi4zLTExLjctMzkuNy01My44LTM5Ljd6bTE4MC4xIDBsLTY3LjggMC0xOC43IDg4LjggNzAuMSAwYzUzLjggMCA3MC4xLTIzLjQgNzAuMS00OS4xIDAtMTYuMy0xMS43LTM5LjctNTMuNy0zOS43em0xODkuMy01My44bC02Ny44IDAtMTguNyA4OC44IDcwLjEgMGM1My44IDAgNzAuMS0yMy40IDcwLjEtNDkuMSAuMS0xNi4zLTExLjYtMzkuNy01My43LTM5Ljd6bS0yOCAxMzcuOWwtNjcuOCAwLTE4LjcgODguOCA3MC4xIDBjNTYuMSAwIDcwLjEtMjMuNCA3MC4xLTQ5LjEgMC0xNi4zLTExLjYtMzkuNy01My43LTM5Ljd6TTI0MC44IDM0NmwtNjcuOCAwLTE4LjcgODguOCA3MC4xIDBjNTYuMSAwIDcwLjEtMjUuNyA3MC4xLTQ5LjEgLjEtMTYuMy0xMS42LTM5LjctNTMuNy0zOS43eiJdCiAgICB9OwogICAgZmFTdHJpcGVTID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0cmlwZS1zIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY0MmEiLCAiTTE1NS42IDE1NC42YzAtMjIuMyAxOC42LTMwLjkgNDguNC0zMC45IDQzLjQgMCA5OC41IDEzLjMgMTQxLjkgMzYuN2wwLTEzNC4zYy00Ny4zLTE4LjktOTQuNS0yNi4xLTE0MS44LTI2LjEtMTE1LjcgMC0xOTIuOCA2MC40LTE5Mi44IDE2MS40IDAgMTU3LjkgMjE2LjggMTMyLjMgMjE2LjggMjAwLjQgMCAyNi40LTIyLjkgMzQuOS01NC43IDM0LjktNDcuMiAwLTEwOC4yLTE5LjUtMTU2LjEtNDUuNWwwIDEyOC41YzQ5LjMgMjEuMyAxMDIuMyAzMi4zIDE1NiAzMi40IDExOC42IDAgMjAwLjMtNTEgMjAwLjMtMTUzLjYgMC0xNzAuMi0yMTgtMTM5LjctMjE4LTIwMy45eiJdCiAgICB9OwogICAgZmFTcXVhcmVCZWhhbmNlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1iZWhhbmNlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImJlaGFuY2Utc3F1YXJlIl0sICJmMWI1IiwgIk0xNTUuMyAzMTguNGMxNy4yIDAgMzEuMi02LjEgMzEuMi0yNS40IDAtMTkuNy0xMS43LTI3LjQtMzAuMy0yNy41bC00NiAwIDAgNTIuOSA0NS4xIDB6bS01LjQtMTI5LjZsLTM5LjYgMCAwIDQ0LjggNDIuNyAwYzE1LjEgMCAyNS44LTYuNiAyNS44LTIyLjkgMC0xNy43LTEzLjctMjEuOS0yOC45LTIxLjl6bTEyOS41IDc0LjhsNjIuMiAwYy0xLjctMTguNS0xMS4zLTI5LjctMzAuNS0yOS43LTE4LjMgMC0zMC41IDExLjQtMzEuNyAyOS43ek0zODQgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NHpNMzQ5LjUgMTg1bC03Ny44IDAgMC0xOC45IDc3LjggMCAwIDE4Ljl6TTE5My43IDI0My43YzIzLjYgNi43IDM1IDI3LjUgMzUgNTEuNiAwIDM5LTMyLjcgNTUuNy02Ny42IDU1LjlsLTkzLjEgMCAwLTE5MiA5MC41IDBjMzIuOSAwIDYxLjQgOS4zIDYxLjQgNDcuNSAwIDE5LjMtOSAyOC44LTI2LjIgMzd6bTExOC43LTM4LjZjNDMuNSAwIDY3LjYgMzQuMyA2Ny42IDc1LjQgMCAxLjYtLjEgMy4zLS4yIDUgMCAuOC0uMSAxLjUtLjEgMi4ybC0xMDAuMiAwYzAgMjIuMiAxMS43IDM1LjMgMzQuMSAzNS4zIDExLjYgMCAyNi41LTYuMiAzMC4yLTE4LjFsMzMuNyAwYy0xMC40IDMxLjktMzEuOSA0Ni44LTY1LjEgNDYuOC00My44IDAtNzEuMS0yOS43LTcxLjEtNzMgMC00MS44IDI4LjctNzMuNiA3MS4xLTczLjZ6Il0KICAgIH07CiAgICBmYUJlaGFuY2VTcXVhcmUgPSBmYVNxdWFyZUJlaGFuY2U7CiAgICBmYVNlcnZpY2VzdGFjayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzZXJ2aWNlc3RhY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNlYyIsICJNOTYgMjE2YzgxLjcgMTAuMiAyNzMuNyAxMDIuMyAzMDQgMjMyTDggNDQ4Yzk5LjUtOC4xIDE4NC41LTEzNyA4OC0yMzJ6TTEyOCA2NGMzMi4zIDM1LjYgNDcuNyA4My45IDQ2LjQgMTMzLjYgODIuOSAzMy43IDIwNy4zIDEyMy43IDIzMy42IDI1MC40bDk2IDBDNDYzLjMgMjMxLjkgMjMwLjggNzkuNSAxMjggNjR6Il0KICAgIH07CiAgICBmYVJvY2tldGNoYXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicm9ja2V0Y2hhdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmM2U4IiwgIk0yODQuNSAyMjQuOGMtNi43IDAtMTMuMyAyLjEtMTguOSA1LjhzLTkuOSA5LjEtMTIuNSAxNS40LTMuMiAxMy4xLTEuOSAxOS43IDQuNiAxMi43IDkuNCAxNy40IDEwLjkgOCAxNy41IDkuMyAxMy41IC42IDE5LjctMiAxMS41LTcgMTUuMy0xMi42IDUuNy0xMi4yIDUuNy0xOC45YzAtOS4xLTMuNy0xNy44LTEwLjEtMjQuMnMtMTUuMS0xMC0yNC4yLTkuOXptLTExMC40IDBjLTYuNyAwLTEzLjMgMi4xLTE4LjkgNS44cy05LjkgOS4xLTEyLjUgMTUuNC0zLjIgMTMuMS0xLjkgMTkuNyA0LjYgMTIuNyA5LjQgMTcuNCAxMC45IDggMTcuNSA5LjMgMTMuNSAuNiAxOS43LTIgMTEuNS03IDE1LjMtMTIuNiA1LjctMTIuMiA1LjctMTguOWMwLTkuMS0zLjctMTcuOC0xMC4xLTI0LjJzLTE1LjEtMTAtMjQuMi0xMGwwIDB6bTIyMC45IDBhMzQuMSAzNC4xIDAgMSAwIC40IDY4LjIgMzQuMSAzNC4xIDAgMSAwIC0uNC02OC4yem0xNTMuOC01NS4zYy0xNS41LTI0LjItMzcuMy00NS42LTY0LjctNjMuNi01Mi45LTM0LjgtMTIyLjQtNTQtMTk1LjctNTQtMjQuMiAwLTQ4LjMgMi4xLTcyIDYuNC0xNC45LTE0LjMtMzEuNS0yNi42LTQ5LjUtMzYuNi02Ni44LTMzLjMtMTI1LjYtMjAuOS0xNTUuMy0xMC4yLTIuMyAuOC00LjMgMi4xLTUuOSAzLjlzLTIuNyAzLjktMy4zIDYuMi0uNSA0LjcgLjEgNy4xIDEuOCA0LjQgMy41IDYuMUMyNyA1Ni41IDYxLjYgOTkuMyA1My4xIDEzOC4zIDIwIDE3Mi4yIDIgMjEzIDIgMjU1LjYgMiAyOTkgMjAgMzM5LjggNTMuMSAzNzMuNyA2MS42IDQxMi43IDI3IDQ1NS42IDYgNDc3LjIgNC4zIDQ3OSAzLjIgNDgxLjEgMi41IDQ4My40cy0uNyA0LjctLjEgNyAxLjcgNC41IDMuMyA2LjIgMy42IDMuMSA1LjkgMy45YzI5LjcgMTAuNyA4OC41IDIzLjEgMTU1LjMtMTAuMiAxOC0xMCAzNC43LTIyLjMgNDkuNS0zNi42IDIzLjggNC4zIDQ3LjkgNi40IDcyIDYuNCA3My4zIDAgMTQyLjgtMTkuMiAxOTUuNy01NCAyNy40LTE4IDQ5LjEtMzkuNCA2NC43LTYzLjYgMTcuMy0yNi45IDI2LjEtNTUuOSAyNi4xLTg2LjEgMC0zMS04LjgtNjAtMjYuMS04Ni45bDAgMHpNMjg1LjQgNDA5LjljLTMwLjIgLjEtNjAuMy0zLjgtODkuNC0xMS41bC0yMC4xIDE5LjRjLTExLjIgMTAuNy0yMy42IDIwLTM3LjEgMjcuNi0xNi40IDguMi0zNC4yIDEzLjMtNTIuNSAxNC45IDEtMS44IDEuOS0zLjYgMi44LTUuNCAyMC4yLTM3LjEgMjUuNi03MC41IDE2LjMtMTAwLjEtMzMtMjYtNTIuOC01OS4yLTUyLjgtOTUuNCAwLTgzLjEgMTA0LjMtMTUwLjUgMjMyLjgtMTUwLjVzMjMyLjkgNjcuNCAyMzIuOSAxNTAuNWMwIDgzLjEtMTA0LjMgMTUwLjUtMjMyLjkgMTUwLjV6Il0KICAgIH07CiAgICBmYVJlYmVsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJlYmVsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxZDAiLCAiTTI1Ni45IDUwNGMtMTM5LjMgMC0yNDcuNS0xMTYuMi0yNDMuMy0yNTQuMSAyLjgtNzkuMiA0My4yLTE1Mi4yIDExNi41LTIwMC40IC4zIDAgMS45LS42IDEuMSAuOC01LjggNS41LTExMS4zIDEyOS44LTE0LjEgMjI2LjQgNDkuOCA0OS41IDkwIDIuNSA5MCAyLjUgMzguNS01MC4xLS42LTEyNS45LS42LTEyNS45LTEwLTI0LjktNDUuNy00MC4xLTQ1LjctNDAuMWwyOC44LTMxLjhjMjQuNCAxMC41IDQzLjIgMzguNyA0My4yIDM4LjcgLjgtMjkuNi0yMS45LTYxLjQtMjEuOS02MS40TDI1NS41IDggMjk5LjggNTguMWMtMjAuNSAyOC44LTIxLjkgNjIuNi0yMS45IDYyLjYgMTMuOC0yMyA0My41LTM5LjMgNDMuNS0zOS4zbDI4LjUgMzEuOGMtMjcuNCA4LjktNDUuNCAzOS45LTQ1LjQgMzkuOS0xNS44IDI4LjUtMjcuMSA4OS40IC42IDEyNy4zIDMyLjQgNDQuNiA4Ny43LTIuOCA4Ny43LTIuOCAxMDIuNy05MS45LTEwLjUtMjI1LTEwLjUtMjI1LTYuMS01LjUgLjgtMi44IC44LTIuOCA1MC4xIDM2LjUgMTE0LjYgODQuNCAxMTYuMiAyMDQuOCAyIDE0NS42LTk5LjkgMjQ5LjQtMjQyLjQgMjQ5LjR6Il0KICAgIH07CiAgICBmYVNxdWFyZVdlYkF3ZXNvbWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXdlYi1hd2Vzb21lIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2ODMiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIzNSAxNzcuNmw1MyA0Ni40IDUyLjItMTAuNGMtMi42LTMuOS00LjItOC41LTQuMi0xMy42IDAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRjMCAxMy0xMC4zIDIzLjYtMjMuMiAyNEwzMDQuNSAzNDkuMWMtNS4yIDExLjUtMTYuNiAxOC45LTI5LjIgMTguOWwtMTAyLjYgMGMtMTIuNiAwLTI0LTcuNC0yOS4yLTE4LjlMODcuMiAyMjRjLTEyLjktLjQtMjMuMi0xMS0yMy4yLTI0IDAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRjMCA1LTEuNSA5LjctNC4yIDEzLjZMMTYwIDIyNCAyMTMuMSAxNzcuNmMtOC45LTQuMS0xNS0xMy4xLTE1LTIzLjYgMC0xNC40IDExLjYtMjYgMjYtMjZzMjYgMTEuNiAyNiAyNmMwIDEwLjUtNi4yIDE5LjUtMTUuMSAyMy42eiJdCiAgICB9OwogICAgZmFMaW5rdHJlZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsaW5rdHJlZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlN2Q4IiwgIk0zMiAxNzMuNGwxMjUuOCAwLTg5LjQtODUuNCA0OS41LTUxIDg1LjIgODcuOCAwLTEyNC44IDczLjkgMCAwIDEyNC44IDg1LjItODcuNiA0OS40IDUwLjgtODkuNCA4NS4yIDEyNS43IDAgMCA3MC41LTEyNi40IDAgOTAgODcuNi00OS4zIDQ5LjgtMTIyLjItMTIzLTEyMi4yIDEyMy00OS41LTQ5LjYgOTAtODcuNi0xMjYuNCAwIDAtNzAuNXpNMjAyLjkgMzQ0LjhsNzMuOSAwIDAgMTY3LjItNzMuOSAwIDAtMTY3LjJ6Il0KICAgIH07CiAgICBmYVNpbXBseWJ1aWx0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNpbXBseWJ1aWx0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyMTUiLCAiTTQ4MS42IDY0bC0xMDYgMEMzNjEuMSA2NCAzNDkgNzUuOCAzNDkgOTAuM2wwIDM5LjYtMTg1LjMgMCAwLTM5LjZjMC0xNC41LTEyLTI2LjMtMjYuNi0yNi4zbC0xMDYgMEMxNi41IDY0IDQuNyA3NS44IDQuNyA5MC4zbDAgMzMxLjRjMCAxNC41IDExLjggMjYuMyAyNi42IDI2LjNsNDUwLjQgMGMxNC44IDAgMjYuNi0xMS44IDI2LjYtMjYuM2wwLTMzMS40Yy0uMi0xNC41LTEyLTI2LjMtMjYuNy0yNi4zek0xNTAuNSAyMjIuN2E2Ni41IDY2LjUgMCAxIDEgLS4zIDEzMy4xIDY2LjUgNjYuNSAwIDEgMSAuMy0xMzMuMXptMjExLjkgLjFhNjYuNSA2Ni41IDAgMSAxIC4zIDEzMi45IDY2LjUgNjYuNSAwIDEgMSAtLjMtMTMyLjl6Il0KICAgIH07CiAgICBmYVN0dWJiZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3R1YmJlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNWM3IiwgIk0xMzYuNSAyOTQuMmw1OC44IDIyLjljOS4xLTM2LjggMjUuNC02MS4xIDU1LTYxLjEgNDkuNCAwIDcxLjQgNjMuNiAxNDIuNCA2My42IDE1LjYgMCAzNS45LTIuOCA1NS4zLTEzLjNsMCA2MS43YzAgNjEuOC01MC40IDExMi0xMTIuMyAxMTJMMCA0ODAgNDEuOCA0MjQgMCAzNjggNDEuNyAzMTIgMCAyNTYuMSA0MS44IDIwMC4xIDAgMTQ0LjEgNDEuOCA4OCAwIDMyIDMzNS43IDMyQzM5Ny42IDMyIDQ0OCA4Mi4zIDQ0OCAxNDQuMWwwIDUxLjNjLTkuMiAzNi4zLTI1LjkgNjAuNi01NSA2MC42LTQ5LjYgMC03MS42LTYzLjUtMTQyLjQtNjMuNS0zNS45IDAtOTUuMiAxNC42LTExNC4xIDEwMS42bDAgLjF6Il0KICAgIH07CiAgICBmYUFwcGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFwcGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzNzEiLCAiTTQyLjEgMjM5LjFjMjIuMiAwIDI5IDIuOCAzMy41IDE0LjZsLjggMCAwLTIyLjljMC0xMS4zLTQuOC0xNS40LTE3LjktMTUuNC0xMS4zIDAtMTQuNCAyLjUtMTUuMSAxMi44bC0zOC42IDBjLjMtMTMuOSAxLjUtMTkuMSA1LjgtMjQuNCA3LjMtOC44IDE4LjktMTEuOCA0Ni4xLTExLjggMzMgMCA0Ny4xIDUgNTMuOSAxOC45IDIgNC4zIDQgMTUuNiA0IDIzLjdsMCA3Ni4zLTM4LjMgMCAxLjMtMTkuMS0xIDBjLTUuMyAxNS42LTEzLjYgMjAuNC0zNS41IDIwLjQtMzAuMyAwLTQxLjEtMTAuMS00MS4xLTM3LjMgMC0yNS4yIDEyLjMtMzUuOCA0Mi4xLTM1Ljh6bTE3LjEgNDguMWMxMy4xIDAgMTYuOS0zIDE2LjktMTMuNCAwLTkuMS00LjMtMTEuNi0xOS42LTExLjYtMTMuMSAwLTE3LjkgMy0xNy45IDEyLjEtLjEgMTAuNCAzLjcgMTIuOSAyMC42IDEyLjl6TTEzNyAxOTIuM2wzOC4zIDAtMS41IDIwLjYgLjggMGM5LjEtMTcuMSAxNS45LTIwLjkgMzcuNS0yMC45IDE0LjQgMCAyNC43IDMgMzEuNSA5LjEgOS44IDguNiAxMi44IDIwLjQgMTIuOCA0OC4xIDAgMzAtMyA0My4xLTEyLjEgNTIuOS02LjggNy4zLTE2LjQgMTAuMS0zMy4yIDEwLjEtMjAuNCAwLTI5LjItNS41LTMzLjgtMjEuMmwtLjggMCAwIDcwLjMtMzkuNSAwIDAtMTY5ek0yMTcuOSAyNTNjMC0yNy41LTMuMy0zMi41LTIwLjctMzIuNS0xNi45IDAtMjAuNyA1LTIwLjcgMjguNyAwIDI4IDMuNSAzMy41IDIxLjIgMzMuNSAxNi40IDAgMjAuMi01LjYgMjAuMi0yOS43em01Ny45LTYwLjdsMzguMyAwLTEuNSAyMC42IC44IDBjOS4xLTE3LjEgMTUuOS0yMC45IDM3LjUtMjAuOSAxNC40IDAgMjQuNyAzIDMxLjUgOS4xIDkuOCA4LjYgMTIuOCAyMC40IDEyLjggNDguMSAwIDMwLTMgNDMuMS0xMi4xIDUyLjktNi44IDcuMy0xNi40IDEwLjEtMzMuMyAxMC4xLTIwLjQgMC0yOS4yLTUuNS0zMy44LTIxLjJsLS44IDAgMCA3MC4zLTM5LjUgMCAwLTE2OSAuMSAwek0zNTYuNyAyNTNjMC0yNy41LTMuMy0zMi41LTIwLjctMzIuNS0xNi45IDAtMjAuNyA1LTIwLjcgMjguNyAwIDI4IDMuNSAzMy41IDIxLjIgMzMuNSAxNi40IDAgMjAuMi01LjYgMjAuMi0yOS43em01My44LTMuOGMwLTI1LjQgMy4zLTM3LjggMTIuMy00NS44IDguOC04LjEgMjIuMi0xMS4zIDQ1LjEtMTEuMyA0Mi44IDAgNTUuNyAxMi44IDU1LjcgNTUuN2wwIDExLjEtNzUuMyAwYy0uMyAyLS4zIDQtLjMgNC44IDAgMTYuOSA0LjUgMjEuOSAyMC4xIDIxLjkgMTMuOSAwIDE3LjktMyAxNy45LTEzLjlsMzcuNSAwIDAgMi4zYzAgOS44LTIuNSAxOC45LTYuOCAyNC43LTcuMyA5LjgtMTkuNiAxMy42LTQ0LjMgMTMuNi0yNy41IDAtNDEuNi0zLjMtNTAuNi0xMi4zLTguNS04LjUtMTEuMy0yMS4zLTExLjMtNTAuOHptNzYuNC0xMS42Yy0uMy0xLjgtLjMtMy4zLS4zLTMuOCAwLTEyLjMtMy4zLTE0LjYtMTkuNi0xNC42LTE0LjQgMC0xNy4xIDMtMTguMSAxNS4xbC0uMyAzLjMgMzguMyAwem01NS42LTQ1LjNsMzguMyAwLTEuOCAxOS45IC43IDBjNi44LTE0LjkgMTQuNC0yMC4yIDI5LjctMjAuMiAxMC44IDAgMTkuMSAzLjMgMjMuNCA5LjMgNS4zIDcuMyA2LjggMTQuNCA2LjggMzQgMCAxLjUgMCA1IC4yIDkuM2wtMzUgMGMuMy0xLjggLjMtMy4zIC4zLTQgMC0xNS40LTItMTkuNC0xMC4zLTE5LjQtNi4zIDAtMTAuOCAzLjMtMTMuMSA5LjMtMSAzLTEgNC4zLTEgMTIuM2wwIDY4LTM4LjMgMCAwLTExOC41IC4xIDB6Il0KICAgIH07CiAgICBmYUdvb2dsZVNjaG9sYXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlLXNjaG9sYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTYzYiIsICJNMzkwLjkgMjk4LjVzMCAuMSAuMSAuMWM5LjIgMTkuNCAxNC40IDQxLjEgMTQuNCA2NC0uMSA4Mi41LTY2LjkgMTQ5LjQtMTQ5LjQgMTQ5LjRTMTA2LjcgNDQ1LjEgMTA2LjcgMzYyLjdjMC0yMi45IDUuMi00NC42IDE0LjQtNjQgMS43LTMuNiAzLjYtNy4yIDUuNi0xMC43IDQuNC03LjYgOS40LTE0LjcgMTUtMjEuMyAyNy40LTMyLjYgNjguNS01My4zIDExNC40LTUzLjMgMzMuNiAwIDY0LjYgMTEuMSA4OS42IDI5LjkgOS4xIDYuOSAxNy40IDE0LjcgMjQuOCAyMy41IDUuNiA2LjYgMTAuNiAxMy44IDE1IDIxLjMgMiAzLjQgMy44IDcgNS41IDEwLjVsLS4xLS4xem0yNi40LTE4LjhjLTMwLjEtNTguNC05MS05OC40LTE2MS4zLTk4LjRzLTEzMS4yIDQwLTE2MS4zIDk4LjRsLTk0LjctNzcgMjU2LTIwMi43IDI1NiAyMDIuNy05NC43IDc3LjEgMC0uMXoiXQogICAgfTsKICAgIGZhWWFybiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ5YXJuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ZTMiLCAiTTQwMS45IDM0NS4yYy0zOSA5LjMtNDguNCAzMi4xLTEwNCA0Ny40IDAgMC0yLjcgNC0xMC40IDUuOC0xMy40IDMuMy02My45IDYtNjguNSA2LjEtMTIuNCAuMS0xOS45LTMuMi0yMi04LjItNi40LTE1LjMgOS4yLTIyIDkuMi0yMi04LjEtNS05LTkuOS05LjgtOC4xLTIuNCA1LjgtMy42IDIwLjEtMTAuMSAyNi41LTguOCA4LjktMjUuNSA1LjktMzUuMyAuOC0xMC44LTUuNyAuOC0xOS4yIC44LTE5LjJzLTUuOCAzLjQtMTAuNS0zLjZjLTYtOS4zLTE3LjEtMzcuMyAxMS41LTYyLTEuMy0xMC4xLTQuNi01My43IDQwLjYtODUuNiAwIDAtMjAuNi0yMi44LTEyLjktNDMuMyA1LTEzLjQgNy0xMy4zIDguNi0xMy45IDUuNy0yLjIgMTEuMy00LjYgMTUuNC05LjEgMjAuNi0yMi4yIDQ2LjgtMTggNDYuOC0xOHMxMi40LTM3LjggMjMuOS0zMC40YzMuNSAyLjMgMTYuMyAzMC42IDE2LjMgMzAuNnMxMy42LTcuOSAxNS4xLTVjOC4yIDE2IDkuMiA0Ni41IDUuNiA2NS4xLTYuMSAzMC42LTIxLjQgNDcuMS0yNy42IDU3LjUtMS40IDIuNCAxNi41IDEwIDI3LjggNDEuMyAxMC40IDI4LjYgMS4xIDUyLjcgMi44IDU1LjMgLjggMS40IDEzLjcgLjggMzYuNC0xMy4yIDEyLjgtNy45IDI4LjEtMTYuOSA0NS40LTE3IDE2LjctLjUgMTcuNiAxOS4yIDQuOSAyMi4yek04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem00MTYuNyA3NS4yYy0xLjctMTMuNi0xMy4yLTIzLTI4LTIyLjgtMjIgLjMtNDAuNSAxMS43LTUyLjggMTkuMi00LjggMy04LjkgNS4yLTEyLjQgNi44IDMuMS00NC41LTIyLjUtNzMuMS0yOC43LTc5LjQgNy44LTExLjMgMTguNC0yNy44IDIzLjQtNTMuMiA0LjMtMjEuNyAzLTU1LjUtNi45LTc0LjUtMS42LTMuMS03LjQtMTEuMi0yMS03LjQtOS43LTIwLTEzLTIyLjEtMTUuNi0yMy44LTEuMS0uNy0yMy42LTE2LjQtNDEuNCAyOC0xMi4yIC45LTMxLjMgNS4zLTQ3LjUgMjIuOC0yIDIuMi01LjkgMy44LTEwLjEgNS40bC4xIDBjLTguNCAzLTEyLjMgOS45LTE2LjkgMjIuMy02LjUgMTcuNCAuMiAzNC42IDYuOCA0NS43LTE3LjggMTUuOS0zNyAzOS44LTM1LjcgODIuNS0zNCAzNi0xMS44IDczLTUuNiA3OS42LTEuNiAxMS4xIDMuNyAxOS40IDEyIDIzLjggMTIuNiA2LjcgMzAuMyA5LjYgNDMuOSAyLjggNC45IDUuMiAxMy44IDEwLjEgMzAgMTAuMSA2LjggMCA1OC0yLjkgNzIuNi02LjUgNi44LTEuNiAxMS41LTQuNSAxNC42LTcuMSA5LjgtMy4xIDM2LjgtMTIuMyA2Mi4yLTI4LjcgMTgtMTEuNyAyNC4yLTE0LjIgMzcuNi0xNy40IDEyLjktMy4yIDIxLTE1LjEgMTkuNC0yOC4yeiJdCiAgICB9OwogICAgZmFTdGFja092ZXJmbG93ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0YWNrLW92ZXJmbG93IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxNmMiLCAiTTI5MSAzMTFsLTE5NS43LTQxLjMtOC4yIDM5LjMgMTk1LjcgNDEgOC4yLTM5em01MS04N0wxODguNSA5NS43IDE2MyAxMjYuNSAzMTYuNSAyNTQuOCAzNDIgMjI0em0tMzEuMiAzOS43TDEyOS41IDE3OSAxMTIuOCAyMTUuNSAyOTQgMzAwIDMxMC44IDI2My43ek0yNjIuMyAzMmwtMzIgMjQgMTE5LjMgMTYwLjMgMzItMjQtMTE5LjMtMTYwLjN6bTIwLjUgMzI4bC0yMDAgMCAwIDM5LjcgMjAwIDAgMC0zOS43em0zOS43IDgwbC0yNzkuNSAwIDAtMTIwLTQwIDAgMCAxNjAgMzU5LjUgMCAwLTE2MC00MCAwIDAgMTIweiJdCiAgICB9OwogICAgZmFCbHVldG9vdGggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmx1ZXRvb3RoIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYyOTMiLCAiTTI2MC42IDE3MS4xbC00Mi45IDQyLjktLjMtODYgNDMuMiA0My4xek0yMTcuNCAzOTAuOWw0My4xLTQzLjEtNDIuOS00Mi45LS4yIDg2ek0zODQgMjU5LjRDMzg0IDQ2NSAzMTIuMSA1MTIgMTk4LjkgNTEyUzAgNDY1IDAgMjU5LjQgODMuNCAwIDE5Ni42IDAgMzg0IDUzLjkgMzg0IDI1OS40em0tMTU4LjUgMGw3OS40LTg4LjYtMTI1LjEtMTM0LjMgMCAxNzYuOS03My44LTczLjgtMjcgMjYuOSA5Mi43IDkzLTkyLjcgOTMgMjYuOSAyNi45IDczLjgtNzMuOCAyLjMgMTcwIDEyNy40LTEyNy41LTgzLjktODguN3oiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zTmNKcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLW5jLWpwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZWEiLCAiTTI1NS43IDhDMTExLjYgOCA4IDEyNC44IDggMjU2IDggMzkyLjQgMTE5LjggNTA0IDI1NS43IDUwNCAzODUuOSA1MDQgNTA0IDQwMy4yIDUwNCAyNTYgNTA0IDExNy4yIDM5Ni41IDggMjU1LjcgOHptLjYgNDUwLjdjLTExMiAwLTIwMy42LTkyLjUtMjAzLjYtMjAyLjcgMC0yMS4xIDMtNDEuMiA5LTYwLjNsMTI3IDU2LjUtMjcuOSAwIDAgMzguNiA1OC4xIDAgNS43IDExLjggMCAxOC43LTYzLjggMCAwIDM4LjcgNjMuOCAwIDAgNTYgNjEuNyAwIDAtNTYgNjQuMiAwIDAtMzUuNyA4MSAzNi4xYy0xLjUgMi4yLTU3LjEgOTguMy0xNzUuMiA5OC4zem04Ny42LTEzNy4zbC01Ny42IDAgMC0xOC43IDIuOS01LjYgNTQuNyAyNC4zem02LjUtNTEuNGwwLTE3LjgtMzguNiAwIDYzLTExNi02NS44IDAtNDMuNCA5Ni0yMy0xMC4yLTM5LjYtODUuNy02NS44IDAgMjcuMyA1MS04MS45LTM2LjVjMjcuOC00NC4xIDgyLjYtOTguMSAxNzMuNy05OC4xIDExMi44IDAgMjAzIDkwIDIwMyAyMDMuNCAwIDIxLTIuNyA0MC42LTcuOSA1OUwzNTAuNCAyNzB6Il0KICAgIH07CiAgICBmYVJlZGRpdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZWRkaXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFhMSIsICJNMCAyNTZDMCAxMTQuNiAxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2IDM5Ny40IDUxMiAyNTYgNTEyTDM3LjEgNTEyYy0xMy43IDAtMjAuNS0xNi41LTEwLjktMjYuMkw3NSA0MzdDMjguNyAzOTAuNyAwIDMyNi43IDAgMjU2ek0zNDkuNiAxNTMuNmMyMy42IDAgNDIuNy0xOS4xIDQyLjctNDIuN3MtMTkuMS00Mi43LTQyLjctNDIuN2MtMjAuNiAwLTM3LjggMTQuNi00MS44IDM0LTM0LjUgMy43LTYxLjQgMzMtNjEuNCA2OC40bDAgLjJjLTM3LjUgMS42LTcxLjggMTIuMy05OSAyOS4xLTEwLjEtNy44LTIyLjgtMTIuNS0zNi41LTEyLjUtMzMgMC01OS44IDI2LjgtNTkuOCA1OS44IDAgMjQgMTQuMSA0NC42IDM0LjQgNTQuMSAyIDY5LjQgNzcuNiAxMjUuMiAxNzAuNiAxMjUuMnMxNjguNy01NS45IDE3MC42LTEyNS4zYzIwLjItOS42IDM0LjEtMzAuMiAzNC4xLTU0IDAtMzMtMjYuOC01OS44LTU5LjgtNTkuOC0xMy43IDAtMjYuMyA0LjYtMzYuNCAxMi40LTI3LjQtMTctNjIuMS0yNy43LTEwMC0yOS4xbDAtLjJjMC0yNS40IDE4LjktNDYuNSA0My40LTQ5LjkgNC40IDE4LjggMjEuMyAzMi44IDQxLjUgMzIuOGwuMSAuMnpNMTc3LjEgMjQ2LjljMTYuNyAwIDI5LjUgMTcuNiAyOC41IDM5LjNzLTEzLjUgMjkuNi0zMC4zIDI5LjYtMzEuNC04LjgtMzAuNC0zMC41IDE1LjQtMzguMyAzMi4xLTM4LjNsLjEtLjF6bTE5MC4xIDM4LjNjMSAyMS43LTEzLjcgMzAuNS0zMC40IDMwLjVzLTI5LjMtNy45LTMwLjMtMjkuNiAxMS44LTM5LjMgMjguNS0zOS4zIDMxLjIgMTYuNiAzMi4xIDM4LjNsLjEgLjF6bS00OC4xIDU2LjdjLTEwLjMgMjQuNi0zNC42IDQxLjktNjMgNDEuOXMtNTIuNy0xNy4zLTYzLTQxLjljLTEuMi0yLjkgLjgtNi4yIDMuOS02LjUgMTguNC0xLjkgMzguMy0yLjkgNTkuMS0yLjlzNDAuNyAxIDU5LjEgMi45YzMuMSAuMyA1LjEgMy42IDMuOSA2LjV6Il0KICAgIH07CiAgICBmYUNvbm5lY3RkZXZlbG9wID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNvbm5lY3RkZXZlbG9wIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyMGUiLCAiTTU1MC44IDI0MWwtNTAuMS04Ni44YzEuMS0yLjEgMS45LTQuNiAxLjktNy4yIDAtOC02LjctMTQuNy0xNC43LTE1TDQzMi40IDM2LjFjLjUtMS42IDEuMS0zLjIgMS4xLTQuOCAwLTguNi03LTE1LjMtMTUuMy0xNS4zLTQuOCAwLTguOCAyLjEtMTEuOCA1LjZsLTEwNi42IDBjLTIuNy0zLjUtNi43LTUuNi0xMS41LTUuNnMtOC44IDIuMS0xMS41IDUuNmwtMTA2LjEgMGMtMi45LTMuNS03LTUuNi0xMS44LTUuNi04LjMgMC0xNS4zIDYuNy0xNS4zIDE1LjMgMCAxLjYgLjUgMy41IDEuMSA0LjhsLTU2IDk3LjJjLTUuNCAyLjQtOS4xIDcuNS05LjEgMTMuNyAwIC41IC4zIDEuMSAuMyAxLjZMMjYuNiAyNDAuN2MtNy4yIDEuMy0xMi42IDcuNS0xMi42IDE1IDAgNy4yIDUuMSAxMy40IDEyLjEgMTVsNTUuMiA5NS40Yy0uNSAxLjYtLjggMi45LS44IDQuOCAwIDcuMiA1LjEgMTMuNCAxMi4xIDE0LjdsNTEuNyA4OS43Yy0uNSAxLjYtMS4xIDMuNS0xLjEgNS40IDAgOC42IDcgMTUuMyAxNS4zIDE1LjMgNC44IDAgOC44LTIuMSAxMS41LTUuNGwxMDYuOSAwYzIuNyAzLjIgNyA1LjQgMTEuNSA1LjRzOC44LTIuMSAxMS41LTUuNGwxMDcuMSAwYzIuNyAyLjkgNi43IDQuOCAxMSA0LjggOC42IDAgMTUuMy03IDE1LjMtMTUuMyAwLTEuNi0uMy0yLjktLjgtNC4zbDUxLjctOTAuM2M3LTEuMyAxMi4xLTcuNSAxMi4xLTE0LjcgMC0xLjYtLjMtMy4yLS44LTQuOGw1NC45LTk1LjRjNy0xLjMgMTIuMy03LjUgMTIuMy0xNSAwLTcuMi01LjEtMTMuNC0xMS44LTE0Ljd6bS0zOTcgMjA5LjdsLTQzLjctNzUuOCA0My43IDAgMCA3NS44em0wLTgzLjhsLTQzLjcgMGMtLjMtMS4xLS44LTIuMS0xLjMtMy4ybDQ1LTQ3LjQgMCA1MC42em0wLTYyLjRsLTUwLjQgNTMuM2MtMS4zLS41LTIuNy0xLjMtNC0xLjZMNDMuNyAyNTkuOGMuNS0xLjMgLjUtMi43IC41LTRzMC0yLjQtLjMtMy41bDUyLTkwYzIuNy0uMyA1LjQtMS4xIDcuOC0yLjdsNTAuMSA1MiAwIDkyLjl6bTAtMTAyLjNMMTA4IDE1NC44YzEuMy0yLjEgMi4xLTQuOCAyLjEtNy44IDAtLjMtLjMtLjgtLjMtMS4xbDQzLjktMTUuOCAwIDcyLjF6bTAtODAuNmwtNDMuNyAxNS44IDQzLjctNzUuNSAwIDU5Ljd6bTMyNi41IDM5LjFsLjggMS4zLTM1LjQgMTY3LjEtNjMuOC02Ny4yIDk4LTEwMS41IC4zIC4zek0yOTIuMSAzNTUuMWwxMS41IDExLjgtMjIuOCAwIDExLjMtMTEuOHptLS4zLTExLjNsLTgzLjMtODUuNCA3OS42LTg0LjQgODMgODcuNi03OS4zIDgyLjJ6bTUuNCA1LjlsNzkuMy04Mi4yIDY3LjUgNzEuMy01LjkgMjguMS0xMjQgMC0xNi45LTE3LjF6TTQxMC43IDQ0LjRjMS4xIC41IDIuMSAxLjEgMy41IDEuM2w1Ny45IDEwMC43IDAgLjVjMCAyLjkgLjggNS42IDIuMSA3LjhsLTk3LjUgMTAxLjItODMtODcuNiAxMTcuMS0xMjR6bS05LjEtMi4xbC0xMTMuNiAxMjAuMy01Ny4xLTYwLjMgMTY2LjMtNjAgNC4zIDB6bS0xMjMuNSAwYzIuNyAyLjcgNi4yIDQuMyAxMC4yIDQuM3M3LjUtMS42IDEwLjItNC4zbDc1IDAtMTQ4LjQgNTMuNi01MC45LTUzLjYgMTAzLjkgMHpNMTYxLjkgNDcuOWwxLjEtMi4xYy45LS4yIDEuOC0uNSAyLjctLjhsNTEuMiA1My44LTU0LjkgMTkuOCAwLTcwLjd6bTAgNzkuM2w2MC44LTIyIDU5LjcgNjMuMi03OS42IDg0LjEtNDEtNDIuMSAwLTgzLjN6bTAgOTIuN2wzNi40IDM3LjgtMzYuNCAzOC4zIDAtNzYuMXptMCA4Ny45bDQyLjEtNDQuNSA4Mi44IDg2LTE3LjEgMTcuNy0xMDcuNyAwIDAtNTkuMnptNyAxNjIuMWMtMS42LTEuNi0zLjUtMi43LTUuOS0zLjVsLTEuMS0xLjYgMC04OS43IDk5LjkgMC05MS42IDk0LjgtMS4zIDB6bTEyOS45IDBjLTIuNy0yLjQtNi40LTQuMy0xMC40LTQuM3MtNy44IDEuOS0xMC40IDQuM2wtOTYuNCAwIDkxLjYtOTQuOCAzOC4zIDAgOTEuNiA5NC44LTEwNC4yIDB6bTEyMC0xMS44bC00LjMgNy41Yy0xLjMgLjMtMi40IC44LTMuNSAxLjNsLTg5LjItOTEuOSAxMTQuNCAwLTE3LjQgODN6bTEyLjktMjIuMmwxMi45LTYwLjggMjIgMC0zNC44IDYwLjh6bTM0LjgtNjguOGwtMjAuNCAwIDQuNi0yMS4yIDE3LjEgMTguMmMtLjUgLjgtMS4xIDEuOS0xLjMgMi45em02Ni4yLTEwNy40bC01NS40IDk2LjdjLTEuMyAuNS0yLjcgMS4xLTQgMS45bC0yMC42LTIyIDM0LjYtMTYzLjkgNDUuOCA3OS4zYy0uMyAxLjMtLjggMi43LS44IDQuMyAwIDEuMyAuMyAyLjQgLjUgMy43eiJdCiAgICB9OwogICAgZmFSZXNlYXJjaGdhdGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVzZWFyY2hnYXRlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0ZjgiLCAiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTI2Mi4yIDM2Ni40Yy02LjYgMy0zMy4yIDYtNTAtMTQuMi05LjItMTAuNi0yNS4zLTMzLjMtNDIuMi02My42LTguOSAwLTE0LjcgMC0yMS40LS42bDAgNDYuNGMwIDIzLjUgNiAyMS4yIDI1LjggMjMuOWwwIDguMWMtNi45LS4zLTIzLjEtLjgtMzUuNi0uOC0xMy4xIDAtMjYuMSAuNi0zMy42IC44bDAtOC4xYzE1LjUtMi45IDIyLTEuMyAyMi0yMy45bDAtMTA5LjRjMC0yMi42LTYuNC0yMS0yMi0yMy45bDAtOC4xYzI1LjggMSA1My4xLS42IDcwLjktLjYgMzEuNyAwIDU1LjkgMTQuNCA1NS45IDQ1LjYgMCAyMS4xLTE2LjcgNDIuMi0zOS4yIDQ3LjUgMTMuNiAyNC4yIDMwIDQ1LjYgNDIuMiA1OC45IDcuMiA3LjggMTcuMiAxNC43IDI3LjIgMTQuN2wwIDcuM3ptMjIuOS0xMzVjLTIzLjMgMC0zMi4yLTE1LjctMzIuMi0zMi4ybDAtMzIuMmMwLTEyLjIgOC44LTMwLjQgMzQtMzAuNHMzMC40IDE3LjkgMzAuNCAxNy45bC0xMC43IDcuMnMtNS41LTEyLjUtMTkuNy0xMi41Yy03LjkgMC0xOS43IDcuMy0xOS43IDE5LjdsMCAyNi44YzAgMTMuNCA2LjYgMjMuMyAxNy45IDIzLjMgMTQuMSAwIDIxLjUtMTAuOSAyMS41LTI2LjhsLTE3LjkgMCAwLTEwLjcgMzAuNCAwYzAgMjAuNSA0LjcgNDkuOS0zNCA0OS45ek0xNjguNiAyNzYuMWMtOS40IDAtMTMuNi0uMy0yMC0uOGwwLTY5LjdjNi40LS42IDE1LS42IDIyLjUtLjYgMjMuMyAwIDM3LjIgMTIuMiAzNy4yIDM0LjUgMCAyMS45LTE1IDM2LjYtMzkuNyAzNi42eiJdCiAgICB9OwogICAgZmFTaWduYWxNZXNzZW5nZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2lnbmFsLW1lc3NlbmdlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNjYzIiwgIk0yNTYgMGMtMTMuMyAwLTI2LjMgMS0zOS4xIDNsMy43IDIzLjdDMjMyLjEgMjQuOSAyNDQgMjQgMjU2IDI0czIzLjkgLjkgMzUuNCAyLjdMMjk1LjEgM0MyODIuMyAxIDI2OS4zIDAgMjU2IDB6bTYwLjggNy4zbC01LjcgMjMuM2MyMy40IDUuNyA0NS40IDE0LjkgNjUuNCAyNy4xbDEyLjUtMjAuNWMtMjIuMS0xMy40LTQ2LjQtMjMuNi03Mi4yLTI5Ljl6bTc2LjQgNjEuNmMxOS4xIDE0IDM2IDMwLjkgNTAuMSA1MC4xbDE5LjQtMTQuMkM0NDcgODMuNiA0MjguNCA2NSA0MDcuMyA0OS41TDM5My4xIDY4Ljh6bTgxLjcgNTQuMmwtMjAuNSAxMi41YzEyLjIgMjAgMjEuNCA0MiAyNy4xIDY1LjRsMjMuMy01LjdjLTYuMy0yNS44LTE2LjUtNTAuMS0yOS45LTcyLjJ6bTEwLjUgOTcuNWMxLjggMTEuNSAyLjcgMjMuNCAyLjcgMzUuNHMtLjkgMjMuOS0yLjcgMzUuNGwyMy43IDMuN2MxLjktMTIuNyAzLTI1LjggMy0zOS4xcy0xLTI2LjMtMy0zOS4xbC0yMy43IDMuN3ptLTMxIDE1NS45bDIwLjUgMTIuNWMxMy40LTIyLjEgMjMuNi00Ni40IDI5LjktNzIuMmwtMjMuMy01LjdjLTUuNyAyMy40LTE0LjkgNDUuNC0yNy4xIDY1LjR6bTguMiAzMC44bC0xOS40LTE0LjJjLTE0IDE5LjEtMzAuOSAzNi01MC4xIDUwLjFsMTQuMiAxOS40YzIxLjEtMTUuNSAzOS44LTM0LjEgNTUuMi01NS4yem0tODYuMSA0N2MtMjAgMTIuMi00MiAyMS40LTY1LjQgMjcuMWw1LjcgMjMuM2MyNS44LTYuMyA1MC4xLTE2LjUgNzIuMi0yOS45bC0xMi41LTIwLjV6TTI5NS4xIDUwOWwtMy43LTIzLjdDMjc5LjkgNDg3LjEgMjY4IDQ4OCAyNTYgNDg4cy0yMy45LS45LTM1LjQtMi43TDIxNi45IDUwOWMxMi43IDEuOSAyNS44IDMgMzkuMSAzczI2LjMtMSAzOS4xLTN6bS05NC4xLTI3LjZjLTE3LjYtNC4zLTM0LjQtMTAuNi01MC4xLTE4LjZsLTcuOC00LTMyLjggNy43IDUuNSAyMy40IDI0LjMtNS43YzE3LjQgOC45IDM1LjkgMTUuOCA1NS4zIDIwLjVsNS43LTIzLjN6TTk1LjQgNDk0LjZMOTAgNDcxLjMgNDguMyA0ODFjLTEwLjQgMi40LTE5LjctNi45LTE3LjMtMTcuM2w5LjctNDEuNi0yMy40LTUuNS05LjcgNDEuNkMxLjIgNDg2IDI2IDUxMC44IDUzLjggNTA0LjRsNDEuNi05Ljd6bS01MC05Mi45bDcuNy0zMi44LTQtNy44Yy04LTE1LjctMTQuMy0zMi41LTE4LjYtNTAuMUw3LjMgMzE2LjdDMTIgMzM2LjEgMTguOSAzNTQuNyAyNy43IDM3MmwtNS43IDI0LjMgMjMuNCA1LjV6TTMgMjk1LjFsMjMuNy0zLjdDMjQuOSAyNzkuOSAyNCAyNjggMjQgMjU2cy45LTIzLjkgMi43LTM1LjRMMyAyMTYuOUMxIDIyOS43IDAgMjQyLjcgMCAyNTZzMSAyNi4zIDMgMzkuMXptMjcuNi05NC4xYzUuNy0yMy40IDE0LjktNDUuNCAyNy4xLTY1LjRMMzcuMiAxMjMuMWMtMTMuNCAyMi4xLTIzLjYgNDYuNC0yOS45IDcyLjJsMjMuMyA1Ljd6bTE4LjktOTYuMmwxOS40IDE0LjJjMTQtMTkuMSAzMC45LTM2IDUwLjEtNTAuMUwxMDQuNyA0OS41QzgzLjYgNjUgNjUgODMuNiA0OS41IDEwNC43em04Ni4xLTQ3YzIwLTEyLjIgNDItMjEuNCA2NS40LTI3LjFMMTk1LjIgNy4zYy0yNS44IDYuMy01MC4xIDE2LjUtNzIuMiAyOS45bDEyLjUgMjAuNXpNMjU2IDQ2NGMxMTQuOSAwIDIwOC05My4xIDIwOC0yMDhTMzcwLjkgNDggMjU2IDQ4IDQ4IDE0MS4xIDQ4IDI1NmMwIDM2LjQgOS40IDcwLjcgMjUuOCAxMDAuNSAxLjYgMi45IDIuMSA2LjIgMS40IDkuNGwtMjEuNiA5Mi41IDkyLjUtMjEuNmMzLjItLjcgNi41LS4yIDkuNCAxLjQgMjkuOCAxNi41IDY0IDI1LjggMTAwLjUgMjUuOHoiXQogICAgfTsKICAgIGZhWGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ4aW5nIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxNjgiLCAiTTE2Mi43IDIxMGMtMS44IDMuMy0yNS4yIDQ0LjQtNzAuMSAxMjMuNS00LjkgOC4zLTEwLjggMTIuNS0xNy43IDEyLjVMOS44IDM0NmMtNy43IDAtMTIuMS03LjUtOC41LTE0LjRsNjktMTIxLjNjLjIgMCAuMi0uMSAwLS4zTDI2LjQgMTM0LjRjLTQuMy03LjggLjMtMTQuMSA4LjUtMTQuMWw2NS4xIDBjNy4zIDAgMTMuMyA0LjEgMTggMTIuMkwxNjIuNyAyMTB6TTM4Mi42IDQ2LjFsLTE0NCAyNTMgMCAuMyA5MS42IDE2Ni42YzMuOSA3LjEgLjIgMTQuMS04LjUgMTQuMWwtNjUuMiAwYy03LjYgMC0xMy42LTQtMTgtMTIuMkwxNDYuMSAyOTkuNGMzLjMtNS44IDUxLjUtOTAuOCAxNDQuOC0yNTUuMiA0LjYtOC4xIDEwLjQtMTIuMiAxNy41LTEyLjJsNjUuNyAwYzggMCAxMi4zIDYuNyA4LjUgMTQuMXoiXQogICAgfTsKICAgIGZhU3F1YXJlSnMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWpzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImpzLXNxdWFyZSJdLCAiZjNiOSIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTE4MC45IDQ0NC45Yy0zMy43IDAtNTMuMi0xNy40LTYzLjItMzguNUwxNTIgMzg1LjdjNi42IDExLjcgMTIuNiAyMS42IDI3LjEgMjEuNiAxMy44IDAgMjIuNi01LjQgMjIuNi0yNi41bDAtMTQzLjEgNDIuMSAwIDAgMTQzLjdjMCA0My42LTI1LjYgNjMuNS02Mi45IDYzLjV6bTg1LjgtNDNMMzAxIDM4Mi4xYzkgMTQuNyAyMC44IDI1LjYgNDEuNSAyNS42IDE3LjQgMCAyOC42LTguNyAyOC42LTIwLjggMC0xNC40LTExLjQtMTkuNS0zMC43LTI4bC0xMC41LTQuNWMtMzAuNC0xMi45LTUwLjUtMjkuMi01MC41LTYzLjUgMC0zMS42IDI0LjEtNTUuNiA2MS42LTU1LjYgMjYuOCAwIDQ2IDkuMyA1OS44IDMzLjdMMzY4IDI5MGMtNy4yLTEyLjktMTUtMTgtMjcuMS0xOC0xMi4zIDAtMjAuMSA3LjgtMjAuMSAxOCAwIDEyLjYgNy44IDE3LjcgMjUuOSAyNS42bDEwLjUgNC41YzM1LjggMTUuMyA1NS45IDMxIDU1LjkgNjYuMiAwIDM3LjgtMjkuOCA1OC42LTY5LjcgNTguNi0zOS4xIDAtNjQuNC0xOC42LTc2LjctNDN6Il0KICAgIH07CiAgICBmYUpzU3F1YXJlID0gZmFTcXVhcmVKczsKICAgIGZhRm9udGljb25zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZvbnRpY29ucyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjgwIiwgIk0wIDMybDAgNDQ4IDQ0OCAwIDAtNDQ4LTQ0OCAwek0xODcgMTcyLjljLTE4LjQgMC0xOSA5LjktMTkgMjcuNGwwIDIzLjNjMCAyLjQtMy41IDQuNC0uNiA0LjRsNjcuNCAwLTExLjEgMzcuMy01NS43IDAgMCAxMTIuOWMwIDUuOC0yIDYuNyAzLjIgNy4zbDQzLjUgNC4xIDAgMjUuMS0xMzAuNyAwIDAtMjUuNyAyMS4zLTJjNS4yLS42IDYuNy0yLjMgNi43LTcuOWwwLTExMS40YzAtMi4zLTIuOS0yLjMtNS44LTIuM2wtMjIuMiAwIDAtMzcuNCAyOCAwIDAtMjFjMC00OS42IDI2LjUtNzAgNzcuMy03MCAzNC4xIDAgNjQuNyA4LjIgNjQuNyA1Mi44bC01MC43IDYuMWMuMy0xOC43LTQuNC0yMy0xNi4zLTIzem03NC4zIDI0MS44bDAtMjUuMSAyMC40LTIuNmM1LjItLjYgNy42LTEuNyA3LjYtNy4zbDAtMTA3LjljMC00LjEtMi45LTYuNy02LjctNy45bC0yNC4yLTYuNCA2LjctMjkuNSA4MC4yIDAgMCAxNTEuN2MwIDUuOC0yLjYgNi40IDIuOSA3LjNsMTUuNyAyLjYgMCAyNS4xLTEwMi42IDB6bTgwLjgtMjU1LjVsOSAzMy4yLTcuMyA3LjMtMzEuMi0xNi42LTMxLjIgMTYuNi03LjMtNy4zIDktMzMuMi0yMS44LTI0LjIgMy41LTkuNiAyNy43IDAgMTUuNS0yOCA5LjMgMCAxNS41IDI4IDI3LjcgMCAzLjUgOS42LTIxLjkgMjQuMnoiXQogICAgfTsKICAgIGZhVXBzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVwcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmN2UwIiwgIk0xMDMuMiAzMDNjLTUuMiAzLjYtMzIuNiAxMy4xLTMyLjYtMTlsMC0xMDQtMzIuNyAwIDAgMTAyLjZjMCA3NC45IDgwLjIgNTEuMSA5Ny45IDM5bDAtMTQxLjYtMzIuNiAwIDAgMTIzek00IDc0LjhMNCAyOTUuN2MwIDEwMy43IDc0LjkgMTM1LjIgMTg3LjcgMTg0LjEgMTEyLjQtNDguOSAxODcuNy04MC4yIDE4Ny43LTE4NC4xbDAtMjIwLjlDMjYzLjEgMTMuMiA5Ny42IDI1LjIgNCA3NC44ek0zNjIuMSAyOTUuN2MwIDg2LjYtNTMuMiAxMTMuNi0xNzAuNCAxNjUuMy0xMTcuNS01MS44LTE3MC41LTc4LjctMTcwLjUtMTY1LjNsMC0xMjYuNGMxMDIuMy05My44IDIzMS42LTEwMCAzNDAuOS04OS44bDAgMjE2LjJ6TTE1Mi41IDE4OC4zbDAgMjEyLjggMzIuNyAwIDAtNjguN2MyNC40IDcuMyA3MS43LTIuNiA3MS43LTc4LjUgMC05Ny40LTgwLjctODAuOS0xMDQuNC02NS42em0zMi43IDExNy4zbDAtMTAwLjNjOC40LTQuMiAzOC40LTEyLjcgMzguNCA0OS4zIDAgNjcuOS0zNi40IDUxLjgtMzguNCA1MXptNzkuMS04Ni40Yy4xIDQ3LjMgNTEuNiA0Mi41IDUyLjIgNzAuNCAuNiAyMy41LTMwLjQgMjMtNTAuOCA0LjlsMCAzMC4xYzM2LjIgMjEuNSA4MS45IDguMSA4My4yLTMzLjUgMS43LTUxLjUtNTQuMS00Ni42LTUzLjQtNzMuMiAuNi0yMC4zIDMwLjYtMjAuNSA0OC41LTIuMmwwLTI4LjRjLTI4LjUtMjItNzkuOS05LjItNzkuNyAzMS45eiJdCiAgICB9OwogICAgZmFBbWF6b25QYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYW1hem9uLXBheSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDJjIiwgIk0xNCAzMjUuM2MyLjMtNC4yIDUuMi00LjkgOS43LTIuNSAxMC40IDUuNiAyMC42IDExLjQgMzEuMiAxNi43IDQwLjYgMjAuMiA4My4zIDM1LjggMTI3LjQgNDYuMyAyMC44IDUgNDEuOSA5IDYzLjIgMTEuOCAzMS41IDQuMiA2My4yIDYgOTUgNS4yIDE3LjQtLjQgMzQuOC0xLjggNTIuMS0zLjggNTYuMi02LjYgMTExLjEtMjEgMTYzLjMtNDIuOCAyLjktMS4yIDUuOS0yIDkuMS0xLjIgNi43IDEuOCA5IDkgNC4xIDEzLjktMyAyLjctNi4yIDUuMi05LjYgNy40LTMwLjcgMjEuMS02NC4yIDM2LjQtOTkuNiA0Ny45LTI0LjUgNy45LTQ5LjYgMTMuOC03NS4xIDE3LjYtMTcuNiAyLjctMzUuNCA0LjMtNTMuMiA0LjgtLjggMC0xLjcgLjItMi41IC4zbC0yMS4xIDBjLS44LS4xLTEuNy0uMi0yLjUtLjMtMy42LS4yLTcuMi0uMy0xMC43LS40LTE2LjktLjgtMzMuNy0yLjUtNTAuNC01LjMtMjcuNC00LjUtNTQuMy0xMS41LTgwLjQtMjAuOS01My43LTE5LjQtMTAzLjEtNDguOS0xNDUuNi04Ny0xLjgtMS42LTMtMy44LTQuNC01LjdsMC0yek0xNzIgNjUuMWwtNC4zIC42Yy0xMy44IDEuNy0yNi44IDYuOS0zOCAxNS4xLTIuNCAxLjctNC42IDMuNS03LjEgNS40LS4yLS40LS4zLS45LS40LTEuNC0uNC0yLjctLjgtNS41LTEuMy04LjItLjctNC42LTMtNi42LTcuNi02LjZsLTExLjUgMGMtNi45IDAtOC4yIDEuMy04LjIgOC4ybDAgMjA5LjNjMCAxIDAgMiAuMSAzIC4yIDMgMiA0LjkgNC45IDUgNyAuMSAxNC4xIC4xIDIxLjEgMCAyLjkgMCA0LjctMiA1LTUgLjEtMSAuMS0yIC4xLTNsMC03Mi40YzEuMSAuOSAxLjcgMS40IDIuMiAxLjkgMTcuOSAxNC45IDM4LjUgMTkuOCA2MSAxNS40IDIwLjQtNCAzNC42LTE2LjUgNDMuOC0zNC45IDctMTMuOSA5LjktMjguNyAxMC4zLTQ0LjEgLjUtMTcuMS0xLjItMzMuOS04LjEtNDkuOC04LjUtMTkuNi0yMi42LTMyLjUtNDMuOS0zNi45LTMuMi0uNy02LjUtMS05LjgtMS41LTIuOC0uMS01LjUtLjEtOC4zLS4xek0xMjQuNiAxMDdjLS4xLS43IC4xLTEuMyAuNC0xLjlzLjgtMS4xIDEuMy0xLjRjMTMuNy05LjUgMjguOC0xNC41IDQ1LjYtMTMuMiAxNC45IDEuMSAyNy4xIDguNCAzMy41IDI1LjkgMy45IDEwLjcgNC45IDIxLjggNC45IDMzIDAgMTAuNC0uOCAyMC42LTQgMzAuNi02LjggMjEuMy0yMi40IDI5LjQtNDIuNiAyOC41LTE0LS42LTI2LjItNi0zNy40LTEzLjktLjYtLjMtMS0uOC0xLjMtMS40cy0uNC0xLjItLjQtMS45Yy4xLTE0LjEgMC0yOC4xIDAtNDIuMnMuMS0yOCAwLTQyLjF6TTMzMC4zIDY1LjFjLTEgLjEtMiAuMy0yLjkgLjQtOS43IC40LTE5LjQgMS44LTI4LjkgNC4xLTYuMSAxLjYtMTIgMy44LTE3LjkgNS44LTMuNiAxLjItNS40IDMuOC01LjMgNy43IC4xIDMuMy0uMSA2LjYgMCA5LjkgLjEgNC44IDIuMSA2LjEgNi44IDQuOSA3LjgtMiAxNS42LTQuMiAyMy41LTUuNyAxMi4zLTIuMyAyNC43LTMuMyAzNy4yLTEuNCA2LjUgMSAxMi42IDIuOSAxNi44IDguNCAzLjcgNC44IDUuMSAxMC41IDUuMyAxNi40IC4zIDguMyAuMiAxNi42IC4zIDI0LjkgMCAuNS0uMSAuOS0uMiAxLjQtLjUtLjEtLjkgMC0xLjMtLjEtMTAuNS0yLjYtMjEuMi00LjItMzItNC45LTExLjMtLjYtMjIuNSAuMS0zMy4zIDMuOS0xMi45IDQuNS0yMy4zIDEyLjMtMjkuNCAyNC45LTQuNyA5LjgtNS40IDIwLjItMy45IDMwLjcgMiAxNCA5IDI0LjggMjEuNCAzMS43IDExLjkgNi42IDI0LjggNy40IDM3LjkgNS40IDE1LjEtMi4zIDI4LjUtOC43IDQwLjMtMTguNCAuNS0uNCAxLS44IDEuNi0xLjEgLjYgMy44IDEuMSA3LjQgMS44IDExIC42IDMuMSAyLjUgNS4xIDUuNCA1LjIgNS40IC4xIDEwLjkgLjEgMTYuMyAwIDEuMyAwIDIuNS0uNSAzLjQtMS40czEuNC0yLjEgMS41LTMuM2MuMS0uOSAuMS0xLjkgLjEtMi44bDAtMTA2YzAtNC4zLS4zLTguNi0uOS0xMi45LTEuOS0xMi45LTcuNC0yMy41LTE5LTMwLjQtNi43LTQtMTQuMS02LTIxLjgtNy4xLTMuNi0uNS03LjItLjgtMTAuOC0xLjMtMy45IC4xLTcuOSAuMS0xMS45IC4xem0zNSAxMjcuN2MwIC42LS4xIDEuMi0uMyAxLjdzLS43IDEtMS4yIDEuM2MtMTEuMiA4LjEtMjMuNSAxMy41LTM3LjQgMTQuOS01LjcgLjYtMTEuNCAuNC0xNi44LTEuOC0zLTEuMS01LjYtMi45LTcuOC01LjJzLTMuNy01LjEtNC42LTguMWMtMi02LjMtMi0xMy4xLS4xLTE5LjQgMi41LTguMyA4LjQtMTMgMTYuNC0xNS42IDgtMi40IDE2LjUtMy4yIDI0LjgtMi4yIDguNCAuNyAxNi42IDIuMyAyNSAzLjQgMS42IC4yIDIuMSAxIDIuMSAyLjYtLjEgNC44IDAgOS41IDAgMTQuM3MtLjIgOS40LS4xIDE0LjF6TTYyNS4yIDMyMi4yYy0xLTUtNC44LTYuOS05LjEtOC4zLTYuOC0yLjEtMTMuOS0zLjUtMjEtMy45LTEzLjEtMS4xLTI2LjMtLjUtMzkuMiAxLjktMTQuMyAyLjctMjcuOSA3LjMtNDAgMTUuNi0xLjQgLjktMi43IDIuMS0zLjcgMy41LS40IC42LS42IDEuMy0uNyAxLjlzMCAxLjQgLjIgMi4xYy40IDEuNSAyLjEgMS45IDMuNiAxLjggLjcgMCAxLjUgMCAyLjItLjEgNy44LS44IDE1LjUtMS43IDIzLjMtMi41IDExLjQtMS4xIDIyLjktMS44IDM0LjMtLjkgNC45IC40IDkuNyAxLjMgMTQuNCAyLjcgNS4xIDEuNCA3LjQgNS4yIDcuNiAxMC40IC40IDgtMS40IDE1LjctMy41IDIzLjMtNC4xIDE1LjQtMTAgMzAuMy0xNS44IDQ1LjEtLjQgMS0uOCAyLTEgMy0uNSAyLjkgMS4yIDQuOCA0LjEgNC4xIDEuOC0uNCAzLjQtMS4zIDQuOC0yLjUgNC41LTQuMiA4LjgtOC43IDEyLjctMTMuNCAxMi44LTE2LjQgMjAuMy0zNS4zIDI0LjctNTUuNiAuOC0zLjYgMS40LTcuMyAyLjEtMTAuOWwwLTE3LjN6TTQ5My4xIDE5OWMtMTIuOS0zNS43LTI1LjgtNzEuNC0zOC43LTEwNy4yLTItNS43LTQuMi0xMS4zLTYuMy0xNi45LTEuMS0yLjktMy4yLTQuOC02LjQtNC44LTcuNi0uMS0xNS4yLS4yLTIyLjktLjEtMi41IDAtMy43IDItMy4yIDQuNSAuNSAyLjEgMS4xIDQuMSAxLjkgNi4xIDE5LjYgNDguNSAzOS4zIDk3IDU5LjEgMTQ1LjUgMS43IDQuMSAyLjEgNy42IC4yIDExLjgtMy4zIDcuMy01LjkgMTUtOS4zIDIyLjMtMyA2LjUtOCAxMS40LTE1LjIgMTMuMy01IDEuMy0xMC4yIDEuNy0xNS40IDEuMS0yLjUtLjItNS0uOC03LjUtMS0zLjQtLjItNS4xIDEuMy01LjIgNC44LS4xIDMuMy0uMSA2LjYgMCA5LjkgLjEgNS41IDIgOCA3LjQgOC45IDUuNiAxLjEgMTEuMiAxLjggMTYuOSAyIDE3LjEgLjQgMzAuNy02LjUgMzkuNS0yMS40IDMuNS01LjkgNi42LTEyIDkuMi0xOC40IDIzLjctNTkuOCA0Ny4yLTExOS43IDcwLjYtMTc5LjYgLjctMS44IDEuMy0zLjYgMS42LTUuNSAuNC0yLjgtLjktNC40LTMuNy00LjQtNi42LS4xLTEzLjMgMC0xOS45IDAtMS43LS4xLTMuNCAuMy00LjcgMS4zcy0yLjQgMi4zLTMgMy45Yy0uNSAxLjQtMS4xIDIuNy0xLjYgNC4xbC0zNC44IDEwMGMtMi41IDcuMi01LjEgMTQuNS03LjcgMjIuMi0uNC0xLjEtLjYtMS43LS45LTIuNHoiXQogICAgfTsKICAgIGZhUGFuZG9yYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwYW5kb3JhIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU3ZGEiLCAiTTIwMS4zIDMyTDAgMzIgMCA0ODAgMTIwLjIgNDgwYzExLjIgMCAyMC4zLTkuMSAyMC4zLTIwLjNsMC04Ni4xIDMwLjEgMGMxNDcuMSAwIDIwNy4zLTgyLjkgMjA3LjMtMTc5LjkgMC0xMTkuNy05MC45LTE2MS44LTE3Ni41LTE2MS44eiJdCiAgICB9OwogICAgZmFPcGVuaWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib3BlbmlkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxOWIiLCAiTTI3MS41IDQzMmwtNjggMzJDODguNSA0NTMuNyAwIDM5Mi41IDAgMzE4LjIgMCAyNDYuNyA4Mi41IDE4Ny4yIDE5MS43IDE3My45bDAgNDNjLTcxLjUgMTIuNS0xMjQgNTMtMTI0IDEwMS4zIDAgNTEgNTguNSA5My4zIDEzNS43IDEwM2wwLTM0MCA2OC0zMy4yIDAgMzg0IC4xIDB6TTQ0OCAyOTFsLTEzMS4zLTI4LjUgMzYuOC0yMC43Yy0xOS41LTExLjUtNDMuNS0yMC03MC0yNC44bDAtNDNjNDYuMiA1LjUgODcuNyAxOS41IDEyMC4zIDM5LjNsMzUtMTkuOCA5LjIgOTcuNXoiXQogICAgfTsKICAgIGZhVnNjbyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2c2NvIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU3ZGQiLCAiTTM1Ny42IDI1NmMwLTI3LjEtMTAuNi01Mi41LTI5LjctNzEuN3MtNDQuNi0yOS43LTcxLjctMjkuN2wtLjEgMGMtMjcuMSAwLTUyLjYgMTAuNi03MS43IDI5LjdzLTI5LjcgNDQuNi0yOS43IDcxLjdjMCAyNy4xIDEwLjYgNTIuNSAyOS43IDcxLjcgMTkuMiAxOS4yIDQ0LjYgMjkuNyA3MS43IDI5LjdsLjEgMGMyNy4xIDAgNTIuNi0xMC42IDcxLjctMjkuNyAxOS4yLTE5LjIgMjkuNy00NC42IDI5LjctNzEuN3pNMTc2LjMgNDgyLjFjMjMgOC4xIDQ3IDEyLjYgNzEuNiAxMy40bDAtNTkuMWMtMTcuMS0uNy0zMy41LTMuOC00OS04LjlsLTIyLjYgNTQuNnptMTM3LTU0LjZjLTE1LjUgNS4xLTMyIDguMi00OSA4LjlsMCA1OS4xYzI0LjYtLjggNDguNi01LjMgNzEuNi0xMy40bC0yMi42LTU0LjZ6TTkyLjUgNDMxLjJjMjAuMiAxOC45IDQzLjMgMzQgNjguNyA0NWwyMi41LTU0LjVjLTE4LjMtNy45LTM1LjEtMTguOC00OS44LTMxLjlMOTIuNSA0MzEuMnptMjg1LjktNDEuNGMtMTQuNiAxMy4yLTMxLjQgMjQtNDkuOCAzMS45bDIyLjUgNTQuNWMyNS40LTExIDQ4LjQtMjYuMSA2OC43LTQ1bC00MS40LTQxLjR6TTE0NS40IDM3OC4yYzEzLjYgMTIuMSAyOSAyMS45IDQ1LjggMjkgMTggNy42IDM3LjEgMTIgNTYuNyAxMi45bDAtNDYuOGMtMjYuNC0xLjgtNTAuMy0xMi4zLTY5LjEtMjguNmwtMzMuNCAzMy40em0xODgtMzMuNGMtMTguOCAxNi4zLTQyLjcgMjYuOC02OS4xIDI4LjZsMCA0Ni44YzE5LjYtLjkgMzguNy01LjMgNTYuNy0xMi45IDE2LjgtNy4xIDMyLjItMTYuOSA0NS44LTI5bC0zMy40LTMzLjR6TTM4LjUgMzU2LjZjMTAuNyAyMy4yIDI1IDQ0LjMgNDIuNSA2My4xbDQxLjMtNDEuM2MtMTIuNC0xMy40LTIyLjktMjguNi0zMC45LTQ1LjJMMzguNSAzNTYuNnptMzgyLjQtMjMuNWMtOCAxNi42LTE4LjUgMzEuOS0zMC45IDQ1LjJsNDEuMyA0MS4zYzE3LjUtMTguNyAzMS44LTM5LjkgNDIuNS02My4xbC01Mi45LTIzLjV6bS0zMzEtNjljMS4xIDE4LjggNS40IDM3LjIgMTIuOCA1NC41IDcuNSAxNy44IDE4IDM0IDMxLjIgNDguMmwzMy41LTMzLjVjLTE2LjQtMTguOC0yNi45LTQyLjgtMjguNy02OS4ybC00OC44IDB6bTI4My43IDBjLTEuOCAyNi40LTEyLjMgNTAuNC0yOC43IDY5LjJsMzMuNSAzMy41YzEzLjEtMTQuMiAyMy42LTMwLjQgMzEuMi00OC4yIDcuMy0xNy40IDExLjYtMzUuNyAxMi43LTU0LjVsLTQ4LjcgMHptLTM1Ny4xIDBjLjkgMjYuNyA2LjEgNTIuNyAxNS42IDc3LjVMODUgMzE4LjJjLTYuNC0xNy0xMC4zLTM1LjEtMTEuMy01NGwtNTcuMSAwem00MjIuMSAwYy0xIDE4LjktNSAzNy4xLTExLjMgNTRsNTIuOCAyMy41YzkuNS0yNC44IDE0LjctNTAuOCAxNS42LTc3LjVsLTU3LjEgMHpNMzIuMSAxNzAuNGMtOS41IDI0LjgtMTQuNyA1MC44LTE1LjYgNzcuNWw1Ny4xIDBjMS0xOC45IDUtMzcuMSAxMS4zLTU0TDMyLjEgMTcwLjR6bTEwMS43LTI1LjJjLTEzLjEgMTQuMi0yMy42IDMwLjQtMzEuMiA0OC4yLTcuMyAxNy40LTExLjYgMzUuNy0xMi44IDU0LjVsNDguOCAwYzEuOC0yNi40IDEyLjMtNTAuNCAyOC43LTY5LjJsLTMzLjUtMzMuNXptMjExLjEgMzMuNWMxNi40IDE4LjggMjYuOSA0Mi44IDI4LjcgNjkuMmw0OC43IDBjLTEuMS0xOC44LTUuNC0zNy4yLTEyLjctNTQuNS03LjUtMTcuOC0xOC0zNC0zMS4yLTQ4LjJsLTMzLjUgMzMuNXptODIuNCAxNS4yYzYuNCAxNyAxMC4zIDM1LjEgMTEuMyA1NGw1Ny4xIDBjLS45LTI2LjctNi4xLTUyLjctMTUuNi03Ny41bC01Mi44IDIzLjV6TTgxIDkyLjNDNjMuNCAxMTEgNDkuMiAxMzIuMiAzOC41IDE1NS40bDUyLjkgMjMuNWM4LTE2LjYgMTguNS0zMS45IDMwLjktNDUuMkw4MSA5Mi4zem0zMDkgNDEuM2MxMi40IDEzLjQgMjIuOSAyOC42IDMwLjkgNDUuMmw1Mi45LTIzLjVjLTEwLjctMjMuMi0yNS00NC4zLTQyLjUtNjMuMUwzOTAgMTMzLjd6TTI0OCA5MS44Yy0xOS42IC45LTM4LjcgNS4zLTU2LjcgMTIuOS0xNi44IDcuMS0zMi4yIDE2LjktNDUuOCAyOWwzMy40IDMzLjRjMTguOC0xNi4zIDQyLjctMjYuOCA2OS4xLTI4LjZsMC00Ni43em0xNi4zIDQ2LjdjMjYuNCAxLjggNTAuMyAxMi4zIDY5LjEgMjguNmwzMy40LTMzLjRjLTEzLjYtMTIuMS0yOS0yMS45LTQ1LjgtMjktMTgtNy42LTM3LjEtMTItNTYuNy0xMi45bDAgNDYuN3pNMTYxLjIgMzUuOGMtMjUuNCAxMS00OC40IDI2LjEtNjguNyA0NWw0MS40IDQxLjRjMTQuNy0xMy4yIDMxLjQtMjQgNDkuOC0zMS45TDE2MS4yIDM1Ljh6TTMyOC42IDkwLjNjMTguMyA3LjkgMzUuMSAxOC44IDQ5LjggMzEuOWw0MS40LTQxLjRjLTIwLjItMTguOS00My4zLTM0LTY4LjctNDVMMzI4LjYgOTAuM3pNMjQ4IDE2LjRjLTI0LjYgLjgtNDguNiA1LjMtNzEuNiAxMy40bDIyLjYgNTQuNmMxNS41LTUuMSAzMi04LjIgNDktOC45bDAtNTkuMXptMTYuMyA1OS4xYzE3LjEgLjcgMzMuNSAzLjggNDkgOC45bDIyLjYtNTQuNmMtMjMtOC4xLTQ3LTEyLjYtNzEuNi0xMy40bDAgNTkuMXpNNTEyLjIgMjY0LjJsLS4yIDBDNTA3LjggMzk5IDM5OS4yIDUwNy43IDI2NC4zIDUxMS45bDAgLjEtMTYuMyAwIDAtLjFDMTEzLjEgNTA3LjcgNC41IDM5OSAuMiAyNjQuMWwtLjIgMCAwLTE2LjMgLjIgMEM0LjUgMTEzIDExMy4xIDQuMyAyNDggLjFsMC0uMSAxNi4zIDAgMCAuMUMzOTkuMiA0LjMgNTA3LjggMTEzIDUxMiAyNDcuOWwuMiAwIDAgMTYuM3oiXQogICAgfTsKICAgIGZhVWJ1bnR1ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVidW50dSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmN2RmIiwgIk00NjkuMiA3NWMwLTIwLjEtOC0zOS4zLTIyLjItNTMuNXMtMzMuNC0yMi4yLTUzLjUtMjIuMi0zOS4zIDgtNTMuNSAyMi4yLTIyLjIgMzMuNC0yMi4yIDUzLjVjMCAyMC4xIDggMzkuMyAyMi4xIDUzLjVzMzMuNCAyMi4xIDUzLjUgMjIuMSAzOS4zLTggNTMuNS0yMi4xIDIyLjEtMzMuNCAyMi4xLTUzLjVsLjEgMHptLTMxNSAxNjUuN2E3NS42IDc1LjYgMCAxIDAgLTE1MS4yIDAgNzUuNiA3NS42IDAgMSAwIDE1MS4yIDB6TTU3IDM0NmMxOC42IDQ2LjkgNTEgODcgOTMgMTE1LjFzOTEuNSA0Mi42IDE0MiA0MS43Yy0xNC43LTE4LjYtMjIuOS00MS41LTIzLjItNjUuMi02LjgtLjktMTMuMy0yLjEtMTkuNS0zLjQtMjYuOC01LjctNTEuOS0xNy4zLTczLjYtMzRzLTM5LjMtMzguMS01MS43LTYyLjVjLTIwLjkgOS45LTQ0LjUgMTIuOC02Ny4xIDguMmwuMSAuMXptMzk1LjEgODkuOGE3NS42IDc1LjYgMCAxIDAgLTE1MS4yIDAgNzUuNiA3NS42IDAgMSAwIDE1MS4yIDB6TTQ0NCAzNTEuNmMxOC41IDE0LjggMzEuNiAzNS4yIDM3LjIgNTguMiAzMy4zLTQxLjMgNTIuNi05Mi4yIDU0LjgtMTQ1LjJzLTEyLjUtMTA1LjQtNDIuMi0xNDkuNGMtOC42IDIxLjUtMjQgMzkuNi00My44IDUxLjYgMTUuNCAyOC42IDIyLjkgNjAuOCAyMS45IDkzLjJzLTEwLjcgNjQtMjggOTEuNmwuMSAwek0xMDEuMSAxMzUuNGMxMi40IDIuNyAyNC4zIDcuNSAzNS4xIDE0LjMgMTYuNi0yNC4yIDM4LjktNDQuMSA2NC44LTU4UzI1NS44IDcwLjQgMjg1LjIgNzBjLjItNS45IC45LTExLjkgMi0xNy43IDMuNi0xNi43IDExLjEtMzIuMyAyMS44LTQ1LjUtNDcuNy0zLjgtOTUuNCA2LTEzNy42IDI4LjVTOTQuMyA5MS43IDcwLjggMTMzLjRjMi43LS4yIDUuMy0uMyA4LS4zIDcuNSAwIDE1IC44IDIyLjQgMi4zbC0uMSAweiJdCiAgICB9OwogICAgZmFWaWFjb2luID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZpYWNvaW4iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjIzNyIsICJNMzg0IDMybC02NCAwLTgwLjcgMTkyLTk0LjUgMC04MC44LTE5Mi02NCAwIDQ4IDExMi00OCAwIDAgNDggNjguNSAwIDEzLjggMzItODIuMyAwIDAgNDggMTAyLjggMCA4OS4yIDIwOCA4OS4yLTIwOCAxMDIuOCAwIDAtNDgtODIuMyAwIDEzLjgtMzIgNjguNSAwIDAtNDgtNDggMCA0OC0xMTJ6TTE5MiAzMzZsLTI3LTY0IDU0IDAtMjcgNjR6Il0KICAgIH07CiAgICBmYVpoaWh1ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInpoaWh1IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY2M2YiLCAiTTE3MC41IDE0OC4xbDAgMjE3LjUgMjMuNCAwIDcuNyAyNi40IDQyLTI2LjQgNDkuNSAwIDAtMjE3LjUtMTIyLjcgMHptOTcuOCAxOTMuOWwtMjcuOSAwLTI3LjkgMTcuNS01LjEtMTcuNS0xMS45IDAgMC0xNzAuMyA3Mi44IDAgMCAxNzAuM3pNMTQ5LjggMjQ3LjdsLTUyLjMgMGMxLjctMjcuMSAyLjItNTEuNiAyLjItNzMuNWw1MS4yIDBzMi0yMi42LTguNi0yMi4zbC04OC41IDBjMy41LTEzLjEgNy45LTI2LjcgMTMuMS00MC43IDAgMC0yNC4xIDAtMzIuMyAyMS42LTMuNCA4LjktMTMuMiA0My4xLTMwLjcgNzguMSA1LjktLjYgMjUuNC0xLjIgMzYuOC0yMi4yIDIuMS01LjkgMi41LTYuNyA1LjEtMTQuNWwyOC45IDBjMCAxMC41LTEuMiA2Ni45LTEuNyA3My40bC01Mi4zIDBjLTExLjcgMC0xNS42IDIzLjYtMTUuNiAyMy42bDY1LjYgMGMtNC40IDQ5LjktMjggOTEuOS03MC44IDEyNS4xIDIwLjUgNS45IDQwLjktLjkgNTEtOS45IDAgMCAyMy0yMC45IDM1LjYtNjkuM2w1NCA2NC45czcuOS0yNi45LTEuMi00MGMtNy42LTguOS0yOC4xLTMzLjEtMzYuOC00MS44TDg3LjkgMzEyYzQuNC0xNCA3LTI3LjYgNy45LTQwLjdsNjEuNiAwcy0uMS0yMy42LTcuNi0yMy42bDAgMHptNDEyLTEuNmMyMC44LTI1LjYgNDUtNTguNiA0NS01OC42cy0xOC42LTE0LjgtMjcuNC00LjFjLTYgOC4yLTM2LjggNDguMi0zNi44IDQ4LjJsMTkuMiAxNC40ek00MTEuOCAxODdjLTktOC4yLTI1LjkgMi4xLTI1LjkgMi4xczM5LjUgNTUgNDEuMSA1Ny40bDE5LjUtMTMuN3MtMjUuNy0zNy42LTM0LjctNDUuOWwwIDAgMCAwek02NDAgMjU4LjRjLTE5LjggMC0xMzAuOSAuOS0xMzEuMSAuOWwwLTEwMWM0LjggMCAxMi40LS40IDIyLjgtMS4yIDQwLjktMi40IDcwLjEtNCA4Ny44LTQuOCAwIDAgMTIuMi0yNy4yLS42LTMzLjQtMy4xLTEuMi0yMy4yIDQuNi0yMy4yIDQuNnMtMTY1LjIgMTYuNS0yMzIuNCAxOGMxLjYgOC44IDcuNiAxNy4xIDE1LjggMTkuNiAxMy4zIDMuNSAyMi43IDEuNyA0OS4yIC45IDI0LjgtMS42IDQzLjctMi40IDU2LjUtMi40bDAgOTkuOC0xMzMuNSAwczIuOCAyMi4zIDI1LjUgMjIuOWwxMDcuOSAwIDAgNzAuOWMwIDE0LTExLjIgMjItMjQuNSAyMS4xLTE0LjEgLjEtMjYuMS0xLjEtNDEuNy0xLjggMiA0IDYuMyAxNC40IDE5LjMgMjEuOCA5LjkgNC44IDE2LjIgNi42IDI2IDYuNiAyOS42IDAgNDUuNy0xNy4zIDQ0LjktNDUuM2wwLTczLjMgMTIyLjQgMGM5LjcgMCA4LjctMjMuOCA4LjctMjMuOGwwIDB6Il0KICAgIH07CiAgICBmYVlhbmRleCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ5YW5kZXgiLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFtdLCAiZjQxMyIsICJNMTUzLjEgMzE1LjhMNjUuNyA1MTIgMiA1MTIgOTggMzAyLjJDNTIuOSAyNzkuMyAyMi44IDIzNy44IDIyLjggMTYxLjEgMjIuNyA1My43IDkwLjggMCAxNzEuNyAwbDgyLjMgMCAwIDUxMi01NS4xIDAgMC0xOTYuMi00NS44IDB6TTE5OC45IDQ2LjVsLTI5LjQgMGMtNDQuNCAwLTg3LjQgMjkuNC04Ny40IDExNC42IDAgODIuMyAzOS40IDEwOC44IDg3LjQgMTA4LjhsMjkuNCAwIDAtMjIzLjR6Il0KICAgIH07CiAgICBmYVBpeGl2ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBpeGl2IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2NDAiLCAiTTk2IDMyQzQzIDMyIDAgNzUgMCAxMjhMMCAzODRjMCA1MyA0MyA5NiA5NiA5NmwyNTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMjU2YzAtNTMtNDMtOTYtOTYtOTZMOTYgMzJ6bTc3LjcgMjE3LjNhNjAuMSA2MC4xIDAgMSAwIDEyMC4zIDAgNjAuMSA2MC4xIDAgMSAwIC0xMjAuMyAwek0xMTkuMSAzODcuOGMtLjMtLjgtLjUtMS43LS41LTIuNmwwLTI0NC4zYzAtMS44IC43LTMuNiAyLTQuOXMzLTIgNC45LTJsMTYuOSAwYzEuMiAwIDIuMyAuMyAzLjMgLjhzMS45IDEuMyAyLjUgMi4zbDE0IDIxLjhjMTkuNy0xNS42IDQ0LjUtMjUgNzEuNi0yNSA2My42IDAgMTE1LjIgNTEuNiAxMTUuMiAxMTUuMlMyOTcuNSAzNjQuNSAyMzMuOCAzNjQuNWMtMjIgMC00Mi42LTYuMi02MC4xLTE2LjlsMCAzNy42YzAgLjktLjIgMS44LS41IDIuNnMtLjkgMS42LTEuNSAyLjItMS40IDEuMS0yLjIgMS41LTEuNyAuNS0yLjYgLjVsLTQxLjMgMGMtLjkgMC0xLjgtLjItMi42LS41cy0xLjYtLjktMi4yLTEuNS0xLjEtMS40LTEuNS0yLjJ6Il0KICAgIH07CiAgICBmYU9wZW5haSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvcGVuYWkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTdjZiIsICJNMTk2LjQgMTg1LjhsMC00OC42YzAtNC4xIDEuNS03LjIgNS4xLTkuMmw5Ny44LTU2LjNjMTMuMy03LjcgMjkuMi0xMS4zIDQ1LjYtMTEuMyA2MS40IDAgMTAwLjQgNDcuNiAxMDAuNCA5OC4zIDAgMy42IDAgNy43LS41IDExLjhMMzQzLjMgMTExLjFjLTYuMS0zLjYtMTIuMy0zLjYtMTguNCAwTDE5Ni40IDE4NS44ek00MjQuNyAzNzUuMmwwLTExNi4yYzAtNy4yLTMuMS0xMi4zLTkuMi0xNS45TDI4NyAxNjguNCAzMjkgMTQ0LjNjMy42LTIgNi43LTIgMTAuMiAwTDQzNyAyMDAuN2MyOC4yIDE2LjQgNDcuMSA1MS4yIDQ3LjEgODUgMCAzOC45LTIzIDc0LjgtNTkuNCA4OS42bDAgMHpNMTY2LjIgMjcyLjhsLTQyLTI0LjZjLTMuNi0yLTUuMS01LjEtNS4xLTkuMmwwLTExMi42YzAtNTQuOCA0Mi05Ni4zIDk4LjgtOTYuMyAyMS41IDAgNDEuNSA3LjIgNTguNCAyMEwxNzUuNCAxMDguNWMtNi4xIDMuNi05LjIgOC43LTkuMiAxNS45bDAgMTQ4LjUgMCAwem05MC40IDUyLjJsLTYwLjItMzMuOCAwLTcxLjcgNjAuMi0zMy44IDYwLjIgMzMuOCAwIDcxLjctNjAuMiAzMy44em0zOC43IDE1NS43Yy0yMS41IDAtNDEuNS03LjItNTguNC0yMGwxMDAuOS01OC40YzYuMS0zLjYgOS4yLTguNyA5LjItMTUuOWwwLTE0OC41IDQyLjUgMjQuNmMzLjYgMiA1LjEgNS4xIDUuMSA5LjJsMCAxMTIuNmMwIDU0LjgtNDIuNSA5Ni4zLTk5LjMgOTYuM2wwIDB6TTE3My44IDM2Ni41TDc2LjEgMzEwLjJjLTI4LjItMTYuNC00Ny4xLTUxLjItNDcuMS04NSAwLTM5LjQgMjMuNi03NC44IDU5LjktODkuNmwwIDExNi43YzAgNy4yIDMuMSAxMi4zIDkuMiAxNS45bDEyOCA3NC4yLTQyIDI0LjFjLTMuNiAyLTYuNyAyLTEwLjIgMHptLTUuNiA4NGMtNTcuOSAwLTEwMC40LTQzLjUtMTAwLjQtOTcuMyAwLTQuMSAuNS04LjIgMS0xMi4zbDEwMC45IDU4LjRjNi4xIDMuNiAxMi4zIDMuNiAxOC40IDBsMTI4LjUtNzQuMiAwIDQ4LjZjMCA0LjEtMS41IDcuMi01LjEgOS4ybC05Ny44IDU2LjNjLTEzLjMgNy43LTI5LjIgMTEuMy00NS42IDExLjNsMCAwem0xMjcgNjAuOWM2MiAwIDExMy43LTQ0IDEyNS40LTEwMi40IDU3LjMtMTQuOSA5NC4yLTY4LjYgOTQuMi0xMjMuNCAwLTM1LjgtMTUuNC03MC43LTQzLTk1LjcgMi42LTEwLjggNC4xLTIxLjUgNC4xLTMyLjMgMC03My4yLTU5LjQtMTI4LTEyOC0xMjgtMTMuOCAwLTI3LjEgMi00MC40IDYuNy0yMy0yMi41LTU0LjgtMzYuOS04OS42LTM2LjktNjIgMC0xMTMuNyA0NC0xMjUuNCAxMDIuNC01Ny4zIDE0LjgtOTQuMiA2OC42LTk0LjIgMTIzLjQgMCAzNS44IDE1LjQgNzAuNyA0MyA5NS43LTIuNiAxMC44LTQuMSAyMS41LTQuMSAzMi4zIDAgNzMuMiA1OS40IDEyOCAxMjggMTI4IDEzLjggMCAyNy4xLTIgNDAuNC02LjcgMjMgMjIuNSA1NC44IDM2LjkgODkuNiAzNi45eiJdCiAgICB9OwogICAgZmFTaXRoID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNpdGgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjUxMiIsICJNMCAzMmw2OS43IDExOC44LTU4LjktMTEuNSA2OS44IDkxYy0zIDE3LTMgMzQuNCAwIDUxLjRsLTY5LjggOTEgNTguOS0xMS41LTY5LjcgMTE4LjggMTE4LjgtNjkuNy0xMS41IDU4LjkgOTEtNjkuOGMxNyAzIDM0LjUgMyA1MS41IDBsOTEgNjkuOC0xMS41LTU4LjkgMTE4LjcgNjkuNy02OS43LTExOC44IDU4LjkgMTEuNS02OS44LTkxYzMtMTcgMy0zNC40IDAtNTEuNGw2OS44LTkxLTU4LjkgMTEuNSA2OS43LTExOC44LTExOC43IDY5LjcgMTEuNS01OC45LTkxLjEgNjkuOWMtOC41LTEuNS0xNy4xLTIuMy0yNS43LTIuM3MtMTcuMiAuOC0yNS43IDIuM0wxMDcuMiA0Mi44IDExOC44IDEwMS43IDAgMzJ6TTIyNCAzODAuMmExMjQuMiAxMjQuMiAwIDEgMSAwLTI0OC40IDEyNC4yIDEyNC4yIDAgMSAxIDAgMjQ4LjR6bTAtMjExLjhhODcuNiA4Ny42IDAgMSAwIDAgMTc1LjEgODcuNiA4Ny42IDAgMSAwIDAtMTc1LjF6Il0KICAgIH07CiAgICBmYU5mY0RpcmVjdGlvbmFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm5mYy1kaXJlY3Rpb25hbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTMwIiwgIk0yMTEuOCA0ODguNmMxLjYgMi41IDIuMSA1LjYgMS40IDguNS0uNiAyLjktMi40IDUuNS00LjkgNy4xLTIuNiAxLjYtNS42IDIuMS04LjYgMS41LTYxLjQtMTMuOS0xMTUuNi00OS45LTE1Mi4yLTEwMS4yUy01LjQgMjkwLjMgMS42IDIyNy43YzctNjIuNyAzNi44LTEyMC41IDgzLjctMTYyLjUgNDYuOS00MiAxMDcuNy02NS4yIDE3MC43LTY1LjIgMS41IDAgMi4xIC4zIDQuMyAuOSAxLjQgLjYgMS44IDEuNCAzLjcgMi41IDEuMSAxLjEgMS45IDIuMyAyLjUgMy43IC41IDEuNCAuOCAyLjggLjggNC4zbDAgMTAxIDI0LjUtMjUuOWMxLTEuMSAyLjItMiAzLjYtMi42IDEuMy0uNiAyLjgtLjkgNC4zLTEgMS41LS4xIDIuOSAuMiA0LjMgLjdzMi43IDEuMyAzLjggMi40YzEgMSAxLjkgMi4yIDIuNSAzLjYgLjYgMS4zIDEgMi44IDEgNC4zcy0uMiAzLS43IDQuM2MtLjYgMS40LTEuNCAyLjYtMi40IDMuN2wtNDQgNDYuNmMtMS4xIDEuMS0yLjMgMi0zLjcgMi42LTEuNSAuNi0zIC45LTUuNCAuOS0uNiAwLTIuMi0uMy0zLjYtLjlzLTIuNy0xLjUtMy43LTIuNmwtNDQuMS00Ni42Yy0yLTIuMi0zLjEtNS4xLTMtOC4xIDAtMyAxLjMtNi43IDMuNS03LjkgMi4yLTIuMSA1LjEtMy4yIDguMS0zLjEgMyAuMSA1LjggMS4zIDcuOSAzLjVsMjQuNSAyNiAwLTg5LjVjLTU2LjQgMi44LTEwOS44IDI1LjgtMTUwLjUgNjUtNDAuNiAzOS4xLTY1LjcgOTEuNy03MC42IDE0Ny45UzM0LjQgMzQ4LjEgNjcuNyAzOTMuN2MzMi40IDQ1LjUgODIgNzcuNSAxMzcgODkuOSAyLjkgLjcgNS41IDIuNSA3LjEgNXpNMTcxLjQgMTI2LjFjLS44IDEuMy0xLjkgMi40LTMuMSAzLjItMjAuNSAxMy45LTM3LjIgMzIuNi00OC44IDU0LjVzLTE3LjcgNDYuMy0xNy43IDcxLjEgNi4xIDQ5LjIgMTcuNyA3MC4yYzExLjYgMjIuOCAyOC4zIDQxLjUgNDguOCA1NS40IDIuNSAxLjcgNC4yIDQuMyA0LjcgNy4zIC42IDIuOS0uOSA2LTEuNyA4LjQtMS43IDIuNS01LjIgNC4yLTcuMyAzLjktMi45IDEuNC02IC44LTguNC0uOS0yMy42LTE2LTQyLjgtMzcuNS01Ni4xLTYyLjctMTMuMy0yNS4xLTIwLjMtNTMuMS0yMC4zLTgxLjYgMC0yOC40IDctNTYuNSAyMC4zLTgxLjYgMTMuMy0yNS4yIDMyLjUtNDYuNyA1Ni4xLTYyLjcgMS4yLS44IDIuNi0xLjQgNC0xLjggMS41LS4zIDMtLjMgNC41IDAgMS40IC4yIDIuOCAuOCA0LjEgMS42czIuMyAxLjkgMy4yIDMuMWMuOCAxLjIgMS40IDIuNiAxLjcgNC4xcy4zIDMgMCA0LjRjLS4zIDEuNS0uOCAyLjktMS43IDQuMXpNMzQwLjkgMzgzLjVjLjgtMS4yIDEuOS0yLjMgMi4yLTMuMWwwLS4xYzIxLjMtMTQgMzgtMzIuNyA0OS42LTU0LjYgMTEuNS0yMS44IDE3LjUtNDYuMiAxNy41LTcwLjlzLTYtNDkuMS0xNy41LTcxYy0xMS42LTIyLjctMjguMy00MC41LTQ5LjYtNTQuNS0uMy0uOC0xLjQtMS45LTIuMi0zLjEtLjgtMS4zLTEuNC0yLjctMS42LTQuMS0xLjItMS41LS4zLTMgMC00LjQgLjMtMS41IC45LTIuOSAxLjctNC4xIC45LTEuMiAxLjEtMi4zIDMuMi0zLjEgMS4yLS44IDIuNi0xLjMgNC4xLTEuNnMyLjktLjMgNC40IDAgMi44IC45IDQuMSAxLjhjMjMuNCAxNiA0Mi43IDM3LjUgNTUuOSA2Mi42IDEzLjMgMjUuMSAxOS40IDUzLjEgMTkuNCA4MS41IDAgMjguNS02LjEgNTYuNS0xOS40IDgxLjYtMTMuMiAyNS4xLTMyLjUgNDYuNi01NS45IDYyLjYtMS4zIC45LTIuNiAxLjUtNC4xIDEuOHMtMi45IC4zLTQuNCAwLTIuOS0xLjctNC4xLTEuNmMtMi4xLS44LTIuMy0xLjktMy4yLTMuMS0uOC0xLjItMS40LTIuNi0xLjctNC4xLS4zLTEuNC0xLjItMi45IDAtNC40IC4yLTEuNCAuOC0yLjggMS42LTQuMXpNMzEyLjMgNi4zYzU2LjIgMTIuNyAxMDYuNCA0NCAxNDIuNyA4OC43IDMwLjQgMzcuNiA0OS42IDgzIDU1LjMgMTMxIDUuNiA0OC0yLjQgOTYuNy0yMy4yIDE0MC4zLTIwLjkgNDMuNi01My42IDgwLjUtOTQuNSAxMDYuMy00MC45IDI1LjctODguMiAzOS40LTEzNi42IDM5LjQtMS41IDAtMi45LS4zLTQuMy0uOS0xLjQtLjUtMi42LTEuNC0zLjctMi40LTEuOS0xLjEtMS45LTIuMy0yLjQtMy43LS42LTEuNC0uOS0yLjgtLjktNC4zbDAtOTkuMi0yNC41IDI2Yy0yLjEgMi4yLTQuOSAyLjYtNy45IDMuNi0zIC4xLTUuOS0xLjEtOC4xLTQtMi4yLTEuMi0zLjUtNC0zLjUtNy0uMS0zIDEtNS45IDMtOC4xbDQ0LjEtNDYuNmMxLjMtMi4yIDUuMS0zLjQgNy4zLTMuNCA0IDAgNi45IDEuMiA5LjEgMy40bDQ0IDQ2LjZjMi4xIDIuMiAzLjIgNS4xIDMuMSA4LjFzLTEuNCA1LjgtMy41IDdjLTIuMiAyLjktNS4xIDQuMS04LjEgNC0zLTEtNS45LTEuNC03LjktMy42bC0yNC41LTI1LjkgMCA4Ny41YzU2LjQtMi44IDEwOS44LTI1LjggMTUwLjUtNjUgNDAuNy00MCA2NS44LTkxLjcgNzAuNy0xNDcuOSA0LjgtNTcuMS0xMC44LTExMi4zLTQ0LjEtMTU3LjktMzMuMy00NS42LTgyLTc3LjUtMTM3LTg5LjktMS41LS4zLTIuOC0uOS00LjEtMS44LTEuMi0uOS0yLjItMS45LTMtMy4yLS44LTEuMi0yLjItMi42LTEuNi00LjEtLjItMS41LS4yLTMgLjEtNC40IC40LTEuNCAxLTIuOCAxLjgtNCAuOS0xLjIgMi0yLjIgMy4yLTMgMS4zLS44IDIuNy0xLjMgNC4xLTEuNiAxLjUtLjMgMy0uMiA0LjQgLjF6bTQwLjggMjQ5LjhjMCAzMS40LTE3LjUgNjEuMS00OS4zIDgzLjUtMi4xIDEuNS00LjggMi4zLTcuNCAyLTIuNy0uMi01LjItMS4zLTctMy4ybC03MC4xLTY5LjhjLTIuMi0yLjEtNC4yLTUtMy40LTggMC0zIDEuMi01LjkgMy4zLTggMi4yLTIuMSA1LTMuMyA4LTMuM3M1LjkgMS4yIDggMy4zbDYzLjEgNjIuOGMyMC44LTE3LjEgMzIuMi0zNy45IDMyLjItNTkuMyAwLTIzLjktMTQuMS00Ny0zOS43LTY1LjEtMi41LTEuNy00LjEtNC4zLTQuNi03LjMtLjUtMi45IC4xLTYgMS45LTguNCAxLjctMi41IDQuMy00LjEgNy4zLTQuNiAyLjktLjUgNiAuMSA4LjQgMS45IDMxLjggMjIuNCA0OS4zIDUyLjEgNDkuMyA4My41ek0yMTYuNyAzNDEuNWMtMyAuNS02LS4yLTguNS0xLjktMzEuNy0yMi40LTUwLjEtNTIuMS01MC4xLTgzLjVzMTguNC02MS4xIDUwLjEtODMuNWMyLjItMS42IDQuOS0yLjMgNy41LTIuMSAyLjcgLjMgNS4xIDEuNCA3IDMuM2w3MC4xIDY5LjhjMi4xIDIuMSAzLjMgNSAzLjMgOHMtMiA1LjgtMy4zIDhjLTIuMSAyLjEtNSAzLjMtNy45IDMuMy0zIDAtNi44LTEuMi04LTMuM2wtNjMuMS02Mi45Yy0yMC45IDE3LjMtMzIuMiAzOC0zMi4yIDU5LjQgMCAyMyAxNC4xIDQ3IDM5LjcgNjUgMi40IDEuOCA0LjEgNC40IDQuNiA3LjQgLjUgMi45LS4yIDUuOS0xLjkgOC40LTEuNyAyLjQtNC40IDQuMS03LjMgNC42eiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNCeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLWJ5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZTciLCAiTTMyMi45IDE5NC40bDAgMTAxLjQtMjguMyAwIDAgMTIwLjUtNzcuMSAwIDAtMTIwLjQtMjguMyAwIDAtMTAxLjVjMC00LjQgMS42LTguMiA0LjYtMTEuMyAzLjEtMy4xIDYuOS00LjcgMTEuMy00LjdsMTAxLjkgMGM0LjEgMCA3LjggMS42IDExLjEgNC43IDMuMSAzLjIgNC44IDYuOSA0LjggMTEuM3ptLTMyLjUtNjQuNWEzNC41IDM0LjUgMCAxIDEgLTY5IC44IDM0LjUgMzQuNSAwIDEgMSA2OS0uOHpNMjU1LjYgOEMzOTcuNCA4IDUwNCAxMTguMSA1MDQgMjU2IDUwNCA0MDMuMSAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS42IDUwNCA4IDM5NC41IDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4em0uOCA0NC43Yy0xMTguMiAwLTIwMy43IDk3LjktMjAzLjcgMjAzLjMgMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOCAuMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zeiJdCiAgICB9OwogICAgZmFVbWJyYWNvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVtYnJhY28iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjhlOCIsICJNMjU2LjMgOGEyNDggMjQ4IDAgMSAwIC0uNyA0OTYgMjQ4IDI0OCAwIDEgMCAuNy00OTZ6bTE0NSAyNjZjLS44IDI3LjEtNS40IDQ4LjgtMTQgNjVzLTIzLjEgMjcuOS00My41IDM1Yy0yMC40IDcuMS00OC45IDEwLjYtODUuNCAxMC41bC00LjYgMGMtMzYuNSAuMS02NS0zLjMtODUuNC0xMC41cy0zNC45LTE4LjgtNDMuNS0zNWMtOC42LTE2LjItMTMuMi0zNy45LTE0LTY1LS43LTEwLjItLjctMjAuNSAwLTMwLjcgLjQtMTQuNyAxLjYtMjkuMyAzLjYtNDMuOSAxLjktMTMuNCAzLjYtMjIuNiA1LjQtMzIgMS00LjkgMS4zLTYuNCAxLjgtOC40IC4zLTEuMSAuOS0yLjEgMS44LTIuOHMyLTEuMSAzLjEtMS4xbC43IDAgMzIgNWMxLjIgLjIgMi4yIC44IDMgMS43czEuMiAyLjEgMS4yIDMuM2MwIC4zIDAgLjUgMCAuOGwtMS43IDguOGMtMS42IDguOC0zLjIgMjAuMS00LjggMzMuNy0xLjcgMTQtMi41IDI4LjEtMi42IDQyLjItLjIgMjcgMi41IDQ2LjkgOC4xIDU5LjggMi44IDYuNCA3LjIgMTIgMTIuNiAxNi40czExLjkgNy40IDE4LjcgOC44YzE4LjggNCAzOC4xIDUuNyA1Ny4zIDUuMWwxMC4zIDBjMTkuMiAuNiAzOC41LTEuMiA1Ny4zLTUuMiA2LjgtMS40IDEzLjItNC41IDE4LjYtOC44czkuNy0xMCAxMi41LTE2LjRjNS43LTEyLjkgOC40LTMyLjkgOC4xLTU5LjgtLjEtMTQuMS0xLTI4LjItMi42LTQyLjEtMS43LTEzLjYtMy4zLTI0LjgtNC45LTMzLjdsLTEuNy04LjhjMC0uMyAwLS41IDAtLjggMC0xLjIgLjQtMi40IDEuMi0zLjNzMS44LTEuNSAzLTEuN2wzMi01IC44IDBjMS4xIDAgMi4yIC40IDMuMSAxLjFzMS41IDEuNyAxLjggMi44Yy42IDIgLjggMy42IDEuOCA4LjQgMS44IDkuNiAzLjUgMTguOCA1LjQgMzIgMiAxNC42IDMuMiAyOS4yIDMuNiA0My45IC43IDEwLjIgLjcgMjAuNSAwIDMwLjdsMCAweiJdCiAgICB9OwogICAgZmFIb29saSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJob29saSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDI3IiwgIk0xNDQuNSAzNTJsMzguMyAuOGMtMTMuMi00LjYtMjYtMTAuMi0zOC4zLTE2LjhsMCAxNnptNTcuNy01LjNsMCA1LjMtMTkuNCAuOGMzNi41IDEyLjUgNjkuOSAxNC4yIDk0LjcgNy4yLTE5LjkgLjItNDUuOC0yLjYtNzUuMy0xMy4zek02MTEuMSAyMzEuNWMxNS45IDAgMjguOS0xMi45IDI4LjktMjguOXMtMTIuOS0yNC41LTI4LjktMjQuNWMtMTUuOSAwLTI4LjkgOC42LTI4LjkgMjQuNXMxMi45IDI4LjkgMjguOSAyOC45ek01ODIuMSAzNTJsNTcuOSAwIDAtMTEwLjUtNTcuOSAwIDAgMTEwLjV6bS03My43IDBsNTcuOSAwIDAtMTk1LjMtNTcuOSAyNy4zIDAgMTY4em0tMzEtMTE5LjRjLTE4LjItMTguMi01MC40LTE3LjEtNTAuNC0xNy4xcy0zMi4zLTEuMS01MC40IDE3LjFjLTE4LjIgMTguMi0xNi44IDMzLjktMTYuOCA1Mi42cy0xLjQgMzQuMyAxNi44IDUyLjUgNTAuNCAxNy4xIDUwLjQgMTcuMSAzMi4zIDEuMSA1MC40LTE3LjFjMTguMi0xOC4yIDE2LjgtMzMuOCAxNi44LTUyLjUtLjEtMTguOCAxLjMtMzQuNS0xNi44LTUyLjZ6bS0zOS44IDcxLjljMCAzLjYtMS44IDEyLjUtMTAuNyAxMi41cy0xMC43LTguOS0xMC43LTEyLjVsMC00MC40YzAtOC43IDcuMy0xMC45IDEwLjctMTAuOXMxMC43IDIuMSAxMC43IDEwLjlsMCA0MC40ek0zMzEuNCAyMzIuNmMtMTguMi0xOC4yLTUwLjQtMTcuMS01MC40LTE3LjFzLTMyLjItMS4xLTUwLjQgMTcuMWMtMS45IDEuOS0zLjcgMy45LTUuMyA2LTM4LjItMjkuNi03Mi41LTQ2LjUtMTAyLjEtNjEuMWwwLTIwLjctMjIuNSAxMC42Yy01NC40LTIyLjEtODktMTguMi05Ny4zIC4xIDAgMC0yNC45IDMyLjggNjEuOCAxMTAuOGwwIDczLjcgNTcuOSAwIDAtMjguNmMtNi41LTQuMi0xMy04LjctMTkuNC0xMy42LTE0LjgtMTEuMi0yNy40LTIxLjYtMzguNC0zMS40bDAtMzFjMTMuMSAxNC43IDMwLjUgMzEuNCA1My40IDUwLjNsNC41IDMuNiAwLTI5LjhjMC02LjkgMS43LTE4LjIgMTAuOC0xOC4yczEwLjYgNi45IDEwLjYgMTVsMCA0OC43YzE4IDEyLjIgMzcuMyAyMi4xIDU3LjcgMjkuNmwwLTkzLjljMC0xOC43LTEzLjQtMzcuNC00MC42LTM3LjQtMTUuOC0uMS0zMC41IDguMi0zOC41IDIxLjlsMC01NC4zYzQxLjkgMjAuOSA4My45IDQ2LjUgOTkuOSA1OC4zLTEwLjIgMTQuNi05LjMgMjguMS05LjMgNDMuNyAwIDE4LjctMS40IDM0LjMgMTYuOCA1Mi41czUwLjQgMTcuMSA1MC40IDE3LjEgMzIuMyAxLjEgNTAuNC0xNy4xYzE4LjItMTguMiAxNi43LTMzLjggMTYuNy01Mi41IDAtMTguNSAxLjUtMzQuMi0xNi43LTUyLjN6TTY1LjIgMTg0bDAgNjMuM2MtNDguNy01NC41LTM4LjktNzYtMzUuMi03OS4xIDEzLjUtMTEuNCAzNy41LTggNjQuNCAyLjFMNjUuMiAxODR6TTI5MS43IDMwNC41YzAgMy42LTEuOCAxMi41LTEwLjcgMTIuNXMtMTAuNy04LjktMTAuNy0xMi41bDAtNDAuNGMwLTguNyA3LjMtMTAuOSAxMC43LTEwLjlzMTAuNyAyLjEgMTAuNyAxMC45bDAgNDAuNHoiXQogICAgfTsKICAgIGZhU3F1YXJlR2l0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1naXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZ2l0LXNxdWFyZSJdLCAiZjFkMiIsICJNMTIwLjggMzM1LjVjLTUuOS0uNC0xMi42LS44LTIwLjItMS4zLTMuMyA0LjEtNi42IDguNC02LjYgMTMuNSAwIDE4LjUgNjUuNSAxOC41IDY1LjUtMS41IDAtOC4zLTcuNC04LjctMzguOC0xMC43bC4xIDB6bTcuOC0xMTcuOWMtMzIuMyAwLTMzLjcgNDQuNS0uNyA0NC41IDMyLjUgMCAzMS43LTQ0LjUgLjctNDQuNXpNMzg0IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTI0My45IDE3Mi4yYy0xNC41IDAtMjIuOS04LjQtMjIuOS0yMi45czguNC0yMi4zIDIyLjktMjIuM2MxNC43IDAgMjMuMSA3LjggMjMuMSAyMi4zcy04LjQgMjIuOS0yMy4xIDIyLjl6TTE0OS42IDE5NWw0OS41IDAgMCAyMS42LTIzLjQgMS44YzQuNiA1LjggOS40IDE0IDkuNCAyNS43IDAgNDguNy01Ny4yIDQ3LjItNzQuMiA0Mi40bC04LjQgMTMuNGM1IC4zIDkuOCAuNiAxNC4zIC44IDU2LjMgMy4yIDgwLjUgNC42IDgwLjUgMzguNSAwIDI5LjItMjUuNyA0NS43LTY5LjkgNDUuNy00NiAwLTYzLjUtMTEuNi02My41LTMxLjcgMC0xMS40IDUuMS0xNy41IDE0LTI1LjktOC40LTMuNS0xMS4yLTkuOS0xMS4yLTE2LjggMC05LjYgNy40LTE2LjMgMjMtMzAuNmwuMi0uMmMtMTIuNC02LjEtMjEuOC0xOS4zLTIxLjgtMzguMSAwLTUxLjYgNTYuNi01My4zIDgxLjYtNDYuOGwtLjEgLjJ6TTI3MC41IDMwMy4xbDEzIDEuOCAwIDIwLjEtNzIuNCAwIDAtMjAuMWMyLjctLjQgNS0uNyA2LjktLjkgOS45LTEuMiAxMC4xLTEuMyAxMC4xLTZsMC03NC43YzAtNC40LS45LTQuNy0xMC4xLTcuOC0xLjktLjctNC4yLTEuNC02LjktMi40bDIuOC0yMC42IDUyLjYgMCAwIDEwNS41YzAgNC4xIC4yIDQuNiA0LjEgNS4xbC0uMSAwem0xMDYuNi0xMC40TDM4NCAzMTVjLTEwLjkgNS40LTI2LjkgMTAuMi00MS40IDEwLjItMzAuMiAwLTQxLjctMTIuMi00MS43LTQwLjlsMC02Ni42YzAtLjggMC0xLjQtLjItMS44LS44LTEuMi00LjItLjctMTkuNi0uN2wwLTIyLjZjMjIuMy0yLjUgMzEuMi0xMy43IDM0LTQxLjRsMjQuMiAwYzAgMzMuMy0uNiAzOCAuNyAzOC42IC4zIC4xIC43IDAgMS4zIDBsMzUuOCAwIDAgMjUuNC0zNy44IDAgMCA2MS42Yy0uMiA2LjMtLjkgMzAuNCAzNy45IDE1LjlsLS4xIDB6Il0KICAgIH07CiAgICBmYUdpdFNxdWFyZSA9IGZhU3F1YXJlR2l0OwogICAgZmFPZG5va2xhc3NuaWtpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm9kbm9rbGFzc25pa2kiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjI2MyIsICJNMjc1LjEgMzM0Yy0yNy40IDE3LjQtNjUuMSAyNC4zLTkwIDI2LjlsMjAuOSAyMC42IDc2LjMgNzYuM2MyNy45IDI4LjYtMTcuNSA3My4zLTQ1LjcgNDUuNy0xOS4xLTE5LjQtNDcuMS00Ny40LTc2LjMtNzYuNkw4NCA1MDMuNGMtMjguMiAyNy41LTczLjYtMTcuNi00NS40LTQ1LjcgMTkuNC0xOS40IDQ3LjEtNDcuNCA3Ni4zLTc2LjNsMjAuNi0yMC42Yy0yNC42LTIuNi02Mi45LTkuMS05MC42LTI2LjktMzIuNi0yMS00Ni45LTMzLjMtMzQuMy01OSA3LjQtMTQuNiAyNy43LTI2LjkgNTQuNi01LjcgMCAwIDM2LjMgMjguOSA5NC45IDI4LjlTMjU1IDI2OS4yIDI1NSAyNjkuMmMyNi45LTIxLjEgNDcuMS04LjkgNTQuNiA1LjcgMTIuNCAyNS43LTEuOSAzOC0zNC41IDU5LjF6bTE0LjYtMjA0LjdhMTI5LjcgMTI5LjcgMCAxIDEgLTI1OS40IC40IDEyOS43IDEyOS43IDAgMSAxIDI1OS40LS40em0tMTkzLjQgLjRhNjMuNyA2My43IDAgMSAwIDEyNy40LS40IDYzLjcgNjMuNyAwIDEgMCAtMTI3LjQgLjR6Il0KICAgIH07CiAgICBmYURydXBhbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkcnVwYWwiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFhOSIsICJNMjcyLjMgMTA4LjFDMjM2LjUgNzIuNSAyMDIuNSAzOC40IDE5Mi40IDAgMTgyLjQgMzguNCAxNDguMSA3Mi41IDExMi40IDEwOC4xIDU4LjggMTYxLjctMS45IDIyMi40LTEuOSAzMTMuNC00LjMgNDIwLjcgODAuOCA1MDkuNiAxODguMSA1MTJzMTk2LjItODIuOCAxOTguNS0xOTAuMWMuMS0yLjggLjEtNS42IDAtOC41IDAtOTEuMS02MC44LTE1MS43LTExNC4zLTIwNS4zek05OCAzMzEuMWMtNS45IDcuNS0xMSAxNS42LTE1LjIgMjQuMi0uMyAuNy0uOCAxLjMtMS4zIDEuOHMtMS4yIC44LTIgMWwtMS43IDBjLTQuMyAwLTkuMi04LjUtOS4yLTguNS0xLjMtMi0yLjUtNC4yLTMuNy02LjRsLS44LTEuOGMtMTEuMi0yNS43LTEuNS02Mi4zLTEuNS02Mi4zIDQuOC0xNy44IDEyLjctMzQuNyAyMy4yLTQ5LjkgNi40LTkuNiAxMy41LTE4LjkgMjEtMjcuN2w5LjIgOS4yIDQzLjUgNDQuNGMuOCAuOSAxLjMgMi4xIDEuMyAzLjNzLS41IDIuNC0xLjMgMy4zTDExNC4xIDMxMi4zIDk4IDMzMS4xem05Ni42IDEyNy4zYy0xMi45LS4xLTI1LjYtMy45LTM2LjQtMTFzLTE5LjQtMTcuMS0yNC42LTI4LjktNy0yNC45LTUtMzcuNyA3LjYtMjQuNyAxNi4yLTM0LjRjMTQuMi0xNi45IDMxLjUtMzMuNSA1MC4zLTU1LjMgMjIuMyAyMy44IDM2LjkgNDAuMSA1MS4yIDU4IDEuMSAxLjQgMi4xIDIuOSAzIDQuNCA3LjggMTEuMSAxMiAyNC40IDEyIDM4IDAgOC44LTEuNyAxNy40LTUgMjUuNXMtOC4yIDE1LjUtMTQuNCAyMS43LTEzLjUgMTEuMS0yMS42IDE0LjUtMTYuNyA1LjEtMjUuNSA1LjFsLS4yIDB6TTMyMC43IDM1MS42Yy0uNCAxLjQtMS4yIDIuNi0yLjMgMy42cy0yLjQgMS42LTMuOCAxLjhsLTEuMyAwYy0yLjYtLjktNC45LTIuNy02LjMtNS4xLTExLjYtMTcuNS0yNC45LTMzLjktMzkuNS00OWwtMTcuOC0xOC40LTU5LjEtNjEuM2MtMTIuNC0xMS41LTI0LjItMjMuNi0zNS40LTM2LjMtLjMtLjUtLjYtLjktLjktMS40LTItMi44LTMuNi01LjktNC43LTkuMmwwLTEuOGMtLjgtNS0uNC0xMC4xIDEuMi0xNXM0LjQtOS4yIDgtMTIuN2MxMS40LTExLjQgMjMtMjMgMzMuOC0zNC45IDEyIDEzLjMgMjQuOCAyNiAzNy40IDM4LjYgMjUuOCAyNCA0OS4xIDUwLjUgNjkuNiA3OS4xIDE3LjMgMjQuNSAyNi43IDUzLjggMjcgODMuOC0uMSAxMi45LTIuMiAyNS44LTYgMzguMnoiXQogICAgfTsKICAgIGZhQmxvZ2dlckIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmxvZ2dlci1iIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzN2QiLCAiTTQ0Ni42IDIyMi43Yy0xLjgtOC02LjgtMTUuNC0xMi41LTE4LjUtMS44LTEtMTMtMi4yLTI1LTIuNy0yMC4xLS45LTIyLjMtMS4zLTI4LjctNS0xMC4xLTUuOS0xMi44LTEyLjMtMTIuOS0yOS41LS4xLTMzLTEzLjgtNjMuNy00MC45LTkxLjMtMTkuMy0xOS43LTQwLjktMzMtNjUuNS00MC41LTUuOS0xLjgtMTkuMS0yLjQtNjMuMy0yLjktNjkuNC0uOC04NC44IC42LTEwOC40IDEwLTQzLjUgMTcuMi03NC43IDUzLjgtODYuMSAxMDAuNi0yLjEgOC44LTIuNiAyMi45LTMuMSAxMDMuOS0uNiAxMDEuNSAuMSAxMTYuNCA2LjQgMTM2LjUgMTUuNiA0OS42IDU5LjkgODYuMyAxMDQuNCA5NC4zIDE0LjggMi43IDE5Ny4zIDMuMyAyMTYgLjggMzIuNS00LjQgNTgtMTcuNSA4MS45LTQxLjkgMTcuMy0xNy43IDI4LjEtMzYuOCAzNS4yLTYyLjEgNC45LTE3LjYgNC41LTE0Mi44IDIuNS0xNTEuN3pNMTI0LjUgMTU5LjFjNy44LTcuOSAxMC04LjIgNTguOC04LjIgNDMuOSAwIDQ1LjQgLjEgNTEuOCAzLjQgOS4zIDQuNyAxMy40IDExLjMgMTMuNCAyMS45IDAgOS41LTMuOCAxNi4yLTEyLjMgMjEuNi00LjYgMi45LTcuMyAzLjEtNTAuMyAzLjMtMjYuNSAuMi00Ny43LS40LTUwLjgtMS4yLTE2LjYtNC43LTIyLjgtMjguNS0xMC42LTQwLjh6TTMxNi4zIDM1OC45bC0xNC45IDIuNC03Ny41IC45Yy02OC4xIC44LTg3LjMtLjQtOTAuOS0yLTcuMS0zLjEtMTMuOC0xMS43LTE0LjktMTkuNC0xLjEtNy4zIDIuNi0xNy4zIDguMi0yMi40IDcuMS02LjQgMTAuMi02LjYgOTcuMy02LjcgODkuNi0uMSA4OS4xLS4xIDk3LjYgNy44IDEyLjEgMTEuMyA5LjUgMzEuMi00LjkgMzkuNHoiXQogICAgfTsKICAgIGZhSW52aXNpb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaW52aXNpb24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjdiMCIsICJNNDA3LjQgMzJMNDAuNiAzMkMxOC4yIDMyIDAgNTAuMiAwIDcyLjZMMCA0MzkuNEMwIDQ2MS44IDE4LjIgNDgwIDQwLjYgNDgwbDM2Ni44IDBjMjIuNCAwIDQwLjYtMTguMiA0MC42LTQwLjZsMC0zNjYuOEM0NDggNTAuMiA0MjkuOCAzMiA0MDcuNCAzMnpNMTc2LjEgMTQ1LjZjLjQgMjMuNC0yMi40IDI3LjMtMjYuNiAyNy40LTE0LjkgMC0yNy4xLTEyLTI3LjEtMjcgLjEtMzUuMiA1My4xLTM1LjUgNTMuNy0uNHpNMzMyLjggMzc3Yy02NS42IDAtMzQuMS03NC0yNS0xMDYuNiAxNC4xLTQ2LjQtNDUuMi01OS01OS45IC43bC0yNS44IDEwMy4zLTQ1LjEgMCA4LjEtMzIuNWMtMzEuNSA1MS44LTk0LjYgNDQuNC05NC42LTQuMyAuMS0xNC4zIC45LTE0IDIzLTEwNC4xbC0zMS44IDAgOS43LTM1LjYgNzYuNCAwYy0zMy42IDEzMy43LTMyLjYgMTI2LjktMzIuOSAxMzguMiAwIDIwLjkgNDAuOSAxMy41IDU3LjQtMjMuMmwxOS44LTc5LjQtMzIuMyAwIDkuNy0zNS42IDY4LjggMC04LjkgNDAuNWM0MC41LTc1LjUgMTI3LjktNDcuOCAxMDEuOCAzOC0xNC4yIDUxLjEtMTQuNiA1MC43LTE0LjkgNTguOCAwIDE1LjUgMTcuNSAyMi42IDMxLjgtMTYuOUwzODYgMzI1Yy0xMC41IDM2LjctMjkuNCA1Mi01My4yIDUyeiJdCiAgICB9OwogICAgZmFGYWNlYm9va0YgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmFjZWJvb2stZiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMzllIiwgIk04MCAyOTkuM2wwIDIxMi43IDExNiAwIDAtMjEyLjcgODYuNSAwIDE4LTk3LjgtMTA0LjUgMCAwLTM0LjZjMC01MS43IDIwLjMtNzEuNSA3Mi43LTcxLjUgMTYuMyAwIDI5LjQgLjQgMzcgMS4ybDAtODguN0MyOTEuNCA0IDI1Ni40IDAgMjM2LjIgMCAxMjkuMyAwIDgwIDUwLjUgODAgMTU5LjRsMCA0Mi4xLTY2IDAgMCA5Ny44IDY2IDB6Il0KICAgIH07CiAgICBmYUNlbnRvcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjZW50b3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjc4OSIsICJNMjg5LjYgOTcuNWwzMS42IDMxLjctNzYuMyA3Ni41IDAtMTA4LjIgNDQuNyAwek0xMjcuMiAxMjkuMmw3Ni4zIDc2LjUgMC0xMDguMi00NC43IDAtMzEuNiAzMS43em00MS41LTQxLjZsNDQuNyAwIDAgMTI3LjkgMTAuOCAxMC44IDEwLjgtMTAuOCAwLTEyNy45IDQ0LjcgMC01NS41LTU1LjYtNTUuNSA1NS42em0yNi4yIDE2OC4xbC0xMC44LTEwLjgtMTI4LjYgMCAwLTQ0LjgtNTUuNSA1NS42IDU1LjUgNTUuNiAwLTQ0LjggMTI4LjYgMCAxMC44LTEwLjh6TTI3NC4yIDIzNWwxMDcuOSAwIDAtNDQuOC0zMS42LTMxLjctNzYuMyA3Ni41em0xNzMuMyAyMC43bC01NS41LTU1LjYgMCA0NC44LTEyNy43IDAtMTAuOCAxMC44IDEwLjggMTAuOCAxMjcuNyAwIDAgNDQuOCA1NS41LTU1LjZ6TTY1LjQgMTc2LjJsMzIuNS0zMS43IDkwLjMgOTAuNSAxNS4zIDAgMC0xNS4zLTkwLjMtOTAuNSAzMS42LTMxLjctNzkuNCAwIDAgNzguN3pNMzgyLjEgOTcuNWwtNzguNSAwIDMxLjYgMzEuNy05MC4zIDkwLjUgMCAxNS4zIDE1LjMgMCA5MC4zLTkwLjUgMzEuNiAzMS43IDAtNzguN3pNMjAzLjUgNDEzLjlsMC0xMDguMS03Ni4zIDc2LjUgMzEuNiAzMS43IDQ0LjcgMCAwLS4xek02NS40IDIzNWwxMDguOCAwLTc2LjMtNzYuNS0zMi41IDMxLjcgMCA0NC44ek0zODIuMSAzMzUuMmwtMzEuNiAzMS43LTkwLjMtOTAuNS0xNS4zIDAgMCAxNS4zIDkwLjMgOTAuNS0zMS42IDMxLjcgNzguNSAwIDAtNzguN3ptMC01OC44bC0xMDcuOSAwIDc2LjMgNzYuNSAzMS42LTMxLjcgMC00NC44ek0zMjEuMiAzODIuMmwtNzYuMy03Ni41IDAgMTA4LjEgNDQuNyAwIDMxLjYtMzEuNnpNOTcuOSAzNTIuOWw3Ni4zLTc2LjUtMTA4LjggMCAwIDQ0LjggMzIuNSAzMS43em0xODEuOCA3MC45bC00NC43IDAgMC0xMjcuOS0xMC44LTEwLjgtMTAuOCAxMC44IDAgMTI3LjktNDQuNyAwIDU1LjUgNTUuNiA1NS41LTU1LjZ6TTExMy4yIDM4Mi4ybDkwLjMtOTAuNSAwLTE1LjMtMTUuMyAwLTkwLjMgOTAuNS0zMi41LTMxLjcgMCA3OC43IDc5LjQgMC0zMS42LTMxLjd6Il0KICAgIH07CiAgICBmYUNjQW1hem9uUGF5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNjLWFtYXpvbi1wYXkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjQyZCIsICJNMTI0LjcgMjAxLjhjLjEtMTEuOCAwLTIzLjUgMC0zNS4zbDAtMzUuM2MwLTEuMyAuNC0yIDEuNC0yLjcgMTEuNS04IDI0LjEtMTIuMSAzOC4yLTExLjEgMTIuNSAuOSAyMi43IDcgMjguMSAyMS43IDMuMyA4LjkgNC4xIDE4LjIgNC4xIDI3LjcgMCA4LjctLjcgMTcuMy0zLjQgMjUuNi01LjcgMTcuOC0xOC43IDI0LjctMzUuNyAyMy45LTExLjctLjUtMjEuOS01LTMxLjQtMTEuNy0uOS0uOC0xLjQtMS42LTEuMy0yLjh6bTE1NC45IDE0LjZjNC42IDEuOCA5LjMgMiAxNC4xIDEuNSAxMS42LTEuMiAyMS45LTUuNyAzMS4zLTEyLjUgLjktLjYgMS4zLTEuMyAxLjMtMi41LS4xLTMuOSAwLTcuOSAwLTExLjggMC00LS4xLTggMC0xMiAwLTEuNC0uNC0yLTEuOC0yLjItNy0uOS0xMy45LTIuMi0yMC45LTIuOS03LS42LTE0LS4zLTIwLjggMS45LTYuNyAyLjItMTEuNyA2LjItMTMuNyAxMy4xLTEuNiA1LjQtMS42IDEwLjggLjEgMTYuMiAxLjYgNS41IDUuMiA5LjIgMTAuNCAxMS4yek01NzYgODBsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDQ4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0zNjguNSAxMDMuOWMuNCAxLjcgLjkgMy40IDEuNiA1LjEgMTYuNSA0MC42IDMyLjkgODEuMyA0OS41IDEyMS45IDEuNCAzLjUgMS43IDYuNCAuMiA5LjktMi44IDYuMi00LjkgMTIuNi03LjggMTguNy0yLjYgNS41LTYuNyA5LjUtMTIuNyAxMS4yLTQuMiAxLjEtOC41IDEuMy0xMi45IC45LTIuMS0uMi00LjItLjctNi4zLS44LTIuOC0uMi00LjIgMS4xLTQuMyA0LS4xIDIuOC0uMSA1LjYgMCA4LjMgLjEgNC42IDEuNiA2LjcgNi4yIDcuNSA0LjcgLjggOS40IDEuNiAxNC4yIDEuNyAxNC4zIC4zIDI1LjctNS40IDMzLjEtMTcuOSAyLjktNC45IDUuNi0xMC4xIDcuNy0xNS40IDE5LjgtNTAuMSAzOS41LTEwMC4zIDU5LjItMTUwLjUgLjYtMS41IDEuMS0zIDEuMy00LjYgLjQtMi40LS43LTMuNi0zLjEtMy43LTUuNi0uMS0xMS4xIDAtMTYuNyAwLTMuMSAwLTUuMyAxLjQtNi40IDQuMy0uNCAxLjEtLjkgMi4zLTEuMyAzLjRsLTI5LjEgODMuN2MtMi4xIDYuMS00LjIgMTIuMS02LjUgMTguNi0uNC0uOS0uNi0xLjQtLjgtMS45LTEwLjgtMjkuOS0yMS42LTU5LjktMzIuNC04OS44LTEuNy00LjctMy41LTkuNS01LjMtMTQuMi0uOS0yLjUtMi43LTQtNS40LTQtNi40LS4xLTEyLjgtLjItMTkuMi0uMS0yLjIgMC0zLjMgMS42LTIuOCAzLjd6TTI0Mi40IDIwNmMxLjcgMTEuNyA3LjYgMjAuOCAxOCAyNi42IDkuOSA1LjUgMjAuNyA2LjIgMzEuNyA0LjYgMTIuNy0xLjkgMjMuOS03LjMgMzMuOC0xNS41IC40LS4zIC44LS42IDEuNC0xIC41IDMuMiAuOSA2LjIgMS41IDkuMiAuNSAyLjYgMi4xIDQuMyA0LjUgNC40IDQuNiAuMSA5LjEgLjEgMTMuNyAwIDIuMy0uMSAzLjgtMS42IDQtMy45IC4xLS44IC4xLTEuNiAuMS0yLjNsMC04OC44YzAtMy42LS4yLTcuMi0uNy0xMC44LTEuNi0xMC44LTYuMi0xOS43LTE1LjktMjUuNC01LjYtMy4zLTExLjgtNS0xOC4yLTUuOS0zLS40LTYtLjctOS4xLTEuMWwtMTAgMGMtLjggLjEtMS42IC4zLTIuNSAuMy04LjIgLjQtMTYuMyAxLjQtMjQuMiAzLjUtNS4xIDEuMy0xMCAzLjItMTUgNC45LTMgMS00LjUgMy4yLTQuNCA2LjUgLjEgMi44LS4xIDUuNiAwIDguMyAuMSA0LjEgMS44IDUuMiA1LjcgNC4xIDYuNS0xLjcgMTMuMS0zLjUgMTkuNy00LjggMTAuMy0xLjkgMjAuNy0yLjcgMzEuMS0xLjIgNS40IC44IDEwLjUgMi40IDE0LjEgNyAzLjEgNCA0LjIgOC44IDQuNCAxMy43IC4zIDYuOSAuMiAxMy45IC4zIDIwLjggMCAuNC0uMSAuNy0uMiAxLjItLjQgMC0uOCAwLTEuMS0uMS04LjgtMi4xLTE3LjctMy42LTI2LjgtNC4xLTkuNS0uNS0xOC45IC4xLTI3LjkgMy4yLTEwLjggMy44LTE5LjUgMTAuMy0yNC42IDIwLjgtNC4xIDguMy00LjYgMTctMy40IDI1Ljh6TTk4LjcgMTA2LjlsMCAxNzUuM2MwIC44IDAgMS43IC4xIDIuNSAuMiAyLjUgMS43IDQuMSA0LjEgNC4yIDUuOSAuMSAxMS44IC4xIDE3LjcgMCAyLjUgMCA0LTEuNyA0LjEtNC4xIC4xLS44IC4xLTEuNyAuMS0yLjVsMC02MC43Yy45IC43IDEuNCAxLjIgMS45IDEuNiAxNSAxMi41IDMyLjIgMTYuNiA1MS4xIDEyLjkgMTcuMS0zLjQgMjguOS0xMy45IDM2LjctMjkuMiA1LjgtMTEuNiA4LjMtMjQuMSA4LjctMzcgLjUtMTQuMy0xLTI4LjQtNi44LTQxLjctNy4xLTE2LjQtMTguOS0yNy4zLTM2LjctMzAuOS0yLjctLjYtNS41LS44LTguMi0xLjJsLTcgMGMtMS4yIC4yLTIuNCAuMy0zLjYgLjUtMTEuNyAxLjQtMjIuMyA1LjgtMzEuOCAxMi43LTIgMS40LTMuOSAzLTUuOSA0LjUtLjEtLjUtLjMtLjgtLjQtMS4yLS40LTIuMy0uNy00LjYtMS4xLTYuOS0uNi0zLjktMi41LTUuNS02LjQtNS42bC05LjcgMGMtNS45LS4xLTYuOSAxLTYuOSA2Ljh6TTQ5My42IDMzOWMtMi43LS43LTUuMSAwLTcuNiAxLTQzLjkgMTguNC04OS41IDMwLjItMTM2LjggMzUuOC0xNC41IDEuNy0yOS4xIDIuOC00My43IDMuMi0yNi42IC43LTUzLjItLjgtNzkuNi00LjMtMTcuOC0yLjQtMzUuNS01LjctNTMtOS45LTM3LTguOS03Mi43LTIxLjctMTA2LjctMzguOC04LjgtNC40LTE3LjQtOS4zLTI2LjEtMTQtMy44LTIuMS02LjItMS41LTguMiAyLjFsMCAxLjdjMS4yIDEuNiAyLjIgMy40IDMuNyA0LjggMzYgMzIuMiA3Ni42IDU2LjUgMTIyIDcyLjkgMjEuOSA3LjkgNDQuNCAxMy43IDY3LjMgMTcuNSAxNCAyLjMgMjggMy44IDQyLjIgNC41IDMgLjEgNiAuMiA5IC40IC43IDAgMS40IC4yIDIuMSAuM2wxNy43IDBjLjctLjEgMS40LS4zIDIuMS0uMyAxNC45LS40IDI5LjgtMS44IDQ0LjYtNCAyMS40LTMuMiA0Mi40LTguMSA2Mi45LTE0LjcgMjkuNi05LjYgNTcuNy0yMi40IDgzLjQtNDAuMSAyLjgtMS45IDUuNy0zLjggOC02LjIgNC4zLTQuNCAyLjMtMTAuNC0zLjMtMTEuOXpNNTQ0IDMxMS4zYy0uOC00LjItNC01LjgtNy42LTctNS43LTEuOS0xMS42LTIuOC0xNy42LTMuMy0xMS0uOS0yMi0uNC0zMi44IDEuNi0xMiAyLjItMjMuNCA2LjEtMzMuNSAxMy4xLTEuMiAuOC0yLjQgMS44LTMuMSAzLS42IC45LS43IDIuMy0uNSAzLjQgLjMgMS4zIDEuNyAxLjYgMyAxLjUgLjYgMCAxLjIgMCAxLjgtLjFsMTkuNS0yLjFjOS42LS45IDE5LjItMS41IDI4LjgtLjggNC4xIC4zIDguMSAxLjIgMTIgMi4yIDQuMyAxLjEgNi4yIDQuNCA2LjQgOC43IC4zIDYuNy0xLjIgMTMuMS0yLjkgMTkuNS0zLjUgMTIuOS04LjMgMjUuNC0xMy4zIDM3LjgtLjMgLjgtLjcgMS43LS44IDIuNS0uNCAyLjUgMSA0IDMuNCAzLjUgMS40LS4zIDMtMS4xIDQtMi4xIDMuNy0zLjYgNy41LTcuMiAxMC42LTExLjIgMTAuNy0xMy44IDE3LTI5LjYgMjAuNy00Ni42IC43LTMgMS4yLTYuMSAxLjctOS4xIC4yLTQuNyAuMi05LjYgLjItMTQuNXoiXQogICAgfTsKICAgIGZhRWJheSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlYmF5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0ZjQiLCAiTTYwNi41IDE4OS41bC01NC44IDEwOS45LTU0LjktMTA5LjktMzcuNSAwIDEwLjkgMjAuNmMtMTEuNS0xOS0zNS45LTI2LTYzLjMtMjYtMzEuOCAwLTY3LjkgOC43LTcxLjUgNDMuMWwzMy43IDBjMS40LTEzLjggMTUuNy0yMS44IDM1LTIxLjggMjYgMCA0MSA5LjYgNDEgMzNsMCAzLjRjLTEyLjcgMC0yOCAuMS00MS43IC40LTQyLjQgLjktNjkuNiAxMC03Ni43IDM0LjQgMS01LjIgMS41LTEwLjYgMS41LTE2LjIgMC01Mi4xLTM5LjctNzYuMi03NS40LTc2LjItMjEuMyAwLTQzIDUuNS01OC43IDI0LjJsMC04MC42LTMyLjEgMCAwIDE2OS41YzAgMTAuMy0uNiAyMi45LTEuMSAzMy4xbDMxLjUgMGMuNy02LjMgMS4xLTEyLjkgMS4xLTE5LjUgMTMuNiAxNi42IDM1LjQgMjQuOSA1OC43IDI0LjkgMzYuOSAwIDY0LjktMjEuOSA3My4zLTU0LjItLjUgMi44LS43IDUuOC0uNyA5IDAgMjQuMSAyMS4xIDQ1IDYwLjYgNDUgMjYuNiAwIDQ1LjgtNS43IDYxLjktMjUuNSAwIDYuNiAuMyAxMy4zIDEuMSAyMC4ybDI5LjggMGMtLjctOC4yLTEtMTcuNS0xLTI2LjhsMC02NS42YzAtOS4zLTEuNy0xNy4yLTQuOC0yMy44bDYxLjUgMTE2LjEtMjguNSA1NC4xIDM1LjkgMCA5OS4yLTE5NC44LTM0IDB6TTI0NC4yIDMxMy44Yy0yOS42IDAtNTAuMi0yMS41LTUwLjItNTMuOCAwLTMyLjQgMjAuNi01My44IDUwLjItNTMuOCAyOS44IDAgNTAuMiAyMS40IDUwLjIgNTMuOCAwIDMyLjMtMjAuNCA1My44LTUwLjIgNTMuOHptMjAwLjktNDcuM2MwIDMwLTE3LjkgNDguNC01MS42IDQ4LjQtMjUuMSAwLTM1LTEzLjQtMzUtMjUuOCAwLTE5LjEgMTguMS0yNC40IDQ3LjItMjUuMyAxMy4xLS41IDI3LjYtLjYgMzkuNC0uNmwwIDMuM3pNMzMuMiAyNjguMWwxMjguOCAwIDAtOC41YzAtNTEuNy0zMy4xLTc1LjQtNzguNC03NS40LTU2LjggMC04MyAzMC44LTgzIDc3LjYgMCA0Mi41IDI1LjMgNzQgODIuNSA3NCAzMS40IDAgNjgtMTEuNyA3NC40LTQ2LjFsLTMzLjEgMGMtMTIgMzUuOC04Ny43IDM2LjctOTEuMi0yMS42em05NS0yMS40bC05NC40IDBjNi45LTU2LjYgOTIuMS01NC43IDk0LjQgMHoiXQogICAgfTsKICAgIGZhQ29udGFvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNvbnRhbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjZkIiwgIk00NS40IDMwNWMxNC40IDY3LjEgMjYuNCAxMjkgNjguMiAxNzVMMzQgNDgwYy0xOC43IDAtMzQtMTUuMi0zNC0zNEwwIDY2QzAgNDcuMyAxNS4yIDMyIDM0IDMybDU3LjcgMGMtMTMuOCAxMi42LTI2LjEgMjcuMi0zNi45IDQzLjYtNDUuNCA3MC0yNyAxNDYuOC05LjQgMjI5LjR6TTQ3OCAzMmwtOTAuMiAwYzIxLjQgMjEuNCAzOS4yIDQ5LjUgNTIuNyA4NC4xTDMwMy40IDE0NS40Yy0xNC45LTI5LTM3LjgtNTMuMy04Mi42LTQzLjktMjQuNiA1LjMtNDEgMTkuMy00OC4zIDM0LjYtOC44IDE4LjctMTMuMiAzOS44IDguMiAxNDAuMyAyMS4xIDEwMC4yIDMzLjcgMTE3LjcgNDkuNSAxMzEuMiAxMi45IDExLjEgMzMuNCAxNyA1OC4zIDExLjcgNDQuNS05LjQgNTUuNy00MC43IDU3LjQtNzMuMmwxMzcuNC0yOS42YzMuMiA3MS41LTE4LjcgMTI1LjItNTcuNCAxNjMuNmw1Mi4xIDBjMTguNyAwIDM0LTE1LjIgMzQtMzRMNTEyIDY2YzAtMTguOC0xNS4yLTM0LTM0LTM0eiJdCiAgICB9OwogICAgZmFFbGxvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVsbG8iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjVmMSIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek0zOTkuOCAyOTMuMkMzODMuMyAzNTguNSAzMjMuOCA0MDQuOCAyNTYgNDA0LjhTMTI4LjcgMzU4LjUgMTEyLjIgMjkzLjJjLTEuNi03LjQgMi41LTE1LjcgOS45LTE3LjRzMTUuNyAyLjUgMTcuNCA5LjljMTQgNTIuOSA2MiA5MC4xIDExNi42IDkwLjFzMTAyLjUtMzcuMiAxMTYuNi05MC4xYzEuNy03LjQgOS45LTEyLjQgMTcuNC05LjkgNy40IDEuNyAxMi40IDkuOSA5LjkgMTcuNHoiXQogICAgfTsKICAgIGZhU2lzdHJpeCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzaXN0cml4IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZWUiLCAiTTQ0OCA0NDlMMzAxLjIgMzAwLjJjMjAtMjcuOSAzMS45LTYyLjIgMzEuOS05OS4yIDAtOTMuMS03NC43LTE2OC45LTE2Ni41LTE2OC45LTkxLjktLjEtMTY2LjYgNzUuNy0xNjYuNiAxNjguOFM3NC43IDM2OS44IDE2Ni41IDM2OS44YzM5LjggMCA3Ni4zLTE0LjIgMTA1LTM3LjlMNDE3LjUgNDgwIDQ0OCA0NDl6TTE2Ni41IDMzMC44Yy03MC42IDAtMTI4LjEtNTguMy0xMjguMS0xMjkuOVM5NS45IDcxIDE2Ni41IDcxIDI5NC42IDEyOS4zIDI5NC42IDIwMC45IDIzNy4yIDMzMC44IDE2Ni41IDMzMC44eiJdCiAgICB9OwogICAgZmFQZXJpc2NvcGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGVyaXNjb3BlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZGEiLCAiTTM3MCA2My42Yy0zOC42LTQxLTg5LjUtNjMuNi0xNDMuNC02My42LTExNC43IDAtMjA4LjEgOTYuMi0yMDguMSAyMTQuNCAwIDc1LjEgNTcuOCAxNTkuOCA4Mi43IDE5Mi43IDM2LjYgNDguNCA5MS40IDEwNC45IDEyNS40IDEwNC45IDQxLjYgMCAxMTIuOS05NC4yIDEyMC45LTEwNSAyNC42LTMzLjEgODItMTE4LjMgODItMTkyLjYgMC01Ni41LTIxLjEtMTEwLjEtNTkuNS0xNTAuOHpNMjI2LjYgNDkzLjljLTQyLjUgMC0xOTAtMTY3LjMtMTkwLTI3OS40IDAtMTA3LjQgODMuOS0xOTYuMyAxOTAtMTk2LjMgMTAwLjggMCAxODQuNyA4OSAxODQuNyAxOTYuMyAuMSAxMTIuMS0xNDcuNCAyNzkuNC0xODQuNyAyNzkuNHpNMzM4IDIwNi44YzAgNTkuMS01MS4xIDEwOS43LTExMC44IDEwOS43LTEwMC42IDAtMTUwLjctMTA4LjItOTIuOS0xODEuOGwwIC40YzAgMjQuNSAyMC4xIDQ0LjQgNDQuOCA0NC40czQ0LjgtMTkuOSA0NC44LTQ0LjRjMC0xOC4yLTExLjEtMzMuOC0yNi45LTQwLjcgNzYuNi0xOS4yIDE0MSAzOS4zIDE0MSAxMTIuNHoiXQogICAgfTsKICAgIGZhRXhwZWRpdGVkc3NsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImV4cGVkaXRlZHNzbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjNlIiwgIk0yNTYgNDMuNGEyMTIuNiAyMTIuNiAwIDEgMCAwIDQyNS4yIDIxMi42IDIxMi42IDAgMSAwIDAtNDI1LjJ6TTE1OC42IDE3Ni4zYzAtNTMuNyA0My43LTk3LjQgOTcuNC05Ny40czk3LjQgNDMuNyA5Ny40IDk3LjRsMCAyNi42YzAgNS0zLjkgOC45LTguOSA4LjlsLTE3LjcgMGMtNSAwLTguOS0zLjktOC45LTguOWwwLTI2LjZjMC04Mi4xLTEyNC04Mi4xLTEyNCAwbDAgMjYuNmMwIDUtMy45IDguOS04LjkgOC45bC0xNy43IDBjLTUgMC04LjktMy45LTguOS04LjlsMC0yNi42IC4yIDB6TTM5Ny43IDM4MGMwIDkuNy04IDE3LjctMTcuNyAxNy43bC0yNDggMGMtOS43IDAtMTcuNy04LTE3LjctMTcuN2wwLTE0MS43YzAtOS43IDgtMTcuNyAxNy43LTE3LjdsMjQ4IDBjOS43IDAgMTcuNyA4IDE3LjcgMTcuN2wwIDE0MS43em0tMjQ4LTEzNy4zbDAgMTMyLjljMCAyLjUtMS45IDQuNC00LjQgNC40bC04LjkgMGMtMi41IDAtNC40LTEuOS00LjQtNC40bDAtMTMyLjljMC0yLjUgMS45LTQuNCA0LjQtNC40bDguOSAwYzIuNSAwIDQuNCAxLjkgNC40IDQuNHptMTQxLjcgNDguN2MwIDEzLTcuMiAyNC40LTE3LjcgMzAuNGwwIDMxLjZjMCA1LTMuOSA4LjktOC45IDguOWwtMTcuNyAwYy01IDAtOC45LTMuOS04LjktOC45bDAtMzEuNmMtMTAuNS02LjEtMTcuNy0xNy40LTE3LjctMzAuNCAwLTE5LjcgMTUuOC0zNS40IDM1LjQtMzUuNHMzNS41IDE1LjggMzUuNSAzNS40ek0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6bTAgMTcuN2EyMzAuMyAyMzAuMyAwIDEgMSAwIDQ2MC42IDIzMC4zIDIzMC4zIDAgMSAxIDAtNDYwLjZ6Il0KICAgIH07CiAgICBmYU5hcHN0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibmFwc3RlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2QyIiwgIk0zMDYuMyAzNzMuNmMtMTQuMiAxMy42LTMxLjMgMjQuMS01MC40IDMwLjUtMTktNi40LTM2LjItMTYuOS01MC4zLTMwLjVsMTAwLjcgMHptNDQtMTk5LjZjMjAtMTYuOSA0My42LTI5LjIgNjkuNi0zNi4ybDAgMTYxLjJjMCAyMTkuNC0zMjggMjE3LjYtMzI4IC4zbDAtMTYxLjZjMjUuOSA2LjkgNDkuNiAxOS42IDY5LjUgMzYuNCA1Ni44LTQwIDEzMi41LTM5LjkgMTg4LjktLjF6TTE0MS41IDExNS41YzY0LjQtNjAgMTY0LjMtNjAuMSAyMjguOS0uMi03LjEgMy41LTEzLjkgNy4zLTIwLjYgMTEuNS01OC43LTMwLjUtMTI5LjItMzAuNC0xODcuOSAuMS02LjMtNC0xMy45LTguMi0yMC40LTExLjR6TTUxLjggOTMuMmwwIDY5LjNjLTU4LjQgMzYuNS01OC40IDEyMS4xIC4xIDE1OC4zIDI2LjQgMjQ1LjEgMzgxLjcgMjQwLjMgNDA3LjYgMS41bC4zLTEuN2M1OC43LTM2LjMgNTguOS0xMjEuNyAuMi0xNTguMmwwLTY5LjJjLTE3LjMgLjUtMzQgMy01MC4xIDcuNC04Mi05MS41LTIyNS41LTkxLjUtMzA3LjUgLjEtMTYuMy00LjQtMzMuMS03LTUwLjYtNy41ek0yNjcuMiAzNTJzMzYtLjMgNjEuMy0xLjVjMTAuMi0uNSAyMS4xLTQgMjUuNS02LjUgMjYuMy0xNS4xIDI1LjQtMzkuMiAyNi4yLTQ3LjQtNzkuNS0uNi05OS45LTMuOS0xMTMgNTUuNHpNMTMxLjcgMjk2LjdjLjggOC4yLS4xIDMyLjMgMjYuMiA0Ny40IDQuNCAyLjUgMTUuMiA2IDI1LjUgNi41IDI1LjMgMS4xIDYxLjMgMS41IDYxLjMgMS41LTEzLjItNTkuNC0zMy43LTU2LjEtMTEzLTU1LjR6TTMwMC44IDQyMC4xYy0zLjItNS4zLTYuOS03LjMtNi45LTcuMy0yNC44IDcuMy01Mi4yIDYuOS03NS45IDAgMCAwLTIuOSAxLjUtNi40IDYuNi0yLjggNC4xLTMuNyA5LjYtMy43IDkuNiAyOS4xIDE3LjYgNjcuMSAxNy42IDk2LjIgMC0uMS0uMS0uMy00LTMuMy04Ljl6Il0KICAgIH07CiAgICBmYURlbGljaW91cyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkZWxpY2lvdXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFhNSIsICJNNDQ2LjYgNjhjLS40LTEuNS0uOS0zLTEuNC00LjUtLjktMi41LTItNC44LTMuMy03LjEtMS40LTIuNC0zLTQuOC00LjctNi45LTIuMS0yLjUtNC40LTQuOC02LjktNi44LTEuMS0uOS0yLjItMS43LTMuMy0yLjUtMS4zLS45LTIuNi0xLjctNC0yLjQtMS44LTEtMy42LTEuOC01LjUtMi41LTEuNy0uNy0zLjUtMS4zLTUuNC0xLjctMy44LTEtNy45LTEuNS0xMi0xLjVsLTM1MiAwQzIxLjYgMzIgLjEgNTMuNSAuMSA4MGwwIDM1MmMwIDQuMSAuNSA4LjIgMS41IDEyIDIgNy43IDUuOCAxNC42IDExIDIwLjMgMSAxLjEgMi4xIDIuMiAzLjMgMy4zIDUuNyA1LjIgMTIuNiA5IDIwLjMgMTEgMy44IDEgNy45IDEuNSAxMiAxLjVsMzUyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTIuMWMtLjEtNC4xLS42LTguMi0xLjYtMTJ6TTQxNi4xIDQzMmMwIDguOC03LjIgMTYtMTYgMTZsLTE3NiAwIDAtMTkyLTE5MiAwIDAtMTc2YzAtOC44IDcuMi0xNiAxNi0xNmwxNzYgMCAwIDE5MiAxOTIgMCAwIDE3NnoiXQogICAgfTsKICAgIGZhR3VpbGRlZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJndWlsZGVkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwN2UiLCAiTTQ0My45IDY0TDUgNjRjMCAxMDMuMyAyMi4yIDE4MC4xIDQzLjQgMjIyLjQgNjQuMSAxMjcuOCAxNzYgMTYxLjYgMTc3LjMgMTYxLjYgNTUuNy0yMC41IDEwNC41LTU2LjMgMTQwLjYtMTAzLjUgMjUuOS0zMy45IDUzLjEtODcuMiA2NS45LTE0NS44bC0yNTkuOSAwYzQuMSAzNi40IDIyLjIgNjcuOSA0NS4xIDg2LjlsODguNiAwYy0xNyAyOC4yLTQ4LjIgNTQuNC04MC41IDY5LjUtMzEuMi0xMy4zLTY5LjEtNDYuNS05Ni41LTk4LjQtMjYuNy01My44LTI3LjEtMTA1LjktMjcuMS0xMDUuOWwzMzYuMSAwYzQtMjguOCA1LjktNTcuOSA1LjktODYuOXoiXQogICAgfTsKICAgIGZhWGJveCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ4Ym94IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0MTIiLCAiTTM2OS45IDMxOC4yYzQ0LjMgNTQuMyA2NC43IDk4LjggNTQuNCAxMTguNy03LjkgMTUuMS01Ni43IDQ0LjYtOTIuNiA1NS45LTI5LjYgOS4zLTY4LjQgMTMuMy0xMDAuNCAxMC4yLTM4LjItMy43LTc2LjktMTcuNC0xMTAuMS0zOS0yNy45LTE4LjItMzQuMi0yNS43LTM0LjItNDAuNiAwLTI5LjkgMzIuOS04Mi4zIDg5LjItMTQyLjEgMzItMzMuOSA3Ni41LTczLjcgODEuNC03Mi42IDkuNCAyLjEgODQuMyA3NS4xIDExMi4zIDEwOS41ek0xODguNiAxNDMuOGMtMjkuNy0yNi45LTU4LjEtNTMuOS04Ni40LTYzLjQtMTUuMi01LjEtMTYuMy00LjgtMjguNyA4LjEtMjkuMiAzMC40LTUzLjUgNzkuNy02MC4zIDEyMi40LTUuNCAzNC4yLTYuMSA0My44LTQuMiA2MC41IDUuNiA1MC41IDE3LjMgODUuNCA0MC41IDEyMC45IDkuNSAxNC42IDEyLjEgMTcuMyA5LjMgOS45LTQuMi0xMS0uMy0zNy41IDkuNS02NCAxNC4zLTM5IDUzLjktMTEyLjkgMTIwLjMtMTk0LjR6bTMxMS42IDYzLjVjLTE2LjktODAtNjcuNS0xMzAuMy03NC42LTEzMC4zLTcuMyAwLTI0LjIgNi41LTM2IDEzLjktMjMuMyAxNC41LTQxIDMxLjQtNjQuMyA1Mi44IDQyLjQgNTMuMyAxMDIuMiAxMzkuNCAxMjIuOSAyMDIuMyA2LjggMjAuNyA5LjcgNDEuMSA3LjQgNTIuMy0xLjcgOC41LTEuNyA4LjUgMS40IDQuNiA2LjEtNy43IDE5LjktMzEuMyAyNS40LTQzLjUgNy40LTE2LjIgMTUtNDAuMiAxOC42LTU4LjcgNC4zLTIyLjUgMy45LTcwLjgtLjgtOTMuNHpNMTQxLjMgNDNjNDcuNy0yLjUgMTA5LjcgMzQuNSAxMTQuMyAzNS40IC43IC4xIDEwLjQtNC4yIDIxLjYtOS43IDYzLjktMzEuMSA5NC0yNS44IDEwNy40LTI1LjItNjMuOS0zOS4zLTE1Mi43LTUwLTIzMy45LTExLjctMjMuNCAxMS4xLTI0IDExLjktOS40IDExLjJ6Il0KICAgIH07CiAgICBmYVVudGFwcGQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidW50YXBwZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDA1IiwgIk00MDEuNSA0OS45QzMyMS43IDIxMCAzMTYuOSAyMDIuNCAzMTMuNiAyMjMuMWwtNS4yIDMyLjhjLTEuOSAxMi02LjYgMjMuNS0xMy43IDMzLjRMMTQ1LjggNDk3LjFjLTcuNiAxMC42LTIwLjQgMTYuMi0zMy40IDE0LjYtNDAuMy01LTc3LjgtMzIuMi05NS4zLTY4LjUtNS43LTExLjgtNC41LTI1LjggMy4xLTM2LjRMMTY5LjEgMTk4LjljNy4xLTkuOSAxNi40LTE4IDI3LjItMjMuN2wyOS4zLTE1LjVjMTguNS05LjggOS43LTExLjkgMTM1LjYtMTM4LjkgMS00LjggMS03LjMgMy42LTggMy0uNyA2LjYtMSA2LjMtNC42bC0uNC00LjZjLS4yLTEuOSAxLjMtMy42IDMuMi0zLjYgNC41LS4xIDEzLjIgMS4yIDI1LjYgMTAgMTIuMyA4LjkgMTYuNCAxNi44IDE3LjcgMjEuMSAuNiAxLjgtLjYgMy43LTIuNCA0LjJsLTQuNSAxLjFjLTMuNCAuOS0yLjUgNC40LTIuMyA3LjQgLjEgMi44LTIuMyAzLjYtNi41IDYuMXpNMjMwLjMgMzYuNGMzLjQgLjkgMi41IDQuNCAyLjMgNy40LS4yIDIuNyAyLjEgMy41IDYuNCA2IDcuOSAxNS45IDE1LjMgMzAuNSAyMi4yIDQ0IC43IDEuMyAyLjMgMS41IDMuMyAuNSAxMS4yLTEyIDI0LjYtMjYuMiA0MC41LTQyLjYgMS4zLTEuNCAxLjQtMy41IC4xLTQuOS04LTguMi0xNi41LTE2LjktMjUuNi0yNi4xLTEtNC43LTEtNy4zLTMuNi04LTMtLjgtNi42LTEtNi4zLTQuNiAuMy0zLjMgMS40LTguMS0yLjgtOC4yLTQuNS0uMS0xMy4yIDEuMS0yNS42IDEwLTEyLjMgOC45LTE2LjQgMTYuOC0xNy43IDIxLjEtMS40IDQuMiAzLjYgNC42IDYuOCA1LjR6TTYyMC4yIDQwNi43TDQ3MS40IDE5OC44Yy0xMy4yLTE4LjUtMjYuNi0yMy40LTU2LjQtMzkuMS0xMS4yLTUuOS0xNC4yLTEwLjktMzAuNS0yOC45LTEtMS4xLTIuOS0uOS0zLjYgLjUtNDYuMyA4OC44LTQ3LjEgODIuOC00OSA5NC44LTEuNyAxMC43LTEuMyAyMCAuMyAyOS44IDEuOSAxMiA2LjYgMjMuNSAxMy43IDMzLjRMNDk0LjggNDk3LjJjNy42IDEwLjYgMjAuMiAxNi4yIDMzLjEgMTQuNyA0MC4zLTQuOSA3OC0zMiA5NS43LTY4LjYgNS40LTExLjkgNC4zLTI1LjktMy40LTM2LjZ6Il0KICAgIH07CiAgICBmYUdvb2dsZVBsdXNHID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2dsZS1wbHVzLWciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjBkNSIsICJNMzg2LjMgMjI4LjVjMS44IDkuNyAzLjEgMTkuNCAzLjEgMzIgMCAxMDkuOC03My42IDE4Ny41LTE4NC40IDE4Ny41LTEwNi4xIDAtMTkyLTg1LjktMTkyLTE5MlM5OC45IDY0IDIwNSA2NGM1MS45IDAgOTUuMSAxOC45IDEyOC42IDUwLjNsLTUyLjEgNTBjLTE0LjEtMTMuNi0zOS0yOS42LTc2LjUtMjkuNi02NS41IDAtMTE4LjkgNTQuMi0xMTguOSAxMjEuM1MxMzkuNSAzNzcuMyAyMDUgMzc3LjNjNzYgMCAxMDQuNS01NC43IDEwOS04Mi44bC0xMDkgMCAwLTY2IDE4MS4zIDAgMCAwem0xODUuNCA2LjRsMC01NS43LTU2IDAgMCA1NS43LTU1LjcgMCAwIDU2IDU1LjcgMCAwIDU1LjcgNTYgMCAwLTU1LjcgNTUuNyAwIDAtNTYtNTUuNyAweiJdCiAgICB9OwogICAgZmFHaXRodWJBbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2l0aHViLWFsdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTEzIiwgIk0yMDIuMSAzMjguN2MwIDIwLjktMTAuOSA1NS4xLTM2LjcgNTUuMXMtMzYuNy0zNC4yLTM2LjctNTUuMSAxMC45LTU1LjEgMzYuNy01NS4xIDM2LjcgMzQuMiAzNi43IDU1LjF6TTQ5NiAyNzguMmMwIDMxLjktMy4yIDY1LjctMTcuNSA5NS0zNy45IDc2LjYtMTQyLjEgNzQuOC0yMTYuNyA3NC44LTc1LjggMC0xODYuMiAyLjctMjI1LjYtNzQuOC0xNC42LTI5LTIwLjItNjMuMS0yMC4yLTk1IDAtNDEuOSAxMy45LTgxLjUgNDEuNS0xMTMuNi01LjItMTUuOC03LjctMzIuNC03LjctNDguOCAwLTIxLjUgNC45LTMyLjMgMTQuNi01MS44IDQ1LjMgMCA3NC4zIDkgMTA4LjggMzYgMjktNi45IDU4LjgtMTAgODguNy0xMCAyNyAwIDU0LjIgMi45IDgwLjQgOS4yIDM0LTI2LjcgNjMtMzUuMiAxMDcuOC0zNS4yIDkuOCAxOS41IDE0LjYgMzAuMyAxNC42IDUxLjggMCAxNi40LTIuNiAzMi43LTcuNyA0OC4yIDI3LjUgMzIuNCAzOSA3Mi4zIDM5IDExNC4yem0tNjQuMyA1MC41YzAtNDMuOS0yNi43LTgyLjYtNzMuNS04Mi42LTE4LjkgMC0zNyAzLjQtNTYgNi0xNC45IDIuMy0yOS44IDMuMi00NS4xIDMuMi0xNS4yIDAtMzAuMS0uOS00NS4xLTMuMi0xOC43LTIuNi0zNy02LTU2LTYtNDYuOCAwLTczLjUgMzguNy03My41IDgyLjYgMCA4Ny44IDgwLjQgMTAxLjMgMTUwLjQgMTAxLjNsNDguMiAwYzcwLjMgMCAxNTAuNi0xMy40IDE1MC42LTEwMS4zem0tODIuNi01NS4xYy0yNS44IDAtMzYuNyAzNC4yLTM2LjcgNTUuMXMxMC45IDU1LjEgMzYuNyA1NS4xIDM2LjctMzQuMiAzNi43LTU1LjEtMTAuOS01NS4xLTM2LjctNTUuMXoiXQogICAgfTsKICAgIGZhR2V0UG9ja2V0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdldC1wb2NrZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI2NSIsICJNNDA3LjYgNjRsLTM2NyAwQzE4LjUgNjQgMCA4Mi41IDAgMTA0LjZMMCAyMzkuOEMwIDM2NC41IDk5LjcgNDY0IDIyNC4yIDQ2NCAzNDguMiA0NjQgNDQ4IDM2NC41IDQ0OCAyMzkuOGwwLTEzNS4yQzQ0OCA4Mi4yIDQzMC4zIDY0IDQwNy42IDY0em0tMTYyIDI2OC41Yy0xMi40IDExLjgtMzEuNCAxMS4xLTQyLjQgMC0xMTMuNy0xMDguOS0xMTQuOS0xMDUuMS0xMTQuOS0xMjMuMiAwLTE2LjkgMTMuOC0zMC43IDMwLjctMzAuNyAxNyAwIDE2LjEgMy44IDEwNS4yIDg5LjMgOTAuNi04Ni45IDg4LjYtODkuMyAxMDUuNS04OS4zczMwLjcgMTMuOCAzMC43IDMwLjdjMCAxNy44LTIuOSAxNS43LTExNC44IDEyMy4yeiJdCiAgICB9OwogICAgZmFHbGlkZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnbGlkZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmE1IiwgIk0yNTIuOCAxNDguNmMwIDguOC0xLjYgMTcuNy0zLjQgMjYuNC01LjggMjcuOC0xMS42IDU1LjgtMTcuMyA4My42LTEuNCA2LjMtOC4zIDQuOS0xMy43IDQuOS0yMy44IDAtMzAuNS0yNi0zMC41LTQ1LjUgMC0yOS4zIDExLjItNjguMSAzOC41LTgzLjEgNC4zLTIuNSA5LjItNC4yIDE0LjEtNC4yIDExLjQgMCAxMi4zIDguMyAxMi4zIDE3Ljl6TTQ0OCA4MGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsMzUyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTM4NCAyNjdjMC01LjEtMjAuOC0zNy43LTI1LjUtMzkuNS0yLjItLjktNy4yLTIuMy05LjYtMi4zLTIzLjEgMC0zOC43IDEwLjUtNTguMiAyMS41bC0uNS0uNWM0LjMtMjkuNCAxNC42LTU3LjIgMTQuNi04Ny40IDAtNDQuNi0yMy44LTYyLjctNjcuNS02Mi43LTcxLjcgMC0xMDggNzAuOC0xMDggMTIzLjUgMCA1NC43IDMyIDg1IDg2LjMgODUgNy41IDAgNi45LS42IDYuOSAyLjMtMTAuNSA4MC4zLTU2LjUgODIuOS01Ni41IDU4LjkgMC0yNC40IDI4LTM2LjUgMjguMy0zOC0uMi03LjYtMjkuMy0xNy4yLTM2LjctMTcuMi0yMS4xIDAtMzIuNyAzMy0zMi43IDUwLjYgMCAzMi4zIDIwLjQgNTQuNyA1My4zIDU0LjcgNDguMiAwIDgzLjQtNDkuNyA5NC4zLTkxLjcgOS40LTM3LjcgNy0zOS40IDEyLjMtNDIuMSAyMC0xMC4xIDM1LjgtMTYuOCA1OC40LTE2LjggMTEuMSAwIDE5IDIuMyAzNi43IDUuMiAxLjggLjEgNC4xLTEuNyA0LjEtMy41eiJdCiAgICB9OwogICAgZmFCaXR5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJpdHkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM3YSIsICJNODYuNSA2Ny4yYzk1LjQtODkuMiAyNDYuMS05MS4yIDM0My4xIDMuOCAxNC4zIDE0LjEtNi40IDM3LjEtMjIuNCAyMS41LTg0LjgtODIuNC0yMTUuOC04MC4zLTI5OC45LTMuMi0xNi4zIDE1LjEtMzYuNS04LjMtMjEuOC0yMi4xem05OC45IDQxOC42YzE5LjMgNS43IDI5LjMtMjMuNiA3LjktMzAtMTEyLjItMzMuOS0xNzUuOC0xNDkuNy0xNDcuNS0yNjEgNS0xOS42LTI0LjktMjguMS0zMC4yLTcuMS0zMi4xIDEyNy40IDQxLjEgMjU5LjggMTY5LjggMjk4LjF6bTE0OC4xLTJjMTIxLjktNDAuMiAxOTIuOS0xNjYuOSAxNjQuNC0yOTEtNC41LTE5LjctMzQuOS0xMy44LTMwIDcuOSAyNC4yIDEwNy43LTM3LjEgMjE3LjktMTQzLjIgMjUzLjQtMjEuMiA3LTEwLjQgMzYgOC44IDI5Ljd6bS02Mi45LTc5bC4yLTcxLjhjMC04LjItNi42LTE0LjgtMTQuOC0xNC44cy0xNC44IDYuNy0xNC44IDE0LjhsLS4yIDcxLjhjMCA4LjIgNi42IDE0LjggMTQuOCAxNC44czE0LjgtNi42IDE0LjgtMTQuOHptNzEtMjY5YzIuMSA5MC45IDQuNyAxMzEuOS04NS41IDEzMi41LTkyLjUtLjctODYuOS00NC4zLTg1LjUtMTMyLjUgMC0yMS44LTMyLjUtMTkuNi0zMi41IDBsMCA3MS42YzAgNjkuMyA2MC43IDkwLjkgMTE4IDkwLjEgNTcuMyAuOCAxMTgtMjAuOCAxMTgtOTAuMWwwLTcxLjZjMC0xOS42LTMyLjUtMjEuOC0zMi41IDB6Il0KICAgIH07CiAgICBmYVdwZXhwbG9yZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid3BleHBsb3JlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMmRlIiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem00ODAgMGEyMjQgMjI0IDAgMSAwIC00NDggMCAyMjQgMjI0IDAgMSAwIDQ0OCAwek0xNjAuOSAxMjQuNmw4Ni45IDM3LjEtMzcuMSA4Ni45LTg2LjktMzcuMSAzNy4xLTg2Ljl6bTExMCAxNjkuMWw0Ni42IDk0LTE0LjYgMC01MC0xMDAtNDguOSAxMDAtMTQgMCA1MS4xLTEwNi45LTIyLjMtOS40IDYtMTQgNjguNiAyOS4xLTYgMTQuMy0xNi41LTcuMXpNMjU5LjEgMTc3LjRsNjguNiAyOS40LTI5LjQgNjguMy02OC4zLTI5LjEgMjkuMS02OC42em04MC4zIDQyLjlsNTQuNiAyMy4xLTIzLjQgNTQuMy01NC4zLTIzLjEgMjMuMS01NC4zeiJdCiAgICB9OwogICAgZmFNZWdhcG9ydCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtZWdhcG9ydCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWEzIiwgIk0yMjIuNSAyMDkuNmwwIDY2LjIgMzMuNSAzMy41IDMzLjMtMzMuMyAwLTY2LjQtMzMuNC0zMy40LTMzLjQgMzMuNHpNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MDEuMSA0MjIuNGwtMjYuMSAxOS4yLTI2LTE5LjIgMC02NS41LTMzLjQtMzMuNC0zMy40IDMzLjQgMCA2NS41LTI2LjIgMTkuMi0yNi4xLTE5LjIgMC02NS41LTMzLjQtMzMuNC0zMy41IDMzLjQgMCA2NS41LTI2LjEgMTkuMi0yNi4xLTE5LjIgMC04NyA1OS41LTU5LjUgMC04Ny45IDU5LjUtNTkuNSAwLTc1LjYgMjYuMS0xOS4yIDI2LjEgMTkuMiAwIDc1LjYgNTkuNSA1OS41IDAgODcuNiA1OS43IDU5LjcgMCA4Ny4xLS4xIDB6Il0KICAgIH07CiAgICBmYU1kYiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtZGIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjhjYSIsICJNMTcuNCAxNjAuNGwtMTAuNCAxOTEuNiA0My45IDAgNS42LTc5LjggMjcuOSA3OS44IDQ0LjcgMCAyNS41LTc3LjQgNC44IDc3LjQgNDUuNSAwLTEyLjgtMTkxLjYtNDUuNSAwLTQwLjcgMTE3LjMtNDIuMy0xMTcuMy00Ni4zIDB6bTI4MSAwbC00Ny45IDAgMCAxOTEuNiA0Ny45IDBzOTUgLjggOTQuMi05NS44Yy0uOC05NC4yLTk0LjItOTUuOC05NC4yLTk1LjhsMCAwem0tMS4yIDE0Ni41bDAtMTAyLjFzNDYgNC4zIDQ2LjggNTAuNi00Ni44IDUxLjUtNDYuOCA1MS41bDAgMHptMjM4LjMtNzQuMmM3LjItMTEuNCAxMC0yNSA4LTM4LjMtNS4zLTM1LjgtNTUuMS0zNC4zLTU1LjEtMzQuM2wtNTEuOSAwIDAgMTkxLjYgNDUuNSAwczg3IDQuOCA4Ny02My44YzAtNDMuMS0zMy41LTU1LjEtMzMuNS01NS4xbDAgMHptLTUxLjktMzEuOXMxMy42LTEuNiAxNiA5LjZjMS40IDYuNy00IDEyLTQgMTJsLTEyIDAgMC0yMS42em0tLjEgMTA5LjVsLjEtMjQuOSAwLTE4LjIgLjEgMHM0MS42LTQuNyA0MS4yIDIyLjRjLS4zIDI1LjctNDEuMyAyMC43LTQxLjMgMjAuN2wwIDB6Il0KICAgIH07CiAgICBmYVBhZ2U0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBhZ2U0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzZDciLCAiTTI1NiA1MDRDMTE5IDUwNCA4IDM5MyA4IDI1NlMxMTkgOCAyNTYgOGMyMC45IDAgNDEuMyAyLjYgNjAuNyA3LjVMNTAuMyAzOTIgMjU2IDM5MiAyNTYgNTA0em0wLTE0My42bDAtMjEzLjYtMTQ5LjQgMjEzLjYgMTQ5LjQgMHpNMzUyIDM5MmwwIDkyLjdjNDUuNy0xOS4yIDg0LjUtNTEuNyAxMTEuNC05Mi43TDM1MiAzOTJ6bTU3LjQtMTM4LjJsLTIxLjIgOC40IDIxLjIgOC4zIDAtMTYuN3ptLTIwLjMgNTQuNWMtNi43IDAtOCA2LjMtOCAxMi45bDAgNy43IDE2LjIgMCAwLTEwYzAtNS45LTIuMy0xMC42LTguMi0xMC42ek01MDQgMjU2YzAgMzcuMy04LjIgNzIuNy0yMyAxMDQuNGwtMTI5IDAgMC0zMzMuMUM0NDEuMyA2NC44IDUwNCAxNTMuMSA1MDQgMjU2ek0zNjguNCAxNDMuNmw2OC4yIDAgMC00Ny42LTEzLjkgMCAwIDMyLjYtMTMuOSAwIDAtMjkuNi0xMy45IDAgMCAyOS42LTEyLjcgMCAwLTMyLjYtMTMuOSAwIDAgNDcuNiAuMSAwem02OC4xIDE4NS4zbC0yNi41IDAgMC0xMWMwLTE1LjQtNS42LTI1LjItMjAuOS0yNS4yLTE1LjQgMC0yMC43IDEwLjYtMjAuNyAyNS45bDAgMjUuMyA2OC4yIDAgMC0xNS0uMSAwem0wLTEwM2wtNjguMiAyOS43IDAgMTIuNCA2OC4yIDI5LjUgMC0xNi42LTE0LjQtNS43IDAtMjYuNSAxNC40LTUuOSAwLTE2Ljl6bS00LjgtNjguNWwtMzUuNiAwIDAgMjYuNiAxMy45IDAgMC0xMi4yIDExIDBjOC42IDE1LjggMS4zIDM1LjMtMTguNiAzNS4zLTIyLjUgMC0yOC4zLTI1LjMtMTUuNS0zNy43bC0xMS42LTEwLjZjLTE2LjIgMTcuNS0xMi4yIDYzLjkgMjcuMSA2My45IDM0IDAgNDQuNy0zNS45IDI5LjMtNjUuM3oiXQogICAgfTsKICAgIGZhVGhlUmVkWWV0aSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0aGUtcmVkLXlldGkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjY5ZCIsICJNNDg4LjcgMjQxLjdsMjAuNyA3LjFjLTkuNi0yMy45LTIzLjktMzctMzEuNy00NC44bDcuMS0xOC4yYy4yIDAgMTIuMy0yNy44LTIuNS0zMC43LS42LTExLjMtNi42LTI3LTE4LjQtMjctNy42LTEwLjYtMTcuNy0xMi4zLTMwLjctNS45LTkuMSA0LjQtMTcuNiAxMC0yNS4zIDE2LjUtNS4zLTYuNC0zIC40LTMtMjkuOC0zNy4xLTI0LjMtNDUuNC0xMS43LTc0LjggM2wuNSAuNWMtMjItNy43LTQ1LjEtMTIuMi02OC40LTEzLjMtNS41LTguNy0xOC42LTE5LjEtMjUuMS0yNS4xbDI0LjggNy4xYy01LjUtNS41LTI2LjgtMTIuOS0zNC4yLTE1LjIgMTguMi00LjEgMjkuOC0yMC44IDQyLjUtMzMtMzQuOS0xMC4xLTY3LjktNS45LTk3LjkgMTEuOGwxMi00NC4yLTEuOC0uNWMtMzEuNiAyNC4yLTMzIDQxLjktMzMuNyA0NS41LS45LTIuNC02LjMtMTkuNi0xNS4yLTI3LTMuMyA4LjEtMy41IDE3LjEtLjUgMjUuMyAzIDguNCA1LjkgMTQuOCA4LjQgMTguOS0xNi0zLjMtMjguMy00LjktNDkuMiAwbC0zLjcgMCAzMyAxNC4zYy0yMC4yIDE4LjktMzYuMSA0MS45LTQ2LjcgNjcuNGwtMS43IDguNCAxLjcgMS43IDcuNi00LjdjLTMuMyAxMS42LTUuMyAxOS40LTYuNiAyNS44LTEwLjkgMTIuMi0yMC4yIDI1LjgtMjcuOCA0MC4zLTE1IDEtMzEuOCAxMC44LTQwLjMgMTQuM2wzIDMuNCAyOC44IDFjLS41IDEtLjcgMi4yLTEuMiAzLjItNy4zIDYuNC0zOS44IDM3LjctMzMgODAuN2wyMC4yLTIyLjRjLjUgMS43IC43IDMuNCAxLjIgNS4yIDAgMjUuNSAuNCA4OS42IDY0LjkgMTUwLjUgNDMuNiA0MCA5NiA2MC4yIDE1Ny41IDYwLjIgMTIxLjcgMCAyMjMtODcuMyAyMjMtMjExLjUgNi44LTkuNy0xLjIgMyAxNi43LTI1LjFsMTMgMTQuMyAyLjUtLjVjLTEuOC0xMS43LTQuOC0yMy4xLTguOS0zNC4yLTEuNS00LjgtMy44LTkuMy02LjgtMTMuM2wwIDB6TTM5OC41IDExMS4ybC0uNSAyMS45YzUuNSAxOC4xIDE2LjkgMTcuMiAyMi40IDE3LjJsLTMuNC00LjcgMjIuNC01LjRjLTkgLjUtMTggLjUtMjcgMCAxMi44LTIuMSAzMy4zLTI5IDQzLTExLjMgMy40IDcuNiA2LjQgMTcuMiA5LjMgMjcuOGwxLjctNS45Yy0xLjMtNS0xLjgtMTAuMS0xLjctMTUuMiA1LjQgLjUgOC44IDMuNCA5LjMgMTAuMSAuNSA2LjQgMS43IDE0LjggMy40IDI1LjNsNC43LTExLjNjNC42IDAgNC41LTMuNi0yLjUgMjAuNy0yMC45LTguNy0zNS4xLTguNC00Ni41LTguNGwxOC4yLTE2Yy0yNS4zIDguMi0zMyAxMC44LTU0LjggMjAuOS0xLjEtNS40LTUtMTMuNS0xNi0xOS45LTMuMiAzLjgtMi44IC45LS43IDE0LjhsLTIuNSAwYy0xLjItOC4yLTQuMS0xNi04LjQtMjMuMWw0LjItMy40YzguNC03LjEgMTEuOC0xNC4zIDEwLjYtMjEuOS0uNS02LjQtNS40LTEzLjUtMTMuNS0yMC43IDUuNi0zLjQgMTUuMi0uNCAyOC4zIDguNXptLTM5LjYtMTAuMWMyLjcgMS45IDExLjQgNS40IDE4LjkgMTcuMiA0LjIgOC40IDQgOS44IDMuNCAxMS4xLS41IDIuNC0uNSA0LjMtMyA3LjEtMS43IDIuNS01LjQgNC43LTExLjggNy42LTcuNi0xMy0xNi41LTIzLjYtMjcuOC0zMS4ybDIwLjMtMTEuOHptLTI2Ny40IDQybDEuMi0xLjdjMS4yLTIuOSA0LjItNy42IDkuMy0xNS4ybDIuNS0zLjQtMTMgMTIuMyA1LjQtNC43LTEwLjEgOS4zLTQuMiAxLjJjMTIuMy0yNC4xIDIzLjEtNDEuMyAzMi41LTUwLjIgOS4zLTkuMyAxNi0xNiAyMC4yLTE5LjRsLTYuNCAxLjJjLTExLjMtNC4yLTE5LjQtNy4xLTI0LjgtOC40IDIuNS0uNSAzLjctLjUgMy4yLS41IDEwLjMgMCAxNy41IC41IDIwLjkgMS4yIDUuMiAxLjcgMTAuNiAyLjUgMTYgMi41bC41LTEuNy04LjQtMzUuOCAxMy41IDI5YzIuOC00LjQgNC44LTkuMiA1LjktMTQuMyAxLjctNi40IDUuNC0xMyAxMC4xLTE5LjRzNy42LTEwLjYgOS4zLTExLjNjLTIuNiA4LjMtNC43IDE2LjgtNi40IDI1LjNsLTEuNyA3LjEtLjUgNC43IDIuNSAyLjVjMjEuOS0xMy41IDQ1LjUtMTkuNCA3MS4zLTE4LjlsMjEuMSAuNWMtMTEuOCAxMy41LTI3LjggMjEuOS00OC41IDI0LjgtNy43IDEuNC0xNS42IDIuNC0yMy40IDIuOWwtLjItLjUtMi41LTEuMmMtNC44LTEtOS43LS4zLTE0IDItMi41LS4yLTQuOS0uNS03LjEtLjdsLTIuNSAxLjcgLjUgMS4yYzIgLjIgMy45IC41IDYuMiAuN2wtMiAzLjQgMy40LS41LTEwLjYgMTEuM2MtNC4yIDMtNS40IDYuNC00LjIgOS4zbDUuNC0zLjQgMS4yIDBjNi4xLTguMiAxNS4yLTEzLjYgMjUuMy0xNS4ybDAtM2M2LjQgLjUgMTMgMSAxOS40IDEuMiA2LjQgMCA4LjQgLjUgNS40IDEuMiA3LjIgNCAxNC4xIDguNiAyMC43IDEzLjUgMTMuNSAxMC4xIDIzLjYgMjEuOSAzMCAzNS40IDguOCAxOC4yIDEzLjUgMzcuMSAxMy41IDU2LjYgMCA5LjUtMSAxOS0zIDI4LjMtMy41IDE1LjktOC45IDMxLjMtMTYgNDZsMi41IC41YzE4LjItMTkuNyA0MS45LTE2IDQ5LjItMTZsLTYuNCA1LjkgMjIuNCAxNy43LTEuNyAzMC43Yy01LjQtMTIuMy0xNi41LTIxLjEtMzMtMjcuOCAxNi41IDE0LjggMjMuNiAyMS4xIDIxLjkgMjAuMi00LjgtMi44LTMuNS0xLjktMTAuOC0zLjcgNC4xIDQuMSAxNy41IDE4LjggMTguMiAyMC43bC4yIC4yLS4yIC4yYzAgMS44IDEuNi0xLjItMTQgMjIuOS03NS4yLTE1LjMtMTA2LjMtNDIuNy0xNDEuMi02My4ybDExLjggMS4yYy0xMS44LTE4LjUtMTUuNi0xNy43LTM4LjQtMjYuMWwxMC42LTguNGMtOC44LTMtMTguMi0zLTI4LjMgLjVsNy42LTEwLjYtMS4yLTEuN2MtMTQuOSA0LjMtMTkuOCA5LjItMjIuNiAxMS4zLTEuMS01LjUtMi44LTEyLjQtMTIuMy0yOC44bC0xLjIgMjctMTMuMi01YzEuNS0yNS4yIDUuNC01MC41IDEzLjItNzQuNnpNMzY4IDQ3My4xYy00OS45IDI1LTU2LjEgMjIuNC01OSAyMy45LTI5LjgtMTEuOC01MC45LTMxLjctNjMuNS01OC44bDMwIDE2LjVjLTkuOC05LjMtMTguMy0xNi41LTM4LjQtNDQuM2wxMS44IDIzLjEtMTcuNy03LjZjMTQuMiAyMS4xIDIzLjUgNTEuNyA2Ni42IDczLjUtMTIwLjggMjQuMi0xOTktNzIuMS0yMDAuOS03NC4zIDExLjEgOS4yIDIyLjkgMTcuNSAzNS40IDI0LjggMy40IDEuNyA3LjEgMi41IDEwLjEgMS4ybC0xNi0yMC43YzkuMiA0LjIgOS41IDQuNSA2OS4xIDI5LTQyLjUtMjAuNy03My44LTQwLjgtOTMuMi02MC4yLS41IDYuNC0xLjIgMTAuMS0xLjIgMTAuMSA4LjcgNy4zIDE1LjggMTYuNCAyMC43IDI2LjYtMzktMTguOS01Ny42LTQ3LjYtNzEuMy04Mi42IDQ5LjkgNTUuMSAxMTguOSAzNy41IDEyMC41IDM3LjEgMzQuOCAxNi40IDY5LjkgMjMuNiAxMTMuOSAxMC42IDMuMyAwIDIwLjMgMTcgMjUuMyAzOS4xbDQuMi0zLTIuNS0yMy42YzkgOSAyNC45IDIyLjYgMzQuNCAxMy0xNS42LTUuMy0yMy41LTkuNS0yOS41LTMxLjcgNC42IDQuMiA3LjYgOSAyNy44IDE1bDEuMi0xLjItMTAuNS0xNC4yYzExLjctNC44LTMuNSAxIDMyLTEwLjggNC4zIDM0LjMgOSA0OS4yIC43IDg5LjV6TTQ4My4zIDI1OC43bC0yLjUgLjUgMyA5LjNjLTMuNSA1LjktMjMuNyA0NC4zLTcxLjYgNzkuNy0zOS41IDI5LjgtNzYuNiAzOS4xLTgwLjkgNDAuM2wtNy42LTcuMS0xLjIgMyAxNC4zIDE2LTcuMS00LjcgMy40IDQuMi0xLjIgMC0yMS45LTEzLjUgOS4zIDI2LjYtMTktMjcuOS0xLjIgMi41IDcuNiAyOWMtNi4xLTguMi0yMS0zMi42LTU2LjgtMzkuNmwzMi41IDIxLjJjLTMxLjIgNC43LTYzIDIuNS05My4yLTYuNC00LjItMS4yLTguOS0yLjUtMTMuNS00LjJsMS4yLTMtNDQuOC0yMi40IDI2LjEgMjIuNGMtNTcuNyA5LjEtMTEzLTI1LjQtMTI2LjQtODMuNEwyOS4zIDI4NC44IDcgMzA3LjFjMTkuNS01Ny41IDI1LjYtNTcuOSA1MS40LTcwLjEtOS4xLTUuMy0xLjYtMy4zLTM4LjQtOS4zIDE1LjgtNS44IDMzLTE1LjQgNzMgNS4yIDEuMi0uNyAyLjQtMS4zIDMuNy0xLjcgLjYtMy4yIC40LS44IDEtMTEuOCAzLjkgMTAgMy42IDguNyAzIDkuM2wxLjcgLjVjMTIuNy02LjUgOC45LTQuNSAxNy04LjlsLTUuNCAxMy41IDIyLjMtNS44LTguNCA4LjQgMi41IDIuNWM0LjUtMS44IDMwLjMgMy40IDQwLjggMTZsLTIzLjYtMi41YzM5LjQgMjMgNTEuNSA1NCA1NS44IDY5LjZsMS43LTEuMmMtMi44LTIyLjMtMTIuNC0zMy45LTE2LTQwLjEgNC4yIDUgMzkuMiAzNC42IDExMC40IDQ2LTExLjMtLjUtMjMuMSA1LjQtMzQuOSAxOC45bDQ2LjctMjAuMi05LjMgMjEuOWM3LjYtMTAuMSAxNC44LTIzLjYgMjEuMi0zOS42bDAtLjUgMS4yLTMtMS4yIDE2YzEzLjUtNDEuOCAyNS4zLTc4LjUgMzUuNC0xMDkuN2wxMy41LTI3LjggMC0yLTUuNC00LjIgMTAuMSAwIDUuOSA0LjIgMi41LTEuMi0zLjQtMTYgMTIuMyAxOC45IDQxLjgtMjAuMi0xNC44IDEzIC41IDIuOSAxNy43LS41YzExLjEgLjQgMjIuMSAxLjggMzMgNC4ybC0yMy42IDIuNS0xLjIgMyAyNi42IDIzLjFjOS45IDkuOSAxOC45IDIwLjYgMjcgMzItMTEuMi0zLjMtMTAuMy0zLjQtMjEuMi0zLjRsMTIuMyAzMi41LTguOS0xMi44em0tNi4xLTcxLjNsLTMuOSAxMy0xNC4zLTExLjggMTguMi0xLjJ6bS0yNTQuOCA3LjFjMS43IDEwLjYgNC43IDE3LjcgOC44IDIxLjktOS4zIDYuNi0yNy41IDEzLjktNDYuNSAxNmwuNSAxLjJjOC4zIDEuMyAxNi45IC40IDI0LjgtMi41bC03LjEgMTNjNC4yLTEuNyAxMC4xLTcuMSAxNy43LTE0LjggMTEuOS01LjUgMTIuNy01LjEgMjAuMi0xNi0xMi43LTYuNC0xNS43LTEzLjctMTguNC0xOC44em0zLjctMTAyLjNjLTYuNC0zLjQtMTAuNiAzLTEyLjMgMTguOXMyLjUgMjkuNSAxMS44IDM5LjYgMTguMiAxMC42IDI2LjEgMyAzLjQtMjMuNi0xMS4zLTQ3LjdjLTMuNS01LjctOC40LTEwLjUtMTQuMy0xMy44bDAgMHptLTQuNyA0Ni4zYzUuNCAyLjIgMTAuNSAxLjkgMTIuMy0xMC42bDAtNC43LTEuMiAuNWMtNC4zLTMuMS0yLjUtNC41LTEuNy02LjJsLjUtLjVjLS45LTEuMi01LTguMS0xMi41IDQuNy0uNS0xMy41IC41LTIxLjkgMy0yNC44IDEuMi0yLjUgNC43LTEuMiAxMS4zIDQuMiA2LjQgNS40IDExLjMgMTYgMTUuMiAzMi41IDYuNSAyOC0xOS44IDI2LjItMjYuOSA0Ljl6bS00NS01LjVjMS42IC4zIDkuMy0xLjEgOS4zLTE0LjhsLS41IDBjLTUuNC0xLjEtMi4yLTUuNS0uNy01LjktMS43LTMtMy40LTQuMi01LjQtNC43LTguMSAwLTExLjYgMTIuNy04LjEgMjEuMiAuNSAxLjEgMS4zIDIgMi4yIDIuOHMyIDEuMiAzLjIgMS40bDAgMHptNDAuMS01MC4xbC0yLjUgLjUgLjUgM2M5LjEtLjUgMTguMSAxLjUgMjYuMSA1LjktMi41LTUuNS0xMC0xNC4zLTI4LjMtMTQuM2wuNSAyLjUgMy43IDIuNHptLTcxLjggNDkuNGMyMS43IDE2LjggMTYuNSAyMS40IDQ2LjUgMjMuNmwtMi45LTQuN2M4LjQtNy4yIDEzLjctMTcuMyAxNC44LTI4LjMgMS43LTE2LTEuMi0yOS41LTguOC00MS4zbDEzLTcuNmMwLS4zIDAtLjYtLjEtLjlzLS4yLS42LS40LS44Yy0yLjItLjktNC42LTEuMi03LS45cy00LjYgMS4yLTYuNSAyLjZjLTEyLjcgNi43LTI4IDIwLjktMjkgMjIuNC0xLjcgMS43LTMuNCA1LjktNS40IDEzLjUtMS45IDcuNy0yLjkgMTUuNi0yLjkgMjMuNi00LjctOC0xMC41LTYuNC0xOS45LTUuOWw3LjEgNy42Yy0xNi41IDAtMjMuMyAxNS40LTIzLjYgMTYgNi44IDAgNC42LTcuNiAzMC0xMi4zLTQuMy02LjMtMy4zLTUtNC45LTYuNnptMTguNy0xOC43YzEuMi03LjYgMy40LTEzIDYuNC0xNy4yIDUuNC02LjQgMTAuNi0xMC4xIDE2LTExLjggNC4yLTEuNyA3LjEgMS4yIDEwLjEgOS4zIDIuNSA4LjIgMy41IDE2LjggMyAyNS4zLS41IDkuMy0zLjQgMTcuMi04LjQgMjMuMS0yLjkgMy40LTUuNCA1LjktNi40IDcuNi0zLjggLjQtNy42IC4yLTExLjMtLjVsLTcuMS0zLjQtNS40LTYuNGMuOC0xMCAxLjMtMTguOCAzLjEtMjZ6bTQyIDU2LjFjLTM0LjggMTQuNC0zNC43IDE0LTM2LjEgMTQuMy0yMC44IDQuNy0xOS0yNC40LTE4LjktMjQuOGw1LjktMS4yLS41LTIuNWMtMjAuMi0yLjYtMzEgNC4yLTMyLjUgNC45IC41IC41IDMgMy40IDUuOSA5LjMgNC4yLTYuNCA4LjgtMTAuMSAxNS4yLTEwLjYtMS43IDExLjItMS4yIDIyLjcgMS43IDMzLjcgLjEgLjUgMi42IDE3LjQgMjcuNSAyNC4xIDExLjMgMyAyNyAxLjIgNDguOS01LjRsLTkuMiAuNWMtNC4yLTE0LjgtNi40LTI0LjgtNS45LTI5LjUgMTEuMy04LjggMjEuOS0xMS4zIDMwLjctNy42bDIuNSAwLTExLjgtNy42LTcuMSAuNWMtNS45IDEuMi0xMi4zIDQuMi0xOS40IDguNGwzLjEtNi41eiJdCiAgICB9OwogICAgZmFKaXJhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImppcmEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdiMSIsICJNNDk4LjUgMjQxLjdjLTcyLjktNzIuNy0xNjkuNC0xNjkuOS0yNDEuNS0yNDEuNy0xNjUuNSAxNjQuOS0yNDIuNSAyNDEuNy0yNDIuNSAyNDEuNy03LjkgNy45LTcuOSAyMC43IDAgMjguNyAxMzIuOCAxMzIuMyA2MS44IDYxLjUgMjQyLjUgMjQxLjYgMzc5LjQtMzc4IDE1LjctMTYuNyAyNDEuNS0yNDEuNyA4LTcuOSA4LTIwLjcgMC0yOC42ek0yNTcgMzMxLjdsLTc2LTc1LjcgNzYtNzUuNyA3NiA3NS43LTc2IDc1Ljd6Il0KICAgIH07CiAgICBmYUZlZGV4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZlZGV4IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY3OTciLCAiTTU4NiAyODQuNWw1My4zLTU5LjktNjIuNCAwLTIxLjcgMjQuOC0yMi41LTI0LjgtMTE4LjcgMCAwLTE2IDU2LjEgMCAwLTQ4LjEtMTUxLjIgMCAwIDc1LjUtLjUgMGMtOS42LTExLTIxLjUtMTQuOC0zNS40LTE0LjgtMjguNCAwLTQ5LjggMTkuNC01Ny4zIDQ0LjktMTgtNTkuNC05Ny40LTU3LjYtMTIxLjktMTRsMC0yNC4yLTU0LjggMCAwLTI2LjIgNjAgMCAwLTQxLjEtMTA5IDAgMCAxODQuNCA0OSAwIDAtNzcuNSA0OC45IDBjLTEuNSA1LjctMi4zIDExLjgtMi4zIDE4LjIgMCA3My4xIDEwMi42IDkxLjQgMTMwLjIgMjMuN2wtNDIgMGMtMTQuNyAyMC45LTQ1LjggOC45LTQ1LjgtMTQuNmw4NS41IDBjMy43IDMwLjUgMjcuNCA1Ni45IDYwLjEgNTYuOSAxNC4xIDAgMjctNi45IDM0LjktMTguNmwuNSAwIDAgMTEuOSAyMTIuMiAwIDIyLjEtMjUgMjIuMyAyNSA2NC40IDAtNTQtNjAuNXpNMTM5LjMgMjY3LjljNi4xLTI2LjMgNDEuNy0yNS42IDQ2LjUgMGwtNDYuNSAwem0xNTMuNCA0OC45Yy0zNC42IDAtMzQtNjIuOCAwLTYyLjggMzIuNiAwIDM0LjUgNjIuOCAwIDYyLjh6bTE2Ny44IDE5LjFsLTk0LjQgMCAwLTE2Ni41IDk1IDAgMCAzMC4yLTU2LjEgMCAwIDMzLjkgNTUuNSAwIDAgMjguMS01Ni4xIDAgMCA0NC43IDU2LjEgMCAwIDI5LjZ6bS00NS45LTM5LjhsMC0yNC40IDU2LjEgMCAwLTQ0IDUwLjcgNTctNTAuNyA1NyAwLTQ1LjYtNTYuMSAwem0xMzguNiAxMC4zbC0yNi4xIDI5LjUtMzguMSAwIDQ1LjYtNTEuMi00NS42LTUxLjIgMzkuNyAwIDI2LjYgMjkuMyAyNS42LTI5LjMgMzguNSAwLTQ1LjQgNTEgNDYgNTEuNC00MC41IDAtMjYuMy0yOS41eiJdCiAgICB9OwogICAgZmFFdmVybm90ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJldmVybm90ZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmODM5IiwgIk0xMjEuMSAxMzIuMmMxLjYgMjIuMy0xNy42IDIxLjYtMjEuNiAyMS42LTY4LjkgMC03My42LTEtODMuNiAzLjMtLjYgLjItLjcgMC0uNC0uNEwxMjQuMSA0Ni40Yy40LS40IC42LS4yIC40IC40LTQuNCAxMC0zLjQgMTUuMS0zLjQgODUuNHptNzkgMzA4Yy0xNC43LTM3LjEgMTMtNzYuOSA1Mi41LTc2LjYgMTcuNSAwIDIyLjYgMjMuMiA3LjkgMzEuNC02LjIgMy4zLTI0LjkgMS43LTI1LjEgMTkuMiAwIDE3LjEgMTkuNyAyNSAzMS4yIDI0LjkgNiAwIDExLjktMS4yIDE3LjUtMy41czEwLjYtNS43IDE0LjgtOS45IDcuNi05LjMgOS45LTE0LjggMy41LTExLjUgMy41LTE3LjVsMC0uMWMwLTExLjYtNy44LTQ3LjItNDcuNS01NS4zLTcuNy0xLjUtNjUtNi4zLTY4LjQtNTAuNS0zLjcgMTYuOS0xNy40IDYzLjUtNDMuMSA2OS4xLTguNyAxLjktNjkuNyA3LjYtMTEyLjktMzYuOCAwIDAtMTguNi0xNS4yLTI4LjItNTgtMy40LTE1LjctOS4zLTM5LjctMTEuMS02MiAwLTE4IDExLjEtMzAuNCAyNS4xLTMyLjIgODEgMCA5MCAyLjMgMTAxLTcuOCA5LjgtOS4yIDcuOC0xNS41IDcuOC0xMDIuOCAxLTguMyA3LjgtMzAuOCA1My40LTI0LjEgNiAuOSAzMS45IDQuMiAzNy41IDMwLjZMMjkwIDc0LjhjMjAuNCAzLjcgNzAuOSA3IDgwLjYgNTcuOSAyMi43IDEyMS4xIDguOSAyMzguNSA3LjggMjM4LjUtMTYgMTE0LjQtMTExLjEgMTA4LjktMTExLjEgMTA4LjktMTktLjItNTQuMi05LjQtNjcuMy0zOS44bDAgMHpNMjgxIDIzNS40Yy0xIDEuOS0yLjIgNiAuOSA3IDE0LjEgNC45IDM5LjggNi44IDQ1LjkgNS41IDMuMS0uMiAzLjEtNC40IDIuNS02LjYtMy41LTIxLjgtNDAuOC0yNi41LTQ5LjItNS45bDAgMHoiXQogICAgfTsKICAgIGZhVXNiID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVzYiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjg3IiwgIk02MzMuNSAyNTZjMCAzLjEtMS43IDYuMS00LjUgNy41TDUzOS45IDMxN2MtMS40IC44LTIuOCAxLjQtNC41IDEuNC0xLjQgMC0zLjEtLjMtNC41LTEuMS0yLjgtMS43LTQuNS00LjUtNC41LTcuOGwwLTM1LjYtMjMwLjcgMGMyNS4zIDM5LjYgNDAuNSAxMDYuOSA2OS42IDEwNi45bDI2LjcgMCAwLTI2LjhjMC01IDMuOS04LjkgOC45LTguOWw4OS4xIDBjNSAwIDguOSAzLjkgOC45IDguOWwwIDg5LjFjMCA1LTMuOSA4LjktOC45IDguOWwtODkuMSAwYy01IDAtOC45LTMuOS04LjktOC45bDAtMjYuNy0yNi43IDBjLTc1LjQgMC04MS4xLTE0Mi41LTEyNC43LTE0Mi41bC0xMDAuMyAwYy04LjEgMzAuNi0zNS45IDUzLjUtNjkgNTMuNS0zOS4zLS4xLTcxLjMtMzIuMS03MS4zLTcxLjRzMzItNzEuMyA3MS4zLTcxLjNjMzMuMSAwIDYxIDIyLjggNjkgNTMuNSAzOS4xIDAgNDMuOSA5LjUgNzQuNi02MC40IDQwLjEtODkuMSA1OC4xLTgyLjEgMTA4LjktODIuMSA3LjUtMjAuOSAyNy0zNS42IDUwLjQtMzUuNiAyOS41IDAgNTMuNSAyMy45IDUzLjUgNTMuNXMtMjMuOSA1My41LTUzLjUgNTMuNWMtMjMuNCAwLTQyLjktMTQuOC01MC40LTM1LjZsLTI5LjggMGMtMjkuMSAwLTQ0LjMgNjcuNC02OS42IDEwNi45bDMwMi4xIDAgMC0zNS42YzAtMy4zIDEuNy02LjEgNC41LTcuOHM2LjQtMS40IDguOSAuM0w2MjkgMjQ4LjhjMi44IDEuMSA0LjUgNC4xIDQuNSA3LjJ6Il0KICAgIH07CiAgICBmYUFuZ3J5Y3JlYXRpdmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYW5ncnljcmVhdGl2ZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMzZlIiwgIk02NDAgMjM4LjJsLTMuMiAyOC4yLTM0LjUgMi4zLTIgMTguMSAzNC41LTIuMy0zLjIgMjguMi0zNC40IDIuMi0yLjMgMjAuMSAzNC40LTIuMi0zIDI2LjEtNjQuNyA0LjEgMTIuNy0xMTMuMi00Ny4zIDExNS40LTMxLjkgMi0yMy44LTExNy44IDMwLjMtMiAxMy42IDc5LjQgMzEuNy04Mi40IDkzLjEtNi4yek00MjYuOCAzNzEuNWwyOC4zLTEuOCAxMi45LTEyMC4xLTI4LjQgMS45LTEyLjggMTIwek0xNjIgMzg4LjFsLTE5LjQtMzYtMy41IDM3LjQtMjguMiAxLjcgMi43LTI5LjFjLTExIDE4LTMyIDM0LjMtNTYuOSAzNS44LTMyLjggMi01OS43LTIwLjktNTYuNC01OC4yIDIuNi0yOS4zIDI2LjctNjIuOCA2Ny41LTY1LjQgMzcuNy0yLjQgNDcuNiAyMy4yIDUxLjMgMjguOGwyLjgtMzAuOCAzOC45LTIuNWMyMC4xLTEuMyAzOC43IDMuNyA0Mi41IDIzLjdsMi42LTI2LjYgNjQuOC00LjItMi43IDI3LjktMzYuNCAyLjQtMS43IDE3LjkgMzYuNC0yLjMtMi43IDI3LjktMzYuNCAyLjMtMS45IDE5LjkgMzYuMy0yLjMtMi4xIDIwLjggNTUtMTE3LjIgMjMuOC0xLjYgMzIuMSAxMTAuNiA4LjktODUuNi0yMi4zIDEuNCAyLjktMjcuOSA3NS00LjktMyAyOC0yNC4zIDEuNi05LjcgOTEuOS01OCAzLjctNC4zLTE1LjYtMzkuNCAyLjUtOCAxNi4zLTEyNi4yIDcuN3ptLTQ0LjMtNzAuMmwtMjYuNCAxLjdjLTYuNy0xMi40LTE0LjQtMTYuNi0yNi4zLTE1LjgtMTkgMS4yLTMzLjMgMTcuNS0zNC42IDMzLjMtMS40IDE2IDcuMyAzMi41IDI4LjcgMzEuMiAxMi44LS44IDIxLjMtOC42IDI4LjktMTguOWwyNy0xLjcgMi43LTI5Ljh6bTU2LjEtNy43YzEuMi0xMi45LTcuNi0xMy42LTI2LjEtMTIuNEwxNDUgMzI2LjNjMTQuMi0uOSAyNy41LTIuMSAyOC44LTE2LjF6TTE5NC45IDM4MWw1LjgtNjBjLTUgMTMuNS0xNC43IDIxLjEtMjcuOSAyNi42TDE5NC45IDM4MXptMTM1LjQtNDVsLTcuOS0zNy44LTE1LjggMzkuMyAyMy43LTEuNXpNMTYwLjIgMjYxLjRsLTQuMy0xNy41LTM5LjYgMi42LTguMSAxOC4yLTMxLjkgMi4xIDU3LTEyMS45IDIzLjktMS42IDMwLjcgMTAyIDkuOS0xMDQuNyAyNy0xLjggMzcuOCA2My42IDYuNS02Ni42IDI4LjUtMS45LTQgNDEuMmM3LjQtMTMuNSAyMi45LTQ0LjcgNjMuNi00Ny41IDQwLjUtMi44IDUyLjQgMjkuMyA1My40IDMwLjNsMy4zLTMyIDM5LjMtMi43YzEyLjctLjkgMjcuOCAuMyAzNi4zIDkuN2wtNC40LTExLjkgMzIuMi0yLjIgMTIuOSA0My4yIDIzLTQ1LjcgMzEtMi4yLTQzLjYgNzguNC00LjggNDQuMy0yOC40IDEuOSA0LjgtNDQuMy0xNS44LTQzYzEgMjIuMy05LjIgNDAuMS0zMiA0OS42bDI1LjIgMzguOC0zNi40IDIuNC0xOS4yLTM2LjgtNCAzOC4zLTI4LjQgMS45IDMuMy0zMS41Yy02LjcgOS4zLTE5LjcgMzUuNC01OS42IDM4LTI2LjIgMS43LTQ1LjYtMTAuMy01NS40LTM5LjJsLTQgNDAuMy0yNSAxLjYtMzcuNi02My4zLTYuMyA2Ni4yLTU2LjggMy43em0yNzYuNi04Mi4xYzEwLjItLjcgMTcuNS0yLjEgMjEuNi00LjMgNC41LTIuNCA3LTYuNCA3LjYtMTIuMSAuNi01LjMtLjYtOC44LTMuNC0xMC40LTMuNi0yLjEtMTAuNi0yLjgtMjIuOS0ybC0yLjkgMjguOHpNMzI3LjcgMjE0YzUuNiA1LjkgMTIuNyA4LjUgMjEuMyA3LjkgNC43LS4zIDkuMS0xLjggMTMuMy00LjEgNS41LTMgMTAuNi04IDE1LjEtMTQuM2wtMzQuMiAyLjMgMi40LTIzLjkgNjMuMS00LjMgMS4yLTEyLTMxLjIgMi4xYy00LjEtMy43LTcuOC02LjYtMTEuMS04LjEtNC0xLjctOC4xLTIuOC0xMi4yLTIuNS04IC41LTE1LjMgMy42LTIyIDkuMi03LjcgNi40LTEyIDE0LjUtMTIuOSAyNC40LTEuMSA5LjYgMS40IDE3LjMgNy4yIDIzLjN6bS0yMDEuMyA4LjJsMjMuOC0xLjYtOC4zLTM3LjYtMTUuNSAzOS4yeiJdCiAgICB9OwogICAgZmFNaXp1bmkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWl6dW5pIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzY2MiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMTc2IDM1OS45Yy0zMS40IDEwLjYtNTguOCAyNy4zLTgwIDQ4LjJMOTYgMTM2YzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAyMjMuOXpNMjk2IDM1MGMtMTIuOS0yLTI2LjItMy4xLTM5LjgtMy4xLTEzLjggMC0yNy4yIDEuMS00MC4yIDMuMWwwLTIxNGMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMjE0em0xMjAgNTcuN2MtMjEuMi0yMC44LTQ4LjYtMzcuNC04MC00OEwzMzYgMTM2YzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAyNzEuN3oiXQogICAgfTsKICAgIGZhSXRjaElvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIml0Y2gtaW8iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjgzYSIsICJNNzEuOSAzNC44QzUwLjIgNDcuNyA3LjQgOTYuOCA3IDEwOS43bDAgMjEuM2MwIDI3LjEgMjUuMyA1MC44IDQ4LjIgNTAuOCAyNy42IDAgNTAuNS0yMi44IDUwLjUtNTAgMCAyNy4xIDIyLjIgNTAgNDkuOCA1MHM0OS0yMi44IDQ5LTUwYzAgMjcuMSAyMy42IDUwIDUxLjIgNTBsLjUgMGMyNy42IDAgNTEuMi0yMi44IDUxLjItNTAgMCAyNy4xIDIxLjUgNTAgNDkgNTBzNDkuOC0yMi44IDQ5LjgtNTBjMCAyNy4xIDIzIDUwIDUwLjUgNTAgMjMgMCA0OC4zLTIzLjggNDguMy01MC44bDAtMjEuM2MtLjQtMTIuOS00My4yLTYyLjEtNjQuOS03NS02Ny40LTIuMy0xMTQuMi0yLjctMTg0LTIuN1M5MS4xIDMzLjEgNzEuOSAzNC44ek0yMDQuMiAxNjkuMmMtMjIgMzguNC03Ny45IDM4LjctOTkuOCAuMi0xMy4yIDIzLjEtNDMuMiAzMi4xLTU2IDI3LjctMy45IDQwLjItMTMuNyAyMzcuMSAxNy43IDI2OS4yIDgwIDE4LjcgMzAyLjEgMTguMSAzNzkuOCAwIDMxLjYtMzIuMyAyMS4zLTIzMiAxNy43LTI2OS4yLTEyLjkgNC40LTQyLjktNC42LTU2LTI3LjctMjIgMzguNS03Ny44IDM4LjEtOTkuOC0uMi03LjEgMTIuNS0yMyAyOC45LTUxLjggMjguOS0xMC40IC4zLTIwLjgtMi4yLTI5LjktNy4zcy0xNi43LTEyLjYtMjEuOS0yMS42bDAgMHptLTQxLjYgNTMuOGMxNi41IDAgMzEuMSAwIDQ5LjIgMTkuOCAyOS4zLTMgNTguOS0zIDg4LjIgMCAxOC4yLTE5LjcgMzIuOC0xOS43IDQ5LjItMTkuNyA1Mi4zIDAgNjUuMiA3Ny41IDgzLjkgMTQ0LjQgMTcuMyA2Mi4yLTUuNSA2My43LTM0IDYzLjctNDIuMS0xLjYtNjUuNS0zMi4yLTY1LjUtNjIuOC0zOS4zIDYuNC0xMDEuOSA4LjgtMTU1LjYgMCAwIDMwLjYtMjMuMyA2MS4yLTY1LjUgNjIuOC0yOC40LS4xLTUxLjItMS42LTMzLjktNjMuNyAxOC43LTY3IDMxLjYtMTQ0LjQgODMuOS0xNDQuNGwwLS4xek0yNTYgMjcwLjhzLTQ0LjQgNDAuOC01Mi40IDU1LjJsMjktMS4yIDAgMjUuM2MwIDEuNSAyMS4zIC4yIDIzLjMgLjIgMTEuNiAuNSAyMy4zIDEgMjMuMy0uMmwwLTI1LjMgMjkgMS4yYy04LTE0LjUtNTIuNC01NS4yLTUyLjQtNTUuMmwuMSAweiJdCiAgICB9OwogICAgZmFXaW5kb3dzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndpbmRvd3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE3YSIsICJNMCA5My43bDE4My42LTI1LjMgMCAxNzcuNC0xODMuNiAwIDAtMTUyLjF6TTAgNDE4LjNsMTgzLjYgMjUuMyAwLTE3NS4yLTE4My42IDAgMCAxNDkuOXptMjAzLjggMjhsMjQ0LjIgMzMuNyAwLTIxMS42LTI0NC4yIDAgMCAxNzcuOXptMC0zODAuNmwwIDE4MC4xIDI0NC4yIDAgMC0yMTMuOC0yNDQuMiAzMy43eiJdCiAgICB9OwogICAgZmFTdHVtYmxldXBvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdHVtYmxldXBvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWE0IiwgIk01MDIuOSAyNjZsMCA2OS43YzAgNjIuMS01MC4zIDExMi40LTExMi40IDExMi40LTYxLjggMC0xMTIuNC00OS44LTExMi40LTExMS4zbDAtNzAuMiAzNC4zIDE2IDUxLjEtMTUuMiAwIDcwLjZjMCAxNC43IDEyIDI2LjUgMjYuNyAyNi41UzQxNyAzNTIuNyA0MTcgMzM4bDAtNzIgODUuOSAwek0yNzguMiAyMDcuOGwzNC4zIDE2IDUxLjEtMTUuMiAwLTM1LjZjMC02MC41LTUxLjEtMTA5LTExMi4xLTEwOS02MC44IDAtMTEyLjEgNDguMi0xMTIuMSAxMDguMmwwIDE2Mi40YzAgMTQuOS0xMiAyNi43LTI2LjcgMjYuN1M4NiAzNDkuNSA4NiAzMzQuNmwwLTY4LjYtODYgMCAwIDY5LjdjMCA2MiA1MC4zIDExMi4zIDExMi40IDExMi4zIDYxLjYgMCAxMTIuNC00OS41IDExMi40LTExMC44bDAtMTYwLjNjMC0xNC43IDEyLTI2LjcgMjYuNy0yNi43czI2LjcgMTIgMjYuNyAyNi43bDAgMzAuOXoiXQogICAgfTsKICAgIGZhR29vZ2xlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2dsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWEwIiwgIk01MDAgMjYxLjhDNTAwIDQwMy4zIDQwMy4xIDUwNCAyNjAgNTA0IDEyMi44IDUwNCAxMiAzOTMuMiAxMiAyNTZTMTIyLjggOCAyNjAgOGM2Ni44IDAgMTIzIDI0LjUgMTY2LjMgNjQuOWwtNjcuNSA2NC45Yy04OC4zLTg1LjItMjUyLjUtMjEuMi0yNTIuNSAxMTguMiAwIDg2LjUgNjkuMSAxNTYuNiAxNTMuNyAxNTYuNiA5OC4yIDAgMTM1LTcwLjQgMTQwLjgtMTA2LjlsLTE0MC44IDAgMC04NS4zIDIzNi4xIDBjMi4zIDEyLjcgMy45IDI0LjkgMy45IDQxLjR6Il0KICAgIH07CiAgICBmYURpc2NvcmQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGlzY29yZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMzkyIiwgIk00OTIuNSA2OS44Yy0uMi0uMy0uNC0uNi0uOC0uNy0zOC4xLTE3LjUtNzguNC0zMC0xMTkuNy0zNy4xLS40LS4xLS44IDAtMS4xIC4xcy0uNiAuNC0uOCAuOGMtNS41IDkuOS0xMC41IDIwLjItMTQuOSAzMC42LTQ0LjYtNi44LTg5LjktNi44LTEzNC40IDAtNC41LTEwLjUtOS41LTIwLjctMTUuMS0zMC42LS4yLS4zLS41LS42LS44LS44cy0uNy0uMi0xLjEtLjJjLTQxLjMgNy4xLTgxLjYgMTkuNi0xMTkuNyAzNy4xLS4zIC4xLS42IC40LS44IC43LTc2LjIgMTEzLjgtOTcuMSAyMjQuOS04Ni45IDMzNC41IDAgLjMgLjEgLjUgLjIgLjhzLjMgLjQgLjUgLjZjNDQuNCAzMi45IDk0IDU4IDE0Ni44IDc0LjIgLjQgLjEgLjggLjEgMS4xIDBzLjctLjQgLjktLjdjMTEuMy0xNS40IDIxLjQtMzEuOCAzMC00OC44IC4xLS4yIC4yLS41IC4yLS44czAtLjUtLjEtLjgtLjItLjUtLjQtLjYtLjQtLjMtLjctLjRjLTE1LjgtNi4xLTMxLjItMTMuNC00NS45LTIxLjktLjMtLjItLjUtLjQtLjctLjZzLS4zLS42LS4zLS45IDAtLjYgLjItLjkgLjMtLjUgLjYtLjdjMy4xLTIuMyA2LjItNC43IDkuMS03LjEgLjMtLjIgLjYtLjQgLjktLjRzLjcgMCAxIC4xYzk2LjIgNDMuOSAyMDAuNCA0My45IDI5NS41IDAgLjMtLjEgLjctLjIgMS0uMnMuNyAuMiAuOSAuNGMyLjkgMi40IDYgNC45IDkuMSA3LjIgLjIgLjIgLjQgLjQgLjYgLjdzLjIgLjYgLjIgLjktLjEgLjYtLjMgLjktLjQgLjUtLjYgLjZjLTE0LjcgOC42LTMwIDE1LjktNDUuOSAyMS44LS4yIC4xLS41IC4yLS43IC40cy0uMyAuNC0uNCAuNy0uMSAuNS0uMSAuOCAuMSAuNSAuMiAuOGM4LjggMTcgMTguOCAzMy4zIDMwIDQ4LjggLjIgLjMgLjYgLjYgLjkgLjdzLjggLjEgMS4xIDBjNTIuOS0xNi4yIDEwMi42LTQxLjMgMTQ3LjEtNzQuMiAuMi0uMiAuNC0uNCAuNS0uNnMuMi0uNSAuMi0uOGMxMi4zLTEyNi44LTIwLjUtMjM2LjktODYuOS0zMzQuNXptLTMwMiAyNjcuN2MtMjkgMC01Mi44LTI2LjYtNTIuOC01OS4yczIzLjQtNTkuMiA1Mi44LTU5LjJjMjkuNyAwIDUzLjMgMjYuOCA1Mi44IDU5LjIgMCAzMi43LTIzLjQgNTkuMi01Mi44IDU5LjJ6bTE5NS40IDBjLTI5IDAtNTIuOC0yNi42LTUyLjgtNTkuMnMyMy40LTU5LjIgNTIuOC01OS4yYzI5LjcgMCA1My4zIDI2LjggNTIuOCA1OS4yIDAgMzIuNy0yMy4yIDU5LjItNTIuOCA1OS4yeiJdCiAgICB9OwogICAgZmFIYWNrZXJOZXdzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhhY2tlci1uZXdzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxZDQiLCAiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTIxLjIgMjI5LjJsLS4yIDBjLjEtLjEgLjItLjMgLjMtLjQgMCAuMSAwIC4zLS4xIC40em0yMTggNTMuOWwwIDEwMC45LTMxLjQgMCAwLTEwMi43LTc5LjgtMTUzLjMgMzcuMyAwYzUyLjUgOTguMyA0OS4yIDEwMS4yIDU5LjMgMTI1LjYgMTIuMy0yNyA1LjgtMjQuNCA2MC42LTEyNS42bDM0LjggMC04MC44IDE1NS4xeiJdCiAgICB9OwogICAgZmFFbGV2ZW50eSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlbGV2ZW50eSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyIxMXR5Il0sICJlN2Q2IiwgIk02MTUuMyAxNjguNWMyLjMgMCA0LjYgLjcgNi42IDIuMiAxLjkgMS40IDMuMSAzLjMgMy44IDUgMS40IDMuMyAxLjggNy4zIDEuOCAxMS4zIDAgMi4yLS4zIDQuOS0uNyA3LjZsMCAuNC01MC45IDI2NC45IDAgMGMtNCAyMi4xLTguNSAzOS40LTEzLjYgNTEuNy01IDEyLjEtMTAuOSAyMS42LTE4LjYgMjdsMCAwYy03LjUgNS4zLTE2LjkgNy43LTI3LjYgOGwtMyAwYy0xNiAwLTI5LjMtNC4yLTM2LjktMTQuOC0uMS0uMS0uMS0uMS0uMi0uMi0uMS0uMi0uMy0uNC0uNS0uNmwwIDBjLTEuOC0yLjQtMi41LTUuMi0yLjktNy40LS41LTIuOC0uNy02LjEtLjctOS44IDAtNy4zIC42LTEzLjUgMi4xLTE4LjIgMS40LTQuNCA0LjgtMTAuNCAxMi4yLTEwLjRsMS4zIC4xYy4yIDAgLjQgLjEgLjUgLjEgLjMgLjEgLjYgLjEgLjggLjIgLjYgLjEgMS4zIC4zIDIuMiAuNmw3LjYgMi4yIC4xIDAgNy42IDIuMWMuOSAuMiAxLjcgLjQgMi4yIC41IC40IC4xIC42IC4xIC43IC4xIDAgMCAuMSAwIC4yLS4xIC4xLS4xIC40LS4yIC44LS42IC45LS45IDIuMi0yLjYgMy42LTUuNyAyLjYtNS44IDQuMi0xNC43IDQuMi0yNy40IDAtLjctLjMtMy40LTEuMy04LjktLjktNS4xLTIuMy0xMi4yLTQuMi0yMS4xbC01Ni0yMzIuOS0uMS0uNCAwLS4zYy0uNC0yLjctLjctNS4zLS43LTcuMyAwLTMuNyAuNC03LjUgMS43LTEwLjYgLjctMS42IDEuOC0zLjQgMy41LTQuOSAxLjktMS41IDQuMi0yLjMgNi41LTIuM2wzNC42IDBjNC42IDAgOC43IDEuNyAxMS45IDVsMS4zIDEuNWMxLjIgMS42IDIgMy40IDIuNyA1LjIgLjkgMi40IDEuNSA1LjEgMiA4LjFsMzAuNCAxNjEuMiAyMy44LTE2MGMuOC01LjggMi4yLTExLjQgNS4xLTE1LjEgMy0zLjggNy4yLTUuOCAxMi01LjhsMjQgMHpNMzc1LjEgMzQuNmMyLjYgMCA1LjEgLjcgNy40IDIuMyAyLjIgMS41IDMuNyAzLjYgNC43IDUuNyAxLjkgNCAyLjUgOS4xIDIuNSAxNC41bDAgMTExLjJjMCAuMSAwIC4yIDAgLjNsMzIuNCAwYzIuNSAwIDUgLjYgNy4yIDIuMSAyLjIgMS40IDMuNyAzLjQgNC44IDUuNSAyIDMuOSAyLjYgOC44IDIuNiAxMy45bDAgMTUuNGMwIDUtLjYgOS44LTIuNiAxMy43LTEuMSAyLTIuNiA0LTQuOCA1LjQtMi4yIDEuNC00LjcgMi03LjEgMmwtMzIuNSAwIDAgMTQ1LjhjMCAxMC44IC43IDE5LjUgMiAyNi4yIDEuNCA2LjkgMy4xIDEwLjkgNC43IDEyLjkgMS4yIDEuNSAyLjIgMi41IDMuMSAzLjJsMi4yIDEuNCAuMSAuMSAyLjkgLjhjMS4yIC4yIDIuNiAuMyA0LjMgLjNsMjAuMyAwYzQuNSAwIDguOSAxLjcgMTEuOCA1LjggMi42IDMuNiAzLjMgOC4xIDMuMyAxMi4ybDAgMTcuMmMwIDQuNS0uOCA5LjMtMy40IDEzLjEtMyA0LjItNy41IDYtMTIuMyA2bDAgMC0yOS4xIC4xYy04IDAtMTUtLjYtMjEuMi0xLjctNi43LTEuMy0xMy40LTQuMS0yMC4xLTguMS03LjItNC40LTEzLTEwLjMtMTcuNS0xNy44LTQuNS03LjUtNy45LTE3LjUtMTAuNS0yOS41LTIuNi0xMi4yLTMuOS0yNi42LTMuOS00M2wwLTE0NC45LTEzLjQgMGMtMi40IDAtNC45LS42LTcuMS0yLTIuMi0xLjQtMy43LTMuNC00LjgtNS40LTItMy45LTIuNi04LjctMi42LTEzLjdsMC0xNS40YzAtNS4xIC42LTEwIDIuNi0xMy45IDEuMS0yLjEgMi42LTQgNC44LTUuNSAyLjItMS41IDQuNy0yLjEgNy4yLTIuMWwxMy40IDAgMC0uNiA1LjItMTExLjIgMC0uMSAuMy0zLjljLjUtMy44IDEuMy03LjQgMi43LTEwLjMgMi4xLTQuMiA2LTcuOSAxMS44LTcuOWwyOC42IDB6bS0yNjggMTEuN2MxLjggLjMgMy42IC45IDUuMyAyLjEgMi4xIDEuNSAzLjUgMy41IDQuNCA1LjQgMS43IDMuNyAyLjMgOC40IDIuMyAxMy4ybDAgMzc3LjhjMCA2LjctLjYgMTIuNi0yLjQgMTcuMS0uOSAyLjMtMi4zIDQuNy00LjQgNi41LTIuMyAyLTUuMSAzLTguMSAzbC00My43IDBjLTMgMC01LjgtMS4xLTguMS0zLjEtMi4xLTEuOS0zLjQtNC4zLTQuMi02LjUtMS43LTQuNS0yLjMtMTAuMy0yLjMtMTdsMC0zMTUuOGMtNC44IDEuMi04LjcgMi4yLTExLjUgMi45LTEuOSAuNS0zLjQgLjgtNC40IDEuMS0uNSAuMS0uOSAuMi0xLjIgLjMtLjEgMC0uMyAuMS0uNSAuMS0uMSAwLS4yIDAtLjMgLjEgMCAwLS4yIDAtLjMgMCAwIDAtLjIgMC0uNCAwbDAgMGMtLjEgMC0uMyAwLS40IDAtLjEgMC0uMiAwLS4yIDAtMi4yIC4xLTQuNS0uNC02LjYtMS43LTIuMy0xLjQtMy44LTMuNC00LjctNS4zLTEuOC0zLjctMi4zLTguNC0yLjMtMTNsMC0yNy40YzAtNC40IC43LTguOCAyLjYtMTIuNCAyLjEtMy45IDUuNS02LjYgOS44LTcuNmw3NS41LTE5LjVjMS40LS40IDIuOS0uNSA0LjQtLjVsMS44IC4xem0xNDMuOC0uNWMxLjggLjMgMy42IC45IDUuMiAyLjEgMi4xIDEuNSAzLjUgMy41IDQuNCA1LjQgMS43IDMuNyAyLjIgOC40IDIuMiAxMy4ybDAgMzc3LjhjMCA2LjctLjYgMTIuNi0yLjQgMTcuMS0uOSAyLjMtMi4zIDQuNy00LjQgNi41LTIuMyAyLTUuMSAzLTguMSAzbC00My43IDBjLTMgMC01LjgtMS4xLTguMS0zLjEtMi4xLTEuOS0zLjQtNC4zLTQuMi02LjUtMS43LTQuNS0yLjMtMTAuMy0yLjMtMTdsMC0zMTUuOGMtNC44IDEuMi04LjcgMi4yLTExLjUgMi45LTEuOSAuNS0zLjQgLjgtNC40IDEuMS0uNSAuMS0uOSAuMi0xLjIgLjMtLjEgMC0uMyAuMS0uNSAuMS0uMSAwLS4yIDAtLjMgLjEtLjEgMC0uMiAwLS4zIDAgMCAwLS4yIDAtLjQgMGwwIDBjLS4xIDAtLjIgMC0uMyAwLS4xIDAtLjIgMC0uMyAwLTIuMiAuMS00LjUtLjQtNi42LTEuNy0yLjMtMS40LTMuOC0zLjQtNC43LTUuMy0xLjgtMy43LTIuMy04LjMtMi4zLTEzbDAtMjcuNGMwLTQuNCAuNy04LjcgMi42LTEyLjQgMi4xLTMuOSA1LjUtNi42IDkuOC03LjZsNzUuNC0xOS40YzEuNC0uNCAyLjktLjUgNC40LS41bDEuOCAuMXoiXQogICAgfTsKICAgIGZhMTF0eSA9IGZhRWxldmVudHk7CiAgICBmYVRlYW1zcGVhayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0ZWFtc3BlYWsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRmOSIsICJNMTUyLjggMzcuMmMtMzIuMiAzOC4xLTU2LjEgODIuNi02OS45IDEzMC41IDAgLjItLjEgLjMtLjEgLjUtMzkuMyAxNi4yLTY2LjggNTQuOC02Ni44IDk5LjggMCA1OS42IDQ4LjQgMTA4IDEwOCAxMDhzMTA4LTQ4LjQgMTA4LTEwOGMwLTUzLjUtMzguOS05Ny45LTkwLTEwNi41IDE1LjctNDEuOCA0MC40LTc5LjYgNzIuMy0xMTAuNyAxLjgtMS42IDQtMi42IDYuMy0zLjEgMzcuMi0xMS41IDc2LjctMTMuMyAxMTQuOC01LjIgMTE5LjMgMjUuMSAxOTguNiAxMzguMiAxODEuNyAyNTguOC04LjQgNjIuNi0zOC42IDExMi43LTg3LjcgMTUxLjQtNTAuMSAzOS43LTEwNy41IDU0LjMtMTcwLjIgNTIuMmwtMjQtMWMxMi40IDIuOCAyNSA0LjkgMzcuNiA2LjMgNDAuNyA0LjIgODEuNCAyLjEgMTIwLjEtMTIuNSA5NC0zNS41IDE0OS4zLTEwMi4zIDE2Mi45LTIwMi41IDQuOC01Mi42LTUuOC0xMDUuNC0zMC44LTE1Mi03MC40LTEzMS45LTIzNC4yLTE4MS42LTM2Ni0xMTEuMi0yLjQgMS40LTQuNSAzLjEtNi4zIDUuMmwuMSAwek0zMDkuNCA0MzMuOWMtMi4xIDExLjUtNC4yIDIxLjktMTQuNiAzMS4zIDUzLjItMSAxMjMuMi0yOS4yIDE2MS44LTk3LjEgMzkuNy02OS45IDM3LjYtMTM5LjktNi4zLTIwNy44LTM2LjUtNTUuMy04OS44LTgyLjQtMTU2LjYtODYuNiAxLjUgMi4zIDMuMiA0LjQgNS4yIDYuM2w1LjIgNi4zYzI1LjEgMzEuMyAzNy42IDY3LjkgNDIuOCAxMDcuNSAyLjEgMTUuNy0xIDMwLjMtMTMuNiA0MS44LTQuMiAzLjEtNS4yIDYuMy00LjIgMTAuNGw3LjMgMTcuNyAyOS4zIDU0LjNjNS4yIDExLjUgNC4yIDE5LjgtNi4zIDI4LjItMy4yIDIuNS02LjcgNC42LTEwLjQgNi4zbC0xOC44IDguNCAzLjEgMTMuNmMzLjEgNi4zIDEgMTIuNS0zLjEgMTcuNy0yLjUgMi40LTMuOCA1LjktMy4xIDkuNCAyLjEgMTEuNS0yLjEgMTkuOC0xMi41IDI1LjEtMi4xIDEtNC4yIDUuMi01LjIgNy4zbDAtLjF6bS0xMzMuNi0zLjFjMTYuNyAxMS41IDM0LjUgMjAuOSA1My4yIDI2LjEgMjQgNS4yIDQxLjgtNi4zIDQ0LjktMzAuMyAxLTguNCA1LjItMTQuNiAxMi41LTE3LjcgNy4zLTQuMiA4LjQtNy4zIDIuMS0xMy42bC05LjQtOC40IDEzLjYtNC4yYzYuMy0yLjEgNy4zLTUuMiA1LjItMTEuNS0xLjQtMy0yLjQtNi4yLTMuMS05LjQtMy4xLTE0LjYtMi4xLTE1LjcgMTEuNS0xOC44IDguNC0zLjEgMTUuNy02LjMgMjEuOS0xMi41IDMuMS0yLjEgMy4xLTQuMiAxLTguNGwtMTYuNy0zMC4zYy0xLTEuOS0yLjEtMy44LTMuMS01LjctNi40LTExLjctMTMtMjMuNi0xNS43LTM3LjEtMi4xLTkuNC0xLTE3LjcgOC40LTI0IDUuMi00LjIgOC40LTkuNCA4LjQtMTYuNy0uNC0xMC4xLTEuNS0yMC4zLTMuMS0zMC4zLTYuMy0zNy42LTIzLTY4LjktNTEuMi05NS01LjItNC4yLTkuNC02LjMtMTYuNy00LjJsLTM1LjYgMTIuNyA2IDMuNmM2LjMgMy43IDEyLjIgNy4zIDE3IDEyLjEgMzAuMyAyNi4xIDQxLjggNjEuNiA0NS45IDEwMC4yIDEgOC40IDAgMTYuNy03LjMgMjEuOS04LjQgNS4yLTEwLjQgMTIuNS03LjMgMjAuOSA0LjkgMTMuMiAxMC40IDI2IDE2LjcgMzguNkwyOTEuNiAzMThjLTYuMyA4LjQtMTMuNiAxMS41LTIxLjkgMTQuNi0xMi41IDMuMS0xNC42IDcuMy0xMC40IDIwLjkgLjYgMS41IDEuNCAyLjggMi4xIDQuMiAyLjEgNS4yIDEgOC40LTQuMiAxMC40bC0xMi41IDMuMSA1LjIgNC4yIDQuMiA0LjJjNC4yIDUuMiA0LjIgOC40LTIuMSAxMC40LTcuMyA0LjItMTEuNSA5LjQtMTEuNSAxNy43IDAgMTIuNS03LjMgMTkuOC0xOC44IDI0LTMuOCAxLTcuNiAxLjUtMTEuNSAxbC0zNC41LTIuMSAuMSAuMnoiXQogICAgfTsKICAgIGZhU3VwcGxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN1cHBsZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmM2Y5IiwgIk02NDAgMjYyLjVjMCA2NC4xLTEwOSAxMTYuMS0yNDMuNSAxMTYuMS0yNC44IDAtNDguNi0xLjgtNzEuMS01IDcuNyAuNCAxNS41IC42IDIzLjQgLjYgMTM0LjUgMCAyNDMuNS01Ni45IDI0My41LTEyNy4xIDAtMjkuNC0xOS4xLTU2LjQtNTEuMi03OCA2MCAyMS4xIDk4LjkgNTUuMSA5OC45IDkzLjR6TTQ3LjcgMjI3LjljLS4xLTcwLjIgMTA4LjgtMTI3LjMgMjQzLjMtMTI3LjYgNy45IDAgMTUuNiAuMiAyMy4zIC41LTIyLjUtMy4yLTQ2LjMtNC45LTcxLTQuOS0xMzQuNSAuNC0yNDMuNCA1Mi42LTI0My4zIDExNi43IC4xIDM4LjMgMzkuMSA3Mi4zIDk5LjMgOTMuMy0zMi4zLTIxLjUtNTEuNS00OC42LTUxLjYtNzh6bTYwLjIgMzkuOVMxMTguNCAyODEgMTM3LjIgMjgxYzE3LjkgMCAyOC40LTExLjUgMjguNC0yNS4xIDAtMjgtNDAuMi0yNS4xLTQwLjItMzkuNyAwLTUuNCA1LjMtOS4xIDEyLjUtOS4xIDUuNyAwIDExLjMgMi42IDExLjMgNi42bDAgMy45IDE0LjIgMCAwLTcuOWMwLTEyLjEtMTUuNC0xNi44LTI1LjQtMTYuOC0xNi41IDAtMjguNSAxMC4yLTI4LjUgMjQuMSAwIDI2LjYgNDAuMiAyNS40IDQwLjIgMzkuOSAwIDYuNi01LjggMTAuMS0xMi4zIDEwLjEtMTEuOSAwLTIwLjctMTAuMS0yMC43LTEwLjFsLTguOCAxMC45em0xMjAuOC03My42bDAgNTQuNGMwIDExLjMtNy4xIDE3LjgtMTcuOCAxNy44cy0xNy44LTYuNS0xNy44LTE3LjdsMC01NC41LTE1LjggMCAwIDU1YzAgMTguOSAxMy40IDMxLjkgMzMuNyAzMS45IDIwLjEgMCAzMy40LTEzIDMzLjQtMzEuOWwwLTU1LTE1LjcgMHptMzQuNCA4NS40bDE1LjggMCAwLTI5LjUgMTUuNSAwYzE2IDAgMjcuMi0xMS41IDI3LjItMjguMXMtMTEuMi0yNy44LTI3LjItMjcuOGwtMzkuMSAwIDAgMTMuNCA3LjggMCAwIDcyem0xNS44LTQzbDAtMjkuMSAxMi45IDBjOC43IDAgMTMuNyA1LjcgMTMuNyAxNC40IDAgOC45LTUuMSAxNC43LTE0IDE0LjdsLTEyLjYgMHptNTcgNDNsMTUuOCAwIDAtMjkuNSAxNS41IDBjMTYgMCAyNy4yLTExLjUgMjcuMi0yOC4xcy0xMS4yLTI3LjgtMjcuMi0yNy44bC0zOS4xIDAgMCAxMy40IDcuOCAwIDAgNzJ6bTE1LjctNDNsMC0yOS4xIDEyLjkgMGM4LjcgMCAxMy43IDUuNyAxMy43IDE0LjQgMCA4LjktNSAxNC43LTE0IDE0LjdsLTEyLjYgMHptNTcuMSAzNC44YzAgNS44IDIuNCA4LjIgOC4yIDguMmwzNy42IDBjNS44IDAgOC4yLTIuNCA4LjItOC4ybDAtMTMtMTQuMyAwIDAgNS4yYzAgMS43LTEgMi42LTIuNiAyLjZsLTE4LjYgMGMtMS43IDAtMi42LTEtMi42LTIuNmwwLTYxLjJjMC01LjctMi40LTguMi04LjItOC4ybC0xNS40IDAgMCAxMy40IDUuMiAwYzEuNyAwIDIuNiAxIDIuNiAyLjZsMCA2MS4yLS4xIDB6bTYzLjQgMGMwIDUuOCAyLjQgOC4yIDguMiA4LjJsMzguNyAwYzUuNyAwIDguMi0yLjQgOC4yLTguMmwwLTEzLTE0LjMgMCAwIDUuMmMwIDEuNy0xIDIuNi0yLjYgMi42bC0xOS43IDBjLTEuNyAwLTIuNi0xLTIuNi0yLjZsMC0yMC4zIDI3LjcgMCAwLTEzLjQtMjcuNyAwIDAtMjIuNCAxOS4yIDBjMS43IDAgMi42IDEgMi42IDIuNmwwIDUuMiAxNC4yIDAgMC0xM2MwLTUuNy0yLjUtOC4yLTguMi04LjJsLTUxLjYgMCAwIDEzLjQgNy44IDAgMCA2My45IC4xIDB6bTU4LjktNzZsMCA1LjkgMS42IDAgMC01LjkgMi43IDAgMC0xLjItNyAwIDAgMS4yIDIuNyAwem01LjctMS4ybDAgNy4xIDEuNSAwIDAtNS43IDIuMyA1LjcgMS4zIDAgMi4zLTUuNyAwIDUuNyAxLjUgMCAwLTcuMS0yLjMgMC0yLjEgNS4xLTIuMS01LjEtMi40IDB6Il0KICAgIH07CiAgICBmYVNxdWFyZVR3aXR0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXR3aXR0ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidHdpdHRlci1zcXVhcmUiXSwgImYwODEiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTM1MS4zIDE5OS4zYzAgODYuNy02NiAxODYuNi0xODYuNiAxODYuNi0zNy4yIDAtNzEuNy0xMC44LTEwMC43LTI5LjQgNS4zIC42IDEwLjQgLjggMTUuOCAuOCAzMC43IDAgNTguOS0xMC40IDgxLjQtMjgtMjguOC0uNi01My0xOS41LTYxLjMtNDUuNSAxMC4xIDEuNSAxOS4yIDEuNSAyOS42LTEuMi0zMC02LjEtNTIuNS0zMi41LTUyLjUtNjQuNGwwLS44YzguNyA0LjkgMTguOSA3LjkgMjkuNiA4LjMtOS02LTE2LjQtMTQuMS0yMS41LTIzLjZzLTcuOC0yMC4yLTcuNy0zMWMwLTEyLjIgMy4yLTIzLjQgOC45LTMzLjEgMzIuMyAzOS44IDgwLjggNjUuOCAxMzUuMiA2OC42LTkuMy00NC41IDI0LTgwLjYgNjQtODAuNiAxOC45IDAgMzUuOSA3LjkgNDcuOSAyMC43IDE0LjgtMi44IDI5LTguMyA0MS42LTE1LjgtNC45IDE1LjItMTUuMiAyOC0yOC44IDM2LjEgMTMuMi0xLjQgMjYtNS4xIDM3LjgtMTAuMi04LjkgMTMuMS0yMC4xIDI0LjctMzIuOSAzNCAuMiAyLjggLjIgNS43IC4yIDguNXoiXQogICAgfTsKICAgIGZhVHdpdHRlclNxdWFyZSA9IGZhU3F1YXJlVHdpdHRlcjsKICAgIGZhRm9udEF3ZXNvbWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZm9udC1hd2Vzb21lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjI1MDEsIDYyNjk0LCAiZm9udC1hd2Vzb21lLWZsYWciLCAiZm9udC1hd2Vzb21lLWxvZ28tZnVsbCJdLCAiZjJiNCIsICJNOTEuNyA5NkMxMDYuMyA4Ni44IDExNiA3MC41IDExNiA1MiAxMTYgMjMuMyA5Mi43IDAgNjQgMFMxMiAyMy4zIDEyIDUyYzAgMTYuNyA3LjggMzEuNSAyMCA0MWwwIDQxOSA2NCAwIDAtNjQgMzczLjYgMGMxNC42IDAgMjYuNC0xMS44IDI2LjQtMjYuNCAwLTMuNy0uOC03LjMtMi4zLTEwLjdMNDMyIDI3MiA0OTMuNyAxMzMuMWMxLjUtMy40IDIuMy03IDIuMy0xMC43IDAtMTQuNi0xMS44LTI2LjQtMjYuNC0yNi40TDkxLjcgOTZ6Il0KICAgIH07CiAgICBmYUZvbnRBd2Vzb21lRmxhZyA9IGZhRm9udEF3ZXNvbWU7CiAgICBmYUZvbnRBd2Vzb21lTG9nb0Z1bGwgPSBmYUZvbnRBd2Vzb21lOwogICAgZmFXaXJzaW5kaGFuZHdlcmsgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2lyc2luZGhhbmR3ZXJrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbIndzaCJdLCAiZTJkMCIsICJNMTguOSA0NzkuOGw4My40IDAgMC0xMTItODMuNCA0NyAwIDY1em0zMjkgMGw4Mi40IDAgMC02NS04Mi40LTQ3IDAgMTEyem0wLTQ0OGwwIDIxOS44LTEyMy42LTcyLjQtMTIxLjcgNzIuNCAwLTIxOS44LTgzLjcgMCAwIDM2MC44IDIwNS40LTEyMi4zIDIwNiAxMjIuMyAwLTM2MC44LTgyLjMgMHoiXQogICAgfTsKICAgIGZhV3NoID0gZmFXaXJzaW5kaGFuZHdlcms7CiAgICBmYUNvbmZsdWVuY2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY29uZmx1ZW5jZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzhkIiwgIk0yLjggNDEyLjJjLTQuNSA3LjYtMi4xIDE3LjUgNS41IDIyLjJsMTA1LjkgNjUuMmM3LjcgNC43IDE3LjcgMi40IDIyLjQtNS4zIDAtLjEgLjEtLjIgLjEtLjIgNjcuMS0xMTIuMiA4MC41LTk1LjkgMjgwLjktLjcgOC4xIDMuOSAxNy44IC40IDIxLjctNy43IC4xLS4xIC4xLS4zIC4yLS40bDUwLjQtMTE0LjFjMy42LTguMS0uMS0xNy42LTguMS0yMS4zLTIyLjItMTAuNC02Ni4yLTMxLjItMTA1LjktNTAuMy0yNDcuOS0xMjAuNi0zMzAuOCA0NS43LTM3My4xIDExMi42ek01MTAuMiAxMDAuMWM0LjUtNy42IDIuMS0xNy41LTUuNS0yMi4yTDM5OC45IDEyLjhjLTcuNS01LTE3LjYtMy4xLTIyLjYgNC40LS4yIC4zLS40IC42LS42IDEtNjcuMyAxMTIuNi04MS4xIDk1LjYtMjgwLjYgLjktOC4xLTMuOS0xNy44LS40LTIxLjcgNy43LS4xIC4xLS4xIC4zLS4yIC40TDIyLjcgMTQxLjNjLTMuNiA4LjEgLjEgMTcuNiA4LjEgMjEuMyAyMi4yIDEwLjQgNjYuMyAzMS4yIDEwNiA1MC40IDI0OCAxMjAgMzMwLjgtNDUuNCAzNzMuNC0xMTIuOXoiXQogICAgfTsKICAgIGZhRGlnZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkaWdnIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYTYiLCAiTTgxLjcgMTcyLjNsLTgxLjcgMCAwIDE3NC40IDEzMi43IDAgMC0yNTAuNy01MSAwIDAgNzYuM3ptMCAxMzMuNGwtMzAuOCAwIDAtOTIuMyAzMC44IDAgMCA5Mi4zek0zNzguOSAxNzIuM2wwIDE3NC40IDgxLjggMCAwIDI4LjUtODEuOCAwIDAgNDAuOCAxMzMuMSAwIDAtMjQzLjctMTMzLjEgMHptODEuOCAxMzMuNGwtMzAuOCAwIDAtOTIuMyAzMC44IDAgMCA5Mi4zem0tMjM1LjYgNDFsODIuMSAwIDAgMjguNS04Mi4xIDAgMCA0MC44IDEzMy4zIDAgMC0yNDMuNy0xMzMuMyAwIDAgMTc0LjR6bTUxLjItMTMzLjNsMzAuOCAwIDAgOTIuMy0zMC44IDAgMC05Mi4zek0xNTMuMyA5Nmw1MS4zIDAgMCA1MS01MS4zIDAgMC01MXptMCA3Ni4zbDUxLjMgMCAwIDE3NC40LTUxLjMgMCAwLTE3NC40eiJdCiAgICB9OwogICAgZmFUaHJlYWRzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRocmVhZHMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTYxOCIsICJNMzMxLjUgMjM1LjdjMi4yIC45IDQuMiAxLjkgNi4zIDIuOCAyOS4yIDE0LjEgNTAuNiAzNS4yIDYxLjggNjEuNCAxNS43IDM2LjUgMTcuMiA5NS44LTMwLjMgMTQzLjItMzYuMiAzNi4yLTgwLjMgNTIuNS0xNDIuNiA1M2wtLjMgMGMtNzAuMi0uNS0xMjQuMS0yNC4xLTE2MC40LTcwLjItMzIuMy00MS00OC45LTk4LjEtNDkuNS0xNjkuNmwwLS41QzE3IDE4NC4zIDMzLjYgMTI3LjIgNjUuOSA4Ni4yIDEwMi4yIDQwLjEgMTU2LjIgMTYuNSAyMjYuNCAxNmwuMyAwYzcwLjMgLjUgMTI0LjkgMjQgMTYyLjMgNjkuOSAxOC40IDIyLjcgMzIgNTAgNDAuNiA4MS43bC00MC40IDEwLjhjLTcuMS0yNS44LTE3LjgtNDcuOC0zMi4yLTY1LjQtMjkuMi0zNS44LTczLTU0LjItMTMwLjUtNTQuNi01NyAuNS0xMDAuMSAxOC44LTEyOC4yIDU0LjQtMjYuMiAzMy4zLTM5LjggODEuNS00MC4zIDE0My4yIC41IDYxLjcgMTQuMSAxMDkuOSA0MC4zIDE0My4zIDI4IDM1LjYgNzEuMiA1My45IDEyOC4yIDU0LjQgNTEuNC0uNCA4NS40LTEyLjYgMTEzLjctNDAuOSAzMi4zLTMyLjIgMzEuNy03MS44IDIxLjQtOTUuOS02LjEtMTQuMi0xNy4xLTI2LTMxLjktMzQuOS0zLjcgMjYuOS0xMS44IDQ4LjMtMjQuNyA2NC44LTE3LjEgMjEuOC00MS40IDMzLjYtNzIuNyAzNS4zLTIzLjYgMS4zLTQ2LjMtNC40LTYzLjktMTYtMjAuOC0xMy44LTMzLTM0LjgtMzQuMy01OS4zLTIuNS00OC4zIDM1LjctODMgOTUuMi04Ni40IDIxLjEtMS4yIDQwLjktLjMgNTkuMiAyLjgtMi40LTE0LjgtNy4zLTI2LjYtMTQuNi0zNS4yLTEwLTExLjctMjUuNi0xNy43LTQ2LjItMTcuOGwtLjcgMGMtMTYuNiAwLTM5IDQuNi01My4zIDI2LjNsLTM0LjQtMjMuNmMxOS4yLTI5LjEgNTAuMy00NS4xIDg3LjgtNDUuMWwuOCAwYzYyLjYgLjQgOTkuOSAzOS41IDEwMy43IDEwNy43bC0uMiAuMiAuMSAwem0tMTU2IDY4LjhjMS4zIDI1LjEgMjguNCAzNi44IDU0LjYgMzUuMyAyNS42LTEuNCA1NC42LTExLjQgNTkuNS03My4yLTEzLjItMi45LTI3LjgtNC40LTQzLjQtNC40LTQuOCAwLTkuNiAuMS0xNC40IC40LTQyLjkgMi40LTU3LjIgMjMuMi01Ni4yIDQxLjhsLS4xIC4xeiJdCiAgICB9OwogICAgZmFXcHJlc3NyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndwcmVzc3IiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsicmVuZGFjdCJdLCAiZjNlNCIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MjcuMyAxNjYuNmMtMTUuMiAzNC41LTMwLjQgNjktNDUuNiAxMDMuNS0yLjQgNS41LTYuOSA4LjItMTMgOC4yLTIzIDAtNDYgLjEtNjkgMC01LjEgMC04LjIgMS45LTEwLjMgNi43LTEwLjIgMjMuNi0yMC42IDQ3LTMxIDcwLjUtMS41IDMuNS00LjEgNS4zLTcuOSA1LjMtNDUuOSAwLTkxLjkgMC0xMzcuOCAwLTMuMSAwLTUuNi0xLjEtNy43LTMuNC0xMS4yLTEyLjMtMjIuNS0yNC42LTMzLjctMzYuOS0yLjctMy0yLjgtNi4yLTEuMi05LjcgOC43LTE5LjUgMTcuMy0zOS4xIDI1LjktNTguNyAxMi45LTI5LjQgMjUuOS01OC43IDM4LjctODguMSAxLjctMy45IDQuMy01LjcgOC41LTUuNyAxNC4yIC4xIDI4LjUgMCA0Mi43IDAgNi4yIDAgOS4yIDQuOCA2LjcgMTAuNi0xMy42IDMwLjgtMjcuMiA2MS42LTQwLjcgOTIuMy01LjcgMTMtMTEuNCAyNi0xNy4xIDM5LTMuOSA5IDcuMSAxMiAxMSA1LjYgLjItLjQtMS40IDQuMiAzMC02Ny43IDEuNC0zLjEgMy40LTQuNCA2LjgtNC40IDE1LjIgLjEgMzAuNCAwIDQ1LjYgMCA1LjYgMCA3LjkgMy42IDUuNyA4LjctOC4zIDE5LTE2LjcgMzcuOS0yNSA1Ni45LTUgMTEuNCA4LjEgMTIuNSAxMS4zIDUuMyAwLS4xIDI3LjktNjMuMyAzMi4yLTczLjIgMi00LjYgNS40LTYuNSAxMC4zLTYuNSAyNi40IC4xIDUyLjkgMCA3OS4zIDAgMTIuNCAwIDEzLjktMTMuNiAzLjktMTMuNi0yNS4zIDAtNTAuNSAwLTc1LjggMC02LjMgMC03LjgtMi41LTUuMy04LjMgNS44LTEzLjEgMTEuNi0yNi4xIDE3LjMtMzkuMiAxLjctNCA0LjUtNS44IDguOC01LjggMjMuMSAuMSAyNiAwIDEzMC44IDAgNi4xIDAgOCAyLjggNS42IDguM3oiXQogICAgfTsKICAgIGZhUmVuZGFjdCA9IGZhV3ByZXNzcjsKICAgIGZhWW9hc3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAieW9hc3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJiMSIsICJNOTEuMyA3NmwxODYgMC03IDE4LjktMTc5IDBjLTM5LjcgMC03MS45IDMxLjYtNzEuOSA3MC4zbDAgMjA1LjRjMCAzNS40IDI0LjkgNzAuMyA4NCA3MC4zbDAgMTkuMS0xMi4xIDBDNDEuMiA0NjAgMCA0MTkuOCAwIDM3MC41TDAgMTY1LjJDMCAxMTUuOSA0MC43IDc2IDkxLjMgNzZ6TTMyMC40IDIwbDY2LjUgMGMtMTQzLjggMzc4LjEtMTQ1LjcgMzk4LjktMTg0LjcgNDM5LjMtMjAuOCAyMS42LTQ5LjMgMzEuNy03OC4zIDMyLjdsMC01MS4xYzQ5LjItNy43IDY0LjYtNDkuOSA2NC42LTc1LjMgMC0yMC4xIC42LTEyLjYtODIuMS0yMjMuMmw2MS40IDAgNTAuNCAxNTYuNiAxMDIuMi0yNzl6TTQ0OCAxNjEuNWwwIDI5OC41LTIxNCAwYzYuNi05LjYgMTAuNy0xNi4zIDEyLjEtMTkuNGwxODIuNSAwIDAtMjc5LjFjMC0zMi41LTE3LjEtNTEuOS00OC4yLTYyLjlMMzg3LjEgODFjNDEuNyAxMy42IDYwLjkgNDMuMSA2MC45IDgwLjV6Il0KICAgIH07CiAgICBmYU5pbWJsciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJuaW1ibHIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjVhOCIsICJNMjQ2LjYgMzUzLjNhMjcgMjcgMCAxIDEgMC01NCAyNyAyNyAwIDEgMSAwIDU0em0tNzkuNC0yN2EyNy4xIDI3LjEgMCAxIDEgLTU0LjMgMCAyNy4xIDI3LjEgMCAxIDEgNTQuMyAwek0xOTEuOCAxNTlDMTU3IDE1OSA4OS40IDE3OC44IDU5LjIgMjI3TDE0IDAgMTQgMzM1LjVDMTQgNDMzLjEgOTMuNiA1MTIgMTkxLjggNTEyUzM2OS41IDQzMyAzNjkuNSAzMzUuNSAyOTAuMSAxNTkgMTkxLjggMTU5em0wIDMwOC4xYy03My4zIDAtMTMyLjUtNTguOS0xMzIuNS0xMzEuNnM1OS4yLTEzMS42IDEzMi41LTEzMS42IDEzMi41IDU4LjkgMTMyLjUgMTMxLjUtNTkuMyAxMzEuNi0xMzIuNSAxMzEuNmwwIC4xeiJdCiAgICB9OwogICAgZmFQaXhlbGZlZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaXhlbGZlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlN2RiIiwgIk0yNTYgMGEyNTYgMjU2IDAgMSAxIDAgNTEyIDI1NiAyNTYgMCAxIDEgMC01MTJ6TTIzNS43IDMxMS45bDQ3IDBjNDQuMiAwIDgwLjEtMzQuOSA4MC4xLTc4cy0zNS45LTc4LTgwLjEtNzhsLTY3LjggMGMtMjUuNSAwLTQ2LjIgMjAuMS00Ni4yIDQ1bDAgMTc1LjEgNjctNjQuMXoiXQogICAgfTsKICAgIGZhWWFob28gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAieWFob28iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjE5ZSIsICJNMjIzLjggMTQxLjFsLTU2LjcgMTQzLjItNTYtMTQzLjItOTYuMSAwIDEwNS44IDI0OS4xLTM4LjYgODkuOCA5NC4yIDAgMTQwLjktMzM4LjktOTMuNiAwek0zMjkuMiAyNzYuOWE1OC4yIDU4LjIgMCAxIDAgMCAxMTYuNCA1OC4yIDU4LjIgMCAxIDAgMC0xMTYuNHpNMzk0LjcgMzJsLTkzIDIyMy41IDEwNC44IDAgOTIuNi0yMjMuNS0xMDQuNCAweiJdCiAgICB9OwogICAgZmFCbHVlc2t5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJsdWVza3kiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTY3MSIsICJNNDA3LjggMjk0LjdjLTMuMy0uNC02LjctLjgtMTAtMS4zIDMuNCAuNCA2LjcgLjkgMTAgMS4zek0yODggMjI3LjFDMjYxLjkgMTc2LjQgMTkwLjkgODEuOSAxMjQuOSAzNS4zIDYxLjYtOS40IDM3LjUtMS43IDIxLjYgNS41IDMuMyAxMy44IDAgNDEuOSAwIDU4LjRTOS4xIDE5NCAxNSAyMTMuOWMxOS41IDY1LjcgODkuMSA4Ny45IDE1My4yIDgwLjcgMy4zLS41IDYuNi0uOSAxMC0xLjQtMy4zIC41LTYuNiAxLTEwIDEuNC05My45IDE0LTE3Ny4zIDQ4LjItNjcuOSAxNjkuOSAxMjAuMyAxMjQuNiAxNjQuOC0yNi43IDE4Ny43LTEwMy40IDIyLjkgNzYuNyA0OS4yIDIyMi41IDE4NS42IDEwMy40IDEwMi40LTEwMy40IDI4LjEtMTU2LTY1LjgtMTY5LjktMy4zLS40LTYuNy0uOC0xMC0xLjMgMy40IC40IDYuNyAuOSAxMCAxLjMgNjQuMSA3LjEgMTMzLjYtMTUuMSAxNTMuMi04MC43IDUuOS0xOS45IDE1LTEzOC45IDE1LTE1NS41cy0zLjMtNDQuNy0yMS42LTUyLjljLTE1LjgtNy4xLTQwLTE0LjktMTAzLjIgMjkuOC02Ni4xIDQ2LjYtMTM3LjEgMTQxLjEtMTYzLjIgMTkxLjh6Il0KICAgIH07CiAgICBmYVNjcmliZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzY3JpYmQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjI4YSIsICJNNDIuNiAyNTIuN2MtMTYuMS0xOS0yNC43LTQ1LjktMjQuOC03OS45IDAtMTAwLjQgNzUuMi0xNTMuMSAxNjcuMi0xNTMuMSA5OC42LTEuNiAxNTYuOCA0OSAxODQuMyA3MC42bC01MC41IDcyLjEtMzcuMy0yNC42IDI2LjktMzguNmMtMzYuNS0yNC03OS40LTM2LjUtMTIzLTM1LjgtNTAuNy0uOC0xMTEuNyAyNy4yLTExMS43IDc2LjIgMCAxOC43IDExLjIgMjAuNyAyOC42IDE1LjYgMjMuMy01LjMgNDEuOSAuNiA1NS44IDE0IDI2LjQgMjQuMyAyMy4yIDY3LjYtLjcgOTEuOS0yOS4yIDI5LjUtODUuMiAyNy4zLTExNC44LTguNHptMzE3LjcgNS45Yy0xNS41LTE4LjgtMzguOS0yOS40LTYzLjItMjguNi0zOC4xLTItNzEuMSAyOC03MC41IDY3LjItLjcgMTYuOCA2IDMzIDE4LjQgNDQuMyAxNC4xIDEzLjkgMzMgMTkuNyA1Ni4zIDE0LjQgMTcuNC01LjEgMjguNi0zLjEgMjguNiAxNS42IDAgNC4zLS41IDguNS0xLjQgMTIuNy0xNi43IDQwLjktNTkuNSA2NC40LTEyMS40IDY0LjQtNTEuOSAuMi0xMDIuNC0xNi40LTE0NC4xLTQ3LjNsMzMuNy0zOS40LTM1LjYtMjcuNC02MC44IDcxLjggMTUuNCAxMy44YzUyLjUgNDYuOCAxMjAuNCA3Mi41IDE5MC43IDcyLjIgNTEuNCAwIDk0LjQtMTAuNSAxMzMuNi00NC4xIDU3LjEtNTEuNCA1NC4yLTE0OS4yIDIwLjMtMTg5LjZ6Il0KICAgIH07CiAgICBmYUNyZWF0aXZlQ29tbW9uc1BkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtcGQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlYyIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2em0wIDQ0OS41Yy0xMzkuMiAwLTIzNS44LTEzOC0xOTAuMi0yNjcuOWw3OC44IDM1LjFjLTIuMSAxMC41LTMuMyAyMS41LTMuMyAzMi45IDAgOTkgNzMuOSAxMjYuOSAxMjAuNCAxMjYuOSAyMi45IDAgNTMuNS02LjcgNzkuNC0yOS41TDMwNSAzMTEuMWMtNS41IDYuMy0xNy42IDE2LjctMzYuMyAxNi43LTM3LjggMC01My43LTM5LjktNTMuOS03MS45IDIzMC40IDEwMi42IDIxNi41IDk2LjUgMjE3LjkgOTYuOC0zNC4zIDYyLjQtMTAwLjYgMTA0LjgtMTc2LjcgMTA0Ljh6bTE5NC4yLTE1MGwtMjI0LTEwMGMxOC44LTM0IDU0LjktMzAuNyA3NC43LTExbDQwLjQtNDEuNmMtMjcuMS0yMy4zLTU4LTI3LjUtNzguMS0yNy41LTQ3LjQgMC04MC45IDIwLjUtMTAwLjcgNTEuNkw4Ny42IDE0NS42YzM2LjEtNTQuOSA5OC4xLTkxLjIgMTY4LjUtOTEuMiAxMTEuMSAwIDIwMS41IDkwLjQgMjAxLjUgMjAxLjUgMCAxOC0yLjQgMzUuNC02LjggNTItLjMtLjEtLjQtLjItLjYtLjR6Il0KICAgIH07CiAgICBmYUVhcmx5YmlyZHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZWFybHliaXJkcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzlhIiwgIk0zMjkuMyA0Ny41YzEuMi0xMyAyMS4zLTE0IDM2LjYtOC43IC45IC4zIDI2LjIgOS43IDE5IDE1LjItMjcuOS03LjQtNTYuNCAxOC4yLTU1LjYtNi41em0tMjAxIDYuOWMzMC43LTguMSA2MiAyMCA2MS4xLTcuMS0xLjMtMTQuMi0yMy40LTE1LjMtNDAuMi05LjYtMSAuMy0yOC43IDEwLjUtMjAuOSAxNi43ek0zMzUuNSAxNjBhMTYgMTYgMCAxIDAgMCAzMiAxNiAxNiAwIDEgMCAwLTMyem0tMTU5LjcgMGExNiAxNiAwIDEgMCAwIDMyIDE2IDE2IDAgMSAwIDAtMzJ6TTQ5NC4zIDMyMy4yYy05LjkgMjQtNDAuNyAxMS02My45LTEuMi0xMy41IDY5LjEtNTguMSAxMTEuNC0xMjYuMyAxMjQuMiAuMyAuOS0yLS4xIDI0IDEgMzMuNiAxLjQgNjMuOC0zLjEgOTcuNC04LTE5LjgtMTMuOC0xMS40LTM3LjEtOS44LTM4LjEgMS40LS45IDE0LjcgMS43IDIxLjYgMTEuNSA4LjYtMTIuNSAyOC40LTE0LjggMzAuMi0xMy42IDEuNiAxLjEgNi42IDIwLjktNi45IDM0LjYgNC43LS45IDguMi0xLjYgOS44LTIuMSAyLjYtLjggMTcuNyAxMS4zIDMuMSAxMy4zLTE0LjMgMi4zLTIyLjYgNS4xLTQ3LjEgMTAuOC00NS45IDEwLjctODUuOSAxMS44LTExNy43IDEyLjhsMSAxMS42YzMuOCAxOC4xLTIzLjQgMjQuMy0yNy42IDYuMiAuOCAxNy45LTI3LjEgMjEuOC0yOC40LTFsLS41IDUuM2MtLjcgMTguNC0yOC40IDE3LjktMjguMy0uNi03LjUgMTMuNS0yOC4xIDYuOC0yNi40LTguNWwxLjItMTIuNGMtMzYuNyAuOS01OS43IDMuMS02MS44IDMuMS0yMC45IDAtMjAuOS0zMS42IDAtMzEuNiAyLjQgMCAyNy43IDEuMyA2My4yIDIuOC02MS4xLTE1LjUtMTAzLjctNTUtMTE0LjktMTE4LjItMjUgMTIuOC01Ny41IDI2LjgtNjguMiAuOC0xMC41LTI1LjQgMjEuNS00Mi42IDY2LjgtNzMuNCAuNy02LjYgMS42LTEzLjMgMi43LTE5LjgtMTQuNC0xOS42LTExLjYtMzYuMy0xNi4xLTYwLjQtMTYuOCAyLjQtMjMuMi05LjEtMjMuNi0yMy4xIC4zLTcuMyAyLjEtMTQuOSAyLjQtMTUuNCAxLjEtMS44IDEwLjEtMiAxMi43LTIuNiA2LTMxLjcgNTAuNi0zMy4yIDkwLjktMzQuNSAxOS43LTIxLjggNDUuMi00MS41IDgwLjktNDguMy0xNS4zLTE5LjQtMy40LTM5LjktMi40LTQwLjQgMS43LS44IDIxLjIgNC4zIDI2LjMgMjMuMiA1LjItOC44IDE4LjMtMTEuNCAxOS42LTEwLjcgMS4xIC42IDYuNCAxNS00LjkgMjUuOSA0MC4zIDMuNSA3Mi4yIDI0LjcgOTYgNTAuNyAzNi4xIDEuNSA3MS44IDUuOSA3Ny4xIDM0IDIuNyAuNiAxMS42IC44IDEyLjcgMi42IC4zIC41IDIuMSA4LjEgMi40IDE1LjQtLjUgMTMuOS02LjggMjUuNC0yMy42IDIzLjEtMy4yIDE3LjMtMi43IDMyLjktOC43IDQ3LjcgMi40IDExLjcgNCAyMy44IDQuOCAzNi40IDM3IDI1LjQgNzAuMyA0Mi41IDYwLjMgNjYuOXpNMjIzLjUgMTU5LjljLjktNDQtMzcuOS00Mi4yLTc4LjYtNDAuMy0yMS43IDEtMzguOSAxLjktNDUuNSAxMy45LTExLjQgMjAuOSA1LjkgOTIuOSAyMy4yIDEwMS4yIDkuOCA0LjcgNzMuNCA3LjkgODYuMy03LjEgOC4yLTkuNCAxNS00OS40IDE0LjYtNjcuN3ptNTIgNTguM2MtNC4zLTEyLjQtNi0zMC4xLTE1LjMtMzIuNy0yLS41LTktLjUtMTEgMC0xMCAyLjgtMTAuOCAyMi4xLTE3IDM3LjIgMTUuNCAwIDE5LjMgOS43IDIzLjcgOS43IDQuMyAwIDYuMy0xMS4zIDE5LjYtMTQuMnptMTM1LjctODQuN2MtNi42LTEyLjEtMjQuOC0xMi45LTQ2LjUtMTMuOS00MC4yLTEuOS03OC4yLTMuOC03Ny4zIDQwLjMtLjUgMTguMyA1IDU4LjMgMTMuMiA2Ny44IDEzIDE0LjkgNzYuNiAxMS44IDg2LjMgNy4xIDE1LjgtNy42IDM2LjUtNzguOSAyNC4zLTEwMS4zeiJdCiAgICB9OwogICAgZmFTcXVhcmVPZG5va2xhc3NuaWtpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1vZG5va2xhc3NuaWtpIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbIm9kbm9rbGFzc25pa2ktc3F1YXJlIl0sICJmMjY0IiwgIk0yMjQgMTM3LjFjLTUuNC0uMy0xMC44IC42LTE1LjkgMi40cy05LjcgNC44LTEzLjYgOC41LTcgOC4yLTkuMiAxMy4yLTMuMiAxMC4zLTMuMiAxNS43IDEuMSAxMC44IDMuMiAxNS43IDUuMyA5LjUgOS4yIDEzLjIgOC42IDYuNiAxMy42IDguNSAxMC41IDIuNyAxNS45IDIuNGM1LjQgLjMgMTAuOC0uNiAxNS45LTIuNHM5LjctNC44IDEzLjYtOC41IDctOC4yIDkuMi0xMy4yIDMuMi0xMC4zIDMuMi0xNS43LTEuMS0xMC44LTMuMi0xNS43LTUuMy05LjUtOS4yLTEzLjItOC42LTYuNi0xMy42LTguNS0xMC41LTIuNy0xNS45LTIuNHpNMzg0IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTIyNCAyNThhODEgODEgMCAxIDEgMC0xNjIuMSA4MSA4MSAwIDEgMSAwIDE2Mi4xem01OS4zIDYuMmMxNi44LTEzLjIgMjkuNS01LjUgMzQuMSAzLjYgNy44IDE2LTEuMSAyMy43LTIxLjUgMzctMTcuMSAxMC45LTQwLjcgMTUuMi01Ni4yIDE2LjhsMTMgMTIuOSA0Ny43IDQ3LjdjMTcuNCAxNy45LTExIDQ1LjgtMjguNiAyOC42LTEyLTEyLjItMjkuNS0yOS43LTQ3LjctNDcuOWwtNDcuNyA0Ny45Yy0xNy43IDE3LjItNDYtMTEtMjguNC0yOC42IDMuNy0zLjcgNy45LTcuOSAxMi41LTEyLjUgMTAuNC0xMC40IDIyLjYtMjIuNyAzNS4yLTM1LjJsMTIuOS0xMi45Yy0xNS40LTEuNi0zOS4zLTUuNy01Ni42LTE2LjgtMjAuMy0xMy4zLTI5LjMtMjAuOS0yMS40LTM3IDQuNi05LjEgMTcuMy0xNi44IDM0LjEtMy42IDAgMCAyMi43IDE4IDU5LjMgMThzNTkuMy0xOCA1OS4zLTE4eiJdCiAgICB9OwogICAgZmFPZG5va2xhc3NuaWtpU3F1YXJlID0gZmFTcXVhcmVPZG5va2xhc3NuaWtpOwogICAgZmFNYXJrZG93biA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtYXJrZG93biIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNjBmIiwgIk01OTMuOCA1OS4xbC01NDcuNiAwQzIwLjcgNTkuMSAwIDc5LjggMCAxMDUuMkwwIDQwNi43YzAgMjUuNSAyMC43IDQ2LjIgNDYuMiA0Ni4ybDU0Ny43IDBjMjUuNSAwIDQ2LjItMjAuNyA0Ni4xLTQ2LjFsMC0zMDEuNmMwLTI1LjQtMjAuNy00Ni4xLTQ2LjItNDYuMXpNMzM4LjUgMzYwLjZsLTYxLjUgMCAwLTEyMC02MS41IDc2LjktNjEuNS03Ni45IDAgMTIwLTYxLjcgMCAwLTIwOS4yIDYxLjUgMCA2MS41IDc2LjkgNjEuNS03Ni45IDYxLjUgMCAwIDIwOS4yIC4yIDB6bTEzNS4zIDMuMWwtOTIuMy0xMDcuNyA2MS41IDAgMC0xMDQuNiA2MS41IDAgMCAxMDQuNiA2MS41IDAtOTIuMiAxMDcuN3oiXQogICAgfTsKICAgIGZhVHlwbzMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidHlwbzMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQyYiIsICJNMTc4LjcgNzguNGMwLTI0LjcgNS40LTMyLjQgMTMuOS0zOS40LTY5LjUgOC41LTE0OS4zIDM0LTE3Ni4zIDY2LjQtNS40IDcuNy05LjMgMjAuOC05LjMgMzcuMSAwIDEwMy41IDEwNi44IDMzNy41IDE4NC4xIDMzNy41IDM2LjMgMCA5Ny4zLTU5LjUgMTQ2LjctMTM5LTcgMi4zLTExLjYgMi4zLTE4LjUgMi4zLTU3LjIgMC0xNDAuNi0xOTguNS0xNDAuNi0yNjQuOXpNMzAxLjUgMzJjLTMwLjEgMC00MS43IDUuNC00MS43IDM2LjMgMCA2Ni40IDUzLjggMTk4LjUgMTAxLjcgMTk4LjUgMjYuMyAwIDc4LjgtOTkuNyA3OC44LTE4Mi4zIDAtNDAuOS02Ny01Mi41LTEzOC44LTUyLjV6Il0KICAgIH07CiAgICBmYUpvb21sYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJqb29tbGEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFhYSIsICJNLjYgOTIuMWMwLTMzLjMgMjYuOC02MC4xIDU5LjgtNjAuMSAzMCAwIDU0LjUgMjEuOSA1OS4yIDUwLjIgMzIuNi03LjYgNjcuMSAuNiA5Ni41IDMwbC00NC4zIDQ0LjNjLTIwLjUtMjAuNS00Mi42LTE2LjMtNTUuNC0zLjUtMTQuMyAxNC4zLTE0LjMgMzcuOSAwIDUyLjJsOTkuNSA5OS41LTQ0IDQ0LjNjLTg3LjctODcuMi00OS43LTQ5LjctOTkuOC05OS43LTI2LjgtMjYuNS0zNS02NC44LTI0LjgtOTguOS0yNi45LTUuOC00Ni43LTI5LjctNDYuNy01OC4zek0xMzAuMSAyMDguNWw0NC4zIDQ0LjNjMTAtMTAgODkuNy04OS43IDk5LjctOTkuOCAxNC4zLTE0LjMgMzcuNi0xNC4zIDUxLjkgMCAxMi44IDEyLjggMTcgMzUtMy41IDU1LjRsNDQgNDQuM2MzMS4yLTMxLjIgMzguNS02Ny42IDI4LjktMTAxLjIgMjkuMi00LjEgNTEuOS0yOS4yIDUxLjktNTkuNSAwLTMzLjItMjYuOC02MC4xLTU5LjgtNjAuMS0zMC4zIDAtNTUuNCAyMi41LTU5LjUgNTEuNi0zMy44LTkuOS03MS43LTEuNS05OC4zIDI1LjEtMTguMyAxOS4xLTcxLjEgNzEuNS05OS42IDk5Ljl6TTM5Ni40IDM2MC43YzguMi0zMi43LS45LTY4LjUtMjYuMy05My45LTExLjgtMTIuMiA1IDQuNy05OS41LTk5LjdsLTQ0LjMgNDQuMyA5OS43IDk5LjdjMTQuMyAxNC4zIDE0LjMgMzcuNiAwIDUxLjktMTIuOCAxMi44LTM1IDE3LTU1LjQtMy41bC00NCA0NC4zYzI3LjYgMzAuMiA2OCAzOC44IDEwMi43IDI4IDUuNSAyNy40IDI5LjcgNDguMSA1OC45IDQ4LjEgMzMgMCA1OS44LTI2LjggNTkuOC02MC4xIDAtMzAuMi0yMi41LTU1LTUxLjYtNTkuMXptLTg0LjMtNTMuMWwtNDQtNDQuM2MtODcgODYuNC01MC40IDUwLjQtOTkuNyA5OS44LTE0LjMgMTQuMy0zNy42IDE0LjMtNTEuOSAwLTEzLjEtMTMuNC0xNi45LTM1LjMgMy4yLTU1LjRsLTQ0LTQ0LjNjLTMwLjIgMzAuMi0zOCA2NS4yLTI5LjUgOTguMy0yNi43IDYtNDYuMiAyOS45LTQ2LjIgNTguMiAwIDMzLjMgMjYuOCA2MC4xIDU5LjggNjAuMSAyOC42IDAgNTIuNS0xOS44IDU4LjYtNDYuNyAzMi43IDguMiA2OC41LS42IDk0LjItMjYgMzIuMS0zMiAxMi4yLTEyLjQgOTkuNS05OS43eiJdCiAgICB9OwogICAgZmFXZWl4aW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2VpeGluIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxZDciLCAiTTM4NS4yIDE2Ny42YzYuNCAwIDEyLjYgLjMgMTguOCAxLjEtMTYuNi03OC40LTEwMC43LTEzNi43LTE5Ni4zLTEzNi43LTEwNy4yIDAtMTk0LjcgNzIuOC0xOTQuNyAxNjUuNCAwIDUzLjQgMjkuMyA5Ny41IDc3LjkgMTMxLjZsLTE5LjMgNTguNiA2OC0zNC4xYzI0LjQgNC44IDQzLjggOS43IDY4LjIgOS43IDYuMiAwIDEyLjEtLjMgMTguMy0uOC00LTEyLjktNi4yLTI2LjYtNi4yLTQwLjgtLjEtODQuOSA3Mi45LTE1NCAxNjUuMy0xNTR6TTI4MC43IDExNC43YzE0LjUgMCAyNC4yIDkuNyAyNC4yIDI0LjQgMCAxNC41LTkuNyAyNC4yLTI0LjIgMjQuMi0xNC44IDAtMjkuMy05LjctMjkuMy0yNC4yIC4xLTE0LjcgMTQuNi0yNC40IDI5LjMtMjQuNHpNMTQ0LjMgMTYzLjNjLTE0LjUgMC0yOS4zLTkuNy0yOS4zLTI0LjIgMC0xNC44IDE0LjgtMjQuNCAyOS4zLTI0LjQgMTQuOCAwIDI0LjQgOS43IDI0LjQgMjQuNCAwIDE0LjYtOS42IDI0LjItMjQuNCAyNC4yek01NjMgMzE5LjRjMC03Ny45LTc3LjktMTQxLjMtMTY1LjQtMTQxLjMtOTIuNyAwLTE2NS40IDYzLjQtMTY1LjQgMTQxLjNTMzA1IDQ2MC43IDM5Ny42IDQ2MC43YzE5LjMgMCAzOC45LTUuMSA1OC42LTkuOWw1My40IDI5LjMtMTQuOC00OC42QzUzNCA0MDIuMSA1NjMgMzYzLjIgNTYzIDMxOS40ek0zNDMuOSAyOTQuOWMtOS43IDAtMTkuMy05LjctMTkuMy0xOS42IDAtOS43IDkuNy0xOS4zIDE5LjMtMTkuMyAxNC44IDAgMjQuNCA5LjcgMjQuNCAxOS4zIDAgMTAtOS43IDE5LjYtMjQuNCAxOS42em0xMDcuMSAwYy05LjcgMC0xOS4zLTkuNy0xOS4zLTE5LjYgMC05LjcgOS43LTE5LjMgMTkuMy0xOS4zIDE0LjUgMCAyNC40IDkuNyAyNC40IDE5LjMgLjEgMTAtOS45IDE5LjYtMjQuNCAxOS42eiJdCiAgICB9OwogICAgZmFHcnVudCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJncnVudCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmM2FkIiwgIk02MS42IDE4OS4zYy0xLjEgMTAgNS4yIDE5LjEgNS4yIDE5LjEgLjctNy41IDIuMi0xMi44IDQtMTYuNiAuNCAxMC4zIDMuMiAyMy41IDEyLjggMzQuMSA2LjkgNy42IDM1LjYgMjMuMyA1NC45IDYuMSAxIDIuNCAyLjEgNS4zIDMgOC41IDIuOSAxMC4zLTIuNyAyNS4zLTIuNyAyNS4zczE1LjEtMTcuMSAxMy45LTMyLjVjMTAuOC0uNSAyMS40LTguNCAyMS4xLTE5LjUgMCAwLTE4LjkgMTAuNC0zNS41LTguOC05LjctMTEuMi00MC45LTQyLTgzLjEtMzEuOCA0LjMgMSA4LjkgMi40IDEzLjUgNC4xbC0uMSAwYy00LjIgMi02LjUgNy4xLTcgMTJ6bTI4LjMtMS44YzE5LjUgMTEgMzcuNCAyNS43IDQ0LjkgMzctNS43IDMuMy0yMS43IDEwLjQtMzgtMS43LTEwLjMtNy42LTkuOC0yNi4yLTYuOS0zNS4zek0yMzIgMjMzLjNjLTEuMiAxNS41IDEzLjkgMzIuNSAxMy45IDMyLjVzLTUuNi0xNS0yLjctMjUuM2MuOS0zLjIgMi02IDMtOC41IDE5LjMgMTcuMyA0OCAxLjUgNTQuOC02LjEgOS42LTEwLjYgMTIuMy0yMy44IDEyLjgtMzQuMSAxLjggMy44IDMuNCA5LjEgNCAxNi42IDAgMCA2LjQtOS4xIDUuMi0xOS4xLS42LTUtMi45LTEwLTctMTEuOGwtLjEgMGM0LjYtMS44IDkuMi0zLjIgMTMuNS00LjEtNDIuMy0xMC4yLTczLjQgMjAuNi04My4xIDMxLjgtMTYuNyAxOS4yLTM1LjUgOC44LTM1LjUgOC44LS4yIDEwLjkgMTAuNCAxOC45IDIxLjIgMTkuM3ptNjIuNy00NS44YzMgOS4xIDMuNCAyNy43LTcgMzUuNC0xNi4zIDEyLjEtMzIuMiA1LTM3LjkgMS42IDcuNS0xMS40IDI1LjQtMjYgNDQuOS0zN3ptLTEzNC40IDIzMWwtMjkuNCAwYy01LjUgMC04LjIgMS42LTkuNSAyLjktMS45IDItMi4yIDQuNy0uOSA4LjEgMy41IDkuMSAxMS40IDE2LjUgMTMuNyAxOC42IDMuMSAyLjcgNy41IDQuMyAxMS44IDQuMyA0LjQgMCA4LjMtMS43IDExLTQuNiA3LjUtOC4yIDExLjktMTcuMSAxMy0xOS44IC42LTEuNSAxLjMtNC41LS45LTYuOC0xLjgtMS44LTQuNy0yLjctOC44LTIuN3pNMzQ5LjUgMzE3LjNjLTIuNCAxNy45LTEzIDMzLjgtMjQuNiA0My43LTMuMS0yMi43LTMuNy01NS41LTMuNy02Mi40IDAtMTQuNyA5LjUtMjQuNSAxMi4yLTI2LjEgMi41LTEuNSA1LjQtMyA4LjMtNC42IDE4LTkuNiA0MC40LTIxLjYgNDAuNC00My43IDAtMTYuMi05LjMtMjMuMi0xNS40LTI3LjgtLjgtLjYtMS41LTEuMS0yLjItMS43LTIuMS0xLjctMy43LTMtNC4zLTQuNC00LjQtOS44LTMuNi0zNC4yLTEuNy0zNy42IC42LS42IDE2LjctMjAuOSAxMS44LTM5LjItMi03LjQtNi45LTEzLjMtMTQuMS0xNy01LjMtMi43LTExLjktNC4yLTE5LjUtNC41LS4xLTItLjUtMy45LS45LTUuOS0uNi0yLjYtMS4xLTUuMy0uOS04LjEgLjQtNC43IC44LTkgMi4yLTExLjMgOC40LTEzLjMgMjguOC0xNy42IDI5LTE3LjZsMTIuMy0yLjQtOC4xLTkuNWMtLjEtLjItMTcuMy0xNy41LTQ2LjMtMTcuNS03LjkgMC0xNiAxLjMtMjQuMSAzLjktMjQuMiA3LjgtNDIuOSAzMC41LTQ5LjQgMzkuMy0zLjEtMS02LjMtMS45LTkuNi0yLjctNC4yLTE1LjggOS0zOC41IDktMzguNXMtMTMuNi0zLTMzLjcgMTUuMmMtMi42LTYuNS04LjEtMjAuNS0xLjgtMzcuMi0yOS41IDEwLjQtMzYuOSAyNi4zLTM5LjEgNDAuNy03LjYtNS40LTYuNy0yMy4xLTcuMi0yNy42LTcuNSAuOS0yOS4yIDIxLjktMjguMiA0OC4zLTIgLjUtMy45IDEuMS01LjkgMS43LTYuNS04LjgtMjUuMS0zMS41LTQ5LjQtMzkuMy03LjktMi4yLTE2LTMuNS0yMy45LTMuNS0yOSAwLTQ2LjEgMTcuMy00Ni4zIDE3LjVsLTguMSA5LjQgMTIuMyAyLjRjLjIgMCAyMC42IDQuMyAyOSAxNy42IDEuNCAyLjIgMS44IDYuNiAyLjIgMTEuMyAuMiAyLjgtLjQgNS41LS45IDguMS0uNCAxLjktLjggMy45LS45IDUuOS03LjcgLjMtMTQuMiAxLjgtMTkuNSA0LjUtNy4yIDMuNy0xMi4xIDkuNi0xNC4xIDE3LTUgMTguMiAxMS4yIDM4LjUgMTEuOCAzOS4yIDEuOSAzLjQgMi43IDI3LjgtMS43IDM3LjYtLjYgMS40LTIuMiAyLjctNC4zIDQuNC0uNyAuNS0xLjQgMS4xLTIuMiAxLjctNi4xIDQuNi0xNS40IDExLjctMTUuNCAyNy44IDAgMjIuMSAyMi40IDM0LjEgNDAuNCA0My43IDMgMS42IDUuOCAzLjEgOC4zIDQuNiAyLjcgMS42IDEyLjIgMTEuNCAxMi4yIDI2LjEgMCA2LjktLjYgMzkuNy0zLjcgNjIuNC0xMS42LTkuOS0yMi4yLTI1LjktMjQuNi00My44IDAgMC0yOS4yIDIyLjYtMjAuNiA3MC44IDUuMiAyOS41IDIzLjIgNDYuMSA0NyA1NC43IDguOCAxOS4xIDI5LjQgNDUuNyA2Ny4zIDQ5LjYgMTQuNCAxMS44IDM0LjQgMTkuNSA2My42IDE5LjVsLjIgMGMyOS4xIDAgNDkuMS03LjcgNjMuNi0xOS41IDM3LjktMy45IDU4LjUtMzAuNSA2Ny4zLTQ5LjYgMjMuOC04LjcgNDEuNy0yNS4yIDQ3LTU0LjcgOC4yLTQ4LjQtMjEuMS03MC45LTIxLjEtNzAuOXpNMzA2IDM3LjdjNS42LTEuOCAxMS42LTIuNyAxNy43LTIuNyAxMSAwIDE5LjkgMyAyNC43IDUtMy4xIDEuNC02LjQgMy4yLTkuNyA1LjMtMi40LS40LTUuNi0uOC05LjItLjgtMTAuNSAwLTIwLjUgMy4xLTI4LjcgOC45LTEyLjMgOC43LTE4IDE2LjktMjAuNyAyMi40LTIuMi0xLjMtNC41LTIuNS03LjEtMy43LTEuNi0uOC0zLjEtMS41LTQuNy0yLjIgNi4xLTkuMSAxOS45LTI2LjUgMzcuNy0zMi4yem0yMSAxOC4yYy0uOCAxLTEuNiAyLjEtMi4zIDMuMi0zLjMgNS4yLTMuOSAxMS42LTQuNCAxNy44LS41IDYuNC0xLjEgMTIuNS00LjQgMTctNC4yIC44LTguMSAxLjctMTEuNSAyLjctMi4zLTMuMS01LjYtNy0xMC41LTExLjIgMS40LTQuOCA1LjUtMTYuMSAxMy41LTIyLjUgNS42LTQuMyAxMi4yLTYuNyAxOS42LTd6TTQ1LjkgNDUuM2MtMy4zLTIuMi02LjYtNC05LjctNS4zIDQuOC0yIDEzLjctNSAyNC43LTUgNi4xIDAgMTIgLjkgMTcuNyAyLjcgMTcuOCA1LjggMzEuNiAyMy4yIDM3LjcgMzIuMS0xLjYgLjctMy4yIDEuNC00LjggMi4yLTIuNSAxLjItNC45IDIuNS03LjEgMy43LTIuNi01LjQtOC4zLTEzLjctMjAuNy0yMi40LTguMy01LjgtMTguMi04LjktMjguOC04LjktMy40IC4xLTYuNiAuNS05IC45ek05MC42IDg1LjRjLTQuOSA0LjItOC4zIDgtMTAuNSAxMS4yLTMuNC0uOS03LjMtMS45LTExLjUtMi43LTMuMy00LjQtMy44LTEwLjUtNC4zLTE2LjktLjUtNi4yLTEuMS0xMi42LTQuNC0xNy44LS43LTEuMS0xLjUtMi4yLTIuMy0zLjIgNy40IC4zIDE0IDIuNiAxOS41IDcgOCA2LjMgMTIuMSAxNy42IDEzLjUgMjIuNHpNNTguNCAyNTkuOWMtMi43LTEuNi01LjYtMy4xLTguNC00LjYtMTQuOS04LTMwLjItMTYuMy0zMC4yLTMwLjUgMC0xMS4xIDQuMy0xNC42IDguOS0xOC4ybC41LS40Yy43LS42IDEuNC0xLjIgMi4yLTEuOC0uOSA3LjItMS45IDEzLjMtMi43IDE0LjkgMCAwIDEyLjEtMTUgMTUuNy00NC4zIDEuNC0xMS41LTEuMS0zNC4zLTUuMS00MyAuMiA0LjkgMCA5LjgtLjMgMTQuNC0uNC0uOC0uOC0xLjYtMS4zLTIuMi0zLjItNC0xMS44LTE3LjUtOS40LTI2LjYgLjktMy41IDMuMS02IDYuNy03LjggMy44LTEuOSA4LjgtMi45IDE1LjEtMi45IDEyLjMgMCAyNS45IDMuNyAzMi45IDYgMjUuMSA4IDU1LjQgMzAuOSA2NC4xIDM3LjcgLjIgLjIgLjQgLjMgLjQgLjNsNS42IDMuOS0zLjUtNS44Yy0uMi0uMy0xOS4xLTMxLjQtNTMuMi00Ni41IDItMi45IDcuNC04LjEgMjEuNi0xNS4xIDIxLjQtMTAuNSA0Ni41LTE1LjggNzQuMy0xNS44IDI3LjkgMCA1Mi45IDUuMyA3NC4zIDE1LjggMTQuMiA2LjkgMTkuNiAxMi4yIDIxLjYgMTUuMS0zNCAxNS4xLTUyLjkgNDYuMi01My4xIDQ2LjVsLTMuNSA1LjggNS42LTMuOXMuMi0uMSAuNC0uM2M4LjctNi44IDM5LTI5LjggNjQuMS0zNy43IDctMi4yIDIwLjYtNiAzMi45LTYgNi4zIDAgMTEuMyAxIDE1LjEgMi45IDMuNSAxLjggNS43IDQuNCA2LjcgNy44IDIuNSA5LjEtNi4xIDIyLjYtOS40IDI2LjYtLjUgLjYtLjkgMS4zLTEuMyAyLjItLjMtNC42LS41LTkuNS0uMy0xNC40LTQgOC44LTYuNSAzMS41LTUuMSA0MyAzLjYgMjkuMyAxNS43IDQ0LjMgMTUuNyA0NC4zLS44LTEuNi0xLjgtNy43LTIuNy0xNC45IC43IC42IDEuNSAxLjIgMi4yIDEuOGwuNSAuNGM0LjYgMy43IDguOSA3LjEgOC45IDE4LjIgMCAxNC4yLTE1LjQgMjIuNS0zMC4yIDMwLjUtMi45IDEuNS01LjcgMy4xLTguNCA0LjYtOC43IDUtMTggMTYuNy0xOS4xIDM0LjItLjkgMTQuNiAuOSA0OS45IDMuNCA3NS45LTEyLjQgNC44LTI2LjcgNi40LTM5LjcgNi44LTItNC4xLTMuOS04LjUtNS41LTEzLjEtLjctMi0xOS42LTUxLjEtMjYuNC02Mi4yIDUuNSAzOSAxNy41IDczLjcgMjMuNSA4OS42LTMuNS0uNS03LjMtLjctMTEuNy0uN2wtMTE3IDBjLTQuNCAwLTguMyAuMy0xMS43IC43IDYtMTUuOSAxOC4xLTUwLjYgMjMuNS04OS42LTYuOCAxMS4yLTI1LjcgNjAuMy0yNi40IDYyLjItMS42IDQuNi0zLjUgOS01LjUgMTMuMS0xMy0uNC0yNy4yLTItMzkuNy02LjggMi41LTI2IDQuMy02MS4yIDMuNC03NS45LS45LTE3LjQtMTAuMy0yOS4yLTE5LTM0LjJ6TTM1LjEgNDA0LjZjLTEyLjEtMjAtOC43LTU0LjEtMy43LTU5LjEgMTAuOSAzNC40IDQ3LjIgNDQuMyA3NC40IDQ1LjQtMi43IDQuMi01LjIgNy42LTcgMTBsLTEuNCAxLjRjLTcuMiA3LjgtOC42IDE4LjUtNC4xIDMxLjgtMjIuNy0uMS00Ni4zLTkuOC01OC4yLTI5LjV6bTQ1LjcgNDMuNWM2IDEuMSAxMi4yIDEuOSAxOC42IDIuNCAzLjUgOCA3LjQgMTUuOSAxMi4zIDIzLjEtMTQuNC01LjktMjQuNC0xNi0zMC45LTI1LjV6bTExMS41IDUwLjFjLTYwLjYtLjEtNzguMy00NS44LTg0LjktNjQuNy0zLjctMTAuNS0zLjQtMTguMiAuOS0yMy4xIDIuOS0zLjMgOS41LTcuMiAyNC42LTcuMmwxMTguOCAwYzE1LjEgMCAyMS44IDMuOSAyNC42IDcuMiA0LjIgNC44IDQuNSAxMi42IC45IDIzLjEtNi42IDE4LjgtMjQuMyA2NC42LTg0LjkgNjQuN3ptODAuNi0yNC42YzQuOS03LjIgOC44LTE1LjEgMTIuMy0yMy4xIDYuNC0uNSAxMi42LTEuMyAxOC42LTIuNC02LjUgOS41LTE2LjUgMTkuNi0zMC45IDI1LjV6bTc2LjYtNjljLTEyIDE5LjctMzUuNiAyOS4zLTU4LjEgMjkuNyA0LjUtMTMuMyAzLjEtMjQuMS00LjEtMzEuOC0uNC0uNS0uOS0xLTEuNC0xLjUtMS44LTIuNC00LjMtNS44LTctMTAgMjcuMi0xLjIgNjMuNS0xMSA3NC40LTQ1LjQgNSA1IDguNCAzOS4xLTMuOCA1OXpNMTkyLjIgMTg3LjdsLjIgMGMxMi43LS4xIDI3LjItMTcuOCAyNy4yLTE3LjgtOS45IDYtMTguOCA4LjEtMjcuMyA4LjMtOC41LS4yLTE3LjQtMi4zLTI3LjMtOC4zIDAgMCAxNC41IDE3LjYgMjcuMiAxNy44em02MS43IDIzMC43bC0yOS40IDBjLTQuMiAwLTcuMiAuOS04LjkgMi43LTIuMiAyLjMtMS41IDUuMi0uOSA2LjcgMSAyLjYgNS41IDExLjMgMTMgMTkuMyAyLjcgMi45IDYuNiA0LjUgMTEgNC41czguNy0xLjYgMTEuOC00LjJjMi4zLTIgMTAuMi05LjIgMTMuNy0xOC4xIDEuMy0zLjMgMS02LS45LTcuOS0xLjMtMS4zLTQtMi45LTkuNC0zeiJdCiAgICB9OwogICAgZmFSb2Nrcm1zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJvY2tybXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNlOSIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MTMuNCA0MjcuNWwtOTAgMC0xMTItMTMxLjNjLTE3LjktMjAuNC0zLjktNTYuMSAyNi42LTU2LjFsNzUuMyAwLTg0LjYtOTkuMy04NC4zIDk4LjktOTAgMCAxNDcuMS0xNzIuNWMxNC40LTE4LjQgNDEuMy0xNy4zIDU0LjUgMEw0MTMuNyAyNTIuM2MxOSAyMi44IDIgNTcuMi0yNy42IDU2LjEtLjYgMC03NC4yIC4yLTc0LjIgLjJMNDEzLjQgNDI3LjV6Il0KICAgIH07CiAgICBmYVVuc3BsYXNoID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVuc3BsYXNoIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwN2MiLCAiTTQ0OCAyMzAuMmwwIDI0OS44LTQ0OCAwIDAtMjQ5LjggMTQxLjEgMCAwIDEyNC45IDE2NS43IDAgMC0xMjQuOSAxNDEuMSAwek0zMDYuOSAzMmwtMTY1LjcgMCAwIDEyNC45IDE2NS43IDAgMC0xMjQuOXoiXQogICAgfTsKICAgIGZhU3F1YXJlSW5zdGFncmFtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1pbnN0YWdyYW0iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiaW5zdGFncmFtLXNxdWFyZSJdLCAiZTA1NSIsICJNMTk0LjQgMjExLjdhNTMuMyA1My4zIDAgMSAwIDU5LjIgODguNiA1My4zIDUzLjMgMCAxIDAgLTU5LjItODguNnptMTQyLjMtNjguNGMtNS4yLTUuMi0xMS41LTkuMy0xOC40LTEyLTE4LjEtNy4xLTU3LjYtNi44LTgzLjEtNi41LTQuMSAwLTcuOSAuMS0xMS4yIC4xcy03LjIgMC0xMS40LS4xYy0yNS41LS4zLTY0LjgtLjctODIuOSA2LjUtNi45IDIuNy0xMy4xIDYuOC0xOC40IDEycy05LjMgMTEuNS0xMiAxOC40Yy03LjEgMTguMS02LjcgNTcuNy02LjUgODMuMiAwIDQuMSAuMSA3LjkgLjEgMTEuMXMwIDctLjEgMTEuMWMtLjIgMjUuNS0uNiA2NS4xIDYuNSA4My4yIDIuNyA2LjkgNi44IDEzLjEgMTIgMTguNHMxMS41IDkuMyAxOC40IDEyYzE4LjEgNy4xIDU3LjYgNi44IDgzLjEgNi41IDQuMSAwIDcuOS0uMSAxMS4yLS4xczcuMiAwIDExLjQgLjFjMjUuNSAuMyA2NC44IC43IDgyLjktNi41IDYuOS0yLjcgMTMuMS02LjggMTguNC0xMnM5LjMtMTEuNSAxMi0xOC40YzcuMi0xOCA2LjgtNTcuNCA2LjUtODMgMC00LjItLjEtOC4xLS4xLTExLjRzMC03LjEgLjEtMTEuNGMuMy0yNS41IC43LTY0LjktNi41LTgzLTIuNy02LjktNi44LTEzLjEtMTItMTguNGwwIC4yem0tNjcuMSA0NC41YzE4LjEgMTIuMSAzMC42IDMwLjkgMzQuOSA1Mi4ycy0uMiA0My41LTEyLjMgNjEuNmMtNiA5LTEzLjcgMTYuNi0yMi42IDIyLjZzLTE5IDEwLjEtMjkuNiAxMi4yYy0yMS4zIDQuMi00My41LS4yLTYxLjYtMTIuM3MtMzAuNi0zMC45LTM0LjktNTIuMiAuMi00My41IDEyLjItNjEuNiAzMC45LTMwLjYgNTIuMi0zNC45IDQzLjUgLjIgNjEuNiAxMi4ybC4xIDB6bTI5LjItMS4zYy0zLjEtMi4xLTUuNi01LjEtNy4xLTguNnMtMS44LTcuMy0xLjEtMTEuMSAyLjYtNy4xIDUuMi05LjggNi4xLTQuNSA5LjgtNS4yIDcuNi0uNCAxMS4xIDEuMSA2LjUgMy45IDguNiA3IDMuMiA2LjggMy4yIDEwLjZjMCAyLjUtLjUgNS0xLjQgNy4zcy0yLjQgNC40LTQuMSA2LjItMy45IDMuMi02LjIgNC4yLTQuOCAxLjUtNy4zIDEuNWMtMy44IDAtNy41LTEuMS0xMC42LTMuMmwtLjEgMHpNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTM1NyAzODljLTE4LjcgMTguNy00MS40IDI0LjYtNjcgMjUuOS0yNi40IDEuNS0xMDUuNiAxLjUtMTMyIDAtMjUuNi0xLjMtNDguMy03LjItNjctMjUuOXMtMjQuNi00MS40LTI1LjgtNjdjLTEuNS0yNi40LTEuNS0xMDUuNiAwLTEzMiAxLjMtMjUuNiA3LjEtNDguMyAyNS44LTY3czQxLjUtMjQuNiA2Ny0yNS44YzI2LjQtMS41IDEwNS42LTEuNSAxMzIgMCAyNS42IDEuMyA0OC4zIDcuMSA2NyAyNS44czI0LjYgNDEuNCAyNS44IDY3YzEuNSAyNi4zIDEuNSAxMDUuNCAwIDEzMS45LTEuMyAyNS42LTcuMSA0OC4zLTI1LjggNjdsMCAuMXoiXQogICAgfTsKICAgIGZhSW5zdGFncmFtU3F1YXJlID0gZmFTcXVhcmVJbnN0YWdyYW07CiAgICBmYUZpcnN0T3JkZXJBbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmlyc3Qtb3JkZXItYWx0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1MGEiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnptMCA3LjhhMjQwLjIgMjQwLjIgMCAxIDEgMCA0ODAuNCAyNDAuMiAyNDAuMiAwIDEgMSAwLTQ4MC40em0wIDIwLjVhMjE5LjcgMjE5LjcgMCAxIDAgMCA0MzkuNCAyMTkuNyAyMTkuNyAwIDEgMCAwLTQzOS40em0wIDguMmEyMTEuNSAyMTEuNSAwIDEgMSAwIDQyMyAyMTEuNSAyMTEuNSAwIDEgMSAwLTQyM3ptMTg2LjIgMjYwYy00LjQgMTcuMS0xMS4yIDMzLjUtMjAuMSA0OC43bC03NC4xLTM1LjkgNjEuNSA1NC44Yy0xMC42IDE0LjEtMjMuMiAyNi42LTM3LjIgMzcuM2wtNTQuOC02MS42IDM1LjkgNzQuM2MtMTUuMiA5LTMxLjYgMTUuOC00OC42IDIwLjJsLTI3LjMtNzguNSA0LjggODIuOWMtOC42IDEuMi0xNy40IDEuOC0yNi4zIDEuOHMtMTcuNy0uNi0yNi4zLTEuOGw0LjgtODIuNS0yNy4yIDc4Yy0xNy4xLTQuNS0zMy40LTExLjMtNDguNy0yMC4ybDM1LjktNzQuMy01NC45IDYxLjZjLTE0LTEwLjctMjYuNi0yMy4yLTM3LjItMzcuM2w2MS42LTU0LjktNzQuMyAzNS45QzgwLjcgMzM4IDc0IDMyMS43IDY5LjUgMzA0LjZsNzcuOC0yNy4xLTgyLjIgNC44Yy0xLjItOC42LTEuOC0xNy4zLTEuOC0yNi4yIDAtOSAuNi0xNy44IDEuOC0yNi41bDgyLjQgNC44LTc3LjktMjcuMmM0LjUtMTcuMSAxMS4zLTMzLjUgMjAuMi00OC43bDc0LjIgMzUuOS02MS41LTU0LjljMTAuNy0xNCAyMy4yLTI2LjYgMzcuMy0zNy4ybDU0LjggNjEuNS0zNS44LTc0LjJjMTUuMi04LjkgMzEuNi0xNS43IDQ4LjYtMjAuMWwyNi45IDc3LjItNC43LTgxLjZjOC42LTEuMiAxNy40LTEuOCAyNi4zLTEuOHMxNy43IC42IDI2LjMgMS44bC00LjcgODIuMiAyNy03Ny44YzE3LjMgNC41IDMzLjYgMTEuNCA0OC42IDIwLjJsLTM1LjggNzQuMSA1NC43LTYxLjVjMTQuMSAxMC43IDI2LjYgMjMuMiAzNy4yIDM3LjJsLTYxLjQgNTQuOCA3NC4xLTM1LjljOC45IDE1LjIgMTUuNyAzMS42IDIwLjIgNDguNmwtNzcuOCAyNy4xIDgyLjItNC43YzEuMiA4LjcgMS44IDE3LjUgMS44IDI2LjUgMCA4LjktLjYgMTcuNi0xLjggMjYuMmwtODIuMS00LjcgNzcuNyAyNy4xeiJdCiAgICB9OwogICAgZmFGdWxjcnVtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZ1bGNydW0iLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFtdLCAiZjUwYiIsICJNNjMuOCAxNjQuMUwyOC40IDIwNy43LTcgMTY0LjEgMjguNCAxMjAuNiA2My44IDE2NC4xek0xMTIuMiAwbC0yMC41IDE5OC4yLTUxIDU3LjggNTEgNTcuOCAyMC41IDE5OC4yIDAtMjExLjEtNDEuMS00NC45IDQxLjEtNDQuOSAwLTIxMS4xem03OS43IDE2NC4xbDM1LjQgNDMuNiAzNS40LTQzLjYtMzUuNC00My41LTM1LjQgNDMuNXptLTQ4LjUgNDdsNDEuMSA0NC45LTQxLjEgNDQuOSAwIDIxMS4xIDIwLjYtMTk4LjIgNTEtNTcuOC01MS01Ny44LTIwLjYtMTk4LjIgMCAyMTEuMXoiXQogICAgfTsKICAgIGZhQnJhdmVSZXZlcnNlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJyYXZlLXJldmVyc2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTYzZCIsICJNMjk4LjUgMGMzIDAgNS44IDEuMyA3LjggMy42bDM4LjEgNDRjLjUtLjEgMS0uMiAxLjUtLjMgOS4yLTEuNiAxOC42LTIuMiAyNy43LTEuMiAxMS42IDEuNCAyMS41IDUuNCAyOC45IDEyLjkgNy43IDcuOCAxNS40IDE1LjggMjIuNiAyMy42IDIuNSAyLjcgNC45IDUuMiA2LjkgNy40IC43IC44IDEuNCAxLjUgMS45IDIgMy40IDMuNyA0LjIgOC4xIDIuNyAxMS45bC05LjggMjQuNiAxMy4xIDM4LjFjLjcgMiAuOCA0LjEgLjIgNi4yLS4xIC40LS4xIC40LS41IDIuMWwtMS41IDUuOGMtMS42IDYuMy0zLjUgMTMuMy01LjQgMjAuOS01LjYgMjEuNi0xMS4yIDQzLjItMTYuNCA2My40LTEyLjkgNDkuOS0yMS40IDgyLjctMjMuNCA5MC45LTExLjEgNDQuNS0xOS45IDYwLTQ4LjMgODAuMy0yNC45IDE3LjgtNzYuOCA1My42LTg2LjggNjAtMSAuNi0yIDEuMy0zLjQgMi4zLS41IC40LTMuMiAyLjItMy45IDIuNy00LjkgMy4zLTguMyA1LjUtMTIuMSA3LjMtNC43IDIuMi05LjMgMy41LTEzLjkgMy41cy05LjEtMS4yLTEzLjktMy41Yy0zLjctMS44LTcuMi0zLjktMTIuMS03LjMtLjgtLjUtMy40LTIuNC0zLjktMi43LTEuNC0xLTIuNS0xLjctMy40LTIuMy0xMC02LjQtNjEuOS00Mi4xLTg2LjgtNjAtMjguNC0yMC40LTM3LjItMzUuOC00OC4zLTgwLjMtMi04LjItMTAuNS00MS0yMy4zLTkwLjUtNS4zLTIwLjYtMTAuOS00Mi4yLTE2LjUtNjMuOC0yLTcuNi0zLjgtMTQuNi01LjQtMjAuOWwtMS41LTUuOC0uNS0yLjFjLS41LTItLjQtNC4yIC4yLTYuMmwxMy4xLTM4LjEtOS45LTI0LjVjLTEuNS0zLjgtLjctOC4yIDItMTEuMiAxLjItMS4zIDEuOC0yIDIuNi0yLjggMi0yLjIgNC40LTQuNyA2LjktNy40IDcuMy03LjcgMTUtMTUuNyAyMi43LTIzLjUgNy40LTcuNSAxNy4zLTExLjYgMjguOS0xMi45IDkuMS0xLjEgMTguNS0uNSAyNy43IDEuMiAuNSAuMSAxIC4yIDEuNSAuM2wzOC4xLTQ0YzItMi40IDQuOC0zLjcgNy44LTMuN2wxNDggMHptLTQuNyAyMS4xbC0xMzguNiAwLTM5LjEgNDUuMWMtMi42IDMtNi43IDQuMy0xMC42IDMuMi0uMi0uMS0uNy0uMi0xLjUtLjQtMS4zLS4zLTIuOS0uNi00LjUtLjktNy40LTEuMy0xNC45LTEuOC0yMS43LTEtNy4zIC45LTEzIDMuMi0xNi42IDYuOS03LjYgNy43LTE1LjIgMTUuNi0yMi4zIDIzLjMtMS43IDEuOC0zLjMgMy41LTQuOCA1LjFsOC44IDIyYzEgMi40IDEgNSAuMiA3LjVMMjkuNyAxNzAuNmMuNCAxLjQgLjUgMS45IDEuMiA0LjggMS42IDYuMyAzLjUgMTMuMyA1LjQgMjAuOSA1LjYgMjEuNiAxMS4yIDQzLjIgMTYuNCA2My40IDEyLjkgNTAgMjEuNCA4Mi44IDIzLjQgOTEgMTAuMSA0MC4xIDE2LjQgNTEuMyA0MC4yIDY4LjMgMjQuNiAxNy42IDc2LjMgNTMuMiA4NS45IDU5LjMgMS4yIC44IDIuNSAxLjYgNCAyLjcgLjYgLjQgMy4yIDIuMiAzLjkgMi43IDQgMi44IDYuNyA0LjQgOS4yIDUuNiAyLjIgMSAzLjkgMS41IDUuMSAxLjVzMi45LS41IDUuMS0xLjVjMi41LTEuMiA1LjItMi44IDkuMi01LjYgLjctLjUgMy4zLTIuMyAzLjktMi43IDEuNi0xLjEgMi44LTEuOSA0LTIuNyA5LjYtNi4xIDYxLjMtNDEuNyA4NS45LTU5LjMgMjMuOC0xNy4xIDMwLjItMjguMiA0MC4xLTY4LjMgMi4xLTguMyAxMC41LTQxLjEgMjMuMy05MC43IDUuMy0yMC42IDEwLjktNDIuMiAxNi41LTYzLjggMi03LjYgMy44LTE0LjYgNS40LTIwLjkgLjctMi45IC45LTMuNCAxLjItNC44bC0xMy4zLTM4LjhjLS44LTIuNC0uOC01LjEgLjItNy41bDguOC0yMmMtMS41LTEuNi0zLjEtMy4zLTQuOC01LjEtNy4yLTcuNi0xNC43LTE1LjUtMjIuMy0yMy4zLTMuNy0zLjctOS4zLTYtMTYuNi02LjktNi44LS44LTE0LjQtLjMtMjEuNyAxLTEuNyAuMy0zLjIgLjYtNC41IC45LS44IC4yLTEuMyAuMy0xLjUgLjQtMy44IDEuMS03LjktLjItMTAuNi0zLjJMMjkzLjggMjEuMXpNMjI0LjUgMzE2YzIuOCAwIDIwLjkgNi41IDM1LjQgMTQuMXMyNSAxMyAyOC4zIDE1LjIgMS4zIDYuMi0xLjcgOC40LTQ0LjEgMzQuNi00OC4xIDM4LjItOS44IDkuNS0xMy44IDkuNS05LjgtNS45LTEzLjgtOS41LTQ1LjEtMzYtNDguMS0zOC4yLTUuMS02LjItMS43LTguNCAxMy45LTcuNSAyOC4zLTE1LjIgMzIuNS0xNC4xIDM1LjQtMTQuMWwtLjIgMHptLjEtMjMwLjdjLjcgMCA4LjggLjIgMjAuNSA0LjIgMTIuMyA0LjIgMjUuNyA5LjQgMzEuOSA5LjRzNTEuOS04LjkgNTEuOS04LjkgNTQuMiA2Ni43IDU0LjIgODEtNi44IDE4LTEzLjcgMjUuNC0zNi44IDM5LjgtNDAuNyA0My45LTExLjkgMTAuNS03LjEgMjEuOCAxMS43IDI1LjggMy45IDQwLjQtMjEgMjQuNC0yOS40IDIyLjgtMjguNC0xMi4yLTM1LjctMTcuMS0zMC41LTI0LjMtMzAuNS0zMS44IDI0LTIwLjggMjguNC0yMy45IDI0LjctMTQuOCAyNS4xLTE5LjQgLjMtNi01LjctMTcuNC0xNi43LTI2LjctMTQuOS0zNi44IDE5LjEtMTUuNCAzMS41LTIwLjIgMzYuMi0xMy43IDM5LjItMTUuMSAyLjItMi43LTYuOC0zLjYtMzQuNi00LjMtNDYuMS0xLjEtMzEuMiA4LjItMzIuOCAxMC45LTMgMi43LTEuNCAxMS44IDEwLjEgNTIuOCAxMC45IDYwLjYgMi40IDEyLjktNS44IDE0LjgtMjIuMSA1LjItMjYuOCA1LjItMTguNi0zLjMtMjYuOC01LjItNi42LTctNS44LTE0LjggOS4zLTUxLjUgMTAuOS02MC42IC4yLTkuMi0xLjQtMTEuOC0yMS4zLTcuNi0zMi44LTEwLjktMzcuMSAuMi00Ni4xIDEuMS05LjggMi4yLTYuOCAzLjYgMjYuOCAxMC40IDM5LjIgMTUuMSAyOS43IDEwIDMxLjUgMjAuMi05IDI1LjQtMTQuOSAzNi44LTYuMSAxMi44LTUuNyAxNy40IDIwLjYgMTYuNCAyNS4xIDE5LjQgMjguNCAxNi40IDI4LjQgMjMuOS0yMy4yIDI3LTMwLjUgMzEuOC0yNy4yIDE1LjQtMzUuNyAxNy4xLTIxLjctOC4yLTI5LjQtMjIuOC0uOC0yOS4xIDMuOS00MC40LTMuMy0xNy43LTcuMS0yMS44LTMzLjgtMzYuNS00MC43LTQzLjktMTMuNy0xMS4yLTEzLjctMjUuNCA1NC4yLTgxIDU0LjItODEgNDUuOCA4LjkgNTEuOSA4LjkgMTkuNS01LjIgMzEuOS05LjQgMjAuNi00LjIgMjAuNi00LjJsLS4zIDB6Il0KICAgIH07CiAgICBmYUF2aWFuZXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXZpYW5leCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzc0IiwgIk00NTMuMiAzMmwtMzEyIDBDMTAyLjMgMzIgNjUgNjMuMiA1Ny45IDEwMS43TDEuMyA0MTAuM0MtNS44IDQ0OC44IDIwIDQ4MCA1OSA0ODBsMzEyIDBjMzguOSAwIDc2LjItMzEuMiA4My4zLTY5LjdMNTExIDEwMS44QzUxOCA2My4yIDQ5Mi4yIDMyIDQ1My4yIDMyek0zOTUgMzc5LjNsLTMyIDEzLjUtMTE1LjQtMTEwYy0xNC43IDEwLTI5LjIgMTkuNS00MS43IDI3LjFsMjIuMSA2NC4yLTE3LjkgMTIuNy00MC42LTYxLTUyLjQtNDguMSAxNS43LTE1LjQgNTggMzEuMWM5LjMtMTAuNSAyMC44LTIyLjYgMzIuOC0zNC45bC0yMC41LTI5LjYtNjguOC05OS44IDE4LjgtMjguOSA4LjktNC44IDEwMy4xIDExMi40IDQuOSA0LjVjMTkuNC0xOC44IDMzLjgtMzIuNCAzMy44LTMyLjQgNy43LTYuNSAyMS41LTIuOSAzMC43IDcuOSA5IDEwLjUgMTAuNiAyNC43IDIuNyAzMS4zLTEuOCAxLjMtMTUuNSAxMS40LTM1LjMgMjUuNmw0LjUgNy4zIDk0LjkgMTE5LjQtNi4zIDcuOXoiXQogICAgfTsKICAgIGZhTnM4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm5zOCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmM2Q1IiwgIk0xMDQuMyAyNjkuMmwyNi4xIDAgMC0yNi4yLTI2LjEgMCAwIDI2LjJ6TTE1Ni44IDI0M2wtLjEtMjYuMiAwLS45Yy0uMi0xMC40LTQuNC0yMC4zLTExLjktMjcuNnMtMTcuNS0xMS4zLTI3LjktMTEuMS0yMC4zIDQuNC0yNy42IDExLjgtMTEuMyAxNy41LTExLjIgMjcuOWwwIC4yIDI2LjQgMCAwLS4yYy4xLTMuNCAxLjUtNi42IDMuOS05czUuNy0zLjcgOS4xLTMuNyA2LjcgMS4zIDkuMSAzLjcgMy44IDUuNiAzLjkgOWwwIDI2LjIgMjYuMyAwem01Mi40IDI1LjhjMCAxMi0yLjQgMjMuOC02LjkgMzQuOXMtMTEuMyAyMS4xLTE5LjcgMjkuNi0xOC41IDE1LjItMjkuNiAxOS43LTIyLjkgNi45LTM0LjkgNi45bC0uNiAwYy0yNC4yIDAtNDcuMy05LjYtNjQuNC0yNi43UzI2LjMgMjkzIDI2LjMgMjY4LjhsLTI2LjMgMCAwIC4yYzAgMTUuNCAzLjEgMzAuNyA5IDQ0LjlzMTQuNiAyNy4yIDI1LjUgMzguMSAyMy45IDE5LjUgMzguMSAyNS40IDI5LjUgOC45IDQ0LjkgOC45bC44IDBjMTUuNCAwIDMwLjctMyA0NC45LTlzMjcuMi0xNC42IDM4LjEtMjUuNSAxOS41LTIzLjggMjUuNC0zOC4xIDguOS0yOS41IDguOS00NC45bDAtMjYtMjYuMyAwIDAgMjZ6bS0xNTcuMiAwYy4xIDE3LjMgNyAzMy45IDE5LjIgNDYuMXMyOC44IDE5LjEgNDYuMSAxOS4xIDMzLjktNi45IDQ2LjEtMTkuMSAxOS4yLTI4LjggMTkuMi00Ni4xbC0yNi4zIDBjLS4yIDEwLjItNC40IDIwLTExLjcgMjcuMnMtMTcuMSAxMS4yLTI3LjQgMTEuMi0yMC4xLTQtMjcuNC0xMS4yLTExLjUtMTYuOS0xMS43LTI3LjJsMC0yNi0yNi4zIDAgMC0yNi42Yy4zLTE3LjMgNy40LTMzLjggMTkuNy00NS44czI5LTE4LjggNDYuMy0xOC42IDMzLjggNy4yIDQ1LjkgMTkuNSAxOC45IDI4LjkgMTguOSA0Ni4ybDAgMjUuMyAyNi4zIDAgMC0yNS4zYzAtMjQuMy05LjctNDcuNy0yNi45LTY0LjlzLTQwLjUtMjYuOS02NC45LTI2LjktNDcuNyA5LjctNjQuOSAyNi45LTI2LjkgNDAuNS0yNi45IDY0LjlsMCAyNS40IDI2LjMgMCAwIDI2em00MTguNC03MS4yYzEzLjcgMCAyNC42IDYuNiAzMC4xIDE4LjNsLjcgMS41IDIzLjItMTEuNS0uNi0xLjRjLTgtMTkuMy0yOC41LTMxLjMtNTMuNC0zMS4zLTIzLjEgMC00My42IDExLjQtNTEgMjguNC0uMSAyNi45LS4yIDIzLjkgMCAyNC44IDQuNyAxMSAxNC42IDE5LjQgMjguNyAyNC4yIDYuNSAyIDEzLjEgMy4zIDE5LjggNCA1LjUgLjcgMTAuNiAxLjQgMTUuOCAzLjEgNi40IDIuMSAxMC41IDUuMyAxMi44IDkuOGwwIDkuOWMtMy43IDcuNS0xMy44IDEyLjMtMjUuOCAxMi4zLTE0LjMgMC0yNi02LjktMzEuOS0xOWwtLjctMS41LTIzIDExLjUgLjYgMS40YzcuOSAxOS40IDI5LjYgMzIgNTUuMyAzMiAyMy42IDAgNDQuNi0xMS40IDUyLjMtMjguNGwuMi0yNS45LS4yLS43Yy00LjktMTEtMTUuMi0xOS42LTI4LjktMjQuMi03LjctMi43LTE0LjMtMy42LTIwLjctNC40LTUtLjUtMTAtMS41LTE0LjgtMi45LTYuMy0xLjktMTAuNC01LjEtMTIuNi05LjZsMC04LjRjMy40LTcuNCAxMi45LTEyLjEgMjQuMi0xMi4xbDAgMHpNMjg3LjYgMzExLjNsMjYuMSAwIDAtNjguNC0yNi4xIDAgMCA2OC40ek02MzkuOCAyNThjLTIuOS02LjMtOC4zLTEyLTE1LjQtMTYuNyA1LjYtMy44IDEwLjEtOS4xIDEzLTE1LjNsLjItMjUuMy0uMi0uN2MtNy40LTE2LTI2LjctMjYuNy00OC4yLTI2LjdTNTQ4LjUgMTg0IDU0MS4xIDIwMGwtLjIgMjUuMyAuMiAuN2MyLjkgNi4xIDcuNCAxMS40IDEzIDE1LjMtNy4yIDQuNy0xMi41IDEwLjUtMTUuNCAxNi43bC0uMiAyOC45IC4yIC43YzcuNiAxNiAyNy45IDI2LjcgNTAuNiAyNi43czQzLjEtMTAuNyA1MC42LTI2LjdsLjItMjguOS0uMi0uN3ptLTczLjItNTAuOGMzLjYtNi4zIDEyLjYtMTAuNSAyMi42LTEwLjVzMTkgNC4yIDIyLjYgMTAuNWwwIDEzLjdjLTMuNSA2LjItMTIuNiAxMC4zLTIyLjYgMTAuM3MtMTkuMS00LjItMjIuNi0xMC4zbDAtMTMuN3ptNDcuMyA3Mi4yYy0zLjggNi42LTEzLjMgMTAuOS0yNC43IDEwLjktMTEuMSAwLTIxLTQuNC0yNC43LTEwLjlsMC0xNi4yYzMuNy02LjMgMTMuNS0xMC41IDI0LjctMTAuNSAxMS4zIDAgMjAuOSA0LjEgMjQuNyAxMC41bDAgMTYuMnpNMzc2LjQgMjY2bC01OS44LTg5LjctMjkgMCAwIDQwLjYgMjYuNSAwIDAgLjQgNjIuNSA5NC4xIDI1LjcgMCAwLTEzNS4xLTI1LjkgMCAwIDg5Ljd6Il0KICAgIH07CiAgICBmYVNxdWFyZVBpbnRlcmVzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGludGVyZXN0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInBpbnRlcmVzdC1zcXVhcmUiXSwgImYwZDMiLCAiTTM4NCAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDcyLjYgMC0yLjItLjhjLTUuNC00OC4xLTMuMS01Ny41IDE1LjctMTM0LjcgMy45LTE2IDguNS0zNSAxMy45LTU3LjkgMCAwLTcuMy0xNC44LTcuMy0zNi41IDAtNzAuNyA3NS41LTc4IDc1LjUtMjUgMCAxMy41LTUuNCAzMS4xLTExLjIgNDkuOC0zLjMgMTAuNi02LjYgMjEuNS05LjEgMzItNS43IDI0LjUgMTIuMyA0NC40IDM2LjQgNDQuNCA0My43IDAgNzcuMi00NiA3Ny4yLTExMi40IDAtNTguOC00Mi4zLTk5LjktMTAyLjYtOTkuOS02OS45IDAtMTEwLjkgNTIuNC0xMTAuOSAxMDYuNiAwIDIxLjEgOC4yIDQzLjcgMTguMyA1NiAyIDIuNCAyLjMgNC41IDEuNyA3LTEuMSA0LjctMy4xIDEyLjktNC43IDE5LjItMSA0LTEuOCA3LjMtMi4xIDguNi0xLjEgNC41LTMuNSA1LjUtOC4yIDMuMy0zMC42LTE0LjMtNDkuOC01OS4xLTQ5LjgtOTUuMSAwLTc3LjUgNTYuMi0xNDguNiAxNjIuMi0xNDguNiA4NS4yIDAgMTUxLjQgNjAuNyAxNTEuNCAxNDEuOCAwIDg0LjYtNTMuMyAxNTIuNy0xMjcuNCAxNTIuNy0yNC45IDAtNDguMy0xMi45LTU2LjMtMjguMiAwIDAtMTIuMyA0Ni45LTE1LjMgNTguNC01IDE5LjMtMTcuNiA0Mi45LTI3LjQgNTkuM0wzODQgNDgwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0eiJdCiAgICB9OwogICAgZmFQaW50ZXJlc3RTcXVhcmUgPSBmYVNxdWFyZVBpbnRlcmVzdDsKICAgIGZhQmx1ZXRvb3RoQiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJibHVldG9vdGgtYiIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJmMjk0IiwgIk0xNjQuOSAyNjBMMjU3LjUgMTU2LjcgMTExLjYgMCAxMTEuNiAyMDYuMyAyNS40IDEyMC4yLTYgMTUxLjYgMTAyLjEgMjYwLTYgMzY4LjQgMjUuNCAzOTkuOCAxMTEuNiAzMTMuNyAxMTQuMyA1MTIgMjYyLjggMzYzLjQgMTY0LjkgMjYwem00MC45LTEwM2wtNTAgNTAtLjMtMTAwLjMgNTAuMyA1MC4zem0tNTAgMTU2bDUwIDUwLTUwLjMgNTAuMyAuMy0xMDAuM3oiXQogICAgfTsKICAgIGZhR3JpcGZpcmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ3JpcGZpcmUiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjNhYyIsICJNODAuNSAzMDEuNGMwLTczLjggMTA1LjEtMTIyLjUgMTA1LjEtMjAzIDAtNDcuMS0zNC04OC0zOS4xLTkwLjQgLjQgMy4zIC42IDYuNyAuNiAxMCAwIDkyLjEtMTQ3LjEgMTUzLjktMTQ3LjEgMjY4LjYgMCA0OS44IDMyLjIgNzkuMiA2Ni41IDEwOC4zIDY1LjEgNDYuNyA3OC4xIDcxLjQgNzguMSA4Ni42IDAgMTAuMS00LjggMTctNC44IDIyLjMgMTMuMS0xNi43IDE3LjQtMzEuOSAxNy41LTQ2LjQgMC0yOS42LTIxLjctNTYuMy00NC4yLTg2LjUtMTYtMjIuMy0zMi42LTQyLjYtMzIuNi02OS41em0yMDUuMy0zOWMtMTIuMS02Ni44LTc4LTEyNC40LTk0LjctMTMwLjlsNCA3LjJjMi40IDUuMSAzLjQgMTAuOSAzLjQgMTcuMSAwIDQ0LjctNTQuMiAxMTEuMi01Ni42IDExNi43LTIuMiA1LjEtMy4yIDEwLjUtMy4yIDE1LjggMCAyMC4xIDE1LjIgNDIuMSAxNy45IDQyLjEgMi40IDAgNTYuNi01NS40IDU4LjEtODcuNyA2LjQgMTEuNyA5LjEgMjIuNiA5LjEgMzMuNCAwIDQxLjItNDEuOCA5Ni45LTQxLjggOTYuOSAwIDExLjYgMzEuOSA1My4yIDM1LjUgNTMuMiAxIDAgMi4yLTEuNCAzLjItMi40IDM3LjktMzkuMyA2Ny4zLTg1IDY3LjMtMTM2LjggMC04LS43LTE2LjItMi4yLTI0LjZ6Il0KICAgIH07CiAgICBmYVNxdWFyZUdvb2dsZVBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWdvb2dsZS1wbHVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImdvb2dsZS1wbHVzLXNxdWFyZSJdLCAiZjBkNCIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTY0IDI1NmMwLTU1LjMgNDQuNy0xMDAgMTAwLTEwMCAyNyAwIDQ5LjUgOS44IDY3IDI2LjJsLTI3LjEgMjYuMWMtNy40LTcuMS0yMC4zLTE1LjQtMzkuOC0xNS40LTM0LjEgMC02MS45IDI4LjItNjEuOSA2My4yIDAgMzQuOSAyNy44IDYzLjIgNjEuOSA2My4yIDM5LjYgMCA1NC40LTI4LjUgNTYuOC00My4xbC01Ni45IDAgMC0zNC40IDk0LjQgMGMxIDUgMS42IDEwLjEgMS42IDE2LjYgMCA1Ny4xLTM4LjMgOTcuNi05NiA5Ny42LTU1LjMgMC0xMDAtNDQuNy0xMDAtMTAwem0yOTEgMTguMmwwIDI5LTI5LjIgMCAwLTI5LTI5IDAgMC0yOS4yIDI5IDAgMC0yOSAyOS4yIDAgMCAyOSAyOSAwIDAgMjkuMi0yOSAweiJdCiAgICB9OwogICAgZmFHb29nbGVQbHVzU3F1YXJlID0gZmFTcXVhcmVHb29nbGVQbHVzOwogICAgZmFBcHBTdG9yZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhcHAtc3RvcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM2ZiIsICJNMjU1LjkgMTIwLjlsOS4xLTE1LjdjNS42LTkuOCAxOC4xLTEzLjEgMjcuOS03LjVzMTMuMSAxOC4xIDcuNSAyNy45bC04Ny41IDE1MS41IDYzLjMgMGMyMC41IDAgMzIgMjQuMSAyMy4xIDQwLjhsLTE4NS41IDBjLTExLjMgMC0yMC40LTkuMS0yMC40LTIwLjRzOS4xLTIwLjQgMjAuNC0yMC40bDUyIDAgNjYuNi0xMTUuNC0yMC44LTM2LjFjLTUuNi05LjgtMi4zLTIyLjIgNy41LTI3LjkgOS44LTUuNiAyMi4yLTIuMyAyNy45IDcuNWw4LjkgMTUuN3ptLTc4LjcgMjE4bC0xOS42IDM0Yy01LjYgOS44LTE4LjEgMTMuMS0yNy45IDcuNXMtMTMuMS0xOC4xLTcuNS0yNy45bDE0LjYtMjUuMmMxNi40LTUuMSAyOS44LTEuMiA0MC40IDExLjZ6bTE2OC45LTYxLjdsNTMuMSAwYzExLjMgMCAyMC40IDkuMSAyMC40IDIwLjRTNDEwLjUgMzE4IDM5OS4yIDMxOGwtMjkuNSAwIDE5LjkgMzQuNWM1LjYgOS44IDIuMyAyMi4yLTcuNSAyNy45LTkuOCA1LjYtMjIuMiAyLjMtMjcuOS03LjUtMzMuNS01OC4xLTU4LjctMTAxLjYtNzUuNC0xMzAuNi0xNy4xLTI5LjUtNC45LTU5LjEgNy4yLTY5LjEgMTMuNCAyMyAzMy40IDU3LjcgNjAuMSAxMDR6TTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNNDAgMjU2YTIxNiAyMTYgMCAxIDEgNDMyIDAgMjE2IDIxNiAwIDEgMSAtNDMyIDB6Il0KICAgIH07CiAgICBmYVdpeCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3aXgiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjVjZiIsICJNMzkzLjQgMTMxLjdjMCAxMyAyLjEgMzIuNy0yOC43IDQzLjgtOS41IDMuNC0xNiA5LjctMTYgOS43IDAtMzEgNC43LTQyLjIgMTcuNC00OC45IDkuOC01LjEgMjcuMi00LjYgMjcuMi00LjZ6TTI3Ny42IDE2Ny4ybC0zNC4yIDEzMi43LTI4LjUtMTA4LjZjLTcuNy0zMi0yMC44LTQ4LjUtNDguNC00OC41LTI3LjQgMC00MC43IDE2LjItNDguNCA0OC41TDg5LjUgMjk5LjkgNTUuMyAxNjcuMkM0OS43IDE0MC41IDIzLjkgMTI5IDAgMTMyTDY1LjYgMzc5LjlzMjEuNiAxLjYgMzIuNS00YzE0LjItNy4yIDIxLTEyLjggMjkuNi00Ni42IDcuNy0zMC4xIDI5LjEtMTE4LjQgMzEuMS0xMjQuNyA0LjgtMTQuOSAxMS4xLTEzLjggMTUuNCAwIDIgNi4zIDIzLjUgOTQuNiAzMS4xIDEyNC43IDguNiAzMy43IDE1LjQgMzkuMyAyOS42IDQ2LjYgMTAuOCA1LjUgMzIuNSA0IDMyLjUgNEwzMzIuOSAxMzJjLTI0LjQtMy4xLTQ5LjggOC45LTU1LjMgMzUuM3ptMTE1LjggNS4ycy00LjEgNi4zLTEzLjUgMTEuNmMtNiAzLjQtMTEuOCA1LjYtMTggOC42LTE1LjEgNy4zLTEzLjIgMTMuOS0xMy4yIDM1LjJsMCAxNTIuMXMxNi42IDIuMSAyNy40LTMuNGMxMy45LTcuMSAxNy4xLTE0IDE3LjMtNDQuOGwwLTE1MC4zIDAgMCAwLTl6bTE2My40IDg0LjFMNjQwIDEzMi44cy0zNS4xLTYtNTIuNSA5LjhjLTEzLjMgMTIuMS0yNC40IDI5LjYtNTQuMiA3Mi41LS41IC43LTYuMyAxMC41LTEzLjEgMC0yOS4zLTQyLjItNDAuOC02MC4zLTU0LjItNzIuNS0xNy40LTE1LjgtNTIuNS05LjgtNTIuNS05LjhsODMuMiAxMjMuNy04MyAxMjMuNHMzNi42IDQuNiA1NC0xMS4yYzExLjUtMTAuNSAxNy42LTIwLjQgNTIuNS03MC43IDYuOC0xMC41IDEyLjYtLjggMTMuMSAwIDI5LjQgNDIuNCAzOS4yIDU4LjEgNTMuMSA3MC43IDE3LjQgMTUuOCA1My4zIDExLjIgNTMuMyAxMS4ybC04My0xMjMuNHoiXQogICAgfTsKICAgIGZhSW50ZXJjb20gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaW50ZXJjb20iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjdhZiIsICJNMzkyIDMyTDU2IDMyQzI1LjEgMzIgMCA1Ny4xIDAgODhMMCA0MjRjMCAzMC45IDI1LjEgNTYgNTYgNTZsMzM2IDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZsMC0zMzZjMC0zMC45LTI1LjEtNTYtNTYtNTZ6TTI4My43IDExNC4xYzAtMTkuOCAyOS45LTE5LjggMjkuOSAwbDAgMTk5LjVjMCAxOS44LTI5LjkgMTkuOC0yOS45IDBsMC0xOTkuNXptLTc0LjYtNy41YzAtMTkuOCAyOS45LTE5LjggMjkuOSAwbDAgMjE2LjVjMCAxOS44LTI5LjkgMTkuOC0yOS45IDBsMC0yMTYuNXptLTc0LjcgNy41YzAtMTkuOCAyOS45LTE5LjggMjkuOSAwbDAgMTk5LjVjMCAxOS44LTI5LjkgMTkuOC0yOS45IDBsMC0xOTkuNXpNNTkuNyAxNDRjMC0xOS44IDI5LjktMTkuOCAyOS45IDBsMCAxMzQuM2MwIDE5LjgtMjkuOSAxOS44LTI5LjkgMGwwLTEzNC4zek0zODMuMSAzNzEuOGMtNzIuOCA2My0yNDEuNyA2NS40LTMxOC4xIDAtMTUtMTIuOCA0LjQtMzUuNSAxOS40LTIyLjcgNjUuOSA1NS4zIDIxNi4xIDUzLjkgMjc5LjMgMCAxNC45LTEyLjkgMzQuMyA5LjggMTkuNCAyMi43em01LjItOTMuNWMwIDE5LjgtMjkuOSAxOS44LTI5LjkgMGwwLTEzNC4zYzAtMTkuOCAyOS45LTE5LjggMjkuOSAwbDAgMTM0LjN6Il0KICAgIH07CiAgICBmYVJlYWN0ZXVyb3BlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJlYWN0ZXVyb3BlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3NWQiLCAiTTI1MC43IDIxMS43bDUuOC00LjEgNS44IDQuMS0yLjEtNi44IDUuNy00LjMtNy4xLS4xLTIuMy02LjgtMi4zIDYuOC03LjIgLjEgNS43IDQuMy0yIDYuOHptNjMuNyAwbDUuOC00LjEgNS44IDQuMS0yLjEtNi44IDUuNy00LjMtNy4yLS4xLTIuMy02LjgtMi4zIDYuOC03LjIgLjEgNS43IDQuMy0xLjkgNi44em0tOTEuMyA1MC41bC0zLjQgMGMtNC44IDAtMy44IDQtMy44IDEyLjEgMCA0LjctMi4zIDYuMS01LjggNi4xcy01LjgtMS40LTUuOC02LjFsMC0zNi42YzAtNC43IDIuMy02LjEgNS44LTYuMXM1LjggMS40IDUuOCA2LjFjMCA3LjItLjcgMTAuNSAzLjggMTAuNWwzLjQgMGM0LjctLjEgMy44LTMuOSAzLjgtMTIuMyAwLTkuOS02LjctMTQuMS0xNi44LTE0LjFsLS4yIDBjLTEwLjEgMC0xNi44IDQuMi0xNi44IDE0LjFsMCA0MC4xYzAgMTAuNCA2LjcgMTQuMSAxNi44IDE0LjFsLjIgMGMxMC4xIDAgMTYuOC0zLjggMTYuOC0xNC4xIDAtOS45IDEuMS0xMy44LTMuOC0xMy44em0tODAuNyAxNy40bC0xNC43IDAgMC0xOS4zIDExLjQgMGMyLjUgMCAzLjgtMS4zIDMuOC0zLjhsMC0yLjFjMC0yLjUtMS4zLTMuOC0zLjgtMy44bC0xMS40IDAgMC0xOC4zIDE0LjQgMGMyLjUgMCAzLjgtMS4zIDMuOC0zLjhsMC0yLjFjMC0yLjUtMS4zLTMuOC0zLjgtMy44bC0yMS43IDBjLTIuNC0uMS0zLjcgMS4zLTMuNyAzLjhsMCA1OS4xYzAgMi41IDEuMyAzLjggMy44IDMuOGwyMS45IDBjMi41IDAgMy44LTEuMyAzLjgtMy44bDAtMi4xYzAtMi41LTEuMy0zLjgtMy44LTMuOHptLTQyLTE4LjVjNC42LTIgNy4zLTYgNy4zLTEyLjRsMC0xMS45YzAtMTAuMS02LjctMTQuMS0xNi44LTE0LjFsLTEzLjQgMGMtMi41IDAtMy44IDEuMy0zLjggMy44bDAgNTkuMWMwIDIuNSAxLjMgMy44IDMuOCAzLjhsMy40IDBjMi41IDAgMy44LTEuMyAzLjgtMy44bDAtMjIuOSA1LjYgMCA3LjQgMjMuNWMuMiAxIC44IDEuOCAxLjYgMi40czEuOCAuOSAyLjcgLjhsMy4zIDBjMi44IDAgNC0xLjggMy4yLTQuNGwtOC4xLTIzLjl6bS0zLjgtMTRjMCA0LjgtMi41IDYuMS02LjEgNi4xbC01LjggMCAwLTIwLjkgNS44IDBjMy42IDAgNi4xIDEuMyA2LjEgNi4xbDAgOC43ek0xNzYuMSAyMjZjLS4xLS41LS4yLTEtLjQtMS40cy0uNi0uOC0xLTEuMS0uOC0uNi0xLjMtLjctMS0uMi0xLjUtLjFsLTYuOSAwYy0uNSAwLTEgMC0xLjQgLjJzLS45IC40LTEuMyAuNy0uNyAuNy0uOSAxLjEtLjQgLjktLjQgMS40bC0xMSA1OS4yYy0uNSAyLjcgLjkgNC4xIDMuNCA0LjFsMyAwYy41IC4xIDEgMCAxLjUtLjJzLjktLjQgMS4zLS43IC43LS43IC45LTEuMiAuNC0uOSAuNC0xLjRsMS44LTExLjMgMTIuMiAwIDEuOCAxMS4zYzAgLjUgLjIgMSAuNCAxLjRzLjUgLjkgLjkgMS4yIC44IC42IDEuMyAuNyAxIC4yIDEuNSAuMmwzLjUgMGMyLjYgMCAzLjktMS40IDMuNC00LjFMMTc2LjEgMjI2em0tMTIuMyAzOS4zbDQuNy0yOS43IDQuNyAyOS43LTkuNCAwem04OS4zIDIwLjJsMC01My4yIDcuNSAwYzIuNSAwIDMuOC0xLjMgMy44LTMuOGwwLTIuMWMwLTIuNS0xLjMtMy44LTMuOC0zLjhsLTI1LjggMGMtMi41IDAtMy44IDEuMy0zLjggMy44bDAgMi4xYzAgMi41IDEuMyAzLjggMy44IDMuOGw3LjMgMCAwIDUzLjJjMCAyLjUgMS4zIDMuOCAzLjggMy44bDMuNCAwYzIuNSAwIDMuOC0xLjMgMy44LTMuOGwwIDB6bTI0OC0uOGwtMTkuNCAwIDAtMjYuNyAxNi4xIDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC43LS40IC4zLS40IC40LS43IC4xLS41IC4xLS44bDAtLjhjMC0uMyAwLS41LS4xLS44cy0uMi0uNS0uNC0uNy0uNC0uMy0uNy0uNC0uNS0uMS0uOC0uMWwtMTYuMSAwIDAtMjUuOCAxOS4xIDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC43LS40IC4zLS40IC40LS43IC4xLS41IC4xLS44bDAtLjhjMC0uMyAwLS41LS4xLS44cy0uMi0uNS0uNC0uNy0uNC0uMy0uNy0uNC0uNS0uMS0uOC0uMWwtMjIuMiAwYy0uMy0uMS0uNS0uMS0uOCAwcy0uNSAuMi0uNyAuNC0uMyAuNC0uNCAuNy0uMSAuNS0uMSAuOGwwIDYzYzAgLjMgMCAuNSAuMSAuOHMuMiAuNSAuNCAuNiAuNCAuMyAuNyAuNCAuNSAuMSAuOCAuMWwyMi41IDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC43LS40IC4zLS40IC40LS42IC4xLS41IC4xLS44bDAtLjhjMC0uMyAwLS41LS4xLS44cy0uMi0uNS0uNC0uNy0uNC0uMy0uNy0uNC0uNS0uMS0uOC0uMWwwIDB6TTQwOCAyMjEuOGwtLjggMGMtMTAuMSAwLTE1LjMgNC43LTE1LjMgMTQuMWwwIDQwLjFjMCA5LjMgNS4yIDE0LjEgMTUuMyAxNC4xbC44IDBjMTAuMSAwIDE1LjMtNC44IDE1LjMtMTQuMWwwLTQwLjFjMC05LjQtNS4yLTE0LjEtMTUuMy0xNC4xbDAgMHptMTAuMiA1Mi40Yy0uMSA4LTMgMTEuMS0xMC41IDExLjFzLTEwLjUtMy4xLTEwLjUtMTEuMWwwLTM2LjZjMC03LjkgMy0xMS4xIDEwLjUtMTEuMXMxMC41IDMuMiAxMC41IDExLjFsMCAzNi42em0tNDYuNS0xNC41YzYuMS0xLjYgOS4yLTYuMSA5LjItMTMuM2wwLTkuN2MwLTkuNC01LjItMTQuMS0xNS4zLTE0LjFsLTEzLjcgMGMtLjMgMC0uNSAwLS44IC4xcy0uNSAuMi0uNyAuNC0uMyAuNC0uNCAuNi0uMSAuNS0uMSAuOGwwIDYzYzAgLjMgMCAuNSAuMSAuOHMuMiAuNSAuNCAuNiAuNCAuMyAuNyAuNCAuNSAuMSAuOCAuMWwxLjIgMGMuMyAwIC41IDAgLjgtLjFzLjUtLjIgLjYtLjQgLjMtLjQgLjQtLjYgLjEtLjUgLjEtLjhsMC0yNi45IDExLjYgMCAxMC40IDI3LjJjLjIgLjUgLjUgLjkgLjkgMS4xcy45IC40IDEuNCAuNGwxLjUgMGMxLjQgMCAyLTEgMS41LTIuM2wtMTAuNi0yNy4zem0tNi40LTMuOWwtMTAuMiAwIDAtMjguNSAxMC4yIDBjNy41IDAgMTAuNSAzLjEgMTAuNSAxMS4xbDAgNi40YzAgNy44LTMgMTEtMTAuNSAxMWwwIDB6bTg1LjktMzMuMWwtMTMuNyAwYy0uMy0uMS0uNS0uMS0uOCAwcy0uNSAuMi0uNyAuNC0uMyAuNC0uNCAuNy0uMSAuNS0uMSAuOGwwIDYzYzAgLjMgMCAuNSAuMSAuOHMuMiAuNSAuNCAuNiAuNCAuMyAuNyAuNCAuNSAuMSAuOCAuMWwxLjIgMGMuMyAwIC41IDAgLjgtLjFzLjUtLjIgLjYtLjQgLjMtLjQgLjQtLjYgLjEtLjUgLjEtLjhsMC0yNi4xIDEwLjYgMGMxMC4xIDAgMTUuMy00LjggMTUuMy0xNC4xbDAtMTAuNWMwLTkuNC01LjItMTQuMS0xNS4zLTE0LjF6bTEwLjIgMjIuOGMwIDcuOS0zIDExLjEtMTAuNSAxMS4xbC0xMC4yIDAgMC0yOS4yIDEwLjIgMGM3LjUtLjEgMTAuNSAzLjEgMTAuNSAxMWwwIDcuMXpNMjU5LjYgMzA4bC0yLjMtNi44LTIuMyA2LjgtNy4xIC4xIDUuNyA0LjMtMi4xIDYuOCA1LjgtNC4xIDUuOCA0LjEtMi4xLTYuOCA1LjctNC4zLTcuMS0uMXpNNDg3LjIgMTcxLjljLTExLjctNC40LTIzLjUtOC4xLTM1LjYtMTEuMyAxOS42LTc4IDExLjYtMTM0LjctMjIuMy0xNTMuOS0zNC41LTE5LjQtODUuOSA0LjMtMTM4LjIgNTUuMiAzLjQgMy4zIDYuOCA2LjcgMTAuMiAxMC4yIDgyLjUtODAgMTE5LjYtNTMuNSAxMjAuOS01Mi44IDIyLjQgMTIuNyAzNiA1NS44IDE1LjUgMTM3LjgtMjcuOC02LjQtNTYuMS0xMC43LTg0LjYtMTMtNzEuOS0xMDAuNS0xNDAuNi0xNDIuMS0xODIuMi0xNDIuMS0zMC44IDAtNDMuOCAyMS00Ny42IDI3LjctMTguMSAzMi0xMy4zIDg0LjIgLjEgMTMzLjgtNzAuNSAyMC4zLTEyMC43IDU0LjEtMTIwLjMgOTUgLjUgNTkuNiAxMDMuMiA4Ny44IDEyMi4xIDkyLjgtMjAuNSA4MS45LTEwLjEgMTM1LjYgMjIuMyAxNTMuOSAyOCAxNS44IDc1LjEgNiAxMzguMi01NS4yLTMuNC0zLjMtNi44LTYuNy0xMC4yLTEwLjItODIuNSA4MC0xMTkuNyA1My41LTEyMC45IDUyLjgtMjIuMy0xMi42LTM2LTU1LjYtMTUuNS0xMzcuOSAxMi40IDIuOSA0MS44IDkuNSA4NC42IDEzIDcxLjkgMTAwLjQgMTQwLjYgMTQyIDE4Mi4xIDE0MiAzMC44IDAgNDMuOC0yMSA0Ny42LTI3LjcgMTgtMzEuOSAxMy4zLTg0LjEtLjEtMTMzLjggMTUyLjMtNDMuOCAxNTYuMi0xMzAuMiAzMy45LTE3Ni4zbDAgMHpNMTM2IDM2LjhjMi45LTUuMSAxMS45LTIwLjMgMzQuOS0yMC4zIDM2LjggMCA5OC44IDM5LjYgMTYzLjMgMTI2LjItMzEuMy0xLjgtNjIuNy0xLjUtOTMuOSAuOSAxMy0xOC4zIDI3LjEtMzUuOCA0Mi4yLTUyLjQtMy40LTMuNS02LjgtNi45LTEwLjItMTAuMi0xOC4zIDIwLjItMzUuMyA0MS43LTUwLjcgNjQuMi0yOC41IDIuNy01Ni43IDcuNi04NC40IDE0LjYtLjItMS40LTI0LjMtODIuMi0xLjItMTIzbDAgMHpNNDQwLjggNDc1LjFjLTIuOSA1LjEtMTEuOCAyMC4zLTM0LjkgMjAuMy0zNi43IDAtOTguNy0zOS40LTE2My4zLTEyNi4yIDMxLjMgMS44IDYyLjcgMS41IDkzLjktLjktMTMgMTguMy0yNy4xIDM1LjgtNDIuMiA1Mi40IDMuNCAzLjUgNi44IDYuOSAxMC4yIDEwLjIgMTguNC0yMC4yIDM1LjMtNDEuNyA1MC43LTY0LjIgNDcuMy00LjcgODAuMy0xMy41IDg0LjQtMTQuNiAyMi43IDg0LjQgNC41IDExNyAxLjIgMTIzem05LjEtMTM4LjZjLTMuNi0xMS45LTcuNy0yNC4xLTEyLjQtMzYuNC0yLjEgMC00LjItLjUtNi4xLTEuNXMtMy41LTIuNC00LjYtNC4ybC0uMSAuMWMtMS42IDEuNS0zLjQgMi43LTUuNCAzLjYgNS43IDE0LjMgMTAuNiAyOC40IDE0LjcgNDIuMi0yMy43IDYtNDcuNyAxMC4zLTcyIDEzIDMuNS01LjMgMTcuMi0yNi4yIDMyLjItNTQuMi0yLjEtLjgtNC4yLTEuOS02LTMuMi0xLjEgMS4yLTMuNiA0LjItMTAuOSA0LjItNi4yIDExLjItMTcuNCAzMC45LTMzLjkgNTUuMi0zNy40IDMuMy03NSAzLjYtMTEyLjQgMS03LjktMTEuMi0yMS41LTMxLjEtMzYuOC01Ny44LTEtLjQtMi0uOS0zLTEuNS0xLjkgMS42LTMuOSAzLjItMTIuNiAzLjIgNi4zIDExLjIgMTcuNSAzMC43IDMzLjggNTQuNi0yNC4zLTIuMy00OC40LTYuMi03Mi4yLTExLjcgMy45LTE0IDguNi0yOC4zIDE0LjEtNDIuOS0zLjIgMC01LjQgLjItOC40LTEtMi4yIC44LTQuNiAxLjEtNi45IDEtNC45IDEzLjQtOS4xIDI2LjUtMTIuNyAzOS40LTE1OS45LTQyLjYtMTQwLjMtMTIzLjYtMS41LTE2NCAzLjYgMTEuOSA3LjcgMjQuMSAxMi40IDM2LjQgMTAuNCAwIDEyLjkgMy40IDE0LjQgNS4zIC43LS44IDEuNC0xLjYgMi4zLTIuMi01LjgtMTQuNy0xMC45LTI5LjItMTUuMi00My4zIDctMS44IDMyLjQtOC40IDcyLTEzLTE1LjkgMjQuMy0yNi43IDQzLjktMzIuOCA1NS4zIDMuMSAxLjggNS4zIDQuNiA2LjQgOCAyLjUtMy43IDYuMS02LjYgMTAuMi04LjQgNi41LTExLjcgMTcuOS0zMS45IDM0LjgtNTYuOSAzNy40LTMuMyA3NS0zLjYgMTEyLjQtMSAzMS41IDQ0LjYgMjguOSA0OC4xIDQyLjUgNjQuNSAyLjYtMy41IDYuMy02IDEwLjQtNy40LTYuNC0xMS40LTE3LjYtMzEtMzQuMy01NS41IDQwLjQgNC4xIDY1IDEwIDcyLjIgMTEuNy00IDE0LjQtOC45IDI5LjItMTQuNiA0NC4yIDIuNSAxIDQuOCAyLjQgNi44IDQuM2wuMSAuMWMxLTEuNSAyLjMtMi44IDMuOC0zLjhzMy4zLTEuNiA1LjEtMS44YzQuOS0xMy40IDkuMi0yNi42IDEyLjgtMzkuNSAxMS43IDMuMSAyMy4yIDYuOCAzNC41IDExIDEwNi4xIDM5LjkgNzQgODcuOSA3Mi42IDkwLjQtMTkuOCAzNS4xLTgwLjEgNTUuMi0xMDUuNyA2Mi41em0tMTE0LjQtMTE0bC0xLjIgMGMtLjMgMC0uNSAwLS44IC4xcy0uNSAuMi0uNiAuNC0uMyAuNC0uNCAuNi0uMSAuNS0uMSAuOGwwIDQ5LjhjMCA3LjktMi42IDExLjEtMTAuMSAxMS4xcy0xMC4xLTMuMS0xMC4xLTExLjFsMC00OS44YzAtLjMgMC0uNS0uMS0uOHMtLjItLjUtLjQtLjctLjQtLjMtLjctLjQtLjUtLjEtLjgtLjFsLTEuMiAwYy0uMyAwLS41IDAtLjggLjFzLS41IC4yLS43IC40LS4zIC40LS40IC42LS4xIC41LS4xIC44bDAgNTEuNWMwIDkuNiA1IDE0LjEgMTUuMSAxNC4xbC40IDBjMTAuMSAwIDE1LjEtNC42IDE1LjEtMTQuMWwwLTUxLjVjMC0uMy0uMS0uNS0uMi0uOHMtLjMtLjUtLjUtLjYtLjQtLjMtLjctLjQtLjUtLjEtLjgtLjF6TTMyMS44IDMwOGwtMi4zLTYuOC0yLjMgNi44LTcuMSAuMSA1LjcgNC4zLTIuMSA2LjggNS44LTQuMSA1LjggNC4xLTIuMS02LjggNS43LTQuMy03LjEtLjF6bS0zMS4xIDcuNGwtMi4zLTYuOC0yLjMgNi44LTcuMSAuMSA1LjcgNC4zLTIuMSA2LjggNS44LTQuMSA1LjggNC4xLTIuMS02LjggNS43LTQuMy03LjEtLjF6bTUuMS0zMC44bC0xOS40IDAgMC0yNi43IDE2LjEgMGMuMyAwIC41IDAgLjgtLjFzLjUtLjIgLjctLjQgLjMtLjQgLjQtLjcgLjEtLjUgLjEtLjhsMC0uOGMwLS4zIDAtLjUtLjEtLjhzLS4yLS41LS40LS43LS40LS4zLS43LS40LS41LS4xLS44LS4xbC0xNi4xIDAgMC0yNS44IDE5LjEgMGMuMyAwIC41IDAgLjgtLjFzLjUtLjIgLjctLjQgLjMtLjQgLjQtLjcgLjEtLjUgLjEtLjhsMC0uOGMwLS4zIDAtLjUtLjEtLjhzLS4yLS41LS40LS43LS40LS4zLS43LS40LS41LS4xLS44LS4xbC0yMi4yIDBjLS4zIDAtLjUgMC0uOCAuMXMtLjUgLjItLjcgLjQtLjMgLjQtLjQgLjYtLjEgLjUtLjEgLjhsMCA2M2MwIC4zIDAgLjUgLjEgLjhzLjIgLjUgLjQgLjYgLjQgLjMgLjcgLjQgLjUgLjEgLjggLjFsMjIuNSAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNy0uNCAuMy0uNCAuNC0uNyAuMS0uNSAuMS0uOGwwLS44YzAtLjMgMC0uNi0uMS0uOHMtLjItLjUtLjQtLjctLjQtLjQtLjctLjQtLjUtLjEtLjgtLjFsMCAwem0tNy40LTk5LjRsLTIuMyA2LjgtNy4xIC4xIDUuNyA0LjMtMi4xIDYuOCA1LjgtNC4xIDUuOCA0LjEtMi4xLTYuOCA1LjctNC4zLTcuMS0uMS0yLjMtNi44eiJdCiAgICB9OwogICAgZmFXYXplID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndhemUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjgzZiIsICJNNTAyLjYgMjAxLjdjMTQuNSA4NS45LTMwLjkgMTY3LjktMTEzLjIgMjA4LjEgMTMgMzQuMS0xMi40IDcwLjItNDguMyA3MC4yLTEzLjIgMC0yNi01LjEtMzUuNi0xNC4ycy0xNS4zLTIxLjYtMTYtMzQuOGMtNi40IC4yLTY0LjIgMC03Ni4zLS42LS4zIDYuOC0xLjkgMTMuNS00LjcgMTkuNnMtNi45IDExLjctMTEuOSAxNi4zLTEwLjggOC4yLTE3LjIgMTAuNS0xMy4yIDMuNC0xOS45IDMuMWMtMzMuOS0xLjQtNTgtMzQuOC00Ny02Ny45LTM3LjItMTMuMS03Mi41LTM0LjktOTkuNi03MC44LTEzLTE3LjMtLjUtNDEuOCAyMC44LTQxLjggNDYuMyAwIDMyLjItNTQuMiA0My4yLTExMC4zIDE4LjQtOTMuOSAxMTYuOC0xNTcuMSAyMTEuNy0xNTcuMSAxMDIuNSAwIDE5Ny4yIDcwLjcgMjE0LjEgMTY5Ljd6TTM3My45IDM4OC4zYzQyLTE5LjIgODEuMy01Ni43IDk2LjMtMTAyLjEgNDAuNS0xMjMuMS02NC4yLTIyOC0xODEuNy0yMjgtODMuNCAwLTE3MC4zIDU1LjQtMTg2LjEgMTM2LTkuNSA0OC45IDUgMTMxLjQtNjguNyAxMzEuNCAyNC45IDMzLjEgNTguMyA1Mi42IDkzLjcgNjQgMjQuNy0yMS44IDYzLjktMTUuNSA3OS44IDE0LjMgMTQuMiAxIDc5LjIgMS4yIDg3LjkgLjggMy41LTYuOSA4LjUtMTIuOSAxNC43LTE3LjVzMTMuMi03LjkgMjAuOC05LjUgMTUuNC0xLjQgMjIuOSAuNCAxNC41IDUuMyAyMC41IDEwLjJ6TTIwNS41IDE4Ny4xYzAtMzQuNyA1MC44LTM0LjcgNTAuOCAwcy01MC44IDM0LjctNTAuOCAwem0xMTYuNiAwYzAtMzQuNyA1MC45LTM0LjcgNTAuOSAwcy01MC45IDM0LjgtNTAuOSAwek0xOTkuNSAyNTcuOGMtMy40LTE2LjkgMjIuMi0yMi4yIDI1LjYtNS4ybC4xIC4zYzQuMSAyMS40IDI5LjggNDQgNjQuMSA0My4xIDM1LjctLjkgNTkuMy0yMi4yIDY0LjEtNDIuOCA0LjUtMTYuMSAyOC42LTEwLjQgMjUuNSA2LTUuMiAyMi4yLTMxLjIgNjItOTEuNSA2Mi45LTQyLjYgMC04MC45LTI3LjgtODcuOS02NC4ybDAgMHoiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zUmVtaXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy1yZW1peCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGVlIiwgIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6TTQxOC4xIDI2MC40bDQuOSAyLjIgMCA3MGMtNy4yIDMuNi02My40IDI3LjUtNjcuMyAyOC44LTYuNS0xLjgtMTEzLjctNDYuOC0xMzcuMy01Ni4ybC02NC4yIDI2LjYtNjMuMy0yNy41IDAtNjMuOCA1OS4zLTI0LjhjLS43LS43LS40IDUtLjQtNzAuNGw2Ny4zLTI5LjcgMTUxLjkgNjIuOSAwIDYxLjYgNDkuMSAyMC4zem0tNzAuNCA4MS41bDAtNDMuOC0uNCAwIDAtMS44LTExMy44LTQ2LjUgMCA0NS4yIDExMy44IDQ2LjkgMC0uNCAuNCAuNHptNy41LTU3LjZsMzkuOS0xNi40LTM2LjgtMTUuNS0zOSAxNi40IDM1LjkgMTUuNXptNTIuMyAzOC4xbDAtNDMtNDQuMyAxOC42IDAgNDMuNCA0NC4zLTE5eiJdCiAgICB9OwogICAgZmFCYW5kY2FtcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJiYW5kY2FtcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMmQ1IiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6bTQ4LjIgMzI2LjFsLTE4MSAwIDg0LjctMTU2LjEgMTgxIDAtODQuNyAxNTYuMXoiXQogICAgfTsKICAgIGZhU3F1YXJlV2ViQXdlc29tZVN0cm9rZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtd2ViLWF3ZXNvbWUtc3Ryb2tlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2ODQiLCAiTTY0IDY0QzQ2LjMgNjQgMzIgNzguMyAzMiA5NmwwIDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMkw2NCA2NHpNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTIzNSA4MS42bDUzIDQ2LjQgNTIuMi0xMC40Yy0yLjYtMy45LTQuMi04LjUtNC4yLTEzLjYgMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGMwIDEzLTEwLjMgMjMuNi0yMy4yIDI0TDMwNC41IDM0OS4xYy01LjIgMTEuNS0xNi42IDE4LjktMjkuMiAxOC45bC0xMDIuNiAwYy0xMi42IDAtMjQtNy40LTI5LjItMTguOUw4Ny4yIDIyNGMtMTIuOS0uNC0yMy4yLTExLTIzLjItMjQgMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGMwIDUtMS41IDkuNy00LjIgMTMuNkwxNjAgMjI0IDIxMy4xIDE3Ny42Yy04LjktNC4xLTE1LTEzLjEtMTUtMjMuNiAwLTE0LjQgMTEuNi0yNiAyNi0yNnMyNiAxMS42IDI2IDI2YzAgMTAuNS02LjIgMTkuNS0xNS4xIDIzLjZ6Il0KICAgIH07CiAgICBmYVZpbWVvViA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2aW1lby12IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyN2QiLCAiTTQ0Ny44IDE1My42Yy0yIDQzLjYtMzIuNCAxMDMuMy05MS40IDE3OS4xLTYwLjkgNzkuMi0xMTIuNCAxMTguOC0xNTQuNiAxMTguOC0yNi4xIDAtNDguMi0yNC4xLTY2LjMtNzIuMy0zNS4yLTEyOS4yLTUwLjItMjA0LjktNzkuMy0yMDQuOS0zLjQgMC0xNS4xIDcuMS0zNS4yIDIxLjFMMCAxNjguMmM1MS42LTQ1LjMgMTAwLjktOTUuNyAxMzEuOC05OC41IDM0LjktMy40IDU2LjMgMjAuNSA2NC40IDcxLjUgMjguNyAxODEuNSA0MS40IDIwOC45IDkzLjYgMTI2LjcgMTguNy0yOS42IDI4LjgtNTIuMSAzMC4yLTY3LjYgNC44LTQ1LjktMzUuOC00Mi44LTYzLjMtMzEgMjItNzIuMSA2NC4xLTEwNy4xIDEyNi4yLTEwNS4xIDQ1LjggMS4yIDY3LjUgMzEuMSA2NC45IDg5LjR6Il0KICAgIH07CiAgICBmYVN0cmF2YSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdHJhdmEiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjQyOCIsICJNMTU4LjQgMEw3IDI5MiA5Ni4yIDI5MiAxNTguNCAxNzUuOSAyMjAuMSAyOTIgMzA4LjYgMjkyIDE1OC40IDB6TTMwOC42IDI5MmwtNDMuOSA4OC4yLTQ0LjYtODguMi02Ny42IDAgMTEyLjIgMjIwIDExMS41LTIyMC02Ny42IDB6Il0KICAgIH07CiAgICBmYVVuaXJlZ2lzdHJ5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVuaXJlZ2lzdHJ5IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY0MDQiLCAiTTE5MiA0ODBjMzkuNSAwIDc2LjItMTEuOCAxMDYuOC0zMi4ybC0yMTMuNSAwQzExNS44IDQ2OC4yIDE1Mi41IDQ4MCAxOTIgNDgwek0xMDIuOSAyODYuOWwwLTEyLjQtMTAyLjkgMCAwIDEyLjRjMCAyLjUgMCA1IC4xIDcuNGwxMDMuMSAwYy0uMi0yLjQtLjMtNC45LS4zLTcuNHptMjAuNSA1N2wtMTE0LjkgMGMyLjYgOC41IDUuOCAxNi44IDkuNiAyNC44bDEzOC4zIDBjLTEyLjktNS43LTI0LjEtMTQuMi0zMy0yNC44em0tMTcuNy0zNC43bC0xMDQuNCAwYy45IDcuNiAyLjIgMTUgMy45IDIyLjNsMTA5LjcgMGMtNC02LjktNy4yLTE0LjQtOS4yLTIyLjN6bS0yLjgtNjkuM2wtMTAyLjkgMCAwIDE3LjMgMTAyLjkgMCAwLTE3LjN6bTAtMTczLjJsLTEwMi45IDAgMCA0LjkgMTAyLjkgMCAwLTQuOXptMC0zNC43bC0xMDIuOSAwIDAgMi41IDEwMi45IDAgMC0yLjV6bTAgNjkuM2wtMTAyLjkgMCAwIDcuNCAxMDIuOSAwIDAtNy40em0wIDEwNGwtMTAyLjkgMCAwIDE0LjggMTAyLjkgMCAwLTE0Ljh6bTAtNjkuM2wtMTAyLjkgMCAwIDkuOSAxMDIuOSAwIDAtOS45em0wIDM0LjZsLTEwMi45IDAgMCAxMi40IDEwMi45IDAgMC0xMi40ek0yNjkuMSAzMzEuNWwxMDkuNyAwYzEuOC03LjMgMy4xLTE0LjcgMy45LTIyLjNsLTEwNC40IDBjLTIuMSA3LjktNS4yIDE1LjQtOS4yIDIyLjN6bTEyLTE4NS43bDEwMi45IDAgMC05LjgtMTAyLjkgMCAwIDkuOHptMCAzNy4ybDEwMi45IDAgMC0xMi40LTEwMi45IDAgMCAxMi40em0wLTc0LjNsMTAyLjkgMCAwLTcuNC0xMDIuOSAwIDAgNy40em0wLTc2LjdsMCAyLjUgMTAyLjkgMCAwLTIuNS0xMDIuOSAwek03OC4xIDQ0Mi45bDIyNy43IDBjMTEuOC04LjcgMjIuNy0xOC42IDMyLjItMjkuN2wtMjkzLjEgMGM5LjYgMTEgMjEuNCAyMSAzMy4yIDI5Ljd6bTIwMy0zNzEuM2wxMDIuOSAwIDAtNC45LTEwMi45IDAgMCA0Ljl6bTAgMTQ4LjVsMTAyLjkgMCAwLTE0LjgtMTAyLjkgMCAwIDE0Ljh6TTM4LjggNDA1LjdsMzA1LjMgMGM2LjctOC41IDEyLjYtMTcuNiAxNy44LTI3LjJMMjMgMzc4LjVjNS4yIDkuNiA5LjIgMTguNyAxNS44IDI3LjJ6bTE4OC44LTM3LjFsMTM5LjQgMGMzLjctOCA1LjgtMTYuMiA4LjUtMjQuOGwtMTE1IDBjLTguOCAxMC43LTIwLjEgMTkuMi0zMi45IDI0Ljh6bTUzLjUtODEuN2MwIDIuNS0uMSA1LS40IDcuNGwxMDMuMSAwYy4xLTIuNSAuMi00LjkgLjItNy40bDAtMTIuNC0xMDIuOSAwIDAgMTIuNHptMC0yOS43bDEwMi45IDAgMC0xNy4zLTEwMi45IDAgMCAxNy4zeiJdCiAgICB9OwogICAgZmFDY0RpbmVyc0NsdWIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2MtZGluZXJzLWNsdWIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjI0YyIsICJNMjM5LjcgNzkuOWExNzUuOCAxNzUuOCAwIDEgMCAwIDM1MS42IDE3NS44IDE3NS44IDAgMSAwIDAtMzUxLjZ6TTE5OS44IDM1OS41Yy00MS43LTE1LjktNzEuNC01Ni40LTcxLjQtMTAzLjhzMjkuNy04Ny45IDcxLjQtMTA0LjFsMCAyMDcuOXptNzkuOCAuM2wwLTIwOC4yYzQxLjcgMTYuMiA3MS40IDU2LjcgNzEuNCAxMDQuMXMtMjkuNyA4Ny45LTcxLjQgMTA0LjF6TTUyOCAzMkw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQ4MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0zMjkuNyA0NDhsLTkwLjMgMEMxMzMuMiA0NDggNDUuNiAzNjIuNSA0NS42IDI1Ny44IDQ1LjYgMTQzLjIgMTMzLjIgNjQgMjM5LjQgNjRsOTAuMyAwYzEwNSAwIDIwMC43IDc5LjIgMjAwLjcgMTkzLjggMCAxMDQuNy05NS43IDE5MC4yLTIwMC43IDE5MC4yeiJdCiAgICB9OwogICAgZmFQaW50ZXJlc3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGludGVyZXN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwZDIiLCAiTTUwNCAyNTZjMCAxMzctMTExIDI0OC0yNDggMjQ4LTI1LjYgMC01MC4yLTMuOS03My40LTExLjEgMTAuMS0xNi41IDI1LjItNDMuNSAzMC44LTY1IDMtMTEuNiAxNS40LTU5IDE1LjQtNTkgOC4xIDE1LjQgMzEuNyAyOC41IDU2LjggMjguNSA3NC44IDAgMTI4LjctNjguOCAxMjguNy0xNTQuMyAwLTgxLjktNjYuOS0xNDMuMi0xNTIuOS0xNDMuMi0xMDcgMC0xNjMuOSA3MS44LTE2My45IDE1MC4xIDAgMzYuNCAxOS40IDgxLjcgNTAuMyA5Ni4xIDQuNyAyLjIgNy4yIDEuMiA4LjMtMy4zIC44LTMuNCA1LTIwLjMgNi45LTI4LjEgLjYtMi41IC4zLTQuNy0xLjctNy4xLTEwLjEtMTIuNS0xOC4zLTM1LjMtMTguMy01Ni42IDAtNTQuNyA0MS40LTEwNy42IDExMi0xMDcuNiA2MC45IDAgMTAzLjYgNDEuNSAxMDMuNiAxMDAuOSAwIDY3LjEtMzMuOSAxMTMuNi03OCAxMTMuNi0yNC4zIDAtNDIuNi0yMC4xLTM2LjctNDQuOCA3LTI5LjUgMjAuNS02MS4zIDIwLjUtODIuNiAwLTE5LTEwLjItMzQuOS0zMS40LTM0LjktMjQuOSAwLTQ0LjkgMjUuNy00NC45IDYwLjIgMCAyMiA3LjQgMzYuOCA3LjQgMzYuOHMtMjQuNSAxMDMuOC0yOSAxMjMuMkMxNjEuNSA0MzcuMiAxNjMuNSA0NjcuNCAxNjUuNiA0ODcgNzMuNCA0NTAuOSA4IDM2MS4xIDggMjU2IDggMTE5IDExOSA4IDI1NiA4UzUwNCAxMTkgNTA0IDI1NnoiXQogICAgfTsKICAgIGZhQWxnb2xpYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhbGdvbGlhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzNmMiLCAiTTI1NiAwYy0xMzkuOSAwLTI1NCAxMTIuNy0yNTYgMjUyLjEtMiAxNDEuNSAxMTIuOSAyNTguNyAyNTQuNSAyNTkuNSA0My43IC4zIDg1LjktMTAuNCAxMjMuMy0zMC43IDMuNi0yIDQuMi03IDEuMS05LjdsLTI0LTIxLjJjLTQuOS00LjMtMTEuOC01LjUtMTcuOC0zLTI2LjEgMTEuMS01NC41IDE2LjgtODMuNyAxNi40LTExNC40LTEuNS0yMDYuOS05Ni42LTIwNS4xLTIxMSAxLjgtMTEyLjkgOTQuMy0yMDQuMiAyMDcuNy0yMDQuMmwyMDcuNyAwIDAgMzY5LTExNy44LTEwNC43Yy0zLjgtMy40LTkuNy0yLjctMTIuNyAxLjMtMTguOSAyNS00OS43IDQwLjYtODMuOSAzOC4yLTQ3LjUtMy4zLTg1LjktNDEuNS04OS41LTg4LjktNC4yLTU2LjYgNDAuNi0xMDMuOSA5Ni4zLTEwMy45IDUwLjQgMCA5MS45IDM4LjggOTYuMiA4OCAuNCA0LjQgMi40IDguNSA1LjcgMTEuNGwzMC43IDI3LjJjMy41IDMuMSA5IDEuMiA5LjktMy40IDIuMi0xMS44IDMtMjQuMiAyLjEtMzYuOC00LjktNzItNjMuMy0xMzAtMTM1LjQtMTM0LjQtODIuNy01LjEtMTUxLjggNTkuNS0xNTQgMTQwLjYtMi4xIDc4LjkgNjIuNiAxNDcgMTQxLjYgMTQ4LjcgMzMgLjcgNjMuNi05LjYgODguMy0yNy42TDQ5NSA1MDkuNGM2LjYgNS44IDE3IDEuMiAxNy03LjdsMC00OTJjMC01LjQtNC40LTkuNy05LjctOS43TDI1NiAweiJdCiAgICB9OwogICAgZmFTdGFja3BhdGggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RhY2twYXRoIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY4NDIiLCAiTTI0NC42IDIzMi40YzAgOC41LTQuMyAyMC41LTIxLjMgMjAuNWwtMTkuNiAwIDAtNDEuNSAxOS42IDBjMTcuMSAwIDIxLjMgMTIuNCAyMS4zIDIxek00NDggMzJsMCA0NDgtNDQ4IDAgMC00NDggNDQ4IDB6TTE1MS4zIDI4Ny44YzAtMjEuMi0xMi4xLTM0LjUtNDYuNy00NC44LTIwLjYtNy40LTI2LTEwLjktMjYtMTguNnM3LTE0LjYgMjAuNC0xNC42YzE0LjEgMCAyMC44IDguNCAyMC44IDE4LjRsMzAuNyAwIC4yLS42Yy41LTE5LjYtMTUuMS00MS42LTUxLjEtNDEuNi0yMy40IDAtNTIuNiAxMC44LTUyLjYgMzguMyAwIDE5LjQgOS4yIDMxLjMgNTAuNyA0NC40IDE3LjMgNi4yIDIxLjkgMTAuNCAyMS45IDE5LjUgMCAxNS4yLTE5LjEgMTQuMi0xOS41IDE0LjItMjAuNCAwLTI1LjctOS4xLTI1LjctMjEuOWwtMzAuOCAwLS4yIC42Yy0uNyAzMS4zIDI4LjQgNDUuMiA1Ni42IDQ1LjIgMzAgMCA1MS4xLTEzLjYgNTEuMS0zOC4zem0xMjUuNC01NS42YzAtMjUuMy0xOC40LTQ1LjUtNTMuNC00NS41bC01MS44IDAgMCAxMzguMiAzMi4yIDAgMC00Ny40IDE5LjYgMGMzMC4zIDAgNTMuNC0xNiA1My40LTQ1LjR6TTI5Ny45IDMyNWw0OS4xLTEzOC4yLTMxLjEgMC00Ny45IDEzOC4yIDI5LjkgMHpNNDA0LjUgMTg2LjhsLTMxLjEgMC00Ny45IDEzOC4yIDI5LjkgMCA0OS4xLTEzOC4yeiJdCiAgICB9OwogICAgZmFPY3RvcHVzRGVwbG95ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm9jdG9wdXMtZGVwbG95IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwODIiLCAiTTQ1NS43IDM0OS4yYy00NS45LTM5LjEtMzYuNy03Ny45LTE2LjEtMTI4LjEgMzUuNy04Ny0yMy41LTE4Ni45LTEwOS42LTIxMi44LTkyLjktMjcuOS0xOTUuNyAxNi0yMzAuMyAxMDguOC04LjcgMjMuNS0xMi41IDQ4LjUtMTEgNzMuNSAxLjcgMjkuNSAxNC43IDUzIDI0LjEgODAuMyAxNy4yIDUwLjItMjguMSA5Mi43LTY2LjcgMTE3LjYtNDYuOCAzMC4yLTM2LjMgMzkuOS04LjQgNDEuOSAyMy40IDEuNyA0NC41LTQuNSA2NS4zLTE1IDkuMi00LjYgNDAuNy0xOC45IDQ1LjEtMjguNi0xMi4yIDI2LjYtMzcgNzIuNy0yMS41IDEwMi4xIDE5LjEgMzYuMiA2Ny4xLTMxLjggNzYuNy00NS44IDguNi0xMi42IDQzLTgxLjMgNjMuNi00Ni45IDE4LjkgMzEuNCA4LjYgNzYuNCAzNS43IDEwNC42IDMyLjkgMzQuMiA1MS4yLTE4LjMgNTEuNC00NC4yIC4yLTE2LjQtNi4xLTk1LjkgMjkuOS01OS45IDIxLjQgMjEuNCA1Mi45IDcxLjIgODguNiA2NyAzOC43LTQuNS0yMi4xLTY4LTI4LjMtNzguNyA1LjQgNC4zIDUzLjcgMzQuMSA1My44IDkuNSAuMS0xOC44LTMwLjEtMzQuNy00Mi41LTQ1LjN6Il0KICAgIH07CiAgICBmYVlhbW1lciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ5YW1tZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjg0MCIsICJNNTAwLjcgMTU5LjVjLS40LTEuOC0xLjItMy40LTIuMy00LjhzLTIuNS0yLjYtNC4xLTMuNWMtMy4xLTEuNi02LjctMi0xMC4xLTEuMWwtMjYuNCA2LjYgMC0uMi0yMi4zIDUuOC0xLjIgLjMtLjYtMi4yYy0xNS41LTU4LjMtNDUtMTExLjktODYuMS0xNTYuMi0yLjYtMi43LTYuMS00LjItOS44LTQuM3MtNy4zIDEuMy0xMCAzLjhsLTEwMi45IDEwMi43LTE5OS45IDBjLTYuNiAwLTEyLjkgMi42LTE3LjYgNy4zUzAgMTI0LjggMCAxMzEuNGwwIDI0OUMwIDM4NyAyLjYgMzkzLjMgNy4zIDM5OHMxMSA3LjMgMTcuNiA3LjNMMjI1IDQwNS4zIDMyOC4xIDUwOGMyLjYgMi42IDYgNCA5LjcgNHM3LjEtMS40IDkuNy00Yy4xLS4xIC4yLS4zIC40LS40IDI5LjMtMzEuNSA1Mi44LTY3LjggNjkuNi0xMDcuNCA2LjktMTYuNSAxMi43LTMzLjUgMTcuMy01MC44bDAgMCAyMC40IDUuMyAwLS4xIDI4LjMgNy4zYy45IC4yIDEuNyAuNCAyLjYgLjUgMS40IC4yIDIuOCAuMiA0LjEtLjEgMi41LS41IDQuOC0xLjcgNi43LTMuNHMzLjItNCAzLjgtNi41YzE1LjItNjMuNCAxNS4yLTEyOS42IC4xLTE5M2wwIDB6TTMzNy4xIDI0LjdsMCAwIDAgMCAwIDB6TTIyNi45IDE4OS44bC01Mi42IDkxLjNjLTEgMS43LTEuNSAzLjctMS41IDUuN2wwIDQ2LjJjMCA1LjgtMi4zIDExLjQtNi41IDE1LjZzLTkuNyA2LjQtMTUuNiA2LjRsLTMuNCAwYy01LjggMC0xMS40LTIuMy0xNS42LTYuNHMtNi41LTkuNy02LjUtMTUuNmwwLTQ1LjdjMC0xLjktLjUtMy44LTEuNC01LjVMNzIuMyAxODkuNmMtMS45LTMuNC0yLjgtNy4xLTIuOC0xMXMxLjEtNy42IDMtMTAuOSA0LjctNi4xIDguMS04IDcuMS0yLjkgMTEtMi45bDMuMyAwYzQgMCA4IDEuMSAxMS41IDMuMnM2LjMgNS4xIDguMSA4LjdsMzYuNCA3MC4zIDM3LjUtNzAuNWMxLjgtMy41IDQuNi02LjQgNy45LTguNHM3LjItMy4yIDExLjEtMy4yIDcuOCAuOSAxMS4yIDIuOCA2LjMgNC43IDguMiA4LjFjMiAzLjMgMyA3LjEgMyAxMXMtMSA3LjctMyAxMWwwIDB6TTMzNy4xIDI0LjdjMzUuOSA0MC42IDYxLjkgODkgNzUuOCAxNDEuM2wuNiAyLTExNC4xIDI5LjYgMC02Ni4xYzAtNi42LTIuNy0xMi45LTcuMy0xNy42cy0xMS03LjMtMTcuNi03LjNsLTE5LjQgMCA4Mi4xLTgxLjh6TTM5Ny42IDM5MmwwIDAgMCAwYy0xNC43IDM0LjgtMzUuMSA2Ny02MC4yIDk1LjJsLTgyLjItODEuOSAxOS4yIDBjNi42IDAgMTIuOS0yLjYgMTcuNi03LjNzNy4zLTExIDcuMy0xNy42bDAtNjYuMiAxMTQuNiAyOS45Yy00LjQgMTYuMy05LjggMzIuMy0xNi4zIDQ3LjlsMCAwem04NC01Mi40bDAgMC01MC42LTEzLjEtMTMxLjctMzQuMyAwLTcyLjUgMTE5LjctMzEgNC41LTEuMmMyOS45LTcuNyA0OS4yLTEyLjggNTguMS0xNS4xIDEyIDU1LjEgMTIgMTEyLjEgMCAxNjcuMnoiXQogICAgfTsKICAgIGZhTW9keCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtb2R4IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyODUiLCAiTTM1NiAyNDEuOGwzNi43IDIzLjcgMCAyMTQuNS0xMzMtODMuOCA5Ni4zLTE1NC40ek00NDAgNzVsLTIxMy43IDAtMjMgMzcuOCAxNTMuNSA5Ni41IDgzLjItMTM0LjN6TTM1MSAyMTcuOGwtMjk1LjgtMTg1LjggMCAyMTQuNSA0NiAyOSAyNDkuOC01Ny43ek05NyAyOTQuMkw4IDQzNyAyMjEuNyA0MzcgMzQ2LjcgMjM2LjUgOTcgMjk0LjJ6Il0KICAgIH07CiAgICBmYVNxdWFyZVRocmVhZHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXRocmVhZHMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTYxOSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjk0LjIgMjQ0LjNjMTkuNSA5LjMgMzMuNyAyMy41IDQxLjIgNDAuOSAxMC40IDI0LjMgMTEuNCA2My45LTIwLjIgOTUuNC0yNC4yIDI0LjEtNTMuNSAzNS05NS4xIDM1LjNsLS4yIDBjLTQ2LjgtLjMtODIuOC0xNi4xLTEwNi45LTQ2LjgtMjEuNS0yNy4zLTMyLjYtNjUuNC0zMy0xMTMuMWwwLS4yYy40LTQ3LjcgMTEuNS04NS43IDMzLTExMy4xIDI0LjItMzAuNyA2MC4yLTQ2LjUgMTA2LjktNDYuOGwuMiAwYzQ2LjkgLjMgODMuMyAxNiAxMDguMiA0Ni42IDEyLjMgMTUuMSAyMS4zIDMzLjMgMjcgNTQuNGwtMjYuOSA3LjJjLTQuNy0xNy4yLTExLjktMzEuOS0yMS40LTQzLjYtMTkuNC0yMy45LTQ4LjctMzYuMS04Ny0zNi40LTM4IC4zLTY2LjggMTIuNS04NS41IDM2LjItMTcuNSAyMi4zLTI2LjYgNTQuNC0yNi45IDk1LjUgLjMgNDEuMSA5LjQgNzMuMyAyNi45IDk1LjUgMTguNyAyMy44IDQ3LjQgMzYgODUuNSAzNi4yIDM0LjMtLjMgNTYuOS04LjQgNzUuOC0yNy4zIDIxLjUtMjEuNSAyMS4xLTQ3LjkgMTQuMi02NC00LTkuNC0xMS40LTE3LjMtMjEuMy0yMy4zLTIuNCAxOC03LjkgMzIuMi0xNi41IDQzLjItMTEuNCAxNC41LTI3LjcgMjIuNC00OC40IDIzLjUtMTUuNyAuOS0zMC44LTIuOS00Mi42LTEwLjctMTMuOS05LjItMjItMjMuMi0yMi45LTM5LjUtMS43LTMyLjIgMjMuOC01NS4zIDYzLjUtNTcuNiAxNC4xLS44IDI3LjMtLjIgMzkuNSAxLjktMS42LTkuOS00LjktMTcuNy05LjgtMjMuNC02LjctNy44LTE3LjEtMTEuOC0zMC44LTExLjlsLS40IDBjLTExIDAtMjYgMy4xLTM1LjYgMTcuNmwtMjMtMTUuOGMxMi44LTE5LjQgMzMuNi0zMC4xIDU4LjUtMzAuMWwuNiAwYzQxLjggLjMgNjYuNiAyNi4zIDY5LjEgNzEuOCAxLjQgLjYgMi44IDEuMiA0LjIgMS45bC4xIC41em0tNzEuOCA2Ny41YzE3LS45IDM2LjQtNy42IDM5LjctNDguOC04LjgtMS45LTE4LjYtMi45LTI5LTIuOS0zLjIgMC02LjQgLjEtOS42IC4zLTI4LjYgMS42LTM4LjEgMTUuNS0zNy40IDI3LjkgLjkgMTYuNyAxOSAyNC41IDM2LjQgMjMuNmwtLjEtLjF6Il0KICAgIH07CiAgICBmYU9sZFJlcHVibGljID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm9sZC1yZXB1YmxpYyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTEwIiwgIk0yNDMuOCAxMC4yYzcuNS0uMyAxNS0uMyAyMi41LS4xIDMuNiAuMSA3LjIgLjQgMTAuOCAuNyA0LjkgLjMgOS44IDEgMTQuNyAxLjYgMi45IC40IDUuOCAxIDguNyAxLjUgNy45IDEuMyAxNS43IDMuMyAyMy40IDUuNCAxMi4yIDMuNSAyNC4yIDcuOSAzNS44IDEzLjIgMjYuNiAxMi4yIDUwLjkgMjkuMiA3MS42IDQ5LjkgMjAgMjAuMSAzNi43IDQzLjUgNDguOSA2OS4yIDEuMSAyLjYgMi40IDUuMSAzLjUgNy43IDIuOCA2LjQgNS40IDEzIDcuNiAxOS42IDQuMSAxMi4zIDcuMyAyNSA5LjQgMzcuOCAuNiAzLjEgMSA2LjMgMS40IDkuNSAuNSAzLjggLjkgNy43IDEuMiAxMS42IC44IDguMyAuOCAxNi43IC44IDI1LjEtLjEgNS0uMyA5LjktLjcgMTQuOS0uMiAzLjQtLjUgNi44LTEgMTAuMS0uNCAyLjctLjYgNS41LTEuMSA4LjItLjkgNS4xLTEuNyAxMC4zLTIuOSAxNS40LTQuMSAxOC41LTEwLjMgMzYuNi0xOC41IDUzLjYtMTUuOCAzMi44LTM4LjggNjIuMi02Ny4xIDg1LjEtMTcuMyAxNC4xLTM2LjQgMjUuOS01Ni45IDM0LjktNi4yIDIuNy0xMi41IDUuMy0xOC45IDcuNC0zLjUgMS4yLTcgMi40LTEwLjYgMy40LTYuNiAxLjktMTMuMyAzLjYtMjAgNS00LjcgLjktOS4zIDEuNy0xNCAyLjUtNS4zIC43LTEwLjUgMS40LTE1LjggMS43LTYuNyAuNy0xMy40IC44LTIwLjEgLjgtNi44IDAtMTMuNi0uMS0yMC40LS44LTMuMy0uMi02LjYtLjUtOS44LTEtMi43LS40LTUuNS0uNi04LjItMS4xLTQuMS0uNy04LjItMS40LTEyLjQtMi4yLTQuMi0uOS04LjUtMS45LTEyLjctMy04LjYtMi4yLTE3LjEtNS0yNS40LTguMS0xMC41LTQuMS0yMC44LTguNy0zMC42LTE0LjItMi4xLTEuMi00LjMtMi4zLTYuNC0zLjYtMTEuMi02LjYtMjEuOS0xNC4xLTMxLjktMjIuMy0zNC43LTI4LjQtNjEuNC02Ni40LTc2LjQtMTA4LjctMy4xLTguNy01LjctMTcuNi03LjgtMjYuNy0xLjUtNi4yLTIuNS0xMi40LTMuNi0xOC43LS40LTIuMy0uNi00LjctMS03LjEtLjYtNC0uOC04LTEuMi0xMS45LS44LTkuNS0uNy0xOS0uNS0yOC41IC4xLTMuNSAuMy03IC43LTEwLjUgLjMtMy4yIC41LTYuNCAuOS05LjUgLjQtMi44IC43LTUuNiAxLjItOC40IC43LTMuOSAxLjMtNy45IDIuMS0xMS44IDMuNC0xNi41IDguNS0zMi43IDE1LjMtNDguMiAxLjItMi45IDIuNi01LjcgMy45LTguNiA4LjEtMTYuNyAxNy45LTMyLjYgMjkuNS00Ny4xIDIwLTI1LjQgNDUuMS00Ni43IDczLjMtNjIuNSA3LjUtNC4yIDE1LjItOCAyMy4xLTExLjQgMTUuOC02LjkgMzIuNC0xMiA0OS4zLTE1LjQgMy41LS43IDctMS4yIDEwLjYtMS44IDIuNi0uNSA1LjMtLjcgNy45LTEuMSAzLjUtLjUgNy4xLS43IDEwLjYtMSAyLjUtLjIgNC45LS40IDcuNC0uNXptOC42IDI0LjRjLTkuMiAuMS0xOC40IDEtMjcuNiAyLjItNy4zIDEuMS0xNC41IDIuNi0yMS43IDQuMy0xMy45IDMuNS0yNy41IDguMy00MC41IDE0LjQtMTAuNSA1LTIwLjYgMTAuNy0zMC4yIDE3LjItNC4yIDIuOS04LjQgNS44LTEyLjMgOS01LjEgNC0xMCA4LjItMTQuNyAxMi42LTIuNSAyLjItNC44IDQuNy03LjIgNy4xLTI4LjIgMjguOC00OC40IDY1LjQtNTcuNSAxMDQuNy0yIDguNC0zLjUgMTctNC40IDI1LjYtMS4xIDguOS0xLjQgMTcuOS0xLjQgMjYuOCAuMSA3LjEgLjQgMTQuMyAxLjIgMjEuNCAuNiA3LjEgMS45IDE0LjIgMy4yIDIxLjIgMS4xIDQuNiAyIDkuMyAzLjMgMTMuOSA2LjMgMjMuNCAxNi41IDQ1LjcgMzAuMSA2NS44IDguNiAxMyAxOC44IDI0LjkgMzAgMzUuOCAxNi4zIDE1LjggMzUgMjkgNTUuMyAzOS4yIDcuMyAzLjUgMTQuNyA2LjkgMjIuMyA5LjYgNSAxLjggMTAuMSAzLjYgMTUuMiA1IDExLjMgMy4yIDIyLjggNS42IDM0LjQgNy4xIDIuOSAuMyA1LjggLjYgOC43IC45IDEzLjggMS4xIDI3LjcgMSA0MS41LS40IDQuNC0uNiA4LjktMSAxMy4zLTEuOCAzLjYtLjcgNy4zLTEuMiAxMC45LTIuMSA0LjEtMSA4LjMtMS45IDEyLjQtMy4xIDI2LjUtNy4zIDUxLjYtMTkuNyA3My42LTM2LjIgMTUuOC0xMS44IDMwLTI1LjggNDIuMS00MS4zIDMuMy00IDYuMi04LjMgOS4xLTEyLjYgMy40LTUuMSA2LjYtMTAuMiA5LjYtMTUuNSAyLjQtNC40IDQuNy04LjkgNy0xMy40IDUuNy0xMi4xIDEwLjMtMjQuNiAxMy44LTM3LjUgMi42LTEwIDQuNy0yMC4yIDUuOS0zMC40IDEuOC0xMy41IDEuOS0yNy4xIDEuMy00MC43LS4zLTMuOS0uNy03LjgtMS0xMS43LTIuMi0xOS4xLTYuOC0zNy45LTEzLjgtNTUuOC02LTE1LjEtMTMuNS0yOS42LTIyLjYtNDMuMS0xMi43LTE4LjgtMjguMi0zNS43LTQ2LTQ5LjgtMjUtMjAtNTQuNS0zNC41LTg1LjYtNDIuMS03LjgtMS45LTE1LjctMy4zLTIzLjYtNC40LTMuOS0uNi03LjgtLjgtMTEuOC0xLjItNy40LS42LTE0LjgtLjctMjIuMi0uNnpNMTQ3LjMgODMuNWMxMy4zLTguOSAyOC4xLTE1LjQgNDMuMy0yMC4yLTMuMiAxLjgtNi40IDMuNC05LjUgNS4zLTExLjIgNi43LTIxLjUgMTQuOS0zMC40IDI0LjUtNi44IDcuNC0xMi44IDE1LjctMTcgMjQuOS0zLjMgNi45LTUuNiAxNC4yLTYuOSAyMS43LS45IDQuOC0xLjMgOS44LTEuMiAxNC44IC4xIDEzLjcgNC40IDI3LjEgMTEuMyAzOC44IDUuOSAxMC4yIDEzLjYgMTkuMyAyMi40IDI3LjMgNC45IDQuNCAxMC4yIDguMSAxNSAxMi42IDIuMyAyLjIgNC41IDQuNCA2LjQgNi45IDIuNiAzLjMgNC45IDcgNiAxMS4xIC45IDMgLjcgNi4yIC43IDkuMyAwIDQuMSAwIDguMiAwIDEyLjMgLjEgMy41IDAgNy4xIC4xIDEwLjYgLjEgMi40IDAgNC44IC4xIDcuMSAuMiA1LjggLjEgMTEuNSAuMSAxNy4zIC4xIDIuOSAwIDUuOCAuMSA4LjcgMCAxLjYgLjEgMy4zIDAgNC45LS45IC4xLTEuOCAuMi0yLjcgLjItMTEgMC0yMS45LTIuNi0zMi02LjktNi0yLjctMTEuOC01LjktMTcuMS05LjgtNS44LTQuMi0xMS4xLTktMTUuOC0xNC4zLTYuNS03LjItMTItMTUuNC0xNi42LTIzLjktMS4xLTItMi4yLTQtMy4yLTYuMS0xLjItMi42LTIuNi01LjEtMy43LTcuOC00LTkuNy02LjYtMTkuOS04LjEtMzAuMy0uNS00LjQtMS4xLTguOS0xLjItMTMuMy0uNy0xNS43IC44LTMxLjYgNC43LTQ2LjggMi4xLTguMiA0LjgtMTYuMiA4LjMtMjMuOCA2LjMtMTQuMiAxNS4zLTI3LjIgMjYuMy0zOC4yIDYuMy02LjIgMTMuMS0xMS44IDIwLjUtMTYuN3pNMzIyLjcgNjMuNGMyLjcgLjcgNS40IDEuNyA4LjEgMi43IDYuNCAyLjMgMTIuNyA0LjggMTguNyA4IDEzLjEgNi40IDI1LjMgMTQuOCAzNS44IDI1IDEwLjIgMTAgMTguNyAyMS42IDI1LjEgMzQuMyAxLjMgMi43IDIuNiA1LjUgMy44IDguMyA2LjMgMTUuMSAxMCAzMS4zIDExLjIgNDcuNiAuNCA0LjUgLjQgOS4xIC41IDEzLjYgLjEgMTEuNi0xLjUgMjMuMy00LjMgMzQuNS0yIDcuMy00LjMgMTQuNS03LjkgMjEuMi0zLjIgNi42LTYuNyAxMy4yLTEwLjggMTkuMi02LjkgMTAuNS0xNS42IDE5LjktMjUuOCAyNy4yLTEwLjUgNy42LTIyLjYgMTMtMzUuNCAxNS40LTMuNSAuNy03LjEgMS4xLTEwLjcgMS4yLTEuOCAuMS0zLjcgLjItNS42LS4xLS4zLTIuMSAwLTQuMyAwLTYuNSAwLTMuNyAuMS03LjQgLjEtMTEuMiAuMi03IDAtMTQuMSAuMi0yMS4xIDAtMi40IDAtNC44IDAtNy4xIC4yLTUuMSAwLTEwLjEgLjEtMTUuMiAuMS0zLS4yLTYgLjUtOSAuNy0yLjUgMS44LTQuOSAzLjEtNy4xIDQuNS03LjMgMTEuMS0xMyAxNy43LTE4LjMgNS40LTQuMiAxMC41LTguOCAxNS0xMy44IDcuNy04LjQgMTQuMi0xNy45IDE4LjgtMjguMyAyLjUtNS45IDQuNS0xMi4xIDUuNS0xOC41IC45LTQuNCAxLjEtOC44IDEtMTMuMyAwLTcuOC0xLjQtMTUuNi0zLjYtMjMuMi0xLjgtNS43LTQuMy0xMS4yLTcuMS0xNi40LTMuOS02LjktOC42LTEzLjMtMTQtMTkuMi05LjktMTAuOC0yMS44LTE5LjktMzQuNi0yNy4xLTEuOC0xLTMuOC0xLjgtNS42LTN6TTIyMS45IDEyMS45YzEtMS4yIDItMi4zIDMuMS0zLjQtLjYgLjktMS4zIDEuOC0yIDIuNy0zLjEgMy45LTUuNSA4LjMtNyAxMy4xLS45IDMuMy0xLjcgNi42LTEuNyAxMC0uMSAyLjUtLjEgNS4xIC4zIDcuNiAxLjEgNy42IDQuMyAxNC45IDguOCAyMS4xIDIgMi43IDQuMiA1LjMgNi45IDcuMyAxLjYgMS4zIDMuNSAyLjEgNS4zIDMgMy4xIDEuNyA2LjMgMy4yIDkuMSA1LjUgMi43IDIuMSA0LjYgNS4zIDQuNCA4LjggMCA3My43IDAgMTQ3LjMgMCAyMjEgMCAxLjQtLjEgMi43IDAgNCAuMSAxLjUgLjggMi44IDEuNSA0LjEgLjkgMS43IDEuOCAzLjMgMy4yIDQuNiAuOSAuOCAyIDEuNCAzLjIgMS4yIDEuNS0uMiAyLjctMS40IDMuNC0yLjYgMS0xLjUgMS43LTMuMiAyLjMtNC45IC44LTIuMSAuNC00LjQgLjUtNi42IC4xLTQgMC04LjEgLjEtMTIuMSAwLTUuOSAwLTExLjggLjEtMTcuNyAuMS0zLjYgMC03LjIgLjEtMTAuOSAuMi00IDAtOC4xIC4xLTEyLjEgMC02IDAtMTIgLjEtMTggLjEtMy42IDAtNy4yIC4xLTEwLjkgLjEtMy45IDAtNy45IC4xLTExLjggMC02IDAtMTIgLjEtMTggLjItMy45IDAtNy45IC4yLTExLjggLjMgMS40IC4xIDIuOSAuMiA0LjQgLjIgMy42IC40IDcuMiAuOCAxMC44IC4zIDMuNCAuNCA2LjkgLjkgMTAuMyAuNCAzLjEgLjUgNi4yIDEgOS4zIC42IDQuMSAuOSA4LjIgMS41IDEyLjMgMS41IDkgMi44IDE4LjEgNS4xIDI3IDEuMSA0LjggMi40IDkuNiA0IDE0LjMgMi41IDcuOSA1LjcgMTUuNyAxMC4zIDIyLjYgMS43IDIuNiAzLjkgNSA2LjEgNy4yIC4zIC4yIC42IC41IC45IC43IC42IC4zIDEuMy0uMSAxLjctLjYgLjctLjkgMS4yLTEuOSAxLjctMi45IDQuMS03LjggOC4yLTE1LjYgMTIuMy0yMy4zIC43LTEuMyAxLjQtMi42IDIuNi0zLjYgMS44LTEuNiAzLjgtMi43IDYtMy42IDIuOS0xLjIgNS45LTIuMiA5LTIuNCA2LjYtLjYgMTMuMSAuNyAxOS42IDEuOCAzLjcgLjYgNy40IDEuMiAxMS4xIDEuNCAzLjcgLjEgNy41IC4xIDExLjItLjMgOC42LS45IDE3LTMgMjQuOS02LjIgNS4zLTIuMiAxMC41LTQuOCAxNS4zLTcuOSAxMS41LTcuMiAyMS41LTE2LjYgMzAtMjcgMS4yLTEuNCAyLjItMi45IDMuNS00LjMtMS4yIDMuMi0yLjcgNi40LTQuMiA5LjUtMS4zIDIuOS0yLjggNS42LTQuMyA4LjQtNS4yIDkuNi0xMSAxOC45LTE3LjggMjcuNS00IDUuMi04LjUgMTAuMS0xMy4zIDE0LjYtNi42IDYuMS0xNC4xIDExLjQtMjIuNCAxNC44LTguMiAzLjQtMTcuMyA0LjYtMjYuMSAzLjMtMy42LS42LTctMS43LTEwLjQtMi45LTIuOC0xLTUuNC0yLjQtOC0zLjctMy40LTEuNy02LjYtMy44LTkuNy02LjEgMi43IDMuMSA1LjcgNS45IDguNyA4LjYgNC4zIDMuOCA4LjcgNy4zIDEzLjYgMTAuMiA0IDIuNSA4LjMgNC40IDEyLjggNS41IDEuNSAuNCAzIC41IDQuNSAuNi0xLjMgMS4xLTIuNiAyLTQgMy05LjYgNi41LTIwIDExLjktMzAuNyAxNi40LTIwLjkgOC43LTQzLjIgMTQtNjUuNyAxNS4zLTQuNyAuMi05LjMgLjQtMTQgLjQtNS0uMS0xMC0uMS0xNC45LS43LTExLjItLjgtMjIuMy0yLjctMzMuMi01LjQtMTAuNC0yLjctMjAuNi02LjEtMzAuMy0xMC42LTguNy0zLjktMTcuMS04LjQtMjUtMTMuOC0xLjgtMS4zLTMuNy0yLjUtNS40LTQuMSA2LjYtMS4yIDEzLTMuNCAxOS02LjUgNS43LTIuOSAxMS02LjcgMTUuNi0xMS4xIDIuMi0yLjIgNC4zLTQuNiA2LjItNy4xLTMuNCAyLjEtNi45IDQuMi0xMC42IDUuOC00LjQgMi4yLTkuMSAzLjgtMTMuOCA1LTUuNyAxLjUtMTEuNyAxLjctMTcuNiAxLjEtOC4xLTEtMTUuOS00LjMtMjIuNS05LTQuMy0yLjktOC4yLTYuNC0xMi0xMC4xLTkuOS0xMC4yLTE4LjItMjEuOC0yNS43LTMzLjktMy45LTYuMy03LjUtMTIuNy0xMS4xLTE5LjItMS0yLTIuMS00LjEtMy4yLTYuMSAyLjggMi45IDUuNiA2IDguNCA4LjkgMTkuMiAxOS4yIDM3LjYgMzIuMyA1My43IDM1LjUgMy4xIC43IDYuMyAuNSA5LjUgLjggMi44IC4zIDUuNiAuMiA4LjMgLjMgNSAuMSAxMC4xIDAgMTUuMi0uMiAzLjYtLjIgNy4zLS43IDEwLjktMS4xIDIuMS0uMiA0LjEtLjcgNi4xLTEuMiAzLjktMSA4LjEtMSAxMS44IC42IDQuOCAxLjggOC40IDUuNiAxMS40IDkuNyAyLjIgMyA0LjEgNi4yIDUuNyA5LjYgMS4yIDIuNCAyLjUgNC44IDMuNiA3LjMgMSAyLjIgMi4yIDQuNCAzLjQgNi41IC43IDEgMS40IDIuMiAyLjYgMi42IDEuMS0uOCAxLjctMS45IDIuMy0zIDIuMS00LjIgMy40LTguNiA0LjktMTMgMi02LjYgMy44LTEzLjMgNS4yLTIwIDIuMi05LjMgMy4yLTE4LjcgNC41LTI4LjEgLjYtNCAuOC04IDEuMy0xMiAuOS0xMC42IDEuOS0yMS4zIDIuMi0zMS45IC4xLTEuOSAuMi0zLjcgLjMtNS42IDAtNC4zIC4yLTguNyAuMi0xMyAwLTIuNCAwLTQuOCAwLTcuMSAwLTUuMS0uMi0xMC4xLS4yLTE1LjItLjItNi42LS43LTEzLjItMS4zLTE5LjgtLjctNS45LTEuNS0xMS44LTMuMS0xNy41LTItNy43LTUuNi0xNS05LjgtMjEuOC0zLjItNS4xLTYuOC05LjktMTEuMS0xNC0zLjktMy45LTguNi03LjEtMTMuOS04LjQtMS41LS40LTMuMS0uNC00LjYtLjYgLjEtMyAuNy01LjkgMS4zLTguOCAxLjYtNy43IDMuOC0xNS4zIDYuOC0yMi42IDEuNS00IDMuNC03LjkgNS40LTExLjcgMy40LTYuNiA3LjYtMTIuOCAxMi41LTE4LjV6bTMxLjMgMS43Yy40LS4xIC43LS4xIDEuMS0uMiAuMiAxLjggLjEgMy42IC4xIDUuNGwwIDM4LjFjMCAxLjcgLjEgMy41LS4yIDUuMi0uNCAwLS43IDAtMS4xIDAtLjktMy44LTEuNy03LjYtMi42LTExLjMtLjQtMS41LS42LTMuMS0xLjEtNC42LTEuNy0uMi0zLjQtLjItNS4yLS4yLTUuMSAwLTEwLjEgMC0xNS4yIDAtMS43IDAtMy4zIC4xLTUgMCAwLS40LS4zLS45IC4yLTEuMiAxLjMtLjcgMi43LS45IDQuMS0xLjQgMy40LTEuMSA2LjktMi4yIDEwLjMtMy4zIDEuNC0uNSAyLjktLjcgNC4yLTEuNSAwLS42IDAtMS4xIDAtMS43LTEuMi0uNi0yLjUtLjktMy44LTEuMy0zLjEtMS02LjMtMi05LjQtMy0xLjgtLjYtMy43LTEtNS40LTEuOCAwLS40LS4xLS43LS4xLTEuMSA1LjEtLjIgMTAuMiAuMSAxNS4zLS4xIDMuNC0uMSA2LjcgLjEgMTAuMS0uMSAuMS0uNCAuMy0uOCAuNC0xLjIgMS4xLTQuOSAyLjMtOS44IDMuNC0xNC43em02LS4yYy40IDAgLjcgLjEgMS4xIC4yIDEgMy44IDEuNyA3LjggMi43IDExLjYgLjQgMS40IC42IDIuOSAxIDQuMyAyLjUgLjIgNS4xIDAgNy42IDAgNS4yIC4xIDEwLjMgLjEgMTUuNSAuMSAuOCAwIDEuNSAwIDIuMyAuMSAwIC40LS4xIC43LS4xIDEuMS0xLjggLjgtMy44IDEuMi01LjcgMS45LTMuNyAxLjItNy41IDIuNC0xMS4yIDMuNi0uNiAuMi0xLjEgLjQtMS43IC42LS4yIC42LS4yIDEuMS0uMSAxLjcgLjkgLjUgMS44IC44IDIuOCAxLjEgNC45IDEuNSA5LjcgMy4xIDE0LjYgNC42IC40IC4xIC44IC4zIDEuMSAuNSAuNCAuMyAuMiAuOCAuMiAxLjItMS43IC4xLTMuMyAwLTUgMC01LjIgMC0xMC4zIDAtMTUuNSAwLTEuNiAwLTMuMiAwLTQuOCAuMi0uNSAxLjctLjcgMy40LTEuMiA1LjEtLjkgMy42LTEuNSA3LjItMi41IDEwLjgtLjQgMC0uNyAwLTEuMSAuMS0uMy0xLjctLjItMy41LS4yLTUuMmwwLTM4LjFjMC0xLjgtLjEtMy42IC4xLTUuNHptLTE4NiA0NWMxLjEtMi4yIDIuMS00LjQgMy40LTYuNS0xLjggNy42LTIuOSAxNS4zLTMuNiAyMy0uOCA3LjctLjggMTUuNS0uNSAyMy4yIDEuMSAxOS45IDUuNSAzOS44IDE0LjIgNTcuOSAzIDYgNi40IDExLjggMTAuNSAxNy4xIDYuMSA3LjUgMTIuNSAxNC44IDE5LjggMjEuMSA0LjggNC4xIDEwIDcuOCAxNS41IDEwLjggMy4zIDEuNyA2LjUgMy40IDkuOSA0LjcgNSAyIDEwLjIgMy42IDE1LjQgNC45IDMuOCAxIDcuOCAxLjQgMTEuNSAyLjcgNSAxLjYgOS41IDQuNiAxMyA4LjQgNC45IDUuMiA4LjEgMTEuOSAxMC4yIDE4LjcgMSAyLjkgMS42IDUuOSAyLjIgOC45IC4yIC44IC4yIDEuNSAuMiAyLjMtNi41IDIuOC0xMy4zIDUuMS0yMC4zIDYuMi00LjEgLjgtOC4zIDEtMTIuNSAxLjEtMTAuMiAuMi0yMC41LTEuOC0zMC4xLTUuMS0zLjctMS40LTcuNS0yLjktMTEtNC43LTguMS0zLjgtMTUuNi04LjctMjIuNS0xNC41LTIuOS0yLjYtNS44LTUuMS04LjQtOC05LjItOS44LTE2LjMtMjEuNC0yMS44LTMzLjctMi40LTUuNS00LjYtMTEuMi02LjQtMTctMS4yLTMuOS0yLjQtNy45LTMuMy0xMS45LS43LTIuOS0xLjItNS45LTEuOS04LjktLjUtMi4xLS43LTQuMy0xLTYuNS0uOC01LjQtMS4zLTEwLjktMS4zLTE2LjQgLjEtNi4yIC4yLTEyLjQgMS4xLTE4LjUgLjQtMi45IC43LTUuNyAxLjItOC42IDEtNS43IDIuMS0xMS40IDMuNy0xNi45IDMuMS0xMS42IDcuNS0yMyAxMi43LTMzLjh6bTM2My43LTYuNGMxLjEgMS43IDEuOSAzLjUgMi44IDUuMyAyLjEgNC41IDQuMiA4LjkgNiAxMy41IDcuNiAxOC44IDEyLjMgMzguOCAxMyA1OSAwIDEuOCAuMSAzLjUgLjEgNS4zIC4xIDkuNi0xLjMgMTkuMS0zLjIgMjguNS0uNyAzLjYtMS41IDcuMi0yLjYgMTAuNy00IDE0LjctMTAgMjktMTguNCA0MS44LTguMiAxMi42LTE5IDIzLjUtMzEuOCAzMS40LTUuNyAzLjYtMTEuOCA2LjYtMTggOS4yLTUuOCAyLjItMTEuNyA0LTE3LjggNS4xLTYuNCAxLTEyLjkgMS41LTE5LjQgMS4yLTcuOS0uNS0xNS44LTIuMS0yMy4yLTQuOC0xLjktLjgtMy45LTEuNS01LjgtMi4zLS4yLTEuNSAuMi0zIC41LTQuNSAxLjItNS43IDMtMTEuNCA1LjctMTYuNiAyLjQtNC41IDUuNS04LjcgOS41LTExLjkgMi40LTIuMSA1LjItMy42IDguMi00LjggMy42LTEuNSA3LjUtMiAxMS4yLTIuOCA3LjItMS43IDE0LjQtMy45IDIxLjItNyAxMC4zLTQuNyAxOS43LTExLjQgMjcuNi0xOS41IDEuNi0xLjYgMy4yLTMuMiA0LjctNC45IDMuNC0zLjggNi43LTcuNiA5LjgtMTEuNSA3LjUtMTAuMSAxMi44LTIxLjYgMTYuNy0zMy41IDEuNi01LjMgMy4yLTEwLjYgNC4yLTE2LjEgLjYtMi45IDEtNS44IDEuNS04LjcgLjktNi4xIDEuNi0xMi4yIDEuNy0xOC40IC4xLTYuNiAuMS0xMy4zLS41LTE5LjktLjctOC0xLjktMTYtMy43LTIzLjh6Il0KICAgIH07CiAgICBmYVN1c2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3VzZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmN2Q2IiwgIk02MDQuNSAyMTBhMTAuNCAxMC40IDAgMSAxIC0xMS40LTE3LjQgMTAuNCAxMC40IDAgMSAxIDExLjQgMTcuNHpNNjIxIDE4Ny4yYTM4LjUgMzguNSAwIDEgMSAtNzUgMTcuNiAzOC41IDM4LjUgMCAxIDEgNzUtMTcuNnpNNDMzLjcgMzM2LjdjMy4yIDQuNiA1LjggOSA3LjMgMTMuNCAxIDMuMSAyLjQgNy4zIDUuNSA4LjkgLjIgLjEgLjMgLjIgLjUgLjIgNS43IDIuMSAyMC4zIDEuNyAyMC4zIDEuN2wyNi44IDBjMi4zIDAgMjIuNCAwIDIxLjktMi4zLTIuNC0xMC44LTE0LjktMTIuNy0yNC40LTE4LjMtOC43LTUuMi0xNy0xMS4xLTIwLjgtMjEuMy0yLTUuMi0uOC0xNy40IDIuNi0yMS44IDIuNS0zLjIgNi4xLTUuMyAxMC02LjIgNC4zLS45IDguOC0uMSAxMy4xIC4zIDUuMyAuNSAxMC42IDEuNSAxNS45IDIuMiAxMC4zIDEuMyAyMC42IDEuOSAzMSAxLjYgMTcuMS0uNSAzNC4yLTMuMiA1MC40LTguNyAxMS4zLTMuOCAyMi40LTguOSAzMi0xNi4xIDEwLjktOC4xIDguMS03LjQtMy02LjItMTMuMyAxLjQtMjYuNiAxLjYtMzkuOSAuOC0xMi40LS43LTI0LjctMi4yLTM1LjktNy45LTguOC00LjYtMTYuNC05LjEtMjMuNC0xNi4yLTEtMS4xLTEuNy00LjIgLjItNi4yIDEuOS0xLjkgNS44LS44IDcgLjIgMTIuMiAxMC4yIDMwLjUgMTguNiA0OS4zIDE5LjUgMTAuMiAuNSAyMC4xIC43IDMwLjQgLjMgNS4xLS4yIDEyLjgtLjIgMTcuOS0uMyAyLjYgMCA5LjggLjcgMTEuMi0yLjEgLjQtLjggLjQtMS44IC4zLTIuNy0xLjUtNDAuOS00LjUtODYuOS00Ny4zLTEwNi41LTMxLjktMTQuNi03OS43LTM3LjItOTkuOS00Ni42LTQuNy0yLjItMTAuMiAxLjMtMTAuMiA2LjUgMCAxMy42IC43IDMzLjMgLjcgNTEuMS05LjctOS45LTI2LTE2LjEtMzguNC0yMS44LTE0LjEtNi41LTI4LjctMTItNDMuNS0xNi42LTI5LjgtOS4yLTYwLjctMTQuOS05MS43LTE4LTM1LjItMy41LTcxLTEuOC0xMDUuNyA1LjMtNTYuOSAxMi4yLTExMy4xIDM5LjctMTU1LjcgNzkuOC0yNi4xIDI0LjYtNDYuNiA1OS43LTQ4IDk1LjItMiA1MC4zIDEyLjEgNzcuMyAzOCAxMDUuMiA0MS4zIDQ0LjQgMTMwLjIgNTAuNiAxNjYuMi0yIDE2LjItMjMuNyAxOS43LTU1LjggOC04Mi0xMS44LTI2LjItMzguOC00NS4xLTY3LjQtNDYtMjIuMi0uNy00NS45IDEwLjYtNTQuNSAzMS4xLTYuNSAxNS43LTIuOCAzNS4xIDkgNDcuMyA0LjYgNC44IDEwLjkgOC43IDE3LjcgNy4xIDQtLjkgNy40LTMuOSA4LTggLjktNi00LjQtOS45LTcuNi0xNC41LTUuOC04LjMtNC43LTIwLjkgMi43LTI3LjkgNi4yLTYgMTUuMy03LjggMjMuOS03LjcgOCAwIDE2LjIgMS40IDIzLjEgNS41IDkuNyA1LjcgMTYuMiAxNi4yIDE4LjQgMjcuMiA2LjcgMzMtMjAuMiA1OS45LTU2LjYgNjItMTguNiAxLjEtMzcuNi0zLjgtNTIuMS0xNS41LTM2LjktMjkuOC00NS45LTkwLjMtMy44LTEyMi43IDQwLTMwLjcgOTAuNC0yMi44IDEyMC4yLTYuOCAyMy44IDEyLjggNDEuNSAzMy42IDU1IDU2LjcgNi43IDExLjYgMTIuNSAyMy43IDE3LjggMzYuMSA1LjEgMTEuOCA5LjkgMjMuOCAyMC4yIDMyLjUgNi44IDUuOCAxNS4yIDUuNiAyNC4xIDUuNmw1MC44IDBjNi45IDAgNS4yLTQuNiAyLjItNy43LTYuNy02LjktMTYuNC04LjQtMjUuNC0xMC45LTIwLjUtNS42LTE4LjQtMzIuOC0xMi43LTMyLjggMTguMyAwIDE4LjkgLjYgMzQuOSAuMyAyMy4yLS4zIDMwLjItMS43IDQ4LjMgNSA5LjcgMy42IDE5IDEzLjEgMjUuMSAyMS43eiJdCiAgICB9OwogICAgZmFBcHBTdG9yZUlvcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhcHAtc3RvcmUtaW9zIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzNzAiLCAiTTQwMCAzMkw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDM1MiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0xMjcgMzg0LjVjLTUuNSA5LjYtMTcuOCAxMi44LTI3LjMgNy4zLTkuNi01LjUtMTIuOC0xNy44LTcuMy0yNy4zbDE0LjMtMjQuN2MxNi4xLTQuOSAyOS4zLTEuMSAzOS42IDExLjRMMTI3IDM4NC41em0xMzguOS01My45TDg0IDMzMC42Yy0xMSAwLTIwLTktMjAtMjBzOS0yMCAyMC0yMGw1MSAwIDY1LjQtMTEzLjItMjAuNS0zNS40Yy01LjUtOS42LTIuMi0yMS44IDcuMy0yNy4zIDkuNi01LjUgMjEuOC0yLjIgMjcuMyA3LjNsOC45IDE1LjQgOC45LTE1LjRjNS41LTkuNiAxNy44LTEyLjggMjcuMy03LjMgOS42IDUuNSAxMi44IDE3LjggNy4zIDI3LjNsLTg1LjggMTQ4LjYgNjIuMSAwYzIwLjIgMCAzMS41IDIzLjcgMjIuNyA0MHptOTguMSAwbC0yOSAwIDE5LjYgMzMuOWM1LjUgOS42IDIuMiAyMS44LTcuMyAyNy4zLTkuNiA1LjUtMjEuOCAyLjItMjcuMy03LjMtMzIuOS01Ni45LTU3LjUtOTkuNy03NC0xMjguMS0xNi43LTI5LTQuOC01OCA3LjEtNjcuOCAxMy4xIDIyLjcgMzIuNyA1Ni43IDU4LjkgMTAybDUyIDBjMTEgMCAyMCA5IDIwIDIwIDAgMTEuMS05IDIwLTIwIDIweiJdCiAgICB9OwogICAgZmFTcXVhcmVEcmliYmJsZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZHJpYmJibGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZHJpYmJibGUtc3F1YXJlIl0sICJmMzk3IiwgIk0xNjUuOSAxMzIuNWMtMzguMyAxOC02Ni44IDUzLjMtNzUuNyA5NS43IDYuMSAuMSA2Mi40IC4zIDEyNi40LTE2LjctMjIuNy00MC4yLTQ3LjEtNzQuMS01MC43LTc5em0yNi4xLTkuMWMzLjggNS4xIDI4LjYgMzguOSA1MSA4MCA0OC42LTE4LjMgNjkuMS00NS45IDcxLjYtNDkuNC0zMy42LTI5LjgtNzkuMy00MS4xLTEyMi42LTMwLjZ6TTI3Ny40IDM4MmMtMi0xMi0xMC01My44LTI5LjItMTAzLjYtNTUuMSAxOC44LTkzLjggNTYuNC0xMDguMSA4NS42IDQwLjUgMzEuNiA5My4zIDM2LjcgMTM3LjMgMTh6TTIyNy44IDIzMi42QzE1OS42IDI1MyA5My40IDI1Mi4yIDg3LjQgMjUybDAgNC4yYzAgMzUuMSAxMy4zIDY3LjEgMzUuMSA5MS40IDIyLjItMzcuOSA2Ny4xLTc3LjkgMTE2LjUtOTEuOC0zLjQtNy44LTcuMi0xNS41LTExLjEtMjMuMmwtLjEgMHptNzIuNSAxMzYuOWMzMC43LTIwLjcgNTIuNS01My42IDU4LjYtOTEuNi00LjYtMS41LTQyLjMtMTIuNy04NS4xLTUuOCAxNy45IDQ5LjEgMjUuMSA4OS4xIDI2LjUgOTcuNHptLTM0LjgtMTE5YzQ1LjUtNS43IDkwLjcgMy40IDk1LjIgNC40LS4zLTMyLjMtMTEuOC02MS45LTMwLjktODUuMS0yLjkgMy45LTI1LjggMzMuMi03Ni4zIDUzLjkgNC44IDkuOCA4LjMgMTcuOCAxMiAyNi44ek0zODQgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NHpNMjI0IDk2YTE2MCAxNjAgMCAxIDEgMCAzMjAgMTYwIDE2MCAwIDEgMSAwLTMyMHoiXQogICAgfTsKICAgIGZhRHJpYmJibGVTcXVhcmUgPSBmYVNxdWFyZURyaWJiYmxlOwogICAgZmFVaWtpdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1aWtpdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDAzIiwgIk00NDMuOSAxMjhsMCAyNTYtMjI1LjkgMTI4LTIxOC0xMjggMC0yMTQuMyA4Ny42IDQ1LjEgMCAxMTcgMTMzLjUgNzUuNSAxMzUuOC03NS41IDAtMTUxLTEwMS4xLTU3LjYgODcuNi01My4xIDEwMC41IDU3Ljl6TTMwOC42IDQ5LjFsLTg0LjgtNDkuMS04OC42IDU0LjggODYgNDcuMyA4Ny40LTUzeiJdCiAgICB9OwogICAgZmFTdXBlcnBvd2VycyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdXBlcnBvd2VycyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmRkIiwgIk00NDggMzJjLTgzLjMgMTEtMTY2LjggMjItMjUwIDMzLTkyIDEyLjUtMTYzLjMgODYuNy0xNjkgMTgwLTMuMyA1NS41IDE4IDEwOS41IDU3LjggMTQ4LjJMMCA0ODBjODMuMy0xMSAxNjYuNS0yMiAyNDkuOC0zMyA5MS44LTEyLjUgMTYzLjMtODYuOCAxNjguNy0xNzkuOCAzLjUtNTUuNS0xOC0xMDkuNS01Ny43LTE0OC4yTDQ0OCAzMnpNMzY4LjMgMjY0LjNjLTQuMiA3OS41LTc0IDEzOS4yLTE1Mi44IDEzNC41LTc5LjUtNC43LTE0MC43LTcxLTEzNi4zLTE1MSA0LjUtNzkuMiA3NC4zLTEzOS4zIDE1My0xMzQuNSA3OS4zIDQuNyAxNDAuNSA3MSAxMzYuMSAxNTF6Il0KICAgIH07CiAgICBmYVlvdXR1YmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAieW91dHViZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYxODAyXSwgImYxNjciLCAiTTU0OS43IDEyNC4xQzU0My41IDEwMC40IDUyNC45IDgxLjggNTAxLjQgNzUuNSA0NTguOSA2NCAyODguMSA2NCAyODguMSA2NFMxMTcuMyA2NCA3NC43IDc1LjVDNTEuMiA4MS44IDMyLjcgMTAwLjQgMjYuNCAxMjQuMSAxNSAxNjcgMTUgMjU2LjQgMTUgMjU2LjRzMCA4OS40IDExLjQgMTMyLjNjNi4zIDIzLjYgMjQuOCA0MS41IDQ4LjMgNDcuOCA0Mi42IDExLjUgMjEzLjQgMTEuNSAyMTMuNCAxMS41czE3MC44IDAgMjEzLjQtMTEuNWMyMy41LTYuMyA0Mi0yNC4yIDQ4LjMtNDcuOCAxMS40LTQyLjkgMTEuNC0xMzIuMyAxMS40LTEzMi4zczAtODkuNC0xMS40LTEzMi4zek0yMzIuMiAzMzcuNmwwLTE2Mi40IDE0Mi43IDgxLjItMTQyLjcgODEuMnoiXQogICAgfTsKICAgIGZhRW1iZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZW1iZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQyMyIsICJNNjM5LjkgMjU0LjZjLTEuMS0xMC43LTEwLjctNi44LTEwLjctNi44cy0xNS42IDEyLjEtMjkuMyAxMC43Yy0xMy43LTEuMy05LjQtMzItOS40LTMyczMtMjguMS01LjEtMzAuNGMtOC4xLTIuNC0xOCA3LjMtMTggNy4zcy0xMi40IDEzLjctMTguMyAzMS4ybC0xLjYgLjVzMS45LTMwLjYtLjMtMzcuNmMtMS42LTMuNS0xNi40LTMuMi0xOC44IDNzLTE0LjIgNDkuMi0xNSA2Ny4yYzAgMC0yMy4xIDE5LjYtNDMuMyAyMi44cy0yNS05LjQtMjUtOS40IDU0LjgtMTUuMyA1Mi45LTU5LjEtNDQuMi0yNy42LTQ5LTI0Yy00LjYgMy41LTI5LjQgMTguNC0zNi42IDU5LjctLjIgMS40LS43IDcuNS0uNyA3LjVzLTIxLjIgMTQuMi0zMyAxOGMwIDAgMzMtNTUuNi03LjMtODAuOS0xMS40LTYuOC0yMS4zLS41LTI3LjIgNS4zIDEzLjYtMTcuMyA0Ni40LTY0LjIgMzYuOS0xMDUuMi01LjgtMjQuNC0xOC0yNy4xLTI5LjItMjMuMS0xNyA2LjctMjMuNSAxNi43LTIzLjUgMTYuN3MtMjIgMzItMjcuMSA3OS41LTEyLjYgMTA1LjEtMTIuNiAxMDUuMS0xMC41IDEwLjItMjAuMiAxMC43LTUuNC0yOC43LTUuNC0yOC43IDcuNS00NC42IDctNTIuMS0xLjEtMTEuNi05LjktMTQuMmMtOC45LTIuNy0xOC41IDguNi0xOC41IDguNnMtMjUuNSAzOC43LTI3LjcgNDQuNmwtMS4zIDIuNC0xLjMtMS42czE4LTUyLjcgLjgtNTMuNS0yOC41IDE4LjgtMjguNSAxOC44LTE5LjYgMzIuOC0yMC40IDM2LjVsLTEuMy0xLjZzOC4xLTM4LjIgNi40LTQ3LjZjLTEuNi05LjQtMTAuNS03LjUtMTAuNS03LjVzLTExLjMtMS4zLTE0LjIgNS45LTEzLjcgNTUuMy0xNSA3MC43YzAgMC0yOC4yIDIwLjItNDYuOCAyMC40LTE4LjUgLjMtMTYuNy0xMS44LTE2LjctMTEuOHM2OC0yMy4zIDQ5LjQtNjkuMmMtOC4zLTExLjgtMTgtMTUuNS0zMS43LTE1LjMtMTMuNyAuMy0zMC4zIDguNi00MS4zIDMzLjMtNS4zIDExLjgtNi44IDIzLTcuOCAzMS41IDAgMC0xMi4zIDIuNC0xOC44LTIuOXMtMTAgMC0xMCAwLTExLjIgMTQtLjEgMTguMyAyOC4xIDYuMSAyOC4xIDYuMWMxLjYgNy41IDYuMiAxOS41IDE5LjYgMjkuNyAyMC4yIDE1LjMgNTguOC0xLjMgNTguOC0xLjNsMTUuOS04LjhzLjUgMTQuNiAxMi4xIDE2LjcgMTYuNCAxIDM2LjUtNDcuOWMxMS44LTI1IDEyLjYtMjMuNiAxMi42LTIzLjZsMS4zLS4zcy05LjEgNDYuOC01LjYgNTkuN0MxODcuNyAzMTkuNCAyMDMgMzE4IDIwMyAzMThzOC4zIDIuNCAxNS0yMS4yIDE5LjYtNDkuOSAxOS42LTQ5LjlsMS42IDBzLTUuNiA0OC4xIDMgNjMuNyAzMC45IDUuMyAzMC45IDUuMyAxNS42LTcuOCAxOC0xMC4yYzAgMCAxOC41IDE1LjggNDQuNiAxMi45IDU4LjMtMTEuNSA3OS4xLTI1LjkgNzkuMS0yNS45czEwIDI0LjQgNDEuMSAyNi43YzM1LjUgMi43IDU0LjgtMTguNiA1NC44LTE4LjZzLS4zIDEzLjUgMTIuMSAxOC42IDIwLjctMjIuOCAyMC43LTIyLjhsMjAuNy01Ny4yIDEuOSAwczEuMSAzNy4zIDIxLjUgNDMuMiA0Ny0xMy43IDQ3LTEzLjcgNi40LTMuNSA1LjMtMTQuM3ptLTU3OCA1LjNjLjgtMzIgMjEuOC00NS45IDI5LTM5IDcuMyA3IDQuNiAyMi05LjEgMzEuNC0xMy43IDkuNS0xOS45IDcuNi0xOS45IDcuNnpNMzM0LjcgMTM2LjFzMTkuMS00OS43IDIzLjYtMjUuNS00MCA5Ni4yLTQwIDk2LjJjLjUtMTYuMiAxNi40LTcwLjcgMTYuNC03MC43em0yMi44IDEzOC40Yy0xMi42IDMzLTQzLjMgMTkuNi00My4zIDE5LjZzLTMuNS0xMS44IDYuNC00NC45IDMzLjMtMjAuMiAzMy4zLTIwLjIgMTYuMiAxMi40IDMuNiA0NS41em04NC42LTE0LjZzLTMtMTAuNSA4LjEtMzAuNmMxMS0yMC4yIDE5LjYtOS4xIDE5LjYtOS4xczkuNCAxMC4yLTEuMyAyNS41LTI2LjQgMTQuMi0yNi40IDE0LjJ6Il0KICAgIH07CiAgICBmYUJvb3RzdHJhcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJib290c3RyYXAiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjgzNiIsICJNMzMzLjUgMjAxLjRjMC0yMi4xLTE1LjYtMzQuMy00My0zNC4zbC01MC40IDAgMCA3MS4yIDQyLjUgMGMzMi44LS4xIDUwLjktMTMuMyA1MC45LTM2Ljl6TTUxNyAxODguNmMtOS41LTMwLjktMTAuOS02OC44LTkuOC05OC4xIDEuMS0zMC41LTIyLjctNTguNS01NC43LTU4LjVMMTIzLjcgMzJjLTMyLjEgMC01NS44IDI4LjEtNTQuNyA1OC41IDEgMjkuMy0uMyA2Ny4yLTkuOCA5OC4xLTkuNiAzMS0yNS43IDUwLjYtNTIuMiA1My4xbDAgMjguNWMyNi40IDIuNSA0Mi42IDIyLjEgNTIuMiA1My4xIDkuNSAzMC45IDEwLjkgNjguOCA5LjggOTguMS0xLjEgMzAuNSAyMi43IDU4LjUgNTQuNyA1OC41bDMyOC43IDBjMzIuMSAwIDU1LjgtMjguMSA1NC43LTU4LjUtMS0yOS4zIC4zLTY3LjIgOS44LTk4LjEgOS42LTMxIDI1LjctNTAuNiA1Mi4xLTUzLjFsMC0yOC41Yy0yNi4zLTIuNS00Mi41LTIyLjEtNTItNTMuMXpNMzAwLjIgMzc1LjFsLTk3LjkgMCAwLTIzOC4zIDk3LjQgMGM0My4zIDAgNzEuNyAyMy40IDcxLjcgNTkuNCAwIDI1LjMtMTkuMSA0Ny45LTQzLjUgNTEuOGwwIDEuM2MzMy4yIDMuNiA1NS41IDI2LjYgNTUuNSA1OC4zIDAgNDIuMS0zMS4zIDY3LjUtODMuMiA2Ny41em0tMTAtMTA4LjdsLTUwLjEgMCAwIDc4LjQgNTIuMyAwYzM0LjIgMCA1Mi4zLTEzLjcgNTIuMy0zOS41IDAtMjUuNy0xOC42LTM4LjktNTQuNS0zOC45eiJdCiAgICB9OwogICAgZmFJdHVuZXMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaXR1bmVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYjQiLCAiTTIyMy42IDgwLjNhMTcxLjMgMTcxLjMgMCAxIDAgLjIgMzQyLjUgMTcxLjMgMTcxLjMgMCAxIDAgLS4yLTM0Mi41em03OS40IDI0MGMtMy4yIDEzLjYtMTMuNSAyMS4yLTI3LjMgMjMuOC0xMi4xIDIuMi0yMi4yIDIuOC0zMS45LTUtMTEuOC0xMC0xMi0yNi40LTEuNC0zNi44IDguNC04IDIwLjMtOS42IDM4LTEyLjggMy0uNSA1LjYtMS4yIDcuNy0zLjcgMy4yLTMuNiAyLjItMiAyLjItODAuOCAwLTUuNi0yLjctNy4xLTguNC02LjEtNCAuNy05MS45IDE3LjEtOTEuOSAxNy4xLTUgMS4xLTYuNyAyLjYtNi43IDguMyAwIDExNi4xIC41IDExMC44LTEuMiAxMTguNS0yLjEgOS03LjYgMTUuOC0xNC45IDE5LjYtOC4zIDQuNi0yMy40IDYuNi0zMS40IDUuMi0yMS40LTQtMjguOS0yOC43LTE0LjQtNDIuOSA4LjQtOCAyMC4zLTkuNiAzOC0xMi44IDMtLjUgNS42LTEuMiA3LjctMy43IDUtNS43IC45LTEyNyAyLjYtMTMzLjcgLjQtMi42IDEuNS00LjggMy41LTYuNCAyLjEtMS43IDUuOC0yLjcgNi43LTIuNyAxMDEtMTkgMTEzLjMtMjEuNCAxMTUuMS0yMS40IDUuNy0uNCA5IDMgOSA4LjctLjEgMTcwLjYgLjQgMTYxLjQtMSAxNjcuNnpNMzQ1LjIgMzJMMTAyLjggMzJDNDUuOSAzMiAwIDc3LjkgMCAxMzQuOEwwIDM3Ny4yQzAgNDM0LjEgNDUuOSA0ODAgMTAyLjggNDgwbDI0Mi40IDBjNTcgMCAxMDIuOC00NS45IDEwMi44LTEwMi44bDAtMjQyLjRDNDQ4IDc3LjkgNDAyLjEgMzIgMzQ1LjIgMzJ6TTIyMy42IDU5YTE5Mi41IDE5Mi41IDAgMSAxIDAgMzg1IDE5Mi41IDE5Mi41IDAgMSAxIDAtMzg1eiJdCiAgICB9OwogICAgZmFTcXVhcmVYaW5nID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS14aW5nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInhpbmctc3F1YXJlIl0sICJmMTY5IiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNOTMuOCAzMjAuMmMtNS41IDAtOC43LTUuMy02LTEwLjNsNDkuMy04Ni43Yy4xIDAgLjEtLjEgMC0uMmwtMzEuNC01NGMtMy01LjYgLjItMTAuMSA2LTEwLjFsNDYuNiAwYzUuMiAwIDkuNSAyLjkgMTIuOSA4LjdsMzEuOSA1NS4zYy0xLjMgMi4zLTE4IDMxLjctNTAuMSA4OC4yLTMuNSA2LjItNy43IDkuMS0xMi42IDkuMWwtNDYuNiAwem0xNjMuNS0zMy40bDAgLjIgNjUuNSAxMTljMi44IDUuMSAuMSAxMC4xLTYgMTAuMWwtNDYuNiAwYy01LjUgMC05LjctMi45LTEyLjktOC43bC02Ni0xMjAuM2MxLjgtMy4yIDIyLjktNDAuNCA2My4zLTExMS42IDExLjctMjAuNyAyNS4xLTQ0LjMgNDAuMS03MC44IDMuMy01LjggNy40LTguNyAxMi41LTguN2w0Ni45IDBjNS43LS4xIDguOCA0LjcgNiAxMEwyNTcuMyAyODYuOHoiXQogICAgfTsKICAgIGZhWGluZ1NxdWFyZSA9IGZhU3F1YXJlWGluZzsKICAgIGZhQ3NzM0FsdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjc3MzLWFsdCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMzhiIiwgIk0wIDMyTDM0LjkgNDI3LjggMTkyIDQ4MCAzNDkuMSA0MjcuOCAzODQgMzIgMCAzMnptMzEzLjEgODBsLTQuOCA0Ny4zLTExNS4zIDQ5LjMtLjMgLjEgMTExLjUgMC0xMi44IDE0Ni42LTk4LjIgMjguNy05OC44LTI5LjItNi40LTczLjkgNDguOSAwIDMuMiAzOC4zIDUyLjYgMTMuMyA1NC43LTE1LjQgMy43LTYxLjYtMTY2LjMtLjUgMC0uMS0uMiAuMS0zLjYtNDYuMyAxMTIuMS00Ni43IDYuNS0yLjctMTIyLjkgMC01LjgtNDcuMyAyNDIuMiAweiJdCiAgICB9OwogICAgZmFTcXVhcmVzcGFjZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmVzcGFjZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWJlIiwgIk0xODYuMSAzNDMuM2MtOS43IDkuNy05LjcgMjUuMyAwIDM0LjlzMjUuMyA5LjYgMzQuOSAwTDM3OC4zIDIyMS4xYzE5LjMtMTkuMyA1MC42LTE5LjMgNjkuOSAwczE5LjMgNTAuNiAwIDY5LjlMMjk0IDQ0NS4xYzE5LjMgMTkuMyA1MC41IDE5LjMgNjkuOCAwbDAgMCAxMTkuMy0xMTkuMmMzOC42LTM4LjYgMzguNi0xMDEuMSAwLTEzOS43LTM4LjYtMzguNi0xMDEuMi0zOC42LTEzOS43IDBMMTg2LjEgMzQzLjN6TTQzMC43IDIzOC41Yy05LjctOS43LTI1LjMtOS43LTM0LjkgMEwyMzguNSAzOTUuN2MtMTkuMyAxOS4zLTUwLjUgMTkuMy02OS44IDBsMCAwYy05LjYtOS42LTI1LjMtOS43LTM0LjkgMGwwIDBjLTkuNyA5LjYtOS43IDI1LjMgMCAzNC45bDAgMGMzOC42IDM4LjYgMTAxLjEgMzguNiAxMzkuNyAwTDQzMC43IDI3My41YzkuNi05LjcgOS42LTI1LjMgMC0zNC45em0tMjYyIDg3LjNMMzI1LjkgMTY4LjdjOS42LTkuNiA5LjYtMjUuMyAwLTM0LjktOS42LTkuNi0yNS4zLTkuNi0zNC45IDBMMTMzLjcgMjkwLjljLTE5LjMgMTkuMy01MC42IDE5LjMtNjkuOSAwbDAgMGMtMTkuMy0xOS4zLTE5LjMtNTAuNSAwLTY5LjhsMCAwIDE1NC4yLTE1NC4yYy0xOS4zLTE5LjMtNTAuNS0xOS4zLTY5LjggMGwwIDAtMTE5LjIgMTE5LjNjLTM4LjYgMzguNi0zOC42IDEwMS4xIDAgMTM5LjcgMzguNiAzOC42IDEwMS4xIDM4LjYgMTM5LjcgMHpNODEuMyAyNzMuNWM5LjYgOS42IDI1LjMgOS42IDM0LjkgMEwyNzMuNSAxMTYuM2MxOS4zLTE5LjMgNTAuNi0xOS4zIDY5LjggMGwwIDBjOS43IDkuNiAyNS4zIDkuNiAzNC45IDBzOS42LTI1LjMgMC0zNC45Yy0zOC42LTM4LjYtMTAxLjEtMzguNi0xMzkuNyAwTDgxLjMgMjM4LjVjLTkuNiA5LjYtOS42IDI1LjMgMCAzNC45bDAgMHoiXQogICAgfTsKICAgIGZhVHJlbGxvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRyZWxsbyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMTgxIiwgIk0zOTIuMyAzMkw1Ni4xIDMyYy0zMSAwLTU2LjEgMjUuMS01Ni4xIDU2LS4xIDAgMC00IDAgMzM2IDAgMzAuOSAyNS4xIDU2IDU2IDU2bDMzNi4yIDBjMzAuOC0uMiA1NS43LTI1LjIgNTUuNy01NmwwLTMzNmMuMS0zMC44LTI0LjgtNTUuOC01NS42LTU2ek0xOTcgMzcxLjNjLS4yIDE0LjctMTIuMSAyNi42LTI2LjkgMjYuNmwtODIuNyAwYy0xNC44IC4xLTI2LjktMTEuOC0yNy0yNi42bDAtMjU0LjJjMC0xNC44IDEyLTI2LjkgMjYuOS0yNi45bDgyLjkgMGMxNC44IDAgMjYuOSAxMiAyNi45IDI2LjlsMCAyNTQuMi0uMSAwem0xOTMuMS0xMTJjMCAxNC44LTEyIDI2LjktMjYuOSAyNi45bC04MSAwYy0xNC44IDAtMjYuOS0xMi0yNi45LTI2LjlsMC0xNDIuMWMwLTE0LjggMTItMjYuOSAyNi44LTI2LjlsODEuMSAwYzE0LjggMCAyNi45IDEyIDI2LjkgMjYuOWwwIDE0Mi4xeiJdCiAgICB9OwogICAgZmFWaWFkZW8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidmlhZGVvIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyYTkiLCAiTTI3Ni40IDE1MC41bDAgLjdjLTE3LjktNTIuNi00Mi42LTEwMy40LTcwLjgtMTUxLjIgNDMuMyAyOS4yIDY3IDEwMCA3MC44IDE1MC41em0zMi43IDEyMS43YzcuNiAxOC4yIDExIDM3LjUgMTEgNTcgMCA3Ny43LTU3LjggMTQxLTEzNy44IDEzOS40bDMuOC0uM2M3NC4yLTQ2LjcgMTA5LjMtMTE4LjYgMTA5LjMtMjA1LjEgMC0zOC4xLTYuNS03NS45LTE4LjktMTEyIDEgMTEuNyAxIDIzLjcgMSAzNS40IDAgOTEuOC0xOC4xIDI0MS42LTExNi42IDI4MC02NS43LTExLjQtMTExLjMtNjguNi0xMTEuMy0xMzcuNCAwLTc1LjYgNTcuNC0xNDIuMyAxMzUuNC0xNDIuMyAxNi44IDAgMzMuNyAzLjEgNDkuMSA5LjYgMS43LTE1LjEgNi41LTI5LjkgMTMuNC00My4zLTE5LjktNy4yLTQxLjItMTAuNy02Mi41LTEwLjctMTYxLjUgMC0yMzguNyAxOTUuOS0xMjkuOSAzMTMuNyA2Ny45IDc0LjYgMTkyIDczLjkgMjU5LjggMCA1Ni42LTYxLjMgNjAuOS0xNDIuNCAzNi40LTIwMS0xMi43IDgtMjcuMSAxMy45LTQyLjIgMTd6TTQxOC4zIDExLjdjLTMxIDY2LjUtODEuMyA0Ny4yLTExNS44IDgwLjEtMTIuNCAxMi0yMC42IDM0LTIwLjYgNTAuNSAwIDE0LjEgNC41IDI3LjEgMTIgMzguOCA0Ny40LTExIDk4LjMtNDYgMTE4LjItOTAuNy0uNyA1LjUtNC44IDE0LjQtNy4yIDE5LjItMjAuMyAzNS43LTY0LjYgNjUuNi05OS43IDg0LjkgMTQuOCAxNC40IDMzLjcgMjUuOCA1NSAyNS44IDc5IDAgMTEwLjEtMTM0LjYgNTguMS0yMDguNnoiXQogICAgfTsKICAgIGZhU2VhcmNoZW5naW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2VhcmNoZW5naW4iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNlYiIsICJNMjE0LjYgMTMwLjNsLTY3LjIgMjguMiAwLTExNS4zLTU0LjcgMTkwLjMgNTQuNy0yNC4yIDAgMTMwLjMgNjcuMi0yMDkuM3pNMTMxLjQgMzMuNmwtMS4zIDQuNy0xNS4yIDUyLjlDNzQuNiAxMDYuNyA0NiAxNDUuOCA0NiAxOTEuNSA0NiAyNDMuOCA4MC4zIDI4Ny40IDEyOS40IDI5N2wwIDUzLjZDNTEuNSAzNDAuMS02IDI3Mi40LTYgMTkxLjYtNiAxMTEuMSA1My44IDQ0LjQgMTMxLjQgMzMuNnpNNDQyLjggNDgwLjhjLTExLjIgMTEuMi0yMy4xIDEyLjMtMjguNiAxMC41LTUuNC0xLjgtMjcuMS0xOS45LTYwLjQtNDQuNC0zMy4zLTI0LjYtMzMuNi0zNS43LTQzLTU2LjctOS40LTIwLjktMzAuNC00Mi42LTU3LjUtNTIuNGwtOS43LTE0LjdjLTI0LjcgMTYuOS01MyAyNi45LTgxLjMgMjguN2wyLjEtNi42IDE1LjktNDkuNWM0Ni41LTExLjkgODAuOS01NCA4MC45LTEwNC4yIDAtNTQuNS0zOC40LTEwMi4xLTk2LTEwNy4xbDAtNTIuMWM4My4yIDUuMSAxNDguOCA3NC41IDE0OC44IDE1OS4zIDAgMzMuNi0xMS4yIDY0LjctMjkgOTAuNGwxNC42IDkuNmM5LjggMjcuMSAzMS41IDQ4IDUyLjQgNTcuNHMzMi4yIDkuNyA1Ni44IDQzYzI0LjYgMzMuMiA0Mi43IDU0LjkgNDQuNSA2MC4zcy43IDE3LjMtMTAuNSAyOC41em0tOS45LTE3LjljMC00LjQtMy42LTgtOC04cy04IDMuNi04IDggMy42IDggOCA4IDgtMy42IDgtOHoiXQogICAgfTsKICAgIGZhUGF5cGFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBheXBhbCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWVkIiwgIk0xMTEuOSAyOTUuOWMtMy41IDE5LjItMTcuNCAxMDguNy0yMS41IDEzNC0uMyAxLjgtMSAyLjUtMyAyLjVsLTc0LjYgMGMtNy42IDAtMTMuMS02LjYtMTIuMS0xMy45TDU5LjMgNDYuNmMxLjUtOS42IDEwLjEtMTYuOSAyMC0xNi45IDE1Mi4zIDAgMTY1LjEtMy43IDIwNCAxMS40IDYwLjEgMjMuMyA2NS42IDc5LjUgNDQgMTQwLjMtMjEuNSA2Mi42LTcyLjUgODkuNS0xNDAuMSA5MC4zLTQzLjQgLjctNjkuNS03LTc1LjMgMjQuMnpNMzU3LjYgMTUyYy0xLjgtMS4zLTIuNS0xLjgtMyAxLjMtMiAxMS40LTUuMSAyMi41LTguOCAzMy42LTM5LjkgMTEzLjgtMTUwLjUgMTAzLjktMjA0LjUgMTAzLjktNi4xIDAtMTAuMSAzLjMtMTAuOSA5LjQtMjIuNiAxNDAuNC0yNy4xIDE2OS43LTI3LjEgMTY5LjctMSA3LjEgMy41IDEyLjkgMTAuNiAxMi45bDYzLjUgMGM4LjYgMCAxNS43LTYuMyAxNy40LTE0LjkgLjctNS40LTEuMSA2LjEgMTQuNC05MS4zIDQuNi0yMiAxNC4zLTE5LjcgMjkuMy0xOS43IDcxIDAgMTI2LjQtMjguOCAxNDIuOS0xMTIuMyA2LjUtMzQuOCA0LjYtNzEuNC0yMy44LTkyLjZ6Il0KICAgIH07CiAgICBmYVNxdWFyZUJsdWVza3kgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWJsdWVza3kiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTZhMyIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjI0IDI0Ny40YzE0LjUtMzAgNTQtODUuOCA5MC43LTExMy4zIDI2LjUtMTkuOSA2OS4zLTM1LjIgNjkuMyAxMy43IDAgOS44LTUuNiA4Mi4xLTguOSA5My44LTExLjQgNDAuOC01MyA1MS4yLTkwIDQ0LjkgNjQuNyAxMSA4MS4yIDQ3LjUgNDUuNiA4NC02Ny41IDY5LjMtOTctMTcuNC0xMDQuNi0zOS42bC0uMy0uOWMtLjktMi42LTEuNC00LjEtMS44LTQuMXMtLjkgMS41LTEuOCA0LjFjLS4xIC4zLS4yIC42LS4zIC45LTcuNiAyMi4yLTM3LjEgMTA4LjgtMTA0LjYgMzkuNi0zNS41LTM2LjUtMTkuMS03MyA0NS42LTg0LTM3IDYuMy03OC42LTQuMS05MC00NC45LTMuMy0xMS43LTguOS04NC04LjktOTMuOCAwLTQ4LjkgNDIuOS0zMy41IDY5LjMtMTMuNyAzNi43IDI3LjUgNzYuMiA4My40IDkwLjcgMTEzLjN6Il0KICAgIH07CiAgICBmYURBbmREQmV5b25kID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImQtYW5kLWQtYmV5b25kIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY2Y2EiLCAiTTMxMy44IDI0MS41YzEzLjggMCAyMS0xMC4xIDI0LjgtMTcuOS0xLTEuMS01LTQuMi03LjQtNi42LTIuNCA0LjMtOC4yIDEwLjctMTMuOSAxMC43LTEwLjIgMC0xNS40LTE0LjctMy4yLTI2LjYtLjUtLjItNC4zLTEuOC04IDIuNCAwLTMgMS01LjEgMi4xLTYuNi0zLjUgMS4zLTkuOCA1LjYtMTEuNCA3LjkgLjItNS44IDEuNi03LjUgLjYtOWwtLjItLjJzLTguNSA1LjYtOS4zIDE0LjdjMCAwIDEuMS0xLjYgMi4xLTEuOSAuNi0uMyAxLjMgMCAuNiAxLjktLjIgLjYtNS44IDE1LjcgNS4xIDI2LS42LTEuNi0xLjktNy42IDIuNC0xLjktLjMgLjEgNS44IDcuMSAxNS43IDcuMXptNTIuNC0yMS4xYzAtNC00LjktNC40LTUuNi00LjUgMiAzLjkgLjkgNy41IC4yIDkgMi41LS40IDUuNC0xLjYgNS40LTQuNXptMTAuMyA1LjJjMC02LjQtNi4yLTExLjQtMTMuNS0xMC43IDggMS4zIDUuNiAxMy44LTUgMTEuNCAzLjctMi42IDMuMi05LjktMS4zLTEyLjUgMS40IDQuMi0zIDguMi03LjQgNC42LTIuNC0xLjktOC02LjYtMTAuNi04LjYtMi40LTIuMS01LjUtMS02LjYtMS44LTEuMy0xLjEtLjUtMy44LTIuMi01LTEuNi0uOC0zLS4zLTQuOC0xLTEuNi0uNi0yLjctMS45LTIuNi0zLjUtMi41IDQuNCAzLjQgNi4zIDQuNSA4LjUgMSAxLjktLjggNC44IDQgOC41IDE0LjggMTEuNiA5LjEgOCAxMC40IDE4LjEgLjYgNC4zIDQuMiA2LjcgNi40IDcuNC0yLjEtMS45LTIuOS02LjQgMC05LjMgMCAxMy45IDE5LjIgMTMuMyAyMy4xIDYuNC0yLjQgMS4xLTctLjItOS0xLjkgNy43IDEgMTQuMi00LjEgMTQuNi0xMC42em0tMzkuNC0xOC40YzIgLjggMS42IC43IDYuNCA0LjUgMTAuMi0yNC41IDIxLjctMTUuNyAyMi0xNS41IDIuMi0xLjkgOS44LTMuOCAxMy44LTIuNy0yLjQtMi43LTcuNS02LjItMTMuMy02LjItNC43IDAtNy40IDIuMi04IDEuMy0uOC0xLjQgMy4yLTMuNCAzLjItMy40LTUuNCAuMi05LjYgNi43LTExLjIgNS45LTEuMS0uNSAxLjQtMy43IDEuNC0zLjctNS4xIDIuOS05LjMgOS4xLTEwLjIgMTMgNC42LTUuOCAxMy44LTkuOCAxOS43LTktMTAuNSAuNS0xOS41IDkuNy0yMy44IDE1Ljh6bTI0Mi41IDUxLjljLTIwLjcgMC00MCAxLjMtNTAuMyAyLjFsNy40IDguMiAwIDc3LjItNy40IDguMmMxMC40IC44IDMwLjkgMi4xIDUxLjYgMi4xIDQyLjEgMCA1OS4xLTIwLjcgNTkuMS00OC45IDAtMjkuMy0yMy4yLTQ4LjktNjAuNC00OC45em0tMTUuMSA3NS42bDAtNTMuM2MzMC4xLTMuMyA0Ni44IDMuOCA0Ni44IDI2LjMgMCAyNS42LTIxLjQgMzAuMi00Ni44IDI3ek0zMDEuNiAxODFjLTEtMy40LS4yLTYuOSAxLjEtOS40IDEgMyAyLjYgNi40IDcuNSA5LS41LTIuNC0uMi01LjYgLjUtOC0xLjQtNS40IDIuMS05LjkgNi40LTkuOSA2LjkgMCA4LjUgOC44IDQuNyAxNC40IDIuMSAzLjIgNS41IDUuNiA3LjcgNy44IDMuMi0zLjcgNS41LTkuNSA1LjUtMTMuOCAwLTguMi01LjUtMTUuOS0xNi43LTE2LjUtMjAtLjktMjAuMiAxNi42LTIwIDE4LjkgLjUgNS4yIDMuNCA3LjggMy4zIDcuNXptLS40IDZjLS41IDEuOC03IDMuNy0xMC4yIDYuOSA0LjgtMSA3LS4yIDcuOCAxLjggLjUgMS40LS4yIDMuNC0uNSA1LjYgMS42LTEuOCA3LTUuNSAxMS02LjItMS0uMy0zLjQtLjgtNC4zLS44IDIuOS0zLjQgOS4zLTQuNSAxMi44LTMuNy0yLjItLjItNi43IDEuMS04LjUgMi42IDEuNiAuMyAzIC42IDQuMyAxLjEtMi4xIC44LTQuOCAzLjQtNS44IDYuMSA3LTUgMTMuMSA1LjIgNyA4LjIgLjggLjIgMi43IDAgMy41LS41LS4zIDEuMS0xLjkgMy0zIDMuNCAyLjkgMCA3LTEuOSA4LjItNC42IDAgMC0xLjggLjYtMi42LS4ycy4zLTQuMyAuMy00LjNjLTIuMyAyLjktMy40LTEuMy0xLjMtNC4yLTEtLjMtMy41LS42LTQuNi0uNSAzLjItMS4xIDEwLjQtMS44IDExLjItLjMgLjYgMS4xLTEgMy40LTEgMy40IDQtLjUgOC4zIDEuMSA2LjcgNS4xIDIuOS0xLjQgNS41LTUuOSA0LjgtMTAuNC0uMyAxLTEuNiAyLjQtMi45IDIuNyAuMi0xLjQtMS0yLjItMS45LTIuNiAxLjctOS42LTE0LjYtMTQuMi0xNC4xLTIzLjktMSAxLjMtMS44IDUtLjggNy4xIDIuNyAzLjIgOC43IDYuNyAxMC4xIDEyLjItMi42LTYuNC0xNS4xLTExLjQtMTQuNi0yMC4yLTEuNiAxLjYtMi42IDcuOC0xLjMgMTEgMi40IDEuNCA0LjUgMy44IDQuOCA2LjEtMi4yLTUuMS0xMS40LTYuMS0xMy45LTEyLjItLjYgMi4yLS4zIDUgMSA2LjcgMCAwLTIuMi0uOC03LS42IDEuNyAuNiA1LjEgMy41IDQuOCA1LjJ6bTI1LjkgNy40Yy0yLjcgMC0zLjUtMi4xLTQuMi00LjMgMy4zIDEuMyA0LjIgNC4zIDQuMiA0LjN6bTM4LjkgMy43bC0xLS42Yy0xLjEtMS0yLjktMS40LTQuNy0xLjQtMi45IDAtNS44IDEuMy03LjUgMy40LS44IC44LTEuNCAxLjgtMi4xIDIuNmwwIDE1LjdjMy41IDIuNiA3LjEtMi45IDMtNy4yIDEuNSAuMyA0LjYgMi43IDUuMSAzLjIgMCAwIDIuNi0uNSA1LS41IDIuMSAwIDMuOSAuMyA1LjYgMS4xbDAtMTguNGMtMS4xIC41LTIuMiAxLTIuNyAxLjRsLS43IC43ek03OS45IDMwNS45YzE3LjItNC42IDE2LjItMTggMTYuMi0xOS45IDAtMjAuNi0yNC4xLTI1LTM3LTI1bC01Ni4xIDAgOC4zIDguNiAwIDI5LjUtMTEuMyAwIDExLjQgMTQuNiAwIDMyLjMtOC40IDguNmM2MS43IDAgNzMuOCAxLjUgODYuNC01LjkgNi43LTQgOS45LTkuOCA5LjktMTcuNiAwLTUuMSAyLjYtMTguOC0xOS40LTI1LjJ6TTM4LjYgMjc4LjRjMjAgMCAyOS42LS44IDI5LjYgOS4xbDAgM2MwIDEyLjEtMTkgOC44LTI5LjYgOC44bDAtMjAuOXptMCA1OS4ybDAtMjIuNmMxMi4yIDAgMzIuNy0yLjMgMzIuNyA4LjhsMCA0LjUgLjIgMGMwIDExLjItMTIuNSA5LjMtMzIuOSA5LjN6bTEwMS4yLTE5LjNsMjMuMSAuMiAwLS4yIDE0LjEtMjEuMi0zNy4yIDAgMC0xNC45IDUyLjQgMC0xNC4xLTIxIDAtLjItNzMuNSAuMiA3LjQgOC4yIDAgNzcuMS03LjQgOC4yIDgxLjIgMCAxNC4xLTIxLjItNjAuMSAuMiAwLTE1LjR6bTIxNC43LTYwLjFjLTczLjkgMC03Ny41IDk5LjMtLjMgOTkuMyA3Ny45IDAgNzQuMS05OS4zIC4zLTk5LjN6bS0uMyA3Ny41Yy0zNy40IDAtMzYuOS01NS4zIC4yLTU1LjMgMzYuOCAuMSAzOC44IDU1LjMtLjIgNTUuM3ptLTkxLjMtOC4zbDQ0LjEtNjYuMi00MS43IDAgNi4xIDcuMi0yMC41IDM3LjItLjMgMC0yMS0zNy4yIDYuNC03LjItNDQuOSAwIDQ0LjEgNjUuOCAuMiAxOS40LTcuNyA4LjIgNDIuNiAwLTcuMi04LjItLjItMTl6TTIzNC41IDE3Ni4xYzEuNiAxLjMgMi45IDIuNCAyLjkgNi42bDAgMzguOGMwIDQuMi0uOCA1LjMtMi43IDYuNC0uMSAuMS03LjUgNC41LTcuOSA0LjZsMzUuMSAwYzEwIDAgMTcuNC0xLjUgMjYtOC42LS42LTUgLjItOS41IC44LTEyIDAtLjItMS44IDEuNC0yLjcgMy41IDAtNS43IDEuNi0xNS40IDkuNi0yMC41LS4xIDAtMy43LS44LTkgMS4xIDItMy4xIDEwLTcuOSAxMC40LTcuOS04LjItMjYtMzgtMjIuOS0zMi4yLTIyLjktMzAuOSAwLTMyLjYgLjMtMzkuOS00IC4xIC44IC41IDguMiA5LjYgMTQuOXptMjEuNSA1LjVjNC42IDAgMjMuMS0zLjMgMjMuMSAxNy4zIDAgMjAuNy0xOC40IDE3LjMtMjMuMSAxNy4zbDAtMzQuNnptMjI4LjkgNzkuNmw3IDguMyAwIDQyLjUtLjMgMGMtNS40LTE0LjQtNDIuMy00MS41LTQ1LjItNTAuOWwtMzEuNiAwIDcuNCA4LjUgMCA3Ni45LTcuMiA4LjMgMzkgMC03LjQtOC4yIDAtNDcuNCAuMyAwYzMuNyAxMC42IDQ0LjUgNDIuOSA0OC41IDU1LjZsMjEuMyAwIDAtODUuMiA3LjQtOC4zLTM5LjItLjF6TTM3OC4yIDE2NS4xYy0zMi4yIDAtMzIuOCAuMi0zOS45LTQgLjEgLjcgLjUgOC4zIDkuNiAxNC45IDMuMSAyIDIuOSA0LjMgMi45IDkuNSAxLjgtMS4xIDMuOC0yLjIgNi4xLTMtMS4xIDEuMS0yLjcgMi43LTMuNSA0LjUgMS0xLjEgNy41LTUuMSAxNC42LTMuNS0xLjYgLjMtNCAxLjEtNi4xIDIuOSAuMSAwIDIuMS0xLjEgNy41LS4zbDAtNC4zYzQuNyAwIDIzLjEtMy40IDIzLjEgMTcuMyAwIDIwLjUtMTguNSAxNy4zLTE5LjcgMTcuMyA1LjcgNC40IDUuOCAxMiAyLjIgMTYuM2wuMyAwYzMzLjQgMCAzNi43LTI3LjMgMzYuNy0zNCAwLTMuOC0xLjEtMzItMzMuOC0zMy42eiJdCiAgICB9OwogICAgZmFNaWNyb3NvZnQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWljcm9zb2Z0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzY2EiLCAiTTAgMzJsMjE0LjYgMCAwIDIxNC42LTIxNC42IDAgMC0yMTQuNnptMjMzLjQgMGwyMTQuNiAwIDAgMjE0LjYtMjE0LjYgMCAwLTIxNC42ek0wIDI2NS40bDIxNC42IDAgMCAyMTQuNi0yMTQuNiAwIDAtMjE0LjZ6bTIzMy40IDBsMjE0LjYgMCAwIDIxNC42LTIxNC42IDAgMC0yMTQuNnoiXQogICAgfTsKICAgIGZhRmx5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZseSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmNDE3IiwgIk0xNjUuOSA0MjcuOGMxMi45IDExLjcgMzMuNyAzMy4zIDMzLjIgNTAuNyAwIC44LS4xIDEuNi0uMSAyLjUtMS44IDE5LjgtMTguOCAzMS4xLTM5LjEgMzEtMjUtLjEtMzkuOS0xNi44LTM4LjctMzUuOCAxLTE2LjIgMjAuNS0zNi43IDMyLjQtNDcuNiAyLjMtMi4xIDIuNy0yLjcgNS42LTMuNiAzLjQgMCAzLjkgLjMgNi43IDIuOHpNMzAwIDY3LjNjLTE2LjMtMjUuNy0zOC42LTQwLjYtNjMuMy01Mi4xLTI1LjUtMTAuNy01NC42LTE1LjQtNzYuNi0xNS4yLTQ0LjEgMC03MS4yIDEzLjItODEuMSAxNy4zLTUzLjYgMjcuOS04NC40IDY5LjktODIuOSAxNDEuMyA3LjEgODIuMiA5NyAxNzYgMTU1LjggMjMzLjggMS43IDEuNiA0LjUgNC41IDYuMiA1LjFsMy4zIC4xYzIuMS0uNyAxLjgtLjUgMy41LTIuMSA1Mi4zLTQ5LjIgMTQwLjctMTQ1LjggMTU1LjktMjE1LjcgNy0zOS4yIDMuMS03Mi41LTIwLjgtMTEyLjV6TTE1NC45IDM1MS45Yy0yOC01MS4xLTY1LjItMTMwLjctNjkuMy0xODktMy40LTQ3LjUgMTEuNC0xMzEuMiA2OS4zLTEzNi43bDAgMzI1Ljd6TTI5Ni44IDE4MGMtMTYuNCA1Ni44LTc3LjMgMTI4LTExOC45IDE3MC4zIDI3LjgtNTEuOSA2NS4yLTEzMy4zIDY3LjItMTkxLjkgMS42LTQ1LjktOS44LTEwNS44LTQ4LTEzMS40IDg4LjggMTguMyAxMTUuNSA5OC4xIDk5LjcgMTUzeiJdCiAgICB9OwogICAgZmFDY1N0cmlwZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYy1zdHJpcGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFmNSIsICJNNDkyLjQgMjIwLjhjLTguOSAwLTE4LjcgNi43LTE4LjcgMjIuN2wzNi43IDBjMC0xNi05LjMtMjIuNy0xOC0yMi43ek0zNzUgMjIzLjRjLTguMiAwLTEzLjMgMi45LTE3IDdsLjIgNTIuOGMzLjUgMy43IDguNSA2LjcgMTYuOCA2LjcgMTMuMSAwIDIxLjktMTQuMyAyMS45LTMzLjQgMC0xOC42LTktMzMuMi0yMS45LTMzLjF6TTUyOCAzMkw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQ4MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0xMjIuMiAyODEuMWMwIDI1LjYtMjAuMyA0MC4xLTQ5LjkgNDAuMy0xMi4yIDAtMjUuNi0yLjQtMzguOC04LjFsMC0zMy45YzEyIDYuNCAyNy4xIDExLjMgMzguOSAxMS4zIDcuOSAwIDEzLjYtMi4xIDEzLjYtOC43IDAtMTctNTQtMTAuNi01NC00OS45IDAtMjUuMiAxOS4yLTQwLjIgNDgtNDAuMiAxMS44IDAgMjMuNSAxLjggMzUuMyA2LjVsMCAzMy40Yy0xMC44LTUuOC0yNC41LTkuMS0zNS4zLTkuMS03LjUgMC0xMi4xIDIuMi0xMi4xIDcuNyAwIDE2IDU0LjMgOC40IDU0LjMgNTAuN3pNMTkxIDIyNC41bC0yNyAwIDAgNTAuNWMwIDIwLjkgMjIuNSAxNC40IDI3IDEyLjZsMCAyOC45Yy00LjcgMi42LTEzLjMgNC43LTI0LjkgNC43LTIxLjEgMC0zNi45LTE1LjUtMzYuOS0zNi41bC4yLTExMy45IDM0LjctNy40IDAgMzAuOCAyNi45IDAgMCAzMC4zem03NCAyLjRjLTQuNS0xLjUtMTguNy0zLjYtMjcuMSA3LjRsMCA4NC40LTM1LjUgMCAwLTEyNC41IDMwLjcgMCAyLjIgMTAuNWM4LjMtMTUuMyAyNC45LTEyLjIgMjkuNi0xMC41bC4xIDAgMCAzMi43em00NC4xIDkxLjhsLTM1LjcgMCAwLTEyNC41IDM1LjcgMCAwIDEyNC41em0wLTE0Mi45bC0zNS43IDcuNiAwLTI4LjkgMzUuNy03LjYgMCAyOC45em03NC4xIDE0NS41Yy0xMi40IDAtMjAtNS4zLTI1LjEtOWwtLjEgNDAuMi0zNS41IDcuNSAwLTE2NS44IDMxLjMgMCAxLjggOC44YzQuOS00LjUgMTMuOS0xMS4xIDI3LjgtMTEuMSAyNC45IDAgNDguNCAyMi41IDQ4LjQgNjMuOCAwIDQ1LjEtMjMuMiA2NS41LTQ4LjYgNjUuNnptMTYwLjQtNTEuNWwtNjkuNSAwYzEuNiAxNi42IDEzLjggMjEuNSAyNy42IDIxLjUgMTQuMSAwIDI1LjItMyAzNC45LTcuOWwwIDI4LjZjLTkuNyA1LjMtMjIuNCA5LjItMzkuNCA5LjItMzQuNiAwLTU4LjgtMjEuNy01OC44LTY0LjUgMC0zNi4yIDIwLjUtNjQuOSA1NC4zLTY0LjkgMzMuNyAwIDUxLjMgMjguNyA1MS4zIDY1LjEgMCAzLjUtLjMgMTAuOS0uNCAxMi45eiJdCiAgICB9OwogICAgZmFXb3JkcHJlc3NTaW1wbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid29yZHByZXNzLXNpbXBsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDExIiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTMzIDI1NmMwLTMyLjMgNi45LTYzIDE5LjMtOTAuN0wxNTguNyA0NTYuN0M4NC4zIDQyMC41IDMzIDM0NC4yIDMzIDI1NnpNMjU2IDQ3OWMtMjEuOSAwLTQzLTMuMi02My05LjFsNjYuOS0xOTQuNCA2OC41IDE4Ny44Yy41IDEuMSAxIDIuMSAxLjYgMy4xLTIzLjEgOC4xLTQ4IDEyLjYtNzQgMTIuNnptMzAuNy0zMjcuNWMxMy40LS43IDI1LjUtMi4xIDI1LjUtMi4xIDEyLTEuNCAxMC42LTE5LjEtMS40LTE4LjQgMCAwLTM2LjEgMi44LTU5LjQgMi44LTIxLjkgMC01OC43LTIuOC01OC43LTIuOC0xMi0uNy0xMy40IDE3LjctMS40IDE4LjQgMCAwIDExLjQgMS40IDIzLjQgMi4xbDM0LjcgOTUuMi00OC44IDE0Ni4zLTgxLjItMjQxLjVjMTMuNC0uNyAyNS41LTIuMSAyNS41LTIuMSAxMi0xLjQgMTAuNi0xOS4xLTEuNC0xOC40IDAgMC0zNi4xIDIuOC01OS40IDIuOC00LjIgMC05LjEtLjEtMTQuNC0uMyAzOS45LTYwLjUgMTA4LjQtMTAwLjUgMTg2LjMtMTAwLjUgNTggMCAxMTAuOSAyMi4yIDE1MC42IDU4LjUtMS0uMS0xLjktLjItMi45LS4yLTIxLjkgMC0zNy40IDE5LjEtMzcuNCAzOS42IDAgMTguNCAxMC42IDMzLjkgMjEuOSA1Mi4zIDguNSAxNC44IDE4LjQgMzMuOSAxOC40IDYxLjUgMCAxOS4xLTcuMyA0MS4yLTE3IDcyLjFsLTIyLjIgNzQuMy04MC43LTIzOS42em04MS40IDI5Ny4ybDY4LjEtMTk2LjljMTIuNy0zMS44IDE3LTU3LjIgMTctNzkuOSAwLTguMi0uNS0xNS44LTEuNS0yMi45IDE3LjQgMzEuOCAyNy4zIDY4LjIgMjcuMyAxMDcgMCA4Mi4zLTQ0LjYgMTU0LjEtMTEwLjkgMTkyLjd6Il0KICAgIH07CiAgICBmYVNlbGxzeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzZWxsc3kiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjIxMyIsICJNNTQwIDIzNy4zYzMuMS0xMi4zIDQuMy0yNC44IDQuMy0zNy40IDAtOTIuNS03NS40LTE2Ny45LTE2Ny45LTE2Ny45LTc3LjIgMC0xNDQuNiA1My0xNjMgMTI3LjgtMTUuMy0xMy4yLTM0LjktMjAuNS01NS4yLTIwLjUtNDYuMyAwLTg0IDM3LjctODQgODQgMCA3LjQgLjkgMTUgMy4xIDIyLjQtNDIuOSAyMC4yLTcwLjggNjMuNy03MC44IDExMS4yIDAgNjggNTUuNSAxMjMuMiAxMjMuMiAxMjMuMmwzODEuMiAwYzY3LjcgMCAxMjMuMi01NS4yIDEyMy4yLTEyMy4yIDAtNTYuNC0zOC45LTEwNi05NC4xLTExOS41ek0yMDAuMiA0MDEuNmMwIDguMy03IDE1LjMtMTUuMyAxNS4zbC0zMC45IDBjLTguMyAwLTE1LjMtNy0xNS4zLTE1LjNsMC0xMTAuOWMwLTguMyA3LTE1LjMgMTUuMy0xNS4zbDMwLjkgMGM4LjMgMCAxNS4zIDcgMTUuMyAxNS4zbDAgMTEwLjl6bTg5LjUgMGMwIDguMy03IDE1LjMtMTUuMyAxNS4zbC0zMC45IDBjLTguMyAwLTE1LjMtNy0xNS4zLTE1LjNsMC0xMzEuNWMwLTguMyA3LTE1LjMgMTUuMy0xNS4zbDMwLjkgMGM4LjMgMCAxNS4zIDcgMTUuMyAxNS4zbDAgMTMxLjV6bTg5LjUgMGMwIDguMy03IDE1LjMtMTUuMyAxNS4zbC0zMSAwYy04LjMgMC0xNS4zLTctMTUuMy0xNS4zbDAtMTYyLjdjMC04LjMgNy0xNS4zIDE1LjMtMTUuM2wzMSAwYzguMyAwIDE1LjMgNyAxNS4zIDE1LjNsMCAxNjIuN3ptODcgMGMwIDguMy03IDE1LjMtMTUuMyAxNS4zbC0yOC41IDBjLTguMyAwLTE1LjMtNy0xNS4zLTE1LjNsMC0yMjQuNmMwLTguNiA3LTE1LjYgMTUuMy0xNS42bDI4LjUgMGM4LjMgMCAxNS4zIDcgMTUuMyAxNS42bDAgMjI0LjZ6Il0KICAgIH07CiAgICBmYURhc2hjdWJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRhc2hjdWJlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyMTAiLCAiTTMyNi45IDEwNGwtMjE2LjIgMGMtNTEuMSAwLTkxLjIgNDMuMy05MS4yIDkzLjVsMCAyMjkuNWMwIDUwLjUgNDAuMSA4NSA5MS4yIDg1bDIyNy4yIDBjNTEuMSAwIDkxLjItMzQuNSA5MS4yLTg1bDAtNDI3LTEwMi4yIDEwNHpNMTU0LjIgNDE2LjVjLTE3LjcgMC0zMi40LTE1LjEtMzIuNC0zMi44bDAtMTQyLjljMC0xNy43IDE0LjctMzIuNSAzMi40LTMyLjVsMTQwLjcgMGMxNy43IDAgMzIgMTQuOCAzMiAzMi41bDAgMTIzLjUgNTEuMSA1Mi4zLTIyMy44IDAgMC0uMXoiXQogICAgfTsKICAgIGZhR2l0dGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdpdHRlciIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNDI2IiwgIk02Ni40IDMyMi41bC01MC40IDAgMC0zMjIuNSA1MC40IDAgMCAzMjIuNXpNMTY2LjkgNzYuMWwtNTAuNCAwIDAgNDM1LjkgNTAuNCAwIDAtNDM1Ljl6bTEwMC42IDBsLTUwLjQgMCAwIDQzNS45IDUwLjQgMCAwLTQzNS45ek0zNjggNzZsLTUwLjQgMCAwIDI0NyA1MC40IDAgMC0yNDd6Il0KICAgIH07CiAgICBmYVdvbGZQYWNrQmF0dGFsaW9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndvbGYtcGFjay1iYXR0YWxpb24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjUxNCIsICJNMjM2LjIgNDcxLjVsMTAuNiAxNS44IDUuMy0xMi4zIDUuMyA3IDAgMjkuOWMyMS4xLTcuOSAyMS4xLTY2LjkgMjUuNS05Ny4yIDQuNi0zMS45LS45LTkyLjggODEuNC0xNDkuMS04LjktMjMuNi0xMi00OS40LTIuNi04MCAyNy45IDMuNCA1My45IDEwLjYgNjMuMyA1NC4xbC0zMC4zIDguNGMxMS4xIDIzIDE3IDQ2LjggMTMuMiA3Mi4xbC0yNy4zLTctNi4yIDMzLjQtMTguNS03LTguOCAzMy40LTE5LjQtNyAyNi40IDIxLjEgOC44LTI4LjIgMjQuNiA1LjIgNy0zNS42IDI2LjQgMTQuNWMuMi0yMCA3LTU4LjEtOC44LTg0LjVsMjYuNCA1LjNjNC0yMi4xLTIuNC0zOS4yLTcuOS01Ni43bDIyLjQgOS43Yy0uNC0yNS4xLTI5LjktNTYuOC02MS42LTU4LjUtMjAuMi0xLjEtNTYuNy0yNS4yLTU0LjEtNTEuOSAyLTE5LjkgMTcuNC00Mi42IDQzLjEtNDkuNy00NCAzNi41LTkuNyA2Ny4zIDUuMyA3My41IDQuNC0xMS40IDE3LjUtNjkuMSAwLTEzMC4yLTQwLjQgMjIuOS04OS43IDY1LjEtOTMuMiAxNDcuOGwtNTggMzguNy0zLjUgOTMuMiAxMDcuMy01OS44IDcgNy0xNy42IDMuNS00NCAzOC43LTE1LjgtNS4zLTI4LjEgNDkuMy0zLjUgMTE5LjYgMjEuMSAxNS44LTMyLjUgMTUuOC0zMi42LTE1LjggMjEuMS0xNS44LTMuNS0xMTkuNi0yOC4yLTQ5LjMtMTUuOCA1LjMtNDQtMzguNy0xNy42LTMuNSA3LTcgMTA3LjMgNTkuOC0zLjUtOTMuMy01OC4xLTM4LjdjLTMuNS04Mi44LTUyLjctMTI1LTkzLjItMTQ3LjktMTcuNSA2MS4xLTQuNCAxMTguOCAwIDEzMC4yIDE1LTYuMiA0OS4zLTM3IDUuMy03My41IDI1LjcgNy4xIDQxLjEgMjkuOCA0My4xIDQ5LjcgMi42IDI2LjctMzMuOSA1MC44LTU0LjEgNTEuOS0zMS43IDEuNy02MS4yIDMzLjQtNjEuNiA1OC41bDIyLjQtOS43QzEzLjQgMjI0LjcgNyAyNDEuOCAxMSAyNjMuOWwyNi40LTUuM2MtMTUuOCAyNi40LTkuMSA2NC40LTguOCA4NC40bDI2LjQtMTQuNSA3IDM1LjYgMjQuNi01LjMgOC44IDI4LjIgMjYuNC0yMS4xLTE5LjQgNy04LjgtMzMuNC0xOC41IDctNi4yLTMzLjQtMjcuMyA3QzM4IDI5NC44IDQzLjggMjcxIDU1IDI0OGwtMzAuMy04LjRjOS40LTQzLjUgMzUuNS01MC44IDYzLjMtNTQuMSA5LjQgMzAuNiA2LjIgNTYuNS0yLjYgODAuMSA4Mi4zIDU2LjMgNzYuOCAxMTcuMiA4MS40IDE0OS4xIDQuNCAzMC4zIDQuNCA4OS4zIDI1LjUgOTcuMmwwLTI5LjggNS4zLTcgNS4zIDEyLjMgMTAuNi0xNS44IDExLjQgMjEuMSAxMS40LTIxLjEgMCAwem03OS4yLTk1TDI5OS41IDM2NmM3LjUtNC40IDEzLjgtOC40IDE5LjQtMTIuMy0uNiA3LjItLjMgMTMuOC0zLjUgMjIuOGwwIDB6bTI4LjItNDkuM2MtLjQgMTAuOS0uOSAyMS43LTEuOCAzMS43LTcuOC0xLjktMTUuNi0zLjgtMjEuMS03IDguMi03LjkgMTUuNi0xNi4zIDIyLjktMjQuN2wwIDB6bTI0LjYgNS4zYzAtMTMuNC0yLjEtMjQuMi01LjMtMzMuNC01LjUgOS41LTExLjcgMTguNi0xOC41IDI3LjNsMjMuOCA2LjJ6bTMuNS04MC45YzE5LjQgMTIuOCAyNy44IDMzLjcgMjkuOSA1Ni4zLTEyLjMtNC41LTI0LjYtOS4zLTM3LTEwLjYgNS4xLTEyIDYuNi0yOC4xIDctNDUuN2wwIDB6bS0xLjgtNDUuN2MuOCAxNC4zIDEuOCAyOC44IDEuOCA0Mi4yIDE5LjItOC4xIDI5LjgtOS43IDQ0LTE0LjEtMTAuNi0xOS0yNy4yLTI1LjUtNDUuOC0yOC4ybDAgMHpNMTM0LjIgMzc2LjVMMTUwIDM2NmMtNy41LTQuNC0xMy44LTguNC0xOS40LTEyLjMgLjYgNy4zIC4zIDEzLjkgMy41IDIyLjlsMCAwek0xMDYgMzI3LjNjLjQgMTAuOSAuOSAyMS43IDEuOCAzMS43IDcuOC0xLjkgMTUuNi0zLjggMjEuMS03LTguMi03LjktMTUuNi0xNi4zLTIyLjktMjQuN3ptLTI0LjYgNS4zYzAtMTMuNCAyLTI0LjIgNS4zLTMzLjQgNS41IDkuNSAxMS43IDE4LjYgMTguNSAyNy4zbC0yMy44IDYuMnptLTMuNS04MC45Yy0xOS40IDEyLjgtMjcuOCAzMy43LTI5LjkgNTYuMyAxMi4zLTQuNSAyNC42LTkuMyAzNy0xMC42LTUtMTItNi42LTI4LjEtNy00NS43bC0uMSAwem0xLjgtNDUuN2MtLjggMTQuMy0xLjggMjguOC0xLjggNDIuMi0xOS4yLTguMS0yOS44LTkuNy00NC0xNC4xIDEwLjYtMTkgMjcuMi0yNS41IDQ1LjgtMjguMXoiXQogICAgfTsKICAgIGZhTGFzdGZtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxhc3RmbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjAyIiwgIk0yMjUuOCAzNjcuMWwtMTguOC01MXMtMzAuNSAzNC03Ni4yIDM0Yy00MC41IDAtNjkuMi0zNS4yLTY5LjItOTEuNSAwLTcyLjEgMzYuNC05Ny45IDcyLjEtOTcuOSA2Ni41IDAgNzQuOCA1My4zIDEwMC45IDEzNC45IDE4LjggNTYuOSA1NCAxMDIuNiAxNTUuNCAxMDIuNiA3Mi43IDAgMTIyLTIyLjMgMTIyLTgwLjkgMC03Mi45LTYyLjctODAuNi0xMTUtOTIuMS0yNS44LTUuOS0zMy40LTE2LjQtMzMuNC0zNCAwLTE5LjkgMTUuOC0zMS43IDQxLjYtMzEuNyAyOC4yIDAgNDMuNCAxMC42IDQ1LjcgMzUuOGw1OC42LTdjLTQuNy01Mi44LTQxLjEtNzQuNS0xMDAuOS03NC41LTUyLjggMC0xMDQuNCAxOS45LTEwNC40IDgzLjkgMCAzOS45IDE5LjQgNjUuMSA2OCA3Ni44IDQ0LjkgMTAuNiA3OS44IDEzLjggNzkuOCA0NS43IDAgMjEuNy0yMS4xIDMwLjUtNjEgMzAuNS01OS4yIDAtODMuOS0zMS4xLTk3LjktNzMuOS0zMi05Ni44LTQzLjYtMTYzLTE2MS4zLTE2My04Ni4xIDAtMTMxLjggNTQuNS0xMzEuOCAxNDcuMiAwIDg5LjEgNDUuNyAxMzcuMiAxMjcuOSAxMzcuMiA2Ni4yIDAgOTcuOS0zMS4xIDk3LjktMzEuMXoiXQogICAgfTsKICAgIGZhU2hvcHdhcmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2hvcHdhcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjViNSIsICJNNDAzLjUgNDU1LjRjLTQyLjYgMzEuNy05NC40IDQ4LjctMTQ3LjUgNDguNi0xMzcuMiAwLTI0OC0xMTEtMjQ4LTI0OCAwLTEzNy4yIDExMS0yNDggMjQ4LTI0OCA2MS4yLS4xIDEyMC4yIDIyLjYgMTY1LjcgNjMuNSAuNiAuNSAuOSAxLjIgMS4xIDEuOXMuMSAxLjUtLjMgMi4yLS44IDEuMy0xLjUgMS42LTEuNCAuNS0yLjIgLjRjLTE4LjgtMi41LTM3LjctMy43LTU2LjctMy43LTEyOS40IDAtMjIyLjQgNTMuNS0yMjIuNCAxNTUuNCAwIDEwOSA5Mi4xIDE0NS45IDE3Ni44IDE3OC43IDMzLjYgMTMgNjUuNCAyNS40IDg3IDQxLjYgLjQgLjMgLjggLjggMS4xIDEuM3MuNCAxIC40IDEuNi0uMSAxLjEtLjQgMS42LS42IC45LTEuMSAxLjNsLS4xIDB6TTUwMyAyMzMuMWMtLjEtLjktLjUtMS44LTEuMy0yLjQtNTEuOC00My05My42LTYwLjUtMTQ0LjUtNjAuNS04NC4xIDAtODAuMyA1Mi4yLTgwLjMgNTMuNiAwIDQyLjYgNTIuMSA2MiAxMTIuMyA4NC41IDMxLjEgMTEuNiA2My4yIDIzLjYgOTIuNyAzOS45IC40IC4yIC45IC40IDEuNCAuNHMxIDAgMS41LS4yIC45LS40IDEuMy0uOCAuNi0uOCAuOC0xLjJjMTQuMS0zNiAxOS41LTc0LjggMTYtMTEzLjN6Il0KICAgIH07CiAgICBmYUJsb2dnZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmxvZ2dlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMzdjIiwgIk0xNjIuNCAxOTZjNC44LTQuOSA2LjItNS4xIDM2LjQtNS4xIDI3LjIgMCAyOC4xIC4xIDMyLjEgMi4xIDUuOCAyLjkgOC4zIDcgOC4zIDEzLjYgMCA1LjktMi40IDEwLTcuNiAxMy40LTIuOCAxLjgtNC41IDEuOS0zMS4xIDIuMS0xNi40IC4xLTI5LjUtLjItMzEuNS0uOC0xMC4zLTIuOS0xNC4xLTE3LjctNi42LTI1LjN6bTYxLjQgOTQuNWMtNTMuOSAwLTU1LjggLjItNjAuMiA0LjEtMy41IDMuMS01LjcgOS40LTUuMSAxMy45IC43IDQuNyA0LjggMTAuMSA5LjIgMTIgMi4yIDEgMTQuMSAxLjcgNTYuMyAxLjJsNDcuOS0uNiA5LjItMS41YzktNS4xIDEwLjUtMTcuNCAzLjEtMjQuNC01LjMtNC43LTUtNC43LTYwLjQtNC43ek00NDcuMiA0MjAuNmMtMy41IDI4LjQtMjMgNTAuNC01MS4xIDU3LjUtNy4yIDEuOC05LjcgMS45LTE3Mi45IDEuOC0xNTcuOCAwLTE2NS45LS4xLTE3Mi0xLjgtOC40LTIuMi0xNS42LTUuNS0yMi4zLTEwLTUuNi0zLjgtMTMuOS0xMS44LTE3LTE2LjQtMy44LTUuNi04LjItMTUuMy0xMC0yMlMwIDQyMC4zIDAgMjU2LjNjMC0xNjMuMSAwLTE2Ni42IDEuOC0xNzMuNyA2LjMtMjQuNyAyNS45LTQzLjYgNTEuMi00OS4yIDcuMy0xLjYgMzMyLjEtMS45IDM0MC0uMyAyMS4yIDQuMyAzNy45IDE3LjEgNDcuNiAzNi40IDcuNyAxNS4zIDctMS41IDcuMyAxODAuNiAuMiAxMTUuOCAwIDE2NC41LS43IDE3MC41ek0zNjEuOCAyMzUuNGMtMS4xLTUtNC4yLTkuNi03LjctMTEuNS0xLjEtLjYtOC0xLjMtMTUuNS0xLjctMTIuNC0uNi0xMy44LS44LTE3LjgtMy4xLTYuMi0zLjYtNy45LTcuNi04LTE4LjMgMC0yMC40LTguNS0zOS40LTI1LjMtNTYuNS0xMi0xMi4yLTI1LjMtMjAuNS00MC42LTI1LjEtMy42LTEuMS0xMS44LTEuNS0zOS4yLTEuOC00Mi45LS41LTUyLjUgLjQtNjcuMSA2LjItMjcgMTAuNy00Ni4zIDMzLjQtNTMuNCA2Mi40LTEuMyA1LjQtMS42IDE0LjItMS45IDY0LjMtLjQgNjIuOCAwIDcyLjEgNCA4NC41IDkuNyAzMC43IDM3LjEgNTMuNCA2NC42IDU4LjQgOS4yIDEuNyAxMjIuMiAyLjEgMTMzLjcgLjUgMjAuMS0yLjcgMzUuOS0xMC44IDUwLjctMjUuOSAxMC43LTEwLjkgMTcuNC0yMi44IDIxLjgtMzguNSAzLjItMTAuOSAyLjktODguNCAxLjctOTMuOXoiXQogICAgfTsKICAgIGZhRWRnZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlZGdlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyODIiLCAiTTEyMC4xIDM3LjRjNDEtMjUuMiA4Ny42LTM4LjIgMTM0LjktMzcuNCAxNjggMCAyNTcgMTIzLjggMjU3IDIxOS41LS4xIDMyLjctMTMgNjMuOS0zNS45IDg3LjItMjIuOSAyMy4yLTU0IDM2LjUtODYuNyAzNy03NS4yIDAtOTEuNS0yMy4xLTkxLjUtMzIgMC0zLjggMS4yLTYuMiA0LjgtOS40bDEtMS4yIC40LTEuNmMxMC41LTExLjUgMTUuOS0yNi4yIDE1LjktNDEuNiAwLTc4LjctODIuMi0xNDIuNy0xODQtMTQyLjctMzcuNS0uMy03NC41IDguOS0xMDcuNSAyNi45IDI3LTU3LjUgODIuNy05Ny42IDkxLjMtMTAzLjggLjgtLjYgLjMtLjggLjMtLjh6bTE1LjYgMzE4LjFjLTEuNCAzMCA0LjYgNjAgMTYuNCA4Ny4yIDEzLjYgMjYuNCAzMi43IDUxIDU2LjUgNjkuMy01OS41LTExLjUtMTExLjUtNDMuOS0xNDkuNC04OS4zLTM4LjEtNDYuNC01OS4yLTEwNC4zLTU5LjItMTY0LjggMC01MS4yIDYyLjQtOTQuNCAxMzYtOTQuNCAzNi42LS42IDcyLjQgMTAuOSAxMDEuOCAzMi43bC0zLjYgMS4yYy01MS41IDE3LjYtOTguNSA5MC43LTk4LjUgMTU4LjF6TTQ2OS44IDQwMGwtLjcgLjFjLTExLjggMTguOC0yNS45IDM1LjEtNDIuMiA0OS41LTMwLjggMjgtNjguMSA0NS41LTEwOC44IDQ5LjktMTguNiAuMy0zNi44LTMuMi01My44LTExLjQtMjUuNi0xMC4zLTQ3LjEtMzAtNjEuNi01My0xNC40LTIzLjktMjEuMS01MS43LTE5LTc5LjYtLjYtMjAuMSA1LjQtNDAuMyAxNS01OC4yIDEzLjkgMzMuMSAzNy41IDYxLjMgNjcuNiA4MC44czY1LjUgMjkuNSAxMDEuNCAyOC42YzMxIC4zIDYyLjEtNi43IDkwLjItMjAuNWwxLjktLjljMy45LTIuMyA3LjctMy45IDExLjYgMCA0LjUgNC45IDEuOCA5LjItMS4yIDE0LS4yIC4yLS4zIC41LS40IC43eiJdCiAgICB9OwogICAgZmFJb3hob3N0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImlveGhvc3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjIwOCIsICJNNjE2IDE2MGwtNjcuMyAwQzUxMS4yIDcwLjcgNDIyLjkgOCAzMjAgOCAxODMgOCA3MiAxMTkgNzIgMjU2IDcyIDI3Mi40IDczLjYgMjg4LjUgNzYuNyAzMDRMMjQgMzA0Yy0xMy4zIDAtMjQgMTAuOC0yNCAyNCAwIDEzLjMgMTAuNyAyNCAyNCAyNGw2Ny4zIDBjMzcuNSA4OS4zIDEyNS44IDE1MiAyMjguNyAxNTIgMTM3IDAgMjQ4LTExMSAyNDgtMjQ4IDAtMTYuNC0xLjYtMzIuNS00LjctNDhsNTIuNyAwYzEzLjMgMCAyNC0xMC44IDI0LTI0IDAtMTMuMy0xMC43LTI0LTI0LTI0em0tOTYgOTZjMCAxMTAuNS04OS41IDIwMC0yMDAgMjAwLTc1LjcgMC0xNDEuNi00Mi0xNzUuNS0xMDRMNDI0IDM1MmMxMy4zIDAgMjQtMTAuOCAyNC0yNCAwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMjk4LjIgMGMtMy44LTE1LjQtNS44LTMxLjQtNS44LTQ4IDAtMTEwLjUgODkuNS0yMDAgMjAwLTIwMCA3NS43IDAgMTQxLjYgNDIgMTc1LjUgMTA0TDIxNiAxNjBjLTEzLjMgMC0yNCAxMC44LTI0IDI0IDAgMTMuMyAxMC43IDI0IDI0IDI0bDI5OC4yIDBjMy44IDE1LjQgNS44IDMxLjQgNS44IDQ4ek0yMTYgMjMybDIwOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0IDAgMTMuMi0xMC43IDI0LTI0IDI0bC0yMDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjQgMC0xMy4yIDEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYVNjaGxpeCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzY2hsaXgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNlYSIsICJNMzUwLjUgMTU3LjdsLTU0LjItNDYuMSA3My40LTM5IDc4LjMgNDQuMi05Ny41IDQwLjl6TTE5MiAxMjIuMWw0NS43LTI4LjIgMzQuNyAzNC42LTU1LjQgMjktMjUtMzUuNHptLTY1LjEgNi42bDMxLjktMjIuMSAxNy4yIDI4LjQtMzYuNyAyMi41LTEyLjQtMjguOHptLTIzLjMgODguMmwtOC44LTM0LjggMjkuNi0xOC4zIDEzLjEgMzUuMy0zMy45IDE3Ljh6TTgyLjQgMTMzLjJsMjMuOS0xOC4xIDguOSAyNC0yNi43IDE4LjMtNi4xLTI0LjJ6TTU5IDIwNi41bC0zLjYtMjguNCAyMi4zLTE1LjUgNi4xIDI4LjctMjQuOCAxNS4yek0yOC40IDIyMy4xbDIwLjgtMTIuOCAzLjMgMzMuNC0yMi45IDEyLTEuMi0zMi42ek0xLjQgMjY4TDIwLjYgMjU3LjggMjEgMjk2IDAgMzA0LjggMS40IDI2OHptNTkuMSA1OS4zbC0yOC4zIDguMy0xLjYtNDYuOCAyNS4xLTEwLjcgNC44IDQ5LjJ6TTk5IDI2My4ybC0zMS4xIDEzLTUuMi00MC44IDI3LjQtMTQuNCA4LjkgNDIuMnpNMTIzLjIgMzc3bC00MS42IDUuOS04LjEtNjMuNSAzNS4yLTEwLjggMTQuNSA2OC40em0yOC41LTEzOS45bDIxLjIgNTcuMS00Ni4yIDEzLjYtMTMuNy01NC4xIDM4LjctMTYuNnptODUuNyAyMzAuNWwtNzAuOS0zLjMtMjQuMy05NS44IDU1LjItOC42IDQwIDEwNy43ek0xNTIuNSAxODcuOWw0Mi4yLTIyLjQgMjggNDUuOS01MC44IDIxLjMtMTkuNC00NC44em00MSA5NC45bDYxLjMtMTguNyA1Mi44IDg2LjYtNzkuOCAxMS4zLTM0LjMtNzkuMnptNTEuNC04NS42bDY3LjMtMjguOCA2NS41IDY1LjQtODguNiAyNi4yLTQ0LjItNjIuOHoiXQogICAgfTsKICAgIGZhREFuZEQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZC1hbmQtZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMzhkIiwgIk04Mi45IDk4LjljLS42LTE3LjIgMi0zMy44IDEyLjctNDguMiAuMyA3LjQgMS4yIDE0LjUgNC4yIDIxLjYgNS45LTI3LjUgMTkuNy00OS4zIDQyLjMtNjUuNS0xLjkgNS45LTMuNSAxMS44LTMgMTcuNyA4LjctNy40IDE4LjgtMTcuOCA0NC40LTIyLjcgMTQuNy0yLjggMjkuNy0yIDQyLjEgMSAzOC41IDkuMyA2MSAzNC4zIDY5LjcgNzIuMyA1LjMgMjMuMSAuNyA0NS04LjMgNjYuNC01LjIgMTIuNC0xMiAyNC40LTIwLjcgMzUuMS0yLTEuOS0zLjktMy44LTUuOC01LjYtNDIuOC00MC44LTI2LjgtMjUuMi0zNy40LTM3LjQtMS4xLTEuMi0xLTIuMi0uMS0zLjYgOC4zLTEzLjUgMTEuOC0yOC4yIDEwLTQ0LTEuMS05LjgtNC4zLTE4LjktMTEuMy0yNi4yLTE0LjUtMTUuMy0zOS4yLTE1LTUzLjUgLjYtMTEuNCAxMi41LTE0LjEgMjcuNC0xMC45IDQzLjYgLjIgMS4zIC40IDIuNyAwIDMuOS0zLjQgMTMuNy00LjYgMjcuNi0yLjUgNDEuNiAuMSAuNSAuMSAxLjEgLjEgMS42IDAgLjMtLjEgLjUtLjIgMS4xLTIxLjgtMTEtMzYtMjguMy00My4yLTUyLjItOC4zIDE3LjgtMTEuMSAzNS41LTYuNiA1NC4xLTE1LjYtMTUuMi0yMS4zLTM0LjMtMjItNTUuMnpNNTUyLjUgMjIyLjFjLTExLjYtMTEuNi0yNS0yMC40LTQwLjEtMjYuNi0xMi44LTUuMi0yNi03LjktMzkuOS03LjEtMTAgLjYtMTkuNiAzLjEtMjkgNi40LTIuNSAuOS01LjEgMS42LTcuNyAyLjItNC45IDEuMi03LjMtMy4xLTQuNy02LjggMy4yLTQuNiAzLjQtNC4yIDE1LTEyIC42LS40IDEuMi0uOCAyLjItMS41bC0yLjUgMGMtLjYgMC0xLjIgLjItMS45IC4zLTE5LjMgMy4zLTMwLjcgMTUuNS00OC45IDI5LjYtMTAuNCA4LjEtMTMuOCAzLjgtMTItLjUgMS40LTMuNSAzLjMtNi43IDUuMS0xMCAxLTEuOCAyLjMtMy40IDMuNS01LjEtLjItLjItLjUtLjMtLjctLjUtMjcgMTguMy00Ni43IDQyLjQtNTcuNyA3My4zIC4zIC4zIC43IC42IDEgLjkgLjMtLjYgLjUtMS4yIC45LTEuNyAxMC40LTEyLjEgMjIuOC0yMS44IDM2LjYtMjkuOCAxOC4yLTEwLjYgMzcuNS0xOC4zIDU4LjctMjAuMiA0LjMtLjQgOC43LS4xIDEzLjEtLjEtMS44IC43LTMuNSAuOS01LjMgMS4xLTE4LjUgMi40LTM1LjUgOS01MS41IDE4LjUtMzAuMiAxNy45LTU0LjUgNDIuMi03NS4xIDcwLjQtLjMgLjQtLjQgLjktLjcgMS4zIDE0LjUgNS4zIDI0IDE3LjMgMzYuMSAyNS42IC4yLS4xIC4zLS4yIC40LS40bDEuMi0yLjdjMTIuMi0yNi45IDI3LTUyLjMgNDYuNy03NC41IDE2LjctMTguOCAzOC0yNS4zIDYyLjUtMjAgNS45IDEuMyAxMS40IDQuNCAxNy4yIDYuOCAyLjMtMS40IDUuMS0zLjIgOC00LjcgOC40LTQuMyAxNy40LTcgMjYuNy05IDE0LjctMy4xIDI5LjUtNC45IDQ0LjUtMS4zbDAtLjVjLS41LS40LTEuMi0uOC0xLjctMS40ek0zMTcuMSAzOTcuNmMtMzkuNC0zMy0yMi44LTE5LjUtNDIuNy0zNS42LS44IC45IDAtLjItMS45IDMtMTEuMiAxOS4xLTI1LjUgMzUuMy00NCA0Ny42LTEwLjMgNi44LTIxLjUgMTEuOC0zNC4xIDExLjgtMjEuNiAwLTM4LjItOS41LTQ5LjQtMjcuOC0xMi0xOS41LTEzLjMtNDAuNy04LjItNjIuNiA3LjgtMzMuOCAzMC4xLTU1LjIgMzguNi02NC4zLTE4LjctNi4yLTMzIDEuNy00Ni40IDEzLjkgLjgtMTMuOSA0LjMtMjYuMiAxMS44LTM3LjMtMjQuMyAxMC42LTQ1LjkgMjUtNjQuOCA0My45LS4zLTUuOCA1LjQtNDMuNyA1LjYtNDQuNyAuMy0yLjctLjYtNS4zLTMtNy40LTI0LjIgMjQuNy00NC41IDUxLjgtNTYuMSA4NC42IDcuNC01LjkgMTQuOS0xMS40IDIzLjYtMTYuMi04LjMgMjIuMy0xOS42IDUyLjgtNy44IDEwMS4xIDQuNiAxOSAxMS45IDM2LjggMjQuMSA1Mi4zIDIuOSAzLjcgNi4zIDYuOSA5LjUgMTAuMyAuMi0uMiAuNC0uMyAuNi0uNS0xLjQtNy0yLjItMTQuMS0xLjUtMjEuOSAyLjIgMy4yIDMuOSA2IDUuOSA4LjYgMTIuNiAxNiAyOC43IDI3LjQgNDcuMiAzNS42IDI1IDExLjMgNTEuMSAxMy4zIDc3LjkgOC42IDU0LjktOS43IDkwLjctNDguNiAxMTYtOTguOCAxLTEuOCAuNi0yLjktLjktNC4yem0xNzItNDYuNGMtOS41LTMuMS0yMi4yLTQuMi0yOC43LTIuOSA5LjkgNCAxNC4xIDYuNiAxOC44IDEyIDEyLjYgMTQuNCAxMC40IDM0LjctNS40IDQ1LjYtMTEuNyA4LjEtMjQuOSAxMC41LTM4LjkgOS4xLTEuMi0uMS0yLjMtLjQtMy0uNiAyLjgtMy43IDYtNyA4LjEtMTAuOCA5LjQtMTYuOCA1LjQtNDIuMS04LjctNTYuMS0yLjEtMi4xLTQuNi0zLjktNy01LjktLjMgMS4zLS4xIDIuMSAuMSAyLjggNC4yIDE2LjYtOC4xIDMyLjQtMjQuOCAzMS44LTcuNi0uMy0xMy45LTMuOC0xOS42LTguNS0xOS41LTE2LjEtMzkuMS0zMi4xLTU4LjUtNDguMy01LjktNC45LTEyLjUtOC4xLTIwLjEtOC43LTQuNi0uNC05LjMtLjYtMTMuOS0uOS01LjktLjQtOC44LTIuOC0xMC40LTguNC0uOS0zLjQtMS41LTYuOC0yLjItMTAuMi0xLjUtOC4xLTYuMi0xMy0xNC4zLTE0LjItNC40LS43LTguOS0xLTEzLjMtMS41LTEzLTEuNC0xOS44LTcuNC0yMi42LTIwLjMtNSAxMS0xLjYgMjIuNCA3LjMgMjkuOSA0LjUgMy44IDkuMyA3LjMgMTMuOCAxMS4yIDQuNiAzLjggNy40IDguNyA3LjkgMTQuOCAuNCA0LjcgLjggOS41IDEuOCAxNC4xIDIuMiAxMC42IDguOSAxOC40IDE3IDI1LjEgMTYuNSAxMy43IDMzIDI3LjMgNDkuNSA0MS4xIDE3LjkgMTUgMTMuOSAzMi44IDEzIDU2LS45IDIyLjkgMTIuMiA0Mi45IDMzLjUgNTEuMiAxIC40IDIgLjYgMy42IDEuMS0xNS43LTE4LjItMTAuMS00NC4xIC43LTUyLjMgLjMgMi4yIC40IDQuMyAuOSA2LjQgOS40IDQ0LjEgNDUuNCA2NC4yIDg1IDU2LjkgMTYtMi45IDMwLjYtOC45IDQyLjktMTkuOCAyLTEuOCAzLjctNC4xIDUuOS02LjUtMTkuMyA0LjYtMzUuOCAuMS01MC45LTEwLjYgLjctLjMgMS4zLS4zIDEuOS0uMyAyMS4zIDEuOCA0MC42LTMuNCA1Ny0xNy40IDE5LjUtMTYuNiAyNi42LTQyLjkgMTcuNC02Ni04LjMtMjAuMS0yMy42LTMyLjMtNDMuOC0zOC45ek05OS44IDE3OS4zYy01LjMtOS4yLTEzLjItMTUuNi0yMi4xLTIxLjMgMTMuNy0uNSAyNi42IC4yIDM5LjYgMy43LTctMTIuMi04LjUtMjQuNy01LTM4LjcgNS4zIDExLjkgMTMuNyAyMC4xIDIzLjYgMjYuOCAxOS43IDEzLjIgMzUuNyAxOS42IDQ2LjcgMzAuMiAzLjQgMy4zIDYuMyA3LjEgOS42IDEwLjktLjgtMi4xLTEuNC00LjEtMi4yLTYtNS0xMC42LTEzLTE4LjYtMjIuNi0yNS0xLjgtMS4yLTIuOC0yLjUtMy40LTQuNS0zLjMtMTIuNS0zLTI1LjEtLjctMzcuNiAxLTUuNSAyLjgtMTAuOSA0LjUtMTYuMyAuOC0yLjQgMi4zLTQuNiA0LTYuNiAuNiA2LjkgMCAyNS41IDE5LjYgNDYgMTAuOCAxMS4zIDIyLjQgMjEuOSAzMy45IDMyLjcgOSA4LjUgMTguMyAxNi43IDI1LjUgMjYuOCAxLjEgMS42IDIuMiAzLjMgMy44IDQuNy01LTEzLTE0LjItMjQuMS0yNC4yLTMzLjgtOS42LTkuMy0xOS40LTE4LjQtMjkuMi0yNy40LTMuMy0zLTQuNi02LjctNS4xLTEwLjktMS4yLTEwLjQgMC0yMC42IDQuMy0zMC4yIC41LTEgMS4xLTIgMS45LTMuMyAuNSA0LjIgLjYgNy45IDEuNCAxMS42IDQuOCAyMy4xIDIwLjQgMzYuMyA0OS4zIDYzLjUgMTAgOS40IDE5LjMgMTkuMiAyNS42IDMxLjYgNC44IDkuMyA3LjMgMTkgNS43IDI5LjYtLjEgLjYgLjUgMS43IDEuMSAyIDYuMiAyLjYgMTAgNi45IDkuNyAxNC4zIDcuNy0yLjYgMTIuNS04IDE2LjQtMTQuNSA0LjIgMjAuMi05LjEgNTAuMy0yNy4yIDU4LjcgLjQtNC41IDUtMjMuNC0xNi41LTI3LjctNi44LTEuMy0xMi44LTEuMy0yMi45LTIuMSA0LjctOSAxMC40LTIwLjYgLjUtMjIuNC0yNC45LTQuNi01Mi44IDEuOS01Ny44IDQuNiA4LjIgLjQgMTYuMyAxIDIzLjUgMy4zLTIgNi41LTQgMTIuNy01LjggMTguOS0xLjkgNi41IDIuMSAxNC42IDkuMyA5LjYgMS4yLS45IDIuMy0xLjkgMy4zLTIuNy0zLjEgMTcuOS0yLjkgMTUuOS0yLjggMTguMyAuMyAxMC4yIDkuNSA3LjggMTUuNyA3LjMtMi41IDExLjgtMjkuNSAyNy4zLTQ1LjQgMjUuOCA3LTQuNyAxMi43LTEwLjMgMTUuOS0xNy45LTYuNSAuOC0xMi45IDEuNi0xOS4yIDIuNGwtLjMtLjljNC43LTMuNCA4LTcuOCAxMC4yLTEzLjEgOC43LTIxLjEtMy42LTM4LTI1LTM5LjktOS4xLS44LTE3LjggLjgtMjUuOSA1LjUgNi4yLTE1LjYgMTcuMi0yNi42IDMyLjYtMzQuNS0xNS4yLTQuMy04LjktMi43LTI0LjYtNi4zIDE0LjYtOS4zIDMwLjItMTMuMiA0Ni41LTE0LjYtNS4yLTMuMi00OC4xLTMuNi03MC4yIDIwLjkgNy45IDEuNCAxNS41IDIuOCAyMy4yIDQuMi0yMy44IDctNDQgMTkuNy02Mi40IDM1LjYgMS4xLTQuOCAyLjctOS41IDMuMy0xNC4zIC42LTQuNSAuOC05LjIgLjEtMTMuNi0xLjUtOS40LTguOS0xNS4xLTE5LjctMTYuMy03LjktLjktMTUuNiAuMS0yMy4zIDEuMy0uOSAuMS0xLjcgLjMtMi45IDAgMTUuOC0xNC44IDM2LTIxLjcgNTMuMS0zMy41IDYtNC41IDYuOC04LjIgMy0xNC45em0xMjguNCAyNi44YzMuMyAxNiAxMi42IDI1LjUgMjMuOCAyNC4zLTQuNi0xMS4zLTEyLjEtMTkuNS0yMy44LTI0LjN6Il0KICAgIH07CiAgICBmYVZ1ZWpzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZ1ZWpzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0MWYiLCAiTTM1Ni45IDY0LjNsLTc2LjkgMC01NiA4OC42LTQ4LTg4LjYtMTc2IDAgMjI0IDM4My43IDIyNC0zODMuNy05MS4xIDB6TTU1LjcgOTYuM2w1My44IDAgMTE0LjUgMTk4LjIgMTE0LjQtMTk4LjIgNTMuOCAwLTE2OC4yIDI4OC4yLTE2OC4zLTI4OC4yeiJdCiAgICB9OwogICAgZmFNZXRhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1ldGEiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTQ5YiIsICJNNjQwIDMxNy45YzAgOTEuMy0zOS40IDE0OC41LTExMC4zIDE0OC41LTYyLjYgMC05NS44LTM0LjYtMTU2LjktMTM2LjZsLTMxLjQtNTIuNmMtOC4zLTEyLjUtMTQuNS0yNC4yLTIxLjItMzUtMjAuMSAzMy44LTQ3LjEgODMtNDcuMSA4My02NyAxMTYuNi0xMDQuNiAxNDEuMi0xNTYuOSAxNDEuMi03Mi44IDAtMTE2LjItNTcuMy0xMTYuMi0xNDUuOSAwLTE0MyA3OS44LTI3OC4xIDE4My45LTI3OC4xIDUwLjIgMCA5My44IDI0LjcgMTQ0LjggODkuNSAzNy4xLTUwLjEgNzguMS04OS41IDEzMC42LTg5LjUgOTkuMSAwIDE4MC43IDEyNS43IDE4MC43IDI3NS41ek0yODcuNCAxOTIuMmMtNDIuOS02Mi4xLTcwLjktODAuNS0xMDQuNC04MC41LTYxLjkgMC0xMTMuOCAxMDYuMS0xMTMuOCAyMTAgMCA0OC41IDE4LjUgNzUuNyA0OS42IDc1LjcgMzAuMiAwIDQ5LTE5IDEwMy4yLTEwMy44IDAgMCAyNC43LTM5LjEgNjUuNC0xMDEuNHpNNTMxLjIgMzk3LjRjMzIuMiAwIDQ2LjktMjcuNSA0Ni45LTc0LjkgMC0xMjQuMi01NC4zLTIyNS40LTEyMy4yLTIyNS40LTMzLjIgMC02MS4xIDI1LjktOTQuOSA3OCA5LjQgMTMuOCAxOS4xIDI5IDI5LjMgNDUuNGwzNy41IDYyLjRjNTguNyA5NC4xIDczLjUgMTE0LjUgMTA0LjQgMTE0LjV6Il0KICAgIH07CiAgICBmYUNyZWF0aXZlQ29tbW9uc1NoYXJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtc2hhcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRmMiIsICJNMjU1LjYgOEMzOTcuNCA4IDUwNCAxMTguMSA1MDQgMjU2IDUwNCA0MDMuMSAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS42IDUwNCA4IDM5NC41IDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4em0uOCA0NC43Yy0xMTguMiAwLTIwMy43IDk3LjktMjAzLjcgMjAzLjMgMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOCAuMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zem0xMDEgMTMyLjRjNy44IDAgMTMuNyA2LjEgMTMuNyAxMy43bDAgMTgyLjVjMCA3LjctNi4xIDEzLjctMTMuNyAxMy43bC0xMzUuMSAwYy03LjcgMC0xMy43LTYtMTMuNy0xMy43bDAtNTQtNTQgMGMtNy44IDAtMTMuNy02LTEzLjctMTMuN2wwLTE4Mi41YzAtOC4yIDYuNi0xMi43IDEyLjQtMTMuN2wxMzYuNCAwYzcuNyAwIDEzLjcgNiAxMy43IDEzLjdsMCA1NCA1NCAwek0xNjcuOSAzMDAuM2w0MC43IDAgMC0xMDEuNGMwLTcuNCA1LjgtMTIuNiAxMi0xMy43bDU1LjggMCAwLTQwLjMtMTA4LjUgMCAwIDE1NS40em0xNzYuMi04OC4xbC0xMDguNSAwIDAgMTU1LjQgMTA4LjUgMCAwLTE1NS40eiJdCiAgICB9OwogICAgZmFTdHVkaW92aW5hcmkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3R1ZGlvdmluYXJpIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzZjgiLCAiTTQ4MC43IDE4Ny43bDQuMiAyOCAwIDI4LTI1LjEgNDQuMS0zOS44IDc4LjQtNTYuMSA2Ny41LTc5LjEgMzcuOC0xNy43IDI0LjUtNy43IDEyLTkuNiA0czE3LjMtNjMuNiAxOS40LTYzLjYgMjAuMyAuNyAyMC4zIC43bDY2LjctMzguNi05Mi41IDI2LjEtNTUuOSAzNi44LTIyLjggMjgtNi42IDEuNCAyMC44LTczLjYgNi45LTUuNSAyMC43IDEyLjkgODguMy00NS4yIDU2LjgtNTEuNSAxNC44LTY4LjQtMTI1LjQgMjMuMyAxNS4yLTE4LjItMTczLjQtNTMuMyA4MS45LTEwLjUtMTY2LTEyMi45IDExNC45IDE4LjEtMTAxLjMtMTA4IDI1Mi45IDEyNi42LTMxLjUtMzggMTI0LjQgNzQuNC0xNDMuMy05OSAxOC43IDM4LjQtNDkuNi0xOC4xLTQ1LjUtODQuMyAxOTQuNiAxMjItNDIuOS01NS44IDEwOCA5Ni40IDEyLTguOS0yMS0xNi40IDQuMi0zNy44IDM3LjgtMTAuNCAyOS4yIDI0LjcgMTEuNSA0LjItNyA2LjIgOC41IDEyLTEzLjEgNy40LTEwLjMgMjAuMiAxMC41IDIzLjl6Il0KICAgIH07CiAgICBmYUJpdGJ1Y2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJiaXRidWNrZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTgxMF0sICJmMTcxIiwgIk0yMi4yIDMyYy0yLjEgMC00LjIgLjQtNi4xIDEuMXMtMy43IDEuOS01LjIgMy40LTIuNyAzLjItMy41IDUuMS0xLjMgNC0xLjMgNi4xYzAgLjkgLjEgMS45IC4yIDIuOEw3NC4xIDQ2Mi43Yy44IDUuMSAzLjQgOS43IDcuMyAxM3M4LjggNS4yIDE0IDUuMmwzMjUuNyAwYzMuOCAuMSA3LjUtMS4zIDEwLjUtMy43czQuOS01LjkgNS41LTkuN0w1MDUgNTAuN2MuNy00LjItLjMtOC40LTIuOC0xMS45cy02LjItNS43LTEwLjQtNi40Yy0uOS0uMS0xLjktLjItMi44LS4yTDIyLjIgMzJ6TTMwOC4xIDMyOS44bC0xMDQgMC0yOC4xLTE0NyAxNTcuMyAwLTI1LjIgMTQ3eiJdCiAgICB9OwogICAgZmFWayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2ayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMTg5IiwgIk0zMS41IDYzLjVDMCA5NSAwIDE0NS43IDAgMjQ3TDAgMjY1QzAgMzY2LjMgMCA0MTcgMzEuNSA0NDguNVMxMTMuNyA0ODAgMjE1IDQ4MGwxNy45IDBjMTAxLjQgMCAxNTIuMSAwIDE4My41LTMxLjVTNDQ4IDM2Ni4zIDQ0OCAyNjVsMC0xNy45YzAtMTAxLjQgMC0xNTIuMS0zMS41LTE4My41UzMzNC4zIDMyIDIzMyAzMkwyMTUgMzJDMTEzLjcgMzIgNjMgMzIgMzEuNSA2My41ek03NS42IDE2OC4zbDUxLjEgMGMxLjcgODUuNSAzOS40IDEyMS43IDY5LjMgMTI5LjJsMC0xMjkuMiA0OC4yIDAgMCA3My43YzI5LjUtMy4yIDYwLjUtMzYuOCA3MC45LTczLjdsNDguMiAwYy0zLjkgMTkuMi0xMS44IDM3LjMtMjMuMSA1My4zcy0yNS43IDI5LjUtNDIuNSAzOS42YzE4LjcgOS4zIDM1LjIgMjIuNCA0OC40IDM4LjVzMjIuOSAzNC45IDI4LjMgNTVsLTUzIDBjLTQuOS0xNy41LTE0LjgtMzMuMS0yOC42LTQ1cy0zMC43LTE5LjQtNDguNy0yMS42bDAgNjYuNi01LjggMGMtMTAyLjEgMC0xNjAuMy03MC0xNjIuOC0xODYuNXoiXQogICAgfTsKICAgIGZhR2l0aHViID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdpdGh1YiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMDliIiwgIk0xNzMuOSAzOTcuNGMwIDItMi4zIDMuNi01LjIgMy42LTMuMyAuMy01LjYtMS4zLTUuNi0zLjYgMC0yIDIuMy0zLjYgNS4yLTMuNiAzLS4zIDUuNiAxLjMgNS42IDMuNnptLTMxLjEtNC41Yy0uNyAyIDEuMyA0LjMgNC4zIDQuOSAyLjYgMSA1LjYgMCA2LjItMnMtMS4zLTQuMy00LjMtNS4yYy0yLjYtLjctNS41IC4zLTYuMiAyLjN6bTQ0LjItMS43Yy0yLjkgLjctNC45IDIuNi00LjYgNC45IC4zIDIgMi45IDMuMyA1LjkgMi42IDIuOS0uNyA0LjktMi42IDQuNi00LjYtLjMtMS45LTMtMy4yLTUuOS0yLjl6TTI1Mi44IDhjLTEzOC43IDAtMjQ0LjggMTA1LjMtMjQ0LjggMjQ0IDAgMTEwLjkgNjkuOCAyMDUuOCAxNjkuNSAyMzkuMiAxMi44IDIuMyAxNy4zLTUuNiAxNy4zLTEyLjEgMC02LjItLjMtNDAuNC0uMy02MS40IDAgMC03MCAxNS04NC43LTI5LjggMCAwLTExLjQtMjkuMS0yNy44LTM2LjYgMCAwLTIyLjktMTUuNyAxLjYtMTUuNCAwIDAgMjQuOSAyIDM4LjYgMjUuOCAyMS45IDM4LjYgNTguNiAyNy41IDcyLjkgMjAuOSAyLjMtMTYgOC44LTI3LjEgMTYtMzMuNy01NS45LTYuMi0xMTIuMy0xNC4zLTExMi4zLTExMC41IDAtMjcuNSA3LjYtNDEuMyAyMy42LTU4LjktMi42LTYuNS0xMS4xLTMzLjMgMi42LTY3LjkgMjAuOS02LjUgNjkgMjcgNjkgMjcgMjAtNS42IDQxLjUtOC41IDYyLjgtOC41czQyLjggMi45IDYyLjggOC41YzAgMCA0OC4xLTMzLjYgNjktMjcgMTMuNyAzNC43IDUuMiA2MS40IDIuNiA2Ny45IDE2IDE3LjcgMjUuOCAzMS41IDI1LjggNTguOSAwIDk2LjUtNTguOSAxMDQuMi0xMTQuOCAxMTAuNSA5LjIgNy45IDE3IDIyLjkgMTcgNDYuNCAwIDMzLjctLjMgNzUuNC0uMyA4My42IDAgNi41IDQuNiAxNC40IDE3LjMgMTIuMSAxMDAtMzMuMiAxNjcuOC0xMjguMSAxNjcuOC0yMzkgMC0xMzguNy0xMTIuNS0yNDQtMjUxLjItMjQ0ek0xMDUuMiAzNTIuOWMtMS4zIDEtMSAzLjMgLjcgNS4yIDEuNiAxLjYgMy45IDIuMyA1LjIgMSAxLjMtMSAxLTMuMy0uNy01LjItMS42LTEuNi0zLjktMi4zLTUuMi0xem0tMTAuOC04LjFjLS43IDEuMyAuMyAyLjkgMi4zIDMuOSAxLjYgMSAzLjYgLjcgNC4zLS43IC43LTEuMy0uMy0yLjktMi4zLTMuOS0yLS42LTMuNi0uMy00LjMgLjd6bTMyLjQgMzUuNmMtMS42IDEuMy0xIDQuMyAxLjMgNi4yIDIuMyAyLjMgNS4yIDIuNiA2LjUgMSAxLjMtMS4zIC43LTQuMy0xLjMtNi4yLTIuMi0yLjMtNS4yLTIuNi02LjUtMXptLTExLjQtMTQuN2MtMS42IDEtMS42IDMuNiAwIDUuOXM0LjMgMy4zIDUuNiAyLjNjMS42LTEuMyAxLjYtMy45IDAtNi4yLTEuNC0yLjMtNC0zLjMtNS42LTJ6Il0KICAgIH07CiAgICBmYUNvZGllcGllID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNvZGllcGllIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyODQiLCAiTTQ0Mi41IDIwMi45YzMwLjcgMCAzMy41IDUzLjEtLjMgNTMuMWwtMTAuOCAwIDAgNDQuMy0yNi42IDAgMC05Ny40IDM3LjcgMHpNNDkyIDM1Mi42QzQ0OS45IDQ0NC41IDM3MC40IDUwNCAyNjggNTA0IDEzMSA1MDQgMjAgMzkzIDIwIDI1NlMxMzEgOCAyNjggOGM5Ny40IDAgMTcyLjggNTMuNyAyMTguMiAxMzguNEwzMDAuMiAyNTUuMiA0OTIgMzUyLjZ6bS0zOC41IDEyLjVsLTYwLjMtMzAuN2MtMjcuMSA0NC4zLTcwLjQgNzEuNC0xMjIuNCA3MS40LTgyLjUgMC0xNDkuMi02Ni43LTE0OS4yLTE0OC45IDAtODIuNSA2Ni43LTE0OS4yIDE0OS4yLTE0OS4yIDQ4LjQgMCA4OC45IDIzLjUgMTE2LjkgNjMuNGw1OS41LTM0LjZDNDA2LjUgNzMuOSAzNDIuNSAzNi41IDI2OCAzNi41IDE0Ni44IDM2LjUgNDguNSAxMzQuOCA0OC41IDI1NlMxNDYuOCA0NzUuNSAyNjggNDc1LjVjNzguNiAwIDE0Ni41LTQyLjEgMTg1LjUtMTEwLjR6Il0KICAgIH07CiAgICBmYVBpZWRQaXBlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaWVkLXBpcGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyYWUiLCAiTTQ0MC4yIDIzLjJjLTI2LjcgNi44LTY4LjEgMjguNS0xMTQuNiA2Ny41LTMwLjktMTcuNS02NS44LTI2LjctMTAxLjQtMjYuNy0xMTQuOSAwLTIwOCA5My4xLTIwOCAyMDhzOTMuMSAyMDggMjA4IDIwOCAyMDgtOTMuMSAyMDgtMjA4Yy4xLTU0LjEtMjEtMTA2LjEtNTguNy0xNDQuOC02LjYgOC41LTEyLjMgMTcuNy0xNyAyNy40IDI4LjkgMzIuMyA0NC44IDc0LjEgNDQuOSAxMTcuNCAwIDk3LjctNzkuNCAxNzcuMS0xNzcuMSAxNzcuMS0zMC44IDAtNjEtOC4xLTg3LjYtMjMuNCA4Mi45LTEwNy4zIDE1MC44LTM3LjggMTg0LjMtMjI2LjYgNS44LTMyLjYgMjgtOTQuMyAxMjYuMi0xNjAuMiA4LjEtNS40IDIuNC0xOC4xLTctMTUuN3pNMTA5LjMgNDA2LjRDODkuOCAzODkuOCA3NC4yIDM2OS4yIDYzLjUgMzQ2cy0xNi4zLTQ4LjUtMTYuMy03NGMwLTk3LjcgNzkuNC0xNzcuMSAxNzcuMS0xNzcuMSAyNi42IDAgNTIuOCA2LjEgNzYuNiAxNy44LTY2IDYyLjEtMTI2LjkgMTUyLjktMTkxLjYgMjkzLjh6Il0KICAgIH07CiAgICBmYVJhc3BiZXJyeVBpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJhc3BiZXJyeS1waSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmN2JiIiwgIk0zOTIuNSAyMzIuNWwtMy43LTYuNWMuMS00Ni40LTIxLjQtNjUuMy00Ni41LTc5LjcgNy42LTIgMTUuNC0zLjYgMTcuNi0xMy4yIDEzLjEtMy4zIDE1LjgtOS40IDE3LjEtMTUuOCAzLjQtMi4zIDE0LjgtOC43IDEzLjYtMTkuNyA2LjQtNC40IDEwLTEwLjEgOC4xLTE4LjEgNi45LTcuNSA4LjctMTMuNyA1LjgtMTkuNCA4LjMtMTAuMyA0LjYtMTUuNiAxLjEtMjAuOSA2LjItMTEuMiAuNy0yMy4yLTE2LjYtMjEuMi02LjktMTAuMS0yMS45LTcuOC0yNC4yLTcuOC0yLjYtMy4yLTYtNi0xNi41LTQuNy02LjgtNi4xLTE0LjQtNS0yMi4zLTIuMS05LjMtNy4zLTE1LjUtMS40LTIyLjYgLjgtMTEuMy0zLjYtMTMuOSAxLjMtMTkuNCAzLjQtMTIuMy0yLjYtMTYuMSAzLTIyIDguOWwtNi45LS4xYy0xOC42IDEwLjgtMjcuOCAzMi44LTMxLjEgNDQuMS0zLjMtMTEuMy0xMi41LTMzLjMtMzEuMS00NC4xbC02LjkgLjFjLTUuOS01LjktOS43LTExLjUtMjItOC45LTUuNi0yLTguMS03LTE5LjQtMy40LTQuNi0xLjQtOC45LTQuNC0xMy45LTQuMy0yLjYgLjEtNS41IDEtOC43IDMuNS03LjktMy0xNS41LTQtMjIuMyAyLjEtMTAuNS0xLjMtMTQgMS40LTE2LjUgNC43LTIuMyAwLTE3LjMtMi4zLTI0LjIgNy44LTE3LjMtMi0yMi43IDEwLTE2LjUgMjEuMi0zLjUgNS40LTcuMiAxMC43IDEuMSAyMC45LTIuOSA1LjctMS4xIDExLjkgNS44IDE5LjQtMS44IDggMS44IDEzLjcgOC4xIDE4LjEtMS4yIDExIDEwLjIgMTcuNCAxMy42IDE5LjcgMS4zIDYuNCA0IDEyLjQgMTcuMSAxNS44IDIuMiA5LjUgMTAgMTEuMiAxNy42IDEzLjItMjUuMSAxNC40LTQ2LjYgMzMuMy00Ni41IDc5LjdsLTMuNyA2LjVjLTI4LjggMTcuMi01NC43IDcyLjctMTQuMiAxMTcuNyAyLjYgMTQuMSA3LjEgMjQuMiAxMSAzNS40IDUuOSA0NS4yIDQ0LjUgNjYuMyA1NC42IDY4LjggMTQuOSAxMS4yIDMwLjggMjEuOCA1Mi4yIDI5LjIgMjAuMyAyMC42IDQyLjMgMjguNCA2NC4zIDI4LjRsMSAwYzIyLjEgMCA0NC03LjggNjQuMi0yOC40IDIxLjUtNy40IDM3LjMtMTggNTIuMi0yOS4yIDEwLjItMi41IDQ4LjctMjMuNiA1NC42LTY4LjggMy45LTExLjIgOC40LTIxLjMgMTEtMzUuNCA0MC42LTQ1LjEgMTQuNy0xMDAuNS0xNC0xMTcuN3ptLTIyLjItOGMtMS41IDE4LjctOTguOS02NS4xLTgyLjEtNjcuOSA0NS43LTcuNSA4My42IDE5LjIgODIuMSA2Ny45em0tNDMgOTMuMWMtMjQuNSAxNS44LTU5LjggNS42LTc4LjgtMjIuOHMtMTQuNi02NC4yIDkuOS04MCA1OS44LTUuNiA3OC44IDIyLjggMTQuNiA2NC4yLTkuOSA4MHpNMjU5LjQgMjkuM2MuOCA0LjIgMS44IDYuOCAyLjkgNy42IDUuNC01LjggOS44LTExLjcgMTYuOC0xNy4zIDAgMy4zLTEuNyA2LjggMi41IDkuNCAzLjctNSA4LjgtOS41IDE1LjUtMTMuMy0zLjIgNS42LS42IDcuMyAxLjIgOS42IDUuMS00LjQgMTAtOC44IDE5LjQtMTIuMy0yLjYgMy4xLTYuMiA2LjItMi40IDkuOCA1LjMtMy4zIDEwLjYtNi42IDIzLjEtOC45LTIuOCAzLjEtOC43IDYuMy01LjEgOS40IDYuNi0yLjUgMTQtNC40IDIyLjEtNS40LTMuOSAzLjItNy4xIDYuMy0zLjkgOC44IDcuMS0yLjIgMTYuOS01LjEgMjYuNC0yLjZsLTYgNi4xYy0uNyAuOCAxNC4xIC42IDIzLjkgLjgtMy42IDUtNy4yIDkuNy05LjMgMTguMiAxIDEgNS44IC40IDEwLjQgMC00LjcgOS45LTEyLjggMTIuMy0xNC43IDE2LjYgMi45IDIuMiA2LjggMS42IDExLjIgLjEtMy40IDYuOS0xMC40IDExLjctMTYgMTcuMyAxLjQgMSAzLjkgMS42IDkuNyAuOS01LjIgNS41LTExLjQgMTAuNS0xOC44IDE1IDEuMyAxLjUgNS44IDEuNSAxMCAxLjYtNi43IDYuNS0xNS4zIDkuOS0yMy40IDE0LjIgNCAyLjcgNi45IDIuMSAxMCAyLjEtNS43IDQuNy0xNS40IDcuMS0yNC40IDEwIDEuNyAyLjcgMy40IDMuNCA3LjEgNC4xLTkuNSA1LjMtMjMuMiAyLjktMjcgNS42IC45IDIuNyAzLjYgNC40IDYuNyA1LjgtMTUuNCAuOS01Ny4zLS42LTY1LjQtMzIuMyAxNS43LTE3LjMgNDQuNC0zNy41IDkzLjctNjIuNi0zOC40IDEyLjgtNzMgMzAtMTAyIDUzLjUtMzQuMy0xNS45LTEwLjgtNTUuOSA1LjgtNzEuOHpNMjI1IDE0My45YzI0LjItLjMgNTQuMSAxNy44IDU0IDM0LjctLjEgMTUtMjEgMjcuMS01My44IDI2LjktMzIuMS0uNC01My43LTE1LjItNTMuNi0yOS44IDAtMTEuOSAyNi4yLTMyLjUgNTMuNC0zMS44ek0xMDIgMTMxLjFjMy43LS43IDUuNC0xLjUgNy4xLTQuMS05LTIuOC0xOC43LTUuMy0yNC40LTEwIDMuMSAwIDYgLjcgMTAtMi4xLTguMS00LjMtMTYuNy03LjctMjMuNC0xNC4yIDQuMi0uMSA4LjcgMCAxMC0xLjYtNy40LTQuNS0xMy42LTkuNS0xOC44LTE1IDUuOCAuNyA4LjMgLjEgOS43LS45LTUuNi01LjYtMTIuNy0xMC40LTE2LTE3LjMgNC4zIDEuNSA4LjMgMiAxMS4yLS4xLTEuOS00LjItMTAtNi43LTE0LjctMTYuNiA0LjYgLjQgOS40IDEgMTAuNCAwLTIuMS04LjUtNS44LTEzLjMtOS4zLTE4LjIgOS44LS4xIDI0LjYgMCAyMy45LS44bC02LTYuMWM5LjUtMi41IDE5LjMgLjQgMjYuNCAyLjYgMy4yLTIuNS0uMS01LjYtMy45LTguOCA4LjEgMS4xIDE1LjQgMi45IDIyLjEgNS40IDMuNS0zLjEtMi4zLTYuMy01LjEtOS40IDEyLjUgMi4zIDE3LjggNS42IDIzLjEgOC45IDMuOC0zLjYgLjItNi43LTIuNC05LjggOS40IDMuNCAxNC4zIDcuOSAxOS40IDEyLjMgMS43LTIuMyA0LjQtNCAxLjItOS42IDYuNyAzLjggMTEuOCA4LjMgMTUuNSAxMy4zIDQuMS0yLjYgMi41LTYuMiAyLjUtOS40IDcgNS42IDExLjQgMTEuNSAxNi44IDE3LjMgMS4xLS44IDItMy40IDIuOS03LjYgMTYuNiAxNS45IDQwLjEgNTUuOSA2IDcxLjgtMjktMjMuNS02My42LTQwLjctMTAyLTUzLjUgNDkuMyAyNSA3OCA0NS4zIDkzLjcgNjIuNi04IDMxLjgtNTAgMzMuMi02NS40IDMyLjMgMy4xLTEuNCA1LjgtMy4yIDYuNy01LjgtNC0yLjgtMTcuNi0uNC0yNy4yLTUuNnptNjAuMSAyNC4xYzE2LjggMi44LTgwLjYgODYuNS04Mi4xIDY3LjktMS41LTQ4LjcgMzYuNS03NS41IDgyLjEtNjcuOXpNNTguNyAzNDJjLTIzLjctMTguOC0zMS4zLTczLjcgMTIuNi05OC4zIDI2LjUtNyA5IDEwNy44LTEyLjYgOTguM3ptOTEgOTguMmMtMTMuMyA3LjktNDUuOCA0LjctNjguOC0yNy45LTE1LjUtMjcuNC0xMy41LTU1LjItMi42LTYzLjQgMTYuMy05LjggNDEuNSAzLjQgNjAuOSAyNS42IDE2LjkgMjAgMjQuNiA1NS4zIDEwLjUgNjUuN3pNMTIzLjMgMzIwLjVjLTI0LjUtMTUuOC0yOC45LTUxLjYtOS45LTgwczU0LjMtMzguNiA3OC44LTIyLjggMjguOSA1MS42IDkuOSA4MGMtMTkuMSAyOC40LTU0LjQgMzguNi03OC44IDIyLjh6TTIyNS41IDQ5NmMtMjkuNCAxLjItNTguMi0yMy43LTU3LjgtMzIuMy0uNC0xMi43IDM1LjgtMjIuNiA1OS4zLTIyIDIzLjctMSA1NS42IDcuNSA1NS43IDE4LjkgLjUgMTEtMjguOCAzNS45LTU3LjIgMzUuNHptNTguOS0xMjQuOWMuMiAyOS43LTI2LjIgNTMuOC01OC44IDU0cy01OS4yLTIzLjgtNTkuNC01My40bDAtLjZjLS4yLTI5LjcgMjYuMi01My44IDU4LjgtNTRzNTkuMiAyMy44IDU5LjQgNTMuNGwwIC42em04Mi4yIDQyLjdjLTI1LjMgMzQuNi01OS42IDM1LjktNzIuMyAyNi4zLTEzLjMtMTIuNC0zLjItNTAuOSAxNS4xLTcyIDIwLjktMjMuMyA0My4zLTM4LjUgNTguOS0yNi42IDEwLjUgMTAuMyAxNi43IDQ5LjEtMS43IDcyLjN6bTIyLjktNzMuMmMtMjEuNSA5LjQtMzktMTA1LjMtMTIuNi05OC4zIDQzLjkgMjQuNyAzNi4zIDc5LjYgMTIuNiA5OC4zeiJdCiAgICB9OwogICAgZmFDc3MzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNzczMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjEzYyIsICJNNDgwIDMybC02NCAzNjgtMjIzLjMgODAtMTkyLjctODAgMTkuNi05NC44IDgyIDAtOCA0MC42IDExNi40IDQ0LjQgMTM0LjEtNDQuNCAxOC44LTk3LjEtMzMzLjQgMCAxNi04MiAzMzMuNyAwIDEwLjUtNTIuNy0zMzMuNCAwIDE2LjMtODIgNDA3LjQgMHoiXQogICAgfTsKICAgIGZhSHVic3BvdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJodWJzcG90IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYjIiLCAiTTIzNS44IDIxMS42Yy0yNS4xIDIzLjctNDAuOCA1Ny4zLTQwLjggOTQuNiAwIDI5LjMgOS43IDU2LjMgMjYgNzhMMTcxLjUgNDM0Yy00LjQtMS42LTkuMS0yLjUtMTQtMi41LTEwLjggMC0yMC45IDQuMi0yOC41IDExLjhzLTExLjggMTcuOC0xMS44IDI4LjYgNC4yIDIwLjkgMTEuOCAyOC41IDE3LjggMTEuNiAyOC41IDExLjZjMTAuOCAwIDIwLjktMy45IDI4LjYtMTEuNiA3LjYtNy42IDExLjgtMTcuOCAxMS44LTI4LjUgMC00LjItLjYtOC4yLTEuOS0xMi4xbDUwLTUwLjJjMjIgMTYuOSA0OS40IDI2LjkgNzkuMyAyNi45IDcxLjkgMCAxMzAtNTguMyAxMzAtMTMwLjIgMC02NS4yLTQ3LjctMTE5LjItMTEwLjItMTI4LjdsMC02MS42YzE3LjUtNy40IDI4LjItMjMuOCAyOC4yLTQyLjkgMC0yNi4xLTIwLjktNDcuOS00Ny00Ny45UzI3OS42IDQ3IDI3OS42IDczLjFjMCAxOS4xIDEwLjcgMzUuNSAyOC4yIDQyLjlsMCA2MS4yYy0xNS4yIDIuMS0yOS42IDYuNy00Mi43IDEzLjYtMjcuNi0yMC45LTExNy41LTg1LjctMTY4LjktMTI0LjggMS4yLTQuNCAyLTkgMi0xMy44IDAtMjguOC0yMy41LTUyLjItNTIuNC01Mi4yLTI4LjggMC01Mi4yIDIzLjQtNTIuMiA1Mi4yIDAgMjguOSAyMy40IDUyLjMgNTIuMiA1Mi4zIDkuOCAwIDE4LjktMi45IDI2LjgtNy42TDIzNS44IDIxMS42em04OS41IDI1LjZhNjkgNjkgMCAxIDEgMCAxMzggNjkgNjkgMCAxIDEgMC0xMzh6Il0KICAgIH07CiAgICBmYUNtcGxpZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjbXBsaWQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTM2MCIsICJNMjI2LjEgMzg4LjJjMC0uNy0uMi0xLjUtLjYtMi4xcy0xLTEuMS0xLjctMS40Yy0uNS0uMi0xLjEtLjQtMS42LS40bC0xNDkuNiAwYy0zLjEgMC02LjItLjgtOC45LTIuMnMtNS4xLTMuNS02LjktNi4xLTIuOS01LjUtMy4zLTguNiAwLTYuMiAxLjEtOS4xTDgxLjYgMjU1LjdjMi03LjIgNi4yLTEzLjUgMTItMTguMnMxMi45LTcuNCAyMC40LTcuOGwxNDguNiAwYzEuNS0uMSAyLjktLjYgNC0xLjZzMi0yLjIgMi40LTMuNmwxMC44LTQxLjFjLjQtMSAuMy0yLS4xLTIuOXMtMS4yLTEuNi0yLjEtMmMtLjQtLjItLjktLjMtMS40LS4zLS4xIDAtLjEgMC0uMiAwbC0xNDguNSAwYy0yMi4yIDEuMi00My40IDkuMi02MC44IDIzcy0zMCAzMi43LTM2LjIgNTQuMUwzLjUgMzU4LjhjLTMuMiA4LjctNC4yIDE4LTMgMjcuMXM0LjYgMTcuOSA5LjkgMjUuNSAxMi4zIDEzLjggMjAuNSAxOCAxNy4zIDYuNSAyNi41IDYuNmMxIDAgMS45IDAgMi45LS4xbDE0OC42IDBjMS41LS4xIDIuOS0uNyA0LTEuNnMyLTIuMiAyLjQtMy42bDEwLjctNDEuMWMuMi0uNSAuMy0uOSAuMy0xLjR6bTgwLjUtMzA3Yy4yLS40IC4zLS45IC4zLTEuNCAwLS41LS4xLTEtLjMtMS41cy0uNS0uOS0uOC0xLjItLjgtLjYtMS4yLS44LTEtLjMtMS41LS4zbC00MS4yIDBjLTEuNSAuMS0yLjkgLjYtNCAxLjZzLTIgMi4yLTIuNCAzLjZsLTIxLjMgODAuOSA1MS4xIDAgMjEuNC04MC45em0tMTI2LjMgMjg3bDUxLjEgMCAzMi0xMjIuNi01MS4xIDAtMzIgMTIyLjZ6TTUxMS45IDc5LjdjMC0xLS41LTEuOS0xLjItMi42cy0xLjctMS4xLTIuNi0xLjFjLS4xIDAtLjEgMC0uMiAwbC00MSAwYy0xLjUgLjEtMi45IC42LTQuMSAxLjVzLTIgMi4yLTIuNSAzLjZMMzY4LjkgNDMwLjZjLS4yIC40LS4zIC45LS4zIDEuMyAwIDEgLjQgMiAxLjEgMi43czEuNyAxLjEgMi43IDEuMWw0MS4yIDBjMS41LS4xIDIuOS0uNiA0LTEuNnMyLTIuMiAyLjQtMy42TDUxMS41IDgxLjJjLjItLjUgLjMtMSAuMy0xLjV6TTMyNC42IDM4NC41bC00MSAwYy0xLjUgLjEtMi45IC43LTQgMS42cy0yIDIuMi0yLjQgMy42bC0xMC43IDQxLjFjLS4yIC40LS4zIC45LS4zIDEuNCAwIC41IC4xIDEgLjMgMS41cy41IC45IC44IDEuMiAuOCAuNiAxLjIgLjggMSAuMyAxLjUgLjNjLjEgMCAuMiAwIC4zIDBsNDAuOSAwYzEuNS0uMSAyLjktLjYgNC0xLjZzMi0yLjIgMi40LTMuNmwxMC44LTQxLjFjLjItLjYgLjMtMS4yIC4zLTEuOHMtLjMtMS4yLS42LTEuNy0uOC0uOS0xLjMtMS4yLTEuMi0uNC0xLjgtLjRjLS4xIDAtLjIgMC0uMyAwbDAgMHpNNjM2IDc2LjFsLTQxIDBjLTEuNSAuMS0yLjkgLjYtNCAxLjVzLTIgMi4yLTIuNCAzLjZMNDk3LjEgNDMwLjZjLS4yIC40LS4yIC45LS4yIDEuMyAwIDEgLjQgMiAxLjEgMi43czEuNyAxLjEgMi43IDEuMWw0MS4xIDBjMS41LS4xIDIuOS0uNiA0LTEuNnMyLTIuMiAyLjQtMy42TDYzOS43IDgxLjJjLjItLjUgLjMtMSAuMy0xLjUtLjEtMS0uNS0xLjktMS4yLTIuNXMtMS42LTEtMi42LTFjLS4xIDAtLjEgMC0uMiAwbDAtLjF6TTM3MS42IDIyNS4ybDEwLjgtNDEuMWMuMi0uNCAuMi0uOSAuMi0xLjQgMC0xLS40LTItMS4xLTIuN3MtMS43LTEuMS0yLjctMS4xbC00MS4zIDBjLTEuNSAuMS0yLjkgLjctNCAxLjZzLTIgMi4yLTIuNCAzLjZsLTEwLjggNDEuMWMtLjIgLjUtLjMgMS0uMyAxLjVsMCAuMmMuMSAxIC41IDEuOCAxLjIgMi41czEuNiAxIDIuNiAxYy4xIDAgLjIgMCAuMyAwbDQxLjEgMGMxLjUtLjEgMi45LS42IDQtMS42czItMi4yIDIuNC0zLjZ6Il0KICAgIH07CiAgICBmYUR5YWxvZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkeWFsb2ciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM5OSIsICJNMTYgMzJsMCAxMTkuMiA2NCAwIDAtNTUuMiAxMDcuMiAwQzMwMC42IDk2IDM2OCAxNzYuMiAzNjggMjU1LjkgMzY4IDMzMiAzMDkuNCA0MTYgMTg3LjIgNDE2bC0xNzEuMiAwIDAgNjQgMTcxLjIgMEMzNDcuOSA0ODAgNDMyIDM2Ny4zIDQzMiAyNTUuOSA0MzIgMTk3LjIgNDA5LjkgMTQyLjUgMzY5LjcgMTAxLjYgMzI0LjkgNTYgMjYxLjcgMzIgMTg3LjIgMzJMMTYgMzJ6Il0KICAgIH07CiAgICBmYUVsZW1lbnRvciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlbGVtZW50b3IiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQzMCIsICJNLjUgMjU2YzAgMTQxIDExMy42IDI1NSAyNTQuNiAyNTUgMTQyIDAgMjU2LTExNCAyNTYtMjU1IDAtMTQwLTExNC0yNTMuOS0yNTYtMjUzLjktMTQxIDAtMjU0LjYgMTEzLjktMjU0LjYgMjUzLjl6TTE5Mi4xIDE1MGwwIDIxMy00MyAwIDAtMjEzIDQzIDB6bTQyIDBsMTI4IDAgMCA0My0xMjggMCAwLTQzem0xMjggODVsMCA0My0xMjggMCAwLTQzIDEyOCAwem0tMTI4IDg1bDEyOCAwIDAgNDMtMTI4IDAgMC00M3oiXQogICAgfTsKICAgIGZhRmlyc3RPcmRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmaXJzdC1vcmRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmIwIiwgIk0xMy4zIDIyOS4yYy4xLS4xIC4yLS4zIC4zLS40IDAgLjEgMCAuMy0uMSAuNGwtLjIgMHpNMjI0LjQgOTYuNmMtNy4xIDAtMTQuNiAuNi0yMS40IDEuN2wzLjcgNjcuNC0yMi02NGMtMTQuMyAzLjctMjcuNyA5LjQtNDAgMTYuNmwyOS40IDYxLjQtNDUuMS01MC45Yy0xMS40IDguOS0yMS43IDE5LjEtMzAuNiAzMC45bDUwLjYgNDUuNC02MS4xLTI5LjdjLTcuMSAxMi4zLTEyLjkgMjUuNy0xNi42IDQwbDY0LjMgMjIuNi02OC00Yy0uOSA3LjEtMS40IDE0LjYtMS40IDIycy42IDE0LjYgMS40IDIxLjdsNjcuNy00LTY0IDIyLjZjMy43IDE0LjMgOS40IDI3LjcgMTYuNiA0MC4zTDE0OSAzMDYuOSA5OC4xIDM1MmM4LjkgMTEuNyAxOS4xIDIyLjMgMzAuOSAzMC45bDQ0LjktNTAuOS0yOS41IDYxLjRjMTIuMyA3LjQgMjUuNyAxMy4xIDQwIDE2LjlsMjIuMy02NC42LTQgNjhjNy4xIDEuMSAxNC42IDEuNyAyMS43IDEuNyA3LjQgMCAxNC42LS42IDIxLjctMS43bC00LTY4LjYgMjIuNiA2NS4xYzE0LjMtNCAyNy43LTkuNCA0MC0xNi45bC0yOS40LTYxLjMgNDQuOSA1MC45YzExLjctOC45IDIyLTE5LjEgMzAuNi0zMC45bC01MC42LTQ1LjEgNjEuMSAyOS40YzcuMS0xMi4zIDEyLjktMjUuNyAxNi42LTQwLjNsLTY0LTIyLjMgNjcuNCA0YzEuMS03LjEgMS40LTE0LjMgMS40LTIxLjdzLS4zLTE0LjktMS40LTIybC02Ny43IDQgNjQtMjIuM2MtMy43LTE0LjMtOS4xLTI4LTE2LjYtNDAuM2wtNjAuOSAyOS43IDUwLjYtNDUuNGMtOC45LTExLjctMTkuMS0yMi0zMC42LTMwLjlsLTQ1LjEgNTAuOSAyOS40LTYxLjFjLTEyLjMtNy40LTI1LjctMTMuMS00MC0xNi45bC0yMi4zIDY0LjMgNC02Ny43Yy03LjEtMS4yLTE0LjMtMS43LTIxLjctMS43ek00NDMuOCAxMjhMNDQzLjggMzg0IDIyNC40IDUxMiA1IDM4NCA1IDEyOCAyMjQuNCAwIDQ0My44IDEyOHptLTE3LjEgMTAuM2wtMjAyLjMtMTE3LjQtMjAyLjMgMTE3LjQgMCAyMzUuMSAyMDIuMyAxMTcuNyAyMDIuMy0xMTcuNyAwLTIzNS4xek0yMjQuNCAzNy4xbDE4Ny43IDEwOS40IDAgMjE4LjktMTg3LjcgMTA5LjUtMTg3LjctMTA5LjUgMC0yMTguOCAxODcuNy0xMDkuNXptMCA1MC45Yy05Mi4zIDAtMTY2LjkgNzUuMS0xNjYuOSAxNjggMCA5Mi42IDc0LjYgMTY3LjcgMTY2LjkgMTY3LjcgOTIgMCAxNjYuOS03NS4xIDE2Ni45LTE2Ny43IDAtOTIuOS03NC45LTE2OC0xNjYuOS0xNjh6Il0KICAgIH07CiAgICBmYURyaWJiYmxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRyaWJiYmxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxN2QiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNNDIwIDEyMi40YzI5LjUgMzYgNDcuNCA4MiA0Ny44IDEzMi03LTEuNS03Ny0xNS43LTE0Ny41LTYuOC01LjgtMTQtMTEuMi0yNi40LTE4LjYtNDEuNiA3OC4zLTMyIDExMy44LTc3LjUgMTE4LjMtODMuNXpNMzk2LjQgOTcuOWMtMy44IDUuNC0zNS43IDQ4LjMtMTExIDc2LjUtMzQuNy02My44LTczLjItMTE2LjItNzktMTI0IDY3LjItMTYuMiAxMzggMS4zIDE5MC4xIDQ3LjV6TTE2NS45IDY0LjZjNS42IDcuNyA0My40IDYwLjEgNzguNSAxMjIuNS05OS4xIDI2LjMtMTg2LjQgMjUuOS0xOTUuOCAyNS44IDEzLjctNjUuNyA1OC0xMjAuNCAxMTcuMy0xNDguM3pNNDQuMiAyNTYuM2MwLTIuMiAwLTQuMyAuMS02LjUgOS4zIC4yIDExMS45IDEuNSAyMTcuNy0zMC4xIDYuMSAxMS45IDExLjkgMjMuOSAxNy4yIDM1LjktNzYuNiAyMS42LTE0Ni4yIDgzLjUtMTgwLjUgMTQyLjMtMzMuOC0zNy42LTU0LjUtODcuMi01NC41LTE0MS42ek0xMjYgNDIzLjRjMjIuMS00NS4yIDgyLjItMTAzLjYgMTY3LjYtMTMyLjggMjkuNyA3Ny4zIDQyIDE0Mi4xIDQ1LjIgMTYwLjYtNjguMSAyOS0xNTAgMjEuMS0yMTIuOC0yNy45em0yNDguNCA4LjVjLTIuMi0xMi45LTEzLjQtNzQuOS00MS4yLTE1MSA2Ni40LTEwLjYgMTI0LjcgNi44IDEzMS45IDkuMS05LjQgNTguOS00My4zIDEwOS44LTkwLjggMTQyeiJdCiAgICB9OwogICAgZmFMaW5rZWRpbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsaW5rZWRpbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDhjIiwgIk00MTYgMzJMMzEuOSAzMkMxNC4zIDMyIDAgNDYuNSAwIDY0LjNMMCA0NDcuN0MwIDQ2NS41IDE0LjMgNDgwIDMxLjkgNDgwTDQxNiA0ODBjMTcuNiAwIDMyLTE0LjUgMzItMzIuM2wwLTM4My40QzQ0OCA0Ni41IDQzMy42IDMyIDQxNiAzMnpNMTM1LjQgNDE2bC02Ni40IDAgMC0yMTMuOCA2Ni41IDAgMCAyMTMuOC0uMSAwek0xMDIuMiA5NmEzOC41IDM4LjUgMCAxIDEgMCA3NyAzOC41IDM4LjUgMCAxIDEgMC03N3pNMzg0LjMgNDE2bC02Ni40IDAgMC0xMDRjMC0yNC44LS41LTU2LjctMzQuNS01Ni43LTM0LjYgMC0zOS45IDI3LTM5LjkgNTQuOWwwIDEwNS44LTY2LjQgMCAwLTIxMy44IDYzLjcgMCAwIDI5LjIgLjkgMGM4LjktMTYuOCAzMC42LTM0LjUgNjIuOS0zNC41IDY3LjIgMCA3OS43IDQ0LjMgNzkuNyAxMDEuOWwwIDExNy4yeiJdCiAgICB9OwogICAgZmFDY1BheXBhbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYy1wYXlwYWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFmNCIsICJNMTg2LjMgMjU4LjJjMCAxMi4yLTkuNyAyMS41LTIyIDIxLjUtOS4yIDAtMTYtNS4yLTE2LTE1IDAtMTIuMiA5LjUtMjIgMjEuNy0yMiA5LjMgMCAxNi4zIDUuNyAxNi4zIDE1LjV6TTgwLjUgMjA5LjdsLTQuNyAwYy0xLjUgMC0zIDEtMy4yIDIuN2wtNC4zIDI2LjcgOC4yLS4zYzExIDAgMTkuNS0xLjUgMjEuNS0xNC4yIDIuMy0xMy40LTYuMi0xNC45LTE3LjUtMTQuOXptMjg0IDBsLTQuNSAwYy0xLjggMC0zIDEtMy4yIDIuN2wtNC4yIDI2LjcgOC0uM2MxMyAwIDIyLTMgMjItMTgtLjEtMTAuNi05LjYtMTEuMS0xOC4xLTExLjF6TTU3NiA4MGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsNDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTEyOC4zIDIxNS40YzAtMjEtMTYuMi0yOC0zNC43LTI4bC00MCAwYy0yLjUgMC01IDItNS4yIDQuN0wzMiAyOTQuMmMtLjMgMiAxLjIgNCAzLjIgNGwxOSAwYzIuNyAwIDUuMi0yLjkgNS41LTUuN2w0LjUtMjYuNmMxLTcuMiAxMy4yLTQuNyAxOC00LjcgMjguNiAwIDQ2LjEtMTcgNDYuMS00NS44em04NC4yIDguOGwtMTkgMGMtMy44IDAtNCA1LjUtNC4yIDguMi01LjgtOC41LTE0LjItMTAtMjMuNy0xMC0yNC41IDAtNDMuMiAyMS41LTQzLjIgNDUuMiAwIDE5LjUgMTIuMiAzMi4yIDMxLjcgMzIuMiA5IDAgMjAuMi00LjkgMjYuNS0xMS45LS41IDEuNS0xIDQuNy0xIDYuMiAwIDIuMyAxIDQgMy4yIDRsMTcuMiAwYzIuNyAwIDUtMi45IDUuNS01LjdsMTAuMi02NC4zYy4zLTEuOS0xLjItMy45LTMuMi0zLjl6TTI1MyAzMjIuMWw2My43LTkyLjZjLjUtLjUgLjUtMSAuNS0xLjcgMC0xLjctMS41LTMuNS0zLjItMy41bC0xOS4yIDBjLTEuNyAwLTMuNSAxLTQuNSAyLjVsLTI2LjUgMzktMTEtMzcuNWMtLjgtMi4yLTMtNC01LjUtNGwtMTguNyAwYy0xLjcgMC0zLjIgMS44LTMuMiAzLjUgMCAxLjIgMTkuNSA1Ni44IDIxLjIgNjIuMS0yLjcgMy44LTIwLjUgMjguNi0yMC41IDMxLjYgMCAxLjggMS41IDMuMiAzLjIgMy4ybDE5LjIgMGMxLjgtLjEgMy41LTEuMSA0LjUtMi42ek00MTIuMyAyMTUuNGMwLTIxLTE2LjItMjgtMzQuNy0yOGwtMzkuNyAwYy0yLjcgMC01LjIgMi01LjUgNC43bC0xNi4yIDEwMmMtLjIgMiAxLjMgNCAzLjIgNGwyMC41IDBjMiAwIDMuNS0xLjUgNC0zLjJsNC41LTI5YzEtNy4yIDEzLjItNC43IDE4LTQuNyAyOC40IDAgNDUuOS0xNyA0NS45LTQ1Ljh6bTg0LjIgOC44bC0xOSAwYy0zLjggMC00IDUuNS00LjMgOC4yLTUuNS04LjUtMTQtMTAtMjMuNy0xMC0yNC41IDAtNDMuMiAyMS41LTQzLjIgNDUuMiAwIDE5LjUgMTIuMiAzMi4yIDMxLjcgMzIuMiA5LjMgMCAyMC41LTQuOSAyNi41LTExLjktLjMgMS41LTEgNC43LTEgNi4yIDAgMi4zIDEgNCAzLjIgNGwxNy4zIDBjMi43IDAgNS0yLjkgNS41LTUuN2wxMC4yLTY0LjNjLjMtMS45LTEuMi0zLjktMy4yLTMuOXpNNTQ0IDE5MC45YzAtMi0xLjUtMy41LTMuMi0zLjVsLTE4LjUgMGMtMS41IDAtMyAxLjItMy4yIDIuN2wtMTYuMiAxMDQtLjMgLjVjMCAxLjggMS41IDMuNSAzLjUgMy41bDE2LjUgMGMyLjUgMCA1LTIuOSA1LjItNS43bDE2LjItMTAxLjIgMC0uM3ptLTkwIDUxLjhjLTEyLjIgMC0yMS43IDkuNy0yMS43IDIyIDAgOS43IDcgMTUgMTYuMiAxNSAxMiAwIDIxLjctOS4yIDIxLjctMjEuNSAuMS05LjgtNi45LTE1LjUtMTYuMi0xNS41eiJdCiAgICB9OwogICAgZmFEaGwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGhsIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY3OTAiLCAiTTIzOCAzMDEuMmw1OC43IDAgMjIuMy0zMC4yLTU4LjcgMC0yMi4zIDMwLjJ6TTAgMjgyLjlsMCA2LjQgODEuOCAwIDQuNy02LjQtODYuNSAwek0xNzIuOSAyNzFjLTguNyAwLTYtMy42LTQuNi01LjUgMi44LTMuOCA3LjYtMTAuNCAxMC40LTE0LjFzMi44LTUuOS0yLjgtNS45bC01MSAwLTQxLjEgNTUuOCAxMDAuMSAwYzMzLjEgMCA1MS41LTIyLjUgNTcuMi0zMC4zbC02OC4yIDB6bTMxNy41LTYuOWwzOS4zLTUzLjQtNjIuMiAwLTM5LjMgNTMuNCA2Mi4yIDB6TTk1LjMgMjcxbC05NS4zIDAgMCA2LjQgOTAuNiAwIDQuNy02LjR6bTExMS0yNi42Yy0yLjggMy44LTcuNSAxMC40LTEwLjMgMTQuMi0xLjQgMi00LjEgNS41IDQuNiA1LjVsNDUuNiAwczcuMy0xMCAxMy41LTE4LjRjOC40LTExLjQgLjctMzUtMjkuMi0zNWwtMTE3LjkgMC0yMC40IDI3LjggMTExLjQgMGM1LjYgMCA1LjUgMi4yIDIuNyA1Ljl6TTAgMzAxLjJsNzMuMSAwIDQuNy02LjQtNzcuOCAwIDAgNi40em0zMjMgMGw1OC43IDAgMjIuMy0zMC4yLTU4LjcgMGMtLjEgMC0yMi4zIDMwLjItMjIuMyAzMC4yem0yMjIgLjFsOTUgMCAwLTYuNC05MC4zIDAtNC43IDYuNHpNNTY3LjMgMjcxbC00LjcgNi40IDc3LjQgMCAwLTYuNC03Mi43IDB6bS0xMy41IDE4LjNsODYuMiAwIDAtNi40LTgxLjUgMC00LjcgNi40ek0zODkuNiAyMTAuN2wtMjIuNSAzMC42LTI2LjIgMCAyMi41LTMwLjYtNTguNyAwLTM5LjMgNTMuNCAxNDMuNiAwIDM5LjMtNTMuNC01OC43IDB6TTQyMy4xIDI3MXMtNC4zIDUuOS02LjQgOC43Yy03LjQgMTAtLjkgMjEuNiAyMy4yIDIxLjZsOTQuMyAwIDIyLjMtMzAuMy0xMzMuNCAweiJdCiAgICB9OwogICAgZmFUZXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGV4IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU3ZmYiLCAiTTYyMC44IDk1LjRjLTMwLjggLjQtNDIuMSAxNi42LTQ3LjcgMjQuNWwtLjEgLjEtNTUuNyA4MC41IDgyLjggMTIxLjFjNy41IDEwLjYgMTEuMyAxMi41IDM1LjQgMTIuNWwwIDkuMWMtOS4xLS43LTI4LS43LTM3LjctLjctMTIuNCAwLTMwLjggMC00Mi45IC43bDAtOS4xYzEzLjItLjggMTYuNi03LjMgMTYuNi0xMC4yIDAtMS4xIDAtMi4zLTMtNi40bC02NS41LTk2LjMtNjAuMiA4Ny45Yy0xLjkgMi43LTMuOCA1LjQtMy44IDEwLjIgMCA2LjEgMy40IDEzLjYgMTUgMTQuN2wwIDkuMWMtOS40LS43LTI3LjEtLjctMzcuMi0uN2wtMi44IDAtMTEuNyA4Mi42LTE5NS45IDAgMC05LjFjMjYuNyAwIDMwLjkgMCAzMC45LTE2LjlsMC0yMDMuMmMwLTE2LjktNC4zLTE2LjktMzAuOS0xNi45bDAtMTAuMyAxOS44IDBjLTQuOC02MS4xLTEwLjgtNzEuNy02OC03MS44bC0yMC43IDBjLTYuOCAxLjUtNi44IDYuMS02LjggMTQuNGwwIDIwNWMwIDEzLjYgMS4xIDE3LjggMzIuNCAxNy44bDEwLjUgMCAwIDkuMS0uNCAwYy0xNy45LS4zLTM2LjctLjctNTQuOS0uN3MtMzYuOSAuMy01NC44IC43bC0uNiAwIDAtOS4xIDEwLjcgMGMzMS43IDAgMzIuOC00LjEgMzIuOC0xNy44bDAtMjA1YzAtOC43IDAtMTMuMi03LjItMTQuM2wtMjAuOCAwYy01OC40IDAtNjMuNyAxMC45LTY4LjYgNzMuM2wtNi44IDAgNi4zLTgzLjMgMjE3LjUgMCA2LjEgODEuOCAxNjQuMSAwIDkgODMuMy02LjggMGMtNS4zLTQ5LjgtMTIuMS03My03MC4zLTczbC01MS41IDBjLTE1IDAtMTUuOCAxLjktMTUuOCAxNC42bDAgOTMuMyAzNS41IDBjMzUuNSAwIDM4LjktMTIuOCAzOC45LTQ0bDYgMCAwIDk3LjktNiAwYzAtMzEuOC0zLjQtNDQuOC0zOC45LTQ0LjhsLTM1LjUgMCAwIDEwNS4yYzAgMTMgLjcgMTQuOCAxNS44IDE0LjhsNTIuMiAwYzYxLjEgMCA2OS45LTI1LjggNzcuNC03My42LTcuNyAwLTE2LjMgLjItMjIuMiAuN2wwLTkuMWM3LjIgMCAzMS43LS40IDQ3LjgtMjMuOGw2NS41LTk1LjctNzIuNy0xMDYuN2MtOC4zLTExLjctMTUuMS0xMi41LTM1LjgtMTIuNWwwLTkuMWM5LjEgLjcgMjcuOSAuNyAzNy43IC43IDEyLjQgMCAzMC44IDAgNDIuOS0uN2wwIDkuMWMtMTIuNSAuNC0xNi42IDYuOC0xNi42IDEwLjIgMCAxLjEgLjQgMi4zIDMgNi40bDU1LjcgODEuNiA0OS43LTcyLjFjMi43LTMuNyA0LjUtNi44IDQuNS0xMS4zIDAtNi4xLTMtMTMuNi0xNS0xNC44bDAtOS4xYzkuNCAuNyAyNC44IC43IDM3LjIgLjcgOSAwIDIzLjMgMCAzMi0uN2wwIDkuMXoiXQogICAgfTsKICAgIGZhU2hvcGlmeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzaG9waWZ5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwNTciLCAiTTM4OC41IDEwNC4xYy0uMi0xLjEtLjctMi4xLTEuNS0yLjhzLTEuOC0xLjItMi45LTEuMmMtMiAwLTM3LjItLjgtMzcuMi0uOHMtMjEuNi0yMC44LTI5LjYtMjguOGwwIDQzMi43IDEyNS43LTMxLjJzLTU0LTM2NS41LTU0LjQtMzY3Ljl6TTI4OC45IDcwLjVjLTEuOS02LjEtNC4zLTExLjktNy4yLTE3LjYtMTAuNC0yMC0yNi0zMC45LTQ0LjQtMzAuOS0xLjMgMC0yLjcgLjEtNCAuNC0uNC0uOC0xLjItMS4yLTEuNi0yLTgtOC44LTE4LjQtMTIuOC0zMC44LTEyLjQtMjQgLjgtNDggMTgtNjcuMiA0OC44LTEzLjYgMjEuNi0yNCA0OC44LTI2LjggNzAuMS0yNy42IDguNC00Ni44IDE0LjQtNDcuMiAxNC44LTE0IDQuNC0xNC40IDQuOC0xNiAxOC0xLjIgMTAtMzggMjkxLjgtMzggMjkxLjhsMzAyLjYgNTIuNSAwLTQzOC4zYy0xLjUgLjEtMi45IC4yLTQuNCAuNCAwIDAtNS42IDEuNi0xNC44IDQuNHpNMjMzLjYgODcuN2MtMTYgNC44LTMzLjYgMTAuNC01MC44IDE1LjYgNC44LTE4LjggMTQuNC0zNy42IDI1LjYtNTAgNC40LTQuNCAxMC40LTkuNiAxNy4yLTEyLjggNi44IDE0LjQgOC40IDM0IDggNDcuMnpNMjAwLjggMjQuNGM1LS4yIDEwIDEuMSAxNC40IDMuNi02LjQgMy4yLTEyLjggOC40LTE4LjggMTQuNC0xNS4yIDE2LjQtMjYuOCA0Mi0zMS42IDY2LjUtMTQuNCA0LjQtMjguOCA4LjgtNDIgMTIuOCA4LjgtMzguNCA0MS4yLTk2LjQgNzgtOTcuMnpNMTU0LjQgMjQ0LjZjMS42IDI1LjYgNjkuMiAzMS4yIDczLjIgOTEuNyAyLjggNDcuNi0yNS4yIDgwLjEtNjUuNiA4Mi41LTQ4LjggMy4yLTc1LjYtMjUuNi03NS42LTI1LjZsMTAuNC00NHMyNi44IDIwLjQgNDguNCAxOC44YzE0LS44IDE5LjItMTIuNCAxOC44LTIwLjQtMi0zMy42LTU3LjItMzEuNi02MC44LTg2LjktMy4yLTQ2LjQgMjcuMi05My4zIDk0LjUtOTcuNyAyNi0xLjYgMzkuMiA0LjggMzkuMiA0LjhsLTE1LjIgNTcuNnMtMTcuMi04LTM3LjYtNi40Yy0yOS42IDItMzAgMjAuOC0yOS42IDI1LjZ6TTI0OS42IDgyLjljMC0xMi0xLjYtMjkuMi03LjItNDMuNiAxOC40IDMuNiAyNy4yIDI0IDMxLjIgMzYuNC03LjIgMi0xNS4yIDQuNC0yNCA3LjJ6Il0KICAgIH07CiAgICBmYVNxdWFyZVJlZGRpdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcmVkZGl0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInJlZGRpdC1zcXVhcmUiXSwgImYxYTIiLCAiTTY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMnpNMzA1LjkgMTY2LjRjMjAuNiAwIDM3LjMtMTYuNyAzNy4zLTM3LjNzLTE2LjctMzcuMy0zNy4zLTM3LjNjLTE4IDAtMzMuMSAxMi44LTM2LjYgMjkuOC0zMC4yIDMuMi01My44IDI4LjgtNTMuOCA1OS45bDAgLjJjLTMyLjggMS40LTYyLjggMTAuNy04Ni42IDI1LjUtOC44LTYuOC0xOS45LTEwLjktMzItMTAuOS0yOC45IDAtNTIuMyAyMy40LTUyLjMgNTIuMyAwIDIxIDEyLjMgMzkgMzAuMSA0Ny40IDEuNyA2MC43IDY3LjkgMTA5LjYgMTQ5LjMgMTA5LjZzMTQ3LjYtNDguOSAxNDkuMy0xMDkuN2MxNy43LTguNCAyOS45LTI2LjQgMjkuOS00Ny4zIDAtMjguOS0yMy40LTUyLjMtNTIuMy01Mi4zLTEyIDAtMjMgNC0zMS45IDEwLjgtMjQtMTQuOS01NC4zLTI0LjItODcuNS0yNS40bDAtLjFjMC0yMi4yIDE2LjUtNDAuNyAzNy45LTQzLjcgMy45IDE2LjUgMTguNyAyOC43IDM2LjMgMjguN2wuMi0uMnpNMTU1IDI0OC4xYzE0LjYgMCAyNS44IDE1LjQgMjUgMzQuNHMtMTEuOCAyNS45LTI2LjUgMjUuOS0yNy41LTcuNy0yNi42LTI2LjcgMTMuNS0zMy41IDI4LjEtMzMuNWwwLS4xem0xNjYuNCAzMy41Yy45IDE5LTEyIDI2LjctMjYuNiAyNi43cy0yNS42LTYuOS0yNi41LTI1LjkgMTAuMy0zNC40IDI1LTM0LjQgMjcuMyAxNC42IDI4LjEgMzMuNWwwIC4xem0tNDIuMSA0OS42Yy05IDIxLjUtMzAuMyAzNi43LTU1LjEgMzYuN3MtNDYuMS0xNS4xLTU1LjEtMzYuN2MtMS4xLTIuNiAuNy01LjQgMy40LTUuNyAxNi4xLTEuNiAzMy41LTIuNSA1MS43LTIuNXMzNS42IC45IDUxLjcgMi41YzIuNyAuMyA0LjUgMy4xIDMuNCA1Ljd6Il0KICAgIH07CiAgICBmYVJlZGRpdFNxdWFyZSA9IGZhU3F1YXJlUmVkZGl0OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNOYyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLW5jIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZTgiLCAiTTI1NS42IDhDMzk1LjQgOCA1MDQgMTE1LjkgNTA0IDI1NiA1MDQgNDAzLjIgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuMSA1MDQgOCAzOTMuMiA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHpNNjMuOCAxODkuMWMtNy40IDIwLjQtMTEuMSA0Mi43LTExLjEgNjYuOSAwIDExMC45IDkyLjEgMjAyLjQgMjAzLjcgMjAyLjQgMTIyLjQgMCAxNzcuMi0xMDEuOCAxNzguNS0xMDQuMWwtOTMuNC00MS42Yy03LjcgMzcuMS00MS4yIDUzLTY4LjIgNTUuNGwwIDM4LjEtMjguOCAwIDAtMzguMmMtMjcuNS0uMy01Mi42LTEwLjItNzUuMy0yOS43bDM0LjEtMzQuNWMzMS43IDI5LjQgODYuNCAzMS44IDg2LjQtMi4yIDAtNi4yLTIuMi0xMS4yLTYuNi0xNS4xLTE0LjItNi0xLjgtLjEtMjE5LjMtOTcuNHpNMjU2LjQgNTIuM0MyMTggNTIuMyAxNDQgNjEgODUuOSAxNDUuM2w5NC44IDQyLjVjMTAtMzEuMyA0MC40LTQyLjkgNjMuOC00NC4zbDAtMzguMSAyOC44IDAgMCAzOC4xYzIyLjcgMS4yIDQzLjQgOC45IDYyIDIzTDMwMyAxOTkuN2MtNDIuNy0yOS45LTgzLjUtOC03MCAxMS4xIDUzLjQgMjQuMSA0My44IDE5LjggOTMgNDEuNmwxMjcuMSA1Ni43YzQuMS0xNy40IDYuMi0zNS4xIDYuMi01My4xIDAtNTctMTkuOC0xMDUtNTkuMy0xNDMuOS0zOS4zLTM5LjktODcuMi01OS44LTE0My42LTU5Ljh6Il0KICAgIH07CiAgICBmYUdhbGFjdGljUmVwdWJsaWMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2FsYWN0aWMtcmVwdWJsaWMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUwYyIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMSAwIDQ5NiAyNDggMjQ4IDAgMSAxIDAtNDk2em0wIDE2LjVhMjMxLjUgMjMxLjUgMCAxIDAgMCA0NjIuOSAyMzEuNSAyMzEuNSAwIDEgMCAwLTQ2Mi45em0yNy42IDIxLjhsMCAyNC42YzMwLjMgNC41IDU5IDE2LjMgODMuNiAzNC41bDE3LjQtMTcuNGMtMjguNy0yMi4xLTYzLjMtMzYuOS0xMDEtNDEuOHptLTU1LjQgLjFjLTM3LjYgNC45LTcyLjIgMTkuOC0xMDAuOSA0MS45bDE3LjMgMTcuNCAuMSAwYzI0LjEtMTcuOCA1Mi42LTMwLjEgODMuNS0zNC43bDAtMjQuNXptMTIuMiA1MC4ybDAgODIuOWMtMTAgMi0xOS40IDUuOS0yNy43IDExLjRsLTU4LjYtNTguNi0yMS45IDIxLjkgNTguNyA1OC43Yy01LjUgOC4yLTkuNCAxNy42LTExLjUgMjcuNmwtODIuOSAwIDAgMzEgODIuOSAwYzIgMTAgNiAxOS4zIDExLjUgMjcuNWwtNTguNyA1OC43IDIxLjkgMjEuOSA1OC42LTU4LjZjOC40IDUuNiAxNy44IDkuNSAyNy43IDExLjVsMCA4Mi45IDMxIDAgMC04Mi45YzEwLTIgMTkuNC02LjEgMjcuNi0xMS41bDU4LjcgNTguNyAyMS45LTIxLjktNTguNy01OC43YzUuNS04LjIgOS41LTE3LjUgMTEuNS0yNy41bDgyLjkgMCAwLTMxLTgyLjkgMGMtMi0xMC02LTE5LjQtMTEuNS0yNy42bDU4LjctNTguNy0yMS45LTIxLjktNTguNyA1OC43Yy04LjItNS41LTE3LjYtOS41LTI3LjYtMTEuNWwwLTgyLjktMzEgMHptMTgzLjIgMzAuN2wtMTcuNCAxNy40YzE4LjMgMjQuNiAzMC4yIDUzLjQgMzQuNyA4My43bDI0LjYgMGMtNS0zNy43LTE5LjgtNzIuMy00MS45LTEwMXptLTMzNS42IC4xYy0yMi4xIDI4LjctMzYuOSA2My4zLTQxLjggMTAwLjlsMjQuNiAwYzQuNi0zMSAxNi44LTU5LjQgMzQuNi04My41TDg4LjIgMTI3LjR6TTQ2LjMgMjgzLjdjNC45IDM3LjYgMTkuNyA3Mi4yIDQxLjggMTAwLjlsMTcuNC0xNy40Qzg3LjcgMzQzLjEgNzUuNiAzMTQuNiA3MSAyODMuN2wtMjQuNiAwIDAgMHptMzk0LjcgMGMtNC42IDMxLTE2LjggNTkuNS0zNC43IDgzLjZsMTcuNCAxNy40YzIyLjEtMjguNyAzNy02My4zIDQxLjktMTAxbC0yNC42IDB6TTE0NC43IDQwNi40bC0xNy40IDE3LjRjMjguNyAyMi4xIDYzLjMgMzcgMTAxIDQxLjlsMC0yNC42Yy0zMS00LjYtNTkuNS0xNi44LTgzLjYtMzQuNnptMjIyLjUgMGMtMjQuMSAxNy44LTUyLjYgMzAuMS04My42IDM0LjdsMCAyNC42YzM3LjctNC45IDcyLjItMTkuOCAxMDEtNDEuOGwtMTcuMy0xNy40LS4xIDB6Il0KICAgIH07CiAgICBmYUZhY2Vib29rID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZhY2Vib29rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjJlM10sICJmMDlhIiwgIk01MTIgMjU2QzUxMiAxMTQuNiAzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZDMCAzNzYgODIuNyA0NzYuOCAxOTQuMiA1MDQuNWwwLTE3MC4zLTUyLjggMCAwLTc4LjIgNTIuOCAwIDAtMzMuN2MwLTg3LjEgMzkuNC0xMjcuNSAxMjUtMTI3LjUgMTYuMiAwIDQ0LjIgMy4yIDU1LjcgNi40bDAgNzAuOGMtNi0uNi0xNi41LTEtMjkuNi0xLTQyIDAtNTguMiAxNS45LTU4LjIgNTcuMmwwIDI3LjggODMuNiAwLTE0LjQgNzguMi02OS4zIDAgMCAxNzUuOUM0MTMuOCA0OTQuOCA1MTIgMzg2LjkgNTEyIDI1NnoiXQogICAgfTsKICAgIGZhR2l0bGFiID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdpdGxhYiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjk2IiwgIk01MDQgMjA0LjZsLS43LTEuOC02OS43LTE4MS44Yy0xLjQtMy42LTMuOS02LjYtNy4yLTguNi0yLjQtMS42LTUuMS0yLjUtOC0yLjhzLTUuNyAuMS04LjQgMS4xLTUuMSAyLjctNy4xIDQuOGMtMS45IDIuMS0zLjMgNC43LTQuMSA3LjRsLTQ3IDE0NC0xOTAuNSAwLTQ3LjEtMTQ0Yy0uOC0yLjgtMi4yLTUuMy00LjEtNy40LTItMi4xLTQuNC0zLjctNy4xLTQuOC0yLjYtMS01LjUtMS40LTguNC0xLjFzLTUuNiAxLjItOCAyLjhjLTMuMiAyLTUuOCA1LjEtNy4yIDguNkw5LjggMjAyLjggOSAyMDQuNmMtMTAgMjYuMi0xMS4zIDU1LTMuNSA4MiA3LjcgMjYuOSAyNCA1MC43IDQ2LjQgNjcuNmwuMyAuMiAuNiAuNCAxMDYgNzkuNWMzOC41IDI5LjEgNjYuNyA1MC4zIDg0LjYgNjMuOSAzLjcgMS45IDguMyA0LjMgMTMgNC4zczkuMy0yLjQgMTMtNC4zYzE3LjktMTMuNSA0Ni4xLTM0LjkgODQuNi02My45bDEwNi43LTc5LjkgLjMtLjNjMjIuNC0xNi45IDM4LjctNDAuNiA0NS42LTY3LjUgOC42LTI3IDcuNC01NS44LTIuNi04MnoiXQogICAgfTsKICAgIGZhUXEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicXEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFkNiIsICJNNDM0LjEgNDIwLjRjLTExLjUgMS40LTQ0LjktNTIuNy00NC45LTUyLjcgMCAzMS4zLTE2LjEgNzIuMi01MSAxMDEuOCAxNi44IDUuMiA1NC44IDE5LjIgNDUuOCAzNC40LTcuMyAxMi4zLTEyNS41IDcuOS0xNTkuNiA0LTM0LjEgMy44LTE1Mi4zIDguMy0xNTkuNi00LTktMTUuMiAyOC45LTI5LjIgNDUuOC0zNC40LTM0LjktMjkuNS01MS4xLTcwLjQtNTEuMS0xMDEuOCAwIDAtMzMuMyA1NC4xLTQ0LjkgNTIuNy01LjQtLjYtMTIuNC0yOS42IDkuMy05OS43IDEwLjMtMzMgMjItNjAuNSA0MC4xLTEwNS44LTMuMS0xMTYuOSA0NS4yLTIxNSAxNjAuMy0yMTUgMTEzLjcgMCAxNjMuMiA5Ni4xIDE2MC4zIDIxNSAxOC4xIDQ1LjIgMjkuOSA3Mi45IDQwLjEgMTA1LjggMjEuOCA3MC4xIDE0LjcgOTkuMSA5LjMgOTkuN3oiXQogICAgfTsKICAgIGZhU3RyaXBlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0cmlwZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDI5IiwgIk0xNjUgMTQ0LjdsLTQzLjMgOS4yLS4yIDE0Mi40YzAgMjYuMyAxOS44IDQzLjMgNDYuMSA0My4zIDE0LjYgMCAyNS4zLTIuNyAzMS4yLTUuOWwwLTMzLjhjLTUuNyAyLjMtMzMuNyAxMC41LTMzLjctMTUuN2wwLTYzLjIgMzMuNyAwIDAtMzcuOC0zMy43IDAtLjEtMzguNXptODkuMSA1MS42bC0yLjctMTMuMS0zOC40IDAgMCAxNTMuMiA0NC4zIDAgMC0xMDMuMWMxMC41LTEzLjggMjguMi0xMS4xIDMzLjktOS4zbDAtNDAuOGMtNi0yLjEtMjYuNy02LTM3LjEgMTMuMXpNMzQ2LjQgMTI0bC00NC42IDkuNSAwIDM2LjIgNDQuNi05LjUgMC0zNi4yek00NC45IDIyOC4zYzAtNi45IDUuOC05LjYgMTUuMS05LjcgMTMuNSAwIDMwLjcgNC4xIDQ0LjIgMTEuNGwwLTQxLjhjLTE0LjctNS44LTI5LjQtOC4xLTQ0LjEtOC4xLTM2IDAtNjAgMTguOC02MCA1MC4yIDAgNDkuMiA2Ny41IDQxLjIgNjcuNSA2Mi40IDAgOC4yLTcuMSAxMC45LTE3IDEwLjktMTQuNyAwLTMzLjctNi4xLTQ4LjYtMTQuMmwwIDQwYzE2LjUgNy4xIDMzLjIgMTAuMSA0OC41IDEwLjEgMzYuOSAwIDYyLjMtMTUuOCA2Mi4zLTQ3LjggMC01Mi45LTY3LjktNDMuNC02Ny45LTYzLjR6TTY0MCAyNjEuNmMwLTQ1LjUtMjItODEuNC02NC4yLTgxLjRzLTY3LjkgMzUuOS02Ny45IDgxLjFjMCA1My41IDMwLjMgNzguMiA3My41IDc4LjIgMjEuMiAwIDM3LjEtNC44IDQ5LjItMTEuNWwwLTMzLjRjLTEyLjEgNi4xLTI2IDkuOC00My42IDkuOC0xNy4zIDAtMzIuNS02LjEtMzQuNS0yNi45bDg2LjkgMGMuMi0yLjMgLjYtMTEuNiAuNi0xNS45em0tODcuOS0xNi44YzAtMjAgMTIuMy0yOC40IDIzLjQtMjguNCAxMC45IDAgMjIuNSA4LjQgMjIuNSAyOC40bC00NS45IDB6TTQzOS4yIDE4MC4yYy0xNy40IDAtMjguNiA4LjItMzQuOCAxMy45bC0yLjMtMTEtMzkuMSAwIDAgMjA0LjggNDQuNC05LjQgLjEtNTAuMmM2LjQgNC43IDE1LjkgMTEuMiAzMS40IDExLjIgMzEuOCAwIDYwLjgtMjMuMiA2MC44LTc5LjYgLjEtNTEuNi0yOS4zLTc5LjctNjAuNS03OS43ek00MjguNiAzMDIuN2MtMTAuNCAwLTE2LjYtMy44LTIwLjktOC40bC0uMy02NmM0LjYtNS4xIDExLTguOCAyMS4yLTguOCAxNi4yIDAgMjcuNCAxOC4yIDI3LjQgNDEuNCAuMSAyMy45LTEwLjkgNDEuOC0yNy40IDQxLjh6TTMwMS45IDMzNi40bDQ0LjYgMCAwLTE1My4yLTQ0LjYgMCAwIDE1My4yeiJdCiAgICB9OwogICAgZmFEYWlseW1vdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkYWlseW1vdGlvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMDUyIiwgIk0yOTguOSAyNjdjLTcuNC00LjItMTUuOC02LjMtMjQuNC02LjItMTMuMiAwLTI0LjQgNC40LTMzLjQgMTMuM3MtMTMuNiAyMC0xMy42IDMzLjRjMCAxNC4xIDQuNCAyNS42IDEzLjMgMzQuNnMyMCAxMy40IDMzLjQgMTMuNGMxMy43IDAgMjUtNC42IDM0LjEtMTMuOFMzMjIgMzIxLjEgMzIyIDMwNy41YzAtOC4yLTIuMS0xNi4zLTYuMS0yMy41LTQtNy4xLTkuOC0xMy0xNy0xN3pNMCAzMmwwIDQ0OCA0NDggMCAwLTQ0OC00NDggMHpNMzc0LjcgNDA1LjNsLTUzLjEgMCAwLTIzLjktLjcgMGMtMTAuNSAxNy41LTI5LjEgMjYuMi01NS44IDI2LjItMTguNCAwLTM0LjctNC40LTQ4LjktMTMuMS0xNC4xLTguNi0yNS41LTIxLTMyLjktMzUuOC03LjctMTUuMS0xMS42LTMyLjEtMTEuNi01MC45IDAtMTguNCAzLjktMzUuMSAxMS44LTUwLjIgNy41LTE0LjcgMTguOS0yNy4xIDMyLjktMzUuOCAxNC4xLTguNyAzMC0xMy4xIDQ3LjctMTMuMSAxMC4yLS4xIDIwLjIgMS42IDI5LjcgNS4yIDguOSAzLjUgMTcuMiA5LjEgMjUgMTdsMC03Ny45IDU1LjgtMTIuMSAwIDI2NC40eiJdCiAgICB9OwogICAgZmFTdGVhbSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdGVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWI2IiwgIk01MDQgMjU2YzAgMTM3LTExMS4yIDI0OC0yNDguNCAyNDgtMTEzLjggMC0yMDkuNi03Ni4zLTIzOS0xODAuNGw5NS4yIDM5LjNjNi40IDMyLjEgMzQuOSA1Ni40IDY4LjkgNTYuNCAzOS4yIDAgNzEuOS0zMi40IDcwLjItNzMuNWw4NC41LTYwLjJjNTIuMSAxLjMgOTUuOC00MC45IDk1LjgtOTMuNSAwLTUxLjYtNDItOTMuNS05My43LTkzLjVzLTkzLjcgNDItOTMuNyA5My41bDAgMS4yLTU5LjIgODUuN2MtMTUuNS0uOS0zMC43IDMuNC00My41IDEyLjFMOCAyMzYuMUMxOC4yIDEwOC40IDEyNS4xIDggMjU1LjYgOCAzOTIuOCA4IDUwNCAxMTkgNTA0IDI1NnpNMTYzLjcgMzg0LjNsLTMwLjUtMTIuNmM1LjYgMTEuNiAxNS4zIDIwLjggMjcuMiAyNS44IDI2LjkgMTEuMiA1Ny44LTEuNiA2OS0yOC40IDUuNC0xMyA1LjUtMjcuMyAuMS00MC4zUzIxNCAzMDUuNiAyMDEgMzAwLjJjLTEyLjktNS40LTI2LjctNS4yLTM4LjktLjZsMzEuNSAxM2MxOS44IDguMiAyOS4yIDMwLjkgMjAuOSA1MC43LTguMyAxOS45LTMxIDI5LjItNTAuOCAyMXpNMzM3LjUgMTI5LjhhNjIuMyA2Mi4zIDAgMSAxIDAgMTI0LjYgNjIuMyA2Mi4zIDAgMSAxIDAtMTI0LjZ6bS4xIDEwOWE0Ni44IDQ2LjggMCAxIDAgMC05My42IDQ2LjggNDYuOCAwIDEgMCAwIDkzLjZ6Il0KICAgIH07CiAgICBmYVNuYXBjaGF0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNuYXBjaGF0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxMjQsICJzbmFwY2hhdC1naG9zdCJdLCAiZjJhYiIsICJNNDk3LjEgMzY2LjZjLTMuNC05LjItOS44LTE0LjEtMTcuMS0xOC4yLTEuNC0uOC0yLjYtMS41LTMuNy0xLjktMi4yLTEuMS00LjQtMi4yLTYuNi0zLjQtMjIuOC0xMi4xLTQwLjYtMjcuMy01My00NS40LTMuNS01LjEtNi42LTEwLjUtOS4xLTE2LjEtMS4xLTMtMS00LjctLjItNi4zIC44LTEuMiAxLjctMi4yIDIuOS0zIDMuOS0yLjYgOC01LjIgMTAuNy03IDQuOS0zLjIgOC44LTUuNyAxMS4yLTcuNCA5LjQtNi41IDE1LjktMTMuNSAyMC0yMS4zIDIuOS01LjQgNC41LTExLjMgNC45LTE3LjRzLS42LTEyLjItMi44LTE3LjhjLTYuMi0xNi4zLTIxLjYtMjYuNC00MC4zLTI2LjQtMy45IDAtNy45IC40LTExLjcgMS4yLTEgLjItMi4xIC41LTMuMSAuNyAuMi0xMS4yLS4xLTIyLjktMS4xLTM0LjUtMy41LTQwLjgtMTcuOC02Mi4xLTMyLjctNzkuMi05LjUtMTAuNy0yMC43LTE5LjctMzMuMi0yNi43LTIyLjYtMTIuOS00OC4yLTE5LjQtNzYuMS0xOS40cy01My40IDYuNS03NiAxOS40Yy0xMi41IDctMjMuNyAxNi4xLTMzLjMgMjYuOC0xNC45IDE3LTI5LjIgMzguNC0zMi43IDc5LjItMSAxMS42LTEuMiAyMy40LTEuMSAzNC41LTEtLjMtMi0uNS0zLjEtLjctMy45LS44LTcuOC0xLjItMTEuNy0xLjItMTguNyAwLTM0LjEgMTAuMS00MC4zIDI2LjQtMi4yIDUuNy0zLjIgMTEuOC0yLjggMTcuOHMyIDEyIDQuOSAxNy40YzQuMSA3LjggMTAuNyAxNC43IDIwIDIxLjMgMi41IDEuNyA2LjQgNC4yIDExLjIgNy40IDIuNiAxLjcgNi41IDQuMiAxMC4zIDYuNyAxLjMgLjkgMi40IDIgMy4zIDMuMyAuOCAxLjYgLjggMy40LS40IDYuNi0yLjUgNS41LTUuNSAxMC44LTguOSAxNS44LTEyLjEgMTcuNy0yOS40IDMyLjYtNTEuNCA0NC42LTExLjcgNi4yLTIzLjkgMTAuMy0yOSAyNC4zLTMuOSAxMC41LTEuMyAyMi41IDguNSAzMi42IDMuNiAzLjggNy44IDYuOSAxMi40IDkuNCA5LjYgNS4zIDE5LjggOS4zIDMwLjMgMTIuMSAyLjIgLjYgNC4zIDEuNSA2LjEgMi43IDMuNiAzLjEgMy4xIDcuOSA3LjggMTQuOCAyLjQgMy42IDUuNCA2LjcgOSA5LjEgMTAgNi45IDIxLjMgNy40IDMzLjIgNy44IDEwLjggLjQgMjMgLjkgMzYuOSA1LjUgNS44IDEuOSAxMS44IDUuNiAxOC43IDkuOSAxNi43IDEwLjMgMzkuNiAyNC4zIDc3LjggMjQuM3M2MS4zLTE0LjEgNzguMS0yNC40YzYuOS00LjIgMTIuOS03LjkgMTguNS05LjggMTMuOS00LjYgMjYuMi01LjEgMzYuOS01LjUgMTEuOS0uNSAyMy4yLS45IDMzLjItNy44IDQuMi0yLjkgNy43LTYuNyAxMC4yLTExLjIgMy40LTUuOCAzLjQtOS45IDYuNi0xMi44IDEuOC0xLjIgMy43LTIuMSA1LjgtMi42IDEwLjctMi44IDIxLTYuOSAzMC44LTEyLjIgNC45LTIuNiA5LjMtNi4xIDEzLTEwLjJsLjEtLjJjOS4yLTkuOSAxMS41LTIxLjUgNy44LTMxLjh6bS0zNCAxOC4zYy0yMC43IDExLjUtMzQuNSAxMC4yLTQ1LjMgMTcuMS05LjEgNS45LTMuNyAxOC41LTEwLjMgMjMuMS04LjEgNS42LTMyLjItLjQtNjMuMiA5LjktMjUuNiA4LjUtNDIgMzIuOC04OCAzMi44cy02Mi0yNC4zLTg4LjEtMzIuOWMtMzEtMTAuMy01NS4xLTQuMi02My4yLTkuOS02LjYtNC42LTEuMi0xNy4yLTEwLjMtMjMuMS0xMC43LTYuOS0yNC41LTUuNy00NS4zLTE3LjEtMTMuMi03LjMtNS43LTExLjgtMS4zLTEzLjkgNzUuMS0zNi40IDg3LjEtOTIuNiA4Ny43LTk2LjcgLjYtNSAxLjQtOS00LjItMTQuMS01LjQtNS0yOS4yLTE5LjctMzUuOC0yNC4zLTEwLjktNy42LTE1LjctMTUuMy0xMi4yLTI0LjYgMi41LTYuNSA4LjUtOC45IDE0LjktOC45IDIgMCA0IC4yIDYgLjcgMTIgMi42IDIzLjcgOC42IDMwLjQgMTAuMiAuOCAuMiAxLjYgLjMgMi41IC4zIDMuNiAwIDQuOS0xLjggNC42LTUuOS0uOC0xMy4xLTIuNi0zOC43LS42LTYyLjYgMi44LTMyLjkgMTMuNC00OS4yIDI2LTYzLjYgNi4xLTYuOSAzNC41LTM3IDg4LjktMzdTMzM5IDc0LjIgMzQ1IDgxLjFjMTIuNiAxNC40IDIzLjIgMzAuNyAyNiA2My42IDIuMSAyMy45IC4zIDQ5LjUtLjYgNjIuNi0uMyA0LjMgMSA1LjkgNC42IDUuOSAuOCAwIDEuNy0uMSAyLjUtLjMgNi43LTEuNiAxOC40LTcuNiAzMC40LTEwLjIgMi0uNCA0LS43IDYtLjcgNi40IDAgMTIuNCAyLjUgMTQuOSA4LjkgMy41IDkuNC0xLjIgMTctMTIuMiAyNC42LTYuNiA0LjYtMzAuNCAxOS4zLTM1LjggMjQuMy01LjYgNS4xLTQuOCA5LjEtNC4yIDE0LjIgLjUgNC4yIDEyLjUgNjAuNCA4Ny43IDk2LjcgNC40IDIuMiAxMS45IDYuNy0xLjMgMTQuMXoiXQogICAgfTsKICAgIGZhU25hcGNoYXRHaG9zdCA9IGZhU25hcGNoYXQ7CiAgICBmYUdhbGFjdGljU2VuYXRlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdhbGFjdGljLXNlbmF0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTBkIiwgIk0yNDkuOSAzMy41bDAgMjYuMWMtMTMuNiAyMC42LTIzLjkgMTA4LjYtMjQuNSAyMTUuMyAxMS43LTE1LjYgMTkuMS0zMy4zIDE5LjEtNDguMmwwLTE2LjljMC01LjMgLjgtMTAuNSAyLjItMTUuNiAuNi0yLjEgMS40LTQuMSAyLjYtNS44czMuNC0zLjggNi43LTMuOCA1LjQgMi4xIDYuNyAzLjhjMS4yIDEuOCAyIDMuNyAyLjYgNS44IDEuNCA1LjEgMi4yIDEwLjMgMi4yIDE1LjZsMCAxNi45YzAgMTQuOSA3LjQgMzIuNiAxOS4xIDQ4LjItLjYtMTA2LjgtMTAuOS0xOTQuNy0yNC41LTIxNS4zbDAtMjYuMS0xMi4zIDB6TTIyMy41IDE4MS4zYy05LjUgMi4xLTE4LjcgNS4yLTI3LjUgOS4xIDguOSAxNi4xIDkuOCAzMi42IDEuNyAzNy4zLTggNC42LTIxLjgtNC4yLTMxLjQtMTkuOC0xMS42IDguOC0yMS45IDE5LjMtMzAuNiAzMS4xIDE0LjcgOS42IDIyLjkgMjIuOSAxOC4zIDMwLjctNC41IDcuNy0yMCA3LjEtMzUuNS0xLTUuOCAxMy4yLTkuNyAyNy41LTExLjYgNDIuNCA5LjcgLjIgMTguNyAyLjQgMjYuMiA2IDE3LjgtLjMgMzIuOC0yIDQwLjUtNC4yIDUuNi0yNi40IDIzLTQ4LjIgNDYuMy01OS41IC43LTI1LjYgMS45LTQ5LjcgMy41LTcyLjF6bTY1IDBjMS42IDIyLjQgMi43IDQ2LjUgMy41IDcyLjEgMjMuMyAxMS4zIDQwLjggMzMuMiA0Ni4zIDU5LjUgNy43IDIuMyAyMi43IDMuOSA0MC41IDQuMiA3LjUtMy43IDE2LjUtNS44IDI2LjItNi0xLjktMTQuOS01LjktMjkuMi0xMS43LTQyLjQtMTUuNCA4LjEtMzAuOSA4LjctMzUuNSAxLTQuNi03LjcgMy42LTIxLjEgMTguMy0zMC43LTguNy0xMS44LTE5LTIyLjMtMzAuNi0zMS4xLTkuNSAxNS42LTIzLjQgMjQuNC0zMS40IDE5LjgtOC4xLTQuNi03LjItMjEuMiAxLjctMzcuMy04LjgtMy45LTE4LTctMjcuNC05LjF6TTI1NiAxODkuOWMtMy4yIDAtNS45IDguOC02LjEgMTkuOWwwIDAgMCAxNi45YzAgNDEuNC00OSA5NS05My41IDk1LTUyIDAtMTIyLjgtMS40LTE1Ni40IDI5LjJsMCAyLjVjOS40IDE3LjEgMjAuNiAzMy4yIDMzLjIgNDggMTIuNS0yMS4xIDUxLjYtNDEgMTA4LTQxLjQgNDUuNyAxIDc5IDIwLjMgOTAuOCA0MC45IDAgMCAwIDAgMCAuMSA3LjcgMi4xIDE1LjggMy4yIDI0IDMuMiA4LjIgMCAxNi40LTEuMSAyNC0zLjIgMCAwIDAgMCAwLS4xIDExLjctMjAuNSA0NS4xLTM5LjggOTAuOC00MC45IDU2LjQgLjQgOTUuNSAyMC4zIDEwOCA0MS40IDEyLjYtMTQuOCAyMy44LTMwLjkgMzMuMi00OGwwLTIuNWMtMzMuNi0zMC42LTEwNC40LTI5LjItMTU2LjQtMjkuMi00NC41IDAtOTMuNS01My42LTkzLjUtOTVsMC0xNi45LS4xIDBjLS4yLTExLjEtMi45LTE5LjktNi4xLTE5Ljl6bTAgMTc3LjlhNDAuNiA0MC42IDAgMSAxIDAtODEuMyA0MC42IDQwLjYgMCAxIDEgMCA4MS4zem0wLTczLjZhMzMgMzMgMCAxIDAgMCA2NS45IDMzIDMzIDAgMSAwIDAtNjUuOXptMCA1OS44YTI2LjggMjYuOCAwIDEgMSAwLTUzLjYgMjYuOCAyNi44IDAgMSAxIDAgNTMuNnptLTExNC44IDEzYy0xMC4yIC4xLTIxLjYgLjQtMzAuNSAxLjcgLjQgNC40IDEuNSAxOC42IDcuMSAyOS44IDkuMS0yLjYgMTguNC0zLjkgMjcuNi0zLjkgNDEuMyAuOSA3MS41IDM0LjQgNzguMyA3NC41bC4xIDQuN2MxMC40IDEuOSAyMS4yIDIuOSAzMi4yIDIuOSAxMSAwIDIxLjgtMSAzMi4yLTIuOWwuMS00LjdjNi44LTQwLjEgMzctNzMuNSA3OC4zLTc0LjUgOS4zIDAgMTguNSAxLjMgMjcuNiAzLjkgNS42LTExLjEgNi43LTI1LjMgNy4xLTI5LjgtOC45LTEuMy0yMC4zLTEuNi0zMC41LTEuNy0xOC44IC40LTM1LjIgNC4yLTQ4LjYgOS43LTEyLjUgMTYtMjkuMiAzMC00OS42IDMzLjEtLjEgMC0uMiAwLS4zIDAgMCAwLS4xIDAtLjIgLjEtNS4yIDEuMS0xMC42IDEuNi0xNi4yIDEuNi01LjUgMC0xMC45LS41LTE2LjItMS42LS4xIDAtLjEgMC0uMi0uMS0uMSAwLS4yIDAtLjMgMC0yMC40LTMtMzctMTctNDkuNi0zMy4xLTEzLjQtNS41LTI5LjktOS4yLTQ4LjYtOS43eiJdCiAgICB9OwogICAgZmFQaG9lbml4RnJhbWV3b3JrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBob2VuaXgtZnJhbWV3b3JrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzZGMiLCAiTTIxMi45IDM0NC4zYzMuOC0uMSAyMi44LTEuNCAyNS42LTIuMi0yLjQtMi42LTQzLjYtMS02OC00OS42LTQuMy04LjYtNy41LTE3LjYtNi40LTI3LjYgMi45LTI1LjUgMzIuOS0zMCA1Mi0xOC41IDM2IDIxLjYgNjMuMyA5MS4zIDExMy43IDk3LjUgMzcgNC41IDg0LjYtMTcgMTA4LjItNDUuNC0uNi0uMS0uOC0uMi0xLS4xLS40IC4xLS44IC4yLTEuMSAuMy0zMy4zIDEyLjEtOTQuMyA5LjctMTM0LjctMTQuOC0zNy42LTIyLjgtNTMuMS01OC43LTUxLjgtNzQuNiAxLjgtMjEuMyAyMi45LTIzLjIgMzUuOS0xOS42IDE0LjQgMy45IDI0LjQgMTcuNiAzOC45IDI3LjQgMTUuNiAxMC40IDMyLjkgMTMuNyA1MS4zIDEwLjMgMTQuOS0yLjcgMzQuNC0xMi4zIDM2LjUtMTQuNS0xLjEtLjEtMS44LS4xLTIuNS0uMi02LjItLjYtMTIuNC0uOC0xOC41LTEuNy0xMTEuMi0xNi41LTEyOC45LTE2My42LTI1Mi41LTE3My4xLTQ0LjMtMy40LTk5LjQgOC4xLTEzNi4zIDM1LS44IC42LTEuNSAxLjItMi4yIDEuOCAuMSAuMiAuMSAuMyAuMiAuNSAuOCAwIDEuNi0uMSAyLjQtLjIgNi4zLTEgMTIuNS0uOCAxOC43IC4zIDIzLjggNC4zIDQ3LjcgMjMuMSA1NS45IDc2LjUgNS4zIDM0LjMtLjcgNTAuOCA4IDg2LjEgMTkgNzcuMSA5MSAxMDcuNiAxMjcuNyAxMDYuNHpNNzUuMyA2NC45Yy0uOS0xLS45LTEuMi0xLjMtMiAxMi4xLTIuNiAyNC4yLTQuMSAzNi42LTQuOC0xLjEgMTQuNy0yMi4yIDIxLjMtMzUuMyA2Ljh6TTI3Mi4yIDQxNS40Yy00Mi44IDEuMi05Mi0yNi43LTEyMy41LTYxLjQtNC42LTUtMTYuOC0yMC4yLTE4LjYtMjMuNGwuNC0uNGM2LjYgNC4xIDI1LjcgMTguNiA1NC44IDI3IDI0LjIgNyA0OC4xIDYuMyA3MS42LTMuMyAyMi43LTkuMyA0MS0uNSA0My4xIDIuOS0xOC41IDMuOC0yMC4xIDQuNC0yNCA3LjktNS4xIDQuNC00LjYgMTEuNyA3IDE3LjIgMjYuMiAxMi40IDYzLTIuOCA5Ny4yIDI1LjQgMi40IDIgOC4xIDcuOCAxMC4xIDEwLjctLjEgLjItLjMgLjMtLjQgLjUtNC44LTEuNS0xNi40LTcuNS00MC4yLTkuMy0yNC43LTItNDYuMyA1LjMtNzcuNSA2LjJ6TTQ0NyAxNjMuNGMxNi40LTUuMiA0MS4zLTEzLjQgNjYuNS0zLjMgMTYuMSA2LjUgMjYuMiAxOC43IDMyLjEgMzQuNiAzLjUgOS40IDUuMSAxOS43IDUuMSAyOC43LS4yIDAtLjQgMC0uNiAuMS0uMi0uNC0uNC0uOS0uNS0xLjMtNS0yMi0yOS45LTQzLjgtNjcuNi0yOS45LTUwLjIgMTguNi0xMzAuNCA5LjctMTc2LjktNDgtLjctLjktMi40LTEuNy0xLjMtMy4yIC4xLS4yIDIuMSAuNiAzIDEuMyAxOC4xIDEzLjQgMzguMyAyMS45IDYwLjMgMjYuMiAzMC41IDYuMSA1NC42IDIuOSA3OS45LTUuMnpNNTQ5LjcgMjgwLjljLTMyLjQgLjItMzMuOCA1MC4xLTEwMy42IDY0LjQtMTguMiAzLjctMzguNyA0LjYtNDQuOSA0LjJsMC0uNGMyLjgtMS41IDE0LjctMi42IDI5LjctMTYuNiA3LjktNy4zIDE1LjMtMTUuMSAyMi44LTIyLjkgMTkuNS0yMC4yIDQxLjQtNDIuMiA4MS45LTM5IDIzLjEgMS44IDI5LjMgOC4yIDM2LjEgMTIuNyAuMyAuMiAuNCAuNSAuNyAuOS0uNSAwLS43IC4xLS45IDAtNy0yLjctMTQuMy0zLjMtMjEuOC0zLjN6bS0xMi4zLTI0LjFjLS4xIC4yLS4xIC40LS4yIC42LTI4LjktNC40LTQ4LTcuOS02OC41IDQtMTcgOS45LTMxLjQgMjAuNS02MiAyNC40LTI3LjEgMy40LTQ1LjEgMi40LTY2LjEtOC0uMy0uMi0uNi0uNC0xLS42IDAtLjIgLjEtLjMgLjEtLjUgMjQuOSAzLjggMzYuNCA1LjEgNTUuNS01LjggMjIuMy0xMi45IDQwLjEtMjYuNiA3MS4zLTMxIDI5LjYtNC4xIDUxLjMgMi41IDcwLjkgMTYuOXpNMjY4LjYgOTcuM2MtLjYtLjYtMS4xLTEuMi0yLjEtMi4zIDcuNiAwIDI5LjctMS4yIDUzLjQgOC40IDE5LjcgOCAzMi4yIDIxIDUwLjIgMzIuOSAxMS4xIDcuMyAyMy40IDkuMyAzNi40IDguMSA0LjMtLjQgOC41LTEuMiAxMi44LTEuNyAuNC0uMSAuOSAwIDEuNSAuMy0uNiAuNC0xLjIgLjktMS44IDEuMi04LjEgNC0xNi43IDYuMy0yNS42IDcuMS0yNi4xIDIuNi01MC4zLTMuNy03My40LTE1LjQtMTkuMy05LjktMzYuNC0yMi45LTUxLjQtMzguNnpNNjQwIDMzNS43Yy0zLjUgMy4xLTIyLjcgMTEuNi00Mi43IDUuMy0xMi4zLTMuOS0xOS41LTE0LjktMzEuNi0yNC4xLTEwLTcuNi0yMC45LTcuOS0yOC4xLTguNCAuNi0uOCAuOS0xLjIgMS4yLTEuNCAxNC44LTkuMiAzMC41LTEyLjIgNDcuMy02LjUgMTIuNSA0LjIgMTkuMiAxMy41IDMwLjQgMjQuMiAxMC44IDEwLjQgMjEgOS45IDIzLjEgMTAuNSAuMS0uMSAuMiAwIC40IC40em0tMjEyLjUgMTM3YzIuMiAxLjIgMS42IDEuNSAxLjUgMi0xOC41LTEuNC0zMy45LTcuNi00Ni44LTIyLjItMjEuOC0yNC43LTQxLjctMjcuOS00OC42LTI5LjcgLjUtLjIgLjgtLjQgMS4xLS40IDEzLjEgLjEgMjYuMSAuNyAzOC45IDMuOSAyNS4zIDYuNCAzNSAyNS40IDQxLjYgMzUuMyAzLjIgNC44IDcuMyA4LjMgMTIuMyAxMS4xeiJdCiAgICB9OwogICAgZmFHaXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2l0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxZDMiLCAiTTIxNi4zIDE1OC40bC03OS4zIDBjLTQwLTEwLjUtMTMwLjUtNy44LTEzMC41IDc0LjggMCAzMC4xIDE1IDUxLjIgMzUgNjEtMjUuMSAyMy0zNyAzMy44LTM3IDQ5LjIgMCAxMSA0LjUgMjEuMSAxNy45IDI2LjgtMTQuMyAxMy40LTIyLjQgMjMuMS0yMi40IDQxLjQgMCAzMi4xIDI4IDUwLjggMTAxLjYgNTAuOCA3MC44IDAgMTExLjgtMjYuNCAxMTEuOC03My4yIDAtNTguNy00NS4yLTU2LjUtMTUxLjYtNjNsMTMuNC0yMS42YzI3LjMgNy42IDExOC43IDEwIDExOC43LTY3LjkgMC0xOC43LTcuNy0zMS43LTE1LTQxLjFsMzcuNC0yLjggMC0zNC41ek0xNTIuOSA0MDAuM2MwIDMyLjEtMTA0LjkgMzIuMS0xMDQuOSAyLjQgMC04LjEgNS4zLTE1IDEwLjYtMjEuNSA3Ny43IDUuMyA5NC4zIDMuNCA5NC4zIDE5LjF6TTEwMi4xIDI2NS43Yy01Mi44IDAtNTAuNS03MS4yIDEuMi03MS4yIDQ5LjUgMCA1MC44IDcxLjItMS4yIDcxLjJ6TTIzNS40IDM2Ni4ybDAtMzIuMWMyNi43LTMuNyAyNy4yLTIgMjcuMi0xMWwwLTExOS41YzAtOC41LTIuMS03LjQtMjcuMi0xNi4zbDQuNS0zMi45IDg0LjIgMCAwIDE2OC43YzAgNi41IC40IDcuMyA2LjUgOC4xbDIwLjcgMi44IDAgMzIuMS0xMTUuOSAwem01Mi41LTI0NC4zYy0yMy4yIDAtMzYuNi0xMy40LTM2LjYtMzYuNnMxMy40LTM1LjggMzYuNi0zNS44YzIzLjYgMCAzNyAxMi42IDM3IDM1LjhzLTEzLjQgMzYuNi0zNyAzNi42ek01MTIgMzUwLjVjLTE3LjUgOC41LTQzLjEgMTYuMy02Ni4zIDE2LjMtNDguNCAwLTY2LjctMTkuNS02Ni43LTY1LjVsMC0xMDYuNWMwLTUuNCAxLTQuMS0zMS43LTQuMWwwLTM2LjJjMzUuOC00LjEgNTAtMjIgNTQuNS02Ni4zbDM4LjYgMGMwIDY1LjgtMS4zIDYxLjggMy4zIDYxLjhsNTcuMyAwIDAgNDAuNi02MC42IDAgMCA5Ny4xYzAgNi45LTQuOSA1MS40IDYwLjYgMjYuOGwxMSAzNS44eiJdCiAgICB9OwogICAgZmFPcHRpbk1vbnN0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib3B0aW4tbW9uc3RlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMjNjIiwgIk01NzIuOCA0MjEuNGM1LjYtOS41IDQuNy0xNS4yLTUuNC0xMS42LTMtNC45LTctOS41LTExLjEtMTMuOCAyLjktOS43LS43LTE0LjItMTAuOC05LjItNC42LTMuMi0xMC4zLTYuNS0xNS45LTkuMiAwLTE1LjEtMTEuNi0xMS42LTE3LjYtNS43LTEwLjQtMS41LTE4LjctLjMtMjYuOCA1LjcgLjMtNi41IC4zLTEzIC4zLTE5LjcgMTIuNiAwIDQwLjItMTEgNDUuOS0zNi4yIDEuNC02LjggMS42LTEzLjgtLjMtMjEuOS0zLTEzLjUtMTQuMy0yMS4zLTI1LjEtMjUuNy0uOC01LjktNy42LTE0LjMtMTQuOS0xNS45cy0xMi40IDQuOS0xNC4xIDEwLjNjLTguNSAwLTE5LjIgMi44LTIxLjEgOC40LTUuNC0uNS0xMS4xLTEuNC0xNi44LTEuOSAyLjctMS45IDUuNC0zLjUgOC40LTQuNiA1LjQtOS4yIDE0LjYtMTEuNCAyNS43LTExLjZsMC0yLjhjMTkuNS0uNSA0My01LjkgNTMuOC0xOC4xIDEyLjctMTMuOCAxNC42LTM3LjMgMTIuNC01NS4xLTIuNC0xNy4zLTkuNy0zNy42LTI0LjYtNDguMS04LjQtNS45LTIxLjYtLjgtMjIuNyA5LjUtMi4yIDE5LjYgMS4yIDMwLTM4LjYgMjUuMS0xMC4zLTIzLjgtMjQuNi00NC42LTQyLjctNjAtNjkuNi01OS43LTE2Ny43LTUzLjgtMjQ0LjItMzcuNiAxOS43IDQuNiA0MS4xIDguNiA1OS43IDE2LjUtMjYuMiAyLjQtNTIuNyAxMS4zLTc2LjIgMjMuMi0zMi44IDE3LTQ0IDI5LjktNTYuNyA0Mi40IDE0LjktMi4yIDI4LjktNS4xIDQzLjgtMy44LTkuNyA1LjQtMTguNCAxMi4yLTI2LjUgMjAtMjUuOCAuOS0yMy44LTUuMy0yNi4yLTI1LjktMS4xLTEwLjUtMTQuMy0xNS40LTIyLjctOS43LTI4LjEgMTkuOS0zMy41IDc5LjktMTIuMiAxMDMuNSAxMC44IDEyLjIgMzUuMSAxNy4zIDU0LjkgMTcuOC0uMyAxLjEtLjMgMS45LS4zIDIuNyAxMC44IC41IDE5LjUgMi43IDI0LjYgMTEuNiAzIDEuMSA1LjcgMi43IDguMSA0LjYtNS40IC41LTExLjEgMS40LTE2LjUgMS45LTMuMy02LjYtMTMuNy04LjEtMjEuMS04LjEtMS42LTUuNy02LjUtMTIuMi0xNC4xLTEwLjMtNi44IDEuOS0xNC4xIDEwLTE0LjkgMTUuOS0yMi41IDkuNS0zMC4xIDI2LjgtMjUuMSA0Ny42IDUuMyAyNC44IDMzIDM2LjIgNDUuOSAzNi4ybDAgMTkuN2MtNi42LTUtMTQuMy03LjUtMjYuOC01LjctNS41LTUuNS0xNy4zLTEwLjEtMTcuMyA1LjctNS45IDIuNy0xMS40IDUuOS0xNS45IDkuMi05LjgtNC45LTEzLjYtMS43LTExLjEgOS4yLTQuMSA0LjMtNy44IDguNi0xMS4xIDEzLjgtMTAuMi0zLjctMTEgMi4yLTUuNCAxMS42LTEuMSAzLjUtMS42IDctMS45IDEwLjgtLjUgMzEuNiA0NC42IDY0IDczLjUgNjUuMSAxNy4zIC41IDM0LjYtOC40IDQzLTIzLjUgMTEzLjIgNC45IDIyNi43IDQuMSAzNDAuMiAwIDguMSAxNS4xIDI1LjQgMjQuMyA0Mi43IDIzLjUgMjkuMi0xLjEgNzQuMy0zMy41IDczLjUtNjUuMSAuMi0zLjctLjctNy4yLTEuNy0xMC43ek00OTkgMTY3LjRjMS4xLTMgMi40LTguNCAyLjQtMTQuNiAwLTUuOSA2LjgtOC4xIDE0LjEtLjggMTEuMSAxMS42IDE0LjkgNDAuNSAxMy44IDUxLjEtNC4xLTEzLjYtMTMtMjktMzAuMy0zNS43em0tNC42IDYuN2MxOS41IDYuMiAyOC42IDI3LjYgMjkuNyA0OC45LTEuMSAyLjctMyA1LjQtNC45IDcuNi01LjcgNS45LTE1LjQgMTAtMjYuMiAxMi4yIDQuMy0yMS4zIC4zLTQ3LjMtMTIuNy02MyA0LjktLjggMTAuOS0yLjQgMTQuMS01Ljd6bS0yNC4xIDYuOGMxMy44IDExLjkgMjAgMzkuMiAxNC4xIDYzLjUtNC4xIC41LTguMSAuOC0xMS42IC44LTEuOS0yMS45LTYuOC00NC0xNC4zLTY0LjYgMy43IC4zIDguMSAuMyAxMS44IC4zek00Ny43IDIwM2MtMS4xLTEwLjUgMi40LTM5LjUgMTMuOC01MS4xIDctNy4zIDE0LjEtNS4xIDE0LjEgLjggMCA2LjIgMS40IDExLjYgMi40IDE0LjYtMTcuMyA2LjgtMjYuMiAyMi4yLTMwLjMgMzUuN3ptOS43IDI3LjZjLTEuOS0yLjItMy41LTQuOS00LjktNy42IDEuNC0yMS4zIDEwLjMtNDIuNyAyOS43LTQ4LjkgMy4yIDMuMiA5LjIgNC45IDE0LjEgNS43LTEzIDE1LjctMTcgNDEuNi0xMi43IDYzLTEwLjgtMi4yLTIwLjUtNi0yNi4yLTEyLjJ6bTQ3LjkgMTQuNmMtNC4xIDAtOC4xLS4zLTEyLjctLjgtNC42LTE4LjYtMS45LTM4LjkgNS40LTUzbDAgLjMgMTIuMi01LjFjNC45LTEuOSA5LjctMy44IDE0LjktNC45LTEwLjcgMTkuNy0xNy40IDQxLjMtMTkuOCA2My41em0xODQtMTAuNWE3Ni4xIDc2LjEgMCAxIDEgMC0xNTIuMiA3Ni4xIDc2LjEgMCAxIDEgMCAxNTIuMnptMTE1LjYgMjIuMWMtLjMgMTcuOC03IDQ4LjktMjMgNTctMTMuMiA2LjYtNi41LTcuNS0xNi41LTU4LjEgMTMuMyAuMyAyNi42IC4zIDM5LjUgMS4xem0tNTQtMS42Yy44IDQuOSAzLjggNDAuMy0xLjYgNDEuOS0xMS42IDMuNS00MCA0LjMtNTEuMS0xLjEtNC4xLTMtNC42LTM1LjktNC4zLTQxLjFsMCAuM2MxOC45LS4zIDM4LjEtLjMgNTcgMHpNMjc4LjUgMzA5Yy0xMyAzLjUtNDEuNiA0LjEtNTQuNi0xLjYtNi41LTIuNy0zLjgtNDIuNC0xLjktNTEuNiAxOS4yLS41IDM4LjQtLjUgNTcuOC0uOGwwIC4zYzEuMSA4LjMgMy4zIDUxLjItMS4zIDUzLjd6TTE3MiAyNTcuOWMxMi4yLS44IDI0LjYtMS40IDM2LjgtMS42LTIuNCAxNS40LTMgNDMuNS00LjkgNTIuMi0xLjEgNi44LTQuMyA2LjgtOS43IDQuMy0yMS45LTkuOC0yNy42LTM1LjItMjIuMi01NC45em0tMzUuNCAzMS4zYzcuOC0xLjEgMTUuNy0xLjkgMjMuNS0yLjcgMS42IDYuMiAzLjggMTEuOSA3IDE3LjYgMTAgMTcgNDQgMzUuNyA0NS4xIDcgNi4yIDE0LjkgNDAuOCAxMi4yIDU0LjkgMTAuOCAxNS43LTEuNCAyMy44LTEuNCAyNi44LTE0LjMgMTIuNCA0LjMgMzAuOCA0LjEgNDQgMyAxMS4zLS44IDIwLjgtLjUgMjQuNi04LjkgMS4xIDUuMSAxLjkgMTEuNiA0LjYgMTYuOCAxMC44IDIxLjMgMzcuMyAxLjQgNDYuOC0zMS42IDguNiAuOCAxNy42IDEuOSAyNi41IDIuNy0uNCAxLjMtMy44IDcuMyA3LjMgMTEuNi00Ny42IDQ3LTk1LjcgODcuOC0xNjMuMiAxMDctNjMuMi0yMC44LTExMi4xLTU5LjUtMTU1LjktMTA2LjUgOS42LTMuNCAxMC40LTguOCA4LTEyLjV6TTExNSA0NjEuN2MtMy44IDE3LjgtMjEuOSAyOS43LTM5LjcgMjguOS0xOS4yLS44LTQ2LjUtMTctNTkuMi0zNi41LTIuNy0zMS4xIDQzLjgtNjEuMyA2Ni4yLTU0LjYgMTQuOSA0LjMgMjcuOCAzMC44IDMzLjUgNTQgMCAzLS4zIDUuNy0uOCA4LjJ6bS04LjctNjZjLS41LTEzLjUtLjUtMjctLjMtNDAuNWwuMyAwYzIuNy0xLjYgNS43LTMuOCA3LjgtNi41IDYuNS0xLjYgMTMtNS4xIDE1LjEtOS4yIDMuMy03LjEtNy03LjUtNS40LTEyLjQgMi43LTEuMSA1LjctMi4yIDcuOC0zLjUgMjkuMiAyOS4yIDU4LjYgNTYuNSA5Ny4zIDc3LTM2LjggMTEuMy03Mi40IDI3LjYtMTA1LjkgNDctMS4yLTE4LjYtNy43LTM1LjktMTYuNy01MS45em0zMzcuNiA2NC42Yy0xMDMgMy41LTIwNi4yIDQuMS0zMDkuNCAwIDAgLjMgMCAuMy0uMyAuM2wwLS4zIC4zIDBjMzUuMS0yMS42IDcyLjItMzkuMiAxMTIuNC01MC44IDExLjYgNS4xIDIzIDkuNSAzNC45IDEzLjIgMi4yIC44IDIuMiAuOCA0LjMgMCAxNC4zLTQuMSAyOC40LTkuMiA0Mi4yLTE1LjQgNDEuNSAxMS43IDc4LjggMzEuNyAxMTUuNiA1M3ptMTAuNS0xMi40Yy0zNS45LTE5LjUtNzMtMzUuOS0xMTEuOS00Ny42IDM4LjEtMjAgNzEuOS00Ny4zIDEwMy41LTc2LjcgMi4yIDEuNCA0LjYgMi40IDcuNiAzLjIgMCAuOCAuMyAxLjkgLjUgMi40LTQuNiAyLjctNy44IDYuMi01LjkgMTAuMyAyLjIgMy44IDguNiA3LjYgMTUuMSA4LjkgMi40IDIuNyA1LjEgNS4xIDguMSA2LjggMCAxMy44LS4zIDI3LjYtLjggNDEuM2wuMy0uM2MtOS4zIDE1LjktMTUuNSAzNy0xNi41IDUxLjd6bTEwNS45IDYuMmMtMTIuNyAxOS41LTQwIDM1LjctNTkuMiAzNi41LTE5LjMgLjktNDAuNS0xMy4yLTQwLjUtMzcgNS43LTIzLjIgMTguOS00OS43IDMzLjUtNTQgMjIuNy02LjkgNjkuMiAyMy40IDY2LjIgNTQuNXpNMzczLjEgNzUuMmMtMy44LTcyLjEtMTAwLjgtNzkuNy0xMjYtMjMuNSA0NC42LTI0LjMgOTAuMy0xNS43IDEyNiAyMy41ek03NSA0MDcuMWMtMTUuNyAxLjYtNDkuNSAyNS40LTQ5LjUgNDMuMiAwIDExLjYgMTUuNyAxOS41IDMyLjIgMTQuOSAxMi4yLTMuMiAzMS4xLTE3LjYgMzUuOS0yNy4zIDYtMTEuNi0zLjctMzIuNy0xOC42LTMwLjh6TTI5MC45IDIzMC45YzI4LjYgMCA1MS45LTIxLjYgNTEuOS00OC40IDAtMzYuMS00MC41LTU4LjEtNzIuMi00NC4zIDkuNSAzIDE2LjUgMTEuNiAxNi41IDIxLjYgMCAyMy4zLTMzLjMgMzItNDYuNSAxMS4zLTcuMyAzNC4xIDE5LjQgNTkuOCA1MC4zIDU5Ljh6TTY4LjIgNDc0LjFjLjUgNi41IDEyLjIgMTIuNyAyMS42IDkuNSA2LjgtMi43IDE0LjYtMTAuNSAxNy4zLTE2LjIgMy03LTEuMS0yMC05LjctMTguNC04LjkgMS42LTI5LjcgMTYuNy0yOS4yIDI1LjF6bTQzMy4yLTY3Yy0xNC45LTEuOS0yNC42IDE5LjItMTguOSAzMC44IDQuOSA5LjcgMjQuMSAyNC4xIDM2LjIgMjcuMyAxNi41IDQuNiAzMi4yLTMuMiAzMi4yLTE0LjkgMC0xNy44LTMzLjgtNDEuNi00OS41LTQzLjJ6TTQ3OSA0NDljLTguNC0xLjYtMTIuNCAxMS4zLTkuNSAxOC40IDIuNCA1LjcgMTAuMyAxMy41IDE3LjMgMTYuMiA5LjIgMy4yIDIxLjEtMyAyMS4zLTkuNSAuOS04LjQtMjAuMi0yMy41LTI5LjEtMjUuMXoiXQogICAgfTsKICAgIGZhSmVua2lucyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJqZW5raW5zIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYjYiLCAiTTQ1NS40IDQyNWMtMS40LTExLjItMTktMjMuMS0yOC4yLTMxLjktNS4xLTUtMjktMjMuMS0zMC40LTI5LjktMS40LTYuNiA5LjctMjEuNSAxMy4zLTI4LjkgNS4xLTEwLjcgOC44LTIzLjcgMTEuMy0zMi42IDE4LjgtNjYuMSAyMC43LTE1Ni45LTYuMi0yMTEuMi0xMC4yLTIwLjYtMzguNi00OS01Ni40LTYyLjUtNDItMzEuNy0xMTkuNi0zNS4zLTE3MC4xLTE2LjYtMTQuMSA1LjItMjcuOCA5LjgtNDAuMSAxNy4xLTMzLjEgMTkuNC02OC4zIDMyLjUtNzguMSA3MS42LTI0LjIgMTAuOC0zMS41IDQxLjgtMzAuMyA3Ny44IC4yIDcgNC4xIDE1LjggMi43IDIyLjQtLjcgMy4zLTUuMiA3LjYtNi4xIDkuOC0xMS42IDI3LjctMi4zIDY0IDExLjEgODMuNyA4LjEgMTEuOSAyMS41IDIyLjQgMzkuMiAyNS4yIC43IDEwLjYgMy4zIDE5LjcgOC4yIDMwLjQgMy4xIDYuOCAxNC43IDE5IDEwLjQgMjcuNy0yLjIgNC40LTIxIDEzLjgtMjcuMyAxNy42LTIxLjEgMTIuNS0zNi40IDIwLjMtNTUuOSAzNC4zLTEyLjYgOS0zMi4zIDEwLjItMjkuMiAzMS4xIDIuMSAxNC4xIDEwLjEgMzEuNiAxNC43IDQ1LjggLjcgMiAxLjQgNC4xIDIuMSA2bDQyMiAwYzQuOS0xNS4zIDkuNy0zMC45IDE0LjYtNDcuMiAzLjQtMTEuNCAxMC4yLTI3LjggOC43LTM5Ljd6TTE3NC4yIDMzLjdjMS44LS41IDMuNCAuNyA0LjkgMi40LS4yIDUuMi01LjQgNS4xLTguOSA2LjgtNS40IDYuNy0xMy40IDkuOC0yMCAxNy4yLTYuOCA3LjUtMTQuNCAyNy43LTIzLjQgMzAtNC41IDEuMS05LjctLjgtMTMuNi0uNS0xMC40IC43LTE3LjcgNi0yOC4zIDcuNSAxMy42LTI5LjkgNTYuMS01NCA4OS4zLTYzLjR6TTY5LjQgMTI3LjNjMTMuNS0xNC45IDMyLjEtMjQuMSA1NC44LTI1LjkgMTEuNyAyOS43LTguNCA2NS0uOSA5Ny42IDIuMyA5LjkgMTAuMiAyNS40LTIuNCAyNS43IC4zLTI4LjMtMzQuOC00Ni4zLTYxLjMtMjkuNi0xLjgtMjEuNS00LjktNTEuNyA5LjgtNjcuOHptMzYuNyAyMDAuMmMtMS00LjEtMi43LTEyLjktMi4zLTE1LjEgMS42LTguNyAxNy4xLTEyLjUgMTEtMjQuNy0xMS4zLS4xLTEzLjggMTAuMi0yNC4xIDExLjMtMjYuNyAyLjYtNDUuNi0zNS40LTQ0LjQtNTguNCAxLTE5LjUgMTcuNi0zOC4yIDQwLjEtMzUuOCAxNiAxLjggMjEuNCAxOS4yIDI0LjUgMzQuNyA5LjIgLjUgMjIuNS0uNCAyNi45LTcuNi0uNi0xNy41LTguOC0zMS42LTguMi00Ny43IDEtMzAuMyAxNy41LTU3LjYgNC44LTg3LjQgMTMuNi0zMC45IDUzLjUtNTUuMyA4My4xLTcwIDM2LjYtMTguMyA5NC45LTMuNyAxMjkuMyAxNS44IDE5LjcgMTEuMSAzNC40IDMyLjcgNDguMyA1MC43LTE5LjUtNS44LTM2LjEgNC4yLTMzLjEgMjAuMyAxNi4zLTE0LjkgNDQuMi0uMiA1Mi41IDE2LjQgNy45IDE1LjggNy44IDM5LjMgOSA2Mi44IDIuOSA1Ny0xMC40IDExNS45LTM5LjEgMTU3LjEtNy43IDExLTE0LjEgMjMtMjQuOSAzMC42LTI2IDE4LjItNjUuNCAzNC43LTk5LjIgMjMuNC00NC43LTE1LTY1LTQ0LjgtODkuNS03OC44IC43IDE4LjcgMTMuOCAzNC4xIDI2LjggNDguNCAxMS4zIDEyLjUgMjUgMjYuNiAzOS43IDMyLjQtMTIuMy0yLjktMzEuMS0zLjgtMzYuMiA3LjItMjguNi0xLjktNTUuMS00LjgtNjguNy0yNC4yLTEwLjYtMTUuNC0yMS40LTQxLjQtMjYuMy02MS40em0yMjIgMTI0LjFjNC4xLTMgMTEuMS0yLjkgMTcuNC0zLjYtNS40LTIuNy0xMy0zLjctMTkuMy0yLjItLjEtNC4yLTItNi44LTMuMi0xMC4yIDEwLjYtMy44IDM1LjUtMjguNSA0OS42LTIwLjMgNi43IDMuOSA5LjUgMjYuMiAxMC4xIDM3IC40IDktLjggMTgtNC41IDIyLjgtMTguOC0uNi0zNS44LTIuOC01MC43LTcgLjktNi4xLTEtMTIuMSAuNi0xNi41em0tMTcuMi0yMGMtMTYuOCAuOC0yNi0xLjItMzguMy0xMC44IC4yLS44IDEuNC0uNSAxLjUtMS40IDE4IDggNDAuOC0zLjMgNTktNC45LTcuOSA1LjEtMTQuNiAxMS42LTIyLjIgMTcuMXptLTEyLjEgMzMuMmMtMS42LTkuNC0zLjUtMTItMi44LTIwLjIgMjUtMTYuNiAyOS43IDI4LjYgMi44IDIwLjJ6TTE5NC4zIDQzOC42Yy0xMS42LS43LTQ4LjEtMTQtMzguNS0yMy43IDkuNCA2LjUgMjcuNSA0LjkgNDEuMyA3LjMgLjggNC40LTIuOCAxMC4yLTIuOCAxNi40ek0yNiA0OTcuMWMtNC4zLTEyLjctOS4yLTI1LjEtMTQuOC0zNi45IDMwLjgtMjMuOCA2NS4zLTQ4LjkgMTAyLjItNjMuNSAyLjgtMS4xIDIzLjIgMjUuNCAyNi4yIDI3LjYgMTYuNSAxMS43IDM3IDIxIDU2LjIgMzAuMiAxLjIgOC44IDMuOSAyMC4yIDguNyAzNS41IC43IDIuMyAxLjQgNC43IDIuMiA3LjJsLTE4MC43IDAgMC0uMXptMjQwLjYgNS43bC0uOCAwYy4zLS4yIC41LS40IC44LS41bDAgLjV6bTcuNS01LjdjMi4xLTEuNCA0LjMtMi44IDYuNC00LjMgMS4xIDEuNCAyLjIgMi44IDMuMiA0LjNsLTkuNiAwem0xNS4xLTI0LjdjLTEwLjggNy4zLTIwLjYgMTguMy0zMy4zIDI1LjItNiAzLjMtMjcgMTEuNy0zMy40IDEwLjItMy42LS44LTMuOS01LjMtNS40LTkuNS0zLjEtOS0xMC4xLTIzLjQtMTAuOC0zNy0uOC0xNy4yLTIuNS00NiAxNi00Mi40IDE0LjkgMi45IDMyLjMgOS43IDQzLjkgMTYuMSA3LjEgMy45IDExLjEgOC42IDIxLjkgOS41LS4xIDEuNC0uMSAyLjgtLjIgNC4zLTUuOSAzLjktMTUuMyAzLjgtMjEuOCA3LjEgOS41IC40IDE3IDIuNyAyMy41IDUuOS0uMSAzLjQtLjMgNy0uNCAxMC42em01My40IDI0LjdsLTE0IDBjLS4xLTMuMi0yLjgtNS44LTYuMS01LjhzLTUuOSAyLjYtNi4xIDUuOGwtMTcuNCAwYy0yLjgtNC40LTUuNy04LjYtOC45LTEyLjUgMi4xLTIuMiA0LTQuNyA2LTYuOSA5IDMuNyAxNC44LTQuOSAyMS43LTQuMiA3LjkgLjggMTQuMiAxMS43IDI1LjQgMTFsLS42IDEyLjZ6bTguNyAwYy4yLTQgLjQtNy44IC42LTExLjUgMTUuNi03LjMgMjkgMS4zIDM1LjcgMTEuNWwtMzYuMyAwem04My40LTM3Yy0yLjMgMTEuMi01LjggMjQtOS45IDM3LjEtLjItLjEtLjQtLjEtLjYtLjFsLTI3LjkgMGMuNi0xLjEgMS4yLTIuMiAxLjktMy4zLTIuNi02LjEtOS04LjctMTAuOS0xNS41IDEyLjEtMjIuNyA2LjUtOTMuNC0yNC4yLTc4LjUgNC4zLTYuMyAxNS42LTExLjUgMjAuOC0xOS4zIDEzIDEwLjQgMjAuOCAyMC4zIDMzLjIgMzEuNCA2LjggNiAyMCAxMy4zIDIxLjQgMjMuMSAuOCA1LjUtMi42IDE4LjktMy44IDI1LjF6TTE5MC41IDEzMC41YzUuNC0xNC45IDI3LjItMzQuNyA0NS0zMiA3LjcgMS4yIDE4IDguMiAxMi4yIDE3LjctMzAuMi03LTQ1LjIgMTIuNi01NC40IDMzLjEtOC4xLTItNC45LTEzLjEtMi44LTE4Ljh6bTE4NC4xIDYzLjFjOC4yLTMuNiAyMi40LS43IDI5LjYtNS4zLTQuMi0xMS41LTEwLjMtMjEuNC05LjMtMzcuNyAuNSAwIDEgMCAxLjQgLjEgNi44IDE0LjIgMTIuNyAyOS4yIDIxLjQgNDEuNy01LjcgMTMuNS00My42IDI1LjQtNDMuMSAxLjJ6bS05Ni44IDIuN2MtNi44LTEwLjktMTktMzIuNS0xNC41LTQ1LjMgNi41IDExLjkgOC42IDI0LjQgMTcuOCAzMy4zIDQuMSA0IDEyLjIgOSA4LjIgMjAuMi0uOSAyLjctNy44IDguNi0xMS43IDkuNy0xNC40IDQuMy00Ny45IC45LTM2LjYtMTcuMSAxMS45IC43IDI3LjkgNy44IDM2LjgtLjh6bTI3LjMgNzBjMy44IDYuNiAxLjQgMTguNyAxMi4xIDIwLjYgMjAuMiAzLjQgNDMuNi0xMi4zIDU4LjEtMTcuOCA5LTE1LjItLjgtMjAuNy04LjktMzAuNS0xNi42LTIwLTM4LjgtNDQuOC0zOC03NC43IDYuNy00LjkgNy4zIDcuNCA4LjIgOS43IDguNyAyMC4zIDMwLjQgNDYuMiA0Ni4zIDYzLjUgMy45IDQuMyAxMC4zIDguNCAxMSAxMS4yIDIuMSA4LjItNS40IDE4LTQuNSAyMy41LTIxLjcgMTMuOS00NS44IDI5LjEtODEuNCAyNS42LTcuNC02LjctMTAuMy0yMS40LTIuOS0zMS4xem0tMjAxLjMtOS4yYy02LjgtMy45LTguNC0yMS0xNi40LTIxLjQtMTEuNC0uNy05LjMgMjIuMi05LjMgMzUuNS03LjgtNy4xLTkuMi0yOS4xLTMuNS00MC4zLTYuNi0zLjItOS41IDMuNi0xMy4xIDUuOSA0LjctMzQuMSA0OS44LTE1LjggNDIuMyAyMC4zem0yOTkuNiAyOC44Yy0xMC4xIDE5LjItMjQuNCA0MC40LTU0IDQxLS42LTYuMi0xLjEtMTUuNiAwLTE5LjQgMjIuNy0yLjIgMzYuNi0xMy43IDU0LTIxLjZ6TTI2MS41IDI5OC4zYzE4LjkgOS45IDUzLjYgMTEgNzkuMyAxMC4yIDEuNCA1LjYgMS4zIDEyLjYgMS40IDE5LjQtMzMgMS44LTcyLTYuNC04MC43LTI5LjZ6TTM1My43IDM0NWMtMS43IDQuMy01LjMgOS4zLTkuOCAxMS4xLTEyLjEgNC45LTQ1LjYgOC43LTYyLjQtLjMtMTAuNy01LjctMTcuNS0xOC41LTIzLjQtMjYtMi44LTMuNi0xNi45LTEyLjktLjItMTIuOSAxMy4xIDMyLjcgNTggMjkgOTUuOCAyOC4xeiJdCiAgICB9OwogICAgZmFTbGlkZXNoYXJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNsaWRlc2hhcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFlNyIsICJNMTg3LjkgMTUzLjdjLTM0IDAtNjEuNyAyNS43LTYxLjcgNTcuNyAwIDMxLjcgMjcuNyA1Ny43IDYxLjcgNTcuN3M2MS43LTI2IDYxLjctNTcuN2MwLTMyLTI3LjctNTcuNy02MS43LTU3Ljd6bTE0My40IDBjLTM0IDAtNjEuNyAyNS43LTYxLjcgNTcuNyAwIDMxLjcgMjcuNyA1Ny43IDYxLjcgNTcuNyAzNC4zIDAgNjEuNy0yNiA2MS43LTU3LjcgLjEtMzItMjcuNC01Ny43LTYxLjctNTcuN3ptMTU2LjYgOTBsLTYgNC4zIDAtMTk4LjNjMC0yNy40LTIwLjYtNDkuNy00Ni00OS43TDc2LjggMGMtMjUuNCAwLTQ2IDIyLjMtNDYgNDkuN2wwIDE5OC4zYy0yLTEuNC00LjMtMi45LTYuMy00LjMtMTUuMS0xMC42LTI1LjEgNC0xNiAxNy43IDE4LjMgMjIuNiA1My4xIDUwLjMgMTA2LjMgNzItNTYuMyAxOTEuNyAxMzcuNCAyMjIuMyAxMzQuMyAxMjQuMSAwLS43IC4zLTU2LjYgLjMtOTYuNiA1LjEgMS4xIDkuNCAyLjMgMTMuNyAzLjEgMCAzOS43IC4zIDkyLjggLjMgOTMuNS0zLjEgOTguMyAxOTAuNiA2Ny43IDEzNC4zLTEyNCA1My4xLTIxLjcgODgtNDkuNCAxMDYuMy03MiA5LjEtMTMuOC0uOS0yOC4zLTE2LjEtMTcuOHptLTMwLjUgMTkuMmMtNjguOSAzNy40LTEyOC4zIDMxLjEtMTYwLjYgMjkuNy0yMy43LS45LTMyLjYgOS4xLTMzLjcgMjQuOS0xMC4zLTcuNy0xOC42LTE1LjUtMjAuMy0xNy4xLTUuMS01LjQtMTMuNy04LTI3LjEtNy43LTMxLjcgMS4xLTg5LjcgNy40LTE1Ny40LTI4bDAtMTkyLjRjMC0zNC45IDguOS00NS43IDQwLjYtNDUuN2wzMTcuNyAwYzMwLjMgMCA0MC45IDEyLjkgNDAuOSA0NS43bDAgMTkwLjYtLjEgMHoiXQogICAgfTsKICAgIGZhVWJlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1YmVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0MDIiLCAiTTQxNC4xIDMyTDMzLjkgMzJDMTUuMiAzMiAwIDQ3LjIgMCA2NS45TDAgNDQ2YzAgMTguOCAxNS4yIDM0IDMzLjkgMzRMNDE0IDQ4MGMxOC43IDAgMzMuOS0xNS4yIDMzLjktMzMuOWwwLTM4MC4yQzQ0OCA0Ny4yIDQzMi44IDMyIDQxNC4xIDMyek0yMzcuNiAzOTEuMUMxNjMgMzk4LjYgOTYuNCAzNDQuMiA4OC45IDI2OS42bDk0LjQgMCAwIDIwLjRjMCAzLjcgMyA2LjggNi44IDYuOGw2Ny45IDBjMy43IDAgNi44LTMgNi44LTYuOGwwLTY3LjljMC0zLjctMy02LjgtNi44LTYuOGwtNjcuOSAwYy0zLjcgMC02LjggMy02LjggNi44bDAgMjAuNC05NC40IDBjNy02OS40IDY1LjQtMTIyLjIgMTM1LjEtMTIyLjJzMTI4LjEgNTIuOCAxMzUuMSAxMjIuMmM3LjUgNzQuNS00Ni45IDE0MS4xLTEyMS41IDE0OC42eiJdCiAgICB9OwogICAgZmFEaWdpdGFsT2NlYW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGlnaXRhbC1vY2VhbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzkxIiwgIk04NyA0ODEuOGw3My43IDAgMC03My42LTczLjcgMCAwIDczLjZ6TTI1LjQgMzQ2LjZsMCA2MS42IDYxLjYgMCAwLTYxLjYtNjEuNiAwek00OTEuNiAxNzYuOUM0NjguNiAxMDIuNyA0MDkuMiA0My42IDMzNSAyMC4zIDE2NC45LTMyLjggOCA5My43IDggMjU1LjlsOTUuOCAwYzAtMTAxLjggMTAxLTE4MC41IDIwOC4xLTE0MS43IDM5LjcgMTQuMyA3MS41IDQ2LjEgODUuOCA4NS43IDM5LjEgMTA3LTM5LjcgMjA3LjgtMTQxLjQgMjA4bDAgLjMtLjMgMCAwIDk1LjhjMTYyLjYgMCAyODguOC0xNTYuOCAyMzUuNi0zMjcuMXptLTIzNS4zIDIzMWwwLTk1LjMtOTUuNiAwIDAgOTUuNiA5NS4zIDAgMC0uMyAuMyAweiJdCiAgICB9OwogICAgZmFTb3VuZGNsb3VkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNvdW5kY2xvdWQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjFiZSIsICJNNjQwLjIgMjk4LjZjLTEuMyAyMy4xLTExLjUgNDQuOC0yOC40IDYwLjVzLTM5LjIgMjQuNC02Mi4zIDI0LjFsLTIxOCAwYy00LjggMC05LjQtMi0xMi44LTUuNHMtNS4zLTgtNS4zLTEyLjhsMC0yMzQuOGMtLjItNCAuOS04IDMuMS0xMS40czUuMy02LjEgOS03LjdjMCAwIDIwLjEtMTMuOSA2Mi4zLTEzLjkgMjUuOCAwIDUxLjEgNi45IDczLjMgMjAuMSAxNy4zIDEwLjIgMzIuMyAyMy44IDQ0LjEgNDAuMXMyMCAzNC44IDI0LjIgNTQuNGM3LjUtMi4xIDE1LjMtMy4yIDIzLjEtMy4yIDExLjctLjEgMjMuMyAyLjIgMzQuMiA2LjdzMjAuNSAxMS4zIDI4LjcgMTkuNyAxNC42IDE4LjMgMTguOSAyOS4zIDYuMyAyMi42IDUuOSAzNC4zem0tMzU0LTE1My41Yy4xLTEgMC0yLS4zLTIuOXMtLjgtMS44LTEuNS0yLjYtMS41LTEuMy0yLjQtMS43Yy0xLjgtLjgtNC0uOC01LjggMC0uOSAuNC0xLjcgMS0yLjQgMS43cy0xLjIgMS42LTEuNSAyLjYtLjQgMS45LS4zIDIuOWMtNiA3OC45LTEwLjYgMTUyLjkgMCAyMzEuNiAuMiAxLjcgMSAzLjMgMi4zIDQuNSAyLjYgMi40IDYuOCAyLjQgOS40IDAgMS4zLTEuMiAyLjEtMi44IDIuMy00LjUgMTEuMy03OS40IDYuNi0xNTIgMC0yMzEuNmwuMiAwem0tNDQgMjcuM2MtLjItMS44LTEuMS0zLjUtMi40LTQuN3MtMy4xLTEuOS01LTEuOS0zLjYgLjctNSAxLjktMi4yIDIuOS0yLjQgNC43Yy03LjkgNjcuOS03LjkgMTM2LjUgMCAyMDQuNCAuMyAxLjggMS4yIDMuNCAyLjUgNC41czMuMSAxLjggNC44IDEuOCAzLjUtLjYgNC44LTEuOCAyLjItMi44IDIuNS00LjVjOC44LTY3LjggOC44LTEzNi41IC4xLTIwNC40bC4xIDB6bS00NC4zLTYuOWMtLjItMS44LTEtMy40LTIuMy00LjZzLTMtMS44LTQuOC0xLjgtMy41IC43LTQuOCAxLjgtMi4xIDIuOC0yLjMgNC42Yy02LjcgNzItMTAuMiAxMzkuMyAwIDIxMS4xIDAgMS45IC43IDMuNyAyLjEgNXMzLjEgMi4xIDUgMi4xIDMuNy0uNyA1LTIuMSAyLjEtMy4xIDIuMS01YzEwLjUtNzIuOCA3LjMtMTM4LjIgLjEtMjExLjFsLS4xIDB6bS00NCAyMC42YzAtMS45LS44LTMuOC0yLjEtNS4ycy0zLjItMi4xLTUuMi0yLjEtMy44IC44LTUuMiAyLjEtMi4xIDMuMi0yLjEgNS4yYy04LjEgNjMuMy04LjEgMTI3LjUgMCAxOTAuOCAuMiAxLjggMSAzLjQgMi40IDQuNnMzLjEgMS45IDQuOCAxLjkgMy41LS43IDQuOC0xLjkgMi4yLTIuOCAyLjQtNC42YzguOC02My4zIDguOS0xMjcuNSAuMy0xOTAuOGwtLjEgMHptLTQ0LjUgNDcuNmMwLTEuOS0uOC0zLjgtMi4xLTUuMXMtMy4yLTIuMS01LjEtMi4xLTMuOCAuOC01LjEgMi4xLTIuMSAzLjItMi4xIDUuMWMtMTAuNSA0OS4yLTUuNSA5My45IC40IDE0My42IC4zIDEuNiAxLjEgMy4xIDIuMyA0LjJzMi44IDEuNyA0LjUgMS43IDMuMi0uNiA0LjUtMS43IDIuMS0yLjUgMi4zLTQuMmM2LjYtNTAuNCAxMS42LTk0LjEgLjQtMTQzLjZ6bS00NC4xLTcuNWMtLjItMS44LTEuMS0zLjUtMi40LTQuOHMtMy4yLTEuOS01LTEuOS0zLjYgLjctNSAxLjktMi4yIDIuOS0yLjQgNC44Yy05LjMgNTAuMi02LjIgOTQuNCAuMyAxNDQuNSAuNyA3LjYgMTMuNiA3LjUgMTQuNCAwIDcuMi01MC45IDEwLjUtOTMuOCAuMy0xNDQuNWwtLjIgMHpNMjAuNyAyNTAuOGMtLjItMS44LTEuMS0zLjUtMi40LTQuOHMtMy4yLTEuOS01LTEuOS0zLjYgLjctNSAxLjktMi4zIDIuOS0yLjQgNC44Yy04LjUgMzMuNy01LjkgNjEuNiAuNiA5NS40IC4yIDEuNyAxIDMuMyAyLjMgNC40czIuOSAxLjggNC43IDEuOCAzLjQtLjYgNC43LTEuOCAyLjEtMi43IDIuMy00LjRjNy41LTM0LjUgMTEuMi02MS44IC40LTk1LjRsLS4yIDB6Il0KICAgIH07CiAgICBmYVNxdWFyZUZpZ21hID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1maWdtYSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlN2U0IiwgIk0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwek0xNzMuNyA5NmMtMzMgMC01OS44IDI2LjgtNTkuOCA1OS44IDAgMjEgMTAuOCAzOS40IDI3LjIgNTAuMS0xNi40IDEwLjctMjcuMiAyOS4xLTI3LjIgNTAuMXMxMC44IDM5LjUgMjcuMiA1MC4xYy0xNi40IDEwLjctMjcuMiAyOS4xLTI3LjIgNTAuMSAwIDMzLjEgMjcuMSA1OS44IDYwLjEgNTkuOCAzMy4yIDAgNjAuNi0yNi45IDYwLjYtNjAuM2wwLTU1LjdjMTAuNiA5LjggMjQuOCAxNS44IDQwLjQgMTUuOGwxLjEgMGMzMyAwIDU5LjgtMjYuOCA1OS44LTU5LjggMC0yMS0xMC44LTM5LjUtMjcuMi01MC4xIDE2LjQtMTAuNyAyNy4yLTI5LjEgMjcuMi01MC4xIDAtMzMtMjYuOC01OS44LTU5LjgtNTkuOEwxNzMuNyA5NnptNDEuNiAyMTkuOGwwIDM5LjljMCAyMi42LTE4LjYgNDEtNDEuMyA0MS0yMi40IDAtNDAuNy0xOC4yLTQwLjctNDAuNSAwLTIyLjMgMTguMS00MC40IDQwLjMtNDAuNGw0MS43IDB6bTAtMTAwLjNsMCA4MC45LTQxLjcgMGMtMjIuMy0uMS00MC4zLTE4LjItNDAuMy00MC41IDAtMjIuMyAxOC4xLTQwLjUgNDAuNS00MC41bDQxLjYgMHptNjAuOCAwYzIyLjMgMCA0MC41IDE4LjEgNDAuNSA0MC41cy0xOC4xIDQwLjUtNDAuNSA0MC41bC0xLjEgMGMtMjIuMyAwLTQwLjQtMTguMS00MC40LTQwLjVzMTguMS00MC41IDQwLjQtNDAuNWwxLjEgMHptLTYwLjgtMTkuM2wtNDEuNiAwYy0yMi4zIDAtNDAuNS0xOC4xLTQwLjUtNDAuNHMxOC4xLTQwLjUgNDAuNS00MC41bDQxLjYgMCAwIDgwLjl6bTYwLjgtODAuOWMyMi4zIDAgNDAuNSAxOC4xIDQwLjUgNDAuNXMtMTguMSA0MC40LTQwLjUgNDAuNGwtNDEuNSAwIDAtODAuOSA0MS41IDB6Il0KICAgIH07CiAgICBmYUNyZWF0aXZlQ29tbW9uc1NhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtc2EiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlZiIsICJNMjU1LjYgOEMzOTcuNCA4IDUwNCAxMTguMSA1MDQgMjU2IDUwNCA0MDMuMSAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS42IDUwNCA4IDM5NC41IDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4em0uOCA0NC43Yy0xMTguMiAwLTIwMy43IDk3LjktMjAzLjcgMjAzLjMgMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOCAuMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zek0xNDUuNyAyMjFjMTMtODMuOSA4MC41LTk1LjcgMTA4LjktOTUuNyA5OS44IDAgMTI3LjUgODIuNSAxMjcuNSAxMzQuMiAwIDYzLjYtNDEgMTMyLjktMTI4LjkgMTMyLjktMzguOSAwLTk5LjEtMjAtMTA5LjQtOTdsNjIuNSAwYzEuNSAzMC4xIDE5LjYgNDUuMiA1NC41IDQ1LjIgMjMuMyAwIDU4LTE4LjIgNTgtODIuOCAwLTgyLjUtNDkuMS04MC42LTU2LjctODAuNi0zMy4xIDAtNTEuNyAxNC42LTU1LjggNDMuOGwxOC4yIDAtNDkuMiA0OS4yLTQ5LTQ5LjIgMTkuNCAweiJdCiAgICB9OwogICAgZmFDaHJvbWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2hyb21lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNjgiLCAiTTAgMjU2YzAtNDYuNiAxMi41LTkwLjQgMzQuMy0xMjguOUwxNDQuMSAzMTguM2MyMS45IDM5LjIgNjMuOCA2NS43IDExMS45IDY1LjcgMTQuMyAwIDI3LjEtMi4zIDQwLjgtNi42TDIyMC41IDUwOS42Qzk1LjkgNDkyLjMgMCAzODUuMyAwIDI1NnptMzY1LjEgNjUuNmMxMi4zLTE5LjIgMTguOS00Mi41IDE4LjktNjUuNiAwLTM4LjItMTYuOC03Mi41LTQzLjMtOTZsMTUyLjcgMGMxMiAyOS42IDE4LjYgNjIuMSAxOC42IDk2IDAgMTQxLjQtMTE0LjYgMjU1LjEtMjU2IDI1NkwzNjUuMSAzMjEuNnpNNDc3LjggMTI4TDI1NiAxMjhjLTYyLjkgMC0xMTMuNyA0NC4xLTEyNS41IDEwMi43TDU0LjIgOTguNUMxMDEgMzguNSAxNzQgMCAyNTYgMCAzNTAuOCAwIDQzMy41IDUxLjUgNDc3LjggMTI4ek0zNDQgMjU2YTg4IDg4IDAgMSAxIC0xNzYgMCA4OCA4OCAwIDEgMSAxNzYgMHoiXQogICAgfTsKICAgIGZhVHJhZGVGZWRlcmF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRyYWRlLWZlZGVyYXRpb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUxMyIsICJNMjU2IDguOGEyNDcuMiAyNDcuMiAwIDEgMCAwIDQ5NC40IDI0Ny4yIDI0Ny4yIDAgMSAwIDAtNDk0LjR6bTAgMTEuNmEyMzUuNiAyMzUuNiAwIDEgMSAwIDQ3MS4yIDIzNS42IDIzNS42IDAgMSAxIDAtNDcxLjJ6TTQxMS4xIDE2My4xbDAtNDYuOC0xOTMuOCAwIDAgODEuNy0xNTUuMSAwIDM2LjcgNDYgMTE3LjcgMCAwIDE5Ni44IDQ4LjggMCAwLTE5NS44IDgzLjMgMCAwLTQ3LTgzLjMgMCAwLTM0LjggMTQ1LjcgMCAwLS4xem0tNzMuMyA0NS4xbDAgMjMuOS04Mi45IDAgMCAxOTcuNC0yNi44IDAgMC0xOTcuNC0xMjMuOCAwLTIwLjEtMjMuOSAxNDMuOSAwIDAtODAuNiAxNzEuOCAwIDAgMjQuNC0xNDUgMCAwIDU2LjIgODIuOSAwem0tMTYxLjMtNjlsLTEyLjQtMjAuNyAyLjEgMjMuOC0yMy41IDUuNCAyMy4zIDUuNC0yLjEgMjQgMTIuMy0yMC41IDIyLjIgOS41LTE1LjctMTguMSAxNS44LTE4LjEtMjIgOS4zem0tMjkuNi0xOS43bDkuMy0xMS41LTEyLjcgNS45LTgtMTIuNCAxLjcgMTMuOS0xNC4zIDMuOCAxMy43IDIuNy0uOCAxNC43IDYuOC0xMi4yIDEzLjggNS4zLTkuNS0xMC4yek0zMTIuMyAyNjQuN2wtMTMuMSA1LjYtNy4zLTEyLjIgMS4zIDE0LjItMTMuOSAzLjIgMTMuOSAzLjItMS4yIDE0LjIgNy4zLTEyLjIgMTMuMSA1LjUtOS40LTEwLjcgOS4zLTEwLjh6bTEwNi45LTc3LjJsLTIwLjkgOS4xLTEyLTE5LjYgMi4yIDIyLjctMjIuMyA1LjQgMjIuMiA0LjktMS44IDIyLjkgMTEuNS0xOS42IDIxLjIgOC44LTE1LjEtMTcgMTUtMTcuNnpNMjU2IDI5LjlhMjI2LjEgMjI2LjEgMCAxIDAgMCA0NTIuMiAyMjYuMSAyMjYuMSAwIDEgMCAwLTQ1Mi4yek0zNTAuNiAxOTZsMCA1MS04My4zIDAgMCAxOTUuNy01Mi43IDAgMC0xOTYuOC0xMTYuNyAwLTQwLTQ5LjkgMTU3LjQgMCAwLTgxLjYgMTk3LjggMCAwIDUwLjctMTQ1LjcgMCAwIDMwLjkgODMuMiAwek0yNTYgNDMuMmM2MC4zIDAgMTE0LjggMjUgMTUzLjYgNjUuMmwtMTk5LjEgMCAwIDgxLjYtMTU3LjQgMEM4MS4xIDEwNC44IDE2MS40IDQzLjIgMjU2IDQzLjJ6bTAgNDI3LjFjLTExNy45IDAtMjEzLjYtOTUuNi0yMTMuNi0yMTMuNSAwLTIxLjIgMy4xLTQxLjggOC45LTYxLjFsNDMuOCA1Ni4zIDExNC43IDAgMCAxOTYuOCA2NC42IDAgMC0xOTUuOCA4My4zIDAgMC02Mi43LTgzLjIgMCAwLTE5LjIgMTQ1LjYgMCAwLTUwLjhjMzAuOCAzNyA0OS4zIDg0LjYgNDkuMyAxMzYuNSAuMSAxMTcuOS05NS41IDIxMy41LTIxMy40IDIxMy41ek0xODYuOCAyNzVsLTExLTIxLjQgMS43IDI0LjUtMjMuNyAzLjkgMjMuOCA1LjktMy43IDIzLjggMTMtMjAuOSAyMS41IDEwLjgtMTUuOC0xOC44IDE2LjktMTcuMS0yMi43IDkuM3oiXQogICAgfTsKICAgIGZhVmFhZGluID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZhYWRpbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDA4IiwgIk0yMjQuNSAxNDAuN0MyMjYgMTIzLjEgMjI5LjQgODggMjc0LjMgODhsOTguNiAwYzIwLjcgMCAzMi4xLTcuOCAzMi4xLTIxLjZsMC0xMi4zYzAtMTIuMiA5LjMtMjIuMSAyMS41LTIyLjFTNDQ4IDQxLjkgNDQ4IDU0LjFsMCAzNi41YzAgNDIuOS0yMS41IDYyLTY2LjggNjJsLTEwMC41IDBjLTMwLjEgMC0zMyAxNC43LTMzIDI3LjEgMCAxLjMtLjEgMi41LS4yIDMuNy0uNyAxMi4zLTEwLjkgMjIuMi0yMy40IDIyLjJzLTIyLjctOS44LTIzLjQtMjIuMmMtLjEtMS4yLS4yLTIuNC0uMi0zLjcgMC0xMi4zLTMtMjcuMS0zMy0yNy4xbC0xMDAuNyAwQzIxLjUgMTUyLjYgMCAxMzMuNSAwIDkwLjZMMCA1NC4xQzAgNDEuOSA5LjQgMzIgMjEuNiAzMnMyMS41IDkuOSAyMS41IDIyLjFsMCAxMi4zQzQzLjEgODAuMiA1NC41IDg4IDc1LjIgODhsOTguNiAwYzQ0LjggMCA0OC4zIDM1LjEgNDkuOCA1Mi43bC45IDB6TTIyNCA0NTZjMTEuNSAwIDIxLjQtNyAyNS43LTE2LjMgMS4xLTEuOCA5Ny4xLTE2OS42IDk4LjItMTcxLjQgMTEuOS0xOS42LTMuMi00NC4zLTI3LjItNDQuMy0xMy45IDAtMjMuMyA2LjQtMjkuOCAyMC4zTDIyNCAzNjIgMTU3LjEgMjQ0LjNjLTYuNC0xMy45LTE1LjktMjAuMy0yOS44LTIwLjMtMjQgMC0zOS4xIDI0LjYtMjcuMiA0NC4zIDEuMSAxLjkgOTcuMSAxNjkuNiA5OC4yIDE3MS40IDQuMyA5LjMgMTQuMiAxNi4zIDI1LjcgMTYuM3oiXQogICAgfTsKICAgIGZhRGV2aWFudGFydCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkZXZpYW50YXJ0IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYxYmQiLCAiTTMyMCA5My4ybC05OC4yIDE3OS4xIDcuNCA5LjUgOTAuOCAwIDAgMTI3LjctMTYwLjkgMC0xMy41IDkuMi00My43IDg0Yy0uMyAwLTguNiA4LjYtOS4yIDkuMmwtOTIuNyAwIDAtOTMuMiA5My4yLTE3OS40LTcuNC05LjItODUuOCAwIDAtMTI3LjYgMTU2IDAgMTMuNS05LjIgNDMuNy04NGMuMyAwIDguNi04LjYgOS4yLTkuMmw5Ny42IDAgMCA5My4xeiJdCiAgICB9OwogICAgZmFNZWRpdW0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWVkaXVtIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjI0MDcsICJtZWRpdW0tbSJdLCAiZjIzYSIsICJNMzY5LjQgMzJjNDMuNCAwIDc4LjYgMzUuMiA3OC42IDc4LjZsMCA4My44Yy0xLjktLjEtMy44LS4yLTUuNy0uMmwtLjQgMGMtMTAgMC0yMi4zIDIuNC0zMS4xIDYuOC0xMCA0LjYtMTguNyAxMS41LTI2IDIwLjYtMTEuOCAxNC42LTE4LjkgMzQuMy0yMC42IDU2LjQtLjEgLjctLjEgMS4zLS4yIDJzLS4xIDEuMi0uMSAxLjljLS4xIDEuMi0uMSAyLjQtLjEgMy42IDAgMS45LS4xIDMuOCAwIDUuOCAxLjIgNTAuMSAyOC4yIDkwLjIgNzYuMyA5MC4yIDIuNyAwIDUuMy0uMSA3LjktLjRsMCAyMC40YzAgNDMuNC0zNS4yIDc4LjYtNzguNiA3OC42TDc4LjYgNDgwQzM1LjIgNDgwIDAgNDQ0LjggMCA0MDEuNEwwIDExMC42QzAgNjcuMiAzNS4yIDMyIDc4LjYgMzJsMjkwLjggMHpNODIuMyAxMzguOWwuMyAuMWMxMy4yIDMgMTkuOCA3LjQgMTkuOCAyMy40bDAgMTg3LjJjMCAxNi02LjcgMjAuNC0xOS45IDIzLjRsLS4zIC4xIDAgMi44IDUyLjggMCAwLTIuOC0uMy0uMWMtMTMuMi0zLTE5LjktNy40LTE5LjktMjMuNGwwLTE3Ni4zIDg2LjEgMjAyLjUgNC45IDAgODguNi0yMDguMiAwIDE4Ni42Yy0xLjEgMTIuNi03LjggMTYuNS0xOS43IDE5LjJsLS4zIC4xIDAgMi43IDkxLjkgMCAwLTIuNy0uMy0uMWMtMTEuOS0yLjctMTguNy02LjYtMTkuOS0xOS4ybC0uMS0xOTEuOCAuMSAwYzAtMTYgNi43LTIwLjQgMTkuOS0yMy40bC4zLS4xIDAtMi43LTcyLjIgMC02NyAxNTcuNC02Ny0xNTcuNC03Ny44IDAgMCAyLjd6TTQ0OCAzNDAuM2MtMjUuMS03LjQtNDMtMzUuMS00MS4yLTY3LjhsMCAwIDQxLjEgMCAwIDY3Ljh6bS02LjQtMTM1LjZjMi4zIDAgNC40IC4zIDYuNCAuOWwwIDU3LjQtNDAuMiAwYzEuNS0zMy42IDEzLjYtNTcuOSAzMy44LTU4LjN6Il0KICAgIH07CiAgICBmYU1lZGl1bU0gPSBmYU1lZGl1bTsKICAgIGZhT3BlbmNhcnQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib3BlbmNhcnQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjIzZCIsICJNMzMxLjggNDQwLjRhNDUuOCA0NS44IDAgMSAxIDkxLjUgLjMgNDUuOCA0NS44IDAgMSAxIC05MS41LS4zek0xNjkuNCAzOTQuOWE0NS43IDQ1LjcgMCAxIDAgLjMgOTEuMyA0NS43IDQ1LjcgMCAxIDAgLS4zLTkxLjN6bTI5MS43LTI3MGMtMzAyLjIgMC0zNzkuMi0xMi44LTQ2MS4xLTk5LjIgMzQuNCA1MS43IDUzLjMgMTQ4LjkgMzczLjEgMTQ0LjIgMzMzLjMtNSAxMzAgODYuMSA3MC44IDE4OC45IDE4Ni43LTE2Ni43IDMxOS40LTIzMy45IDE3LjItMjMzLjl6Il0KICAgIH07CiAgICBmYVlDb21iaW5hdG9yID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInktY29tYmluYXRvciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjNiIiwgIk00NDggMzJsMCA0NDgtNDQ4IDAgMC00NDggNDQ4IDB6TTIzNiAyODcuNWw3Ny41LTE0NS41LTMyLjcgMC00NS44IDkxYy00LjcgOS4zLTkgMTguMy0xMi44IDI2LjhsLTEyLjItMjYuOC00NS4yLTkxLTM1IDAgNzYuNyAxNDMuOCAwIDk0LjUgMjkuNSAwIDAtOTIuOHoiXQogICAgfTsKICAgIGZhTGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsaW5lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzYzAiLCAiTTMxMSAxOTYuOGwwIDgxLjNjMCAyLjEtMS42IDMuNy0zLjcgMy43bC0xMyAwYy0xLjMgMC0yLjQtLjctMy0xLjVMMjU0IDIzMCAyNTQgMjc4LjJjMCAyLjEtMS42IDMuNy0zLjcgMy43bC0xMyAwYy0yLjEgMC0zLjctMS42LTMuNy0zLjdsMC04MS4zYzAtMi4xIDEuNi0zLjcgMy43LTMuN2wxMi45IDBjMS4xIDAgMi40IC42IDMgMS42bDM3LjMgNTAuMyAwLTQ4LjJjMC0yLjEgMS42LTMuNyAzLjctMy43bDEzIDBjMi4xLS4xIDMuOCAxLjYgMy44IDMuNWwwIC4xem0tOTMuNy0zLjdsLTEzIDBjLTIuMSAwLTMuNyAxLjYtMy43IDMuN2wwIDgxLjNjMCAyLjEgMS42IDMuNyAzLjcgMy43bDEzIDBjMi4xIDAgMy43LTEuNiAzLjctMy43bDAtODEuM2MwLTEuOS0xLjYtMy43LTMuNy0zLjd6bS0zMS40IDY4LjFsLTM1LjYgMCAwLTY0LjRjMC0yLjEtMS42LTMuNy0zLjctMy43bC0xMyAwYy0yLjEgMC0zLjcgMS42LTMuNyAzLjdsMCA4MS4zYzAgMSAuMyAxLjggMSAyLjUgLjcgLjYgMS41IDEgMi41IDFsNTIuMiAwYzIuMSAwIDMuNy0xLjYgMy43LTMuN2wwLTEzYzAtMS45LTEuNi0zLjctMy41LTMuN2wuMSAwem0xOTMuNy02OC4xbC01Mi4zIDBjLTEuOSAwLTMuNyAxLjYtMy43IDMuN2wwIDgxLjNjMCAxLjkgMS42IDMuNyAzLjcgMy43bDUyLjIgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC0xMy4xYzAtMi4xLTEuNi0zLjctMy43LTMuN2wtMzUuNSAwIDAtMTMuNiAzNS41IDBjMi4xIDAgMy43LTEuNiAzLjctMy43bDAtMTMuMWMwLTIuMS0xLjYtMy43LTMuNy0zLjdsLTM1LjUgMCAwLTEzLjcgMzUuNSAwYzIuMSAwIDMuNy0xLjYgMy43LTMuN2wwLTEzYy0uMS0xLjktMS43LTMuNy0zLjctMy43bC4xIDB6TTUxMiA5My40bDAgMzI2Yy0uMSA1MS4yLTQyLjEgOTIuNy05My40IDkyLjZsLTMyNiAwQzQxLjQgNTExLjktLjEgNDY5LjggMCA0MTguNmwwLTMyNkMuMSA0MS40IDQyLjItLjEgOTMuNCAwbDMyNiAwYzUxLjIgLjEgOTIuNyA0Mi4xIDkyLjYgOTMuNHpNNDQxLjYgMjMzLjVjMC04My40LTgzLjctMTUxLjMtMTg2LjQtMTUxLjNTNjguOCAxNTAuMSA2OC44IDIzMy41YzAgNzQuNyA2Ni4zIDEzNy40IDE1NS45IDE0OS4zIDIxLjggNC43IDE5LjMgMTIuNyAxNC40IDQyLjEtLjggNC43LTMuOCAxOC40IDE2LjEgMTAuMXMxMDcuMy02My4yIDE0Ni41LTEwOC4yYzI3LTI5LjcgMzkuOS01OS44IDM5LjktOTMuMWwwLS4yeiJdCiAgICB9OwogICAgZmFBbWlsaWEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYW1pbGlhIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzNmQiLCAiTTI0MC4yIDMyYy02MS45IDAtMTMxLjUgMTYuOS0xODQuMiA1NS40LTUuMSAzLjEtOS4xIDkuMi03LjIgMTkuNCAxLjEgNS4xIDUuMSAyNy40IDEwLjIgMzkuNiA0LjEgMTAuMiAxNC4yIDEwLjIgMjAuMyA2LjEgMzIuNS0yMi4zIDk2LjUtNDcuNyAxNTIuMy00Ny43IDU3LjkgMCA1OC45IDI4LjQgNTguOSA3My4xbDAgMzguNUMyMDMuMSAyMjcuNyA3OC4zIDI1MSA0Ni44IDI2NC4yIDExLjMgMjgwLjUgMTYuNCAzNTcuNyAxNi40IDM3NlMzMS42IDQ4MCAxNDEuMyA0ODBjNDcuOCAwIDExMy43LTIwLjcgMTUzLjMtNDIuMWwwIDI1LjRjMCAzIDIuMSA4LjIgNi4xIDkuMSAzLjEgMSA1MC43IDIgNTkuOSAyczYyLjUgLjMgNjYuNS0uN2M0LjEtMSA1LjEtNi4xIDUuMS05LjFsMC0yOTYuNmMtLjEtODAuMy01Ny45LTEzNi0xOTItMTM2em01MC4yIDM0OGMtMjEuNCAxMy4yLTQ4LjcgMjQuNC03OS4xIDI0LjQtNTIuOCAwLTU4LjktMzMuNS01OS00NC43IDAtMTIuMi0zLTQyLjcgMTguMy01Mi45IDI0LjMtMTMuMiA3NS4xLTI5LjQgMTE5LjgtMzMuNWwwIDEwNi43eiJdCiAgICB9OwogICAgZmFBc3ltbWV0cmlrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFzeW1tZXRyaWsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjM3MiIsICJNNTE3LjUgMzA5LjJjMzguOC00MCA1OC4xLTgwIDU4LjUtMTE2LjEgLjgtNjUuNS01OS40LTExOC4yLTE2OS40LTEzNS0xMjguNy0xOS43LTI4OC41IDE1LjUtNDA2LjYgODIuNCA1Mi0yNi41IDExMC42LTQ4LjIgMTcwLjctNTguMiA3NC41LTIwLjUgMTUzLTI1LjQgMjIxLjMtMTQuOCAxNTIuNSAyMy44IDE5Ni44IDEyNy41IDk4LjggMjMxLjctMTAuMiAxMC44LTIyIDIxLjEtMzUgMzAuNkwzMDQuOSAxMDMuNCAxMTQuNyAzODguOWMtNjUuNi0yOS40LTc2LjUtOTAuMi0xOS4xLTE1MS4yIDIwLjgtMjIuMiA0OC4zLTQxLjkgNzkuNS01OC4xIDIwLTEyLjIgMzkuNy0yMi42IDYyLTMwLjctNjUuMSAyMC4zLTEyMi43IDUyLjktMTYxLjYgOTIuOS0yNy43IDI4LjYtNDEuNCA1Ny4xLTQxLjcgODIuOS0uNSAzNS4xIDIzLjQgNjUuMSA2OC40IDgzbC0zNC41IDUxLjcgMTAxLjYgMCAyMi0zNC40YzIyLjIgMSA0NS4zIDAgNjguNi0yLjdsLTIyLjggMzcuMSAxMzUuNSAwLTMyLjYtNTMuMWMxOC42LTUuMyAzNi45LTExLjUgNTQuNS0xOC43bDQ1LjkgNzEuOCAxMDEuNiAwLTczLjQtMTEwLjRjMTguNS0xMi4xIDM1LTI1LjUgNDguOS0zOS44ek0zMjkuOSAzODkuN2wtMjUtNDAuNi0zMi43IDUzLjNjLTIzLjQgMy41LTQ2LjcgNS4xLTY5LjIgNC40bDEwMS45LTE1OS4zIDc4LjcgMTIzYy0xNy4yIDcuNC0zNS4zIDEzLjktNTMuNyAxOS4yeiJdCiAgICB9OwogICAgZmFQaGFicmljYXRvciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaGFicmljYXRvciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2RiIiwgIk0zMzEuMSAyNjIuMWwtLjEtMTNzMjEuNy0xOS44IDIxLjEtMjEuMmwtOS41LTIwYy0uNi0xLjQtMjkuNS0uNS0yOS41LS41bC05LjQtOS4zcy4yLTI4LjUtMS4yLTI5LjFsLTIwLjEtOS4yYy0xLjQtLjYtMjAuNyAyMS0yMC43IDIxbC0xMy4xLS4ycy0yMC41LTIxLjQtMjEuOS0yMC44bC0yMCA4LjNjLTEuNCAuNSAuMiAyOC45IC4yIDI4LjlsLTkuMSA5LjFzLTI5LjItLjktMjkuNyAuNEwxNjAgMjI2LjNjLS42IDEuNCAyMSAyMSAyMSAyMWwuMSAxMi45UzE1OS40IDI4MCAxNjAgMjgxLjRsOS41IDIwYy42IDEuNCAyOS41IC41IDI5LjUgLjVsOS40IDkuM3MtLjIgMzEuOCAxLjIgMzIuM2wyMC4xIDguM2MxLjQgLjYgMjAuNy0yMy41IDIwLjctMjMuNWwxMy4xIC4yczIwLjUgMjMuOCAyMS44IDIzLjNsMjAtNy41YzEuNC0uNi0uMi0zMi4xLS4yLTMyLjFsOS4xLTkuMXMyOS4yIC45IDI5LjctLjVsOC4xLTE5LjhjLjctMS4xLTIwLjktMjAuNy0yMC45LTIwLjd6bS00NC45LTguN2MuNyAxNy4xLTEyLjggMzEuNi0zMC4xIDMyLjRzLTMyLjEtMTIuNS0zMi44LTI5LjYgMTIuOC0zMS42IDMwLjEtMzIuM2MxNy4zLS44IDMyLjEgMTIuNSAzMi44IDI5LjV6bTIwMS4yLTM3LjlsLTk3LTk3LS4xIC4xYy03NS4xLTczLjMtMTk1LjQtNzIuOC0yNjkuOCAxLjYtNTAuOSA1MS0yNy44IDI3LjktOTUuNyA5NS4zLTIyLjMgMjIuMy0yMi4zIDU4LjcgMCA4MSA2OS45IDY5LjQgNDYuNCA0NiA5Ny40IDk3bC4xLS4xYzc1LjEgNzMuMyAxOTUuNCA3Mi45IDI2OS44LTEuNiA1MS01MC45IDI3LjktMjcuOSA5NS4zLTk1LjMgMjIuMy0yMi4zIDIyLjMtNTguNyAwLTgxek0zNjMuNSAxNDguMmExNTIuMyAxNTIuMyAwIDEgMSAtMjE1IDIxNS42IDE1Mi4zIDE1Mi4zIDAgMSAxIDIxNS0yMTUuNnoiXQogICAgfTsKICAgIGZhQm90cyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJib3RzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUzNDAiLCAiTTg2LjMgMTk3LjhjLTgtLjEtMTUuOSAxLjctMjMuMSA1LjFzLTEzLjUgOC42LTE4LjQgMTQuOWwwLTYxLjljMC0yLjItLjktNC4zLTIuNC01LjhzLTMuNi0yLjQtNS44LTIuNGwtMjguNCAwYy0yLjIgMC00LjMgLjktNS44IDIuNFMwIDE1My44IDAgMTU2TDAgMzMzLjZjMCAxLjEgLjIgMi4xIC42IDMuMXMxIDEuOSAxLjggMi43IDEuNyAxLjQgMi43IDEuOCAyLjEgLjYgMy4xIC42bDI4LjQgMGMxLjEgMCAyLjEtLjIgMy4xLS42czEuOS0xIDIuNy0xLjggMS40LTEuNyAxLjgtMi43IC42LTIuMSAuNi0zLjFsMC04LjFjMTEuNiAxMy40IDI1LjkgMTkuOCA0MS42IDE5LjggMzQuNiAwIDYxLjktMjYuMiA2MS45LTczLjggMC00NS45LTI3LTczLjYtNjEuOS03My42ek03MS41IDMwNS43Yy05LjYgMC0yMS4yLTQuOS0yNi43LTEyLjVsMC00M2M1LjUtNy42IDE3LjItMTIuOCAyNi43LTEyLjggMTcuNyAwIDMxLjEgMTMuMSAzMS4xIDM0IDAgMjEuMi0xMy40IDM0LjMtMzEuMSAzNC4zem0xNTYuNC01OWExNy40IDE3LjQgMCAxIDAgMCAzNC44IDE3LjQgMTcuNCAwIDEgMCAwLTM0Ljh6bTQ2LjEtOTBsMC00NC43YzIuOC0xLjIgNS4yLTMuMyA2LjYtNnMxLjktNS44IDEuMy04LjktMi4yLTUuNy00LjYtNy43LTUuNC0zLTguNC0zLTYuMSAxLjEtOC40IDMtNCA0LjctNC42IDcuNy0uMSA2LjEgMS4zIDguOSAzLjggNC44IDYuNiA2bDAgNDQuN2MtMjggMS4zLTU0LjQgMTMuNi03My42IDM0LjFzLTI5LjUgNDcuNy0yOC44IDc1LjggMTIuMyA1NC43IDMyLjQgNzQuMyA0NyAzMC42IDc1LjEgMzAuNiA1NS0xMSA3NS4xLTMwLjYgMzEuNy00Ni4zIDMyLjQtNzQuMy05LjctNTUuMy0yOC44LTc1LjgtNDUuNS0zMi44LTczLjYtMzQuMXptODYgMTA3LjRjMCAzMC41LTQwLjggNTUuMy05MS4xIDU1LjNzLTkxLjEtMjQuNy05MS4xLTU1LjMgNDAuOC01NS4zIDkxLjEtNTUuMyA5MS4xIDI0LjcgOTEuMSA1NS4zbDAgMHptLTUwLjIgMTcuNGMzLjQgMCA2LjgtMSA5LjctMi45czUuMS00LjYgNi40LTcuOCAxLjctNi43IDEtMTAuMS0yLjMtNi41LTQuOC04LjktNS41LTQuMS04LjktNC44LTYuOS0uMy0xMC4xIDEtNS45IDMuNS03LjggNi40LTIuOSA2LjItMi45IDkuN2MwIDQuNiAxLjggOSA1LjEgMTIuM3M3LjcgNS4xIDEyLjMgNS4xbDAgMHptMjcwLjktMzFjLTE0LjgtMi42LTIyLjQtMy44LTIyLjQtOS45IDAtNS41IDcuMy05LjkgMTcuNy05LjkgMTIuMiAuMSAyNC4yIDMuNiAzNC41IDEwLjEgMS44IDEuMiA0IDEuNiA2LjIgMS4xczQtMS43IDUuMS0zLjZjLjEtLjEgLjEtLjIgLjItLjNsOC42LTE0LjljMS4xLTEuOSAxLjQtNC4xIC44LTYuMXMtMS45LTMuOS0zLjctNWMtMTUuNy05LjQtMzMuNy0xNC4zLTUyLTE0LjEtMzkgMC02MC4yIDIxLjUtNjAuMiA0Ni4yIDAgMzYuMyAzMy43IDQxLjkgNTcuNiA0NS42IDEzLjQgMi4zIDI0LjEgNC40IDI0LjEgMTEgMCA2LjQtNS41IDEwLjgtMTguOSAxMC44LTEzLjYgMC0zMS02LjItNDIuNi0xMy42LS45LS42LTEuOS0xLTMtMS4ycy0yLjEtLjItMy4yIC4xLTIuMSAuNy0yLjkgMS4zLTEuNiAxLjQtMi4yIDIuM2MwIC4xLS4xIC4xLS4xIC4ybC0xMC4yIDE2LjljLTEuMSAxLjgtMS40IDQtMSA2czEuNyAzLjkgMy41IDVjMTUuMiAxMC4zIDM3LjcgMTYuNyA1OS40IDE2LjcgNDAuNCAwIDY0LTE5LjggNjQtNDYuNSAwLTM4LjEtMzUuNS00My45LTU5LjMtNDguM3ptLTk1LjkgNjAuOGMtLjUtMi0xLjgtMy43LTMuNi00LjhzLTMuOS0xLjUtNS45LTEuMWMtMS40IC4zLTIuOCAuNC00LjIgLjQtNy44IDAtMTIuNS02LjEtMTIuNS0xNC4ybDAtNTEuMiAyMC4zIDBjMi4yIDAgNC4yLS45IDUuOC0yLjRzMi40LTMuNiAyLjQtNS44bDAtMjIuN2MwLTIuMi0uOS00LjItMi40LTUuOHMtMy42LTIuNC01LjgtMi40bC0yMC4zIDAgMC0zMC4yYzAtMi4yLS45LTQuMi0yLjQtNS44cy0zLjYtMi40LTUuOC0yLjRsLTI4LjIgMGMtMi4yIDAtNC4yIC45LTUuOCAyLjRzLTIuNCAzLjYtMi40IDUuOGwwIDMwLjItMTUuMSAwYy0xLjEgMC0yLjEgLjItMy4xIC42cy0xLjkgMS0yLjYgMS44LTEuNCAxLjctMS44IDIuNi0uNiAyLS42IDMuMWwwIDIyLjdjMCAxLjEgLjIgMi4xIC42IDMuMXMxIDEuOSAxLjggMi42IDEuNyAxLjQgMi42IDEuOCAyIC42IDMuMSAuNmwxNS4xIDAgMCA2My43YzAgMjcgMTUuNCA0MS4zIDQzLjkgNDEuMyAxMi4yIDAgMjEuNC0yLjIgMjcuNi01LjQgMS42LS44IDIuOS0yLjIgMy43LTMuOXMuOS0zLjYgLjUtNS40bC01LTE5LjN6Il0KICAgIH07CiAgICBmYVZpbmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidmluZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWNhIiwgIk0zODQgMjU0LjdsMCA1Mi4xYy0xOC40IDQuMi0zNi45IDYuMS01Mi4xIDYuMS0zNi45IDc3LjQtMTAzIDE0My44LTEyNS4xIDE1Ni4yLTE0IDcuOS0yNy4xIDguNC00Mi43LS44LTI3LjEtMTYuMy0xMjkuOS0xMDAuNi0xNjQuMS0zNjUuNmw3NC41IDBjMTguNyAxNTkuMSA2NC41IDI0MC43IDExNC44IDMwMS44IDI3LjktMjcuOSA1NC44LTY1LjEgNzUuNi0xMDYuOS00OS44LTI1LjMtODAuMS04MC45LTgwLjEtMTQ1LjYgMC02NS42IDM3LjctMTE1LjEgMTAyLjItMTE1LjEgMTE0LjkgMCAxMDYuMiAxMjcuOSA4MS42IDE4MS41IDAgMC00Ni40IDkuMi02My41LTIwLjUgMy40LTExLjMgOC4yLTMwLjggOC4yLTQ4LjUgMC0zMS4zLTExLjMtNDYuNi0yOC40LTQ2LjYtMTguMiAwLTMwLjggMTcuMS0zMC44IDUwIC4xIDc5LjIgNTkuNCAxMTguNyAxMjkuOSAxMDEuOXoiXQogICAgfTsKICAgIGZhTWVkcnQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWVkcnQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjNjOCIsICJNMTI5LjcgMjU2YzAgMTIxLjggODMuOSAyMjIuOCAxOTMuNSAyNDEuMS0xOC43IDQuNS0zOC4yIDYuOS01OC4yIDYuOS0xMzcuNiAwLTI0OS0xMTEtMjQ5LTI0OFMxMjcuNCA4IDI2NC45IDhjMjAuMSAwIDM5LjYgMi40IDU4LjIgNi45LTEwOS42IDE4LjMtMTkzLjQgMTE5LjMtMTkzLjQgMjQxLjF6TTQyNy4xIDM1Ni4zYy03Ny43IDU1LjQtMTc5LjYgNDcuNS0yNDAuNC0xNC42IDUuNSAxNC4xIDEyLjcgMjcuNyAyMS43IDQwLjUgNjEuNiA4OC4yIDE4Mi40IDEwOS4zIDI2OS43IDQ3czEwOC4xLTE4NC4zIDQ2LjUtMjcyLjZjLTktMTIuOS0xOS4zLTI0LjMtMzAuNS0zNC4yIDM3LjQgNzguOCAxMC43IDE3OC41LTY3IDIzMy45em0tMjE4LjgtMjQ0Yy0xLjQgMS0yLjcgMi4xLTQgMy4xIDY0LjMtMTcuOCAxMzUuOSA0IDE3OC45IDYwLjUgMzUuNyA0NyA0Mi45IDEwNi42IDI0LjQgMTU4IDU2LjctNTYuMiA2Ny42LTE0Mi4xIDIyLjMtMjAxLjgtNTAtNjUuNS0xNDkuMS03NC40LTIyMS42LTE5Ljh6TTMxMiAyMjRjLTQuNCAwLTgtMy42LTgtOGwwLTQwYzAtNC40LTMuNi04LTgtOGwtNDggMGMtNC40IDAtOCAzLjYtOCA4bDAgNDBjMCA0LjQtMy42IDgtOCA4bC00MCAwYy00LjQgMC04IDMuNi04IDhsMCA0OGMwIDQuNCAzLjYgOCA4IDhsNDAgMGM0LjQgMCA4IDMuNiA4IDhsMCA0MGMwIDQuNCAzLjYgOCA4IDhsNDggMGM0LjQgMCA4LTMuNiA4LThsMC00MGMwLTQuNCAzLjYtOCA4LThsNDAgMGM0LjQgMCA4LTMuNiA4LThsMC00OGMwLTQuNC0zLjYtOC04LThsLTQwIDB6Il0KICAgIH07CiAgICBmYU9zaSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvc2kiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQxYSIsICJNOCAyNjYuNGMyLjMtMTM1LjggOTcuNC0yMzIuNCAyMTMuOC0yNDguMSAxMzguOC0xOC42IDI1NS42IDc1LjggMjc4IDIwMS4xIDIxLjMgMTE4LjgtNDQgMjMwLTE1MS42IDI3NC05LjMgMy44LTE0LjQgMS43LTE4LTcuNy0xNy44LTQ2LjMtMzUuNi05Mi42LTUzLjQtMTM5LTMuMS04LjEtMS0xMy4yIDctMTYuOCAyNC4yLTExIDM5LjMtMjkuNCA0My4zLTU1LjggMS41LTkuNyAxLTE5LjYtMS41LTI5LjFzLTYuOS0xOC40LTEyLjktMjYuMS0xMy42LTE0LjEtMjIuMi0xOC44LTE4LjEtNy41LTI3LjktOC4zYy0zOS0zLjQtNzEuOCAyMy43LTc3LjUgNTkuNy01LjIgMzMgMTEuMSA2My43IDQxLjkgNzcuNyA5LjYgNC40IDExLjUgOC42IDcuOCAxOC40LTE3LjkgNDYuNi0zNS44IDkzLjItNTMuNyAxMzkuOS0yLjYgNi45LTguMyA5LjMtMTUuNSA2LjUtNTIuNi0yMC4zLTEwMS40LTYxLTEzMC44LTExOS0yNC45LTQ5LjItMjUuMi04Ny43LTI2LjgtMTA4Ljd6bTIwLjktMS45Yy40IDYuNiAuNiAxNC4zIDEuMyAyMi4xIDYuMyA3MS45IDQ5LjYgMTQzLjUgMTMxIDE4My4xIDMuMiAxLjUgNC40IC44IDUuNi0yLjMgMTQuOS0zOS4xIDI5LjktNzguMiA0NS0xMTcuMyAxLjMtMy4zIC42LTQuOC0yLjQtNi43LTMxLjYtMTkuOS00Ny4zLTQ4LjUtNDUuNi04NiAxLTIxLjYgOS4zLTQwLjUgMjMuOC01Ni4zIDMwLTMyLjcgNzctMzkuOCAxMTUuNS0xNy42IDE1LjYgOSAyOC4yIDIyLjMgMzYuMiAzOC40czExLjIgMzQuMiA5IDUyYy0zLjYgMzAuNi0xOS4zIDUzLjktNDUuNyA2OS44LTIuNyAxLjYtMy41IDIuOS0yLjMgNiAxNS4yIDM5LjIgMzAuMyA3OC40IDQ1LjIgMTE3LjcgMS4yIDMuMSAyLjQgMy44IDUuNiAyLjMgMzUuNS0xNi42IDY1LjItNDAuMyA4OC4xLTcyIDM0LjgtNDguMiA0OS4xLTEwMS45IDQyLjMtMTYxLTEzLjctMTE3LjUtMTE5LjQtMjE0LjgtMjU1LjUtMTk4LTEwNi4xIDEzLTE5NS4zIDEwMi41LTE5Ny4xIDIyNS44eiJdCiAgICB9OwogICAgZmFHZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjYwIiwgIk0xNzkuMiAyMzAuNGwxMDIuNCAxMDIuNC0xMDIuNCAxMDIuNC0xNzkuMi0xNzkuMiAxNzkuMi0xNzkuMiA0NC44IDQ0LjgtMjUuNiAyNS42LTE5LjItMTkuMi0xMjggMTI4IDEyOCAxMjggNTEuNS01MS41LTc3LjEtNzYuNSAyNS42LTI1LjZ6TTMzMi44IDc2LjhsLTEwMi40IDEwMi40IDEwMi40IDEwMi40IDI1LjYtMjUuNi03Ny4xLTc2LjUgNTEuNS01MS41IDEyOCAxMjgtMTI4IDEyOC0xOS4yLTE5LjItMjUuNiAyNS42IDQ0LjggNDQuOCAxNzkuMi0xNzkuMi0xNzkuMi0xNzkuMnoiXQogICAgfTsKICAgIGZhQnV5c2VsbGFkcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJidXlzZWxsYWRzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyMGQiLCAiTTIyNCAxNTAuN2w0Mi45IDE2MC43LTg1LjggMCA0Mi45LTE2MC43ek00NDggODBsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDM1MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0zODIuNyA0MDUuM2wtOTQuNS0yOTguNy0xMjguNCAwLTk0LjUgMjk4LjcgOTAuNyAwIDExMS43LTkxLjYgMjQuMiA5MS42IDkwLjggMHoiXQogICAgfTsKICAgIGZhR29vZ2xlUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnb29nbGUtcGx1cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMmIzIiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTE4NS4zIDM4MGMtMzIuOSAwLTY0LjQtMTMuMS04Ny43LTM2LjNzLTM2LjMtNTQuOC0zNi4zLTg3LjcgMTMuMS02NC40IDM2LjMtODcuNyA1NC44LTM2LjMgODcuNy0zNi4zYzMxLjMgMCA2MC4xIDExIDgzIDMyLjNsLTMzLjYgMzIuNmMtMTMuMi0xMi45LTMxLjMtMTkuMS00OS40LTE5LjEtNDIuOSAwLTc3LjIgMzUuNS03Ny4yIDc4LjFTMTQyLjMgMzM0IDE4NS4zIDMzNGMzMi42IDAgNjQuOS0xOS4xIDcwLjEtNTMuM2wtNzAuMSAwIDAtNDIuNiAxMTYuOSAwYzEuMyA2LjggMS45IDEzLjggMS45IDIwLjcgMCA3MC44LTQ3LjUgMTIxLjItMTE4LjggMTIxLjJ6TTQxNS41IDI3My44bDAgMzUuNS0zNS41IDAgMC0zNS41LTM1LjUgMCAwLTM1LjUgMzUuNSAwIDAtMzUuNSAzNS41IDAgMCAzNS41IDM1LjIgMCAwIDM1LjUtMzUuMiAweiJdCiAgICB9OwogICAgZmFTY3JlZW5wYWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2NyZWVucGFsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NzAiLCAiTTI3OC42IDIyLjVhMjIuNSAyMi41IDAgMSAxIC00NSAwIDIyLjUgMjIuNSAwIDEgMSA0NSAwek0xOTguNyAyNTlhNTcuNCA1Ny40IDAgMSAxIDExNC44IDAgNTcuNCA1Ny40IDAgMSAxIC0xMTQuOCAwem0xMzguNiA5MWMyMi4zLTE5LjkgMzYuNS00Ny4zIDM5LjktNzdsMTE5LjUgMGMtMy41IDYxLjQtMzAuNCAxMTkuMi03NS4yIDE2MS40LTQ0LjcgNDIuMi0xMDMuOSA2NS44LTE2NS40IDY1LjhTMTM1LjQgNDc2LjYgOTAuNyA0MzQuNEM0NS45IDM5Mi4yIDE5LjEgMzM0LjQgMTUuNSAyNzNsMTE5LjcgMGMzLjQgMjkuNyAxNy42IDU3LjEgMzkuOSA3N3M1MS4yIDMwLjkgODEuMSAzMC45YzI5IDAgNTguNy0xMSA4MS4xLTMwLjl6TTI4LjMgMTQxLjdhMjIuNSAyMi41IDAgMSAxIDQ1LTEuNCAyMi41IDIyLjUgMCAxIDEgLTQ1IDEuNHptNDU1LjYtLjdhMjIuNCAyMi40IDAgMSAxIC00NC45IDAgMjIuNCAyMi40IDAgMSAxIDQ0LjkgMHpNMzE4IDk1LjNjLTE3LjMgMTMuOC0zOS4yIDIyLjgtNjEuOSAyMi44cy00NC42LTktNjEuOS0yMi44Yy0xNy4zLTE0LjctMjguOC0zNS4xLTMyLjQtNTcuNSAxNS4xLTYuNCAzMC44LTExLjMgNDYuOS0xNC41IDAgMTIuNiA1IDI0LjYgMTMuOSAzMy41czIwLjkgMTMuOSAzMy41IDEzLjkgMjQuNi01IDMzLjUtMTMuOSAxMy45LTIwLjkgMTMuOS0zMy41YzE2LjEgMy4yIDMxLjggOC4xIDQ2LjkgMTQuNS0zLjYgMjIuNC0xNS4xIDQyLjgtMzIuNCA1Ny41ek04Mi45IDIzMWMtMjEuNCA3LjYtNDQuNyA3LjQtNjUuOS0uNiAyLTE2LjMgNS42LTMyLjMgMTAuOC00Ny45IDUuNCAzLjEgMTEuMyA1LjEgMTcuNSA2IDYuMiAuOCAxMi40IC40IDE4LjUtMS4yIDYtMS43IDExLjYtNC40IDE2LjYtOC4yczkuMS04LjUgMTIuMi0xMy45IDUuMS0xMS40IDYtMTcuNWMuOC02LjIgLjQtMTIuNS0xLjItMTguNXMtNC40LTExLjYtOC4yLTE2LjZjLTMuOC00LjktOC41LTkuMS0xMy45LTEyLjIgMTAuOC0xMi4zIDIyLjktMjMuNSAzNi0zMy4zIDE3LjYgMTQuMyAyOS41IDM0LjUgMzMuNiA1Ni44cy4xIDQ1LjQtMTEuMiA2NWMtMTEuNCAxOS42LTI5LjQgMzQuNS01MC43IDQyLjF6bTM0Ni40IC4xYy0yMS4zLTcuNi0zOS4zLTIyLjYtNTAuNy00Mi4yLTExLjMtMTkuNi0xNS4yLTQyLjctMTEuMS02NSA0LjEtMjIuMiAxNi00Mi40IDMzLjUtNTYuNyAxMy4xIDkuOCAyNS4yIDIxIDM2IDMzLjMtMTAuNyA2LjQtMTguNCAxNi43LTIxLjUgMjguOC0zLjIgMTItMi4zIDI0LjggNC44IDM1LjYgNi4yIDEwLjggMTYuNCAxOC43IDI4LjQgMjJzMjQuOSAxLjcgMzUuNy00LjNjNS4zIDE1LjUgOC45IDMxLjYgMTAuOSA0Ny44LTIyLjEgOC4xLTQ0LjYgOC4zLTY2IC43eiJdCiAgICB9OwogICAgZmFCaXRjb2luID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJpdGNvaW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM3OSIsICJNOCAyNTZhMjQ4IDI0OCAwIDEgMSA0OTYgMCAyNDggMjQ4IDAgMSAxIC00OTYgMHptMzU0LjMtMzUuM2M0LjktMzMtMjAuMi01MC43LTU0LjYtNjIuNmwxMS4xLTQ0LjctMjcuMi02LjgtMTAuOSA0My41Yy03LjItMS44LTE0LjUtMy41LTIxLjgtNS4xbDEwLjktNDMuOC0yNy4yLTYuOC0xMS4yIDQ0LjdjLTUuOS0xLjMtMTEuNy0yLjctMTcuNC00LjFsMC0uMS0zNy41LTkuNC03LjIgMjkuMXMyMC4yIDQuNiAxOS44IDQuOWMxMSAyLjggMTMgMTAgMTIuNyAxNS44bC0xMi43IDUwLjljLjggLjIgMS43IC41IDIuOCAuOS0uOS0uMi0xLjktLjUtMi45LS43bC0xNy44IDcxLjNjLTEuMyAzLjMtNC44IDguNC0xMi41IDYuNSAuMyAuNC0xOS44LTQuOS0xOS44LTQuOWwtMTMuNSAzMS4xIDM1LjQgOC44YzYuNiAxLjcgMTMgMy40IDE5LjQgNWwtMTEuMyA0NS4yIDI3LjIgNi44IDExLjItNDQuN2M3LjIgMiAxNC40IDMuOCAyMS43IDUuNmwtMTEuMSA0NC41IDI3LjIgNi44IDExLjMtNDUuMWM0Ni40IDguOCA4MS4zIDUuMiA5Ni0zNi43IDExLjgtMzMuOC0uNi01My4zLTI1LTY2IDE3LjgtNC4xIDMxLjItMTUuOCAzNC43LTM5Ljl6bS02Mi4yIDg3LjJjLTguNCAzMy44LTY1LjMgMTUuNS04My44IDEwLjlsMTQuOS01OS45YzE4LjQgNC42IDc3LjYgMTMuNyA2OC44IDQ5em04LjQtODcuN2MtNy43IDMwLjctNTUgMTUuMS03MC40IDExLjNsMTMuNS01NC4zYzE1LjQgMy44IDY0LjggMTEgNTYuOCA0M3oiXQogICAgfTsKICAgIGZhU3dpZnQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3dpZnQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjhlMSIsICJNNDQ4IDE1Ni4xYzAtNC41LS4xLTktLjItMTMuNS0uMS05LjktMS0xOS43LTIuNi0yOS40LTEuNy05LjctNC44LTE5LjItOS4yLTI4LTktMTcuNy0yMy40LTMyLjEtNDEuMi00MS4xLTguOC00LjUtMTguMy03LjYtMjgtOS4yLTkuNy0xLjYtMTkuNi0yLjUtMjkuNC0yLjYtNC41LS4xLTktLjItMTMuNS0uMkwxMjQuMSAzMmMtNC41IDAtOSAuMS0xMy41IC4yLTIuNCAuMS00LjkgLjItNy40IC4zLTcuNCAuMy0xNC44IDEuMS0yMi4xIDIuMy03LjMgMS4zLTE0LjQgMy4zLTIxLjIgNi4xLTIuMyAxLTQuNiAyLTYuOCAzLjEtNi42IDMuNC0xMi44IDcuNS0xOC40IDEyLjMtMS45IDEuNi0zLjcgMy4zLTUuNCA1LTcgNy0xMi45IDE1LTE3LjQgMjMuOC00LjQgOC44LTcuNiAxOC4zLTkuMiAyOC0xLjYgOS43LTIuNCAxOS42LTIuNSAyOS40LS4xIDQuNS0uMiA5LS4yIDEzLjVMMCAzNTUuOWMwIDQuNSAuMSA5IC4yIDEzLjUgLjEgOS45IDEgMTkuNyAyLjYgMjkuNCAxLjcgOS43IDQuOCAxOS4yIDkuMiAyOCA5IDE3LjcgMjMuNCAzMi4xIDQxLjEgNDEuMSA4LjggNC40IDE4LjMgNy41IDI4IDkuMiA5LjcgMS42IDE5LjYgMi41IDI5LjQgMi42IDQuNSAuMSA5IC4yIDEzLjUgLjJsMTk5LjggMGM0LjUgMCA5LS4xIDEzLjUtLjIgOS45LS4xIDE5LjctMSAyOS40LTIuNiA5LjctMS43IDE5LjItNC44IDI4LTkuMiAxNy43LTkgMzIuMS0yMy40IDQxLjEtNDEuMiA0LjQtOC44IDcuNi0xOC4zIDkuMi0yOCAxLjYtOS43IDIuNS0xOS42IDIuNi0yOS40IC4xLTQuNSAuMi05IC4yLTEzLjVsMC0xODMuOGMwLTUuNCAwLTEwLjcgMC0xNnptLTY5LjkgMjQxYy0yMC0zOC45LTU3LjItMjkuMy03Ni4zLTE5LjUtMS43IDEtMy41IDItNS4yIDNsLS40IC4yYy0zOS41IDIxLTkyLjUgMjIuNS0xNDUuOC0uNC00My40LTE4LjgtODAuMS01MC4zLTEwNS4zLTkwLjQgMTIuMyA5LjEgMjUuNCAxNi45IDM5LjIgMjMuNCA1Ni40IDI2LjQgMTEzIDI0LjUgMTUzIDAtNTctNDMuOC0xMDQuNi0xMDEtMTQxLjEtMTQ3LjItNy04LjEtMTMuMi0xNi44LTE4LjgtMjUuOSA0My43IDQwIDExMi43IDkwLjIgMTM3LjUgMTA0LjEtNTIuNi01NS41LTk4LjktMTIzLjktOTYuNy0xMjEuNyA4Mi44IDgzLjQgMTU5LjIgMTMwLjYgMTU5LjIgMTMwLjYgMi45IDEuNiA1IDIuOCA2LjcgNCAxLjYtNC4xIDMtOC4yIDQuMi0xMi41IDEzLjItNDguMy0xLjctMTAzLjYtMzUuMy0xNDkuMiA3Ni44IDQ2LjEgMTIyLjIgMTMzLjcgMTAzLjYgMjA3LjgtLjQgMS43LTEgMy40LTEuNCA1LjEgMzguNSA0Ny40IDI4IDk4LjIgMjMuMSA4OC42bDAgMHoiXQogICAgfTsKICAgIGZhRmlsZXNQaW53aGVlbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlcy1waW53aGVlbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNjlmIiwgIk0yNTMuNSAyNDYuNEwxMzcuMiAxMzAuMmMtLjYtLjYtMS0xLjMtMS40LTJzLS41LTEuNi0uNS0yLjQgLjItMS42IC41LTIuNCAuOC0xLjQgMS40LTJMMjUzLjYgNS4xYy45LS45IDItMS41IDMuMi0xLjdzMi41LS4xIDMuNiAuMyAyLjEgMS4zIDIuOCAyLjMgMS4xIDIuMiAxLjEgMy41bDAgMjMyLjVjMCAxLjMtLjMgMi41LTEgMy42cy0xLjcgMS45LTIuOSAyLjQtMi41IC42LTMuNyAuMy0yLjQtLjktMy4yLTEuOXptNDAuMy00LjRsMC0xMzQuNGMwLS44IC4xLTEuNiAuNS0yLjRzLjgtMS41IDEuMy0yLjEgMS4zLTEuMSAyLTEuNCAxLjYtLjUgMi40LS41bDEzNC40IDBjMS4yIDAgMi41IC40IDMuNSAxLjFzMS44IDEuNyAyLjMgMi44IC42IDIuNCAuMyAzLjYtLjkgMi4zLTEuNyAzLjJMMzA0LjMgMjQ2LjRjLS45IC44LTIgMS40LTMuMiAxLjZzLTIuNCAuMS0zLjUtLjQtMi4xLTEuMy0yLjgtMi4zLTEuMS0yLjItMS4xLTMuNGwuMSAuMXptMzAuNiAzNWMtMS4yIDAtMi41LS4zLTMuNS0xcy0xLjktMS42LTIuNC0yLjgtLjYtMi40LS40LTMuNiAuOC0yLjMgMS43LTMuMkw0MDQgMTgyLjJjLjYtLjYgMS4zLTEgMi0xLjRzMS42LS41IDIuNC0uNSAxLjYgLjIgMi40IC41IDEuNCAuOCAyIDEuNGw4NC40IDg0LjJjLjkgLjkgMS41IDIgMS43IDMuMnMuMSAyLjUtLjMgMy42LTEuMyAyLjEtMi4zIDIuOC0yLjIgMS4xLTMuNSAxLjFsLTE2OC41IDAgLjEtLjF6bTkwLjcgMTMxbC05NS4zLTk1LjJjLS45LS45LTEuNS0yLTEuNy0zLjJzLS4xLTIuNSAuNC0zLjcgMS4zLTIuMSAyLjQtMi44IDIuMy0xIDMuNS0xbDk1LjIgMGMxLjcgMCAzLjIgLjcgNC40IDEuOHMxLjggMi44IDEuOCA0LjRsMCA5NS4zYzAgMS4yLS40IDIuNS0xLjEgMy41cy0xLjcgMS44LTIuOCAyLjMtMi40IC42LTMuNiAuMy0yLjMtLjktMy4yLTEuN3pNMTYuOCAzMDIuMWwyMTYuOSAwYzEuMiAwIDIuNSAuNCAzLjUgMS4xczEuOCAxLjcgMi4zIDIuOCAuNiAyLjQgLjMgMy42LS44IDIuMy0xLjcgMy4yTDEyOS43IDQyMS4yYy0uNiAuNi0xLjMgMS0yIDEuNHMtMS42IC41LTIuNCAuNS0xLjYtLjItMi40LS41LTEuNC0uOC0yLTEuNEwxMi4zIDMxMi44Yy0uOS0uOS0xLjUtMi0xLjctMy4ycy0uMS0yLjUgLjQtMy42IDEuMy0yLjEgMi4zLTIuOCAyLjMtMSAzLjUtMWwwLS4xek0yNjQuMyA0NjUuM2MwIC44LS4yIDEuNi0uNSAyLjRzLS44IDEuNS0xLjQgMi0xLjMgMS0yIDEuNC0xLjYgLjUtMi40IC41bC0xMjggMGMtMS4yIDAtMi41LS40LTMuNS0xLjFzLTEuOC0xLjctMi4zLTIuOC0uNi0yLjQtLjMtMy42IC44LTIuMyAxLjctMy4ybDEyOC0xMjhjLjktLjkgMi0xLjUgMy4yLTEuN3MyLjUtLjEgMy42IC4zIDIuMSAxLjMgMi44IDIuMyAxLjEgMi4yIDEuMSAzLjVsMCAxMjh6bTQwLTEzMi41bDgyLjggODIuN2MuNiAuNiAxIDEuMyAxLjQgMnMuNSAxLjYgLjUgMi40LS4yIDEuNi0uNSAyLjQtLjggMS40LTEuNCAyTDMwNC4zIDUwN2MtLjkgLjktMiAxLjUtMy4yIDEuN3MtMi41IC4xLTMuNi0uMy0yLjEtMS4zLTIuOC0yLjMtMS4xLTIuMi0xLjEtMy41bDAtMTY1LjRjMC0xLjIgLjQtMi41IDEuMS0zLjVzMS43LTEuOCAyLjgtMi4zIDIuNC0uNiAzLjYtLjMgMi4zIC44IDMuMiAxLjd6TTc5IDEyMi40YzAtMS4yIC4zLTIuNSAxLTMuNXMxLjctMS44IDIuOC0yLjMgMi40LS42IDMuNi0uNCAyLjMgLjggMy4yIDEuN0wyMzguMSAyNjYuNGMuOSAuOSAxLjUgMiAxLjcgMy4ycy4xIDIuNS0uMyAzLjYtMS4zIDIuMS0yLjMgMi44LTIuMiAxLjEtMy41IDEuMWwtMTQ4LjQgMGMtMS43IDAtMy4yLS43LTQuNC0xLjhzLTEuOC0yLjgtMS44LTQuNGwwLTE0OC40LS4xLS4xeiJdCiAgICB9OwogICAgZmFMYXJhdmVsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxhcmF2ZWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNiZCIsICJNNTA0LjYgMTE1LjhjLS4xLS4yLS4yLS41LS4zLS43LS4xLS40LS4zLS44LS41LTEuMi0uMi0uMi0uMy0uNS0uNS0uNy0uMi0uMy0uNS0uNi0uNy0uOS0uMi0uMi0uNS0uNC0uOC0uNi0uMy0uMi0uNi0uNS0uOS0uN0w0MDQuNiA1NS41Yy0xLjItLjctMi42LTEuMS00LTEuMXMtMi44IC40LTQgMS4xTDMwMC4zIDExMWMtLjMgLjItLjYgLjQtLjkgLjctLjMgLjItLjUgLjQtLjggLjYtLjMgLjMtLjUgLjYtLjcgLjktLjIgLjItLjQgLjQtLjUgLjctLjIgLjQtLjQgLjgtLjUgMS4yLS4xIC4yLS4yIC40LS4zIC43LS4yIC43LS4zIDEuNC0uMyAyLjFsMCAxMDUuMi04MC4yIDQ2LjIgMC0yMDUuOWMwLS43LS4xLTEuNC0uMy0yLjEtLjEtLjItLjItLjQtLjMtLjctLjEtLjQtLjMtLjgtLjUtMS4yLS4xLS4zLS40LS41LS41LS43LS4yLS4zLS41LS42LS43LS45LS4yLS4yLS41LS40LS44LS42LS4zLS4yLS42LS41LS45LS43TDExNS44IDEuMWMtMS4yLS43LTIuNi0xLjEtNC0xLjFzLTIuOCAuNC00IDEuMUwxMS41IDU2LjVjLS4zIC4yLS42IC40LS45IC43LS4zIC4yLS41IC40LS44IC42LS4zIC4zLS41IC42LS43IC45LS4yIC4zLS40IC41LS42IC43LS4yIC40LS40IC44LS41IDEuMi0uMSAuMi0uMiAuNC0uMyAuNy0uMiAuNy0uMyAxLjQtLjMgMi4xbDAgMzI5LjdjMCAxLjQgLjQgMi44IDEuMSA0czEuNyAyLjIgMi45IDIuOUwyMDQgNTEwLjljLjQgLjIgLjkgLjQgMS4zIC41IC4yIC4xIC40IC4yIC42IC4zIDEuMyAuNCAyLjggLjQgNC4xIDAgLjItLjEgLjQtLjIgLjYtLjIgLjUtLjIgMS0uMyAxLjQtLjZMNDA0LjYgNDAwLjFjMS4yLS43IDIuMi0xLjcgMi45LTIuOXMxLjEtMi42IDEuMS00bDAtMTA1LjMgOTIuMi01My4xYzEuMi0uNyAyLjItMS43IDIuOS0zczEuMS0yLjYgMS4xLTRsMC0xMDkuOGMwLS43LS4xLTEuNC0uMi0yLjF6TTExMS44IDE3LjNsODAuMiA0Ni4xLTgwLjIgNDYuMi04MC4yLTQ2LjIgODAuMi00Ni4yem04OC4yIDYwbDAgMjAxLjNjLTMzLjIgMTkuMS01OS45IDM0LjUtODAuMiA0Ni4ybDAtMjAxLjNDMTUzIDEwNC40IDE3OS43IDg5IDIwMCA3Ny4zem0wIDQxMi44TDIzLjUgMzg4LjUgMjMuNSA3Ny4zYzIwLjMgMTEuNyA0Ny4xIDI3LjEgODAuMiA0Ni4ybDAgMjE1LjJjMCAuMyAuMSAuNiAuMSAuOSAwIC40IC4xIC44IC4yIDEuMiAuMSAuMyAuMiAuNiAuNCAuOSAuMSAuMyAuMyAuNyAuNCAxIC4yIC4zIC40IC41IC42IC44IC4yIC4zIC40IC42IC43IC44IC4yIC4yIC41IC40IC44IC42IC4zIC4yIC42IC41IC45IC43bDkyLjIgNTIuMiAuMSA5Mi40em04LTEwNi4yTDEyOCAzMzguNmM1NC43LTMxLjUgMTEzLjUtNjUuMyAxNzYuMy0xMDEuNWw4MC4xIDQ2LjFDMzU1IDMwMCAyOTYuMiAzMzMuNSAyMDggMzgzLjl6bTE4NC41IDQuNmwtMTc2LjUgMTAxLjYgMC05Mi4zQzMxNy40IDM0MCAzNzYuMiAzMDYuNCAzOTIuNSAyOTdsMCA5MS40em0wLTExOS4xYy0yMC4zLTExLjYtNDcuMS0yNy04MC4yLTQ2LjFsMC05MS40YzIwLjMgMTEuNyA0Ny4xIDI3LjEgODAuMiA0Ni4ybDAgOTEuM3ptOC0xMDUuM2wtODAuMi00Ni4yIDgwLjItNDYuMiA4MC4yIDQ2LjEtODAuMiA0Ni4yem04IDEwNS4zbDAtOTEuM2MzMy4yLTE5LjEgNjAtMzQuNSA4MC4zLTQ2LjJsMCA5MS40LTgwLjMgNDYuMnoiXQogICAgfTsKICAgIGZhV3Bmb3JtcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3cGZvcm1zIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyOTgiLCAiTTQ0OCA3NS4ybDAgMzYxLjdjMCAyNC4zLTE5IDQzLjItNDMuMiA0My4ybC0zNjEuNiAwQzE5LjMgNDgwIDAgNDYxLjQgMCA0MzYuOEwwIDc1LjJDMCA1MS4xIDE4LjggMzIgNDMuMiAzMmwzNjEuNyAwYzI0IDAgNDMuMSAxOC44IDQzLjEgNDMuMnpNNDEwLjcgNDM2LjhsMC0zNjEuNmMwLTMtMi42LTUuOC01LjgtNS44bC05LjMgMC0xMTAuMyA3NC42LTYxLjMtNDkuOS02MS4yIDQ5LjktMTEwLjMtNzQuNy05LjMgMGMtMy4yIDAtNS44IDIuOC01LjggNS44bDAgMzYxLjdjMCAzIDIuNiA1LjggNS44IDUuOGwzNjEuNyAwYzMuMiAuMSA1LjgtMi43IDUuOC01Ljh6TTE1MC4yIDE4NmwwIDM3LTczLjUgMCAwLTM3IDczLjUgMHptMCA3NC40bDAgMzcuMy03My41IDAgMC0zNy4zIDczLjUgMHptMTEuMS0xNDcuM2w1NC00My43LTExOC41IDAgNjQuNSA0My43em0yMTAgNzIuOWwwIDM3LTE5NiAwIDAtMzcgMTk2IDB6bTAgNzQuNGwwIDM3LjMtMTk2IDAgMC0zNy4zIDE5NiAwek0yODYuNyAxMTMuMWw2NC41LTQzLjctMTE4LjQgMCA1My45IDQzLjd6TTM3MS4zIDMzNWwwIDM3LjMtOTkuNCAwIDAtMzcuMyA5OS40IDB6Il0KICAgIH07CiAgICBmYVNwZWFrZXJEZWNrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNwZWFrZXItZGVjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmODNjIiwgIk0yMTMuOSAyOTZMMTAwIDI5NmMtMjYuNSAwLTUyLTEwLjUtNzAuNy0yOS4zUzAgMjIyLjUgMCAxOTYgMTAuNSAxNDQgMjkuMyAxMjUuMyA3My41IDk2IDEwMCA5NmwxMzIuOCAwYzEwLjYgMCAyMC44IDQuMiAyOC4zIDExLjdzMTEuNyAxNy43IDExLjcgMjguMy00LjIgMjAuOC0xMS43IDI4LjMtMTcuNyAxMS43LTI4LjMgMTEuN0w5OCAxNzZjLTI2LjUgMC0yNi40IDQwIDAgNDBsMTEzLjggMGMyNi41IDAgNTIgMTAuNSA3MC43IDI5LjNzMjkuMyA0NC4yIDI5LjMgNzAuNy0xMC41IDUyLTI5LjMgNzAuNy00NC4yIDI5LjMtNzAuNyAyOS4zTDQwIDQxNmMtMTAuNiAwLTIwLjgtNC4yLTI4LjMtMTEuN1MwIDM4Ni42IDAgMzc2IDQuMiAzNTUuMiAxMS43IDM0Ny43IDI5LjQgMzM2IDQwIDMzNmwxNzMuOSAwYzI2LjUgMCAyNi41LTQwIDAtNDB6TTI5OCA0MTZjMTMuNS05LjIgMjUtMjEgMzMuOC0zNC43czE0LjctMjkuMiAxNy4zLTQ1LjNsNjQuNiAwYzIuNiAwIDUuMi0uNiA3LjYtMS42czQuNi0yLjUgNi40LTQuNCAzLjMtNC4xIDQuMi02LjUgMS41LTUgMS40LTcuNmwwLTEyMGMwLTIuNi0uNS01LjItMS40LTcuNnMtMi40LTQuNi00LjItNi41LTQtMy4zLTYuNC00LjQtNS0xLjYtNy42LTEuNmwtMTE3LjIgMGM5LjctMTEuMSAxNS0yNS4zIDE1LTQwcy01LjMtMjguOS0xNS00MGwxMzYuOSAwYzQzLjQgMCA3OC42IDM1LjggNzguNiA4MGwwIDE2MGMwIDQ0LjItMzUuMiA4MC03OC42IDgwTDI5OCA0MTZ6Il0KICAgIH07CiAgICBmYUZsaWNrciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmbGlja3IiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE2ZSIsICJNNDAwIDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsMzUyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTE0NC41IDE5MmE2My41IDYzLjUgMCAxIDEgMCAxMjcgNjMuNSA2My41IDAgMSAxIDAtMTI3em0xNTkgMGE2My41IDYzLjUgMCAxIDEgMCAxMjcgNjMuNSA2My41IDAgMSAxIDAtMTI3eiJdCiAgICB9OwogICAgZmFDY1Zpc2EgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2MtdmlzYSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWYwIiwgIk00NzAuMSAyMzEuM3M3LjYgMzcuMiA5LjMgNDVsLTMzLjQgMGMzLjMtOC45IDE2LTQzLjUgMTYtNDMuNS0uMiAuMyAzLjMtOS4xIDUuMy0xNC45bDIuOCAxMy40ek01NzYgODBsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDQ4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0xNTIuNSAzMzEuMmw2My4yLTE1NS4yLTQyLjUgMC0zOS4zIDEwNi00LjMtMjEuNS0xNC03MS40Yy0yLjMtOS45LTkuNC0xMi43LTE4LjItMTMuMWwtNjQuNyAwLS43IDMuMWMxNS44IDQgMjkuOSA5LjggNDIuMiAxNy4xbDM1LjggMTM1IDQyLjUgMHptOTQuNCAuMmwyNS4yLTE1NS40LTQwLjIgMC0yNS4xIDE1NS40IDQwLjEgMHptMTM5LjktNTAuOGMuMi0xNy43LTEwLjYtMzEuMi0zMy43LTQyLjMtMTQuMS03LjEtMjIuNy0xMS45LTIyLjctMTkuMiAuMi02LjYgNy4zLTEzLjQgMjMuMS0xMy40IDEzLjEtLjMgMjIuNyAyLjggMjkuOSA1LjlsMy42IDEuNyA1LjUtMzMuNmMtNy45LTMuMS0yMC41LTYuNi0zNi02LjYtMzkuNyAwLTY3LjYgMjEuMi02Ny44IDUxLjQtLjMgMjIuMyAyMCAzNC43IDM1LjIgNDIuMiAxNS41IDcuNiAyMC44IDEyLjYgMjAuOCAxOS4zLS4yIDEwLjQtMTIuNiAxNS4yLTI0LjEgMTUuMi0xNiAwLTI0LjYtMi41LTM3LjctOC4zbC01LjMtMi41LTUuNiAzNC45YzkuNCA0LjMgMjYuOCA4LjEgNDQuOCA4LjMgNDIuMiAuMSA2OS43LTIwLjggNzAtNTN6TTUyOCAzMzEuNGwtMzIuNC0xNTUuNC0zMS4xIDBjLTkuNiAwLTE2LjkgMi44LTIxIDEyLjlsLTU5LjcgMTQyLjUgNDIuMiAwczYuOS0xOS4yIDguNC0yMy4zbDUxLjYgMGMxLjIgNS41IDQuOCAyMy4zIDQuOCAyMy4zbDM3LjIgMHoiXQogICAgfTsKICAgIGZhVXB3b3JrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVwd29yayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNjQxIiwgIk00OTMuOSAyOTUuNmMtNTAuMyAwLTgzLjUtMzguOS05Mi44LTUzLjkgMTEuOS05NS4zIDQ2LjgtMTI1LjQgOTIuOC0xMjUuNCA0NS41IDAgODAuOSAzNi40IDgwLjkgODkuN3MtMzUuNCA4OS43LTgwLjkgODkuN2wwLS4xem0wLTIzNy44Yy04MS45IDAtMTI3LjggNTMuNC0xNDEgMTA4LjQtMTQuOS0yOC0yNS45LTY1LjUtMzQuNS0xMDAuM2wtMTEzLjIgMCAwIDE0MWMwIDUxLjEtMjMuMyA4OS02OC44IDg5cy03MS42LTM3LjgtNzEuNi04OWwuNS0xNDEtNjUuMyAwIDAgMTQxYzAgNDEuMSAxMy4zIDc4LjQgMzcuNiAxMDUuMSAyNSAyNy41IDU5LjIgNDEuOCA5OC44IDQxLjggNzguOCAwIDEzMy44LTYwLjQgMTMzLjgtMTQ2LjlsMC05NC44YzguMiAzMS4yIDI3LjggOTEuMSA2NS4zIDE0My42bC0zNSAxOTkuNCA2Ni40IDAgMjMuMS0xNDEuM2M3LjYgNi4zIDE1LjcgMTIgMjQuMiAxNyAyMi4yIDE0IDQ3LjcgMjEuOSA3My45IDIyLjggMCAwIDQgLjIgNi4xIC4yIDgxLjIgMCAxNDUuOS02Mi45IDE0NS45LTE0Ny44UzU3NS4zIDU3LjkgNDk0LjEgNTcuOWwtLjItLjF6Il0KICAgIH07CiAgICBmYUtha2FvVGFsayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJrYWthby10YWxrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU3ZDciLCAiTTI4OCAyLjVjMTU5LjEgMCAyODggMTAxLjcgMjg4IDIyNy4xIDAgMTI1LjQtMTI4LjkgMjI3LjEtMjg4IDIyNy4xLTE3LjUgMC0zNC42LTEuMi01MS4yLTMuNi0xNi42IDExLjctMTEyLjYgNzkuMS0xMjEuNyA4MC40IDAgMC0zLjcgMS40LTYuOS0uNHMtMi42LTYuNy0yLjYtNi43QzEwNi42IDUxOS44IDEzMC42IDQzNy4yIDEzNSA0MjEuOSA1My45IDM4MS44IDAgMzEwLjYgMCAyMjkuNSAwIDEwNC4xIDEyOC45IDIuNSAyODggMi41ek04Ni4yIDE2MS43Yy05IDAtMTYuMyA3LjMtMTYuMyAxNi4zczcuMyAxNi4zIDE2LjMgMTYuM2wyNS45IDAgMCA5OC43YzAgOC44IDcuNSAxNS45IDE2LjYgMTUuOXMxNi42LTcuMSAxNi42LTE1LjlsMC05OC43IDI1LjkgMGM5IDAgMTYuMy03LjMgMTYuMy0xNi4zcy03LjMtMTYuMy0xNi4zLTE2LjNsLTg1LjEgMHptMTQwLjggMGMtMTAuOCAuMi0xOS4zIDguNC0yMi4xIDE2LjRMMTY1LjIgMjgyLjdjLTUgMTUuNy0uNiAyMS41IDMuOSAyMy42IDMuMiAxLjUgNi45IDIuMyAxMC42IDIuMyA2LjkgMCAxMi4yLTIuOCAxMy44LTcuM2w4LjItMjEuNiA1MC43IDAgOC4yIDIxLjVjMS42IDQuNSA2LjkgNy4zIDEzLjggNy4zIDMuNyAwIDcuMy0uOCAxMC42LTIuMyA0LjYtMi4xIDktNy45IDMuOS0yMy42TDI0OS4yIDE3OC4xYy0yLjgtOC0xMS4zLTE2LjItMjIuMi0xNi40em0xODAuOSAwYy05LjIgMC0xNi42IDcuNS0xNi42IDE2LjZsMCAxMTMuN2MwIDkuMiA3LjUgMTYuNiAxNi42IDE2LjZzMTYuNi03LjUgMTYuNi0xNi42bDAtMzYuMiA1LjgtNS44IDM4LjkgNTEuNmMzLjIgNC4yIDggNi42IDEzLjMgNi42IDMuNiAwIDcuMS0xLjEgMTAtMy4zIDMuNS0yLjcgNS44LTYuNiA2LjQtMTFzLS41LTguOC0zLjItMTIuM2wtNDAuOS01NC4yIDM3LjktMzcuOGMyLjYtMi42IDMuOS02LjIgMy43LTEwLjEtLjItMy45LTItNy42LTQuOS0xMC41LTMuMS0zLjEtNy4zLTQuOS0xMS40LTQuOS0zLjYgMC02LjggMS4zLTkuMiAzLjdsLTQ2LjMgNDYuNCAwLTM1LjdjMC05LjItNy41LTE2LjYtMTYuNi0xNi42em0tOTEuMyAwYy05LjMgMC0xNi45IDcuNS0xNi45IDE2LjZsMCAxMTIuOGMwIDguNCA3LjEgMTUuMiAxNS45IDE1LjNsNTMuMyAwYzguOCAwIDE1LjktNi45IDE1LjktMTUuM3MtNy4yLTE1LjItMTUuOS0xNS4ybC0zNS4zIDAgMC05Ny42YzAtOS4yLTcuNi0xNi42LTE3LTE2LjZ6bS03MyA4OC42bC0zMy4yIDAgMTYuNi00Ny4xIDE2LjYgNDcuMXoiXQogICAgfTsKICAgIGZhRmx1dHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmbHV0dGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2OTQiLCAiTTQyOS41IDIzNi4zTDI5MS43IDM3NC4xIDQyOS41IDUxMiAyNzIgNTEyYy0zNi4xLTM2LjEtODIuMS04Mi4xLTEzNy45LTEzNy45bDEzNy45LTEzNy44IDE1Ny41IDB6TTI3MiAwTDE2IDI1NiA5NC44IDMzNC44IDQyOS41IDAgMjcyIDB6Il0KICAgIH07CiAgICBmYUJ1ZmZlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJidWZmZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjgzNyIsICJNNDI4LjIgMzgwLjdMMjMxLjcgNDc4LjVjLTIuMyAxLTQuOCAxLjUtNy4zIDEuNXMtNS0uNS03LjMtMS41TDIwLjUgMzgwLjdjLTQtMi00LTUuMyAwLTcuM0w2Ny42IDM1MGMyLjMtMSA0LjgtMS41IDcuMy0xLjVzNSAuNSA3LjMgMS41bDEzNC44IDY3YzIuMyAxIDQuOCAxLjUgNy4zIDEuNXM1LS41IDcuMy0xLjVsMTM0LjgtNjdjMi4zLTEgNC44LTEuNSA3LjMtMS41czUgLjUgNy4zIDEuNWw0Ny4xIDIzLjRjNCAyIDQgNS4yIDAgNy4yem0wLTEzNi41bC00Ny4xLTIzLjRjLTIuMy0xLTQuOC0xLjUtNy4zLTEuNXMtNSAuNS03LjMgMS41TDIzMS43IDI4Ny44Yy0yLjMgMS00LjggMS41LTcuMyAxLjVzLTUtLjUtNy4zLTEuNUw4Mi4zIDIyMC43Yy0yLjMtMS00LjgtMS41LTcuMy0xLjVzLTUgLjUtNy4zIDEuNUwyMC41IDI0NC4xYy00IDItNCA1LjMgMCA3LjNsMTk2LjUgOTcuOGMyLjMgMSA0LjggMS41IDcuMyAxLjVzNS0uNSA3LjMtMS41bDE5Ni41LTk3LjhjNC0yIDQtNS4zIDAtNy4zek0yMC41IDEzMC40TDIxNyAyMjAuN2M0LjcgMS45IDEwIDEuOSAxNC43IDBsMTk2LjUtOTAuM2M0LTEuOSA0LTQuOSAwLTYuN0wyMzEuNyAzMy40Yy00LjctMS45LTEwLTEuOS0xNC43IDBMMjAuNSAxMjMuN2MtNCAxLjgtNCA0LjkgMCA2Ljd6Il0KICAgIH07CiAgICBmYUdyYXRpcGF5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdyYXRpcGF5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxODQiLCAiTTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTIgMjU2IDI1NiAwIDEgMCAwLTUxMnpNMzc0LjMgMjMzLjdMMjU3LjcgMzkxLjMgMTQxLjMgMjMzLjdjLTktMTIuMy0xOS43LTUyIDE0LTc0LjMgMjktMTguNyA1Ni40LTQuMyA3MC43IDEyLjMgMTYuNCAxOC41IDQ4LjEgMTcuNCA2My43IDAgMTQuMy0xNi42IDQxLjctMzEgNzAuMy0xMi4zIDM0IDIyLjMgMjMuMyA2MS45IDE0LjIgNzQuM3oiXQogICAgfTsKICAgIGZhR29vZ2xlUGF5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2dsZS1wYXkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTA3OSIsICJNMTA1LjcgMjE1bDAgNDEuMiA1Ny4xIDBjLTEuMiA2LjYtMy42IDEyLjktNy4yIDE4LjVzLTguNCAxMC40LTEzLjkgMTQuMWMtOS41IDYuNi0yMS43IDEwLjMtMzYgMTAuMy0yNy42IDAtNTAuOS0xOC45LTU5LjMtNDQuMi00LjQtMTMuMy00LjQtMjcuNyAwLTQxIDguNC0yNS41IDMxLjctNDQuNCA1OS4zLTQ0LjQgNy41LS4xIDE0LjkgMS4yIDIxLjkgNHMxMy4zIDYuOSAxOC42IDEyLjFMMTc2LjUgMTU1Yy0xOS4xLTE4LjEtNDQuNC0yOC4xLTcwLjctMjcuOC0xOS43IC4xLTM4LjkgNS43LTU1LjYgMTYuMXMtMzAuMSAyNS4zLTM4LjggNDNDMy45IDIwMS4yIDAgMjE3LjcgMCAyMzQuNHMzLjkgMzMuMiAxMS4zIDQ4LjFsMCAuMmM4LjcgMTcuNyAyMi4xIDMyLjUgMzguOCA0M3MzNS45IDE2IDU1LjYgMTZjMjguNSAwIDUyLjUtOS41IDcwLTI1LjkgMjAtMTguNiAzMS40LTQ2LjIgMzEuNC03OC45IDAtNy4zLS42LTE0LjYtMS44LTIxLjhsLTk5LjcgMHptMzg5LjQtNGMtMTAuMS05LjQtMjMuOS0xNC4xLTQxLjQtMTQuMS0yMi41IDAtMzkuMyA4LjMtNTAuNSAyNC45TDQyNC4xIDIzNWM3LjYtMTEuMyAxOC4xLTE3IDMxLjMtMTcgOC40IDAgMTYuNSAzLjIgMjIuNyA4LjggMyAyLjYgNS41IDUuOSA3LjEgOS42czIuNSA3LjYgMi41IDExLjdsMCA1LjVjLTkuMS01LjEtMjAuNi03LjgtMzQuNi03LjgtMTYuNCAwLTI5LjYgMy45LTM5LjUgMTEuOHMtMTQuOCAxOC4zLTE0LjggMzEuNmMtLjIgNS45IDEgMTEuOCAzLjQgMTcuMnM2IDEwLjIgMTAuNSAxNC4xYzkuMiA4LjMgMjEgMTIuNSAzNC44IDEyLjUgMTYuMyAwIDI5LjItNy4zIDM5LTIxLjlsMSAwIDAgMTcuNyAyMi42IDAgMC03OC43Yy4xLTE2LjYtNC45LTI5LjctMTUtMzl6bS0xOS4yIDg5LjNjLTMuNSAzLjUtNy42IDYuMy0xMi4yIDguMnMtOS41IDIuOS0xNC40IDIuOWMtNi43IC4xLTEzLjEtMi4xLTE4LjMtNi4yLTIuNC0xLjgtNC40LTQuMi01LjctNi45cy0yLTUuNy0yLTguN2MwLTcgMy4yLTEyLjggOS41LTE3LjRzMTQuNS03IDI0LjEtN2MxMy4yLS4yIDIzLjUgMi44IDMwLjggOC44IDAgMTAuMS00IDE4LjktMTEuNyAyNi40em0tOTMuNy0xNDJjLTUuMy01LjMtMTEuNi05LjUtMTguNi0xMi4zcy0xNC40LTQuMi0yMS45LTRsLTYyLjcgMCAwIDE4Ni43IDIzLjYgMCAwLTc1LjYgMzkgMGMxNiAwIDI5LjUtNS40IDQwLjUtMTUuOSAuOS0uOSAxLjgtMS44IDIuNi0yLjcgOS42LTEwLjUgMTQuOC0yNC40IDE0LjMtMzguNnMtNi42LTI3LjctMTYuOS0zNy42bDAgMHptLTE2LjYgNjIuMmMtMyAzLjItNi42IDUuNy0xMC42IDcuNHMtOC40IDIuNS0xMi43IDIuM2wtMzkuNiAwIDAtNjUuMiAzOS42IDBjOC41IDAgMTYuNiAzLjMgMjIuNiA5LjIgNi4xIDYuMSA5LjYgMTQuMyA5LjggMjNzLTMuMSAxNy05IDIzLjNsMCAwek02MTQuMyAyMDFsLTM2LjUgOTEuNy0uNSAwLTM3LjQtOTEuNy0yNS43IDAgNTEuOCAxMTkuNi0yOS40IDY0LjMgMjQuMyAwIDc5LTE4My45LTI1LjcgMHoiXQogICAgfTsKICAgIGZhQXBwbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXBwbGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjE3OSIsICJNMzE5LjEgMjY4LjdjLS4yLTM2LjcgMTYuNC02NC40IDUwLTg0LjgtMTguOC0yNi45LTQ3LjItNDEuNy04NC43LTQ0LjYtMzUuNS0yLjgtNzQuMyAyMC43LTg4LjUgMjAuNy0xNSAwLTQ5LjQtMTkuNy03Ni40LTE5LjctNTUuOCAuOS0xMTUuMSA0NC41LTExNS4xIDEzMy4yIDAgMjYuMiA0LjggNTMuMyAxNC40IDgxLjIgMTIuOCAzNi43IDU5IDEyNi43IDEwNy4yIDEyNS4yIDI1LjItLjYgNDMtMTcuOSA3NS44LTE3LjkgMzEuOCAwIDQ4LjMgMTcuOSA3Ni40IDE3LjkgNDguNi0uNyA5MC40LTgyLjUgMTAyLjYtMTE5LjMtNjUuMi0zMC43LTYxLjctOTAtNjEuNy05MS45ek0yNjIuNSAxMDQuNWMyNy4zLTMyLjQgMjQuOC02MS45IDI0LTcyLjUtMjQuMSAxLjQtNTIgMTYuNC02Ny45IDM0LjktMTcuNSAxOS44LTI3LjggNDQuMy0yNS42IDcxLjkgMjYuMSAyIDQ5LjktMTEuNCA2OS41LTM0LjN6Il0KICAgIH07CiAgICBmYVR1bWJsciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0dW1ibHIiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjE3MyIsICJNMzA5LjkgNDgwLjNjLTEzLjYgMTQuNS01MCAzMS43LTk3LjQgMzEuNy0xMjAuOCAwLTE0Ny04OC44LTE0Ny0xNDAuNmwwLTE0NC00Ny41IDBjLTUuNSAwLTEwLTQuNS0xMC0xMGwwLTY4YzAtNy4yIDQuNS0xMy42IDExLjMtMTYgNjItMjEuOCA4MS41LTc2IDg0LjMtMTE3LjEgLjgtMTEgNi41LTE2LjMgMTYuMS0xNi4zbDcwLjkgMGM1LjUgMCAxMCA0LjUgMTAgMTBsMCAxMTUuMiA4MyAwYzUuNSAwIDEwIDQuNCAxMCA5LjlsMCA4MS43YzAgNS41LTQuNSAxMC0xMCAxMGwtODMuNCAwIDAgMTMzLjJjMCAzNC4yIDIzLjcgNTMuNiA2OCAzNS44IDQuOC0xLjkgOS0zLjIgMTIuNy0yLjIgMy41IC45IDUuOCAzLjQgNy40IDcuOWwyMiA2NC4zYzEuOCA1IDMuMyAxMC42LS40IDE0LjV6Il0KICAgIH07CiAgICBmYVBob2VuaXhTcXVhZHJvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaG9lbml4LXNxdWFkcm9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1MTEiLCAiTTk2IDYzLjRjNDYuNS0zNi4xIDEwNS42LTU2LjEgMTY0LjUtNTQuNiAyOS42LS40IDU5LjEgNS40IDg2LjkgMTUuMy0yNC4xLTQuNi00OS02LjMtNzMuNC0yLjUtNDIuOSA1LjMtODMgMjcuMi0xMTEuOCA1OS4yIDUuNy0xIDEwLjgtMy43IDE2LTUuOSAxOC4xLTcuOSAzNy41LTEzLjMgNTcuMi0xNC44IDE5LjctMi4xIDM5LjYtLjQgNTkuMyAxLjktMTQuNCAyLjgtMjkuMSA0LjYtNDMgOS42LTM0LjQgMTEuMS02NS4zIDMzLjItODYuMyA2Mi42LTEzLjggMTkuNy0yMy42IDQyLjktMjQuNyA2Ny4xLS40IDE2LjUgNS4yIDM0LjggMTkuOCA0NCAxMS4yIDYuOCAyNC42IDkuMiAzNy41IDYuNyAxNS40LTIuNSAzMC4xLTguNiA0My42LTE2LjMgMTEuNS02LjggMjIuNy0xNC42IDMyLTI0LjMgMy44LTMuMiAyLjUtOC40IDIuNi0xMi44LTIuMS0uMy00LjQtMS4xLTYuMyAuMy0xMS40IDYuMy0yMy40IDExLjQtMzUuOCAxNS40LTIwIDYuMi00Mi4yIDguNS02Mi4xIC44IDEyLjggMS43IDI2LjEgLjMgMzcuNy01LjQgMjAuMi05LjcgMzYuOC0yNS4yIDU0LjQtMzguOCAyNy43LTIxLjMgNTcuNS0zOS45IDg4LjktNTUuMyAyNS43LTEyIDUyLjktMjIuOCA4MS42LTI0LjEtMTUuNiAxMy43LTMyLjEgMjYuNS00Ni44IDQxLjQtMTQuNSAxNC0yNy41IDI5LjUtNDAuMSA0NS4yLTMuNSA0LjYtOSA2LjktMTMuNiAxMC4yLTIyLjQgMTUtNDAuMyAzNS44LTUxLjkgNjAuMS05LjMgMTkuNy0xNC41IDQxLjktMTEuOCA2My42IDEuOSAxMy43IDguNyAyNy42IDIwLjkgMzQuOSAxMi45IDggMjkgOC4xIDQzLjUgNS4xIDMyLjgtNy40IDYxLjQtMjguOSA4MS01NS44IDIwLjQtMjcuNSAzMC41LTYyLjIgMjkuMi05Ni4zLS41LTcuNS0xLjYtMTUtMS43LTIyLjUgOCAxOS41IDE0LjggMzkuNyAxNi42IDYwLjggMiAxNC4zIC43IDI4LjgtMS42IDQyLjktMS45IDExLTUuNyAyMS41LTcuOCAzMi40IDIwLjQtMjIuOSAzNC01MC45IDM5LjMtODEuMSA1LjYtMzUuNSAuNy03MS45LTE0LjItMTA0LjYgMjAuOCAzMiAzMi4zIDY5LjYgMzUuNyAxMDcuNSAuNSAxMi43IC41IDI1LjUgMCAzOC4yLTIuOCAzNC4zLTEyLjkgNjcuNi0yOS42IDk3LjgtMjYuMSA0Ny4zLTY4IDg1LjYtMTE3LjIgMTA4LTc4LjMgMzYuMi0xNzQuNyAzMS4zLTI0OC0xNC43LTM5LTIzLjgtNzAuNi01OC05MS40LTk4LjctMTQuNy0yOC45LTIzLjMtNjAuNS0yNS40LTkyLjlsMC0zMS4zQzMuOSAxNzIgNDAuOSAxMDUuOCA5NiA2My40em0yMjIgODAuM2M1LjUtLjkgMTAuOC0yLjQgMTYtNC41IDUtMS44IDkuMi01LjkgMTAuMy0xMS4yLTkgNS0xOCA5LjktMjYuMyAxNS43eiJdCiAgICB9OwogICAgZmFDZW50ZXJjb2RlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNlbnRlcmNvZGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM4MCIsICJNMjAxLjggMjU0LjhhNjQuMSA2NC4xIDAgMSAxIDEyNy40IDEzLjggNjQuMSA2NC4xIDAgMSAxIC0xMjcuNC0xMy44em00MS42IDI0OC45Qzk2LjcgNDk2LTguMiAzNjUuNSAxMC4xIDIyNC4zIDIxLjMgMTM3LjcgNzUuOSA2Ny40IDE0OS4yIDMyLjMgMzEwLjItNDQuOCA0OTguOSA2OS43IDUwMy45IDI0OC45IDUwOCAzOTUuOSAzODUuNSA1MTEuMSAyNDMuNCA1MDMuN3ptMTc5LjktMTgwYzI3LjktMTE4LTE2MC41LTIwNS45LTIzNy4yLTIzNC4yLTU3LjUgNTYuMy02OS4xIDE4OC42LTMzLjggMzQ0LjQgNjguOCAxNS44IDE2OS4xLTI2LjQgMjcxLTExMC4yeiJdCiAgICB9OwogICAgZmFEZWJpYW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGViaWFuIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2MGIiLCAiTTM4MC40IDI0NS42YzMtNy42IDUuNS0xNCA1LjItMjQuNGwtNC4zIDljNC40LTEzLjIgNC0yNy4xIDMuNi00MC40LS4yLTYtLjMtMTEuOCAwLTE3LjRsLTEuOC0uNWMtMS41LTQ1LjItNDAuNi05My4xLTc1LjMtMTA5LjQtMzAtMTMuOC03Ni4xLTE2LjItOTcuMy01LjggMS4zLTEuMSA0LjItMiA2LjgtMi43bC4zLS4xYzMuMy0xIDYtMS43IDQtMi45LTE5LjIgMS45LTI0LjkgNS41LTMxLjEgOS40bC0uMSAwYy00LjYgMi45LTkuNSA2LTIwLjMgOC43LTMuNSAzLjQgMS43IDIgNS44IC45czcuMi0xLjktLjEgMi40Yy0zLjUgMS02LjYgMS4zLTkuNiAxLjZsLS4xIDBjLTguMyAuOC0xNS44IDEuNi0zMC43IDE3IC44IDEuMyAzLjQtLjIgNS4zLTEuM2wuMS0uMWMyLjMtMS40IDMuNC0yLTEuNyA0LjQtMTkuMS0yLjQtNjAuMyA0My43LTY5LjEgNTlsNC42IC44Yy0zLjIgOC02LjggMTQuOC0xMCAyMC44LTQuMyA4LjEtNy45IDE0LjktOC43IDIxLjMtLjMgNS4xLTEgMTEtMS43IDE3LjMtLjEgMS0uMiAyLS4zIDNsLS4xIC42Yy0zIDI3LjMtNi43IDYwLjggMy45IDczbC0xLjMgMTNjLjYgMS4yIDEuMSAyLjMgMS42IDMuNSAuMiAuNCAuNCAuOCAuNSAxLjEgMSAyLjEgMiA0LjIgMy4zIDYuMmwtMyAuMmM3IDIyLjEgMTAuOCAyMi41IDE1LjEgMjIuOSA0LjQgLjQgOS4zIC45IDE4LjcgMjQuMi0yLjctLjktNS41LTEuOS05LjQtNy4yLS41IDQuMSA1LjggMTYuMyAxMy4xIDI1LjhsLTMuMSAzLjZjMi4xIDMuNyA0LjggNi4yIDcuNiA4LjggMSAuOSAyLjEgMS45IDMuMSAyLjktMTEuOS02LjUgMy4yIDEzLjcgMTEuOSAyNS4yIC44IDEuMSAxLjUgMiAyLjIgMi45IDEuNCAxLjkgMi41IDMuNCAyLjkgNC4xbDIuNC00LjJjLS4zIDYuMSA0LjMgMTMuOSAxMy4xIDI0LjdsNy4zLS4zYzMgNiAxNCAxNi43IDIwLjcgMTcuMmwtNC40IDUuOGM4LjEgMi42IDEwLjMgNC4zIDEyLjcgNi4yIDIuNiAyLjEgNS40IDQuMyAxNi4xIDguMWwtNC4yLTcuNGMzLjUgMyA2LjIgNS45IDguOCA4LjdsLjEgLjFjNS4yIDUuNiA5LjkgMTAuNiAxOS43IDE1LjMgMTAuNyAzLjcgMTYuNiA0LjcgMjIuNyA1LjggLjMgMCAuNiAuMSAuOSAuMSA1LjQgLjggMTEuMiAxLjggMjAuOCA0LjUtMS4xLS4xLTIuMi0uMS0zLjMtLjEtMi4zLS4xLTQuNy0uMS03LS4xLTE0LjQtLjItMjkuMi0uNC00Mi43LTUuMi05Ni42LTI1LjctMTg0LjktMTM5LTE3OC40LTI1NS42LS42LTkuOS0uMy0yMC45IDAtMzAuNyAuNC0xMy41IC43LTI0LjgtMS42LTI4LjNsMS0zLjFjNS4zLTE3LjQgMTEuNy0zOC4yIDIzLjgtNjIuOGwtLjEtLjIgMC0uMWMuNCAuNCAzLjQgMy40IDguOC01LjggLjgtMS44IDEuNi0zLjcgMi40LTUuNiAuNS0xLjEgLjktMi4yIDEuNC0zLjIgMi41LTYuMSA1LjEtMTIuMyA4LjQtMTcuOWwyLjYtLjZjMS43LTEwLjEgMTctMjMuOCAyOS44LTM1LjJsMS4xLTFjNS43LTUuMSAxMC43LTkuNyAxMy42LTEzLjFsLjcgNC40YzE3LTE1LjkgNDQuNi0yNy41IDY1LjYtMzYuNGwuNS0uMmM0LjgtMiA5LjMtMy45IDEzLjMtNS43LTMuNCAzLjggMi4yIDIuNyAxMCAxIDQuOC0xIDEwLjQtMi4xIDE1LjMtMi40bC0zLjkgMi4xYy0yLjcgMS40LTUuNCAyLjgtOCA0LjYgOC4xLTIgMTEuNy0xLjQgMTUuNy0uOGwuMyAwYzMuNSAuNiA3LjMgMS4yIDE0LjYgLjItNS42IC44LTEyLjMgMy0xMS4yIDMuOCA3LjkgLjkgMTIuOC0uMSAxNy4yLTFsLjIgMGM1LjUtMS4xIDEwLjMtMiAxOS4zIC45bC0xLTQuOGM3LjMgMi42IDEyLjcgNC4zIDE3LjUgNS44bC41IC4xYzEwIDMgMTcuNiA1LjMgMzQuMiAxNC4xIDMuMiAuMiA1LjMtLjUgNy40LTEuMmwuMSAwYzMuNi0xLjEgNy0yLjEgMTUuMiAxLjIgLjMgLjUgLjUgMSAuNyAxLjQgLjEgLjIgLjIgLjUgLjMgLjdsMCAuMWMxIDIuNiAxLjggNC42IDE0LjYgMTIuMSAxLjctLjctMi43LTQuNy02LjQtOC4ybC0uMS0uMWMtLjItLjEtLjMtLjMtLjUtLjQgMzIuMiAxNy4zIDY3LjMgNTQuMSA3OCA5My41LTYtMTEuMS01LjItNS41LTQuMyAuNSAuNiA0IDEuMiA4LjEtLjIgNy41IDQuNSAxMi4xIDguMSAyNC41IDEwLjQgMzcuNGwtLjgtMi45LS4xLS4zYy0zLjMtMTEuOS05LjYtMzQuMy0xOS45LTQ5LjMtLjQgNC4zLTIuOCAzLjktNS4yIDMuNWwtLjEgMGMtMy4zLS42LTYuMi0xLjEtMS45IDEyLjYgMi42IDMuOCAzLjEgMi40IDMuNSAxLjEgLjUtMS41IC45LTIuNyA0LjcgNS4yIC4xIDQuMSAxIDguMiAyLjEgMTIuN2wuMSAuNmMuMSAuMyAuMSAuNSAuMiAuOGwuMSAuNmMuNiAyLjYgMS4zIDUuNCAxLjggOC40LTEuMS0uMi0yLjMtMi4yLTMuNC00LjItMS40LTIuNC0yLjgtNC43LTMuNy0zLjIgMi40IDExLjUgNi41IDE3LjQgOCAxOC4zLS4zIC42LS42IC43LTEuMSAuNy0uOCAwLTEuOCAuMS0xLjkgNS4zIC43IDEzLjcgMy4zIDEyLjUgNS4zIDExLjYgLjYtLjMgMS4yLS42IDEuNy0uNC0uNiAyLjUtMS42IDUuMS0yLjcgNy45LTIuOCA3LjEtNiAxNS40LTMuNCAyNi4xLS44LTMtMi02LTMuMS04LjlsLS4xLS40Yy0uMi0uNS0uNC0xLS42LTEuNS0uMy0uOC0uNi0xLjYtLjktMi4zLS42IDQuNC0uMyA3LjctLjEgMTAuNmwwIC43Yy40IDUuMyAuNyAxMC0zIDE5LjkgNC4zLTE0LjIgMy44LTI2LjktLjItMjAuOCAxIDEwLjktMy43IDIwLjQtOCAyOC45bC0uMSAuMmMtMy42IDcuMS02LjggMTMuNS01LjkgMTkuM2wtNS4yLTcuMWMtNy41IDEwLjktNyAxMy4zLTYuNSAxNS41bDAgLjFjLjUgMS45IDEgMy44LTMuNCAxMC44IDEuNy0yLjkgMS4zLTMuNiAxLTQuMi0uNC0uOC0uNy0xLjUgMS43LTUuMS0xLjYgLjEtNS41IDMuOS0xMC4xIDguNS0zLjkgMy45LTguNSA4LjQtMTIuOCAxMS44LTM3LjUgMzAuMS04Mi4zIDM0LTEyNS42IDE3LjggLjItMS0uMi0yLjEtMy4xLTQuMS0zNi44LTI4LjItNTguNS01Mi4xLTUwLjktMTA3LjUgMi4xLTEuNiAzLjYtNS44IDUuMy0xMC44bC4yLS40IC4xLS4zIDAtLjFjMi45LTguNCA2LjUtMTguOCAxNC4zLTIzLjggNy44LTE3LjMgMzEuMy0zMy4zIDU2LjQtMzMuNyAyNS42LTEuNCA0Ny4yIDEzLjcgNTguMSAyNy45LTE5LjgtMTguNC01Mi4xLTI0LTc5LjctMTAuNC0yOC4yIDEyLjctNDUgNDMuOC00Mi41IDc0LjcgLjMtLjQgLjYtLjYgLjktLjhsLjItLjJjLjYtLjUgMS4xLS45IDEuNC0zLjMtLjkgNjAuMiA2NC44IDEwNC4zIDExMi4xIDgybC42IDEuM2MxMi43LTMuNSAxNS45LTYuNSAyMC4zLTEwLjdsLjEtLjFjMi4yLTIuMSA0LjctNC41IDguOS03LjMtLjMgLjctMS4zIDEuNy0yLjQgMi43LTIuMiAyLjEtNC42IDQuNS0xLjYgNC42IDUtMS4zIDE4LjUtMTMuNCAyOC41LTIyLjMgLjYtLjUgMS4yLTEgMS43LTEuNSAxLjUtMS4zIDIuOC0yLjUgNC0zLjZsLjMtLjNjMS45LTQuMiAxLjYtNS42IDEuMy03bDAtLjFjLS40LTEuNi0uOC0zLjMgMi40LTkuNmw3LjMtMy43Yy44LTIuMSAxLjUtNC4xIDIuMi02IC4yLS42IC41LTEuMiAuNy0xLjhsLS40LS4yLS4xLS4xek0yNDggMzM0LjFjLTYtMy0xMy43LTguOS0xNC44LTExLjRsLS40IC4zYy0uMyAuNi0uNSAxLjMtLjIgMi4yLTEyLjItNS43LTIzLjQtMTQuMy0zMi42LTI0LjkgNC45IDcuMSAxMC4xIDE0LjEgMTcgMTkuNS02LjktMi4zLTE1LjEtMTEuOC0yMS42LTE5LjNsLS4xLS4xYy00LjMtNS03LjktOS4xLTkuNy05LjUgMTkuOCAzNS41IDgwLjUgNjIuMyAxMTIuMyA0OS0xNC43IC41LTMzLjQgLjMtNDkuOS01Ljh6bTc5LjMtMTE5LjdsLS4xLS4yYy0uNS0xLjUtMS4xLTMuMS0xLjctMy40IDEuNC01LjggNS40LTEwLjcgNC40IDQuNi0xIDMuOC0xLjggMS41LTIuNi0xem0tNC4yIDIyLjJjLTEuMyA3LjktNSAxNS41LTEwLjEgMjIuNSAuMi0yLTEuMi0yLjQtMi42LTIuOC0yLjktLjgtNS45LTEuNiA1LjYtMTYuMS0uNSAxLjktMi4xIDQuNi0zLjcgNy4zbC0uMyAuNGMtMy42IDUuOS02LjcgMTEgNCA0LjNsMS0xLjhjMi42LTQuNSA1LTguOCA2LTEzLjhsLjEgMHptLTU1LjYgMzMuOWM3LjEgLjYgMTQuMSAuNiAyMS0xLjEtMi41IDIuNC01LjIgNC44LTguMyA3LjItMTEuMS0xLjctMjEuMi02LTEyLjctNi4xem0tOTIuNiAxMS42YzMuNiA3LjEgNi40IDExLjUgOSAxNS43bC4xIC4yYzIuMyAzLjcgNC40IDcuMSA2LjggMTEuNy01LjEtNC4yLTguNy05LjUtMTIuNS0xNWwtLjMtLjVjLTEuNC0yLjEtMi44LTQuMi00LjQtNi4ybDEuMi01LjkgLjEgMHptNy41LTkuNmMxLjYgMy4zIDMuMiA2LjQgNS43IDkuMWwyLjYgNy43LTEuMy0yLjFjLTMuMi01LjMtNi4zLTEwLjYtOC0xNi43bDEgMnptMjM4LjktNDEuNmMtMi4zIDE3LjQtNy43IDM0LjYtMTYgNTAuMyA3LjYtMTQuOSAxMi41LTMwLjkgMTQuOC00Ny4ybDEuMi0zLjF6TTM1LjggMTEwLjZjLjQgLjggMS40IC41IDIuMyAuMyAxLjktLjUgMy42LS45LS4xIDcuNi0uNSAuMy0xIC43LTEuNSAxLTEuNCAuOS0yLjggMS45LTMuOSAzIDEuOS0zLjggMy41LTcuNCAzLjItMTEuOXpNMjUuNSAxNTIuM2MtLjcgMy43LTEuNSA3LjktMy40IDEzLjkgLjItMS45IDAtMy41LS4yLTQuOWwwLS4xYy0uNC0zLjQtLjctNi4zIDQuMy0xMi44LS4zIDEuMi0uNSAyLjUtLjcgMy44bDAgLjF6Il0KICAgIH07CiAgICBmYU1hc3RvZG9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1hc3RvZG9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0ZjYiLCAiTTQzMyAxNzkuMWMwLTk3LjItNjMuNy0xMjUuNy02My43LTEyNS43LTYyLjUtMjguNy0yMjguNi0yOC40LTI5MC41IDAgMCAwLTYzLjcgMjguNS02My43IDEyNS43IDAgMTE1LjctNi42IDI1OS40IDEwNS42IDI4OS4xIDQwLjUgMTAuNyA3NS4zIDEzIDEwMy4zIDExLjQgNTAuOC0yLjggNzkuMy0xOC4xIDc5LjMtMTguMWwtMS43LTM2LjlzLTM2LjMgMTEuNC03Ny4xIDEwLjFjLTQwLjQtMS40LTgzLTQuNC04OS42LTU0LS42LTQuNi0uOS05LjMtLjktMTMuOSA4NS42IDIwLjkgMTU4LjcgOS4xIDE3OC43IDYuNyA1Ni4xLTYuNyAxMDUtNDEuMyAxMTEuMi03Mi45IDkuOC00OS44IDktMTIxLjUgOS0xMjEuNXpNMzU3LjkgMzA0LjNsLTQ2LjYgMCAwLTExNC4yYzAtNDkuNy02NC01MS42LTY0IDYuOWwwIDYyLjUtNDYuMyAwIDAtNjIuNWMwLTU4LjUtNjQtNTYuNi02NC02LjlsMCAxMTQuMi00Ni43IDBjMC0xMjIuMS01LjItMTQ3LjkgMTguNC0xNzUgMjUuOS0yOC45IDc5LjgtMzAuOCAxMDMuOCA2LjFsMTEuNiAxOS41IDExLjYtMTkuNWMyNC4xLTM3LjEgNzguMS0zNC44IDEwMy44LTYuMSAyMy43IDI3LjMgMTguNCA1MyAxOC40IDE3NWwwIDB6Il0KICAgIH07CiAgICBmYVNrZXRjaCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJza2V0Y2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdjNiIsICJNMjcuOCAxNjIuMmwtMTguNSAyNC45IDkwLjUgMCA2LjktMTMwLjctNzguOSAxMDUuOHpNMzk2LjYgNDUuN0wyNjggMzIgNDAzLjcgMTc5LjIgMzk2LjYgNDUuN3pNMTEyLjUgMjE4LjNsLTExLjItMjItOTEuMSAwIDIyNC45IDI2MS43LTEyMi42LTIzOS43em0yLTMxLjJsMjg0IDBDMzQwLjYgMTI0LjMgMjkzLjMgNzIuOSAyNTYuNiAzM0wxMTQuNSAxODcuMXptMjk3LjMgOS4xbC0xMzMuOSAyNjEuOCAyMjQuOC0yNjEuNy05MC45IDAgMC0uMXpNNDE1LjcgNjlsLTkuNC0xMi42IC45IDE3LjMgNi4xIDExMy40IDkwLjMgMC04Ny45LTExOC4xek0xMTMuOCA5My41TDEwOS4yIDE3OS4xIDI0NSAzMiAxMTYuNCA0NS43IDExMy44IDkzLjV6TTQwMS41IDE5Ni4ybC0yOTAgMGMxOC4yIDM1LjYgNjYuNiAxMzAuMiAxNDUuMSAyODMuOEw0MDEuNSAxOTYuMnoiXQogICAgfTsKICAgIGZhV2ViQXdlc29tZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3ZWItYXdlc29tZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNjgyIiwgIk0zNzIuMiA1MmMwIDIwLjktMTIuNCAzOS0zMC4yIDQ3LjJMNDQ4IDE5MiA1NTIuNCAxNzEuMWMtNS4zLTcuNy04LjQtMTcuMS04LjQtMjcuMSAwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4YzAgMjYtMjAuNiA0Ny4xLTQ2LjQgNDhMNDgxIDQ0Mi4zYy0xMC4zIDIzLTMzLjIgMzcuNy01OC40IDM3LjdsLTIwNS4yIDBjLTI1LjIgMC00OC0xNC44LTU4LjQtMzcuN0w0Ni40IDE5MkMyMC42IDE5MS4xIDAgMTcwIDAgMTQ0IDAgMTE3LjUgMjEuNSA5NiA0OCA5NnM0OCAyMS41IDQ4IDQ4YzAgMTAuMS0zLjEgMTkuNC04LjQgMjcuMUwxOTIgMTkyIDI5OC4xIDk5LjFjLTE3LjctOC4zLTMwLTI2LjMtMzAtNDcuMSAwLTI4LjcgMjMuMy01MiA1Mi01MnM1MiAyMy4zIDUyIDUybC4xIDB6Il0KICAgIH07CiAgICBmYVNhc3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2FzcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDFlIiwgIk0zMDEuOCAzNzguOWwwIDB6bTI0OS4xLTg3Yy0yMC4xIDAtNDAgNC42LTU4IDEzLjUtNS45LTExLjktMTItMjIuMy0xMy0zMC4xLTEuMi05LjEtMi41LTE0LjUtMS4xLTI1LjNzNy43LTI2LjEgNy42LTI3LjItMS40LTYuNi0xNC4zLTYuNy0yNCAyLjUtMjUuMyA1LjljLTIuMyA2LjItNC4xIDEyLjYtNS4zIDE5LjEtMi4zIDExLjctMjUuOCA1My41LTM5LjEgNzUuMy00LjQtOC41LTguMS0xNi04LjktMjItMS4yLTkuMS0yLjUtMTQuNS0xLjEtMjUuM3M3LjctMjYuMSA3LjYtMjcuMi0xLjQtNi42LTE0LjMtNi43LTI0IDIuNS0yNS4zIDUuOS0yLjcgMTEuNC01LjMgMTkuMS0zMy45IDc3LjMtNDIuMSA5NS40Yy00LjIgOS4yLTcuOCAxNi42LTEwLjQgMjEuNi0uNCAuOC0uNyAxLjMtLjkgMS43IC4zLS41IC41LTEgLjUtLjgtMi4yIDQuMy0zLjUgNi43LTMuNSA2LjdsMCAuMWMtMS43IDMuMi0zLjYgNi4xLTQuNSA2LjEtLjYgMC0xLjktOC40IC4zLTE5LjkgNC43LTI0LjIgMTUuOC02MS44IDE1LjctNjMuMS0uMS0uNyAyLjEtNy4yLTcuMy0xMC43LTkuMS0zLjMtMTIuNCAyLjItMTMuMiAyLjJzLTEuNCAyLTEuNCAyIDEwLjEtNDIuNC0xOS40LTQyLjRjLTE4LjQgMC00NCAyMC4yLTU2LjYgMzguNS03LjkgNC4zLTI1IDEzLjYtNDMgMjMuNS02LjkgMy44LTE0IDcuNy0yMC43IDExLjQtLjUtLjUtLjktMS0xLjQtMS41LTM1LjgtMzguMi0xMDEuOS02NS4yLTk5LjEtMTE2LjUgMS0xOC43IDcuNS02Ny44IDEyNy4xLTEyNy40IDk4LTQ4LjggMTc2LjMtMzUuNCAxODkuOC01LjYgMTkuNCA0Mi41LTQxLjkgMTIxLjYtMTQzLjcgMTMzLTM4LjggNC4zLTU5LjItMTAuNy02NC4zLTE2LjMtNS4zLTUuOS02LjEtNi4yLTguMS01LjEtMy4zIDEuOC0xLjIgNyAwIDEwLjEgMyA3LjkgMTUuNSAyMS45IDM2LjggMjguOSAxOC43IDYuMSA2NC4yIDkuNSAxMTkuMi0xMS44IDYxLjgtMjMuOCAxMDkuOS05MC4xIDk1LjgtMTQ1LjYtMTQuNC01Ni40LTEwNy45LTc0LjktMTk2LjMtNDMuNS01Mi43IDE4LjctMTA5LjcgNDguMS0xNTAuNyA4Ni40LTQ4LjcgNDUuNi01Ni41IDg1LjMtNTMuMyAxMDEuOSAxMS40IDU4LjkgOTIuNiA5Ny4zIDEyNS4xIDEyNS43LTEuNiAuOS0zLjEgMS43LTQuNSAyLjUtMTYuMyA4LjEtNzguMiA0MC41LTkzLjcgNzQuNy0xNy41IDM4LjggMi45IDY2LjYgMTYuMyA3MC40IDQxLjggMTEuNiA4NC42LTkuMyAxMDcuNi00My42czIwLjItNzkuMSA5LjYtOTkuNWMtLjEtLjMtLjMtLjUtLjQtLjggNC4yLTIuNSA4LjUtNSAxMi44LTcuNSA4LjMtNC45IDE2LjQtOS40IDIzLjUtMTMuMy00IDEwLjgtNi45IDIzLjgtOC40IDQyLjYtMS44IDIyIDcuMyA1MC41IDE5LjEgNjEuNyA1LjIgNC45IDExLjUgNSAxNS40IDUgMTMuOCAwIDIwLTExLjQgMjYuOS0yNSA4LjUtMTYuNiAxNi0zNS45IDE2LTM1LjlzLTkuNCA1Mi4yIDE2LjMgNTIuMmM5LjQgMCAxOC44LTEyLjEgMjMtMTguM2wwIC4xcy4yLS40IC43LTEuMmMxLTEuNSAxLjUtMi40IDEuNS0yLjRsMC0uM2MzLjgtNi41IDEyLjEtMjEuNCAyNC42LTQ2IDE2LjItMzEuOCAzMS43LTcxLjUgMzEuNy03MS41IDEuNSA4LjcgMy42IDE3LjMgNi4yIDI1LjggMi44IDkuNSA4LjcgMTkuOSAxMy40IDMwLTMuOCA1LjItNi4xIDguMi02LjEgOC4yIDAgLjEgMCAuMSAuMSAuMi0zIDQtNi40IDguMy05LjkgMTIuNS0xMi44IDE1LjItMjggMzIuNi0zMCAzNy42LTIuNCA1LjktMS44IDEwLjMgMi44IDEzLjcgMy40IDIuNiA5LjQgMyAxNS43IDIuNSAxMS41LS44IDE5LjYtMy42IDIzLjUtNS40IDcuMi0yLjYgMTQtNi4xIDIwLjItMTAuNiAxMi41LTkuMiAyMC4xLTIyLjQgMTkuNC0zOS44LS40LTkuNi0zLjUtMTkuMi03LjMtMjguMiAxLjEtMS42IDIuMy0zLjMgMy40LTUgMTkuOC0yOC45IDM1LjEtNjAuNiAzNS4xLTYwLjYgMS41IDguNyAzLjYgMTcuMyA2LjIgMjUuOCAyLjQgOC4xIDcuMSAxNyAxMS40IDI1LjctMTguNiAxNS4xLTMwLjEgMzIuNi0zNC4xIDQ0LjEtNy40IDIxLjMtMS42IDMwLjkgOS4zIDMzLjEgNC45IDEgMTEuOS0xLjMgMTcuMS0zLjUgNy43LTIuNiAxNS02LjMgMjEuNi0xMS4xIDEyLjUtOS4yIDI0LjYtMjIuMSAyMy44LTM5LjYtLjMtNy45LTIuNS0xNS44LTUuNC0yMy40IDE1LjctNi42IDM2LjEtMTAuMiA2Mi4xLTcuMiA1NS43IDYuNSA2Ni42IDQxLjMgNjQuNSA1NS44cy0xMy44IDIyLjYtMTcuNyAyNS01LjEgMy4zLTQuOCA1LjFjLjUgMi42IDIuMyAyLjUgNS42IDEuOSA0LjYtLjggMjkuMi0xMS44IDMwLjMtMzguNyAxLjYtMzQtMzEuMS03MS40LTg5LTcxLjFsMCAwek0xMjEuOCA0MzYuNmMtMTguNCAyMC4xLTQ0LjIgMjcuNy01NS4zIDIxLjMtMTEuOS02LjktNy4yLTM2LjUgMTUuNS01Ny45IDEzLjgtMTMgMzEuNi0yNSA0My40LTMyLjQgMi43LTEuNiA2LjYtNCAxMS40LTYuOSAuOC0uNSAxLjItLjcgMS4yLS43IC45LS42IDEuOS0xLjEgMi45LTEuNyA4LjMgMzAuNCAuMyA1Ny4yLTE5LjEgNzguM2wwIDB6bTEzNC40LTkxLjRjLTYuNCAxNS43LTE5LjkgNTUuNy0yOC4xIDUzLjYtNy0xLjgtMTEuMy0zMi4zLTEuNC02Mi4zIDUtMTUuMSAxNS42LTMzLjEgMjEuOS00MC4xIDEwLjEtMTEuMyAyMS4yLTE0LjkgMjMuOC0xMC40IDMuNSA1LjktMTIuMiA0OS40LTE2LjIgNTkuMnptMTExIDUzYy0yLjcgMS40LTUuMiAyLjMtNi40IDEuNi0uOS0uNSAxLjEtMi40IDEuMS0yLjRzMTMuOS0xNC45IDE5LjQtMjEuN2MzLjItNCA2LjktOC43IDEwLjktMTMuOSAwIC41IC4xIDEgLjEgMS42LS4xIDE3LjktMTcuMyAzMC0yNS4xIDM0LjhsMCAwem04NS42LTE5LjVjLTItMS40LTEuNy02LjEgNS0yMC43IDIuNi01LjcgOC42LTE1LjMgMTktMjQuNSAxLjIgMy41IDEuOCA3LjEgMS45IDEwLjgtLjEgMjIuNS0xNi4yIDMwLjktMjUuOSAzNC40bDAgMHoiXQogICAgfTsKICAgIGZhU3F1YXJlV2hhdHNhcHAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXdoYXRzYXBwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbIndoYXRzYXBwLXNxdWFyZSJdLCAiZjQwYyIsICJNOTIuMSAyNTQuNmMwIDI0LjkgNyA0OS4yIDIwLjIgNzAuMWwzLjEgNS0xMy4zIDQ4LjYgNDkuOS0xMy4xIDQuOCAyLjljMjAuMiAxMiA0My40IDE4LjQgNjcuMSAxOC40bC4xIDBjNzIuNiAwIDEzMy4zLTU5LjEgMTMzLjMtMTMxLjggMC0zNS4yLTE1LjItNjguMy00MC4xLTkzLjItMjUtMjUtNTgtMzguNy05My4yLTM4LjctNzIuNyAwLTEzMS44IDU5LjEtMTMxLjkgMTMxLjh6TTI3NC44IDMzMGMtMTIuNiAxLjktMjIuNCAuOS00Ny41LTkuOS0zNi44LTE1LjktNjEuOC01MS41LTY2LjktNTguNy0uNC0uNi0uNy0uOS0uOC0xLjEtMi0yLjYtMTYuMi0yMS41LTE2LjItNDEgMC0xOC40IDktMjcuOSAxMy4yLTMyLjMgLjMtLjMgLjUtLjUgLjctLjggMy42LTQgNy45LTUgMTAuNi01IDIuNiAwIDUuMyAwIDcuNiAuMWwuOCAwYzIuMyAwIDUuMiAwIDguMSA2LjggMS4yIDIuOSAzIDcuMyA0LjkgMTEuOCAzLjMgOCA2LjcgMTYuMyA3LjMgMTcuNiAxIDIgMS43IDQuMyAuMyA2LjktMy40IDYuOC02LjkgMTAuNC05LjMgMTMtMy4xIDMuMi00LjUgNC43LTIuMyA4LjYgMTUuMyAyNi4zIDMwLjYgMzUuNCA1My45IDQ3LjEgNCAyIDYuMyAxLjcgOC42LTEgMi4zLTIuNiA5LjktMTEuNiAxMi41LTE1LjUgMi42LTQgNS4zLTMuMyA4LjktMnMyMy4xIDEwLjkgMjcuMSAxMi45Yy44IC40IDEuNSAuNyAyLjEgMSAyLjggMS40IDQuNyAyLjMgNS41IDMuNiAuOSAxLjkgLjkgOS45LTIuNCAxOS4xLTMuMyA5LjMtMTkuMSAxNy43LTI2LjcgMTguOHpNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTE0OC4xIDM5My45TDY0IDQxNiA4Ni41IDMzMy44Yy0xMy45LTI0LTIxLjItNTEuMy0yMS4yLTc5LjMgLjEtODcuNCA3MS4yLTE1OC41IDE1OC42LTE1OC41IDQyLjQgMCA4Mi4yIDE2LjUgMTEyLjIgNDYuNSAyOS45IDMwIDQ3LjkgNjkuOCA0Ny45IDExMi4yIDAgODcuNC03Mi43IDE1OC41LTE2MC4xIDE1OC41LTI2LjYgMC01Mi43LTYuNy03NS44LTE5LjN6Il0KICAgIH07CiAgICBmYVdoYXRzYXBwU3F1YXJlID0gZmFTcXVhcmVXaGF0c2FwcDsKICAgIGZhU2t5cGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2t5cGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE3ZSIsICJNNDI0LjcgMjk5LjhjMi45LTE0IDQuNy0yOC45IDQuNy00My44IDAtMTEzLjUtOTEuOS0yMDUuMy0yMDUuMy0yMDUuMy0xNC45IDAtMjkuNyAxLjctNDMuOCA0LjctMTktMTQuNy00Mi42LTIzLjQtNjguMy0yMy40LTYxLjggMC0xMTIgNTAuMi0xMTIgMTEyIDAgMjUuNyA4LjcgNDkuMyAyMy4zIDY4LjItMi45IDE0LTQuNyAyOC45LTQuNyA0My44IDAgMTEzLjUgOTEuOSAyMDUuMyAyMDUuMyAyMDUuMyAxNC45IDAgMjkuNy0xLjcgNDMuOC00LjcgMTkgMTQuNiA0Mi42IDIzLjMgNjguMiAyMy4zIDYxLjggMCAxMTItNTAuMiAxMTItMTEyIC4xLTI1LjYtOC42LTQ5LjItMjMuMi02OC4xek0yMzAuMSAzOTEuM2MtNjUuNiAwLTEyMC41LTI5LjItMTIwLjUtNjUgMC0xNiA5LTMwLjYgMjkuNS0zMC42IDMxLjIgMCAzNC4xIDQ0LjkgODguMSA0NC45IDI1LjcgMCA0Mi4zLTExLjQgNDIuMy0yNi4zIDAtMTguNy0xNi0yMS42LTQyLTI4LTYyLjUtMTUuNC0xMTcuOC0yMi0xMTcuOC04Ny4yIDAtNTkuMiA1OC42LTgxLjEgMTA5LjEtODEuMSA1NS4xIDAgMTEwLjggMjEuOSAxMTAuOCA1NS40IDAgMTYuOS0xMS40IDMxLjgtMzAuMyAzMS44LTI4LjMgMC0yOS4yLTMzLjUtNzUtMzMuNS0yNS43IDAtNDIgNy00MiAyMi41IDAgMTkuOCAyMC44IDIxLjggNjkuMSAzMyA0MS40IDkuMyA5MC43IDI2LjggOTAuNyA3Ny42IDAgNTkuMS01Ny4xIDg2LjUtMTEyIDg2LjV6Il0KICAgIH07CiAgICBmYUFuZ3VsYXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYW5ndWxhciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDIwIiwgIk0xODUuNyAyNjguMWw3Ni4yIDAtMzguMS05MS42LTM4LjEgOTEuNnpNMjIzLjggMzJMMTYgMTA2LjQgNDcuOCAzODIuMSAyMjMuOCA0ODAgMzk5LjggMzgyLjEgNDMxLjYgMTA2LjQgMjIzLjggMzJ6TTM1NCAzNzMuOGwtNDguNiAwLTI2LjItNjUuNC0xMTAuNiAwLTI2LjIgNjUuNC00OC43IDAgMTMwLjEtMjkyLjMgMTMwLjIgMjkyLjN6Il0KICAgIH07CiAgICBmYU9wZW5zdXNlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm9wZW5zdXNlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU2MmIiLCAiTTQ3MS4xIDEwMi43cy0uMyAxOC4zLS4zIDIwLjNjLTkuMS0zLTc0LjQtMjQuMS0xMzUuNy0yNi4zLTUxLjktMS44LTEyMi44LTQuMy0yMjMgNTcuMy0xOS40IDEyLjQtNzMuOSA0Ni4xLTk5LjYgMTA5LjctNS41IDEzLjMtMTIuNiA0My4zLTUuNSA3MS40IDMuMyAxMi44IDguOSAyNC45IDE2LjUgMzUuNyAxNy40IDI1IDQ2LjYgNDEuNiA3OC4xIDQ0LjQgNDQuNCAzLjkgNzguMS0xNiA5MC01My4zIDguMi0yNS44IDAtNjMuNi0zMS41LTgyLjktMjUuNi0xNS43LTUzLjMtMTIuMS02OS4yLTEuNi0xMy45IDkuMi0yMS44IDIzLjUtMjEuNiAzOS4yIC4zIDI3LjggMjQuMyA0Mi42IDQxLjUgNDIuNiA1LjQgMCAxMC43LS45IDE1LjgtMi43IDYuNS0xLjggMTMuMy02LjUgMTMuMy0xNC45IDAtMTIuMS0xMS42LTE0LjgtMTYuOC0xMy45LTIuOSAuNS00LjUgMi0xMS44IDIuNC0yLS4yLTEyLTMuMS0xMi0xNGwwLS4xYy4yLTEyLjMgMTMuMi0xOCAyNS41LTE2LjkgMzIuMyAyLjggNDcuNyA0MC43IDI4LjUgNjUuNy0xOC4zIDIzLjctNzYuNiAyMy4yLTk5LjctMjAuNC0yNi00OS4yIDEyLjctMTExLjIgODctOTguNCAzMy4yIDUuNyA4My42IDM1LjUgMTAyLjQgMTA0LjNsNDUuOSAwYy01LjctMTcuNi04LjktNjguMyA0Mi43LTY4LjMgNTYuNyAwIDYzLjkgMzkuOSA3OS44IDY4LjNsNDguNiAwYy0xMi44LTE4LjMtMjEuNy0zOC43LTE4LjktNTUuOCA1LjYtMzMuOCAzOS43LTE4LjQgODIuNC0xNy40IDY2LjUgLjQgMTAyLjEtMjcgMTAzLjEtMjggMy43LTMuMSA2LjUtMTUuOCA3LTE3LjcgMS4zLTUuMS0zLjItMi40LTMuMi0yLjQtOC43IDUuMi0zMC41IDE1LjItNTAuOSAxNS42LTI1LjMgLjUtNzYuMi0yNS40LTgxLjYtMjguMi0uMy0uNCAuMSAxLjItMTEtMjUuNSA4OC40IDU4LjMgMTE4LjMgNDAuNSAxNDUuMiAyMS43IC44LS42IDQuMy0yLjkgMy42LTUuNy0xMy44LTQ4LjEtMjIuNC02Mi43LTM0LjUtNjkuNi0zNy0yMS42LTEyNS0zNC43LTEyOS4yLTM1LjMgLjEtLjEtLjktLjMtLjkgLjd6bTYwLjQgNzIuOGEzNy42IDM3LjYgMCAxIDEgNzUuMiAyLjYgMzcuNiAzNy42IDAgMSAxIC03NS4yLTIuNnptMzguNi0yNS4zYy0zLjYtLjMtNy4xIC4xLTEwLjUgMS4ycy02LjUgMi45LTkuMiA1LjMtNC44IDUuMy02LjMgOC41LTIuNCA2LjctMi41IDEwLjMgLjUgNy4xIDEuOCAxMC40IDMuMyA2LjMgNS44IDguOSA1LjUgNC41IDguOCA1LjkgNi45IDIgMTAuNCAxLjljMy42IC4zIDcuMS0uMSAxMC41LTEuMnM2LjUtMi45IDkuMi01LjMgNC44LTUuMyA2LjMtOC41IDIuNC02LjcgMi41LTEwLjMtLjUtNy4xLTEuOC0xMC40LTMuMy02LjMtNS44LTguOS01LjUtNC41LTguOC01LjktNi45LTItMTAuNC0xLjl6bTQuMyAyOC44Yy0xNS40IDAtMTUuNC0xNS42IDAtMTUuNnMxNS40IDE1LjYgMCAxNS42eiJdCiAgICB9OwogICAgZmFEcm9wYm94ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRyb3Bib3giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjE2YiIsICJNMjg4LjQgMTE2LjNsLTEzMiA4NC4zIDEzMiA4NC4zLTEzMiA4NC4zLTEzMi40LTg1LjEgMTMyLjMtODQuMy0xMzIuMy04My41IDEzMi4zLTg0LjMgMTMyLjEgODQuM3pNMTU1LjYgMzk1LjdsMTMyLTg0LjMgMTMyIDg0LjMtMTMyIDg0LjMtMTMyLTg0LjN6TTI4OC40IDI4NC4xbDEzMi04NC4zLTEzMi04My42IDEzMS4zLTg0LjIgMTMyLjMgODQuMy0xMzIuMyA4NC4zIDEzMi4zIDg0LjItMTMyLjMgODQuMy0xMzEuMy04NXoiXQogICAgfTsKICAgIGZhRGVlemVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRlZXplciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDc3IiwgIk0xNC44IDEwMS4xQzYuNiAxMDEuMSAwIDEyNy42IDAgMTYwLjNzNi42IDU5LjIgMTQuOCA1OS4yIDE0LjgtMjYuNSAxNC44LTU5LjItNi42LTU5LjItMTQuOC01OS4yek00NDguNyA0MC45Yy03LjcgMC0xNC41IDE3LjEtMTkuNCA0NC4xLTcuNy00Ni43LTIwLjItNzctMzQuMi03Ny0xNi44IDAtMzEuMSA0Mi45LTM4IDEwNS40LTYuNi00NS40LTE2LjgtNzQuMi0yOC4zLTc0LjItMTYuMSAwLTI5LjYgNTYuOS0zNC43IDEzNi4yLTkuNC00MC44LTIzLjItNjYuMy0zOC4zLTY2LjNzLTI4LjggMjUuNS0zOC4zIDY2LjNjLTUuMS03OS4zLTE4LjYtMTM2LjItMzQuNy0xMzYuMi0xMS41IDAtMjEuNyAyOC44LTI4LjMgNzQuMi02LjYtNjIuNS0yMS4yLTEwNS40LTM3LjgtMTA1LjQtMTQgMC0yNi41IDMwLjQtMzQuMiA3Ny00LjgtMjctMTEuNy00NC4xLTE5LjQtNDQuMS0xNC4zIDAtMjYgNTkuMi0yNiAxMzIuMVM0OSAzMDUuMiA2My4zIDMwNS4yYzUuOSAwIDExLjUtOS45IDE1LjgtMjYuOCA2LjkgNjEuNyAyMS4yIDEwNC4xIDM4IDEwNC4xIDEzIDAgMjQuNS0yNS41IDMyLjEtNjUuNiA1LjQgNzYuMyAxOC42IDEzMC40IDM0LjIgMTMwLjQgOS43IDAgMTguNi0yMS40IDI1LjMtNTYuNCA3LjkgNzIuMiAyNi4zIDEyMi43IDQ3LjcgMTIyLjdzMzkuNS01MC41IDQ3LjctMTIyLjdjNi42IDM1IDE1LjYgNTYuNCAyNS4zIDU2LjQgMTUuNiAwIDI4LjgtNTQuMSAzNC4yLTEzMC40IDcuNyA0MC4xIDE5LjQgNjUuNiAzMi4xIDY1LjYgMTYuNiAwIDMwLjktNDIuMyAzOC0xMDQuMSA0LjMgMTYuOCA5LjcgMjYuOCAxNS44IDI2LjggMTQuMyAwIDI2LTU5LjIgMjYtMTMyLjFTNDYzIDQwLjkgNDQ4LjcgNDAuOXptNDguNSA2MC4yYy04LjIgMC0xNC44IDI2LjUtMTQuOCA1OS4yczYuNiA1OS4yIDE0LjggNTkuMiAxNC44LTI2LjUgMTQuOC01OS4yLTYuNi01OS4yLTE0LjgtNTkuMnoiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zU2FtcGxpbmcgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy1zYW1wbGluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGYwIiwgIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6bTMuNiA1My4yYzIuOC0uMyAxMS41IDEgMTEuNSAxMS41bDYuNiAxMDcuMiA0LjktNTkuM2MwLTYgNC43LTEwLjYgMTAuNi0xMC42czEwLjYgNC43IDEwLjYgMTAuNmMwIDIuNS0uNS01LjcgNS43IDgxLjVsNS44LTY0LjJjLjMtMi45IDIuOS05LjMgMTAuMi05LjMgMy44IDAgOS45IDIuMyAxMC42IDguOWwxMS41IDk2LjUgNS4zLTEyLjhjMS44LTQuNCA1LjItNi42IDEwLjItNi42bDU4IDAgMCAyMS4zLTUwLjkgMC0xOC4yIDQ0LjNjLTMuOSA5LjktMTkuNSA5LjEtMjAuOC0zLjFsLTQtMzEuOS03LjUgOTIuNmMtLjMgMy0zIDkuMy0xMC4yIDkuMy0zIDAtOS44LTIuMS0xMC42LTkuMyAwLTEuOSAuNiA1LjgtNi4yLTc3LjlsLTUuMyA3Mi4yYy0xLjEgNC44LTQuOCA5LjMtMTAuNiA5LjMtMi45IDAtOS44LTItMTAuNi05LjMgMC0xLjkgLjUgNi43LTUuOC04Ny43TDI1NSAzODMuOWMwIDYuMy0zLjYgMTIuNC0xMC42IDEyLjQtNS4yIDAtMTAuNi00LjEtMTAuNi0xMkwyMjggMjk2LjZjLTUuOCA5Mi41LTUuMyA4NC01LjMgODUuOS0xLjEgNC44LTQuOCA5LjMtMTAuNiA5LjMtMyAwLTkuOC0yLjEtMTAuNi05LjMgMC0uNy0uNC0xLjEtLjQtMi42bC02LjItODguNi00LjkgNTYuN2MtLjcgNi41LTYuNyA5LjMtMTAuNiA5LjMtNS44IDAtOS42LTQuMS0xMC42LTguOUwxNTcuNyAyNzJjLTIgNC0zLjUgOC40LTExLjEgOC40bC01MS40IDAgMC0yMS4zIDQ0LjggMCAxMy43LTI3LjljNC40LTkuOSAxOC4yLTcuMiAxOS45IDIuN2wzLjEgMjAuNCA4LjQtOTcuOWMwLTYgNC44LTEwLjYgMTAuNi0xMC42IC41IDAgMTAuNi0uMiAxMC42IDEyLjRsNC45IDY5LjEgNi42LTkyLjZjMC0xMC4xIDkuNS0xMC42IDEwLjItMTAuNiAuNiAwIDEwLjYgLjcgMTAuNiAxMC42bDUuMyA4MC42IDYuMi05Ny45Yy4xLTEuMS0uNi0xMC4zIDkuOS0xMS41eiJdCiAgICB9OwogICAgZmFKZWRpT3JkZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiamVkaS1vcmRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTBlIiwgIk0zOTguOSAzNzMuNmM5NS45LTEyMi4xIDE3LjItMjMzLjEgMTcuMi0yMzMuMSA0NS40IDg1LjgtNDEuNCAxNzAuNS00MS40IDE3MC41IDEwNS0xNzEuNS02MC41LTI3MS41LTYwLjUtMjcxLjUgOTYuOSA3Mi43LTEwLjEgMTkwLjctMTAuMSAxOTAuNyA4NS44IDE1OC40LTY4LjYgMjMwLjEtNjguNiAyMzAuMXMtLjQtMTYuOS0yLjItODUuN2M0LjMgNC41IDM0LjUgMzYuMiAzNC41IDM2LjJsLTI0LjItNDcuNCA2Mi42LTkuMS02Mi42LTkuMSAyMC4yLTU1LjUtMzEuNCA0NS45Yy0yLjItODcuNy03LjgtMzA1LjEtNy45LTMwNi45IDAgMS01LjYgMjE5LTcuOSAzMDYuOWwtMzEuNC00NS45IDIwLjIgNTUuNS02Mi42IDkuMSA2Mi42IDkuMS0yNC4yIDQ3LjQgMzQuNS0zNi4yYy0xLjggNjguOC0yLjIgODUuNy0yLjIgODUuN1M1OS4xIDM4OC42IDE0NC45IDIzMC4yYzAgMC0xMDctMTE4LjEtMTAuMS0xOTAuNyAwIDAtMTY1LjUgOTkuOS02MC41IDI3MS41IDAgMC04Ni44LTg0LjgtNDEuNC0xNzAuNSAwIDAtNzguNyAxMTEgMTcuMiAyMzMuMSAwIDAtMjYuMi0xNi4xLTQ5LjQtNzcuNyAwIDAgMTYuOSAxODMuMyAyMjIgMTg1LjdsNC4xIDBjMjA1LTIuNCAyMjItMTg1LjcgMjIyLTE4NS43LTIzLjYgNjEuNS00OS45IDc3LjctNDkuOSA3Ny43eiJdCiAgICB9OwogICAgZmFSUHJvamVjdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyLXByb2plY3QiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRmNyIsICJNNTc4LjUgMjI2LjZDNTc4LjUgMTE5LjEgNDQ4LjQgMzIgMjg4IDMyUy0yLjUgMTE5LjEtMi41IDIyNi42YzAgOTUuOCAxMDMuMyAxNzUuNCAyMzkuNCAxOTEuNWwwIDYxLjkgOTkuMSAwIDAtNjEuNWMyNC4zLTIuNyA0Ny42LTcuNCA2OS40LTEzLjlsNDAuMSA3NS40IDExMiAwLTY3LjQtMTEzLjdjNTQuNS0zNS40IDg4LjQtODQuOSA4OC40LTEzOS43ek0xMTEuNyAyNDEuMWMwLTczLjUgOTguOS0xMzMgMjIwLjgtMTMzczIxMS45IDQwLjcgMjExLjkgMTMzYzAgNTAuMS0yNi41IDg1LTcwLjMgMTA2LjQtMi40LTEuNi00LjctMi45LTYuNC0zLjctMTAuMi01LjItMjcuOC0xMC41LTI3LjgtMTAuNXM4Ni42LTYuNCA4Ni42LTkyLjctOTAuNi04Ny45LTkwLjYtODcuOWwtMTk5IDAgMCAyMDguM2MtNzQuMS0yMS41LTEyNS4yLTY3LjEtMTI1LjItMTE5Ljl6bTIyNS4xIDM4LjNsMC01NS42YzU3LjggMCA4Ny44LTYuOCA4Ny44IDI3LjMgMCAzNi41LTM4LjIgMjguMy04Ny44IDI4LjN6bS0uOSA3Mi41bDI2LjYgMGMxMC44IDAgMTguOSAxMS43IDI0IDE5LjItMTYuMSAxLjktMzMgMi44LTUwLjYgMi45bDAtMjIuMXoiXQogICAgfTsKICAgIGZhSW5zdGFsb2QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaW5zdGFsb2QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA4MSIsICJNMTUzLjYgNDgwbDIzMy43IDAgMTE1LjQtMjA0LjItMjk4LjMgNTcuNC01MC44IDE0Ni44ek01MDUgMjQwLjFMMzg3LjQgMzIgMTU1LjkgMzIgMzYwLjUgMjY3LjkgNTA1IDI0MC4xek0xMjQuNiA0OC44TDcuNSAyNTYgMTIzLjUgNDYxLjIgMjI1LjkgMTY1LjYgMTI0LjYgNDguOHoiXQogICAgfTsKICAgIGZhQ2FuYWRpYW5NYXBsZUxlYWYgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2FuYWRpYW4tbWFwbGUtbGVhZiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzg1IiwgIk0zODMuOCAzNTEuN2MyLjUtMi41IDEwNS4yLTkyLjQgMTA1LjItOTIuNGwtMTcuNS03LjVjLTEwLTQuOS03LjQtMTEuNS01LTE3LjQgMi40LTcuNiAyMC4xLTY3LjMgMjAuMS02Ny4zcy00Ny43IDEwLTU3LjcgMTIuNWMtNy41IDIuNC0xMC0yLjUtMTIuNS03LjVzLTE1LTMyLjQtMTUtMzIuNC01Mi42IDU5LjktNTUuMSA2Mi4zYy0xMCA3LjUtMjAuMSAwLTE3LjYtMTAgMC0xMCAyNy42LTEyOS42IDI3LjYtMTI5LjZzLTMwLjEgMTcuNC00MC4xIDIyLjRjLTcuNSA1LTEyLjYgNS0xNy42LTUtNS4xLTcuNS00Mi43LTc5LjgtNDIuNy03OS44cy0zNy41IDcyLjMtNDIuNSA3OS44Yy01IDEwLTEwIDEwLTE3LjYgNS0xMC01LTQwLjEtMjIuNC00MC4xLTIyLjRTMTgzLjMgMTgyIDE4My4zIDE5MmMyLjUgMTAtNy41IDE3LjUtMTcuNiAxMC0yLjUtMi41LTU1LjEtNjIuMy01NS4xLTYyLjNzLTEyLjUgMjcuMy0xNSAzMi4zLTUgOS45LTEyLjUgNy41QzczIDE3NyAyNS40IDE2NyAyNS40IDE2N1M0MyAyMjYuNyA0NS41IDIzNC4zYzIuNCA2IDUgMTIuNS01IDE3LjRMMjMgMjU5LjNzMTAyLjYgODkuOSAxMDUuMiA5Mi40YzUuMSA1IDEwIDcuNSA1LjEgMjIuNS01LjEgMTUtMTAuMSAzNS4xLTEwLjEgMzUuMXM5NS4yLTIwLjEgMTA1LjMtMjIuNmM4LjctLjkgMTguMyAyLjUgMTguMyAxMi41UzI0MSA1MTIgMjQxIDUxMmwzMCAwcy01LjgtMTAyLjctNS44LTExMi44IDkuNS0xMy40IDE4LjQtMTIuNWMxMCAyLjUgMTA1LjIgMjIuNiAxMDUuMiAyMi42cy01LTIwLjEtMTAtMzUuMSAwLTE3LjUgNS0yMi41eiJdCiAgICB9OwogICAgZmFFdGhlcmV1bSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJldGhlcmV1bSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmNDJlIiwgIk0zMTEuOSAyNjAuOEwxNjAgMzUzLjYgOCAyNjAuOCAxNjAgMCAzMTEuOSAyNjAuOHpNMTYwIDM4My40TDggMjkwLjYgMTYwIDUxMiAzMTIgMjkwLjYgMTYwIDM4My40eiJdCiAgICB9OwogICAgZmFIb3V6eiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJob3V6eiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjdjIiwgIk0yNzYgMzMwLjdsLTEwNC42IDAgMCAxNDkuMy0xNTQuMyAwIDAtNDQ4IDEwOS41IDAgMCAxMDQuNSAzMDUuMSA4NS42IDAgMjU3LjktMTU1LjcgMCAwLTE0OS4zeiJdCiAgICB9OwogICAgZmFWaWJlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2aWJlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDA5IiwgIk00NDQuMyA0OS45Yy0xMi43LTExLjctNjQuMS00OS0xNzguNy00OS41IDAgMC0xMzUuMS04LjEtMjAwLjkgNTIuMy0zNi42IDM2LjYtNDkuNSA5MC4zLTUwLjkgMTU2LjhzLTMuMSAxOTEuMSAxMTcgMjI0LjlsLjEgMC0uMSA1MS42cy0uOCAyMC45IDEzIDI1LjFjMTYuNiA1LjIgMjYuNC0xMC43IDQyLjMtMjcuOCA4LjctOS40IDIwLjctMjMuMiAyOS44LTMzLjcgODIuMiA2LjkgMTQ1LjMtOC45IDE1Mi41LTExLjIgMTYuNi01LjQgMTEwLjUtMTcuNCAxMjUuNy0xNDIgMTUuOC0xMjguNi03LjYtMjA5LjgtNDkuOC0yNDYuNXpNNDU4LjIgMjg3Yy0xMi45IDEwNC04OSAxMTAuNi0xMDMgMTE1LjEtNiAxLjktNjEuNSAxNS43LTEzMS4yIDExLjIgMCAwLTUyIDYyLjctNjguMiA3OS01LjMgNS4zLTExLjEgNC44LTExLTUuNyAwLTYuOSAuNC04NS43IC40LTg1LjdsMCAwQzQzLjQgMzcyLjcgNDkuNCAyNjYuNiA1MC41IDIxMS4xczExLjYtMTAxIDQyLjYtMTMxLjZjNTUuNy01MC41IDE3MC40LTQzIDE3MC40LTQzIDk2LjkgLjQgMTQzLjMgMjkuNiAxNTQuMSAzOS40IDM1LjcgMzAuNiA1My45IDEwMy44IDQwLjYgMjExLjF6bS0xMzktODAuOGMuNCA4LjYtMTIuNSA5LjItMTIuOSAuNi0xLjEtMjItMTEuNC0zMi43LTMyLjYtMzMuOS04LjYtLjUtNy44LTEzLjQgLjctMTIuOSAyNy45IDEuNSA0My40IDE3LjUgNDQuOCA0Ni4yem0yMC4zIDExLjNjMS00Mi40LTI1LjUtNzUuNi03NS44LTc5LjMtOC41LS42LTcuNi0xMy41IC45LTEyLjkgNTggNC4yIDg4LjkgNDQuMSA4Ny44IDkyLjUtLjEgOC42LTEzLjEgOC4yLTEyLjktLjN6bTQ3IDEzLjRjLjEgOC42LTEyLjkgOC43LTEyLjkgLjEtLjYtODEuNS01NC45LTEyNS45LTEyMC44LTEyNi40LTguNS0uMS04LjUtMTIuOSAwLTEyLjkgNzMuNyAuNSAxMzMgNTEuNCAxMzMuNyAxMzkuMnpNMzc1LjIgMzI5bDAgLjJjLTEwLjggMTktMzEgNDAtNTEuOCAzMy4zbC0uMi0uM2MtMjEuMS01LjktNzAuOC0zMS41LTEwMi4yLTU2LjUtMTYuMi0xMi44LTMxLTI3LjktNDIuNC00Mi40LTEwLjMtMTIuOS0yMC43LTI4LjItMzAuOC00Ni42LTIxLjMtMzguNS0yNi01NS43LTI2LTU1LjctNi43LTIwLjggMTQuMi00MSAzMy4zLTUxLjhsLjIgMGM5LjItNC44IDE4LTMuMiAyMy45IDMuOSAwIDAgMTIuNCAxNC44IDE3LjcgMjIuMSA1IDYuOCAxMS43IDE3LjcgMTUuMiAyMy44IDYuMSAxMC45IDIuMyAyMi0zLjcgMjYuNmwtMTIgOS42Yy02LjEgNC45LTUuMyAxNC01LjMgMTRzMTcuOCA2Ny4zIDg0LjMgODQuM2MwIDAgOS4xIC44IDE0LTUuM2w5LjYtMTJjNC42LTYgMTUuNy05LjggMjYuNi0zLjcgMTQuNyA4LjMgMzMuNCAyMS4yIDQ1LjggMzIuOSA3IDUuNyA4LjYgMTQuNCAzLjggMjMuNnoiXQogICAgfTsKICAgIGZhS2lja3N0YXJ0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAia2lja3N0YXJ0ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsic3F1YXJlLWtpY2tzdGFydGVyIl0sICJmM2JiIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0zMjAuOCAyMzNsLTIzLjMgMjMuMSAyMy4zIDIyLjljMjQuMSAyMy45IDI0LjEgNjMgMCA4Ni45cy02My40IDIzLjktODcuNiAwbC04LjUtOC40Yy0xMS4zIDE2LTI5LjcgMjYuNS01MC45IDI2LjUtMzQuMSAwLTYxLjktMjcuNS02MS45LTYxLjRsMC0xMzMuMmMwLTMzLjggMjcuNy02MS40IDYxLjktNjEuNCAyMS4xIDAgMzkuNiAxMC41IDUwLjkgMjYuNWw4LjUtOC40YzI0LjEtMjMuOSA2My40LTIzLjkgODcuNiAwczI0LjEgNjMgMCA4Ni45eiJdCiAgICB9OwogICAgZmFTcXVhcmVLaWNrc3RhcnRlciA9IGZhS2lja3N0YXJ0ZXI7CiAgICBmYVNwb3RpZnkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3BvdGlmeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWJjIiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTM1Ni43IDM3Mi45Yy00LjIgMC02LjgtMS4zLTEwLjctMy42LTYyLjQtMzcuNi0xMzUtMzkuMi0yMDYuNy0yNC41LTMuOSAxLTkgMi42LTExLjkgMi42LTkuNyAwLTE1LjgtNy43LTE1LjgtMTUuOCAwLTEwLjMgNi4xLTE1LjIgMTMuNi0xNi44IDgxLjktMTguMSAxNjUuNi0xNi41IDIzNyAyNi4yIDYuMSAzLjkgOS43IDcuNCA5LjcgMTYuNXMtNy4xIDE1LjQtMTUuMiAxNS40em0yNi45LTY1LjZjLTUuMiAwLTguNy0yLjMtMTIuMy00LjItNjIuNS0zNy0xNTUuNy01MS45LTIzOC42LTI5LjQtNC44IDEuMy03LjQgMi42LTExLjkgMi42LTEwLjcgMC0xOS40LTguNy0xOS40LTE5LjRzNS4yLTE3LjggMTUuNS0yMC43YzI3LjgtNy44IDU2LjItMTMuNiA5Ny44LTEzLjYgNjQuOSAwIDEyNy42IDE2LjEgMTc3IDQ1LjUgOC4xIDQuOCAxMS4zIDExIDExLjMgMTkuNy0uMSAxMC44LTguNSAxOS41LTE5LjQgMTkuNXptMzEtNzYuMmMtNS4yIDAtOC40LTEuMy0xMi45LTMuOS03MS4yLTQyLjUtMTk4LjUtNTIuNy0yODAuOS0yOS43LTMuNiAxLTguMSAyLjYtMTIuOSAyLjYtMTMuMiAwLTIzLjMtMTAuMy0yMy4zLTIzLjYgMC0xMy42IDguNC0yMS4zIDE3LjQtMjMuOSAzNS4yLTEwLjMgNzQuNi0xNS4yIDExNy41LTE1LjIgNzMgMCAxNDkuNSAxNS4yIDIwNS40IDQ3LjggNy44IDQuNSAxMi45IDEwLjcgMTIuOSAyMi42IDAgMTMuNi0xMSAyMy4zLTIzLjIgMjMuM3oiXQogICAgfTsKICAgIGZhTGVhbnB1YiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsZWFucHViIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyMTIiLCAiTTM4Ni42IDExMS41bDE1LjEgMjQ5LTExLS4zYy0zNi4yLS44LTcxLjYgOC44LTEwMi43IDI4LTMxLTE5LjItNjYuNC0yOC0xMDIuNy0yOC00NS42IDAtODIuMSAxMC43LTEyMy41IDI3LjdMOTMuMiAxMjkuNmMyOC41LTExLjggNjEuNS0xOC4xIDkyLjItMTguMSA0MS4yIDAgNzMuOCAxMy4yIDEwMi43IDQyLjUgMjcuNy0yOC4zIDU5LTQxLjcgOTguNS00Mi41ek01NjkuMiA0NDhjLTI1LjUgMC00Ny41LTUuMi03MC41LTE1LjYtMzQuMy0xNS42LTcwLTI1LTEwNy45LTI1LTM5IDAtNzQuOSAxMi45LTEwMi43IDQwLjYtMjcuNy0yNy43LTYzLjctNDAuNi0xMDIuNy00MC42LTM3LjkgMC03My42IDkuMy0xMDcuOSAyNS0yMi4yIDkuOS00NC43IDE1LjYtNjkuMiAxNS42TDcgNDQ4IDQ5LjYgOTguOWMzOS4zLTIyLjIgODctMzQuOSAxMzIuMy0zNC45IDM3LjEgMCA3NS4yIDcuNyAxMDYuMiAyOS4xIDMxLTIxLjQgNjkuMi0yOS4xIDEwNi4yLTI5LjEgNDUuMyAwIDkzIDEyLjYgMTMyLjMgMzQuOUw1NjkuMiA0NDh6bS00My40LTQ0LjdMNDkxLjggMTIzYy0zMC43LTE0LTY3LjItMjEuNC0xMDEtMjEuNC0zOC40IDAtNzQuNCAxMi4xLTEwMi43IDM4LjctMjguMy0yNi42LTY0LjItMzguNy0xMDIuNy0zOC43LTMzLjggMC03MC4zIDcuNC0xMDEgMjEuNGwtMzQgMjgwLjJjNDcuMi0xOS41IDgyLjktMzMuNSAxMzUtMzMuNSAzNy42IDAgNzAuOCA5LjYgMTAyLjcgMjkuNiAzMS44LTIwIDY1LjEtMjkuNiAxMDIuNy0yOS42IDUyLjIgMCA4Ny44IDE0IDEzNSAzMy41eiJdCiAgICB9OwogICAgZmFKYXZhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImphdmEiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjRlNCIsICJNMjc3LjggMzEyLjljOS44LTYuNyAyMy40LTEyLjUgMjMuNC0xMi41cy0zOC43IDctNzcuMiAxMC4yYy00Ny4xIDMuOS05Ny43IDQuNy0xMjMuMSAxLjMtNjAuMS04IDMzLTMwLjEgMzMtMzAuMXMtMzYuMS0yLjQtODAuNiAxOWMtNTIuNSAyNS40IDEzMCAzNyAyMjQuNSAxMi4xem0tODUuNC0zMi4xYy0xOS00Mi43LTgzLjEtODAuMiAwLTE0NS44IDEwMy43LTgxLjggNTAuNS0xMzUgNTAuNS0xMzUgMjEuNSA4NC41LTc1LjYgMTEwLjEtMTEwLjcgMTYyLjYtMjMuOSAzNS45IDExLjcgNzQuNCA2MC4yIDExOC4yek0zMDcgMTA0LjZjLjEgMC0xNzUuMiA0My44LTkxLjUgMTQwLjIgMjQuNyAyOC40LTYuNSA1NC02LjUgNTRzNjIuNy0zMi40IDMzLjktNzIuOUMyMTYgMTg4LjEgMTk1LjQgMTY5LjMgMzA3IDEwNC42em0tNi4xIDI3MC41Yy0uNSAxLTEuMiAxLjgtMiAyLjYgMTI4LjMtMzMuNyA4MS4xLTExOC45IDE5LjgtOTcuMy0zLjMgMS4yLTYuMiAzLjQtOC4yIDYuMyAzLjYtMS4zIDcuMy0yLjMgMTEtMyAzMS02LjUgNzUuNSA0MS41LTIwLjYgOTEuNHpNMzQ4IDQzNy40czE0LjUgMTEuOS0xNS45IDIxLjJjLTU3LjkgMTcuNS0yNDAuOCAyMi44LTI5MS42IC43LTE4LjMtNy45IDE2LTE5IDI2LjgtMjEuMyAxMS4yLTIuNCAxNy43LTIgMTcuNy0yLTIwLjMtMTQuMy0xMzEuMyAyOC4xLTU2LjQgNDAuMiAyMDQuMiAzMy4yIDM3Mi40LTE0LjkgMzE5LjQtMzguOHpNMTI0LjUgMzk2Yy03OC43IDIyIDQ3LjkgNjcuNCAxNDguMSAyNC41LTkuOC0zLjgtMTkuMi04LjQtMjguMi0xMy44LTQ0LjcgOC41LTY1LjQgOS4xLTEwNiA0LjUtMzMuNS0zLjgtMTMuOS0xNS4yLTEzLjktMTUuMnptMTc5LjggOTcuMmMtNzguNyAxNC44LTE3NS44IDEzLjEtMjMzLjMgMy42IDAtLjEgMTEuOCA5LjcgNzIuNCAxMy42IDkyLjIgNS45IDIzMy44LTMuMyAyMzcuMS00Ni45IDAgMC02LjQgMTYuNS03Ni4yIDI5Ljd6TTI2MC43IDM1M2MtNTkuMiAxMS40LTkzLjUgMTEuMS0xMzYuOCA2LjYtMzMuNS0zLjUtMTEuNi0xOS43LTExLjYtMTkuNy04Ni44IDI4LjggNDguMiA2MS40IDE2OS41IDI1LjktNy44LTIuOC0xNS03LjEtMjEuMS0xMi44eiJdCiAgICB9OwogICAgZmFOZmNTeW1ib2wgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibmZjLXN5bWJvbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTMxIiwgIk0zNjAuOSAzMi40YzcuNy0xLjMgMTUuNyAuNSAyMS4yIDUgODQuMSA1OC43IDEyOS45IDEzNi4zIDEyOS45IDIxNy43IDAgODMuMS00NS44IDE2MC44LTEyOS45IDIxOS41LTQuOCA0LTExLjcgNS45LTE4LjYgNS4zLTctLjYtMTMuNS0zLjYtMTguNC04LjVMMTYxLjcgMjg4LjdjLTUuNi01LjUtOC43LTEzLTkuNi0yMC45IDAtNy44IDQtMTUuMyA5LjUtMjAuOSA1LjYtNS41IDEzLjEtOC43IDIwLjktOC43IDcuOSAwIDE1LjQgMy4xIDIwLjkgOC42TDM2OC41IDQxMS4yYzU0LjYtNDQuNyA4NC4zLTk5LjIgODQuMy0xNTYuMSAwLTYxLjYtMzYuOS0xMjIuMi0xMDMuOS0xNjkuMy02LjQtNC41LTEwLjgtMTEuNC0xMi4xLTE5LjEtMS40LTcuNyAuNC0xNS43IDUtMjIuMSA0LjUtNi40IDExLjQtMTAuOCAxOS4xLTEyLjF6bS0yMDYgNDQ3LjJjLTcuNyAxLjMtMTUuNi0uNS0yMi4xLTUtODMuMS01OC43LTEyOS0xMzYuNC0xMjktMjE5LjUgMC04MS40IDQ1LjgtMTU5IDEyOS0yMTcuNyA1LjctNCAxMi42LTUuOSAxOS42LTUuMyA2LjkgLjYgMTMuNCAzLjYgMTguMyA4LjVMMzU0LjEgMjIzLjNjNS42IDUuNSA4LjcgMTMgOC43IDIwLjkgLjEgNi45LTMgMTUuMy04LjYgMjAuOS01LjUgNS41LTEzIDguNy0yMC45IDguNy03LjggMC0xNi4yLTMuMS0yMC45LTguNkwxNDcuMyAxMDAuN2MtNTQuNiA0NS4yLTg0LjMgOTkuMi04NC4zIDE1NC40IDAgNjMuNCAzNi45IDEyNCAxMDMuMSAxNzEuMSA3LjMgNC42IDExLjYgMTEuNCAxMyAxOS4yIDEuMyA3LjctLjUgMTUuNy01IDIyLjFzLTExLjQgMTAuNy0xOS4yIDEyLjF6Il0KICAgIH07CiAgICBmYVdvZHUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid29kdSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMDg4IiwgIk0xNzguNCAzMzkuN2wtMzcuMyAwLTI4LjktMTE2LjItLjUgMC0yOC41IDExNi4yLTM4IDAtNDUuMi0xNzAuOCAzNy41IDAgMjcgMTE2LjIgLjUgMCAyOS43LTExNi4yIDM1LjIgMCAyOS4yIDExNy43IC41IDAgMjgtMTE3LjcgMzYuOCAwLTQ1LjkgMTcwLjh6bTkzLTEyN2MzOSAwIDY0LjEgMjUuOCA2NC4xIDY1LjMgMCAzOS4yLTI1LjEgNjUtNjQuMSA2NS0zOC43IDAtNjMuOS0yNS44LTYzLjktNjUgMC0zOS41IDI1LjEtNjUuMyA2My45LTY1LjN6bTAgMTA0LjhjMjMuMiAwIDMwLjEtMTkuOSAzMC4xLTM5LjUgMC0xOS45LTYuOS0zOS43LTMwLjEtMzkuNy0yNy43IDAtMjkuOSAxOS45LTI5LjkgMzkuNyAwIDE5LjYgNi45IDM5LjUgMjkuOSAzOS41em0xNjMuNyA2LjVsLS41IDBjLTcuOSAxMy40LTIxLjggMTkuMS0zNy41IDE5LjEtMzcuMyAwLTU1LjUtMzItNTUuNS02Ni4yIDAtMzMuMiAxOC40LTY0LjEgNTQuOC02NC4xIDE0LjYgMCAyOC45IDYuMiAzNi44IDE4LjRsLjIgMCAwLTYyLjIgMzQgMCAwIDE3MC44LTMyLjMgMCAwLTE1Ljh6bS0yOS43LTg1LjZjLTIyLjIgMC0yOS45IDE5LjEtMjkuOSAzOS41IDAgMTkuNCA4LjggMzkuNyAyOS45IDM5LjcgMjIuNSAwIDI5LjItMTkuNiAyOS4yLTM5LjkgMC0yMC4xLTcuMi0zOS4yLTI5LjItMzkuMnpNNTkzIDMzOS43bC0zMi4zIDAgMC0xNy4yLS43IDBjLTguNiAxMy45LTIzLjQgMjAuNi0zNy44IDIwLjYtMzYuMSAwLTQ1LjItMjAuMy00NS4yLTUwLjlsMC03Ni4xIDM0IDAgMCA2OS44YzAgMjAuMyA2IDMwLjQgMjEuOCAzMC40IDE4LjQgMCAyNi4zLTEwLjMgMjYuMy0zNS40bDAtNjQuOCAzNCAwIDAgMTIzLjZ6bTkuNS0zNi44bDM3LjUgMCAwIDM2LjgtMzcuNSAwIDAtMzYuOHoiXQogICAgfTsKICAgIGZhU3F1YXJlU3RlYW0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXN0ZWFtIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInN0ZWFtLXNxdWFyZSJdLCAiZjFiNyIsICJNMTY1LjYgMzA5LjFjMTguNiA3LjcgMjcuMyAyOC45IDE5LjYgNDcuNHMtMjkgMjcuMi00Ny42IDE5LjRsLTI4LjUtMTEuOGM1IDEwLjYgMTMuOCAxOS40IDI1LjQgMjQuMiAyNS4yIDEwLjUgNTQuMS0xLjQgNjQuNi0yNi41IDUuMS0xMi4xIDUuMS0yNS41IC4xLTM3LjctNS4xLTEyLjEtMTQuNS0yMS42LTI2LjctMjYuNy0xMi4xLTUtMjUtNC44LTM2LjQtLjVsMjkuNSAxMi4yek00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NmwwIDE0NC43IDExNi42IDQ4LjFjMTItOC4yIDI2LjItMTIuMSA0MC43LTExLjNsNTUuNC04MC4yIDAtMS4xYzAtNDguMiAzOS4zLTg3LjUgODcuNi04Ny41czg3LjYgMzkuMyA4Ny42IDg3LjVjMCA0OS4yLTQwLjkgODguNy04OS42IDg3LjVsLTc5IDU2LjNjMS42IDM4LjUtMjkuMSA2OC44LTY1LjcgNjguOC0zMS44IDAtNTguNS0yMi43LTY0LjUtNTIuN0wwIDMxOS4yIDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0yNDEuOSAxOTYuMmE1OC40IDU4LjQgMCAxIDAgMTE2LjggMCA1OC40IDU4LjQgMCAxIDAgLTExNi44IDB6bTEwMi40LS4xYTQzLjkgNDMuOSAwIDEgMSAtODcuOCAwIDQzLjkgNDMuOSAwIDEgMSA4Ny44IDB6Il0KICAgIH07CiAgICBmYVN0ZWFtU3F1YXJlID0gZmFTcXVhcmVTdGVhbTsKICAgIGZhQ3JlYXRpdmVDb21tb25zTmNFdSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLW5jLWV1IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZTkiLCAiTTI1NS43IDhDMTExLjYgOCA4IDEyNC44IDggMjU2IDggMzkyLjMgMTE5LjcgNTA0IDI1NS43IDUwNCAzODUuOSA1MDQgNTA0IDQwMy4xIDUwNCAyNTYgNTA0IDExNyAzOTYuNCA4IDI1NS43IDh6bS42IDQ1MC43Yy0xMTIgMC0yMDMuNi05Mi41LTIwMy42LTIwMi43IDAtMjMuMiAzLjctNDUuMiAxMC45LTY2bDY1LjcgMjkuMS00LjcgMCAwIDI5LjUgMjMuMyAwYzAgNi4yLS40IDMuMi0uNCAxOS41bC0yMi44IDAgMCAyOS41IDI3IDBjMTEuNCA2NyA2Ny4yIDEwMS4zIDEyNC42IDEwMS4zIDI2LjYgMCA1MC42LTcuOSA2NC44LTE1LjhsLTEwLTQ2LjFjLTguNyA0LjYtMjguMiAxMC44LTQ3LjMgMTAuOC0yOC4yIDAtNTguMS0xMC45LTY3LjMtNTAuMmw5MC4zIDAgMTI4LjMgNTYuOGMtMS41IDIuMS01Ni4yIDEwNC4zLTE3OC44IDEwNC4zek0yMzkuNiAyNjguMWwtLjUtLjQgLjkgLjQtLjQgMHptNzcuMi0xOS41bDMuNyAwIDAtMjkuNS03MC4zIDAtMjguNi0xMi42YzIuNS01LjUgNS40LTEwLjUgOC44LTE0LjMgMTIuOS0xNS44IDMxLjEtMjIuNCA1MS4xLTIyLjQgMTguMyAwIDM1LjMgNS40IDQ2LjEgMTBsMTEuNi00Ny4zYy0xNS02LjYtMzctMTIuNC02Mi4zLTEyLjQtMzkgMC03Mi4yIDE1LjgtOTUuOSA0Mi4zLTUuMyA2LjEtOS44IDEyLjktMTMuOSAyMC4xTDg1LjUgMTQ2LjRjNjQuNi05Ni44IDE1Ny43LTkzLjYgMTcwLjctOTMuNiAxMTMgMCAyMDMgOTAuMiAyMDMgMjAzLjQgMCAxOC43LTIuMSAzNi4zLTYuMyA1Mi45TDMxNi44IDI0OC42eiJdCiAgICB9OwogICAgZmFOcG0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibnBtIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzZDQiLCAiTTI4OCAyODhsLTMyIDAgMC02NCAzMiAwIDAgNjR6TTU3NiAxNjBsMCAxOTItMjg4IDAgMCAzMi0xMjggMCAwLTMyLTE2MCAwIDAtMTkyIDU3NiAwek0xNjAgMTkybC0xMjggMCAwIDEyOCA2NCAwIDAtOTYgMzIgMCAwIDk2IDMyIDAgMC0xMjh6bTE2MCAwbC0xMjggMCAwIDE2MCA2NCAwIDAtMzIgNjQgMCAwLTEyOHptMjI0IDBsLTE5MiAwIDAgMTI4IDY0IDAgMC05NiAzMiAwIDAgOTYgMzIgMCAwLTk2IDMyIDAgMCA5NiAzMiAwIDAtMTI4eiJdCiAgICB9OwogICAgZmFDbG91ZHNjYWxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNsb3Vkc2NhbGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM4MyIsICJNMzE4LjEgMTU0bC05LjQgNy42Yy0yMi41LTE5LjMtNTEuNS0zMy42LTgzLjMtMzMuNi03MS42IDAtMTI5LjQgNjAuOC0xMjkuNCAxMzIuMyAwIDYuNiAuNCAxMy4xIDEuNCAxOS40LTItNTYgNDEuOC05Ny40IDkyLjYtOTcuNCAyNC4yIDAgNDYuMiA5LjQgNjIuNiAyNC43bC0yNS4yIDIwLjRjLTguMy0uOS0xNi44IDEuOC0yMy4xIDguMS0xMS4xIDExLTExLjEgMjguOSAwIDQwIDExLjEgMTEgMjguOSAxMSA0MCAwIDYuMy02LjMgOS0xNC45IDguMS0yMy4xbDc1LjItODguOGM2LjMtNi41LTMuMy0xNS45LTkuNS05LjZ6TTIxMy43IDI0Ni41YTE0IDE0IDAgMSAxIDIwLjYgMTkgMTQgMTQgMCAxIDEgLTIwLjYtMTl6TTIyNCAzMmEyMjQgMjI0IDAgMSAwIDAgNDQ4IDIyNCAyMjQgMCAxIDAgMC00NDh6bTAgNjRhMTYwIDE2MCAwIDEgMSAwIDMyMCAxNjAgMTYwIDAgMSAxIDAtMzIweiJdCiAgICB9OwogICAgZmFUaGVtZWNvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRoZW1lY28iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjVjNiIsICJNMjAyLjkgOC40YzkuOS01LjcgMjYtNS44IDM2LS4yTDQzMCAxMTUuOWMxMCA1LjYgMTggMTkuNCAxOCAzMC45TDQ0OCAzNjRjMCAxMS40LTguMSAyNS4zLTE4IDMxTDIzOC44IDUwMy43Yy05LjkgNS43LTI2IDUuNi0zNS44LS4yTDE3LjkgMzk1LjFDOCAzODkuMyAwIDM3NS40IDAgMzY0TDAgMTQ2LjdjMC0xMS40IDgtMjUuNCAxNy45LTMxLjFMMjAyLjkgOC40ek0xMjUuNSAyMDguM2MtMTUuOSAwLTMxLjkgLjEtNDcuOCAuMWwwIDEwMS40IDE5LjEgMCAwLTI5LjggMjguNyAwYzQ5LjcgMCA0OS42LTcxLjcgMC03MS43ek0yNjUuNiAzMDguNmwtMzAuNy0zNC42YzM3LTcuNSAzNC44LTY1LjItMTAuOS02NS41LTE2LjEgMC0zMi4yLS4xLTQ4LjMtLjFsMCAxMDEuNiAxOS4xIDAgMC0zMy45IDE4LjQgMCAyOS42IDMzLjkgMjIuOCAwIDAtMS4zem0tNDEuNi04Mi4zYzIzLjMgMCAyMy4zIDMyLjUgMCAzMi41bC0yOS4xIDAgMC0zMi41IDI5LjEgMHptLTk1LjYtMS42YzIxLjIgMCAyMS4xIDM4LjkgMCAzOC45bC0zMi4zIDAgMC0zOC44IDMyLjMgMHptMTkyLjYtMTguMmMtNjguNSAwLTcxIDEwNS44IDAgMTA1LjggNjkuNSAwIDY5LjQtMTA1LjggMC0xMDUuOHptMCAxNy40YzQ0LjEgMCA0NC44IDcwLjkgMCA3MC45cy00NC40LTcwLjkgMC03MC45eiJdCiAgICB9OwogICAgZmFHb29nbGVQbGF5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2dsZS1wbGF5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYWIiLCAiTTI5My42IDIzNC4zTDcyLjkgMTMgMzUzLjcgMTc0LjIgMjkzLjYgMjM0LjN6TTE1LjMgMEMyLjMgNi44LTYuNCAxOS4yLTYuNCAzNS4zbDAgNDQxLjNjMCAxNi4xIDguNyAyOC41IDIxLjcgMzUuM0wyNzEuOSAyNTUuOSAxNS4zIDB6TTQ0MC41IDIyNS42bC01OC45LTM0LjEtNjUuNyA2NC41IDY1LjcgNjQuNSA2MC4xLTM0LjFjMTgtMTQuMyAxOC00Ni41LTEuMi02MC44ek03Mi45IDQ5OUwzNTMuNyAzMzcuOCAyOTMuNiAyNzcuNyA3Mi45IDQ5OXoiXQogICAgfTsKICAgIGZhS29ydnVlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImtvcnZ1ZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDJmIiwgIk0zODcuNiAzNGwtMzI3IDBDMjcuOSAzNCAxLjEgNjAuOCAxLjEgOTMuNWwwIDMyNy4xYzAgMzIuNiAyNi44IDU5LjQgNTkuNSA1OS40bDMyNy4xIDBjMzMgMCA1OS41LTI2LjggNTkuNS01OS41bDAtMzI3QzQ0Ny4xIDYwLjggNDIwLjMgMzQgMzg3LjYgMzR6TTg4LjIgMTIwLjhsOTYgMCAwIDExNiA2MS44LTExNiAxMTAuOSAwLTgxLjIgMTMyLTE4Ny41IDAgMC0xMzJ6TTI1MCAzOTIuOWwtNjUuNy0xMTMuNiAwIDExMy42LTk2IDAgMC0xMzAuOCAxOTEuNSAwIDg4LjYgMTMwLjgtMTE4LjQgMHoiXQogICAgfTsKICAgIGZhVzNjID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInczYyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlN2RlIiwgIk0xMDUuMiAzMDUuM2wzMC45LTEwNC43YzcuOS0yNi43IDguNi00MC42IC4yLTY4LjhsLTEwLjEtMzMuOSA0NC4xIDAgNjEgMjA3LjQgNDUuNy0xNTUuNWMxMy4zLTQ1LjMgMjEuMS01MS45IDU5LjQtNTEuOWwxMzIuOCAwYy0yNC4yIDQyLjktNDkuMyA4NS4yLTczLjkgMTI3LjkgMi42IC44IDUuMiAxLjggNy43IDIuOCAxNy4zIDcuMSAzMi4yIDE5LjQgNDIgMzUuNSAxMS4yIDE4LjUgMTYuOCA0MC4yIDE2LjggNjUuMiAwIDMwLjgtOC4yIDU2LjgtMjQuNiA3Ny44LTE0LjUgMTguNi0zNSAyOS41LTU4LjIgMzEuMiAwIC4zLTUuMiAuNC01LjggLjQtMzkuNy0uMS03MC44LTMyLjEtODMuMS02OC43bDQyLjkgMGMzLjUgNS4zIDYuOCAxMC43IDExLjIgMTUuNSA4LjEgNy4zIDE4LjUgMTAuOSAyOS4zIDExLjEgMTMuMSAwIDIzLjMtOS4xIDI5LjktMTkuOCA4LjEtMTMuMiAxMi4yLTI5IDEyLjItNDcuNSAwLTEzLjEtMS44LTI0LjMtNS4zLTMzLjYtLjktMi4zLTEuOS00LjUtMy02LjYtMS40LTIuNi0yLjktNS4xLTQuNy03LjQtMTAuMS0xMy4yLTI5LjMtMTkuNy00Ny41LTE5LjhsLTI4LjIgMCA3MC4zLTEyMi0zNS42IDBjLTQzLjEgMC0zNS45LTUuNC01MC40IDQzLjNsLTc1LjcgMjU1LjMtNC4yIDAtNjMuMS0yMTEuMS02My4xIDIxMS4xLTQuMiAwLTEwMS0zNDAuNyA0NC4yIDAgNjEgMjA3LjR6TTQ2NyAzMzUuN2MuMyAuNiAxMS4zIDIwLjMgMTguMyAzMC4zIDcuMSAxMC4xIDE5LjggMjAuOSAyNC44IDI0LjZzMTkuMSAxMi41IDM0LjMgMTMuOWMxNS4yIDEuNSAyMy4zIC4yIDM4LjctNi42IDE1LjQtNi44IDI3LjktMjAuNCAzNC45LTI4LjEgNi45LTcuNiAxNy45LTI3LjMgMTguMi0yNy43bDMuMyAxNi44YzEuNyA5LTEgMjMuNy00LjEgMzAtNC4zIDguNi03LjYgMTMuNS0xNCAyMC4zLTYuMSA2LjUtMTYuNyAxMy41LTIxLjMgMTYuNC00LjYgMi45LTIzLjEgMTUuMS01MC4xIDEwLjNzLTQ0LjctMjUuOS01My45LTM4LjJjLTkuOC0xMy4yLTE2LjctMjguMy0xOS0zMy4yLTMuOC04LjQtOS45LTI4LjItMTAuMS0yOC44em0xNjkuNy0yMThjMy4zIDIwLjMtLjEgMjguNy05LjEgNDZsLTEyLjcgMjQuMmMtLjMtLjYtMTAtMjAuNy0yNS45LTMxLjktMTMuNi05LjYtMjIuNS0xMS43LTM2LjMtOC44LTE3LjggMy43LTM4IDI1LTQ2LjggNTEuMi0xMC41IDMxLjQtMTAuNyA0Ni42LTExIDYwLjYtLjYgMjIuNCAyLjkgMzUuNiAyLjkgMzUuNnMtMTUuNC0yOC41LTE1LjItNzAuMWMuMS0yOS43IDQuOC01Ni43IDE4LjUtODMuMyAxMi4xLTIzLjQgMzAuMS0zNy40IDQ2LjEtMzkuMSAxNi41LTEuNyAyOS42IDYuMyAzOS43IDE0LjkgMTAuNiA5IDIxLjMgMjguOCAyMS4zIDI4LjhsMjQuOS00OS44IDMuNiAyMS44eiJdCiAgICB9OwogICAgZmFHcmF2ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdyYXYiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjJkNiIsICJNMzAyLjYgMjEwLjZjNC41IDQuNSA0LjUgMTIuMyAwIDE2LjhsLTEwIDEwYy00LjUgNC45LTEyLjMgNC45LTE3LjEgMGwtMTAuOC0xMC44Yy00LjUtNC45LTQuNS0xMi4zIDAtMTcuMWwxMC0xMGM0LjUtNC41IDEyLjMtNC41IDE3LjEgMGwxMC44IDExLjF6bS0zMS4yLTIwLjNhNy43IDcuNyAwIDEgMCAtMTAuNi0xMSA3LjcgNy43IDAgMSAwIDEwLjYgMTF6bS0yNi44IDUuNWE3LjUgNy41IDAgMSAwIDEwLjcgMTAuNSA3LjUgNy41IDAgMSAwIC0xMC43LTEwLjV6TTMxOS40IDE4MmMtMjAuNS0xNC45LTM0LjktNDQuNi0xMi4zLTcwLjMgMjIuMy0yNS43IDQyLTE3LjggNjEuNyAuOCAxMi4zIDExLjcgMzAuMiAyNS43IDE3LjggNDkuOC0xMi45IDI0LjMtNDYuNiAzNC4zLTY3LjIgMTkuN3ptNDkuMi00NS45Yy05LjItMTAuMy0yNC4xIDcuMS0xNiAxNi42IDcuNiA5LjMgMzMuMSAyLjUgMTYtMTYuNnpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptNDQzLjcgNDRjMi42LTE2LjYtMjAuOS0xNy4xLTI2LTI2LjUtMTQtMjQuOS0yOC42LTM4LTU2LjMtMzEuNCAxMi04LjMgMjQuMy02LjMgMjQuMy02LjMgLjMtNi42IDAtMTMuNC05LjctMjUuNyA0LTEyLjkgLjMtMjMuMSAuMy0yMy4xIDE2LTguOSAyNy43LTI1LjIgMzAtNDQuNiAzLjctMzItMTkuNC02MS4xLTUxLjQtNjQuOC0yMi44LTIuNi00NS4xIDcuOS01Ni4xIDI2LjUtMjMuOSA0MS40IDEuNCA3My4yIDIzLjEgODQtMTQuOS0xLjQtMzUuNC0xMi4zLTQxLjQtMzUuNC02LjgtMjYuNSAyLjktNTEuNCA5LjItNjMuNCAwIDAtNC41LTYtOC4zLTkuMiAwIDAtMTQuMiAwLTI1LjQgNS41IDEyLjMtMTUuNyAyNi0xNC45IDI2LTE0LjkgMC02LjYtLjYtMTUuNC0zLjctMjIuMy01LjYtMTEuNC0yNC42LTEzLjMtMzIuNyAyLjkgLjEtLjIgLjMtLjQgLjQtLjUtNS4yIDEyLjMtMS4xIDU3LjcgMTcuNCA5MC0yLjYgMS40LTkuNCA2LjMtMTMuNCAxMC4zLTIyLjMgMTAtNTggNjIuMi01OCA2Mi4yLTI5LjEgMTEuMS03OS43IDUyLjUtNzIuOSA4Mi4zIC4zIDMuMSAxLjQgNS43IDMuMSA3LjctMi45IDIuMy01LjcgNS4yLTguNiA4LjYtMTIuMyAxNC4yLTUuNSAzNi4zIDE4LjMgMjUuMiAxNi4zLTcuNCAzMC42LTIwLjkgMzcuNS0zMS40IDAgMC01LjctNS4yLTE2LjgtNC41IDI4LjYtNi44IDM1LjQtOS43IDQ3LjctOS40IDguMyA0IDguMy0zNS40IDguMy0zNS40IDAtMTUuMi0yLjMtMzItMTEuNS00Mi44IDEyLjkgMTIuNiAzMCAzMy44IDI4LjkgNjIuNi0uOCAxOC45LTE1LjcgMjMuNy0xNS43IDIzLjctOS40IDE3LjEtNDQuNiA2OC0zMS40IDEwOS40IDAgMC0xMC0xNS40LTEwLjUtMjIuOC0xOCAyMC00OCA1NC0yNS40IDY2LjYgMjcuNSAxNS4yIDExMi4zLTkxLjUgMTMwLjMtMTQ2LjkgMzUuNy0yMS41IDU3LjItNDguOCA2Ni02Ny4xIDIyLjcgNDQuOSA5OC40IDk3LjUgMTA0LjQgNjAuOXoiXQogICAgfTsKICAgIGZhQXdzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImF3cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMzc1IiwgIk0xODAuNCAyMDNjLS43IDIyLjYgMTAuNiAzMi43IDEwLjkgMzktLjEgMS4zLS42IDIuNS0xLjMgMy42cy0xLjcgMi0yLjggMi42bC0xMi44IDljLTEuNyAxLjItMy42IDEuOC01LjYgMS45LS40IDAtOC4yIDEuOC0yMC41LTI1LjYtNy41IDkuNC0xNyAxNi45LTI3LjkgMjJzLTIyLjcgNy43LTM0LjcgNy41Yy0xNi4zIC45LTYwLjQtOS4yLTU4LjEtNTYuMi0xLjYtMzguMyAzNC4xLTYyLjEgNzAuOS02MCA3LjEgMCAyMS42IC40IDQ3IDYuM2wwLTE1LjZjMi43LTI2LjUtMTQuNy00Ny00NC44LTQzLjktMi40IDAtMTkuNC0uNS00NS44IDEwLjEtNy40IDMuNC04LjMgMi44LTEwLjggMi44LTcuNCAwLTQuNC0yMS41LTIuOS0yNC4yIDUuMi02LjQgMzUuOS0xOC40IDY1LjktMTguMiAyMC4xLTEuOCA0MC4xIDQuNCA1NS43IDE3LjMgNi4zIDcuMSAxMS4yIDE1LjQgMTQuMiAyNC40czQuMiAxOC41IDMuNSAyOGwwIDY5LjN6TTk0IDIzNS40YzMyLjQtLjUgNDYuMi0yMCA0OS4zLTMwLjUgMi41LTEwLjEgMi4xLTE2LjQgMi4xLTI3LjQtOS43LTIuMy0yMy42LTQuOS0zOS42LTQuOS0xNS4yLTEuMS00Mi44IDUuNi00MS43IDMyLjMtMS4yIDE2LjggMTEuMSAzMS40IDMwIDMwLjV6bTE3MC45IDIzLjFjLTcuOSAuNy0xMS41LTQuOS0xMi43LTEwLjRMMjAyLjQgODMuNGMtMS0yLjgtMS42LTUuNi0xLjktOC42LS4yLTEuMiAuMS0yLjQgLjgtMy40czEuOC0xLjYgMy0xLjhjLjIgMC0yLjEgMCAyMi4yIDAgOC44LS45IDExLjYgNiAxMi42IDEwLjRMMjc0LjkgMjIwLjggMzA4LjEgODBjLjUtMy4yIDIuOS0xMS4xIDEyLjgtMTAuMmwxNy4yIDBjMi4yLS4yIDExLjEtLjUgMTIuNyAxMC40TDM4NC4xIDIyMi43IDQyMSA4MC4xYy41LTIuMiAyLjctMTEuNCAxMi43LTEwLjRsMTkuNyAwYy45LS4xIDYuMi0uOCA1LjMgOC42LS40IDEuOCAzLjQtMTAuNy01Mi44IDE2OS45LTEuMSA1LjUtNC44IDExLjEtMTIuNyAxMC40bC0xOC43IDBjLTEwLjkgMS4yLTEyLjUtOS43LTEyLjctMTAuN2wtMzMuMi0xMzcuMS0zMi44IDEzN2MtLjIgMS4xLTEuNyAxMS45LTEyLjcgMTAuN2wtMTguMyAwIDAgMHptMjczLjUgNS42Yy01LjkgMC0zMy45LS4zLTU3LjQtMTIuMy0yLjMtMS00LjMtMi42LTUuNy00LjhzLTIuMS00LjYtMi4xLTcuMWwwLTEwLjdjMC04LjUgNi4yLTYuOSA4LjgtNS45IDEwIDQuMSAxNi41IDcuMSAyOC44IDkuNiAzNi43IDcuNSA1Mi44LTIuMyA1Ni43LTQuNSAxMy4yLTcuOCAxNC4yLTI1LjcgNS4zLTM0LjktMTAuNS04LjgtMTUuNS05LjEtNTMuMS0yMS00LjYtMS4zLTQzLjctMTMuNi00My44LTUyLjQtLjYtMjguMiAyNS01Ni4yIDY5LjUtNTYgMTIuNyAwIDQ2LjQgNC4xIDU1LjYgMTUuNiAxLjQgMi4xIDIgNC42IDEuOSA3bDAgMTAuMWMwIDQuNC0xLjYgNi43LTQuOSA2LjctNy43LS45LTIxLjQtMTEuMi00OS4yLTEwLjgtNi45LS40LTM5LjkgLjktMzguNCAyNS0uNCAxOSAyNi42IDI2LjEgMjkuNyAyNi45IDM2LjUgMTEgNDguNiAxMi44IDYzLjEgMjkuNiAxNy4xIDIyLjIgNy45IDQ4LjMgNC4zIDU1LjQtMTkuMSAzNy41LTY4LjQgMzQuNC02OS4zIDM0LjR6bTQwLjIgMTA0LjljLTcwIDUxLjctMTcxLjcgNzkuMi0yNTguNSA3OS4yLTExNy4xIC44LTIzMC4zLTQyLjMtMzE3LjMtMTIwLjctNi41LTUuOS0uOC0xNCA3LjItOS41IDk2LjUgNTUuMiAyMDUuNyA4NC4yIDMxNi45IDg0LjEgODMtLjQgMTY1LjEtMTcuMyAyNDEuNi00OS41IDExLjgtNSAyMS44IDcuOCAxMC4xIDE2LjR6bTI5LjItMzMuM2MtOS0xMS41LTU5LjMtNS40LTgxLjgtMi43LTYuOCAuOC03LjktNS4xLTEuOC05LjUgNDAuMS0yOC4yIDEwNS45LTIwLjEgMTEzLjQtMTAuNiA3LjUgOS41LTIuMSA3NS40LTM5LjYgMTA2LjktNS44IDQuOS0xMS4zIDIuMy04LjctNC4xIDguNC0yMS4zIDI3LjQtNjguNSAxOC40LTgweiJdCiAgICB9OwogICAgZmFHbGlkZUcgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2xpZGUtZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmE2IiwgIk00MDcuMSAyMTEuMmMtMy41LTEuNC0xMS42LTMuOC0xNS40LTMuOC0zNy4xIDAtNjIuMiAxNi44LTkzLjUgMzQuNWwtLjktLjljNy00Ny4zIDIzLjUtOTEuOSAyMy41LTE0MC40IDAtNzEuNS0zOC4yLTEwMC42LTEwOC40LTEwMC42LTExNS4xIDAtMTczLjQgMTEzLjctMTczLjQgMTk4LjQgMCA4Ny45IDUxLjMgMTM2LjYgMTM4LjYgMTM2LjYgMTIgMCAxMS0xIDExIDMuOC0xNi45IDEyOC45LTkwLjggMTMzLjEtOTAuOCA5NC42IDAtMzkuMiA0NS01OC42IDQ1LjUtNjEtLjMtMTIuMi00Ny0yNy42LTU4LjktMjcuNi0zMy45IC4xLTUyLjQgNTEuMi01Mi40IDc5LjMgMCA1MS45IDMyLjggODcuOSA4NS41IDg3LjkgNzcuNCAwIDEzNC03Ny44IDE1MS40LTE0NS40IDE1LjEtNjAuNSAxMS4yLTYzLjMgMTkuNy02Ny42IDMyLjItMTYuMiA1Ny41LTI3IDkzLjgtMjcgMTcuOCAwIDMwLjUgMy43IDU4LjkgOC40IDIuOSAwIDYuNy0yLjkgNi43LTUuOCAwLTgtMzMuNC02MC41LTQwLjktNjMuNHpNMjMxLjggMTI2LjhjLTkuMyA0NC43LTE4LjYgODkuNi0yNy44IDEzNC4zLTIuMyAxMC4yLTEzLjMgNy44LTIyIDcuOC0zOC4zIDAtNDktNDEuOC00OS03My4xIDAtNDcgMTgtMTA5LjMgNjEuOC0xMzMuNCA3LTQuMSAxNC44LTYuNyAyMi42LTYuNyAxOC42IDAgMjAgMTMuMyAyMCAyOC43LS4xIDE0LjMtMi43IDI4LjUtNS42IDQyLjR6Il0KICAgIH07CiAgICBmYUpzZmlkZGxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImpzZmlkZGxlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxY2MiLCAiTTUxMS4xIDIzNy41Yy00LjctMi42LTUuNy01LjctNi40LTEwLjgtMi40LTE2LjUtMy41LTMzLjYtOS4xLTQ5LjEtMzUuOS0xMDAtMTU0LTE0My40LTI0Ni44LTkxLjYtMjcuNCAxNS4yLTQ5IDM2LjQtNjUuNSA2My45LTMuMi0xLjUtNS41LTIuNy03LjgtMy43LTMwLjEtMTIuNC01OS0xMC4xLTg1LjMgOS4yLTI1LjUgMTguNy0zNi40IDQ0LjUtMzIuNyA3Ni40IC40IDMtMiA3LjYtNC41IDkuNS0zOS43IDMwLTU2IDc4LjEtNDEuOSAxMjQuNiAxMy44IDQ1LjYgNTcuNSA3OS44IDEwNS42IDgxLjQgMzAuMyAxIDYwLjYgLjUgOTEgLjUgODQgMCAxNjguMSAuNSAyNTIuMS0uNSA1Mi43LS42IDk2LjEtMzYuOSAxMDguMi04Ny4zIDExLjUtNDguMS0xMS4xLTk3LjMtNTYuOC0xMjIuNnptMjEuMSAxNTYuOWMtMTguMiAyMi40LTQyLjMgMzUuMy03MS4zIDM1LjctNTYuOSAuOC0xMTMuOCAuMi0xNzAuNyAuMiAwIC43LTE2MyAuMi0xNjMuNyAuMi00My45LS4zLTc2LjctMTkuOC05NS4yLTYwLTE4LjktNDEuMi00LTkwLjggMzQuMi0xMTYuMSA5LjItNi4xIDEyLjUtMTEuNiAxMC4xLTIzLjEtNS41LTI2LjQgNC41LTQ4IDI2LjQtNjMgMjMtMTUuNyA0Ny40LTE2LjEgNzItMy4xIDEwLjMgNS40IDE0LjYgMTEuNiAyMi4yLTIuNSAxNC4yLTI2LjQgMzQuNi00Ni43IDYwLjctNjEuMyA5Ny41LTU0LjQgMjI4LjQgNy42IDIzMC4yIDEzMi43IC4xIDguMiAyLjQgMTIuNCA5LjggMTUuOSA1Ny42IDI2LjggNzQuNSA5Ni4xIDM1LjEgMTQ0LjV6bS04Ny44LTgwLjVjLTUuOCAzMS4yLTM0LjYgNTUuMS02Ni43IDU1LjEtMTcgMC0zMi4xLTYuNS00NC4xLTE3LjctMjcuNy0yNS43LTcxLjEtNzUtOTUuOS05My40LTIwLjEtMTQuOS00Mi0xMi4zLTYwLjMgMy44LTUwIDQ0LjEgMTUuOSAxMjEuOCA2Ny4xIDc3LjIgNC41LTQgNy44LTkuNSAxMi43LTEyLjggOC4yLTUuNSAyMC44LS45IDEzLjIgMTAuNi0xNy40IDI2LjMtNDkuMyAzOC4yLTc4LjkgMjkuMy0yOC45LTguNy00OC44LTM2LTQ4LjYtNzAuMiAxLjItMjIuNSAxMi40LTQzLjEgMzUuNC01NiAyMi42LTEyLjYgNDYuNC0xMy4xIDY3IDIuNSA1MC44IDM4LjUgNzUuNiA4MS43IDEwNy4zIDEwMS4yIDI0LjYgMTUuMSA1NC4zIDcuNCA2OC44LTE3LjUgMjguOC00OS4yLTM0LjYtMTA1LTc4LjktNjMuNS00IDMuNy02LjkgOC45LTExLjQgMTEuNy0xMSA2LjgtMTcuMy00LjEtMTIuOC0xMC40IDIwLjctMjguNiA1MC41LTQwLjQgODMuMy0yOC4yIDMxLjQgMTEuNyA0OS4xIDQ0LjQgNDIuOCA3OC4yeiJdCiAgICB9OwogICAgZmFLZXliYXNlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImtleWJhc2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjRmNSIsICJNMjg2LjIgNDE5YTE4IDE4IDAgMSAwIDAgMzYgMTggMTggMCAxIDAgMC0zNnpNMzk4LjEgMjcxLjRjLTkuNS0xNC42LTM5LjQtNTIuNC04Ny4zLTczLjctNi4xLTIuNy0xMi4yLTUuMS0xOC40LTcuMyA0LjEtOS45IDYtMjAuNiA1LjgtMzEuNHMtMi43LTIxLjMtNy4yLTMxLjEtMTAuOS0xOC41LTE4LjktMjUuNy0xNy40LTEyLjYtMjcuNi0xNmMtMTIuNC00LjEtMjMuMy02LTMyLjQtNS44LS42LTItMS45LTExIDkuNC0zNWwtMjIuOS0xMy41LTUuNSA3LjZjLTguNyAxMi4xLTE2LjkgMjMuNi0yNC4zIDM0LjktMi43LS42LTUuNS0xLjEtOC4zLTEuMi00MS41LTIuNC0zOS0yLjMtNDEuMS0yLjMtNTAuNiAwLTUwLjggNTIuMS01MC44IDQ1LjlsLTIuNCAzNi43Yy0xLjYgMjcgMTkuOCA1MC4yIDQ3LjYgNTEuOGw4LjkgLjVDMTA2IDIxNS41IDkwLjQgMjI3LjUgNzYuNiAyNDEuNCAxNCAzMDQuNyAxNCAzNzQgMTQgNDI5LjhsMCAzMy42IDIzLjMtMjkuOGMzLjEgMTMuMSA4IDI1LjggMTQuNiAzNy42IDUuOCAxMC4xIDE0LjkgOS40IDE5LjYgNy4zIDQuMi0xLjkgMTAtNi45IDMuOC0yMC4xLTgtMTYuOC0xMy4zLTM0LjctMTUuOC01My4xbDQ2LjgtNTkuOC0yNC43IDc0LjFjNTguMi00Mi40IDE1Ny40LTYxLjggMjM2LjItMzguNiAzNC4yIDEwLjEgNjcuNCAuNyA4NC43LTIzLjggLjctMSAxLjItMi4yIDEuOC0zLjIgMS44IDkuNCAyLjcgMTguOSAyLjggMjguNCAwIDIzLjMtMy43IDUyLjktMTQuOSA4MS42LTIuNSA2LjUgMS44IDE0LjUgOC42IDE1LjcgNy40IDEuNiAxNS4zLTMuMSAxOC40LTExLjEgOS42LTI1LjUgMTQuNi01NC42IDE0LjYtODYuMiAwLTM4LjYtMTMtNzcuNS0zNS45LTExMC45ek0xNDIuNCAxMjguNmwtMTUuNy0uOS0xLjQgMjEuOCAxMy4xIC44Yy0uNiA2LjUtLjUgMTMuMSAuMyAxOS42bC0yMi40LTEuM2MtMS42LS4xLTMuMi0uNS00LjctMS4xcy0yLjgtMS42LTMuOS0yLjgtMS45LTIuNi0yLjUtNC4xLS44LTMuMS0uNy00LjdMMTA3IDExOWMxLTEyLjIgMTMuOS0xMS4zIDEzLjMtMTEuM2wyOS4xIDEuN2MtMi44IDYuMi01LjEgMTIuNi03IDE5LjJ6TTI5MC44IDMwMC44Yy0yLjEgMS42LTQuOCAyLjQtNy41IDIuMnMtNS4xLTEuNS02LjktMy41bC05LjctMTEuNS0zNC40IDI3Yy0xLjYgMS4zLTMuNyAxLjktNS44IDEuN3MtNC0xLjItNS4zLTIuOGwtMTUuOC0xOC42Yy0xLjItMS42LTEuNy0zLjUtMS41LTUuNHMxLjMtMy43IDIuOC00LjlsMzQuNi0yNy4yLTE0LjEtMTYuNy0xNy4xIDEzLjVjLTEuNiAxLjItMy41IDEuOC01LjUgMS42cy0zLjgtMS4xLTUuMS0yLjZjMCAwLTMuNy00LjQtMy44LTQuNS0xLjItMS42LTEuNy0zLjUtMS41LTUuNXMxLjMtMy43IDIuOC00LjlMMjE0IDIyNS4ycy0xOC41LTIyLTE4LjYtMjIuMWMtLjgtMS0xLjMtMi4xLTEuNy0zLjNzLS40LTIuNS0uMy0zLjcgLjYtMi40IDEuMi0zLjUgMS41LTIgMi41LTIuOGMyLjEtMS43IDQuOC0yLjQgNy40LTIuMnM1LjEgMS41IDYuOSAzLjZsODEuMSA5Ni4zYy44IDEgMS4zIDIuMSAxLjcgMy4zcy40IDIuNSAuMyAzLjctLjYgMi41LTEuMiAzLjUtMS41IDIuMS0yLjUgMi44ek0xODcuNCA0MTlhMTggMTggMCAxIDAgMCAzNiAxOCAxOCAwIDEgMCAwLTM2eiJdCiAgICB9OwogICAgZmFMdW1vbkRyb3AgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibHVtb24tZHJvcCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlN2UzIiwgIk00ODAgMzJjNTMgMCA5NiA0MyA5NiA5NmwwIDIyNGMwIDUzLTQzIDk2LTk2IDk2TDk2IDQ0OGMtNTMgMC05Ni00My05Ni05NkwwIDEyOEMwIDc1IDQzIDMyIDk2IDMybDM4NCAwek0zMDIuNCAxMTQuN2MtOS44LTE2LjQtMjAuNS0xNi40LTI5LjYgMGwtNjguOSAxMTRjLTEwLjcgMTUuNi0xNi40IDMyLjgtMTYuNCA1Mi41IDAgNTAuOSA0NC4zIDk0LjMgMTAwLjEgOTQuMyA1NSAwIDEwMC45LTQzLjUgMTAwLjktOTQuMyAwLTE5LjctNi42LTM3LjgtMTcuMi01Mi41bC02OC45LTExNHoiXQogICAgfTsKICAgIGZhV2VlYmx5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndlZWJseSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWNjIiwgIk00MjUuMSA2NS44Yy0zOS45IDAtNzMuMyAyNS43LTgzLjcgNjQuMy0xOC4yLTU4LjEtNjUuNS02NC4zLTg1LTY0LjMtMTkuOCAwLTY2LjggNi4zLTg1LjMgNjQuMy0xMC40LTM4LjYtNDMuNC02NC4zLTgzLjctNjQuMy00OSAwLTg3LjUgMzMuOS04Ny41IDc3LjIgMCAyOSA0LjIgMzMuMyA3Ny4yIDIzMy41IDIyLjQgNjAuNiA2Ny44IDY5LjQgOTIuNyA2OS40IDM5LjIgMCA3MC0xOS41IDg1LjktNTQgMTUuOSAzNC44IDQ2LjcgNTQuMyA4NS45IDU0LjMgMjUgMCA3MC40LTkuMSA5Mi43LTY5LjcgNzYuNi0yMDguNiA3Ny41LTIwNS42IDc3LjUtMjI3LjIgLjYtNDguMy0zNi04My41LTg2LjktODMuNXptMjYuMyAxMTQuOEwzODUuOSAzNTcuMWMtNy45IDIxLjUtMjEuMiAzNy4yLTQ2LjIgMzcuMi0yMy40IDAtMzcuNC0xMi40LTQ0LTMzLjlsLTM5LjMtMTE3LjQtMSAwLTM5LjMgMTE3LjRjLTcgMjEuNS0yMC45IDMzLjYtNDQgMzMuNi0yNSAwLTM4LjMtMTUuNy00Ni4yLTM3LjJMNjAuOSAxODEuNmMtNS40LTE0LjgtNy45LTIzLjktNy45LTM0LjUgMC0xNi4zIDE1LjgtMjkuNCAzOC4zLTI5LjQgMTguNyAwIDMyIDExLjggMzYuMSAyOS4xbDQ0IDEzOS44IDEgMCA0NC43LTEzNi44YzYtMTkuNyAxNi41LTMyLjEgMzktMzIuMXMzMi45IDEyLjEgMzkgMzIuMWw0NC43IDEzNi44IDEgMCA0NC0xMzkuOGM0LjEtMTcuMiAxNy40LTI5LjEgMzYuMS0yOS4xIDIyLjIgMCAzOC4zIDEzLjMgMzguMyAzNS43LS4zIDcuOS00LjEgMTYtNy42IDI3LjJ6Il0KICAgIH07CiAgICBmYURvY2tlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkb2NrZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjM5NSIsICJNMzQ5LjkgMjM2LjNsLTY2LjEgMCAwLTU5LjQgNjYuMSAwIDAgNTkuNHptMC0yMDQuM2wtNjYuMSAwIDAgNjAuNyA2Ni4xIDAgMC02MC43em03OC4yIDE0NC44bC02Ni4xIDAgMCA1OS40IDY2LjEgMCAwLTU5LjR6TTI3MS44IDEwNC43bC02Ni4xIDAgMCA2MC4xIDY2LjEgMCAwLTYwLjF6bTc4LjEgMGwtNjYuMSAwIDAgNjAuMSA2Ni4xIDAgMC02MC4xem0yNzYuOCAxMDBjLTE0LjQtOS43LTQ3LjYtMTMuMi03My4xLTguNC0zLjMtMjQtMTYuNy00NC45LTQxLjEtNjMuN2wtMTQtOS4zLTkuMyAxNGMtMTguNCAyNy44LTIzLjQgNzMuNi0zLjcgMTAzLjgtOC43IDQuNy0yNS44IDExLjEtNDguNCAxMC43bC00MzQuNyAwYy04LjcgNTAuOCA1LjggMTE2LjggNDQgMTYyLjEgMzcuMSA0My45IDkyLjcgNjYuMiAxNjUuNCA2Ni4yIDE1Ny40IDAgMjczLjktNzIuNSAzMjguNC0yMDQuMiAyMS40IC40IDY3LjYgLjEgOTEuMy00NS4yIDEuNS0yLjUgNi42LTEzLjIgOC41LTE3LjFsLTEzLjMtOC45ek0xMTUuNiAxNzYuOGwtNjYgMCAwIDU5LjQgNjYuMSAwIDAtNTkuNC0uMSAwem03OC4xIDBsLTY2LjEgMCAwIDU5LjQgNjYuMSAwIDAtNTkuNHptNzguMSAwbC02Ni4xIDAgMCA1OS40IDY2LjEgMCAwLTU5LjR6bS03OC4xLTcyLjFsLTY2LjEgMCAwIDYwLjEgNjYuMSAwIDAtNjAuMXoiXQogICAgfTsKICAgIGZhTWFnZW50byA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtYWdlbnRvIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYzQiLCAiTTQ0NS45IDEyNy45bDAgMjU2LjEtNjMuNCAzNi41IDAtMjU1LjgtMTU4LjUtOTEuNi0xNTguNiA5MS42IC40IDI1NS45LTYzLjMtMzYuNiAwLTI1NS45IDIyMS45LTEyOC4xIDIyMS41IDEyNy45ek0yNTUuOCA0MjAuNWwtMzEuNiAxOC40LTMxLjgtMTguMiAwLTI1Ni02My4zIDM2LjYgLjEgMjU1LjkgOTQuOSA1NC45IDk1LjEtNTQuOSAwLTI1Ni02My40LTM2LjYgMCAyNTUuOXoiXQogICAgfTsKICAgIGZhR2l0QWx0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdpdC1hbHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjg0MSIsICJNNDM5LjYgMjM2LjFMMjQ0IDQwLjVDMjM4LjYgMzUgMjMxLjIgMzIgMjIzLjYgMzJzLTE1IDMtMjAuNCA4LjRsLTQwLjcgNDAuNiA1MS41IDUxLjVjMjcuMS05LjEgNTIuNyAxNi44IDQzLjQgNDMuN2w0OS43IDQ5LjdjMzQuMi0xMS44IDYxLjIgMzEgMzUuNSA1Ni43LTI2LjUgMjYuNS03MC4yLTIuOS01Ni0zNy4zbC00Ni4zLTQ2LjMgMCAxMjEuOWMyNS4zIDEyLjUgMjIuMyA0MS44IDkuMSA1NS02LjQgNi40LTE1LjIgMTAuMS0yNC4zIDEwLjFzLTE3LjgtMy42LTI0LjMtMTAuMWMtMTcuNi0xNy42LTExLjEtNDYuOSAxMS4yLTU2bDAtMTIzYy0yMC44LTguNS0yNC42LTMwLjctMTguNi00NUwxNDIuNiAxMDEgOC41IDIzNS4xQzMgMjQwLjYgMCAyNDcuOSAwIDI1NS41czMgMTUgOC41IDIwLjRMMjA0LjEgNDcxLjZjNS40IDUuNCAxMi43IDguNCAyMC40IDguNHMxNS0zIDIwLjQtOC40TDQzOS42IDI3Ni45YzUuNC01LjQgOC40LTEyLjggOC40LTIwLjRzLTMtMTUtOC40LTIwLjR6Il0KICAgIH07CiAgICBmYUZpcmVmb3hCcm93c2VyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZpcmVmb3gtYnJvd3NlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDA3IiwgIk0xMzAuMiAxMjcuNWwwIDB6bTM1MS40IDQ1LjRjLTEwLjYtMjUuNS0zMi4xLTUzLTQ4LjktNjEuNyAxMy43IDI2LjkgMjEuNyA1My45IDI0LjcgNzQgMCAuMSAwIC4zIC4xIC40LTI3LjYtNjguOC03NC40LTk2LjUtMTEyLjYtMTU2LjgtMTUtMjMuNy0xMC45LTI1LjItMTMuMS0yNC43bC0uMSAuMWMtNDYuNyAyNi03NS4zIDc4LjQtODIuNiAxMjIuNy0xNi42IC45LTMyLjkgNS00Ny45IDEyLjEtMS40IC42LTIuNSAxLjctMy4xIDNzLS45IDIuOC0uNiA0LjNjLjIgLjggLjYgMS42IDEuMSAyLjNzMS4yIDEuMyAxLjkgMS43IDEuNiAuNyAyLjQgLjggMS43IDAgMi41LS4zbC41LS4yYzE1LjUtNy4zIDMyLjQtMTEuMiA0OS41LTExLjMgNjIuOC0uNiA5Ny4yIDQ0IDEwNy42IDYyLjMtMTMtOS4yLTM2LjQtMTguMi01OC44LTE0LjMgODcuNyA0My45IDY0LjIgMTk0LjUtNTcuNCAxODkuMi01OS41LTIuNi05Ny4xLTUxLTEwMC41LTkwLjggMCAwIDExLjItNDEuOSA4MC42LTQxLjkgNy41IDAgMjguOS0yMC45IDI5LjMtMjctLjEtMi00Mi41LTE4LjktNTkuMS0zNS4yLTguOC04LjctMTMuMS0xMi45LTE2LjgtMTYuMS0yLTEuNy00LjEtMy4zLTYuMy00LjgtNS42LTE5LjUtNS44LTQwLS43LTU5LjYtMjUuMSAxMS40LTQ0LjYgMjkuNC01OC43IDQ1LjRsLS4xIDBjLTkuNy0xMi4yLTktNTIuNi04LjQtNjEuMS0uMS0uNS03LjIgMy43LTguMiA0LjMtOC42IDYuMS0xNi41IDEyLjktMjMuOCAyMC40LTE2LjMgMTYuNi00NC4xIDUwLjItNTUuNSAxMDEuMi00LjUgMjAuNC02LjggNDQuNC02LjggNTIuMyAwIDEzNC43IDEwOS4yIDI0My45IDI0My45IDI0My45IDEyMC42IDAgMjIzLTg3LjIgMjQwLjQtMjAyLjYgMTEuNi03Ni43LTE0LjctMTMxLjEtMTQuNy0xMzJ6Il0KICAgIH07CiAgICBmYUNsb3Vkc21pdGggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2xvdWRzbWl0aCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzg0IiwgIk01MTIgMjI3LjZMNTEyIDI4NC41IDI4NC40IDUxMiAyMjcuNiA1MTIgMCAyODQuNCAwIDIyNy42IDIyNy42IDAgMjg0LjUgMCA1MTIgMjI3LjZ6bS0yNTYgMTYyYzE3LjggLjUgMzUuNi0yLjYgNTIuMi05LjFzMzEuOC0xNi4yIDQ0LjYtMjguNyAyMy0yNy4zIDI5LjktNDMuOCAxMC41LTM0LjEgMTAuNS01Mi0zLjYtMzUuNS0xMC41LTUyLTE3LjEtMzEuMy0yOS45LTQzLjgtMjgtMjIuMi00NC42LTI4LjctMzQuNC05LjYtNTIuMi05LjFjLTE3LjgtLjUtMzUuNiAyLjYtNTIuMiA5LjFzLTMxLjggMTYuMy00NC42IDI4LjctMjMgMjcuMy0yOS45IDQzLjgtMTAuNSAzNC4xLTEwLjUgNTIgMy42IDM1LjUgMTAuNSA1MiAxNy4xIDMxLjMgMjkuOSA0My44IDI4IDIyLjIgNDQuNiAyOC43IDM0LjQgOS42IDUyLjIgOS4xeiJdCiAgICB9OwogICAgZmFXaXphcmRzT2ZUaGVDb2FzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3aXphcmRzLW9mLXRoZS1jb2FzdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNzMwIiwgIk0yMTkuMiAzNDUuN2MtMS45IDEuNC0xMS4xIDguNC0uMyAyMy42IDQuNiA2LjQgMTQuMSAxMi44IDIxLjcgNi42IDYuNS00LjkgNy40LTEyLjkgLjMtMjMtNS41LTcuOC0xNC4zLTEyLjktMjEuNy03LjF6bTMzNi44IDc1LjljLS4zIDEuNy0uNiAxLjcgLjggMCAyLjEtNC4yIDQuMi0xMC4yIDUtMTkuOSAzLjEtMzguNS00MC4zLTcxLjUtMTAxLjMtNzgtNTQuNy02LTEyNC40IDkuMi0xODguOCA2MC41bC0uMyAxLjZjMi42IDUgNSAxMC43IDMuNCAyMS4ybC44IC4zYzYzLjktNTguNCAxMzEuMi03Ny4yIDE4NC40LTczLjggNTguNCAzLjcgMTAwIDM0IDEwMCA2OC4xIDAgMTAtMi42IDE1LjctMy45IDIwLjJ6TTM5Mi4zIDI0MC40Yy44IDcuMSA0LjIgMTAuMiA5LjIgMTAuNSA1LjUgLjMgOS40LTIuNiAxMC41LTYuNiAuOC0zLjQgMi4xLTI5LjggMi4xLTI5LjhTNDAyLjggMjIxIDM5OS4xIDIyNWMtMy43IDMuNy03LjMgOC40LTYuOCAxNS41em0tNTAtMTUxLjFjLTIwNC41IDAtMzI5LjIgMTM3LjUtMzQxLjUgMTUxLjktMSAuNS0xLjMgLjggLjggMS4zIDYwLjUgMTYuNSAxNTUuOCA4MS4yIDE5Ni4xIDIwMi4ybDEgLjNjNTUuMi02OS45IDE0MC45LTEyOC4xIDIzNy0xMjguMSA4MC45IDAgMTMwLjIgNDIuMiAxMzAuMiA4MC40IDAgMTguMy02LjYgMzMuNS0yMi4zIDQ2LjMgMCAxLS4yIC44IC44IC44IDE0LjctMTAuNyAyNy41LTI4LjggMjcuNS00OC4yIDAtMjIuOC0xMi4xLTM4LjItMTIuMS0zOC4yIDcuMSA3LjEgMTAuNyAxNi4yIDEwLjcgMTYuMiA1LjgtNDAuOSAyNy02Mi4zIDI3LTYyLjMtMi40LTkuNy02LjgtMTcuOC02LjgtMTcuOCA3LjYgOC4xIDE0LjQgMjcuNSAxNC40IDQxLjQgMCAxMC41LTMuNCAyMi44LTEyLjYgMzEuOWwuMyAuNWM4LjEtNSAxNi41LTE2LjggMTYuNS0zOCAwLTE1LjctNC43LTI1LjktNC43LTI1LjkgNS44LTUuMiAxMS4zLTkuMiAxNi0xMS44IC44IDMuNCAyLjEgOS43IDIuNCAxNC45IDAgMSAuOCAxLjggMSAwIC44LTUuOC0uMy0xNi4yLS4zLTE2LjUgNi0zLjEgOS43LTQuNSA5LjctNC41LTE1LjctMTEwLjMtMTQ0LTE5Ni45LTI5MS4yLTE5Ni45ek0yNDMgMzc4LjljLTExLjEgOS0yNC4yIDQuMS0zMC42LTQuMi03LjQtOS42LTYuOC0yNC4xIDQuMi0zMi41IDE0LjgtMTEuNCAyNy4xLS41IDMxLjIgNS41IC4zIC40IDEyLjEgMTYuNi00LjcgMzEuMnptMi4xLTEzNi40bDkuNC0xNy44IDExLjggNzEtMTIuNiA2LTI0LjYtMjguOCAxNC4xLTI2LjcgMy43IDQuNC0xLjgtOC4xem0xOC42IDExNy42bC0uMy0uM2MyLTQuMS0yLjUtNi42LTE3LjUtMzEuNy0xLjMtMi40LTMuMS0yLjktNC40LTIuNmwtLjMtLjVjNy45LTUuOCAxNS40LTEwLjIgMjUuNC0xNS43bC41IC4zYzEuMyAxLjggMi4xIDIuOSAzLjQgNC43bC0uMyAuNWMtMS0uMy0yLjQtLjgtNS4yIC4zLTIuMSAuOC03LjkgMy43LTEyLjMgNy42bDAgMS4zYzEuNiAyLjQgMy45IDYuNiA1LjggOS43bC4zIDBjMTAtNi4zIDcuNi00LjUgMTEuNS03LjlsLjMgMGMuNSAxLjggLjUgMS44IDEuOCA1LjVsLS4zIC4zYy0zLjEgLjYtNC43IC4zLTExLjUgNS41bDAgLjNjOS41IDE3IDExIDE2LjggMTIuNiAxNmwuMyAuM2MtMi4zIDEuNi02LjMgNC4yLTkuNyA2LjZ6TTMxOSAzMjcuNmMtMy4xIDEuNi02IDIuOS0xMCA1bC0uMy0uM2MxLjMtMi42IDEuMi0yLjctMTEuOC0zMi41bC0uMy0uM2MtLjIgMC04LjkgMy43LTEwIDcuM2wtLjUgMC0xLTUuOCAuMy0uNWM3LjMtNC42IDI1LjUtMTEuNiAyNy44LTEyLjZsLjUgLjMgMy4xIDUtLjMgLjVjLTMuNS0xLjgtNy40IC44LTEyLjMgMi42bDAgLjNjMTIuMyAzMiAxMi43IDMwLjYgMTQuNyAzMC42bDAgLjJ6bTQ0LjgtMTYuNWMtNC4yIDEtNS4yIDEuMy05LjcgMi45bC0uMy0uMyAuNS00LjVjLTEtMy40LTMuMS0xMS41LTMuNy0xMy42bC0uMy0uM2MtMy40IC44LTguOSAyLjYtMTIuOCAzLjlsLS4zIC4zYy44IDIuNiAzLjEgOS45IDQuMiAxMy45IC44IDIuNCAxLjggMi45IDIuOSAzLjFsMCAuNWMtMy43IDEtNy4xIDIuNi0xMC4yIDMuOWwtLjMtLjNjMS0xLjMgMS0yLjkgLjMtNS0xLTMuMS04LjEtMjMuOC05LjItMjcuMi0uNS0xLjgtMS42LTMuMS0yLjYtMy4xbDAtLjVjMy4xLTEgNi0yLjEgMTAuNy0zLjRsLjMgLjMtLjMgNC43YzEuMyAzLjkgMi40IDcuNiAzLjEgOS43bC4zIDBjMy45LTEuMyA5LjQtMi45IDEyLjgtMy45bC4zLS4zLTIuNi05LjRjLS41LTEuOC0xLTMuNC0yLjYtMy45bDAtLjNjNC40LTEgNy4zLTEuOCAxMC43LTIuNGwuMyAuM2MtMSAxLjMtMSAyLjktLjUgNC40IDEuNiA2LjMgNC43IDIwLjQgNi4zIDI2LjUgLjUgMi42IDEuOCAzLjQgMi42IDMuOXptMzIuMi02LjhsLS4zIC4zYy00LjcgLjUtMTQuMSAyLjQtMjIuNSA0LjJsLS4zLS4zIC44LTQuMmMtMS42LTcuOS0zLjQtMTguNi01LTI2LjItLjMtMS44LS44LTIuOS0yLjYtMy43bC44LS41YzkuMi0xLjYgMjAuMi0yLjQgMjQuOS0yLjZsLjMgLjNjLjUgMi40IC44IDMuMSAxLjYgNS41bC0uMyAuM2MtMS4xLTEuMS0zLjMtMy4yLTE2LjItLjhsLS4zIC4zYy4zIDEuNiAxIDYuNiAxLjYgOS45bC4zIC4zYzkuNS0xLjcgNC44LS4xIDEwLjctMi40bC4zIDBjMCAxLjYtLjMgMS44LS4zIDUuMmwtLjMgMGMtNC44LTEtMi4yLS45LTEwLjIgMGwtLjMgLjNjLjMgMi4xIDEuNiA5LjQgMi4xIDEyLjZsLjMgLjNjMS4yIC40IDE0LjItLjYgMTYuMi00LjdsLjMgMGMtLjUgMi40LTEgNC4yLTEuNiA2em0xMC43LTQ0LjVjLTQuNSAyLjQtOC4xIDIuOS0xMSAyLjktLjIgMC0xMS40IDEuMS0xNy41LTEwLTYuNy0xMC44LTEtMjUuMiA1LjUtMzEuNyA4LjgtOC4xIDIzLjQtMTAuMSAyOC41LTE3IDgtMTAuMy0xMy0yMi4zLTI5LjYtNS44bC0yLjYtMi45IDUuMi0xNi4yYzI1LjYtMS42IDQ1LjItMyA1MCAxNi4yIC44IDMuMSAwIDkuNC0uMyAxMi4xIDAgMi42LTEuOCAxOC44LTIuMSAyMy0uNSA0LjItLjggMTguMy0uOCAyMC43IC4zIDIuNCAuNSA0LjIgMS42IDUuNSAxLjYgMS44IDUuOCAxLjggNS44IDEuOGwtLjggNC43Yy0xMS44LTEuMS0xMC4zLS42LTIwLjQtMS0zLjItNS4xLTIuMi0zLjMtNC4yLTcuOSAwIDAtNC4yIDMuOS03LjMgNS41ek00NDMuOSAyODFjLTYuNC0xMC42LTE5LjgtNy4yLTIxLjcgNS41LTIuNiAxNy4xIDE0LjMgMTkuOCAyMC43IDEwLjJsLjMgLjNjLS41IDEuOC0xLjggNi0xLjggNi4zbC0uNSAuNWMtMTAuMyA2LjktMjguNS0yLjUtMjUuNy0xOC42IDEuOS0xMC45IDE0LjQtMTguOSAyOC44LTkuOWwuMyAuNWMwIDEuMS0uMyAzLjQtLjMgNS4zem01LjgtODcuN2wwLTYuNmMuNyAwIDE5LjYgMy4zIDI3LjggNy4zbC0xLjYgMTcuNXMxMC4yLTkuNCAxNS40LTEwLjdjNS4yLTEuNiAxNC45IDcuMyAxNC45IDcuM2wtMTEuMyAxMS4zYy0xMi4xLTYuNC0xOS42LS4xLTIwLjcgLjgtNS4zIDM4LjctOC42IDQyLjIgNC40IDQ2LjFsLS41IDQuN2MtMTcuNi00LjMtMTguNS00LjUtMzYuOS03LjNsLjgtNC43YzcuMyAwIDcuNS01LjMgNy42LTYuOCAwIDAgNS01My4yIDUtNTUuMyAwLTIuOS01LTMuNy01LTMuN3ptMTEgMTE0LjRjLTguMS0yLjEtMTQuMS0xMS0xMC43LTIwLjcgMy4xLTkuNCAxMi4zLTEyLjMgMTguOS0xMC4yIDkuMiAyLjYgMTIuOCAxMS44IDEwLjcgMTkuNC0yLjYgOC45LTkuNCAxMy45LTE4LjkgMTEuNXptNDIuMiA5LjdjLTIuNC0uNS03LjEtMi40LTguNi0yLjlsMC0uMyAxLjYtMS44Yy42LTguMiAuNi03LjMgLjMtNy42LTQuOC0xLjgtNi43LTIuNC03LjEtMi40LTEuMyAxLjgtMi45IDQuNS0zLjcgNS41bC0uOCAzLjQgMCAuM2MtMS4zLS4zLTMuOS0xLjMtNi0xLjZsMC0uMyAyLjYtMS44YzMuNC00LjcgMTAtMTQuMSAxMy45LTIwLjJsMC0yLjEgLjUtLjNjMi4xIC44IDUuNSAyLjEgNy42IDIuOSAuNSAuNSAuMi0xLjktMSAyNS4xLS4yIDEuOCAwIDIuNiAuOCAzLjl6bS00LjctODkuOGMxMS4zLTE4LjMgMzAuOC0xNi4yIDM0LTMuNGw3LjYtMjYuMmMyLjMtNi4yLTIuOC05LjktNC41LTExLjNsMS44LTMuN2MxMi4yIDEwLjQgMTYuNCAxNCAyMi41IDIwLjQtMjUuOSA3My4xLTMwLjggODAuOC0yNC42IDg0LjNsLTEuOCA0LjRjLTYuNC0zLjMtOC45LTQuNC0xNy44LTguNmwyLjEtNi44Yy0uMy0uMy0zLjkgMy45LTkuNyAzLjctMTkuMS0xLjMtMjIuOS0zMS43LTkuNy01Mi45em0yOS4zIDc5LjNjMC01LjctNi4zLTcuOS03LjktNS4yLTEuMyAyLjEgMSA1IDIuOSA4LjQgMS42IDIuNiAyLjYgNi4zIDEgOS40LTIuNiA2LjMtMTIuNCA1LjMtMTUuNC0uOCAwLS43LS4zIC4xIDEuOC00LjdsLjgtLjNjLS42IDUuNyA2LjEgOS42IDguNCA1IDEtMi4xLS41LTUuNS0yLjEtOC40LTEuNi0yLjYtMy43LTYuMy0xLjgtOS43IDIuNy01LjEgMTEuMy00LjUgMTQuNyAyLjRsMCAuNS0yLjQgMy40em0yMS4yIDEzLjRjLTItMy4zLS45LTIuMS00LjUtNC43bC0uMyAwYy0yLjQgNC4yLTUuOCAxMC41LTguNiAxNi4yLTEuMyAyLjQtMSAzLjQtLjggMy45bC0uMyAuMy01LjgtNC40IC4zLS4zIDIuMS0xLjNjMy4xLTUuOCA2LjYtMTIuMSA5LjItMTdsMC0uM2MtMi42LTItMS4yLTEuNS02LTEuOGwwLS4zIDMuMS0zLjQgLjMgMGMzLjcgMi40IDEwIDYuOCAxMi4zIDguOWwuMyAuMy0xLjMgMy45ek01NzUuOCAyNzZsLTIuOS0yLjljLjgtMi40IDEuOC01IDIuMS03LjYgLjctOS43LTExLjUtMTEuOC0xMS41LTUgMCA1IDcuOSAxOS40IDcuOSAyNy44IDAgMTAuMi01LjggMTUuNy0xMy45IDE2LjUtOC40IC44LTIwLjItMTAuNS0yMC4yLTEwLjVsNS0xNC40IDIuOSAyLjFjLTMgMTcuOCAxNy43IDIwLjQgMTMuMyA1LjItMS4xLTQtMTguNy0zNC4yIDIuMS0zOC4yIDEzLjYtMi40IDIzIDE2LjUgMjMgMTYuNUw1NzUuOCAyNzZ6bTM1LjYtMTAuMmMtMTEtMzAuNC02MC41LTEyNy41LTE5Mi0xMjkuNi01My40LTEtOTQuMyAxNS40LTEzMi44IDM4bDg1LjYtOS4yLTkxLjQgMjAuNyAyNS4xIDE5LjYtMy45LTE2LjVjNy41LTEuNyAzOS4xLTguNSA2Ni44LTguOWwtMjIuMyA4MC40YzEzLjYtLjcgMTktOSAxOS42LTIyLjhsNS0xIC4zIDI2LjdjLTIyLjUgMy4yLTM3LjMgNi43LTQ5LjUgOS45bDEzLjEtNDMuMi02MS41LTM2LjcgMi40IDguMSAxMC4yIDVjNi4zIDE4LjYgMTkuNCA1Ni42IDIwLjQgNTguNyAyIDQuMyAzLjIgNS44IDEyIDQuNWwxLjEgNWMtMTYuMSA0LjktMjMuNyA3LjYtMzkgMTQuNGwtMi40LTQuN2M0LjQtMi45IDguNy0zLjkgNS41LTEyLjgtMjMuNy02Mi41LTIxLjUtNTguMS0yMi44LTU5LjRsMi40LTQuNCAzMy41IDY3LjNjLTMuOC0xMS45IDEuNyAxLjctMzMtNzguOGwtNDEuOSA4OC41IDQuNy0xMy45LTM1LjktNDIuMiAyNy44IDkzLjUtMTEuOCA4LjRjLTExMS45LTEwMS43LTEwNS44LTk4LjQtMTEzLjctOTguNy01LjUtLjMtMTMuNiA1LjUtMTMuNiA1LjVsLTUtNmMzMC42LTIzLjUgMzEuNi0yNC4zIDU4LjQtNDIuN2w0LjIgNy4xcy01LjggNC4yLTcuOSA3LjFjLTUuOSA5LjMgMS43IDEzLjMgNjEuOCA3NS43bC0xOC44LTU4LjkgMzkuOC0xMC4yIDI1LjcgMzAuNiA0LjQtMTIuMy01LTI0LjYgMTMuMS0zLjQgLjUgMy4xIDMuNy0xMC41LTk0LjMgMjkuMyAxMS4zLTUtMTMuNi00Mi40IDE3LjMtOS4yIDMwLjEgMzYuMSAyOC41LTEzLjFjLTEuNC03LjUtMi41LTE0LjUtNC43LTE5LjZsMTcuMyAxMy45IDQuNy0yLjEtNTkuMi00Mi43IDIzLjEgMTEuNWMxOS02LjEgMjUuMi03LjUgMzIuMi05LjdsMi42IDExYy0xMi42IDEyLjYgMS40IDE2LjggNi41IDE5LjRsLTEzLjYtNjEgMTIgMjguM2M0LjItMS4zIDcuMy0yLjEgNy4zLTIuMWwyLjYgOC42cy0zLjEgMS02LjMgMi4xbDguOSAyMSAzMy44LTY1LjctMjAuNyA2MWM0Mi40LTI0LjEgODEuNC0zNi43IDEzMi0zNS45IDY3IDEgMTY3LjMgNDAuOCAxOTkuOCAxMzkuOCAuOCAyLjEgMCAyLjYtLjggLjN6bS00MDgtMTEzLjRzMS44LS41IDQuMi0xLjNsOS40IDcuNmMtLjQgMC0zLjQtLjMtMTEuMyAyLjRsLTIuNC04LjZ6bTE0My44IDM4LjVjLTEuNi0uNi0yNi41LTQuOC0zMy4zIDIwLjdsMjEuNyAxNyAxMS41LTM3Ljd6TTMxOC40IDY3LjFjLTU4LjQgMC0xMDYuMSAxMi0xMTUgMTQuNGwwIC44YzguNCAyLjEgMTQuNCA0LjIgMjEuMiAxMS44bDEuNiAuM2M2LjYtMS44IDQ5LTEzLjkgMTEwLjItMTMuOSAxODAuMiAwIDMwMS43IDExNi44IDMwMS43IDIyMy40bDAgMTBjMCAxLjMgLjggMi42IDEuMSAuNSAuNS0yLjEgLjgtOC42IC44LTE5LjYgLjMtODMuOC05Ni42LTIyNy42LTMyMS42LTIyNy42ek01MjkuNSAyMzYuOGMxLjMtNS44IDAtMTIuMy03LjMtMTMuMS05LjYtMS4xLTE2LjEgMjMuOC0xNyAzMy41LS44IDUuNS0xLjMgMTQuOSA2IDE0LjkgNC43IDAgOS43LS45IDE4LjMtMzUuNHpNNDY4IDI3OS43Yy0yLjYtLjgtOS40LS44LTEyLjYgMTAuNS0xLjggNi44IC41IDEzLjQgNiAxNC43IDMuNyAxLjEgOC45IC41IDExLjgtMTAuNyAyLjYtOS45LTEuOC0xMy42LTUuMi0xNC40em0yMyAyMWMxLjggLjUgMy4xIDEgNS44IDEuOCAwLTEuOCAuNS04LjQgLjgtMTIuMS0xIDEuMy01LjUgOC4xLTYuNiAxMGwwIC4zeiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNOZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLW5kIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZWIiLCAiTTI1NS42IDhDMzk3LjQgOCA1MDQgMTE4LjEgNTA0IDI1NiA1MDQgNDAzLjEgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuNiA1MDQgOCAzOTQuNSA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHptLjggNDQuN2MtMTE4LjIgMC0yMDMuNyA5Ny45LTIwMy43IDIwMy4zIDAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjggLjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3ptOTQgMTQ0LjNsMCA0Mi41LTE4MC4zIDAgMC00Mi41IDE4MC4zIDB6bTAgNzkuOGwwIDQyLjUtMTgwLjMgMCAwLTQyLjUgMTgwLjMgMHoiXQogICAgfTsKICAgIGZhVXNwcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1c3BzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ZTEiLCAiTTQyOC4zIDI0MS43YzI1LjgtNDEuMyAxNS4yLTQ4LjgtMTEuNy00OC44bC0yNyAwYy0uMSAwLTEuNS0xLjQtMTAuOSA4LTExLjIgNS42LTM3LjkgNi4zLTM3LjkgOC43IDAgNC41IDcwLjMtMy4xIDg4LjEgMCA5LjUgMS41LTEuNSAyMC40LTQuNCAzMi0uNSA0LjUgMi40IDIuMyAzLjggLjF6TTMxNi4yIDI2NC4zYzY0LTIxLjMgOTcuMy0yMy45IDEwMi0yNi4yIDQuNC0yLjktNC40LTYuNi0yNi4yLTUuOC01MS43IDIuMi0xMzcuNiAzNy4xLTE3Mi42IDUzLjlsLTMwLjctOTMuMyAxOTYuNiAwYy0yLjctMjguMi0xNTIuOS0yMi42LTMzNy45LTIyLjZMLTUgNDE1LjhjMTk2LjQtOTcuMyAyNTguOS0xMzAuMyAzMjEuMi0xNTEuNXpNNjIuNyA5NmMyNTMuMyA1My43IDMzMCA2NS43IDMzMi4xIDg1LjIgMzYuNCAwIDQ1LjkgMCA1Mi40IDYuNiAyMS4xIDE5LjctMTQuNiA2Ny43LTE0LjYgNjcuNy00LjQgMi45LTQwNi40IDE2MC4yLTQwNi40IDE2MC4yTDQ0OS4zIDQxNS43IDUxNyA5NiA2Mi43IDk2eiJdCiAgICB9OwogICAgZmFTcXVhcmVMZXR0ZXJib3hkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1sZXR0ZXJib3hkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2MmUiLCAiTTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTEwNS4xIDE4N0M2Ni40IDE4NyAzNSAyMTguMyAzNSAyNTdzMzEuNCA3MCA3MC4xIDcwYzI0LjggMCA0Ni41LTEyLjggNTktMzIuMmwuNS0uNy0uNC0uNmMtNi41LTEwLjYtMTAuMi0yMy4xLTEwLjItMzYuNSAwLTEzLjYgMy45LTI2LjMgMTAuNi0zNy4xLTEyLjQtMTkuOC0zNC40LTMyLjktNTkuNS0zMi45ek0yMjQgMTg3Yy0yNC44IDAtNDYuNSAxMi44LTU5IDMyLjJsLS41IC43IC40IC42YzYuNSAxMC42IDEwLjIgMjMuMSAxMC4yIDM2LjUgMCAxMy42LTMuOSAyNi4zLTEwLjYgMzcuMSAxMi40IDE5LjcgMzQuNCAzMi45IDU5LjUgMzIuOSAyNC44IDAgNDYuNS0xMi44IDU5LTMyLjJsLjUtLjctLjQtLjZjLTYuNS0xMC42LTEwLjItMjMuMS0xMC4yLTM2LjUgMC0xMy42IDMuOS0yNi4zIDEwLjYtMzcuMS0xMi40LTE5LjctMzQuNC0zMi45LTU5LjUtMzIuOXptMTE4LjkgMGMtMjQuOCAwLTQ2LjUgMTIuOC01OSAzMi4ybC0uNSAuNyAuNCAuNmM2LjUgMTAuNiAxMC4yIDIzLjEgMTAuMiAzNi41IDAgMTMuNi0zLjkgMjYuMy0xMC42IDM3LjEgMTIuNCAxOS44IDM0LjQgMzIuOSA1OS41IDMyLjkgMzguNyAwIDcwLjEtMzEuMyA3MC4xLTcwcy0zMS40LTcwLTcwLjEtNzB6Il0KICAgIH07CiAgICBmYU1hbmRhbG9yaWFuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1hbmRhbG9yaWFuIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1MGYiLCAiTTIwMC42IDUxMS45Yy0xLTMuMy0xLjctMTUuOC0xLjQtMjQuNiAuNi0xNS45IDEtMjQuNyAxLjQtMjguOCAuNi02LjIgMi45LTIwLjcgMy4zLTIxLjQgLjYtMSAuNC0yNy45LS4yLTMzLjEtLjMtMi42LS42LTExLjktLjctMjAuNy0uMS0xNi41LS41LTIwLjEtMi43LTI0LjgtMS4xLTIuMy0xLjItMy44LTEtMTEuNCAuMi00LjIgLjEtOC41LS4zLTEyLjctMi0xMy0zLjUtMjcuNy0zLjItMzMuOXMuNC03LjEgMi4xLTkuN2MzLjEtNC43IDYuNS0xNCA4LjYtMjMuMyAyLjMtOS45IDMuOS0xNy4yIDQuNi0yMC43IDEuMS01LjEgMi42LTEwLjEgNC40LTE1LjEgMi4zLTYuMiAyLjUtMTUuNCAuNC0xNS40LS4zIDAtMS40IDEuMi0yLjQgMi43cy00LjggNC44LTguMyA3LjRjLTguNCA2LjEtMTEuNyA5LjQtMTIuNyAxMi42cy0xIDcuMi0uMiA3LjhjLjMgLjIgMS4zIDIuNCAyLjEgNC45IDEuNiA1IDEuOSAxMC4zIC43IDE1LjQtLjQgMS44LTEgNS41LTEuNSA4LjJzLTEgNi41LTEuMyA4LjJjLS4yIDEuNS0uNyAzLTEuNSA0LjMtMSAxLTEuMSAuOS0yLjEtLjUtLjctMS41LTEuMi0zLjEtMS40LTQuNy0uMi0xLjctMS42LTcuMS0zLjEtMTEuOS0zLjMtMTAuOS0zLjUtMTYuMi0xLTIxIC44LTEuNCAxLjQtMyAxLjctNC42IDAtMi40LTIuMi01LjMtNy40LTkuOS03LTYuMi04LjYtNy45LTEwLjItMTEuMy0xLjctMy42LTMuMS00LjEtNC41LTEuNS0xLjggMy0yLjYgOS4xLTMgMjJsLS4zIDEyLjIgMiAyLjJjMy4yIDMuNyAxMi4xIDE2LjUgMTMuOCAxOS44IDMuNCA2LjcgNC4zIDExLjcgNC40IDIzLjZzMSAyMi44IDIgMjQuN2MuNCAuNyAuNSAxLjQgLjMgMS41cy40IDIuMSAxLjMgNC4zYzEgMi45IDEuNyA1LjkgMi4xIDkgLjQgMy41IC45IDcgMS43IDEwLjQgMi4yIDkuNiAyLjggMTQuMSAyLjQgMjAuMS0uMiAzLjMtLjUgMTEuMS0uNyAxNy4zLTEuMyA0MS44LTEuOCA1OC0yIDYxLjItLjEgMi0uNCAxMS41LS42IDIxLjEtLjQgMTYuMy0xLjMgMjcuNC0yLjQgMjguNi0uNiAuNy04LjEtNC45LTEyLjUtOS41LTMuOC0zLjktNC00LjgtMi44LTkuOSAuNy0zIDIuMy0xOC4zIDMuMy0zMi42IC40LTQuOCAuOC0xMC41IDEtMTIuNyAuOC05LjQgMS43LTIwLjMgMi42LTM0LjggLjYtOC41IDEuMy0xNi40IDEuNy0xNy43cy45LTkuOSAxLjEtMTkuMWwuNC0xNi44LTIuMy00LjNjLTEuNy0zLjMtNC45LTYuOS0xMy4yLTE1LjMtNi02LjEtMTEuOC0xMi4zLTEyLjktMTMuOGwtMi0yLjggLjgtMTAuOWMxLjEtMTUuNyAxLjEtNDguNiAwLTU5LjFsLS45LTguNy0zLjMtNC41Yy01LjktOC4xLTUuOC03LjctNi4yLTMzLjMtLjEtNi4xLS40LTExLjUtLjYtMTIuMS0uOC0xLjktMy0yLjctOC41LTMtOC45LS42LTExLTEuOS0yMy44LTE0LjYtNi4yLTYtMTIuMy0xMi0xMy44LTEzLjItMi44LTIuNC0yLjgtMi0uNi05LjZsMS40LTQuNi0xLjctM2MtLjgtMS40LTEuNi0yLjgtMi42LTQuMS0xLjMtMS41LTUuNS0xMC45LTYtMTMuNS0uMi0uNy0uMi0xLjQtLjEtMi4xcy41LTEuMyAuOS0xLjhjMi4yLTIuOSAzLjQtNS43IDQuNS0xMC43IDIuMy0xMS4yIDcuNy0yNi4xIDEwLjYtMjkuMiAzLjItMy41IDcuNy0xIDkuNCA1IDEuMyA0LjggMS40IDkuOCAuMSAxOC42LS41IDMuNy0uOSA3LjQtMSAxMS4xIDAgNCAuMiA0LjcgMi4zIDcuNCAzLjMgNC40IDcuNyA3LjQgMTUuMiAxMC41IDEuNyAuNyAzLjMgMS43IDQuNyAyLjggMTEuMiAxMC43IDE4LjYgMTYuMiAyMi45IDE2LjkgNS4yIC44IDggNC41IDEwIDEzLjQgMS4zIDUuNyA0IDExLjEgNS41IDExLjEgMS4yLS4yIDIuMy0uNyAzLjMtMS40IDItMS4yIDIuMi0xLjcgMi4yLTQuMi0uMy02LS45LTExLjktMi0xNy44LS40LTEuNy0uOC00LjEtLjktNS40cy0uNi0zLjgtMS01LjdjLTIuNi0xMS4yLTMuNi0xNS41LTQuMS0xNi0xLjYtMi00LjEtMTAuMi00LjktMTUuOS0xLjYtMTEuMS00LTE0LjItMTIuOS0xNy40LTQuOS0xLjgtOS40LTQuNS0xMy4zLTcuOS0xLjItMS00LTMuMi02LjQtNS4xcy00LjQtMy41LTQuNi0zLjhjLS44LS43LTEuNy0xLjQtMi43LTItNi4yLTQuMi04LjgtNy0xMS4zLTEybC0yLjQtNWMtLjEtOC43LS4zLTE3LjMtLjQtMjZsNi45LTYuNmM0LTMuOCA4LjUtNy40IDEwLjYtOC40IDMuMy0xLjcgNC40LTEuOSAxMS40LTIgOC41LS4yIDEwLjEgMCAxMS43IDEuNnMxLjQgNi40LS4zIDguNWMtLjYgLjctMS4xIDEuNS0xLjMgMi4zIDAgLjYtMi42IDQuOS01LjQgOS0xLjEgMi4yLTEuOSA0LjUtMi40IDYuOCAyMC40IDEzLjQgMjEuNiAzLjggMTQuMSAyOWwxMS40IDIuNWMzLjEtOC43IDYuNS0xNy4zIDguNi0yNi4yIC4zLTcuNi0xMi00LjItMTUuNC04LjctMi4zLTUuOSAzLjEtMTQuMiA2LjEtMTkuMiAxLjYtMi4zIDYuNi00LjcgOC44LTQuMSAuOSAuMiA0LjItLjQgNy40LTEuMyAyLjUtLjggNS0xLjMgNy41LTEuNyAyLS4yIDQuMS0uNyA2LTEuMyAzLjctMS4xIDQuNS0xLjIgNi4zLS40IDEuOSAuNiAzLjggMS4xIDUuOCAxLjQgMi4xIC4zIDQuMSAuOSA2IDEuOSAxLjYgLjkgMy4zIDEuNyA1IDIuMiAyLjUgLjcgMyAuNiA3LTEuN0wyMjYgNS40IDIzNi43IDVjMTAuNC0uNCAxMC44LS41IDE1LjMtMi43TDI1Ni41IDAgMjU5IDEuNGMxLjggMSAzLjEgMi43IDQuOSA2IDIuNCA0LjUgMi40IDQuNiAxLjQgNy40LS45IDIuNC0uOSAzLjMtLjEgNi40IC41IDIgMS4yIDQgMi4xIDUuOSAuNiAxLjMgMS4xIDIuNiAxLjMgNCAuMyA0LjMgMCA1LjMtMi40IDYuOS0yLjIgMS41LTcgNy45LTcgOS4zLS4yIDEtLjYgMi0xLjEgMy01IDExLjUtNi44IDEzLjYtMTQuMyAxNy05LjIgNC4yLTEyLjMgNS4yLTE2LjIgNS4yLTMuMSAwLTQgLjItNC41IDEuMy0xLjIgMS40LTIuNSAyLjctNC4xIDMuNy0xLjggMS4yLTMuMyAyLjktNC40IDQuOC0uNSAxLjItMS40IDIuMi0yLjUgMi45LS45IC40LTEuOCAxLTIuNSAxLjctMi4yIDEuOS00LjYgMy43LTcgNS40LTMuMyAyLjMtNi45IDUtNy45IDYtLjcgLjctMS41IDEuMy0yLjQgMS43LS44IC40LTEuNiAuOS0yLjEgMS42LTEuMyAxLjQtMS41IDIuMS0xLjEgNC42IC4zIDIgLjggNCAxLjQgNS45IDEuMyAzLjggMS4zIDcuOSAwIDEwLjZzLS45IDYuNyAxLjQgOS42YzIgMi42IDIuMiA0LjYgLjcgOC44LS44IDIuOS0xLjEgNS45LTEuMSA4LjkgMCA0LjkgLjIgNi4zIDEuNSA4LjRzMS44IDIuNSAzLjIgMi4zYzItLjIgMi4zLTEuMSA0LjctMTIuMSAyLjItMTAgMy43LTExLjkgMTMuOC0xNy4xIDIuOS0xLjUgNy41LTQgMTAtNS40czYuOC0zLjcgOS40LTQuOWM1LjktMi42IDExLjItNi42IDE1LjItMTEuNyA3LjEtOC44IDEwLTE2LjIgMTIuOC0zMy4zIC40LTIuOCAxLjMtNS40IDIuOS03LjcgMS40LTIuMiAyLjQtNC43IDIuOS03LjMgMS01LjMgMi45LTkuMSA1LjYtMTEuNSA0LjctNC4yIDYtMS4xIDQuNiAxMC45LS41IDMuOS0xLjEgMTAuMy0xLjQgMTQuNGwtLjYgNy40YzMgMi43IDUuOSA1LjUgOC45IDguMmwuMSA4LjRjLjEgNC42IC41IDkuNSAuOSAxMC45bC44IDIuNS02LjQgNi4zYy04LjUgOC4zLTEyLjkgMTMuOS0xNi44IDIxLjYtMS44IDMuNS0zLjcgNy4xLTQuNCA4LTIuMiAzLjEtNi41IDEzLTguOCAyMC4zbC0yLjMgNy4yLTcgNi41Yy0zLjggMy42LTggNy4yLTkuMiA4LjItMyAyLjMtNC4zIDUuMS00LjMgMTAtLjEgMi41IC40IDUgMS42IDcuMyAuOCAxLjYgMS41IDMuMiAyLjEgNC44IC4zIDEgLjkgMiAxLjYgMi45IDEuNCAxLjYgMS45IDE2LjEgLjggMjMuMi0uNyA0LjUtMy42IDEyLTQuNyAxMi0xLjggMC00LjEgOS4zLTUuMSAyMC43LS4yIDItLjYgNS45LTEgOC43cy0xIDEwLTEuNCAxNmMtLjggMTIuMi0uMiAxOC44IDIgMjMuMiAzLjQgNi43IC41IDEyLjctMTEgMjIuOGwtNCAzLjUgLjEgNS4yYy4xIDMgLjQgNiAxLjEgOC45IDQuNiAxNiA0LjcgMTYuOSA0LjQgMzcuMS0uNSAyNi40LS4zIDQwLjMgLjYgNDQuMiAuNSAyLjMgLjkgNC42IDEuMSA3IC4yIDIgLjcgNS4zIDEuMSA3LjQgLjUgMi4zIC44IDExIC44IDIyLjdsMCAxOS4xLTEuOCAyLjZjLTIuNyAzLjktMTUuMSAxMy41LTE1LjUgMTIuM2wuMSAwem0yOS41LTQ1LjFjLS4yLS4zLS4zLTYuOS0uMy0xNC42IDAtMTQuMS0uOS0yNy41LTIuMy0zNC40LS40LTItLjgtOS43LS45LTE3LjEtLjItMTEuOS0xLjQtMjQuNC0yLjYtMjYuNC0uNy0xLjEtMy0xNy43LTMtMjEuMyAwLTQuMiAxLTYgNS4zLTkuMXM0LjktMy4xIDUuNS0uN2MuMyAxLjEgMS40IDUuNiAyLjYgMTAgMy45IDE1LjEgNC4xIDE2LjMgNCAyMS43LS4xIDUuOC0uMSA2LjEtMS43IDE3LjctMSA3LjEtMS4yIDEyLjQtMSAyOC40IC4yIDE5LjQtLjYgMzUuNy0yIDQxLjMtLjcgMi44LTIuOCA1LjUtMy40IDQuNGwtLjEgMHptLTcxLTM3LjZjLS44LTMuNi0xLjMtNy4yLTEuNy0xMC44cy0xLTcuMi0xLjctMTAuOGMtLjUtMi4xLS45LTQuMy0xLTYuNS0uMy0zLjItLjktNy41LTEuMy05LjUtMS00LjgtMy4zLTE5LjQtMy40LTIxLjEgMC0uNy0uMy00LS43LTcuNC0uNy02LjItLjgtMjcuNy0uMi0yOC4zIDEtMSA2LjYgMi44IDExLjMgNy40bDUuMyA1LjMtLjQgNi41Yy0uMiAzLjYtLjYgMTAuMi0uOCAxNC44LS41IDEzLjMtLjcgOC43LTEuNiAyOC40LS44IDE3LjQtMS45IDMxLjMtMi42IDMyLS4xIC4xLS4yIC4xLS4yIC4ycy0uMiAwLS4zIDAtLjIgMC0uMy0uMS0uMS0uMS0uMi0uMmwwIDB6TTcyIDE2Mi42YzIxLjEgMTIuOCAxNy44IDE0LjIgMjguNSAxNy43IDEzIDQuMyAxOC45IDcuMSAyMy4yIDE2LjktNDMuNyAzNi4xLTY5IDU3LjktNzYuNyA3MC45LTMxIDUyLTYgMTAxLjYgNjIuOCA4Ny4yLTE0LjIgMjkuMi03OCAyOC42LTk4LjctNC45LTI0LjctNDAtMjIuMS0xMTguMyA2MS0xODcuN2wwIDB6bTIxMC44IDE3OWM1Ni43IDYuOSA4Mi4zLTM3LjcgNDYuNS04OS4yIDAgMC0yNi45LTI5LjMtNjQuMy02OCAzLTE1LjUgOS41LTMyLjEgMzAuNi01My44IDg5LjIgNjMuNSA5MiAxNDEuNiA5Mi41IDE0OS40IDQuMyA3MC42LTc4LjcgOTEuMi0xMDUuMyA2MS43bDAgMHoiXQogICAgfTsKICAgIGZhU2xhY2sgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2xhY2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2MjQ0NywgInNsYWNrLWhhc2giXSwgImYxOTgiLCAiTTk0LjEgMzE1LjFjMCAyNS45LTIxLjIgNDcuMS00Ny4xIDQ3LjFTMCAzNDEgMCAzMTUuMSAyMS4yIDI2OCA0Ny4xIDI2OGw0Ny4xIDAgMCA0Ny4xem0yMy43IDBjMC0yNS45IDIxLjItNDcuMSA0Ny4xLTQ3LjFTMjEyIDI4OS4yIDIxMiAzMTUuMWwwIDExNy44YzAgMjUuOS0yMS4yIDQ3LjEtNDcuMSA0Ny4xcy00Ny4xLTIxLjItNDcuMS00Ny4xbDAtMTE3Ljh6bTQ3LjEtMTg5Yy0yNS45IDAtNDcuMS0yMS4yLTQ3LjEtNDcuMVMxMzkgMzIgMTY0LjkgMzIgMjEyIDUzLjIgMjEyIDc5LjFsMCA0Ny4xLTQ3LjEgMHptMCAyMy43YzI1LjkgMCA0Ny4xIDIxLjIgNDcuMSA0Ny4xUzE5MC44IDI0NCAxNjQuOSAyNDRMNDcuMSAyNDRDMjEuMiAyNDQgMCAyMjIuOCAwIDE5Ni45czIxLjItNDcuMSA0Ny4xLTQ3LjFsMTE3LjggMHptMTg5IDQ3LjFjMC0yNS45IDIxLjItNDcuMSA0Ny4xLTQ3LjFTNDQ4IDE3MSA0NDggMTk2LjkgNDI2LjggMjQ0IDQwMC45IDI0NGwtNDcuMSAwIDAtNDcuMXptLTIzLjcgMGMwIDI1LjktMjEuMiA0Ny4xLTQ3LjEgNDcuMVMyMzYgMjIyLjggMjM2IDE5Ni45bDAtMTE3LjhDMjM2IDUzLjIgMjU3LjIgMzIgMjgzLjEgMzJzNDcuMSAyMS4yIDQ3LjEgNDcuMWwwIDExNy44em0tNDcuMSAxODljMjUuOSAwIDQ3LjEgMjEuMiA0Ny4xIDQ3LjFTMzA5IDQ4MCAyODMuMSA0ODAgMjM2IDQ1OC44IDIzNiA0MzIuOWwwLTQ3LjEgNDcuMSAwem0wLTIzLjdjLTI1LjkgMC00Ny4xLTIxLjItNDcuMS00Ny4xUzI1Ny4yIDI2OCAyODMuMSAyNjhsMTE3LjggMGMyNS45IDAgNDcuMSAyMS4yIDQ3LjEgNDcuMXMtMjEuMiA0Ny4xLTQ3LjEgNDcuMWwtMTE3LjggMHoiXQogICAgfTsKICAgIGZhU2xhY2tIYXNoID0gZmFTbGFjazsKICAgIGZhQW5nZWxsaXN0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFuZ2VsbGlzdCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMjA5IiwgIk0zMTUuNiAyMTUuNGMxMS43LTMyLjYgNDUuNC0xMjYuOSA0NS40LTE1Ny4xIDAtMjYuNi0xNS43LTQ4LjktNDMuNy00OC45LTQ0LjYgMC04NC42IDEzMS43LTk3LjEgMTYzLjEtOS43LTI4LjUtNTUuMS0xNzIuNS05NS4xLTE3Mi41LTMxLjEgMC00NS43IDIyLjktNDUuNyA1MS43IDAgMzUuMyAzNC4yIDEyNi44IDQ2LjYgMTYyLTYuMy0yLjMtMTMuMS00LjMtMjAtNC4zLTIzLjQgMC00OC4zIDI5LjEtNDguMyA1Mi42IDAgOC45IDQuOSAyMS40IDggMjkuNy0zNi45IDEwLTUxLjEgMzQuNi01MS4xIDcxLjctLjEgNzIuMiA2OC4zIDE0OC42IDE2NC41IDE0OC42IDExOCAwIDE5MS40LTg4LjYgMTkxLjQtMjAyLjkgMC00My4xLTYuOS04Mi01NC45LTkzLjd6TTI4MC4yIDEwOGM0LTEyLjMgMjEuMS02NC4zIDM3LjEtNjQuMyA4LjYgMCAxMC45IDguOSAxMC45IDE2IDAgMTkuMS0zOC42IDEyNC42LTQ3LjEgMTQ4bC0zNC02IDMzLjEtOTMuN3pNMTEwLjggNDguM2MwLTExLjkgMTQuNS00NS43IDQ2LjMgNDcuMWwzNC42IDEwMC4zYy0xNS42LTEuMy0yNy43LTMtMzUuNCAxLjQtMTAuOS0yOC44LTQ1LjUtMTE5LjctNDUuNS0xNDguOHpNMTA4LjUgMjQ0YzI5LjMgMCA2Ny4xIDk0LjYgNjcuMSAxMDcuNCAwIDUuMS00LjkgMTEuNC0xMC42IDExLjQtMjAuOSAwLTc2LjktNzYuOS03Ni45LTk3LjcgLjEtNy43IDEyLjctMjEuMSAyMC40LTIxLjF6TTI5Mi44IDQzMC4zYy0yOS4xIDMyLTY2LjMgNDguNi0xMDkuNyA0OC42LTU5LjQgMC0xMDYuMy0zMi42LTEyOC45LTg4LjMtMTcuMS00My40IDMuOC02OC4zIDIwLjYtNjguMyAxMS40IDAgNTQuMyA2MC4zIDU0LjMgNzMuMSAwIDQuOS03LjcgOC4zLTExLjcgOC4zLTE2LjEgMC0yMi40LTE1LjUtNTEuMS01MS40LTI5LjcgMjkuNyAyMC41IDg2LjkgNTguMyA4Ni45IDI2LjEgMCA0My4xLTI0LjIgMzgtNDIgMy43IDAgOC4zIC4zIDExLjctLjYgMS4xIDI3LjEgOS4xIDU5LjQgNDEuNyA2MS43IDAtLjkgMi03LjEgMi03LjQgMC0xNy40LTEwLjYtMzIuNi0xMC42LTUwLjMgMC0yOC4zIDIxLjctNTUuNyA0My43LTcxLjcgOC02IDE3LjctOS43IDI3LjEtMTMuMSA5LjctMy43IDIwLTggMjcuNC0xNS40LTEuMS0xMS4yLTUuNy0yMS4xLTE2LjktMjEuMS0yNy43IDAtMTIwLjYgNC0xMjAuNi0zOS43IDAtNi43IC4xLTEzLjEgMTcuNC0xMy4xIDMyLjMgMCAxMTQuMyA4IDEzOC4zIDI5LjEgMTguMSAxNi4xIDI0LjMgMTEzLjItMzEgMTc0Ljd6bS05OC42LTEyNmM5LjcgMy4xIDE5LjcgNCAyOS43IDYtNy40IDUuNC0xNCAxMi0yMC4zIDE5LjEtMi44LTguNS02LjItMTYuOC05LjQtMjUuMXoiXQogICAgfTsKICAgIGZhQW5kcm9pZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhbmRyb2lkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxN2IiLCAiTTQyMC41IDI1My45YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptLTI2NS4xIDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0yNzMuNy05Ni41bDQ3LjktODNjLjgtMS4xIDEuMy0yLjQgMS41LTMuOHMuMi0yLjctLjEtNC4xLS45LTIuNi0xLjctMy43LTEuOC0yLTMtMi43LTIuNS0xLjEtMy45LTEuMy0yLjcgMC00IC40LTIuNSAxLjEtMy42IDEuOS0xLjkgMi0yLjUgMy4ybC00OC41IDg0LjFjLTM4LjgtMTcuNC04MC44LTI2LjQtMTIzLjMtMjYuNHMtODQuNSA5LTEyMy4zIDI2LjRMMTE2LjIgNjQuNGMtLjYtMS4yLTEuNS0yLjMtMi41LTMuMnMtMi4zLTEuNS0zLjYtMS45LTIuNy0uNS00LS40LTIuNyAuNi0zLjkgMS4zLTIuMiAxLjYtMyAyLjctMS40IDIuNC0xLjcgMy43LS4zIDIuNy0uMSA0LjEgLjggMi42IDEuNSAzLjhsNDcuOSA4M0M2NC41IDIwMi4yIDguMiAyODUuNSAwIDM4NGw1NzYgMGMtOC4yLTk4LjUtNjQuNS0xODEuOC0xNDYuOS0yMjYuNnoiXQogICAgfTsKICAgIGZhTWVldHVwID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1lZXR1cCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMmUwIiwgIk0xMzEuMSA0MTQuM2MxLjEgNS43LTIuMyAxMS4xLTggMTIuMy01LjQgMS4xLTEwLjktMi4zLTEyLTgtMS4xLTUuNCAyLjMtMTEuMSA3LjctMTIuM3MxMS4xIDIuMyAxMi4zIDh6bTE0My4xIDcxLjRjLTYuMyA0LjYtOCAxMy40LTMuNyAyMCA0LjYgNi42IDEzLjQgOC4zIDIwIDMuNyA2LjMtNC42IDgtMTMuNCAzLjQtMjAtNC4yLTYuNS0xMy4xLTguMy0xOS43LTMuN3ptLTg2LTQ2Mi4zYTExLjggMTEuOCAwIDEgMCAtNC45LTIzIDExLjggMTEuOCAwIDEgMCA0LjkgMjN6TTY2LjUgMjI2LjNhMjIuMiAyMi4yIDAgMSAwIC0yNC43IDM2LjkgMjIuMiAyMi4yIDAgMSAwIDI0LjctMzYuOXptMjcyLTE3MC45YTIyLjEgMjIuMSAwIDEgMCAtMjIuNC0zOCAyMi4xIDIyLjEgMCAxIDAgMjIuNCAzOHptLTE5MS4xIDU4YTE2LjkgMTYuOSAwIDEgMCAtMTguOC0yOCAxNi45IDE2LjkgMCAxIDAgMTguOCAyOHptMzcyLjMgMTU2Yy03LjQgMS43LTEyLjMgOS4xLTEwLjYgMTYuOSAxLjQgNy40IDguOSAxMi4zIDE2LjMgMTAuNiA3LjQtMS40IDEyLjMtOC45IDEwLjYtMTYuNi0xLjUtNy40LTguOS0xMi4zLTE2LjMtMTAuOXptMzkuNy01Ni44YTEwLjEgMTAuMSAwIDEgMCAtMTkuOCA0LjMgMTAuMSAxMC4xIDAgMSAwIDE5LjgtNC4zem0tODAuMy03My43YTE4LjggMTguOCAwIDEgMCAyMC43IDMxLjMgMTguOCAxOC44IDAgMSAwIC0yMC43LTMxLjN6bS02LjMgMTM5LjRjMjYuMyA0My4xIDE1LjEgMTAwLTI2LjMgMTI5LjEtMTcuNCAxMi4zLTM3LjEgMTcuNy01Ni45IDE3LjEtMTIgNDcuMS02OS40IDY0LjYtMTA1LjEgMzIuNi0xLjEgLjktMi42IDEuNy0zLjcgMi45LTM5LjEgMjcuMS05Mi4zIDE3LjQtMTE5LjQtMjIuMy05LjctMTQuMy0xNC42LTMwLjYtMTUuMS00Ni45LTY1LjQtMTAuOS05MC05NC00MS4xLTEzOS43LTI4LjMtNDYuOSAuNi0xMDcuNCA1My40LTExNC45IDI1LjEtNjYuMiAxMDcuNi05Ny42IDE2My42LTU0LjIgNjcuNC0yMi4zIDEzNi4zIDI5LjQgMTMwLjkgMTAxLjEgNDEuMSAxMi42IDUyLjggNjYuOSAxOS43IDk1LjJ6bS03MCA3NC4zYy0zLjEtMjAuNi00MC45LTQuNi00My4xLTI3LjEtMy4xLTMyIDQzLjctMTAxLjEgNDAtMTI4LTMuNC0yNC0xOS40LTI5LjEtMzMuNC0yOS40LTEzLjQtLjMtMTYuOSAyLTIxLjQgNC42LTIuOSAxLjctNi42IDQuOS0xMS43LS4zLTYuMy02LTExLjEtMTEuNy0xOS40LTEyLjktMTIuMy0yLTE3LjcgMi0yNi42IDkuNy0zLjQgMi45LTEyIDEyLjktMjAgOS4xLTMuNC0xLjctMTUuNC03LjctMjQtMTEuNC0xNi4zLTcuMS00MCA0LjYtNDguNiAyMC0xMi45IDIyLjktMzggMTEzLjEtNDEuNyAxMjUuMS04LjYgMjYuNiAxMC45IDQ4LjYgMzYuOSA0Ny4xIDExLjEtLjYgMTguMy00LjYgMjUuNC0xNy40IDQtNy40IDQxLjctMTA3LjcgNDQuNi0xMTIuNiAyLTMuNCA4LjktOCAxNC42LTUuMSA1LjcgMy4xIDYuOSA5LjQgNiAxNS4xLTEuMSA5LjctMjggNzAuOS0yOC45IDc3LjctMy40IDIyLjkgMjYuOSAyNi42IDM4LjYgNCAzLjctNy4xIDQ1LjctOTIuNiA0OS40LTk4LjMgNC4zLTYuMyA3LjQtOC4zIDExLjctOCAzLjEgMCA4LjMgLjkgNy4xIDEwLjktMS40IDkuNC0zNS4xIDcyLjMtMzguOSA4Ny43LTQuNiAyMC42IDYuNiA0MS40IDI0LjkgNTAuNiAxMS40IDUuNyA2Mi41IDE1LjcgNTguNS0xMS4xem01LjcgOTIuM2EyMy4zIDIzLjMgMCAxIDAgMjYuMiAzOC40IDIzLjMgMjMuMyAwIDEgMCAtMjYuMi0zOC40eiJdCiAgICB9OwogICAgZmFGb250aWNvbnNGaSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmb250aWNvbnMtZmkiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjNhMiIsICJNMTE0LjQgMjI0bDkyLjQgMC0xNS4yIDUxLjItNzYuNCAwIDAgMTU3LjhjMCA4LTIuOCA5LjIgNC40IDEwbDU5LjYgNS42IDAgMzQuNC0xNzkuMiAwIDAtMzUuMiAyOS4yLTIuOGM3LjItLjggOS4yLTMuMiA5LjItMTAuOGwwLTE1NS44YzAtMy4yLTQtMy4yLTgtMy4ybC0zMC40IDAgMC01MS4yIDM4LjQgMCAwLTI4LjhjMC02OCAzNi40LTk2IDEwNi05NiA0Ni44IDAgODguOCAxMS4yIDg4LjggNzIuNEwxNjMuNiAxODBjLjQtMjUuNi02LTMxLjYtMjIuNC0zMS42LTI1LjIgMC0yNiAxMy42LTI2IDM3LjZsMCAzMmMwIDMuMi00LjggNi0uOCA2ek0zODQgNDgzbC0xNDAuOCAwIDAtMzQuNCAyOC0zLjZjNy4yLS44IDEwLjQtMi40IDEwLjQtMTBsMC0xNDhjMC01LjYtNC05LjItOS4yLTEwLjhsLTMzLjItOC44IDkuMi00MC40IDExMCAwIDAgMjA4YzAgOC0zLjYgOC44IDQgMTBsMjEuNiAzLjYgMCAzNC40ek0zNTQgMTM1LjhsMTIuNCA0NS42LTEwIDEwLTQyLjgtMjIuOC00Mi44IDIyLjgtMTAtMTAgMTIuNC00NS42LTMwLTM2LjQgNC44LTEwIDM4IDAgMjEuMi0zOC40IDEyLjggMCAyMS4yIDM4LjQgMzggMCA0LjggMTMuMi0zMCAzMy4yeiJdCiAgICB9OwogICAgZmFQYWxmZWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGFsZmVkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzZDgiLCAiTTM4NC45IDE5My45YzAtNDcuNC01NS4yLTQ0LjItOTUuNC0yOS44LTEuMyAzOS40LTIuNSA4MC43LTMgMTE5LjggLjcgMi44IDIuNiA2LjIgMTUuMSA2LjIgMzYuOCAwIDgzLjQtNDIuOCA4My4zLTk2LjJ6TTE5MC40IDI2Ni4xYy4yIDAgNi41LTIuNyAxMS4yLTIuNyAyNi42IDAgMjAuNyA0NC4xLTE0LjQgNDQuMS0yMS41IDAtMzcuMS0xOC4xLTM3LjEtNDMgMC00MiA0Mi45LTk1LjYgMTAwLjctMTI2LjUgMS0xMi40IDMtMjIgMTAuNS0yOC4yIDExLjItOSAyNi42LTMuNSAyOS41IDExLjEgNzIuMi0yMi4yIDEzNS4yIDEgMTM1LjIgNzIgMCA3Ny45LTc5LjMgMTUyLjYtMTQwLjEgMTM4LjItLjEgMzkuNCAuOSA3NC40IDIuNyAxMDBsMCAuMmMuMiAzLjQgLjYgMTIuNS01LjMgMTkuMS05LjYgMTAuNi0zMy40IDEwLTM2LjQtMjIuMy00LjEtNDQuNCAuMi0yMDYuMSAxLjQtMjQyLjUtMjEuNSAxNS01OC41IDUwLjMtNTguNSA3NS45IC4yIDIuNSAuNCA0IC42IDQuNnpNOCAxODEuMXMtLjEgMzcuNCAzOC40IDM3LjRsMzAgMCAyMi40IDIxNy4yczAgNDQuMyA0NC43IDQ0LjNsMjg4LjkgMHM0NC43LS40IDQ0LjctNDQuM2wyMi40LTIxNy4yIDMwIDBzMzguNCAxLjIgMzguNC0zNy40YzAgMCAuMS0zNy40LTM4LjQtMzcuNGwtMzAuMSAwYy03LjMtMjUuNi0zMC4yLTc0LjMtMTE5LjQtNzQuM2wtMjggMCAwLTE5LjFzLTIuNy0xOC40LTIxLjEtMTguNGwtODUuOCAwUzIyNCAzMS45IDIyNCA1MC4zbDAgMTkuMS0yOC4xIDBzLTEwNSA0LjItMTIwLjUgNzQuM2wtMjkgMFM4IDE0Mi41IDggMTgxLjF6Il0KICAgIH07CiAgICBmYVdwYmVnaW5uZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid3BiZWdpbm5lciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjk3IiwgIk00NjMuMiAzMjIuNGM1Ni4yIDY0LjMgNC4yIDE1Ny42LTkxLjkgMTU3LjYtMzkuNiAwLTc4LjgtMTcuNy0xMDAuMS01MC02LjkgLjQtMjIuNyAuNC0yOS42IDAtMjEuNCAzMi40LTYwLjYgNTAtMTAwLjEgNTAtOTUuNSAwLTE0OC4zLTkzLTkxLjktMTU3LjYtNzkuMS0xMzEuOSAzMS4zLTI5MC40IDIwNi44LTI5MC40IDE3NS42IDAgMjg1LjkgMTU4LjYgMjA2LjggMjkwLjR6bS0zMzkuNi04M2w0MS41IDAgMC01OC4xLTQxLjUgMCAwIDU4LjF6bTIxNy4yIDg2LjFsMC0yMy44Yy02MC41IDIwLjktMTMyLjQgOS4yLTE4Ny42LTM0bC4yIDI0LjljNTEuMSA0Ni40IDEzMS43IDU3LjkgMTg3LjMgMzIuOXpNMTkwIDIzOS40bDE2Ni4xIDAgMC01OC4xLTE2Ni4xIDAgMCA1OC4xeiJdCiAgICB9OwogICAgZmFEaWFzcG9yYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkaWFzcG9yYSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNzkxIiwgIk0yMTkuNyAzNTQuNmMtMS40IDAtODggMTE5LjktODguNyAxMTkuOVM0NC40IDQxNCA0NCA0MTMuMyAxMzAuNiAyODcuNSAxMzAuNiAyODUuOGMwLTIuMi0xMjkuNi00NC0xMzcuNi00Ny4xLTEuMy0uNSAzMS40LTEwMS44IDMxLjctMTAyLjEgLjYtLjcgMTQ0LjQgNDcgMTQ1LjUgNDcgLjQgMCAuOS0uNiAxLTEuMyAuNC0yIDEtMTQ4LjYgMS43LTE0OS42IC44LTEuMiAxMDQuNS0uNyAxMDUuMS0uMyAxLjUgMSAzLjUgMTU2LjEgNi4xIDE1Ni4xIDEuNCAwIDEzOC43LTQ3IDEzOS4zLTQ2LjMgLjggLjkgMzEuOSAxMDIuMiAzMS41IDEwMi42LS45IC45LTE0MC4yIDQ3LjEtMTQwLjYgNDguOC0uMyAxLjQgODIuOCAxMjIuMSA4Mi41IDEyMi45cy04NS41IDYzLjUtODYuMyA2My41Yy0xLS4yLTg5LTEyNS41LTkwLjktMTI1LjVsMCAweiJdCiAgICB9OwogICAgZmFQcm9kdWN0SHVudCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwcm9kdWN0LWh1bnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI4OCIsICJNMzI2LjMgMjE4LjhjMCAyMC41LTE2LjcgMzcuMi0zNy4yIDM3LjJsLTcwLjMgMCAwLTc0LjQgNzAuMyAwYzIwLjUgMCAzNy4yIDE2LjcgMzcuMiAzNy4yek04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem0zNjcuOS0zNy4yYzAtNDcuOS0zOC45LTg2LjgtODYuOC04Ni44bC0xMTkuOSAwIDAgMjQ4IDQ5LjYgMCAwLTc0LjQgNzAuMyAwYzQ3LjkgMCA4Ni44LTM4LjkgODYuOC04Ni44eiJdCiAgICB9OwogICAgZmFTcXVhcmVVcHdvcmsgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXVwd29yayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjdjIiwgIk01NiAzMmwzMzYgMGMzMC45IDAgNTYgMjUuMSA1NiA1NmwwIDMzNmMwIDMwLjktMjUuMSA1Ni01NiA1Nkw1NiA0ODBjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgODhDMCA1Ny4xIDI1LjEgMzIgNTYgMzJ6TTI3MC45IDI3NC4yYzYuNi01Mi45IDI1LjktNjkuNSA1MS40LTY5LjUgMjUuMyAwIDQ0LjkgMjAuMiA0NC45IDQ5LjdzLTE5LjcgNDkuNy00NC45IDQ5LjdjLTI3LjkgMC00Ni4zLTIxLjUtNTEuNC0yOS45em0tMjYuNy00MS44Yy04LjItMTUuNS0xNC4zLTM2LjMtMTkuMi01NS42bC02Mi45IDAgMCA3OC4xYzAgMjguNC0xMi45IDQ5LjQtMzguMiA0OS40Uzg0LjEgMjgzLjQgODQuMSAyNTVsLjMtNzguMS0zNi4yIDAgMCA3OC4xYzAgMjIuOCA3LjQgNDMuNSAyMC45IDU4LjIgMTMuOSAxNS4yIDMyLjggMjMuMiA1NC44IDIzLjIgNDMuNyAwIDc0LjItMzMuNSA3NC4yLTgxLjVsMC01Mi41YzQuNiAxNy4zIDE1LjQgNTAuNSAzNi4yIDc5LjdsLTE5LjMgMTEwLjUgMzYuOCAwIDEyLjgtNzguNGM0LjIgMy41IDguNyA2LjYgMTMuNCA5LjQgMTIuMyA3LjggMjYuNCAxMi4yIDQwLjkgMTIuNmwzLjQgMGM0NS4xIDAgODAuOS0zNC45IDgwLjktODEuOXMtMzUuOS04Mi4yLTgwLjktODIuMmMtNDUuNCAwLTcwLjkgMjkuNy03OC4xIDYwLjFsMCAuMnoiXQogICAgfTsKICAgIGZhQ3V0dGxlZmlzaCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjdXR0bGVmaXNoIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzOGMiLCAiTTM0OCAzMDUuNWMtMTcuNSAzMS42LTU3LjQgNTQuNS05NiA1NC41LTU2LjYgMC0xMDQtNDcuNC0xMDQtMTA0czQ3LjQtMTA0IDEwNC0xMDRjMzguNiAwIDc4LjUgMjIuOSA5NiA1NC41IDEzLjctNTAuOSA0MS43LTkzLjMgODctMTE3LjgtNDUuMy00OS42LTExMC41LTgwLjctMTgzLTgwLjctMTM3IDAtMjQ4IDExMS0yNDggMjQ4UzExNSA1MDQgMjUyIDUwNGM3Mi41IDAgMTM3LjctMzEuMSAxODMtODAuNy00NS4zLTI0LjUtNzMuMy02Ni45LTg3LTExNy44eiJdCiAgICB9OwogICAgZmFNZWRhcHBzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1lZGFwcHMiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjNjNiIsICJNMTE4LjMgMjM4LjRjMy41LTEyLjUgNi45LTMzLjYgMTMuMi0zMy42IDguMyAxLjggOS42IDIzLjQgMTguNiAzNi42IDQuNi0yMy41IDUuMy04NS4xIDE0LjEtODYuNyA5LS43IDE5LjcgNjYuNSAyMiA3Ny41IDkuOSA0LjEgNDguOSA2LjYgNDguOSA2LjYgMS45IDcuMy0yNCA3LjYtNDAgNy44LTQuNiAxNC44LTUuNCAyNy43LTExLjQgMjgtNC43IC4yLTguMi0yOC44LTE3LjUtNDkuNmwtOS40IDY1LjVjLTQuNCAxMy0xNS41LTIyLjUtMjEuOS0zOS4zLTMuMy0uMS02Mi40LTEuNi00Ny42LTcuOGwzMS01ek0yMjggNDQ4YzIxLjIgMCAyMS4yLTMyIDAtMzJMOTIgNDE2Yy0yMS4yIDAtMjEuMiAzMiAwIDMybDEzNiAwem0tMjQgNjRjMjEuMiAwIDIxLjItMzIgMC0zMmwtODggMGMtMjEuMiAwLTIxLjIgMzIgMCAzMmw4OCAwem0zNC4yLTE0MS41YzMuMi0xOC45IDUuMi0zNi40IDExLjktNDguOCA3LjktMTQuNyAxNi4xLTI4LjEgMjQtNDEgMjQuNi00MC40IDQ1LjktNzUuMiA0NS45LTEyNS41IDAtODUuNi03MS44LTE1NS4yLTE2MC0xNTUuMlMwIDY5LjYgMCAxNTUuMmMwIDUwLjIgMjEuMyA4NS4xIDQ1LjkgMTI1LjUgNy45IDEyLjkgMTYgMjYuMyAyNCA0MSA2LjcgMTIuNSA4LjcgMjkuOCAxMS45IDQ4LjkgMy41IDIxIDM2LjEgMTUuNyAzMi42LTUuMS0zLjYtMjEuNy01LjYtNDAuNy0xNS4zLTU4LjYtMzIuNi02MC40LTY2LjEtOTUuNi02Ni4xLTE1MS43IDAtNjcuOSA1Ny0xMjMuMiAxMjctMTIzLjJTMjg3IDg3LjMgMjg3IDE1NS4yYzAgNTYuMS0zMy41IDkxLjMtNjYuMSAxNTEuNi05LjcgMTgtMTEuNyAzNy40LTE1LjMgNTguNi0zLjQgMjAuNiAyOSAyNi40IDMyLjYgNS4xeiJdCiAgICB9OwogICAgZmFQaXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGl4IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0M2EiLCAiTTI0Mi40IDI5Mi41YzUuNC01LjQgMTQuNy01LjQgMjAuMSAwbDc3IDc3YzE0LjIgMTQuMiAzMy4xIDIyIDUzLjEgMjJsMTUuMSAwLTk3LjEgOTcuMWMtMzAuMyAyOS41LTc5LjUgMjkuNS0xMDkuOCAwbC05Ny41LTk3LjQgOS4zIDBjMjAgMCAzOC45LTcuOCA1My4xLTIybDc2LjctNzYuN3ptMjAuMS03My42Yy02LjQgNS41LTE0LjYgNS42LTIwLjEgMGwtNzYuNy03Ni43Yy0xNC4yLTE1LjEtMzMuMS0yMi01My4xLTIybC05LjMgMCA5Ny40LTk3LjRjMzAuNC0zMC4zIDc5LjYtMzAuMyAxMDkuOSAwbDk3LjIgOTcuMS0xNS4yIDBjLTIwIDAtMzguOSA3LjgtNTMuMSAyMmwtNzcgNzd6TTExMi42IDE0Mi43YzEzLjggMCAyNi41IDUuNiAzNy4xIDE1LjRsNzYuNyA3Ni43YzcuMiA2LjMgMTYuNiAxMC44IDI2LjEgMTAuOCA5LjQgMCAxOC44LTQuNSAyNi0xMC44bDc3LTc3YzkuOC05LjcgMjMuMy0xNS4zIDM3LjEtMTUuM2wzNy43IDAgNTguMyA1OC4zYzMwLjMgMzAuMyAzMC4zIDc5LjUgMCAxMDkuOGwtNTguMyA1OC4zLTM3LjcgMGMtMTMuOCAwLTI3LjMtNS42LTM3LjEtMTUuNGwtNzctNzdjLTEzLjktMTMuOS0zOC4yLTEzLjktNTIuMSAuMWwtNzYuNyA3Ni42Yy0xMC42IDkuOC0yMy4zIDE1LjQtMzcuMSAxNS40bC0zMS44IDAtNTgtNThjLTMwLjMtMzAuMy0zMC4zLTc5LjUgMC0xMDkuOGw1OC01OC4xIDMxLjggMHoiXQogICAgfTsKICAgIGZhU3F1YXJlVHVtYmxyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS10dW1ibHIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidHVtYmxyLXNxdWFyZSJdLCAiZjE3NCIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTI1Ni44IDQxNmMtNzUuNSAwLTkxLjktNTUuNS05MS45LTg3LjlsMC05MC0yOS43IDBjLTMuNCAwLTYuMi0yLjgtNi4yLTYuMmwwLTQyLjVjMC00LjUgMi44LTguNSA3LjEtMTAgMzguOC0xMy43IDUwLjktNDcuNSA1Mi43LTczLjIgLjUtNi45IDQuMS0xMC4yIDEwLTEwLjJsNDQuMyAwYzMuNCAwIDYuMiAyLjggNi4yIDYuMmwwIDcyIDUxLjkgMGMzLjQgMCA2LjIgMi44IDYuMiA2LjJsMCA1MS4xYzAgMy40LTIuOCA2LjItNi4yIDYuMmwtNTIuMSAwIDAgODMuM2MwIDIxLjQgMTQuOCAzMy41IDQyLjUgMjIuNCAzLTEuMiA1LjYtMiA4LTEuNCAyLjIgLjUgMy42IDIuMSA0LjYgNC45TDMxOCAzODcuMWMxIDMuMiAyIDYuNy0uMyA5LjEtOC41IDkuMS0zMS4yIDE5LjgtNjAuOSAxOS44eiJdCiAgICB9OwogICAgZmFUdW1ibHJTcXVhcmUgPSBmYVNxdWFyZVR1bWJscjsKICAgIGZhUmVhY3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVhY3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQxYiIsICJNNDE4LjIgMTc3LjJjLTUuNC0xLjgtMTAuOC0zLjUtMTYuMi01LjEgLjktMy43IDEuNy03LjQgMi41LTExLjEgMTIuMy01OS42IDQuMi0xMDcuNS0yMy4xLTEyMy4zLTI2LjMtMTUuMS02OS4yIC42LTExMi42IDM4LjQtNC4zIDMuNy04LjUgNy42LTEyLjUgMTEuNS0yLjctMi42LTUuNS01LjItOC4zLTcuNy00NS41LTQwLjQtOTEuMS01Ny40LTExOC40LTQxLjUtMjYuMiAxNS4yLTM0IDYwLjMtMjMgMTE2LjcgMS4xIDUuNiAyLjMgMTEuMSAzLjcgMTYuNy02LjQgMS44LTEyLjcgMy44LTE4LjYgNS45LTUzLjQgMTguNS05MS43IDQ3LjctOTEuNyA3Ny45IDAgMzEuMiA0MC44IDYyLjUgOTYuMyA4MS41IDQuNSAxLjUgOSAzIDEzLjYgNC4zLTEuNSA2LTIuOCAxMS45LTQgMTgtMTAuNSA1NS41LTIuMyA5OS41IDIzLjkgMTE0LjYgMjcgMTUuNiA3Mi40LS40IDExNi42LTM5LjEgMy41LTMuMSA3LTYuMyAxMC41LTkuNyA0LjQgNC4zIDkgOC40IDEzLjYgMTIuNCA0Mi44IDM2LjggODUuMSA1MS43IDExMS4yIDM2LjYgMjctMTUuNiAzNS44LTYyLjkgMjQuNC0xMjAuNS0uOS00LjQtMS45LTguOS0zLTEzLjUgMy4yLS45IDYuMy0xLjkgOS40LTIuOSA1Ny43LTE5LjEgOTkuNS01MCA5OS41LTgxLjcgMC0zMC4zLTM5LjQtNTkuNy05My44LTc4LjR6TTI4Mi45IDkyLjNjMzcuMi0zMi40IDcxLjktNDUuMSA4Ny43LTM2IDE2LjkgOS43IDIzLjQgNDguOSAxMi44IDEwMC40LS43IDMuNC0xLjQgNi43LTIuMyAxMC0yMi4yLTUtNDQuNy04LjYtNjcuMy0xMC42LTEzLTE4LjYtMjcuMi0zNi40LTQyLjYtNTMuMSAzLjktMy43IDcuNy03LjIgMTEuNy0xMC43ek0xNjcuMiAzMDcuNWM1LjEgOC43IDEwLjMgMTcuNCAxNS44IDI1LjktMTUuNi0xLjctMzEuMS00LjItNDYuNC03LjUgNC40LTE0LjQgOS45LTI5LjMgMTYuMy00NC41IDQuNiA4LjggOS4zIDE3LjUgMTQuMyAyNi4xek0xMzYuOSAxODcuMmMxNC40LTMuMiAyOS43LTUuOCA0NS42LTcuOC01LjMgOC4zLTEwLjUgMTYuOC0xNS40IDI1LjQtNC45IDguNS05LjcgMTcuMi0xNC4yIDI2LTYuMy0xNC45LTExLjYtMjkuNS0xNi00My42em0yNy40IDY4LjljNi42LTEzLjggMTMuOC0yNy4zIDIxLjQtNDAuNnMxNS44LTI2LjIgMjQuNC0zOC45YzE1LTEuMSAzMC4zLTEuNyA0NS45LTEuN3MzMSAuNiA0NS45IDEuN2M4LjUgMTIuNiAxNi42IDI1LjUgMjQuMyAzOC43czE0LjkgMjYuNyAyMS43IDQwLjRjLTYuNyAxMy44LTEzLjkgMjcuNC0yMS42IDQwLjgtNy42IDEzLjMtMTUuNyAyNi4yLTI0LjIgMzktMTQuOSAxLjEtMzAuNCAxLjYtNDYuMSAxLjZzLTMwLjktLjUtNDUuNi0xLjRjLTguNy0xMi43LTE2LjktMjUuNy0yNC42LTM5cy0xNC44LTI2LjgtMjEuNS00MC42em0xODAuNiA1MS4yYzUuMS04LjggOS45LTE3LjcgMTQuNi0yNi43IDYuNCAxNC41IDEyIDI5LjIgMTYuOSA0NC4zLTE1LjUgMy41LTMxLjIgNi4yLTQ3IDggNS40LTguNCAxMC41LTE3IDE1LjUtMjUuNnptMTQuNC03Ni41Yy00LjctOC44LTkuNS0xNy42LTE0LjUtMjYuMi00LjktOC41LTEwLTE2LjktMTUuMy0yNS4yIDE2LjEgMiAzMS41IDQuNyA0NS45IDgtNC42IDE0LjgtMTAgMjkuMi0xNi4xIDQzLjR6TTI1Ni4yIDExOC4zYzEwLjUgMTEuNCAyMC40IDIzLjQgMjkuNiAzNS44LTE5LjgtLjktMzkuNy0uOS01OS41IDAgOS44LTEyLjkgMTkuOS0yNC45IDI5LjktMzUuOHpNMTQwLjIgNTdjMTYuOC05LjggNTQuMSA0LjIgOTMuNCAzOSAyLjUgMi4yIDUgNC42IDcuNiA3LTE1LjUgMTYuNy0yOS44IDM0LjUtNDIuOSA1My4xLTIyLjYgMi00NSA1LjUtNjcuMiAxMC40LTEuMy01LjEtMi40LTEwLjMtMy41LTE1LjUtOS40LTQ4LjQtMy4yLTg0LjkgMTIuNi05NHpNMTE1LjcgMzIwLjZjLTQuMi0xLjItOC4zLTIuNS0xMi40LTMuOS0yMS4zLTYuNy00NS41LTE3LjMtNjMtMzEuMi0xMC4xLTctMTYuOS0xNy44LTE4LjgtMjkuOSAwLTE4LjMgMzEuNi00MS43IDc3LjItNTcuNiA1LjctMiAxMS41LTMuOCAxNy4zLTUuNSA2LjggMjEuNyAxNSA0MyAyNC41IDYzLjYtOS42IDIwLjktMTcuOSA0Mi41LTI0LjggNjQuNXptMTE2LjYgOThjLTE2LjUgMTUuMS0zNS42IDI3LjEtNTYuNCAzNS4zLTExLjEgNS4zLTIzLjkgNS44LTM1LjMgMS4zLTE1LjktOS4yLTIyLjUtNDQuNS0xMy41LTkyIDEuMS01LjYgMi4zLTExLjIgMy43LTE2LjcgMjIuNCA0LjggNDUgOC4xIDY3LjkgOS44IDEzLjIgMTguNyAyNy43IDM2LjYgNDMuMiA1My40LTMuMiAzLjEtNi40IDYuMS05LjYgOC45em0yNC41LTI0LjNjLTEwLjItMTEtMjAuNC0yMy4yLTMwLjMtMzYuMyA5LjYgLjQgMTkuNSAuNiAyOS41IC42IDEwLjMgMCAyMC40LS4yIDMwLjQtLjctOS4yIDEyLjctMTkuMSAyNC44LTI5LjYgMzYuNHptMTMwLjcgMzBjLS45IDEyLjItNi45IDIzLjYtMTYuNSAzMS4zLTE1LjkgOS4yLTQ5LjgtMi44LTg2LjQtMzQuMi00LjItMy42LTguNC03LjUtMTIuNy0xMS41IDE1LjMtMTYuOSAyOS40LTM0LjggNDIuMi01My42IDIyLjktMS45IDQ1LjctNS40IDY4LjItMTAuNSAxIDQuMSAxLjkgOC4yIDIuNyAxMi4yIDQuOSAyMS42IDUuNyA0NC4xIDIuNSA2Ni4zem0xOC4yLTEwNy41Yy0yLjggLjktNS42IDEuOC04LjUgMi42LTctMjEuOC0xNS42LTQzLjEtMjUuNS02My44IDkuNi0yMC40IDE3LjctNDEuNCAyNC41LTYyLjkgNS4yIDEuNSAxMC4yIDMuMSAxNSA0LjcgNDYuNiAxNiA3OS4zIDM5LjggNzkuMyA1OCAwIDE5LjYtMzQuOSA0NC45LTg0LjggNjEuNHpNMjU2IDMwMS44YTQ1LjggNDUuOCAwIDEgMCAwLTkxLjYgNDUuOCA0NS44IDAgMSAwIDAgOTEuNnoiXQogICAgfTsKICAgIGZhSnhsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImp4bCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjdiIiwgIk00MTIuMiAzMkwzNS44IDMyQzE2IDMyIDAgNDggMCA2Ny44TDAgNDQ0LjJDMCA0NjQgMTYgNDgwIDM1LjggNDgwbDM3Ni40IDBjMTkuOCAwIDM1LjgtMTYgMzUuOC0zNS44bDAtMzc2LjRDNDQ4IDQ4IDQzMiAzMiA0MTIuMiAzMnpNMzc4LjYgMzMzLjdjMCA0MC4yLTMyLjYgNzIuOC03Mi44IDcyLjhsLTIzNS42IDBjMC00MC4yIDMyLjYtNzIuOCA3Mi44LTcyLjhsMjM1LjYgMHptMC0xMTMuOWMwIDQwLjItMzIuNiA3Mi44LTcyLjggNzIuOGwtMjM1LjYgMGMwLTQwLjIgMzIuNi03Mi44IDcyLjgtNzIuOGwyMzUuNiAwem0wLTExMy45YzAgNDAuMi0zMi42IDcyLjgtNzIuOCA3Mi44bC0yMzUuNiAwYzAtNDAuMiAzMi42LTcyLjggNzIuOC03Mi44bDIzNS42IDB6Il0KICAgIH07CiAgICBmYVNxdWFyZUxpbmtlZGluID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1saW5rZWRpbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlN2QwIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem01IDE3MC4ybDY2LjUgMCAwIDIxMy44LTY2LjUgMCAwLTIxMy44em03MS43LTY3LjdhMzguNSAzOC41IDAgMSAxIC03NyAwIDM4LjUgMzguNSAwIDEgMSA3NyAwek0zMTcuOSA0MTZsMC0xMDRjMC0yNC44LS41LTU2LjctMzQuNS01Ni43LTM0LjYgMC0zOS45IDI3LTM5LjkgNTQuOWwwIDEwNS44LTY2LjQgMCAwLTIxMy44IDYzLjcgMCAwIDI5LjIgLjkgMGM4LjktMTYuOCAzMC42LTM0LjUgNjIuOS0zNC41IDY3LjIgMCA3OS43IDQ0LjMgNzkuNyAxMDEuOWwwIDExNy4yLTY2LjQgMHoiXQogICAgfTsKICAgIGZhQ3NzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNzcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNmEyIiwgIk0zNzYuMyAzMkwwIDMyIDAgNDA4LjNjMCAxOSA3LjYgMzcuMiAyMSA1MC43czMxLjcgMjEgNTAuNyAyMWwzMDQuNiAwYzE5IDAgMzcuMi03LjYgNTAuNy0yMXMyMS0zMS43IDIxLTUwLjdsMC0zMDQuNmMwLTE5LTcuNi0zNy4yLTIxLTUwLjdzLTMxLjctMjEtNTAuNy0yMXpNMzMyLjQgNDMxLjRjLTcuNy04LjUtMTEuNy0yMC43LTEyLTM2LjZsMzEuMyAwYy4yIDE0LjEgNS4xIDIxLjEgMTQuOCAyMS4xYzQuOSAwIDguNC0xLjYgMTAuNS00LjdjMi0zLjEgMy04IDMtMTQuOGMwLTUuNC0xLjMtOS45LTQtMTMuNGMtMy41LTQuMi04LjEtNy41LTEzLjItOS41TDM1MS4yIDM2OGMtMTAuMy00LjktMTcuOC0xMC44LTIyLjUtMTcuNmMtNC41LTYuOC02LjctMTYuMy02LjctMjguNGMwLTEzLjYgNC0yNC42IDExLjgtMzMuMWM4LjEtOC41IDE5LjEtMTIuNyAzMy4yLTEyLjdjMTMuNiAwIDI0LjEgNC4yIDMxLjUgMTIuNWM3LjUgOC40IDExLjUgMjAuMyAxMS44IDM1LjlsLTMwLjEgMGMuMi01LjEtLjktMTAuMi0zLTE0LjhjLTEuNy0zLjQtNS01LjEtMTAtNS4xYy04LjggMC0xMy4yIDUuMi0xMy4yIDE1LjdjMCA1LjMgMS4xIDkuNCAzLjIgMTIuNmMzLjEgMy41IDcgNi4yIDExLjQgNy44bDExLjEgNC45YzExLjUgNS4zIDE5LjcgMTEuNyAyNC44IDE5LjRjNS4xIDcuNyA3LjYgMTggNy42IDMxYzAgMTUuNS00IDI3LjQtMTIuMyAzNS43Yy04LjIgOC4zLTE5LjUgMTIuNS0zNC4xIDEyLjVzLTI1LjYtNC4yLTMzLjQtMTIuN3ptLTEwMSAwYy03LjctOC41LTExLjctMjAuNy0xMi0zNi42bDMxLjMgMGMuMiAxNC4xIDUuMSAyMS4xIDE0LjggMjEuMWM0LjkgMCA4LjQtMS42IDEwLjQtNC43YzItMy4xIDMtOCAzLTE0LjhjMC01LjQtMS4zLTkuOS0zLjktMTMuNGMtMy41LTQuMi04LjEtNy41LTEzLjItOS41TDI1MC4yIDM2OGMtMTAuMy00LjktMTcuOC0xMC44LTIyLjUtMTcuNmMtNC41LTYuOC02LjctMTYuMy02LjctMjguNGMwLTEzLjYgNC0yNC42IDExLjgtMzMuMWM4LjEtOC41IDE5LjEtMTIuNyAzMy4yLTEyLjdjMTMuNiAwIDI0LjEgNC4yIDMxLjQgMTIuNWM3LjYgOC40IDExLjUgMjAuMyAxMS45IDM1LjlsLTMwLjEgMGMuMi01LjEtLjktMTAuMi0zLTE0LjhjLTEuNy0zLjQtNS01LjEtMTAtNS4xYy04LjggMC0xMy4yIDUuMi0xMy4yIDE1LjdjMCA1LjMgMS4xIDkuNCAzLjIgMTIuNmMzLjEgMy41IDcgNi4yIDExLjQgNy44bDExLjEgNC45YzExLjUgNS4zIDE5LjcgMTEuNyAyNC44IDE5LjRjNS4xIDcuNyA3LjYgMTggNy42IDMxYzAgMTUuNS00LjEgMjcuNC0xMi4zIDM1LjdzLTE5LjUgMTIuNS0zNC4xIDEyLjVzLTI1LjYtNC4yLTMzLjQtMTIuN3ptLTEwNS42IDEuMWMtOC40LTcuNy0xMi41LTE5LjItMTIuNS0zNC41bDAtNzUuNGMwLTE1LjIgNC40LTI2LjcgMTMuMi0zNC42YzguOS03LjggMjAuNy0xMS44IDM1LjItMTEuOGMxNC4xIDAgMjUuMiA0IDMzLjQgMTJjOC4zIDggMTIuNSAyMCAxMi41IDM1LjlsMCA2LTMzLjEgMCAwLTUuOGMwLTYuMS0xLjMtMTAuNy00LTEzLjZjLTEuMS0xLjUtMi42LTIuNy00LjMtMy41cy0zLjUtMS4yLTUuNC0xLjFjLTUuNCAwLTkuMiAxLjgtMTEuNCA1LjZjLTIuMyA1LjItMy4zIDEwLjgtMyAxNi40bDAgNjUuNWMwIDEzLjcgNC44IDIwLjYgMTQuNCAyMC44YzQuNSAwIDcuOS0xLjYgMTAuMi00LjhjMi41LTQuMSAzLjctOC44IDMuNS0xMy42bDAtNC45IDMzLjEgMCAwIDUuMWMwIDEwLjYtMi4xIDE5LjUtNi4yIDI2LjZjLTQgNi45LTkuOSAxMi41LTE3LjEgMTZjLTcuNyAzLjctMTYuMSA1LjUtMjQuNiA1LjNjLTE0LjIgMC0yNS41LTMuOS0zMy44LTExLjZ6Il0KICAgIH07CiAgICBmYUhhc2hub2RlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhhc2hub2RlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0OTkiLCAiTTM1LjcgMTcxLjFjLTQ2LjkgNDYtNDYuOSAxMjIuOSAwIDE2OS44TDE3MS42IDQ3Ni44YzQ2IDQ2LjkgMTIyLjkgNDYuOSAxNjkuOCAwTDQ3Ny4zIDM0MC45YzQ2LjktNDYuOSA0Ni45LTEyMy44IDAtMTY5LjhMMzQxLjQgMzUuMmMtNDYuOS00Ni45LTEyMy44LTQ2LjktMTY5LjggMEwzNS43IDE3MS4xek0xOTYgMTk2LjVhODQuNSA4NC41IDAgMSAxIDEyMCAxMTkgODQuNSA4NC41IDAgMSAxIC0xMjAtMTE5eiJdCiAgICB9OwogICAgZmFSZWRkaXRBbGllbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZWRkaXQtYWxpZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI4MSIsICJNMzczIDEzOC42Yy0yNS4yIDAtNDYuMy0xNy41LTUxLjktNDEtMzAuNiA0LjMtNTQuMiAzMC43LTU0LjIgNjIuNGwwIC4yYzQ3LjQgMS44IDkwLjYgMTUuMSAxMjQuOSAzNi4zIDEyLjYtOS43IDI4LjQtMTUuNSA0NS41LTE1LjUgNDEuMyAwIDc0LjcgMzMuNCA3NC43IDc0LjcgMCAyOS44LTE3LjQgNTUuNS00Mi43IDY3LjUtMi40IDg2LjgtOTcgMTU2LjYtMjEzLjIgMTU2LjZTNDUuNSA0MTAuMSA0MyAzMjMuNGMtMjUuNC0xMS45LTQzLTM3LjctNDMtNjcuNyAwLTQxLjMgMzMuNC03NC43IDc0LjctNzQuNyAxNy4yIDAgMzMgNS44IDQ1LjcgMTUuNiAzNC0yMS4xIDc2LjgtMzQuNCAxMjMuNy0zNi40bDAtLjNjMC00NC4zIDMzLjctODAuOSA3Ni44LTg1LjUgNC45LTI0LjIgMjYuMy00Mi40IDUyLjEtNDIuNCAyOS40IDAgNTMuMyAyMy45IDUzLjMgNTMuM3MtMjMuOSA1My4zLTUzLjMgNTMuM3pNMTU3LjUgMjU1LjNjLTIwLjkgMC0zOC45IDIwLjgtNDAuMiA0Ny45czE3LjEgMzguMSAzOCAzOC4xIDM2LjYtOS44IDM3LjgtMzYuOS0xNC43LTQ5LjEtMzUuNy00OS4xbC4xIDB6TTM5NSAzMDMuMWMtMS4yLTI3LjEtMTkuMi00Ny45LTQwLjItNDcuOXMtMzYuOSAyMi0zNS43IDQ5LjEgMTYuOSAzNi45IDM3LjggMzYuOSAzOS4zLTExIDM4LTM4LjFsLjEgMHptLTYwLjEgNzAuOGMxLjUtMy42LTEtNy43LTQuOS04LjEtMjMtMi4zLTQ3LjktMy42LTczLjgtMy42cy01MC44IDEuMy03My44IDMuNmMtMy45IC40LTYuNCA0LjUtNC45IDguMSAxMi45IDMwLjggNDMuMyA1Mi40IDc4LjcgNTIuNHM2NS44LTIxLjYgNzguNy01Mi40eiJdCiAgICB9OwogICAgZmFUaWt0b2sgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGlrdG9rIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwN2IiLCAiTTQ0OC41IDIwOS45Yy00NCAuMS04Ny0xMy42LTEyMi44LTM5LjJsMCAxNzguN2MwIDMzLjEtMTAuMSA2NS40LTI5IDkyLjZzLTQ1LjYgNDgtNzYuNiA1OS42LTY0LjggMTMuNS05Ni45IDUuMy02MC45LTI1LjktODIuNy01MC44LTM1LjMtNTYtMzktODguOSAyLjktNjYuMSAxOC42LTk1LjIgNDAtNTIuNyA2OS42LTY3LjcgNjIuOS0yMC41IDk1LjctMTZsMCA4OS45Yy0xNS00LjctMzEuMS00LjYtNDYgLjRzLTI3LjkgMTQuNi0zNyAyNy4zLTE0IDI4LjEtMTMuOSA0My45IDUuMiAzMSAxNC41IDQzLjcgMjIuNCAyMi4xIDM3LjQgMjYuOSAzMS4xIDQuOCA0Ni0uMSAyOC0xNC40IDM3LjItMjcuMSAxNC4yLTI4LjEgMTQuMi00My44bDAtMzQ5LjQgODggMGMtLjEgNy40IC42IDE0LjkgMS45IDIyLjIgMy4xIDE2LjMgOS40IDMxLjkgMTguNyA0NS43czIxLjMgMjUuNiAzNS4yIDM0LjZjMTkuOSAxMy4xIDQzLjIgMjAuMSA2NyAyMC4xbDAgODcuNHoiXQogICAgfTsKICAgIGZhV29yZHByZXNzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndvcmRwcmVzcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTlhIiwgIk02MS43IDE2OS40bDEwMS41IDI3OGMtNzEtMzQuNC0xMTkuOS0xMDcuMi0xMTkuOS0xOTEuNCAwLTMwLjkgNi42LTYwLjEgMTguNC04Ni42em0zMzcuOSA3NS45YzAtMjYuMy05LjQtNDQuNS0xNy41LTU4LjctMTAuOC0xNy41LTIwLjktMzIuNC0yMC45LTQ5LjkgMC0xOS42IDE0LjgtMzcuOCAzNS43LTM3LjggLjkgMCAxLjggLjEgMi44IC4yLTM3LjktMzQuNy04OC4zLTU1LjktMTQzLjctNTUuOS03NC4zIDAtMTM5LjcgMzguMS0xNzcuOCA5NS45IDUgLjIgOS43IC4zIDEzLjcgLjMgMjIuMiAwIDU2LjctMi43IDU2LjctMi43IDExLjUtLjcgMTIuOCAxNi4yIDEuNCAxNy41IDAgMC0xMS41IDEuMy0yNC4zIDJsNzcuNSAyMzAuNCA0Ni42LTEzOS42LTMzLjEtOTAuOGMtMTEuNS0uNy0yMi4zLTItMjIuMy0yLTExLjUtLjctMTAuMS0xOC4yIDEuMy0xNy41IDAgMCAzNS4xIDIuNyA1NiAyLjcgMjIuMiAwIDU2LjctMi43IDU2LjctMi43IDExLjUtLjcgMTIuOCAxNi4yIDEuNCAxNy41IDAgMC0xMS41IDEuMy0yNC4zIDJsNzYuOSAyMjguNyAyMS4yLTcwLjljOS0yOS40IDE2LTUwLjUgMTYtNjguN3pNMjU5LjcgMjc0LjZMMTk1LjkgNDYwLjFjMTkuMSA1LjYgMzkuMiA4LjcgNjAuMSA4LjcgMjQuOCAwIDQ4LjUtNC4zIDcwLjYtMTIuMS0uNi0uOS0xLjEtMS45LTEuNS0yLjlMMjU5LjcgMjc0LjZ6bTE4My0xMjAuN2MuOSA2LjggMS40IDE0IDEuNCAyMS45IDAgMjEuNi00IDQ1LjgtMTYuMiA3Ni4ybC02NSAxODcuOWM2My4zLTM2LjkgMTA1LjgtMTA1LjQgMTA1LjgtMTgzLjkgMC0zNy05LjQtNzEuOC0yNi0xMDIuMXpNOCAyNTZhMjQ4IDI0OCAwIDEgMSA0OTYgMCAyNDggMjQ4IDAgMSAxIC00OTYgMHptNDg0LjYgMGEyMzYuNiAyMzYuNiAwIDEgMCAtNDczLjIgMCAyMzYuNiAyMzYuNiAwIDEgMCA0NzMuMiAweiJdCiAgICB9OwogICAgZmFJZGVhbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJpZGVhbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDEzIiwgIk05My44IDE2NS41YTQ5LjEgNDkuMSAwIDEgMCAwIDk4LjEgNDkuMSA0OS4xIDAgMSAwIDAtOTguMXpNNTQuMyA0MjUuOGw3OC45IDAgMC0xNDAuNS03OC45IDAgMCAxNDAuNXpNMjA1LjggMjE0LjJjMC0yMC0xMC0yMi41LTE4LjctMjIuNWwtMTQgMCAwIDQ1LjggMTQgMGM5LjcgMCAxOC43LTIuOCAxOC43LTIzLjN6bTIwMS43IDQ2bDAtOTEuMyAyMi44IDAgMCA2OC42IDMzLjcgMEM0NTQuNiAxMTMuMSAzNTYuOCA4Ni4yIDI2Ny44IDg2LjJsLTk0LjggMCAwIDgyLjggMTQgMGMyNS42IDAgNDEuNSAxNy40IDQxLjUgNDUuMyAwIDI4LjgtMTUuNSA0Ni00MS41IDQ2bC0xNCAwIDAgMTY1LjYgOTQuOCAwYzE0NC42IDAgMTk0LjktNjcuMiAxOTYuNy0xNjUuNmwtNTcuMSAwem0tMTA5LjggMGwtNTYuMiAwIDAtOTEuMiA1NC40IDAgMCAyMi43LTMxLjcgMCAwIDEwLjYgMzAgMCAwIDIyLjctMzAgMCAwIDEyLjUgMzMuNSAwIDAgMjIuN3ptNzQuNyAwbC01LjItMTcuNy0yOS43IDAtNS4yIDE3LjctMjMuNyAwIDI3LjUtOTEuMyAzMi4zIDAgMjcuNSA5MS4zLTIzLjcgMHpNMjY3LjggMzJMLjEgMzIgLjEgNDgwIDI2Ny44IDQ4MGMxNjEuOCAwIDI1MS03OS43IDI1MS0yMjQuNSAwLTgzLjUtMzIuNi0yMjMuNS0yNTEtMjIzLjV6bTAgNDI2LjlsLTI0Ni42IDAgMC00MDUuOSAyNDYuNiAwYzE0Mi4xIDAgMjI5LjkgNjQuNiAyMjkuOSAyMDIuNCAwIDEzNC4xLTgxIDIwMy40LTIyOS45IDIwMy40em04My45LTI2NC45bC03LjUgMjUuOCAxNi40IDAtNy41LTI1LjgtMS40IDB6Il0KICAgIH07CiAgICBmYVBpZWRQaXBlclBwID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBpZWQtcGlwZXItcHAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFhNyIsICJNMjA1LjMgMTc0LjZjMCAyMS4xLTE0LjIgMzguMS0zMS43IDM4LjEtNy4xIDAtMTIuOC0xLjItMTcuMi0zLjdsMC02OGM0LjQtMi43IDEwLjEtNC4yIDE3LjItNC4yIDE3LjUgMCAzMS43IDE2LjkgMzEuNyAzNy44em01Mi42IDY3Yy03LjEgMC0xMi44IDEuNS0xNy4yIDQuMmwwIDY4YzQuNCAyLjUgMTAuMSAzLjcgMTcuMiAzLjcgMTcuNCAwIDMxLjctMTYuOSAzMS43LTM3LjggMC0yMS4xLTE0LjMtMzguMS0zMS43LTM4LjF6TTQ0OCA4MGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsMzUyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTE4NSAyNTUuMWM0MSAwIDc0LjItMzUuNiA3NC4yLTc5LjZTMjI2IDk1LjkgMTg1IDk1LjljLTEyIDAtMjQuMSAzLjItMzQuNiA4LjhsLTQ1LjcgMCAwIDIwNi4zIDUxLjgtMTAuMSAwLTUwLjZjOC42IDMuMSAxOC4xIDQuOCAyOC41IDQuOHptMTU4LjQgMjUuM2MwLTQ0LTMzLjItNzkuNi03My45LTc5LjYtMy4yIDAtNi40IC4yLTkuNiAuNy0zLjcgMTIuNS0xMC4xIDIzLjgtMTkuMiAzMy40LTEzLjggMTUtMzIuMiAyMy44LTUxLjggMjQuOGwwIDE1Ni4zIDUxLjgtMTAuMSAwLTUwLjZjOC42IDMuMiAxOC4yIDQuNyAyOC43IDQuNyA0MC44IDAgNzQtMzUuNiA3NC03OS42eiJdCiAgICB9OwogICAgZmFVc3N1bm5haCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1c3N1bm5haCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDA3IiwgIk00OTYuOSAyNjguMWMwIDYzLjktMjUuNCAxMjUuMi03MC42IDE3MC4zUzMxOS45IDUwOSAyNTYgNTA5IDEzMC44IDQ4My41IDg1LjcgNDM4LjQgMTUuMSAzMzEuOSAxNS4xIDI2OGMwLTYzLjkgMjUuNC0xMjUuMiA3MC42LTE3MC40UzE5Mi4yIDI3LjEgMjU2LjEgMjcuMSAzODEuMyA1Mi40IDQyNi41IDk3LjYgNDk3IDIwNC4xIDQ5NyAyNjhsLS4xIC4xek0zOS41IDI2OGMtLjYgMjguOCA0LjUgNTcuNSAxNS4xIDg0LjNzMjYuNCA1MS4yIDQ2LjYgNzEuOCA0NC4yIDM3IDcwLjggNDguMSA1NS4xIDE2LjkgODMuOSAxNi45IDU3LjQtNS44IDgzLjktMTYuOSA1MC42LTI3LjUgNzAuOC00OC4xIDM2LTQ1IDQ2LjYtNzEuOCAxNS43LTU1LjUgMTUuMS04NC4zYy42LTI4LjgtNC41LTU3LjUtMTUuMS04NC4zcy0yNi40LTUxLjItNDYuNi03MS44LTQ0LjItMzctNzAuOC00OC4xLTU1LjEtMTYuOS04My45LTE2LjktNTcuNCA1LjgtODMuOSAxNi45LTUwLjYgMjcuNS03MC44IDQ4LjEtMzYgNDUtNDYuNiA3MS44LTE1LjcgNTUuNS0xNS4xIDg0LjN6bTM4NS45IDYzLjNjLTEyLjcgMC0yMS42LTEuOS0yNi43LTUuOS01LjUtNC4zLTguMi0xMi4zLTguMi0yMy44bDAtOTYuNWMwLTYuNS01LjItMjAuMi0xNS43LTQxLjIgNyAwIDE3LTkuMSAzMC0yNy4ybDAgMTQ3LjhjMCAxMSAyLjQgMTkuNCA3IDI1LjMgMy43IDQuNyAxMC4xIDguOSAxOSAxMi42IDEuMiAuNCAyLjYgLjkgNC4xIDEuNCAyLjkgLjkgNi4zIDIuMSAxMC4zIDMuNS0xLjggMi43LTguMyA0LTE5LjkgNGwuMSAwem0tMjE5IDBjLTEuMyAyLjQtMy42IDUuNS02LjggOS40bC0xOC41IDIyLjVjLTEtNi4xLTQtMTMtOS4zLTIwLjZzLTkuNy0xMS40LTEzLjQtMTEuNGwtODkuOCAwYzMuMy01LjMgNC45LTguOCA0LjktMTAuOHMtLjgtNS4zLTIuNC05LjdjLTEuNS00LjQtMi40LTguNS0yLjQtMTIuNCAwLTcuNCAyLjEtMTMuOSA2LjMtMTkuM2wyMC0yNS42LTcuMS0xNy43IDE2LjEtMTkuOCA2LjcgMTYuOCA4LTEwLjNjLTEuOCA2LjQtMi42IDEyLjMtMi42IDE3LjcgMCA0LjIgMi44IDEzLjMgOC4zIDI3LjNsMTYuMiA0MC43IDE3LjcgMGMyLjggLjQgNy43IDUgMTQuNiAxMy45IDEuOCAyLjQgNC4zIDUuOCA3LjcgMTAuMiAxLjQgMS45IDIuOSAzLjkgNC42IDYuMSAxLjMtMi4zIDItNC42IDItNy4xIDAtMi0xLjMtNi42LTQtMTMuNEwxNzggMzA0LjFjLTQtMTAuNi02LjEtMTcuNy02LjEtMjEuMyAwLTYuMyAxLjktMTIuMyA1LjgtMTcuOSAuNS0uNiAxLTEuMyAxLjUtMS45IDQuNC01LjYgOC44LTExLjEgMTMuMy0xNi41LTEuMSA0LjYtMS43IDguNy0xLjcgMTIgMCAzLjcgMS43IDkuOSA1LjEgMTguOGw3LjkgMjAuNGMxLjkgNC43IDMgOC4yIDMuNyAxMC4zbDI1LjkgMC0uOS0yLjZjLTEuNC0zLjktNC03LTcuNy05LjNsMTUuNi0yMC4xIDEyLjMgMzIgMTMuNCAwLTYuMS0xNS44Yy0xLjUtMy45LTQtNy03LjctOS4zbDE1LjctMjAuMSAxNy4zIDQ1LjIgMTMuNCAwLTExLjQtMjkuNGMtMS41LTMuOS00LTctNy43LTkuM2wxNS42LTIwIDIyLjQgNTguNyAyNi4yIDBjMS41IDAgMy0xLjEgNC41LTMuMXMyLjItNC4xIDIuMi02LjNsMC05My41YzAtNi41LTQuNS0yMC4zLTEzLjctNDEuMiA1LjQgMCAxNC4xLTkuMSAyNi4yLTI3LjJsMCAxNjMuNWMwIDcuMiAuNiAxMiAxLjcgMTQuNiAxLjYgMy40IDUuMyA2LjIgMTEuMSA4LjItMy45IDUuNi04LjcgOC41LTE0LjUgOC41bC0xNTQuOCAwLS4xLS4yem0tOTgtNDRjLTIuNy02LjctNC0xMS43LTQtMTUtLjYgMS4yLTIuNCAzLjctNS40IDcuNi0xLjQgMS45LTIuMiAzLjctMi4yIDUuMyAwIDIuNiAuOCA1LjcgMi4yIDkuM2w1LjYgMTMuOWM1IDAgOSAwIDExLjktLjFsLTguMi0yMC45IC4xLS4xem0xMy41LTcyLjRjLTMtNS4yLTctOS4zLTExLjktMTEuOS0zLjUtMS45LTUuMy00LjMtNS4zLTcuNCAwLTIuNCA0LjYtOC42IDE0LTE4LjMgLjIgMy44IDEuOSA3LjYgNC45IDExLjIgMy4xIDMuNiA0LjYgNyA0LjYgMTAuMSAwIDIuNi0yLjEgOC02LjIgMTYuM2wtLjEgMHptLTI3LjYgMGMtMy01LjItNy05LjMtMTEuOS0xMS45LTMuNS0xLjktNS4zLTQuMy01LjMtNy40IDAtMi40IDQuNi04LjYgMTQtMTguMyAuMiAzLjggMS45IDcuNiA0LjkgMTEuMiAzLjEgMy42IDQuNiA3IDQuNiAxMC4xIDAgMi42LTIuMSA4LTYuMiAxNi4zbC0uMSAwem04NyAyNy41Yy0zLTUuMi03LTkuMy0xMS45LTExLjktMy41LTEuOS01LjMtNC4zLTUuMy03LjQgMC0yLjQgNC42LTguNiAxNC0xOC4zIC4yIDMuOCAxLjkgNy42IDQuOSAxMS4yIDMuMSAzLjYgNC42IDcgNC42IDEwLjEgMCAyLjYtMi4xIDgtNi4yIDE2LjNsLS4xIDB6Il0KICAgIH07CiAgICBmYUZvcnRBd2Vzb21lQWx0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZvcnQtYXdlc29tZS1hbHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNhMyIsICJNMjA4IDIzNy40bC0yMi4yIDBjLTIuMSAwLTMuNyAxLjYtMy43IDMuN2wwIDUxLjdjMCAyLjEgMS42IDMuNyAzLjcgMy43bDIyLjIgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC01MS43YzAtMi4xLTEuNi0zLjctMy43LTMuN3ptMTE4LjIgMGwtMjIuMiAwYy0yLjEgMC0zLjcgMS42LTMuNyAzLjdsMCA1MS43YzAgMi4xIDEuNiAzLjcgMy43IDMuN2wyMi4yIDBjMi4xIDAgMy43LTEuNiAzLjctMy43bDAtNTEuN2MtLjEtMi4xLTEuNy0zLjctMy43LTMuN3ptMTMyLTEyNS4xYy0yLjMtMy4yLTQuNi02LjQtNy4xLTkuNS05LjgtMTIuNS0yMC44LTI0LTMyLjgtMzQuNC00LjUtMy45LTkuMS03LjYtMTMuOS0xMS4yLTEuNi0xLjItMy4yLTIuMy00LjgtMy41LTI3LjYtMTkuNi01OS4zLTMzLjctOTMuNi00MC43LTE2LjItMy4zLTMyLjktNS01MC01cy0zMy45IDEuNy01MCA1Yy0zNC4zIDcuMS02NiAyMS4yLTkzLjMgNDAuOC0xLjYgMS4xLTMuMiAyLjMtNC44IDMuNS00LjggMy42LTkuNCA3LjMtMTMuOSAxMS4yLTMgMi42LTUuOSA1LjMtOC44IDhzLTUuNyA1LjUtOC40IDguNGMtNS41IDUuNy0xMC43IDExLjgtMTUuNiAxOC0yLjQgMy4xLTQuOCA2LjMtNy4xIDkuNS0yOC45IDQwLjYtNDUuOCA5MC4xLTQ1LjggMTQzLjYgMCAyIC4xIDQgLjEgNiAuMSAuNyAuMSAxLjMgLjEgMiAuMSAxLjMgLjEgMi43IC4yIDQgMCAuOCAuMSAxLjUgLjEgMi4zIDAgMS4zIC4xIDIuNSAuMiAzLjcgLjEgLjggLjEgMS42IC4yIDIuNCAuMSAxLjEgLjIgMi4zIC4zIDMuNSAwIC44IC4xIDEuNiAuMiAyLjQgLjEgMS4yIC4zIDIuNCAuNCAzLjYgLjEgLjggLjIgMS41IC4zIDIuMyAuMSAxLjMgLjMgMi42IC41IDMuOSAuMSAuNiAuMiAxLjMgLjMgMS45bC45IDUuN2MuMSAuNiAuMiAxLjEgLjMgMS43IC4zIDEuMyAuNSAyLjcgLjggNCAuMiAuOCAuMyAxLjYgLjUgMi40IC4yIDEgLjUgMi4xIC43IDMuMiAuMiAuOSAuNCAxLjcgLjYgMi42IC4yIDEgLjQgMiAuNyAzIC4yIC45IC41IDEuOCAuNyAyLjcgLjMgMSAuNSAxLjkgLjggMi45IC4zIC45IC41IDEuOCAuOCAyLjcgLjIgLjkgLjUgMS45IC44IDIuOHMuNSAxLjggLjggMi43Yy4zIDEgLjYgMS45IC45IDIuOCAuNiAxLjYgMS4xIDMuMyAxLjcgNC45IC40IDEgLjcgMS45IDEgMi44IC4zIDEgLjcgMiAxLjEgMyAuMyAuOCAuNiAxLjUgLjkgMi4zbDEuMiAzYy4zIC43IC42IDEuNSAuOSAyLjIgLjQgMSAuOSAyIDEuMyAzbC45IDIuMWMuNSAxIC45IDIgMS40IDMgLjMgLjcgLjYgMS4zIC45IDIgLjUgMSAxIDIuMSAxLjUgMy4xIC4yIC42IC41IDEuMSAuOCAxLjcgLjYgMS4xIDEuMSAyLjIgMS43IDMuMyAuMSAuMiAuMiAuMyAuMyAuNSAyLjIgNC4xIDQuNCA4LjIgNi44IDEyLjIgLjIgLjQgLjUgLjggLjcgMS4yIC43IDEuMSAxLjMgMi4yIDIgMy4zIC4zIC41IC42IC45IC45IDEuNCAuNiAxLjEgMS4zIDIuMSAyIDMuMiAuMyAuNSAuNiAuOSAuOSAxLjQgLjcgMS4xIDEuNCAyLjEgMi4xIDMuMiAuMiAuNCAuNSAuOCAuOCAxLjIgLjcgMS4xIDEuNSAyLjIgMi4zIDMuMyAuMiAuMiAuMyAuNSAuNSAuNyAzNy41IDUxLjcgOTQuNCA4OC41IDE2MCA5OS40IC45IC4xIDEuNyAuMyAyLjYgLjQgMSAuMiAyLjEgLjQgMy4xIC41czEuOSAuMyAyLjggLjRjMSAuMiAyIC4zIDMgLjQgLjkgLjEgMS45IC4yIDIuOSAuM3MxLjkgLjIgMi45IC4zIDIuMSAuMiAzLjEgLjNjLjkgLjEgMS44IC4xIDIuNyAuMiAxLjEgLjEgMi4zIC4xIDMuNCAuMiAuOCAwIDEuNyAuMSAyLjUgLjEgMS4zIDAgMi42IC4xIDMuOSAuMSAuNyAuMSAxLjQgLjEgMi4xIC4xIDIgLjEgNCAuMSA2IC4xczQtLjEgNi0uMWMuNyAwIDEuNC0uMSAyLjEtLjEgMS4zIDAgMi42IDAgMy45LS4xIC44IDAgMS43LS4xIDIuNS0uMSAxLjEtLjEgMi4zLS4xIDMuNC0uMiAuOSAwIDEuOC0uMSAyLjctLjIgMS0uMSAyLjEtLjIgMy4xLS4zczEuOS0uMiAyLjktLjNjLjktLjEgMS45LS4yIDIuOS0uM3MyLS4zIDMtLjQgMS45LS4zIDIuOC0uNGMxLS4yIDIuMS0uMyAzLjEtLjUgLjktLjEgMS43LS4zIDIuNi0uNCA2NS42LTExIDEyMi41LTQ3LjcgMTYwLjEtMTAyLjQgLjItLjIgLjMtLjUgLjUtLjcgLjgtMS4xIDEuNS0yLjIgMi4zLTMuMyAuMi0uNCAuNS0uOCAuOC0xLjIgLjctMS4xIDEuNC0yLjEgMi4xLTMuMiAuMy0uNSAuNi0uOSAuOS0xLjQgLjYtMS4xIDEuMy0yLjEgMi0zLjIgLjMtLjUgLjYtLjkgLjktMS40IC43LTEuMSAxLjMtMi4yIDItMy4zIC4yLS40IC41LS44IC43LTEuMiAyLjQtNCA0LjYtOC4xIDYuOC0xMi4yIC4xLS4yIC4yLS4zIC4zLS41IC42LTEuMSAxLjEtMi4yIDEuNy0zLjMgLjItLjYgLjUtMS4xIC44LTEuNyAuNS0xIDEtMi4xIDEuNS0zLjEgLjMtLjcgLjYtMS4zIC45LTIgLjUtMSAxLTIgMS40LTNsLjktMi4xYy41LTEgLjktMiAxLjMtMyAuMy0uNyAuNi0xLjUgLjktMi4ybDEuMi0zYy4zLS44IC42LTEuNSAuOS0yLjMgLjQtMSAuNy0yIDEuMS0zcy43LTEuOSAxLTIuOGMuNi0xLjYgMS4yLTMuMyAxLjctNC45IC4zLTEgLjYtMS45IC45LTIuOHMuNS0xLjggLjgtMi43Yy4yLS45IC41LTEuOSAuOC0yLjhzLjYtMS44IC44LTIuN2MuMy0xIC41LTEuOSAuOC0yLjkgLjItLjkgLjUtMS44IC43LTIuNyAuMi0xIC41LTIgLjctMyAuMi0uOSAuNC0xLjcgLjYtMi42IC4yLTEgLjUtMi4xIC43LTMuMiAuMi0uOCAuMy0xLjYgLjUtMi40IC4zLTEuMyAuNi0yLjcgLjgtNCAuMS0uNiAuMi0xLjEgLjMtMS43bC45LTUuN2MuMS0uNiAuMi0xLjMgLjMtMS45IC4xLTEuMyAuMy0yLjYgLjUtMy45IC4xLS44IC4yLTEuNSAuMy0yLjMgLjEtMS4yIC4zLTIuNCAuNC0zLjYgMC0uOCAuMS0xLjYgLjItMi40IC4xLTEuMSAuMi0yLjMgLjMtMy41IC4xLS44IC4xLTEuNiAuMi0yLjQgLjEgMS43IC4xIC41IC4yLS43IDAtLjggLjEtMS41IC4xLTIuMyAuMS0xLjMgLjItMi43IC4yLTQgLjEtLjcgLjEtMS4zIC4xLTIgLjEtMiAuMS00IC4xLTYgMC01My41LTE2LjktMTAzLTQ1LjgtMTQzLjd6TTQ0OCAzNzEuNWMtOS40IDE1LjUtMjAuNiAyOS45LTMzLjYgNDIuOS0yMC42IDIwLjYtNDQuNSAzNi43LTcxLjIgNDgtMTMuOSA1LjgtMjguMiAxMC4zLTQyLjkgMTMuMmwwLTc1LjhjMC01OC42LTg4LjYtNTguNi04OC42IDBsMCA3NS44Yy0xNC43LTIuOS0yOS03LjMtNDIuOS0xMy4yLTI2LjctMTEuMy01MC42LTI3LjQtNzEuMi00OC0xMy0xMy0yNC4yLTI3LjQtMzMuNi00Mi45bDAtNzEuM2MwLTIuMSAxLjYtMy43IDMuNy0zLjdsMjIuMSAwYzIuMSAwIDMuNyAxLjYgMy43IDMuN2wwIDI1LjggMjkuNiAwIDAtMTQ0YzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4xIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgMjUuOSAyOS41IDAgMC0yNS45YzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4yIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgMjUuOSAyOS41IDAgMC0yNS45YzAtNC44IDYuNS0zLjcgOS41LTMuN2wwLTkwLjJjLTQuNC0yLTcuNC02LjctNy40LTExLjUgMC0xNi44IDI1LjQtMTYuOCAyNS40IDAgMCA0LjgtMyA5LjQtNy40IDExLjVsMCAzLjljNi4zLTEuNCAxMi43LTIuMyAxOS4yLTIuMyA5LjQgMCAxOC40IDMuNSAyNi4zIDMuNSA3LjIgMCAxNS4yLTMuNSAxOS40LTMuNSAyLjEgMCAzLjcgMS42IDMuNyAzLjdsMCA0OC40YzAgNS42LTE4LjcgNi41LTIyLjQgNi41LTguNiAwLTE2LjYtMy41LTI1LjQtMy41LTcgMC0xNC4xIDEuMi0yMC44IDIuOGwwIDMwLjdjMyAwIDkuNS0xLjEgOS41IDMuN2wwIDI1LjkgMjkuNSAwIDAtMjUuOWMwLTIuMSAxLjYtMy43IDMuNy0zLjdsMjIuMiAwYzIuMSAwIDMuNyAxLjYgMy43IDMuN2wwIDI1LjkgMjkuNSAwIDAtMjUuOWMwLTIuMSAxLjYtMy43IDMuNy0zLjdsMjIuMSAwYzIuMSAwIDMuNyAxLjYgMy43IDMuN2wwIDE0NCAyOS41IDAgMC0yNS44YzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4yIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgNzEuM3oiXQogICAgfTsKICAgIGZhQnVyb21vYmVsZXhwZXJ0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJidXJvbW9iZWxleHBlcnRlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzN2YiLCAiTTAgMzJsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6TTEyMCAxNTJsLTExMiAwIDAtMTEyIDExMiAwIDAgMTEyek0xNjAgMzJsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6TTI4MCAxNTJsLTExMiAwIDAtMTEyIDExMiAwIDAgMTEyek0zMjAgMzJsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6TTQ0MCAxNTJsLTExMiAwIDAtMTEyIDExMiAwIDAgMTEyek0wIDE5MmwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNMTIwIDMxMmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6bTQwLTEyMGwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNMjgwIDMxMmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6bTQwLTEyMGwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNNDQwIDMxMmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6TTAgMzUybDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek0xMjAgNDcybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnptNDAtMTIwbDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek0yODAgNDcybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnptNDAtMTIwbDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAweiJdCiAgICB9OwogICAgZmFCaWxpYmlsaSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJiaWxpYmlsaSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlM2Q5IiwgIk00ODguNiAxMDQuMWMxNi43IDE4LjEgMjQuNCAzOS43IDIzLjMgNjUuN2wwIDIwMi40Yy0uNCAyNi40LTkuMiA0OC4xLTI2LjUgNjUuMS0xNy4yIDE3LTM5LjEgMjUuOS02NS41IDI2LjdMOTIgNDY0Yy0yNi40LS44LTQ4LjItOS44LTY1LjMtMjcuMi0xNy4xLTE3LjQtMjYtNDAuMy0yNi43LTY4LjZMMCAxNjkuOGMuOC0yNiA5LjctNDcuNiAyNi43LTY1LjcgMTcuMS0xNi4zIDM4LjgtMjUuMyA2NS4zLTI2LjFsMjkuNCAwLTI1LjQtMjUuOGMtNS43LTUuNy04LjYtMTMtOC42LTIxLjhzMi45LTE2LjEgOC42LTIxLjggMTMtOC42IDIxLjktOC42IDE2LjEgMi45IDIxLjkgOC42bDczLjMgNjkuNCA4OCAwIDc0LjUtNjkuNEMzODEuNyAyLjkgMzg5LjIgMCAzOTggMHMxNi4xIDIuOSAyMS45IDguNmM1LjcgNS43IDguNiAxMyA4LjYgMjEuOHMtMi45IDE2LjEtOC42IDIxLjhMMzk0LjYgNzggNDIzLjkgNzhjMjYuNCAuOCA0OCA5LjggNjQuNyAyNi4xem0tMzguOCA2OS43Yy0uNC05LjYtMy43LTE3LjQtMTAuNy0yMy41LTUuMi02LjEtMTQtOS40LTIyLjctOS44bC0zMjAuNCAwYy05LjYgLjQtMTcuNCAzLjctMjMuNiA5LjgtNi4xIDYuMS05LjQgMTMuOS05LjggMjMuNWwwIDE5NC40YzAgOS4yIDMuMyAxNyA5LjggMjMuNXMxNC40IDkuOCAyMy42IDkuOGwzMjAuNCAwYzkuMiAwIDE3LTMuMyAyMy4zLTkuOHM5LjctMTQuMyAxMC4xLTIzLjVsMC0xOTQuNHpNMTg1LjUgMjE2LjVjNi4zIDYuMyA5LjcgMTQuMSAxMC4xIDIzLjJsMCAzMy4zYy0uNCA5LjItMy43IDE2LjktOS44IDIzLjItNi4yIDYuMy0xNCA5LjUtMjMuNiA5LjVzLTE3LjUtMy4yLTIzLjYtOS41LTkuNC0xNC05LjgtMjMuMmwwLTMzLjNjLjQtOS4xIDMuOC0xNi45IDEwLjEtMjMuMnMxMy4yLTkuNiAyMy4zLTEwYzkuMiAuNCAxNyAzLjcgMjMuMyAxMHptMTkxLjUgMGM2LjMgNi4zIDkuNyAxNC4xIDEwLjEgMjMuMmwwIDMzLjNjLS40IDkuMi0zLjcgMTYuOS05LjggMjMuMnMtMTQgOS41LTIzLjYgOS41LTE3LjQtMy4yLTIzLjYtOS41Yy03LTYuMy05LjQtMTQtOS43LTIzLjJsMC0zMy4zYy4zLTkuMSAzLjctMTYuOSAxMC0yMy4yczE0LjEtOS42IDIzLjMtMTBjOS4yIC40IDE3IDMuNyAyMy4zIDEweiJdCiAgICB9OwogICAgZmFOZW9zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm5lb3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjYxMiIsICJNMzgzLjggNTEybC05NS4xIDAtMTA4LjItMTU0LjUgMCA5MS4xLTg2LjQgNjMuNC05Ny43IDAgMC00ODIuMiA0MC41LTI5LjggMTA4IDAgMTIzLjcgMTc2LjEgMC0xMTIuNyA4Ni40LTYzLjQgOTcuNyAwIDAgNDYxLjUtNjguOSA1MC41ek03LjIgMzUuM2wwIDQ2MC43IDcyLTUyLjkgMC0yNDkuMSAyMTUuNSAzMDcuNiA4NC44IDAgNTIuNC0zOC4yLTc4LjMgMC0zMTYuMS00NTAuNS0zMC4yIDIyLjN6TTg5LjcgNTAxLjlsODAtNTguOCAwLTEwMS03OS44LTExNC40IDAgMjIwLjktNzIuNiA1My4zIDcyLjMgMCAwIDB6TTQ5IDEwLjhsMzEwLjYgNDQyLjYgODIuNCAwIDAtNDQyLjYtNzkuOCAwIDAgMzE3LjYtMjIyLjktMzE3LjYtOTAuMyAwek0yNzkuNCAxOTEuNmw3MiAxMDIuOCAwLTI3OC41LTcyIDUzIDAgMTIyLjd6Il0KICAgIH07CiAgICBmYURldiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkZXYiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjZjYyIsICJNMTIwLjEgMjA4LjNjLTMuOS0yLjktNy44LTQuMy0xMS42LTQuM2wtMTcuNCAwIDAgMTA0LjUgMTcuNCAwYzMuOSAwIDcuOC0xLjQgMTEuNi00LjNzNS44LTcuMyA1LjgtMTMuMWwwLTY5LjdjMC01LjgtMi0xMC4yLTUuOC0xMy4xek00MDQuMSAzMkw0My45IDMyQzE5LjcgMzIgLjEgNTEuNiAwIDc1LjhMMCA0MzYuMkMuMSA0NjAuNCAxOS43IDQ4MCA0My45IDQ4MGwzNjAuMiAwYzI0LjIgMCA0My44LTE5LjYgNDMuOS00My44bDAtMzYwLjRDNDQ3LjkgNTEuNiA0MjguMyAzMiA0MDQuMSAzMnpNMTU0LjIgMjkxLjJjMCAxOC44LTExLjYgNDcuMy00OC40IDQ3LjNsLTQ2LjQgMCAwLTE2NS41IDQ3LjQgMGMzNS40IDAgNDcuNCAyOC41IDQ3LjQgNDcuM2wwIDcwLjl6bTEwMC43LTg4LjdsLTUzLjMgMCAwIDM4LjQgMzIuNiAwIDAgMjkuNi0zMi42IDAgMCAzOC40IDUzLjMgMCAwIDI5LjYtNjIuMiAwYy0xMS4yIC4zLTIwLjQtOC41LTIwLjctMTkuN2wwLTEyNS4xYy0uMy0xMS4xIDguNi0yMC40IDE5LjctMjAuN2w2My4yIDAgMCAyOS41ek0zNTguNSAzMTcuOGMtMTMuMiAzMC43LTM2LjggMjQuNi00Ny40IDBsLTM4LjUtMTQ0LjggMzIuNiAwIDI5LjcgMTEzLjcgMjkuNi0xMTMuNyAzMi42IDAtMzguNSAxNDQuOHoiXQogICAgfTsKICAgIGZhSG90amFyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhvdGphciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2IxIiwgIk0zNjEuOCAwYzAgMTMxLjYtODAuNyAxNzYuOC0xNDAuMiAyMDkuNC0uNiAuMy0xLjEgLjYtMS42IC45LTUzLjggMzAuMi04OC43IDQ5LjgtODkuNiAxMjJsLTk4LjEgMGMwLTEzMS41IDgwLjctMTc2LjcgMTQwLjItMjA5LjMgNTQuOC0yOS44IDkwLjMtNTAgOTAuMy0xMjNsOTkgMHpNMzAxLjMgMzAyLjZjNTQuOC0yOS44IDkwLjMtNTAgOTAuMy0xMjNsOTggMGMwIDEzMS42LTgwLjcgMTc2LjctMTQwLjIgMjA5LjQtNTQuOCAyOS44LTkwLjMgNTAtOTAuMyAxMjNsLTk4IDBjMC0xMzEuNiA4MC43LTE3Ni44IDE0MC4yLTIwOS40eiJdCiAgICB9OwogICAgZmFEb2NodWIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZG9jaHViIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzOTQiLCAiTTQxMy45IDE2MEwyNzIgMTYwIDI3MiAxOS42IDQxMy45IDE2MHpNMzIwIDE5MmwwIDEzMGMwIDY2LjgtMzYuNSAxMDAuMS0xMTMuMyAxMDAuMWwtOTQuNyAwIDAtMzM3LjMgOTQuNyAwYzEyIDAgMjMuMSAuOCAzMy4xIDIuNWwwLTg0QzIyOC45IDEuMSAyMTcuNCAwIDIwNS4yIDBMMTYgMCAxNiA1MTIgMjA1LjIgNTEyQzM0NS43IDUxMiA0MTYgNDQ3LjQgNDE2IDMxOC4xbDAtMTI2LjEtOTYgMHoiXQogICAgfTsKICAgIGZhVmltZW8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidmltZW8iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQwYSIsICJNNDAzLjIgMzJMNDQuOCAzMkMyMC4xIDMyIDAgNTIuMSAwIDc2LjhMMCA0MzUuMkMwIDQ1OS45IDIwLjEgNDgwIDQ0LjggNDgwbDM1OC40IDBjMjQuNyAwIDQ0LjgtMjAuMSA0NC44LTQ0LjhsMC0zNTguNEM0NDggNTIuMSA0MjcuOSAzMiA0MDMuMiAzMnpNMzc3IDE4MC44Yy0xLjQgMzEuNS0yMy40IDc0LjctNjYgMTI5LjQtNDQgNTcuMi04MS4zIDg1LjgtMTExLjcgODUuOC0xOC45IDAtMzQuOC0xNy40LTQ3LjktNTIuMy0yNS41LTkzLjMtMzYuNC0xNDgtNTcuNC0xNDgtMi40IDAtMTAuOSA1LjEtMjUuNCAxNS4yTDUzLjQgMTkxLjNjMzcuMy0zMi44IDcyLjktNjkuMiA5NS4yLTcxLjIgMjUuMi0yLjQgNDAuNyAxNC44IDQ2LjUgNTEuNyAyMC43IDEzMS4yIDI5LjkgMTUxIDY3LjYgOTEuNiAxMy41LTIxLjQgMjAuOC0zNy43IDIxLjgtNDguOSAzLjUtMzMuMi0yNS45LTMwLjktNDUuOC0yMi40IDE1LjktNTIuMSA0Ni4zLTc3LjQgOTEuMi03NiAzMy4zIC45IDQ5IDIyLjUgNDcuMSA2NC43eiJdCiAgICB9OwogICAgZmFNYXhjZG4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWF4Y2RuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxMzYiLCAiTTQ2MS4xIDQ0Mi43bC05Ny40IDAgNTEuOS0yNDIuN2MyLjMtMTAuMiAuOS0xOS41LTQuNC0yNS43LTUtNi4xLTEzLjctOS42LTI0LjItOS42bC00OS4zIDAtNTkuNSAyNzgtOTcuNCAwIDU5LjUtMjc4LTgzLjQgMC01OS41IDI3OC05Ny40IDAgNTkuNS0yNzgtNDQuNi05NS40IDM3Mi4xIDBjMzkuNCAwIDc1LjMgMTYuMyA5OC4zIDQ0LjkgMjMuMyAyOC42IDMxLjggNjcuNCAyMy42IDEwNS45TDQ2MS4xIDQ0Mi43eiJdCiAgICB9OwogICAgZmFTcXVhcmVGb250QXdlc29tZVN0cm9rZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZm9udC1hd2Vzb21lLXN0cm9rZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJmb250LWF3ZXNvbWUtYWx0Il0sICJmMzVjIiwgIk02NCA2NEM0Ni4zIDY0IDMyIDc4LjMgMzIgOTZsMCAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMjBjMC0xNy43LTE0LjMtMzItMzItMzJMNjQgNjR6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0xNTQgNThjMCA5LjMtNC44IDE3LjQtMTIuMSAyMmwxODguOSAwYzcuMyAwIDEzLjIgNS45IDEzLjIgMTMuMiAwIDEuOC0uNCAzLjctMS4xIDUuNEwzMTIgMjY0IDM0Mi45IDMzMy40Yy44IDEuNyAxLjEgMy41IDEuMSA1LjQgMCA3LjMtNS45IDEzLjItMTMuMiAxMy4ybC0xODYuOCAwIDAgMzItMzIgMCAwLTIwOS41Yy02LjEtNC44LTEwLTEyLjItMTAtMjAuNSAwLTE0LjQgMTEuNi0yNiAyNi0yNnMyNiAxMS42IDI2IDI2eiJdCiAgICB9OwogICAgZmFGb250QXdlc29tZUFsdCA9IGZhU3F1YXJlRm9udEF3ZXNvbWVTdHJva2U7CiAgICBmYVNwZWFrYXAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3BlYWthcCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2YzIiwgIk02NC40IDM5MS44Qy0xNSAzMDMuNi03LjYgMTY3LjQgODEuMSA4Ny42czIyNC44LTczIDMwNC4yIDE1LjIgNzIgMjI0LjQtMTYuNiAzMDQuMWMtMTguNyAxNi45IDY0IDQzLjEgNDIgNTIuMy04Mi4xIDM0LjItMjUzLjkgMzUtMzQ2LjItNjcuNWwwIDB6TTI3Ny43IDE4MC4ybDM4LjUtNDAuOWMtOS42LTguOS0zMi0yNi44LTc2LjItMjcuNi01Mi4zLS45LTk1LjkgMjguMy05Ni44IDgwLS4yIDExLjMgLjMgMzYuNyAyOS40IDU0LjggMzQuNSAyMS40IDg2LjUgMjEuNSA4NiA1Mi4zLS40IDIxLjMtMjYuNCAyNS44LTM4LjYgMjUuNi0zIDAtMzAuMi0uNS00Ny42LTI0LjZsLTQwIDQyLjZjMjguMiAyNyA1OSAzMi42IDgzLjUgMzMgMTAuMiAuMiA5Ni40IC4zIDk3LjgtODEgLjMtMTUuOC0yLjEtMzkuNy0yOC45LTU2LjYtMzQuNC0yMS42LTg1LTE5LjQtODQuNC00OS43IC40LTIzLjMgMzEtMjUuNCAzNy41LTI1LjMgLjQgMCAyNi42IC4zIDM5LjYgMTcuNGwwIDB6Il0KICAgIH07CiAgICBmYUZhbnRhc3lGbGlnaHRHYW1lcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmYW50YXN5LWZsaWdodC1nYW1lcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNmRjIiwgIk0yNTYgMzIuOUwzMi45IDI1NiAyNTYgNDc5LjEgNDc5LjEgMjU2IDI1NiAzMi45ek04OC4zIDI1NS44YzItMiAxMS45LTEyLjMgOTYuNS05Ny41IDQxLjQtNDEuOCA4Ni4yLTQzLjggMTE5LjgtMTguNyAyNC42IDE4LjQgNjIuMSA1OC45IDYyLjEgNTkgLjcgLjcgMS4xIDIuOSAuNiAzLjQtMTEuMyAxMS44LTIyLjcgMjMuNS0zMy41IDM0LjctMzQuMi0zMi4zLTQwLjUtMzguMi00OC41LTQ0LTE3LjgtMTIuNy00MS40LTEwLjEtNTcgNS4xLTIuMiAyLjEtMS44IDMuNCAuMSA1LjQgMi45IDIuOSAyOC4xIDI4LjMgMzUuMSAzNS44LTExLjkgMTEuNi0yMy43IDIzLTM1LjcgMzQuNy0xMi0xMi41LTI0LjUtMjUuNS0zNi41LTM4LjEtMjEuNCAyMS4xLTQxLjcgNDEuMS02MS44IDYxTDg4LjMgMjU1Ljh6TTMyMy4yIDM1Ny40Yy0zNS41IDM1LjQtNzguMSAzOC4xLTEwNyAyMC41LTIyLjEtMTMuNS0zOS40LTMyLjEtNzIuOS02Ni44IDEyLTEyLjQgMjMuOC0yNC40IDM1LjQtMzYuMyAzMyAzMS45IDM3LjEgMzYgNDQuNyA0Mi4xIDE4LjUgMTQuNyA0Mi41IDEzLjcgNTkuMy0xLjggMy43LTMuNCAzLjctMy42IC4xLTcuMi0xMC42LTEwLjctMjEuMi0yMS40LTMxLjgtMzIuMi0xLjMtMS4zLTMtMi41LS44LTQuNyAxMC44LTEwLjcgMjEuNS0yMS41IDMyLjItMzIuMyAuMy0uMyAuNi0uNCAxLjktMS4xIDEyLjQgMTIuOSAyNC45IDI1LjkgMzcuMiAzOC44IDIxLTIwLjcgNDEuMi00MC43IDYxLjMtNjAuNCAxMy43IDEzLjQgMjcuMSAyNi42IDQwLjkgNDAtMjAuMiAyMC45LTgxLjcgODIuNy0xMDAuNSAxMDEuNXpNMjU2IDBMMCAyNTYgMjU2IDUxMiA1MTIgMjU2IDI1NiAwek0xNiAyNTZMMjU2IDE2IDQ5NiAyNTYgMjU2IDQ5NiAxNiAyNTZ6Il0KICAgIH07CiAgICBmYUxpbnV4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxpbnV4IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxN2MiLCAiTTIyMC45IDEyMy4zYzEgLjUgMS44IDEuNyAzIDEuNyAxLjEgMCAyLjgtLjQgMi45LTEuNSAuMi0xLjQtMS45LTIuMy0zLjItMi45LTEuNy0uNy0zLjktMS01LjUtLjEtLjQgLjItLjggLjctLjYgMS4xIC4zIDEuMyAyLjMgMS4xIDMuNCAxLjd6TTE5OSAxMjVjMS4yIDAgMi0xLjIgMy0xLjcgMS4xLS42IDMuMS0uNCAzLjUtMS42IC4yLS40LS4yLS45LS42LTEuMS0xLjYtLjktMy44LS42LTUuNSAuMS0xLjMgLjYtMy40IDEuNS0zLjIgMi45IC4xIDEgMS44IDEuNSAyLjggMS40ek00MjAgNDAzLjhjLTMuNi00LTUuMy0xMS42LTcuMi0xOS43LTEuOC04LjEtMy45LTE2LjgtMTAuNS0yMi40LTEuMy0xLjEtMi42LTIuMS00LTIuOS0xLjMtLjgtMi43LTEuNS00LjEtMiA5LjItMjcuMyA1LjYtNTQuNS0zLjctNzkuMS0xMS40LTMwLjEtMzEuMy01Ni40LTQ2LjUtNzQuNC0xNy4xLTIxLjUtMzMuNy00MS45LTMzLjQtNzIgLjUtNDUuOSA1LjEtMTMxLjItNzUuOC0xMzEuMy0xMDIuNC0uMi03Ni44IDEwMy40LTc3LjkgMTM1LjItMS43IDIzLjQtNi40IDQxLjgtMjIuNSA2NC43LTE4LjkgMjIuNS00NS41IDU4LjgtNTguMSA5Ni43LTYgMTcuOS04LjggMzYuMS02LjIgNTMuMy02LjUgNS44LTExLjQgMTQuNy0xNi42IDIwLjItNC4yIDQuMy0xMC4zIDUuOS0xNyA4LjNzLTE0IDYtMTguNSAxNC41Yy0yLjEgMy45LTIuOCA4LjEtMi44IDEyLjQgMCAzLjkgLjYgNy45IDEuMiAxMS44IDEuMiA4LjEgMi41IDE1LjcgLjggMjAuOC01LjIgMTQuNC01LjkgMjQuNC0yLjIgMzEuNyAzLjggNy4zIDExLjQgMTAuNSAyMC4xIDEyLjMgMTcuMyAzLjYgNDAuOCAyLjcgNTkuMyAxMi41IDE5LjggMTAuNCAzOS45IDE0LjEgNTUuOSAxMC40IDExLjYtMi42IDIxLjEtOS42IDI1LjktMjAuMiAxMi41LS4xIDI2LjMtNS40IDQ4LjMtNi42IDE0LjktMS4yIDMzLjYgNS4zIDU1LjEgNC4xIC42IDIuMyAxLjQgNC42IDIuNSA2LjdsMCAuMWM4LjMgMTYuNyAyMy44IDI0LjMgNDAuMyAyMyAxNi42LTEuMyAzNC4xLTExIDQ4LjMtMjcuOSAxMy42LTE2LjQgMzYtMjMuMiA1MC45LTMyLjIgNy40LTQuNSAxMy40LTEwLjEgMTMuOS0xOC4zIC40LTguMi00LjQtMTcuMy0xNS41LTI5Ljd6TTIyMy44IDg3LjNjOS44LTIyLjIgMzQuMi0yMS44IDQ0LS40IDYuNSAxNC4yIDMuNiAzMC45LTQuMyA0MC40LTEuNi0uOC01LjktMi42LTEyLjYtNC45IDEuMS0xLjIgMy4xLTIuNyAzLjktNC42IDQuOC0xMS44LS4yLTI3LTkuMS0yNy4zLTcuMy0uNS0xMy45IDEwLjgtMTEuOCAyMy00LjEtMi05LjQtMy41LTEzLTQuNC0xLTYuOS0uMy0xNC42IDIuOS0yMS44ek0xODMuMSA3NS44YzEwLjEgMCAyMC44IDE0LjIgMTkuMSAzMy41LTMuNSAxLTcuMSAyLjUtMTAuMiA0LjYgMS4yLTguOS0zLjMtMjAuMS05LjYtMTkuNi04LjQgLjctOS44IDIxLjItMS44IDI4LjEgMSAuOCAxLjktLjItNS45IDUuNS0xNS42LTE0LjYtMTAuNS01Mi4xIDguNC01Mi4xem0tMTMuNiA2MC43YzYuMi00LjYgMTMuNi0xMCAxNC4xLTEwLjUgNC43LTQuNCAxMy41LTE0LjIgMjcuOS0xNC4yIDcuMSAwIDE1LjYgMi4zIDI1LjkgOC45IDYuMyA0LjEgMTEuMyA0LjQgMjIuNiA5LjMgOC40IDMuNSAxMy43IDkuNyAxMC41IDE4LjItMi42IDcuMS0xMSAxNC40LTIyLjcgMTguMS0xMS4xIDMuNi0xOS44IDE2LTM4LjIgMTQuOS0zLjktLjItNy0xLTkuNi0yLjEtOC0zLjUtMTIuMi0xMC40LTIwLTE1LTguNi00LjgtMTMuMi0xMC40LTE0LjctMTUuMy0xLjQtNC45IDAtOSA0LjItMTIuM3ptMy4zIDMzNGMtMi43IDM1LjEtNDMuOSAzNC40LTc1LjMgMTgtMjkuOS0xNS44LTY4LjYtNi41LTc2LjUtMjEuOS0yLjQtNC43LTIuNC0xMi43IDIuNi0yNi40bDAtLjJjMi40LTcuNiAuNi0xNi0uNi0yMy45LTEuMi03LjgtMS44LTE1IC45LTIwIDMuNS02LjcgOC41LTkuMSAxNC44LTExLjMgMTAuMy0zLjcgMTEuOC0zLjQgMTkuNi05LjkgNS41LTUuNyA5LjUtMTIuOSAxNC4zLTE4IDUuMS01LjUgMTAtOC4xIDE3LjctNi45IDguMSAxLjIgMTUuMSA2LjggMjEuOSAxNmwxOS42IDM1LjZjOS41IDE5LjkgNDMuMSA0OC40IDQxIDY4Ljl6bS0xLjQtMjUuOWMtNC4xLTYuNi05LjYtMTMuNi0xNC40LTE5LjYgNy4xIDAgMTQuMi0yLjIgMTYuNy04LjkgMi4zLTYuMiAwLTE0LjktNy40LTI0LjktMTMuNS0xOC4yLTM4LjMtMzIuNS0zOC4zLTMyLjUtMTMuNS04LjQtMjEuMS0xOC43LTI0LjYtMjkuOXMtMy0yMy4zLS4zLTM1LjJjNS4yLTIyLjkgMTguNi00NS4yIDI3LjItNTkuMiAyLjMtMS43IC44IDMuMi04LjcgMjAuOC04LjUgMTYuMS0yNC40IDUzLjMtMi42IDgyLjQgLjYtMjAuNyA1LjUtNDEuOCAxMy44LTYxLjUgMTItMjcuNCAzNy4zLTc0LjkgMzkuMy0xMTIuNyAxLjEgLjggNC42IDMuMiA2LjIgNC4xIDQuNiAyLjcgOC4xIDYuNyAxMi42IDEwLjMgMTIuNCAxMCAyOC41IDkuMiA0Mi40IDEuMiA2LjItMy41IDExLjItNy41IDE1LjktOSA5LjktMy4xIDE3LjgtOC42IDIyLjMtMTUgNy43IDMwLjQgMjUuNyA3NC4zIDM3LjIgOTUuNyA2LjEgMTEuNCAxOC4zIDM1LjUgMjMuNiA2NC42IDMuMy0uMSA3IC40IDEwLjkgMS40IDEzLjgtMzUuNy0xMS43LTc0LjItMjMuMy04NC45LTQuNy00LjYtNC45LTYuNi0yLjYtNi41IDEyLjYgMTEuMiAyOS4yIDMzLjcgMzUuMiA1OSAyLjggMTEuNiAzLjMgMjMuNyAuNCAzNS43IDE2LjQgNi44IDM1LjkgMTcuOSAzMC43IDM0LjgtMi4yLS4xLTMuMiAwLTQuMiAwIDMuMi0xMC4xLTMuOS0xNy42LTIyLjgtMjYuMS0xOS42LTguNi0zNi04LjYtMzguMyAxMi41LTEyLjEgNC4yLTE4LjMgMTQuNy0yMS40IDI3LjMtMi44IDExLjItMy42IDI0LjctNC40IDM5LjktLjUgNy43LTMuNiAxOC02LjggMjktMzIuMSAyMi45LTc2LjcgMzIuOS0xMTQuMyA3LjJ6bTI1Ny40LTExLjVjLS45IDE2LjgtNDEuMiAxOS45LTYzLjIgNDYuNS0xMy4yIDE1LjctMjkuNCAyNC40LTQzLjYgMjUuNXMtMjYuNS00LjgtMzMuNy0xOS4zYy00LjctMTEuMS0yLjQtMjMuMSAxLjEtMzYuMyAzLjctMTQuMiA5LjItMjguOCA5LjktNDAuNiAuOC0xNS4yIDEuNy0yOC41IDQuMi0zOC43IDIuNi0xMC4zIDYuNi0xNy4yIDEzLjctMjEuMSAuMy0uMiAuNy0uMyAxLS41IC44IDEzLjIgNy4zIDI2LjYgMTguOCAyOS41IDEyLjYgMy4zIDMwLjctNy41IDM4LjQtMTYuMyA5LS4zIDE1LjctLjkgMjIuNiA1LjEgOS45IDguNSA3LjEgMzAuMyAxNy4xIDQxLjYgMTAuNiAxMS42IDE0IDE5LjUgMTMuNyAyNC42ek0xNzMuNCAxNDguN2MyIDEuOSA0LjcgNC41IDggNy4xIDYuNiA1LjIgMTUuOCAxMC42IDI3LjMgMTAuNiAxMS42IDAgMjIuNS01LjkgMzEuOC0xMC44IDQuOS0yLjYgMTAuOS03IDE0LjgtMTAuNHM1LjktNi4zIDMuMS02LjYtMi42IDIuNi02IDUuMWMtNC40IDMuMi05LjcgNy40LTEzLjkgOS44LTcuNCA0LjItMTkuNSAxMC4yLTI5LjkgMTAuMnMtMTguNy00LjgtMjQuOS05LjdjLTMuMS0yLjUtNS43LTUtNy43LTYuOS0xLjUtMS40LTEuOS00LjYtNC4zLTQuOS0xLjQtLjEtMS44IDMuNyAxLjcgNi41eiJdCiAgICB9OwogICAgZmFDb3R0b25CdXJlYXUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY290dG9uLWJ1cmVhdSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmODllIiwgIk00NzQuMyAzMzAuNEM0NTAuNiA0MjIuMyAzODAuMSA0NzUgMjcyLjQgNDc4LjhsMC00OS4yYzAtNDggMjYuNC03NC40IDc0LjQtNzQuNCA2MiAwIDk5LjItMzcuMiA5OS4yLTk5LjIgMC02MS40LTM2LjUtOTguMy05Ny40LTk5LjEtMzMtNjkuMy0xNDYuNS02NC43LTE3Ny4yIDAtNjAuOSAuOC05Ny40IDM3LjctOTcuNCA5OS4xIDAgNjIuMSAzNy4zIDk5LjQgOTkuNCA5OS40IDQ4IDAgNzQuNiAyNi4yIDc0LjYgNzQuNGwwIDQ5LjJjLTEzNC40LTUtMjExLjEtODUuMS0yMTEuMS0yMjMgMC0xNDEuOCA4MS40LTIyMy4yIDIyMy4yLTIyMy4yIDExNC44IDAgMTg5LjggNTMuMiAyMTQuNyAxNDguOGwyNS4zIDBDNDczLjkgNzEuNSAzODguMiA4IDI1OS44IDggMTA1IDggMTIgMTAxLjIgMTIgMjU1LjggMTIgNDExLjEgMTA1LjIgNTA0LjMgMjU5LjggNTA0IDM4OC4xIDUwNCA0NzMuNyA0NDAuMiA0OTkuNSAzMzAuNGwtMjUuMiAwek0zNTcgMTgyLjNjNDEuNCAzLjQgNjQuMiAyOSA2NC4yIDczLjcgMCA0OC0yNi40IDc0LjQtNzQuNCA3NC40LTI4LjYgMC00OS4zLTkuNi02MS42LTI3LjMgODMuMS0xNi41IDc1LjYtOTkuNyA3MS44LTEyMC43em0tODEuNyA5Ny40Yy0yLjUtMTAuMy0xNi4zLTg3IDU2LjItOTcgMi4zIDEwLjEgMTYuNSA4Ny4xLTU2LjMgOTdsMCAwek0yNjAgMTMyYzI4LjYgMCA0OSA5LjcgNjEuNCAyNy42LTI4LjQgNS41LTQ5LjQgMjAuNi02MS42IDQzLjQtMTIuMi0yMi45LTMzLjItMzgtNjEuNi00My40IDEyLjQtMTcuNyAzMy4zLTI3LjQgNjEuNi0yNy40bC4yLS4zem0tNzEuNSA1MC43YzczLjIgMTAuNiA1OC45IDg2LjggNTYuNSA5Ny03Mi40LTkuOC01OS04Ny01Ni4yLTk3bC0uMiAwek0xNzMuMiAzMzAuNGMtNDggMC03NC40LTI2LjQtNzQuNC03NC40IDAtNDQuNCAyMi45LTcwIDY0LjItNzMuNy02LjggMzcuMi0xLjQgMTA2LjUgNzEuNiAxMjAuNy0xMi4xIDE3LjYtMzIuOCAyNy4zLTYxLjEgMjcuM2wtLjMgMHptNTMuMiAxMi40YzE0LjMtNy42IDI2LTE5LjMgMzMuNi0zMy41IDcuOCAxNC41IDE5LjMgMjUuNSAzMy44IDMzLjUtMTQuNCA3LjYtMjYuMSAxOS40LTMzLjYgMzMuOC04LTE0LjUtMTkuMS0yNi4yLTMzLjYtMzMuOGwtLjMgMHoiXQogICAgfTsKICAgIGZhR29vZ2xlV2FsbGV0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2dsZS13YWxsZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFlZSIsICJNMTU2LjggMTI2LjhjMzcuNiA2MC42IDY0LjIgMTEzLjEgODQuMyAxNjIuNS04LjMgMzMuOC0xOC44IDY2LjUtMzEuMyA5OC4zLTEzLjItNTIuMy0yNi41LTEwMS4zLTU2LTE0OC41IDYuNS0zNi40IDIuMy03My42IDMtMTEyLjN6TTEwOS4zIDIwMGwtOTMuMiAwYy02LjUgMC0xMC41IDcuNS02LjUgMTIuNyA0Mi4yIDU0LjMgNzEuNyAxMTcuOCA5MS43IDE4Ny4zbDEwMy41IDBjLTE2LjItNjkuNy0zOC43LTEzMy43LTgyLjUtMTkzLjUtMy00LTgtNi41LTEzLTYuNXptNDcuOC04OGM2OC41IDEwOCAxMzAgMjM0LjUgMTM4LjIgMzY4TDQwOSA0ODBjLTEyLTEzOC02OC40LTI2NS0xNDMuMi0zNjhsLTEwOC43IDB6TTQwOC45IDQzLjVjLTEuOC02LjgtOC4yLTExLjUtMTUuMi0xMS41bC04OC4zIDBjLTUuMyAwLTkgNS03LjggMTAuMyAxMy4yIDQ2LjUgMjIuMyA5NS41IDI2LjUgMTQ2IDQ4LjIgODYuMiA3OS43IDE3OC4zIDkwLjYgMjcwLjggMTUuOC02MC41IDI1LjMtMTMzLjUgMjUuMy0yMDMgMC03My42LTEyLjEtMTQ1LjEtMzEuMS0yMTIuNnoiXQogICAgfTsKICAgIGZhRm91cnNxdWFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmb3Vyc3F1YXJlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxODAiLCAiTTMzMS4xIDNMNTcuOSAzQzIwLjQgMyA4IDMxLjMgOCA0OS4xTDggNDgyLjljMCAyMC4zIDEyLjEgMjcuNyAxOC4yIDMwLjEgNi4yIDIuNSAyMi44IDQuNiAzMi45LTcuMSAxMjguOS0xNDkuNCAxMzEuMS0xNTEuOSAxMzEuMS0xNTEuOSAzLjEtMy40IDMuNC0zLjEgNi44LTMuMWw4My40IDBjMzUuMSAwIDQwLjYtMjUuMiA0NC4zLTM5LjdsNDguNi0yNDNDMzgxLjggMjUuOCAzNzEuMSAzIDMzMS4xIDN6TTMxNC44IDc2LjhsLTExLjQgNTkuN2MtMS4yIDYuNS05LjUgMTMuMi0xNi45IDEzLjJsLTEwNi40IDBjLTEyIDAtMjAuNiA4LjMtMjAuNiAyMC4zbDAgMTNjMCAxMiA4LjYgMjAuNiAyMC42IDIwLjZsOTAuNCAwYzguMyAwIDE2LjYgOS4yIDE0LjggMTguMi0xLjggOC45LTEwLjUgNTMuOC0xMS40IDU4LjgtLjkgNC45LTYuOCAxMy41LTE2LjkgMTMuNWwtNzMuNSAwYy0xMy41IDAtMTcuMiAxLjgtMjYuNSAxMi42IDAgMC04LjkgMTEuNC04OS41IDEwOC4zLS45IC45LTEuOCAuNi0xLjgtLjNsMC0zMzguOGMwLTcuNyA2LjgtMTYuNiAxNi42LTE2LjZsMjE5IDBjOC4yIDAgMTUuNiA3LjcgMTMuNSAxNy41eiJdCiAgICB9OwogICAgZmFTaGlydHNpbmJ1bGsgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2hpcnRzaW5idWxrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyMTQiLCAiTTEwMCA0MTAuM2wzMC42IDEzLjQgNC40LTkuOS0zMC42LTEzLjQtNC40IDkuOXptMzkuNCAxNy41bDMwLjYgMTMuNCA0LjQtOS45LTMwLjYtMTMuNC00LjQgOS45em0xNzIuMS0xNGw0LjQgOS45IDMwLjYtMTMuNC00LjQtOS45LTMwLjYgMTMuNHpNMTc5LjEgNDQ1bDMwLjMgMTMuNyA0LjQtOS45LTMwLjMtMTMuNC00LjQgOS42ek02MC40IDM5Mi44bDMwLjYgMTMuNCA0LjQtOS42LTMwLjYtMTMuNy00LjQgOS45em0yMTEuNCAzOC41bDQuNCA5LjkgMzAuNi0xMy40LTQuNC05LjktMzAuNiAxMy40em0tMzkuMyAxNy41bDQuNCA5LjkgMzAuNi0xMy43LTQuNC05LjYtMzAuNiAxMy40em0xMTguNC01Mi4ybDQuNCA5LjYgMzAuNi0xMy40LTQuNC05LjktMzAuNiAxMy43ek0xNzAgNDYuNmwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41em0tNDcuMiAwbC0zMy42IDAgMCAxMC41IDMzLjUgMCAuMS0xMC41em0tNDcuMyAwbC0zMy4yIDAgMCAxMC41IDMzLjMgMC0uMS0xMC41em0xNDEuNSAwbC0zMy4yIDAgMCAxMC41IDMzLjIgMCAwLTEwLjV6bTk0LjUgMGwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41em00Ny4zIDBsLTMzLjUgMCAwIDEwLjUgMzMuNSAwIDAtMTAuNXptLTk0LjYgMGwtMzMuMiAwIDAgMTAuNSAzMy4yIDAgMC0xMC41em0xNDEuNSAwbC0zMy4zIDAgMCAxMC41IDMzLjMgMCAwLTEwLjV6TTUyLjggMzUxLjFsLTEwLjggMCAwIDMzLjUgMTAuOCAwIDAtMzMuNXptNzAtMjE1LjlsLTMzLjYgMCAwIDEwLjUgMzMuNSAwIC4xLTEwLjV6bS03MCAxMC42bDIyLjggMCAwLTEwLjUtMzMuNiAwIDAgMzMuNSAxMC44IDAgMC0yM3pNMjIxLjcgMzc0LjRhOTEuMyA5MS4zIDAgMSAwIDAtMTgyLjYgOTEuMyA5MS4zIDAgMSAwIDAgMTgyLjZ6TTE3My41IDI2My4zYzAtMjUuNCAyOS41LTMxLjggNDkuNi0zMS44IDE2LjkgMCAyOS4yIDUuOCA0NC4zIDEybC04LjggMTYuOS0uOSAwYy02LjQtOS45LTI0LjgtMTMuMS0zNS42LTEzLjEtOSAwLTI5LjggMS44LTI5LjggMTQuOSAwIDIxLjYgNzguNS0xMC4yIDc4LjUgMzcuOSAwIDI1LjQtMzEuNSAzMS4yLTUxIDMxLjItMTguMSAwLTMyLjQtMi45LTQ3LjItMTIuMmw5LTE4LjQgLjkgMGM2LjEgMTIuMiAyMy42IDE0LjkgMzUuOSAxNC45IDguNyAwIDMyLjctMS4yIDMyLjctMTQuMyAwLTI2LjEtNzcuNiA2LjMtNzcuNi0zOHpNNTIuOCAxNzguNGwtMTAuOCAwIDAgMzMuNiAxMC44IDAgMC0zMy42ek0zOTUuMiAzODQuNmwxMC44IDAgMC0zMy41LTEwLjggMCAwIDMzLjV6TTUyLjggMzA3LjlsLTEwLjggMCAwIDMzLjUgMTAuOCAwIDAtMzMuNXpNMCAzLjdsMCA0MDYgMjIxLjcgOTguNiAyMjYuMy05OC42IDAtNDA2LTQ0OCAwek00MTguOCAzOTAuOGwtMTk2LjggODUuNy0xOTIuOC04NS43IDAtMjcwLjEgMzg5LjcgMCAwIDI3MC4xLS4xIDB6bTAtMjk5LjNsLTM4OS42IDAgMC01OC42IDM4OS43IDAgMCA1OC42LS4xIDB6TTUyLjggMjIxLjZsLTEwLjggMCAwIDMzLjUgMTAuOCAwIDAtMzMuNXptMCA0My4ybC0xMC44IDAgMCAzMy41IDEwLjggMCAwLTMzLjV6TTE3MCAxMzUuMmwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41ek0zOTUuMiAyOTguM2wxMC44IDAgMC0zMy41LTEwLjggMCAwIDMzLjV6bTAtNDMuMmwxMC44IDAgMC0zMy41LTEwLjggMCAwIDMzLjV6TTIxNyAxMzUuMmwtMzMuMiAwIDAgMTAuNSAzMy4yIDAgMC0xMC41ek0zOTUuMiAyMTJsMTAuOCAwIDAtMzMuNS0xMC44IDAgMCAzMy41em0wIDEyOS41bDEwLjggMCAwLTMzLjUtMTAuOCAwIDAgMzMuNXptLTEzMS0yMDYuM2wtMzMuMiAwIDAgMTAuNSAzMy4yIDAgMC0xMC41em00Ny4zIDBsLTMzLjUgMCAwIDEwLjUgMzMuNSAwIDAtMTAuNXptODMuNyAzMy42bDEwLjggMCAwLTMzLjUtMzMuNSAwIDAgMTAuNSAyMi44IDAtLjEgMjN6bS0zNi40LTMzLjZsLTMzLjUgMCAwIDEwLjUgMzMuNSAwIDAtMTAuNXoiXQogICAgfTsKICAgIGZhTWludGJpdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtaW50Yml0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU2MmYiLCAiTTczLjIgNTEybDAtNzMuMSAyOTIuNSAwIDAtNzMuMiA3My4yIDAgMC0xNDYuMyA3My4xIDAgMC0yMTkuNC0yMTkuNCAwIDAgNzMuMS0xNDYuMyAwIDAgNzMuMi03My4xIDAgMCAyOTIuNi03My4yIDAgMCA3My4xIDczLjIgMHptNzMuMS0yMTkuNGw3My4yIDAgMCA3My4xLTczLjIgMCAwLTczLjF6bTczLjItNzMuMWw3My4xIDAgMCA3My4xLTczLjIgMCAwLTczLjIgLjEgLjF6bTczLjEgMGwwLTczLjIgNzMuMiAwIDAgNzMuMS03My4yIDAgMCAuMXpNMzY1LjcgNzMuMWw3My4yIDAgMCA3My4yLTczLjIgMCAwLTczLjJ6Il0KICAgIH07CiAgICBmYVN0YXlsaW5rZWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RheWxpbmtlZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2Y1IiwgIk0zODYuNyAyOTIuNWwyLjcgMi43LTE3MC0xNjcuM2MtMy41LTMuNS05LjctMy43LTEzLjgtLjVMMTQ4LjMgMTcxYy00LjIgMy4yLTQuNiA4LjctMS4xIDEyLjJsNjguMSA2NC4zYzMuNiAzLjUgOS45IDMuNyAxNCAuNWwuMS0uMWM0LjEtMy4yIDEwLjQtMyAxNCAuNWw4NCA4MS4zYzMuNiAzLjUgMy4yIDktLjkgMTIuMmwtOTMuMiA3NGMtNC4yIDMuMy0xMC41IDMuMS0xNC4yLS40TDY3LjIgMjY4Yy0zLjUtMy41LTkuNy0zLjctMTMuOS0uNUw3LjUgMzAyLjRjLTQuMiAzLjItNC43IDguNy0xLjIgMTIuMkwyMTUgNTEwLjdzNy40IDYuOCAxNy4zLS44TDQzMC4zIDM0NmM0LTMuMiA0LjQtOC43IC43LTEyLjJsLTQ0LjMtNDEuM3ptNTQuNS04My40TDIzMC43IDIuNWMtMS41LTEuMi04LTUuNS0xNi4zIDEuMUw3LjYgMTY1LjdjLTQuMiAzLjItNC44IDguNy0xLjIgMTIuMmw0Mi4zIDQxLjcgMTcxLjcgMTY1LjFjMy43IDMuNSAxMC4xIDMuNyAxNC4zIC40bDUwLjItMzguOC0uMy0uMyA3LjctNmM0LjItMy4yIDQuNi04LjcgLjktMTIuMmwtNTcuMS01NC40Yy0zLjYtMy41LTEwLTMuNy0xNC4yLS41bC0uMSAuMWMtNC4yIDMuMi0xMC41IDMuMS0xNC4yLS40TDExMyAxODAuOGMtMy42LTMuNS0zLjEtOC45IDEuMS0xMi4ybDkyLjItNzEuNWM0LjEtMy4yIDEwLjMtMyAxMy45IC41bDE2MC40IDE1OWMzLjcgMy41IDEwIDMuNyAxNC4xIC41bDQ1LjgtMzUuOGM0LjEtMy4yIDQuNC04LjcgLjctMTIuMnoiXQogICAgfTsKICAgIGZhV2ViZmxvdyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3ZWJmbG93IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU2NWMiLCAiTTY0MCA2NGwtMjA0LjIgMzk5LjItMTkxLjggMCA4NS41LTE2NS41LTMuOCAwQzI1NS4xIDM4OS4zIDE0OS45IDQ0OS41IDAgNDYzLjJMMCAzMDAuMXM5NS45LTUuNyAxNTIuMy02NC45bC0xNTIuMyAwIDAtMTcxLjIgMTcxLjEgMCAwIDE0MC44IDMuOCAwIDcwLTE0MC44IDEyOS40IDAgMCAxMzkuOSAzLjggMCA3Mi42LTEzOS45IDE4OS4zIDB6Il0KICAgIH07CiAgICBmYVJlbnJlbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZW5yZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjE4YiIsICJNMjE0IDE2OS4xQzIxNCAyNzkuNSAxNTMgMzc0LjUgNjYuNCA0MTYuNSAzMCAzNzMuMiA4IDMxNy43IDggMjU2LjYgOCAxMzMuOSA5Ny4xIDMyLjIgMjE0IDEyLjVsMCAxNTYuNnpNMjU1IDUwNGMtNDIuOSAwLTgzLjMtMTEtMTE4LjUtMzAuNCA1Ny4yLTM2LjEgMTAzLjQtOTAuNyAxMTguNS0xNTQuNiAxNS41IDYzLjkgNjEuNyAxMTguNSAxMTguOCAxNTQuNy0zNS4xIDE5LjMtNzUuNSAzMC4zLTExOC44IDMwLjN6bTE5MC42LTg3LjVDMzU5IDM3NC41IDI5OCAyNzkuNiAyOTggMTY5LjFsMC0xNTYuNmMxMTYuOSAxOS43IDIwNiAxMjEuNCAyMDYgMjQ0LjEgMCA2MS4xLTIyIDExNi42LTU4LjQgMTU5Ljl6Il0KICAgIH07CiAgICBmYVJldiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZXYiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjViMiIsICJNMTU4LjcgMjc0LjlhNjUuNiA2NS42IDAgMSAxIDEzMS4yIDAgNjUuNiA2NS42IDAgMSAxIC0xMzEuMiAwem0yNzAuNy01LjFsLS4xIDBjLS43LTI5LjMtNy43LTU4LjItMjAuNS04NC42cy0zMS4yLTQ5LjctNTMuOC02OC40TDMwOS42IDE0M2MyMiAxNC4yIDQwLjEgMzMuOCA1Mi43IDU2LjhzMTkuMSA0OC44IDE5LjEgNzUuMWMwIDg2LjYtNzAuNSAxNTcuMS0xNTcuMSAxNTcuMVM2Ny4yIDM2MS41IDY3LjIgMjc0LjljMC04MS45IDYzLTE0OS4zIDE0My0xNTYuNGwwIDM5LjEgMTA4LjgtNjIuOC0xMDguOC02Mi44IDAgMzguM2MtMTA2LjcgNy4yLTE5MSA5Ni0xOTEgMjA0LjYgMCAxMTEuNiA4OS4xIDIwMi4zIDIwMC4xIDIwNWwwIC4xIDIxMC4yIDAgMC0yMTAuMnoiXQogICAgfTsKICAgIGZhS2V5Y2RuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImtleWNkbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2JhIiwgIk02My44IDQwOS4zbDYwLjUtNTljMzIuMSA0Mi44IDcxLjEgNjYgMTI2LjYgNjcuNCAzMC41IC43IDYwLjMtNyA4Ni40LTIyLjQgNS4xIDUuMyAxOC41IDE5LjUgMjAuOSAyMi0zMi4yIDIwLjctNjkuNiAzMS4xLTEwOC4xIDMwLjItNDMuMy0xLjEtODQuNi0xNi43LTExNy43LTQ0LjQgLjMtLjYtMzguMiAzNy41LTM4LjYgMzcuOSA5LjUgMjkuOC0xMy4xIDYyLjQtNDYuMyA2Mi40LTI2LjgtLjEtNDcuNS0yMS43LTQ3LjUtNDguNSAwLTM0LjMgMzMuMS01Ni42IDYzLjgtNDUuNnpNNDE4LjcgMTU2LjljMTkuMSAzMS4zIDI5LjYgNjcuNCAyOC43IDEwNC0xLjEgNDQuOC0xOSA4Ny41LTQ4LjYgMTIxIC4zIC4zIDIzLjggMjUuMiAyNC4xIDI1LjUgOS42LTEuMyAxOS4yIDIgMjUuOSA5LjEgMTEuMyAxMiAxMC45IDMwLjktMS4xIDQyLjQtMTIgMTEuMy0zMC45IDEwLjktNDIuNC0xLjEtNi43LTctOS40LTE2LjgtNy42LTI2LjMtMjQuOS0yNi42LTQ0LjQtNDcuMi00NC40LTQ3LjIgNDIuNy0zNC4xIDYzLjMtNzkuNiA2NC40LTEyNC4yIC43LTI4LjktNy4yLTU3LjItMjEuMS04Mi4ybDIyLjEtMjF6TTEwNCA1My4xYzYuNyA3IDkuNCAxNi44IDcuNiAyNi4zbDQ1LjkgNDguMWMtNC43IDMuOC0xMy4zIDEwLjQtMjIuOCAyMS4zLTI1LjQgMjguNS0zOS42IDY0LjgtNDAuNyAxMDIuOS0uNyAyOC45IDYuMSA1Ny4yIDIwIDgyLjRMOTIgMzU1LjZjLTE5LjMtMzEuNi0yOC45LTY3LjctMjcuOC0xMDQuNyAxLTQ0LjYgMTguMy04Ny42IDQ3LjUtMTIxLjFMODYuNCAxMDMuNGMtOS42IDEuMy0xOS4yLTItMjUuOS05LjEtMTEuMy0xMi0xMC45LTMwLjkgMS4xLTQyLjQgMTEuOS0xMS4yIDMwLjYtMTAuOSA0Mi40IDEuMnpNNDY0LjkgOGMyNiAwIDQ3LjEgMjIuNCA0Ny4xIDQ4LjNTNDkwLjkgMTA0IDQ2NC45IDEwNGMtNi4zIC4xLTE0LTEuMS0xNS45LTEuOGwtNjIuOSA1OS43Yy0zMi43LTQzLjYtNzYuNy02NS45LTEyNi45LTY3LjItMzAuNS0uNy02MC4zIDYuOC04Ni4yIDIyLjRsLTIxLjEtMjJDMTg0LjEgNzQuMyAyMjEuNSA2NCAyNjAgNjQuOSAzMDMuMyA2NiAzNDQuNiA4MS42IDM3Ny43IDEwOS41bDQxLjEtMzguNmMtMS41LTQuNy0yLjItOS42LTIuMi0xNC41LS4xLTI2LjcgMjIuMy00OC40IDQ4LjMtNDguNHpNMjU2LjcgMTEzLjRjNS41IDAgMTAuOSAuNCAxNi40IDEuMSA3OC4xIDkuOCAxMzMuNCA4MS4xIDEyMy44IDE1OS4xLTkuOCA3OC4xLTgxLjEgMTMzLjQtMTU5LjEgMTIzLjgtNzguMS05LjgtMTMzLjQtODEuMS0xMjMuOC0xNTkuMiA5LjMtNzIuNCA3MC4xLTEyNC42IDE0Mi43LTEyNC44em0tNTkgMTE5LjRjLjYgMjIuNyAxMi4yIDQxLjggMzIuNCA1Mi4ybC0xMSA1MS43IDczLjcgMC0xMS01MS43YzIwLjEtMTAuOSAzMi4xLTI5IDMyLjQtNTIuMi0uNC0zMi44LTI1LjgtNTcuNS01OC4zLTU4LjMtMzIuMSAuOC01Ny4zIDI0LjgtNTguMiA1OC4zeiJdCiAgICB9OwogICAgZmFIaXJlQUhlbHBlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJoaXJlLWEtaGVscGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzYjAiLCAiTTQ0My4xIDBMNzEuOSAwQzY3LjkgMzcuMyAzNy40IDY3LjggMCA3MS43TDAgNDQzLjJjMzcuNCA0LjkgNjYgMzIuNCA3MS45IDY4LjhsMzcyLjIgMGMzLTM2LjQgMzIuNS02NS44IDY3LjktNjkuOGwwLTM3MC41QzQ3NS42IDY1LjggNDQ3IDM2LjQgNDQzLjEgMHptLTM3IDQwNC45Yy0zNi4zIDAtMTguOC0yLTU1LjEtMi0zNS44IDAtMjEgMi01Ni4xIDItNS45IDAtNC45LTguMiAwLTkuOCAyMi44LTcuNiAyMi45LTEwLjIgMjQuNi0xMi44IDEwLjQtMTUuNiA1LjktODMgNS45LTExMyAwLTUuMy02LjQtMTIuOC0xMy44LTEyLjhsLTExMS4yIDBjLTcuNCAwLTEzLjggNy41LTEzLjggMTIuOCAwIDMwLTQuNSA5Ny40IDUuOSAxMTMgMS43IDIuNSAxLjggNS4yIDI0LjYgMTIuOCA0LjkgMS42IDYgOS44IDAgOS44LTM1LjEgMC0yMC4zLTItNTYuMS0yLTM2LjMgMC0xOC44IDItNTUuMSAyLTcuOSAwLTUuOC0xMC44IDAtMTAuOCAxMC4yLTMuNCAxMy41LTMuNSAyMS43LTEzLjggNy43LTEyLjkgNy45LTQ0LjQgNy45LTEyNy44bDAtMTAxLjJjMC0yMi4yLTEyLjItMjguMy0yOC42LTMyLjQtOC44LTIuMi00LTExLjggMS0xMS44IDM2LjUgMCAyMC42IDIgNTcuMSAyIDMyLjcgMCAxNi41LTIgNDkuMi0yIDMuMyAwIDguNSA4LjMgMSAxMC44LTQuOSAxLjYtMjcuNiAzLjctMjcuNiAzOS4zIDAgNDUuNi0uMiA1NS44IDEgNjguOCAwIDEuMyAyLjMgMTIuOCAxMi44IDEyLjhsMTA5LjIgMGMxMC41IDAgMTIuOC0xMS41IDEyLjgtMTIuOCAxLjItMTMgMS0yMy4yIDEtNjguOCAwLTM1LjYtMjIuNy0zNy43LTI3LjYtMzkuMy03LjUtMi41LTIuMy0xMC44IDEtMTAuOCAzMi43IDAgMTYuNSAyIDQ5LjIgMiAzNi41IDAgMjAuNi0yIDU3LjEtMiA0LjkgMCA5LjkgOS42IDEgMTEuOC0xNi40IDQuMS0yOC42IDEwLjMtMjguNiAzMi40bDAgMTAxLjJjMCA4My40IC4xIDExNC45IDcuOSAxMjcuOCA4LjIgMTAuMiAxMS40IDEwLjQgMjEuNyAxMy44IDUuOCAwIDcuOCAxMC44IDAgMTAuOHoiXQogICAgfTsKICAgIGZhU3F1YXJlSGFja2VyTmV3cyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtaGFja2VyLW5ld3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiaGFja2VyLW5ld3Mtc3F1YXJlIl0sICJmM2FmIiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMjEgMjI5LjJzLjEtLjEgLjEtLjIgLjEtLjIgLjItLjJjMCAuMSAwIC4zLS4xIC40bC0uMiAwek0yMzkuMiAzODRsLTMxLjQgMCAwLTEwMi43LTc5LjgtMTUzLjMgMzcuMyAwYzQxLjUgNzcuNyA0OC4xIDk1LjggNTQuMSAxMTIgMS42IDQuMyAzLjEgOC41IDUuMiAxMy42IDMuMi03IDUuMS0xMS45IDcuMS0xNy4zIDUuOS0xNS4zIDEyLjgtMzMuMiA1My41LTEwOC4zbDM0LjggMC04MC44IDE1NS4xIDAgMTAwLjl6Il0KICAgIH07CiAgICBmYUhhY2tlck5ld3NTcXVhcmUgPSBmYVNxdWFyZUhhY2tlck5ld3M7CiAgICBmYUNyZWF0aXZlQ29tbW9uc1BkQWx0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtcGQtYWx0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZWQiLCAiTTI1NS42IDhDMTEyLjcgOCA4IDEyMy4xIDggMjU2IDggMzk0LjUgMTIxLjYgNTA0IDI1NS42IDUwNCAzODUuNSA1MDQgNTA0IDQwMy4xIDUwNCAyNTYgNTA0IDExOC4xIDM5Ny40IDggMjU1LjYgOHptLjggNDUwLjhjLTExMi41IDAtMjAzLjctOTMtMjAzLjctMjAyLjggMC0xMDUuNCA4NS41LTIwMy4zIDIwMy43LTIwMy4zIDExMi42IDAgMjAyLjkgODkuNSAyMDIuOCAyMDMuMyAwIDEyMS43LTk5LjYgMjAyLjgtMjAyLjggMjAyLjh6TTMyNC43IDE4NmwtNTMuMiAwIDAgMTM3LjIgNTMuMiAwYzIxLjQgMCA3MC01LjEgNzAtNjguNiAwLTYzLjQtNDguNi02OC42LTcwLTY4LjZ6bS44IDEwOC41bC0xOS45IDAgMC03OS43IDE5LjQtLjFjMy44IDAgMzUtMi4xIDM1IDM5LjkgMCAyNC42LTEwLjUgMzkuOS0zNC41IDM5Ljl6TTIxMS43IDE4NmwtNjguMiAwIDAgMTM3LjMgMzQuNiAwIDAtNDQuMyAyNyAwYzU0LjEgMCA1Ny4xLTM3LjUgNTcuMS00Ni41IDAtMzEtMTYuOC00Ni41LTUwLjUtNDYuNXptLTQuOSA2Ny4zbC0yOS4yIDAgMC00MS42IDI4LjMgMGMzMC45IDAgMjguOCA0MS42IC45IDQxLjZ6Il0KICAgIH07CiAgICBmYU9yY2lkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm9yY2lkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4ZDIiLCAiTTI5NC43IDE4OC4ybC00NS45IDAgMCAxNTMuOCA0Ny41IDBjNjcuNiAwIDgzLjEtNTEuMyA4My4xLTc2LjkgMC00MS42LTI2LjUtNzYuOS04NC43LTc2Ljl6TTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMTc1LjIgMzY4LjhsLTI5LjggMCAwLTIwNy41IDI5LjggMCAwIDIwNy41ek0xNjAuMyA5OC41YTE5LjYgMTkuNiAwIDEgMSAwIDM5LjIgMTkuNiAxOS42IDAgMSAxIDAtMzkuMnpNMzAwIDM2OWwtODEgMCAwLTIwNy43IDgwLjYgMGM3Ni43IDAgMTEwLjQgNTQuOCAxMTAuNCAxMDMuOSAwIDUzLjMtNDEuNyAxMDMuOS0xMTAgMTAzLjl6Il0KICAgIH07CiAgICBmYUJlaGFuY2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmVoYW5jZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWI0IiwgIk0yMzIgMjM3LjJjMzEuOC0xNS4yIDQ4LjQtMzguMiA0OC40LTc0IDAtNzAuNi01Mi42LTg3LjgtMTEzLjMtODcuOGwtMTY3LjEgMCAwIDM1NC40IDE3MS44IDBjNjQuNCAwIDEyNC45LTMwLjkgMTI0LjktMTAyLjkgMC00NC41LTIxLjEtNzcuNC02NC43LTg5Ljd6TTc3LjkgMTM1LjlsNzMuMSAwYzI4LjEgMCA1My40IDcuOSA1My40IDQwLjUgMCAzMC4xLTE5LjcgNDIuMi00Ny41IDQyLjJsLTc5IDAgMC04Mi43em04My4zIDIzMy43bC04My4zIDAgMC05Ny42IDg0LjkgMGMzNC4zIDAgNTYgMTQuMyA1NiA1MC42IDAgMzUuOC0yNS45IDQ3LTU3LjYgNDd6TTUxOS43IDEyOC45bC0xNDMuNyAwIDAtMzQuOSAxNDMuNyAwIDAgMzQuOXpNNTc2IDMwNS4yYzAtNzUuOS00NC40LTEzOS4yLTEyNC45LTEzOS4yLTc4LjIgMC0xMzEuMyA1OC44LTEzMS4zIDEzNS44IDAgNzkuOSA1MC4zIDEzNC43IDEzMS4zIDEzNC43IDYxLjMgMCAxMDEtMjcuNiAxMjAuMS04Ni4zbC02Mi4yIDBjLTYuNyAyMS45LTM0LjMgMzMuNS01NS43IDMzLjUtNDEuMyAwLTYzLTI0LjItNjMtNjUuM2wxODUuMSAwYy4zLTQuMiAuNi04LjcgLjYtMTMuMnpNMzkwLjQgMjc0YzIuMy0zMy43IDI0LjctNTQuOCA1OC41LTU0LjggMzUuNCAwIDUzLjIgMjAuOCA1Ni4yIDU0LjhsLTExNC43IDB6Il0KICAgIH07CiAgICBmYU1vbmVybyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtb25lcm8iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNkMCIsICJNMzYwIDM4NGwxMDguNCAwQzQyNSA0NTUuOSAzNDYuMSA1MDQgMjU2IDUwNFM4NyA0NTUuOSA0My42IDM4NGwxMDguNCAwIDAtMTI3LjggMTA0IDEwNC44IDEwNC0xMDUgMCAxMjh6TTk2IDMzNmwwLTIwOCAxNTkuNCAxNTkuNCAxNjAuNi0xNTkuNCAwIDIwOCA3NC44IDBjOC41LTI1LjEgMTMuMi01MiAxMy4yLTgwIDAtMTM3LTExMS0yNDgtMjQ4LTI0OFM4IDExOSA4IDI1NmMwIDI4IDQuNiA1NC45IDEzLjIgODBMOTYgMzM2eiJdCiAgICB9OwogICAgZmFGaWdtYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmaWdtYSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNzk5IiwgIk0xNCA5NS44QzE0IDQyLjkgNTYuOSAwIDEwOS44IDBMMjc0LjIgMGM1Mi45IDAgOTUuOCA0Mi45IDk1LjggOTUuOCAwIDMzLjUtMTcuMiA2My00My4yIDgwLjEgMjYgMTcuMSA0My4yIDQ2LjYgNDMuMiA4MC4xIDAgNTIuOS00Mi45IDk1LjgtOTUuOCA5NS44bC0yLjEgMGMtMjQuOCAwLTQ3LjQtOS40LTY0LjQtMjQuOWwwIDg4LjNjMCA1My42LTQ0IDk2LjgtOTcuNCA5Ni44LTUyLjggMC05Ni4zLTQyLjgtOTYuMy05NS44IDAtMzMuNSAxNy4yLTYzIDQzLjItODAuMS0yNi0xNy4xLTQzLjItNDYuNi00My4yLTgwLjFzMTcuMi02MyA0My4yLTgwLjFDMzEuMiAxNTguOCAxNCAxMjkuMyAxNCA5NS44em0xNjIuMyA5NS44bC02Ni41IDBjLTM1LjYgMC02NC40IDI4LjgtNjQuNCA2NC40IDAgMzUuNCAyOC42IDY0LjIgNjQgNjQuNGw2Ni45IDAgMC0xMjguOHpNMjA3LjcgMjU2YzAgMzUuNiAyOC44IDY0LjQgNjQuNCA2NC40bDIuMSAwYzM1LjYgMCA2NC40LTI4LjggNjQuNC02NC40cy0yOC44LTY0LjQtNjQuNC02NC40bC0yLjEgMGMtMzUuNiAwLTY0LjQgMjguOC02NC40IDY0LjR6bS05Ny45IDk1LjhsLS40IDBjLTM1LjQgLjItNjQgMjktNjQgNjQuNHMyOS4yIDY0LjQgNjQuOSA2NC40YzM2LjMgMCA2Ni0yOS40IDY2LTY1LjVsMC02My40LTY2LjUgMHptMC0zMjAuNGMtMzUuNiAwLTY0LjQgMjguOC02NC40IDY0LjRzMjguOCA2NC40IDY0LjQgNjQuNGw2Ni41IDAgMC0xMjguOC02Ni41IDB6bTk3LjkgMTI4LjhsNjYuNSAwYzM1LjYgMCA2NC40LTI4LjggNjQuNC02NC40cy0yOC44LTY0LjQtNjQuNC02NC40bC02Ni41IDAgMCAxMjguOHoiXQogICAgfTsKICAgIGZhSW5zdGFncmFtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImluc3RhZ3JhbSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMTZkIiwgIk0yMjQuMyAxNDFhMTE1IDExNSAwIDEgMCAtLjYgMjMwIDExNSAxMTUgMCAxIDAgLjYtMjMwem0tLjYgNDAuNGE3NC42IDc0LjYgMCAxIDEgLjYgMTQ5LjIgNzQuNiA3NC42IDAgMSAxIC0uNi0xNDkuMnptOTMuNC00NS4xYTI2LjggMjYuOCAwIDEgMSA1My42IDAgMjYuOCAyNi44IDAgMSAxIC01My42IDB6bTEyOS43IDI3LjJjLTEuNy0zNS45LTkuOS02Ny43LTM2LjItOTMuOS0yNi4yLTI2LjItNTgtMzQuNC05My45LTM2LjItMzctMi4xLTE0Ny45LTIuMS0xODQuOSAwLTM1LjggMS43LTY3LjYgOS45LTkzLjkgMzYuMXMtMzQuNCA1OC0zNi4yIDkzLjljLTIuMSAzNy0yLjEgMTQ3LjkgMCAxODQuOSAxLjcgMzUuOSA5LjkgNjcuNyAzNi4yIDkzLjlzNTggMzQuNCA5My45IDM2LjJjMzcgMi4xIDE0Ny45IDIuMSAxODQuOSAwIDM1LjktMS43IDY3LjctOS45IDkzLjktMzYuMiAyNi4yLTI2LjIgMzQuNC01OCAzNi4yLTkzLjkgMi4xLTM3IDIuMS0xNDcuOCAwLTE4NC44ek0zOTkgMzg4Yy03LjggMTkuNi0yMi45IDM0LjctNDIuNiA0Mi42LTI5LjUgMTEuNy05OS41IDktMTMyLjEgOXMtMTAyLjcgMi42LTEzMi4xLTljLTE5LjYtNy44LTM0LjctMjIuOS00Mi42LTQyLjYtMTEuNy0yOS41LTktOTkuNS05LTEzMi4xcy0yLjYtMTAyLjcgOS0xMzIuMWM3LjgtMTkuNiAyMi45LTM0LjcgNDIuNi00Mi42IDI5LjUtMTEuNyA5OS41LTkgMTMyLjEtOXMxMDIuNy0yLjYgMTMyLjEgOWMxOS42IDcuOCAzNC43IDIyLjkgNDIuNiA0Mi42IDExLjcgMjkuNSA5IDk5LjUgOSAxMzIuMXMyLjcgMTAyLjctOSAxMzIuMXoiXQogICAgfTsKICAgIGZhUGVyYnl0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwZXJieXRlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwODMiLCAiTTMwNS4zIDI4NC42bC01OC43IDAgMCA5OC43IDU4LjcgMGMxNi4zIDAgMjktNC42IDM4LjItMTMuOHMxMy44LTIxLjIgMTMuOC0zNi4xYzAtMTQuNi00LjctMjYuMy0xNC0zNS4zcy0yMi0xMy41LTM3LjktMTMuNXpNMTQ5LjQgMTI4LjdsLTU4LjcgMCAwIDk4LjcgNTguNyAwYzE2LjMgMCAyOS00LjYgMzguMi0xMy44czEzLjgtMjEuMiAxMy44LTM2LjFjMC0xNC42LTQuNy0yNi4zLTE0LTM1LjNzLTIyLTEzLjUtMzcuOS0xMy41ek0zNjYuNiAzMkw4MS40IDMyYy0yMS42IDAtNDIuMiA4LjYtNTcuNSAyMy45UzAgOTEuOCAwIDExMy40TDAgMzk4LjZjMCAyMS42IDguNiA0Mi4yIDIzLjkgNTcuNVM1OS44IDQ4MCA4MS40IDQ4MGwyODUuMyAwYzIxLjYgMCA0Mi4yLTguNiA1Ny41LTIzLjlTNDQ4IDQyMC4yIDQ0OCAzOTguNmwwLTI4NS4zYzAtMjEuNi04LjYtNDIuMi0yMy45LTU3LjVTMzg4LjIgMzIgMzY2LjYgMzJ6bTYzLjYgMzY2LjZjMCAxNi45LTYuNyAzMy0xOC43IDQ1cy0yOC4xIDE4LjYtNDUgMTguN2wtMjg1LjMgMGMtMTYuOSAwLTMzLTYuNy00NS0xOC43cy0xOC42LTI4LjEtMTguNy00NWwwLTI4NS4zYzAtMTYuOSA2LjctMzMgMTguNy00NXMyOC4xLTE4LjYgNDUtMTguN2wyODUuMyAwYzE2LjkgMCAzMyA2LjcgNDUgMTguN3MxOC42IDI4LjEgMTguNyA0NWwwIDI4NS4zem0tMTI1LTI2OS45bC01OC43IDAgMCA5OC43IDU4LjcgMGMxNi4zIDAgMjktNC42IDM4LjItMTMuOHMxMy44LTIxLjIgMTMuOC0zNi4xYzAtMTQuNi00LjctMjYuMy0xNC0zNS4zcy0yMi0xMy41LTM3LjktMTMuNXoiXQogICAgfTsKICAgIGZhU3F1YXJlVmltZW8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXZpbWVvIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInZpbWVvLXNxdWFyZSJdLCAiZjE5NCIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTMxOC41IDMwOS41Yy00My41IDU2LjUtODAuMyA4NC44LTExMC40IDg0LjgtMTguNyAwLTM0LjQtMTcuMi00Ny4zLTUxLjYtMy44LTEzLjktNy4zLTI2LjktMTAuNS0zOS0xOC4yLTY4LjMtMjguNi0xMDcuNC00Ni4yLTEwNy40LTIuNCAwLTEwLjggNS0yNS4xIDE1LjFMNjQgMTkyYzctNi4xIDEzLjktMTIuNCAyMC42LTE4LjUgMjkuMS0yNi4zIDU1LjYtNTAuMyA3My41LTUxLjkgMjQuOS0yLjQgNDAuMiAxNC42IDQ2IDUxLjEgMjAuNSAxMjkuNiAyOS42IDE0OS4yIDY2LjggOTAuNSAxMy40LTIxLjIgMjAuNi0zNy4yIDIxLjUtNDguMyAzLjQtMzIuOC0yNS42LTMwLjYtNDUuMi0yMi4yIDE1LjctNTEuNSA0NS44LTc2LjUgOTAuMS03NS4xIDMyLjkgMSA0OC40IDIyLjQgNDYuNSA2NC0xLjQgMzEuMS0yMy4yIDczLjgtNjUuMyAxMjcuOXoiXQogICAgfTsKICAgIGZhVmltZW9TcXVhcmUgPSBmYVNxdWFyZVZpbWVvOwogICAgZmFQdXNoZWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicHVzaGVkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZTEiLCAiTTQxNS4xIDExMS45bC05OC41LTkgMTQtMzMuNGMxMC40LTIzLjUtMTAuOC00MC40LTI4LjctMzdMMzAuNiA3Ni45Yy0xNS4xIDIuNy0yNiAxOC4zLTIxLjQgMzYuNkwxMTQuMyA0NjEuOGM2LjUgMjEuMyAzNi43IDI0LjIgNDcuNyA3TDE5Ny4zIDM4OCA0MzIuNSAxNTYuN2MxNi40LTE2LjggNC4zLTQyLjktMTcuNC00NC44ek0zMDUuNyA1My42YzUuMS0uNyA3LjUgMi41IDUuMiA3LjRsLTE2LjggMzkuOS0xNzcuNC0xNi4zIDE4OS0zMXpNMzAuOCAxMDcuOWMtMy4xLTUuMSAxLTEwIDYuMS05LjFsMjQ4LjcgMjIuNy05Ni45IDIzMC43LTE1Ny45LTI0NC4zek0xNDQuMSA0NTYuNGMtMi42IDQtNy45IDMuMS05LjQtMS4yTDUxLjYgMTc5LjcgMTc5LjMgMzc3LjNjLTcgMTUtMzUuMiA3OS4xLTM1LjIgNzkuMXpNNDE2LjkgMTQxLjlsLTE5OC43IDE5NS40IDg5LjctMjEzLjcgMTA2LjQgOS43YzQgMS4xIDUuNyA1LjMgMi42IDguNnoiXQogICAgfTsKICAgIGZhTWl4Y2xvdWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWl4Y2xvdWQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjI4OSIsICJNMjEzIDM0Ni42bC0zMy4yIDAgMC0xNTEuNSA2LjItMjEuNi0xMC43IDAtMzguMSAxNzMuMS02MSAwLTM4LjQtMTczLjEtMTAuNSAwIDUuOSAyMS42IDAgMTUxLjUtMzMuMiAwIDAtMTgxLjYgNjUuNyAwIDM2LjYgMTczLjEgOC41IDAgMzYuNi0xNzMuMSA2NS43IDAgMCAxODEuNnptMzMxLjUtNjNsLTg2IDYyLjEgMC0zOC4xIDcyLjktNTEuOC03Mi45LTUxLjggMC0zOC4xIDg2IDYyLjMgOS4zIDAgODYuMy02Mi4zIDAgMzguMS03My4xIDUxLjggNzMuMSA1MS44IDAgMzguMS04Ni4zLTYyLjEtOS4zIDB6TTQzMC4yIDI3Mi4zbC0xODIgMCAwLTMzLjEgMTgyIDAgMCAzMy4xeiJdCiAgICB9OwogICAgZmFZYW5kZXhJbnRlcm5hdGlvbmFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInlhbmRleC1pbnRlcm5hdGlvbmFsIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImY0MTQiLCAiTTEyOS41IDUxMmwwLTE2Ni4xLTExMS0yOTcuOSA1NS44IDAgODEuOCAyMjkuNyA5NC4xLTI3Ny43IDUxLjMgMC0xMjAuNyAzNDcuOCAwIDE2NC4yLTUxLjMgMHoiXQogICAgfTsKICAgIGZhSGl2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJoaXZlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwN2YiLCAiTTI2MC40IDI1NC45TDEzMS41IDMzLjFjLS4yLS4zLS41LS42LS44LS44cy0uNy0uMy0xLjEtLjMtLjggLjEtMS4xIC4zLS42IC41LS44IC44TC4zIDI1NC45Yy0uMiAuMy0uMyAuNy0uMyAxLjFzLjEgLjggLjMgMS4xTDEyOS4xIDQ3OC45Yy4yIC4zIC41IC42IC44IC44cy43IC4zIDEuMSAuMyAuOC0uMSAxLjEtLjMgLjYtLjUgLjgtLjhMMjYwLjQgMjU3LjFjLjItLjMgLjMtLjcgLjMtMS4xcy0uMS0uOC0uMy0xLjF6bTM5LjEtMjUuN2MuMiAuMyAuNSAuNiAuOCAuOHMuNyAuMyAxLjEgLjNsNjYuNSAwYy40IDAgLjgtLjEgMS4xLS4zcy42LS41IC44LS44IC4zLS43IC4zLTEuMS0uMS0uOC0uMy0xLjFMMjU5LjEgMzMuMWMtLjItLjMtLjUtLjYtLjgtLjhzLS43LS4zLTEuMS0uM2wtNjYuNSAwYy0uNCAwLS44IC4xLTEuMSAuM3MtLjYgLjUtLjggLjgtLjMgLjctLjMgMS4xIC4xIC44IC4zIDEuMUwyOTkuNCAyMjkuMnptMjEyLjMgMjUuN0wzODQuOSAzMy4xYy0uMi0uMy0uNS0uNi0uOC0uOHMtLjctLjMtMS4xLS4zbC02Ni42IDBjLS40IDAtLjggLjEtMS4xIC4zcy0uNiAuNS0uOCAuOC0uMyAuNy0uMyAxLjEgLjEgLjggLjMgMS4xTDQ0MC43IDI1NiAzMTQuNSA0NzYuN2MtLjIgLjMtLjMgLjctLjMgMS4xcy4xIC44IC4zIDEuMSAuNSAuNiAuOCAuOCAuNyAuMyAxLjEgLjNsNjYuNiAwYy40IDAgLjgtLjEgMS4xLS4zcy42LS41IC44LS44TDUxMS43IDI1Ny4xYy4yLS4zIC4zLS43IC4zLTEuMXMtLjEtLjgtLjMtMS4xek0zNjYgMjg0LjlsLTY2LjUgMGMtLjQgMC0uOCAuMS0xLjEgLjNzLS42IC41LS44IC44TDE4OC44IDQ3Ni43Yy0uMiAuMy0uMyAuNy0uMyAxLjFzLjEgLjggLjMgMS4xIC41IC42IC44IC44IC43IC4zIDEuMSAuM2w2Ni41IDBjLjQgMCAuOC0uMSAxLjEtLjNzLjYtLjUgLjgtLjhMMzY3LjkgMjg4LjNjLjItLjMgLjMtLjcgLjMtMS4xcy0uMS0uOC0uMy0xLjEtLjUtLjYtLjgtLjgtLjctLjMtMS4xLS4zeiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNaZXJvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtemVybyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGYzIiwgIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6bS0uNCA2MC41Yy04MS45IDAtMTAyLjUgNzcuMy0xMDIuNSAxNDIuOFMxNzQuMSAzOTguOCAyNTYgMzk4LjggMzU4LjUgMzIxLjUgMzU4LjUgMjU2IDMzNy45IDExMy4yIDI1NiAxMTMuMnptMCA1My45YzMuMyAwIDYuNCAuNSA5LjIgMS4yIDUuOSA1LjEgOC44IDEyLjEgMy4xIDIxLjlMMjEzLjggMjkwLjRjLTEuNy0xMi43LTEuOS0yNS4xLTEuOS0zNC40IDAtMjguOCAyLTg4LjkgNDQuMS04OC45em00MC44IDQ2LjJjMi45IDE1LjQgMy4zIDMxLjQgMy4zIDQyLjcgMCAyOC45LTIgODguOS00NC4xIDg4LjktMTMuNSAwLTMyLjYtNy43LTIwLjEtMjYuNGw2MC45LTEwNS4yeiJdCiAgICB9OwogICAgZmFTcXVhcmVTbmFwY2hhdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtc25hcGNoYXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsic25hcGNoYXQtc3F1YXJlIl0sICJmMmFkIiwgIk0zODQgMzJMNjQgMzJjLTE3IDAtMzMuMyA2LjctNDUuMyAxOC43UzAgNzkgMCA5NkwwIDQxNmMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM1M0NyA0ODAgNjQgNDgwbDMyMCAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43UzQ0OCA0MzMgNDQ4IDQxNmwwLTMyMGMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM1M0MDEgMzIgMzg0IDMyem0tMy45IDMxOS4zbC0uMSAuMWMtMi41IDIuOC01LjQgNS4xLTguNyA2LjgtNi41IDMuNi0xMy40IDYuMy0yMC42IDguMi0xLjQgLjQtMi43IDEtMy45IDEuOC0yLjIgMS45LTIuMSA0LjYtNC40IDguNi0xLjcgMy00IDUuNS02LjggNy41LTYuNyA0LjYtMTQuMiA0LjktMjIuMiA1LjItNy4yIC4zLTE1LjQgLjYtMjQuNyAzLjctMy44IDEuMi03LjggMy43LTEyLjQgNi41LTExLjMgNi45LTI2LjcgMTYuNC01Mi4zIDE2LjRzLTQwLjktOS40LTUyLjEtMTYuM2MtNC43LTIuOS04LjctNS40LTEyLjUtNi42LTkuMy0zLjEtMTcuNS0zLjQtMjQuNy0zLjctOC0uMy0xNS41LS42LTIyLjItNS4yLTIuNC0xLjYtNC40LTMuNy02LTYuMS0zLjItNC42LTIuOS03LjgtNS4zLTkuOS0xLjMtLjgtMi42LTEuNS00LjEtMS44LTcuMS0xLjktMTMuOS00LjYtMjAuMy04LjEtMy4xLTEuNi01LjktMy44LTguMy02LjMtNi42LTYuOC04LjMtMTQuOC01LjctMjEuOCAzLjQtOS4zIDExLjYtMTIuMSAxOS40LTE2LjMgMTQuOC04IDI2LjMtMTguMSAzNC40LTI5LjkgMi4zLTMuMyA0LjMtNi45IDYtMTAuNiAuOC0yLjIgLjgtMy4zIC4yLTQuNC0uNi0uOS0xLjMtMS42LTIuMi0yLjItMi41LTEuNy01LjEtMy40LTYuOS00LjUtMy4zLTIuMS01LjktMy44LTcuNS01LTYuMy00LjQtMTAuNi05LTEzLjQtMTQuMi0xLjktMy42LTMtNy42LTMuMy0xMS42cy40LTguMSAxLjktMTEuOWM0LjEtMTAuOSAxNC41LTE3LjcgMjctMTcuNyAyLjYgMCA1LjMgLjMgNy44IC44IC43IC4yIDEuNCAuMyAyIC41LS4xLTcuNCAuMS0xNS40IC43LTIzLjEgMi40LTI3LjMgMTEuOS00MS42IDIxLjktNTMgNi40LTcuMiAxMy45LTEzLjIgMjIuMy0xNy45IDE1LjEtOC42IDMyLjItMTMgNTAuOS0xM3MzNS44IDQuNCA1MC45IDEzYzguMyA0LjcgMTUuOSAxMC44IDIyLjIgMTcuOSAxMCAxMS40IDE5LjUgMjUuNyAyMS45IDUzIC42IDcuNyAuOSAxNS40IC43IDIzLjEgLjctLjIgMS40LS4zIDIuMS0uNSAyLjYtLjYgNS4yLS44IDcuOC0uOCAxMi41IDAgMjIuOCA2LjggMjcgMTcuNyAxLjUgMy44IDIuMSA3LjkgMS45IDExLjlzLTEuNCA4LTMuMyAxMS42Yy0yLjcgNS4yLTcuMSA5LjktMTMuNCAxNC4yLTEuNyAxLjItNC4zIDIuOS03LjUgNS0xLjggMS4yLTQuNSAyLjktNy4yIDQuNy0uOCAuNS0xLjQgMS4yLTEuOSAyLS41IDEtLjUgMi4yIC4yIDQuMiAxLjcgMy44IDMuNyA3LjQgNi4xIDEwLjggOC4zIDEyLjEgMjAuMiAyMi4zIDM1LjUgMzAuNCAxLjUgLjggMyAxLjUgNC40IDIuMyAuNyAuMyAxLjYgLjggMi41IDEuMyA0LjkgMi43IDkuMiA2IDExLjUgMTIuMiAyLjUgNi45IDEgMTQuNy01LjIgMjEuM3ptLTE2LjctMTguNWMtNTAuMy0yNC4zLTU4LjMtNjEuOS01OC43LTY0LjctLjQtMy40LS45LTYgMi44LTkuNSAzLjYtMy4zIDE5LjUtMTMuMiAyNC0xNi4zIDcuMy01LjEgMTAuNS0xMC4yIDguMi0xNi41LTEuNy00LjMtNS43LTYtMTAtNi0xLjMgMC0yLjcgLjItNCAuNC04IDEuNy0xNS44IDUuOC0yMC40IDYuOS0uNSAuMS0xLjEgLjItMS43IC4yLTIuNCAwLTMuMy0xLjEtMy4xLTQgLjYtOC44IDEuOC0yNS45IC40LTQxLjktMS45LTIyLTktMzIuOS0xNy40LTQyLjYtNC4xLTQuNi0yMy4xLTI0LjctNTkuNS0yNC43cy01NS40IDIwLjEtNTkuNSAyNC44Yy04LjQgOS43LTE1LjUgMjAuNi0xNy40IDQyLjYtMS40IDE2LS4xIDMzLjEgLjQgNDEuOSAuMiAyLjgtLjcgNC0zLjEgNC0uNiAwLTEuMS0uMS0xLjctLjItNC41LTEuMS0xMi4zLTUuMS0yMC4zLTYuOS0xLjMtLjMtMi42LS40LTQtLjQtNC4zIDAtOC4zIDEuNi0xMCA2LTIuNCA2LjMgLjggMTEuNCA4LjIgMTYuNSA0LjQgMy4xIDIwLjQgMTMgMjQgMTYuMyAzLjcgMy40IDMuMiA2LjEgMi44IDkuNS0uNCAyLjgtOC40IDQwLjQtNTguNyA2NC43LTIuOSAxLjQtOCA0LjQgLjkgOS4zIDEzLjkgNy42IDIzLjEgNi44IDMwLjMgMTEuNCA2LjEgMy45IDIuNSAxMi40IDYuOSAxNS40IDUuNSAzLjggMjEuNi0uMyA0Mi4zIDYuNiAxNy40IDUuNyAyOC4xIDIyIDU5IDIyczQxLjgtMTYuMyA1OC45LTIyYzIwLjgtNi45IDM2LjktMi44IDQyLjMtNi42IDQuNC0zLjEgLjgtMTEuNSA2LjktMTUuNCA3LjItNC42IDE2LjQtMy44IDMwLjMtMTEuNSA4LjgtNC45IDMuOC03LjkgLjktOS40eiJdCiAgICB9OwogICAgZmFTbmFwY2hhdFNxdWFyZSA9IGZhU3F1YXJlU25hcGNoYXQ7CiAgICBmYVRoZW1laXNsZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0aGVtZWlzbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjJiMiIsICJNMjA4IDg4LjNjMC0xMCA2LjMtMjEuNyAxNy43LTIxLjcgMTEuMSAwIDE3LjcgMTEuNyAxNy43IDIxLjcgMCAxMC4zLTYuNiAyMS43LTE3LjcgMjEuNy0xMS40IDAtMTcuNy0xMS40LTE3LjctMjEuN3ptMzA0IDE2MGMwIDM2LTExLjQgMTAyLjMtMzYuMyAxMjkuNy0yMi45IDI0LjktODcuNCA2MS4xLTEyMC45IDcwLjZsLTEuMSAuMyAwIDMyLjZjMCAxNi4zLTEyLjYgMzAuNi0yOS4xIDMwLjYtMTAgMC0xOS40LTUuNy0yNC42LTE0LjMtNS40IDguNi0xNC45IDE0LjMtMjQuOSAxNC4zcy0xOS40LTUuNy0yNC45LTE0LjNjLTUuMSA4LjYtMTQuNiAxNC4zLTI0LjYgMTQuMy0xMC4zIDAtMTkuNC01LjctMjQuOS0xNC4zLTUuMSA4LjYtMTQuNiAxNC4zLTI0LjYgMTQuMy0xOC45IDAtMjkuNC0xNS43LTI5LjQtMzIuOS0xNi4zIDEyLjMtMzUuNyAxOS40LTU2LjYgMTkuNC0yMiAwLTQzLjQtOC4zLTYwLjMtMjIuOSAxMC4zLS4zIDIwLjYtMi4zIDMwLjMtNS43LTIwLjktNS43LTM5LjQtMTguOS01Mi0zNi4zIDIxLjQgNC42IDQ2LjIgMS43IDY3LjEtMTEuMS0yMi0yMi01Ni42LTU4LjktNjguNi04Ny40LTUuNy0xMy40LTYuOS0zMS40LTYuOS00NS43IDAtNDkuNyAyMC4zLTE2MCA4Ni4zLTE2MCAxMC42IDAgMTguOSA0LjkgMjMuMSAxNC45IDMuNy01LjQgNy43LTEwLjUgMTItMTUuNCAyLTIuNiA1LjctNS40IDcuMS04LjMgOC0xMi42IDExLjctMjEuMSAyMS43LTM0IDMyLjMtNDEuMSA4MS43LTY5LjQgMTM0LjktNjkuNCA2IDAgMTIgLjMgMTcuNyAxLjEgMTAuOS0xMS43IDI2LTE4LjMgNDEuNy0xOC4zIDE0LjYgMCAyOS43IDYgNDAgMTYuMyAuOSAuOSAxLjQgMi4zIDEuNCAzLjQgMCAzLjctMTAuMyAxMy40LTEyLjkgMTYuMyA0LjMgMS40IDE1LjcgNi45IDE1LjcgMTIgMCAyLjktMi45IDUuMS00LjYgNy4xIDMxLjQgMjcuNyA0OS40IDY3LjEgNTYuMyAxMDggNC4zLTUuMSAxMC4zLTguNiAxNy4xLTguNiAxMC42IDAgMjAuOSA3LjEgMjguNiAxNCAyMC45IDE4LjYgMjUuNyA1My4xIDI1LjcgNzkuN3pNMTg4IDg5LjRjMCAxOC4zIDEyLjYgMzcuMSAzMi4zIDM3LjFzMzIuMy0xOC45IDMyLjMtMzcuMWMwLTE4LTEyLjYtMzYuOS0zMi4zLTM2LjlTMTg4IDcxLjQgMTg4IDg5LjR6TTIzNy43IDE5NGMwLTE5LjcgMy43LTM5LjEgOC42LTU4LjMtNTIgNzkuNS0xMy41IDE4NC42IDY4LjkgMTg0LjYgMjEuNCAwIDQyLjYtNy43IDYwLTIwIDItNy40IDMuNy0xNC45IDMuNy0yMi42IDAtMTQuMy02LjMtMjEuNC0yMC42LTIxLjQtNC42IDAtOS4xIC45LTEzLjQgMS43LTYzLjMgMTIuNy0xMDcuMSAzLjctMTA3LjEtNjR6TTE5Ni42IDQ0OC45YzAtMTEuMS04LjktMjAuOS0yMC4zLTIwLjlzLTIwIDkuNy0yMCAyMC45bDAgMzIuNmMwIDExLjEgOC42IDIxLjEgMjAgMjEuMXMyMC4zLTkuNyAyMC4zLTIxLjFsMC0zMi42em00OS4xIDBjMC0xMS4xLTguNi0yMC45LTIwLTIwLjlzLTIwLjMgOS43LTIwLjMgMjAuOWwwIDMyLjZjMCAxMS4xIDguOSAyMS4xIDIwLjMgMjEuMXMyMC0xMCAyMC0yMS4xbDAtMzIuNnptNDkuNyAwYzAtMTEuMS04LjktMjAuOS0yMC4zLTIwLjlzLTIwLjMgOS43LTIwLjMgMjAuOWwwIDMyLjZjMCAxMS4xIDguOSAyMS4xIDIwLjMgMjEuMXMyMC4zLTkuNyAyMC4zLTIxLjFsMC0zMi42em00OS43IDBjMC0xMS4xLTguOS0yMC45LTIwLjMtMjAuOXMtMjAuMyA5LjctMjAuMyAyMC45bDAgMzIuNmMwIDExLjEgOC45IDIxLjEgMjAuMyAyMS4xczIwLjMtMTAgMjAuMy0yMS4xbDAtMzIuNnpNNDIxLjcgMjg2Yy0zMC45IDU5LjEtOTAuMyAxMDIuNi0xNTguNiAxMDIuNi05Ni42IDAtMTYwLjYtODQuNi0xNjAuNi0xNzYuNiAwLTE2LjkgMi0zMy40IDYtNDkuNy0yMCAzMy43LTI5LjcgNzIuNi0yOS43IDExMS40IDAgNjAuMyAyNC45IDEyMS43IDcxLjQgMTYwLjkgNS4xLTkuNyAxNC45LTE2LjMgMjYtMTYuMyAxMCAwIDE5LjQgNS43IDI0LjYgMTQuMyA1LjQtOC42IDE0LjYtMTQuMyAyNC45LTE0LjMgMTAgMCAxOS40IDUuNyAyNC42IDE0LjMgNS40LTguNiAxNC45LTE0LjMgMjQuOS0xNC4zczE5LjQgNS43IDI0LjkgMTQuM2M1LjEtOC42IDE0LjYtMTQuMyAyNC42LTE0LjMgMTAuOSAwIDIwLjkgNi42IDI1LjcgMTYgNDMuNC0zNi4zIDY4LjYtOTIgNzEuNC0xNDguM3ptMTAuNi05OS43YzAtNTMuNy0zNC42LTEwNS43LTkyLjYtMTA1LjctMzAuMyAwLTU4LjYgMTUuMS03OC45IDM2LjktMjAgNjYuNC0yNy40IDEzNi42IDQxLjQgMTM2LjYgMjguOCAwIDk3LjQtMjguNSA4NC4zIDM2LjkgMjguOS0yNiA0NS43LTY1LjcgNDUuNy0xMDQuNnoiXQogICAgfTsKICAgIGZhRGFydExhbmcgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGFydC1sYW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU2OTMiLCAiTTM3OC42IDc4LjljLTIuOC0uMS01LjYtLjItOC41LS4ybC0yNjQuMSAwIDE0My4yLTcyYzcuNC00LjQgMTguOC02LjcgMzAuNC02LjcgMTMuNSAwIDI5LjQgOS4yIDM3IDE2LjhsNjIgNjIgMCAuMXpNMTA3LjMgOTYuNWwyNjIuOCAwYzE2IDAgMjUuNCAxLjQgMzUuNCA5LjNsMTA2LjUgMTA2LjQgMCAyMDguOC03OS4zIC43LTMyNS40LTMyNS4yek05Ni41IDM3M2wwLTI2Mi4yIDMyMy44IDMyMy44IC43IDc3LjQtMjEyLjIgMC05OC4xLTk4LjJDOTkuNCA0MDIuNSA5Ni41IDM5OC41IDk2LjUgMzczek03OC43IDEwNS4zbDAgMjY3LjdjMCAzLjMgLjEgNi4zIC4yIDkuMWwtNjItNjJDNi41IDMwOS4zIDAgMjk0LjMgMCAyNzkuNiAwIDI3Mi44IDMuOSAyNjIuMSA2LjcgMjU2bDcyLTE1MC43eiJdCiAgICB9OwogICAgZmFEZXBsb3lkb2cgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGVwbG95ZG9nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzOGUiLCAiTTM4Mi4yIDEzNmw1MS43IDAgMCAyMzkuNi01MS43IDAgMC0yMC43Yy0xOS44IDI0LjgtNTIuOCAyNC4xLTczLjggMTQuNy0yNi4yLTExLjctNDQuMy0zOC4xLTQ0LjMtNzEuOCAwLTI5LjggMTQuOC01Ny45IDQzLjMtNzAuOCAyMC4yLTkuMSA1Mi43LTEwLjYgNzQuOCAxMi45bDAtMTAzLjl6TTMxNy41IDI5Ny44YTMzLjIgMzMuMiAwIDEgMCA2Ni40IDEgMzMuMiAzMy4yIDAgMSAwIC02Ni40LTF6TTE4OC41IDEzNmw1MS43IDAgMCAyMzkuNi01MS43IDAgMC0yMC43Yy0xOS44IDI0LjgtNTIuOCAyNC4xLTczLjggMTQuNy0yNi4yLTExLjctNDQuMy0zOC4xLTQ0LjMtNzEuOCAwLTI5LjggMTQuOC01Ny45IDQzLjMtNzAuOCAyMC4yLTkuMSA1Mi43LTEwLjYgNzQuOCAxMi45bDAtMTAzLjl6TTEyMy44IDI5Ny44YTMzLjIgMzMuMiAwIDEgMCA2Ni40IDEgMzMuMiAzMy4yIDAgMSAwIC02Ni40LTF6TTQ0OCA5NmMxNy41IDAgMzIgMTQuNCAzMiAzMmwwIDI1NmMwIDE3LjUtMTQuNCAzMi0zMiAzMkw2NCA0MTZjLTE3LjUgMC0zMi0xNC40LTMyLTMybDAtMjU2YzAtMTcuNSAxNC40LTMyIDMyLTMybDM4NCAwem0wLTMyTDY0IDY0QzI4LjggNjQgMCA5Mi44IDAgMTI4TDAgMzg0YzAgMzUuMiAyOC44IDY0IDY0IDY0bDM4NCAwYzM1LjIgMCA2NC0yOC44IDY0LTY0bDAtMjU2YzAtMzUuMi0yOC44LTY0LTY0LTY0eiJdCiAgICB9OwogICAgZmFGbGlwYm9hcmQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmxpcGJvYXJkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0NGQiLCAiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTM1OC40IDIxMS4ybC04OS42IDAgMCA4OS42LTg5LjYgMCAwIDg5LjYtODkuNiAwIDAtMjY4LjggMjY4LjggMCAwIDg5LjZ6Il0KICAgIH07CiAgICBmYUJ1eU5MYXJnZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJidXktbi1sYXJnZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmOGE2IiwgIk0yODguMiAzMkMxMzMuNSAzMiA4IDEzMi4zIDggMjU2UzEzMy41IDQ4MCAyODguMiA0ODAgNTY4LjQgMzc5LjcgNTY4LjQgMjU2IDQ0Mi45IDMyIDI4OC4yIDMyek0yMDIuOCAzODkuMmwtMTM4LjUgMS40IDc3LjItMjkwLjcgMTMzLjQgMGM2My4yIDAgODQuOSAyOC42IDc4IDcyLjgtLjQgMi4zLS45IDQuNi0xLjUgNi45LTUuNi0xLjMtMTEuNC0xLjktMTcuMi0xLjktNDIuMyAwLTc2LjcgMzMuOS03Ni43IDc1LjcgMCAzNy4xIDI3LjEgNjggNjIuOSA3NC41LTE4LjIgMzcuMi01Ni4yIDYwLjktMTE3LjcgNjEuNXpNMzU4LjIgMjA3LjFsMzIgMC0yMi4yIDkwLjMtMzUuNCAwLTExLjItMzUuNi03LjggMzUuNi0zNy44IDAgMjYuNi05MC4zIDMxLjMgMCAxNSAzNi44IDkuNC0zNi44ek01MDQuMSAzODkuMmwtMTk3LjEgMCAxNS44LTYxLjJjMy44IC42IDcuNiAuOCAxMS41IC44IDQyLjMgMCA3Ni43LTMzLjkgNzYuNy03NS42IDAtMzIuNi0yMS02MC41LTUwLjQtNzEuMWwyMS4zLTgyLjQgOTIuNSAwLTUzIDIwNS40IDEwMy45IDAtMjEuMiA4NC4xek0yMTEuOSAyNjkuNGwtMjQuNyAwLTEzLjggNTYuNSAyNC43IDBjMTYuMSAwIDMyLjEtMy4yIDM3LjktMjYuNiA1LjYtMjIuMy04LTI5LjgtMjQuMS0yOS44ek0yMzMuMiAxNzBsLTIxLjMgMC0xMS43IDQ3LjcgMjEuNCAwYzE4IDAgMzUuNC0xNC42IDM5LjItMzAuMSA0LjYtMTguOS05LjUtMTcuNi0yNy42LTE3LjZ6Il0KICAgIH07CiAgICBmYVdhdGNobWFuTW9uaXRvcmluZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3YXRjaG1hbi1tb25pdG9yaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwODciLCAiTTI1NiAxNmEyNDAgMjQwIDAgMSAwIDAgNDgwIDI0MCAyNDAgMCAxIDAgMC00ODB6TTEyMS43IDQyOS4xYy01MS42LTQwLjItODQuOS0xMDIuOC04NC45LTE3My4xIDAtMjEuNyAzLjItNDMuMyA5LjYtNjQuMWwxMDIuOS0xNy45LS4xIDExLTEzLjkgMnMtLjEgMTIuNS0uMSAxOS41YzAgMiAuNCA0IDEuMiA1LjhzMi4xIDMuNCAzLjcgNC42bDkuNSA3LjQtMjcuNyAyMDQuOXpNMjI3LjQgMTQ1LjlsOC41LTcuNnM2LjktNS40LS4xLTkuM2MtNy4yLTQtMzkuNS0zNC41LTM5LjUtMzQuNS01LjMtNS41LTguMy03LjMtMTUuNSAwIDAgMC0zMi4zIDMwLjUtMzkuNSAzNC41LTcuMSA0LS4xIDkuMy0uMSA5LjNsOC41IDcuNiAwIDQuNC03My41LTE5LjJjMzkuNi01Ni45IDEwNS41LTk0LjMgMTgwLTk0LjMgMzEuMyAwIDYyLjIgNi43IDkwLjYgMTkuNnM1My44IDMxLjggNzQuMyA1NS40bC0xOTMuNSAzNy43IDAtMy42em0zNC4xIDMyOS4zbC0zMy45LTI1MC45IDkuNS03LjRjMS42LTEuMiAyLjgtMi44IDMuNy00LjZzMS4zLTMuOCAxLjItNS44YzAtNy0uMS0xOS41LS4xLTE5LjVsLTEzLjktMi0uMS0xMC41IDI0MS43IDMxLjRjMy45IDE2LjQgNS44IDMzLjMgNS44IDUwLjEgMCAxMTkuMS05NS40IDIxNi4yLTIxMy44IDIxOS4xeiJdCiAgICB9OwogICAgZmFIaXBzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhpcHMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQ1MiIsICJNMjUxLjYgMTU3LjZjMC0xLjktLjktMi44LTIuOC0yLjhsLTQwLjkgMGMtMS42IDAtMi43IDEuNC0yLjcgMi44bDAgMjAxLjhjMCAxLjQgMS4xIDIuOCAyLjcgMi44bDQwLjkgMGMxLjkgMCAyLjgtLjkgMi44LTIuOGwwLTIwMS44ek0xNTYuNSAxNjhjLTE2LjEtMTEuOC0zNi4zLTE3LjktNjAuMy0xOC0xOC4xLS4xLTM0LjYgMy43LTQ5LjggMTEuNGwwLTgxLjJjMC0xLjgtLjktMi43LTIuOC0yLjdsLTQwLjkgMEMuOSA3Ny41IDAgNzguNCAwIDgwLjJMMCAzNTkuNGMwIDEuOSAuOSAyLjggMi43IDIuOGw0MSAwYzEuOSAwIDIuOC0uOSAyLjgtMi44bDAtMTM2LjFjMC0uOC0yLjgtMjcgNDUuOC0yNyA0OC41IDAgNDUuOCAyNi4xIDQ1LjggMjdsMCAxMjIuNmMwIDkgNy4zIDE2LjMgMTYuNCAxNi4zbDI3LjMgMGMxLjggMCAyLjctLjkgMi43LTIuOGwwLTEzNi4xYzAtMjMuNC05LjMtNDEuOC0yOC01NS4zek02MzQuOSAyNzguMWMtNi44LTE1LjctMTguNC0yNy0zNC45LTM0LjFsLTU3LjYtMjUuM2MtOC42LTMuNi05LjItMTEuMi0yLjYtMTYuMSA3LjQtNS41IDQ0LjMtMTMuOSA4NCA2LjggMS43IDEgNC0uMyA0LTIuNGwwLTQ0LjdjMC0xLjMtLjYtMi4xLTEuOS0yLjYtMTcuNy02LjYtMzYuMS05LjktNTUuMS05LjktMjYuNSAwLTQ1LjMgNS44LTU4LjUgMTUuNC0uNSAuNC0yOC40IDIwLTIyLjcgNTMuNyAzLjQgMTkuNiAxNS44IDM0LjIgMzcuMiA0My42TDU4MC40IDI4NmMxMS42IDUuMSAxNS4yIDEzLjMgMTIuMiAyMS4yLTMuNyA5LjEtMTMuMiAxMy42LTM2LjUgMTMuNi0yNC4zIDAtNDQuNy04LjktNTguNC0xOS4xLTIuMS0xLjQtNC40IC4yLTQuNCAyLjNsMCAzNC40YzAgMTAuNCA0LjkgMTcuMyAxNC42IDIwLjcgMTUuNiA1LjUgMzEuNiA4LjIgNDguMiA4LjIgMTIuNyAwIDI1LjgtMS4yIDM2LjMtNC4zIC43LS4zIDM2LTguOSA0NS42LTQ1LjggMy41LTEzLjUgMi40LTI2LjUtMy4xLTM5LjF6TTM3Ni4yIDE0OS44Yy0zMS43IDAtMTA0LjIgMjAuMS0xMDQuMiAxMDMuNWwwIDE4My41YzAgLjggLjYgMi43IDIuNyAyLjdsNDAuOSAwYzEuOSAwIDIuOC0uOSAyLjgtMi43bDAtODguOGMxNi41IDEyLjcgMzUuOCAxOS4xIDU3LjcgMTkuMSA2MC41IDAgMTA4LjctNDguNSAxMDguNy0xMDguNyAuMS02MC4zLTQ4LjItMTA4LjYtMTA4LjYtMTA4LjZ6bTAgNDYuNmE2Mi4yIDYyLjIgMCAxIDEgMCAxMjQuMyA2Mi4yIDYyLjIgMCAxIDEgMC0xMjQuM3pNMjI4LjMgNzIuNWMtMTUuOSAwLTI4LjggMTIuOS0yOC45IDI4LjkgMCAxNS42IDEyLjcgMjguOSAyOC45IDI4LjlzMjguOS0xMy4xIDI4LjktMjguOWMwLTE2LjItMTMtMjguOS0yOC45LTI4Ljl6Il0KICAgIH07CiAgICBmYUNsb3VkdmVyc2lmeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZHZlcnNpZnkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjM4NSIsICJNMTYwLjYgMzA0YzguMiA2OC41IDY3LjQgMTE1LjUgMTQ2IDExMS4zIDUxLjIgNDMuMyAxMzYuOCA0NS44IDE4Ni40LTUuNiA2OS4yIDEuMSAxMTguNS00NC42IDEzMS41LTk5LjUgMTQuOC02Mi41LTE4LjItMTMyLjUtOTIuMS0xNTUuMS0zMy04OC4xLTEzMS40LTEwMS41LTE4Ni41LTg1LTU3LjMgMTcuMy04NC4zIDUzLjItOTkuMyAxMDkuNy03LjggMi43LTI2LjUgOC45LTQ1IDI0LjEgMTEuNyAwIDE1LjIgOC45IDE1LjIgMTkuNWwwIDIwLjRjMCAxMC43LTguNyAxOS41LTE5LjUgMTkuNWwtMjAuMiAwYy0xMC43IDAtMTkuNS02LTE5LjUtMTYuN2wwLTYuNi00Ni44IDBjLTMuOCAwLTEwLjggNC4zLTEwLjggMTEuOWwwIDQwLjRjMCA2LjQgNS4zIDExLjggMTEuNyAxMS44bDQ4LjkgMCAwLS4xek0zODggMzEyYy0xMC43IDQ2LjMgMjEuNyA3Mi40IDU1LjMgODYuOC0xMDcuMiAzMy44LTE3MS42LTUwLjgtMTM1LjMtMTEwLjgtMzMuMiAyMS42LTMzLjcgNzEuMi0yOS4yIDkyLjktMTcuOS0xMi40LTUzLjgtMzIuNC01Ny40LTc5LjgtMy0zOS45IDIxLjUtNzUuNyA1Ny05My45IDMwLjYtMTUuOCAxMDMuNS04LjUgMTMzLjYgNDAuOC0xNC4xLTQ4LTUzLjgtNzAuMS0xMDEuOC03NC44IDMwLjktMzAuNyA2NC40LTUwLjMgMTE0LjItNDMuNyA2OS44IDkuMyAxMzMuMiA4Mi44IDY3LjcgMTUwLjUgMzUtMTYuMyA0OC43LTU0LjQgNDcuNS03Ni45bDEwLjUgMTkuNmMxMS44IDIyIDE1LjIgNDcuNiA5LjQgNzItOS4yIDM5LTQwLjYgNjguOC03OS43IDc2LjUtMzIuMSA2LjMtODMuMS01LjEtOTEuOC01OS4yek0xNDAgMjA4bC0zOS44IDBjLTguOSAwLTE2LjItNy4zLTE2LjItMTYuMmwwLTM5LjZjMC04LjkgNy4zLTE2LjIgMTYuMi0xNi4ybDM5LjggMGM4LjkgMCAxNi4yIDcuMyAxNi4yIDE2LjJsMCAzOS42YzAgOC45LTcuMyAxNi4yLTE2LjIgMTYuMnpNMjIuMSAxNjhjLTUuNiAwLTEwLjEtNC41LTEwLjEtMTAuMWwwLTI3LjhjMC01LjYgNC41LTEwLjEgMTAuMS0xMC4xbDI3LjcgMGM1LjUgMCAxMC4xIDQuNSAxMC4xIDEwLjFsMCAyNy44YzAgNS42LTQuNSAxMC4xLTEwLjEgMTAuMWwtMjcuNyAwek0xODAgMTQyLjdsMC0yMS40YzAtNS4xIDQuMi05LjMgOS4zLTkuM2wyMS40IDBjNS4xIDAgOS4zIDQuMiA5LjMgOS4zbDAgMjEuNGMwIDUuMS00LjIgOS4zLTkuMyA5LjNsLTIxLjQgMGMtNS4xIDAtOS4zLTQuMi05LjMtOS4zek02OCAyMzUuNWwwIDI1YzAgNi4zLTUuMSAxMS41LTExLjQgMTEuNWwtMjUuMiAwYy02LjMgMC0xMS40LTUuMi0xMS40LTExLjVsMC0yNWMwLTYuMyA1LjEtMTEuNSAxMS40LTExLjVsMjUuMSAwYzYuNCAwIDExLjUgNS4yIDExLjUgMTEuNXoiXQogICAgfTsKICAgIGZhR29vZHJlYWRzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2RyZWFkcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2E4IiwgIk0yOTkuOSAxOTEuMmM1LjEgMzcuMy00LjcgNzktMzUuOSAxMDAuNy0yMi4zIDE1LjUtNTIuOCAxNC4xLTcwLjggNS43LTM3LjEtMTcuMy00OS41LTU4LjYtNDYuOC05Ny4yIDQuMy02MC45IDQwLjktODcuOSA3NS4zLTg3LjUgNDYuOS0uMiA3MS44IDMxLjggNzguMiA3OC4zek00NDggODhsMCAzMzZjMCAzMC45LTI1LjEgNTYtNTYgNTZMNTYgNDgwYy0zMC45IDAtNTYtMjUuMS01Ni01NkwwIDg4QzAgNTcuMSAyNS4xIDMyIDU2IDMybDMzNiAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2ek0zMzAgMzEzLjJzLS4xLTM0LS4xLTIxNy4zbC0yOSAwIDAgNDAuM2MtLjggLjMtMS4yLS41LTEuNi0xLjItOS42LTIwLjctMzUuOS00Ni4zLTc2LTQ2LTUxLjkgLjQtODcuMiAzMS4yLTEwMC42IDc3LjgtNC4zIDE0LjktNS44IDMwLjEtNS41IDQ1LjYgMS43IDc3LjkgNDUuMSAxMTcuOCAxMTIuNCAxMTUuMiAyOC45LTEuMSA1NC41LTE3IDY5LTQ1LjIgLjUtMSAxLjEtMS45IDEuNy0yLjkgLjIgLjEgLjQgLjEgLjYgLjIgLjMgMy44IC4yIDMwLjcgLjEgMzQuNS0uMiAxNC44LTIgMjkuNS03LjIgNDMuNS03LjggMjEtMjIuMyAzNC43LTQ0LjUgMzkuNS0xNy44IDMuOS0zNS42IDMuOC01My4yLTEuMi0yMS41LTYuMS0zNi41LTE5LTQxLjEtNDEuOC0uMy0xLjYtMS4zLTEuMy0yLjMtMS4zbC0yNi44IDBjLjggMTAuNiAzLjIgMjAuMyA4LjUgMjkuMiAyNC4yIDQwLjUgODIuNyA0OC41IDEyOC4yIDM3LjQgNDkuOS0xMi4zIDY3LjMtNTQuOSA2Ny40LTEwNi4zeiJdCiAgICB9OwogICAgZmFUaWRhbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0aWRhbCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlN2RjIiwgIk0xMDcuMiA0OGwtMS4zIDBjLTMyLjMgMzMuMS02NS40IDY1LjUtOTggOTguNS0yLjYgMi44LTYuMSA1LjEtNy45IDguNiAzNS42IDM1LjQgNzEgNzEgMTA2LjYgMTA2LjQgMzUuNC0zNS4zIDcwLjctNzAuOCAxMDYuMS0xMDYuMWwwLTEuMy03My4yLTczLjJDMTI4LjggNjkuOCAxMTcuMyA1OS42IDEwNy4yIDQ4em0yMTMuNSAwbC0xLjMgMGMtMzQuOSAzNi4xLTcxLjUgNzEtMTA2LjMgMTA3LjIgMzUuOSAzNS4xIDcxIDcxIDEwNi43IDEwNi4zIDM0LjMtMzQuMSA2OC40LTY4LjQgMTAyLjYtMTAyLjQgMS41LTEuNSAzLjMtMi44IDQuMS00LjgtMzQuNi0zMy44LTY4LjQtNjguMi0xMDIuNi0xMDIuMS0xLjMtMS4zLTIuMy0yLjYtMy4zLTQuMXptMjEzLjUgMGwtMS4zIDBjLTE3LjIgMTgtMzUuMSAzNS4zLTUyLjYgNTMtMTcuOSAxNy43LTM1LjQgMzUuNy01My41IDUzLjMgLjggMi4zIDMgMy42IDQuNiA1LjVMNTMzLjMgMjYxLjVjMzYuMS0zNC45IDcwLjgtNzEuMiAxMDYuNy0xMDYuMS0uNS0yLjItMi42LTMuNS00LTVMNTU1LjggNzAuMmMtNy4xLTcuNC0xNC45LTE0LjItMjEuNS0yMi4yek0zMTkuNiAyNjEuN2MtMzQuOSAzNS4xLTcwIDcwLTEwNC45IDEwNC45LS4zIC43LS43IDEuNy0xIDIuMyAyNCAyMy43IDQ3LjcgNDcuNSA3MS41IDcxLjMgMTEuOCAxMS4zIDIyLjggMjMuNSAzNC45IDM0LjQgOC40LTcuNCAxNi40LTE2LjQgMjQuNy0yNC4zIDI1LjUtMjUuMyA1MS01MSA3Ni41LTc2LjMgMS44LTIuMiA0LjMtMy42IDUuNS02LjMtMzUuNC0zNC45LTcwLjUtNzAuMi0xMDUuNi0xMDUuNGwtMS41LS43eiJdCiAgICB9OwogICAgZmFVbml0eSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1bml0eSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMDQ5IiwgIk0yNDMuNiA5MS42bDgwLjEgNDYuOGMyLjkgMS42IDMgNi4yIDAgNy44bC05NS4yIDU1LjZjLTIuOSAxLjctNi4zIDEuNi05IDBsLTk1LjItNTUuNmMtMi45LTEuNi0zLTYuMyAwLTcuOGw4MC4xLTQ2LjggMC05MS42LTIwNC40IDExOS40IDAgMjM4LjggNzguNC00NS44IDAtOTMuNmMtLjEtMy4zIDMuOC01LjcgNi43LTMuOWw5NS4yIDU1LjZjMi45IDEuNyA0LjUgNC43IDQuNSA3LjhsMCAxMTEuMmMuMSAzLjMtMy44IDUuNy02LjcgMy45TDk4IDM0Ni44IDE5LjYgMzkyLjYgMjI0IDUxMiA0MjguNCAzOTIuNiAzNTAgMzQ2LjggMjY5LjkgMzkzLjZjLTIuOCAxLjctNi44LS41LTYuNy0zLjlsMC0xMTEuMmMwLTMuMyAxLjgtNi4zIDQuNS03LjhMMzYyLjkgMjE1YzIuOC0xLjcgNi44IC41IDYuNyAzLjlsMCA5My42IDc4LjQgNDUuOCAwLTIzOC44LTIwNC40LTExOS40IDAgOTEuNnoiXQogICAgfTsKICAgIGZhVGVuY2VudFdlaWJvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRlbmNlbnQtd2VpYm8iLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjFkNSIsICJNNDAuNSA0OTUuOGMxLjQgMTkuOS0yNy42IDIyLjItMjkuNyAyLjktMTEuNi0xMjkuOSAzMS4xLTIzOS41IDEwMS40LTMxMy4yLTE1LjYtMzQgOS4yLTc3LjEgNTAuNi03Ny4xIDMwLjMgMCA1NS4xIDI0LjYgNTUuMSA1NS4xIDAgNDQtNDkuNSA3MC44LTg2LjkgNDUuMS02NS43IDcxLjMtMTAxLjQgMTY5LjgtOTAuNSAyODcuMnpNMTYwLjIgLjFjLTEyNS45IDAtMjA0LjMgMTM0LjItMTQ4LjMgMjQyLjMgOC43IDE3LjQgMzUuMyA0LjUgMjYuMy0xMy40LTQ2LjMtOTIuNiAyMS0xOTkuMiAxMjItMTk5LjIgNzUuNCAwIDEzNi45IDYxLjQgMTM2LjkgMTM2LjkgMCA5MC44LTg2LjkgMTUzLjktMTY3LjcgMTMzLjEtMTkuMS00LjEtMjUuNiAyNC40LTYuNiAyOS4xIDExMC43IDIzLjIgMjA0LTYwIDIwNC0xNjIuMyAwLTkxLjktNzQuNi0xNjYuNS0xNjYuNi0xNjYuNXoiXQogICAgfTsKICAgIGZhRnJlZUNvZGVDYW1wID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZyZWUtY29kZS1jYW1wIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyYzUiLCAiTTk3LjQgOTYuMmMxMC40LTEwLjYgMTYtMTcuMSAxNi0yMS45IDAtMi44LTEuOS01LjUtMy44LTcuNC0yLjQtMS44LTUuNC0yLjgtOC40LTIuOC04LjUgMC0yMC45IDguOC0zNS44IDI1LjctNDEuNSA0Ny4zLTYyLjcgOTMuMS02MS44IDE2MC42UzIxIDM2Ny4zIDU3LjYgNDEyLjJjMTguOCAyMy42IDMzLjIgMzUuOCA0My41IDM1LjggMy4yLS4zIDYuMS0xLjYgOC40LTMuOCAxLjktMi44IDMuOC01LjYgMy44LTguNCAwLTUuNi0zLjktMTIuMi0xMy4yLTIwLjYtNDQuNS00Mi4zLTY3LjMtOTctNjcuNS0xNjUtLjItNjEuNCAyMS42LTExMi40IDY0LjgtMTU0ek0yMzkuNiA0MjAuMWMuNiAuNCAuOSAuNiAuOSAuNmwtLjktLjZ6bTkzLjggLjZsLjItLjFjLS4yIC4xLS4zIC4yLS4yIC4xem0zLjEtMTU4LjJjLTE2LjItNC4yIDUwLjQtODIuOS02OC4xLTE3Ny4yIDAgMCAxNS41IDQ5LjQtNjIuOCAxNTkuNi03NC4zIDEwNC40IDIzLjUgMTY4LjcgMzQgMTc1LjItNi43LTQuMy00Ny40LTM1LjcgOS42LTEyOC42IDExLTE4LjMgMjUuNS0zNC45IDQzLjUtNzIuMiAwIDAgMTUuOSAyMi40IDcuNiA3MS4xLTEyLjUgNzMuNiA1My44IDUyLjUgNTQuOCA1My41IDIyLjggMjYuOC0xNy43IDczLjUtMjEuNiA3Ni42IDUuNS0zLjcgMTE3LjctNzggMzMtMTg4LjEtNiA2LTEzLjggMzQuMi0zMCAzMC4xek01MTEgODkuN2MtMTQuOS0xNi45LTI3LjQtMjUuNy0zNS45LTI1LjctMyAuMS01LjkgMS4xLTguNCAyLjgtMS45IDEuOS0zLjggNC43LTMuOCA3LjQgMCA0LjggNS42IDExLjMgMTYgMjEuOSA0My4yIDQxLjYgNjUgOTIuNiA2NC44IDE1NC4xLS4yIDY4LTIzIDEyMi42LTY3LjUgMTY1LTkuMyA4LjQtMTMuMiAxNC45LTEzLjIgMjAuNiAwIDIuNyAxLjkgNS42IDMuOCA4LjQgMi4zIDIuMiA1LjIgMy42IDguNCAzLjggMTAuMyAwIDI0LjctMTIuMSA0My41LTM1LjggMzYuNi00NC45IDUzLjEtOTQuNCA1NC4xLTE2MS45UzU1Mi41IDEzNyA1MTEgODkuN3oiXQogICAgfTsKICAgIGZhWFR3aXR0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAieC10d2l0dGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2MWIiLCAiTTM1Ny4yIDQ4TDQyNy44IDQ4IDI3My42IDIyNC4yIDQ1NSA0NjQgMzEzIDQ2NCAyMDEuNyAzMTguNiA3NC41IDQ2NCAzLjggNDY0IDE2OC43IDI3NS41LTUuMiA0OCAxNDAuNCA0OCAyNDAuOSAxODAuOSAzNTcuMiA0OHpNMzMyLjQgNDIxLjhsMzkuMSAwLTI1Mi40LTMzMy44LTQyIDAgMjU1LjMgMzMzLjh6Il0KICAgIH07CiAgICBmYVN0aWNrZXJNdWxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0aWNrZXItbXVsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmM2Y3IiwgIk01NjEuNyAxOTkuNmwwIDB6bS02LjItNzcuNGMtNy43LTIyLjMtNS4xLTcuMi0xMy40LTM2LjktMS42LTYuNS0zLjYtMTQuNS02LjItMjAtNC40LTguNy00LjYtNy41LTQuNi05LjUgMC01LjMgMzAuNy00NS4zIDE5LTQ2LjktNS43LS42LTEyLjIgMTEuNi0yMC42IDE3LTguNiA0LjItOCA1LTEwLjMgNS0yLjYgMC01LjctMy02LjItNS0yLTUuNyAxLjktMjUuOS0zLjYtMjUuOS0zLjYgMC0xMi4zIDI0LjgtMTcgMjUuOC01LjIgMS4zLTI3LjktMTEuNC03NS4xIDE4LTI1LjMgMTMuMi04Ni45IDY1LjItODcgNjUuMy02LjcgNC43LTIwIDQuNy0zNS41IDE2LTQ0LjQgMzAuMS0xMDkuNiA5LjQtMTEwLjcgOS0xMTAuNi0yNi44LTEyOC0xNS4yLTE1OSAxMS41LTIwLjggMTcuOS0yMy43IDM2LjUtMjQuMiAzOC45LTQuMiAyMC40IDUuMiA0OC4zIDYuNyA2NC4zIDEuOCAxOS4zLTIuNyAxNy43IDcuNyA5OC4zIC41IDEgNC4xIDAgNS4xIDEuNSAwIDguNC0zLjggMTIuMS00LjEgMTMtMS41IDQuNS0xLjUgMTAuNSAwIDE2IDIuMyA4LjIgOC4yIDM3LjIgOC4yIDQ2LjkgMCA0MS44IC40IDQ0IDIuNiA0OS40IDMuOSAxMCAxMi41IDkuMSAxNyAxMiAzLjEgMy41LS41IDguNSAxIDEyLjUgLjUgMiAzLjYgNCA2LjIgNSA5LjIgMy42IDI3IC4zIDI5LjktMi41IDEuNi0xLjUgLjUtNC41IDMuMS01IDUuMSAwIDEwLjgtLjUgMTQuNC0yLjUgNS4xLTIuNSA0LjEtNiAxLjUtMTAuNS0uNC0uOC03LTEzLjMtOS44LTE2LTIuMS0yLTUuMS0zLTcuMi00LjUtNS44LTQuOS0xMC4zLTE5LjQtMTAuMy0xOS41LTQuNi0xOS40LTEwLjMtNDYuMy00LjEtNjYuOCA0LjYtMTcuMiAzOS41LTg3LjcgMzkuNi04Ny44IDQuMS02LjUgMTctMTEuNSAyNy4zLTcgNiAxLjkgMTkuMyAyMiA2NS40IDMwLjkgNDcuOSA4LjcgOTcuNC0yIDExMi4yLTIgMi44IDItMS45IDEzLS41IDM4LjkgMCAyNi40LS40IDEzLjctNC4xIDI5LjktMi4yIDkuNyAzLjQgMjMuMi0xLjUgNDYuOS0xLjQgOS44LTkuOSAzMi43LTguMiA0My40IC41IDEgMSAyIDEuNSAzLjUgLjUgNC41IDEuNSA4LjUgNC42IDEwIDcuMyAzLjYgMTItMy41IDkuOCAxMS41LS43IDMuMS0yLjYgMTIgMS41IDE1IDQuNCAzLjcgMzAuNiAzLjQgMzYuNSAuNSAyLjYtMS41IDEuNi00LjUgNi40LTcuNCAxLjktLjkgMTEuMy0uNCAxMS4zLTYuNSAuMy0xLjgtOS4yLTE5LjktOS4zLTIwLTIuNi0zLjUtOS4yLTQuNS0xMS4zLTgtNi45LTEwLjEtMS43LTUyLjYgLjUtNTkuNCAzLTExIDUuNi0yMi40IDguNy0zMi40IDExLTQyLjUgMTAuMy01MC42IDE2LjUtNjguMyAuOC0xLjggNi40LTIzLjEgMTAuMy0yOS45IDkuMy0xNyAyMS43LTMyLjQgMzMuNS00Ny40IDE4LTIyLjkgMzQtNDYuOSA1Mi02OS44IDYuMS03IDguMi0xMy43IDE4LTggMTAuOCA1LjcgMjEuNiA3IDMxLjkgMTcgMTQuNiAxMi44IDEwLjIgMTguMiAxMS44IDIyLjkgMS41IDUgNy43IDEwLjUgMTQuOSA5LjUgMTAuNC0yIDEzLTIuNSAxMy40LTIuNSAyLjYtLjUgNS43LTUgNy4yLTggMy4xLTUuNSA3LjItOSA3LjItMTYuNSAwLTcuNy0uNC0yLjgtMjAuNi01Mi45eiJdCiAgICB9OwogICAgZmFUd2l0Y2ggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidHdpdGNoIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxZTgiLCAiTTM1OS40IDEwMy41bC0zOC42IDAgMCAxMDkuNyAzOC42IDAgMC0xMDkuN3pNMjUzLjIgMTAzbC0zOC42IDAgMCAxMDkuOCAzOC42IDAgMC0xMDkuOHpNODkgMGwtOTYuNSA5MS40IDAgMzI5LjIgMTE1LjggMCAwIDkxLjQgOTYuNS05MS40IDc3LjMgMCAxNzMuOC0xNjQuNiAwLTI1Ni0zNjYuOSAwek00MTcuMyAyMzcuOGwtNzcuMiA3My4xLTc3LjIgMC02Ny42IDY0IDAtNjQtODYuOSAwIDAtMjc0LjMgMzA4LjkgMCAwIDIwMS4yeiJdCiAgICB9OwogICAgZmFLaWNrc3RhcnRlcksgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAia2lja3N0YXJ0ZXItayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2JjIiwgIk0zNTYuNyAyNTYuMmw0MC44LTQwLjVjNDIuMi00MS45IDQyLjItMTEwLjMgMC0xNTIuMXMtMTExLTQxLjktMTUzLjIgMEwyMjkuMyA3OC40QzIwOS42IDUwLjMgMTc3LjEgMzIgMTQwLjIgMzIgODAuNSAzMiAzMiA4MC4yIDMyIDEzOS41bDAgMjMzYzAgNTkuNCA0OC41IDEwNy41IDEwOC4yIDEwNy41IDM3LjEgMCA2OS4zLTE4LjMgODktNDYuNGwxNC45IDE0LjdjNDIuMiA0MS45IDExMSA0MS45IDE1My4yIDBzNDIuMi0xMTAuMyAwLTE1Mi4xbC00MC44LTQwIC4xIDB6Il0KICAgIH07CiAgICBmYUNyaXRpY2FsUm9sZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcml0aWNhbC1yb2xlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY2YzkiLCAiTTIyNS44IDBjLjMgLjIgMjE2LjYgMTI0LjUgMjE3LjEgMTI0LjcgMyAxLjIgMy43IDMuNSAzLjcgNi42LS4xIDgzLjQtLjEgMTY2LjkgMCAyNTAuNCAuMSAxLjItLjIgMi40LS44IDMuNHMtMS41IDEuOS0yLjYgMi40Yy0yMS40IDEyLTIwNy45IDExOC4zLTIxOC45IDEyNC42bC0zIDBjLTc5LjMtNDUuNy0yMTguMy0xMjUuNC0yMTguNC0xMjUuNS0uNi0uMy0xLjEtLjctMS40LTEuM3MtLjUtMS4yLS40LTEuOWMwLS45IDAtMjI1LjktLjEtMjUzLjEtLjEtMSAuMi0yIC43LTIuOXMxLjMtMS42IDIuMi0yQzI3LjIgMTEyLjEgMjEzLjIgNiAyMjQuMSAwbDEuOCAwek0yMTUuNCAyMC40bC0uMi0uMmMtNjQuNyAzNi45LTEyOS41IDczLjctMTk0LjIgMTEwLjYgMCAuMSAuMSAuMiAuMSAuNEw1MiAxNDIuOWMtNy43IDYtOC4zIDYtMTAuNiA1LjEtLjEgMC0yNC4yLTkuMy0yNi44LTEwbDAgMjMwLjRjLjktMS40IDY0LjEtMTEwLjkgNjQuMS0xMTEgMS42LTIuOCAzLTEuOSA5LjEtMS41IDEuNCAuMSAxLjUgLjIgLjggMS40LTQxLjIgNzEuMy0zNi40IDYzLTY3LjUgMTE2LjktLjggMS40LS42IDEuMSAxLjIgMS4xbDE4Ni41IDBjMS40IDAgMS43LS4yIDEuNy0xLjZsMC04LjljMC0xLjMgMi40LS44LTE4LjQtMS03LjUtLjEtMTQuMS0zLjItMjEuNC0xMi43LTcuNC05LjctMTQuNi0xOS40LTIxLjgtMjkuMi0yLjMtMy4xLTMuNC0yLjQtMTYuOC0yLjQtMS44IDAtMS44IDAtMS44IDEuOCAuMyAyNi4yIC4yIDI1LjMgMSAzMi43IC41IDQuNCAyLjIgNC4yIDkuNyA0LjggMy4xIC4zIDMuOSA0LjEgLjUgNC45LTEuNiAuNC0zMS42IC41LTMzLjctLjEtLjUtLjEtMS0uNS0xLjMtLjlzLS41LTEtLjQtMS42IC4zLTEuMSAuNi0xLjUgLjktLjcgMS40LS44YzMuMy0uOCA2LjIgLjggNi43LTQuNCAxLjMtMTMuNyAxLjItOSAxLjEtNzkuNCAwLTEwLjgtLjQtMTIuNi01LjQtMTMuNi0xLjItLjItMy41LS4yLTQuNy0uNi0yLjktMS0yLTQuOCAxLjgtNC44IDMzLjcgMCA0Ni4xLTEuMSA1Ni4xIDQuOSA3LjcgNC42IDEyIDExLjUgMTIuNSAyMC40IC45IDE0LjYtNi41IDIyLjMtMTUgMzIuNi0uMiAuMS0uMyAuMy0uNCAuNXMtLjEgLjQtLjEgLjYgMCAuNCAuMSAuNiAuMiAuNCAuNCAuNWMyLjYgMy4yIDUgNi42IDcuNyA5LjggMjcuNiAzMy4yIDI0LjEgMzAuNSA0MS4zIDMzLjEgLjkgLjEgMS0uNCAxLTEuMmwwLTExYzAtMSAuMy0xLjQgMS40LTEuMyA3LjggMS4yIDE1LjggMS4xIDIzLjYtLjMgMS4xLS4xIDEuNSAuMiAxLjUgMS4zIDAgLjEgLjkgMjYuNyAuOSAyNi44IDAgMS41IC43IDEuNiAxLjkgMS42bDE4Ni43IDBjLTI3LjItNDctNTQuMi05NC04MS4yLTE0MC44IDIuMy0uNy0uNCAwIDYuNy0xLjQgMi0uNCAyLjEtLjQgMy4xIDEuNCA3LjMgMTIuNiA3Ny4zIDEzNCA3Ny40IDEzNC4xbDAtMjMwLjRjLTEuNyAuNS0xMDMuMyAzOC43LTEwNS44IDM5LjctMS4xIC40LTEuNSAuMi0xLjktLjktLjYtMS45LTEuMy0zLjgtMi4xLTUuNi0uMy0uOC0uMS0xLjEgLjYtMS40IC4xIDAgOTUuNS0zNS44IDEwMy0zOC44LTY1LjQtMzcuNi0xMzAuNi03NS0xOTYtMTEyLjZsODYuOCAxNTAuNC0uMyAuM2MtOS42LS45LTEwLjUtMS42LTExLjgtMy45LTEtMS43LTczLjUtMTI3LjctODItMTQyLjItOS4xIDE0LjctODMuNiAxNDYuMi04NS40IDE0Ni4zLTIuOSAuMi01LjkgLjEtOS4yIC4xIDI4LjgtNDkuOCA1Ny42LTk5LjUgODYuMi0xNDlsMCAwem01MS45IDEyOS45YzEuOS0uMSAzLjctLjQgNS41LS44IDEuNy0uMyAyLjUgLjIgMi42IDEuOSAwIC4xIC4xIDE5LjEtLjkgMjAuNXMtMS45IDEuMi0yLjYtLjJjLTUtOS43IDYuMi05LjctMzkuMS0xMi0uNyAwLTEgLjItMSAuOSAwIC4xIDMuNyAxMjIgMy43IDEyMi4xIDAgLjkgLjUgMS4yIDEuMiAxLjUgMyAxLjIgNS45IDIuNSA4LjcgNCA3LjMgNC4zIDExLjQgMTAuOCAxMi40IDE5LjMgMS40IDExLjgtMi44IDM1LjgtMzIuMiAzNy4xLTIuOCAuMS0yOC4zIDEuMS0zNC4xLTIzLjMtNC43LTE5LjMgOC4zLTMyLjcgMTkuOS0zNi40IC42LS4xIDEuMi0uNCAxLjUtLjlzLjUtMS4xIC41LTEuN2MuMS01LjYgMy0xMDcuMSAzLjctMTIxLjMgMC0xLjEtLjYtMS4yLTEuNC0xLjEtMzIuMyAuNS0zNi43LS4zLTQwLjIgOC41LTIuNCA2LjItNC4xIDEuMy00IC4yIDEuMS02IDIuMi0xMiAzLjMtMTggLjQtMi4xIDEuNC0yLjYgMy40LTEuOSA1LjYgMi4xIDYuNyAxLjcgMzcuMiAxLjkgMS43IDAgMS44LS4xIDEuOC0xLjggLjctMjcuNSAuNi0yMi42IDEtMjkuNiAuMS0uNi0uMS0xLjItLjMtMS43cy0uNy0uOS0xLjMtMS4xYy01LjYtMi45LTguOC03LjYtOC45LTEzLjktLjQtMTQuOCAxNy43LTIxLjcgMjcuNC0xMS41IDYuOCA3LjIgNS44IDE4LjktMi41IDI0LjItLjggLjQtMS40IDEuMS0xLjggMS44cy0uNiAxLjYtLjQgMi41YzAgLjYtLjEtNC4zIDEgMzAgMCAuOSAuNCAxLjEgMS4yIDEuMSAuMSAwIDIzLS4xIDM0LjUtLjRsMC0uMXpNNjguMyAxNDEuN2MxOS44LTQuNSAzMi43LS42IDUyLjUgMS43IDIuOCAuMyAzLjcgMS4yIDMuNiA0LS4yIDUtMS4yIDIyLjMtMS4yIDIzLjEgMCAuNS0uMiAxLS41IDEuNHMtLjcgLjctMS4yIC45Yy00LjEgMS43LTMuNi00LjQtNC03LjMtMy4xLTIyLjQtNzMuOS0zMi43LTc0LjYgMjUuNC0uMyAyMy45IDE3IDUzLjYgNTQuMSA1MC45IDI3LjItMiAxOS0yMC4yIDI0LjgtMjAuNSAuNC0uMSAuOSAwIDEuMyAuMXMuOCAuNCAxLjEgLjcgLjUgLjcgLjYgMS4yIC4xIC45IDAgMS4zYy0xLjggMTAuOC0zLjQgMTktMy40IDE5LjItMS41IDkuMi04Ni43IDIyLjEtOTMuNC00Mi4xLTIuNy0yNS44IDEwLjQtNTMuNCA0MC4zLTYwLjJ6bTgwIDg3LjdsLTE5LjUgMGMtLjYgMC0xLjItLjEtMS42LS40cy0uOC0uOC0xLTEuNGMyLjQtMy44IDUuOSAuOSA1LjktNi4xLS4xLTI1LjggLjItMzggLjItNDAuMSAwLTMuNC0uNS00LjYtMy4zLTQuOS03LS43LTMuMS0zLjQtMS4xLTMuNCAxMS44LS4xIDIyLjYtLjIgMzAgLjcgOC44IDEuMSAxNi43IDEyLjYgNy45IDIyLjYtMiAyLjItNCA0LjQtNi4xIDYuNyAxIDEuMiA2LjkgOC44IDE3LjMgMTkuNyAyLjcgMi44IDYuMiAzLjUgOS45IDMuMSAuNiAwIDEuMS0uMiAxLjUtLjZzLjctLjkgLjctMS41Yy4zLTMuNCAuMyA0LjcgLjQtNDAuNiAwLTUuNi0uMy02LjYtMy4yLTYuOC00LS40LTQtMi4zLS43LTMuNGwxOS4xLS4xYy4zIDAgNC41IC41IDEgMy40IDAgMC0uMiAwLS4yIDAtMy42IC4zLTMuOSAxLTQgNC42LS4zIDQzLjkgLjEgNDAuMiAuNCA0Mi44IC4xIC44IC4zIDIuMiA1LjEgMi4xIDIuNSAwIDMuOSAzLjQgMCAzLjQtMTAuNCAuMS0yMC43IDAtMzEuMSAuMS0xMC43IDAtMTMuNS02LjItMjQuMi0yMC44LTEuNi0yLjItOC4zLTIuNC04LjItLjQgLjkgMTYuNSAwIDE3LjggNCAxNy43IDQuOC0uMSA0LjcgMy42IC44IDMuNWwuMSAwem0yNzUtMTAuMWMtMS4yIDcuMSAuMiAxMC40LTUuMyAxMC4zLTYxLjUtLjQtNDcuOC0uMi01MC43LS4zLTEuMi0uMS0yLjQtLjQtMy42LS43LTIuNS0uNiAxLjUtMS4yLS40LTUuNi0xLjQtMy40LTIuOC02LjgtNC4xLTEwLjItLjEtLjQtLjQtLjgtLjctMS4xcy0uOC0uNC0xLjMtLjRjLTQuOS0uMi05LjctLjItMTQuNiAuMS0uMyAwLS42IC4yLS45IC4zcy0uNSAuNC0uNyAuN2MtMS42IDMuNi0zLjEgNy4zLTQuNSAxMS0xLjMgMy4yIDcuOSAxLjMgMTIuMiAyLjIgMyAuNiA0LjUgMy43IC43IDMuN2wtMjYuNCAwYy0yLjkgMC0zLjEtMy4yLS43LTMuMiAxLjIgLjEgMi40LS4yIDMuNS0uOXMxLjktMS41IDIuNC0yLjZjMS41LTMgMi44LTYgNC4xLTkuMSAxOC4yLTQyLjEgMTcuMS00MC4yIDE4LjQtNDEuNiAuMi0uMiAuNC0uNCAuNy0uNnMuNi0uMiAuOC0uMiAuNiAuMSAuOCAuMiAuNSAuMyAuNyAuNmMyLjkgMy4zIDE4LjQgNDQuNyAyMy42IDUxLjkgMiAyLjcgNS43IDIgNi40IDIgMy42IC4xIDQtMS4xIDQuMS00LjMgLjEtMS45IC4xIDEuMiAuMS00MS4yIDAtNC41LTIuNC0zLjctNS42LTQuMy0uMyAwLTIuNi0uNi0uMS0zLjEgLjItLjItLjktLjIgMjEuNy0uMiAyLjMgMCA1LjMgMi44LTEuMiAzLjQtLjQgMC0uNyAwLTEuMSAuMnMtLjYgLjMtLjkgLjYtLjQgLjYtLjYgLjktLjIgLjctLjEgMS4xYy0uMSAxLjYtLjIgMzguOSAuMyA0MS4yIC4yIC43IC42IDEuNCAxLjIgMS44czEuMyAuNyAyLjEgLjZjMTMuMyAuNCAxNC45IC40IDE2LTMuNCAxLjctNS44IDQuMS0yLjUgMy43LS4ybDAgLjF6TTMxOC42IDI4My42Yy00LjIgMC00LjQtMy40LS42LTMuNCAzNS45LS4yIDI4LjEgLjQgMzcuMi0uNiAxLjctLjIgMi40IC4yIDIuMyAxLjktLjMgMy40LS42IDYuOC0xIDEwLjItLjIgMi4yLTMuMiAyLjYtMy40LS4yLS40LTUuMy0yLjItNC41LTE1LjYtNS4xLTEuNi0uMS0xLjYgMC0xLjYgMS41bDAgMTYuMWMwIDEuNyAwIDEuNiAxLjYgMS41IDMuMS0uMiAxMC4zIC4zIDE1LjctMS41IC41LS4yIDMuMy0xLjggMy4xIDEuOCAwIC4yLS44IDEwLjQtMS4yIDExLjQtLjUgMS4zLTEuOSAxLjUtMi42IC4zLTEuMi0yIDAtNS4xLTMuNy01LjMtMTUuNC0uOS0xMi45LTIuNS0xMi45IDYgMCAxMi4zLS44IDE2LjEgMy45IDE2LjIgMTYuNiAuNSAxNC40IDAgMTYuNC01LjcgLjgtMi40IDMuNS0xLjggMy4yIC42LS40IDMuMi0uOCA2LjQtMS4yIDkuNiAwIC40LS4yIDIuNC00LjcgMi40LTM3LjItLjEtMzQuNS0uMi0zNS4yLS4zLTIuNy0uNS0yLjItMyAuMi0zLjQgMS4xLS4yIDQgLjUgNC4yLTIuNiAyLjQtNTYuMi0uMS01MS4zLTMuOS01MS4zbDAgMHptLS40LTEwOS41YzIuNSAuNiAzLjEgMS44IDMgNC42LS4zIDUuMy0uMyA5LS42IDkuNy0uNyAyLjItMy4xIDIuMS0zLjMtLjMtLjQtNC44LTMtNy44LTcuNi05LjEtMjYuMy03LjctMzIuOCAxNS41LTI3LjIgMzAuMiA1LjkgMTUuNCAyMiAxNS45IDI4LjkgMTMuOCA1LjktMS45IDUuOS02LjUgNi45LTcuNiAxLjItMS4zIDIuMi0xLjggMy4xIDEuMSAwIC4xIC42IDExLjktNiAxMi43LTEuNiAuMi0xOS40IDMuNy0zMi43LTMuNC0yMS0xMS4yLTE2LjctMzUuNS02LjktNDUuMyAxNC0xNC4xIDM5LjktNy4xIDQyLjMtNi41bDAgMHpNMjg5LjggMjgwLjFjMy4zIDAgMy43IDMgLjIgMy40LTIuNiAuMy01LS40LTUgNS41IDAgMi0uMiAyOSAuNCA0MS40IC4xIDIuMyAxLjIgMy41IDMuNCAzLjcgMjIgMS4yIDE1LTEuNyAxOC44LTYuMyAxLjgtMi4yIDIuOCAuOCAyLjggMS4xIC4zIDEzLjYtNCAxMi40LTUuMiAxMi40bC0zOC4yLS4yYy0xLjktLjItMi4xLTMtLjQtMy40IDItLjUgNC45IC40IDUuMS0yLjggMS0xNS45IC42LTQ0LjYgLjMtNDcuOC0uMy0zLjgtMi44LTMuMy01LjctMy43LTIuNS0uNC0yLTMuMiAuMy0zLjIgMS40IDAgMTggMCAyMy4xIDB6bS0zMS42LTU3LjhjLjEgNC4xIDIuOSAzLjUgNiAzLjYgMi42IC4xIDIuNSAzLjQtLjEgMy40LTYuNSAwLTEzLjcgMC0yMS42LS4xLTMuOCAwLTMuNC0zLjQgMC0zLjQgNC41IDAgMy4yIDEuNiAzLjQtNDUuNSAwLTUuMS0zLjMtMy41LTQuNy00LjItMi42LTEuMi0xLjQtMy4xIC40LTMuMiAxLjMgMCAyMC4yLS40IDIxLjIgLjJzMS45IDEuNi0uNCAyLjljLTEgLjUtMy45LS4zLTQuMiAyLjUgMCAuMi0uOCAxLjYtLjEgNDMuOGwwIDB6TTIyMS4zIDQ5Ni42Yy41IC4zIDEgLjUgMS42IC41czEuMS0uMiAxLjYtLjVjMTctOS44IDE4Mi0xMDMuNiAxOTcuNC0xMTIuNS0uMS0uNCAxMS4zLS4yLTE4MS41LS4zLTEuMiAwLTEuNiAuNC0xLjUgMS42IDAgLjEgMS4zIDQ0LjUgMS4yIDUwLjQtLjEgMi42LS42IDUuMi0xLjQgNy43LS42IDEuOCAuNC0uNS0xMy41IDMyLjItLjcgMS43LTEgMi4yLTItLjEtNC4yLTEwLjMtOC4zLTIwLjctMTIuNi0zMS0xLjUtMy40LTIuMi03LjEtMi0xMC44IC4yLTIuNSAuOC0xNi4xIDEuNS00OCAwLTEuOSAwLTItMi0ybC0xODMgMGMyLjYgMS42IDE3OC4zIDEwMi42IDE5NiAxMTIuOGwuMSAwek0xMzAuNCAzMDcuOWMwIDIuNCAuNCAyLjggMi44IDMgMTEuNSAxLjIgMjEgMy43IDI1LjYtNy4zIDYtMTQuNSAyLjctMzQuNC0xMi41LTM4LjgtMi0uNi0xNi0yLjgtMTUuOSAxLjUgMCA4IDAgMTEuNiAwIDQxLjZ6bTEwNS44LTE1YzAgMi4xIDEuMSAzOC43IDEuMSAzOS4xIC4zIDkuOS0yNS42IDUuOC0yNS4yLTIuNiAuMS0yIDEuNC0zNy40IDEuMS0zOS40LTE0LjEgNy40LTE0LjQgNDAuMiA2LjQgNDguOCA0IDEuNyA4LjQgMS45IDEyLjUgLjZzNy42LTQgOS45LTcuN2M0LjktNy44IDYuOC0yOS41LTUuNC0zOS0uMSAuMS0uMiAuMS0uNCAuMWwwIDB6bS0xMi4zLTE5OGMtOS44IDAtOS43IDE0LjgtLjEgMTQuOXMxMC4xLTE0LjkgLjEtMTQuOWwwIDB6TTE0My43IDE5OC42YzAgMS44IC40IDIuNCAyLjIgMi42IDEzLjYgMS40IDEyLjUtMTEgMTIuMi0xMy40LTEuNy0xMS4yLTE0LjQtMTAuMi0xNC40LTcuOCAwIDQuNSAwIDEzLjcgMCAxOC42ek0zNTYgMjA1bC02LjEtMTUuOGMtMi4yIDUuNS00LjIgMTAuNi02LjIgMTUuOGwxMi4zIDB6Il0KICAgIH07CiAgICBmYVN0ZWFtU3ltYm9sID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0ZWFtLXN5bWJvbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2Y2IiwgIk0yNzMuNSAxNzcuNWE2MSA2MSAwIDEgMSAxMjIgMCA2MSA2MSAwIDEgMSAtMTIyIDB6bTE3NC41IC4yYzAgNjMtNTEgMTEzLjgtMTEzLjcgMTEzLjhMMjI1IDM3MS4zYy00IDQzLTQwLjUgNzYuOC04NC41IDc2LjgtNDAuNSAwLTc0LjctMjguOC04My02N0wwIDM1OCAwIDI1MC43IDk3LjIgMjkwYzE1LjEtOS4yIDMyLjItMTMuMyA1Mi0xMS41bDcxLTEwMS43QzIyMC43IDExNC41IDI3MS43IDY0IDMzNC4yIDY0IDM5NyA2NCA0NDggMTE1IDQ0OCAxNzcuN3pNMjAzIDM2M2MwLTM0LjctMjcuOC02Mi41LTYyLjUtNjIuNS00LjUgMC05IC41LTEzLjUgMS41bDI2IDEwLjVjMjUuNSAxMC4yIDM4IDM5IDI3LjcgNjQuNS0xMC4yIDI1LjUtMzkuMiAzOC02NC43IDI3LjUtMTAuMi00LTIwLjUtOC4zLTMwLjctMTIuMiAxMC41IDE5LjcgMzEuMiAzMy4yIDU1LjIgMzMuMiAzNC43IDAgNjIuNS0yNy44IDYyLjUtNjIuNXpNNDEwLjUgMTc3LjdhNzYuNCA3Ni40IDAgMSAwIC0xNTIuOCAwIDc2LjQgNzYuNCAwIDEgMCAxNTIuOCAweiJdCiAgICB9OwogICAgZmFNYWlsY2hpbXAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWFpbGNoaW1wIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1OWUiLCAiTTMzMSAyNDMuNWMzLjEtLjQgNi4yLS40IDkuMyAwIDEuNy0zLjggMi0xMC40IC41LTE3LjYtMi4yLTEwLjctNS4zLTE3LjEtMTEuNS0xNi4xcy02LjUgOC43LTQuMiAxOS40YzEuMyA2IDMuNSAxMS4xIDYgMTQuM2wwIDB6TTI3Ny40IDI1MmM0LjUgMiA3LjIgMy4zIDguMyAyLjEgMS45LTEuOS0zLjUtOS40LTEyLjEtMTMuMS01LTIuMS0xMC40LTIuOC0xNS44LTIuMnMtMTAuNSAyLjctMTQuOCA1LjhjLTMgMi4yLTUuOCA1LjItNS40IDcuMSAuOSAzLjcgMTAtMi43IDIyLjYtMy41IDctLjQgMTIuOCAxLjggMTcuMyAzLjdsMCAwem0tOSA1LjFjLTkuMSAxLjQtMTUgNi41LTEzLjUgMTAuMSAuOSAuMyAxLjIgLjggNS4yLS44IDYtMi4zIDEyLjQtMi45IDE4LjctMS45IDIuOSAuMyA0LjMgLjUgNC45LS41IDEuNS0yLjItNS43LTgtMTUuNC02LjlsMCAwem01NC4yIDE3LjFjMy40LTYuOS0xMC45LTEzLjktMTQuMy03czEwLjkgMTMuOSAxNC4zIDdsMCAwem0xNS43LTIwLjVjLTcuNy0uMS04IDE1LjgtLjMgMTUuOXM4LTE1LjggLjMtMTZsMCAwek0xMTkuNSAzMzIuN2MtMS4zIC4zLTYgMS41LTguNS0yLjMtNS4yLTggMTEuMS0yMC40IDMtMzUuOC05LjEtMTcuNS0yNy44LTEzLjUtMzUtNS41LTguNyA5LjYtOC43IDIzLjUtNSAyNC4xIDQuMyAuNiA0LjEtNi41IDcuNC0xMS42IC45LTEuNCAyLjEtMi42IDMuNS0zLjZzMy0xLjYgNC42LTIgMy40LS40IDUgMCAzLjMgMSA0LjcgMS45YzExLjYgNy42IDEuNCAxNy44IDIuMyAyOC42IDEuNCAxNi43IDE4LjQgMTYuNCAyMS42IDkgLjItLjQgLjMtLjggLjMtMS4ycy0uMi0uOC0uNS0xLjFjMCAuOSAuNy0xLjMtMy40LS40bDAgMHptMjk5LjctMTcuMWMtMy4zLTExLjctMi42LTkuMi02LjgtMjAuNSAyLjQtMy43IDE1LjMtMjQtMy4xLTQzLjMtMTAuNC0xMC45LTMzLjktMTYuNS00MS4xLTE4LjUtMS41LTExLjQgNC42LTU4LjctMjEuNS04MyAyMC44LTIxLjYgMzMuOC00NS4zIDMzLjctNjUuNy0uMS0zOS4yLTQ4LjItNTEtMTA3LjQtMjYuNWwtMTIuNSA1LjNjLS4xIDAtMjIuNy0yMi4zLTIzLjEtMjIuNi02Ny41LTU4LjktMjc4LjggMTc1LjktMjExLjMgMjMyLjlsMTQuOCAxMi41Yy00IDEwLjctNS40IDIyLjItNC4xIDMzLjUgMy40IDMzLjQgMzYgNjAuNCA2Ny41IDYwLjQgNTcuNyAxMzMuMSAyNjcuOSAxMzMuMyAzMjIuMyAzIDEuNy00LjUgOS4xLTI0LjYgOS4xLTQyLjRzLTEwLjEtMjUuMy0xNi41LTI1LjNsMCAwem0tMzE2IDQ4LjJjLTIyLjgtLjYtNDcuNS0yMS4xLTQ5LjktNDUuNS02LjItNjEuMyA3NC4zLTc1LjMgODQtMTIuMyA0LjUgMjkuNi00LjcgNTguNS0zNC4xIDU3LjhsMCAwek04NC43IDI0OS42Yy0xNS4yIDMtMjguNSAxMS41LTM2LjcgMjMuNS00LjktNC4xLTE0LTEyLTE1LjYtMTUtMTMtMjQuOCAxNC4yLTczIDMzLjMtMTAwLjIgNDcuMS02Ny4yIDEyMC45LTExOC4xIDE1NS0xMDguOSA1LjUgMS42IDIzLjkgMjIuOSAyMy45IDIyLjlzLTM0LjEgMTguOS02NS44IDQ1LjNDMTM2LjIgMTUwIDEwNCAxOTcuNyA4NC43IDI0OS42ek0zMjMuNiAzNTAuN3MtMzUuNyA1LjMtNjkuNS03LjFjNi4yLTIwLjIgMjcgNi4xIDk2LjQtMTMuOCAxNS4zLTQuNCAzNS40LTEzIDUxLTI1LjQgMy40IDcuOCA1LjggMTUuOSA3LjEgMjQuMyAzLjctLjcgMTQuMi0uNSAxMS40IDE4LjEtMy4zIDE5LjktMTEuNyAzNi0yNS45IDUwLjgtOC45IDkuNi0xOS40IDE3LjUtMzEuMiAyMy4zLTYuNSAzLjQtMTMuMyA2LjMtMjAuMyA4LjYtNTMuNSAxNy41LTEwOC4zLTEuNy0xMjYtNDMtMS40LTMuMS0yLjYtNi40LTMuNi05LjctNy41LTI3LjItMS4xLTU5LjggMTguOC04MC40IDEuMi0xLjMgMi41LTIuOSAyLjUtNC44LS4yLTEuNy0uOC0zLjMtMS45LTQuNS03LTEwLjEtMzEuMi0yNy40LTI2LjMtNjAuOCAzLjUtMjQgMjQuNS00MC45IDQ0LjEtMzkuOWw1IC4zYzguNSAuNSAxNS45IDEuNiAyMi45IDEuOSAxMS43IC41IDIyLjItMS4yIDM0LjYtMTEuNiA0LjItMy41IDcuNi02LjUgMTMuMy03LjUgMi4zLS42IDQuNy0uNyA3LS4zczQuNiAxLjIgNi42IDIuNWMxMCA2LjYgMTEuNCAyMi43IDExLjkgMzQuNSAuMyA2LjcgMS4xIDIzIDEuNCAyNy42IC42IDEwLjcgMy40IDEyLjIgOS4xIDE0IDMuMiAxIDYuMiAxLjggMTAuNSAzLjEgMTMuMiAzLjcgMjEgNy41IDI2IDEyLjMgMi41IDIuNSA0LjIgNS44IDQuNyA5LjMgMS42IDExLjQtOC44IDI1LjQtMzYuMyAzOC4yLTQ2LjcgMjEuNy05My43IDE0LjQtMTAwLjUgMTMuNy0yMC4yLTIuNy0zMS42IDIzLjMtMTkuNSA0MS4xIDIyLjYgMzMuNCAxMjIuNCAyMCAxNTEuNC0yMS40IC43LTEgLjEtMS42LS43LTEtNDEuOCAyOC42LTk3LjEgMzguMi0xMjguNSAyNi00LjgtMS44LTE0LjctNi40LTE1LjktMTYuNyA0My42IDEzLjUgNzEgLjcgNzEgLjdzMi0yLjgtLjYtMi41ek0xNzEuNyAxNTcuNWMxNi43LTE5LjQgMzcuNC0zNi4yIDU1LjgtNDUuNiAuMS0uMSAuMy0uMSAuNS0uMXMuMyAuMSAuNCAuMiAuMiAuMyAuMiAuNCAwIC4zLS4xIC41Yy0xLjUgMi43LTQuMyA4LjMtNS4yIDEyLjcgMCAuMSAwIC4zIDAgLjRzLjIgLjMgLjMgLjQgLjMgLjEgLjQgLjEgLjMgMCAuNC0uMWMxMS41LTcuOCAzMS41LTE2LjIgNDktMTcuMyAuMiAwIC4zIDAgLjUgLjFzLjIgLjIgLjMgLjQgLjEgLjMgMCAuNS0uMSAuMy0uMyAuNGMtMi45IDIuMi01LjUgNC44LTcuNyA3LjctLjEgLjEtLjEgLjItLjEgLjRzMCAuMyAuMSAuNCAuMiAuMiAuMyAuMyAuMiAuMSAuNCAuMWMxMi4zIC4xIDI5LjcgNC40IDQxIDEwLjcgLjggLjQgLjIgMS45LS42IDEuNy02OS41LTE1LjktMTIzLjEgMTguNS0xMzQuNSAyNi44LS4yIC4xLS4zIC4xLS41IC4xcy0uMy0uMS0uNS0uMi0uMi0uMy0uMi0uNSAuMS0uNCAuMi0uNWwtLjEgMHoiXQogICAgfTsKICAgIGZhTHVtb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibHVtb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTdlMiIsICJNNDUyLjUgMjIzLjVjOS44IDAgMTYuNSA2LjMgMTYuNSAxNi42bDAgMzEuOGMwIDEwLjMtNi42IDE2LjYtMTYuNiAxNi42bC01Ni4yIDBjLTkuOCAwLTE2LjUtNi4zLTE2LjUtMTYuNmwwLTMxLjhjMC0xMC4zIDYuNy0xNi42IDE2LjUtMTYuNmw1Ni4zIDB6bS0yNS43IDEzLjFjLTEuNS0yLjYtMy4yLTIuNi00LjYgMGwtMTAuNyAxNy42Yy0xLjcgMi40LTIuNiA1LjEtMi42IDguMiAwIDcuOSA2LjkgMTQuNiAxNS42IDE0LjYgOC41IDAgMTUuNi02LjcgMTUuNi0xNC42IDAtMy0xLTUuOC0yLjctOC4ybC0xMC43LTE3LjZ6TTg1LjggMjIzLjhjMSAwIDEuNSAuNiAxLjUgMS41bDAgNTAuMyA2NC42IDBjMSAwIDEuNiAuNiAxLjYgMS41bDAgOS43YzAgLjktLjYgMS41LTEuNiAxLjVsLTc4LjQgMGMtMSAwLTEuNi0uNi0xLjYtMS41bDAtNjEuNGMwLS45IC42LTEuNSAxLjYtMS41bDEyLjMgMHptODguMyAwYzEgMCAxLjUgLjYgMS41IDEuNWwwIDQ1YzAgNCAyIDUuMiA1LjcgNS4ybDQ2LjkgMGMzLjggMCA1LjctMS4zIDUuNy01LjJsMC00NWMwLS45IC41LTEuNSAxLjUtMS41bDEyLjMgMGMxIDAgMS42IC42IDEuNiAxLjVsMCA0NmMwIDEwLjUtNS4zIDE2LjgtMTcuNiAxNi44bC01NCAwYy0xMi4zIDAtMTcuNi02LjMtMTcuNi0xNi44bDAtNDZjMC0uOSAuNi0xLjUgMS42LTEuNWwxMi4zIDB6bTEwOC4yIDBjMSAwIDEuNiAuNSAyLjIgMS40bDMwLjUgNDYuNCAxLjQgMCAzMC41LTQ2LjRjLjYtLjkgMS4yLTEuNCAyLjItMS40bDE4IDBjMSAwIDEuNSAuNiAxLjUgMS41bDAgNjEuNGMwIC45LS41IDEuNS0xLjUgMS41bC0xMi4zIDBjLTEgMC0xLjYtLjYtMS42LTEuNWwwLTQzLjgtMS4xIDAtMjguNyA0My44Yy0uNiAuOS0xLjMgMS41LTIuNCAxLjVsLTEwLjcgMGMtMSAwLTEuNy0uNi0yLjMtMS41bC0yOC43LTQzLjgtMS4xIDAgMCA0My44YzAgLjktLjUgMS41LTEuNSAxLjVsLTEyLjMgMGMtMSAwLTEuNi0uNi0xLjYtMS41bDAtNjEuNGMwLS45IC42LTEuNSAxLjYtMS41bDE3LjkgMHptMjE0LjQgMGMuOSAwIDEuMyAuNCAyLjIgMS4xbDUyLjcgNDYuMyAxLjMgMCAwLTQ2YzAtLjkgLjYtMS41IDEuNi0xLjVsMTIuMyAwYzEgMCAxLjYgLjYgMS42IDEuNWwwIDYxLjRjMCAuOS0uNiAxLjUtMS42IDEuNWwtMTQuNCAwYy0xIDAtMS40LS40LTIuMy0xLjFsLTUyLjYtNDYuMy0xLjQgMCAwIDQ2YzAgLjktLjUgMS41LTEuNSAxLjVsLTEyLjMgMGMtMSAwLTEuNi0uNi0xLjYtMS41bDAtNjEuNGMwLS45IC42LTEuNSAxLjYtMS41bDE0LjQgMHpNMzIwIDExNC4xYzg3LjkgMCAxNjcuNyAxNS43IDIyNS41IDQxbDIuNyAxLjJDNTg3LjEgMTczLjggNjQwIDIwNi41IDY0MCAyNTZzLTUyLjkgODIuMi05MS44IDk5LjZsLTIuNyAxLjJjLTU3LjggMjUuNC0xMzcuNiA0MS0yMjUuNSA0MS03Ni4yIDAtMTU1LjEtMTAuNS0yMjUuNS00MS0zOS42LTE3LjQtOTQuNS01MC4zLTk0LjUtMTAwLjhzNTQuOS04My41IDk0LjUtMTAwLjhjNzAuNC0zMC41IDE0OS4zLTQxIDIyNS41LTQxem0tODguOSAyMjljMjAuMyAyOSA1Mi44IDQ5LjYgODguOSA0OS42IDM2LjIgMCA2OC43LTIwLjYgODktNDkuN2wtMTc3LjkgLjF6bS05Ni4xIDBjNDMuMyAyOS43IDk2LjcgNDMuNSAxNDguNCA0OC0yNC4yLTkuMS00NC40LTI2LjctNTguNi00OC4xbC04OS45IDB6bTI4MC4zLS4xYy0xNC4yIDIxLjQtMzQuNCAzOS4xLTU4LjYgNDguMSA1MS44LTQuNSAxMDUuMy0xOC4zIDE0OC42LTQ4LjJsLTkwIDB6bS0zMzcuNCAuMWM0NC4xIDIzLjEgOTMuNyAzNS40IDE0Mi43IDQyLjYtMzMuNC04LjYtNjYuNS0yMS45LTk0LjQtNDIuNmwtNDguMyAwem00MzYuMi0uMmMtMjcuOSAyMC44LTYxLjEgMzQuMi05NC42IDQyLjggNDcuMy02LjkgODkuNi0xOC41IDEyMy45LTMzLjZsMS43LS44YzYuMS0yLjcgMTEuOS01LjUgMTcuNC04LjRsLTQ4LjUgMHpNNTIwIDE3My42YzEwLjcgOC43IDE5LjggMTguMSAyNyAyOC4yIC40IC42IC41IDEuMyAuMSAycy0xIDEtMS43IDFsLTEuNiAwYy0uNiAwLTEuMi0uMy0xLjUtLjgtNy45LTEwLjktMTguMi0yMS4xLTMwLjYtMzAuNGwtOTMuNSAwYzUuNCA4LjggOS45IDE4LjUgMTMuNCAyOC42IC4yIC42IC4xIDEuMi0uMiAxLjdzLS45IC44LTEuNiAuOGwtMS40IDBjLS44IDAtMS41LS41LTEuOC0xLjMtMy44LTEwLjctOC43LTIwLjgtMTQuNS0yOS45bC0xODQuMyAuMWMtNS44IDkuMS0xMC43IDE5LjEtMTQuNCAyOS44LS4zIC44LTEgMS4zLTEuOCAxLjNsLTEuNCAwYy0uNiAwLTEuMi0uMy0xLjYtLjhzLS41LTEuMS0uMi0xLjdjMy41LTEwLjIgOC0xOS43IDEzLjQtMjguNmwtOTMuNiAwYy0xMi4zIDkuMy0yMi42IDE5LjQtMzAuNCAzMC4zLS40IC41LS45IC44LTEuNSAuOGwtMS42IDBjLS43IDAtMS40LS40LTEuNy0xcy0uMy0xLjQgLjEtMmM3LjYtMTAuNSAxNi43LTE5LjkgMjYuOC0yOGwtNTEgMGMtMjguOSAxNi42LTYyIDQzLjMtNjMuNSA3OS43bDQ0LjcgMGMuNSAwIDEgLjIgMS4zIC42cy42IC44IC42IDEuM2wwIDEuM2MwIDEuMS0uOSAxLjktMS45IDEuOWwtNDQuNyAwQzYuOCAyOTUgNDAgMzIxLjcgNjkgMzM4LjNsNTAuOSAwYy0xMC4zLTguNC0xOS4xLTE3LjQtMjYuMS0yN2wtLjgtMS4xYy0uNC0uNi0uNS0xLjMtLjEtMnMxLTEgMS43LTFsMS42IDAgLjIgMGMuNSAuMSAxIC4zIDEuMyAuOCA3LjkgMTAuOSAxOC4xIDIxIDMwLjUgMzAuM2w5My42IDBjLTUuMy04LjgtOS44LTE4LjQtMTMuNC0yOC41LS4yLS42LS4xLTEuMiAuMi0xLjdzLjktLjggMS42LS44bDEuNCAwIC4yIDBjLjcgLjEgMS40IC42IDEuNyAxLjMgMy44IDEwLjcgOC42IDIwLjcgMTQuNCAyOS44bDE4NC41LS4xYzUuOC05LjEgMTAuNi0xOS4xIDE0LjQtMjkuN2wuMS0uMWMuMy0uNyAxLTEuMSAxLjctMS4xbDEuNCAwYy42IDAgMS4yIC4zIDEuNiAuOHMuNSAxLjIgLjIgMS43Yy0zLjUgMTAuMS04IDE5LjctMTMuMyAyOC41bDkzLjcgMGMxMi4zLTkuMyAyMi41LTE5LjQgMzAuMy0zMC4ybC4xLS4yYy40LS40IC45LS42IDEuNC0uNmwxLjYgMGMuNyAwIDEuNCAuNCAxLjcgMXMuMyAxLjQtLjEgMmMtNy4xIDEwLTE2LjEgMTkuMy0yNi43IDI3LjlsNTEuMSAwYzI4LjgtMTYuNiA2MS44LTQzLjMgNjMuNC03OS42bC00NC43IDBjLTEgMC0xLjktLjktMS45LTEuOWwwLTEuM2MwLTEuMSAuOS0xLjkgMS45LTEuOWw0NC43IDBjLTEuNi0zNi41LTM0LjktNjMuMy02My45LTc5LjlsLTUwLjkgMHpNMjIwLjUgMTI2LjJjLTQ5LjEgNy4xLTk4LjcgMTkuNS0xNDMgNDIuN2w0OC40IDBjMjcuOS0yMC44IDYxLTM0LjEgOTQuNS00Mi43em02Mi44LTUuNGMtNTEuOCA0LjUtMTA1LjIgMTguMy0xNDguNiA0OC4xbDkwIDBjMTQuMi0yMS40IDM0LjQtMzkgNTguNi00OC4xem0zNi42LTEuNmMtMzYuMiAwLTY4LjcgMjAuNi04OSA0OS43bDE3Ny45LS4xYy0yMC4zLTI5LjEtNTIuNy00OS42LTg4LjktNDkuNnptMzYuNiAxLjZjMjQuMiA5LjEgNDQuNCAyNi42IDU4LjUgNDhsODkuOCAwYy00My4zLTI5LjctOTYuNi00My41LTE0OC4zLTQ4em02Mi44IDUuNGMzMy40IDguNSA2Ni40IDIxLjkgOTQuMyA0Mi41bDQ4LjMgMGMtNDQuMS0yMy4xLTkzLjYtMzUuNC0xNDIuNi00Mi41eiJdCiAgICB9OwogICAgZmFOdXRyaXRpb25peCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJudXRyaXRpb25peCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2Q2IiwgIk0xMTIgOC4xUzI0NS40LS4xIDIzMyAxMTIuNWMwIDAgMTkuMS03NC45IDEwMy00MC42IDAgMC0xNy43IDc0LTg4IDU2IDAgMCAxNC42LTU0LjYgNjYuMS01Ni42IDAgMC0zOS45LTEwLjMtODIuMSA0OC44IDAgMC0xOS44LTk0LjUtOTMuNi05OS43IDAgMCA3NS4yIDE5LjQgNzcuNiAxMDcuNSAwIC4xLTEwNi40IDctMTA0LTExOS44ek00MjQgMzIzLjdjMCA0OC41LTkuNyA5NS4zLTMyIDEzMi4zLTQyLjIgMzAuOS0xMDUgNDgtMTY4IDQ4LTYyLjkgMC0xMjUuOC0xNy4xLTE2OC00OC0yMi4zLTM3LTMyLTgzLjgtMzItMTMyLjMgMC00OC40IDE3LjctOTQuNyA0MC0xMzEuNyA0Mi4yLTMwLjkgOTcuMS00OC42IDE2MC00OC42IDYzIDAgMTE3LjggMTcuNiAxNjAgNDguNiAyMi4zIDM3IDQwIDgzLjMgNDAgMTMxLjd6TTE0NCA0MjhhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwek0yMTYgNDI4YTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwem0wLTY2LjJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHpNMjg4IDQyOGEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwem0wLTY2LjJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6TTM2MCA0MjhhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwek0zODQgMjU2Yy00LjgtMjIuMy03LjQtMzYuOS0xNi01Ni0zOC44LTE5LjktOTAuNS0zMi0xNDQtMzJTMTE4LjggMTgwLjEgODAgMjAwYy04LjggMTkuNS0xMS4yIDMzLjktMTYgNTYgNDIuMi03LjkgOTguNy0xNC44IDE2MC0xNC44czExNy44IDYuOSAxNjAgMTQuOHoiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zU2FtcGxpbmdQbHVzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtc2FtcGxpbmctcGx1cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGYxIiwgIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6bTEwNyAyMDUuNmMtNC43IDAtOSAyLjgtMTAuNyA3LjJsLTQgOS41LTExLTkyLjhjLTEuNy0xMy45LTIyLTEzLjQtMjMuMSAuNGwtNC4zIDUxLjQtNS4yLTY4LjhjLTEuMS0xNC4zLTIyLjEtMTQuMi0yMy4yIDBsLTMuNSA0NC45LTUuOS05NC4zYy0uOS0xNC41LTIyLjMtMTQuNC0yMy4yIDBsLTUuMSA4My43LTQuMy02Ni4zYy0uOS0xNC40LTIyLjItMTQuNC0yMy4yIDBsLTUuMyA4MC4yLTQuMS01N2MtMS4xLTE0LjMtMjItMTQuMy0yMy4yLS4ybC03LjcgODkuOC0xLjgtMTIuMmMtMS43LTExLjQtMTcuMS0xMy42LTIyLTMuM2wtMTMuMiAyNy43LTQzLjkgMCAwIDIzLjIgNTEuMyAwYzQuNCAwIDguNC0yLjUgMTAuNC02LjRsMTAuNyA3My4xYzIgMTMuNSAyMS45IDEzIDIzLjEtLjdsMy44LTQzLjYgNS43IDc4LjNjMS4xIDE0LjQgMjIuMyAxNC4yIDIzLjItLjFsNC42LTcwLjQgNC44IDczLjNjLjkgMTQuNCAyMi4zIDE0LjQgMjMuMi0uMWw0LjktODAuNSA0LjUgNzEuOGMuOSAxNC4zIDIyLjEgMTQuNSAyMy4yIC4ybDQuNi01OC42IDQuOSA2NC40YzEuMSAxNC4zIDIyIDE0LjIgMjMuMSAuMWw2LjgtODMgMi43IDIyLjNjMS40IDExLjggMTcuNyAxNC4xIDIyLjMgMy4xbDE4LTQzLjQgNTAuNSAwIDAtMjMuMi01OC40IC4zem0tNzggNS4ybC0yMS45IDAgMCAyMS45YzAgNC4xLTMuMyA3LjUtNy41IDcuNS00LjEgMC03LjUtMy4zLTcuNS03LjVsMC0yMS45LTIxLjkgMGMtNC4xIDAtNy41LTMuMy03LjUtNy41IDAtNC4xIDMuNC03LjUgNy41LTcuNWwyMS45IDAgMC0yMS45YzAtNC4xIDMuNC03LjUgNy41LTcuNXM3LjUgMy4zIDcuNSA3LjVsMCAyMS45IDIxLjkgMGM0LjEgMCA3LjUgMy4zIDcuNSA3LjUgMCA0LjEtMy40IDcuNS03LjUgNy41eiJdCiAgICB9OwogICAgZmFSZWRoYXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVkaGF0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3YmMiLCAiTTM0MS41IDI4NS42YzMzLjcgMCA4Mi4zLTYuOSA4Mi4zLTQ3IC4yLTYuNyAuOS0xLjgtMjAuOS05Ni4yLTQuNi0xOS4xLTguNy0yNy44LTQyLjMtNDQuNi0yNi4xLTEzLjMtODIuOS0zNS40LTk5LjctMzUuNC0xNS43IDAtMjAuMiAyMC4yLTM4LjkgMjAuMi0xOCAwLTMxLjMtMTUuMS00OC4xLTE1LjEtMTYuMSAwLTI2LjcgMTEtMzQuOCAzMy42LTI3LjUgNzcuNi0yNi4zIDc0LjMtMjYuMSA3OC4zIDAgMjQuOCA5Ny42IDEwNi4xIDIyOC41IDEwNi4xek00MjkgMjU0LjhjNC43IDIyIDQuNyAyNC4zIDQuNyAyNy4yIDAgMzcuNy00Mi4zIDU4LjYtOTggNTguNi0xMjUuNyAuMS0yMzUuOS03My42LTIzNS45LTEyMi4zIDAtNi44IDEuNC0xMy41IDQuMS0xOS43LTQ1LjIgMi4zLTEwMy44IDEwLjMtMTAzLjggNjIgMCA4NC43IDIwMC42IDE4OSAzNTkuNSAxODkgMTIxLjggMCAxNTIuNS01NS4xIDE1Mi41LTk4LjYgMC0zNC4yLTI5LjYtNzMtODIuOS05Ni4yeiJdCiAgICB9OwogICAgZmFTcXVhcmVQaWVkUGlwZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXBpZWQtcGlwZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsicGllZC1waXBlci1zcXVhcmUiXSwgImUwMWUiLCAiTTMyLjEgNDE5bC0zMiA2MC4yIC44LTMyOEMuOSA4NS4zIDU0LjEgMzIgMTIwLjEgMzJsMzI3LjIgMEMzNTQuMyA2MC45IDI1Ny40IDEyNi4yIDE5My40IDIwMC42IDEyMi44IDI4MiA4Mi43IDMzOCAzMi4xIDQxOXptNDE2LTM4N1MzMDUuMyA5OC44IDI2MS43IDE5OS4xYy0yMy4yIDUzLjYtMjguOSAxMTguMS03MSAxNTguNi0yOC45IDI3LjgtNjkuOCAzOC4yLTEwNS4zIDU2LjMtMjMuMiAxMi02Ni40IDQwLjUtODQuOSA2NmwzMjguNCAwYzY2IDAgMTE5LjMtNTMuMyAxMTkuMy0xMTkuMi0uMSAwLS4xLTMyOC44LS4xLTMyOC44eiJdCiAgICB9OwogICAgZmFQaWVkUGlwZXJTcXVhcmUgPSBmYVNxdWFyZVBpZWRQaXBlcjsKICAgIGZhV2hhdHNhcHAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2hhdHNhcHAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjIzMiIsICJNMzgwLjkgOTcuMWMtNDEuOS00Mi05Ny43LTY1LjEtMTU3LTY1LjEtMTIyLjQgMC0yMjIgOTkuNi0yMjIgMjIyIDAgMzkuMSAxMC4yIDc3LjMgMjkuNiAxMTFMMCA0ODAgMTE3LjcgNDQ5LjFjMzIuNCAxNy43IDY4LjkgMjcgMTA2LjEgMjdsLjEgMGMxMjIuMyAwIDIyNC4xLTk5LjYgMjI0LjEtMjIyIDAtNTkuMy0yNS4yLTExNS02Ny4xLTE1N3ptLTE1NyAzNDEuNmMtMzMuMiAwLTY1LjctOC45LTk0LTI1LjdsLTYuNy00LTY5LjggMTguMyAxOC42LTY4LjEtNC40LTdjLTE4LjUtMjkuNC0yOC4yLTYzLjMtMjguMi05OC4yIDAtMTAxLjcgODIuOC0xODQuNSAxODQuNi0xODQuNSA0OS4zIDAgOTUuNiAxOS4yIDEzMC40IDU0LjFzNTYuMiA4MS4yIDU2LjEgMTMwLjVjMCAxMDEuOC04NC45IDE4NC42LTE4Ni42IDE4NC42ek0zMjUuMSAzMDAuNWMtNS41LTIuOC0zMi44LTE2LjItMzcuOS0xOC01LjEtMS45LTguOC0yLjgtMTIuNSAyLjhzLTE0LjMgMTgtMTcuNiAyMS44Yy0zLjIgMy43LTYuNSA0LjItMTIgMS40LTMyLjYtMTYuMy01NC0yOS4xLTc1LjUtNjYtNS43LTkuOCA1LjctOS4xIDE2LjMtMzAuMyAxLjgtMy43IC45LTYuOS0uNS05LjdzLTEyLjUtMzAuMS0xNy4xLTQxLjJjLTQuNS0xMC44LTkuMS05LjMtMTIuNS05LjUtMy4yLS4yLTYuOS0uMi0xMC42LS4ycy05LjcgMS40LTE0LjggNi45Yy01LjEgNS42LTE5LjQgMTktMTkuNCA0Ni4zczE5LjkgNTMuNyAyMi42IDU3LjRjMi44IDMuNyAzOS4xIDU5LjcgOTQuOCA4My44IDM1LjIgMTUuMiA0OSAxNi41IDY2LjYgMTMuOSAxMC43LTEuNiAzMi44LTEzLjQgMzcuNC0yNi40czQuNi0yNC4xIDMuMi0yNi40Yy0xLjMtMi41LTUtMy45LTEwLjUtNi42eiJdCiAgICB9OwogICAgZmFJbWRiID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImltZGIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJkOCIsICJNODkuNSAzMjMuNmwtMzUuNiAwIDAtMTM3LjQgMzUuNiAwIDAgMTM3LjR6bTY2LjYtNzMuMWw5LjEtNjQuMyA0Ni4zIDAgMCAxMzcuNC0zMSAwIDAtOTIuNy0xMy40IDkyLjctMjEuMyAwLTEzLTkwLjctLjEgOTAuNy0zMS4yIDAgMC0xMzcuNCA0Ni4xIDBjLjUgOC4zIDIuOCAxOC4xIDQuMyAyOS40bDQuMiAzNC45em02Ny42IDczLjFsMC0xMzcuNCAyNi42IDBjMTcgMCAyNyAuOSAzMyAyLjQgNi4xIDEuNyAxMC43IDQuMiAxMy45IDcuOSAzLjEgMy4zIDUuMSA2LjYgNS44IDEyIC45IDQuNCAxLjQgMTMuMSAxLjQgMjYuMmwwIDQ4LjJjMCAxMi4zLS43IDIwLjUtMS45IDI0LjctMS4xIDQuMS0zLjEgNy40LTYgOS43LTIuOCAyLjQtNi40IDQuMS0xMC43IDUtNC4yIC44LTEwLjYgMS4zLTE5LjEgMS4zbC00MyAwem0zNS41LTExMy45bDAgODkuNGM1LjEgMCA4LjMtMSA5LjQtMi4zIDEuMS0yIDEuOC03LjYgMS44LTE2LjdsMC01My4zYzAtNi4yLS4xLTEwLjItLjctMTItLjMtMS44LTEuMi0zLTIuNi00LjctMS40IDAtNC4xLS40LTcuOS0uNHptNTcuMyAxMTMuOWwwLTEzNy40IDM0LjEgMCAwIDQzLjljMi45LTIuNCA2LjEtNC45IDkuNS02LjYgMy42LTEuNSA4LjgtMi40IDEyLjgtMi40IDQuOCAwIDguOSAuOCAxMi4zIDIuMiAzLjQgMS41IDYgMy41IDggNi4yIDEuNyAyLjYgMi43IDUuMyAzLjEgNy44IC40IDIuNi0uMiA4LS4yIDE2LjJsMCAzOC42YzAgOC4yIC4yIDE0LjMtLjggMTguNC0xLjEgNC0zLjggNy42LTcuOCA5LjYtNC4xIDMuOS04LjkgNS4zLTE0LjYgNS4zLTQgMC05LjItLjktMTIuNy0yLjUtMy41LTEuOC02LjctNC41LTkuNi04bC0yLjEgOC43LTMyIDB6bTQ1LjEtMjAuN2MuNy0xLjggMS02IDEtMTIuNWwwLTM1LjRjMC01LjYtLjMtOS41LTEuMS0xMS4yLS43LTEuOS0zLjctMi43LTUuOC0yLjctMiAwLTMuNCAuOC00LjEgMi4zLS42IDEuNS0xIDUuNC0xIDExLjZsMCAzNi40YzAgNi4xIC40IDEwIDEuMiAxMS42IC42IDEuNyAyLjEgMi41IDQuMSAyLjUgMi4yIDAgNC4yLS44IDUuNy0yLjZ6TTQxOC40IDMyYzE1LjcgMS4yIDI4LjcgMTUuMiAyOC43IDMxLjlsMCAzODQuMmMwIDE2LjQtMTEuOSAzMC40LTI4LjIgMzEtLjMgMC0uNSAuOS0uOCAuOUwyOS45IDQ4MGMtLjMgMC0uNi0uOS0uOC0uMS0xNS43LTEuNC0yNy45LTEzLjgtMjktMzAuMkwwIDYxLjhDMS4xIDQ1LjkgMTMuOCAzMy4xIDMwLjMgMzEuMWwzODcuNCAwYy4yIDAgLjUgLjkgLjcgLjl6TTMwLjMgNDEuM0MxOSA0MiAxMCA1MSA5LjMgNjIuNGwwIDM4Ny4zYy40IDUuNCAyLjcgMTAuNSA2LjQgMTQuMyAzLjggMy45IDguOCA2LjMgMTQuMiA2LjdsMzg4LjIgMGMxMS41LTEgMjAuNi0xMS42IDIwLjYtMjIuNmwwLTM4NC4yYzAtNS43LTIuMS0xMS4zLTYtMTUuNXMtOS4zLTYuOC0xNS03LjJsLTM4Ny40IDB6Il0KICAgIH07CiAgICBmYVB5dGhvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJweXRob24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNlMiIsICJNNDM5LjggMjAwLjVjLTcuNy0zMC45LTIyLjMtNTQuMi01My40LTU0LjJsLTQwLjEgMCAwIDQ3LjRjMCAzNi44LTMxLjIgNjcuOC02Ni44IDY3LjhsLTEwNi44IDBjLTI5LjIgMC01My40IDI1LTUzLjQgNTQuM2wwIDEwMS44YzAgMjkgMjUuMiA0NiA1My40IDU0LjMgMzMuOCA5LjkgNjYuMyAxMS43IDEwNi44IDAgMjYuOS03LjggNTMuNC0yMy41IDUzLjQtNTQuM2wwLTQwLjctMTA2LjcgMCAwLTEzLjYgMTYwLjIgMGMzMS4xIDAgNDIuNi0yMS43IDUzLjQtNTQuMiAxMS4yLTMzLjUgMTAuNy02NS43IDAtMTA4LjZ6TTI4Ni4yIDQ0NC43YTIwLjQgMjAuNCAwIDEgMSAwLTQwLjcgMjAuNCAyMC40IDAgMSAxIDAgNDAuN3pNMTY3LjggMjQ4LjFsMTA2LjggMGMyOS43IDAgNTMuNC0yNC41IDUzLjQtNTQuM2wwLTEwMS45YzAtMjktMjQuNC01MC43LTUzLjQtNTUuNi0zNS44LTUuOS03NC43LTUuNi0xMDYuOCAuMS00NS4yIDgtNTMuNCAyNC43LTUzLjQgNTUuNmwwIDQwLjcgMTA2LjkgMCAwIDEzLjYtMTQ3IDBjLTMxLjEgMC01OC4zIDE4LjctNjYuOCA1NC4yLTkuOCA0MC43LTEwLjIgNjYuMSAwIDEwOC42IDcuNiAzMS42IDI1LjcgNTQuMiA1Ni44IDU0LjJsMzYuNyAwIDAtNDguOGMwLTM1LjMgMzAuNS02Ni40IDY2LjgtNjYuNHpNMTYxLjIgNjQuN2EyMC40IDIwLjQgMCAxIDEgMCA0MC44IDIwLjQgMjAuNCAwIDEgMSAwLTQwLjh6Il0KICAgIH07CiAgICBmYUNhc2hBcHAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2FzaC1hcHAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTdkNCIsICJNNDQwLjMgOTYuOWMtOS40LTI2LjUtMzAuMy00Ny40LTU2LjgtNTctMjQuMS03LjktNDYuMy03LjktOTEuNi03LjlMMTU2IDMyYy00NC44IDAtNjcuMiAwLTkxLjMgNy41LTI2LjUgOS42LTQ3LjQgMzAuNS01NyA1Ny03LjcgMjQuMy03LjcgNDYuNy03LjcgOTEuN0wwIDMyMy44YzAgNDUuMiAwIDY3LjQgNy41IDkxLjUgOS42IDI2LjUgMzAuNSA0Ny40IDU3IDU3IDI0LjMgNy43IDQ2LjcgNy43IDkxLjYgNy43bDEzNS43IDBjNDUgMCA2Ny40IDAgOTEuNi03LjcgMjYuNS05LjYgNDcuNC0zMC41IDU3LTU3IDcuNy0yNC4zIDcuNy00Ni43IDcuNy05MS41bDAtMTM1LjVjMC00NSAwLTY3LjQtNy43LTkxLjV6TTMyMy4xIDE4NS40bC0yNS44IDIxLjFjLTIuMyAxLjktNS41IDEuNS03LjMtLjktMTMuMi0xNi4yLTMzLjctMjUuNC01Ni4xLTI1LjQtMjUgMC00MC42IDEwLjktNDAuNiAyNi4yLS40IDEyLjggMTEuNyAxOS42IDQ5LjEgMjcuNyA0Ny4yIDEwIDY4LjcgMjkuNyA2OC43IDYyLjcgMCA0MS40LTMzLjcgNzEuOS04Ni40IDc1LjNsLTUuMSAyNC41Yy0uNCAyLjMtMi42IDQuMS01LjEgNC4xbC00MC42IDBjLTMuNCAwLTUuOC0zLjItNS4xLTYuNGw2LjQtMjcuM2MtMjYtNy41LTQ3LjItMjItNTkuMy0zOS43LTEuNS0yLjMtMS4xLTUuMyAxLjEtN2wyOC4yLTIyYzIuMy0xLjkgNS44LTEuMyA3LjUgMS4xIDE0LjkgMjAuOSAzOCAzMy4zIDY1LjcgMzMuMyAyNSAwIDQzLjgtMTIuMiA0My44LTI5LjcgMC0xMy40LTkuNC0xOS42LTQxLjItMjYuMi01NC4yLTExLjctNzUuOC0zMS44LTc1LjgtNjQuOSAwLTM4LjQgMzIuMi02Ny4yIDgwLjktNzFsNS4zLTI1LjRjLjQtMi4zIDIuNi00LjEgNS4xLTQuMWwzOS45IDBjMy4yIDAgNS44IDMgNS4xIDYuMmwtNi4yIDI4LjRjMjAuOSA2LjQgMzggMTcuOSA0OC43IDMyLjIgMS43IDIuMSAxLjMgNS4zLS45IDd6Il0KICAgIH07CiAgICBmYVBpbnRlcmVzdFAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGludGVyZXN0LXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjIzMSIsICJNMjA0IDYuNWMtMTAyLjYgMC0yMDQgNjguNC0yMDQgMTc5LjEgMCA3MC40IDM5LjYgMTEwLjQgNjMuNiAxMTAuNCA5LjkgMCAxNS42LTI3LjYgMTUuNi0zNS40IDAtOS4zLTIzLjctMjkuMS0yMy43LTY3LjggMC04MC40IDYxLjItMTM3LjQgMTQwLjQtMTM3LjQgNjguMSAwIDExOC41IDM4LjcgMTE4LjUgMTA5LjggMCA1My4xLTIxLjMgMTUyLjctOTAuMyAxNTIuNy0yNC45IDAtNDYuMi0xOC00Ni4yLTQzLjggMC0zNy44IDI2LjQtNzQuNCAyNi40LTExMy40IDAtNjYuMi05My45LTU0LjItOTMuOSAyNS44IDAgMTYuOCAyLjEgMzUuNCA5LjYgNTAuNy0xMy44IDU5LjQtNDIgMTQ3LjktNDIgMjA5LjEgMCAxOC45IDIuNyAzNy41IDQuNSA1Ni40IDMuNCAzLjggMS43IDMuNCA2LjkgMS41IDUwLjQtNjkgNDguNi04Mi41IDcxLjQtMTcyLjggMTIuMyAyMy40IDQ0LjEgMzYgNjkuMyAzNiAxMDYuMiAwIDE1My45LTEwMy41IDE1My45LTE5Ni44IDAtOTkuMy04NS44LTE2NC4xLTE4MC0xNjQuMXoiXQogICAgfTsKICAgIGZhV2htY3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2htY3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQwZCIsICJNNDQ4IDE2MWwwLTIxLjMtMjguNS04LjgtMi4yLTEwLjQgMjAuMS0yMC43LTEwLjQtMTkuNC0yOSA3LjUtNy4yLTcuNSA3LjUtMjguMi0xOS4xLTExLjYtMjEuMyAyMS0xMC43LTMuMi03LTI2LjQtMjIuNiAwLTYuMiAyNi40LTEyLjEgMy4yLTE5LjctMjEtMTkuNCAxMSA4LjEgMjcuNy04LjEgOC40LTI4LjUtNy41LTExIDE5LjEgMjAuNyAyMS0yLjkgMTAuNC0yOC41IDcuOC0uMyAyMS43IDI4LjggNy41IDIuNCAxMi4xLTIwLjEgMTkuOSAxMC40IDE4LjUgMjkuNi03LjUgNy4yIDguNi04LjEgMjYuOSAxOS45IDExLjYgMTkuNC0yMC40IDExLjYgMi45IDYuNyAyOC41IDIyLjYgLjMgNi43LTI4LjggMTEuNi0zLjUgMjAuNyAyMS42IDIwLjQtMTIuMS04LjgtMjggNy44LTguMSAyOC44IDguOCAxMC4zLTIwLjEtMjAuOS0xOC44IDIuMi0xMi4xIDI5LjEtN3pNMzI4LjggOTIuNmE1Ni44IDU2LjggMCAxIDEgMCAxMTMuNiA1Ni44IDU2LjggMCAxIDEgMC0xMTMuNnptNzIuMyAxMzBsNDYuOSAxNC41IDAgMzkuOS01NS4xIDEzLjQtNC4xIDIyLjcgMzguOSAzNS4zLTE5LjIgMzcuOS01NC0xNi43LTE0LjYgMTUuMiAxNi43IDUyLjUtMzguMyAyMi43LTM4LjktNDAuNS0yMS43IDYuNi0xMi42IDU0LTQyLjQtLjUtMTIuNi01My42LTIxLjctNS42LTM2LjQgMzguNC0zNy40LTIxLjcgMTUuMi01MC41LTEzLjctMTYuMS01NS41IDE0LjEtMTkuNy0zNC44IDM3LjktMzcuNC00LjgtMjIuOC01NC0xNC4xIC41LTQwLjkgNTMuNS0xNC43IDUuNy0xOS43LTM4LjktMzkuNCAyMC43LTM1LjggNTMuNiAxNC4xIDE1LjItMTUuNy0xNS4yLTUyIDM2LjQtMjAuNyAzNi44IDM5LjQgMjIuNy02LjEgMTEuNi01MiA0Mi40IDAgMTEuNiA0NS45LTIyLjYtNS45LTYuMy0xLjctMy4zIDUuNy0xMSAxOS4xLTMuMyA1LjYgNC42IDQuNiAxNy4yIDE3LjQtLjMgMS0yMy44IDYuNS02LjIgMS43YzAgMy4yLS4xIDkuNi0uMyAxOS4zLTQ3LjUgMTAuNC04My4zIDUyLjgtODMuMyAxMDMuNSAwIDU4LjMgNDcuMyAxMDUuNyAxMDUuNyAxMDUuNyA1MC41IDAgOTIuNy0zNS40IDEwMy4yLTgyLjggOS45IC4xIDE2LjYgLjIgMjAuMSAuM2wxLjYtNi43IDUuNi0yNCAxLjktLjYgMTcuMSAxNy44IDQuNyA0LjkgNS44LTMuNCAyMC40LTEyLjEgNS44LTMuNS0yLTYuNS02LjgtMjEuMnoiXQogICAgfTsKICAgIGZhSm9nZXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiam9nZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNiNyIsICJNMzg2LjEgNDVDMzQ1LjYgMTkuOSAzMDAuNiA4IDI1Ni4yIDggMTczIDggOTEuOCA0OS45IDQ0LjkgMTI1LjktMjcgMjQyLjUgOS4zIDM5NS4yIDEyNS45IDQ2Ny4xczI2OS4zIDM1LjYgMzQxLjItODAuOUM1MzkgMjY5LjYgNTAyLjcgMTE2LjggMzg2LjEgNDV6bTUxLjggMzIzLjJjLTQwLjQgNjUuNS0xMTAuNCAxMDEuNS0xODIgMTAxLjUtNi44IDAtMTMuNi0uNC0yMC40LTEtOS0xMy42LTE5LjktMzMuMy0yMy43LTQyLjQtNS43LTEzLjctMjcuMi00NS42IDMxLjItNjcuMSA1MS43LTE5LjEgMTc2LjctMTYuNSAyMDguOC0xNy42LTQgOS04LjYgMTcuOS0xMy45IDI2LjZ6TTIzNy4xIDI4MS45Yy01NS41LTEuNC04MS43LTIwLjgtNTguNS00OC4yczUxLjEtNDAuNyA2OC45LTUxLjJjMTcuOS0xMC41IDI3LjMtMzMuNy0yMy42LTI5LjctMTI4LjYgOC43LTE2Ny4zIDk5LjMtMTc4LjMgMTQwLjItOC44LTQ5LjctLjEtMTAyLjcgMjguNS0xNDkuMSA2MS45LTEwMC41IDE5My41LTEzMS43IDI5NC02OS44IDc0LjggNDYuMSAxMTEuMiAxMzAuOSA5OS4zIDIxMi43LTI0LjktLjUtMTc5LjMtMy42LTIzMC4zLTQuOXptMTgzLjgtNTQuOGMtMjIuNy02LTU3IDExLjMtODYuNyAyNy4yLTI5LjcgMTUuOC0zMS4xIDguMi0zMS4xIDguMnM0MC4yLTI4LjEgNTAuNy0zNC41IDMxLjktMTQgMTMuNC0yNC42Yy0zLjItMS44LTYuNy0yLjctMTAuNC0yLjctMTcuOCAwLTQxLjUgMTguNy02Ny41IDM1LjYtMzEuNSAyMC41LTY1LjMgMzEuMy02NS4zIDMxLjNMMzkzLjUgMjY2IDQ0MCAyNDIuNnMzLjYtOS41LTE5LjEtMTUuNXoiXQogICAgfTsKICAgIGZhU3F1YXJlWW91dHViZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUteW91dHViZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYxNzk4LCAieW91dHViZS1zcXVhcmUiXSwgImY0MzEiLCAiTTI4MiAyNTYuMmwtOTUuMi01NC4xIDAgMTA4LjIgOTUuMi01NC4xek0zODQgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NHptMTQuNCAxMzYuMWM3LjYgMjguNiA3LjYgODguMiA3LjYgODguMnMwIDU5LjYtNy42IDg4LjFjLTQuMiAxNS44LTE2LjUgMjcuNy0zMi4yIDMxLjktMjguMyA3LjctMTQyLjIgNy43LTE0Mi4yIDcuN3MtMTEzLjkgMC0xNDIuMi03LjZjLTE1LjctNC4yLTI4LTE2LjEtMzIuMi0zMS45LTcuNi0yOC42LTcuNi04OC4yLTcuNi04OC4yczAtNTkuNyA3LjYtODguMmM0LjItMTUuOCAxNi41LTI4LjIgMzIuMi0zMi40IDI4LjMtNy43IDE0Mi4yLTcuNyAxNDIuMi03LjdzMTEzLjkgMCAxNDIuMiA3LjdjMTUuNyA0LjIgMjggMTYuNiAzMi4yIDMyLjR6Il0KICAgIH07CiAgICBmYVlvdXR1YmVTcXVhcmUgPSBmYVNxdWFyZVlvdXR1YmU7CiAgICBmYUF0bGFzc2lhbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhdGxhc3NpYW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjc3YiIsICJNMTUyLjIgMjM2LjRjLTcuNy04LjItMTkuNy03LjctMjQuOCAyLjhMMS42IDQ5MC4yYy01IDEwIDIuNCAyMS43IDEzLjQgMjEuN2wxNzUgMGM1LjggLjEgMTEtMy4yIDEzLjQtOC40IDM3LjktNzcuOCAxNS4xLTE5Ni4zLTUxLjItMjY3LjF6TTI0NC40IDguMWMtMTIyLjMgMTkzLjQtOC41IDM0OC42IDY1IDQ5NS41IDIuNSA1LjEgNy43IDguNCAxMy40IDguNEw0OTcgNTEyYzExLjIgMCAxOC40LTExLjggMTMuNC0yMS43IDAgMC0yMzQuNS00NzAuNi0yNDAuNC00ODIuMy01LjMtMTAuNi0xOC44LTEwLjgtMjUuNiAuMXoiXQogICAgfTsKICAgIGZhUGllZFBpcGVySGF0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBpZWQtcGlwZXItaGF0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0ZTUiLCAiTTY0MCAyNC45Yy04MC44IDUzLjYtODkuNCA5Mi41LTk2LjQgMTA0LjQtNi43IDEyLjItMTEuNyA2MC4zLTIzLjMgODMuNi0xMS43IDIzLjYtNTQuMiA0Mi4yLTY2LjEgNTAtMTEuNyA3LjgtMjguMyAzOC4xLTQxLjkgNjQuMi0xMDguMS00LjQtMTY3LjQgMzguOC0yNTkuMiA5My42IDI5LjQtOS43IDQzLjMtMTYuNyA0My4zLTE2LjcgOTQuMi0zNiAxMzkuMy02OC4zIDI4MS4xLTQ5LjIgMS4xIDAgMS45IC42IDIuOCAuOCAzLjkgMi4yIDUuMyA2LjkgMy4xIDEwLjhsLTUzLjkgOTUuOGMtMi41IDQuNy03LjggNy4yLTEzLjEgNi4xLTEyNi44LTIzLjgtMjI2LjkgMTcuMy0zMTguOSAxOC42LTczLjQgMS4xLTk3LjUtMzMuNS05Ny41LTM1LjEgMC0xLjEgLjYtMS43IDEuNy0xLjcgMCAwIDM4LjMgMCAxMDMuMS0xNS4zIDczLjYtMTQwLjMgMTM5LjItMTg5LjQgMjEwLjYtMTg5LjQgMCAwIDcxLjcgMCA5MC42IDYxLjkgMjIuOC0zOS43IDI4LjMtNDkuMiAyOC4zLTQ5LjIgNS4zLTkuNCAzNS03Ny4yIDg2LjQtMTQxLjQgNTEuNS02NCA5MC40LTc5LjkgMTE5LjMtOTEuOHoiXQogICAgfTsKICAgIGZhSW50ZXJuZXRFeHBsb3JlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJpbnRlcm5ldC1leHBsb3JlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjZiIiwgIk00ODMuMSAxNTkuN2MxMC45LTI0LjYgMjEuNC02MC40IDIxLjQtODcuOSAwLTcyLjctNzkuNi05OC40LTIwOS43LTM4LjYtMTA3LjYtNy4yLTIxMS4yIDczLjctMjM3LjEgMTg2LjUgMzAuOS0zNC45IDc4LjMtODIuMyAxMjItMTAxLjItNTQuMyA0OC4zLTEwMC42IDEwOS40LTEzNS43IDE3My4yLTIwLjcgMzcuOS00NCA5OS4yLTQ0IDE0NSAwIDk4LjYgOTIuOSA4Ni41IDE4MC4zIDQyIDMxLjQgMTUuNCA2Ni42IDE1LjYgMTAxLjcgMTUuNiA5Ny4xIDAgMTg0LjItNTQuMyAyMTYuOC0xNDZsLTEyMC44IDBjLTUyLjUgODguNi0xOTYuOCA1My0xOTYuOC00Ny40bDMyOC44IDBjNi40LTQzLjYtMS43LTk1LjctMjYuOS0xNDEuMnpNNjQuNiAzNDYuOUM4Mi4zIDM5OCAxMTguMyA0NDIuNyAxNjQuOCA0NzAuMiA3Ni4xIDUxOS4xLTguNCA0OTkuMyA2NC42IDM0Ni45ek0xODAuNSAyMzhjMi01NS4yIDUwLjMtOTQuOSAxMDQtOTQuOSA1My40IDAgMTAyIDM5LjcgMTA0IDk0LjlsLTIwOCAwek0zNjUuMSA1MC40YzIxLjQtMTAuMyA0OC42LTIyIDcyLjYtMjIgMzEuNCAwIDU0LjMgMjEuNyA1NC4zIDUzLjcgMCAyMC03LjQgNDktMTQuNiA2Ny45LTI2LjMtNDIuMy02Ni04MS42LTExMi4zLTk5LjZ6Il0KICAgIH07CiAgICBmYUFpcmJuYiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhaXJibmIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjgzNCIsICJNMjI0LjUgMzczLjFjLTI1LjItMzEuNy00MC4xLTU5LjQtNDUtODMuMi0yMi41LTg4IDExMi42LTg4IDkwLjEgMC01LjQgMjQuMi0yMC4zIDUyLTQ1IDgzLjJsLS4xIDB6bTEzOC4yIDczLjJjLTQyLjEgMTguMy04My43LTEwLjktMTE5LjMtNTAuNSAxMDMuOS0xMzAuMSA0Ni4xLTIwMC0xOC44LTIwMC01NC45IDAtODUuMiA0Ni41LTczLjMgMTAwLjUgNi45IDI5LjIgMjUuMiA2Mi40IDU0LjQgOTkuNS0zMi41IDM2LTYwLjUgNTIuNy04NS4yIDU0LjktNTAgNy40LTg5LjEtNDEuMS03MS4zLTkxLjEgMTUuMS0zOS4yIDExMS43LTIzMS4yIDExNS45LTI0MS42IDE1LjgtMzAuMSAyNS42LTU3LjQgNTkuNC01Ny40IDMyLjMgMCA0My40IDI1LjkgNjAuNCA1OS45IDM2IDcwLjYgODkuNCAxNzcuNSAxMTQuOCAyMzkuMSAxMy4yIDMzLjEtMS40IDcxLjMtMzcgODYuNnptNDctMTM2LjFjLTEyOC45LTI3NC4zLTEzNi0yNzguMi0xODUuMS0yNzguMi00NS41IDAtNjQuOSAzMS43LTg0LjcgNzIuOC0xMDYuMiAyMTIuMy0xMTYuNCAyNDIuNC0xMTcuMyAyNDUtMjUuMiA2OS4zIDI2LjcgMTMwLjIgODkuNiAxMzAuMiAyMS43IDAgNjAuNi02LjEgMTEyLjQtNjIuNCA1OC43IDYzLjggMTAxLjMgNjIuNCAxMTIuNCA2Mi40IDYyLjkgLjEgMTE0LjktNjAuOSA4OS42LTEzMC4yIDAtMy45LTE2LjgtMzguOS0xNi44LTM5LjZsMCAweiJdCiAgICB9OwogICAgZmFKcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJqcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2I4IiwgIk0wIDMybDAgNDQ4IDQ0OCAwIDAtNDQ4LTQ0OCAwek0yNDMuOCAzODEuNGMwIDQzLjYtMjUuNiA2My41LTYyLjkgNjMuNS0zMy43IDAtNTMuMi0xNy40LTYzLjItMzguNUwxNTIgMzg1LjdjNi42IDExLjcgMTIuNiAyMS42IDI3LjEgMjEuNiAxMy44IDAgMjIuNi01LjQgMjIuNi0yNi41bDAtMTQzLjEgNDIuMSAwIDAgMTQzLjd6bTk5LjYgNjMuNWMtMzkuMSAwLTY0LjQtMTguNi03Ni43LTQzTDMwMSAzODIuMWM5IDE0LjcgMjAuOCAyNS42IDQxLjUgMjUuNiAxNy40IDAgMjguNi04LjcgMjguNi0yMC44IDAtMTQuNC0xMS40LTE5LjUtMzAuNy0yOGwtMTAuNS00LjVjLTMwLjQtMTIuOS01MC41LTI5LjItNTAuNS02My41IDAtMzEuNiAyNC4xLTU1LjYgNjEuNi01NS42IDI2LjggMCA0NiA5LjMgNTkuOCAzMy43TDM2OCAyOTBjLTcuMi0xMi45LTE1LTE4LTI3LjEtMTgtMTIuMyAwLTIwLjEgNy44LTIwLjEgMTggMCAxMi42IDcuOCAxNy43IDI1LjkgMjUuNmwxMC41IDQuNWMzNS44IDE1LjMgNTUuOSAzMSA1NS45IDY2LjIgMCAzNy44LTI5LjggNTguNi02OS43IDU4LjZ6Il0KICAgIH07CiAgICBmYVF1aW5zY2FwZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJxdWluc2NhcGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQ1OSIsICJNMzEzLjcgNDc0LjZsLTEgMGMtNDEuOSAwLTgyLjEtMTYuNy0xMTEuOC00Ni4zcy00Ni4zLTY5LjktNDYuMy0xMTEuOCAxNi43LTgyLjEgNDYuMy0xMTEuOCA2OS45LTQ2LjMgMTExLjgtNDYuM2M5NC45IDAgMTY4LjIgODMuMSAxNTcgMTc2LjYgNCA1LjEgOC4yIDkuNiAxMS4yIDE1LjMgMTMuNC0zMC4zIDIwLjMtNjIuNCAyMC4zLTk3LjcgMC0xMzUuMS0xMDkuNS0yNDQuNi0yNDQuNi0yNDQuNlMxMi4xIDExNy41IDEyLjEgMjUyLjYgMTIxLjYgNDk3LjIgMjU2LjYgNDk3LjJjMjMuOCAuMiA0Ny42LTMuMiA3MC40LTEwLjEtNS4yLTMuNS04LjktOC4xLTEzLjMtMTIuNXptNzguMy0xNjlhOTkuMiA5OS4yIDAgMSAwIDAgMTk4LjQgOTkuMiA5OS4yIDAgMSAwIDAtMTk4LjR6Il0KICAgIH07CiAgICBmYUFkdmVyc2FsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFkdmVyc2FsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzNmEiLCAiTTQ4Mi4xIDMyTDI4LjcgMzJDNS44IDMyIDAgMzcuOSAwIDYwLjlMMCA0NTEuMUMwIDQ3NC40IDUuOCA0ODAgMjguNyA0ODBsNDUzLjQgMGMyNC40IDAgMjkuOS01LjIgMjkuOS0yOS43bDAtMzg4LjFjMC0yNC42LTUuNC0zMC4yLTI5LjktMzAuMnpNMTc4LjQgMjIwLjNjLTI3LjUtMjAuMi03Mi4xLTguNy04NC4yIDIzLjQtNC4zIDExLjEtOS4zIDkuNS0xNy41IDguMy05LjctMS41LTE3LjItMy4yLTIyLjUtNS41LTI4LjgtMTEuNCA4LjYtNTUuMyAyNC45LTY0LjMgNDEuMS0yMS40IDgzLjQtMjIuMiAxMjUuMy00LjggNDAuOSAxNi44IDM0LjUgNTkuMiAzNC41IDEyOC41IDIuNyAyNS44LTQuMyA1OC4zIDkuMyA4OC44IDEuOSA0LjQgLjQgNy45LTIuNyAxMC43LTguNCA2LjctMzkuMyAyLjItNDYuNi03LjQtMS45LTIuMi0xLjgtMy42LTMuOS02LjItMy42LTMuOS03LjMtMi4yLTExLjkgMS01Ny40IDM2LjQtMTQwLjMgMjEuNC0xNDctNDMuMy0zLjEtMjkuMyAxMi40LTU3LjEgMzkuNi03MSAzOC4yLTE5LjUgMTEyLjItMTEuOCAxMTQtMzAuOSAxLjEtMTAuMi0xLjktMjAuMS0xMS4zLTI3LjN6bTI4Ni43IDIyMmMwIDE1LjEtMTEuMSA5LjktMTcuOCA5LjlsLTM5NC45IDBjLTcuNCAwLTE4LjIgNC44LTE3LjgtMTAuNyAuNC0xMy45IDEwLjUtOS4xIDE3LjEtOS4xIDEzMi4zLS40IDI2NC41LS40IDM5Ni44IDAgNi44IDAgMTYuNi00LjQgMTYuNiA5Ljl6bTMuOC0zNDAuNWwwIDI5MWMwIDUuNy0uNyAxMy45LTguMSAxMy45LTEyLjQtLjQtMjcuNSA3LjEtMzYuMS01LjYtNS44LTguNy03LjgtNC0xMi40LTEuMi01My40IDI5LjctMTI4LjEgNy4xLTE0NC40LTg1LjItNi4xLTMzLjQtLjctNjcuMSAxNS43LTEwMCAxMS44LTIzLjkgNTYuOS03Ni4xIDEzNi4xLTMwLjVsMC03MWMwLTI2LjItLjEtMjYuMiAyNi0yNi4yIDMuMSAwIDYuNiAuNCA5LjcgMCAxMC4xLS44IDEzLjYgNC40IDEzLjYgMTQuMy0uMSAuMi0uMSAuMy0uMSAuNXpNNDE3LjQgMzM0LjFjLTE5LjUgNDcuNi03Mi45IDQzLjMtOTAgNS4yLTE1LjEtMzMuMy0xNS41LTY4LjIgLjQtMTAxLjUgMTYuMy0zNC4xIDU5LjctMzUuNyA4MS41LTQuOCAyMC42IDI4LjggMTQuOSA4NC42IDguMSAxMDEuMXpNMTIyLjYgMzY5LjRjLTcuNS0xLjMtMzMtMy4zLTMzLjctMjcuOC0uNC0xMy45IDcuOC0yMyAxOS44LTI1LjggMjQuNC01LjkgNDkuMy05LjkgNzMuNy0xNC43IDguOS0yIDcuNCA0LjQgNy44IDkuNSAxLjQgMzMtMjYuMSA1OS4yLTY3LjYgNTguOHoiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI1ZSIsICJNMjUzLjggMjE0LjlsLTMzLjIgMTcuM2MtOS40LTE5LjYtMjUuMi0xOS45LTI3LjUtMTkuOS0yMi4xIDAtMzMuMiAxNC42LTMzLjIgNDMuOCAwIDIzLjYgOS4yIDQzLjggMzMuMiA0My44IDE0LjUgMCAyNC42LTcuMSAzMC42LTIxLjNsMzAuNiAxNS41Yy02LjIgMTEuNS0yNS43IDM5LTY1LjEgMzktMjIuNiAwLTc0LTEwLjMtNzQtNzcgMC01OC43IDQzLTc3LjEgNzIuNi03Ny4xIDMwLjcgMCA1Mi43IDExLjkgNjYgMzUuOXptMTQzIDBsLTMyLjggMTcuM2MtOS41LTE5LjgtMjUuNy0xOS45LTI3LjktMTkuOS0yMi4xIDAtMzMuMiAxNC42LTMzLjIgNDMuOCAwIDIzLjUgOS4yIDQzLjggMzMuMiA0My44IDE0LjQgMCAyNC42LTcuMSAzMC41LTIxLjNsMzEgMTUuNWMtMi4xIDMuOC0yMS40IDM5LTY1LjEgMzktMjIuNyAwLTc0LTkuOS03NC03NyAwLTU4LjcgNDMtNzcuMSA3Mi42LTc3LjEgMzAuNyAwIDUyLjYgMTEuOSA2NS42IDM1Ljl6TTI1NS42IDhDMTEyLjcgOCA4IDEyMy4xIDggMjU2LjEgOCAzOTQuNSAxMjEuNiA1MDQuMSAyNTUuNiA1MDQuMSAzODUuNSA1MDQuMSA1MDQgNDAzLjIgNTA0IDI1Ni4xIDUwNCAxMTguMiAzOTcuNCA4IDI1NS42IDh6bS45IDQ1MC44Yy0xMTIuNSAwLTIwMy43LTkzLTIwMy43LTIwMi44IDAtMTA1LjQgODUuNC0yMDMuMyAyMDMuNy0yMDMuMyAxMTIuNSAwIDIwMi44IDg5LjUgMjAyLjggMjAzLjMgMCAxMjEuNy05OS43IDIwMi44LTIwMi44IDIwMi44eiJdCiAgICB9OwogICAgZmFOb3Rpb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibm90aW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU3ZDkiLCAiTTk0LjkgMTAwLjJjMTQuOSAxMi4xIDIwLjUgMTEuMiA0OC42IDkuM0w0MDcuOCA5My42YzUuNiAwIC45LTUuNi0uOS02LjVMMzYyLjkgNTUuNGMtOC40LTYuNS0xOS42LTE0LTQxLjEtMTIuMUw2NS45IDYxLjljLTkuMyAuOS0xMS4yIDUuNi03LjUgOS4zbDM2LjQgMjguOXptMTUuOSA2MS42bDAgMjc4LjFjMCAxNC45IDcuNSAyMC41IDI0LjMgMTkuNmwyOTAuNS0xNi44YzE2LjgtLjkgMTguNy0xMS4yIDE4LjctMjMuM2wwLTI3Ni4yYzAtMTIuMS00LjctMTguNy0xNS0xNy43TDEyNS43IDE0My4xYy0xMS4yIC45LTE0LjkgNi41LTE0LjkgMTguN3ptMjg2LjcgMTQuOWMxLjkgOC40IDAgMTYuOC04LjQgMTcuOGwtMTQgMi44IDAgMjA1LjNjLTEyLjIgNi41LTIzLjQgMTAuMy0zMi43IDEwLjMtMTUgMC0xOC43LTQuNy0yOS45LTE4LjdsLTkxLjUtMTQzLjcgMCAxMzkgMjkgNi41czAgMTYuOC0yMy40IDE2LjhsLTY0LjQgMy43Yy0xLjktMy43IDAtMTMuMSA2LjUtMTQuOWwxNi44LTQuNyAwLTE4My44LTIzLjMtMS45Yy0xLjktOC40IDIuOC0yMC41IDE1LjktMjEuNWw2OS4xLTQuNyA5NS4zIDE0NS42IDAtMTI4LjgtMjQuMy0yLjhjLTEuOS0xMC4zIDUuNi0xNy43IDE0LjktMTguN2w2NC41LTMuOHpNNDQuNCAzNi43TDMxMC42IDE3LjFjMzIuNy0yLjggNDEuMS0uOSA2MS42IDE0bDg1IDU5LjdjMTQgMTAuMyAxOC43IDEzLjEgMTguNyAyNC4zbDAgMzI3LjZjMCAyMC41LTcuNSAzMi43LTMzLjYgMzQuNUwxMzMuMiA0OTUuOGMtMTkuNiAuOS0yOS0xLjktMzkuMi0xNC45TDMxLjQgMzk5LjdjLTExLjItMTQuOS0xNS45LTI2LjEtMTUuOS0zOS4ybDAtMjkxLjJjMC0xNi44IDcuNS0zMC44IDI4LjktMzIuN3oiXQogICAgfTsKICAgIGZhQ2hyb21lY2FzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjaHJvbWVjYXN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4MzgiLCAiTTQ0OCA2NEw2NC4yIDY0Yy0yMy42IDAtNDIuNyAxOS4xLTQyLjcgNDIuN2wwIDYzLjkgNDIuNyAwIDAtNjMuOSAzODMuOCAwIDAgMjk4LjYtMTQ5LjIgMCAwIDQyLjcgMTQ5LjQgMGMyMy42IDAgNDIuNy0xOS4xIDQyLjctNDIuN2wwLTI5OC42QzQ5MC45IDgzLjEgNDcxLjYgNjQgNDQ4IDY0ek0yMS41IDM4My42bDAgNjMuOSA2My45IDBjMC0zNS4zLTI4LjYtNjMuOS02My45LTYzLjl6bTAtODVsMCA0Mi40YzU4LjkgMCAxMDYuNiA0OC4xIDEwNi42IDEwN2w0Mi43IDBjLjEtODIuNC02Ni45LTE0OS4zLTE0OS4zLTE0OS40ek0yMTMuNiA0NDhsNDIuNyAwQzI1NS44IDMxOC41IDE1MSAyMTMuNyAyMS41IDIxMy40bDAgNDIuNGMxMDYtLjIgMTkyIDg2LjIgMTkyLjEgMTkyLjJ6Il0KICAgIH07CiAgICBmYVdpa2lwZWRpYVcgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2lraXBlZGlhLXciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjI2NiIsICJNNjQwIDUxLjJsLS4zIDEyLjJjLTI4LjEgLjgtNDUgMTUuOC01NS44IDQwLjMtMjUgNTcuOC0xMDMuMyAyNDAtMTU1LjMgMzU4LjZsLTEzLjYgMC04MS45LTE5My4xYy0zMi41IDYzLjYtNjguMyAxMzAtOTkuMiAxOTMuMS0uMyAuMy0xNSAwLTE1LS4zLTQ2LjktMTA5LjctOTYuMS0yMTguNi0xNDMuMS0zMjguNi0xMS40LTI2LjctNDkuNC03MC03NS42LTY5LjcgMC0zLjEtLjMtMTAtLjMtMTQuMmwxNjEuOSAwIDAgMTMuOWMtMTkuMiAxLjEtNTIuOCAxMy4zLTQzLjMgMzQuMiAyMS45IDQ5LjcgMTAzLjYgMjQwLjMgMTI1LjYgMjg4LjYgMTUtMjkuNyA1Ny44LTEwOS4yIDc1LjMtMTQyLjgtMTMuOS0yOC4zLTU4LjYtMTMzLjktNzIuOC0xNjAtOS43LTE3LjgtMzYuMS0xOS40LTU1LjgtMTkuN2wwLTEzLjkgMTQyLjUgLjMgMCAxMy4xYy0xOS40IC42LTM4LjEgNy44LTI5LjQgMjYuMSAxOC45IDQwIDMwLjYgNjguMSA0OC4xIDEwNC43IDUuNi0xMC44IDM0LjctNjkuNCA0OC4xLTEwMC44IDguOS0yMC42LTMuOS0yOC42LTM4LjYtMjkuNCAuMy0zLjYgMC0xMC4zIC4zLTEzLjYgNDQuNC0uMyAxMTEuMS0uMyAxMjMuMS0uNmwwIDEzLjZDNDYyLjQgNjQgNDM5LjEgNzYgNDI2LjggOTQuOUwzNjcuNiAyMTcuN2M2LjQgMTYuMSA2My4zIDE0Mi44IDY5LjIgMTU2LjdMNTU5LjIgOTEuOGMtOC42LTIzLjEtMzYuNC0yOC4xLTQ3LjItMjguM2wwLTEzLjkgMTI3LjggMS4xIC4yIC41eiJdCiAgICB9OwogICAgZmFTaXRyb3ggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2l0cm94IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU0NGEiLCAiTTIxMi40IDBsMCAwIDIzNS42IDAgMCAxMjgtMzg0IDBDNjQgNTcuNiAxNDEuOCAuNSAyMTIuNCAwem0yNC44IDE5MmwwIDBjNjkuOSAuNSAxNDYuNyA1Ny42IDE0Ni43IDEyOGwtMTczLjIgMCAwIDBDMTQwLjkgMzE5LjYgNjQgMjYyLjQgNjQgMTkybDE3My4zIDB6bS0xLjcgMzIwYzcwLjctLjUgMTQ4LjQtNTcuNiAxNDguNC0xMjhsLTM4NCAwIDAgMTI4IDIzNS42IDAgMCAweiJdCiAgICB9OwogICAgZmFTcXVhcmVHaXRsYWIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWdpdGxhYiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJnaXRsYWItc3F1YXJlIl0sICJlNWFlIiwgIk0wIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZ6bTMzNy41IDEyLjVsNDQuNiAxMTYuNCAuNCAxLjJjNS42IDE2LjggNy4yIDM1LjIgMi4zIDUyLjUtNSAxNy4yLTE1LjQgMzIuNC0yOS44IDQzLjNsLS4yIC4xLTY4LjQgNTEuMi01NC4xIDQwLjljLS41IC4yLTEuMSAuNS0xLjcgLjgtMiAxLTQuNCAyLTYuNyAyLTMgMC02LjgtMS44LTguMy0yLjhsLTU0LjItNDAuOS02Ny45LTUwLjktLjQtLjMtLjItLjFjLTE0LjMtMTAuOC0yNC44LTI2LTI5LjctNDMuM3MtNC4yLTM1LjcgMi4yLTUyLjVsLjUtMS4yIDQ0LjctMTE2LjRjLjktMi4zIDIuNS00LjMgNC41LTUuNiAxLjYtMSAzLjQtMS42IDUuMi0xLjggMS4zLS43IDIuMS0uNCAzLjQgLjEgLjYgLjIgMS4yIC41IDIgLjcgMSAuNCAxLjYgLjkgMi40IDEuNSAuNiAuNCAxLjIgMSAyLjEgMS41IDEuMiAxLjQgMi4yIDMgMi43IDQuOGwyOS4yIDkyLjIgMTIyLjkgMCAzMC4yLTkyLjJjLjUtMS44IDEuNC0zLjQgMi42LTQuOHMyLjgtMi40IDQuNS0zLjFjMS43LS42IDMuNi0uOSA1LjQtLjdzMy42IC44IDUuMiAxLjhjMiAxLjMgMy43IDMuMyA0LjYgNS42eiJdCiAgICB9OwogICAgZmFHaXRsYWJTcXVhcmUgPSBmYVNxdWFyZUdpdGxhYjsKICAgIGZhU2hvZWxhY2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2hvZWxhY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTYwYyIsICJNNDA1LjIgMzMxYzIuMi0xLjEgNC40LTIuMyA2LjUtMy43bDguMy00LjhjMS41LTEuMSA0LjQtMy40IDguNy02LjdsLjUtLjVjMy40LTMuNCA3LjItNSAxMS4zLTQuOSAxLjggMCAzLjkgLjUgNi40IDEuNWwzMS0yNy41Yy45LS43IDEuNy0xLjMgMi42LTEuOGwuMiAwYzMuMy0xLjkgNi0xLjggOC4yIC40IDMuOSAyLjEgNC4yIDUuNiAuOSAxMC42TDQ1Ny4yIDMyMmMuMiAuNSAuNCAxIC40IDEuNSAuNSAyLjIgLjMgNC40LS41IDYuNi0uNyAxLjUtMS44IDIuOS0zLjEgNC4yLTEuNCAxLjQtMi43IDIuOC00LjIgNC4yTDQzMSAzNTIuMmMtMS43IDEuMi0zLjQgMi4zLTUuMSAzLjMtMi4xIDEuMy00LjMgMi41LTYuNiAzLjYtMSAuNC0xLjkgLjktMi45IDEuMy01LjkgMi41LTExLjkgNC4yLTE4LjIgNS0yLjkgMjQuNS0xMS4zIDQ3LjEtMjUuMSA2Ny44LTE3LjUgMjUuNy00MS40IDQ1LjQtNzEuOCA1OC44LTMwLjIgMTMuNS02MyAyMC4yLTk4LjIgMjAuMi00OC42LS41LTg4LTExLjQtMTE4LjItMzIuOC0zNS4xLTI1LTUyLjYtNTcuOS01Mi42LTk5LjFsMC01LjZjMS4yLTI4LjEgOS41LTU0LjYgMjQuOC03OS44IDE1LjEtMjQuOSAzNy4xLTQxLjcgNjYuMS01MC41IDE0LjktNC40IDI5LjktNi42IDQ1LTYuNiAxNS41IDAgMzEuNiAyLjkgNDguMSA4LjZzMzUuMiAxNS41IDU1LjkgMjkuNWw1NC4xIDM2LjNjMTUuMSA5LjggMjguOCAxNi41IDQxLjIgMjAtMi42LTI1LjEtMTEuNy00Ni42LTI3LjMtNjQuNS0xNS43LTE4LjEtMzUuNi0zMS4zLTU5LjktMzkuN0wyNTcgMjIwYy0yMS40LTcuNS0zNy4zLTE0LjktNDcuNy0yMi4yLTI4LjItMTkuMS00My44LTQ1LjItNDctNzguNWwtLjUtOS44YzAtMzIuMSAxMy01OC45IDM5LTgwLjUgMjMtMTkuMyA1MC42LTI5IDgyLjUtMjkgMjQgMCA0NS42IDYuOSA2NC43IDIwLjggMTkuMiAxNCAzMC4xIDMzLjggMzIuNiA1OS40bC41IDEwYzAgMTguNi00LjggMzQuNS0xNC40IDQ3LjctOS44IDEzLjItMTguNSAxOS45LTI2IDE5LjktMS42LS4xLTMuMS0uMy00LjUtLjZsLTM0IDMyYy01LjUgMy05LjIgMi41LTExLjEtMS42LTEuOS0yLjItMS44LTQuOSAuNS04LjJsLjItLjJjLjUtLjcgMS4yLTEuNSAyLTIuNGwzMS42LTMwYy0uNC0xLjUtLjYtMy4xLS42LTQuOCAwLTQuMSAxLjYtNy42IDQuOS0xMC40IDEzLjgtMTIuNCAyMC44LTI2LjcgMjAuOC00Mi44IDAtMTYtNi4xLTI5LjUtMTguMi00MC40cy0yOC43LTE2LjUtNDkuNy0xNi44Yy0yNi4yIDAtNDcuOCA3LjktNjQuNyAyMy43UzE5Mi42IDg5LjkgMTkyLjYgMTEyYzAgMTcuOCA2LjkgMzMuOSAyMC42IDQ4LjMgMTMuNiAxNC4yIDM0LjYgMjUuNCA2MyAzMy41IDM5LjggMTEuNSA3MC4yIDMxIDkxLjMgNTguMyAxOC43IDI0LjIgMjkuMSA1MS4zIDMxLjMgODEuNCAyLjItLjcgNC4zLTEuNSA2LjUtMi42bC0uMSAuMXpNMjk0LjQgMTc4LjdjMCAxLjEgLjYgMS42IDEuOCAxLjYgLjEgMCA5LjctOC45IDI4LjgtMjYuNiAwLTIuNC01LjEgLjktMTUuMyAxMC0xMC4yIDkuMi0xNS4zIDE0LjItMTUuMyAxNC45bDAgLjF6bTggNi40YzAtMS0uNS0xLjUtMS41LTEuNS0xLjEgMC0yLjEgLjUtMi45IDEuNi0xLjktLjEtMy4zIC4xLTQuMiAuNy0uNCAuMi0uNSAuNS0uNSAuNyAwIC43IC41IDEuMyAxLjUgMS42bDMuMyAwYzIuOS0xLjEgNC40LTIuMiA0LjQtMy4zbC0uMSAuMnpNMzI1IDE2NS4yYzAtMi44LTEuNi0yLjgtNC45IDAtMS42IDEuNS0zLjYgMy41LTYgNi4yLS44IC42LTIuNiAyLjItNS4zIDQuOS0yLjggMi45LTQuMiA0LjctNC4yIDUuM2wuMiAxLjNjLjcgLjIgMS4yIC40IDEuNSAuNCAuMSAwIDMuMy0yLjkgOS41LTguN3M5LjMtOC45IDkuMy05LjNsLS4xLS4xem0xNTkuNyAxMjBsLTMwLjYgMjdjMS44IDEgMy4yIDIuNCA0IDQuMmwzMC4yLTI3Yy4yLTEuMiAuMS0yLjItLjUtMi45LS42LS41LTEuNi0uOS0zLjEtMS4zem0tMS42LS45bC0uNy0uNy0yNyAyMS45IDEuNiAyIDI2LTIzLjEgLjEtLjF6TTM2Ni45IDM2My45Yy04LTIuMS0xNS40LTQuNi0yMi4yLTcuNS0xNS4zLTYuMi0zNC4zLTE3LTU3LTMyLjRsLTM3LjQtMjUuM2MtMTUuOC0xMC4xLTMwLjItMTcuNi00My4yLTIyLjYtMTMuMS00LjktMjYtNy4zLTM4LjYtNy4zbC01LjUgMGMtMzIuMiAxLjctNTcuMiAxMy44LTc1IDM2LjItMTYuNiAyMC44LTI1IDQ1LjMtMjUgNzMuNiAwIDMxLjggMTIuOCA1Ni43IDM4LjIgNzQuNyAyNS40IDE4LjEgNjAuMiAyNy4xIDEwNC40IDI3LjEgMzQuNyAwIDY0LTYuMiA4Ny44LTE4LjYgMjMuNy0xMi40IDQyLjEtMjguOCA1NS4yLTQ5LjIgOS44LTE1LjUgMTUuOS0zMS44IDE4LjItNDguOGwuMSAuMXoiXQogICAgfTsKICAgIGZhU2VsbGNhc3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2VsbGNhc3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJkYSIsICJNMzUzLjUgMzJMOTQuOCAzMkM0Mi43IDMyIC4xIDc0LjYgLjEgMTI2LjZsMCAyNTguN0MuMSA0MzcuNCA0Mi43IDQ4MCA5NC44IDQ4MGwyNTguNyAwYzUyLjEgMCA5NC43LTQyLjYgOTQuNy05NC42bDAtMjU4LjhjMC01Mi00Mi42LTk0LjYtOTQuNy05NC42em0tNTAgMzE2LjRjLTI3LjkgNDguMi04OS45IDY0LjktMTM4LjIgMzcuMi0yMi45IDM5LjgtNTQuOSA4LjYtNDIuMy0xMy4ybDE1LjctMjcuMmM1LjktMTAuMyAxOS4yLTEzLjkgMjkuNS03LjkgMTguNiAxMC44LS4xLS4xIDE4LjUgMTAuNyAyNy42IDE1LjkgNjMuNCA2LjMgNzkuNC0yMS4zIDE1LjktMjcuNiA2LjMtNjMuNC0yMS4zLTc5LjQtMTcuOC0xMC4yLS42LS40LTE4LjYtMTAuNi0yNC42LTE0LjItMy40LTUxLjkgMjEuNi0zNy41IDE4LjYgMTAuOC0uMS0uMSAxOC41IDEwLjcgNDguNCAyOCA2NS4xIDkwLjMgMzcuMiAxMzguNXptMjEuOC0yMDguOGMtMTcgMjkuNS0xNi4zIDI4LjgtMTkgMzEuNS02LjUgNi41LTE2LjMgOC43LTI2LjUgMy42LTE4LjYtMTAuOCAuMSAuMS0xOC41LTEwLjctMjcuNi0xNS45LTYzLjQtNi4zLTc5LjQgMjEuM3MtNi4zIDYzLjQgMjEuMyA3OS40YzAgMCAxOC41IDEwLjYgMTguNiAxMC42IDI0LjYgMTQuMiAzLjQgNTEuOS0yMS42IDM3LjUtMTguNi0xMC44IC4xIC4xLTE4LjUtMTAuNy00OC4yLTI3LjgtNjQuOS05MC4xLTM3LjEtMTM4LjQgMjcuOS00OC4yIDg5LjktNjQuOSAxMzguMi0zNy4ybDQuOC04LjRjMTQuMy0yNC45IDUyLTMuMyAzNy43IDIxLjV6Il0KICAgIH07CiAgICBmYU1peCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtaXgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNjYiIsICJNMCA2NEwwIDQxMi45YzAgNTYuMiA4OCA1OC4xIDg4IDBsMC0yMzguNmM3LjktNTIuOSA4OC01MC40IDg4IDYuNWwwIDE3NS4zYzAgNTcuOSA5NiA1OCA5NiAwTDI3MiAyNDBjNS4zLTU0LjcgODgtNTIuNSA4OCA0LjNsMCAyMy44YzAgNTkuOSA4OCA1Ni42IDg4IDBMNDQ4IDY0IDAgNjR6Il0KICAgIH07CiAgICBmYUNjQXBwbGVQYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2MtYXBwbGUtcGF5IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0MTYiLCAiTTMwMi4yIDIxOC40YzAgMTcuMi0xMC41IDI3LjEtMjkgMjcuMWwtMjQuMyAwIDAtNTQuMiAyNC40IDBjMTguNCAwIDI4LjkgOS44IDI4LjkgMjcuMXpNMzQ5LjcgMjgxYzAgOC4zIDcuMiAxMy43IDE4LjUgMTMuNyAxNC40IDAgMjUuMi05LjEgMjUuMi0yMS45bDAtNy43LTIzLjUgMS41Yy0xMy4zIC45LTIwLjIgNS44LTIwLjIgMTQuNHpNNTc2IDc5bDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ3OWMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA3OUMwIDUyLjUgMjEuNSAzMSA0OCAzMWw0ODAgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTI3LjggMTk3LjJjOC40IC43IDE2LjgtNC4yIDIyLjEtMTAuNCA1LjItNi40IDguNi0xNSA3LjctMjMuNy03LjQgLjMtMTYuNiA0LjktMjEuOSAxMS4zLTQuOCA1LjUtOC45IDE0LjQtNy45IDIyLjh6bTYwLjYgNzQuNWMtLjItLjItMTkuNi03LjYtMTkuOC0zMC0uMi0xOC43IDE1LjMtMjcuNyAxNi0yOC4yLTguOC0xMy0yMi40LTE0LjQtMjcuMS0xNC43LTEyLjItLjctMjIuNiA2LjktMjguNCA2LjktNS45IDAtMTQuNy02LjYtMjQuMy02LjQtMTIuNSAuMi0yNC4yIDcuMy0zMC41IDE4LjYtMTMuMSAyMi42LTMuNCA1NiA5LjMgNzQuNCA2LjIgOS4xIDEzLjcgMTkuMSAyMy41IDE4LjcgOS4zLS40IDEzLTYgMjQuMi02IDExLjMgMCAxNC41IDYgMjQuMyA1LjkgMTAuMi0uMiAxNi41LTkuMSAyMi44LTE4LjIgNi45LTEwLjQgOS44LTIwLjQgMTAtMjF6bTEzNS40LTUzLjRjMC0yNi42LTE4LjUtNDQuOC00NC45LTQ0LjhsLTUxLjIgMCAwIDEzNi40IDIxLjIgMCAwLTQ2LjYgMjkuMyAwYzI2LjggMCA0NS42LTE4LjQgNDUuNi00NXptOTAgMjMuN2MwLTE5LjctMTUuOC0zMi40LTQwLTMyLjQtMjIuNSAwLTM5LjEgMTIuOS0zOS43IDMwLjVsMTkuMSAwYzEuNi04LjQgOS40LTEzLjkgMjAtMTMuOSAxMyAwIDIwLjIgNiAyMC4yIDE3LjJsMCA3LjUtMjYuNCAxLjZjLTI0LjYgMS41LTM3LjkgMTEuNi0zNy45IDI5LjEgMCAxNy43IDEzLjcgMjkuNCAzMy40IDI5LjQgMTMuMyAwIDI1LjYtNi43IDMxLjItMTcuNGwuNCAwIDAgMTYuNCAxOS42IDAgMC02OCAuMSAwek01MTYgMjEwLjlsLTIxLjUgMC0yNC45IDgwLjYtLjQgMC0yNC45LTgwLjYtMjIuMyAwIDM1LjkgOTkuMy0xLjkgNmMtMy4yIDEwLjItOC41IDE0LjItMTcuOSAxNC4yLTEuNyAwLTQuOS0uMi02LjItLjNsMCAxNi40YzEuMiAuNCA2LjUgLjUgOC4xIC41IDIwLjcgMCAzMC40LTcuOSAzOC45LTMxLjhMNTE2IDIxMC45eiJdCiAgICB9OwogICAgZmFCcmF2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJicmF2ZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjNjIiwgIk0xNDUuNiAwbDE1NyAwIDQ0LjcgNTAuOHMzOS4zLTEwLjkgNTcuOCA3LjYgMzMuOCAzNC45IDMzLjggMzQuOWwtMTIgMjkuNSAxNS4zIDQzLjdzLTQ0LjkgMTcwLjItNTAuMSAxOTFjLTEwLjQgNDAuOS0xNy40IDU2LjgtNDYuOSA3Ny41cy04Mi45IDU2LjgtOTEuNiA2Mi4yYy0xLjkgMS4yLTMuOSAyLjUtNS45IDMuOS03LjUgNS4xLTE1LjggMTAuOC0yMy41IDEwLjhzLTE2LjEtNS43LTIzLjUtMTAuOGMtMi0xLjQtNC0yLjgtNS45LTMuOS04LjctNS41LTYyLjEtNDEuNS05MS42LTYyLjJzLTM2LjUtMzYuNi00Ni45LTc3LjVjLTUuMy0yMC44LTUwLjEtMTkxLTUwLjEtMTkxTDIxLjUgMTIyLjggOS4zIDkzLjNzMTUuMy0xNi40IDMzLjgtMzQuOSA1Ny44LTcuNiA1Ny44LTcuNkwxNDUuNiAwem03OC41IDQwNy42YzMuNyAwIDguOS00LjcgMTMtOC40IC42LS41IDEuMi0xLjEgMS43LTEuNSA0LjItMy43IDQ3LjgtMzcuNSA1MS0zOS44czUuNC02LjUgMS45LTguN2MtMi44LTEuNy0xMC01LjUtMjAuMy0xMC44LTMtMS42LTYuMy0zLjItOS43LTUtMTUuNC04LTM0LjUtMTQuNy0zNy41LTE0LjdzLTIyLjEgNi44LTM3LjUgMTQuN2MtMy41IDEuOC02LjcgMy41LTkuNyA1LTEwLjMgNS4zLTE3LjYgOS4xLTIwLjMgMTAuOC0zLjYgMi4yLTEuNCA2LjQgMS45IDguN3M0Ni44IDM2LjEgNTEgMzkuOGMuNSAuNSAxLjEgMSAxLjcgMS41IDQuMSAzLjcgOS4zIDguNCAxMyA4LjRsLS4yIDB6bTAtMTY1LjdjNC43IDAgMTcuNi0zIDI2LjQtNWwyLS41YzcuOC0xLjggNy4zLTYuMyA2LjQtMTMtLjEtLjgtLjItMS42LS4zLTIuNC0uNi02LjEtNS44LTMzLjEtOS4xLTUwLjMtMS4xLTUuOC0yLTEwLjUtMi40LTEyLjktMS41LTguMS0uNi05LjQgLjctMTEuMyAuMi0uMyAuNS0uNyAuNy0xLjEgMS40LTIuMyAxNi02LjIgMjcuOS05LjUgMi41LS43IDQuOC0xLjMgNi45LTEuOSAxMC42LTMgMzIuNC0uNiA0NC4yIC42IDEuOCAuMiAzLjQgLjQgNC43IC41IDkuNiAuOSAxMC40IDIuMyA3LjIgMy44LTIuMyAxLjEtMTYuMiA2LjMtMjguNyAxMC45LTQuNyAxLjgtOS4yIDMuNS0xMi44IDQuOC0xLjUgLjUtMyAxLjEtNC41IDEuNy0xMi41IDQuNi0yNy4yIDEwLTI4LjkgMTkuNC0xLjUgOC4zIDUuMiAxOS45IDExLjMgMzAuMyAxLjYgMi44IDMuMiA1LjUgNC42IDguMSA2LjMgMTEuOSA2LjUgMTMuMyA2LjEgMTguMS0uNCAzLjktMTQuNSAxMi43LTIyLjQgMTcuNi0xLjggMS4xLTMuMyAyLjEtNC4yIDIuNy0uOCAuNS0yLjEgMS40LTMuOCAyLjQtOC42IDUuMi0yNi4zIDE2LTI2LjMgMjIuNSAwIDcuOCAyNC42IDI4LjEgMzIuNCAzMy4yczI4LjkgMTYuMSAzNy45IDE3LjggMjMtOC41IDMxLjItMjMuOGM3LjctMTQuNCAxLjctMjguNS0zLjItNDBsLS45LTIuMmMtNC41LTEwLjYgMS45LTE3IDYuMi0yMS4zIC41LS41IDEtMSAxLjQtMS40bDQzLTQ1LjdjMS4zLTEuMyAyLjUtMi42IDMuNy0zLjggNS44LTUuNyAxMC44LTEwLjUgMTAuOC0yMi44IDAtMTQuOS01Ny41LTg0LjUtNTcuNS04NC41cy00OC41IDkuMy01NS4xIDkuM2MtNS4yIDAtMTUuMy0zLjUtMjUuOC03LjEtMi43LS45LTUuNC0xLjktOC0yLjctMTMtNC4zLTIxLjgtNC40LTIxLjgtNC40cy04LjcgMC0yMS44IDQuNGMtMi43IC45LTUuNCAxLjgtOCAyLjctMTAuNSAzLjYtMjAuNiA3LjEtMjUuOCA3LjEtNi41IDAtNTUuMS05LjMtNTUuMS05LjNzLTU3LjUgNjkuNi01Ny41IDg0LjVjMCAxMi4zIDQuOSAxNy4xIDEwLjggMjIuOCAxLjIgMS4yIDIuNSAyLjQgMy43IDMuOGw0My4xIDQ1LjhjLjQgLjUgLjkgLjkgMS40IDEuNCA0LjMgNC4zIDEwLjYgMTAuNyA2LjIgMjEuM2wtLjkgMi4yYy00LjkgMTEuNS0xMSAyNS42LTMuMiA0MCA4LjIgMTUuMyAyMi4yIDI1LjUgMzEuMiAyMy44czMwLjEtMTIuNyAzNy45LTE3LjggMzIuNC0yNS40IDMyLjQtMzMuMmMwLTYuNS0xNy43LTE3LjMtMjYuMy0yMi41LTEuNy0xLTMuMS0xLjktMy44LTIuNC0uOS0uNi0yLjQtMS41LTQuMi0yLjctNy45LTQuOS0yMi0xMy43LTIyLjQtMTcuNi0uNC00LjgtLjMtNi4yIDYuMS0xOC4xIDEuMy0yLjUgMi45LTUuMyA0LjYtOC4xIDYtMTAuNCAxMi44LTIyIDExLjMtMzAuMy0xLjctOS40LTE2LjQtMTQuOC0yOC45LTE5LjQtMS42LS42LTMuMS0xLjEtNC41LTEuNy0zLjYtMS40LTguMS0zLjEtMTIuOC00LjhsLS4xIDBjLTEyLjUtNC43LTI2LjQtOS45LTI4LjctMTAuOS0zLjItMS41LTIuMy0yLjggNy4yLTMuOCAxLjMtLjEgMi45LS4zIDQuNy0uNSAxMS44LTEuMyAzMy42LTMuNiA0NC4yLS42IDIuMSAuNiA0LjQgMS4yIDYuOSAxLjkgMTEuOSAzLjIgMjYuNSA3LjIgMjcuOSA5LjUgLjIgLjQgLjUgLjcgLjcgMS4xIDEuMyAxLjkgMi4yIDMuMiAuNyAxMS4zLS40IDIuNC0xLjMgNy4xLTIuNCAxMi45LTMuMyAxNy4yLTguNSA0NC4yLTkuMSA1MC4zLS4xIC44LS4yIDEuNy0uMyAyLjQtLjggNi43LTEuNCAxMS4yIDYuNCAxM2wyIC41YzguOCAyIDIxLjggNSAyNi40IDVsMC0uMXoiXQogICAgfTsKICAgIGZhRXRzeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJldHN5IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYyZDciLCAiTTM4NCAzNDhjLTEuOCAxMC43LTEzLjggMTEwLTE1LjUgMTMyLTExNy45LTQuMy0yMTkuOS00LjctMzY4LjUgMGwwLTI1LjVjNDUuNS04LjkgNjAuNi04IDYxLTM1LjIgMS44LTcyLjMgMy41LTI0NC4xIDAtMzIyLTEtMjguNS0xMi4xLTI2LjgtNjEtMzZMMCAzNS44YzczLjkgMi40IDI1NS45IDguNiAzNjMtMy44LTMuNSAzOC4yLTcuOCAxMjYuNS03LjggMTI2LjVsLTIzLjIgMEMzMjAuOSAxMTUuNyAzMTMuMiA2OCAyNzcuMyA2OGwtMTM3IDBjLTEwLjIgMC0xMC43IDMuNS0xMC43IDkuOGwwIDE2My44YzU4IC41IDg4LjUtMi41IDg4LjUtMi41IDI5LjgtMSAyNy42LTguNSA0MC43LTY1LjNsMjUuOCAwYy00LjQgMTAxLjQtMy45IDYxLjgtMS44IDE2MC4zTDI1NyAzMzRjLTkuMi00MC4xLTkuMS02MS0zOS41LTYxLjUgMCAwLTIxLjUtMi04OC0ybDAgMTM5YzAgMjYgMTQuMyAzOC4zIDQ0LjMgMzguM2w4OS4zIDBjNjMuNiAwIDY2LjYtMjUgOTguNy05OS44bDIyLjIgMHoiXQogICAgfTsKICAgIGZhQnRjID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJ0YyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMTVhIiwgIk0zMTAuNCAyNDIuNmMyNy43LTE0LjIgNDUuNC0zOS40IDQxLjMtODEuMy01LjQtNTcuNC01Mi41LTc2LjYtMTE0LjgtODEuOWwwLTc5LjQtNDguNSAwIDAgNzcuMmMtMTIuNiAwLTI1LjUgLjMtMzguNCAuNmwwLTc3LjgtNDguNSAwIDAgNzkuNGMtMTcuOCAuNS0zOC42IC4zLTk3LjQgMGwwIDUxLjdjMzguMy0uNyA1OC40LTMuMSA2MyAyMS40bDAgMjE3LjRjLTIuOSAxOS41LTE4LjUgMTYuNy01My4zIDE2LjFMNCA0NDMuN2M4OC41IDAgOTcuNCAuMyA5Ny40IC4zbDAgNjggNDguNSAwIDAtNjcuMWMxMy4yIC4zIDI2LjIgLjMgMzguNCAuM2wwIDY2LjcgNDguNSAwIDAtNjhjODEuMy00LjQgMTM1LjYtMjQuOSAxNDIuOS0xMDEuNSA1LjctNjEuNC0yMy4zLTg4LjktNjkuMy05OS45ek0xNTAuOCAxMzQuNmMyNy40IDAgMTEzLjEtOC41IDExMy4xIDQ4LjUgMCA1NC41LTg1LjcgNDguMi0xMTMuMSA0OC4ybDAtOTYuN3ptMCAyNTEuOGwwLTEwNi41YzMyLjggMCAxMzMuMS05LjEgMTMzLjEgNTMuMyAwIDYwLjItMTAwLjQgNTMuMy0xMzMuMSA1My4zeiJdCiAgICB9OwogICAgZmFBZG4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYWRuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxNzAiLCAiTTI1NiAxNjcuNWw2NC45IDk4LjgtMTI5LjggMCA2NC45LTk4Ljh6TTggMjU2YTI0OCAyNDggMCAxIDEgNDk2IDAgMjQ4IDI0OCAwIDEgMSAtNDk2IDB6bTM5Ni4yIDgyLjdsLTE0OC4yLTIyMy4yLTE0OC4yIDIyMy4yIDMwLjQgMCAzMy42LTUxLjcgMTY4LjYgMCAzMy42IDUxLjcgMzAuMiAweiJdCiAgICB9OwogICAgZmFTcXVhcmVYVHdpdHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUteC10d2l0dGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2MWEiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTI5Ny4xIDg0bC0xMDMuOCAxMTguNiAxMjIuMSAxNjEuNC05NS42IDAtNzQuOC05Ny45LTg1LjcgOTcuOS00Ny41IDAgMTExLTEyNi45LTExNy4xLTE1My4xIDk4IDAgNjcuNyA4OS41IDc4LjItODkuNSA0Ny41IDB6TTMyMy4zIDM2Ny42bC0xNjkuOS0yMjQuNy0yOC4zIDAgMTcxLjggMjI0LjcgMjYuNCAweiJdCiAgICB9OwogICAgZmFTcXVhcmVGb250QXdlc29tZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZm9udC1hd2Vzb21lIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU1YWQiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTkwIDEyMmMwIDkuMy00LjggMTcuNC0xMi4xIDIybDE4OC45IDBjNy4zIDAgMTMuMiA1LjkgMTMuMiAxMy4yIDAgMS44LS40IDMuNy0xLjEgNS40TDMxMiAyNjQgMzQyLjkgMzMzLjRjLjcgMS43IDEuMSAzLjUgMS4xIDUuNCAwIDcuMy01LjkgMTMuMi0xMy4yIDEzLjJsLTE4Ni44IDAgMCAzMi0zMiAwIDAtMjA5LjVjLTYuMS00LjgtMTAtMTIuMi0xMC0yMC41IDAtMTQuNCAxMS42LTI2IDI2LTI2czI2IDExLjYgMjYgMjZ6Il0KICAgIH07CiAgICBmYUZvcnVtYmVlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZvcnVtYmVlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyMTEiLCAiTTUuOCAzMDkuN0MyIDI5Mi43IDAgMjc1LjUgMCAyNTguMyAwIDEzNSA5OS44IDM1IDIyMy4xIDM1IDIzOS43IDM1IDI1Ni40IDM3IDI3Mi40IDQwLjUgMTQ5IDg3LjUgNTEuOSAxODYgNS44IDMwOS43ek0zOTguNyAxMjAuNWMtMTMuNy0xNy41LTI5LjctMzIuNy00Ny44LTQ1LjMtMTQ5LjYgNDQuMy0yNjYuMyAxNjIuMS0zMDkuNyAzMTIgMTIuNSAxOC4xIDI4IDM1LjYgNDUuMiA0OSA0My4xLTE1MS4zIDE2MS4yLTI3MS43IDMxMi4zLTMxNS43em0xNS44IDI1Mi43YzE1LjItMjUuMSAyNS40LTUzLjcgMjkuNS04Mi44LTc5LjQgNDIuOS0xNDUgMTEwLjYtMTg3LjYgMTkwLjMgMzAtNC40IDU4LjktMTUuMyA4NC42LTMxLjMgMzUgMTMuMSA3MC45IDI0LjMgMTA3IDMzLjYtOS4zLTM2LjUtMjAuNC03NC41LTMzLjUtMTA5Ljh6bTI5LjctMTQ1LjVjLTIuNi0xOS41LTcuOS0zOC43LTE1LjgtNTYuOC0xMzcuOSA0NS44LTI0Ni40IDE1Ni42LTI5MS4zIDI5NS4xIDE4LjEgNy42IDM3IDEyLjUgNTYuNiAxNS4yIDQ2LjMtMTE0LjEgMTM2LjgtMjA2LjggMjUwLjUtMjUzLjV6Il0KICAgIH07CiAgICBmYTQyR3JvdXAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiNDItZ3JvdXAiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiaW5ub3NvZnQiXSwgImUwODAiLCAiTTMyMCA5NmwwIDMyMGMyMSAwIDQxLjgtNC4xIDYxLjItMTIuMnMzNy0xOS44IDUxLjktMzQuNyAyNi42LTMyLjUgMzQuNy01MS45IDEyLjItNDAuMiAxMi4yLTYxLjItNC4xLTQxLjgtMTIuMi02MS4yLTE5LjgtMzcuMS0zNC43LTUxLjktMzIuNS0yNi42LTUxLjktMzQuNy00MC4yLTEyLjItNjEuMi0xMi4yek0wIDI1NkwxNjAgNDE2IDMyMCAyNTYgMTYwIDk2IDAgMjU2em00ODAgMGMwIDIxIDQuMSA0MS44IDEyLjIgNjEuMnMxOS44IDM3IDM0LjcgNTEuOSAzMi41IDI2LjYgNTEuOSAzNC43IDQwLjIgMTIuMiA2MS4yIDEyLjJsMC0zMjBjLTQyLjQgMC04My4xIDE2LjktMTEzLjEgNDYuOVM0ODAgMjEzLjYgNDgwIDI1NnoiXQogICAgfTsKICAgIGZhSW5ub3NvZnQgPSBmYTQyR3JvdXA7CiAgICBmYVN0dW1ibGV1cG9uQ2lyY2xlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0dW1ibGV1cG9uLWNpcmNsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWEzIiwgIk0yNjQgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6bTAgMTc3LjVjLTkuOCAwLTE3LjggOC0xNy44IDE3LjhsMCAxMDYuOWMwIDQwLjktMzMuOSA3My45LTc0LjkgNzMuOS00MS40IDAtNzQuOS0zMy41LTc0LjktNzQuOWwwLTQ2LjUgNTcuMyAwIDAgNDUuOGMwIDEwIDggMTcuOCAxNy44IDE3LjhzMTcuOC03LjkgMTcuOC0xNy44bDAtMTA4LjRjMC00MCAzNC4yLTcyLjEgNzQuNy03Mi4xIDQwLjcgMCA3NC43IDMyLjMgNzQuNyA3Mi42bDAgMjMuNy0zNC4xIDEwLjEtMjIuOS0xMC43IDAtMjAuNmMuMS05LjYtNy45LTE3LjYtMTcuNy0xNy42ek00MzEuNiAzMDkuMWMwIDQxLjQtMzMuNSA3NC45LTc0LjkgNzQuOS00MS4yIDAtNzQuOS0zMy4yLTc0LjktNzQuMmwwLTQ2LjggMjIuOSAxMC43IDM0LjEtMTAuMSAwIDQ3LjFjMCA5LjggOCAxNy42IDE3LjggMTcuNnMxNy44LTcuOSAxNy44LTE3LjZsMC00OCA1Ny4zIDBjLS4xIDQ1LjktLjEgNDYuNC0uMSA0Ni40eiJdCiAgICB9OwogICAgZmFTeW1mb255ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN5bWZvbnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjgzZCIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek0zODkuNyAxNTEuNWMtMTEuNSAuNC0xOS40LTYuNC0xOS44LTE2LjktLjMtOS4yIDYuNy0xMy40IDYuNS0xOC45LS4yLTYuNS0xMC4yLTYuOC0xMi45LTYuNy0zOS44IDEuMy00OC42IDU3LTU4LjkgMTEzLjggMjEuNCAzLjIgMzYuNi0uNyA0NS4xLTYuMiAxMi03LjctMy4zLTE1LjctMS40LTI0LjYgNC0xOC4yIDMyLjYtMTkgMzIgNS4zLS40IDE3LjktMjUuOSA0MS44LTc3LjYgMzUuNy0xMC44IDU5LjUtMTguNCAxMTUtNTguMiAxNjEuNy0yOSAzNC41LTU4LjQgMzkuOC03MS42IDQwLjMtMjQuNiAuOS00MS0xMi4zLTQxLjYtMjkuOC0uNi0xNyAxNC40LTI2LjMgMjQuMy0yNi42IDIxLjktLjggMzAuMSAyNS43IDE0LjkgMzQtMTIuMSA5LjcgLjEgMTIuNiAyLjEgMTIuNiAxMC40LS40IDE3LjMtNS41IDIyLjItOSAyNC0yMCAzMy4yLTU0LjkgNDUuNC0xMTguMyA4LjItNDkuNyAxNy03OCAxOC4yLTgyLTE2LjktMTIuNy0yNy4xLTI4LjYtNDkuOC0zNC43LTE1LjYtNC4yLTI1LjEtLjYtMzEuOCA3LjgtNy45IDEwLTUuMyAyMyAyLjQgMzAuN2wxMi42IDE0YzE1LjUgMTcuOSAyNCAzMS45IDIwLjggNTAuNi01LjEgMjkuOS00MC43IDUyLjktODIuOSAzOS45LTM2LTExLjEtNDIuNy0zNi42LTM4LjQtNTAuNiA3LjUtMjQuMiA0Mi40LTExLjcgMzQuNiAxMy42LTIuOCA4LjYtNC45IDguNy02LjMgMTMuMS00LjYgMTQuOCA0MS44IDI4LjQgNTEtMS40IDQuNS0xNC41LTUuMy0yMS43LTIyLjItMzkuOS0yOC41LTMxLjctMTYtNjUuNSAyLjktNzkuNyA1Mi44LTM5LjQgMTAwLjUgMTcuNSAxMTAuNiAyNS44IDM3LjItMTA5IDEwMC41LTEwNS41IDEwMi40LTEwNS41IDI1LjItLjggNDQuMiAxMC42IDQ0LjggMjguNiAuMiA3LjctNC4yIDIyLjYtMTkuNSAyMy4xeiJdCiAgICB9OwogICAgZmFTYWxlc2ZvcmNlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNhbGVzZm9yY2UiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjgzYiIsICJNMjQ5LjQgMjQ1LjZsLTI2LjQgMGMuNy01LjIgMy4zLTE0LjEgMTMuNi0xNC4xIDYuOCAwIDEyIDMuOCAxMi43IDE0LjF6TTM4NiAyMzEuOGMtLjUgMC0xNC4xLTEuOC0xNC4xIDIwczEzLjYgMjAgMTQuMSAyMGMxMyAwIDE0LjEtMTMuNSAxNC4xLTIwIDAtMjEuOC0xMy43LTIwLTE0LjEtMjB6TTE0Mi44IDI1NS41Yy0xLjEgLjktMiAyLTIuNSAzLjJzLS44IDIuNy0uNyA0YzAgNC44IDIuMSA2LjEgMy4zIDcgNC43IDMuNyAxNS4xIDIuMSAyMC45IDFsMC0xNi45Yy01LjMtMS4xLTE2LjctMi0yMC45IDEuNnpNNjQwLjUgMjMyYzAgODcuNi04MCAxNTQuNC0xNjUuNCAxMzYuNC0xOC40IDMzLTcwLjcgNzAuOC0xMzIuMiA0MS42LTQxLjIgOTYtMTc3LjkgOTIuMi0yMTMuOC01LjItMTE5LjcgMjMuOS0xNzguOC0xMzguNC03NS4zLTE5OS4zLTM0LjgtNzkuNCAyMi42LTE3My42IDExNC4zLTE3My42IDE5LjEgMCAzNy45IDQuNCA1NSAxMi45czMyIDIwLjcgNDMuNiAzNS44YzIwLjctMjEuNCA0OS40LTM0LjggODEuMS0zNC44IDQyLjMgMCA3OSAyMy41IDk4LjggNTguNiA5Mi44LTQwLjcgMTkzLjggMjguMiAxOTMuOCAxMjcuNXpNMTIwLjkgMjYzLjhjMC0xMS44LTExLjctMTUuMi0xNy45LTE3LjItNS4zLTIuMS0xMy40LTMuNS0xMy40LTguOSAwLTkuNSAxNy02LjcgMjUuMi0yLjEgMCAwIDEuMiAuNyAxLjYtLjUgLjItLjcgMi40LTYuNiAyLjYtNy4zIC4xLS4zIC4xLS42LS4xLS44cy0uNC0uNS0uNi0uNmMtMTIuMy03LjYtNDAuNy04LjUtNDAuNyAxMi43IDAgMTIuNSAxMS41IDE1LjQgMTcuOSAxNy4yIDQuNyAxLjYgMTMuMiAzIDEzLjIgOC43IDAgNC0zLjUgNy4xLTkuMiA3LjEtNi45IDAtMTMuNS0yLjItMTktNi4zLS41LS4yLTEuNC0uNy0xLjYgLjdsLTIuNCA3LjVjLS41IC45IC4yIDEuMiAuMiAxLjQgMS44IDEuNCAxMC4zIDYuNiAyMi44IDYuNiAxMy4yIDAgMjEuNC03LjEgMjEuNC0xOC4xbDAgMHptMzItNDIuNmMtMTAuMSAwLTE4LjcgMy4yLTIxLjQgNS4yLS4xIC4xLS4yIC4yLS4zIC4zcy0uMSAuMi0uMSAuNCAwIC4zIDAgLjQgLjEgLjMgLjIgLjRsMi42IDcuMWMuMSAuMiAuMiAuNSAuNSAuNnMuNSAuMiAuNyAuMWMuNiAwIDYuOC00IDE2LjktNCA0IDAgNy4xIC43IDkuMiAyLjQgMy42IDIuOCAzLjEgOC4zIDMuMSAxMC42LTQuOC0uMy0xOS4xLTMuNC0yOS40IDMuOC0yLjMgMS42LTQuMyAzLjgtNS41IDYuM3MtMS45IDUuNC0xLjggOC4yYzAgNS45IDEuNSAxMC40IDYuNiAxNC40IDEyLjIgOC4yIDM2LjMgMiAzOC4xIDEuNCAxLjYtLjMgMy41LS43IDMuNS0xLjlsMC0zMy45YzAtNC42IC4zLTIxLjYtMjIuOC0yMS42bDAgLjF6bTQ2LjYtMjFjMC0uMiAwLS4zLS4xLS41cy0uMS0uMy0uMy0uNC0uMi0uMi0uNC0uMy0uMy0uMS0uNS0uMWwtOS44IDBjLS4yIDAtLjMgMC0uNSAuMXMtLjMgLjEtLjQgLjMtLjIgLjItLjMgLjQtLjEgLjMtLjEgLjVsMCA3OWMwIC4yIDAgLjMgLjEgLjVzLjEgLjMgLjMgLjQgLjIgLjIgLjQgLjMgLjMgLjEgLjUgLjFsOS45IDBjLjIgMCAuMyAwIC41LS4xcy4zLS4xIC40LS4zIC4yLS4yIC4zLS40IC4xLS4zIC4xLS41bC0uMS03OXptNTUuNyAyOC45Yy0yLjEtMi4zLTYuOC03LjUtMTcuNi03LjUtMy41IDAtMTQuMiAuMi0yMC43IDguOS02LjQgNy42LTYuNiAxOC4xLTYuNiAyMS40IDAgMy4xIC4yIDE0LjMgNy4xIDIxLjIgMi42IDIuOSA5LjEgOC4yIDIyLjggOC4yIDEwLjggMCAxNi41LTIuMyAxOC42LTMuOCAuNS0uMiAuNy0uNyAuMi0xLjlsLTIuMy02LjhjLS4xLS4zLS4zLS41LS42LS42cy0uNS0uMi0uOC0uMWMtMi42IC45LTYuMyAyLjgtMTUuMyAyLjgtMTcuNCAwLTE2LjgtMTQuNy0xNi45LTE2LjdsMzcuMiAwYy4zIDAgLjUtLjEgLjctLjNzLjQtLjQgLjQtLjdjLS4zIDAgMi4xLTE0LjctNi4xLTI0LjJsMCAwem0zNi43IDUyLjdjMTMuMiAwIDIxLjQtNy4xIDIxLjQtMTguMSAwLTExLjgtMTEuNy0xNS4yLTE3LjktMTcuMi00LjEtMS43LTEzLjQtMy40LTEzLjQtOC45IDAtMy44IDMuMy02LjQgOC41LTYuNCA1LjggLjEgMTEuNSAxLjYgMTYuNyA0LjIgMCAwIDEuMiAuNyAxLjYtLjUgLjItLjcgMi40LTYuNiAyLjYtNy4zIC4xLS4zIC4xLS42LS4xLS44cy0uNC0uNS0uNi0uNmMtNy45LTQuOS0xNi43LTQuOS0yMC4yLTQuOS0xMiAwLTIwLjUgNy4zLTIwLjUgMTcuNiAwIDEyLjUgMTEuNSAxNS40IDE3LjkgMTcuMiA2LjEgMiAxMy4yIDMuMyAxMy4yIDguNyAwIDQtMy41IDcuMS05LjIgNy4xLTYuOSAwLTEzLjUtMi4yLTE5LTYuNC0uMS0uMS0uMy0uMi0uNS0uMnMtLjQgMC0uNSAuMS0uMyAuMi0uNCAuMy0uMiAuMy0uMiAuNWwtMi4zIDcuNWMtLjUgLjkgLjIgMS4yIC4yIDEuNCAxLjcgMS40IDEwLjMgNi42IDIyLjggNi42bDAgMHpNMzU3LjYgMjI0YzAtLjctLjItMS4yLTEuMi0xLjJsLTExLjggMGMwLS4xIC45LTguOSA0LjUtMTIuNSA0LjItNC4yIDExLjgtMS42IDEyLTEuNiAxLjIgLjUgMS40IDAgMS42LS41bDIuOC03LjhjLjctLjkgMC0xLjItLjItMS40LTUuMS0yLTE3LjQtMi45LTI0LjUgNC4yLTUuNSA1LjUtNyAxMy45LTggMTkuNWwtOC41IDBjLS4zIDAtLjYgLjItLjggLjRzLS4zIC41LS40IC44bC0xLjQgNy44YzAgLjcgLjIgMS4yIDEuMiAxLjJsOC4yIDBjLTguNSA0Ny45LTguNyA1MC4yLTEwLjMgNTUuNS0xLjEgMy42LTMuMyA2LjktNS45IDcuOC0uMSAwLTMuOSAxLjctOS42LS4yIDAgMC0uOS0uNS0xLjQgLjctLjIgLjctMi42IDYuOC0yLjggNy41czAgMS40IC41IDEuNGM1LjEgMiAxMyAxLjggMTcuOSAwIDYuMy0yLjMgOS43LTcuOSAxMS41LTEyLjkgMi44LTcuNyAyLjgtOS44IDExLjgtNTkuN2wxMi4yIDBjLjMgMCAuNi0uMiAuOC0uNHMuMy0uNSAuNC0uOGwxLjQtNy44ek00MTEgMjQwYy0uNi0xLjctNS4xLTE4LjEtMjUuMi0xOC4xLTE1LjIgMC0yMyAxMC0yNS4yIDE4LjEtMSAzLTMuMiAxNCAwIDIzLjUgLjEgLjMgNC40IDE4LjEgMjUuMiAxOC4xIDE1IDAgMjIuOS05LjYgMjUuMi0xOC4xIDMuMi05LjYgMS0yMC41IDAtMjMuNXptNDUuNC0xNi43Yy01LTEuNy0xNi42LTEuOS0yMi4xIDUuNGwwLTQuNWMwLS4yIDAtLjMtLjEtLjVzLS4xLS4zLS4zLS40LS4yLS4yLS40LS4zLS4zLS4xLS41LS4xbC05LjQgMGMtLjIgMC0uMyAwLS41IC4xcy0uMyAuMS0uNCAuMy0uMiAuMi0uMyAuNC0uMSAuMy0uMSAuNWwwIDU1LjNjMCAuMiAwIC4zIC4xIC41cy4xIC4zIC4zIC40IC4yIC4yIC40IC4zIC4zIC4xIC41IC4xbDkuNiAwYy4yIDAgLjMgMCAuNS0uMXMuMy0uMSAuNC0uMyAuMi0uMiAuMy0uNCAuMS0uMyAuMS0uNWwwLTI3LjhjMC0yLjkgLjEtMTEuNCA0LjUtMTUuMSA0LjktNC45IDEyLTMuNCAxMy40LTMuMSAuMyAwIC42LS4xIC44LS4zcy40LS40IC42LS43YzEuMi0yLjYgMi4yLTUuMyAzLjEtOCAuMS0uMyAuMS0uNSAwLS44cy0uMy0uNS0uNS0uNmwwIDB6bTQ2LjggNTQuMWwtMi4xLTcuM2MtLjUtMS4yLTEuNC0uNy0xLjQtLjctNC4yIDEuOC0xMC4xIDEuOS0xMS4zIDEuOS00LjYgMC0xNy4yLTEuMS0xNy4yLTE5LjggMC02LjIgMS44LTE5LjggMTYuNS0xOS44IDMuOS0uMSA3LjggLjUgMTEuNSAxLjYgMCAwIC45IC41IDEuMi0uNyAuOS0yLjYgMS42LTQuNSAyLjYtNy41IC4yLS45LS41LTEuMi0uNy0xLjItMTEuNi0zLjktMjIuMy0yLjUtMjcuOCAwLTEuNiAuNy0xNi4yIDYuNS0xNi4yIDI3LjUgMCAyLjktLjYgMzAuMSAyOC45IDMwLjEgNS4zIDAgMTAuNi0xIDE1LjUtMi44IC4yLS4yIC40LS40IC41LS42cy4xLS41IDAtLjhsMCAwem01My45LTM5LjVjLS44LTMtNS40LTE2LjItMjIuMy0xNi4yLTE2IDAtMjMuNSAxMC4xLTI1LjYgMTguNi0xLjIgMy44LTEuNyA3LjgtMS43IDExLjggMCAyNS45IDE4LjggMjkuNCAyOS45IDI5LjQgMTAuOCAwIDE2LjUtMi4zIDE4LjYtMy44IC41LS4yIC43LS43IC4yLTEuOWwtMi40LTYuOGMtLjEtLjMtLjMtLjUtLjYtLjZzLS42LS4yLS44LS4xYy0yLjYgLjktNi4zIDIuOC0xNS4zIDIuOC0xNy40IDAtMTYuOS0xNC43LTE2LjktMTYuN2wzNy4yIDBjLjMgMCAuNS0uMSAuNy0uM3MuNC0uNCAuNC0uN2MtLjIgMCAuOS03LjEtMS40LTE1LjVsMCAwem0tMjMuMy02LjRjLTEwLjMgMC0xMyA5LTEzLjYgMTQuMWwyNi40IDBjLS45LTExLjktNy42LTE0LjEtMTIuNy0xNC4xbDAgMHoiXQogICAgfTsKICAgIGZhU291cmNldHJlZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzb3VyY2V0cmVlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3ZDMiLCAiTTQyNy40IDIwM2MwLTExMi4xLTkwLjktMjAzLTIwMy0yMDMtMTEyLjEtLjItMjAzIDkwLjYtMjAzLjIgMjAyLjYtLjEgNDMgMTMuNSA4NC44IDM4LjcgMTE5LjZzNjAuOSA2MC42IDEwMS44IDczLjhsMCAxMDEuN2MwIDMuOCAxLjUgNy40IDQuMiAxMC4xczYuMyA0LjIgMTAuMSA0LjJsOTYuNCAwYzMuOCAwIDcuNC0xLjUgMTAuMS00LjJzNC4yLTYuMyA0LjItMTAuMWwwLTEwMS42YzQwLjgtMTMuMiA3Ni41LTM5IDEwMS43LTczLjdzMzguOS03Ni41IDM5LTExOS40em0tMjcxLjYgMGMwLTkwLjggMTM3LjMtOTAuOCAxMzcuMyAwLS4xIDg5LjktMTM3LjMgOTEtMTM3LjMgMHoiXQogICAgfTsKICAgIGZhTGlua2VkaW5JbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsaW5rZWRpbi1pbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMGUxIiwgIk0xMDAuMyA0NDhsLTkyLjkgMCAwLTI5OS4xIDkyLjkgMCAwIDI5OS4xek01My44IDEwOC4xQzI0LjEgMTA4LjEgMCA4My41IDAgNTMuOCAwIDM5LjUgNS43IDI1LjkgMTUuOCAxNS44czIzLjgtMTUuOCAzOC0xNS44IDI3LjkgNS43IDM4IDE1LjggMTUuOCAyMy44IDE1LjggMzhjMCAyOS43LTI0LjEgNTQuMy01My44IDU0LjN6TTQ0Ny45IDQ0OGwtOTIuNyAwIDAtMTQ1LjZjMC0zNC43LS43LTc5LjItNDguMy03OS4yLTQ4LjMgMC01NS43IDM3LjctNTUuNyA3Ni43bDAgMTQ4LjEtOTIuOCAwIDAtMjk5LjEgODkuMSAwIDAgNDAuOCAxLjMgMGMxMi40LTIzLjUgNDIuNy00OC4zIDg3LjktNDguMyA5NCAwIDExMS4zIDYxLjkgMTExLjMgMTQyLjNsMCAxNjQuMy0uMSAweiJdCiAgICB9OwogICAgZmFIdG1sNSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJodG1sNSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMTNiIiwgIk0wIDMyTDM0LjkgNDI3LjggMTkxLjUgNDgwIDM0OS4xIDQyNy44IDM4NCAzMiAwIDMyek0zMDguMiAxNTkuOWwtMTgzLjggMCA0LjEgNDkuNCAxNzUuNiAwLTEzLjYgMTQ4LjQtOTcuOSAyNyAwIC4zLTEuMSAwLTk4LjctMjcuMy02LTc1LjggNDcuNyAwIDMuNSAzOC4xIDUzLjUgMTQuNSA1My43LTE0LjUgNi02Mi4yLTE2Ni45IDAtMTIuOC0xNDUuNiAyNDEuMSAwLTQuNCA0Ny43eiJdCiAgICB9OwogICAgZmFSdXN0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJ1c3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA3YSIsICJNNTA4LjUgMjQ5LjhsLTIxLjgtMTMuNWMtLjItMi0uMy0zLjktLjUtNS45bDE4LjctMTcuNWMuOS0uOSAxLjYtMS45IDItMy4xcy41LTIuNSAuMi0zLjctLjgtMi40LTEuNi0zLjMtMS44LTEuNy0zLTIuMWwtMjQtOWMtLjUtMS45LTEuMS0zLjgtMS43LTUuNmwxNS0yMC44Yy43LTEgMS4yLTIuMiAxLjMtMy40czAtMi41LS41LTMuNy0xLjItMi4yLTIuMi0yLjktMi4xLTEuMy0zLjQtMS41bC0yNS40LTQuMmMtLjktMS43LTEuOC0zLjQtMi43LTUuMmwxMC43LTIzLjRjLjUtMS4xIC43LTIuNCAuNi0zLjZzLS41LTIuNC0xLjItMy41LTEuNi0xLjktMi44LTIuNS0yLjQtLjgtMy42LS44bC0yNS44IC45Yy0xLjItMS41LTIuNC0yLjktMy42LTQuNEw0MzkgODEuOGMuMy0xLjIgLjMtMi41LS4xLTMuN3MtMS0yLjMtMS45LTMuMi0yLTEuNS0zLjItMS45LTIuNS0uNC0zLjctLjFMNDA1IDc4LjljLTEuNC0xLjItMi45LTIuNC00LjQtMy42bC45LTI1LjhjLjEtMS4zLS4yLTIuNS0uOC0zLjZzLTEuNC0yLjEtMi41LTIuOC0yLjItMS4xLTMuNS0xLjItMi41IC4xLTMuNyAuNkwzNjcuNyA1My4yYy0xLjctLjktMy40LTEuOC01LjEtMi43bC00LjItMjUuNGMtLjItMS4yLS43LTIuNC0xLjUtMy40cy0xLjgtMS43LTIuOS0yLjItMi40LS43LTMuNy0uNS0yLjQgLjYtMy40IDEuM0wzMjYgMzUuM2MtMS45LS42LTMuOC0xLjEtNS42LTEuN2wtOS0yNGMtLjQtMS4yLTEuMi0yLjItMi4xLTNzLTIuMS0xLjQtMy4zLTEuNi0yLjUtLjItMy43IC4yLTIuMyAxLjEtMy4xIDJMMjgxLjYgMjUuOWMtMi0uMi0zLjktLjQtNS45LS41TDI2Mi4zIDMuNWMtLjctMS4xLTEuNi0xLjktMi43LTIuNnMtMi4zLS45LTMuNi0uOS0yLjUgLjMtMy42IC45LTIgMS41LTIuNyAyLjZMMjM2LjIgMjUuM2MtMiAuMi0zLjkgLjMtNS45IC42TDIxMi45IDcuMWMtLjktLjktMS45LTEuNi0zLjEtMnMtMi41LS41LTMuNy0uMi0yLjQgLjgtMy4zIDEuNi0xLjcgMS44LTIuMSAzbC05IDI0Yy0xLjkgLjYtMy44IDEuMS01LjcgMS43bC0yMC44LTE1Yy0xLS43LTIuMi0xLjItMy40LTEuM3MtMi41IDAtMy43IC41LTIuMiAxLjItMi45IDIuMi0xLjMgMi4xLTEuNSAzLjRsLTQuMiAyNS40Yy0xLjcgLjktMy40IDEuOC01LjIgMi43TDEyMC45IDQyLjZjLTEuMS0uNS0yLjQtLjctMy43LS42cy0yLjUgLjUtMy41IDEuMi0xLjkgMS43LTIuNSAyLjgtLjggMi40LS44IDMuNmwuOSAyNS44Yy0xLjUgMS4yLTMgMi40LTQuNCAzLjZMODEuOCA3M2MtMS4yLS4zLTIuNS0uMy0zLjcgLjFzLTIuMyAxLTMuMiAxLjktMS41IDItMS45IDMuMi0uNCAyLjUtLjEgMy43TDc4LjkgMTA3Yy0xLjIgMS40LTIuNCAyLjktMy42IDQuNGwtMjUuOC0uOWMtMS4zIDAtMi41IC4yLTMuNiAuOHMtMi4xIDEuNC0yLjggMi40LTEuMSAyLjItMS4yIDMuNSAuMSAyLjUgLjYgMy42bDEwLjcgMjMuNGMtLjkgMS43LTEuOCAzLjQtMi43IDUuMmwtMjUuNCA0LjFjLTEuMiAuMi0yLjQgLjctMy40IDEuNXMtMS43IDEuOC0yLjIgMi45LS43IDIuNC0uNSAzLjcgLjYgMi40IDEuMyAzLjRsMTUgMjAuOGMtLjYgMS45LTEuMSAzLjgtMS43IDUuN2wtMjQgOWMtMS4yIC40LTIuMiAxLjItMyAyLjFzLTEuNCAyLjEtMS42IDMuMy0uMiAyLjUgLjIgMy43IDEuMSAyLjMgMiAzLjFsMTguNyAxNy41Yy0uMiAyLS40IDMuOS0uNiA1LjlMMy41IDI0OS44Yy0xLjEgLjctMS45IDEuNi0yLjYgMi43cy0uOSAyLjMtLjkgMy42IC4zIDIuNSAuOSAzLjYgMS41IDIgMi42IDIuN2wyMS44IDEzLjVjLjIgMiAuMyAzLjkgLjYgNS45TDcuMSAyOTkuMWMtLjkgLjktMS42IDEuOS0yIDMuMXMtLjUgMi41LS4yIDMuNyAuOCAyLjQgMS42IDMuMyAxLjggMS43IDMgMi4xbDI0IDljLjYgMS45IDEuMSAzLjggMS43IDUuNmwtMTUgMjAuOGMtLjcgMS0xLjIgMi4yLTEuMyAzLjRzMCAyLjUgLjUgMy43IDEuMiAyLjIgMi4yIDIuOSAyLjEgMS4zIDMuNCAxLjVsMjUuNCA0LjJjLjkgMS43IDEuOCAzLjQgMi43IDUuMUw0Mi42IDM5MS4xYy0uNSAxLjEtLjcgMi40LS42IDMuNnMuNSAyLjUgMS4yIDMuNWMuNyAxLjEgMS42IDEuOSAyLjcgMi41czIuNCAuOCAzLjYgLjhsMjUuOC0uOWMxLjIgMS41IDIuNCAyLjkgMy42IDQuNEw3MyA0MzAuMmMtLjMgMS4yLS4zIDIuNSAuMSAzLjdzMSAyLjMgMS45IDMuMiAyIDEuNSAzLjIgMS45IDIuNSAuNCAzLjcgLjFsMjUuMi01LjljMS41IDEuMiAyLjkgMi40IDQuNCAzLjZsLS45IDI1LjhjMCAxLjMgLjIgMi41IC44IDMuNnMxLjQgMi4xIDIuNSAyLjggMi4yIDEuMSAzLjUgMS4yIDIuNS0uMSAzLjYtLjZsMjMuNC0xMC43YzEuNyAuOSAzLjQgMS44IDUuMSAyLjdsNC4yIDI1LjRjLjIgMS4yIC43IDIuNCAxLjUgMy40czEuOCAxLjggMi45IDIuMiAyLjQgLjcgMy43IC41IDIuNC0uNiAzLjQtMS4zbDIwLjgtMTVjMS45IC42IDMuOCAxLjEgNS42IDEuN2w5IDI0Yy40IDEuMiAxLjIgMi4yIDIuMSAzczIuMSAxLjQgMy4zIDEuNiAyLjUgLjIgMy43LS4yIDIuMy0xLjEgMy4xLTJsMTcuNS0xOC43YzIgLjIgMy45IC40IDUuOSAuNmwxMy41IDIxLjhjLjcgMS4xIDEuNiAxLjkgMi43IDIuNnMyLjMgLjkgMy42IC45IDIuNS0uMyAzLjYtLjkgMi0xLjUgMi43LTIuNmwxMy41LTIxLjhjMi0uMiAzLjktLjMgNS45LS42bDE3LjUgMTguN2MuOSAuOSAxLjkgMS42IDMuMSAyczIuNSAuNSAzLjcgLjIgMi40LS44IDMuMy0xLjYgMS43LTEuOCAyLjEtM2w5LTI0YzEuOS0uNiAzLjgtMS4xIDUuNi0xLjdsMjAuOCAxNWMxIC43IDIuMiAxLjIgMy40IDEuM3MyLjUgMCAzLjctLjUgMi4yLTEuMiAyLjktMi4yIDEuMy0yLjEgMS41LTMuNGw0LjItMjUuNGMxLjctLjkgMy40LTEuOCA1LjEtMi43bDIzLjQgMTAuN2MxLjEgLjUgMi40IC43IDMuNiAuNnMyLjQtLjUgMy41LTEuMiAxLjktMS42IDIuNS0yLjggLjgtMi40IC44LTMuNmwtLjktMjUuOGMxLjUtMS4yIDIuOS0yLjQgNC40LTMuNmwyNS4yIDUuOWMxLjIgLjMgMi41IC4zIDMuNy0uMXMyLjMtMSAzLjItMS45IDEuNS0yIDEuOS0zLjIgLjQtMi41IC4xLTMuN0w0MzMuMSA0MDVjMS4yLTEuNCAyLjQtMi45IDMuNi00LjRsMjUuOCAuOWMxLjMgLjEgMi41LS4yIDMuNi0uOHMyLjEtMS40IDIuOC0yLjVjLjctMSAxLjEtMi4yIDEuMi0zLjVzLS4xLTIuNS0uNi0zLjZsLTEwLjctMjMuNGMuOS0xLjcgMS44LTMuNCAyLjctNS4xbDI1LjQtNC4yYzEuMi0uMiAyLjQtLjcgMy40LTEuNXMxLjgtMS44IDIuMi0yLjkgLjctMi40IC41LTMuNy0uNi0yLjQtMS4zLTMuNGwtMTUtMjAuOGMuNi0xLjkgMS4xLTMuOCAxLjctNS42bDI0LTljMS4yLS40IDIuMi0xLjIgMy0yLjFzMS40LTIuMSAxLjYtMy4zIC4yLTIuNS0uMi0zLjctMS4xLTIuMy0yLTMuMWwtMTguNy0xNy41Yy4yLTEuOSAuNC0zLjkgLjYtNS45bDIxLjgtMTMuNWMxLjEtLjcgMS45LTEuNiAyLjYtMi43cy45LTIuMyAuOS0zLjYtLjMtMi41LS45LTMuNi0xLjUtMi0yLjYtMi43bDAgMHptLTE1MSAxMjkuMWMtMy42LS44LTcuNC0uMS0xMC41IDEuOXMtNS4zIDUuMi02IDguOGwtNy42IDM1LjdjLTI0LjYgMTEuMS01MS4zIDE2LjgtNzguMyAxNi43cy01My42LTYuMS03OC4xLTE3LjRsLTcuNi0zNS43Yy0uNC0xLjgtMS4xLTMuNS0yLjEtNXMtMi40LTIuOC0zLjktMy44LTMuMi0xLjctNS0yLTMuNi0uMy01LjQgLjFsLTMxLjUgNi44Yy01LjgtNi0xMS4zLTEyLjUtMTYuMy0xOS4ybDE1My4yIDBjMS43IDAgMi45LS4zIDIuOS0xLjlsMC01NC4yYzAtMS42LTEuMi0xLjktMi45LTEuOWwtNDQuOCAwIDAtMzQuNCA0OC41IDBjNC40IDAgMjMuNyAxLjMgMjkuOCAyNS45IDEuOSA3LjUgNi4yIDMyLjEgOS4xIDQwIDIuOSA4LjggMTQuNiAyNi41IDI3LjEgMjYuNWw3OSAwYy01LjMgNy4xLTExLjEgMTMuOC0xNy4zIDIwLjFsLTMyLjEtNi45em0yNS44IDM0LjVjMCAzLS45IDYtMi42IDguNXMtNCA0LjUtNi44IDUuNi01LjggMS41LTguOCAuOS01LjctMi03LjgtNC4yLTMuNi00LjgtNC4yLTcuOC0uMy02IC44LTguOCAzLjEtNS4yIDUuNi02LjkgNS40LTIuNiA4LjUtMi42bC40IDBjNCAuMSA3LjcgMS44IDEwLjUgNC42czQuMyA2LjcgNC4zIDEwLjZsLjEgMHptLTIyNS42LS43YzAgMy0uOSA2LTIuNiA4LjVzLTQuMSA0LjUtNi44IDUuNi01LjggMS41LTguOCAuOS01LjctMi03LjgtNC4yLTMuNi00LjgtNC4yLTcuOC0uMy02IC45LTguOCAzLjEtNS4yIDUuNi02LjggNS40LTIuNiA4LjUtMi42bC41IDBjNCAuMSA3LjcgMS44IDEwLjUgNC42czQuMyA2LjcgNC4zIDEwLjZsLjEgMHpNNjkuNiAyMzQuMmwzMi44LTE0LjZjMS43LS43IDMuMi0xLjggNC40LTMuMXMyLjItMi45IDIuOS00LjYgMS0zLjUgLjktNS4zLS41LTMuNi0xLjItNS4zbC02LjgtMTUuMiAyNi42IDAgMCAxMTkuNy01My42IDBjLTYuNi0yMy4yLTguNy00Ny42LTYuMS03MS42ek01OC4zIDE5OC4xYzAtMiAuNC00IDEuMi01LjhzMS45LTMuNSAzLjMtNC45IDMuMS0yLjUgNC45LTMuMyAzLjgtMS4yIDUuOC0xLjJsLjUgMGMzIC4xIDUuOSAxIDguMyAyLjhzNC4zIDQuMSA1LjQgNi45IDEuMyA1LjggLjcgOC44LTIuMSA1LjYtNC4zIDcuNy00LjkgMy41LTcuOCA0LjEtNiAuMi04LjctLjktNS4xLTMuMS02LjgtNS42LTIuNS01LjQtMi41LTguNGwwIDB6bTE1NS4yIDI0LjVsMC0zNS4zIDYzLjMgMGMzLjMgMCAyMy4xIDMuOCAyMy4xIDE4LjYgMCAxMi4zLTE1LjIgMTYuNy0yNy43IDE2LjdsLTU4LjcgMHpNMzk5IDMwNi43Yy05LjggMS4xLTIwLjYtNC4xLTIyLTEwLjEtNS44LTMyLjUtMTUuNC0zOS40LTMwLjYtNTEuNCAxOC45LTEyIDM4LjUtMjkuNiAzOC41LTUzLjMgMC0yNS41LTE3LjUtNDEuNi0yOS40LTQ5LjUtMTYuOC0xMS0zNS4zLTEzLjItNDAuMy0xMy4ybC0xOTguOSAwYzI3LjUtMzAuNyA2NC40LTUxLjUgMTA0LjktNTkuMmwyMy41IDI0LjZjMS4zIDEuMyAyLjggMi40IDQuNCAzLjFzMy41IDEuMSA1LjMgMS4yIDMuNi0uMyA1LjMtLjkgMy4yLTEuNyA0LjYtMi45bDI2LjMtMjVjMjYuOCA1IDUyLjEgMTUuOCA3NC4zIDMxLjZzNDAuNiAzNi4yIDU0LjEgNTkuOWwtMTggNDAuNmMtMS41IDMuNC0xLjUgNy4yLS4yIDEwLjZzMy45IDYuMiA3LjMgNy43bDM0LjYgMTUuM2MxLjEgMTAuOCAxLjIgMjEuNyAuNCAzMi41bC0xOS4zIDBjLTEuOSAwLTIuNyAxLjMtMi43IDMuMWwwIDguOGMwIDIwLjgtMTEuNyAyNS4zLTIyIDI2LjV6TTI0MCA2MC4yYzAtNCAxLjYtNy45IDQuNS0xMC43czYuNy00LjUgMTAuNy00LjVsLjQgMGMzIC4xIDUuOSAxIDguNCAyLjhzNC4zIDQuMSA1LjQgNi45IDEuMyA1LjggLjcgOC44LTIuMSA1LjYtNC4zIDcuNy00LjkgMy41LTcuOCA0LTYgLjItOC43LS45LTUuMS0zLjEtNi44LTUuNi0yLjUtNS40LTIuNS04LjR6TTQzNi44IDIxNGMtMiAwLTQtLjQtNS44LTEuMnMtMy41LTEuOS00LjktMy4zLTIuNS0zLjEtMy4zLTQuOS0xLjItMy44LTEuMi01LjggLjQtNCAxLjItNS44IDEuOS0zLjUgMy4zLTQuOSAzLjEtMi41IDQuOS0zLjMgMy44LTEuMiA1LjgtMS4ybC40IDBjNCAuMSA3LjkgMS43IDEwLjcgNC42czQuNCA2LjggNC4zIDEwLjgtMS43IDcuOS00LjYgMTAuNy02LjggNC40LTEwLjggNC4zeiJdCiAgICB9OwogICAgZmFIb3JuYmlsbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJob3JuYmlsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTkyIiwgIk03Ni44IDM3MC4zYzEgNy44LS40IDE1LjgtNC4xIDIyLjhzLTkuNiAxMi42LTE2LjcgMTYuMS0xNS4xIDQuNy0yMi45IDMuMy0xNS01LjEtMjAuNi0xMC43LTkuMi0xMi45LTEwLjUtMjAuNyAwLTE1LjggMy42LTIyLjkgOS4zLTEyLjggMTYuMy0xNi41IDE1LTUgMjIuOS0zLjljLTc4LjMtMTExLjMgNTItMTkwLjUgNTItMTkwLjUtNS45IDQzLTguMiA5MS4yLTguMiA5MS4yLTY3LjMgNDEuNSAuOSA2NC4xIDM5LjggNzIuOSA5LjkgMjcgMjcuOCA1MC4yIDUxLjQgNjYuN3M1MS42IDI1LjMgODAuMyAyNS4zYzEuOSAwIDMuOC0uMiA1LjctLjNsLjEgMTguOWMtOTkuMiAxLjQtMTU4LjctMjkuMS0xODguOS01MS42em0xMDgtMzI3LjdjLjktNy4yLS4yLTE0LjYtMy40LTIxLjItMy02LjItNy42LTExLjUtMTMuNC0xNS4zcy0xMi41LTUuOS0xOS40LTYuMi0xMy44IDEuNC0xOS44IDQuNy0xMS4xIDguMy0xNC41IDE0LjMtNS4yIDEyLjgtNSAxOS43IDIuMiAxMy43IDUuOSAxOS41IDguOSAxMC42IDE1LjEgMTMuNiAxMy4xIDQuNCAyMCAzLjljLTIyLjYgMjkuOS01My44IDg5LjYtNTIuNCAxOTBsMjEuOC0uMmMwLS45LS4xLTEuOC0uMS0yLjcgMC0yOCA4LjQtNTUuMyAyNC4xLTc4LjVzMzcuOS00MS4yIDYzLjgtNTEuNmM4LTM3LjcgMzAuNy0xMTQuMyA3My44LTQ0LjMgMCAwIDQ4LjEgMi40IDkxLjIgOC4yIDAgMC03Ny44LTEyOC0xODcuNi01NC4xbDAgMHpNNDg5IDE3Ni44YzYuMy0zIDExLjctNy43IDE1LjUtMTMuNnM1LjktMTIuNyA2LjEtMTkuOC0xLjYtMTQtNS4yLTIwLTguNy0xMS0xNC45LTE0LjMtMTMuMi00LjgtMjAuMi00LjQtMTMuOCAyLjgtMTkuNSA2LjktMTAuMiA5LjYtMTMgMTYuMS0zLjcgMTMuNi0yLjcgMjAuNWMtMzEuNy0yMS45LTg5LjgtNDkuMS0xODMuNC00Ny43bC4xIDIyLjVjMi43LS4yIDUuNC0uNCA4LjEtLjQgMjguMSAwIDU1LjYgOC41IDc4LjkgMjQuM3M0MS4yIDM4LjMgNTEuNiA2NC41YzM5LjEgOSAxMDUuMSAzMS42IDM4LjUgNzIuNSAwIDAtMi4zIDQ4LjEtOC4yIDkxLjIgMCAwIDEzMy40LTgxLjIgNDktMTk0LjYgNi42IC42IDEzLjMtLjYgMTkuMy0zLjVsMCAwek0zNzQuNCA0MzYuMmMyMS40LTMyLjUgNDYuNC04OS43IDQ1LjEtMTc5LjdsLTE5LjUgLjFjLjEgMi4xIC4zIDQuMSAuMyA2LjIgMCAyOC42LTguOCA1Ni41LTI1LjEgODBzLTM5LjUgNDEuNC02Ni4zIDUxLjRjLTguOSAzOS0zMS40IDEwNi43LTcyLjggMzkuNSAwIDAtNDguMS0yLjMtOTEuMi04LjIgMCAwIDc5LjkgMTMxLjMgMTkxLjkgNTEgLjMgNC45IDEuNSA5LjYgMy42IDE0IDIuOSA2LjEgNy41IDExLjQgMTMuMSAxNS4xczEyLjIgNiAxOSA2LjQgMTMuNi0xLjEgMTkuNi00LjIgMTEuMS03LjggMTQuNy0xMy42IDUuNi0xMi40IDUuNy0xOS4yLTEuNS0xMy41LTQuOC0xOS40LTguMi0xMC45LTE0LjEtMTQuMy0xMi42LTUuMi0xOS40LTUuMWwwLS4xeiJdCiAgICB9OwogICAgZmFQaHAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGhwIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0NTciLCAiTTMyMCAxMDQuNWMxNzEuNCAwIDMwMy4yIDcyLjIgMzAzLjIgMTUxLjVTNDkxLjMgNDA3LjUgMzIwIDQwNy41QzE0OC42IDQwNy41IDE2LjggMzM1LjMgMTYuOCAyNTZTMTQ4LjcgMTA0LjUgMzIwIDEwNC41em0wLTE2LjhDMTQzLjMgODcuNyAwIDE2MyAwIDI1NlMxNDMuMyA0MjQuMyAzMjAgNDI0LjMgNjQwIDM0OSA2NDAgMjU2IDQ5Ni43IDg3LjcgMzIwIDg3Ljd6TTIxOC4yIDI0Mi41Yy03LjkgNDAuNS0zNS44IDM2LjMtNzAuMSAzNi4zbDEzLjctNzAuNmMzOCAwIDYzLjgtNC4xIDU2LjQgMzQuM3pNOTcuNCAzNTAuM2wzNi43IDAgOC43LTQ0LjhjNDEuMSAwIDY2LjYgMyA5MC4yLTE5LjEgMjYuMS0yNCAzMi45LTY2LjcgMTQuMy04OC4xLTkuNy0xMS4yLTI1LjMtMTYuNy00Ni41LTE2LjdsLTcwLjcgMC0zMi43IDE2OC43ek0yODMuMSAxMzYuN2wzNi41IDAtOC43IDQ0LjhjMzEuNSAwIDYwLjctMi4zIDc0LjggMTAuNyAxNC44IDEzLjYgNy43IDMxLTguMyAxMTMuMWwtMzcgMGMxNS40LTc5LjQgMTguMy04NiAxMi43LTkyLTUuNC01LjgtMTcuNy00LjYtNDcuNC00LjZsLTE4LjggOTYuNi0zNi41IDAgMzIuNy0xNjguNnpNNTA1IDI0Mi41Yy04IDQxLjEtMzYuNyAzNi4zLTcwLjEgMzYuM2wxMy43LTcwLjZjMzguMiAwIDYzLjgtNC4xIDU2LjQgMzQuM3pNMzg0LjIgMzUwLjNsMzYuOCAwIDguNy00NC44YzQzLjIgMCA2Ny4xIDIuNSA5MC4yLTE5LjEgMjYuMS0yNCAzMi45LTY2LjcgMTQuMy04OC4xLTkuNy0xMS4yLTI1LjMtMTYuNy00Ni41LTE2LjdsLTcwLjcgMC0zMi44IDE2OC43eiJdCiAgICB9OwogICAgZmFEaXNxdXMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGlzcXVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU3ZDUiLCAiTTI5MC4yIDUxMmMtNjIuNiAwLTExOS45LTIyLjktMTY0LjItNjAuOEwxNyA0NjYuMSA1OS4xIDM2Mi4yYy0xNC43LTMyLjQtMjIuOS02OC4zLTIyLjktMTA2LjIgMC0xNDEuNCAxMTMuNy0yNTYgMjU0LTI1NiAxNDAuMyAwIDI1NCAxMTQuNiAyNTQgMjU2IDAgMTQxLjQtMTEzLjcgMjU2LTI1NCAyNTZ6TTQyOC45IDI1NS4zbDAtLjdDNDI4LjkgMTgwLjcgMzc2LjggMTI4IDI4NyAxMjhsLTk3IDAgMCAyNTYgOTUuNiAwYzkwLjUgMCAxNDMuNC01NC45IDE0My40LTEyOC43ek0yODggMzIxLjFsLTI4LjQgMCAwLTEzMC4yIDI4LjQgMGM0MS43IDAgNjkuMyAyMy44IDY5LjMgNjQuN2wwIC43YzAgNDEuMy0yNy43IDY0LjctNjkuMyA2NC43eiJdCiAgICB9OwogICAgZmE1MDBweCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICI1MDBweCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMjZlIiwgIk03MS44IDM0NC4zYy02LjUtMTQuMi02LjktMTguMyA3LjQtMjMuMSAyNS42LTggOCA5LjIgNDMuMiA0OS4ybC4zIDAgMC05My45YzEuMi01MC4yIDQ0LTkyLjIgOTcuNy05Mi4yIDUzLjkgMCA5Ny43IDQzLjUgOTcuNyA5Ni44IDAgNjMuNC02MC44IDExMy4yLTEyOC41IDkzLjMtMTAuNS00LjItMi4xLTMxLjcgOC41LTI4LjYgNTMgMCA4OS40LTEwLjEgODkuNC02NC40IDAtNjEtNzcuMS04OS42LTExNi45LTQ0LjYtMjMuNSAyNi40LTE3LjYgNDIuMS0xNy42IDE1Ny42IDUwLjcgMzEgMTE4LjMgMjIgMTYwLjQtMjAuMSAyNC44LTI0LjggMzguNS01OCAzOC41LTkzIDAtMzUuMi0xMy44LTY4LjItMzguOC05My4zLTI0LjgtMjQuOC01Ny44LTM4LjUtOTMuMy0zOC41UzE1MSAxNjMuMyAxMjYuMyAxODhjLS4zIC4zLTE2IDE2LjUtMjEuMiAyMy45bC0uNSAuNmMtMy4zIDQuNy02LjMgOS4xLTIwLjEgNi4xLTYuOS0xLjctMTQuMy01LjgtMTQuMy0xMS44TDcwLjIgMjBjMC01IDMuOS0xMC41IDEwLjUtMTAuNUwzMjIgOS41YzguMyAwIDguMyAxMS42IDguMyAxNS4xIDAgMy45IDAgMTUuMS04LjMgMTUuMWwtMjIzLjIgMCAwIDEzMi45IC4zIDBjMTA0LjItMTA5LjggMjgyLjgtMzYgMjgyLjggMTA4LjkgMCAxNzguMS0yNDQuOCAyMjAuMy0zMTAuMSA2Mi44ek0xMzUuMSA4My41Yy0uNSA0LjIgNC42IDI0LjUgMTQuNiAyMC42IDEyNC44LTQ3LjUgMjAyLjggNDAuNCAyMDkuNCA0MC40IDQuOCAwIDIyLjgtMTUuMyAxNC4zLTIyLjgtOTMuMi04OS0yMzQuNS01Ny0yMzguMy0zOC4yek0zNjEuNSA0MTQuN2MtMTEwIDEwOS45LTI5OSA2MC44LTMzMi0xMDQuMiAwLTEyLjItMzAuNC03LjQtMjguOSAzLjMgMjQgMTczLjQgMjQ2IDI1Ni45IDM4MS42IDEyMS4zIDYuOS03LjgtMTIuNi0yOC40LTIwLjctMjAuNHpNMTgyLjEgMzA2LjZjMCA0IDQuMyA3LjMgNS41IDguNSAzIDMgNi4xIDQuNCA4LjUgNC40IDMuOCAwIDIuNiAuMiAyMi4zLTE5LjUgMTkuNiAxOS4zIDE5LjEgMTkuNSAyMi4zIDE5LjUgNS40IDAgMTguNS0xMC40IDEwLjctMTguMmwtMTcuMy0xNy4zIDE4LjItMTguMmM2LjMtNi44LTEwLjEtMjEuOC0xNi4yLTE1LjdMMjE4LjIgMjY4Yy0xOC42LTE4LjgtMTguNC0xOS41LTIxLjUtMTkuNS01IDAtMTggMTEuNy0xMi40IDE3LjNMMjAyLjUgMjg0Yy0xOC4xIDE3LjktMjAuNCAxOS4yLTIwLjQgMjIuNnoiXQogICAgfTsKICAgIGZhQWZmaWxpYXRldGhlbWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYWZmaWxpYXRldGhlbWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM2YiIsICJNMTU5LjcgMjM3LjRDMTA4LjQgMzA4LjMgNDMuMSAzNDguMiAxNCAzMjYuNi0xNS4yIDMwNC45IDIuOCAyMzAgNTQuMiAxNTkuMSAxMDUuNSA4OC4yIDE3MC44IDQ4LjMgMTk5LjkgNjkuOXMxMS4xIDk2LjYtNDAuMiAxNjcuNXptMzUxLjItNTcuM2MtNzMuOCAxMjMuNC0xOTEuOSAxODcuNy0yNjQuNSAxNDMuNi0yNS0xNS4yLTQxLjMtNDEuMi00OS03My44LTMzLjYgNjQuOC05Mi44IDExMy44LTE2NC4xIDEzMy4yIDQ5LjggNTkuMyAxMjQuMSA5Ni45IDIwNyA5Ni45IDE1MCAwIDI3MS42LTEyMy4xIDI3MS42LTI3NC45IC4xLTguNS0uMy0xNi44LTEtMjV6Il0KICAgIH07CiAgICBmYVJlZFJpdmVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJlZC1yaXZlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2UzIiwgIk0zNTMuMiAzMkw5NC44IDMyQzQyLjQgMzIgMCA3NC40IDAgMTI2LjhMMCAzODUuMkMwIDQzNy42IDQyLjQgNDgwIDk0LjggNDgwbDI1OC40IDBjNTIuNCAwIDk0LjgtNDIuNCA5NC44LTk0LjhsMC0yNTguNEM0NDggNzQuNCA0MDUuNiAzMiAzNTMuMiAzMnpNMTQ0LjkgMjAwLjlsMCA1Ni4zYzAgMjctMjEuOSA0OC45LTQ4LjkgNDguOWwwLTE1NC4yYzAtMTMuMiAxMC43LTIzLjkgMjMuOS0yMy45bDE1NC4yIDBjMCAyNy0yMS45IDQ4LjktNDguOSA0OC45bC01Ni4zIDBjLTEyLjMtLjYtMjQuNiAxMS42LTI0IDI0em0xNzYuMyA3MmwtNTYuMyAwYy0xMi4zLS42LTI0LjYgMTEuNi0yNCAyNGwwIDU2LjNjMCAyNy0yMS45IDQ4LjktNDguOSA0OC45bDAtMTU0LjJjMC0xMy4yIDEwLjctMjMuOSAyMy45LTIzLjlsMTU0LjIgMGMwIDI3LTIxLjkgNDguOS00OC45IDQ4Ljl6Il0KICAgIH07CiAgICBmYVR3aXR0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidHdpdHRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMDk5IiwgIk00NTkuNCAxNTEuN2MuMyA0LjUgLjMgOS4xIC4zIDEzLjYgMCAxMzguNy0xMDUuNiAyOTguNi0yOTguNiAyOTguNi01OS41IDAtMTE0LjctMTcuMi0xNjEuMS00Ny4xIDguNCAxIDE2LjYgMS4zIDI1LjMgMS4zIDQ5LjEgMCA5NC4yLTE2LjYgMTMwLjMtNDQuOC00Ni4xLTEtODQuOC0zMS4yLTk4LjEtNzIuOCA2LjUgMSAxMyAxLjYgMTkuOCAxLjYgOS40IDAgMTguOC0xLjMgMjcuNi0zLjYtNDguMS05LjctODQuMS01Mi04NC4xLTEwM2wwLTEuM2MxNCA3LjggMzAuMiAxMi43IDQ3LjQgMTMuMy0yOC4zLTE4LjgtNDYuOC01MS00Ni44LTg3LjQgMC0xOS41IDUuMi0zNy40IDE0LjMtNTMgNTEuNyA2My43IDEyOS4zIDEwNS4zIDIxNi40IDEwOS44LTEuNi03LjgtMi42LTE1LjktMi42LTI0IDAtNTcuOCA0Ni44LTEwNC45IDEwNC45LTEwNC45IDMwLjIgMCA1Ny41IDEyLjcgNzYuNyAzMy4xIDIzLjctNC41IDQ2LjUtMTMuMyA2Ni42LTI1LjMtNy44IDI0LjQtMjQuNCA0NC44LTQ2LjEgNTcuOCAyMS4xLTIuMyA0MS42LTguMSA2MC40LTE2LjItMTQuMyAyMC44LTMyLjIgMzkuMy01Mi42IDU0LjN6Il0KICAgIH07CiAgICBmYUZvcnRBd2Vzb21lID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZvcnQtYXdlc29tZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjg2IiwgIk00ODkuNSAyODcuOWwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMzItMzYuNiAwIDAtMTc4LjNjMC0yLjYtMi00LjYtNC42LTQuNmwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMzItMzYuNiAwIDAtMzJjMC0yLjYtMi00LjYtNC42LTQuNmwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMzItMzYuNiAwIDAtMzJjMC02LTgtNC42LTExLjctNC42bDAtMzhjOC4zLTIgMTcuMS0zLjQgMjUuNy0zLjQgMTAuOSAwIDIwLjkgNC4zIDMxLjQgNC4zIDQuNiAwIDI3LjctMS4xIDI3LjctOGwwLTYwYzAtMi42LTItNC42LTQuNi00LjYtNS4xIDAtMTUuMSA0LjMtMjQgNC4zLTkuNyAwLTIwLjktNC4zLTMyLjYtNC4zLTggMC0xNiAxLjEtMjMuNyAyLjlsMC00LjljNS40LTIuNiA5LjEtOC4zIDkuMS0xNC4zIDAtMjAuNy0zMS40LTIwLjgtMzEuNCAwIDAgNiAzLjcgMTEuNyA5LjEgMTQuM2wwIDExMS43Yy0zLjcgMC0xMS43LTEuNC0xMS43IDQuNmwwIDMyLTM2LjYgMCAwLTMyYzAtMi42LTItNC42LTQuNi00LjZsLTI3LjQgMGMtMi42IDAtNC42IDItNC42IDQuNmwwIDMyLTM2LjMgMCAwLTMyYzAtMi42LTItNC42LTQuNi00LjZsLTI3LjQgMGMtMi42IDAtNC42IDItNC42IDQuNmwwIDE3OC4zLTM2LjYgMCAwLTMyYzAtMi42LTItNC42LTQuNi00LjZsLTI3LjQgMGMtMi42IDAtNC42IDItNC42IDQuNmwwIDIxOS41IDE4Mi45IDAgMC05NmMwLTcyLjYgMTA5LjctNzIuNiAxMDkuNyAwbDAgOTYgMTgyLjkgMCAwLTIxOS41Yy4xLTIuNi0xLjktNC42LTQuNS00LjZ6bS0yODguMS00LjVjMCAyLjYtMiA0LjYtNC42IDQuNmwtMjcuNCAwYy0yLjYgMC00LjYtMi00LjYtNC42bDAtNjRjMC0yLjYgMi00LjYgNC42LTQuNmwyNy40IDBjMi42IDAgNC42IDIgNC42IDQuNmwwIDY0em0xNDYuNCAwYzAgMi42LTIgNC42LTQuNiA0LjZsLTI3LjQgMGMtMi42IDAtNC42LTItNC42LTQuNmwwLTY0YzAtMi42IDItNC42IDQuNi00LjZsMjcuNCAwYzIuNiAwIDQuNiAyIDQuNiA0LjZsMCA2NHoiXQogICAgfTsKICAgIGZhTWl4ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWl4ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA1NiIsICJNODIuNiA3Ni4xYy0zLjgtNS4xLTguNy05LjQtMTQuMi0xMi41cy0xMS43LTUuMS0xOC4xLTUuNy0xMi44IC4xLTE4LjggMi4yLTExLjYgNS4zLTE2LjMgOS42Yy0xNy42IDE2LjItMTkgNDMuNS00LjggNjIuOGw5MS44IDEyMy05Mi4zIDEyNC4xYy0xNC4yIDE5LjMtMTMuMSA0Ni42IDQuNyA2Mi44IDQuNyA0LjMgMTAuMyA3LjYgMTYuMyA5LjZzMTIuNSAyLjggMTguOCAyLjIgMTIuNS0yLjUgMTguMS01LjcgMTAuNC03LjQgMTQuMi0xMi41TDIxMC45IDI2Mi43YzEuNS0yLjEgMi4zLTQuNiAyLjMtNy4xcy0uOC01LTIuMy03LjFMODIuNiA3Ni4xek00MzguMiAzNzkuNmwtOTIuMy0xMjQuMSA5MS44LTEyM2MxNC4yLTE5LjIgMTIuOC00Ni42LTQuNy02Mi44LTQuNy00LjMtMTAuMy03LjYtMTYuMy05LjZzLTEyLjUtMi44LTE4LjgtMi4yLTEyLjUgMi41LTE4LjEgNS43LTEwLjQgNy40LTE0LjIgMTIuNWwtMTI4IDE3Mi4xYy0xLjUgMi4xLTIuMyA0LjYtMi4zIDcuMXMuOCA1IDIuMyA3LjFMMzY2IDQzNS45YzMuOCA1LjEgOC43IDkuNCAxNC4yIDEyLjVzMTEuNyA1LjEgMTguMSA1LjcgMTIuOC0uMSAxOC44LTIuMiAxMS42LTUuMyAxNi4zLTkuNmMxNy44LTE2LjIgMTktNDMuNSA0LjctNjIuOHoiXQogICAgfTsKICAgIGZhTHlmdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJseWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzYzMiLCAiTTAgODEuMWw3Ny44IDAgMCAyMDguN2MwIDMzLjEgMTUgNTIuOCAyNy4yIDYxLTEyLjcgMTEuMS01MS4yIDIwLjktODAuMi0yLjgtMTctMTQtMjQuOC0zNy4zLTI0LjgtNTlMMCA4MS4xek00ODUuOSAyNTQuNmwwLTIyIDIzLjggMCAwLTc2LjgtMjYuMSAwYy0xMC4xLTQ2LjMtNTEuMi04MC43LTEwMC4zLTgwLjctNTYuNiAwLTEwMi43IDQ2LTEwMi43IDEwMi43bDAgMTc5LjJjMTYgMi4zIDM1LjQtLjMgNTEuNy0xNCAxNy4xLTE0IDI0LjgtMzcuMiAyNC44LTU5bDAtNi43IDM4LjggMCAwLTc2LjgtMzguOCAwIDAtMjMuM2MwLTM0LjYgNTIuMi0zNC42IDUyLjIgMGwwIDc3LjFjMCA1Ni42IDQ2IDEwMi43IDEwMi43IDEwMi43bDAtNzYuNWMtMTQuNSAwLTI2LjEtMTEuNy0yNi4xLTI1Ljl6bS0yOTQuMy05OWwwIDExM2MwIDE1LjQtMjMuOCAxNS40LTIzLjggMGwwLTExMy03Ni44IDAgMCAxMzIuN2MwIDIzLjggOCA1NCA0NSA2My45IDM3IDkuOCA1OC4yLTEwLjYgNTguMi0xMC42LTIuMSAxMy40LTE0LjUgMjMuMy0zNC45IDI1LjMtMTUuNSAxLjYtMzUuMi0zLjYtNDUtNy44bDAgNzAuM2MyNS4xIDcuNSA1MS41IDkuOCA3Ny42IDQuNyA0Ny4xLTkuMSA3Ni44LTQ4LjQgNzYuOC0xMDAuOGwwLTE3OC4yLTc3LjEgMCAwIC41eiJdCiAgICB9OwogICAgZmFBcHBsZVBheSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhcHBsZS1wYXkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQxNSIsICJNMTE2LjkgMTU4LjVjLTcuNSA4LjktMTkuNSAxNS45LTMxLjUgMTQuOS0xLjUtMTIgNC40LTI0LjggMTEuMy0zMi42IDcuNS05LjEgMjAuNi0xNS42IDMxLjMtMTYuMSAxLjIgMTIuNC0zLjcgMjQuNy0xMS4xIDMzLjh6bTEwLjkgMTcuMmMtMTcuNC0xLTMyLjMgOS45LTQwLjUgOS45LTguNCAwLTIxLTkuNC0zNC44LTkuMS0xNy45IC4zLTM0LjUgMTAuNC00My42IDI2LjUtMTguOCAzMi4zLTQuOSA4MCAxMy4zIDEwNi4zIDguOSAxMyAxOS41IDI3LjMgMzMuNSAyNi44IDEzLjMtLjUgMTguNS04LjYgMzQuNS04LjYgMTYuMSAwIDIwLjggOC42IDM0LjggOC40IDE0LjUtLjMgMjMuNi0xMyAzMi41LTI2IDEwLjEtMTQuOCAxNC4zLTI5LjEgMTQuNS0yOS45LS4zLS4zLTI4LTEwLjktMjguMy00Mi45LS4zLTI2LjggMjEuOS0zOS41IDIyLjktNDAuMy0xMi41LTE4LjYtMzItMjAuNi0zOC44LTIxLjF6bTEwMC40LTM2LjJsMCAxOTQuOSAzMC4zIDAgMC02Ni42IDQxLjkgMGMzOC4zIDAgNjUuMS0yNi4zIDY1LjEtNjQuM3MtMjYuNC02NC02NC4xLTY0bC03My4yIDB6TTI1OC41IDE2NWwzNC45IDBjMjYuMyAwIDQxLjMgMTQgNDEuMyAzOC42cy0xNSAzOC44LTQxLjQgMzguOGwtMzQuOCAwIDAtNzcuNHpNNDIwLjcgMzM1LjljMTkgMCAzNi42LTkuNiA0NC42LTI0LjlsLjYgMCAwIDIzLjQgMjggMCAwLTk3YzAtMjguMS0yMi41LTQ2LjMtNTcuMS00Ni4zLTMyLjEgMC01NS45IDE4LjQtNTYuOCA0My42bDI3LjMgMGMyLjMtMTIgMTMuNC0xOS45IDI4LjYtMTkuOSAxOC41IDAgMjguOSA4LjYgMjguOSAyNC41bDAgMTAuOC0zNy44IDIuM2MtMzUuMSAyLjEtNTQuMSAxNi41LTU0LjEgNDEuNSAuMSAyNS4yIDE5LjcgNDIgNDcuOCA0MnptOC4yLTIzLjFjLTE2LjEgMC0yNi40LTcuOC0yNi40LTE5LjYgMC0xMi4zIDkuOS0xOS40IDI4LjgtMjAuNWwzMy42LTIuMSAwIDExYzAgMTguMi0xNS41IDMxLjItMzYgMzEuMnptMTAyLjUgNzQuNmMyOS41IDAgNDMuNC0xMS4zIDU1LjUtNDUuNGw1My4xLTE0OS0zMC44IDAtMzUuNiAxMTUuMS0uNiAwLTM1LjYtMTE1LjEtMzEuNiAwIDUxLjIgMTQxLjktMi44IDguNmMtNC42IDE0LjYtMTIuMSAyMC4zLTI1LjUgMjAuMy0yLjQgMC03LS4zLTguOS0uNWwwIDIzLjRjMS44IC40IDkuMyAuNyAxMS42IC43eiJdCiAgICB9OwogICAgZmFBcnRzdGF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFydHN0YXRpb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjc3YSIsICJNMi4xIDM3Ny40bDQzIDc0LjNjNC4zIDguNSAxMC44IDE1LjcgMTguOSAyMC43czE3LjQgNy42IDI3IDcuNmwyODUuNCAwLTU5LjItMTAyLjYtMzE1LjEgMHpNNTAxLjkgMzUwTDMzNS43IDU5LjNjLTQuNC04LjItMTAuOS0xNS4xLTE4LjktMjBTMjk5LjcgMzIgMjkwLjQgMzJsLTg4LjQgMCAyNTcuMyA0NDcuNiA0MC43LTcwLjVjMS45LTMuMiAyMS0yOS43IDItNTkuMXpNMjc1LjIgMzA0LjVsLTExNS41LTIwMC0xMTUuNSAyMDAgMjMxIDB6Il0KICAgIH07CiAgICBmYU5vZGVKcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJub2RlLWpzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZDMiLCAiTTIyNC41IDUwOGMtNi43IDAtMTMuNS0xLjgtMTkuNC01LjJsLTYxLjctMzYuNWMtOS4yLTUuMi00LjctNy0xLjctOCAxMi4zLTQuMyAxNC44LTUuMiAyNy45LTEyLjcgMS40LS44IDMuMi0uNSA0LjYgLjRsNDcuNCAyOC4xYzEuNyAxIDQuMSAxIDUuNyAwTDQxMiAzNjcuNWMxLjctMSAyLjgtMyAyLjgtNWwwLTIxMy4yYzAtMi4xLTEuMS00LTIuOS01LjFMMjI3LjMgMzcuN2MtMS43LTEtNC0xLTUuNyAwTDM3LjEgMTQ0LjNjLTEuOCAxLTIuOSAzLTIuOSA1LjFsMCAyMTMuMWMwIDIgMS4xIDQgMi45IDQuOWw1MC42IDI5LjJjMjcuNSAxMy43IDQ0LjMtMi40IDQ0LjMtMTguN2wwLTIxMC40YzAtMyAyLjQtNS4zIDUuNC01LjNsMjMuNCAwYzIuOSAwIDUuNCAyLjMgNS40IDUuM2wwIDIxMC41YzAgMzYuNi0yMCA1Ny42LTU0LjcgNTcuNi0xMC43IDAtMTkuMSAwLTQyLjUtMTEuNkwyMC42IDM5Ni4xYy0xMi02LjktMTkuNC0xOS44LTE5LjQtMzMuN2wwLTIxMy4xYzAtMTMuOCA3LjQtMjYuOCAxOS40LTMzLjdMMjA1LjEgOWMxMS43LTYuNiAyNy4yLTYuNiAzOC44IDBMNDI4LjYgMTE1LjdjMTIgNi45IDE5LjQgMTkuOCAxOS40IDMzLjdsMCAyMTMuMWMwIDEzLjgtNy40IDI2LjctMTkuNCAzMy43TDI0My45IDUwMi44Yy01LjkgMy40LTEyLjYgNS4yLTE5LjQgNS4yek0zNzMuNiAyOTcuOWMwLTM5LjktMjctNTAuNS04My43LTU4LTU3LjQtNy42LTYzLjItMTEuNS02My4yLTI0LjkgMC0xMS4xIDQuOS0yNS45IDQ3LjQtMjUuOSAzNy45IDAgNTEuOSA4LjIgNTcuNyAzMy44IC41IDIuNCAyLjcgNC4yIDUuMiA0LjJsMjQgMGMxLjUgMCAyLjktLjYgMy45LTEuN3MxLjUtMi42IDEuNC00LjFjLTMuNy00NC4xLTMzLTY0LjYtOTIuMi02NC42LTUyLjcgMC04NC4xIDIyLjItODQuMSA1OS41IDAgNDAuNCAzMS4zIDUxLjYgODEuOCA1Ni42IDYwLjUgNS45IDY1LjIgMTQuOCA2NS4yIDI2LjcgMCAyMC42LTE2LjYgMjkuNC01NS41IDI5LjQtNDguOSAwLTU5LjYtMTIuMy02My4yLTM2LjYtLjQtMi42LTIuNi00LjUtNS4zLTQuNWwtMjMuOSAwYy0zIDAtNS4zIDIuNC01LjMgNS4zIDAgMzEuMSAxNi45IDY4LjIgOTcuOCA2OC4yIDU4LjQtLjEgOTItMjMuMiA5Mi02My40eiJdCiAgICB9OwogICAgZmFVbmNoYXJ0ZWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidW5jaGFydGVkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwODQiLCAiTTE3MS44IDIzMi44YzEuMSAwIDIuMS0uMyAzLS45czEuNi0xLjQgMi0yLjRjMi4yLTkuOCA3LjQtMTguNiAxNC45LTI1LjMgMS4yLS44IDEuNy0yLjUgMS43LTQuMS0uMS0uNy0uMy0xLjMtLjYtMS45cy0uOS0xLjEtMS40LTEuNEw3NC41IDEyOC41IDE0OS4xIDg1YzEuNS0uOCAyLjctMiAzLjYtMy41czEuNC0zLjEgMS40LTQuOGMwLTEuNy0uNC0zLjQtMS4zLTQuOXMtMi4yLTIuNy0zLjctMy40TDEyNi43IDU1LjZjLTEuNS0uOC0zLjEtMS4yLTQuOC0xLjJzLTMuMyAuNC00LjggMS4yTDE3IDExMy42Yy0xLjUgLjgtMi43IDItMy42IDMuNXMtMS40IDMuMS0xLjQgNC44TDEyIDIzN2MwIDEuNyAuNCAzLjQgMS4zIDQuOXMyLjIgMi43IDMuNyAzLjRsMjIuNCAxMi44YzEuNSAuOSAzLjIgMS4zIDUgMS4yIDIuNCAuMSA0LjgtLjggNi42LTIuNSAxLjgtMS45IDIuOC00LjQgMi45LTdsMC04NS4zIDExNS45IDY3LjljLjYgLjMgMS40IC40IDIuMSAuNHpNMzIzLjQgMzc3LjdjLTEuNyAuMS0zLjQgLjUtNSAxLjJsLTc0LjUgNDMuMSAwLTEzNC4yYzAtMi45LTIuOS01LjgtNi4yLTQuNi05LjQgMi44LTE5LjUgMy0yOSAuNC0uNy0uMi0xLjUtLjItMi4yLS4xcy0xLjQgLjQtMiAuOS0xLjEgMS0xLjQgMS43LS41IDEuNC0uNSAyLjFsMCAxMzMuMy03NC41LTQzLjFjLTEuNS0uOS0zLjItMS4zLTUtMS4yLTIuNSAwLTQuOSAxLTYuNyAyLjhzLTIuOCA0LjItMi44IDYuN2wwIDI2LjFjMCAxLjcgLjQgMy40IDEuMyA0LjlzMi4yIDIuNyAzLjcgMy40bDEwMC4yIDU3LjZjMS41IC45IDMuMiAxLjMgNSAxLjIgMS43IDAgMy40LS40IDUtMS4ybDEwMC4yLTU3LjZjMS41LS44IDIuNy0yIDMuNi0zLjVzMS40LTMuMSAxLjQtNC44bDAtMjYuMWMtLjgtNC42LTUuNC05LjEtMTAuNC05LjF6TTI4Ni4xIDc4YTIzIDIzIDAgMSAwIDAtNDYgMjMgMjMgMCAxIDAgMCA0NnptNjMuNi0xMC4xYTIzIDIzIDAgMSAwIDAgNDYgMjMgMjMgMCAxIDAgMC00NnptNjMuMiA4My43YTIzIDIzIDAgMSAwIDAtNDYgMjMgMjMgMCAxIDAgMCA0NnptLTYzLjItOS4yYTIzIDIzIDAgMSAwIDAgNDYgMjMgMjMgMCAxIDAgMC00NnptLTYzLjYgODMuMmM0LjUgMCA5LTEuMyAxMi44LTMuOXM2LjctNi4xIDguNS0xMC4zIDIuMi04LjggMS4zLTEzLjMtMy4xLTguNi02LjMtMTEuOC03LjMtNS40LTExLjgtNi4zLTkuMS0uNC0xMy4zIDEuMy03LjggNC43LTEwLjMgOC41LTMuOSA4LjItMy45IDEyLjhjMCAzIC42IDYgMS44IDguOHMyLjkgNS4zIDUgNy41IDQuNyAzLjggNy41IDUgNS44IDEuOCA4LjggMS44bDAgMHpNMjI0IDI2MmM0LjUgMCA5LTEuNCAxMi44LTMuOXM2LjctNi4xIDguNS0xMC4zIDIuMi04LjggMS4zLTEzLjMtMy4xLTguNi02LjMtMTEuOC03LjMtNS40LTExLjgtNi4zLTkuMS0uNC0xMy4zIDEuMy03LjggNC43LTEwLjMgOC41LTMuOSA4LjItMy45IDEyLjhjMCAzIC42IDYgMS43IDguOHMyLjggNS4zIDUgNy41IDQuNyAzLjggNy41IDUgNS44IDEuOCA4LjggMS44bDAgMHptMTg4LjktODIuNGMtNC42IDAtOSAxLjMtMTIuOCAzLjlzLTYuNyA2LjEtOC41IDEwLjMtMi4yIDguOC0xLjMgMTMuMyAzLjEgOC42IDYuMyAxMS44IDcuMyA1LjQgMTEuOCA2LjMgOS4xIC40IDEzLjMtMS4zIDcuOC00LjcgMTAuMy04LjUgMy45LTguMiAzLjktMTIuOGMwLTYuMS0yLjQtMTEuOS02LjctMTYuM3MtMTAuMi02LjctMTYuMy02LjdsMCAwem0wIDcyLjNjLTQuNiAwLTkgMS4zLTEyLjggMy45cy02LjcgNi4xLTguNSAxMC4zLTIuMiA4LjgtMS4zIDEzLjMgMy4xIDguNiA2LjMgMTEuOCA3LjMgNS40IDExLjggNi4zIDkuMSAuNCAxMy4zLTEuMyA3LjgtNC43IDEwLjMtOC41IDMuOS04LjIgMy45LTEyLjhjMC02LjEtMi40LTExLjktNi43LTE2LjNzLTEwLjItNi43LTE2LjMtNi43bDAgMHoiXQogICAgfTsKICAgIGZhUGxheXN0YXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGxheXN0YXRpb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjNkZiIsICJNNTcxIDM3Mi4zYy0xMS4zIDE0LjItMzguOCAyNC4zLTM4LjggMjQuM2wtMjA1LjEgNzMuNiAwLTU0LjMgMTUwLjktNTMuOGMxNy4xLTYuMSAxOS44LTE0LjggNS44LTE5LjQtMTMuOS00LjYtMzkuMS0zLjMtNTYuMiAyLjlsLTEwMC41IDM1LjUgMC01Ni40YzIzLjItNy44IDQ3LjEtMTMuNiA3NS43LTE2LjggNDAuOS00LjUgOTAuOSAuNiAxMzAuMiAxNS41IDQ0LjIgMTQgNDkuMiAzNC43IDM4IDQ4Ljl6TTM0Ni42IDI3OS44bDAtMTM5YzAtMTYuMy0zLTMxLjMtMTguMy0zNS42LTExLjctMy44LTE5IDcuMS0xOSAyMy40bDAgMzQ3LjktOTMuOC0yOS44IDAtNDE0LjdjMzkuOSA3LjQgOTggMjQuOSAxMjkuMiAzNS40IDc5LjUgMjcuMyAxMDYuNCA2MS4zIDEwNi40IDEzNy44IDAgNzQuNS00NiAxMDIuOC0xMDQuNSA3NC42ek00My4zIDQxMC4yYy00NS40LTEyLjgtNTMtMzkuNS0zMi4zLTU0LjggMTkuMS0xNC4yIDUxLjctMjQuOSA1MS43LTI0LjlsMTM0LjUtNDcuOCAwIDU0LjUtOTYuOCAzNC42Yy0xNy4xIDYuMS0xOS43IDE0LjgtNS44IDE5LjRzMzkuMSAzLjMgNTYuMi0yLjlsNDYuNC0xNi45IDAgNDguOGMtNTEuNiA5LjMtMTAxLjQgNy4zLTE1My45LTEweiJdCiAgICB9OwogICAgZmFNaWNyb2Jsb2cgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWljcm9ibG9nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwMWEiLCAiTTM5OS44IDM2Mi4yYzI5LjUtMzQuNyA0Ny4xLTc4LjMgNDcuMS0xMjUuOCAwLTExMy05OS42LTIwNC40LTIyMi41LTIwNC40UzIgMTIzLjUgMiAyMzYuNCAxMDEuNiA0NDAuOSAyMjQuNSA0NDAuOWMyNyAwIDUzLjktNC41IDc5LjQtMTMuNCAxLjQtLjUgMy0uNSA0LjUtLjFzMi43IDEuNCAzLjYgMi42YzE4LjYgMjUuMSA0Ny42IDQyLjcgNzkuOSA0OS45IDEuMSAuMiAyLjMgMCAzLjMtLjZzMS43LTEuNiAxLjktMi44Yy4xLS42IC4xLTEuMyAwLTEuOXMtLjQtMS4yLS44LTEuN2MtMTIuMy0xNi0xOC43LTM1LjgtMTgtNTZzOC40LTM5LjUgMjEuNy01NC43bC0uMiAuMXpNMzMwIDIxMi40bC01Ny4zIDQzLjUgMjAuOCA2OC45Yy40IDEuMyAuNCAyLjctLjEgNHMtMS4yIDIuNC0yLjMgMy4yLTIuNCAxLjItMy44IDEuMi0yLjctLjQtMy44LTEuMmwtNTkuMS00MS01OS4xIDQxLjFjLTEuMSAuOC0yLjQgMS4yLTMuOCAxLjJzLTIuNy0uNC0zLjgtMS4yLTEuOS0xLjktMi4zLTMuMi0uNS0yLjctLjEtNGwyMC44LTY4LjktNTcuMy00My41Yy0xLjEtLjgtMS45LTEuOS0yLjMtMy4ycy0uNC0yLjcgMC00IDEuMi0yLjQgMi4zLTMuMiAyLjQtMS4zIDMuNy0xLjNsNzEuOS0xLjUgMjMuNy02Ny45Yy40LTEuMyAxLjMtMi40IDIuNC0zLjJzMi40LTEuMiAzLjgtMS4yIDIuNyAuNCAzLjggMS4yIDEuOSAxLjkgMi40IDMuMmwyMy43IDY3LjkgNzEuOSAxLjVjMS40IDAgMi43IC40IDMuOCAxLjJzMS45IDEuOSAyLjMgMy4yIC40IDIuNyAwIDQtMS4yIDIuNC0yLjMgMy4zbDAgMHoiXQogICAgfTsKICAgIGZhR2l0a3Jha2VuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdpdGtyYWtlbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmM2E2IiwgIk01NTcuNyAxMTguMWMtMi4zLTYuMS05LjMtOS4yLTE1LjMtNi42LTUuNyAyLjQtOC41IDguOS02LjMgMTQuNiAxMC45IDI5IDE2LjkgNjAuNSAxNi45IDkzLjMgMCAxMzQuNi0xMDAuMyAyNDUuNy0yMzAuMiAyNjIuN2wwLTEyMy43YzcuOS0xLjUgMTUuNS0zLjYgMjMtNi4ybDAgMTA0YzEwNi43LTI1LjkgMTg1LjktMTIyLjEgMTg1LjktMjM2LjggMC05MS44LTUwLjgtMTcxLjgtMTI1LjgtMjEzLjMtNS43LTMuMi0xMy0uOS0xNS45IDUtMi43IDUuNS0uNiAxMi4yIDQuNyAxNS4xIDY3LjkgMzcuNiAxMTMuOSAxMTAgMTEzLjkgMTkzLjIgMCA5My4zLTU3LjkgMTczLjEtMTM5LjggMjA1LjRsMC05Mi4yYzE0LjItNC41IDI0LjktMTcuNyAyNC45LTMzLjUgMC0xMy4xLTYuOC0yNC40LTE3LjMtMzAuNSA4LjMtNzkuNSA0NC41LTU4LjYgNDQuNS04My45bDAtMTQuN2MwLTM4LTg3LjktMTYxLjgtMTI5LTE2NC43LTIuNS0uMi01LS4yLTcuNiAwLTQxLjIgMy0xMjkuMSAxMjYuNy0xMjkuMSAxNjQuN2wwIDE0LjhjMCAyNS4zIDM2LjMgNC4zIDQ0LjUgODMuOS0xMC42IDYuMS0xNy4zIDE3LjQtMTcuMyAzMC41IDAgMTUuOCAxMC42IDI5IDI0LjggMzMuNWwwIDkyLjJjLTgxLjktMzIuMi0xMzkuOC0xMTItMTM5LjgtMjA1LjQgMC04My4xIDQ2LTE1NS41IDExMy45LTE5My4yIDUuNC0zIDcuNC05LjYgNC43LTE1LjEtMi45LTUuOS0xMC4xLTguMi0xNS45LTUtNzUgNDEuNS0xMjUuOCAxMjEuNS0xMjUuOCAyMTMuMyAwIDExNC43IDc5LjIgMjEwLjggMTg1LjkgMjM2LjhsMC0xMDRjNy42IDIuNSAxNS4xIDQuNiAyMyA2LjJsMCAxMjMuN2MtMTI5LjgtMTctMjMwLjItMTI4LjEtMjMwLjItMjYyLjcgMC0zMi44IDYtNjQuMyAxNi45LTkzLjMgMi4yLTUuOC0uNi0xMi4yLTYuMy0xNC42LTYtMi42LTEzIC40LTE1LjMgNi42LTExLjggMzEuNS0xOC4zIDY1LjYtMTguMyAxMDEuMyAwIDE1NS4xIDEyMi42IDI4MS42IDI3Ni4zIDI4Ny44bDAtMTQ1LjljNi44IC40IDE1IC41IDIzLjQgMGwwIDE0NS44YzE1My43LTYuMSAyNzYuMy0xMzIuNiAyNzYuMy0yODcuNyAwLTM1LjctNi41LTY5LjgtMTguMy0xMDEuNHpNMzU3LjkgMzIyLjlhMjMuNyAyMy43IDAgMSAxIDAtNDcuNCAyMy43IDIzLjcgMCAxIDEgMCA0Ny40ek0yMTguMSAyNzUuNGEyMy43IDIzLjcgMCAxIDEgMCA0Ny40IDIzLjcgMjMuNyAwIDEgMSAwLTQ3LjR6Il0KICAgIH07CiAgICBmYVRlbGVncmFtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRlbGVncmFtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjI0NjIsICJ0ZWxlZ3JhbS1wbGFuZSJdLCAiZjJjNiIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek0zNzEgMTc2LjdjLTMuNyAzOS4yLTE5LjkgMTM0LjQtMjguMSAxNzguMy0zLjUgMTguNi0xMC4zIDI0LjgtMTYuOSAyNS40LTE0LjQgMS4zLTI1LjMtOS41LTM5LjMtMTguNy0yMS44LTE0LjMtMzQuMi0yMy4yLTU1LjMtMzcuMi0yNC41LTE2LjEtOC42LTI1IDUuMy0zOS41IDMuNy0zLjggNjcuMS02MS41IDY4LjMtNjYuNyAuMi0uNyAuMy0zLjEtMS4yLTQuNHMtMy42LS44LTUuMS0uNWMtMi4yIC41LTM3LjEgMjMuNS0xMDQuNiA2OS4xLTkuOSA2LjgtMTguOSAxMC4xLTI2LjkgOS45LTguOS0uMi0yNS45LTUtMzguNi05LjEtMTUuNS01LTI3LjktNy43LTI2LjgtMTYuMyAuNi00LjUgNi43LTkgMTguNC0xMy43IDcyLjMtMzEuNSAxMjAuNS01Mi4zIDE0NC42LTYyLjMgNjguOS0yOC42IDgzLjItMzMuNiA5Mi41LTMzLjggMi4xIDAgNi42IC41IDkuNiAyLjkgMiAxLjcgMy4yIDQuMSAzLjUgNi43IC41IDMuMiAuNiA2LjUgLjQgOS44eiJdCiAgICB9OwogICAgZmFUZWxlZ3JhbVBsYW5lID0gZmFUZWxlZ3JhbTsKICAgIGZhSXR1bmVzTm90ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJpdHVuZXMtbm90ZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmM2I1IiwgIk0zODEuOSAzODguMmMtNi40IDI3LjQtMjcuMiA0Mi44LTU1LjEgNDgtMjQuNSA0LjUtNDQuOSA1LjYtNjQuNS0xMC4yLTIzLjktMjAuMS0yNC4yLTUzLjQtMi43LTc0LjQgMTctMTYuMiA0MC45LTE5LjUgNzYuOC0yNS44IDYtMS4xIDExLjItMi41IDE1LjYtNy40IDYuNC03LjIgNC40LTQuMSA0LjQtMTYzLjIgMC0xMS4yLTUuNS0xNC4zLTE3LTEyLjMtOC4yIDEuNC0xODUuNyAzNC42LTE4NS43IDM0LjYtMTAuMiAyLjItMTMuNCA1LjItMTMuNCAxNi43IDAgMjM0LjcgMS4xIDIyMy45LTIuNSAyMzkuNS00LjIgMTguMi0xNS40IDMxLjktMzAuMiAzOS41LTE2LjggOS4zLTQ3LjIgMTMuNC02My40IDEwLjQtNDMuMi04LjEtNTguNC01OC0yOS4xLTg2LjYgMTctMTYuMiA0MC45LTE5LjUgNzYuOC0yNS44IDYtMS4xIDExLjItMi41IDE1LjYtNy40IDEwLjEtMTEuNSAxLjgtMjU2LjYgNS4yLTI3MC4yIC44LTUuMiAzLTkuNiA3LjEtMTIuOSA0LjItMy41IDExLjgtNS41IDEzLjQtNS41IDIwNC0zOC4yIDIyOC45LTQzLjEgMjMyLjQtNDMuMSAxMS41LS44IDE4LjEgNiAxOC4xIDE3LjYgLjIgMzQ0LjUgMS4xIDMyNi0xLjggMzM4LjV6Il0KICAgIH07CiAgICBmYUxlc3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibGVzcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDFkIiwgIk02MTMuMiAyMTljMC0yMC41IDMuMi0zMi42IDMuMi01NC42IDAtMzQuMi0xMi42LTQ1LjItNDAuNS00NS4ybC0yMC41IDAgMCAyNC4yIDYuMyAwYzE0LjIgMCAxNy4zIDQuNyAxNy4zIDIyLjEgMCAxNi4zLTEuNiAzMi42LTEuNiA1MS41IDAgMjQuMiA3LjkgMzMuNiAyMy42IDM3LjNsMCAxLjZjLTE1LjggMy43LTIzLjYgMTMuMS0yMy42IDM3LjMgMCAxOC45IDEuNiAzNC4yIDEuNiA1MS41IDAgMTcuOS0zLjcgMjIuNi0xNy4zIDIyLjZsMCAuNS02LjMgMCAwIDI1LjIgMjAuNSAwYzI3LjggMCA0MC41LTExIDQwLjUtNDUuMiAwLTIyLjYtMy4yLTM0LjItMy4yLTU0LjYgMC0xMSA2LjgtMjIuNiAyNy4zLTIzLjZsMC0yNy4zYy0yMC41LS43LTI3LjMtMTIuMy0yNy4zLTIzLjN6TTUwNy42IDI1MWMtMTUuOC02LjMtMzAuNS0xMC0zMC41LTIwLjUgMC03LjkgNi4zLTEyLjYgMTcuOS0xMi42czIyLjEgNC43IDMzLjYgMTMuMWwyMS0yNy44Yy0xMy4xLTEwLTMxLTIwLjUtNTUuMi0yMC41LTM1LjcgMC01OS45IDIwLjUtNTkuOSA0OS40IDAgMjUuNyAyMi42IDM4LjkgNDEuNSA0Ni4yIDE2LjMgNi4zIDMyLjEgMTEuNiAzMi4xIDIyLjEgMCA3LjktNi4zIDEzLjEtMjAuNSAxMy4xLTEzLjEgMC0yNi4zLTUuMy00MC41LTE2LjNsLTIxIDMwLjVjMTUuOCAxMy4xIDM5LjkgMjIuMSA1OS45IDIyLjEgNDIgMCA2NC42LTIyLjEgNjQuNi01MXMtMjIuNS00MS00My00Ny44ek0xNDguNyAzMTAuNGMtMy43IDAtOC40LTMuMi04LjQtMTMuMWwwLTE3OC4yLTc0LjYgMGMtMjguNCAwLTQxIDExLTQxIDQ1LjIgMCAyMi42IDMuMiAzNS4yIDMuMiA1NC42IDAgMTEtNi44IDIyLjYtMjcuMyAyMy42bDAgMjcuM2MyMC41IC41IDI3LjMgMTIuMSAyNy4zIDIzLjEgMCAxOS40LTMuMiAzMS0zLjIgNTMuNiAwIDM0LjIgMTIuNiA0NS4yIDQwLjUgNDUuMmwyMC41IDAgMC0yNC4yLTYuMyAwYy0xMy4xIDAtMTcuMy01LjMtMTcuMy0yMi42czEuNi0zMi4xIDEuNi01MS41YzAtMjQuMi03LjktMzMuNi0yMy42LTM3LjNsMC0xLjZjMTUuOC0zLjcgMjMuNi0xMy4xIDIzLjYtMzcuMyAwLTE4LjktMS42LTM0LjItMS42LTUxLjVzMy43LTIyLjEgMTcuMy0yMi4xbDE0LjEgMCAwIDE1MC44YzAgMzIuMSAxMSA1My4xIDQzLjEgNTMuMSAxMCAwIDE3LjktMS42IDIzLjYtMy43bC01LjMtMzQuMmMtMy4xIC44LTQuNiAuOC02LjIgLjh6TTM4MC40IDI1MWMtMTYuMy02LjMtMzEtMTAtMzEtMjAuNSAwLTcuOSA2LjMtMTIuNiAxNy45LTEyLjZzMjIuMSA0LjcgMzMuNiAxMy4xbDIxLTI3LjhjLTEzLjEtMTAtMzEtMjAuNS01NS4yLTIwLjUtMzUuNyAwLTU5LjkgMjAuNS01OS45IDQ5LjQgMCAyNS43IDIyLjYgMzguOSA0MS41IDQ2LjIgMTYuMyA2LjMgMzIuMSAxMS42IDMyLjEgMjIuMSAwIDcuOS02LjMgMTMuMS0yMC41IDEzLjEtMTMuMSAwLTI2LjMtNS4zLTQwLjUtMTYuM2wtMjAuNSAzMC41YzE1LjggMTMuMSAzOS45IDIyLjEgNTkuOSAyMi4xIDQyIDAgNjQuNi0yMi4xIDY0LjYtNTEgLjEtMjguOS0yMi41LTQxLTQzLTQ3Ljh6bS0xNTUtNjguOGMtMzguNCAwLTc1LjEgMzIuMS03NC4xIDgyLjUgMCA1MiAzNC4yIDgyLjUgNzkuMyA4Mi41IDE4LjkgMCAzOS45LTYuOCA1Ni4yLTE3LjlMMjcxIDMwMS41Yy0xMS42IDYuOC0yMi42IDEwLTM0LjIgMTAtMjEgMC0zNy4zLTEwLTQxLjUtMzQuMmw5NS4yIDBjLjUtMy43IDEuNi0xMSAxLjYtMTkuNCAuNi00Mi42LTIyLjYtNzUuNy02Ni43LTc1Ljd6bS0zMCA2Ni4yYzMuMi0yMSAxNS44LTMxIDMwLjUtMzEgMTguOSAwIDI2LjMgMTMuMSAyNi4zIDMxbC01Ni44IDB6Il0KICAgIH07CiAgICBmYUZpcmVmb3ggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmlyZWZveCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjY5IiwgIk01MDMuNSAyNDEuNWMtLjEtMS42LS4yLTMuMS0uMi00LjdsMC0uMS0uNC00LjcgMC0uMWMtMS4zLTEzLjktMy43LTI3LjctNy4zLTQxLjIgMC0uMSAwLS4xLS4xLS4ybC0xLjEtNGMtLjEtLjItLjEtLjUtLjItLjYtLjQtMS4yLS43LTIuNS0xLjEtMy43LS4xLS4yLS4xLS42LS4yLS44LS40LTEuMi0uNy0yLjQtMS4xLTMuNS0uMS0uNC0uMi0uNi0uNC0xLS40LTEuMi0uNy0yLjMtMS4yLTMuNWwtLjQtMS4xYy0uNC0xLjEtLjgtMi4zLTEuMi0zLjQtLjEtLjMtLjItLjctLjQtMS0uNS0xLjEtLjgtMi4zLTEuMy0zLjQtLjEtLjItLjItLjYtLjQtLjgtLjUtMS4yLTEtMi4zLTEuNC0zLjUgMC0uMS0uMS0uMi0uMS0uNC0xLjYtMy44LTMuMi03LjctNS0xMS40bC0uNC0uN2MtLjUtMS0uOC0xLjgtMS4zLTIuNi0uMi0uNS0uNS0xLjEtLjctMS42LS40LS44LS44LTEuNi0xLjItMi40LS40LS42LS42LTEuMi0xLTEuOHMtLjgtMS40LTEuMi0yLjNjLS40LS42LS43LTEuMy0xLjEtMS45cy0uOC0xLjQtMS4yLTIuMmMtLjQtLjctLjgtMS40LTEuMi0yLS40LS43LS44LTEuMy0xLjItMnMtLjgtMS4zLTEuMi0yLS44LTEuMy0xLjItMS45LS44LTEuNC0xLjMtMi4yYy0uNC0uNi0uOC0xLjItMS4yLTEuOGwtMS40LTIuMWMtLjQtLjYtLjgtMS4yLTEuMi0xLjgtLjUtLjctMS4xLTEuNi0xLjYtMi4zLS40LS41LS43LTEuMS0xLjEtMS42bC0xLjgtMi41Yy0uNC0uNS0uNi0uOC0xLTEuMy0xLTEuMy0xLjgtMi41LTIuOC0zLjctNy4yLTkuNC0xNS0xOC4zLTIzLjUtMjYuNi01LjctNi0xMS44LTExLjUtMTguMy0xNi43LTQtMy41LTguMi02LjctMTIuNS05LjgtNy43LTUuOC0xNi0xMC44LTI0LjYtMTUuMS0yLjQtMS4zLTQuOC0yLjUtNy4yLTMuNy0xNy43LTguNi0zNi4zLTE1LjItNTUuNC0xOS42LTEuOS0uNC0zLjgtLjgtNS42LTEuMmwtLjEgMGMtMS0uMS0xLjgtLjQtMi44LS41LTEyLjUtMi40LTI1LjItMy43LTM4LTRsLTEwLjYgMGMtMTUuMyAuMi0zMC41IDEuOS00NS41IDUtMzMuNiA3LjEtNjMuMiAyMS4yLTgyLjkgMzktMS4xIDEtMS45IDEuNy0yLjQgMi4ybC0uNSAuNSAuMSAwYzAgMCAuMSAwIC4xIDBzMC0uMSAwLS4xbC0uMSAuMWMuMS0uMSAuMS0uMSAuMi0uMSAxNC42LTguOCAzNC45LTE2IDQ5LjQtMTkuNmw1LjktMS40Yy40LS4xIC44LS4xIDEuMi0uMiAxLjctLjQgMy40LS43IDUuMi0xLjEgLjIgMCAuNi0uMSAuOC0uMSA2NC4yLTExLjcgMTMyLjYgNy41IDE4MC4yIDUzIDEwLjMgOS44IDE5LjMgMjAuOCAyNi45IDMyLjggMzAuNCA0OS4yIDI3LjUgMTExLjEgMy44IDE0Ny42LTM0LjQgNTMtMTExLjQgNzEuMy0xNTkgMjQuOC0xNi0xNS41LTI1LjItMzYuNy0yNS42LTU5LS4yLTEwLjcgMi0yMS4yIDYuMi0zMSAxLjctMy44IDEzLjEtMjUuNyAxOC4yLTI0LjYtMTMuMS0yLjgtMzcuNSAyLjYtNTQuNyAyOC4yLTE1LjQgMjIuOS0xNC41IDU4LjItNSA4My4zLTYtMTIuNC0xMC4xLTI1LjYtMTIuMS0zOS4yLTEyLjItODIuNiA0My4zLTE1MyA5NC4zLTE3MC41LTI3LjUtMjQtOTYuNS0yMi4zLTE0Ny43IDE1LjQtMjkuOSAyMi01MS4yIDUzLjItNjIuNSA5MC40IDEuNy0yMC45IDkuNi01Mi4xIDI1LjgtODMuOS0xNy4yIDguOS0zOSAzNy00OS44IDYyLjktMTUuNiAzNy40LTIxIDgyLjItMTYuMSAxMjQuOCAuNCAzLjIgLjcgNi40IDEuMSA5LjYgMTkuOSAxMTcuMSAxMjIgMjA2LjQgMjQ0LjggMjA2LjQgMTM3LjEgMCAyNDguMy0xMTEuMiAyNDguMy0yNDguNC0uMS00LjUtLjItOS4xLS41LTEzLjV6Il0KICAgIH07CiAgICBmYUthZ2dsZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJrYWdnbGUiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjVmYSIsICJNMzA0LjIgNTAxLjVMMTU4LjQgMzIwLjMgMjk4LjIgMTg1YzIuNi0yLjcgMS43LTEwLjUtNS4zLTEwLjVsLTY5LjIgMGMtMy41IDAtNyAxLjgtMTAuNSA1LjNsLTEzMi4zIDEzMy43IDAtMzA2YzAtNS0yLjUtNy41LTcuNS03LjVMMjEuNSAwQzE2LjUgMCAxNCAyLjUgMTQgNy41bDAgNDk3YzAgNSAyLjUgNy41IDcuNSA3LjVsNTEuOSAwYzUgMCA3LjUtMi41IDcuNS03LjVsMC0xMDkgMzAuOC0yOS4zIDExMC41IDE0MC42YzMgMy41IDYuNSA1LjMgMTAuNSA1LjNsNjYuOSAwYzMuNSAwIDUuNS0xIDYtM2wtMS40LTcuNnoiXQogICAgfTsKICAgIGZhRmFjZWJvb2tNZXNzZW5nZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmFjZWJvb2stbWVzc2VuZ2VyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzOWYiLCAiTTI1Ni42IDhjLTE0MCAwLTI0OC42IDEwMi4zLTI0OC42IDI0MC42IDAgNzIuMyAyOS43IDEzNC44IDc4LjEgMTc3LjkgOC4zIDcuNSA2LjYgMTEuOSA4IDU4LjIgLjEgMy4yIDEgNi40IDIuNiA5LjJzMy45IDUuMiA2LjcgNi45IDUuOSAyLjggOS4xIDMgNi41LS4zIDkuNS0xLjZDMTc0LjkgNDc5IDE3NS42IDQ3Ny4yIDE4NC42IDQ3OS42IDMzNy44IDUyMS44IDUwNCA0MjMuNyA1MDQgMjQ4LjYgNTA0IDExMC4zIDM5Ni42IDggMjU2LjYgOHpNNDA1LjggMTkzLjFsLTczIDExNS42Yy0yLjggNC4zLTYuNCA4LjEtMTAuNiAxMXMtOS4xIDQuOC0xNC4xIDUuOC0xMC4zIC44LTE1LjMtLjQtOS43LTMuNC0xMy44LTYuNGwtNTguMS00My41Yy0yLjYtMS45LTUuOC0zLTktM3MtNi40IDEuMS05IDNsLTc4LjQgNTkuNGMtMTAuNSA3LjktMjQuMi00LjYtMTcuMS0xNS43bDczLTExNS42YzIuOC00LjMgNi40LTguMSAxMC42LTExczkuMS00LjggMTQuMS01LjggMTAuMy0uOCAxNS4zIC40IDkuNyAzLjQgMTMuOSA2LjRsNTguMSA0My41YzIuNiAxLjkgNS44IDMgOSAzczYuNC0xLjEgOS0zbDc4LjQtNTkuNGMxMC40LTggMjQuMSA0LjUgMTcuMSAxNS42eiJdCiAgICB9OwogICAgZmFBdWRpYmxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImF1ZGlibGUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjM3MyIsICJNNjQwIDE5OS45bDAgNTQtMzIwIDIwMC0zMjAtMTk5LjkgMC01NCAzMjAgMjAwIDMyMC0yMDAuMXptLTE5NC41IDcybDQ3LjEtMjkuNGMtMzcuMi01NS44LTEwMC43LTkyLjYtMTcyLjctOTIuNnMtMTM1LjUgMzYuNy0xNzIuNiA5Mi40bC4zIDBjMi41LTIuMyA1LjEtNC41IDcuNy02LjcgODkuNy03NC40IDIxOS40LTU4LjEgMjkwLjIgMzYuM3pNMjI1LjQgMjkwLjdjMTYuOS0xMS45IDM2LjUtMTguNyA1Ny40LTE4LjcgMzQuNCAwIDY1LjIgMTguNCA4Ni40IDQ3LjZsNDUuNC0yOC40Yy0yMC45LTI5LjktNTUuNi00OS41LTk0LjgtNDkuNS0zOC45IDAtNzMuNCAxOS40LTk0LjQgNDl6TTEwMy42IDE2MS4xQzIzNS40IDU2LjggNDIxLjggODQuNyA1MjEuMSAyMjMuMmwuNyAxIDQ4LjgtMzAuNGMtNTMuNS04MS43LTE0NS44LTEzNS43LTI1MC43LTEzNS43LTEwMy41IDAtMTk2LjYgNTMuNS0yNTAuNSAxMzUuNiA5LjktMTAuNSAyMi43LTIzLjUgMzQuMi0zMi42eiJdCiAgICB9OwogICAgZmFQYXRyZW9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBhdHJlb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNkOSIsICJNNDkwIDE1My44Yy0uMS02NS40LTUxLTExOS0xMTAuNy0xMzguMy03NC4yLTI0LTE3Mi0yMC41LTI0Mi45IDEyLjktODUuOCA0MC41LTExMi44IDEyOS4zLTExMy44IDIxNy44LS44IDcyLjggNi40IDI2NC40IDExNC42IDI2NS44IDgwLjMgMSA5Mi4zLTEwMi41IDEyOS41LTE1Mi4zIDI2LjQtMzUuNSA2MC41LTQ1LjUgMTAyLjQtNTUuOSA3Mi0xNy44IDEyMS4xLTc0LjcgMTIxLTE1MGwtLjEgMHoiXQogICAgfTsKICAgIGZhVm52ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZudiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDBiIiwgIk0xMDQuOSAzNTJjLTM0LjEgMC00Ni40LTMwLjQtNDYuNC0zMC40TDIuNiAyMTAuMVMtNy44IDE5MiAxMyAxOTJsMzIuOCAwYzEwLjQgMCAxMy4yIDguNyAxOC44IDE4LjFsMzYuNyA3NC41czUuMiAxMy4xIDIxLjEgMTMuMSAyMS4xLTEzLjEgMjEuMS0xMy4xbDM2LjctNzQuNWM1LjYtOS41IDguNC0xOC4xIDE4LjgtMTguMWwzMi44IDBjMjAuOCAwIDEwLjQgMTguMSAxMC40IDE4LjFMMTg2LjQgMzIxLjZTMTc0LjIgMzUyIDE0MCAzNTJsLTM1LjEgMHptMzk1IDBjLTM0LjEgMC00Ni40LTMwLjQtNDYuNC0zMC40TDM5Ny42IDIxMC4xUzM4Ny4yIDE5MiA0MDggMTkybDMyLjggMGMxMC40IDAgMTMuMiA4LjcgMTguOCAxOC4xbDM2LjcgNzQuNXM1LjIgMTMuMSAyMS4xIDEzLjEgMjEuMS0xMy4xIDIxLjEtMTMuMWwzNi44LTc0LjVjNS42LTkuNSA4LjQtMTguMSAxOC44LTE4LjFsMzIuOSAwYzIwLjggMCAxMC40IDE4LjEgMTAuNCAxOC4xTDU4MS41IDMyMS42UzU2OS4zIDM1MiA1MzUuMSAzNTJsLTM1LjIgMHpNMzM3LjYgMTkyYzM0LjEgMCA0Ni40IDMwLjQgNDYuNCAzMC40bDU1LjkgMTExLjVTNDUwLjMgMzUyIDQyOS41IDM1MmwtMzIuOCAwYy0xMC40IDAtMTMuMi04LjctMTguOC0xOC4xbC0zNi43LTc0LjVzLTUuMi0xMy4xLTIxLjEtMTMuMS0yMS4xIDEzLjEtMjEuMSAxMy4xbC0zNi43IDc0LjVjLTUuNiA5LjQtOC40IDE4LjEtMTguOCAxOC4xbC0zMi45IDBjLTIwLjggMC0xMC40LTE4LjEtMTAuNC0xOC4xbDU1LjktMTExLjVTMjY4LjMgMTkyIDMwMi41IDE5MmwzNS4xIDB6Il0KICAgIH07CiAgICBmYVBhZ2VsaW5lcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwYWdlbGluZXMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjE4YyIsICJNMzg0LjEgMzEyLjdjLTU1LjEgMTM2LjctMTg3LjEgNTQtMTg3LjEgNTQtNDAuNSA4MS44LTEwNy40IDEzNC40LTE4NC42IDEzNC43LTE2LjEgMC0xNi42LTI0LjQgMC0yNC40IDY0LjQtLjMgMTIwLjUtNDIuNyAxNTcuMi0xMTAuMS00MS4xIDE1LjktMTE4LjYgMjcuOS0xNjEuNi04Mi4yIDEwOS00NC45IDE1OS4xIDExLjIgMTc4LjMgNDUuNSA5LjktMjQuNCAxNy01MC45IDIxLjYtNzkuNyAwIDAtMTM5LjcgMjEuOS0xNDkuNS05OC4xIDExOS4xLTQ3LjkgMTUyLjYgNzYuNyAxNTIuNiA3Ni43IDEuNi0xNi43IDMuMy01Mi42IDMuMy01My40IDAgMC0xMDYuMy03My43LTM4LjEtMTY1LjIgMTI0LjYgNDMgNjEuNCAxNjIuNCA2MS40IDE2Mi40IC41IDEuNiAuNSAyMy44IDAgMzMuNCAwIDAgNDUuMi04OSAxMzYuNC01Ny41LTQuMiAxMzQtMTQxLjkgMTA2LjQtMTQxLjkgMTA2LjQtNC40IDI3LjQtMTEuMiA1My40LTIwIDc3LjUgMCAwIDgzLTkxLjggMTcyLTIweiJdCiAgICB9OwogICAgZmFBbWF6b24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYW1hem9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyNzAiLCAiTTI1Ny43IDE2Mi43Yy00OC43IDEuOC0xNjkuNSAxNS41LTE2OS41IDExNy41IDAgMTA5LjUgMTM4LjMgMTE0IDE4My41IDQzLjIgNi41IDEwLjIgMzUuNCAzNy41IDQ1LjMgNDYuOGw1Ni44LTU2cy0zMi4zLTI1LjMtMzIuMy01Mi44bDAtMTQ3LjFDMzQxLjUgODkgMzE3IDMyIDIyOS4yIDMyIDE0MS4yIDMyIDk0LjUgODcgOTQuNSAxMzYuM2w3My41IDYuOGMxNi4zLTQ5LjUgNTQuMi00OS41IDU0LjItNDkuNSA0MC43LS4xIDM1LjUgMjkuOCAzNS41IDY5LjF6bTAgODYuOGMwIDgwLTg0LjIgNjgtODQuMiAxNy4yIDAtNDcuMiA1MC41LTU2LjcgODQuMi01Ny44bDAgNDAuNnpNMzkzLjcgNDEzYy03LjcgMTAtNzAgNjctMTc0LjUgNjdTMzQuNyA0MDguNSAxMC4yIDM3OWMtNi44LTcuNyAxLTExLjMgNS41LTguMyA3My4zIDQ0LjUgMTg3LjggMTE3LjggMzcyLjUgMzAuMyA3LjUtMy43IDEzLjMgMiA1LjUgMTJ6bTM5LjggMi4yYy02LjUgMTUuOC0xNiAyNi44LTIxLjIgMzEtNS41IDQuNS05LjUgMi43LTYuNS0zLjhzMTkuMy00Ni41IDEyLjctNTVjLTYuNS04LjMtMzctNC4zLTQ4LTMuMi0xMC44IDEtMTMgMi0xNC0uMy0yLjMtNS43IDIxLjctMTUuNSAzNy41LTE3LjUgMTUuNy0xLjggNDEtLjggNDYgNS43IDMuNyA1LjEgMCAyNy4xLTYuNSA0My4xeiJdCiAgICB9OwogICAgZmFFbnZpcmEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZW52aXJhIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyOTkiLCAiTTAgMzJjNDc3LjYgMCAzNjYuNiAzMTcuMyAzNjcuMSAzNjYuM2w4MC45IDgxLjctMjYgMC03MC40LTcxLjJDMzEyLjYgNDEzIDIyNy4yIDQ0My4zIDEzNy4yIDM3MS44IDQ3IDMwMC4zIDUyIDIxNC43IDAgMzJ6TTc5LjcgNzhjLTQ5LjctMjMuNS01LjIgOS4yLTUuMiA5LjIgNDUuMiAzMS4yIDY2IDczLjcgOTAuMiAxMTkuOSAzMS41IDYwLjIgNzkgMTM5LjcgMTQ0LjIgMTY3LjcgNjUgMjggMzQuMiAxMi41IDYtOC41LTI4LjItMjEuMi02OC4yLTg3LTkxLTEzMC4yLTMxLjctNjAtNjEtMTE4LjYtMTQ0LjItMTU4LjF6Il0KICAgIH07CiAgICBmYUxpbm9kZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsaW5vZGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJiOCIsICJNMzY2LjMgMTg2LjlsLTU5LjUgMzYuOS0uOCAzNi45LTI5LjMtMTkuMy0zOS40IDI0LjNjMi4yIDU1LjIgMi41IDU5LjMgMi41IDU5LjVsLTk3LjIgNjUuNC0xNS4xLTEwNC43IDEwOC4xLTYyLTQwLjItMjYtNzUuNCAzOC41LTIxLTE0My4zIDEyOS00OS40LTkxLjMtNDMuNi0xMjUuNyAzOS40IDI3LjcgMTM0LjkgNDEuOSAzMi43LTMxLjggMTUuMSAyMC45IDEwMS40IDI5LjMgMjcuNy0yMC45IDEyLjYgMTYuOCA3OC44IDY2LjIgNjkuNmMtMTAuOC03NC44LTExLjctNzguNi0xMS43LTc4LjhsNzcuOS01NS4zQzI0NCAzNjUuNCAyNDIuMyAzNjcgMjQyLjMgMzY3bC44IDI0LjMgMzMuNSAyOC41LS44LTc3LjEgNDYuOS0zMy41IDI2LjgtMTguNC0yLjUgMzYgMjUuMSAxNy42IDYuNy03NC42IDU4LjctNDMuNi03MS4yLTM5LjR6Il0KICAgIH07CiAgICBmYUFjY3Vzb2Z0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFjY3Vzb2Z0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzNjkiLCAiTTMyMi4xIDI1MmwwLTEtNTEuMi02NS44cy0xMiAxLjYtMjUgMTUuMWMtOSA5LjMtMjQyLjEgMjM5LjEtMjQzLjQgMjQwLjktNyAxMCAxLjYgNi44IDE1LjcgMS43IC44IDAgMTE0LjUtMzYuNiAxMTQuNS0zNi42IC41LS42LS4xLS4xIC42LS42LS40LTUuMS0uOC0yNi4yLTEtMjcuNy0uNi01LjIgMi4yLTYuOSA3LTguOWw5Mi42LTMzLjhjLjYtLjggODguNS04MS43IDkwLjItODMuM3pNNDgyLjIgMzcyLjFjMTMuMyAxNi4xIDIwLjcgMTMuMyAzMC44IDkuMyAzLjItMS4yIDExNS40LTQ3LjYgMTE3LjgtNDguOSA4LTQuMy0xLjctMTYuNy03LjItMjMuNC0yLjEtMi41LTIwNS4xLTI0NS42LTIwNy4yLTI0OC4zLTkuNy0xMi4yLTE0LjMtMTIuOS0zOC40LTEyLjgtMTAuMiAwLTEwNi44IC41LTExNi41IC42LTE5LjIgLjEtMzIuOS0uMy0xOS4yIDE2LjkgNy43IDkuNSAyMzQuMiAyOTkuNyAyMzkuOSAzMDYuNnptMTUyLjcgMS42Yy0yLjMtLjMtMjQuNi00LjctMzgtNy4yIDAgMC0xMTUgNTAuNC0xMTcuNSA1MS42LTE2IDcuMy0yNi45LTMuMi0zNi43LTE0LjZsLTU3LjEtNzRjLTUuNC0uOS02MC40LTkuNi02NS4zLTkuMy0zLjEgLjItOS42IC44LTE0LjQgMi45LTQuOSAyLjEtMTQ1LjIgNTIuOC0xNTAuMiA1NC43LTUuMSAyLTExLjQgMy42LTExLjEgNy42IC4yIDIuNSAyIDIuNiA0LjYgMy41IDIuNyAuOCAzMDAuOSA2Ny42IDMwOCA2OS4xIDE1LjYgMy4zIDM4LjUgMTAuNSA1My42IDEuNyAyLjEtMS4yIDEyMy44LTc2LjQgMTI1LjgtNzcuOCA1LjQtNCA0LjMtNi44LTEuNy04LjJ6Il0KICAgIH07CiAgICBmYUVybGFuZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlcmxhbmciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjM5ZCIsICJNODcuMiA1My41bC04Ny4yIDAgMCA0MDUgMTAwLjQgMGMtNDkuNy01Mi42LTc4LjgtMTI1LjMtNzguNy0yMTIuMS0uMS03Ni43IDI0LTE0Mi43IDY1LjUtMTkyLjl6bTIzOC4yIDkuN2MtNDUuOSAuMS04NS4xIDMzLjUtODkuMiA4My4ybDE2OS45IDBjLTEuMS00OS43LTM0LjUtODMuMS04MC43LTgzLjJ6bTIzMC43LTkuNmwuMyAwLS4xLS4xLS4yIC4xem0uMyAwYzMxLjQgNDIuNyA0OC43IDk3LjUgNDYuMiAxNjIuNyAuNSA2IC41IDExLjcgMCAyNC4xbC0zNzIuNCAwYy0uMiAxMDkuNyAzOC45IDE5NC45IDEzOC42IDE5NS4zIDY4LjUtLjMgMTE4LTUxIDE1MS45LTEwNi4xbDk2LjQgNDguMmMtMTcuNCAzMC45LTM2LjUgNTcuOC01Ny45IDgwLjhsODAuOCAwIDAtNDA1LTgzLjYgMHoiXQogICAgfTsKICAgIGZhQ2NEaXNjb3ZlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYy1kaXNjb3ZlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWYyIiwgIk01MjAuNCAxOTYuMWMwLTcuOS01LjUtMTIuMS0xNS42LTEyLjFsLTQuOSAwIDAgMjQuOSA0LjcgMGMxMC4zIDAgMTUuOC00LjQgMTUuOC0xMi44ek01MjggMzJMNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw0ODAgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1MmMwLTI2LjUtMjEuNS00OC00OC00OHpNNDgzLjkgMTcwLjljMjIuNiAwIDUyLjktNC4xIDUyLjkgMjQuNCAwIDEyLjYtNi42IDIwLjctMTguNyAyMy4ybDI1LjggMzQuNC0xOS42IDAtMjIuMi0zMi44LTIuMiAwIDAgMzIuOC0xNiAwIDAtODJ6TTQyOCAxNzFsNDUuMyAwIDAgMTQtMjkuMyAwIDAgMTguMiAyOC4zIDAgMCAxMy44LTI4LjMgMCAwIDIyLjIgMjkuMyAwIDAgMTMuOC00NS4zIDAgMC04MnptLTY4LjcgMGwyMS45IDU1LjIgMjIuMi01NS4yIDE3LjUgMC0zNS41IDg0LjItOC42IDAtMzUtODQuMiAxNy41IDB6bS01NS45IDg2LjJhNDQuNiA0NC42IDAgMSAxIDAtODkuMiA0NC42IDQ0LjYgMCAxIDEgMCA4OS4yem0tNDkuMy04My4xbDAgMTljLTIwLjEtMjAuMS00Ni44LTQuNy00Ni44IDE5IDAgMjUgMjcuNSAzOC41IDQ2LjggMTkuMmwwIDE5Yy0yOS43IDE0LjMtNjMuMy01LjctNjMuMy0zOC4yIDAtMzEuMiAzMy4xLTUzIDYzLjMtMzh6bS05Ny4yIDY2LjNjMTEuNCAwIDIyLjQtMTUuMy0zLjMtMjQuNC0xNS01LjUtMjAuMi0xMS40LTIwLjItMjIuNyAwLTIzLjIgMzAuNi0zMS40IDQ5LjctMTQuM2wtOC40IDEwLjhjLTEwLjQtMTEuNi0yNC45LTYuMi0yNC45IDIuNSAwIDQuNCAyLjcgNi45IDEyLjMgMTAuMyAxOC4yIDYuNiAyMy42IDEyLjUgMjMuNiAyNS42IDAgMjkuNS0zOC44IDM3LjQtNTYuNiAxMS4zbDEwLjMtOS45YzMuNyA3LjEgOS45IDEwLjggMTcuNSAxMC44ek01NS40IDI1M2wtMjMuNCAwIDAtODIgMjMuNCAwYzI2LjEgMCA0NC4xIDE3IDQ0LjEgNDEuMSAwIDE4LjUtMTMuMiA0MC45LTQ0LjEgNDAuOXptNjcuNSAwbC0xNiAwIDAtODIgMTYgMCAwIDgyek01NDQgNDMzYzAgOC4yLTYuOCAxNS0xNSAxNWwtNDAxIDBjMTg5LjYtMzUuNiAzODIuNy0xMzkuMiA0MTYtMTYwbDAgMTQ1ek03NC4xIDE5MS42Yy01LjItNC45LTExLjYtNi42LTIxLjktNi42bC00LjIgMCAwIDU0LjIgNC4yIDBjMTAuMyAwIDE3LTIgMjEuOS02LjQgNS43LTUuMiA4LjktMTIuOCA4LjktMjAuN3MtMy4yLTE1LjUtOC45LTIwLjV6Il0KICAgIH07CiAgICBmYVNhZmFyaSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzYWZhcmkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI2NyIsICJNMjc0LjcgMjc0LjdMMjM3LjMgMjM3LjMgMTY2IDM0NiAyNzQuNyAyNzQuN3pNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MTEuOCAxODIuOGwxNC44LTYuMWMxLS40IDItLjYgMy4xLS42czIuMSAuMiAzLjEgLjYgMS44IDEgMi42IDEuNyAxLjMgMS42IDEuNyAyLjYgLjYgMiAuNiAzLjEtLjIgMi4xLS42IDMuMS0xIDEuOS0xLjcgMi42LTEuNiAxLjMtMi42IDEuN0w0MTggMTk3LjZjLTIgLjgtNC4yIC44LTYuMSAwcy0zLjUtMi40LTQuMy00LjMtLjgtNC4yIDAtNi4xIDIuNC0zLjUgNC4zLTQuM3pNMzE0LjQgOTRsNi4xLTE0LjhjLjgtMiAyLjQtMy41IDQuMy00LjNzNC4yLS44IDYuMSAwIDMuNSAyLjQgNC4zIDQuMyAuOCA0LjIgMCA2LjFsLTYuMSAxNC44Yy0uOCAyLTIuNCAzLjUtNC4zIDQuM3MtNC4yIC44LTYuMSAwYy0xLS40LTEuOS0xLTIuNi0xLjdzLTEuMy0xLjYtMS43LTIuNi0uNi0yLS42LTMuMSAuMi0yLjEgLjYtMy4xek0yNTYgNjBjMi4xIDAgNC4yIC44IDUuNyAyLjNTMjY0IDY1LjkgMjY0IDY4bDAgMTZjMCAyLjEtLjggNC4yLTIuMyA1LjdzLTMuNSAyLjMtNS43IDIuMy00LjItLjgtNS43LTIuMy0yLjMtMy41LTIuMy01LjdsMC0xNmMwLTIuMSAuOC00LjIgMi4zLTUuN1MyNTMuOSA2MCAyNTYgNjB6TTE4MSA3NC45YzEtLjQgMi0uNiAzLjEtLjZzMi4xIC4yIDMuMSAuNiAxLjkgMSAyLjYgMS43IDEuMyAxLjYgMS43IDIuNkwxOTcuNiA5NGMuNCAxIC43IDIgLjcgMy4xcy0uMiAyLjEtLjYgMy4xLTEgMS45LTEuNyAyLjYtMS42IDEuNC0yLjYgMS44LTIgLjYtMy4xIC42LTIuMS0uMi0zLjEtLjYtMS45LTEtMi42LTEuOC0xLjMtMS43LTEuNy0yLjdsLTYuMS0xNC44Yy0uOC0yLS44LTQuMiAwLTYuMXMyLjQtMy41IDQuMy00LjN6bS02My42IDQyLjVjMS41LTEuNSAzLjUtMi4zIDUuNy0yLjNzNC4yIC44IDUuNyAyLjNMMTQwIDEyOC43YzEuNSAxLjUgMi4zIDMuNSAyLjMgNS42cy0uOCA0LjEtMi4zIDUuNmMtMS41IDEuNS0zLjUgMi4zLTUuNyAyLjNzLTQuMi0uOC01LjctMi4zbC0xMS4zLTExLjNjLTEuNS0xLjUtMi4zLTMuNS0yLjMtNS42cy44LTQuMSAyLjMtNS42bDAgMHpNNjAgMjU2YzAtMi4xIC44LTQuMiAyLjMtNS43UzY1LjkgMjQ4IDY4IDI0OGwxNiAwYzIuMSAwIDQuMiAuOCA1LjcgMi4zczIuMyAzLjUgMi4zIDUuNy0uOCA0LjItMi4zIDUuNy0zLjUgMi4zLTUuNyAyLjNsLTE2IDBjLTIuMSAwLTQuMi0uOC01LjctMi4zUzYwIDI1OC4xIDYwIDI1NnptNDAuMiA3My4ybC0xNC44IDYuMWMtMSAuNC0yIC42LTMuMSAuNnMtMi4xLS4yLTMuMS0uNi0xLjktMS0yLjYtMS43LTEuMy0xLjYtMS43LTIuNi0uNi0yLS42LTMuMSAuMi0yLjEgLjYtMy4xIDEtMS45IDEuNy0yLjYgMS42LTEuMyAyLjYtMS43TDk0IDMxNC40YzItLjggNC4yLS44IDYuMSAwczMuNSAyLjQgNC4zIDQuMyAuOCA0LjIgMCA2LjEtMi40IDMuNS00LjMgNC4zem00LjMtMTM2Yy0uNCAxLTEgMS45LTEuNyAyLjZzLTEuNiAxLjMtMi42IDEuNy0yIC42LTMuMSAuNi0yLjEtLjItMy4xLS42bC0xNC44LTYuMWMtMi0uOC0zLjUtMi40LTQuMy00LjNzLS44LTQuMiAwLTYuMSAyLjQtMy41IDQuMy00LjMgNC4yLS44IDYuMSAwbDE0LjggNi4xYzIgLjggMy41IDIuNCA0LjMgNC4zcy44IDQuMiAwIDYuMWwwIDB6TTE5Ny42IDQxOGwtNi4xIDE0LjhjLS40IDEtMSAxLjktMS43IDIuNnMtMS42IDEuMy0yLjYgMS43LTIgLjYtMy4xIC42LTIuMS0uMi0zLjEtLjYtMS45LTEtMi42LTEuNy0xLjMtMS42LTEuNy0yLjYtLjYtMi0uNi0zLjEgLjItMi4xIC42LTMuMWw2LjEtMTQuOGMuNC0xIDEtMS45IDEuNy0yLjdzMS42LTEuNCAyLjYtMS44IDItLjYgMy4xLS42IDIuMSAuMiAzLjEgLjYgMS45IDEgMi42IDEuOCAxLjMgMS43IDEuNyAyLjYgLjYgMiAuNiAzLjEtLjIgMi4xLS43IDMuMXpNMjY0IDQ0NGMwIDIuMS0uOCA0LjItMi4zIDUuN3MtMy41IDIuMy01LjcgMi4zLTQuMi0uOC01LjctMi4zLTIuMy0zLjUtMi4zLTUuN2wwLTE2YzAtMi4xIC44LTQuMiAyLjMtNS43czMuNS0yLjMgNS43LTIuMyA0LjIgLjggNS43IDIuMyAyLjMgMy41IDIuMyA1LjdsMCAxNnptNjctNi45Yy0xIC40LTIgLjYtMy4xIC42cy0yLjEtLjItMy4xLS42LTEuOS0xLTIuNi0xLjctMS4zLTEuNi0xLjctMi42TDMxNC40IDQxOGMtLjgtMi0uOC00LjIgMC02LjFzMi40LTMuNSA0LjMtNC4zIDQuMi0uOCA2LjEgMCAzLjUgMi40IDQuMyA0LjNsNi4xIDE0LjhjLjggMiAuOCA0LjIgMCA2LjFzLTIuNCAzLjUtNC4zIDQuM3ptNjMuNi00Mi41Yy0xLjUgMS41LTMuNSAyLjMtNS43IDIuM3MtNC4yLS44LTUuNy0yLjNMMzcyIDM4My4zYy0xLjUtMS41LTIuMy0zLjUtMi4zLTUuNnMuOC00LjEgMi4zLTUuNiAzLjUtMi4zIDUuNy0yLjMgNC4yIC44IDUuNyAyLjNsMTEuMyAxMS4zYzEuNSAxLjUgMi4zIDMuNSAyLjMgNS42cy0uOCA0LjEtMi4zIDUuNmwwIDB6TTI4Ni4yIDI4Ni4yTDExMC4zIDQwMS43IDIyNS44IDIyNS44IDQwMS43IDExMC4zIDI4Ni4yIDI4Ni4yek00MzcuMSAzMzFjLS44IDItMi40IDMuNS00LjMgNC4zcy00LjIgLjgtNi4xIDBsLTE0LjgtNi4xYy0yLS44LTMuNS0yLjQtNC4zLTQuM3MtLjgtNC4yIDAtNi4xYy40LTEgMS0xLjkgMS43LTIuNnMxLjYtMS4zIDIuNi0xLjcgMi0uNiAzLjEtLjYgMi4xIC4yIDMuMSAuNmwxNC44IDYuMWMyIC44IDMuNSAyLjQgNC4zIDQuM3MuOCA0LjIgMCA2LjF6bTYuOS02N2wtMTYgMGMtMi4xIDAtNC4yLS44LTUuNy0yLjNzLTIuMy0zLjUtMi4zLTUuNyAuOC00LjIgMi4zLTUuNyAzLjUtMi4zIDUuNy0yLjNsMTYgMGMyLjEgMCA0LjIgLjggNS43IDIuM3MyLjMgMy41IDIuMyA1LjctLjggNC4yLTIuMyA1LjctMy41IDIuMy01LjcgMi4zeiJdCiAgICB9OwogICAgZmFTcGFjZUF3ZXNvbWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3BhY2UtYXdlc29tZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNWFjIiwgIk05NiAyNTZsMzIgMCAwIDI1Ni0xMjggMCAwLTE2MCAzMiAwIDAtMzIgMzIgMCAwLTMyIDMyIDAgMC0zMnptNDE2IDk2bDAgMTYwLTEyOCAwIDAtMjU2IDMyIDAgMCAzMiAzMiAwIDAgMzIgMzIgMCAwIDMyIDMyIDB6TTMyMCA2NGwzMiAwIDAgMzg0LTMyIDAgMC0zMi0xMjggMCAwIDMyLTMyIDAgMC0zODQgMzIgMCAwLTMyIDMyIDAgMC0zMiA2NCAwIDAgMzIgMzIgMCAwIDMyem0tMzIgNjRsLTY0IDAgMCA2NCA2NCAwIDAtNjR6Il0KICAgIH07CiAgICBmYU5vZGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibm9kZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDE5IiwgIk0zMTYuMyA0NTJjLTIuMSAwLTQuMi0uNi02LjEtMS42TDI5MSA0MzljLTIuOS0xLjYtMS41LTIuMi0uNS0yLjUgMy44LTEuMyA0LjYtMS42IDguNy00IC40LS4yIDEtLjEgMS40IC4xbDE0LjggOC44Yy41IC4zIDEuMyAuMyAxLjggMEwzNzUgNDA4Yy41LS4zIC45LS45IC45LTEuNmwwLTY2LjdjMC0uNy0uMy0xLjMtLjktMS42bC01Ny44LTMzLjNjLS41LS4zLTEuMi0uMy0xLjggMGwtNTcuOCAzMy4zYy0uNiAuMy0uOSAxLS45IDEuNmwwIDY2LjdjMCAuNiAuNCAxLjIgLjkgMS41bDE1LjggOS4xYzguNiA0LjMgMTMuOS0uOCAxMy45LTUuOGwwLTY1LjljMC0uOSAuNy0xLjcgMS43LTEuN2w3LjMgMGMuOSAwIDEuNyAuNyAxLjcgMS43bDAgNjUuOWMwIDExLjUtNi4yIDE4LTE3LjEgMTgtMy4zIDAtNiAwLTEzLjMtMy42bC0xNS4yLTguN2MtMy43LTIuMi02LjEtNi4yLTYuMS0xMC41bDAtNjYuN2MwLTQuMyAyLjMtOC40IDYuMS0xMC41bDU3LjgtMzMuNGMzLjctMi4xIDguNS0yLjEgMTIuMSAwbDU3LjggMzMuNGMzLjcgMi4yIDYuMSA2LjIgNi4xIDEwLjVsMCA2Ni43YzAgNC4zLTIuMyA4LjQtNi4xIDEwLjVsLTU3LjggMzMuNGMtMS43IDEuMS0zLjggMS43LTYgMS43ek0zNjMgMzg2LjJjMC0xMi41LTguNC0xNS44LTI2LjItMTguMi0xOC0yLjQtMTkuOC0zLjYtMTkuOC03LjggMC0zLjUgMS41LTguMSAxNC44LTguMSAxMS45IDAgMTYuMyAyLjYgMTguMSAxMC42IC4yIC44IC44IDEuMyAxLjYgMS4zbDcuNSAwYy41IDAgLjktLjIgMS4yLS41IC4zLS40IC41LS44IC40LTEuMy0xLjItMTMuOC0xMC4zLTIwLjItMjguOC0yMC4yLTE2LjUgMC0yNi4zIDctMjYuMyAxOC42IDAgMTIuNyA5LjggMTYuMSAyNS42IDE3LjcgMTguOSAxLjkgMjAuNCA0LjYgMjAuNCA4LjMgMCA2LjUtNS4yIDkuMi0xNy40IDkuMi0xNS4zIDAtMTguNy0zLjgtMTkuOC0xMS40LS4xLS44LS44LTEuNC0xLjctMS40bC03LjUgMGMtLjkgMC0xLjcgLjctMS43IDEuNyAwIDkuNyA1LjMgMjEuMyAzMC42IDIxLjMgMTguNSAwIDI5LTcuMiAyOS0xOS44em01NC41LTUwLjFjMCA2LjEtNSAxMS4xLTExLjEgMTEuMXMtMTEuMS01LTExLjEtMTEuMWMwLTYuMyA1LjItMTEuMSAxMS4xLTExLjEgNi0uMSAxMS4xIDQuOCAxMS4xIDExLjF6bS0xLjggMGMwLTUuMi00LjItOS4zLTkuNC05LjMtNS4xIDAtOS4zIDQuMS05LjMgOS4zczQuMiA5LjQgOS4zIDkuNGM1LjItLjEgOS40LTQuMyA5LjQtOS40em0tNC41IDYuMmwtMi42IDBjLS4xLS42LS41LTMuOC0uNS0zLjktLjItLjctLjQtMS4xLTEuMy0xLjFsLTIuMiAwIDAgNS0yLjQgMCAwLTEyLjUgNC4zIDBjMS41IDAgNC40IDAgNC40IDMuMyAwIDIuMy0xLjUgMi44LTIuNCAzLjEgMS43IC4xIDEuOCAxLjIgMi4xIDIuOCAuMSAxIC4zIDIuNyAuNiAzLjN6bS0yLjgtOC44YzAtMS43LTEuMi0xLjctMS44LTEuN2wtMiAwIDAgMy41IDEuOSAwYzEuNiAwIDEuOS0xLjEgMS45LTEuOHpNMTM3LjMgMTkxYzAtMi43LTEuNC01LjEtMy43LTYuNEw3Mi4zIDE0OS4zYy0xLS42LTIuMi0uOS0zLjQtMWwtLjYgMGMtMS4yIDAtMi4zIC40LTMuNCAxTDMuNyAxODQuNkMxLjQgMTg1LjkgMCAxODguNCAwIDE5MWwuMSA5NWMwIDEuMyAuNyAyLjUgMS44IDMuMnMyLjUgLjcgMy43IDBMNDIgMjY4LjNjMi4zLTEuNCAzLjctMy44IDMuNy02LjRsMC00NC40YzAtMi42IDEuNC01LjEgMy43LTYuNGwxNS41LTguOWMxLjItLjcgMi40LTEgMy43LTFzMi42IC4zIDMuNyAxbDE1LjUgOC45YzIuMyAxLjMgMy43IDMuOCAzLjcgNi40bDAgNDQuNGMwIDIuNiAxLjQgNS4xIDMuNyA2LjRsMzYuNCAyMC45YzEuMSAuNyAyLjYgLjcgMy43IDAgMS4xLS42IDEuOC0xLjkgMS44LTMuMmwuMi05NXpNNDcyLjUgODcuM2wwIDE3Ni40YzAgMi42LTEuNCA1LjEtMy43IDYuNGwtNjEuMyAzNS40Yy0yLjMgMS4zLTUuMSAxLjMtNy40IDBsLTYxLjMtMzUuNGMtMi4zLTEuMy0zLjctMy44LTMuNy02LjRsMC03MC44YzAtMi42IDEuNC01LjEgMy43LTYuNGw2MS4zLTM1LjRjMi4zLTEuMyA1LjEtMS4zIDcuNCAwbDE1LjMgOC44YzEuNyAxIDMuOS0uMyAzLjktMi4ybDAtOTRjMC0yLjggMy00LjYgNS41LTMuMmwzNi41IDIwLjRjMi4zIDEuMiAzLjggMy43IDMuOCA2LjR6bS00NiAxMjguOWMwLS43LS40LTEuMy0uOS0xLjZsLTIxLTEyLjJjLS42LS4zLTEuMy0uMy0xLjkgMGwtMjEgMTIuMmMtLjYgLjMtLjkgLjktLjkgMS42bDAgMjQuM2MwIC43IC40IDEuMyAuOSAxLjZsMjEgMTIuMWMuNiAuMyAxLjMgLjMgMS44IDBsMjEtMTIuMWMuNi0uMyAuOS0uOSAuOS0xLjZsMC0yNC4zIC4xIDB6bTIwOS44LS43YzIuMy0xLjMgMy43LTMuOCAzLjctNi40bDAtMTcuMWMwLTIuNi0xLjQtNS4xLTMuNy02LjRsLTYwLjktMzUuNGMtMi4zLTEuMy01LjEtMS4zLTcuNCAwbC02MS4zIDM1LjRjLTIuMyAxLjMtMy43IDMuOC0zLjcgNi40bDAgNzAuOGMwIDIuNyAxLjQgNS4xIDMuNyA2LjRsNjAuOSAzNC43YzIuMiAxLjMgNSAxLjMgNy4zIDBsMzYuOC0yMC41YzIuNS0xLjQgMi41LTUgMC02LjRMNTUwIDI0MS42Yy0xLjItLjctMS45LTEuOS0xLjktMy4ybDAtMjIuMmMwLTEuMyAuNy0yLjUgMS45LTMuMmwxOS4yLTExLjFjMS4xLS43IDIuNi0uNyAzLjcgMEw1OTIuMSAyMTNjMS4xIC43IDEuOSAxLjkgMS45IDMuMmwwIDE3LjRjMCAyLjggMy4xIDQuNiA1LjYgMy4ybDM2LjctMjEuM3pNNTU5IDIxOWMtLjQgLjMtLjcgLjctLjcgMS4ybDAgMTMuNmMwIC41IC4zIDEgLjcgMS4ybDExLjggNi44Yy40IC4zIDEgLjMgMS40IDBMNTg0IDIzNWMuNC0uMyAuNy0uNyAuNy0xLjJsMC0xMy42YzAtLjUtLjMtMS0uNy0xLjJsLTExLjgtNi44Yy0uNC0uMy0xLS4zLTEuNCAwTDU1OSAyMTl6TTMwNC44IDI2Mi41bDAtNzAuNGMwLTIuNi0xLjYtNS4xLTMuOS02LjRsLTYxLjEtMzUuMmMtMi4xLTEuMi01LTEuNC03LjQgMGwtNjEuMSAzNS4yYy0yLjMgMS4zLTMuOSAzLjctMy45IDYuNGwwIDcwLjRjMCAyLjggMS45IDUuMiA0IDYuNGw2MS4yIDM1LjJjMi40IDEuNCA1LjIgMS4zIDcuNCAwbDYxLTM1LjJjMS44LTEgMy4xLTIuNyAzLjYtNC43IC4xLS41IC4yLTEuMSAuMi0xLjd6TTIzMC41IDEzNy42bC0uOCAuNSAxLjEgMC0uMy0uNXptNzYuMiAxMzAuMmwtLjQtLjcgMCAuOSAuNC0uMnoiXQogICAgfTsKICAgIGZhQ29kZXBlbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjb2RlcGVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxY2IiLCAiTTUwMi4zIDE1OS43bC0yMzQtMTU2Yy04LTQuOS0xNi41LTUtMjQuNiAwbC0yMzQgMTU2Yy02IDQtOS43IDExLjEtOS43IDE4LjNMMCAzMzRjMCA3LjEgMy43IDE0LjMgOS43IDE4LjNsMjM0IDE1NmM4IDQuOSAxNi41IDUgMjQuNiAwbDIzNC0xNTZjNi00IDkuNy0xMS4xIDkuNy0xOC4zbDAtMTU2YzAtNy4xLTMuNy0xNC4zLTkuNy0xOC4zek0yNzggNjMuMWwxNzIuMyAxMTQuOS03Ni45IDUxLjQtOTUuNC02My43IDAtMTAyLjZ6bS00NCAwTDIzNCAxNjUuNyAxMzguNiAyMjkuNCA2MS43IDE3OCAyMzQgNjMuMXpNNDQgMjE5LjFMOTkuMSAyNTYgNDQgMjkyLjggNDQgMjE5LjF6TTIzNCA0NDguOEw2MS43IDMzNCAxMzguNiAyODIuNiAyMzQgMzQ2LjMgMjM0IDQ0OC44ek0yNTYgMzA4bC03Ny43LTUyIDc3LjctNTIgNzcuNyA1Mi03Ny43IDUyem0yMiAxNDAuOWwwLTEwMi42IDk1LjQtNjMuNyA3Ni45IDUxLjQtMTcyLjMgMTE0Ljl6bTE5MC0xNTZsLTU1LjEtMzYuOSA1NS4xLTM2LjkgMCA3My43eiJdCiAgICB9OwogICAgZmFSYXZlbHJ5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJhdmVscnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjJkOSIsICJNNDk4LjYgMjM0LjJjLTEuMi0xMC4zLTEuNy0yMC44LTMuNy0zMS0yLjUtMTIuNC01LjctMjQuNi05LjYtMzYuNi02LjgtMjAuOS0xNy4yLTQwLjMtMzAuOS01Ny41LTUuOS03LjYtMTIuMS0xNC44LTE4LjgtMjEuNy0xNC4xLTE0LTMwLTI2LjEtNDcuMS0zNi4xLTE3LjgtMTAuNi0zNi44LTE4LjktNTYuNy0yNC43LTExLTMuMS0yMi4zLTUuNC0zMy41LTcuNi02LjgtMS4zLTEzLjctMS43LTIwLjYtMi41LS4zIDAtLjYtLjQtLjktLjYtMTAuOCAwLTIxLjUgMC0zMi4zIDAtMi40IC40LTQuOCAuOS03LjIgMS4yLTExLjYgMS4yLTIzLjEgMy42LTM0LjMgNy4xLTEzLjggNC4xLTI3LjEgOS42LTM5LjggMTYuNC0xMy4zIDctMjYuMSAxNS4xLTM4LjEgMjQuMi02LjIgNC42LTEyLjMgOS40LTE4IDE0LjUtMTAuMiA5LjItMjAuNCAxOC40LTI5LjkgMjguMy0xMi44IDEzLjMtMjQuMSAyOC4xLTMzLjYgNDQtOC42IDE0LTE1LjUgMjktMjAuNSA0NC42LTcuMiAyMi43LTEwLjMgNDYuNi05LjIgNzAuMyAuNiAxMy41IDIgMjYuOSA0LjQgNDAuMiAzLjQgMTguNCA5IDM2LjMgMTYuNyA1My4zIDEzLjYgMjkuMiAzMi4xIDUxLjUgNTAuNCA2Ny45IDEyLjggMTEuNiAyNi44IDIxLjkgNDEuOCAzMC42IDE3LjcgMTAuNCAzNi40IDE4LjkgNTUuOSAyNS4zIDEzLjMgNC4zIDI2LjkgNy42IDQwLjYgOS44IDYuMSAxIDEyLjMgMS4zIDE4LjQgMS45IC40IC4xIC44IC4zIDEuMiAuNmwzMi4zIDBjMi41LS40IDUtLjkgNy41LTEuMSAxNi4zLTEuMyAzMi4xLTUuMyA0Ny41LTEwLjcgMTcuMi01LjkgMzMuNy0xMy45IDQ5LTIzLjggOS43LTYuNCAxOS40LTEzLjEgMjguNy0yMC4xIDUuOC00LjMgMTEtOS41IDE2LjMtMTQuNSA0LTMuNyA3LjgtNy42IDExLjUtMTEuNSAxMi0xMi43IDIyLjYtMjYuNiAzMS40LTQxLjYgOS41LTE2IDE3LjQtMzIuOSAyMi4zLTUwLjkgMi45LTEwLjQgNC45LTIxIDctMzEuNyAxLTUuMyAxLjMtMTAuNyAxLjktMTYuMSAwLS4zIC40LS42IC42LS45bDAtMzcuMWMtLjItLjYtLjQtMS4yLS42LTEuOHptLTE2MS4xLTEuMnMtMTYuNi0zLTI4LjUtM2MtMjcuMiAwLTMzLjYgMTQuOS0zMy42IDM3bDAgOTMuNy03My41IDAgMC0xOTAuNyA3My41IDAgMCAzMS45YzguOS0yNi44IDI2LjgtMzYuMiA2Mi0zNi4ybDAgNjcuM3oiXQogICAgfTsKICAgIGZhQWxpcGF5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFsaXBheSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNjQyIiwgIk0zNzcuNyAzMkw3MC4zIDMyQzMxLjQgMzIgMCA2My40IDAgMTAyLjNMMCA0MDkuN0MwIDQ0OC42IDMxLjQgNDgwIDcwLjMgNDgwbDMwNy41IDBjMzguNSAwIDY5LjgtMzEuMSA3MC4zLTY5LjYtNDYtMjUuNi0xMTAuNi02MC4zLTE3MS42LTg4LjQtMzIuMSA0NC04NC4xIDgxLTE0OC42IDgxLTcwLjYgMC05My43LTQ1LjMtOTctNzYuNC00LTM5IDE0LjktODEuNSA5OS41LTgxLjUgMzUuNCAwIDc5LjQgMTAuMiAxMjcuMSAyNSAxNi41LTMwLjEgMjYuNS02MC4zIDI2LjUtNjAuM2wtMTc4LjIgMCAwLTE2LjcgOTIuMSAwIDAtMzEuMi0xMDkuNCAwIDAtMTkgMTA5LjQgMCAwLTUwLjQgNTAuOSAwIDAgNTAuNCAxMDkuNCAwIDAgMTktMTA5LjQgMCAwIDMxLjIgODguOCAwcy0xNS4yIDQ2LjYtMzguMyA5MC45YzQ4LjkgMTYuNyAxMDAgMzYgMTQ4LjYgNTIuN2wwLTIzNC40Yy4yLTM4LjctMzEuMi03MC4zLTY5LjktNzAuM3pNNDcuMyAzMjNjMSAyMC4yIDEwLjIgNTMuNyA2OS45IDUzLjcgNTIuMSAwIDkyLjYtMzkuNyAxMTcuOS03Mi45LTQ0LjYtMTguNy04NC41LTMxLjQtMTA5LjQtMzEuNC02Ny40IDAtNzkuNCAzMy4xLTc4LjQgNTAuNnoiXQogICAgfTsKICAgIGZhQ2NBbWV4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNjLWFtZXgiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFmMyIsICJNMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNDgwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xLjEtNjEuNyAwLTMxLjktMzUuMS0zMS45IDM1LjEtMjAzLjcgMCAwLTE2My44LTY1LjggMCA4MS43LTE4NC43IDc4LjYgMCAyOC4xIDYzLjIgMC02My4yIDk3LjIgMCAxNi45IDQ3LjYgMTctNDcuNiA3NS41IDAgMC0yLjRjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDQzMnptNDQwLjQtMjEuN2w0Mi4yLTQ2LjMgNDIgNDYuMyA1MS40IDAtNjgtNzIuMSA2OC03Mi4xLTUwLjYgMC00MiA0Ni43LTQxLjUtNDYuNy01MS40IDAgNjcuNSA3Mi41LTY3LjQgNzEuNiAwLTMzLjEtODMgMCAwLTIyLjIgODAuOSAwIDAtMzIuMy04MC45IDAgMC0yMi40IDgzIDAgMC0zMy4xLTEyMiAwIDAgMTQzLjIgMTcxLjggMHptOTYuMy03MmwzOS4zIDQxLjkgMC04My4zLTM5LjMgNDEuNHptLTM2LjMtOTJsMzYuOS0xMDAuNiAwIDEwMC42IDM4LjcgMCAwLTE0My4zLTYwLjIgMC0zMi4yIDg5LjMtMzEuOS04OS4zLTYxLjIgMCAwIDE0My4xLTYzLjItMTQzLjEtNTEuMiAwLTYyLjQgMTQzLjMgNDMgMCAxMS45LTI4LjcgNjUuOSAwIDEyIDI4LjcgODIuNyAwIDAtMTAwLjMgMzYuOCAxMDAuMyAzNC40IDB6TTI4MiAxODUuNGwxOS41LTQ2LjkgMTkuNCA0Ni45LTM4LjkgMHoiXQogICAgfTsKICAgIGZhUGllZFBpcGVyQWx0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBpZWQtcGlwZXItYWx0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxYTgiLCAiTTI0NCAyNDZjLTMuMi0yLTYuMy0yLjktMTAuMS0yLjktNi42IDAtMTIuNiAzLjItMTkuMyAzLjdsMS43IDQuOSAyNy43LTUuN3pNMzc5LjkgNDQzLjljLTE5IDAtNjQuMSA5LjUtNzkuOSAxOS44bDYuOSA0NS4xYzM1LjcgNi4xIDcwLjEgMy42IDEwNi05LjgtNC44LTEwLTIzLjUtNTUuMS0zMy01NS4xek0zNDAuOCAxNzdjNi42IDIuOCAxMS41IDkuMiAyMi43IDIyLjEgMi0xLjQgNy41LTUuMiA3LjUtOC42IDAtNC45LTExLjgtMTMuMi0xMy4yLTIzIDExLjItNS43IDI1LjItNiAzNy42LTguOSA2OC4xLTE2LjQgMTE2LjMtNTIuOSAxNDYuOC0xMTYuNyA2LjEtMTIuNiAxMS44LTI1LjggMTIuNC0zOS45bC0yIDIuNmMtMjguNCA1MC0zMyA2My4yLTgxLjMgMTAwLTMxLjkgMjQuNC02OS4yIDQwLjItMTA2LjYgNTQuNmwtNi4zLS4zIDAtMjEuOGMtMTkuNiAxLjYtMTkuNy0xNC42LTMxLjYtMjMtMTguNyAyMC42LTMxLjYgNDAuOC01OC45IDUxLjEtMTIuNyA0LjgtMTkuNiAxMC0yNS45IDIxLjggMzQuOS0xNi40IDkxLjItMTMuNSA5OC44LTEwek01NTUuNSAwbC0uNiAxLjEtLjMgLjkgLjYtLjYgLjMtMS40ek00OTYuMyAzODIuMWMtMzMuOS01Ni45LTc1LjMtMTE4LjQtMTUwLTExNS41bC0uMy02Yy0xLjEtMTMuNSAzMi44IDMuMiAzNS4xLTMxbC0xNC40IDcuMmMtMTkuOC00NS43LTguNi01NC4zLTY1LjUtNTQuMy0xNC43IDAtMjYuNyAxLjctNDEuNCA0LjYgMi45IDE4LjYgMi4yIDM2LjctMTAuOSA1MC4zbDE5LjUgNS41Yy0xLjcgMy4yLTIuOSA2LjMtMi45IDkuOCAwIDIxIDQyLjggMi45IDQyLjggMzMuNiAwIDE4LjQtMzYuOCA2MC4xLTU0LjkgNjAuMS04IDAtNTMuNy01MC01My40LTYwLjFsLjMtNC42IDUyLjMtMTEuNWMxMy0yLjYgMTIuMy0yMi43LTIuOS0yMi43LTMuNyAwLTQzLjEgOS4yLTQ5LjQgMTAuNi0yLTUuMi03LjUtMTQuMS0xMy44LTE0LjEtMy4yIDAtNi4zIDMuMi05LjUgNC05LjIgMi42LTMxIDIuOS0yMS41IDIwLjFMMTUuOSAyOTguNWMtNS41IDEuMS04LjkgNi4zLTguOSAxMS44IDAgNiA1LjUgMTAuOSAxMS41IDEwLjkgOCAwIDEzMS4zLTI4LjQgMTQ3LjQtMzIuMiAyLjYgMy4yIDQuNiA2LjMgNy44IDguNiAyMC4xIDE0LjQgNTkuOCA4NS45IDc2LjQgODUuOSAyNC4xIDAgNTgtMjIuNCA3MS4zLTQxLjkgMy4yLTQuMyA2LjktNy41IDEyLjQtNi45IC42IDEzLjgtMzEuNiAzNC4yLTMzIDQzLjctMS40IDEwLjItMSAzNS4yLS4zIDQxLjEgMjYuNyA4LjEgNTItMy42IDc3LjktMi45IDQuMy0yMSAxMC42LTQxLjkgOS44LTYzLjVsLS4zLTkuNWMtMS40LTM0LjItMTAuOS0zOC41LTM0LjgtNTguNi0xLjEtMS4xLTIuNi0yLjYtMy43LTQgMi4yLTEuNCAxLjEtMSA0LjYtMS43IDg4LjUgMCA1Ni4zIDE4My42IDExMS41IDIyOS45IDMzLjEtMTUgNzIuNS0yNy45IDEwMy41LTQ3LjItMjktMjUuNi01Mi42LTQ1LjctNzIuNy03OS45ek0zMDAuMSA0MjguMmwwIDI3LjIgMTEuOC0zLjQtMi45LTIzLjgtOC45IDB6TTIzMS40IDI3Ny44bDI0LjEgNjEuMiAyMS0xMy44LTMxLjMtNTAuOS0xMy44IDMuNXptODQuNCAxNTQuOWwyIDEyLjRjOS0xLjUgNTguNC02LjYgNTguNC0xNC4xIDAtMS40LS42LTMuMi0uOS00LjYtMjYuOCAwLTM2LjkgMy44LTU5LjUgNi4zeiJdCiAgICB9OwogICAgZmFMZXR0ZXJib3hkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxldHRlcmJveGQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTYyZCIsICJNNTIxLjMgMTI4QzU4Ni45IDEyOCA2NDAgMTgxLjEgNjQwIDI0Ni42UzU4Ni45IDM2NS4yIDUyMS4zIDM2NS4yYy00Mi41IDAtNzkuNy0yMi4zLTEwMC43LTU1LjggMTEuNC0xOC4yIDE4LTM5LjcgMTgtNjIuOHMtNi42LTQ0LjYtMTgtNjIuOGwuOC0xLjJjMjAuOC0zMi4zIDU2LjgtNTMuOSA5Ny45LTU0LjZsMiAwek0zMjAgMTI4YzQyLjUgMCA3OS43IDIyLjMgMTAwLjcgNTUuOC0xMS40IDE4LjItMTggMzkuNy0xOCA2Mi44czYuNiA0NC42IDE4IDYyLjhsLS44IDEuMmMtMjAuOCAzMi4zLTU2LjggNTMuOS05Ny45IDU0LjZsLTIgMGMtNDIuNSAwLTc5LjctMjIuMy0xMDAuNy01NS44IDExLjQtMTguMiAxOC0zOS43IDE4LTYyLjhzLTYuNi00NC42LTE4LTYyLjhsLjgtMS4yYzIwLjgtMzIuMyA1Ni44LTUzLjkgOTcuOS01NC42bDIgMHptLTIwMS4zIDBjNDIuNSAwIDc5LjcgMjIuMyAxMDAuNyA1NS44LTExLjQgMTguMi0xOCAzOS43LTE4IDYyLjhzNi42IDQ0LjYgMTggNjIuOGwtLjggMS4yYy0yMC44IDMyLjMtNTYuOCA1My45LTk3LjkgNTQuNmwtMiAwQzUzLjEgMzY1LjEgMCAzMTIuMSAwIDI0Ni42UzUzLjEgMTI4IDExOC43IDEyOHoiXQogICAgfTsKICAgIGZhT3BlcmEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib3BlcmEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI2YSIsICJNMzIxLjkgMzIuN2MtMTcwLjIgMC0yNTIuNiAyMjMuOC0xNDcuNSAzNTUuMSAzNi41IDQ1LjQgODguNiA3NS42IDE0Ny41IDc1LjYgMzYuMyAwIDcwLjMtMTEuMSA5OS40LTMwLjQtNDMuOCAzOS4yLTEwMS45IDYzLTE2NS4zIDYzLTMuOSAwLTggMC0xMS45LS4zLTEzMS41LTYuMS0yMzYuMS0xMTQuNi0yMzYuMS0yNDcuNyAwLTEzNyAxMTEtMjQ4IDI0OC0yNDhsLjggMGM2My4xIC4zIDEyMC43IDI0LjEgMTY0LjQgNjMuMS0yOS0xOS40LTYzLjEtMzAuNC05OS4zLTMwLjR6TTQyMy43IDQzMC40Yy00MC45IDI0LjctOTAuNyAyMy42LTEzMi01LjggNTYuMi0yMC41IDk3LjctOTEuNiA5Ny43LTE3Ni42IDAtODQuNy00MS4yLTE1NS44LTk3LjQtMTc2LjYgNDEuOC0yOS4yIDkxLjItMzAuMyAxMzIuOS01IDEwNS45IDk4LjcgMTA1LjUgMjY1LjctMS4yIDM2NHoiXQogICAgfTsKICAgIGZhV2VpYm8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2VpYm8iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjE4YSIsICJNNDA3IDE3Ny42YzcuNi0yNC0xMy40LTQ2LjgtMzcuNC00MS43LTIyIDQuOC0yOC44LTI4LjEtNy4xLTMyLjggNTAuMS0xMC45IDkyLjMgMzcuMSA3Ni41IDg0LjgtNi44IDIxLjItMzguOCAxMC44LTMyLTEwLjN6TTIxNC44IDQ0Ni43Yy0xMDYuMyAwLTIxNC44LTUxLjQtMjE0LjgtMTM2LjMgMC00NC4zIDI4LTk1LjQgNzYuMy0xNDMuNyA5OS43LTk5LjcgMjAzLjItMTAwLjkgMTczLjYtNS43LTQgMTMuMSAxMi4zIDUuNyAxMi4zIDYgNzkuNS0zMy42IDE0MC41LTE2LjggMTE0IDUxLjQtMy43IDkuNCAxLjEgMTAuOSA4LjMgMTMuMSAxMzUuNyA0Mi4zIDM0LjggMjE1LjItMTY5LjcgMjE1LjJ6TTM1OC41IDMwMC40Yy01LjQtNTUuNy03OC41LTk0LTE2My40LTg1LjctODQuOCA4LjYtMTQ4LjggNjAuMy0xNDMuNCAxMTZzNzguNSA5NCAxNjMuNCA4NS43Yzg0LjgtOC42IDE0OC44LTYwLjMgMTQzLjQtMTE2ek0zNDcuOSAzNS4xYy0yNS45IDUuNi0xNi44IDQzLjcgOC4zIDM4LjMgNzIuMy0xNS4yIDEzNC44IDUyLjggMTExLjcgMTI0LTcuNCAyNC4yIDI5LjEgMzcgMzcuNCAxMiAzMS45LTk5LjgtNTUuMS0xOTUuOS0xNTcuNC0xNzQuM3ptLTc4LjUgMzExYy0xNy4xIDM4LjgtNjYuOCA2MC0xMDkuMSA0Ni4zLTQwLjgtMTMuMS01OC01My40LTQwLjMtODkuNyAxNy43LTM1LjQgNjMuMS01NS40IDEwMy40LTQ1LjEgNDIgMTAuOCA2My4xIDUwLjIgNDYgODguNXptLTg2LjMtMzBjLTEyLjktNS40LTMwIC4zLTM4IDEyLjktOC4zIDEyLjktNC4zIDI4IDguNiAzNCAxMy4xIDYgMzAuOCAuMyAzOS4xLTEyLjkgOC0xMy4xIDMuNy0yOC4zLTkuNy0zNHptMzIuNi0xMy40Yy01LjEtMS43LTExLjQgLjYtMTQuMyA1LjQtMi45IDUuMS0xLjQgMTAuNiAzLjcgMTIuOSA1LjEgMiAxMS43LS4zIDE0LjYtNS40IDIuOC01LjIgMS4xLTEwLjktNC0xMi45eiJdCiAgICB9OwogICAgZmFSZWFkbWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVhZG1lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0ZDUiLCAiTTUyOC4zIDQ2LjVsLTEzOS44IDBjLTQ4LjEgMC04OS45IDMzLjMtMTAwLjQgODAuMy0xMC42LTQ3LTUyLjMtODAuMy0xMDAuNC04MC4zTDQ4IDQ2LjVDMjEuNSA0Ni41IDAgNjggMCA5NC41TDAgMzQwLjNjMCAyNi41IDIxLjUgNDggNDggNDhsODkuNyAwYzEwMi4yIDAgMTMyLjcgMjQuNCAxNDcuMyA3NSAuNyAyLjggNS4yIDIuOCA2IDAgMTQuNy01MC42IDQ1LjItNzUgMTQ3LjMtNzVsODkuNyAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjQ1LjdjMC0yNi40LTIxLjMtNDcuOS00Ny43LTQ4LjF6TTI0MiAzMTEuOWMwIDEuOS0xLjUgMy41LTMuNSAzLjVsLTE2MC4zIDBjLTEuOSAwLTMuNS0xLjUtMy41LTMuNWwwLTIyLjljMC0xLjkgMS41LTMuNSAzLjUtMy41bDE2MC40IDBjMS45IDAgMy41IDEuNSAzLjUgMy41bDAgMjIuOS0uMSAwem0wLTYwLjljMCAxLjktMS41IDMuNS0zLjUgMy41bC0xNjAuMyAwYy0xLjkgMC0zLjUtMS41LTMuNS0zLjVsMC0yMi45YzAtMS45IDEuNS0zLjUgMy41LTMuNWwxNjAuNCAwYzEuOSAwIDMuNSAxLjUgMy41IDMuNWwwIDIyLjktLjEgMHptMC02MC45YzAgMS45LTEuNSAzLjUtMy41IDMuNWwtMTYwLjMgMGMtMS45IDAtMy41LTEuNS0zLjUtMy41bDAtMjIuOWMwLTEuOSAxLjUtMy41IDMuNS0zLjVsMTYwLjQgMGMxLjkgMCAzLjUgMS41IDMuNSAzLjVsMCAyMi45LS4xIDB6TTUwMS4zIDMxMS44YzAgMS45LTEuNSAzLjUtMy41IDMuNWwtMTYwLjMgMGMtMS45IDAtMy41LTEuNS0zLjUtMy41bDAtMjIuOWMwLTEuOSAxLjUtMy41IDMuNS0zLjVsMTYwLjQgMGMxLjkgMCAzLjUgMS41IDMuNSAzLjVsMCAyMi45LS4xIDB6bTAtNjAuOWMwIDEuOS0xLjUgMy41LTMuNSAzLjVsLTE2MC4zIDBjLTEuOSAwLTMuNS0xLjUtMy41LTMuNWwwLTIyLjljMC0xLjkgMS41LTMuNSAzLjUtMy41bDE2MC40IDBjMS45IDAgMy41IDEuNSAzLjUgMy41bDAgMjIuOS0uMSAwem0wLTYwLjljMCAxLjktMS41IDMuNS0zLjUgMy41bC0xNjAuMyAwYy0xLjkgMC0zLjUtMS41LTMuNS0zLjVsMC0yMi44YzAtMS45IDEuNS0zLjUgMy41LTMuNWwxNjAuNCAwYzEuOSAwIDMuNSAxLjUgMy41IDMuNWwwIDIyLjgtLjEgMHoiXQogICAgfTsKICAgIGZhR29sYW5nID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvbGFuZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNDBmIiwgIk00MDAuMSAxOTQuOGMtMTAuOSAyLjgtMTkuOSA0LjMtMjkuMSA3LjYtNy4zIDEuOS0xNC43IDMuOS0yMy4yIDYuMWwtLjYgLjFjLTQuMiAxLjItNC42IDEuMy04LjUtMy4yLTQuNy01LjMtOC4xLTguNy0xNC42LTExLjktMTkuNy05LjYtMzguNy02LjgtNTYuNCA0LjctMjEuMiAxMy43LTMyLjEgMzQtMzEuOCA1OS4yIC4zIDI1IDE3LjQgNDUuNSA0MS4yIDQ4LjkgMjIgMi44IDM5LjgtNC42IDUzLjgtMjAuNSAyLjEtMi42IDQtNS4zIDYuMS04LjMgLjgtMSAxLjUtMi4xIDIuMy0zLjNsLTYwLjEgMGMtNi41IDAtOC4xLTQtNS45LTkuMyA0LTkuNyAxMS41LTI1LjkgMTUuOS0zNCAuOS0xLjggMy4xLTUuOCA2LjktNS44bDEwMS4xIDBjNC41LTEzLjQgMTEuOC0yNi45IDIxLjYtMzkuNyAyMi43LTI5LjkgNDkuMy00NS41IDg3LjItNTIgMzEuOC01LjYgNjEuNy0yLjUgODguOSAxNS45IDI0LjYgMTYuOCAzOS44IDM5LjYgNDMuOSA2OS41IDUuMyA0Mi4xLTYuOSA3Ni4zLTM2LjcgMTA1LjYtMTkuNyAyMC45LTQ0LjkgMzQtNzMuOSAzOS45LTUuNiAxLTExLjEgMS41LTE2LjUgMi0yLjkgLjItNS43IC41LTguNSAuOC0yOC4zLS42LTU0LjItOC43LTc2LTI3LjQtMTUuMy0xMy4zLTI1LjktMjkuNi0zMS4xLTQ4LjUtMy43IDcuMy04IDE0LjQtMTQgMjEuMS0yMS42IDI5LjYtNTAuOSA0OC04Ny45IDUyLjktMzAuNiA0LjEtNTguOS0xLjgtODMuOS0yMC41LTIzLTE3LjUtMzYuMS00MC41LTM5LjUtNjkuMi00LjEtMzQgNS45LTY1LjQgMjYuNC05MS4zIDIyLjItMjkgNTEuNS00Ny40IDg3LjMtNTMuOSAyOS4zLTYuMiA1Ny4zLTEuOSA4Mi42IDE1LjMgMTYuNSAxMC45IDI4LjMgMjUuOCAzNi4xIDQzLjkgMS45IDIuOCAuNiA0LjQtMy4xIDUuM3pNNDguMyAyMDAuNGMtMS4zIDAtMS42LS42LS45LTEuNmw2LjYtOC40Yy42LS45IDIuMi0xLjUgMy40LTEuNWwxMTEuMyAwYzEuMiAwIDEuNSAuOSAuOSAxLjhsLTUuMyA4LjFjLS42IDEtMi4yIDEuOS0zLjEgMS45bC0xMTIuOC0uM3pNMS4yIDIyOS4xYy0xLjIgMC0xLjYtLjctLjktMS42bDYuNS04LjRjLjYtLjkgMi4yLTEuNiAzLjQtMS42bDE0Mi4xIDBjMS4yIDAgMS44IDEgMS41IDEuOWwtMi41IDcuNWMtLjMgMS4yLTEuNSAxLjktMi44IDEuOUwxLjIgMjI5LjF6bTc0LjUgMjYuOGMtLjYgLjktLjMgMS44IC45IDEuOGw2OCAuM2MuOSAwIDIuMi0uOSAyLjItMi4xbC42LTcuNWMwLTEuMy0uNi0yLjItMS45LTIuMmwtNjIuMyAwYy0xLjIgMC0yLjUgLjktMy4xIDEuOWwtNC40IDcuOHptNTAxLjUtMThjLS4yLTIuNi0uMy00LjgtLjctNy01LjYtMzAuOC0zNC00OC4zLTYzLjYtNDEuNC0yOSA2LjUtNDcuNyAyNC45LTU0LjUgNTQuMi01LjYgMjQuMyA2LjIgNDguOSAyOC42IDU4LjkgMTcuMiA3LjUgMzQuMyA2LjYgNTAuOC0xLjkgMjQuNi0xMy42IDM4LTMyLjcgMzkuNi01OS41LS4xLTEuMi0uMS0yLjMtLjItMy4zeiJdCiAgICB9OwogICAgZmFTdGFja0V4Y2hhbmdlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0YWNrLWV4Y2hhbmdlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxOGQiLCAiTTE4LjEgMzMyLjNsNDEyLjcgMCAwIDIyYzAgMzcuNy0yOS4zIDY4LTY1LjMgNjhsLTE5IDAtODYuOCA4OS43IDAtODkuNy0xNzYuMyAwYy0zNiAwLTY1LjMtMzAuMy02NS4zLTY4bDAtMjJ6bTAtMjMuNmw0MTIuNyAwIDAtODUtNDEyLjcgMCAwIDg1em0wLTEwOS40bDQxMi43IDAgMC04NS00MTIuNyAwIDAgODV6TTM2NS40IDBMODMuNCAwYy0zNiAwLTY1LjMgMzAuMy02NS4zIDY3LjdsMCAyMi4zIDQxMi43IDAgMC0yMi4zQzQzMC43IDMwLjMgNDAxLjQgMCAzNjUuNCAweiJdCiAgICB9OwogICAgZmFHdWxwID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImd1bHAiLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFtdLCAiZjNhZSIsICJNMjEwIDM5MS4xbC0xNC4xIDI0LjYtNC42IDgwLjJjMCA4LjktMjguMyAxNi4xLTYzLjEgMTYuMXMtNjMuMS03LjItNjMuMS0xNi4xbC01LjgtNzkuNC0xNC45LTI1LjRjNDEuMiAxNy4zIDEyNiAxNi43IDE2NS42IDB6TTE0IDEzNy44TDI3LjYgMjYzLjNjNS45LTIwIDIwLjgtNDcgNDAtNTUuMiA2LjMtMi43IDEyLjctMi43IDE4LjcgLjkgNS4yIDMgOS42IDkuMyAxMC4xIDExLjggMS4yIDYuNS0yIDkuMS00LjUgOS4xLTMgMC01LjMtNC42LTYuOC03LjMtNC4xLTcuMy0xMC4zLTcuNi0xNi45LTIuOC02LjkgNS0xMi45IDEzLjQtMTcuMSAyMC43LTUuMSA4LjgtOS40IDE4LjUtMTIgMjguMi0xLjUgNS42LTIuOSAxNC42LS42IDE5LjkgMSAyLjIgMi41IDMuNiA0LjkgMy42IDUgMCAxMi4zLTYuNiAxNS44LTEwLjEgNC41LTQuNSAxMC4zLTExLjUgMTIuNS0xNmw1LjItMTUuNWMyLjYtNi44IDkuOS01LjYgOS45IDAgMCAxMC4yLTMuNyAxMy42LTEwIDM0LjctNS44IDE5LjUtNy42IDI1LjgtNy42IDI1LjgtLjcgMi44LTMuNCA3LjUtNi4zIDcuNS0xLjIgMC0yLjEtLjQtMi42LTEuMi0xLTEuNC0uOS01LjMtLjgtNi4zIC4yLTMuMiA2LjMtMjIuMiA3LjMtMjUuMi0yIDIuMi00LjEgNC40LTYuNCA2LjYtNS40IDUuMS0xNC4xIDExLjgtMjEuNSAxMS44LTMuNCAwLTUuNi0uOS03LjctMi40bDcuNiA3OS42YzIgNSAzOS4yIDE3LjEgODguMiAxNy4xIDQ5LjEgMCA4Ni4zLTEyLjIgODguMi0xNy4xbDEwLjktOTQuNmMtNS43IDUuMi0xMi4zIDExLjYtMTkuNiAxNC44LTUuNCAyLjMtMTcuNCAzLjgtMTcuNC01LjcgMC01LjIgOS4xLTE0LjggMTQuNC0yMS41IDEuNC0xLjcgNC43LTUuOSA0LjctOC4xIDAtMi45LTYtMi4yLTExLjcgMi41LTMuMiAyLjctNi4yIDYuMy04LjcgOS43LTQuMyA2LTYuNiAxMS4yLTguNSAxNS41LTYuMiAxNC4yLTQuMSA4LjYtOS4xIDIyLTUgMTMuMy00LjIgMTEuOC01LjIgMTQtLjkgMS45LTIuMiAzLjUtNCA0LjUtMS45IDEtNC41IC45LTYuMS0uMy0uOS0uNi0xLjMtMS45LTEuMy0zLjcgMC0uOSAuMS0xLjggLjMtMi43IDEuNS02LjEgNy44LTE4LjEgMTUtMzQuMyAxLjYtMy43IDEtMi42IC44LTIuMy02LjIgNi0xMC45IDguOS0xNC40IDEwLjUtNS44IDIuNi0xMyAyLjYtMTQuNS00LjEtLjEtLjQtLjEtLjgtLjItMS4yLTExLjggOS4yLTI0LjMgMTEuNy0yMC04LjEtNC42IDguMi0xMi42IDE0LjktMjIuNCAxNC45LTQuMSAwLTcuMS0xLjQtOC42LTUuMS0yLjMtNS41IDEuMy0xNC45IDQuNi0yMy44IDEuNy00LjUgNC05LjkgNy4xLTE2LjIgMS42LTMuNCA0LjItNS40IDcuNi00LjUgLjYgLjIgMS4xIC40IDEuNiAuNyAyLjYgMS44IDEuNiA0LjUgLjMgNy4yLTMuOCA3LjUtNy4xIDEzLTkuMyAyMC44LS45IDMuMy0yIDkgMS41IDkgMi40IDAgNC43LS44IDYuOS0yLjQgNC42LTMuNCA4LjMtOC41IDExLjEtMTMuNSAyLTMuNiA0LjQtOC4zIDUuNi0xMi4zIC41LTEuNyAxLjEtMy4zIDEuOC00LjggMS4xLTIuNSAyLjYtNS4xIDUuMi01LjEgMS4zIDAgMi40IC41IDMuMiAxLjUgMS43IDIuMiAxLjMgNC41IC40IDYuOS0yIDUuNi00LjcgMTAuNi02LjkgMTYuNy0xLjMgMy41LTIuNyA4LTIuNyAxMS43IDAgMy40IDMuNyAyLjYgNi44IDEuMiAyLjQtMS4xIDQuOC0yLjggNi44LTQuNSAxLjItNC45IC45LTMuOCAyNi40LTY4LjIgMS4zLTMuMyAzLjctNC43IDYuMS00LjcgMS4yIDAgMi4yIC40IDMuMiAxLjEgMS43IDEuMyAxLjcgNC4xIDEgNi4yLS43IDEuOS0uNiAxLjMtNC41IDEwLjUtNS4yIDEyLjEtOC42IDIwLjgtMTMuMiAzMS45LTEuOSA0LjYtNy43IDE4LjktOC43IDIyLjMtLjYgMi4yLTEuMyA1LjggMSA1LjggNS40IDAgMTkuMy0xMy4xIDIzLjEtMTcgLjItLjMgLjUtLjQgLjktLjYgLjYtMS45IDEuMi0zLjcgMS43LTUuNSAxLjQtMy44IDIuNy04LjIgNS4zLTExLjMgLjgtMSAxLjctMS42IDIuNy0xLjYgMi44IDAgNC4yIDEuMiA0LjIgNCAwIDEuMS0uNyA1LjEtMS4xIDYuMiAxLjQtMS41IDIuOS0zIDQuNS00LjUgMTUtMTMuOSAyNS43LTYuOCAyNS43IC4yIDAgNy40LTguOSAxNy43LTEzLjggMjMuNC0xLjYgMS45LTQuOSA1LjQtNSA2LjQgMCAxLjMgLjkgMS44IDIuMiAxLjggMiAwIDYuNC0zLjUgOC00LjcgNS0zLjkgMTEuOC05LjkgMTYuNi0xNC4xbDE0LjgtMTM2LjhjLTMwLjUgMTcuMS0xOTcuNiAxNy4yLTIyOC4zIC4yem0yMjkuNy04LjVjMCAyMS0yMzEuMiAyMS0yMzEuMiAwIDAtOC44IDUxLjgtMTUuOSAxMTUuNi0xNS45IDkgMCAxNy44IC4xIDI2LjMgLjRMMTY3IDY1LjEgMjI4LjMgLjZjMS40LTEuNCA1LjgtLjIgOS45IDMuNXM2LjYgNy45IDUuMyA5LjNsLS4xIC4xLTU3LjMgNjAuNS0xMCA0MC43YzM5LjkgMi42IDY3LjYgOC4xIDY3LjYgMTQuNnptLTY5LjQgNC42YzAtLjgtLjktMS41LTIuNS0yLjFsLS4yIC44YzAgMS4zLTUgMi40LTExLjEgMi40cy0xMS4xLTEuMS0xMS4xLTIuNGMwLS4xIDAtLjIgLjEtLjNsLjItLjdjLTEuOCAuNi0zIDEuNC0zIDIuMyAwIDIuMSA2LjIgMy43IDEzLjcgMy43IDcuNyAuMSAxMy45LTEuNiAxMy45LTMuN3oiXQogICAgfTsKICAgIGZhWWVscCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ5ZWxwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxZTkiLCAiTTQyLjkgMjQwLjNsOTkuNiA0OC42YzE5LjIgOS40IDE2LjIgMzcuNS00LjUgNDIuN0wzMC41IDM1OC41Yy0zLjIgLjgtNi40IC45LTkuNiAuM3MtNi4yLTEuOC04LjktMy43LTQuOS00LjMtNi42LTcuMS0yLjctNS45LTMuMS05LjJjLTMuMy0yOC44LS4yLTU3LjkgOS04NS4zIDEtMy4xIDIuNy01LjkgNC45LTguM3M0LjktNC4yIDcuOS01LjUgNi4yLTEuOCA5LjUtMS44IDYuNCAuOSA5LjMgMi4zem00NCAyMzkuM2MyMy44IDE2LjMgNTAuOSAyNy4zIDc5LjQgMzIuMSAzLjIgLjYgNi41IC40IDkuNi0uNHM2LjEtMi4zIDguNi00LjQgNC42LTQuNiA2LTcuNSAyLjMtNi4xIDIuNC05LjRsMy45LTExMC44Yy43LTIxLjMtMjUuNS0zMS45LTM5LjgtMTYuMUw4Mi44IDQ0NS41Yy0yLjIgMi40LTMuOCA1LjMtNC44IDguNHMtMS4zIDYuNC0uOSA5LjYgMS41IDYuMyAzLjEgOS4xIDMuOSA1LjIgNi42IDdsMCAwek0yMzIuMiAzNjkuN2w1OC44IDk0YzEuNyAyLjggNCA1LjEgNi44IDYuOXM1LjggMyA5IDMuNSA2LjUgLjMgOS43LS41IDYuMS0yLjQgOC42LTQuNGMyMi4zLTE4LjQgNDAuMy00MS41IDUyLjctNjcuNiAxLjQtMi45IDIuMS02LjEgMi4yLTkuNHMtLjYtNi41LTEuOS05LjQtMy4yLTUuNy01LjYtNy44LTUuMi0zLjktOC4zLTQuOUwyNTguNyAzMzUuN2MtMjAuMy02LjUtMzcuOCAxNS44LTI2LjUgMzMuOXpNMzgwLjYgMjM3LjRjLTExLjUtMjYuNS0yOC43LTUwLjItNTAuNC02OS4zLTIuNC0yLjEtNS4zLTMuNy04LjQtNC43cy02LjQtMS4yLTkuNi0uOC02LjMgMS41LTkuMSAzLjItNS4xIDQtNi45IDYuN2wtNjIgOTEuOWMtMTEuOSAxNy43IDQuNyA0MC42IDI1LjIgMzQuN0wzNjYgMjY4LjZjMy4xLS45IDYtMi41IDguNS00LjZzNC41LTQuNyA1LjgtNy43IDIuMS02LjIgMi4yLTkuNC0uNi02LjUtMS45LTkuNWwwIDB6TTYyLjEgMzAuMmMtMi44IDEuNC01LjQgMy4zLTcuNCA1LjdzLTMuNiA1LjItNC41IDguMi0xLjIgNi4yLS45IDkuMyAxLjMgNi4xIDIuOSA4LjlMMTU2LjMgMjQyLjZjMTEuNyAyMC4yIDQyLjYgMTEuOSA0Mi42LTExLjRsMC0yMDguM2MwLTMuMS0uNi02LjMtMS44LTkuMnMtMy4xLTUuNS01LjQtNy42LTUtMy44LTgtNC44LTYuMS0xLjQtOS4zLTEuMmMtMzkgMy4xLTc3IDEzLjMtMTEyLjMgMzAuMXoiXQogICAgfTsKICAgIGZhR29mb3JlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvZm9yZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2E3IiwgIk0zNDggMzE5LjhsLTEzLjIgMCAwIDM0LjdjLTI0LjUgMjMuMS01Ni4zIDM1LjgtODkuOSAzNS44LTczLjIgMC0xMzIuNC02MC4yLTEzMi40LTEzNC40IDAtNzQuMSA1OS4yLTEzNC40IDEzMi40LTEzNC40IDM1LjMgMCA2OC42IDE0IDkzLjYgMzkuNGw2Mi4zLTYzLjNjLTQxLjgtNDIuMy05Ny4xLTY1LjYtMTU2LjEtNjUuNi0xMjIuNyAwLTIyMC43IDEwMC42LTIyMC43IDIyNCAwIDEyMi41IDk3IDIyNCAyMjAuNyAyMjQgNjMuMiAwIDEyNC41LTI2LjIgMTcxLTgyLjUtMi0yNy42LTEzLjQtNzcuNy02Ny43LTc3Ljd6TTMzNS45IDIwNy4zbC0xMDYuMyAwIDAgODkgMTE4LjQgMGMzMy41IDAgNjAuNSAxNS4xIDc2IDQxLjhsMC0zMC42YzAtNjUuMi00MC40LTEwMC4yLTg4LjEtMTAwLjJ6Il0KICAgIH07CiAgICBmYUF2aWF0byA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhdmlhdG8iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQyMSIsICJNMTA3LjIgMjgzLjVsLTE5LTQxLjgtNTIuMSAwLTE5IDQxLjgtMTcuMSAwIDYyLjItMTMxLjQgNjIuMiAxMzEuNC0xNy4yIDB6bS00NS05OC4xbC0xOS42IDQyLjUgMzkuMiAwLTE5LjYtNDIuNXpNMTc0LjkgMjg3LjhsLTYyLjItMTMxLjQgMTcuMSAwIDQ1LjEgOTYgNDUuMS05NiAxNyAwLTYyLjEgMTMxLjR6bTgwLjYtNC4zbDAtMTI3LjEgMTUuNSAwIDAgMTI3LjEtMTUuNSAwek00NjQuNiAxNjcuOWwwIDExNS42LTE3LjMgMCAwLTExNS42LTQxLjIgMCAwLTExLjUgOTkuNiAwIDAgMTEuNS00MS4xIDB6TTY0MCAyMTguOGMwIDkuMi0xLjcgMTcuOC01LjEgMjUuOHMtOC4yIDE1LjEtMTQuMiAyMS4xLTEzLjEgMTAuOC0yMS4xIDE0LjItMTYuNiA1LjEtMjUuOCA1LjEtMTcuOC0xLjctMjUuOC01LjEtMTUuMS04LjItMjEuMS0xNC4yLTEwLjgtMTMtMTQuMi0yMS4xYy0zLjQtOC01LjEtMTYuNi01LjEtMjUuOHMxLjctMTcuOCA1LjEtMjUuOCA4LjItMTUuMSAxNC4yLTIxLjEgMTMtOC40IDIxLjEtMTEuOWM4LTMuNCAxNi42LTUuMSAyNS44LTUuMXMxNy44IDEuNyAyNS44IDUuMSAxNS4xIDUuOCAyMS4xIDExLjljNiA2IDEwLjcgMTMuMSAxNC4yIDIxLjEgMy40IDggNS4xIDE2LjYgNS4xIDI1Ljh6bS0xNS41IDBjMC03LjMtMS4zLTE0LTMuOS0yMC4zcy02LjItMTEuNy0xMC44LTE2LjMtMTAtOC4yLTE2LjItMTAuOS0xMi44LTQtMTkuOC00LTEzLjYgMS4zLTE5LjggNC0xMS42IDYuMy0xNi4yIDEwLjktOC4yIDEwLTEwLjggMTYuMy0zLjkgMTMuMS0zLjkgMjAuM2MwIDcuMyAxLjMgMTQgMy45IDIwLjNzNi4yIDExLjcgMTAuOCAxNi4zIDEwIDguMiAxNi4yIDEwLjkgMTIuOCA0IDE5LjggNCAxMy42LTEuMyAxOS44LTQgMTEuNi02LjMgMTYuMi0xMC45IDguMi0xMCAxMC44LTE2LjMgMy45LTEzLjEgMy45LTIwLjN6bS05NC44IDk2LjdsMC02LjMgODguOS0xMC0yNDIuOSAxMy40Yy42LTIuMiAxLjEtNC42IDEuNC03LjIgLjMtMiAuNS00LjIgLjYtNi41bDY0LjgtOC4xLTY0LjkgMS45YzAtLjQtLjEtLjctLjEtMS4xLTIuOC0xNy4yLTI1LjUtMjMuNy0yNS41LTIzLjdsLTEuMS0yNi4zIDIzLjggMCAxOSA0MS44IDE3LjEgMC02Mi4yLTEzMS40LTYyLjIgMTMxLjQgMTcuMSAwIDE5LTQxLjggMjMuNiAwLTEuMSAyNi40cy0yMi43IDYuNS0yNS41IDIzLjdjLS4xIC4zLS4xIC43LS4xIDEuMWwtNjQuOS0xLjkgNjQuOCA4LjFjLjEgMi4zIC4zIDQuNCAuNiA2LjUgLjMgMi42IC44IDUgMS40IDcuMmwtMjQyLjktMTMuNSA4OC45IDEwIDAgNi4zYy01LjkgLjktMTAuNSA2LTEwLjUgMTIuMiAwIDYuOCA1LjYgMTIuNCAxMi40IDEyLjRzMTIuNC01LjYgMTIuNC0xMi40YzAtNi4yLTQuNi0xMS4zLTEwLjUtMTIuMmwwLTUuOCA4MC4zIDkgMCA1LjRjLTUuNyAxLjEtOS45IDYuMi05LjkgMTIuMSAwIDYuOCA1LjYgMTAuMiAxMi40IDEwLjJzMTIuNC0zLjQgMTIuNC0xMC4yYzAtNi00LjMtMTEtOS45LTEyLjFsMC00LjkgMjguNCAzLjIgMCAyMy43LTUuOSAwIDAgMTMuOSA1LjkgMCAwLTYuNiA1IDAgMCA2LjYgNS45IDAgMC0xMy44LTUuOSAwIDAtMjMuMiAzOC4zIDQuM2M4LjEgMTEuNCAxOSAxMy42IDE5IDEzLjZsLS4xIDYuNy01LjEgLjItLjEgMTIuMSA0LjEgMCAuMS01IDUuMiAwIC4xIDUgNC4xIDAtLjEtMTIuMS01LjEtLjItLjEtNi43czEwLjktMi4xIDE5LTEzLjZsMzguMy00LjMgMCAyMy4yLTUuOSAwIDAgMTMuOCA1LjkgMCAwLTYuNiA1IDAgMCA2LjYgNS45IDAgMC0xMy44LTUuOSAwIDAtMjMuNyAyOC40LTMuMiAwIDQuOWMtNS43IDEuMS05LjkgNi4yLTkuOSAxMi4xIDAgNi44IDUuNiAxMC4yIDEyLjQgMTAuMnMxMi40LTMuNCAxMi40LTEwLjJjMC02LTQuMy0xMS05LjktMTIuMWwwLTUuNCA4MC4zLTkgMCA1LjhjLTUuOSAuOS0xMC41IDYtMTAuNSAxMi4yIDAgNi44IDUuNiAxMi40IDEyLjQgMTIuNHMxMi40LTUuNiAxMi40LTEyLjRjLS4yLTYuMy00LjctMTEuNC0xMC43LTEyLjN6TTMyOC45IDIyNy45bDE5LjYtNDIuNSAxOS42IDQyLjUtMTcuOSAwLTEuNy00MC4zLTEuNyA0MC4zLTE3LjkgMHoiXQogICAgfTsKICAgIGZhUGFkbGV0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBhZGxldCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGEwIiwgIk0yOTcuOSAwbC4xIDBjNy42IC4xIDE0LjQgNC43IDE3LjUgMTEuOGwxMzIgMzA4LjUgLjMtLjEgLjIgLjQtMi44IDEwLTQyLjkgMTU4Yy0zLjcgMTYuMi0xOS43IDI2LjMtMzUuOCAyMi42bC02OC40LTE1LjYtNjguNSAxNS42Yy0xNi4xIDMuNy0zMi4xLTYuNC0zNS44LTIyLjZsLTQyLjktMTU4LTIuNy0xMCAuMS0uNCAxMzIuMS0zMDguNGMzLTcgOS45LTExLjYgMTcuNS0xMS44ek0xNjAuMSAzMjIuMWwxMzEgMzkuMSA2LjkgMTIyLjUgNy45LTEyMS41IDEzMC42LTM5LjMgLjItLjEtMTMxIDI1LjEtOC42LTMyMC4yLTUuMiAzMjAuMi0xMzEuOC0yNS44ek00MjYgMjIyLjZsOTQuNC00MSA3My44IDAtMTU3IDI0Ny42IDMxLjYtMTA5LTQyLjgtOTcuNnptMTcxLjUtNDEuMmw0MS40IDc2LjJjNCA3LjUtMy45IDE1LjktMTEuNiAxMi4ybC00Ny42LTIyLjcgMTcuOC02NS43ek0xMjcuMyAzMTguNUwxNTguNyA0MzAgMS42IDE1NC41Yy01LjktMTAuNCA1LjUtMjIgMTUuOS0xNi4ybDE1MS44IDg0LjItNDIuMSA5NnoiXQogICAgfTsKICAgIGZhRWRnZUxlZ2FjeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlZGdlLWxlZ2FjeSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMDc4IiwgIk0tNiAyMjguMmwuNC0uNWMwIC4yIDAgLjMtLjEgLjVsLS4zIDB6bTQ2MC42IDE1LjVjMC00NC03LjgtODQuNS0yOC44LTEyMi40LTQxLTczLjQtMTEzLjYtMTEzLjMtMTk4LjYtMTEzLjMtMTM5LjktLjMtMjE4LjMgMTA1LjItMjMyLjggMjE5LjcgNDIuNC02MS4zIDExNy4xLTEyMS40IDIyMC40LTEyNSAwIDAgMTA5LjcgMCA5OS40IDEwNWwtMTc1LjggMGM2LjQtMzcuNCAxOC41LTU5IDM0LjMtNzguOS03NSAzNC45LTEyMS44IDk2LjEtMTIwLjggMTg4LjMgLjggNzEuNSA1MC4xIDE0NC44IDEyMC44IDE3MiA4My40IDMxLjggMTkyLjggNy4yIDI0MC4xLTIxLjNsMC0xMDQuNGMtODAuOSA1Ni41LTI3MC45IDYwLjktMjcyLjMtNjcuNmwzMTQuMSAwIDAtNTIuMXoiXQogICAgfTsKICAgIGZhU3F1YXJlTGFzdGZtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1sYXN0Zm0iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsibGFzdGZtLXNxdWFyZSJdLCAiZjIwMyIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTIxMC43IDI4MC44Yy0xLjgtNS41LTMuNC0xMC44LTUtMTUuOS0xMi45LTQxLjktMjEtNjguNC01OC02OC40LTIyLjQgMC00NS4xIDE2LjEtNDUuMSA2MS4yIDAgMzUuMiAxOCA1Ny4yIDQzLjMgNTcuMiAyOC42IDAgNDcuNi0yMS4zIDQ3LjYtMjEuM2wxMS43IDMxLjlzLTE5LjggMTkuNC02MS4yIDE5LjRjLTUxLjMgMC03OS45LTMwLjEtNzkuOS04NS44IDAtNTcuOSAyOC42LTkyIDgyLjUtOTIgNjcuOSAwIDc5LjMgMzUuMyA5Ni40IDg4LjQgMS40IDQuNCAyLjkgOC45IDQuNCAxMy41IDguOCAyNi44IDI0LjIgNDYuMiA2MS4yIDQ2LjIgMjQuOSAwIDM4LjEtNS41IDM4LjEtMTkuMSAwLTE3LjUtMTYuOS0yMS4yLTQwLTI2LjQtMy4yLS43LTYuNS0xLjQtOS45LTIuMi0zMC40LTcuMy00Mi41LTIzLjEtNDIuNS00OCAwLTQwIDMyLjMtNTIuNCA2NS4yLTUyLjQgMzcuNCAwIDYwLjEgMTMuNiA2MyA0Ni42bC0zNi43IDQuNGMtMS41LTE1LjgtMTEtMjIuNC0yOC42LTIyLjQtMTYuMSAwLTI2IDcuMy0yNiAxOS44IDAgMTEgNC44IDE3LjYgMjAuOSAyMS4zIDIuMiAuNSA0LjUgMSA2LjcgMS40IDMxLjEgNi41IDY1LjEgMTMuNyA2NS4xIDU2LjEgLjEgMzYuNy0zMC43IDUwLjYtNzYuMSA1MC42LTYzLjQgMC04NS40LTI4LjYtOTcuMS02NC4xeiJdCiAgICB9OwogICAgZmFMYXN0Zm1TcXVhcmUgPSBmYVNxdWFyZUxhc3RmbTsKICAgIGZhR29vZHJlYWRzRyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnb29kcmVhZHMtZyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmM2E5IiwgIk0xMC44IDQwMy4zbDIuOCAwYzEyLjcgMCAyNS41IDAgMzguMiAuMSAxLjYgMCAzLjEtLjQgMy42IDIuMSA3LjEgMzQuOSAzMCA1NC42IDYyLjkgNjMuOSAyNi45IDcuNiA1NC4xIDcuOCA4MS4zIDEuOCAzMy44LTcuNCA1Ni0yOC4zIDY4LTYwLjQgOC0yMS41IDEwLjctNDMuOCAxMS02Ni41IC4xLTUuOCAuMy00Ny0uMi01Mi44bC0uOS0uM2MtLjggMS41LTEuNyAyLjktMi41IDQuNC0yMi4xIDQzLjEtNjEuMyA2Ny40LTEwNS40IDY5LjEtMTAzIDQtMTY5LjQtNTctMTcyLTE3Ni4yLS41LTIzLjcgMS44LTQ2LjkgOC4zLTY5LjcgMjAuNi03MS4xIDc0LjYtMTE4LjIgMTUzLjktMTE4LjggNjEuMy0uNCAxMDEuNSAzOC43IDExNi4yIDcwLjMgLjUgMS4xIDEuMyAyLjMgMi40IDEuOWwwLTYxLjYgNDQuMyAwYzAgMjgwLjMgLjEgMzMyLjIgLjEgMzMyLjItLjEgNzguNS0yNi43IDE0My43LTEwMyAxNjIuMi02OS41IDE2LjktMTU5IDQuOC0xOTYtNTcuMi04LTEzLjUtMTEuOC0yOC4zLTEzLTQ0LjV6TTE1Ny4xIDM2LjVjLTUyLjUtLjUtMTA4LjUgNDAuNy0xMTUgMTMzLjgtNC4xIDU5IDE0LjggMTIyLjIgNzEuNSAxNDguNiAyNy42IDEyLjkgNzQuMyAxNSAxMDguMy04LjcgNDcuNi0zMy4yIDYyLjctOTcgNTQuOC0xNTQtOS43LTcxLjEtNDcuOC0xMjAtMTE5LjYtMTE5Ljd6Il0KICAgIH07CiAgICBmYUNjTWFzdGVyY2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYy1tYXN0ZXJjYXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxZjEiLCAiTTQ4Mi45IDQxMC4zYzAgNi44LTQuNiAxMS43LTExLjIgMTEuNy02LjggMC0xMS4yLTUuMi0xMS4yLTExLjdzNC40LTExLjcgMTEuMi0xMS43YzYuNiAwIDExLjIgNS4yIDExLjIgMTEuN3pNMTcyLjEgMzk4LjZjLTcuMSAwLTExLjIgNS4yLTExLjIgMTEuN1MxNjUgNDIyIDE3Mi4xIDQyMmM2LjUgMCAxMC45LTQuOSAxMC45LTExLjctLjEtNi41LTQuNC0xMS43LTEwLjktMTEuN3ptMTE3LjUtLjNjLTUuNCAwLTguNyAzLjUtOS41IDguN2wxOS4xIDBjLS45LTUuNy00LjQtOC43LTkuNi04Ljd6bTEwNy44IC4zYy02LjggMC0xMC45IDUuMi0xMC45IDExLjdzNC4xIDExLjcgMTAuOSAxMS43IDExLjItNC45IDExLjItMTEuN2MwLTYuNS00LjQtMTEuNy0xMS4yLTExLjd6bTEwNS45IDI2LjFjMCAuMyAuMyAuNSAuMyAxLjEgMCAuMy0uMyAuNS0uMyAxLjEtLjMgLjMtLjMgLjUtLjUgLjgtLjMgLjMtLjUgLjUtMS4xIC41LS4zIC4zLS41IC4zLTEuMSAuMy0uMyAwLS41IDAtMS4xLS4zLS4zIDAtLjUtLjMtLjgtLjUtLjMtLjMtLjUtLjUtLjUtLjgtLjMtLjUtLjMtLjgtLjMtMS4xIDAtLjUgMC0uOCAuMy0xLjEgMC0uNSAuMy0uOCAuNS0xLjEgLjMtLjMgLjUtLjMgLjgtLjUgLjUtLjMgLjgtLjMgMS4xLS4zIC41IDAgLjggMCAxLjEgLjMgLjUgLjMgLjggLjMgMS4xIC41cy4yIC42IC41IDEuMXptLTIuMiAxLjRjLjUgMCAuNS0uMyAuOC0uMyAuMy0uMyAuMy0uNSAuMy0uOHMwLS41LS4zLS44Yy0uMyAwLS41LS4zLTEuMS0uM2wtMS42IDAgMCAzLjUgLjggMCAwLTEuNCAuMyAwIDEuMSAxLjQgLjggMC0xLjEtMS4zek01NzYgODFsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgxYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgxQzAgNTQuNSAyMS41IDMzIDQ4IDMzbDQ4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek02NCAyMjAuNmMwIDc2LjUgNjIuMSAxMzguNSAxMzguNSAxMzguNSAyNy4yIDAgNTMuOS04LjIgNzYuNS0yMy4xLTcyLjktNTkuMy03Mi40LTE3MS4yIDAtMjMwLjUtMjIuNi0xNS00OS4zLTIzLjEtNzYuNS0yMy4xLTc2LjQtLjEtMTM4LjUgNjItMTM4LjUgMTM4LjJ6TTI4OCAzMjkuNGM3MC41LTU1IDcwLjItMTYyLjIgMC0yMTcuNS03MC4yIDU1LjMtNzAuNSAxNjIuNiAwIDIxNy41ek0xNDUuNyA0MDUuN2MwLTguNy01LjctMTQuNC0xNC43LTE0LjctNC42IDAtOS41IDEuNC0xMi44IDYuNS0yLjQtNC4xLTYuNS02LjUtMTIuMi02LjUtMy44IDAtNy42IDEuNC0xMC42IDUuNGwwLTQuNC04LjIgMCAwIDM2LjcgOC4yIDBjMC0xOC45LTIuNS0zMC4yIDktMzAuMiAxMC4yIDAgOC4yIDEwLjIgOC4yIDMwLjJsNy45IDBjMC0xOC4zLTIuNS0zMC4yIDktMzAuMiAxMC4yIDAgOC4yIDEwIDguMiAzMC4ybDguMiAwIDAtMjMtLjIgMHpNMTkwLjYgMzkybC03LjkgMCAwIDQuNGMtMi43LTMuMy02LjUtNS40LTExLjctNS40LTEwLjMgMC0xOC4yIDguMi0xOC4yIDE5LjMgMCAxMS4yIDcuOSAxOS4zIDE4LjIgMTkuMyA1LjIgMCA5LTEuOSAxMS43LTUuNGwwIDQuNiA3LjkgMCAwLTM2Ljh6bTQwLjUgMjUuNmMwLTE1LTIyLjktOC4yLTIyLjktMTUuMiAwLTUuNyAxMS45LTQuOCAxOC41LTEuMWwzLjMtNi41Yy05LjQtNi4xLTMwLjItNi0zMC4yIDguMiAwIDE0LjMgMjIuOSA4LjMgMjIuOSAxNSAwIDYuMy0xMy41IDUuOC0yMC43IC44bC0zLjUgNi4zYzExLjIgNy42IDMyLjYgNiAzMi42LTcuNXptMzUuNCA5LjNsLTIuMi02LjhjLTMuOCAyLjEtMTIuMiA0LjQtMTIuMi00LjFsMC0xNi42IDEzLjEgMCAwLTcuNC0xMy4xIDAgMC0xMS4yLTguMiAwIDAgMTEuMi03LjYgMCAwIDcuMyA3LjYgMCAwIDE2LjdjMCAxNy42IDE3LjMgMTQuNCAyMi42IDEwLjl6bTEzLjMtMTMuNGwyNy41IDBjMC0xNi4yLTcuNC0yMi42LTE3LjQtMjIuNi0xMC42IDAtMTguMiA3LjktMTguMiAxOS4zIDAgMjAuNSAyMi42IDIzLjkgMzMuOCAxNC4ybC0zLjgtNmMtNy44IDYuNC0xOS42IDUuOC0yMS45LTQuOXpNMzM4LjkgMzkyYy00LjYtMi0xMS42LTEuOC0xNS4yIDQuNGwwLTQuNC04LjIgMCAwIDM2LjcgOC4yIDAgMC0yMC43YzAtMTEuNiA5LjUtMTAuMSAxMi44LTguNGwyLjQtNy42em0xMC42IDE4LjNjMC0xMS40IDExLjYtMTUuMSAyMC43LTguNGwzLjgtNi41Yy0xMS42LTkuMS0zMi43LTQuMS0zMi43IDE1IDAgMTkuOCAyMi40IDIzLjggMzIuNyAxNWwtMy44LTYuNWMtOS4yIDYuNS0yMC43IDIuNi0yMC43LTguNnpNNDE2LjIgMzkybC04LjIgMCAwIDQuNGMtOC4zLTExLTI5LjktNC44LTI5LjkgMTMuOSAwIDE5LjIgMjIuNCAyNC43IDI5LjkgMTMuOWwwIDQuNiA4LjIgMCAwLTM2Ljh6bTMzLjcgMGMtMi40LTEuMi0xMS0yLjktMTUuMiA0LjRsMC00LjQtNy45IDAgMCAzNi43IDcuOSAwIDAtMjAuN2MwLTExIDktMTAuMyAxMi44LTguNGwyLjQtNy42em00MC4zLTE0LjlsLTcuOSAwIDAgMTkuM2MtOC4yLTEwLjktMjkuOS01LjEtMjkuOSAxMy45IDAgMTkuNCAyMi41IDI0LjYgMjkuOSAxMy45bDAgNC42IDcuOSAwIDAtNTEuN3ptNy42LTc1LjFsMCA0LjYgLjggMCAwLTQuNiAxLjkgMCAwLS44LTQuNiAwIDAgLjggMS45IDB6bTYuNiAxMjMuOGMwLS41IDAtMS4xLS4zLTEuNi0uMy0uMy0uNS0uOC0uOC0xLjFzLS44LS41LTEuMS0uOGMtLjUgMC0xLjEtLjMtMS42LS4zLS4zIDAtLjggLjMtMS40IC4zLS41IC4zLS44IC41LTEuMSAuOC0uNSAuMy0uOCAuOC0uOCAxLjEtLjMgLjUtLjMgMS4xLS4zIDEuNiAwIC4zIDAgLjggLjMgMS40IDAgLjMgLjMgLjggLjggMS4xIC4zIC4zIC41IC41IDEuMSAuOCAuNSAuMyAxLjEgLjMgMS40IC4zIC41IDAgMS4xIDAgMS42LS4zIC4zLS4zIC44LS41IDEuMS0uOHMuNS0uOCAuOC0xLjFjLjMtLjYgLjMtMS4xIC4zLTEuNHptMy4yLTEyNC43bC0xLjQgMC0xLjYgMy41LTEuNi0zLjUtMS40IDAgMCA1LjQgLjggMCAwLTQuMSAxLjYgMy41IDEuMSAwIDEuNC0zLjUgMCA0LjEgMS4xIDAgMC01LjR6bTQuNC04MC41YzAtNzYuMi02Mi4xLTEzOC4zLTEzOC41LTEzOC4zLTI3LjIgMC01My45IDguMi03Ni41IDIzLjEgNzIuMSA1OS4zIDczLjIgMTcxLjUgMCAyMzAuNSAyMi42IDE1IDQ5LjUgMjMuMSA3Ni41IDIzLjEgNzYuNCAuMSAxMzguNS02MS45IDEzOC41LTEzOC40eiJdCiAgICB9OwogICAgZmFEaXNjb3Vyc2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGlzY291cnNlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzOTMiLCAiTTIyNS45IDMyQzEwMy4zIDMyIDAgMTMwLjUgMCAyNTIuMSAwIDI1NiAuMSA0ODAgLjEgNDgwbDIyNS44LS4yQzM0OC42IDQ3OS44IDQ0OCAzNzcuNSA0NDggMjU1LjlTMzQ4LjYgMzIgMjI1LjkgMzJ6TTIyNCAzODRjLTE5LjQgMC0zNy45LTQuMy01NC40LTEyLjFMODguNSAzOTIgMTExLjQgMzE3Yy05LjgtMTguMS0xNS40LTM4LjktMTUuNC02MSAwLTcwLjcgNTcuMy0xMjggMTI4LTEyOHMxMjggNTcuMyAxMjggMTI4LTU3LjMgMTI4LTEyOCAxMjh6Il0KICAgIH07CiAgICBmYUJsYWNrVGllID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJsYWNrLXRpZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjdlIiwgIk0wIDMybDAgNDQ4IDQ0OCAwIDAtNDQ4LTQ0OCAwek0zMTYuNSAzNTcuMmwtOTIuNSA4OC43LTkyLjUtODguNyA2NC41LTE4NC02NC41LTg2LjYgMTg0LjkgMC02NC40IDg2LjYgNjQuNSAxODR6Il0KICAgIH07CiAgICBmYVNxdWFyZUZhY2Vib29rID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1mYWNlYm9vayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJmYWNlYm9vay1zcXVhcmUiXSwgImYwODIiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsOTguMiAwIDAtMTQ1LjgtNTIuOCAwIDAtNzguMiA1Mi44IDAgMC0zMy43YzAtODcuMSAzOS40LTEyNy41IDEyNS0xMjcuNSAxNi4yIDAgNDQuMiAzLjIgNTUuNyA2LjRsMCA3MC44Yy02LS42LTE2LjUtMS0yOS42LTEtNDIgMC01OC4yIDE1LjktNTguMiA1Ny4ybDAgMjcuOCA4My42IDAtMTQuNCA3OC4yLTY5LjMgMCAwIDE0NS44IDEyOSAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyeiJdCiAgICB9OwogICAgZmFGYWNlYm9va1NxdWFyZSA9IGZhU3F1YXJlRmFjZWJvb2s7CiAgICBmYUJhdHRsZU5ldCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJiYXR0bGUtbmV0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4MzUiLCAiTTQ0OC44IDIyNS42YzI2LjkgLjIgMzUuNi03LjQgMzguOS0xMi40IDEyLjUtMTYuMy03LjEtNDcuNi01Mi44LTcxLjMgMTcuOC0zMy42IDMwLjEtNjMuNyAzNi4zLTg1LjMgMy40LTExLjggMS4xLTE5IC41LTIwLjMtMS43IDEwLjUtMTUuOCA0OC41LTQ4LjIgMTAwLTI1LTExLjItNTYuNS0yMC4xLTkzLjgtMjMuOC04LjktMTYuOS0zNC45LTYzLjktNjAuNS04OC45LTE2LjgtMTYuNS0zMC4zLTIyLjYtNDAuOC0yMy41bDAgMGMtMTMuOC0xLjYtMjIuNyA1LjgtMjcuNCAxMS0xNy4yIDE4LjUtMjQuMyA0OC45LTI1IDg0LjEtNy4yLTEyLjMtMTcuMi0yNC42LTI4LjUtMjUuOWwtLjIgMGMtMjAuNy0zLjUtMzguNCAyOS4yLTM2IDgxLjMtMzguNCAxLjQtNzEgNS44LTkzIDExLjItOS45IDIuNC0xNi4yIDcuMy0xNy44IDkuNyAxLS40IDIyLjQtOS4yIDExMS42LTkuMiA1LjIgNTMgMjkuOCAxMDEuOCAyNiA5My4yLTkuNyAxNS40LTM4LjIgNjIuNC00Ny4zIDk3LjctNS45IDIyLjktNC40IDM3LjYgLjIgNDcuMSA1LjYgMTIuOCAxNi40IDE2LjcgMjMuMiAxOC4zIDI1IDUuNyA1NS40LTMuNiA4Ni43LTIxLjEtNy41IDEyLjgtMTMuOSAyOC41LTkuMSAzOS4zIDcuMyAxOS42IDQ0LjUgMTguNyA4OC40LTkuNCAyMC4yIDMyLjIgNDAuMSA1Ny45IDU1LjcgNzQuMSAyLjYgMi44IDUuNSA1LjIgOC44IDcuMSA1LjEgMy4yIDguNiAzLjQgOC42IDMuNC04LjItNi43LTM0LTM4LTYyLjUtOTEuOCAyMi4yLTE2IDQ1LjctMzguOSA2Ny41LTY5LjMgMTIyLjggNC42IDE0My4zLTI0LjggMTQ4LTMxLjYgMTQuNy0xOS45IDMuNC01Ny40LTU3LjMtOTMuN3pNMzcxIDMzMS44YzIzLjgtMzcuNyAzMC4zLTY3LjggMjkuNC05Mi4zIDI3LjkgMTcuNiA0Ny4yIDM3LjYgNDkuMSA1OC44IDEuMSAxMi45LTguMSAyOS4xLTc4LjUgMzMuNXpNMjE3LjEgMzg3LjdjOS44LTYuMiAxOS41LTEzLjEgMjkuMi0yMC41IDYuNyAxMy4zIDEzLjYgMjYuMSAyMC42IDM4LjItNDAuNiAyMS45LTY4LjggMTIuOC00OS44LTE3Ljd6bTIxNS0xNzEuM2MtMTAuMy01LjMtMjEuMi0xMC4zLTMyLjQtMTUgNy45LTEyLjEgMTUuNS0yNC40IDIyLjctMzYuOSAzOS4xIDI0LjEgNDUuOSA1My4yIDkuNiA1MS45ek0yNzkuNCAzOThjLTUuNS0xMS40LTExLTIzLjUtMTYuNS0zNi40IDQzLjIgMS4zIDYyLjQtMTguNyA2My4zLTIwLjQgMCAuMS0yNSAxNS42LTYyLjUgMTIuMiAzMC42LTI1LjYgNTkuMS01My43IDg1LjEtODQgOC43LTEwLjIgMTctMjAuNiAyNC45LTMxLjEtLjQtLjMtMS41LTMtMTYuNS0xMi01MS43IDYwLjMtMTAyLjMgOTgtMTMyLjggMTE1LjktMjAuNi0xMS4yLTQwLjgtMzEuOC01NS43LTYxLjUtMjAtMzkuOS0zMC04Mi40LTMxLjYtMTE2LjEgMTIuMyAuOSAyNS4zIDIuMiAzOC44IDMuOS0yMi4zIDM2LjgtMTQuNCA2My0xMy41IDY0LjIgMC0uMS0xLTI5LjIgMjAuMS01OS42IDkgNTIuNSAyNCAxMDMuOCA0NC43IDE1Mi44IC45LS40IDEuOCAuOSAxOC43LTguMi0yNi4zLTc0LjUtMzMuOC0xMzguMi0zNC0xNzMuNCAyMC0xMi40IDQ4LjItMTkuOCA4MS42LTE3LjggNDQuNiAyLjcgODYuNCAxNS4yIDExNi4zIDMwLjctNy4xIDEwLjQtMTQuOSAyMS4zLTIzLjMgMzIuNS0yMC43LTM3LjctNDcuMy00My45LTQ4LjktNDMuNyAuMSAwIDI1LjkgMTQuMSA0MS41IDQ3LjItMzcuNS0xMy44LTc2LjEtMjQuNC0xMTUuMy0zMS43LTEzLjEtMi40LTI2LjItNC40LTM5LjQtNi0uMSAuNC0xLjggMS44LTIuMiAyMC4zIDc3LjkgMTQuNSAxMzYuNiAzOS45IDE2Ny4yIDU3LjIgLjcgMjMuNi03IDUxLjYtMjUuNCA3OS42LTI0LjYgMzcuMy01Ni40IDY3LjItODQuOCA4NS40em0yNy40LTI4N2MtNDQuNi0xLjctNzMuNiA3LjQtOTQuNyAyMC43IDItNTIuMyAyMS4zLTc2LjQgMzguMi03NS4zIDE2LjktNC4yIDU0LjkgNTIuMiA1Ni41IDU0LjZ6bS0xMzAuNyAzLjFjLjUgMTIuMSAxLjYgMjQuNiAzLjIgMzcuMy0xNC42LS45LTI4LjctMS4zLTQyLjQtMS4zLS4xIDMuMi0uMS01MSAyNC43LTQ5LjZsLjEgMGM1LjggMS4xIDEwLjYgNi45IDE0LjQgMTMuNnptLTI4LjEgMTYyYzIwLjggMzkuNyA0My4zIDYwLjYgNjUuMyA3Mi4zLTQ2LjggMjQuOC03Ny41IDIwLTg0LjkgNC41LS4yLS4yLTExLjEtMTUuMyAxOS43LTc2LjhsMCAweiJdCiAgICB9OwogICAgZmFCaW1vYmplY3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmltb2JqZWN0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzNzgiLCAiTTQxNiAzMkwzMiAzMkMxNC40IDMyIDAgNDYuNCAwIDY0TDAgNDQ4YzAgMTcuNiAxNC40IDMyIDMyIDMybDM4NCAwYzE3LjYgMCAzMi0xNC40IDMyLTMybDAtMzg0YzAtMTcuNi0xNC40LTMyLTMyLTMyek0zNTIgMjg5LjRjMCA0OS40LTExLjQgODIuNi0xMDMuOCA4Mi42bC0xNi45IDBjLTQ0LjEgMC02Mi40LTE0LjktNzAuNC0zOC44bC0uOSAwIDAgMzQuOC02NCAwIDAtMjMyIDY0IDAgMCA3NC43IDEuMSAwYzQuNi0zMC41IDM5LjctMzguOCA2OS43LTM4LjhsMTcuMyAwYzkyLjQgMCAxMDMuOCAzMy4xIDEwMy44IDgyLjVsMCAzNSAuMSAwem0tNjQtMjguOWwwIDIyLjljMCAyMS43LTMuNCAzMy44LTM4LjQgMzMuOGwtNDUuMyAwYy0yOC45IDAtNDQuMS02LjUtNDQuMS0zNS43bDAtMTljMC0yOS4zIDE1LjItMzUuNyA0NC4xLTM1LjdsNDUuMyAwYzM1LS4yIDM4LjQgMTIgMzguNCAzMy43eiJdCiAgICB9OwogICAgaWNvbnMgPSB7CiAgICAgIGZhU3F1YXJlR2l0aHViLAogICAgICBmYUdpdGh1YlNxdWFyZSwKICAgICAgZmFUaGlua1BlYWtzLAogICAgICBmYUdvb2dsZURyaXZlLAogICAgICBmYUF1dG9wcmVmaXhlciwKICAgICAgZmFTcXVhcmVWaWFkZW8sCiAgICAgIGZhVmlhZGVvU3F1YXJlLAogICAgICBmYUNwYW5lbCwKICAgICAgZmFNZW5kZWxleSwKICAgICAgZmFEcmFmdDJkaWdpdGFsLAogICAgICBmYVJlcGx5ZCwKICAgICAgZmFFbXBpcmUsCiAgICAgIGZhQWNjZXNzaWJsZUljb24sCiAgICAgIGZhUXVvcmEsCiAgICAgIGZhQ2NKY2IsCiAgICAgIGZhRmVkb3JhLAogICAgICBmYUR1b2xpbmdvLAogICAgICBmYUZpcnN0ZHJhZnQsCiAgICAgIGZhRnJlZWJzZCwKICAgICAgZmFPZHlzZWUsCiAgICAgIGZhR2dDaXJjbGUsCiAgICAgIGZhQ2xvdWRmbGFyZSwKICAgICAgZmFIYWNrZXJyYW5rLAogICAgICBmYVNreWF0bGFzLAogICAgICBmYURlc2twcm8sCiAgICAgIGZhUmVzb2x2aW5nLAogICAgICBmYUJsYWNrYmVycnksCiAgICAgIGZhU3RyaXBlUywKICAgICAgZmFTcXVhcmVCZWhhbmNlLAogICAgICBmYUJlaGFuY2VTcXVhcmUsCiAgICAgIGZhU2VydmljZXN0YWNrLAogICAgICBmYVJvY2tldGNoYXQsCiAgICAgIGZhUmViZWwsCiAgICAgIGZhU3F1YXJlV2ViQXdlc29tZSwKICAgICAgZmFMaW5rdHJlZSwKICAgICAgZmFTaW1wbHlidWlsdCwKICAgICAgZmFTdHViYmVyLAogICAgICBmYUFwcGVyLAogICAgICBmYUdvb2dsZVNjaG9sYXIsCiAgICAgIGZhWWFybiwKICAgICAgZmFTdGFja092ZXJmbG93LAogICAgICBmYUJsdWV0b290aCwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNOY0pwLAogICAgICBmYVJlZGRpdCwKICAgICAgZmFDb25uZWN0ZGV2ZWxvcCwKICAgICAgZmFSZXNlYXJjaGdhdGUsCiAgICAgIGZhU2lnbmFsTWVzc2VuZ2VyLAogICAgICBmYVhpbmcsCiAgICAgIGZhU3F1YXJlSnMsCiAgICAgIGZhSnNTcXVhcmUsCiAgICAgIGZhRm9udGljb25zLAogICAgICBmYVVwcywKICAgICAgZmFBbWF6b25QYXksCiAgICAgIGZhUGFuZG9yYSwKICAgICAgZmFPcGVuaWQsCiAgICAgIGZhVnNjbywKICAgICAgZmFVYnVudHUsCiAgICAgIGZhVmlhY29pbiwKICAgICAgZmFaaGlodSwKICAgICAgZmFZYW5kZXgsCiAgICAgIGZhUGl4aXYsCiAgICAgIGZhT3BlbmFpLAogICAgICBmYVNpdGgsCiAgICAgIGZhTmZjRGlyZWN0aW9uYWwsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zQnksCiAgICAgIGZhVW1icmFjbywKICAgICAgZmFIb29saSwKICAgICAgZmFTcXVhcmVHaXQsCiAgICAgIGZhR2l0U3F1YXJlLAogICAgICBmYU9kbm9rbGFzc25pa2ksCiAgICAgIGZhRHJ1cGFsLAogICAgICBmYUJsb2dnZXJCLAogICAgICBmYUludmlzaW9uLAogICAgICBmYUZhY2Vib29rRiwKICAgICAgZmFDZW50b3MsCiAgICAgIGZhQ2NBbWF6b25QYXksCiAgICAgIGZhRWJheSwKICAgICAgZmFDb250YW8sCiAgICAgIGZhRWxsbywKICAgICAgZmFTaXN0cml4LAogICAgICBmYVBlcmlzY29wZSwKICAgICAgZmFFeHBlZGl0ZWRzc2wsCiAgICAgIGZhTmFwc3RlciwKICAgICAgZmFEZWxpY2lvdXMsCiAgICAgIGZhR3VpbGRlZCwKICAgICAgZmFYYm94LAogICAgICBmYVVudGFwcGQsCiAgICAgIGZhR29vZ2xlUGx1c0csCiAgICAgIGZhR2l0aHViQWx0LAogICAgICBmYUdldFBvY2tldCwKICAgICAgZmFHbGlkZSwKICAgICAgZmFCaXR5LAogICAgICBmYVdwZXhwbG9yZXIsCiAgICAgIGZhTWVnYXBvcnQsCiAgICAgIGZhTWRiLAogICAgICBmYVBhZ2U0LAogICAgICBmYVRoZVJlZFlldGksCiAgICAgIGZhSmlyYSwKICAgICAgZmFGZWRleCwKICAgICAgZmFFdmVybm90ZSwKICAgICAgZmFVc2IsCiAgICAgIGZhQW5ncnljcmVhdGl2ZSwKICAgICAgZmFNaXp1bmksCiAgICAgIGZhSXRjaElvLAogICAgICBmYVdpbmRvd3MsCiAgICAgIGZhU3R1bWJsZXVwb24sCiAgICAgIGZhR29vZ2xlLAogICAgICBmYURpc2NvcmQsCiAgICAgIGZhSGFja2VyTmV3cywKICAgICAgZmFFbGV2ZW50eSwKICAgICAgZmExMXR5LAogICAgICBmYVRlYW1zcGVhaywKICAgICAgZmFTdXBwbGUsCiAgICAgIGZhU3F1YXJlVHdpdHRlciwKICAgICAgZmFUd2l0dGVyU3F1YXJlLAogICAgICBmYUZvbnRBd2Vzb21lLAogICAgICBmYUZvbnRBd2Vzb21lRmxhZywKICAgICAgZmFGb250QXdlc29tZUxvZ29GdWxsLAogICAgICBmYVdpcnNpbmRoYW5kd2VyaywKICAgICAgZmFXc2gsCiAgICAgIGZhQ29uZmx1ZW5jZSwKICAgICAgZmFEaWdnLAogICAgICBmYVRocmVhZHMsCiAgICAgIGZhV3ByZXNzciwKICAgICAgZmFSZW5kYWN0LAogICAgICBmYVlvYXN0LAogICAgICBmYU5pbWJsciwKICAgICAgZmFQaXhlbGZlZCwKICAgICAgZmFZYWhvbywKICAgICAgZmFCbHVlc2t5LAogICAgICBmYVNjcmliZCwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNQZCwKICAgICAgZmFFYXJseWJpcmRzLAogICAgICBmYVNxdWFyZU9kbm9rbGFzc25pa2ksCiAgICAgIGZhT2Rub2tsYXNzbmlraVNxdWFyZSwKICAgICAgZmFNYXJrZG93biwKICAgICAgZmFUeXBvMywKICAgICAgZmFKb29tbGEsCiAgICAgIGZhV2VpeGluLAogICAgICBmYUdydW50LAogICAgICBmYVJvY2tybXMsCiAgICAgIGZhVW5zcGxhc2gsCiAgICAgIGZhU3F1YXJlSW5zdGFncmFtLAogICAgICBmYUluc3RhZ3JhbVNxdWFyZSwKICAgICAgZmFGaXJzdE9yZGVyQWx0LAogICAgICBmYUZ1bGNydW0sCiAgICAgIGZhQnJhdmVSZXZlcnNlLAogICAgICBmYUF2aWFuZXgsCiAgICAgIGZhTnM4LAogICAgICBmYVNxdWFyZVBpbnRlcmVzdCwKICAgICAgZmFQaW50ZXJlc3RTcXVhcmUsCiAgICAgIGZhQmx1ZXRvb3RoQiwKICAgICAgZmFHcmlwZmlyZSwKICAgICAgZmFTcXVhcmVHb29nbGVQbHVzLAogICAgICBmYUdvb2dsZVBsdXNTcXVhcmUsCiAgICAgIGZhQXBwU3RvcmUsCiAgICAgIGZhV2l4LAogICAgICBmYUludGVyY29tLAogICAgICBmYVJlYWN0ZXVyb3BlLAogICAgICBmYVdhemUsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zUmVtaXgsCiAgICAgIGZhQmFuZGNhbXAsCiAgICAgIGZhU3F1YXJlV2ViQXdlc29tZVN0cm9rZSwKICAgICAgZmFWaW1lb1YsCiAgICAgIGZhU3RyYXZhLAogICAgICBmYVVuaXJlZ2lzdHJ5LAogICAgICBmYUNjRGluZXJzQ2x1YiwKICAgICAgZmFQaW50ZXJlc3QsCiAgICAgIGZhQWxnb2xpYSwKICAgICAgZmFTdGFja3BhdGgsCiAgICAgIGZhT2N0b3B1c0RlcGxveSwKICAgICAgZmFZYW1tZXIsCiAgICAgIGZhTW9keCwKICAgICAgZmFTcXVhcmVUaHJlYWRzLAogICAgICBmYU9sZFJlcHVibGljLAogICAgICBmYVN1c2UsCiAgICAgIGZhQXBwU3RvcmVJb3MsCiAgICAgIGZhU3F1YXJlRHJpYmJibGUsCiAgICAgIGZhRHJpYmJibGVTcXVhcmUsCiAgICAgIGZhVWlraXQsCiAgICAgIGZhU3VwZXJwb3dlcnMsCiAgICAgIGZhWW91dHViZSwKICAgICAgZmFFbWJlciwKICAgICAgZmFCb290c3RyYXAsCiAgICAgIGZhSXR1bmVzLAogICAgICBmYVNxdWFyZVhpbmcsCiAgICAgIGZhWGluZ1NxdWFyZSwKICAgICAgZmFDc3MzQWx0LAogICAgICBmYVNxdWFyZXNwYWNlLAogICAgICBmYVRyZWxsbywKICAgICAgZmFWaWFkZW8sCiAgICAgIGZhU2VhcmNoZW5naW4sCiAgICAgIGZhUGF5cGFsLAogICAgICBmYVNxdWFyZUJsdWVza3ksCiAgICAgIGZhREFuZERCZXlvbmQsCiAgICAgIGZhTWljcm9zb2Z0LAogICAgICBmYUZseSwKICAgICAgZmFDY1N0cmlwZSwKICAgICAgZmFXb3JkcHJlc3NTaW1wbGUsCiAgICAgIGZhU2VsbHN5LAogICAgICBmYURhc2hjdWJlLAogICAgICBmYUdpdHRlciwKICAgICAgZmFXb2xmUGFja0JhdHRhbGlvbiwKICAgICAgZmFMYXN0Zm0sCiAgICAgIGZhU2hvcHdhcmUsCiAgICAgIGZhQmxvZ2dlciwKICAgICAgZmFFZGdlLAogICAgICBmYUlveGhvc3QsCiAgICAgIGZhU2NobGl4LAogICAgICBmYURBbmRELAogICAgICBmYVZ1ZWpzLAogICAgICBmYU1ldGEsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zU2hhcmUsCiAgICAgIGZhU3R1ZGlvdmluYXJpLAogICAgICBmYUJpdGJ1Y2tldCwKICAgICAgZmFWaywKICAgICAgZmFHaXRodWIsCiAgICAgIGZhQ29kaWVwaWUsCiAgICAgIGZhUGllZFBpcGVyLAogICAgICBmYVJhc3BiZXJyeVBpLAogICAgICBmYUNzczMsCiAgICAgIGZhSHVic3BvdCwKICAgICAgZmFDbXBsaWQsCiAgICAgIGZhRHlhbG9nLAogICAgICBmYUVsZW1lbnRvciwKICAgICAgZmFGaXJzdE9yZGVyLAogICAgICBmYURyaWJiYmxlLAogICAgICBmYUxpbmtlZGluLAogICAgICBmYUNjUGF5cGFsLAogICAgICBmYURobCwKICAgICAgZmFUZXgsCiAgICAgIGZhU2hvcGlmeSwKICAgICAgZmFTcXVhcmVSZWRkaXQsCiAgICAgIGZhUmVkZGl0U3F1YXJlLAogICAgICBmYUNyZWF0aXZlQ29tbW9uc05jLAogICAgICBmYUdhbGFjdGljUmVwdWJsaWMsCiAgICAgIGZhRmFjZWJvb2ssCiAgICAgIGZhR2l0bGFiLAogICAgICBmYVFxLAogICAgICBmYVN0cmlwZSwKICAgICAgZmFEYWlseW1vdGlvbiwKICAgICAgZmFTdGVhbSwKICAgICAgZmFTbmFwY2hhdCwKICAgICAgZmFTbmFwY2hhdEdob3N0LAogICAgICBmYUdhbGFjdGljU2VuYXRlLAogICAgICBmYVBob2VuaXhGcmFtZXdvcmssCiAgICAgIGZhR2l0LAogICAgICBmYU9wdGluTW9uc3RlciwKICAgICAgZmFKZW5raW5zLAogICAgICBmYVNsaWRlc2hhcmUsCiAgICAgIGZhVWJlciwKICAgICAgZmFEaWdpdGFsT2NlYW4sCiAgICAgIGZhU291bmRjbG91ZCwKICAgICAgZmFTcXVhcmVGaWdtYSwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNTYSwKICAgICAgZmFDaHJvbWUsCiAgICAgIGZhVHJhZGVGZWRlcmF0aW9uLAogICAgICBmYVZhYWRpbiwKICAgICAgZmFEZXZpYW50YXJ0LAogICAgICBmYU1lZGl1bSwKICAgICAgZmFNZWRpdW1NLAogICAgICBmYU9wZW5jYXJ0LAogICAgICBmYVlDb21iaW5hdG9yLAogICAgICBmYUxpbmUsCiAgICAgIGZhQW1pbGlhLAogICAgICBmYUFzeW1tZXRyaWssCiAgICAgIGZhUGhhYnJpY2F0b3IsCiAgICAgIGZhQm90cywKICAgICAgZmFWaW5lLAogICAgICBmYU1lZHJ0LAogICAgICBmYU9zaSwKICAgICAgZmFHZywKICAgICAgZmFCdXlzZWxsYWRzLAogICAgICBmYUdvb2dsZVBsdXMsCiAgICAgIGZhU2NyZWVucGFsLAogICAgICBmYUJpdGNvaW4sCiAgICAgIGZhU3dpZnQsCiAgICAgIGZhRmlsZXNQaW53aGVlbCwKICAgICAgZmFMYXJhdmVsLAogICAgICBmYVdwZm9ybXMsCiAgICAgIGZhU3BlYWtlckRlY2ssCiAgICAgIGZhRmxpY2tyLAogICAgICBmYUNjVmlzYSwKICAgICAgZmFVcHdvcmssCiAgICAgIGZhS2FrYW9UYWxrLAogICAgICBmYUZsdXR0ZXIsCiAgICAgIGZhQnVmZmVyLAogICAgICBmYUdyYXRpcGF5LAogICAgICBmYUdvb2dsZVBheSwKICAgICAgZmFBcHBsZSwKICAgICAgZmFUdW1ibHIsCiAgICAgIGZhUGhvZW5peFNxdWFkcm9uLAogICAgICBmYUNlbnRlcmNvZGUsCiAgICAgIGZhRGViaWFuLAogICAgICBmYU1hc3RvZG9uLAogICAgICBmYVNrZXRjaCwKICAgICAgZmFXZWJBd2Vzb21lLAogICAgICBmYVNhc3MsCiAgICAgIGZhU3F1YXJlV2hhdHNhcHAsCiAgICAgIGZhV2hhdHNhcHBTcXVhcmUsCiAgICAgIGZhU2t5cGUsCiAgICAgIGZhQW5ndWxhciwKICAgICAgZmFPcGVuc3VzZSwKICAgICAgZmFEcm9wYm94LAogICAgICBmYURlZXplciwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNTYW1wbGluZywKICAgICAgZmFKZWRpT3JkZXIsCiAgICAgIGZhUlByb2plY3QsCiAgICAgIGZhSW5zdGFsb2QsCiAgICAgIGZhQ2FuYWRpYW5NYXBsZUxlYWYsCiAgICAgIGZhRXRoZXJldW0sCiAgICAgIGZhSG91enosCiAgICAgIGZhVmliZXIsCiAgICAgIGZhS2lja3N0YXJ0ZXIsCiAgICAgIGZhU3F1YXJlS2lja3N0YXJ0ZXIsCiAgICAgIGZhU3BvdGlmeSwKICAgICAgZmFMZWFucHViLAogICAgICBmYUphdmEsCiAgICAgIGZhTmZjU3ltYm9sLAogICAgICBmYVdvZHUsCiAgICAgIGZhU3F1YXJlU3RlYW0sCiAgICAgIGZhU3RlYW1TcXVhcmUsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zTmNFdSwKICAgICAgZmFOcG0sCiAgICAgIGZhQ2xvdWRzY2FsZSwKICAgICAgZmFUaGVtZWNvLAogICAgICBmYUdvb2dsZVBsYXksCiAgICAgIGZhS29ydnVlLAogICAgICBmYVczYywKICAgICAgZmFHcmF2LAogICAgICBmYUF3cywKICAgICAgZmFHbGlkZUcsCiAgICAgIGZhSnNmaWRkbGUsCiAgICAgIGZhS2V5YmFzZSwKICAgICAgZmFMdW1vbkRyb3AsCiAgICAgIGZhV2VlYmx5LAogICAgICBmYURvY2tlciwKICAgICAgZmFNYWdlbnRvLAogICAgICBmYUdpdEFsdCwKICAgICAgZmFGaXJlZm94QnJvd3NlciwKICAgICAgZmFDbG91ZHNtaXRoLAogICAgICBmYVdpemFyZHNPZlRoZUNvYXN0LAogICAgICBmYUNyZWF0aXZlQ29tbW9uc05kLAogICAgICBmYVVzcHMsCiAgICAgIGZhU3F1YXJlTGV0dGVyYm94ZCwKICAgICAgZmFNYW5kYWxvcmlhbiwKICAgICAgZmFTbGFjaywKICAgICAgZmFTbGFja0hhc2gsCiAgICAgIGZhQW5nZWxsaXN0LAogICAgICBmYUFuZHJvaWQsCiAgICAgIGZhTWVldHVwLAogICAgICBmYUZvbnRpY29uc0ZpLAogICAgICBmYVBhbGZlZCwKICAgICAgZmFXcGJlZ2lubmVyLAogICAgICBmYURpYXNwb3JhLAogICAgICBmYVByb2R1Y3RIdW50LAogICAgICBmYVNxdWFyZVVwd29yaywKICAgICAgZmFDdXR0bGVmaXNoLAogICAgICBmYU1lZGFwcHMsCiAgICAgIGZhUGl4LAogICAgICBmYVNxdWFyZVR1bWJsciwKICAgICAgZmFUdW1ibHJTcXVhcmUsCiAgICAgIGZhUmVhY3QsCiAgICAgIGZhSnhsLAogICAgICBmYVNxdWFyZUxpbmtlZGluLAogICAgICBmYUNzcywKICAgICAgZmFIYXNobm9kZSwKICAgICAgZmFSZWRkaXRBbGllbiwKICAgICAgZmFUaWt0b2ssCiAgICAgIGZhV29yZHByZXNzLAogICAgICBmYUlkZWFsLAogICAgICBmYVBpZWRQaXBlclBwLAogICAgICBmYVVzc3VubmFoLAogICAgICBmYUZvcnRBd2Vzb21lQWx0LAogICAgICBmYUJ1cm9tb2JlbGV4cGVydGUsCiAgICAgIGZhQmlsaWJpbGksCiAgICAgIGZhTmVvcywKICAgICAgZmFEZXYsCiAgICAgIGZhSG90amFyLAogICAgICBmYURvY2h1YiwKICAgICAgZmFWaW1lbywKICAgICAgZmFNYXhjZG4sCiAgICAgIGZhU3F1YXJlRm9udEF3ZXNvbWVTdHJva2UsCiAgICAgIGZhRm9udEF3ZXNvbWVBbHQsCiAgICAgIGZhU3BlYWthcCwKICAgICAgZmFGYW50YXN5RmxpZ2h0R2FtZXMsCiAgICAgIGZhTGludXgsCiAgICAgIGZhQ290dG9uQnVyZWF1LAogICAgICBmYUdvb2dsZVdhbGxldCwKICAgICAgZmFGb3Vyc3F1YXJlLAogICAgICBmYVNoaXJ0c2luYnVsaywKICAgICAgZmFNaW50Yml0LAogICAgICBmYVN0YXlsaW5rZWQsCiAgICAgIGZhV2ViZmxvdywKICAgICAgZmFSZW5yZW4sCiAgICAgIGZhUmV2LAogICAgICBmYUtleWNkbiwKICAgICAgZmFIaXJlQUhlbHBlciwKICAgICAgZmFTcXVhcmVIYWNrZXJOZXdzLAogICAgICBmYUhhY2tlck5ld3NTcXVhcmUsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zUGRBbHQsCiAgICAgIGZhT3JjaWQsCiAgICAgIGZhQmVoYW5jZSwKICAgICAgZmFNb25lcm8sCiAgICAgIGZhRmlnbWEsCiAgICAgIGZhSW5zdGFncmFtLAogICAgICBmYVBlcmJ5dGUsCiAgICAgIGZhU3F1YXJlVmltZW8sCiAgICAgIGZhVmltZW9TcXVhcmUsCiAgICAgIGZhUHVzaGVkLAogICAgICBmYU1peGNsb3VkLAogICAgICBmYVlhbmRleEludGVybmF0aW9uYWwsCiAgICAgIGZhSGl2ZSwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNaZXJvLAogICAgICBmYVNxdWFyZVNuYXBjaGF0LAogICAgICBmYVNuYXBjaGF0U3F1YXJlLAogICAgICBmYVRoZW1laXNsZSwKICAgICAgZmFEYXJ0TGFuZywKICAgICAgZmFEZXBsb3lkb2csCiAgICAgIGZhRmxpcGJvYXJkLAogICAgICBmYUJ1eU5MYXJnZSwKICAgICAgZmFXYXRjaG1hbk1vbml0b3JpbmcsCiAgICAgIGZhSGlwcywKICAgICAgZmFDbG91ZHZlcnNpZnksCiAgICAgIGZhR29vZHJlYWRzLAogICAgICBmYVRpZGFsLAogICAgICBmYVVuaXR5LAogICAgICBmYVRlbmNlbnRXZWlibywKICAgICAgZmFGcmVlQ29kZUNhbXAsCiAgICAgIGZhWFR3aXR0ZXIsCiAgICAgIGZhU3RpY2tlck11bGUsCiAgICAgIGZhVHdpdGNoLAogICAgICBmYUtpY2tzdGFydGVySywKICAgICAgZmFDcml0aWNhbFJvbGUsCiAgICAgIGZhU3RlYW1TeW1ib2wsCiAgICAgIGZhTWFpbGNoaW1wLAogICAgICBmYUx1bW9uLAogICAgICBmYU51dHJpdGlvbml4LAogICAgICBmYUNyZWF0aXZlQ29tbW9uc1NhbXBsaW5nUGx1cywKICAgICAgZmFSZWRoYXQsCiAgICAgIGZhU3F1YXJlUGllZFBpcGVyLAogICAgICBmYVBpZWRQaXBlclNxdWFyZSwKICAgICAgZmFXaGF0c2FwcCwKICAgICAgZmFJbWRiLAogICAgICBmYVB5dGhvbiwKICAgICAgZmFDYXNoQXBwLAogICAgICBmYVBpbnRlcmVzdFAsCiAgICAgIGZhV2htY3MsCiAgICAgIGZhSm9nZXQsCiAgICAgIGZhU3F1YXJlWW91dHViZSwKICAgICAgZmFZb3V0dWJlU3F1YXJlLAogICAgICBmYUF0bGFzc2lhbiwKICAgICAgZmFQaWVkUGlwZXJIYXQsCiAgICAgIGZhSW50ZXJuZXRFeHBsb3JlciwKICAgICAgZmFBaXJibmIsCiAgICAgIGZhSnMsCiAgICAgIGZhUXVpbnNjYXBlLAogICAgICBmYUFkdmVyc2FsLAogICAgICBmYUNyZWF0aXZlQ29tbW9ucywKICAgICAgZmFOb3Rpb24sCiAgICAgIGZhQ2hyb21lY2FzdCwKICAgICAgZmFXaWtpcGVkaWFXLAogICAgICBmYVNpdHJveCwKICAgICAgZmFTcXVhcmVHaXRsYWIsCiAgICAgIGZhR2l0bGFiU3F1YXJlLAogICAgICBmYVNob2VsYWNlLAogICAgICBmYVNlbGxjYXN0LAogICAgICBmYU1peCwKICAgICAgZmFDY0FwcGxlUGF5LAogICAgICBmYUJyYXZlLAogICAgICBmYUV0c3ksCiAgICAgIGZhQnRjLAogICAgICBmYUFkbiwKICAgICAgZmFTcXVhcmVYVHdpdHRlciwKICAgICAgZmFTcXVhcmVGb250QXdlc29tZSwKICAgICAgZmFGb3J1bWJlZSwKICAgICAgZmE0Mkdyb3VwLAogICAgICBmYUlubm9zb2Z0LAogICAgICBmYVN0dW1ibGV1cG9uQ2lyY2xlLAogICAgICBmYVN5bWZvbnksCiAgICAgIGZhU2FsZXNmb3JjZSwKICAgICAgZmFTb3VyY2V0cmVlLAogICAgICBmYUxpbmtlZGluSW4sCiAgICAgIGZhSHRtbDUsCiAgICAgIGZhUnVzdCwKICAgICAgZmFIb3JuYmlsbCwKICAgICAgZmFQaHAsCiAgICAgIGZhRGlzcXVzLAogICAgICBmYTUwMHB4LAogICAgICBmYUFmZmlsaWF0ZXRoZW1lLAogICAgICBmYVJlZFJpdmVyLAogICAgICBmYVR3aXR0ZXIsCiAgICAgIGZhRm9ydEF3ZXNvbWUsCiAgICAgIGZhTWl4ZXIsCiAgICAgIGZhTHlmdCwKICAgICAgZmFBcHBsZVBheSwKICAgICAgZmFBcnRzdGF0aW9uLAogICAgICBmYU5vZGVKcywKICAgICAgZmFVbmNoYXJ0ZWQsCiAgICAgIGZhUGxheXN0YXRpb24sCiAgICAgIGZhTWljcm9ibG9nLAogICAgICBmYUdpdGtyYWtlbiwKICAgICAgZmFUZWxlZ3JhbSwKICAgICAgZmFUZWxlZ3JhbVBsYW5lLAogICAgICBmYUl0dW5lc05vdGUsCiAgICAgIGZhTGVzcywKICAgICAgZmFGaXJlZm94LAogICAgICBmYUthZ2dsZSwKICAgICAgZmFGYWNlYm9va01lc3NlbmdlciwKICAgICAgZmFBdWRpYmxlLAogICAgICBmYVBhdHJlb24sCiAgICAgIGZhVm52LAogICAgICBmYVBhZ2VsaW5lcywKICAgICAgZmFBbWF6b24sCiAgICAgIGZhRW52aXJhLAogICAgICBmYUxpbm9kZSwKICAgICAgZmFBY2N1c29mdCwKICAgICAgZmFFcmxhbmcsCiAgICAgIGZhQ2NEaXNjb3ZlciwKICAgICAgZmFTYWZhcmksCiAgICAgIGZhU3BhY2VBd2Vzb21lLAogICAgICBmYU5vZGUsCiAgICAgIGZhQ29kZXBlbiwKICAgICAgZmFSYXZlbHJ5LAogICAgICBmYUFsaXBheSwKICAgICAgZmFDY0FtZXgsCiAgICAgIGZhUGllZFBpcGVyQWx0LAogICAgICBmYUxldHRlcmJveGQsCiAgICAgIGZhT3BlcmEsCiAgICAgIGZhV2VpYm8sCiAgICAgIGZhUmVhZG1lLAogICAgICBmYUdvbGFuZywKICAgICAgZmFTdGFja0V4Y2hhbmdlLAogICAgICBmYUd1bHAsCiAgICAgIGZhWWVscCwKICAgICAgZmFHb2ZvcmUsCiAgICAgIGZhQXZpYXRvLAogICAgICBmYVBhZGxldCwKICAgICAgZmFFZGdlTGVnYWN5LAogICAgICBmYVNxdWFyZUxhc3RmbSwKICAgICAgZmFMYXN0Zm1TcXVhcmUsCiAgICAgIGZhR29vZHJlYWRzRywKICAgICAgZmFDY01hc3RlcmNhcmQsCiAgICAgIGZhRGlzY291cnNlLAogICAgICBmYUJsYWNrVGllLAogICAgICBmYVNxdWFyZUZhY2Vib29rLAogICAgICBmYUZhY2Vib29rU3F1YXJlLAogICAgICBmYUJhdHRsZU5ldCwKICAgICAgZmFCaW1vYmplY3QKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZm9ydGF3ZXNvbWUrZnJlZS1yZWd1bGFyLXN2Zy1pY29uc0A3LjEuMC9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZyZWUtcmVndWxhci1zdmctaWNvbnMvaW5kZXgubWpzCnZhciBwcmVmaXgyLCBmYVNxdWFyZU1pbnVzLCBmYU1pbnVzU3F1YXJlLCBmYUNhbGVuZGFyQ2hlY2ssIGZhRmFjZUtpc3MsIGZhS2lzcywgZmFQYXN0ZSwgZmFGaWxlQ2xpcGJvYXJkLCBmYUhhbmRQb2ludExlZnQsIGZhRmlsZUV4Y2VsLCBmYUVudmVsb3BlLCBmYVNxdWFyZUNhcmV0RG93biwgZmFDYXJldFNxdWFyZURvd24sIGZhVHJ1Y2ssIGZhQmVsbCwgZmFNZXNzYWdlLCBmYUNvbW1lbnRBbHQsIGZhRmFjZURpenp5LCBmYURpenp5LCBmYUNhbGVuZGFyRGF5cywgZmFDYWxlbmRhckFsdCwgZmFIYW5kUG9pbnRVcCwgZmFIYW5kTGl6YXJkLCBmYVNxdWFyZUZ1bGwsIGZhQ2lyY2xlUGF1c2UsIGZhUGF1c2VDaXJjbGUsIGZhSGFyZERyaXZlLCBmYUhkZCwgZmFGaWxlWmlwcGVyLCBmYUZpbGVBcmNoaXZlLCBmYUZsb3BweURpc2ssIGZhU2F2ZSwgZmFGYWNlR3JpblRvbmd1ZVNxdWludCwgZmFHcmluVG9uZ3VlU3F1aW50LCBmYUNhbWVyYSwgZmFDYW1lcmFBbHQsIGZhRmFjZUdyaW5TdGFycywgZmFHcmluU3RhcnMsIGZhRXllLCBmYUZhY2VTYWRUZWFyLCBmYVNhZFRlYXIsIGZhU2hhcmVGcm9tU3F1YXJlLCBmYVNoYXJlU3F1YXJlLCBmYU5vdGVTdGlja3ksIGZhU3RpY2t5Tm90ZSwgZmFIYW5kQmFja0Zpc3QsIGZhSGFuZFJvY2ssIGZhQ2hlc3NRdWVlbiwgZmFGYWNlR3JpblRlYXJzLCBmYUdyaW5UZWFycywgZmFQZW5Ub1NxdWFyZSwgZmFFZGl0LCBmYUZhY2VHcmluQmVhbVN3ZWF0LCBmYUdyaW5CZWFtU3dlYXQsIGZhQ2xvY2ssIGZhQ2xvY2tGb3VyLCBmYUZhY2VMYXVnaFdpbmssIGZhTGF1Z2hXaW5rLCBmYVBhcGVyUGxhbmUsIGZhSGVhcnQsIGZhRm9udEF3ZXNvbWUyLCBmYUZvbnRBd2Vzb21lRmxhZzIsIGZhRm9udEF3ZXNvbWVMb2dvRnVsbDIsIGZhQ2xvbmUsIGZhRm9sZGVyT3BlbiwgZmFXaW5kb3dNaW5pbWl6ZSwgZmFTdGFySGFsZiwgZmFBbGFybUNsb2NrLCBmYU5ld3NwYXBlciwgZmFIb3NwaXRhbCwgZmFIb3NwaXRhbEFsdCwgZmFIb3NwaXRhbFdpZGUsIGZhQ2lyY2xlU3RvcCwgZmFTdG9wQ2lyY2xlLCBmYU9iamVjdFVuZ3JvdXAsIGZhQ29tbWVudCwgZmFDaGVzc1Bhd24sIGZhQ2FsZW5kYXJQbHVzLCBmYUNsaXBib2FyZCwgZmFUaHVtYnNEb3duLCBmYUlkQmFkZ2UsIGZhU3F1YXJlQ2hlY2ssIGZhQ2hlY2tTcXVhcmUsIGZhQ2hlc3NCaXNob3AsIGZhRW52ZWxvcGVPcGVuLCBmYUNpcmNsZVhtYXJrLCBmYVRpbWVzQ2lyY2xlLCBmYVhtYXJrQ2lyY2xlLCBmYVNxdWFyZUNhcmV0VXAsIGZhQ2FyZXRTcXVhcmVVcCwgZmFGaWxlSW1hZ2UsIGZhU3F1YXJlQ2FyZXRSaWdodCwgZmFDYXJldFNxdWFyZVJpZ2h0LCBmYVN1biwgZmFJbWFnZSwgZmFMaWdodGJ1bGIsIGZhQWRkcmVzc0NhcmQsIGZhQ29udGFjdENhcmQsIGZhVmNhcmQsIGZhRmFjZU1laCwgZmFNZWgsIGZhTWFwLCBmYUhhbmRQb2ludERvd24sIGZhRmFjZU1laEJsYW5rLCBmYU1laEJsYW5rLCBmYUZhY2VHcmluVG9uZ3VlLCBmYUdyaW5Ub25ndWUsIGZhRnV0Ym9sLCBmYUZ1dGJvbEJhbGwsIGZhU29jY2VyQmFsbCwgZmFGYWNlU3VycHJpc2UsIGZhU3VycHJpc2UsIGZhRm9sZGVyLCBmYUZvbGRlckJsYW5rLCBmYUNsb3VkLCBmYUNpcmNsZSwgZmFGYWNlR3JpblNxdWludCwgZmFHcmluU3F1aW50LCBmYUNpcmNsZVVzZXIsIGZhVXNlckNpcmNsZSwgZmFSZWN0YW5nbGVMaXN0LCBmYUxpc3RBbHQsIGZhSGFuZCwgZmFIYW5kUGFwZXIsIGZhVGh1bWJzVXAsIGZhQnVpbGRpbmcsIGZhQ2hlc3NSb29rLCBmYUNpcmNsZVF1ZXN0aW9uLCBmYVF1ZXN0aW9uQ2lyY2xlLCBmYUZpbGUsIGZhRmFjZVNhZENyeSwgZmFTYWRDcnksIGZhQ2FsZW5kYXJNaW51cywgZmFGYWNlVGlyZWQsIGZhVGlyZWQsIGZhSGFuZFBvaW50UmlnaHQsIGZhQ2lyY2xlVXAsIGZhQXJyb3dBbHRDaXJjbGVVcCwgZmFIYW5kU2Npc3NvcnMsIGZhR2VtLCBmYVJlY3RhbmdsZVhtYXJrLCBmYVJlY3RhbmdsZVRpbWVzLCBmYVRpbWVzUmVjdGFuZ2xlLCBmYVdpbmRvd0Nsb3NlLCBmYVRyYXNoQ2FuLCBmYVRyYXNoQWx0LCBmYUxpZmVSaW5nLCBmYUNvcHlyaWdodCwgZmFDaXJjbGVMZWZ0LCBmYUFycm93QWx0Q2lyY2xlTGVmdCwgZmFDYWxlbmRhciwgZmFGYWNlRnJvd25PcGVuLCBmYUZyb3duT3BlbiwgZmFDaGFydEJhciwgZmFCYXJDaGFydCwgZmFIb3VzZSwgZmFIb21lLCBmYUhvbWVBbHQsIGZhSG9tZUxnQWx0LCBmYUZhY2VGcm93biwgZmFGcm93biwgZmFVc2VyLCBmYVVzZXJBbHQsIGZhVXNlckxhcmdlLCBmYVNub3dmbGFrZSwgZmFCb29rbWFyaywgZmFTcXVhcmVDYXJldExlZnQsIGZhQ2FyZXRTcXVhcmVMZWZ0LCBmYUhhbmRzaGFrZSwgZmFIYW5kc2hha2VBbHQsIGZhSGFuZHNoYWtlU2ltcGxlLCBmYUZhY2VTbWlsZVdpbmssIGZhU21pbGVXaW5rLCBmYUZhY2VHcmluU3F1aW50VGVhcnMsIGZhR3JpblNxdWludFRlYXJzLCBmYUZpbGVBdWRpbywgZmFDYWxlbmRhclhtYXJrLCBmYUNhbGVuZGFyVGltZXMsIGZhQ2lyY2xlRG93biwgZmFBcnJvd0FsdENpcmNsZURvd24sIGZhRmlsZUxpbmVzLCBmYUZpbGVBbHQsIGZhRmlsZVRleHQsIGZhQ29tbWVudHMsIGZhQ2lyY2xlQ2hlY2ssIGZhQ2hlY2tDaXJjbGUsIGZhTW9vbiwgZmFDbG9zZWRDYXB0aW9uaW5nLCBmYUltYWdlcywgZmFDaXJjbGVSaWdodCwgZmFBcnJvd0FsdENpcmNsZVJpZ2h0LCBmYUlkQ2FyZCwgZmFEcml2ZXJzTGljZW5zZSwgZmFDaXJjbGVQbGF5LCBmYVBsYXlDaXJjbGUsIGZhRmFjZUxhdWdoQmVhbSwgZmFMYXVnaEJlYW0sIGZhQWRkcmVzc0Jvb2ssIGZhQ29udGFjdEJvb2ssIGZhSG91cmdsYXNzLCBmYUhvdXJnbGFzc0VtcHR5LCBmYUhlYWRwaG9uZXMsIGZhSGVhZHBob25lc0FsdCwgZmFIZWFkcGhvbmVzU2ltcGxlLCBmYUZpbGVQb3dlcnBvaW50LCBmYVdpbmRvd01heGltaXplLCBmYUNvbW1lbnREb3RzLCBmYUNvbW1lbnRpbmcsIGZhRmFjZUdyaW5Ub25ndWVXaW5rLCBmYUdyaW5Ub25ndWVXaW5rLCBmYUhvdXJnbGFzc0hhbGYsIGZhSG91cmdsYXNzMiwgZmFDcmVkaXRDYXJkLCBmYUNyZWRpdENhcmRBbHQsIGZhSGFuZFNwb2NrLCBmYUJlbGxTbGFzaCwgZmFTdGFyLCBmYUZsYWcsIGZhTGVtb24sIGZhV2luZG93UmVzdG9yZSwgZmFGYWNlR3JpbkhlYXJ0cywgZmFHcmluSGVhcnRzLCBmYUZhY2VLaXNzQmVhbSwgZmFLaXNzQmVhbSwgZmFGaWxlUGRmLCBmYUZhY2VHcmluV2lkZSwgZmFHcmluQWx0LCBmYUZhY2VMYXVnaFNxdWludCwgZmFMYXVnaFNxdWludCwgZmFGYWNlS2lzc1dpbmtIZWFydCwgZmFLaXNzV2lua0hlYXJ0LCBmYUNvcHksIGZhQ2hlc3NLaW5nLCBmYVNxdWFyZVBsdXMsIGZhUGx1c1NxdWFyZSwgZmFGaWxlQ29kZSwgZmFGYWNlR3JpbldpbmssIGZhR3JpbldpbmssIGZhTW9uZXlCaWxsMSwgZmFNb25leUJpbGxBbHQsIGZhRXllU2xhc2gsIGZhRmlsZVdvcmQsIGZhRmFjZUFuZ3J5LCBmYUFuZ3J5LCBmYUNoZXNzS25pZ2h0LCBmYUZhY2VHcmluQmVhbSwgZmFHcmluQmVhbSwgZmFIYW5kUGVhY2UsIGZhQ29tcGFzcywgZmFTcXVhcmUsIGZhRmFjZUdyaW4sIGZhR3JpbiwgZmFGYWNlU21pbGUsIGZhU21pbGUsIGZhRmFjZVNtaWxlQmVhbSwgZmFTbWlsZUJlYW0sIGZhRm9sZGVyQ2xvc2VkLCBmYUtleWJvYXJkLCBmYUZhY2VSb2xsaW5nRXllcywgZmFNZWhSb2xsaW5nRXllcywgZmFGYWNlR3JpbWFjZSwgZmFHcmltYWNlLCBmYUNpcmNsZURvdCwgZmFEb3RDaXJjbGUsIGZhT2JqZWN0R3JvdXAsIGZhRmFjZUZsdXNoZWQsIGZhRmx1c2hlZCwgZmFTdGFySGFsZlN0cm9rZSwgZmFTdGFySGFsZkFsdCwgZmFGaWxlVmlkZW8sIGZhRmFjZUxhdWdoLCBmYUxhdWdoLCBmYUhhbmRQb2ludGVyLCBmYVJlZ2lzdGVyZWQsIGljb25zMjsKdmFyIGluaXRfZnJlZV9yZWd1bGFyX3N2Z19pY29ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0Bmb3J0YXdlc29tZStmcmVlLXJlZ3VsYXItc3ZnLWljb25zQDcuMS4wL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZnJlZS1yZWd1bGFyLXN2Zy1pY29ucy9pbmRleC5tanMiKCkgewogICAgcHJlZml4MiA9ICJmYXIiOwogICAgZmFTcXVhcmVNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtbWludXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2MTc2NywgIm1pbnVzLXNxdWFyZSJdLCAiZjE0NiIsICJNNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MHpNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTEzNiAyMzJsMTc2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE3NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFNaW51c1NxdWFyZSA9IGZhU3F1YXJlTWludXM7CiAgICBmYUNhbGVuZGFyQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXItY2hlY2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI3NCIsICJNMzI4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAxNjAgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0ek02NCAxMTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI4OGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjg4YzAtOC44LTcuMi0xNi0xNi0xNkw2NCAxMTJ6bTIzMC43IDY1LjljNy44LTEwLjcgMjIuOC0xMy4xIDMzLjUtNS4zIDEwLjcgNy44IDEzLjEgMjIuOCA1LjMgMzMuNUwyMTEuNCAzNzQuMWMtNC4xIDUuNy0xMC41IDkuMy0xNy41IDkuOC03IC41LTEzLjktMi0xOC44LTYuOWwtNTUuOS01NS45Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMzYgMzYgMTA1LjYtMTQ1LjJ6Il0KICAgIH07CiAgICBmYUZhY2VLaXNzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2Uta2lzcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUzNSwgImtpc3MiXSwgImY1OTYiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMjQwIDBsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDEyLjMtNC42IDIzLjUtMTIuMiAzMiA3LjYgOC41IDEyLjIgMTkuNyAxMi4yIDMyIDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptLTk2LTQ4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUtpc3MgPSBmYUZhY2VLaXNzOwogICAgZmFQYXN0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJwYXN0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJmaWxlLWNsaXBib2FyZCJdLCAiZjBlYSIsICJNNjQgNDhsMjI0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDggNDggMCAwLTQ4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDExMiAwIDAtNDgtMTEyIDBjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6bTE3NiA3MmMwLTEzLjMtMTAuNy0yNC0yNC0yNEwxMDQgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTA1LjYgMGM4LjgtOC42IDE5LTE1LjggMzAuMi0yMS4xIC4xLS45IC4yLTEuOSAuMi0yLjl6TTQ0OCA0NjRsLTE2MCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yMjRjMC04LjggNy4yLTE2IDE2LTE2bDEwMS41IDBjNC4yIDAgOC4zIDEuNyAxMS4zIDQuN2w1OC41IDU4LjVjMyAzIDQuNyA3LjEgNC43IDExLjNMNDY0IDQ0OGMwIDguOC03LjIgMTYtMTYgMTZ6TTIyNCAyMjRsMCAyMjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTYwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNjUuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM2wtNTguNS01OC41Yy0xMi0xMi0yOC4zLTE4LjctNDUuMy0xOC43TDI4OCAxNjBjLTM1LjMgMC02NCAyOC43LTY0IDY0eiJdCiAgICB9OwogICAgZmFGaWxlQ2xpcGJvYXJkID0gZmFQYXN0ZTsKICAgIGZhSGFuZFBvaW50TGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBvaW50LWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBhNSIsICJNNjQgMTI4bDE3Ny42IDBjLTEgNS4yLTEuNiAxMC41LTEuNiAxNmwwIDE2LTE3NiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0yMjQgMTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjQgMGM2Ni4zIDAgMTIwIDUzLjcgMTIwIDEyMGwwIDQ4YzAgNTIuNS0zMy43IDk3LjEtODAuNyAxMTMuNCAuNS0zLjEgLjctNi4yIC43LTkuNCAwLTIwLTkuMi0zNy45LTIzLjYtNDkuNyA0LjktOSA3LjYtMTkuNCA3LjYtMzAuMyAwLTE1LjEtNS4zLTI5LTE0LTQwIDguOC0xMSAxNC0yNC45IDE0LTQwbDAtNDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwem0zMi04MGwwIDBjLTE4IDAtMzQuNiA2LTQ4IDE2TDY0IDgwQzI4LjcgODAgMCAxMDguNyAwIDE0NHMyOC43IDY0IDY0IDY0bDgyIDBjLTEuMyA1LjEtMiAxMC41LTIgMTYgMCAyNS4zIDE0LjcgNDcuMiAzNiA1Ny42LTIuNiA3LTQgMTQuNS00IDIyLjQgMCAyMCA5LjIgMzcuOSAyMy42IDQ5LjctNC45IDktNy42IDE5LjQtNy42IDMwLjMgMCAzNS4zIDI4LjcgNjQgNjQgNjRsODggMGM5Mi44IDAgMTY4LTc1LjIgMTY4LTE2OGwwLTQ4YzAtOTIuOC03NS4yLTE2OC0xNjgtMTY4bC0yNCAwek0yNTYgNDAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDY0IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTY0IDB6TTI0MCAyMjRjMCA1LjUgLjcgMTAuOSAyIDE2bC0zNCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDMyIDAgMCAxNnptMjQgNjRsNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwyNCAweiJdCiAgICB9OwogICAgZmFGaWxlRXhjZWwgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1leGNlbCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWMzIiwgIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwem05OS4yIDI2NS42Yy04LTEwLjYtMjMtMTIuOC0zMy42LTQuOHMtMTIuOCAyMy00LjggMzMuNkwxNjIgMzQ0IDEyNC44IDM5My42Yy04IDEwLjYtNS44IDI1LjYgNC44IDMzLjZzMjUuNiA1LjggMzMuNi00LjhMMTkyIDM4NCAyMjAuOCA0MjIuNGM4IDEwLjYgMjMgMTIuOCAzMy42IDQuOHMxMi44LTIzIDQuOC0zMy42TDIyMiAzNDQgMjU5LjIgMjk0LjRjOC0xMC42IDUuOC0yNS42LTQuOC0zMy42cy0yNS42LTUuOC0zMy42IDQuOEwxOTIgMzA0IDE2My4yIDI2NS42eiJdCiAgICB9OwogICAgZmFFbnZlbG9wZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJlbnZlbG9wZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODM4NiwgOTk5MywgNjE0NDNdLCAiZjBlMCIsICJNNjEuNCA2NEMyNy41IDY0IDAgOTEuNSAwIDEyNS40IDAgMTI2LjMgMCAxMjcuMSAuMSAxMjhMMCAxMjggMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTYtLjEgMGMwLS45IC4xLTEuNyAuMS0yLjYgMC0zMy45LTI3LjUtNjEuNC02MS40LTYxLjRMNjEuNCA2NHpNNDY0IDE5Mi4zTDQ2NCAzODRjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQwMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTkxLjcgMTU0LjggMTE3LjRjMzEuNCAyMy45IDc0LjkgMjMuOSAxMDYuNCAwTDQ2NCAxOTIuM3pNNDggMTI1LjRDNDggMTE4IDU0IDExMiA2MS40IDExMmwzODkuMiAwYzcuNCAwIDEzLjQgNiAxMy40IDEzLjQgMCA0LjItMiA4LjItNS4zIDEwLjdMMjgwLjIgMjcxLjVjLTE0LjMgMTAuOC0zNC4xIDEwLjgtNDguNCAwTDUzLjMgMTM2LjFjLTMuMy0yLjUtNS4zLTYuNS01LjMtMTAuN3oiXQogICAgfTsKICAgIGZhU3F1YXJlQ2FyZXREb3duID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1jYXJldC1kb3duIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhcmV0LXNxdWFyZS1kb3duIl0sICJmMTUwIiwgIk0zODQgNDMyYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDB6bTY0LTE2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMHpNMjI0IDM1MmMtNi43IDAtMTMtMi44LTE3LjYtNy43bC0xMDQtMTEyYy02LjUtNy04LjItMTcuMi00LjQtMjUuOVMxMTAuNSAxOTIgMTIwIDE5MmwyMDggMGM5LjUgMCAxOC4yIDUuNyAyMiAxNC40czIuMSAxOC45LTQuNCAyNS45bC0xMDQgMTEyYy00LjUgNC45LTEwLjkgNy43LTE3LjYgNy43eiJdCiAgICB9OwogICAgZmFDYXJldFNxdWFyZURvd24gPSBmYVNxdWFyZUNhcmV0RG93bjsKICAgIGZhVHJ1Y2sgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg2NjYsIDk5NTFdLCAiZjBkMSIsICJNNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI4OGMwIDguOCA3LjIgMTYgMTYgMTZsMy4zIDBjMTAuNC0zNi45IDQ0LjQtNjQgODQuNy02NHM3NC4yIDI3LjEgODQuNyA2NGwxMDIuNiAwYzQuOS0xNy40IDE1LjEtMzIuNyAyOC43LTQzLjlMMzY4IDk2YzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MHptMy4zIDM2OEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMiA1NS40IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdsNDAuNiA0MC42YzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMNTc2IDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMy4zIDBjLTEwLjQgMzYuOS00NC40IDY0LTg0LjcgNjRzLTc0LjItMjcuMS04NC43LTY0bC0xMDIuNiAwYy0xMC40IDM2LjktNDQuNCA2NC04NC43IDY0cy03NC4yLTI3LjEtODQuNy02NHpNNDE2IDI1NmwxMTIgMCAwLTIzLjRjMC00LjItMS43LTguMy00LjctMTEuM2wtNDAuNi00MC42Yy0zLTMtNy4xLTQuNy0xMS4zLTQuN2wtNTUuNCAwIDAgODB6bTAgNDhsMCAzMi40YzIuNi0uMiA1LjMtLjQgOC0uNCA0MC4zIDAgNzQuMiAyNy4xIDg0LjcgNjRsMy4zIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtODAtMTEyIDB6TTE1MiA0NjRhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwem0yNzIgMGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il0KICAgIH07CiAgICBmYUJlbGwgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiYmVsbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODI3NiwgNjE2MDJdLCAiZjBmMyIsICJNMjI0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgOS43QzExOC42IDQ1LjMgNTYgMTE1LjQgNTYgMjAwbDAgMTQuNWMwIDM3LjctMTAgNzQuNy0yOSAxMDcuM0w1LjEgMzU5LjJDMS44IDM2NSAwIDM3MS41IDAgMzc4LjIgMCAzOTkuMSAxNi45IDQxNiAzNy44IDQxNmwzNzIuNCAwYzIwLjkgMCAzNy44LTE2LjkgMzcuOC0zNy44IDAtNi43LTEuOC0xMy4zLTUuMS0xOUw0MjEgMzIxLjdjLTE5LTMyLjYtMjktNjkuNi0yOS0xMDcuM2wwLTE0LjVjMC04NC42LTYyLjYtMTU0LjctMTQ0LTE2Ni4zbDAtOS43YzAtMTMuMy0xMC43LTI0LTI0LTI0ek0zOTIuNCAzNjhsLTMzNi45IDAgMTIuOS0yMi4xQzkxLjcgMzA2IDEwNCAyNjAuNiAxMDQgMjE0LjVsMC0xNC41YzAtNjYuMyA1My43LTEyMCAxMjAtMTIwczEyMCA1My43IDEyMCAxMjBsMCAxNC41YzAgNDYuMiAxMi4zIDkxLjUgMzUuNSAxMzEuNEwzOTIuNCAzNjh6TTE1Ni4xIDQ2NGM5LjkgMjggMzYuNiA0OCA2Ny45IDQ4czU4LTIwIDY3LjktNDhsLTEzNS44IDB6Il0KICAgIH07CiAgICBmYU1lc3NhZ2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAibWVzc2FnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjb21tZW50LWFsdCJdLCAiZjI3YSIsICJNMjAzLjcgNTEyLjlzMCAwIDAgMGwtMzcuOCAyNi43Yy03LjMgNS4yLTE2LjkgNS44LTI0LjkgMS43UzEyOCA1MjkgMTI4IDUyMGwwLTcyLTMyIDBjLTUzIDAtOTYtNDMtOTYtOTZMMCAxMjhDMCA3NSA0MyAzMiA5NiAzMmwzMjAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjI0YzAgNTMtNDMgOTYtOTYgOTZsLTEyMC40IDAtOTEuOSA2NC45em02NC4zLTEwNC4xYzguMS01LjcgMTcuOC04LjggMjcuNy04LjhMNDE2IDQwMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIyNGMwLTI2LjUtMjEuNS00OC00OC00OEw5NiA4MGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAyMjRjMCAyNi41IDIxLjUgNDggNDggNDhsNTYgMGMxMC40IDAgMTkuMyA2LjYgMjIuNiAxNS45IC45IDIuNSAxLjQgNS4yIDEuNCA4LjFsMCA0OS43YzMyLjctMjMuMSA2My4zLTQ0LjcgOTEuOS02NC45eiJdCiAgICB9OwogICAgZmFDb21tZW50QWx0ID0gZmFNZXNzYWdlOwogICAgZmFGYWNlRGl6enkgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1kaXp6eSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJkaXp6eSJdLCAiZjU2NyIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0xMzQuMSAxNTMuOWwyNS45IDI1LjkgMjUuOS0yNS45YzcuOC03LjggMjAuNS03LjggMjguMyAwczcuOCAyMC41IDAgMjguM2wtMjUuOSAyNS45IDI1LjkgMjUuOWM3LjggNy44IDcuOCAyMC41IDAgMjguM3MtMjAuNSA3LjgtMjguMyAwbC0yNS45LTI1LjktMjUuOSAyNS45Yy03LjggNy44LTIwLjUgNy44LTI4LjMgMHMtNy44LTIwLjUgMC0yOC4zbDI1LjktMjUuOS0yNS45LTI1LjljLTcuOC03LjgtNy44LTIwLjUgMC0yOC4zczIwLjUtNy44IDI4LjMgMHptMTkyIDBsMjUuOSAyNS45IDI1LjktMjUuOWM3LjgtNy44IDIwLjUtNy44IDI4LjMgMHM3LjggMjAuNSAwIDI4LjNsLTI1LjkgMjUuOSAyNS45IDI1LjljNy44IDcuOCA3LjggMjAuNSAwIDI4LjNzLTIwLjUgNy44LTI4LjMgMGwtMjUuOS0yNS45LTI1LjkgMjUuOWMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBzLTcuOC0yMC41IDAtMjguM2wyNS45LTI1LjktMjUuOS0yNS45Yy03LjgtNy44LTcuOC0yMC41IDAtMjguM3MyMC41LTcuOCAyOC4zIDB6TTI1NiAyODhhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il0KICAgIH07CiAgICBmYURpenp5ID0gZmFGYWNlRGl6enk7CiAgICBmYUNhbGVuZGFyRGF5cyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1kYXlzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhbGVuZGFyLWFsdCJdLCAiZjA3MyIsICJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MCAxNjAgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0ek0zODQgNDMyYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0LTg4IDAgMCA4MCA3MiAwem0xNi0xMjhsMC04MC04OCAwIDAgODAgODggMHptLTEzNiAwbDAtODAtODAgMCAwIDgwIDgwIDB6bS0xMjggMGwwLTgwLTg4IDAgMCA4MCA4OCAwek00OCAzNTJsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsNzIgMCAwLTgwLTg4IDB6bTEzNiAwbDAgODAgODAgMCAwLTgwLTgwIDB6TTEyMCAxMTJsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDQ4IDM1MiAwIDAtNDhjMC04LjgtNy4yLTE2LTE2LTE2bC0yNjQgMHoiXQogICAgfTsKICAgIGZhQ2FsZW5kYXJBbHQgPSBmYUNhbGVuZGFyRGF5czsKICAgIGZhSGFuZFBvaW50VXAgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wb2ludC11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk3NTddLCAiZjBhNiIsICJNNjQgNjRsMCAxNzcuNmM1LjItMSAxMC41LTEuNiAxNi0xLjZsMTYgMCAwLTE3NmMwLTguOC03LjItMTYtMTYtMTZTNjQgNTUuMiA2NCA2NHpNODAgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDI0YzAgNjYuMyA1My43IDEyMCAxMjAgMTIwbDQ4IDBjNTIuNSAwIDk3LjEtMzMuNyAxMTMuNC04MC43LTMuMSAuNS02LjIgLjctOS40IC43LTIwIDAtMzcuOS05LjItNDkuNy0yMy42LTkgNC45LTE5LjQgNy42LTMwLjMgNy42LTE1LjEgMC0yOS01LjMtNDAtMTQtMTEgOC44LTI0LjkgMTQtNDAgMTRsLTQwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDAgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtODAgMHpNMCAzMjBsMCAwYzAtMTggNi0zNC42IDE2LTQ4TDE2IDY0QzE2IDI4LjcgNDQuNyAwIDgwIDBzNjQgMjguNyA2NCA2NGwwIDgyYzUuMS0xLjMgMTAuNS0yIDE2LTIgMjUuMyAwIDQ3LjIgMTQuNyA1Ny42IDM2IDctMi42IDE0LjUtNCAyMi40LTQgMjAgMCAzNy45IDkuMiA0OS43IDIzLjYgOS00LjkgMTkuNC03LjYgMzAuMy03LjYgMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA4OGMwIDkyLjgtNzUuMiAxNjgtMTY4IDE2OGwtNDggMEM3NS4yIDUxMiAwIDQzNi44IDAgMzQ0bDAtMjR6bTMzNi02NGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NHpNMTYwIDI0MGM1LjUgMCAxMC45IC43IDE2IDJsMC0zNGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDMyIDE2IDB6bTY0IDI0bDAgNDBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMjR6Il0KICAgIH07CiAgICBmYUhhbmRMaXphcmQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1saXphcmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI1OCIsICJNNzIgMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE2OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0bC0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNTIgMGM0LjUgMCA4LjkgMS4zIDEyLjcgMy42bDY0IDQwYzcgNC40IDExLjMgMTIuMSAxMS4zIDIwLjRsMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTEwLjctNDYuOS0yOS4zLTE0NS4xIDBjLTM5LjggMC03Mi0zMi4yLTcyLTcyczMyLjItNzIgNzItNzJsMTA0IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZMNzIgMjA4Yy0zOS44IDAtNzItMzIuMi03Mi03MlMzMi4yIDY0IDcyIDY0bDIwOS42IDBjNDYuNyAwIDkwLjkgMjEuNSAxMTkuNyA1OC4zbDc4LjQgMTAwLjFjMjAuOSAyNi43IDMyLjMgNTkuNyAzMi4zIDkzLjdMNTEyIDQyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTEwNy45YzAtMjMuMi03LjgtNDUuOC0yMi4xLTY0LjFMMzYzLjUgMTUxLjljLTE5LjctMjUuMi00OS45LTM5LjktODEuOS0zOS45TDcyIDExMnoiXQogICAgfTsKICAgIGZhU3F1YXJlRnVsbCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZnVsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODk5NywgMTI4OTk4LCAxMjg5OTksIDEyOWUzLCAxMjkwMDEsIDEyOTAwMiwgMTI5MDAzLCAxMTAzNSwgMTEwMzZdLCAiZjQ1YyIsICJNNDQ4IDQ4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDM4NGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2bDM4NCAwek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAweiJdCiAgICB9OwogICAgZmFDaXJjbGVQYXVzZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtcGF1c2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjA5MiwgInBhdXNlLWNpcmNsZSJdLCAiZjI4YiIsICJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMjQgMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTQ0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNDR6bTExMiAwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTQ0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNDR6Il0KICAgIH07CiAgICBmYVBhdXNlQ2lyY2xlID0gZmFDaXJjbGVQYXVzZTsKICAgIGZhSGFyZERyaXZlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhcmQtZHJpdmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjg0MzYsICJoZGQiXSwgImYwYTAiLCAiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNjJjNS4xLTEuMyAxMC41LTIgMTYtMmwzMjAgMGM1LjUgMCAxMC45IC43IDE2IDJsMC0xNjJjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwek00OCAzMjBsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtOTZjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDMwNGMtOC44IDAtMTYgNy4yLTE2IDE2ek0wIDMyMEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC05NnptMjE2IDQ4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyMC0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYUhkZCA9IGZhSGFyZERyaXZlOwogICAgZmFGaWxlWmlwcGVyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZpbGUtemlwcGVyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImZpbGUtYXJjaGl2ZSJdLCAiZjFjNiIsICJNNjQgNDhsMTEyIDAgMCA4OGMwIDM5LjggMzIuMiA3MiA3MiA3Mmw4OCAwIDAgMjQwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCA2Ny45bDkyLjEgOTIuMS02OC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNjguMXpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNjEuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNDIuNyAxOC43QzIzMC43IDYuNyAyMTQuNSAwIDE5Ny41IDBMNjQgMHpNODAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDE2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em0wIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em02NCA1NmwtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0OGMwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4bDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJ6bS0xNiA2NGExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6Il0KICAgIH07CiAgICBmYUZpbGVBcmNoaXZlID0gZmFGaWxlWmlwcGVyOwogICAgZmFGbG9wcHlEaXNrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZsb3BweS1kaXNrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTkwLCAxMjg0MjYsICJzYXZlIl0sICJmMGM3IiwgIk02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNDIuN2MwLTQuMi0xLjctOC4zLTQuNy0xMS4zTDMyMCA4Ni42IDMyMCAxNzZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2LTMyIDB6bTgwIDBsMCA4MCAxMjggMCAwLTgwLTEyOCAwek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDI0Mi43IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMNDI5LjMgMTI4YzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMNDQ4IDQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTE2MCAzMjBhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAweiJdCiAgICB9OwogICAgZmFTYXZlID0gZmFGbG9wcHlEaXNrOwogICAgZmFGYWNlR3JpblRvbmd1ZVNxdWludCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tdG9uZ3VlLXNxdWludCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU0MSwgImdyaW4tdG9uZ3VlLXNxdWludCJdLCAiZjU4YSIsICJNNDY0IDI1NmMwLTExNC45LTkzLjEtMjA4LTIwOC0yMDhTNDggMTQxLjEgNDggMjU2YzAgNzUuOSA0MC43IDE0Mi40IDEwMS41IDE3OC43LTMuNi0xMC45LTUuNS0yMi42LTUuNS0zNC43bDAtMzcuNWMtMTAuMi0xMi42LTE4LjMtMjYuOS0yMy44LTQyLjQtNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42IDExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC01LjUgMTUuNi0xMy42IDI5LjktMjMuOCA0Mi41bDAgMzcuNWMwIDEyLjEtMS45IDIzLjgtNS41IDM0LjcgNjAuOC0zNi4zIDEwMS41LTEwMi43IDEwMS41LTE3OC43ek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xMjUuOC03NS43Yy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xczEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDIwOCAxMjUuOCAxODAuM3ptMjYzLjYtMjEuMWM0LjUgNi44IDMuMSAxNS45LTMuMSAyMS4xTDM1MyAyMDggMzg2LjIgMjM1LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjV6TTMyMCA0MTZsMC0zNy40YzAtMTQuNy0xMS45LTI2LjYtMjYuNi0yNi42bC0yIDBjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjktMi44IDEyLjYtMjAuOCAxMi42LTIzLjYgMC0yLjUtMTEuMS0xMi4zLTE4LjktMjMuNi0xOC45bC0yIDBjLTE0LjcgMC0yNi42IDExLjktMjYuNiAyNi42bDAgMzcuNGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdCiAgICB9OwogICAgZmFHcmluVG9uZ3VlU3F1aW50ID0gZmFGYWNlR3JpblRvbmd1ZVNxdWludDsKICAgIGZhQ2FtZXJhID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNhbWVyYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMjU4LCAiY2FtZXJhLWFsdCJdLCAiZjAzMCIsICJNMTkzLjEgMzJjLTE4LjcgMC0zNi4yIDkuNC00Ni42IDI0LjlMMTIwLjUgOTYgNjQgOTZDMjguNyA5NiAwIDEyNC43IDAgMTYwTDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0bC01Ni41IDAtMjYtMzkuMUMzNTUuMSA0MS40IDMzNy42IDMyIDMxOC45IDMyTDE5My4xIDMyem0tNi43IDUxLjZjMS41LTIuMiA0LTMuNiA2LjctMy42bDEyNS43IDBjMi43IDAgNS4yIDEuMyA2LjcgMy42bDMzLjIgNDkuOGM0LjUgNi43IDExLjkgMTAuNyAyMCAxMC43bDY5LjMgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyNTZjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQzMmMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmw2OS4zIDBjOCAwIDE1LjUtNCAyMC0xMC43bDMzLjItNDkuOHpNMjU2IDM4NGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6TTE5MiAyNzJhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAweiJdCiAgICB9OwogICAgZmFDYW1lcmFBbHQgPSBmYUNhbWVyYTsKICAgIGZhRmFjZUdyaW5TdGFycyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tc3RhcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzMjEsICJncmluLXN0YXJzIl0sICJmNTg3IiwgIk0wIDI1NmMwLTI5LjYgNS01Ny45IDE0LjItODQuNGwxNy4zIDE2LjktNC42IDI3Yy00LjIgMjQuNCA1LjYgNDYuMiAyMiA1OS45IDkuOCAxMDUuOCA5OC44IDE4OC43IDIwNy4xIDE4OC43czE5Ny40LTgyLjggMjA3LjEtMTg4LjZjMTYuNC0xMy43IDI2LjEtMzUuNCAyMi01OS45bC00LjYtMjcgMTcuMy0xNi45YzkuMiAyNi40IDE0LjIgNTQuOCAxNC4yIDg0LjQgMCAxNDEuNC0xMTQuNiAyNTYtMjU2IDI1NlMwIDM5Ny40IDAgMjU2ek0yNTYgNDhjLTE1LjIgMC0zMCAxLjYtNDQuMyA0LjdMMjAxLjQgMzEuOEMxOTcgMjMgMTkxLjEgMTUuOCAxODQuMiAxMC4yIDIwNyAzLjYgMjMxLjEgMCAyNTYgMHM0OSAzLjYgNzEuOCAxMC4yQzMyMC45IDE1LjggMzE1IDIzIDMxMC42IDMxLjhMMzAwLjMgNTIuN0MyODYgNDkuNiAyNzEuMiA0OCAyNTYgNDh6TTM3Mi4yIDMwMi4zYzExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC0xOS44IDU1LjktNzMuMSA5Ni0xMzUuOCA5Ni02Mi43IDAtMTE2LTQwLTEzNS44LTk1LjktNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42ek0zNTMuNyA1My4xYzUuOS0xMS45IDIyLjgtMTEuOSAyOC43IDBsMjMuMyA0Ny4yIDUyIDcuNmMxMy4xIDEuOSAxOC40IDE4IDguOSAyNy4zbC0zNy43IDM2LjcgOC45IDUxLjhjMi4yIDEzLjEtMTEuNSAyMy0yMy4yIDE2LjlMMzY4IDIxNiAzMjEuNSAyNDAuNWMtMTEuNyA2LjItMjUuNS0zLjgtMjMuMi0xNi45bDguOS01MS44LTM3LjctMzYuN2MtOS41LTkuMy00LjMtMjUuNCA4LjktMjcuM2w1Mi03LjYgMjMuMy00Ny4yem0tMTk1LjMgMGwyMy4zIDQ3LjIgNTIgNy42YzEzLjEgMS45IDE4LjQgMTggOC45IDI3LjNsLTM3LjcgMzYuNyA4LjkgNTEuOGMyLjIgMTMuMS0xMS41IDIzLTIzLjIgMTYuOUwxNDQgMjE2IDk3LjUgMjQwLjVjLTExLjcgNi4yLTI1LjUtMy44LTIzLjItMTYuOWw4LjktNTEuOC0zNy43LTM2LjdjLTkuNS05LjMtNC4zLTI1LjQgOC45LTI3LjNsNTItNy42IDIzLjMtNDcuMmM1LjktMTEuOSAyMi44LTExLjkgMjguNyAweiJdCiAgICB9OwogICAgZmFHcmluU3RhcnMgPSBmYUZhY2VHcmluU3RhcnM7CiAgICBmYUV5ZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJleWUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgwNjVdLCAiZjA2ZSIsICJNMjg4IDgwQzIyMi44IDgwIDE2OS4yIDEwOS42IDEyOC4xIDE0Ny43IDg5LjYgMTgzLjUgNjMgMjI2IDQ5LjQgMjU2IDYzIDI4NiA4OS42IDMyOC41IDEyOC4xIDM2NC4zIDE2OS4yIDQwMi40IDIyMi44IDQzMiAyODggNDMyczExOC44LTI5LjYgMTU5LjktNjcuN0M0ODYuNCAzMjguNSA1MTMgMjg2IDUyNi42IDI1NiA1MTMgMjI2IDQ4Ni40IDE4My41IDQ0Ny45IDE0Ny43IDQwNi44IDEwOS42IDM1My4yIDgwIDI4OCA4MHpNOTUuNCAxMTIuNkMxNDIuNSA2OC44IDIwNy4yIDMyIDI4OCAzMnMxNDUuNSAzNi44IDE5Mi42IDgwLjZjNDYuOCA0My41IDc4LjEgOTUuNCA5MyAxMzEuMSAzLjMgNy45IDMuMyAxNi43IDAgMjQuNi0xNC45IDM1LjctNDYuMiA4Ny43LTkzIDEzMS4xLTQ3LjEgNDMuNy0xMTEuOCA4MC42LTE5Mi42IDgwLjZTMTQyLjUgNDQzLjIgOTUuNCAzOTkuNGMtNDYuOC00My41LTc4LjEtOTUuNC05My0xMzEuMS0zLjMtNy45LTMuMy0xNi43IDAtMjQuNiAxNC45LTM1LjcgNDYuMi04Ny43IDkzLTEzMS4xek0yODggMzM2YzQ0LjIgMCA4MC0zNS44IDgwLTgwIDAtMjkuNi0xNi4xLTU1LjUtNDAtNjkuMy0xLjQgNTkuNy00OS42IDEwNy45LTEwOS4zIDEwOS4zIDEzLjggMjMuOSAzOS43IDQwIDY5LjMgNDB6bS03OS42LTg4LjRjMi41IC4zIDUgLjQgNy42IC40IDM1LjMgMCA2NC0yOC43IDY0LTY0IDAtMi42LS4yLTUuMS0uNC03LjYtMzcuNCAzLjktNjcuMiAzMy43LTcxLjEgNzEuMXptNDUuNi0xMTVjMTAuOC0zIDIyLjItNC41IDMzLjktNC41IDguOCAwIDE3LjUgLjkgMjUuOCAyLjYgLjMgLjEgLjUgLjEgLjggLjIgNTcuOSAxMi4yIDEwMS40IDYzLjcgMTAxLjQgMTI1LjIgMCA3MC43LTU3LjMgMTI4LTEyOCAxMjgtNjEuNiAwLTExMy00My41LTEyNS4yLTEwMS40LTEuOC04LjYtMi44LTE3LjUtMi44LTI2LjYgMC0xMSAxLjQtMjEuOCA0LTMyIC4yLS43IC4zLTEuMyAuNS0xLjkgMTEuOS00My40IDQ2LjEtNzcuNiA4OS41LTg5LjV6Il0KICAgIH07CiAgICBmYUZhY2VTYWRUZWFyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2Utc2FkLXRlYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDYsICJzYWQtdGVhciJdLCAiZjViNCIsICJNNDY0IDI1NmMwLTExNC45LTkzLjEtMjA4LTIwOC0yMDhTNDggMTQxLjEgNDggMjU2YzAgNDEuOCAxMi4zIDgwLjcgMzMuNiAxMTMuMyA4LjIgNDQuNyA0Ny4zIDc4LjYgOTQuMyA3OC43IDI0LjcgMTAuMyA1MS43IDE2IDgwLjEgMTYgMTE0LjkgMCAyMDgtOTMuMSAyMDgtMjA4ek0yODggMzUyYy01LjUgMC0xMC45IC42LTE2IDEuOCAwLS42IDAtMS4yIDAtMS44IDAtMTYuMi00LTMxLjUtMTEuMS00NC45IDguNy0yIDE3LjgtMy4xIDI3LjEtMy4xIDQwLjIgMCA3NS43IDE5LjggOTcuNSA1MCA3LjcgMTAuOCA1LjMgMjUuOC01LjUgMzMuNXMtMjUuOCA1LjMtMzMuNS01LjVjLTEzLjEtMTguMi0zNC40LTMwLTU4LjUtMzB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ni04MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0xODUuNCAyNzYuOGM2LjUgNy44IDEyLjYgMTYuMSAxOC4zIDI0LjYgOSAxMy40IDIwLjMgMzAuMiAyMC4zIDQ3LjQgMCAyOC4zLTIxLjUgNTEuMi00OCA1MS4ycy00OC0yMi45LTQ4LTUxLjJjMC0xNy4yIDExLjItMzQgMjAuMy00Ny40IDUuNy04LjUgMTEuOS0xNi43IDE4LjMtMjQuNiAyLjQtMi45IDUuNy00LjggOS40LTQuOHM3IDEuOSA5LjQgNC44eiJdCiAgICB9OwogICAgZmFTYWRUZWFyID0gZmFGYWNlU2FkVGVhcjsKICAgIGZhU2hhcmVGcm9tU3F1YXJlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNoYXJlLWZyb20tc3F1YXJlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjE1MDksICJzaGFyZS1zcXVhcmUiXSwgImYxNGQiLCAiTTQyNS41IDdjLTYuOS02LjktMTcuMi04LjktMjYuMi01LjJTMzg0LjUgMTQuMyAzODQuNSAyNGwwIDU2LTQ4IDBjLTg4LjQgMC0xNjAgNzEuNi0xNjAgMTYwIDAgNDYuNyAyMC43IDgwLjQgNDMuNiAxMDMuNCA4LjEgOC4yIDE2LjUgMTQuOSAyNC4zIDIwLjQgOS4yIDYuNSAyMS43IDUuNyAzMC4xLTEuOXMxMC4yLTIwIDQuNS0yOS44Yy0zLjYtNi4zLTYuNS0xNC45LTYuNS0yNi43IDAtMzYuMiAyOS4zLTY1LjUgNjUuNS02NS41bDQ2LjUgMCAwIDU2YzAgOS43IDUuOCAxOC41IDE0LjggMjIuMnMxOS4zIDEuNyAyNi4yLTUuMmwxMzYtMTM2YzkuNC05LjQgOS40LTI0LjYgMC0zMy45TDQyNS41IDd6bTcgOTdsMC0yMi4xIDc4LjEgNzguMS03OC4xIDc4LjEgMC0yMi4xYzAtMTMuMy0xMC43LTI0LTI0LTI0TDMzOCAxOTJjLTUwLjkgMC05My45IDMzLjUtMTA4LjMgNzkuNi0zLjMtOS40LTUuMi0xOS44LTUuMi0zMS42IDAtNjEuOSA1MC4xLTExMiAxMTItMTEybDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjR6bS0zMjAtOGMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyNTZjMCA0NC4yIDM1LjggODAgODAgODBsMjU2IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDI0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjQgMHoiXQogICAgfTsKICAgIGZhU2hhcmVTcXVhcmUgPSBmYVNoYXJlRnJvbVNxdWFyZTsKICAgIGZhTm90ZVN0aWNreSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJub3RlLXN0aWNreSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYyMDI2LCAic3RpY2t5LW5vdGUiXSwgImYyNDkiLCAiTTI0MCA0MzJMNjQgNDMyYy04LjggMC0xNi03LjItMTYtMTZMNDggOTZjMC04LjggNy4yLTE2IDE2LTE2bDMyMCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE3Ni04OCAwYy0zOS44IDAtNzIgMzIuMi03MiA3MmwwIDg4ek0zODAuMSAzMjBMMjg4IDQxMi4xIDI4OCAzNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRsNjguMSAwek0wIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTcuNSAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43TDQyOS4zIDMzOC43YzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNMNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZ6Il0KICAgIH07CiAgICBmYVN0aWNreU5vdGUgPSBmYU5vdGVTdGlja3k7CiAgICBmYUhhbmRCYWNrRmlzdCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWJhY2stZmlzdCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJoYW5kLXJvY2siXSwgImYyNTUiLCAiTTk2IDQwMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDQwMHpNNzMuMiAzNTJsNjQuNiAwLTc5LjUtODguM0M1MS43IDI1Ni4zIDQ4IDI0Ni44IDQ4IDIzNi45TDQ4IDIwNGMwLTE2LjEgMTEuOS0yOS41IDI3LjQtMzEuNyAxMS44LTEuNyAyMC42LTExLjggMjAuNi0yMy44TDk2IDcyYzAtMTMuMyAxMC43LTI0IDI0LTI0IDcuMiAwIDEzLjYgMy4xIDE4IDguMSA0LjYgNS4yIDExLjEgOC4xIDE4IDguMXMxMy40LTMgMTgtOC4xYzQuNC01IDEwLjgtOC4xIDE4LTguMSA4LjUgMCAxNS45IDQuNCAyMC4yIDExLjEgNi45IDEwLjcgMjAuOSAxNC4yIDMyIDggMy41LTEuOSA3LjQtMy4xIDExLjgtMy4xIDEwLjYgMCAxOS43IDYuOSAyMi44IDE2LjYgMy44IDExLjcgMTUuOSAxOC43IDI4IDE2IDEuNy0uNCAzLjQtLjYgNS4yLS42IDEzLjMgMCAyNCAxMC43IDI0IDI0bDAgOTIuMmMwIDE0LjQtMy41IDI4LjUtMTAuMiA0MS4ybC01Mi4yIDk4LjYgNTQuMyAwIDQwLjMtNzYuMmMxMC40LTE5LjYgMTUuOC00MS41IDE1LjgtNjMuNmwwLTkyLjJjMC0zOC40LTMwLjEtNjkuOC02OC4xLTcxLjktMTIuOS0xOS4zLTM0LjktMzIuMS01OS45LTMyLjEtNS43IDAtMTEuMiAuNy0xNi41IDEuOS0xMi43LTExLjEtMjkuMy0xNy45LTQ3LjUtMTcuOS0xMy4xIDAtMjUuNCAzLjUtMzYgOS42LTEwLjYtNi4xLTIyLjktOS42LTM2LTkuNi0zOS44IDAtNzIgMzIuMi03MiA3MmwwIDU4LjdDMTkuNyAxNDMgMCAxNzEuMiAwIDIwNGwwIDMyLjljMCAyMS43IDggNDIuNyAyMi42IDU4LjlMNzMuMiAzNTJ6Il0KICAgIH07CiAgICBmYUhhbmRSb2NrID0gZmFIYW5kQmFja0Zpc3Q7CiAgICBmYUNoZXNzUXVlZW4gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2hlc3MtcXVlZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5ODE5XSwgImY0NDUiLCAiTTMyNS4zIDkwLjhjOS4xLTQuOCAyMC42LTMuMyAyOC4yIDQuM2wzOS44IDM5LjggMy43IDMuM2M5LjEgNy4xIDIwLjkgMTAgMzIuNCA3LjdsNDYuNC05LjMgMy41LS40YzgtLjQgMTUuOCAzLjIgMjAuNiA5LjggNS41IDcuNiA2LjEgMTcuNiAxLjYgMjUuOGwtMTEyLjYgMjAyLjYgNTEuNSA3MC45IDEuOCAyLjdjNCA2LjYgNi4yIDE0LjIgNi4yIDIyIDAgMjMuMy0xOC45IDQyLjEtNDIuMSA0Mi4xbC0yOTkuOCAwYy0yMS44IDAtMzkuOC0xNi42LTQxLjktMzcuOGwtLjItNC4zIC4xLTMuM2MuNi03LjcgMy40LTE1LjEgNy45LTIxLjRsNTEuNS03MC45LTExMi41LTIwMi42Yy00LjUtOC4yLTMuOS0xOC4zIDEuNi0yNS44czE0LjktMTEuMiAyNC4xLTkuNGw0Ni40IDkuM2MxMy4xIDIuNiAyNi43LTEuNSAzNi4xLTEwLjlMMTU5LjUgOTUgMTYzIDkyLjJjOC42LTUuOCAyMC4xLTUuNiAyOC41IDEuMWw0MCAzMiAyLjggMi4xYzE0LjQgOS42IDMzLjUgOC45IDQ3LjItMi4xbDQwLTMyIDMuOC0yLjV6TTE2NC43IDQwMGwtNDYuNiA2NCAyNzYuNyAwLTQ2LjYtNjQtMTgzLjYgMHpNMzExLjUgMTYyLjhjLTMwLjEgMjQuMS03Mi4xIDI1LjYtMTAzLjggNC41bC02LjItNC41LTIzLjMtMTguNi0yNC42IDI0LjZjLTE5LjggMTkuOC00Ny43IDI4LjktNzUuMSAyNC44bDg4LjEgMTU4LjUgMTc5LjggMCA4OC0xNTguNWMtMjUuNyAzLjgtNTEuNy0zLjktNzEuMS0yMWwtNC0zLjctMjQuNi0yNC42LTIzLjIgMTguNnpNMjU2LjUgNzJhNDAgNDAgMCAxIDEgMC04MCA0MCA0MCAwIDEgMSAwIDgweiJdCiAgICB9OwogICAgZmFGYWNlR3JpblRlYXJzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi10ZWFycyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODUxNCwgImdyaW4tdGVhcnMiXSwgImY1ODgiLCAiTTUwNC4xIDM1M0M1MTIuOSAzNjcuMiA1MjUuMyAzNzkgNTM5LjggMzg3LjIgNDk1LjEgNDYyIDQxMy40IDUxMiAzMjAgNTEyUzE0NC45IDQ2MiAxMDAuMiAzODcuMmMxNC42LTguMiAyNi45LTIwIDM1LjgtMzQuMyAzNC45IDY2IDEwNC4yIDExMSAxODQuMSAxMTFzMTQ5LjItNDUgMTg0LjEtMTExem0xNi40LTE1Mi41QzQ5Ni4yIDExMi42IDQxNS43IDQ4IDMyMCA0OFMxNDMuOCAxMTIuNiAxMTkuNSAyMDAuNWMtMTAuNi00LjgtMjIuNy02LjgtMzUuNC01bC0xMy40IDEuOUM5Ny4yIDg0LjMgMTk4LjggMCAzMjAgMFM1NDIuOCA4NC4zIDU2OS4zIDE5Ny40bC0xMy40LTEuOWMtMTIuNy0xLjgtMjQuOCAuMi0zNS40IDV6TTQ1NS44IDMyMGMtMTkuOCA1NS45LTczLjEgOTYtMTM1LjggOTYtNjIuNyAwLTExNi00MC0xMzUuOC05NS45LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNiAxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3Ljh6TTIxMiAyMDhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHptMTg4LTI4Yy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4ek02NDAgMzAwLjZjMCAyOC40LTIzIDUxLjQtNTEuNCA1MS40LTI1LjYgMC00Ny4zLTE4LjgtNTAuOS00NC4xTDUzMSAyNjEuMWMtMS41LTEwLjYgNy41LTE5LjYgMTguMS0xOC4xbDQ2LjcgNi43YzI1LjMgMy42IDQ0LjEgMjUuMyA0NC4xIDUwLjl6bS02NDAgMGMwLTI1LjYgMTguOC00Ny4zIDQ0LjEtNTAuOUw5MC45IDI0M2MxMC42LTEuNSAxOS42IDcuNSAxOC4xIDE4LjFsLTYuNyA0Ni43Qzk4LjcgMzMzLjIgNzcgMzUyIDUxLjQgMzUyIDIzIDM1MiAwIDMyOSAwIDMwMC42eiJdCiAgICB9OwogICAgZmFHcmluVGVhcnMgPSBmYUZhY2VHcmluVGVhcnM7CiAgICBmYVBlblRvU3F1YXJlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInBlbi10by1zcXVhcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZWRpdCJdLCAiZjA0NCIsICJNNDQxIDU4LjlMNDUzLjEgNzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlMNDI0IDEzNC4xIDM3Ny45IDg4IDQwNyA1OC45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwek0yMDkuOCAyNTYuMkwzNDQgMTIxLjkgMzkwLjEgMTY4IDI1NS44IDMwMi4yYy0yLjkgMi45LTYuNSA1LTEwLjQgNi4xbC01OC41IDE2LjcgMTYuNy01OC41YzEuMS0zLjkgMy4yLTcuNSA2LjEtMTAuNHpNMzczLjEgMjVMMTc1LjggMjIyLjJjLTguNyA4LjctMTUgMTkuNC0xOC4zIDMxLjFsLTI4LjYgMTAwYy0yLjQgOC40LS4xIDE3LjQgNi4xIDIzLjZzMTUuMiA4LjUgMjMuNiA2LjFsMTAwLTI4LjZjMTEuOC0zLjQgMjIuNS05LjcgMzEuMS0xOC4zTDQ4NyAxMzguOWMyOC4xLTI4LjEgMjguMS03My43IDAtMTAxLjhMNDc0LjkgMjVDNDQ2LjgtMy4xIDQwMS4yLTMuMSAzNzMuMSAyNXpNODggNjRDMzkuNCA2NCAwIDEwMy40IDAgMTUyTDAgNDI0YzAgNDguNiAzOS40IDg4IDg4IDg4bDI3MiAwYzQ4LjYgMCA4OC0zOS40IDg4LTg4bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMjIuMS0xNy45IDQwLTQwIDQwTDg4IDQ2NGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC0yNzJjMC0yMi4xIDE3LjktNDAgNDAtNDBsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggNjR6Il0KICAgIH07CiAgICBmYUVkaXQgPSBmYVBlblRvU3F1YXJlOwogICAgZmFGYWNlR3JpbkJlYW1Td2VhdCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tYmVhbS1zd2VhdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODUxNywgImdyaW4tYmVhbS1zd2VhdCJdLCAiZjU4MyIsICJNNTMwLjIgMTUuOWMtOC44LTEwLjctMTguNS0yMC45LTI5LTMwLTMtMi42LTcuNC0yLjYtMTAuNCAwLTEwLjUgOS4xLTIwLjEgMTkuMy0yOSAzMC0xNC43IDE3LjgtMjkuOCA0MC4xLTI5LjggNjQuMSAwIDM2LjQgMjcuNiA2NCA2NCA2NHM2NC0yNy42IDY0LTY0YzAtMjQtMTUuMi00Ni4zLTI5LjgtNjQuMXptLTEzMiA4LjlDMzY0LjggOC45IDMyNy40IDAgMjg4IDAgMTQ2LjYgMCAzMiAxMTQuNiAzMiAyNTZTMTQ2LjYgNTEyIDI4OCA1MTIgNTQ0IDM5Ny40IDU0NCAyNTZjMC0yNC40LTMuNC00OC05LjgtNzAuNC0xMS45IDQuMi0yNC43IDYuNC0zOC4yIDYuNC0zLjQgMC02LjgtLjEtMTAuMi0uNCA2LjYgMjAuMyAxMC4yIDQxLjkgMTAuMiA2NC40IDAgMTE0LjktOTMuMSAyMDgtMjA4IDIwOFM4MCAzNzAuOSA4MCAyNTYgMTczLjEgNDggMjg4IDQ4YzM0LjggMCA2Ny41IDguNSA5Ni4zIDIzLjYgMS40LTE3LjQgNi45LTMzLjEgMTMuOC00Ni44ek00MjMuOCAzMjBjNC4xLTExLjYtNy44LTIxLjQtMTkuNi0xNy44LTM0LjggMTAuNi03NC4zIDE2LjYtMTE2LjMgMTYuNi00MS45IDAtODEuNC02LTExNi4xLTE2LjUtMTEuOC0zLjYtMjMuNyA2LjEtMTkuNiAxNy44IDE5LjggNTUuOSA3My4xIDk1LjkgMTM1LjggOTUuOSA2Mi43IDAgMTE2LTQwLjEgMTM1LjgtOTZ6TTE4MCAyMDhjMC0xNS41IDEyLjUtMjggMjgtMjhzMjggMTIuNSAyOCAyOGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04YzAtMzcuNi0zMC40LTY4LTY4LTY4cy02OCAzMC40LTY4IDY4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTh6bTE4OC0yOGMxNS41IDAgMjggMTIuNSAyOCAyOGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04YzAtMzcuNi0zMC40LTY4LTY4LTY4cy02OCAzMC40LTY4IDY4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0xNS41IDEyLjUtMjggMjgtMjh6Il0KICAgIH07CiAgICBmYUdyaW5CZWFtU3dlYXQgPSBmYUZhY2VHcmluQmVhbVN3ZWF0OwogICAgZmFDbG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjbG9jayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODMzOSwgImNsb2NrLWZvdXIiXSwgImYwMTciLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMSAtNDE2IDAgMjA4IDIwOCAwIDEgMSA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMCA1MTIgMCAyNTYgMjU2IDAgMSAwIC01MTIgMHpNMjMyIDEyMGwwIDEzNmMwIDggNCAxNS41IDEwLjcgMjBsOTYgNjRjMTEgNy40IDI1LjkgNC40IDMzLjMtNi43czQuNC0yNS45LTYuNy0zMy4zTDI4MCAyNDMuMiAyODAgMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0eiJdCiAgICB9OwogICAgZmFDbG9ja0ZvdXIgPSBmYUNsb2NrOwogICAgZmFGYWNlTGF1Z2hXaW5rID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtbGF1Z2gtd2luayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJsYXVnaC13aW5rIl0sICJmNTljIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTExOC4zIDU4LjJjLTQuMi0xMy43IDcuMS0yNi4yIDIxLjQtMjYuMmwyMzIuNiAwYzE0LjMgMCAyNS42IDEyLjUgMjEuNCAyNi4yLTE4IDU4LjktNzIuOSAxMDEuOC0xMzcuNyAxMDEuOFMxMzYuMyAzNzMuMSAxMTguMyAzMTQuMnpNMTQ0IDE5MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNjQgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBjMC0zMy4xIDI2LjktNjAgNjAtNjBsMTYgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MCAwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjAtOS0yMC0yMC0yMGwtMTYgMGMtMTEgMC0yMCA5LTIwIDIweiJdCiAgICB9OwogICAgZmFMYXVnaFdpbmsgPSBmYUZhY2VMYXVnaFdpbms7CiAgICBmYVBhcGVyUGxhbmUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAicGFwZXItcGxhbmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MTkxM10sICJmMWQ4IiwgIk0yOTAuNSAyODcuN0w0OTEuNCA4Ni45IDM1OSA0NTYuMyAyOTAuNSAyODcuN3pNNDU3LjQgNTNMMjU2LjYgMjUzLjggODggMTg1LjMgNDU3LjQgNTN6TTM4LjEgMjE2LjhsMjA1LjggODMuNiA4My42IDIwNS44YzUuMyAxMy4xIDE4LjEgMjEuNyAzMi4zIDIxLjcgMTQuNyAwIDI3LjgtOS4yIDMyLjgtMjMuMUw1NzAuNiA4YzMuNS05LjggMS0yMC42LTYuMy0yOHMtMTguMi05LjgtMjgtNi4zTDM5LjQgMTUxLjdjLTEzLjkgNS0yMy4xIDE4LjEtMjMuMSAzMi44IDAgMTQuMiA4LjYgMjcgMjEuNyAzMi4zeiJdCiAgICB9OwogICAgZmFIZWFydCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE1MywgMTI4MTU0LCAxMjgxNTUsIDEyODE1NiwgMTI4NDIwLCAxMjkyOTMsIDEyOTI5NCwgMTI5NTA1LCA5ODI5LCAxMDA4NCwgNjE1NzhdLCAiZjAwNCIsICJNMzc4LjkgODBjLTI3LjMgMC01MyAxMy4xLTY5IDM1LjJsLTM0LjQgNDcuNmMtNC41IDYuMi0xMS43IDkuOS0xOS40IDkuOXMtMTQuOS0zLjctMTkuNC05LjlsLTM0LjQtNDcuNmMtMTYtMjIuMS00MS43LTM1LjItNjktMzUuMi00NyAwLTg1LjEgMzguMS04NS4xIDg1LjEgMCA0OS45IDMyIDk4LjQgNjguMSAxNDIuMyA0MS4xIDUwIDkxLjQgOTQgMTI1LjkgMTIwLjMgMy4yIDIuNCA3LjkgNC4yIDE0IDQuMnMxMC44LTEuOCAxNC00LjJjMzQuNS0yNi4zIDg0LjgtNzAuNCAxMjUuOS0xMjAuMyAzNi4yLTQzLjkgNjguMS05Mi40IDY4LjEtMTQyLjMgMC00Ny0zOC4xLTg1LjEtODUuMS04NS4xek0yNzEgODcuMWMyNS0zNC42IDY1LjItNTUuMSAxMDcuOS01NS4xIDczLjUgMCAxMzMuMSA1OS42IDEzMy4xIDEzMy4xIDAgNjguNi00Mi45IDEyOC45LTc5LjEgMTcyLjgtNDQuMSA1My42LTk3LjMgMTAwLjEtMTMzLjggMTI3LjktMTIuMyA5LjQtMjcuNSAxNC4xLTQzLjEgMTQuMXMtMzAuOC00LjctNDMuMS0xNC4xQzE3Ni40IDQzOCAxMjMuMiAzOTEuNSA3OS4xIDMzOCA0Mi45IDI5NC4xIDAgMjMzLjcgMCAxNjUuMSAwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMWwxNSAyMC43IDE1LTIwLjd6Il0KICAgIH07CiAgICBmYUZvbnRBd2Vzb21lMiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmb250LWF3ZXNvbWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjUwMSwgNjI2OTQsICJmb250LWF3ZXNvbWUtZmxhZyIsICJmb250LWF3ZXNvbWUtbG9nby1mdWxsIl0sICJmMmI0IiwgIk05MS43IDk2QzEwNi4zIDg2LjggMTE2IDcwLjUgMTE2IDUyIDExNiAyMy4zIDkyLjcgMCA2NCAwUzEyIDIzLjMgMTIgNTJjMCAxNi43IDcuOCAzMS41IDIwIDQxbDAgNDE5IDQ4IDAgMC02NCAzODkuNiAwYzE0LjYgMCAyNi40LTExLjggMjYuNC0yNi40IDAtMy43LS44LTcuMy0yLjMtMTAuN0w0MzIgMjcyIDQ5My43IDEzMy4xYzEuNS0zLjQgMi4zLTcgMi4zLTEwLjcgMC0xNC42LTExLjgtMjYuNC0yNi40LTI2LjRMOTEuNyA5NnpNODAgNDAwbDAtMjU2IDM1Ni40IDAtNDguMiAxMDguNWMtNS41IDEyLjQtNS41IDI2LjYgMCAzOUw0MzYuNCA0MDAgODAgNDAweiJdCiAgICB9OwogICAgZmFGb250QXdlc29tZUZsYWcyID0gZmFGb250QXdlc29tZTI7CiAgICBmYUZvbnRBd2Vzb21lTG9nb0Z1bGwyID0gZmFGb250QXdlc29tZTI7CiAgICBmYUNsb25lID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNsb25lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNGQiLCAiTTI4OCA0NjRMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZsMC0yMjRjMC04LjggNy4yLTE2IDE2LTE2bDQ4IDAgMC00OC00OCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTQ4LTQ4IDAgMCA0OGMwIDguOC03LjIgMTYtMTYgMTZ6TTIyNCAzMDRjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTIyNGMwLTguOCA3LjItMTYgMTYtMTZsMjI0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjI0YzAgOC44LTcuMiAxNi0xNiAxNmwtMjI0IDB6bS02NC0xNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTIyNGMwLTM1LjMtMjguNy02NC02NC02NEwyMjQgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyMjR6Il0KICAgIH07CiAgICBmYUZvbGRlck9wZW4gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZm9sZGVyLW9wZW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgxOTQsIDEyODQ0OSwgNjE3MTddLCAiZjA3YyIsICJNOTcuNSA0MDBsNTAtMTYwIDM3OS40IDAtNTAgMTYwLTM3OS40IDB6bTE5MC43IDQ4TDQ3NyA0NDhjMjEgMCAzOS42LTEzLjYgNDUuOC0zMy43bDUwLTE2MGM5LjctMzAuOS0xMy40LTYyLjMtNDUuOC02Mi4zbC0zNzkuNCAwYy0yMSAwLTM5LjYgMTMuNi00NS44IDMzLjdMODAuMiAyOTQuNCA4MC4yIDk2YzAtOC44IDcuMi0xNiAxNi0xNmwxMzguNyAwYzMuNSAwIDYuOCAxLjEgOS42IDMuMkwyODIuOSAxMTJjMTMuOCAxMC40IDMwLjcgMTYgNDggMTZsMTE3LjMgMGM4LjggMCAxNiA3LjIgMTYgMTZsNDggMGMwLTM1LjMtMjguNy02NC02NC02NEwzMzAuOSA4MGMtNi45IDAtMTMuNy0yLjItMTkuMi02LjRMMjczLjMgNDQuOEMyNjIuMiAzNi41IDI0OC44IDMyIDIzNC45IDMyTDk2LjIgMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjg4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAweiJdCiAgICB9OwogICAgZmFXaW5kb3dNaW5pbWl6ZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJ3aW5kb3ctbWluaW1pemUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0NjldLCAiZjJkMSIsICJNMCA0MjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNDQ4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhU3RhckhhbGYgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3Rhci1oYWxmIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjE3MzFdLCAiZjA4OSIsICJNMjg1LjctMTUuOGMxMC44IDIuNiAxOC40IDEyLjIgMTguNCAyMy4zbDAgMzg3LjFjMCA5LTUuMSAxNy4zLTEzLjEgMjEuNEwxNDMuOCA0OTFjLTggNC4xLTE3LjcgMy4zLTI1LTJzLTExLTE0LjItOS42LTIzLjJMMTM0LjQgMzA1LjkgMjAgMTkxLjRjLTYuNC02LjQtOC42LTE1LjgtNS44LTI0LjRzMTAuMS0xNC45IDE5LjEtMTYuM0wxOTMuMSAxMjUuMyAyNTguOC0zLjNjNS05LjkgMTYuMi0xNSAyNy0xMi40ek0yNTYuMSAxMDcuNEwyMzAuMyAxNThjLTMuNSA2LjgtMTAgMTEuNi0xNy42IDEyLjhsLTEyNS41IDIwIDg5LjggODkuOWM1LjQgNS40IDcuOSAxMy4xIDYuNyAyMC43bC0xOS44IDEyNS41IDkyLjItNDYuOSAwLTI3Mi42eiJdCiAgICB9OwogICAgZmFBbGFybUNsb2NrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImFsYXJtLWNsb2NrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTIwMF0sICJmMzRlIiwgIk00MDIuNiA1MC4yYy01LjQgMS43LTExLjMgMS44LTE2LjItLjktNS44LTMuMi0xMS44LTYuMi0xNy44LTguOS0xMC40LTQuNy0xMy43LTE4LjMtNC4xLTI0LjYgMTUtOS45IDMzLTE1LjcgNTIuMy0xNS43IDUyLjYgMCA5NS4yIDQyLjYgOTUuMiA5NS4yIDAgMTMuMi0yLjcgMjUuOC03LjYgMzcuMy00LjUgMTAuNS0xOC40IDkuOC0yNC45IC40LTMuOC01LjUtNy44LTEwLjgtMTItMTYtMy41LTQuNC00LjUtMTAuMi0zLjgtMTUuOCAuMi0xLjkgLjQtMy45IC40LTUuOSAwLTI2LjEtMjEuMi00Ny4yLTQ3LjItNDcuMi00LjkgMC05LjcgLjgtMTQuMiAyLjJ6TTMyLjUgMTMyLjljLTYuNSA5LjQtMjAuNSAxMC4xLTI0LjktLjQtNC45LTExLjUtNy42LTI0LjEtNy42LTM3LjMgMC01Mi42IDQyLjYtOTUuMiA5NS4yLTk1LjIgMTkuMyAwIDM3LjMgNS44IDUyLjMgMTUuNyA5LjYgNi4zIDYuMyAxOS45LTQuMSAyNC42LTYuMSAyLjgtMTIgNS43LTE3LjggOC45LTQuOSAyLjctMTAuOSAyLjYtMTYuMiAuOS00LjUtMS40LTkuMi0yLjItMTQuMi0yLjItMjYuMSAwLTQ3LjIgMjEuMi00Ny4yIDQ3LjIgMCAyIC4xIDQgLjQgNS45IC43IDUuNi0uMyAxMS40LTMuOCAxNS44LTQuMiA1LjItOC4yIDEwLjUtMTIgMTZ6TTQzMiAyODhhMTc2IDE3NiAwIDEgMCAtMzUyIDAgMTc2IDE3NiAwIDEgMCAzNTIgMHpNMzk2LjUgNDYyLjVDMzU4LjEgNDkzLjQgMzA5LjIgNTEyIDI1NiA1MTJzLTEwMi4xLTE4LjYtMTQwLjUtNDkuNUw3MyA1MDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNDIuNS00Mi41QzUwLjYgMzkwLjEgMzIgMzQxLjIgMzIgMjg4IDMyIDE2NC4zIDEzMi4zIDY0IDI1NiA2NFM0ODAgMTY0LjMgNDgwIDI4OGMwIDUzLjItMTguNiAxMDIuMS00OS41IDE0MC41TDQ3MyA0NzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDIuNS00Mi41ek0yODAgMTg0bDAgOTQuMSA0MSA0MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00OC00OGMtNC41LTQuNS03LTEwLjYtNy0xN2wwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0eiJdCiAgICB9OwogICAgZmFOZXdzcGFwZXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAibmV3c3BhcGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjQwXSwgImYxZWEiLCAiTTE2OCA4MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAzMDRjMCA4LjQtMS40IDE2LjUtNC4xIDI0TDQ0MCA0MzJjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0zMDRjMC0xMy4zLTEwLjctMjQtMjQtMjRMMTY4IDgwek03MiA0ODBjLTM5LjggMC03Mi0zMi4yLTcyLTcyTDAgMTEyQzAgOTguNyAxMC43IDg4IDI0IDg4czI0IDEwLjcgMjQgMjRsMCAyOTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMwNGMwLTM5LjggMzIuMi03MiA3Mi03MmwyNzIgMGMzOS44IDAgNzIgMzIuMiA3MiA3MmwwIDMwNGMwIDM5LjgtMzIuMiA3Mi03MiA3Mkw3MiA0ODB6TTE5MiAxNTJjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQ4em0xNTIgMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNMjE2IDI1NmwxNzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTAgODBsMTc2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE3NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFIb3NwaXRhbCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJob3NwaXRhbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyNzk3MywgNjI1ODksICJob3NwaXRhbC1hbHQiLCAiaG9zcGl0YWwtd2lkZSJdLCAiZjBmOCIsICJNMTc2IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNDgtNDggMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzJjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTQ4IDAgMC00OGMwLTM1LjMtMjguNy02NC02NC02NEwxNzYgMHpNMTYwIDY0YzAtOC44IDcuMi0xNiAxNi0xNmwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA3MmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw3MiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDI3MmMwIDguOC03LjIgMTYtMTYgMTZsLTE3NiAwIDAtODBjMC0xNy43LTE0LjMtMzItMzItMzJsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgODAtMTc2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI3MmMwLTguOCA3LjItMTYgMTYtMTZsNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTcyek0xMTIgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTk2IDMzNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0zMjAgMGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNi0xMTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNMjY0IDEwNGwwIDMyLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwIDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIgMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDAgMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnoiXQogICAgfTsKICAgIGZhSG9zcGl0YWxBbHQgPSBmYUhvc3BpdGFsOwogICAgZmFIb3NwaXRhbFdpZGUgPSBmYUhvc3BpdGFsOwogICAgZmFDaXJjbGVTdG9wID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1zdG9wIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIwOTQsICJzdG9wLWNpcmNsZSJdLCAiZjI4ZCIsICJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjAgMTkybDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMjggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTQ4IDExMmwwLTk2IDk2IDAgMCA5Ni05NiAweiJdCiAgICB9OwogICAgZmFTdG9wQ2lyY2xlID0gZmFDaXJjbGVTdG9wOwogICAgZmFPYmplY3RVbmdyb3VwID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIm9iamVjdC11bmdyb3VwIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyNDgiLCAiTTQ4LjIgNjYuOGMtLjEtLjgtLjItMS43LS4yLTIuNWwwLS4yYzAtOC44IDcuMi0xNiAxNi0xNiAuOSAwIDEuOSAuMSAyLjggLjIgNy41IDEuMyAxMy4yIDcuOSAxMy4yIDE1LjggMCA4LjgtNy4yIDE2LTE2IDE2LTcuOSAwLTE0LjUtNS43LTE1LjgtMTMuMnpNMCA2NGMwIDI2LjkgMTYuNSA0OS45IDQwIDU5LjNsMCAxMDUuM2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0IDI2LjkgMCA0OS45LTE2LjUgNTkuMy00MGwyMDEuMyAwYzkuNSAyMy41IDMyLjUgNDAgNTkuMyA0MCAzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNsMC0xMDUuM2MyMy41LTkuNSA0MC0zMi41IDQwLTU5LjMgMC0zNS4zLTI4LjctNjQtNjQtNjQtMjYuOSAwLTQ5LjkgMTYuNS01OS4zIDQwTDEyMy4zIDQwQzExMy45IDE2LjUgOTAuOSAwIDY0IDAgMjguNyAwIDAgMjguNyAwIDY0em0zNjggMGExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwek0zMjQuNyA4OGM2LjUgMTYgMTkuMyAyOC45IDM1LjMgMzUuM2wwIDEwNS4zYy0xNiA2LjUtMjguOSAxOS4zLTM1LjMgMzUuM2wtMjAxLjMgMGMtNi41LTE2LTE5LjMtMjguOS0zNS4zLTM1LjNsMC0xMDUuM2MxNi02LjUgMjguOS0xOS4zIDM1LjMtMzUuM2wyMDEuMyAwek0zODQgMjcyYTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnpNODAgMjg4YzAgNy45LTUuNyAxNC41LTEzLjIgMTUuOC0uOCAuMS0xLjcgLjItMi41IC4ybC0uMiAwYy04LjggMC0xNi03LjItMTYtMTYgMC0uOSAuMS0xLjkgLjItMi44IDEuMy03LjUgNy45LTEzLjIgMTUuOC0xMy4yIDguOCAwIDE2IDcuMiAxNiAxNnptNDM2LjctNDBjNi41IDE2IDE5LjMgMjguOSAzNS4zIDM1LjNsMCAxMDUuM2MtMTYgNi41LTI4LjkgMTkuMy0zNS4zIDM1LjNsLTIwMS4zIDBjLTYuNS0xNi0xOS4zLTI4LjktMzUuMy0zNS4zbDAtMjAuNy00OCAwIDAgMjAuN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0IDI2LjkgMCA0OS45LTE2LjUgNTkuMy00MGwyMDEuMyAwYzkuNSAyMy41IDMyLjUgNDAgNTkuMyA0MCAzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNsMC0xMDUuM2MyMy41LTkuNSA0MC0zMi41IDQwLTU5LjMgMC0zNS4zLTI4LjctNjQtNjQtNjQtMjYuOSAwLTQ5LjkgMTYuNS01OS4zIDQwbC01Mi43IDAgMCA5LjZjMTAuNyAxMC45IDE5LjEgMjMuOSAyNC42IDM4LjRsMjggMHptNTkuMy04YTE2IDE2IDAgMSAxIDAtMzIgMTYgMTYgMCAxIDEgMCAzMnpNMjcxLjggNDUwLjdhMTYgMTYgMCAxIDEgLTMxLjUtNS41IDE2IDE2IDAgMSAxIDMxLjUgNS41em0zMDEuNSAxM2MtNy41LTEuMy0xMy4yLTcuOS0xMy4yLTE1LjggMC04LjggNy4yLTE2IDE2LTE2IDcuOSAwIDE0LjUgNS43IDE1LjggMTMuMmwwIC4xYy4xIC45IC4yIDEuOCAuMiAyLjcgMCA4LjgtNy4yIDE2LTE2IDE2LS45IDAtMS45LS4xLTIuOC0uMnoiXQogICAgfTsKICAgIGZhQ29tbWVudCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjb21tZW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDg5LCA2MTY2OV0sICJmMDc1IiwgIk01MS45IDM4NC45QzE5LjMgMzQ0LjYgMCAyOTQuNCAwIDI0MCAwIDEwNy41IDExNC42IDAgMjU2IDBTNTEyIDEwNy41IDUxMiAyNDAgMzk3LjQgNDgwIDI1NiA0ODBjLTM2LjUgMC03MS4yLTcuMi0xMDIuNi0yMEwzNyA1MDkuOWMtMy43IDEuNi03LjUgMi4xLTExLjUgMi4xLTE0LjEgMC0yNS41LTExLjQtMjUuNS0yNS41IDAtNC4zIDEuMS04LjUgMy4xLTEyLjJsNDguOC04OS40em0zNy4zLTMwLjJjMTIuMiAxNS4xIDE0LjEgMzYuMSA0LjggNTMuMmwtMTggMzMuMSA1OC41LTI1LjFjMTEuOC01LjEgMjUuMi01LjIgMzcuMS0uMyAyNS43IDEwLjUgNTQuMiAxNi40IDg0LjMgMTYuNCAxMTcuOCAwIDIwOC04OC44IDIwOC0xOTJTMzczLjggNDggMjU2IDQ4IDQ4IDEzNi44IDQ4IDI0MGMwIDQyLjggMTUuMSA4Mi40IDQxLjIgMTE0Ljd6Il0KICAgIH07CiAgICBmYUNoZXNzUGF3biA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1wYXduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTgyM10sICJmNDQzIiwgIk0xOTItMzJjNjYuMyAwIDEyMCA1My43IDEyMCAxMjAgMCAyNy42LTkuMyA1Mi45LTI0LjkgNzMuMiA5LjggMyAxNi45IDEyLjEgMTYuOSAyMi44IDAgMTMuMy0xMC43IDI0LTI0IDI0bC0uNiAwIDI0LjYgMTYwIDUzLjYgNjdjNi43IDguNCAxMC40IDE4LjggMTAuNCAyOS42IDAgMjYuMi0yMS4yIDQ3LjQtNDcuNCA0Ny40TDYzLjQgNTEyYy0yNi4yIDAtNDcuNC0yMS4yLTQ3LjQtNDcuNCAwLTEwLjggMy43LTIxLjIgMTAuNC0yOS42bDUzLjYtNjcgMjQuNi0xNjAtLjYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjQgMC0xMC44IDcuMS0xOS44IDE2LjktMjIuOC0xNS42LTIwLjMtMjQuOS00NS42LTI0LjktNzMuMiAwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMHpNMTE1LjkgNDAwbC01MS4yIDY0IDI1NC43IDAtNTEuMi02NC0xNTIuMiAwem0zNi4yLTE4NC43bC0yMSAxMzYuNyAxMjEuOSAwLTIxLTEzNi43LTEuMS03LjMtNzcuNiAwLTEuMSA3LjN6TTE5MiAxNmE3MiA3MiAwIDEgMCAwIDE0NCA3MiA3MiAwIDEgMCAwLTE0NHoiXQogICAgfTsKICAgIGZhQ2FsZW5kYXJQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyLXBsdXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI3MSIsICJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MCAxNjAgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0em0wIDExMmwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjg4YzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yODhjMC04LjgtNy4yLTE2LTE2LTE2bC0yNjQgMHptMTA0IDY0YzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDggNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMCAwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDgtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0OCAwIDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUNsaXBib2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyMDNdLCAiZjMyOCIsICJNMjMyIDk2bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6bTAgNDhjMzcuMSAwIDY3LjYtMjggNzEuNi02NEwzMjAgODBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzUyYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA5NmMwLTguOCA3LjItMTYgMTYtMTZsMTYuNCAwYzQgMzYgMzQuNSA2NCA3MS42IDY0bDgwIDB6TTI5MS45IDMyQzI3OSAxMi43IDI1NyAwIDIzMiAwTDE1MiAwYy0yNSAwLTQ3IDEyLjctNTkuOSAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzUyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC0yOC4xIDB6Il0KICAgIH07CiAgICBmYVRodW1ic0Rvd24gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAidGh1bWJzLWRvd24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgwNzgsIDYxNTc2XSwgImYxNjUiLCAiTTM2MCAzMmw3LjQgLjRjMzUgMy42IDYyLjUgMzIuMiA2NC40IDY3LjcgMTcuOCAxMS44IDMwLjEgMzEuNCAzMiA1My45bC4yIDZjMCA1LjctLjcgMTEuMi0yIDE2LjUgMTAuMiAxMS41IDE2LjggMjYuMyAxNy44IDQyLjdsLjIgNC44YzAgMTMuMi0zLjYgMjUuNC05LjggMzYgNC45IDguNCA4LjIgMTcuOSA5LjMgMjhsLjQgOGMwIDM3LjMtMjguMyA2Ny45LTY0LjYgNzEuNmwtNy40IC40LTEwOS43IDAgMTQuMSAzMCAzLjEgNy42YzEyLjUgMzUuNy0xLjggNzUuNS0zNC4yIDk1bC03LjIgMy45Yy0zNy41IDE3LjYtODEuNyAzLjYtMTAyLjYtMzEuMmwtLjYtLjktMi43LTUtLjYtMS4yLTMwLjEtNjRjLTkuNCAxNy44LTI4IDI5LjktNDkuNSAyOS45bC0zMiAwYy0zMC45IDAtNTYtMjUuMS01Ni01NkwwIDE1MmMwLTMwLjkgMjUuMS01NiA1Ni01NmwzMiAwYzEyLjQgMCAyMy45IDQuMSAzMy4yIDExIDEzLjItMjEuNCAzMi0zOS40IDU1LTUxLjZsMTIuMi02LjUgLjctLjMgNi42LTMuMiAuNy0uMyA3LjEtM2MxNi43LTYuNiAzNC41LTkuOSA1Mi42LTkuOUwzNjAgMzJ6TTI1NS45IDgwYy0xMiAwLTIzLjkgMi4zLTM1LjEgNi42bC00LjcgMi01LjMgMi42IDAgMC0xMi4yIDYuNWMtMjkuMiAxNS41LTQ4LjMgNDQuOS01MC43IDc3LjZsLS4yIDggMCAxMTIuOSAuMSA0LjFjLjUgOC4yIDIuNSAxNi4yIDYgMjMuN2w1Ni44IDEyMC45IDIuMSAzLjhjOC40IDEzLjcgMjYgMTkuMSA0MC44IDEyLjJsMi45LTEuNmMxMy03LjggMTguNy0yMy43IDEzLjctMzhsLTEuMi0zLTMwLjItNjQuMmMtMy41LTcuNC0yLjktMTYuMSAxLjUtMjMuMXMxMi0xMS4xIDIwLjItMTEuMWwxNDcuNSAwIDIuNC0uMWMxMS4zLTEuMSAyMC4zLTEwLjEgMjEuNC0yMS40bC4xLTIuNWMwLTcuMS0zLjEtMTMuNS04LjItMTgtNS4yLTQuNi04LjItMTEuMS04LjItMThzMy0xMy40IDguMi0xOGM0LjQtMy45IDcuNC05LjMgOC0xNS4zbC4yLTIuN2MwLTguNC00LjQtMTUuOS0xMS4yLTIwLjItMTAuNy02LjktMTQuMi0yMC45LTgtMzIgMS41LTIuNiAyLjUtNS42IDIuOS04LjZsLjItMy4yYzAtMTAuNi02LjktMTkuNi0xNi42LTIyLjgtMTEuNy0zLjgtMTguNy0xNS45LTE2LTI4IC4yLS45IC4zLTEuOCAuNC0yLjZsLjItMi42YzAtMTIuNC05LjUtMjIuNi0yMS42LTIzLjhMMzYwIDgwIDI1NS45IDgwek01NiAxNDRjLTQuNCAwLTggMy42LTggOGwwIDIyNGMwIDQuNCAzLjYgOCA4IDhsMzIgMGM0LjQgMCA4LTMuNiA4LThsMC0yMjRjMC00LjQtMy42LTgtOC04bC0zMiAweiJdCiAgICB9OwogICAgZmFJZEJhZGdlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImlkLWJhZGdlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYyYzEiLCAiTTI1NiA0OGwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2LTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM4NGMwIDguOCA3LjIgMTYgMTYgMTZsMjU2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzg0YzAtOC44LTcuMi0xNi0xNi0xNmwtNjQgMHpNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek0xNjAgMzIwbDY0IDBjNDQuMiAwIDgwIDM1LjggODAgODAgMCA4LjgtNy4yIDE2LTE2IDE2TDk2IDQxNmMtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwem0tMjQtOTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAweiJdCiAgICB9OwogICAgZmFTcXVhcmVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtY2hlY2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5NzQ1LCA5OTg5LCA2MTUxMCwgImNoZWNrLXNxdWFyZSJdLCAiZjE0YSIsICJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MHptMjMwLjcgODkuOWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjMgMTAuNyA3LjggMTMuMSAyMi44IDUuMyAzMy41TDIxMS40IDM2Ni4xYy00LjEgNS43LTEwLjUgOS4zLTE3LjUgOS44LTcgLjUtMTMuOS0yLTE4LjgtNi45bC01NS45LTU1LjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzNiAzNiAxMDUuNi0xNDUuMnoiXQogICAgfTsKICAgIGZhQ2hlY2tTcXVhcmUgPSBmYVNxdWFyZUNoZWNrOwogICAgZmFDaGVzc0Jpc2hvcCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1iaXNob3AiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFs5ODIxXSwgImY0M2EiLCAiTTIxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwIDgxLjggOTguMWMyNC43IDI5LjYgMzguMiA2NyAzOC4yIDEwNS42IDAgNDMuNy0xNy40IDg1LjctNDguMyAxMTYuNmwtOC42IDguNiA0Ni41IDU4LjJjNi43IDguNCAxMC40IDE4LjggMTAuNCAyOS42IDAgMjYuMi0yMS4yIDQ3LjQtNDcuNCA0Ny40TDQ3LjQgNTEyQzIxLjIgNTEyIDAgNDkwLjggMCA0NjQuNiAwIDQ1My45IDMuNyA0NDMuNCAxMC40IDQzNWw0Ni41LTU4LjItOC42LTguNkMxNy40IDMzNy40IDAgMjk1LjQgMCAyNTEuNyAwIDIxMy4xIDEzLjUgMTc1LjggMzguMiAxNDYuMUwxMjAgNDggMTA0IDQ4QzkwLjcgNDggODAgMzcuMyA4MCAyNFM5MC43IDAgMTA0IDBMMjE2IDB6TTk0LjQgNDA2LjhsLTQ1LjcgNTcuMiAyMjIuNyAwLTQ1LjctNTcuMS01LjUtNi45LTEyMC4zIDAtNS41IDYuOHpNMTU2LjkgNzguN0w3NS4xIDE3Ni44Yy0xNS4zIDE4LjQtMjQuNiA0MS0yNi43IDY0LjdMNDggMjUxLjdjMCAzMSAxMi4zIDYwLjcgMzQuMiA4Mi43bDE3LjcgMTcuNyAxMjAuMiAwYzYuMi02LjIgMTIuMS0xMi4xIDE3LjgtMTcuNyAyMS45LTIxLjkgMzQuMi01MS42IDM0LjItODIuNmwtLjQtMTAuMmMtMS41LTE3LTYuNy0zMy4zLTE1LjItNDhMMjA5IDI0MWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1MS44LTUxLjgtNjMuNy03Ni41LTMuMS0zLjgtMy4xIDMuOHoiXQogICAgfTsKICAgIGZhRW52ZWxvcGVPcGVuID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImVudmVsb3BlLW9wZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjEzNV0sICJmMmI2IiwgIk01MTIgNDE2YzAgMzUuMy0yOC41IDY0LTYzLjkgNjRMNjQgNDgwYy0zNS40IDAtNjQtMjguNy02NC02NEwwIDE2NGMuMS0xNS41IDcuOC0zMCAyMC41LTM4LjhMMjA2LTIuN2MzMC4xLTIwLjcgNjkuOC0yMC43IDk5LjkgMEw0OTEuNSAxMjUuMmMxMi44IDguOCAyMC40IDIzLjMgMjAuNSAzOC44bDAgMjUyek02NCA0MzJsMzg0LjEgMGM4LjggMCAxNS45LTcuMSAxNS45LTE2bDAtMTkxLjctMTU0LjggMTE3LjRjLTMxLjQgMjMuOS03NC45IDIzLjktMTA2LjQgMEw0OCAyMjQuMyA0OCA0MTZjMCA4LjkgNy4yIDE2IDE2IDE2ek00NjMuNiAxNjQuNEwyNzguNyAzNi44Yy0xMy43LTkuNC0zMS43LTkuNC00NS40IDBMNDguNCAxNjQuNCAyMzEuOCAzMDMuNWMxNC4zIDEwLjggMzQuMSAxMC44IDQ4LjQgMEw0NjMuNiAxNjQuNHoiXQogICAgfTsKICAgIGZhQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE1MzIsICJ0aW1lcy1jaXJjbGUiLCAieG1hcmstY2lyY2xlIl0sICJmMDU3IiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NyAxNjdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDU1IDU1LTU1IDU1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNTUtNTUgNTUgNTVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01NS01NSA1NS01NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01NSA1NS01NS01NWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDB6Il0KICAgIH07CiAgICBmYVRpbWVzQ2lyY2xlID0gZmFDaXJjbGVYbWFyazsKICAgIGZhWG1hcmtDaXJjbGUgPSBmYUNpcmNsZVhtYXJrOwogICAgZmFTcXVhcmVDYXJldFVwID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1jYXJldC11cCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYXJldC1zcXVhcmUtdXAiXSwgImYxNTEiLCAiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODB6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0yMjQgNjRjNi43IDAgMTMgMi44IDE3LjYgNy43bDEwNCAxMTJjNi41IDcgOC4yIDE3LjIgNC40IDI1LjlTMzM3LjUgMzIwIDMyOCAzMjBsLTIwOCAwYy05LjUgMC0xOC4yLTUuNy0yMi0xNC40cy0yLjEtMTguOSA0LjQtMjUuOWwxMDQtMTEyYzQuNS00LjkgMTAuOS03LjcgMTcuNi03Ljd6Il0KICAgIH07CiAgICBmYUNhcmV0U3F1YXJlVXAgPSBmYVNxdWFyZUNhcmV0VXA7CiAgICBmYUZpbGVJbWFnZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWltYWdlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NDQzXSwgImYxYzUiLCAiTTE3NiA0OEw2NCA0OGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzg0YzAgOC44IDcuMiAxNiAxNiAxNmwyNTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNDAtODggMGMtMzkuOCAwLTcyLTMyLjItNzItNzJsMC04OHpNMzE2LjEgMTYwTDIyNCA2Ny45IDIyNCAxMzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjguMSAwek0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwxOTcuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDE0MS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6TTI1OS40IDQzMmwtMTM0LjggMGMtMTUuOCAwLTI4LjYtMTIuOC0yOC42LTI4LjYgMC02LjQgMi4xLTEyLjUgNi0xNy42bDY3LjYtODYuOUMxNzUgMjkyIDE4My4zIDI4OCAxOTIgMjg4czE3IDQgMjIuNCAxMC45TDI4MiAzODUuOWMzLjkgNSA2IDExLjIgNiAxNy42IDAgMTUuOC0xMi44IDI4LjYtMjguNiAyOC42ek0xMTIgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhU3F1YXJlQ2FyZXRSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtY2FyZXQtcmlnaHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY2FyZXQtc3F1YXJlLXJpZ2h0Il0sICJmMTUyIiwgIk00MDAgOTZjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMHpNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNMzIwIDI1NmMwIDYuNy0yLjggMTMtNy43IDE3LjZsLTExMiAxMDRjLTcgNi41LTE3LjIgOC4yLTI1LjkgNC40UzE2MCAzNjkuNSAxNjAgMzYwbDAtMjA4YzAtOS41IDUuNy0xOC4yIDE0LjQtMjJzMTguOS0yLjEgMjUuOSA0LjRsMTEyIDEwNGM0LjkgNC41IDcuNyAxMC45IDcuNyAxNy42eiJdCiAgICB9OwogICAgZmFDYXJldFNxdWFyZVJpZ2h0ID0gZmFTcXVhcmVDYXJldFJpZ2h0OwogICAgZmFTdW4gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3VuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTcyOF0sICJmMTg1IiwgIk0yMDAuNi03LjljLTYuNy00LjQtMTUuMS01LjItMjIuNS0yLjJTMTY1LjQtLjUgMTYzLjkgNy4zTDE0MyAxMTAuNiAzOS43IDEzMS40Yy03LjggMS42LTE0LjQgNy0xNy40IDE0LjNzLTIuMiAxNS44IDIuMiAyMi41TDgyLjcgMjU2IDI0LjUgMzQzLjhjLTQuNCA2LjctNS4yIDE1LjEtMi4yIDIyLjVzOS42IDEyLjggMTcuNCAxNC4zTDE0MyA0MDEuNCAxNjMuOSA1MDQuN2MxLjYgNy44IDcgMTQuNCAxNC4zIDE3LjRzMTUuOCAyLjIgMjIuNS0yLjJsODcuOC01OC4yIDg3LjggNTguMmM2LjcgNC40IDE1LjEgNS4yIDIyLjUgMi4yczEyLjgtOS42IDE0LjMtMTcuNGwyMC45LTEwMy4yIDEwMy4yLTIwLjljNy44LTEuNiAxNC40LTcgMTcuNC0xNC4zczIuMi0xNS44LTIuMi0yMi41bC01OC4yLTg3LjggNTguMi04Ny44YzQuNC02LjcgNS4yLTE1LjEgMi4yLTIyLjVzLTkuNi0xMi44LTE3LjQtMTQuM0w0MzMuOCAxMTAuNiA0MTMgNy4zQzQxMS40LS41IDQwNi03IDM5OC42LTEwLjFzLTE1LjgtMi4yLTIyLjUgMi4yTDI4OC40IDUwLjMgMjAwLjYtNy45ek0xODYuOSAxMzUuN2wxNy04My45IDcxLjMgNDcuM2M4IDUuMyAxOC41IDUuMyAyNi41IDBsNzEuMy00Ny4zIDE3IDgzLjljMS45IDkuNSA5LjMgMTYuOCAxOC44IDE4LjhsODMuOSAxNy00Ny4zIDcxLjNjLTUuMyA4LTUuMyAxOC41IDAgMjYuNWw0Ny4zIDcxLjMtODMuOSAxN2MtOS41IDEuOS0xNi45IDkuMy0xOC44IDE4LjhsLTE3IDgzLjktNzEuMy00Ny4zYy04LTUuMy0xOC41LTUuMy0yNi41IDBsLTcxLjMgNDcuMy0xNy04My45Yy0xLjktOS41LTkuMy0xNi45LTE4LjgtMTguOGwtODMuOS0xNyA0Ny4zLTcxLjNjNS4zLTggNS4zLTE4LjUgMC0yNi41bC00Ny4zLTcxLjMgODMuOS0xN2M5LjUtMS45IDE2LjgtOS4zIDE4LjgtMTguOHpNMjM5LjYgMjU2YTQ4LjQgNDguNCAwIDEgMSA5Ni44IDAgNDguNCA0OC40IDAgMSAxIC05Ni44IDB6bTE0NC44IDBhOTYuNCA5Ni40IDAgMSAwIC0xOTIuOCAwIDk2LjQgOTYuNCAwIDEgMCAxOTIuOCAweiJdCiAgICB9OwogICAgZmFJbWFnZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJpbWFnZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDNlIiwgIk02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMjBjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptMTI4IDMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTM2IDcyYzguNSAwIDE2LjQgNC41IDIwLjcgMTEuOGw4MCAxMzZjNC40IDcuNCA0LjQgMTYuNiAuMSAyNC4xUzM1Mi42IDM4NCAzNDQgMzg0bC0yNDAgMGMtOC45IDAtMTcuMi01LTIxLjMtMTIuOXMtMy41LTE3LjUgMS42LTI0LjhsNTYtODBjNC41LTYuNCAxMS44LTEwLjIgMTkuNy0xMC4yczE1LjIgMy44IDE5LjcgMTAuMmwxNy4yIDI0LjYgNDYuNS03OWM0LjMtNy4zIDEyLjItMTEuOCAyMC43LTExLjh6Il0KICAgIH07CiAgICBmYUxpZ2h0YnVsYiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJsaWdodGJ1bGIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxNjFdLCAiZjBlYiIsICJNMjk2LjUgMjkxLjFDMzIxIDI2NS4yIDMzNiAyMzAuNCAzMzYgMTkyIDMzNiAxMTIuNSAyNzEuNSA0OCAxOTIgNDhTNDggMTEyLjUgNDggMTkyYzAgMzguNCAxNSA3My4yIDM5LjUgOTkuMSAyMS4zIDIyLjQgNDQuOSA1NCA1My4zIDkyLjlsMTAyLjQgMGM4LjQtMzkgMzItNzAuNSA1My4zLTkyLjl6bTM0LjggMzNDMzA3LjcgMzQ5IDI4OCAzNzkuNCAyODggNDEzLjdsMCAxOC4zYzAgNDQuMi0zNS44IDgwLTgwIDgwbC0zMiAwYy00NC4yIDAtODAtMzUuOC04MC04MGwwLTE4LjNDOTYgMzc5LjQgNzYuMyAzNDkgNTIuNyAzMjQuMSAyMCAyODkuNyAwIDI0My4yIDAgMTkyIDAgODYgODYgMCAxOTIgMFMzODQgODYgMzg0IDE5MmMwIDUxLjItMjAgOTcuNy01Mi43IDEzMi4xek0xNDQgMTg0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNDguNiAzOS40LTg4IDg4LTg4IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yMi4xIDAtNDAgMTcuOS00MCA0MHoiXQogICAgfTsKICAgIGZhQWRkcmVzc0NhcmQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiYWRkcmVzcy1jYXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjIxNDAsICJjb250YWN0LWNhcmQiLCAidmNhcmQiXSwgImYyYmIiLCAiTTUxMiA4MGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMjBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQzMmMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDk2YzAtOC44IDcuMi0xNiAxNi0xNmw0NDggMHpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjA4IDI0OGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnptLTMyIDQwYy00NC4yIDAtODAgMzUuOC04MCA4MCAwIDguOCA3LjIgMTYgMTYgMTZsMTkyIDBjOC44IDAgMTYtNy4yIDE2LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwbC02NCAwek0zNzYgMTQ0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwIDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMHoiXQogICAgfTsKICAgIGZhQ29udGFjdENhcmQgPSBmYUFkZHJlc3NDYXJkOwogICAgZmFWY2FyZCA9IGZhQWRkcmVzc0NhcmQ7CiAgICBmYUZhY2VNZWggPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1tZWgiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjgsICJtZWgiXSwgImYxMWEiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMSAtNDE2IDAgMjA4IDIwOCAwIDEgMSA0MTYgMHpNMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMiAyNTYgMjU2IDAgMSAwIDAtNTEyek0xNzYgMjQwYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMTkyLTMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTE4NCAzMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFNZWggPSBmYUZhY2VNZWg7CiAgICBmYU1hcCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJtYXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MDYsIDYyMDcyXSwgImYyNzkiLCAiTTUxMiA0OGMwLTguMy00LjMtMTYtMTEuMy0yMC40cy0xNS45LTQuOC0yMy4zLTEuMUwzNTIuNSA4OC4xIDE4MCAyOS40Yy0xMy43LTQuNy0yOC43LTMuOC00MS45IDIuM0wxMy44IDkwLjNDNS40IDk0LjIgMCAxMDIuNyAwIDExMkwwIDQ2NGMwIDguMiA0LjIgMTUuOSAxMS4xIDIwLjNzMTUuNiA0LjkgMjMuMSAxLjRsMTI3LjMtNTkuOSAxNzAuNyA1Ni45YzEzLjcgNC42IDI4LjUgMy43IDQxLjYtMi41bDEyNC40LTU4LjVjOC40LTQgMTMuOC0xMi40IDEzLjgtMjEuN2wwLTM1MnpNMTQ0IDgyLjFsMCAyOTktOTYgNDUuMiAwLTI5OSA5Ni00NS4yem00OCAzMDMuM2wwLTMwMS4xIDEyOCA0My41IDAgMzAwLjMtMTI4LTQyLjd6TTM2OCAxMzRsOTYtNDcuNCAwIDI5OC4yLTk2IDQ1LjIgMC0yOTZ6Il0KICAgIH07CiAgICBmYUhhbmRQb2ludERvd24gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wb2ludC1kb3duIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYwYTciLCAiTTY0IDQ0OGwwLTE3Ny42YzUuMiAxIDEwLjUgMS42IDE2IDEuNmwxNiAwIDAgMTc2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2ek04MCAyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjRjMC02Ni4zIDUzLjctMTIwIDEyMC0xMjBsNDggMGM1Mi41IDAgOTcuMSAzMy43IDExMy40IDgwLjctMy4xLS41LTYuMi0uNy05LjQtLjctMjAgMC0zNy45IDkuMi00OS43IDIzLjYtOS00LjktMTkuNC03LjYtMzAuMy03LjYtMTUuMSAwLTI5IDUuMy00MCAxNC0xMS04LjgtMjQuOS0xNC00MC0xNGwtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC04MCAwek0wIDE5MmwwIDBjMCAxOCA2IDM0LjYgMTYgNDhsMCAyMDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGwwLTgyYzUuMSAxLjMgMTAuNSAyIDE2IDIgMjUuMyAwIDQ3LjItMTQuNyA1Ny42LTM2IDcgMi42IDE0LjUgNCAyMi40IDQgMjAgMCAzNy45LTkuMiA0OS43LTIzLjYgOSA0LjkgMTkuNCA3LjYgMzAuMyA3LjYgMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC04OEMzODQgNzUuMiAzMDguOCAwIDIxNiAwTDE2OCAwQzc1LjIgMCAwIDc1LjIgMCAxNjhsMCAyNHptMzM2IDY0YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNjRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDY0ek0xNjAgMjcyYzUuNSAwIDEwLjktLjcgMTYtMmwwIDM0YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMzIgMTYgMHptNjQtMjRsMC00MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNjRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0yNHoiXQogICAgfTsKICAgIGZhRmFjZU1laEJsYW5rID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtbWVoLWJsYW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTY2LCAibWVoLWJsYW5rIl0sICJmNWE0IiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMCAwIDQxNiAyMDggMjA4IDAgMSAwIDAtNDE2ek01MTIgMjU2YTI1NiAyNTYgMCAxIDEgLTUxMiAwIDI1NiAyNTYgMCAxIDEgNTEyIDB6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhTWVoQmxhbmsgPSBmYUZhY2VNZWhCbGFuazsKICAgIGZhRmFjZUdyaW5Ub25ndWUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXRvbmd1ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUzOSwgImdyaW4tdG9uZ3VlIl0sICJmNTg5IiwgIk00NjQgMjU2YzAtMTE0LjktOTMuMS0yMDgtMjA4LTIwOFM0OCAxNDEuMSA0OCAyNTZjMCA3NC4xIDM4LjggMTM5LjIgOTcuMSAxNzYtLjctNS4yLTEuMS0xMC42LTEuMS0xNmwwLTUzLjVjLTEwLjItMTIuNi0xOC4zLTI2LjktMjMuOC00Mi40LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNiAxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtNS41IDE1LjYtMTMuNiAyOS45LTIzLjggNDIuNWwwIDUzLjVjMCA1LjQtLjQgMTAuOC0xLjEgMTYgNTguNC0zNi44IDk3LjEtMTAxLjkgOTcuMS0xNzZ6bTQ4IDBjMCAxMTYuMy03Ny42IDIxNC42LTE4My45IDI0NS43LTE5LjUgMTYuNC00NC42IDI2LjMtNzIuMSAyNi4zcy01Mi42LTkuOS03Mi4xLTI2LjNDNzcuNiA0NzAuNiAwIDM3Mi4zIDAgMjU2IDAgMTE0LjYgMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NnpNMTc2IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNiAyMDhsMC0zNy40YzAtMTQuNy0xMS45LTI2LjYtMjYuNi0yNi42bC0yIDBjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjktMi44IDEyLjYtMjAuOCAxMi42LTIzLjYgMC0yLjUtMTEuMS0xMi4zLTE4LjktMjMuNi0xOC45bC0yIDBjLTE0LjcgMC0yNi42IDExLjktMjYuNiAyNi42bDAgMzcuNGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdCiAgICB9OwogICAgZmFHcmluVG9uZ3VlID0gZmFGYWNlR3JpblRvbmd1ZTsKICAgIGZhRnV0Ym9sID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZ1dGJvbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk5MTcsICJmdXRib2wtYmFsbCIsICJzb2NjZXItYmFsbCJdLCAiZjFlMyIsICJNMzg3IDIyOC4zYy00LjQtMi44LTcuNi03LTkuMi0xMS45cy0xLjQtMTAuMiAuNS0xNUw0MTEuNiAxMThjLTE5LjktMjIuNC00NC42LTQwLjUtNzIuNC01Mi43bC02OS4xIDU3LjZjLTQgMy4zLTkgNS4xLTE0LjEgNS4xcy0xMC4yLTEuOC0xNC4xLTUuMUwxNzIuOCA2NS4zYy0yNy44IDEyLjItNTIuNSAzMC4zLTcyLjQgNTIuN2wzMy40IDgzLjRjMS45IDQuOCAyLjEgMTAuMSAuNSAxNXMtNC45IDkuMS05LjIgMTEuOUw0OSAyNzYuMmMzIDMwLjkgMTIuNyA1OS43IDI3LjYgODUuMmw4OS43LTZjNS4yLS4zIDEwLjMgMS4xIDE0LjUgNC4yczcuMiA3LjQgOC40IDEyLjVsMjIgODcuMmMxNC40IDMuMiAyOS40IDQuOCA0NC44IDQuOHMzMC4zLTEuNyA0NC44LTQuOGwyMi04Ny4yYzEuMy01IDQuMi05LjQgOC40LTEyLjVzOS4zLTQuNSAxNC41LTQuMmw4OS43IDZjMTUtMjUuNCAyNC43LTU0LjMgMjcuNi04NS4xTDM4NyAyMjguM3pNMjU2IDBhMjU2IDI1NiAwIDEgMSAwIDUxMiAyNTYgMjU2IDAgMSAxIDAtNTEyem02MiAyMjFjOC40IDYuMSAxMS45IDE2LjkgOC43IDI2LjhsLTE4LjMgNTYuM2MtMy4yIDkuOS0xMi40IDE2LjYtMjIuOCAxNi42bC01OS4yIDBjLTEwLjQgMC0xOS42LTYuNy0yMi44LTE2LjZsLTE4LjMtNTYuM2MtMy4yLTkuOSAuMy0yMC43IDguNy0yNi44bDQ3LjktMzQuOGM4LjQtNi4xIDE5LjgtNi4xIDI4LjIgMEwzMTggMjIxeiJdCiAgICB9OwogICAgZmFGdXRib2xCYWxsID0gZmFGdXRib2w7CiAgICBmYVNvY2NlckJhbGwgPSBmYUZ1dGJvbDsKICAgIGZhRmFjZVN1cnByaXNlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2Utc3VycHJpc2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTgsICJzdXJwcmlzZSJdLCAiZjVjMiIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xNzYtODBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptLTQ4IDgwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdCiAgICB9OwogICAgZmFTdXJwcmlzZSA9IGZhRmFjZVN1cnByaXNlOwogICAgZmFGb2xkZXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZm9sZGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTkzLCAxMjg0NDcsIDYxNzE2LCAiZm9sZGVyLWJsYW5rIl0sICJmMDdiIiwgIk02NCA0MDBsMzg0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjQwYzAtOC44LTcuMi0xNi0xNi0xNmwtMTQ5LjMgMGMtMTcuMyAwLTM0LjItNS42LTQ4LTE2TDIxMi4zIDgzLjJjLTIuOC0yLjEtNi4xLTMuMi05LjYtMy4yTDY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2em0zODQgNDhMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDEzOC43IDBjMTMuOCAwIDI3LjMgNC41IDM4LjQgMTIuOGwzOC40IDI4LjhjNS41IDQuMiAxMi4zIDYuNCAxOS4yIDYuNEw0NDggODBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDBjMCAzNS4zLTI4LjcgNjQtNjQgNjR6Il0KICAgIH07CiAgICBmYUZvbGRlckJsYW5rID0gZmFGb2xkZXI7CiAgICBmYUNsb3VkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNsb3VkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTcyOV0sICJmMGMyIiwgIk04MCAxOTJjMC04OC40IDcxLjYtMTYwIDE2MC0xNjAgNDcuMSAwIDg5LjQgMjAuNCAxMTguNyA1Mi43IDEwLjYtMy4xIDIxLjgtNC43IDMzLjMtNC43IDY2LjMgMCAxMjAgNTMuNyAxMjAgMTIwIDAgMTMuMi0yLjEgMjUuOS02LjEgMzcuOCA0MS42IDIxLjEgNzAuMSA2NC4zIDcwLjEgMTE0LjIgMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTMwNCAwYy03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NCAwLTU2LjggMzIuOS0xMDUuOSA4MC43LTEyOS40LS40LTQuOC0uNy05LjctLjctMTQuNnpNMjQwIDgwYy02MS45IDAtMTEyIDUwLjEtMTEyIDExMiAwIDguNCAuOSAxNi42IDIuNyAyNC41IDIuNyAxMi4xLTQuMyAyNC4zLTE2LjEgMjguMS0zOC43IDEyLjQtNjYuNiA0OC43LTY2LjYgOTEuNCAwIDUzIDQzIDk2IDk2IDk2bDMwNCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwIDAtMzcuNC0yNS43LTY4LjktNjAuNS03Ny42LTcuNS0xLjktMTMuNi03LjItMTYuNS0xNC4zcy0yLjEtMTUuMiAyLTIxLjdjNy0xMS4xIDExLTI0LjIgMTEtMzguMyAwLTM5LjgtMzIuMi03Mi03Mi03Mi0xMS4xIDAtMjEuNSAyLjUtMzAuOCA2LjktMTAuNSA1LTIzLjEgMS43LTI5LjgtNy44LTIwLjMtMjguNi01My43LTQ3LjEtOTEuMy00Ny4xeiJdCiAgICB9OwogICAgZmFDaXJjbGUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzA4LCAxMjgzMDksIDEyODk5MiwgMTI4OTkzLCAxMjg5OTQsIDEyODk5NSwgMTI4OTk2LCA5Njc5LCA5ODk4LCA5ODk5LCAxMTA0NCwgNjE3MDgsIDYxOTE1XSwgImYxMTEiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5TcXVpbnQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXNxdWludCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUxOCwgImdyaW4tc3F1aW50Il0sICJmNTg1IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTM3Mi4yIDQ2LjNjMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjZ6bS0yNDkuNi0xNDNjNC41LTYuOCAxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAyMDggMTI1LjggMTgwLjNjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjF6bTI2My42IDIxLjFMMzUzIDIwOCAzODYuMiAyMzUuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXMzLjEgMTUuOS0zLjEgMjEuMXoiXQogICAgfTsKICAgIGZhR3JpblNxdWludCA9IGZhRmFjZUdyaW5TcXVpbnQ7CiAgICBmYUNpcmNsZVVzZXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXVzZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjE0MiwgInVzZXItY2lyY2xlIl0sICJmMmJkIiwgIk00MDYuNSAzOTkuNkMzODcuNCAzNTIuOSAzNDEuNSAzMjAgMjg4IDMyMGwtNjQgMGMtNTMuNSAwLTk5LjQgMzIuOS0xMTguNSA3OS42LTM1LjYtMzcuMy01Ny41LTg3LjktNTcuNS0xNDMuNiAwLTExNC45IDkzLjEtMjA4IDIwOC0yMDhzMjA4IDkzLjEgMjA4IDIwOGMwIDU1LjctMjEuOSAxMDYuMi01Ny41IDE0My42em0tNDAuMSAzMi43QzMzNC40IDQ1Mi40IDI5Ni42IDQ2NCAyNTYgNDY0cy03OC40LTExLjYtMTEwLjUtMzEuN2M3LjMtMzYuNyAzOS43LTY0LjMgNzguNS02NC4zbDY0IDBjMzguOCAwIDcxLjIgMjcuNiA3OC41IDY0LjN6TTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTI3MmE0MCA0MCAwIDEgMSAwLTgwIDQwIDQwIDAgMSAxIDAgODB6bS04OC00MGE4OCA4OCAwIDEgMCAxNzYgMCA4OCA4OCAwIDEgMCAtMTc2IDB6Il0KICAgIH07CiAgICBmYVVzZXJDaXJjbGUgPSBmYUNpcmNsZVVzZXI7CiAgICBmYVJlY3RhbmdsZUxpc3QgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAicmVjdGFuZ2xlLWxpc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGlzdC1hbHQiXSwgImYwMjIiLCAiTTY0IDExMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjU2YzAgOC44IDcuMiAxNiAxNiAxNmwzODQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNTZjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDExMnpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHpNMTYwIDMyMGEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0tMzItOTZhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em0xMDQtNTZsMTYwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0wIDEyOGwxNjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUxpc3RBbHQgPSBmYVJlY3RhbmdsZUxpc3Q7CiAgICBmYUhhbmQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTMwNiwgOTk5NSwgImhhbmQtcGFwZXIiXSwgImYyNTYiLCAiTTI1Ni41IDBjLTI1LjMgMC00Ny4yIDE0LjctNTcuNiAzNi03LTIuNi0xNC41LTQtMjIuNC00LTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMTY1LjUtMi43LTIuN2MtMjUtMjUtNjUuNS0yNS05MC41IDBzLTI1IDY1LjUgMCA5MC41TDEwNyA0MzdjNDggNDggMTEzLjEgNzUgMTgxIDc1bDE2LjUgMGMxLjUgMCAzLS4xIDQuNS0uNCA5MS43LTYuMiAxNjUtNzkuNCAxNzEuMS0xNzEuMSAuMy0xLjUgLjQtMyAuNC00LjVsMC0xNzZjMC0zNS4zLTI4LjctNjQtNjQtNjQtNS41IDAtMTAuOSAuNy0xNiAybDAtMmMwLTM1LjMtMjguNy02NC02NC02NC03LjkgMC0xNS40IDEuNC0yMi40IDQtMTAuNC0yMS4zLTMyLjMtMzYtNTcuNi0zNnptLTE2IDk2LjFsMC0uMSAwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEzNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTM2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTcyLjljLS4xIC42LS4xIDEuMy0uMiAxLjktMy40IDY5LjctNTkuMyAxMjUuNi0xMjkgMTI5LS42IDAtMS4zIC4xLTEuOSAuMkwyODggNDY0QzIzMi45IDQ2NCAxODAgNDQyLjEgMTQxIDQwMy4xTDUzLjIgMzE1LjNjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGw0My43IDQzLjdjNi45IDYuOSAxNy4yIDguOSAyNi4yIDUuMnMxNC44LTEyLjUgMTQuOC0yMi4ybDAtMjIzLjRjMC04LjggNy4yLTE2IDE2LTE2IDguOCAwIDE2IDcuMSAxNiAxNS45bDAgMTM2LjFjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEzNS45eiJdCiAgICB9OwogICAgZmFIYW5kUGFwZXIgPSBmYUhhbmQ7CiAgICBmYVRodW1ic1VwID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInRodW1icy11cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODA3NywgNjE1NzVdLCAiZjE2NCIsICJNMTcxLjUgMzguOEMxOTIuMyA0IDIzNi41LTEwIDI3NCA3LjZsNy4yIDMuOEMzMTYgMzIuMyAzMzAgNzYuNSAzMTIuNCAxMTRsMCAwLTE0LjEgMzAgMTA5LjcgMCA3LjQgLjRjMzYuMyAzLjcgNjQuNiAzNC40IDY0LjYgNzEuNiAwIDEzLjItMy42IDI1LjQtOS44IDM2IDYuMSAxMC42IDkuNyAyMi44IDkuOCAzNiAwIDE4LjMtNi45IDM0LjgtMTggNDcuNSAxLjMgNS4zIDIgMTAuOCAyIDE2LjUgMCAyNS4xLTEyLjkgNDctMzIuMiA1OS45LTEuOSAzNS41LTI5LjQgNjQuMi02NC40IDY3LjdsLTcuNCAuNC0xMDQuMSAwYy0xOCAwLTM1LjktMy40LTUyLjYtOS45bC03LjEtMy0uNy0uMy02LjYtMy4yLS43LS4zLTEyLjItNi41Yy0xMi4zLTYuNS0yMy4zLTE0LjctMzIuOS0yNC4xLTQuMSAyNi45LTI3LjMgNDcuNC01NS4zIDQ3LjRsLTMyIDBjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgMjAwYzAtMzAuOSAyNS4xLTU2IDU2LTU2bDMyIDBjMTAuOCAwIDIwLjkgMy4xIDI5LjUgOC41bDUwLjEtMTA2LjUgLjYtMS4yIDIuNy01IC42LS45ek01NiAxOTJjLTQuNCAwLTggMy42LTggOGwwIDIyNGMwIDQuNCAzLjYgOCA4IDhsMzIgMGM0LjQgMCA4LTMuNiA4LThsMC0yMjRjMC00LjQtMy42LTgtOC04bC0zMiAwek0yNTMuNiA1MWMtMTQuOC02LjktMzIuMy0xLjYtNDAuNyAxMmwtMi4yIDQtNTYuOCAxMjAuOWMtMy41IDcuNS01LjUgMTUuNS02IDIzLjdsLS4xIDQuMiAwIDExMi45IC4yIDcuOWMyLjQgMzIuNyAyMS40IDYyLjEgNTAuNyA3Ny43bDExLjUgNi4xIDYuMyAzLjFjMTIuNCA1LjYgMjUuOCA4LjUgMzkuNCA4LjVsMTA0LjEgMCAyLjQtLjFjMTIuMS0xLjIgMjEuNi0xMS41IDIxLjYtMjMuOWwtLjItMi42Yy0uMS0uOS0uMi0xLjctLjQtMi42LTIuNy0xMi4xIDQuMy0yNC4yIDE2LTI4IDkuNy0zLjEgMTYuNi0xMi4yIDE2LjYtMjIuOCAwLTQuMy0xLjEtOC4yLTMuMS0xMS44LTYuMy0xMS4xLTIuOC0yNS4yIDgtMzIgNi44LTQuMyAxMS4yLTExLjggMTEuMi0yMC4yIDAtNy4xLTMuMS0xMy41LTguMi0xOC01LjItNC42LTguMi0xMS4xLTguMi0xOHMzLTEzLjQgOC4yLTE4YzUuMS00LjUgOC4yLTEwLjkgOC4yLTE4bC0uMS0yLjRjLTEuMS0xMS4zLTEwLjEtMjAuMy0yMS40LTIxLjRsLTIuNC0uMS0xNDcuNSAwYy04LjIgMC0xNS44LTQuMi0yMC4yLTExLjEtNC40LTYuOS01LTE1LjctMS41LTIzLjFMMjY5IDkzLjZjNy0xNSAxLjQtMzIuNy0xMi41LTQxTDI1My42IDUxeiJdCiAgICB9OwogICAgZmFCdWlsZGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyNzk3MCwgNjE2ODddLCAiZjFhZCIsICJNNjQgNDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM4NGMwIDguOCA3LjIgMTYgMTYgMTZsODAgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA4MCA4MCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTM4NGMwLTguOC03LjItMTYtMTYtMTZMNjQgNDh6TTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptOTYgNDhjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjQwIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTk2IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNDQtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhQ2hlc3NSb29rID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNoZXNzLXJvb2siLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5ODIwXSwgImY0NDciLCAiTTM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTM4LjdjMCAxMy44LTQuNSAyNy4zLTEyLjggMzguNGwtMzUuMiA0Ni45IDAgMTEyIDQwLjggNjguMWM0LjcgNy44IDcuMiAxNi43IDcuMiAyNS44IDAgMjcuNy0yMi40IDUwLjEtNTAuMSA1MC4xTDUwLjEgNTEyYy0yNy43IDAtNTAuMS0yMi40LTUwLjEtNTAuMSAwLTkuMSAyLjUtMTggNy4yLTI1LjhMNDggMzY4IDQ4IDI1NiAxMi44IDIwOS4xQzQuNSAxOTggMCAxODQuNSAwIDE3MC43TDAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDM1MiAwek00OC4zIDQ2MC44bC0uMyAxLjFjMCAxLjIgMSAyLjEgMi4xIDIuMWwyODMuOCAwYzEuMiAwIDIuMS0xIDIuMS0yLjFsLS4zLTEuMS0zNi41LTYwLjgtMjE0LjQgMC0zNi41IDYwLjh6TTQ4IDE3MC43YzAgMi42IC42IDUuMSAxLjggNy40bDEuNCAyLjIgMCAwIDM1LjIgNDYuOSA5LjYgMTIuOCAwIDExMiAxOTIgMCAwLTExMiA5LjYtMTIuOCAzNS4yLTQ2LjkgMCAwIDEuNC0yLjJjMS4yLTIuMyAxLjgtNC44IDEuOC03LjRsMC0xMjIuNy02NCAwIDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0yNC02NCAwIDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0yNC02NCAwIDAgMTIyLjd6Il0KICAgIH07CiAgICBmYUNpcmNsZVF1ZXN0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1xdWVzdGlvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTA4LCAicXVlc3Rpb24tY2lyY2xlIl0sICJmMDU5IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI1Ni04MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDQ3LjItMzYgNjcuMi01NiA3NC41bDAgMy44YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtOC4xYzAtMjAuNSAxNC44LTM1LjIgMzAuMS00MC4yIDYuNC0yLjEgMTMuMi01LjUgMTguMi0xMC4zIDQuMy00LjIgNy43LTEwIDcuNy0xOS42IDAtMTcuNy0xNC4zLTMyLTMyLTMyek0yMjQgMzY4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYVF1ZXN0aW9uQ2lyY2xlID0gZmFDaXJjbGVRdWVzdGlvbjsKICAgIGZhRmlsZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MTk2LCAxMjg0NTksIDYxNDYyXSwgImYxNWIiLCAiTTE3NiA0OEw2NCA0OGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzg0YzAgOC44IDcuMiAxNiAxNiAxNmwyNTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNDAtODggMGMtMzkuOCAwLTcyLTMyLjItNzItNzJsMC04OHpNMzE2LjEgMTYwTDIyNCA2Ny45IDIyNCAxMzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjguMSAwek0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwxOTcuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDE0MS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6Il0KICAgIH07CiAgICBmYUZhY2VTYWRDcnkgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zYWQtY3J5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTU3LCAic2FkLWNyeSJdLCAiZjViMyIsICJNNDAwIDQwNi4xTDQwMCAyODhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNTIuNmMtMjguNyAxNS02MS40IDIzLjQtOTYgMjMuNHMtNjcuMy04LjUtOTYtMjMuNEwxNjAgMjg4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTE4LjFDNzIuNiAzNjguMiA0OCAzMTUgNDggMjU2IDQ4IDE0MS4xIDE0MS4xIDQ4IDI1NiA0OHMyMDggOTMuMSAyMDggMjA4YzAgNTktMjQuNiAxMTIuMi02NCAxNTAuMXpNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE1MiAxOTZsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMCA5LTIwIDIwLTIwem0xNzIgMjBjMC0xMSA5LTIwIDIwLTIwbDE2IDBjMTEgMCAyMCA5IDIwIDIwczkgMjAgMjAgMjAgMjAtOSAyMC0yMGMwLTMzLjEtMjYuOS02MC02MC02MGwtMTYgMGMtMzMuMSAwLTYwIDI2LjktNjAgNjAgMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjB6TTIwOCAzMzZsMCAzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4bDAtMzJjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6Il0KICAgIH07CiAgICBmYVNhZENyeSA9IGZhRmFjZVNhZENyeTsKICAgIGZhQ2FsZW5kYXJNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1taW51cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjcyIiwgIk0xMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDE2MCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTAgMTEybC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI4OGMwLTguOC03LjItMTYtMTYtMTZsLTI2NCAwem0zMiAxMzZsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFGYWNlVGlyZWQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS10aXJlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU1NSwgInRpcmVkIl0sICJmNWM4IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ni41IDY0LjNDMTk2LjEgMzAyLjEgMjIzLjggMjg4IDI1NiAyODhzNTkuOSAxNC4xIDc5LjUgMzIuM2MxOSAxNy44IDMyLjUgNDEuNyAzMi41IDYzLjcgMCA1LjQtMi43IDEwLjQtNy4yIDEzLjRzLTEwLjIgMy40LTE1LjIgMS4zbC0xNy4yLTcuNWMtMjIuOC0xMC00Ny41LTE1LjEtNzIuNC0xNS4xcy00OS42IDUuMi03Mi40IDE1LjFsLTE3LjIgNy41Yy00LjkgMi4yLTEwLjcgMS43LTE1LjItMS4zcy03LjItOC03LjItMTMuNGMwLTIyIDEzLjUtNDUuOSAzMi41LTYzLjd6TTEyMi42IDE1OS4yYzQuNS02LjggMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMjA4IDEyNS44IDE4MC4zYy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xem0yNjMuNiAyMS4xTDM1MyAyMDggMzg2LjIgMjM1LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjVzMy4xIDE1LjktMy4xIDIxLjF6Il0KICAgIH07CiAgICBmYVRpcmVkID0gZmFGYWNlVGlyZWQ7CiAgICBmYUhhbmRQb2ludFJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnQtcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBhNCIsICJNNDQ4IDEyOGwtMTc3LjYgMGMxIDUuMiAxLjYgMTAuNSAxLjYgMTZsMCAxNiAxNzYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNnpNMjI0IDE0NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMjQgMGMtNjYuMyAwLTEyMCA1My43LTEyMCAxMjBsMCA0OGMwIDUyLjUgMzMuNyA5Ny4xIDgwLjcgMTEzLjQtLjUtMy4xLS43LTYuMi0uNy05LjQgMC0yMCA5LjItMzcuOSAyMy42LTQ5LjctNC45LTktNy42LTE5LjQtNy42LTMwLjMgMC0xNS4xIDUuMy0yOSAxNC00MC04LjgtMTEtMTQtMjQuOS0xNC00MGwwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtODB6TTE5MiA2NGwwIDBjMTggMCAzNC42IDYgNDggMTZsMjA4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRsLTgyIDBjMS4zIDUuMSAyIDEwLjUgMiAxNiAwIDI1LjMtMTQuNyA0Ny4yLTM2IDU3LjYgMi42IDcgNCAxNC41IDQgMjIuNCAwIDIwLTkuMiAzNy45LTIzLjYgNDkuNyA0LjkgOSA3LjYgMTkuNCA3LjYgMzAuMyAwIDM1LjMtMjguNyA2NC02NCA2NGwtODggMEM3NS4yIDQ0OCAwIDM3Mi44IDAgMjgwbDAtNDhDMCAxMzkuMiA3NS4yIDY0IDE2OCA2NGwyNCAwem02NCAzMzZjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsNjQgMHptMTYtMTc2YzAgNS41LS43IDEwLjktMiAxNmwzNCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0zMiAwIDAgMTZ6bS0yNCA2NGwtNDAgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw2NCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0yNCAweiJdCiAgICB9OwogICAgZmFDaXJjbGVVcCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtdXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTQ2NywgImFycm93LWFsdC1jaXJjbGUtdXAiXSwgImYzNWIiLCAiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptMTEuMy0zODcuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBsLTEwNCAxMDRjLTQuNiA0LjYtNS45IDExLjUtMy41IDE3LjRzOC4zIDkuOSAxNC44IDkuOWw3MiAwIDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDE2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xMDQgNzIgMGM2LjUgMCAxMi4zLTMuOSAxNC44LTkuOXMxLjEtMTIuOS0zLjUtMTcuNGwtMTA0LTEwNHoiXQogICAgfTsKICAgIGZhQXJyb3dBbHRDaXJjbGVVcCA9IGZhQ2lyY2xlVXA7CiAgICBmYUhhbmRTY2lzc29ycyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXNjaXNzb3JzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNTciLCAiTS4yIDI3Ni4zYy0xLjItMzUuMyAyNi40LTY1IDYxLjctNjYuMmwzLjMtLjEtOC4yLTEuOEMyMi41IDIwMC41IC43IDE2Ni4zIDguMyAxMzEuOFM1MC4yIDc1LjUgODQuNyA4My4ybDE3MyAzOC4zYzIuMy0yLjkgNC42LTUuNyA3LjEtOC41bDE4LjQtMjAuM0MyOTkuOSA3NC41IDMyMy41IDY0IDM0OC4zIDY0bDEwLjIgMGM1NC4xIDAgMTA0LjEgMjguNyAxMzEuMyA3NS40bDEuNSAyLjZjMTMuNiAyMy4yIDIwLjcgNDkuNyAyMC43IDc2LjZMNTEyIDM0NGMwIDY2LjMtNTMuNyAxMjAtMTIwIDEyMGwtMTA0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMi44IC4yLTUuNiAuNS04LjMtMTkuNC0xMS0zMi41LTMxLjgtMzIuNS01NS43IDAtLjggMC0xLjYgMC0yLjRMNjYuNCAzMzhjLTM1LjMgMS4yLTY1LTI2LjQtNjYuMi02MS43em02My40LTE4LjJjLTguOCAuMy0xNS43IDcuNy0xNS40IDE2LjZzNy43IDE1LjcgMTYuNSAxNS40bDE2MS41LTUuNmM5LjgtLjMgMTguNyA1LjMgMjIuNyAxNC4yczIuMiAxOS4zLTQuNSAyNi40Yy0yLjggMi45LTQuNCA2LjctNC40IDExIDAgOC44IDcuMiAxNiAxNiAxNiA5LjEgMCAxNy40IDUuMSAyMS41IDEzLjNzMy4yIDE3LjktMi4zIDI1LjFjLTIgMi43LTMuMiA2LTMuMiA5LjYgMCA4LjggNy4yIDE2IDE2IDE2bDEwNCAwYzM5LjggMCA3Mi0zMi4yIDcyLTcybDAtMTI1LjRjMC0xOC40LTQuOS0zNi41LTE0LjItNTIuNGwtMS41LTIuNmMtMTguNi0zMi01Mi44LTUxLjYtODkuOC01MS42bC0xMC4yIDBjLTExLjMgMC0yMiA0LjgtMjkuNiAxMy4xbDAgMC0xOC40IDIwLjNjLS42IC42LTEuMSAxLjMtMS43IDEuOWw1NyAxMy4yYzguNiAyIDE0IDEwLjYgMTIgMTkuMnMtMTAuNiAxNC0xOS4yIDEyTDI2Mi44IDE3MS44IDc0LjMgMTMwYy04LjYtMS45LTE3LjIgMy41LTE5LjEgMTIuMnMzLjUgMTcuMiAxMi4yIDE5LjFsMTg3LjUgNDEuNmMxMC4yIDIuMyAxNy44IDEwLjkgMTguNyAyMS40bC4xIDFjLjYgNi42LTEuNSAxMy4xLTUuOCAxOC4xcy0xMC42IDcuOS0xNy4yIDguMkw2My42IDI1OC4xeiJdCiAgICB9OwogICAgZmFHZW0gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZ2VtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTQyXSwgImYzYTUiLCAiTTE2OC41IDcybDg3LjUgOTMgODcuNS05My0xNzUgMHpNMzgzLjkgOTkuMWwtNzIuMyA3Ni45IDEyOSAwLTU2LjYtNzYuOXptNTAgMTI0LjlMNzguMSAyMjQgMjU2IDQyMC4zIDQzMy45IDIyNHpNNzEuNSAxNzZsMTI5IDAtNzIuMy03Ni45LTU2LjYgNzYuOXptNDM0LjMgNDAuMWwtMjMyIDI1NmMtNC41IDUtMTEgNy45LTE3LjggNy45cy0xMy4yLTIuOS0xNy44LTcuOWwtMjMyLTI1NmMtNy43LTguNS04LjMtMjEuMi0xLjUtMzAuNGwxMTItMTUyYzQuNS02LjEgMTEuNy05LjggMTkuMy05LjhsMjQwIDBjNy42IDAgMTQuOCAzLjYgMTkuMyA5LjhsMTEyIDE1MmM2LjggOS4yIDYuMSAyMS45LTEuNSAzMC40eiJdCiAgICB9OwogICAgZmFSZWN0YW5nbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJyZWN0YW5nbGUteG1hcmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjE2NCwgInJlY3RhbmdsZS10aW1lcyIsICJ0aW1lcy1yZWN0YW5nbGUiLCAid2luZG93LWNsb3NlIl0sICJmNDEwIiwgIk02NCAxMTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI1NmMwIDguOCA3LjIgMTYgMTYgMTZsMzg0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjU2YzAtOC44LTcuMi0xNi0xNi0xNkw2NCAxMTJ6TTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6bTMzNC4xIDQ5LjljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTQ0LjEgNDQuMSA0NC4xIDQ0LjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDQuMS00NC4xLTQ0LjEgNDQuMWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0NC4xLTQ0LjEtNDQuMS00NC4xYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNDQuMSA0NC4xIDQ0LjEtNDQuMWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHoiXQogICAgfTsKICAgIGZhUmVjdGFuZ2xlVGltZXMgPSBmYVJlY3RhbmdsZVhtYXJrOwogICAgZmFUaW1lc1JlY3RhbmdsZSA9IGZhUmVjdGFuZ2xlWG1hcms7CiAgICBmYVdpbmRvd0Nsb3NlID0gZmFSZWN0YW5nbGVYbWFyazsKICAgIGZhVHJhc2hDYW4gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAidHJhc2gtY2FuIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjE0NjAsICJ0cmFzaC1hbHQiXSwgImYyZWQiLCAiTTE2Ni4yLTE2Yy0xMy4zIDAtMjUuMyA4LjMtMzAgMjAuOEwxMjAgNDggMjQgNDhDMTAuNyA0OCAwIDU4LjcgMCA3MlMxMC43IDk2IDI0IDk2bDQwMCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC05NiAwLTE2LjItNDMuMkMzMDcuMS03LjcgMjk1LjItMTYgMjgxLjgtMTZMMTY2LjItMTZ6TTMyIDE0NGwwIDMwNGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMwNC00OCAwIDAgMzA0YzAgOC44LTcuMiAxNi0xNiAxNkw5NiA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMwNC00OCAwem0xNjAgNzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE3NnptMTEyIDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE3NnoiXQogICAgfTsKICAgIGZhVHJhc2hBbHQgPSBmYVRyYXNoQ2FuOwogICAgZmFMaWZlUmluZyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJsaWZlLXJpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFjZCIsICJNMzg1LjEgNDE5LjFDMzQ5LjcgNDQ3LjIgMzA0LjggNDY0IDI1NiA0NjRzLTkzLjctMTYuOC0xMjkuMS00NC45bDgwLjQtODAuNGMxNC4zIDguNCAzMSAxMy4zIDQ4LjggMTMuM3MzNC41LTQuOCA0OC44LTEzLjNsODAuNCA4MC40em02OC4xIC4yQzQ4OS45IDM3NC45IDUxMiAzMTguMSA1MTIgMjU2UzQ4OS45IDEzNy4xIDQ1My4yIDkyLjdMNDY1IDgxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMNDE5LjMgNTguOEMzNzQuOSAyMi4xIDMxOC4xIDAgMjU2IDBTMTM3LjEgMjIuMSA5Mi43IDU4LjhMODEgNDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUzM3LjcgNzEuNiA0NyA4MUw1OC44IDkyLjdDMjIuMSAxMzcuMSAwIDE5My45IDAgMjU2UzIyLjEgMzc0LjkgNTguOCA0MTkuM0w0NyA0MzFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwxMS44LTExLjhDMTM3LjEgNDg5LjkgMTkzLjkgNTEyIDI1NiA1MTJzMTE4LjktMjIuMSAxNjMuMy01OC44TDQzMSA0NjVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xMS44LTExLjh6bS0zNC4xLTM0LjFsLTgwLjQtODAuNGM4LjQtMTQuMyAxMy4zLTMxIDEzLjMtNDguOHMtNC44LTM0LjUtMTMuMy00OC44bDgwLjQtODAuNEM0NDcuMiAxNjIuMyA0NjQgMjA3LjIgNDY0IDI1NnMtMTYuOCA5My43LTQ0LjkgMTI5LjF6TTM4NS4xIDkyLjlsLTgwLjQgODAuNGMtMTQuMy04LjQtMzEtMTMuMy00OC44LTEzLjNzLTM0LjUgNC44LTQ4LjggMTMuM0wxMjYuOSA5Mi45QzE2Mi4zIDY0LjggMjA3LjIgNDggMjU2IDQ4czkzLjcgMTYuOCAxMjkuMSA0NC45ek0xNzMuMyAzMDQuOEw5Mi45IDM4NS4xQzY0LjggMzQ5LjcgNDggMzA0LjggNDggMjU2czE2LjgtOTMuNyA0NC45LTEyOS4xbDgwLjQgODAuNGMtOC40IDE0LjMtMTMuMyAzMS0xMy4zIDQ4LjhzNC44IDM0LjUgMTMuMyA0OC44ek0yMDggMjU2YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6Il0KICAgIH07CiAgICBmYUNvcHlyaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjb3B5cmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxNjldLCAiZjFmOSIsICJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMDUuMSAzMDYuOWMtMjguMS0yOC4xLTI4LjEtNzMuNyAwLTEwMS44czczLjctMjguMSAxMDEuOCAwYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWMtNDYuOS00Ni45LTEyMi44LTQ2LjktMTY5LjcgMHMtNDYuOSAxMjIuOCAwIDE2OS43IDEyMi44IDQ2LjkgMTY5LjcgMGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwYy0yOC4xIDI4LjEtNzMuNyAyOC4xLTEwMS44IDB6Il0KICAgIH07CiAgICBmYUNpcmNsZUxlZnQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTg0MCwgImFycm93LWFsdC1jaXJjbGUtbGVmdCJdLCAiZjM1OSIsICJNNDggMjU2YTIwOCAyMDggMCAxIDEgNDE2IDAgMjA4IDIwOCAwIDEgMSAtNDE2IDB6bTQ2NCAwYTI1NiAyNTYgMCAxIDAgLTUxMiAwIDI1NiAyNTYgMCAxIDAgNTEyIDB6TTEyNC43IDI0NC43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmwxMDQgMTA0YzQuNiA0LjYgMTEuNSA1LjkgMTcuNCAzLjVzOS45LTguMyA5LjktMTQuOGwwLTcyIDEwNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTEwNCAwIDAtNzJjMC02LjUtMy45LTEyLjMtOS45LTE0LjhzLTEyLjktMS4xLTE3LjQgMy41bC0xMDQgMTA0eiJdCiAgICB9OwogICAgZmFBcnJvd0FsdENpcmNsZUxlZnQgPSBmYUNpcmNsZUxlZnQ7CiAgICBmYUNhbGVuZGFyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTk3LCAxMjgxOThdLCAiZjEzMyIsICJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MCAxNjAgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0em0wIDExMmwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNDggMzUyIDAgMC00OGMwLTguOC03LjItMTYtMTYtMTZsLTI2NCAwek00OCAyMjRsMCAxOTJjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE5Mi0zNTIgMHoiXQogICAgfTsKICAgIGZhRmFjZUZyb3duT3BlbiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWZyb3duLW9wZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTAsICJmcm93bi1vcGVuIl0sICJmNTdhIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTE4Mi40IDM4Mi41Yy0xMi40IDUuMi0yNi41LTQuMS0yMS4xLTE2LjQgMTYtMzYuNiA1Mi40LTYyLjEgOTQuOC02Mi4xczc4LjggMjUuNiA5NC44IDYyLjFjNS40IDEyLjMtOC43IDIxLjYtMjEuMSAxNi40LTIyLjQtOS41LTQ3LjQtMTQuOC03My43LTE0LjhzLTUxLjMgNS4zLTczLjcgMTQuOHpNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFGcm93bk9wZW4gPSBmYUZhY2VGcm93bk9wZW47CiAgICBmYUNoYXJ0QmFyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNoYXJ0LWJhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJiYXItY2hhcnQiXSwgImYwODAiLCAiTTQ4IDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgNDIuNyAwIDU2TDAgNDAwYzAgNDQuMiAzNS44IDgwIDgwIDgwbDQwOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDgwIDQzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJMNDggNTZ6bTEwNCA3MmwyMDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwxNTIgODBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjR6bTAgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAwem0wIDExMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjcyIDB6Il0KICAgIH07CiAgICBmYUJhckNoYXJ0ID0gZmFDaGFydEJhcjsKICAgIGZhSG91c2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaG91c2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NjgsIDYzNDk4LCA2MzUwMCwgImhvbWUiLCAiaG9tZS1hbHQiLCAiaG9tZS1sZy1hbHQiXSwgImYwMTUiLCAiTTI0MCA2LjFjOS4xLTguMiAyMi45LTguMiAzMiAwbDIzMiAyMDhjOS45IDguOCAxMC43IDI0IDEuOCAzMy45cy0yNCAxMC43LTMzLjkgMS44bC04LTcuMiAwIDIwNS4zYzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yODggMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0yMDUuMy04IDcuMmMtOS45IDguOC0yNSA4LTMzLjktMS44cy04LTI1IDEuOC0zMy45TDI0MCA2LjF6bTE2IDUwLjFMOTYgMTk5LjcgOTYgNDQ4YzAgOC44IDcuMiAxNiAxNiAxNmw0OCAwIDAtMTA0YzAtMzkuOCAzMi4yLTcyIDcyLTcybDQ4IDBjMzkuOCAwIDcyIDMyLjIgNzIgNzJsMCAxMDQgNDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNDguMy0xNjAtMTQzLjR6TTIwOCA0NjRsOTYgMCAwLTEwNGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMDR6Il0KICAgIH07CiAgICBmYUhvbWUgPSBmYUhvdXNlOwogICAgZmFIb21lQWx0ID0gZmFIb3VzZTsKICAgIGZhSG9tZUxnQWx0ID0gZmFIb3VzZTsKICAgIGZhRmFjZUZyb3duID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZnJvd24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5Nzg1LCAiZnJvd24iXSwgImYxMTkiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMzM0LjcgMzg0LjZDMzE5LjcgMzY5IDI5My42IDM1MiAyNTYgMzUycy02My43IDE3LTc4LjcgMzIuNmMtOS4yIDkuNi0yNC40IDkuOS0zMy45IC43cy05LjktMjQuNC0uNy0zMy45YzIyLjEtMjMgNjAtNDcuNCAxMTMuMy00Ny40czkxLjIgMjQuNCAxMTMuMyA0Ny40YzkuMiA5LjYgOC45IDI0LjgtLjcgMzMuOXMtMjQuOCA4LjktMzMuOS0uN3pNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFGcm93biA9IGZhRmFjZUZyb3duOwogICAgZmFVc2VyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInVzZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgxMDAsIDYyMTQ0LCA2MjQ3MCwgInVzZXItYWx0IiwgInVzZXItbGFyZ2UiXSwgImYwMDciLCAiTTE0NCAxMjhhODAgODAgMCAxIDEgMTYwIDAgODAgODAgMCAxIDEgLTE2MCAwem0yMDggMGExMjggMTI4IDAgMSAwIC0yNTYgMCAxMjggMTI4IDAgMSAwIDI1NiAwek00OCA0ODBjMC03MC43IDU3LjMtMTI4IDEyOC0xMjhsOTYgMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGwwIDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLThjMC05Ny4yLTc4LjgtMTc2LTE3Ni0xNzZsLTk2IDBDNzguOCAzMDQgMCAzODIuOCAwIDQ4MGwwIDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTh6Il0KICAgIH07CiAgICBmYVVzZXJBbHQgPSBmYVVzZXI7CiAgICBmYVVzZXJMYXJnZSA9IGZhVXNlcjsKICAgIGZhU25vd2ZsYWtlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNub3dmbGFrZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEwMDUyLCAxMDA1NF0sICJmMmRjIiwgIk0yODAuMS04YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNzguMS0yMy0yM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw1NyA1NyAwIDc2LjUtNjYuMi0zOC4yLTIwLjktNzcuOGMtMy40LTEyLjgtMTYuNi0yMC40LTI5LjQtMTdTOTUuMiA5OCA5OC43IDExMC44bDguNCAzMS41LTY3LjYtMzlDMjggOTYuNiAxMy4zIDEwMC41IDYuNyAxMTJTNCAxMzguMiAxNS41IDE0NC44bDY3LjYgMzktMzEuNSA4LjRjLTEyLjggMy40LTIwLjQgMTYuNi0xNyAyOS40czE2LjYgMjAuNCAyOS40IDE3bDc3LjgtMjAuOSA2Ni4yIDM4LjItNjYuMiAzOC4yLTc3LjgtMjAuOWMtMTIuOC0zLjQtMjYgNC4yLTI5LjQgMTdzNC4yIDI2IDE3IDI5LjRsMzEuNSA4LjQtNjcuNiAzOUM0IDM3My44IC4xIDM4OC41IDYuNyA0MDBzMjEuMyAxNS40IDMyLjggOC44bDY3LjYtMzktOC40IDMxLjVjLTMuNCAxMi44IDQuMiAyNiAxNyAyOS40czI2LTQuMiAyOS40LTE3bDIwLjktNzcuOCA2Ni4yLTM4LjIgMCA3Ni41LTU3IDU3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMjMtMjMgMCA3OC4xYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03OC4xIDIzIDIzYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTctNTcgMC03Ni41IDY2LjIgMzguMiAyMC45IDc3LjhjMy40IDEyLjggMTYuNiAyMC40IDI5LjQgMTdzMjAuNC0xNi42IDE3LTI5LjRsLTguNC0zMS41IDY3LjYgMzljMTEuNSA2LjYgMjYuMiAyLjcgMzIuOC04LjhzMi43LTI2LjItOC44LTMyLjhsLTY3LjYtMzkgMzEuNS04LjRjMTIuOC0zLjQgMjAuNC0xNi42IDE3LTI5LjRzLTE2LjYtMjAuNC0yOS40LTE3bC03Ny44IDIwLjktNjYuMi0zOC4yIDY2LjItMzguMiA3Ny44IDIwLjljMTIuOCAzLjQgMjYtNC4yIDI5LjQtMTdzLTQuMi0yNi0xNy0yOS40bC0zMS41LTguNCA2Ny42LTM5YzExLjUtNi42IDE1LjQtMjEuMyA4LjgtMzIuOHMtMjEuMy0xNS40LTMyLjgtOC44bC02Ny42IDM5IDguNC0zMS41YzMuNC0xMi44LTQuMi0yNi0xNy0yOS40cy0yNiA0LjItMjkuNCAxN2wtMjAuOSA3Ny44LTY2LjIgMzguMiAwLTc2LjUgNTctNTdjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMjMgMjMgMC03OC4xeiJdCiAgICB9OwogICAgZmFCb29rbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJib29rbWFyayIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODI3OCwgNjE1OTFdLCAiZjAyZSIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA0MTcuMWMwIDI1LjYtMjguNSA0MC44LTQ5LjggMjYuNkwxOTIgNDEyLjggNDkuOCA1MDcuN0MyOC41IDUyMS45IDAgNTA2LjYgMCA0ODEuMUwwIDY0ek02NCA0OGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzg3LjIgMTE3LjQtNzguMmMxNi4xLTEwLjcgMzcuMS0xMC43IDUzLjIgMEwzMzYgNDUxLjIgMzM2IDY0YzAtOC44LTcuMi0xNi0xNi0xNkw2NCA0OHoiXQogICAgfTsKICAgIGZhU3F1YXJlQ2FyZXRMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1jYXJldC1sZWZ0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhcmV0LXNxdWFyZS1sZWZ0Il0sICJmMTkxIiwgIk00OCA0MTZjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMHptMTYgNjRjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwem02NC0yMjRjMC02LjcgMi44LTEzIDcuNy0xNy42bDExMi0xMDRjNy02LjUgMTcuMi04LjIgMjUuOS00LjRTMjg4IDE0Mi41IDI4OCAxNTJsMCAyMDhjMCA5LjUtNS43IDE4LjItMTQuNCAyMnMtMTguOSAyLjEtMjUuOS00LjRsLTExMi0xMDRjLTQuOS00LjUtNy43LTEwLjktNy43LTE3LjZ6Il0KICAgIH07CiAgICBmYUNhcmV0U3F1YXJlTGVmdCA9IGZhU3F1YXJlQ2FyZXRMZWZ0OwogICAgZmFIYW5kc2hha2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZHNoYWtlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI5MzA5LCA2MjY2MiwgImhhbmRzaGFrZS1hbHQiLCAiaGFuZHNoYWtlLXNpbXBsZSJdLCAiZjJiNSIsICJNNTk4LjEgNzUuNGMxMC43LTcuOCAxMy4xLTIyLjggNS4zLTMzLjVzLTIyLjgtMTMuMS0zMy41LTUuM2wtNzQuNSA1NC4yLTkuOS02LjZDNDY1LjggNzEgNDQyLjYgNjQgNDE4LjkgNjRsLTU5LjIgMC0uNCAwLTE0My42IDBjLTI2LjcgMC01Mi41IDguOS03My40IDI1LjFMNzAuMSAzNi42Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM3MtNS40IDI1LjcgNS4zIDMzLjVsODggNjRjOS42IDYuOSAyMi43IDUuOSAzMS4xLTIuNGwzLjktMy45YzEzLjUtMTMuNSAzMS44LTIxLjEgNTAuOS0yMS4xbDQ2LjMgMC05MS43IDkxLjdjLTE1LjYgMTUuNi0xNS42IDQwLjkgMCA1Ni42bC44IC44QzIxOCAzMDggMjk0IDMwOCAzNDAuOSAyNjEuMWwyNy4xLTI3LjEgOTcuOCA5Ny44YzE1LjYgMTUuNiAxNS42IDQwLjkgMCA1Ni42bC05LjggOS44LTMxLTMxYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDI4IDI4Yy0xNy41IDEwLjQtMzcuMiAxNi43LTU3LjYgMTguNUwzMTMgMzk5Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDE1IDE1LTMuOCAwYy0zNi4xIDAtNzAuNy0xNC4zLTk2LjItMzkuOEw2NSAyNzljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlMMTYwLjIgNDQyLjFjMzQuNSAzNC41IDgxLjMgNTMuOSAxMzAuMSA1My45bDUxLjggMCAxIDEgMS0xIDUuNyAwYzQ4LjggMCA5NS42LTE5LjQgMTMwLjEtNTMuOWwxOS45LTE5LjljMS4yLTEuMiAyLjMtMi4zIDMuNC0zLjUgLjctLjUgMS4zLTEuMSAxLjktMS43TDYwOSAzMTNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTMuOCA1My44Yy00LjItMTIuOC0xMS4zLTI0LjktMjEuNS0zNS4xTDM4NSAxODNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC00NC4xIDQ0LjFjLTI2LjUgMjYuNS02OC41IDI4LTk2LjcgNC42bDk4LjctOTguN2MxMy40LTEzLjQgMzEuNi0yMSA1MC42LTIxLjFsOC41IDAgLjIgMCA1MC44IDBjMTQuMiAwIDI4LjEgNC4yIDM5LjkgMTIuMUw0ODIuNyAxNDBjOC40IDUuNiAxOS4zIDUuMyAyNy40LS42bDg4LTY0eiJdCiAgICB9OwogICAgZmFIYW5kc2hha2VBbHQgPSBmYUhhbmRzaGFrZTsKICAgIGZhSGFuZHNoYWtlU2ltcGxlID0gZmFIYW5kc2hha2U7CiAgICBmYUZhY2VTbWlsZVdpbmsgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zbWlsZS13aW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTIxLCAic21pbGUtd2luayJdLCAiZjRkYSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xNzcuMyA2My40QzE5Mi4zIDMzNSAyMTguNCAzNTIgMjU2IDM1MnM2My43LTE3IDc4LjctMzIuNmM5LjItOS42IDI0LjQtOS45IDMzLjktLjdzOS45IDI0LjQgLjcgMzMuOWMtMjIuMSAyMy02MCA0Ny40LTExMy4zIDQ3LjRzLTkxLjItMjQuNC0xMTMuMy00Ny40Yy05LjItOS42LTguOS0yNC44IC43LTMzLjlzMjQuOC04LjkgMzMuOSAuN3pNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNjQgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBjMC0zMy4xIDI2LjktNjAgNjAtNjBsMTYgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MCAwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjAtOS0yMC0yMC0yMGwtMTYgMGMtMTEgMC0yMCA5LTIwIDIweiJdCiAgICB9OwogICAgZmFTbWlsZVdpbmsgPSBmYUZhY2VTbWlsZVdpbms7CiAgICBmYUZhY2VHcmluU3F1aW50VGVhcnMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXNxdWludC10ZWFycyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTMxNSwgImdyaW4tc3F1aW50LXRlYXJzIl0sICJmNTg2IiwgIk00MDMuMSA0MDMuMWM2Ny4yLTY3LjIgNzguOC0xNjguOSAzNC45LTI0OGwzNi43LTUuMmM0LjUtLjYgOC44LTEuNiAxMy4xLTIuOCA0NC42IDk0LjkgMjcuNyAyMTEuNS01MC43IDI5MHMtMTk1LjEgOTUuMy0yOTAgNTAuN2MxLjItNC4yIDIuMS04LjYgMi44LTEzLjFsNS4yLTM2LjdjNzkuMSA0My45IDE4MC44IDMyLjMgMjQ4LTM0Ljl6TTc1IDc1Yzc4LjQtNzguNCAxOTUuMS05NS4zIDI5MC01MC43LTEuMiA0LjItMi4xIDguNi0yLjggMTMuMWwtNS4yIDM2LjdjLTc5LjEtNDMuOS0xODAuOC0zMi4zLTI0OCAzNC45cy03OC44IDE2OC45LTM0LjkgMjQ4bC0zNi43IDUuMmMtNC41IC42LTguOCAxLjYtMTMuMSAyLjgtNDQuNi05NC45LTI3LjctMjExLjUgNTAuNy0yOTB6TTM3MC45IDIwNi41YzUuOC0xMC45IDIxLjEtMTIuNCAyNi40LTEuMyAyNS42IDUzLjUgMTYuMiAxMTkuNi0yOC4yIDE2My45LTQ0LjMgNDQuMy0xMTAuMyA1My43LTE2My44IDI4LjItMTEuMS01LjMtOS42LTIwLjYgMS4zLTI2LjQgMzItMTcuMSA2NC4yLTQwLjggOTMuOC03MC40IDI5LjctMjkuNyA1My40LTYxLjkgNzAuNS05NHpNOTMuMyAyODEuOWMtMS43LTggMi45LTE1LjkgMTAuNi0xOC40bDg0LjYtMjhjNS43LTEuOSAxMi4xLS40IDE2LjMgMy45czUuOCAxMC42IDMuOSAxNi4zbC0yOCA4NC42Yy0yLjYgNy43LTEwLjUgMTIuMy0xOC40IDEwLjZzLTEzLjQtOS0xMi43LTE3LjFsMy45LTQzLjEtNDMuMSAzLjljLTguMSAuNy0xNS41LTQuNy0xNy4xLTEyLjd6TTI5NC42IDExMC40bC0zLjkgNDMuMSA0My4xLTMuOWM4LjEtLjcgMTUuNSA0LjcgMTcuMSAxMi43cy0yLjkgMTUuOS0xMC42IDE4LjRsLTg0LjYgMjhjLTUuNyAxLjktMTIuMSAuNC0xNi4zLTMuOXMtNS44LTEwLjYtMy45LTE2LjNsMjgtODQuNmMyLjYtNy43IDEwLjUtMTIuMyAxOC40LTEwLjZzMTMuNCA5IDEyLjcgMTcuMXpNNTEyIDUxLjRjMCAyNS42LTE4LjggNDcuMy00NC4xIDUwLjlMNDIxLjEgMTA5Yy0xMC42IDEuNS0xOS42LTcuNS0xOC4xLTE4LjFsNi43LTQ2LjdDNDEzLjMgMTguOCA0MzUgMCA0NjAuNiAwIDQ4OSAwIDUxMiAyMyA1MTIgNTEuNHpNNDQuMSA0MDkuN0w5MC45IDQwM2MxMC42LTEuNSAxOS42IDcuNSAxOC4xIDE4LjFsLTYuNyA0Ni43Qzk4LjcgNDkzLjIgNzcgNTEyIDUxLjQgNTEyIDIzIDUxMiAwIDQ4OSAwIDQ2MC42IDAgNDM1IDE4LjggNDEzLjMgNDQuMSA0MDkuN3oiXQogICAgfTsKICAgIGZhR3JpblNxdWludFRlYXJzID0gZmFGYWNlR3JpblNxdWludFRlYXJzOwogICAgZmFGaWxlQXVkaW8gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1hdWRpbyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM3IiwgIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwek0yMjEuOSAyNjcuNmMtNC43IDEwLS4zIDIxLjkgOS43IDI2LjYgMTkuMiA4LjkgMzIuNCAyOC4zIDMyLjQgNTAuOHMtMTMuMiA0MS45LTMyLjQgNTAuOGMtMTAgNC43LTE0LjQgMTYuNi05LjcgMjYuNnMxNi42IDE0LjQgMjYuNiA5LjdDMjgxLjIgNDE2LjggMzA0IDM4My42IDMwNCAzNDVzLTIyLjgtNzEuOS01NS42LTg3LjFjLTEwLTQuNy0yMS45LS4zLTI2LjYgOS43ek0xMDQgMzA1Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDE2IDAgMjcuMiAzNGMzIDMuOCA3LjYgNiAxMi41IDZsLjMgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xMjhjMC04LjgtNy4yLTE2LTE2LTE2bC0uMyAwYy00LjkgMC05LjUgMi4yLTEyLjUgNmwtMjcuMiAzNC0xNiAwek0yMjMuMyAzNzNjOS45LTUuNCAxNi43LTE2IDE2LjctMjguMXMtNi43LTIyLjctMTYuNy0yOC4xYy03LjgtNC4yLTE1LjMgMy4zLTE1LjMgMTIuMWwwIDMyYzAgOC44IDcuNiAxNi4zIDE1LjMgMTIuMXoiXQogICAgfTsKICAgIGZhQ2FsZW5kYXJYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci14bWFyayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYWxlbmRhci10aW1lcyJdLCAiZjI3MyIsICJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0MCAxNjAgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0em0wIDExMmwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjg4YzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yODhjMC04LjgtNy4yLTE2LTE2LTE2bC0yNjQgMHptMTcxLjkgOTIuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtMzMuOSAzMy45IDMzLjkgMzMuOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC0zMy45LTMzLjktMzMuOSAzMy45Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMzLjktMzMuOS0zMy45LTMzLjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzMy45IDMzLjkgMzMuOS0zMy45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAweiJdCiAgICB9OwogICAgZmFDYWxlbmRhclRpbWVzID0gZmFDYWxlbmRhclhtYXJrOwogICAgZmFDaXJjbGVEb3duID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1kb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE0NjYsICJhcnJvdy1hbHQtY2lyY2xlLWRvd24iXSwgImYzNTgiLCAiTTI1NiA0NjRhMjA4IDIwOCAwIDEgMSAwLTQxNiAyMDggMjA4IDAgMSAxIDAgNDE2ek0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyIDI1NiAyNTYgMCAxIDAgMC01MTJ6TTI0NC43IDM4Ny4zYzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwbDEwNC0xMDRjNC42LTQuNiA1LjktMTEuNSAzLjUtMTcuNFMzNjYuNSAyNTYgMzYwIDI1NmwtNzIgMCAwLTEwNGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMDQtNzIgMGMtNi41IDAtMTIuMyAzLjktMTQuOCA5LjlzLTEuMSAxMi45IDMuNSAxNy40bDEwNCAxMDR6Il0KICAgIH07CiAgICBmYUFycm93QWx0Q2lyY2xlRG93biA9IGZhQ2lyY2xlRG93bjsKICAgIGZhRmlsZUxpbmVzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZpbGUtbGluZXMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjg0NDEsIDEyODQ2MiwgNjE2ODYsICJmaWxlLWFsdCIsICJmaWxlLXRleHQiXSwgImYxNWMiLCAiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6bTU2IDI1NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFGaWxlQWx0ID0gZmFGaWxlTGluZXM7CiAgICBmYUZpbGVUZXh0ID0gZmFGaWxlTGluZXM7CiAgICBmYUNvbW1lbnRzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNvbW1lbnRzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NDkwLCA2MTY3MF0sICJmMDg2IiwgIk03Ni4yIDI1OC43YzYuMS0xNS4yIDQtMzIuNi01LjYtNDUuOS0xNC41LTIwLjEtMjIuNi00My43LTIyLjYtNjguOCAwLTY2LjggNjAuNS0xMjggMTQ0LTEyOHMxNDQgNjEuMiAxNDQgMTI4LTYwLjUgMTI4LTE0NCAxMjhjLTE1LjkgMC0zMS4xLTIuMy00NS4zLTYuNS0xMC4zLTMuMS0yMS40LTIuNS0zMS40IDEuNWwtNTAuNCAyMC4yIDExLjQtMjguNXpNMCAxNDRjMCAzNS44IDExLjYgNjkuMSAzMS43IDk2LjhMMS45IDMxNS4yYy0xLjMgMy4yLTEuOSA2LjYtMS45IDEwIDAgMTQuOCAxMiAyNi44IDI2LjggMjYuOCAzLjQgMCA2LjgtLjcgMTAtMS45bDk2LjMtMzguNWMxOC42IDUuNSAzOC40IDguNCA1OC45IDguNCAxMDYgMCAxOTItNzguOCAxOTItMTc2UzI5OC0zMiAxOTItMzIgMCA0Ni44IDAgMTQ0ek0zODQgNTEyYzIwLjYgMCA0MC4zLTMgNTguOS04LjRsOTYuMyAzOC41YzMuMiAxLjMgNi42IDEuOSAxMCAxLjkgMTQuOCAwIDI2LjgtMTIgMjYuOC0yNi44IDAtMy40LS43LTYuOC0xLjktMTBsLTI5LjctNzQuNGMyMC0yNy44IDMxLjctNjEuMSAzMS43LTk2LjggMC04Mi40LTYxLjctMTUxLjUtMTQ1LTE3MC43LTEuNiAxNi4zLTUuMSAzMS45LTEwLjEgNDYuOSA2My45IDE0LjggMTA3LjIgNjcuMyAxMDcuMiAxMjMuOSAwIDI1LjEtOC4xIDQ4LjctMjIuNiA2OC44LTkuNiAxMy4zLTExLjcgMzAuNi01LjYgNDUuOWwxMS40IDI4LjUtNTAuNC0yMC4yYy0xMC00LTIxLjEtNC41LTMxLjQtMS41LTE0LjIgNC4yLTI5LjQgNi41LTQ1LjMgNi41LTcyLjIgMC0xMjcuMS00NS43LTE0MC43LTEwMS4yLTE1LjYgMy4yLTMxLjcgNS00OC4xIDUuMiAxNi40IDgxLjkgOTQuNyAxNDQgMTg4LjggMTQ0eiJdCiAgICB9OwogICAgZmFDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTUzMywgImNoZWNrLWNpcmNsZSJdLCAiZjA1OCIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAxIDAtNTEyIDI1NiAyNTYgMCAxIDEgMCA1MTJ6bTAtNDY0YTIwOCAyMDggMCAxIDAgMCA0MTYgMjA4IDIwOCAwIDEgMCAwLTQxNnptNzAuNyAxMjEuOWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjMgMTAuNyA3LjggMTMuMSAyMi44IDUuMyAzMy41TDI0My40IDM2Ni4xYy00LjEgNS43LTEwLjUgOS4zLTE3LjUgOS44LTcgLjUtMTMuOS0yLTE4LjgtNi45bC01NS45LTU1LjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzNiAzNiAxMDUuNi0xNDUuMnoiXQogICAgfTsKICAgIGZhQ2hlY2tDaXJjbGUgPSBmYUNpcmNsZUNoZWNrOwogICAgZmFNb29uID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIm1vb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3NjksIDkyMTRdLCAiZjE4NiIsICJNMjM5LjMgNDguN2MtMTA3LjEgOC41LTE5MS4zIDk4LjEtMTkxLjMgMjA3LjMgMCAxMTQuOSA5My4xIDIwOCAyMDggMjA4IDMzLjMgMCA2NC43LTcuOCA5Mi42LTIxLjctMTAzLjQtMjMuNC0xODAuNi0xMTUuOC0xODAuNi0yMjYuMyAwLTY1LjggMjcuNC0xMjUuMSA3MS4zLTE2Ny4zek0wIDI1NmMwLTE0MS40IDExNC42LTI1NiAyNTYtMjU2IDE5LjQgMCAzOC40IDIuMiA1Ni43IDYuMyA5LjkgMi4yIDE3LjMgMTAuNSAxOC41IDIwLjVzLTQgMTkuOC0xMy4xIDI0LjRjLTYwLjYgMzAuMi0xMDIuMSA5Mi43LTEwMi4xIDE2NC44IDAgMTAxLjYgODIuNCAxODQgMTg0IDE4NCA1IDAgOS45LS4yIDE0LjgtLjYgMTAuMS0uOCAxOS42IDQuOCAyMy44IDE0LjFzMiAyMC4xLTUuMyAyNy4xQzM4Ny4zIDQ4NC44IDMyNC44IDUxMiAyNTYgNTEyIDExNC42IDUxMiAwIDM5Ny40IDAgMjU2eiJdCiAgICB9OwogICAgZmFDbG9zZWRDYXB0aW9uaW5nID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNsb3NlZC1jYXB0aW9uaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyMGEiLCAiTTQ0OCAxMTJjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjU2YzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0MDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI1NmMwLTguOCA3LjItMTYgMTYtMTZsMzg0IDB6TTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0em04OCAxNDRsMzIgMGM0LjQgMCA4IDMuNiA4IDggMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTMwLjktMjUuMS01Ni01Ni01NmwtMzIgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4MGMwIDMwLjkgMjUuMSA1NiA1NiA1NmwzMiAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2IDAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgNC40LTMuNiA4LTggOGwtMzIgMGMtNC40IDAtOC0zLjYtOC04bDAtODBjMC00LjQgMy42LTggOC04em0xNjggOGMwLTQuNCAzLjYtOCA4LThsMzIgMGM0LjQgMCA4IDMuNiA4IDggMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTMwLjktMjUuMS01Ni01Ni01NmwtMzIgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4MGMwIDMwLjkgMjUuMSA1NiA1NiA1NmwzMiAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2IDAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgNC40LTMuNiA4LTggOGwtMzIgMGMtNC40IDAtOC0zLjYtOC04bDAtODB6Il0KICAgIH07CiAgICBmYUltYWdlcyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJpbWFnZXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjMwMiIsICJNNDgwIDgwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDI1NmMwIDguOC03LjIgMTYtMTYgMTZsLTMyMCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDMyMCAwek0xNjAgMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE2MCAzMnptODAgMTEyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTE0MC43IDMuOGMtNC4zLTcuMy0xMi4yLTExLjgtMjAuNy0xMS44cy0xNi40IDQuNS0yMC43IDExLjhsLTQ2LjUgNzktMTcuMi0yNC42Yy00LjUtNi40LTExLjgtMTAuMi0xOS43LTEwLjJzLTE1LjIgMy44LTE5LjcgMTAuMmwtNTYgODBjLTUuMSA3LjMtNS44IDE2LjktMS42IDI0LjhTMTkxLjEgMzIwIDIwMCAzMjBsMjQwIDBjOC42IDAgMTYuNi00LjYgMjAuOC0xMi4xczQuMi0xNi43LS4xLTI0LjFsLTgwLTEzNnpNNDggMTUyYzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMTM4LjcgMCAxNTJMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzYwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZsMC0yOTZ6Il0KICAgIH07CiAgICBmYUNpcmNsZVJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxODM4LCAiYXJyb3ctYWx0LWNpcmNsZS1yaWdodCJdLCAiZjM1YSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAxIC00MTYgMCAyMDggMjA4IDAgMSAxIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAwIDUxMiAwIDI1NiAyNTYgMCAxIDAgLTUxMiAwem0zODcuMyAxMS4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC0xMDQtMTA0Yy00LjYtNC42LTExLjUtNS45LTE3LjQtMy41UzI1NiAxNDUuNSAyNTYgMTUybDAgNzItMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTA0IDAgMCA3MmMwIDYuNSAzLjkgMTIuMyA5LjkgMTQuOHMxMi45IDEuMSAxNy40LTMuNWwxMDQtMTA0eiJdCiAgICB9OwogICAgZmFBcnJvd0FsdENpcmNsZVJpZ2h0ID0gZmFDaXJjbGVSaWdodDsKICAgIGZhSWRDYXJkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImlkLWNhcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MjE0NywgImRyaXZlcnMtbGljZW5zZSJdLCAiZjJjMiIsICJNNDggNDE2bDAtMjU2IDQ4MCAwIDAgMjU2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTkyIDBjMC00NC4yLTM1LjgtODAtODAtODBsLTY0IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwbC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZ6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIwOCAzMTJhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTM3NiAyMDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAweiJdCiAgICB9OwogICAgZmFEcml2ZXJzTGljZW5zZSA9IGZhSWRDYXJkOwogICAgZmFDaXJjbGVQbGF5ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1wbGF5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE0NjksICJwbGF5LWNpcmNsZSJdLCAiZjE0NCIsICJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMTIuNSAxNDcuNWMtNy40LTQuNS0xNi43LTQuNy0yNC4zLS41UzE3NiAxNTkuMyAxNzYgMTY4bDAgMTc2YzAgOC43IDQuNyAxNi43IDEyLjMgMjAuOXMxNi44IDQuMSAyNC4zLS41bDE0NC04OGM3LjEtNC40IDExLjUtMTIuMSAxMS41LTIwLjVzLTQuNC0xNi4xLTExLjUtMjAuNWwtMTQ0LTg4ek0yOTggMjU2bC03NCA0NS4yIDAtOTAuNCA3NCA0NS4yeiJdCiAgICB9OwogICAgZmFQbGF5Q2lyY2xlID0gZmFDaXJjbGVQbGF5OwogICAgZmFGYWNlTGF1Z2hCZWFtID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtbGF1Z2gtYmVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUxMywgImxhdWdoLWJlYW0iXSwgImY1OWEiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTE4LjMgNTguMmMtNC4yLTEzLjcgNy4xLTI2LjIgMjEuNC0yNi4ybDIzMi42IDBjMTQuMyAwIDI1LjYgMTIuNSAyMS40IDI2LjItMTggNTguOS03Mi45IDEwMS44LTEzNy43IDEwMS44UzEzNi4zIDM3My4xIDExOC4zIDMxNC4yek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXQogICAgfTsKICAgIGZhTGF1Z2hCZWFtID0gZmFGYWNlTGF1Z2hCZWFtOwogICAgZmFBZGRyZXNzQm9vayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJhZGRyZXNzLWJvb2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjEzOCwgImNvbnRhY3QtYm9vayJdLCAiZjJiOSIsICJNMzg0IDQ4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDM4NGMwIDguOC03LjIgMTYtMTYgMTZMOTYgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMODAgNjRjMC04LjggNy4yLTE2IDE2LTE2bDI4OCAwek05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI4OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDB6TTI0MCAyNDhhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6bS0zMiA0MGMtNDQuMiAwLTgwIDM1LjgtODAgODAgMCA4LjggNy4yIDE2IDE2IDE2bDE5MiAwYzguOCAwIDE2LTcuMiAxNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MGwtNjQgMHpNNTEyIDgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0ek00OTYgMTkyYy04LjggMC0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2em0xNiAxNDRjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjR6Il0KICAgIH07CiAgICBmYUNvbnRhY3RCb29rID0gZmFBZGRyZXNzQm9vazsKICAgIGZhSG91cmdsYXNzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhvdXJnbGFzcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzkyMDMsIDYyMDMyLCAiaG91cmdsYXNzLWVtcHR5Il0sICJmMjU0IiwgIk0yNCAwQzEwLjcgMCAwIDEwLjcgMCAyNFMxMC43IDQ4IDI0IDQ4bDggMCAwIDE5YzAgNDAuMyAxNiA3OSA0NC41IDEwNy41bDgxLjUgODEuNS04MS41IDgxLjVDNDggMzY2IDMyIDQwNC43IDMyIDQ0NWwwIDE5LTggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtOCAwIDAtMTljMC00MC4zLTE2LTc5LTQ0LjUtMTA3LjVsLTgxLjUtODEuNSA4MS41LTgxLjVDMzM2IDE0NiAzNTIgMTA3LjMgMzUyIDY3bDAtMTkgOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0UzM3My4zIDAgMzYwIDBMMjQgMHpNMTkyIDI4OS45bDgxLjUgODEuNUMyOTMgMzkxIDMwNCA0MTcuNCAzMDQgNDQ1bDAgMTktMjI0IDAgMC0xOWMwLTI3LjYgMTEtNTQgMzAuNS03My41TDE5MiAyODkuOXptMC02Ny45bC04MS41LTgxLjVDOTEgMTIxIDgwIDk0LjYgODAgNjdsMC0xOSAyMjQgMCAwIDE5YzAgMjcuNi0xMSA1NC0zMC41IDczLjVMMTkyIDIyMi4xeiJdCiAgICB9OwogICAgZmFIb3VyZ2xhc3NFbXB0eSA9IGZhSG91cmdsYXNzOwogICAgZmFIZWFkcGhvbmVzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhlYWRwaG9uZXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5MTEsIDYyODYzLCAiaGVhZHBob25lcy1hbHQiLCAiaGVhZHBob25lcy1zaW1wbGUiXSwgImYwMjUiLCAiTTQ4IDIyNGMwLTk3LjIgNzguOC0xNzYgMTc2LTE3NnMxNzYgNzguOCAxNzYgMTc2bDAgNDQuOGMtMTQuMS04LjItMzAuNS0xMi44LTQ4LTEyLjhsLTE2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTI4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDE2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTE2MEM0NDggMTAwLjMgMzQ3LjcgMCAyMjQgMFMwIDEwMC4zIDAgMjI0TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsMTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTEyOGMwLTI2LjUtMjEuNS00OC00OC00OGwtMTYgMGMtMTcuNSAwLTMzLjkgNC43LTQ4IDEyLjhMNDggMjI0em0wIDEyOGMwLTI2LjUgMjEuNS00OCA0OC00OGwxNiAwIDAgMTI4LTE2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMzJ6bTM1MiAwbDAgMzJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2IDAgMC0xMjggMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OHoiXQogICAgfTsKICAgIGZhSGVhZHBob25lc0FsdCA9IGZhSGVhZHBob25lczsKICAgIGZhSGVhZHBob25lc1NpbXBsZSA9IGZhSGVhZHBob25lczsKICAgIGZhRmlsZVBvd2VycG9pbnQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1wb3dlcnBvaW50IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzQiLCAiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6bTg4IDI1NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMjhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2IDI4IDBjMzcuNiAwIDY4LTMwLjQgNjgtNjhzLTMwLjQtNjgtNjgtNjhsLTUyIDB6bTUyIDg4bC0yOCAwIDAtNDAgMjggMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjB6Il0KICAgIH07CiAgICBmYVdpbmRvd01heGltaXplID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIndpbmRvdy1tYXhpbWl6ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQ3MF0sICJmMmQwIiwgIk00OCAyMjRsMCAxNjBjMCA4LjggNy4yIDE2IDE2IDE2bDM4NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE2MC00MTYgMHpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHoiXQogICAgfTsKICAgIGZhQ29tbWVudERvdHMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudC1kb3RzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTcyLCA2MjA3NSwgImNvbW1lbnRpbmciXSwgImY0YWQiLCAiTTAgMjQwYzAgNTQuNCAxOS4zIDEwNC42IDUxLjkgMTQ0LjlMMy4xIDQ3NC4zYy0yIDMuNy0zLjEgNy45LTMuMSAxMi4yIDAgMTQuMSAxMS40IDI1LjUgMjUuNSAyNS41IDQgMCA3LjgtLjYgMTEuNS0yLjFMMTUzLjQgNDYwYzMxLjQgMTIuOSA2Ni4xIDIwIDEwMi42IDIwIDE0MS40IDAgMjU2LTEwNy41IDI1Ni0yNDBTMzk3LjQgMCAyNTYgMCAwIDEwNy41IDAgMjQwek05NCA0MDcuOWM5LjMtMTcuMSA3LjQtMzguMS00LjgtNTMuMi0yNi4xLTMyLjMtNDEuMi03MS45LTQxLjItMTE0LjcgMC0xMDMuMiA5MC4yLTE5MiAyMDgtMTkyczIwOCA4OC44IDIwOCAxOTItOTAuMiAxOTItMjA4IDE5MmMtMzAuMiAwLTU4LjctNS45LTg0LjMtMTYuNC0xMS45LTQuOS0yNS4zLTQuOC0zNy4xIC4zTDc2IDQ0MC45IDk0IDQwNy45ek0xNDQgMjcyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMTQ0LTMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTgwIDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQ29tbWVudGluZyA9IGZhQ29tbWVudERvdHM7CiAgICBmYUZhY2VHcmluVG9uZ3VlV2luayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tdG9uZ3VlLXdpbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDAsICJncmluLXRvbmd1ZS13aW5rIl0sICJmNThiIiwgIk0zNjYuOSA0MzJjLjgtNS4yIDEuMS0xMC42IDEuMS0xNmwwLTUzLjVjMTAuMi0xMi42IDE4LjMtMjYuOSAyMy44LTQyLjUgNC4xLTExLjYtNy44LTIxLjQtMTkuNi0xNy44LTM0LjggMTAuNi03NC4zIDE2LjYtMTE2LjMgMTYuNi00MS45IDAtODEuNC02LTExNi4xLTE2LjUtMTEuOC0zLjYtMjMuNyA2LjEtMTkuNiAxNy44IDUuNSAxNS41IDEzLjYgMjkuOSAyMy44IDQyLjRsMCA1My41YzAgNS40IC40IDEwLjggMS4xIDE2LTU4LjQtMzYuOC05Ny4xLTEwMS45LTk3LjEtMTc2IDAtMTE0LjkgOTMuMS0yMDggMjA4LTIwOHMyMDggOTMuMSAyMDggMjA4YzAgNzQuMS0zOC44IDEzOS4yLTk3LjEgMTc2em0tMzguOCA2OS43QzQzNC40IDQ3MC42IDUxMiAzNzIuMyA1MTIgMjU2IDUxMiAxMTQuNiAzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZDMCAzNzIuMyA3Ny42IDQ3MC42IDE4My45IDUwMS43IDIwMy40IDUxOC4xIDIyOC41IDUyOCAyNTYgNTI4czUyLjYtOS45IDcyLjEtMjYuM3pNMzIwIDM3OC42bDAgMzcuNGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NGwwLTM3LjRjMC0xNC43IDExLjktMjYuNiAyNi42LTI2LjZsMiAwYzExLjMgMCAyMS4xIDcuOSAyMy42IDE4LjkgMi44IDEyLjYgMjAuOCAxMi42IDIzLjYgMCAyLjUtMTEuMSAxMi4zLTE4LjkgMjMuNi0xOC45bDIgMGMxNC43IDAgMjYuNiAxMS45IDI2LjYgMjYuNnpNMTMyIDIzMmMwLTExIDktMjAgMjAtMjBsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMHptMjI4LjQtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMjg4IDIwOGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0xMjggMGE4MCA4MCAwIDEgMCAtMTYwIDAgODAgODAgMCAxIDAgMTYwIDB6Il0KICAgIH07CiAgICBmYUdyaW5Ub25ndWVXaW5rID0gZmFGYWNlR3JpblRvbmd1ZVdpbms7CiAgICBmYUhvdXJnbGFzc0hhbGYgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaG91cmdsYXNzLWhhbGYiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiaG91cmdsYXNzLTIiXSwgImYyNTIiLCAiTTAgMjRDMCAxMC43IDEwLjcgMCAyNCAwTDM2MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04IDAgMCAxOWMwIDQwLjMtMTYgNzktNDQuNSAxMDcuNWwtODEuNSA4MS41IDgxLjUgODEuNUMzMzYgMzY2IDM1MiA0MDQuNyAzNTIgNDQ1bDAgMTkgOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC0xOWMwLTQwLjMgMTYtNzkgNDQuNS0xMDcuNWw4MS41LTgxLjUtODEuNS04MS41QzQ4IDE0NiAzMiAxMDcuMyAzMiA2N2wwLTE5LTggMEMxMC43IDQ4IDAgMzcuMyAwIDI0ek0xMTAuNSAzNzEuNWMtMy45IDMuOS03LjUgOC4xLTEwLjcgMTIuNWwxODQuNCAwYy0zLjItNC40LTYuOC04LjYtMTAuNy0xMi41bC04MS41LTgxLjUtODEuNSA4MS41ek04MC44IDQzMmMtLjUgNC4zLS44IDguNi0uOCAxM2wwIDE5IDIyNCAwIDAtMTljMC00LjQtLjMtOC43LS44LTEzTDgwLjggNDMyek0yNTQuMSAxNjBsLTEyNC4xIDAgNjIuMSA2Mi4xIDYyLjEtNjIuMXptMzkuNy00OEMzMDAuNCA5OC4xIDMwNCA4Mi43IDMwNCA2N2wwLTE5LTIyNCAwIDAgMTljMCAxNS43IDMuNiAzMS4xIDEwLjIgNDVsMjAzLjUgMHoiXQogICAgfTsKICAgIGZhSG91cmdsYXNzMiA9IGZhSG91cmdsYXNzSGFsZjsKICAgIGZhQ3JlZGl0Q2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjcmVkaXQtY2FyZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE3OSwgNjIwODMsICJjcmVkaXQtY2FyZC1hbHQiXSwgImYwOWQiLCAiTTQ0OCAxMTJjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzItNDE2IDAgMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzg0IDB6bTE2IDExMmwwIDE2MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNjAgNDE2IDB6TTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0ek04MCAzNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTE0NCAwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTY0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0eiJdCiAgICB9OwogICAgZmFDcmVkaXRDYXJkQWx0ID0gZmFDcmVkaXRDYXJkOwogICAgZmFIYW5kU3BvY2sgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1zcG9jayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQwNl0sICJmMjU5IiwgIk0xMzguMyA4MC44Yy05LjItMzMuOCAxMC41LTY4LjggNDQuMy03OC40IDM0LTkuNiA2OS40IDEwLjIgNzkgNDQuMkwyOTEuOSAxNTMuNyAzMDUuMSA4NGM2LjYtMzQuNyA0MC4xLTU3LjUgNzQuOC01MC45IDMxLjQgNiA1MyAzMy45IDUyIDY0LjkgMTAtMi42IDIwLjgtMi44IDMxLjUtLjEgMzQuMyA4LjYgNTUuMSA0My4zIDQ2LjYgNzcuNkw0NTQuNyAzOTcuMkM0MzcuOCA0NjQuNyAzNzcuMiA1MTIgMzA3LjYgNTEybC0zMy43IDBjLTU2LjkgMC0xMTIuMi0xOS0xNTcuMi01My45bC05Mi03MS42Yy0yNy45LTIxLjctMzIuOS02MS45LTExLjItODkuOHM2MS45LTMyLjkgODkuOC0xMS4ybDE3IDEzLjItNTEuOC0xMzEuMmMtMTMtMzIuOSAzLjItNzAuMSAzNi04MyAxMS4xLTQuNCAyMi43LTUuNCAzMy43LTMuN3ptNzcuMS0yMS4yYy0yLjQtOC41LTExLjItMTMuNC0xOS43LTExcy0xMy40IDExLjItMTEgMTkuN2w1NC44IDE4Mi40YzMuNSAxMi4zLTMuMyAyNS4yLTE1LjQgMjkuM3MtMjUuMy0yLTMwLTEzLjlMMTQyLjkgMTM4LjFjLTMuMi04LjItMTIuNS0xMi4zLTIwLjgtOXMtMTIuMyAxMi41LTkgMjAuOGw3My4zIDE4NS42YzEyIDMwLjMtMjMuNyA1Ny00OS40IDM3TDczLjggMzIzLjRjLTctNS40LTE3LTQuMi0yMi41IDIuOHMtNC4yIDE3IDIuOCAyMi41bDkyIDcxLjZjMzYuNSAyOC40IDgxLjQgNDMuOCAxMjcuNyA0My44bDMzLjcgMGM0Ny41IDAgODktMzIuNCAxMDAuNS03OC41bDU1LjQtMjIxLjZjMi4xLTguNi0zLjEtMTcuMy0xMS42LTE5LjRzLTE3LjMgMy4xLTE5LjQgMTEuNmwtMjYgMTA0Yy0yLjkgMTEuNy0xMy40IDE5LjktMjUuNSAxOS45LTE2LjUgMC0yOC45LTE1LTI1LjgtMzEuMkwzODMuNyA5OWMxLjctOC43LTQtMTcuMS0xMi43LTE4LjdTMzU0IDg0LjMgMzUyLjMgOTNMMzIwLjUgMjYwYy0yLjIgMTEuNi0xMi40IDIwLTI0LjIgMjAtMTEgMC0yMC43LTcuMy0yMy43LTE3LjlMMjE1LjQgNTkuNnoiXQogICAgfTsKICAgIGZhQmVsbFNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImJlbGwtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgyNzcsIDYxOTQzXSwgImYxZjYiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTg3LjgtODcuOGMxNy41LTMuMyAzMC44LTE4LjcgMzAuOC0zNy4xIDAtNi43LTEuOC0xMy4zLTUuMS0xOUw0ODUgMzIxLjdjLTE5LTMyLjYtMjktNjkuNi0yOS0xMDcuM2wwLTE0LjVjMC04NC42LTYyLjYtMTU0LjctMTQ0LTE2Ni4zbDAtOS43YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgOS43Yy00Mi4yIDYtNzkuNCAyNy44LTEwNS40IDU5LjFMNDEtMjQuOXpNMTkyLjggMTI2LjlDMjE0LjcgOTguNCAyNDkuMiA4MCAyODggODAgMzU0LjMgODAgNDA4IDEzMy43IDQwOCAyMDBsMCAxNC41YzAgNDYuMiAxMi4zIDkxLjUgMzUuNSAxMzEuNGwxMi45IDIyLjEtMjIuNiAwLTI0MS4xLTI0MS4xek0xMzIuNSAzNDUuOWMxOS41LTMzLjQgMzEuMy03MC43IDM0LjYtMTA5bC00Ni43LTQ2LjdjLS4yIDMuMy0uMyA2LjYtLjMgOS45bDAgMTQuNWMwIDM3LjctMTAgNzQuNy0yOSAxMDcuM0w2OS4xIDM1OS4yYy0zLjQgNS44LTUuMSAxMi4zLTUuMSAxOSAwIDIwLjkgMTYuOSAzNy44IDM3LjggMzcuOGwyNDQuNCAwLTQ4LTQ4LTE3OC42IDAgMTIuOS0yMi4xek0yMjAuMSA0NjRjOS45IDI4IDM2LjYgNDggNjcuOSA0OHM1OC0yMCA2Ny45LTQ4bC0xMzUuOCAweiJdCiAgICB9OwogICAgZmFTdGFyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInN0YXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMTA4OCwgNjE0NDZdLCAiZjAwNSIsICJNMjg4LjEtMzJjOSAwIDE3LjMgNS4xIDIxLjQgMTMuMUwzODMgMTI1LjMgNTQyLjkgMTUwLjdjOC45IDEuNCAxNi4zIDcuNyAxOS4xIDE2LjNzLjUgMTgtNS44IDI0LjRMNDQxLjcgMzA1LjkgNDY3IDQ2NS44YzEuNCA4LjktMi4zIDE3LjktOS42IDIzLjJzLTE3IDYuMS0yNSAyTDI4OC4xIDQxNy42IDE0My44IDQ5MWMtOCA0LjEtMTcuNyAzLjMtMjUtMnMtMTEtMTQuMi05LjYtMjMuMkwxMzQuNCAzMDUuOSAyMCAxOTEuNGMtNi40LTYuNC04LjYtMTUuOC01LjgtMjQuNHMxMC4xLTE0LjkgMTkuMS0xNi4zbDE1OS45LTI1LjQgNzMuNi0xNDQuMmM0LjEtOCAxMi40LTEzLjEgMjEuNC0xMy4xem0wIDc2LjhMMjMwLjMgMTU4Yy0zLjUgNi44LTEwIDExLjYtMTcuNiAxMi44bC0xMjUuNSAyMCA4OS44IDg5LjljNS40IDUuNCA3LjkgMTMuMSA2LjcgMjAuN2wtMTkuOCAxMjUuNSAxMTMuMy01Ny42YzYuOC0zLjUgMTQuOS0zLjUgMjEuOCAwbDExMy4zIDU3LjYtMTkuOC0xMjUuNWMtMS4yLTcuNiAxLjMtMTUuMyA2LjctMjAuN2w4OS44LTg5LjktMTI1LjUtMjBjLTcuNi0xLjItMTQuMS02LTE3LjYtMTIuOEwyODguMSA0NC44eiJdCiAgICB9OwogICAgZmFGbGFnID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZsYWciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5ODgsIDYxNzI1XSwgImYwMjQiLCAiTTQ4IDI0QzQ4IDEwLjcgMzcuMyAwIDI0IDBTMCAxMC43IDAgMjRMMCA0ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEwMCA4MC4zLTIwLjFjNDEuMS0xMC4zIDg0LjYtNS41IDEyMi41IDEzLjQgNDQuMiAyMi4xIDk1LjUgMjQuOCAxNDEuNyA3LjRsMzQuNy0xM2MxMi41LTQuNyAyMC44LTE2LjYgMjAuOC0zMGwwLTI3OS43YzAtMjMtMjQuMi0zOC00NC44LTI3LjdsLTkuNiA0LjhjLTQ2LjMgMjMuMi0xMDAuOCAyMy4yLTE0Ny4xIDAtMzUuMS0xNy42LTc1LjQtMjItMTEzLjUtMTIuNUw0OCA1MiA0OCAyNHptMCA3Ny41bDk2LjYtMjQuMmMyNy02LjcgNTUuNS0zLjYgODAuNCA4LjggNTQuOSAyNy40IDExOC43IDI5LjcgMTc1IDYuOGwwIDI0MS44LTI0LjQgOS4xYy0zMy43IDEyLjYtNzEuMiAxMC43LTEwMy40LTUuNC00OC4yLTI0LjEtMTAzLjMtMzAuMS0xNTUuNi0xNy4xbC02OC42IDE3LjIgMC0yMzd6Il0KICAgIH07CiAgICBmYUxlbW9uID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImxlbW9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3ODE5XSwgImYwOTQiLCAiTTM2OCA4MGMtMy4yIDAtNi4yIC40LTguOSAxLjMtMTkuMSA1LjUtNDYuMSAxMC43LTc0LjMgMy4zLTU3LjQtMTQuOS0xMjQuNiA3LjQtMTc0LjcgNTcuNVMzNy43IDI1OS40IDUyLjYgMzE2LjhjNy4zIDI4LjIgMi4yIDU1LjItMy4zIDc0LjMtLjggMi44LTEuMyA1LjgtMS4zIDguOSAwIDE3LjcgMTQuMyAzMiAzMiAzMiAzLjIgMCA2LjItLjQgOC45LTEuMyAxOS4xLTUuNSA0Ni4xLTEwLjcgNzQuMy0zLjMgNTcuNCAxNC45IDEyNC42LTcuNCAxNzQuNy01Ny41czcyLjQtMTE3LjMgNTcuNS0xNzQuN2MtNy4zLTI4LjItMi4yLTU1LjIgMy4zLTc0LjMgLjgtMi44IDEuMy01LjggMS4zLTguOSAwLTE3LjctMTQuMy0zMi0zMi0zMnptMC00OGM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDcuNy0xLjEgMTUuMi0zLjEgMjIuMy00LjYgMTUuOC03LjEgMzIuOS0zIDQ4LjkgMjAuMSA3Ny42LTEwLjkgMTYxLjUtNzAgMjIwLjdzLTE0My4xIDkwLjItMjIwLjcgNzBjLTE2LTQuMS0zMy0xLjYtNDguOSAzLTcuMSAyLTE0LjYgMy4xLTIyLjMgMy4xLTQ0LjIgMC04MC0zNS44LTgwLTgwIDAtNy43IDEuMS0xNS4yIDMuMS0yMi4zIDQuNi0xNS44IDcuMS0zMi45IDMtNDguOS0yMC4xLTc3LjYgMTAuOS0xNjEuNSA3MC0yMjAuN1MyMTkuMyAxOCAyOTYuOCAzOC4xYzE2IDQuMSAzMyAxLjYgNDguOS0zIDcuMS0yIDE0LjYtMy4xIDIyLjMtMy4xek0yNDYuNyAxNjdjLTUyIDE1LjItOTYuNSA1OS43LTExMS43IDExMS43LTMuNyAxMi43LTE3LjEgMjAtMjkuOCAxNi4zUzg1LjIgMjc4IDg5IDI2NS4zYzE5LjgtNjcuNyA3Ni42LTEyNC41IDE0NC4zLTE0NC4zIDEyLjctMy43IDI2LjEgMy42IDI5LjggMTYuM3MtMy42IDI2LjEtMTYuMyAyOS44eiJdCiAgICB9OwogICAgZmFXaW5kb3dSZXN0b3JlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIndpbmRvdy1yZXN0b3JlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyZDIiLCAiTTUxMiA4MEwyMjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2LTQ4IDAgMC0xNmMwLTM1LjMgMjguNy02NCA2NC02NGwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE5MmMwIDM1LjMtMjguNyA2NC02NCA2NGwtNDggMCAwLTQ4IDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTkyYzAtOC44LTcuMi0xNi0xNi0xNnpNMzY4IDI4OGwtMzIwIDAgMCAxMjhjMCA4LjggNy4yIDE2IDE2IDE2bDI4OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTEyOHpNNjQgMTYwbDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyMjRjMC0zNS4zIDI4LjctNjQgNjQtNjR6Il0KICAgIH07CiAgICBmYUZhY2VHcmluSGVhcnRzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi1oZWFydHMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjUsICJncmluLWhlYXJ0cyJdLCAiZjU4NCIsICJNNDY0IDI1NmMwIDExNC45LTkzLjEgMjA4LTIwOCAyMDhTNDggMzcwLjkgNDggMjU2YzAtMy41IC4xLTcuMSAuMy0xMC42LTE0LTEzLjktMjkuNy0zMy4xLTM5LjMtNTYuNy01LjggMjEuNC04LjkgNDQtOC45IDY3LjMgMCAxNDEuNCAxMTQuNiAyNTYgMjU2IDI1NlM1MTIgMzk3LjQgNTEyIDI1NmMwLTIzLjMtMy4xLTQ1LjktOC45LTY3LjMtOS42IDIzLjctMjUuNCA0Mi44LTM5LjMgNTYuNyAuMiAzLjUgLjMgNyAuMyAxMC42ek0zNjggNTguOWMxMS43LTYgMjQuNS05LjYgMzcuNy0xMC42LTQyLjEtMzAuNC05My44LTQ4LjMtMTQ5LjctNDguM1MxNDguNCAxNy45IDEwNi4zIDQ4LjNjMTMuMiAxIDI2IDQuNiAzNy43IDEwLjYgMTMuOC03LjEgMjkuMy0xMC45IDQ1LjEtMTAuOWwyLjkgMGM4LjkgMCAxNy42IDEuMiAyNS44IDMuNSAxMi40LTIuMyAyNS4yLTMuNSAzOC4yLTMuNXMyNS44IDEuMiAzOC4yIDMuNWM4LjItMi4zIDE2LjktMy41IDI1LjgtMy41bDIuOSAwYzE1LjggMCAzMS4zIDMuOCA0NS4xIDEwLjl6bTQuMiAyNDMuNGMtMzQuOCAxMC42LTc0LjMgMTYuNi0xMTYuMyAxNi42LTQxLjkgMC04MS40LTYtMTE2LjEtMTYuNS0xMS44LTMuNi0yMy43IDYuMS0xOS42IDE3LjggMTkuOCA1NS45IDczLjEgOTUuOSAxMzUuOCA5NS45IDYyLjcgMCAxMTYtNDAuMSAxMzUuOC05NiA0LjEtMTEuNi03LjgtMjEuNC0xOS42LTE3Ljh6TTMyMi45IDk2TDMyMCA5NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDggMCA1My40IDY2LjkgOTUuNyA4OSAxMDguMiA0LjQgMi41IDkuNiAyLjUgMTQgMCAyMi4xLTEyLjUgODktNTQuOCA4OS0xMDguMiAwLTI2LjUtMjEuNS00OC00OC00OGwtMi45IDBjLTEzLjUgMC0yNi41IDUuNC0zNiAxNC45bC05LjEgOS4xLTkuMS05LjFjLTkuNS05LjUtMjIuNS0xNC45LTM2LTE0Ljl6bS0xODggMTQuOWMtOS41LTkuNS0yMi41LTE0LjktMzYtMTQuOUw5NiA5NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDggMCA1My40IDY2LjkgOTUuNyA4OSAxMDguMiA0LjQgMi41IDkuNiAyLjUgMTQgMCAyMi4xLTEyLjUgODktNTQuOCA4OS0xMDguMiAwLTI2LjUtMjEuNS00OC00OC00OGwtMi45IDBjLTEzLjUgMC0yNi41IDUuNC0zNiAxNC45bC05LjEgOS4xLTkuMS05LjF6Il0KICAgIH07CiAgICBmYUdyaW5IZWFydHMgPSBmYUZhY2VHcmluSGVhcnRzOwogICAgZmFGYWNlS2lzc0JlYW0gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1raXNzLWJlYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MzcsICJraXNzLWJlYW0iXSwgImY1OTciLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMjQwIDE2bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCAxMi4zLTQuNiAyMy41LTEyLjIgMzIgNy42IDguNSAxMi4yIDE5LjcgMTIuMiAzMiAwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bS02NC05MmMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHptMTMyIDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6Il0KICAgIH07CiAgICBmYUtpc3NCZWFtID0gZmFGYWNlS2lzc0JlYW07CiAgICBmYUZpbGVQZGYgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1wZGYiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFjMSIsICJNMjA4IDQ4TDk2IDQ4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzODRjMCA4LjggNy4yIDE2IDE2IDE2bDgwIDAgMCA0OC04MCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwzMiA2NEMzMiAyOC43IDYwLjcgMCA5NiAwTDIyOS41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzk3LjMgMTQxLjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM2wwIDE0OS41LTQ4IDAgMC0xMjgtODggMGMtMzkuOCAwLTcyLTMyLjItNzItNzJsMC04OHpNMzQ4LjEgMTYwTDI1NiA2Ny45IDI1NiAxMzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjguMSAwek0yNDAgMzgwbDMyIDBjMzMuMSAwIDYwIDI2LjkgNjAgNjBzLTI2LjkgNjAtNjAgNjBsLTEyIDAgMCAyOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC0xMjhjMC0xMSA5LTIwIDIwLTIwem0zMiA4MGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTEyIDAgMCA0MCAxMiAwem05Ni04MGwzMiAwYzI4LjcgMCA1MiAyMy4zIDUyIDUybDAgNjRjMCAyOC43LTIzLjMgNTItNTIgNTJsLTMyIDBjLTExIDAtMjAtOS0yMC0yMGwwLTEyOGMwLTExIDktMjAgMjAtMjB6bTMyIDEyOGM2LjYgMCAxMi01LjQgMTItMTJsMC02NGMwLTYuNi01LjQtMTItMTItMTJsLTEyIDAgMCA4OCAxMiAwem03Ni0xMDhjMC0xMSA5LTIwIDIwLTIwbDQ4IDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC0yOCAwIDAgMjQgMjggMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjBsLTI4IDAgMCA0NGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC0xMjh6Il0KICAgIH07CiAgICBmYUZhY2VHcmluV2lkZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4td2lkZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUxNSwgImdyaW4tYWx0Il0sICJmNTgxIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTM3Mi4yIDQ2LjNjMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjZ6TTIyNCAxOTJjMCAzNS4zLTE0LjMgNjQtMzIgNjRzLTMyLTI4LjctMzItNjQgMTQuMy02NCAzMi02NCAzMiAyOC43IDMyIDY0em05NiA2NGMtMTcuNyAwLTMyLTI4LjctMzItNjRzMTQuMy02NCAzMi02NCAzMiAyOC43IDMyIDY0LTE0LjMgNjQtMzIgNjR6Il0KICAgIH07CiAgICBmYUdyaW5BbHQgPSBmYUZhY2VHcmluV2lkZTsKICAgIGZhRmFjZUxhdWdoU3F1aW50ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtbGF1Z2gtc3F1aW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxhdWdoLXNxdWludCJdLCAiZjU5YiIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xMjUuMiA3Ni40Yy02LjUtMTQgNS0yOC40IDIwLjQtMjguNGwyMjAuOCAwYzE1LjQgMCAyNi44IDE0LjQgMjAuNCAyOC40LTIyLjggNDkuNC03Mi44IDgzLjYtMTMwLjggODMuNnMtMTA3LjktMzQuMi0xMzAuOC04My42em0tMi42LTE3My4yYzQuNS02LjggMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMjA4IDEyNS44IDE4MC4zYy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xem0yNjMuNiAyMS4xTDM1MyAyMDggMzg2LjIgMjM1LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjVzMy4xIDE1LjktMy4xIDIxLjF6Il0KICAgIH07CiAgICBmYUxhdWdoU3F1aW50ID0gZmFGYWNlTGF1Z2hTcXVpbnQ7CiAgICBmYUZhY2VLaXNzV2lua0hlYXJ0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2Uta2lzcy13aW5rLWhlYXJ0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NTM2LCAia2lzcy13aW5rLWhlYXJ0Il0sICJmNTk4IiwgIk0zODYgNDM5LjVjLTI5LjIgMTUuNi02Mi41IDI0LjUtOTggMjQuNS0xMTQuOSAwLTIwOC05My4xLTIwOC0yMDhTMTczLjIgNDggMjg4IDQ4YzExMy4yIDAgMjA1LjIgOTAuNCAyMDcuOSAyMDIuOSAxNC4zIDEuNSAyOC42IDYgNDEuOSAxMy43IDIgMS4yIDQgMi40IDUuOSAzLjcgLjItNC4xIC4zLTguMiAuMy0xMi4zIDAtMTQxLjQtMTE0LjYtMjU2LTI1Ni0yNTZTMzIgMTE0LjYgMzIgMjU2IDE0Ni42IDUxMiAyODggNTEyYzQxLjQgMCA4MC41LTkuOCAxMTUuMS0yNy4zLTUuOC0xMi45LTEyLTI4LjUtMTcuMi00NS4yek0yNTYgMjg4YzAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMzIgMGMyNi41IDAgNDgtMjEuNSA0OC00OCAwLTEyLjMtNC42LTIzLjUtMTIuMi0zMiA3LjYtOC41IDEyLjItMTkuNyAxMi4yLTMyIDAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bS00OC00OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTE1Mi00NGwxNiAwYzExIDAgMjAgOSAyMCAyMHM5IDIwIDIwIDIwIDIwLTkgMjAtMjBjMC0zMy4xLTI2LjktNjAtNjAtNjBsLTE2IDBjLTMzLjEgMC02MCAyNi45LTYwIDYwIDAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwIDktMjAgMjAtMjB6TTU0Mi44IDM1MGMtMi4yLTE4LjMtMTIuOS0zNC42LTI4LjktNDMuOC0yOC4xLTE2LjItNjMuOS02LjYtODAuMSAyMS41bC0yLjcgNC42Yy0yNC41IDQyLjUgNy45IDExNy45IDI0LjQgMTUwLjggNS4xIDEwLjEgMTUuNSAxNi4xIDI2LjggMTUuNSAzNi43LTIuMiAxMTguMi0xMS43IDE0Mi44LTU0LjJsMi43LTQuNmMxNi4yLTI4LjEgNi42LTYzLjktMjEuNS04MC4xLTE2LTkuMi0zNS40LTEwLjQtNTIuNC0zLjFsLTkuOCA0LjItMS4zLTEwLjZ6Il0KICAgIH07CiAgICBmYUtpc3NXaW5rSGVhcnQgPSBmYUZhY2VLaXNzV2lua0hlYXJ0OwogICAgZmFDb3B5ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNvcHkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjBjNSIsICJNMzg0IDMzNmwtMTkyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI1NmMwLTguOCA3LjItMTYgMTYtMTZsMTMzLjUgMGM0LjIgMCA4LjMgMS43IDExLjMgNC43bDU4LjUgNTguNWMzIDMgNC43IDcuMSA0LjcgMTEuM0w0MDAgMzIwYzAgOC44LTcuMiAxNi0xNiAxNnpNMTkyIDM4NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5Ny41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDM3MC43IDE4LjdDMzU4LjcgNi43IDM0Mi41IDAgMzI1LjUgMEwxOTIgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyNTZjMCAzNS4zIDI4LjcgNjQgNjQgNjR6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNi00OCAwIDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwIDAtNDgtMTYgMHoiXQogICAgfTsKICAgIGZhQ2hlc3NLaW5nID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNoZXNzLWtpbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODE4XSwgImY0M2YiLCAiTTIyNC0zMmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDAgMCA4MCAxNjEuOCAwYzIxLjEgMCAzOC4yIDE3LjEgMzguMiAzOC4yIDAgNi40LTEuNiAxMi43LTQuNyAxOC4zTDM1Ny4yIDM3NC41IDQwNS42IDQzNWM2LjcgOC40IDEwLjQgMTguOCAxMC40IDI5LjYgMCAyNi4yLTIxLjIgNDcuNC00Ny40IDQ3LjRMNzkuNCA1MTJjLTI2LjIgMC00Ny40LTIxLjItNDcuNC00Ny40IDAtMTAuOCAzLjctMjEuMiAxMC40LTI5LjZMOTAuOCAzNzQuNSA0LjcgMjE2LjZDMS42IDIxMC45IDAgMjA0LjYgMCAxOTguMiAwIDE3Ny4xIDE3LjEgMTYwIDM4LjIgMTYwbDE2MS44IDAgMC04MC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMTMxLjggNDAwbC0zLjYgNC40LTQ3LjYgNTkuNiAyODYuNiAwLTQ3LjYtNTkuNi0zLjYtNC40LTE4NC4zIDB6bTEuMS00OC41bC4zIC41IDE4MS42IDAgLjMtLjUgNzguMy0xNDMuNS0zMzguNyAwIDc4LjMgMTQzLjV6Il0KICAgIH07CiAgICBmYVNxdWFyZVBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXBsdXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2MTg0NiwgInBsdXMtc3F1YXJlIl0sICJmMGZlIiwgIk02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMjBjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNMjAwIDM0NGwwLTY0LTY0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNjQgMCAwLTY0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA2NCA2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC02NCAwIDAgNjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYVBsdXNTcXVhcmUgPSBmYVNxdWFyZVBsdXM7CiAgICBmYUZpbGVDb2RlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZpbGUtY29kZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM5IiwgIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwek0xNzAuMiAyOTUuNmM4LjYtMTAuMSA3LjUtMjUuMi0yLjYtMzMuOHMtMjUuMi03LjUtMzMuOCAyLjZsLTQ4IDU2Yy03LjcgOS03LjcgMjIuMiAwIDMxLjJsNDggNTZjOC42IDEwLjEgMjMuOCAxMS4yIDMzLjggMi42czExLjItMjMuOCAyLjYtMzMuOGwtMzQuNi00MC40IDM0LjYtNDAuNHptODAtMzEuMmMtOC42LTEwLjEtMjMuOC0xMS4yLTMzLjgtMi42cy0xMS4yIDIzLjgtMi42IDMzLjhsMzQuNiA0MC40LTM0LjYgNDAuNGMtOC42IDEwLjEtNy41IDI1LjIgMi42IDMzLjhzMjUuMiA3LjUgMzMuOC0yLjZsNDgtNTZjNy43LTkgNy43LTIyLjIgMC0zMS4ybC00OC01NnoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5XaW5rID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi13aW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImdyaW4td2luayJdLCAiZjU4YyIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zNzIuMiA0Ni4zYzExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC0xOS44IDU1LjktNzMuMSA5Ni0xMzUuOCA5Ni02Mi43IDAtMTE2LTQwLTEzNS44LTk1LjktNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42ek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2NCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwYy0xMSAwLTIwIDktMjAgMjB6Il0KICAgIH07CiAgICBmYUdyaW5XaW5rID0gZmFGYWNlR3Jpbldpbms7CiAgICBmYU1vbmV5QmlsbDEgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAibW9uZXktYmlsbC0xIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbIm1vbmV5LWJpbGwtYWx0Il0sICJmM2QxIiwgIk0xMTIgMTEyYzAgMzUuMy0yOC43IDY0LTY0IDY0bDAgMTYwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDI4OCAwYzAtMzUuMyAyOC43LTY0IDY0LTY0bDAtMTYwYy0zNS4zIDAtNjQtMjguNy02NC02NGwtMjg4IDB6TTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6bTI1NiAxNmExMTIgMTEyIDAgMSAxIDAgMjI0IDExMiAxMTIgMCAxIDEgMC0yMjR6bS0xNiA0NGMtMTEgMC0yMCA5LTIwIDIwIDAgOS43IDYuOSAxNy43IDE2IDE5LjZsMCA0OC40LTQgMGMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBsNDggMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTQgMCAwLTY4YzAtMTEtOS0yMC0yMC0yMGwtMTYgMHoiXQogICAgfTsKICAgIGZhTW9uZXlCaWxsQWx0ID0gZmFNb25leUJpbGwxOwogICAgZmFFeWVTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJleWUtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjA3MCIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtOTYuNC05Ni40YzIuNy0yLjQgNS40LTQuOCA4LTcuMiA0Ni44LTQzLjUgNzguMS05NS40IDkzLTEzMS4xIDMuMy03LjkgMy4zLTE2LjcgMC0yNC42LTE0LjktMzUuNy00Ni4yLTg3LjctOTMtMTMxLjEtNDcuMS00My43LTExMS44LTgwLjYtMTkyLjYtODAuNi01Ni44IDAtMTA1LjYgMTguMi0xNDYgNDQuMkw0MS0yNC45ek0xNzYuOSAxMTEuMWMzMi4xLTE4LjkgNjkuMi0zMS4xIDExMS4xLTMxLjEgNjUuMiAwIDExOC44IDI5LjYgMTU5LjkgNjcuNyAzOC41IDM1LjcgNjUuMSA3OC4zIDc4LjYgMTA4LjMtMTMuNiAzMC00MC4yIDcyLjUtNzguNiAxMDguMy0zLjEgMi44LTYuMiA1LjYtOS40IDguNEwzOTMuOCAzMjhjMTQtMjAuNSAyMi4yLTQ1LjMgMjIuMi03MiAwLTcwLjctNTcuMy0xMjgtMTI4LTEyOC0yNi43IDAtNTEuNSA4LjItNzIgMjIuMmwtMzkuMS0zOS4xem0xODIgMTgybC0xMDgtMTA4YzExLjEtNS44IDIzLjctOS4xIDM3LjEtOS4xIDQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgMTMuNC0zLjMgMjYtOS4xIDM3LjF6TTEwMy40IDE3My4ybC0zNC0zNGMtMzIuNiAzNi44LTU1IDc1LjgtNjYuOSAxMDQuNS0zLjMgNy45LTMuMyAxNi43IDAgMjQuNiAxNC45IDM1LjcgNDYuMiA4Ny43IDkzIDEzMS4xIDQ3LjEgNDMuNyAxMTEuOCA4MC42IDE5Mi42IDgwLjYgMzcuMyAwIDcxLjItNy45IDEwMS41LTIwLjZMMzUyLjIgNDIyYy0yMCA2LjQtNDEuNCAxMC02NC4yIDEwLTY1LjIgMC0xMTguOC0yOS42LTE1OS45LTY3LjctMzguNS0zNS43LTY1LjEtNzguMy03OC42LTEwOC4zIDEwLjQtMjMuMSAyOC42LTUzLjYgNTQtODIuOHoiXQogICAgfTsKICAgIGZhRmlsZVdvcmQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS13b3JkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzIiLCAiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6bTcxLjMgMjc0LjJjLTMuMi0xMi45LTE2LjItMjAuNy0yOS4xLTE3LjVTODUuNSAyNzMgODguNyAyODUuOGwzMiAxMjhjMi41IDEwLjIgMTEuNCAxNy41IDIxLjkgMTguMXMyMC4xLTUuNyAyMy44LTE1LjVsMjUuNS02OC4xIDI1LjUgNjguMWMzLjcgOS44IDEzLjMgMTYuMSAyMy44IDE1LjVzMTkuNC03LjkgMjEuOS0xOC4xbDMyLTEyOGMzLjItMTIuOS00LjYtMjUuOS0xNy41LTI5LjFzLTI1LjkgNC42LTI5LjEgMTcuNWwtMTMuMyA1My4yLTIwLjktNTUuOEMyMTEgMjYyLjIgMjAyIDI1NiAxOTIgMjU2cy0xOSA2LjItMjIuNSAxNS42bC0yMC45IDU1LjgtMTMuMy01My4yeiJdCiAgICB9OwogICAgZmFGYWNlQW5ncnkgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1hbmdyeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU0NCwgImFuZ3J5Il0sICJmNTU2IiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTAtMTQ0YzI0LjEgMCA0NS40IDExLjggNTguNSAzMCA3LjcgMTAuOCAyMi43IDEzLjIgMzMuNSA1LjVzMTMuMi0yMi43IDUuNS0zMy41Yy0yMS43LTMwLjItNTcuMy01MC05Ny41LTUwcy03NS43IDE5LjgtOTcuNSA1MGMtNy43IDEwLjgtNS4zIDI1LjggNS41IDMzLjVzMjUuOCA1LjMgMzMuNS01LjVjMTMuMS0xOC4yIDM0LjQtMzAgNTguNS0zMHptLTgwLTk2YzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtLjMgOS43IDMuMmMxMC41IDMuNSAyMS44LTIuMiAyNS4zLTEyLjZzLTIuMi0yMS44LTEyLjYtMjUuM2wtOTYtMzJjLTEwLjUtMy41LTIxLjggMi4yLTI1LjMgMTIuNnMyLjIgMjEuOCAxMi42IDI1LjNsMjguOSA5LjZjLTQuMSA1LjQtNi42IDEyLjEtNi42IDE5LjQgMCAxNy43IDE0LjMgMzIgMzIgMzJ6bTE5Mi0zMmMwLTcuMy0yLjQtMTQtNi42LTE5LjRsMjguOS05LjZjMTAuNS0zLjUgMTYuMS0xNC44IDEyLjYtMjUuM3MtMTQuOC0xNi4xLTI1LjMtMTIuNmwtOTYgMzJjLTEwLjUgMy41LTE2LjEgMTQuOC0xMi42IDI1LjNzMTQuOCAxNi4xIDI1LjMgMTIuNmw5LjctMy4yIDAgLjNjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnoiXQogICAgfTsKICAgIGZhQW5ncnkgPSBmYUZhY2VBbmdyeTsKICAgIGZhQ2hlc3NLbmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2hlc3Mta25pZ2h0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTgyMl0sICJmNDQxIiwgIk0yMzItMzJjMTEwLjUgMCAyMDAgODkuNSAyMDAgMjAwbDAgMTI3LjdjMCAxOC45LTYuMSAzNy4xLTE3LjIgNTIuMmwtNS4xIDYuMi0zNi4zIDQwLjcgMzIuMSA0MC4yYzYuNyA4LjQgMTAuNCAxOC44IDEwLjQgMjkuNmwtLjIgNC44Yy0yLjQgMjMuOS0yMi42IDQyLjUtNDcuMSA0Mi41bC0yODkuMiAwLTQuOC0uMmMtMjMuOS0yLjQtNDIuNS0yMi42LTQyLjUtNDcuMSAwLTEwLjggMy43LTIxLjIgMTAuNC0yOS42bDM3LjYtNDcgMC0yNC4zYzAtMjQuMyAxMC4xLTQ3LjYgMjcuOC02NC4ybDYzLjUtNTkuNS0xNy40IDAtLjIgLjJjLTIwLjMgMjAuMy00OS42IDI4LjItNzcuMSAyMS4xbC01LjUtMS42Yy0zMC45LTEwLjMtNTIuMy0zOC01NC45LTcwLjFsLS4yLTYuNCAwLTEuNGMwLTE5LjcgNy4xLTM4LjggMTkuOS01My44bDc2LjEtODguOCAwLTQ3LjEgLjEtMi41QzExMy40LTIyLjYgMTIzLjYtMzIgMTM2LTMybDk2IDB6TTgwLjcgNDY0bDI4Ni42IDAtMzguNC00OC0yMDkuOSAwLTM4LjQgNDh6TTE2MCA0OGMwIDUuNy0yLjEgMTEuMy01LjggMTUuNkw3Mi4zIDE1OS4xQzY3IDE2NS40IDY0IDE3My40IDY0IDE4MS43bDAgMS40IC40IDUuMmMxLjkgMTEuOSAxMC4zIDIxLjkgMjEuOSAyNS44bDQuNSAxLjFjMTAuNSAxLjkgMjEuMy0xLjQgMjktOWw3LjItNy4yIDMuNy0zYzMuOS0yLjYgOC41LTQgMTMuMy00bDg4IDBjOS44IDAgMTguNyA2IDIyLjMgMTUuMnMxLjMgMTkuNi01LjkgMjYuM2wtMTA3LjggMTAxYy04LjEgNy42LTEyLjcgMTguMS0xMi43IDI5LjJsMCA0LjMgMjA1LjIgMCA0MC43LTQ1LjggMi4zLTIuOGM1LjEtNi44IDcuOC0xNS4yIDcuOC0yMy43TDM4NCAxNjhjMC04My45LTY4LjEtMTUyLTE1Mi0xNTJsLTcyIDAgMCAzMnptMzIgNzJhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4eiJdCiAgICB9OwogICAgZmFGYWNlR3JpbkJlYW0gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLWJlYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTYsICJncmluLWJlYW0iXSwgImY1ODIiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMzcyLjIgNDYuM2MxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtMTkuOCA1NS45LTczLjEgOTYtMTM1LjggOTYtNjIuNyAwLTExNi00MC0xMzUuOC05NS45LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNnpNMTc2IDE4MGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHptMTMyIDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6Il0KICAgIH07CiAgICBmYUdyaW5CZWFtID0gZmFGYWNlR3JpbkJlYW07CiAgICBmYUhhbmRQZWFjZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBlYWNlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTk5Nl0sICJmMjViIiwgIk0yMTkgMS40Yy0zNS4yLTMuNy02Ni42IDIxLjgtNzAuMyA1N2wtNi40IDYwLjYtMTcuNC00OS40QzExMy4yIDM2LjMgNzYuNiAxOC44IDQzLjMgMzAuNVMtNy42IDc4LjggNC4xIDExMi4xTDU2LjkgMjYyLjJDNDEuNyAyNzYuNyAzMi4yIDI5Ny4zIDMyLjIgMzIwbDAgMjRjMCA5Mi44IDc1LjIgMTY4IDE2OCAxNjhsNDggMGM5Mi44IDAgMTY4LTc1LjIgMTY4LTE2OGwwLTEyMGMwLTM1LjMtMjguNy02NC02NC02NC03LjkgMC0xNS40IDEuNC0yMi40IDQtMTAuNC0yMS4zLTMyLjMtMzYtNTcuNi0zNi0uNyAwLTEuNSAwLTIuMiAwbDUuOS01Ni4zYzMuNy0zNS4yLTIxLjgtNjYuNi01Ny03MC4zem0tLjIgMTU1LjRjLTYuNiAxMC4xLTEwLjUgMjIuMi0xMC41IDM1LjJsMCA0OGMwIC43IDAgMS40IDAgMi01LjEtMS4zLTEwLjUtMi0xNi0ybC03LjQgMC01LjQtMTUuMyAxNy0xNjEuM2MuOS04LjggOC44LTE1LjIgMTcuNi0xNC4yczE1LjIgOC44IDE0LjIgMTcuNmwtOS41IDkwLjF6TTc5LjYgODUuNmw1NC4zIDE1NC40LTIxLjcgMGMtNCAwLTggLjMtMTEuOSAuOUw0OS40IDk2LjJjLTIuOS04LjMgMS41LTE3LjUgOS44LTIwLjRzMTcuNSAxLjUgMjAuNCA5Ljh6TTI1Ni4yIDE5MmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC00OHptMzguNCAxMDhjMTAuNCAyMS4zIDMyLjMgMzYgNTcuNiAzNiA1LjUgMCAxMC45LS43IDE2LTJsMCAxMGMwIDY2LjMtNTMuNyAxMjAtMTIwIDEyMGwtNDggMGMtNjYuMyAwLTEyMC01My43LTEyMC0xMjBsMC0yNGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw4MCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0uNyAwLTEuNCAwLTIgNS4xIDEuMyAxMC41IDIgMTYgMiA3LjkgMCAxNS40LTEuNCAyMi40LTR6bTczLjYtMjhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC00OGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNDh6Il0KICAgIH07CiAgICBmYUNvbXBhc3MgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY29tcGFzcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTUxN10sICJmMTRlIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTMwNi43IDY5LjFMMTYyLjQgMzgwLjZjLTE5LjQgNy41LTM4LjUtMTEuNi0zMS0zMWw1NS41LTE0NC4zYzMuMy04LjUgOS45LTE1LjEgMTguNC0xOC40bDE0NC4zLTU1LjVjMTkuNC03LjUgMzguNSAxMS42IDMxIDMxTDMyNS4xIDMwNi43Yy0zLjMgOC41LTkuOSAxNS4xLTE4LjQgMTguNHpNMjg4IDI1NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdCiAgICB9OwogICAgZmFTcXVhcmUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTYzMiwgOTcyMywgOTcyNCwgNjE1OTBdLCAiZjBjOCIsICJNMzg0IDgwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyMGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDMyYy04LjggMC0xNi03LjItMTYtMTZMNDggOTZjMC04LjggNy4yLTE2IDE2LTE2bDMyMCAwek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyeiJdCiAgICB9OwogICAgZmFGYWNlR3JpbiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTIsICJncmluIl0sICJmNTgwIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTM3Mi4yIDQ2LjNjMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjZ6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhR3JpbiA9IGZhRmFjZUdyaW47CiAgICBmYUZhY2VTbWlsZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXNtaWxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTc4LCAic21pbGUiXSwgImYxMTgiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTc3LjMgNjMuNEMxOTIuMyAzMzUgMjE4LjQgMzUyIDI1NiAzNTJzNjMuNy0xNyA3OC43LTMyLjZjOS4yLTkuNiAyNC40LTkuOSAzMy45LS43czkuOSAyNC40IC43IDMzLjljLTIyLjEgMjMtNjAgNDcuNC0xMTMuMyA0Ny40cy05MS4yLTI0LjQtMTEzLjMtNDcuNGMtOS4yLTkuNi04LjktMjQuOCAuNy0zMy45czI0LjgtOC45IDMzLjkgLjd6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhU21pbGUgPSBmYUZhY2VTbWlsZTsKICAgIGZhRmFjZVNtaWxlQmVhbSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXNtaWxlLWJlYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjIsICJzbWlsZS1iZWFtIl0sICJmNWI4IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ny4zIDYzLjRDMTkyLjMgMzM1IDIxOC40IDM1MiAyNTYgMzUyczYzLjctMTcgNzguNy0zMi42YzkuMi05LjYgMjQuNC05LjkgMzMuOS0uN3M5LjkgMjQuNCAuNyAzMy45Yy0yMi4xIDIzLTYwIDQ3LjQtMTEzLjMgNDcuNHMtOTEuMi0yNC40LTExMy4zLTQ3LjRjLTkuMi05LjYtOC45LTI0LjggLjctMzMuOXMyNC44LTguOSAzMy45IC43ek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXQogICAgfTsKICAgIGZhU21pbGVCZWFtID0gZmFGYWNlU21pbGVCZWFtOwogICAgZmFGb2xkZXJDbG9zZWQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZm9sZGVyLWNsb3NlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMTg1IiwgIk00NDggNDAwTDY0IDQwMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTQ0IDQxNiAwIDAgMTQ0YzAgOC44LTcuMiAxNi0xNiAxNnptMTYtMjA4bC00MTYgMCAwLTk2YzAtOC44IDcuMi0xNiAxNi0xNmwxMzguNyAwYzMuNSAwIDYuOCAxLjEgOS42IDMuMkwyNTAuNyAxMTJjMTMuOCAxMC40IDMwLjcgMTYgNDggMTZMNDQ4IDEyOGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0OHpNNjQgNDQ4bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjQwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDI5OC43IDgwYy02LjkgMC0xMy43LTIuMi0xOS4yLTYuNEwyNDEuMSA0NC44QzIzMCAzNi41IDIxNi41IDMyIDIwMi43IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjR6Il0KICAgIH07CiAgICBmYUtleWJvYXJkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImtleWJvYXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOWUzXSwgImYxMWMiLCAiTTY0IDExMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjU2YzAgOC44IDcuMiAxNiAxNiAxNmw0NDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNTZjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDExMnpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHpNMTc2IDMyMGwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTIyNCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bS03Mi03MmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2em0xNi05NmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2em02NCA5NmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2em0xNi05NmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2em02NCA5NmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2em0xNi05NmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2em02NCA5NmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2em0xNi05NmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2em02NCA5NmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2em0xNi05NmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFGYWNlUm9sbGluZ0V5ZXMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1yb2xsaW5nLWV5ZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1ODAsICJtZWgtcm9sbGluZy1leWVzIl0sICJmNWE1IiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE3NiAzNzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNMTYwIDI2NGMtMjIuMSAwLTQwLTE3LjktNDAtNDAgMC05LjUgMy4zLTE4LjEgOC44LTI1IDMuMiAxNC4zIDE2IDI1IDMxLjIgMjVzMjgtMTAuNyAzMS4yLTI1YzUuNSA2LjggOC44IDE1LjUgOC44IDI1IDAgMjIuMS0xNy45IDQwLTQwIDQwem0wIDQwYTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0xOTItNDBjLTIyLjEgMC00MC0xNy45LTQwLTQwIDAtOS41IDMuMy0xOC4xIDguOC0yNSAzLjIgMTQuMyAxNiAyNSAzMS4yIDI1czI4LTEwLjcgMzEuMi0yNWM1LjUgNi44IDguOCAxNS41IDguOCAyNSAwIDIyLjEtMTcuOSA0MC00MCA0MHptMCA0MGE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHoiXQogICAgfTsKICAgIGZhTWVoUm9sbGluZ0V5ZXMgPSBmYUZhY2VSb2xsaW5nRXllczsKICAgIGZhRmFjZUdyaW1hY2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmltYWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTU2LCAiZ3JpbWFjZSJdLCAiZjU3ZiIsICJNMjU2IDQ4YTIwOCAyMDggMCAxIDAgMCA0MTYgMjA4IDIwOCAwIDEgMCAwLTQxNnpNNTEyIDI1NmEyNTYgMjU2IDAgMSAxIC01MTIgMCAyNTYgMjU2IDAgMSAxIDUxMiAwek0xNTIgMzUyYzAgMTEuOSA4LjYgMjEuOCAyMCAyMy43bDAtNDcuM2MtMTEuNCAxLjktMjAgMTEuOC0yMCAyMy43em04NCAyNGwwLTQ4LTI0IDAgMCA0OCAyNCAwem02NCAwbDAtNDgtMjQgMCAwIDQ4IDI0IDB6bTQwLS4zYzExLjQtMS45IDIwLTExLjggMjAtMjMuN3MtOC42LTIxLjgtMjAtMjMuN2wwIDQ3LjN6TTE3NiAyODhsMTYwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRsLTE2MCAwYy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0em0wLTExMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdCiAgICB9OwogICAgZmFHcmltYWNlID0gZmFGYWNlR3JpbWFjZTsKICAgIGZhQ2lyY2xlRG90ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1kb3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyODAsICJkb3QtY2lyY2xlIl0sICJmMTkyIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDEgMSAwIDUxMnptMC00NjRhMjA4IDIwOCAwIDEgMCAwIDQxNiAyMDggMjA4IDAgMSAwIDAtNDE2em0wIDMwNGE5NiA5NiAwIDEgMSAwLTE5MiA5NiA5NiAwIDEgMSAwIDE5MnoiXQogICAgfTsKICAgIGZhRG90Q2lyY2xlID0gZmFDaXJjbGVEb3Q7CiAgICBmYU9iamVjdEdyb3VwID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIm9iamVjdC1ncm91cCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMjQ3IiwgIk00MCA2NGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem00OCA1OS4zYzE2LTYuNSAyOC45LTE5LjMgMzUuMy0zNS4zbDMyOS4zIDBjNi41IDE2IDE5LjMgMjguOSAzNS4zIDM1LjNsMCAyNjUuM2MtMTYgNi41LTI4LjkgMTkuMy0zNS4zIDM1LjNsLTMyOS4zIDBjLTYuNS0xNi0xOS4zLTI4LjktMzUuMy0zNS4zbDAtMjY1LjN6TTUxMiAwYy0yNi45IDAtNDkuOSAxNi41LTU5LjMgNDBMMTIzLjMgNDBDMTEzLjkgMTYuNSA5MC45IDAgNjQgMCAyOC43IDAgMCAyOC43IDAgNjQgMCA5MC45IDE2LjUgMTEzLjkgNDAgMTIzLjNsMCAyNjUuM2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0IDI2LjkgMCA0OS45LTE2LjUgNTkuMy00MGwzMjkuMyAwYzkuNSAyMy41IDMyLjUgNDAgNTkuMyA0MCAzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNsMC0yNjUuM2MyMy41LTkuNSA0MC0zMi41IDQwLTU5LjMgMC0zNS4zLTI4LjctNjQtNjQtNjR6TTQ4OCA2NGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek02NCA0MjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em00MjQgMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNMTkyIDE3Nmw4OCAwIDAgNTYtODggMCAwLTU2em0tOC00MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA3MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMDQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTcyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMDQgMHptNzIgMTg0bDAgMjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTA0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC03MmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMjQgMGMwIDE0LjYtMy45IDI4LjItMTAuNyA0MGwyNi43IDAgMCA1Ni04OCAwIDAtMTYuNGMtMi42IC4zLTUuMyAuNC04IC40bC0zMiAweiJdCiAgICB9OwogICAgZmFGYWNlRmx1c2hlZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWZsdXNoZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NjMsICJmbHVzaGVkIl0sICJmNTc5IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDEgLTQxNiAwIDIwOCAyMDggMCAxIDEgNDE2IDB6TTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTIgMjU2IDI1NiAwIDEgMCAwLTUxMnpNMTYwIDI0OGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTIxNi0yNGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek0xOTIgMzUyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEyOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMjggMHpNMTYwIDE3NmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6bTAgMTI4YTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0xNDQtODBhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMTI4IDBhODAgODAgMCAxIDAgLTE2MCAwIDgwIDgwIDAgMSAwIDE2MCAweiJdCiAgICB9OwogICAgZmFGbHVzaGVkID0gZmFGYWNlRmx1c2hlZDsKICAgIGZhU3RhckhhbGZTdHJva2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3Rhci1oYWxmLXN0cm9rZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzdGFyLWhhbGYtYWx0Il0sICJmNWMwIiwgIk0zMDkuNS0xOC45Yy00LjEtOC0xMi40LTEzLjEtMjEuNC0xMy4xcy0xNy4zIDUuMS0yMS40IDEzLjFMMTkzLjEgMTI1LjMgMzMuMiAxNTAuN2MtOC45IDEuNC0xNi4zIDcuNy0xOS4xIDE2LjNzLS41IDE4IDUuOCAyNC40bDExNC40IDExNC41LTI1LjIgMTU5LjljLTEuNCA4LjkgMi4zIDE3LjkgOS42IDIzLjJzMTYuOSA2LjEgMjUgMkwyODguMSA0MTcuNiA0MzIuNCA0OTFjOCA0LjEgMTcuNyAzLjMgMjUtMnMxMS0xNC4yIDkuNi0yMy4yTDQ0MS43IDMwNS45IDU1Ni4xIDE5MS40YzYuNC02LjQgOC42LTE1LjggNS44LTI0LjRzLTEwLjEtMTQuOS0xOS4xLTE2LjNMMzgzIDEyNS4zIDMwOS41LTE4Ljl6TTI2NC4xIDkxLjhsMCAyODQuMS0xMDAuMSA1MC45IDE5LjgtMTI1LjVjMS4yLTcuNi0xLjMtMTUuMy02LjctMjAuN2wtODkuOC04OS45IDEyNS41LTIwYzcuNi0xLjIgMTQuMS02IDE3LjYtMTIuOGwzMy44LTY2LjJ6bTQ4IDI4NC4xbDAtMjg0LjEgMzMuOCA2Ni4yYzMuNSA2LjggMTAgMTEuNiAxNy42IDEyLjhsMTI1LjUgMjAtODkuOCA4OS45Yy01LjQgNS40LTcuOSAxMy4xLTYuNyAyMC43bDE5LjggMTI1LjUtMTAwLjEtNTAuOXoiXQogICAgfTsKICAgIGZhU3RhckhhbGZBbHQgPSBmYVN0YXJIYWxmU3Ryb2tlOwogICAgZmFGaWxlVmlkZW8gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS12aWRlbyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM4IiwgIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwek04MCAyODhsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjQgMzUgMzVjMy4yIDMuMiA3LjUgNSAxMiA1IDkuNCAwIDE3LTcuNiAxNy0xN2wwLTk0LjFjMC05LjQtNy42LTE3LTE3LTE3LTQuNSAwLTguOCAxLjgtMTIgNWwtMzUgMzUgMC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6Il0KICAgIH07CiAgICBmYUZhY2VMYXVnaCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWxhdWdoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxhdWdoIl0sICJmNTk5IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTExOC4zIDU4LjJjLTQuMi0xMy43IDcuMS0yNi4yIDIxLjQtMjYuMmwyMzIuNiAwYzE0LjMgMCAyNS42IDEyLjUgMjEuNCAyNi4yLTE4IDU4LjktNzIuOSAxMDEuOC0xMzcuNyAxMDEuOFMxMzYuMyAzNzMuMSAxMTguMyAzMTQuMnpNMTQ0IDE5MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFMYXVnaCA9IGZhRmFjZUxhdWdoOwogICAgZmFIYW5kUG9pbnRlciA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBvaW50ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI1YSIsICJNMTYwIDY0YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxMzZjMCAxMC4zIDYuNiAxOS41IDE2LjQgMjIuOHMyMC42LS4xIDI2LjgtOC4zYzMtMy45IDcuNi02LjQgMTIuOC02LjQgOC44IDAgMTYgNy4yIDE2IDE2IDAgMTAuMyA2LjYgMTkuNSAxNi40IDIyLjhzMjAuNi0uMSAyNi44LTguM2MzLTMuOSA3LjYtNi40IDEyLjgtNi40IDcuOCAwIDE0LjMgNS42IDE1LjcgMTMgMS42IDguMiA3LjMgMTUuMSAxNS4xIDE4czE2LjcgMS42IDIzLjMtMy42YzIuNy0yLjEgNi4xLTMuNCA5LjktMy40IDguOCAwIDE2IDcuMiAxNiAxNmwwIDEyMGMwIDM5LjgtMzIuMiA3Mi03MiA3MmwtMTE2LjYgMGMtMzcuNCAwLTcyLjQtMTguNy05My4yLTQ5LjlMNTAuNyAzMTIuOWMtNC45LTcuNC0yLjktMTcuMyA0LjQtMjIuMnMxNy4zLTIuOSAyMi4yIDQuNEwxMTYgMzUzLjJjNS45IDguOCAxNi44IDEyLjcgMjYuOSA5LjdzMTctMTIuNCAxNy0yM0wxNjAgNjR6TTE3NiAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDE5Ny43QzkxLjIgMjM4IDU1LjUgMjMyLjggMjguNSAyNTAuNy0uOSAyNzAuNC04LjkgMzEwLjEgMTAuOCAzMzkuNUw3OC4zIDQ0MC44YzI5LjcgNDQuNSA3OS42IDcxLjIgMTMzLjEgNzEuMkwzMjggNTEyYzY2LjMgMCAxMjAtNTMuNyAxMjAtMTIwbDAtMTIwYzAtMzUuMy0yOC43LTY0LTY0LTY0LTQuNSAwLTguOCAuNS0xMyAxLjMtMTEuNy0xNS40LTMwLjItMjUuMy01MS0yNS4zLTYuOSAwLTEzLjUgMS4xLTE5LjcgMy4xLTExLjYtMTYuNC0zMC43LTI3LjEtNTIuMy0yNy4xLTIuNyAwLTUuNCAuMi04IC41TDI0MCA2NGMwLTM1LjMtMjguNy02NC02NC02NHptNDggMzA0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2em00OC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2YzAtOC44LTcuMi0xNi0xNi0xNnptODAgMTZjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtOTZ6Il0KICAgIH07CiAgICBmYVJlZ2lzdGVyZWQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAicmVnaXN0ZXJlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzE3NF0sICJmMjVkIiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIwMCAxNDRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTc2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC01NiAzNC40IDAgNDEgNjguM2M2LjggMTEuNCAyMS42IDE1IDMyLjkgOC4yczE1LTIxLjYgOC4yLTMyLjlsLTMwLjItNTAuM2MyNC42LTExLjUgNDEuNi0zNi40IDQxLjYtNjUuMyAwLTM5LjgtMzIuMi03Mi03Mi03MmwtODAgMHptNzIgOTZsLTQ4IDAgMC00OCA1NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04IDB6Il0KICAgIH07CiAgICBpY29uczIgPSB7CiAgICAgIGZhU3F1YXJlTWludXMsCiAgICAgIGZhTWludXNTcXVhcmUsCiAgICAgIGZhQ2FsZW5kYXJDaGVjaywKICAgICAgZmFGYWNlS2lzcywKICAgICAgZmFLaXNzLAogICAgICBmYVBhc3RlLAogICAgICBmYUZpbGVDbGlwYm9hcmQsCiAgICAgIGZhSGFuZFBvaW50TGVmdCwKICAgICAgZmFGaWxlRXhjZWwsCiAgICAgIGZhRW52ZWxvcGUsCiAgICAgIGZhU3F1YXJlQ2FyZXREb3duLAogICAgICBmYUNhcmV0U3F1YXJlRG93biwKICAgICAgZmFUcnVjaywKICAgICAgZmFCZWxsLAogICAgICBmYU1lc3NhZ2UsCiAgICAgIGZhQ29tbWVudEFsdCwKICAgICAgZmFGYWNlRGl6enksCiAgICAgIGZhRGl6enksCiAgICAgIGZhQ2FsZW5kYXJEYXlzLAogICAgICBmYUNhbGVuZGFyQWx0LAogICAgICBmYUhhbmRQb2ludFVwLAogICAgICBmYUhhbmRMaXphcmQsCiAgICAgIGZhU3F1YXJlRnVsbCwKICAgICAgZmFDaXJjbGVQYXVzZSwKICAgICAgZmFQYXVzZUNpcmNsZSwKICAgICAgZmFIYXJkRHJpdmUsCiAgICAgIGZhSGRkLAogICAgICBmYUZpbGVaaXBwZXIsCiAgICAgIGZhRmlsZUFyY2hpdmUsCiAgICAgIGZhRmxvcHB5RGlzaywKICAgICAgZmFTYXZlLAogICAgICBmYUZhY2VHcmluVG9uZ3VlU3F1aW50LAogICAgICBmYUdyaW5Ub25ndWVTcXVpbnQsCiAgICAgIGZhQ2FtZXJhLAogICAgICBmYUNhbWVyYUFsdCwKICAgICAgZmFGYWNlR3JpblN0YXJzLAogICAgICBmYUdyaW5TdGFycywKICAgICAgZmFFeWUsCiAgICAgIGZhRmFjZVNhZFRlYXIsCiAgICAgIGZhU2FkVGVhciwKICAgICAgZmFTaGFyZUZyb21TcXVhcmUsCiAgICAgIGZhU2hhcmVTcXVhcmUsCiAgICAgIGZhTm90ZVN0aWNreSwKICAgICAgZmFTdGlja3lOb3RlLAogICAgICBmYUhhbmRCYWNrRmlzdCwKICAgICAgZmFIYW5kUm9jaywKICAgICAgZmFDaGVzc1F1ZWVuLAogICAgICBmYUZhY2VHcmluVGVhcnMsCiAgICAgIGZhR3JpblRlYXJzLAogICAgICBmYVBlblRvU3F1YXJlLAogICAgICBmYUVkaXQsCiAgICAgIGZhRmFjZUdyaW5CZWFtU3dlYXQsCiAgICAgIGZhR3JpbkJlYW1Td2VhdCwKICAgICAgZmFDbG9jaywKICAgICAgZmFDbG9ja0ZvdXIsCiAgICAgIGZhRmFjZUxhdWdoV2luaywKICAgICAgZmFMYXVnaFdpbmssCiAgICAgIGZhUGFwZXJQbGFuZSwKICAgICAgZmFIZWFydCwKICAgICAgZmFGb250QXdlc29tZTogZmFGb250QXdlc29tZTIsCiAgICAgIGZhRm9udEF3ZXNvbWVGbGFnOiBmYUZvbnRBd2Vzb21lRmxhZzIsCiAgICAgIGZhRm9udEF3ZXNvbWVMb2dvRnVsbDogZmFGb250QXdlc29tZUxvZ29GdWxsMiwKICAgICAgZmFDbG9uZSwKICAgICAgZmFGb2xkZXJPcGVuLAogICAgICBmYVdpbmRvd01pbmltaXplLAogICAgICBmYVN0YXJIYWxmLAogICAgICBmYUFsYXJtQ2xvY2ssCiAgICAgIGZhTmV3c3BhcGVyLAogICAgICBmYUhvc3BpdGFsLAogICAgICBmYUhvc3BpdGFsQWx0LAogICAgICBmYUhvc3BpdGFsV2lkZSwKICAgICAgZmFDaXJjbGVTdG9wLAogICAgICBmYVN0b3BDaXJjbGUsCiAgICAgIGZhT2JqZWN0VW5ncm91cCwKICAgICAgZmFDb21tZW50LAogICAgICBmYUNoZXNzUGF3biwKICAgICAgZmFDYWxlbmRhclBsdXMsCiAgICAgIGZhQ2xpcGJvYXJkLAogICAgICBmYVRodW1ic0Rvd24sCiAgICAgIGZhSWRCYWRnZSwKICAgICAgZmFTcXVhcmVDaGVjaywKICAgICAgZmFDaGVja1NxdWFyZSwKICAgICAgZmFDaGVzc0Jpc2hvcCwKICAgICAgZmFFbnZlbG9wZU9wZW4sCiAgICAgIGZhQ2lyY2xlWG1hcmssCiAgICAgIGZhVGltZXNDaXJjbGUsCiAgICAgIGZhWG1hcmtDaXJjbGUsCiAgICAgIGZhU3F1YXJlQ2FyZXRVcCwKICAgICAgZmFDYXJldFNxdWFyZVVwLAogICAgICBmYUZpbGVJbWFnZSwKICAgICAgZmFTcXVhcmVDYXJldFJpZ2h0LAogICAgICBmYUNhcmV0U3F1YXJlUmlnaHQsCiAgICAgIGZhU3VuLAogICAgICBmYUltYWdlLAogICAgICBmYUxpZ2h0YnVsYiwKICAgICAgZmFBZGRyZXNzQ2FyZCwKICAgICAgZmFDb250YWN0Q2FyZCwKICAgICAgZmFWY2FyZCwKICAgICAgZmFGYWNlTWVoLAogICAgICBmYU1laCwKICAgICAgZmFNYXAsCiAgICAgIGZhSGFuZFBvaW50RG93biwKICAgICAgZmFGYWNlTWVoQmxhbmssCiAgICAgIGZhTWVoQmxhbmssCiAgICAgIGZhRmFjZUdyaW5Ub25ndWUsCiAgICAgIGZhR3JpblRvbmd1ZSwKICAgICAgZmFGdXRib2wsCiAgICAgIGZhRnV0Ym9sQmFsbCwKICAgICAgZmFTb2NjZXJCYWxsLAogICAgICBmYUZhY2VTdXJwcmlzZSwKICAgICAgZmFTdXJwcmlzZSwKICAgICAgZmFGb2xkZXIsCiAgICAgIGZhRm9sZGVyQmxhbmssCiAgICAgIGZhQ2xvdWQsCiAgICAgIGZhQ2lyY2xlLAogICAgICBmYUZhY2VHcmluU3F1aW50LAogICAgICBmYUdyaW5TcXVpbnQsCiAgICAgIGZhQ2lyY2xlVXNlciwKICAgICAgZmFVc2VyQ2lyY2xlLAogICAgICBmYVJlY3RhbmdsZUxpc3QsCiAgICAgIGZhTGlzdEFsdCwKICAgICAgZmFIYW5kLAogICAgICBmYUhhbmRQYXBlciwKICAgICAgZmFUaHVtYnNVcCwKICAgICAgZmFCdWlsZGluZywKICAgICAgZmFDaGVzc1Jvb2ssCiAgICAgIGZhQ2lyY2xlUXVlc3Rpb24sCiAgICAgIGZhUXVlc3Rpb25DaXJjbGUsCiAgICAgIGZhRmlsZSwKICAgICAgZmFGYWNlU2FkQ3J5LAogICAgICBmYVNhZENyeSwKICAgICAgZmFDYWxlbmRhck1pbnVzLAogICAgICBmYUZhY2VUaXJlZCwKICAgICAgZmFUaXJlZCwKICAgICAgZmFIYW5kUG9pbnRSaWdodCwKICAgICAgZmFDaXJjbGVVcCwKICAgICAgZmFBcnJvd0FsdENpcmNsZVVwLAogICAgICBmYUhhbmRTY2lzc29ycywKICAgICAgZmFHZW0sCiAgICAgIGZhUmVjdGFuZ2xlWG1hcmssCiAgICAgIGZhUmVjdGFuZ2xlVGltZXMsCiAgICAgIGZhVGltZXNSZWN0YW5nbGUsCiAgICAgIGZhV2luZG93Q2xvc2UsCiAgICAgIGZhVHJhc2hDYW4sCiAgICAgIGZhVHJhc2hBbHQsCiAgICAgIGZhTGlmZVJpbmcsCiAgICAgIGZhQ29weXJpZ2h0LAogICAgICBmYUNpcmNsZUxlZnQsCiAgICAgIGZhQXJyb3dBbHRDaXJjbGVMZWZ0LAogICAgICBmYUNhbGVuZGFyLAogICAgICBmYUZhY2VGcm93bk9wZW4sCiAgICAgIGZhRnJvd25PcGVuLAogICAgICBmYUNoYXJ0QmFyLAogICAgICBmYUJhckNoYXJ0LAogICAgICBmYUhvdXNlLAogICAgICBmYUhvbWUsCiAgICAgIGZhSG9tZUFsdCwKICAgICAgZmFIb21lTGdBbHQsCiAgICAgIGZhRmFjZUZyb3duLAogICAgICBmYUZyb3duLAogICAgICBmYVVzZXIsCiAgICAgIGZhVXNlckFsdCwKICAgICAgZmFVc2VyTGFyZ2UsCiAgICAgIGZhU25vd2ZsYWtlLAogICAgICBmYUJvb2ttYXJrLAogICAgICBmYVNxdWFyZUNhcmV0TGVmdCwKICAgICAgZmFDYXJldFNxdWFyZUxlZnQsCiAgICAgIGZhSGFuZHNoYWtlLAogICAgICBmYUhhbmRzaGFrZUFsdCwKICAgICAgZmFIYW5kc2hha2VTaW1wbGUsCiAgICAgIGZhRmFjZVNtaWxlV2luaywKICAgICAgZmFTbWlsZVdpbmssCiAgICAgIGZhRmFjZUdyaW5TcXVpbnRUZWFycywKICAgICAgZmFHcmluU3F1aW50VGVhcnMsCiAgICAgIGZhRmlsZUF1ZGlvLAogICAgICBmYUNhbGVuZGFyWG1hcmssCiAgICAgIGZhQ2FsZW5kYXJUaW1lcywKICAgICAgZmFDaXJjbGVEb3duLAogICAgICBmYUFycm93QWx0Q2lyY2xlRG93biwKICAgICAgZmFGaWxlTGluZXMsCiAgICAgIGZhRmlsZUFsdCwKICAgICAgZmFGaWxlVGV4dCwKICAgICAgZmFDb21tZW50cywKICAgICAgZmFDaXJjbGVDaGVjaywKICAgICAgZmFDaGVja0NpcmNsZSwKICAgICAgZmFNb29uLAogICAgICBmYUNsb3NlZENhcHRpb25pbmcsCiAgICAgIGZhSW1hZ2VzLAogICAgICBmYUNpcmNsZVJpZ2h0LAogICAgICBmYUFycm93QWx0Q2lyY2xlUmlnaHQsCiAgICAgIGZhSWRDYXJkLAogICAgICBmYURyaXZlcnNMaWNlbnNlLAogICAgICBmYUNpcmNsZVBsYXksCiAgICAgIGZhUGxheUNpcmNsZSwKICAgICAgZmFGYWNlTGF1Z2hCZWFtLAogICAgICBmYUxhdWdoQmVhbSwKICAgICAgZmFBZGRyZXNzQm9vaywKICAgICAgZmFDb250YWN0Qm9vaywKICAgICAgZmFIb3VyZ2xhc3MsCiAgICAgIGZhSG91cmdsYXNzRW1wdHksCiAgICAgIGZhSGVhZHBob25lcywKICAgICAgZmFIZWFkcGhvbmVzQWx0LAogICAgICBmYUhlYWRwaG9uZXNTaW1wbGUsCiAgICAgIGZhRmlsZVBvd2VycG9pbnQsCiAgICAgIGZhV2luZG93TWF4aW1pemUsCiAgICAgIGZhQ29tbWVudERvdHMsCiAgICAgIGZhQ29tbWVudGluZywKICAgICAgZmFGYWNlR3JpblRvbmd1ZVdpbmssCiAgICAgIGZhR3JpblRvbmd1ZVdpbmssCiAgICAgIGZhSG91cmdsYXNzSGFsZiwKICAgICAgZmFIb3VyZ2xhc3MyLAogICAgICBmYUNyZWRpdENhcmQsCiAgICAgIGZhQ3JlZGl0Q2FyZEFsdCwKICAgICAgZmFIYW5kU3BvY2ssCiAgICAgIGZhQmVsbFNsYXNoLAogICAgICBmYVN0YXIsCiAgICAgIGZhRmxhZywKICAgICAgZmFMZW1vbiwKICAgICAgZmFXaW5kb3dSZXN0b3JlLAogICAgICBmYUZhY2VHcmluSGVhcnRzLAogICAgICBmYUdyaW5IZWFydHMsCiAgICAgIGZhRmFjZUtpc3NCZWFtLAogICAgICBmYUtpc3NCZWFtLAogICAgICBmYUZpbGVQZGYsCiAgICAgIGZhRmFjZUdyaW5XaWRlLAogICAgICBmYUdyaW5BbHQsCiAgICAgIGZhRmFjZUxhdWdoU3F1aW50LAogICAgICBmYUxhdWdoU3F1aW50LAogICAgICBmYUZhY2VLaXNzV2lua0hlYXJ0LAogICAgICBmYUtpc3NXaW5rSGVhcnQsCiAgICAgIGZhQ29weSwKICAgICAgZmFDaGVzc0tpbmcsCiAgICAgIGZhU3F1YXJlUGx1cywKICAgICAgZmFQbHVzU3F1YXJlLAogICAgICBmYUZpbGVDb2RlLAogICAgICBmYUZhY2VHcmluV2luaywKICAgICAgZmFHcmluV2luaywKICAgICAgZmFNb25leUJpbGwxLAogICAgICBmYU1vbmV5QmlsbEFsdCwKICAgICAgZmFFeWVTbGFzaCwKICAgICAgZmFGaWxlV29yZCwKICAgICAgZmFGYWNlQW5ncnksCiAgICAgIGZhQW5ncnksCiAgICAgIGZhQ2hlc3NLbmlnaHQsCiAgICAgIGZhRmFjZUdyaW5CZWFtLAogICAgICBmYUdyaW5CZWFtLAogICAgICBmYUhhbmRQZWFjZSwKICAgICAgZmFDb21wYXNzLAogICAgICBmYVNxdWFyZSwKICAgICAgZmFGYWNlR3JpbiwKICAgICAgZmFHcmluLAogICAgICBmYUZhY2VTbWlsZSwKICAgICAgZmFTbWlsZSwKICAgICAgZmFGYWNlU21pbGVCZWFtLAogICAgICBmYVNtaWxlQmVhbSwKICAgICAgZmFGb2xkZXJDbG9zZWQsCiAgICAgIGZhS2V5Ym9hcmQsCiAgICAgIGZhRmFjZVJvbGxpbmdFeWVzLAogICAgICBmYU1laFJvbGxpbmdFeWVzLAogICAgICBmYUZhY2VHcmltYWNlLAogICAgICBmYUdyaW1hY2UsCiAgICAgIGZhQ2lyY2xlRG90LAogICAgICBmYURvdENpcmNsZSwKICAgICAgZmFPYmplY3RHcm91cCwKICAgICAgZmFGYWNlRmx1c2hlZCwKICAgICAgZmFGbHVzaGVkLAogICAgICBmYVN0YXJIYWxmU3Ryb2tlLAogICAgICBmYVN0YXJIYWxmQWx0LAogICAgICBmYUZpbGVWaWRlbywKICAgICAgZmFGYWNlTGF1Z2gsCiAgICAgIGZhTGF1Z2gsCiAgICAgIGZhSGFuZFBvaW50ZXIsCiAgICAgIGZhUmVnaXN0ZXJlZAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0Bmb3J0YXdlc29tZStmcmVlLXNvbGlkLXN2Zy1pY29uc0A3LjEuMC9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2luZGV4Lm1qcwp2YXIgcHJlZml4MywgZmEwLCBmYTEsIGZhMiwgZmEzLCBmYTQsIGZhNSwgZmE2LCBmYTcsIGZhOCwgZmE5LCBmYURvbGxhclNpZ24sIGZhRG9sbGFyLCBmYVVzZCwgZmFEb2csIGZhVHJ1Y2tNb3ZpbmcsIGZhUm90YXRlLCBmYVN5bmNBbHQsIGZhU3F1YXJlTWludXMyLCBmYU1pbnVzU3F1YXJlMiwgZmFBbGlnbkp1c3RpZnksIGZhQ2FsZW5kYXJDaGVjazIsIGZhRmFjZUtpc3MyLCBmYUtpc3MyLCBmYUtpdGNoZW5TZXQsIGZhRG5hLCBmYUNoaWxkUmVhY2hpbmcsIGZhUGFzdGUyLCBmYUZpbGVDbGlwYm9hcmQyLCBmYU1ldGVvciwgZmFHZWFycywgZmFDb2dzLCBmYUZpbGVDaXJjbGVQbHVzLCBmYUljaWNsZXMsIGZhQXJyb3dUcmVuZFVwLCBmYUhleGFnb25Ob2Rlc0JvbHQsIGZhUXVlc3Rpb24sIGZhSGFuZHNCb3VuZCwgZmFQZXJzb25XYWxraW5nTHVnZ2FnZSwgZmFGaWxlQXJyb3dEb3duLCBmYUZpbGVEb3dubG9hZCwgZmFQZXJzb25Cb290aCwgZmFMb2N1c3QsIGZhUmlnaHRMb25nLCBmYUxvbmdBcnJvd0FsdFJpZ2h0LCBmYVRydWNrRHJvcGxldCwgZmFIYW5kSG9sZGluZ01lZGljYWwsIGZhSGFuZFBvaW50TGVmdDIsIGZhQ2FsY3VsYXRvciwgZmFNaW51cywgZmFTdWJ0cmFjdCwgZmFBcnJvd1VwWkEsIGZhU29ydEFscGhhVXBBbHQsIGZhTWljcm9waG9uZVNsYXNoLCBmYVNxdWFyZVBlbiwgZmFQZW5TcXVhcmUsIGZhUGVuY2lsU3F1YXJlLCBmYUhhbmRGaXN0LCBmYUZpc3RSYWlzZWQsIGZhQ29tbWVudFNtcywgZmFTbXMsIGZhU2ltQ2FyZCwgZmFTY2FsZUJhbGFuY2VkLCBmYUJhbGFuY2VTY2FsZSwgZmFDYXIsIGZhQXV0b21vYmlsZSwgZmFDcm9wU2ltcGxlLCBmYUNyb3BBbHQsIGZhTWVkYWwsIGZhU2Nyb2xsLCBmYUZpbGVFeGNlbDIsIGZhRmlsdGVyLCBmYURydW0sIGZhTWFwUGluLCBmYVNjYWxlVW5iYWxhbmNlZEZsaXAsIGZhQmFsYW5jZVNjYWxlUmlnaHQsIGZhQXJyb3dzVG9DaXJjbGUsIGZhRW52ZWxvcGUyLCBmYUJhYnksIGZhU3F1YXJlQ2FyZXREb3duMiwgZmFDYXJldFNxdWFyZURvd24yLCBmYVRlbnQsIGZhQSwgZmFQYXJhY2h1dGVCb3gsIGZhQ2FydEFycm93RG93biwgZmFCcmlkZ2VDaXJjbGVFeGNsYW1hdGlvbiwgZmFDbG91ZEFycm93VXAsIGZhQ2xvdWRVcGxvYWQsIGZhQ2xvdWRVcGxvYWRBbHQsIGZhQXQsIGZhSW5kaWFuUnVwZWVTaWduLCBmYUluZGlhblJ1cGVlLCBmYUluciwgZmFUcnVjazIsIGZhQ2hhbGtib2FyZFVzZXIsIGZhQ2hhbGtib2FyZFRlYWNoZXIsIGZhVXNlckNoZWNrLCBmYVVzZXJOaW5qYSwgZmFQbGFudFdpbHQsIGZhV2VpZ2h0U2NhbGUsIGZhV2VpZ2h0LCBmYUNhcmV0UmlnaHQsIGZhRmxvcmluU2lnbiwgZmFCZWxsMiwgZmFMYXJpU2lnbiwgZmFNaWxsU2lnbiwgZmFQZXJzb25Tbm93Ym9hcmRpbmcsIGZhU25vd2JvYXJkaW5nLCBmYVR0eSwgZmFUZWxldHlwZSwgZmFVc2Vyc1JlY3RhbmdsZSwgZmFNb2JpbGUsIGZhTW9iaWxlQW5kcm9pZCwgZmFNb2JpbGVQaG9uZSwgZmFBcnJvd3NUdXJuVG9Eb3RzLCBmYUV4Y2xhbWF0aW9uLCBmYUNodXJjaCwgZmFUb2dnbGVPZmYsIGZhU2hvZVByaW50cywgZmFGaWxlQ2lyY2xlRXhjbGFtYXRpb24sIGZhV2FsbGV0LCBmYU1lc3NhZ2UyLCBmYUNvbW1lbnRBbHQyLCBmYVRyb3BoeSwgZmFGYWNlRGl6enkyLCBmYURpenp5MiwgZmFCYWN0ZXJpYSwgZmFFYXJEZWFmLCBmYURlYWYsIGZhRGVhZm5lc3MsIGZhSGFyZE9mSGVhcmluZywgZmFQZW9wbGVBcnJvd3MsIGZhUGVvcGxlQXJyb3dzTGVmdFJpZ2h0LCBmYUhhbmRzQ2xhcHBpbmcsIGZhVmlydXNDb3ZpZFNsYXNoLCBmYUNhbGVuZGFyRGF5czIsIGZhQ2FsZW5kYXJBbHQyLCBmYURpYW1vbmRUdXJuUmlnaHQsIGZhRGlyZWN0aW9ucywgZmFIYW5kUG9pbnRVcDIsIGZhQmV6aWVyQ3VydmUsIGZhUGVyc29uSGFsZkRyZXNzLCBmYVNxdWFyZVBvbGxIb3Jpem9udGFsLCBmYVBvbGxILCBmYVNjaG9vbENpcmNsZVhtYXJrLCBmYUhhbmRMaXphcmQyLCBmYUNoYWxrYm9hcmQsIGZhQmxhY2tib2FyZCwgZmFVcFJpZ2h0RnJvbVNxdWFyZSwgZmFFeHRlcm5hbExpbmtBbHQsIGZhU3F1YXJlRnVsbDIsIGZhQ2xvdmVyLCBmYVRlZXRoT3BlbiwgZmFCYXJzU3RhZ2dlcmVkLCBmYVJlb3JkZXIsIGZhU3RyZWFtLCBmYVdhcmVob3VzZSwgZmFTd2F0Y2hib29rLCBmYUNhbXBncm91bmQsIGZhUGVyc29uV2Fsa2luZ0Fycm93UmlnaHQsIGZhR2xhc3NlcywgZmFDaXJjbGVQYXVzZTIsIGZhUGF1c2VDaXJjbGUyLCBmYU1lbW9yeSwgZmFHaWZ0LCBmYU1vbmV5QmlsbFdoZWF0LCBmYUR1bmdlb24sIGZhU3VpdGNhc2VNZWRpY2FsLCBmYU1lZGtpdCwgZmFQZXJzb25DYW5lLCBmYUdhdWdlLCBmYURhc2hib2FyZCwgZmFHYXVnZU1lZCwgZmFUYWNob21ldGVyQWx0QXZlcmFnZSwgZmFFbnZlbG9wZU9wZW5UZXh0LCBmYVRvb2xib3gsIGZhUG93ZXJPZmYsIGZhU2lnbmFsLCBmYVNpZ25hbDUsIGZhU2lnbmFsUGVyZmVjdCwgZmFBcnJvd3NTcGluLCBmYUpvaW50LCBmYUJyYWlsbGUsIGZhQmFza2V0U2hvcHBpbmcsIGZhU2hvcHBpbmdCYXNrZXQsIGZhQnJpZGdlLCBmYVBsYW5lQXJyaXZhbCwgZmFDYXNoUmVnaXN0ZXIsIGZhUmluZywgZmFTaGFyZU5vZGVzLCBmYVNoYXJlQWx0LCBmYVBlcnNvbkNpcmNsZUV4Y2xhbWF0aW9uLCBmYUJpbm9jdWxhcnMsIGZhS2lwU2lnbiwgZmFIYXJkRHJpdmUyLCBmYUhkZDIsIGZhUmFua2luZ1N0YXIsIGZhVXNlclRpZSwgZmFFbGxpcHNpcywgZmFFbGxpcHNpc0gsIGZhU3RvcmVTbGFzaCwgZmFQZXJjZW50LCBmYVBlcmNlbnRhZ2UsIGZhRmlsZVppcHBlcjIsIGZhRmlsZUFyY2hpdmUyLCBmYURpc3BsYXksIGZhSWNvbnMsIGZhSGVhcnRNdXNpY0NhbWVyYUJvbHQsIGZhUnVsZXJWZXJ0aWNhbCwgZmFNYXBMb2NhdGlvbkRvdCwgZmFNYXBNYXJrZWRBbHQsIGZhSGVhcnRDcmFjaywgZmFIZWFydEJyb2tlbiwgZmFDb3csIGZhUnNzLCBmYUZlZWQsIGZhTWFnbmlmeWluZ0dsYXNzLCBmYVNlYXJjaCwgZmFDbG91ZE1vb24sIGZhQm94ZXNTdGFja2VkLCBmYUJveGVzLCBmYUJveGVzQWx0LCBmYUNvZGVCcmFuY2gsIGZhQmFuLCBmYUNhbmNlbCwgZmFKdWdEZXRlcmdlbnQsIGZhUmVwbHksIGZhTWFpbFJlcGx5LCBmYVN1blBsYW50V2lsdCwgZmFCYWN0ZXJpdW0sIGZhUmVjb3JkVmlueWwsIGZhRmxvcHB5RGlzazIsIGZhU2F2ZTIsIGZhVG9pbGV0c1BvcnRhYmxlLCBmYU8sIGZhUGFsZXR0ZSwgZmFVbmxvY2ssIGZhRWFyTGlzdGVuLCBmYUFzc2lzdGl2ZUxpc3RlbmluZ1N5c3RlbXMsIGZhQ29kZVB1bGxSZXF1ZXN0LCBmYUtleSwgZmFTa3VsbCwgZmFNYXJzU3Ryb2tlVXAsIGZhTWFyc1N0cm9rZVYsIGZhRmlyZUZsYW1lU2ltcGxlLCBmYUJ1cm4sIGZhVHJlZSwgZmFTbW9nLCBmYVMsIGZhSmVkaSwgZmFQZXJzb25IaWtpbmcsIGZhSGlraW5nLCBmYUFycm93c1VwVG9MaW5lLCBmYU1hcnNEb3VibGUsIGZhVGhlcm1vbWV0ZXIsIGZhUGFpbnRicnVzaCwgZmFQYWludEJydXNoLCBmYU5ldXRlciwgZmFTcXVhcmVQaG9uZUZsaXAsIGZhUGhvbmVTcXVhcmVBbHQsIGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQyLCBmYUdyaW5Ub25ndWVTcXVpbnQyLCBmYUNvbW1lbnREb2xsYXIsIGZhSGlwcG8sIGZhQm93bEZvb2QsIGZhU3F1YXJlVmlydXMsIGZhQ2xvdWRTdW5SYWluLCBmYUFycm93UmlnaHRMb25nLCBmYUxvbmdBcnJvd1JpZ2h0LCBmYUJ1aWxkaW5nVW4sIGZhVGVtcGVyYXR1cmVMb3csIGZhRG9vck9wZW4sIGZhQWxpZ25MZWZ0LCBmYUNhbWVyYTIsIGZhQ2FtZXJhQWx0MiwgZmFVc2Vyc1JheXMsIGZhUmFpbmJvdywgZmFTaXRlbWFwLCBmYUZhY2VHcmluU3RhcnMyLCBmYUdyaW5TdGFyczIsIGZhU29ydFVwLCBmYVNvcnRBc2MsIGZhRXllMiwgZmFDYXJldExlZnQsIGZhQXBwbGVXaG9sZSwgZmFBcHBsZUFsdCwgZmFTY3JvbGxUb3JhaCwgZmFUb3JhaCwgZmFIb3VzZUxvY2ssIGZhQXJyb3dzTGVmdFJpZ2h0VG9MaW5lLCBmYVRyYXNoLCBmYUZhY2VTYWRUZWFyMiwgZmFTYWRUZWFyMiwgZmFGYXgsIGZhUGVyc29uQ2lyY2xlUGx1cywgZmFIYW1zYSwgZmFQZXJzb25DaXJjbGVRdWVzdGlvbiwgZmFDbGlwYm9hcmRDaGVjaywgZmFTaGFyZUZyb21TcXVhcmUyLCBmYVNoYXJlU3F1YXJlMiwgZmFSZWNlaXB0LCBmYUVxdWFscywgZmFDaGV2cm9uVXAsIGZhVmlydXNTbGFzaCwgZmFTbGFzaCwgZmFFeHBhbmQsIGZhTm90ZVN0aWNreTIsIGZhU3RpY2t5Tm90ZTIsIGZhVGFibGVDb2x1bW5zLCBmYUNvbHVtbnMsIGZhUGVyc29uU2hlbHRlciwgZmFDaXJjbGVOb3RjaCwgZmFXYXRlciwgZmFEZWxldGVMZWZ0LCBmYUJhY2tzcGFjZSwgZmFCcm9vbUJhbGwsIGZhUXVpZGRpdGNoLCBmYVF1aWRkaXRjaEJyb29tQmFsbCwgZmFKLCBmYVNodXR0bGVTcGFjZSwgZmFTcGFjZVNodXR0bGUsIGZhWWluWWFuZywgZmFTdG9wLCBmYVRyb3dlbCwgZmFIYW5kQmFja0Zpc3QyLCBmYUhhbmRSb2NrMiwgZmFUZW1wZXJhdHVyZUhpZ2gsIGZhR3JlYXRlclRoYW4sIGZhQ3J1dGNoLCBmYVNlcHRhZ29uLCBmYUhlcHRhZ29uLCBmYVN0cmVldFZpZXcsIGZhV2F2ZVNxdWFyZSwgZmFBbmdsZUxlZnQsIGZhU2NyZXdkcml2ZXIsIGZhVHJhY3RvciwgZmFCcmlkZ2VDaXJjbGVYbWFyaywgZmFWaWFscywgZmFTdGV0aG9zY29wZSwgZmFQb2RjYXN0LCBmYUFycm93VXBSaWdodERvdHMsIGZhQ2hlc3NRdWVlbjIsIGZhQW5jaG9yQ2lyY2xlRXhjbGFtYXRpb24sIGZhRWxsaXBzaXNWZXJ0aWNhbCwgZmFFbGxpcHNpc1YsIGZhSGVhcnRDaXJjbGVFeGNsYW1hdGlvbiwgZmFCdWlsZGluZ0NpcmNsZUV4Y2xhbWF0aW9uLCBmYVBlcnNvbkFycm93VXBGcm9tTGluZSwgZmFOb3RFcXVhbCwgZmFUcmFpblRyYW0sIGZhUGxhbmVEZXBhcnR1cmUsIGZhUmlnaHRUb0JyYWNrZXQsIGZhU2lnbkluQWx0LCBmYVNkQ2FyZCwgZmFIb3VzZUNpcmNsZUV4Y2xhbWF0aW9uLCBmYVNoZWtlbFNpZ24sIGZhSWxzLCBmYVNoZWtlbCwgZmFTaGVxZWwsIGZhU2hlcWVsU2lnbiwgZmFSYWRpbywgZmFIYW5kRG90cywgZmFBbGxlcmdpZXMsIGZhQm9va1NrdWxsLCBmYUJvb2tEZWFkLCBmYVVubG9ja0tleWhvbGUsIGZhVW5sb2NrQWx0LCBmYUZpbGVBcnJvd1VwLCBmYUZpbGVVcGxvYWQsIGZhRmFjZUdyaW5UZWFyczIsIGZhR3JpblRlYXJzMiwgZmFQZW5Ub1NxdWFyZTIsIGZhRWRpdDIsIGZhRWFydGhFdXJvcGUsIGZhR2xvYmVFdXJvcGUsIGZhRmFjZUdyaW5CZWFtU3dlYXQyLCBmYUdyaW5CZWFtU3dlYXQyLCBmYUNpcmNsZUhhbGZTdHJva2UsIGZhQWRqdXN0LCBmYVBlcnNvbk1pbGl0YXJ5VG9QZXJzb24sIGZhVGFibGVDZWxsc0NvbHVtbkxvY2ssIGZhVHJ1Y2tGaWVsZFVuLCBmYUNsb2NrMiwgZmFDbG9ja0ZvdXIyLCBmYUJvb2ssIGZhRmFjZUxhdWdoV2luazIsIGZhTGF1Z2hXaW5rMiwgZmFDbG91ZE1lYXRiYWxsLCBmYUNoYXJ0QXJlYSwgZmFBcmVhQ2hhcnQsIGZhUnVwaWFoU2lnbiwgZmFUZXh0V2lkdGgsIGZhU2F0ZWxsaXRlLCBmYU1hZ25pZnlpbmdHbGFzc01pbnVzLCBmYVNlYXJjaE1pbnVzLCBmYVBlb3BsZUdyb3VwLCBmYVNxdWFyZUJpbmFyeSwgZmFNYXNrc1RoZWF0ZXIsIGZhVGhlYXRlck1hc2tzLCBmYUNhcnRQbHVzLCBmYUhhbmRzQXNsSW50ZXJwcmV0aW5nLCBmYUFtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nLCBmYUFzbEludGVycHJldGluZywgZmFIYW5kc0FtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nLCBmYVRhYmxlQ2VsbHNSb3dVbmxvY2ssIGZhUm9ja2V0LCBmYVNocmltcCwgZmFUZW5nZVNpZ24sIGZhVGVuZ2UsIGZhSG91c2VDaGltbmV5TWVkaWNhbCwgZmFDbGluaWNNZWRpY2FsLCBmYVVzZXJzU2xhc2gsIGZhUGFwZXJQbGFuZTIsIGZhQm9va0F0bGFzLCBmYUF0bGFzLCBmYVRhYmxlLCBmYUhlYXJ0MiwgZmFDaXJjbGVDaGV2cm9uVXAsIGZhQ2hldnJvbkNpcmNsZVVwLCBmYUJhdHRlcnlIYWxmLCBmYUJhdHRlcnkzLCBmYUZvbnRBd2Vzb21lMywgZmFGb250QXdlc29tZUZsYWczLCBmYUZvbnRBd2Vzb21lTG9nb0Z1bGwzLCBmYUhhbmRjdWZmcywgZmFIYXRDb3dib3lTaWRlLCBmYUluZHVzdHJ5LCBmYUxpbmVzTGVhbmluZywgZmFQYXNzcG9ydCwgZmFJbmZpbml0eSwgZmFDbG9uZTIsIGZhRm9yd2FyZCwgZmFNLCBmYVJvYWRTcGlrZXMsIGZhTW91bnRhaW4sIGZhQ2hlc3MsIGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzLCBmYVRlbXBlcmF0dXJlMywgZmFUaGVybW9tZXRlcjMsIGZhVGhlcm1vbWV0ZXJUaHJlZVF1YXJ0ZXJzLCBmYUIsIGZhU2hpZWxkVmlydXMsIGZhTGl0ZWNvaW5TaWduLCBmYURpY2VENiwgZmFHcmlwTGluZXNWZXJ0aWNhbCwgZmFHb2xmQmFsbFRlZSwgZmFHb2xmQmFsbCwgZmFIZXhhZ29uLCBmYUZvbGRlck9wZW4yLCBmYUthYWJhLCBmYUhhbmRIb2xkaW5nLCBmYVNpbmdsZVF1b3RlUmlnaHQsIGZhQm90dGxlRHJvcGxldCwgZmFXaW5kb3dNaW5pbWl6ZTIsIGZhQ2hldnJvblJpZ2h0LCBmYUVnZywgZmFMYW5kbWFya0RvbWUsIGZhTGFuZG1hcmtBbHQsIGZhV29ybSwgZmFVc2VySW5qdXJlZCwgZmFTdHJpa2V0aHJvdWdoLCBmYUJsb2csIGZhU3RvcHdhdGNoMjAsIGZhVHJ1Y2tQaWNrdXAsIGZhU2VlZGxpbmcsIGZhU3Byb3V0LCBmYVRyYW5zZ2VuZGVyLCBmYVRyYW5zZ2VuZGVyQWx0LCBmYVN0YXJIYWxmMiwgZmFQaG90b0ZpbG0sIGZhUGhvdG9WaWRlbywgZmFQdW1wTWVkaWNhbCwgZmFGaXJlLCBmYU1hZ25pZnlpbmdHbGFzc1BsdXMsIGZhU2VhcmNoUGx1cywgZmFGbGFzaywgZmFBbGlnblJpZ2h0LCBmYUNhYmxlQ2FyLCBmYVRyYW0sIGZhS2l0TWVkaWNhbCwgZmFGaXJzdEFpZCwgZmFHcmlwTGluZXMsIGZhQnVyZ2VyLCBmYUhhbWJ1cmdlciwgZmFTbm93bWFuLCBmYUhvdGVsLCBmYVByaW50LCBmYVZvbGxleWJhbGwsIGZhVm9sbGV5YmFsbEJhbGwsIGZhVHJhZmZpY0xpZ2h0LCBmYVBsYW5lQ2lyY2xlQ2hlY2ssIGZhVXNlcnMsIGZhQ2VydGlmaWNhdGUsIGZhQWxhcm1DbG9jazIsIGZhSGVsaWNvcHRlclN5bWJvbCwgZmFIb3VzZUNoaW1uZXlDcmFjaywgZmFIb3VzZURhbWFnZSwgZmFQZXJzb25NaWxpdGFyeVBvaW50aW5nLCBmYURhdGFiYXNlLCBmYU5ld3NwYXBlcjIsIGZhQ2xvdWRSYWluLCBmYU1heGltaXplLCBmYUV4cGFuZEFycm93c0FsdCwgZmFMb2NhdGlvbkFycm93LCBmYUNpdHksIGZhWFJheSwgZmFVbWJyZWxsYUJlYWNoLCBmYUFycm93UmlnaHRUb0JyYWNrZXQsIGZhU2lnbkluLCBmYUhlYWRzZXQsIGZhU3Bsb3RjaCwgZmFVcExvbmcsIGZhTG9uZ0Fycm93QWx0VXAsIGZhSGV4YWdvbk5vZGVzLCBmYUhvc3BpdGFsMiwgZmFIb3NwaXRhbEFsdDIsIGZhSG9zcGl0YWxXaWRlMiwgZmFQZXJzb25IYXJhc3NpbmcsIGZhTW9uZXlCaWxsVHJlbmRVcCwgZmFQZW5SdWxlciwgZmFQZW5jaWxSdWxlciwgZmFSZXBlYXQsIGZhQm9uZSwgZmFGaXJlRmxhbWVDdXJ2ZWQsIGZhRmlyZUFsdCwgZmFCdXNTaW1wbGUsIGZhQnVzQWx0LCBmYVZlbnVzTWFycywgZmFCbGVuZGVyLCBmYVUsIGZhU2hhcmUsIGZhTWFpbEZvcndhcmQsIGZhUGhvbmVGbGlwLCBmYVBob25lQWx0LCBmYVRvaWxldFBvcnRhYmxlLCBmYVBlcnNvblByZWduYW50LCBmYUxlc3NUaGFuLCBmYVN1cGVyc2NyaXB0LCBmYUNpcmNsZVN0b3AyLCBmYVN0b3BDaXJjbGUyLCBmYUFycm93c1VwRG93biwgZmFBcnJvd3NWLCBmYVBvb1N0b3JtLCBmYVBvb0JvbHQsIGZhVmlkZW9TbGFzaCwgZmFTcXVhcmVYbWFyaywgZmFUaW1lc1NxdWFyZSwgZmFYbWFya1NxdWFyZSwgZmFIYW5kSG9sZGluZ0Ryb3BsZXQsIGZhSGFuZEhvbGRpbmdXYXRlciwgZmFXb25TaWduLCBmYUtydywgZmFXb24sIGZhT2JqZWN0VW5ncm91cDIsIGZhQ29tbWVudDIsIGZhSGlsbEF2YWxhbmNoZSwgZmFBcnJvd3NUb0V5ZSwgZmFTbm93cGxvdywgZmFDaGFydEdhbnR0LCBmYVZpZGVvLCBmYVZpZGVvQ2FtZXJhLCBmYUNoZXNzUGF3bjIsIGZhU3luYWdvZ3VlLCBmYUJ1aWxkaW5nQ2lyY2xlQ2hlY2ssIGZhQ2FsZW5kYXJQbHVzMiwgZmFXaGVlbGNoYWlyTW92ZSwgZmFXaGVlbGNoYWlyQWx0LCBmYVVzZXJTaGllbGQsIGZhQm9sZCwgZmFIZWFydFB1bHNlLCBmYUhlYXJ0YmVhdCwgZmFTcXVhcmVSb290VmFyaWFibGUsIGZhU3F1YXJlUm9vdEFsdCwgZmFIYW5kc0J1YmJsZXMsIGZhSGFuZHNXYXNoLCBmYU1hcmtlciwgZmFDbGlwYm9hcmQyLCBmYVBsYWNlT2ZXb3JzaGlwLCBmYUNhbm5hYmlzLCBmYVBlb3BsZVJvb2YsIGZhRGlzZWFzZSwgZmFCb29rQmlibGUsIGZhQmlibGUsIGZhQ2hlc3NCb2FyZCwgZmFNYXJzLCBmYUxhcHRvcCwgZmFVc2VyWG1hcmssIGZhVXNlclRpbWVzLCBmYUZsYWdVc2EsIGZhSGFuZE1pZGRsZUZpbmdlciwgZmFNb3J0YXJQZXN0bGUsIGZhSGVhZFNpZGVDb3VnaCwgZmFQbGFuZUxvY2ssIGZhQmF0dGVyeVRocmVlUXVhcnRlcnMsIGZhQmF0dGVyeTQsIGZhRnJhbmNTaWduLCBmYUZpbHRlckNpcmNsZURvbGxhciwgZmFGdW5uZWxEb2xsYXIsIGZhQ2hlZXNlLCBmYUNpcmNsZUgsIGZhSG9zcGl0YWxTeW1ib2wsIGZhU2Nob29sLCBmYURpY2VGaXZlLCBmYVRvcm5hZG8sIGZhSmV0RmlnaHRlciwgZmFGaWdodGVySmV0LCBmYVRodW1ic0Rvd24yLCBmYUJyb29tLCBmYUZpbGVJbXBvcnQsIGZhQXJyb3dSaWdodFRvRmlsZSwgZmFVdGVuc2lscywgZmFDdXRsZXJ5LCBmYUlkQmFkZ2UyLCBmYVNwaWRlciwgZmFNb2JpbGVSZXRybywgZmFTaWduc1Bvc3QsIGZhTWFwU2lnbnMsIGZhR3JvdXBBcnJvd3NSb3RhdGUsIGZhQXJyb3dzU3BsaXRVcEFuZExlZnQsIGZhRmlsbERyaXAsIGZhU2hpZWxkSGVhcnQsIGZhUGVyc29uU2tpaW5nTm9yZGljLCBmYVNraWluZ05vcmRpYywgZmFTcXVhcmVDaGVjazIsIGZhQ2hlY2tTcXVhcmUyLCBmYUJhdGgsIGZhQmF0aHR1YiwgZmFDaGVzc0Jpc2hvcDIsIGZhUHJlc2NyaXB0aW9uQm90dGxlTWVkaWNhbCwgZmFQcmVzY3JpcHRpb25Cb3R0bGVBbHQsIGZhRHJhd1BvbHlnb24sIGZhVmVjdG9yUG9seWdvbiwgZmFJQ3Vyc29yLCBmYUhlYXJ0Q2lyY2xlUGx1cywgZmFTaGllbGREb2csIGZhR3JlYXRlclRoYW5FcXVhbCwgZmFFbnZlbG9wZU9wZW4yLCBmYU1vdW5kLCBmYVZvaWNlbWFpbCwgZmFWZXN0LCBmYUF1ZGlvRGVzY3JpcHRpb24sIGZhVywgZmFFeWVEcm9wcGVyLCBmYUV5ZURyb3BwZXJFbXB0eSwgZmFFeWVkcm9wcGVyLCBmYUNpcmNsZVhtYXJrMiwgZmFUaW1lc0NpcmNsZTIsIGZhWG1hcmtDaXJjbGUyLCBmYVRyYWlsZXIsIGZhVHVya2lzaExpcmFTaWduLCBmYVRyeSwgZmFUdXJraXNoTGlyYSwgZmFWb2xjYW5vLCBmYVdhbmRTcGFya2xlcywgZmFNaWNyb3Bob25lLCBmYUNyb3duLCBmYVRlbnRBcnJvd1R1cm5MZWZ0LCBmYVRydWNrRmFzdCwgZmFTaGlwcGluZ0Zhc3QsIGZhVXNlclBlbiwgZmFVc2VyRWRpdCwgZmFVc2VyQ2xvY2ssIGZhU2hvd2VyLCBmYVNxdWFyZUNhcmV0VXAyLCBmYUNhcmV0U3F1YXJlVXAyLCBmYU1hcExvY2F0aW9uLCBmYU1hcE1hcmtlZCwgZmFQZW5GYW5jeSwgZmFFdXJvU2lnbiwgZmFFdXIsIGZhRXVybywgZmFIb3VzZUNpcmNsZVhtYXJrLCBmYUxpcmFTaWduLCBmYVllblNpZ24sIGZhQ255LCBmYUpweSwgZmFSbWIsIGZhWWVuLCBmYUJveE9wZW4sIGZhVHJ1Y2tGaWVsZCwgZmFMb2NhdGlvblBpbkxvY2ssIGZhUGVyc29uUHJheWluZywgZmFQcmF5LCBmYUNsaXBib2FyZExpc3QsIGZhU2Fja0RvbGxhciwgZmFNb3VudGFpblN1biwgZmFBcnJvd1VwV2lkZVNob3J0LCBmYVNvcnRBbW91bnRVcCwgZmFVc2Vyc0xpbmUsIGZhU3Rhck9mRGF2aWQsIGZhTm90ZXNNZWRpY2FsLCBmYUF1c3RyYWxTaWduLCBmYUNsaXBib2FyZFVzZXIsIGZhRmlsZUltYWdlMiwgZmFTcXVhcmVDYXJldFJpZ2h0MiwgZmFDYXJldFNxdWFyZVJpZ2h0MiwgZmFWaWFsLCBmYUhlbGljb3B0ZXIsIGZhTWl0dGVuLCBmYUdhc1B1bXAsIGZhRW52ZWxvcGVDaXJjbGVDaGVjaywgZmFQZXJzb25Ta2F0aW5nLCBmYVNrYXRpbmcsIGZhU3VuMiwgZmFCYXNlYmFsbCwgZmFCYXNlYmFsbEJhbGwsIGZhSW1hZ2UyLCBmYU5vdGRlZiwgZmFCYXNrZXRiYWxsLCBmYUJhc2tldGJhbGxCYWxsLCBmYVBlbmNpbCwgZmFQZW5jaWxBbHQsIGZhUGVyc29uV2Fsa2luZ0Fycm93TG9vcExlZnQsIGZhRGljZVNpeCwgZmFBbmdsZXNEb3duLCBmYUFuZ2xlRG91YmxlRG93biwgZmFTeXJpbmdlLCBmYVdoZWF0QXduLCBmYVdoZWF0QWx0LCBmYVBsYW5lVXAsIGZhQWxpZ25DZW50ZXIsIGZhSG9ja2V5UHVjaywgZmFDaXJjbGVBcnJvd0xlZnQsIGZhQXJyb3dDaXJjbGVMZWZ0LCBmYVBsdWdDaXJjbGVCb2x0LCBmYVJlc3Ryb29tLCBmYUFuY2hvckxvY2ssIGZhVGltZWxpbmUsIGZhTGlnaHRidWxiMiwgZmFDaXJjbGVBcnJvd1JpZ2h0LCBmYUFycm93Q2lyY2xlUmlnaHQsIGZhTWFyc0FuZFZlbnVzLCBmYU5ldHdvcmtXaXJlZCwgZmFCdWlsZGluZ1NoaWVsZCwgZmFDb2RlLCBmYUZlYXRoZXJQb2ludGVkLCBmYUZlYXRoZXJBbHQsIGZhRmlsZUNpcmNsZVF1ZXN0aW9uLCBmYVNpZ25hdHVyZSwgZmFFYXJ0aEFtZXJpY2FzLCBmYUVhcnRoLCBmYUVhcnRoQW1lcmljYSwgZmFHbG9iZUFtZXJpY2FzLCBmYUNhcnJvdCwgZmFUZW1wZXJhdHVyZUZ1bGwsIGZhVGVtcGVyYXR1cmU0LCBmYVRoZXJtb21ldGVyNCwgZmFUaGVybW9tZXRlckZ1bGwsIGZhVGFibGVDZWxsc1Jvd0xvY2ssIGZhQm9sdExpZ2h0bmluZywgZmFDbG91ZFNob3dlcnNXYXRlciwgZmFBcnJvd1VwTG9uZywgZmFMb25nQXJyb3dVcCwgZmFBZGRyZXNzQ2FyZDIsIGZhQ29udGFjdENhcmQyLCBmYVZjYXJkMiwgZmFBbmdsZVJpZ2h0LCBmYUZhY2VNZWgyLCBmYU1laDIsIGZhQXJyb3dVcEZyb21Hcm91bmRXYXRlciwgZmFNYXAyLCBmYVVzZXJQbHVzLCBmYVZlbnVzLCBmYURpYWdyYW1TdWNjZXNzb3IsIGZhSGVhZFNpZGVDb3VnaFNsYXNoLCBmYURpYWdyYW1Qcm9qZWN0LCBmYVByb2plY3REaWFncmFtLCBmYVRlcm1pbmFsLCBmYUhvdXNlRmlyZSwgZmFNYXNrLCBmYUh1cnJpY2FuZSwgZmFFYXJ0aEFmcmljYSwgZmFHbG9iZUFmcmljYSwgZmFUaHVtYnRhY2ssIGZhVGh1bWJUYWNrLCBmYUhhbmRQb2ludERvd24yLCBmYUZhY2VNZWhCbGFuazIsIGZhTWVoQmxhbmsyLCBmYVRlbXBlcmF0dXJlRW1wdHksIGZhVGVtcGVyYXR1cmUwLCBmYVRoZXJtb21ldGVyMCwgZmFUaGVybW9tZXRlckVtcHR5LCBmYUJvcmRlck5vbmUsIGZhSGlnaGxpZ2h0ZXIsIGZhTW9uZXlCaWxsV2F2ZSwgZmFUb2lsZXRQYXBlclNsYXNoLCBmYUZpbGVTaGllbGQsIGZhVGV4dEhlaWdodCwgZmFGYWNlR3JpblRvbmd1ZTIsIGZhR3JpblRvbmd1ZTIsIGZhRmlsZVNpZ25hdHVyZSwgZmFCdWlsZGluZ1doZWF0LCBmYVBsdWdDaXJjbGVNaW51cywgZmFGdXRib2wyLCBmYUZ1dGJvbEJhbGwyLCBmYVNvY2NlckJhbGwyLCBmYUNpcmNsZVBsdXMsIGZhUGx1c0NpcmNsZSwgZmFCcmF6aWxpYW5SZWFsU2lnbiwgZmFTdGFyQW5kQ3Jlc2NlbnQsIGZhRmFjZVN1cnByaXNlMiwgZmFTdXJwcmlzZTIsIGZhSG9zcGl0YWxVc2VyLCBmYUFycm93RG93blVwTG9jaywgZmFGb2xkZXIyLCBmYUZvbGRlckJsYW5rMiwgZmFIb2xseUJlcnJ5LCBmYVZlbnVzRG91YmxlLCBmYUNsaXBib2FyZFF1ZXN0aW9uLCBmYUhvdGRvZywgZmFBcnJvd1VwRnJvbUJyYWNrZXQsIGZhTWljcm9zY29wZSwgZmFDbG91ZDIsIGZhQmFzZWJhbGxCYXRCYWxsLCBmYUNhclJlYXIsIGZhQ2FyQWx0LCBmYVRodW1idGFja1NsYXNoLCBmYVRodW1iVGFja1NsYXNoLCBmYVBsdXNNaW51cywgZmFIb3VzZUNpcmNsZUNoZWNrLCBmYUNhbGVuZGFyRGF5LCBmYUNpcmNsZTIsIGZhTW9iaWxlVmlicmF0ZSwgZmFGYWNlR3JpblNxdWludDIsIGZhR3JpblNxdWludDIsIGZhVXNlcnNCZXR3ZWVuTGluZXMsIGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcmssIGZhVGFibGVMaXN0LCBmYVRoTGlzdCwgZmFGbGFza1ZpYWwsIGZhQ2lyY2xlRXhjbGFtYXRpb24sIGZhRXhjbGFtYXRpb25DaXJjbGUsIGZhVGF4aSwgZmFDYWIsIGZhVGV4dFNsYXNoLCBmYVJlbW92ZUZvcm1hdCwgZmFQZW9wbGVQdWxsaW5nLCBmYUJhY2t3YXJkLCBmYUNhckJ1cnN0LCBmYUNhckNyYXNoLCBmYUxpbmssIGZhQ2hhaW4sIGZhQmFja3dhcmRTdGVwLCBmYVN0ZXBCYWNrd2FyZCwgZmFYLCBmYUNpcmNsZVVzZXIyLCBmYVVzZXJDaXJjbGUyLCBmYVJlY3RhbmdsZUxpc3QyLCBmYUxpc3RBbHQyLCBmYUhhbmQyLCBmYUhhbmRQYXBlcjIsIGZhVmFuU2h1dHRsZSwgZmFTaHV0dGxlVmFuLCBmYVN0YWlycywgZmFIb3JzZUhlYWQsIGZhVmF1bHQsIGZhRHJ1bVN0ZWVscGFuLCBmYVRodW1ic1VwMiwgZmFTdGFtcCwgZmFNZW5vcmFoLCBmYUNoaWxkcmVuLCBmYUNoYXJ0TGluZSwgZmFMaW5lQ2hhcnQsIGZhU3F1YXJlRW52ZWxvcGUsIGZhRW52ZWxvcGVTcXVhcmUsIGZhQmFuU21va2luZywgZmFTbW9raW5nQmFuLCBmYVRydWNrRnJvbnQsIGZhQnVpbGRpbmcyLCBmYUJ1bGxzZXllLCBmYUFycm93TGVmdExvbmcsIGZhTG9uZ0Fycm93TGVmdCwgZmFDaGVzc1Jvb2syLCBmYUJsZW5kZXJQaG9uZSwgZmFBcnJvd1R1cm5VcCwgZmFMZXZlbFVwLCBmYUJpY3ljbGUsIGZhQ2lyY2xlQXJyb3dEb3duLCBmYUFycm93Q2lyY2xlRG93biwgZmFHZWFyLCBmYUNvZywgZmFNYXJzQW5kVmVudXNCdXJzdCwgZmFPdHRlciwgZmFDaXJjbGVDaGV2cm9uTGVmdCwgZmFDaGV2cm9uQ2lyY2xlTGVmdCwgZmFDaXJjbGVRdWVzdGlvbjIsIGZhUXVlc3Rpb25DaXJjbGUyLCBmYVdhbGtpZVRhbGtpZSwgZmFVc2VyR3JvdXAsIGZhVXNlckZyaWVuZHMsIGZhSG91c2VDaGltbmV5LCBmYUhvbWVMZywgZmFSaWdodEZyb21CcmFja2V0LCBmYVNpZ25PdXRBbHQsIGZhRmlsZTIsIGZhUGxhbmVTbGFzaCwgZmFDbG91ZFNob3dlcnNIZWF2eSwgZmFQZXJzb25GYWxsaW5nLCBmYVR1cm5Eb3duLCBmYUxldmVsRG93bkFsdCwgZmFVcFJpZ2h0QW5kRG93bkxlZnRGcm9tQ2VudGVyLCBmYUV4cGFuZEFsdCwgZmFVc2VyVGFnLCBmYUhhbmRTcGFya2xlcywgZmFBcnJvd3NUb0RvdCwgZmFGYWNlU2FkQ3J5MiwgZmFTYWRDcnkyLCBmYURvbmdTaWduLCBmYVBlb3BsZUxpbmUsIGZhU3F1YXJlUnNzLCBmYVJzc1NxdWFyZSwgZmFDYWxlbmRhck1pbnVzMiwgZmFDaGFydERpYWdyYW0sIGZhRmFjZVRpcmVkMiwgZmFUaXJlZDIsIGZhSGFuZFBvaW50UmlnaHQyLCBmYUFycm93VXAsIGZhQ3ViZXNTdGFja2VkLCBmYUNoaWxkQ29tYmF0YW50LCBmYUNoaWxkUmlmbGUsIGZhVmVzdFBhdGNoZXMsIGZhTWFydGluaUdsYXNzRW1wdHksIGZhR2xhc3NNYXJ0aW5pLCBmYU1hZ25ldCwgZmFSb2FkQmFycmllciwgZmFDb21wYXNzRHJhZnRpbmcsIGZhRHJhZnRpbmdDb21wYXNzLCBmYVNxdWFyZVBlcnNvbkNvbmZpbmVkLCBmYVBsYXRlV2hlYXQsIGZhU2lnbkhhbmdpbmcsIGZhU2lnbiwgZmFDYXJCYXR0ZXJ5LCBmYUJhdHRlcnlDYXIsIGZhU2hpcnQsIGZhVFNoaXJ0LCBmYVRzaGlydCwgZmFQYXJhZ3JhcGgsIGZhRW52ZWxvcGVzQnVsaywgZmFNYWlsQnVsaywgZmFHdWl0YXIsIGZhU3VpdGNhc2UsIGZhQ2lyY2xlVXAyLCBmYUFycm93QWx0Q2lyY2xlVXAyLCBmYUYsIGZhWG1hcmtzTGluZXMsIGZhRWFydGhPY2VhbmlhLCBmYUdsb2JlT2NlYW5pYSwgZmFDb21tZW50U2xhc2gsIGZhUGxheSwgZmFWaWFsQ2lyY2xlQ2hlY2ssIGZhQnJpZGdlQ2lyY2xlQ2hlY2ssIGZhQ2VkaVNpZ24sIGZhUHV6emxlUGllY2UsIGZhSGVsbWV0VW4sIGZhR2xhc3NXYXRlciwgZmFIZWFydENpcmNsZUJvbHQsIGZhUHVtcFNvYXAsIGZhSGFuZFNjaXNzb3JzMiwgZmFEb2xseSwgZmFEb2xseUJveCwgZmFQYXBlcmNsaXAsIGZhRGVtb2NyYXQsIGZhU3F1YXJlQXJyb3dVcFJpZ2h0LCBmYUV4dGVybmFsTGlua1NxdWFyZSwgZmFGZXJyeSwgZmFNb3NxdWl0bywgZmFCdWlsZGluZ0NpcmNsZUFycm93UmlnaHQsIGZhTGVmdFJpZ2h0LCBmYUFycm93c0FsdEgsIGZhVmlydXMsIGZhR2VtMiwgZmFUb2lsZXQsIGZhU2luZ2xlUXVvdGVMZWZ0LCBmYU1vbmV5QmlsbHMsIGZhVGFibGV0QnV0dG9uLCBmYVJlY3RhbmdsZVhtYXJrMiwgZmFSZWN0YW5nbGVUaW1lczIsIGZhVGltZXNSZWN0YW5nbGUyLCBmYVdpbmRvd0Nsb3NlMiwgZmFXcmVuY2gsIGZhVHJhc2hDYW4yLCBmYVRyYXNoQWx0MiwgZmFUYWJsZUNlbGxzLCBmYVRoLCBmYVJpYmJvbiwgZmFMYW5kbWFya0ZsYWcsIGZhVXBEb3duTGVmdFJpZ2h0LCBmYUFycm93c0FsdCwgZmFDYXJTaWRlLCBmYVRyYXNoQXJyb3dVcCwgZmFUcmFzaFJlc3RvcmUsIGZhTGlmZVJpbmcyLCBmYUNvcHlyaWdodDIsIGZhRmlsZVByZXNjcmlwdGlvbiwgZmFFcmFzZXIsIGZhSG91cmdsYXNzU3RhcnQsIGZhSG91cmdsYXNzMSwgZmFDaXJjbGVMZWZ0MiwgZmFBcnJvd0FsdENpcmNsZUxlZnQyLCBmYUNydXplaXJvU2lnbiwgZmFTbW9raW5nLCBmYVNxdWFyZVBvbGxWZXJ0aWNhbCwgZmFQb2xsLCBmYVBlcnNvbkNpcmNsZU1pbnVzLCBmYUJpb2hhemFyZCwgZmFCZWxsQ29uY2llcmdlLCBmYUNvbmNpZXJnZUJlbGwsIGZhUnVsZXJIb3Jpem9udGFsLCBmYUhvcnNlLCBmYUNhbGVuZGFyMiwgZmFIYW5kc0hvbGRpbmdDaGlsZCwgZmFJdGFsaWMsIGZhS2hhbmRhLCBmYUZhY2VGcm93bk9wZW4yLCBmYUZyb3duT3BlbjIsIGZhQ2hlY2ssIGZhRmluZ2VycHJpbnQsIGZhQ2hhcmdpbmdTdGF0aW9uLCBmYVVzZXJMb2NrLCBmYU1vYmlsZVNjcmVlbkJ1dHRvbiwgZmFNb2JpbGVBbHQsIGZhQW5jaG9yQ2lyY2xlQ2hlY2ssIGZhUGVyc29uV2Fsa2luZ1dpdGhDYW5lLCBmYUJsaW5kLCBmYUZpbGVXYXZlZm9ybSwgZmFGaWxlTWVkaWNhbEFsdCwgZmFIb3VzZUNyYWNrLCBmYUhhdFdpemFyZCwgZmFVc2VyRG9jdG9yLCBmYVVzZXJNZCwgZmFDaGFydEJhcjIsIGZhQmFyQ2hhcnQyLCBmYVNwcmF5Q2FuU3BhcmtsZXMsIGZhQWlyRnJlc2hlbmVyLCBmYUJhaHRTaWduLCBmYVRlbXBlcmF0dXJlQXJyb3dVcCwgZmFUZW1wZXJhdHVyZVVwLCBmYVdlYkF3ZXNvbWUyLCBmYU5vbkJpbmFyeSwgZmFOLCBmYUFycm93c1VwRG93bkxlZnRSaWdodCwgZmFBcnJvd3MsIGZhSG91c2UyLCBmYUhvbWUyLCBmYUhvbWVBbHQyLCBmYUhvbWVMZ0FsdDIsIGZhU3Bpbm5lciwgZmFHYXZlbCwgZmFMZWdhbCwgZmFUaWNrZXRTaW1wbGUsIGZhVGlja2V0QWx0LCBmYURvdmUsIGZhVGFycERyb3BsZXQsIGZhVHJlZUNpdHksIGZhVHVyblVwLCBmYUxldmVsVXBBbHQsIGZhVGVtcGVyYXR1cmVRdWFydGVyLCBmYVRlbXBlcmF0dXJlMSwgZmFUaGVybW9tZXRlcjEsIGZhVGhlcm1vbWV0ZXJRdWFydGVyLCBmYVNsaWRlcnMsIGZhU2xpZGVyc0gsIGZhTW9zcXVlLCBmYUgsIGZhSW5mbywgZmFQZXJzb25XYWxraW5nLCBmYVdhbGtpbmcsIGZhQXJyb3dUdXJuRG93biwgZmFMZXZlbERvd24sIGZhUm9hZCwgZmFTcGlyYWwsIGZhRmFjZUZyb3duMiwgZmFGcm93bjIsIGZhV2luZUdsYXNzRW1wdHksIGZhV2luZUdsYXNzQWx0LCBmYUNsYXBwZXJib2FyZCwgZmFGb3J3YXJkU3RlcCwgZmFTdGVwRm9yd2FyZCwgZmFTcXVhcmVVcFJpZ2h0LCBmYUV4dGVybmFsTGlua1NxdWFyZUFsdCwgZmFCb29rSm91cm5hbFdoaWxscywgZmFKb3VybmFsV2hpbGxzLCBmYUNoYW1wYWduZUdsYXNzZXMsIGZhR2xhc3NDaGVlcnMsIGZhRHVtcHN0ZXIsIGZhSGVhcnRDaXJjbGVYbWFyaywgZmFDb21wdXRlciwgZmFXYW5kTWFnaWMsIGZhTWFnaWMsIGZhQnJhaW4sIGZhQnJpZWZjYXNlTWVkaWNhbCwgZmFIb3VzZU1lZGljYWxDaXJjbGVFeGNsYW1hdGlvbiwgZmFDb2RlQ29tbWl0LCBmYVBlcnNvbkJyZWFzdGZlZWRpbmcsIGZhUGVyc29uUmF5cywgZmFNYW5hdFNpZ24sIGZhU29ydCwgZmFVbnNvcnRlZCwgZmFDaXJjbGVSYWRpYXRpb24sIGZhUmFkaWF0aW9uQWx0LCBmYUxhcHRvcENvZGUsIGZhU2luaywgZmFBcnJvd1VwRnJvbVdhdGVyUHVtcCwgZmFNaWNyb3Bob25lTGluZXNTbGFzaCwgZmFNaWNyb3Bob25lQWx0U2xhc2gsIGZhU2VydmVyLCBmYVVzZXIyLCBmYVVzZXJBbHQyLCBmYVVzZXJMYXJnZTIsIGZhU25vd2ZsYWtlMiwgZmFTa3VsbENyb3NzYm9uZXMsIGZhUGVzb1NpZ24sIGZhV2luZUdsYXNzLCBmYVRlbXBlcmF0dXJlSGFsZiwgZmFUZW1wZXJhdHVyZTIsIGZhVGhlcm1vbWV0ZXIyLCBmYVRoZXJtb21ldGVySGFsZiwgZmFUaWNrZXQsIGZhV2hlYXRBd25DaXJjbGVFeGNsYW1hdGlvbiwgZmFBcnJvd3NUdXJuUmlnaHQsIGZhQ2FuZHlDYW5lLCBmYVdoZWVsY2hhaXIsIGZhU3BlbGxDaGVjaywgZmFWb2x1bWVPZmYsIGZhTHVuZ3MsIGZhQm9va21hcmsyLCBmYUJhcmNvZGUsIGZhTGlzdE9sLCBmYUxpc3QxMiwgZmFMaXN0TnVtZXJpYywgZmFGaWxlQ2lyY2xlWG1hcmssIGZhQ3ViZSwgZmFUYXBlLCBmYUJvbWIsIGZhU2NhbGVVbmJhbGFuY2VkLCBmYUJhbGFuY2VTY2FsZUxlZnQsIGZhU3F1YXJlQ2FyZXRMZWZ0MiwgZmFDYXJldFNxdWFyZUxlZnQyLCBmYVJ1bGVyLCBmYUksIGZhVm9sdW1lWG1hcmssIGZhVm9sdW1lTXV0ZSwgZmFWb2x1bWVUaW1lcywgZmFBcmNod2F5LCBmYVBlcnNvbkRpZ2dpbmcsIGZhRGlnZ2luZywgZmFHYXVnZUhpZ2gsIGZhVGFjaG9tZXRlckFsdCwgZmFUYWNob21ldGVyQWx0RmFzdCwgZmFHZW5kZXJsZXNzLCBmYUNsb3VkU3VuLCBmYUFycm93UmlnaHQsIGZhSGFuZHNoYWtlMiwgZmFIYW5kc2hha2VBbHQyLCBmYUhhbmRzaGFrZVNpbXBsZTIsIGZhUGVyc29uU2tpaW5nLCBmYVNraWluZywgZmFCcmlkZ2VXYXRlciwgZmFCdWlsZGluZ05nbywgZmFJZ2xvbywgZmFDaXJjbGVEb2xsYXJUb1Nsb3QsIGZhRG9uYXRlLCBmYVksIGZhRmFjZVNtaWxlV2luazIsIGZhU21pbGVXaW5rMiwgZmFEaWNlRm91ciwgZmFGYWNlR3JpblNxdWludFRlYXJzMiwgZmFHcmluU3F1aW50VGVhcnMyLCBmYUZpbGVBdWRpbzIsIGZhQXJyb3dzRG93blRvTGluZSwgZmFHLCBmYVZpaGFyYSwgZmFGbGFnQ2hlY2tlcmVkLCBmYUdhdWdlU2ltcGxlLCBmYUdhdWdlU2ltcGxlTWVkLCBmYVRhY2hvbWV0ZXJBdmVyYWdlLCBmYVJpZ2h0TGVmdCwgZmFFeGNoYW5nZUFsdCwgZmFQaWxscywgZmFFeHBsb3Npb24sIGZhQXJyb3dzRG93blRvUGVvcGxlLCBmYVVzZXJzVmlld2ZpbmRlciwgZmFDYXJPbiwgZmFTbGVpZ2gsIGZhRHVtYmJlbGwsIGZhQmFieUNhcnJpYWdlLCBmYUNhcnJpYWdlQmFieSwgZmFLaXdpQmlyZCwgZmFDYWxlbmRhclhtYXJrMiwgZmFDYWxlbmRhclRpbWVzMiwgZmFDaXJjbGVEb3duMiwgZmFBcnJvd0FsdENpcmNsZURvd24yLCBmYUZpbGVNZWRpY2FsLCBmYVhtYXJrLCBmYUNsb3NlLCBmYU11bHRpcGx5LCBmYVJlbW92ZSwgZmFUaW1lcywgZmFTaGFwZXMsIGZhVHJpYW5nbGVDaXJjbGVTcXVhcmUsIGZhRGljZU9uZSwgZmFMb2NrT3BlbiwgZmFQZXBwZXJIb3QsIGZhRHJvcGxldFNsYXNoLCBmYVRpbnRTbGFzaCwgZmFEcm9wbGV0LCBmYVRpbnQsIGZhRmlsZUxpbmVzMiwgZmFGaWxlQWx0MiwgZmFGaWxlVGV4dDIsIGZhQ29tbWVudHNEb2xsYXIsIGZhTWFnbmlmeWluZ0dsYXNzTG9jYXRpb24sIGZhU2VhcmNoTG9jYXRpb24sIGZhRmlsZUludm9pY2UsIGZhUGVudGFnb24sIGZhUmVwdWJsaWNhbiwgZmFTaG9wLCBmYVN0b3JlQWx0LCBmYUZpbG0sIGZhRmlsbUFsdCwgZmFGaWxtU2ltcGxlLCBmYUJ1aWxkaW5nQ2lyY2xlWG1hcmssIGZhQ29tbWVudHMyLCBmYVRhZ3MsIGZhR3VuLCBmYUNpcmNsZUNoZWNrMiwgZmFDaGVja0NpcmNsZTIsIGZhSWRDYXJkQ2xpcCwgZmFJZENhcmRBbHQsIGZhTW9vbjIsIGZhT2lsV2VsbCwgZmFUYWNob2dyYXBoRGlnaXRhbCwgZmFEaWdpdGFsVGFjaG9ncmFwaCwgZmFUYWJsZXQsIGZhVGFibGV0QW5kcm9pZCwgZmFSdWJsZVNpZ24sIGZhUm91YmxlLCBmYVJ1YiwgZmFSdWJsZSwgZmFDbG9zZWRDYXB0aW9uaW5nMiwgZmFQZW4sIGZhUGxhbmUsIGZhSW1hZ2VzMiwgZmFNb2JpbGVTY3JlZW4sIGZhTW9iaWxlQW5kcm9pZEFsdCwgZmFHdWFyYW5pU2lnbiwgZmFCYWdTaG9wcGluZywgZmFTaG9wcGluZ0JhZywgZmFDaXJjbGVSaWdodDIsIGZhQXJyb3dBbHRDaXJjbGVSaWdodDIsIGZhUGhvbmVWb2x1bWUsIGZhVm9sdW1lQ29udHJvbFBob25lLCBmYUN1YmVzLCBmYVBob25lLCBmYVRvcmlpR2F0ZSwgZmFCYWNvbiwgZmFQZXJzb25GYWxsaW5nQnVyc3QsIGZhUXVvdGVSaWdodCwgZmFRdW90ZVJpZ2h0QWx0LCBmYUhvdXNlTWVkaWNhbEZsYWcsIGZhUHJlc2NyaXB0aW9uLCBmYURpY2VUaHJlZSwgZmFCdWlsZGluZ0xvY2ssIGZhSWRDYXJkMiwgZmFEcml2ZXJzTGljZW5zZTIsIGZhQ2lyY2xlUGxheTIsIGZhUGxheUNpcmNsZTIsIGZhRmFjZUxhdWdoQmVhbTIsIGZhTGF1Z2hCZWFtMiwgZmFMZWFmLCBmYUhvdXNlQ2hpbW5leVVzZXIsIGZhUm90YXRlUmlnaHQsIGZhUmVkb0FsdCwgZmFSb3RhdGVGb3J3YXJkLCBmYVRvb3RoLCBmYUhvdXNlQ2hpbW5leVdpbmRvdywgZmFNb3RvcmN5Y2xlLCBmYUJhY2t3YXJkRmFzdCwgZmFGYXN0QmFja3dhcmQsIGZhQWRkcmVzc0Jvb2syLCBmYUNvbnRhY3RCb29rMiwgZmFTYWlsYm9hdCwgZmFCb29rQm9va21hcmssIGZhTWFnbmlmeWluZ0dsYXNzQXJyb3dSaWdodCwgZmFNaWNyb3Bob25lTGluZXMsIGZhTWljcm9waG9uZUFsdCwgZmFSZXBseUFsbCwgZmFNYWlsUmVwbHlBbGwsIGZhVW5pdmVyc2FsQWNjZXNzLCBmYVRvaWxldFBhcGVyLCBmYVRvaWxldFBhcGVyQWx0LCBmYVRvaWxldFBhcGVyQmxhbmssIGZhVnJDYXJkYm9hcmQsIGZhUGl6emFTbGljZSwgZmFTcHJheUNhbiwgZmFWb2x1bWVMb3csIGZhVm9sdW1lRG93biwgZmFDcm9zcywgZmFQZXJzb24sIGZhTWFsZSwgZmFIb3VyZ2xhc3MzLCBmYUhvdXJnbGFzc0VtcHR5MiwgZmFGaXNoLCBmYURydW1zdGlja0JpdGUsIGZhQ2hhcnRTaW1wbGUsIGZhQXRvbSwgZmFQLCBmYUpldEZpZ2h0ZXJVcCwgZmFQbHVnQ2lyY2xlWG1hcmssIGZhU2hlZXRQbGFzdGljLCBmYVYsIGZhTGlzdCwgZmFMaXN0U3F1YXJlcywgZmFTb2xhclBhbmVsLCBmYUxhbmRNaW5lT24sIGZhSGVhZHBob25lczIsIGZhSGVhZHBob25lc0FsdDIsIGZhSGVhZHBob25lc1NpbXBsZTIsIGZhQnVzLCBmYUZpbGVQb3dlcnBvaW50MiwgZmFRdW90ZUxlZnQsIGZhUXVvdGVMZWZ0QWx0LCBmYUNoZXZyb25Eb3duLCBmYUVhcnRoQXNpYSwgZmFHbG9iZUFzaWEsIGZhQ2VudFNpZ24sIGZhU2hpZWxkQ2F0LCBmYVNjaG9vbENpcmNsZUNoZWNrLCBmYU1hcnRpbmlHbGFzcywgZmFHbGFzc01hcnRpbmlBbHQsIGZhUGx1ZywgZmFQYW5vcmFtYSwgZmFDbG9ja1JvdGF0ZUxlZnQsIGZhSGlzdG9yeSwgZmFKYXJXaGVhdCwgZmFDbG91ZEFycm93RG93biwgZmFDbG91ZERvd25sb2FkLCBmYUNsb3VkRG93bmxvYWRBbHQsIGZhVHJ1Y2tSYW1wQm94LCBmYVRydWNrTG9hZGluZywgZmFBbmdsZURvd24sIGZhUGx1Z0NpcmNsZUNoZWNrLCBmYVdpbmRvd01heGltaXplMiwgZmFIYW5kc0hvbGRpbmdDaXJjbGUsIGZhTG9jYXRpb25QaW4sIGZhTWFwTWFya2VyLCBmYUJvd2xpbmdCYWxsLCBmYUNhcnRGbGF0YmVkLCBmYURvbGx5RmxhdGJlZCwgZmFIb3VzZVVzZXIsIGZhSG9tZVVzZXIsIGZhR2hvc3QsIGZhQ29tbWVudE5vZGVzLCBmYVBlcnNvbkFycm93RG93blRvTGluZSwgZmFQbHVnQ2lyY2xlUGx1cywgZmFQZXJzb25Td2ltbWluZywgZmFTd2ltbWVyLCBmYUNvbW1lbnREb3RzMiwgZmFDb21tZW50aW5nMiwgZmFDaGFydFBpZSwgZmFQaWVDaGFydCwgZmFGcm9nLCBmYVdpbmVCb3R0bGUsIGZhSW5ib3gsIGZhU3F1YXJlSCwgZmFIU3F1YXJlLCBmYUhvdXNlTWVkaWNhbCwgZmFDaXJjbGVDaGV2cm9uUmlnaHQsIGZhQ2hldnJvbkNpcmNsZVJpZ2h0LCBmYUZpbGVDc3YsIGZhSGF0Q293Ym95LCBmYUZhY2VHcmluVG9uZ3VlV2luazIsIGZhR3JpblRvbmd1ZVdpbmsyLCBmYUwsIGZhQXJyb3dEb3duU2hvcnRXaWRlLCBmYVNvcnRBbW91bnREZXNjLCBmYVNvcnRBbW91bnREb3duQWx0LCBmYUhvdXJnbGFzc0hhbGYyLCBmYUhvdXJnbGFzczIyLCBmYVNwb29uLCBmYVV0ZW5zaWxTcG9vbiwgZmFDcmVkaXRDYXJkMiwgZmFDcmVkaXRDYXJkQWx0MiwgZmFGaWxlSW52b2ljZURvbGxhciwgZmFTcGFnaGV0dGlNb25zdGVyRmx5aW5nLCBmYVBhc3RhZmFyaWFuaXNtLCBmYU1hcnRpbmlHbGFzc0NpdHJ1cywgZmFDb2NrdGFpbCwgZmFCdWxsaG9ybiwgZmFCb3hUaXNzdWUsIGZhTWF0dHJlc3NQaWxsb3csIGZhQ2hldnJvbkxlZnQsIGZhQ2xvdWRNb29uUmFpbiwgZmFBcnJvd0Rvd24xOSwgZmFTb3J0TnVtZXJpY0FzYywgZmFTb3J0TnVtZXJpY0Rvd24sIGZhSGFuZFNwb2NrMiwgZmFXYW5kTWFnaWNTcGFya2xlcywgZmFNYWdpY1dhbmRTcGFya2xlcywgZmFDb21tZW50TWVkaWNhbCwgZmFCZWxsU2xhc2gyLCBmYUhhbmRzaGFrZVNsYXNoLCBmYUhhbmRzaGFrZUFsdFNsYXNoLCBmYUhhbmRzaGFrZVNpbXBsZVNsYXNoLCBmYUJvdHRsZVdhdGVyLCBmYURpY2VEMjAsIGZhQXJyb3dEb3duWkEsIGZhU29ydEFscGhhRGVzYywgZmFTb3J0QWxwaGFEb3duQWx0LCBmYUJydXNoLCBmYVBlcnNvbldhbGtpbmdEYXNoZWRMaW5lQXJyb3dSaWdodCwgZmFBcnJvd1VwU2hvcnRXaWRlLCBmYVNvcnRBbW91bnRVcEFsdCwgZmFHcmlwVmVydGljYWwsIGZhR3JpZFZlcnRpY2FsLCBmYUNhclR1bm5lbCwgZmFDaGFydENvbHVtbiwgZmFUcnVja0Fycm93UmlnaHQsIGZhVHYsIGZhVGVsZXZpc2lvbiwgZmFUdkFsdCwgZmFTZWN0aW9uLCBmYVBlYWNlLCBmYVN0YXIyLCBmYUZsYWcyLCBmYVRyaWFuZ2xlRXhjbGFtYXRpb24sIGZhRXhjbGFtYXRpb25UcmlhbmdsZSwgZmFXYXJuaW5nLCBmYVNjaG9vbENpcmNsZUV4Y2xhbWF0aW9uLCBmYUdyYWR1YXRpb25DYXAsIGZhTW9ydGFyQm9hcmQsIGZhU3RvcmUsIGZhVXNlckFzdHJvbmF1dCwgZmFCdWlsZGluZ0ZsYWcsIGZhTXVnU2F1Y2VyLCBmYUNvZmZlZSwgZmFMZW1vbjIsIGZhQ2FyYXZhbiwgZmFRLCBmYUxvY2ssIGZhUGFpbnRSb2xsZXIsIGZhVm9sdW1lSGlnaCwgZmFWb2x1bWVVcCwgZmFGb2xkZXJQbHVzLCBmYU1lcmN1cnksIGZhQW5jaG9yLCBmYVNxdWFyZVBhcmtpbmcsIGZhUGFya2luZywgZmFIYW51a2lhaCwgZmFSb3RhdGVMZWZ0LCBmYVJvdGF0ZUJhY2ssIGZhUm90YXRlQmFja3dhcmQsIGZhVW5kb0FsdCwgZmFIZWFkaW5nLCBmYUhlYWRlciwgZmFDcm9zc2hhaXJzLCBmYUNpcmNsZU5vZGVzLCBmYVdpbmRvd1Jlc3RvcmUyLCBmYVIsIGZhRmlsdGVyQ2lyY2xlWG1hcmssIGZhR29wdXJhbSwgZmFIZWFydENpcmNsZU1pbnVzLCBmYVN0YXJPZkxpZmUsIGZhQnVzaW5lc3NUaW1lLCBmYUJyaWVmY2FzZUNsb2NrLCBmYUZpcmVFeHRpbmd1aXNoZXIsIGZhQXJyb3dEb3duTG9uZywgZmFMb25nQXJyb3dEb3duLCBmYVVzZXJNaW51cywgZmFNb25leUNoZWNrLCBmYUhvdXNlTGFwdG9wLCBmYUxhcHRvcEhvdXNlLCBmYURvd25sb2FkLCBmYUNvdWNoLCBmYVJvYWRMb2NrLCBmYVNjaXNzb3JzLCBmYUN1dCwgZmFCdWcsIGZhQXJyb3dSaWdodEZyb21CcmFja2V0LCBmYVNpZ25PdXQsIGZhSGFuZEhvbGRpbmdIYW5kLCBmYVN0cm9vcHdhZmVsLCBmYUNoaWxkLCBmYUljZUNyZWFtLCBmYUNvbXB1dGVyTW91c2UsIGZhTW91c2UsIGZhRmF1Y2V0LCBmYUF3YXJkLCBmYVBlcnNvbkRyb3duaW5nLCBmYUNhbWVyYVJvdGF0ZSwgZmFGYWNlR3JpbkhlYXJ0czIsIGZhR3JpbkhlYXJ0czIsIGZhRmlsZUZyYWdtZW50LCBmYVBlcnNvbk1pbGl0YXJ5UmlmbGUsIGZhVG9nZ2xlT24sIGZhTHVuZ3NWaXJ1cywgZmFUYWJsZVRlbm5pc1BhZGRsZUJhbGwsIGZhUGluZ1BvbmdQYWRkbGVCYWxsLCBmYVRhYmxlVGVubmlzLCBmYUJveGVzUGFja2luZywgZmFQZXJzb25DaGFsa2JvYXJkLCBmYURpY2VUd28sIGZhQXJyb3dSaWdodEFycm93TGVmdCwgZmFFeGNoYW5nZSwgZmFGb290YmFsbCwgZmFGb290YmFsbEJhbGwsIGZhVHJ1Y2tNb25zdGVyLCBmYUFzdGVyaXNrLCBmYUJhdHRlcnlGdWxsLCBmYUJhdHRlcnksIGZhQmF0dGVyeTUsIGZhQ2hpbGREcmVzcywgZmFGYWNlS2lzc0JlYW0yLCBmYUtpc3NCZWFtMiwgZmFUcmFzaENhbkFycm93VXAsIGZhVHJhc2hSZXN0b3JlQWx0LCBmYUZvbnQsIGZhQm9yZUhvbGUsIGZhVmlydXNDb3ZpZCwgZmFGaWxlUGRmMiwgZmFMYW5ndWFnZSwgZmFTaGllbGRIYWx2ZWQsIGZhU2hpZWxkQWx0LCBmYUNhcmV0VXAsIGZhRmlsZVBlbiwgZmFGaWxlRWRpdCwgZmFQZXJzb25CaWtpbmcsIGZhQmlraW5nLCBmYUJvb2tPcGVuUmVhZGVyLCBmYUJvb2tSZWFkZXIsIGZhR2xhc3NXYXRlckRyb3BsZXQsIGZhVG93ZXJCcm9hZGNhc3QsIGZhQnJvYWRjYXN0VG93ZXIsIGZhTWluaW1pemUsIGZhQ29tcHJlc3NBcnJvd3NBbHQsIGZhQXJyb3dSaWdodFRvQ2l0eSwgZmFMYXB0b3BNZWRpY2FsLCBmYUJyZWFkU2xpY2UsIGZhR2xvYmUsIGZhRm9sZGVyTWludXMsIGZhTWFza0ZhY2UsIGZhQm9uZywgZmFSb2FkQnJpZGdlLCBmYUFycm93VXA5MSwgZmFTb3J0TnVtZXJpY1VwQWx0LCBmYU1vdW50YWluQ2l0eSwgZmFBcnJvd0Rvd245MSwgZmFTb3J0TnVtZXJpY0Rlc2MsIGZhU29ydE51bWVyaWNEb3duQWx0LCBmYUZhY2VHcmluV2lkZTIsIGZhR3JpbkFsdDIsIGZhUG9vcCwgZmFEaGFybWFjaGFrcmEsIGZhQmF0dGVyeVF1YXJ0ZXIsIGZhQmF0dGVyeTIsIGZhQW5raCwgZmFEaWFtb25kLCBmYVN1YnNjcmlwdCwgZmFSdXBlZVNpZ24sIGZhUnVwZWUsIGZhUGVyc29uUmlmbGUsIGZhRCwgZmFTcXVhcmVOZmksIGZhVGVldGgsIGZhTWFnbmlmeWluZ0dsYXNzRG9sbGFyLCBmYVNlYXJjaERvbGxhciwgZmFEdW1wc3RlckZpcmUsIGZhVXBsb2FkLCBmYVVzZXJTbGFzaCwgZmFVc2VyQWx0U2xhc2gsIGZhVXNlckxhcmdlU2xhc2gsIGZhQXJyb3dMZWZ0LCBmYVZpYWxWaXJ1cywgZmFDaGVja0RvdWJsZSwgZmFQYXcsIGZhSGVsbWV0U2FmZXR5LCBmYUhhcmRIYXQsIGZhSGF0SGFyZCwgZmFFLCBmYUZhY2VMYXVnaFNxdWludDIsIGZhTGF1Z2hTcXVpbnQyLCBmYURvd25MZWZ0QW5kVXBSaWdodFRvQ2VudGVyLCBmYUNvbXByZXNzQWx0LCBmYUdpZnRzLCBmYUJlZCwgZmFNb25leUJpbGxUcmFuc2ZlciwgZmFQZXJzb25SdW5uaW5nLCBmYVJ1bm5pbmcsIGZhQ2lyY2xlQ2hldnJvbkRvd24sIGZhQ2hldnJvbkNpcmNsZURvd24sIGZhVXNlck51cnNlLCBmYUZhY2VLaXNzV2lua0hlYXJ0MiwgZmFLaXNzV2lua0hlYXJ0MiwgZmFGaWxsLCBmYU1vbmV5QmlsbDFXYXZlLCBmYU1vbmV5QmlsbFdhdmVBbHQsIGZhTGFuZG1hcmssIGZhTXVzaWMsIGZhQm9va01lZGljYWwsIGZhU2h1ZmZsZSwgZmFSYW5kb20sIGZhVW5kZXJsaW5lLCBmYUJ1aWxkaW5nVXNlciwgZmFSb2JvdCwgZmFQbHVzLCBmYUFkZCwgZmFDb3B5MiwgZmFDaGVzc0tpbmcyLCBmYUhvdXNlRmxvb2RXYXRlciwgZmFCaXRjb2luU2lnbiwgZmFCb3gsIGZhU3F1YXJlUGx1czIsIGZhUGx1c1NxdWFyZTIsIGZhQXJyb3dzTGVmdFJpZ2h0LCBmYUFycm93c0gsIGZhRmFuLCBmYUNyb3csIGZhRmlsZUNpcmNsZUNoZWNrLCBmYUxpbmtTbGFzaCwgZmFDaGFpbkJyb2tlbiwgZmFDaGFpblNsYXNoLCBmYVVubGluaywgZmFBcnJvd1JvdGF0ZVJpZ2h0LCBmYUFycm93UmlnaHRSb3RhdGUsIGZhQXJyb3dSb3RhdGVGb3J3YXJkLCBmYVJlZG8sIGZhUGVuQ2xpcCwgZmFQZW5BbHQsIGZhRG9vckNsb3NlZCwgZmFBcnJvd0Rvd25XaWRlU2hvcnQsIGZhU29ydEFtb3VudEFzYywgZmFTb3J0QW1vdW50RG93biwgZmFDYXJldERvd24sIGZhSywgZmFDaGVja1RvU2xvdCwgZmFWb3RlWWVhLCBmYUZpc2hGaW5zLCBmYUNvbXByZXNzLCBmYUFycm93VXBBWiwgZmFTb3J0QWxwaGFVcCwgZmFVc2VyR3JhZHVhdGUsIGZhRmlsZUNvZGUyLCBmYVNvYXAsIGZhUmVjeWNsZSwgZmFGYWNlR3JpbldpbmsyLCBmYUdyaW5XaW5rMiwgZmFXYXRlckxhZGRlciwgZmFMYWRkZXJXYXRlciwgZmFTd2ltbWluZ1Bvb2wsIGZhVG93ZXJDZWxsLCBmYUNvbG9uU2lnbiwgZmFMYXB0b3BGaWxlLCBmYUJhaGFpLCBmYUhheWthbCwgZmFNb25leUJpbGwxMiwgZmFNb25leUJpbGxBbHQyLCBmYUNsb3VkQm9sdCwgZmFUaHVuZGVyc3Rvcm0sIGZhRXRoZXJuZXQsIGZhSHJ5dm5pYVNpZ24sIGZhSHJ5dm5pYSwgZmFFeWVTbGFzaDIsIGZhQ2FydEZsYXRiZWRTdWl0Y2FzZSwgZmFMdWdnYWdlQ2FydCwgZmFSYWRpYXRpb24sIGZhRmlsZVdvcmQyLCBmYUJlZFB1bHNlLCBmYVByb2NlZHVyZXMsIGZhVGVudHMsIGZhTXVnSG90LCBmYUJvbHQsIGZhWmFwLCBmYUphciwgZmFUcnVja1BsYW5lLCBmYUhhbmRIb2xkaW5nSGVhcnQsIGZhQXJyb3dSb3RhdGVMZWZ0LCBmYUFycm93TGVmdFJvdGF0ZSwgZmFBcnJvd1JvdGF0ZUJhY2ssIGZhQXJyb3dSb3RhdGVCYWNrd2FyZCwgZmFVbmRvLCBmYUZhY2VBbmdyeTIsIGZhQW5ncnkyLCBmYUJ1cnN0LCBmYVosIGZhQmFuZGFnZSwgZmFCYW5kQWlkLCBmYVBsYW5lQ2lyY2xlRXhjbGFtYXRpb24sIGZhQnVzU2lkZSwgZmFCdWdzLCBmYUJlZXJNdWdFbXB0eSwgZmFCZWVyLCBmYVBlcnNvbkNpcmNsZUNoZWNrLCBmYVN0YXBsZXIsIGZhSG91c2VNZWRpY2FsQ2lyY2xlQ2hlY2ssIGZhTmFpcmFTaWduLCBmYVdpZmksIGZhV2lmaTMsIGZhV2lmaVN0cm9uZywgZmFNb25leUNoZWNrRG9sbGFyLCBmYU1vbmV5Q2hlY2tBbHQsIGZhRXllTG93VmlzaW9uLCBmYUxvd1Zpc2lvbiwgZmFDaXJjbGVBcnJvd1VwLCBmYUFycm93Q2lyY2xlVXAsIGZhQ2FtZXJhUmV0cm8sIGZhQ2Fwc3VsZXMsIGZhUG9vLCBmYUVsZXZhdG9yLCBmYVRhZywgZmFGaWxlQ2lyY2xlTWludXMsIGZhRG93bkxvbmcsIGZhTG9uZ0Fycm93QWx0RG93biwgZmFDb21wYWN0RGlzYywgZmFTdWl0Y2FzZVJvbGxpbmcsIGZhQm9va1F1cmFuLCBmYVF1cmFuLCBmYVBob25lU2xhc2gsIGZhUm9hZENpcmNsZUNoZWNrLCBmYVNob3BMb2NrLCBmYUltYWdlUG9ydHJhaXQsIGZhUG9ydHJhaXQsIGZhQnJpZGdlTG9jaywgZmFIYW1tZXIsIGZhQXJyb3dVcDE5LCBmYVNvcnROdW1lcmljVXAsIGZhQ2hlc3NLbmlnaHQyLCBmYUhvdXNlRmxvb2RXYXRlckNpcmNsZUFycm93UmlnaHQsIGZhQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZSwgZmFFeHRlcm5hbExpbmssIGZhQXJyb3dEb3duVXBBY3Jvc3NMaW5lLCBmYUZhY2VHcmluQmVhbTIsIGZhR3JpbkJlYW0yLCBmYVJlY3RhbmdsZUFkLCBmYUFkLCBmYUJvb2tUYW5ha2gsIGZhVGFuYWtoLCBmYUhvdFR1YlBlcnNvbiwgZmFIb3RUdWIsIGZhRmlsZUhhbGZEYXNoZWQsIGZhT3V0ZGVudCwgZmFEZWRlbnQsIGZhSGFuZFBlYWNlMiwgZmFIZWFkU2lkZVZpcnVzLCBmYUNvbXBhc3MyLCBmYVBlbk5pYiwgZmFUZW50QXJyb3dzRG93biwgZmFGb3J3YXJkRmFzdCwgZmFGYXN0Rm9yd2FyZCwgZmFDcm9wLCBmYVdoaXNrZXlHbGFzcywgZmFHbGFzc1doaXNrZXksIGZhU3F1YXJlMiwgZmFGYWNlR3JpbjIsIGZhR3JpbjIsIGZhRmlsZUNvbnRyYWN0LCBmYUFuZ2xlVXAsIGZhRmFjZVNtaWxlMiwgZmFTbWlsZTIsIGZhUGVyc29uRHJlc3NCdXJzdCwgZmFEaXZpZGUsIGZhQ29kZUZvcmssIGZhSG91c2VGbGFnLCBmYUJ1aWxkaW5nQ29sdW1ucywgZmFCYW5rLCBmYUluc3RpdHV0aW9uLCBmYU11c2V1bSwgZmFVbml2ZXJzaXR5LCBmYVJ1ZywgZmFDb2RlTWVyZ2UsIGZhSG91c2VUc3VuYW1pLCBmYU1hZ25pZnlpbmdHbGFzc0NoYXJ0LCBmYVVtYnJlbGxhLCBmYUhpbGxSb2Nrc2xpZGUsIGZhVXNlclNlY3JldCwgZmFQYWdlciwgZmFCcmllZmNhc2UsIGZhVHJvd2VsQnJpY2tzLCBmYVNvY2tzLCBmYVQsIGZhTWljcm9jaGlwLCBmYVRydWNrTWVkaWNhbCwgZmFBbWJ1bGFuY2UsIGZhT20sIGZhTW9zcXVpdG9OZXQsIGZhUHJlc2NyaXB0aW9uQm90dGxlLCBmYVVzZXJzR2VhciwgZmFVc2Vyc0NvZywgZmFSb2FkQ2lyY2xlRXhjbGFtYXRpb24sIGZhUGF1c2UsIGZhU3RhZmZTbmFrZSwgZmFSb2RBc2NsZXBpdXMsIGZhUm9kU25ha2UsIGZhU3RhZmZBZXNjdWxhcGl1cywgZmFQaWdneUJhbmssIGZhTW9udW1lbnQsIGZhQW5nbGVzUmlnaHQsIGZhQW5nbGVEb3VibGVSaWdodCwgZmFEZXNrdG9wLCBmYURlc2t0b3BBbHQsIGZhUGxhbmVDaXJjbGVYbWFyaywgZmFSZXR3ZWV0LCBmYVVzZXJHZWFyLCBmYVVzZXJDb2csIGZhQm9yZGVyQWxsLCBmYUNvaW5zLCBmYU1hcnNTdHJva2UsIGZhSGFuZHNoYWtlQW5nbGUsIGZhSGFuZHNIZWxwaW5nLCBmYUFycm93RG93biwgZmFMb2NhdGlvbkRvdCwgZmFNYXBNYXJrZXJBbHQsIGZhUGx1Z0NpcmNsZUV4Y2xhbWF0aW9uLCBmYUNvb2tpZUJpdGUsIGZhU2NyZXdkcml2ZXJXcmVuY2gsIGZhVG9vbHMsIGZhSW5kZW50LCBmYUJhcnMsIGZhTmF2aWNvbiwgZmFIYW5kc1ByYXlpbmcsIGZhUHJheWluZ0hhbmRzLCBmYVZpcnVzZXMsIGZhU2Nob29sRmxhZywgZmFUcmFkZW1hcmssIGZhRmlyZUJ1cm5lciwgZmFGYWNlU21pbGVCZWFtMiwgZmFTbWlsZUJlYW0yLCBmYVRlbnRBcnJvd0xlZnRSaWdodCwgZmFSb3V0ZSwgZmFBbmdsZXNVcCwgZmFBbmdsZURvdWJsZVVwLCBmYUJ1Y2tldCwgZmFMZXNzVGhhbkVxdWFsLCBmYUZvbGRlckNsb3NlZDIsIGZhUGVyc29uVGhyb3VnaFdpbmRvdywgZmFTY2hvb2xMb2NrLCBmYVBlcnNvbkJ1cnN0LCBmYUxlZnRMb25nLCBmYUxvbmdBcnJvd0FsdExlZnQsIGZhTG9jYXRpb25Dcm9zc2hhaXJzLCBmYUxvY2F0aW9uLCBmYVBlcnNvbkRvdHNGcm9tTGluZSwgZmFEaWFnbm9zZXMsIGZhR2F1Z2VTaW1wbGVIaWdoLCBmYVRhY2hvbWV0ZXIsIGZhVGFjaG9tZXRlckZhc3QsIGZhQW5nbGVzTGVmdCwgZmFBbmdsZURvdWJsZUxlZnQsIGZhVXBEb3duLCBmYUFycm93c0FsdFYsIGZhQmF0dGVyeUVtcHR5LCBmYUJhdHRlcnkwLCBmYUtleWJvYXJkMiwgZmFDb29raWUsIGZhU3RvcHdhdGNoLCBmYUVqZWN0LCBmYVNhdGVsbGl0ZURpc2gsIGZhRmFjZVJvbGxpbmdFeWVzMiwgZmFNZWhSb2xsaW5nRXllczIsIGZhTGlzdENoZWNrLCBmYVRhc2tzLCBmYVNhY2tYbWFyaywgZmFIYXNodGFnLCBmYVRyYWluLCBmYUdhbWVwYWQsIGZhRmlsZUV4cG9ydCwgZmFBcnJvd1JpZ2h0RnJvbUZpbGUsIGZhRmFjZUdyaW1hY2UyLCBmYUdyaW1hY2UyLCBmYVRyYWluU3Vid2F5LCBmYVN1YndheSwgZmFDaXJjbGVEb3QyLCBmYURvdENpcmNsZTIsIGZhT2JqZWN0R3JvdXAyLCBmYVNoaXAsIGZhQywgZmFTcXVhcmVQaG9uZSwgZmFQaG9uZVNxdWFyZSwgZmFSdWxlckNvbWJpbmVkLCBmYUFycm93c1JvdGF0ZSwgZmFSZWZyZXNoLCBmYVN5bmMsIGZhUGVyc29uRHJlc3MsIGZhRmVtYWxlLCBmYUJvb2tPcGVuLCBmYUZvbGRlclRyZWUsIGZhQm94QXJjaGl2ZSwgZmFBcmNoaXZlLCBmYVRlbnRBcnJvd0Rvd25Ub0xpbmUsIGZhUXJjb2RlLCBmYURyYWdvbiwgZmFIb3VyZ2xhc3NFbmQsIGZhSG91cmdsYXNzMzIsIGZhR3JpcCwgZmFHcmlkSG9yaXpvbnRhbCwgZmFHcmlwSG9yaXpvbnRhbCwgZmFCb3JkZXJUb3BMZWZ0LCBmYUJvcmRlclN0eWxlLCBmYUxpc3RVbCwgZmFMaXN0RG90cywgZmFQZW9wbGVSb2JiZXJ5LCBmYU1vYmlsZUJ1dHRvbiwgZmFBcnJvd0Rvd25BWiwgZmFTb3J0QWxwaGFBc2MsIGZhU29ydEFscGhhRG93biwgZmFNb25leUJpbGwsIGZhQ2lyY2xlTWludXMsIGZhTWludXNDaXJjbGUsIGZhQXJyb3dQb2ludGVyLCBmYU1vdXNlUG9pbnRlciwgZmFTcXVhcmVTaGFyZU5vZGVzLCBmYVNoYXJlQWx0U3F1YXJlLCBmYVRhYmxlQ2VsbHNMYXJnZSwgZmFUaExhcmdlLCBmYUNhdCwgZmFDYWxlbmRhcldlZWssIGZhQ29kZUNvbXBhcmUsIGZhUm9hZENpcmNsZVhtYXJrLCBmYVBhbGxldCwgZmFDYWtlQ2FuZGxlcywgZmFCaXJ0aGRheUNha2UsIGZhQ2FrZSwgZmFCdWdTbGFzaCwgZmFUYXJwLCBmYURpYWdyYW1QcmVkZWNlc3NvciwgZmFGYWNlRmx1c2hlZDIsIGZhRmx1c2hlZDIsIGZhRGlhZ3JhbU5leHQsIGZhQW5jaG9yQ2lyY2xlWG1hcmssIGZhUGVyc29uQ2lyY2xlWG1hcmssIGZhU3BhLCBmYUJhcnNQcm9ncmVzcywgZmFUYXNrc0FsdCwgZmFIZWFydENpcmNsZUNoZWNrLCBmYU1hcnNTdHJva2VSaWdodCwgZmFNYXJzU3Ryb2tlSCwgZmFUb3dlck9ic2VydmF0aW9uLCBmYVN0ZXJsaW5nU2lnbiwgZmFHYnAsIGZhUG91bmRTaWduLCBmYUZhdWNldERyaXAsIGZhQ2lyY2xlSW5mbywgZmFJbmZvQ2lyY2xlLCBmYUZlYXRoZXIsIGZhQm93bFJpY2UsIGZhU3RhckhhbGZTdHJva2UyLCBmYVN0YXJIYWxmQWx0MiwgZmFUZW1wZXJhdHVyZUFycm93RG93biwgZmFUZW1wZXJhdHVyZURvd24sIGZhTWFza1ZlbnRpbGF0b3IsIGZhRmlsZVZpZGVvMiwgZmFBcnJvd1RyZW5kRG93biwgZmFPaWxDYW4sIGZhUGVvcGxlQ2FycnlCb3gsIGZhUGVvcGxlQ2FycnksIGZhQ2hhaXIsIGZhV2luZCwgZmFMYXllckdyb3VwLCBmYUhlYWRTaWRlTWFzaywgZmFIYW5kcywgZmFTaWduTGFuZ3VhZ2UsIGZhU2lnbmluZywgZmFUYWJsZXRzLCBmYVdlaWdodEhhbmdpbmcsIGZhRGljZSwgZmFTaG9wU2xhc2gsIGZhU3RvcmVBbHRTbGFzaCwgZmFTb3J0RG93biwgZmFTb3J0RGVzYywgZmFQZXNldGFTaWduLCBmYVRhYmxldFNjcmVlbkJ1dHRvbiwgZmFUYWJsZXRBbHQsIGZhSGFuZEhvbGRpbmdEb2xsYXIsIGZhSGFuZEhvbGRpbmdVc2QsIGZhU2hpZWxkLCBmYVNoaWVsZEJsYW5rLCBmYUZhY2VMYXVnaDIsIGZhTGF1Z2gyLCBmYUhhbmRzSG9sZGluZywgZmFDYXJ0U2hvcHBpbmcsIGZhU2hvcHBpbmdDYXJ0LCBmYU9jdGFnb24sIGZhSGFuZFBvaW50ZXIyLCBmYVJlZ2lzdGVyZWQyLCBmYUhvdXNlU2lnbmFsLCBmYUJhbmdsYWRlc2hpVGFrYVNpZ24sIGljb25zMzsKdmFyIGluaXRfZnJlZV9zb2xpZF9zdmdfaWNvbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZm9ydGF3ZXNvbWUrZnJlZS1zb2xpZC1zdmctaWNvbnNANy4xLjAvbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9pbmRleC5tanMiKCkgewogICAgcHJlZml4MyA9ICJmYXMiOwogICAgZmEwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIjAiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiMzAiLCAiTTAgMTkyQzAgMTAzLjYgNzEuNiAzMiAxNjAgMzJzMTYwIDcxLjYgMTYwIDE2MGwwIDEyOGMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMwIDQwOC40IDAgMzIwTDAgMTkyek0xNjAgOTZjLTUzIDAtOTYgNDMtOTYgOTZsMCAxMjhjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTEyOGMwLTUzLTQzLTk2LTk2LTk2eiJdCiAgICB9OwogICAgZmExID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIjEiLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFtdLCAiMzEiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw2NCAwIDAgMzIwLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC0zNTJjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMzJ6Il0KICAgIH07CiAgICBmYTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiMiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICIzMiIsICJNNDggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTcxIDBjNjAuMiAwIDEwOSA0OC44IDEwOSAxMDkgMCA0My44LTI2LjIgODMuMy02Ni40IDEwMC40bC0xMzkuMSA1OUMxMTkgMzE1LjQgOTYgMzUwLjIgOTYgMzg4LjdsMCAyNy4zIDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDY0IDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC01OS4zYzAtNjQuMiAzOC40LTEyMi4yIDk3LjUtMTQ3LjNsMTM5LjEtNTljMTYuNi03LjEgMjcuNC0yMy40IDI3LjQtNDEuNCAwLTI0LjktMjAuMi00NS00NS00NUw4MCA5NkM2Mi4zIDk2IDQ4IDgxLjcgNDggNjR6Il0KICAgIH07CiAgICBmYTMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiMyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICIzMyIsICJNODAgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDExMiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0TDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMmwxNjAgMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOCAwIDM4LjItMTYuOCA3Mi41LTQzLjMgOTYgMjYuNiAyMy41IDQzLjMgNTcuOCA0My4zIDk2IDAgNzAuNy01Ny4zIDEyOC0xMjggMTI4TDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NEw4MCAyODh6Il0KICAgIH07CiAgICBmYTQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiNCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICIzNCIsICJNNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCAyODhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTYgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDIyNC0xOTIgMCAwLTIyNHoiXQogICAgfTsKICAgIGZhNSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICI1IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgIjM1IiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMCAwIDExMiAxMjAgMGM3NS4xIDAgMTM2IDYwLjkgMTM2IDEzNlMyNTkuMSA0ODAgMTg0IDQ4MEwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTUyIDBjMzkuOCAwIDcyLTMyLjIgNzItNzJzLTMyLjItNzItNzItNzJMMzIgMjcyYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDY0eiJdCiAgICB9OwogICAgZmE2ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIjYiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiMzYiLCAiTTI1NiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtODggMGMtNDguNiAwLTg4IDM5LjQtODggODhsMCAzMi4yYzIyLjktMTUuMyA1MC40LTI0LjIgODAtMjQuMmw0OCAwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0UzI4Ny41IDQ4MCAyMDggNDgwbC00OCAwQzgwLjUgNDgwIDE2IDQxNS41IDE2IDMzNmwwLTE1MkMxNiAxMDAuMSA4NC4xIDMyIDE2OCAzMmw4OCAwek04MCAzMzZjMCA0NC4yIDM1LjggODAgODAgODBsNDggMGM0NC4yIDAgODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MGwtNDggMGMtNDQuMiAwLTgwIDM1LjgtODAgODB6Il0KICAgIH07CiAgICBmYTcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiNyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICIzNyIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwyNTYgMGMxMS41IDAgMjIgNi4xIDI3LjcgMTYuMXM1LjcgMjIuMi0uMSAzMi4xbC0yMjQgMzg0Yy04LjkgMTUuMy0yOC41IDIwLjQtNDMuOCAxMS41cy0yMC40LTI4LjUtMTEuNS00My44TDIzMi4zIDk2IDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjR6Il0KICAgIH07CiAgICBmYTggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiOCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICIzOCIsICJNMzA0IDE2MGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOGwtMzIgMGMtNzAuNyAwLTEyOCA1Ny4zLTEyOCAxMjggMCAzNC42IDEzLjcgNjYgMzYgODktMzEuNSAyMy4zLTUyIDYwLjgtNTIgMTAzIDAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4bDY0IDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjggMC00Mi4yLTIwLjUtNzkuNy01Mi0xMDMgMjIuMy0yMyAzNi01NC40IDM2LTg5ek0xNzYuMSAyODhsMTUuOSAwYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0bC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0bDQ4LjEgMHptMC02NEwxNDQgMjI0Yy0zNS4zIDAtNjQtMjguNy02NC02NCAwLTM1LjMgMjguNy02NCA2NC02NGwzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMzUuMy0yOC42IDY0LTY0IDY0eiJdCiAgICB9OwogICAgZmE5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIjkiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiMzkiLCAiTTIwOCAzMjBjMjkuNiAwIDU3LjEtOC45IDgwLTI0LjJsMCAzMi4yYzAgNDguNi0zOS40IDg4LTg4IDg4TDk2IDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMDQgMGM4My45IDAgMTUyLTY4LjEgMTUyLTE1MmwwLTE1Mi4xQzM1MS45IDk2LjQgMjg3LjUgMzIgMjA4IDMybC00OCAwQzgwLjUgMzIgMTYgOTYuNSAxNiAxNzZTODAuNSAzMjAgMTYwIDMyMGw0OCAwem04MC0xNDRjMCA0NC4yLTM1LjggODAtODAgODBsLTQ4IDBjLTQ0LjIgMC04MC0zNS44LTgwLTgwczM1LjgtODAgODAtODBsNDggMGM0NC4yIDAgODAgMzUuOCA4MCA4MHoiXQogICAgfTsKICAgIGZhRG9sbGFyU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb2xsYXItc2lnbiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEyODE3OCwgNjE3ODEsICJkb2xsYXIiLCAidXNkIl0sICIyNCIsICJNMTM2IDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCA1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMTQuOSAwYy0yNC45IDAtNDUuMSAyMC4yLTQ1LjEgNDUuMSAwIDIyLjUgMTYuNSA0MS41IDM4LjcgNDQuN2w5MS42IDEzLjFjNTMuOCA3LjcgOTMuNyA1My43IDkzLjcgMTA4IDAgNjAuMy00OC45IDEwOS4xLTEwOS4xIDEwOS4xbC0xMC45IDAgMCA0MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQwLTcyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTMwLjkgMGMyNC45IDAgNDUuMS0yMC4yIDQ1LjEtNDUuMSAwLTIyLjUtMTYuNS00MS41LTM4LjctNDQuN2wtOTEuNi0xMy4xQzU1LjkgMjczLjUgMTYgMjI3LjQgMTYgMTczLjEgMTYgMTEyLjkgNjQuOSA2NCAxMjUuMSA2NGwxMC45IDAgMC00MHoiXQogICAgfTsKICAgIGZhRG9sbGFyID0gZmFEb2xsYXJTaWduOwogICAgZmFVc2QgPSBmYURvbGxhclNpZ247CiAgICBmYURvZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb2ciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgwMjFdLCAiZjZkMyIsICJNMzIgMTEyYzE2LjYgMCAzMC4yIDEyLjYgMzEuOCAyOC43bC4zIDYuNkM2NS44IDE2My40IDc5LjQgMTc2IDk2IDE3NmwxNzkuMSAwIDE0MC45IDYwLjQgMCAyNDMuNmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMzEuM0MyOTYgMzYxIDI2OC44IDM2OCAyNDAgMzY4cy01Ni03LTgwLTE5LjNMMTYwIDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNDUuNmMtMzcuMy0xMy4yLTY0LTQ4LjYtNjQtOTAuNCAwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzU1LjgtMzJjNy43IDAgMTQuOSAzLjYgMTkuNiA5LjhMMzkyIDAgNDQ0LjEgMGMxMi43IDAgMjQuOSA1LjEgMzMuOSAxNC4xTDQ5NiAzMiA1NTIgMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyNGMwIDQ0LjItMzUuOCA4MC04MCA4MGwtNjQgMC03IDI4LTEyNC43LTUzLjQgMzEuNi0xNDcuMkMzMzQuMy0yMy45IDM0NC4yLTMyIDM1NS44LTMyek00NDggNDRhMjAgMjAgMCAxIDAgMCA0MCAyMCAyMCAwIDEgMCAwLTQweiJdCiAgICB9OwogICAgZmFUcnVja01vdmluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1tb3ZpbmciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjRkZiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQyNGMwIDQ4LjYgMzkuNCA4OCA4OCA4OCAyNS4yIDAgNDgtMTAuNiA2NC0yNy42IDE2IDE3IDM4LjggMjcuNiA2NCAyNy42IDQwLjMgMCA3NC4yLTI3LjEgODQuNy02NGwxMzQuNiAwYzEwLjQgMzYuOSA0NC40IDY0IDg0LjcgNjQgNDMgMCA3OC45LTMwLjkgODYuNS03MS43IDIwLTEwLjggMzMuNS0zMiAzMy41LTU2LjNsMC0xNDYuN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0w1NzYgMTQ2LjdjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdsLTUwLjcgMCAwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek00ODAgMTkybDUwLjcgMCA0NS4zIDQ1LjMgMCA1MC43LTk2IDAgMC05NnpNODggMzg0YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHptMzkyIDQwYTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTIxNiAzODRhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgweiJdCiAgICB9OwogICAgZmFSb3RhdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm90YXRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjYwLCAic3luYy1hbHQiXSwgImYyZjEiLCAiTTQ4MC4xIDE5Mmw3LjkgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTE0NGMwLTkuNy01LjgtMTguNS0xNC44LTIyLjJTNDc3LjkgLjIgNDcxIDdMNDE5LjMgNTguOEMzNzUgMjIuMSAzMTggMCAyNTYgMCAxMjcgMCAyMC4zIDk1LjQgMi42IDIxOS41IC4xIDIzNyAxMi4yIDI1My4yIDI5LjcgMjU1LjdzMzMuNy05LjcgMzYuMi0yNy4xQzc5LjIgMTM1LjUgMTU5LjMgNjQgMjU2IDY0IDMwMC40IDY0IDM0MS4yIDc5IDM3My43IDEwNC4zTDMyNyAxNTFjLTYuOSA2LjktOC45IDE3LjItNS4yIDI2LjJTMzM0LjMgMTkyIDM0NCAxOTJsMTM2LjEgMHptMjkuNCAxMDAuNWMyLjUtMTcuNS05LjctMzMuNy0yNy4xLTM2LjJzLTMzLjcgOS43LTM2LjIgMjcuMWMtMTMuMyA5My05My40IDE2NC41LTE5MC4xIDE2NC41LTQ0LjQgMC04NS4yLTE1LTExNy43LTQwLjNMMTg1IDM2MWM2LjktNi45IDguOS0xNy4yIDUuMi0yNi4yUzE3Ny43IDMyMCAxNjggMzIwTDI0IDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRMMCA0ODhjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yUzM0LjEgNTExLjggNDEgNTA1bDUxLjgtNTEuOEMxMzcgNDg5LjkgMTk0IDUxMiAyNTYgNTEyIDM4NSA1MTIgNDkxLjcgNDE2LjYgNTA5LjQgMjkyLjV6Il0KICAgIH07CiAgICBmYVN5bmNBbHQgPSBmYVJvdGF0ZTsKICAgIGZhU3F1YXJlTWludXMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1taW51cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYxNzY3LCAibWludXMtc3F1YXJlIl0sICJmMTQ2IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem03MiAyMDBsMTc2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE3NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFNaW51c1NxdWFyZTIgPSBmYVNxdWFyZU1pbnVzMjsKICAgIGZhQWxpZ25KdXN0aWZ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFsaWduLWp1c3RpZnkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjAzOSIsICJNNDQ4IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5NmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnptMCAyNTZjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyek0wIDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek00NDggNDQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnoiXQogICAgfTsKICAgIGZhQ2FsZW5kYXJDaGVjazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXItY2hlY2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI3NCIsICJNMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0yMiAxNjEuN2MtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNMMTg5LjEgMzMxLjIgMTM3IDI3OS4xYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDcyIDcyYzUgNSAxMS45IDcuNSAxOC44IDdzMTMuNC00LjEgMTcuNS05LjhMMzQ3LjMgMTk1LjJjNy44LTEwLjcgNS40LTI1LjctNS4zLTMzLjV6Il0KICAgIH07CiAgICBmYUZhY2VLaXNzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWtpc3MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MzUsICJraXNzIl0sICJmNTk2IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjQwIDI4OGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgMTIuMy00LjYgMjMuNS0xMi4yIDMyIDcuNiA4LjUgMTIuMiAxOS43IDEyLjIgMzIgMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0tOTYtODBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhS2lzczIgPSBmYUZhY2VLaXNzMjsKICAgIGZhS2l0Y2hlblNldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJraXRjaGVuLXNldCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTFhIiwgIk0yNDAgMTQ0YTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHptNDQuNCAzMkMyNjkuOSAyNDAuMSAyMTIuNSAyODggMTQ0IDI4OCA2NC41IDI4OCAwIDIyMy41IDAgMTQ0UzY0LjUgMCAxNDQgMGM2OC41IDAgMTI1LjkgNDcuOSAxNDAuNCAxMTJsNzEuOCAwYzguOC05LjggMjEuNi0xNiAzNS44LTE2bDEwNCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4bC0xMDQgMGMtMTQuMiAwLTI3LTYuMi0zNS44LTE2bC03MS44IDB6TTE0NCA4MGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNNDAwIDI0MGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDggOTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjQwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOTYgMCAwLThjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTI4OCA0NjRsMC0xMTIgMjI0IDAgMCAxMTJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OHpNNDggMzIwbDEyOCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4bC0xNiAwYzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnptMTI4IDY0YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwIDAgMzIgMTYgMHpNMjQgNDY0bDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhRG5hID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRuYSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyOTUxNl0sICJmNDcxIiwgIk0zNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMiAwIDU3LjgtMjQuNCAxMDQuOC01Ny40IDE0NC41LTI0LjEgMjguOS01My44IDU1LjEtODMuNiA3OS41IDI5LjggMjQuNSA1OS41IDUwLjYgODMuNiA3OS41IDMzIDM5LjYgNTcuNCA4Ni43IDU3LjQgMTQ0LjUgMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJMNjQgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDk3LjcgMCA0ODBDMCA0MjIuMiAyNC40IDM3NS4yIDU3LjQgMzM1LjUgODEuNSAzMDYuNiAxMTEuMiAyODAuNSAxNDEgMjU2IDExMS4yIDIzMS41IDgxLjUgMjA1LjQgNTcuNCAxNzYuNSAyNC40IDEzNi44IDAgODkuOCAwIDMyIDAgMTQuMyAxNC4zIDAgMzIgMFM2NCAxNC4zIDY0IDMybDI1NiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0yODMuNSAzODRsLTE4Mi45IDBjLTguMiAxMC41LTE1LjEgMjEuMS0yMC42IDMybDIyNC4yIDBjLTUuNi0xMC45LTEyLjUtMjEuNS0yMC42LTMyek0yMzggMzM2Yy0xNC4zLTEzLTI5LjgtMjUuOC00Ni0zOS0xNi4yIDEzLjEtMzEuNyAyNi00NiAzOWw5MiAwek0xMDAuNSAxMjhsMTgyLjkgMGM4LjItMTAuNSAxNS4xLTIxLjEgMjAuNi0zMkw3OS45IDk2YzUuNiAxMC45IDEyLjUgMjEuNSAyMC42IDMyek0xNDYgMTc2YzE0LjMgMTMgMjkuOCAyNS44IDQ2IDM5IDE2LjItMTMuMSAzMS43LTI2IDQ2LTM5bC05MiAweiJdCiAgICB9OwogICAgZmFDaGlsZFJlYWNoaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoaWxkLXJlYWNoaW5nIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU1OWQiLCAiTTI1NiA2NGE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6TTE1Mi45IDE2OS4zYy0yMy43LTguNC00NC41LTI0LjMtNTguOC00NS44TDc0LjYgOTQuMkM2NC44IDc5LjUgNDUgNzUuNiAzMC4zIDg1LjRTMTEuNiAxMTUgMjEuNCAxMjkuOEw0MC45IDE1OWMxOC4xIDI3LjEgNDIuOCA0OC40IDcxLjEgNjIuNEwxMTIgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiAzMiAwIDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI1OC40YzI5LjEtMTQuMiA1NC40LTM2LjIgNzIuNy02NC4ybDE4LjItMjcuOWM5LjYtMTQuOCA1LjQtMzQuNi05LjQtNDQuM3MtMzQuNi01LjUtNDQuMyA5LjRMMjkxIDEyMi40Yy0yMS44IDMzLjQtNTguOSA1My42LTk4LjggNTMuNi0xMi42IDAtMjQuOS0yLTM2LjYtNS44LS45LS4zLTEuOC0uNy0yLjctLjl6Il0KICAgIH07CiAgICBmYVBhc3RlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYXN0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJmaWxlLWNsaXBib2FyZCJdLCAiZjBlYSIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTEyIDAgMC0yMjRjMC02MS45IDUwLjEtMTEyIDExMi0xMTJsNjQgMCAwLTQ4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6TTI0OCAxMTJsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0em00MCA0OGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyMjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTYwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNjUuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM2wtNTguNS01OC41Yy0xMi0xMi0yOC4zLTE4LjctNDUuMy0xOC43TDI4OCAxNjB6Il0KICAgIH07CiAgICBmYUZpbGVDbGlwYm9hcmQyID0gZmFQYXN0ZTI7CiAgICBmYU1ldGVvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtZXRlb3IiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5NzMyXSwgImY3NTMiLCAiTTQ5My43IC45bC0xOTQuMiA3NC43IDIuMy0yOS4zYzEtMTIuOC0xMi44LTIxLjUtMjQtMTUuMUwxMDEuMyAxMzMuNEMzOC42IDE2OS43IDAgMjM2LjYgMCAzMDkgMCA0MjEuMSA5MC45IDUxMiAyMDMgNTEyIDI3NS40IDUxMiAzNDIuMyA0NzMuNCAzNzguNiA0MTAuN0w0ODAuOCAyMzQuM2M2LjUtMTEuMS0yLjItMjUtMTUuMS0yNGwtMjkuMyAyLjMgNzQuNy0xOTQuMmMuNi0xLjUgLjktMy4yIC45LTQuOCAwLTcuNS02LTEzLjUtMTMuNS0xMy41LTEuNyAwLTMuMyAuMy00LjggLjl6TTE5MiAxOTJhMTI4IDEyOCAwIDEgMSAwIDI1NiAxMjggMTI4IDAgMSAxIDAtMjU2em0wIDk2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTE2IDk2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnoiXQogICAgfTsKICAgIGZhR2VhcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2VhcnMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiY29ncyJdLCAiZjA4NSIsICJNNDE1LjkgMjEwLjVjMTIuMi0zLjMgMjUgMi41IDMwLjUgMTMuOEw0NjUgMjYxLjljMTAuMyAxLjQgMjAuNCA0LjIgMjkuOSA4LjFsMzUtMjMuM2MxMC41LTcgMjQuNC01LjYgMzMuMyAzLjNsMTkuMiAxOS4yYzguOSA4LjkgMTAuMyAyMi45IDMuMyAzMy4zbC0yMy4zIDM0LjljMS45IDQuNyAzLjYgOS42IDUgMTQuNyAxLjQgNS4xIDIuMyAxMC4xIDMgMTUuMmwzNy43IDE4LjZjMTEuMyA1LjYgMTcuMSAxOC40IDEzLjggMzAuNWwtNyAyNi4yYy0zLjMgMTIuMS0xNC42IDIwLjMtMjcuMiAxOS41bC00Mi0yLjdjLTYuMyA4LjEtMTMuNiAxNS42LTIxLjkgMjJsMi43IDQxLjljLjggMTIuNi03LjQgMjQtMTkuNSAyNy4ybC0yNi4yIDdjLTEyLjIgMy4zLTI0LjktMi41LTMwLjUtMTMuOGwtMTguNi0zNy42Yy0xMC4zLTEuNC0yMC40LTQuMi0yOS45LTguMWwtMzUgMjMuM2MtMTAuNSA3LTI0LjQgNS42LTMzLjMtMy4zbC0xOS4yLTE5LjJjLTguOS04LjktMTAuMy0yMi44LTMuMy0zMy4zbDIzLjMtMzVjLTEuOS00LjctMy42LTkuNi01LTE0LjdzLTIuMy0xMC4yLTMtMTUuMmwtMzcuNy0xOC42Yy0xMS4zLTUuNi0xNy0xOC40LTEzLjgtMzAuNWw3LTI2LjJjMy4zLTEyLjEgMTQuNi0yMC4zIDI3LjItMTkuNWw0MS45IDIuN2M2LjMtOC4xIDEzLjYtMTUuNiAyMS45LTIybC0yLjctNDEuOGMtLjgtMTIuNiA3LjQtMjQgMTkuNS0yNy4ybDI2LjItN3pNNDQ4LjQgMzQwYTQ0IDQ0IDAgMSAwIC4xIDg4IDQ0IDQ0IDAgMSAwIC0uMS04OHpNMjI0LjktNDUuNWwyNi4yIDdjMTIuMSAzLjMgMjAuMyAxNC43IDE5LjUgMjcuMmwtMi43IDQxLjhjOC4zIDYuNCAxNS42IDEzLjggMjEuOSAyMmw0Mi0yLjdjMTIuNS0uOCAyMy45IDcuNCAyNy4yIDE5LjVsNyAyNi4yYzMuMiAxMi4xLTIuNSAyNC45LTEzLjggMzAuNWwtMzcuNyAxOC42Yy0uNyA1LjEtMS43IDEwLjItMyAxNS4ycy0zLjEgMTAtNSAxNC43bDIzLjMgMzVjNyAxMC41IDUuNiAyNC40LTMuMyAzMy4zTDMwNy4zIDI2MmMtOC45IDguOS0yMi44IDEwLjMtMzMuMyAzLjNMMjM5IDI0MmMtOS41IDMuOS0xOS42IDYuNy0yOS45IDguMWwtMTguNiAzNy42Yy01LjYgMTEuMy0xOC40IDE3LTMwLjUgMTMuOGwtMjYuMi03Yy0xMi4yLTMuMy0yMC4zLTE0LjctMTkuNS0yNy4ybDIuNy00MS45Yy04LjMtNi40LTE1LjYtMTMuOC0yMS45LTIybC00MiAyLjdjLTEyLjUgLjgtMjMuOS03LjQtMjcuMi0xOS41bC03LTI2LjJjLTMuMi0xMi4xIDIuNS0yNC45IDEzLjgtMzAuNWwzNy43LTE4LjZjLjctNS4xIDEuNy0xMC4xIDMtMTUuMiAxLjQtNS4xIDMtMTAgNS0xNC43TDU1LjEgNDYuNWMtNy0xMC41LTUuNi0yNC40IDMuMy0zMy4zTDc3LjYtNmM4LjktOC45IDIyLjgtMTAuMyAzMy4zLTMuM2wzNSAyMy4zYzkuNS0zLjkgMTkuNi02LjcgMjkuOS04LjFsMTguNi0zNy42YzUuNi0xMS4zIDE4LjMtMTcgMzAuNS0xMy44ek0xOTIuNCA4NGE0NCA0NCAwIDEgMCAwIDg4IDQ0IDQ0IDAgMSAwIDAtODh6Il0KICAgIH07CiAgICBmYUNvZ3MgPSBmYUdlYXJzOwogICAgZmFGaWxlQ2lyY2xlUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNpcmNsZS1wbHVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNTg2MDZdLCAiZTQ5NCIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxODAgMGMtMjIuNy0zMS41LTM2LTcwLjItMzYtMTEyIDAtMTAwLjYgNzcuNC0xODMuMiAxNzYtMTkxLjNsMC0zOC4xYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MC43IDE4LjdDMjc4LjcgNi43IDI2Mi41IDAgMjQ1LjUgMEw5NiAwek0zNTcuNSAxNzZMMjY0IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwIDU4LjUgMzU3LjUgMTc2ek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMTYtMjA4bDAgNDggNDggMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNDggMCAwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNDgtNDggMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw0OCAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnoiXQogICAgfTsKICAgIGZhSWNpY2xlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpY2ljbGVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3YWQiLCAiTTc1LjggMzA0LjhMMSAzNS43Qy4zIDMzLjIgMCAzMC43IDAgMjguMiAwIDEyLjYgMTIuNiAwIDI4LjIgMEw0ODIuNCAwYzE2LjMgMCAyOS42IDEzLjIgMjkuNiAyOS42IDAgMS42LS4xIDMuMy0uNCA0LjlMNDM0LjYgNDk2LjFjLTEuNSA5LjItOS41IDE1LjktMTguOCAxNS45LTkuMiAwLTE3LjEtNi42LTE4LjctMTUuNkwzMzYgMTYwIDMwNy4yIDMwMy45Yy0xLjkgOS4zLTEwLjEgMTYuMS0xOS42IDE2LjEtOS4yIDAtMTcuMi02LjItMTkuNC0xNS4xTDI0MCAxOTIgMjEwLjYgMzY4LjJjLTEuNSA5LjEtOS40IDE1LjgtMTguNiAxNS44cy0xNy4xLTYuNy0xOC42LTE1LjhMMTQ0IDE5MiAxMTUuOSAzMDQuM2MtMi4zIDkuMi0xMC42IDE1LjctMjAuMSAxNS43LTkuMyAwLTE3LjUtNi4yLTIwLTE1LjJ6Il0KICAgIH07CiAgICBmYUFycm93VHJlbmRVcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy10cmVuZC11cCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMDk4IiwgIk0zODQgMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODIuNy0xNjkuNCAxNjkuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBMMTkyIDI2OS4zIDU0LjYgNDA2LjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE2MC0xNjBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBMMzIwIDMwNi43IDQ2Ni43IDE2MCAzODQgMTYweiJdCiAgICB9OwogICAgZmFIZXhhZ29uTm9kZXNCb2x0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhleGFnb24tbm9kZXMtYm9sdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNjlhIiwgIk0yNDggMTA2LjZjMTguOS05IDMyLTI4LjMgMzItNTAuNmMwLTMwLjktMjUuMS01Ni01Ni01NnMtNTYgMjUuMS01NiA1NmMwIDIyLjMgMTMuMSA0MS42IDMyIDUwLjZsMCA5OC44Yy0yLjggMS4zLTUuNSAyLjktOCA0LjdsLTgwLjEtNDUuOGMxLjYtMjAuOC04LjYtNDEuNi0yNy45LTUyLjhDNTcuMiA5NiAyMyAxMDUuMiA3LjUgMTMyUzEuMiAxOTMgMjggMjA4LjVjMS4zIC44IDIuNiAxLjUgNCAyLjFsMCA5MC44Yy0xLjMgLjYtMi43IDEuMy00IDIuMUMxLjIgMzE5LTggMzUzLjIgNy41IDM4MFM1Ny4yIDQxNiA4NCA0MDAuNWMxOS4zLTExLjEgMjkuNC0zMiAyNy44LTUyLjhsNTAuNS0yOC45Yy0xMS41LTExLjItMTkuOS0yNS42LTIzLjgtNDEuN0w4OCAzMDYuMWMtMi42LTEuOC01LjItMy4zLTgtNC43bDAtOTAuOGMyLjgtMS4zIDUuNS0yLjkgOC00LjdsODAuMSA0NS44Yy0uMSAxLjQtLjIgMi44LS4yIDQuM2MwIDIyLjMgMTMuMSA0MS42IDMyIDUwLjZsMCA5OC44Yy0xOC45IDktMzIgMjguMy0zMiA1MC42YzAgMzAuOSAyNS4xIDU2IDU2IDU2YzMwLjcgMCA1NS42LTI0LjcgNTYtNTUuMmMtNy41LTEyLjktMTMuNS0yNi44LTE3LjYtNDEuNWMtNC4yLTQtOS4xLTcuMy0xNC40LTkuOWwwLTk4LjhjMi44LTEuMyA1LjUtMi45IDgtNC43bDEwLjUgNmM1LjUtMTUuMyAxMy4xLTI5LjUgMjIuNC00Mi41bC05LjEtNS4yYy4xLTEuNCAuMi0yLjggLjItNC4zYzAtMjIuMy0xMy4xLTQxLjYtMzItNTAuNmwwLTk4Ljh6TTQ0MC41IDEzMkM0MjUgMTA1LjIgMzkwLjggOTYgMzY0IDExMS41Yy0xOS4zIDExLjEtMjkuNCAzMi0yNy44IDUyLjhsLTUwLjYgMjguOWMxMS41IDExLjIgMTkuOSAyNS42IDIzLjggNDEuN0wzNjAgMjA1LjljLjQgLjMgLjggLjYgMS4zIC45YzIxLjctOS41IDQ1LjYtMTQuOCA3MC44LTE0LjhjMiAwIDQgMCA1LjkgLjFjMTIuMS0xNy4zIDEzLjgtNDAuNiAyLjYtNjAuMXpNNDMyIDUxMmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTQ3LjktMjI1YzQuMyAzLjcgNS40IDkuOSAyLjYgMTQuOUw0NTIuNCAzNTZsMzUuNiAwYzUuMiAwIDkuOCAzLjMgMTEuNCA4LjJzLS4xIDEwLjMtNC4yIDEzLjRsLTk2IDcyYy00LjUgMy40LTEwLjggMy4yLTE1LjEtLjZzLTUuNC05LjktMi42LTE0LjlMNDExLjYgMzgwIDM3NiAzODBjLTUuMiAwLTkuOC0zLjMtMTEuNC04LjJzLjEtMTAuMyA0LjItMTMuNGw5Ni03MmM0LjUtMy40IDEwLjgtMy4yIDE1LjEgLjZ6Il0KICAgIH07CiAgICBmYVF1ZXN0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInF1ZXN0aW9uIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTAwNjcsIDEwMDY4LCA2MTczNl0sICIzZiIsICJNNjQgMTYwYzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCA0Mi43LTI3LjkgNzguOS02Ni41IDkxLjQtMjguNCA5LjItNjEuNSAzNS4zLTYxLjUgNzYuNmwwIDI0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNGMwLTEuNyAuNi00LjEgMy41LTcuMyAzLTMuMyA3LjktNi41IDEzLjctOC40IDY0LjMtMjAuNyAxMTAuOC04MSAxMTAuOC0xNTIuMyAwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MFMwIDcxLjYgMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnptOTYgMzUyYzIyLjEgMCA0MC0xNy45IDQwLTQwcy0xNy45LTQwLTQwLTQwLTQwIDE3LjktNDAgNDAgMTcuOSA0MCA0MCA0MHoiXQogICAgfTsKICAgIGZhSGFuZHNCb3VuZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kcy1ib3VuZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGY5IiwgIk02NCAzMkM2NCAxNC4zIDQ5LjcgMCAzMiAwUzAgMTQuMyAwIDMyTDAgMjEzLjljMCAxNC4yIDUuMSAyNy45IDE0LjMgMzguN0w5OS42IDM1MiA5NiAzNTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzg0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMuNiAwIDg1LjMtOTkuNWM5LjItMTAuOCAxNC4zLTI0LjUgMTQuMy0zOC43TDU3NiAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDExMi44LTY5LjMgOTIuNGMtNS43IDcuNi0xNi4xIDkuNi0yNC4yIDQuOC05LjctNS43LTEyLjEtMTguNy01LjEtMjcuNUw0NDEgMTgwYzEwLjgtMTMuNSA4LjktMzMuMy00LjQtNDQuNXMtMzMtOS44LTQ0LjUgMy4ybC00Ni43IDUyLjVDMzI5IDIwOS43IDMyMCAyMzMuNCAzMjAgMjU4LjFsMCA5My45LTY0IDAgMC05My45YzAtMjQuNi05LTQ4LjQtMjUuNC02Ni44bC00Ni43LTUyLjVjLTExLjUtMTMtMzEuMy0xNC40LTQ0LjUtMy4yUzEyNC4yIDE2Ni40IDEzNSAxODBsMjcuNiAzNC41YzcgOC44IDQuNyAyMS44LTUuMSAyNy41LTguMSA0LjgtMTguNiAyLjctMjQuMi00LjhMNjQgMTQ0LjggNjQgMzJ6bTY0IDQ0OGwwIDMyIDEyOCAwIDAtMzIgNjQgMCAwIDMyIDEyOCAwIDAtMzIgMzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw5NiA0MzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMHoiXQogICAgfTsKICAgIGZhUGVyc29uV2Fsa2luZ0x1Z2dhZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXdhbGtpbmctbHVnZ2FnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTU0IiwgIk0yNjQuMyAyNGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bS04IDE4MS4zbC0yMi42IDIyLjZjLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDM3LjVjMCAxMi4zLTcgMjMtMTcuMiAyOC40LS45IDQuMi0yLjQgOC40LTQuMyAxMi4zbC02OSAxMzguMS0uOC0uNC0yNy43IDU1LjNjLTkuOSAxOS44LTMzLjkgMjcuOC01My43IDE3LjlMMTQuNiA1MjFjLTE5LjgtOS45LTI3LjgtMzMuOS0xNy45LTUzLjdMNDcuMyAzNjYuM2M5LjktMTkuOCAzMy45LTI3LjggNTMuNy0xNy45bDMwLjcgMTUuMyAyOC4zLTU2LjZjLjMtLjYgLjQtMS4yIC40LTEuOGwwLTE2LjljMC0uMiAwLS4zIDAtLjVsMC0zNy41YzAtMjUuNSAxMC4xLTQ5LjkgMjguMS02Ny45bDM1LjEtMzUuMWMyMi44LTIyLjggNTMuNi0zNS42IDg1LjgtMzUuNiAzNi45IDAgNzEuOCAxNi44IDk0LjggNDUuNkw0MjIuMSAxODBjNi4xIDcuNiAxNS4zIDEyIDI1IDEybDMzLjIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzMuMiAwYy0yOS4yIDAtNTYuNy0xMy4zLTc1LTM2bC0zLjgtNC43IDAgMTE1LjIgMzQuNSAyOS42YzE3LjcgMTUuMiAyOS4zIDM2LjIgMzIuNiA1OS4zTDQ0OCA1MDcuNWMyLjUgMTcuNS05LjcgMzMuNy0yNy4yIDM2LjJzLTMzLjctOS43LTM2LjItMjcuMkwzNzIgNDI4LjRjLTEuMS03LjctNS0xNC43LTEwLjktMTkuOGwtNzEuNC02MS4yYy0yMS4zLTE4LjItMzMuNS00NC45LTMzLjUtNzIuOWwwLTY5LjN6bS4xIDE2NS44YzIuNCAyLjMgNC44IDQuNiA3LjQgNi44bDQ2IDM5LjQtMi4yIDcuNmMtNC41IDE1LjctMTIuOSAzMC0yNC40IDQxLjVsLTY4LjMgNjguM2MtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMjM4IDQyMS4xYzMuOC0zLjggNi42LTguNiA4LjEtMTMuOEwyNTYuNCAzNzF6Il0KICAgIH07CiAgICBmYUZpbGVBcnJvd0Rvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1hcnJvdy1kb3duIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImZpbGUtZG93bmxvYWQiXSwgImY1NmQiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xNzUgNDQxYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDY0LTY0YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTIzIDIzIDAtODYuMWMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDg2LjEtMjMtMjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNjQgNjR6Il0KICAgIH07CiAgICBmYUZpbGVEb3dubG9hZCA9IGZhRmlsZUFycm93RG93bjsKICAgIGZhUGVyc29uQm9vdGggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWJvb3RoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3NTYiLCAiTTQwIDI0QTU2IDU2IDAgMSAxIDE1MiAyNCA1NiA1NiAwIDEgMSA0MCAyNHptNTEuMSA4OGMyMy41IDAgNDUuNSAxMS4zIDU5LjEgMzAuNGw0OC43IDY4LjJjNiA4LjQgMTUuNyAxMy40IDI2IDEzLjRsMzEuMSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMS4xIDBjLTMxIDAtNjAuMS0xNS03OC4xLTQwLjJsLTIuOC0zLjkgMCA4MC4xIDQxLjYgMzEuMkMyMDkuOCAzNzMuMyAyMjQgNDAxLjggMjI0IDQzMmwwIDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODBjMC0xMC4xLTQuNy0xOS42LTEyLjgtMjUuNkw3MC40IDM0OC44QzQ2LjIgMzMwLjcgMzIgMzAyLjIgMzIgMjcybDAtMTAwLjlDMzIgMTM4LjUgNTguNSAxMTIgOTEuMSAxMTJ6TTMyIDUxMmwwLTEzMi43YzMuMSAyLjcgNi4zIDUuNCA5LjYgNy45TDk2IDQyOCA5NiA1MTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJ6bTU0NC04OGwwIDk2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNzItMTY4IDBjLTcuMSAwLTEzLjgtMy4xLTE4LjQtOC42cy02LjUtMTIuNi01LjMtMTkuNmwzMC43LTE3Ni43LTYzLjEtMTM3LjYgMCA3MmMtNS4yLTEtMTAuNS0xLjYtMTYtMS42bC0zMiAwIDAtMTIwYzAtMzAuOSAyNS4xLTU2IDU2LTU2TDUyMCAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2bDAgMzY4ek0yODggMzM2YzUuNSAwIDEwLjgtLjYgMTYtMS42TDMwNCA1MjBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xODQgMzIgMHoiXQogICAgfTsKICAgIGZhTG9jdXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxvY3VzdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTIwIiwgIk0zMjggMzJjMTM3IDAgMjQ4IDExMSAyNDggMjQ4bDAgNDAtLjQgOC4yQzU3MS41IDM2OC41IDUzNy40IDQwMCA0OTYgNDAwbC0xMi4zIDAgMjUuMiA0NC4xYzYuNiAxMS41IDIuNiAyNi4yLTguOSAzMi44cy0yNi4yIDIuNi0zMi43LTguOWwtMzguOC02Ny45LTgwLjQgMC00OC4yIDY5LjdjLTcuNSAxMC45LTIyLjUgMTMuNi0zMy40IDYuMXMtMTMuNi0yMi41LTYuMS0zMy40bDI5LjMtNDIuMy03NC41IDAtNTEuNyA3MC4yYy03LjkgMTAuNy0yMi45IDEyLjktMzMuNiA1LjFzLTEyLjktMjIuOS01LjEtMzMuNmw0MC41LTU1LTQzLTE2LjQtNzkuMyAxMDAuNWMtOC4yIDEwLjQtMjMuMyAxMi4yLTMzLjcgNHMtMTIuMi0yMy4zLTQtMzMuN2wyNDAtMzA0IDIuMS0yLjNjNS4yLTUuMSAxMi41LTcuNSAxOS45LTYuNiA4LjQgMS4xIDE1LjYgNi41IDE4LjkgMTQuM2wyMS43IDUwLjcgNDAuOS01NS41IDIuMS0yLjRjNS4xLTUuMyAxMi41LTggMjAtNy4yIDguNSAxIDE1LjkgNi41IDE5LjMgMTQuNGw0MS44IDk3LjUgNjQuMiAwYzEwLjIgMCAyMCAyIDI5IDUuNS0xNi40LTk0LTk4LjMtMTY1LjUtMTk3LTE2NS41bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE2IDB6TTQ4OCAyOTZhMjQgMjQgMCAxIDAgMCA0OCAyNCAyNCAwIDEgMCAwLTQ4ek00My41IDMzMS4xQzM2LjIgMzIxLjQgMzIgMzA5LjUgMzIgMjk2LjggMzIgMjY1LjUgNTcuNSAyNDAgODguOSAyNDBsMjcuNiAwLTcyLjkgOTEuMXpNMjI1LjEgMjQwbDQ4LjIgMCAxLjQtMS45LTE2LjktMzkuNS0zMi43IDQxLjV6bTEwNy44IDBsNDYuNyAwLTE3LjItNDAtMjkuNSA0MHoiXQogICAgfTsKICAgIGZhUmlnaHRMb25nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJpZ2h0LWxvbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsibG9uZy1hcnJvdy1hbHQtcmlnaHQiXSwgImYzMGIiLCAiTTU2Ni42IDIzMy40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC0xMjggMTI4Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOVMzODQgMzk2LjkgMzg0IDM4NGwwLTY0LTMzNiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTMyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDMzNiAwIDAtNjRjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnMyNS43LTIuMiAzNC45IDYuOWwxMjggMTI4eiJdCiAgICB9OwogICAgZmFMb25nQXJyb3dBbHRSaWdodCA9IGZhUmlnaHRMb25nOwogICAgZmFUcnVja0Ryb3BsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stZHJvcGxldCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNThjIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMuMyAwYzEwLjQgMzYuOSA0NC40IDY0IDg0LjcgNjRzNzQuMi0yNy4xIDg0LjctNjRsMTAyLjYgMGMxMC40IDM2LjkgNDQuNCA2NCA4NC43IDY0czc0LjItMjcuMSA4NC43LTY0bDMuMyAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTQ2LjdjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMNTEyIDE0Ni43Yy0xMi0xMi0yOC4zLTE4LjctNDUuMy0xOC43bC01MC43IDAgMC0zMmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNNTEyIDIzNy4zbDAgNTAuNy05NiAwIDAtOTYgNTAuNyAwIDQ1LjMgNDUuM3pNMTUyIDM4NGE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6bTIzMiA0MGE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwek0yMDggMzA0Yy0zOS44IDAtNzItMzIuMi03Mi03MiAwLTMzLjIgMzQuNS03OCA1NS44LTEwMi40IDguNy0xMCAyMy44LTEwIDMyLjUgMCAyMS4yIDI0LjQgNTUuOCA2OS4xIDU1LjggMTAyLjQgMCA0OC0zMi4yIDcyLTcyIDcyeiJdCiAgICB9OwogICAgZmFIYW5kSG9sZGluZ01lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1ob2xkaW5nLW1lZGljYWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTA1YyIsICJNMjQwIDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA1NiA1NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTU2IDAgMCA1NmMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC01Ni01NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDU2IDAgMC01NnpNNjYuNyAzODRsNDIuNS00Mi41YzI0LTI0IDU2LjYtMzcuNSA5MC41LTM3LjVMMzUyIDMwNGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIuNiAwIDExOS43LTg4LjJjMTcuOC0xMy4xIDQyLjgtOS4zIDU1LjkgOC41czkuMyA0Mi44LTguNSA1NS45TDQzMy4xIDQ4NS41Yy0yMy40IDE3LjItNTEuNiAyNi41LTgwLjcgMjYuNUwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMzQuNyAweiJdCiAgICB9OwogICAgZmFIYW5kUG9pbnRMZWZ0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBvaW50LWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBhNSIsICJNMzIgOTZDMTQuMyA5NiAwIDExMC4zIDAgMTI4czE0LjMgMzIgMzIgMzJsMjA4IDAgMC02NC0yMDggMHpNMTkyIDI4OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwem0tNjQtNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNDggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTk2IDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwem04OC05NmwtLjYgMGM1LjQgOS40IDguNiAyMC4zIDguNiAzMiAwIDEzLjItNCAyNS40LTEwLjggMzUuNiAyNC45IDguNyA0Mi44IDMyLjUgNDIuOCA2MC40IDAgMTEuNy0zLjEgMjIuNi04LjYgMzJsOC42IDBjODguNCAwIDE2MC03MS42IDE2MC0xNjBsMC02MS43YzAtNDIuNC0xNi45LTgzLjEtNDYuOS0xMTMuMWwtMTEuNi0xMS42QzQyOS41IDc3LjUgMzk2LjkgNjQgMzYzIDY0bC0yNyAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDg4YzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBsMC01NmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNTZjMCAzOS44LTMyLjIgNzItNzIgNzJ6Il0KICAgIH07CiAgICBmYUNhbGN1bGF0b3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FsY3VsYXRvciIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODQyNV0sICJmMWVjIiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwek05NiA2NGwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTYgMTY4YTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6bTgwIDI0YTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHptMTI4LTI0YTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6TTg4IDM1MmEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6bTEyOC0yNGEyNCAyNCAwIDEgMSAtNDggMCAyNCAyNCAwIDEgMSA0OCAwem04MCAyNGEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6TTY0IDQyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw4OCA0NDhjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0yMzItMjRjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjQtMjQtMTAuNy0yNC0yNCAxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtaW51cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzgyMTEsIDg3MjIsIDEwMTM0LCAic3VidHJhY3QiXSwgImYwNjgiLCAiTTAgMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYVN1YnRyYWN0ID0gZmFNaW51czsKICAgIGZhQXJyb3dVcFpBID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLXotYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LWFscGhhLXVwLWFsdCJdLCAiZjg4MiIsICJNMTUwLjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTgwIDgwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDk2IDE0MS4zIDk2IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzA2LjcgMjUuNCAyNS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTgwLTgwek0yODggNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNTAuNyAwLTczLjQgNzMuNGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlTMzA3LjEgMjI0IDMyMCAyMjRsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTUwLjcgMCA3My40LTczLjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNDYxIDMyIDQ0OCAzMkwzMjAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek00MTIuNiAyNzMuN0M0MDcuMiAyNjIuOCAzOTYuMSAyNTYgMzg0IDI1NnMtMjMuMiA2LjgtMjguNiAxNy43bC04MCAxNjBjLTcuOSAxNS44LTEuNSAzNSAxNC4zIDQyLjlzMzUgMS41IDQyLjktMTQuM2w3LjItMTQuMyA4OC40IDAgNy4yIDE0LjNjNy45IDE1LjggMjcuMSAyMi4yIDQyLjkgMTQuM3MyMi4yLTI3LjEgMTQuMy00Mi45bC04MC0xNjB6TTM4NCAzNTkuNmwyMC4yIDQwLjQtNDAuNCAwIDIwLjItNDAuNHoiXQogICAgfTsKICAgIGZhU29ydEFscGhhVXBBbHQgPSBmYUFycm93VXBaQTsKICAgIGZhTWljcm9waG9uZVNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pY3JvcGhvbmUtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjEzMSIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0MjQuNyAzNTguOEM0NTguOSAzMjQuMiA0ODAgMjc2LjYgNDgwIDIyNGwwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDBjMCAzOS4zLTE1LjcgNzQuOS00MS4zIDEwMC45TDM1Ni44IDI5MUMzNzMuNiAyNzMuNyAzODQgMjUwIDM4NCAyMjRsMC0xMjhjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZsMCAzMC4yLTE1MS0xNTF6bTI5OC4zIDQzNGwtNDEuNC00MS40Yy0zLjMgLjItNi41IC4zLTkuOCAuMy03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NGwwLTEwLjItNDMuNi00My42Yy0yLjggMy45LTQuNCA4LjctNC40IDEzLjhsMCA0MGMwIDk3LjkgNzMuMyAxNzguNyAxNjggMTkwLjVsMCA0OS41LTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMC00OS41YzkuMy0xLjIgMTguNC0zIDI3LjMtNS40eiJdCiAgICB9OwogICAgZmFTcXVhcmVQZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXBlbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJwZW4tc3F1YXJlIiwgInBlbmNpbC1zcXVhcmUiXSwgImYxNGIiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTMyNS44IDEzOS43bDE0LjQgMTQuNGMxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNmwtMjMuOCAyMy44LTcxLTcxIDIzLjgtMjMuOGMxNS42LTE1LjYgNDAuOS0xNS42IDU2LjYgMHpNMTE5LjkgMjg5bDkxLjUtOTEuNiA3MSA3MS05MS42IDkxLjVjLTQuMSA0LjEtOS4yIDctMTQuOSA4LjRsLTYwLjEgMTVjLTUuNSAxLjQtMTEuMi0uMi0xNS4yLTQuMnMtNS42LTkuNy00LjItMTUuMmwxNS02MC4xYzEuNC01LjYgNC4zLTEwLjggOC40LTE0Ljl6Il0KICAgIH07CiAgICBmYVBlblNxdWFyZSA9IGZhU3F1YXJlUGVuOwogICAgZmFQZW5jaWxTcXVhcmUgPSBmYVNxdWFyZVBlbjsKICAgIGZhSGFuZEZpc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1maXN0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTk5NCwgImZpc3QtcmFpc2VkIl0sICJmNmRlIiwgIk0xNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDExMi02NCAwIDAtMTEyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zMiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMlM5NiA0Ni4zIDk2IDY0bDAgODAtNjQgMCAwLTgwem0xOTIgMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NnptOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6bS05NiA4OGwwLS42YzkuNCA1LjQgMjAuMyA4LjYgMzIgOC42IDEzLjIgMCAyNS40LTQgMzUuNi0xMC44IDguNyAyNC45IDMyLjUgNDIuOCA2MC40IDQyLjggMTEuNyAwIDIyLjYtMy4xIDMyLTguNmwwIDguNmMwIDUyLjMtMjUuMSA5OC44LTY0IDEyOGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xNjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC03OC40Yy0xNy4zLTcuOS0zMy4yLTE4LjgtNDYuOS0zMi41TDM3LjUgMzU3LjVDMTMuNSAzMzMuNSAwIDMwMC45IDAgMjY3bDAtMjdjMC0zNS4zIDI4LjctNjQgNjQtNjRsODggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MGwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw1NiAwYzM5LjggMCA3Mi0zMi4yIDcyLTcyeiJdCiAgICB9OwogICAgZmFGaXN0UmFpc2VkID0gZmFIYW5kRmlzdDsKICAgIGZhQ29tbWVudFNtcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21tZW50LXNtcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzbXMiXSwgImY3Y2QiLCAiTTI1NiA0ODBjMTQxLjQgMCAyNTYtMTA3LjUgMjU2LTI0MFMzOTcuNCAwIDI1NiAwIDAgMTA3LjUgMCAyNDBjMCA1NC4zIDE5LjIgMTA0LjMgNTEuNiAxNDQuNUwyLjggNDc2LjhjLTQuOCA5LTMuMyAyMCAzLjYgMjcuNXMxNy44IDkuOCAyNy4xIDUuOGwxMTguNC01MC43QzE4My43IDQ3Mi42IDIxOC45IDQ4MCAyNTYgNDgwek0xNDAuOCAxNzIuOGwxOS4yIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE5LjIgMGMtNS4zIDAtOS42IDQuMy05LjYgOS42czQuMyA5LjYgOS42IDkuNmMyMyAwIDQxLjYgMTguNiA0MS42IDQxLjZzLTE4LjYgNDEuNi00MS42IDQxLjZsLTI1LjYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwyNS42IDBjNS4zIDAgOS42LTQuMyA5LjYtOS42cy00LjMtOS42LTkuNi05LjZjLTIzIDAtNDEuNi0xOC42LTQxLjYtNDEuNnMxOC42LTQxLjYgNDEuNi00MS42em0xODguOCA0MS42YzAtMjMgMTguNi00MS42IDQxLjYtNDEuNmwxOS4yIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE5LjIgMGMtNS4zIDAtOS42IDQuMy05LjYgOS42czQuMyA5LjYgOS42IDkuNmMyMyAwIDQxLjYgMTguNiA0MS42IDQxLjZzLTE4LjYgNDEuNi00MS42IDQxLjZsLTI1LjYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwyNS42IDBjNS4zIDAgOS42LTQuMyA5LjYtOS42cy00LjMtOS42LTkuNi05LjZjLTIzIDAtNDEuNi0xOC42LTQxLjYtNDEuNnptLTk4LjMtMzMuOGwyNC43IDQxLjEgMjQuNy00MS4xYzMuNy02LjIgMTEuMS05LjEgMTgtNy4yczExLjcgOC4yIDExLjcgMTUuNGwwIDEwMi40YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNDQuNi04LjcgMTQuNWMtMi45IDQuOC04LjEgNy44LTEzLjcgNy44cy0xMC44LTMtMTMuNy03LjhsLTguNy0xNC41IDAgNDQuNmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTEwMi40YzAtNy4yIDQuOC0xMy41IDExLjctMTUuNHMxNC4zIDEgMTggNy4yeiJdCiAgICB9OwogICAgZmFTbXMgPSBmYUNvbW1lbnRTbXM7CiAgICBmYVNpbUNhcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2ltLWNhcmQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjdjNCIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjU4LjcgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyA4MGMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek05NiAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDAgMTI4IDAgMC03Mi05NiAwek02NCA0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsNDggMCAwLTcyLTgwIDAgMCA0MHptMjU2IDBsMC00MC0xMjggMCAwIDcyIDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6bTAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMybC00OCAwIDAgNzIgODAgMCAwLTQweiJdCiAgICB9OwogICAgZmFTY2FsZUJhbGFuY2VkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjYWxlLWJhbGFuY2VkIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbOTg3OCwgImJhbGFuY2Utc2NhbGUiXSwgImYyNGUiLCAiTTM4NCAzMmwxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzOTguNCA5NmMtNS4yIDI1LjgtMjIuOSA0Ny4xLTQ2LjQgNTcuM2wwIDI5NC43IDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zODQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNjAgMCAwLTI5NC43Yy0yMy41LTEwLjMtNDEuMi0zMS42LTQ2LjQtNTcuM0wxMjggOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTI4IDBjMTQuNi0xOS40IDM3LjgtMzIgNjQtMzJzNDkuNCAxMi42IDY0IDMyem01NS42IDI4OEw1ODQuNCAzMjAgNTEyIDE5NS44IDQzOS42IDMyMHpNNTEyIDQxNmMtNjIuOSAwLTExNS4yLTM0LTEyNi03OC45LTIuNi0xMSAxLTIyLjMgNi43LTMyLjFsOTUuMi0xNjMuMmM1LTguNiAxNC4yLTEzLjggMjQuMS0xMy44czE5LjEgNS4zIDI0LjEgMTMuOGw5NS4yIDE2My4yYzUuNyA5LjggOS4zIDIxLjEgNi43IDMyLjEtMTAuOCA0NC44LTYzLjEgNzguOS0xMjYgNzguOXpNMTI2LjggMTk1LjhMNTQuNCAzMjAgMTk5LjMgMzIwIDEyNi44IDE5NS44ek0uOSAzMzcuMWMtMi42LTExIDEtMjIuMyA2LjctMzIuMWw5NS4yLTE2My4yYzUtOC42IDE0LjItMTMuOCAyNC4xLTEzLjhzMTkuMSA1LjMgMjQuMSAxMy44bDk1LjIgMTYzLjJjNS43IDkuOCA5LjMgMjEuMSA2LjcgMzIuMS0xMC44IDQ0LjgtNjMuMSA3OC45LTEyNiA3OC45UzExLjcgMzgyIC45IDMzNy4xeiJdCiAgICB9OwogICAgZmFCYWxhbmNlU2NhbGUgPSBmYVNjYWxlQmFsYW5jZWQ7CiAgICBmYUNhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg2NjQsICJhdXRvbW9iaWxlIl0sICJmMWI5IiwgIk0xMzUuMiAxMTcuNGwtMjYuMSA3NC42IDI5My44IDAtMjYuMS03NC42QzM3Mi4zIDEwNC42IDM2MC4yIDk2IDM0Ni42IDk2TDE2NS40IDk2Yy0xMy42IDAtMjUuNyA4LjYtMzAuMiAyMS40ek0zOS42IDE5Ni44TDc0LjggOTYuM0M4OC4zIDU3LjggMTI0LjYgMzIgMTY1LjQgMzJsMTgxLjIgMGM0MC44IDAgNzcuMSAyNS44IDkwLjYgNjQuM2wzNS4yIDEwMC41YzIzLjIgOS42IDM5LjYgMzIuNSAzOS42IDU5LjJsMCAxOTJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzItMzIwIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMCAyNTZjMC0yNi43IDE2LjQtNDkuNiAzOS42LTU5LjJ6TTEyOCAzMDRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMjg4IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQXV0b21vYmlsZSA9IGZhQ2FyOwogICAgZmFDcm9wU2ltcGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNyb3Atc2ltcGxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNyb3AtYWx0Il0sICJmNTY1IiwgIk0xMjggMzJjMC0xNy43LTE0LjMtMzItMzItMzJTNjQgMTQuMyA2NCAzMmwwIDMyLTMyIDBDMTQuMyA2NCAwIDc4LjMgMCA5NnMxNC4zIDMyIDMyIDMybDMyIDAgMCAyNTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjA4IDAgMC02NC0yMDggMCAwLTM1MnpNMzg0IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtMjA4IDAgMCA2NCAyMDggMCAwIDM1MnoiXQogICAgfTsKICAgIGZhQ3JvcEFsdCA9IGZhQ3JvcFNpbXBsZTsKICAgIGZhTWVkYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWVkYWwiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5NDFdLCAiZjVhMiIsICJNMjI0LjMgMTI4TDEzOS43LTEyLjljLTYuNS0xMC44LTIwLjEtMTQuNy0zMS4zLTkuMUwyMS44IDIxLjNDOS45IDI3LjIgNS4xIDQxLjYgMTEgNTMuNUw4MC42IDE5Mi42Yy0zMC4xIDMzLjktNDguMyA3OC41LTQ4LjMgMTI3LjQgMCAxMDYgODYgMTkyIDE5MiAxOTJzMTkyLTg2IDE5Mi0xOTJjMC00OC45LTE4LjMtOTMuNS00OC4zLTEyNy40TDQzNy42IDUzLjVjNS45LTExLjkgMS4xLTI2LjMtMTAuNy0zMi4yTDM0MC4yLTIyLjFjLTExLjItNS42LTI0LjktMS42LTMxLjMgOS4xTDIyNC4zIDEyOHptMzAuOCAxNDIuNWMxLjQgMi44IDQgNC43IDcgNS4xbDUwLjEgNy4zYzcuNyAxLjEgMTAuNyAxMC41IDUuMiAxNmwtMzYuMyAzNS40Yy0yLjIgMi4yLTMuMiA1LjItMi43IDguM2w4LjYgNDkuOWMxLjMgNy42LTYuNyAxMy41LTEzLjYgOS45bC00NC44LTIzLjZjLTIuNy0xLjQtNi0xLjQtOC43IDBsLTQ0LjggMjMuNmMtNi45IDMuNi0xNC45LTIuMi0xMy42LTkuOWw4LjYtNDkuOWMuNS0zLS41LTYuMS0yLjctOC4zbC0zNi4zLTM1LjRjLTUuNi01LjQtMi41LTE0LjggNS4yLTE2bDUwLjEtNy4zYzMtLjQgNS43LTIuNCA3LTUuMWwyMi40LTQ1LjRjMy40LTcgMTMuMy03IDE2LjggMGwyMi40IDQ1LjR6Il0KICAgIH07CiAgICBmYVNjcm9sbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY3JvbGwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgyMjBdLCAiZjcwZSIsICJNMCAxMTJDMCA3MC41IDMxLjYgMzYuNCA3MiAzMi40bDAtLjQgMjgwIDBjNTMgMCA5NiA0MyA5NiA5NmwwIDE3Ni0xNzYgMGMtMzkuOCAwLTcyIDMyLjItNzIgNzJsMCA2MGMwIDI0LjMtMTkuNyA0NC00NCA0NHMtNDQtMTkuNy00NC00NGwwLTIyOC02NCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTQ4ek0yMzYuOCA0ODBjNy4xLTEzLjEgMTEuMi0yOC4xIDExLjItNDRsMC02MGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwyNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDI0YzAgNDQuMi0zNS44IDgwLTgwIDgwbC0yMjcuMiAwek04MCA4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0OCA2NCAwIDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJ6Il0KICAgIH07CiAgICBmYUZpbGVFeGNlbDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1leGNlbCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWMzIiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTY0IDI2Ni43Yy03LjQtMTEtMjIuMy0xNC0zMy4zLTYuN3MtMTQgMjIuMy02LjcgMzMuM0wxNjMuMiAzNTIgMTI0IDQxMC43Yy03LjQgMTEtNC40IDI1LjkgNi43IDMzLjNzMjUuOSA0LjQgMzMuMy02LjdsMjgtNDIgMjggNDJjNy40IDExIDIyLjMgMTQgMzMuMyA2LjdzMTQtMjIuMyA2LjctMzMuM0wyMjAuOCAzNTIgMjYwIDI5My4zYzcuNC0xMSA0LjQtMjUuOS02LjctMzMuM3MtMjUuOS00LjQtMzMuMyA2LjdsLTI4IDQyLTI4LTQyeiJdCiAgICB9OwogICAgZmFGaWx0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsdGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwYjAiLCAiTTMyIDY0QzE5LjEgNjQgNy40IDcxLjggMi40IDgzLjhTLjIgMTA5LjUgOS40IDExOC42TDE5MiAzMDEuMyAxOTIgNDE2YzAgOC41IDMuNCAxNi42IDkuNCAyMi42bDY0IDY0YzkuMiA5LjIgMjIuOSAxMS45IDM0LjkgNi45UzMyMCA0OTIuOSAzMjAgNDgwbDAtMTc4LjcgMTgyLjYtMTgyLjZjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTNDkyLjkgNjQgNDgwIDY0TDMyIDY0eiJdCiAgICB9OwogICAgZmFEcnVtID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRydW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzNDVdLCAiZjU2OSIsICJNNTAxLjIgNzYuMWMxMS4xLTcuMyAxNC4yLTIyLjEgNi45LTMzLjJzLTIyLjEtMTQuMi0zMy4yLTYuOUwzNzAuMiAxMDQuNUMzMzUuOCA5OC43IDI5NyA5NiAyNTYgOTYgMTE0LjYgOTYgMCAxMjggMCAyMDhMMCAzNjhjMCAzMS4zIDI3LjQgNTguOCA3MiA3OC43TDcyIDM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTE5LjRjMzMgOC45IDcxLjEgMTQuNSAxMTIgMTYuMUwyMzIgMzc2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDMuNWM0MC45LTEuNiA3OS03LjIgMTEyLTE2LjFMMzkyIDM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTAyLjdjNDQuNi0xOS45IDcyLTQ3LjQgNzItNzguN2wwLTE2MGMwLTQxLjEtMzAuMi02OS41LTc4LjgtODcuNGw2Ny45LTQ0LjV6TTMwNy40IDE0NS42bC02NC42IDQyLjNjLTExLjEgNy4zLTE0LjIgMjIuMS02LjkgMzMuMnMyMi4xIDE0LjIgMzMuMiA2LjlsMTExLjEtNzIuOGMxNC43IDMuMiAyNy45IDcgMzkuNCAxMS41IDM4LjggMTUuMSA0NC40IDMwLjYgNDQuNCA0MS4zIDAgLjgtMi43IDE3LjItNDYgMzUuOS0zOC45IDE2LjgtOTYgMjguMS0xNjIgMjguMVMxMzIuOSAyNjAuNyA5NCAyNDMuOWMtNDMuMy0xOC43LTQ2LTM1LjEtNDYtMzUuOSAwLTEwLjYgNS42LTI2LjIgNDQuNC00MS4zIDM4LjMtMTQuOSA5NS40LTIyLjcgMTYzLjYtMjIuNyAxOCAwIDM1LjEgLjUgNTEuNCAxLjZ6Il0KICAgIH07CiAgICBmYU1hcFBpbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXAtcGluIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTI4MjA1XSwgImYyNzYiLCAiTTE5MiAyODQuNEMyNTYuMSAyNjkuOSAzMDQgMjEyLjUgMzA0IDE0NCAzMDQgNjQuNSAyMzkuNSAwIDE2MCAwUzE2IDY0LjUgMTYgMTQ0YzAgNjguNSA0Ny45IDEyNS45IDExMiAxNDAuNEwxMjggNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xOTUuNnpNMTY4IDk2Yy0zMC45IDAtNTYgMjUuMS01NiA1NiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTU3LjQgNDYuNi0xMDQgMTA0LTEwNCAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHoiXQogICAgfTsKICAgIGZhU2NhbGVVbmJhbGFuY2VkRmxpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2FsZS11bmJhbGFuY2VkLWZsaXAiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiYmFsYW5jZS1zY2FsZS1yaWdodCJdLCAiZjUxNiIsICJNMTE4LjIgNjIuNEMxMDEuNSA1Ni44IDkyLjQgMzguNiA5OCAyMS45UzEyMS43LTMuOSAxMzguNSAxLjZsMTEzIDM3LjdjMTMuOS0yMy41IDM5LjYtMzkuMyA2OC45LTM5LjMgNDQuMiAwIDgwIDM1LjggODAgODAgMCAzLS4yIDUuOS0uNSA4LjhsMTIyLjYgNDAuOWMxNi44IDUuNiAyNS44IDIzLjcgMjAuMiA0MC41cy0yMy43IDI1LjgtNDAuNSAyMC4yTDM2Ni43IDE0NS4yYy00LjUgMy4yLTkuMyA1LjktMTQuNCA4LjJsMCAzMjYuN2MwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYwIDAgMC0yOTQuN2MtMjEtOS4yLTM3LjItMjctNDQuMi00OWwtMTI1LjktNDJ6TTIwMC44IDI4OEwxMjguMyAxNjMuOCA1NS45IDI4OCAyMDAuOCAyODh6bS03Mi40IDk2Yy02Mi45IDAtMTE1LjItMzQtMTI2LTc4LjktMi42LTExIDEtMjIuMyA2LjctMzIuMWw5NS4yLTE2My4yYzUtOC42IDE0LjItMTMuOCAyNC4xLTEzLjhzMTkuMSA1LjMgMjQuMSAxMy44bDk1LjIgMTYzLjJjNS43IDkuOCA5LjMgMjEuMSA2LjcgMzIuMS0xMC44IDQ0LjgtNjMuMSA3OC45LTEyNiA3OC45em0zODIuOC05Mi4ybC03Mi40IDEyNC4yIDE0NC45IDAtNzIuNC0xMjQuMnptMTI2IDE0MS4zQzYyNi40IDQ3OCA1NzQuMSA1MTIgNTExLjIgNTEycy0xMTUuMi0zNC0xMjYtNzguOWMtMi42LTExIDEtMjIuMyA2LjctMzIuMWw5NS4yLTE2My4yYzUtOC42IDE0LjItMTMuOCAyNC4xLTEzLjhzMTkuMSA1LjMgMjQuMSAxMy44bDk1LjIgMTYzLjJjNS43IDkuOCA5LjMgMjEuMSA2LjcgMzIuMXoiXQogICAgfTsKICAgIGZhQmFsYW5jZVNjYWxlUmlnaHQgPSBmYVNjYWxlVW5iYWxhbmNlZEZsaXA7CiAgICBmYUFycm93c1RvQ2lyY2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy10by1jaXJjbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRiZCIsICJNOS40IDkuNEMyMS45LTMuMSA0Mi4xLTMuMSA1NC42IDkuNEwxMjggODIuNyAxMjggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE4LjcgMC03My40LTczLjRDLTMuMSA0Mi4xLTMuMSAyMS45IDkuNCA5LjR6TTIwMCAyNTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek01MDIuNiA1NC42TDQyOS4zIDEyOCA0NDggMTI4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxOC43IDczLjQtNzMuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zem0tNDUuMyA0NDhMMzg0IDQyOS4zIDM4NCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOC43IDAgNzMuNCA3My40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwek05LjQgNDU3LjRMODIuNyAzODQgNjQgMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE4LjctNzMuNCA3My40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM3oiXQogICAgfTsKICAgIGZhRW52ZWxvcGUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVudmVsb3BlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Mzg2LCA5OTkzLCA2MTQ0M10sICJmMGUwIiwgIk00OCA2NGMtMjYuNSAwLTQ4IDIxLjUtNDggNDggMCAxNS4xIDcuMSAyOS4zIDE5LjIgMzguNGwyMDggMTU2YzE3LjEgMTIuOCA0MC41IDEyLjggNTcuNiAwbDIwOC0xNTZjMTIuMS05LjEgMTkuMi0yMy4zIDE5LjItMzguNCAwLTI2LjUtMjEuNS00OC00OC00OEw0OCA2NHpNMCAxOTZMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xODgtMTk4LjQgMTQ4LjhjLTM0LjEgMjUuNi04MS4xIDI1LjYtMTE1LjIgMEwwIDE5NnoiXQogICAgfTsKICAgIGZhQmFieSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWJ5IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY3N2MiLCAiTTEyMCA4OGE3MiA3MiAwIDEgMSAxNDQgMCA3MiA3MiAwIDEgMSAtMTQ0IDB6TTcuNyAxNDQuNWMxMy0xNy45IDM4LTIxLjggNTUuOS04LjhMOTkuOCAxNjJjMjYuOCAxOS41IDU5LjEgMzAgOTIuMiAzMHM2NS40LTEwLjUgOTIuMi0zMGwzNi4yLTI2LjRjMTcuOS0xMyA0Mi45LTkgNTUuOSA4LjhzOSA0Mi45LTguOCA1NS45bC0zNi4yIDI2LjRjLTEzLjYgOS45LTI4LjEgMTguMi00My4zIDI1bDAgMzYuMy0xOTIgMCAwLTM2LjNjLTE1LjItNi43LTI5LjctMTUuMS00My4zLTI1TDE2LjUgMjAwLjNjLTE3LjktMTMtMjEuOC0zOC04LjgtNTUuOXpNOTcuNSAzMjkuM2w2MC42IDUzLTI2IDM3LjIgMjQuMyAyNC4zYzE1LjYgMTUuNiAxNS42IDQwLjkgMCA1Ni42cy00MC45IDE1LjYtNTYuNiAwbC00OC00OEMzOCA0MzguNiAzNi4xIDQxNyA0Ny4yIDQwMS4xbDUwLjItNzEuOHptMTI4LjUgNTNsNjAuNi01MyA1MC4yIDcxLjhjMTEuMSAxNS45IDkuMiAzNy41LTQuNSA1MS4ybC00OCA0OGMtMTUuNiAxNS42LTQwLjkgMTUuNi01Ni42IDBzLTE1LjYtNDAuOSAwLTU2LjZsMjQuMy0yNC4zLTI2LTM3LjJ6Il0KICAgIH07CiAgICBmYVNxdWFyZUNhcmV0RG93bjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWNhcmV0LWRvd24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY2FyZXQtc3F1YXJlLWRvd24iXSwgImYxNTAiLCAiTTM4NCA0ODBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMHpNMjI0IDM1MmMtNi43IDAtMTMtMi44LTE3LjYtNy43bC0xMDQtMTEyYy02LjUtNy04LjItMTcuMi00LjQtMjUuOVMxMTAuNSAxOTIgMTIwIDE5MmwyMDggMGM5LjUgMCAxOC4yIDUuNyAyMiAxNC40czIuMSAxOC45LTQuNCAyNS45bC0xMDQgMTEyYy00LjUgNC45LTEwLjkgNy43LTE3LjYgNy43eiJdCiAgICB9OwogICAgZmFDYXJldFNxdWFyZURvd24yID0gZmFTcXVhcmVDYXJldERvd24yOwogICAgZmFUZW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU3ZCIsICJNMjYuOSAyMDYuOUwzLjcgNDQ0LjlDMS44IDQ2My43IDE2LjYgNDgwIDM1LjUgNDgwbDE3Mi43IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xMjljMC04LjMgNi43LTE1IDE1LTE1IDUuNSAwIDEwLjYgMyAxMy4yIDcuOWw4Ni4xIDE1OWM4LjQgMTUuNSAyNC42IDI1LjEgNDIuMiAyNS4xbDY0LjEgMGMxOC45IDAgMzMuNy0xNi4zIDMxLjgtMzUuMUw0ODUuNiAyMDcuMWMtMS45LTE5LjYtMTIuOC0zNy4zLTI5LjUtNDcuOEwyODAuOSA0OC4zYy0xNS43LTEwLTM1LjgtOS45LTUxLjUgLjFMNTYuMSAxNTkuMmMtMTYuNSAxMC42LTI3LjMgMjguMi0yOS4yIDQ3Ljd6Il0KICAgIH07CiAgICBmYUEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk3XSwgIjQxIiwgIk0yMjEuNSA1MS43QzIxNi42IDM5LjggMjA0LjkgMzIgMTkyIDMycy0yNC42IDcuOC0yOS41IDE5LjdjLTkzLjMgMjI0LTE0Ni43IDM1Mi0xNjAgMzg0LTYuOCAxNi4zIC45IDM1IDE3LjIgNDEuOHMzNS0uOSA0MS44LTE3LjJsMzEuOC03Ni4zIDE5Ny4zIDAgMzEuOCA3Ni4zYzYuOCAxNi4zIDI1LjUgMjQgNDEuOCAxNy4yczI0LTI1LjUgMTcuMi00MS44Yy0xMy4zLTMyLTY2LjctMTYwLTE2MC0zODR6TTI2NCAzMjBsLTE0NCAwIDcyLTE3Mi44IDcyIDE3Mi44eiJdCiAgICB9OwogICAgZmFQYXJhY2h1dGVCb3ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFyYWNodXRlLWJveCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGNkIiwgIk0xMjggMjI0QzEyOCAxNTIuMiAxNDQuMyA4OC40IDE2OS41IDQzLjQgMTk1LjEtMi40IDIyNi42LTI0IDI1Ni0yNHM2MC45IDIxLjYgODYuNSA2Ny40QzM2Ny43IDg4LjQgMzg0IDE1Mi4yIDM4NCAyMjRsLTEwNCAwIDAgOTYgOCAwYzkuMyAwIDE4LjEgMiAyNiA1LjVsMTE4LjQtMTAxLjUtLjUgMGMwLTc4LjQtMTcuNy0xNTAuNi00Ny42LTIwNC02LjEtMTEtMTIuOS0yMS4zLTIwLjMtMzAuOSA4Ni41IDM1LjkgMTQ3LjggMTE1LjEgMTQ3LjggMjE4LjkgMCA3LTMuMSAxMy43LTguNCAxOC4yTDM0Ny40IDM2MC4xYzMgNy40IDQuNiAxNS40IDQuNiAyMy45bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRjMC04LjQgMS42LTE2LjUgNC42LTIzLjlMOC40IDIyNi4yQzMuMSAyMjEuNyAwIDIxNSAwIDIwOCAwIDEwNC4yIDYxLjMgMjQuOSAxNDcuOC0xMC45IDE0MC41LTEuNCAxMzMuNyA5IDEyNy42IDIwIDk3LjcgNzMuNCA4MCAxNDUuNiA4MCAyMjRsLS41IDAgMTE4LjQgMTAxLjVjOC0zLjUgMTYuOC01LjUgMjYtNS41bDggMCAwLTk2LTEwNCAweiJdCiAgICB9OwogICAgZmFDYXJ0QXJyb3dEb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcnQtYXJyb3ctZG93biIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjE4IiwgIk0wIDhDMC01LjMgMTAuNy0xNiAyNC0xNmw0NS4zIDBjMjcuMSAwIDUwLjMgMTkuNCA1NS4xIDQ2bC40IDIgMTg3LjIgMCAwIDEwMi4xLTMxLTMxYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDcyIDcyYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDcyLTcyYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTMxIDMxIDAtMTAyLjEgMTc3LjQgMGMyMCAwIDM1LjEgMTguMiAzMS40IDM3LjlMNTM3LjggMjM1LjhjLTUuNyAzMC4zLTMyLjEgNTIuMi02Mi45IDUyLjJsLTMwMy42IDAgNS4xIDI4LjNjMi4xIDExLjQgMTIgMTkuNyAyMy42IDE5LjdMNDU2IDMzNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjU1LjkgMGMtMzQuOCAwLTY0LjYtMjQuOS03MC44LTU5LjFMNzcuMiAzOC42Yy0uNy0zLjgtNC02LjYtNy45LTYuNkwyNCAzMkMxMC43IDMyIDAgMjEuMyAwIDh6TTE2MCA0NjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMjI0IDBhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXQogICAgfTsKICAgIGZhQnJpZGdlQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJpZGdlLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGNhIiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsOCAwIDAgNjQtNDAgMCAwIDExMmMzNy42IDkuNCA2NCA0My4yIDY0IDgybDAgOTRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtNTMgNDMtOTYgOTYtOTYgNi40IDAgMTIuNyAuNiAxOC43IDEuOCAzNC43LTQ5LjUgOTIuMi04MS44IDE1Ny4zLTgxLjggMjguNiAwIDU1LjYgNi4yIDgwIDE3LjRsMC02NS40LTQwIDAgMC02NCA4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6TTQyNCA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek0yOTYgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNODggOTZsODAgMCAwIDY0LTgwIDAgMC02NHpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYUNsb3VkQXJyb3dVcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1hcnJvdy11cCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYyMzM4LCAiY2xvdWQtdXBsb2FkIiwgImNsb3VkLXVwbG9hZC1hbHQiXSwgImYwZWUiLCAiTTE0NCA0ODBjLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0IDAtNjMuNCA0MS0xMTcuMiA5Ny45LTEzNi41LTEuMy03LjctMS45LTE1LjUtMS45LTIzLjUgMC03OS41IDY0LjUtMTQ0IDE0NC0xNDQgNTUuNCAwIDEwMy41IDMxLjMgMTI3LjYgNzcuMSAxNC4yLTguMyAzMC44LTEzLjEgNDguNC0xMy4xIDUzIDAgOTYgNDMgOTYgOTYgMCAxNS43LTMuOCAzMC42LTEwLjUgNDMuNyA0NCAyMC4zIDc0LjUgNjQuNyA3NC41IDExNi4zIDAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0zMDQgMHpNMzA1IDE5MWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTcyIDcyYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzEtMzEgMCAxMDIuMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTAyLjEgMzEgMzFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC03Mi03MnoiXQogICAgfTsKICAgIGZhQ2xvdWRVcGxvYWQgPSBmYUNsb3VkQXJyb3dVcDsKICAgIGZhQ2xvdWRVcGxvYWRBbHQgPSBmYUNsb3VkQXJyb3dVcDsKICAgIGZhQXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTk0Nl0sICI0MCIsICJNMjU2IDY0QzE1MCA2NCA2NCAxNTAgNjQgMjU2czg2IDE5MiAxOTIgMTkyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyQzExNC42IDUxMiAwIDM5Ny40IDAgMjU2UzExNC42IDAgMjU2IDAgNTEyIDExNC42IDUxMiAyNTZsMCAzMmMwIDUzLTQzIDk2LTk2IDk2LTI5LjMgMC01NS42LTEzLjItNzMuMi0zMy45LTIyLjggMjEtNTMuMyAzMy45LTg2LjggMzMuOS03MC43IDAtMTI4LTU3LjMtMTI4LTEyOHM1Ny4zLTEyOCAxMjgtMTI4YzI3LjkgMCA1My43IDguOSA3NC43IDI0LjEgNS43LTUgMTMuMS04LjEgMjEuMy04LjEgMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyYzAtMTA2LTg2LTE5Mi0xOTItMTkyem02NCAxOTJhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAweiJdCiAgICB9OwogICAgZmFJbmRpYW5SdXBlZVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaW5kaWFuLXJ1cGVlLXNpZ24iLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsiaW5kaWFuLXJ1cGVlIiwgImluciJdLCAiZTFiYyIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwyNjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNzYuNyAwYzE3LjcgMTkuOCAzMC4xIDQ0LjYgMzQuNyA3Mmw0MiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00MiAwYy0xMC40IDYyLjItNjAuOCAxMTAuOS0xMjMuOCAxMTguOUwyNzQuNiA0MjJjMTQuNCAxMC4zIDE3LjcgMzAuMyA3LjQgNDQuNnMtMzAuMyAxNy43LTQ0LjYgNy40TDEzLjQgMzE0QzIuMSAzMDYtMi43IDI5MS41IDEuNSAyNzguMlMxOC4xIDI1NiAzMiAyNTZsODAgMGMzNS44IDAgNjYuMS0yMy41IDc2LjMtNTZMMjQgMjAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE2NC4zIDBjLTEwLjItMzIuNS00MC41LTU2LTc2LjMtNTZMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHoiXQogICAgfTsKICAgIGZhSW5kaWFuUnVwZWUgPSBmYUluZGlhblJ1cGVlU2lnbjsKICAgIGZhSW5yID0gZmFJbmRpYW5SdXBlZVNpZ247CiAgICBmYVRydWNrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY2NiwgOTk1MV0sICJmMGQxIiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIgNTAuNyAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDU1Ny4zIDE5MmMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDU3NiAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTMuMyAwYy0xMC40IDM2LjktNDQuNCA2NC04NC43IDY0cy03NC4yLTI3LjEtODQuNy02NGwtMTAyLjYgMGMtMTAuNCAzNi45LTQ0LjQgNjQtODQuNyA2NHMtNzQuMi0yNy4xLTg0LjctNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek01MTIgMjg4bDAtNTAuNy00NS4zLTQ1LjMtNTAuNyAwIDAgOTYgOTYgMHpNMTkyIDQyNGE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAwem0yMzIgNDBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdCiAgICB9OwogICAgZmFDaGFsa2JvYXJkVXNlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFsa2JvYXJkLXVzZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiY2hhbGtib2FyZC10ZWFjaGVyIl0sICJmNTFjIiwgIk0xMjggOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzUyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDAtOTYgMCAwLTE2YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE2LTEyOS4xIDBjMTAuOS0xOC44IDE3LjEtNDAuNyAxNy4xLTY0IDAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4LTUuNCAwLTEwLjggLjMtMTYgMWwwLTQ5ek0zMzMgNDQ4Yy01LjEtMjQuMi0xNi4zLTQ2LjEtMzIuMS02NEw2MDggMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yMTEgMHpNNjQgMjcyYTgwIDgwIDAgMSAxIDE2MCAwIDgwIDgwIDAgMSAxIC0xNjAgMHpNMCA0ODBjMC01MyA0My05NiA5Ni05Nmw5NiAwYzUzIDAgOTYgNDMgOTYgOTYgMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhQ2hhbGtib2FyZFRlYWNoZXIgPSBmYUNoYWxrYm9hcmRVc2VyOwogICAgZmFVc2VyQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1jaGVjayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNGZjIiwgIk0yODYgMzA0Yzk4LjUgMCAxNzguMyA3OS44IDE3OC4zIDE3OC4zIDAgMTYuNC0xMy4zIDI5LjctMjkuNyAyOS43TDc4IDUxMmMtMTYuNCAwLTI5LjctMTMuMy0yOS43LTI5LjcgMC05OC41IDc5LjgtMTc4LjMgMTc4LjMtMTc4LjNsNTkuNCAwek01ODUuNyAxMDUuOWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjNzMTMuMSAyMi44IDUuMyAzMy41TDUyMi4xIDI3NC45Yy00LjIgNS43LTEwLjcgOS40LTE3LjcgOS44cy0xNC0yLjItMTguOS03LjNsLTQ2LjQtNDhjLTkuMi05LjUtOS0yNC43IC42LTMzLjkgOS41LTkuMiAyNC43LTguOSAzMy45IC42bDI2LjUgMjcuNCA4NS42LTExNy43ek0yNTYuMyAyNDhhMTIwIDEyMCAwIDEgMSAwLTI0MCAxMjAgMTIwIDAgMSAxIDAgMjQweiJdCiAgICB9OwogICAgZmFVc2VyTmluamEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1uaW5qYSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyOTM5OV0sICJmNTA0IiwgIk0zNTIgMTI4YzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4LTU3LjIgMC0xMDUuNi0zNy41LTEyMi04OS4zLTEuMSAxLjMtMi4yIDIuNi0zLjUgMy44LTE1LjggMTUuOC0zOC44IDIwLjctNTMuNiAyMi4xLTguMSAuOC0xNC42LTUuNy0xMy44LTEzLjggMS40LTE0LjcgNi4zLTM3LjggMjIuMS01My42IDUuOC01LjggMTIuNi0xMC4xIDE5LjYtMTMuNC03LTMuMi0xMy44LTcuNi0xOS42LTEzLjQtMTUuOC0xNS44LTIwLjctMzguOC0yMi4xLTUzLjYtLjgtOC4xIDUuNy0xNC42IDEzLjgtMTMuOCAxNC43IDEuNCAzNy44IDYuMyA1My42IDIyLjEgNC44IDQuOCA4LjcgMTAuNCAxMS43IDE2LjEgMjEuMy00MS4yIDY0LjMtNjkuNCAxMTMuOC02OS40IDcwLjcgMCAxMjggNTcuMyAxMjggMTI4ek0xNDQgMTEyYzAgOC44IDcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkwxNjAgOTZjLTguOCAwLTE2IDcuMi0xNiAxNnptLTEuNCAyMTFsNjcgNTAuMmM4LjUgNi40IDIwLjMgNi40IDI4LjggMGw2Ny01MC4yYzYuNS00LjkgMTUuMi02LjIgMjIuNi0yLjggNjEuNCAyOC4yIDEwNC4xIDkwLjIgMTA0LjEgMTYyLjEgMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdMNDUuNyA1MTJjLTE2LjQgMC0yOS43LTEzLjMtMjkuNy0yOS43IDAtNzIgNDIuNy0xMzQgMTA0LjEtMTYyLjEgNy40LTMuNCAxNi4xLTIuMSAyMi42IDIuOHoiXQogICAgfTsKICAgIGZhUGxhbnRXaWx0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYW50LXdpbHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTVhYSIsICJNMzQ0LTMyYzY2LjMgMCAxMjAgNTMuNyAxMjAgMTIwbDAgNi4yYzI5LjMgMTIuMiA0OCA0MS4zIDQ4IDc2LjkgMCAyNy45LTI1LjMgNzQuOC02NiAxMTEuNy0zLjggMy41LTguOCA1LjMtMTQgNS4zcy0xMC4yLTEuOC0xNC01LjNjLTQwLjctMzYuOC02Ni04My43LTY2LTExMS43IDAtMzUuNiAxOC43LTY0LjcgNDgtNzYuOWwwLTYuMmMwLTMwLjktMjUuMS01Ni01Ni01NnMtNTYgMjUuMS01NiA1NmwwIDQyNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI5NmMwLTMwLjktMjUuMS01Ni01Ni01NnMtNTYgMjUuMS01NiA1NmwwIDM4LjJjMjkuMyAxMi4yIDQ4IDQxLjMgNDggNzYuOSAwIDI3LjktMjUuMyA3NC44LTY2IDExMS43LTMuOCAzLjUtOC44IDUuMy0xNCA1LjNzLTEwLjItMS44LTE0LTUuM0MyNS4zIDQwNS45IDAgMzU5IDAgMzMxLjEgMCAyOTUuNCAxOC43IDI2Ni40IDQ4IDI1NC4yTDQ4IDIxNmMwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMCAyMC4yIDAgMzkuMyA1IDU2IDEzLjhMMjI0IDg4YzAtNjYuMyA1My43LTEyMCAxMjAtMTIweiJdCiAgICB9OwogICAgZmFXZWlnaHRTY2FsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3ZWlnaHQtc2NhbGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsid2VpZ2h0Il0sICJmNDk2IiwgIk0xMTYuNiAxOTJjLTMtMTAuMS00LjYtMjAuOS00LjYtMzIgMC02MS45IDUwLjEtMTEyIDExMi0xMTJTMzM2IDk4LjEgMzM2IDE2MGMwIDExLjEtMS42IDIxLjktNC42IDMybC03MSAwIDI0LjYtNDQuM2M2LjQtMTEuNiAyLjMtMjYuMi05LjMtMzIuNnMtMjYuMi0yLjMtMzIuNiA5LjNsLTM3LjYgNjcuNy04OC44IDB6TTEyOCAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwQzI5My4zIDExLjkgMjYwIDAgMjI0IDBzLTY5LjMgMTEuOS05NiAzMnoiXQogICAgfTsKICAgIGZhV2VpZ2h0ID0gZmFXZWlnaHRTY2FsZTsKICAgIGZhQ2FyZXRSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXJldC1yaWdodCIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJmMGRhIiwgIk0yNDkuMyAyMzUuOGMxMC4yIDEyLjYgOS41IDMxLjEtMi4yIDQyLjhsLTEyOCAxMjhjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzY0LjUgMzk2LjkgNjQuNSAzODRsMC0yNTZjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnMyNS43LTIuMiAzNC45IDYuOWwxMjggMTI4IDIuMiAyLjR6Il0KICAgIH07CiAgICBmYUZsb3JpblNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmxvcmluLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTE4NCIsICJNMzE0LjcgMzJjLTM4LjggMC03My43IDIzLjMtODguNiA1OS4xTDE3MC43IDIyNCA2NCAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsODAgMC00NS4xIDEwOC4zYy01IDExLjktMTYuNiAxOS43LTI5LjUgMTkuN0wzMiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzcuMyAwYzM4LjggMCA3My43LTIzLjMgODguNi01OS4xTDIxMy4zIDI4OCAzMjAgMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC04MCAwIDQ1LjEtMTA4LjNjNS0xMS45IDE2LjYtMTkuNyAyOS41LTE5LjdMMzUyIDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zNy4zIDB6Il0KICAgIH07CiAgICBmYUJlbGwyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJlbGwiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyNzYsIDYxNjAyXSwgImYwZjMiLCAiTTIyNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMuMkMxMTkgNTAgNjQgMTE0LjYgNjQgMTkybDAgMjEuN2MwIDQ4LjEtMTYuNCA5NC44LTQ2LjQgMTMyLjRMNy44IDM1OC4zQzIuNyAzNjQuNiAwIDM3Mi40IDAgMzgwLjUgMCA0MDAuMSAxNS45IDQxNiAzNS41IDQxNmwzNzYuOSAwYzE5LjYgMCAzNS41LTE1LjkgMzUuNS0zNS41IDAtOC4xLTIuNy0xNS45LTcuOC0yMi4ybC05LjgtMTIuMkM0MDAuNCAzMDguNSAzODQgMjYxLjggMzg0IDIxMy43bDAtMjEuN2MwLTc3LjQtNTUtMTQyLTEyOC0xNTYuOGwwLTMuMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMTYyIDQ2NGM3LjEgMjcuNiAzMi4yIDQ4IDYyIDQ4czU0LjktMjAuNCA2Mi00OGwtMTI0IDB6Il0KICAgIH07CiAgICBmYUxhcmlTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxhcmktc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMWM4IiwgIk0xNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQxLjVjNy45LTEgMTUuOS0xLjUgMjQtMS41czE2LjEgLjUgMjQgMS41TDIxNiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNTRjNTguOSAyMy44IDEwMy4yIDc2IDExNi4yIDEzOS43IDMuNSAxNy4zLTcuNyAzNC4yLTI1IDM3LjdzLTM0LjItNy43LTM3LjctMjVjLTYuNy0zMy4yLTI2LjQtNjEuOC01My40LTgwLjJsMCA4MS44YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTAxLjhjLTcuOC0xLjUtMTUuOC0yLjItMjQtMi4ycy0xNi4yIC44LTI0IDIuMkwxNjggMjMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtODEuOGMtMzMuOCAyMy01NiA2MS45LTU2IDEwNS44IDAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4bDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNi45IDBDMTguNSAzNTAgMCAzMDUuMiAwIDI1NiAwIDE3NS40IDQ5LjYgMTA2LjQgMTIwIDc4bDAtNTRjMC0xMy4zIDEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYU1pbGxTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pbGwtc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMWVkIiwgIk0yOTctMjIuMmMxMi4zIDUgMTguMiAxOSAxMy4yIDMxLjNsLTI5IDcxLjNDMzM4LjggODUuMSAzODQgMTMzLjMgMzg0IDE5MmwwIDIwOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTIwOGMwLTI2LjUtMjEuNS00OC00OC00OC02LjQgMC0xMi41IDEuMi0xOCAzLjVsLTMwIDczLjggMCAxNzguN2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTIxLjItNTcuOCAxNDIuMmMtNSAxMi4zLTE5IDE4LjItMzEuMyAxMy4ycy0xOC4yLTE5LTEzLjItMzEuM0wxNjAgMjUxLjMgMTYwIDE5MmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OGwwIDIwOGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQxNy43IDAgNDAwTDAgMTEyYzAtMTcuNyAxNC4zLTMyIDMyLTMyIDEwLjkgMCAyMC41IDUuNCAyNi4zIDEzLjcgMTYtOC43IDM0LjMtMTMuNyA1My43LTEzLjcgMzEuMyAwIDU5LjcgMTIuOSA4MCAzMy42IDkuNi05LjggMjAuOS0xNy44IDMzLjUtMjMuNUwyNjUuOC05YzUtMTIuMyAxOS0xOC4yIDMxLjMtMTMuMnoiXQogICAgfTsKICAgIGZhUGVyc29uU25vd2JvYXJkaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1zbm93Ym9hcmRpbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5MzgsICJzbm93Ym9hcmRpbmciXSwgImY3Y2UiLCAiTTQyNC41IDE2YTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyek0xNjYuNCA0NS41YzEwLjItMTQuNCAzMC4yLTE3LjkgNDQuNi03LjdsMjcyIDE5MmMxNC40IDEwLjIgMTcuOSAzMC4yIDcuNyA0NC42cy0zMC4yIDE3LjktNDQuNiA3LjdsLTkyLjItNjUuMS02Mi4yIDUzLjMgMzIuMSAyNi43YzE4LjIgMTUuMiAyOC44IDM3LjcgMjguOCA2MS41bDAgODcuOCA3Ny41IDE1LjJjNi4yIDEuMiAxMi42IC45IDE4LjctLjhsNDEuMi0xMS44YzEyLjctMy42IDI2IDMuNyAyOS43IDE2LjVzLTMuNyAyNi0xNi41IDI5LjdsLTQxLjIgMTEuOGMtMTMuNCAzLjgtMjcuNCA0LjQtNDEuMSAxLjhMODcuMSA0NDMuM2MtMTcuMi0zLjQtMzMtMTEuOC00NS4zLTI0LjFMMTUuNSAzOTNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwyNi4yIDI2LjJjNS42IDUuNiAxMi44IDkuNCAyMC42IDExbDY0LjIgMTIuNiAwLTEyMy43YzAtMjcuNyAxMi01NCAzMi44LTcyLjJsNjktNjAuNC04OC4yLTYyLjNDMTU5LjYgODAgMTU2LjIgNjAgMTY2LjQgNDUuNXptNTguMSAzNzUuN2w2NCAxMi41IDAtNzUuM2MwLTQuNy0yLjEtOS4zLTUuOC0xMi4zbC01OC4yLTQ4LjUgMCAxMjMuNnoiXQogICAgfTsKICAgIGZhU25vd2JvYXJkaW5nID0gZmFQZXJzb25Tbm93Ym9hcmRpbmc7CiAgICBmYVR0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0dHkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsidGVsZXR5cGUiXSwgImYxZTQiLCAiTTQ1MC4yIDI2Ni44YzE1LjggNi41IDM0LjEgLjMgNDIuNi0xNC42bDIuNC00LjJjMjcuOS00OC45IDIzLjYtMTE4LjgtMzEuMy0xNTQuNS0xMjYtODItMjg5LjYtODItNDE1LjYgMC01NC45IDM1LjctNTkuMyAxMDUuNy0zMS4zIDE1NC41bDIuNCA0LjJjOC41IDE0LjkgMjYuNyAyMS4xIDQyLjYgMTQuNmw4MS45LTMzLjdjMTMuOS01LjcgMjIuNC0xOS45IDIwLjktMzQuOWwtNS4xLTUxYzYyLjUtMjEgMTMwLjgtMTkuOSAxOTIuNiAzLjNsLTQuOCA0Ny43Yy0xLjUgMTUgNyAyOS4yIDIwLjkgMzQuOWw4MS45IDMzLjd6TTMyIDM1MmEzMiAzMiAwIDEgMCA2NCAwIDMyIDMyIDAgMSAwIC02NCAwem05NiAwYTMyIDMyIDAgMSAwIDY0IDAgMzIgMzIgMCAxIDAgLTY0IDB6TTY0IDQxNmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTM1MiAzMmEzMiAzMiAwIDEgMCA2NCAwIDMyIDMyIDAgMSAwIC02NCAwek0yNTYgMzIwYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHptNjQgMzJhMzIgMzIgMCAxIDAgNjQgMCAzMiAzMiAwIDEgMCAtNjQgMHptMTI4LTMyYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHpNMTI4IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTkyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyeiJdCiAgICB9OwogICAgZmFUZWxldHlwZSA9IGZhVHR5OwogICAgZmFVc2Vyc1JlY3RhbmdsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2Vycy1yZWN0YW5nbGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU5NCIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptMjI0IDcyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyem0wIDE1MmM1MyAwIDk2IDQzIDk2IDk2bDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0YzAtNTMgNDMtOTYgOTYtOTZ6bTk2LTY0YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTE2OCAyNzIuM2MtMTUuMiAyMi44LTI0IDUwLjItMjQgNzkuN2wwIDI0YzAgOC40IDEuNCAxNi41IDQuMSAyNGwtNDYuOCAwQzg5LjYgNDAwIDgwIDM5MC40IDgwIDM3OC43TDgwIDM2OGMwLTUwLjMgMzguNy05MS42IDg4LTk1Ljd6TTQyNy45IDQwMGMyLjctNy41IDQuMS0xNS42IDQuMS0yNGwwLTI0YzAtMjkuNS04LjgtNTYuOS0yNC03OS43IDQ5LjMgNC4xIDg4IDQ1LjMgODggOTUuN2wwIDEwLjdjMCAxMS44LTkuNiAyMS4zLTIxLjMgMjEuM2wtNDYuOCAwek05NiAxOTJhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXQogICAgfTsKICAgIGZhTW9iaWxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vYmlsZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODI0MSwgIm1vYmlsZS1hbmRyb2lkIiwgIm1vYmlsZS1waG9uZSJdLCAiZjNjZSIsICJNODAgMEM0NC43IDAgMTYgMjguNyAxNiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw4MCAwem03MiA0MTZsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTW9iaWxlQW5kcm9pZCA9IGZhTW9iaWxlOwogICAgZmFNb2JpbGVQaG9uZSA9IGZhTW9iaWxlOwogICAgZmFBcnJvd3NUdXJuVG9Eb3RzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy10dXJuLXRvLWRvdHMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTRjMSIsICJNMjY1LjQtNi42YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMjg1LjMgNjQgMzUyIDY0YzUzIDAgOTYgNDMgOTYgOTZsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC02Ni43IDAgMjUuNCAyNS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC04MC04MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsODAtODB6bS04Mi43IDI3Mmw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDE2Mi43IDQwMCA5NiA0MDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0ODEuNyAwIDQ2NGwwLTMyYzAtNTMgNDMtOTYgOTYtOTZsNjYuNyAwLTI1LjQtMjUuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMHpNMzIwIDM2OGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTY0IDE2MGE2NCA2NCAwIDEgMSAwLTEyOCA2NCA2NCAwIDEgMSAwIDEyOHoiXQogICAgfTsKICAgIGZhRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbMTI4LCA1MTIsIFsxMDA2OSwgMTAwNzEsIDYxNzM4XSwgIjIxIiwgIk02NCA0MzJjMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDAtNDAtMTcuOS00MC00MGMwLTIyLjEgMTcuOS00MCA0MC00MHpNNjQgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIC42IDAgMS4xIDAgMS43bC0xNiAzMDRjLS45IDE3LTE1IDMwLjMtMzIgMzAuM1MzMyAzNzAuNyAzMiAzNTMuN0wxNiA0OS43YzAtLjYgMC0xLjEgMC0xLjcgMC0yNi41IDIxLjUtNDggNDgtNDh6Il0KICAgIH07CiAgICBmYUNodXJjaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaHVyY2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5OTYyXSwgImY1MWQiLCAiTTI4MC04YzAtMTMuMy0xMC43LTI0LTI0LTI0UzIzMi0yMS4zIDIzMi04bDAgMjQtMzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAwIDAgNDgtOTguNiA2NS44QzEyMCAxODYuNyAxMTIgMjAxLjYgMTEyIDIxNy43bDAgMzguMy03OS44IDQ1LjZDMTIuMyAzMTMgMCAzMzQuMiAwIDM1Ny4xTDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0IDc0LjcgMCA4NS40IDAgMzIwIDBsNjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTkwLjljMC0yMy0xMi4zLTQ0LjItMzIuMi01NS42TDQwMCAyNTYgNDAwIDIxNy43YzAtMTYtOC0zMS0yMS40LTM5LjlsLTk4LjYtNjUuOCAwLTQ4IDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMyIDAgMC0yNHpNMjU2IDMyMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDgwLTEyOCAwIDAtODBjMC0zNS4zIDI4LjctNjQgNjQtNjR6Il0KICAgIH07CiAgICBmYVRvZ2dsZU9mZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b2dnbGUtb2ZmIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyMDQiLCAiTTM4NCAxMjhjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhTNDU0LjcgMzg0IDM4NCAzODRsLTE5MiAwYy03MC43IDAtMTI4LTU3LjMtMTI4LTEyOHM1Ny4zLTEyOCAxMjgtMTI4bDE5MiAwek01NzYgMjU2YzAtMTA2LTg2LTE5Mi0xOTItMTkyTDE5MiA2NEM4NiA2NCAwIDE1MCAwIDI1NlM4NiA0NDggMTkyIDQ0OGwxOTIgMGMxMDYgMCAxOTItODYgMTkyLTE5MnpNMTkyIDMzNmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHoiXQogICAgfTsKICAgIGZhU2hvZVByaW50cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaG9lLXByaW50cyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTRiIiwgIk0yOTYgMTkyYy0yMS4xLTEyLjEtNDIuMy0yNC4yLTcyLTI5LjNsMC0xNDAuM0MyNTcuNyAxMyAzMTEuNCAwIDM1MiAwIDQ0OCAwIDU3NiA0OCA1NzYgMTI4cy0xMTkuNiA5Ni0xNzYgOTZjLTQ4IDAtNzYtMTYtMTA0LTMyek0xMjggMzJsNDggMCAwIDEyOC00OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0ek0yMzIgMzIwYzI4LTE2IDU2LTMyIDEwNC0zMiA1Ni40IDAgMTc2IDE2IDE3NiA5NlMzODQgNTEyIDI4OCA1MTJjLTQwLjUgMC05NC4zLTEzLTEyOC0yMi40bDAtMTQwLjNjMjkuNy01LjIgNTAuOS0xNy4zIDcyLTI5LjR6TTY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGw0OCAwIDAgMTI4LTQ4IDB6Il0KICAgIH07CiAgICBmYUZpbGVDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGViIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFXYWxsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2FsbGV0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1NTUiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xOTJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNzIgMTI4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFM1OC43IDgwIDcyIDgwbDM4NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDY0IDMyek00MTYgMjU2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhTWVzc2FnZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWVzc2FnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjb21tZW50LWFsdCJdLCAiZjI3YSIsICJNMCAzNTJMMCAxMjhDMCA3NSA0MyAzMiA5NiAzMmwzMjAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjI0YzAgNTMtNDMgOTYtOTYgOTZsLTEyMCAwYy01LjIgMC0xMC4yIDEuNy0xNC40IDQuOEwxNjYuNCA1MzkuMmMtNC4yIDMuMS05LjIgNC44LTE0LjQgNC44LTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNzItMzIgMGMtNTMgMC05Ni00My05Ni05NnoiXQogICAgfTsKICAgIGZhQ29tbWVudEFsdDIgPSBmYU1lc3NhZ2UyOwogICAgZmFUcm9waHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJvcGh5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTQyXSwgImYwOTEiLCAiTTE0NC4zIDBsMjI0IDBjMjYuNSAwIDQ4LjEgMjEuOCA0Ny4xIDQ4LjItLjIgNS4zLS40IDEwLjYtLjcgMTUuOGw0OS42IDBjMjYuMSAwIDQ5LjEgMjEuNiA0Ny4xIDQ5LjgtNy41IDEwMy43LTYwLjUgMTYwLjctMTE4IDE5MC41LTE1LjggOC4yLTMxLjkgMTQuMy00Ny4yIDE4LjgtMjAuMiAyOC42LTQxLjIgNDMuNy01Ny45IDUxLjhsMCA3My4xIDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDAgMC03My4xYy0xNi03LjctMzUuOS0yMi01NS4zLTQ4LjMtMTguNC00LjgtMzguNC0xMi4xLTU3LjktMjMuMS01NC4xLTMwLjMtMTAyLjktODcuNC0xMDkuOS0xODkuOS0xLjktMjguMSAyMS00OS43IDQ3LjEtNDkuN2w0OS42IDBjLS4zLTUuMi0uNS0xMC40LS43LTE1LjgtMS0yNi41IDIwLjYtNDguMiA0Ny4xLTQ4LjJ6TTEwMS41IDExMmwtNTIuNCAwYzYuMiA4NC43IDQ1LjEgMTI3LjEgODUuMiAxNDkuNi0xNC40LTM3LjMtMjYuMy04Ni0zMi44LTE0OS42ek0zODAgMjU2LjhjNDAuNS0yMy44IDc3LjEtNjYuMSA4My4zLTE0NC44TDQxMSAxMTJjLTYuMiA2MC45LTE3LjQgMTA4LjItMzEgMTQ0Ljh6Il0KICAgIH07CiAgICBmYUZhY2VEaXp6eTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1kaXp6eSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJkaXp6eSJdLCAiZjU2NyIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTEzNC4xIDE1My45bDI1LjkgMjUuOSAyNS45LTI1LjljNy44LTcuOCAyMC41LTcuOCAyOC4zIDBzNy44IDIwLjUgMCAyOC4zbC0yNS45IDI1LjkgMjUuOSAyNS45YzcuOCA3LjggNy44IDIwLjUgMCAyOC4zcy0yMC41IDcuOC0yOC4zIDBsLTI1LjktMjUuOS0yNS45IDI1LjljLTcuOCA3LjgtMjAuNSA3LjgtMjguMyAwcy03LjgtMjAuNSAwLTI4LjNsMjUuOS0yNS45LTI1LjktMjUuOWMtNy44LTcuOC03LjgtMjAuNSAwLTI4LjNzMjAuNS03LjggMjguMyAwem0xOTIgMGwyNS45IDI1LjkgMjUuOS0yNS45YzcuOC03LjggMjAuNS03LjggMjguMyAwczcuOCAyMC41IDAgMjguM2wtMjUuOSAyNS45IDI1LjkgMjUuOWM3LjggNy44IDcuOCAyMC41IDAgMjguM3MtMjAuNSA3LjgtMjguMyAwbC0yNS45LTI1LjktMjUuOSAyNS45Yy03LjggNy44LTIwLjUgNy44LTI4LjMgMHMtNy44LTIwLjUgMC0yOC4zbDI1LjktMjUuOS0yNS45LTI1LjljLTcuOC03LjgtNy44LTIwLjUgMC0yOC4zczIwLjUtNy44IDI4LjMgMHpNMjU2IDMwNGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHoiXQogICAgfTsKICAgIGZhRGl6enkyID0gZmFGYWNlRGl6enkyOwogICAgZmFCYWN0ZXJpYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWN0ZXJpYSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMDU5IiwgIk0yNTYtMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxMWM4LjYgMi4yIDE2LjkgNS42IDI0LjggMTAuM0wzMTEgN2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTYuMyA2LjNjNC42IDcuOCA4IDE2LjIgMTAuMyAyNC44bDExIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTExIDBjLTIuMiA4LjYtNS42IDE2LjktMTAuMyAyNC44TDM0NSAxNTFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNC4xLTQuMS0zMC4xIDMwLjEgNC4xIDQuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00LjEtNC4xYy0xMCAxMC0yMCAyMC0zMC4xIDMwLjFMMjE3IDI3OWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC02LjMtNi4zYy03LjggNC42LTE2LjIgOC0yNC44IDEwLjNsMCAxMWMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTExYy04LjYtMi4yLTE2LjktNS42LTI0LjgtMTAuM0w3MyAzMTNjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNi4zLTYuM2MtNC42LTcuOC04LTE2LjItMTAuMy0yNC44bC0xMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDExIDBjMi4yLTguNiA1LjYtMTYuOSAxMC4zLTI0LjhMMzkgMTY5Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNC4xIDQuMWMxMC0xMCAyMC0yMCAzMC4xLTMwLjFMMTAzIDEwNWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQuMSA0LjEgMzAuMS0zMC4xLTQuMS00LjFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45UzE5MS42LTIuMyAyMDEgN2w2LjMgNi4zYzcuOC00LjYgMTYuMi04IDI0LjgtMTAuM2wwLTExYzAtMTMuMyAxMC43LTI0IDI0LTI0ek0xMjggMjU2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMjQwIDE0NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0yOTYgNDBsMCAxMWM4LjYgMi4yIDE2LjkgNS42IDI0LjggMTAuM0w1NjcgMTk5YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNi4zIDYuM2M0LjYgNy44IDggMTYuMiAxMC4zIDI0LjhsMTEgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTEgMGMtMi4yIDguNi01LjYgMTYuOS0xMC4zIDI0LjhMNjAxIDM0M2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00LjEtNC4xLTMwLjEgMzAuMSA0LjEgNC4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQuMS00LjFjLTEwIDEwLTIwIDIwLTMwLjEgMzAuMUw0NzMgNDcxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTYuMy02LjNjLTcuOCA0LjYtMTYuMiA4LTI0LjggMTAuM2wwIDExYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTFjLTguNi0yLjItMTYuOS01LjYtMjQuOC0xMC4zTDMyOSA1MDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNi4zLTYuM2MtNC42LTcuOC04LTE2LjItMTAuMy0yNC44bC0xMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDExIDBjMi4yLTguNiA1LjYtMTYuOSAxMC4zLTI0LjhMMjk1IDM2MWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQuMSA0LjFjMTAtMTAgMjAtMjAgMzAuMS0zMC4xTDM1OSAyOTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0LjEgNC4xIDMwLjEtMzAuMS00LjEtNC4xYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNi4zIDYuM2M3LjgtNC42IDE2LjItOCAyNC44LTEwLjNsMC0xMWMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0ek00NDggMzg0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYUVhckRlYWYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWFyLWRlYWYiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZGVhZiIsICJkZWFmbmVzcyIsICJoYXJkLW9mLWhlYXJpbmciXSwgImYyYTQiLCAiTTUwMi42IDU0LjZsLTQwIDQwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w0MC00MGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zem0tMzIwIDMyMGwtMTI4IDEyOGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTI4LTEyOGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zek0yNDAgMTI4Yy01Ny42IDAtMTA1LjEgNDMuNi0xMTEuMyA5OS41LTEuOSAxNy42LTE3LjggMzAuMi0zNS4zIDI4LjNzLTMwLjItMTcuOC0yOC4zLTM1LjNjOS43LTg4IDg0LjMtMTU2LjUgMTc0LjktMTU2LjUgOTcuMiAwIDE3NiA3OC44IDE3NiAxNzYgMCA0Ni0xNy43IDg3LjktNDYuNiAxMTkuMy0xMiAxMy0xNy40IDI0LjgtMTcuNCAzNC43bDAgNi4xYzAgNjEuOS01MC4xIDExMi0xMTIgMTEyLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02LjFjMC0zMi45IDE3LjQtNTkuNiAzNC40LTc4IDE4LjQtMjAgMjkuNi00Ni42IDI5LjYtNzUuOSAwLTYxLjktNTAuMS0xMTItMTEyLTExMnptMCA4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhRGVhZiA9IGZhRWFyRGVhZjsKICAgIGZhRGVhZm5lc3MgPSBmYUVhckRlYWY7CiAgICBmYUhhcmRPZkhlYXJpbmcgPSBmYUVhckRlYWY7CiAgICBmYVBlb3BsZUFycm93cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW9wbGUtYXJyb3dzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInBlb3BsZS1hcnJvd3MtbGVmdC1yaWdodCJdLCAiZTA2OCIsICJNMzIgNjRBNjQgNjQgMCAxIDEgMTYwIDY0IDY0IDY0IDAgMSAxIDMyIDY0ek0wIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwYzMuMiAwIDYuNCAuMiA5LjUgLjdMOTMuMSAyMDUuMUM2NSAyMzMuMiA2NSAyNzguOCA5My4xIDMwNi45bDU2IDU2YzMuNCAzLjQgNyA2LjQgMTAuOSA5bDAgOTIuMWMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xMjAuNkMxMi45IDMzMi40IDAgMzExLjcgMCAyODhsMC02NHpNMzUyIDY0YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHptNjYuOSAxNDEuMWwtNDQuNC00NC40YzMuMS0uNSA2LjMtLjcgOS41LS43bDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA2NGMwIDIzLjctMTIuOSA0NC40LTMyIDU1LjRMNDgwIDQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05Mi4xYzMuOS0yLjYgNy41LTUuNiAxMC45LTlsNTYtNTZjMjguMS0yOC4xIDI4LjEtNzMuNyAwLTEwMS44ek0zMDIuOCAxNzcuOGM5LTMuNyAxOS4zLTEuNyAyNi4yIDUuMmw1NiA1NmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNTYgNTZjLTYuOSA2LjktMTcuMiA4LjktMjYuMiA1LjJTMjg4IDMyMS43IDI4OCAzMTJsMC0yNC02NCAwIDAgMjRjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtNTYtNTZjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDU2LTU2YzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJTMjI0IDE5MC4zIDIyNCAyMDBsMCAyNCA2NCAwIDAtMjRjMC05LjcgNS44LTE4LjUgMTQuOC0yMi4yeiJdCiAgICB9OwogICAgZmFQZW9wbGVBcnJvd3NMZWZ0UmlnaHQgPSBmYVBlb3BsZUFycm93czsKICAgIGZhSGFuZHNDbGFwcGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kcy1jbGFwcGluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMWE4IiwgIk0zNDQgOGwwIDY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRTMzQ0LTUuMyAzNDQgOHpNMjIwIDEwLjdsMzIgNDhjNy40IDExIDQuNCAyNS45LTYuNyAzMy4zcy0yNS45IDQuNC0zMy4zLTYuN2wtMzItNDhjLTcuNC0xMS00LjQtMjUuOSA2LjctMzMuM1MyMTIuNi0uMyAyMjAgMTAuN3pNMTM1IDExOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMEwyOTIuNyAyNDIuN2MxMC4xIDEwLjEgMjcuMyAyLjkgMjcuMy0xMS4zbDAtMzkuNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTUzLjZjMCA1Ny4xLTMwIDExMC03OC45IDEzOS40LTY0IDM4LjQtMTQ1LjggMjguMy0xOTguNS0yNC40TDcgMzYxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNTMgNTNjNi4xIDYuMSAxNiA2LjEgMjIuMSAwczYuMS0xNiAwLTIyLjFMMjMgMjY1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsOTMgOTNjNi4xIDYuMSAxNiA2LjEgMjIuMSAwczYuMS0xNiAwLTIyLjFMNTUgMTg1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMTE3IDExN2M2LjEgNi4xIDE2IDYuMSAyMi4xIDBzNi4xLTE2IDAtMjIuMWwtOTMtOTNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45ek00MzMuMSA0ODQuOWMtMjQuMiAxNC41LTUwLjkgMjIuMS03Ny43IDIzLjEgNDguMS0zOS42IDc2LjYtOTkgNzYuNi0xNjIuNGwwLTk4LjFjOC4yLS4xIDE2LTYuNCAxNi0xNmwwLTM5LjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE1My42YzAgNTcuMS0zMCAxMTAtNzguOSAxMzkuNHpNNDUzLjMgNGMxMSA3LjQgMTQgMjIuMyA2LjcgMzMuM2wtMzIgNDhjLTcuNCAxMS0yMi4zIDE0LTMzLjMgNi43cy0xNC0yMi4zLTYuNy0zMy4zbDMyLTQ4YzcuNC0xMSAyMi4zLTE0IDMzLjMtNi43eiJdCiAgICB9OwogICAgZmFWaXJ1c0NvdmlkU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlydXMtY292aWQtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRhOSIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtODMtODMgMTEuNC0xMS40YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTExLjMgMTEuMy0yMy44LTIzLjhjMTcuOS0yMy41IDI5LjktNTEuNyAzNC4xLTgyLjNsMzMuNiAwIDAgMTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTgwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTYtMzMuNiAwYy00LjItMzAuNy0xNi4zLTU4LjgtMzQuMS04Mi4zbDIzLjgtMjMuOCAxMS4zIDExLjNjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQ0MC43IDQ2LjdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTEuMyAxMS4zLTIzLjggMjMuOEMzNzAuOCA5Ny45IDM0Mi43IDg1LjggMzEyIDgxLjZsMC0zMy42IDE2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMzQxLjMgMCAzMjggMEwyNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNiAwIDAgMzMuNmMtMzAuNyA0LjItNTguOCAxNi4zLTgyLjMgMzQuMUwxNTcuOSA5MiAxNjkuMiA4MC42YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMMTIzLjkgNTguMSA0MS0yNC45ek0xMTMuNiAyMzJsLTMzLjYgMCAwLTE2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2IDMzLjYgMGM0LjIgMzAuNyAxNi4zIDU4LjggMzQuMSA4Mi4zbC0yMy44IDIzLjgtMTEuMy0xMS4zYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDU2LjYgNTYuNmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTExLjMtMTEuMyAyMy44LTIzLjhjMjMuNSAxNy45IDUxLjcgMjkuOSA4Mi4zIDM0LjFsMCAzMy42LTE2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTYgMCAwLTMzLjZjMTMuNC0xLjggMjYuNC01LjIgMzguNy05LjlMMTIzLjUgMTkzLjNjLTQuNyAxMi4zLTggMjUuMi05LjkgMzguN3oiXQogICAgfTsKICAgIGZhQ2FsZW5kYXJEYXlzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1kYXlzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhbGVuZGFyLWFsdCJdLCAiZjA3MyIsICJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek02NCAyNDBsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTI4IDBsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTQ0LTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTY0IDM2OGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNDQtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMTEyIDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6Il0KICAgIH07CiAgICBmYUNhbGVuZGFyQWx0MiA9IGZhQ2FsZW5kYXJEYXlzMjsKICAgIGZhRGlhbW9uZFR1cm5SaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWFtb25kLXR1cm4tcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZGlyZWN0aW9ucyJdLCAiZjVlYiIsICJNMjE1IDE3TDE3IDIxNUM2LjEgMjI1LjkgMCAyNDAuNiAwIDI1NnM2LjEgMzAuMSAxNyA0MUwyMTUgNDk1YzEwLjkgMTAuOSAyNS42IDE3IDQxIDE3czMwLjEtNi4xIDQxLTE3TDQ5NSAyOTdjMTAuOS0xMC45IDE3LTI1LjYgMTctNDFzLTYuMS0zMC4xLTE3LTQxTDI5NyAxN0MyODYuMSA2LjEgMjcxLjQgMCAyNTYgMHMtMzAuMSA2LjEtNDEgMTd6TTM4NSAyNTdsLTcyIDcyYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTc4LjEgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQwYzAtMzkuOCAzMi4yLTcyIDcyLTcybDc4LjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45eiJdCiAgICB9OwogICAgZmFEaXJlY3Rpb25zID0gZmFEaWFtb25kVHVyblJpZ2h0OwogICAgZmFIYW5kUG9pbnRVcDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wb2ludC11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk3NTddLCAiZjBhNiIsICJNMzIgMzJDMzIgMTQuMyA0Ni4zIDAgNjQgMFM5NiAxNC4zIDk2IDMybDAgMjA4LTY0IDAgMC0yMDh6TTIyNCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6bS02NC02NGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE2MCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHptLTk2IDg4bDAtLjZjOS40IDUuNCAyMC4zIDguNiAzMiA4LjYgMTMuMiAwIDI1LjQtNCAzNS42LTEwLjggOC43IDI0LjkgMzIuNSA0Mi44IDYwLjQgNDIuOCAxMS43IDAgMjIuNi0zLjEgMzItOC42bDAgOC42YzAgODguNC03MS42IDE2MC0xNjAgMTYwbC02MS43IDBjLTQyLjQgMC04My4xLTE2LjktMTEzLjEtNDYuOUwzNy41IDQ1My41QzEzLjUgNDI5LjUgMCAzOTYuOSAwIDM2M2wwLTI3YzAtMzUuMyAyOC43LTY0IDY0LTY0bDg4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDBsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsNTYgMGMzOS44IDAgNzItMzIuMiA3Mi03MnoiXQogICAgfTsKICAgIGZhQmV6aWVyQ3VydmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmV6aWVyLWN1cnZlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY1NWIiLCAiTTI5NiAxMzZsMC00OCA0OCAwIDAgNDgtNDggMHpNMjg4IDMyYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDQtMTE4LjQgMEMxMTEuMiA2Mi43IDg5LjMgNDggNjQgNDggMjguNyA0OCAwIDc2LjcgMCAxMTJzMjguNyA2NCA2NCA2NGMyNS4zIDAgNDcuMi0xNC43IDU3LjYtMzZsNjYuOSAwYy01OC45IDM5LjYtOTguOSAxMDUtMTA0IDE4MEw4MCAzMjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zLjMgMGM1LjktNjcgNDguNS0xMjMuNCAxMDcuNS0xNDkuMSA4LjYgMTIuNyAyMy4yIDIxLjEgMzkuOCAyMS4xbDY0IDBjMTYuNiAwIDMxLjEtOC40IDM5LjgtMjEuMSA1OSAyNS43IDEwMS42IDgyLjEgMTA3LjUgMTQ5LjFsLTMuMyAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtNC41IDBjLTUtNzUtNDUuMS0xNDAuNC0xMDQtMTgwbDY2LjkgMGMxMC40IDIxLjMgMzIuMyAzNiA1Ny42IDM2IDM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0Yy0yNS4zIDAtNDcuMiAxNC43LTU3LjYgMzZsLTExOC40IDAgMC00YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwek04OCAzNzZsNDggMCAwIDQ4LTQ4IDAgMC00OHptNDE2IDQ4bDAtNDggNDggMCAwIDQ4LTQ4IDB6Il0KICAgIH07CiAgICBmYVBlcnNvbkhhbGZEcmVzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24taGFsZi1kcmVzcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNTQ4IiwgIk0xNDMuNC0zLjljOS43LTE2LjggMjcuOC0yOC4xIDQ4LjYtMjguMSAzMC45IDAgNTYgMjUuMSA1NiA1NiAwIDI1LjQtMTYuOSA0Ni44LTQwIDUzLjdsMCAwYy01LjEgMS41LTEwLjQgMi4zLTE2IDIuMy0zMC45IDAtNTYtMjUuMS01Ni01NmwwIDBjMC0xMC4xIDIuNy0xOS43IDcuNC0yNy45ek0zMTguMyAyOTkuMUwyNzIgMjM2LjcgMjcyIDUxMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2MCAwLS40IDAtMjM4LjZjMzYuMiA0LjQgNjkuMiAyMy40IDkxLjIgNTNsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42ek0xNzYgMTEzbDAgMzk5YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTI4LTI1LjggMGMtMTAuOSAwLTE4LjYtMTAuNy0xNS4yLTIxLjFsNDMtMTI5LTQ4LjMgNjUuMWMtMTAuNSAxNC4yLTMwLjYgMTcuMi00NC44IDYuNnMtMTcuMi0zMC42LTYuNi00NC44bDcwLjUtOTVjMjItMjkuNiA1NS4xLTQ4LjYgOTEuMi01M3oiXQogICAgfTsKICAgIGZhU3F1YXJlUG9sbEhvcml6b250YWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXBvbGwtaG9yaXpvbnRhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJwb2xsLWgiXSwgImY2ODIiLCAiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0yNTYgMTUyYzAgMTMuMy0xMC43IDI0LTI0IDI0bC0xMTIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHptNzIgODBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTIwOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDIwOCAwek0xOTIgMzYwYzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjR6Il0KICAgIH07CiAgICBmYVBvbGxIID0gZmFTcXVhcmVQb2xsSG9yaXpvbnRhbDsKICAgIGZhU2Nob29sQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2Nob29sLWNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTZkIiwgIk02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI3NiAwYy0xMC41LTE0LjYtMTktMzAuNy0yNS4xLTQ4bC05MC45IDAgMC04OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwYzEgMCAxLjkgMCAyLjkgLjEgMjYuMy03NC42IDk3LjUtMTI4LjEgMTgxLjEtMTI4LjEgMjguNiAwIDU1LjYgNi4yIDgwIDE3LjRsMC0zMy40YzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwLTEyNy45LTExNS4xYy0xOC4zLTE2LjQtNDYtMTYuNC02NC4yIDBMMTI4IDEyOCA2NCAxMjh6bTY0IDI0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyek0xMTIgMjU2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZ6TTI4OCAxMjhhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43bC0zNi43IDM2LjcgMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42eiJdCiAgICB9OwogICAgZmFIYW5kTGl6YXJkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWxpemFyZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjU4IiwgIk0wIDExMkMwIDg1LjUgMjEuNSA2NCA0OCA2NGwyMzguNSAwYzM2LjggMCA3MS4yIDE4IDkyLjEgNDguMmwxMTMuNSAxNjRjMTMgMTguNyAxOS45IDQxIDE5LjkgNjMuOGwwIDc2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEzLjgtNzguMS01MC4yLTE2MS45IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhsMTI4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhMNDggMTYwYy0yNi41IDAtNDgtMjEuNS00OC00OHoiXQogICAgfTsKICAgIGZhQ2hhbGtib2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFsa2JvYXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImJsYWNrYm9hcmQiXSwgImY1MWIiLCAiTTk2IDY0Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw5NiA2NHpNNDgwIDM4NGwtNjQgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTE2MCAwIDAtMjU2IDM4NCAwIDAgMjU2eiJdCiAgICB9OwogICAgZmFCbGFja2JvYXJkID0gZmFDaGFsa2JvYXJkOwogICAgZmFVcFJpZ2h0RnJvbVNxdWFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1cC1yaWdodC1mcm9tLXNxdWFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJleHRlcm5hbC1saW5rLWFsdCJdLCAiZjM1ZCIsICJNMjkwLjQgMTkuOEMyOTUuNCA3LjggMzA3LjEgMCAzMjAgMEw0ODAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE2MGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOUw0MDAgMTU3LjMgMjQ2LjYgMzEwLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDM1NC43IDExMiAyOTcuNCA1NC42Yy05LjItOS4yLTExLjktMjIuOS02LjktMzQuOXpNMCAxNzZjMC00NC4yIDM1LjgtODAgODAtODBsODAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtODAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjU2YzAgOC44IDcuMiAxNiAxNiAxNmwyNTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgODBjMCA0NC4yLTM1LjggODAtODAgODBMODAgNTEyYy00NC4yIDAtODAtMzUuOC04MC04MEwwIDE3NnoiXQogICAgfTsKICAgIGZhRXh0ZXJuYWxMaW5rQWx0ID0gZmFVcFJpZ2h0RnJvbVNxdWFyZTsKICAgIGZhU3F1YXJlRnVsbDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWZ1bGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg5OTcsIDEyODk5OCwgMTI4OTk5LCAxMjllMywgMTI5MDAxLCAxMjkwMDIsIDEyOTAwMywgMTEwMzUsIDExMDM2XSwgImY0NWMiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDQ0OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHoiXQogICAgfTsKICAgIGZhQ2xvdmVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3ZlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMTM5IiwgIk0zMTAuNCAxNkMzNDYuNiAxNiAzNzYgNDUuNCAzNzYgODEuN2wwIDUuMmMwIDExLjItMi43IDIyLjMtNy44IDMyLjJsLTIuMyA0LjItMjAuMSAzMy41Yy0xLjEgMS45LTEuMiAzLjQtMS4xIDQuNSAuMiAxLjMgLjkgMi43IDIuMSAzLjlzMi42IDEuOSAzLjkgMi4xYzEuMSAuMiAyLjYgLjEgNC41LTEuMWwzMy41LTIwLjEgNC4yLTIuM2MxMC01LjEgMjEtNy44IDMyLjItNy44bDUuMiAwYzM2LjIgMCA2NS42IDI5LjQgNjUuNiA2NS43IDAgMTcuNC02LjkgMzQuMS0xOS4yIDQ2LjRsLTEuMyAxLjNjLTMuNyAzLjctMy43IDkuNiAwIDEzLjNsMS4zIDEuM2MxMi4zIDEyLjMgMTkuMiAyOSAxOS4yIDQ2LjQgMCAzNi4yLTI5LjQgNjUuNi02NS42IDY1LjZsLTUuMiAwYy0xMi44IDAtMjUuNS0zLjUtMzYuNS0xMC4xbC0zMy41LTIwLjFjLTEuOS0xLjEtMy40LTEuMi00LjUtMS4xLTEuMyAuMi0yLjcgLjktMy45IDIuMXMtMS45IDIuNi0yLjEgMy45Yy0uMiAxLjEtLjEgMi42IDEuMSA0LjVsMjAuMSAzMy41YzYuNiAxMSAxMC4xIDIzLjYgMTAuMSAzNi41bDAgNS4yYzAgMzYuMi0yOS40IDY1LjYtNjUuNiA2NS42LTE3LjQgMC0zNC4xLTYuOS00Ni40LTE5LjJsLTEuMy0xLjNjLTMuNy0zLjctOS42LTMuNy0xMy4zIDBsLTEuMyAxLjNjLTEyLjMgMTIuMy0yOSAxOS4yLTQ2LjQgMTkuMi0zNi4yIDAtNjUuNi0yOS40LTY1LjctNjUuNmwwLTUuMmMwLTEyLjggMy41LTI1LjUgMTAuMS0zNi41bDIwLjEtMzMuNWMxLjEtMS45IDEuMi0zLjQgMS4xLTQuNS0uMi0xLjMtLjktMi43LTIuMS0zLjlzLTIuNi0xLjktMy45LTIuMWMtLjUtLjEtMS4yLS4xLTEuOSAwbC0yLjUgMS0zMy41IDIwLjFjLTExIDYuNi0yMy42IDEwLjEtMzYuNSAxMC4xbC01LjIgMEM0NS40IDM3NiAxNiAzNDYuNiAxNiAzMTAuNCAxNiAyOTMgMjIuOSAyNzYuMyAzNS4yIDI2NGwxLjMtMS4zIDEuMi0xLjVjMi4xLTMuMSAyLjEtNy4yIDAtMTAuM2wtMS4yLTEuNS0xLjMtMS4zQzIyLjkgMjM1LjggMTYgMjE5LjEgMTYgMjAxLjcgMTYgMTY1LjQgNDUuNCAxMzYgODEuNyAxMzZsNS4yIDBjMTIuOCAwIDI1LjUgMy41IDM2LjUgMTAuMWwzMy41IDIwLjEgMi41IDFjLjcgLjEgMS40IC4xIDEuOSAuMSAxLjMtLjIgMi43LS45IDMuOS0yLjFzMS45LTIuNiAyLjEtMy45Yy4xLS41IC4xLTEuMi0uMS0xLjlsLTEtMi41LTIwLjEtMzMuNWMtNi42LTExLTEwLjEtMjMuNi0xMC4xLTM2LjVsMC01LjJjMC0zNi4yIDI5LjQtNjUuNyA2NS43LTY1LjcgMTcuNCAwIDM0LjEgNi45IDQ2LjQgMTkuMmwxLjMgMS4zYzMuNyAzLjYgOS42IDMuNyAxMy4zIDBsMS4zLTEuMyA0LjgtNC40QzI4MC41IDIxLjMgMjk1LjEgMTYgMzEwLjQgMTZ6Il0KICAgIH07CiAgICBmYVRlZXRoT3BlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZWV0aC1vcGVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2MmYiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZsMCA4MGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTgwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem0wIDI3MmMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTQ4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMwNHptODAtMTYwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0yNHptMTI4IDBjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0ek04MCAxMTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0yNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMzIwIDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0yNHpNNDggMzg0bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJ6bTE0NCA0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZsNjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDI2LjUtMjEuNSA0OC00OCA0OHptMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTZjMC04LjggNy4yLTE2IDE2LTE2bDY0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCAyNi41LTIxLjUgNDgtNDggNDh6bTExMi0xNmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnoiXQogICAgfTsKICAgIGZhQmFyc1N0YWdnZXJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXJzLXN0YWdnZXJlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJyZW9yZGVyIiwgInN0cmVhbSJdLCAiZjU1MCIsICJNMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NGwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAxMjhDMTQuMyAxMjggMCAxMTMuNyAwIDk2ek02NCAyNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMOTYgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDQ4IDQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6Il0KICAgIH07CiAgICBmYVJlb3JkZXIgPSBmYUJhcnNTdGFnZ2VyZWQ7CiAgICBmYVN0cmVhbSA9IGZhQmFyc1N0YWdnZXJlZDsKICAgIGZhV2FyZWhvdXNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndhcmVob3VzZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNDk0IiwgIk0wIDE0Mi4xTDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNDBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMzNy45YzAtMjcuNS0xNy42LTUyLTQzLjgtNjAuN0wzMDMuMiA1LjFjLTkuOS0zLjMtMjAuNS0zLjMtMzAuNCAwTDQzLjggODEuNEMxNy42IDkwLjEgMCAxMTQuNiAwIDE0Mi4xek00NjQgMjU2bC0zNTIgMCAwIDY0IDM1MiAwIDAtNjR6TTExMiA0MTZsMzUyIDAgMC02NC0zNTIgMCAwIDY0em0zNTIgMzJsLTM1MiAwIDAgNjQgMzUyIDAgMC02NHoiXQogICAgfTsKICAgIGZhU3dhdGNoYm9vayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzd2F0Y2hib29rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YzMiLCAiTTAgNDhDMCAyMS41IDIxLjUgMCA0OCAwbDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzNjhjMCA1My00MyA5Ni05NiA5NlMwIDQ2OSAwIDQxNkwwIDQ4ek0yNDAgNDA5LjZsMC0yNzEuNSA0OC4xLTQ4LjFjMTguNy0xOC43IDQ5LjEtMTguNyA2Ny45IDBsNjcuOSA2Ny45YzE4LjcgMTguNyAxOC43IDQ5LjEgMCA2Ny45TDI0MCA0MDkuNnpNMjA1LjUgNTEybDE5Mi0xOTIgNjYuNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTI1OC41IDB6TTgwIDY0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZMODAgNjR6TTY0IDIwOGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek05NiA0NDBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFDYW1wZ3JvdW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbXBncm91bmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5OTc4XSwgImY2YmIiLCAiTTM0NC44IDUyLjNjMTEuMi0xMy43IDkuMi0zMy44LTQuNS00NXMtMzMuOC05LjItNDUgNC41bC0zOS4yIDQ4LTM5LjItNDhDMjA1LjYtMS45IDE4NS40LTQgMTcxLjcgNy4ycy0xNS43IDMxLjQtNC41IDQ1bDQ3LjQgNTgtMjAyIDI0Ni45QzQuNSAzNjcuMSAwIDM3OS42IDAgMzkyLjZMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zOS40YzAtMTIuOS00LjUtMjUuNS0xMi43LTM1LjVsLTIwMi0yNDYuOSA0Ny40LTU4ek0yNTYgMjg4bDExMiAxMjgtMjI0IDAgMTEyLTEyOHoiXQogICAgfTsKICAgIGZhUGVyc29uV2Fsa2luZ0Fycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXdhbGtpbmctYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU1MiIsICJNMTA0LjUgMjRhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwem0tOCAxODEuM0w3My45IDIyNy45Yy02IDYtOS40IDE0LjEtOS40IDIyLjZsMCAzNy41YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzcuNWMwLTI1LjUgMTAuMS00OS45IDI4LjEtNjcuOWwzNS4xLTM1LjFjMjIuOC0yMi44IDUzLjYtMzUuNiA4NS44LTM1LjYgMzYuOSAwIDcxLjggMTYuOCA5NC44IDQ1LjZMMjYyLjMgMTgwYzYuMSA3LjYgMTUuMyAxMiAyNSAxMmwzMy4yIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMzLjIgMGMtMjkuMiAwLTU2LjctMTMuMy03NS0zNmwtMy44LTQuNyAwIDExNS4yIDM0LjUgMjkuNmMxNy43IDE1LjIgMjkuMyAzNi4yIDMyLjYgNTkuM2wxMi42IDg4LjFjMi41IDE3LjUtOS43IDMzLjctMjcuMiAzNi4ycy0zMy43LTkuNy0zNi4yLTI3LjJsLTEyLjYtODguMWMtMS4xLTcuNy01LTE0LjctMTAuOS0xOS44TDEzMCAzNDcuNWMtMjEuMy0xOC4yLTMzLjUtNDQuOS0zMy41LTcyLjlsMC02OS4zek05Ni42IDM3MWMyLjQgMi4zIDQuOCA0LjYgNy40IDYuOGw0NiAzOS40LTIuMiA3LjZjLTQuNSAxNS43LTEyLjkgMzAtMjQuNCA0MS41TDU1LjEgNTM0LjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDY4LjMtNjguM2MzLjgtMy44IDYuNi04LjYgOC4xLTEzLjhMOTYuNiAzNzF6TTUwNS41IDM0NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0xMDIuMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDEwMi4xIDAtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw3MiA3MmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNzIgNzJ6Il0KICAgIH07CiAgICBmYUdsYXNzZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2xhc3NlcyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTMwIiwgIk0xNDMuMyA5NmMtMTQgMC0yNi41IDkuMi0zMC42IDIyLjZMNzAuNCAyNTYgMjI0IDI1NmMxNy43IDAgMzIgMTQuMyAzMiAzMmw2NCAwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDE1My42IDAtNDIuMy0xMzcuNEM0NTkuMiAxMDUuMiA0NDYuOCA5NiA0MzIuNyA5Nkw0MDAgOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIuNyAwYzQyLjEgMCA3OS40IDI3LjUgOTEuOCA2Ny44bDQ1LjQgMTQ3LjVjNC4xIDEzLjIgNi4xIDI2LjkgNi4xIDQwLjdsMCA5NmMwIDUzLTQzIDk2LTk2IDk2bC02NCAwYy01MyAwLTk2LTQzLTk2LTk2bDAtMzItNjQgMCAwIDMyYzAgNTMtNDMgOTYtOTYgOTZsLTY0IDBjLTUzIDAtOTYtNDMtOTYtOTZsMC05NmMwLTEzLjggMi4xLTI3LjUgNi4xLTQwLjdMNTEuNSA5OS44QzYzLjkgNTkuNSAxMDEuMSAzMiAxNDMuMyAzMkwxNzYgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyLjcgMHpNNjQgMzIwbDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0LTEyOCAwem00MTYgOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NC0xMjggMCAwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDB6Il0KICAgIH07CiAgICBmYUNpcmNsZVBhdXNlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtcGF1c2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjA5MiwgInBhdXNlLWNpcmNsZSJdLCAiZjI4YiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIyNCAxOTJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptMTI4IDBsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhUGF1c2VDaXJjbGUyID0gZmFDaXJjbGVQYXVzZTI7CiAgICBmYU1lbW9yeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtZW1vcnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUzOCIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhsMCA3LjRDMCAxNDIuMiA0LjQgMTQ4IDEwLjEgMTUxLjcgMjMuMyAxNjAuMyAzMiAxNzUuMSAzMiAxOTJzLTguNyAzMS43LTIxLjkgNDAuM0M0LjQgMjM2IDAgMjQxLjggMCAyNDguNmwwIDU1LjQgNTEyIDAgMC01NS40YzAtNi44LTQuNC0xMi42LTEwLjEtMTYuMy0xMy4yLTguNi0yMS45LTIzLjQtMjEuOS00MC4zczguNy0zMS43IDIxLjktNDAuM2M1LjctMy43IDEwLjEtOS41IDEwLjEtMTYuM2wwLTcuNGMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNNTEyIDQxNmwwLTY0LTUxMiAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMCAwLTI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAyNCA4OCAwIDAtMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDI0IDg4IDAgMC0yNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMjQgNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnpNMTYwIDE2MGwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptMTI4IDBsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTEyOCAwbDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyeiJdCiAgICB9OwogICAgZmFHaWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdpZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc4NzNdLCAiZjA2YiIsICJNMzIxLjUgNjguOEMzMjkuMSA1NS45IDM0Mi45IDQ4IDM1Ny44IDQ4bDIuMiAwYzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwbC03My4zIDAgMzQuOC01OS4yem0tMTMxIDBsMzQuOCA1OS4yLTczLjMgMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBzMTcuOS00MCA0MC00MGwyLjIgMGMxNC45IDAgMjguOCA3LjkgMzYuMyAyMC44em04OS42LTI0LjNsLTI0LjEgNDEtMjQuMS00MUMyMTUuNyAxNi45IDE4Ni4xIDAgMTU0LjIgMEwxNTIgMGMtNDguNiAwLTg4IDM5LjQtODggODggMCAxNC40IDMuNSAyOCA5LjYgNDBMMzIgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDQ0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJsLTQxLjYgMGM2LjEtMTIgOS42LTI1LjYgOS42LTQwIDAtNDguNi0zOS40LTg4LTg4LTg4bC0yLjIgMGMtMzEuOSAwLTYxLjUgMTYuOS03Ny43IDQ0LjR6TTQ4MCAyNzJsLTIwMCAwIDAgMjA4IDEzNiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTQ0em0tMjQ4IDBsLTIwMCAwIDAgMTQ0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDEzNiAwIDAtMjA4eiJdCiAgICB9OwogICAgZmFNb25leUJpbGxXaGVhdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxsLXdoZWF0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MmEiLCAiTTE3Ni0xNmM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODAgMC04LjggNy4yLTE2IDE2LTE2ek01NiAwbDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMNTYgNDhDNDIuNyA0OCAzMiAzNy4zIDMyIDI0UzQyLjcgMCA1NiAwek0yNCA3MmwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCAxMjBDMTAuNyAxMjAgMCAxMDkuMyAwIDk2UzEwLjcgNzIgMjQgNzJ6bTggOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTI3MiAwYzAtOC44IDcuMi0xNiAxNi0xNiA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODB6TTQwMC0xNmM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODAgMC04LjggNy4yLTE2IDE2LTE2em04MCAxNDRjMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwIDguOCAwIDE2IDcuMiAxNiAxNnpNMzUyIDExMmM4LjggMCAxNiA3LjIgMTYgMTYgMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwem0tOTYgMTZjMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwIDguOCAwIDE2IDcuMiAxNiAxNnpNMCAzMDRjMC0yNi41IDIxLjUtNDggNDgtNDhsNDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNjBjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDMwNHpNNDggNDE2bDAgNDggNDggMGMwLTI2LjUtMjEuNS00OC00OC00OHpNOTYgMzA0bC00OCAwIDAgNDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6TTQ2NCA0MTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDQ4IDAgMC00OHpNNDE2IDMwNGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwwLTQ4LTQ4IDB6bS05NiA4MGE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6Il0KICAgIH07CiAgICBmYUR1bmdlb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHVuZ2VvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNmQ5IiwgIk0zNDcuNSAxNDQuOGM2LjUgNS40IDEyLjUgMTEuMyAxOCAxNy43IDguNyAxMC4yIDIzLjcgMTQgMzUuMSA2LjlsNTQuMS0zMy44YzExLjItNyAxNC43LTIxLjcgNi45LTMyLjItMTUuMy0yMC41LTMzLjUtMzguNi01NC4xLTUzLjgtMTAuNC03LjYtMjQuNy00LjMtMzEuOCA2LjRsLTM1LjEgNTIuNmMtNy44IDExLjYtMy44IDI3LjMgNyAzNi4yek0zMjcuOCA0MS4xYzguNi0xMi45IDIuOS0zMC41LTEyLjItMzQuMS0xOS4xLTQuNi0zOS4xLTctNTkuNi03cy00MC40IDIuNC01OS42IDdjLTE1LjEgMy42LTIwLjggMjEuMi0xMi4yIDM0LjFsNDAgNjBjNS4yIDcuOCAxNC41IDExLjcgMjMuOSAxMS4yIDUuMi0uMyAxMC42LS4zIDE1LjggMCA5LjQgLjUgMTguNy0zLjQgMjMuOS0xMS4ybDQwLTYwek01MC41IDEwMy4zYy03LjkgMTAuNS00LjMgMjUuMyA2LjkgMzIuMmw1NC4xIDMzLjhjMTEuNCA3LjEgMjYuMyAzLjMgMzUuMS02LjkgNS41LTYuNCAxMS41LTEyLjMgMTgtMTcuNyAxMC44LTguOSAxNC44LTI0LjYgNy0zNi4yTDEzNi40IDU1LjljLTcuMS0xMC43LTIxLjUtMTQtMzEuOC02LjQtMjAuNiAxNS4xLTM4LjggMzMuMy01NC4xIDUzLjh6bTYyIDE0MS4xYy44LTkuOS0zLjMtMTkuOS0xMS44LTI1LjFMNDEgMTgyYy0xMi45LTgtMjkuOS0yLjMtMzMuNiAxMi41LTQuOSAxOS43LTcuNSA0MC4zLTcuNSA2MS42bDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtMy45IC4yLTcuOCAuNS0xMS42em0yODcuMSAwYy4zIDMuOCAuNSA3LjcgLjUgMTEuNmwwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yNGMwLTIxLjItMi42LTQxLjgtNy41LTYxLjYtMy42LTE0LjctMjAuNy0yMC41LTMzLjYtMTIuNWwtNTkuNyAzNy4zYy04LjQgNS4zLTEyLjYgMTUuMi0xMS44IDI1LjF6TTg4IDM1MmwtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRMMCA0ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHptNDAwIDBsLTY0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xMTJjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTI4MCAxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAzMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMwNHptLTgwIDMyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNzJ6bTE2MCAwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNzJ6Il0KICAgIH07CiAgICBmYVN1aXRjYXNlTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdWl0Y2FzZS1tZWRpY2FsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbIm1lZGtpdCJdLCAiZjBmYSIsICJNMTkyIDU2bDAgNDAgMTI4IDAgMC00MGMwLTQuNC0zLjYtOC04LThMMjAwIDQ4Yy00LjQgMC04IDMuNi04IDh6bS00OCA4bDAtOGMwLTMwLjkgMjUuMS01NiA1Ni01NkwzMTIgMGMzMC45IDAgNTYgMjUuMSA1NiA1NmwwIDQyNC0yMjQgMCAwLTQxNnpNOTYgMTc2bDAgMzA0LTMyIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTYwYzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyIDAgMCA4MHpNNDE2IDQ4MGwwLTM4NCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0zMiAwek0yNDQgMjA4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzNi0zNiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyNGMwIDguOCA3LjIgMTYgMTYgMTZsMzYgMCAwIDM2YzAgOC44IDcuMiAxNiAxNiAxNmwyNCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTM2IDM2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjRjMC04LjgtNy4yLTE2LTE2LTE2bC0zNiAwIDAtMzZjMC04LjgtNy4yLTE2LTE2LTE2bC0yNCAweiJdCiAgICB9OwogICAgZmFNZWRraXQgPSBmYVN1aXRjYXNlTWVkaWNhbDsKICAgIGZhUGVyc29uQ2FuZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tY2FuZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNTNjIiwgIk0yMzItMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTE0NCAyMzYuN0w5Ny43IDI5OS4xYy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NUMxNDIgMTMyIDE4MS43IDExMiAyMjQgMTEyczgyIDIwIDEwNy4yIDUzLjlsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42TDMwNCAyMzYuNyAzMDQgNTEyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjc1LjN6TTM5MiAzODRjLTQuNCAwLTggMy42LTggOCAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTI4YzAtNC40LTMuNi04LTgtOHoiXQogICAgfTsKICAgIGZhR2F1Z2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2F1Z2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZGFzaGJvYXJkIiwgImdhdWdlLW1lZCIsICJ0YWNob21ldGVyLWFsdC1hdmVyYWdlIl0sICJmNjI0IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zMjAgOTZjMC0yNi45LTE2LjUtNDkuOS00MC01OS4zTDI4MCAxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNzIuN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6TTE0NCAxNzZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0tMTYgODBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMjg4IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNNDAwIDE0NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdCiAgICB9OwogICAgZmFEYXNoYm9hcmQgPSBmYUdhdWdlOwogICAgZmFHYXVnZU1lZCA9IGZhR2F1Z2U7CiAgICBmYVRhY2hvbWV0ZXJBbHRBdmVyYWdlID0gZmFHYXVnZTsKICAgIGZhRW52ZWxvcGVPcGVuVGV4dCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlbnZlbG9wZS1vcGVuLXRleHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjY1OCIsICJNMjg4IDMzLjlMOTYuNCAxNzUuOCAyNTQuNSAyOTNjNS4zIDMuOSAxMS4yIDYuOSAxNy41IDguN0wyNzIgNDY0YzAgNS41IC41IDEwLjggMS4zIDE2TDk2IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0yMzkuOWMwLTIwLjMgOS42LTM5LjQgMjUuOS01MS40TDI1NC41LTIxYzkuNy03LjIgMjEuNC0xMSAzMy41LTExczIzLjggMy45IDMzLjUgMTFMNTE4LjEgMTI0LjdjNy4yIDUuMyAxMy4xIDEyIDE3LjQgMTkuNi0yLjUtLjItNS0uMy03LjUtLjNMNDM2LjYgMTQ0IDI4OCAzMy45ek0zMjAgMjQwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDE2MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjI0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNjAgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0yMjR6bTgwIDE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDk2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTk2IDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNTYgMHoiXQogICAgfTsKICAgIGZhVG9vbGJveCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b29sYm94IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTIwXSwgImY1NTIiLCAiTTE3NiA1NmwwIDQwIDE2MCAwIDAtNDBjMC00LjQtMy42LTgtOC04TDE4NCA0OGMtNC40IDAtOCAzLjYtOCA4ek0xMjggOTZsMC00MGMwLTMwLjkgMjUuMS01NiA1Ni01NkwzMjggMGMzMC45IDAgNTYgMjUuMSA1NiA1NmwwIDQwIDI4LjEgMGMxMi43IDAgMjQuOSA1LjEgMzMuOSAxNC4xbDUxLjkgNTEuOWM5IDkgMTQuMSAyMS4yIDE0LjEgMzMuOWwwIDc2LjEtMTM2IDAgMC0xNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE2LTE0NCAwIDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNi0xMzYgMCAwLTc2LjFjMC0xMi43IDUuMS0yNC45IDE0LjEtMzMuOWw1MS45LTUxLjljOS05IDIxLjItMTQuMSAzMy45LTE0LjFMMTI4IDk2ek0wIDQxNmwwLTk2IDEzNiAwIDAgMTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2IDE0NCAwIDAgMTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2IDEzNiAwIDAgOTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NHoiXQogICAgfTsKICAgIGZhUG93ZXJPZmYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicG93ZXItb2ZmIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTIxMV0sICJmMDExIiwgIk0yODggMGMwLTE3LjctMTQuMy0zMi0zMi0zMlMyMjQtMTcuNyAyMjQgMGwwIDI1NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyTDI4OCAwek0xNDYuMyA5OC40YzE0LjUtMTAuMSAxOC0zMC4xIDcuOS00NC42cy0zMC4xLTE4LTQ0LjYtNy45QzQzLjQgOTIuMSAwIDE2OSAwIDI1NiAwIDM5Ny40IDExNC42IDUxMiAyNTYgNTEyUzUxMiAzOTcuNCA1MTIgMjU2YzAtODctNDMuNC0xNjMuOS0xMDkuNy0yMTAuMS0xNC41LTEwLjEtMzQuNC02LjYtNDQuNiA3LjlzLTYuNiAzNC40IDcuOSA0NC42YzQ5LjggMzQuOCA4Mi4zIDkyLjQgODIuMyAxNTcuNiAwIDEwNi04NiAxOTItMTkyIDE5MlM2NCAzNjIgNjQgMjU2YzAtNjUuMiAzMi41LTEyMi45IDgyLjMtMTU3LjZ6Il0KICAgIH07CiAgICBmYVNpZ25hbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaWduYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNDYsICJzaWduYWwtNSIsICJzaWduYWwtcGVyZmVjdCJdLCAiZjAxMiIsICJNNDg4IDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDAwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MDB6TTM2MCAxMjhjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMzA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMDRjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTI4MCAyNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyMDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTIwOHpNMTUyIDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNNDggMzg0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhU2lnbmFsNSA9IGZhU2lnbmFsOwogICAgZmFTaWduYWxQZXJmZWN0ID0gZmFTaWduYWw7CiAgICBmYUFycm93c1NwaW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXNwaW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRiYiIsICJNNDgxLjcgMjQwLjFjLTE3LjYtMS4yLTMyLjkgMTItMzQuMiAyOS43LTMuMyA0Ny0yMy42IDg5LjQtNTQuOCAxMjFMMzYxIDM1OWMtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMzMjAgMzY2LjMgMzIwIDM3NmwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMTIgMGM5LjcgMCAxOC41LTUuOCAyMi4yLTE0LjhzMS43LTE5LjMtNS4yLTI2LjJsLTM1LTM1YzQxLjctNDIuMiA2OC45LTk4LjggNzMuNC0xNjEuOCAxLjItMTcuNi0xMi0zMi45LTI5LjctMzQuMnpNMzkgNDFMNzQgNzZjLTQxLjcgNDIuMi02OC45IDk4LjgtNzMuNCAxNjEuOC0xLjIgMTcuNiAxMiAzMi45IDI5LjcgMzQuMnMzMi45LTEyIDM0LjItMjkuN2MzLjMtNDcgMjMuNi04OS40IDU0LjgtMTIxTDE1MSAxNTNjNi45IDYuOSAxNy4yIDguOSAyNi4yIDUuMlMxOTIgMTQ1LjcgMTkyIDEzNmwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNEw1NiAwQzQ2LjMgMCAzNy41IDUuOCAzMy44IDE0LjhTMzIuMiAzNC4xIDM5IDQxem0yMDEtMTAuN2MtMS4yIDE3LjYgMTIgMzIuOSAyOS43IDM0LjIgNDcgMy4zIDg5LjQgMjMuNiAxMjEgNTQuOEwzNTkgMTUxYy02LjkgNi45LTguOSAxNy4yLTUuMiAyNi4yUzM2Ni4zIDE5MiAzNzYgMTkybDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTEyYzAtOS43LTUuOC0xOC41LTE0LjgtMjIuMlM0NzcuOSAzMi4yIDQ3MSAzOUw0MzYgNzRjLTQyLjItNDEuNy05OC44LTY4LjktMTYxLjgtNzMuNC0xNy42LTEuMi0zMi45IDEyLTM0LjIgMjkuN3pNNDEgNDczbDM1LTM1YzQyLjIgNDEuNyA5OC44IDY4LjkgMTYxLjggNzMuNCAxNy42IDEuMiAzMi45LTEyIDM0LjItMjkuN3MtMTItMzIuOS0yOS43LTM0LjJjLTQ3LTMuMy04OS40LTIzLjYtMTIxLTU0LjhMMTUzIDM2MWM2LjktNi45IDguOS0xNy4yIDUuMi0yNi4yUzE0NS43IDMyMCAxMzYgMzIwTDI0IDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRMMCA0NTZjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yUzM0LjEgNDc5LjggNDEgNDczeiJdCiAgICB9OwogICAgZmFKb2ludCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJqb2ludCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTk1IiwgIk0zNjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE5YzAgNDAuMyAxNiA3OSA0NC41IDEwNy41bDIxIDIxQzQ2OSAxOTEgNDgwIDIxNy40IDQ4MCAyNDVsMCAxOWMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE5YzAtMTQuOS01LjktMjkuMS0xNi40LTM5LjZsLTIxLTIxQzM1Ny4xIDE0Ni45IDMzNiA5NiAzMzYgNDNsMC0xOWMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNTUyIDI4OGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0xOWMwLTQwLjMtMTYtNzktNDQuNS0xMDcuNWwtMjEtMjFDNDQzIDk3IDQzMiA3MC42IDQzMiA0M2wwLTE5YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxOWMwIDE0LjkgNS45IDI5LjEgMTYuNCAzOS42bDIxIDIxQzU1NC45IDE0MS4xIDU3NiAxOTIgNTc2IDI0NWwwIDE5YzAgMTMuMy0xMC43IDI0LTI0IDI0ek0yOTIuNyAzMjBjNS42IDAgMTAuNyAyLjkgMTMuNiA3LjZMMzk0LjYgNDcxYzEuMyAyLjEgMCA0LjktMi40IDUuMi0xNi4xIDIuNS0zMi40IDMuNy00OC43IDMuN2wtMzguMSAwYy01LjYgMC0xMC43LTIuOS0xMy42LTcuNmwtNzktMTI4LjRjLTYtOS44IDAtMjIuNiAxMS41LTIzLjMgNi43LS40IDEzLjQtLjYgMjAuMi0uNmw0OC4zIDB6TTQ1OS4zIDQ2NS45Yy02LjQgMS0xMi43LTEuOS0xNi4xLTcuNEwzNzQuMSAzNDYuMWMtNi43LTEwLjkgMS41LTI0LjcgMTQuMi0yMi45IDEuMyAuMiAyLjYgLjQgMy44IC42bDEzNi40IDIxYzI3LjMgNC4yIDQ3LjQgMjcuNyA0Ny40IDU1LjNzLTIwLjEgNTEuMS00Ny40IDU1LjNsLTY5LjIgMTAuNnpNMTM4LjcgMzM2YzYuNy0xLjUgMTMuNiAxLjQgMTcuMiA3LjJsNjguOSAxMTJjNi42IDEwLjctMS4yIDI0LjQtMTMuOCAyMy4xLTEzLTEuNC0yNS45LTMuNS0zOC42LTYuNUwzMS4yIDQzOS4yQzEyLjkgNDM1IDAgNDE4LjcgMCA0MDBzMTIuOS0zNSAzMS4yLTM5LjJMMTM4LjcgMzM2eiJdCiAgICB9OwogICAgZmFCcmFpbGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyYWlsbGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjJhMSIsICJNODAgMTQ0YTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0wIDE5MmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMCAxMzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjQgMjQgMTAuNyAyNCAyNC0xMC43IDI0LTI0IDI0em0wIDU2YzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwLTgwIDM1LjgtODAgODAgMzUuOCA4MCA4MCA4MHptMjQ4LTgwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0IDEwLjctMjQgMjQtMjQgMjQgMTAuNyAyNCAyNHptNTYgMGMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MCAzNS44IDgwIDgwIDgwIDgwLTM1LjggODAtODB6TTMwNCAyMzJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0wIDEwNGE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMC0xOTJhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6Il0KICAgIH07CiAgICBmYUJhc2tldFNob3BwaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhc2tldC1zaG9wcGluZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzaG9wcGluZy1iYXNrZXQiXSwgImYyOTEiLCAiTTI4OCAwYzYuNiAwIDEyLjkgMi43IDE3LjQgNy41bDE0NCAxNTIgLjUgLjUgNzguMSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyIDAgMTQuNS05LjYgMjYuNy0yMi44IDMwLjdMNDkxLjEgNDI5LjljLTYuNSAyOS4zLTMyLjUgNTAuMS02Mi41IDUwLjFsLTI4MS4zIDBjLTMwIDAtNTYtMjAuOC02Mi41LTUwLjFsLTQ2LTIwNy4yYy0xMy4yLTMuOS0yMi44LTE2LjItMjIuOC0zMC43IDAtMTcuNyAxNC4zLTMyIDMyLTMybDc4LjEgMCAuNS0uNSAxNDQtMTUyQzI3NS4xIDIuNyAyODEuNCAwIDI4OCAwem0wIDU4LjlMMTkyLjIgMTYwIDM4My44IDE2MCAyODggNTguOXpNMjA4IDI2NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTEyem04MC0yNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMTI4IDI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMTJ6Il0KICAgIH07CiAgICBmYVNob3BwaW5nQmFza2V0ID0gZmFCYXNrZXRTaG9wcGluZzsKICAgIGZhQnJpZGdlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyaWRnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGM4IiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsOCAwIDAgNjQtNDAgMCAwIDExMmMzNy42IDkuNCA2NCA0My4yIDY0IDgybDAgOTRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtOTRjMC0zOC44IDI2LjQtNzIuNiA2NC04MmwwLTExMi00MCAwIDAtNjQgOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyek00MjQgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNMjk2IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTg4IDk2bDgwIDAgMCA2NC04MCAwIDAtNjR6Il0KICAgIH07CiAgICBmYVBsYW5lQXJyaXZhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGFuZS1hcnJpdmFsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NzQ4XSwgImY1YWYiLCAiTTM4Ni42IDE5My4xTDI2NS45IDMuN2MtNC44LTcuNi0xMi42LTEyLjgtMjEuNC0xNC4zbC00My4xLTcuNmMtMTAuOC0xLjktMjAuMiA3LjMtMTguNiAxOC4xbDI0IDE2MS42LTEwNS0xOC41LTMzLjgtNjEuOEM2NC41IDc0LjcgNTguMiA3MC4yIDUxLjEgNjlMMzQgNjZjLTkuOC0xLjctMTguOCA1LjktMTguOCAxNS44bC42IDEwNi4zYy4yIDMwLjkgMjIuNCA1Ny4zIDUyLjkgNjIuN2wxMy41IDIuNCAwIDAgNDE3LjYgNzMuNmMzMC41IDUuNCA1OS41LTE1IDY0LjktNDUuNHMtMTUtNTkuNS00NS40LTY0LjlMMzg2LjYgMTkzLjF6TTIyNCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xMzEuMi0xNS4zYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0NDh6Il0KICAgIH07CiAgICBmYUNhc2hSZWdpc3RlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXNoLXJlZ2lzdGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ODgiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRzMjguNyA2NCA2NCA2NGw0OCAwIDAgMzItNTcgMGMtMzEuNiAwLTU4LjUgMjMuMS02My4zIDU0LjRMMS4xIDM2NC4xQy40IDM2OC44IDAgMzczLjYgMCAzNzguNEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY5LjZjMC00LjgtLjQtOS42LTEuMS0xNC40TDQ4OC4yIDIxNC40QzQ4My41IDE4My4xIDQ1Ni42IDE2MCA0MjUgMTYwbC0yMTcgMCAwLTMyIDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRTMjkxLjMgMCAyNTYgMEw5NiAwem0wIDQ4bDE2MCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2TDk2IDgwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2ek02NCA0MjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsMzM2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMODggNDQ4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptNDgtMTYwYTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHptMTIwLTI0YTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6TTE2MCAzNDRhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4ek0zMjggMjQwYTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6TTI1NiAzNDRhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4ek00MjQgMjQwYTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6TTM1MiAzNDRhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4eiJdCiAgICB9OwogICAgZmFSaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjcwYiIsICJNNjQgMjA4YzAgNy44IDQuNCAxOC43IDE3LjEgMzAuMyA0NS40LTI0LjIgMTA3LjctMzguMyAxNzQuOS0zOC4zczEyOS41IDE0LjEgMTc0LjkgMzguM2MxMi44LTExLjYgMTcuMS0yMi41IDE3LjEtMzAuMyAwLTEyLjMtMTAuOC0zMi00Ny45LTUwLjYtMzUuMi0xNy42LTg2LjEtMjkuNC0xNDQuMS0yOS40cy0xMDguOSAxMS44LTE0NC4xIDI5LjRDNzQuOCAxNzYgNjQgMTk1LjcgNjQgMjA4em0xOTIgNDBjLTQ3IDAtODkuMyA3LjYtMTIyLjkgMTkuNyAzMy4yIDEyLjQgNzUuNyAyMC4zIDEyMi45IDIwLjNzODkuNy03LjggMTIyLjktMjAuM0MzNDUuMyAyNTUuNiAzMDMgMjQ4IDI1NiAyNDh6TTAgMjA4QzAgMTU4LjQgMzkuNCAxMjIuMiA4My4zIDEwMC4yIDEyOS4xIDc3LjMgMTkwLjMgNjQgMjU2IDY0czEyNi45IDEzLjMgMTcyLjcgMzYuMmM0My45IDIyIDgzLjMgNTguMiA4My4zIDEwNy44bDAgOTZjMCA0OS42LTM5LjQgODUuOC04My4zIDEwNy44LTQ1LjkgMjIuOS0xMDcgMzYuMi0xNzIuNyAzNi4yUzEyOS4xIDQzNC43IDgzLjMgNDExLjhDMzkuNCAzODkuOCAwIDM1My42IDAgMzA0bDAtOTZ6Il0KICAgIH07CiAgICBmYVNoYXJlTm9kZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hhcmUtbm9kZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2hhcmUtYWx0Il0sICJmMWUwIiwgIk0zODQgMTkyYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2LTk2IDQzLTk2IDk2YzAgNS40IC41IDEwLjggMS4zIDE2TDE1OS42IDE4NC4xYy0xNi45LTE1LTM5LjItMjQuMS02My42LTI0LjEtNTMgMC05NiA0My05NiA5NnM0MyA5NiA5NiA5NmMyNC40IDAgNDYuNi05LjEgNjMuNi0yNC4xTDI4OS4zIDQwMGMtLjkgNS4yLTEuMyAxMC41LTEuMyAxNiAwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2LTQzLTk2LTk2LTk2Yy0yNC40IDAtNDYuNiA5LjEtNjMuNiAyNC4xTDE5MC43IDI3MmMuOS01LjIgMS4zLTEwLjUgMS4zLTE2cy0uNS0xMC44LTEuMy0xNmwxMjkuNy03Mi4xYzE2LjkgMTUgMzkuMiAyNC4xIDYzLjYgMjQuMXoiXQogICAgfTsKICAgIGZhU2hhcmVBbHQgPSBmYVNoYXJlTm9kZXM7CiAgICBmYVBlcnNvbkNpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUzZiIsICJNMjgwIDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdMMzQxIDI4Ni42YzEyLjgtMTcuNSAyOC41LTMyLjcgNDYuMy00NWwtNTYuMi03NS43QzMwNiAxMzIgMjY2LjMgMTEyIDIyNCAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxNDQgMjM2LjcgMTQ0IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC0xMDBhMjAgMjAgMCAxIDEgMCA0MCAyMCAyMCAwIDEgMSAwLTQwem0wLTE0MGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhQmlub2N1bGFycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiaW5vY3VsYXJzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxZTUiLCAiTTEyOCAzMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzItOTYgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem02NCA5NmwwIDMyMGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNTkuMWMwLTM0LjYgOS40LTY4LjYgMjcuMi05OC4zIDEzLjctMjIuOCAyMi41LTQ4LjIgMjUuOC03NC42TDYwLjUgMTU2YzItMTYgMTUuNi0yOCAzMS44LTI4bDk5LjggMHptMjI3LjggMGMxNi4xIDAgMjkuOCAxMiAzMS44IDI4TDQ1OSAyMTZjMy4zIDI2LjQgMTIuMSA1MS44IDI1LjggNzQuNiAxNy44IDI5LjcgMjcuMiA2My43IDI3LjIgOTguM2wwIDU5LjFjMCAxNy43LTE0LjMgMzItMzIgMzJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyMCA5OS44IDB6TTMyMCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzItOTYgMCAwLTMyem0tMzIgNjRsMCAxNjAtNjQgMCAwLTE2MCA2NCAweiJdCiAgICB9OwogICAgZmFLaXBTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImtpcC1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUxYzQiLCAiTTM0MC44IDg4LjNjMTMuNC0xMS41IDE1LTMxLjcgMy41LTQ1LjFzLTMxLjctMTUtNDUuMS0zLjVMMTI4IDE4Ni40IDEyOCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCA0Ni4zIDY0IDY0bDAgMTY4LTMyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDE2OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTIyLjQgMTcxLjIgMTQ2LjdjMTMuNCAxMS41IDMzLjYgOS45IDQ1LjEtMy41czkuOS0zMy42LTMuNS00NS4xTDE3My4yIDI4MCAzNTIgMjgwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDE3My4yIDIzMiAzNDAuOCA4OC4zeiJdCiAgICB9OwogICAgZmFIYXJkRHJpdmUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhcmQtZHJpdmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjg0MzYsICJoZGQiXSwgImYwYTAiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAyNjAuMUMxOC4xIDI0Ny40IDQwLjIgMjQwIDY0IDI0MGwzMjAgMGMyMy44IDAgNDUuOSA3LjQgNjQgMjAuMUw0NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTQ0OCAzNTJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMjg4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjR6TTIyNCAzODRhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTI4LTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhSGRkMiA9IGZhSGFyZERyaXZlMjsKICAgIGZhUmFua2luZ1N0YXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmFua2luZy1zdGFyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1NjEiLCAiTTMyMS44IDU0LjFMMjk4LjIgNi4zYy0zLjktOC4zLTE2LjEtOC42LTIwLjQgMGwtMjMuNiA0Ny44LTUyLjMgNy41Yy05LjMgMS40LTEzLjMgMTIuOS02LjQgMTkuOGwzOCAzNy05IDUyLjFjLTEuNCA5LjMgOC4yIDE2LjUgMTYuOCAxMi4ybDQ2LjktMjQuOCA0Ni42IDI0LjRjOC42IDQuMyAxOC4zLTIuOSAxNi44LTEyLjJsLTktNTIuMSAzOC0zNi42YzYuOC02LjggMi45LTE4LjMtNi40LTE5LjhsLTUyLjMtNy41ek0yNTYgMjU2Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE2MGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTYwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwek00OCAzMjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwek00MTYgNDMybDAgMzJjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTMyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwYy0yNi41IDAtNDggMjEuNS00OCA0OHoiXQogICAgfTsKICAgIGZhVXNlclRpZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLXRpZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTA4IiwgIk0yMjQgMjQ4YTEyMCAxMjAgMCAxIDEgMC0yNDAgMTIwIDEyMCAwIDEgMSAwIDI0MHptLTMwLjUgNTZsNjEgMGM5LjcgMCAxNy41IDcuOCAxNy41IDE3LjUgMCA0LjItMS41IDguMi00LjIgMTEuNGwtMjcuNCAzMiAzMSAxMTUuMSAuNiAwIDM0LjYtMTM4LjVjMi4yLTguNyAxMS4xLTE0IDE5LjUtMTAuOCA2MS45IDIzLjYgMTA1LjkgODMuNiAxMDUuOSAxNTMuOCAwIDE1LjEtMTIuMyAyNy40LTI3LjQgMjcuNEw0My40IDUxMmMtMTUuMSAwLTI3LjQtMTIuMy0yNy40LTI3LjQgMC03MC4yIDQ0LTEzMC4yIDEwNS45LTE1My44IDguNC0zLjIgMTcuMyAyLjEgMTkuNSAxMC44bDM0LjYgMTM4LjUgLjYgMCAzMS0xMTUuMS0yNy40LTMyYy0yLjctMy4yLTQuMi03LjItNC4yLTExLjQgMC05LjcgNy44LTE3LjUgMTcuNS0xNy41eiJdCiAgICB9OwogICAgZmFFbGxpcHNpcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlbGxpcHNpcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJlbGxpcHNpcy1oIl0sICJmMTQxIiwgIk0wIDI1NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bTE2OCAwYTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptMjI0LTU2YTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyeiJdCiAgICB9OwogICAgZmFFbGxpcHNpc0ggPSBmYUVsbGlwc2lzOwogICAgZmFTdG9yZVNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0b3JlLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwNzEiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU4LjYtNTguNmMxLjEtNCAxLjYtOC4yIDEuNi0xMi41bDAtMTUxLjJjLTEyLjUgNC42LTI2LjEgNy4yLTQwLjUgNy4yLTguMSAwLTE1LjktLjgtMjMuNS0yLjRsMCA2Ni40LTMwLjIgMC0xMzcuNS0xMzcuNWMyLjktMy42IDUuNS03LjQgNy42LTExLjUgMTEuNiAyMiAzNC43IDM3IDYxLjMgMzcgMjYuOCAwIDQ5LjgtMTUuMSA2MS40LTM3LjEgMTEuNCAyMi4xIDM0LjUgMzcuMSA2MC44IDM3LjEgNDUuNiAwIDc4LjQtNDMuNyA2NS42LTg3LjVMNTEzLjggNzIuM0M1MDYuOCA0OC40IDQ4NC45IDMyIDQ2MCAzMkwxMTYgMzJjLTUuNSAwLTEwLjggLjgtMTUuOSAyLjNMNDEtMjQuOXpNMTUxLjUgMjIxLjNMNDguNyAxMTguNiAzOC45IDE1Mi41Yy0xMi44IDQzLjcgMjAgODcuNSA2NS42IDg3LjUgMTguMSAwIDM0LjctNy4xIDQ3LTE4Ljd6TTQxMC4yIDQ4MGwtMTI4LTEyOC0xNTQuMiAwIDAtNjYuNGMtNy42IDEuNi0xNS41IDIuNC0yMy41IDIuNC0xNC40IDAtMjgtMi42LTQwLjUtNy4yTDY0IDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyOTguMiAweiJdCiAgICB9OwogICAgZmFQZXJjZW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcmNlbnQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2MjEwMSwgNjI3ODUsICJwZXJjZW50YWdlIl0sICIyNSIsICJNMTkyIDEyOGE5NiA5NiAwIDEgMCAtMTkyIDAgOTYgOTYgMCAxIDAgMTkyIDB6TTQ0OCAzODRhOTYgOTYgMCAxIDAgLTE5MiAwIDk2IDk2IDAgMSAwIDE5MiAwek00MzguNiA4Ni42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0zODQgMzg0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDM4NC0zODR6Il0KICAgIH07CiAgICBmYVBlcmNlbnRhZ2UgPSBmYVBlcmNlbnQ7CiAgICBmYUZpbGVaaXBwZXIyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtemlwcGVyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImZpbGUtYXJjaGl2ZSJdLCAiZjFjNiIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTY0IDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggNDhDNzQuNyA0OCA2NCA1OC43IDY0IDcyem0wIDk2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em02NCA3MmwtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0OGMwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4bDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJ6bS0xNiA2NGExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6Il0KICAgIH07CiAgICBmYUZpbGVBcmNoaXZlMiA9IGZhRmlsZVppcHBlcjI7CiAgICBmYURpc3BsYXkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGlzcGxheSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMTYzIiwgIk00NDggOTZsMCAyNTYtMzg0IDAgMC0yNTYgMzg0IDB6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzNTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTQ0IDAtMTYgNDgtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNzIgMC0xNi00OCAxNDQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnoiXQogICAgfTsKICAgIGZhSWNvbnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaWNvbnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiaGVhcnQtbXVzaWMtY2FtZXJhLWJvbHQiXSwgImY4NmQiLCAiTTE3NC45IDI3MmMxMC43IDAgMjAuNyA1LjMgMjYuNiAxNC4ybDExLjggMTcuOCAyNi43IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxMTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDM1MmMwLTI2LjUgMjEuNS00OCA0OC00OGwyNi43IDAgMTEuOC0xNy44YzUuOS04LjkgMTUuOS0xNC4yIDI2LjYtMTQuMmw2MS43IDB6bTI3OC42LTEyYzUuNi00LjkgMTMuOS01LjMgMTkuOS0uOXM4LjMgMTIuNCA1LjMgMTkuM0w0NDAuMyAzNjggNDk2IDM2OGM2LjcgMCAxMi42IDQuMSAxNSAxMC40cy42IDEzLjMtNC40IDE3LjdsLTEyOCAxMTJjLTUuNiA0LjktMTMuOSA1LjMtMTkuOSAuOXMtOC4zLTEyLjQtNS4zLTE5LjNsMzguNS04OS43LTU1LjggMGMtNi43IDAtMTIuNi00LjEtMTUtMTAuNHMtLjYtMTMuMyA0LjQtMTcuN2wxMjgtMTEyek0xNDQgMzYwYTQ4IDQ4IDAgMSAwIDAgOTYgNDggNDggMCAxIDAgMC05NnpNNDgzLjggLjRjNi41LTEuMSAxMy4xIC40IDE4LjUgNC40IDYuMSA0LjUgOS43IDExLjcgOS43IDE5LjJsMCAxNTItLjMgNC45Yy0zLjMgMjQuMi0zMC41IDQzLjEtNjMuNyA0My4xLTM1LjMgMC02NC0yMS41LTY0LTQ4czI4LjctNDggNjQtNDhjNS41IDAgMTAuOSAuNiAxNiAxLjZsMC00OS4zLTExMiAzMy42IDAgMTEwLjItLjMgNC45Yy0zLjMgMjQuMi0zMC41IDQzLjEtNjMuNyA0My4xLTM1LjMgMC02NC0yMS41LTY0LTQ4czI4LjctNDggNjQtNDhjNS41IDAgMTAuOSAuNiAxNiAxLjZMMzA0IDcyYzAtMTAuNiA3LTIwIDE3LjEtMjNsMTYwLTQ4IDIuNy0uNnpNMTg4LjkgMEMyMjYgMCAyNTYgMzAgMjU2IDY3LjFsMCA2LjFjMCA1Ni4xLTc1LjIgMTEyLjEtMTEwLjMgMTM1LjMtMTAuOCA3LjEtMjQuNiA3LjEtMzUuNCAwLTM1LjEtMjMuMS0xMTAuMy03OS4yLTExMC4zLTEzNS4zbDAtNi4xQzAgMzAgMzAgMCA2Ny4xIDAgODguMiAwIDEwOCA5LjkgMTIwLjcgMjYuOGw3LjMgOS44IDcuMy05LjhDMTQ4IDkuOSAxNjcuOCAwIDE4OC45IDB6Il0KICAgIH07CiAgICBmYUhlYXJ0TXVzaWNDYW1lcmFCb2x0ID0gZmFJY29uczsKICAgIGZhUnVsZXJWZXJ0aWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJydWxlci12ZXJ0aWNhbCIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJmNTQ4IiwgIk0wIDE2QzAtMTAuNSAyMS41LTMyIDQ4LTMybDE2MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjQtMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTA0IDAgMCA0OC03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDcyIDAgMCA0OC0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMDQgMCAwIDQ4LTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNzIgMCAwIDQ4LTEwNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEwNCAwIDAgMjRjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTQ0Yy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE2eiJdCiAgICB9OwogICAgZmFNYXBMb2NhdGlvbkRvdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXAtbG9jYXRpb24tZG90IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbIm1hcC1tYXJrZWQtYWx0Il0sICJmNWEwIiwgIk01NzYgNDhjMC0xMS4xLTUuNy0yMS40LTE1LjItMjcuMnMtMjEuMi02LjQtMzEuMS0xLjRMNDEzLjUgNzcuNSAyMzQuMSAxNy42Yy04LjEtMi43LTE2LjgtMi4xLTI0LjQgMS43bC0xMjggNjRDNzAuOCA4OC44IDY0IDk5LjkgNjQgMTEybDAgMzUyYzAgMTEuMSA1LjcgMjEuNCAxNS4yIDI3LjJzMjEuMiA2LjQgMzEuMSAxLjRsMTE2LjEtNTguMSAxNzMuMyA1Ny44Yy00LjMtNi40LTguNS0xMy4xLTEyLjYtMTkuOS0xMS0xOC4zLTIxLjktMzkuMy0zMC02MS44bC0xMDEuMi0zMy43IDAtMjg0LjUgMTI4IDQyLjcgMCA5OS4zYzMxLTM1LjggNzctNTguNCAxMjgtNTguNCAyMi42IDAgNDQuMiA0LjQgNjQgMTIuNUw1NzYgNDh6TTUxMiAyMjRjLTY2LjMgMC0xMjAgNTIuOC0xMjAgMTE3LjkgMCA2OC45IDY0LjEgMTUwLjQgOTguNiAxODkuMyAxMS42IDEzIDMxLjMgMTMgNDIuOSAwIDM0LjUtMzguOSA5OC42LTEyMC40IDk4LjYtMTg5LjMgMC02NS4xLTUzLjctMTE3LjktMTIwLTExNy45ek00NzIgMzQ0YTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6Il0KICAgIH07CiAgICBmYU1hcE1hcmtlZEFsdCA9IGZhTWFwTG9jYXRpb25Eb3Q7CiAgICBmYUhlYXJ0Q3JhY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhcnQtY3JhY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNDgsICJoZWFydC1icm9rZW4iXSwgImY3YTkiLCAiTTEzMy4xIDMyYzE3LjMgMCAzNC4yIDMuNCA0OS45IDkuN2w1NC44IDg1LjItNzUuNCA3NS40Yy0xLjUgMS41LTIuNCAzLjYtMi4zIDUuOHMxIDQuMiAyLjYgNS43bDExMiAxMDRjMi45IDIuNyA3LjQgMi45IDEwLjUgLjNzMy44LTcgMS43LTEwLjRsLTYwLjQtOTguMSA5MC43LTc1LjZjMi42LTIuMSAzLjUtNS43IDIuNC04LjhMMjk2LjQgNjAuNkMzMTkuNiA0Mi4zIDM0OC42IDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDExMi4yLTEzOS45IDI0Mi41LTIxMi45IDI5OC4yLTEyLjQgOS40LTI3LjYgMTQuMS00My4xIDE0LjFzLTMwLjgtNC42LTQzLjEtMTQuMUMxMzkuOSA0MTAuMiAwIDI3OS45IDAgMTY3LjdsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzJ6Il0KICAgIH07CiAgICBmYUhlYXJ0QnJva2VuID0gZmFIZWFydENyYWNrOwogICAgZmFDb3cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY293IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MDA0XSwgImY2YzgiLCAiTTk2IDIyNGwwIDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtODguMmM5LjkgNi42IDIwLjYgMTIgMzIgMTYuMWwwIDI0LjJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTE2LjljNS4zIC42IDEwLjYgLjkgMTYgLjlzMTAuNy0uMyAxNi0uOWwwIDE2LjljMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTI0LjJjMTEuNC00IDIyLjEtOS40IDMyLTE2LjFsMCA4OC4yYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xNjAgMzIgMzIgMCA0OS41YzAgOS41IDIuOCAxOC43IDguMSAyNi42TDUzMCA0MjdjOC44IDEzLjEgMjMuNSAyMSAzOS4zIDIxIDIyLjUgMCA0MS45LTE1LjkgNDYuMy0zOGwyMC4zLTEwMS42YzIuNi0xMy0uMy0yNi41LTgtMzcuM2wtMy45LTUuNSAwLTgxLjZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNC40LTUyLjktNzQuMUM0OTYgODYuNSA0NTIuNCA2NCA0MDUuOSA2NEwxNDQgNjRDNzcuNyA2NCAyNCAxMTcuNyAyNCAxODRsMCA1NEM5LjQgMjQ5LjggMCAyNjcuOCAwIDI4OGwwIDE3LjZjMCA4IDYuNCAxNC40IDE0LjQgMTQuNCAzMS44IDAgNTcuNi0yNS44IDU3LjYtNTcuNkw3MiAxODRjMC0yNC4zIDEyLjEtNDUuOCAzMC41LTU4LjktNC4yIDEwLjgtNi41IDIyLjYtNi41IDM0LjlsMCA2NHpNNTYwIDMzNmExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAwek0xNjYuNiAxNjYuNmMtNC4yLTQuMi02LjYtMTAtNi42LTE2IDAtMTIuNSAxMC4xLTIyLjYgMjIuNi0yMi42bDE3OC43IDBjMTIuNSAwIDIyLjYgMTAuMSAyMi42IDIyLjYgMCA2LTIuNCAxMS44LTYuNiAxNmwtMjMuNCAyMy40QzMzMi4yIDIxMS44IDMwMi43IDIyNCAyNzIgMjI0cy02MC4yLTEyLjItODEuOS0zMy45bC0yMy40LTIzLjR6Il0KICAgIH07CiAgICBmYVJzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyc3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZmVlZCJdLCAiZjA5ZSIsICJNMCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMiAyMjkuOCAwIDQxNiAxODYuMiA0MTYgNDE2IDAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyQzM4NCAyNTMuNiAyMjYuNCA5NiAzMiA5NiAxNC4zIDk2IDAgODEuNyAwIDY0ek0wIDQxNmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTMyIDE2MGMxNTkuMSAwIDI4OCAxMjguOSAyODggMjg4IDAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyYzAtMTIzLjctMTAwLjMtMjI0LTIyNC0yMjQtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhRmVlZCA9IGZhUnNzOwogICAgZmFNYWduaWZ5aW5nR2xhc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFnbmlmeWluZy1nbGFzcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI2OSwgInNlYXJjaCJdLCAiZjAwMiIsICJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NkMyOTYuMyA0MDEuMSAyNTMuOSA0MTYgMjA4IDQxNiA5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMCA0MTYgOTMuMSA0MTYgMjA4ek0yMDggMzUyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHoiXQogICAgfTsKICAgIGZhU2VhcmNoID0gZmFNYWduaWZ5aW5nR2xhc3M7CiAgICBmYUNsb3VkTW9vbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1tb29uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY2YzMiLCAiTTQ4MCAwYzE0LjYgMCAyOC44IDEuNiA0Mi41IDQuNyA3LjQgMS43IDEzIDcuOCAxMy45IDE1LjRzLTMgMTQuOS05LjggMTguM2MtNDUuNCAyMi42LTc2LjYgNjkuNS03Ni42IDEyMy42IDAgNzYuMiA2MS44IDEzOCAxMzggMTM4IDMuNyAwIDcuNC0uMSAxMS4xLS40IDcuNi0uNiAxNC43IDMuNiAxNy44IDEwLjZzMS41IDE1LjEtMy45IDIwLjRjLTI2IDI1LTU5LjEgNDIuNy05NS45IDQ5LjktMTEuMS0yNS4zLTMwLjItNDYuMy01NC4xLTU5LjgtNy42LTYzLjQtNjEuNi0xMTIuNi0xMjcuMS0xMTIuNi0xMS4yIDAtMjIuMSAxLjUtMzIuNSA0LjItNC44LTQuMi05LjktOC4yLTE1LjItMTEuOC0uMS0yLjgtLjItNS42LS4yLTguNCAwLTEwNiA4Ni0xOTIgMTkyLTE5MnptLS4xIDQzMS45YzAgNDQuMi0zNS44IDgwLTgwIDgwbC0yNzEuOSAwYy01MyAwLTk2LTQzLTk2LTk2IDAtNDcuNiAzNC42LTg3IDgwLTk0LjYtLjQtNTIuOCA0Mi45LTk3LjMgOTYtOTcuMyAzNC45IDAgNjUuNCAxOC42IDgyLjIgNDYuNCAxMy05LjEgMjguOC0xNC40IDQ1LjgtMTQuNCA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDUuOS0uNiAxMS43LTEuOSAxNy4yIDM3LjQgNi43IDY1LjggMzkuNCA2NS44IDc4Ljd6Il0KICAgIH07CiAgICBmYUJveGVzU3RhY2tlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3hlcy1zdGFja2VkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjI2MjUsICJib3hlcyIsICJib3hlcy1hbHQiXSwgImY0NjgiLCAiTTIyNCAwbDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjQgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEyOGMwIDUuNS0uNyAxMC45LTIgMTZsLTI1MiAwYy0xLjMtNS4xLTItMTAuNS0yLTE2bDAtMTI4YzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyIDB6bTk2IDUxMmMtMTEuMiAwLTIxLjgtMi45LTMxLTggOS41LTE2LjUgMTUtMzUuNiAxNS01NmwwLTEyOGMwLTIwLjQtNS41LTM5LjUtMTUtNTYgOS4yLTUuMSAxOS43LTggMzEtOGwzMiAwIDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjQgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEyOGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMTI4IDB6TTAgMzIwYzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyIDAgMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC02NCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTI4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAzMjB6Il0KICAgIH07CiAgICBmYUJveGVzID0gZmFCb3hlc1N0YWNrZWQ7CiAgICBmYUJveGVzQWx0ID0gZmFCb3hlc1N0YWNrZWQ7CiAgICBmYUNvZGVCcmFuY2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29kZS1icmFuY2giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjEyNiIsICJNODAgMTA0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODAtMjRjMCAzMi44LTE5LjcgNjEtNDggNzMuM2wwIDcwLjcgMTc2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yMi43Yy0yOC4zLTEyLjMtNDgtNDAuNS00OC03My4zIDAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAzMi44LTE5LjcgNjEtNDggNzMuM2wwIDIyLjdjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJsLTE3NiAwIDAgNzAuN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zIDAgNDQuMi0zNS44IDgwLTgwIDgwUzAgNDc2LjIgMCA0MzJjMC0zMi44IDE5LjctNjEgNDgtNzMuM2wwLTIwNS4zQzE5LjcgMTQxIDAgMTEyLjggMCA4MCAwIDM1LjggMzUuOCAwIDgwIDBzODAgMzUuOCA4MCA4MHptMjMyIDBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNODAgNDU2YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhQmFuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODY4MywgImNhbmNlbCJdLCAiZjA1ZSIsICJNMzY3LjIgNDEyLjVMOTkuNSAxNDQuOGMtMjIuNCAzMS40LTM1LjUgNjkuOC0zNS41IDExMS4yIDAgMTA2IDg2IDE5MiAxOTIgMTkyIDQxLjUgMCA3OS45LTEzLjEgMTExLjItMzUuNXptNDUuMy00NS4zYzIyLjQtMzEuNCAzNS41LTY5LjggMzUuNS0xMTEuMiAwLTEwNi04Ni0xOTItMTkyLTE5Mi00MS41IDAtNzkuOSAxMy4xLTExMS4yIDM1LjVMNDEyLjUgMzY3LjJ6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6Il0KICAgIH07CiAgICBmYUNhbmNlbCA9IGZhQmFuOwogICAgZmFKdWdEZXRlcmdlbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAianVnLWRldGVyZ2VudCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNTE5IiwgIk05NiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjQgOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDg4IDk2Qzc0LjcgOTYgNjQgODUuMyA2NCA3MlM3NC43IDQ4IDg4IDQ4bDggMCAwLTI0ek0wIDI1NmMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOGwxMjggMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGwwIDE5MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjU2em0yNTYgMGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnoiXQogICAgfTsKICAgIGZhUmVwbHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVwbHkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTcxNCwgIm1haWwtcmVwbHkiXSwgImYzZTUiLCAiTTIwNC4yIDE4LjRjMTIgNSAxOS44IDE2LjYgMTkuOCAyOS42bDAgODAgMTEyIDBjOTcuMiAwIDE3NiA3OC44IDE3NiAxNzYgMCAxMTMuMy04MS41IDE2My45LTEwMC4yIDE3NC4xLTIuNSAxLjQtNS4zIDEuOS04LjEgMS45LTEwLjkgMC0xOS43LTguOS0xOS43LTE5LjcgMC03LjUgNC4zLTE0LjQgOS44LTE5LjUgOS40LTguOCAyMi4yLTI2LjQgMjIuMi01Ni43IDAtNTMtNDMtOTYtOTYtOTZsLTk2IDAgMCA4MGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOWwtMTYwLTE2MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsMTYwLTE2MGM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOXoiXQogICAgfTsKICAgIGZhTWFpbFJlcGx5ID0gZmFSZXBseTsKICAgIGZhU3VuUGxhbnRXaWx0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN1bi1wbGFudC13aWx0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1N2EiLCAiTTE2MCAwYy01LjUgMC0xMC42IDIuOC0xMy41IDcuNGwtMS4xIDIuMS0yNC44IDU1LjQtNTYuNy0yMS43Yy01LjktMi4yLTEyLjUtLjgtMTcgMy43UzQxIDU4IDQzLjIgNjMuOWwyMS43IDU2LjctNTUuNCAyNC44QzMuNyAxNDggMCAxNTMuNyAwIDE2MHMzLjcgMTIgOS41IDE0LjZsNTUuNCAyNC44LTIxLjcgNTYuN2MtMi4yIDUuOS0uOCAxMi41IDMuNyAxN3MxMS4xIDUuOSAxNyAzLjdsNTYuNy0yMS43IDI0LjggNTUuNGMyLjYgNS44IDguMyA5LjUgMTQuNiA5LjVzMTItMy43IDE0LjYtOS41bDI0LjgtNTUuNCA1Ni44IDIxLjdjNS45IDIuMiAxMi41IC44IDE3LTMuN3M1LjktMTEuMSAzLjctMTdsLTIxLjctNTYuNyA1NS40LTI0LjhjNS44LTIuNiA5LjUtOC4zIDkuNS0xNC42cy0zLjctMTItOS41LTE0LjZsLTU1LjQtMjQuOCAyMS43LTU2LjcgLjctMi4yYzEuMi01LjMtLjQtMTAuOS00LjMtMTQuOHMtOS41LTUuNS0xNC44LTQuM2wtMi4yIC43LTU2LjggMjEuNy0yNC44LTU1LjRDMTcyIDMuNyAxNjYuMyAwIDE2MCAwem0wIDk2YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4em0zMiA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0zNzYgMTZsMCA1My40Yy0xNC44IDcuNy0yNCAyMy4xLTI0IDQ0LjYgMCAxNi44IDE2IDQ0IDM3LjQgNjcuMiA1LjggNi4yIDE1LjUgNi4yIDIxLjIgMCAyMS40LTIzLjMgMzcuNC01MC42IDM3LjQtNjcuMiAwLTIxLjUtOS4yLTM3LTI0LTQ0LjZsMC01My40YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwbDAgMjIuN2MtOS44LTQuMy0yMC42LTYuNy0zMi02LjctNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyMS40Yy0xNC44IDcuNi0yNCAyMy4xLTI0IDQ0LjYgMCAxNi44IDE2IDQ0IDM3LjQgNjcuMiA1LjggNi4yIDE1LjUgNi4yIDIxLjIgMCAyMS40LTIzLjMgMzcuNC01MC42IDM3LjQtNjcuMiAwLTIxLjUtOS4yLTM3LTI0LTQ0LjZsMC0yMS40YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNzYtNDI0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTc2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEwNCAwIDAtMjcyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6Il0KICAgIH07CiAgICBmYUJhY3Rlcml1bSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWN0ZXJpdW0iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTA1YSIsICJNNDA4IDE2YzAtMTMuMy0xMC43LTI0LTI0LTI0UzM2MCAyLjcgMzYwIDE2bDAgMjMuNGMtMTMuOSA1LjMtMjYuOSAxMy41LTM4LjIgMjQuNUwzMDUgNDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTYuOCAxNi44LTMwLjEgMzAuMS0xNi44LTE2LjhjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTYuOCAxNi44Yy0xMCAxMC0yMCAyMC0zMC4xIDMwLjFMMTc3IDE3NWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxNi44IDE2LjgtMzAuMSAzMC4xLTE2LjgtMTYuOGMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxNi44IDE2LjhjLTExIDExLjMtMTkuMiAyNC4zLTI0LjUgMzguMkw0OCAzMjhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTYuMyAwYzEuMyAxOC4zIDcuMSAzNi40IDE3LjQgNTIuNEw3MSA0MzljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwxMC42LTEwLjZjMTYgMTAuMyAzNC4xIDE2LjEgNTIuNCAxNy40bDAgMTYuM2MwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjMuNGMxMy45LTUuMyAyNi45LTEzLjUgMzguMi0yNC41TDI3MSA0NjVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xNi44LTE2LjggMzAuMS0zMC4xIDE2LjggMTYuOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTE2LjgtMTYuOGMxMC0xMCAyMC0yMCAzMC4xLTMwLjFMMzk5IDMzN2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTE2LjgtMTYuOCAzMC4xLTMwLjEgMTYuOCAxNi44YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTYuOC0xNi44YzExLTExLjMgMTkuMi0yNC4zIDI0LjUtMzguMmwyMy40IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE2LjMgMGMtMS4zLTE4LjMtNy4xLTM2LjQtMTcuNC01Mi40TDUwNSA3M2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDQ2MC40IDQ5LjdjLTE2LTEwLjMtMzQuMS0xNi4xLTUyLjQtMTcuNEw0MDggMTZ6TTE2MCAzNTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMjcyIDI0MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVJlY29yZFZpbnlsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJlY29yZC12aW55bCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmOGQ5IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNTYtOTZhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6bTAgMjQwYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC0xMTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFGbG9wcHlEaXNrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmbG9wcHktZGlzayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODE5MCwgMTI4NDI2LCAic2F2ZSJdLCAiZjBjNyIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI0Mi43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDM1MiA1MC43QzM0MCAzOC43IDMyMy43IDMyIDMwNi43IDMyTDY0IDMyem0zMiA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xNjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NHpNMjI0IDI4OGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHoiXQogICAgfTsKICAgIGZhU2F2ZTIgPSBmYUZsb3BweURpc2syOwogICAgZmFUb2lsZXRzUG9ydGFibGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9pbGV0cy1wb3J0YWJsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTg0IiwgIk02NCAwbDk2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNi0yMjQgMCAwLTE2QzAgMjguNyAyOC43IDAgNjQgMHpNMCAxMjhsMjI0IDAgMCAzNjBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04LTEyOCAwIDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNFMwIDUwMS4zIDAgNDg4TDAgMTI4ek0xMjggMjQ4bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMjQgMCAwLTk2LTI0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0ek0zNTIgMGw5NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTYtMjI0IDAgMC0xNmMwLTM1LjMgMjguNy02NCA2NC02NHpNMjg4IDEyOGwyMjQgMCAwIDM2MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTgtMTI4IDAgMCA4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMzYwek00MTYgMjQ4bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMjQgMCAwLTk2LTI0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0eiJdCiAgICB9OwogICAgZmFPID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm8iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMTFdLCAiNGYiLCAiTTIyNCA5NmExNjAgMTYwIDAgMSAwIDAgMzIwIDE2MCAxNjAgMCAxIDAgMC0zMjB6TTQ0OCAyNTZhMjI0IDIyNCAwIDEgMSAtNDQ4IDAgMjI0IDIyNCAwIDEgMSA0NDggMHoiXQogICAgfTsKICAgIGZhUGFsZXR0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYWxldHRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTEyXSwgImY1M2YiLCAiTTUxMiAyNTZjMCAuOSAwIDEuOCAwIDIuNy0uNCAzNi41LTMzLjYgNjEuMy03MC4xIDYxLjNMMzQ0IDMyMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDggMCAzLjQgLjQgNi43IDEgOS45IDIuMSAxMC4yIDYuNSAyMCAxMC44IDI5LjkgNi4xIDEzLjggMTIuMSAyNy41IDEyLjEgNDIgMCAzMS44LTIxLjYgNjAuNy01My40IDYyLTMuNSAuMS03IC4yLTEwLjYgLjItMTQxLjQgMC0yNTYtMTE0LjYtMjU2LTI1NlMxMTQuNiAwIDI1NiAwIDUxMiAxMTQuNiA1MTIgMjU2ek0xMjggMjg4YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTAtOTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0yODggOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptOTYgOTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFVbmxvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidW5sb2NrIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4Mjc1XSwgImYwOWMiLCAiTTEyOCA5NmMwLTM1LjMgMjguNy02NCA2NC02NCAzMS43IDAgNTggMjMgNjMuMSA1My4zIDIuOSAxNy40IDE5LjQgMjkuMiAzNi45IDI2LjNzMjkuMi0xOS40IDI2LjMtMzYuOUMzMDguMSAxNC4xIDI1NS41LTMyIDE5Mi0zMiAxMjEuMy0zMiA2NCAyNS4zIDY0IDk2bDAgNjRjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0xOTIgMCAwLTY0eiJdCiAgICB9OwogICAgZmFFYXJMaXN0ZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWFyLWxpc3RlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhc3Npc3RpdmUtbGlzdGVuaW5nLXN5c3RlbXMiXSwgImYyYTIiLCAiTTM3OS42IC4zYy04LjkgMS4yLTE3LjIgNi4yLTIyLjQgMTQuMS02LjggMTAuNC03IDI0LjEtLjQgMzQuNiA1LjYgOC45IDE1LjUgMTIuNyAyMy44IDE4LjUgNy41IDUuMiAxNy42IDEzLjIgMjcuNyAyNC4yIDIwIDIxLjcgMzkuNSA1NC4zIDM5LjUgMTAwLjMgMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTY2LTI4LjUtMTEzLjQtNTYuNS0xNDMuNy0xMy45LTE1LjEtMjcuOC0yNi4xLTM4LjMtMzMuMy0xMS03LjYtMjMuNS0xNi42LTM3LjYtMTQuN3pNMjQwIDEyOGMtNTcuNiAwLTEwNS4xIDQzLjYtMTExLjMgOTkuNS0xLjkgMTcuNi0xNy44IDMwLjItMzUuMyAyOC4zcy0zMC4yLTE3LjgtMjguMy0zNS4zYzkuNy04OCA4NC4zLTE1Ni41IDE3NC45LTE1Ni41IDk3LjIgMCAxNzYgNzguOCAxNzYgMTc2IDAgNDYtMTcuNyA4Ny45LTQ2LjYgMTE5LjMtMTIgMTMtMTcuNCAyNC44LTE3LjQgMzQuN2wwIDYuMWMwIDYxLjktNTAuMSAxMTItMTEyIDExMi0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNi4xYzAtMzIuOSAxNy40LTU5LjYgMzQuNC03OCAxOC40LTIwIDI5LjYtNDYuNiAyOS42LTc1LjkgMC02MS45LTUwLjEtMTEyLTExMi0xMTJ6TTAgNDgwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2MC05NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTg2LjYgMzYxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0ek0yNDAgMjA4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdCiAgICB9OwogICAgZmFBc3Npc3RpdmVMaXN0ZW5pbmdTeXN0ZW1zID0gZmFFYXJMaXN0ZW47CiAgICBmYUNvZGVQdWxsUmVxdWVzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb2RlLXB1bGwtcmVxdWVzdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMTNjIiwgIk0zMjggMjRjMC05LjctNS44LTE4LjUtMTQuOC0yMi4yUzI5My45IC4yIDI4NyA3TDIzMSA2M2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNTYgNTZjNi45IDYuOSAxNy4yIDguOSAyNi4yIDUuMlMzMjggMTQ1LjcgMzI4IDEzNmwwLTI0IDI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyMTQuN2MtMjguMyAxMi4zLTQ4IDQwLjUtNDggNzMuMyAwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMzIuOC0xOS43LTYxLTQ4LTczLjNMNDQ4IDE0NGMwLTUzLTQzLTk2LTk2LTk2bC0yNCAwIDAtMjR6TTcyIDgwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTU2IDczLjNjMjguMy0xMi4zIDQ4LTQwLjUgNDgtNzMuMyAwLTQ0LjItMzUuOC04MC04MC04MFMxNiAzNS44IDE2IDgwYzAgMzIuOCAxOS43IDYxIDQ4IDczLjNsMCAyMDUuM2MtMjguMyAxMi4zLTQ4IDQwLjUtNDggNzMuMyAwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMzIuOC0xOS43LTYxLTQ4LTczLjNsMC0yMDUuM3pNNzIgNDMyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTM0NC0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYUtleSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJrZXkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNzNdLCAiZjA4NCIsICJNMzM2IDM1MmM5Ny4yIDAgMTc2LTc4LjggMTc2LTE3NlM0MzMuMiAwIDMzNiAwIDE2MCA3OC44IDE2MCAxNzZjMCAxOC43IDIuOSAzNi44IDguMyA1My43TDcgMzkxYy00LjUgNC41LTcgMTAuNi03IDE3bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQwIDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00MCA0MCAwYzYuNCAwIDEyLjUtMi41IDE3LTdsMzMuMy0zMy4zYzE2LjkgNS40IDM1IDguMyA1My43IDguM3pNMzc2IDk2YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHoiXQogICAgfTsKICAgIGZhU2t1bGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2t1bGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxMjhdLCAiZjU0YyIsICJNNDE2IDQyNy40YzU4LjUtNDQgOTYtMTExLjYgOTYtMTg3LjQgMC0xMzIuNS0xMTQuNi0yNDAtMjU2LTI0MFMwIDEwNy41IDAgMjQwYzAgNzUuOCAzNy41IDE0My40IDk2IDE4Ny40TDk2IDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDY0IDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgMzIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM2LjZ6TTk2IDI1NmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6bTI1Ni02NGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHoiXQogICAgfTsKICAgIGZhTWFyc1N0cm9rZVVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnMtc3Ryb2tlLXVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTg5NiwgIm1hcnMtc3Ryb2tlLXYiXSwgImYyMmEiLCAiTTE5MiAyNTZhMTEyIDExMiAwIDEgMCAwIDIyNCAxMTIgMTEyIDAgMSAwIDAtMjI0ek0xNiAzNjhjMC04Ni4zIDYyLjEtMTU4LjEgMTQ0LjEtMTczLjEtLjEtLjktLjEtMS45LS4xLTIuOWwwLTE2LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTYxLjQtMjggMjIuNGMtMTMuOCAxMS0zMy45IDguOC00NS01cy04LjgtMzMuOSA1LTQ1bDgwLTY0YzExLjctOS4zIDI4LjMtOS4zIDQwIDBsODAgNjRjMTMuOCAxMSAxNiAzMS4yIDUgNDVzLTMxLjIgMTYtNDUgNWwtMjgtMjIuNCAwIDYxLjQgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDE2YzAgMSAwIDEuOS0uMSAyLjkgODIgMTUgMTQ0LjEgODYuOCAxNDQuMSAxNzMuMSAwIDk3LjItNzguOCAxNzYtMTc2IDE3NlMxNiA0NjUuMiAxNiAzNjh6Il0KICAgIH07CiAgICBmYU1hcnNTdHJva2VWID0gZmFNYXJzU3Ryb2tlVXA7CiAgICBmYUZpcmVGbGFtZVNpbXBsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaXJlLWZsYW1lLXNpbXBsZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJidXJuIl0sICJmNDZhIiwgIk0zNzIuNSAyNTYuNWwtLjctMS45QzMzNy44IDE2MC44IDI4MiA3Ni41IDIwOS4xIDguNWwtMy4zLTNDMjAyLjEgMiAxOTcuMSAwIDE5MiAwcy0xMC4xIDItMTMuOCA1LjVsLTMuMyAzQzEwMiA3Ni41IDQ2LjIgMTYwLjggMTIuMiAyNTQuNmwtLjcgMS45QzMuOSAyNzcuMyAwIDI5OS40IDAgMzIxLjYgMCA0MjYuNyA4Ni44IDUxMiAxOTIgNTEyczE5Mi04NS4zIDE5Mi0xOTAuNGMwLTIyLjItMy45LTQ0LjItMTEuNS02NS4xem0tOTAuOCA0OS41YzQuMSA5LjMgNi4yIDE5LjQgNi4yIDI5LjUgMCA1My00MyA5Ni41LTk2IDk2LjVzLTk2LTQzLjUtOTYtOTYuNWMwLTEwLjEgMi4xLTIwLjMgNi4yLTI5LjVsMS45LTQuM2MxNS44LTM1LjQgMzcuOS02Ny43IDY1LjMtOTUuMWw4LjktOC45YzMuNi0zLjYgOC41LTUuNiAxMy42LTUuNnMxMCAyIDEzLjYgNS42bDguOSA4LjljMjcuNCAyNy40IDQ5LjYgNTkuNyA2NS4zIDk1LjFsMS45IDQuM3oiXQogICAgfTsKICAgIGZhQnVybiA9IGZhRmlyZUZsYW1lU2ltcGxlOwogICAgZmFUcmVlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyZWUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc3OTRdLCAiZjFiYiIsICJNMjI0LTMyYzcgMCAxMy43IDMuMSAxOC4zIDguNWwxMzYgMTYwYzYuMSA3LjEgNy40IDE3LjEgMy41IDI1LjZTMzY5LjQgMTc2IDM2MCAxNzZsLTI0LjkgMCA3NS4yIDg4LjVjNi4xIDcuMSA3LjQgMTcuMSAzLjUgMjUuNlM0MDEuNCAzMDQgMzkyIDMwNGwtMzguNSAwIDg4LjggMTA0LjVjNi4xIDcuMSA3LjQgMTcuMSAzLjUgMjUuNlM0MzMuNCA0NDggNDI0IDQ0OGwtMTY4IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0LTE2OCAwYy05LjQgMC0xNy45LTUuNC0yMS44LTEzLjlzLTIuNi0xOC41IDMuNS0yNS42TDk0LjUgMzA0IDU2IDMwNGMtOS40IDAtMTcuOS01LjQtMjEuOC0xMy45cy0yLjYtMTguNSAzLjUtMjUuNkwxMTIuOSAxNzYgODggMTc2Yy05LjQgMC0xNy45LTUuNC0yMS44LTEzLjlzLTIuNi0xOC41IDMuNS0yNS42bDEzNi0xNjBDMjEwLjMtMjguOSAyMTctMzIgMjI0LTMyeiJdCiAgICB9OwogICAgZmFTbW9nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNtb2ciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjc1ZiIsICJNMTc2IDI4OEM5Ni41IDI4OCAzMiAyMjMuNSAzMiAxNDRTOTYuNSAwIDE3NiAwYzI3LjIgMCA1Mi42IDcuNSA3NC4zIDIwLjYgMjAuMS0xMyA0NC0yMC42IDY5LjctMjAuNiA0Ny40IDAgODguNyAyNS43IDExMC45IDY0bDEuMSAwYzYxLjkgMCAxMTIgNTAuMSAxMTIgMTEyIDAgNjAuMy00Ny42IDEwOS40LTEwNy4yIDExMS45LTIyLjYgMjAtNTIuMyAzMi4xLTg0LjggMzIuMS0zMi41IDAtNjIuMS0xMi4xLTg0LjctMzJMMTc2IDI4OHpNNTEyIDM5MmMwIDEzLjMtMTAuNyAyNC0yNCAyNEwyNCA0MTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjR6TTg4IDQ2NGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0xNzYgMGwyODggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjg4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYVMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzExNV0sICI1MyIsICJNMCAxNTcuNUMwIDg4LjIgNTYuMiAzMiAxMjUuNSAzMkwyNzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMTI1LjUgOTZjLTM0IDAtNjEuNSAyNy41LTYxLjUgNjEuNSAwIDMxIDIzLjEgNTcuMiA1My45IDYxTDIxMC4xIDIzMEMyNzIuOSAyMzcuOSAzMjAgMjkxLjIgMzIwIDM1NC41IDMyMCA0MjMuOCAyNjMuOCA0ODAgMTk0LjUgNDgwTDQ4IDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNDYuNSAwYzM0IDAgNjEuNS0yNy41IDYxLjUtNjEuNSAwLTMxLTIzLjEtNTcuMi01My45LTYxTDEwOS45IDI4MkM0Ny4xIDI3NC4xIDAgMjIwLjggMCAxNTcuNXoiXQogICAgfTsKICAgIGZhSmVkaSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJqZWRpIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2NjkiLCAiTTI0NiAzMTUuN2wtMjEuMi0zMS45Yy0yLjEtMy4yLTEuNy03LjQgMS0xMC4xczYuOS0zLjEgMTAuMS0xbDI5LjUgMTkuN2MyLjEgMS40IDQuOS0uMSA1LTIuNkwyNzkuNyA4Yy4xLTQuNSAzLjgtOCA4LjMtOHM4LjEgMy41IDguMyA4bDkuNCAyODEuOWMuMSAyLjUgMi45IDMuOSA1IDIuNmwyOS41LTE5LjdjMy4yLTIuMSA3LjQtMS43IDEwLjEgMXMzLjEgNi45IDEgMTAuMUwzMzAgMzE1LjdjLTEuMyAxLjktLjIgNC41IDIgNC45bDM3LjYgNy41YzMuNyAuNyA2LjQgNCA2LjQgNy44cy0yLjcgNy4xLTYuNCA3LjhMMzMyIDM1MS40Yy0yLjIgLjQtMy4zIDMtMiA0LjlsMjEuMiAzMS45YzIuMSAzLjIgMS43IDcuNC0xIDEwLjFzLTYuOSAzLjEtMTAuMSAxbC0yNi4zLTE3LjZjLTIuMi0xLjQtNS4xIC4yLTUgMi44bDIuMSA2MS41YzU5LjgtMTAuOCAxMDUuMS02My4xIDEwNS4xLTEyNiAwLTM3LTE1LjctNzAuNC00MC44LTkzLjctNy02LjUtNi41LTE4LjYgMS0yNC40IDM0LTI2LjMgNTUuOC02Ny41IDU1LjgtMTEzLjkgMC0xNi44LTIuOS0zMy04LjItNDgtNC42LTEzIDEwLjItMzAgMjEuNC0yMiA1My41IDM4IDkyLjcgOTQuOCAxMDcuOCAxNjAuNyAuNSAyLjEtLjIgNC4zLTEuNyA1LjlsLTI4LjQgMjguNGMtNCA0LTEuMiAxMC45IDQuNSAxMC45bDI2IDBjMy40IDAgNi4yIDIuNiA2LjMgNiAuMSAzLjMgLjIgNi42IC4yIDEwIDAgMTcuNS0xLjcgMzQuNy00LjggNTEuMy0uMiAxLjItLjkgMi40LTEuNyAzLjNsLTQ2LjUgNDYuNWMtNCA0LTEuMiAxMC45IDQuNSAxMC45bDE0LjYgMGM0LjYgMCA3LjcgNC44IDUuNyA5LTQ0LjUgODkuNS0xMzYuOSAxNTEtMjQzLjcgMTUxUzg4LjggNDUwLjUgNDQuMyAzNjFjLTIuMS00LjIgMS05IDUuNy05bDE0LjYgMGM1LjcgMCA4LjYtNi45IDQuNS0xMC45TDIyLjYgMjk0LjZjLS45LS45LTEuNS0yLTEuNy0zLjMtMy4yLTE2LjYtNC44LTMzLjgtNC44LTUxLjMgMC0zLjMgLjEtNi43IC4yLTEwIC4xLTMuNCAyLjktNiA2LjMtNmwyNiAwYzUuNyAwIDguNi02LjkgNC41LTEwLjlMMjQuNiAxODQuNmMtMS41LTEuNS0yLjItMy44LTEuNy01LjkgMTUuMi02NiA1NC4zLTEyMi44IDEwNy44LTE2MC43IDExLjMtOCAyNiA4LjkgMjEuNCAyMi01LjMgMTUtOC4yIDMxLjItOC4yIDQ4IDAgNDYuMyAyMS45IDg3LjUgNTUuOCAxMTMuOSA3LjUgNS44IDggMTcuOSAxIDI0LjQtMjUuMSAyMy40LTQwLjggNTYuNy00MC44IDkzLjcgMCA2Mi45IDQ1LjQgMTE1LjIgMTA1LjEgMTI2bDIuMS02MS41Yy4xLTIuNi0yLjgtNC4yLTUtMi44bC0yNi4zIDE3LjZjLTMuMiAyLjEtNy40IDEuNy0xMC4xLTFzLTMuMS02LjktMS0xMC4xTDI0NiAzNTYuM2MxLjMtMS45IC4yLTQuNS0yLTQuOWwtMzcuNi03LjVjLTMuNy0uNy02LjQtNC02LjQtNy44czIuNy03LjEgNi40LTcuOGwzNy42LTcuNWMyLjItLjQgMy4zLTMgMi00Ljl6Il0KICAgIH07CiAgICBmYVBlcnNvbkhpa2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24taGlraW5nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImhpa2luZyJdLCAiZjZlYyIsICJNMTkyLTMyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyek0xMjggMTczLjZjMC0zNCAyNy42LTYxLjYgNjEuNi02MS42IDIwLjMgMCAzOS43IDguMSA1NCAyMi40bDQ4LjIgNDguMmM2IDYgMTQuMSA5LjQgMjIuNiA5LjRsMzcuNSAwYzUuOCAwIDExLjMgMS42IDE2IDQuM2wwLTc2LjNjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwMGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTI2OC4zYy00LjcgMi43LTEwLjIgNC4zLTE2IDQuM2wtMzcuNSAwYy0yNS41IDAtNDkuOS0xMC4xLTY3LjktMjguMWwtNi42LTYuNiAwIDEwOS4yIDM0LjUgMjkuNmMxNy43IDE1LjIgMjkuMyAzNi4yIDMyLjYgNTkuM2wxMi42IDg4LjFjMi41IDE3LjUtOS43IDMzLjctMjcuMiAzNi4ycy0zMy43LTkuNy0zNi4yLTI3LjJsLTEyLjYtODguMWMtMS4xLTcuNy01LTE0LjctMTAuOS0xOS44bC03MS40LTYxLjJjLTIxLjMtMTguMi0zMy41LTQ0LjktMzMuNS03Mi45bDAtMTAxem0tNC44IDIwMy43YzIuMyAyLjMgNC43IDQuNCA3LjEgNi41bDQ0LjkgMzguNWMtMy42IDguNC04LjUgMTYuMy0xNC40IDIzLjRMODguNiA1MzIuNWMtMTEuMyAxMy42LTMxLjUgMTUuNC00NS4xIDQuMXMtMTUuNC0zMS41LTQuMS00NS4xbDcyLjMtODYuN2MyLjYtMy4xIDQuNS02LjYgNS44LTEwLjRsNS43LTE3LjF6TTAgMTYwYzAtMzUuMyAyOC43LTY0IDY0LTY0IDE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2eiJdCiAgICB9OwogICAgZmFIaWtpbmcgPSBmYVBlcnNvbkhpa2luZzsKICAgIGZhQXJyb3dzVXBUb0xpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXVwLXRvLWxpbmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTRjMiIsICJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NGwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMlM0MzMuNyAwIDQxNiAwTDMyIDB6bTg2LjYgMTM3LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw2NCAyMzcuMyA2NCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI0Mi43IDkuNCA5LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjR6bTI1NiAwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsOS40LTkuNCAwIDI0Mi43YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNDIuNyA5LjQgOS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0eiJdCiAgICB9OwogICAgZmFNYXJzRG91YmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnMtZG91YmxlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbOTg5MV0sICJmMjI3IiwgIk0yODggMzJjMC0xNy43IDE0LjMtMzIgMzItMzJMNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC01MC43LTk1IDk1YzE5LjUgMjguNCAzMSA2Mi43IDMxIDk5LjggMCA5Ny4yLTc4LjggMTc2LTE3NiAxNzZTMCA0MDEuMiAwIDMwNCA3OC44IDEyOCAxNzYgMTI4YzM3IDAgNzEuNCAxMS40IDk5LjggMzFsOTUtOTUtNTAuNyAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTc2IDQxNmExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6bTE2MCA2NGMtNi44IDAtMTMuNC0uNC0yMC0xLjEgMjMuNi0xOC45IDQzLjMtNDIuNSA1Ny42LTY5LjQgNDMuMy0xNS41IDc0LjQtNTYuOSA3NC40LTEwNS41IDAtMjUuMi04LjMtNDguNS0yMi40LTY3LjIgNy4xIDIuMSAxNC42IDMuMiAyMi40IDMuMiAxNyAwIDMyLjctNS4zIDQ1LjctMTQuMyAxMS43IDIzLjYgMTguMyA1MC4yIDE4LjMgNzguMyAwIDk3LjItNzguOCAxNzYtMTc2IDE3NnpNNTI4IDE1Ny4zTDUyOCAzMmMwLTExLjQtMi40LTIyLjItNi43LTMyTDYwOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNTAuNy00OCA0OHoiXQogICAgfTsKICAgIGZhVGhlcm1vbWV0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGhlcm1vbWV0ZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQ5MSIsICJNOTYgMzgyLjFsMC04OC44YzAtMTQuOSA1LjktMjkuMSAxNi40LTM5LjZsMjEuNy0yMS43IDQxIDQxYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNDEtNDEgNDYuMS00Ni4xIDQxIDQxYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNDEtNDEgNDYuMS00Ni4xIDQxIDQxYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNDEtNDEgNy44LTcuOGMxOS40LTE5LjQgNDUuNi0zMC4yIDczLTMwLjIgNTcgMCAxMDMuMiA0Ni4yIDEwMy4yIDEwMy4yIDAgMjcuNC0xMC45IDUzLjYtMzAuMiA3M0wyNTguMyAzOTkuNmMtMTAuNSAxMC41LTI0LjcgMTYuNC0zOS42IDE2LjRsLTg4LjggMC04OSA4OWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBTLTIuMyA0ODAuNCA3IDQ3MWw4OS04OXoiXQogICAgfTsKICAgIGZhUGFpbnRicnVzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYWludGJydXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4Mzk2LCAicGFpbnQtYnJ1c2giXSwgImYxZmMiLCAiTTQ4MC41IDEwLjNMMjU5LjEgMTU4Yy0yOS4xIDE5LjQtNDcuNiA1MC45LTUwLjYgODUuMyA2Mi4zIDEyLjggMTExLjQgNjEuOSAxMjQuMyAxMjQuMyAzNC41LTMgNjUuOS0yMS41IDg1LjMtNTAuNkw1NjUuNyA5NS41YzYuNy0xMC4xIDEwLjMtMjEuOSAxMC4zLTM0LjEgMC0zMy45LTI3LjUtNjEuNC02MS40LTYxLjQtMTIuMSAwLTI0IDMuNi0zNC4xIDEwLjN6TTI4OCA0MDBjMC02MS45LTUwLjEtMTEyLTExMi0xMTJTNjQgMzM4LjEgNjQgNDAwYzAgMy45IC4yIDcuOCAuNiAxMS42IDEuOCAxNy41LTEwLjIgMzYuNC0yNy44IDM2LjRMMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE0NCAwYzYxLjkgMCAxMTItNTAuMSAxMTItMTEyeiJdCiAgICB9OwogICAgZmFQYWludEJydXNoID0gZmFQYWludGJydXNoOwogICAgZmFOZXV0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibmV1dGVyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTkwNl0sICJmMjJjIiwgIk04MCAxNzZhMTEyIDExMiAwIDEgMSAyMjQgMCAxMTIgMTEyIDAgMSAxIC0yMjQgMHpNMjIzLjkgMzQ5LjFDMzA1LjkgMzM0LjEgMzY4IDI2Mi4zIDM2OCAxNzYgMzY4IDc4LjggMjg5LjIgMCAxOTIgMFMxNiA3OC44IDE2IDE3NmMwIDg2LjMgNjIuMSAxNTguMSAxNDQuMSAxNzMuMS0uMSAxLS4xIDEuOS0uMSAyLjlsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTEgMC0xLjktLjEtMi45eiJdCiAgICB9OwogICAgZmFTcXVhcmVQaG9uZUZsaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXBob25lLWZsaXAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsicGhvbmUtc3F1YXJlLWFsdCJdLCAiZjg3YiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptMjMyIDk2LjdsMi44IC44YzMyLjMgOC44IDU5LjkgNDAuMSA1MS44IDc4LjItMTguNSA4Ny41LTg3LjQgMTU2LjMtMTc0LjkgMTc0LjktMzguMSA4LjEtNjkuNC0xOS41LTc4LjItNTEuOGwtLjgtMi44Yy0yLjctOS44IDIuNC0yMC4xIDExLjgtMjRsNDguNy0yMC4zYzguMy0zLjQgMTcuOC0xLjEgMjMuNSA1LjlsMTkuMyAyMy42YzM1LjEtMTcuNCA2My40LTQ2LjYgNzkuNi04Mi40bC0yMi4xLTE4Yy02LjktNS43LTkuMy0xNS4yLTUuOS0yMy41bDIwLjMtNDguN2MzLjktOS40IDE0LjItMTQuNCAyNC0xMS44eiJdCiAgICB9OwogICAgZmFQaG9uZVNxdWFyZUFsdCA9IGZhU3F1YXJlUGhvbmVGbGlwOwogICAgZmFGYWNlR3JpblRvbmd1ZVNxdWludDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXRvbmd1ZS1zcXVpbnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDEsICJncmluLXRvbmd1ZS1zcXVpbnQiXSwgImY1OGEiLCAiTTAgMjU2YzAgMTA0LjQgNjIuNSAxOTQuMiAxNTIuMiAyMzQuMS01LjMtMTMtOC4yLTI3LjItOC4yLTQyLjFsMC02MS43Yy0xNi45LTE2LjUtMzAuMS0zNi43LTM4LjMtNTkuMy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjFjMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTguMyAyMi42LTIxLjUgNDIuOC0zOC4zIDU5LjNsMCA2MS43YzAgMTQuOS0yLjkgMjkuMS04LjIgNDIuMSA4OS43LTM5LjggMTUyLjItMTI5LjYgMTUyLjItMjM0LjEgMC0xNDEuNC0xMTQuNi0yNTYtMjU2LTI1NlMwIDExNC42IDAgMjU2em0xMjUuOC05MS43Yy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xczEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDE5MiAxMjUuOCAxNjQuM3ptMjYzLjYtMjEuMWM0LjUgNi44IDMuMSAxNS45LTMuMSAyMS4xTDM1MyAxOTIgMzg2LjIgMjE5LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjV6TTMyMCA0NDhsMC00NS40YzAtMTQuNy0xMS45LTI2LjYtMjYuNi0yNi42bC0yIDBjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjktMi44IDEyLjYtMjAuOCAxMi42LTIzLjYgMC0yLjUtMTEuMS0xMi4zLTE4LjktMjMuNi0xOC45bC0yIDBjLTE0LjcgMC0yNi42IDExLjktMjYuNiAyNi42bDAgNDUuNGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdCiAgICB9OwogICAgZmFHcmluVG9uZ3VlU3F1aW50MiA9IGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQyOwogICAgZmFDb21tZW50RG9sbGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbW1lbnQtZG9sbGFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2NTEiLCAiTTI1NiA0ODBjMTQxLjQgMCAyNTYtMTA3LjUgMjU2LTI0MFMzOTcuNCAwIDI1NiAwIDAgMTA3LjUgMCAyNDBjMCA1NC4zIDE5LjIgMTA0LjMgNTEuNiAxNDQuNUwyLjggNDc2LjhjLTQuOCA5LTMuMyAyMCAzLjYgMjcuNXMxNy44IDkuOCAyNy4xIDUuOGwxMTguNC01MC43QzE4My43IDQ3Mi42IDIxOC45IDQ4MCAyNTYgNDgwem00LTM1MmMxMSAwIDIwIDkgMjAgMjBsMCA0IDggMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjBsLTQ3LjUgMGMtNi45IDAtMTIuNSA1LjYtMTIuNSAxMi41IDAgNi4xIDQuNCAxMS4zIDEwLjQgMTIuM2w0MS43IDdjMjUuMyA0LjIgNDMuOSAyNi4xIDQzLjkgNTEuOCAwIDI2LjEtMTkgNDcuNy00NCA1MS44bDAgNC43YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTQtMjQgMGMtMTEgMC0yMC05LTIwLTIwczktMjAgMjAtMjBsNTUuNSAwYzYuOSAwIDEyLjUtNS42IDEyLjUtMTIuNSAwLTYuMS00LjQtMTEuMy0xMC40LTEyLjNsLTQxLjctN2MtMjUuMy00LjItNDMuOS0yNi4xLTQzLjktNTEuOCAwLTI4LjggMjMuMi01Mi4yIDUyLTUyLjVsMC00YzAtMTEgOS0yMCAyMC0yMHoiXQogICAgfTsKICAgIGZhSGlwcG8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGlwcG8iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjk0MzVdLCAiZjZlZCIsICJNNDA3IDQ3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDE3LjIgMTcuMmMxLjktLjEgMy45LS4yIDUuOC0uMmwzMiAwYzExLjIgMCAyMS45IDIuMyAzMS42IDYuNUw1NDMgNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDU2NCAxMDEuOWM3LjYgMTIuMiAxMiAyNi43IDEyIDQyLjEgMCAxMC4yIDcuNCAxOC44IDE2LjcgMjMgMjcuOSAxMi41IDQ3LjMgNDAuNSA0Ny4zIDczIDAgMjYuMi0xMi42IDQ5LjQtMzIgNjRsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2LTY0IDAgMCAxNmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE3LjZjLTExLjgtMi40LTIyLjctNy40LTMyLTE0LjQtMS41LTEuMS0yLjktMi4zLTQuMy0zLjUtMTctMTQuNy0yNy43LTM2LjQtMjcuNy02MC41IDAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2YzAgNDQuNyAyNi4yIDgzLjIgNjQgMTAxLjJsMCAxMC44YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC03NmMtMTkuOCA3LjctNDEuNCAxMi02NCAxMnMtNDQuMi00LjMtNjQtMTJsMCA3NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMTguOS0xOC4xIDQwLjdjLTUuNCAxMi4xLTE5LjYgMTcuNi0zMS43IDEyLjJTLTMuMyAzNjIuNCAyLjEgMzUwLjNMMjQgMzAwLjljNS4zLTExLjkgOC0yNC43IDgtMzcuNyAwLTEwNy41IDg1LjItMTk1LjIgMTkxLjgtMTk5LjFsLjItLjEgNjQgMGM0MS43IDAgODMuNCAxMi4xIDExNy4yIDI1LjcgMS43LTEuOCAzLjUtMy42IDUuMy01LjJMNDA3IDgxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXptNzMgMTg1YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bTg4IDI0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHpNNDgwIDE0NGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem00OCAxNmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6Il0KICAgIH07CiAgICBmYUJvd2xGb29kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvd2wtZm9vZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGM2IiwgIk0wIDE3NmMwLTM1LjMgMjguNy02NCA2NC02NCAuNSAwIDEuMSAwIDEuNiAwIDcuNC0zNi41IDM5LjctNjQgNzguNC02NCAxNSAwIDI5IDQuMSA0MC45IDExLjIgMTMuMy0yNS43IDQwLjEtNDMuMiA3MS4xLTQzLjJzNTcuOCAxNy42IDcxLjEgNDMuMmMxMi03LjEgMjYtMTEuMiA0MC45LTExLjIgMzguNyAwIDcxIDI3LjUgNzguNCA2NCAuNSAwIDEuMSAwIDEuNiAwIDM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMTEuNy0zLjEgMjIuNi04LjYgMzJMOC42IDIwOEMzLjEgMTk4LjYgMCAxODcuNyAwIDE3NnpNMCAyODMuNEMwIDI2OC4zIDEyLjMgMjU2IDI3LjQgMjU2bDQ1Ny4xIDBjMTUuMSAwIDI3LjQgMTIuMyAyNy40IDI3LjQgMCA3MC41LTQ0LjQgMTMwLjctMTA2LjcgMTU0LjFMNDAzLjUgNDUyYy0yIDE2LTE1LjYgMjgtMzEuOCAyOGwtMjMxLjUgMGMtMTYuMSAwLTI5LjgtMTItMzEuOC0yOGwtMS44LTE0LjRDNDQuNCA0MTQuMSAwIDM1My45IDAgMjgzLjR6Il0KICAgIH07CiAgICBmYVNxdWFyZVZpcnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS12aXJ1cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNTc4IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem0xNjAgODBjMTMuMyAwIDI0IDEwLjcgMjQgMjQgMCAyMi45IDI3LjcgMzQuNCA0My45IDE4LjIgOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy0xNi4yIDE2LjItNC43IDQzLjkgMTguMiA0My45IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yMi45IDAtMzQuNCAyNy43LTE4LjIgNDMuOSA5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwYy0xNi4yLTE2LjItNDMuOS00LjctNDMuOSAxOC4yIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMjIuOS0yNy43LTM0LjQtNDMuOS0xOC4yLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjljMTYuMi0xNi4yIDQuNy00My45LTE4LjItNDMuOS0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzIyLjkgMCAzNC40LTI3LjcgMTguMi00My45LTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGMxNi4yIDE2LjIgNDMuOSA0LjcgNDMuOS0xOC4yIDAtMTMuMyAxMC43LTI0IDI0LTI0ek0xOTIgMjQ4YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODggNDBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhQ2xvdWRTdW5SYWluID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLXN1bi1yYWluIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI3NzgyXSwgImY3NDMiLCAiTTMwMy4yLTMuMmMtMS4xLTUuMi00LjYtOS41LTkuNS0xMS42cy0xMC41LTEuNS0xNC45IDEuNEwyMDggMzMuNiAxMzcuMy0xMy4zYy00LjQtMi45LTEwLTMuNS0xNC45LTEuNHMtOC41IDYuNC05LjUgMTEuNkw5NiA4MCAxMi44IDk2LjhjLTUuMiAxLjEtOS41IDQuNi0xMS42IDkuNXMtMS41IDEwLjUgMS40IDE0LjlMNDkuNiAxOTIgMi43IDI2Mi43Yy0yLjkgNC40LTMuNSAxMC0xLjQgMTQuOXM2LjQgOC41IDExLjYgOS41TDk2IDMwNCAxMTIuOCAzODcuMmMxLjEgNS4yIDQuNiA5LjUgOS41IDExLjZzMTAuNSAxLjUgMTQuOS0xLjRsNjcuMy00NC42Yy0xNS44LTE5LjQtMjYtNDMuNS0yOC4yLTY5LjktMzcuNS0xMy4xLTY0LjQtNDguNy02NC40LTkwLjcgMC01MyA0My05NiA5Ni05NiAyMS43IDAgNDEuOCA3LjIgNTcuOCAxOS40IDE1LjUtMTcuNiAzNi45LTMwIDYxLjEtMzRMMzIwIDgwIDMwMy4yLTMuMnpNMjQzIDE1OS4xYy04LjgtOS4zLTIxLjItMTUuMS0zNS0xNS4xLTI2LjUgMC00OCAyMS41LTQ4IDQ4IDAgMTcgOC45IDMyIDIyLjIgNDAuNSAxMC4yLTMxLjQgMzIuMS01Ny40IDYwLjctNzNsLjEtLjR6TTMwNCAzNTJsMTkyIDBjNDQuMiAwIDgwLTM1LjggODAtODAgMC0zMy45LTIxLjEtNjIuOS01MC45LTc0LjUgMS45LTYuOCAyLjktMTQgMi45LTIxLjUgMC00NC4yLTM1LjgtODAtODAtODAtMzAuOCAwLTU3LjUgMTcuNC03MC45IDQyLjgtOS4zLTYuOC0yMC43LTEwLjgtMzMuMS0xMC44LTMwLjkgMC01NiAyNS4xLTU2IDU2IDAgMy4yIC4zIDYuNCAuOCA5LjQtMzYuOSA3LjEtNjQuOCAzOS42LTY0LjggNzguNiAwIDQ0LjIgMzUuOCA4MCA4MCA4MHptLTE5IDQ5LjFjLTEyLjYtNC4yLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuNCA2NC4xYy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDIxLjQtNjQuMWM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjR6bTEyMCAwYy0xMi42LTQuMi0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjQgNjQuMWMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS40LTY0LjFjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40em0xMjAgMGMtMTIuNi00LjItMjYuMiAyLjYtMzAuNCAxNS4ybC0yMS40IDY0LjFjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuNC02NC4xYzQuMi0xMi42LTIuNi0yNi4yLTE1LjItMzAuNHoiXQogICAgfTsKICAgIGZhQXJyb3dSaWdodExvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcmlnaHQtbG9uZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJsb25nLWFycm93LXJpZ2h0Il0sICJmMTc4IiwgIk01NjYuNiAyNzguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMNDY2LjcgMjI0IDMyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw0MzQuNyAwLTczLjQgNzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4eiJdCiAgICB9OwogICAgZmFMb25nQXJyb3dSaWdodCA9IGZhQXJyb3dSaWdodExvbmc7CiAgICBmYUJ1aWxkaW5nVW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctdW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRkOSIsICJNMzIgNjRDMzIgMjguNyA2MC43IDAgOTYgMEwzNTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI3Mi0xMTIgMGMtMjAuOSAwLTM5LjUgMTAuMS01MS4yIDI1LjYtOC02LTE4LTkuNi0yOC44LTkuNi0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0IDY0IDAgMCA0OC0xNDQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMzIgNjR6TTE0NCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0xMTIgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTQ0IDIyNGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0xMTIgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNNDI3LjQgMzgwLjVjOS0yLjEgMTguMyAyLjIgMjIuNSAxMC41bDI2LjEgNTIuMiAwLTQzLjNjMC0xMSA5LTIwIDIwLTIwczIwIDkgMjAgMjBsMCAxMjhjMCA5LjMtNi40IDE3LjMtMTUuNCAxOS41cy0xOC4zLTIuMi0yMi41LTEwLjVMNDUyIDQ4NC43IDQ1MiA1MjhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtMTI4YzAtOS4zIDYuNC0xNy4zIDE1LjQtMTkuNXpNMzI0IDQwMGwwIDk2YzAgNi42IDUuNCAxMiAxMiAxMnMxMi01LjQgMTItMTJsMC05NmMwLTExIDktMjAgMjAtMjBzMjAgOSAyMCAyMGwwIDk2YzAgMjguNy0yMy4zIDUyLTUyIDUycy01Mi0yMy4zLTUyLTUybDAtOTZjMC0xMSA5LTIwIDIwLTIwczIwIDkgMjAgMjB6Il0KICAgIH07CiAgICBmYVRlbXBlcmF0dXJlTG93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLWxvdyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzZiIiwgIk05NiA5NmMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgMTY0LjdjMjkuNSAyNi40IDQ4IDY0LjcgNDggMTA3LjMgMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTNDggNDQ3LjUgNDggMzY4YzAtNDIuNiAxOC41LTgxIDQ4LTEwNy4zTDk2IDk2em05NiAzMzZjMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zbDAtMjguN2MwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDI4LjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NHpNNDY0IDgwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTM1MiA4MGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6Il0KICAgIH07CiAgICBmYURvb3JPcGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRvb3Itb3BlbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTJiIiwgIk0yODggNjRsNjQgMCAwIDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0bC05NiAwIDAgMC0xNjAgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQxNnpNMTYwIDI1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdCiAgICB9OwogICAgZmFBbGlnbkxlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYWxpZ24tbGVmdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDM2IiwgIk0yODggNjRjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NFMxNC4zIDMyIDMyIDMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyem0wIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiAzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTAgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQ0OCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyeiJdCiAgICB9OwogICAgZmFDYW1lcmEyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbWVyYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMjU4LCAiY2FtZXJhLWFsdCJdLCAiZjAzMCIsICJNMTQ5LjEgNjQuOEwxMzguNyA5NiA2NCA5NkMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTc0LjcgMC0xMC40LTMxLjJDMzU2LjQgNDUuMiAzMzguMSAzMiAzMTcuNCAzMkwxOTQuNiAzMmMtMjAuNyAwLTM5IDEzLjItNDUuNSAzMi44ek0yNTYgMTkyYTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyeiJdCiAgICB9OwogICAgZmFDYW1lcmFBbHQyID0gZmFDYW1lcmEyOwogICAgZmFVc2Vyc1JheXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlcnMtcmF5cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTkzIiwgIk0zMS0zM0MyMS43LTIzLjYgMjEuNy04LjQgMzEgMUw4NyA1N2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNjUtMzNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwek02MDktMzNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDUxOSAyM2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwTDYwOSAxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45ek02NSA1NDVsNTYtNTZjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEwzMSA1MTFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMHptNTQ0IDBjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlsLTU2LTU2Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDU2IDU2YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwek0zMjAgMjA4YTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4em0wIDMyYy02MS45IDAtMTEyIDUwLjEtMTEyIDExMmwwIDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC04YzAtNjEuOS01MC4xLTExMi0xMTItMTEyem0yMTYtODBhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwek00NTEuMiAyNjAuNEM0NjkuNCAyODYuMyA0ODAgMzE3LjkgNDgwIDM1MmwwIDhjMCA4LjQtMS40IDE2LjUtNC4xIDI0bDc4LjggMGMxMS44IDAgMjEuMy05LjYgMjEuMy0yMS4zbDAtMTAuN2MwLTUzLTQzLTk2LTk2LTk2LTEwIDAtMTkuNyAxLjUtMjguOCA0LjR6bS0yNjIuNCAwYy05LjEtMi45LTE4LjgtNC40LTI4LjgtNC40LTUzIDAtOTYgNDMtOTYgOTZsMCAxMC43YzAgMTEuOCA5LjYgMjEuMyAyMS4zIDIxLjNsNzguOCAwYy0yLjctNy41LTQuMS0xNS42LTQuMS0yNGwwLThjMC0zNC4xIDEwLjYtNjUuNyAyOC44LTkxLjZ6TTIxNiAxNjBhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAweiJdCiAgICB9OwogICAgZmFSYWluYm93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJhaW5ib3ciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjc3NTJdLCAiZjc1YiIsICJNMzIwIDk2QzE3OC42IDk2IDY0IDIxMC42IDY0IDM1MmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDMzLjcgMCA0MTZsMC02NEMwIDE3NS4zIDE0My4zIDMyIDMyMCAzMlM2NDAgMTc1LjMgNjQwIDM1MmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRDNTc2IDIxMC42IDQ2MS40IDk2IDMyMCA5NnptMCAxMTJjLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0bDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTExNC45IDkzLjEtMjA4IDIwOC0yMDhzMjA4IDkzLjEgMjA4IDIwOGwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC03OS41LTY0LjUtMTQ0LTE0NC0xNDR6TTI4OCAzNTJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyeiJdCiAgICB9OwogICAgZmFTaXRlbWFwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNpdGVtYXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBlOCIsICJNMTkyIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOCAwIDAgNjQgMTIwIDBjMzkuOCAwIDcyIDMyLjIgNzIgNzJsMCA1NiA4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw4IDAgMC01NmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMTIwIDAgMCA4MCA4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw4IDAgMC04MC0xMjAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA1NiA4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw4IDAgMC01NmMwLTM5LjggMzIuMi03MiA3Mi03MmwxMjAgMCAwLTY0LTggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5TdGFyczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXN0YXJzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzIxLCAiZ3Jpbi1zdGFycyJdLCAiZjU4NyIsICJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2IDAtMjQuNC0zLjQtNDguMS05LjgtNzAuNSAxOC42LTM2LjEtMi43LTgzLjYtNDYuNy05MC00Ni45LTU4LjMtMTE4LjktOTUuNS0xOTkuNS05NS41UzEwMy40IDM3LjMgNTYuNSA5NS41Yy00NCA2LjQtNjUuMyA1My45LTQ2LjcgOTAtNi40IDIyLjQtOS44IDQ2LTkuOCA3MC41IDAgMTQxLjQgMTE0LjYgMjU2IDI1NiAyNTZ6TTM4Ni43IDMyNC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSA0MDQuMiAxMDUuNyAzNDIuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xem0tMzEuNi0yMzFjNS4zLTEwLjcgMjAuNS0xMC43IDI1LjggMGwyMC45IDQyLjQgNDYuNyA2LjhjMTEuOCAxLjcgMTYuNSAxNi4yIDggMjQuNWwtMzMuOCAzMyA4IDQ2LjZjMiAxMS43LTEwLjMgMjAuNy0yMC45IDE1LjJsLTQxLjgtMjItNDEuOCAyMmMtMTAuNSA1LjUtMjIuOS0zLjQtMjAuOS0xNS4ybDgtNDYuNi0zMy44LTMzYy04LjUtOC4zLTMuOC0yMi44IDgtMjQuNWw0Ni43LTYuOCAyMC45LTQyLjR6bS0xOTguMiAwbDIwLjkgNDIuNCA0Ni43IDYuOGMxMS44IDEuNyAxNi41IDE2LjIgOCAyNC41bC0zMy44IDMzIDggNDYuNmMyIDExLjctMTAuMyAyMC43LTIwLjkgMTUuMmwtNDEuOC0yMi00MS44IDIyYy0xMC41IDUuNS0yMi45LTMuNC0yMC45LTE1LjJsOC00Ni42LTMzLjgtMzNjLTguNS04LjMtMy44LTIyLjggOC0yNC41bDQ2LjctNi44IDIwLjktNDIuNGM1LjMtMTAuNyAyMC41LTEwLjcgMjUuOCAweiJdCiAgICB9OwogICAgZmFHcmluU3RhcnMyID0gZmFGYWNlR3JpblN0YXJzMjsKICAgIGZhU29ydFVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNvcnQtdXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsic29ydC1hc2MiXSwgImYwZGUiLCAiTTMyIDIyNGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOFMuMiAxNzguNSA5LjQgMTY5LjRsMTYwLTE2MGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxNjAgMTYwYzkuMiA5LjIgMTEuOSAyMi45IDYuOSAzNC45UzM2NC45IDIyNCAzNTIgMjI0TDMyIDIyNHoiXQogICAgfTsKICAgIGZhU29ydEFzYyA9IGZhU29ydFVwOwogICAgZmFFeWUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImV5ZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODA2NV0sICJmMDZlIiwgIk0yODggMzJjLTgwLjggMC0xNDUuNSAzNi44LTE5Mi42IDgwLjYtNDYuOCA0My41LTc4LjEgOTUuNC05MyAxMzEuMS0zLjMgNy45LTMuMyAxNi43IDAgMjQuNiAxNC45IDM1LjcgNDYuMiA4Ny43IDkzIDEzMS4xIDQ3LjEgNDMuNyAxMTEuOCA4MC42IDE5Mi42IDgwLjZzMTQ1LjUtMzYuOCAxOTIuNi04MC42YzQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjEgMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjYtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMS00Ny4xLTQzLjctMTExLjgtODAuNi0xOTIuNi04MC42ek0xNDQgMjU2YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE0NC02NGMwIDM1LjMtMjguNyA2NC02NCA2NC0xMS41IDAtMjIuMy0zLTMxLjctOC40LTEgMTAuOS0uMSAyMi4xIDIuOSAzMy4yIDEzLjcgNTEuMiA2Ni40IDgxLjYgMTE3LjYgNjcuOXM4MS42LTY2LjQgNjcuOS0xMTcuNmMtMTIuMi00NS43LTU1LjUtNzQuOC0xMDEuMS03MC44IDUuMyA5LjMgOC40IDIwLjEgOC40IDMxLjd6Il0KICAgIH07CiAgICBmYUNhcmV0TGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXJldC1sZWZ0IiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbXSwgImYwZDkiLCAiTTcuNyAyMzUuOGMtMTAuMyAxMi42LTkuNSAzMS4xIDIuMiA0Mi44bDEyOCAxMjhjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlzMTkuOC0xNi42IDE5LjgtMjkuNmwwLTI1NmMwLTEyLjktNy44LTI0LjYtMTkuOC0yOS42cy0yNS43LTIuMi0zNC45IDYuOWwtMTI4IDEyOC0yLjIgMi40eiJdCiAgICB9OwogICAgZmFBcHBsZVdob2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFwcGxlLXdob2xlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3ODIyLCAxMjc4MjMsICJhcHBsZS1hbHQiXSwgImY1ZDEiLCAiTTIyNCAxMTJjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwbDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA0NC4yLTM1LjggODAtODAgODBsLTE2IDB6TTAgMjg4YzAtNzYuMyAzNS43LTE2MCAxMTItMTYwIDI3LjMgMCA1OS43IDEwLjMgODIuNyAxOS4zIDE4LjggNy4zIDM5LjkgNy4zIDU4LjcgMCAyMi45LTguOSA1NS40LTE5LjMgODIuNy0xOS4zIDc2LjMgMCAxMTIgODMuNyAxMTIgMTYwIDAgMTI4LTgwIDIyNC0xNjAgMjI0LTE2LjUgMC0zOC4xLTYuNi01MS41LTExLjMtOC4xLTIuOC0xNi45LTIuOC0yNSAwLTEzLjQgNC43LTM1IDExLjMtNTEuNSAxMS4zLTgwIDAtMTYwLTk2LTE2MC0yMjR6Il0KICAgIH07CiAgICBmYUFwcGxlQWx0ID0gZmFBcHBsZVdob2xlOwogICAgZmFTY3JvbGxUb3JhaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY3JvbGwtdG9yYWgiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsidG9yYWgiXSwgImY2YTAiLCAiTTAgNDhDMCAyMS41IDIxLjUgMCA0OCAwIDY4LjkgMCA4Ni43IDEzLjQgOTMuMyAzMmwzODkuNSAwYzYuNi0xOC42IDI0LjQtMzIgNDUuMy0zMiAyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQxNmMwIDI2LjUtMjEuNSA0OC00OCA0OC0yMC45IDAtMzguNy0xMy40LTQ1LjMtMzJMOTMuMyA0ODBjLTYuNiAxOC42LTI0LjQgMzItNDUuMyAzMi0yNi41IDAtNDgtMjEuNS00OC00OEwwIDQ4ek0xNzcuOSAzMDFjLTEuMiAyLTEuOSA0LjItMS45IDYuNiAwIDYuOSA1LjYgMTIuNSAxMi41IDEyLjVsNTYuOSAwIDMwLjUgNDkuMmMyLjYgNC4yIDcuMiA2LjggMTIuMiA2LjhzOS42LTIuNiAxMi4yLTYuOGwzMC41LTQ5LjIgNTYuOSAwYzYuOSAwIDEyLjUtNS42IDEyLjUtMTIuNSAwLTIuMy0uNi00LjYtMS45LTYuNmwtMjcuOC00NSAyNy44LTQ1YzEuMi0yIDEuOS00LjIgMS45LTYuNiAwLTYuOS01LjYtMTIuNS0xMi41LTEyLjVsLTU2LjkgMC0zMC41LTQ5LjJjLTIuNi00LjItNy4yLTYuOC0xMi4yLTYuOHMtOS42IDIuNi0xMi4yIDYuOGwtMzAuNSA0OS4yLTU2LjkgMGMtNi45IDAtMTIuNSA1LjYtMTIuNSAxMi41IDAgMi4zIC42IDQuNiAxLjkgNi42bDI3LjggNDUtMjcuOCA0NXoiXQogICAgfTsKICAgIGZhVG9yYWggPSBmYVNjcm9sbFRvcmFoOwogICAgZmFIb3VzZUxvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtbG9jayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTEwIiwgIk01MjggMjI0LjFjNDQuMiAwIDgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwek0yNjguNiA2LjVjMTIuMi05LjMgMjkuNy04LjcgNDEuMiAybDE4NSAxNzEuOEM0NDAuMiAxOTUgNDAwIDI0NC44IDQwMCAzMDRsMCAyNC40Yy0xOS42IDE3LjYtMzIgNDMuMS0zMiA3MS41bDAgOTZjMCA1LjUgLjUgMTAuOSAxLjMgMTYuMUwxNDQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDggMi40LTJ6TTI3MiAzMjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTYgOTYgMCAwLTg3LjNjMC0xNi41IDctMzEuNSAxOC40LTQyLjEtOC43LTktMjAuOS0xNC42LTM0LjQtMTQuNmwtMzIgMHptMjU2LTQ3LjljLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOWMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhQXJyb3dzTGVmdFJpZ2h0VG9MaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy1sZWZ0LXJpZ2h0LXRvLWxpbmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRiYSIsICJNMzIgOTZDMTQuMyA5NiAwIDExMC4zIDAgMTI4TDAgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNTZjMC0xNy43LTE0LjMtMzItMzItMzJ6TTM5MC42IDM0Mi42bDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC02NC02NGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOS40IDkuNC0xMzMuNSAwIDkuNC05LjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy02IDYtOS40IDE0LjEtOS40IDIyLjZzMy40IDE2LjYgOS40IDIyLjZsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOS40LTkuNCAxMzMuNSAwLTkuNCA5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDB6TTU3NiAxMjhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI1NnoiXQogICAgfTsKICAgIGZhVHJhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhc2giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFmOCIsICJNMTM2LjcgNS45TDEyOCAzMiAzMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDAtOC43LTI2LjFDMzA2LjktNy4yIDI5NC43LTE2IDI4MC45LTE2TDE2Ny4xLTE2Yy0xMy44IDAtMjYgOC44LTMwLjQgMjEuOXpNNDE2IDE0NEwzMiAxNDQgNTMuMSA0NjcuMUM1NC43IDQ5Mi40IDc1LjcgNTEyIDEwMSA1MTJMMzQ3IDUxMmMyNS4zIDAgNDYuMy0xOS42IDQ3LjktNDQuOUw0MTYgMTQ0eiJdCiAgICB9OwogICAgZmFGYWNlU2FkVGVhcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zYWQtdGVhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU0NiwgInNhZC10ZWFyIl0sICJmNWI0IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNzEgOThjNS41LTEuMyAxMS4xLTIgMTctMiAyNC4xIDAgNDUuNCAxMS44IDU4LjUgMzAgNy43IDEwLjggMjIuNyAxMy4yIDMzLjUgNS41czEzLjItMjIuNyA1LjUtMzMuNWMtMjEuNy0zMC4yLTU3LjMtNTAtOTcuNS01MC0xMi41IDAtMjQuNiAxLjktMzUuOSA1LjUgOS44IDEyLjcgMTYuNSAyNy45IDE4LjkgNDQuNnpNMTc2IDI0MGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTE5Mi0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0xODUuNCAyOTIuOGMtMi40LTIuOS01LjctNC44LTkuNC00LjhzLTcgMS45LTkuNCA0LjhjLTYuNSA3LjgtMTIuNiAxNi4xLTE4LjMgMjQuNi05IDEzLjQtMjAuMyAzMC4yLTIwLjMgNDcuNCAwIDI4LjMgMjEuNSA1MS4yIDQ4IDUxLjJzNDgtMjIuOSA0OC01MS4yYzAtMTcuMi0xMS4yLTM0LTIwLjMtNDcuNC01LjctOC41LTExLjktMTYuNy0xOC4zLTI0LjZ6Il0KICAgIH07CiAgICBmYVNhZFRlYXIyID0gZmFGYWNlU2FkVGVhcjI7CiAgICBmYUZheCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYXgiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMjQsIDEyODQzOV0sICJmMWFjIiwgIk0xNjAgNjRsMCA4MCA2NCAwIDAtODAgMTQ2LjcgMCA0NS4zIDQ1LjMgMCAzNC43IDY0IDAgMC0zNC43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDQxNiAxOC43QzQwNCA2LjcgMzg3LjcgMCAzNzAuNyAwTDIyNCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NHpNMzIgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMkwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjg4YzAtMTcuNy0xNC4zLTMyLTMyLTMybC00OCAwem00NDggNjRsLTMyMCAwIDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyek0yMjQgMjg4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTAgOTZhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNMzM2IDI2NGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTMxMiAzODRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNNDI0IDI2NGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTQwMCAzODRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhUGVyc29uQ2lyY2xlUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tY2lyY2xlLXBsdXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU0MSIsICJNMjgwIDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdMMzQxIDI4Ni42YzEyLjgtMTcuNSAyOC41LTMyLjcgNDYuMy00NWwtNTYuMi03NS43QzMwNiAxMzIgMjY2LjMgMTEyIDIyNCAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxNDQgMjM2LjcgMTQ0IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMTYtMjA4bDAgNDggNDggMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNDggMCAwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNDgtNDggMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw0OCAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnoiXQogICAgfTsKICAgIGZhSGFtc2EgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFtc2EiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjY2NSIsICJNMzQuNiAyODhMODAgMjg4YzguOCAwIDE2LTcuMiAxNi0xNkw5NiA3MmMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMTMyYzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtMTY0YzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAxNjRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC0xMzJjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MGwwIDIwMGMwIDguOCA3LjIgMTYgMTYgMTZsNDUuNCAwYzE5LjEgMCAzNC42IDE1LjUgMzQuNiAzNC42IDAgOC42LTMuMiAxNi45LTkgMjMuM0w0MTYuNiA0NDFjLTQxLjEgNDUuMi05OS40IDcxLTE2MC42IDcxUzEzNi42IDQ4Ni4yIDk1LjQgNDQxTDkgMzQ1LjljLTUuOC02LjQtOS0xNC43LTktMjMuMyAwLTE5LjEgMTUuNS0zNC42IDM0LjYtMzQuNnpNMjU2IDI4OGMtMzguNCAwLTc2LjggMzUuOC05MC42IDUwLjItMy42IDMuNy01LjQgOC43LTUuNCAxMy44czEuOCAxMC4xIDUuNCAxMy44QzE3OS4yIDM4MC4yIDIxNy42IDQxNiAyNTYgNDE2czc2LjgtMzUuOCA5MC42LTUwLjJjMy42LTMuNyA1LjQtOC43IDUuNC0xMy44cy0xLjgtMTAuMS01LjQtMTMuOEMzMzIuOCAzMjMuOCAyOTQuNCAyODggMjU2IDI4OHptMCAzMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVBlcnNvbkNpcmNsZVF1ZXN0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jaXJjbGUtcXVlc3Rpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU0MiIsICJNMjgwIDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdMMzQxIDI4Ni42YzEyLjgtMTcuNSAyOC41LTMyLjcgNDYuMy00NWwtNTYuMi03NS43QzMwNiAxMzIgMjY2LjMgMTEyIDIyNCAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxNDQgMjM2LjcgMTQ0IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC0xMDBhMjAgMjAgMCAxIDEgMCA0MCAyMCAyMCAwIDEgMSAwLTQwem0wLTEwMGMtMTEuNiAwLTIxLjMgOC4yLTIzLjUgMTkuMi0xLjggOC43LTEwLjIgMTQuMy0xOC45IDEyLjVzLTE0LjMtMTAuMi0xMi41LTE4LjljNS4yLTI1LjYgMjcuOC00NC44IDU0LjktNDQuOCAzMC45IDAgNTYgMjUuMSA1NiA1NiAwIDE5LjgtMTEuNyAzNy44LTI5LjggNDUuOWwtMTAuNCA0LjZjLTEuMiA3LjctNy44IDEzLjUtMTUuOCAxMy41LTguOCAwLTE2LTcuMi0xNi0xNiAwLTExLjIgNi42LTIxLjMgMTYuOC0yNS45bDEyLjQtNS41YzYuNi0yLjkgMTAuOC05LjQgMTAuOC0xNi42IDAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFDbGlwYm9hcmRDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQtY2hlY2siLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjQ2YyIsICJNMjU2IDBjMjMuNyAwIDQ0LjQgMTIuOSA1NS40IDMybDguNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzUyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmw4LjYgMEM4My42IDEyLjkgMTA0LjMgMCAxMjggMEwyNTYgMHptMjYuOSAyMTIuNmMtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNsLTg1LjYgMTE3LjctMjYuNS0yNy40Yy05LjItOS41LTI0LjQtOS44LTMzLjktLjZzLTkuOCAyNC40LS42IDMzLjlsNDYuNCA0OGM0LjkgNS4xIDExLjggNy44IDE4LjkgNy4zczEzLjYtNC4xIDE3LjgtOS44TDI4OC4yIDI0Ni4xYzcuOC0xMC43IDUuNC0yNS43LTUuMy0zMy41ek0xMzYgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMTM2IDY0eiJdCiAgICB9OwogICAgZmFTaGFyZUZyb21TcXVhcmUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoYXJlLWZyb20tc3F1YXJlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjE1MDksICJzaGFyZS1zcXVhcmUiXSwgImYxNGQiLCAiTTM4NC41IDI0bDAgNzItNjQgMGMtNzkuNSAwLTE0NCA2NC41LTE0NCAxNDQgMCA5My40IDgyLjggMTM0LjggMTAwLjYgMTQyLjYgMi4yIDEgNC42IDEuNCA3LjEgMS40bDIuNSAwYzkuOCAwIDE3LjgtOCAxNy44LTE3LjggMC04LjMtNS45LTE1LjUtMTIuOC0yMC4zLTguOS02LjItMTkuMi0xOC4yLTE5LjItNDAuNSAwLTQ1IDM2LjUtODEuNSA4MS41LTgxLjVsMzAuNSAwIDAgNzJjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yczE5LjMgMS43IDI2LjItNS4ybDEzNi0xMzZjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlMNDI1LjUgN2MtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMzODQuNSAxNC4zIDM4NC41IDI0em0tMjcyIDcyYy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDI1NmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGwyNTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0yNTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNiAweiJdCiAgICB9OwogICAgZmFTaGFyZVNxdWFyZTIgPSBmYVNoYXJlRnJvbVNxdWFyZTI7CiAgICBmYVJlY2VpcHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVjZWlwdCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyOTUzNF0sICJmNTQzIiwgIk0xNCAyLjJDMjIuNS0xLjcgMzIuNS0uMyAzOS42IDUuOEw4MCA0MC40IDEyMC40IDUuOGM5LTcuNyAyMi4zLTcuNyAzMS4yIDBMMTkyIDQwLjQgMjMyLjQgNS44YzktNy43IDIyLjItNy43IDMxLjIgMEwzMDQgNDAuNCAzNDQuNCA1LjhjNy4xLTYuMSAxNy4xLTcuNSAyNS42LTMuNlMzODQgMTQuNiAzODQgMjRsMCA0NjRjMCA5LjQtNS41IDE3LjktMTQgMjEuOHMtMTguNSAyLjUtMjUuNi0zLjZsLTQwLjQtMzQuNi00MC40IDM0LjZjLTkgNy43LTIyLjIgNy43LTMxLjIgMGwtNDAuNC0zNC42LTQwLjQgMzQuNmMtOSA3LjctMjIuMyA3LjctMzEuMiAwTDgwIDQ3MS42IDM5LjYgNTA2LjJjLTcuMSA2LjEtMTcuMSA3LjUtMjUuNiAzLjZTMCA0OTcuNCAwIDQ4OEwwIDI0QzAgMTQuNiA1LjUgNi4xIDE0IDIuMnpNMTA0IDEzNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTc2IDB6TTgwIDM1MmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTc2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em0yNC0xMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE3NiAweiJdCiAgICB9OwogICAgZmFFcXVhbHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXF1YWxzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjI3NjRdLCAiM2QiLCAiTTMyIDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAxMjh6bTAgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyMHoiXQogICAgfTsKICAgIGZhQ2hldnJvblVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXZyb24tdXAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjA3NyIsICJNMjAxLjQgMTA1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTkyIDE5MmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwyMjQgMTczLjMgNTQuNiAzNDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTkyLTE5MnoiXQogICAgfTsKICAgIGZhVmlydXNTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aXJ1cy1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMDc1IiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC04OC42LTg4LjZjMS43LTEyLjEtMi0yNC44LTExLjMtMzQtMzEuMi0zMS4yLTkuMS04NC41IDM1LTg0LjUgMjIuMSAwIDQwLTE3LjkgNDAtNDBzLTE3LjktNDAtNDAtNDBjLTQ0LjEgMC02Ni4xLTUzLjMtMzUtODQuNSAxNS42LTE1LjYgMTUuNi00MC45IDAtNTYuNnMtNDAuOS0xNS42LTU2LjYgMGMtMzEuMiAzMS4yLTg0LjUgOS4xLTg0LjUtMzUgMC0yMi4xLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBjMCA0NC4xLTUzLjMgNjYuMS04NC41IDM1LTkuMy05LjMtMjItMTMtMzQtMTEuM0w0MS0yNC45ek03MiAyMTZjLTIyLjEgMC00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDBjNDQuMSAwIDY2LjEgNTMuMyAzNSA4NC41LTE1LjYgMTUuNi0xNS42IDQwLjkgMCA1Ni42czQwLjkgMTUuNiA1Ni42IDBjMzEuMi0zMS4yIDg0LjUtOS4xIDg0LjUgMzUgMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MGMwLTIxLjQgMTIuNi0zNy42IDI5LjEtNDUuMWwtMjQwLTI0MEMxMDkuNiAyMDMuNCA5My40IDIxNiA3MiAyMTZ6Il0KICAgIH07CiAgICBmYVNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3MTUiLCAiTTctMjVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBMNTY5IDUwM2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDcgOUMtMi4zLS40LTIuMy0xNS42IDctMjV6Il0KICAgIH07CiAgICBmYUV4cGFuZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJleHBhbmQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjA2NSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NCA2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyek02NCAzNTJjMC0xNy43LTE0LjMtMzItMzItMzJTMCAzMzQuMyAwIDM1MmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC02NHpNMzIwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDAgMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTk2IDB6TTQ0OCAzNTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA2NC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NnoiXQogICAgfTsKICAgIGZhTm90ZVN0aWNreTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibm90ZS1zdGlja3kiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2MjAyNiwgInN0aWNreS1ub3RlIl0sICJmMjQ5IiwgIk02NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyMTMuNWMwIDE3LTYuNyAzMy4zLTE4LjcgNDUuM0wzMjIuNyA0NjEuM2MtMTIgMTItMjguMyAxOC43LTQ1LjMgMTguN0w2NCA0ODB6TTM4OS41IDMwNEwyOTYgMzA0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDkzLjUgMTE3LjUtMTE3LjV6Il0KICAgIH07CiAgICBmYVN0aWNreU5vdGUyID0gZmFOb3RlU3RpY2t5MjsKICAgIGZhVGFibGVDb2x1bW5zID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlLWNvbHVtbnMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY29sdW1ucyJdLCAiZjBkYiIsICJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTY0IDY0bDAgMjU2IDEyOCAwIDAtMjU2LTEyOCAwem0zMjAgMGwtMTI4IDAgMCAyNTYgMTI4IDAgMC0yNTZ6Il0KICAgIH07CiAgICBmYUNvbHVtbnMgPSBmYVRhYmxlQ29sdW1uczsKICAgIGZhUGVyc29uU2hlbHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tc2hlbHRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTRmIiwgIk0yNzEuOSA0LjJjLTkuOC01LjYtMjEuOS01LjYtMzEuOCAwbC0yMjQgMTI4QzYuMiAxMzcuOSAwIDE0OC41IDAgMTYwTDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJMNjQgMTc4LjYgMjU2IDY4LjkgNDQ4IDE3OC42IDQ0OCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyMGMwLTExLjUtNi4yLTIyLjEtMTYuMS0yNy44bC0yMjQtMTI4ek0yNTYgMjA4YTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHptLTggMTkybDE2IDAgMCA4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTc0LjUgMjYuOSA0OS45YzYuMyAxMS43IDIwLjggMTYgMzIuNSA5LjhzMTYtMjAuOCA5LjgtMzIuNWwtMzMuMi02MS43QzMyOS43IDI0NS4xIDI5NC40IDIyNCAyNTYgMjI0cy03My43IDIxLjEtOTEuOSA1NC45bC0zMy4yIDYxLjdjLTYuMyAxMS43LTEuOSAyNi4yIDkuOCAzMi41czI2LjIgMS45IDMyLjUtOS44TDIwMCAzMTMuNSAyMDAgNDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04OHoiXQogICAgfTsKICAgIGZhQ2lyY2xlTm90Y2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLW5vdGNoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxY2UiLCAiTTIyMi43IDMyLjFjNSAxNi45LTQuNiAzNC44LTIxLjUgMzkuOC03OS4zIDIzLjYtMTM3LjEgOTcuMS0xMzcuMSAxODQuMSAwIDEwNiA4NiAxOTIgMTkyIDE5MnMxOTItODYgMTkyLTE5MmMwLTg2LjktNTcuOC0xNjAuNC0xMzcuMS0xODQuMS0xNi45LTUtMjYuNi0yMi45LTIxLjUtMzkuOHMyMi45LTI2LjYgMzkuOC0yMS41QzQzNC45IDQyLjEgNTEyIDE0MCA1MTIgMjU2IDUxMiAzOTcuNCAzOTcuNCA1MTIgMjU2IDUxMlMwIDM5Ny40IDAgMjU2YzAtMTE2IDc3LjEtMjEzLjkgMTgyLjktMjQ1LjQgMTYuOS01IDM0LjggNC42IDM5LjggMjEuNXoiXQogICAgfTsKICAgIGZhV2F0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2F0ZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjc3MyIsICJNNDEwLjYgMTI0LjFjMjAuNyAxNS42IDQ2IDMwLjcgNzQuMiAzNC41IDEzLjEgMS44IDI1LjItNy41IDI3LTIwLjZzLTcuNS0yNS4yLTIwLjYtMjdjLTE1LjktMi4xLTMzLjItMTEuMy01MS43LTI1LjItMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMTguNSAxMy45LTM1LjggMjMuMS01MS43IDI1LjItMTMuMSAxLjgtMjIuNCAxMy44LTIwLjYgMjdzMTMuOCAyMi40IDI3IDIwLjZjMjguMi0zLjggNTMuNi0xOC45IDc0LjItMzQuNSAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwem0wIDE0NGMyMC43IDE1LjYgNDYgMzAuNyA3NC4yIDM0LjUgMTMuMSAxLjggMjUuMi03LjUgMjctMjAuNnMtNy41LTI1LjItMjAuNi0yN2MtMTUuOS0yLjEtMzMuMi0xMS4zLTUxLjctMjUuMi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0xOC41IDEzLjktMzUuOCAyMy4xLTUxLjcgMjUuMi0xMy4xIDEuNy0yMi40IDEzLjgtMjAuNiAyN3MxMy44IDIyLjQgMjcgMjAuNmMyOC4yLTMuOCA1My42LTE4LjkgNzQuMi0zNC41IDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1LjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDB6bS03MS4yIDE0NGMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyMC43IDE1LjYgNDYgMzAuNyA3NC4yIDM0LjUgMTMuMSAxLjggMjUuMi03LjUgMjctMjAuNnMtNy41LTI1LjItMjAuNi0yN2MtMTUuOS0yLjEtMzMuMi0xMS4zLTUxLjctMjUuMi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0xOC41IDEzLjktMzUuOCAyMy4xLTUxLjcgMjUuMi0xMy4xIDEuOC0yMi40IDEzLjgtMjAuNiAyN3MxMy44IDIyLjQgMjcgMjAuNmMyOC4yLTMuOCA1My42LTE4LjkgNzQuMi0zNC41IDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1Ljl6Il0KICAgIH07CiAgICBmYURlbGV0ZUxlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGVsZXRlLWxlZnQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFs5MDAzLCAiYmFja3NwYWNlIl0sICJmNTVhIiwgIk01NzYgMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDIwNS4zIDY0Yy0xNyAwLTMzLjMgNi43LTQ1LjMgMTguN0w5LjQgMjMzLjRjLTYgNi05LjQgMTQuMS05LjQgMjIuNnMzLjQgMTYuNiA5LjQgMjIuNkwxNjAgNDI5LjNjMTIgMTIgMjguMyAxOC43IDQ1LjMgMTguN0w1MTIgNDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2ek0yODQuMSAxODguMWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwzMy45IDMzLjkgMzMuOS0zMy45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtMzMuOSAzMy45IDMzLjkgMzMuOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC0zMy45LTMzLjktMzMuOSAzMy45Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMzLjktMzMuOS0zMy45LTMzLjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45eiJdCiAgICB9OwogICAgZmFCYWNrc3BhY2UgPSBmYURlbGV0ZUxlZnQ7CiAgICBmYUJyb29tQmFsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicm9vbS1iYWxsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInF1aWRkaXRjaCIsICJxdWlkZGl0Y2gtYnJvb20tYmFsbCJdLCAiZjQ1OCIsICJNNDk2IDU0NGE4MCA4MCAwIDEgMSAwLTE2MCA4MCA4MCAwIDEgMSAwIDE2MHpNMTA2LjggMjc3LjJjMzAuNi0zMC42IDczLjEtNDUuOSAxMTUuOC00Mi4yTDM0MSAzNTMuM2MzLjcgNDIuOC0xMS42IDg1LjItNDIuMiAxMTUuOS0yNy40IDI3LjQtNjQuNiA0Mi44LTEwMy4zIDQyLjhMMjIuMSA1MTJjLTEyLjIgMC0yMi4xLTkuOS0yMi4xLTIyLjEgMC02LjMgMi43LTEyLjMgNy4zLTE2LjVMMTMzLjcgMzU5LjdjNC4yLTMuNy0uNC0xMC40LTUuNC03LjlMNzcuMiAzNzcuNGMtNi4xIDMtMTMuMi0xLjQtMTMuMi04LjIgMC0zMS41IDEyLjUtNjEuOCAzNC44LTg0bDgtOHptNDE3LTI3MGMxMi42LTEwLjMgMzEuMS05LjUgNDIuOCAyLjJzMTIuNCAzMC4yIDIuMiA0Mi44bC0yLjIgMi40LTE5MiAxOTIgMzQuOCAzNC43YzQuMiA0LjIgNi42IDEwIDYuNiAxNiAwIDEyLjUtMTAuMSAyMi42LTIyLjYgMjIuNmwtMjkuMSAwLTEwOC4zLTEwOC4zIDAtMjkuMWMwLTEyLjUgMTAuMS0yMi42IDIyLjYtMjIuNiA2IDAgMTEuOCAyLjQgMTYgNi42bDM0LjggMzQuNyAxOTItMTkyIDIuNC0yLjJ6Il0KICAgIH07CiAgICBmYVF1aWRkaXRjaCA9IGZhQnJvb21CYWxsOwogICAgZmFRdWlkZGl0Y2hCcm9vbUJhbGwgPSBmYUJyb29tQmFsbDsKICAgIGZhSiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJqIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTA2XSwgIjRhIiwgIk0yODggMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNTZjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBTMCA0MDguNCAwIDMyMGwwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMmMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFTaHV0dGxlU3BhY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2h1dHRsZS1zcGFjZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzcGFjZS1zaHV0dGxlIl0sICJmMTk3IiwgIk0wIDM2OGwwIDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDUwIDBjNDAuNiAwIDgwLjQtMTEgMTE1LjItMzEuOWwxMzMuNS04MC4xLTkzLjMgMC02NC45IDM4LjljLTE0IDguNC0yOC45IDE0LjctNDQuNSAxOWwwLTY2LjRjOS43LTUuNiAxNy44LTEzLjcgMjMuNC0yMy40bDE5OC44IDBjNjcuMSAwIDEyNy44LTIwLjYgMTcwLjMtNzAuNiA0LjYtNS40IDQuNi0xMy4zIDAtMTguOC00Mi41LTUwLjEtMTAzLjItNzAuNi0xNzAuMy03MC42bC0xOTguOCAwYy01LjYtOS43LTEzLjctMTcuOC0yMy40LTIzLjRsMC02Ni40YzE1LjYgNC4yIDMwLjYgMTAuNiA0NC41IDE5bDY0LjkgMzguOSA5My4zIDAtMTMzLjUtODAuMUMxNzguNCA0MyAxMzguNiAzMiA5OCAzMkw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgMzY4em05NiAwbDAgNjQtNDggMCAwLTY0IDQ4IDB6TTk2IDgwbDAgNjQtNDggMCAwLTY0IDQ4IDB6TTQxNiAyMjRjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYVNwYWNlU2h1dHRsZSA9IGZhU2h1dHRsZVNwYWNlOwogICAgZmFZaW5ZYW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInlpbi15YW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTc3NV0sICJmNmFkIiwgIk0yMjQgMTYwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTMyIDM1MmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTAtNDQ4YzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2LTk2IDQzLTk2IDk2IDQzIDk2IDk2IDk2QzE1MCA0NDggNjQgMzYyIDY0IDI1NlMxNTAgNjQgMjU2IDY0ek0yMjQgMzUyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYVN0b3AgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3RvcCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzkyMDldLCAiZjA0ZCIsICJNNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMyeiJdCiAgICB9OwogICAgZmFUcm93ZWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJvd2VsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1ODkiLCAiTTQwNy45IDE4MS40TDI3Ny4zIDMxMiAzNDIuNiAzNzcuNGM3LjkgNy45IDExLjEgMTkuNCA4LjQgMzAuM3MtMTAuOCAxOS42LTIxLjUgMjIuOWwtMjU2IDgwYy0xMS40IDMuNS0yMy44IC41LTMyLjItNy45cy0xMS41LTIwLjgtNy45LTMyLjJsODAtMjU2YzMuMy0xMC43IDEyLTE4LjkgMjIuOS0yMS41czIyLjQgLjUgMzAuMyA4LjRMMjMyIDI2Ni43IDM2Mi42IDEzNi4xYy0xNC4zLTE0LjYtMTQuMi0zOCAuMy01Mi41bDk1LjQtOTUuNGMyNi45LTI2LjkgNzAuNS0yNi45IDk3LjUgMHMyNi45IDcwLjUgMCA5Ny41bC05NS40IDk1LjRjLTE0LjUgMTQuNS0zNy45IDE0LjYtNTIuNSAuM3oiXQogICAgfTsKICAgIGZhSGFuZEJhY2tGaXN0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWJhY2stZmlzdCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJoYW5kLXJvY2siXSwgImYyNTUiLCAiTTcuNCAyNTMuNkMyLjYgMjQ1LjkgMCAyMzcuMSAwIDIyOGwwLTM2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDE2IDAgMC04MGMwLTI2LjUgMjEuNS00OCA0OC00OCAxNy4zIDAgMzIuNCA5LjEgNDAuOSAyMi44IDQuMy0yMi4xIDIzLjgtMzguOCA0Ny4xLTM4LjggMjMuNCAwIDQyLjkgMTYuOCA0Ny4xIDM4LjkgNy4zLTQuNCAxNS44LTYuOSAyNC45LTYuOSAyMi4xIDAgNDAuOCAxNSA0Ni4zIDM1LjQgNS41LTIuMiAxMS40LTMuNCAxNy43LTMuNCAyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2LjljMCA5LjktMi4zIDE5LjctNi44IDI4LjZsLTM5LjYgNzkuMWMtMTAuOCAyMS43LTMzIDM1LjQtNTcuMiAzNS40TDk2IDM1MmMtMTYuNSAwLTMxLjgtOC40LTQwLjYtMjIuNGwtNDgtNzZ6TTMyIDQ4MGwwLTQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDhjMCAxNy43LTE0LjMgMzItMzIgMzJMNjQgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhSGFuZFJvY2syID0gZmFIYW5kQmFja0Zpc3QyOwogICAgZmFUZW1wZXJhdHVyZUhpZ2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVtcGVyYXR1cmUtaGlnaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzY5IiwgIk05NiA5NmMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgMTY0LjdjMjkuNSAyNi40IDQ4IDY0LjcgNDggMTA3LjMgMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTNDggNDQ3LjUgNDggMzY4YzAtNDIuNiAxOC41LTgxIDQ4LTEwNy4zTDk2IDk2em05NiAzMzZjMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zTDIxNiA5NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIxMi43Yy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjR6TTQ2NCA4MGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zNTIgODBhODAgODAgMCAxIDEgMTYwIDAgODAgODAgMCAxIDEgLTE2MCAweiJdCiAgICB9OwogICAgZmFHcmVhdGVyVGhhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJncmVhdGVyLXRoYW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2Mjc2OV0sICIzZSIsICJNMzQuOSA1MC42Yy03LjQgMTYtLjQgMzUuMSAxNS42IDQyLjVMNDAzLjYgMjU2IDUwLjYgNDE5Yy0xNiA3LjQtMjMuMSAyNi40LTE1LjYgNDIuNXMyNi40IDIzIDQyLjUgMTUuNmw0MTYtMTkyYzExLjMtNS4yIDE4LjYtMTYuNiAxOC42LTI5LjFzLTcuMy0yMy44LTE4LjYtMjkuMUw3Ny40IDM1Yy0xNi03LjQtMzUuMS0uNC00Mi41IDE1LjZ6Il0KICAgIH07CiAgICBmYUNydXRjaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjcnV0Y2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdmNyIsICJNMjk3LjQgOS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTEuNC0xLjQtMTU4LjYgMTU4LjZjLTE4IDE4LTQyLjQgMjguMS02Ny45IDI4LjFsLTU5IDBjLTguNSAwLTE2LjYgMy40LTIyLjYgOS40LTYxLjcgNjEuNy05Mi44IDkyLjgtOTMuMyA5My4zLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE2LTE2IDAgMCA3Ny4zLTc3LjNjNi02IDkuNC0xNC4xIDkuNC0yMi42bDAtNTljMC0yNS41IDEwLjEtNDkuOSAyOC4xLTY3LjlMMjk4LjcgNTYgMjk3LjQgNTQuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjN6TTM0NCAxMDEuM0wyNjEuMyAxODQgMzI4IDI1MC43IDQxMC43IDE2OCAzNDQgMTAxLjN6bS0xMjggMTI4bC0zMC42IDMwLjZjLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDUzLjUgNTMuNSAwYzguNSAwIDE2LjYtMy40IDIyLjYtOS40TDI4Mi43IDI5NiAyMTYgMjI5LjN6Il0KICAgIH07CiAgICBmYVNlcHRhZ29uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNlcHRhZ29uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImhlcHRhZ29uIl0sICJlODIwIiwgIk0yNjcuNC0zMS41YzE1LjktNS41IDMzLjUtNC42IDQ4LjggMi43bDE3Mi40IDgzIDYuMyAzLjVjMTQuMiA5IDI0LjUgMjMuMyAyOC4zIDM5LjlsNDIuNiAxODYuNSAxLjIgNy4yYzEuNiAxNC4zLTEuNyAyOC44LTkuNCA0MS4xbC00LjIgNS45LTExOS4zIDE0OS42Yy0xMi4xIDE1LjItMzAuNiAyNC4xLTUwIDI0LjFsLTE5MS4zIDBjLTE5LjUgMC0zNy45LTguOS01MC0yNC4xTDIzLjUgMzM4LjRjLTEyLjEtMTUuMi0xNi43LTM1LjItMTIuMy01NC4ybDQyLjYtMTg2LjUgMi03YzUuNi0xNS45IDE3LjItMjkgMzIuNi0zNi40bDE3Mi40LTgzIDYuNy0yLjd6Il0KICAgIH07CiAgICBmYUhlcHRhZ29uID0gZmFTZXB0YWdvbjsKICAgIGZhU3RyZWV0VmlldyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdHJlZXQtdmlldyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjFkIiwgIk0yNTYgMGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNMjI0IDE2MGw2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNDhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTEuOCAwLTExLjEgOTkuNWMtMS44IDE2LjItMTUuNSAyOC41LTMxLjggMjguNWwtMzguNyAwYy0xNi4zIDAtMzAtMTIuMy0zMS44LTI4LjVsLTExLjEtOTkuNS0xLjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC00OGMwLTM1LjMgMjguNy02NCA2NC02NHpNNDEyLjQgNDAwLjJjLTE2LjEtNC4yLTM0LjgtNy42LTU1LjQtMTAuMmw1LjMtNDcuN2MyMi43IDIuOSA0My43IDYuNyA2Mi4xIDExLjUgMjIuNCA1LjggNDIuNiAxMy4zIDU3LjggMjMuMyAxNC43IDkuNiAyOS44IDI0LjkgMjkuOCA0N3MtMTUuMSAzNy40LTI5LjggNDdjLTE1LjIgOS45LTM1LjUgMTcuNS01Ny44IDIzLjMtNDUuMSAxMS43LTEwNS4zIDE3LjgtMTY4LjQgMTcuOHMtMTIzLjMtNi4xLTE2OC40LTE3LjhDNjUuMiA0ODguNCA0NSA0ODAuOSAyOS44IDQ3MSAxNS4xIDQ2MS40IDAgNDQ2LjEgMCA0MjRzMTUuMS0zNy40IDI5LjgtNDdjMTUuMi05LjkgMzUuNS0xNy41IDU3LjgtMjMuMyAxOC41LTQuOCAzOS41LTguNiA2Mi4xLTExLjVMMTU1IDM5MGMtMjAuNiAyLjYtMzkuMyA2LjEtNTUuNCAxMC4yLTU2LjYgMTQuNi01Ni42IDMyLjkgMCA0Ny41IDM5LjkgMTAuMyA5NS44IDE2LjIgMTU2LjQgMTYuMnMxMTYuNS01LjkgMTU2LjQtMTYuMmM1Ni42LTE0LjYgNTYuNi0zMi45IDAtNDcuNXoiXQogICAgfTsKICAgIGZhV2F2ZVNxdWFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3YXZlLXNxdWFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmODNlIiwgIk02NCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI4OCA5NiAwIDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI4OC05NiAwIDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC0xMjh6Il0KICAgIH07CiAgICBmYUFuZ2xlTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmdsZS1sZWZ0IiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbODI0OV0sICJmMTA0IiwgIk05LjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w3Ny4zIDI1NiAyMTQuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MHoiXQogICAgfTsKICAgIGZhU2NyZXdkcml2ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2NyZXdkcml2ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjk2OTFdLCAiZjU0YSIsICJNMzUyLjEgMTQ2LjdsMC00OS42YzAtMTAuNyA1LjMtMjAuNyAxNC4yLTI2LjZMNDg1LjItOC43YzYuMy00LjIgMTQuOC0zLjQgMjAuMiAybDQ1LjQgNDUuNWM1LjQgNS40IDYuMiAxMy44IDIgMjAuMkw0NzMuNiAxNzcuOGMtNS45IDguOS0xNS45IDE0LjItMjYuNiAxNC4ybC00OS42IDAtOTAuNyA5MC43YzE1IDMzLjMgOC45IDczLjktMTguNSAxMDEuM0wxNjIuMSA1MTAuMWMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBMMzQuMSA0NDkuOWMtMTguNy0xOC43LTE4LjctNDkuMSAwLTY3LjlMMTYwLjEgMjU2YzI3LjQtMjcuNCA2Ny45LTMzLjYgMTAxLjMtMTguNWw5MC43LTkwLjd6Il0KICAgIH07CiAgICBmYVRyYWN0b3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhY3RvciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY2OF0sICJmNzIyIiwgIk0xNjAgOTZsMCA5NiAxMzMuNCAwLTU3LjYtOTYtNzUuOCAwek05NiAyMjNMOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTA3LjggMGMyMi41IDAgNDMuMyAxMS44IDU0LjkgMzEuMWw3Ny40IDEyOC45IDY0IDAgMC03MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNzIgNDggMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQxLjVjMCAxNC4yLTYuMyAyNy44LTE3LjMgMzYuOWwtMzUgMjkuMmMyNi41IDE1LjIgNDQuMyA0My43IDQ0LjMgNzYuNCAwIDQ4LjYtMzkuNCA4OC04OCA4OHMtODgtMzkuNC04OC04OGMwLTE0LjQgMy41LTI4IDkuNi00MGwtMTAxLjIgMGMtMyAxMy40LTcuOSAyNi0xNC40IDM3LjcgNy43IDkuNCA3LjIgMjMuNC0xLjYgMzIuMmwtMjIuNiAyMi42Yy04LjggOC44LTIyLjcgOS4zLTMyLjIgMS42LTkuMyA1LjItMTkuMyA5LjMtMjkuOCAxMi4zLTEuMiAxMi4xLTExLjQgMjEuNi0yMy45IDIxLjZsLTMyIDBjLTEyLjQgMC0yMi43LTkuNS0yMy45LTIxLjYtMTAuNS0zLTIwLjQtNy4yLTI5LjgtMTIuMy05LjQgNy43LTIzLjQgNy4yLTMyLjItMS42TDM1LjUgNDUzLjhjLTguOC04LjgtOS4zLTIyLjctMS42LTMyLjItNS4yLTkuMy05LjMtMTkuMy0xMi4zLTI5LjgtMTIuMS0xLjItMjEuNi0xMS40LTIxLjYtMjMuOWwwLTMyYzAtMTIuNCA5LjUtMjIuNyAyMS42LTIzLjkgMy0xMC41IDcuMi0yMC40IDEyLjMtMjkuOC03LjctOS40LTcuMi0yMy40IDEuNi0zMi4ybDIyLjYtMjIuNmM4LjgtOC44IDIyLjctOS4zIDMyLjItMS42IDEuOS0xIDMuNy0yIDUuNy0zem02NCA2NWE2NCA2NCAwIDEgMCAwIDEyOCA2NCA2NCAwIDEgMCAwLTEyOHpNNDQwIDQyNGE0MCA0MCAwIDEgMCA4MCAwIDQwIDQwIDAgMSAwIC04MCAweiJdCiAgICB9OwogICAgZmFCcmlkZ2VDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmlkZ2UtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0Y2IiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw4IDAgMCA2NC00MCAwIDAgMTEyYzM3LjYgOS40IDY0IDQzLjIgNjQgODJsMCA5NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC01MyA0My05NiA5Ni05NiA2LjQgMCAxMi43IC42IDE4LjcgMS44IDM0LjctNDkuNSA5Mi4yLTgxLjggMTU3LjMtODEuOCAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTY1LjQtNDAgMCAwLTY0IDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnpNNDI0IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTI5NiA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek04OCA5Nmw4MCAwIDAgNjQtODAgMCAwLTY0ek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN2wtMzYuNyAzNi43IDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXQogICAgfTsKICAgIGZhVmlhbHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlhbHMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQ5MyIsICJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NGwwIDM1MmMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMzUyIDY0IDAgMCAzNTJjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTM1MmMxNy43IDAgMzItMTQuMyAzMi0zMlM0OTcuNyAwIDQ4MCAwTDMyIDB6TTE2MCA2NGwwIDEyOC02NCAwIDAtMTI4IDY0IDB6bTI1NiAwbDAgMTI4LTY0IDAgMC0xMjggNjQgMHoiXQogICAgfTsKICAgIGZhU3RldGhvc2NvcGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3RldGhvc2NvcGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjk2NThdLCAiZjBmMSIsICJNMzIgNDhDMzIgMjEuNSA1My41IDAgODAgMGw0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMTI4YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0xMjgtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMjM4LjMgMCAyNTYgMGw0OCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTQ0YzAgNzcuNC01NSAxNDItMTI4IDE1Ni44bDAgMTkuMmMwIDYxLjkgNTAuMSAxMTIgMTEyIDExMnMxMTItNTAuMSAxMTItMTEybDAtODUuNWMtMzcuMy0xMy4yLTY0LTQ4LjctNjQtOTAuNSAwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2YzAgNDEuOC0yNi43IDc3LjQtNjQgOTAuNWwwIDg1LjVjMCA5Ny4yLTc4LjggMTc2LTE3NiAxNzZTMTYwIDQ2NS4yIDE2MCAzNjhsMC0xOS4yQzg3IDMzNCAzMiAyNjkuNCAzMiAxOTJMMzIgNDh6TTQ4MCAyMjRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFQb2RjYXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBvZGNhc3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJjZSIsICJNMzM2IDM1OS44YzM5LjEtMzIuMyA2NC04MS4xIDY0LTEzNS44IDAtOTcuMi03OC44LTE3Ni0xNzYtMTc2UzQ4IDEyNi44IDQ4IDIyNEM0OCAyNzguNyA3Mi45IDMyNy41IDExMiAzNTkuOCAxMTIuNCAzNzcuNCAxMTUuMiA0MDAuMiAxMTguNCA0MjEuNiA0OCAzODMuOSAwIDMwOS41IDAgMjI0IDAgMTAwLjMgMTAwLjMgMCAyMjQgMFM0NDggMTAwLjMgNDQ4IDIyNGMwIDg1LjYtNDggMTU5LjktMTE4LjUgMTk3LjYgMy4zLTIxLjQgNi00NC4yIDYuNC02MS44em0tMTQtNTMuNGMtOC4zLTEyLjYtMTkuMi0yMS42LTMwLjQtMjcuOC0yLjEtMS4xLTQuMi0yLjItNi4zLTMuMiAxMS43LTEzLjkgMTguOC0zMS45IDE4LjgtNTEuNSAwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGMwIDE5LjYgNy4xIDM3LjYgMTguOCA1MS41LTIuMSAxLTQuMiAyLTYuMyAzLjItMTEuMiA2LjItMjIuMSAxNS4yLTMwLjQgMjcuOC0xOC44LTIyLjMtMzAuMS01MS0zMC4xLTgyLjQgMC03MC43IDU3LjMtMTI4IDEyOC0xMjhzMTI4IDU3LjMgMTI4IDEyOGMwIDMxLjQtMTEuMyA2MC4yLTMwLjEgODIuNHpNMjI0IDMxMmMzMi45IDAgNjQgOC42IDY0IDQzLjggMCAzMy0xMi45IDEwNC4xLTIwLjYgMTMyLjktNS4xIDE5LTI0LjUgMjMuNC00My40IDIzLjRzLTM4LjItNC40LTQzLjQtMjMuNGMtNy44LTI4LjUtMjAuNi05OS43LTIwLjYtMTMyLjggMC0zNS4xIDMxLjEtNDMuOCA2NC00My44em0wLTEyOGE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6Il0KICAgIH07CiAgICBmYUFycm93VXBSaWdodERvdHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtcmlnaHQtZG90cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGI3IiwgIk05NiAzMkM3OC4zIDMyIDY0IDQ2LjMgNjQgNjRTNzguMyA5NiA5NiA5NkwxMTQuNyA5NiA5LjQgMjAxLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTYwIDE0MS4zIDE2MCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDMyek00MDMuOCA3MC4xYTM4LjEgMzguMSAwIDEgMCA3Ni4yIDAgMzguMSAzOC4xIDAgMSAwIC03Ni4yIDB6TTI3OS43IDE5NC4yYTM4LjEgMzguMSAwIDEgMCA3Ni4yIDAgMzguMSAzOC4xIDAgMSAwIC03Ni4yIDB6bTE2Mi4yLTM4LjFhMzguMSAzOC4xIDAgMSAwIDAgNzYuMiAzOC4xIDM4LjEgMCAxIDAgMC03Ni4yek0xNTYuMiAzMTcuOGEzOC4xIDM4LjEgMCAxIDAgNzYuMiAwIDM4LjEgMzguMSAwIDEgMCAtNzYuMiAwem0xNjEuNi0zOC4xYTM4LjEgMzguMSAwIDEgMCAwIDc2LjIgMzguMSAzOC4xIDAgMSAwIDAtNzYuMnptODYuMSAzOC4xYTM4LjEgMzguMSAwIDEgMCA3Ni4yIDAgMzguMSAzOC4xIDAgMSAwIC03Ni4yIDB6TTcwLjEgNDAzLjhhMzguMSAzOC4xIDAgMSAwIDAgNzYuMiAzOC4xIDM4LjEgMCAxIDAgMC03Ni4yem04Ni4xIDM4LjFhMzguMSAzOC4xIDAgMSAwIDc2LjIgMCAzOC4xIDM4LjEgMCAxIDAgLTc2LjIgMHptMTYxLjYtMzguMWEzOC4xIDM4LjEgMCAxIDAgMCA3Ni4yIDM4LjEgMzguMSAwIDEgMCAwLTc2LjJ6bTg2LjEgMzguMWEzOC4xIDM4LjEgMCAxIDAgNzYuMiAwIDM4LjEgMzguMSAwIDEgMCAtNzYuMiAweiJdCiAgICB9OwogICAgZmFDaGVzc1F1ZWVuMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1xdWVlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk4MTldLCAiZjQ0NSIsICJNMjU2IDgwYTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNNS41IDE4NUwxMjggMzg0IDcxLjggNDU0LjNjLTUgNi4zLTcuOCAxNC4xLTcuOCAyMi4yIDAgMTkuNiAxNS45IDM1LjUgMzUuNSAzNS41bDMxMi45IDBjMTkuNiAwIDM1LjUtMTUuOSAzNS41LTM1LjUgMC04LjEtMi43LTE1LjktNy44LTIyLjJMMzg0IDM4NCA1MDYuNSAxODVjMy42LTUuOSA1LjUtMTIuNyA1LjUtMTkuNmwwLS42YzAtMjAuMy0xNi41LTM2LjgtMzYuOC0zNi44LTcuMyAwLTE0LjQgMi4yLTIwLjQgNi4ybC0xNi45IDExLjNjLTEyLjcgOC41LTI5LjYgNi44LTQwLjQtNGwtMzQuMS0zNC4xQzM1Ni4xIDEwMC4xIDM0Ni4yIDk2IDMzNiA5NnMtMjAuMSA0LjEtMjcuMyAxMS4zbC0zMC4xIDMwLjFjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC0zMC4xLTMwLjFDMTk2LjEgMTAwLjEgMTg2LjIgOTYgMTc2IDk2cy0yMC4xIDQuMS0yNy4zIDExLjNsLTM0LjEgMzQuMWMtMTAuOCAxMC44LTI3LjcgMTIuNS00MC40IDRMNTcuMyAxMzQuMmMtNi4xLTQtMTMuMi02LjItMjAuNC02LjItMjAuMyAwLTM2LjggMTYuNS0zNi44IDM2LjhsMCAuNmMwIDYuOSAxLjkgMTMuNyA1LjUgMTkuNnoiXQogICAgfTsKICAgIGZhQW5jaG9yQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYW5jaG9yLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGFiIiwgIk0zMjAuNSA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0tMzItOTZjLTUzIDAtOTYgNDMtOTYgOTYgMCA0MS44IDI2LjcgNzcuNCA2NCA5MC41bDAgMjU3LjljLTYyLjktMTQuMy0xMTAuMi02OS43LTExMS45LTEzNi41bDE2LjEgMTQuMWMxMCA4LjcgMjUuMSA3LjcgMzMuOS0yLjNzNy43LTI1LjEtMi4zLTMzLjlsLTY0LTU2Yy05LTcuOS0yMi42LTcuOS0zMS42IDBsLTY0IDU2Yy0xMCA4LjctMTEgMjMuOS0yLjMgMzMuOXMyMy45IDExIDMzLjkgMi4zbDE2LjItMTQuMmMyLjEgMTEzLjEgOTQuNCAyMDQuMSAyMDggMjA0LjEgMTYuNiAwIDMyLjctMS45IDQ4LjItNS42LTIwLjMtMzAuNS0zMi4yLTY3LTMyLjItMTA2LjQgMC0yNy4zIDUuNy01My4zIDE2LTc2LjlsMC0xMzYuNmMzNy4zLTEzLjIgNjQtNDguNyA2NC05MC41IDAtNTMtNDMtOTYtOTYtOTZ6bTIwOCA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFFbGxpcHNpc1ZlcnRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVsbGlwc2lzLXZlcnRpY2FsIiwKICAgICAgaWNvbjogWzEyOCwgNTEyLCBbImVsbGlwc2lzLXYiXSwgImYxNDIiLCAiTTY0IDE0NGE1NiA1NiAwIDEgMSAwLTExMiA1NiA1NiAwIDEgMSAwIDExMnptMCAyMjRjMzAuOSAwIDU2IDI1LjEgNTYgNTZzLTI1LjEgNTYtNTYgNTYtNTYtMjUuMS01Ni01NiAyNS4xLTU2IDU2LTU2em01Ni0xMTJjMCAzMC45LTI1LjEgNTYtNTYgNTZzLTU2LTI1LjEtNTYtNTYgMjUuMS01NiA1Ni01NiA1NiAyNS4xIDU2IDU2eiJdCiAgICB9OwogICAgZmFFbGxpcHNpc1YgPSBmYUVsbGlwc2lzVmVydGljYWw7CiAgICBmYUhlYXJ0Q2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhcnQtY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZmUiLCAiTTI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN0MyOTYgNTIuNSAzMzYuMiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxNy42LTMuNCAzNS42LTkuNSA1My43LTIxLjgtOC42LTQ1LjYtMTMuNC03MC41LTEzLjQtMTA2IDAtMTkyIDg2LTE5MiAxOTIgMCAyOC41IDYuMiA1NS42IDE3LjQgODAtLjUgMC0uOSAwLTEuNCAwLTE1LjUgMC0zMC44LTQuNi00My4xLTE0LjEtNzMtNTUuNy0yMTIuOS0xODYtMjEyLjktMjk4LjJsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6TTQzMiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0wIDIyOGEyMCAyMCAwIDEgMCAwLTQwIDIwIDIwIDAgMSAwIDAgNDB6bTAtMTgwYy04LjggMC0xNiA3LjItMTYgMTZsMCA4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtODBjMC04LjgtNy4yLTE2LTE2LTE2eiJdCiAgICB9OwogICAgZmFCdWlsZGluZ0NpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGQzIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0xMC41LTE0LjYtMTktMzAuNy0yNS4xLTQ4bC03NC45IDAgMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzIgMCA0IC4yIDUuOSAuNSA2LTIzLjYgMTYuMy00NS40IDMwLjEtNjQuNWwtNCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0YzI3LjUtMTkuOCA2MC4zLTMyLjQgOTYtMzUuNEw0MTYgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgMHptMzIgMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI3MiA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xMjggMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFQZXJzb25BcnJvd1VwRnJvbUxpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWFycm93LXVwLWZyb20tbGluZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTM5IiwgIk0xOTItMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTMxOC4zIDI5OS4xbC00Ni4zLTYyLjQgMCAyNDMuMyAyNzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1NDRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsODAgMCAwLTI0My4zLTQ2LjMgNjIuNGMtMTAuNSAxNC4yLTMwLjYgMTcuMi00NC44IDYuNnMtMTcuMi0zMC42LTYuNi00NC44bDcwLjUtOTVDMTEwIDEzMiAxNDkuNyAxMTIgMTkyIDExMnM4MiAyMCAxMDcuMiA1My45bDcwLjUgOTVjMTAuNSAxNC4yIDcuNiAzNC4yLTYuNiA0NC44cy0zNC4yIDcuNi00NC44LTYuNnpNMjA4IDQ4MGwwLTEyOGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDEyOCAzMiAwek01NjYuNiAxMDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBMNDk2IDc3LjMgNDk2IDIyNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE0Ni43LTI1LjQgMjUuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsODAtODBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjN6Il0KICAgIH07CiAgICBmYU5vdEVxdWFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm5vdC1lcXVhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTNlIiwgIk0zNzguNiA4MS44YzkuOC0xNC43IDUuOC0zNC42LTguOS00NC40cy0zNC42LTUuOC00NC40IDguOUwyNzAuOSAxMjggMzIgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE5Ni4yIDAtODUuMyAxMjgtMTEwLjkgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2OC4yIDAtMzAuOCA0Ni4yYy05LjggMTQuNy01LjggMzQuNiA4LjkgNDQuNHMzNC42IDUuOCA0NC40LTguOUwxNzcuMSAzODQgNDE2IDM4NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTk2LjIgMCA4NS4zLTEyOCAxMTAuOSAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02OC4yIDAgMzAuOC00Ni4yeiJdCiAgICB9OwogICAgZmFUcmFpblRyYW0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhaW4tdHJhbSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODY1MF0sICJlNWI0IiwgIk0wIDhDMC01LjMgMTAuNy0xNiAyNC0xNmwzMzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtOC0xMjAgMCAwIDY0IDQwIDBjNTMgMCA5NiA0MyA5NiA5NmwwIDE2MGMwIDMxLjItMTQuOSA1OS0zOCA3Ni41bDY0LjMgNzZjOC42IDEwLjEgNy4zIDI1LjMtMi44IDMzLjhzLTI1LjMgNy4zLTMzLjgtMi44bC03NC42LTg4LjFjLTMuNiAuNC03LjMgLjYtMTEuMSAuNmwtMTI4IDBjLTMuOCAwLTcuNS0uMi0xMS4xLS42TDQyLjMgNTM1LjVjLTguNiAxMC4xLTIzLjcgMTEuNC0zMy44IDIuOHMtMTEuNC0yMy43LTIuOC0zMy44bDY0LjMtNzZDNDYuOSA0MTEgMzIgMzgzLjIgMzIgMzUybDAtMTYwYzAtNTMgNDMtOTYgOTYtOTZsNDAgMCAwLTY0LTEyMCAwIDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNFMwIDUzLjMgMCA0MEwwIDh6TTEyOCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTI4IDB6bTMyIDE5MmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem05NiAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYVBsYW5lRGVwYXJ0dXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYW5lLWRlcGFydHVyZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODc0N10sICJmNWIwIiwgIk0zNzIgMTQzLjlMMTcyLjcgNDAuMmMtOC00LjEtMTcuMy00LjgtMjUuNy0xLjdsLTQxLjEgMTVjLTEwLjMgMy43LTEzLjggMTYuNC03LjEgMjVMMjAwLjMgMjA2LjQgMTAwLjEgMjQyLjggNDAgMjA2LjJjLTYuMi0zLjgtMTMuOC00LjUtMjAuNy0yLjFMMyAyMTAuMWMtOS40IDMuNC0xMy40IDE0LjUtOC4zIDIzLjFsNTMuNiA5MS44YzE1LjYgMjYuNyA0OC4xIDM4LjQgNzcuMSAyNy44bDEyLjktNC43IDAgMCAzOTguNC0xNDVjMjkuMS0xMC42IDQ0LTQyLjcgMzMuNS03MS44cy00Mi43LTQ0LTcxLjgtMzMuNUwzNzIgMTQzLjl6TTMyLjIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDUxMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01MTIgMHoiXQogICAgfTsKICAgIGZhUmlnaHRUb0JyYWNrZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmlnaHQtdG8tYnJhY2tldCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzaWduLWluLWFsdCJdLCAiZjJmNiIsICJNMzQ1IDI3M2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOUwyMDEgOTVjLTYuOS02LjktMTcuMi04LjktMjYuMi01LjJTMTYwIDEwMi4zIDE2MCAxMTJsMCA4MC0xMTIgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMTIgMCAwIDgwYzAgOS43IDUuOCAxOC41IDE0LjggMjIuMnMxOS4zIDEuNyAyNi4yLTUuMkwzNDUgMjczem03IDE0M2MtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzUzIDAgOTYtNDMgOTYtOTZsMC0yNTZjMC01My00My05Ni05Ni05NmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAweiJdCiAgICB9OwogICAgZmFTaWduSW5BbHQgPSBmYVJpZ2h0VG9CcmFja2V0OwogICAgZmFTZENhcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2QtY2FyZCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmN2MyIiwgIk0zODQgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMMTI1LjMgMEMxMDguMyAwIDkyIDYuNyA4MCAxOC43TDE4LjcgODBDNi43IDkyIDAgMTA4LjMgMCAxMjUuM0wwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NHpNMTYwIDg4bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0em04OCAwbDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0em04OCAwbDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0eiJdCiAgICB9OwogICAgZmFIb3VzZUNpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTBhIiwgIk00OTYgNTQ0YTE0NCAxNDQgMCAxIDEgMC0yODggMTQ0IDE0NCAwIDEgMSAwIDI4OHpNMjY4LjYgNi41YzEyLjItOS4zIDI5LjctOC43IDQxLjIgMmwyMTcuNiAyMDJjLTEwLjItMS43LTIwLjctMi42LTMxLjMtMi42LTc4LjYgMC0xNDYuMSA0Ny4yLTE3NS44IDExNC44LTUuMS0xLjgtMTAuNS0yLjgtMTYuMi0yLjhsLTMyIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTYgOTEgMGM2LjEgMTcuMyAxNC42IDMzLjQgMjUuMSA0OEwxNDQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDggMi40LTJ6TTQ5NiA0NDRhMjAgMjAgMCAxIDAgMCA0MCAyMCAyMCAwIDEgMCAwLTQwem0wLTE0MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgODBjMCA4LjggNy4yIDE2IDE2IDE2IDguOCAwIDE2LTcuMiAxNi0xNmwwLTgwYzAtOC44LTcuMi0xNi0xNi0xNnoiXQogICAgfTsKICAgIGZhU2hla2VsU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGVrZWwtc2lnbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzgzNjIsICJpbHMiLCAic2hla2VsIiwgInNoZXFlbCIsICJzaGVxZWwtc2lnbiJdLCAiZjIwYiIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzUyIDEyOCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhMMzIgMzJ6TTMyMCA0ODBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhsMC0yODhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTEyOCAwIDAtMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2MCAweiJdCiAgICB9OwogICAgZmFJbHMgPSBmYVNoZWtlbFNpZ247CiAgICBmYVNoZWtlbCA9IGZhU2hla2VsU2lnbjsKICAgIGZhU2hlcWVsID0gZmFTaGVrZWxTaWduOwogICAgZmFTaGVxZWxTaWduID0gZmFTaGVrZWxTaWduOwogICAgZmFSYWRpbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyYWRpbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI1MV0sICJmOGQ3IiwgIk00OTQuOCAxNWMxMi43LTMuNyAyMC0xNy4xIDE2LjMtMjkuOFM0OTQtMzQuOCA0ODEuMy0zMUw1MS44IDk0LjlDNDIuNCA5Ny42IDMzLjkgMTAyLjEgMjYuNiAxMDggMTAuNSAxMTkuNyAwIDEzOC42IDAgMTYwTDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDIxOC41IDk2IDQ5NC44IDE1ek0zNjggMjA4YTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwek02NCAyNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTEyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMODggMjcyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMCA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw4OCAzNjhjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFIYW5kRG90cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWRvdHMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYWxsZXJnaWVzIl0sICJmNDYxIiwgIk0yODggMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0xNzZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyNzJjMCAxLjUgMCAzLjEgLjEgNC42TDY3LjYgMjgzYy0xNi0xNS4yLTQxLjMtMTQuNi01Ni42IDEuNFMtMy42IDMyNS43IDEyLjQgMzQxTDEyNC44IDQ0OGM0My4xIDQxLjEgMTAwLjQgNjQgMTYwIDY0bDE5LjIgMGM5Ny4yIDAgMTc2LTc4LjggMTc2LTE3NmwwLTIwOGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDExMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTIwOHpNMjAwIDM1MmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0xMjAtNTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em00MCA4OGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0tODggMjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdCiAgICB9OwogICAgZmFBbGxlcmdpZXMgPSBmYUhhbmREb3RzOwogICAgZmFCb29rU2t1bGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9vay1za3VsbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJib29rLWRlYWQiXSwgImY2YjciLCAiTTk2IDUxMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTY2LjdjMTguNi02LjYgMzItMjQuNCAzMi00NS4zbDAtMjg4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDk2IDBDNDMgMCAwIDQzIDAgOTZMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NnpNNjQgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI1NiAwIDAgNjQtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0yNzIgMTYzLjJsMCAxMi44YzAgOC44LTcuMiAxNi0xNiAxNmwtNjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTIuOGMtMTkuNC0xMS43LTMyLTMwLjMtMzItNTEuMiAwLTM1LjMgMzUuOC02NCA4MC02NHM4MCAyOC43IDgwIDY0YzAgMjAuOS0xMi42IDM5LjUtMzIgNTEuMnpNMjA4IDExMmExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem00OCAxNmExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bTc0LjIgOTUuN2M0LjYgMTAuMSAuMSAyMS45LTkuOSAyNi41bC00Ny45IDIxLjggNDcuOSAyMS44YzEwLjEgNC42IDE0LjUgMTYuNCA5LjkgMjYuNXMtMTYuNCAxNC41LTI2LjUgOS45TDIyNCAyOTQgMTQ0LjMgMzMwLjJjLTEwLjEgNC42LTIxLjkgLjEtMjYuNS05LjlzLS4xLTIxLjkgOS45LTI2LjVsNDcuOS0yMS44LTQ3LjktMjEuOGMtMTAuMS00LjYtMTQuNS0xNi40LTkuOS0yNi41czE2LjQtMTQuNSAyNi41LTkuOUwyMjQgMjUwIDMwMy43IDIxMy44YzEwLjEtNC42IDIxLjktLjEgMjYuNSA5Ljl6Il0KICAgIH07CiAgICBmYUJvb2tEZWFkID0gZmFCb29rU2t1bGw7CiAgICBmYVVubG9ja0tleWhvbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidW5sb2NrLWtleWhvbGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsidW5sb2NrLWFsdCJdLCAiZjEzZSIsICJNMTkyIDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDY0IDE5MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyMjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsMC02NGMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOCA2My41IDAgMTE2LjEgNDYuMSAxMjYuMiAxMDYuNyAyLjkgMTcuNC04LjggMzMuOS0yNi4zIDM2LjlzLTMzLjktOC44LTM2LjktMjYuM0MyNTAgNTUuMSAyMjMuNyAzMiAxOTIgMzJ6bTQwIDMyOGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAweiJdCiAgICB9OwogICAgZmFVbmxvY2tBbHQgPSBmYVVubG9ja0tleWhvbGU7CiAgICBmYUZpbGVBcnJvd1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtYXJyb3ctdXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZmlsZS11cGxvYWQiXSwgImY1NzQiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0yMDkgMjYzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtNjQgNjRjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwyMy0yMyAwIDg2LjFjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTg2LjEgMjMgMjNjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02NC02NHoiXQogICAgfTsKICAgIGZhRmlsZVVwbG9hZCA9IGZhRmlsZUFycm93VXA7CiAgICBmYUZhY2VHcmluVGVhcnMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi10ZWFycyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODUxNCwgImdyaW4tdGVhcnMiXSwgImY1ODgiLCAiTTU1NC44IDIwMy40bDE2LjMgMi4zQzU0Ny43IDg4LjQgNDQ0LjIgMCAzMjAgMFM5Mi4zIDg4LjQgNjguOSAyMDUuN2wxNi4zLTIuM2MzNy01LjMgNjguNiAyNi40IDYzLjQgNjMuNGwtNi43IDQ2LjdjLTQuMSAyOS0yMS42IDUzLjItNDUuOCA2Ni44IDQzLjcgNzguNSAxMjcuNiAxMzEuNyAyMjMuOCAxMzEuN3MxODAuMS01My4xIDIyMy44LTEzMS43Yy0yNC4xLTEzLjUtNDEuNi0zNy44LTQ1LjgtNjYuOGwtNi43LTQ2LjdjLTUuMy0zNyAyNi40LTY4LjYgNjMuNC02My40ek00NzAuMyAzMjYuOUM0NDcuOSAzODguMiAzODkuMSA0MzIgMzIwIDQzMlMxOTIuMSAzODguMiAxNjkuNyAzMjYuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xYzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMXpNMjEyIDIwOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4em0xODgtMjhjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6TTY0MCAzMDAuNmMwLTI1LjYtMTguOC00Ny4zLTQ0LjEtNTAuOUw1NDkuMSAyNDNjLTEwLjYtMS41LTE5LjYgNy41LTE4LjEgMTguMWw2LjcgNDYuN2MzLjYgMjUuMyAyNS4zIDQ0LjEgNTAuOSA0NC4xIDI4LjQgMCA1MS40LTIzIDUxLjQtNTEuNHptLTY0MCAwQzAgMzI5IDIzIDM1MiA1MS40IDM1MiA3NyAzNTIgOTguNyAzMzMuMiAxMDIuMyAzMDcuOWw2LjctNDYuN2MxLjUtMTAuNi03LjUtMTkuNi0xOC4xLTE4LjFsLTQ2LjcgNi43QzE4LjggMjUzLjMgMCAyNzUgMCAzMDAuNnoiXQogICAgfTsKICAgIGZhR3JpblRlYXJzMiA9IGZhRmFjZUdyaW5UZWFyczI7CiAgICBmYVBlblRvU3F1YXJlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW4tdG8tc3F1YXJlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImVkaXQiXSwgImYwNDQiLCAiTTQ3MS42IDIxLjdjLTIxLjktMjEuOS01Ny4zLTIxLjktNzkuMiAwTDM2OCA0Ni4xIDQ2NS45IDE0NCA0OTAuMyAxMTkuNmMyMS45LTIxLjkgMjEuOS01Ny4zIDAtNzkuMkw0NzEuNiAyMS43em0tMjk5LjIgMjIwYy02LjEgNi4xLTEwLjggMTMuNi0xMy41IDIxLjlsLTI5LjYgODguOGMtMi45IDguNi0uNiAxOC4xIDUuOCAyNC42czE1LjkgOC43IDI0LjYgNS44bDg4LjgtMjkuNmM4LjItMi43IDE1LjctNy40IDIxLjktMTMuNUw0MzIgMTc3LjkgMzM0LjEgODAgMTcyLjQgMjQxLjd6TTk2IDY0QzQzIDY0IDAgMTA3IDAgMTYwTDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJMOTYgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDk2IDY0eiJdCiAgICB9OwogICAgZmFFZGl0MiA9IGZhUGVuVG9TcXVhcmUyOwogICAgZmFFYXJ0aEV1cm9wZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlYXJ0aC1ldXJvcGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZ2xvYmUtZXVyb3BlIl0sICJmN2EyIiwgIk0yNTYuMiA0OGMxMTQuOCAuMSAyMDcuOCA5My4yIDIwNy44IDIwOCAwIDIyLjEtMy40IDQzLjQtOS44IDYzLjQtMiAuNC00LjEgLjYtNi4yIC42bC0yLjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTI5LjMtMjkuM2MtNi02LTkuNC0xNC4xLTkuNC0yMi42bDAtNTAuN2MwLTguOCA3LjItMTYgMTYtMTZzMTYtNy4yIDE2LTE2LTcuMi0xNi0xNi0xNmwtMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnMtNy4yIDE2LTE2IDE2bC0yNS40IDBjLTEyLjUgMC0yMi42LTEwLjEtMjIuNi0yMi42IDAtNiAyLjQtMTEuOCA2LjYtMTZsNzAuMS03MC4xYzIuMS0yLjEgMy4zLTUgMy4zLTggMC02LjItNS4xLTExLjMtMTEuMy0xMS4zbC0xNC4xIDBjLTEyLjUgMC0yMi42LTEwLjEtMjIuNi0yMi42IDAtNiAyLjQtMTEuOCA2LjYtMTZsMjMuMS0yMy4xYy44LS44IDEuNi0xLjUgMi41LTIuMnpNNDM4LjQgMzU2LjFjLTMyLjggNTkuNi05My45IDEwMS40LTE2NS4yIDEwNy4yLS43LTIuMy0xLjEtNC44LTEuMS03LjMgMC0xMy4zLTEwLjctMjQtMjQtMjRsLTI2LjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTI5LjMtMjkuM2MtNi02LTkuNC0xNC4xLTkuNC0yMi42bDAtNjYuN2MwLTE3LjcgMTQuMy0zMiAzMi0zMmw5OC43IDBjOC41IDAgMTYuNiAzLjQgMjIuNiA5LjRsMjkuMyAyOS4zYzYgNiAxNC4xIDkuNCAyMi42IDkuNGw1LjUgMGM4LjUgMCAxNi42IDMuNCAyMi42IDkuNGwxNiAxNmM0LjIgNC4yIDEwIDYuNiAxNiA2LjYgNC44IDAgOS4zIDEuNSAxMyA0LjF6TTI1NiA1MTJsMjYuMi0xLjNjLTguNiAuOS0xNy4zIDEuMy0yNi4yIDEuM3ptMjYuMi0xLjNDNDExLjMgNDk3LjYgNTEyIDM4OC42IDUxMiAyNTYgNTEyIDExNC42IDM5Ny40IDAgMjU2IDBsMCAwQzExNC42IDAgMCAxMTQuNiAwIDI1NiAwIDM4My41IDkzLjIgNDg5LjMgMjE1LjMgNTA4LjggMjI4LjUgNTEwLjkgMjQyLjEgNTEyIDI1NiA1MTJ6TTE4Ny4zIDEyMy4zbC0zMiAzMmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzMi0zMmM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6Il0KICAgIH07CiAgICBmYUdsb2JlRXVyb3BlID0gZmFFYXJ0aEV1cm9wZTsKICAgIGZhRmFjZUdyaW5CZWFtU3dlYXQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi1iZWFtLXN3ZWF0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NTE3LCAiZ3Jpbi1iZWFtLXN3ZWF0Il0sICJmNTgzIiwgIk01NDYuMi0uMWMxNC43IDE3LjggMjkuOCA0MC4xIDI5LjggNjQuMSAwIDM2LjQtMjcuNiA2NC02NCA2NHMtNjQtMjcuNi02NC02NGMwLTI0IDE1LjItNDYuMyAyOS44LTY0LjEgOC44LTEwLjcgMTguNS0yMC44IDI5LTMwIDMtMi42IDcuNC0yLjYgMTAuNCAwIDEwLjUgOS4xIDIwLjEgMTkuMyAyOSAzMHpNMjg4IDBjNDIuNSAwIDgyLjYgMTAuNCAxMTcuOCAyOC43LTMuNiAxMC45LTUuOCAyMi43LTUuOCAzNS4zIDAgNjIuOSA0OS4xIDExMiAxMTIgMTEyIDYuNCAwIDEyLjctLjUgMTguOC0xLjUgOC42IDI1LjYgMTMuMiA1MyAxMy4yIDgxLjUgMCAxNDEuNC0xMTQuNiAyNTYtMjU2IDI1NlMzMiAzOTcuNCAzMiAyNTYgMTQ2LjYgMCAyODggMHpNNDE4LjcgMzA4LjlDMzc5LjUgMzIxLjEgMzM1LjEgMzI4IDI4OCAzMjhzLTkxLjUtNi45LTEzMC43LTE5LjFjLTExLjktMy43LTIzLjkgNi4zLTE5LjYgMTguMSAyMi40IDYxLjMgODEuMyAxMDUuMSAxNTAuMyAxMDUuMXMxMjcuOS00My44IDE1MC4zLTEwNS4xYzQuMy0xMS44LTcuNy0yMS44LTE5LjYtMTguMXpNMjA4IDE4MGMxNS41IDAgMjggMTIuNSAyOCAyOGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04YzAtMzcuNi0zMC40LTY4LTY4LTY4cy02OCAzMC40LTY4IDY4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0xNS41IDEyLjUtMjggMjgtMjh6bTEzMiAyOGMwLTE1LjUgMTIuNS0yOCAyOC0yOHMyOCAxMi41IDI4IDI4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0zNy42LTMwLjQtNjgtNjgtNjhzLTY4IDMwLjQtNjggNjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOHoiXQogICAgfTsKICAgIGZhR3JpbkJlYW1Td2VhdDIgPSBmYUZhY2VHcmluQmVhbVN3ZWF0MjsKICAgIGZhQ2lyY2xlSGFsZlN0cm9rZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtaGFsZi1zdHJva2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5NjgwLCAiYWRqdXN0Il0sICJmMDQyIiwgIk00NDggMjU2YzAtMTA2LTg2LTE5Mi0xOTItMTkybDAgMzg0YzEwNiAwIDE5Mi04NiAxOTItMTkyek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdCiAgICB9OwogICAgZmFBZGp1c3QgPSBmYUNpcmNsZUhhbGZTdHJva2U7CiAgICBmYVBlcnNvbk1pbGl0YXJ5VG9QZXJzb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLW1pbGl0YXJ5LXRvLXBlcnNvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTRjIiwgIk03MSAxMi41Yy04LjYgMS0xNSA4LjItMTUgMTYuOCAwIDkuMyA3LjUgMTYuOCAxNi43IDE2LjlsMTExLjQgMGM4LjgtLjEgMTUuOS03LjIgMTUuOS0xNkwyMDAgMTZjMC05LjUtOC4zLTE3LTE3LjgtMTUuOUw3MSAxMi41ek0xODkuNSA3OC4xbC0xMjIuOSAwYy0xLjYgNS43LTIuNSAxMS43LTIuNSAxNy45IDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC02LjItLjktMTIuMi0yLjUtMTcuOXpNMzIgMjU2bDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMS44IDAgMy41LS4xIDUuMi0uNEw1MyAyMDguNkM0MC4xIDIyMC4zIDMyIDIzNy4yIDMyIDI1NnptMTkwLjIgNDIuNWMxLjEtMy4zIDEuOC02LjggMS44LTEwLjVsMC0zMmMwLTM1LjMtMjguNy02NC02NC02NGwtNjQgMGMtMy43IDAtNy40IC4zLTEwLjkgLjlMMjIyLjIgMjk4LjV6TTM4NCAxNjBhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6bS0zMiAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwek0yMTUuOCA0NTAuMWM1LjItNC42IDguMi0xMS4xIDguMi0xOC4xcy0zLTEzLjUtOC4yLTE4LjFsLTY0LTU2Yy03LjEtNi4yLTE3LjEtNy43LTI1LjctMy44UzExMiAzNjYuNiAxMTIgMzc2bDAgMzItODggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4OCAwIDAgMzJjMCA5LjQgNS41IDE4IDE0LjEgMjEuOXMxOC42IDIuNCAyNS43LTMuOGw2NC01NnpNMjg4IDQzMS45YzAgNi45IDMgMTMuNSA4LjEgMTguMWw2NCA1Ni40YzcuMSA2LjIgMTcuMSA3LjggMjUuNyAzLjlTNDAwIDQ5Ny44IDQwMCA0ODguNGwwLTMyLjQgODggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODggMCAwLTMyYzAtOS40LTUuNS0xOC0xNC4xLTIxLjlzLTE4LjYtMi40LTI1LjcgMy44bC02NCA1NmMtNS4yIDQuNS04LjIgMTEuMS04LjIgMTh6Il0KICAgIH07CiAgICBmYVRhYmxlQ2VsbHNDb2x1bW5Mb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlLWNlbGxzLWNvbHVtbi1sb2NrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU2NzgiLCAiTTI1NiAyMjRsMCAxOTIgNjQgMCAwLTE5Mi02NCAwem0yNTYtNzljLTQ2LjcgNS44LTg1LjYgMzYuOC0xMDIuNyA3OWwtMjUuMyAwIDAgOTAuOGMtMTAuMSAxNS4yLTE2IDMzLjQtMTYgNTMuMWwwIDk2YzAgNS41IC41IDEwLjkgMS4zIDE2LjFMMTI4IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMNjQgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA0OXpNMTI4IDIyNGwwIDE5MiA2NCAwIDAtMTkyLTY0IDB6bTQzMiA0OC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNNDE2IDM2OGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXQogICAgfTsKICAgIGZhVHJ1Y2tGaWVsZFVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLWZpZWxkLXVuIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1OGUiLCAiTTk2IDMyQzYwLjcgMzIgMzIgNjAuNyAzMiA5NmwwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDAgNDhjMCAyMS4xIDEzLjcgMzkuMSAzMi42IDQ1LjUtLjQgMy40LS42IDctLjYgMTAuNSAwIDQ4LjYgMzkuNCA4OCA4OCA4OHM4OC0zOS40IDg4LTg4YzAtMi43LS4xLTUuNC0uNC04bDE0NC43IDBjLS4yIDIuNi0uNCA1LjMtLjQgOCAwIDQ4LjYgMzkuNCA4OCA4OCA4OHM4OC0zOS40IDg4LTg4YzAtMi43LS4xLTUuNC0uNC04bC40IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtMjQuNyAwLTEuNy00LjItNDMuOC0xMDYuM2MtMTIuMy0zMC00MS42LTQ5LjUtNzQtNDkuNWwtNDAuNCAwQzM2NC40IDQ0LjkgMzQzLjcgMzIgMzIwIDMyTDk2IDMyek0zODQgMjI0bDAtOTYgMzEuOSAwYzYuNSAwIDEyLjMgMy45IDE0LjggOS45bDM1LjQgODYuMS04Mi4xIDB6TTE1MiAzNTJhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0yODAgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMjU2LjYgMTMyLjlsMjcuNCA0MSAwLTI5LjljMC0xMSA5LTIwIDIwLTIwczIwIDkgMjAgMjBsMCA5NmMwIDguOC01LjggMTYuNi0xNC4yIDE5LjFzLTE3LjUtLjctMjIuNC04bC0yNy40LTQxIDAgMjkuOWMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC05NmMwLTguOCA1LjgtMTYuNiAxNC4yLTE5LjFzMTcuNSAuNyAyMi40IDh6TTEzMiAxNDRsMCA2NGMwIDYuNiA1LjQgMTIgMTIgMTJzMTItNS40IDEyLTEybDAtNjRjMC0xMSA5LTIwIDIwLTIwczIwIDkgMjAgMjBsMCA2NGMwIDI4LjctMjMuMyA1Mi01MiA1MnMtNTItMjMuMy01Mi01MmwwLTY0YzAtMTEgOS0yMCAyMC0yMHMyMCA5IDIwIDIweiJdCiAgICB9OwogICAgZmFDbG9jazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzMzksICJjbG9jay1mb3VyIl0sICJmMDE3IiwgIk0yNTYgMGEyNTYgMjU2IDAgMSAxIDAgNTEyIDI1NiAyNTYgMCAxIDEgMC01MTJ6TTIzMiAxMjBsMCAxMzZjMCA4IDQgMTUuNSAxMC43IDIwbDk2IDY0YzExIDcuNCAyNS45IDQuNCAzMy4zLTYuN3M0LjQtMjUuOS02LjctMzMuM0wyODAgMjQzLjIgMjgwIDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHoiXQogICAgfTsKICAgIGZhQ2xvY2tGb3VyMiA9IGZhQ2xvY2syOwogICAgZmFCb29rID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyMTJdLCAiZjAyZCIsICJNMzg0IDUxMkw5NiA1MTJjLTUzIDAtOTYtNDMtOTYtOTZMMCA5NkMwIDQzIDQzIDAgOTYgMEw0MDAgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDI4OGMwIDIwLjktMTMuNCAzOC43LTMyIDQ1LjNsMCA2Ni43YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwek05NiAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjU2IDAgMC02NC0yNTYgMHptMzItMjMyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNzYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTI0IDcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNzYgMHoiXQogICAgfTsKICAgIGZhRmFjZUxhdWdoV2luazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1sYXVnaC13aW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxhdWdoLXdpbmsiXSwgImY1OWMiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xMDEuNiAzMTRjLTMuNy0xMy43IDcuNS0yNiAyMS43LTI2bDI2NS40IDBjMTQuMiAwIDI1LjQgMTIuMyAyMS43IDI2LTE4LjUgNjgtODAuNiAxMTgtMTU0LjQgMTE4UzEyMCAzODIgMTAxLjYgMzE0ek0xNDQgMTkyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2NCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwYy0xMSAwLTIwIDktMjAgMjB6Il0KICAgIH07CiAgICBmYUxhdWdoV2luazIgPSBmYUZhY2VMYXVnaFdpbmsyOwogICAgZmFDbG91ZE1lYXRiYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLW1lYXRiYWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3M2IiLCAiTTAgMjI0YzAgNTMgNDMgOTYgOTYgOTZsMjYuOSAwYzMuNS0xMi4xIDEwLjEtMjMuMyAxOS4yLTMyLjRsMS40LTEuNGMxNS0xNSAzNS4zLTIyLjkgNTYuMS0yMi4yIDE0LjItMTUuMSAzNC4yLTIzLjkgNTUuNC0yMy45bDIgMGMyMS4xIDAgNDEuMSA4LjggNTUuNCAyMy45IDIwLjgtLjYgNDEuMSA3LjMgNTYuMSAyMi4ybDEuNCAxLjRjOS4yIDkuMiAxNS43IDIwLjQgMTkuMiAzMi40bDI2LjkgMGM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NmMtLjUgMC0xLjEgMC0xLjYgMCAxLjEtNS4yIDEuNi0xMC41IDEuNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MC0yNC4zIDAtNDYuMSAxMC45LTYwLjggMjgtMTguNy0zNS43LTU2LjEtNjAtOTkuMi02MC02MS45IDAtMTEyIDUwLjEtMTEyIDExMiAwIDcuMSAuNyAxNC4xIDEuOSAyMC44LTM4LjMgMTIuNi02NS45IDQ4LjctNjUuOSA5MS4yek0xNTYuNSA0MjQuM2M5LjUgNi4zIDE0LjIgMTcuNyAxMS45IDI4LjgtMS44IDkuMiAxIDE4LjcgNy43IDI1LjNsMS40IDEuNGM2LjYgNi42IDE2LjEgOS41IDI1LjMgNy43IDExLjEtMi4yIDIyLjUgMi41IDI4LjggMTEuOSA1LjIgNy44IDE0IDEyLjUgMjMuMyAxMi41bDIgMGM5LjQgMCAxOC4xLTQuNyAyMy4zLTEyLjUgNi4zLTkuNSAxNy43LTE0LjIgMjguOC0xMS45IDkuMiAxLjggMTguNy0xIDI1LjMtNy43bDEuNC0xLjRjNi42LTYuNiA5LjUtMTYuMSA3LjctMjUuMy0yLjItMTEuMSAyLjUtMjIuNSAxMS45LTI4LjggNy44LTUuMiAxMi41LTE0IDEyLjUtMjMuM2wwLTJjMC05LjQtNC43LTE4LjEtMTIuNS0yMy4zLTkuNS02LjMtMTQuMi0xNy43LTExLjktMjguOCAxLjgtOS4yLTEtMTguNy03LjctMjUuM2wtMS40LTEuNGMtNi42LTYuNi0xNi4xLTkuNS0yNS4zLTcuNy0xMS4xIDIuMi0yMi41LTIuNS0yOC44LTExLjktNS4yLTcuOC0xNC0xMi41LTIzLjMtMTIuNWwtMiAwYy05LjQgMC0xOC4xIDQuNy0yMy4zIDEyLjUtNi4zIDkuNS0xNy43IDE0LjItMjguOCAxMS45LTkuMi0xLjgtMTguNyAxLTI1LjMgNy43bC0xLjQgMS40Yy02LjYgNi42LTkuNSAxNi4xLTcuNyAyNS4zIDIuMiAxMS4xLTIuNSAyMi41LTExLjkgMjguOC03LjggNS4yLTEyLjUgMTQtMTIuNSAyMy4zbDAgMmMwIDkuNCA0LjcgMTguMSAxMi41IDIzLjN6TTQ4IDQ0OGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bTQxNiAwYTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnoiXQogICAgfTsKICAgIGZhQ2hhcnRBcmVhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYXJ0LWFyZWEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYXJlYS1jaGFydCJdLCAiZjFmZSIsICJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMzZjMCA4LjggNy4yIDE2IDE2IDE2bDQwMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDgwIDQ4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnpNMjQwIDk2YzYuNyAwIDEzLjEgMi44IDE3LjcgNy44TDMyOC44IDE4MS4zIDM3NSAxMzVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNjQgNjRjNC41IDQuNSA3IDEwLjYgNyAxN2wwIDExMmMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMzA0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMTEyYzAtNiAyLjMtMTEuOCA2LjMtMTYuMmw4OC05NmM0LjUtNSAxMS03LjggMTcuNy03Ljh6Il0KICAgIH07CiAgICBmYUFyZWFDaGFydCA9IGZhQ2hhcnRBcmVhOwogICAgZmFSdXBpYWhTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJ1cGlhaC1zaWduIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUyM2QiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsODAgMGM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NCAwIDU0LjMtMzAgMTAxLjUtNzQuNCAxMjYuMWw0MSAxMzYuN2M1LjEgMTYuOS00LjUgMzQuOC0yMS41IDM5LjhzLTM0LjgtNC41LTM5LjgtMjEuNUwxMjAuMSAzMTkuOGMtMi43IC4xLTUuNCAuMi04LjEgLjJsLTQ4IDAgMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OEwwIDY0ek02NCAyNTZsNDggMGM0NC4yIDAgODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MGwtNDggMCAwIDE2MHptMjU2LTMybDgwIDBjNjEuOSAwIDExMiA1MC4xIDExMiAxMTJTNDYxLjkgNDQ4IDQwMCA0NDhsLTQ4IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptODAgMTYwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4bC00OCAwIDAgOTYgNDggMHoiXQogICAgfTsKICAgIGZhVGV4dFdpZHRoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRleHQtd2lkdGgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjAzNSIsICJNNDAgMEMxNy45IDAgMCAxNy45IDAgNDBMMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgMTI4IDAgMCAxNjAtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTE2MCAxMjggMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC01NmMwLTIyLjEtMTcuOS00MC00MC00MEw0MCAwem03OC42IDQwNi42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOS40LTkuNCAyMjkuNSAwLTkuNCA5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5LjQgOS40LTIyOS41IDAgOS40LTkuNHoiXQogICAgfTsKICAgIGZhU2F0ZWxsaXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNhdGVsbGl0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODc1Ml0sICJmN2JmIiwgIk0xOTkgN2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw4OS40IDg5LjQgNTUtNTVjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsNDggNDhjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTU1IDU1IDg5LjQgODkuNGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtOTYgOTZjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwbC04OS40LTg5LjQtMTUuNSAxNS41YzExLjQgMjQuNiAxNy44IDUyIDE3LjggODAuOSAwIDMxLjctNy43IDYxLjUtMjEuMiA4Ny44LTQuNyA5LTE2LjcgMTAuMy0yMy44IDMuMWwtOTYuMy05Ni4zLTYwIDYwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w2MC02MC05Ni4zLTk2LjNjLTcuMi03LjItNS45LTE5LjIgMy4xLTIzLjggMjYuMy0xMy42IDU2LjItMjEuMiA4Ny44LTIxLjIgMjguOSAwIDU2LjMgNi40IDgwLjkgMTcuOEwxOTIuNCAyMjYuMyAxMDMgMTM3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOUwxOTkgN3ptMTcgNTAuOWwtNjIuMSA2Mi4xIDcyLjQgNzIuNCA2Mi4xLTYyLjEtNzIuNC03Mi40ek0zOTIgMzU4LjFsNjIuMS02Mi4xLTcyLjQtNzIuNC02Mi4xIDYyLjEgNzIuNCA3Mi40eiJdCiAgICB9OwogICAgZmFNYWduaWZ5aW5nR2xhc3NNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYWduaWZ5aW5nLWdsYXNzLW1pbnVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNlYXJjaC1taW51cyJdLCAiZjAxMCIsICJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NkMyOTYuMyA0MDEuMSAyNTMuOSA0MTYgMjA4IDQxNiA5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMCA0MTYgOTMuMSA0MTYgMjA4ek0xMzYgMTg0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXQogICAgfTsKICAgIGZhU2VhcmNoTWludXMgPSBmYU1hZ25pZnlpbmdHbGFzc01pbnVzOwogICAgZmFQZW9wbGVHcm91cCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW9wbGUtZ3JvdXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUzMyIsICJNMjU2IDBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6bTk2IDMxMmMwIDI1LTEyLjcgNDctMzIgNTkuOWwwIDkyLjFjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTIuMUMxNzIuNyAzNTkgMTYwIDMzNyAxNjAgMzEybDAtNDBjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDQwek05NiAzMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnptMTYgMjQwbDAgMzJjMCAzMi41IDEyLjEgNjIuMSAzMiA4NC43bDAgNzUuM2MwIDEuMiAwIDIuNSAuMSAzLjctOC41IDcuNi0xOS43IDEyLjMtMzIuMSAxMi4zbC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTU2LjZDMTIuOSAzNjQuNCAwIDM0My43IDAgMzIwbDAtMzJjMC01MyA0My05NiA5Ni05NiAxMi43IDAgMjQuOCAyLjUgMzUuOSA2LjktMTIuNiAyMS40LTE5LjkgNDYuNC0xOS45IDczLjF6TTM2OCA0NjRsMC03NS4zYzE5LjktMjIuNSAzMi01Mi4yIDMyLTg0LjdsMC0zMmMwLTI2LjctNy4zLTUxLjYtMTkuOS03My4xIDExLjEtNC41IDIzLjItNi45IDM1LjktNi45IDUzIDAgOTYgNDMgOTYgOTZsMCAzMmMwIDIzLjctMTIuOSA0NC40LTMyIDU1LjRsMCA1Ni42YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0xMi4zIDAtMjMuNi00LjYtMzIuMS0xMi4zIDAtMS4yIC4xLTIuNSAuMS0zLjd6TTQxNiAzMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnoiXQogICAgfTsKICAgIGZhU3F1YXJlQmluYXJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1iaW5hcnkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTY5YiIsICJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTE0NCA0Yy0yNC4zIDAtNDQgMTkuNy00NCA0NGwwIDQ4YzAgMjQuMyAxOS43IDQ0IDQ0IDQ0bDMyIDBjMjQuMyAwIDQ0LTE5LjcgNDQtNDRsMC00OGMwLTI0LjMtMTkuNy00NC00NC00NGwtMzIgMHptLTQgNDRjMC0yLjIgMS44LTQgNC00bDMyIDBjMi4yIDAgNCAxLjggNCA0bDAgNDhjMCAyLjItMS44IDQtNCA0bC0zMiAwYy0yLjIgMC00LTEuOC00LTRsMC00OHptMTQwLTQ0Yy0xMSAwLTIwIDktMjAgMjAgMCA5LjcgNi45IDE3LjcgMTYgMTkuNmwwIDc2LjRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC05NmMwLTExLTktMjAtMjAtMjBsLTE2IDB6TTEzMiAyOTZjMCA5LjcgNi45IDE3LjcgMTYgMTkuNmwwIDc2LjRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC05NmMwLTExLTktMjAtMjAtMjBsLTE2IDBjLTExIDAtMjAgOS0yMCAyMHptOTYgMjRsMCA0OGMwIDI0LjMgMTkuNyA0NCA0NCA0NGwzMiAwYzI0LjMgMCA0NC0xOS43IDQ0LTQ0bDAtNDhjMC0yNC4zLTE5LjctNDQtNDQtNDRsLTMyIDBjLTI0LjMgMC00NCAxOS43LTQ0IDQ0em00NC00bDMyIDBjMi4yIDAgNCAxLjggNCA0bDAgNDhjMCAyLjItMS44IDQtNCA0bC0zMiAwYy0yLjIgMC00LTEuOC00LTRsMC00OGMwLTIuMiAxLjgtNCA0LTR6Il0KICAgIH07CiAgICBmYU1hc2tzVGhlYXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXNrcy10aGVhdGVyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTE3LCAidGhlYXRlci1tYXNrcyJdLCAiZjYzMCIsICJNLTUgMTE4TDIzLjUgMjc5LjdjMTQgNzkuNSA3Ni4zIDE0MS44IDE1NS44IDE1NS44bDEyLjcgMi4yYy0xNi41LTI4LjYtMjcuMS02MC43LTMwLjYtOTQuNWwtMjQuMSA0LjNjLTkuNyAxLjctMTguOC01LjgtMTYuOS0xNS41IDQuOC0yNC43IDE5LjEtNDYuNiAzOS43LTYwLjlsMC03NC42Yy0xLjQgLjgtMyAxLjMtNC43IDEuNmwtNjMgMTEuMWMtOC43IDEuNS0xNy4zLTQuNC0xNS45LTEzLjEgMy4xLTE5LjYgMTguNC0zNiAzOS4xLTM5LjcgMTcuMi0zIDMzLjkgMy41IDQ0LjYgMTUuOGwwLTIyLjdjMC0yMi41IDYuOS01Mi40IDMyLjMtNzMuNCAyNi0yMS41IDY3LjctNDMuOSAxMjQuOS01NC4yLTMwLjUtMTYuMy04Ni4zLTMyLTE2My44LTE4LjQtODAuMyAxNC4yLTEyOCA1MC4xLTE1MC4xIDc2LjEtOSAxMC41LTEwLjggMjQuOS04LjQgMzguNXpNMjA4IDEzOC43bDAgMTc0LjhjMCA4MC43IDUwLjUgMTUyLjkgMTI2LjQgMTgwLjRMMzYyLjEgNTA0YzE0LjEgNS4xIDI5LjYgNS4xIDQzLjcgMEw0MzMuNiA0OTRDNTA5LjUgNDY2LjQgNTYwIDM5NC4zIDU2MCAzMTMuNWwwLTE3NC44YzAtNi45LTIuMS0xMy44LTctMTguNi0yMi42LTIyLjUtNzguMi01Ni0xNjktNTZzLTE0Ni40IDMzLjYtMTY5IDU2Yy00LjkgNC45LTcgMTEuNy03IDE4LjZ6bTY2LjEgMTg3LjFjLTEuNC03IDctMTEgMTIuNy02LjYgMjYuOSAyMC42IDYwLjYgMzIuOSA5Ny4yIDMyLjlzNzAuMi0xMi4zIDk3LjItMzIuOWM1LjctNC40IDE0LjEtLjQgMTIuNyA2LjYtMTAuMSA1MS40LTU1LjUgOTAuMy0xMDkuOSA5MC4zcy05OS44LTM4LjgtMTA5LjktOTAuM3ptLjUtMTAxLjVDMjgxLjIgMjA1LjUgMjk5IDE5MiAzMjAgMTkyczM4LjkgMTMuNSA0NS40IDMyLjNjMi45IDguNC00LjUgMTUuNy0xMy40IDE1LjdsLTY0IDBjLTguOCAwLTE2LjMtNy40LTEzLjQtMTUuN3pNNDgwIDI0MGwtNjQgMGMtOC44IDAtMTYuMy03LjQtMTMuNC0xNS43IDYuNS0xOC44IDI0LjQtMzIuMyA0NS40LTMyLjNzMzguOSAxMy41IDQ1LjQgMzIuM2MyLjkgOC40LTQuNSAxNS43LTEzLjQgMTUuN3oiXQogICAgfTsKICAgIGZhVGhlYXRlck1hc2tzID0gZmFNYXNrc1RoZWF0ZXI7CiAgICBmYUNhcnRQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcnQtcGx1cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjE3IiwgIk0wIDhDMC01LjMgMTAuNy0xNiAyNC0xNmw0NS4zIDBjMjcuMSAwIDUwLjMgMTkuNCA1NS4xIDQ2bC40IDIgNDEyLjcgMGMyMCAwIDM1LjEgMTguMiAzMS40IDM3LjlMNTM3LjggMjM1LjhjLTUuNyAzMC4zLTMyLjEgNTIuMi02Mi45IDUyLjJsLTMwMy42IDAgNS4xIDI4LjNjMi4xIDExLjQgMTIgMTkuNyAyMy42IDE5LjdMNDU2IDMzNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjU1LjkgMGMtMzQuOCAwLTY0LjYtMjQuOS03MC44LTU5LjFMNzcuMiAzOC42Yy0uNy0zLjgtNC02LjYtNy45LTYuNkwyNCAzMkMxMC43IDMyIDAgMjEuMyAwIDh6TTE2MCA0NjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMjI0IDBhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMzM2IDc4LjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMzMuNi0zMy42IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzMuNiAwIDAgMzMuNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzMuNiAzMy42IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMzLjYgMCAwLTMzLjZjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYUhhbmRzQXNsSW50ZXJwcmV0aW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLWFzbC1pbnRlcnByZXRpbmciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiYW1lcmljYW4tc2lnbi1sYW5ndWFnZS1pbnRlcnByZXRpbmciLCAiYXNsLWludGVycHJldGluZyIsICJoYW5kcy1hbWVyaWNhbi1zaWduLWxhbmd1YWdlLWludGVycHJldGluZyJdLCAiZjJhMyIsICJNMTU2LjYgNDYuM2M3LjktMTUuOCAxLjUtMzUtMTQuMy00Mi45cy0zNS0xLjUtNDIuOSAxNC4zTDEzLjUgMTg5LjRDNC42IDIwNy4yIDAgMjI2LjggMCAyNDYuN0wwIDI1NmMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOGw4MCAwIDAtLjNjMzUuMi0yLjcgNjUuNC0yMi44IDgyLjEtNTEuNyA4LjgtMTUuMyAzLjYtMzQuOS0xMS43LTQzLjdzLTM0LjktMy42LTQzLjcgMTEuN2MtNyAxMi0xOS45IDIwLTM0LjcgMjAtMjIuMSAwLTQwLTE3LjktNDAtNDBzMTcuOS00MCA0MC00MGMxNC44IDAgMjcuNyA4IDM0LjcgMjAgOC44IDE1LjMgMjguNCAyMC41IDQzLjcgMTEuN3MyMC41LTI4LjQgMTEuNy00My43Yy0xMi44LTIyLjEtMzMuNi0zOS4xLTU4LjQtNDcuMWw4MC44LTIyYzE3LTQuNiAyNy4xLTIyLjIgMjIuNS0zOS4zcy0yMi4yLTI3LjEtMzkuMy0yMi41bC0xMDAuNyAyNy41IDgxLjYtNjhjMTMuNi0xMS4zIDE1LjQtMzEuNSA0LjEtNDUuMVMyNDkuMS0zLjkgMjM1LjUgNy40bC0xMDEuOSA4NC45IDIzLTQ2ek00ODMuNCA0NjUuN2MtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDg1LjktMTcxLjdjOC45LTE3LjggMTMuNS0zNy40IDEzLjUtNTcuMmwwLTkuM2MwLTcwLjctNTcuMy0xMjgtMTI4LTEyOGwtODAgMCAwIC4zYy0zNS4yIDIuNy02NS40IDIyLjgtODIuMSA1MS43LTguOSAxNS4zLTMuNiAzNC45IDExLjcgNDMuN3MzNC45IDMuNiA0My43LTExLjdjNy0xMiAxOS45LTIwIDM0LjctMjAgMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDBjLTE0LjggMC0yNy43LTgtMzQuNy0yMC04LjktMTUuMy0yOC40LTIwLjUtNDMuNy0xMS43cy0yMC41IDI4LjQtMTEuNyA0My43YzEyLjggMjIuMSAzMy42IDM5LjEgNTguNCA0Ny4xbC04MC44IDIyYy0xNy4xIDQuNi0yNy4xIDIyLjItMjIuNSAzOS4zczIyLjIgMjcuMSAzOS4zIDIyLjVsMTAwLjctMjcuNS04MS42IDY4Yy0xMy42IDExLjMtMTUuNCAzMS41LTQuMSA0NS4xczMxLjUgMTUuNCA0NS4xIDQuMWwxMDEuOS04NC45LTIzIDQ2eiJdCiAgICB9OwogICAgZmFBbWVyaWNhblNpZ25MYW5ndWFnZUludGVycHJldGluZyA9IGZhSGFuZHNBc2xJbnRlcnByZXRpbmc7CiAgICBmYUFzbEludGVycHJldGluZyA9IGZhSGFuZHNBc2xJbnRlcnByZXRpbmc7CiAgICBmYUhhbmRzQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcgPSBmYUhhbmRzQXNsSW50ZXJwcmV0aW5nOwogICAgZmFUYWJsZUNlbGxzUm93VW5sb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlLWNlbGxzLXJvdy11bmxvY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTY5MSIsICJNMjU2IDIyNGwwIDE5MiA2NCAwIDAtMTkyLTY0IDB6bTI1Ni03OWMtNDYuNyA1LjgtODUuNiAzNi44LTEwMi43IDc5bC0yNS4zIDAgMCA5MC44Yy0xMC4xIDE1LjItMTYgMzMuNC0xNiA1My4xbDAgOTZjMCA1LjUgLjUgMTAuOSAxLjMgMTYuMUwxMjggNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEw2NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDQ5ek0xMjggMjI0bDAgMTkyIDY0IDAgMC0xOTItNjQgMHptNDMyIDQ4Yy0uMS0xNy42LTE0LjQtMzEuOS0zMi0zMS45LTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDcuOSA5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODAgNDQuMiAwIDc5LjkgMzUuOCA4MCA3OS45bC00OCAweiJdCiAgICB9OwogICAgZmFSb2NrZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9ja2V0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxMzUiLCAiTTEyOCAzMjBMMjQuNSAzMjBjLTI0LjkgMC00MC4yLTI3LjEtMjcuNC00OC41TDUwIDE4My4zQzU4LjcgMTY4LjggNzQuMyAxNjAgOTEuMiAxNjBsOTUgMGM3Ni4xLTEyOC45IDE4OS42LTEzNS40IDI2NS41LTEyNC4zIDEyLjggMS45IDIyLjggMTEuOSAyNC42IDI0LjYgMTEuMSA3NS45IDQuNiAxODkuNC0xMjQuMyAyNjUuNWwwIDk1YzAgMTYuOS04LjggMzIuNS0yMy4zIDQxLjJsLTg4LjIgNTIuOWMtMjEuMyAxMi44LTQ4LjUtMi42LTQ4LjUtMjcuNEwxOTIgMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0uMSAwek00MDAgMTYwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il0KICAgIH07CiAgICBmYVNocmltcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaHJpbXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk0MjRdLCAiZTQ0OCIsICJNNzIgMzJDMzIuMiAzMiAwIDY0LjIgMCAxMDQgMCAxNDEuOSAyOS4zIDE3Mi45IDY2LjQgMTc1LjggNzcuNiAyNTcuMiAxNDcuNCAzMjAgMjMyIDMyMGw1NiAwIDAtMTkyLTIxNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNFM1OC43IDgwIDcyIDgwbDM4NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDcyIDMyek0yMjQgNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDcyIDAgMC03Mi4yLTY0LjEtMjIuNGMtMTIuNS00LjQtMjYuMiAyLjItMzAuNiAxNC43czIuMiAyNi4yIDE0LjcgMzAuNmw0LjUgMS42QzIzMyA0MzMuOSAyMjQgNDQzLjkgMjI0IDQ1NnptMTI4IDIzLjNjMzYuNC0zLjMgNjkuNS0xNy42IDk2LjEtMzkuNmwtODYuNS0zNC42Yy0zIDEuOC02LjIgMy4yLTkuNiA0LjNsMCA2OS45ek00NzIuNiA0MTVjMjQuNi0zMC4zIDM5LjQtNjguOSAzOS40LTExMSAwLTEyLjMtMS4zLTI0LjMtMy43LTM1LjlMMzgyLjggMzU1LjFjLjggMy40IDEuMiA3IDEuMiAxMC42IDAgNC42LS43IDktMS45IDEzLjFMNDcyLjYgNDE1ek0zMzYgMTI4bC0xNiAwIDAgMTkyIDE4LjMgMGM5LjkgMCAxOS4xIDMuMiAyNi42IDguNWwxMzMuNS05Mi40QzQ3MS44IDE3Mi42IDQwOS4xIDEyOCAzMzYgMTI4ek0xNjggMTkyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il0KICAgIH07CiAgICBmYVRlbmdlU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW5nZS1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbODM3NiwgInRlbmdlIl0sICJmN2Q3IiwgIk0wIDU2QzAgNDIuNyAxMC43IDMyIDI0IDMybDMzNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDgwQzEwLjcgODAgMCA2OS4zIDAgNTZ6TTAgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMjggMCAwIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI1Ni0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYVRlbmdlID0gZmFUZW5nZVNpZ247CiAgICBmYUhvdXNlQ2hpbW5leU1lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtY2hpbW5leS1tZWRpY2FsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNsaW5pYy1tZWRpY2FsIl0sICJmN2YyIiwgIk0yMzQuMiA4LjZjMTIuMy0xMS40IDMxLjMtMTEuNCA0My41IDBMMzY4IDkyLjMgMzY4IDgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMDEuNSAzNy44IDM1LjFjOS42IDkgMTIuOCAyMi45IDggMzUuMVM0OTMuMiAyNzIgNDgwIDI3MmwtMTYgMCAwIDE3NmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMjg4IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOHpNMjI0IDI0OGwwIDQwLTQwIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0MCAwIDAgNDBjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNDAgNDAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTQwIDAgMC00MGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnoiXQogICAgfTsKICAgIGZhQ2xpbmljTWVkaWNhbCA9IGZhSG91c2VDaGltbmV5TWVkaWNhbDsKICAgIGZhVXNlcnNTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2Vycy1zbGFzaCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMDczIiwgIk03My0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMyOS43LS4zIDM5IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUwzMjEuOCAyMjRjNTYuNi0xIDEwMi4yLTQ3LjIgMTAyLjItMTA0IDAtNTcuNC00Ni42LTEwNC0xMDQtMTA0LTU2LjggMC0xMDMgNDUuNi0xMDQgMTAyLjJMNzMtMjQuOXpNNTEyIDI4OGMtMTcuMiAwLTMzLjcgMy40LTQ4LjcgOS42bDE3MCAxNzBjNC4yLTUuNCA2LjctMTIuMiA2LjctMTkuNmwwLTMyYzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4ek01OS45IDk3LjdjLTIxLjUgMTIuNS0zNS45IDM1LjctMzUuOSA2Mi4zIDAgMzkuOCAzMi4yIDcyIDcyIDcyIDI2LjYgMCA0OS44LTE0LjQgNjIuMy0zNS45TDU5LjkgOTcuN3pNMjUwLjIgMjg4QzE5Ni44IDMxMy45IDE2MCAzNjguNyAxNjAgNDMybDAgMTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjUwLjIgMC0xOTItMTkyek0xMjggMjg4QzU3LjMgMjg4IDAgMzQ1LjMgMCA0MTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw4Ni43IDBjLTQuMy05LjgtNi43LTIwLjYtNi43LTMybDAtMTZjMC01My4yIDIwLTEwMS44IDUyLjktMTM4LjYtMTEuNy0zLjUtMjQuMS01LjQtMzYuOS01LjR6TTYxNiAxNjBhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAweiJdCiAgICB9OwogICAgZmFQYXBlclBsYW5lMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYXBlci1wbGFuZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYxOTEzXSwgImYxZDgiLCAiTTUzNi40LTI2LjNjOS44LTMuNSAyMC42LTEgMjggNi4zczkuOCAxOC4yIDYuMyAyOGwtMTc4IDQ5Ni45Yy01IDEzLjktMTguMSAyMy4xLTMyLjggMjMuMS0xNC4yIDAtMjctOC42LTMyLjMtMjEuN2wtNjQuMi0xNThjLTQuNS0xMS0yLjUtMjMuNiA1LjItMzIuNmw5NC41LTExMi40YzUuMS02LjEgNC43LTE1LS45LTIwLjZzLTE0LjYtNi0yMC42LS45TDIyOS4yIDI3Ni4xYy05LjEgNy42LTIxLjYgOS42LTMyLjYgNS4yTDM4LjEgMjE2LjhjLTEzLjEtNS4zLTIxLjctMTguMS0yMS43LTMyLjMgMC0xNC43IDkuMi0yNy44IDIzLjEtMzIuOGw0OTYuOS0xNzh6Il0KICAgIH07CiAgICBmYUJvb2tBdGxhcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLWF0bGFzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImF0bGFzIl0sICJmNTU4IiwgIk05NiA1MTJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02Ni43YzE4LjYtNi42IDMyLTI0LjQgMzItNDUuM2wwLTI4OGMwLTI2LjUtMjEuNS00OC00OC00OEw5NiAwQzQzIDAgMCA0MyAwIDk2TDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZ6TTY0IDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNTYgMCAwIDY0LTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMzEwLjYgMjA4TDI3OSAyMDhjLTEuNCAyMy4xLTYgNDQuMi0xMi42IDYxLjIgMjIuNy0xMi41IDM5LjQtMzQuOCA0NC4yLTYxLjJ6bS0xNzMuMSAwYzQuOCAyNi40IDIxLjUgNDguNyA0NC4yIDYxLjItNi43LTE3LTExLjItMzgtMTIuNi02MS4ybC0zMS42IDB6bTc2LjQgNTVjNC41IDkuNiA4LjIgMTMuOCAxMC4yIDE1LjUgMi0xLjcgNS43LTUuOCAxMC4yLTE1LjUgNi4yLTEzLjQgMTEuMS0zMi41IDEyLjctNTVsLTQ1LjggMGMxLjYgMjIuNSA2LjUgNDEuNiAxMi43IDU1em0tMTIuNy04N2w0NS44IDBjLTEuNi0yMi41LTYuNS00MS42LTEyLjctNTUtNC41LTkuNi04LjItMTMuOC0xMC4yLTE1LjUtMiAxLjctNS43IDUuOC0xMC4yIDE1LjUtNi4yIDEzLjQtMTEuMSAzMi41LTEyLjcgNTV6bTEwOS41IDBjLTQuOC0yNi40LTIxLjUtNDguNy00NC4yLTYxLjIgNi43IDE3IDExLjIgMzggMTIuNiA2MS4ybDMxLjYgMHpNMTY5IDE3NmMxLjQtMjMuMSA2LTQ0LjIgMTIuNi02MS4yLTIyLjcgMTIuNS0zOS40IDM0LjgtNDQuMiA2MS4ybDMxLjYgMHpNOTYgMTkyYTEyOCAxMjggMCAxIDEgMjU2IDAgMTI4IDEyOCAwIDEgMSAtMjU2IDB6Il0KICAgIH07CiAgICBmYUF0bGFzID0gZmFCb29rQXRsYXM7CiAgICBmYVRhYmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwY2UiLCAiTTI1NiAxNjBsMCA5NiAxMjggMCAwLTk2LTEyOCAwem0tNjQgMGwtMTI4IDAgMCA5NiAxMjggMCAwLTk2ek0wIDMyMEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC05NnptMzg0IDBsLTEyOCAwIDAgOTYgMTI4IDAgMC05NnpNMTkyIDQxNmwwLTk2LTEyOCAwIDAgOTYgMTI4IDB6Il0KICAgIH07CiAgICBmYUhlYXJ0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE1MywgMTI4MTU0LCAxMjgxNTUsIDEyODE1NiwgMTI4NDIwLCAxMjkyOTMsIDEyOTI5NCwgMTI5NTA1LCA5ODI5LCAxMDA4NCwgNjE1NzhdLCAiZjAwNCIsICJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDExMi4yLTEzOS45IDI0Mi41LTIxMi45IDI5OC4yLTEyLjQgOS40LTI3LjYgMTQuMS00My4xIDE0LjFzLTMwLjgtNC42LTQzLjEtMTQuMUMxMzkuOSA0MTAuMiAwIDI3OS45IDAgMTY3LjdsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6Il0KICAgIH07CiAgICBmYUNpcmNsZUNoZXZyb25VcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtY2hldnJvbi11cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjaGV2cm9uLWNpcmNsZS11cCJdLCAiZjEzOSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM3NyAyNzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtODctODctODcgODdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMMjM5IDE2N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMEwzNzcgMjcxeiJdCiAgICB9OwogICAgZmFDaGV2cm9uQ2lyY2xlVXAgPSBmYUNpcmNsZUNoZXZyb25VcDsKICAgIGZhQmF0dGVyeUhhbGYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmF0dGVyeS1oYWxmIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImJhdHRlcnktMyJdLCAiZjI0MiIsICJNNTI4IDEyOGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyMjRjMCA4LjgtNy4yIDE2LTE2IDE2bC00MTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjI0YzAtOC44IDcuMi0xNiAxNi0xNmw0MTYgMHpNMTEyIDY0Yy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDIyNGMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0MTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsMC00OGMwLTQ0LjItMzUuOC04MC04MC04MEwxMTIgNjR6bTU2IDExMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFCYXR0ZXJ5MyA9IGZhQmF0dGVyeUhhbGY7CiAgICBmYUZvbnRBd2Vzb21lMyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb250LWF3ZXNvbWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjUwMSwgNjI2OTQsICJmb250LWF3ZXNvbWUtZmxhZyIsICJmb250LWF3ZXNvbWUtbG9nby1mdWxsIl0sICJmMmI0IiwgIk05MS43IDk2QzEwNi4zIDg2LjggMTE2IDcwLjUgMTE2IDUyIDExNiAyMy4zIDkyLjcgMCA2NCAwUzEyIDIzLjMgMTIgNTJjMCAxNi43IDcuOCAzMS41IDIwIDQxbDAgNDE5IDY0IDAgMC02NCAzNzMuNiAwYzE0LjYgMCAyNi40LTExLjggMjYuNC0yNi40IDAtMy43LS44LTcuMy0yLjMtMTAuN0w0MzIgMjcyIDQ5My43IDEzMy4xYzEuNS0zLjQgMi4zLTcgMi4zLTEwLjcgMC0xNC42LTExLjgtMjYuNC0yNi40LTI2LjRMOTEuNyA5NnoiXQogICAgfTsKICAgIGZhRm9udEF3ZXNvbWVGbGFnMyA9IGZhRm9udEF3ZXNvbWUzOwogICAgZmFGb250QXdlc29tZUxvZ29GdWxsMyA9IGZhRm9udEF3ZXNvbWUzOwogICAgZmFIYW5kY3VmZnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZGN1ZmZzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZjgiLCAiTTMyMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyIDMyLTE0LjMgMzItMzJ6TTE5MiA2NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTE1MiA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNmMwIDEgLjEgMS45IC4yIDIuOS03NC43IDI2LjMtMTI4LjIgOTcuNS0xMjguMiAxODEuMSAwIDEwNiA4NiAxOTIgMTkyIDE5MnMxOTItODYgMTkyLTE5MmMwLTgzLjctNTMuNS0xNTQuOC0xMjguMi0xODEuMSAuMS0uOSAuMi0xLjkgLjItMi45bDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTgwIDB6TTY0IDMyMGExMjggMTI4IDAgMSAxIDI1NiAwIDEyOCAxMjggMCAxIDEgLTI1NiAwem00NDggMGMwIDY2LjktNTEuMyAxMjEuOC0xMTYuNiAxMjcuNS0xNC4zIDIyLjgtMzIuNCA0My4xLTUzLjQgNTkuOSAxMy41IDMgMjcuNiA0LjYgNDIgNC42IDEwNiAwIDE5Mi04NiAxOTItMTkyIDAtODMuNy01My41LTE1NC44LTEyOC4yLTE4MS4xIC4xLS45IC4yLTEuOSAuMi0yLjlsMC0xNmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtODAgMGMtMTIuMyAwLTIyLjQgOS4yLTIzLjggMjEuMSAzMC4zIDE5LjIgNTYuMSA0NSA3NS4yIDc1LjQgNjUuNCA1LjggMTE2LjYgNjAuNiAxMTYuNiAxMjcuNXpNMzg0IDY0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhSGF0Q293Ym95U2lkZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYXQtY293Ym95LXNpZGUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjhjMSIsICJNNjQwIDM4OC4zYzAgMTYuOS03LjEgMzIuMi0xOC40IDQzLjFsLTM1LTIzLjMtMjkyLjctMTk1LjFjLTM2LjEtMjQuMS03OC42LTM2LjktMTIyLTM2LjlsLTMuOSAwYy0yLjcgMC01LjQgMC04IC4xbDIyLjItMTAwYzUuNy0yNS44IDI4LjYtNDQuMSA1NS00NC4xIDEyLjIgMCAyNC4xIDQgMzMuOCAxMS4zbDQuNyAzLjVjMjYuMyAxOS43IDYyLjQgMTkuNyA4OC42IDBsNC43LTMuNWM5LjgtNy4zIDIxLjYtMTEuMyAzMy44LTExLjMgMjYuNCAwIDQ5LjMgMTguMyA1NSA0NC4xbDMzIDE0OC41QzU3NC41IDIzMi4zIDY0MCAzMDIuNiA2NDAgMzg4LjN6TTE3MS45IDIyNGMzMy45IDAgNjcuMSAxMCA5NS40IDI4LjlMNTYwIDQ0OCA1NiA0NDhjLTMwLjkgMC01Ni0yNS4xLTU2LTU2IDAtOTIuOCA3NS4yLTE2OCAxNjgtMTY4bDMuOSAweiJdCiAgICB9OwogICAgZmFJbmR1c3RyeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbmR1c3RyeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjc1IiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQxNiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjc5LjhjMC0xOC4yLTE5LjQtMjkuNy0zNS40LTIxLjFsLTE1Ni42IDg0LjMgMC02My4yYzAtMTguMi0xOS40LTI5LjctMzUuNC0yMS4xTDEyOCAyMTUuNCAxMjggNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMzJ6Il0KICAgIH07CiAgICBmYUxpbmVzTGVhbmluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaW5lcy1sZWFuaW5nIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU1MWUiLCAiTTE5MC40IDc0LjFjNS42LTE2LjgtMy41LTM0LjktMjAuMi00MC41cy0zNC45IDMuNS00MC41IDIwLjJsLTEyOCAzODRjLTUuNiAxNi44IDMuNSAzNC45IDIwLjIgNDAuNXMzNC45LTMuNSA0MC41LTIwLjJsMTI4LTM4NHptNzAuOS00MS43Yy0xNy40LTIuOS0zMy45IDguOS0zNi44IDI2LjNsLTY0IDM4NGMtMi45IDE3LjQgOC45IDMzLjkgMjYuMyAzNi44czMzLjktOC45IDM2LjgtMjYuM2w2NC0zODRjMi45LTE3LjQtOC45LTMzLjktMjYuMy0zNi44ek0zNTIgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zODRjMC0xNy43LTE0LjMtMzItMzItMzJ6Il0KICAgIH07CiAgICBmYVBhc3Nwb3J0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhc3Nwb3J0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1YWIiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHpNOTYgNDA4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTI3OC42IDIwOGMtNC44IDI2LjQtMjEuNSA0OC43LTQ0LjIgNjEuMiA2LjctMTcgMTEuMi0zOCAxMi42LTYxLjJsMzEuNiAwem0tMTczLjEgMGwzMS42IDBjMS40IDIzLjEgNiA0NC4yIDEyLjYgNjEuMi0yMi43LTEyLjUtMzkuNC0zNC44LTQ0LjItNjEuMnptNzYuNCA1NWMtNi4yLTEzLjQtMTEuMS0zMi41LTEyLjctNTVsNDUuOCAwYy0xLjYgMjIuNS02LjUgNDEuNi0xMi43IDU1LTQuNSA5LjYtOC4yIDEzLjgtMTAuMiAxNS41LTItMS43LTUuNy01LjgtMTAuMi0xNS41em0wLTE0MmM0LjUtOS42IDguMi0xMy44IDEwLjItMTUuNSAyIDEuNyA1LjcgNS44IDEwLjIgMTUuNSA2LjIgMTMuNCAxMS4xIDMyLjUgMTIuNyA1NWwtNDUuOCAwYzEuNi0yMi41IDYuNS00MS42IDEyLjctNTV6bTk2LjcgNTVMMjQ3IDE3NmMtMS40LTIzLjEtNi00NC4yLTEyLjYtNjEuMiAyMi43IDEyLjUgMzkuNCAzNC44IDQ0LjIgNjEuMnpNMTM3IDE3NmwtMzEuNiAwYzQuOC0yNi40IDIxLjUtNDguNyA0NC4yLTYxLjItNi43IDE3LTExLjIgMzgtMTIuNiA2MS4yem0xODMgMTZhMTI4IDEyOCAwIDEgMCAtMjU2IDAgMTI4IDEyOCAwIDEgMCAyNTYgMHoiXQogICAgfTsKICAgIGZhSW5maW5pdHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaW5maW5pdHkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFs4NzM0LCA5ODU0XSwgImY1MzQiLCAiTTAgMjU2YzAtODguNCA3MS42LTE2MCAxNjAtMTYwIDUwLjQgMCA5Ny44IDIzLjcgMTI4IDY0bDMyIDQyLjcgMzItNDIuN2MzMC4yLTQwLjMgNzcuNi02NCAxMjgtNjQgODguNCAwIDE2MCA3MS42IDE2MCAxNjBTNTY4LjQgNDE2IDQ4MCA0MTZjLTUwLjQgMC05Ny44LTIzLjctMTI4LTY0bC0zMi00Mi43LTMyIDQyLjdjLTMwLjIgNDAuMy03Ny42IDY0LTEyOCA2NC04OC40IDAtMTYwLTcxLjYtMTYwLTE2MHptMjgwIDBsLTQzLjItNTcuNmMtMTguMS0yNC4yLTQ2LjYtMzguNC03Ni44LTM4LjQtNTMgMC05NiA0My05NiA5NnM0MyA5NiA5NiA5NmMzMC4yIDAgNTguNy0xNC4yIDc2LjgtMzguNEwyODAgMjU2em04MCAwbDQzLjIgNTcuNmMxOC4xIDI0LjIgNDYuNiAzOC40IDc2LjggMzguNCA1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NmMtMzAuMiAwLTU4LjcgMTQuMi03Ni44IDM4LjRMMzYwIDI1NnoiXQogICAgfTsKICAgIGZhQ2xvbmUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb25lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNGQiLCAiTTI4OCA0NDhsLTIyNCAwIDAtMjI0IDQ4IDAgMC02NC00OCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTQ4LTY0IDAgMCA0OHptLTY0LTk2bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDIyNCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDIyNGMwIDM1LjMgMjguNyA2NCA2NCA2NHoiXQogICAgfTsKICAgIGZhRm9yd2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb3J3YXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTE5M10sICJmMDRlIiwgIk0zNzEuNyA0My4xQzM2MC4xIDMyIDM0MyAyOC45IDMyOC4zIDM1LjJTMzA0IDU2IDMwNCA3MmwwIDEzNi4zLTE3Mi4zLTE2NS4xQzEyMC4xIDMyIDEwMyAyOC45IDg4LjMgMzUuMlM2NCA1NiA2NCA3MmwwIDM2OGMwIDE2IDkuNiAzMC41IDI0LjMgMzYuOHMzMS44IDMuMiA0My40LTcuOUwzMDQgMzAzLjcgMzA0IDQ0MGMwIDE2IDkuNiAzMC41IDI0LjMgMzYuOHMzMS44IDMuMiA0My40LTcuOWwxOTItMTg0YzcuOS03LjUgMTIuMy0xOCAxMi4zLTI4LjlzLTQuNS0yMS4zLTEyLjMtMjguOWwtMTkyLTE4NHoiXQogICAgfTsKICAgIGZhTSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTA5XSwgIjRkIiwgIk0yMi43IDMzLjRjMTMuNS00LjEgMjguMSAxLjEgMzUuOSAxMi45TDIyNCAyOTQuMyAzODkuNCA0Ni4zYzcuOC0xMS43IDIyLjQtMTcgMzUuOS0xMi45UzQ0OCA0OS45IDQ0OCA2NGwwIDM4NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI3OC4zLTEzMy40IDIwMC4xYy01LjkgOC45LTE1LjkgMTQuMi0yNi42IDE0LjJzLTIwLjctNS4zLTI2LjYtMTQuMkw2NCAxNjkuNyA2NCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OEwwIDY0QzAgNDkuOSA5LjIgMzcuNSAyMi43IDMzLjR6Il0KICAgIH07CiAgICBmYVJvYWRTcGlrZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9hZC1zcGlrZXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU2OCIsICJNNjQgMTE2LjhjMC0xNS44IDIwLjUtMjIgMjkuMy04LjlsOTguNyAxNDggMC0xMzkuMmMwLTE1LjggMjAuNS0yMiAyOS4zLTguOWw5OC43IDE0OCAwLTEzOS4yYzAtMTUuOCAyMC41LTIyIDI5LjMtOC45bDk4LjcgMTQ4IDAtMTM5LjJjMC0xNS44IDIwLjUtMjIgMjkuMy04LjlMNjA2LjggMzAyLjJjMTQuMiAyMS4zLTEuMSA0OS44LTI2LjYgNDkuOEw2NCAzNTIgNjQgMTE2Ljh6TTMyIDM4NGw1NzYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYU1vdW50YWluID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vdW50YWluIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTU2XSwgImY2ZmMiLCAiTTI1Ni41IDBjMTQuNyAwIDI4LjIgOC4xIDM1LjIgMjFsMjE2IDQwMGM2LjcgMTIuNCA2LjQgMjcuNC0uOCAzOS41LTcuMiAxMi4xLTIwLjMgMTkuNS0zNC4zIDE5LjVsLTQzMiAwYy0xNC4xIDAtMjcuMS03LjQtMzQuMy0xOS41cy03LjUtMjcuMS0uOC0zOS41bDIxNi00MDAgMi45LTQuNkMyMzEuNyA2LjIgMjQzLjYgMCAyNTYuNSAwek0xNzAuNCAyNDkuOWwyNi44IDI2LjhjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNDMuMy00My4zYzYtNiAxNC4xLTkuNCAyMi42LTkuNGw0Mi44IDAtNzIuMS0xMzMuNS04Ni4xIDE1OS40eiJdCiAgICB9OwogICAgZmFDaGVzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDM5IiwgIk0xNjggNTZsMCA0MC03OC4xIDBjLTE0LjMgMC0yNS45IDExLjYtMjUuOSAyNS45IDAgNCAuOSA4IDIuNyAxMS42bDMzLjQgNjYuOGMtMTEuNCAxLjgtMjAuMiAxMS43LTIwLjIgMjMuNyAwIDEzLjMgMTAuNyAyNCAyNCAyNGw1LjYgMC0xMy42IDEzNi01Ni4yIDcwLjNjLTUgNi4zLTcuOCAxNC4xLTcuOCAyMi4yIDAgMTkuNiAxNS45IDM1LjUgMzUuNSAzNS41bDI0OC45IDBjMTkuNiAwIDM1LjUtMTUuOSAzNS41LTM1LjUgMC04LjEtMi43LTE1LjktNy44LTIyLjJMMjg4IDM4NCAyNzQuNCAyNDggMjgwIDI0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNCAwLTExLjktOC43LTIxLjktMjAuMi0yMy43bDMzLjQtNjYuOGMxLjgtMy42IDIuNy03LjYgMi43LTExLjYgMC0xNC4zLTExLjYtMjUuOS0yNS45LTI1LjlsLTc4LjEgMCAwLTQwIDE2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMjQ1LjMgOCAyMzIgOGwtMTYgMCAwLTE2YzAtMTMuMy0xMC43LTI0LTI0LTI0UzE2OC0yMS4zIDE2OC04bDAgMTYtMTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNiAwek0zMjUuOCAyNzkuNmw4LjUgODUuNSA0Ny40IDU5LjIgNC4yIDUuN2M5LjIgMTMuNyAxNC4xIDI5LjkgMTQuMSA0Ni41IDAgMTIuNy0yLjggMjQuOC03LjkgMzUuNWw4My4xIDBjMjAuMyAwIDM2LjgtMTYuNSAzNi44LTM2LjggMC03LjMtMi4yLTE0LjQtNi4yLTIwLjRsLTI1LjgtMzguNyAwLTY0IDEzLjMtMTMuM2MxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDUxMiAxOTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxNi0zMiAwIDAtMTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDIyLjQtMTAuMiA0Mi40LTI2LjIgNTUuNnoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLXRocmVlLXF1YXJ0ZXJzIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbInRlbXBlcmF0dXJlLTMiLCAidGhlcm1vbWV0ZXItMyIsICJ0aGVybW9tZXRlci10aHJlZS1xdWFydGVycyJdLCAiZjJjOCIsICJNMTYwIDBDMTA3IDAgNjQgNDMgNjQgOTZsMCAxNjQuN0MzNC41IDI4NyAxNiAzMjUuNCAxNiAzNjggMTYgNDQ3LjUgODAuNSA1MTIgMTYwIDUxMnMxNDQtNjQuNSAxNDQtMTQ0YzAtNDIuNi0xOC41LTgxLTQ4LTEwNy4zTDI1NiA5NmMwLTUzLTQzLTk2LTk2LTk2em02NCAzNjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0yNi45IDE2LjUtNDkuOSA0MC01OS4zTDEzNiAxNTJjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDE1Ni43YzIzLjUgOS41IDQwIDMyLjUgNDAgNTkuM3oiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmUzID0gZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnM7CiAgICBmYVRoZXJtb21ldGVyMyA9IGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzOwogICAgZmFUaGVybW9tZXRlclRocmVlUXVhcnRlcnMgPSBmYVRlbXBlcmF0dXJlVGhyZWVRdWFydGVyczsKICAgIGZhQiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbOThdLCAiNDIiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjggMC00Ni41LTI0LjgtODcuMy02Mi0xMDkuNyAxOC43LTIyLjMgMzAtNTEgMzAtODIuMyAwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEwzMiAzMnpNMTYwIDIyNGwtOTYgMCAwLTEyOCA5NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0ek02NCAyODhsMTI4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRsLTEyOCAwIDAtMTI4eiJdCiAgICB9OwogICAgZmFTaGllbGRWaXJ1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGllbGQtdmlydXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA2YyIsICJNMjUzLjQgMi45QzI0OS4yIDEgMjQ0LjcgMCAyNDAgMHMtOS4yIDEtMTMuNCAyLjlMMzguMyA4Mi44Yy0yMiA5LjMtMzguNCAzMS0zOC4zIDU3LjIgLjUgOTkuMiA0MS4zIDI4MC43IDIxMy42IDM2My4yIDE2LjcgOCAzNi4xIDggNTIuOCAwIDE3Mi40LTgyLjUgMjEzLjItMjY0IDIxMy42LTM2My4yIC4xLTI2LjItMTYuMy00Ny45LTM4LjMtNTcuMkwyNTMuNCAyLjl6TTI0MCAxMjhjMTMuMyAwIDI0IDEwLjcgMjQgMjQgMCAyMi45IDI3LjcgMzQuNCA0My45IDE4LjIgOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy0xNi4yIDE2LjItNC43IDQzLjkgMTguMiA0My45IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yMi45IDAtMzQuNCAyNy43LTE4LjIgNDMuOSA5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwYy0xNi4yLTE2LjItNDMuOS00LjctNDMuOSAxOC4yIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMjIuOS0yNy43LTM0LjQtNDMuOS0xOC4yLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjljMTYuMi0xNi4yIDQuNy00My45LTE4LjItNDMuOS0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzIyLjkgMCAzNC40LTI3LjcgMTguMi00My45LTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGMxNi4yIDE2LjIgNDMuOSA0LjcgNDMuOS0xOC4yIDAtMTMuMyAxMC43LTI0IDI0LTI0ek0yMDggMjY0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODggNDBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhTGl0ZWNvaW5TaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpdGVjb2luLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTFkMyIsICJNMTI4IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzY0IDQ2LjMgNjQgNjRsMCAxNTcuOS0zOC42IDExYy0xMi43IDMuNi0yMC4xIDE2LjktMTYuNSAyOS43czE2LjkgMjAuMSAyOS43IDE2LjVMNjQgMjcxLjggNjQgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDI1NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yMjQgMCAwLTE2Mi41IDEzNC42LTM4LjVjMTIuNy0zLjYgMjAuMS0xNi45IDE2LjUtMjkuN3MtMTYuOS0yMC4xLTI5LjctMTYuNUwxMjggMjAzLjYgMTI4IDY0eiJdCiAgICB9OwogICAgZmFEaWNlRDYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGljZS1kNiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNmQxIiwgIk0yMjQuNCA4LjNDMjQ0LTIuOCAyNjgtMi44IDI4Ny42IDguM2wxNzYgOTkuN2MyMCAxMS40IDMyLjQgMzIuNiAzMi40IDU1LjdsMCAxOTcuNGMwIDIzLTEyLjQgNDQuMy0zMi40IDU1LjdsLTE3NiA5OS43Yy0xOS42IDExLjEtNDMuNiAxMS4xLTYzLjEgMGwtMTc2LTk5LjdDMjguNCA0MDUuNSAxNiAzODQuMiAxNiAzNjEuMmwwLTE5Ny40YzAtMjMgMTIuNC00NC4zIDMyLjQtNTUuN2wxNzYtOTkuN3pNMTAyLjYgMTU1LjZjLTguOC0zLjEtMTguOCAuMy0yMy44IDguNnMtMy4yIDE4LjcgMy42IDI1bDMuMiAyLjQgMTUwLjIgOTAuMiAwIDE0OC43YzAgMTEgOSAyMCAyMCAyMCAxMSAwIDIwLTkgMjAtMjBsMC0xNDguNyAxNTAuMy05MC4yYzkuNS01LjcgMTIuNi0xOCA2LjktMjcuNHMtMTgtMTIuNS0yNy40LTYuOWwtMTQ5LjcgODkuOC0xNDkuNy04OS44LTMuNy0xLjd6Il0KICAgIH07CiAgICBmYUdyaXBMaW5lc1ZlcnRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdyaXAtbGluZXMtdmVydGljYWwiLAogICAgICBpY29uOiBbMTkyLCA1MTIsIFtdLCAiZjdhNSIsICJNNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkw2NCA2NHptMTI4IDBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM4NHoiXQogICAgfTsKICAgIGZhR29sZkJhbGxUZWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ29sZi1iYWxsLXRlZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJnb2xmLWJhbGwiXSwgImY0NTAiLCAiTTI5OC41IDM4NC4xYzEyLjEgMS4yIDIxLjUgMTEuNSAyMS41IDIzLjlzLTkuNCAyMi42LTIxLjUgMjMuOWwtMi41IC4xLTgwIDAgMCA4OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTg4LTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0IDAtMTIuNCA5LjQtMjIuNiAyMS41LTIzLjlsMi41LS4xIDIwOCAwIDIuNSAuMXpNMTkyIDBjMTA2IDAgMTkyIDg2IDE5MiAxOTIgMCA1Ny40LTI1LjIgMTA4LjgtNjUuMSAxNDRMNjUuMSAzMzZDMjUuMiAzMDAuOCAwIDI0OS40IDAgMTkyIDAgODYgODYgMCAxOTIgMHptMzIgMjQwYy03LjcgMC0xNC4yIDUuNS0xNS43IDEyLjhsLS42IDYuNGMtMS4zIDYuMy02LjIgMTEuMi0xMi41IDEyLjVsLTYuNCAuNmMtNy4zIDEuNS0xMi44IDgtMTIuOCAxNS43IDAgOC44IDcuMiAxNiAxNiAxNiAyNi41IDAgNDgtMjEuNSA0OC00OCAwLTguOC03LjItMTYtMTYtMTZ6bTY0LTY0Yy03LjcgMC0xNC4yIDUuNS0xNS43IDEyLjhsLS42IDYuNGMtMS4zIDYuMy02LjIgMTEuMi0xMi41IDEyLjVsLTYuNCAuNmMtNy4zIDEuNS0xMi44IDgtMTIuOCAxNS43IDAgOC44IDcuMiAxNiAxNiAxNiAyNi41IDAgNDgtMjEuNSA0OC00OCAwLTguOC03LjItMTYtMTYtMTZ6bS04MC0xNmMtNy43IDAtMTQuMiA1LjUtMTUuNyAxMi44bC0uNiA2LjRjLTEuMyA2LjMtNi4yIDExLjItMTIuNSAxMi41bC02LjQgLjZjLTcuMyAxLjUtMTIuOCA4LTEyLjggMTUuNyAwIDguOCA3LjIgMTYgMTYgMTYgMjYuNSAwIDQ4LTIxLjUgNDgtNDggMC04LjgtNy4yLTE2LTE2LTE2eiJdCiAgICB9OwogICAgZmFHb2xmQmFsbCA9IGZhR29sZkJhbGxUZWU7CiAgICBmYUhleGFnb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGV4YWdvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzExMDQzXSwgImYzMTIiLCAiTTMzLjUgMjIwLjNjLTEyLjcgMjIuMi0xMi43IDQ5LjQgMCA3MS41bDk2LjIgMTY4LjFjMTIuOCAyMi40IDM2LjcgMzYuMiA2Mi41IDM2LjJsMTkxLjYgMGMyNS44IDAgNDkuNy0xMy44IDYyLjUtMzYuMmw5Ni4yLTE2OC4xYzEyLjctMjIuMiAxMi43LTQ5LjQgMC03MS41TDQ0Ni4zIDUyLjJDNDMzLjUgMjkuOCA0MDkuNiAxNiAzODMuOCAxNkwxOTIuMiAxNmMtMjUuOCAwLTQ5LjcgMTMuOC02Mi41IDM2LjJMMzMuNSAyMjAuM3oiXQogICAgfTsKICAgIGZhRm9sZGVyT3BlbjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9sZGVyLW9wZW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgxOTQsIDEyODQ0OSwgNjE3MTddLCAiZjA3YyIsICJNNTYgMjI1LjZMMzIuNCAyOTYuMiAzMi40IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDEzOC43IDBjMTMuOCAwIDI3LjMgNC41IDM4LjQgMTIuOGwzOC40IDI4LjhjNS41IDQuMiAxMi4zIDYuNCAxOS4yIDYuNGwxMTcuMyAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTYtMzY1LjQgMGMtNDEuMyAwLTc4IDI2LjQtOTEuMSA2NS42ek00NzcuOCA0NDhMOTkgNDQ4Yy0zMi44IDAtNTUuOS0zMi4xLTQ1LjUtNjMuMmw0OC0xNDRDMTA4IDIyMS4yIDEyNi40IDIwOCAxNDcgMjA4bDM3OC44IDBjMzIuOCAwIDU1LjkgMzIuMSA0NS41IDYzLjJsLTQ4IDE0NGMtNi41IDE5LjYtMjQuOSAzMi44LTQ1LjUgMzIuOHoiXQogICAgfTsKICAgIGZhS2FhYmEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAia2FhYmEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzMzFdLCAiZjY2YiIsICJNMjU2IDUxLjNMOTIuOCAxMTIuNCAyNDcuNSAxNzEuMWM1LjUgMi4xIDExLjUgMi4xIDE3IDBMNDE5LjIgMTEyLjQgMjU2IDUxLjN6TTAgMTI5LjNjMC0yMCAxMi40LTM3LjkgMzEuMS00NC45bDIwOC03OGMxMC45LTQuMSAyMi44LTQuMSAzMy43IDBsMjA4IDc4YzE4LjcgNyAzMS4xIDI0LjkgMzEuMSA0NC45bDAgMzYtMjUzLjIgOTZjLTEuOCAuNy0zLjggLjctNS43IDBsLTI1My4yLTk2IDAtMzZ6bTAgMTQwbDAtNTIuNyAyMzYuMSA4OS42YzEyLjggNC45IDI2LjkgNC45IDM5LjcgMGwyMzYuMS04OS42IDAgNTIuNy0xMjggNDguNiAwIDUxLjMgMTI4LTQ4LjYgMCA2Mi4yYzAgMjAtMTIuNCAzNy45LTMxLjEgNDQuOWwtMjA4IDc4Yy0xMC45IDQuMS0yMi44IDQuMS0zMy43IDBsLTIwOC03OEMxMi40IDQyMC43IDAgNDAyLjcgMCAzODIuN2wwLTYyLjIgMTI4IDQ4LjYgMC01MS4zLTEyOC00OC42ek0yMzYuMSA0MTAuMWMxMi44IDQuOSAyNi45IDQuOSAzOS43IDBsNjAuMS0yMi44IDAtNTEuMy03Ny4yIDI5LjNjLTEuOCAuNy0zLjggLjctNS43IDBsLTc3LjItMjkuMyAwIDUxLjMgNjAuMSAyMi44eiJdCiAgICB9OwogICAgZmFIYW5kSG9sZGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWhvbGRpbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRiZCIsICJNNjYuNyAzODRsNDIuNS00Mi41YzI0LTI0IDU2LjYtMzcuNSA5MC41LTM3LjVMMzUyIDMwNGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIuNiAwIDExOS43LTg4LjJjMTcuOC0xMy4xIDQyLjgtOS4zIDU1LjkgOC41czkuMyA0Mi44LTguNSA1NS45TDQzMy4xIDQ4NS41Yy0yMy40IDE3LjItNTEuNiAyNi41LTgwLjcgMjYuNUwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMzQuNyAweiJdCiAgICB9OwogICAgZmFTaW5nbGVRdW90ZVJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNpbmdsZS1xdW90ZS1yaWdodCIsCiAgICAgIGljb246IFsxOTIsIDUxMiwgW10sICJlODFjIiwgIk02NCA0MTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOCAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2bDAtOC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMzZjMCA2Ni4zLTUzLjcgMTIwLTEyMCAxMjBsLTggMHoiXQogICAgfTsKICAgIGZhQm90dGxlRHJvcGxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3R0bGUtZHJvcGxldCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlNGM0IiwgIk04MCAwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxMDMuM2M2NC45IDIwLjQgMTEyIDgxIDExMiAxNTIuN2wwIDE5MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1NDRjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjg4YzAtNzEuNiA0Ny4xLTEzMi4zIDExMi0xNTIuN0wxMTIgMzJDOTQuMyAzMiA4MCAxNy43IDgwIDB6bTgwIDQxNmMzNS4zIDAgNjQtMzIuNCA2NC02NCAwLTIxLjItMjguOS02NC41LTQ3LjktOTAuNi04LjEtMTEuMS0yNC4yLTExLjEtMzIuMyAwLTE5IDI2LjEtNDcuOSA2OS40LTQ3LjkgOTAuNiAwIDMxLjYgMjguNyA2NCA2NCA2NHoiXQogICAgfTsKICAgIGZhV2luZG93TWluaW1pemUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndpbmRvdy1taW5pbWl6ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQ2OV0sICJmMmQxIiwgIk0wIDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFDaGV2cm9uUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hldnJvbi1yaWdodCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzkwMDJdLCAiZjA1NCIsICJNMzExLjEgMjMzLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTE5MiAxOTJjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDI0My4yIDI1NiA3My45IDg2LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTkyIDE5MnoiXQogICAgfTsKICAgIGZhRWdnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVnZyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyOTM3MF0sICJmN2ZiIiwgIk0xOTIgNDk2Qzg2IDQ5NiAwIDM5NCAwIDI4OCAwIDE3NiA2NCAxNiAxOTIgMTZTMzg0IDE3NiAzODQgMjg4YzAgMTA2LTg2IDIwOC0xOTIgMjA4ek0xNTQuOCAxMzRjNi41LTYgNy0xNi4xIDEtMjIuNnMtMTYuMS03LTIyLjYtMWMtMjMuOSAyMS44LTQxLjEgNTIuNy01Mi4zIDg0LjItMTEuMiAzMS42LTE2LjkgNjUuMS0xNi45IDkzLjUgMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmMwLTI0LjUgNS01NC40IDE1LjEtODIuOCAxMC4xLTI4LjUgMjUtNTQuMSA0My43LTcxLjJ6Il0KICAgIH07CiAgICBmYUxhbmRtYXJrRG9tZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYW5kbWFyay1kb21lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxhbmRtYXJrLWFsdCJdLCAiZjc1MiIsICJNMjU2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyIDAgLjkgMCAxLjggLjEgMi42LTgwLjUgMTMuNC0xNDQgNzYuOS0xNTcuNSAxNTcuNEw2NCAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMCAxNjAtNTEuMiAzOC40QzQuNyA0NjAuNCAwIDQ2OS45IDAgNDgwIDAgNDk3LjcgMTQuMyA1MTIgMzIgNTEybDQ0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyIDAtMTAuMS00LjctMTkuNi0xMi44LTI1LjZMNDQ4IDQxNiA0NDggMjU2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yLjcgMGMtMTMuNS04MC40LTc3LTE0My45LTE1Ny41LTE1Ny40IC4xLS45IC4xLTEuNyAuMS0yLjYgMC0xNy43LTE0LjMtMzItMzItMzJ6bTgwIDI1Nmw2NCAwIDAgMTYwLTY0IDAgMC0xNjB6TTIyNCA0MTZsMC0xNjAgNjQgMCAwIDE2MC02NCAwek0xMTIgMjU2bDY0IDAgMCAxNjAtNjQgMCAwLTE2MHoiXQogICAgfTsKICAgIGZhTGFuZG1hcmtBbHQgPSBmYUxhbmRtYXJrRG9tZTsKICAgIGZhV29ybSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3b3JtIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU1OTkiLCAiTTIyNCA5NmMwLTUzIDQzLTk2IDk2LTk2bDM4LjQgMEM0MDcuOSAwIDQ0OCA0MC4xIDQ0OCA4OS42TDQ0OCAzNzZjMCA3NS4xLTYwLjkgMTM2LTEzNiAxMzZTMTc2IDQ1MS4xIDE3NiAzNzZsMC04MGMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGwwIDE2OGMwIDI2LjUtMjEuNSA0OC00OCA0OFMwIDQ5MC41IDAgNDY0TDAgMjk2YzAtNzUuMSA2MC45LTEzNiAxMzYtMTM2czEzNiA2MC45IDEzNiAxMzZsMCA4MGMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwbDAtMTg0LTMyIDBjLTUzIDAtOTYtNDMtOTYtOTZ6bTE0NC04YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYVVzZXJJbmp1cmVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItaW5qdXJlZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNzI4IiwgIk0yNDIuNyA4MEwzMzQgODBjLTEwLjctMjQuNi0yOS41LTQ0LjktNTIuOS01Ny42TDI0Mi43IDgwem0tLjktNzAuN0MyMzYgOC40IDIzMCA4IDIyNCA4IDE3NC44IDggMTMyLjUgMzcuNiAxMTQgODBsODAuNiAwIDQ3LjEtNzAuN3pNMjI0IDI0OGM2Ni4zIDAgMTIwLTUzLjcgMTIwLTEyMGwtMjQwIDBjMCA2Ni4zIDUzLjcgMTIwIDEyMCAxMjB6TTk4LjcgMzQxLjhDNDkuMyAzNzAuMiAxNiA0MjMuNSAxNiA0ODQuNiAxNiA0OTkuNyAyOC4zIDUxMiA0My40IDUxMmwxNTEgMC05NS44LTE3MC4yem00NS4xLTE3LjdsNDIuNyA3NS45IDg1LjUgMGM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDExLjQtMi40IDIyLjItNi43IDMybDU5LjIgMGMxNS4xIDAgMjcuNC0xMi4zIDI3LjQtMjcuNCAwLTkwLjktNzMuNy0xNjQuNi0xNjQuNi0xNjQuNmwtODYuOSAwYy0xMi42IDAtMjQuOSAxLjQtMzYuNyA0LjF6TTIxMy41IDQ0OGwzNiA2NCAyMi41IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTU4LjUgMHoiXQogICAgfTsKICAgIGZhU3RyaWtldGhyb3VnaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdHJpa2V0aHJvdWdoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwY2MiLCAiTTk2IDE1Ny41Qzk2IDg4LjIgMTUyLjIgMzIgMjIxLjUgMzJMMzY4IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDIyMS41IDk2Yy0zNCAwLTYxLjUgMjcuNS02MS41IDYxLjUgMCAzMSAyMy4xIDU3LjIgNTMuOSA2MWw0NC4xIDUuNSAyMjIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsODMuMSAwQzEwMyAyMDQuNiA5NiAxODEuOCA5NiAxNTcuNXpNMzQ5LjIgMzM2bDY1LjUgMGMuOSA2LjEgMS40IDEyLjIgMS40IDE4LjUgMCA2OS4zLTU2LjIgMTI1LjUtMTI1LjUgMTI1LjVMMTQ0IDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNDYuNSAwYzM0IDAgNjEuNS0yNy41IDYxLjUtNjEuNSAwLTYuNC0xLTEyLjctMi44LTE4LjV6Il0KICAgIH07CiAgICBmYUJsb2cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmxvZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzgxIiwgIk0yMjQgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjQgMTQ1LjggMCAyNjQgMTE4LjIgMjY0IDI2NCAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTExOS4zLTk2LjctMjE2LTIxNi0yMTYtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTgwIDk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjI0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDgtMjEuNS00OC00OC00OGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNjRjMC04LjggNy4yLTE2IDE2LTE2IDc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0UzI1NS41IDUxMiAxNzYgNTEyIDMyIDQ0Ny41IDMyIDM2OGwwLTIyNGMwLTI2LjUgMjEuNS00OCA0OC00OHptMTY4IDBjOTIuOCAwIDE2OCA3NS4yIDE2OCAxNjggMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC02Ni4zLTUzLjctMTIwLTEyMC0xMjAtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhU3RvcHdhdGNoMjAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3RvcHdhdGNoLTIwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwNmYiLCAiTTE2OC41IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDI1LjNjLTEwOCAxMS45LTE5MiAxMDMuNS0xOTIgMjE0LjcgMCAxMTkuMyA5Ni43IDIxNiAyMTYgMjE2czIxNi05Ni43IDIxNi0yMTZjMC0zOS44LTEwLjgtNzcuMS0yOS42LTEwOS4ybDI4LjItMjguMmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMjMuNCAyMy40Yy0zMi45LTMwLjItNzUuMi01MC4zLTEyMi01NS41bDAtMjUuMyAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMTIgMHptLTYwIDI0MGMwLTI4LjcgMjMuMy01MiA1Mi01MnM1MiAyMy4zIDUyIDUybDAgMy44YzAgMTEuNy0zLjIgMjMuMS05LjMgMzNsLTQzLjggNzEuMiAzMy4xIDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC01Ny44IDBjLTE0LjUgMC0yNi4yLTExLjctMjYuMi0yNi4yIDAtNC45IDEuMy05LjYgMy45LTEzLjhsNTYuNy05Mi4xYzIuMi0zLjYgMy40LTcuOCAzLjQtMTIuMWwwLTMuOGMwLTYuNi01LjQtMTItMTItMTJzLTEyIDUuNC0xMiAxMmMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjB6bTE4MC01MmMyOC43IDAgNTIgMjMuMyA1MiA1MmwwIDk2YzAgMjguNy0yMy4zIDUyLTUyIDUycy01Mi0yMy4zLTUyLTUybDAtOTZjMC0yOC43IDIzLjMtNTIgNTItNTJ6bS0xMiA1MmwwIDk2YzAgNi42IDUuNCAxMiAxMiAxMnMxMi01LjQgMTItMTJsMC05NmMwLTYuNi01LjQtMTItMTItMTJzLTEyIDUuNC0xMiAxMnoiXQogICAgfTsKICAgIGZhVHJ1Y2tQaWNrdXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stcGlja3VwIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NzYzXSwgImY2M2MiLCAiTTM2My44IDk2bDU3LjYgOTYtMTMzLjQgMCAwLTk2IDc1LjggMHpNNDk2IDE5Mkw0MTguNiA2My4xQzQwNy4xIDQzLjggMzg2LjIgMzIgMzYzLjggMzJMMjU2IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDEyOC0xNDQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMi40IDBjLS4yIDIuNi0uNCA1LjMtLjQgOCAwIDQ4LjYgMzkuNCA4OCA4OCA4OHM4OC0zOS40IDg4LTg4YzAtMi43LS4xLTUuNC0uNC04bDE2MC43IDBjLS4yIDIuNi0uNCA1LjMtLjQgOCAwIDQ4LjYgMzkuNCA4OCA4OCA4OHM4OC0zOS40IDg4LTg4YzAtMi43LS4xLTUuNC0uNC04bDMyLjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwek0xMTIgMzkyYTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6bTM3Ni00MGE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6Il0KICAgIH07CiAgICBmYVNlZWRsaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNlZWRsaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzkzLCAic3Byb3V0Il0sICJmNGQ4IiwgIk01MTIgMzJDNTEyIDE0MC4xIDQzNS40IDIzMC4zIDMzMy42IDI1MS40IDMyNS43IDE5My4zIDI5OS42IDE0MSAyNjEuMSAxMDAuNSAzMDEuMiA0MCAzNjkuOSAwIDQ0OCAwbDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTAgOTZDMCA3OC4zIDE0LjMgNjQgMzIgNjRsMzIgMGMxMjMuNyAwIDIyNCAxMDAuMyAyMjQgMjI0bDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwQzEwMC4zIDMyMCAwIDIxOS43IDAgOTZ6Il0KICAgIH07CiAgICBmYVNwcm91dCA9IGZhU2VlZGxpbmc7CiAgICBmYVRyYW5zZ2VuZGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyYW5zZ2VuZGVyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTg5NSwgInRyYW5zZ2VuZGVyLWFsdCJdLCAiZjIyNSIsICJNMTI4LTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDk3LjkgMzIgMTM2IDcwLjEgMTUxIDU1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtMTUgMTUgMTQuMiAxNC4yYzI3LjktMjMuOCA2NC4yLTM4LjIgMTAzLjgtMzguMiAzNi43IDAgNzAuNiAxMi40IDk3LjYgMzMuMkw0NjYuNyAzMiA0NDggMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTguNy04NC40IDg0LjRjMTMgMjMuMSAyMC40IDQ5LjkgMjAuNCA3OC4zIDAgNzcuNC01NSAxNDItMTI4IDE1Ni44bDAgMzUuMiAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC0zNS4yYy03My0xNC44LTEyOC03OS40LTEyOC0xNTYuOCAwLTMxLjQgOS02MC43IDI0LjctODUuNGwtMTYuNy0xNi43LTE1IDE1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDE1LTE1LTM4LjEtMzguMSAwIDMwLjFjMCAxNy43LTE0LjMgMzItMzIgMzJTMCAxMTMuNyAwIDk2TDAgMEMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwek0yODggMzM2YTk2IDk2IDAgMSAwIDAtMTkyIDk2IDk2IDAgMSAwIDAgMTkyeiJdCiAgICB9OwogICAgZmFUcmFuc2dlbmRlckFsdCA9IGZhVHJhbnNnZW5kZXI7CiAgICBmYVN0YXJIYWxmMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFyLWhhbGYiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MTczMV0sICJmMDg5IiwgIk0zMDQuMSA3LjZjMC0xMS4xLTcuNi0yMC43LTE4LjQtMjMuM3MtMjEuOSAyLjUtMjcgMTIuNEwxOTMuMSAxMjUuMyAzMy4yIDE1MC43Yy04LjkgMS40LTE2LjMgNy43LTE5LjEgMTYuM3MtLjUgMTggNS44IDI0LjRsMTE0LjQgMTE0LjUtMjUuMiAxNTkuOWMtMS40IDguOSAyLjMgMTcuOSA5LjYgMjMuMnMxNi45IDYuMSAyNSAyTDI5MSA0MTYuMWM4LTQuMSAxMy4xLTEyLjQgMTMuMS0yMS40bDAtMzg3LjF6Il0KICAgIH07CiAgICBmYVBob3RvRmlsbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwaG90by1maWxtIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbInBob3RvLXZpZGVvIl0sICJmODdjIiwgIk0xOTIgNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRMNTc2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTMyMCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTIyNHpNMzIwIDk2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTE1Ni41IDExLjVDNDcyLjEgMTAwLjQgNDY0LjQgOTYgNDU2IDk2cy0xNi4xIDQuNC0yMC41IDExLjVsLTU0IDg4LjMtMTcuOS0yNS42Yy00LjUtNi40LTExLjgtMTAuMi0xOS43LTEwLjJzLTE1LjIgMy44LTE5LjcgMTAuMmwtNTYgODBjLTUuMSA3LjMtNS44IDE2LjktMS42IDI0LjhTMjc5LjEgMjg4IDI4OCAyODhsMjU2IDBjOC43IDAgMTYuNy00LjcgMjAuOS0xMi4zczQuMS0xNi44LS41LTI0LjNsLTg4LTE0NHpNMTQ0IDEyOGwwIDE2MGMwIDYxLjkgNTAuMSAxMTIgMTEyIDExMmwxOTIgMCAwIDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxOTJjMC0zNS4zIDI4LjctNjQgNjQtNjRsODAgMHpNNTIgMTk2bDAgMjRjMCA4LjggNy4yIDE2IDE2IDE2bDI0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjRjMC04LjgtNy4yLTE2LTE2LTE2bC0yNCAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyNGMwIDguOCA3LjIgMTYgMTYgMTZsMjQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNGMwLTguOC03LjItMTYtMTYtMTZsLTI0IDB6bTAgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI0YzAgOC44IDcuMiAxNiAxNiAxNmwyNCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0YzAtOC44LTcuMi0xNi0xNi0xNmwtMjQgMHoiXQogICAgfTsKICAgIGZhUGhvdG9WaWRlbyA9IGZhUGhvdG9GaWxtOwogICAgZmFQdW1wTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwdW1wLW1lZGljYWwiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZTA2YSIsICJNOTYgMGwwIDgwIDEyOCAwIDAtMjQgNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNFMzMDkuMyA4IDI5NiA4bC03MiAwIDAtOGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMEMxMTAuMy0zMiA5Ni0xNy43IDk2IDB6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMTI4em02NCAxMjBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQwIDAgMCA0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDB6Il0KICAgIH07CiAgICBmYUZpcmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlyZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODI5M10sICJmMDZkIiwgIk0xNjAuNS0yNi40YzkuMy03LjggMjMtNy41IDMxLjkgLjkgMTIuMyAxMS42IDIzLjMgMjQuNCAzMy45IDM3LjQgMTMuNSAxNi41IDI5LjcgMzguMyA0NS4zIDY0LjIgNS4yLTYuOCAxMC0xMi44IDE0LjItMTcuOSAxLjEtMS4zIDIuMi0yLjcgMy4zLTQuMSA3LjktOS44IDE3LjctMjIuMSAzMC44LTIyLjEgMTMuNCAwIDIyLjggMTEuOSAzMC44IDIyLjEgMS4zIDEuNyAyLjYgMy4zIDMuOSA0LjggMTAuMyAxMi40IDI0IDMwLjMgMzcuNyA1Mi40IDI3LjIgNDMuOSA1NS42IDEwNi40IDU1LjYgMTc2LjYgMCAxMjMuNy0xMDAuMyAyMjQtMjI0IDIyNFMwIDQxMS43IDAgMjg4YzAtOTEuMSA0MS4xLTE3MCA4MC41LTIyNSAxOS45LTI3LjcgMzkuNy00OS45IDU0LjYtNjUuMSA4LjItOC40IDE2LjUtMTYuNyAyNS41LTI0LjJ6TTIyNS43IDQxNmMyNS4zIDAgNDcuNy03IDY4LjgtMjEgNDIuMS0yOS40IDUzLjQtODguMiAyOC4xLTEzNC40LTQuNS05LTE2LTkuNi0yMi41LTJsLTI1LjIgMjkuM2MtNi42IDcuNi0xOC41IDcuNC0yNC43LS41LTE3LjMtMjIuMS00OS4xLTYyLjQtNjUuMy04My01LjQtNi45LTE1LjItOC0yMS41LTEuOS0xOC4zIDE3LjgtNTEuNSA1Ni44LTUxLjUgMTA0LjMgMCA2OC42IDUwLjYgMTA5LjIgMTEzLjcgMTA5LjJ6Il0KICAgIH07CiAgICBmYU1hZ25pZnlpbmdHbGFzc1BsdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFnbmlmeWluZy1nbGFzcy1wbHVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNlYXJjaC1wbHVzIl0sICJmMDBlIiwgIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTIwOCAxMTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDgtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwIDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQ4IDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhU2VhcmNoUGx1cyA9IGZhTWFnbmlmeWluZ0dsYXNzUGx1czsKICAgIGZhRmxhc2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmxhc2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjBjMyIsICJNMjg4IDBMMTI4IDBDMTEwLjMgMCA5NiAxNC4zIDk2IDMyczE0LjMgMzIgMzIgMzJMMTI4IDIxNS41IDcuNSA0MjYuM0MyLjYgNDM1IDAgNDQ0LjcgMCA0NTQuNyAwIDQ4Ni40IDI1LjYgNTEyIDU3LjMgNTEybDMzMy40IDBjMzEuNiAwIDU3LjMtMjUuNiA1Ny4zLTU3LjMgMC0xMC0yLjYtMTkuOC03LjUtMjguNEwzMjAgMjE1LjUgMzIwIDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyUzMzNy43IDAgMzIwIDBMMjg4IDB6TTE5MiAyMTUuNWwwLTE1MS41IDY0IDAgMCAxNTEuNWMwIDExLjEgMi45IDIyLjEgOC40IDMxLjhsNDEuNiA3Mi43LTE2NCAwIDQxLjYtNzIuN2M1LjUtOS43IDguNC0yMC42IDguNC0zMS44eiJdCiAgICB9OwogICAgZmFBbGlnblJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFsaWduLXJpZ2h0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwMzgiLCAiTTQ0OCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkwxOTIgOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6bTAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnpNMCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDQ4IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6Il0KICAgIH07CiAgICBmYUNhYmxlQ2FyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhYmxlLWNhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODY3MywgNTc1NTEsICJ0cmFtIl0sICJmN2RhIiwgIk0yODgtMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0xNjAgMjRhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMzIgMjg4YzAtMzUuMyAyOC43LTY0IDY0LTY0bDEzNiAwIDAtOTYuMi0xOTMuNCA1NS4zYy0xMi43IDMuNi0yNi0zLjctMjkuNy0xNi41czMuNy0yNiAxNi41LTI5LjdsMjI0LTY0IDAgMCAyMjQtNjRjMTIuNy0zLjYgMjYgMy43IDI5LjcgMTYuNXMtMy43IDI2LTE2LjUgMjkuN2wtMjA2LjYgNTkgMCAxMDkuOSAxMzYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE2MGMwIDM1LjMtMjguNyA2NC02NCA2NEw5NiA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTYwem04MCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsNTYgMCAwLTk2LTU2IDB6bTE4NCA5NmwwLTk2LTgwIDAgMCA5NiA4MCAwem00OCAwbDU2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2bC01NiAwIDAgOTZ6Il0KICAgIH07CiAgICBmYVRyYW0gPSBmYUNhYmxlQ2FyOwogICAgZmFLaXRNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImtpdC1tZWRpY2FsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImZpcnN0LWFpZCJdLCAiZjQ3OSIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTYgMCAwLTM4NC0xNiAwem02NCAwbDAgMzg0IDI1NiAwIDAtMzg0LTI1NiAwek00NDggNDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0xNiAwIDAgMzg0IDE2IDB6TTIyNCAxODRjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQwIDAgMCA0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDB6Il0KICAgIH07CiAgICBmYUZpcnN0QWlkID0gZmFLaXRNZWRpY2FsOwogICAgZmFHcmlwTGluZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3JpcC1saW5lcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmN2E0IiwgIk0zMiAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMjg4em0wLTEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAxNjB6Il0KICAgIH07CiAgICBmYUJ1cmdlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidXJnZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiaGFtYnVyZ2VyIl0sICJmODA1IiwgIk00OCAzODRjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDQ0LjIgMzUuOCA4MCA4MCA4MGwyODggMGM0NC4yIDAgODAtMzUuOCA4MC04MCAwLTguOC03LjItMTYtMTYtMTZMNDggMzg0ek0zMiAyMDJjMCAxMi4yIDkuOSAyMiAyMiAyMkw0NTggMjI0YzEyLjIgMCAyMi05LjkgMjItMjIgMC0xNy4yLTIuNi0zNC40LTEwLjgtNDkuNS0yMi4yLTQwLjgtODIuMy0xMjAuNS0yMTMuMi0xMjAuNVM2NSAxMTEuNiA0Mi44IDE1Mi41QzM0LjYgMTY3LjYgMzIgMTg0LjggMzIgMjAyek0wIDMwNGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAyNzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0yNTYgNzJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0xMjAgMTI4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTI0OC0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYUhhbWJ1cmdlciA9IGZhQnVyZ2VyOwogICAgZmFTbm93bWFuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNub3dtYW4iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFs5NzMxLCA5OTI0XSwgImY3ZDAiLCAiTTQwMyAyMTEuN2MzMi4yLTI0LjkgNTMtNjMuOSA1My0xMDcuNyAwLTc1LjEtNjAuOS0xMzYtMTM2LTEzNlMxODQgMjguOSAxODQgMTA0YzAgNDMuOSAyMC44IDgyLjkgNTMgMTA3LjctMzIuMiAxNi4zLTU5IDQxLjgtNzYuOCA3My4xTDExMiAyNjQuMiAxMTIgMjI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTkuNi0yMi41LTkuN2MtMTIuMi01LjItMjYuMyAuNC0zMS41IDEyLjZzLjQgMjYuMyAxMi42IDMxLjVjMzYuMSAxNS41IDc1LjkgMzIuNSAxMTkuNCA1MS4yLTMuOSAxNC45LTYgMzAuNi02IDQ2LjcgMCA3MCAzOS4xIDEzMC44IDk2LjYgMTYxLjkgNy45IDQuMyAxNi45IDYuMSAyNS45IDYuMWwxMjMgMGM5IDAgMTgtMS44IDI1LjktNi4xIDU3LjUtMzEuMSA5Ni42LTkyIDk2LjYtMTYxLjkgMC0xNi4yLTIuMS0zMS44LTYtNDYuNyA0My41LTE4LjcgODMuNC0zNS43IDExOS40LTUxLjIgMTIuMi01LjIgMTcuOC0xOS4zIDEyLjYtMzEuNXMtMTkuMy0xNy44LTMxLjUtMTIuNmwtMjIuNSA5LjcgMC0xOS42YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDAuMi00OC4yIDIwLjZjLTE3LjktMzEuMy00NC42LTU2LjgtNzYuOC03My4xek0yOTYgNDE2YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTI0LTEyMGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTI0OCA4MGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek0zNjggNTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0yOTIuMiAxNTkuM2MtMi43LTQuOC00LjItMTAuMi00LjItMTUuNyAwLTE3LjUgMTQuMi0zMS42IDMxLjYtMzEuNmwuOCAwYzE3LjUgMCAzMS42IDE0LjIgMzEuNiAzMS42IDAgNS41LTEuNCAxMC45LTQuMiAxNS43TDMyNyAxOTUuOGMtMy4xIDUuNC0xMC44IDUuNC0xMy45IDBsLTIwLjktMzYuNnoiXQogICAgfTsKICAgIGZhSG90ZWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG90ZWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NzZdLCAiZjU5NCIsICJNMTYgMjRDMTYgMTAuNyAyNi43IDAgNDAgMEw0NzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOCAwIDAgNDE2IDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw0MCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOCAwIDAtNDE2LTggMEMyNi43IDQ4IDE2IDM3LjMgMTYgMjR6bTIwOCA4OGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xMjggOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptOTYgMTEybDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTM1MiA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0xMTIgMjA4bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTI0MC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0yODggMzg0bDQzLjggMGM5LjkgMCAxNy41LTkgMTQtMTguMi0xMy44LTM2LjEtNDguOC02MS44LTg5LjctNjEuOHMtNzUuOSAyNS43LTg5LjcgNjEuOGMtMy41IDkuMiA0LjEgMTguMiAxNCAxOC4ybDQzLjggMCAwIDgwIDY0IDAgMC04MHoiXQogICAgfTsKICAgIGZhUHJpbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicHJpbnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0MjQsIDEyODQzOCwgOTExM10sICJmMDJmIiwgIk02NCA2NEM2NCAyOC43IDkyLjcgMCAxMjggMEwzNDEuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43bDQyLjUgNDIuNWMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zbDAgMzcuNS0zODQgMCAwLTgwek0wIDI1NmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTI1NiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZ6TTEyOCA0MTZsMCAzMiAyNTYgMCAwLTk2LTI1NiAwIDAgNjR6TTQ1NiAyNzJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhVm9sbGV5YmFsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2b2xsZXliYWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTUyLCAidm9sbGV5YmFsbC1iYWxsIl0sICJmNDVmIiwgIk01MTIgMjU4LjljLTIzLjQgOC00Ny44IDEzLjEtNzIuNiAxNS4xIDUuOS05OC42LTMwLjctMTkxLjEtOTQuOS0yNTguMyA5Ny44IDM2IDE2Ny41IDEzMCAxNjcuNSAyNDAuMyAwIDEgMCAxLjkgMCAyLjl6bS01LjkgNTJjLTUuMiAyMy43LTEzLjYgNDYuMi0yNC45IDY2LjktOTQuNyA1Mi4yLTIxNCA1MC0zMDguNC0xMy42IDIxLjctMzEuMyA0OS44LTU4LjkgODMuOC04MC41IDc5LjUgNDEuNiAxNjguNSA0OS4xIDI0OS41IDI3LjF6TTI3OS43IDI0MS42Yy0zLjctODkuNy00MS43LTE3MC41LTEwMS4zLTIyOS43IDIyLjMtNy4xIDQ2LTExLjIgNzAuNS0xMS45IDkyLjUgNTUuOSAxNTAuMyAxNjAuMyAxNDIuNCAyNzMuOC0zOC0zLjItNzUuOS0xMy43LTExMS42LTMyLjN6TTEzMC41IDMyLjhDMTQ5LjEgNDkuMSAxNjUuOCA2Ny43IDE3OS45IDg4LjIgOTEuNSAxMzIuMyAyOS43IDIxMC4zIDMuNyAyOTkuNSAxLjMgMjg1LjMgMCAyNzAuOCAwIDI1NiAwIDE2MC4yIDUyLjYgNzYuNyAxMzAuNSAzMi44em03My40IDk3YzE2LjMgMzQuNSAyNi4xIDcyLjYgMjcuOSAxMTIuOC03NS44IDQ4LTEyNi44IDEyMS4zLTE0OC4zIDIwMi41LTE3LjYtMTYuMS0zMy0zNC42LTQ1LjUtNTUgMi4xLTEwOC4xIDYzLjctMjEwLjQgMTY1LjktMjYwLjN6TTI1NiA1MTJjLTQ3LjcgMC05Mi4zLTEzLTEzMC41LTM1LjcgNC44LTI0LjMgMTIuNi00OCAyMy4yLTcwLjQgODIuNCA1NC40IDE4MC44IDY4LjkgMjcxIDQ3LTQ0LjQgMzctMTAxLjUgNTkuMi0xNjMuNyA1OS4yeiJdCiAgICB9OwogICAgZmFWb2xsZXliYWxsQmFsbCA9IGZhVm9sbGV5YmFsbDsKICAgIGZhVHJhZmZpY0xpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyYWZmaWMtbGlnaHQiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMjg2NzhdLCAiZjYzNyIsICJNNjQtMzJDMjguNy0zMiAwLTMuMyAwIDMyTDAgMzg0YzAgODguNCA3MS42IDE2MCAxNjAgMTYwczE2MC03MS42IDE2MC0xNjBsMC0zNTJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQtMzJ6bTk2IDM5MmMzMC45IDAgNTYgMjUuMSA1NiA1NnMtMjUuMSA1Ni01NiA1Ni01Ni0yNS4xLTU2LTU2IDI1LjEtNTYgNTYtNTZ6bTU2LTEwNGE1NiA1NiAwIDEgMSAtMTEyIDAgNTYgNTYgMCAxIDEgMTEyIDB6TTE2MCAxNTJhNTYgNTYgMCAxIDEgMC0xMTIgNTYgNTYgMCAxIDEgMCAxMTJ6Il0KICAgIH07CiAgICBmYVBsYW5lQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbmUtY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NTUiLCAiTTIzMiAyNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI3LjMgNzggNzEuNWMtNjkuMyAyOS0xMTggOTcuNC0xMTggMTc3LjIgMCA0OS4zIDE4LjYgOTQuMyA0OS4xIDEyOC4zTDI4OCA1MTIgMTc5LjkgNTM5Yy0xMC4xIDIuNS0xOS45LTUuMS0xOS45LTE1LjVsMC0xOS44YzAtNC45IDIuMi05LjUgNi0xMi41bDY2LTUyLjggMC05OS43LTE2Mi45IDU0LjNDNTguNyAzOTYuNCA0OCAzODguNyA0OCAzNzcuOGwwLTQzLjdjMC05IDMuOC0xNy41IDEwLjQtMjMuNkwyMzIgMTUxLjMgMjMyIDI0ek0zNTIgNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIwMS40LTYwLjljLTcuMS01LjItMTcuMi0zLjYtMjIuNCAzLjVsLTUzIDcyLjktMjYuOC0yNi44Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDQwIDQwYzMuMyAzLjMgNy45IDUgMTIuNiA0LjZzOC45LTIuOCAxMS43LTYuNWw2NC04OGM1LjItNy4xIDMuNi0xNy4yLTMuNS0yMi4zeiJdCiAgICB9OwogICAgZmFVc2VycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VycyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMGMwIiwgIk0zMjAgMTZhMTA0IDEwNCAwIDEgMSAwIDIwOCAxMDQgMTA0IDAgMSAxIDAtMjA4ek05NiA4OGE3MiA3MiAwIDEgMSAwIDE0NCA3MiA3MiAwIDEgMSAwLTE0NHpNMCA0MTZjMC03MC43IDU3LjMtMTI4IDEyOC0xMjggMTIuOCAwIDI1LjIgMS45IDM2LjkgNS40LTMyLjkgMzYuOC01Mi45IDg1LjQtNTIuOSAxMzguNmwwIDE2YzAgMTEuNCAyLjQgMjIuMiA2LjcgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyem01MjEuMyA2NGM0LjMtOS44IDYuNy0yMC42IDYuNy0zMmwwLTE2YzAtNTMuMi0yMC0xMDEuOC01Mi45LTEzOC42IDExLjctMy41IDI0LjEtNS40IDM2LjktNS40IDcwLjcgMCAxMjggNTcuMyAxMjggMTI4bDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTg2LjcgMHpNNDcyIDE2MGE3MiA3MiAwIDEgMSAxNDQgMCA3MiA3MiAwIDEgMSAtMTQ0IDB6TTE2MCA0MzJjMC04OC40IDcxLjYtMTYwIDE2MC0xNjBzMTYwIDcxLjYgMTYwIDE2MGwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNnoiXQogICAgfTsKICAgIGZhQ2VydGlmaWNhdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2VydGlmaWNhdGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjBhMyIsICJNMjM5LjItOGMtNi4xLTYuMi0xNS04LjctMjMuNC02LjRTMjAwLjktNS42IDE5OC44IDIuOEwxODMuNSA2M2MtMS4xIDQuNC01LjYgNy05LjkgNS43TDExMy44IDUxLjljLTguNC0yLjQtMTcuNCAwLTIzLjUgNi4xcy04LjUgMTUuMS02LjEgMjMuNWwxNi45IDU5LjhjMS4yIDQuMy0xLjQgOC44LTUuNyA5LjlMMzUuMSAxNjYuNWMtOC40IDIuMS0xNSA4LjctMTcuMyAxNy4xcy4yIDE3LjMgNi40IDIzLjRsNDQuNSA0My4zYzMuMiAzLjEgMy4yIDguMyAwIDExLjVMMjQuMyAzMDUuMWMtNi4yIDYuMS04LjcgMTUtNi40IDIzLjRzOC45IDE0LjkgMTcuMyAxNy4xbDYwLjIgMTUuM2M0LjQgMS4xIDcgNS42IDUuNyA5LjlMODQuMiA0MzAuNWMtMi40IDguNCAwIDE3LjQgNi4xIDIzLjVzMTUuMSA4LjUgMjMuNSA2LjFsNTkuOC0xNi45YzQuMy0xLjIgOC44IDEuNCA5LjkgNS43bDE1LjMgNjAuMmMyLjEgOC40IDguNyAxNSAxNy4xIDE3LjNzMTcuMy0uMiAyMy40LTYuNGw0My4zLTQ0LjVjMy4xLTMuMiA4LjMtMy4yIDExLjUgMEwzMzcuMyA1MjBjNi4xIDYuMiAxNSA4LjcgMjMuNCA2LjRzMTQuOS04LjkgMTcuMS0xNy4zTDM5My4xIDQ0OWMxLjEtNC40IDUuNi03IDkuOS01LjdsNTkuOCAxNi45YzguNCAyLjQgMTcuNCAwIDIzLjUtNi4xczguNS0xNS4xIDYuMS0yMy41bC0xNi45LTU5LjhjLTEuMi00LjMgMS40LTguOCA1LjctOS45bDYwLjItMTUuM2M4LjQtMi4xIDE1LTguNyAxNy4zLTE3LjFzLS4yLTE3LjQtNi40LTIzLjRsLTQ0LjUtNDMuM2MtMy4yLTMuMS0zLjItOC4zIDAtMTEuNWw0NC41LTQzLjNjNi4yLTYuMSA4LjctMTUgNi40LTIzLjRzLTguOS0xNC45LTE3LjMtMTcuMWwtNjAuMi0xNS4zYy00LjQtMS4xLTctNS42LTUuNy05LjlsMTYuOS01OS44YzIuNC04LjQgMC0xNy40LTYuMS0yMy41cy0xNS4xLTguNS0yMy41LTYuMUw0MDMgNjguOGMtNC4zIDEuMi04LjgtMS40LTkuOS01LjdMMzc3LjggMi44Yy0yLjEtOC40LTguNy0xNS0xNy4xLTE3LjNzLTE3LjMgLjItMjMuNCA2LjRMMjk0IDM2LjVjLTMuMSAzLjItOC4zIDMuMi0xMS41IDBMMjM5LjItOHoiXQogICAgfTsKICAgIGZhQWxhcm1DbG9jazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYWxhcm0tY2xvY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5MjAwXSwgImYzNGUiLCAiTTUwNC40IDEzMi41Yy00LjUgMTAuNS0xOC40IDkuOC0yNC45IC40LTI3LjgtNDAtNjYuMS03Mi4yLTExMS05Mi42LTEwLjQtNC43LTEzLjctMTguMy00LjEtMjQuNiAxNS05LjkgMzMtMTUuNyA1Mi4zLTE1LjcgNTIuNiAwIDk1LjIgNDIuNiA5NS4yIDk1LjIgMCAxMy4yLTIuNyAyNS44LTcuNiAzNy4zem0tNDcxLjkgLjRjLTYuNSA5LjQtMjAuNSAxMC4xLTI0LjktLjQtNC45LTExLjUtNy42LTI0LjEtNy42LTM3LjMgMC01Mi42IDQyLjYtOTUuMiA5NS4yLTk1LjIgMTkuMyAwIDM3LjMgNS44IDUyLjMgMTUuNyA5LjYgNi4zIDYuMyAxOS45LTQuMSAyNC42LTQ0LjggMjAuNC04My4xIDUyLjYtMTExIDkyLjZ6TTM5MC4yIDQ2Ny40QzM1Mi44IDQ5NS40IDMwNi4zIDUxMiAyNTYgNTEycy05Ni44LTE2LjYtMTM0LjEtNDQuNkw4Ni42IDUwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2wzNS4yLTM1LjJDNDguNiAzODQuOCAzMiAzMzguMyAzMiAyODggMzIgMTY0LjMgMTMyLjMgNjQgMjU2IDY0UzQ4MCAxNjQuMyA0ODAgMjg4YzAgNTAuMy0xNi42IDk2LjgtNDQuNiAxMzQuMmwzNS4yIDM1LjJjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTM1LjItMzUuMnpNMjgwIDE4NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDEwNGMwIDYuNCAyLjUgMTIuNSA3IDE3bDU2IDU2YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNDktNDkgMC05NC4xeiJdCiAgICB9OwogICAgZmFIZWxpY29wdGVyU3ltYm9sID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlbGljb3B0ZXItc3ltYm9sIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MDIiLCAiTTQ0NS40IDIyNGw2NC43IDBDNDk1LjYgMTA4LjIgNDAzLjggMTYuNCAyODggMmwwIDY0LjdDMzY4LjQgODAuMSA0MzEuOSAxNDMuNiA0NDUuNCAyMjR6TTUxMCAyODhsLTY0LjcgMEM0MzEuOSAzNjguNCAzNjguNCA0MzEuOSAyODggNDQ1LjNsMCA2NC43YzExNS44LTE0LjQgMjA3LjYtMTA2LjIgMjIyLTIyMnpNMiAyODhDMTYuNCA0MDMuOCAxMDguMiA0OTUuNiAyMjQgNTEwbDAtNjQuN0MxNDMuNiA0MzEuOSA4MC4yIDM2OC40IDY2LjcgMjg4TDIgMjg4em0wLTY0bDY0LjcgMEM4MC4yIDE0My42IDE0My42IDgwLjEgMjI0IDY2LjdMMjI0IDJDMTA4LjIgMTYuNCAxNi40IDEwOC4yIDIgMjI0em0yMDYtNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDk2IDAgMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjQtOTYgMCAwLTY0eiJdCiAgICB9OwogICAgZmFIb3VzZUNoaW1uZXlDcmFjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1jaGltbmV5LWNyYWNrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImhvdXNlLWRhbWFnZSJdLCAiZjZmMSIsICJNMjM0LjIgOC42YzEyLjMtMTEuNCAzMS4zLTExLjQgNDMuNSAwTDM2OCA5Mi4zIDM2OCA4MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTAxLjUgMzcuOCAzNS4xYzkuNiA5IDEyLjggMjIuOSA4IDM1LjFTNDkzLjIgMjcyIDQ4MCAyNzJsLTE2IDAgMCAxNzZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTEwNS42IDAtMzguNC02NCA4MC44LTY3LjNjNy44LTYuNSA3LjYtMTguNi0uNC0yNC45TDIxOC42IDI2My4yYy0xNC42LTExLjUtMzMuOCA3LTIyLjggMjJMMjU2IDM2OCAxNzAuNSA0MzkuMmMtNi4xIDUtNy41IDEzLjgtMy41IDIwLjVsMzEuMyA1Mi4yLTg2LjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4eiJdCiAgICB9OwogICAgZmFIb3VzZURhbWFnZSA9IGZhSG91c2VDaGltbmV5Q3JhY2s7CiAgICBmYVBlcnNvbk1pbGl0YXJ5UG9pbnRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLW1pbGl0YXJ5LXBvaW50aW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NGEiLCAiTTIxNC45IDE0LjFDMjAyIDE1LjIgMTkyIDI2IDE5MiAzOSAxOTIgNTIuOCAyMDMuMiA2NCAyMTcgNjRsMTUxIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzAuNkMzODQgOCAzNzYgLjcgMzY2LjcgMS40TDIxNC45IDE0LjF6TTIwOCAxMTJjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTUuNS0uNi0xMC44LTEuNi0xNkwyMDkuNiA5NmMtMSA1LjItMS42IDEwLjUtMS42IDE2ek00MCAyMjRjLTIyLjEgMC00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDBsMTUyIDAgMCA4OS40IDE2Mi44LTE2Mi44Yy0xMy4zLTQuMy0yNy4zLTYuNS00MS42LTYuNUw0MCAyMjR6bTM0NS43IDIwLjlsLTE3MS4xIDE3MS4xIDE2OS40IDAgMC00Ni4zIDUzLjYgOTAuNmMxMS4yIDE5IDM1LjggMjUuMyA1NC44IDE0LjFzMjUuMy0zNS44IDE0LjEtNTQuOEw0MzAuMyAyOTAuOGMtMTEuMi0xOS0yNi42LTM0LjUtNDQuNi00NS45ek0xOTIgNDQ4bDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMi0xOTIgMHoiXQogICAgfTsKICAgIGZhRGF0YWJhc2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGF0YWJhc2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFjMCIsICJNNDQ4IDIwNS44Yy0xNC44IDkuOC0zMS44IDE3LjctNDkuNSAyNC00NyAxNi44LTEwOC43IDI2LjItMTc0LjUgMjYuMlM5Ni40IDI0Ni41IDQ5LjUgMjI5LjhjLTE3LjYtNi4zLTM0LjctMTQuMi00OS41LTI0TDAgMjg4YzAgNDQuMiAxMDAuMyA4MCAyMjQgODBzMjI0LTM1LjggMjI0LTgwbDAtODIuMnptMC03Ny44bDAtNDhDNDQ4IDM1LjggMzQ3LjcgMCAyMjQgMFMwIDM1LjggMCA4MGwwIDQ4YzAgNDQuMiAxMDAuMyA4MCAyMjQgODBzMjI0LTM1LjggMjI0LTgwek0zOTguNSAzODkuOEMzNTEuNiA0MDYuNSAyODkuOSA0MTYgMjI0IDQxNlM5Ni40IDQwNi41IDQ5LjUgMzg5LjhjLTE3LjYtNi4zLTM0LjctMTQuMi00OS41LTI0TDAgNDMyYzAgNDQuMiAxMDAuMyA4MCAyMjQgODBzMjI0LTM1LjggMjI0LTgwbDAtNjYuMmMtMTQuOCA5LjgtMzEuOCAxNy43LTQ5LjUgMjR6Il0KICAgIH07CiAgICBmYU5ld3NwYXBlcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibmV3c3BhcGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjQwXSwgImYxZWEiLCAiTTAgNDE2TDAgMTIwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAyODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNEw5NiA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0ek0xNjAgMTI4bDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMjQgMjQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNDAgMHptLTI0LTcyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDI0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTM2MCAxNzZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNjQgMHoiXQogICAgfTsKICAgIGZhQ2xvdWRSYWluID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLXJhaW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3ODMsIDk5MjZdLCAiZjczZCIsICJNOTYgMzIwYy01MyAwLTk2LTQzLTk2LTk2IDAtNDIuNSAyNy42LTc4LjYgNjUuOS05MS4yLTEuMy02LjctMS45LTEzLjctMS45LTIwLjggMC02MS45IDUwLjEtMTEyIDExMi0xMTIgNDMuMSAwIDgwLjUgMjQuMyA5OS4yIDYwIDE0LjctMTcuMSAzNi41LTI4IDYwLjgtMjggNDQuMiAwIDgwIDM1LjggODAgODAgMCA1LjUtLjYgMTAuOC0xLjYgMTYgLjUgMCAxLjEgMCAxLjYgMCA1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5Nkw5NiAzMjB6bTEuNiA2OC4yYzEuMS0yLjUgMy42LTQuMiA2LjQtNC4yczUuMyAxLjYgNi40IDQuMmwzMC4yIDY4LjJjMi4yIDUuMSAzLjQgMTAuNSAzLjQgMTYgMCAyMS45LTE4LjEgMzkuNi00MCAzOS42cy00MC0xNy43LTQwLTM5LjZjMC01LjUgMS4yLTExIDMuNC0xNmwzMC4yLTY4LjJ6bTE1MiAwYzEuMS0yLjUgMy42LTQuMiA2LjQtNC4yczUuMyAxLjYgNi40IDQuMmwzMC4yIDY4LjJjMi4yIDUuMSAzLjQgMTAuNSAzLjQgMTYgMCAyMS45LTE4LjEgMzkuNi00MCAzOS42cy00MC0xNy43LTQwLTM5LjZjMC01LjUgMS4yLTExIDMuNC0xNmwzMC4yLTY4LjJ6bTEyMS44IDY4LjJsMzAuMi02OC4yYzEuMS0yLjUgMy42LTQuMiA2LjQtNC4yczUuMyAxLjYgNi40IDQuMmwzMC4yIDY4LjJjMi4yIDUuMSAzLjQgMTAuNSAzLjQgMTYgMCAyMS45LTE4LjEgMzkuNi00MCAzOS42cy00MC0xNy43LTQwLTM5LjZjMC01LjUgMS4yLTExIDMuNC0xNnoiXQogICAgfTsKICAgIGZhTWF4aW1pemUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWF4aW1pemUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZXhwYW5kLWFycm93cy1hbHQiXSwgImYzMWUiLCAiTTE2OCAzMkwyNCAzMkMxMC43IDMyIDAgNDIuNyAwIDU2TDAgMjAwYzAgOS43IDUuOCAxOC41IDE0LjggMjIuMlMzNC4xIDIyMy44IDQxIDIxN2w0MC00MCA3OSA3OS03OSA3OS00MC00MGMtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMwIDMwMi4zIDAgMzEyTDAgNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0bDE0NCAwYzkuNyAwIDE4LjUtNS44IDIyLjItMTQuOHMxLjctMTkuMy01LjItMjYuMmwtNDAtNDAgNzktNzkgNzkgNzktNDAgNDBjLTYuOSA2LjktOC45IDE3LjItNS4yIDI2LjJTMjcwLjMgNDgwIDI4MCA0ODBsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xNDRjMC05LjctNS44LTE4LjUtMTQuOC0yMi4ycy0xOS4zLTEuNy0yNi4yIDUuMmwtNDAgNDAtNzktNzkgNzktNzkgNDAgNDBjNi45IDYuOSAxNy4yIDguOSAyNi4yIDUuMlM0NDggMjA5LjcgNDQ4IDIwMGwwLTE0NGMwLTEzLjMtMTAuNy0yNC0yNC0yNEwyODAgMzJjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOFMyNTYuMiA2Ni4xIDI2MyA3M2w0MCA0MC03OSA3OS03OS03OSA0MC00MGM2LjktNi45IDguOS0xNy4yIDUuMi0yNi4yUzE3Ny43IDMyIDE2OCAzMnoiXQogICAgfTsKICAgIGZhRXhwYW5kQXJyb3dzQWx0ID0gZmFNYXhpbWl6ZTsKICAgIGZhTG9jYXRpb25BcnJvdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsb2NhdGlvbi1hcnJvdyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTI0IiwgIk00NzcuOSA3NS41YzQuNS0xMS44IDEuNy0yNS4yLTcuMi0zNC4xcy0yMi4zLTExLjgtMzQuMS03LjJsLTQxNiAxNjBDNy45IDE5OS0uMyAyMTEuMiAwIDIyNC43czkuMSAyNS40IDIxLjkgMjkuNmwxNzYuOCA1OC45IDU4LjkgMTc2LjhjNC4zIDEyLjggMTYuMSAyMS42IDI5LjYgMjEuOXMyNS43LTcuOSAzMC42LTIwLjVsMTYwLTQxNnoiXQogICAgfTsKICAgIGZhQ2l0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXR5IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTYxXSwgImY2NGYiLCAiTTMyMCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDMyLTQ4IDAgMC03MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDcyLTY0IDAgMC03MkM5NiAxMC43IDg1LjMgMCA3MiAwUzQ4IDEwLjcgNDggMjRsMCA3NGMtMjcuNiA3LjEtNDggMzIuMi00OCA2MkwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MmMwLTM1LjMtMjguNy02NC02NC02NGwtNjQgMCAwLTEyOGMwLTM1LjMtMjguNy02NC02NC02NEwzMjAgMHptNjQgMTEybDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZ6bS0xNiA4MGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwem0xNiAxMTJsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnptMTEyLTE2YzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDB6TTI1NiAzMDRsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnpNMjQwIDE5MmM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwek0xMjggMzA0bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZ6TTExMiAxOTJjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMHoiXQogICAgfTsKICAgIGZhWFJheSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ4LXJheSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDk3IiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDQ0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMzIwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0em0yODAgNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNi02NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY0IDAgMCA0OC04MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDAgMCA0OC02NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY0IDAgMCAxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYgNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNjQgMCAwLTQ4IDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwIDAgMC00OCA2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC02NCAwIDAtMTZ6Il0KICAgIH07CiAgICBmYVVtYnJlbGxhQmVhY2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidW1icmVsbGEtYmVhY2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NThdLCAiZjVjYSIsICJNNDk3LjUgMzQxLjFjLTUuOSAxNi43LTI1LjMgMjMtNDEuMSAxNS4xbC0xNzguMi04OS4xLTEuNiAzLjItODguOCAxNzcuNyAyOTIuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4NC4yIDAgMTAzLjItMjA2LjMgMS42LTMuMi0xNjUuNC04Mi43Yy0xNS44LTcuOS0yMi40LTI3LjMtMTIuNS00MiA0NS45LTY4LjYgMTI0LjEtMTEzLjggMjEyLjktMTEzLjggMTQxLjQgMCAyNTYgMTE0LjYgMjU2IDI1NiAwIDI5LjgtNS4xIDU4LjUtMTQuNSA4NS4xeiJdCiAgICB9OwogICAgZmFBcnJvd1JpZ2h0VG9CcmFja2V0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXJpZ2h0LXRvLWJyYWNrZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2lnbi1pbiJdLCAiZjA5MCIsICJNMzUyIDk2bDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMjU2YzAtNTMtNDMtOTYtOTYtOTZsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bS05LjQgMTgyLjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDI0Mi43IDIyNCAzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjEwLjcgMC03My40IDczLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOHoiXQogICAgfTsKICAgIGZhU2lnbkluID0gZmFBcnJvd1JpZ2h0VG9CcmFja2V0OwogICAgZmFIZWFkc2V0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYWRzZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjU5MCIsICJNMjI0IDY0Yy03OSAwLTE0NC43IDU3LjMtMTU3LjcgMTMyLjcgOS4zLTMgMTkuMy00LjcgMjkuNy00LjdsMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNiAwYy01MyAwLTk2LTQzLTk2LTk2bDAtNjRDMCAxMDAuMyAxMDAuMyAwIDIyNCAwUzQ0OCAxMDAuMyA0NDggMjI0bDAgMTY4LjFjMCA2Ni4zLTUzLjggMTIwLTEyMC4xIDEyMGwtODcuOS0uMS0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAwIDQwIDBjMzkuOCAwIDcyLTMyLjIgNzItNzJsMC0yMC45Yy0xNC4xIDguMi0zMC41IDEyLjgtNDggMTIuOGwtMTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTI2LjUgMjEuNS00OCA0OC00OGwxNiAwYzEwLjQgMCAyMC4zIDEuNiAyOS43IDQuNy0xMy03NS4zLTc4LjYtMTMyLjctMTU3LjctMTMyLjd6Il0KICAgIH07CiAgICBmYVNwbG90Y2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Bsb3RjaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWJjIiwgIk0yMDguNSA2Mi4zbDI4LjEtMzYuOUMyNDguOCA5LjQgMjY3LjggMCAyODggMCAzMTYuNSAwIDM0MS42IDE4LjcgMzQ5LjggNDZsMTcuOCA1OS40YzEwLjMgMzQuNCAzNi4xIDYyIDY5LjggNzQuNmwzOS44IDE0LjljMjAuOSA3LjkgMzQuOCAyNy45IDM0LjggNTAuMiAwIDE2LjktNy45IDMyLjgtMjEuNSA0Mi45bC02Ny4zIDUwLjVjLTI0LjMgMTguMi0zNy4yIDQ3LjktMzMuOCA3OC4xbDIuNSAyMi43YzQuMyAzOC43LTI2IDcyLjYtNjUgNzIuNi0xNC44IDAtMjkuMy01LjEtNDAuOS0xNC4zbC01NS4zLTQ0LjNjLTQuNS0zLjYtOS4zLTYuNy0xNC41LTkuMi0xNS44LTcuOS0zMy43LTEwLjQtNTEtNy4zTDgyLjQgNDUxLjljLTM0LjYgNi4zLTY2LjQtMjAuMy02Ni40LTU1LjQgMC0xMy4yIDQuNy0yNiAxMy4xLTM2LjJsMTEuMi0xMy40YzE0LjYtMTcuNCAyMi42LTM5LjQgMjIuNi02Mi4xIDAtMTguOC01LjUtMzcuMi0xNS44LTUzTDguOCAxNzMuNUMzLjEgMTY0LjcgMCAxNTQuNCAwIDE0My45IDAgMTEwLjUgMzAuMSA4NS4xIDYzIDkwLjdsNTEuMyA4LjdjMzUuOSA2LjEgNzIuMi04LjIgOTQuMi0zNy4xeiJdCiAgICB9OwogICAgZmFVcExvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXAtbG9uZyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWyJsb25nLWFycm93LWFsdC11cCJdLCAiZjMwYyIsICJNMTM3LjQtMjIuNmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxMjggMTI4YzkuMiA5LjIgMTEuOSAyMi45IDYuOSAzNC45UzMwMC45IDE2MCAyODggMTYwbC02NCAwIDAgMzM2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTMzNi02NCAwYy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44Uy4yIDExNC41IDkuNCAxMDUuNGwxMjgtMTI4eiJdCiAgICB9OwogICAgZmFMb25nQXJyb3dBbHRVcCA9IGZhVXBMb25nOwogICAgZmFIZXhhZ29uTm9kZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGV4YWdvbi1ub2RlcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjk5IiwgIk0yNDggMTA2LjZjMTguOS05IDMyLTI4LjMgMzItNTAuNmMwLTMwLjktMjUuMS01Ni01Ni01NnMtNTYgMjUuMS01NiA1NmMwIDIyLjMgMTMuMSA0MS42IDMyIDUwLjZsMCA5OC44Yy0yLjggMS4zLTUuNSAyLjktOCA0LjdsLTgwLjEtNDUuOGMxLjYtMjAuOC04LjYtNDEuNi0yNy45LTUyLjhDNTcuMiA5NiAyMyAxMDUuMiA3LjUgMTMyUzEuMiAxOTMgMjggMjA4LjVjMS4zIC44IDIuNiAxLjUgNCAyLjFsMCA5MC44Yy0xLjMgLjYtMi43IDEuMy00IDIuMUMxLjIgMzE5LTggMzUzLjIgNy41IDM4MFM1Ny4yIDQxNiA4NCA0MDAuNWMxOS4zLTExLjEgMjkuNC0zMiAyNy44LTUyLjhsNTAuNS0yOC45Yy0xMS41LTExLjItMTkuOS0yNS42LTIzLjgtNDEuN0w4OCAzMDYuMWMtMi42LTEuOC01LjItMy4zLTgtNC43bDAtOTAuOGMyLjgtMS4zIDUuNS0yLjkgOC00LjdsODAuMSA0NS44Yy0uMSAxLjQtLjIgMi44LS4yIDQuM2MwIDIyLjMgMTMuMSA0MS42IDMyIDUwLjZsMCA5OC44Yy0xOC45IDktMzIgMjguMy0zMiA1MC42YzAgMzAuOSAyNS4xIDU2IDU2IDU2czU2LTI1LjEgNTYtNTZjMC0yMi4zLTEzLjEtNDEuNi0zMi01MC42bDAtOTguOGMyLjgtMS4zIDUuNS0yLjkgOC00LjdsODAuMSA0NS44Yy0xLjYgMjAuOCA4LjYgNDEuNiAyNy44IDUyLjhjMjYuOCAxNS41IDYxIDYuMyA3Ni41LTIwLjVzNi4zLTYxLTIwLjUtNzYuNWMtMS4zLS44LTIuNy0xLjUtNC0yLjFsMC05MC44YzEuNC0uNiAyLjctMS4zIDQtMi4xYzI2LjgtMTUuNSAzNi00OS43IDIwLjUtNzYuNVMzOTAuOCA5NiAzNjQgMTExLjVjLTE5LjMgMTEuMS0yOS40IDMyLTI3LjggNTIuOGwtNTAuNiAyOC45YzExLjUgMTEuMiAxOS45IDI1LjYgMjMuOCA0MS43TDM2MCAyMDUuOWMyLjYgMS44IDUuMiAzLjMgOCA0LjdsMCA5MC44Yy0yLjggMS4zLTUuNSAyLjktOCA0LjZsLTgwLjEtNDUuOGMuMS0xLjQgLjItMi44IC4yLTQuM2MwLTIyLjMtMTMuMS00MS42LTMyLTUwLjZsMC05OC44eiJdCiAgICB9OwogICAgZmFIb3NwaXRhbDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG9zcGl0YWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5NzMsIDYyNTg5LCAiaG9zcGl0YWwtYWx0IiwgImhvc3BpdGFsLXdpZGUiXSwgImYwZjgiLCAiTTEyOCA2NGMwLTM1LjMgMjguNy02NCA2NC02NEwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0IDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwIDAtNjR6TTI3MiAzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgODAgOTYgMCAwLTgwYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0zMiAwek0xMjggMzY4bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZ6TTExMiAyNTZjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMHpNNTEyIDM2OGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2ek00OTYgMjU2YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6TTI2NCAxMDRsMCAzMi0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMCAwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyIDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwIDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTZ6Il0KICAgIH07CiAgICBmYUhvc3BpdGFsQWx0MiA9IGZhSG9zcGl0YWwyOwogICAgZmFIb3NwaXRhbFdpZGUyID0gZmFIb3NwaXRhbDI7CiAgICBmYVBlcnNvbkhhcmFzc2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24taGFyYXNzaW5nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1NDkiLCAiTTE5MiA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTU5LjQgMzA0LjVMODggMjU2LjkgODggNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjggMTYgMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjQ0LjcgNDcuNCA1Ny4xYzExLjMgMTMuNiAzMS41IDE1LjUgNDUuMSA0LjJzMTUuNS0zMS41IDQuMi00NS4xbC03My43LTg4LjljLTE4LjItMjItNDUuMy0zNC43LTczLjktMzQuN2wtMzUuOSAwYy0zMy43IDAtNjQuOSAxNy43LTgyLjMgNDYuNmwtNTguMyA5N2MtOS4xIDE1LjEtNC4yIDM0LjggMTAuOSA0My45czM0LjggNC4yIDQzLjktMTAuOXpNNDgwIDI0MGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek00NjQgMzQ0bDAgNTguNy00MS40LTQxLjRjLTcuMy03LjMtMTcuNi0xMC42LTI3LjgtOXMtMTguOSA4LjEtMjMuNSAxNy4zbC00OCA5NmMtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDI4LjEtNTYuMyA1NC43IDU0LjdjMTIuNCAxMi40IDI5LjEgMTkuMyA0Ni42IDE5LjMgMzYuNCAwIDY1LjktMjkuNSA2NS45LTY1LjlMNTc2IDM0NGMwLTMwLjktMjUuMS01Ni01Ni01NnMtNTYgMjUuMS01NiA1NnpNMjg4IDQ4YzAgOC44IDcuMiAxNiAxNiAxNmw1NiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bS0uOCA0OS43Yy03LjktNC0xNy41LS43LTIxLjUgNy4ycy0uNyAxNy41IDcuMiAyMS41bDQ4IDI0YzcuOSA0IDE3LjUgLjcgMjEuNS03LjJzLjctMTcuNS03LjItMjEuNWwtNDgtMjR6Il0KICAgIH07CiAgICBmYU1vbmV5QmlsbFRyZW5kVXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9uZXktYmlsbC10cmVuZC11cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTI5IiwgIk00ODAgOGMwLTEzLjMtMTAuNy0yNC0yNC0yNEwzNTQuMi0xNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0My45IDAtMTExLjMgMTExLjMtOTUuMS04MS41Yy05LTcuNy0yMi4yLTcuNy0zMS4yIDBsLTExMiA5NmMtMTAuMSA4LjYtMTEuMiAyMy44LTIuNiAzMy44czIzLjggMTEuMiAzMy44IDIuNmw5Ni40LTgyLjYgOTYuNCA4Mi42YzkuNSA4LjIgMjMuNyA3LjYgMzIuNi0xLjNsMTI3LTEyNyAwIDQzLjljMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNEw0ODAgOHpNNDggMjU2Yy0yNi41IDAtNDggMjEuNS00OCA0OEwwIDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw0MTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE2MGMwLTI2LjUtMjEuNS00OC00OC00OEw0OCAyNTZ6bTQ3LjMgNTZjLTMuNCAyMC4xLTE5LjIgMzYtMzkuNCAzOS40LTQuNCAuNy04LTIuOS04LTcuM2wwLTMyYzAtNC40IDMuNi04IDgtOGwzMiAwYzQuNCAwIDguMSAzLjYgNy4zIDh6bTAgMTQ0LjFjLjcgNC40LTIuOSA4LTcuMyA4bC0zMiAwYy00LjQgMC04LTMuNi04LThsMC0zMmMwLTQuNCAzLjYtOC4xIDgtNy4zIDIwLjEgMy40IDM2IDE5LjIgMzkuNCAzOS40ek00NTYgNDE2LjdjNC40LS43IDggMi45IDggNy4zbDAgMzJjMCA0LjQtMy42IDgtOCA4bC0zMiAwYy00LjQgMC04LjEtMy42LTcuMy04IDMuNC0yMC4xIDE5LjItMzYgMzkuNC0zOS40ek00MTYuNyAzMTJjLS43LTQuNCAyLjktOCA3LjMtOGwzMiAwYzQuNCAwIDggMy42IDggOGwwIDMyYzAgNC40LTMuNiA4LjEtOCA3LjMtMjAuMS0zLjQtMzYtMTkuMi0zOS40LTM5LjR6TTE5MiAzODRhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAweiJdCiAgICB9OwogICAgZmFQZW5SdWxlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW4tcnVsZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsicGVuY2lsLXJ1bGVyIl0sICJmNWFlIiwgIk00MDQgMGMxOS4yIDAgMzcuNiA3LjYgNTEuMSAyMS4ybDM1LjcgMzUuN0M1MDQuNCA3MC40IDUxMiA4OC44IDUxMiAxMDhzLTcuNiAzNy42LTIxLjIgNTEuMUw0NDUuOSAyMDQgMzA4IDY2LjEgMzUyLjkgMjEuMkMzNjYuNCA3LjYgMzg0LjggMCA0MDQgMHpNNTguOSAzMTUuMUwyNzQuMSAxMDAgNDEyIDIzNy45IDE5Ni45IDQ1My4xYy0xMC43IDEwLjctMjQuMSAxOC41LTM4LjcgMjIuNkwzMC40IDUxMS4xYy04LjMgMi4zLTE3LjMgMC0yMy40LTYuMnMtOC41LTE1LjEtNi4yLTIzLjRMMzYuNCAzNTMuOGM0LjEtMTQuNiAxMS44LTI3LjkgMjIuNi0zOC43ek0yMjUuNCA4MC44TDgwLjggMjI1LjQgMTEuNyAxNTYuM2MtMTUuNi0xNS42LTE1LjYtNDAuOSAwLTU2LjZsODgtODhjMTUuNi0xNS42IDQwLjktMTUuNiA1Ni42IDBsNS45IDUuOS01Ni4zIDU2LjNjLTcuOCA3LjgtNy44IDIwLjUgMCAyOC4zczIwLjUgNy44IDI4LjMgMGw1Ni4zLTU2LjMgMzQuOSAzNC45ek00MzEuMiAyODYuNmwzNC45IDM0LjktNTYuMyA1Ni4zYy03LjggNy44LTcuOCAyMC41IDAgMjguM3MyMC41IDcuOCAyOC4zIDBsNTYuMy01Ni4zIDUuOSA1LjljMTUuNiAxNS42IDE1LjYgNDAuOSAwIDU2LjZsLTg4IDg4Yy0xNS42IDE1LjYtNDAuOSAxNS42LTU2LjYgMGwtNjkuMS02OS4xIDE0NC42LTE0NC42eiJdCiAgICB9OwogICAgZmFQZW5jaWxSdWxlciA9IGZhUGVuUnVsZXI7CiAgICBmYVJlcGVhdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZXBlYXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNTddLCAiZjM2MyIsICJNNDcwLjYgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOVMzNTIgMTkuMSAzNTIgMzJsMCAzMi0xNjAgMEM4NiA2NCAwIDE1MCAwIDI1NiAwIDI3My43IDE0LjMgMjg4IDMyIDI4OHMzMi0xNC4zIDMyLTMyYzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4bDE2MCAwIDAgMzJjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnMyNS43IDIuMiAzNC45LTYuOWw2NC02NHpNNDEuNCAzOTMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlTMTYwIDQ5Mi45IDE2MCA0ODBsMC0zMiAxNjAgMGMxMDYgMCAxOTItODYgMTkyLTE5MiAwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOGwtMTYwIDAgMC0zMmMwLTEyLjktNy44LTI0LjYtMTkuOC0yOS42cy0yNS43LTIuMi0zNC45IDYuOWwtNjQgNjR6Il0KICAgIH07CiAgICBmYUJvbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9uZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyOTQ2MF0sICJmNWQ3IiwgIk0xOTcuNCAxNjBjLTMuOSAwLTcuMi0yLjgtOC4xLTYuNi0xMC4yLTQyLjEtNDguMS03My40LTkzLjMtNzMuNC01MyAwLTk2IDQzLTk2IDk2IDAgMjkuMSAxMi45IDU1LjEgMzMuMyA3Mi43IDQuMyAzLjcgNC4zIDEwLjggMCAxNC41LTIwLjQgMTcuNi0zMy4zIDQzLjctMzMuMyA3Mi43IDAgNTMgNDMgOTYgOTYgOTYgNDUuMiAwIDgzLjEtMzEuMyA5My4zLTczLjQgLjktMy44IDQuMi02LjYgOC4xLTYuNmwyNDUuMSAwYzMuOSAwIDcuMiAyLjggOC4xIDYuNiAxMC4yIDQyLjEgNDguMSA3My40IDkzLjMgNzMuNCA1MyAwIDk2LTQzIDk2LTk2IDAtMjkuMS0xMi45LTU1LjEtMzMuMy03Mi43LTQuMy0zLjctNC4zLTEwLjggMC0xNC41IDIwLjQtMTcuNiAzMy4zLTQzLjcgMzMuMy03Mi43IDAtNTMtNDMtOTYtOTYtOTYtNDUuMiAwLTgzLjEgMzEuMy05My4zIDczLjQtLjkgMy44LTQuMiA2LjYtOC4xIDYuNmwtMjQ1LjEgMHoiXQogICAgfTsKICAgIGZhRmlyZUZsYW1lQ3VydmVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpcmUtZmxhbWUtY3VydmVkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImZpcmUtYWx0Il0sICJmN2U0IiwgIk0xNTMuNiAyOS45bDE2LTIxLjNDMTczLjYgMy4yIDE4MCAwIDE4Ni43IDAgMTk4LjQgMCAyMDggOS42IDIwOCAyMS4zbDAgMjIuMWMwIDEzLjEgNS40IDI1LjcgMTQuOSAzNC43TDMwNy42IDE1OUMzNTYuNCAyMDUuNiAzODQgMjcwLjIgMzg0IDMzNy43IDM4NCA0MzQgMzA2IDUxMiAyMDkuNyA1MTJMMTkyIDUxMkM4NiA1MTIgMCA0MjYgMCAzMjBsMC0zLjhjMC00OC44IDE5LjQtOTUuNiA1My45LTEzMC4xbDMuNS0zLjVjNC4yLTQuMiAxMC02LjYgMTYtNi42IDEyLjUgMCAyMi42IDEwLjEgMjIuNiAyMi42TDk2IDI4OGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0bDAtMy45YzAtMTgtNy4yLTM1LjMtMTkuOS00OGwtMzguNi0zOC42Yy0yNC0yNC0zNy41LTU2LjctMzcuNS05MC43IDAtMjcuNyA5LTU0LjggMjUuNi03Ni45eiJdCiAgICB9OwogICAgZmFGaXJlQWx0ID0gZmFGaXJlRmxhbWVDdXJ2ZWQ7CiAgICBmYUJ1c1NpbXBsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidXMtc2ltcGxlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImJ1cy1hbHQiXSwgImY1NWUiLCAiTTk2IDBDNDMgMCAwIDQzIDAgOTZMMCAzODRjMCAyOS44IDIwLjQgNTQuOSA0OCA2MmwwIDM0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMiAxOTIgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zNGMyNy42LTcuMSA0OC0zMi4yIDQ4LTYybDAtMjg4YzAtNTMtNDMtOTYtOTYtOTZMOTYgMHpNNjQgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJMOTYgMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2ek05NiAzMjBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0yNTYgMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUJ1c0FsdCA9IGZhQnVzU2ltcGxlOwogICAgZmFWZW51c01hcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmVudXMtbWFycyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzk4OTJdLCAiZjIyOCIsICJNNDgwLTY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMlM0NjIuMyAwIDQ4MCAwTDUzMC43IDAgNDc0IDU2LjdjLTI2LjMtMTUuNy01Ny4xLTI0LjctOTAtMjQuNy0zNS40IDAtNjguNCAxMC41LTk2IDI4LjUtMjcuNi0xOC02MC42LTI4LjUtOTYtMjguNS05Ny4yIDAtMTc2IDc4LjgtMTc2IDE3NiAwIDg2LjMgNjIuMSAxNTguMSAxNDQgMTczLjFsMCAzNC45LTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMzQuOWMyMy4zLTQuMyA0NC45LTEzLjEgNjQtMjUuNiAyNy42IDE4IDYwLjYgMjguNSA5NiAyOC41IDk3LjIgMCAxNzYtNzguOCAxNzYtMTc2IDAtNDEuMS0xNC4xLTc5LTM3LjgtMTA5TDU3NiA0NS4zIDU3NiA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDQ4MC02NHpNMzM2IDMwOS4yYzIwLjItMjguNiAzMi02My41IDMyLTEwMS4ycy0xMS44LTcyLjYtMzItMTAxLjJjMTQuNi02LjkgMzAuOC0xMC44IDQ4LTEwLjggNjEuOSAwIDExMiA1MC4xIDExMiAxMTJTNDQ1LjkgMzIwIDM4NCAzMjBjLTE3LjIgMC0zMy41LTMuOS00OC0xMC44ek0yODggMTUwLjNjMTAuMiAxNi45IDE2IDM2LjYgMTYgNTcuN3MtNS44IDQwLjktMTYgNTcuN2MtMTAuMi0xNi45LTE2LTM2LjYtMTYtNTcuN3M1LjgtNDAuOSAxNi01Ny43em0tNDgtNDMuNWMtMjAuMiAyOC42LTMyIDYzLjUtMzIgMTAxLjJzMTEuOCA3Mi42IDMyIDEwMS4yYy0xNC41IDYuOS0zMC44IDEwLjgtNDggMTAuOC02MS45IDAtMTEyLTUwLjEtMTEyLTExMlMxMzAuMSA5NiAxOTIgOTZjMTcuMiAwIDMzLjUgMy45IDQ4IDEwLjh6Il0KICAgIH07CiAgICBmYUJsZW5kZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmxlbmRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTE3IiwgIk0wIDU2QzAgMjUuMSAyNS4xIDAgNTYgMEw0MzcuNiAwYzIxLjMgMCAzNi42IDIwLjMgMzAuOCA0MC44TDQ1Ny4xIDgwIDM0NCA4MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw5OS40IDAtMTguMyA2NC04MS4xIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNjcuNCAwLTI3LjQgOTYtMjU2IDAtOS4xLTk2LTYyLjkgMGMtMzAuOSAwLTU2LTI1LjEtNTYtNTZMMCA1NnpNMTE0LjMgMTkyTDEwMC42IDQ4IDU2IDQ4Yy00LjQgMC04IDMuNi04IDhsMCAxMjhjMCA0LjQgMy42IDggOCA4bDU4LjMgMHpNMTM2IDM4NGwyNDAgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDQ4YzAgMjIuMS0xNy45IDQwLTQwIDQwbC0yNDAgMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MHptMTIwIDg4YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhVSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTE3XSwgIjU1IiwgIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDIyNGMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOHMxMjgtNTcuMyAxMjgtMTI4bDAtMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAyMjRjMCAxMDYtODYgMTkyLTE5MiAxOTJTMCAzOTQgMCAyODhMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnoiXQogICAgfTsKICAgIGZhU2hhcmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hhcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibWFpbC1mb3J3YXJkIl0sICJmMDY0IiwgIk0zMDcuOCAxOC40Yy0xMiA1LTE5LjggMTYuNi0xOS44IDI5LjZsMCA4MC0xMTIgMGMtOTcuMiAwLTE3NiA3OC44LTE3NiAxNzYgMCAxMTMuMyA4MS41IDE2My45IDEwMC4yIDE3NC4xIDIuNSAxLjQgNS4zIDEuOSA4LjEgMS45IDEwLjkgMCAxOS43LTguOSAxOS43LTE5LjcgMC03LjUtNC4zLTE0LjQtOS44LTE5LjUtOS40LTguOC0yMi4yLTI2LjQtMjIuMi01Ni43IDAtNTMgNDMtOTYgOTYtOTZsOTYgMCAwIDgwYzAgMTIuOSA3LjggMjQuNiAxOS44IDI5LjZzMjUuNyAyLjIgMzQuOS02LjlsMTYwLTE2MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MGMtOS4yLTkuMi0yMi45LTExLjktMzQuOS02Ljl6Il0KICAgIH07CiAgICBmYU1haWxGb3J3YXJkID0gZmFTaGFyZTsKICAgIGZhUGhvbmVGbGlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBob25lLWZsaXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzODEsICJwaG9uZS1hbHQiXSwgImY4NzkiLCAiTTM1MS44IDI1YzcuOC0xOC44IDI4LjQtMjguOSA0OC4xLTIzLjVsNS41IDEuNWM2NC42IDE3LjYgMTE5LjggODAuMiAxMDMuNyAxNTYuNC0zNy4xIDE3NS0xNzQuOCAzMTIuNy0zNDkuOCAzNDkuOC03Ni4zIDE2LjItMTM4LjgtMzkuMS0xNTYuNC0xMDMuN2wtMS41LTUuNWMtNS40LTE5LjcgNC43LTQwLjMgMjMuNS00OC4xbDk3LjMtNDAuNWMxNi41LTYuOSAzNS42LTIuMSA0NyAxMS44bDM4LjYgNDcuMmM3MC4zLTM0LjkgMTI2LjgtOTMuMyAxNTkuMy0xNjQuOWwtNDQuMS0zNi4xYy0xMy45LTExLjMtMTguNi0zMC40LTExLjgtNDdMMzUxLjggMjV6Il0KICAgIH07CiAgICBmYVBob25lQWx0ID0gZmFQaG9uZUZsaXA7CiAgICBmYVRvaWxldFBvcnRhYmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvaWxldC1wb3J0YWJsZSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlNTgzIiwgIk0wIDY0bDAgMTYgMzIwIDAgMC0xNmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwQzI4LjcgMCAwIDI4LjcgMCA2NHptMjQgNjRMMCAxMjggMCA0ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTggMjI0IDAgMCA4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zNjAtMjk2IDB6bTIyNCA5NmwyNCAwIDAgOTYtMjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhUGVyc29uUHJlZ25hbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXByZWduYW50IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUzMWUiLCAiTTE5MiA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnptODAgMzIxLjJjOC42LTQuNSAxNi44LTEwIDI0LjMtMTYuNWw0LTMuNGMyMi42LTE5LjQgMzUuNy00Ny43IDM1LjctNzcuNiAwLTM1LjktMTguOC02OS4xLTQ5LjYtODcuNmwtMzAuNC0xOC4yIDAtMS44YzAtNDYuNS0zNy43LTg0LjEtODQuMS04NC4xLTI4LjEgMC01NC40IDE0LjEtNzAgMzcuNUwyMS40IDI3MC4yYy05LjggMTQuNy01LjggMzQuNiA4LjkgNDQuNHMzNC42IDUuOCA0NC40LTguOWwyOS00My41LTMwLjUgMTEzLjVjLTIuNiA5LjYtLjYgMTkuOSA1LjUgMjcuOFM5NCA0MTYgMTA0IDQxNmw4IDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTYgMzIgMCAwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMTAuOHoiXQogICAgfTsKICAgIGZhTGVzc1RoYW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGVzcy10aGFuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjI3NzRdLCAiM2MiLCAiTTQ3Ny4xIDUwLjZjNy40IDE2IC40IDM1LjEtMTUuNiA0Mi41TDEwOC40IDI1NiA0NjEuNCA0MTljMTYgNy40IDIzIDI2LjQgMTUuNiA0Mi41cy0yNi40IDIzLTQyLjUgMTUuNmwtNDE2LTE5MkM3LjMgMjc5LjggMCAyNjguNSAwIDI1NlM3LjMgMjMyLjIgMTguNiAyMjdsNDE2LTE5MmMxNi03LjQgMzUuMS0uNCA0Mi41IDE1LjZ6Il0KICAgIH07CiAgICBmYVN1cGVyc2NyaXB0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN1cGVyc2NyaXB0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxMmIiLCAiTTU0NCAzMmMwLTExLjEtNS43LTIxLjQtMTUuMi0yNy4ycy0yMS4yLTYuNC0zMS4xLTEuNGwtMzIgMTZDNDQ5LjkgMjcuMyA0NDMuNSA0Ni41IDQ1MS40IDYyLjMgNDU3IDczLjUgNDY4LjMgODAgNDgwIDgwbDAgODBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTEyOHpNOTYgNjRDNzguMyA2NCA2NCA3OC4zIDY0IDk2czE0LjMgMzIgMzIgMzJsMTUuMyAwIDg5LjYgMTI4LTg5LjYgMTI4LTE1LjMgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwYzEwLjQgMCAyMC4yLTUuMSAyNi4yLTEzLjZMMjQwIDMxMS44IDMyNS44IDQzNC40YzYgOC42IDE1LjggMTMuNiAyNi4yIDEzLjZsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUuMyAwLTg5LjYtMTI4IDg5LjYtMTI4IDE1LjMgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMGMtMTAuNCAwLTIwLjIgNS4xLTI2LjIgMTMuNkwyNDAgMjAwLjIgMTU0LjIgNzcuNkMxNDguMiA2OS4xIDEzOC40IDY0IDEyOCA2NEw5NiA2NHoiXQogICAgfTsKICAgIGZhQ2lyY2xlU3RvcDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXN0b3AiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjA5NCwgInN0b3AtY2lyY2xlIl0sICJmMjhkIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTkyIDE2MGwxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFTdG9wQ2lyY2xlMiA9IGZhQ2lyY2xlU3RvcDI7CiAgICBmYUFycm93c1VwRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtdXAtZG93biIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgWyJhcnJvd3MtdiJdLCAiZjA3ZCIsICJNMTUwLjYtMjIuNmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDk2IDc3LjMgOTYgNDM0LjcgNTQuNiAzOTMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOTYgOTZjNiA2IDE0LjEgOS40IDIyLjYgOS40czE2LjYtMy40IDIyLjYtOS40bDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC00MS40IDQxLjQgMC0zNTcuNSA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZ6Il0KICAgIH07CiAgICBmYUFycm93c1YgPSBmYUFycm93c1VwRG93bjsKICAgIGZhUG9vU3Rvcm0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicG9vLXN0b3JtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInBvby1ib2x0Il0sICJmNzVhIiwgIk0yNjguOS0zMS44Yy01LjUtLjctMTEgMS40LTE0LjUgNS43cy00LjYgMTAuMS0yLjggMTUuM2MyLjggOC4yIDQuMyAxNi45IDQuMyAyNi4xIDAgMjEuNy04LjUgMzcuMi0yMS45IDQ3LjYtMTMuOSAxMC44LTM0LjEgMTctNTguMSAxN2wtMjQgMGMtNDguNiAwLTg4IDM5LjQtODggODggMCAxNC44IDMuNyAyOC44IDEwLjIgNDEuMS00MiA2LjYtNzQuMiA0My03NC4yIDg2LjkgMCA0Ni42IDM2LjIgODQuNyA4MS45IDg3LjggMy4xLTEyLjQgOS45LTIzLjggMTkuNi0zMi41TDI0Mi43IDIyNWMxMi4yLTEwLjkgMjgtMTcgNDQuNC0xNyA0NC42IDAgNzYuNSA0MyA2My43IDg1LjdsLTEyLjcgNDIuNGMyOC44IDEuMiA1Mi43IDIxLjEgNTkuOCA0Ny45bDI2LjIgMGM0OC42IDAgODgtMzkuNCA4OC04OCAwLTQzLjktMzIuMS04MC4zLTc0LjItODYuOSA2LjUtMTIuMyAxMC4yLTI2LjIgMTAuMi00MS4xIDAtNDguNi0zOS40LTg4LTg4LTg4bC05LjQgMGMuOS01LjQgMS40LTEwLjkgMS40LTE2LjYgMC00OC43LTM2LjEtODguOS04My4xLTk1LjJ6TTE0NC42IDQxNmw2MS44IDAtMzEuMiAxMDQuMWMtMy42IDExLjkgNS4zIDIzLjkgMTcuOCAyMy45IDQuNiAwIDktMS43IDEyLjQtNC43TDM0Ni41IDQxMi45YzMuNS0zLjEgNS41LTcuNiA1LjUtMTIuNCAwLTkuMi03LjQtMTYuNi0xNi42LTE2LjZsLTYxLjggMCAzMS4yLTEwNC4xYzMuNi0xMS45LTUuMy0yMy45LTE3LjgtMjMuOS00LjYgMC05IDEuNy0xMi40IDQuN0wxMzMuNSAzODcuMWMtMy41IDMuMS01LjUgNy42LTUuNSAxMi40IDAgOS4yIDcuNCAxNi42IDE2LjYgMTYuNnoiXQogICAgfTsKICAgIGZhUG9vQm9sdCA9IGZhUG9vU3Rvcm07CiAgICBmYVZpZGVvU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlkZW8tc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRlMiIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTUzLTE1MyAwLTIyMi4yYzAtMzUuMy0yOC43LTY0LTY0LTY0TDEyOS44IDY0IDQxLTI0Ljl6TTMyIDEyOGwwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGM3LjggMCAxNS4zLTEuNCAyMi4yLTRMMzYgMTA1LjhjLTIuNiA2LjktNCAxNC40LTQgMjIuMnpNNDY0IDMzNmw3My41IDU4LjhjNC4yIDMuNCA5LjQgNS4yIDE0LjggNS4yIDEzLjEgMCAyMy43LTEwLjYgMjMuNy0yMy43bDAtMjQwLjZjMC0xMy4xLTEwLjYtMjMuNy0yMy43LTIzLjctNS40IDAtMTAuNiAxLjgtMTQuOCA1LjJMNDY0IDE3NiA0NjQgMzM2eiJdCiAgICB9OwogICAgZmFTcXVhcmVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUteG1hcmsiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMDA2MiwgInRpbWVzLXNxdWFyZSIsICJ4bWFyay1zcXVhcmUiXSwgImYyZDMiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTcxIDEzNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw1NSA1NSA1NS01NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTU1IDU1IDU1IDU1YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTU1LTU1LTU1IDU1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU1LTU1LTU1LTU1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXoiXQogICAgfTsKICAgIGZhVGltZXNTcXVhcmUgPSBmYVNxdWFyZVhtYXJrOwogICAgZmFYbWFya1NxdWFyZSA9IGZhU3F1YXJlWG1hcms7CiAgICBmYUhhbmRIb2xkaW5nRHJvcGxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWhvbGRpbmctZHJvcGxldCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJoYW5kLWhvbGRpbmctd2F0ZXIiXSwgImY0YzEiLCAiTTI3NS41IDYuNkwyMDkuMiAxMDNDMTk4IDExOS4zIDE5MiAxMzguNiAxOTIgMTU4LjNsMCAxLjdjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTEuN2MwLTE5LjgtNi0zOS0xNy4yLTU1LjNMMzAwLjUgNi42QzI5Ny43IDIuNSAyOTMgMCAyODggMHMtOS43IDIuNS0xMi41IDYuNnpNMTA5LjMgMzQxLjVMNjYuNyAzODQgMzIgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMC41IDBjMjkgMCA1Ny4zLTkuMyA4MC43LTI2LjVsMTI2LjYtOTMuM2MxNy44LTEzLjEgMjEuNi0zOC4xIDguNS01NS45cy0zOC4xLTIxLjYtNTUuOS04LjVMMzkyLjYgNDE2IDI4MCA0MTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUyLjIgMGMtMzMuOSAwLTY2LjUgMTMuNS05MC41IDM3LjV6Il0KICAgIH07CiAgICBmYUhhbmRIb2xkaW5nV2F0ZXIgPSBmYUhhbmRIb2xkaW5nRHJvcGxldDsKICAgIGZhV29uU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3b24tc2lnbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzgzNjEsICJrcnciLCAid29uIl0sICJmMTU5IiwgIk02Mi40IDUzLjlDNTYuOCAzNy4xIDM4LjcgMjguMSAyMS45IDMzLjZTLTMuOSA1Ny40IDEuNyA3NC4xTDU2LjkgMjQwIDMyIDI0MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MC45IDAgNTYuNyAxNzAuMWM0LjUgMTMuNSAxNy40IDIyLjQgMzEuNiAyMS45czI2LjQtMTAuNCAyOS44LTI0LjJMMjMzIDI4OCAyNzkgMjg4IDMyMSA0NTUuOGMzLjQgMTMuOCAxNS42IDIzLjcgMjkuOCAyNC4yczI3LjEtOC40IDMxLjYtMjEuOUw0MzkuMSAyODggNDgwIDI4OGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjQuOSAwIDU1LjMtMTY1LjljNS42LTE2LjgtMy41LTM0LjktMjAuMi00MC41cy0zNC45IDMuNS00MC41IDIwLjJsLTYyIDE4Ni4xLTU0LjYgMC00NS45LTE4My44QzI4My41IDQyIDI3MC43IDMyIDI1NiAzMnMtMjcuNSAxMC0zMSAyNC4yTDE3OSAyNDAgMTI0LjQgMjQwIDYyLjQgNTMuOXptNzggMjM0LjFsMjYuNiAwLTExLjQgNDUuNi0xNS4yLTQ1LjZ6TTI0NSAyNDBsMTEtNDQuMSAxMSA0NC4xLTIyIDB6bTEwMCA0OGwyNi42IDAtMTUuMiA0NS42LTExLjQtNDUuNnoiXQogICAgfTsKICAgIGZhS3J3ID0gZmFXb25TaWduOwogICAgZmFXb24gPSBmYVdvblNpZ247CiAgICBmYU9iamVjdFVuZ3JvdXAyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm9iamVjdC11bmdyb3VwIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyNDgiLCAiTTMyIDExOS40QzEyLjkgMTA4LjQgMCA4Ny43IDAgNjQgMCAyOC43IDI4LjcgMCA2NCAwIDg3LjcgMCAxMDguNCAxMi45IDExOS40IDMybDIwOS4xIDBjMTEuMS0xOS4xIDMxLjctMzIgNTUuNC0zMiAzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDIzLjctMTIuOSA0NC40LTMyIDU1LjRsMCAxMTMuMWMxOS4xIDExLjEgMzIgMzEuNyAzMiA1NS40IDAgMzUuMy0yOC43IDY0LTY0IDY0LTIzLjcgMC00NC40LTEyLjktNTUuNC0zMmwtMjA5LjEgMGMtMTEuMSAxOS4xLTMxLjcgMzItNTUuNCAzMi0zNS4zIDAtNjQtMjguNy02NC02NCAwLTIzLjcgMTIuOS00NC40IDMyLTU1LjRsMC0xMTMuMXpNMTE5LjQgOTZjLTUuNiA5LjctMTMuNyAxNy44LTIzLjQgMjMuNGwwIDExMy4xYzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNGwyMDkuMSAwYzUuNi05LjcgMTMuNy0xNy44IDIzLjQtMjMuNGwwLTExMy4xYy05LjctNS42LTE3LjgtMTMuNy0yMy40LTIzLjRMMTE5LjQgOTZ6TTU0NCAyNzkuNGMtOS43LTUuNi0xNy44LTEzLjctMjMuNC0yMy40bC0yOS4yIDBjLTUuMy0xNy43LTE0LjgtMzMuNS0yNy40LTQ2LjRsMC0xNy42IDU2LjYgMGMxMS4xLTE5LjEgMzEuNy0zMiA1NS40LTMyIDM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNGwwIDExMy4xYzE5LjEgMTEuMSAzMiAzMS43IDMyIDU1LjQgMCAzNS4zLTI4LjcgNjQtNjQgNjQtMjMuNyAwLTQ0LjQtMTIuOS01NS40LTMybC0yMDkuMSAwYy0xMS4xIDE5LjEtMzEuNyAzMi01NS40IDMyLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNGwwLTI0LjYgNjQgMCAwIDI0LjZjOS43IDUuNiAxNy44IDEzLjcgMjMuNCAyMy40bDIwOS4xIDBjNS42LTkuNyAxMy43LTE3LjggMjMuNC0yMy40bDAtMTEzLjF6Il0KICAgIH07CiAgICBmYUNvbW1lbnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbW1lbnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0ODksIDYxNjY5XSwgImYwNzUiLCAiTTUxMiAyNDBjMCAxMzIuNS0xMTQuNiAyNDAtMjU2IDI0MC0zNy4xIDAtNzIuMy03LjQtMTA0LjEtMjAuN0wzMy41IDUxMC4xYy05LjQgNC0yMC4yIDEuNy0yNy4xLTUuOFMtMiA0ODUuOCAyLjggNDc2LjhsNDguOC05Mi4yQzE5LjIgMzQ0LjMgMCAyOTQuMyAwIDI0MCAwIDEwNy41IDExNC42IDAgMjU2IDBTNTEyIDEwNy41IDUxMiAyNDB6Il0KICAgIH07CiAgICBmYUhpbGxBdmFsYW5jaGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGlsbC1hdmFsYW5jaGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUwNyIsICJNNDQwLjEgNDAxLjljMzQuMiAyMy4xIDgxLjEgMTkuNSAxMTEuNC0xMC44IDM0LjQtMzQuNCAzNC40LTkwLjEgMC0xMjQuNS0yNy44LTI3LjgtNjkuNS0zMy4xLTEwMi42LTE2LTExLjggNi4xLTE2LjQgMjAuNi0xMC4zIDMyLjNzMjAuNiAxNi40IDMyLjMgMTAuM2MxNS4xLTcuOCAzNC01LjMgNDYuNiA3LjMgMTUuNiAxNS42IDE1LjYgNDAuOSAwIDU2LjZzLTQwLjkgMTUuNi01Ni42IDBsLTgxLjctODEuN2MyMi4zLTE0LjIgMzcuMS0zOS4xIDM3LjEtNjcuNSAwLTMzLjktMjEuMS02Mi45LTUwLjktNzQuNSAxLjktNi44IDIuOS0xNCAyLjktMjEuNSAwLTQ0LjItMzUuOC04MC04MC04MC0yNy4zIDAtNTEuNSAxMy43LTY1LjkgMzQuNi01LjgtMjAtMjQuMi0zNC42LTQ2LjEtMzQuNi0yNi41IDAtNDggMjEuNS00OCA0OCAwIDQgLjUgNy45IDEuNCAxMS42TDQ0MC4xIDQwMS45ek00ODAuNCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0wIDEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTY4LjcgODdDNDMuNSA2MS44IC40IDc5LjcgLjQgMTE1LjNMLjQgNDMyYzAgNDQuMiAzNS44IDgwIDgwIDgwbDMxNi43IDBjMzUuNiAwIDUzLjUtNDMuMSAyOC4zLTY4LjNMNjguNyA4N3oiXQogICAgfTsKICAgIGZhQXJyb3dzVG9FeWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXRvLWV5ZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGJmIiwgIk0xNzYgNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAzOC4xLTYzLTYzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMyMS43IDU1LjYgMzEgNjVsNjMgNjMtMzguMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDk2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC05NnptMCA0MDBsMC05NmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtOTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzOC4xIDAtNjMgNjNjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw2My02MyAwIDM4LjFjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHptMzEyIDI0YzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMzguMSA2MyA2M2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTYzLTYzIDM4LjEgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtOTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHpNNDY0IDU2bDAgOTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsOTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzguMSAwIDYzLTYzYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTYzIDYzIDAtMzguMWMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHpNMzIwIDEyMGMtNTcuMyAwLTk5LjQgMzQtMTI1LjYgNjQuMy0yMCAyMy4xLTMyLjQgNDUuOC0zNy42IDU2LjEtMi41IDUtNC45IDkuNy00LjkgMTUuNnMyLjMgMTAuNiA0LjkgMTUuNmM1LjIgMTAuMyAxNy42IDMzIDM3LjYgNTYuMSAyNi4yIDMwLjMgNjguMiA2NC4zIDEyNS42IDY0LjNzOTkuNC0zNCAxMjUuNi02NC4zYzIwLTIzLjEgMzIuNC00NS44IDM3LjYtNTYuMSAyLjUtNSA0LjktOS43IDQuOS0xNS42cy0yLjMtMTAuNi00LjktMTUuNmMtNS4yLTEwLjMtMTcuNi0zMy0zNy42LTU2LjEtMjYuMi0zMC4zLTY4LjItNjQuMy0xMjUuNi02NC4zek0yNTYgMjU2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHoiXQogICAgfTsKICAgIGZhU25vd3Bsb3cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic25vd3Bsb3ciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjdkMiIsICJNMTI4IDE2MGwwLTk2YzAtMzUuMyAyOC43LTY0IDY0LTY0TDI5Ni40IDBjMjQuMiAwIDQ2LjQgMTMuNyA1Ny4yIDM1LjRsODcuNiAxNzUuMWM0LjQgOC45IDYuOCAxOC43IDYuOCAyOC42bDAgNTYuOSA4MCAwIDAtODBjMC00OC42IDM5LjQtODggODgtODggMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTIyLjEgMC00MCAxNy45LTQwIDQwbDAgMjA4YzAgMjIuMSAxNy45IDQwIDQwIDQwIDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy00OC42IDAtODgtMzkuNC04OC04OGwwLTgwLTYzIDBjOS41IDE2LjUgMTUgMzUuNiAxNSA1NiAwIDYxLjktNTAuMSAxMTItMTEyIDExMmwtMjI0IDBjLTYxLjkgMC0xMTItNTAuMS0xMTItMTEyIDAtMzAuNSAxMi4yLTU4LjIgMzItNzguNEw2NCAyMjRjMC0zNS4zIDI4LjctNjQgNjQtNjR6bTkxLjcgMzQuOWw0My42IDI5LjEgMTEzLjIgMC04MC0xNjAtMTA0LjQgMCAwIDEwOC44IDI3LjcgMjIuMXpNNDE2IDQwMGMwLTI2LjUtMjEuNS00OC00OC00OGwtMjI0IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDhsMjI0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6bS0yODAgMGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0yMTYtMjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0yMzIgNDAwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il0KICAgIH07CiAgICBmYUNoYXJ0R2FudHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtZ2FudHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTBlNCIsICJNNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCA0MDBjMCA0NC4yIDM1LjggODAgODAgODBsNDAwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMODAgNDE2Yy04LjggMC0xNi03LjItMTYtMTZMNjQgNjR6bTk2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMHptNjQgMTEyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMjggMHpNMzg0IDI4OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAweiJdCiAgICB9OwogICAgZmFWaWRlbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aWRlbyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ2aWRlby1jYW1lcmEiXSwgImYwM2QiLCAiTTk2IDY0Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw5NiA2NHpNNDY0IDMzNmw3My41IDU4LjhjNC4yIDMuNCA5LjQgNS4yIDE0LjggNS4yIDEzLjEgMCAyMy43LTEwLjYgMjMuNy0yMy43bDAtMjQwLjZjMC0xMy4xLTEwLjYtMjMuNy0yMy43LTIzLjctNS40IDAtMTAuNiAxLjgtMTQuOCA1LjJMNDY0IDE3NiA0NjQgMzM2eiJdCiAgICB9OwogICAgZmFWaWRlb0NhbWVyYSA9IGZhVmlkZW87CiAgICBmYUNoZXNzUGF3bjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlc3MtcGF3biIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk4MjNdLCAiZjQ0MyIsICJNMTkyLTMyYzY2LjMgMCAxMjAgNTMuNyAxMjAgMTIwIDAgMjctOC45IDUxLjktMjQgNzIgMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEwLjcgMCAyNi43IDE2MCA1Ni4yIDcwLjNjNSA2LjMgNy44IDE0LjEgNy44IDIyLjIgMCAxOS42LTE1LjkgMzUuNS0zNS41IDM1LjVMNTEuNSA1MTJjLTE5LjYgMC0zNS41LTE1LjktMzUuNS0zNS41IDAtOC4xIDIuNy0xNS45IDcuOC0yMi4yTDgwIDM4NCAxMDYuNyAyMjQgOTYgMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyYy0xNS4xLTIwLjEtMjQtNDUtMjQtNzIgMC02Ni4zIDUzLjctMTIwIDEyMC0xMjB6Il0KICAgIH07CiAgICBmYVN5bmFnb2d1ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzeW5hZ29ndWUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgzMzNdLCAiZjY5YiIsICJNMTYgODBjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NGwwIDMyLTEyOCAwIDAtMzJ6bTAgMzY4bDAtMjg4IDEyOCAwIDEyNi4yLTg0LjJjMTAuNy03LjIgMjQuOC03LjIgMzUuNSAwbDEyNi4yIDg0LjIgMTI4IDAgMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMODAgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NHpNNTYwIDExMmwtMTI4IDAgMC0zMmMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0bDAgMzJ6TTIyNCAzODRsMCA4MCAxMjggMCAwLTgwYzAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0em02NC0xNTJhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdCiAgICB9OwogICAgZmFCdWlsZGluZ0NpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGQyIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0xMC41LTE0LjYtMTktMzAuNy0yNS4xLTQ4bC03NC45IDAgMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzIgMCA0IC4yIDUuOSAuNSA2LTIzLjYgMTYuMy00NS40IDMwLjEtNjQuNWwtNCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0YzI3LjUtMTkuOCA2MC4zLTMyLjQgOTYtMzUuNEw0MTYgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgMHptMzIgMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI3MiA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xMjggMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTU3NiA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdCiAgICB9OwogICAgZmFDYWxlbmRhclBsdXMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyLXBsdXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI3MSIsICJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem05NiAxOTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDgtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwIDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQ4IDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhV2hlZWxjaGFpck1vdmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2hlZWxjaGFpci1tb3ZlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbIndoZWVsY2hhaXItYWx0Il0sICJlMmNlIiwgIk0zMTIgNTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0yMDUuNCAxMjQuMWMtNi40LTUuMi0xNS42LTQuNy0yMS40IDEuMWwtMzMuNCAzMy40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wxMzguOCA4MGMyOS0yOSA3NS4yLTMxLjQgMTA3LTUuNWw4MS4zIDY2YzIxLjQgMTcuNCAyMy44IDQ5LjIgNS4yIDY5LjVsLTQxLjggNDYgOTggMGMzMC4zIDAgNTMgMjcuNyA0Ny4xIDU3LjRMNDA3LjQgNDU0LjNjLTMuNSAxNy4zLTIwLjMgMjguNi0zNy43IDI1LjFzLTI4LjYtMjAuMy0yNS4xLTM3LjdMMzY5IDMyMCAzMTYuOCAzMjBjMi4xIDEwLjMgMy4yIDIxIDMuMiAzMiAwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMwIDQ0MC40IDAgMzUyIDcxLjYgMTkyIDE2MCAxOTJjNiAwIDExLjkgLjMgMTcuOCAxbDUwLjQtNTAuNC0yMi43LTE4LjV6TTE2MCA0NDhhOTYgOTYgMCAxIDAgMC0xOTIgOTYgOTYgMCAxIDAgMCAxOTJ6Il0KICAgIH07CiAgICBmYVdoZWVsY2hhaXJBbHQgPSBmYVdoZWVsY2hhaXJNb3ZlOwogICAgZmFVc2VyU2hpZWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItc2hpZWxkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1MDUiLCAiTTIyNCAyNDhhMTIwIDEyMCAwIDEgMCAwLTI0MCAxMjAgMTIwIDAgMSAwIDAgMjQwem0tMjkuNyA1NkM5NS44IDMwNCAxNiAzODMuOCAxNiA0ODIuMyAxNiA0OTguNyAyOS4zIDUxMiA0NS43IDUxMmwyNTEuNSAwQzI2MSA0NjkuNCAyNDAgNDE0LjUgMjQwIDM1Ni40bDAtMzEuMWMwLTcuMyAxLTE0LjUgMi45LTIxLjNsLTQ4LjYgMHptMjUxIDE4NC41bC0xMy4zIDYuMyAwLTE4OC4xIDk2IDMyIDAgMTkuNmMwIDU1LjgtMzIuMiAxMDYuNS04Mi43IDEzMC4zek00MjEuOSAyNTkuNWwtMTEyIDM3LjNjLTEzLjEgNC40LTIxLjkgMTYuNi0yMS45IDMwLjRsMCAzMS4xYzAgNzQuNCA0MyAxNDIuMSAxMTAuMiAxNzMuN2wxOC41IDguN2M0LjggMi4yIDEwIDMuNCAxNS4yIDMuNHMxMC41LTEuMiAxNS4yLTMuNGwxOC41LTguN0M1MzMgNTAwLjMgNTc2IDQzMi42IDU3NiAzNTguMmwwLTMxLjFjMC0xMy44LTguOC0yNi0yMS45LTMwLjRsLTExMi0zNy4zYy02LjYtMi4yLTEzLjctMi4yLTIwLjIgMHoiXQogICAgfTsKICAgIGZhQm9sZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib2xkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYwMzIiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5NmwzMiAwIDAgMzIwLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjI0IDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjggMC00Ni41LTI0LjgtODcuMy02Mi0xMDkuNyAxOC43LTIyLjMgMzAtNTEgMzAtODIuMyAwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEwzMiAzMnpNMjg4IDE2MGMwIDM1LjMtMjguNyA2NC02NCA2NGwtOTYgMCAwLTEyOCA5NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0ek0xMjggNDE2bDAtMTI4IDEyOCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0bC0xMjggMHoiXQogICAgfTsKICAgIGZhSGVhcnRQdWxzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydC1wdWxzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJoZWFydGJlYXQiXSwgImYyMWUiLCAiTTI1NiAxMDcuOUwyNDEgODcuMUMyMTYgNTIuNSAxNzUuOSAzMiAxMzMuMSAzMiA1OS42IDMyIDAgOTEuNiAwIDE2NS4xbDAgMi42YzAgMjMuNiA2LjIgNDggMTYuNiA3Mi4zbDEwNiAwYzMuMiAwIDYuMS0xLjkgNy40LTQuOWwzMS44LTc2LjNjMy43LTguOCAxMi4zLTE0LjYgMjEuOC0xNC44czE4LjMgNS40IDIyLjIgMTQuMWw1MS4zIDExMy45IDQxLjQtODIuOGM0LjEtOC4xIDEyLjQtMTMuMyAyMS41LTEzLjNzMTcuNCA1LjEgMjEuNSAxMy4zbDIzLjIgNDYuM2MxLjQgMi43IDQuMSA0LjQgNy4yIDQuNGwxMjMuNiAwYzEwLjUtMjQuMyAxNi42LTQ4LjcgMTYuNi03Mi4zbDAtMi42QzUxMiA5MS42IDQ1Mi40IDMyIDM3OC45IDMyIDMzNi4yIDMyIDI5NiA1Mi41IDI3MSA4Ny4xbC0xNSAyMC43ek00NjkuNiAyODhsLTk3LjggMGMtMjEuMiAwLTQwLjYtMTItNTAuMS0zMWwtMS43LTMuNC00Mi41IDg1LjFjLTQuMSA4LjMtMTIuNyAxMy41LTIyIDEzLjNzLTE3LjYtNS43LTIxLjQtMTQuMWwtNDkuMy0xMDkuNS0xMC41IDI1LjJjLTguNyAyMC45LTI5LjEgMzQuNS01MS43IDM0LjVsLTgwLjIgMGM0Ny4yIDczLjggMTIzIDE0MS43IDE3MC40IDE3Ny45IDEyLjQgOS40IDI3LjYgMTQuMSA0My4xIDE0LjFzMzAuOC00LjYgNDMuMS0xNC4xQzM0Ni42IDQyOS43IDQyMi40IDM2MS44IDQ2OS42IDI4OHoiXQogICAgfTsKICAgIGZhSGVhcnRiZWF0ID0gZmFIZWFydFB1bHNlOwogICAgZmFTcXVhcmVSb290VmFyaWFibGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXJvb3QtdmFyaWFibGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsic3F1YXJlLXJvb3QtYWx0Il0sICJmNjk4IiwgIk0yODIuNiA3OC4xYzgtMjcuMyAzMy00Ni4xIDYxLjQtNDYuMWwyMDAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzNDQgOTYgMjM4LjcgNDU3Yy0zLjYgMTIuMy0xNC4xIDIxLjItMjYuOCAyMi44cy0yNS4xLTQuNi0zMS41LTE1LjZMNzcuNiAyODggMzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDQ1LjYgMGMyMi44IDAgNDMuOCAxMi4xIDU1LjMgMzEuOGw2NS4yIDExMS44IDg0LjQtMjg5LjV6TTM5My40IDIzMy40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDQxLjQgNDEuNCA0MS40LTQxLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtNDEuNCA0MS40IDQxLjQgNDEuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtNDEuNC00MS40LTQxLjQgNDEuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsNDEuNC00MS40LTQxLjQtNDEuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjN6Il0KICAgIH07CiAgICBmYVNxdWFyZVJvb3RBbHQgPSBmYVNxdWFyZVJvb3RWYXJpYWJsZTsKICAgIGZhSGFuZHNCdWJibGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLWJ1YmJsZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiaGFuZHMtd2FzaCJdLCAiZTA1ZSIsICJNMzg0IDY0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptOTYgMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMTI4IDQ2NGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0wIDE2MGwuMSA3Mi42YzAgNDQuOCAxNy42IDg3LjEgNDcuOSAxMTguNCAuMy03NyA0MC4xLTE0OC40IDEwNS40LTE4OS4zbDEuOS0xLjJjLTIuNS0zLjctMi44LTguNi0uNC0xMi43bDYyLTEwNy40YzYuNi0xMS41IDIuNy0yNi4yLTguOC0zMi44UzE4MiA1IDE3NS40IDE2LjVsLTY4IDExNy44IDAgMCAwIDAtNDMuMyA3NSAwLTQ5LjNjMC0xNy43LTE0LjQtMzItMzItMzJTMCAxNDIuNCAwIDE2MHptMjEzLjYtMzUuOWMxNC4xLTguOCAyOS44LTEyLjcgNDUuMi0xMi4xbDM2LjUtNjMuM2M2LjYtMTEuNSAyLjctMjYuMi04LjgtMzIuOHMtMjYuMi0yLjctMzIuOCA4LjhsLTY3LjEgMTE2LjIgMjctMTYuOXptODYuNS0zNS43bC0xNi40IDI4LjRjMTUuMSA1LjUgMjguNiAxNS42IDM4LjMgMjkuN2wxOS43LTM0LjJjNi42LTExLjUgMi43LTI2LjItOC44LTMyLjhzLTI2LjItMi43LTMyLjggOC44em00Ni40IDYzLjdsLTEyLjUgMjEuN2MyIDguNiAyLjUgMTcuNSAxLjcgMjYuMWw0LjMgMCAwIDAgMzQuNCAwIDEzLjctMjMuOGM2LjYtMTEuNSAyLjctMjYuMi04LjgtMzIuOHMtMjYuMi0yLjctMzIuOCA4Ljh6TTI4My4xIDE3NWMtOS40LTE1LTI5LjEtMTkuNS00NC4xLTEwLjJsLTYwLjIgMzcuNkMxMjcuMyAyMzQuNyA5NiAyOTEuMiA5NiAzNTJsMCA4YzAgOC45IC44IDE3LjYgMi4yIDI2LjEgMzUuNCA4LjIgNjEuOCA0MCA2MS44IDc3LjkgMCA2LjMtLjcgMTIuNS0yLjEgMTguNCAyNS4yIDE4LjYgNTYuNCAyOS42IDkwLjEgMjkuNmwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtOTIgMGMtNi42IDAtMTItNS40LTEyLTEyczUuNC0xMiAxMi0xMmwxMjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTI0IDBjLTYuNiAwLTEyLTUuNC0xMi0xMnM1LjQtMTIgMTItMTJsMTU2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE1NiAwYy02LjYgMC0xMi01LjQtMTItMTJzNS40LTEyIDEyLTEybDEyNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMzYgMCAwIDAgMCAwLTkzLjIgMCA0Ni4yLTI4LjljMTUtOS40IDE5LjUtMjkuMSAxMC4yLTQ0LjF6Il0KICAgIH07CiAgICBmYUhhbmRzV2FzaCA9IGZhSGFuZHNCdWJibGVzOwogICAgZmFNYXJrZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFya2VyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YTEiLCAiTTQwOC44IDBjLTI3LjQgMC01My42IDEwLjktNzMgMzAuMkwzMTguMSA0OCAzMDUgMzQuOWMtMjguMS0yOC4xLTczLjctMjguMS0xMDEuOCAwTDEwMyAxMzVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMEwyMzcuMSA2OC45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDI4NC4xIDgxLjkgMTg0IDE4Mi4xIDMyOS45IDMyOCA0ODEuOCAxNzYuMmMxOS40LTE5LjQgMzAuMi00NS42IDMwLjItNzMgMC01Ny00Ni4yLTEwMy4yLTEwMy4yLTEwMy4yek0xMDIuNCAyNjMuN2MtNDkuOSA0OS45LTgzLjMgMTE0LTk1LjUgMTgzLjVMLjQgNDgzLjhDLTEgNDkxLjYgMS41IDQ5OS40IDcgNTA1czEzLjQgOCAyMS4xIDYuN2wzNi43LTYuNWM2OS41LTEyLjMgMTMzLjYtNDUuNiAxODMuNS05NS41TDI5NiAzNjEuOSAxNTAuMSAyMTYgMTAyLjQgMjYzLjd6Il0KICAgIH07CiAgICBmYUNsaXBib2FyZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xpcGJvYXJkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MjAzXSwgImYzMjgiLCAiTTMyMCAzMmwtOC42IDBDMzAwLjQgMTIuOSAyNzkuNyAwIDI1NiAwTDEyOCAwQzEwNC4zIDAgODMuNiAxMi45IDcyLjYgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM1MmMwLTM1LjMtMjguNy02NC02NC02NHpNMTM2IDExMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTEyIDB6Il0KICAgIH07CiAgICBmYVBsYWNlT2ZXb3JzaGlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYWNlLW9mLXdvcnNoaXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjY3ZiIsICJNMTYwIDc5bDAgODEtNDQuOCAzMy42QzEwMy4xIDIwMi43IDk2IDIxNi45IDk2IDIzMmwwIDQwLTYwLjYgMzAuM0MxMy43IDMxMy4yIDAgMzM1LjMgMCAzNTkuNkwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NCA3NC43IDAgODUuNCAwIDMyMCAwbDY0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC04OC40YzAtMjQuMi0xMy43LTQ2LjQtMzUuNC01Ny4yTDQxNiAyNzIgNDE2IDIzMmMwLTE1LjEtNy4xLTI5LjMtMTkuMi0zOC40TDM1MiAxNjAgMzUyIDc5YzAtOS41LTQuMi0xOC41LTExLjUtMjQuNkwyNzEuNC0zLjJjLTguOS03LjQtMjEuOC03LjQtMzAuNyAwTDE3MS41IDU0LjRDMTY0LjIgNjAuNSAxNjAgNjkuNSAxNjAgNzl6bTk2IDI0MWMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDgwLTEyOCAwIDAtODBjMC0zNS4zIDI4LjctNjQgNjQtNjR6Il0KICAgIH07CiAgICBmYUNhbm5hYmlzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbm5hYmlzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1NWYiLCAiTTI1NiAwYzUuMyAwIDEwLjMgMi43IDEzLjMgNy4xIDE1LjggMjMuNSAzNi43IDYzLjcgNDkuMiAxMDkgNy4zIDI2LjQgMTEuOCA1NS4zIDEwLjMgODQgMTEuNi04LjkgMjMuNy0xNi43IDM1LjktMjMuNyA0MS0yMy4zIDg0LjQtMzYuOSAxMTIuMi00Mi41IDUuMi0xIDEwLjcgLjYgMTQuNCA0LjRzNS40IDkuMiA0LjQgMTQuNWMtNS42IDI3LjctMTkuMyA3MC45LTQyLjcgMTExLjctOS4xIDE1LjktMTkuOSAzMS43LTMyLjUgNDYuMyAyNy45IDYuNiA1Mi41IDE3LjIgNjcuMyAyNS40IDUuMSAyLjggOC4yIDguMiA4LjIgMTRzLTMuMiAxMS4yLTguMiAxNGMtMTUuMiA4LjQtNDAuOSAxOS41LTY5LjggMjYuMS0yMC4yIDQuNi00Mi45IDcuMi02NS4yIDQuNmw4LjMgMzMuMmMxLjUgNi4xLS42IDEyLjUtNS41IDE2LjRzLTExLjYgNC42LTE3LjIgMS44TDI4MCA0MTcuMiAyODAgNDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNzAuOC01OC41IDI5LjFjLTUuNiAyLjgtMTIuMyAyLjEtMTcuMi0xLjhzLTctMTAuMy01LjUtMTYuNGw4LjMtMzMuMmMtMjIuMiAyLjYtNDUgMC02NS4yLTQuNi0yOC45LTYuNi01NC41LTE3LjYtNjkuOC0yNi4xLTUuMS0yLjgtOC4yLTguMi04LjItMTRzMy4yLTExLjIgOC4yLTE0bDYuMi0zLjNjMTUtNy42IDM2LjgtMTYuNCA2MS4xLTIyLjItMTIuNS0xNC41LTIzLjMtMzAuNC0zMi40LTQ2LjItMjMuNC00MC44LTM3LjEtODQtNDIuNy0xMTEuNy0xLjEtNS4yIC42LTEwLjcgNC40LTE0LjVzOS4yLTUuNCAxNC40LTQuNGMyNy45IDUuNSA3MS4yIDE5LjIgMTEyLjIgNDIuNSAxMi4yIDYuOSAyNC4zIDE0LjggMzUuOCAyMy43LTEuNC0yOC43IDMuMS01Ny42IDEwLjMtODQgMTIuNS00NS4zIDMzLjQtODUuNSA0OS4yLTEwOWwxLjItMS42QzI0Ni45IDIgMjUxLjMgMCAyNTYgMHoiXQogICAgfTsKICAgIGZhUGVvcGxlUm9vZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW9wbGUtcm9vZiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTM3IiwgIk0zMDIuMy0xMi42Yy05LTQuNS0xOS42LTQuNS0yOC42IDBsLTI1NiAxMjhDMS45IDEyMy4zLTQuNSAxNDIuNSAzLjQgMTU4LjNzMjcuMSAyMi4yIDQyLjkgMTQuM0wyODggNTEuOCA1MjkuNyAxNzIuNmMxNS44IDcuOSAzNSAxLjUgNDIuOS0xNC4zczEuNS0zNS0xNC4zLTQyLjlsLTI1Ni0xMjh6TTI4OCAyNzJhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6bTAgNDhjLTUzIDAtOTYgNDMtOTYgOTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyYzAtNTMtNDMtOTYtOTYtOTZ6TTE2MCAyNTZhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHptMzUyIDBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMTEyIDMzNmMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAzMy4xYzAgMTcgMTMuOCAzMC45IDMwLjkgMzAuOWw4Ny44IDBjLTQuMy05LjgtNi43LTIwLjYtNi43LTMybDAtNDhjMC0xOC40IDMuNS0zNiA5LjgtNTIuMi0xMi4yLTcuNS0yNi41LTExLjgtNDEuOC0xMS44ek00MjUuNCA0ODBsODcuOCAwYzE3IDAgMzAuOS0xMy44IDMwLjktMzAuOWwwLTMzLjFjMC00NC4yLTM1LjgtODAtODAtODAtMTUuMyAwLTI5LjYgNC4zLTQxLjggMTEuOCA2LjMgMTYuMiA5LjggMzMuOCA5LjggNTIuMmwwIDQ4YzAgMTEuNC0yLjQgMjIuMi02LjcgMzJ6Il0KICAgIH07CiAgICBmYURpc2Vhc2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGlzZWFzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2ZhIiwgIk0yMzYuNSAyOS40TDIyNCA0OGMtMjAgMzAtNTMuNiA0OC04OS43IDQ4TDY4IDk2Yy0zNy41IDAtNjcuOSAzMC40LTY3LjkgNjcuOSAwIDE4IDcuMiAzNS4yIDE5LjkgNDcuOWwyNyAyN2MxMSAxMSAxNy4yIDI1LjkgMTcuMiA0MS41IDAgMTUuOC02LjQgMzAuOS0xNy43IDQyTDMzLjQgMzM1LjFjLTExLjEgMTAuOC0xNy4zIDI1LjctMTcuMyA0MS4yIDAgMzYuOCAzNC4xIDY0LjIgNzAuMSA1Ni4ybDYyLjMtMTMuOGM3LjctMS43IDE1LjctMi42IDIzLjYtMi42IDMyLjggMCA2NC4yIDE0LjYgODUuMiAzOS44bDMwLjUgMzYuNmMxMC40IDEyLjQgMjUuNyAxOS42IDQxLjkgMTkuNiAzMC4xIDAgNTQuNS0yNC40IDU0LjUtNTQuNWwwLTUxLjJjMC00MS40IDI1LjQtNzguNSA2NC05My41bDIyLjItOC42YzI1LjItOS44IDQxLjgtMzQuMSA0MS44LTYxLjEgMC0yNi40LTE1LjktNTAuMy00MC4zLTYwLjVMNDI5IDE2NC44Yy0zMy4yLTEzLjktNTcuNi00My02NS41LTc4LjFsLTcuOS0zNS4yYy02LjgtMzAuMS0zMy41LTUxLjUtNjQuMy01MS41LTIyIDAtNDIuNiAxMS01NC44IDI5LjR6TTE2MCAxOTJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em05NiAwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTMyIDk2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhQm9va0JpYmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2stYmlibGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiYmlibGUiXSwgImY2NDciLCAiTTk2IDUxMmMtNTMgMC05Ni00My05Ni05NkwwIDk2QzAgNDMgNDMgMCA5NiAwTDQwMCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjg4YzAgMjAuOS0xMy40IDM4LjctMzIgNDUuM2wwIDY2LjdjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMOTYgNTEyem0wLTEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyNTYgMCAwLTY0LTI1NiAwek0xOTIgODBsMCA0OC00OCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsNDggMCAwIDExMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xMTIgNDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTQ4IDAgMC00OGMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnoiXQogICAgfTsKICAgIGZhQmlibGUgPSBmYUJvb2tCaWJsZTsKICAgIGZhQ2hlc3NCb2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1ib2FyZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDNjIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem02NCA2NGwwIDY0IDY0IDAgMC02NCA2NCAwIDAgNjQgNjQgMCAwLTY0IDY0IDAgMCA2NC02NCAwIDAgNjQgNjQgMCAwIDY0LTY0IDAgMCA2NCA2NCAwIDAgNjQtNjQgMCAwLTY0LTY0IDAgMCA2NC02NCAwIDAtNjQtNjQgMCAwIDY0LTY0IDAgMC02NCA2NCAwIDAtNjQtNjQgMCAwLTY0IDY0IDAgMC02NC02NCAwIDAtNjQgNjQgMHptNjQgMTI4bDY0IDAgMC02NC02NCAwIDAgNjR6bTAgNjRsMC02NC02NCAwIDAgNjQgNjQgMHptNjQgMGwtNjQgMCAwIDY0IDY0IDAgMC02NHptMCAwbDY0IDAgMC02NC02NCAwIDAgNjR6Il0KICAgIH07CiAgICBmYU1hcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFycyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3OTRdLCAiZjIyMiIsICJNMzIwIDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyTDQ4MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNTAuNy05NSA5NWMxOS41IDI4LjQgMzEgNjIuNyAzMSA5OS44IDAgOTcuMi03OC44IDE3Ni0xNzYgMTc2UzMyIDQwMS4yIDMyIDMwNCAxMTAuOCAxMjggMjA4IDEyOGMzNyAwIDcxLjQgMTEuNCA5OS44IDMxbDk1LTk1LTUwLjcgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTIwOCA0MTZhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0eiJdCiAgICB9OwogICAgZmFMYXB0b3AgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGFwdG9wIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MTg3XSwgImYxMDkiLCAiTTEyOCAzMkM5Mi43IDMyIDY0IDYwLjcgNjQgOTZsMCAyNDAgNjQgMCAwLTI0MCAzODQgMCAwIDI0MCA2NCAwIDAtMjQwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDEyOCAzMnpNMTkuMiAzODRDOC42IDM4NCAwIDM5Mi42IDAgNDAzLjIgMCA0NDUuNiAzNC40IDQ4MCA3Ni44IDQ4MGw0ODYuNCAwYzQyLjQgMCA3Ni44LTM0LjQgNzYuOC03Ni44IDAtMTAuNi04LjYtMTkuMi0xOS4yLTE5LjJMMTkuMiAzODR6Il0KICAgIH07CiAgICBmYVVzZXJYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbInVzZXItdGltZXMiXSwgImYyMzUiLCAiTTEzNi40IDEyOGExMjAgMTIwIDAgMSAxIDI0MCAwIDEyMCAxMjAgMCAxIDEgLTI0MCAwem0tODggMzU0LjNjMC05OC41IDc5LjgtMTc4LjMgMTc4LjMtMTc4LjNsNTkuNCAwYzk4LjUgMCAxNzguMyA3OS44IDE3OC4zIDE3OC4zIDAgMTYuNC0xMy4zIDI5LjctMjkuNyAyOS43TDc4LjEgNTEyYy0xNi40IDAtMjkuNy0xMy4zLTI5LjctMjkuN3pNNjEyLjMgMTI0LjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTMzLjkgMzMuOSAzMy45IDMzLjljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMzMuOS0zMy45LTMzLjkgMzMuOWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMy45LTMzLjktMzMuOS0zMy45Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMzMuOSAzMy45IDMzLjktMzMuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHoiXQogICAgfTsKICAgIGZhVXNlclRpbWVzID0gZmFVc2VyWG1hcms7CiAgICBmYUZsYWdVc2EgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmxhZy11c2EiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjc0ZCIsICJNMzIgMEM0OS43IDAgNjQgMTQuMyA2NCAzMmwwIDE2IDY5LTE3LjJjMzguMS05LjUgNzguMy01LjEgMTEzLjUgMTIuNSA0Ni4zIDIzLjIgMTAwLjggMjMuMiAxNDcuMSAwbDkuNi00LjhDNDIzLjggMjguMSA0NDggNDMuMSA0NDggNjYuMWwwIDM2LjEtNDQuNyAxNi4yYy00Mi44IDE1LjYtOTAgMTMuOS0xMzEuNi00LjZsLTE2LjEtNy4yYy0yMC4zLTktNDEuOC0xNC43LTYzLjYtMTYuOWwwIDMyLjJjMTcuNCAyLjEgMzQuNCA2LjcgNTAuNiAxMy45bDE2LjEgNy4yYzQ5LjIgMjEuOSAxMDUgMjMuOCAxNTUuNiA1LjRsMzMuNy0xMi4zIDAgNjItNDQuNyAxNi4yYy00Mi44IDE1LjYtOTAgMTMuOS0xMzEuNi00LjZsLTE2LjEtNy4yYy00MC4yLTE3LjktODUtMjIuNS0xMjguMS0xMy4zbC02My41IDEzLjYgMCAzMi43IDcwLjItMTUuMWMzNi40LTcuOCA3NC4zLTMuOSAxMDguNCAxMS4zbDE2LjEgNy4yYzQ5LjIgMjEuOSAxMDUgMjMuOCAxNTUuNiA1LjRsMzMuNy0xMi4zIDAgNjEuOS00NC43IDE2LjJjLTQyLjggMTUuNi05MCAxMy45LTEzMS42LTQuNmwtMTYuMS03LjJjLTQwLjItMTcuOS04NS0yMi41LTEyOC4xLTEzLjNsLTYzLjUgMTMuNiAwIDMyLjcgNzAuMi0xNS4xYzM2LjQtNy44IDc0LjMtMy45IDEwOC40IDExLjNsMTYuMSA3LjJjNDkuMiAyMS45IDEwNSAyMy44IDE1NS42IDUuNGwzMy43LTEyLjMgMCAzMy41YzAgMTMuMy04LjMgMjUuMy0yMC44IDMwbC0zNC43IDEzYy00Ni4yIDE3LjMtOTcuNiAxNC42LTE0MS43LTcuNC0zNy45LTE5LTgxLjQtMjMuNy0xMjIuNS0xMy40TDY0IDQwMCA2NCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0OTcuNyAwIDQ4MEwwIDMyQzAgMTQuMyAxNC4zIDAgMzIgMHptODAgOTZhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHptMzIgMGExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bS0zMiA0OGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem0zMiAwYTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnoiXQogICAgfTsKICAgIGZhSGFuZE1pZGRsZUZpbmdlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLW1pZGRsZS1maW5nZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjg0MDVdLCAiZjgwNiIsICJNMjMyIDBjLTIyLjEgMC00MCAxNy45LTQwIDQwbDAgMTY0LjJjLTguNS03LjYtMTkuNy0xMi4yLTMyLTEyLjItMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTU1LjdjLTIgMS40LTMuOSAzLTUuOCA0LjVMNTUgMjg0LjhDNDAuNCAyOTcgMzIgMzE1IDMyIDMzNEwzMiAzNzJjMCAzOCAxNi45IDc0IDQ2LjEgOTguM2w1LjQgNC41YzI4LjggMjQgNjUgMzcuMSAxMDIuNCAzNy4xTDMwNCA1MTJjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhsMC05NmMwLTI2LjUtMjEuNS00OC00OC00OC0xMi40IDAtMjMuNiA0LjctMzIuMSAxMi4zLTEuOS0yNC44LTIyLjYtNDQuMy00Ny45LTQ0LjMtMTIuMyAwLTIzLjUgNC42LTMyIDEyLjJMMjcyIDQwYzAtMjIuMS0xNy45LTQwLTQwLTQweiJdCiAgICB9OwogICAgZmFNb3J0YXJQZXN0bGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9ydGFyLXBlc3RsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWE3IiwgIk01MDQuMyAxMS4xQzQ5My4zLTEuNiA0NzQuNS0zLjcgNDYxIDYuMkwyNTIuMyAxNjAgMzk3LjMgMTYwIDUwMi42IDU0LjZjMTEuOC0xMS44IDEyLjYtMzAuOCAxLjYtNDMuNXpNMzIgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyYzAgODIuNSA0My40IDE0Ny43IDEyMy45IDE3Ni4yLTExLjEgMTMuOS0xOS40IDMwLjMtMjMuOSA0OC4xLTQuNCAxNy4xIDEwLjQgMzEuNyAyOC4xIDMxLjdsMTkyIDBjMTcuNyAwIDMyLjQtMTQuNiAyOC4xLTMxLjctNC41LTE3LjgtMTIuOC0zNC4xLTIzLjktNDguMSA4MC41LTI4LjYgMTIzLjktOTMuNyAxMjMuOS0xNzYuMiAxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAxOTJ6Il0KICAgIH07CiAgICBmYUhlYWRTaWRlQ291Z2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhZC1zaWRlLWNvdWdoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwNjEiLCAiTTk2IDUxMmw2NCAwYzUzIDAgOTYtNDMgOTYtOTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZsMSAwYzI2IDAgNDctMjEgNDctNDcgMC0xMS0zLjktMjEuNi0xMC45LTMwLjFMMjczLjMgMjAwQzI3MS40IDE5Ny42IDI3MC4xIDE5NC43IDI2OS43IDE5MS43IDI1NCA4My4zIDE2MC43IDAgNDggMCA0MC40IDAgMzIuOSAuNCAyNS40IDEuMSAxMC41IDIuNiAwIDE1LjkgMCAzMC45TDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDB6bTE2LTMyMGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem02My4xIDIzNy4ybC00MS41LTMuNWMtMTIuMi0xLTIxLjYtMTEuMi0yMS42LTIzLjQgMC0xMC44IDcuMy0yMC4yIDE3LjgtMjIuOGw0MC40LTEwLjFjMTkuMi00LjggMzcuOCA5LjcgMzcuOCAyOS41IDAgMTcuOC0xNS4yIDMxLjgtMzIuOSAzMC4zek00ODAgMzEyYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptLTQwIDI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bS02NCA0OGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwem0xMjggMGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek00ODAgNTA0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptLTQwLTcyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYVBsYW5lTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGFuZS1sb2NrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NTgiLCAiTTIzMiAyNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI3LjMgODIuMSA3NS4yQzQwOS43IDI0OC4xIDQwMCAyNzQuOSA0MDAgMzA0bDAgMjQuNGMtNy4zIDYuNi0xMy42IDE0LjItMTguNyAyMi43bC0zNy4zLTEyLjQgMCA5OS43IDI0IDE5LjIgMCAzOC4zYzAgMTMuNSAyLjggMjYuNCA3LjggMzguMUwyODggNTEyIDE3OS45IDUzOWMtMTAuMSAyLjUtMTkuOS01LjEtMTkuOS0xNS41bDAtMTkuOGMwLTQuOSAyLjItOS41IDYtMTIuNWw2Ni01Mi44IDAtOTkuNy0xNjIuOSA1NC4zQzU4LjcgMzk2LjQgNDggMzg4LjcgNDggMzc3LjhsMC00My43YzAtOSAzLjgtMTcuNSAxMC40LTIzLjZMMjMyIDE1MS4zIDIzMiAyNHpNNTYwIDMwNC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNNDE2IDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXQogICAgfTsKICAgIGZhQmF0dGVyeVRocmVlUXVhcnRlcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmF0dGVyeS10aHJlZS1xdWFydGVycyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJiYXR0ZXJ5LTQiXSwgImYyNDEiLCAiTTUyOCAxMjhjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjI0YzAgOC44LTcuMiAxNi0xNiAxNmwtNDE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTIyNGMwLTguOCA3LjItMTYgMTYtMTZsNDE2IDB6TTExMiA2NGMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyMjRjMCA0NC4yIDM1LjggODAgODAgODBsNDE2IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC00OGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybDAtNDhjMC00NC4yLTM1LjgtODAtODAtODBMMTEyIDY0em01NiAxMTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDIyNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0bC0yMjQgMHoiXQogICAgfTsKICAgIGZhQmF0dGVyeTQgPSBmYUJhdHRlcnlUaHJlZVF1YXJ0ZXJzOwogICAgZmFGcmFuY1NpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZnJhbmMtc2lnbiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlMThmIiwgIk04MCAzMkM2Mi4zIDMyIDQ4IDQ2LjMgNDggNjRsMCAyNTYtMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNCAwIDAgODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTgwIDg4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTg4IDAgMC02NCAxNDQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTQ0IDAgMC05NiAxNzYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw4MCAzMnoiXQogICAgfTsKICAgIGZhRmlsdGVyQ2lyY2xlRG9sbGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbHRlci1jaXJjbGUtZG9sbGFyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImZ1bm5lbC1kb2xsYXIiXSwgImY2NjIiLCAiTTMyIDY0QzE5LjEgNjQgNy40IDcxLjggMi40IDgzLjhTLjIgMTA5LjUgOS40IDExOC42TDE5MiAzMDEuMyAxOTIgNDE2YzAgOC41IDMuNCAxNi42IDkuNCAyMi42bDY0IDY0YzIuNSAyLjUgNS4zIDQuNSA4LjMgNi0yMS4yLTMwLjktMzMuNi02OC4zLTMzLjYtMTA4LjYgMC05OS40IDc1LjUtMTgxLjEgMTcyLjMtMTkxbDkwLjQtOTAuNGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0OTIuOSA2NCA0ODAgNjRMMzIgNjR6TTU3NiA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHpNNDE2IDMyMGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgOCAxNiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC00NS44IDBjLTUuNiAwLTEwLjIgNC42LTEwLjIgMTAuMiAwIDQuOSAzLjUgOS4xIDguMyAxMGw0NSA4LjJjMjAgMy42IDM0LjYgMjEuMSAzNC42IDQxLjUgMCAyMy4zLTE4LjkgNDIuMi00Mi4yIDQyLjJsLTUuOCAwIDAgOGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw1My44IDBjNS42IDAgMTAuMi00LjYgMTAuMi0xMC4yIDAtNC45LTMuNS05LjEtOC4zLTEwbC00NS04LjJjLTIwLTMuNi0zNC42LTIxLjEtMzQuNi00MS41IDAtMjIuNiAxNy43LTQxIDQwLTQyLjFsMC04LjF6Il0KICAgIH07CiAgICBmYUZ1bm5lbERvbGxhciA9IGZhRmlsdGVyQ2lyY2xlRG9sbGFyOwogICAgZmFDaGVlc2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlZXNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ZWYiLCAiTTUxMiAyNDAuMmwwIDE1LjgtNTEyIDBjMC0yMCAxMC0zOC43IDI2LjYtNDkuOEwyNzQuOSA0MC43YzguNi01LjcgMTguNi04LjcgMjguOS04LjcgMTE1IDAgMjA4LjIgOTMuMiAyMDguMiAyMDguMnptMCA2My44bDAgMTEyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xMTIgNTEyIDB6Il0KICAgIH07CiAgICBmYUNpcmNsZUggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWgiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5NDA1LCAiaG9zcGl0YWwtc3ltYm9sIl0sICJmNDdlIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptOTYtMzQ0bDAgMTc2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNjQtOTYgMCAwIDY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTc2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA2NCA5NiAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhSG9zcGl0YWxTeW1ib2wgPSBmYUNpcmNsZUg7CiAgICBmYVNjaG9vbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2hvb2wiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5NzldLCAiZjU0OSIsICJNMCAxOTJjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjQgMCAxMjcuOS0xMTUuMWMxOC4zLTE2LjQgNDYtMTYuNCA2NC4yIDBMNDQ4IDEyOCA1MTIgMTI4YzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxOTJ6TTIyNCAzNzZsMCA4OCAxMjggMCAwLTg4YzAtMjIuMS0xNy45LTQwLTQwLTQwbC00OCAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MHptLTExMiA4YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6bTE2LTE0NGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2ek00OTYgMzg0YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6bTE2LTE0NGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2ek0yODggMjU2YTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4eiJdCiAgICB9OwogICAgZmFEaWNlRml2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWNlLWZpdmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODYwXSwgImY1MjMiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTY0IDk2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNOTYgMzUyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTIyNCAyMjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NC02NGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0zMiAxNjBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFUb3JuYWRvID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvcm5hZG8iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc3ODZdLCAiZjc2ZiIsICJNMCAzMkwwIDQ1LjZDMCA2Mi43IDEuNyA3OS42IDUgOTZsMzUyLjggMGMzLjItNi45IDcuNS0xMy4zIDEzLTE4LjhsMzguNi0zOC42YzQuMi00LjIgNi42LTEwIDYuNi0xNiAwLTEyLjUtMTAuMS0yMi42LTIyLjYtMjIuNkwzMiAwQzE0LjMgMCAwIDE0LjMgMCAzMnpNMzU1LjcgMTQ0bC0zMzYgMGMxMi40IDI5LjcgMzAuMiA1Ni44IDUyLjcgODBsMzM5LjYgMC00Ny4yLTYyLjljLTMuOS01LjItNy0xMS05LjItMTcuMXpNMjQyLjYgMzM0LjdjOC4yIDQuOCAxNS44IDEwLjcgMjIuNSAxNy4zTDQ0NSAzNTJjMi05LjggMy0xOS45IDMtMzAuMSAwLTE3LjEtMi45LTM0LTguNi00OS45TDEzNiAyNzIgMjQyLjYgMzM0Ljd6TTI5NC4zIDQwMGM1LjMgMTcgNi41IDM1LjIgMy42IDUzbC01LjkgMzUuN2MtMiAxMi4yIDcuNCAyMy40IDE5LjggMjMuNCA1LjMgMCAxMC40LTIuMSAxNC4yLTUuOWw3OC4yLTc4LjJjOC41LTguNSAxNS44LTE3LjggMjEuOS0yNy45bC0xMzEuOCAweiJdCiAgICB9OwogICAgZmFKZXRGaWdodGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImpldC1maWdodGVyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImZpZ2h0ZXItamV0Il0sICJmMGZiIiwgIk00OTYuMiAyMDYuOGMtMTAuNy00LjUtMjIuMi02LjgtMzMuOC02LjhMMzYyIDIwMCAyNDggNDggMjk2IDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0UzMwOS4zIDAgMjk2IDBMMTUyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOCAwIDAgMTUyLTU0LjQgMC01Mi44LTY2Yy0zLTMuOC03LjYtNi0xMi41LTZMMTYgMTI4Yy04LjggMC0xNiA3LjItMTYgMTZsMCA4OCA0MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00MCAwIDAgODhjMCA4LjggNy4yIDE2IDE2IDE2bDI0LjMgMGM0LjkgMCA5LjUtMi4yIDEyLjUtNmw1Mi44LTY2IDU0LjQgMCAwIDE1Mi04IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMTE0LTE1MiAxMDAuNCAwYzExLjYgMCAyMy4xLTIuMyAzMy44LTYuOGw2NS0yNy4xYzguOS0zLjcgMTQuOC0xMi41IDE0LjgtMjIuMnMtNS44LTE4LjQtMTQuOC0yMi4ybC02NS0yNy4xeiJdCiAgICB9OwogICAgZmFGaWdodGVySmV0ID0gZmFKZXRGaWdodGVyOwogICAgZmFUaHVtYnNEb3duMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aHVtYnMtZG93biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODA3OCwgNjE1NzZdLCAiZjE2NSIsICJNMzg0IDMyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgNi4zLTEuMyAxMi4yLTMuNCAxNy43IDIwLjQgNS41IDM1LjQgMjQuMSAzNS40IDQ2LjMgMCA5LjEtMi42IDE3LjYtNyAyNC45IDIyLjIgNC4yIDM5IDIzLjcgMzkgNDcuMSAwIDE5LjctMTEuOSAzNi42LTI4LjkgNDQgMTcgNy40IDI4LjkgMjQuMyAyOC45IDQ0IDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNjAgMCAyOC4yIDcwLjRjMi41IDYuMyAzLjggMTMuMSAzLjggMTkuOWwwIDQuMmMwIDI3LjMtMjIuMSA0OS40LTQ5LjQgNDkuNC0xOC43IDAtMzUuOC0xMC42LTQ0LjItMjcuM0wxNzAuMSAzNTYuM2MtNi43LTEzLjMtMTAuMS0yOC0xMC4xLTQyLjlsMC0xODYuNmMwLTE5LjQgOC45LTM3LjggMjQtNTBsMTIuMi05LjdDMjI0LjYgNDQuNCAyNTkuOCAzMiAyOTYuMSAzMkwzODQgMzJ6TTgwIDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC00OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw0OCAweiJdCiAgICB9OwogICAgZmFCcm9vbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicm9vbSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyOTUyOV0sICJmNTFhIiwgIk01NjYuNiA1NC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xOTIgMTkyLTM0LjctMzQuN2MtNC4yLTQuMi0xMC02LjYtMTYtNi42LTEyLjUgMC0yMi42IDEwLjEtMjIuNiAyMi42bDAgMjkuMSAxMDguMyAxMDguMyAyOS4xIDBjMTIuNSAwIDIyLjYtMTAuMSAyMi42LTIyLjYgMC02LTIuNC0xMS44LTYuNi0xNmwtMzQuNy0zNC43IDE5Mi0xOTJ6TTM0MS4xIDM1My40TDIyMi42IDIzNC45Yy00Mi43LTMuNy04NS4yIDExLjctMTE1LjggNDIuM2wtOCA4Yy0yMi4zIDIyLjMtMzQuOCA1Mi41LTM0LjggODQgMCA2LjggNy4xIDExLjIgMTMuMiA4LjJsNTEuMS0yNS41YzUtMi41IDkuNSA0LjEgNS40IDcuOUw3LjMgNDczLjRDMi43IDQ3Ny42IDAgNDgzLjYgMCA0ODkuOSAwIDUwMi4xIDkuOSA1MTIgMjIuMSA1MTJsMTczLjMgMGMzOC44IDAgNzUuOS0xNS40IDEwMy40LTQyLjggMzAuNi0zMC42IDQ1LjktNzMuMSA0Mi4zLTExNS44eiJdCiAgICB9OwogICAgZmFGaWxlSW1wb3J0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtaW1wb3J0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImFycm93LXJpZ2h0LXRvLWZpbGUiXSwgImY1NmYiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0bDAgMjQwIDE4Mi4xIDAtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw3MiA3MmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNzIgNzJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzEtMzEtMTgyLjEgMCAwIDk2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjc3LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjU4LjcgMTguN0MyNDYuNyA2LjcgMjMwLjUgMCAyMTMuNSAwTDY0IDB6TTMyNS41IDE3NkwyMzIgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyMDggNTguNSAzMjUuNSAxNzZ6Il0KICAgIH07CiAgICBmYUFycm93UmlnaHRUb0ZpbGUgPSBmYUZpbGVJbXBvcnQ7CiAgICBmYVV0ZW5zaWxzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInV0ZW5zaWxzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3ODYwLCA2MTY4NSwgImN1dGxlcnkiXSwgImYyZTciLCAiTTYzLjkgMTQuNEM2My4xIDYuMiA1Ni4yIDAgNDggMHMtMTUuMSA2LjItMTYgMTQuM0wxNy45IDE0OS43Yy0xLjMgNi0xLjkgMTIuMS0xLjkgMTguMiAwIDQ1LjkgMzUuMSA4My42IDgwIDg3LjdMOTYgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yMjQuNGM0NC45LTQuMSA4MC00MS44IDgwLTg3LjcgMC02LjEtLjYtMTIuMi0xLjktMTguMkwyMjMuOSAxNC4zQzIyMy4xIDYuMiAyMTYuMiAwIDIwOCAwcy0xNS4xIDYuMi0xNS45IDE0LjRMMTc4LjUgMTQ5LjljLS42IDUuNy01LjQgMTAuMS0xMS4xIDEwLjEtNS44IDAtMTAuNi00LjQtMTEuMi0xMC4yTDE0My45IDE0LjZDMTQzLjIgNi4zIDEzNi4zIDAgMTI4IDBzLTE1LjIgNi4zLTE1LjkgMTQuNkw5OS44IDE0OS44Yy0uNSA1LjgtNS40IDEwLjItMTEuMiAxMC4yLTUuOCAwLTEwLjYtNC40LTExLjEtMTAuMUw2My45IDE0LjR6TTQ0OCAwQzQzMiAwIDMyMCAzMiAzMjAgMTc2bDAgMTEyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyIDAgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTQ0OGMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhQ3V0bGVyeSA9IGZhVXRlbnNpbHM7CiAgICBmYUlkQmFkZ2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImlkLWJhZGdlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYyYzEiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6bTk2IDM1Mmw2NCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNkw5NiA0NDhjLTguOCAwLTE2LTcuMi0xNi0xNiAwLTQ0LjIgMzUuOC04MCA4MC04MHptLTI0LTk2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMTUyIDY0bDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYVNwaWRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcGlkZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzNzVdLCAiZjcxNyIsICJNMzY5LjMtMzFjMTEuOS0zLjUgMjQuNCAyLjcgMjkgMTMuOWwuOCAyLjMgNDAgMTM2YzIuNSA4LjQgLjEgMTcuNS02LjEgMjMuN2wtNjQuMSA2NC4xIDc2LjQtMjAuOCAxOS45LTU5LjggLjktMi4zYzUtMTEuMSAxNy43LTE2LjggMjkuNS0xMi45IDExLjggMy45IDE4LjUgMTYuMSAxNS44IDI4bC0uNyAyLjQtMjQgNzJjLTIuNSA3LjYtOC43IDEzLjQtMTYuNSAxNS42bC05MS4xIDI0LjggOTEuMSAyNC44YzcuNyAyLjEgMTMuOSA4IDE2LjUgMTUuNmwyNCA3MiAuNyAyLjRjMi43IDExLjktNC4xIDI0LjEtMTUuOCAyOC0xMS44IDMuOS0yNC41LTEuOC0yOS41LTEyLjlsLS45LTIuMy0xOS45LTU5LjgtNzYuNC0yMC44IDY0LjEgNjQuMWM2LjEgNi4xIDguNSAxNS4xIDYuMiAyMy40bC00MCAxNDQtLjggMi4zYy00LjQgMTEuMy0xNi44IDE3LjctMjguOCAxNC40LTEyLTMuMy0xOS4zLTE1LjItMTcuMi0yNy4ybC41LTIuNCAzNi4yLTEzMC41LTM3LjItMzcuMkMzNTEgNDA2IDMwOC40IDQ0OCAyNTYgNDQ4cy05NS00Mi05Ni05NC4xbC0zNyAzNyAzNiAxMjIuMyAuNiAyLjRjMi4yIDExLjktNC45IDIzLjktMTYuOCAyNy40LTExLjkgMy41LTI0LjQtMi43LTI5LTEzLjlsLS44LTIuMy00MC0xMzZjLTIuNS04LjQtLjEtMTcuNSA2LjEtMjMuOGw2NC4xLTY0LjEtNzYuNCAyMC44LTE5LjkgNTkuOC0uOSAyLjNjLTUgMTEuMS0xNy43IDE2LjgtMjkuNSAxMi45cy0xOC41LTE2LjEtMTUuOC0yOGwuNy0yLjQgMjQtNzJjMi41LTcuNiA4LjctMTMuNCAxNi41LTE1LjZsOTEuMS0yNC44LTkxLjEtMjQuOGMtNy43LTIuMS0xMy45LTgtMTYuNS0xNS42bC0yNC03Mi0uNy0yLjRjLTIuNy0xMS45IDQuMS0yNC4xIDE1LjgtMjhzMjQuNSAxLjggMjkuNSAxMi45bC45IDIuMyAxOS45IDU5LjggNzYuNCAyMC44LTY0LjEtNjQuMWMtNi4yLTYuMi04LjUtMTUuMy02LjEtMjMuN2w0MC0xMzYgLjgtMi4zYzQuNi0xMS4zIDE3LjEtMTcuNCAyOS0xMy45IDExLjkgMy41IDE5IDE1LjUgMTYuOCAyNy40bC0uNiAyLjQtMzYgMTIyLjMgNTMgNTNjMS00My4zIDM2LjQtNzguMSA3OS45LTc4LjFzNzguOSAzNC44IDc5LjkgNzguMmw1My4xLTUzLjEtMzYtMTIyLjMtLjYtMi40Yy0yLjItMTIgNC45LTIzLjkgMTYuOC0yNy40eiJdCiAgICB9OwogICAgZmFNb2JpbGVSZXRybyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb2JpbGUtcmV0cm8iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTUyNyIsICJNMTYgNjRDMTYgMjguNyA0NC43IDAgODAgMEwzMDQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw4MCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDE2IDY0em04MCA5NmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTEyOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptOCAxOTJhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yNCA3MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNCAxMC43IDI0IDI0IDI0IDI0LTEwLjcgMjQtMjR6bTY0LTcyYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMjQgNzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjQgMTAuNyAyNCAyNCAyNCAyNC0xMC43IDI0LTI0em02NC03MmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTI0IDcyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0IDEwLjcgMjQgMjQgMjQgMjQtMTAuNyAyNC0yNHpNMTY4IDQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6Il0KICAgIH07CiAgICBmYVNpZ25zUG9zdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaWducy1wb3N0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbIm1hcC1zaWducyJdLCAiZjI3NyIsICJNMjU2LjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi0xNjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNjAgMCAwIDY0LTE1My40IDBjLTQuMiAwLTguMyAxLjctMTEuMyA0LjdsLTQ4IDQ4Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmw0OCA0OGMzIDMgNy4xIDQuNyAxMS4zIDQuN2wxNTMuNCAwIDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTE2MCAwIDAtNjQgMTUzLjQgMGM0LjIgMCA4LjMtMS43IDExLjMtNC43bDQ4LTQ4YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC00OC00OGMtMy0zLTcuMS00LjctMTEuMy00LjdsLTE1My40IDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhTWFwU2lnbnMgPSBmYVNpZ25zUG9zdDsKICAgIGZhR3JvdXBBcnJvd3NSb3RhdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3JvdXAtYXJyb3dzLXJvdGF0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGY2IiwgIk0zNy42IDEyMi4zYy0xMS41IDE4LjctMjAuNiAzOS0yNyA2MC41LTUgMTYuOSA0LjYgMzQuOCAyMS41IDM5LjhzMzQuOC00LjYgMzkuOC0yMS41YzE4LjQtNjEuOSA2Ny4zLTExMC44IDEyOS4yLTEyOS4yIDE2LjktNSAyNi42LTIyLjkgMjEuNS0zOS44UzE5OS44IDUuNiAxODIuOSAxMC42QzE2MS40IDE3IDE0MS4xIDI2LjEgMTIyLjMgMzcuNiAxMTIuMyAxNS40IDg5LjkgMCA2NCAwIDI4LjcgMCAwIDI4LjcgMCA2NCAwIDg5LjkgMTUuNCAxMTIuMyAzNy42IDEyMi4zem00MzYuNyAwYzIyLjItMTAgMzcuNi0zMi40IDM3LjYtNTguMyAwLTM1LjMtMjguNy02NC02NC02NC0yNS45IDAtNDguMyAxNS40LTU4LjMgMzcuNi0xOC43LTExLjUtMzktMjAuNi02MC41LTI3LTE2LjktNS0zNC44IDQuNi0zOS44IDIxLjVzNC42IDM0LjggMjEuNSAzOS44YzYxLjkgMTguNCAxMTAuOCA2Ny4zIDEyOS4yIDEyOS4yIDUgMTYuOSAyMi45IDI2LjYgMzkuOCAyMS41czI2LjYtMjIuOSAyMS41LTM5LjhjLTYuNC0yMS41LTE1LjUtNDEuOC0yNy02MC41ek01MTIgNDQ4YzAtMjUuOS0xNS40LTQ4LjMtMzcuNi01OC4zIDExLjUtMTguNyAyMC42LTM5IDI3LTYwLjUgNS0xNi45LTQuNi0zNC44LTIxLjUtMzkuOHMtMzQuOCA0LjYtMzkuOCAyMS41Yy0xOC40IDYxLjktNjcuMyAxMTAuOC0xMjkuMiAxMjkuMi0xNi45IDUtMjYuNiAyMi45LTIxLjUgMzkuOHMyMi45IDI2LjYgMzkuOCAyMS41YzIxLjUtNi40IDQxLjgtMTUuNSA2MC41LTI3IDEwIDIyLjIgMzIuNCAzNy42IDU4LjMgMzcuNiAzNS4zIDAgNjQtMjguNyA2NC02NHpNMzcuNiAzODkuN2MtMjIuMiAxMC0zNy42IDMyLjQtMzcuNiA1OC4zIDAgMzUuMyAyOC43IDY0IDY0IDY0IDI1LjkgMCA0OC4zLTE1LjQgNTguMy0zNy42IDE4LjcgMTEuNSAzOSAyMC42IDYwLjUgMjcgMTYuOSA1IDM0LjgtNC42IDM5LjgtMjEuNXMtNC42LTM0LjgtMjEuNS0zOS44Yy02MS45LTE4LjQtMTEwLjgtNjcuMy0xMjkuMi0xMjkuMi01LTE2LjktMjIuOS0yNi42LTM5LjgtMjEuNVM1LjYgMzEyLjIgMTAuNiAzMjkuMWM2LjQgMjEuNSAxNS41IDQxLjggMjcgNjAuNXpNMjU2IDE5MmMxNS42IDAgMzAgNS42IDQxLjEgMTQuOWwtMTUuMyAxNS4zYy02LjYgNi42LTEuOSAxNy44IDcuNCAxNy44bDYwLjUgMGM1LjcgMCAxMC40LTQuNyAxMC40LTEwLjRsMC02MC41YzAtOS4zLTExLjItMTMuOS0xNy44LTcuNGwtMTEuMiAxMS4yYy0xOS44LTE3LjktNDYuMi0yOC45LTc1LjEtMjguOS00My42IDAtODEuMyAyNC45LTk5LjggNjEuMS02IDExLjgtMS40IDI2LjMgMTAuNCAzMi4zczI2LjMgMS40IDMyLjMtMTAuNGMxMC42LTIwLjggMzIuMi0zNC45IDU3LTM0Ljl6bTU4LjYgOTMuMWMtMTAuNiAyMC44LTMyLjIgMzQuOS01NyAzNC45LTE1LjcgMC0zMC01LjYtNDEuMS0xNC45bDE1LjMtMTUuM2M2LjYtNi42IDEuOS0xNy44LTcuNC0xNy44TDE2NCAyNzJjLTUuNyAwLTEwLjQgNC43LTEwLjQgMTAuNGwwIDYwLjVjMCA5LjMgMTEuMiAxMy45IDE3LjggNy40bDExLjItMTEuMmMxOS44IDE3LjkgNDYuMiAyOC45IDc1LjEgMjguOSA0My42IDAgODEuMy0yNC45IDk5LjgtNjEuMSA2LTExLjggMS40LTI2LjMtMTAuNC0zMi4zcy0yNi4zLTEuNC0zMi4zIDEwLjR6Il0KICAgIH07CiAgICBmYUFycm93c1NwbGl0VXBBbmRMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy1zcGxpdC11cC1hbmQtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGJjIiwgIk0zNDIuNi0yMi42Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNDEuNC00MS40IDAgMTk1LjljLTE4LjgtMTAuOS00MC43LTE3LjEtNjQtMTcuMWwtMTE0LjcgMCA0MS40LTQxLjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDEwOS4zIDMyMCAyMjQgMzIwYzM1LjMgMCA2NCAyOC43IDY0IDY0IDAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4bDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzA2LjcgNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2eiJdCiAgICB9OwogICAgZmFGaWxsRHJpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxsLWRyaXAiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjU3NiIsICJNMzA5LjcgNzEuNmwtNjQuNCA2NC40IDMzLjQgMzMuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtMzMuNC0zMy40LTk2LjQgOTYuNGMtMi45IDIuOS01LjEgNi41LTYuMyAxMC4zbDMyMS41IDAgNTMuNy01My43YzQuOS00LjkgNy42LTExLjUgNy42LTE4LjNzLTIuNy0xMy41LTcuNi0xOC4zTDM0Ni4zIDcxLjZDMzQxLjUgNjYuNyAzMzQuOSA2NCAzMjggNjRzLTEzLjUgMi43LTE4LjMgNy42ek01OC4zIDIzMi40bDk2LjQtOTYuNC00OS40LTQ5LjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMjAwIDkwLjcgMjY0LjQgMjYuM0MyODEuMyA5LjUgMzA0LjEgMCAzMjggMHM0Ni43IDkuNSA2My42IDI2LjNMNTE3LjcgMTUyLjRDNTM0LjUgMTY5LjMgNTQ0IDE5Mi4xIDU0NCAyMTZzLTkuNSA0Ni43LTI2LjMgNjMuNkwzMTEuNiA0ODUuN0MyOTQuNyA1MDIuNSAyNzEuOSA1MTIgMjQ4IDUxMnMtNDYuNy05LjUtNjMuNi0yNi4zTDU4LjMgMzU5LjZDNDEuNSAzNDIuNyAzMiAzMTkuOSAzMiAyOTZzOS41LTQ2LjcgMjYuMy02My42ek01MTIgNTQ0Yy0zNS4zIDAtNjQtMjguNy02NC02NCAwLTI1LjIgMzIuNi03OS42IDUxLjItMTA4LjcgNi05LjQgMTkuNS05LjQgMjUuNSAwIDE4LjcgMjkuMSA1MS4yIDgzLjUgNTEuMiAxMDguNyAwIDM1LjMtMjguNyA2NC02NCA2NHoiXQogICAgfTsKICAgIGZhU2hpZWxkSGVhcnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hpZWxkLWhlYXJ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NzQiLCAiTTI2OS40IDIuOUMyNjUuMiAxIDI2MC43IDAgMjU2IDBzLTkuMiAxLTEzLjQgMi45TDU0LjMgODIuOGMtMjIgOS4zLTM4LjQgMzEtMzguMyA1Ny4yIC41IDk5LjIgNDEuMyAyODAuNyAyMTMuNiAzNjMuMiAxNi43IDggMzYuMSA4IDUyLjggMCAxNzIuNC04Mi41IDIxMy4yLTI2NCAyMTMuNi0zNjMuMiAuMS0yNi4yLTE2LjMtNDcuOS0zOC4zLTU3LjJMMjY5LjQgMi45ek0yNDkuNiAxODMuNWw2LjQgOC41IDYuNC04LjVjMTEuMS0xNC44IDI4LjUtMjMuNSA0Ni45LTIzLjUgMzIuNCAwIDU4LjcgMjYuMyA1OC43IDU4LjdsMCA1LjNjMCA0OS4xLTY1LjggOTguMS05Ni41IDExOC4zLTkuNSA2LjItMjEuNSA2LjItMzAuOSAwLTMwLjctMjAuMi05Ni41LTY5LjMtOTYuNS0xMTguM2wwLTUuM2MwLTMyLjQgMjYuMy01OC43IDU4LjctNTguNyAxOC41IDAgMzUuOSA4LjcgNDYuOSAyMy41eiJdCiAgICB9OwogICAgZmFQZXJzb25Ta2lpbmdOb3JkaWMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXNraWluZy1ub3JkaWMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsic2tpaW5nLW5vcmRpYyJdLCAiZjdjYSIsICJNNDI0LjggMTZhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6bTk5LjggMTkzLjdjNy42IDE1LjIgMS45IDMzLjYtMTIuNiA0MmwwIDE4MC4zLTMyIDAgMC0xNjQuMi0xMC4xIDVjLTI3LjQgMTMuNy02MC43IDYuMS03OS40LTE4LjJsLTE5LjYtMjUuNS0zOS41IDY4LjggMjQuOCAxMi40YzI5LjUgMTQuNyA0Mi45IDQ5LjUgMzEuMSA4MC4ybC0yOC4yIDczLjQgMTQ5LjQgMGM3LjkgMCAxNS42LTIuMyAyMi4yLTYuN2w3LjktNS4zYzExLTcuNCAyNS45LTQuNCAzMy4zIDYuN3M0LjQgMjUuOS02LjcgMzMuM2wtNy45IDUuM0M1NDMgNTA2LjkgNTI2IDUxMiA1MDguNiA1MTJsLTE4OS4xIDBjLS41IDAtMSAwLTEuNSAwTDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4OCAwYzAtOC4yIDMuMS0xNi40IDkuNC0yMi42bDc0LjEtNzQuMSAxMC4yLTM1LjljMTEuMyAxOC4zIDI3LjcgMzMuOCA0OC40IDQ0LjJsNC44IDIuNC0xLjkgNi44Yy0zIDEwLjUtOC42IDIwLTE2LjMgMjcuN2wtNTEuNSA1MS41IDEwMS4zIDAgMzcuMS05Ni40LTU1LjYtMjcuOEMyMzAuNCAzMTkgMjE1LjMgMjY3IDIzOS4zIDIyNy4xbDM3LjctNjIuNy0yNy43LTcuN2MtOS0yLjUtMTguMSAzLjItMjAgMTIuM2wtNS45IDI5LjNjLTMuMSAxNS42LTE3LjEgMjYuMy0zMi41IDI1LjdsLTEzMCAyMDgtMzcuNyAwIDE0MC42LTIyNWMtMy40LTYuMy00LjYtMTMuOC0zLjEtMjEuM2w1LjktMjkuM2M5LjEtNDUuNiA1NS4xLTczLjggOTkuOS02MS40bDMyLjUgOWM0Ni43IDEzIDg4IDQwLjggMTE3LjYgNzkuM2wyNC45IDMyLjMgNDAuNC0yMC4yYzE1LjgtNy45IDM1LTEuNSA0Mi45IDE0LjN6Il0KICAgIH07CiAgICBmYVNraWluZ05vcmRpYyA9IGZhUGVyc29uU2tpaW5nTm9yZGljOwogICAgZmFTcXVhcmVDaGVjazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWNoZWNrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTc0NSwgOTk4OSwgNjE1MTAsICJjaGVjay1zcXVhcmUiXSwgImYxNGEiLCAiTTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTM0MiAxNDUuN2MtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNMMTg5LjEgMzE1LjIgMTM3IDI2My4xYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDcyIDcyYzUgNSAxMS45IDcuNSAxOC44IDdzMTMuNC00LjEgMTcuNS05LjhMMzQ3LjMgMTc5LjJjNy44LTEwLjcgNS40LTI1LjctNS4zLTMzLjV6Il0KICAgIH07CiAgICBmYUNoZWNrU3F1YXJlMiA9IGZhU3F1YXJlQ2hlY2syOwogICAgZmFCYXRoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhdGgiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg3MDUsICJiYXRodHViIl0sICJmMmNkIiwgIk05NiA3Ny4zYzAtNy4zIDUuOS0xMy4zIDEzLjMtMTMuMyAzLjUgMCA2LjkgMS40IDkuNCAzLjlsMTQuOSAxNC45Yy0zLjYgOS4xLTUuNSAxOC45LTUuNSAyOS4yIDAgMTkuOSA3LjIgMzggMTkuMiA1Mi01LjMgOS4yLTQgMjEuMSAzLjggMjkgOS40IDkuNCAyNC42IDkuNCAzMy45IDBMMjg5IDg5YzkuNC05LjQgOS40LTI0LjYgMC0zMy45LTcuOC03LjktMTkuOC05LjEtMjktMy44LTE0LTEyLTMyLjEtMTkuMi01Mi0xOS4yLTEwLjMgMC0yMC4yIDItMjkuMiA1LjVMMTYzLjkgMjIuNkMxNDkuNCA4LjEgMTI5LjcgMCAxMDkuMyAwIDY2LjYgMCAzMiAzNC42IDMyIDc3LjNMMzIgMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDAgNDhjMCAyOC40IDEyLjQgNTQgMzIgNzEuNkw2NCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2IDI1NiAwIDAgMTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTQwLjRjMTkuNi0xNy42IDMyLTQzLjEgMzItNzEuNmwwLTQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDk2IDI1NiA5NiA3Ny4zeiJdCiAgICB9OwogICAgZmFCYXRodHViID0gZmFCYXRoOwogICAgZmFDaGVzc0Jpc2hvcDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlc3MtYmlzaG9wIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbOTgyMV0sICJmNDNhIiwgIk02NCAzODRMNDguMyAzNjguM0MxNy40IDMzNy40IDAgMjk1LjQgMCAyNTEuNyAwIDIxMy4xIDEzLjUgMTc1LjggMzguMiAxNDYuMUwxMDYuNyA2NCA5NiA2NEM3OC4zIDY0IDY0IDQ5LjcgNjQgMzJTNzguMyAwIDk2IDBMMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEwLjcgMCA0Ny42IDU3LjEtODUuOSA4NS45Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsODIuMy04Mi4zYzE4LjcgMjcuMyAyOC43IDU5LjcgMjguNyA5MyAwIDQzLjctMTcuNCA4NS43LTQ4LjMgMTE2LjZMMjU2IDM4NCAzMTIuMiA0NTQuM2M1IDYuMyA3LjggMTQuMSA3LjggMjIuMiAwIDE5LjYtMTUuOSAzNS41LTM1LjUgMzUuNUwzNS41IDUxMmMtMTkuNiAwLTM1LjUtMTUuOS0zNS41LTM1LjUgMC04LjEgMi43LTE1LjkgNy44LTIyLjJMNjQgMzg0eiJdCiAgICB9OwogICAgZmFQcmVzY3JpcHRpb25Cb3R0bGVNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInByZXNjcmlwdGlvbi1ib3R0bGUtbWVkaWNhbCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJwcmVzY3JpcHRpb24tYm90dGxlLWFsdCJdLCAiZjQ4NiIsICJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBMMzUyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0TDAgMzJ6TTMyIDE0NGwzMjAgMCAwIDMwNGMwIDM1LjMtMjguNyA2NC02NCA2NEw5NiA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzA0ek0xNjAgMjQ4bDAgNDAtNDAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDQwIDAgMCA0MGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC00MCA0MCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtNDAgMCAwLTQwYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdCiAgICB9OwogICAgZmFQcmVzY3JpcHRpb25Cb3R0bGVBbHQgPSBmYVByZXNjcmlwdGlvbkJvdHRsZU1lZGljYWw7CiAgICBmYURyYXdQb2x5Z29uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRyYXctcG9seWdvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzU4MDU1LCAidmVjdG9yLXBvbHlnb24iXSwgImY1ZWUiLCAiTTY0IDBjMjMuNyAwIDQ0LjQgMTIuOSA1NS40IDMybDI3My4xIDBjMTEuMS0xOS4xIDMxLjctMzIgNTUuNC0zMiAzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDM0LTI2LjUgNjEuOC02MCA2My45bC0yLjEgMi45LTcxLjUgOTkuMWMzLjYgOCA1LjYgMTYuOSA1LjYgMjYuMnMtMiAxOC4yLTUuNiAyNi4ybDIuMiAzLjEgNjkuMyA5NiAyLjEgMi45YzMzLjUgMi4xIDYwIDI5LjkgNjAgNjMuOSAwIDM1LjMtMjguNyA2NC02NCA2NC0yMy43IDAtNDQuNC0xMi45LTU1LjQtMzJsLTI3My4xIDBjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzItMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yMy43IDEyLjktNDQuNCAzMi01NS40bDAtMjczLjFDMTIuOSAxMDguNCAwIDg3LjcgMCA2NCAwIDI4LjcgMjguNyAwIDY0IDB6TTM5NC4yIDQxMy40bC02NS41LTkwLjYtMi4yLTMuMWMtMi4xIC4yLTQuMyAuMy02LjUgLjMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGMyLjIgMCA0LjQgLjEgNi41IC4zbDY3LjctOTMuN2MtLjYtLjktMS4xLTEuNy0xLjYtMi42TDExOS40IDk2Yy01LjYgOS43LTEzLjcgMTcuOC0yMy40IDIzLjRsMCAyNzMuMWM5LjcgNS42IDE3LjggMTMuNyAyMy40IDIzLjRsMjczLjEgMGMuNS0uOSAxLjEtMS44IDEuNi0yLjZ6Il0KICAgIH07CiAgICBmYVZlY3RvclBvbHlnb24gPSBmYURyYXdQb2x5Z29uOwogICAgZmFJQ3Vyc29yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImktY3Vyc29yIiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbXSwgImYyNDYiLCAiTS4xIDI5LjNDLTEuNCA0NyAxMS43IDYyLjQgMjkuMyA2My45bDggLjdDNzAuNSA2Ny4zIDk2IDk1IDk2IDEyOC4zbDAgOTUuNy0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCA5NS43YzAgMzMuMy0yNS41IDYxLTU4LjcgNjMuOGwtOCAuN0MxMS43IDQ0OS42LTEuNCA0NjUgLjEgNDgyLjdTMTcgNTEzLjQgMzQuNyA1MTEuOWw4LS43YzM0LjEtMi44IDY0LjItMTguOSA4NS40LTQyLjkgMjEuMiAyNCA1MS4yIDQwIDg1LjQgNDIuOWw4IC43YzE3LjYgMS41IDMzLjEtMTEuNiAzNC41LTI5LjJzLTExLjYtMzMuMS0yOS4yLTM0LjVsLTgtLjdDMTg1LjUgNDQ0LjcgMTYwIDQxNyAxNjAgMzgzLjdsMC05NS43IDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC05NS43YzAtMzMuMyAyNS41LTYxIDU4LjctNjMuOGw4LS43YzE3LjYtMS41IDMwLjctMTYuOSAyOS4yLTM0LjVTMjM5LTEuNCAyMjEuMyAuMWwtOCAuN2MtMzQuMSAyLjgtNjQuMiAxOC45LTg1LjQgNDIuOS0yMS4yLTI0LTUxLjItNDAtODUuNC00Mi45bC04LS43QzE3LTEuNCAxLjYgMTEuNyAuMSAyOS4zeiJdCiAgICB9OwogICAgZmFIZWFydENpcmNsZVBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhcnQtY2lyY2xlLXBsdXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUwMCIsICJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDE3LjYtMy40IDM1LjYtOS41IDUzLjctMjEuOC04LjYtNDUuNi0xMy40LTcwLjUtMTMuNC0xMDYgMC0xOTIgODYtMTkyIDE5MiAwIDI4LjUgNi4yIDU1LjYgMTcuNCA4MC0uNSAwLS45IDAtMS40IDAtMTUuNSAwLTMwLjgtNC42LTQzLjEtMTQuMS03My01NS43LTIxMi45LTE4Ni0yMTIuOS0yOTguMmwwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXpNNDMyIDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTE2IDgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNDgtNDggMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw0OCAwIDAgNDhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTQ4IDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTQ4IDAgMC00OHoiXQogICAgfTsKICAgIGZhU2hpZWxkRG9nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoaWVsZC1kb2ciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU3MyIsICJNMjY5LjQgMi45QzI2NS4yIDEgMjYwLjcgMCAyNTYgMHMtOS4yIDEtMTMuNCAyLjlMNTQuMyA4Mi44Yy0yMiA5LjMtMzguNCAzMS0zOC4zIDU3LjIgLjUgOTkuMiA0MS4zIDI4MC43IDIxMy42IDM2My4yIDE2LjcgOCAzNi4xIDggNTIuOCAwIDE3Mi40LTgyLjUgMjEzLjItMjY0IDIxMy42LTM2My4yIC4xLTI2LjItMTYuMy00Ny45LTM4LjMtNTcuMkwyNjkuNCAyLjl6TTE2MC45IDI4Ni4yYzQuOCAxLjIgOS45IDEuOCAxNS4xIDEuOCAzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY0IDQ0LjIgMGMxMi4xIDAgMjMuMiA2LjggMjguNiAxNy43bDcuMiAxNC4zIDY0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA0NC4yLTM1LjggODAtODAgODBsLTQ4IDAgMCA1MC43YzAgNy4zLTUuOSAxMy4zLTEzLjMgMTMuMy0xLjggMC0zLjYtLjQtNS4yLTEuMWwtOTguNy00Mi4zYy02LjYtMi44LTEwLjgtOS4zLTEwLjgtMTYuNCAwLTIuOCAuNi01LjUgMS45LThsMTUtMzB6TTE2MCAxNjBsNDggMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDhjMC04LjggNy4yLTE2IDE2LTE2em0xMjggNDhhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHoiXQogICAgfTsKICAgIGZhR3JlYXRlclRoYW5FcXVhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJncmVhdGVyLXRoYW4tZXF1YWwiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjUzMiIsICJNMjEuOSA5NC40QzUuMSA4OC44LTMuOSA3MC42IDEuNyA1My45UzI1LjQgMjguMSA0Mi4xIDMzLjZsMzg0IDEyOEM0MzkuMiAxNjYgNDQ4IDE3OC4yIDQ0OCAxOTJzLTguOCAyNi0yMS45IDMwLjRsLTM4NCAxMjhjLTE2LjggNS42LTM0LjktMy41LTQwLjUtMjAuMnMzLjUtMzQuOSAyMC4yLTQwLjVMMzE0LjggMTkyIDIxLjkgOTQuNHpNNDE2IDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDB6Il0KICAgIH07CiAgICBmYUVudmVsb3BlT3BlbjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZW52ZWxvcGUtb3BlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTM1XSwgImYyYjYiLCAiTTY0LjQgMTc1LjhMMjU2IDMzLjkgNDQ3LjYgMTc1LjggMjg5LjUgMjkzYy05LjcgNy4yLTIxLjQgMTEtMzMuNSAxMXMtMjMuOC0zLjktMzMuNS0xMUw2NC40IDE3NS44ek0yNTYtMzJjLTEyLjEgMC0yMy44IDMuOS0zMy41IDExTDI1LjkgMTI0LjdDOS42IDEzNi44IDAgMTU1LjggMCAxNzYuMUwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTIzOS45YzAtMjAuMy05LjYtMzkuNC0yNS45LTUxLjRMMjg5LjUtMjFjLTkuNy03LjItMjEuNC0xMS0zMy41LTExeiJdCiAgICB9OwogICAgZmFNb3VuZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb3VuZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTJkIiwgIk0xMTIuNCAxNzkuMkMxNDIgMTI3LjcgMTk2LjggOTYgMjU2LjIgOTZzMTE0LjIgMzEuNyAxNDMuOSA4My4yTDUwOC43IDM2OGMxMi4zIDIxLjMtMy4xIDQ4LTI3LjcgNDhMMzEuNSA0MTZjLTI0LjYgMC00MC0yNi42LTI3LjctNDhMMTEyLjQgMTc5LjJ6Il0KICAgIH07CiAgICBmYVZvaWNlbWFpbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2b2ljZW1haWwiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjg5NyIsICJNMTQ0IDE2MGE4MCA4MCAwIDEgMSAwIDE2MCA4MCA4MCAwIDEgMSAwLTE2MHpNMjYzLjggMzIwYzE1LjMtMjIuOSAyNC4yLTUwLjQgMjQuMi04MCAwLTc5LjUtNjQuNS0xNDQtMTQ0LTE0NFMwIDE2MC41IDAgMjQwIDY0LjUgMzg0IDE0NCAzODRsMzUyIDBjNzkuNSAwIDE0NC02NC41IDE0NC0xNDRTNTc1LjUgOTYgNDk2IDk2IDM1MiAxNjAuNSAzNTIgMjQwYzAgMjkuNiA4LjkgNTcuMSAyNC4yIDgwbC0xMTIuNSAwek00OTYgMTYwYTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYweiJdCiAgICB9OwogICAgZmFWZXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZlc3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA4NSIsICJNMjAwIDQ2NGwwLTE3MC4xYzAtMy45LS41LTcuOC0xLjQtMTEuNkwxNDQuNCA2NS40QzE2Mi4xIDc3LjIgMTg4LjIgODggMjI0IDg4czYxLjktMTAuOCA3OS42LTIyLjZMMjQ5LjQgMjgyLjNjLTEgMy44LTEuNCA3LjctMS40IDExLjZMMjQ4IDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMDQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE5My41YzAtOS41LTIuOC0xOC43LTguMS0yNi42bC00Ny45LTcxLjhjLTUuMy03LjktOC4xLTE3LjEtOC4xLTI2LjZMMzg0IDQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zLjUgMGMtLjMgMC0uNiAwLTEgMC0uNiAwLTEuMiAwLTEuOCAwLTE4LjggMC0zNC4xIDkuNy00NC4xIDE4LjgtOS4zIDguNC0yOC41IDIxLjItNjEuNyAyMS4ycy01Mi40LTEyLjgtNjEuNy0yMS4yYy0xMC05LjEtMjUuMy0xOC44LTQ0LjEtMTguOC0uNiAwLTEuMiAwLTEuOCAwLS4zIDAtLjYgMC0xIDBMMTEyIDBDODUuNSAwIDY0IDIxLjUgNjQgNDhsMCA5Ny41YzAgOS41LTIuOCAxOC43LTguMSAyNi42TDguMSAyNDMuOUMyLjggMjUxLjggMCAyNjEuMSAwIDI3MC41TDAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEwNCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4eiJdCiAgICB9OwogICAgZmFBdWRpb0Rlc2NyaXB0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImF1ZGlvLWRlc2NyaXB0aW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyOWUiLCAiTTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6bTk2IDk2bDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNCA0OCAwIDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEwNGMwLTM1LjMtMjguNy02NC02NC02NGwtMTYgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjR6bTQ4IDMybDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzItNDggMHptMTUyLTk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE0NGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzM5LjggMCA3Mi0zMi4yIDcyLTcybDAtNDhjMC0zOS44LTMyLjItNzItNzItNzJsLTQ4IDB6bTQ4IDE0NGwtMjQgMCAwLTk2IDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHoiXQogICAgfTsKICAgIGZhVyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTE5XSwgIjU3IiwgIk0yMC44IDM0YzE2LjUtNi4yIDM1IDIuMiA0MS4yIDE4LjdMMTcyLjIgMzQ2LjcgMjU3LjMgNTVjNC0xMy43IDE2LjUtMjMgMzAuNy0yM3MyNi43IDkuNCAzMC43IDIzTDQwMy44IDM0Ni43IDUxNCA1Mi44YzYuMi0xNi41IDI0LjYtMjQuOSA0MS4yLTE4LjdTNTgwLjIgNTguNyA1NzQgNzUuMmwtMTQ0IDM4NGMtNC44IDEyLjktMTcuNCAyMS4zLTMxLjIgMjAuN3MtMjUuNy05LjgtMjkuNS0yM0wyODggMTc4LjMgMjA2LjcgNDU3Yy0zLjkgMTMuMi0xNS44IDIyLjUtMjkuNSAyM3MtMjYuMy03LjgtMzEuMi0yMC43TDIgNzUuMkMtNC4yIDU4LjcgNC4yIDQwLjIgMjAuOCAzNHoiXQogICAgfTsKICAgIGZhRXllRHJvcHBlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJleWUtZHJvcHBlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJleWUtZHJvcHBlci1lbXB0eSIsICJleWVkcm9wcGVyIl0sICJmMWZiIiwgIk0zNDEuNiAyOS4ybC0xMDEuNiAxMDEuNi05LjQtOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTkuNC05LjQgMTAxLjYtMTAxLjZjMzktMzkgMzktMTAyLjIgMC0xNDEuMXMtMTAyLjItMzktMTQxLjEgMHpNNTUuNCAzMjMuM2MtMTUgMTUtMjMuNCAzNS40LTIzLjQgNTYuNmwwIDQyLjQtMjYuNiAzOS45Yy04LjUgMTIuNy02LjggMjkuNiA0IDQwLjRzMjcuNyAxMi41IDQwLjQgNGwzOS45LTI2LjYgNDIuNCAwYzIxLjIgMCA0MS42LTguNCA1Ni42LTIzLjRsMTA5LjQtMTA5LjQtNDUuMy00NS4zLTEwOS40IDEwOS40Yy0zIDMtNy4xIDQuNy0xMS4zIDQuN2wtMzYuMSAwIDAtMzYuMWMwLTQuMiAxLjctOC4zIDQuNy0xMS4zbDEwOS40LTEwOS40LTQ1LjMtNDUuMy0xMDkuNCAxMDkuNHoiXQogICAgfTsKICAgIGZhRXllRHJvcHBlckVtcHR5ID0gZmFFeWVEcm9wcGVyOwogICAgZmFFeWVkcm9wcGVyID0gZmFFeWVEcm9wcGVyOwogICAgZmFDaXJjbGVYbWFyazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE1MzIsICJ0aW1lcy1jaXJjbGUiLCAieG1hcmstY2lyY2xlIl0sICJmMDU3IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTY3IDE2N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw1NSA1NSA1NS01NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTU1IDU1IDU1IDU1YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTU1LTU1LTU1IDU1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU1LTU1LTU1LTU1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXoiXQogICAgfTsKICAgIGZhVGltZXNDaXJjbGUyID0gZmFDaXJjbGVYbWFyazI7CiAgICBmYVhtYXJrQ2lyY2xlMiA9IGZhQ2lyY2xlWG1hcmsyOwogICAgZmFUcmFpbGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyYWlsZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTA0MSIsICJNMzIgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTYgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjk2LjQgMGMuMiAyLjYgLjQgNS4zIC40IDggMCA0OC42LTM5LjQgODgtODggODhzLTg4LTM5LjQtODgtODhjMC0yLjcgLjEtNS40IC40LThMOTYgNDE2Yy0zNS4zIDAtNjQtMjguNy02NC02NEwzMiA5NnptNDA4IDE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE2MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYwYzAtMTMuMy0xMC43LTI0LTI0LTI0ek0xMTIgMTM2bDAgMTYwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6bTE3Ni0yNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNjBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMjY0IDQyNGE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAweiJdCiAgICB9OwogICAgZmFUdXJraXNoTGlyYVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHVya2lzaC1saXJhLXNpZ24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidHJ5IiwgInR1cmtpc2gtbGlyYSJdLCAiZTJiYiIsICJNMTYwIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDMuNiAxMjEuNC0zNC43YzEyLjctMy42IDI2IDMuNyAyOS43IDE2LjVzLTMuNyAyNi0xNi41IDI5LjdsLTEzNC42IDM4LjUgMCA0Ni4xIDEyMS40LTM0LjdjMTIuNy0zLjYgMjYgMy43IDI5LjcgMTYuNXMtMy43IDI2LTE2LjUgMjkuN2wtMTM0LjYgMzguNSAwIDE2Mi41IDcyIDBjNTMgMCA5Ni00MyA5Ni05NiAwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyYzAgODguNC03MS42IDE2MC0xNjAgMTYwbC0xMDQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNzYuMi0yNS40IDcuM2MtMTIuNyAzLjYtMjYtMy43LTI5LjctMTYuNXMzLjctMjYgMTYuNS0yOS43bDM4LjYtMTEgMC00Ni4xLTI1LjQgNy4zYy0xMi43IDMuNi0yNi0zLjctMjkuNy0xNi41czMuNy0yNiAxNi41LTI5LjdsMzguNi0xMSAwLTYxLjljMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVRyeSA9IGZhVHVya2lzaExpcmFTaWduOwogICAgZmFUdXJraXNoTGlyYSA9IGZhVHVya2lzaExpcmFTaWduOwogICAgZmFWb2xjYW5vID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZvbGNhbm8iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3NTVdLCAiZjc3MCIsICJNMTYwIDE0NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGMxNS43IDAgMzAgNS42IDQxLjIgMTUgMTEuMi0xOC42IDMxLjYtMzEgNTQuOC0zMXM0My42IDEyLjQgNTQuOCAzMWMxMS4xLTkuNCAyNS41LTE1IDQxLjItMTUgMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRjLTE0LjcgMC0yOC4zLTUtMzkuMS0xMy4zbC0zMiA0OEMyNzUuMyAxODcgMjY2IDE5MiAyNTYgMTkycy0xOS4zLTUtMjQuOS0xMy4zbC0zMi00OEMxODguMyAxMzkgMTc0LjcgMTQ0IDE2MCAxNDR6TTE0NCAzNTJsNDguNC0yNC4yYzEwLjItNS4xIDIxLjYtNy44IDMzLTcuOCAxOS42IDAgMzguNCA3LjggNTIuMiAyMS42bDMyLjUgMzIuNWM2LjMgNi4zIDE0LjkgOS45IDIzLjggOS45IDExLjMgMCAyMS44LTUuNiAyOC0xNWw5LjctMTQuNi01OS02Ni4zYy05LjEtMTAuMi0yMi4yLTE2LjEtMzUuOS0xNi4xbC00MS44IDBjLTEzLjcgMC0yNi44IDUuOS0zNS45IDE2LjFsLTU5LjkgNjcuNCA0LjctMy41em0xOS40LTk1LjhjMTguMi0yMC41IDQ0LjMtMzIuMiA3MS44LTMyLjJsNDEuOCAwYzI3LjQgMCA1My41IDExLjcgNzEuOCAzMi4ybDE1MC4yIDE2OWM4LjUgOS41IDEzLjIgMjEuOSAxMy4yIDM0LjcgMCAyOC44LTIzLjQgNTIuMi01Mi4yIDUyLjJMNTIuMiA1MTJDMjMuNCA1MTIgMCA0ODguNiAwIDQ1OS44IDAgNDQ3LjEgNC43IDQzNC43IDEzLjIgNDI1LjJsMTUwLjItMTY5eiJdCiAgICB9OwogICAgZmFXYW5kU3BhcmtsZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2FuZC1zcGFya2xlcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzJiIiwgIk00NjQgNi4xYzkuNS04LjUgMjQtOC4xIDMzIC45bDggOGM5IDkgOS40IDIzLjUgLjkgMzNsLTg1LjggOTUuOWMtMi42IDIuOS00LjEgNi43LTQuMSAxMC43bDAgMjEuNGMwIDguOC03LjIgMTYtMTYgMTZsLTE1LjggMGMtNC42IDAtOC45IDEuOS0xMS45IDUuM0wxMDAuNyA1MDAuOWMtNi4zIDcuMS0xNS4zIDExLjEtMjQuOCAxMS4xLTguOCAwLTE3LjMtMy41LTIzLjUtOS44TDkuNyA0NTkuN2MtNi4yLTYuMi05LjctMTQuNy05LjctMjMuNSAwLTkuNSA0LTE4LjUgMTEuMS0yNC44bDExMS42LTk5LjhjMy40LTMgNS4zLTcuNCA1LjMtMTEuOWwwLTI3LjZjMC04LjggNy4yLTE2IDE2LTE2bDM0LjYgMGMzLjkgMCA3LjctMS41IDEwLjctNC4xTDQ2NCA2LjF6TTQzMiAyODhjMy42IDAgNi43IDIuNCA3LjcgNS44bDE0LjggNTEuNyA1MS43IDE0LjhjMy40IDEgNS44IDQuMSA1LjggNy43cy0yLjQgNi43LTUuOCA3LjdsLTUxLjcgMTQuOC0xNC44IDUxLjdjLTEgMy40LTQuMSA1LjgtNy43IDUuOHMtNi43LTIuNC03LjctNS44bC0xNC44LTUxLjctNTEuNy0xNC44Yy0zLjQtMS01LjgtNC4xLTUuOC03LjdzMi40LTYuNyA1LjgtNy43bDUxLjctMTQuOCAxNC44LTUxLjdjMS0zLjQgNC4xLTUuOCA3LjctNS44ek04Ny43IDY5LjhsMTQuOCA1MS43IDUxLjcgMTQuOGMzLjQgMSA1LjggNC4xIDUuOCA3LjdzLTIuNCA2LjctNS44IDcuN2wtNTEuNyAxNC44LTE0LjggNTEuN2MtMSAzLjQtNC4xIDUuOC03LjcgNS44cy02LjctMi40LTcuNy01LjhMNTcuNSAxNjYuNSA1LjggMTUxLjdjLTMuNC0xLTUuOC00LjEtNS44LTcuN3MyLjQtNi43IDUuOC03LjdsNTEuNy0xNC44IDE0LjgtNTEuN2MxLTMuNCA0LjEtNS44IDcuNy01LjhzNi43IDIuNCA3LjcgNS44ek0yMDggMGMzLjcgMCA2LjkgMi41IDcuOCA2LjFsNi44IDI3LjMgMjcuMyA2LjhjMy42IC45IDYuMSA0LjEgNi4xIDcuOHMtMi41IDYuOS02LjEgNy44bC0yNy4zIDYuOC02LjggMjcuM2MtLjkgMy42LTQuMSA2LjEtNy44IDYuMXMtNi45LTIuNS03LjgtNi4xbC02LjgtMjcuMy0yNy4zLTYuOGMtMy42LS45LTYuMS00LjEtNi4xLTcuOHMyLjUtNi45IDYuMS03LjhsMjcuMy02LjggNi44LTI3LjNjLjktMy42IDQuMS02LjEgNy44LTYuMXoiXQogICAgfTsKICAgIGZhTWljcm9waG9uZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtaWNyb3Bob25lIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxMzAiLCAiTTE5MiAwQzEzOSAwIDk2IDQzIDk2IDk2bDAgMTI4YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0xMjhjMC01My00My05Ni05Ni05NnpNNDggMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMTcwLjcgMCAxODRsMCA0MGMwIDk3LjkgNzMuMyAxNzguNyAxNjggMTkwLjVsMCA0OS41LTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMC00OS41Yzk0LjctMTEuOCAxNjgtOTIuNiAxNjgtMTkwLjVsMC00MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwYzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0UzQ4IDMwMy41IDQ4IDIyNGwwLTQweiJdCiAgICB9OwogICAgZmFDcm93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjcm93biIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODA4MV0sICJmNTIxIiwgIk0zMTMgODcuMmM5LjItNy4zIDE1LTE4LjYgMTUtMzEuMiAwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDEyLjYgNS45IDIzLjkgMTUgMzEuMkwxOTQuNiAxOTQuOGMtMTAgMTUuNy0zMS4zIDE5LjYtNDYuMiA4LjRMODguOSAxNTguN2M0LjUtNi40IDcuMS0xNC4zIDcuMS0yMi43IDAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwYzAgMjEuOCAxNy41IDM5LjYgMzkuMiA0MEw4Ny44IDM5My41YzQuNyAzMS4zIDMxLjYgNTQuNSA2My4zIDU0LjVsMjczLjggMGMzMS43IDAgNTguNi0yMy4yIDYzLjMtNTQuNUw1MjAuOCAxNzZjMjEuNy0uNCAzOS4yLTE4LjIgMzkuMi00MCAwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDguNCAyLjYgMTYuMyA3LjEgMjIuN2wtNTkuNCA0NC42Yy0xNC45IDExLjItMzYuMiA3LjMtNDYuMi04LjRMMzEzIDg3LjJ6Il0KICAgIH07CiAgICBmYVRlbnRBcnJvd1R1cm5MZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbnQtYXJyb3ctdHVybi1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1ODAiLCAiTS0uNSAxMTNsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0zMS0zMSAzNTAuMSAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI0YzAtNDguNi0zOS40LTg4LTg4LTg4bC0zNTAuMSAwIDMxLTMxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45UzgwLjktMi4zIDcxLjUgN0wtLjUgNzljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45ek02MC4zIDI5Mi42TDM3LjEgNDc2Yy0yLjQgMTkuMSAxMi41IDM2IDMxLjcgMzZsMTU0LjUgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTExNy40YzAtNS45IDQuNy0xMC42IDEwLjYtMTAuNiA0IDAgNy43IDIuMyA5LjUgNS45bDY4LjIgMTM2LjVjNS40IDEwLjggMTYuNSAxNy43IDI4LjYgMTcuN2w3MS45IDBjMTkuMyAwIDM0LjItMTYuOSAzMS43LTM2TDQ1Mi43IDI5Mi43Yy0xLjItOS43LTYuOS0xOC40LTE1LjMtMjMuNEwyNzEuOSAxNjkuOWMtMTAuMi02LjEtMjIuOS02LjEtMzMuMSAuMUw3NS40IDI2OS4zYy04LjMgNS4xLTEzLjkgMTMuNy0xNS4xIDIzLjN6Il0KICAgIH07CiAgICBmYVRydWNrRmFzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1mYXN0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbInNoaXBwaW5nLWZhc3QiXSwgImY0OGIiLCAiTTY0IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIgNTAuNyAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDYyMS4zIDE5MmMxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDY0MCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTMuMyAwYy0xMC40IDM2LjktNDQuNCA2NC04NC43IDY0cy03NC4yLTI3LjEtODQuNy02NGwtMTAyLjYgMGMtMTAuNCAzNi45LTQ0LjQgNjQtODQuNyA2NHMtNzQuMi0yNy4xLTg0LjctNjRsLTMuMyAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTQ4LTQwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMjQgMjQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDI0IDE0NGMtMTMuMyAwLTI0LTEwLjctMjQtMjRTMTAuNyA5NiAyNCA5Nmw0MCAwek01NzYgMjg4bDAtNTAuNy00NS4zLTQ1LjMtNTAuNyAwIDAgOTYgOTYgMHpNMjU2IDQyNGE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAwem0yMzIgNDBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdCiAgICB9OwogICAgZmFTaGlwcGluZ0Zhc3QgPSBmYVRydWNrRmFzdDsKICAgIGZhVXNlclBlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLXBlbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJ1c2VyLWVkaXQiXSwgImY0ZmYiLCAiTTI1Ni4xIDI0OGExMjAgMTIwIDAgMSAwIDAtMjQwIDEyMCAxMjAgMCAxIDAgMCAyNDB6bS0yOS43IDU2Yy05OC41IDAtMTc4LjMgNzkuOC0xNzguMyAxNzguMyAwIDE2LjQgMTMuMyAyOS43IDI5LjcgMjkuN2wxOTYuNSAwIDEwLjktNTQuNWM0LjMtMjEuNyAxNS00MS42IDMwLjYtNTcuMmw2Ny4zLTY3LjNjLTI4LTE4LjMtNjEuNC0yOC45LTk3LjQtMjguOWwtNTkuNCAwek0zMzIuMyA0NjYuOWwtMTEuOSA1OS42Yy0uMiAuOS0uMyAxLjktLjMgMi45IDAgOCA2LjUgMTQuNiAxNC42IDE0LjYgMSAwIDEuOS0uMSAyLjktLjNsNTkuNi0xMS45YzEyLjQtMi41IDIzLjgtOC42IDMyLjctMTcuNWwxMTguOS0xMTguOS04MC04MC0xMTguOSAxMTguOWMtOC45IDguOS0xNSAyMC4zLTE3LjUgMzIuN3ptMjY3LjgtMTIzYzIyLjEtMjIuMSAyMi4xLTU3LjkgMC04MHMtNTcuOS0yMi4xLTgwIDBsLTI4LjggMjguOCA4MCA4MCAyOC44LTI4Ljh6Il0KICAgIH07CiAgICBmYVVzZXJFZGl0ID0gZmFVc2VyUGVuOwogICAgZmFVc2VyQ2xvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1jbG9jayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGZkIiwgIk0yMjQgOGExMjAgMTIwIDAgMSAxIDAgMjQwIDEyMCAxMjAgMCAxIDEgMC0yNDB6TTE5NC4zIDMwNGw1OS40IDBjMy45IDAgNy45IC4xIDExLjggLjQtMTYuMiAyOC4yLTI1LjUgNjAuOC0yNS41IDk1LjYgMCA0MS44IDEzLjQgODAuNSAzNiAxMTJMNDUuNyA1MTJDMjkuMyA1MTIgMTYgNDk4LjcgMTYgNDgyLjMgMTYgMzgzLjggOTUuOCAzMDQgMTk0LjMgMzA0ek0yODggNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE0NC04MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2bDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTMyIDAgMC00OGMwLTguOC03LjItMTYtMTYtMTZ6Il0KICAgIH07CiAgICBmYVNob3dlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaG93ZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg3MDNdLCAiZjJjYyIsICJNNjQgMTMxLjljMC0xOS44IDE2LjEtMzUuOSAzNS45LTM1LjkgOS41IDAgMTguNiAzLjggMjUuNCAxMC41bDE2LjIgMTYuMmMtMjEgMzguOS0xNy40IDg3LjUgMTAuOSAxMjNMMTUxIDI0N2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwTDM0NSAxMjFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMS4zIDEuM2MtMzUuNS0yOC4zLTg0LjEtMzEuOS0xMjMtMTAuOUwxNzAuNSA2MS4zQzE1MS44IDQyLjUgMTI2LjQgMzIgOTkuOSAzMiA0NC43IDMyIDAgNzYuNyAwIDEzMS45TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMTYuMXpNMjU2IDM1MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTY0IDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTAtMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptNjQgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMC0xMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em02NCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0zMi0zMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYVNxdWFyZUNhcmV0VXAyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1jYXJldC11cCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYXJldC1zcXVhcmUtdXAiXSwgImYxNTEiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIyNCAxNjBjNi43IDAgMTMgMi44IDE3LjYgNy43bDEwNCAxMTJjNi41IDcgOC4yIDE3LjIgNC40IDI1LjlTMzM3LjUgMzIwIDMyOCAzMjBsLTIwOCAwYy05LjUgMC0xOC4yLTUuNy0yMi0xNC40cy0yLjEtMTguOSA0LjQtMjUuOWwxMDQtMTEyYzQuNS00LjkgMTAuOS03LjcgMTcuNi03Ljd6Il0KICAgIH07CiAgICBmYUNhcmV0U3F1YXJlVXAyID0gZmFTcXVhcmVDYXJldFVwMjsKICAgIGZhTWFwTG9jYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFwLWxvY2F0aW9uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbIm1hcC1tYXJrZWQiXSwgImY1OWYiLCAiTTU3NiA0OGMwLTExLjEtNS43LTIxLjQtMTUuMi0yNy4ycy0yMS4yLTYuNC0zMS4xLTEuNEw0MTMuNSA3Ny41IDIzNC4xIDE3LjZjLTguMS0yLjctMTYuOC0yLjEtMjQuNCAxLjdsLTEyOCA2NEM3MC44IDg4LjggNjQgOTkuOSA2NCAxMTJsMCAzNTJjMCAxMS4xIDUuNyAyMS40IDE1LjIgMjcuMnMyMS4yIDYuNCAzMS4xIDEuNGwxMTYuMS01OC4xIDE3My4zIDU3LjhjLTQuMy02LjQtOC41LTEzLjEtMTIuNi0xOS45LTExLTE4LjMtMjEuOS0zOS4zLTMwLTYxLjhsLTEwMS4yLTMzLjcgMC0yODQuNSAxMjggNDIuNyAwIDk5LjNjMzEtMzUuOCA3Ny01OC40IDEyOC01OC40IDIyLjYgMCA0NC4yIDQuNCA2NCAxMi41TDU3NiA0OHpNMzkyIDM0MS45YzAgNjguOSA2NC4xIDE1MC40IDk4LjYgMTg5LjMgMTEuNiAxMyAzMS4zIDEzIDQyLjkgMCAzNC41LTM4LjkgOTguNi0xMjAuNCA5OC42LTE4OS4zIDAtNjUuMS01My43LTExNy45LTEyMC0xMTcuOVMzOTIgMjc2LjggMzkyIDM0MS45eiJdCiAgICB9OwogICAgZmFNYXBNYXJrZWQgPSBmYU1hcExvY2F0aW9uOwogICAgZmFQZW5GYW5jeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW4tZmFuY3kiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzOTUsIDEwMDAyXSwgImY1YWMiLCAiTTM3My41IDI3LjFjMTUtMTcuMiAzNi43LTI3LjEgNTkuNi0yNy4xIDQzLjYgMCA3OSAzNS40IDc5IDc5IDAgMjIuOC05LjkgNDQuNi0yNy4xIDU5LjZMMjgzLjcgMzEzLjggMjczIDMwMyAyMDkgMjM5IDE5OC4yIDIyOC4zIDM3My41IDI3LjF6TTE2MS4xIDI1OUMxNjIgMjYwIDE4OCAyODYgMjM5IDMzN2wxMy45IDEzLjktMTcuMSA3NC4yYy0zLjkgMTcuMS0xNi45IDMwLjctMzMuOCAzNS40bC0xNjkuOCA0Ny41IDkyLjMtOTIuM2MxLjIgLjEgMi4zIC4yIDMuNSAuMiAxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyYzAgMS4yIC4xIDIuNCAuMiAzLjVMMy45IDQ3OS44IDUxLjUgMzEwYzQuNy0xNi45IDE4LjMtMjkuOSAzNS40LTMzLjhMMTYxLjEgMjU5eiJdCiAgICB9OwogICAgZmFFdXJvU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJldXJvLXNpZ24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs4MzY0LCAiZXVyIiwgImV1cm8iXSwgImYxNTMiLCAiTTczLjMgMTkyQzEwMC44IDk5LjUgMTg2LjUgMzIgMjg4IDMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDBjLTY1LjYgMC0xMjIgMzkuNS0xNDYuNyA5NkwyNzIgMTkyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDMuMiAwYy0uNSA1LjMtLjggMTAuNi0uOCAxNnMuMyAxMC43IC44IDE2TDI3MiAyNzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTEzMC43IDBjMjQuNyA1Ni41IDgxLjEgOTYgMTQ2LjcgOTZsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTAxLjUgMC0xODcuMi02Ny41LTIxNC43LTE2MEw0MCAzMjBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQuNiAwYy0uNy0xMC41LS43LTIxLjUgMC0zMkw0MCAyNDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMzMuMyAweiJdCiAgICB9OwogICAgZmFFdXIgPSBmYUV1cm9TaWduOwogICAgZmFFdXJvID0gZmFFdXJvU2lnbjsKICAgIGZhSG91c2VDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUwYiIsICJNNDk2IDU0NGExNDQgMTQ0IDAgMSAxIDAtMjg4IDE0NCAxNDQgMCAxIDEgMCAyODh6TTI2OC42IDYuNWMxMi4yLTkuMyAyOS43LTguNyA0MS4yIDJsMjE3LjYgMjAyYy0xMC4yLTEuNy0yMC43LTIuNi0zMS4zLTIuNi03OC42IDAtMTQ2LjIgNDcuMi0xNzUuOSAxMTQuOC01LTEuOC0xMC41LTIuOC0xNi4xLTIuOGwtMzIgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NiA5MC45IDBjNi4xIDE3LjMgMTQuNiAzMy40IDI1LjIgNDhMMTQ0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4IDIuNC0yek01NTUuMyAzNDAuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBsLTM2LjcgMzYuNy0zNi43LTM2LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsMzYuNyAzNi43LTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDM2LjctMzYuNyAzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC0zNi43LTM2LjcgMzYuNy0zNi43YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42eiJdCiAgICB9OwogICAgZmFMaXJhU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaXJhLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4MzU2XSwgImYxOTUiLCAiTTg0LjkgMjU2bC0yOC40IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTEuNiAwQzUzLjIgMTI0LjcgMTE2LjggNDIgMjA3LjYgNDJsOC4yIDBjMzMuNiAwIDY2LjIgMTEuMyA5Mi41IDMyLjJsMTYuMSAxMi43YzEzLjkgMTEgMTYuMiAzMS4xIDUuMiA0NXMtMzEuMSAxNi4yLTQ1IDUuMmwtMTYuMS0xMi43Yy0xNS0xMS45LTMzLjYtMTguNC01Mi44LTE4LjRsLTguMiAwYy01My44IDAtOTAuMSA1Mi45LTczLjUgMTAybDE2Mi40IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NS4xIDBjMi4zIDEwLjYgMy42IDIxLjMgMy45IDMybDE0MS4yIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMTUwIDMzNmMtNC44IDE4LjYtMTIuNiAzNi41LTIzLjYgNTIuOWwtMTguMSAyNy4xIDIxMi4yIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI3MiAwYy0xMS44IDAtMjIuNi02LjUtMjguMi0xNi45cy01LTIzIDEuNi0zMi45bDUxLjItNzYuOGMzLjctNS42IDYuOS0xMS40IDkuNC0xNy40bC0yNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDM0LjggMGMtLjUtMTAuOC0yLjYtMjEuNi02LjQtMzJ6Il0KICAgIH07CiAgICBmYVllblNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAieWVuLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxNjUsICJjbnkiLCAianB5IiwgInJtYiIsICJ5ZW4iXSwgImYxNTciLCAiTTc0LjkgNDYuN2MtOS42LTE0LjktMjkuNC0xOS4yLTQ0LjItOS42UzExLjUgNjYuNCAyMS4xIDgxLjNMMTQzLjcgMjcyIDg4IDI3MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwIDAgMzItNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwIDAgNDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTQ4IDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTcyIDAgMC0zMiA3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC01NS43IDAgMTIyLjYtMTkwLjdjOS42LTE0LjkgNS4zLTM0LjctOS42LTQ0LjJzLTM0LjctNS4zLTQ0LjIgOS42TDE5MiAyMjguOCA3NC45IDQ2Ljd6Il0KICAgIH07CiAgICBmYUNueSA9IGZhWWVuU2lnbjsKICAgIGZhSnB5ID0gZmFZZW5TaWduOwogICAgZmFSbWIgPSBmYVllblNpZ247CiAgICBmYVllbiA9IGZhWWVuU2lnbjsKICAgIGZhQm94T3BlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3gtb3BlbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDllIiwgIk01NjAuMyAyMzcuMmMxMC40IDExLjggMjguMyAxNC40IDQxLjggNS41IDE0LjctOS44IDE4LjctMjkuNyA4LjktNDQuNGwtNDgtNzJjLTIuOC00LjItNi42LTcuNy0xMS4xLTEwLjJMMzUxLjQgNC43Yy0xOS4zLTEwLjctNDIuOC0xMC43LTYyLjIgMEw4OC44IDExNmMtNS40IDMtOS43IDcuNC0xMi42IDEyLjhMMjcuNyAyMTguN2MtMTIuNiAyMy40LTMuOCA1Mi41IDE5LjYgNjUuMWwzMyAxNy43IDAgNTMuM2MwIDIzIDEyLjQgNDQuMyAzMi40IDU1LjdsMTc2IDk5LjdjMTkuNiAxMS4xIDQzLjUgMTEuMSA2My4xIDBsMTc2LTk5LjdjMjAuMS0xMS40IDMyLjQtMzIuNiAzMi40LTU1LjdsMC0xMTcuNXptLTI0MC05LjhMMTcwLjIgMTQ0IDMyMC4zIDYwLjYgNDcwLjQgMTQ0IDMyMC4zIDIyNy40em0tNDEuNSA1MC4ybC0yMS4zIDQ2LjItMTY1LjgtODguOCAyNS40LTQ3LjIgMTYxLjcgODkuOHoiXQogICAgfTsKICAgIGZhVHJ1Y2tGaWVsZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1maWVsZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNThkIiwgIk0zMiA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwyMjQgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJsNDAuNCAwYzMyLjQgMCA2MS42IDE5LjYgNzQgNDkuNWw0My44IDEwNi4zIDEuNyA0LjIgMjQuNyAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLS40IDBjLjIgMi42IC40IDUuMyAuNCA4IDAgNDguNi0zOS40IDg4LTg4IDg4cy04OC0zOS40LTg4LTg4YzAtMi43IC4xLTUuNCAuNC04bC0xNDQuNyAwYy4yIDIuNiAuNCA1LjMgLjQgOCAwIDQ4LjYtMzkuNCA4OC04OCA4OHMtODgtMzkuNC04OC04OGMwLTMuNiAuMi03LjEgLjYtMTAuNS0xOS02LjQtMzIuNi0yNC40LTMyLjYtNDUuNWwwLTQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDAtMzJ6bTM1MiAzMmwwIDk2IDgyLjEgMC0zNS40LTg2LjFjLTIuNS02LTguMy05LjktMTQuOC05LjlMMzg0IDEyOHpNMTkyIDM5MmE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAwem0yODAgNDBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdCiAgICB9OwogICAgZmFMb2NhdGlvblBpbkxvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibG9jYXRpb24tcGluLWxvY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUxZiIsICJNMCAxODguNkMwIDg0LjQgODYgMCAxOTIgMCAyOTQuMSAwIDM3Ny42IDc4LjMgMzgzLjYgMTc3IDMyMC43IDE4NS4xIDI3MiAyMzguOCAyNzIgMzA0bDAgMjQuNGMtMTkuNiAxNy42LTMyIDQzLjEtMzIgNzEuNWwwIDc1LjdjLTkuOSAxMS42LTE4LjkgMjEuNy0yNi40IDI5LjgtMTEuOCAxMi44LTMxLjUgMTIuOC00My4zIDAtNTAuMi01NC41LTE3MC40LTE5Ny41LTE3MC40LTMxNi44ek0xOTIgMjU2YTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4em0yNDAgNDguMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTI4OCA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il0KICAgIH07CiAgICBmYVBlcnNvblByYXlpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXByYXlpbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjg3MjAsICJwcmF5Il0sICJmNjgzIiwgIk0zMjAgNjRhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAwek0yMDAuNyAyNjRsMjIuOSAzMS41YzYuNSA4LjkgMTYuMyAxNC43IDI3LjIgMTYuMXMyMS45LTEuNyAzMC40LTguN2w4OC03MmMxNy4xLTE0IDE5LjYtMzkuMiA1LjYtNTYuM3MtMzkuMi0xOS42LTU2LjMtNS42bC01NS4yIDQ1LjItMjYuMi0zNmMtMTUuNi0yMS41LTQwLjYtMzQuMi02Ny4yLTM0LjItMzAuOSAwLTU5LjIgMTcuMS03My42IDQ0LjRMNDcuOCAyODAuOWMtMjAuMiAzOC41LTkuNCA4NS45IDI1LjYgMTExLjhMMTI2LjYgNDMyIDQwIDQzMmMtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGwyMDggMGMxNy4zIDAgMzIuNi0xMS4xIDM4LTI3LjVzLS4zLTM0LjQtMTQuMi00NC43bC0xMTYuMS04NS44IDQ1LTkweiJdCiAgICB9OwogICAgZmFQcmF5ID0gZmFQZXJzb25QcmF5aW5nOwogICAgZmFDbGlwYm9hcmRMaXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsaXBib2FyZC1saXN0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY0NmQiLCAiTTMxMS40IDMybDguNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzUyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmw4LjYgMEM4My42IDEyLjkgMTA0LjMgMCAxMjggMEwyNTYgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJ6TTI0OCAxMTJjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMTM2IDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDExMiAwek0xMjggMjU2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTMyIDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMCAxMjhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNOTYgNDE2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhU2Fja0RvbGxhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzYWNrLWRvbGxhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE3Nl0sICJmODFkIiwgIk0zMjggMTEybC0xNDQgMC0zNy4zLTc0LjVjLTEuOC0zLjYtMi43LTcuNi0yLjctMTEuNiAwLTE0LjMgMTEuNi0yNS45IDI1LjktMjUuOUwzNDIuMSAwYzE0LjMgMCAyNS45IDExLjYgMjUuOSAyNS45IDAgNC0uOSA4LTIuNyAxMS42TDMyOCAxMTJ6TTE2OS42IDE2MGwxNzIuOCAwIDQ4LjcgNDAuNkM0NTcuNiAyNTYgNDk2IDMzOCA0OTYgNDI0LjUgNDk2IDQ3Mi44IDQ1Ni44IDUxMiA0MDguNSA1MTJsLTMwNS4xIDBDNTUuMiA1MTIgMTYgNDcyLjggMTYgNDI0LjUgMTYgMzM4IDU0LjQgMjU2IDEyMC45IDIwMC42TDE2OS42IDE2MHpNMjYwIDIyNGMtMTEgMC0yMCA5LTIwIDIwbDAgNGMtMjguOCAuMy01MiAyMy43LTUyIDUyLjUgMCAyNS43IDE4LjUgNDcuNiA0My45IDUxLjhsNDEuNyA3YzYgMSAxMC40IDYuMiAxMC40IDEyLjMgMCA2LjktNS42IDEyLjUtMTIuNSAxMi41TDIxNiAzODRjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDI0IDAgMCA0YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNC43YzI1LTQuMSA0NC0yNS43IDQ0LTUxLjggMC0yNS43LTE4LjUtNDcuNi00My45LTUxLjhsLTQxLjctN2MtNi0xLTEwLjQtNi4yLTEwLjQtMTIuMyAwLTYuOSA1LjYtMTIuNSAxMi41LTEyLjVsNDcuNSAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtOCAwIDAtNGMwLTExLTktMjAtMjAtMjB6Il0KICAgIH07CiAgICBmYU1vdW50YWluU3VuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vdW50YWluLXN1biIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTJmIiwgIk0yNTYuNSAwYzE0LjcgMCAyOC4yIDguMSAzNS4yIDIxbDIxNiA0MDBjNi43IDEyLjQgNi40IDI3LjQtLjggMzkuNS03LjIgMTIuMS0yMC4zIDE5LjUtMzQuMyAxOS41bC00MzIgMGMtMTQuMSAwLTI3LjEtNy40LTM0LjMtMTkuNXMtNy41LTI3LjEtLjgtMzkuNWwyMTYtNDAwIDIuOS00LjZDMjMxLjcgNi4yIDI0My42IDAgMjU2LjUgMHpNMTcwLjQgMjQ5LjlsMjYuOCAyNi44YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwbDQzLjMtNDMuM2M2LTYgMTQuMS05LjQgMjIuNi05LjRsNDIuOCAwLTcyLjEtMTMzLjUtODYuMSAxNTkuNHpNNDk2LjUgMTYwYTgwIDgwIDAgMSAxIDAtMTYwIDgwIDgwIDAgMSAxIDAgMTYweiJdCiAgICB9OwogICAgZmFBcnJvd1VwV2lkZVNob3J0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLXdpZGUtc2hvcnQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsic29ydC1hbW91bnQtdXAiXSwgImYxNjEiLCAiTTE1MC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw5NiAxNDEuMyA5NiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMwNi43IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NnpNMzIwIDQ4MGwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0wLTEyOGw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0wLTEyOGwxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTAtMTI4bDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnoiXQogICAgfTsKICAgIGZhU29ydEFtb3VudFVwID0gZmFBcnJvd1VwV2lkZVNob3J0OwogICAgZmFVc2Vyc0xpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlcnMtbGluZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTkyIiwgIk0yMjQgMTI4YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNMTc2IDMzNmMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMnMxMTIgNTAuMSAxMTIgMTEybDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtOHpNMzkyIDE0NGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bTI3LjIgMTAwLjRjOS4xLTIuOSAxOC44LTQuNCAyOC44LTQuNCA1MyAwIDk2IDQzIDk2IDk2bDAgMTAuN2MwIDExLjgtOS42IDIxLjMtMjEuMyAyMS4zbC03OC44IDBjMi43LTcuNSA0LjEtMTUuNiA0LjEtMjRsMC04YzAtMzQuMS0xMC42LTY1LjctMjguOC05MS42em0tMjYyLjQgMGMtMTguMiAyNi0yOC44IDU3LjUtMjguOCA5MS42bDAgOGMwIDguNCAxLjQgMTYuNSA0LjEgMjRsLTc4LjggMEM0MS42IDM2OCAzMiAzNTguNCAzMiAzNDYuN0wzMiAzMzZjMC01MyA0My05NiA5Ni05NiAxMCAwIDE5LjcgMS41IDI4LjggNC40ek03MiAxNDRhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0wIDQ0MGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw1MjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA0NjRjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFTdGFyT2ZEYXZpZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFyLW9mLWRhdmlkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTAwMTddLCAiZjY5YSIsICJNNDE1LjkgMzExLjlsLTI3LjggNDguMSA1NS43IDAtMjcuOC00OC4xek0zODMuNiAyNTZsLTYwLjItMTA0LTEzNC44IDAtNjAuMiAxMDQgNjAuMiAxMDQgMTM0LjggMCA2MC4yLTEwNHptNjQuNyAwbDU4LjQgMTAwLjljMy41IDYgNS4zIDEyLjggNS4zIDE5LjcgMCAyMS43LTE3LjYgMzkuNC0zOS40IDM5LjRsLTExNyAwLTYxLjMgMTA1LjhDMjg2LjUgNTM1LjYgMjcxLjggNTQ0IDI1NiA1NDRzLTMwLjUtOC40LTM4LjQtMjIuMmwtNjEuMy0xMDUuOC0xMTcgMGMtMjEuNyAwLTM5LjQtMTcuNi0zOS40LTM5LjQgMC02LjkgMS44LTEzLjcgNS4zLTE5LjdMNjMuNyAyNTYgNS4zIDE1NS4xQzEuOCAxNDkuMSAwIDE0Mi4zIDAgMTM1LjQgMCAxMTMuNiAxNy42IDk2IDM5LjQgOTZsMTE3IDAgNjEuMy0xMDUuOEMyMjUuNS0yMy42IDI0MC4yLTMyIDI1Ni0zMnMzMC41IDguNCAzOC40IDIyLjJsNjEuMyAxMDUuOCAxMTcgMGMyMS43IDAgMzkuNCAxNy42IDM5LjQgMzkuNCAwIDYuOS0xLjggMTMuNy01LjMgMTkuN0w0NDguMyAyNTZ6TTM4OC4xIDE1MmwyNy44IDQ4LjEgMjcuOC00OC4xLTU1LjcgMHpNMjkxIDk2bC0zNS02MC40LTM1IDYwLjQgNzAgMHpNMTIzLjkgMTUybC01NS43IDAgMjcuOCA0OC4xIDI3LjgtNDguMXpNOTYuMSAzMTEuOWwtMjcuOCA0OC4xIDU1LjcgMC0yNy44LTQ4LjF6TTIyMSA0MTZsMzUgNjAuNCAzNS02MC40LTcwIDB6Il0KICAgIH07CiAgICBmYU5vdGVzTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJub3Rlcy1tZWRpY2FsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ODEiLCAiTTk2IDM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxODEuNSAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43TDQ5My4zIDI5MC43YzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNMNTEyIDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE2MCAwQzEyNC43IDAgOTYgMjguNyA5NiA2NGwwIDI4OHpNMjg4IDExMmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQ4IDQ4IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC00OCAwIDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC00OC00OCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDggMCAwLTQ4YzAtOC44IDcuMi0xNiAxNi0xNnpNNDggMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMTA2LjcgMCAxMjBMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZsMC0zMjh6Il0KICAgIH07CiAgICBmYUF1c3RyYWxTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImF1c3RyYWwtc2lnbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMGE5IiwgIk0yNjYuNSAyNDBsLTg1IDAgNDIuNS0xMDYuNCA0Mi41IDEwNi40em02OC45IDBMMjYyLjkgNTguM0MyNTYuNSA0Mi40IDI0MS4xIDMyIDIyNCAzMnMtMzIuNSAxMC40LTM4LjkgMjYuM0wxMTIuNiAyNDAgMzIgMjQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDYxLjQgMC0xOS4yIDQ4LTQyLjMgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyMy4xIDAtMjAuOCA1Mi4xYy02LjYgMTYuNCAxLjQgMzUgMTcuOSA0MS42czM1LTEuNCA0MS42LTE3LjlsMzAuMy03NS45IDIwMCAwIDMwLjMgNzUuOWM2LjYgMTYuNCAyNS4yIDI0LjQgNDEuNiAxNy45czI0LjQtMjUuMiAxNy45LTQxLjZMMzkyLjkgMzg0IDQxNiAzODRjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQyLjMgMC0xOS4yLTQ4IDYxLjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAuNiAwem0tNDkuNyA0OGwxOS4yIDQ4LTE2MS42IDAgMTkuMi00OCAxMjMuMyAweiJdCiAgICB9OwogICAgZmFDbGlwYm9hcmRVc2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsaXBib2FyZC11c2VyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY3ZjMiLCAiTTMxMS40IDMybDguNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzUyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmw4LjYgMEM4My42IDEyLjkgMTA0LjMgMCAxMjggMEwyNTYgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJ6TTI0OCAxMTJjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMTM2IDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDExMiAwek0xOTIgMzQ0YTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyek05OC4zIDQxM2MtMTIuOSAxNS42IDIuMiAzNSAyMi40IDM1bDE0Mi41IDBjMjAuMiAwIDM1LjMtMTkuNCAyMi40LTM1LTE0LjctMTcuNy0zNi45LTI5LTYxLjctMjlsLTY0IDBjLTI0LjggMC00NyAxMS4zLTYxLjcgMjl6Il0KICAgIH07CiAgICBmYUZpbGVJbWFnZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1pbWFnZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODQ0M10sICJmMWM1IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTI4IDI1NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek05Mi42IDQ0OGwxOTguOCAwYzE1LjggMCAyOC42LTEyLjggMjguNi0yOC42IDAtNy4zLTIuOC0xNC40LTcuOS0xOS43TDIxNS4zIDI5Ny45Yy02LTYuMy0xNC40LTkuOS0yMy4yLTkuOWwtLjMgMGMtOC44IDAtMTcuMSAzLjYtMjMuMiA5LjlMNzEuOSAzOTkuN0M2Ni44IDQwNSA2NCA0MTIuMSA2NCA0MTkuNCA2NCA0MzUuMiA3Ni44IDQ0OCA5Mi42IDQ0OHoiXQogICAgfTsKICAgIGZhU3F1YXJlQ2FyZXRSaWdodDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWNhcmV0LXJpZ2h0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhcmV0LXNxdWFyZS1yaWdodCJdLCAiZjE1MiIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTMyMCAyNTZjMCA2LjctMi44IDEzLTcuNyAxNy42bC0xMTIgMTA0Yy03IDYuNS0xNy4yIDguMi0yNS45IDQuNFMxNjAgMzY5LjUgMTYwIDM2MGwwLTIwOGMwLTkuNSA1LjctMTguMiAxNC40LTIyczE4LjktMi4xIDI1LjkgNC40bDExMiAxMDRjNC45IDQuNSA3LjcgMTAuOSA3LjcgMTcuNnoiXQogICAgfTsKICAgIGZhQ2FyZXRTcXVhcmVSaWdodDIgPSBmYVNxdWFyZUNhcmV0UmlnaHQyOwogICAgZmFWaWFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZpYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MTRdLCAiZjQ5MiIsICJNMzQyLjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0wzMDYuNyA2NCAyOC4xIDM0Mi42QzEwLjEgMzYwLjYgMCAzODUgMCA0MTAuNUwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2bDUuNSAwYzI1LjUgMCA0OS45LTEwLjEgNjcuOS0yOC4xbDI3OC42LTI3OC42IDkuNCA5LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MHpNMjA1LjMgMjU2bDE0Ni43LTE0Ni43IDUwLjcgNTAuNy05NiA5Ni0xMDEuNSAweiJdCiAgICB9OwogICAgZmFIZWxpY29wdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlbGljb3B0ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg2NDFdLCAiZjUzMyIsICJNMTc2IDMyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE1MiAwIDAgNDgtMjIwLjggMC0zMi44LTM5LjRDNjkuOSA4My4yIDYzLjEgODAgNTYgODBMMjQgODBDMTUuNyA4MCA4IDg0LjMgMy42IDkxLjRzLTQuOCAxNS45LTEuMSAyMy40bDQ4IDk2QzU0LjYgMjE4LjkgNjIuOSAyMjQgNzIgMjI0bDEwNy44IDAgMTA0IDE0My4xYzE1LjEgMjAuNyAzOS4xIDMyLjkgNjQuNyAzMi45bDc1LjUgMGM3NS4xIDAgMTM2LTYwLjkgMTM2LTEzNlM0OTkuMSAxMjggNDI0IDEyOGwtNDggMCAwLTQ4IDE1MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDE3NiAzMnpNMzc2IDE5Mmw0OCAwYzM5LjggMCA3MiAzMi4yIDcyIDcycy0zMi4yIDcyLTcyIDcybC00OCAwIDAtMTQ0ek01NTIgNDE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNCAwIDQuNC0zLjYgOC04IDhsLTI3MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI3MiAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2IDAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFNaXR0ZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWl0dGVuIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3YjUiLCAiTTM1MiAzODRMNjQgMzg0IDUuNCAxNzguOUMxLjggMTY2LjQgMCAxNTMuNCAwIDE0MC4zIDAgNjIuOCA2Mi44IDAgMTQwLjMgMGwzLjQgMGM2NiAwIDEyMy41IDQ0LjkgMTM5LjUgMTA4LjlsMzEuNCAxMjUuOCAxNy42LTIwLjFDMzQ0LjggMjAwLjIgMzYyLjkgMTkyIDM4MiAxOTJsMi44IDBjMzQuOSAwIDYzLjMgMjguMyA2My4zIDYzLjMgMCAxNS45LTYgMzEuMi0xNi44IDQyLjlMMzUyIDM4NHpNMzIgNDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI4OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJMNjQgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2eiJdCiAgICB9OwogICAgZmFHYXNQdW1wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdhcy1wdW1wIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTk4MV0sICJmNTJmIiwgIk0zMiA2NEMzMiAyOC43IDYwLjcgMCA5NiAwTDI1NiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTkyIDggMGM0OC42IDAgODggMzkuNCA4OCA4OGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNTRjLTI3LjYtNy4xLTQ4LTMyLjItNDgtNjJsMC01OS41LTI1LjgtMjguM2MtOC45LTkuOC04LjItMjUgMS42LTMzLjlzMjUtOC4yIDMzLjkgMS42bDcxLjcgNzguOGM5LjQgMTAuMyAxNC42IDIzLjcgMTQuNiAzNy43TDUxMiAzNzZjMCAzOS44LTMyLjIgNzItNzIgNzJzLTcyLTMyLjItNzItNzJsMC0zMmMwLTIyLjEtMTcuOS00MC00MC00MGwtOCAwIDAgMTYxLjRjOS4zIDMuMyAxNiAxMi4yIDE2IDIyLjYgMCAxMy4zLTEwLjcgMjQtMjQgMjRMNDAgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNCAwLTEwLjUgNi43LTE5LjMgMTYtMjIuNkwzMiA2NHpNOTYgODBsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZsMTI4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtOTZjMC04LjgtNy4yLTE2LTE2LTE2TDExMiA2NGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdCiAgICB9OwogICAgZmFFbnZlbG9wZUNpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVudmVsb3BlLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGU4IiwgIk02NCAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhsNDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA4MS40Yy0yNC40LTExLjItNTEuNC0xNy40LTgwLTE3LjQtODcuNyAwLTE2MS43IDU4LjgtMTg0LjcgMTM5LjItNy4xLTEuMy0xNC4xLTQuMi0yMC4xLTguOGwtMjA4LTE1NkM3MS4xIDE0MS4zIDY0IDEyNy4xIDY0IDExMnpNMzA0IDM2OGMwIDI4LjYgNi4yIDU1LjYgMTcuNCA4MEwxMjggNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE4OCAxOTguNCAxNDguOGMxMi42IDkuNCAyNi45IDE1LjQgNDEuNyAxNy45IDAgMS44LS4xIDMuNS0uMSA1LjN6bTQ4IDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjAxLjQtNjAuOWMtNy4xLTUuMi0xNy4yLTMuNi0yMi40IDMuNWwtNTMgNzIuOS0yNi44LTI2LjhjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjMy4zIDMuMyA3LjkgNSAxMi42IDQuNnM4LjktMi44IDExLjctNi41bDY0LTg4YzUuMi03LjEgMy42LTE3LjItMy41LTIyLjN6Il0KICAgIH07CiAgICBmYVBlcnNvblNrYXRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXNrYXRpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2thdGluZyJdLCAiZjdjNSIsICJNMzY4IDU2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMTI4IDEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxNTAuMSAwYzQ5LjkgMCA3NC45IDYwLjMgMzkuNiA5NS42bC02My45IDYzLjkgNjkuOCAzMWMxNy4zIDcuNyAyOC41IDI0LjkgMjguNSA0My45bDAgODUuNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTc1LjItODIuNC0zNi42Yy00MS0xOC4yLTUxLTcyLTE5LjMtMTAzLjdsNDAuNC00MC40LTk4LjcgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTg5LjQgMzYxLjRsNzUuOS03NS45YzcuNyAxOS43IDIxLjYgMzcuMyA0MSA0OS42bC03MS42IDcxLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zem0zNDYuNSA4Ny4xYzguNiAyLjEgMTMuOCAxMC44IDExLjYgMTkuNGwtLjQgMS43Yy02LjIgMjQuOS0yOC42IDQyLjQtNTQuMyA0Mi40TDMwNCA1MTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsODguOCAwYzExIDAgMjAuNi03LjUgMjMuMy0xOC4ybC40LTEuN2MyLjEtOC42IDEwLjgtMTMuOCAxOS40LTExLjZ6TTE0My4yIDQ4Ni4zbC02LjIgMy4xYy0yMS42IDEwLjgtNDcuNiA2LjYtNjQuNi0xMC41TDEyLjcgNDE5LjNjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGw1OS42IDU5LjZjNy4zIDcuMyAxOC41IDkuMSAyNy43IDQuNWw2LjItMy4xYzcuOS00IDE3LjUtLjcgMjEuNSA3LjJzLjcgMTcuNS03LjIgMjEuNXoiXQogICAgfTsKICAgIGZhU2thdGluZyA9IGZhUGVyc29uU2thdGluZzsKICAgIGZhU3VuMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5NzI4XSwgImYxODUiLCAiTTE3OC4yLTEwLjFjNy40LTMuMSAxNS44LTIuMiAyMi41IDIuMmw4Ny44IDU4LjIgODcuOC01OC4yYzYuNy00LjQgMTUuMS01LjIgMjIuNS0yLjJTNDExLjQtLjUgNDEzIDcuM2wyMC45IDEwMy4yIDEwMy4yIDIwLjljNy44IDEuNiAxNC40IDcgMTcuNCAxNC4zczIuMiAxNS44LTIuMiAyMi41bC01OC4yIDg3LjggNTguMiA4Ny44YzQuNCA2LjcgNS4yIDE1LjEgMi4yIDIyLjVzLTkuNiAxMi44LTE3LjQgMTQuM0w0MzMuOCA0MDEuNCA0MTMgNTA0LjdjLTEuNiA3LjgtNyAxNC40LTE0LjMgMTcuNHMtMTUuOCAyLjItMjIuNS0yLjJsLTg3LjgtNTguMi04Ny44IDU4LjJjLTYuNyA0LjQtMTUuMSA1LjItMjIuNSAyLjJzLTEyLjgtOS42LTE0LjMtMTcuNEwxNDMgNDAxLjQgMzkuNyAzODAuNWMtNy44LTEuNi0xNC40LTctMTcuNC0xNC4zcy0yLjItMTUuOCAyLjItMjIuNUw4Mi43IDI1NiAyNC41IDE2OC4yYy00LjQtNi43LTUuMi0xNS4xLTIuMi0yMi41czkuNi0xMi44IDE3LjQtMTQuM0wxNDMgMTEwLjYgMTYzLjkgNy4zYzEuNi03LjggNy0xNC40IDE0LjMtMTcuNHpNMjA3LjYgMjU2YTgwLjQgODAuNCAwIDEgMSAxNjAuOCAwIDgwLjQgODAuNCAwIDEgMSAtMTYwLjggMHptMjA4LjggMGExMjguNCAxMjguNCAwIDEgMCAtMjU2LjggMCAxMjguNCAxMjguNCAwIDEgMCAyNTYuOCAweiJdCiAgICB9OwogICAgZmFCYXNlYmFsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXNlYmFsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTM1OCwgOTkxOCwgImJhc2ViYWxsLWJhbGwiXSwgImY0MzMiLCAiTTIzMi40IDEuMWMtMTIyLjIgMTEuNC0yMTkuNSAxMDguNy0yMzAuOSAyMzAuOSAxNi4yLS4xIDMyLTEuOCA0Ny4yLTUgMTMtMi43IDI1LjcgNS41IDI4LjQgMTguNXMtNS41IDI1LjctMTguNSAyOC40Yy0xOC40IDMuOS0zNy42IDYtNTcuMSA2LjEgMTEuNCAxMjIuMiAxMDguNyAyMTkuNSAyMzAuOSAyMzAuOSAuMS0xOS41IDIuMi0zOC43IDYuMS01Ny4xIDIuNy0xMyAxNS41LTIxLjMgMjguNC0xOC41czIxLjMgMTUuNSAxOC41IDI4LjRjLTMuMiAxNS4yLTQuOSAzMS01IDQ3LjIgMTIyLjItMTEuNCAyMTkuNS0xMDguNyAyMzAuOS0yMzAuOS0xNi4yIC4xLTMyIDEuOC00Ny4yIDUtMTMgMi43LTI1LjctNS41LTI4LjQtMTguNXM1LjUtMjUuNyAxOC41LTI4LjRjMTguNC0zLjkgMzcuNi02IDU3LjEtNi4xLTExLjQtMTIyLjItMTA4LjctMjE5LjUtMjMwLjktMjMwLjktLjEgMTkuNS0yLjIgMzguNy02LjEgNTcuMS0yLjcgMTMtMTUuNSAyMS4zLTI4LjQgMTguNXMtMjEuMy0xNS41LTE4LjUtMjguNGMzLjItMTUuMiA0LjktMzEgNS00Ny4yem0yLjggMTUxLjRjLTIxLjQgMzIuOS00OS41IDYwLjktODIuMyA4Mi4zLTExLjEgNy4yLTI2IDQuMS0zMy4yLTdzLTQuMS0yNiA3LTMzLjJjMjcuMi0xNy43IDUwLjUtNDEgNjguMy02OC4zIDcuMi0xMS4xIDIyLjEtMTQuMyAzMy4yLTdzMTQuMyAyMi4xIDcgMzMuMnpNMzkzLjEgMjg0LjJjNy4yIDExLjEgNC4xIDI2LTcgMzMuMi0yNy4yIDE3LjctNTAuNSA0MS02OC4zIDY4LjMtNy4yIDExLjEtMjIuMSAxNC4zLTMzLjIgN3MtMTQuMy0yMi4xLTctMzMuMmMyMS40LTMyLjkgNDkuNS02MC45IDgyLjMtODIuMyAxMS4xLTcuMiAyNi00LjEgMzMuMiA3eiJdCiAgICB9OwogICAgZmFCYXNlYmFsbEJhbGwgPSBmYUJhc2ViYWxsOwogICAgZmFJbWFnZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaW1hZ2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjAzZSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNjQgODBhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2ek0yNzIgMjI0YzguNCAwIDE2LjEgNC40IDIwLjUgMTEuNWw4OCAxNDRjNC41IDcuNCA0LjcgMTYuNyAuNSAyNC4zUzM2OC43IDQxNiAzNjAgNDE2TDg4IDQxNmMtOC45IDAtMTcuMi01LTIxLjMtMTIuOXMtMy41LTE3LjUgMS42LTI0LjhsNTYtODBjNC41LTYuNCAxMS44LTEwLjIgMTkuNy0xMC4yczE1LjIgMy44IDE5LjcgMTAuMmwyNi40IDM3LjggNjEuNC0xMDAuNWM0LjQtNy4xIDEyLjEtMTEuNSAyMC41LTExLjV6Il0KICAgIH07CiAgICBmYU5vdGRlZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJub3RkZWYiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTFmZSIsICJNNjQgMzkwLjNMMTUzLjUgMjU2IDY0IDEyMS43IDY0IDM5MC4zek0xMDIuNSA0NDhMMjgxLjUgNDQ4IDE5MiAzMTMuNyAxMDIuNSA0NDh6bTEyOC0xOTJMMzIwIDM5MC4zIDMyMCAxMjEuNyAyMzAuNSAyNTZ6TTI4MS41IDY0TDEwMi41IDY0IDE5MiAxOTguMyAyODEuNSA2NHpNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBMMzM2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0MTZjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDQ4eiJdCiAgICB9OwogICAgZmFCYXNrZXRiYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhc2tldGJhbGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5MzYsICJiYXNrZXRiYWxsLWJhbGwiXSwgImY0MzQiLCAiTTkyLjcgNTguOGw3OC40IDc4LjRjMTguMi0yNSAyOC45LTU1LjkgMjguOS04OS4yIDAtMTQuMS0xLjktMjcuNy01LjUtNDAuNi0zOCA5LjQtNzIuNiAyNy4yLTEwMS44IDUxLjR6TTU4LjggOTIuN2MtMjQuMiAyOS4yLTQyIDYzLjgtNTEuNCAxMDEuOCAxMi45IDMuNiAyNi41IDUuNSA0MC42IDUuNSAzMy4zIDAgNjQuMS0xMC43IDg5LjItMjguOUw1OC44IDkyLjd6TTI1NiAwYy00LjYgMC05LjIgLjEtMTMuNyAuNCAzLjcgMTUuMyA1LjcgMzEuMiA1LjcgNDcuNiAwIDQ2LjYtMTUuOSA4OS40LTQyLjYgMTIzLjRMMjU2IDIyMi4xIDQxOS4zIDU4LjhDMzc0LjkgMjIuMSAzMTguMSAwIDI1NiAwek00OCAyNDhjLTE2LjQgMC0zMi40LTItNDcuNi01LjctLjIgNC41LS40IDkuMS0uNCAxMy43IDAgNjIuMSAyMi4xIDExOC45IDU4LjggMTYzLjNMMjIyLjEgMjU2IDE3MS40IDIwNS40QzEzNy40IDIzMi4xIDk0LjYgMjQ4IDQ4IDI0OHptNDYzLjYgMjEuN2MuMi00LjUgLjQtOS4xIC40LTEzLjcgMC02Mi4xLTIyLjEtMTE4LjktNTguOC0xNjMuM0wyODkuOSAyNTYgMzQwLjYgMzA2LjZjMzQtMjYuNyA3Ni45LTQyLjYgMTIzLjQtNDIuNiAxNi40IDAgMzIuNCAyIDQ3LjYgNS43em0tNy4xIDQ3LjhjLTEyLjktMy42LTI2LjUtNS41LTQwLjYtNS41LTMzLjMgMC02NC4xIDEwLjctODkuMiAyOC45bDc4LjQgNzguNGMyNC4yLTI5LjIgNDItNjMuOCA1MS40LTEwMS44ek0zNDAuOSAzNzQuOGMtMTguMiAyNS0yOC45IDU1LjktMjguOSA4OS4yIDAgMTQuMSAxLjkgMjcuNyA1LjUgNDAuNiAzOC05LjQgNzIuNi0yNy4yIDEwMS44LTUxLjRsLTc4LjQtNzguNHptLTM0LjMtMzQuM0wyNTYgMjg5LjkgOTIuNyA0NTMuMmM0NC4zIDM2LjcgMTAxLjIgNTguOCAxNjMuMyA1OC44IDQuNiAwIDkuMi0uMSAxMy43LS40LTMuNy0xNS4zLTUuNy0zMS4yLTUuNy00Ny42IDAtNDYuNiAxNS45LTg5LjQgNDIuNi0xMjMuNHoiXQogICAgfTsKICAgIGZhQmFza2V0YmFsbEJhbGwgPSBmYUJhc2tldGJhbGw7CiAgICBmYVBlbmNpbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW5jaWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5OTk5LCA2MTUwNCwgInBlbmNpbC1hbHQiXSwgImYzMDMiLCAiTTM2LjQgMzUzLjJjNC4xLTE0LjYgMTEuOC0yNy45IDIyLjYtMzguN2wxODEuMi0xODEuMiAzMy45LTMzLjljMTYuNiAxNi42IDUxLjMgNTEuMyAxMDQgMTA0bDMzLjkgMzMuOS0zMy45IDMzLjktMTgxLjIgMTgxLjJjLTEwLjcgMTAuNy0yNC4xIDE4LjUtMzguNyAyMi42TDMwLjQgNTEwLjZjLTguMyAyLjMtMTcuMyAwLTIzLjQtNi4yUy0xLjQgNDg5LjMgLjkgNDgxTDM2LjQgMzUzLjJ6bTU1LjYtMy43Yy00LjQgNC43LTcuNiAxMC40LTkuMyAxNi42bC0yNC4xIDg2LjkgODYuOS0yNC4xYzYuNC0xLjggMTIuMi01LjEgMTctOS43TDkxLjkgMzQ5LjV6bTM1NC0xNDYuMWMtMTYuNi0xNi42LTUxLjMtNTEuMy0xMDQtMTA0TDMwOCA2NS41QzMzNC41IDM5IDM0OS40IDI0LjEgMzUyLjkgMjAuNiAzNjYuNCA3IDM4NC44LS42IDQwNC0uNlM0NDEuNiA3IDQ1NS4xIDIwLjZsMzUuNyAzNS43QzUwNC40IDY5LjkgNTEyIDg4LjMgNTEyIDEwNy40cy03LjYgMzcuNi0yMS4yIDUxLjFjLTMuNSAzLjUtMTguNCAxOC40LTQ0LjkgNDQuOXoiXQogICAgfTsKICAgIGZhUGVuY2lsQWx0ID0gZmFQZW5jaWw7CiAgICBmYVBlcnNvbldhbGtpbmdBcnJvd0xvb3BMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi13YWxraW5nLWFycm93LWxvb3AtbGVmdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTUxIiwgIk0xNjAgODBhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTczLjQgMjI3LjlsMjIuNi0yMi42IDAgNjkuM2MwIDI4IDEyLjIgNTQuNyAzMy41IDcyLjlsNzEuNCA2MS4yYzUuOSA1LjEgOS44IDEyLjEgMTAuOSAxOS44bDEyLjYgODguMWMyLjUgMTcuNSAxOC43IDI5LjcgMzYuMiAyNy4yczI5LjctMTguNyAyNy4yLTM2LjJsLTEyLjYtODguMWMtMy4zLTIzLjEtMTQuOS00NC4xLTMyLjYtNTkuM2wtMzQuNS0yOS42IDAtMTE1LjIgMy44IDQuN2MxOC4yIDIyLjggNDUuOCAzNiA3NSAzNmwzMy4yIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMzLjIgMGMtOS43IDAtMTguOS00LjQtMjUtMTJsLTE3LjktMjIuNGMtMjMtMjguOC01Ny45LTQ1LjYtOTQuOC00NS42LTMyLjIgMC02My4xIDEyLjgtODUuOCAzNS42TDI4LjEgMTgyLjZDMTAuMSAyMDAuNiAwIDIyNSAwIDI1MC41TDAgMjg4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNy41YzAtOC41IDMuNC0xNi42IDkuNC0yMi42ek04NS44IDQwNy4zYy0xLjUgNS4yLTQuMyAxMC04LjEgMTMuOEw5LjQgNDg5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNjguMy02OC4zYzExLjUtMTEuNSAxOS45LTI1LjggMjQuNC00MS41bDIuMi03LjYtNDYtMzkuNGMtMi41LTIuMi01LTQuNC03LjQtNi44TDg1LjggNDA3LjN6TTM1OSAzMzVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDcyIDcyYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMzEtMzEgMTAyLjEgMGMxLjIgMCAyLjQtLjEgMy41LS4zIDU2LjEtMy45IDEwMC41LTUwLjYgMTAwLjUtMTA3LjcgMC01OS42LTQ4LjQtMTA4LTEwOC0xMDhsLTkyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOTIgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MHMtMjYuOSA2MC02MCA2MGwtOTguMSAwIDMxLTMxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTcyIDcyeiJdCiAgICB9OwogICAgZmFEaWNlU2l4ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpY2Utc2l4IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTg2MV0sICJmNTI2IiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptMTYwIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTEyOCAyODhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0zMiA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zMjAgMTkyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMzIgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzIwIDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUFuZ2xlc0Rvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYW5nbGVzLWRvd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiYW5nbGUtZG91YmxlLWRvd24iXSwgImYxMDMiLCAiTTIxNC42IDQ3MC42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTYwLTE2MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEwxOTIgNDAyLjcgMzI5LjQgMjY1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMTYwIDE2MHptMTYwLTM1MmwtMTYwIDE2MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTE2MC0xNjBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMTkyIDIxMC43IDMyOS40IDczLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3oiXQogICAgfTsKICAgIGZhQW5nbGVEb3VibGVEb3duID0gZmFBbmdsZXNEb3duOwogICAgZmFTeXJpbmdlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN5cmluZ2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgxMzddLCAiZjQ4ZSIsICJNNDk3LjUtMTdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTUgMTUtNDYuMSA0Ni4xLTYzLTYzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDcgNy03OC4xIDc4LjEgNDEgNDFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDEtNDEtNDYuMSA0Ni4xIDQxIDQxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQxLTQxLTM3LjcgMzcuN2MtMTAuNSAxMC41LTE2LjQgMjQuNy0xNi40IDM5LjZsMCA4OC44LTU3IDU3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNTctNTcgODguOCAwYzE0LjkgMCAyOS4xLTUuOSAzOS42LTE2LjRsMjI5LjctMjI5LjcgNyA3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNjMtNjMgNDYuMS00Ni4xIDE1IDE1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNjQtNjR6Il0KICAgIH07CiAgICBmYVdoZWF0QXduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndoZWF0LWF3biIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ3aGVhdC1hbHQiXSwgImUyY2QiLCAiTTc5LjcgMjM0LjZjNi4yLTQuMSAxNC43LTMuNCAyMC4xIDIuMWw0Ni4xIDQ2LjEgNi4xIDYuN2MxOS43IDIzLjggMjYuMyA1NSAxOS4yIDgzLjkgMzEuNy03LjcgNjYuMiAxIDkwLjYgMjUuM2w0Ni4xIDQ2LjFjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcuNCA3LjRjLTM3LjUgMzcuNS05OC4zIDM3LjUtMTM1LjggMEwxMzQuMSA0NDQuMyA0OS40IDUyOWMtOS40IDkuNC0yNC41IDkuNC0zMy45IDAtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsODQuNy04NC43LTMwLjUtMzAuNWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMXptMTA0LTEwNGM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDQ2LjEgNDYuMSA2LjEgNi43YzE5LjcgMjMuOCAyNi4zIDU1IDE5LjIgODMuOSAzMS43LTcuNyA2Ni4yIDEgOTAuNiAyNS4zbDQ2LjEgNDYuMWM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtNy40IDcuNGMtMzcuNSAzNy41LTk4LjMgMzcuNS0xMzUuOCAwbC05NC45LTk0LjljLTM3LjUtMzcuNS0zNy41LTk4LjMgMC0xMzUuN2w3LjQtNy40IDIuNS0yLjF6TTQ5NS4yIDE1YzkuNC05LjQgMjQuNi05LjQgMzQgMCA4LjggOC44IDkuMyAyMi43IDEuNiAzMi4yTDUyOS4yIDQ5IDQxNC43IDE2My40YzcuNyAxIDE1LjIgMyAyMi41IDUuOUw0OTUuNSAxMTFjOS40LTkuNCAyNC42LTkuNCAzNCAwIDguOCA4LjggOS4zIDIyLjcgMS42IDMyLjFsLTEuNyAxLjgtNTIuNyA1Mi43IDM5IDM5YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03LjQgNy40Yy0zNy41IDM3LjUtOTguMyAzNy41LTEzNS44IDBsLTk0LjktOTQuOWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMWM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDM5IDM5IDUyLjctNTIuN2M5LjQtOS40IDI0LjYtOS40IDM0IDAgOC44IDguOCA5LjMgMjIuNyAxLjYgMzIuMWwtMS43IDEuOC01OC4zIDU4LjNjMi44IDcuMSA0LjcgMTQuNSA1LjcgMjIuMUw0OTUuMiAxNXoiXQogICAgfTsKICAgIGZhV2hlYXRBbHQgPSBmYVdoZWF0QXduOwogICAgZmFQbGFuZVVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYW5lLXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUyMmQiLCAiTTIwMCAyNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI3LjMgMTczLjYgMTU5LjJjNi42IDYuMSAxMC40IDE0LjYgMTAuNCAyMy42bDAgNDMuN2MwIDEwLjktMTAuNyAxOC42LTIxLjEgMTUuMmwtMTYyLjktNTQuMyAwIDk5LjcgNjYgNTIuOGMzLjggMyA2IDcuNiA2IDEyLjVsMCAxOS44YzAgMTAuNC05LjggMTgtMTkuOSAxNS41TDI1NiA1MTIgMTQ3LjkgNTM5Yy0xMC4xIDIuNS0xOS45LTUuMS0xOS45LTE1LjVsMC0xOS44YzAtNC45IDIuMi05LjUgNi0xMi41bDY2LTUyLjggMC05OS43LTE2Mi45IDU0LjNDMjYuNyAzOTYuNCAxNiAzODguNyAxNiAzNzcuOGwwLTQzLjdjMC05IDMuOC0xNy41IDEwLjQtMjMuNkwyMDAgMTUxLjMgMjAwIDI0eiJdCiAgICB9OwogICAgZmFBbGlnbkNlbnRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbGlnbi1jZW50ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjAzNyIsICJNMzUyIDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDEyOCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnptOTYgMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnpNMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMzUyIDMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTkyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6Il0KICAgIH07CiAgICBmYUhvY2tleVB1Y2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG9ja2V5LXB1Y2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQ1MyIsICJNMjU2IDI1NkMxMTQuNiAyNTYgMCAyMTMgMCAxNjBzMTE0LjYtOTYgMjU2LTk2IDI1NiA0MyAyNTYgOTYtMTE0LjYgOTYtMjU2IDk2ek0wIDM1MkwwIDI0Mi43YzE2LjkgMTIuMyAzNyAyMi4yIDU4LjEgMzAuMSA1MyAxOS45IDEyMyAzMS4yIDE5Ny45IDMxLjJzMTQ0LjktMTEuMyAxOTcuOS0zMS4yYzIxLjItNy45IDQxLjItMTcuOCA1OC4xLTMwLjFMNTEyIDM1MmMwIDUzLTExNC42IDk2LTI1NiA5NlMwIDQwNSAwIDM1MnoiXQogICAgfTsKICAgIGZhQ2lyY2xlQXJyb3dMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1hcnJvdy1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFycm93LWNpcmNsZS1sZWZ0Il0sICJmMGE4IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTM1IDIzOWw4MC04MGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTM5IDM5IDE1MC4xIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE1MC4xIDAgMzkgMzljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtODAtODBjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45eiJdCiAgICB9OwogICAgZmFBcnJvd0NpcmNsZUxlZnQgPSBmYUNpcmNsZUFycm93TGVmdDsKICAgIGZhUGx1Z0NpcmNsZUJvbHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1Zy1jaXJjbGUtYm9sdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTViIiwgIk0xOTItMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiAxMjggMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNDguN2MtOTguNiA4LjEtMTc2IDkwLjctMTc2IDE5MS4zIDAgMjcuMyA1LjcgNTMuMyAxNiA3Ni45bDAgMy4xYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjYuN0MxNjUuMiAzOTguMSA5NiAzMTkuMSA5NiAyMjRsMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTNzguMyA5NiA5NiA5Nmw2NCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTM1MiA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTc3LjQtNzdjLTUuOC00LjItMTMuOC00LTE5LjQgLjVsLTgwIDY0Yy01LjMgNC4yLTcuNCAxMS40LTUuMSAxNy44UzQzMy4yIDQxNiA0NDAgNDE2bDMyLjkgMC0xNS45IDQyLjRjLTIuNSA2LjctLjIgMTQuMyA1LjYgMTguNnMxMy44IDQgMTkuNC0uNWw4MC02NGM1LjMtNC4yIDcuNC0xMS40IDUuMS0xNy44UzU1OC44IDM4NCA1NTIgMzg0bC0zMi45IDAgMTUuOS00Mi40YzIuNS02LjcgLjItMTQuMy01LjYtMTguNnoiXQogICAgfTsKICAgIGZhUmVzdHJvb20gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVzdHJvb20iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjdiZCIsICJNODAgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptNDAgMzA0bDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTU0LjhjLTguMSA5LjItMjEuMSAxMy4yLTMzLjUgOS40LTE2LjktNS4zLTI2LjMtMjMuMi0yMS00MC4xbDI5LjctOTUuMkM0NC40IDE1Ni45IDgzLjYgMTI4IDEyOCAxMjhzODMuNiAyOC45IDk2LjggNzEuMmwyOS43IDk1LjJjNS4zIDE2LjktNC4xIDM0LjgtMjEgNDAuMS0xMi40IDMuOS0yNS40LS4yLTMzLjUtOS40TDIwMCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjgtMTYgMHpNMzIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0NjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00NjRjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTQ2NCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek00NDAgNDgwbDAtOTYtMTcuOCAwYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMWw5LTI2LjljLTMuMiAwLTYuNC0uNS05LjUtMS41LTE2LjktNS4zLTI2LjMtMjMuMi0yMS00MC4xbDI5LjctOTUuMkM0MjguNCAxNTYuOSA0NjcuNiAxMjggNTEyIDEyOHM4My42IDI4LjkgOTYuOCA3MS4ybDI5LjcgOTUuMmM1LjMgMTYuOS00LjEgMzQuOC0yMSA0MC4xLTMuMiAxLTYuNCAxLjUtOS41IDEuNWw5IDI2LjljMy41IDEwLjQtNC4zIDIxLjEtMTUuMiAyMS4xbC0xNy44IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2LTE2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhQW5jaG9yTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmNob3ItbG9jayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGFkIiwgIk0zMjAuNSA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0tMzItOTZjLTUzIDAtOTYgNDMtOTYgOTYgMCA0MS44IDI2LjcgNzcuNCA2NCA5MC41bDAgMjU3LjljLTYyLjktMTQuMy0xMTAuMi02OS43LTExMS45LTEzNi41bDE2LjEgMTQuMWMxMCA4LjcgMjUuMSA3LjcgMzMuOS0yLjNzNy43LTI1LjEtMi4zLTMzLjlsLTY0LTU2Yy05LTcuOS0yMi42LTcuOS0zMS42IDBsLTY0IDU2Yy0xMCA4LjctMTEgMjMuOS0yLjMgMzMuOXMyMy45IDExIDMzLjkgMi4zbDE2LjItMTQuMmMyLjEgMTEzLjEgOTQuNCAyMDQuMSAyMDggMjA0LjEgMjguMyAwIDU1LjQtNS43IDgwLTE1LjlsMC0uMiAwLTcyLjJjLTE0LjQgOS42LTMwLjYgMTYuNy00OCAyMC43bDAtMjU3LjljMzcuMy0xMy4yIDY0LTQ4LjcgNjQtOTAuNSAwLTUzLTQzLTk2LTk2LTk2em0yNzIgMzA0LjFsMCA0Ny45LTY0IDAgMC00Ny45YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTQxNi41IDQwMGwwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEyOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yMC45LTEzLjQtMzguNy0zMi00NS4zbDAtNTAuNmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGwwIDUwLjZjLTE4LjYgNi42LTMyIDI0LjQtMzIgNDUuM3oiXQogICAgfTsKICAgIGZhVGltZWxpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGltZWxpbmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTI5YyIsICJNMTYwIDE2OS4zYzI4LjMtMTIuMyA0OC00MC41IDQ4LTczLjMgMC00NC4yLTM1LjgtODAtODAtODBTNDggNTEuOCA0OCA5NmMwIDMyLjggMTkuNyA2MSA0OCA3My4zbDAgNTQuNy02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIyNCAwIDAgNTQuN2MtMjguMyAxMi4zLTQ4IDQwLjUtNDggNzMuMyAwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMzIuOC0xOS43LTYxLTQ4LTczLjNsMC01NC43IDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwIDAtNTQuN2MyOC4zLTEyLjMgNDgtNDAuNSA0OC03My4zIDAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwYzAgMzIuOCAxOS43IDYxIDQ4IDczLjNsMCA1NC43LTI1NiAwIDAtNTQuN3oiXQogICAgfTsKICAgIGZhTGlnaHRidWxiMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaWdodGJ1bGIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxNjFdLCAiZjBlYiIsICJNMjkyLjkgMzg0YzcuMy0yMi4zIDIxLjktNDIuNSAzOC40LTU5LjkgMzIuNy0zNC40IDUyLjctODAuOSA1Mi43LTEzMi4xIDAtMTA2LTg2LTE5Mi0xOTItMTkyUzAgODYgMCAxOTJjMCA1MS4yIDIwIDk3LjcgNTIuNyAxMzIuMSAxNi41IDE3LjQgMzEuMiAzNy42IDM4LjQgNTkuOWwyMDEuNyAwek0yODggNDMybC0xOTIgMCAwIDE2YzAgNDQuMiAzNS44IDgwIDgwIDgwbDMyIDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC0xNnpNMTg0IDExMmMtMzkuOCAwLTcyIDMyLjItNzIgNzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC02Ni4zIDUzLjctMTIwIDEyMC0xMjAgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6Il0KICAgIH07CiAgICBmYUNpcmNsZUFycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWFycm93LXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFycm93LWNpcmNsZS1yaWdodCJdLCAiZjBhOSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTQxLTE1OWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzOS0zOS0xNTAuMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE1MC4xIDAtMzktMzljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw4MCA4MGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtODAgODB6Il0KICAgIH07CiAgICBmYUFycm93Q2lyY2xlUmlnaHQgPSBmYUNpcmNsZUFycm93UmlnaHQ7CiAgICBmYU1hcnNBbmRWZW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXJzLWFuZC12ZW51cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk4OTNdLCAiZjIyNCIsICJNMzY4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTEyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zNC43LTYzIDYzYzE5LjUgMjguNCAzMSA2Mi43IDMxIDk5LjggMCA4Ni4zLTYyLjEgMTU4LjEtMTQ0IDE3My4xbDAgMzQuOSAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC0zNC45Yy04MS45LTE1LTE0NC04Ni44LTE0NC0xNzMuMSAwLTk3LjIgNzguOC0xNzYgMTc2LTE3NiAzNyAwIDcxLjQgMTEuNCA5OS44IDMxbDYzLTYzLTM0LjcgMHpNMzUyIDIwOGExMTIgMTEyIDAgMSAwIC0yMjQgMCAxMTIgMTEyIDAgMSAwIDIyNCAweiJdCiAgICB9OwogICAgZmFOZXR3b3JrV2lyZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibmV0d29yay13aXJlZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNmZmIiwgIk0yNDggODhsODAgMCAwIDQ4LTgwIDAgMC00OHptLTgtNTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsMTYgMCAwIDMyLTIyNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDAgMCAzMi0xNiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDk2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtMTYgMCAwLTMyIDE5MiAwIDAgMzItMTYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw5NiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTE2IDAgMC0zMiA5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yMjQgMCAwLTMyIDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtOTYgMHpNNDQ4IDM3Nmw4IDAgMCA0OC04MCAwIDAtNDggNzIgMHptLTI1NiAwbDggMCAwIDQ4LTgwIDAgMC00OCA3MiAweiJdCiAgICB9OwogICAgZmFCdWlsZGluZ1NoaWVsZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy1zaGllbGQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRkOCIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMDEuMiAwYy0xMi41LTE0LjctMjMuMi0zMC44LTMxLjgtNDhsLTg5LjUgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDAgMC0yNi43YzAtMTguMSA2LjEtMzUuMiAxNi42LTQ4LjgtLjQtMS40LS42LTIuOS0uNi00LjVsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxIDg2LjctMjguOWMzLjEtMSA2LjItMS44IDkuMy0yLjVMNDE2IDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDB6bTMyIDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNzIgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTI4IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek00NDUuMyA0ODguNWwtMTMuMyA2LjMgMC0xODguMSA5NiAzMiAwIDE5LjZjMCA1NS44LTMyLjIgMTA2LjUtODIuNyAxMzAuM3pNNDIxLjkgMjU5LjVsLTExMiAzNy4zYy0xMy4xIDQuNC0yMS45IDE2LjYtMjEuOSAzMC40bDAgMzEuMWMwIDc0LjQgNDMgMTQyLjEgMTEwLjIgMTczLjdsMTguNSA4LjdjNC44IDIuMiAxMCAzLjQgMTUuMiAzLjRzMTAuNS0xLjIgMTUuMi0zLjRsMTguNS04LjdDNTMzIDUwMC4zIDU3NiA0MzIuNiA1NzYgMzU4LjJsMC0zMS4xYzAtMTMuOC04LjgtMjYtMjEuOS0zMC40bC0xMTItMzcuM2MtNi42LTIuMi0xMy43LTIuMi0yMC4yIDB6Il0KICAgIH07CiAgICBmYUNvZGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29kZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMTIxIiwgIk0zNjAuOCAxLjJjLTE3LTQuOS0zNC43IDUtMzkuNiAyMmwtMTI4IDQ0OGMtNC45IDE3IDUgMzQuNyAyMiAzOS42czM0LjctNSAzOS42LTIybDEyOC00NDhjNC45LTE3LTUtMzQuNy0yMi0zOS42em02NC42IDEzNi4xYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w3My40IDczLjQtNzMuNCA3My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC05Ni05NmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDB6bS0yNzQuNyAwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMNzcuMyAyNTYgMTUwLjYgMTgyLjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjN6Il0KICAgIH07CiAgICBmYUZlYXRoZXJQb2ludGVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZlYXRoZXItcG9pbnRlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJmZWF0aGVyLWFsdCJdLCAiZjU2YiIsICJNNDc1LjMgLjFjOS45LS44IDE5LjYgMyAyNi42IDEwczEwLjggMTYuNyAxMCAyNi42Yy00IDQ5LjMtMTcuNCAxMjYuMi00Ni4zIDE5OS43LTEuOCA0LjUtNS41IDcuOS0xMC4yIDkuM0wzNzQuNSAyNzBjLTMuOSAxLjItNi41IDQuNy02LjUgOC44IDAgNS4xIDQuMSA5LjIgOS4yIDkuMmwzOC42IDBjMTIgMCAxOS43IDEyLjggMTMuNSAyMy4xLTQgNi43LTguMyAxMy4yLTEyLjcgMTkuNi0yIDIuOS01IDUtOC40IDYuMUwzMTAuNSAzNjZjLTMuOSAxLjItNi41IDQuNy02LjUgOC44IDAgNS4xIDQuMSA5LjIgOS4yIDkuMmwxNiAwYzE0LjYgMCAyMSAxNy40IDguOCAyNS40LTY4IDQ1LTEzNy43IDQzLjMtMTgyLjQgMzEuMy0xMi43LTMuNC0yNC05LjktMzQuNC0xNy45TDQ4IDQ5NmMtOC44IDguOC0yMy4yIDguOC0zMiAwcy04LjgtMjMuMiAwLTMybDgwLTgwIC41IC41Yy43LTEuMyAxLjYtMi41IDIuNy0zLjZMMjU2IDIyNGM4LjgtOC44IDguOC0yMy4yIDAtMzJzLTIzLjItOC44LTMyIDBMODkuNyAzMjYuMmMtOC45IDguOS0yNCA0LjQtMjUtOC4yLTQuMy01My4yIDkuMy0xMjMuMSA3Mi42LTE4Ni40IDkxLjEtOTEuMSAyNTQuMi0xMjQuNyAzMzcuOS0xMzEuNXoiXQogICAgfTsKICAgIGZhRmVhdGhlckFsdCA9IGZhRmVhdGhlclBvaW50ZWQ7CiAgICBmYUZpbGVDaXJjbGVRdWVzdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNpcmNsZS1xdWVzdGlvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGVmIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTAwYy0xMS42IDAtMjEuMyA4LjItMjMuNSAxOS4yLTEuOCA4LjctMTAuMiAxNC4zLTE4LjkgMTIuNXMtMTQuMy0xMC4yLTEyLjUtMTguOWM1LjItMjUuNiAyNy44LTQ0LjggNTQuOS00NC44IDMwLjkgMCA1NiAyNS4xIDU2IDU2IDAgMTkuOC0xMS43IDM3LjgtMjkuOCA0NS45bC0xMC40IDQuNmMtMS4yIDcuNy03LjggMTMuNS0xNS44IDEzLjUtOC44IDAtMTYtNy4yLTE2LTE2IDAtMTEuMiA2LjYtMjEuMyAxNi44LTI1LjlsMTIuNC01LjVjNi42LTIuOSAxMC44LTkuNCAxMC44LTE2LjYgMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYVNpZ25hdHVyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaWduYXR1cmUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjViNyIsICJNMTkyIDEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNy44YzAgMjcuNy0yLjQgNTUuMy03LjEgODIuNWwtODQuNCAyNS4zYy00MC42IDEyLjItNjguNCA0OS42LTY4LjQgOTJsMCAzMi40LTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNzIuNSAwYzQuMiAzNiAzNC44IDY0IDcyIDY0IDI2IDAgNTAtMTMuOSA2Mi45LTM2LjVsMTMuOS0yNC4zYzI2LjgtNDcgNDYuNS05Ny43IDU4LjQtMTUwLjVsOTQuNC0yOC4zLTEyLjUgMzcuNWMtMy4zIDkuOC0xLjYgMjAuNSA0LjQgMjguOFM0MDUuNyAzMjAgNDE2IDMyMGwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtODMuNiAwIDE4LTUzLjljMy44LTExLjMgLjktMjMuOC03LjQtMzIuNHMtMjAuNy0xMS44LTMyLjItOC40TDMxNi40IDE5OC4xYzIuNC0yMC43IDMuNi00MS40IDMuNi02Mi4zbDAtNy44YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2bDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyem0tOS4yIDE3N2w0OS0xNC43Yy0xMC40IDMzLjgtMjQuNSA2Ni40LTQyLjEgOTcuMmwtMTMuOSAyNC4zYy0xLjUgMi42LTQuMyA0LjMtNy40IDQuMy00LjcgMC04LjUtMy44LTguNS04LjVsMC03MS45YzAtMTQuMSA5LjMtMjYuNiAyMi44LTMwLjd6TTYxNiA0MTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI5Mi45IDBjLTYuNSAxNi4zLTEzLjcgMzIuMy0yMS42IDQ4TDYxNiA0MTZ6Il0KICAgIH07CiAgICBmYUVhcnRoQW1lcmljYXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWFydGgtYW1lcmljYXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3NTgsICJlYXJ0aCIsICJlYXJ0aC1hbWVyaWNhIiwgImdsb2JlLWFtZXJpY2FzIl0sICJmNTdkIiwgIk01NS43IDE5OS43bDMwLjkgMzAuOWM2IDYgMTQuMSA5LjQgMjIuNiA5LjRsMjEuNSAwYzguNSAwIDE2LjYgMy40IDIyLjYgOS40bDI5LjMgMjkuM2M2IDYgOS40IDE0LjEgOS40IDIyLjZsMCAzNy41YzAgOC41IDMuNCAxNi42IDkuNCAyMi42bDEzLjMgMTMuM2M2IDYgOS40IDE0LjEgOS40IDIyLjZsMCAxOC43YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yLjdjMC04LjUgMy40LTE2LjYgOS40LTIyLjZsNDUuMy00NS4zYzYtNiA5LjQtMTQuMSA5LjQtMjIuNmwwLTM0LjdjMC0xNy43LTE0LjMtMzItMzItMzJsLTgyLjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTE2LTE2Yy00LjItNC4yLTYuNi0xMC02LjYtMTYgMC0xMi41IDEwLjEtMjIuNiAyMi42LTIyLjZsMzQuNyAwYzEyLjUgMCAyMi42LTEwLjEgMjIuNi0yMi42IDAtNi0yLjQtMTEuOC02LjYtMTZsLTE5LjctMTkuN0MyNDIgMTMwIDI0MCAxMjUuMSAyNDAgMTIwczItMTAgNS43LTEzLjdsMTcuMy0xNy4zYzUuOC01LjggOS4xLTEzLjcgOS4xLTIxLjkgMC03LjItMi40LTEzLjctNi40LTE4LjktMy4yLS4xLTYuNC0uMi05LjYtLjItOTUuNCAwLTE3NS43IDY0LjItMjAwLjMgMTUxLjd6TTQ2NCAyNTZjMC0zNC42LTguNC02Ny4yLTIzLjQtOTUuOC02LjQgLjktMTIuNyAzLjktMTcuOSA5LjFsLTEzLjQgMTMuNGMtNiA2LTkuNCAxNC4xLTkuNCAyMi42bDAgMzQuN2MwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNC4xIDBjMi41IDAgNS0uMyA3LjMtLjggLjQtNSAuNS0xMC4xIC41LTE1LjJ6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6Il0KICAgIH07CiAgICBmYUVhcnRoID0gZmFFYXJ0aEFtZXJpY2FzOwogICAgZmFFYXJ0aEFtZXJpY2EgPSBmYUVhcnRoQW1lcmljYXM7CiAgICBmYUdsb2JlQW1lcmljYXMgPSBmYUVhcnRoQW1lcmljYXM7CiAgICBmYUNhcnJvdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXJyb3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjkzNjVdLCAiZjc4NyIsICJNNDUzLjEtMzYuN0w0NDAuOS0yNC42Yy0zMS4yIDMxLjItMzEuMiA4MS45IDAgMTEzLjEgMTUuNiAxNS42IDMxLjIgMzEuMiA0Ni45IDQ2LjkgMzEuMiAzMS4yIDgxLjkgMzEuMiAxMTMuMSAwbDEyLjEtMTIuMWM2LjItNi4yIDYuMi0xNi40IDAtMjIuNkw2MDAuOSA4OC42Yy0zMS4yLTMxLjItODEuOS0zMS4yLTExMy4xIDAgMzEuMi0zMS4yIDMxLjItODEuOSAwLTExMy4xTDQ3NS43LTM2LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwek0zMzEuNiA5NmMtNDUuMiAwLTg3LjEgMjAuNC0xMTUgNTQuM0wyNzMuMyAyMDdjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEwxOTEuNiAxOTMuMiA2Ny4yIDQ2Ni44Yy01LjUgMTIuMS0yLjkgMjYuNCA2LjUgMzUuOXMyMy43IDEyIDM1LjkgNi41bDE0MS42LTY0LjQtNDMuOC00My44Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNTYuNSA1Ni41IDk1LjMtNDMuM2M1My4xLTI0LjEgODcuMi03Ny4xIDg3LjItMTM1LjUgMC04Mi4yLTY2LjYtMTQ4LjgtMTQ4LjgtMTQ4Ljh6Il0KICAgIH07CiAgICBmYVRlbXBlcmF0dXJlRnVsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW1wZXJhdHVyZS1mdWxsIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbInRlbXBlcmF0dXJlLTQiLCAidGhlcm1vbWV0ZXItNCIsICJ0aGVybW9tZXRlci1mdWxsIl0sICJmMmM3IiwgIk0xNjAgMEMxMDcgMCA2NCA0MyA2NCA5NmwwIDE2NC43QzM0LjUgMjg3IDE2IDMyNS40IDE2IDM2OCAxNiA0NDcuNSA4MC41IDUxMiAxNjAgNTEyczE0NC02NC41IDE0NC0xNDRjMC00Mi42LTE4LjUtODEtNDgtMTA3LjNMMjU2IDk2YzAtNTMtNDMtOTYtOTYtOTZ6bTY0IDM2OGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NGMwLTI2LjkgMTYuNS00OS45IDQwLTU5LjNMMTM2IDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAyMTIuN2MyMy41IDkuNSA0MCAzMi41IDQwIDU5LjN6Il0KICAgIH07CiAgICBmYVRlbXBlcmF0dXJlNCA9IGZhVGVtcGVyYXR1cmVGdWxsOwogICAgZmFUaGVybW9tZXRlcjQgPSBmYVRlbXBlcmF0dXJlRnVsbDsKICAgIGZhVGhlcm1vbWV0ZXJGdWxsID0gZmFUZW1wZXJhdHVyZUZ1bGw7CiAgICBmYVRhYmxlQ2VsbHNSb3dMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlLWNlbGxzLXJvdy1sb2NrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU2N2EiLCAiTTI1NiAyODhsMC02NCAxNTMuMyAwYzE3LjEtNDIuMiA1Ni03My4yIDEwMi43LTc5bDAtNDljMC0zNS4zLTI4LjctNjQtNjQtNjRMMTI4IDMyQzkyLjcgMzIgNjQgNjAuNyA2NCA5NmwwIDMyMGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNDEuMyAwYy0uOS01LjItMS4zLTEwLjYtMS4zLTE2LjFsMC00Ny45LTExMiAwIDAtNjQgMTEzLjMgMGMzLjctMjIgMTQuOC00MS40IDMwLjctNTUuNmwwLTguNC0xNDQgMHptMC0xOTJsMTkyIDAgMCA2NC0xOTIgMCAwLTY0ek01NjAgMjcyLjFsMCA0Ny45LTY0IDAgMC00Ny45YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTQxNiAzNjhsMCA5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTk2YzAtMjAuOS0xMy40LTM4LjctMzItNDUuM2wwLTUwLjZjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBsMCA1MC42Yy0xOC42IDYuNi0zMiAyNC40LTMyIDQ1LjN6Il0KICAgIH07CiAgICBmYUJvbHRMaWdodG5pbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9sdC1saWdodG5pbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTBiNyIsICJNMCAyNTZMMjguNSAyOGMyLTE2IDE1LjYtMjggMzEuOC0yOEwyMjguOSAwYzE1IDAgMjcuMSAxMi4xIDI3LjEgMjcuMSAwIDMuMi0uNiA2LjUtMS43IDkuNUwyMDggMTYwIDM0Ny4zIDE2MGMyMC4yIDAgMzYuNyAxNi40IDM2LjcgMzYuNyAwIDcuNC0yLjIgMTQuNi02LjQgMjAuN2wtMTkyLjIgMjgxYy01LjkgOC42LTE1LjYgMTMuNy0yNS45IDEzLjdsLTIuOSAwYy0xNS43IDAtMjguNS0xMi44LTI4LjUtMjguNSAwLTIuMyAuMy00LjYgLjktNi45TDE3NiAyODggMzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhQ2xvdWRTaG93ZXJzV2F0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQtc2hvd2Vycy13YXRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGU0IiwgIk0yNzkuMiA1NS43QzI2My45IDIyLjggMjMwLjYgMCAxOTIgMCAxMzkgMCA5NiA0MyA5NiA5NiA2MC43IDk2IDMyIDEyNC43IDMyIDE2MHMyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0bC0xLjYgMGMtNy40LTM2LjUtMzkuNy02NC03OC40LTY0LTIyLjIgMC00Mi4zIDkuMS01Ni44IDIzLjd6TTQxMC42IDQ3Ni4xYzIwLjcgMTUuNiA0NiAzMC43IDc0LjIgMzQuNSAxMy4xIDEuOCAyNS4yLTcuNSAyNy0yMC42cy03LjUtMjUuMi0yMC42LTI3Yy0xNS45LTIuMS0zMy4yLTExLjMtNTEuNy0yNS4yLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNzLTMwLjUtOC4yLTU0LjUtMjYuM2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTE4LjUgMTMuOS0zNS44IDIzLjEtNTEuNyAyNS4yLTEzLjEgMS44LTIyLjQgMTMuOC0yMC42IDI3czEzLjggMjIuNCAyNyAyMC42YzI4LjItMy44IDUzLjYtMTguOSA3NC4yLTM0LjUgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOWMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMHpNMTAwLjEgMzAzLjZjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40cy0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjMgNjRDMjkgMzY1IDM1LjggMzc4LjYgNDguNCAzODIuOHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuMy02NHptMTIwIDBjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40cy0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjMgNjRjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuMy02NHptMTEyIDBjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40cy0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjMgNjRjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuMy02NHptMTIwIDBjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40cy0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjMgNjRjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuMy02NHoiXQogICAgfTsKICAgIGZhQXJyb3dVcExvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtbG9uZyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWyJsb25nLWFycm93LXVwIl0sICJmMTc2IiwgIk0xODIuNi0yMi42Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTI4IDEyOGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxMjggNzcuMyAxMjggNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC00MzQuNyA3My40IDczLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOHoiXQogICAgfTsKICAgIGZhTG9uZ0Fycm93VXAgPSBmYUFycm93VXBMb25nOwogICAgZmFBZGRyZXNzQ2FyZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYWRkcmVzcy1jYXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjIxNDAsICJjb250YWN0LWNhcmQiLCAidmNhcmQiXSwgImYyYmIiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTgwIDI1Nmw2NCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNkw4MCAzODRjLTguOCAwLTE2LTcuMi0xNi0xNiAwLTQ0LjIgMzUuOC04MCA4MC04MHptLTI0LTk2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptMjQwLTQ4bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMTIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMCA5NmwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTEyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUNvbnRhY3RDYXJkMiA9IGZhQWRkcmVzc0NhcmQyOwogICAgZmFWY2FyZDIgPSBmYUFkZHJlc3NDYXJkMjsKICAgIGZhQW5nbGVSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmdsZS1yaWdodCIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgWzgyNTBdLCAiZjEwNSIsICJNMjQ3LjEgMjMzLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTE2MCAxNjBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDE3OS4yIDI1NiA0MS45IDExOC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjB6Il0KICAgIH07CiAgICBmYUZhY2VNZWgyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtbWVoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTI4LCAibWVoIl0sICJmMTFhIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTc2IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0xNzYgMzIwbDE2MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNjAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTWVoMiA9IGZhRmFjZU1laDI7CiAgICBmYUFycm93VXBGcm9tR3JvdW5kV2F0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtZnJvbS1ncm91bmQtd2F0ZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRiNSIsICJNMzAzIDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsODggODhjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDctNDcgMCAyNzguMWMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTI3OC4xLTQ3IDQ3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDMwMyA3ek0yNDAgMTkybDAgMTYzLjFjLTEwLjYtMi4yLTIxLjMtMy4yLTMyLTMuMS0zMi41IC4yLTY0LjkgMTAuNy05Mi4zIDMxLjQtOC44IDYuNi0xNS45IDEwLjktMjEuNyAxMy41bC0uOCAuNGMtMy43IDEuNy02LjQgMi45LTkuOCAuMy02LTQuNS0xMi42LTgtMTkuMy0xMC40TDY0IDI0MGMwLTI2LjUgMjEuNS00OCA0OC00OGwxMjggMHptMzM2IDQ4bDAgMTU1LjJjLTEuMSAuOC0yLjIgMS41LTMuMyAyLjQtNC4xIDMuMS04LjMgLjgtMTIuNi0xLjUtLjYtLjMtMS4yLS42LTEuOC0xLTUuMi0yLjctMTEuMS02LjYtMTgtMTEuNy0yOC4xLTIxLjEtNjEuMy0zMS42LTk0LjQtMzEuNC0xNS41IC4xLTMxIDIuNS00NiA3LjNsMC0xNjcuMyAxMjggMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNNDAzLjQgNDc2LjFDMzc5LjEgNDk0LjMgMzUxLjEgNTEyIDMyMCA1MTJzLTU5LjEtMTcuNy04My40LTM1LjljLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAwLTIzLjggMTcuOS01NC4xIDM1LjUtODguMSAzNS4zLTIwLjQtLjEtNDAuNy02LjctNTkuOC0yMS4xLTEwLjYtOC0xMi43LTIzLTQuNy0zMy42czIzLTEyLjcgMzMuNi00LjdjMTEuMyA4LjUgMjEuNiAxMS40IDMxLjIgMTEuNSAxNy42IC4xIDM3LjMtOS40IDU4LjktMjUuNyAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMjQgMTguMSA0MC43IDI2LjMgNTQuNSAyNi4zczMwLjUtOC4yIDU0LjUtMjYuM2MzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTYuOSAxMi43IDMyLjkgMjEuNSA0Ny44IDI0LjYgMTMuNyAyLjggMjcuNCAuOSA0Mi4zLTEwLjMgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOSAyNS42LTQuNyAzMy42Yy0yNi40IDE5LjktNTQuMiAyNC40LTgwLjcgMTkuMS0yNS4zLTUuMS00OC4xLTE4LjktNjcuMi0zMy4zLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAweiJdCiAgICB9OwogICAgZmFNYXAyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUwNiwgNjIwNzJdLCAiZjI3OSIsICJNNTEyIDQ4YzAtMTEuMS01LjctMjEuNC0xNS4yLTI3LjJzLTIxLjItNi40LTMxLjEtMS40TDM0OS41IDc3LjUgMTcwLjEgMTcuNmMtOC4xLTIuNy0xNi44LTIuMS0yNC40IDEuN2wtMTI4IDY0QzYuOCA4OC44IDAgOTkuOSAwIDExMkwwIDQ2NGMwIDExLjEgNS43IDIxLjQgMTUuMiAyNy4yczIxLjIgNi40IDMxLjEgMS40bDExNi4xLTU4LjEgMTc5LjQgNTkuOGM4LjEgMi43IDE2LjggMi4xIDI0LjQtMS43bDEyOC02NGMxMC44LTUuNCAxNy43LTE2LjUgMTcuNy0yOC42bDAtMzUyek0xOTIgMzc2LjlsMC0yODQuNSAxMjggNDIuNyAwIDI4NC41LTEyOC00Mi43eiJdCiAgICB9OwogICAgZmFVc2VyUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLXBsdXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjIzNCIsICJNMTM2IDEyOGExMjAgMTIwIDAgMSAxIDI0MCAwIDEyMCAxMjAgMCAxIDEgLTI0MCAwek00OCA0ODIuM0M0OCAzODMuOCAxMjcuOCAzMDQgMjI2LjMgMzA0bDU5LjQgMGM5OC41IDAgMTc4LjMgNzkuOCAxNzguMyAxNzguMyAwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0w3Ny43IDUxMkM2MS4zIDUxMiA0OCA0OTguNyA0OCA0ODIuM3pNNTQ0IDk2YzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDggNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMCAwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDgtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0OCAwIDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYVZlbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZlbnVzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTc5Ml0sICJmMjIxIiwgIk04MCAxNzZhMTEyIDExMiAwIDEgMSAyMjQgMCAxMTIgMTEyIDAgMSAxIC0yMjQgMHpNMjIzLjkgMzQ5LjFDMzA1LjkgMzM0LjEgMzY4IDI2Mi4zIDM2OCAxNzYgMzY4IDc4LjggMjg5LjIgMCAxOTIgMFMxNiA3OC44IDE2IDE3NmMwIDg2LjMgNjIuMSAxNTguMSAxNDQuMSAxNzMuMS0uMSAxLS4xIDEuOS0uMSAyLjlsMCA2NC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTY0YzAtMSAwLTEuOS0uMS0yLjl6Il0KICAgIH07CiAgICBmYURpYWdyYW1TdWNjZXNzb3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGlhZ3JhbS1zdWNjZXNzb3IiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTQ3YSIsICJNMjg5LjIgMTM3LjljMi41LTYgOC4zLTkuOSAxNC44LTkuOWw0MCAwIDAtMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTk4IDBjMS4zIDUuMSAyIDEwLjUgMiAxNmwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC05NiAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDI1NiAwYzM5LjggMCA3MiAzMi4yIDcyIDcybDAgMjQgNDAgMGM2LjUgMCAxMi4zIDMuOSAxNC44IDkuOXMxLjEgMTIuOS0zLjUgMTcuNGwtNjQgNjRjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwbC02NC02NGMtNC42LTQuNi01LjktMTEuNS0zLjUtMTcuNHpNMzg0IDQ4MEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NHpNMTYwIDE2MGwwLTY0LTk2IDAgMCA2NCA5NiAweiJdCiAgICB9OwogICAgZmFIZWFkU2lkZUNvdWdoU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhZC1zaWRlLWNvdWdoLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwNjIiLCAiTTUzNS0yNC45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOUw0MSA1MzcuMWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwyNS0yNSAwLTQ0Ny4yYzAtMTUgMTAuNS0yOC4zIDI1LjQtMjkuOCA3LjQtLjcgMTQuOS0xLjEgMjIuNi0xLjEgMTEyLjcgMCAyMDYgODMuMyAyMjEuNyAxOTEuNyAuNCAzIDEuNyA1LjkgMy42IDguM2wyLjIgMi42IDIyNy41LTIyNy41ek0xMzMuOCA1MTJMMjg4IDM1Ny44IDI4OCA0MTZjMCA1My00MyA5Ni05NiA5NmwtNTguMiAwek0xNzYgMjI0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMzM2IDQwYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptLTg4IDcyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bS02NCA0OGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0xMjggMGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0yNCA3MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bS04OC0yNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFEaWFncmFtUHJvamVjdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWFncmFtLXByb2plY3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsicHJvamVjdC1kaWFncmFtIl0sICJmNTQyIiwgIk0wIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNiAxMjggMCAwLTE2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNi0xMjggMCAwIDE2YzAgNy4zLTEuNyAxNC4zLTQuNiAyMC41bDY4LjYgOTEuNSA4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTk2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC03LjMgMS43LTE0LjMgNC42LTIwLjVMMTI4IDIyNCA0OCAyMjRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODB6Il0KICAgIH07CiAgICBmYVByb2plY3REaWFncmFtID0gZmFEaWFncmFtUHJvamVjdDsKICAgIGZhVGVybWluYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVybWluYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjEyMCIsICJNOS40IDExOC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTE2MCAxNjBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDE0Ni43IDI1NiA5LjQgMTE4LjZ6TTIyNCAzODRsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFIb3VzZUZpcmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtZmlyZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTBjIiwgIk00NDggMTkyYzE0LjEgLjQgMjMuOCAxMS40IDMyLjcgMjEuNyAyIDIuMyA0IDQuNiA2IDYuN2wxOSAxOS45IDEyLjItMTMuOGM1LjQtNi4xIDEzLjMtOC45IDIwLjktOC45IDcuMiAwIDE0LjMgMi42IDE5LjkgNy44IDE5LjcgMTguMyAzOS44IDQzLjIgNTUgNzAuNiAxNS4xIDI3LjIgMjYuMiA1OC4yIDI2LjIgODguMiAwIDg4LjctNzEuMyAxNTkuOC0xNjAgMTU5LjgtODkuNiAwLTE2MC03MS4zLTE2MC0xNTkuOCAwLTM3LjMgMTYtNzMuNCAzNi44LTEwNC41IDIwLjktMzEuMyA0Ny41LTU5IDcwLjktODAuMSA1LjctNS4yIDEzLjEtNy43IDIwLjMtNy41ek0yNjguNiA2LjVjMTIuMi05LjMgMjkuNy04LjcgNDEuMiAybDE0Ny41IDEzN2MtMTkuMi00LjMtNDAgLjUtNTUuNSAxNC40LTM2LjQgMzIuNi02Ny43IDY5LjgtOTAuMyAxMDYuNC0xMC4zIDE2LjYtMTkuNyAzNC45LTI2LjggNTMuN0wyNzIgMzIwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2IDY0LjYgMGM3LjMgMTcuMiAxNi44IDMzLjQgMjguMiA0OEwxNDQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDggMi40LTJ6TTQ4OS4zIDM0My43Yy01LjQtNC43LTEzLjEtNC43LTE4LjUgMC0xNy43IDE1LjQtNTQuNyA1MS45LTU0LjcgODguNCAwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0YzAtMzYuNS0zNy03My01NC43LTg4LjR6Il0KICAgIH07CiAgICBmYU1hc2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFzayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNmZhIiwgIk0yODggNjRDNjQgNjQgMCAxNjAgMCAyNzJTODAgNDQ4IDE3NiA0NDhsOC40IDBjMjQuMiAwIDQ2LjQtMTMuNyA1Ny4yLTM1LjRsMjMuMi00Ni4zYzQuNC04LjggMTMuMy0xNC4zIDIzLjItMTQuM3MxOC44IDUuNSAyMy4yIDE0LjNsMjMuMiA0Ni4zYzEwLjggMjEuNyAzMyAzNS40IDU3LjIgMzUuNGw4LjQgMGM5NiAwIDE3Ni02NCAxNzYtMTc2UzUxMiA2NCAyODggNjR6TTk2IDI1NmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6bTMyMC02NGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHoiXQogICAgfTsKICAgIGZhSHVycmljYW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImh1cnJpY2FuZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNzUxIiwgIk0wIDIwOEMwIDEwNC40IDc1LjcgMTguNSAxNzQuOSAyLjYgMTg0IDEuMiAxOTIgOC42IDE5MiAxNy45bDAgNjMuM2MwIDguNCA2LjUgMTUuMyAxNC43IDE2LjUgMTAwLjMgMTQuOSAxNzcuMyAxMDEuMyAxNzcuMyAyMDUuNyAwIDEwMy42LTc1LjcgMTg5LjUtMTc0LjkgMjA1LjQtOS4yIDEuNS0xNy4xLTUuOS0xNy4xLTE1LjJsMC02My4zQzE5MiA0MjEuOSAxODUuNSA0MTUgMTc3LjMgNDEzLjcgNzcgMzk4LjkgMCAzMTIuNCAwIDIwOHptMjg4IDQ4YTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHptLTk2LTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhRWFydGhBZnJpY2EgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWFydGgtYWZyaWNhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzU3LCAiZ2xvYmUtYWZyaWNhIl0sICJmNTdjIiwgIk00NDcuNiAxNzVjLTMxLjYtNzQuNi0xMDUuNS0xMjctMTkxLjYtMTI3LTIyLjEgMC00My40IDMuNS02My40IDkuOC0uNCAyLS42IDQuMS0uNiA2LjJsMCA3My40YzAgMTIuNSAxMC4xIDIyLjYgMjIuNiAyMi42IDYgMCAxMS44LTIuNCAxNi02LjZsMTYtMTZjNi02IDE0LjEtOS40IDIyLjYtOS40bDUuNSAwYzI4LjUgMCA0Mi44IDM0LjUgMjIuNiA1NC42LTYgNi0xNC4xIDkuNC0yMi42IDkuNGwtNjEuNSAwYy04LjUgMC0xNi42IDMuNC0yMi42IDkuNGwtMjEuMyAyMS4zYy02IDYtOS40IDE0LjEtOS40IDIyLjZsMCA0Mi43YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyLjcgMGM4LjUgMCAxNi42LTMuNCAyMi42LTkuNGwyOS4zLTI5LjNjNi02IDkuNC0xNC4xIDkuNC0yMi42bDAtMTguN2MwLTguOCA3LjItMTYgMTYtMTZzMTYtNy4yIDE2LTE2bDAtMzQuN2MwLTguNS0zLjQtMTYuNi05LjQtMjIuNmwtMTYtMTZjLTQuMi00LjItNi42LTEwLTYuNi0xNiAwLTEyLjUgMTAuMS0yMi42IDIyLjYtMjIuNmw0NSAwYzEyLjQgMCAyMi43LTcuMSAyOC0xN3pNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHoiXQogICAgfTsKICAgIGZhR2xvYmVBZnJpY2EgPSBmYUVhcnRoQWZyaWNhOwogICAgZmFUaHVtYnRhY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGh1bWJ0YWNrIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MjA0LCAxMjgzOTIsICJ0aHVtYi10YWNrIl0sICJmMDhkIiwgIk0zMiAzMkMzMiAxNC4zIDQ2LjMgMCA2NCAwTDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yOS41IDAgMTAuMyAxMzQuMWMzNy4xIDIxLjIgNjUuOCA1Ni40IDc4LjIgOTkuN2wzLjggMTMuNGMyLjggOS43IC44IDIwLTUuMiAyOC4xUzM2MiAzNTIgMzUyIDM1MkwzMiAzNTJjLTEwIDAtMTkuNS00LjctMjUuNS0xMi43cy04LTE4LjQtNS4yLTI4LjFMNSAyOTcuOGMxMi40LTQzLjMgNDEtNzguNSA3OC4yLTk5LjdMOTMuNSA2NCA2NCA2NEM0Ni4zIDY0IDMyIDQ5LjcgMzIgMzJ6TTE2MCA0MDBsNjQgMCAwIDExMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTExMnoiXQogICAgfTsKICAgIGZhVGh1bWJUYWNrID0gZmFUaHVtYnRhY2s7CiAgICBmYUhhbmRQb2ludERvd24yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnQtZG93biIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMGE3IiwgIk0zMiA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIwOC02NCAwIDAgMjA4ek0yMjQgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0em0tNjQgNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyem0xNjAtOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjR6bS05Ni04OGwwIC42YzkuNC01LjQgMjAuMy04LjYgMzItOC42IDEzLjIgMCAyNS40IDQgMzUuNiAxMC44IDguNy0yNC45IDMyLjUtNDIuOCA2MC40LTQyLjggMTEuNyAwIDIyLjYgMy4xIDMyIDguNmwwLTguNkMzODQgNzEuNiAzMTIuNCAwIDIyNCAwTDE2Mi4zIDBDMTE5LjggMCA3OS4xIDE2LjkgNDkuMSA0Ni45TDM3LjUgNTguNUMxMy41IDgyLjUgMCAxMTUuMSAwIDE0OWwwIDI3YzAgMzUuMyAyOC43IDY0IDY0IDY0bDg4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBzLTE3LjktNDAtNDAtNDBsLTU2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsNTYgMGMzOS44IDAgNzIgMzIuMiA3MiA3MnoiXQogICAgfTsKICAgIGZhRmFjZU1laEJsYW5rMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLW1laC1ibGFuayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU2NiwgIm1laC1ibGFuayJdLCAiZjVhNCIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMjA4LTQ4YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTEyOCAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYU1laEJsYW5rMiA9IGZhRmFjZU1laEJsYW5rMjsKICAgIGZhVGVtcGVyYXR1cmVFbXB0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW1wZXJhdHVyZS1lbXB0eSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWyJ0ZW1wZXJhdHVyZS0wIiwgInRoZXJtb21ldGVyLTAiLCAidGhlcm1vbWV0ZXItZW1wdHkiXSwgImYyY2IiLCAiTTY0IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFMxNiA0NDcuNSAxNiAzNjhjMC00Mi42IDE4LjUtODEgNDgtMTA3LjNMNjQgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NC02NCAyOC43LTY0IDY0IDI4LjcgNjQgNjQgNjR6Il0KICAgIH07CiAgICBmYVRlbXBlcmF0dXJlMCA9IGZhVGVtcGVyYXR1cmVFbXB0eTsKICAgIGZhVGhlcm1vbWV0ZXIwID0gZmFUZW1wZXJhdHVyZUVtcHR5OwogICAgZmFUaGVybW9tZXRlckVtcHR5ID0gZmFUZW1wZXJhdHVyZUVtcHR5OwogICAgZmFCb3JkZXJOb25lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvcmRlci1ub25lIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY4NTAiLCAiTTMyIDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMiAzMi0xNC4zIDMyLTMyLTE0LjMtMzItMzItMzJ6TTE2MCAzMmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6TTI4OCA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzIgMzItMTQuMyAzMi0zMi0xNC4zLTMyLTMyLTMyek0xNjAgNDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzIgMTQuMyAzMiAzMiAzMnpNMjg4IDMyYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHpNNDE2IDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyIDE0LjMgMzIgMzIgMzJ6bTAtMzg0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMzIgMzJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0ek00MTYgMzUyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMzIgMTYwYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHptMCAxOTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek00MTYgMTYwYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHoiXQogICAgfTsKICAgIGZhSGlnaGxpZ2h0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGlnaGxpZ2h0ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjU5MSIsICJNMzE1IDMxNUw0NzMuNCA5OS45IDQ0NC4xIDcwLjYgMjI5IDIyOSAzMTUgMzE1em0tMTg3IDVsMCAwIDAtNzEuN2MwLTE1LjMgNy4yLTI5LjYgMTkuNS0zOC42TDQyMC42IDguNEM0MjggMi45IDQzNyAwIDQ0Ni4yIDAgNDU3LjYgMCA0NjguNSA0LjUgNDc2LjYgMTIuNmw1NC44IDU0LjhjOC4xIDguMSAxMi42IDE5IDEyLjYgMzAuNSAwIDkuMi0yLjkgMTguMi04LjQgMjUuNkwzMzQuNCAzOTYuNWMtOSAxMi4zLTIzLjQgMTkuNS0zOC42IDE5LjVsLTcxLjcgMC0yNS40IDI1LjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC01MC43LTUwLjdjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zTDEyOCAzMjB6TTcgNDY2LjNsNTEuNy01MS43IDcwLjYgNzAuNi0xOS43IDE5LjdjLTQuNSA0LjUtMTAuNiA3LTE3IDdMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQuN2MwLTYuNCAyLjUtMTIuNSA3LTE3eiJdCiAgICB9OwogICAgZmFNb25leUJpbGxXYXZlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vbmV5LWJpbGwtd2F2ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTNhIiwgIk0wIDQxOS42TDAgMTA5LjVjMC0yMy4yIDI0LjEtMzguNiA0Ni4zLTMyIDg3LjcgMjYuMiAxNDkuNyA1LjUgMjEyLjEtMTUuMyA2NC41LTIxLjUgMTI5LjQtNDMuMSAyMjMuMy0xMy4xIDE4LjUgNS45IDMwLjMgMjMuOCAzMC4zIDQzLjNsMCAzMTAuMWMwIDIzLjItMjQuMSAzOC42LTQ2LjIgMzItODcuNy0yNi4yLTE0OS44LTUuNS0yMTIuMSAxNS4zLTY0LjUgMjEuNS0xMjkuNCA0My4xLTIyMy4zIDEzLjEtMTguNS01LjktMzAuMy0yMy44LTMwLjMtNDMuM3pNMzM2IDI1NmMwLTUzLTM1LjgtOTYtODAtOTZzLTgwIDQzLTgwIDk2IDM1LjggOTYgODAgOTYgODAtNDMgODAtOTZ6TTEyMCA0MTMuNmM0LjQgMCA3LjktMy44IDcuMi04LjEtNC42LTI3LjgtMjctNDkuNS01NS4yLTUzLTQuNC0uNS04IDMuMS04IDcuNWwwIDM5LjljMCAzLjYgMi40IDYuOCA2IDcuNyAxNy45IDQuMiAzNC4zIDYuMSA1MCA2LjF6bTMxOC41LTUxLjFjNSAuOCA5LjUtMyA5LjUtOGwwLTQyLjZjMC00LjQtMy42LTguMS04LTcuNS0yNS4yIDMuMS00NS45IDIwLjktNTMuMiA0NC42LTEuNCA0LjcgMi4zIDkuMSA3LjIgOS4yIDE0LjIgLjQgMjkgMS43IDQ0LjQgNC4zek00NDggMTUybDAtMzkuOWMwLTMuNi0yLjUtNi44LTYtNy43LTE3LjktNC4yLTM0LjMtNi4xLTUwLTYuMS00LjQgMC03LjkgMy44LTcuMiA4LjEgNC42IDI3LjggMjcgNDkuNSA1NS4yIDUzIDQuNCAuNSA4LTMuMSA4LTcuNXpNMTI1LjIgMTYyLjljMS40LTQuNy0yLjMtOS4xLTcuMi05LjItMTQuMi0uNC0yOS0xLjctNDQuNC00LjMtNS0uOC05LjUgMy05LjUgOEw2NCAyMDBjMCA0LjQgMy42IDguMSA4IDcuNSAyNS4yLTMuMSA0NS45LTIwLjkgNTMuMi00NC42eiJdCiAgICB9OwogICAgZmFUb2lsZXRQYXBlclNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvaWxldC1wYXBlci1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMDcyIiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC05NC41LTk0LjVjNDAuMi0yMyA2OS41LTk2LjkgNjkuNS0xODQuNiAwLTEwNi00My0xOTItOTYtMTkycy05NiA4Ni05NiAxOTJjMCAyNC4xIDIuMiA0Ny4yIDYuMyA2OC40TDMwNCAyMzguMiAzMDQgMjI0YzAtNTguOSAxMS44LTExNC41IDMzLjItMTU3LjIgNS45LTExLjcgMTMuMS0yMy43IDIxLjktMzQuOEwxMjggMzJjLTguMyAwLTE2LjQgMi4xLTI0LjEgNi4xbC02My02M3pNMzIgMjI0bDAgMjY0YzAgMzAuOSAyNS4xIDU2IDU2IDU2bDE2MCAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2bDAtMTE0LjItMjU2LTI1NkMzNy45IDE0OC4yIDMyIDE4NC43IDMyIDIyNHptNDE2IDY0Yy0xNy43IDAtMzItMjguNy0zMi02NHMxNC4zLTY0IDMyLTY0IDMyIDI4LjcgMzIgNjQtMTQuMyA2NC0zMiA2NHoiXQogICAgfTsKICAgIGZhRmlsZVNoaWVsZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXNoaWVsZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGYwIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIwMS4yIDBDMjYxIDQ2OS40IDI0MCA0MTQuNSAyNDAgMzU2LjRsMC0zMS4xYzAtMzQuNCAyMi02NSA1NC43LTc1LjlsMTEyLTM3LjNjMy4xLTEgNi4yLTEuOCA5LjMtMi41bDAtMzkuMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnptODcuOCAzMTIuNWwtMTMuMyA2LjMgMC0xODguMSA5NiAzMiAwIDE5LjZjMCA1NS44LTMyLjIgMTA2LjUtODIuNyAxMzAuM3pNNDIxLjkgMjU5LjVsLTExMiAzNy4zYy0xMy4xIDQuNC0yMS45IDE2LjYtMjEuOSAzMC40bDAgMzEuMWMwIDc0LjQgNDMgMTQyLjEgMTEwLjIgMTczLjdsMTguNSA4LjdjNC44IDIuMiAxMCAzLjQgMTUuMiAzLjRzMTAuNS0xLjIgMTUuMi0zLjRsMTguNS04LjdDNTMzIDUwMC4zIDU3NiA0MzIuNiA1NzYgMzU4LjJsMC0zMS4xYzAtMTMuOC04LjgtMjYtMjEuOS0zMC40bC0xMTItMzcuM2MtNi42LTIuMi0xMy43LTIuMi0yMC4yIDB6Il0KICAgIH07CiAgICBmYVRleHRIZWlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGV4dC1oZWlnaHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjAzNCIsICJNNDAgMzJDMTcuOSAzMiAwIDQ5LjkgMCA3MmwwIDU2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiA2NCAwIDAgMzIwLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0zMjAgNjQgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC01NmMwLTIyLjEtMTcuOS00MC00MC00MEw0MCAzMnpNNDM4LjYgMzYxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC05LjQgOS40IDAtMjI5LjUgOS40IDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC02NC02NGMtNi02LTE0LjEtOS40LTIyLjYtOS40cy0xNi42IDMuNC0yMi42IDkuNGwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsOS40LTkuNCAwIDIyOS41LTkuNC05LjR6Il0KICAgIH07CiAgICBmYUZhY2VHcmluVG9uZ3VlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tdG9uZ3VlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTM5LCAiZ3Jpbi10b25ndWUiXSwgImY1ODkiLCAiTTAgMjU2YzAgMTA0LjQgNjIuNSAxOTQuMiAxNTIuMiAyMzQuMS01LjMtMTMtOC4yLTI3LjItOC4yLTQyLjFsMC02MS43Yy0xNi45LTE2LjUtMzAuMS0zNi43LTM4LjMtNTkuMy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjFjMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTguMyAyMi42LTIxLjUgNDIuOC0zOC4zIDU5LjNsMCA2MS43YzAgMTQuOS0yLjkgMjkuMS04LjIgNDIuMSA4OS43LTM5LjggMTUyLjItMTI5LjYgMTUyLjItMjM0LjEgMC0xNDEuNC0xMTQuNi0yNTYtMjU2LTI1NlMwIDExNC42IDAgMjU2em0xNzYtODBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTYgMjQwbDAtNDUuNGMwLTE0LjctMTEuOS0yNi42LTI2LjYtMjYuNmwtMiAwYy0xMS4zIDAtMjEuMSA3LjktMjMuNiAxOC45LTIuOCAxMi42LTIwLjggMTIuNi0yMy42IDAtMi41LTExLjEtMTIuMy0xOC45LTIzLjYtMTguOWwtMiAwYy0xNC43IDAtMjYuNiAxMS45LTI2LjYgMjYuNmwwIDQ1LjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHoiXQogICAgfTsKICAgIGZhR3JpblRvbmd1ZTIgPSBmYUZhY2VHcmluVG9uZ3VlMjsKICAgIGZhRmlsZVNpZ25hdHVyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXNpZ25hdHVyZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNTczIiwgIk02NC4xIDY0YzAtMzUuMyAyOC43LTY0IDY0LTY0TDI3Ny42IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMNDI5LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM2wwIDk3LjUtMTMyIDEzMi00Mi4xIDAtMTYuMS01My42Yy00LjctMTUuNy0xOS4xLTI2LjQtMzUuNS0yNi40LTExLjMgMC0yMS45IDUuMS0yOC45IDEzLjlMMTMzLjMgNDA5Yy04LjMgMTAuMy02LjYgMjUuNSAzLjcgMzMuN3MyNS41IDYuNiAzMy43LTMuOGw0Ny4xLTU4LjggMTUuMiA1MC43YzMgMTAuMiAxMi40IDE3LjEgMjMgMTcuMWwzMS41IDBjLS45IDMuMS0xLjcgNi4zLTIuMyA5LjVsLTEwLjkgNTQuNS0xNDYuMiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTM4NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRsOTMuNSAwLTExNy41LTExNy41em02MC4yIDQwOC40YzIuNS0xMi40IDguNi0yMy44IDE3LjUtMzIuN2wxMTguOS0xMTguOSA4MCA4MC0xMTguOSAxMTguOWMtOC45IDguOS0yMC4zIDE1LTMyLjcgMTcuNWwtNTkuNiAxMS45Yy0uOSAuMi0xLjkgLjMtMi45IC4zLTggMC0xNC42LTYuNS0xNC42LTE0LjYgMC0xIC4xLTEuOSAuMy0yLjlsMTEuOS01OS42em0yNjcuOC0xMjNsLTI4LjggMjguOC04MC04MCAyOC44LTI4LjhjMjIuMS0yMi4xIDU3LjktMjIuMSA4MCAwczIyLjEgNTcuOSAwIDgweiJdCiAgICB9OwogICAgZmFCdWlsZGluZ1doZWF0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLXdoZWF0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZGIiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjQ5LjMgMGMtNi0xNC44LTkuMy0zMS05LjMtNDggMC0xNy43IDcuMi0zMy43IDE4LjgtNDUuMy0xMS45LTE5LjQtMTguOC00Mi4zLTE4LjgtNjYuNyAwLTE3LjcgNy4yLTMzLjcgMTguOC00NS4zLTExLjktMTkuNC0xOC44LTQyLjMtMTguOC02Ni43IDAtMjUuMiAxNC41LTQ2LjkgMzUuNi01Ny40LTIuNC03LjEtMy42LTE0LjctMy42LTIyLjZsMC0zMkMzNjggOTYuNyAzODggNzAuMSA0MTUuOSA2MC4xIDQxMy45IDI2LjYgMzg2IDAgMzUyIDBMOTYgMHpNMjA4IDM1MmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgODAtOTYgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xMjggMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI3MiA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xMjggMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTE0NC0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em0zNTIgMGwtMTYgMGMtNDQuMiAwLTgwIDM1LjgtODAgODAgMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjNDQuMiAwIDgwLTM1LjggODAtODAgMC04LjgtNy4yLTE2LTE2LTE2em0xNiAxMjhjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYy00NC4yIDAtODAgMzUuOC04MCA4MCAwIDguOCA3LjIgMTYgMTYgMTZsMTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MHptMCAxMTJjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYy00NC4yIDAtODAgMzUuOC04MCA4MCAwIDguOCA3LjIgMTYgMTYgMTZsMTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MHpNNDk2IDUyOGMwLTQ0LjItMzUuOC04MC04MC04MGwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2IDAgNDQuMiAzNS44IDgwIDgwIDgwbDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2em0tMTYtOTZjOC44IDAgMTYtNy4yIDE2LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwbC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTYgMCA0NC4yIDM1LjggODAgODAgODBsMTYgMHptMTYtMTI4YzAtNDQuMi0zNS44LTgwLTgwLTgwbC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTYgMCA0NC4yIDM1LjggODAgODAgODBsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZ6TTUxMiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEwNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHptOTYgNjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzJ6TTQ0MCAxMDRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMyYzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFQbHVnQ2lyY2xlTWludXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1Zy1jaXJjbGUtbWludXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU1ZSIsICJNMTkyLTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgMTI4IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTYgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDQ4LjdjLTk4LjYgOC4xLTE3NiA5MC43LTE3NiAxOTEuMyAwIDI3LjMgNS43IDUzLjMgMTYgNzYuOWwwIDMuMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY2LjdDMTY1LjIgMzk4LjEgOTYgMzE5LjEgOTYgMjI0bDAtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzc4LjMgOTYgOTYgOTZsNjQgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zNTIgNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIyNCAwYzAtOC44LTcuMi0xNi0xNi0xNmwtMTI4IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMTI4IDBjOC44IDAgMTYtNy4yIDE2LTE2eiJdCiAgICB9OwogICAgZmFGdXRib2wyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZ1dGJvbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk5MTcsICJmdXRib2wtYmFsbCIsICJzb2NjZXItYmFsbCJdLCAiZjFlMyIsICJNNDE3LjMgMzYwLjFsLTcxLjYtNC44Yy01LjItLjMtMTAuMyAxLjEtMTQuNSA0LjJzLTcuMiA3LjQtOC40IDEyLjVsLTE3LjYgNjkuNkMyODkuNSA0NDUuOCAyNzMgNDQ4IDI1NiA0NDhzLTMzLjUtMi4yLTQ5LjItNi40TDE4OS4yIDM3MmMtMS4zLTUtNC4zLTkuNC04LjQtMTIuNXMtOS4zLTQuNS0xNC41LTQuMmwtNzEuNiA0LjhjLTE3LjYtMjcuMi0yOC41LTU5LjItMzAuNC05My42TDEyNSAyMjguM2M0LjQtMi44IDcuNi03IDkuMi0xMS45czEuNC0xMC4yLS41LTE1bC0yNi43LTY2LjZDMTI4IDEwOS4yIDE1NS4zIDg5IDE4Ni43IDc2LjlsNTUuMiA0NmM0IDMuMyA5IDUuMSAxNC4xIDUuMXMxMC4yLTEuOCAxNC4xLTUuMWw1NS4yLTQ2YzMxLjMgMTIuMSA1OC43IDMyLjMgNzkuNiA1Ny45bC0yNi43IDY2LjZjLTEuOSA0LjgtMi4xIDEwLjEtLjUgMTVzNC45IDkuMSA5LjIgMTEuOWw2MC43IDM4LjJjLTEuOSAzNC40LTEyLjggNjYuNC0zMC40IDkzLjZ6TTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0xNC4xLTMyNS43Yy04LjQtNi4xLTE5LjgtNi4xLTI4LjIgMEwxOTQgMjIxYy04LjQgNi4xLTExLjkgMTYuOS04LjcgMjYuOGwxOC4zIDU2LjNjMy4yIDkuOSAxMi40IDE2LjYgMjIuOCAxNi42bDU5LjIgMGMxMC40IDAgMTkuNi02LjcgMjIuOC0xNi42bDE4LjMtNTYuM2MzLjItOS45LS4zLTIwLjctOC43LTI2LjhsLTQ3LjktMzQuOHoiXQogICAgfTsKICAgIGZhRnV0Ym9sQmFsbDIgPSBmYUZ1dGJvbDI7CiAgICBmYVNvY2NlckJhbGwyID0gZmFGdXRib2wyOwogICAgZmFDaXJjbGVQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1wbHVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInBsdXMtY2lyY2xlIl0sICJmMDU1IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjMyIDM0NGwwLTY0LTY0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNjQgMCAwLTY0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA2NCA2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC02NCAwIDAgNjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYVBsdXNDaXJjbGUgPSBmYUNpcmNsZVBsdXM7CiAgICBmYUJyYXppbGlhblJlYWxTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyYXppbGlhbi1yZWFsLXNpZ24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTQ2YyIsICJNNDAwIDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNDguOSAwYy0yNiAwLTQ3LjEgMjEuMS00Ny4xIDQ3LjEgMCAyMi41IDE1LjkgNDEuOCAzNy45IDQ2LjJsMzIuOCA2LjZjNTEuOSAxMC40IDg5LjMgNTYgODkuMyAxMDkgMCA1MC42LTMzLjggOTMuMy04MCAxMDYuN2wwIDIwLjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0LjkgMGMyNiAwIDQ3LjEtMjEuMSA0Ny4xLTQ3LjEgMC0yMi41LTE1LjktNDEuOC0zNy45LTQ2LjJsLTMyLjgtNi42Yy01MS45LTEwLjQtODkuMy01Ni04OS4zLTEwOSAwLTUwLjYgMzMuOC05My4yIDgwLTEwNi43TDM2OCA0OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmw4MCAwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgNTQuMy0zMCAxMDEuNS03NC40IDEyNi4xbDQxIDEzNi43YzUuMSAxNi45LTQuNSAzNC44LTIxLjUgMzkuOHMtMzQuOC00LjUtMzkuOC0yMS41TDEyMC4xIDMxOS44Yy0yLjcgLjEtNS40IC4yLTguMSAuMmwtNDggMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ2NS43IDAgNDQ4TDAgNjR6TTY0IDI1Nmw0OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwbC00OCAwIDAgMTYweiJdCiAgICB9OwogICAgZmFTdGFyQW5kQ3Jlc2NlbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Rhci1hbmQtY3Jlc2NlbnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5NzcwXSwgImY2OTkiLCAiTTAgMjU2YzAtMTQxLjQgMTE0LjYtMjU2IDI1Ni0yNTYgMzMgMCA2NC42IDYuMyA5My42IDE3LjcgNy40IDIuOSAxMS41IDEwLjcgOS44IDE4LjRzLTguOCAxMy0xNi43IDEyLjRjLTQuOC0uMy05LjctLjUtMTQuNi0uNS0xMTQuOSAwLTIwOCA5My4xLTIwOCAyMDhzOTMuMSAyMDggMjA4IDIwOGM0LjkgMCA5LjgtLjIgMTQuNi0uNSA3LjktLjUgMTUgNC43IDE2LjcgMTIuNHMtMi40IDE1LjUtOS44IDE4LjRDMzIwLjYgNTA1LjcgMjg5IDUxMiAyNTYgNTEyIDExNC42IDUxMiAwIDM5Ny40IDAgMjU2ek0zNzUuNCAxMzcuNGMzLjUtNy4xIDEzLjctNy4xIDE3LjIgMGwzMS41IDYzLjhjMS40IDIuOCA0LjEgNC44IDcuMiA1LjNsNzAuNCAxMC4yYzcuOSAxLjEgMTEgMTAuOCA1LjMgMTYuNGwtNTAuOSA0OS42Yy0yLjMgMi4yLTMuMyA1LjQtMi44IDguNWwxMiA3MC4xYzEuMyA3LjgtNi45IDEzLjgtMTMuOSAxMC4xbC02My0zMy4xYy0yLjgtMS41LTYuMS0xLjUtOC45IDBsLTYzIDMzLjFjLTcgMy43LTE1LjMtMi4zLTEzLjktMTAuMWwxMi03MC4xYy41LTMuMS0uNS02LjMtMi44LTguNUwyNjEgMjMzLjFjLTUuNy01LjYtMi42LTE1LjIgNS4zLTE2LjRsNzAuNC0xMC4yYzMuMS0uNSA1LjgtMi40IDcuMi01LjNsMzEuNS02My44eiJdCiAgICB9OwogICAgZmFGYWNlU3VycHJpc2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Utc3VycHJpc2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTgsICJzdXJwcmlzZSJdLCAiZjVjMiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE3NiAxNzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptLTQ4IDgwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdCiAgICB9OwogICAgZmFTdXJwcmlzZTIgPSBmYUZhY2VTdXJwcmlzZTI7CiAgICBmYUhvc3BpdGFsVXNlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3NwaXRhbC11c2VyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY4MGQiLCAiTTY0IDY0QzY0IDI4LjcgOTIuNyAwIDEyOCAwTDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTIxLjNjLTQ2LjkgMTktODAgNjUtODAgMTE4LjcgMCAyNy43IDguOCA1My40IDIzLjggNzQuNC01MS41IDIxLTg3LjggNzEuNi04Ny44IDEzMC43IDAgMSAwIDEuOSAwIDIuOWwtMTc2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDY0IDY0ek0yMDggNDAwbDAgNjQgNTMuNCAwYzcuMi0yOS40IDIxLjMtNTYuMSA0MC40LTc4LjMtNi4xLTE5LjUtMjQuMy0zMy43LTQ1LjgtMzMuNy0yNi41IDAtNDggMjEuNS00OCA0OHpNMjQ4IDg4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMi0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMCAwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyIDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwIDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwek00MTYgMzA0YTgwIDgwIDAgMSAxIDE2MCAwIDgwIDgwIDAgMSAxIC0xNjAgMHpNMzUyIDUxMmMwLTUzIDQzLTk2IDk2LTk2bDk2IDBjNTMgMCA5NiA0MyA5NiA5NiAwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjI0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFBcnJvd0Rvd25VcExvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctZG93bi11cC1sb2NrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0YjAiLCAiTTI2Mi42IDQyMi42bC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDI1LjQgMjUuNCAwLTExNC43LTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMjU2IDAgMC0xMTQuNy0yNS40IDI1LjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDgwLTgwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDgwIDgwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC0yNS40LTI1LjQgMCA5NC44Yy0yNS4zIDIwLjMtNDIuOCA1MC4xLTQ3IDgzLjlsLTE0NSAwIDAgMTE0LjcgMjUuNC0yNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6TTE5MiAzMmwwIDE0NC02NCAwIDAtMTQ0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTQ5NiAzMDQuMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTM1MiA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il0KICAgIH07CiAgICBmYUZvbGRlcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9sZGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTkzLCAxMjg0NDcsIDYxNzE2LCAiZm9sZGVyLWJsYW5rIl0sICJmMDdiIiwgIk02NCA0NDhsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNDBjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjk4LjcgODBjLTYuOSAwLTEzLjctMi4yLTE5LjItNi40TDI0MS4xIDQ0LjhDMjMwIDM2LjUgMjE2LjUgMzIgMjAyLjcgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NHoiXQogICAgfTsKICAgIGZhRm9sZGVyQmxhbmsyID0gZmFGb2xkZXIyOwogICAgZmFIb2xseUJlcnJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvbGx5LWJlcnJ5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3YWEiLCAiTTI1Ni4yIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptLTgwIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMjc3IDM4My44YzEgLjEgMi4xIC4yIDMuMiAuMiAzOS44IDAgNzIgMzIuMiA3MiA3MmwwIDIyLjdjMCAxNi40IDE2IDI3LjkgMzEuNiAyMi44bDEyLjgtNC4zYzE4LTYgMzcuMy02LjUgNTUuNi0xLjVsMTkuNCA1LjNjMTcuOSA0LjkgMzQuNC0xMS42IDI5LjUtMjkuNUw0OTUuOSA0NTJjLTUtMTguMy00LjQtMzcuNiAxLjUtNTUuNmw0LjMtMTIuOGM1LjItMTUuNS02LjQtMzEuNi0yMi44LTMxLjYtMzQuNiAwLTYyLjctMjguMS02Mi43LTYyLjdsMC0zMmMwLTE2LjQtMTYtMjcuOS0zMS42LTIyLjhsLTEyLjggNC4zYy0xOCA2LTM3LjMgNi41LTU1LjYgMS41bC0yOS42LTguMWMtMi45LS44LTUuOS0xLTguNy0uNyA0LjIgOS43IDUuOCAyMC44IDMuNyAzMi4zbC02LjMgMzQuOGMtMS41IDguNC0xLjQgMTcgLjUgMjUuM2w1LjMgMjMuOWMyLjggMTIuNyAxLjEgMjUuMi00IDM1Ljl6TTEyNy44IDIzNC41Yy0xNS41LTUuMi0zMS42IDYuNC0zMS42IDIyLjhsMCAzMmMwIDM0LjYtMjguMSA2Mi43LTYyLjcgNjIuNy0xNi40IDAtMjcuOSAxNi0yMi44IDMxLjZMMTUgMzk2LjRjNiAxOCA2LjUgMzcuMyAxLjUgNTUuNmwtNS4zIDE5LjRDNi40IDQ4OS40IDIyLjggNTA1LjggNDAuNyA1MDFsMTkuNC01LjNjMTguMy01IDM3LjYtNC41IDU1LjYgMS41bDEyLjggNC4zYzE1LjUgNS4yIDMxLjYtNi40IDMxLjYtMjIuOGwwLTMyYzAtMzQuNiAyOC4xLTYyLjcgNjIuNy02Mi43IDE2LjQgMCAyNy45LTE2IDIyLjgtMzEuNmwtNC4zLTEyLjhjLTYtMTgtNi41LTM3LjMtMS41LTU1LjZsNS4zLTE5LjRjNC45LTE3LjktMTEuNi0zNC40LTI5LjUtMjkuNWwtMTkuNCA1LjNjLTE4LjMgNS0zNy42IDQuNC01NS42LTEuNWwtMTIuOC00LjN6TTM4NC4yIDE0NGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAweiJdCiAgICB9OwogICAgZmFWZW51c0RvdWJsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2ZW51cy1kb3VibGUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFs5ODkwXSwgImYyMjYiLCAiTTE5MiAyODhhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0ek0zNjggMTc2YzAgODYuMy02Mi4xIDE1OC4xLTE0NC4xIDE3My4xIC4xIDEgLjEgMS45IC4xIDIuOWwwIDY0IDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTY0YzAtMSAwLTEuOSAuMS0yLjktODItMTUtMTQ0LjEtODYuOC0xNDQuMS0xNzMuMSAwLTk3LjIgNzguOC0xNzYgMTc2LTE3NlMzNjggNzguOCAzNjggMTc2ek0zNTcuNSAzMjdjMTQuNC0xNS44IDI2LjYtMzMuNyAzNi4xLTUzLjEgMTYuMSA5IDM0LjcgMTQuMSA1NC41IDE0LjEgNjEuOSAwIDExMi01MC4xIDExMi0xMTJTNTA5LjkgNjQgNDQ4IDY0Yy0xOS44IDAtMzguMyA1LjEtNTQuNSAxNC4xLTkuNS0xOS40LTIxLjYtMzcuMy0zNi4xLTUzLjEgMjYuNC0xNS45IDU3LjQtMjUgOTAuNS0yNSA5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NiAwIDg2LjMtNjIuMSAxNTguMS0xNDQuMSAxNzMuMSAuMSAuOSAuMSAxLjkgLjEgMi45bDAgNjQgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwIDAtNjRjMC0xIDAtMS45IC4xLTIuOS0yMS4xLTMuOS00MC45LTExLjUtNTguNi0yMi4yeiJdCiAgICB9OwogICAgZmFDbGlwYm9hcmRRdWVzdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQtcXVlc3Rpb24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTRlMyIsICJNMzExLjQgMzJsOC42IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzNTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDguNiAwQzgzLjYgMTIuOSAxMDQuMyAwIDEyOCAwTDI1NiAwYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMnpNMjQ4IDExMmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwxMzYgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDB6TTE5MiAyNDhjMTYuMSAwIDI5LjIgMTMuMSAyOS4yIDI5LjIgMCA4LjctMy4xIDEzLjktNi45IDE3LjctNC41IDQuNC0xMC43IDcuNS0xNi44IDkuNS0xNC45IDUtMjkuNSAxOS4zLTI5LjUgMzkuNSAwIDEzLjMgMTAuNyAyNCAyNCAyNCAxMS41IDAgMjEuMi04LjEgMjMuNS0xOSAxOS4yLTcuMSA1My43LTI2LjMgNTMuNy03MS44IDAtNDIuNi0zNC42LTc3LjItNzcuMi03Ny4ycy03Ny4yIDM0LjYtNzcuMiA3Ny4yYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xNi4xIDEzLjEtMjkuMiAyOS4yLTI5LjJ6bTI4IDE2OGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOCAxMi41IDI4IDI4IDI4IDI4LTEyLjUgMjgtMjh6Il0KICAgIH07CiAgICBmYUhvdGRvZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3Rkb2ciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3ODldLCAiZjgwZiIsICJNMjg4IDBjLTIwLjUgMC00MC4xIDguMS01NC42IDIyLjZMMjIuNiAyMzMuNEM4LjEgMjQ3LjkgMCAyNjcuNSAwIDI4OCAwIDMwMC4yIDIuOSAzMTIuMSA4LjIgMzIyLjdMMzIyLjcgOC4yQzMxMi4xIDIuOSAzMDAuMiAwIDI4OCAwek0yMjQgNTEyYzIwLjUgMCA0MC4xLTguMSA1NC42LTIyLjZMNDg5LjQgMjc4LjZjMTQuNS0xNC41IDIyLjYtMzQuMSAyMi42LTU0LjYgMC0xMi4yLTIuOS0yNC4xLTguMi0zNC43TDE4OS4zIDUwMy44YzEwLjcgNS40IDIyLjYgOC4yIDM0LjcgOC4yek00NTYuNiAxNjguNmMzMS4yLTMxLjIgMzEuMi04MS45IDAtMTEzLjFzLTgxLjktMzEuMi0xMTMuMSAwbC0yODggMjg4Yy0zMS4yIDMxLjItMzEuMiA4MS45IDAgMTEzLjFzODEuOSAzMS4yIDExMy4xIDBsMjg4LTI4OHoiXQogICAgfTsKICAgIGZhQXJyb3dVcEZyb21CcmFja2V0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLWZyb20tYnJhY2tldCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMDlhIiwgIk0yNDYuNiA5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE5MiAxMDkuMyAxOTIgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yMTAuNyA3My40IDczLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOHpNNjQgMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgMzM0LjMgMCAzNTJsMCA2NGMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NHoiXQogICAgfTsKICAgIGZhTWljcm9zY29wZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtaWNyb3Njb3BlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzAwXSwgImY2MTAiLCAiTTE3NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDIwOGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNjQgMzIgMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOFMzOTAuNyA0NDggMzIwIDQ0OEwzMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2LjkgMGMzMC40LTM0IDQ4LjktNzguOCA0OC45LTEyOCAwLTEwNi04Ni0xOTItMTkyLTE5MmwtMzIgMCAwLTgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDE3NiAwek0xMjAgMzUyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNzYgMHoiXQogICAgfTsKICAgIGZhQ2xvdWQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTcyOV0sICJmMGMyIiwgIk0wIDMzNmMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NGwzMDQgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOCAwLTUxLjYtMzAuNS05Ni4xLTc0LjUtMTE2LjMgNi43LTEzLjEgMTAuNS0yOCAxMC41LTQzLjcgMC01My00My05Ni05Ni05Ni0xNy43IDAtMzQuMiA0LjgtNDguNCAxMy4xLTI0LjEtNDUuOC03Mi4yLTc3LjEtMTI3LjYtNzcuMS03OS41IDAtMTQ0IDY0LjUtMTQ0IDE0NCAwIDggLjcgMTUuOSAxLjkgMjMuNS01Ni45IDE5LjItOTcuOSA3My4xLTk3LjkgMTM2LjV6Il0KICAgIH07CiAgICBmYUJhc2ViYWxsQmF0QmFsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXNlYmFsbC1iYXQtYmFsbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNDMyIiwgIk00NjQuMSA1NDRhODAgODAgMCAxIDEgMC0xNjAgODAgODAgMCAxIDEgMCAxNjB6bTguNC01NzZjMTUuMSAwIDI5LjcgNS44IDQwLjcgMTYuMmw0Ny4yIDQ0LjhjMTIuNiAxMiAxOS4xIDI5IDE3LjUgNDYuMy0xLjIgMTMuMy03IDI1LjgtMTYuNSAzNS4yTDM2My4xIDMwOWMtNy4zIDcuMy0xNS43IDEzLjQtMjUgMThMMjA2IDM5M2MtOS4yIDQuNi0xNy43IDEwLjctMjUgMThsLTkyIDkyIDEuNyAxLjhjNy43IDkuNCA3LjEgMjMuMy0xLjcgMzIuMXMtMjIuNyA5LjMtMzIuMSAxLjdsLTEuOC0xLjctNDgtNDgtMS43LTEuOGMtNy43LTkuNC03LjEtMjMuMyAxLjctMzIuMXMyMi43LTkuMyAzMi4xLTEuN2wxLjggMS43IDkyLTkyYzcuMy03LjMgMTMuNC0xNS43IDE4LTI1bDY2LjEtMTMyLjFjNC42LTkuMiAxMC43LTE3LjcgMTgtMjVMNDMwLjgtMTQuN0M0NDEuOS0yNS44IDQ1Ni45LTMyIDQ3Mi41LTMyeiJdCiAgICB9OwogICAgZmFDYXJSZWFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhci1yZWFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNhci1hbHQiXSwgImY1ZGUiLCAiTTE2NS40IDk2bDE4MS4yIDBjMTMuNiAwIDI1LjcgOC42IDMwLjIgMjEuNGwyNi4xIDc0LjYtMjkzLjggMCAyNi4xLTc0LjZjNC41LTEyLjggMTYuNi0yMS40IDMwLjItMjEuNHptLTkwLjYgLjNMMzkuNiAxOTYuOEMxNi40IDIwNi40IDAgMjI5LjMgMCAyNTZsMCA5NmMwIDIzLjcgMTIuOSA0NC40IDMyIDU1LjRMMzIgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMiAyNTYgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC00MC42YzE5LjEtMTEuMSAzMi0zMS43IDMyLTU1LjRsMC05NmMwLTI2LjctMTYuNC00OS42LTM5LjYtNTkuMkw0MzcuMiA5Ni4zQzQyMy43IDU3LjggMzg3LjQgMzIgMzQ2LjYgMzJMMTY1LjQgMzJjLTQwLjggMC03Ny4xIDI1LjgtOTAuNiA2NC4zek0yMDggMjg4bDk2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC05NiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTQ4IDI4MGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwzMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0zMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMzYwLTI0bDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTMyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUNhckFsdCA9IGZhQ2FyUmVhcjsKICAgIGZhVGh1bWJ0YWNrU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGh1bWJ0YWNrLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInRodW1iLXRhY2stc2xhc2giXSwgImU2OGYiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDE3LjggMzUyIDQ0OCAzNTJjMTAgMCAxOS41LTQuNyAyNS41LTEyLjdzOC0xOC40IDUuMi0yOC4xTDQ3NSAyOTcuOGMtMTIuNC00My4zLTQxLTc4LjUtNzguMi05OS43TDM4Ni41IDY0IDQxNiA2NGMxNy43IDAgMzItMTQuMyAzMi0zMlM0MzMuNyAwIDQxNiAwTDE2MCAwYy03LjQgMC0xNC4xIDIuNS0xOS41IDYuNkwxOTAuMSA1Ni4zIDE4NS4zIDExOS40IDQxLTI0Ljl6TTI4Mi4yIDM1MkwxNDkuNyAyMTkuNmMtMjIuNyAyMC41LTM5LjggNDcuNC00OC43IDc4LjNsLTMuOCAxMy40Yy0yLjggOS43LS44IDIwIDUuMiAyOC4xUzExOCAzNTIgMTI4IDM1MmwxNTQuMiAwek0yNTYgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMTItNjQgMCAwIDExMnoiXQogICAgfTsKICAgIGZhVGh1bWJUYWNrU2xhc2ggPSBmYVRodW1idGFja1NsYXNoOwogICAgZmFQbHVzTWludXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1cy1taW51cyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNDNjIiwgIk0yMjQgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxMjgtMTI4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTI4IDAgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTI4IDAgMC0xMjh6TTAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6Il0KICAgIH07CiAgICBmYUhvdXNlQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MDkiLCAiTTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMSAwLTI4OCAxNDQgMTQ0IDAgMSAxIDAgMjg4ek0yNjguNiA2LjVjMTIuMi05LjMgMjkuNy04LjcgNDEuMiAybDIxNy42IDIwMmMtMTAuMi0xLjctMjAuNy0yLjYtMzEuMy0yLjYtNzguNiAwLTE0Ni4xIDQ3LjItMTc1LjggMTE0LjgtNS4xLTEuOC0xMC41LTIuOC0xNi4yLTIuOGwtMzIgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NiA5MSAwYzYuMSAxNy4zIDE0LjYgMzMuNCAyNS4xIDQ4TDE0NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOCAyLjQtMnpNNTUzLjQgMzM5LjFjLTcuMS01LjItMTcuMS0zLjYtMjIuMyAzLjVsLTUzIDcyLjgtMjYuNy0yNi44Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMC02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmw0MCA0MGMzLjMgMy4zIDcuOSA1IDEyLjYgNC43czguOS0yLjggMTEuNy02LjZsNjQtODhjNS4yLTcuMSAzLjYtMTcuMS0zLjUtMjIuM3oiXQogICAgfTsKICAgIGZhQ2FsZW5kYXJEYXkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXItZGF5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3ODMiLCAiTTEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgMTI4IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzIgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMCAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAweiJdCiAgICB9OwogICAgZmFDaXJjbGUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODMwOCwgMTI4MzA5LCAxMjg5OTIsIDEyODk5MywgMTI4OTk0LCAxMjg5OTUsIDEyODk5NiwgOTY3OSwgOTg5OCwgOTg5OSwgMTEwNDQsIDYxNzA4LCA2MTkxNV0sICJmMTExIiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdCiAgICB9OwogICAgZmFNb2JpbGVWaWJyYXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vYmlsZS12aWJyYXRlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU4MTYiLCAiTTM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0xOTIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zODRjMC0zNS4zIDI4LjctNjQgNjQtNjRMMzg0IDB6TTI0OCA0MTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMHpNNDguOCAxMzMuNGM5LjQtNy43IDIzLjMtNy4xIDMyLjEgMS43IDkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC0zMSAzMSAyNS40IDI1LjQgMi45IDMuMmM2LjMgNy43IDkuOCAxNy40IDkuOCAyNy40IDAgMTEuNS00LjYgMjIuNS0xMi43IDMwLjZsLTI1LjQgMjUuNCAzMSAzMSAxLjcgMS44YzcuNyA5LjQgNy4xIDIzLjMtMS43IDMyLjFzLTIyLjcgOS4zLTMyLjEgMS43TDQ3IDM3NyAxMi43IDM0Mi42QzUuNiAzMzUuNSAxLjIgMzI2LjIgLjIgMzE2LjNMMCAzMTIgLjIgMzA3LjdjMS05LjkgNS40LTE5LjIgMTIuNS0yNi4zTDM4LjEgMjU2IDEyLjcgMjMwLjZDNS42IDIyMy41IDEuMiAyMTQuMiAuMiAyMDQuM0wwIDIwMCAuMiAxOTUuN2MxLTkuOSA1LjQtMTkuMiAxMi41LTI2LjNMNDcgMTM1IDQ4LjggMTMzLjR6TTQ5NSAxMzVjOC44LTguOCAyMi43LTkuMyAzMi4xLTEuN2wxLjggMS43IDM0LjMgMzQuM2M3LjEgNy4xIDExLjUgMTYuNCAxMi41IDI2LjNsLjIgNC4zLS4yIDQuM2MtMSA5LjktNS40IDE5LjItMTIuNSAyNi4zbC0yNS40IDI1LjQgMjUuNCAyNS40YzcuMSA3LjEgMTEuNSAxNi40IDEyLjUgMjYuM2wuMiA0LjMtLjIgNC4zYy0xIDkuOS01LjQgMTkuMi0xMi41IDI2LjNsLTM0LjMgMzQuMy0xLjggMS43Yy05LjQgNy43LTIzLjMgNy4xLTMyLjEtMS43cy05LjMtMjIuNy0xLjctMzIuMWwxLjctMS44IDMxLTMxLTI1LjQtMjUuNGMtOC4xLTguMS0xMi43LTE5LjEtMTIuNy0zMC42IDAtMTAgMy41LTE5LjcgOS44LTI3LjRsMi45LTMuMiAyNS40LTI1LjQtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45eiJdCiAgICB9OwogICAgZmFGYWNlR3JpblNxdWludDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXNxdWludCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUxOCwgImdyaW4tc3F1aW50Il0sICJmNTg1IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzg2LjcgMzA4LjljMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTIyLjQgNjEuMy04MS4zIDEwNS4xLTE1MC4zIDEwNS4xUzEyOC4xIDM4OC4yIDEwNS43IDMyNi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjF6TTEyMi42IDE0My4yYzQuNS02LjggMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMTkyIDEyNS44IDE2NC4zYy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xem0yNjMuNiAyMS4xTDM1MyAxOTIgMzg2LjIgMjE5LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjVzMy4xIDE1LjktMy4xIDIxLjF6Il0KICAgIH07CiAgICBmYUdyaW5TcXVpbnQyID0gZmFGYWNlR3JpblNxdWludDI7CiAgICBmYVVzZXJzQmV0d2VlbkxpbmVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXJzLWJldHdlZW4tbGluZXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU5MSIsICJNMjQgMTZsNTI4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNjRDMTAuNyA2NCAwIDUzLjMgMCA0MFMxMC43IDE2IDI0IDE2em0wIDQ0OGw1MjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6TTM5MiAxOTJhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwem0yNy4yIDEwMC40YzkuMS0yLjkgMTguOC00LjQgMjguOC00LjQgNTMgMCA5NiA0MyA5NiA5NmwwIDEwLjdjMCAxMS44LTkuNiAyMS4zLTIxLjMgMjEuM2wtNzguOCAwYzIuNy03LjUgNC4xLTE1LjYgNC4xLTI0bDAtOGMwLTM0LjEtMTAuNi02NS43LTI4LjgtOTEuNnptLTI2Mi40IDBDMTM4LjYgMzE4LjMgMTI4IDM0OS45IDEyOCAzODRsMCA4YzAgOC40IDEuNCAxNi41IDQuMSAyNGwtNzguOCAwQzQxLjYgNDE2IDMyIDQwNi40IDMyIDM5NC43TDMyIDM4NGMwLTUzIDQzLTk2IDk2LTk2IDEwIDAgMTkuNyAxLjUgMjguOCA0LjR6TTcyIDE5MmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bTE1Mi0xNmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6TTE3NiAzODRjMC02MS45IDUwLjEtMTEyIDExMi0xMTJzMTEyIDUwLjEgMTEyIDExMmwwIDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTE3NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTh6Il0KICAgIH07CiAgICBmYUhvdXNlTWVkaWNhbENpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLW1lZGljYWwtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MTMiLCAiTTMwOS44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTNTAuOCAyNzIgNjQgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTk2IDBjLTIxLjItMjkuNS0zNC4zLTY1LjMtMzUuOS0xMDRMMjcyIDQwOGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCAyMCAwYzM0LjktNDguNSA5MS43LTgwIDE1Ni04MCAxMC43IDAgMjEuMSAuOSAzMS4zIDIuNUwzMDkuOCA4LjZ6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0yMi42LTE0NGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZMNTE4LjYgNDAweiJdCiAgICB9OwogICAgZmFUYWJsZUxpc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtbGlzdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ0aC1saXN0Il0sICJmMDBiIiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptNjQgMGwwIDY0IDY0IDAgMC02NC02NCAwem0zMjAgMGwtMTkyIDAgMCA2NCAxOTIgMCAwLTY0ek02NCAyMjRsMCA2NCA2NCAwIDAtNjQtNjQgMHptMzIwIDBsLTE5MiAwIDAgNjQgMTkyIDAgMC02NHpNNjQgMzUybDAgNjQgNjQgMCAwLTY0LTY0IDB6bTMyMCAwbC0xOTIgMCAwIDY0IDE5MiAwIDAtNjR6Il0KICAgIH07CiAgICBmYVRoTGlzdCA9IGZhVGFibGVMaXN0OwogICAgZmFGbGFza1ZpYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmxhc2stdmlhbCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGYzIiwgIk0xODQuNiA0MTEuNWMtMy4xIDcuMy01LjQgMTQuOS02LjggMjIuNi0xNC41IDguOC0zMS41IDEzLjktNDkuOCAxMy45LTUzIDAtOTYtNDMtOTYtOTZMMzIgNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMlMxNC4zIDAgMzIgMEwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDI1NS42LTM5LjQgOTEuOXpNOTYgNjRsMCAxMjggNjQgMCAwLTEyOC02NCAwek0zNTIgMEw1MTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDE1My40IDkxLjMgMjEzYzIuMyA1LjQgMy44IDExLjEgNC40IDE3bC4zIC42LS4zIDBjLjIgMS44IC4zIDMuNiAuMyA1LjQgMCAzMi4zLTI2LjIgNTguNi01OC42IDU4LjZsLTI2Ni45IDBjLTMyLjMgMC01OC42LTI2LjItNTguNi01OC42IDAtMS44IC4xLTMuNiAuMy01LjRsLS4zIDAgLjMtLjZjLjYtNS44IDIuMS0xMS42IDQuNC0xN0wzMjAgMjE3LjQgMzIwIDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlMzMDIuMyAwIDMyMCAwbDMyIDB6TTQ1My4yIDI0Mi42Yy0zLjQtOC01LjItMTYuNS01LjItMjUuMmwwLTE1My40LTY0IDAgMCAxNTMuNGMwIDguNy0xLjggMTcuMi01LjIgMjUuMmwtMzMuMiA3Ny40IDE0MC43IDAtMzMuMi03Ny40eiJdCiAgICB9OwogICAgZmFDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZXhjbGFtYXRpb24tY2lyY2xlIl0sICJmMDZhIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDEgMSAwIDUxMnptMC0xOTJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wLTE5MmMtMTguMiAwLTMyLjcgMTUuNS0zMS40IDMzLjdsNy40IDEwNGMuOSAxMi42IDExLjQgMjIuMyAyMy45IDIyLjMgMTIuNiAwIDIzLTkuNyAyMy45LTIyLjNsNy40LTEwNGMxLjMtMTguMi0xMy4xLTMzLjctMzEuNC0zMy43eiJdCiAgICB9OwogICAgZmFFeGNsYW1hdGlvbkNpcmNsZSA9IGZhQ2lyY2xlRXhjbGFtYXRpb247CiAgICBmYVRheGkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGF4aSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODY2MiwgImNhYiJdLCAiZjFiYSIsICJNMTkyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItOC45IDBjLTQyIDAtNzkuMSAyNy4zLTkxLjYgNjcuNGwtMjMgNzMuNUMxNC41IDIxOS4xIDAgMjQzLjkgMCAyNzJMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyIDMyMCAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE3NmMwLTI4LjEtMTQuNS01Mi45LTM2LjQtNjcuMWwtMjMtNzMuNUM0NDAuMSA5MS4zIDQwMi45IDY0IDM2MC45IDY0bC04LjkgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE5MiAwek0xNTEuMSAxMjhsMjA5LjkgMGMxNCAwIDI2LjQgOS4xIDMwLjUgMjIuNWwxMyA0MS41LTI5Ni45IDAgMTMtNDEuNWM0LjItMTMuNCAxNi41LTIyLjUgMzAuNS0yMi41ek05NiAyNzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0yODggMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhQ2FiID0gZmFUYXhpOwogICAgZmFUZXh0U2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGV4dC1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJyZW1vdmUtZm9ybWF0Il0sICJmODdkIiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDMyMi43IDI1Ni45IDM2OC4yIDk2IDQ3MSA5NiA0NjUgMTIwLjJjLTQuMyAxNy4xIDYuMSAzNC41IDIzLjMgMzguOHMzNC41LTYuMSAzOC44LTIzLjNsMTEtNDQuMUM1NDUuNiA2MS4zIDUyMi43IDMyIDQ5MS41IDMybC0zMTkgMGMtMTkuOCAwLTM3LjMgMTIuMS00NC41IDMwLjFsLTg3LTg3ek0xODAuNCAxMTQuNWw0LjYtMTguNSAxMTYuNyAwLTMwLjggMTA5LTkwLjUtOTAuNXpNMjQxIDMxMC44TDIxMS4zIDQxNiAxNjAgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00Mi4yIDAgMTUuMS01My4zLTUxLjktNTEuOXoiXQogICAgfTsKICAgIGZhUmVtb3ZlRm9ybWF0ID0gZmFUZXh0U2xhc2g7CiAgICBmYVBlb3BsZVB1bGxpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVvcGxlLXB1bGxpbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUzNSIsICJNODAgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyIDkuOCAwIDE4LjUtNC40IDI0LjQtMTEuMkw4MC40IDQ4NS4zYzIuOSAxNy40IDE5LjQgMjkuMiAzNi44IDI2LjNzMjkuMi0xOS40IDI2LjMtMzYuOGwtMjAuNS0xMjIuNyAxNS43IDAgMzAgMTM0LjljMy44IDE3LjMgMjAuOSAyOC4xIDM4LjIgMjQuM3MyOC4xLTIwLjkgMjQuMy0zOC4ybC01Ny4zLTI1OCAxMTYuMyA1My44Yy41IC4zIDEuMSAuNSAxLjYgLjcgOC42IDMuNiAxOCAzLjEgMjUuOS0uNyAzLjQtMS42IDYuNi0zLjkgOS4zLTYuNyAzLjEtMy4yIDUuNS03IDcuMS0xMS40IC4xLS4zIC4yLS43IC4zLTFsMi41LTcuNWM1LjctMTcuMSAxOC4zLTMwLjkgMzQuNy0zOC4ybDgtMy41YzEtLjQgMS45LS44IDIuOS0xLjJsLTE2LjkgNjMuNWMtNS42IDIxLjEtLjEgNDMuNiAxNC43IDU5LjdsNzAuNyA3Ny4xIDIyIDg4LjFjNC4zIDE3LjEgMjEuNyAyNy42IDM4LjggMjMuM3MyNy42LTIxLjcgMjMuMy0zOC44bC0yMy05Mi4xYy0xLjktNy44LTUuOC0xNC45LTExLjItMjAuOGwtNDkuNS01NCAxOS4zLTY1LjUgOS42IDIzYzQuNCAxMC42IDEyLjUgMTkuMyAyMi44IDI0LjVsMjYuNyAxMy4zYzE1LjggNy45IDM1IDEuNSA0Mi45LTE0LjNzMS41LTM1LTE0LjMtNDIuOWwtMjEuNC0xMC43LTE1LjMtMzYuOGMtMTcuMS00MS4xLTU3LjMtNjcuOS0xMDEuOS02Ny45LTIyLjggMC00NS4zIDQuOC02Ni4xIDE0bC04IDMuNWMtMjQuNCAxMC45LTQ0LjYgMjktNTguMSA1MS42TDE1Ny4zIDEzNi45QzE0NC43IDEzMSAxMzAuOSAxMjggMTE3IDEyOGwtNTMgMHpNNDY0IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMzQ5LjcgMzM1LjZsLTI1IDYyLjQtNTkuNCA1OS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDM3Mi4zIDQ0MWM0LjYtNC42IDguMi0xMC4xIDEwLjYtMTYuMWwxNC41LTM2LjItNDAuNy00NC40Yy0yLjUtMi43LTQuOC01LjYtNy04LjZ6Il0KICAgIH07CiAgICBmYUJhY2t3YXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhY2t3YXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTE5NF0sICJmMDRhIiwgIk0yMDQuMyA0My4xQzIxNS45IDMyIDIzMyAyOC45IDI0Ny43IDM1LjJTMjcyIDU2IDI3MiA3MmwwIDEzNi4zIDE3Mi4zLTE2NS4xQzQ1NS45IDMyIDQ3MyAyOC45IDQ4Ny43IDM1LjJTNTEyIDU2IDUxMiA3MmwwIDM2OGMwIDE2LTkuNiAzMC41LTI0LjMgMzYuOHMtMzEuOCAzLjItNDMuNC03LjlMMjcyIDMwMy43IDI3MiA0NDBjMCAxNi05LjYgMzAuNS0yNC4zIDM2LjhzLTMxLjggMy4yLTQzLjQtNy45bC0xOTItMTg0QzQuNSAyNzcuMyAwIDI2Ni45IDAgMjU2czQuNS0yMS4zIDEyLjMtMjguOWwxOTItMTg0eiJdCiAgICB9OwogICAgZmFDYXJCdXJzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXItYnVyc3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiY2FyLWNyYXNoIl0sICJmNWUxIiwgIk0yMzIgMTYuMWwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHpNMzIgMTY4LjFsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHpNMjgxLjUgNzAuNmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGwzMy45LTMzLjljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEwyODEuNSAzNi42Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXptLTE4MSAyMTVsMzMuOS0zMy45YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMNjYuNiAyNTEuNmMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwek02Ni42IDIuN2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsMzMuOSAzMy45YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUwxMDAuNSAyLjdDOTEuMS02LjcgNzYtNi43IDY2LjYgMi43ek0zNTIuOSAxNzUuNEw1MDUgMjE2LjJjNi40IDEuNyAxMS4xIDcuMyAxMS44IDEzLjlsNy4yIDc0LTIzMS41LTYyIDQzLjItNjAuNWMzLjktNS40IDEwLjctNy45IDE3LjItNi4yek0yMjMuNiAyMjguNWwtMi4xIDIuOWMtMjEuNyA1LjUtMzkuOSAyMi4zLTQ2LjEgNDUuNS00LjEgMTUuNS0xMi40IDQ2LjQtMjQuOCA5Mi43bC04LjMgMzAuOWMtNC42IDE3LjEgNS42IDM0LjYgMjIuNiAzOS4ybDE1LjUgNC4xYzE3LjEgNC42IDM0LjYtNS42IDM5LjItMjIuNmw4LjMtMzAuOSAyNzguMiA3NC41LTguMyAzMC45Yy00LjYgMTcuMSA1LjYgMzQuNiAyMi42IDM5LjJsMTUuNSA0LjFjMTcuMSA0LjYgMzQuNi01LjYgMzkuMi0yMi42IDQuMS0xNS41IDEyLjQtNDYuNCAyNC44LTkyLjdsOC4zLTMwLjljNi4yLTIzLjItMS4xLTQ2LjgtMTcuMi02Mi41bC0uMy0zLjYtMTAtMTAzYy0zLjItMzMuMi0yNi43LTYwLjktNTguOS02OS41TDM2OS41IDExMy42Yy0zMi4yLTguNi02Ni40IDMuNi04NS44IDMwLjhsLTYwLjIgODQuMnptNDguNyA1Ny44YTMyIDMyIDAgMSAxIC0xNi42IDYxLjggMzIgMzIgMCAxIDEgMTYuNi02MS44em0yMDguMSA4OC45YTMyIDMyIDAgMSAxIDYxLjggMTYuNiAzMiAzMiAwIDEgMSAtNjEuOC0xNi42eiJdCiAgICB9OwogICAgZmFDYXJDcmFzaCA9IGZhQ2FyQnVyc3Q7CiAgICBmYUxpbmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGluayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODI3OSwgImNoYWluIl0sICJmMGMxIiwgIk00MTkuNSA5NmMtMTYuNiAwLTMyLjcgNC41LTQ2LjggMTIuNy0xNS44LTE2LTM0LjItMjkuNC01NC41LTM5LjUgMjguMi0yNCA2NC4xLTM3LjIgMTAxLjMtMzcuMiA4Ni40IDAgMTU2LjUgNzAgMTU2LjUgMTU2LjUgMCA0MS41LTE2LjUgODEuMy00NS44IDExMC42bC03MS4xIDcxLjFjLTI5LjMgMjkuMy02OS4xIDQ1LjgtMTEwLjYgNDUuOC04Ni40IDAtMTU2LjUtNzAtMTU2LjUtMTU2LjUgMC0xLjUgMC0zIC4xLTQuNSAuNS0xNy43IDE1LjItMzEuNiAzMi45LTMxLjFzMzEuNiAxNS4yIDMxLjEgMzIuOWMwIC45IDAgMS44IDAgMi42IDAgNTEuMSA0MS40IDkyLjUgOTIuNSA5Mi41IDI0LjUgMCA0OC05LjcgNjUuNC0yNy4xbDcxLjEtNzEuMWMxNy4zLTE3LjMgMjcuMS00MC45IDI3LjEtNjUuNCAwLTUxLjEtNDEuNC05Mi41LTkyLjUtOTIuNXpNMjc1LjIgMTczLjNjLTEuOS0uOC0zLjgtMS45LTUuNS0zLjEtMTIuNi02LjUtMjctMTAuMi00Mi4xLTEwLjItMjQuNSAwLTQ4IDkuNy02NS40IDI3LjFMOTEuMSAyNTguMmMtMTcuMyAxNy4zLTI3LjEgNDAuOS0yNy4xIDY1LjQgMCA1MS4xIDQxLjQgOTIuNSA5Mi41IDkyLjUgMTYuNSAwIDMyLjYtNC40IDQ2LjctMTIuNiAxNS44IDE2IDM0LjIgMjkuNCA1NC42IDM5LjUtMjguMiAyMy45LTY0IDM3LjItMTAxLjMgMzcuMi04Ni40IDAtMTU2LjUtNzAtMTU2LjUtMTU2LjUgMC00MS41IDE2LjUtODEuMyA0NS44LTExMC42bDcxLjEtNzEuMWMyOS4zLTI5LjMgNjkuMS00NS44IDExMC42LTQ1LjggODYuNiAwIDE1Ni41IDcwLjYgMTU2LjUgMTU2LjkgMCAxLjMgMCAyLjYgMCAzLjktLjQgMTcuNy0xNS4xIDMxLjYtMzIuOCAzMS4ycy0zMS42LTE1LjEtMzEuMi0zMi44YzAtLjggMC0xLjUgMC0yLjMgMC0zMy43LTE4LTYzLjMtNDQuOC03OS42eiJdCiAgICB9OwogICAgZmFDaGFpbiA9IGZhTGluazsKICAgIGZhQmFja3dhcmRTdGVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhY2t3YXJkLXN0ZXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsic3RlcC1iYWNrd2FyZCJdLCAiZjA0OCIsICJNMzYzIDM2LjhjLTEyLjktNy0yOC43LTYuMy00MSAxLjhMNjQgMjA4LjEgNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE0NC4xIDI1OCAxNjkuNmMxMi4zIDguMSAyOCA4LjggNDEgMS44czIxLTIwLjUgMjEtMzUuMmwwLTM2OGMwLTE0LjctOC4xLTI4LjItMjEtMzUuMnoiXQogICAgfTsKICAgIGZhU3RlcEJhY2t3YXJkID0gZmFCYWNrd2FyZFN0ZXA7CiAgICBmYVggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAieCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyMF0sICI1OCIsICJNMzc2LjYgODQuNWMxMS4zLTEzLjYgOS41LTMzLjgtNC4xLTQ1LjFzLTMzLjgtOS41LTQ1LjEgNC4xTDE5MiAyMDYgNTYuNiA0My41QzQ1LjMgMjkuOSAyNS4xIDI4LjEgMTEuNSAzOS40Uy0zLjkgNzAuOSA3LjQgODQuNUwxNTAuMyAyNTYgNy40IDQyNy41Yy0xMS4zIDEzLjYtOS41IDMzLjggNC4xIDQ1LjFzMzMuOCA5LjUgNDUuMS00LjFMMTkyIDMwNiAzMjcuNCA0NjguNWMxMS4zIDEzLjYgMzEuNSAxNS40IDQ1LjEgNC4xczE1LjQtMzEuNSA0LjEtNDUuMUwyMzMuNyAyNTYgMzc2LjYgODQuNXoiXQogICAgfTsKICAgIGZhQ2lyY2xlVXNlcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXVzZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjE0MiwgInVzZXItY2lyY2xlIl0sICJmMmJkIiwgIk0zOTkgMzg0LjJDMzc2LjkgMzQ1LjggMzM1LjQgMzIwIDI4OCAzMjBsLTY0IDBjLTQ3LjQgMC04OC45IDI1LjgtMTExIDY0LjIgMzUuMiAzOS4yIDg2LjIgNjMuOCAxNDMgNjMuOHMxMDcuOC0yNC43IDE0My02My44ek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNTYgMTZhNzIgNzIgMCAxIDAgMC0xNDQgNzIgNzIgMCAxIDAgMCAxNDR6Il0KICAgIH07CiAgICBmYVVzZXJDaXJjbGUyID0gZmFDaXJjbGVVc2VyMjsKICAgIGZhUmVjdGFuZ2xlTGlzdDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVjdGFuZ2xlLWxpc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGlzdC1hbHQiXSwgImYwMjIiLCAiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0em05NiAyNTZhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHptLTMyLTk2YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptMTIwLTU2bDE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMCAxMjhsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFMaXN0QWx0MiA9IGZhUmVjdGFuZ2xlTGlzdDI7CiAgICBmYUhhbmQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzMDYsIDk5OTUsICJoYW5kLXBhcGVyIl0sICJmMjU2IiwgIk0yODggMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0xNzZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyNzJjMCAxLjUgMCAzLjEgLjEgNC42TDY3LjYgMjgzYy0xNi0xNS4yLTQxLjMtMTQuNi01Ni42IDEuNFMtMy42IDMyNS43IDEyLjQgMzQxTDEyNC44IDQ0OGM0My4xIDQxLjEgMTAwLjQgNjQgMTYwIDY0bDE5LjIgMGM5Ny4yIDAgMTc2LTc4LjggMTc2LTE3NmwwLTIwOGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDExMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTIwOHoiXQogICAgfTsKICAgIGZhSGFuZFBhcGVyMiA9IGZhSGFuZDI7CiAgICBmYVZhblNodXR0bGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmFuLXNodXR0bGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg2NTYsICJzaHV0dGxlLXZhbiJdLCAiZjViNiIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzMzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsLjQgMGM0IDQ0LjkgNDEuNyA4MCA4Ny42IDgwczgzLjYtMzUuMSA4Ny42LTgwbDEwNC43IDBjNCA0NC45IDQxLjcgODAgODcuNiA4MCA0Ni4xIDAgODMuOS0zNS40IDg3LjctODAuNSAzMS43LTMuOCA1Ni4zLTMwLjggNTYuMy02My41bDAtMTAxLjNjMC0xMy44LTQuNS0yNy4zLTEyLjgtMzguNGwtODAtMTA2LjdDNDcxLjEgNzMuNSA0NTIuMSA2NCA0MzIgNjRMNjQgNjR6TTUwNCAyMjRsLTEyMCAwIDAtOTYgNDggMCA3MiA5NnpNNjQgMjI0bDAtOTYgOTYgMCAwIDk2LTk2IDB6bTE2MCAwbDAtOTYgOTYgMCAwIDk2LTk2IDB6TTM5MiAzOTJhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMTUyIDM1MmE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6Il0KICAgIH07CiAgICBmYVNodXR0bGVWYW4gPSBmYVZhblNodXR0bGU7CiAgICBmYVN0YWlycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFpcnMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTI4OSIsICJNMzg0IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwIDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5NiAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDAgMC05NnoiXQogICAgfTsKICAgIGZhSG9yc2VIZWFkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvcnNlLWhlYWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdhYiIsICJNMCA0NjRMMCAzMTYuOUMwIDIwOC41IDY4LjMgMTExLjggMTcwLjUgNzUuNkwzNDAuMiAxNS41YzIxLjQtNy42IDQzLjggOC4zIDQzLjggMzAuOSAwIDExLTUuNSAyMS4yLTE0LjYgMjcuM0wzMzYgOTZjNDguMSAwIDkxLjIgMjkuOCAxMDguMSA3NC45bDQ4LjYgMTI5LjVjMTEuOCAzMS40IDQuMSA2Ni44LTE5LjYgOTAuNS0xNiAxNi0zNy44IDI1LjEtNjAuNSAyNS4xbC0zLjQgMGMtMjYuMSAwLTUwLjktMTEuNi02Ny42LTMxLjdsLTMyLjMtMzguN2MtMTEuNyA0LjEtMjQuMiA2LjQtMzcuMyA2LjRsLS4xIDBjLTYuMyAwLTEyLjUtLjUtMTguNi0xLjUtMy42LS42LTcuMi0xLjQtMTAuNy0yLjNsMCAwYy0yOC45LTcuOC01My4xLTI2LjgtNjcuOC01Mi4yLTQuNC03LjctMTQuMi0xMC4zLTIxLjktNS44cy0xMC4zIDE0LjItNS44IDIxLjljMjQgNDEuNSA2OC4zIDcwIDExOS4zIDcxLjlsNDcuMiA3MC44YzQgNi4xIDYuMiAxMy4yIDYuMiAyMC40IDAgMjAuMy0xNi41IDM2LjgtMzYuOCAzNi44TDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6TTMyOCAyMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFWYXVsdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2YXVsdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMmM1IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0IDAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMjU2IDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjU2IDI1NmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6TTY0IDI1NmExMjggMTI4IDAgMSAxIDI1NiAwIDEyOCAxMjggMCAxIDEgLTI1NiAwem0zODQtNDhjMCAxNy44LTkuNyAzMy4zLTI0IDQxLjZsMCA3OC40YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNzguNGMtMTQuMy04LjMtMjQtMjMuOC0yNC00MS42IDAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh6Il0KICAgIH07CiAgICBmYURydW1TdGVlbHBhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkcnVtLXN0ZWVscGFuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1NmEiLCAiTTI4OCAzMmMxNTkuMSAwIDI4OCA0OCAyODggMTI4bDAgMTkyYzAgODAtMTI4LjkgMTI4LTI4OCAxMjhTMCA0MzIgMCAzNTJMMCAxNjBDMCA4MCAxMjguOSAzMiAyODggMzJ6TTUyOCAxNjBjMC05LjktOC0yOS45LTU1LTQ5LjgtMTguNi03LjktNDAuOS0xNC40LTY2LTE5LjRsLTI3LjggNDMuNmMtNy4zIDExLjUtMTEuMiAyNC44LTExLjIgMzguNCAwIDE3LjUgNi40IDM0LjQgMTguMSA0Ny41bDkuOCAxMWMyOS44LTUuMiA1NS45LTEyLjUgNzcuMi0yMS41IDQ3LjEtMTkuOSA1NS0zOS45IDU1LTQ5Ljh6TTM0OS4yIDIzNy4zYy04LTI2LjItMzIuNC00NS4zLTYxLjItNDUuM3MtNTMuMyAxOS4xLTYxLjIgNDUuM2MxOS40IDEuNyAzOS45IDIuNyA2MS4yIDIuN3M0MS44LS45IDYxLjItMi43ek0xNjkgOTAuOGMtMjUuMiA1LTQ3LjQgMTEuNi02NiAxOS40LTQ3LjEgMTkuOS01NSAzOS45LTU1IDQ5LjhzOCAyOS45IDU1IDQ5LjhjMjEuMyA5IDQ3LjQgMTYuMyA3Ny4yIDIxLjVsOS44LTExYzExLjYtMTMuMSAxOC4xLTMwIDE4LjEtNDcuNSAwLTEzLjYtMy45LTI2LjktMTEuMi0zOC40TDE2OSA5MC44em01Ni4zLThjLS45IDQuMy0xLjQgOC43LTEuNCAxMy4yIDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC00LjUtLjUtOS0xLjQtMTMuMi0xOS44LTEuOC00MC44LTIuOC02Mi42LTIuOHMtNDIuOCAxLTYyLjYgMi44eiJdCiAgICB9OwogICAgZmFUaHVtYnNVcDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGh1bWJzLXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MDc3LCA2MTU3NV0sICJmMTY0IiwgIk04MCAxNjBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTQ4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDAgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDQ4IDB6TTI3MC42IDE2QzI5Ny45IDE2IDMyMCAzOC4xIDMyMCA2NS40bDAgNC4yYzAgNi44LTEuMyAxMy42LTMuOCAxOS45TDI4OCAxNjAgNDQ4IDE2MGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDE5LjctMTEuOSAzNi42LTI4LjkgNDQgMTcgNy40IDI4LjkgMjQuMyAyOC45IDQ0IDAgMjMuNC0xNi44IDQyLjktMzkgNDcuMSA0LjQgNy4zIDcgMTUuOCA3IDI0LjkgMCAyMi4yLTE1IDQwLjgtMzUuNCA0Ni4zIDIuMiA1LjUgMy40IDExLjUgMy40IDE3LjcgMCAyNi41LTIxLjUgNDgtNDggNDhsLTg3LjkgMGMtMzYuMyAwLTcxLjYtMTIuNC05OS45LTM1LjFMMTg0IDQzNS4yYy0xNS4yLTEyLjEtMjQtMzAuNS0yNC01MGwwLTE4Ni42YzAtMTQuOSAzLjUtMjkuNiAxMC4xLTQyLjlMMjI2LjMgNDMuM0MyMzQuNyAyNi42IDI1MS44IDE2IDI3MC42IDE2eiJdCiAgICB9OwogICAgZmFTdGFtcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFtcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWJmIiwgIk0zMTIgMjAxLjhjMC0xNy40IDkuMi0zMy4yIDE5LjktNDcgMTIuNi0xNi4yIDIwLjEtMzYuNiAyMC4xLTU4LjggMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZjMCAyMi4xIDcuNSA0Mi41IDIwLjEgNTguOCAxMC43IDEzLjggMTkuOSAyOS42IDE5LjkgNDcgMCAyOS45LTI0LjMgNTQuMi01NC4yIDU0LjJMMTEyIDI1NmMtNjEuOSAwLTExMiA1MC4xLTExMiAxMTIgMCAyNi41IDIxLjUgNDggNDggNDhsNDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDggMC02MS45LTUwLjEtMTEyLTExMi0xMTJsLTMzLjggMGMtMjkuOSAwLTU0LjItMjQuMy01NC4yLTU0LjJ6TTU2IDQ2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw1NiA0NjR6Il0KICAgIH07CiAgICBmYU1lbm9yYWggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWVub3JhaCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNjc2IiwgIk0yMC44IDcuNEMyMi44IDIuOSAyNy4xIDAgMzIgMHM5LjIgMi45IDExLjIgNy40TDYxLjMgNDkuN2MxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFMNjQgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA4MS43IDAgNjRsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xTDIwLjggNy40em05NiAwQzExOC44IDIuOSAxMjMuMSAwIDEyOCAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMWwwIDEuMmMwIDE3LjctMTQuMyAzMi0zMiAzMlM5NiA4MS43IDk2IDY0bDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMUwxMTYuOCA3LjR6bTc3LjggNDIuNEwyMTIuOCA3LjRDMjE0LjggMi45IDIxOS4xIDAgMjI0IDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMXpNMzA4LjggNy40QzMxMC44IDIuOSAzMTUuMSAwIDMyMCAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMWwwIDEuMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjFMMzA4LjggNy40em03Ny44IDQyLjRMNDA0LjggNy40QzQwNi44IDIuOSA0MTEuMSAwIDQxNiAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMWwwIDEuMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjF6TTUwMC44IDcuNEM1MDIuOCAyLjkgNTA3LjEgMCA1MTIgMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFsMCAxLjJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xTDUwMC44IDcuNHptNzcuOCA0Mi40TDU5Ni44IDcuNEM1OTguOCAyLjkgNjAzLjEgMCA2MDggMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFsMCAxLjJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xek0zMiAxMjhjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTkyIDAgMC0xNjBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE2MCAxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTI4YzAgNTMtNDMgOTYtOTYgOTZsLTE5MiAwIDAgNjQgMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyMCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDEyOCAwIDAtNjQtMTkyIDBjLTUzIDAtOTYtNDMtOTYtOTZMMCAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjgtNjQgMCAwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOC02NCAwIDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOC02NCAwIDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyem05NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4LTY0IDAgMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUNoaWxkcmVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoaWxkcmVuIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZTEiLCAiTTE2MC41IDBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6bS03MiA0ODBsMC04MC0xNy44IDBjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xTDg2LjcgMjg1LjUgNTggMzIzLjNjLTEwLjcgMTQuMS0zMC44IDE2LjgtNDQuOCA2LjJTLTMuNyAyOTguNyA3IDI4NC43TDY1LjkgMjA3YzIyLjQtMjkuNiA1Ny41LTQ3IDk0LjYtNDdzNzIuMiAxNy40IDk0LjYgNDdMMzE0IDI4NC43YzEwLjcgMTQuMSA3LjkgMzQuMi02LjIgNDQuOHMtMzQuMiA3LjktNDQuOC02LjJsLTI4LjctMzcuOCAzMS4xIDkzLjRjMy41IDEwLjQtNC4zIDIxLjEtMTUuMiAyMS4xbC0xNy44IDAgMCA4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTgwLTE2IDAgMCA4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnpNNDgwLjUgMGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptLTggMzg0bDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNzkuNS0xMi45IDIwLjVjLTkuNCAxNS0yOS4yIDE5LjQtNDQuMSAxMHMtMTkuNC0yOS4yLTEwLTQ0LjFsNTEuNy04Mi4xYzE3LjYtMjcuOSA0OC4zLTQ0LjkgODEuMi00NC45bDEyLjMgMGMzMyAwIDYzLjcgMTYuOSA4MS4yIDQ0LjlMNjE5LjYgMjg3YzkuNCAxNSA0LjkgMzQuNy0xMCA0NC4xcy0zNC43IDQuOS00NC4xLTEwbC0xMi45LTIwLjUgMCAxNzkuNWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2LTE2IDB6Il0KICAgIH07CiAgICBmYUNoYXJ0TGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFydC1saW5lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxpbmUtY2hhcnQiXSwgImYyMDEiLCAiTTY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDAwYzAgNDQuMiAzNS44IDgwIDgwIDgwbDQwMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDgwIDQxNmMtOC44IDAtMTYtNy4yLTE2LTE2TDY0IDY0em00MDYuNiA4Ni42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDMyMCAyMTAuNyAyNjIuNiAxNTMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDczLjQtNzMuNCA1Ny40IDU3LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOHoiXQogICAgfTsKICAgIGZhTGluZUNoYXJ0ID0gZmFDaGFydExpbmU7CiAgICBmYVNxdWFyZUVudmVsb3BlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1lbnZlbG9wZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJlbnZlbG9wZS1zcXVhcmUiXSwgImYxOTkiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIwOS4xIDI2Ny45TDEwOC40IDIwNy40Yy03LjctNC42LTEyLjQtMTIuOS0xMi40LTIxLjkgMC0xNC4xIDExLjQtMjUuNSAyNS41LTI1LjVsMjA0LjkgMGMxNC4xIDAgMjUuNSAxMS40IDI1LjUgMjUuNSAwIDktNC43IDE3LjMtMTIuNCAyMS45TDIzOC45IDI2Ny45Yy00LjUgMi43LTkuNiA0LjEtMTQuOSA0LjFzLTEwLjQtMS40LTE0LjktNC4xek0zNTIgMjM3LjNsMCA4Mi43YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC04Mi43IDk2LjcgNThDMjAyLjEgMzAxIDIxMyAzMDQgMjI0IDMwNHMyMS45LTMgMzEuMy04LjdsOTYuNy01OHoiXQogICAgfTsKICAgIGZhRW52ZWxvcGVTcXVhcmUgPSBmYVNxdWFyZUVudmVsb3BlOwogICAgZmFCYW5TbW9raW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhbi1zbW9raW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Njg1LCAic21va2luZy1iYW4iXSwgImY1NGQiLCAiTTk5LjUgMTQ0LjhsNzkuMiA3OS4yLTUwLjcgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNDYuNyAwIDkyLjUgOTIuNWMtMzEuNCAyMi40LTY5LjggMzUuNS0xMTEuMiAzNS41LTEwNiAwLTE5Mi04Ni0xOTItMTkyIDAtNDEuNSAxMy4xLTc5LjkgMzUuNS0xMTEuMnpNMzMzLjMgMjg4bC0zMi0zMiA4Mi43IDAgMCAzMi01MC43IDB6bTMyIDMybDE4LjcgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDI2OS4zIDIyNCAxNDQuOCA5OS41YzMxLjQtMjIuNCA2OS44LTM1LjUgMTExLjItMzUuNSAxMDYgMCAxOTIgODYgMTkyIDE5MiAwIDQxLjUtMTMuMSA3OS45LTM1LjUgMTExLjJMMzY1LjMgMzIwek0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjcyIDk2Yy04LjggMC0xNiA3LjItMTYgMTYgMCAyNi41IDIxLjUgNDggNDggNDhsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzNy4yIDE2IDE2IDE2IDE2LTcuMiAxNi0xNmMwLTI2LjUtMjEuNS00OC00OC00OGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2cy03LjItMTYtMTYtMTZ6Il0KICAgIH07CiAgICBmYVNtb2tpbmdCYW4gPSBmYUJhblNtb2tpbmc7CiAgICBmYVRydWNrRnJvbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stZnJvbnQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTJiNyIsICJNMCAxMTJDMCA2Ny44IDM1LjggMzIgODAgMzJsMjg4IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCAyNTZjMCAyNi4yLTEyLjYgNDkuNC0zMiA2NGwwIDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyLTE5MiAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNDhDMTIuNiA0MTcuNCAwIDM5NC4yIDAgMzY4TDAgMTEyem05NiA4MGwwIDY0IDI1NiAwIDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTE5MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMzIgMTYwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTIyNCAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyNzk3MCwgNjE2ODddLCAiZjFhZCIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpNMTc2IDM1MmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgODAtOTYgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek05NiAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjQwIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTk2IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNDQtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhQnVsbHNleWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVsbHNleWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjE0MCIsICJNNDQ4IDI1NmExOTIgMTkyIDAgMSAwIC0zODQgMCAxOTIgMTkyIDAgMSAwIDM4NCAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNTYgODBhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTAtMjI0YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHpNMjI0IDI1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdCiAgICB9OwogICAgZmFBcnJvd0xlZnRMb25nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWxlZnQtbG9uZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJsb25nLWFycm93LWxlZnQiXSwgImYxNzciLCAiTTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTI4IDEyOGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDEwOS4zIDI4OCA1NDQgMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00MzQuNyAwIDczLjQtNzMuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTI4IDEyOHoiXQogICAgfTsKICAgIGZhTG9uZ0Fycm93TGVmdCA9IGZhQXJyb3dMZWZ0TG9uZzsKICAgIGZhQ2hlc3NSb29rMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1yb29rIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTgyMF0sICJmNDQ3IiwgIk0wIDMyTDAgMTMzLjVjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNMNjQgMjI0IDY0IDM4NCA3LjggNDU0LjNDMi43IDQ2MC42IDAgNDY4LjQgMCA0NzYuNSAwIDQ5Ni4xIDE1LjkgNTEyIDM1LjUgNTEybDMxMi45IDBjMTkuNiAwIDM1LjUtMTUuOSAzNS41LTM1LjUgMC04LjEtMi43LTE1LjktNy44LTIyLjJsLTU2LjItNzAuMyAwLTE2MCA0NS4zLTQ1LjNjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0wzODQgMzJjMC0xNy43LTE0LjMtMzItMzItMzJMMzIwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItNDggMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE3NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTQ4IDAgMC0zMkM5NiAxNC4zIDgxLjcgMCA2NCAwTDMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyeiJdCiAgICB9OwogICAgZmFCbGVuZGVyUGhvbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmxlbmRlci1waG9uZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNmI2IiwgIk0xNTEuNCAxMy4yYzEwLjIgNS44IDE0LjUgMTguNCAxMCAyOS4zTDEzOC4yIDk4LjhjLTMuOSA5LjYtMTMuNyAxNS40LTI0IDE0LjRsLTIwLjItMkM3OC43IDE1Mi45IDc4IDE5OC45IDkxLjkgMjQxLjFsMjIuNC0yLjJjMTAuMy0xIDIwIDQuOCAyNCAxNC40bDIzLjIgNTYuM2M0LjUgMTAuOSAuMiAyMy40LTEwIDI5LjNsLTIuOSAxLjZjLTMzLjYgMTkuMi04MS43IDE2LjItMTA2LjItMjEuNi01Ni4zLTg2LjYtNTYuMy0xOTkuMSAwLTI4NS43IDI0LjYtMzcuNyA3Mi43LTQwLjcgMTA2LjItMjEuNmwyLjkgMS42ek0yMjQgMzM2TDE5My43IDE3LjVDMTkyLjggOC4xIDIwMC4yIDAgMjA5LjYgMGwzMjQgMGMyMS4zIDAgMzYuNiAyMC4zIDMwLjggNDAuOEw1NTMuMSA4MCA0NDAgODBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOTkuNCAwLTE4LjMgNjQtODEuMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY3LjQgMC0yNy40IDk2LTI1NiAwem04IDQ4bDI0MCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTI0MCAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwem0xMjAgODhhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFBcnJvd1R1cm5VcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy10dXJuLXVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImxldmVsLXVwIl0sICJmMTQ4IiwgIk0zMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMzA2LjcgNzMuNCA3My40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE2MCAxMDkuMyAxNjAgNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAweiJdCiAgICB9OwogICAgZmFMZXZlbFVwID0gZmFBcnJvd1R1cm5VcDsKICAgIGZhQmljeWNsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiaWN5Y2xlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NjkwXSwgImYyMDYiLCAiTTMzMS43IDQzLjNDMzM2IDM2LjMgMzQzLjcgMzIgMzUyIDMybDEwNCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC02NS42IDAgNzIuMiAxNDguNGMxMC43LTIuOSAyMS45LTQuNCAzMy40LTQuNCA3MC43IDAgMTI4IDU3LjMgMTI4IDEyOHMtNTcuMyAxMjgtMTI4IDEyOC0xMjgtNTcuMy0xMjgtMTI4YzAtNDIgMjAuMi03OS4yIDUxLjQtMTAyLjZsLTIwLjQtNDEuOS03My41IDE0N2MtMi4zIDQuOC02LjMgOC44LTExLjQgMTEuMi0uNiAuMy0xLjIgLjUtMS44IC43LTIuOSAxLjEtNS45IDEuNi04LjkgMS41TDI3MSAzNjhjLTcuOSA2My4xLTYxLjcgMTEyLTEyNyAxMTItNzAuNyAwLTEyOC01Ny4zLTEyOC0xMjhTNzMuMyAyMjQgMTQ0IDIyNGMxMC44IDAgMjEuMiAxLjMgMzEuMiAzLjhsMjguNS01Ni45LTExLjUtMjYuOS00MC4yIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNTYgMGM5LjYgMCAxOC4zIDUuNyAyMi4xIDE0LjVsMTQuMyAzMy41IDEyMy43IDAtMzcuNy03Ny41Yy0zLjYtNy40LTMuMi0xNi4yIDEuMi0yMy4yek0yMjguNSAyMjguN2wtNDUuNiA5MS4zIDg0LjggMC0zOS4xLTkxLjN6TTMwNS43IDI4N2w0Ny41LTk1LTg4LjIgMCA0MC43IDk1em0xNjguNyA3NS41bC0yOS43LTYxYy0xMi44IDEzLTIwLjcgMzAuOC0yMC43IDUwLjUgMCAzOS44IDMyLjIgNzIgNzIgNzJzNzItMzIuMiA3Mi03Mi0zMi4yLTcyLTcyLTcyYy0yLjcgMC01LjUgLjItOC4xIC41bDI5LjcgNjFjNS44IDExLjkgLjggMjYuMy0xMS4xIDMyLjFzLTI2LjMgLjgtMzIuMS0xMS4xek0xNDkuMiAzNjhjLTIwLjIgMC0zMy40LTIxLjMtMjQuMy0zOS40bDI0LjItNDguNWMtMS43LS4xLTMuNC0uMi01LjEtLjItMzkuOCAwLTcyIDMyLjItNzIgNzJzMzIuMiA3MiA3MiA3MmMzNC4zIDAgNjIuOS0yMy45IDcwLjItNTZsLTY1IDB6Il0KICAgIH07CiAgICBmYUNpcmNsZUFycm93RG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtYXJyb3ctZG93biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhcnJvdy1jaXJjbGUtZG93biJdLCAiZjBhYiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIzOSAzNzdsLTgwLTgwYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMzkgMzkgMC0xNTAuMWMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTUwLjEgMzktMzljOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC04MCA4MGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDB6Il0KICAgIH07CiAgICBmYUFycm93Q2lyY2xlRG93biA9IGZhQ2lyY2xlQXJyb3dEb3duOwogICAgZmFHZWFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdlYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5ODgxLCAiY29nIl0sICJmMDEzIiwgIk0xOTUuMSA5LjVDMTk4LjEtNS4zIDIxMS4yLTE2IDIyNi40LTE2bDU5LjggMGMxNS4yIDAgMjguMyAxMC43IDMxLjMgMjUuNUwzMzIgNzkuNWMxNC4xIDYgMjcuMyAxMy43IDM5LjMgMjIuOGw2Ny44LTIyLjVjMTQuNC00LjggMzAuMiAxLjIgMzcuOCAxNC40bDI5LjkgNTEuOGM3LjYgMTMuMiA0LjkgMjkuOC02LjUgMzkuOUw0NDcgMjMzLjNjLjkgNy40IDEuMyAxNSAxLjMgMjIuN3MtLjUgMTUuMy0xLjMgMjIuN2w1My40IDQ3LjVjMTEuNCAxMC4xIDE0IDI2LjggNi41IDM5LjlsLTI5LjkgNTEuOGMtNy42IDEzLjEtMjMuNCAxOS4yLTM3LjggMTQuNGwtNjcuOC0yMi41Yy0xMi4xIDkuMS0yNS4zIDE2LjctMzkuMyAyMi44bC0xNC40IDY5LjljLTMuMSAxNC45LTE2LjIgMjUuNS0zMS4zIDI1LjVsLTU5LjggMGMtMTUuMiAwLTI4LjMtMTAuNy0zMS4zLTI1LjVsLTE0LjQtNjkuOWMtMTQuMS02LTI3LjItMTMuNy0zOS4zLTIyLjhMNzMuNSA0MzIuM2MtMTQuNCA0LjgtMzAuMi0xLjItMzcuOC0xNC40TDUuOCAzNjYuMWMtNy42LTEzLjItNC45LTI5LjggNi41LTM5LjlsNTMuNC00Ny41Yy0uOS03LjQtMS4zLTE1LTEuMy0yMi43cy41LTE1LjMgMS4zLTIyLjdMMTIuMyAxODUuOGMtMTEuNC0xMC4xLTE0LTI2LjgtNi41LTM5LjlMMzUuNyA5NC4xYzcuNi0xMy4yIDIzLjQtMTkuMiAzNy44LTE0LjRsNjcuOCAyMi41YzEyLjEtOS4xIDI1LjMtMTYuNyAzOS4zLTIyLjhMMTk1LjEgOS41ek0yNTYuMyAzMzZhODAgODAgMCAxIDAgLS42LTE2MCA4MCA4MCAwIDEgMCAuNiAxNjB6Il0KICAgIH07CiAgICBmYUNvZyA9IGZhR2VhcjsKICAgIGZhTWFyc0FuZFZlbnVzQnVyc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFycy1hbmQtdmVudXMtYnVyc3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUyMyIsICJNNDY0LTMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDM0LjcgMC02MyA2M2MtMjguNC0xOS41LTYyLjctMzEtOTkuOC0zMS05Ny4yIDAtMTc2IDc4LjgtMTc2IDE3NiAwIDg2LjMgNjIuMSAxNTguMSAxNDQgMTczLjFsMCAzNC45LTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMzQuOWM4MS45LTE1IDE0NC04Ni44IDE0NC0xNzMuMSAwLTM3LTExLjQtNzEuNC0zMS05OS44bDYzLTYzIDAgMzQuN2MwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTEyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDQ5Ni02NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTM2OCA5NmExMTIgMTEyIDAgMSAxIDAgMjI0IDExMiAxMTIgMCAxIDEgMC0yMjR6TTE5MC45LTIxLjlDMTg4LjQtMjggMTgyLjYtMzIgMTc2LTMycy0xMi40IDQtMTQuOSAxMC4xbC0yOS40IDc0LTc2LjItMjMuMWMtNi4zLTEuOS0xMy4xIC4yLTE3LjIgNS4zUzMzLjggNDYuNSAzNyA1Mi4ybDM5LjUgNjkuMS02NS42IDQ1LjFjLTUuNCAzLjctOCAxMC4zLTYuNSAxNi43czYuNyAxMS4yIDEzLjEgMTIuMmw3OC43IDEyLjItNS42IDc5LjRjLS41IDYuNSAzLjEgMTIuNyA5IDE1LjVzMTIuOSAxLjggMTcuOC0yLjZMMTUyLjEgMjY4Yy01LjMtMTkuMS04LjEtMzkuMi04LjEtNjAgMC02NS40IDI4LTEyNC4yIDcyLjYtMTY1LjFMMTkwLjktMjEuOXoiXQogICAgfTsKICAgIGZhT3R0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAib3R0ZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjk0NDZdLCAiZjcwMCIsICJNMTgxLjUgMTk3LjFsMTIuOSA2LjRjNS45IDMgMTIuNCA0LjUgMTkuMSA0LjUgMjMuNSAwIDQyLjYtMTkuMSA0Mi42LTQyLjZsMC0yMS40YzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDIxLjRjMCAyMy41IDE5LjEgNDIuNiA0Mi42IDQyLjYgNi42IDAgMTMuMS0xLjUgMTkuMS00LjUgOS4zLTQuNyAxNi40LTguMiAyMS4yLTEwLjZMMTM1LjEgMTg1Yy00LjUtMy03LjEtOC03LjEtMTMuM2wwLTMuN2MwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMy43YzAgNS4zLTIuNyAxMC4zLTcuMSAxMy4zbC0xMS44IDcuOSA4LjQgNC4yem0tOC42IDQ5LjRsLTEyLjktNi40LTEyLjkgNi40Yy0xMi42IDYuMy0yNi41IDkuNi00MC41IDkuNi0zLjYgMC03LjEtLjItMTAuNi0uNmwwIC42YzAgMzUuMyAyOC43IDY0IDY0IDY0bDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMTYwIDAgMC02NGMwLTIzLjcgMTIuOS00NC40IDMyLTU1LjQgOS40LTUuNCAyMC4zLTguNiAzMi04LjZsMC0xNmMwLTI2LjUgMjEuNS00OCA0OC00OCA4LjggMCAxNiA3LjIgMTYgMTZsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtOTkuN2MwLTQ4LjItMzAuOC05MS03Ni42LTEwNi4zbC04LjUtMi44Yy04LTIuNy0xMi42LTExLjEtMTAuNC0xOS4zczEwLjMtMTMuMiAxOC42LTExLjZsMTkuOSA0QzU3NiA4Ni4xIDY0MCAxNjQuMiA2NDAgMjU0LjlsMCAxLjEgMCAwYzAgMTIzLjctMTAwLjMgMjI0LTIyNCAyMjRsLTE2MC42IDBDMTMyIDQ4MCAzMiAzODAgMzIgMjU2LjZsMC0zOS44Yy0xMC4xLTE0LjYtMTYtMzIuMy0xNi01MS40bDAtMjEuNCAwLTEuNEM2LjcgMTM5LjMgMCAxMzAuNSAwIDEyMCAwIDEwNi43IDEwLjcgOTYgMjQgOTZsMi44IDBDNDQuOCA1OC4yIDgzLjMgMzIgMTI4IDMybDY0IDBjNDQuNyAwIDgzLjIgMjYuMiAxMDEuMiA2NGwyLjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNCAwIDEwLjUtNi43IDE5LjMtMTYgMjIuNmwwIDEuNCAwIDIxLjRjMCAxLjQgMCAyLjgtLjEgNC4zIDEyLTYuMiAyNS43LTkuNiA0MC4xLTkuNmw4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA4IDU2LjQgMGMtMTUuMiAxNy0yNC40IDM5LjQtMjQuNCA2NGwtMzIgMGMtNDIuMyAwLTc4LjItMjcuNC05MS02NS4zLTUuMSAuOS0xMC4zIDEuMy0xNS42IDEuMy0xNC4xIDAtMjcuOS0zLjMtNDAuNS05LjZ6TTk2IDEyOGExNiAxNiAwIDEgMSAwIDMyIDE2IDE2IDAgMSAxIDAtMzJ6bTExMiAxNmExNiAxNiAwIDEgMSAzMiAwIDE2IDE2IDAgMSAxIC0zMiAweiJdCiAgICB9OwogICAgZmFDaXJjbGVDaGV2cm9uTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtY2hldnJvbi1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNoZXZyb24tY2lyY2xlLWxlZnQiXSwgImYxMzciLCAiTTUxMiAyNTZhMjU2IDI1NiAwIDEgMCAtNTEyIDAgMjU2IDI1NiAwIDEgMCA1MTIgMHpNMjcxIDEzNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTg3IDg3IDg3IDg3YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMMTY3IDI3M2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlMMjcxIDEzNXoiXQogICAgfTsKICAgIGZhQ2hldnJvbkNpcmNsZUxlZnQgPSBmYUNpcmNsZUNoZXZyb25MZWZ0OwogICAgZmFDaXJjbGVRdWVzdGlvbjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXF1ZXN0aW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxMDgsICJxdWVzdGlvbi1jaXJjbGUiXSwgImYwNTkiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTMzNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDQ3LjItMzYgNjcuMi01NiA3NC41bDAgMy44YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtOC4xYzAtMjAuNSAxNC44LTM1LjIgMzAuMS00MC4yIDYuNC0yLjEgMTMuMi01LjUgMTguMi0xMC4zIDQuMy00LjIgNy43LTEwIDcuNy0xOS42IDAtMTcuNy0xNC4zLTMyLTMyLTMyek0yMjQgMzY4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYVF1ZXN0aW9uQ2lyY2xlMiA9IGZhQ2lyY2xlUXVlc3Rpb24yOwogICAgZmFXYWxraWVUYWxraWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2Fsa2llLXRhbGtpZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmOGVmIiwgIk04OC0zMmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDcyIDQ4IDBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwzMiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2MC45YzAgOS45LTIuMyAxOS43LTYuOCAyOC42bC0yMC4yIDQwLjRjLTMuMyA2LjctNS4xIDE0LTUuMSAyMS41bDAgODQuN2MwIDM1LjMtMjguNyA2NC02NCA2NEw5NiA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtODQuN2MwLTcuNS0xLjctMTQuOC01LjEtMjEuNUw2LjggMzAxLjVDMi4zIDI5Mi42IDAgMjgyLjggMCAyNzIuOUwwIDExMkMwIDg1LjUgMjEuNSA2NCA0OCA2NGwxNiAwIDAtNzJjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTMyIDE3NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFVc2VyR3JvdXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1ncm91cCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODEwMSwgInVzZXItZnJpZW5kcyJdLCAiZjUwMCIsICJNNjQgMTI4YTExMiAxMTIgMCAxIDEgMjI0IDAgMTEyIDExMiAwIDEgMSAtMjI0IDB6TTAgNDY0YzAtOTcuMiA3OC44LTE3NiAxNzYtMTc2czE3NiA3OC44IDE3NiAxNzZsMCA2YzAgMjMuMi0xOC44IDQyLTQyIDQyTDQyIDUxMmMtMjMuMiAwLTQyLTE4LjgtNDItNDJsMC02ek00MzIgNjRhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6bTAgMjQwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0bDAgMjIuNGMwIDIzLTE4LjYgNDEuNi00MS42IDQxLjZsLTE0NC44IDBjNi42LTEyLjUgMTAuNC0yNi44IDEwLjQtNDJsMC02YzAtNTEuNS0xNy40LTk4LjktNDYuNS0xMzYuNyAyMi42LTE0LjcgNDkuNi0yMy4zIDc4LjUtMjMuM3oiXQogICAgfTsKICAgIGZhVXNlckZyaWVuZHMgPSBmYVVzZXJHcm91cDsKICAgIGZhSG91c2VDaGltbmV5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWNoaW1uZXkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MzQ5OSwgImhvbWUtbGciXSwgImUzYWYiLCAiTTIzNC4yIDguNmMxMi4zLTExLjQgMzEuMy0xMS40IDQzLjUgMEwzNjggOTIuMyAzNjggODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEwMS41IDM3LjggMzUuMWM5LjYgOSAxMi44IDIyLjkgOCAzNS4xUzQ5My4yIDI3MiA0ODAgMjcybC0xNiAwIDAgMTc2YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yODggMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4ek0yNDAgMzIwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2IDEyOCAwIDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTMyIDB6Il0KICAgIH07CiAgICBmYUhvbWVMZyA9IGZhSG91c2VDaGltbmV5OwogICAgZmFSaWdodEZyb21CcmFja2V0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJpZ2h0LWZyb20tYnJhY2tldCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzaWduLW91dC1hbHQiXSwgImYyZjUiLCAiTTUwNSAyNzNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlMMzYxIDk1Yy02LjktNi45LTE3LjItOC45LTI2LjItNS4yUzMyMCAxMDIuMyAzMjAgMTEybDAgODAtMTEyIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMzJjMCAyNi41IDIxLjUgNDggNDggNDhsMTEyIDAgMCA4MGMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJzMTkuMyAxLjcgMjYuMi01LjJMNTA1IDI3M3pNMTYwIDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDk2IDMyQzQzIDMyIDAgNzUgMCAxMjhMMCAzODRjMCA1MyA0MyA5NiA5NiA5Nmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAweiJdCiAgICB9OwogICAgZmFTaWduT3V0QWx0ID0gZmFSaWdodEZyb21CcmFja2V0OwogICAgZmFGaWxlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MTk2LCAxMjg0NTksIDYxNDYyXSwgImYxNWIiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjc3LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjU4LjcgMTguN0MyNDYuNyA2LjcgMjMwLjUgMCAyMTMuNSAwTDY0IDB6TTMyNS41IDE3NkwyMzIgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyMDggNTguNSAzMjUuNSAxNzZ6Il0KICAgIH07CiAgICBmYVBsYW5lU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbmUtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTA2OSIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTgzLjQtMTgzLjQgNy4xLTcuNyAxMjcuMyAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2cy0yNS4xLTU2LTU2LTU2TDM5Mi43IDIwMCAyMzMuNSAyNi40QzIyNy41IDE5LjggMjE4LjkgMTYgMjA5LjkgMTZsLTQzLjcgMGMtMTAuOSAwLTE4LjYgMTAuNy0xNS4yIDIxLjFMMTc1LjEgMTA5LjIgNDEtMjQuOXpNMTMwLjIgMjAwbC0yNC42IDAtNTIuOC02NmMtMy0zLjgtNy42LTYtMTIuNS02bC0xOS44IDBjLTEwLjQgMC0xOCA5LjgtMTUuNSAxOS45TDMyIDI1NiA1IDM2NC4xQzIuNCAzNzQuMiAxMC4xIDM4NCAyMC41IDM4NGwxOS44IDBjNC45IDAgOS41LTIuMiAxMi41LTZsNTIuOC02NiA5OS43IDAtNTQuMyAxNjIuOWMtMy41IDEwLjQgNC4zIDIxLjEgMTUuMiAyMS4xbDQzLjcgMGM5IDAgMTcuNS0zLjggMjMuNi0xMC40TDMyMC43IDM5MC41IDEzMC4yIDIwMHoiXQogICAgfTsKICAgIGZhQ2xvdWRTaG93ZXJzSGVhdnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQtc2hvd2Vycy1oZWF2eSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzQwIiwgIk05NiAzMjBjLTUzIDAtOTYtNDMtOTYtOTYgMC00Mi41IDI3LjYtNzguNiA2NS45LTkxLjItMS4zLTYuNy0xLjktMTMuNy0xLjktMjAuOCAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMiA0My4xIDAgODAuNSAyNC4zIDk5LjIgNjAgMTQuNy0xNy4xIDM2LjUtMjggNjAuOC0yOCA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDUuNS0uNiAxMC44LTEuNiAxNiAuNSAwIDEuMSAwIDEuNiAwIDUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2TDk2IDMyMHptNi44IDc5LjZsLTMyIDk2QzY2LjYgNTA4LjIgNTMgNTE1IDQwLjQgNTEwLjhTMjEgNDkzIDI1LjIgNDgwLjRsMzItOTZDNjEuNCAzNzEuOCA3NSAzNjUgODcuNiAzNjkuMlMxMDcgMzg3IDEwMi44IDM5OS42em0xMjAgMGwtMzIgOTZjLTQuMiAxMi42LTE3LjggMTkuNC0zMC40IDE1LjJTMTQxIDQ5MyAxNDUuMiA0ODAuNGwzMi05NmM0LjItMTIuNiAxNy44LTE5LjQgMzAuNC0xNS4yUzIyNyAzODcgMjIyLjggMzk5LjZ6bTExMiAwbC0zMiA5NmMtNC4yIDEyLjYtMTcuOCAxOS40LTMwLjQgMTUuMlMyNTMgNDkzIDI1Ny4yIDQ4MC40bDMyLTk2YzQuMi0xMi42IDE3LjgtMTkuNCAzMC40LTE1LjJTMzM5IDM4NyAzMzQuOCAzOTkuNnptMTIwIDBsLTMyIDk2Yy00LjIgMTIuNi0xNy44IDE5LjQtMzAuNCAxNS4yUzM3MyA0OTMgMzc3LjIgNDgwLjRsMzItOTZjNC4yLTEyLjYgMTcuOC0xOS40IDMwLjQtMTUuMlM0NTkgMzg3IDQ1NC44IDM5OS42eiJdCiAgICB9OwogICAgZmFQZXJzb25GYWxsaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1mYWxsaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NDYiLCAiTTMyMCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDUuNGMwIDQ1LTIzLjYgODYuNi02Mi4xIDEwOS44bC00LjYgMi44QzEzMS40IDE4NC43IDk2IDI0Ny4xIDk2IDMxNC42TDk2IDM4NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjkuNGMwLTE2LjcgMy4zLTMzIDkuNC00OEwzNTkuMiA1MDAuMmMxMS4xIDEzLjcgMzEuMyAxNS44IDQ1IDQuN3MxNS44LTMxLjMgNC43LTQ1TDI5NS4yIDMyMCA0MDAgMzIwIDQzOC40IDM3MS4yYzEwLjYgMTQuMSAzMC43IDE3IDQ0LjggNi40czE3LTMwLjcgNi40LTQ0LjhsLTQzLjItNTcuNkM0MzcuMyAyNjMuMSA0MjMuMSAyNTYgNDA4IDI1NmwtODkgMC02Mi45LTc1LjVjNDAuMy0zNiA2My45LTg3LjkgNjMuOS0xNDMuMWwwLTUuNHpNMTA0IDE0NGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnoiXQogICAgfTsKICAgIGZhVHVybkRvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHVybi1kb3duIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTA1NDksICJsZXZlbC1kb3duLWFsdCJdLCAiZjNiZSIsICJNMTY5LjQgNTAyLjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVMzMzIuOSAzMjAgMzIwIDMyMGwtNjQgMCAwLTE2MEMyNTYgNzEuNiAxODQuNCAwIDk2IDBMMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJMMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYwLTY0IDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDEyOCAxMjh6Il0KICAgIH07CiAgICBmYUxldmVsRG93bkFsdCA9IGZhVHVybkRvd247CiAgICBmYVVwUmlnaHRBbmREb3duTGVmdEZyb21DZW50ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXAtcmlnaHQtYW5kLWRvd24tbGVmdC1mcm9tLWNlbnRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJleHBhbmQtYWx0Il0sICJmNDI0IiwgIk0zNDQgMEw0ODggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE0NGMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC0zOS0zOS04NyA4N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTMyLTMyYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw4Ny04Ny0zOS0zOWMtNi45LTYuOS04LjktMTcuMi01LjItMjYuMlMzMzQuMyAwIDM0NCAwek0xNjggNTEyTDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMCAzNDRjMC05LjcgNS44LTE4LjUgMTQuOC0yMi4yUzM0LjEgMzIwLjIgNDEgMzI3bDM5IDM5IDg3LTg3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDMyIDMyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC04NyA4NyAzOSAzOWM2LjkgNi45IDguOSAxNy4yIDUuMiAyNi4yUzE3Ny43IDUxMiAxNjggNTEyeiJdCiAgICB9OwogICAgZmFFeHBhbmRBbHQgPSBmYVVwUmlnaHRBbmREb3duTGVmdEZyb21DZW50ZXI7CiAgICBmYVVzZXJUYWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci10YWciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjUwNyIsICJNMjU2LjEgOGExMjAgMTIwIDAgMSAxIDAgMjQwIDEyMCAxMjAgMCAxIDEgMC0yNDB6TTIyNi40IDMwNGw1OS40IDBjNi43IDAgMTMuMiAuNCAxOS43IDEuMS0uOSA0LjktMS40IDkuOS0xLjQgMTVsMCA5Mi4xYzAgMjUuNSAxMC4xIDQ5LjkgMjguMSA2Ny45bDMxLjkgMzEuOS0yODYuMyAwYy0xNi40IDAtMjkuNy0xMy4zLTI5LjctMjkuNyAwLTk4LjUgNzkuOC0xNzguMyAxNzguMy0xNzguM3pNMzUyLjEgNDEyLjJsMC05Mi4xYzAtMTcuNyAxNC4zLTMyIDMyLTMybDkyLjEgMGMxMi43IDAgMjQuOSA1LjEgMzMuOSAxNC4xbDk2IDk2YzE4LjcgMTguNyAxOC43IDQ5LjEgMCA2Ny45bC03Ni4xIDc2LjFjLTE4LjcgMTguNy00OS4xIDE4LjctNjcuOSAwbC05Ni05NmMtOS05LTE0LjEtMjEuMi0xNC4xLTMzLjl6bTEwNC00NC4yYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYUhhbmRTcGFya2xlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXNwYXJrbGVzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUwNWQiLCAiTTMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjA4YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0xNzZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE3NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMTEyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNzguMmMtMTkuMiA1LjQtMzQuNyAyMC40LTQwLjQgNDAuM2wtNi41IDIyLjctMjIuNyA2LjVjLTI1LjIgNy4yLTQyLjUgMzAuMi00Mi41IDU2LjQgMCAyMi4xIDEyLjQgNDIgMzEuNCA1MS45LTI3LjUgMTcuOC02MC4yIDI4LjEtOTUuNCAyOC4xbC0xOS4yIDBjLTU5LjYgMC0xMTYuOS0yMi45LTE2MC02NEw3Ni40IDM0MWMtMTYtMTUuMi0xNi42LTQwLjYtMS40LTU2LjZzNDAuNi0xNi42IDU2LjYtMS40bDYwLjUgNTcuNmMwLTEuNS0uMS0zLjEtLjEtNC42bDAtMjcyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNzZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTIwOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptLTcuMyAzMjYuNmMtMS4xLTMuOS00LjctNi42LTguNy02LjZzLTcuNiAyLjctOC43IDYuNmwtNy4zIDI1LjQtMjUuNCA3LjNjLTMuOSAxLjEtNi42IDQuNy02LjYgOC43czIuNyA3LjYgNi42IDguN2wyNS40IDcuMyA3LjMgMjUuNGMxLjEgMy45IDQuNyA2LjYgOC43IDYuNnM3LjYtMi43IDguNy02LjZsNy4zLTI1LjQgMjUuNC03LjNjMy45LTEuMSA2LjYtNC43IDYuNi04LjdzLTIuNy03LjYtNi42LTguN2wtMjUuNC03LjMtNy4zLTI1LjR6TTEwNCAxMjBsNDguMyAxMy44YzQuNiAxLjMgNy43IDUuNSA3LjcgMTAuMnMtMy4xIDguOS03LjcgMTAuMkwxMDQgMTY4IDkwLjIgMjE2LjNjLTEuMyA0LjYtNS41IDcuNy0xMC4yIDcuN3MtOC45LTMuMS0xMC4yLTcuN0w1NiAxNjggNy43IDE1NC4yQzMuMSAxNTIuOSAwIDE0OC43IDAgMTQ0czMuMS04LjkgNy43LTEwLjJMNTYgMTIwIDY5LjggNzEuN0M3MS4xIDY3LjEgNzUuMyA2NCA4MCA2NHM4LjkgMy4xIDEwLjIgNy43TDEwNCAxMjB6TTU4NCA0MDhsNDguMyAxMy44YzQuNiAxLjMgNy43IDUuNSA3LjcgMTAuMnMtMy4xIDguOS03LjcgMTAuMkw1ODQgNDU2IDU3MC4yIDUwNC4zYy0xLjMgNC42LTUuNSA3LjctMTAuMiA3LjdzLTguOS0zLjEtMTAuMi03LjdMNTM2IDQ1NiA0ODcuNyA0NDIuMmMtNC42LTEuMy03LjctNS41LTcuNy0xMC4yczMuMS04LjkgNy43LTEwLjJMNTM2IDQwOCA1NDkuOCAzNTkuN2MxLjMtNC42IDUuNS03LjcgMTAuMi03LjdzOC45IDMuMSAxMC4yIDcuN0w1ODQgNDA4eiJdCiAgICB9OwogICAgZmFBcnJvd3NUb0RvdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtdG8tZG90IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YmUiLCAiTTI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgMzIgMGMxMi45IDAgMjQuNiA3LjggMjkuNiAxOS44czIuMiAyNS43LTYuOSAzNC45bC02NCA2NGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTY0LTY0Yy05LjItOS4yLTExLjktMjIuOS02LjktMzQuOVMxNzkuMSA2NCAxOTIgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xNjkuNCAzOTMuNGw2NC02NGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw2NCA2NGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOVMzMzIuOSA0NDggMzIwIDQ0OGwtMzIgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMzIgMGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOHMtMi4yLTI1LjcgNi45LTM0Ljl6TTMyIDIyNGwzMiAwIDAtMzJjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnMyNS43LTIuMiAzNC45IDYuOWw2NCA2NGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtNjQgNjRjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzY0IDMzMi45IDY0IDMyMGwwLTMyLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTI5Ny40IDU0LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDY0LTY0YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45UzQ0OCAxNzkuMSA0NDggMTkybDAgMzIgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDMyYzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45bC02NC02NHpNMjU2IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUZhY2VTYWRDcnkyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Utc2FkLWNyeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU1NywgInNhZC1jcnkiXSwgImY1YjMiLCAiTTM1MiA0OTMuNGMtMjkuNiAxMi02Mi4xIDE4LjYtOTYgMTguNnMtNjYuNC02LjYtOTYtMTguNkwxNjAgMjk2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTcxLjdDNDQuNCA0MjEuNiAwIDM0NCAwIDI1NiAwIDExNC42IDExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTZjMCA4OC00NC40IDE2NS42LTExMiAyMTEuN0w0MDAgMjk2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTk3LjR6TTE1MiAxOTZsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMCA5LTIwIDIwLTIwem0xNzIgMjBjMC0xMSA5LTIwIDIwLTIwbDE2IDBjMTEgMCAyMCA5IDIwIDIwczkgMjAgMjAgMjAgMjAtOSAyMC0yMGMwLTMzLjEtMjYuOS02MC02MC02MGwtMTYgMGMtMzMuMSAwLTYwIDI2LjktNjAgNjAgMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjB6TTIwOCAzMzZsMCAzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4bDAtMzJjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6Il0KICAgIH07CiAgICBmYVNhZENyeTIgPSBmYUZhY2VTYWRDcnkyOwogICAgZmFEb25nU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb25nLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTE2OSIsICJNMjg4LTE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTEwNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEwNCAwIDAgNzIuMmMtMjIuOS0xNS4zLTUwLjQtMjQuMi04MC0yNC4yLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0Uzk2LjUgNDMyIDE3NiA0MzJjMzAgMCA1Ny44LTkuMSA4MC44LTI0LjggMy4zIDE0LjIgMTYgMjQuOCAzMS4yIDI0LjggMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMDQgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDAgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek05NiAyODhhODAgODAgMCAxIDEgMTYwIDAgODAgODAgMCAxIDEgLTE2MCAwek0yNCA0NjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzM2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMjQgNDY0eiJdCiAgICB9OwogICAgZmFQZW9wbGVMaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlb3BsZS1saW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MzQiLCAiTTI4OCAwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4em05NiAzMTJjMCAyNS0xMi43IDQ3LTMyIDU5LjlsMCA0NC4xLTEyOCAwIDAtNDQuMUMyMDQuNyAzNTkgMTkyIDMzNyAxOTIgMzEybDAtNDBjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDQwem0xNiAxMDRsMC0yNy4zYzE5LjktMjIuNSAzMi01Mi4yIDMyLTg0LjdsMC0zMmMwLTI2LjctNy4zLTUxLjYtMTkuOS03My4xIDExLjEtNC41IDIzLjItNi45IDM1LjktNi45IDUzIDAgOTYgNDMgOTYgOTZsMCAzMmMwIDIzLjctMTIuOSA0NC40LTMyIDU1LjRsMCA0MC42LTExMiAwek02NCAzNzUuNEM0NC45IDM2NC40IDMyIDM0My43IDMyIDMyMGwwLTMyYzAtNTMgNDMtOTYgOTYtOTYgMTIuNyAwIDI0LjggMi41IDM1LjkgNi45LTEyLjYgMjEuNC0xOS45IDQ2LjQtMTkuOSA3My4xbDAgMzJjMCAzMi41IDEyLjEgNjIuMSAzMiA4NC43bDAgMjcuMy0xMTIgMCAwLTQwLjZ6TTEyOCAzMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnptMzIwIDBhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTI0IDQ2NGw1MjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYVNxdWFyZVJzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcnNzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInJzcy1zcXVhcmUiXSwgImYxNDMiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTk2IDEzNmMwLTEzLjMgMTAuNy0yNCAyNC0yNCAxMzcgMCAyNDggMTExIDI0OCAyNDggMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xMTAuNS04OS41LTIwMC0yMDAtMjAwLTEzLjMgMC0yNC0xMC43LTI0LTI0em0wIDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0IDgzLjkgMCAxNTIgNjguMSAxNTIgMTUyIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNTcuNC00Ni42LTEwNC0xMDQtMTA0LTEzLjMgMC0yNC0xMC43LTI0LTI0em0wIDEyMGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdCiAgICB9OwogICAgZmFSc3NTcXVhcmUgPSBmYVNxdWFyZVJzczsKICAgIGZhQ2FsZW5kYXJNaW51czIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXItbWludXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI3MiIsICJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0yNCAyNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFDaGFydERpYWdyYW0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtZGlhZ3JhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNjk1IiwgIk04MCAzMkM1My41IDMyIDMyIDUzLjUgMzIgODBzMjEuNSA0OCA0OCA0OGwxNTIgMCAwIDQwLTQ4IDQ4LTcyIDBjLTM5LjggMC03MiAzMi4yLTcyIDcybDAgNjQtOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOCAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsNzIgMCA0OCA0OCAwIDQwLTggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTggMCAwLTQwIDQ4LTQ4IDcyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA2NC04IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC04IDAgMC02NGMwLTM5LjgtMzIuMi03Mi03Mi03MmwtNzIgMC00OC00OCAwLTQwIDE1MiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4TDgwIDMyeiJdCiAgICB9OwogICAgZmFGYWNlVGlyZWQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtdGlyZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTUsICJ0aXJlZCJdLCAiZjVjOCIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NC43IDMyOC43YzIyLTIyIDUzLjktNDAuNyA5MS4zLTQwLjdzNjkuMyAxOC43IDkxLjMgNDAuN2MxMS4xIDExLjEgMjAuMSAyMy40IDI2LjQgMzUuNCA2LjIgMTEuNyAxMC4zIDI0LjQgMTAuMyAzNS45IDAgNS4yLTIuNiAxMC4yLTYuOSAxMy4ycy05LjggMy43LTE0LjcgMS44bC0yMC41LTcuN2MtMjYuOS0xMC4xLTU1LjUtMTUuMy04NC4zLTE1LjNsLTMuMiAwYy0yOC44IDAtNTcuMyA1LjItODQuMyAxNS4zTDE0OS42IDQxNWMtNC45IDEuOC0xMC40IDEuMi0xNC43LTEuOFMxMjggNDA1LjIgMTI4IDQwMGMwLTExLjYgNC4yLTI0LjIgMTAuMy0zNS45IDYuMy0xMiAxNS4zLTI0LjMgMjYuNC0zNS40ek0xMjIuNiAxNTkuMmM0LjUtNi44IDEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDIwOCAxMjUuOCAxODAuM2MtNi4yLTUuMi03LjYtMTQuMy0zLjEtMjEuMXptMjYzLjYgMjEuMUwzNTMgMjA4IDM4Ni4yIDIzNS43YzYuMiA1LjIgNy42IDE0LjMgMy4xIDIxLjFzLTEzLjMgOS4yLTIwLjYgNS41bC03OS42LTQwYy01LjQtMi43LTguOC04LjItOC44LTE0LjNzMy40LTExLjYgOC44LTE0LjNsNzkuNi00MGM3LjMtMy42IDE2LjEtMS4zIDIwLjYgNS41czMuMSAxNS45LTMuMSAyMS4xeiJdCiAgICB9OwogICAgZmFUaXJlZDIgPSBmYUZhY2VUaXJlZDI7CiAgICBmYUhhbmRQb2ludFJpZ2h0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBvaW50LXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwYTQiLCAiTTQ4MCA5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjA4IDAgMC02NCAyMDggMHpNMzIwIDI4OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2NCAwem02NC02NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNDggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyek0yODggMzg0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDB6bS04OC05NmwuNiAwYy01LjQgOS40LTguNiAyMC4zLTguNiAzMiAwIDEzLjIgNCAyNS40IDEwLjggMzUuNi0yNC45IDguNy00Mi44IDMyLjUtNDIuOCA2MC40IDAgMTEuNyAzLjEgMjIuNiA4LjYgMzJsLTguNiAwQzcxLjYgNDQ4IDAgMzc2LjQgMCAyODhsMC02MS43YzAtNDIuNCAxNi45LTgzLjEgNDYuOS0xMTMuMWwxMS42LTExLjZDODIuNSA3Ny41IDExNS4xIDY0IDE0OSA2NGwyNyAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgODhjMCAyMi4xLTE3LjkgNDAtNDAgNDBzLTQwLTE3LjktNDAtNDBsMC01NmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDU2YzAgMzkuOCAzMi4yIDcyIDcyIDcyeiJdCiAgICB9OwogICAgZmFBcnJvd1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbODU5M10sICJmMDYyIiwgIk0yMTQuNiAxNy40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxNjAgMTE3LjMgMTYwIDQ4OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzcwLjcgMTA1LjQgMTA1LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MHoiXQogICAgfTsKICAgIGZhQ3ViZXNTdGFja2VkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImN1YmVzLXN0YWNrZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRlNiIsICJNMTkyIDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NHptMzIgMzUybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTkyIDBsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zMjAgMTkybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptLTE4Mi42LTMuOWMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw0NS4zIDQ1LjNjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTQ1LjMgNDUuM2MtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBMOTIuMSAyNzguNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsNDUuMy00NS4zek0zMiAzODRsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFDaGlsZENvbWJhdGFudCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGlsZC1jb21iYXRhbnQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiY2hpbGQtcmlmbGUiXSwgImU0ZTAiLCAiTTE3Ni41IDEyOGE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHptLTE2IDM1MmwwLTk2IDMyIDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTkyLjIgMjAuOSAzMy4yYzkuNCAxNSAyOS4yIDE5LjQgNDQuMSAxMHMxOS40LTI5LjIgMTAtNDQuMWwtMzkuOS02My4zQzI2Ni44IDE4NCAyMjMuMyAxNjAgMTc2LjUgMTYwUzg2LjIgMTg0IDYxLjMgMjIzLjZMMjEuNCAyODdjLTkuNCAxNS00LjkgMzQuNyAxMCA0NC4xczM0LjcgNC45IDQ0LjEtMTBsMjAuOS0zMy4yIDAgMTkyLjJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpNNDQ4LjUgMGwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwwIDEwMC4zYy05LjYgNS41LTE2IDE1LjktMTYgMjcuN2wwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE0NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNiAwIDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2bDU5LjUgMGMxMC40IDAgMTgtOS44IDE1LjUtMTkuOWwtMjMtOTIuMSA0NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtNDggMCAwLTI2LjcgNTMuMS0xNy43YzYuNS0yLjIgMTAuOS04LjMgMTAuOS0xNS4ybDAtODQuNWMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDU2LTE2IDUuMyAwLTEwOS4zYzAtMTEuOC02LjQtMjIuMi0xNi0yNy43bDAtMTE2LjNjMC04LjgtNy4yLTE2LTE2LTE2eiJdCiAgICB9OwogICAgZmFDaGlsZFJpZmxlID0gZmFDaGlsZENvbWJhdGFudDsKICAgIGZhVmVzdFBhdGNoZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmVzdC1wYXRjaGVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwODYiLCAiTTIwMCAyOTMuOUwyMDAgNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAyNzAuNWMwLTkuNSAyLjgtMTguNyA4LjEtMjYuNmw0Ny45LTcxLjhjNS4zLTcuOSA4LjEtMTcuMSA4LjEtMjYuNkw2NCA0OEM2NCAyMS41IDg1LjUgMCAxMTIgMGwzLjUgMGMuMyAwIC42IDAgMSAwIC42IDAgMS4yIDAgMS44IDAgMTguOCAwIDM0LjEgOS43IDQ0LjEgMTguOCA5LjMgOC40IDI4LjUgMjEuMiA2MS43IDIxLjJzNTIuNC0xMi44IDYxLjctMjEuMmMxMC05LjEgMjUuMy0xOC44IDQ0LjEtMTguOCAuNiAwIDEuMiAwIDEuOCAwIC4zIDAgLjYgMCAxIDBMMzM2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5Ny41YzAgOS41IDIuOCAxOC43IDguMSAyNi42bDQ3LjkgNzEuOGM1LjMgNy45IDguMSAxNy4xIDguMSAyNi42TDQ0OCA0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEwNCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE3MC4xYzAtMy45IC41LTcuOCAxLjQtMTEuNkwzMDMuNiA2NS40QzI4NS45IDc3LjIgMjU5LjggODggMjI0IDg4cy02MS45LTEwLjgtNzkuNi0yMi42bDU0LjIgMjE2LjhjMSAzLjggMS40IDcuNyAxLjQgMTEuNnpNOTYgNDU2YTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHpNNjMuNSAyNTUuNWMtNC43IDQuNy00LjcgMTIuMyAwIDE3TDc5IDI4OCA2My41IDMwMy41Yy00LjcgNC43LTQuNyAxMi4zIDAgMTdzMTIuMyA0LjcgMTcgMEw5NiAzMDUgMTExLjUgMzIwLjVjNC43IDQuNyAxMi4zIDQuNyAxNyAwczQuNy0xMi4zIDAtMTdMMTEzIDI4OCAxMjguNSAyNzIuNWM0LjctNC43IDQuNy0xMi4zIDAtMTdzLTEyLjMtNC43LTE3IDBMOTYgMjcxIDgwLjUgMjU1LjVjLTQuNy00LjctMTIuMy00LjctMTcgMHpNMzA0IDI4MGwwIDQwYzAgOC44IDcuMiAxNiAxNiAxNmw0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04IDAgMC04YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0eiJdCiAgICB9OwogICAgZmFNYXJ0aW5pR2xhc3NFbXB0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXJ0aW5pLWdsYXNzLWVtcHR5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImdsYXNzLW1hcnRpbmkiXSwgImYwMDAiLCAiTTMyIDMyQzE5LjEgMzIgNy40IDM5LjggMi40IDUxLjhTLjIgNzcuNSA5LjQgODYuNmwyMTQuNiAyMTQuNiAwIDE0Ni43LTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC0xNDYuNyAyMTQuNi0yMTQuNmM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0OTIuOSAzMiA0ODAgMzJMMzIgMzJ6TTI1NiAyNDIuN0wxMDkuMyA5NiA0MDIuNyA5NiAyNTYgMjQyLjd6Il0KICAgIH07CiAgICBmYUdsYXNzTWFydGluaSA9IGZhTWFydGluaUdsYXNzRW1wdHk7CiAgICBmYU1hZ25ldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYWduZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjk1MjJdLCAiZjA3NiIsICJNMCAxNzZMMCAyODhDMCA0MTEuNyAxMDAuMyA1MTIgMjI0IDUxMlM0NDggNDExLjcgNDQ4IDI4OGwwLTExMi0xMjggMCAwIDExMmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NmwwLTExMi0xMjggMHptMC00OGwxMjggMCAwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRsMCA2NHptMzIwIDBsMTI4IDAgMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NHoiXQogICAgfTsKICAgIGZhUm9hZEJhcnJpZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9hZC1iYXJyaWVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NjIiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkw2NCAyNjYuMyAxNDkuMiA5NiA2NCA5NiA2NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNDA1LjIgOTZsLTc0LjMgMC01LjQgMTAuNy05MC42IDE4MS4zIDc0LjMgMCA1LjQtMTAuNyA5MC42LTE4MS4zek0zNjIuOCAyODhsNzQuMyAwIDUuNC0xMC43IDkwLjYtMTgxLjMtNzQuMyAwLTUuNCAxMC43LTkwLjYgMTgxLjN6TTIwMi44IDk2bC01LjQgMTAuNy05MC42IDE4MS4zIDc0LjMgMCA1LjQtMTAuNyA5MC42LTE4MS4zLTc0LjMgMHptMjg4IDE5Mmw4NS4yIDAgMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDUzLjctODUuMiAxNzAuM3oiXQogICAgfTsKICAgIGZhQ29tcGFzc0RyYWZ0aW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbXBhc3MtZHJhZnRpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZHJhZnRpbmctY29tcGFzcyJdLCAiZjU2OCIsICJNOTkuMyAyNTYuMWw2OS40LTExOS45Yy01LjYtMTIuMi04LjgtMjUuOC04LjgtNDAuMiAwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2YzAgMTQuMy0zLjEgMjcuOS04LjggNDAuMmw0NC40IDc2LjdjLTIzLjEgMjYtNTMuNyA0NS4xLTg4LjQgNTMuOEwyNTYgMTkxLjkgMTg3LjkgMzA5LjVjMjEuNSA2LjggNDQuMyAxMC41IDY4LjEgMTAuNSA3MC43IDAgMTMzLjgtMzIuNyAxNzQuOS04NCAxMS4xLTEzLjggMzEuMi0xNiA0NS01czE2IDMxLjIgNSA0NWMtNTIuNyA2NS44LTEzMy45IDEwOC0yMjQuOCAxMDgtMzUuNCAwLTY5LjQtNi40LTEwMC43LTE4LjFMOTguNyA0NjMuN0M5NCA0NzEuOCA4NyA0NzguNCA3OC42IDQ4Mi42TDIzLjIgNTEwLjNjLTUgMi41LTEwLjkgMi4yLTE1LjYtLjdTMCA1MDEuNSAwIDQ5NmwwLTU1LjRjMC04LjQgMi4yLTE2LjcgNi41LTI0LjFsNjAtMTAzLjdjLTEyLjgtMTEuMi0yNC42LTIzLjUtMzUuMy0zNi44LTExLjEtMTMuOC04LjgtMzMuOSA1LTQ1czMzLjktOC44IDQ1IDVjNS43IDcuMSAxMS44IDEzLjggMTguMiAyMC4xek0zODEuMSA0MDcuOWMzMi41LTEzIDYyLjQtMzEgODguOS01Mi45bDM1LjYgNjEuNWM0LjIgNy4zIDYuNSAxNS42IDYuNSAyNC4xbDAgNTUuNGMwIDUuNS0yLjkgMTAuNy03LjYgMTMuNnMtMTAuNiAzLjItMTUuNiAuN2wtNTUuNC0yNy43Yy04LjQtNC4yLTE1LjQtMTAuOC0yMC4xLTE4LjlsLTMyLjMtNTUuOHpNMjU2IDEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYURyYWZ0aW5nQ29tcGFzcyA9IGZhQ29tcGFzc0RyYWZ0aW5nOwogICAgZmFTcXVhcmVQZXJzb25Db25maW5lZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGVyc29uLWNvbmZpbmVkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU1NzciLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTk2IDExMmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem04MCAxMDRjMC0zMC45IDI1LjEtNTYgNTYtNTZzNTYgMjUuMSA1NiA1NmwwIDEwMi4xYzAgMzYuNC0yOS41IDY1LjktNjUuOSA2NS45LTE3LjUgMC0zNC4zLTYuOS00Ni42LTE5LjNsLTU0LjctNTQuNy0yOC4xIDU2LjNjLTcuOSAxNS44LTI3LjEgMjIuMi00Mi45IDE0LjNzLTIyLjItMjcuMS0xNC4zLTQyLjlsNDgtOTZjNC42LTkuMiAxMy4zLTE1LjYgMjMuNS0xNy4zczIwLjUgMS43IDI3LjggOWw0MS40IDQxLjQgMC01OC43eiJdCiAgICB9OwogICAgZmFQbGF0ZVdoZWF0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYXRlLXdoZWF0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NWEiLCAiTTE3NiAzMmM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNi00NC4yIDAtODAtMzUuOC04MC04MGwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnpNNTYgNjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRTNDIuNyA2NCA1NiA2NHpNMjQgMTM2bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDE4NGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptOCA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjcyIDQ4YzAtOC44IDcuMi0xNiAxNi0xNiA0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNi00NC4yIDAtODAtMzUuOC04MC04MGwwLTE2ek00MDAgMzJjNDQuMiAwIDgwIDM1LjggODAgODBsMCAxNmMwIDguOC03LjIgMTYtMTYgMTYtNDQuMiAwLTgwLTM1LjgtODAtODBsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2MGwwIDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwIDguOCAwIDE2IDcuMiAxNiAxNnpNMzUyIDE3NmM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDQ0LjItMzUuOCA4MC04MCA4MC04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MHptLTk2IDE2bDAgMTZjMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC00NC4yIDM1LjgtODAgODAtODAgOC44IDAgMTYgNy4yIDE2IDE2ek0zLjUgMzQ3LjZDMS42IDMzMi45IDEzIDMyMCAyNy44IDMyMGw0NTYuNCAwYzE0LjggMCAyNi4yIDEyLjkgMjQuNCAyNy42LTYuMyA1MC4yLTQ0LjQgODkuNC05Mi42IDk4LjRsMCAyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yYy00OC4yLTktODYuMy00OC4yLTkyLjUtOTguNHoiXQogICAgfTsKICAgIGZhU2lnbkhhbmdpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2lnbi1oYW5naW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNpZ24iXSwgImY0ZDkiLCAiTTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAzNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzUyIDAgMCAzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zNTItMzIgMEMxNC4zIDEyOCAwIDExMy43IDAgOTZTMTQuMyA2NCAzMiA2NGwzMiAwIDAtMzJDNjQgMTQuMyA3OC4zIDAgOTYgMHpNMjA4IDE3NmwyNDAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE0NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjQwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTQ0YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFTaWduID0gZmFTaWduSGFuZ2luZzsKICAgIGZhQ2FyQmF0dGVyeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXItYmF0dGVyeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJiYXR0ZXJ5LWNhciJdLCAiZjVkZiIsICJNODAgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmw5NiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDE2IDB6TTM5MiAxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAzMi0zMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMyIDAgMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzIgMzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzIgMCAwLTMyek02NCAyNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggMjE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHoiXQogICAgfTsKICAgIGZhQmF0dGVyeUNhciA9IGZhQ2FyQmF0dGVyeTsKICAgIGZhU2hpcnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hpcnQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjgwODUsICJ0LXNoaXJ0IiwgInRzaGlydCJdLCAiZjU1MyIsICJNMzIwLjIgMTEyYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDUzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w2MTcuNiAxNjkuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtNTAuNyA1MC43Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtNDEuNC00MS40IDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0xOTIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0yMjQtNDEuNCA0MS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMEwyMi45IDIxNC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM0wxNDEuNSA1MC43YzEyLTEyIDI4LjMtMTguNyA0NS4zLTE4LjdsNTMuNSAwYzAgNDQuMiAzNS44IDgwIDgwIDgweiJdCiAgICB9OwogICAgZmFUU2hpcnQgPSBmYVNoaXJ0OwogICAgZmFUc2hpcnQgPSBmYVNoaXJ0OwogICAgZmFQYXJhZ3JhcGggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFyYWdyYXBoIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTgyXSwgImYxZGQiLCAiTTE2MCAwTDQxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDE2LTQ4IDAgMCA0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNjAtNDggMEM3MS42IDMyMCAwIDI0OC40IDAgMTYwUzcxLjYgMCAxNjAgMHoiXQogICAgfTsKICAgIGZhRW52ZWxvcGVzQnVsayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlbnZlbG9wZXMtYnVsayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJtYWlsLWJ1bGsiXSwgImY2NzQiLCAiTTExMiAwQzg1LjUgMCA2NCAyMS41IDY0IDQ4bDAgMTYwIDgwIDAgMC0zMmMwLTUzIDQzLTk2IDk2LTk2bDIwOCAwIDAtMzJjMC0yNi41LTIxLjUtNDgtNDgtNDhMMTEyIDB6TTI0MCAxMjhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMzIgODAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMTEyIDE2MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTkyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yODggMHptMjAwIDY0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNDggMjU2Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDEwLjQgMTU2LjYgODYuMmMxLjEgLjYgMi4yIC45IDMuNCAuOXMyLjQtLjMgMy40LS45TDMyMCAzMTQuNCAzMjAgMzA0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDI1NnpNMzIwIDM2OS4yTDE4Ni42IDQ0Mi42Yy04LjEgNC41LTE3LjMgNi44LTI2LjYgNi44cy0xOC40LTIuNC0yNi42LTYuOEwwIDM2OS4yIDAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDIyNCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTQuOHoiXQogICAgfTsKICAgIGZhTWFpbEJ1bGsgPSBmYUVudmVsb3Blc0J1bGs7CiAgICBmYUd1aXRhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJndWl0YXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdhNiIsICJNNDY1IDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDM4MyA1NWMtMi40IDIuNC00LjMgNS4zLTUuNSA4LjVsLTE1LjQgNDEtNzcuNSA3Ny42Yy00NS4xLTI5LjQtOTkuMy0zMC4yLTEzMSAxLjYtMTEgMTEtMTggMjQuNi0yMS40IDM5LjYtMy43IDE2LjYtMTkuMSAzMC43LTM2LjEgMzEuNi0yNS42IDEuMy00OS4zIDEwLjctNjcuMyAyOC42LTQ0LjggNDQuOC0zNi40IDEyNS44IDE4LjcgMTgwLjlTMTgzLjYgNTI4IDIyOC40IDQ4My4yYzE3LjktMTcuOSAyNy40LTQxLjcgMjguNi02Ny4zIC45LTE3IDE1LTMyLjMgMzEuNi0zNi4xIDE1LTMuNCAyOC42LTEwLjUgMzkuNi0yMS40IDMxLjgtMzEuOCAzMS04NS45IDEuNi0xMzFsNzcuNi03Ny42IDQxLTE1LjRjMy4yLTEuMiA2LjEtMy4xIDguNS01LjVsNDgtNDhjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlMNDY1IDd6TTIwOCAyNTZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2eiJdCiAgICB9OwogICAgZmFTdWl0Y2FzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdWl0Y2FzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTUyM10sICJmMGYyIiwgIk0yMDAgNDhsMTEyIDBjNC40IDAgOCAzLjYgOCA4bDAgNDAtMTI4IDAgMC00MGMwLTQuNCAzLjYtOCA4LTh6bS01NiA4bDAgNDI0IDIyNCAwIDAtNDI0YzAtMzAuOS0yNS4xLTU2LTU2LTU2TDIwMCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NnpNNDE2IDk2bDAgMzg0IDMyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTMyIDB6TTk2IDQ4MGwwLTM4NC0zMiAwQzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMiAweiJdCiAgICB9OwogICAgZmFDaXJjbGVVcDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE0NjcsICJhcnJvdy1hbHQtY2lyY2xlLXVwIl0sICJmMzViIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptMTEuMy0zODcuM2wxMDQgMTA0YzQuNiA0LjYgNS45IDExLjUgMy41IDE3LjRTMzY2LjUgMjU2IDM2MCAyNTZsLTU2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05Ni01NiAwYy02LjUgMC0xMi4zLTMuOS0xNC44LTkuOXMtMS4xLTEyLjkgMy41LTE3LjRsMTA0LTEwNGM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHoiXQogICAgfTsKICAgIGZhQXJyb3dBbHRDaXJjbGVVcDIgPSBmYUNpcmNsZVVwMjsKICAgIGZhRiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTAyXSwgIjQ2IiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjAgMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwIDAtMTI4IDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyeiJdCiAgICB9OwogICAgZmFYbWFya3NMaW5lcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ4bWFya3MtbGluZXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU5YSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDU3NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyem0wIDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1NzYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0MTZ6TTcgMTY3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw1NSA1NS01NSA1NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU1LTU1IDU1IDU1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTUtNTUgNTUtNTVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTUgNTUtNTUtNTVjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwek0yNjUgMTY3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDU1IDU1LTU1IDU1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNTUtNTUgNTUgNTVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01NS01NSA1NS01NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01NSA1NS01NS01NXpNNDU1IDE2N2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNTUgNTUtNTUgNTVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw1NS01NSA1NSA1NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU1LTU1IDU1LTU1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTU1IDU1LTU1LTU1Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHoiXQogICAgfTsKICAgIGZhRWFydGhPY2VhbmlhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVhcnRoLW9jZWFuaWEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZ2xvYmUtb2NlYW5pYSJdLCAiZTQ3YiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE5MiAxNTAuNmMwLTEyLjUgMTAuMS0yMi42IDIyLjYtMjIuNmw0MS40IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE4LjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTE2LTE2Yy00LjItNC4yLTYuNi0xMC02LjYtMTZ6TTQzMiAyNTZjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTQxMS4zIDM3OS4zbC0zMiAzMmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzMi0zMmM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6TTIyNCA0MzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnptLTk2LTgwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE4LjdjMC04LjUgMy40LTE2LjYgOS40LTIyLjZsNDgtNDhjNC4yLTQuMiAxMC02LjYgMTYtNi42bDYuNiAwYzguOCAwIDE2IDcuMiAxNiAxNnM3LjIgMTYgMTYgMTYgMTYtNy4yIDE2LTE2IDcuMi0xNiAxNi0xNmw2LjYgMGM2IDAgMTEuOCAyLjQgMTYgNi42bDQ4IDQ4YzYgNiA5LjQgMTQuMSA5LjQgMjIuNmwwIDUwLjdjMCAxNy43LTE0LjMgMzItMzIgMzJsLTUwLjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTEzLjMtMTMuM2MtNi02LTE0LjEtOS40LTIyLjYtOS40TDEyOCAzNTJ6Il0KICAgIH07CiAgICBmYUdsb2JlT2NlYW5pYSA9IGZhRWFydGhPY2VhbmlhOwogICAgZmFDb21tZW50U2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudC1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGIzIiwgIk00MS0yNUMzMS42LTM0LjMgMTYuNC0zNC4zIDctMjVTLTIuMy0uNCA3IDlMNTM1IDUzN2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTk2LjYtOTYuNmM0NC40LTQzLjIgNzEuNi0xMDEuOCA3MS42LTE2Ni41IDAtMTMyLjUtMTE0LjYtMjQwLTI1Ni0yNDAtNjMgMC0xMjAuOCAyMS40LTE2NS40IDU2LjhMNDEtMjV6bTE5LjQgMTU1QzQyLjIgMTYzIDMyIDIwMC4zIDMyIDIzOS45IDMyIDI5NC4yIDUxLjIgMzQ0LjIgODMuNiAzODQuNEwzNC44IDQ3Ni43Yy00LjggOS0zLjMgMjAgMy42IDI3LjVTNTYuMSA1MTQgNjUuNSA1MTBsMTE4LjQtNTAuN2MzMS44IDEzLjMgNjcuMSAyMC43IDEwNC4xIDIwLjcgMzYuNCAwIDcwLjktNy4xIDEwMi4zLTE5LjlMNjAuMyAxMzAuMXoiXQogICAgfTsKICAgIGZhUGxheSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGF5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTY1NF0sICJmMDRiIiwgIk05MS4yIDM2LjljLTEyLjQtNi44LTI3LjQtNi41LTM5LjYgLjdTMzIgNTcuOSAzMiA3MmwwIDM2OGMwIDE0LjEgNy41IDI3LjIgMTkuNiAzNC40czI3LjIgNy41IDM5LjYgLjdsMzM2LTE4NGMxMi44LTcgMjAuOC0yMC41IDIwLjgtMzUuMXMtOC0yOC4xLTIwLjgtMzUuMWwtMzM2LTE4NHoiXQogICAgfTsKICAgIGZhVmlhbENpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZpYWwtY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1OTYiLCAiTTMyIDMyQzMyIDE0LjMgNDYuMyAwIDY0IDBMMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxNjEuNGMtNjYuMSAzMC4zLTExMiA5Ny4xLTExMiAxNzQuNiAwIDM5LjcgMTIgNzYuNiAzMi43IDEwNy4yLTEwLjMgMy4xLTIxLjMgNC44LTMyLjcgNC44LTYxLjkgMC0xMTItNTAuMS0xMTItMTEyTDY0IDY0QzQ2LjMgNjQgMzIgNDkuNyAzMiAzMnptOTYgMzJsMCAxMjggOTYgMCAwLTEyOC05NiAwem05NiAzMzZhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjAxLjQtNjAuOWMtNy4xLTUuMi0xNy4yLTMuNi0yMi40IDMuNWwtNTMgNzIuOS0yNi44LTI2LjhjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjMy4zIDMuMyA3LjkgNSAxMi42IDQuNnM4LjktMi44IDExLjctNi41bDY0LTg4YzUuMi03LjEgMy42LTE3LjItMy41LTIyLjN6Il0KICAgIH07CiAgICBmYUJyaWRnZUNpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyaWRnZS1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRjOSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDggMCAwIDY0LTQwIDAgMCAxMTJjMzcuNiA5LjQgNjQgNDMuMiA2NCA4MmwwIDk0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTUzIDQzLTk2IDk2LTk2IDYuNCAwIDEyLjcgLjYgMTguNyAxLjggMzQuNy00OS41IDkyLjItODEuOCAxNTcuMy04MS44IDI4LjYgMCA1NS42IDYuMiA4MCAxNy40bDAtNjUuNC00MCAwIDAtNjQgOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyek00MjQgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNMjk2IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTg4IDk2bDgwIDAgMCA2NC04MCAwIDAtNjR6TTU3NiA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdCiAgICB9OwogICAgZmFDZWRpU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjZWRpLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTBkZiIsICJNMjMyIDMyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjYuNUM4OC44IDczLjkgMTYgMTU2LjQgMTYgMjU2Uzg4LjggNDM4LjEgMTg0IDQ1My41bDAgMjYuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjQuNmM0Ni44LTMuNyA4OS4xLTIzLjYgMTIxLjMtNTMuOSAxMi45LTEyLjEgMTMuNC0zMi40IDEuMy00NS4ycy0zMi40LTEzLjQtNDUuMi0xLjNjLTIwLjcgMTkuNi00Ny42IDMyLjctNzcuMyAzNi4ybDAtMjcwLjFjMjkuOCAzLjUgNTYuNiAxNi42IDc3LjMgMzYuMiAxMi45IDEyLjEgMzMuMSAxMS41IDQ1LjItMS4zczExLjUtMzMuMS0xLjMtNDUuMkMzMjEuMSA4MC4yIDI3OC44IDYwLjMgMjMyIDU2LjZMMjMyIDMyem0tNDggOTEuOGwwIDI2NC40QzEyNC4zIDM3My44IDgwIDMyMC4xIDgwIDI1NnM0NC4zLTExNy44IDEwNC0xMzIuMnoiXQogICAgfTsKICAgIGZhUHV6emxlUGllY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicHV6emxlLXBpZWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTEzXSwgImYxMmUiLCAiTTIyNCAwYzM1LjMgMCA2NCAyMS41IDY0IDQ4IDAgMTAuNC00LjQgMjAtMTIgMjcuOS02LjYgNi45LTEyIDE1LjMtMTIgMjQuOSAwIDE1IDEyLjIgMjcuMiAyNy4yIDI3LjJsNDQuOCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDQuOGMwIDE1IDEyLjIgMjcuMiAyNy4yIDI3LjIgOS41IDAgMTgtNS40IDI0LjktMTIgNy45LTcuNSAxNy41LTEyIDI3LjktMTIgMjYuNSAwIDQ4IDI4LjcgNDggNjRzLTIxLjUgNjQtNDggNjRjLTEwLjQgMC0yMC4xLTQuNC0yNy45LTEyLTYuOS02LjYtMTUuMy0xMi0yNC45LTEyLTE1IDAtMjcuMiAxMi4yLTI3LjIgMjcuMkwzODQgNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC01Ni44IDBjLTEyLjggMC0yMy4yLTEwLjQtMjMuMi0yMy4yIDAtOS4yIDUuOC0xNy4zIDEzLjItMjIuOCAxMS42LTguNyAxOC44LTIwLjcgMTguOC0zNCAwLTI2LjUtMjguNy00OC02NC00OHMtNjQgMjEuNS02NCA0OGMwIDEzLjMgNy4yIDI1LjMgMTguOCAzNCA3LjQgNS41IDEzLjIgMTMuNSAxMy4yIDIyLjggMCAxMi44LTEwLjQgMjMuMi0yMy4yIDIzLjJMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDM0My4yYzAtMTIuOCAxMC40LTIzLjIgMjMuMi0yMy4yIDkuMiAwIDE3LjMgNS44IDIyLjggMTMuMiA4LjcgMTEuNiAyMC43IDE4LjggMzQgMTguOCAyNi41IDAgNDgtMjguNyA0OC02NHMtMjEuNS02NC00OC02NGMtMTMuMyAwLTI1LjMgNy4yLTM0IDE4LjgtNS41IDcuNC0xMy41IDEzLjItMjIuOCAxMy4yLTEyLjggMC0yMy4yLTEwLjQtMjMuMi0yMy4yTDAgMTc2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDEwOC44IDBjMTUgMCAyNy4yLTEyLjIgMjcuMi0yNy4yIDAtOS41LTUuNC0xOC0xMi0yNC45LTcuNS03LjktMTItMTcuNS0xMi0yNy45IDAtMjYuNSAyOC43LTQ4IDY0LTQ4eiJdCiAgICB9OwogICAgZmFIZWxtZXRVbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWxtZXQtdW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUwMyIsICJNNDc5LjUgMjI0QzQ3MS4yIDk4LjkgMzY3LjIgMCAyNDAgMCAxMDcuNSAwIDAgMTA3LjUgMCAyNDBsMCA1Ni4zQzAgMzQ0LjggMzkuMiAzODQgODcuNyAzODRsMTI3LjMgMCAxMjguNiAxMjEuNGM0LjUgNC4yIDEwLjQgNi42IDE2LjUgNi42bDk2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTg2LjUgMC0xLjUtMS41IDAtMTc0LjUgMTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLS41IDB6TTMyMCA0MTcuMmwtNzgtNzMuNyAzMi40LTU1LjUgNDUuNiAwIDAgMTI5LjJ6TTI4NS4zIDEwMy4xbDM0LjcgNTIgMC00My4yYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA5NmMwIDcuMS00LjYgMTMuMy0xMS40IDE1LjNzLTE0LS42LTE3LjktNi40bC0zNC43LTUyIDAgNDMuMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTk2YzAtNy4xIDQuNi0xMy4zIDExLjQtMTUuM3MxNCAuNiAxNy45IDYuNHpNMTYwIDExMmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNjRjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhsMC02NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2eiJdCiAgICB9OwogICAgZmFHbGFzc1dhdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdsYXNzLXdhdGVyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU0ZjQiLCAiTTMyIDBDMjMuMSAwIDE0LjYgMy43IDguNiAxMC4yUy0uNiAyNS40IC4xIDM0LjNMMjguOSA0MzcuN2MzIDQxLjkgMzcuOCA3NC4zIDc5LjggNzQuM2wxNjYuNiAwYzQyIDAgNzYuOC0zMi40IDc5LjgtNzQuM0wzODMuOSAzNC4zYy42LTguOS0yLjQtMTcuNi04LjUtMjQuMVMzNjAuOSAwIDM1MiAwTDMyIDB6TTczIDE1Ni41bC02LjYtOTIuNSAyNTEuMyAwLTYuNiA5Mi41LTI0LjIgMTIuMWMtMTkuNCA5LjctNDIuMiA5LjctNjEuNiAwLTIwLjktMTAuNC00NS41LTEwLjQtNjYuNCAwLTE5LjQgOS43LTQyLjIgOS43LTYxLjYgMEw3MyAxNTYuNXoiXQogICAgfTsKICAgIGZhSGVhcnRDaXJjbGVCb2x0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYXJ0LWNpcmNsZS1ib2x0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZmMiLCAiTTI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN0MyOTYgNTIuNSAzMzYuMiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxNy42LTMuNCAzNS42LTkuNSA1My43LTIxLjgtOC42LTQ1LjYtMTMuNC03MC41LTEzLjQtMTA2IDAtMTkyIDg2LTE5MiAxOTIgMCAyOC41IDYuMiA1NS42IDE3LjQgODAtLjUgMC0uOSAwLTEuNCAwLTE1LjUgMC0zMC44LTQuNi00My4xLTE0LjEtNzMtNTUuNy0yMTIuOS0xODYtMjEyLjktMjk4LjJsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6TTI4OCA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTc3LjQtNzdjLTUuOC00LjItMTMuOC00LTE5LjQgLjVsLTgwIDY0Yy01LjMgNC4yLTcuNCAxMS40LTUuMSAxNy44UzM2OS4yIDQxNiAzNzYgNDE2bDMyLjkgMC0xNS45IDQyLjRjLTIuNSA2LjctLjIgMTQuMyA1LjYgMTguNnMxMy44IDQgMTkuNC0uNWw4MC02NGM1LjMtNC4yIDcuNC0xMS40IDUuMS0xNy44UzQ5NC44IDM4NCA0ODggMzg0bC0zMi45IDAgMTUuOS00Mi40YzIuNS02LjcgLjItMTQuMy01LjYtMTguNnoiXQogICAgfTsKICAgIGZhUHVtcFNvYXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicHVtcC1zb2FwIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImUwNmIiLCAiTTk2IDBsMCA4MCAxMjggMCAwLTI0IDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMzA5LjMgOCAyOTYgOGwtNzIgMCAwLThjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDBDMTEwLjMtMzIgOTYtMTcuNyA5NiAwek02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDEyOHpNMjI0IDM0NGMwIDM1LjMtMjguNyA1Ni02NCA1NnMtNjQtMjAuNy02NC01NmMwLTMyLjUgMzctODAuOSA1MC45LTk3LjkgMy4yLTMuOSA4LjEtNi4xIDEzLjEtNi4xczkuOSAyLjIgMTMuMSA2LjFDMTg3IDI2My4xIDIyNCAzMTEuNSAyMjQgMzQ0eiJdCiAgICB9OwogICAgZmFIYW5kU2Npc3NvcnMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtc2Npc3NvcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI1NyIsICJNNDAgMjA4Yy0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwbDE4MC4yIDBjLTcuNiA4LjUtMTIuMiAxOS43LTEyLjIgMzIgMCAyNS4zIDE5LjUgNDYgNDQuMyA0Ny45LTcuNyA4LjUtMTIuMyAxOS44LTEyLjMgMzIuMSAwIDI2LjUgMjEuNSA0OCA0OCA0OGw5NiAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4bDAtMTEzLjFjMC00MC4yLTE2LTc4LjgtNDQuNC0xMDcuMy0yMi44LTIyLjgtNTMuNi0zNS42LTg1LjgtMzUuNkwzMzYgNjRjLTIxLjMgMC0zOS4zIDEzLjktNDUuNiAzMy4xbDc0LjUgMjMuN2M4LjQgMi43IDEzLjEgMTEuNyAxMC40IDIwLjFzLTExLjcgMTMuMS0yMC4xIDEwLjRsLTY3LjEtMjEuNCAwIC4xLTIwNC02NC4xQzYyLjkgNTkuMiA0MC41IDcwLjkgMzMuOSA5MnM1LjEgNDMuNSAyNi4yIDUwLjJMMjY5LjUgMjA4IDQwIDIwOHoiXQogICAgfTsKICAgIGZhRG9sbHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG9sbHkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiZG9sbHktYm94Il0sICJmNDcyIiwgIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDcyLjkgMCA5Mi4xIDI3Ni4yYy0yMi41IDE3LjYtMzcgNDUtMzcgNzUuOCAwIDUzIDQzIDk2IDk2IDk2IDUyLjQgMCA5NS4xLTQyIDk2LTk0LjNsMjAyLjEtNjcuNGMxNi44LTUuNiAyNS44LTIzLjcgMjAuMi00MC41cy0yMy43LTI1LjgtNDAuNS0yMC4yTDMzMS44IDM1N2MtMTcuMi0yMi4xLTQzLjktMzYuNS03NC0zN0wxNjUuNyA0My44QzE1Ni45IDE3LjYgMTMyLjUgMCAxMDQuOSAwTDMyIDB6TTIwOCA0MTZhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMjgwLjUgODkuM2MtMjUuMiA4LjItMzkgMzUuMy0zMC44IDYwLjVsMzkuNiAxMjEuN2M4LjIgMjUuMiAzNS4zIDM5IDYwLjUgMzAuOGwxMjEuNy0zOS42YzI1LjItOC4yIDM5LTM1LjMgMzAuOC02MC41TDQ2Mi44IDgwLjVjLTguMi0yNS4yLTM1LjMtMzktNjAuNS0zMC44TDI4MC41IDg5LjN6Il0KICAgIH07CiAgICBmYURvbGx5Qm94ID0gZmFEb2xseTsKICAgIGZhUGFwZXJjbGlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhcGVyY2xpcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODIwNl0sICJmMGM2IiwgIk0yMjQuNiAxMi44YzU2LjItNTYuMiAxNDcuNC01Ni4yIDIwMy42IDBzNTYuMiAxNDcuNCAwIDIwMy42bC0xNjQgMTY0Yy0zNC40IDM0LjQtOTAuMSAzNC40LTEyNC41IDBzLTM0LjQtOTAuMSAwLTEyNC41TDI5Mi41IDEwMy4zYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMTg1IDMwMS4zYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMTY0LTE2NGMzMS4yLTMxLjIgMzEuMi04MS45IDAtMTEzLjFzLTgxLjktMzEuMi0xMTMuMSAwbC0xNjQgMTY0Yy01My4xIDUzLjEtNTMuMSAxMzkuMiAwIDE5Mi4zczEzOS4yIDUzLjEgMTkyLjMgMEw0MjguMyAyODQuM2MxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zTDM0My40IDQ1OS42Yy03OC4xIDc4LjEtMjA0LjcgNzguMS0yODIuOCAwcy03OC4xLTIwNC43IDAtMjgyLjhsMTY0LTE2NHoiXQogICAgfTsKICAgIGZhRGVtb2NyYXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGVtb2NyYXQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjc0NyIsICJNNjQgMzJjMC04LjkgMy44LTIwLjkgNi4yLTI3LjMgMS0yLjggMy44LTQuNyA2LjgtNC43IDEuOSAwIDMuOCAuNyA1LjIgMi4xTDEyOCA0NS43IDE3My44IDIuMWMxLjQtMS4zIDMuMi0yLjEgNS4yLTIuMSAzIDAgNS44IDEuOCA2LjggNC43IDIuNCA2LjUgNi4yIDE4LjQgNi4yIDI3LjMgMCAyNi41LTIxLjkgNDItMjkuNSA0Ni42bDc2LjIgNzIuNmM2IDUuNyAxMy45IDguOCAyMi4xIDguOGwyMTkuMiAwIDMyIDBjNDAuMyAwIDc4LjIgMTkgMTAyLjQgNTEuMmwxOS4yIDI1LjZjMTAuNiAxNC4xIDcuNyAzNC4yLTYuNCA0NC44cy0zNC4yIDcuNy00NC44LTYuNGwtMTkuMi0yNS42Yy01LjMtNy0xMS44LTEyLjgtMTkuMi0xN2wwIDg3LjQtMzUyIDAtNDAuNC05NC4zYy0zLjktOS4yLTE1LjMtMTIuNi0yMy42LTdsLTQyLjEgMjhjLTkuMSA2LjEtMTkuNyA5LjMtMzAuNyA5LjNsLTIgMEMyMy45IDI1NiAwIDIzMi4xIDAgMjAyLjcgMCAxOTAuNiA0LjEgMTc4LjkgMTEuNyAxNjkuNEw4Ny42IDc0LjZDNzguMSA2Ny40IDY0IDUzLjIgNjQgMzJ6TTU0NCAzNTJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjQtMTYwIDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMjggMzUyIDB6TTI1NiAyODBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yNDgtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMzY4IDI4MGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il0KICAgIH07CiAgICBmYVNxdWFyZUFycm93VXBSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtYXJyb3ctdXAtcmlnaHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZXh0ZXJuYWwtbGluay1zcXVhcmUiXSwgImYxNGMiLCAiTTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTI3MiAyOTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMTEyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTQuMSAwLTEwMyAxMDNjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwxMDMtMTAzIDAgNTQuMXoiXQogICAgfTsKICAgIGZhRXh0ZXJuYWxMaW5rU3F1YXJlID0gZmFTcXVhcmVBcnJvd1VwUmlnaHQ7CiAgICBmYUZlcnJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZlcnJ5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZWEiLCAiTTIyNCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMkwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDQ4IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCAxMjgtLjEgMGMuMSAuNyAuMSAxLjMgLjEgMiAwIDMwLjItNy42IDU5LjgtMjIgODYuM2wtMTIuNyAyMy4zLS42IDFjLTIyLjMtMTEuMy00Ni41LTE2LjgtNzAuOC0xNi43LTMyLjUgLjItNjQuOSAxMC43LTkyLjQgMzEuNC0yMi4xIDE2LjYtMjkuMSAxNi42LTUxLjIgMC0yOC4xLTIxLjEtNjEuMy0zMS42LTk0LjQtMzEuNC0yMy42IC4yLTQ3LjEgNS43LTY4LjcgMTYuN2wtLjYtMS0xMi43LTIzLjNjLTE0LjQtMjYuNS0yMi01Ni4yLTIyLTg2LjMgMC0uNyAwLTEuNCAuMS0ybC0uMSAwIDAtMTI4YzAtNDQuMiAzNS44LTgwIDgwLTgwbDQ4IDAgMC0zMnpNMTYwIDI1NmwzMjAgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZsLTI4OCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTJ6TTQwMy40IDQ3Ni4xQzM3OS4xIDQ5NC4zIDM1MS4xIDUxMiAzMjAgNTEycy01OS4xLTE3LjctODMuNC0zNS45Yy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0yMy44IDE3LjktNTQuMSAzNS41LTg4LjEgMzUuMy0yMC40LS4xLTQwLjctNi43LTU5LjgtMjEuMS0xMC42LTgtMTIuNy0yMy00LjctMzMuNnMyMy0xMi43IDMzLjYtNC43YzExLjMgOC41IDIxLjYgMTEuNCAzMS4yIDExLjUgMTcuNiAuMSAzNy4zLTkuNCA1OC45LTI1LjcgMzguNC0yOSA5MC41LTI5IDEyOSAwIDI0IDE4LjEgNDAuNyAyNi4zIDU0LjUgMjYuM3MzMC41LTguMiA1NC41LTI2LjNjMzguNC0yOSA5MC41LTI5IDEyOSAwIDE2LjkgMTIuNyAzMi45IDIxLjUgNDcuOCAyNC42IDEzLjcgMi44IDI3LjQgLjkgNDIuMy0xMC4zIDEwLjYtOCAyNS42LTUuOSAzMy42IDQuN3M1LjkgMjUuNi00LjcgMzMuNmMtMjYuNCAxOS45LTU0LjIgMjQuNC04MC43IDE5LjEtMjUuMy01LjEtNDguMS0xOC45LTY3LjItMzMuMy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMHoiXQogICAgfTsKICAgIGZhTW9zcXVpdG8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9zcXVpdG8iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUyYiIsICJNMTc4LjUgNDk1LjJjLTcuNSA5LjYtMjEgMTIuMS0zMS4zIDUuM1MxMzMuNSA0ODAgMTM4LjkgNDY5bDEuMi0yLjIgMzYuMi01OCAwLTQxIC4zLTRjLjYtMy45IDIuMi03LjcgNC42LTEwLjlsMzkuMy01Mi4yLTY2LjIgNTkuNWMtMTcgMTUuMy0zOSAyMy43LTYxLjkgMjMuOGwtOC4xIDBjLTQ2LjYgMC04NC40LTM3LjgtODQuNC04NC40IDAtNDMgMzIuNC03OS4yIDc1LjEtODMuOWwxMzAuNS0xNC41LTQ0LjgtMzguMy0yLjQtMi40Yy01LjMtNi03LjMtMTQuNC01LjMtMjIuM2wxMy4zLTUzLjQtMjUuOS0zOC45LTEuMy0yLjFjLTUuOC0xMC44LTIuNy0yNC42IDcuNC0zMS43IDEwLjEtNy4xIDIzLjctNS4xIDMxLjQgNC4zbDEuNSAyIDMyIDQ4IDEuNCAyLjJjMi44IDUuMyAzLjUgMTEuNiAyLjEgMTcuNmwtMTIuMyA0OS4yIDUzLjMgNDUuNyAwLTI4LjhjMC0xMS44IDYuNS0yMi4xIDE2LTI3LjdsMC02MC41IC4zLTMuM2MxLjUtNy4zIDgtMTIuNyAxNS43LTEyLjdzMTQuMiA1LjUgMTUuNyAxMi43bC4zIDMuMiAwIDYwLjVjOS42IDUuNSAxNiAxNS44IDE2IDI3LjdsMCAyOC45IDUzLjQtNDUuOC0xMi4zLTQ5LjJjLTEuNS01LjktLjctMTIuMiAyLjEtMTcuNmwxLjQtMi4yIDMyLTQ4IDEuNS0yYzcuNy05LjQgMjEuMy0xMS41IDMxLjQtNC4zIDEwLjEgNy4xIDEzLjEgMjAuOSA3LjQgMzEuN2wtMS4zIDIuMS0yNS45IDM4LjkgMTMuMyA1My40YzIgOC0uMSAxNi4zLTUuMyAyMi4zbC0yLjQgMi40LTQ0LjcgMzguMyAxMzAuNSAxNC41YzQyLjggNC44IDc1LjEgNDAuOSA3NS4xIDgzLjkgMCA0Ni42LTM3LjggODQuNC04NC40IDg0LjRsLTguMSAwYy0yMi44IDAtNDQuOS04LjUtNjEuOS0yMy44bC02Ni4xLTU5LjUgMzkuMiA1Mi4yYzIuNCAzLjIgNCA3IDQuNiAxMC45bC4zIDQgMCA0MSAzNi4yIDU4IDEuMiAyLjFjNS40IDExIDIgMjQuNy04LjMgMzEuNXMtMjMuOCA0LjQtMzEuMy01LjNsLTEuNC0yLTQwLTY0LTEuNi0zLjFjLTEuNC0zLjEtMi4xLTYuNi0yLjEtMTAuMWwwLTM5LjgtMzIuNC00My4xIDAgNzQuN2MwIDE3LjctMTQuMyAzMi0zMiAzMi0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTc0LjYtMzIuMyA0MyAwIDM5LjhjMCAzLjUtLjcgNi45LTIuMSAxMC4xbC0xLjYgMy4xLTQwIDY0LTEuNCAyeiJdCiAgICB9OwogICAgZmFCdWlsZGluZ0NpcmNsZUFycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctY2lyY2xlLWFycm93LXJpZ2h0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZDEiLCAiTTMyIDY0QzMyIDI4LjcgNjAuNyAwIDk2IDBMMzUyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNDQuN2MtMzUuNyAyLjktNjguNSAxNS42LTk2IDM1LjRsMC00YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDQgMGMtMTMuOCAxOS4yLTI0LjEgNDEtMzAuMSA2NC41LTEuOS0uNC0zLjktLjUtNS45LS41bC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDgwIDc0LjkgMGM2LjEgMTcuMyAxNC42IDMzLjQgMjUuMSA0OEw5NiA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDMyIDY0ek0xNDQgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHptMTEyIDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTE0NCAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNMjg4IDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0xNDAuNy02Ny4zYy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNmwyOC43IDI4LjctODkuNCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDg5LjQgMC0yOC43IDI4LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGw1Ni01NmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNmwtNTYtNTZjLTYuMi02LjItMTYuNC02LjItMjIuNiAweiJdCiAgICB9OwogICAgZmFMZWZ0UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGVmdC1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzg1OTYsICJhcnJvd3MtYWx0LWgiXSwgImYzMzciLCAiTTUwMi42IDQwNi42bC05NiA5NmMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTMzUyIDQ5Mi45IDM1MiA0ODBsMC02NC0zMjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMjAgMCAwLTY0YzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjN6TTkuNCAxNTAuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsOTYtOTZjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlTMTYwIDE5LjEgMTYwIDMybDAgNjQgMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyMCAwIDAgNjRjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTk2LTk2eiJdCiAgICB9OwogICAgZmFBcnJvd3NBbHRIID0gZmFMZWZ0UmlnaHQ7CiAgICBmYVZpcnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZpcnVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwNzQiLCAiTTI5NiA0MGMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDQ0LjEtNTMuMyA2Ni4xLTg0LjUgMzUtMTUuNi0xNS42LTQwLjktMTUuNi01Ni42IDBzLTE1LjYgNDAuOSAwIDU2LjZjMzEuMiAzMS4yIDkuMSA4NC41LTM1IDg0LjUtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGM0NC4xIDAgNjYuMSA1My4zIDM1IDg0LjUtMTUuNiAxNS42LTE1LjYgNDAuOSAwIDU2LjZzNDAuOSAxNS42IDU2LjYgMGMzMS4yLTMxLjIgODQuNS05LjEgODQuNSAzNSAwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwYzAtNDQuMSA1My4zLTY2LjEgODQuNS0zNSAxNS42IDE1LjYgNDAuOSAxNS42IDU2LjYgMHMxNS42LTQwLjkgMC01Ni42Yy0zMS4yLTMxLjItOS4xLTg0LjUgMzUtODQuNSAyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MGMtNDQuMSAwLTY2LjEtNTMuMy0zNS04NC41IDE1LjYtMTUuNiAxNS42LTQwLjkgMC01Ni42cy00MC45LTE1LjYtNTYuNiAwQzM0OS4zIDEwNi4xIDI5NiA4NC4xIDI5NiA0MHpNMTYwIDIyNGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNjAgMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFHZW0yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdlbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE0Ml0sICJmM2E1IiwgIk0xMTYuNyAzMy44YzQuNS02LjEgMTEuNy05LjggMTkuMy05LjhsMjQwIDBjNy42IDAgMTQuOCAzLjYgMTkuMyA5LjhsMTEyIDE1MmM2LjggOS4yIDYuMSAyMS45LTEuNSAzMC40bC0yMzIgMjU2Yy00LjUgNS0xMSA3LjktMTcuOCA3LjlzLTEzLjItMi45LTE3LjgtNy45bC0yMzItMjU2Yy03LjctOC41LTguMy0yMS4yLTEuNS0zMC40bDExMi0xNTJ6bTM4LjUgMzkuOGMtMy4zIDIuNS00LjIgNy0yLjEgMTAuNUwyMTAuNSAxNzkuOCA2My4zIDE5MmMtNC4xIC4zLTcuMyAzLjgtNy4zIDhzMy4yIDcuNiA3LjMgOGwxOTIgMTZjLjQgMCAuOSAwIDEuMyAwbDE5Mi0xNmM0LjEtLjMgNy4zLTMuOCA3LjMtOHMtMy4yLTcuNi03LjMtOGwtMTQ3LjItMTIuMyA1Ny40LTk1LjZjMi4xLTMuNSAxLjItOC4xLTIuMS0xMC41cy03LjktMi0xMC43IDFMMjU2IDE3Mi4yIDE2NS45IDc0LjZjLTIuOC0zLTcuNC0zLjQtMTAuNy0xeiJdCiAgICB9OwogICAgZmFUb2lsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9pbGV0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4NzAxXSwgImY3ZDgiLCAiTTI0IDBDMTAuNyAwIDAgMTAuNyAwIDI0UzEwLjcgNDggMjQgNDhsOCAwIDAgMTQ4LjljLTEuOSAxLjQtMy44IDIuOS01LjYgNC40LTE1LjUgMTMuMi0yNi40IDMxLjYtMjYuNCA1NC42IDAgNDYuOSAxNC4zIDg0LjEgMzcgMTEyLjUgMTQuMiAxNy43IDMxLjEgMzEuMyA0OC41IDQxLjhMNjUuNiA0NjkuOWMtMy4zIDkuOC0xLjYgMjAuNSA0LjQgMjguOFM4NS43IDUxMiA5NiA1MTJsMjU2IDBjMTAuMyAwIDE5LjktNC45IDI2LTEzLjNzNy43LTE5LjEgNC40LTI4LjhsLTE5LjgtNTkuNWMxNy40LTEwLjUgMzQuMy0yNC4xIDQ4LjUtNDEuOCAyMi43LTI4LjQgMzctNjUuNSAzNy0xMTIuNSAwLTIzLjEtMTAuOS00MS41LTI2LjQtNTQuNi0xLjgtMS41LTMuNy0zLTUuNi00LjRsMC0xNDguOSA4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTNDM3LjMgMCA0MjQgMEwyNCAwek05NiA4MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2ek0yMjQgMjg4Yy04OC40IDAtMTYwLTE0LjMtMTYwLTMyczcxLjYtMzIgMTYwLTMyIDE2MCAxNC4zIDE2MCAzMi03MS42IDMyLTE2MCAzMnoiXQogICAgfTsKICAgIGZhU2luZ2xlUXVvdGVMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNpbmdsZS1xdW90ZS1sZWZ0IiwKICAgICAgaWNvbjogWzE5MiwgNTEyLCBbXSwgImU4MWIiLCAiTTEyOCA5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDggNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIxNkMwIDE0OS43IDUzLjcgOTYgMTIwIDk2bDggMHoiXQogICAgfTsKICAgIGZhTW9uZXlCaWxscyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxscyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMWYzIiwgIk0xNjAgMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjI0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM1MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE2MCAzMnptMTc2IDk2YTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwek0xNjAgMTUybDAtNDhjMC00LjQgMy42LTggOC04bDQ4IDBjNC40IDAgOC4xIDMuNiA3LjUgOC0zLjYgMjktMjYuNiA1MS45LTU1LjUgNTUuNS00LjQgLjUtOC0zLjEtOC03LjV6bTAgMTEyYzAtNC40IDMuNi04LjEgOC03LjUgMjkgMy42IDUxLjkgMjYuNiA1NS41IDU1LjUgLjUgNC40LTMuMSA4LTcuNSA4bC00OCAwYy00LjQgMC04LTMuNi04LThsMC00OHpNNTA0IDE1OS41Yy0yOS0zLjYtNTEuOS0yNi42LTU1LjUtNTUuNS0uNS00LjQgMy4xLTggNy41LThsNDggMGM0LjQgMCA4IDMuNiA4IDhsMCA0OGMwIDQuNC0zLjYgOC4xLTggNy41ek01MTIgMjY0bDAgNDhjMCA0LjQtMy42IDgtOCA4bC00OCAwYy00LjQgMC04LjEtMy42LTcuNS04IDMuNi0yOSAyNi42LTUxLjkgNTUuNS01NS41IDQuNC0uNSA4IDMuMSA4IDcuNXpNNDggMTUyYzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMTM4LjcgMCAxNTJMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzkyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMNjQgNDMyYy04LjggMC0xNi03LjItMTYtMTZsMC0yNjR6Il0KICAgIH07CiAgICBmYVRhYmxldEJ1dHRvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YWJsZXQtYnV0dG9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxMGEiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6TTIyNCA0MDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFSZWN0YW5nbGVYbWFyazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVjdGFuZ2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxNjQsICJyZWN0YW5nbGUtdGltZXMiLCAidGltZXMtcmVjdGFuZ2xlIiwgIndpbmRvdy1jbG9zZSJdLCAiZjQxMCIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6TTE2NyAxNjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNTUgNTUgNTUtNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC01NSA1NSA1NSA1NWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC01NS01NS01NSA1NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1NS01NS01NS01NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYVJlY3RhbmdsZVRpbWVzMiA9IGZhUmVjdGFuZ2xlWG1hcmsyOwogICAgZmFUaW1lc1JlY3RhbmdsZTIgPSBmYVJlY3RhbmdsZVhtYXJrMjsKICAgIGZhV2luZG93Q2xvc2UyID0gZmFSZWN0YW5nbGVYbWFyazI7CiAgICBmYVdyZW5jaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3cmVuY2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgyOTVdLCAiZjBhZCIsICJNNTA5LjQgOTguNmM3LjYtNy42IDIwLjMtNS43IDI0LjEgNC4zIDYuOCAxNy43IDEwLjUgMzcgMTAuNSA1Ny4xIDAgODguNC03MS42IDE2MC0xNjAgMTYwLTE3LjUgMC0zNC40LTIuOC01MC4yLThMMTQ2LjkgNDk4LjljLTI4LjEgMjguMS03My43IDI4LjEtMTAxLjggMHMtMjguMS03My43IDAtMTAxLjhMMjMyIDIxMC4yYy01LjItMTUuOC04LTMyLjYtOC01MC4yIDAtODguNCA3MS42LTE2MCAxNjAtMTYwIDIwLjEgMCAzOS40IDMuNyA1Ny4xIDEwLjUgMTAgMy44IDExLjggMTYuNSA0LjMgMjQuMWwtODguNyA4OC43Yy0zIDMtNC43IDcuMS00LjcgMTEuM2wwIDQxLjRjMCA4LjggNy4yIDE2IDE2IDE2bDQxLjQgMGM0LjIgMCA4LjMtMS43IDExLjMtNC43bDg4LjctODguN3oiXQogICAgfTsKICAgIGZhVHJhc2hDYW4yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyYXNoLWNhbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYxNDYwLCAidHJhc2gtYWx0Il0sICJmMmVkIiwgIk0xMzYuNyA1LjlDMTQxLjEtNy4yIDE1My4zLTE2IDE2Ny4xLTE2bDExMy45IDBjMTMuOCAwIDI2IDguOCAzMC40IDIxLjlMMzIwIDMyIDQxNiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJsOTYgMCA4LjctMjYuMXpNMzIgMTQ0bDM4NCAwIDAgMzA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMDR6bTg4IDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE5MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTkyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxOTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE5MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTkyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xOTJjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYVRyYXNoQWx0MiA9IGZhVHJhc2hDYW4yOwogICAgZmFUYWJsZUNlbGxzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlLWNlbGxzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRoIl0sICJmMDBhIiwgIk0zODQgOTZsMCA2NC02NCAwIDAtNjQgNjQgMHptMCAxMjhsMCA2NC02NCAwIDAtNjQgNjQgMHptMCAxMjhsMCA2NC02NCAwIDAtNjQgNjQgMHpNMjU2IDI4OGwtNjQgMCAwLTY0IDY0IDAgMCA2NHptLTY0IDY0bDY0IDAgMCA2NC02NCAwIDAtNjR6bS02NC02NGwtNjQgMCAwLTY0IDY0IDAgMCA2NHpNNjQgMzUybDY0IDAgMCA2NC02NCAwIDAtNjR6bTAtMTkybDAtNjQgNjQgMCAwIDY0LTY0IDB6bTEyOCAwbDAtNjQgNjQgMCAwIDY0LTY0IDB6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6Il0KICAgIH07CiAgICBmYVRoID0gZmFUYWJsZUNlbGxzOwogICAgZmFSaWJib24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmliYm9uIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI3ODk1XSwgImY0ZDYiLCAiTTIzNS4xIDBjMzMuNCAwIDY0LjUgMTcuNCA4MS45IDQ1LjkgMS4yIDIgMTMgMjEuMyAzNS4zIDU3LjggMjEuMSAzNC41IDE4LjMgNzguNS03IDExMEwyNzguMyAyOTcuNyAzNjQuNSA0MDZjNS41IDYuOSA0LjQgMTYuOS0yLjUgMjIuNWwtODAgNjRjLTYuOSA1LjUtMTcgNC40LTIyLjUtMi41TDM4LjYgMjEzLjhDMTMuMyAxODIuMyAxMC41IDEzOC4zIDMxLjYgMTAzLjggNTQgNjcuMiA2NS43IDQ3LjkgNjcgNDUuOSA4NC40IDE3LjQgMTE1LjQgMCAxNDguOSAwbDg2LjMgMHpNMTkyIDE4OS4ybDQ4LjYtNjEuMi05Ny4zIDAgNDguNiA2MS4yek03NSAzMzYuMmw4Ni4yIDEwNy44LTM2LjggNDZjLTUuNSA2LjktMTUuNiA4LTIyLjUgMi41bC04MC02NGMtNi45LTUuNS04LTE1LjYtMi41LTIyLjVMNzUgMzM2LjJ6Il0KICAgIH07CiAgICBmYUxhbmRtYXJrRmxhZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYW5kbWFyay1mbGFnIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MWMiLCAiTTM1Mi0zMkwyNDAtMzJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE0NC0xNzYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNiAwIDAgMjI0LTUxLjIgMzguNEM0LjcgNDYwLjQgMCA0NjkuOSAwIDQ4MCAwIDQ5Ny43IDE0LjMgNTEyIDMyIDUxMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMiAwLTEwLjEtNC43LTE5LjYtMTIuOC0yNS42bC01MS4yLTM4LjQgMC0yMjQgMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTkyIDAgMC02NCA4MCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNnptNDggMjI0bDAgMjI0LTY0IDAgMC0yMjQgNjQgMHptLTExMiAwbDAgMjI0LTY0IDAgMC0yMjQgNjQgMHptLTExMiAwbDAgMjI0LTY0IDAgMC0yMjQgNjQgMHoiXQogICAgfTsKICAgIGZhVXBEb3duTGVmdFJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVwLWRvd24tbGVmdC1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhcnJvd3MtYWx0Il0sICJmMGIyIiwgIk0yNzguNiA5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlTMTc5LjEgMTI4IDE5MiAxMjhsMzIgMCAwIDk2LTk2IDAgMC0zMmMwLTEyLjktNy44LTI0LjYtMTkuOC0yOS42cy0yNS43LTIuMi0zNC45IDYuOWwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzkuMiA5LjIgMjIuOSAxMS45IDM0LjkgNi45UzEyOCAzMzIuOSAxMjggMzIwbDAtMzIgOTYgMCAwIDk2LTMyIDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzMzMi45IDM4NCAzMjAgMzg0bC0zMiAwIDAtOTYgOTYgMCAwIDMyYzAgMTIuOSA3LjggMjQuNiAxOS44IDI5LjZzMjUuNyAyLjIgMzQuOS02LjlsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOVMzODQgMTc5LjEgMzg0IDE5MmwwIDMyLTk2IDAgMC05NiAzMiAwYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTY0LTY0eiJdCiAgICB9OwogICAgZmFBcnJvd3NBbHQgPSBmYVVwRG93bkxlZnRSaWdodDsKICAgIGZhQ2FyU2lkZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXItc2lkZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODY2M10sICJmNWU0IiwgIk0xNDcgMTA2LjdsLTI5LjggODUuMyAxMjIuOSAwIDAtOTYtNzcuOSAwYy02LjggMC0xMi45IDQuMy0xNS4xIDEwLjd6TTQ4LjYgMTkzLjlMODYuNSA4NS42Qzk3LjggNTMuNSAxMjguMSAzMiAxNjIuMSAzMkwzNjAgMzJjMjUuMiAwIDQ4LjkgMTEuOSA2NCAzMmw5Ni4yIDEyOC4zQzU4Ny4xIDE5Ni41IDY0MCAyNTIuMSA2NDAgMzIwbDAgMTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTE2LjQgMGMtNCA0NC45LTQxLjcgODAtODcuNiA4MHMtODMuNi0zNS4xLTg3LjYtODBsLTE0NC43IDBjLTQgNDQuOS00MS43IDgwLTg3LjYgODBzLTgzLjYtMzUuMS04Ny42LTgwbC0uNCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTgwYzAtMzAuMSAyMC43LTU1LjMgNDguNi02Mi4xek00NDAgMTkybC02Ny4yLTg5LjZjLTMtNC03LjgtNi40LTEyLjgtNi40bC03MiAwIDAgOTYgMTUyIDB6TTE1MiA0MzJhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwem0zNjAtNDBhNDAgNDAgMCAxIDAgLTgwIDAgNDAgNDAgMCAxIDAgODAgMHoiXQogICAgfTsKICAgIGZhVHJhc2hBcnJvd1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyYXNoLWFycm93LXVwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRyYXNoLXJlc3RvcmUiXSwgImY4MjkiLCAiTTE2Ny4xLTE2bDExMy45IDBjMTMuOCAwIDI2IDguOCAzMC40IDIxLjlMMzIwIDMyIDQxNiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJsOTYgMCA4LjctMjYuMUMxNDEuMS03LjIgMTUzLjMtMTYgMTY3LjEtMTZ6TTMyIDE0NGwzODQgMC0yMS4xIDMyMy4xQzM5My4zIDQ5Mi40IDM3Mi4zIDUxMiAzNDcgNTEyTDEwMSA1MTJjLTI1LjMgMC00Ni4zLTE5LjYtNDcuOS00NC45TDMyIDE0NHptMjA5IDc5Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtNzIgNzJjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwzMS0zMSAwIDEwMi4xYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDIuMSAzMSAzMWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTcyLTcyeiJdCiAgICB9OwogICAgZmFUcmFzaFJlc3RvcmUgPSBmYVRyYXNoQXJyb3dVcDsKICAgIGZhTGlmZVJpbmcyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpZmUtcmluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWNkIiwgIk0zNjcuMiA0MTIuNUMzMzUuOSA0MzQuOSAyOTcuNSA0NDggMjU2IDQ0OHMtNzkuOS0xMy4xLTExMS4yLTM1LjVsNTgtNThjMTUuOCA4LjYgMzQgMTMuNSA1My4zIDEzLjVzMzcuNC00LjkgNTMuMy0xMy41bDU4IDU4em05MC43IC44YzMzLjgtNDMuNCA1NC05OCA1NC0xNTcuM1M0OTEuOCAxNDIuMSA0NTggOTguN2M5LTEyLjUgNy45LTMwLjEtMy40LTQxLjNTNDI1LjggNDUgNDEzLjMgNTRDMzY5LjkgMjAuMiAzMTUuMyAwIDI1NiAwUzE0Mi4xIDIwLjIgOTguNyA1NGMtMTIuNS05LTMwLjEtNy45LTQxLjMgMy40UzQ1IDg2LjIgNTQgOTguN0MyMC4yIDE0Mi4xIDAgMTk2LjcgMCAyNTZTMjAuMiAzNjkuOSA1NCA0MTMuM2MtOSAxMi41LTcuOSAzMC4xIDMuNCA0MS4zUzg2LjIgNDY3IDk4LjcgNDU4YzQzLjQgMzMuOCA5OCA1NCAxNTcuMyA1NHMxMTMuOS0yMC4yIDE1Ny4zLTU0YzEyLjUgOSAzMC4xIDcuOSA0MS4zLTMuNHMxMi40LTI4LjggMy40LTQxLjN6bS00NS41LTQ2LjFsLTU4LTU4YzguNi0xNS44IDEzLjUtMzQgMTMuNS01My4zcy00LjktMzcuNC0xMy41LTUzLjNsNTgtNThDNDM0LjkgMTc2LjEgNDQ4IDIxNC41IDQ0OCAyNTZzLTEzLjEgNzkuOS0zNS41IDExMS4yek0zNjcuMiA5OS41bC01OCA1OGMtMTUuOC04LjYtMzQtMTMuNS01My4zLTEzLjVzLTM3LjQgNC45LTUzLjMgMTMuNWwtNTgtNThDMTc2LjEgNzcuMSAyMTQuNSA2NCAyNTYgNjRzNzkuOSAxMy4xIDExMS4yIDM1LjV6TTE1Ny41IDMwOS4zbC01OCA1OEM3Ny4xIDMzNS45IDY0IDI5Ny41IDY0IDI1NnMxMy4xLTc5LjkgMzUuNS0xMTEuMmw1OCA1OGMtOC42IDE1LjgtMTMuNSAzNC0xMy41IDUzLjNzNC45IDM3LjQgMTMuNSA1My4zek0yMDggMjU2YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6Il0KICAgIH07CiAgICBmYUNvcHlyaWdodDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29weXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTY5XSwgImYxZjkiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMDUuMSAzMDYuOWMyOC4xIDI4LjEgNzMuNyAyOC4xIDEwMS44IDAgOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy00Ni45IDQ2LjktMTIyLjggNDYuOS0xNjkuNyAwcy00Ni45LTEyMi44IDAtMTY5LjcgMTIyLjgtNDYuOSAxNjkuNyAwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBjLTI4LjEtMjguMS03My43LTI4LjEtMTAxLjggMHMtMjguMSA3My43IDAgMTAxLjh6Il0KICAgIH07CiAgICBmYUZpbGVQcmVzY3JpcHRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1wcmVzY3JpcHRpb24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjU3MiIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTg4IDE5MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwIDIyLjUgMCA1OC40IDU1LTMzLjQgMzEuNmMtOS42IDkuMS0xMC4xIDI0LjMtLjkgMzMuOXMyNC4zIDEwLjEgMzMuOSAuOWwzNS40LTMzLjUgMzUuNiAzMy41YzkuNyA5LjEgMjQuOCA4LjYgMzMuOS0xczguNi0yNC44LTEtMzMuOWwtMzMuNi0zMS42IDMzLjYtMzEuOGM5LjYtOS4xIDEwLjEtMjQuMyAuOS0zMy45cy0yNC4zLTEwLjEtMzMuOS0uOWwtMzUuNyAzMy43LTQwLjktMzguNWMxMi45LTExLjcgMjEuMS0yOC42IDIxLjEtNDcuNSAwLTM1LjMtMjguNy02NC02NC02NGwtNTYgMHptMzIgODBsLTggMCAwLTMyIDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTI0IDB6Il0KICAgIH07CiAgICBmYUVyYXNlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlcmFzZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjEyZCIsICJNMTc4LjUgNDE2bDEyMyAwIDY1LjMtNjUuMy0xNzMuNS0xNzMuNS0xMjYuNyAxMjYuNyAxMTIgMTEyek0yMjQgNDgwbC00NS41IDBjLTE3IDAtMzMuMy02LjctNDUuMy0xOC43TDE3IDM0NUM2LjEgMzM0LjEgMCAzMTkuNCAwIDMwNHM2LjEtMzAuMSAxNy00MUwyNjMgMTdDMjczLjkgNi4xIDI4OC42IDAgMzA0IDBzMzAuMSA2LjEgNDEgMTdMNTI3IDE5OWMxMC45IDEwLjkgMTcgMjUuNiAxNyA0MXMtNi4xIDMwLjEtMTcgNDFsLTEzNSAxMzUgMTIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI4OCAweiJdCiAgICB9OwogICAgZmFIb3VyZ2xhc3NTdGFydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VyZ2xhc3Mtc3RhcnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiaG91cmdsYXNzLTEiXSwgImYyNTEiLCAiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsMCAxMWMwIDQyLjQgMTYuOSA4My4xIDQ2LjkgMTEzLjFsNjcuOSA2Ny45LTY3LjkgNjcuOUM0OC45IDM1My45IDMyIDM5NC42IDMyIDQzN2wwIDExYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTFjMC00Mi40LTE2LjktODMuMS00Ni45LTExMy4xbC02Ny45LTY3LjkgNjcuOS02Ny45YzMwLTMwIDQ2LjktNzAuNyA0Ni45LTExMy4xbDAtMTFjMTcuNyAwIDMyLTE0LjMgMzItMzJTMzY5LjcgMCAzNTIgMEwzMiAwek0yODggNDM3bDAgMTEtMTkyIDAgMC0xMWMwLTI1LjUgMTAuMS00OS45IDI4LjEtNjcuOWw2Ny45LTY3LjkgNjcuOSA2Ny45YzE4IDE4IDI4LjEgNDIuNCAyOC4xIDY3Ljl6Il0KICAgIH07CiAgICBmYUhvdXJnbGFzczEgPSBmYUhvdXJnbGFzc1N0YXJ0OwogICAgZmFDaXJjbGVMZWZ0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxODQwLCAiYXJyb3ctYWx0LWNpcmNsZS1sZWZ0Il0sICJmMzU5IiwgIk01MTIgMjU2YTI1NiAyNTYgMCAxIDAgLTUxMiAwIDI1NiAyNTYgMCAxIDAgNTEyIDB6TTEyNC43IDI0NC43bDEwNC0xMDRjNC42LTQuNiAxMS41LTUuOSAxNy40LTMuNXM5LjkgOC4zIDkuOSAxNC44bDAgNTYgOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgNTZjMCA2LjUtMy45IDEyLjMtOS45IDE0LjhzLTEyLjkgMS4xLTE3LjQtMy41bC0xMDQtMTA0Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnoiXQogICAgfTsKICAgIGZhQXJyb3dBbHRDaXJjbGVMZWZ0MiA9IGZhQ2lyY2xlTGVmdDI7CiAgICBmYUNydXplaXJvU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjcnV6ZWlyby1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUxNTIiLCAiTTI0MCA5NmMtODguNCAwLTE2MCA3MS42LTE2MCAxNjAgMCA3MS42IDQ3LjEgMTMyLjMgMTEyIDE1Mi43TDE5MiAyNTZjMC0xMy4zIDEwLjctMjQgMjQtMjQgMTIuOCAwIDIzLjMgMTAuMSAyNCAyMi43IDE1LjUtOS41IDMzLjUtMTQuNyA1Mi4zLTE0LjdsMTEuOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMS44IDBjLTE4LjggMC0zNi4xIDEwLTQ1LjQgMjYuMy00LjUgNy45LTYuOSAxNi44LTYuOSAyNS45bDAgNzUuOGM0Mi41IDAgODEuMS0xNi42IDEwOS44LTQzLjYgMTIuOS0xMi4xIDMzLjEtMTEuNSA0NS4yIDEuM3MxMS41IDMzLjEtMS4zIDQ1LjJDMzUzLjcgNDU2LjggMjk5LjUgNDgwIDI0MCA0ODAgMTE2LjMgNDgwIDE2IDM3OS43IDE2IDI1NlMxMTYuMyAzMiAyNDAgMzJjNTkuNSAwIDExMy43IDIzLjIgMTUzLjcgNjEuMSAxMi45IDEyLjEgMTMuNCAzMi40IDEuMyA0NS4ycy0zMi40IDEzLjQtNDUuMiAxLjNDMzIxLjEgMTEyLjYgMjgyLjUgOTYgMjQwIDk2eiJdCiAgICB9OwogICAgZmFTbW9raW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNtb2tpbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg2ODRdLCAiZjQ4ZCIsICJNMzYwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxOWMwIDQwLjMgMTYgNzkgNDQuNSAxMDcuNWwyMSAyMUM0NjkgMTkxIDQ4MCAyMTcuNCA0ODAgMjQ1bDAgMTljMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xOWMwLTE0LjktNS45LTI5LjEtMTYuNC0zOS42bC0yMS0yMUMzNTcuMSAxNDYuOSAzMzYgOTYgMzM2IDQzbDAtMTljMC0xMy4zIDEwLjctMjQgMjQtMjR6TTU1MiAyODhjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMTljMC00MC4zLTE2LTc5LTQ0LjUtMTA3LjVsLTIxLTIxQzQ0MyA5NyA0MzIgNzAuNiA0MzIgNDNsMC0xOWMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTljMCAxNC45IDUuOSAyOS4xIDE2LjQgMzkuNmwyMSAyMUM1NTQuOSAxNDEuMSA1NzYgMTkyIDU3NiAyNDVsMCAxOWMwIDEzLjMtMTAuNyAyNC0yNCAyNHpNMzIwIDQ0OGw5NiAwIDAtMzItOTYgMCAwIDMyek0wIDQxNmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMnptNTc2LTQwbDAgMTEyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTEyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il0KICAgIH07CiAgICBmYVNxdWFyZVBvbGxWZXJ0aWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcG9sbC12ZXJ0aWNhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJwb2xsIl0sICJmNjgxIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem01NiAxOTJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxMTJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMTJjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTE4NCA4OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OHpNMjI0IDEyOGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDIwOGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTIwOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhUG9sbCA9IGZhU3F1YXJlUG9sbFZlcnRpY2FsOwogICAgZmFQZXJzb25DaXJjbGVNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tY2lyY2xlLW1pbnVzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NDAiLCAiTTI4MCAyNGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6bTI0IDIxMi43TDM0MSAyODYuNmMxMi44LTE3LjUgMjguNS0zMi43IDQ2LjMtNDVsLTU2LjItNzUuN0MzMDYgMTMyIDI2Ni4zIDExMiAyMjQgMTEycy04MiAyMC0xMDcuMiA1My45bC03MC41IDk1Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZMMTQ0IDIzNi43IDE0NCA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNzUuM3pNNjQwIDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tNjQgMGMwIDguOC03LjIgMTYtMTYgMTZsLTEyOCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDEyOCAwYzguOCAwIDE2IDcuMiAxNiAxNnoiXQogICAgfTsKICAgIGZhQmlvaGF6YXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJpb2hhemFyZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzk3NjNdLCAiZjc4MCIsICJNMjYwIDEyLjZjMC04LjMtNy42LTE0LjUtMTUuNS0xMi4xLTYwLjkgMTguOC0xMDUuMSA3NS44LTEwNS4xIDE0My4xIDAgMjUuMSA2LjEgNDguNyAxNyA2OS41LTIxIDEuOC00MiA4LjItNjEuNSAxOS41LTU3LjkgMzMuNi04NC44IDEwMC4yLTcwLjkgMTYyLjUgMS45IDguNCAxMS40IDEyIDE4LjkgNy42IDUtMi45IDcuNi04LjYgNy4xLTE0LjQtLjMtMy4zLS40LTYuNi0uNC0xMC4xIDAtMTIzLjUgMTg0LjQtMTIzLjUgMTg0LjQgMCAwIDg4LjQtOTQuNSAxMTMuNi0xNDguMiA3NS40LTQuNS0zLjItMTAuNS0zLjktMTUuMy0xLjEtNyA0LjEtOC42IDEzLjYtMi43IDE5LjEgNDYuNiA0My44IDExOCA1My45IDE3Ni4xIDIwLjIgMTcuOS0xMC40IDMyLjgtMjMuOSA0NC41LTM5LjQgMTEuNyAxNS42IDI2LjYgMjkuMSA0NC41IDM5LjQgNTguMSAzMy43IDEyOS41IDIzLjYgMTc2LjEtMjAuMiA1LjktNS41IDQuMy0xNS4xLTIuNy0xOS4xLTQuOC0yLjgtMTAuOC0yLjEtMTUuMyAxLjEtNTMuNyAzOC4yLTE0OC4yIDEzLTE0OC4yLTc1LjQgMC0xMjMuNSAxODQuNC0xMjMuNSAxODQuNCAwIDAgMy40LS4xIDYuOC0uNCAxMC4xLS41IDUuOCAyLjEgMTEuNSA3LjEgMTQuNCA3LjQgNC4zIDE3IC44IDE4LjktNy42IDEzLjktNjIuMi0xMy0xMjguOS03MC45LTE2Mi41LTE5LjUtMTEuMy00MC40LTE3LjctNjEuNS0xOS41IDEwLjktMjAuOCAxNy00NC40IDE3LTY5LjUgMC02Ny4zLTQ0LjItMTI0LjMtMTA1LjEtMTQzLjEtNy45LTIuNC0xNS41IDMuOC0xNS41IDEyLjEgMCA1LjkgNCAxMSA5LjUgMTMuMiA4My40IDMzLjYgNzAuOCAxNzguNC0zNy44IDE3OC40UzE2Ny4xIDU5LjQgMjUwLjUgMjUuOGM1LjUtMi4yIDkuNS03LjMgOS41LTEzLjJ6TTI0OC40IDI4OGE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwek00MzUgMzE3LjdjLTE2LjIgMC0zMS40IDUuNS00Mi4xIDE1LTEwLjEgOS4xLTE4LjEgMjMuNC0xOC4xIDQ1LjYgMCAyMS4xIDcuMiAzNSAxNi41IDQ0LjEgMzIuMi0yNC42IDU1LjUtNjAuNSA2My45LTEwMS44LTYuMy0xLjktMTMuMi0zLTIwLjItM3pNMjAyIDM3OC4zYzAtMjIuMy04LTM2LjYtMTguMS00NS42LTEwLjctOS42LTI1LjktMTUtNDIuMS0xNS03IDAtMTMuOSAxLTIwLjIgMyA4LjQgNDEuMyAzMS42IDc3LjIgNjMuOSAxMDEuOCA5LjQtOS4xIDE2LjUtMjMuMSAxNi41LTQ0LjJ6bTQxLjItMjI0LjNjOSAxMC4yIDIzLjIgMTguMiA0NS4yIDE4LjJzMzYuMi04IDQ1LjItMTguMmM2LjctNy42IDExLjUtMTcuNSAxMy42LTI4LjQtMTguMy02LjgtMzguMi0xMC41LTU4LjgtMTAuNXMtNDAuNSAzLjctNTguOCAxMC41YzIuMiAxMC45IDYuOSAyMC44IDEzLjYgMjguNXoiXQogICAgfTsKICAgIGZhQmVsbENvbmNpZXJnZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiZWxsLWNvbmNpZXJnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODcxOCwgImNvbmNpZXJnZS1iZWxsIl0sICJmNTYyIiwgIk0yMTYgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTYgMCAwIDMzLjNDMTI0LjggMTU2LjcgNDAuMiAyNDMuNyAzMi42IDM1Mmw0NDYuOSAwQzQ3MS44IDI0My43IDM4Ny4yIDE1Ni43IDI4MCAxNDUuM2wwLTMzLjMgMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMHpNMjQgNDAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDI0IDQwMHoiXQogICAgfTsKICAgIGZhQ29uY2llcmdlQmVsbCA9IGZhQmVsbENvbmNpZXJnZTsKICAgIGZhUnVsZXJIb3Jpem9udGFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJ1bGVyLWhvcml6b250YWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjU0NyIsICJNNDggMzg0Yy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE3NmMwLTI2LjUgMjEuNS00OCA0OC00OGwyNCAwIDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDQgNDggMCAwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MiA0OCAwIDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDQgNDggMCAwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MiA0OCAwIDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDQgMjQgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2MGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCAzODR6Il0KICAgIH07CiAgICBmYUhvcnNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvcnNlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDE0XSwgImY2ZjAiLCAiTTQ0OCAyMzguMWwwLTc4LjEgMTYgMCA5LjggMTkuNmMxMi41IDI1LjEgNDIuMiAzNi40IDY4LjMgMjYgMjAuNS04LjIgMzMuOS0yOCAzMy45LTUwLjFMNTc2IDgwYzAtMTkuMS04LjQtMzYuMy0yMS43LTQ4bDUuNyAwYzguOCAwIDE2LTcuMiAxNi0xNlM1NjguOCAwIDU2MCAwTDQ0OCAwQzM3Ny4zIDAgMzIwIDU3LjMgMzIwIDEyOGwtMTcxLjIgMEMxMTguMSAxMjggOTEuMiAxNDQuMyA3Ni4zIDE2OC44IDMzLjIgMTc0LjUgMCAyMTEuNCAwIDI1NmwwIDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC01NmMwLTEzLjQgNi42LTI1LjIgMTYuNy0zMi41IDEuNiAxMyA2LjMgMjUuNCAxMy42IDM2LjRsMjguMiA0Mi40YzguMyAxMi40IDYuNCAyOC43LTEuMiA0MS42LTE2LjUgMjgtMjAuNiA2Mi4yLTEwIDkzLjlsMTcuNSA1Mi40YzQuNCAxMy4xIDE2LjYgMjEuOSAzMC40IDIxLjlsMzMuNyAwYzIxLjggMCAzNy4zLTIxLjQgMzAuNC00Mi4xbC0yMC44LTYyLjVjLTIuMS02LjQtLjUtMTMuNCA0LjMtMTguMmwxMi43LTEyLjdjMTMuMi0xMy4yIDIwLjYtMzEuMSAyMC42LTQ5LjcgMC0yLjMtLjEtNC42LS4zLTYuOWw4NCAyNGM0LjEgMS4yIDguMiAyLjEgMTIuMyAyLjhMMzIwIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTY0LjNjMTkuMi0xOS4yIDMxLjUtNDUuNyAzMi03NS43bDAgMCAwLTEuOXpNNDk2IDY0YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnoiXQogICAgfTsKICAgIGZhQ2FsZW5kYXIyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTk3LCAxMjgxOThdLCAiZjEzMyIsICJNMTI4IDBDMTEwLjMgMCA5NiAxNC4zIDk2IDMybDAgMzItMzIgMEMyOC43IDY0IDAgOTIuNyAwIDEyOGwwIDQ4IDQ0OCAwIDAtNDhjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTMyIDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDMyLTEyOCAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTAgMjI0TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyLTQ0OCAweiJdCiAgICB9OwogICAgZmFIYW5kc0hvbGRpbmdDaGlsZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kcy1ob2xkaW5nLWNoaWxkIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZmEiLCAiTTMyMC0zMmE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6TTQwIDY0YzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgMTYwLjJjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNsNTEuMSA1MS4xYzguMyA4LjMgMjEuMyA5LjYgMzEgMy4xIDEyLjktOC42IDE0LjctMjYuOSAzLjctMzcuOC03LjMtNy4zLTIzLjEtMjMuMS00Ny4yLTQ3LjItMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGMyNC4xIDI0LjEgMzkuOSAzOS45IDQ3LjIgNDcuMmwwIDAgMjUuMyAyNS4zYzIxIDIxIDMyLjggNDkuNSAzMi44IDc5LjJsMCA3OC45YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC02Ni43IDBjLTE3IDAtMzMuMy02LjctNDUuMy0xOC43TDI4LjEgMzkzLjRDMTAuMSAzNzUuNCAwIDM1MSAwIDMyNS41TDAgMTA0QzAgODEuOSAxNy45IDY0IDQwIDY0em01NjAgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDIyMS41YzAgMjUuNS0xMC4xIDQ5LjktMjguMSA2Ny45TDUxMiA0OTMuM2MtMTIgMTItMjguMyAxOC43LTQ1LjMgMTguN0w0MDAgNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTc4LjljMC0yOS43IDExLjgtNTguMiAzMi44LTc5LjJsMjUuMy0yNS4zIDAgMGM3LjMtNy4zIDIzLjEtMjMuMSA0Ny4yLTQ3LjIgMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2MtMjQuMSAyNC4xLTM5LjkgMzkuOS00Ny4yIDQ3LjItMTEgMTEtOS4yIDI5LjIgMy43IDM3LjggOS43IDYuNSAyMi43IDUuMiAzMS0zLjFsNTEuMS01MS4xYzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNMNTYwIDEwNGMwLTIyLjEgMTcuOS00MCA0MC00MHpNMzg0LjUgMTQ5bC0xOS44LTE2LjcgMTEuMSA4OC44YzEuNiAxMy4yLTcuNyAyNS4xLTIwLjggMjYuOHMtMjUuMS03LjctMjYuOC0yMC44bC00LjQtMzUtNy42IDAtNC40IDM1Yy0xLjYgMTMuMi0xMy42IDIyLjUtMjYuOCAyMC44cy0yMi41LTEzLjYtMjAuOC0yNi44bDExLjEtODguOC0xOS44IDE2LjdjLTEwLjEgOC42LTI1LjMgNy4zLTMzLjgtMi44cy03LjMtMjUuMyAyLjgtMzMuOGwyNy45LTIzLjZDMjcxLjMgNzIuOCAyOTUuMyA2NCAzMjAgNjRzNDguNyA4LjggNjcuNiAyNC43bDI3LjkgMjMuNmMxMC4xIDguNiAxMS40IDIzLjcgMi44IDMzLjhzLTIzLjcgMTEuNC0zMy44IDIuOHoiXQogICAgfTsKICAgIGZhSXRhbGljID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIml0YWxpYyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMDMzIiwgIk0xMjggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTU4LjcgMC0xMzMuMyAzMjAgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNTguNyAwIDEzMy4zLTMyMC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhS2hhbmRhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImtoYW5kYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3NzJdLCAiZjY2ZCIsICJNMjQwLjcgOGM4LjktNy40IDIxLjgtNy40IDMwLjcgMGwzNy44IDMxLjVjOC43IDcuMyAxMS4xIDE5LjYgNiAyOS42LTEuMiAyLjQtMi44IDUuNS00LjYgOS4yIDM0LjIgMTkuMiA1Ny4zIDU1LjggNTcuMyA5Ny44cy0yMy4xIDc4LjYtNTcuMyA5Ny44YzEuOCAzLjcgMy4zIDYuOCA0LjYgOS4yIDUuMSAxMCAyLjcgMjIuMy02IDI5LjZsLTM3LjIgMzEgMCAxOS44YzIyLjktMTUuNyA0OC40LTMzLjMgNzYuNy01Mi43IDQyLjgtMjkuNCA2OC40LTc4IDY4LjQtMTMwbDAtMTEuMWMwLTIzLjktNy4xLTQ3LjMtMjAuNC02Ny4yLTUuMS03LjctNC42LTE3LjggMS43LTI0LjYgNi42LTcuMSAxNy4yLTguMSAyNS4yLTIuOCAyNy41IDE4LjEgODkuNCA2Ny41IDg5LjQgMTQ5LjEgMCA0Ni41LTIwLjIgODguNi00MS44IDEyMC40LTIxLjYgMzItNDUuNiA1NS01NS4zIDYzLjgtNy44IDcuMS0xOSA3LjktMjcuNiAzbC03MC44LTQwLjMtMzIuNyAyMi41IDQ1LjUgMzEuM2MxLjgtLjQgMy43LS43IDUuNy0uNyAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMTIuMiAwLTIyLjMtOS4xLTIzLjgtMjFsLTQwLjItMjcuNiAwIDI4LjljOS42IDUuNSAxNiAxNS45IDE2IDI3LjcgMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJjMC0xMS44IDYuNC0yMi4yIDE2LTI3LjdsMC0yOC4xLTQwLjMgMjcuN2MtMS44IDExLjQtMTEuOCAyMC4xLTIzLjcgMjAuMS0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzIuMiAwIDQuNCAuMyA2LjUgLjlsNDUuOC0zMS41LTMyLjctMjIuNS03MC44IDQwLjNjLTguNyA0LjktMTkuOCA0LjEtMjcuNi0zLTkuNy04LjgtMzMuNy0zMS45LTU1LjMtNjMuOC0yMS41LTMxLjgtNDEuOC03My45LTQxLjgtMTIwLjQgMC04MS43IDYxLjktMTMxLjEgODkuNC0xNDkuMSA4LjEtNS4zIDE4LjYtNC4zIDI1LjIgMi44IDYuNCA2LjkgNi44IDE3IDEuNyAyNC42LTEzLjMgMTkuOS0yMC40IDQzLjMtMjAuNCA2Ny4ybDAgMTEuMWMwIDUxLjkgMjUuNiAxMDAuNiA2OC40IDEzMCAyOC40IDE5LjYgNTMuNyAzNi45IDc1LjYgNTJsMC0xOS4xLTM3LjItMzFjLTguNy03LjMtMTEuMS0xOS42LTYtMjkuNiAxLjItMi40IDIuOC01LjUgNC42LTkuMi0zNC4yLTE5LjItNTcuMy01NS44LTU3LjMtOTcuOHMyMy4xLTc4LjYgNTcuMy05Ny44Yy0xLjgtMy43LTMuMy02LjgtNC42LTkuMi01LjEtMTAtMi43LTIyLjMgNi0yOS42TDI0MC43IDh6TTIyMC4zIDEyMi45Yy0xNyAxMS41LTI4LjIgMzEtMjguMiA1My4xczExLjIgNDEuNiAyOC4yIDUzLjFjNi44LTE5LjIgMTEuOC0zOC40IDExLjgtNTMuMXMtNC45LTMzLjktMTEuOC01My4xem03MS41IDEwNi4yYzE3LTExLjUgMjguMi0zMSAyOC4yLTUzLjFzLTExLjItNDEuNi0yOC4yLTUzLjFjLTYuOCAxOS4yLTExLjggMzguNC0xMS44IDUzLjFzNC45IDMzLjkgMTEuOCA1My4xeiJdCiAgICB9OwogICAgZmFGYWNlRnJvd25PcGVuMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWZyb3duLW9wZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTAsICJmcm93bi1vcGVuIl0sICJmNTdhIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTc2IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0xODIuNCAzODIuNWMtMTIuNCA1LjItMjYuNS00LjEtMjEuMS0xNi40IDE2LTM2LjYgNTIuNC02Mi4xIDk0LjgtNjIuMXM3OC44IDI1LjYgOTQuOCA2Mi4xYzUuNCAxMi4zLTguNyAyMS42LTIxLjEgMTYuNC0yMi40LTkuNS00Ny40LTE0LjgtNzMuNy0xNC44cy01MS4zIDUuMy03My43IDE0Ljh6Il0KICAgIH07CiAgICBmYUZyb3duT3BlbjIgPSBmYUZhY2VGcm93bk9wZW4yOwogICAgZmFDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVjayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEwMDAzLCAxMDAwNF0sICJmMDBjIiwgIk00MzQuOCA3MC4xYzE0LjMgMTAuNCAxNy41IDMwLjQgNy4xIDQ0LjdsLTI1NiAzNTJjLTUuNSA3LjYtMTQgMTIuMy0yMy40IDEzLjFzLTE4LjUtMi43LTI1LjEtOS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDEwMS41IDEwMS41IDIzNC0zMjEuN2MxMC40LTE0LjMgMzAuNC0xNy41IDQ0LjctNy4xeiJdCiAgICB9OwogICAgZmFGaW5nZXJwcmludCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaW5nZXJwcmludCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTc3IiwgIk00OCAyNTZjMC0xMTQuOSA5My4xLTIwOCAyMDgtMjA4IDYzLjEgMCAxMTkuNiAyOC4xIDE1Ny44IDcyLjUgOC42IDEwLjEgMjMuOCAxMS4yIDMzLjggMi42czExLjItMjMuOCAyLjYtMzMuOEM0MDMuMyAzNC42IDMzMy43IDAgMjU2IDAgMTE0LjYgMCAwIDExNC42IDAgMjU2bDAgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwem00NTguNS01Mi45Yy0yLjctMTMtMTUuNS0yMS4zLTI4LjQtMTguNXMtMjEuMyAxNS41LTE4LjUgMjguNGMyLjkgMTMuOSA0LjUgMjguMyA0LjUgNDMuMWwwIDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MGMwLTE4LjEtMS45LTM1LjgtNS41LTUyLjl6TTI1NiA4MGMtMTkgMC0zNy40IDMtNTQuNSA4LjYtMTUuMiA1LTE4LjcgMjMuNy04LjMgMzUuOSA3LjEgOC4zIDE4LjggMTAuOCAyOS40IDcuOSAxMC42LTIuOSAyMS44LTQuNCAzMy40LTQuNCA3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGwwIDI0LjljMCAyNS4yLTEuNSA1MC4zLTQuNCA3NS4zLTEuNyAxNC42IDkuNCAyNy44IDI0LjIgMjcuOCAxMS44IDAgMjEuOS04LjYgMjMuMy0yMC4zIDMuMy0yNy40IDUtNTUgNS04Mi43bDAtMjQuOWMwLTk3LjItNzguOC0xNzYtMTc2LTE3NnpNMTUwLjcgMTQ4LjdjLTkuMS0xMC42LTI1LjMtMTEuNC0zMy45LS40LTIzLjEgMjkuOC0zNi44IDY3LjEtMzYuOCAxMDcuN2wwIDI0LjljMCAyNC4yLTIuNiA0OC40LTcuOCA3MS45LTMuNCAxNS42IDcuOSAzMS4xIDIzLjkgMzEuMSAxMC41IDAgMTkuOS03IDIyLjItMTcuMyA2LjQtMjguMSA5LjctNTYuOCA5LjctODUuOGwwLTI0LjljMC0yNy4yIDguNS01Mi40IDIyLjktNzMuMSA3LjItMTAuNCA4LTI0LjYtLjItMzQuMnpNMjU2IDE2MGMtNTMgMC05NiA0My05NiA5NmwwIDI0LjljMCAzNS45LTQuNiA3MS41LTEzLjggMTA2LjEtMy44IDE0LjMgNi43IDI5IDIxLjUgMjkgOS41IDAgMTcuOS02LjIgMjAuNC0xNS40IDEwLjUtMzkgMTUuOS03OS4yIDE1LjktMTE5LjdsMC0yNC45YzAtMjguNyAyMy4zLTUyIDUyLTUyczUyIDIzLjMgNTIgNTJsMCAyNC45YzAgMzYuMy0zLjUgNzIuNC0xMC40IDEwNy45LTIuNyAxMy45IDcuNyAyNy4yIDIxLjggMjcuMiAxMC4yIDAgMTktNyAyMS0xNyA3LjctMzguOCAxMS42LTc4LjMgMTEuNi0xMTguMWwwLTI0LjljMC01My00My05Ni05Ni05NnptMjQgOTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNC45YzAgNTkuOS0xMSAxMTkuMy0zMi41IDE3NS4ybC01LjkgMTUuM2MtNC44IDEyLjQgMS40IDI2LjMgMTMuOCAzMXMyNi4zLTEuNCAzMS0xMy44bDUuOS0xNS4zQzI2Ny45IDQxMS45IDI4MCAzNDYuNyAyODAgMjgwLjlsMC0yNC45eiJdCiAgICB9OwogICAgZmFDaGFyZ2luZ1N0YXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcmdpbmctc3RhdGlvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNWU3IiwgIk02NCA2NEM2NCAyOC43IDkyLjcgMCAxMjggMEwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIyNGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDEyYzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtMTI3LjdjLTMyLjUtMTAuMi01Ni00MC41LTU2LTc2LjNsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMCAwLTQ4YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA0OCAzMiAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDQ4IDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCAzNS44LTIzLjUgNjYuMS01NiA3Ni4zTDUyMCAzODBjMCAzNy42LTMwLjQgNjgtNjggNjhzLTY4LTMwLjQtNjgtNjhsMC0xMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwwIDEyOS40YzkuMyAzLjMgMTYgMTIuMiAxNiAyMi42IDAgMTMuMy0xMC43IDI0LTI0IDI0TDcyIDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjQgMC0xMC41IDYuNy0xOS4zIDE2LTIyLjZMNjQgNjR6bTgyLjcgMTI1LjdsMzkgMC0yMC45IDY2LjljLTIuNCA3LjYgMy4zIDE1LjQgMTEuMyAxNS40IDIuOSAwIDUuNi0xIDcuOC0yLjlsOTQuNi04MmMzLjEtMi43IDQuOS02LjYgNC45LTEwLjcgMC03LjgtNi4zLTE0LjEtMTQuMS0xNC4xbC0zOSAwIDIwLjktNjYuOWMyLjQtNy42LTMuMy0xNS40LTExLjMtMTUuNC0yLjkgMC01LjYgMS03LjggMi45bC05NC42IDgyYy0zLjEgMi43LTQuOSA2LjYtNC45IDEwLjcgMCA3LjggNi4zIDE0LjEgMTQuMSAxNC4xeiJdCiAgICB9OwogICAgZmFVc2VyTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWxvY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjUwMiIsICJNMjI0IDhhMTIwIDEyMCAwIDEgMSAwIDI0MCAxMjAgMTIwIDAgMSAxIDAtMjQwek0xOTQuMyAzMDRsNTkuNCAwYzI5LjcgMCA1Ny43IDcuMyA4Mi4zIDIwLjFsMCA0LjNjLTE5LjYgMTcuNi0zMiA0My4xLTMyIDcxLjVsMCA5NmMwIDUuNSAuNSAxMC45IDEuMyAxNi4xTDQ1LjcgNTEyQzI5LjMgNTEyIDE2IDQ5OC43IDE2IDQ4Mi4zIDE2IDM4My44IDk1LjggMzA0IDE5NC4zIDMwNHptMzAxLjcgLjFjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45ek0zNTIgNDAwYzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2eiJdCiAgICB9OwogICAgZmFNb2JpbGVTY3JlZW5CdXR0b24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9iaWxlLXNjcmVlbi1idXR0b24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsibW9iaWxlLWFsdCJdLCAiZjNjZCIsICJNMTYgNjRDMTYgMjguNyA0NC43IDAgODAgMEwzMDQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw4MCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDE2IDY0em02NCAwbDAgMzA0IDIyNCAwIDAtMzA0LTIyNCAwek0xOTIgNDcyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzIgMTQuMyAzMiAzMiAzMnoiXQogICAgfTsKICAgIGZhTW9iaWxlQWx0ID0gZmFNb2JpbGVTY3JlZW5CdXR0b247CiAgICBmYUFuY2hvckNpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuY2hvci1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRhYSIsICJNMzIwIDk2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6TTI4OCAwYy01MyAwLTk2IDQzLTk2IDk2IDAgNDEuOCAyNi43IDc3LjQgNjQgOTAuNWwwIDI1Ny45Yy02Mi45LTE0LjMtMTEwLjItNjkuNy0xMTEuOS0xMzYuNWwxNi4xIDE0LjFjMTAgOC43IDI1LjEgNy43IDMzLjktMi4zczcuNy0yNS4xLTIuMy0zMy45bC02NC01NmMtOS03LjktMjIuNi03LjktMzEuNiAwbC02NCA1NmMtMTAgOC43LTExIDIzLjktMi4zIDMzLjlzMjMuOSAxMSAzMy45IDIuM0w4MCAzMDcuOWMyLjEgMTEzLjEgOTQuNCAyMDQuMSAyMDggMjA0LjEgMTYuNiAwIDMyLjctMS45IDQ4LjItNS42LTIwLjMtMzAuNS0zMi4yLTY3LTMyLjItMTA2LjQgMC0yNy4zIDUuNy01My4zIDE2LTc2LjlsMC0xMzYuNmMzNy4zLTEzLjIgNjQtNDguNyA2NC05MC41IDAtNTMtNDMtOTYtOTYtOTZ6TTY0MCA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdCiAgICB9OwogICAgZmFQZXJzb25XYWxraW5nV2l0aENhbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXdhbGtpbmctd2l0aC1jYW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImJsaW5kIl0sICJmMjlkIiwgIk0yMjQtMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTE2MCAyMDUuM2wtMjIuNiAyMi42Yy02IDYtOS40IDE0LjEtOS40IDIyLjZsMCAzNy41YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzcuNWMwLTI1LjUgMTAuMS00OS45IDI4LjEtNjcuOWwzNC40LTM0LjRjMjMuMi0yMy4yIDU0LjYtMzYuMiA4Ny4zLTM2LjIgMzYuMSAwIDcwLjMgMTUuOCA5My44IDQzLjFsNjguNiA4MGMxMS41IDEzLjQgOS45IDMzLjYtMy41IDQ1LjFzLTMzLjYgOS45LTQ1LjEtMy41bC01NS43LTY1IDAgMTE4LjYgMzQuNSAyOS42YzE3LjcgMTUuMiAyOS4zIDM2LjIgMzIuNiA1OS4zbDEyLjYgODguMWMyLjUgMTcuNS05LjcgMzMuNy0yNy4yIDM2LjJzLTMzLjctOS43LTM2LjItMjcuMmwtMTIuNi04OC4xYy0xLjEtNy43LTUtMTQuNy0xMC45LTE5LjhsLTcxLjQtNjEuMmMtMjEuMy0xOC4yLTMzLjUtNDQuOS0zMy41LTcyLjlsMC02OS4zem0uMSAxNjUuOGMyLjQgMi4zIDQuOCA0LjYgNy40IDYuOGw0NiAzOS40LTIuMiA3LjZjLTQuNSAxNS43LTEyLjkgMzAtMjQuNCA0MS41bC02OC4zIDY4LjNjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDY4LjMtNjguM2MzLjgtMy44IDYuNi04LjYgOC4xLTEzLjhMMTYwLjEgMzcxem0yMzMuNS02Mi4yYzEwLjYtOCAyNS42LTUuOCAzMy42IDQuOGwxNDQgMTkyYzggMTAuNiA1LjggMjUuNi00LjggMzMuNnMtMjUuNiA1LjgtMzMuNi00LjhsLTE0NC0xOTJjLTgtMTAuNi01LjgtMjUuNiA0LjgtMzMuNnoiXQogICAgfTsKICAgIGZhQmxpbmQgPSBmYVBlcnNvbldhbGtpbmdXaXRoQ2FuZTsKICAgIGZhRmlsZVdhdmVmb3JtID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtd2F2ZWZvcm0iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZmlsZS1tZWRpY2FsLWFsdCJdLCAiZjQ3OCIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTk2IDYwLjMgMCA0OC44IDYyLjdjNS4xIDYuNiAxMy4zIDEwIDIxLjYgOS4xczE1LjUtNi4xIDE5LjEtMTMuNmw0Mi45LTkxLjIgOS45IDE5LjhjNC4xIDguMSAxMi40IDEzLjMgMjEuNSAxMy4zbDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTU3LjIgMC0yNS40LTUwLjdjLTQuMS04LjItMTIuNi0xMy40LTIxLjgtMTMuM3MtMTcuNSA1LjUtMjEuNCAxMy44bC00Ny4zIDEwMC42LTMyLTQxLjFDODYuNCAzMDcuNCA3OS40IDMwNCA3MiAzMDRMMCAzMDQgMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41eiJdCiAgICB9OwogICAgZmFGaWxlTWVkaWNhbEFsdCA9IGZhRmlsZVdhdmVmb3JtOwogICAgZmFIb3VzZUNyYWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWNyYWNrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUzYjEiLCAiTTI3Ny44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTMTguOCAyNzIgMzIgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODYuNCAwLTMxLjMtNTIuMmMtNC4xLTYuOC0yLjYtMTUuNSAzLjUtMjAuNUwyNTYgMzY4IDE5NS44IDI4NS4yYy0xMC45LTE1IDguMi0zMy41IDIyLjgtMjJsMTE3LjkgOTIuNmM4IDYuMyA4LjIgMTguNCAuNCAyNC45TDI1NiA0NDggMjk0LjQgNTEyIDQwMCA1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNzYgMTYgMGMxMy4yIDAgMjUtOC4xIDI5LjgtMjAuM3MxLjYtMjYuMi04LTM1LjFsLTIyNC0yMDh6Il0KICAgIH07CiAgICBmYUhhdFdpemFyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYXQtd2l6YXJkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2ZTgiLCAiTTY0IDQwMGw4NS43LTIwOC4yYzE3LTQxLjMgNDcuOC03NS4zIDg3LjItOTYuM0wzODMuOCAxNy4yYzEyLjMtNi42IDI2LjUgNC43IDIzIDE4LjJMMzY5LjYgMTc3LjhjLTEuMSA0LjEtMS42IDguMy0xLjYgMTIuNiAwIDYuMyAxLjIgMTIuNiAzLjYgMTguNWw3Ni40IDE5MS4xLTIwNy4xIDAgMTEuOC0zNS40IDQwLjQtMTMuNWM2LjUtMi4yIDEwLjktOC4zIDEwLjktMTUuMnMtNC40LTEzLTEwLjktMTUuMmwtNDAuNC0xMy41LTEzLjUtNDAuNEMyMzcgMjYwLjQgMjMwLjkgMjU2IDIyNCAyNTZzLTEzIDQuNC0xNS4yIDEwLjlsLTEzLjUgNDAuNC00MC40IDEzLjVDMTQ4LjQgMzIzIDE0NCAzMjkuMSAxNDQgMzM2czQuNCAxMyAxMC45IDE1LjJsNDAuNCAxMy41IDExLjggMzUuNC0xNDMuMSAwek0yNzkuNiAxNDEuNWMtMS4xLTMuMy00LjEtNS41LTcuNi01LjVzLTYuNSAyLjItNy42IDUuNWwtNi43IDIwLjItMjAuMiA2LjdjLTMuMyAxLjEtNS41IDQuMS01LjUgNy42czIuMiA2LjUgNS41IDcuNmwyMC4yIDYuNyA2LjcgMjAuMmMxLjEgMy4zIDQuMSA1LjUgNy42IDUuNXM2LjUtMi4yIDcuNi01LjVsNi43LTIwLjIgMjAuMi02LjdjMy4zLTEuMSA1LjUtNC4xIDUuNS03LjZzLTIuMi02LjUtNS41LTcuNmwtMjAuMi02LjctNi43LTIwLjJ6TTMyIDQ0OGw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVVzZXJEb2N0b3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1kb2N0b3IiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidXNlci1tZCJdLCAiZjBmMCIsICJNMjI0IDhhMTIwIDEyMCAwIDEgMCAwIDI0MCAxMjAgMTIwIDAgMSAwIDAtMjQwem02MCAzMTIuOGMtNS40LS41LTExLS44LTE2LjYtLjhsLTg2LjkgMGMtNS42IDAtMTEuMSAuMy0xNi42IC44bDAgNjcuNWMxNi41IDcuNiAyOCAyNC4zIDI4IDQzLjYgMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhjMC0xOS40IDExLjUtMzYuMSAyOC00My42bDAtNTguNEM2MSAzNTMgMTYgNDEzLjYgMTYgNDg0LjYgMTYgNDk5LjcgMjguMyA1MTIgNDMuNCA1MTJsMzYxLjEgMGMxNS4xIDAgMjcuNC0xMi4zIDI3LjQtMjcuNCAwLTcxLTQ1LTEzMS41LTEwOC0xNTQuNmwwIDM3LjRjMjMuMyA4LjIgNDAgMzAuNSA0MCA1Ni42bDAgMzJjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtMzJjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwbDAgMzJjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtMzJjMC0yNi4xIDE2LjctNDguMyA0MC01Ni42bDAtNDYuNnoiXQogICAgfTsKICAgIGZhVXNlck1kID0gZmFVc2VyRG9jdG9yOwogICAgZmFDaGFydEJhcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtYmFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImJhci1jaGFydCJdLCAiZjA4MCIsICJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMzZjMCA4LjggNy4yIDE2IDE2IDE2bDQwMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDgwIDQ4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnptMzIgODBsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDExMmwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUJhckNoYXJ0MiA9IGZhQ2hhcnRCYXIyOwogICAgZmFTcHJheUNhblNwYXJrbGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwcmF5LWNhbi1zcGFya2xlcyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJhaXItZnJlc2hlbmVyIl0sICJmNWQwIiwgIk0xNjAgMzJsMCA4MCAxMjggMCAwLTgwYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE5MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMCAxMjhjLTUzIDAtOTYgNDMtOTYgOTZsMCAyMDhjMCAyNi41IDIxLjUgNDggNDggNDhsMjI0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yMDhjMC01My00My05Ni05Ni05NmwtMTI4IDB6bTY0IDk2YTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwek00NDggNDhjMC0xLjQtMS0zLTIuMi0zLjZMNDE2IDMyIDQwMy42IDIuMkM0MDMgMSA0MDEuNCAwIDQwMCAwcy0zIDEtMy42IDIuMkwzODQgMzIgMzU0LjIgNDQuNGMtMS4yIC42LTIuMiAyLjItMi4yIDMuNiAwIDEuNCAxIDMgMi4yIDMuNkwzODQgNjQgMzk2LjQgOTMuOEMzOTcgOTUgMzk4LjYgOTYgNDAwIDk2czMtMSAzLjYtMi4yTDQxNiA2NCA0NDUuOCA1MS42QzQ0NyA1MSA0NDggNDkuNCA0NDggNDh6bTc2LjQgNDUuOEM1MjUgOTUgNTI2LjYgOTYgNTI4IDk2czMtMSAzLjYtMi4yTDU0NCA2NCA1NzMuOCA1MS42YzEuMi0uNiAyLjItMi4yIDIuMi0zLjYgMC0xLjQtMS0zLTIuMi0zLjZMNTQ0IDMyIDUzMS42IDIuMkM1MzEgMSA1MjkuNCAwIDUyOCAwcy0zIDEtMy42IDIuMkw1MTIgMzIgNDgyLjIgNDQuNGMtMS4yIC42LTIuMiAyLjItMi4yIDMuNiAwIDEuNCAxIDMgMi4yIDMuNkw1MTIgNjQgNTI0LjQgOTMuOHptNy4yIDEwMC40Yy0uNi0xLjItMi4yLTIuMi0zLjYtMi4ycy0zIDEtMy42IDIuMkw1MTIgMjI0IDQ4Mi4yIDIzNi40Yy0xLjIgLjYtMi4yIDIuMi0yLjIgMy42IDAgMS40IDEgMyAyLjIgMy42TDUxMiAyNTYgNTI0LjQgMjg1LjhjLjYgMS4yIDIuMiAyLjIgMy42IDIuMnMzLTEgMy42LTIuMkw1NDQgMjU2IDU3My44IDI0My42YzEuMi0uNiAyLjItMi4yIDIuMi0zLjYgMC0xLjQtMS0zLTIuMi0zLjZMNTQ0IDIyNCA1MzEuNiAxOTQuMnpNNTEyIDE0NGMwLTEuNC0xLTMtMi4yLTMuNkw0ODAgMTI4IDQ2Ny42IDk4LjJDNDY3IDk3IDQ2NS40IDk2IDQ2NCA5NnMtMyAxLTMuNiAyLjJMNDQ4IDEyOCA0MTguMiAxNDAuNGMtMS4yIC42LTIuMiAyLjItMi4yIDMuNiAwIDEuNCAxIDMgMi4yIDMuNkw0NDggMTYwIDQ2MC40IDE4OS44Yy42IDEuMiAyLjIgMi4yIDMuNiAyLjJzMy0xIDMuNi0yLjJMNDgwIDE2MCA1MDkuOCAxNDcuNmMxLjItLjYgMi4yLTIuMiAyLjItMy42eiJdCiAgICB9OwogICAgZmFBaXJGcmVzaGVuZXIgPSBmYVNwcmF5Q2FuU3BhcmtsZXM7CiAgICBmYUJhaHRTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhaHQtc2lnbiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlMGFjIiwgIk0xMzYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0MC03NC40IDBDMTYuOCA2NCAwIDgwLjggMCAxMDEuNkwwIDQwNi4zYzAgMjMgMTguNyA0MS43IDQxLjcgNDEuN2w3MC4zIDAgMCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDAgNDggMGM2MS45IDAgMTEyLTUwLjEgMTEyLTExMiAwLTQwLjEtMjEuMS03NS4zLTUyLjctOTUuMSAxMy4xLTE4LjMgMjAuNy00MC43IDIwLjctNjQuOSAwLTYxLjktNTAuMS0xMTItMTEyLTExMmwtMTYgMCAwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0ek0xMTIgMTI4bDAgOTYtNDggMCAwLTk2IDQ4IDB6bTQ4IDk2bDAtOTYgMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OGwtMTYgMHptLTQ4IDY0bDAgOTYtNDggMCAwLTk2IDQ4IDB6bTQ4IDk2bDAtOTYgNDggMGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OGwtNDggMHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVBcnJvd1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLWFycm93LXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInRlbXBlcmF0dXJlLXVwIl0sICJlMDQwIiwgIk02NC41IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NHMtMTQ0LTY0LjUtMTQ0LTE0NGMwLTQyLjYgMTguNS04MSA0OC0xMDcuM0w2NC41IDk2em05NiAzMzZjMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zbDAtMjEyLjdjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyMTIuN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0ek00MzkuMSA5LjRsNjQgNjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTkuNC05LjQgMCAxNzguN2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE3OC43LTkuNCA5LjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDY0LTY0YzYtNiAxNC4xLTkuNCAyMi42LTkuNHMxNi42IDMuNCAyMi42IDkuNHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVVcCA9IGZhVGVtcGVyYXR1cmVBcnJvd1VwOwogICAgZmFXZWJBd2Vzb21lMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3ZWItYXdlc29tZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNjgyIiwgIk0zNzIuMiA1MmMwIDIwLjktMTIuNCAzOS0zMC4yIDQ3LjJMNDQ4IDE5MiA1NTIuNCAxNzEuMWMtNS4zLTcuNy04LjQtMTcuMS04LjQtMjcuMSAwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4YzAgMjYtMjAuNiA0Ny4xLTQ2LjQgNDhMNDgxIDQ0Mi4zYy0xMC4zIDIzLTMzLjIgMzcuNy01OC40IDM3LjdsLTIwNS4yIDBjLTI1LjIgMC00OC0xNC44LTU4LjQtMzcuN0w0Ni40IDE5MkMyMC42IDE5MS4xIDAgMTcwIDAgMTQ0IDAgMTE3LjUgMjEuNSA5NiA0OCA5NnM0OCAyMS41IDQ4IDQ4YzAgMTAuMS0zLjEgMTkuNC04LjQgMjcuMUwxOTIgMTkyIDI5OC4xIDk5LjFjLTE3LjctOC4zLTMwLTI2LjMtMzAtNDcuMSAwLTI4LjcgMjMuMy01MiA1Mi01MnM1MiAyMy4zIDUyIDUyeiJdCiAgICB9OwogICAgZmFOb25CaW5hcnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibm9uLWJpbmFyeSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlODA3IiwgIk0xOTIgNTQ0Yy05Ny4yIDAtMTc2LTc4LjgtMTc2LTE3NiAwLTg2LjMgNjIuMS0xNTggMTQ0LTE3M2wwLTQ3LjItNDkuNyAyNC44LTMgMS4zYy0xNS4yIDUuNy0zMi41LS44LTM5LjktMTUuNy03LjQtMTQuOC0yLjItMzIuNiAxMS41LTQxLjNsMi44LTEuNiAzOC44LTE5LjQtMzguOC0xOS40Yy0xNS44LTcuOS0yMi4yLTI3LjEtMTQuMy00Mi45IDcuNC0xNC44IDI0LjgtMjEuNCA0MC0xNS42bDMgMS4zIDQ5LjcgMjQuOCAwLTQ0LjJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDQ0LjIgNDkuNy0yNC44IDMtMS4zYzE1LjItNS44IDMyLjUgLjggMzkuOSAxNS42czIuMiAzMi43LTExLjUgNDEuM2wtMi44IDEuNi0zOC43IDE5LjQgMzguNyAxOS4zYzE1LjggNy45IDIyLjIgMjcuMSAxNC4zIDQyLjktNy40IDE0LjgtMjQuNyAyMS40LTM5LjkgMTUuNmwtMy0xLjMtNDkuNy0yNC44IDAgNDcuMmM4MS45IDE1LjEgMTQ0IDg2LjggMTQ0IDE3MyAwIDk3LjItNzguOCAxNzYtMTc2IDE3NnptMC02NGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6Il0KICAgIH07CiAgICBmYU4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzExMF0sICI0ZSIsICJNMjEuMSAzMy45YzEyLjctNC42IDI2LjktLjcgMzUuNSA5LjZMMzIwIDM1OS42IDMyMCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzg0YzAgMTMuNS04LjQgMjUuNS0yMS4xIDMwLjFzLTI2LjkgLjctMzUuNS05LjZMNjQgMTUyLjQgNjQgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NEMwIDUwLjUgOC40IDM4LjUgMjEuMSAzMy45eiJdCiAgICB9OwogICAgZmFBcnJvd3NVcERvd25MZWZ0UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXVwLWRvd24tbGVmdC1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhcnJvd3MiXSwgImYwNDciLCAiTTI3OC42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDkuNC05LjQgMCAxMTQuNy0xMTQuNyAwIDkuNC05LjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05LjQtOS40IDExNC43IDAgMCAxMTQuNy05LjQtOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtOS40IDkuNCAwLTExNC43IDExNC43IDAtOS40IDkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDkuNCA5LjQtMTE0LjcgMCAwLTExNC43IDkuNCA5LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjR6Il0KICAgIH07CiAgICBmYUFycm93cyA9IGZhQXJyb3dzVXBEb3duTGVmdFJpZ2h0OwogICAgZmFIb3VzZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NjgsIDYzNDk4LCA2MzUwMCwgImhvbWUiLCAiaG9tZS1hbHQiLCAiaG9tZS1sZy1hbHQiXSwgImYwMTUiLCAiTTI3Ny44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTMTguOCAyNzIgMzIgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjg4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNzYgMTYgMGMxMy4yIDAgMjUtOC4xIDI5LjgtMjAuM3MxLjYtMjYuMi04LTM1LjFsLTIyNC0yMDh6TTI0MCAzMjBsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2LTEyOCAwIDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDh6Il0KICAgIH07CiAgICBmYUhvbWUyID0gZmFIb3VzZTI7CiAgICBmYUhvbWVBbHQyID0gZmFIb3VzZTI7CiAgICBmYUhvbWVMZ0FsdDIgPSBmYUhvdXNlMjsKICAgIGZhU3Bpbm5lciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcGlubmVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxMTAiLCAiTTIwOCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0wIDQxNmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek00OCAyMDhhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0zNjggNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNNzUgMzY5LjFBNDggNDggMCAxIDEgMTQyLjkgNDM3IDQ4IDQ4IDAgMSAxIDc1IDM2OS4xek03NSA3NUE0OCA0OCAwIDEgMSAxNDIuOSAxNDIuOSA0OCA0OCAwIDEgMSA3NSA3NXpNNDM3IDM2OS4xQTQ4IDQ4IDAgMSAxIDM2OS4xIDQzNyA0OCA0OCAwIDEgMSA0MzcgMzY5LjF6Il0KICAgIH07CiAgICBmYUdhdmVsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdhdmVsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImxlZ2FsIl0sICJmMGUzIiwgIk0xNjkuNiAxNTMuNGwtMTguNy0xOC43Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM0wyNjUuNi0yNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwTDMyOS42LTYuNmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM0wyMTQuOSAxNTMuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDB6TTI3NiAyMTEuN2wtMzEuNC0zMS40IDExMi0xMTIgMTE5LjQgMTE5LjQtMTEyIDExMi0zMS40LTMxLjQtMjMyIDIzMmMtMTUuNiAxNS42LTQwLjkgMTUuNi01Ni42IDBzLTE1LjYtNDAuOSAwLTU2LjZsMjMyLTIzMnpNMzkwLjkgMzc0LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zTDUwNS42IDIxNC42YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE4LjcgMTguN2MxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM0w0NTQuOSAzOTMuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTE4LjctMTguN3oiXQogICAgfTsKICAgIGZhTGVnYWwgPSBmYUdhdmVsOwogICAgZmFUaWNrZXRTaW1wbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGlja2V0LXNpbXBsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ0aWNrZXQtYWx0Il0sICJmM2ZmIiwgIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgOC44LTcuNCAxNS43LTE1LjcgMTguNi0xOC44IDYuNS0zMi4zIDI0LjQtMzIuMyA0NS40czEzLjUgMzguOSAzMi4zIDQ1LjRjOC4zIDIuOSAxNS43IDkuOCAxNS43IDE4LjZsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRDMCAzMTEuMiA3LjQgMzA0LjMgMTUuNyAzMDEuNCAzNC41IDI5NC45IDQ4IDI3NyA0OCAyNTZzLTEzLjUtMzguOS0zMi4zLTQ1LjRDNy40IDIwNy43IDAgMjAwLjggMCAxOTJsMC02NHoiXQogICAgfTsKICAgIGZhVGlja2V0QWx0ID0gZmFUaWNrZXRTaW1wbGU7CiAgICBmYURvdmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG92ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODMzMF0sICJmNGJhIiwgIk00OTYgNjRjMTMuMiAwIDIwLjcgMTUuMSAxMi44IDI1LjZMNDgwIDEyOCA0ODAgMzA0YzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0bC0xMTIgMC00Ni4zIDQ2LjNjLTEwLjQgMTAuNC0yNi41IDEyLjQtMzkuMSA0LjhMNDEuNSA0NDAuOWMtMTctMTAuMi0xNS0zNS41IDMuNC00Mi45TDE2MCAzNTJDMjMuOCAzMTEuMSA3LjUgMTY5LjggMjIgOTUuNyAyNS42IDc3LjkgNDUuMyA3MS40IDYxLjMgODAuMkwzMjAgMjI0IDMyMCAxNDRjMC00NC4yIDM1LjgtODAgODAtODBsOTYgMHptLTk2IDU2YTI0IDI0IDAgMSAwIDAgNDggMjQgMjQgMCAxIDAgMC00OHpNMTgyLjUtOS42YzEyLjQtMTMuNyAzMy4zLTguOSA0Mi41IDcuMWw1Ni40IDk4LjNjLTUuOCAxNC40LTkuMiAzMC4xLTkuNCA0Ni41TDEzOC4xIDY4YzEwLjEtMzEuNiAyNy01OC40IDQ0LjQtNzcuNnoiXQogICAgfTsKICAgIGZhVGFycERyb3BsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFycC1kcm9wbGV0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1N2MiLCAiTTI1NiAxNjBjMzUuMyAwIDY0LTI2LjkgNjQtNjAgMC0yNC0zMy43LTcwLjEtNTIuMi05My41LTYuMS03LjctMTcuNS03LjctMjMuNiAwLTE4LjUgMjMuNC01Mi4yIDY5LjUtNTIuMiA5My41IDAgMzMuMSAyOC43IDYwIDY0IDYwek0zNjggOTZjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJTMTQ0IDE1Ny45IDE0NCA5NmMwLTExLjEgMS42LTIxLjkgNC42LTMyTDY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI3Ny41IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdMNDkzLjMgMzIyLjdjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0w1MTIgMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0bC04NC42IDBjMyAxMC4xIDQuNiAyMC45IDQuNiAzMnptODUuNSAxNzZMMzM2IDM4OS41IDMzNiAyOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsOTMuNSAwek05NiAxMjhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFUcmVlQ2l0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmVlLWNpdHkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU4NyIsICJNMjg4IDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0OCA0OCAwIDAtNzJjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDcyIDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzMjBjMCAyNi41LTIxLjUgNDgtNDggNDhsLTI1NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTQxNnptNjQgNjRsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTYgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNMzUyIDMwNGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek01MjggMTkyYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTUxMiAzMDRsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNOTYgNDgwbDAtMTYwLTE2IDBjLTQ0LjIgMC04MC0zNS44LTgwLTgwIDAtMjYuNyAxMy4xLTUwLjMgMzMuMi02NC45LS44LTQuOS0xLjItMTAtMS4yLTE1LjEgMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDk2YzAgMzUuMy0yOC43IDY0LTY0IDY0bDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFUdXJuVXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHVybi11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEwNTQ4LCAibGV2ZWwtdXAtYWx0Il0sICJmM2JmIiwgIk0xNjkuNCA5LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTI4IDEyOGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOVMzMzIuOSAxOTIgMzIwIDE5MmwtNjQgMCAwIDE2MGMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MGwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTYwLTY0IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45bDEyOC0xMjh6Il0KICAgIH07CiAgICBmYUxldmVsVXBBbHQgPSBmYVR1cm5VcDsKICAgIGZhVGVtcGVyYXR1cmVRdWFydGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLXF1YXJ0ZXIiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsidGVtcGVyYXR1cmUtMSIsICJ0aGVybW9tZXRlci0xIiwgInRoZXJtb21ldGVyLXF1YXJ0ZXIiXSwgImYyY2EiLCAiTTE2MCAwQzEwNyAwIDY0IDQzIDY0IDk2bDAgMTY0LjdDMzQuNSAyODcgMTYgMzI1LjQgMTYgMzY4IDE2IDQ0Ny41IDgwLjUgNTEyIDE2MCA1MTJzMTQ0LTY0LjUgMTQ0LTE0NGMwLTQyLjYtMTguNS04MS00OC0xMDcuM0wyNTYgOTZjMC01My00My05Ni05Ni05NnptNjQgMzY4YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0YzAtMjYuOSAxNi41LTQ5LjkgNDAtNTkuM2wwLTI4LjdjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDI4LjdjMjMuNSA5LjUgNDAgMzIuNSA0MCA1OS4zeiJdCiAgICB9OwogICAgZmFUZW1wZXJhdHVyZTEgPSBmYVRlbXBlcmF0dXJlUXVhcnRlcjsKICAgIGZhVGhlcm1vbWV0ZXIxID0gZmFUZW1wZXJhdHVyZVF1YXJ0ZXI7CiAgICBmYVRoZXJtb21ldGVyUXVhcnRlciA9IGZhVGVtcGVyYXR1cmVRdWFydGVyOwogICAgZmFTbGlkZXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNsaWRlcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2xpZGVycy1oIl0sICJmMWRlIiwgIk0zMiA2NEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJsODYuNyAwYzEyLjMgMjguMyA0MC41IDQ4IDczLjMgNDhzNjEtMTkuNyA3My4zLTQ4TDQ4MCAxMjhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMjY1LjMgNjRDMjUzIDM1LjcgMjI0LjggMTYgMTkyIDE2cy02MSAxOS43LTczLjMgNDhMMzIgNjR6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI0Ni43IDBjMTIuMyAyOC4zIDQwLjUgNDggNzMuMyA0OHM2MS0xOS43IDczLjMtNDhsNTQuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01NC43IDBjLTEyLjMtMjguMy00MC41LTQ4LTczLjMtNDhzLTYxIDE5LjctNzMuMyA0OEwzMiAyMjR6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDU0LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4czYxLTE5LjcgNzMuMy00OEw0ODAgNDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yNDYuNyAwYy0xMi4zLTI4LjMtNDAuNS00OC03My4zLTQ4cy02MSAxOS43LTczLjMgNDhMMzIgMzg0eiJdCiAgICB9OwogICAgZmFTbGlkZXJzSCA9IGZhU2xpZGVyczsKICAgIGZhTW9zcXVlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vc3F1ZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODMzMl0sICJmNjc4IiwgIk0xNzQuOCAyMjRsMjI2LjQgMGM0My41IDAgNzguOC0zNS4zIDc4LjgtNzguOCAwLTI1LjUtMTIuMy00OS40LTMzLjEtNjQuMkwyOTcuMy0yNS40Yy01LjYtMy45LTEzLTMuOS0xOC41IDBMMTI5LjEgODFDMTA4LjMgOTUuOCA5NiAxMTkuNyA5NiAxNDUuMiA5NiAxODguNyAxMzEuMyAyMjQgMTc0LjggMjI0ek01MTIgNTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDgtNDQ4IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDIwNi4zIDAgMjI0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwek0yNDAgMzg0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCA4MC05NiAwIDAtODB6Il0KICAgIH07CiAgICBmYUggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEwNF0sICI0OCIsICJNMzIwIDI4OGwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzg0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTYwLTI1NiAwIDAtMTYwYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjAgMjU2IDB6Il0KICAgIH07CiAgICBmYUluZm8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaW5mbyIsCiAgICAgIGljb246IFsxOTIsIDUxMiwgW10sICJmMTI5IiwgIk00OCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek0wIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjU2IDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC0yMjQtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYVBlcnNvbldhbGtpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXdhbGtpbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjg2OTQsICJ3YWxraW5nIl0sICJmNTU0IiwgIk0xOTIgODBhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTEwNS40IDIyNy45bDIyLjYtMjIuNiAwIDY5LjNjMCAyOCAxMi4yIDU0LjcgMzMuNSA3Mi45bDcxLjQgNjEuMmM1LjkgNS4xIDkuOCAxMi4xIDEwLjkgMTkuOGwxMi42IDg4LjFjMi41IDE3LjUgMTguNyAyOS43IDM2LjIgMjcuMnMyOS43LTE4LjcgMjcuMi0zNi4ybC0xMi42LTg4LjFjLTMuMy0yMy4xLTE0LjktNDQuMS0zMi42LTU5LjNsLTM0LjUtMjkuNiAwLTExNS4yIDMuOCA0LjdjMTguMiAyMi44IDQ1LjggMzYgNzUgMzZsMzMuMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMy4yIDBjLTkuNyAwLTE4LjktNC40LTI1LTEybC0xNy45LTIyLjRjLTIzLTI4LjgtNTcuOS00NS42LTk0LjgtNDUuNi0zMi4yIDAtNjMuMSAxMi44LTg1LjggMzUuNkw2MC4xIDE4Mi42QzQyLjEgMjAwLjYgMzIgMjI1IDMyIDI1MC41TDMyIDI4OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzcuNWMwLTguNSAzLjQtMTYuNiA5LjQtMjIuNnptMTIuNCAxNzkuNGMtMS41IDUuMi00LjMgMTAtOC4xIDEzLjhMNDEuNCA0ODkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2OC4zLTY4LjNjMTEuNS0xMS41IDE5LjktMjUuOCAyNC40LTQxLjVsMi4yLTcuNi00Ni0zOS40Yy0yLjUtMi4yLTUtNC40LTcuNC02LjhsLTEwLjQgMzYuMnoiXQogICAgfTsKICAgIGZhV2Fsa2luZyA9IGZhUGVyc29uV2Fsa2luZzsKICAgIGZhQXJyb3dUdXJuRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy10dXJuLWRvd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsibGV2ZWwtZG93biJdLCAiZjE0OSIsICJNMzIgNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMlMxNC4zIDAgMzIgMGw5NiAwYzUzIDAgOTYgNDMgOTYgOTZsMCAzMDYuNyA3My40LTczLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMTI4IDEyOGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTEyOC0xMjhjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMTYwIDQwMi43IDE2MCA5NmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiA2NHoiXQogICAgfTsKICAgIGZhTGV2ZWxEb3duID0gZmFBcnJvd1R1cm5Eb3duOwogICAgZmFSb2FkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvYWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg3MzldLCAiZjAxOCIsICJNMjIzLjkgMzJsLTc2LjIgMGMtMjkuNCAwLTU1LjEgMjAuMS02Mi4xIDQ4LjZMMS40IDQyMC41Qy02LjEgNDUwLjcgMTYuOCA0ODAgNDggNDgwbDE3NS45IDAgMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNjQgMTc2LjEgMGMzMS4yIDAgNTQuMS0yOS4zIDQ2LjYtNTkuNUw0MjYuNSA4MC42QzQxOS40IDUyLjEgMzkzLjggMzIgMzY0LjMgMzJsLTc2LjQgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6bTY0IDE5MmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhU3BpcmFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwaXJhbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlODBhIiwgIk0xMTUuNSA3LjRjMTMuNi0xMS4zIDMzLjgtOS41IDQ1LjEgNC4xczkuNSAzMy44LTQuMSA0NS4xQzEwMC4yIDEwMy41IDY0IDE3NS4yIDY0IDI1NiA2NCAzNjIgMTUwIDQ0OCAyNTYgNDQ4czE5Mi04NiAxOTItMTkyYzAtNzUuMS02MC45LTEzNi0xMzYtMTM2UzE3NiAxODAuOSAxNzYgMjU2YzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJjMC00OC42IDM5LjQtODggODgtODhzODggMzkuNCA4OCA4OGMwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFMxMTIgMzM1LjUgMTEyIDI1NmMwLTExMC41IDg5LjUtMjAwIDIwMC0yMDBzMjAwIDg5LjUgMjAwIDIwMGMwIDE0MS40LTExNC42IDI1Ni0yNTYgMjU2UzAgMzk3LjQgMCAyNTZDMCAxNTUuOCA0NSA2Ni4xIDExNS41IDcuNHoiXQogICAgfTsKICAgIGZhRmFjZUZyb3duMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWZyb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTc4NSwgImZyb3duIl0sICJmMTE5IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptOTAuNi0xMTMuOWMtMjAuNC0yOC01My40LTQ2LjEtOTAuNi00Ni4xcy03MC4yIDE4LjEtOTAuNiA0Ni4xYy03LjggMTAuNy0yMi44IDEzLjEtMzMuNSA1LjNzLTEzLjEtMjIuOC01LjMtMzMuNUMxNTUuNyAzMzAgMjAyLjggMzA0IDI1NiAzMDRzMTAwLjMgMjYgMTI5LjQgNjUuOWM3LjggMTAuNyA1LjQgMjUuNy01LjMgMzMuNXMtMjUuNyA1LjQtMzMuNS01LjN6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhRnJvd24yID0gZmFGYWNlRnJvd24yOwogICAgZmFXaW5lR2xhc3NFbXB0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aW5lLWdsYXNzLWVtcHR5IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbIndpbmUtZ2xhc3MtYWx0Il0sICJmNWNlIiwgIk02NCAwQzQ4LjcgMCAzNS42IDEwLjggMzIuNiAyNS43TDMuMiAxNzNDMS4xIDE4My41IDAgMTk0LjIgMCAyMDVsMCAzYzAgNzcuNCA1NSAxNDIgMTI4IDE1Ni44bDAgMTE1LjItNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTExNS4yQzI2NSAzNTAgMzIwIDI4NS40IDMyMCAyMDhsMC0zYzAtMTAuNy0xLjEtMjEuNC0zLjItMzJMMjg3LjQgMjUuN0MyODQuNCAxMC44IDI3MS4zIDAgMjU2IDBMNjQgMHptMS45IDE4NS42TDkwLjIgNjQgMjI5LjggNjQgMjU0LjEgMTg1LjZjMS4zIDYuNCAxLjkgMTIuOSAxLjkgMTkuNGwwIDNjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZsMC0zYzAtNi41IC42LTEzIDEuOS0xOS40eiJdCiAgICB9OwogICAgZmFXaW5lR2xhc3NBbHQgPSBmYVdpbmVHbGFzc0VtcHR5OwogICAgZmFDbGFwcGVyYm9hcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xhcHBlcmJvYXJkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUxMzEiLCAiTTQ0OCA2NGMyIDAgMy45IC4xIDUuOCAuM2wtOTUuNyA5NS43IDY3LjkgMCA3Mi03MmM4LjggMTEgMTQgMjQuOSAxNCA0MGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDcwLjEgMC05NiA5NiA2Ny45IDAgOTUtOTUgMS0xIDkyLjEgMC05NiA5NiA2Ny45IDAgOTUtOTUgMS0xIDg2LjEgMHoiXQogICAgfTsKICAgIGZhRm9yd2FyZFN0ZXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9yd2FyZC1zdGVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbInN0ZXAtZm9yd2FyZCJdLCAiZjA1MSIsICJNMjEgMzYuOGMxMi45LTcgMjguNy02LjMgNDEgMS44TDMyMCAyMDguMSAzMjAgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDM4NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE0NC4xLTI1OCAxNjkuNmMtMTIuMyA4LjEtMjggOC44LTQxIDEuOFMwIDQ1NC43IDAgNDQwTDAgNzJDMCA1Ny4zIDguMSA0My44IDIxIDM2Ljh6Il0KICAgIH07CiAgICBmYVN0ZXBGb3J3YXJkID0gZmFGb3J3YXJkU3RlcDsKICAgIGZhU3F1YXJlVXBSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtdXAtcmlnaHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs4NTk5LCAiZXh0ZXJuYWwtbGluay1zcXVhcmUtYWx0Il0sICJmMzYwIiwgIk0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwek0xNjggMTYwYy05LjcgMC0xOC41IDUuOC0yMi4yIDE0LjhzLTEuNyAxOS4zIDUuMiAyNi4ybDM1IDM1LTY3IDY3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWwyNCAyNGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw2Ny02NyAzNSAzNWM2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yUzMyMCAzMjEuNyAzMjAgMzEybDAtMTI4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xMjggMHoiXQogICAgfTsKICAgIGZhRXh0ZXJuYWxMaW5rU3F1YXJlQWx0ID0gZmFTcXVhcmVVcFJpZ2h0OwogICAgZmFCb29rSm91cm5hbFdoaWxscyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLWpvdXJuYWwtd2hpbGxzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImpvdXJuYWwtd2hpbGxzIl0sICJmNjZhIiwgIk05NiA1MTJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02Ni43YzE4LjYtNi42IDMyLTI0LjQgMzItNDUuM2wwLTI4OGMwLTI2LjUtMjEuNS00OC00OC00OEw5NiAwQzQzIDAgMCA0MyAwIDk2TDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZ6TTY0IDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNTYgMCAwIDY0LTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMjc0LjEgOTkuMmMyLjYtMi42IDYuNy0zLjEgOS45LTEuMSAzMi4xIDIwIDUzLjQgNTUuNiA1My40IDk2LjIgMCA2Mi42LTUwLjcgMTEzLjMtMTEzLjMgMTEzLjNTMTEwLjcgMjU2LjkgMTEwLjcgMTk0LjNjMC00MC42IDIxLjQtNzYuMiA1My40LTk2LjIgMy4xLTIgNy4yLTEuNSA5LjkgMS4xczMuMSA2LjcgMS4yIDkuOGMtNS4yIDguNi04LjIgMTguNy04LjIgMjkuNSAwIDE1LjEgNS45IDI4LjggMTUuNSAzOS4xIDIuNSAyLjcgMi45IDYuNyAuOSA5LjctNC43IDcuNC03LjQgMTYuMS03LjQgMjUuNSAwIDIxLjYgMTQuMyAzOS45IDM0IDQ1LjlsMS0yNC44Yy03LjEtNC40LTExLjgtMTIuMi0xMS44LTIxLjEgMC05LjYgNS41LTE4IDEzLjUtMjIuMWwzLjMtODEuOGMuMi00LjMgMy43LTcuNyA4LTcuN3M3LjggMy40IDggNy43bDMuMyA4MS44YzggNC4xIDEzLjUgMTIuNCAxMy41IDIyLjEgMCA4LjktNC43IDE2LjctMTEuOCAyMS4xbDEgMjQuOGMxOS42LTYgMzMuOS0yNC4xIDM0LTQ1LjZsMC0uNmMtLjEtOS4zLTIuNy0xNy45LTcuNC0yNS4yLTEuOS0zLjEtMS42LTcuMSAuOS05LjcgOS42LTEwLjIgMTUuNS0yMy45IDE1LjUtMzkuMSAwLTEwLjgtMy0yMC45LTguMi0yOS41LTEuOS0zLjItMS40LTcuMiAxLjItOS44eiJdCiAgICB9OwogICAgZmFKb3VybmFsV2hpbGxzID0gZmFCb29rSm91cm5hbFdoaWxsczsKICAgIGZhQ2hhbXBhZ25lR2xhc3NlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFtcGFnbmUtZ2xhc3NlcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyOTM0NiwgImdsYXNzLWNoZWVycyJdLCAiZjc5ZiIsICJNMTU1LjYgMTcuM0MxNjMgMyAxNzkuOS0zLjYgMTk1IDEuOWwxMjUgNDUuNiAxMjUtNDUuNmMxNS4xLTUuNSAzMiAxLjEgMzkuNCAxNS40bDc4LjggMTUyLjljMjguOCA1NS44IDEwLjMgMTIyLjMtMzguNSAxNTYuNmwzMS4zIDg2LjIgNDEtMTVjMTYuNi02IDM1IDIuNSA0MSAxOS4xcy0yLjUgMzUtMTkuMSA0MWMtNDcuNCAxNy4zLTk0LjggMzQuNS0xNDIuMiA1MS44LTE2LjYgNi4xLTM1LTIuNS00MS0xOS4xczIuNS0zNSAxOS4xLTQxbDQxLTE1LTMxLjMtODYuMmMtNTkuNCA1LjItMTE2LjItMzMuOS0xMzAtOTUuMmwtMTQuNi02NC43LTE0LjYgNjQuN2MtMTMuOCA2MS4zLTcwLjYgMTAwLjQtMTMwIDk1LjJsLTMxLjMgODYuMiA0MSAxNWMxNi42IDYuMSAyNS4yIDI0LjQgMTkuMSA0MXMtMjQuNCAyNS4yLTQxIDE5LjFjLTQ3LjQtMTcuMy05NC44LTM0LjYtMTQyLjItNTEuOC0xNi42LTYuMS0yNS4yLTI0LjQtMTkuMS00MVMyNi4zIDM5MiA0Mi45IDM5OGw0MSAxNSAzMS4zLTg2LjJDNjYuNSAyOTIuNSA0OC4xIDIyNiA3Ni45IDE3MC4yTDE1NS42IDE3LjN6bTQ0IDU0LjRsLTI3LjIgNTIuOCA4OS4yIDMyLjUgMTMuMS01Ny45LTc1LjEtMjcuNHptMjQwLjkgMGwtNzUuMSAyNy40IDEzLjEgNTcuOSA4OS4yLTMyLjUtMjcuMi01Mi44eiJdCiAgICB9OwogICAgZmFHbGFzc0NoZWVycyA9IGZhQ2hhbXBhZ25lR2xhc3NlczsKICAgIGZhRHVtcHN0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHVtcHN0ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjc5MyIsICJNMTMyLjMgNjRMMTA2LjcgMTkyIDI0IDE5MmMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00LjFjMC0yLjYgLjQtNS4xIDEuMi03LjZMMjYuNSA4MC40QzI5LjggNzAuNiAzOSA2NCA0OS4zIDY0bDgzIDB6bTIzLjQgMTI4bDI1LjYtMTI4IDgyLjcgMCAwIDEyOC0xMDguMyAwek0zMTIgNjRsODIuNyAwIDI1LjYgMTI4LTEwOC4zIDAgMC0xMjh6bTEzMS43IDBsODMgMGMxMC4zIDAgMTkuNSA2LjYgMjIuOCAxNi40bDI1LjMgNzUuOWMuOCAyLjQgMS4yIDUgMS4yIDcuNmwwIDQuMWMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtODIuNyAwLTI1LjYtMTI4ek0yNS43IDI0MGw1MjQuNyAwYy0uNCAyLjEtMTMuMyA3My40LTM4LjkgMjEzLjctMyAxNi4zLTE3LjkgMjcuNi0zNC40IDI2LjFTNDQ4IDQ2NC42IDQ0OCA0NDhsMC0xNi0zMjAgMCAwIDE2YzAgMTYuNi0xMi42IDMwLjQtMjkuMSAzMS45UzY3LjUgNDcwIDY0LjUgNDUzLjdDMzkgMzEzLjMgMjYgMjQyLjEgMjUuNyAyNDB6Il0KICAgIH07CiAgICBmYUhlYXJ0Q2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhcnQtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MDEiLCAiTTI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN0MyOTYgNTIuNSAzMzYuMiAzMiAzNzguOSAzMiA0NTIuNCAzMiA1MTIgOTEuNiA1MTIgMTY1LjFsMCAyLjZjMCAxNy42LTMuNCAzNS42LTkuNSA1My43LTIxLjgtOC42LTQ1LjYtMTMuNC03MC41LTEzLjQtMTA2IDAtMTkyIDg2LTE5MiAxOTIgMCAyOC41IDYuMiA1NS42IDE3LjQgODAtLjUgMC0uOSAwLTEuNCAwLTE1LjUgMC0zMC44LTQuNi00My4xLTE0LjEtNzMtNTUuNy0yMTIuOS0xODYtMjEyLjktMjk4LjJsMC0yLjZDMCA5MS42IDU5LjYgMzIgMTMzLjEgMzIgMTc1LjggMzIgMjE2IDUyLjUgMjQxIDg3LjF6TTQzMiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em01OS4zIDEwNy4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBsLTM2LjcgMzYuNy0zNi43LTM2LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsMzYuNyAzNi43LTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDM2LjctMzYuNyAzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC0zNi43LTM2LjcgMzYuNy0zNi43eiJdCiAgICB9OwogICAgZmFDb21wdXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21wdXRlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGU1IiwgIk0zNDguOCAzMkMzNDAuNyA0Ni4xIDMzNiA2Mi41IDMzNiA4MGwwIDE2LTI3MiAwIDAgMjI0IDI3MiAwIDAgNjQtMjcyIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjg0LjggMHpNMzM2IDQzMmMwIDE3LjUgNC43IDMzLjkgMTIuOCA0OEwxMjAgNDgwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDIxNiAwek00MzIgMzJsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0zNTJjMC0yNi41IDIxLjUtNDggNDgtNDh6bTI0IDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMHptNTYgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYVdhbmRNYWdpYyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3YW5kLW1hZ2ljIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbIm1hZ2ljIl0sICJmMGQwIiwgIk0zOTguNSAxMi4ybC04OC4yIDg4LjIgMTAxLjMgMTAxLjMgODguMi04OC4yQzUwNy42IDEwNS42IDUxMiA5NSA1MTIgODRzLTQuNC0yMS42LTEyLjItMjkuNUw0NTcuNSAxMi4yQzQ0OS42IDQuNCA0MzkgMCA0MjggMHMtMjEuNiA0LjQtMjkuNSAxMi4yek0yNzYuNCAxMzQuM0wxMi4yIDM5OC41QzQuNCA0MDYuNCAwIDQxNyAwIDQyOHM0LjQgMjEuNiAxMi4yIDI5LjVsNDIuMyA0Mi4zQzYyLjQgNTA3LjYgNzMgNTEyIDg0IDUxMnMyMS42LTQuNCAyOS41LTEyLjJMMzc3LjcgMjM1LjYgMjc2LjQgMTM0LjN6Il0KICAgIH07CiAgICBmYU1hZ2ljID0gZmFXYW5kTWFnaWM7CiAgICBmYUJyYWluID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyYWluIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTA0XSwgImY1ZGMiLCAiTTEyMCA1NmMwLTMwLjkgMjUuMS01NiA1Ni01NmwyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0yOS44IDAtNTQuOS0yMC40LTYyLTQ4LS43IDAtMS4zIDAtMiAwLTQ0LjIgMC04MC0zNS44LTgwLTgwIDAtMTggNi0zNC42IDE2LTQ4LTE5LjQtMTQuNi0zMi0zNy44LTMyLTY0IDAtMzAuOSAxNy42LTU3LjggNDMuMi03MS4xLTcuMS0xMi0xMS4yLTI2LTExLjItNDAuOSAwLTQ0LjIgMzUuOC04MCA4MC04MGwwLTI0em0yNzIgMGwwIDI0YzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgMTUtNC4xIDI5LTExLjIgNDAuOSAyNS43IDEzLjMgNDMuMiA0MC4xIDQzLjIgNzEuMSAwIDI2LjItMTIuNiA0OS40LTMyIDY0IDEwIDEzLjQgMTYgMzAgMTYgNDggMCA0NC4yLTM1LjggODAtODAgODAtLjcgMC0xLjMgMC0yIDAtNy4xIDI3LjYtMzIuMiA0OC02MiA0OGwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC00NDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMjQgMGMzMC45IDAgNTYgMjUuMSA1NiA1NnoiXQogICAgfTsKICAgIGZhQnJpZWZjYXNlTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmllZmNhc2UtbWVkaWNhbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDY5IiwgIk0yMDAgNDhsMTEyIDBjNC40IDAgOCAzLjYgOCA4bDAgNDAtMTI4IDAgMC00MGMwLTQuNCAzLjYtOCA4LTh6bS01NiA4bDAgNDAtODAgMEMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTgwIDAgMC00MGMwLTMwLjktMjUuMS01Ni01Ni01NkwyMDAgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6bTgwIDE2MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhSG91c2VNZWRpY2FsQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtbWVkaWNhbC1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUxMiIsICJNMzA5LjggOC42Yy0xMi4zLTExLjQtMzEuMy0xMS40LTQzLjUgMGwtMjI0IDIwOGMtOS42IDktMTIuOCAyMi45LTggMzUuMVM1MC44IDI3MiA2NCAyNzJsMTYgMCAwIDE3NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTYgMGMtMjEuMi0yOS41LTM0LjMtNjUuMy0zNS45LTEwNEwyNzIgNDA4Yy04LjggMC0xNi03LjItMTYtMTZsMC00MC00MCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDAgMCAwLTQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQwIDIwIDBjMzQuOS00OC41IDkxLjctODAgMTU2LTgwIDEwLjcgMCAyMS4xIC45IDMxLjMgMi41TDMwOS44IDguNnpNNDk2IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYUNvZGVDb21taXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29kZS1jb21taXQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjM4NiIsICJNMjg4IDMzNmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMTU2LjgtNDhDNDMwIDM2MSAzNjUuNCA0MTYgMjg4IDQxNlMxNDYgMzYxIDEzMS4yIDI4OEwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTkuMiAwQzE0NiAxNTEgMjEwLjYgOTYgMjg4IDk2czE0MiA1NSAxNTYuOCAxMjhsOTkuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05OS4yIDB6Il0KICAgIH07CiAgICBmYVBlcnNvbkJyZWFzdGZlZWRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWJyZWFzdGZlZWRpbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTUzYSIsICJNMjI0IDBhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6TTQzNi44IDM4Mi44TDM3My41IDQ2MmMtMTYuNiAyMC43LTQ2LjggMjQuMS02Ny41IDcuNS0xNy42LTE0LjEtMjIuNy0zOC4xLTEzLjUtNTcuN2wtLjctLjFjLTM4LjktNS42LTc0LjMtMjUuMS05OS43LTU0LjhsMC0zNi44YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDhjMCAuOCAwIDEuNiAuMSAyLjRsMTAxLjQgNTAuN2MyMy43IDExLjkgMzMuMyA0MC43IDIxLjUgNjQuNHMtNDAuNyAzMy4zLTY0LjQgMjEuNUwyNy4yIDQyNy4zYy0xLjEtLjUtMi4yLTEuMS0zLjMtMS43LTQuOS0yLjgtOS4yLTYuNC0xMi42LTEwLjYtNC42LTUuNC03LjgtMTEuNy05LjYtMTguNC0zLjMtMTItMS45LTI1LjIgNC44LTM2LjYgLjYtMS4xIDEuMy0yLjIgMi0zLjJMNzUuNiAyNTYuMWMyNi43LTQwLjEgNzEuNy02NC4xIDExOS44LTY0LjFsNzUuMiAwYzQ2LjUgMCA5MC4xIDIyLjUgMTE3LjIgNjAuM2w1MC43IDcwLjljMi4yIDMgNCA2LjEgNS41IDkuNCAyLjkgNi43IDQuMyAxMy44IDQgMjAuOC0uMyAxMC42LTQuMiAyMS0xMS4yIDI5LjR6TTMyMCAzMzJhNDQgNDQgMCAxIDAgLTg4IDAgNDQgNDQgMCAxIDAgODggMHoiXQogICAgfTsKICAgIGZhUGVyc29uUmF5cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tcmF5cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTRkIiwgIk0zMTIuNSAyNGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6bTI0IDIxMi43bDQ2LjMgNjIuNGMxMC41IDE0LjIgMzAuNiAxNy4yIDQ0LjggNi42czE3LjItMzAuNiA2LjYtNDQuOGwtNzAuNS05NUMzMzguNSAxMzIgMjk4LjggMTEyIDI1Ni41IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42bDQ2LjMtNjIuNCAwIDI3NS4zYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTcuNSA3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw4MCA4MGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDEuNSA3QzMyLjEtMi4zIDE2LjktMi4zIDcuNSA3em00NjQgMGwtODAgODBjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw4MC04MGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwek03LjUgNTA1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDgwLTgwYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTgwIDgwYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXptNDY0IDBjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC04MC04MGMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw4MCA4MHoiXQogICAgfTsKICAgIGZhTWFuYXRTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hbmF0LXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTFkNSIsICJNMTkyIDMyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQxLjVDNzMuMyAxMDkuMyAwIDE5MC4xIDAgMjg4TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC02Mi41IDQ0LjgtMTE0LjUgMTA0LTEyNS44TDE2OCA0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI5My44YzU5LjIgMTEuMiAxMDQgNjMuMyAxMDQgMTI1LjhsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTk3LjktNzMuMy0xNzguNy0xNjgtMTkwLjVMMjE2IDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFTb3J0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNvcnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsidW5zb3J0ZWQiXSwgImYwZGMiLCAiTTIuNCAyMDQuMmM1IDEyIDE2LjYgMTkuOCAyOS42IDE5LjhsMzIwIDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjBjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45em0wIDEwMy41Yy01IDEyLTIuMiAyNS43IDYuOSAzNC45bDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVMzNjQuOSAyODggMzUyIDI4OEwzMiAyODhjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5Ljh6Il0KICAgIH07CiAgICBmYVVuc29ydGVkID0gZmFTb3J0OwogICAgZmFDaXJjbGVSYWRpYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXJhZGlhdGlvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3NjIsICJyYWRpYXRpb24tYWx0Il0sICJmN2JhIiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem04MCAwbDY0LjMgMGM4LjcgMCAxNS43LTcuMSAxNy4zLTE1LjYgNC40LTI0LjQgMTguMS00NS41IDM3LjItNTkuNyA3LjQtNS41IDEwLjYtMTUuNiA2LTIzLjZsLTMyLjUtNTYuM2MtNC4zLTcuNS0xMy45LTEwLjMtMjEuMi01LjUtNDguMiAzMS41LTgxLjMgODQuMi04Ni4zIDE0NC44LS43IDguOCA2LjUgMTYgMTUuMyAxNnptMTM3LjkgODkuOGMtOC41LTMuNy0xOC44LTEuNC0yMy41IDYuNmwtMzEgNTMuOGMtNC4zIDcuNS0xLjkgMTcuMiA1LjggMjEuMSAyNi4xIDEzLjIgNTUuNSAyMC43IDg2LjggMjAuN3M2MC43LTcuNSA4Ni44LTIwLjdjNy43LTMuOSAxMC4xLTEzLjYgNS44LTIxLjFsLTMxLTUzLjhjLTQuNi04LTE1LTEwLjMtMjMuNS02LjYtMTEuNyA1LTI0LjUgNy44LTM4LjEgNy44cy0yNi40LTIuOC0zOC4xLTcuOHpNMzUwLjQgMjQwLjRjMS42IDguNiA4LjUgMTUuNiAxNy4zIDE1LjZsNjQuMyAwYzguOCAwIDE2LjEtNy4yIDE1LjMtMTYtNS02MC42LTM4LjEtMTEzLjItODYuMy0xNDQuOC03LjMtNC44LTE2LjgtMi0yMS4yIDUuNUwzMDcuMyAxNTdjLTQuNiA4LTEuNCAxOC4xIDYgMjMuNiAxOS4xIDE0LjIgMzIuNyAzNS40IDM3LjIgNTkuN3pNMjU2IDMwNS43YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnoiXQogICAgfTsKICAgIGZhUmFkaWF0aW9uQWx0ID0gZmFDaXJjbGVSYWRpYXRpb247CiAgICBmYUxhcHRvcENvZGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGFwdG9wLWNvZGUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjVmYyIsICJNNjQgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDAtNjQgMCAwLTI0MC0zODQgMCAwIDI0MC02NCAwIDAtMjQwek0wIDQwMy4yQzAgMzkyLjYgOC42IDM4NCAxOS4yIDM4NGw2MDEuNiAwYzEwLjYgMCAxOS4yIDguNiAxOS4yIDE5LjIgMCA0Mi40LTM0LjQgNzYuOC03Ni44IDc2LjhMNzYuOCA0ODBDMzQuNCA0ODAgMCA0NDUuNiAwIDQwMy4yek0yODEgMjA5bC0zMSAzMSAzMSAzMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00OC00OGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNDgtNDhjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45ek0zOTMgMTc1bDQ4IDQ4YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC00OCA0OGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAweiJdCiAgICB9OwogICAgZmFTaW5rID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNpbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA2ZCIsICJNMjg4IDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzIgMTQuMyAzMiAzMiAzMiAzMi0xNC4zIDMyLTMyYzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2bDAgMTkyLTY0IDAgMC00MGMwLTMwLjktMjUuMS01Ni01Ni01NmwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwYzQuNCAwIDggMy42IDggOGwwIDQwLTgwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMCA2NGMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC02NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtODAgMCAwLTQwYzAtNC40IDMuNi04IDgtOGw1NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC01NiAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDQwLTY0IDAgMC0xOTJ6Il0KICAgIH07CiAgICBmYUFycm93VXBGcm9tV2F0ZXJQdW1wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLWZyb20td2F0ZXItcHVtcCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGI2IiwgIk0xNDQgMzJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTc2LTE2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNzkuNmMxNy42LTIgMzYgMi41IDUxLjMgMTQgMy40IDIuNiA2LjEgMS40IDkuOC0uM2wuOC0uNGM1LjctMi42IDEyLjktNi45IDIxLjctMTMuNSAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjMtMzEuNCAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjQgMjIuMSAxNi42IDI5LjEgMTYuNiA1MS4yIDAgMjcuNS0yMC43IDU5LjktMzEuMiA5Mi40LTMxLjQgMzMuMS0uMiA2Ni4zIDEwLjIgOTQuNCAzMS40IDYuOSA1LjIgMTIuOCA5IDE4IDExLjcgLjYgLjMgMS4yIC42IDEuOCAxIDQuMiAyLjMgOC41IDQuNiAxMi42IDEuNSAxMC43LTguMSAyMi45LTEyLjcgMzUuMy0xNC4xbDAtNzkuNWMwLTI2LjUtMjEuNS00OC00OC00OGwtNTYgMCAwLTE0Mi4xIDQ3IDQ3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0OTcgMzljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC04OCA4OGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDQ3LTQ3IDAgMTQyLjEtMTM2IDAgMC0xNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhMMTQ0IDMyek00NzQuNiA0NzYuMWMxOSAxNC40IDQxLjkgMjguMiA2Ny4yIDMzLjMgMjYuNSA1LjQgNTQuMyAuOCA4MC43LTE5LjEgMTAuNi04IDEyLjctMjMgNC43LTMzLjZzLTIzLTEyLjctMzMuNi00LjdjLTE0LjkgMTEuMi0yOC42IDEzLjEtNDIuMyAxMC4zLTE0LjktMy0zMC45LTExLjktNDcuOC0yNC42LTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNzLTMwLjUtOC4yLTU0LjUtMjYuM2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTIxLjYgMTYuMy00MS4zIDI1LjgtNTguOSAyNS43LTkuNi0uMS0xOS45LTMtMzEuMi0xMS41LTEwLjYtOC0yNS42LTUuOS0zMy42IDQuN1M3IDQ4Mi4zIDE3LjYgNDkwLjNjMTkuMSAxNC40IDM5LjQgMjEgNTkuOCAyMS4xIDMzLjkgLjIgNjQuMy0xNy40IDg4LjEtMzUuMyAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAweiJdCiAgICB9OwogICAgZmFNaWNyb3Bob25lTGluZXNTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtaWNyb3Bob25lLWxpbmVzLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbIm1pY3JvcGhvbmUtYWx0LXNsYXNoIl0sICJmNTM5IiwgIk03LTI0LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMTUxIDE1MSAwLTMwLjJjMC01MyA0My05NiA5Ni05NiA1MC4zIDAgOTEuNiAzOC43IDk1LjcgODhMMzI4IDg4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDU2IDAgMCA0OC01NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDU1LjcgMGMtMS45IDIyLjktMTEuOCA0My40LTI2LjkgNTlsMzMuOSAzMy45YzI1LjUtMjYgNDEuMy02MS42IDQxLjMtMTAwLjlsMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDBjMCA1Mi42LTIxLjEgMTAwLjItNTUuMyAxMzQuOEw1NjkgNTAzLjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEw3IDkuMUMtMi4zLS4zLTIuMy0xNS41IDctMjQuOXpNMjk3LjggMzY3LjdsNDEuNCA0MS40Yy04LjggMi40LTE3LjkgNC4zLTI3LjMgNS40bDAgNDkuNSA0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0OCAwIDAtNDkuNUMxNjkuMyA0MDIuNyA5NiAzMjEuOSA5NiAyMjRsMC00MGMwLTUuMSAxLjYtOS45IDQuNC0xMy44bDQzLjYgNDMuNiAwIDEwLjJjMCA3OS41IDY0LjUgMTQ0IDE0NCAxNDQgMy4zIDAgNi42LS4xIDkuOC0uM3oiXQogICAgfTsKICAgIGZhTWljcm9waG9uZUFsdFNsYXNoID0gZmFNaWNyb3Bob25lTGluZXNTbGFzaDsKICAgIGZhU2VydmVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNlcnZlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjMzIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptMjE2IDcyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNTYgMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHpNNjQgMjg4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMjg4em0yMTYgNzJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em01NiAyNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFVc2VyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTAwLCA2MjE0NCwgNjI0NzAsICJ1c2VyLWFsdCIsICJ1c2VyLWxhcmdlIl0sICJmMDA3IiwgIk0yMjQgMjQ4YTEyMCAxMjAgMCAxIDAgMC0yNDAgMTIwIDEyMCAwIDEgMCAwIDI0MHptLTI5LjcgNTZDOTUuOCAzMDQgMTYgMzgzLjggMTYgNDgyLjMgMTYgNDk4LjcgMjkuMyA1MTIgNDUuNyA1MTJsMzU2LjYgMGMxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuNyAwLTk4LjUtNzkuOC0xNzguMy0xNzguMy0xNzguM2wtNTkuNCAweiJdCiAgICB9OwogICAgZmFVc2VyQWx0MiA9IGZhVXNlcjI7CiAgICBmYVVzZXJMYXJnZTIgPSBmYVVzZXIyOwogICAgZmFTbm93Zmxha2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNub3dmbGFrZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEwMDUyLCAxMDA1NF0sICJmMmRjIiwgIk0yODguMiAwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjIuMS0xNS0xNWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw0OSA0OSAwIDcwLjYtNjEuMi0zNS4zLTE3LjktNjYuOWMtMy40LTEyLjgtMTYuNi0yMC40LTI5LjQtMTdTOTUuMyA5OCA5OC43IDExMC44bDUuNSAyMC41LTUzLjctMzFDMzUuMiA5MS41IDE1LjYgOTYuNyA2LjggMTEycy0zLjYgMzQuOSAxMS43IDQzLjdsNTMuNyAzMS0yMC41IDUuNWMtMTIuOCAzLjQtMjAuNCAxNi42LTE3IDI5LjRzMTYuNiAyMC40IDI5LjQgMTdsNjYuOS0xNy45IDYxLjIgMzUuMy02MS4yIDM1LjMtNjYuOS0xNy45Yy0xMi44LTMuNC0yNiA0LjItMjkuNCAxN3M0LjIgMjYgMTcgMjkuNGwyMC41IDUuNS01My43IDMxQzMuMiAzNjUuMS0yIDM4NC43IDYuOCA0MDBzMjguNCAyMC42IDQzLjcgMTEuN2w1My43LTMxLTUuNSAyMC41Yy0zLjQgMTIuOCA0LjIgMjYgMTcgMjkuNHMyNi00LjIgMjkuNC0xN2wxNy45LTY2LjkgNjEuMi0zNS4zIDAgNzAuNi00OSA0OWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDE1LTE1IDAgNjIuMWMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjIuMSAxNSAxNWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTQ5LTQ5IDAtNzAuNiA2MS4yIDM1LjMgMTcuOSA2Ni45YzMuNCAxMi44IDE2LjYgMjAuNCAyOS40IDE3czIwLjQtMTYuNiAxNy0yOS40bC01LjUtMjAuNSA1My43IDMxYzE1LjMgOC44IDM0LjkgMy42IDQzLjctMTEuN3MzLjYtMzQuOS0xMS43LTQzLjdsLTUzLjctMzEgMjAuNS01LjVjMTIuOC0zLjQgMjAuNC0xNi42IDE3LTI5LjRzLTE2LjYtMjAuNC0yOS40LTE3bC02Ni45IDE3LjktNjEuMi0zNS4zIDYxLjItMzUuMyA2Ni45IDE3LjljMTIuOCAzLjQgMjYtNC4yIDI5LjQtMTdzLTQuMi0yNi0xNy0yOS40bC0yMC41LTUuNSA1My43LTMxYzE1LjMtOC44IDIwLjYtMjguNCAxMS43LTQzLjdzLTI4LjQtMjAuNS00My43LTExLjdsLTUzLjcgMzEgNS41LTIwLjVjMy40LTEyLjgtNC4yLTI2LTE3LTI5LjRzLTI2IDQuMi0yOS40IDE3bC0xNy45IDY2LjktNjEuMiAzNS4zIDAtNzAuNiA0OS00OWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0xNSAxNSAwLTYyLjF6Il0KICAgIH07CiAgICBmYVNrdWxsQ3Jvc3Nib25lcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJza3VsbC1jcm9zc2JvbmVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MzY5LCA5NzYwXSwgImY3MTQiLCAiTTM4NCAxNDRDMzg0IDY0LjUgMzEyLjQgMCAyMjQgMFM2NCA2NC41IDY0IDE0NGMwIDQ3LjEgMjUuMSA4OC45IDY0IDExNS4ybDAgMjguOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTI4LjhjMzguOS0yNi4zIDY0LTY4LjEgNjQtMTE1LjJ6TTE2MCAxMjhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em05NiAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek00NDUuNSAzMzkuN2MtNi44LTE2LjMtMjUuNS0yNC00MS44LTE3LjJMMjI0IDM5Ny4zIDQ0LjMgMzIyLjVjLTE2LjMtNi44LTM1IC45LTQxLjggMTcuMnMuOSAzNSAxNy4yIDQxLjhMMTQwLjggNDMyIDE5LjcgNDgyLjVDMy40IDQ4OS4zLTQuMyA1MDggMi41IDUyNC4zczI1LjUgMjQgNDEuOCAxNy4yTDIyNCA0NjYuNyA0MDMuNyA1NDEuNWMxNi4zIDYuOCAzNS0uOSA0MS44LTE3LjJzLS45LTM1LTE3LjItNDEuOEwzMDcuMiA0MzIgNDI4LjMgMzgxLjVjMTYuMy02LjggMjQtMjUuNSAxNy4yLTQxLjh6Il0KICAgIH07CiAgICBmYVBlc29TaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlc28tc2lnbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMjIyIiwgIk0xMTIgMzJDOTQuMyAzMiA4MCA0Ni4zIDgwIDY0bDAgNjQtMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNCAwIDAgMzItMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNCAwIDAgMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiA5NiAwYzY1LjYgMCAxMjItMzkuNSAxNDYuNy05NmwzNy4zIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI0LjggMGMuNS01LjMgLjgtMTAuNiAuOC0xNnMtLjMtMTAuNy0uOC0xNmwyNC44IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTM3LjMgMEMzNjIgNzEuNSAzMDUuNiAzMiAyNDAgMzJMMTEyIDMyem0xOTkuNiA5NmwtMTY3LjYgMCAwLTMyIDk2IDBjMjguNCAwIDU0IDEyLjQgNzEuNiAzMnpNMTQ0IDE3NmwxOTAuNyAwYy45IDUuMiAxLjMgMTAuNSAxLjMgMTZzLS41IDEwLjgtMS4zIDE2bC0xOTAuNyAwIDAtMzJ6bTE2Ny42IDgwYy0xNy42IDE5LjYtNDMuMSAzMi03MS42IDMybC05NiAwIDAtMzIgMTY3LjYgMHoiXQogICAgfTsKICAgIGZhV2luZUdsYXNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndpbmUtZ2xhc3MiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMjc4NjNdLCAiZjRlMyIsICJNMzIuNiAyNS43QzM1LjYgMTAuOCA0OC43IDAgNjQgMEwyNTYgMGMxNS4zIDAgMjguNCAxMC44IDMxLjQgMjUuN0wzMTYuOCAxNzNjMi4xIDEwLjUgMy4yIDIxLjIgMy4yIDMybDAgM2MwIDc3LjQtNTUgMTQyLTEyOCAxNTYuOGwwIDExNS4yIDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNjQgNTQ0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDAgMC0xMTUuMkM1NSAzNTAgMCAyODUuNCAwIDIwOGwwLTNjMC0xMC43IDEuMS0yMS40IDMuMi0zMkwzMi42IDI1Ljd6TTc3LjQgMTI4bDE2NS4xIDAtMTIuOC02NC0xMzkuNSAwLTEyLjggNjR6Il0KICAgIH07CiAgICBmYVRlbXBlcmF0dXJlSGFsZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW1wZXJhdHVyZS1oYWxmIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTI3Nzc3LCAidGVtcGVyYXR1cmUtMiIsICJ0aGVybW9tZXRlci0yIiwgInRoZXJtb21ldGVyLWhhbGYiXSwgImYyYzkiLCAiTTE2MCAwQzEwNyAwIDY0IDQzIDY0IDk2bDAgMTY0LjdDMzQuNSAyODcgMTYgMzI1LjQgMTYgMzY4IDE2IDQ0Ny41IDgwLjUgNTEyIDE2MCA1MTJzMTQ0LTY0LjUgMTQ0LTE0NGMwLTQyLjYtMTguNS04MS00OC0xMDcuM0wyNTYgOTZjMC01My00My05Ni05Ni05NnptNjQgMzY4YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0YzAtMjYuOSAxNi41LTQ5LjkgNDAtNTkuM2wwLTkyLjdjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDkyLjdjMjMuNSA5LjUgNDAgMzIuNSA0MCA1OS4zeiJdCiAgICB9OwogICAgZmFUZW1wZXJhdHVyZTIgPSBmYVRlbXBlcmF0dXJlSGFsZjsKICAgIGZhVGhlcm1vbWV0ZXIyID0gZmFUZW1wZXJhdHVyZUhhbGY7CiAgICBmYVRoZXJtb21ldGVySGFsZiA9IGZhVGVtcGVyYXR1cmVIYWxmOwogICAgZmFUaWNrZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGlja2V0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTAzXSwgImYxNDUiLCAiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4bDAgNjRDMCAyMDAuOCA3LjQgMjA3LjcgMTUuNyAyMTAuNiAzNC41IDIxNy4xIDQ4IDIzNSA0OCAyNTZzLTEzLjUgMzguOS0zMi4zIDQ1LjRDNy40IDMwNC4zIDAgMzExLjIgMCAzMjBsMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY0YzAtOC44LTcuNC0xNS43LTE1LjctMTguNi0xOC44LTYuNS0zMi4zLTI0LjQtMzIuMy00NS40czEzLjUtMzguOSAzMi4zLTQ1LjRjOC4zLTIuOSAxNS43LTkuOCAxNS43LTE4LjZsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNNDE2IDMzNmwwLTE2MC0yNTYgMCAwIDE2MCAyNTYgMHpNMTEyIDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyODggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjg4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTkyeiJdCiAgICB9OwogICAgZmFXaGVhdEF3bkNpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndoZWF0LWF3bi1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU5OCIsICJNNDk2IDU3NmExNDQgMTQ0IDAgMSAxIDAtMjg4IDE0NCAxNDQgMCAxIDEgMCAyODh6TTgxIDUyOWMtOS40IDkuMy0yNC41IDkuMy0zMy45IDAtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlMODEgNTI5em0zMC4yLTI5NC40YzYuMi00LjEgMTQuNy0zLjQgMjAuMSAyLjFsNDYuMSA0Ni4xIDYuMSA2LjdjMTkuNyAyMy44IDI2LjMgNTUgMTkuMyA4My45IDMxLjctNy43IDY2LjIgMSA5MC42IDI1LjNsMTIgMTJjLS44IDctMS4yIDE0LjItMS4yIDIxLjQgMCAyMCAzIDM5LjMgOC43IDU3LjQtMzYuOCAyMS44LTg1IDE3LTExNi42LTE0LjdMMTY1LjYgNDQ0LjMgODEgNTI5QzY5LjcgNTE3LjcgNTguNCA1MDYuMyA0NyA0OTVsODQuNy04NC43LTMwLjUtMzAuNWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMXpNNDk2IDQ3NmEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6bTAtMTQwYy04LjggMC0xNiA3LjItMTYgMTZsMCA4MGMwIDguOCA3LjIgMTYgMTYgMTYgOC44IDAgMTYtNy4yIDE2LTE2bDAtODBjMC04LjgtNy4yLTE2LTE2LTE2ek0yMTUuMiAxMzAuNmM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDQ2LjEgNDYuMSA2LjEgNi43YzE5LjcgMjMuOCAyNi4zIDU1IDE5LjMgODMuOSAyNC4yLTUuOSA1MC4xLTIuMSA3MS45IDEwLjgtMzIuMiAyNC45LTU2LjIgNTkuOC02Ny40IDEwMC4xLTMuOC0yLjgtNy41LTYtMTEtOS41bC05NC45LTk0LjljLTM3LjUtMzcuNS0zNy41LTk4LjMgMC0xMzUuN2w3LjQtNy40IDIuNS0yLjF6TTUyNi43IDE1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwIDguOCA4LjggOS4zIDIyLjcgMS43IDMyLjFMNTYwLjYgNDkgNDQ2LjIgMTYzLjRjNy43IDEgMTUuMyAzIDIyLjUgNS45TDUyNyAxMTFjOS40LTkuNCAyNC42LTkuNCAzNCAwIDguOCA4LjggOS4zIDIyLjcgMS42IDMyLjFsLTEuNyAxLjgtNTIuNyA1Mi43IDM5IDM5YzMuMiAzLjIgNC43IDcuNCA0LjcgMTEuNi0xNy43LTUuNC0zNi41LTguMy01NS45LTguMy0zNC4yIDAtNjYuMyA4LjktOTQuMSAyNC42bC05Mi43LTkyLjdjLTM3LjUtMzcuNS0zNy41LTk4LjMgMC0xMzUuOGw3LjQtNy40IDIuNS0yLjFjNi4yLTQuMSAxNC43LTMuNCAyMC4xIDIuMWwzOSAzOSA1Mi43LTUyLjdjOS40LTkuNCAyNC42LTkuNCAzNCAwIDguOCA4LjggOS4zIDIyLjcgMS42IDMyLjFMNDY1IDQ5IDQwNi43IDEwNy4zYzIuOCA3LjEgNC43IDE0LjUgNS44IDIyLjFMNTI2LjcgMTV6Il0KICAgIH07CiAgICBmYUFycm93c1R1cm5SaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtdHVybi1yaWdodCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNGMwIiwgIk0zMTMuNC02LjZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wzMzguNyAxMjggMTI4IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDI0MS43IDAgMjI0bDAtMzJDMCAxMjEuMyA1Ny4zIDY0IDEyOCA2NGwyMTAuNyAwLTI1LjQtMjUuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjN6bS05NiAyNTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyNDIuNyAzODQgOTYgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhsMC0zMmMwLTUzIDQzLTk2IDk2LTk2bDE0Ni43IDAtMjUuNC0yNS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3oiXQogICAgfTsKICAgIGZhQ2FuZHlDYW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbmR5LWNhbmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjc4NiIsICJNNDIxLjggMzkuNkM0NTIgODUuMiA0NTYuNSAxNDIuOSA0MzUuMSAxOTJsLTE2NS40IDAgNDEuNC00MS40Yy44LS44IDEuNS0xLjYgMi4yLTIuNEw0MjEuOCAzOS42ek0yNjggMTAyLjljLS44IC43LTEuNiAxLjQtMi40IDIuMmwtMjguMSAyOC4xYy0yNSAyNS02NS41IDI1LTkwLjUgMHMtMjUtNjUuNSAwLTkwLjVMMTc1IDE0LjZDMjI5LjktNDAuMiAzMTQuNS00Ni43IDM3Ni41LTUuNkwyNjggMTAyLjl6TTEyNS43IDMzNmw4MC04MCAxODEgMC04Mi41IDgyLjUgMC0yLjUtMTc4LjUgMHptMTE3IDY0TDE0MS40IDUwMS4zYy0yNSAyNS02NS41IDI1LTkwLjUgMHMtMjUtNjUuNSAwLTkwLjVsMTAuNy0xMC43IDE4MSAweiJdCiAgICB9OwogICAgZmFXaGVlbGNoYWlyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndoZWVsY2hhaXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjE5MyIsICJNMTM2IDQwYTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMTE3LjkgMTk3LjZsMTIuNiA2M2MtMzguNiAxMi40LTY2LjUgNDguNy02Ni41IDkxLjQgMCA1MyA0MyA5NiA5NiA5NiAzNS42IDAgNjYuNy0xOS40IDgzLjMtNDguMiAyLjMgLjEgNC42IC4yIDcgLjJsNC4xIDBjMSAwIDIuMSAwIDMuMSAwbDU1LjIgMGMtMjAuNCA2NC45LTgxIDExMi0xNTIuNyAxMTItODguNCAwLTE2MC03MS42LTE2MC0xNjAgMC03My44IDUwLTEzNS45IDExNy45LTE1NC40em0xNDguNi0yOC4xbDIzLjcgMTE4LjUgNjAuNSAwYzMzLjMgMCA2My4yIDIwLjcgNzQuOSA1MS45bDI1LjUgNjggMTguNy02LjJjMTYuOC01LjYgMzQuOSAzLjUgNDAuNSAyMC4ycy0zLjUgMzQuOS0yMC4yIDQwLjVsLTQ4IDE2Yy0xNi4zIDUuNC0zNC0zLTQwLjEtMTkuMWwtMzYuMy05Ni45Yy0yLjMtNi4yLTguMy0xMC40LTE1LTEwLjRsLTg2LjEgMGMtLjQgMC0uOCAwLTEuMyAwbC0xMy4xIDBjLTMwLjUgMC01Ni44LTIxLjUtNjIuOC01MS40TDE2NS4zIDE4OS43Yy02LjQtMzEuOSAxOC02MS43IDUwLjYtNjEuNyAyNC42IDAgNDUuOCAxNy40IDUwLjYgNDEuNXoiXQogICAgfTsKICAgIGZhU3BlbGxDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcGVsbC1jaGVjayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmODkxIiwgIk0xMjAgMzJjLTQ4LjYgMC04OCAzOS40LTg4IDg4bDAgMTY4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NCA2NCAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2OGMwLTQ4LjYtMzkuNC04OC04OC04OGwtMTYgMHptNDAgMTI4bC02NCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwek0zMDQgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjI0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDcyIDBjNDguNiAwIDg4LTM5LjQgODgtODggMC0yMy42LTkuMy00NS0yNC40LTYwLjggMTAuMy0xNC40IDE2LjQtMzIuMSAxNi40LTUxLjIgMC00OC42LTM5LjQtODgtODgtODhsLTY0IDB6bTY0IDExMmwtMzIgMCAwLTQ4IDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6TTMzNiAyNTZsMC00OCA0MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00MCAwem0yMzMgODRjMTEtMTMuOCA4LjgtMzMuOS01LTQ1cy0zMy45LTguOC00NSA1bC0xMDUuNyAxMzIuMS0zOC43LTM4LjdjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzYuNCA2LjQgMTUuMyA5LjggMjQuNCA5LjNzMTcuNS00LjkgMjMuMi0xMkw1NjkgMzQweiJdCiAgICB9OwogICAgZmFWb2x1bWVPZmYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidm9sdW1lLW9mZiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMDI2IiwgIk05NiAzNTJsLTQ4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDhsNDggMCAxMzQuMS0xMTkuMmM2LjQtNS43IDE0LjYtOC44IDIzLjEtOC44IDE5LjIgMCAzNC44IDE1LjYgMzQuOCAzNC44bDAgMzc4LjRjMCAxOS4yLTE1LjYgMzQuOC0zNC44IDM0LjgtOC41IDAtMTYuNy0zLjEtMjMuMS04LjhMOTYgMzUyeiJdCiAgICB9OwogICAgZmFMdW5ncyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsdW5ncyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyOTcyOV0sICJmNjA0IiwgIk0zMjAgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxNDEuOS0zMiAxOS4yIDAtMTE2LjdjMC0yNC41LTE5LjktNDQuNC00NC40LTQ0LjQtMTIuNSAwLTI0LjQgNS4zLTMyLjggMTQuNWwtMjYuNCAyOUM0Mi45IDE2MC44IDAgMjcxLjggMCAzODdsMCAzMC41YzAgNTIuMiA0Mi4zIDk0LjUgOTQuNSA5NC41IDIyIDAgNDMuNy01LjEgNjMuNC0xNWw1LTIuNWMzNy40LTE4LjcgNjEtNTYuOSA2MS05OC44bDAtMTI4IDY0LTM4LjQgNjQgMzguNCAwIDEyOGMwIDQxLjggMjMuNiA4MC4xIDYxIDk4LjhsNSAyLjVjMTkuNyA5LjggNDEuNCAxNSA2My40IDE1IDUyLjIgMCA5NC41LTQyLjMgOTQuNS05NC41bDAtNi4yYzAtMTExLjEtMzYuNy0yMTktMTA0LjQtMzA3TDQyOC45IDQ4LjdjLTguMS0xMC42LTIwLjctMTYuNy0zNC0xNi43LTIzLjcgMC00Mi45IDE5LjItNDIuOSA0Mi45bDAgMTE4LjItMzItMTkuMiAwLTE0MS45eiJdCiAgICB9OwogICAgZmFCb29rbWFyazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9va21hcmsiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyNzgsIDYxNTkxXSwgImYwMmUiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDgwYzAgMTEuNSA2LjIgMjIuMiAxNi4yIDI3LjhzMjIuMyA1LjUgMzIuMi0uNEwxOTIgNDIxLjMgMzM1LjUgNTA3LjRjOS45IDUuOSAyMi4yIDYuMSAzMi4yIC40UzM4NCA0OTEuNSAzODQgNDgwbDAtNDE2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6Il0KICAgIH07CiAgICBmYUJhcmNvZGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFyY29kZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDJhIiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJMNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJ6bTg4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDAwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MDBjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTcyIDMybDAgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zODRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6bTIwOC04bDAgNDAwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6bS05NiAwbDAgNDAwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6Il0KICAgIH07CiAgICBmYUxpc3RPbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaXN0LW9sIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxpc3QtMS0yIiwgImxpc3QtbnVtZXJpYyJdLCAiZjBjYiIsICJNMCA3MkMwIDU4LjggMTAuNyA0OCAyNCA0OGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTA0IDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTk2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQgMCAwLTgwLTI0IDBDMTAuNyA5NiAwIDg1LjMgMCA3MnpNMzAuNCAzMDEuMkM0MS44IDI5Mi42IDU1LjcgMjg4IDcwIDI4OGw0LjkgMGMzMy43IDAgNjEuMSAyNy40IDYxLjEgNjEuMSAwIDE5LjYtOS40IDM3LjktMjUuMiA0OS40bC0yNCAxNy41IDMzLjIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOTAuNyAwQzEzLjEgNDY0IDAgNDUwLjkgMCA0MzQuNyAwIDQyNS4zIDQuNSA0MTYuNSAxMi4xIDQxMWw3MC41LTUxLjNjMy40LTIuNSA1LjQtNi40IDUuNC0xMC42IDAtNy4yLTUuOS0xMy4xLTEzLjEtMTMuMUw3MCAzMzZjLTMuOSAwLTcuNyAxLjMtMTAuOCAzLjZMMzguNCAzNTUuMmMtMTAuNiA4LTI1LjYgNS44LTMzLjYtNC44Uy0xIDMyNC44IDkuNiAzMTYuOGwyMC44LTE1LjZ6TTIyNCA2NGwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTYwbDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxNjBsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFMaXN0MTIgPSBmYUxpc3RPbDsKICAgIGZhTGlzdE51bWVyaWMgPSBmYUxpc3RPbDsKICAgIGZhRmlsZUNpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1YTEiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTIyLjctMzEuNS0zNi03MC4yLTM2LTExMiAwLTEwMC42IDc3LjQtMTgzLjIgMTc2LTE5MS4zbDAtMzguMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdsLTM2LjcgMzYuNyAzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6Il0KICAgIH07CiAgICBmYUN1YmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3ViZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWIyIiwgIk0yMjQuMy0yLjVjMTkuOC0xMS40IDQ0LjItMTEuNCA2NCAwTDQ2NC4yIDk5YzE5LjggMTEuNCAzMiAzMi42IDMyIDU1LjRsMCAyMDNjMCAyMi45LTEyLjIgNDQtMzIgNTUuNEwyODguMyA1MTQuNWMtMTkuOCAxMS40LTQ0LjIgMTEuNC02NCAwTDQ4LjUgNDEzYy0xOS44LTExLjQtMzItMzIuNi0zMi01NS40bDAtMjAzYzAtMjIuOSAxMi4yLTQ0IDMyLTU1LjRMMjI0LjMtMi41em0yMDcuOCAzNjBsMC0xNjYuMS0xNDMuOCA4MyAwIDE2Ni4xIDE0My44LTgzeiJdCiAgICB9OwogICAgZmFUYXBlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhcGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRkYiIsICJNNDEyLjggNDE2YzQxLjUtNDAuNyA2Ny4yLTk3LjMgNjcuMi0xNjAgMC0xMjMuNy0xMDAuMy0yMjQtMjI0LTIyNFMzMiAxMzIuMyAzMiAyNTYgMTMyLjMgNDgwIDI1NiA0ODBsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEzMS4yIDB6TTI1NiAxNjBhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6bTQ4IDk2YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il0KICAgIH07CiAgICBmYUJvbWIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9tYiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODE2M10sICJmMWUyIiwgIk00ODAtMTZjNi45IDAgMTMgNC40IDE1LjIgMTAuOWwxMy41IDQwLjQgNDAuNCAxMy41QzU1NS42IDUxIDU2MCA1Ny4xIDU2MCA2NHMtNC40IDEzLTEwLjkgMTUuMmwtNDAuNCAxMy41LTEzLjUgNDAuNEM0OTMgMTM5LjYgNDg2LjkgMTQ0IDQ4MCAxNDRzLTEzLTQuNC0xNS4yLTEwLjlsLTEzLjUtNDAuNC00MC40LTEzLjVDNDA0LjQgNzcgNDAwIDcwLjkgNDAwIDY0czQuNC0xMyAxMC45LTE1LjJsNDAuNC0xMy41IDEzLjUtNDAuNEM0NjctMTEuNiA0NzMuMS0xNiA0ODAtMTZ6TTMyMS40IDk3LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTEwLjkgMTAuOWM3LjkgMjIgMTIuMiA0NS43IDEyLjIgNzAuNSAwIDExNC45LTkzLjEgMjA4LTIwOCAyMDhTMzIgNDE4LjkgMzIgMzA0IDEyNS4xIDk2IDI0MCA5NmMyNC43IDAgNDguNSA0LjMgNzAuNSAxMi4zbDEwLjktMTAuOXpNMTQ0IDMwNGMwLTUzIDQzLTk2IDk2LTk2IDEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0Yy03OS41IDAtMTQ0IDY0LjUtMTQ0IDE0NCAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0eiJdCiAgICB9OwogICAgZmFTY2FsZVVuYmFsYW5jZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2NhbGUtdW5iYWxhbmNlZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJiYWxhbmNlLXNjYWxlLWxlZnQiXSwgImY1MTUiLCAiTTUxOS44IDYyLjRjMTYuOC01LjYgMjUuOC0yMy43IDIwLjItNDAuNVM1MTYuMy0zLjkgNDk5LjYgMS42bC0xMTMgMzcuN2MtMTMuOS0yMy41LTM5LjYtMzkuMy02OC45LTM5LjMtNDQuMiAwLTgwIDM1LjgtODAgODAgMCAzIC4yIDUuOSAuNSA4LjhMMTE1LjYgMTI5LjZjLTE2LjggNS42LTI1LjggMjMuNy0yMC4yIDQwLjVzMjMuNyAyNS44IDQwLjUgMjAuMmwxMzUuNS00NS4yYzQuNSAzLjIgOS4zIDUuOSAxNC40IDguMmwwIDMyNi43YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNjAgMCAwLTI5NC43YzIxLTkuMiAzNy4yLTI3IDQ0LjItNDlsMTI1LjktNDJ6TTQzNy4zIDI4OGw3Mi40LTEyNC4yIDcyLjQgMTI0LjItMTQ0LjkgMHptNzIuNCA5NmM2Mi45IDAgMTE1LjItMzQgMTI2LTc4LjkgMi42LTExLTEtMjIuMy02LjctMzIuMUw1MzMuOCAxMDkuOGMtNS04LjYtMTQuMi0xMy44LTI0LjEtMTMuOHMtMTkuMSA1LjMtMjQuMSAxMy44TDM5MC40IDI3My4xYy01LjcgOS44LTkuMyAyMS4xLTYuNyAzMi4xIDEwLjggNDQuOCA2My4xIDc4LjkgMTI2IDc4Ljl6TTEyNi44IDI5MS44bDcyLjQgMTI0LjItMTQ0LjkgMCA3Mi40LTEyNC4yek0uOSA0MzMuMUMxMS43IDQ3OCA2NCA1MTIgMTI2LjggNTEyczExNS4yLTM0IDEyNi03OC45YzIuNi0xMS0xLTIyLjMtNi43LTMyLjFMMTUwLjkgMjM3LjhjLTUtOC42LTE0LjItMTMuOC0yNC4xLTEzLjhzLTE5LjEgNS4zLTI0LjEgMTMuOEw3LjYgNDAxLjFjLTUuNyA5LjgtOS4zIDIxLjEtNi43IDMyLjF6Il0KICAgIH07CiAgICBmYUJhbGFuY2VTY2FsZUxlZnQgPSBmYVNjYWxlVW5iYWxhbmNlZDsKICAgIGZhU3F1YXJlQ2FyZXRMZWZ0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtY2FyZXQtbGVmdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYXJldC1zcXVhcmUtbGVmdCJdLCAiZjE5MSIsICJNMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNnpNMTI4IDI1NmMwLTYuNyAyLjgtMTMgNy43LTE3LjZsMTEyLTEwNGM3LTYuNSAxNy4yLTguMiAyNS45LTQuNFMyODggMTQyLjUgMjg4IDE1MmwwIDIwOGMwIDkuNS01LjcgMTguMi0xNC40IDIycy0xOC45IDIuMS0yNS45LTQuNGwtMTEyLTEwNGMtNC45LTQuNS03LjctMTAuOS03LjctMTcuNnoiXQogICAgfTsKICAgIGZhQ2FyZXRTcXVhcmVMZWZ0MiA9IGZhU3F1YXJlQ2FyZXRMZWZ0MjsKICAgIGZhUnVsZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVsZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgyMDddLCAiZjU0NSIsICJNMjA5LjEgNTE2LjJjLTE4LjcgMTguNy00OS4xIDE4LjctNjcuOSAwTDI4LjEgNDAzLjFjLTE4LjctMTguNy0xOC43LTQ5LjEgMC02Ny45bDE3LTE3IDczLjUgNzMuNWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTczLjUtNzMuNSAzMy45LTMzLjkgNTAuOSA1MC45YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTAuOS01MC45IDMzLjktMzMuOSA3My41IDczLjVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC03My41LTczLjUgMzMuOS0zMy45IDUwLjkgNTAuOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTUwLjktNTAuOSAzMy45LTMzLjkgNzMuNSA3My41YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNzMuNS03My41IDE3LTE3YzE4LjctMTguNyA0OS4xLTE4LjcgNjcuOSAwTDU0OC41IDEwOC45YzE4LjcgMTguNyAxOC43IDQ5LjEgMCA2Ny45TDIwOS4xIDUxNi4yeiJdCiAgICB9OwogICAgZmFJID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImkiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMDVdLCAiNDkiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw5NiAwIDAgMzIwLTk2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjU2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDAgMC0zMjAgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnoiXQogICAgfTsKICAgIGZhVm9sdW1lWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidm9sdW1lLXhtYXJrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInZvbHVtZS1tdXRlIiwgInZvbHVtZS10aW1lcyJdLCAiZjZhOSIsICJNNDggMzUybDQ4IDAgMTM0LjEgMTE5LjJjNi40IDUuNyAxNC42IDguOCAyMy4xIDguOCAxOS4yIDAgMzQuOC0xNS42IDM0LjgtMzQuOGwwLTM3OC40YzAtMTkuMi0xNS42LTM0LjgtMzQuOC0zNC44LTguNSAwLTE2LjcgMy4xLTIzLjEgOC44TDk2IDE2MCA0OCAxNjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDh6TTM2NyAxNzVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDQ3IDQ3LTQ3IDQ3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNDctNDcgNDcgNDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC00Ny00NyA0Ny00N2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC00NyA0Ny00Ny00N2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDB6Il0KICAgIH07CiAgICBmYVZvbHVtZU11dGUgPSBmYVZvbHVtZVhtYXJrOwogICAgZmFWb2x1bWVUaW1lcyA9IGZhVm9sdW1lWG1hcms7CiAgICBmYUFyY2h3YXkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJjaHdheSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTU3IiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsNDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6bTAgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwIDAtMTI4YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxMjggMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0yNzItNDQ4IDAgMCAyNzJ6Il0KICAgIH07CiAgICBmYVBlcnNvbkRpZ2dpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWRpZ2dpbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiZGlnZ2luZyJdLCAiZjg1ZSIsICJNMjA4IDQwYTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMTAuNSAxODEuM2M1LjktMTEuOSAyMC4zLTE2LjcgMzIuMi0xMC43bDI0LjYgMTIuMyAxMi4yLTIwLjRjMTguOS0zMS41IDUzLjItNTAuNSA4OS42LTUwLjUgNDYuMiAwIDg3LjcgMzAuNSAxMDAuNSA3NS40bDMyLjIgMTEyLjcgOTIuOSA0Ni40IDI1LjgtNDNjNS44LTkuNiAxNi4yLTE1LjUgMjcuNC0xNS41czIxLjcgNS45IDI3LjQgMTUuNWw5NiAxNjBjNS45IDkuOSA2LjEgMjIuMiAuNCAzMi4yUzU1NS41IDUxMiA1NDQgNTEybC0xOTIgMGMtMTEuNSAwLTIyLjItNi4yLTI3LjgtMTYuMnMtNS41LTIyLjMgLjQtMzIuMkwzNzAgMzg3LjggMjEuMyAyMTMuNWMtMTEuOS01LjktMTYuNy0yMC4zLTEwLjctMzIuMnpNOTQuMyAzMDcuNGwxMTIgNTZjMTAuOCA1LjQgMTcuNyAxNi41IDE3LjcgMjguNmwwIDg4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjguMi02MS4zLTMwLjctMzYuMyAxMDljLTUuNiAxNi44LTIzLjcgMjUuOC00MC41IDIwLjJTLTMuOSA0ODYuNiAxLjcgNDY5LjlsNDgtMTQ0YzIuOS04LjggOS41LTE1LjkgMTguMS0xOS40czE4LjMtMy4yIDI2LjYgLjl6Il0KICAgIH07CiAgICBmYURpZ2dpbmcgPSBmYVBlcnNvbkRpZ2dpbmc7CiAgICBmYUdhdWdlSGlnaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnYXVnZS1oaWdoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjI0NjEsICJ0YWNob21ldGVyLWFsdCIsICJ0YWNob21ldGVyLWFsdC1mYXN0Il0sICJmNjI1IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0yODggOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMjU2IDQxNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTE2LjItNi0zMS4xLTE2LTQyLjNsNjkuNS0xMzguOWM1LjktMTEuOSAxLjEtMjYuMy0xMC43LTMyLjJzLTI2LjMtMS4xLTMyLjIgMTAuN0wyNjEuMSAyODguMmMtMS43LS4xLTMuNC0uMi01LjEtLjItMzUuMyAwLTY0IDI4LjctNjQgNjRzMjguNyA2NCA2NCA2NHpNMTc2IDE0NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek05NiAyODhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0zNTItMzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiXQogICAgfTsKICAgIGZhVGFjaG9tZXRlckFsdCA9IGZhR2F1Z2VIaWdoOwogICAgZmFUYWNob21ldGVyQWx0RmFzdCA9IGZhR2F1Z2VIaWdoOwogICAgZmFHZW5kZXJsZXNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdlbmRlcmxlc3MiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjIyZCIsICJNMTkyIDEyOGExMjggMTI4IDAgMSAxIDAgMjU2IDEyOCAxMjggMCAxIDEgMC0yNTZ6bTAgMzIwYTE5MiAxOTIgMCAxIDAgMC0zODQgMTkyIDE5MiAwIDEgMCAwIDM4NHoiXQogICAgfTsKICAgIGZhQ2xvdWRTdW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQtc3VuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTkyNV0sICJmNmM0IiwgIk00NTMuNi0xNC44YzQuOSAyIDguNSA2LjQgOS41IDExLjZMNDgwIDgwIDU2My4yIDk2LjhjNS4yIDEuMSA5LjUgNC42IDExLjYgOS41czEuNSAxMC41LTEuNCAxNC45bC00Ni45IDcwLjcgNDYuOSA3MC43YzIuOSA0LjQgMy41IDEwIDEuNCAxNC45cy02LjQgOC41LTExLjYgOS41TDUwMSAyOTkuN2MtMTEuOS04LjctMjUuMS0xNS42LTM5LjQtMjAuNC0yLjUtMTIuNy02LjgtMjQuNy0xMi43LTM1LjcgOS41LTE0LjkgMTUuMS0zMi42IDE1LjEtNTEuNyAwLTUzLTQzLTk2LTk2LTk2LTQ3LjkgMC04Ny42IDM1LjEtOTQuOCA4MC45LTI2LjUtMjAuMy01OS41LTMyLjUtOTUuNC0zMi45bC0xNS4xLTIyLjdjLTIuOS00LjQtMy41LTEwLTEuNC0xNC45czYuNC04LjUgMTEuNi05LjVMMjU2IDgwIDI3Mi44LTMuMmMxLjEtNS4yIDQuNi05LjUgOS41LTExLjZzMTAuNS0xLjUgMTQuOSAxLjRMMzY4IDMzLjYgNDM4LjctMTMuM2M0LjQtMi45IDEwLTMuNSAxNC45LTEuNHpNNDE2IDE5MmMwIDMuOC0uNCA3LjUtMS4zIDExLjEtMjEuNy0xNy00OS0yNy4xLTc4LjctMjcuMS00LjYgMC05LjEgLjItMTMuNSAuNyA2LjQtMTkgMjQuNC0zMi43IDQ1LjUtMzIuNyAyNi41IDAgNDggMjEuNSA0OCA0OHpNOTYgNTEyYy01MyAwLTk2LTQzLTk2LTk2IDAtNDIuNSAyNy42LTc4LjYgNjUuOS05MS4yLTEuMy02LjctMS45LTEzLjctMS45LTIwLjggMC02MS45IDUwLjEtMTEyIDExMi0xMTIgNDMuMSAwIDgwLjUgMjQuMyA5OS4yIDYwIDE0LjctMTcuMSAzNi41LTI4IDYwLjgtMjggNDQuMiAwIDgwIDM1LjggODAgODAgMCA1LjUtLjYgMTAuOC0xLjYgMTYgLjUgMCAxLjEgMCAxLjYgMCA1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5Nkw5NiA1MTJ6Il0KICAgIH07CiAgICBmYUFycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs4NTk0XSwgImYwNjEiLCAiTTUwMi42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w0MDIuNyAyMjQgMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM3MC43IDAtMTA1LjQgMTA1LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MHoiXQogICAgfTsKICAgIGZhSGFuZHNoYWtlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kc2hha2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjkzMDksIDYyNjYyLCAiaGFuZHNoYWtlLWFsdCIsICJoYW5kc2hha2Utc2ltcGxlIl0sICJmMmI1IiwgIk0yNjguOSA4NS4yTDE1Mi4zIDIxNC44Yy00LjYgNS4xLTQuNCAxMyAuNSAxNy45IDMwLjUgMzAuNSA4MCAzMC41IDExMC41IDBsMzEuOC0zMS44YzQuMi00LjIgOS41LTYuNSAxNC45LTYuOSA2LjgtLjYgMTMuOCAxLjcgMTkgNi45TDUwNS42IDM3NiA1NzYgMzIwIDU3NiAzMiA0NjQgOTYgNDQwLjIgODAuMUM0MjQuNCA2OS42IDQwNS45IDY0IDM4Ni45IDY0bC03MC40IDBjLTEuMSAwLTIuMyAwLTMuNCAuMS0xNi45IC45LTMyLjggOC41LTQ0LjIgMjEuMXpNMTE2LjYgMTgyLjdMMjIzLjQgNjQgMTgzLjggNjRjLTI1LjUgMC00OS45IDEwLjEtNjcuOSAyOC4xTDExMiA5NiAwIDMyIDAgMzIwIDE1Ni40IDQ1MC4zYzIzIDE5LjIgNTIgMjkuNyA4MS45IDI5LjdsMTUuNyAwLTctN2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQxIDQxIDkgMGMxOS4xIDAgMzcuOC00LjMgNTQuOC0xMi4zTDM1OSA0NDFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzMiAzMiAxNy41LTE3LjVjOC45LTguOSAxMS41LTIxLjggNy42LTMzLjFsLTEzNy45LTEzNi44LTE0LjkgMTQuOWMtNDkuMyA0OS4zLTEyOS4xIDQ5LjMtMTc4LjQgMC0yMy0yMy0yMy45LTU5LjktMi4yLTg0eiJdCiAgICB9OwogICAgZmFIYW5kc2hha2VBbHQyID0gZmFIYW5kc2hha2UyOwogICAgZmFIYW5kc2hha2VTaW1wbGUyID0gZmFIYW5kc2hha2UyOwogICAgZmFQZXJzb25Ta2lpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXNraWluZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzk5NzUsICJza2lpbmciXSwgImY3YzkiLCAiTTQxNiA1NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTIuNyAzMDAuOWM2LjEtMTEuOCAyMC42LTE2LjMgMzIuNC0xMC4ybDE5Ny44IDEwMi43IDYyLjMtODcuMi04Mi05Mi4yYy0xMS0xMi40LTE2LjItMjcuNS0xNi4yLTQyLjRsMTExLjYgNTMuNCA0Mi45IDQ4LjJjMTQuOSAxNi43IDE2LjIgNDEuNiAzLjIgNTkuOGwtNjQuNCA5MC4yIDEyOC4zIDY2LjZjMTMuNiA3LjEgMjkuOCA3LjIgNDMuNiAuM2wxNS4yLTcuNmMxMS45LTUuOSAyNi4zLTEuMSAzMi4yIDEwLjdzMS4xIDI2LjMtMTAuNyAzMi4ybC0xNS4yIDcuNmMtMjcuNSAxMy43LTU5LjkgMTMuNS04Ny4yLS43TDEyLjkgMzMzLjNDMS4yIDMyNy4yLTMuNCAzMTIuNyAyLjcgMzAwLjl6TTEwMyA0OS42bDE4IDguNyA4LjctMTcuNGM0LTcuOSAxMy42LTExLjEgMjEuNS03LjJzMTEuMSAxMy42IDcuMiAyMS41bC04LjUgMTcgODQuOCA0MSAuNC0uMiA3Ni4xLTMzLjhjMzEuMy0xMy45IDY3LjktLjcgODMuMiAyOS45bDI4LjkgNTcuOCA2OC43IDI3LjVjMTYuNCA2LjYgMjQuNCAyNS4yIDE3LjggNDEuNnMtMjUuMiAyNC40LTQxLjYgMTcuOEwzOTMuOCAyMjRjLTEwLjktNC40LTE5LjgtMTIuNi0yNS4xLTIzLjFsLTExLjUtMjMuMWMtMTYuNCA5LjQtMjUuOSAxNC44LTI4LjUgMTYuM2wtNy42LTMuNy0xODUuNi04OS42LTkuMiAxOC4zYy00IDcuOS0xMy42IDExLjEtMjEuNSA3LjJzLTExLjEtMTMuNi03LjItMjEuNWw5LTE3LjktMTcuNi04LjVDODEuMSA3NC42IDc3LjggNjUgODEuNiA1N1M5NSA0NS43IDEwMyA0OS42eiJdCiAgICB9OwogICAgZmFTa2lpbmcgPSBmYVBlcnNvblNraWluZzsKICAgIGZhQnJpZGdlV2F0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJpZGdlLXdhdGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0Y2UiLCAiTTY0IDY0bDUxMiAwIDAgMTEyYy0zNy42IDkuNC02NCA0My4yLTY0IDgybDAgNzYuNGMtMjEtOS43LTQzLjUtMTQuNS02Ni0xNC40LTEwIC4xLTIwLjEgMS4xLTMwIDMuMWwwLTM1LjFjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZsMCAzMi43Yy01LjMtLjUtMTAuNy0uOC0xNi0uNy0yNy43IC4yLTU1LjQgNy44LTgwIDIzbDAtODVjMC0zOC44LTI2LjQtNzIuNi02NC04Mkw2NCA2NHpNNDAzLjQgNDQ0LjFDMzc5LjEgNDYyLjMgMzUxLjEgNDgwIDMyMCA0ODBzLTU5LjEtMTcuNy04My40LTM1LjljLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAwLTIzLjggMTcuOS01NC4xIDM1LjUtODguMSAzNS4zLTIwLjQtLjEtNDAuNy02LjctNTkuOC0yMS4xLTEwLjYtOC0xMi43LTIzLTQuNy0zMy42czIzLTEyLjcgMzMuNi00LjdjMTEuMyA4LjUgMjEuNiAxMS40IDMxLjIgMTEuNSAxNy42IC4xIDM3LjMtOS40IDU4LjktMjUuNyAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMjQgMTguMSA0MC43IDI2LjMgNTQuNSAyNi4zczMwLjUtOC4yIDU0LjUtMjYuM2MzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTYuOSAxMi43IDMyLjkgMjEuNSA0Ny44IDI0LjYgMTMuNyAyLjggMjcuNCAuOSA0Mi4zLTEwLjMgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOSAyNS42LTQuNyAzMy42Yy0yNi40IDE5LjktNTQuMiAyNC40LTgwLjcgMTkuMS0yNS4zLTUuMS00OC4xLTE4LjktNjcuMi0zMy4zLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAweiJdCiAgICB9OwogICAgZmFCdWlsZGluZ05nbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy1uZ28iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRkNyIsICJNMTI4IDBDOTIuNyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDggMCAwLTExMmMwLTM1LjMgMjguNy02NCA2NC02NGwyMDggMCAwLTI3MmMwLTM1LjMtMjguNy02NC02NC02NEwxMjggMHptMzIgMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTMwNCA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xNjAgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTE0NC0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek01MjAgMzgwYy0yNC4zIDAtNDQgMTkuNy00NCA0NGwwIDgwYzAgMjQuMyAxOS43IDQ0IDQ0IDQ0bDE2IDBjMjQuMyAwIDQ0LTE5LjcgNDQtNDRsMC04MGMwLTI0LjMtMTkuNy00NC00NC00NGwtMTYgMHptLTQgNDRjMC0yLjIgMS44LTQgNC00bDE2IDBjMi4yIDAgNCAxLjggNCA0bDAgODBjMCAyLjItMS44IDQtNCA0bC0xNiAwYy0yLjIgMC00LTEuOC00LTRsMC04MHptLTE2OCAwbDAgODBjMCAyNC4zIDE5LjcgNDQgNDQgNDRsMTYgMGMyNC4zIDAgNDQtMTkuNyA0NC00NGwwLTI0YzAtMTEtOS0yMC0yMC0yMGwtOCAwYy0xMSAwLTIwIDktMjAgMjAgMCA2LjUgMy4xIDEyLjQgOCAxNmwwIDhjMCAyLjItMS44IDQtNCA0bC0xNiAwYy0yLjIgMC00LTEuOC00LTRsMC04MGMwLTIuMiAxLjgtNCA0LTRsMjAuNCAwYzEuOSA5LjEgOS45IDE2IDE5LjYgMTYgMTEgMCAyMC05IDIwLTIwIDAtMTkuOS0xNi4xLTM2LTM2LTM2bC0yNCAwYy0yNC4zIDAtNDQgMTkuNy00NCA0NHptLTkwLjEtMzIuOWMtNC4xLTguMy0xMy41LTEyLjctMjIuNS0xMC41UzIyMCAzOTAuNyAyMjAgNDAwbDAgMTI4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNDMuMyAyNi4xIDUyLjJjNC4xIDguMyAxMy41IDEyLjcgMjIuNSAxMC41UzMyNCA1MzcuMyAzMjQgNTI4bDAtMTI4YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMGwwIDQzLjMtMjYuMS01Mi4yeiJdCiAgICB9OwogICAgZmFJZ2xvbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpZ2xvbyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmN2FlIiwgIk0zMjAgMzMuOGwwIDEyNi4yLTI3MS41IDBjNTEuNy03Ny4yIDEzOS42LTEyOCAyMzkuNS0xMjggMTAuOCAwIDIxLjUgLjYgMzIgMS44ek0zNjggMTYwbDAtMTE2LjdjNjYgMTkgMTIyLjIgNjEgMTU5LjUgMTE2LjdMMzY4IDE2MHpNMjIuNiAyMDhsNzMuNCAwIDAgMTEyLTk2IDBjMC0zOS43IDgtNzcuNiAyMi42LTExMnpNMTc2IDMyMGwtMzIgMCAwLTExMiAyODggMCAwIDExMi0zMiAwIDAgNDggMTc2IDAgMCA2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNjQgMTc2IDAgMC00OHptMzA0IDBsMC0xMTIgNzMuNCAwQzU2OCAyNDIuNCA1NzYgMjgwLjMgNTc2IDMyMGwtOTYgMHpNMjg4IDI4OGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA4MCAxMjggMCAwLTgwYzAtMzUuMy0yOC43LTY0LTY0LTY0eiJdCiAgICB9OwogICAgZmFDaXJjbGVEb2xsYXJUb1Nsb3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWRvbGxhci10by1zbG90IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImRvbmF0ZSJdLCAiZjRiOSIsICJNOTYgMjI0YTE5MiAxOTIgMCAxIDEgMzg0IDAgMTkyIDE5MiAwIDEgMSAtMzg0IDB6bTE3Ni05MmwwIDRjLTI4LjggLjMtNTIgMjMuNy01MiA1Mi41IDAgMjUuNyAxOC41IDQ3LjYgNDMuOSA1MS44bDQxLjcgN2M2IDEgMTAuNCA2LjIgMTAuNCAxMi4zIDAgNi45LTUuNiAxMi41LTEyLjUgMTIuNUwyNDggMjcyYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGwyNCAwIDAgNGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTQuN2MyNS00LjEgNDQtMjUuNyA0NC01MS44IDAtMjUuNy0xOC41LTQ3LjYtNDMuOS01MS44bC00MS43LTdjLTYtMS0xMC40LTYuMi0xMC40LTEyLjMgMC02LjkgNS42LTEyLjUgMTIuNS0xMi41bDQ3LjUgMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTggMCAwLTRjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwek00OCAzNDRsMCAxMDRjMCA4LjggNy4yIDE2IDE2IDE2bDQ0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAzNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhRG9uYXRlID0gZmFDaXJjbGVEb2xsYXJUb1Nsb3Q7CiAgICBmYVkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAieSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyMV0sICI1OSIsICJNNTggNDUuNEM0Ny44IDMxIDI3LjggMjcuNyAxMy40IDM4Uy00LjMgNjguMiA2IDgyLjZMMTYwIDI5OC4zIDE2MCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE0OS43IDE1NC0yMTUuN2MxMC4zLTE0LjQgNi45LTM0LjQtNy40LTQ0LjZTMzM2LjIgMzEgMzI2IDQ1LjRMMTkyIDIzMi45IDU4IDQ1LjR6Il0KICAgIH07CiAgICBmYUZhY2VTbWlsZVdpbmsyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Utc21pbGUtd2luayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUyMSwgInNtaWxlLXdpbmsiXSwgImY0ZGEiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjUuNCAzMjEuOWMyMC40IDI4IDUzLjQgNDYuMSA5MC42IDQ2LjFzNzAuMi0xOC4xIDkwLjYtNDYuMWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjNzMTMuMSAyMi44IDUuMyAzMy41QzM1Ni4zIDM5MCAzMDkuMiA0MTYgMjU2IDQxNnMtMTAwLjMtMjYtMTI5LjQtNjUuOWMtNy44LTEwLjctNS40LTI1LjcgNS4zLTMzLjVzMjUuNy01LjQgMzMuNSA1LjN6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTY0IDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwYzAtMzMuMSAyNi45LTYwIDYwLTYwbDE2IDBjMzMuMSAwIDYwIDI2LjkgNjAgNjAgMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwLTktMjAtMjAtMjBsLTE2IDBjLTExIDAtMjAgOS0yMCAyMHoiXQogICAgfTsKICAgIGZhU21pbGVXaW5rMiA9IGZhRmFjZVNtaWxlV2luazI7CiAgICBmYURpY2VGb3VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpY2UtZm91ciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4NTldLCAiZjUyNCIsICJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTE2MCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0xMjggMzg0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMzUyIDE2MGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zMjAgMzg0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5TcXVpbnRUZWFyczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXNxdWludC10ZWFycyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyOTMxNSwgImdyaW4tc3F1aW50LXRlYXJzIl0sICJmNTg2IiwgIk01NjAgMzUuNGMwIDI1LjYtMTguOCA0Ny4zLTQ0LjEgNTAuOUw0NjkuMSA5M2MtMTAuNiAxLjUtMTkuNi03LjUtMTguMS0xOC4xbDYuNy00Ni43QzQ2MS4zIDIuOCA0ODMtMTYgNTA4LjYtMTYgNTM3LTE2IDU2MCA3IDU2MCAzNS40ek00MDMuNSA2OC4xYy02IDQyLjIgMzAuMiA3OC40IDcyLjQgNzIuNGwzNy44LTUuNEM1NjUuNyAyMzIgNTUwLjggMzU1LjMgNDY5IDQzN3MtMjA1IDk2LjYtMzAxLjkgNDQuN2w1LjQtMzcuOGM2LTQyLjItMzAuMi03OC40LTcyLjQtNzIuNGwtMzcuOCA1LjRDMTAuMyAyODAgMjUuMiAxNTYuNyAxMDcgNzVTMzEyLTIxLjcgNDA4LjkgMzAuM2wtNS40IDM3Ljh6TTQxNy44IDIwMWMtMTkuMSAzNi40LTQ1LjYgNzIuNy03OC45IDEwNnMtNjkuNiA1OS44LTEwNiA3OC45Yy0xMS4xIDUuOC0xMi40IDIxLjQtMS4xIDI2LjYgNTkuMiAyNy41IDEzMS44IDE2LjggMTgwLjYtMzJzNTkuNS0xMjEuNCAzMi0xODAuNmMtNS4zLTExLjMtMjAuOC0xMC0yNi42IDEuMXpNMTEzLjkgMjcwLjZjMS43IDggOSAxMy40IDE3LjEgMTIuN2w0My4xLTMuOS0zLjkgNDMuMWMtLjcgOC4xIDQuNyAxNS41IDEyLjcgMTcuMXMxNS45LTIuOSAxOC40LTEwLjZsMjgtODQuNmMxLjktNS43IC40LTEyLjEtMy45LTE2LjNzLTEwLjYtNS44LTE2LjMtMy45bC04NC42IDI4Yy03LjcgMi42LTEyLjMgMTAuNS0xMC42IDE4LjV6TTMxNS4yIDk5LjFjLjctOC4xLTQuNy0xNS41LTEyLjctMTcuMXMtMTUuOSAyLjktMTguNSAxMC42bC0yOCA4NC42Yy0xLjkgNS43LS40IDEyLjEgMy45IDE2LjNzMTAuNiA1LjggMTYuMyAzLjlsODQuNi0yOGM3LjctMi42IDEyLjMtMTAuNSAxMC42LTE4LjRzLTktMTMuNC0xNy4xLTEyLjdsLTQzLjEgMy45IDMuOS00My4xek02MC4xIDQyNS43bDQ2LjctNi43YzEwLjYtMS41IDE5LjYgNy41IDE4LjEgMTguMWwtNi43IDQ2LjdDMTE0LjcgNTA5LjIgOTMgNTI4IDY3LjQgNTI4IDM5IDUyOCAxNiA1MDUgMTYgNDc2LjYgMTYgNDUxIDM0LjggNDI5LjMgNjAuMSA0MjUuN3oiXQogICAgfTsKICAgIGZhR3JpblNxdWludFRlYXJzMiA9IGZhRmFjZUdyaW5TcXVpbnRUZWFyczI7CiAgICBmYUZpbGVBdWRpbzIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1hdWRpbyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM3IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXptNTMuOCAxODUuMmMtOS4xLTYuMy0yMS41LTQuMS0yNy44IDVzLTQuMSAyMS41IDUgMjcuOGMyMy45IDE2LjcgMzkuNCA0NC4zIDM5LjQgNzUuNXMtMTUuNiA1OC45LTM5LjQgNzUuNWMtOS4xIDYuMy0xMS4zIDE4LjgtNSAyNy44czE4LjggMTEuMyAyNy44IDVjMzQuMS0yMy44IDU2LjYtNjMuNSA1Ni42LTEwOC4zUzI5NiAyNjcuNSAyNjEuOCAyNDMuN3pNODAgMzEyYy04LjggMC0xNiA3LjItMTYgMTZsMCA0OGMwIDguOCA3LjIgMTYgMTYgMTZsMjQgMCAyNy4yIDM0YzMgMy44IDcuNiA2IDEyLjUgNmwuMyAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTEyOGMwLTguOC03LjItMTYtMTYtMTZsLS4zIDBjLTQuOSAwLTkuNSAyLjItMTIuNSA2bC0yNy4yIDM0LTI0IDB6bTEyOCA3Mi4yYzAgMTAuNyAxMC41IDE4LjIgMTguOSAxMS42IDEyLjktMTAuMyAyMS4xLTI2LjEgMjEuMS00My44cy04LjItMzMuNS0yMS4xLTQzLjhjLTguNC02LjctMTguOSAuOS0xOC45IDExLjZsMCA2NC41eiJdCiAgICB9OwogICAgZmFBcnJvd3NEb3duVG9MaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy1kb3duLXRvLWxpbmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRiOCIsICJNMjE0LjYgMzEwLjZsLTY0IDY0Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtNjQtNjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMjc0LjcgOTYgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDI0Mi43IDkuNC05LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3ptMjU2IDBsLTY0IDY0Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtNjQtNjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsOS40IDkuNCAwLTI0Mi43YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAyNDIuNyA5LjQtOS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6TTMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1MTJ6Il0KICAgIH07CiAgICBmYUcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEwM10sICI0NyIsICJNMjI0IDk2QzEzNS42IDk2IDY0IDE2Ny42IDY0IDI1NnM3MS42IDE2MCAxNjAgMTYwYzc3LjQgMCAxNDItNTUgMTU2LjgtMTI4TDI1NiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTQ0IDBjMjUuOCAwIDQ5LjYgMjEuNCA0Ny4yIDUwLjYtOS41IDExNS0xMDUuOCAyMDUuNC0yMjMuMiAyMDUuNC0xMjMuNyAwLTIyNC0xMDAuMy0yMjQtMjI0UzEwMC4zIDMyIDIyNCAzMmM1Ny40IDAgMTA5LjcgMjEuNiAxNDkuMyA1NyAxMy4yIDExLjggMTQuMyAzMiAyLjUgNDUuMnMtMzIgMTQuMy00NS4yIDIuNUMzMDIuMyAxMTEuNCAyNjUgOTYgMjI0IDk2eiJdCiAgICB9OwogICAgZmFWaWhhcmEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmloYXJhIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2YTciLCAiTTI3My42LTMuMmM4LjUtNi40IDIwLjMtNi40IDI4LjggMEw0NDMuMiAxMDIuNGM4LjMgNi4yIDE4LjQgOS42IDI4LjggOS42IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNCAwIDAgNDggNTguNyA2NCAxMy4zIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMCAwIDQ4IDI0LjQgMzIgMTUuNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00MCAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0xMjggMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMTI4IDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTQwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjIuMSAwIDE3LjktMzIgMC00OC04IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTMuMyAwIDU4LjctNjQgMC00OC0yNCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzEwLjQgMCAyMC41LTMuNCAyOC44LTkuNkwyNzMuNi0zLjJ6TTEyOCAzNjhsMzIwIDAgMC00OC0zMjAgMCAwIDQ4ek0zODQgMTYwbC0xOTIgMCAwIDQ4IDE5MiAwIDAtNDh6Il0KICAgIH07CiAgICBmYUZsYWdDaGVja2VyZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmxhZy1jaGVja2VyZWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5MzddLCAiZjExZSIsICJNMzIgMEM0OS43IDAgNjQgMTQuMyA2NCAzMmwwIDE2IDY5LTE3LjJjMzguMS05LjUgNzguMy01LjEgMTEzLjUgMTIuNSA0Ni4zIDIzLjIgMTAwLjggMjMuMiAxNDcuMSAwbDkuNi00LjhDNDIzLjggMjguMSA0NDggNDMuMSA0NDggNjYuMWwwIDI3OS43YzAgMTMuMy04LjMgMjUuMy0yMC44IDMwbC0zNC43IDEzYy00Ni4yIDE3LjMtOTcuNiAxNC42LTE0MS43LTcuNC0zNy45LTE5LTgxLjQtMjMuNy0xMjIuNS0xMy40TDY0IDM4NCA2NCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0OTcuNyAwIDQ4MEwwIDMyQzAgMTQuMyAxNC4zIDAgMzIgMHpNNjQgMTg3LjFsNjQtMTMuOSAwIDY1LjUtNjQgMTMuOSAwIDY1LjUgNDguOC0xMi4yYzUuMS0xLjMgMTAuMS0yLjQgMTUuMi0zLjNsMC02My45IDM4LjktOC40YzguMy0xLjggMTYuNy0yLjUgMjUuMS0yLjFsMC02NGMxMy42IC40IDI3LjIgMi42IDQwLjQgNi40bDIzLjYgNi45IDAgNjYuNy00MS43LTEyLjNjLTcuMy0yLjEtMTQuOC0zLjQtMjIuMy0zLjhsMCA3MS40YzIxLjggMS45IDQzLjMgNi43IDY0IDE0LjRsMC02OS44IDIyLjcgNi43YzEzLjUgNCAyNy4zIDYuNCA0MS4zIDcuNGwwLTY0LjJjLTcuOC0uOC0xNS42LTIuMy0yMy4yLTQuNWwtNDAuOC0xMiAwLTYyYy0xMy0zLjgtMjUuOC04LjgtMzguMi0xNS04LjItNC4xLTE2LjktNy0yNS44LTguOGwwIDcyLjRjLTEzLS40LTI2IC44LTM4LjcgMy42bC0yNS4zIDUuNSAwLTc1LjItNjQgMTYgMCA3My4xek0zMjAgMzM1LjdjMTYuOCAxLjUgMzMuOS0uNyA1MC02LjhsMTQtNS4yIDAtNzEuNy03LjkgMS44Yy0xOC40IDQuMy0zNy4zIDUuNy01Ni4xIDQuNWwwIDc3LjR6bTY0LTE0OS40bDAtNzAuOGMtMjAuOSA2LjEtNDIuNCA5LjEtNjQgOS4xbDAgNjkuNGMxMy45IDEuNCAyOCAuNSA0MS43LTIuNmwyMi4zLTUuMnoiXQogICAgfTsKICAgIGZhR2F1Z2VTaW1wbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2F1Z2Utc2ltcGxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImdhdWdlLXNpbXBsZS1tZWQiLCAidGFjaG9tZXRlci1hdmVyYWdlIl0sICJmNjI5IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zMjAgOTZjMC0yNi45LTE2LjUtNDkuOS00MC01OS4zTDI4MCAxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNzIuN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6Il0KICAgIH07CiAgICBmYUdhdWdlU2ltcGxlTWVkID0gZmFHYXVnZVNpbXBsZTsKICAgIGZhVGFjaG9tZXRlckF2ZXJhZ2UgPSBmYUdhdWdlU2ltcGxlOwogICAgZmFSaWdodExlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmlnaHQtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJleGNoYW5nZS1hbHQiXSwgImYzNjIiLCAiTTUwMi42IDE1MC42bC05NiA5NmMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTMzUyIDIzNi45IDM1MiAyMjRsMC02NC0zMjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyA5NiAzMiA5NmwzMjAgMCAwLTY0YzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjN6bS0zOTcuMyAzNTJsLTk2LTk2Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w5Ni05NmM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOVMxNjAgMjc1LjEgMTYwIDI4OGwwIDY0IDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMjAgMCAwIDY0YzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45eiJdCiAgICB9OwogICAgZmFFeGNoYW5nZUFsdCA9IGZhUmlnaHRMZWZ0OwogICAgZmFQaWxscyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwaWxscyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDg0IiwgIk02NCAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDExMi05NiAwIDAtMTEyek0xNzYgMzY4YzAtNDguNyAxOC4xLTkzLjIgNDgtMTI3bDAtMTI5QzIyNCA1MC4xIDE3My45IDAgMTEyIDBTMCA1MC4xIDAgMTEyTDAgNDAwYzAgNjEuOSA1MC4xIDExMiAxMTIgMTEyIDM3LjMgMCA3MC4zLTE4LjIgOTAuNy00Ni4zLTE3LTI4LjYtMjYuNy02Mi0yNi43LTk3Ljd6bTY0LjcgNjcuNGM0LjYgOC43IDE2LjMgOS43IDIzLjMgMi43TDQzOC4xIDI2NGM3LTcgNi0xOC43LTIuNy0yMy4zLTIwLjEtMTAuNy00My0xNi43LTY3LjQtMTYuNy03OS41IDAtMTQ0IDY0LjUtMTQ0IDE0NCAwIDI0LjMgNiA0Ny4zIDE2LjcgNjcuNHpNMjk3LjkgNDcyYy03IDctNiAxOC43IDIuNyAyMy4zIDIwLjEgMTAuNyA0MyAxNi43IDY3LjQgMTYuNyA3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NCAwLTI0LjMtNi00Ny4zLTE2LjctNjcuNC00LjYtOC43LTE2LjMtOS43LTIzLjMtMi43TDI5Ny45IDQ3MnoiXQogICAgfTsKICAgIGZhRXhwbG9zaW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImV4cGxvc2lvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGU5IiwgIk0yNTYtMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0em0wIDE2MGMxMi40IDAgMjIuNyA5LjQgMjMuOSAyMS43TDI5My40IDI5MS42IDQ2Ny42IDExLjNjNi43LTEwLjcgMjAuNS0xNC41IDMxLjctOC41czE1LjggMTkuNSAxMC42IDMxTDM3Mi44IDMzOC42YzIuMiAyLjMgNC4zIDQuNyA2LjMgNy4xbDk3LjItNTQuN2MxMC41LTUuOSAyMy42LTMuMSAzMC45IDYuNHM2LjMgMjMtMi4yIDMxLjVsLTg3IDg3LTcxLjQgMGMtMTMuMi0zNy4zLTQ4LjctNjQtOTAuNS02NHMtNzcuNCAyNi43LTkwLjUgNjRsLTc5LjYgMC03NS41LTUyLjNDLjYgMzU3LTIuOCAzNDQuMSAyLjQgMzMzLjVzMTcuNC0xNS45IDI4LjctMTIuNGw5Ny4yIDMwLjRjMy0zLjkgNi4xLTcuNiA5LjQtMTEuM0w3NS40IDIzNi4zYy02LjEtMTAuMS0zLjktMjMuMSA1LjEtMzAuN3MyMi4yLTcuNSAzMS4xIC4xTDIxNCAyOTMuNmMxLjUtLjQgMy0uOCA0LjUtMS4xbDEzLjYtMTQyLjdjMS4yLTEyLjMgMTEuNS0yMS43IDIzLjktMjEuN3pNMzIgNDY0bDQ1NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDB6Il0KICAgIH07CiAgICBmYUFycm93c0Rvd25Ub1Blb3BsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtZG93bi10by1wZW9wbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRiOSIsICJNMTEzIDE1M2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMTUgODlDNS43IDc5LjYgNS43IDY0LjQgMTUgNTVTMzkuNiA0NS43IDQ5IDU1TDcyIDc4LjEgNzItOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgODYuMSAyMy0yM2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTY0IDY0em0zMjAgMGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMzM1IDg5Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMjMgMjMgMC04Ni4xYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA4Ni4xIDIzLTIzYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNjQgNjR6TTI1NiAxOTJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6bTAgMTYwYzUzIDAgOTYgNDMgOTYgOTZsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjMC01MyA0My05NiA5Ni05NnpNMzIgMjg4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTM1MiAwYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTgwIDM2OGMxNS4zIDAgMjkuNiA0LjMgNDEuOCAxMS44LTYuMyAxNi4yLTkuOCAzMy44LTkuOCA1Mi4ybDAgNDhjMCAxMS40IDIuNCAyMi4yIDYuNyAzMmwtODcuOCAwQzEzLjggNTEyIDAgNDk4LjIgMCA0ODEuMUwwIDQ0OGMwLTQ0LjIgMzUuOC04MCA4MC04MHpNMzkzLjMgNTEyYzQuMy05LjggNi43LTIwLjYgNi43LTMybDAtNDhjMC0xOC40LTMuNS0zNi05LjgtNTIuMiAxMi4yLTcuNSAyNi41LTExLjggNDEuOC0xMS44IDQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMzMuMWMwIDE3LTEzLjggMzAuOS0zMC45IDMwLjlsLTg3LjggMHoiXQogICAgfTsKICAgIGZhVXNlcnNWaWV3ZmluZGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXJzLXZpZXdmaW5kZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU5NSIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRsMCA3MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNzJjMC04LjggNy4yLTE2IDE2LTE2bDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMTQ5LjMgMCAxMzYgMEw2NCAwek00NDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MmMwLTM1LjMtMjguNy02NC02NC02NEw0NDAgMHpNNDggMzc2YzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMzYyLjcgMCAzNzZsMCA3MmMwIDM1LjMgMjguNyA2NCA2NCA2NGw3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC03MiAwYy04LjggMC0xNi03LjItMTYtMTZsMC03MnptNTI4IDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA3MmMwIDguOC03LjIgMTYtMTYgMTZsLTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNzIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTcyek0yODggMjE2YTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyem0wIDQwYy01MyAwLTk2IDQzLTk2IDk2bDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yNGMwLTUzLTQzLTk2LTk2LTk2em0xOTItNjRhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHpNMTY4IDI3Mi4zYy00OS4zIDQuMS04OCA0NS4zLTg4IDk1LjdsMCAxMC43YzAgMTEuOCA5LjYgMjEuMyAyMS4zIDIxLjNsNDYuOCAwYy0yLjctNy41LTQuMS0xNS42LTQuMS0yNGwwLTI0YzAtMjkuNSA4LjgtNTYuOSAyNC03OS43ek00MjcuOSA0MDBsNDYuOCAwYzExLjggMCAyMS4zLTkuNiAyMS4zLTIxLjNsMC0xMC43YzAtNTAuMy0zOC43LTkxLjYtODgtOTUuNyAxNS4yIDIyLjggMjQgNTAuMiAyNCA3OS43bDAgMjRjMCA4LjQtMS40IDE2LjUtNC4xIDI0ek0xOTIgMTkyYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il0KICAgIH07CiAgICBmYUNhck9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhci1vbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNGRkIiwgIk0yNDgtOGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMyMDAtMjEuMyAyMDAtOGwwIDY0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC02NHpNMTQ1LjMgMjA4bDE1Ny41IDBjNi43IDAgMTIuNiA0LjEgMTUgMTAuNGwyNi4xIDY5LjYtMjM5LjYgMCAyNi4xLTY5LjZjMi4zLTYuMiA4LjMtMTAuNCAxNS0xMC40ek0zNCAyOTIuOGwtMS4zIDMuNEMxMy4yIDMwNy4xIDAgMzI4IDAgMzUyTDAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMiAyODggMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0yNC0xMy4yLTQ0LjktMzIuOC01NS45bC0xLjMtMy40LTM2LjMtOTYuOWMtMTEuNy0zMS4yLTQxLjYtNTEuOS03NC45LTUxLjlsLTE1Ny41IDBjLTMzLjMgMC02My4yIDIwLjctNzQuOSA1MS45TDM0IDI5Mi44ek05NiAzMzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0yMjQgMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNNyA3Qy0yLjMgMTYuNC0yLjMgMzEuNiA3IDQxTDU1IDg5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwUzk4LjMgNjQuNCA4OSA1NUw0MSA3QzMxLjYtMi4zIDE2LjQtMi4zIDcgN3pNNDA3IDdMMzU5IDU1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNDgtNDhjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlTNDE2LjQtMi4zIDQwNyA3eiJdCiAgICB9OwogICAgZmFTbGVpZ2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2xlaWdoIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY3Y2MiLCAiTTY0IDMyQzQ2LjMgMzIgMzIgNDYuMyAzMiA2NFM0Ni4zIDk2IDY0IDk2bDAgMTYwYzAgNDEuOCAyNi43IDc3LjQgNjQgOTAuNWwwIDY5LjUtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1MDQgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLThjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC04MCAwIDAtNjRjNTMgMCA5Ni00MyA5Ni05NmwwLTk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyYzAgMzUuMy0yOC43IDY0LTY0IDY0bC00OC45IDBjLTQ4LjUgMC05Mi44LTI3LjQtMTE0LjUtNzAuOGwtMjUuMi01MC41QzIzNy43IDU5LjQgMTkzLjQgMzIgMTQ0LjkgMzJMNjQgMzJ6TTQzMiA0MTZsLTI1NiAwIDAtNjQgMjU2IDAgMCA2NHoiXQogICAgfTsKICAgIGZhRHVtYmJlbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHVtYmJlbGwiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQ0YiIsICJNOTYgMTEyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCAxMTIgMjU2IDAgMC0xMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDE2IDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDQ4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNiAwIDAgMTZjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhsMC0xMTItMjU2IDAgMCAxMTJjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhsMC0xNi0xNiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDAtNDhjMC0yNi41IDIxLjUtNDggNDgtNDhsMTYgMCAwLTE2eiJdCiAgICB9OwogICAgZmFCYWJ5Q2FycmlhZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFieS1jYXJyaWFnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjYXJyaWFnZS1iYWJ5Il0sICJmNzdkIiwgIk02NCAyMDhsMCA4MGMwIDUzIDQzIDk2IDk2IDk2bDE5MiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0xMTIgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA1Ni0zMzYgMHptLjItNDhsMjIzLjggMCAwLTEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMkwyMzIgMEMxNDEuOSAwIDY4LjQgNzAuOSA2NC4yIDE2MHpNMTYwIDQ2NGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwem0yODggMGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAweiJdCiAgICB9OwogICAgZmFDYXJyaWFnZUJhYnkgPSBmYUJhYnlDYXJyaWFnZTsKICAgIGZhS2l3aUJpcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAia2l3aS1iaXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1MzUiLCAiTTI5MS4yIDM4OC40YzMxLjItMTguOCA2NC43LTM2LjQgMTAxLjEtMzYuNGw1NS43IDBjNC42IDAgOS4xLS4yIDEzLjYtLjdsODUuMyAxMjEuOWM0IDUuNyAxMS4zIDguMiAxNy45IDYuMVM1NzYgNDcxIDU3NiA0NjRsMC0yNDBjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhsLTU1LjcgMEMzNTUuOSA5NiAzMjIuNCA3OC40IDI5MS4yIDU5LjYgMjYyLjMgNDIuMSAyMjguMyAzMiAxOTIgMzIgODYgMzIgMCAxMTggMCAyMjQgMCAyOTUuMSAzOC42IDM1Ny4xIDk2IDM5MC4zTDk2IDQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDZjMTUuMyAzLjkgMzEuNCA2IDQ4IDYgNS40IDAgMTAuNy0uMiAxNi0uN2wwIDQwLjdjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTUwLjljMTIuNC00LjQgMjQuMi0xMCAzNS4yLTE2Ljd6TTQ0OCAyMDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdCiAgICB9OwogICAgZmFDYWxlbmRhclhtYXJrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci14bWFyayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYWxlbmRhci10aW1lcyJdLCAiZjI3MyIsICJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0yOTEuOSAyMjAuMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTMzLjkgMzMuOS0zMy45LTMzLjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzMuOSAzMy45LTMzLjkgMzMuOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDMzLjktMzMuOSAzMy45IDMzLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0zMy45LTMzLjkgMzMuOS0zMy45YzkuNC05LjQgOS40LTI0LjYgMC0zMy45eiJdCiAgICB9OwogICAgZmFDYWxlbmRhclRpbWVzMiA9IGZhQ2FsZW5kYXJYbWFyazI7CiAgICBmYUNpcmNsZURvd24yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1kb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE0NjYsICJhcnJvdy1hbHQtY2lyY2xlLWRvd24iXSwgImYzNTgiLCAiTTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTIgMjU2IDI1NiAwIDEgMCAwLTUxMnpNMjQ0LjcgMzg3LjNsLTEwNC0xMDRjLTQuNi00LjYtNS45LTExLjUtMy41LTE3LjRzOC4zLTkuOSAxNC44LTkuOWw1NiAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDU2IDBjNi41IDAgMTIuMyAzLjkgMTQuOCA5LjlzMS4xIDEyLjktMy41IDE3LjRsLTEwNCAxMDRjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAweiJdCiAgICB9OwogICAgZmFBcnJvd0FsdENpcmNsZURvd24yID0gZmFDaXJjbGVEb3duMjsKICAgIGZhRmlsZU1lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1tZWRpY2FsIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY0NzciLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xNjAgMjgwbDAgNDAtNDAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDQwIDAgMCA0MGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC00MCA0MCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtNDAgMCAwLTQwYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdCiAgICB9OwogICAgZmFYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ4bWFyayIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODQ3MywgMTAwMDUsIDEwMDA2LCAxMDA2MCwgMjE1LCAiY2xvc2UiLCAibXVsdGlwbHkiLCAicmVtb3ZlIiwgInRpbWVzIl0sICJmMDBkIiwgIk01NS4xIDczLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDE0Ny4yIDI1NiA5LjkgMzkzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTkyLjUgMzAxLjMgMzI5LjkgNDM4LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wyMzcuOCAyNTYgMzc1LjEgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMTkyLjUgMjEwLjcgNTUuMSA3My40eiJdCiAgICB9OwogICAgZmFDbG9zZSA9IGZhWG1hcms7CiAgICBmYU11bHRpcGx5ID0gZmFYbWFyazsKICAgIGZhUmVtb3ZlID0gZmFYbWFyazsKICAgIGZhVGltZXMgPSBmYVhtYXJrOwogICAgZmFTaGFwZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hhcGVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInRyaWFuZ2xlLWNpcmNsZS1zcXVhcmUiXSwgImY2MWYiLCAiTTI1NiAwYzExLjIgMCAyMS43IDUuOSAyNy40IDE1LjVsOTYgMTYwYzUuOSA5LjkgNi4xIDIyLjIgLjQgMzIuMlMzNjMuNSAyMjQgMzUyIDIyNGwtMTkyIDBjLTExLjUgMC0yMi4yLTYuMi0yNy44LTE2LjJzLTUuNS0yMi4zIC40LTMyLjJsOTYtMTYwQzIzNC4zIDUuOSAyNDQuOCAwIDI1NiAwek0xMjggMjcyYTExMiAxMTIgMCAxIDEgMCAyMjQgMTEyIDExMiAwIDEgMSAwLTIyNHptMjAwIDE2bDExMiAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgMTEyYzAgMjIuMS0xNy45IDQwLTQwIDQwbC0xMTIgMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC0xMTJjMC0yMi4xIDE3LjktNDAgNDAtNDB6Il0KICAgIH07CiAgICBmYVRyaWFuZ2xlQ2lyY2xlU3F1YXJlID0gZmFTaGFwZXM7CiAgICBmYURpY2VPbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGljZS1vbmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODU2XSwgImY1MjUiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIyNCAyMjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFMb2NrT3BlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsb2NrLW9wZW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjNjMSIsICJNMzg0IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzJjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhTMzIwIDI1LjMgMzIwIDk2bDAgNjQtMTYwIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjI0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0zMiAwIDAtNjR6Il0KICAgIH07CiAgICBmYVBlcHBlckhvdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXBwZXItaG90IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI3Nzk4XSwgImY4MTYiLCAiTTU0NSA2NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDQ3OC45IDYzLjJDNDUyLjMgNDMuNiA0MTkuNSAzMiAzODQgMzIgMzQ4LjkgMzIgMzE2LjUgNDMuMyAyOTAuMSA2Mi40IDI3NC4xIDc0LjEgMjg0LjIgOTYgMzA0IDk2bDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjRjMCAxOS44IDIxLjkgMjkuOSAzMy42IDEzLjkgMTkuMS0yNi40IDMwLjQtNTguOCAzMC40LTkzLjkgMC0zNS41LTExLjYtNjguMy0zMS4yLTk0LjlMNTQ1IDY1ek0yNzAgMTM1LjVsLTE1OS42IDIyOEMxMDEuMyAzNzYuNCA4Ni43IDM4NCA3MSAzODRsLTcgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OGwyNy4xIDBjNjUuNyAwIDEyOS43LTIwLjIgMTgzLjUtNTcuOEw0NDAuNSAzMDYuMUM0MzUgMjk1LjkgNDMyIDI4NC4yIDQzMiAyNzJsLTU2IDBjLTM5LjggMC03Mi0zMi4yLTcyLTcybDAtNTZjLTEyLjIgMC0yMy45LTMtMzQtOC41eiJdCiAgICB9OwogICAgZmFEcm9wbGV0U2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHJvcGxldC1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ0aW50LXNsYXNoIl0sICJmNWM3IiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQ2My42IDM5Ny44YzEwLjUtMjMuOCAxNi40LTUwLjEgMTYuNC03Ny44IDAtOTEuMi0xMzAuMi0yNzQuMS0xNjYuNi0zMjMuNS01LjktOC0xNS4yLTEyLjUtMjUuMi0xMi41bC0uNCAwYy0xMCAwLTE5LjMgNC41LTI1LjIgMTIuNS0xNS42IDIxLjItNDguNSA2Ni45LTgwLjkgMTE5LjRMNDEtMjQuOXptOTIgMjI3LjdjLTIxLjYgNDMuOC0zNyA4NS45LTM3IDExNy4yIDAgMTA2IDg2IDE5MiAxOTIgMTkyIDQzLjQgMCA4My40LTE0LjQgMTE1LjUtMzguNkwxMzMgMjAyLjh6Il0KICAgIH07CiAgICBmYVRpbnRTbGFzaCA9IGZhRHJvcGxldFNsYXNoOwogICAgZmFEcm9wbGV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRyb3BsZXQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxNjcsICJ0aW50Il0sICJmMDQzIiwgIk0xOTIgNTEyQzg2IDUxMiAwIDQyNiAwIDMyMCAwIDIyOC44IDEzMC4yIDQ1LjkgMTY2LjYtMy41IDE3Mi41LTExLjUgMTgxLjgtMTYgMTkxLjgtMTZsLjQgMGMxMCAwIDE5LjMgNC41IDI1LjIgMTIuNSAzNi40IDQ5LjQgMTY2LjYgMjMyLjMgMTY2LjYgMzIzLjUgMCAxMDYtODYgMTkyLTE5MiAxOTJ6TTExMiAzMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRjMCA3NS4xIDYwLjkgMTM2IDEzNiAxMzYgMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRjLTQ4LjYgMC04OC0zOS40LTg4LTg4eiJdCiAgICB9OwogICAgZmFUaW50ID0gZmFEcm9wbGV0OwogICAgZmFGaWxlTGluZXMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtbGluZXMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjg0NDEsIDEyODQ2MiwgNjE2ODYsICJmaWxlLWFsdCIsICJmaWxlLXRleHQiXSwgImYxNWMiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xMjAgMjU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il0KICAgIH07CiAgICBmYUZpbGVBbHQyID0gZmFGaWxlTGluZXMyOwogICAgZmFGaWxlVGV4dDIgPSBmYUZpbGVMaW5lczI7CiAgICBmYUNvbW1lbnRzRG9sbGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbW1lbnRzLWRvbGxhciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNjUzIiwgIk0xOTIgMzIwYzEwNiAwIDE5Mi03OC44IDE5Mi0xNzZTMjk4LTMyIDE5Mi0zMiAwIDQ2LjggMCAxNDRjMCAzOS42IDE0LjMgNzYuMiAzOC40IDEwNS42TDIuOCAzMTYuOEMtMi4xIDMyNi4xLS40IDMzNy41IDcgMzQ1czE4LjkgOS4yIDI4LjIgNC4yTDExNi44IDMwNmMyMy4xIDkgNDguNSAxNCA3NS4yIDE0em0zLjIgNDhjMTYuNCA4MS45IDk0LjcgMTQ0IDE4OC44IDE0NCAyNi43IDAgNTIuMS01IDc1LjItMTRsODEuNiA0My4yYzkuMyA0LjkgMjAuNyAzLjIgMjguMi00LjJzOS4yLTE4LjkgNC4yLTI4LjJsLTM1LjYtNjcuMmMyNC4xLTI5LjQgMzguNC02NiAzOC40LTEwNS42IDAtODIuNC02MS43LTE1MS41LTE0NS0xNzAuNy0xMS41IDExNS44LTExNS44IDIwMS4yLTIzNS44IDIwMi43ek0xOTYgMzJjMTEgMCAyMCA5IDIwIDIwbDAgNCA4IDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC00Ny41IDBjLTYuOSAwLTEyLjUgNS42LTEyLjUgMTIuNSAwIDYuMSA0LjQgMTEuMyAxMC40IDEyLjNsNDEuNyA3YzI1LjMgNC4yIDQzLjkgMjYuMSA0My45IDUxLjggMCAyNi4xLTE5IDQ3LjctNDQgNTEuOGwwIDQuN2MwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC00LTI0IDBjLTExIDAtMjAtOS0yMC0yMHM5LTIwIDIwLTIwbDU1LjUgMGM2LjkgMCAxMi41LTUuNiAxMi41LTEyLjUgMC02LjEtNC40LTExLjMtMTAuNC0xMi4zbC00MS43LTdjLTI1LjMtNC4yLTQzLjktMjYuMS00My45LTUxLjggMC0yOC44IDIzLjItNTIuMiA1Mi01Mi41bDAtNGMwLTExIDktMjAgMjAtMjB6Il0KICAgIH07CiAgICBmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hZ25pZnlpbmctZ2xhc3MtbG9jYXRpb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2VhcmNoLWxvY2F0aW9uIl0sICJmNjg5IiwgIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTI4OCAxNzZjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCA0OC44IDQ2LjUgMTExLjYgNjguNiAxMzguNiA2IDcuMyAxNi44IDcuMyAyMi43IDAgMjIuMS0yNyA2OC42LTg5LjggNjguNi0xMzguNnptLTExMiAwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYVNlYXJjaExvY2F0aW9uID0gZmFNYWduaWZ5aW5nR2xhc3NMb2NhdGlvbjsKICAgIGZhRmlsZUludm9pY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1pbnZvaWNlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1NzAiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjc3LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjU4LjcgMTguN0MyNDYuNyA2LjcgMjMwLjUgMCAyMTMuNSAwTDY0IDB6TTMyNS41IDE3NkwyMzIgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyMDggNTguNSAzMjUuNSAxNzZ6TTY0IDM4NGwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJMOTYgNDE2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNODggNjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRTNzQuNyA2NCA4OCA2NHptMCA5Nmw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFQZW50YWdvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW50YWdvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNzkwIiwgIk0zMTYuNC0zLjFjLTE2LjgtMTIuMi0zOS42LTEyLjItNTYuNCAwTDM1LjMgMTYwLjJjLTE2LjggMTIuMi0yMy45IDMzLjktMTcuNCA1My43bDg1LjggMjY0LjFjNi40IDE5LjggMjQuOSAzMy4yIDQ1LjcgMzMuMmwyNzcuNyAwYzIwLjggMCAzOS4yLTEzLjQgNDUuNy0zMy4ybDg1LjgtMjY0LjFjNi40LTE5LjgtLjYtNDEuNC0xNy40LTUzLjdMMzE2LjQtMy4xeiJdCiAgICB9OwogICAgZmFSZXB1YmxpY2FuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJlcHVibGljYW4iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjc1ZSIsICJNMCAxOTJDMCAxMDMuNiA3MS42IDMyIDE2MCAzMmwyMjQgMGM4OC40IDAgMTYwIDcxLjYgMTYwIDE2MGwwIDY0LTU0NCAwIDAtNjR6bTE1Mi0zMmEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwem0yMzIgMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4ek0yODAgMTYwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTEyOCAyODhsNDE2IDAgMCAxMTJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA0OGMwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGwwLTQ4LTMyIDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NC0xOTIgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2MCAxMjggMHoiXQogICAgfTsKICAgIGZhU2hvcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaG9wIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInN0b3JlLWFsdCJdLCAiZjU0ZiIsICJNMjEuNSAxODEuMUw3OC4zIDY3LjRDODkuMiA0NS43IDExMS4zIDMyIDEzNS42IDMybDMwNC45IDBjMjQuMiAwIDQ2LjQgMTMuNyA1Ny4yIDM1LjRsNTYuOCAxMTMuN2MzLjYgNy4yIDUuNSAxNS4xIDUuNSAyMy4yIDAgMjcuMy0yMS4yIDQ5LjctNDggNTEuNkw1MTIgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTkyLTk2IDAgMCAxNzZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE5MiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE3Ni4xYy0yNi44LTEuOS00OC0yNC4zLTQ4LTUxLjYgMC04IDEuOS0xNiA1LjUtMjMuMnpNMTI4IDI1NmwwIDExMmMwIDguOCA3LjIgMTYgMTYgMTZsMTI4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTEyLTE2MCAweiJdCiAgICB9OwogICAgZmFTdG9yZUFsdCA9IGZhU2hvcDsKICAgIGZhRmlsbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxtIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3OTAyLCA2MjM2OCwgImZpbG0tYWx0IiwgImZpbG0tc2ltcGxlIl0sICJmMDA4IiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNNDggMzY4bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTMwNC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek00OCAyNDBsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMzA0LTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTQ4IDExMmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2ek0zNTIgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHoiXQogICAgfTsKICAgIGZhRmlsbUFsdCA9IGZhRmlsbTsKICAgIGZhRmlsbVNpbXBsZSA9IGZhRmlsbTsKICAgIGZhQnVpbGRpbmdDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRkNCIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxODAgMGMtMTAuNS0xNC42LTE5LTMwLjctMjUuMS00OGwtNzQuOSAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMyIDAgNCAuMiA1LjkgLjUgNi0yMy42IDE2LjMtNDUuNCAzMC4xLTY0LjVsLTQgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNGMyNy41LTE5LjggNjAuMy0zMi40IDk2LTM1LjRMNDE2IDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDB6bTMyIDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNzIgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTI4IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMjIuNi0xNDRsMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42TDQ1NC42IDQwMHoiXQogICAgfTsKICAgIGZhQ29tbWVudHMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbW1lbnRzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NDkwLCA2MTY3MF0sICJmMDg2IiwgIk0zODQgMTQ0YzAgOTcuMi04NiAxNzYtMTkyIDE3Ni0yNi43IDAtNTIuMS01LTc1LjItMTRMMzUuMiAzNDkuMmMtOS4zIDQuOS0yMC43IDMuMi0yOC4yLTQuMnMtOS4yLTE4LjktNC4yLTI4LjJsMzUuNi02Ny4yQzE0LjMgMjIwLjIgMCAxODMuNiAwIDE0NCAwIDQ2LjggODYtMzIgMTkyLTMyUzM4NCA0Ni44IDM4NCAxNDR6bTAgMzY4Yy05NC4xIDAtMTcyLjQtNjIuMS0xODguOC0xNDQgMTIwLTEuNSAyMjQuMy04Ni45IDIzNS44LTIwMi43IDgzLjMgMTkuMiAxNDUgODguMyAxNDUgMTcwLjcgMCAzOS42LTE0LjMgNzYuMi0zOC40IDEwNS42bDM1LjYgNjcuMmM0LjkgOS4zIDMuMiAyMC43LTQuMiAyOC4ycy0xOC45IDkuMi0yOC4yIDQuMkw0NTkuMiA0OThjLTIzLjEgOS00OC41IDE0LTc1LjIgMTR6Il0KICAgIH07CiAgICBmYVRhZ3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFncyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMDJjIiwgIk00MDEuMiAzOS4xTDU0OS40IDE4OS40YzI3LjcgMjguMSAyNy43IDczLjEgMCAxMDEuMkwzOTMgNDQ4LjljLTkuMyA5LjQtMjQuNSA5LjUtMzMuOSAuMnMtOS41LTI0LjUtLjItMzMuOUw1MTUuMyAyNTYuOGM5LjItOS4zIDkuMi0yNC40IDAtMzMuN0wzNjcgNzIuOWMtOS4zLTkuNC05LjItMjQuNiAuMi0zMy45czI0LjYtOS4yIDMzLjkgLjJ6TTMyLjEgMjI5LjVMMzIuMSA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwxMzMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43bDE0NCAxNDRjMjUgMjUgMjUgNjUuNSAwIDkwLjVMMjg1LjQgNDE4LjdjLTI1IDI1LTY1LjUgMjUtOTAuNSAwbC0xNDQtMTQ0Yy0xMi0xMi0xOC43LTI4LjMtMTguNy00NS4zem0xNDQtODUuNWEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdCiAgICB9OwogICAgZmFHdW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3VuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUxOWIiLCAiTTUyOCA1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDgtNDQ4IDBDMTQuMyA2NCAwIDc4LjMgMCA5NkwwIDIwOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMCAwYzIwLjggMCAzNi4xIDE5LjYgMzEgMzkuOEwzMyA0NDAuMmMtMi40IDkuNi0uMiAxOS43IDUuOCAyNy41UzU0LjEgNDgwIDY0IDQ4MGw5NiAwYzE0LjcgMCAyNy41LTEwIDMxLTI0LjJMMjE3IDM1MiAzMjEuNCAzNTJjMjMuNyAwIDQ0LjgtMTQuOSA1Mi43LTM3LjJsMjYuNy03NC44IDMxLjEgMGM4LjUgMCAxNi42LTMuNCAyMi42LTkuNGwyMi42LTIyLjYgNjYuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtODBjMC0xNy43LTE0LjMtMzItMzItMzJsLTE2IDAgMC04ek0zMjEuNCAzMDRsLTkyLjUgMCAxNi02NCAxMDUgMC0yMSA1OC43Yy0xLjEgMy4yLTQuMiA1LjMtNy41IDUuM3pNODAgMTI4bDM4NCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2TDgwIDE2MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhQ2lyY2xlQ2hlY2syID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxNTMzLCAiY2hlY2stY2lyY2xlIl0sICJmMDU4IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDEgMSAwIDUxMnpNMzc0IDE0NS43Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM0wyMjEuMSAzMTUuMiAxNjkgMjYzLjFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjNSA1IDExLjggNy41IDE4LjggN3MxMy40LTQuMSAxNy41LTkuOEwzNzkuMyAxNzkuMmM3LjgtMTAuNyA1LjQtMjUuNy01LjMtMzMuNXoiXQogICAgfTsKICAgIGZhQ2hlY2tDaXJjbGUyID0gZmFDaXJjbGVDaGVjazI7CiAgICBmYUlkQ2FyZENsaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaWQtY2FyZC1jbGlwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImlkLWNhcmQtYWx0Il0sICJmNDdmIiwgIk0yNTYtMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0LTEyOCAwIDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTY0IDMybDExMiAwIDAgMzJjMCAyNi41IDIxLjUgNDggNDggNDhsMTI4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zMiAxMTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJ6TTE3NiA0MDBjMCA4LjggNy4yIDE2IDE2IDE2bDE5MiAwYzguOCAwIDE2LTcuMiAxNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MGwtNjQgMGMtNDQuMiAwLTgwIDM1LjgtODAgODB6TTI4OCAyODBhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6Il0KICAgIH07CiAgICBmYUlkQ2FyZEFsdCA9IGZhSWRDYXJkQ2xpcDsKICAgIGZhTW9vbjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9vbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc2OSwgOTIxNF0sICJmMTg2IiwgIk0yNTYgMEMxMTQuNiAwIDAgMTE0LjYgMCAyNTZTMTE0LjYgNTEyIDI1NiA1MTJjNjguOCAwIDEzMS4zLTI3LjIgMTc3LjMtNzEuNCA3LjMtNyA5LjQtMTcuOSA1LjMtMjcuMXMtMTMuNy0xNC45LTIzLjgtMTQuMWMtNC45IC40LTkuOCAuNi0xNC44IC42LTEwMS42IDAtMTg0LTgyLjQtMTg0LTE4NCAwLTcyLjEgNDEuNS0xMzQuNiAxMDIuMS0xNjQuOCA5LjEtNC41IDE0LjMtMTQuMyAxMy4xLTI0LjRTMzIyLjYgOC41IDMxMi43IDYuM0MyOTQuNCAyLjIgMjc1LjQgMCAyNTYgMHoiXQogICAgfTsKICAgIGZhT2lsV2VsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJvaWwtd2VsbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTMyIiwgIk01MjguMyA2MS4zYy0xMS40LTQyLjctNTUuMy02OC05OC01Ni42TDQxNC45IDguOEMzOTcuOCAxMy40IDM4Ny43IDMxIDM5Mi4zIDQ4bDI0LjUgOTEuNC0xMDguMiAyOC4xLTYuMy0xOC4xQzI5Ny43IDEzNi42IDI4NS42IDEyOCAyNzIgMTI4cy0yNS43IDguNi0zMC4yIDIxLjRsLTEzLjYgMzktMTMyLjIgMzQuMyAwLTM4LjZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNjQtMTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTM3LjMgMC02MS40LTE3NS40LTYyLjIgMTYuMSAyMi4xIDYzLjItNjYuNiAwIDE5LjktNTYuOS03NC42IDE5LjMtNDYuNyAxMzMuNS00MS4zIDAgMC0xNTkuMiAzMzcuNC04Ny41IDI1LjIgOTRjNC42IDE3LjEgMjIuMSAyNy4yIDM5LjIgMjIuNmwxNS41LTQuMWM0Mi43LTExLjQgNjgtNTUuMyA1Ni42LTk4TDUyOC4zIDYxLjN6TTIwNS4xIDQ0OGwxNi44LTQ4IDEwMC4yIDAgMTYuOCA0OC0xMzMuOCAweiJdCiAgICB9OwogICAgZmFUYWNob2dyYXBoRGlnaXRhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YWNob2dyYXBoLWRpZ2l0YWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiZGlnaXRhbC10YWNob2dyYXBoIl0sICJmNTY2IiwgIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em02NCAzMmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNODggMzUyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEzNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDg4IDM1MnptMjU2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAwek00OTYgMTkyYTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpNODggMzEyYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMTA0LTI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bTU2IDI0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhRGlnaXRhbFRhY2hvZ3JhcGggPSBmYVRhY2hvZ3JhcGhEaWdpdGFsOwogICAgZmFUYWJsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGV0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRhYmxldC1hbmRyb2lkIl0sICJmM2ZiIiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwek0xODQgNDAwbDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYVRhYmxldEFuZHJvaWQgPSBmYVRhYmxldDsKICAgIGZhUnVibGVTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJ1YmxlLXNpZ24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs4MzgxLCAicm91YmxlIiwgInJ1YiIsICJydWJsZSJdLCAiZjE1OCIsICJNMTEyIDMyQzk0LjMgMzIgODAgNDYuMyA4MCA2NGwwIDIwOC00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDAgMCA0OC00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgMTUyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE1MiAwIDAtNDggMTEyIDBjNzkuNSAwIDE0NC02NC41IDE0NC0xNDRTMzM1LjUgMzIgMjU2IDMyTDExMiAzMnpNMjU2IDI1NmwtMTEyIDAgMC0xNjAgMTEyIDBjNDQuMiAwIDgwIDM1LjggODAgODBzLTM1LjggODAtODAgODB6Il0KICAgIH07CiAgICBmYVJvdWJsZSA9IGZhUnVibGVTaWduOwogICAgZmFSdWIgPSBmYVJ1YmxlU2lnbjsKICAgIGZhUnVibGUgPSBmYVJ1YmxlU2lnbjsKICAgIGZhQ2xvc2VkQ2FwdGlvbmluZzIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvc2VkLWNhcHRpb25pbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjIwYSIsICJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptMTUyIDgwbDMyIDBjNC40IDAgOCAzLjYgOCA4IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zMC45LTI1LjEtNTYtNTYtNTZsLTMyIDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgODBjMCAzMC45IDI1LjEgNTYgNTYgNTZsMzIgMGMzMC45IDAgNTYtMjUuMSA1Ni01NiAwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDQuNC0zLjYgOC04IDhsLTMyIDBjLTQuNCAwLTgtMy42LTgtOGwwLTgwYzAtNC40IDMuNi04IDgtOHptMTY4IDhjMC00LjQgMy42LTggOC04bDMyIDBjNC40IDAgOCAzLjYgOCA4IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zMC45LTI1LjEtNTYtNTYtNTZsLTMyIDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgODBjMCAzMC45IDI1LjEgNTYgNTYgNTZsMzIgMGMzMC45IDAgNTYtMjUuMSA1Ni01NiAwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDQuNC0zLjYgOC04IDhsLTMyIDBjLTQuNCAwLTgtMy42LTgtOGwwLTgweiJdCiAgICB9OwogICAgZmFQZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Mzk0XSwgImYzMDQiLCAiTTM1Mi45IDIxLjJMMzA4IDY2LjEgNDQ1LjkgMjA0IDQ5MC44IDE1OS4xQzUwNC40IDE0NS42IDUxMiAxMjcuMiA1MTIgMTA4cy03LjYtMzcuNi0yMS4yLTUxLjFMNDU1LjEgMjEuMkM0NDEuNiA3LjYgNDIzLjIgMCA0MDQgMHMtMzcuNiA3LjYtNTEuMSAyMS4yek0yNzQuMSAxMDBMNTguOSAzMTUuMWMtMTAuNyAxMC43LTE4LjUgMjQuMS0yMi42IDM4LjdMLjkgNDgxLjZjLTIuMyA4LjMgMCAxNy4zIDYuMiAyMy40czE1LjEgOC41IDIzLjQgNi4ybDEyNy44LTM1LjVjMTQuNi00LjEgMjcuOS0xMS44IDM4LjctMjIuNkw0MTIgMjM3LjkgMjc0LjEgMTAweiJdCiAgICB9OwogICAgZmFQbGFuZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGFuZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMDcyIiwgIk01MjAgMjAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2cy0yNS4xIDU2LTU2IDU2bC0xMjcuMyAwLTE1OS4yIDE3My42Yy02LjEgNi42LTE0LjYgMTAuNC0yMy42IDEwLjRsLTQzLjcgMGMtMTAuOSAwLTE4LjYtMTAuNy0xNS4yLTIxLjFsNTQuMy0xNjIuOS05OS43IDAtNTIuOCA2NmMtMyAzLjgtNy42IDYtMTIuNSA2bC0xOS44IDBjLTEwLjQgMC0xOC05LjgtMTUuNS0xOS45TDMyIDI1NiA1IDE0Ny45QzIuNCAxMzcuOCAxMC4xIDEyOCAyMC41IDEyOGwxOS44IDBjNC45IDAgOS41IDIuMiAxMi41IDZsNTIuOCA2NiA5OS43IDAtNTQuMy0xNjIuOUMxNDcuNiAyNi43IDE1NS4zIDE2IDE2Ni4yIDE2bDQzLjcgMGM5IDAgMTcuNSAzLjggMjMuNiAxMC40TDM5Mi43IDIwMCA1MjAgMjAweiJdCiAgICB9OwogICAgZmFJbWFnZXMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImltYWdlcyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMzAyIiwgIk05NiA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMzIwIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDk2IDk2ek0yNCAxMjhjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyOTZjMCA4LjggNy4yIDE2IDE2IDE2bDM2MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxNTJjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTE2OCAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTE5Ni41IDExLjVjLTQuNC03LjEtMTIuMS0xMS41LTIwLjUtMTEuNXMtMTYuMSA0LjQtMjAuNSAxMS41bC01Ni4zIDkyLjEtMjQuNS0zMC42Yy00LjYtNS43LTExLjQtOS0xOC43LTlzLTE0LjIgMy4zLTE4LjcgOWwtNjQgODBjLTUuOCA3LjItNi45IDE3LjEtMi45IDI1LjRTMTc0LjggMzUyIDE4NCAzNTJsMjcyIDBjOC43IDAgMTYuNy00LjcgMjAuOS0xMi4zczQuMS0xNi44LS41LTI0LjNsLTg4LTE0NHoiXQogICAgfTsKICAgIGZhTW9iaWxlU2NyZWVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vYmlsZS1zY3JlZW4iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsibW9iaWxlLWFuZHJvaWQtYWx0Il0sICJmM2NmIiwgIk0xNiA2NEMxNiAyOC43IDQ0LjcgMCA4MCAwTDMwNCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDgwIDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMTYgNjR6TTEyOCA0NDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTMwNCA2NGwtMjI0IDAgMCAzMDQgMjI0IDAgMC0zMDR6Il0KICAgIH07CiAgICBmYU1vYmlsZUFuZHJvaWRBbHQgPSBmYU1vYmlsZVNjcmVlbjsKICAgIGZhR3VhcmFuaVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3VhcmFuaS1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUxOWEiLCAiTTE5MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQxLjVDNzMuMyA3Ny4zIDAgMTU4LjEgMCAyNTZTNzMuMyA0MzQuNyAxNjggNDQ2LjVsMCA0MS41YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MS41Yzk0LjctMTEuOCAxNjgtOTIuNiAxNjgtMTkwLjUgMC0xNy43LTE0LjMtMzItMzItMzJsLTEzNiAwIDAtOTMuOGMyNS4zIDQuOCA0Ny45IDE3IDY1LjYgMzQuMyAxMi42IDEyLjQgMzIuOSAxMi4yIDQ1LjMtLjRzMTIuMi0zMi45LS41LTQ1LjNDMjk3LjIgOTAuMiAyNTguOCA3MC44IDIxNiA2NS41TDIxNiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMTY4IDEzMC4ybDAgMjUxLjVDMTA4LjggMzcwLjUgNjQgMzE4LjUgNjQgMjU2czQ0LjgtMTE0LjUgMTA0LTEyNS44em00OCAyNTEuNWwwLTkzLjggMTAwIDBjLTEyLjMgNDcuNi01MS4yIDg0LjUtMTAwIDkzLjh6Il0KICAgIH07CiAgICBmYUJhZ1Nob3BwaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhZy1zaG9wcGluZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJzaG9wcGluZy1iYWciXSwgImYyOTAiLCAiTTE2MCA4MGMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0bDAgNDgtMTI4IDAgMC00OHptLTQ4IDQ4bC02NCAwYy0yNi41IDAtNDggMjEuNS00OCA0OEwwIDM4NGMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0yMDhjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDAgMC00OGMwLTYxLjktNTAuMS0xMTItMTEyLTExMlMxMTIgMTguMSAxMTIgODBsMCA0OHptMjQgNDhhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0xNTIgMjRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhU2hvcHBpbmdCYWcgPSBmYUJhZ1Nob3BwaW5nOwogICAgZmFDaXJjbGVSaWdodDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE4MzgsICJhcnJvdy1hbHQtY2lyY2xlLXJpZ2h0Il0sICJmMzVhIiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAwIDUxMiAwIDI1NiAyNTYgMCAxIDAgLTUxMiAwem0zODcuMyAxMS4zbC0xMDQgMTA0Yy00LjYgNC42LTExLjUgNS45LTE3LjQgMy41UzI1NiAzNjYuNSAyNTYgMzYwbDAtNTYtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwIDAtNTZjMC02LjUgMy45LTEyLjMgOS45LTE0LjhzMTIuOS0xLjEgMTcuNCAzLjVsMTA0IDEwNGM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnoiXQogICAgfTsKICAgIGZhQXJyb3dBbHRDaXJjbGVSaWdodDIgPSBmYUNpcmNsZVJpZ2h0MjsKICAgIGZhUGhvbmVWb2x1bWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGhvbmUtdm9sdW1lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInZvbHVtZS1jb250cm9sLXBob25lIl0sICJmMmEwIiwgIk0zNDQtMzJjMTI4LjEgMCAyMzIgMTAzLjkgMjMyIDIzMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTEwMS42LTgyLjQtMTg0LTE4NC0xODQtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptOCAxOTJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0zMjAgODhjMC0xMy4zIDEwLjctMjQgMjQtMjQgNzUuMSAwIDEzNiA2MC45IDEzNiAxMzYgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00OC42LTM5LjQtODgtODgtODgtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTE0NC4xIDEuNGMxOS43LTUuNCA0MC4zIDQuNyA0OC4xIDIzLjVsNDAuNSA5Ny4zYzYuOSAxNi41IDIuMSAzNS42LTExLjggNDdsLTQ0LjEgMzYuMWMzMi41IDcxLjYgODkgMTMwIDE1OS4zIDE2NC45TDM3NC43IDMyM2MxMS4zLTEzLjkgMzAuNC0xOC42IDQ3LTExLjhMNTE5IDM1MS44YzE4LjggNy44IDI4LjkgMjguNCAyMy41IDQ4LjFsLTEuNSA1LjVDNTIzLjQgNDcwLjEgNDYwLjkgNTI1LjMgMzg0LjYgNTA5LjIgMjA5LjYgNDcyLjEgNzEuOSAzMzQuNCAzNC44IDE1OS40IDE4LjcgODMuMSA3My45IDIwLjYgMTM4LjUgMi45bDUuNS0xLjV6Il0KICAgIH07CiAgICBmYVZvbHVtZUNvbnRyb2xQaG9uZSA9IGZhUGhvbmVWb2x1bWU7CiAgICBmYUN1YmVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImN1YmVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYjMiLCAiTTI4NC0xLjNjLTE3LjMtMTAtMzguNy0xMC01NiAwTDE0My44IDQ3LjNjLTE3LjMgMTAtMjggMjguNS0yOCA0OC41bDAgMTAxLjktODguMyA1MWMtMTcuMyAxMC0yOCAyOC41LTI4IDQ4LjVsMCA5Ny4zYzAgMjAgMTAuNyAzOC41IDI4IDQ4LjVsODQuMyA0OC42YzE3LjMgMTAgMzguNyAxMCA1NiAwbDg4LjMtNTEgODguMyA1MWMxNy4zIDEwIDM4LjcgMTAgNTYgMEw0ODQuNSA0NDNjMTcuMy0xMCAyOC0yOC41IDI4LTQ4LjVsMC05Ny4zYzAtMjAtMTAuNy0zOC41LTI4LTQ4LjVsLTg4LjMtNTEgMC0xMDEuOWMwLTIwLTEwLjctMzguNS0yOC00OC41TDI4NC0xLjN6TTIzMiAyOTIuNmwwIDEwNi41LTg4LjMgNTFjLTEuMiAuNy0yLjYgMS4xLTQgMS4xbDAtMTA1LjMgOTIuMy01My4zem0yMzEuNCAuNmMuNyAxLjIgMS4xIDIuNiAxLjEgNGwwIDk3LjNjMCAyLjktMS41IDUuNS00IDYuOWwtODQuMyA0OC42Yy0xLjIgLjctMi42IDEuMS00IDEuMWwwLTEwNS4zIDkxLjItNTIuNnpNMzQ4LjMgOTUuOGwwIDEwMS45LTkyLjMgNTMuMyAwLTEwNi41IDkxLjItNTIuNmMuNyAxLjIgMS4xIDIuNiAxLjEgNHoiXQogICAgfTsKICAgIGZhUGhvbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGhvbmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMjIsIDEyODM3OV0sICJmMDk1IiwgIk0xNjAuMiAyNUMxNTIuMyA2LjEgMTMxLjctMy45IDExMi4xIDEuNGwtNS41IDEuNWMtNjQuNiAxNy42LTExOS44IDgwLjItMTAzLjcgMTU2LjQgMzcuMSAxNzUgMTc0LjggMzEyLjcgMzQ5LjggMzQ5LjggNzYuMyAxNi4yIDEzOC44LTM5LjEgMTU2LjQtMTAzLjdsMS41LTUuNWM1LjQtMTkuNy00LjctNDAuMy0yMy41LTQ4LjFsLTk3LjMtNDAuNWMtMTYuNS02LjktMzUuNi0yLjEtNDcgMTEuOGwtMzguNiA0Ny4yQzIzMy45IDMzNS40IDE3Ny4zIDI3NyAxNDQuOCAyMDUuM0wxODkgMTY5LjNjMTMuOS0xMS4zIDE4LjYtMzAuNCAxMS44LTQ3TDE2MC4yIDI1eiJdCiAgICB9OwogICAgZmFUb3JpaUdhdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9yaWktZ2F0ZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk5NjFdLCAiZjZhMSIsICJNMCA5NkwwIDI4LjVDMCAyMS42IDUuNiAxNiAxMi41IDE2IDE0LjggMTYgMTcgMTYuNiAxOSAxNy44TDU4IDQxLjJDODIuOSA1Ni4xIDExMS4zIDY0IDE0MC4zIDY0bDE2Ny40IDBjMjkgMCA1Ny41LTcuOSA4Mi4zLTIyLjhsMzktMjMuNGMxLjktMS4yIDQuMi0xLjggNi40LTEuOCA2LjkgMCAxMi41IDUuNiAxMi41IDEyLjVMNDQ4IDk2YzAgMzUuMy0yOC43IDY0LTY0IDY0bDAgNjQgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYgMCAwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE5Mi0xOTIgMCAwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE5Mi0xNiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDAgMC02NEMyOC43IDE2MCAwIDEzMS4zIDAgOTZ6TTEyOCAyMjRsNjQgMCAwLTY0LTY0IDAgMCA2NHptMTI4IDBsNjQgMCAwLTY0LTY0IDAgMCA2NHoiXQogICAgfTsKICAgIGZhQmFjb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFjb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjkzNjNdLCAiZjdlNSIsICJNNTU3IDk2LjdjMTQuNCAxNC40IDEyLjQgMzguNC00LjMgNTAuMmwtNjQuNiA0NS43Yy00My43IDMwLjktNzkuMiA3MS45LTEwMy40IDExOS42bC0yNS4zIDQ5LjhjLTI1LjEgNDkuMy02Mi4xIDkxLjUtMTA3LjggMTIyLjZsLTc0LjEgNTAuNmMtMTMuMSA4LjktMzAuNyA3LjMtNDEuOC0zLjlsLTQ0LjktNDQuOSA4Ni41LTY2LjVjNDIuMy0zMi41IDc2LjctNzQuMyAxMDAuNi0xMjJsMjQuNS00OS4xYzI0LjUtNDkgNjEuOC05MC42IDEwNy45LTEyMC4ybDEwOC43LTY5LjkgMzggMzh6TTQ4NC4yIDIzLjlMMzg0LjMgODguMmMtNTMuNCAzNC4zLTk2LjUgODIuNC0xMjQuOSAxMzkuMWwtMjQuNSA0OS4xYy0yMC42IDQxLjMtNTAuMyA3Ny4zLTg2LjkgMTA1LjRsLTkxLjQgNzAuMy0zNi45LTM2LjljLTE0LjQtMTQuNC0xMi40LTM4LjQgNC4zLTUwLjJsNjQuNi00NS43YzQzLjctMzAuOSA3OS4yLTcxLjkgMTAzLjQtMTE5LjZsMjUuMy00OS44QzI0Mi4zIDEwMC44IDI3OS4zIDU4LjYgMzI1IDI3LjRsNzQuMS01MC42YzEzLjEtOC45IDMwLjYtNy4zIDQxLjggMy45bDQzLjMgNDMuM3oiXQogICAgfTsKICAgIGZhUGVyc29uRmFsbGluZ0J1cnN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1mYWxsaW5nLWJ1cnN0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1NDciLCAiTTI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNS40YzAgNTUuMi0yMy43IDEwNy02My45IDE0My4xbDYyLjkgNzUuNSA4OSAwYzE1LjEgMCAyOS4zIDcuMSAzOC40IDE5LjJsNDMuMiA1Ny42YzEwLjYgMTQuMSA3LjcgMzQuMi02LjQgNDQuOHMtMzQuMiA3LjctNDQuOC02LjRMMzY4IDMyMCAyNjMuMiAzMjAgMzc2LjggNDU5LjhjMTEuMSAxMy43IDkuMSAzMy45LTQuNyA0NXMtMzMuOSA5LjEtNDUtNC43TDEzNy40IDI2Ni42Yy02LjEgMTUtOS40IDMxLjMtOS40IDQ4bDAgNjkuNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY5LjRjMC02Ny40IDM1LjQtMTI5LjkgOTMuMi0xNjQuNmw0LjYtMi44QzIwMC40IDEyNCAyMjQgODIuNCAyMjQgMzcuNGwwLTUuNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTYgODhBNTYgNTYgMCAxIDEgMTI4IDg4IDU2IDU2IDAgMSAxIDE2IDg4em0zNzYtNy45YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQ4em0xMDQgMTUyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDB6bS01NC41LTk3LjVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDMzLjktMzMuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTMzLjkgMzMuOWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDB6Il0KICAgIH07CiAgICBmYVF1b3RlUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicXVvdGUtcmlnaHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs4MjIxLCAicXVvdGUtcmlnaHQtYWx0Il0sICJmMTBlIiwgIk00NDggMjk2YzAgNjYuMy01My43IDEyMC0xMjAgMTIwbC04IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOCAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2bDAtOC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMzZ6bS0yNTYgMGMwIDY2LjMtNTMuNyAxMjAtMTIwIDEyMGwtOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDggMGMzMC45IDAgNTYtMjUuMSA1Ni01NmwwLTgtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTM2eiJdCiAgICB9OwogICAgZmFRdW90ZVJpZ2h0QWx0ID0gZmFRdW90ZVJpZ2h0OwogICAgZmFIb3VzZU1lZGljYWxGbGFnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLW1lZGljYWwtZmxhZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTE0IiwgIk00ODAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDAgMCAyODhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC00NDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTI2Ny41IDU5LjFMNDAwIDE4Ni45IDQwMCA1MDMuNGMtOS40IDUuNC0yMC4zIDguNi0zMiA4LjZsLTI1NiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE0NC0xOS45IDBDMTIuNiAzMDQgMCAyOTEuNCAwIDI3NS45IDAgMjY4LjMgMy4xIDI2MSA4LjYgMjU1LjdMMjEyLjUgNTkuMUMyMTkuOSA1MiAyMjkuNyA0OCAyNDAgNDhzMjAuMSA0IDI3LjUgMTEuMXpNMjA0LjggMjU2LjhsMCA0NC00NCAwYy05LjcgMC0xNy42IDcuOS0xNy42IDE3LjZsMCAzNS4yYzAgOS43IDcuOSAxNy42IDE3LjYgMTcuNmw0NCAwIDAgNDRjMCA5LjcgNy45IDE3LjYgMTcuNiAxNy42bDM1LjIgMGM5LjcgMCAxNy42LTcuOSAxNy42LTE3LjZsMC00NCA0NCAwYzkuNyAwIDE3LjYtNy45IDE3LjYtMTcuNmwwLTM1LjJjMC05LjctNy45LTE3LjYtMTcuNi0xNy42bC00NCAwIDAtNDRjMC05LjctNy45LTE3LjYtMTcuNi0xNy42bC0zNS4yIDBjLTkuNyAwLTE3LjYgNy45LTE3LjYgMTcuNnoiXQogICAgfTsKICAgIGZhUHJlc2NyaXB0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInByZXNjcmlwdGlvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNWIxIiwgIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMkwwIDI4OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjQgNTAuNyAwIDEyOCAxMjgtMTA1LjQgMTA1LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMjg4IDM5Ny4zIDM5My40IDUwMi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMzMzLjMgMzUyIDQzOC42IDI0Ni42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDI4OCAzMDYuNyAyMDIuMiAyMjAuOUMyNTEuNCAyMDkuMSAyODggMTY0LjggMjg4IDExMiAyODggNTAuMSAyMzcuOSAwIDE3NiAwTDMyIDB6TTE3NiAxNjBsLTExMiAwIDAtOTYgMTEyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDh6Il0KICAgIH07CiAgICBmYURpY2VUaHJlZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWNlLXRocmVlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTg1OF0sICJmNTI3IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem02NCA5NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTY0IDEyOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xMjggNjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFCdWlsZGluZ0xvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctbG9jayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGQ2IiwgIk0zMiA2NEMzMiAyOC43IDYwLjcgMCA5NiAwTDM1MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTIxLjNjLTQ2LjkgMTktODAgNjUtODAgMTE4LjdsMCAyNC40Yy0xOS42IDE3LjYtMzIgNDMuMS0zMiA3MS41bDAgOTZjMCA1LjUgLjUgMTAuOSAxLjMgMTYuMUw5NiA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDMyIDY0ek0xNzYgMzg0bDAgODAgODAgMCAwLTY0LjFjMC0xMy43IDEuOS0yNyA1LjUtMzkuNi01LjctNS4yLTEzLjItOC4zLTIxLjUtOC4zbC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMzA3IDIyNC4zYy0xLS4yLTItLjMtMy0uM2wtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDE2LjcgMGMyLjEtMjIuOCA4LjQtNDQuMyAxOC4zLTYzLjd6TTE0NCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0xMTIgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTQ0IDIyNGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0zNTIgODAuMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTM1MiA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il0KICAgIH07CiAgICBmYUlkQ2FyZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaWQtY2FyZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYyMTQ3LCAiZHJpdmVycy1saWNlbnNlIl0sICJmMmMyIiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDQ0OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0TDAgOTZ6bTAgNDhsNTc2IDAgMCAyNzJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE0NHpNMjQ3LjMgNDE2YzIwLjIgMCAzNS4zLTE5LjQgMjIuNC0zNS0xNC43LTE3LjctMzYuOS0yOS02MS43LTI5bC02NCAwYy0yNC44IDAtNDcgMTEuMy02MS43IDI5LTEyLjkgMTUuNiAyLjIgMzUgMjIuNCAzNWwxNDIuNSAwek0xNzYgMzEyYTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyek0zNjAgMjA4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMTIgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTEyIDB6Il0KICAgIH07CiAgICBmYURyaXZlcnNMaWNlbnNlMiA9IGZhSWRDYXJkMjsKICAgIGZhQ2lyY2xlUGxheTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXBsYXkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTQ2OSwgInBsYXktY2lyY2xlIl0sICJmMTQ0IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0xODguMyAxNDcuMWMtNy42IDQuMi0xMi4zIDEyLjMtMTIuMyAyMC45bDAgMTc2YzAgOC43IDQuNyAxNi43IDEyLjMgMjAuOXMxNi44IDQuMSAyNC4zLS41bDE0NC04OGM3LjEtNC40IDExLjUtMTIuMSAxMS41LTIwLjVzLTQuNC0xNi4xLTExLjUtMjAuNWwtMTQ0LTg4Yy03LjQtNC41LTE2LjctNC43LTI0LjMtLjV6Il0KICAgIH07CiAgICBmYVBsYXlDaXJjbGUyID0gZmFDaXJjbGVQbGF5MjsKICAgIGZhRmFjZUxhdWdoQmVhbTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1sYXVnaC1iZWFtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTEzLCAibGF1Z2gtYmVhbSJdLCAiZjU5YSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTEwMS42IDMxNGMtMy43LTEzLjcgNy41LTI2IDIxLjctMjZsMjY1LjQgMGMxNC4yIDAgMjUuNCAxMi4zIDIxLjcgMjYtMTguNSA2OC04MC42IDExOC0xNTQuNCAxMThTMTIwIDM4MiAxMDEuNiAzMTR6TTE3NiAxNjRjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6bTEzMiAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4eiJdCiAgICB9OwogICAgZmFMYXVnaEJlYW0yID0gZmFGYWNlTGF1Z2hCZWFtMjsKICAgIGZhTGVhZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsZWFmIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwNmMiLCAiTTQ3MS4zIDYuN0M0NzcuNyAuNiA0ODctMS42IDQ5NS42IDEuMiA1MDUuNCA0LjUgNTEyIDEzLjcgNTEyIDI0bDAgMTg2LjljMCAxMzEuMi0xMDguMSAyMzcuMS0yMzguOCAyMzcuMS03NyAwLTE0My40LTQ5LjUtMTY3LjUtMTE4LjctMzUuNCAzMC44LTU3LjcgNzYuMS01Ny43IDEyNi43IDAgMTMuMy0xMC43IDI0LTI0IDI0UzAgNDY5LjMgMCA0NTZDMCAzODEuMSAzOC4yIDMxNS4xIDk2LjEgMjc2LjMgMTMxLjQgMjUyLjcgMTczLjUgMjQwIDIxNiAyNDBsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMGMtMzkuNyAwLTc3LjMgOC44LTExMSAyNC41IDIzLjMtNzAgODkuMi0xMjAuNSAxNjctMTIwLjUgNjYuNCAwIDExNS44LTIyLjEgMTQ4LjctNDQgMTkuMi0xMi44IDM1LjUtMjguMSA1MC43LTQ1LjN6Il0KICAgIH07CiAgICBmYUhvdXNlQ2hpbW5leVVzZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtY2hpbW5leS11c2VyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwNjUiLCAiTTIzNC4yIDguNmMxMi4zLTExLjQgMzEuMy0xMS40IDQzLjUgMEwzNjggOTIuMyAzNjggODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEwMS41IDM3LjggMzUuMWM5LjYgOSAxMi44IDIyLjkgOCAzNS4xUzQ5My4yIDI3MiA0ODAgMjcybC0xNiAwIDAgMTc2YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yODggMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4ek0zMTIgMjU2YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHpNMTQ0IDQzMmMwIDguOCA3LjIgMTYgMTYgMTZsMTkyIDBjOC44IDAgMTYtNy4yIDE2LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwbC02NCAwYy00NC4yIDAtODAgMzUuOC04MCA4MHoiXQogICAgfTsKICAgIGZhUm90YXRlUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm90YXRlLXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInJlZG8tYWx0IiwgInJvdGF0ZS1mb3J3YXJkIl0sICJmMmY5IiwgIk00ODggMTkybC0xNDQgMGMtOS43IDAtMTguNS01LjgtMjIuMi0xNC44cy0xLjctMTkuMyA1LjItMjYuMmw0Ni43LTQ2LjdjLTc1LjMtNTguNi0xODQuMy01My4zLTI1My41IDE1LjktNzUgNzUtNzUgMTk2LjUgMCAyNzEuNXMxOTYuNSA3NSAyNzEuNSAwYzguMi04LjIgMTUuNS0xNi45IDIxLjktMjYuMSAxMC4xLTE0LjUgMzAuMS0xOCA0NC42LTcuOXMxOCAzMC4xIDcuOSA0NC42Yy04LjUgMTIuMi0xOC4yIDIzLjgtMjkuMSAzNC43LTEwMCAxMDAtMjYyLjEgMTAwLTM2MiAwUy0yNSAxNzUgNzUgNzVjOTQuMy05NC4zIDI0My43LTk5LjYgMzQ0LjMtMTYuMkw0NzEgN2M2LjktNi45IDE3LjItOC45IDI2LjItNS4yUzUxMiAxNC4zIDUxMiAyNGwwIDE0NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHoiXQogICAgfTsKICAgIGZhUmVkb0FsdCA9IGZhUm90YXRlUmlnaHQ7CiAgICBmYVJvdGF0ZUZvcndhcmQgPSBmYVJvdGF0ZVJpZ2h0OwogICAgZmFUb290aCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b290aCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyOTQ2M10sICJmNWM5IiwgIk0xNDUgNS43TDIyNCAzMiAzMDMgNS43QzMxNC4zIDEuOSAzMjYgMCAzMzcuOSAwIDM5OC43IDAgNDQ4IDQ5LjMgNDQ4IDExMC4xbDAgNjguNWMwIDI5LjQtOS41IDU4LjEtMjcuMiA4MS42bC0xLjEgMS41Yy0xMi45IDE3LjItMjEuMyAzNy40LTI0LjMgNTguN0wzNzMuNyA0NzEuOWMtMy4zIDIzLTIzIDQwLjEtNDYuMiA0MC4xLTIyLjggMC00Mi4zLTE2LjUtNDYtMzlMMjYxLjMgMzUxLjZjLTMtMTguMi0xOC44LTMxLjYtMzcuMy0zMS42cy0zNC4yIDEzLjQtMzcuMyAzMS42TDE2Ni41IDQ3M2MtMy44IDIyLjUtMjMuMiAzOS00NiAzOS0yMy4yIDAtNDIuOS0xNy4xLTQ2LjItNDAuMUw1Mi42IDMyMC41Yy0zLTIxLjMtMTEuNC00MS41LTI0LjMtNTguN2wtMS4xLTEuNUM5LjUgMjM2LjcgMCAyMDguMSAwIDE3OC43bDAtNjguNUMwIDQ5LjMgNDkuMyAwIDExMC4xIDAgMTIyIDAgMTMzLjcgMS45IDE0NSA1Ljd6Il0KICAgIH07CiAgICBmYUhvdXNlQ2hpbW5leVdpbmRvdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1jaGltbmV5LXdpbmRvdyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDBkIiwgIk0yMzQuMiA4LjZjMTIuMy0xMS40IDMxLjMtMTEuNCA0My41IDBMMzY4IDkyLjMgMzY4IDgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMDEuNSAzNy44IDM1LjFjOS42IDkgMTIuOCAyMi45IDggMzUuMVM0OTMuMiAyNzIgNDgwIDI3MmwtMTYgMCAwIDE3NmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMjg4IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOHpNMjE2IDIyNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTgwIDB6Il0KICAgIH07CiAgICBmYU1vdG9yY3ljbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW90b3JjeWNsZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyNzk0OV0sICJmMjFjIiwgIk0yODAgMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTYuNiAwIDIyLjUgNDguNy05NS4xIDcxLjNjLTMzLjQtMjUuMS03NS00MC0xMjAtNDBsLTU2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTYgMGM3OC41IDAgMTQzLjIgNTkuNiAxNTEuMiAxMzZsLTI1LjQgMGMtMTEuMi01OS4yLTYzLjMtMTA0LTEyNS44LTEwNC03MC43IDAtMTI4IDU3LjMtMTI4IDEyOFM3My4zIDQ4MCAxNDQgNDgwYzYyLjUgMCAxMTQuNS00NC44IDEyNS44LTEwNGw1MC4yIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yMi41YzAtNDUuMSAyNS43LTg1LjQgNjUuNS0xMDcuN2wxMi4xIDI2LjFjLTMyLjQgMjMuMi01My41IDYxLjItNTMuNSAxMDQuMSAwIDcwLjcgNTcuMyAxMjggMTI4IDEyOHMxMjgtNTcuMyAxMjgtMTI4LTU3LjMtMTI4LTEyOC0xMjhjLTEwLjcgMC0yMSAxLjMtMzAuOSAzLjhMNDMzLjggMTYwIDQ4OCAxNjBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNTMuMyAwYy02LjkgMC0xMy43IDIuMi0xOS4yIDYuNGwtMTcuMSAxMi44LTI0LjYtNTMuM0MzNjkuOSAyMS40IDM2MS40IDE2IDM1MiAxNmwtNzIgMHpNNDQ1LjggMzAwLjRsMjguNCA2MS42YzUuNiAxMiAxOS44IDE3LjMgMzEuOCAxMS43czE3LjMtMTkuOCAxMS43LTMxLjhsLTI4LjUtNjEuNmMyLjItLjIgNC40LS4zIDYuNy0uMyAzOS44IDAgNzIgMzIuMiA3MiA3MnMtMzIuMiA3Mi03MiA3Mi03Mi0zMi4yLTcyLTcyYzAtMjAuMiA4LjMtMzguNSAyMS44LTUxLjZ6TTE0NCA0MjRjLTM5LjggMC03Mi0zMi4yLTcyLTcyczMyLjItNzIgNzItNzJjMzEuMyAwIDU4IDIwIDY3LjkgNDhMMTQ0IDMyOGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw2Ny45IDBjLTkuOSAyOC0zNi42IDQ4LTY3LjkgNDh6Il0KICAgIH07CiAgICBmYUJhY2t3YXJkRmFzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWNrd2FyZC1mYXN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTE5OCwgImZhc3QtYmFja3dhcmQiXSwgImYwNDkiLCAiTTQ5Mi4yIDQ3Ny42Yy0xMiA1LTI1LjcgMi4yLTM0LjktNi45TDI4OCAzMDEuMyAyODggNDQ4YzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45TDY0IDMwMS4zIDY0IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ2NS43IDAgNDQ4TDAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJTNjQgNDYuMyA2NCA2NEw2NCAyMTAuNyAyMzMuNCA0MS40YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45UzI4OCA1MS4xIDI4OCA2NGwwIDE0Ni43IDE2OS40LTE2OS40YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45UzUxMiA1MS4xIDUxMiA2NGwwIDM4NGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42eiJdCiAgICB9OwogICAgZmFGYXN0QmFja3dhcmQgPSBmYUJhY2t3YXJkRmFzdDsKICAgIGZhQWRkcmVzc0Jvb2syID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFkZHJlc3MtYm9vayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTM4LCAiY29udGFjdC1ib29rIl0sICJmMmI5IiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI4OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDB6TTIwOCAyODhsNjQgMGM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTZsLTE5MiAwYy04LjggMC0xNi03LjItMTYtMTYgMC00NC4yIDM1LjgtODAgODAtODB6bS0yNC05NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTUxMiA4MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NHptMCAxMjhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjR6TTQ5NiAzMjBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NGMwLTguOC03LjItMTYtMTYtMTZ6Il0KICAgIH07CiAgICBmYUNvbnRhY3RCb29rMiA9IGZhQWRkcmVzc0Jvb2syOwogICAgZmFTYWlsYm9hdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzYWlsYm9hdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNDQ1IiwgIk0yNDAgMzUuOWwwIDM0OC4xLTIyNCAwYy04LjggMC0xNiA3LjItMTYgMTYgMCA2MS45IDUwLjEgMTEyIDExMiAxMTJsMjg4IDBjNjEuOSAwIDExMi01MC4xIDExMi0xMTIgMC04LjgtNy4yLTE2LTE2LTE2bC0yMDggMCAwLTQ4IDE2MS43IDBjMTIuOSAwIDIwLjUtMTQuNCAxMy4yLTI1TDI2OS4yIDI2LjljLTguOS0xMy0yOS4yLTYuNy0yOS4yIDl6TTE5MiAzMjBsMC0xODQuMmMwLTE2LjEtMjEtMjIuMS0yOS42LTguNUw0Ny4zIDMxMS41Yy02LjcgMTAuNyAxIDI0LjUgMTMuNiAyNC41TDE3NiAzMzZjOC44IDAgMTYtNy4yIDE2LTE2eiJdCiAgICB9OwogICAgZmFCb29rQm9va21hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9vay1ib29rbWFyayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMGJiIiwgIk05NiA1MTJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02Ni43YzE4LjYtNi42IDMyLTI0LjQgMzItNDUuM2wwLTI4OGMwLTI2LjUtMjEuNS00OC00OC00OGwtNDggMCAwIDE2OS40YzAgMTIuNS0xMC4xIDIyLjYtMjIuNiAyMi42LTYgMC0xMS44LTIuNC0xNi02LjZMMjcyIDE0NCAyMzAuNiAxODUuNGMtNC4yIDQuMi0xMCA2LjYtMTYgNi42LTEyLjUgMC0yMi42LTEwLjEtMjIuNi0yMi42TDE5MiAwIDk2IDBDNDMgMCAwIDQzIDAgOTZMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NnpNNjQgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI1NiAwIDAgNjQtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFNYWduaWZ5aW5nR2xhc3NBcnJvd1JpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hZ25pZnlpbmctZ2xhc3MtYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUyMSIsICJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NkMyOTYuMyA0MDEuMSAyNTMuOSA0MTYgMjA4IDQxNiA5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMCA0MTYgOTMuMSA0MTYgMjA4ek0zMDUgMjI1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45bC03Mi03MmMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzMSAzMS0xMDIuMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEwMi4xIDAtMzEgMzFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3Mi03MnoiXQogICAgfTsKICAgIGZhTWljcm9waG9uZUxpbmVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pY3JvcGhvbmUtbGluZXMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjc4OTcsICJtaWNyb3Bob25lLWFsdCJdLCAiZjNjOSIsICJNOTYgOTZjMC01MyA0My05NiA5Ni05NiA1MC4zIDAgOTEuNiAzOC43IDk1LjcgODhMMjMyIDg4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDU2IDAgMCA0OC01NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDU1LjcgMGMtNC4xIDQ5LjMtNDUuMyA4OC05NS43IDg4LTUzIDAtOTYtNDMtOTYtOTZMOTYgOTZ6TTI0IDE2MGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwYzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0czE0NC02NC41IDE0NC0xNDRsMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDBjMCA5Ny45LTczLjMgMTc4LjctMTY4IDE5MC41bDAgNDkuNSA0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0OCAwIDAtNDkuNUM3My4zIDQwMi43IDAgMzIxLjkgMCAyMjRsMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTWljcm9waG9uZUFsdCA9IGZhTWljcm9waG9uZUxpbmVzOwogICAgZmFSZXBseUFsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZXBseS1hbGwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsibWFpbC1yZXBseS1hbGwiXSwgImYxMjIiLCAiTTMzMi4yIDE4LjRjMTIgNSAxOS44IDE2LjYgMTkuOCAyOS42bDAgODAgNDggMGM5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NiAwIDExMy4zLTgxLjUgMTYzLjktMTAwLjIgMTc0LjEtMi41IDEuNC01LjMgMS45LTguMSAxLjktMTAuOSAwLTE5LjctOC45LTE5LjctMTkuNyAwLTcuNSA0LjMtMTQuNCA5LjgtMTkuNSA5LjQtOC44IDIyLjItMjYuNCAyMi4yLTU2LjcgMC01My00My05Ni05Ni05NmwtMzIgMCAwIDgwYzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45bC0xNjAtMTYwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2wxNjAtMTYwYzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45ek0yMDUuNiAyMy4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45TDU0LjYgMjA4IDIwNS42IDM1OC45YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMMTAgMjMxLjJjLTYuNC02LTEwLTE0LjQtMTAtMjMuMnMzLjYtMTcuMiAxMC0yMy4yTDE3MS42IDIzLjFjOS40LTkuNCAyNC42LTkuNCAzMy45IDB6Il0KICAgIH07CiAgICBmYU1haWxSZXBseUFsbCA9IGZhUmVwbHlBbGw7CiAgICBmYVVuaXZlcnNhbEFjY2VzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1bml2ZXJzYWwtYWNjZXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyOWEiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE2MS41LTg2LjFjLTEyLjItNS4yLTI2LjMgLjQtMzEuNSAxMi42cy40IDI2LjMgMTIuNiAzMS41bDExLjkgNS4xYzE3LjMgNy40IDM1LjIgMTIuOSA1My42IDE2LjNsMCA1MC4xYzAgNC4zLS43IDguNi0yLjEgMTIuNmwtMjguNyA4Ni4xYy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDI0LjQtNzMuMmMxLjMtMy44IDQuOC02LjQgOC44LTYuNHM3LjYgMi42IDguOCA2LjRsMjQuNCA3My4yYzQuMiAxMi42IDE3LjggMTkuNCAzMC40IDE1LjJTMzM5IDM5NyAzMzQuOCAzODQuNGwtMjguNy04Ni4xYy0xLjQtNC4xLTIuMS04LjMtMi4xLTEyLjZsMC01MC4xYzE4LjQtMy41IDM2LjMtOC45IDUzLjYtMTYuM2wxMS45LTUuMWMxMi4yLTUuMiAxNy44LTE5LjMgMTIuNi0zMS41cy0xOS4zLTE3LjgtMzEuNS0xMi42TDMzOC43IDE3NWMtMjYuMSAxMS4yLTU0LjIgMTctODIuNyAxN3MtNTYuNS01LjgtODIuNy0xN2wtMTEuOS01LjF6TTI1NiAxNjBhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdCiAgICB9OwogICAgZmFUb2lsZXRQYXBlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b2lsZXQtcGFwZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MzEsIDYzMjYzLCAidG9pbGV0LXBhcGVyLWFsdCIsICJ0b2lsZXQtcGFwZXItYmxhbmsiXSwgImY3MWUiLCAiTTMyNy4xIDMyYy04LjggMTEuMS0xNiAyMy4xLTIxLjkgMzQuOC0yMS40IDQyLjctMzMuMiA5OC40LTMzLjIgMTU3LjJsMCAyNjRjMCAzMC45LTI1LjEgNTYtNTYgNTZMNTYgNTQ0Yy0zMC45IDAtNTYtMjUuMS01Ni01NkwwIDIyNEMwIDExOCA0MyAzMiA5NiAzMmwyMzEuMSAwek00MTYgNDE2Yy01MyAwLTk2LTg2LTk2LTE5MnM0My0xOTIgOTYtMTkyIDk2IDg2IDk2IDE5Mi00MyAxOTItOTYgMTkyem0wLTEyOGMxNy43IDAgMzItMjguNyAzMi02NHMtMTQuMy02NC0zMi02NC0zMiAyOC43LTMyIDY0IDE0LjMgNjQgMzIgNjR6Il0KICAgIH07CiAgICBmYVRvaWxldFBhcGVyQWx0ID0gZmFUb2lsZXRQYXBlcjsKICAgIGZhVG9pbGV0UGFwZXJCbGFuayA9IGZhVG9pbGV0UGFwZXI7CiAgICBmYVZyQ2FyZGJvYXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZyLWNhcmRib2FyZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNzI5IiwgIk01MTIgOTZMNjQgOTZDMjguNyA5NiAwIDEyNC43IDAgMTYwTDAgMzUyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDExNy41IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdsMzMuOS0zMy45YzcuMi03LjIgMTcuMS0xMS4zIDI3LjMtMTEuM3MyMC4xIDQuMSAyNy4zIDExLjNsMzMuOSAzMy45YzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdMNTEyIDQxNmMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MmMwLTM1LjMtMjguNy02NC02NC02NHpNODAgMjQwYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHptMzUyLTY0YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdCiAgICB9OwogICAgZmFQaXp6YVNsaWNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBpenphLXNsaWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4MTgiLCAiTTE2OS43IC45Yy0yMi44LTEuNi00MS45IDE0LTQ3LjUgMzQuN0wxMTIuNSA3MkMyOTMuMyA3Mi4zIDQzOS43IDIxOC43IDQ0MCAzOTkuNWwzNi40LTkuN2MyMC44LTUuNSAzNi4zLTI0LjcgMzQuNy00Ny41LTEyLjYtMTgyLjgtMTU4LjYtMzI4LjgtMzQxLjQtMzQxLjR6bTIyMiA0MTEuNWMuMi00LjEgLjMtOC4yIC4zLTEyLjQgMC0xNTQuNi0xMjUuNC0yODAtMjgwLTI4MC00LjEgMC04LjMgLjEtMTIuNCAuM0wuNSA0OTEuOWMtMS41IDUuNSAuMSAxMS40IDQuMSAxNS40czkuOSA1LjYgMTUuNCA0LjFsMzcxLjYtOTkuMXpNMTc2IDIwOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTY0IDEyOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek05NiAzODRhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhU3ByYXlDYW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3ByYXktY2FuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1YmQiLCAiTTE5MiAwbDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA4MC0xMjggMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek02NCAyNTZjMC01MyA0My05NiA5Ni05NmwxMjggMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjA4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0yMjQgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0yMDh6bTI0MCA4MGE4MCA4MCAwIDEgMCAtMTYwIDAgODAgODAgMCAxIDAgMTYwIDB6TTMyMCA2NGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek00NDggMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em02NCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0zMiA2NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTUxMiAyNTZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNNDQ4IDEyOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVZvbHVtZUxvdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2b2x1bWUtbG93IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MjY0LCAidm9sdW1lLWRvd24iXSwgImYwMjciLCAiTTQ4IDM1Mmw0OCAwIDEzNC4xIDExOS4yYzYuNCA1LjcgMTQuNiA4LjggMjMuMSA4LjggMTkuMiAwIDM0LjgtMTUuNiAzNC44LTM0LjhsMC0zNzguNGMwLTE5LjItMTUuNi0zNC44LTM0LjgtMzQuOC04LjUgMC0xNi43IDMuMS0yMy4xIDguOEw5NiAxNjAgNDggMTYwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4ek0zODAuNiAxODEuNWMtMTAuMy04LjQtMjUuNC02LjgtMzMuOCAzLjVzLTYuOCAyNS40IDMuNSAzMy44QzM2MS4xIDIyNy42IDM2OCAyNDEgMzY4IDI1NnMtNi45IDI4LjQtMTcuNyAzNy4zYy0xMC4zIDguNC0xMS44IDIzLjUtMy41IDMzLjhzMjMuNSAxMS44IDMzLjggMy41QzQwMi4xIDMxMi45IDQxNiAyODYuMSA0MTYgMjU2cy0xMy45LTU2LjktMzUuNS03NC41eiJdCiAgICB9OwogICAgZmFWb2x1bWVEb3duID0gZmFWb2x1bWVMb3c7CiAgICBmYUNyb3NzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNyb3NzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MzI3LCAxMDAxM10sICJmNjU0IiwgIk0xNzYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA4MC04MCAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDgwIDAgMCAyMDhjMCAyNi41IDIxLjUgNDggNDggNDhsMzIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIwOCA4MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzJjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTgwIDAgMC04MGMwLTI2LjUtMjEuNS00OC00OC00OEwxNzYgMHoiXQogICAgfTsKICAgIGZhUGVyc29uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyOTQ4NSwgIm1hbGUiXSwgImYxODMiLCAiTTI0OCAyNGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6bTI0IDIxMi43bDQ2LjMgNjIuNGMxMC41IDE0LjIgMzAuNiAxNy4yIDQ0LjggNi42czE3LjItMzAuNiA2LjYtNDQuOGwtNzAuNS05NUMyNzQgMTMyIDIzNC4zIDExMiAxOTIgMTEycy04MiAyMC0xMDcuMiA1My45bC03MC41IDk1Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZMMTEyIDIzNi43IDExMiA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNzUuM3oiXQogICAgfTsKICAgIGZhTWFsZSA9IGZhUGVyc29uOwogICAgZmFIb3VyZ2xhc3MzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXJnbGFzcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzkyMDMsIDYyMDMyLCAiaG91cmdsYXNzLWVtcHR5Il0sICJmMjU0IiwgIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEwzNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDExYzAgNDIuNC0xNi45IDgzLjEtNDYuOSAxMTMuMWwtNjcuOSA2Ny45IDY3LjkgNjcuOWMzMCAzMCA0Ni45IDcwLjcgNDYuOSAxMTMuMWwwIDExYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwwLTExYzAtNDIuNCAxNi45LTgzLjEgNDYuOS0xMTMuMWw2Ny45LTY3LjktNjcuOS02Ny45QzQ4LjkgMTU4LjEgMzIgMTE3LjQgMzIgNzVsMC0xMUMxNC4zIDY0IDAgNDkuNyAwIDMyek05NiA2NGwwIDExYzAgMjUuNSAxMC4xIDQ5LjkgMjguMSA2Ny45bDY3LjkgNjcuOSA2Ny45LTY3LjljMTgtMTggMjguMS00Mi40IDI4LjEtNjcuOWwwLTExLTE5MiAwem0wIDM4NGwxOTIgMCAwLTExYzAtMjUuNS0xMC4xLTQ5LjktMjguMS02Ny45bC02Ny45LTY3LjktNjcuOSA2Ny45Yy0xOCAxOC0yOC4xIDQyLjQtMjguMSA2Ny45bDAgMTF6Il0KICAgIH07CiAgICBmYUhvdXJnbGFzc0VtcHR5MiA9IGZhSG91cmdsYXNzMzsKICAgIGZhRmlzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDMxXSwgImY1NzgiLCAiTTE4MC41IDE0MS41QzIxOS43IDEwOC41IDI3Mi42IDgwIDMzNiA4MHMxMTYuMyAyOC41IDE1NS41IDYxLjVjMzkuMSAzMyA2Ni45IDcyLjQgODEgOTkuOCA0LjcgOS4yIDQuNyAyMC4xIDAgMjkuMy0xNC4xIDI3LjQtNDEuOSA2Ni44LTgxIDk5LjgtMzkuMiAzMy4xLTkyIDYxLjUtMTU1LjUgNjEuNXMtMTE2LjMtMjguNS0xNTUuNS02MS41Yy0xNi4yLTEzLjctMzAuNS0yOC41LTQyLjctNDMuMUw0OC4xIDM3OS42Yy0xMi41IDcuMy0yOC40IDUuMy0zOC43LTQuOXMtMTIuNC0yNi01LjMtMzguNkw1MCAyNTYgNC4yIDE3NS45Yy03LjItMTIuNi01LTI4LjQgNS4zLTM4LjZzMjYuMS0xMi4yIDM4LjctNC45bDg5LjcgNTIuM2MxMi4yLTE0LjYgMjYuNS0yOS40IDQyLjctNDMuMXpNNDQ4IDI1NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdCiAgICB9OwogICAgZmFEcnVtc3RpY2tCaXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRydW1zdGljay1iaXRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2ZDciLCAiTTE2MCAyNjUuMmMwIDguNS0zLjQgMTYuNi05LjQgMjIuNmwtMjYuOCAyNi44Yy0xMi4zIDEyLjMtMzIuNSAxMS40LTQ5LjQgNy4yLTQuNi0xLjEtOS41LTEuOC0xNC41LTEuOC0zMy4xIDAtNjAgMjYuOS02MCA2MHMyNi45IDYwIDYwIDYwYzYuMyAwIDEyIDUuNyAxMiAxMiAwIDMzLjEgMjYuOSA2MCA2MCA2MHM2MC0yNi45IDYwLTYwYzAtNS0uNi05LjgtMS44LTE0LjUtNC4yLTE2LjktNS4yLTM3LjEgNy4yLTQ5LjRsMjYuOC0yNi44YzYtNiAxNC4xLTkuNCAyMi42LTkuNGw4OS4yIDBjNi4zIDAgMTIuNC0uMyAxOC41LTEgMTEuOS0xLjIgMTYuNC0xNS41IDEwLjgtMjYtOC41LTE1LjgtMTMuMy0zMy44LTEzLjMtNTMgMC02MS45IDUwLjEtMTEyIDExMi0xMTIgOCAwIDE1LjcgLjggMjMuMiAyLjQgMTEuNyAyLjUgMjQuMS01LjkgMjItMTcuNi0xNC43LTgyLjMtODYuNy0xNDQuOC0xNzMuMi0xNDQuOC05Ny4yIDAtMTc2IDc4LjgtMTc2IDE3NmwwIDg5LjJ6Il0KICAgIH07CiAgICBmYUNoYXJ0U2ltcGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYXJ0LXNpbXBsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNDczIiwgIk0xOTIgODBjMC0yNi41IDIxLjUtNDggNDgtNDhsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0zNTJ6TTAgMjcyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNjBjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMjcyek00MzIgOTZsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDI4OGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0yODhjMC0yNi41IDIxLjUtNDggNDgtNDh6Il0KICAgIH07CiAgICBmYUF0b20gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXRvbSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4ODNdLCAiZjVkMiIsICJNMjI0IDM5OC44Yy0xMS44IDUuMS0yMy40IDkuNy0zNC45IDEzLjUgMTYuNyAzMy44IDMxIDM1LjcgMzQuOSAzNS43czE4LjEtMS45IDM0LjktMzUuN2MtMTEuNC0zLjktMjMuMS04LjQtMzQuOS0xMy41ek00MTQgMjU2YzMzIDQ1LjIgNDQuMyA5MC45IDIzLjYgMTI4LTIwLjIgMzYuMy02Mi41IDQ5LjMtMTE1LjIgNDMuMi0yMiA1Mi4xLTU1LjcgODQuOC05OC40IDg0LjhzLTc2LjQtMzIuNy05OC40LTg0LjhDNzIuOSA0MzMuMyAzMC42IDQyMC4zIDEwLjQgMzg0LTEwLjMgMzQ2LjkgMSAzMDEuMiAzNCAyNTYgMSAyMTAuOC0xMC4zIDE2NS4xIDEwLjQgMTI4IDMwLjYgOTEuNyA3Mi45IDc4LjcgMTI1LjYgODQuOCAxNDcuNiAzMi43IDE4MS4yIDAgMjI0IDBzNzYuNCAzMi43IDk4LjQgODQuOGM1Mi43LTYuMSA5NSA2LjggMTE1LjIgNDMuMiAyMC43IDM3LjEgOS40IDgyLjgtMjMuNiAxMjh6bS02NS44IDY3LjRjLTEuNyAxNC4yLTMuOSAyOC02LjcgNDEuMiAzMS44IDEuNCAzOC42LTguNyA0MC4yLTExLjcgMi4zLTQuMiA3LTE3LjktMTEuOS00OC4xLTYuOCA2LjMtMTQgMTIuNS0yMS42IDE4LjZ6bS02LjctMTc1LjljMi44IDEzLjEgNSAyNi45IDYuNyA0MS4yIDcuNiA2LjEgMTQuOCAxMi4zIDIxLjYgMTguNiAxOC45LTMwLjIgMTQuMi00NCAxMS45LTQ4LjEtMS42LTIuOS04LjQtMTMtNDAuMi0xMS43ek0yNTguOSA5OS43QzI0Mi4xIDY1LjkgMjI3LjkgNjQgMjI0IDY0cy0xOC4xIDEuOS0zNC45IDM1LjdjMTEuNCAzLjkgMjMuMSA4LjQgMzQuOSAxMy41IDExLjgtNS4xIDIzLjQtOS43IDM0LjktMTMuNXptLTE1OSA4OC45YzEuNy0xNC4zIDMuOS0yOCA2LjctNDEuMi0zMS44LTEuNC0zOC42IDguNy00MC4yIDExLjctMi4zIDQuMi03IDE3LjkgMTEuOSA0OC4xIDYuOC02LjMgMTQtMTIuNSAyMS42LTE4LjZ6TTc4LjIgMzA0LjhjLTE4LjkgMzAuMi0xNC4yIDQ0LTExLjkgNDguMSAxLjYgMi45IDguNCAxMyA0MC4yIDExLjctMi44LTEzLjEtNS0yNi45LTYuNy00MS4yLTcuNi02LjEtMTQuOC0xMi4zLTIxLjYtMTguNnpNMzA0IDI1NmE4MCA4MCAwIDEgMCAtMTYwIDAgODAgODAgMCAxIDAgMTYwIDB6bS04MC0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzExMl0sICI1MCIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwxMjggMGM4OC40IDAgMTYwIDcxLjYgMTYwIDE2MFMyNDguNCAzNTIgMTYwIDM1MmwtOTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NHpNNjQgMjg4bDk2IDBjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZsLTk2IDAgMCAxOTJ6Il0KICAgIH07CiAgICBmYUpldEZpZ2h0ZXJVcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJqZXQtZmlnaHRlci11cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTE4IiwgIk0yMDYuOCA0Ny44QzIwMi4zIDU4LjUgMjAwIDcwIDIwMCA4MS42bDAgMTAwLjQtMTUyIDExNCAwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0UzAgMjM0LjcgMCAyNDhMMCAzOTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTggMTUyIDAgMCA1NC40LTY2IDUyLjhjLTMuOCAzLTYgNy42LTYgMTIuNWwwIDI0LjNjMCA4LjggNy4yIDE2IDE2IDE2bDg4IDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgODggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNC4zYzAtNC45LTIuMi05LjUtNi0xMi41bC02Ni01Mi44IDAtNTQuNCAxNTIgMCAwIDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE0NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQ4LTE1Mi0xMTQgMC0xMDAuNGMwLTExLjYtMi4zLTIzLjEtNi44LTMzLjhsLTI3LjEtNjVDMjc0LjQtMjYuMiAyNjUuNy0zMiAyNTYtMzJzLTE4LjQgNS44LTIyLjIgMTQuOGwtMjcuMSA2NXoiXQogICAgfTsKICAgIGZhUGx1Z0NpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsdWctY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NjAiLCAiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNDk2IDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTU5LjMgMTA3LjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMGwtMzYuNyAzNi43LTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmwzNi43IDM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzYuNy0zNi43IDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTM2LjctMzYuNyAzNi43LTM2Ljd6Il0KICAgIH07CiAgICBmYVNoZWV0UGxhc3RpYyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGVldC1wbGFzdGljIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU1NzEiLCAiTTAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE0OS41IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdMMzY1LjMgMzg2LjdjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0wzODQgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDh6bTIwOCA1LjVsMC05My41YzAtMTMuMyAxMC43LTI0IDI0LTI0bDkzLjUgMC0xMTcuNSAxMTcuNXpNMTUzIDEwNWwtNDggNDhjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNDgtNDhjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45em05NiAzMkwxMzcgMjQ5Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDIxNSAxMDNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45eiJdCiAgICB9OwogICAgZmFWID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInYiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMThdLCAiNTYiLCAiTTE5LjcgMzQuNWMxNi4zLTYuOCAzNSAuOSA0MS44IDE3LjJMMTkyIDM2NC44IDMyMi41IDUxLjdjNi44LTE2LjMgMjUuNS0yNCA0MS44LTE3LjJzMjQgMjUuNSAxNy4yIDQxLjhsLTE2MCAzODRjLTUgMTEuOS0xNi42IDE5LjctMjkuNSAxOS43cy0yNC42LTcuOC0yOS41LTE5LjdMMi41IDc2LjNjLTYuOC0xNi4zIC45LTM1IDE3LjItNDEuOHoiXQogICAgfTsKICAgIGZhTGlzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaXN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxpc3Qtc3F1YXJlcyJdLCAiZjAzYSIsICJNNDAgNDhDMjYuNyA0OCAxNiA1OC43IDE2IDcybDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0TDQwIDQ4ek0xOTIgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMTkyIDY0em0wIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjg4IDB6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yODggMHpNMTYgMjMybDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNNDAgMzY4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNDggMHoiXQogICAgfTsKICAgIGZhTGlzdFNxdWFyZXMgPSBmYUxpc3Q7CiAgICBmYVNvbGFyUGFuZWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic29sYXItcGFuZWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjViYSIsICJNMTIxLjggMzJjLTMwIDAtNTYgMjAuOC02Mi41IDUwLjFMOS42IDMwNi4xQy43IDM0Ni4xIDMxLjEgMzg0IDcyIDM4NGwxODQuMSAwIDAgNjQtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTY0IDE4NC4xIDBjNDAuOSAwIDcxLjQtMzcuOSA2Mi41LTc3LjlsLTQ5LjgtMjI0QzUxMC40IDUyLjggNDg0LjUgMzIgNDU0LjUgMzJMMTIxLjggMzJ6TTI0NS42IDk2bDg1LjIgMCA3LjMgODgtOTkuOCAwIDcuMy04OHptLTU1LjUgODhsLTg3LjggMCAxOS42LTg4IDc1LjYgMC03LjMgODh6TTkxLjYgMjMybDk0LjUgMC03LjMgODgtMTA2LjcgMCAxOS42LTg4em0xNDIuNiAwbDEwNy44IDAgNy4zIDg4LTEyMi41IDAgNy4zLTg4em0xNTYgMGw5NC41IDAgMTkuNiA4OC0xMDYuNyAwLTcuMy04OHpNNDc0IDE4NGwtODcuOCAwLTcuMy04OCA3NS42IDAgMTkuNiA4OHoiXQogICAgfTsKICAgIGZhTGFuZE1pbmVPbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYW5kLW1pbmUtb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUxYiIsICJNMzEyIDBsMCAxMjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRMMjY0IDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpNMTYwIDI4OGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OEw4MCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDhsODAgMCAwLTMyek0xMiAxMTQuN2M3LjQtMTEgMjIuMy0xNCAzMy4zLTYuN2w5NiA2NGMxMSA3LjQgMTQgMjIuMyA2LjcgMzMuM3MtMjIuMyAxNC0zMy4zIDYuN2wtOTYtNjRjLTExLTcuNC0xNC0yMi4zLTYuNy0zMy4zek01MzAuNyAxMDhjMTEtNy40IDI1LjktNC40IDMzLjMgNi43czQuNCAyNS45LTYuNyAzMy4zbC05NiA2NGMtMTEgNy40LTI1LjkgNC40LTMzLjMtNi43cy00LjQtMjUuOSA2LjctMzMuM2w5Ni02NHoiXQogICAgfTsKICAgIGZhSGVhZHBob25lczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhZHBob25lcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzkxMSwgNjI4NjMsICJoZWFkcGhvbmVzLWFsdCIsICJoZWFkcGhvbmVzLXNpbXBsZSJdLCAiZjAyNSIsICJNNjQgMjI0YzAtODguNCA3MS42LTE2MCAxNjAtMTYwczE2MCA3MS42IDE2MCAxNjBsMCAzNy41Yy0xMC0zLjUtMjAuOC01LjUtMzItNS41bC0xNiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDEyOGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxNiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0xNjBDNDQ4IDEwMC4zIDM0Ny43IDAgMjI0IDBTMCAxMDAuMyAwIDIyNEwwIDM4NGMwIDUzIDQzIDk2IDk2IDk2bDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xMjhjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTE2IDBjLTExLjIgMC0yMiAxLjktMzIgNS41TDY0IDIyNHoiXQogICAgfTsKICAgIGZhSGVhZHBob25lc0FsdDIgPSBmYUhlYWRwaG9uZXMyOwogICAgZmFIZWFkcGhvbmVzU2ltcGxlMiA9IGZhSGVhZHBob25lczI7CiAgICBmYUJ1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjg2NTNdLCAiZjIwNyIsICJNOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDM4NGMwIDI5LjggMjAuNCA1NC45IDQ4IDYybDAgMzRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyIDE5MiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTM0YzI3LjYtNy4xIDQ4LTMyLjIgNDgtNjJsMC0yODhjMC01My00My05Ni05Ni05Nkw5NiAwek02NCAxNzZjMC0xNy43IDE0LjMtMzIgMzItMzJsMTA0IDAgMCAxMTItMTA0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNDh6bTE4NCA4MGwwLTExMiAxMDQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMDQgMHpNOTYgMzIwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMjU2IDBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0xNTIgNzJjMC0xMy4zIDEwLjctMjQgMjQtMjRsOTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYUZpbGVQb3dlcnBvaW50MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXBvd2VycG9pbnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFjNCIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTE1MiAyNTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTQ0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNCAyNCAwYzM5LjggMCA3Mi0zMi4yIDcyLTcycy0zMi4yLTcyLTcyLTcybC00OCAwem00OCA5NmwtMjQgMCAwLTQ4IDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6Il0KICAgIH07CiAgICBmYVF1b3RlTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJxdW90ZS1sZWZ0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbODIyMCwgInF1b3RlLWxlZnQtYWx0Il0sICJmMTBkIiwgIk0wIDIxNkMwIDE0OS43IDUzLjcgOTYgMTIwIDk2bDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDggNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIxNnptMjU2IDBjMC02Ni4zIDUzLjctMTIwIDEyMC0xMjBsOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04IDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgOCA2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTM2eiJdCiAgICB9OwogICAgZmFRdW90ZUxlZnRBbHQgPSBmYVF1b3RlTGVmdDsKICAgIGZhQ2hldnJvbkRvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hldnJvbi1kb3duIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwNzgiLCAiTTIwMS40IDQwNi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE5Mi0xOTJjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjI0IDMzOC43IDU0LjYgMTY5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE5MiAxOTJ6Il0KICAgIH07CiAgICBmYUVhcnRoQXNpYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlYXJ0aC1hc2lhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzU5LCAiZ2xvYmUtYXNpYSJdLCAiZjU3ZSIsICJNNTAgMjg0LjhjNC4yIDIuMSA5IDMuMiAxNCAzLjJsNTAuNyAwYzguNSAwIDE2LjYgMy40IDIyLjYgOS40bDEzLjMgMTMuM2M2IDYgMTQuMSA5LjQgMjIuNiA5LjRsMTguNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQtMTAuNyAyNC0yNGwwLTQyLjdjMC04LjUgMy40LTE2LjYgOS40LTIyLjZsMTMuMy0xMy4zYzYtNiA5LjQtMTQuMSA5LjQtMjIuNkwzMDQgNTdjMC0xLjItLjEtMi4zLS4yLTMuNS0xNS40LTMuNi0zMS40LTUuNS00Ny44LTUuNS0xMTQuOSAwLTIwOCA5My4xLTIwOCAyMDggMCA5LjggLjcgMTkuNCAyIDI4Ljh6bTQwMy4zIDM3LjNjLTMuMi0xLjQtNi43LTIuMS0xMC41LTIuMUw0MzIgMzIwYy04LjggMC0xNi03LjItMTYtMTZzLTcuMi0xNi0xNi0xNmwtMzQuNyAwYy04LjUgMC0xNi42IDMuNC0yMi42IDkuNGwtNDUuMyA0NS4zYy02IDYtOS40IDE0LjEtOS40IDIyLjZsMCAxOC43YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE4LjcgMGM4LjUgMCAxNi42IDMuNCAyMi42IDkuNCAyLjIgMi4yIDQuNyA0LjEgNy4zIDUuNSAzOS4zLTI1LjQgNjkuNS02My42IDg0LjYtMTA4Ljh6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTEyOCAzNjhjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMjcyIDI1NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNnptNDgtMTEybDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2eiJdCiAgICB9OwogICAgZmFHbG9iZUFzaWEgPSBmYUVhcnRoQXNpYTsKICAgIGZhQ2VudFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2VudC1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUzZjUiLCAiTTIwOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjUuNGM0My42IDUuMiA4MyAyNC41IDExMy4zIDUzLjEgMTIuOSAxMi4xIDEzLjQgMzIuNCAxLjMgNDUuMnMtMzIuNCAxMy40LTQ1LjIgMS4zYy0yNC40LTIzLTU3LjItMzcuMS05My4zLTM3LjEtNzUuMSAwLTEzNiA2MC45LTEzNiAxMzZzNjAuOSAxMzYgMTM2IDEzNmMzNi4yIDAgNjktMTQuMSA5My4zLTM3LjEgMTIuOS0xMi4xIDMzLjEtMTEuNSA0NS4yIDEuM3MxMS41IDMzLjEtMS4zIDQ1LjJDMzIzIDQzMC4xIDI4My42IDQ0OS40IDI0MCA0NTQuNmwwIDI1LjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yOEM4NC43IDQzMy41IDE2IDM1Mi44IDE2IDI1NlM4NC43IDc4LjUgMTc2IDYwbDAtMjhjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVNoaWVsZENhdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGllbGQtY2F0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NzIiLCAiTTI2OS40IDIuOUMyNjUuMiAxIDI2MC43IDAgMjU2IDBzLTkuMiAxLTEzLjQgMi45TDU0LjMgODIuOGMtMjIgOS4zLTM4LjQgMzEtMzguMyA1Ny4yIC41IDk5LjIgNDEuMyAyODAuNyAyMTMuNiAzNjMuMiAxNi43IDggMzYuMSA4IDUyLjggMCAxNzIuNC04Mi41IDIxMy4yLTI2NCAyMTMuNi0zNjMuMiAuMS0yNi4yLTE2LjMtNDcuOS0zOC4zLTU3LjJMMjY5LjQgMi45ek0xNjAgMTU0LjRjMC01LjggNC43LTEwLjQgMTAuNC0xMC40bC4yIDBjMy40IDAgNi41IDEuNiA4LjUgNC4zbDQwIDUzLjNjMyA0IDcuOCA2LjQgMTIuOCA2LjRsNDggMGM1IDAgOS44LTIuNCAxMi44LTYuNGw0MC01My4zYzItMi43IDUuMi00LjMgOC41LTQuM2wuMiAwYzUuOCAwIDEwLjQgNC43IDEwLjQgMTAuNEwzNTIgMjcyYzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2bDAtMTE3LjZ6TTIxNiAyODhhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyem05Ni0xNmExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAweiJdCiAgICB9OwogICAgZmFTY2hvb2xDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2hvb2wtY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NmIiLCAiTTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjc2IDBjLTEwLjUtMTQuNi0xOS0zMC43LTI1LjEtNDhsLTkwLjkgMCAwLTg4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMSAwIDEuOSAwIDIuOSAuMSAyNi4zLTc0LjYgOTcuNS0xMjguMSAxODEuMS0xMjguMSAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTMzLjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDAtMTI3LjktMTE1LjFjLTE4LjMtMTYuNC00Ni0xNi40LTY0LjIgMEwxMjggMTI4IDY0IDEyOHptNjQgMjQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJ6TTExMiAyNTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNnpNMjg4IDEyOGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNNjQwIDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il0KICAgIH07CiAgICBmYU1hcnRpbmlHbGFzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXJ0aW5pLWdsYXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3ODY0LCAiZ2xhc3MtbWFydGluaS1hbHQiXSwgImY1N2IiLCAiTTIuNCA1MS44QzcuNCAzOS44IDE5LjEgMzIgMzIgMzJsNDQ4IDBjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOUwyODggMzAxLjMgMjg4IDQ0OCAzNTIgNDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2NCAwIDAtMTQ2LjctMjE0LjYtMjE0LjZDLjIgNzcuNS0yLjUgNjMuNyAyLjQgNTEuOHpNMzU0LjcgMTQ0bDQ4LTQ4LTI5My41IDAgNDggNDggMTk3LjUgMHoiXQogICAgfTsKICAgIGZhR2xhc3NNYXJ0aW5pQWx0ID0gZmFNYXJ0aW5pR2xhc3M7CiAgICBmYVBsdWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1ZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODI2OF0sICJmMWU2IiwgIk0xMjgtMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiAxMjggMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNjRjMCA5NS4xLTY5LjIgMTc0LjEtMTYwIDE4OS4zbDAgNjYuN2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY2LjdDMTAxLjIgMzk4LjEgMzIgMzE5LjEgMzIgMjI0bDAtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzE0LjMgOTYgMzIgOTZsNjQgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFQYW5vcmFtYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYW5vcmFtYSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMjA5IiwgIk00My45IDQ4QzE5LjcgNDggMCA2Ny43IDAgOTEuOUwwIDQyMC4xYzAgMjQuMyAxOS43IDQzLjkgNDMuOSA0My45IDUuNSAwIDEwLjctMSAxNS43LTIuOSAxMi45LTQuOSAxMDMuNC0zNy4xIDIyOC40LTM3LjFzMjE1LjUgMzIuMyAyMjguNCAzNy4xYzUgMS45IDEwLjIgMi45IDE1LjcgMi45IDI0LjMgMCA0My45LTE5LjcgNDMuOS00My45bDAtMzI4LjJjMC0yNC4zLTE5LjctNDMuOS00My45LTQzLjktNS41IDAtMTAuNyAxLTE1LjcgMi45LTEyLjkgNC45LTEwMy40IDM3LjEtMjI4LjQgMzcuMVM3Mi41IDU1LjcgNTkuNiA1MC45QzU0LjYgNDkgNDkuNCA0OCA0My45IDQ4ek03MiAxNzZhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHptMjY0LjEtMTZjNy41IDAgMTQuNiAzLjYgMTkuMSA5LjZMNDc5LjcgMzM2LjJjNS45IDcuOSA2LjQgMTguNSAxLjMgMjYuOXMtMTQuOCAxMi44LTI0LjUgMTEuMWMtNDUuOC03LjgtMTAzLjMtMTQuMi0xNjguNC0xNC4yLTY1LjYgMC0xMjMuNCA2LjUtMTY5LjMgMTQuNC05LjggMS43LTE5LjctMi45LTI0LjctMTEuNXMtNC4zLTE5LjQgMS45LTI3LjJMMTY1LjMgMjQ5YzQuNi01LjcgMTEuNS05IDE4LjctOXMxNC4yIDMuMyAxOC43IDlsMjcuNSAzNC40IDg2LjctMTEzLjljNC42LTYgMTEuNy05LjUgMTkuMi05LjV6Il0KICAgIH07CiAgICBmYUNsb2NrUm90YXRlTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG9jay1yb3RhdGUtbGVmdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJoaXN0b3J5Il0sICJmMWRhIiwgIk0yODggNjRjMTA2IDAgMTkyIDg2IDE5MiAxOTJTMzk0IDQ0OCAyODggNDQ4Yy02NS4yIDAtMTIyLjktMzIuNS0xNTcuNi04Mi4zLTEwLjEtMTQuNS0zMC4xLTE4LTQ0LjYtNy45cy0xOCAzMC4xLTcuOSA0NC42QzEyNC4xIDQ2OC42IDIwMSA1MTIgMjg4IDUxMiA0MjkuNCA1MTIgNTQ0IDM5Ny40IDU0NCAyNTZTNDI5LjQgMCAyODggMEMyMDIuMyAwIDEyNi41IDQyLjEgODAgMTA2LjdMODAgODBjMC0xNy43LTE0LjMtMzItMzItMzJTMTYgNjIuMyAxNiA4MGwwIDExMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNC42IDBjLjUgMCAxIDAgMS41IDBsODYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzguMyAwQzE1NC45IDEwMi42IDIxNyA2NCAyODggNjR6bTI0IDg4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTA0YzAgNi40IDIuNSAxMi41IDcgMTdsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02NS02NSAwLTk0LjF6Il0KICAgIH07CiAgICBmYUhpc3RvcnkgPSBmYUNsb2NrUm90YXRlTGVmdDsKICAgIGZhSmFyV2hlYXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiamFyLXdoZWF0IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImU1MTciLCAiTTMyLThjMC0xMy4zIDEwLjctMjQgMjQtMjRsMjA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMNTYgMTZDNDIuNyAxNiAzMiA1LjMgMzItOHpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptMTEyIDMybC00Mi4yIDBjLTMuMiAwLTUuOCAyLjYtNS44IDUuOCAwIDMyLjEgMjYgNTguMiA1OC4yIDU4LjJsNzUuNiAwYzMyLjEgMCA1OC4yLTI2IDU4LjItNTguMiAwLTMuMi0yLjYtNS44LTUuOC01LjhMMjA4IDE2MGMtMTkuMSAwLTM2LjMgOC40LTQ4IDIxLjctMTEuNy0xMy4zLTI4LjktMjEuNy00OC0yMS43em00OCAxMTcuN2MtMTEuNy0xMy4zLTI4LjktMjEuNy00OC0yMS43bC00Mi4yIDBjLTMuMiAwLTUuOCAyLjYtNS44IDUuOCAwIDMyLjEgMjYgNTguMiA1OC4yIDU4LjJsNzUuNiAwYzMyLjEgMCA1OC4yLTI2IDU4LjItNTguMiAwLTMuMi0yLjYtNS44LTUuOC01LjhMMjA4IDI1NmMtMTkuMSAwLTM2LjMgOC40LTQ4IDIxLjd6TTExMiAzNTJsLTQyLjIgMGMtMy4yIDAtNS44IDIuNi01LjggNS44IDAgMzIuMSAyNiA1OC4yIDU4LjIgNTguMmwyMS44IDAgMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMzIgMjEuOCAwYzMyLjEgMCA1OC4yLTI2IDU4LjItNTguMiAwLTMuMi0yLjYtNS44LTUuOC01LjhMMjA4IDM1MmMtMTkuMSAwLTM2LjMgOC40LTQ4IDIxLjctMTEuNy0xMy4zLTI4LjktMjEuNy00OC0yMS43eiJdCiAgICB9OwogICAgZmFDbG91ZEFycm93RG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1hcnJvdy1kb3duIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjIzMzcsICJjbG91ZC1kb3dubG9hZCIsICJjbG91ZC1kb3dubG9hZC1hbHQiXSwgImYwZWQiLCAiTTE0NCA0ODBjLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0IDAtNjMuNCA0MS0xMTcuMiA5Ny45LTEzNi41LTEuMy03LjctMS45LTE1LjUtMS45LTIzLjUgMC03OS41IDY0LjUtMTQ0IDE0NC0xNDQgNTUuNCAwIDEwMy41IDMxLjMgMTI3LjYgNzcuMSAxNC4yLTguMyAzMC44LTEzLjEgNDguNC0xMy4xIDUzIDAgOTYgNDMgOTYgOTYgMCAxNS43LTMuOCAzMC42LTEwLjUgNDMuNyA0NCAyMC4zIDc0LjUgNjQuNyA3NC41IDExNi4zIDAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0zMDQgMHpNMzc3IDMxM2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0zMSAzMSAwLTEwMi4xYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTAyLjEtMzEtMzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNzItNzJ6Il0KICAgIH07CiAgICBmYUNsb3VkRG93bmxvYWQgPSBmYUNsb3VkQXJyb3dEb3duOwogICAgZmFDbG91ZERvd25sb2FkQWx0ID0gZmFDbG91ZEFycm93RG93bjsKICAgIGZhVHJ1Y2tSYW1wQm94ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLXJhbXAtYm94IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInRydWNrLWxvYWRpbmciXSwgImY0ZGUiLCAiTTQwMCAzMmMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyNDguMi0yOTcuMiA4OS4yQzUuOSA0NTQuNC0zLjcgNDcyLjMgMS40IDQ4OS4yczIyLjkgMjYuNSAzOS44IDIxLjVsMzE1LjUtOTQuNiA0My43IDBjLS4yIDIuNi0uNCA1LjMtLjQgOCAwIDQ4LjYgMzkuNCA4OCA4OCA4OHM4OC0zOS40IDg4LTg4bDAtMzkyLTE3NiAwek01MjggNDI0YzAgMjIuMS0xNy45IDQwLTQwIDQwcy00MC0xNy45LTQwLTQwIDE3LjktNDAgNDAtNDBjMjIuMSAwIDM5LjkgMTcuOSA0MCAzOS45bDAgLjF6TTUxLjkgMTQ5LjVDMTguMSAxNTkuOC0uOSAxOTUuNiA5LjQgMjI5LjRsMjguMSA5MS44QzQ3LjggMzU1IDgzLjYgMzc0IDExNy40IDM2My43bDkxLjgtMjguMWMzMy44LTEwLjMgNTIuOC00Ni4xIDQyLjUtNzkuOWwtMjguMS05MS44Yy0xMC4zLTMzLjgtNDYuMS01Mi44LTc5LjktNDIuNUw1MS45IDE0OS41eiJdCiAgICB9OwogICAgZmFUcnVja0xvYWRpbmcgPSBmYVRydWNrUmFtcEJveDsKICAgIGZhQW5nbGVEb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlLWRvd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4OTY0XSwgImYxMDciLCAiTTE2OS40IDM3NC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMTkyIDMwNi43IDU0LjYgMTY5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjB6Il0KICAgIH07CiAgICBmYVBsdWdDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVnLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTVjIiwgIk0xOTItMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiAxMjggMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNDguN2MtOTguNiA4LjEtMTc2IDkwLjctMTc2IDE5MS4zIDAgMjcuMyA1LjcgNTMuMyAxNiA3Ni45bDAgMy4xYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjYuN0MxNjUuMiAzOTguMSA5NiAzMTkuMSA5NiAyMjRsMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTNzguMyA5NiA5NiA5Nmw2NCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTM1MiA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjAxLjQtNjAuOWMtNy4xLTUuMi0xNy4yLTMuNi0yMi40IDMuNWwtNTMgNzIuOS0yNi44LTI2LjhjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjMy4zIDMuMyA3LjkgNSAxMi42IDQuNnM4LjktMi44IDExLjctNi41bDY0LTg4YzUuMi03LjEgMy42LTE3LjItMy41LTIyLjN6Il0KICAgIH07CiAgICBmYVdpbmRvd01heGltaXplMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aW5kb3ctbWF4aW1pemUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0NzBdLCAiZjJkMCIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6bTI0IDY0bDMzNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDg4IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhSGFuZHNIb2xkaW5nQ2lyY2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLWhvbGRpbmctY2lyY2xlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZmIiLCAiTTMyMCAwYTEyOCAxMjggMCAxIDEgMCAyNTYgMTI4IDEyOCAwIDEgMSAwLTI1NnpNNDAgNjRjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCAxNjAuMmMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM2w1MS4xIDUxLjFjOC4zIDguMyAyMS4zIDkuNiAzMSAzLjEgMTIuOS04LjYgMTQuNy0yNi45IDMuNy0zNy44LTcuMy03LjMtMjMuMS0yMy4xLTQ3LjItNDcuMi0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwYzI0LjEgMjQuMSAzOS45IDM5LjkgNDcuMiA0Ny4ybDAgMCAyNS4zIDI1LjNjMjEgMjEgMzIuOCA0OS41IDMyLjggNzkuMmwwIDc4LjljMCAyNi41LTIxLjUgNDgtNDggNDhsLTY2LjcgMGMtMTcgMC0zMy4zLTYuNy00NS4zLTE4LjdMMjguMSAzOTMuNEMxMC4xIDM3NS40IDAgMzUxIDAgMzI1LjVMMCAxMDRDMCA4MS45IDE3LjkgNjQgNDAgNjR6bTU2MCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgMjIxLjVjMCAyNS41LTEwLjEgNDkuOS0yOC4xIDY3LjlMNTEyIDQ5My4zYy0xMiAxMi0yOC4zIDE4LjctNDUuMyAxOC43TDQwMCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNzguOWMwLTI5LjcgMTEuOC01OC4yIDMyLjgtNzkuMmwyNS4zLTI1LjMgMCAwYzcuMy03LjMgMjMuMS0yMy4xIDQ3LjItNDcuMiAxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zYy0yNC4xIDI0LjEtMzkuOSAzOS45LTQ3LjIgNDcuMi0xMSAxMS05LjIgMjkuMiAzLjcgMzcuOCA5LjcgNi41IDIyLjcgNS4yIDMxLTMuMWw1MS4xLTUxLjFjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0w1NjAgMTA0YzAtMjIuMSAxNy45LTQwIDQwLTQweiJdCiAgICB9OwogICAgZmFMb2NhdGlvblBpbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsb2NhdGlvbi1waW4iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsibWFwLW1hcmtlciJdLCAiZjA0MSIsICJNMTkyIDBDODYgMCAwIDg0LjQgMCAxODguNiAwIDMwNy45IDEyMC4yIDQ1MC45IDE3MC40IDUwNS40IDE4Mi4yIDUxOC4yIDIwMS44IDUxOC4yIDIxMy42IDUwNS40IDI2My44IDQ1MC45IDM4NCAzMDcuOSAzODQgMTg4LjYgMzg0IDg0LjQgMjk4IDAgMTkyIDB6Il0KICAgIH07CiAgICBmYU1hcE1hcmtlciA9IGZhTG9jYXRpb25QaW47CiAgICBmYUJvd2xpbmdCYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvd2xpbmctYmFsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDM2IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjQwIDgwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMjA4IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0tNjQtNjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFDYXJ0RmxhdGJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXJ0LWZsYXRiZWQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiZG9sbHktZmxhdGJlZCJdLCAiZjQ3NCIsICJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NGwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDI4OGMwIDM5LjggMjkuMSA3Mi44IDY3LjEgNzktMiA1LjMtMy4xIDExLTMuMSAxNyAwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4YzAtNS42LTEtMTEtMi43LTE2bDE5Ny41IDBjLTEuOCA1LTIuNyAxMC40LTIuNyAxNiAwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4YzAtNS42LTEtMTEtMi43LTE2bDM0LjcgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNDAwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI4OEMxMjggMzUuOCA5Mi4yIDAgNDggMEwzMiAwek0yMjQgNjRjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTc2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDI0MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTc2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDIyNCA2NHoiXQogICAgfTsKICAgIGZhRG9sbHlGbGF0YmVkID0gZmFDYXJ0RmxhdGJlZDsKICAgIGZhSG91c2VVc2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLXVzZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiaG9tZS11c2VyIl0sICJlMWIwIiwgIk0yNzcuOCA4LjZjLTEyLjMtMTEuNC0zMS4zLTExLjQtNDMuNSAwbC0yMjQgMjA4Yy05LjYgOS0xMi44IDIyLjktOCAzNS4xUzE4LjggMjcyIDMyIDI3MmwxNiAwIDAgMTc2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI4OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTc2IDE2IDBjMTMuMiAwIDI1LTguMSAyOS44LTIwLjNzMS42LTI2LjItOC0zNS4xbC0yMjQtMjA4ek0yMDAgMjU2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMTQ0IDQzMmMwLTQ0LjIgMzUuOC04MCA4MC04MGw2NCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNmwtMTkyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnoiXQogICAgfTsKICAgIGZhSG9tZVVzZXIgPSBmYUhvdXNlVXNlcjsKICAgIGZhR2hvc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2hvc3QiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxMjNdLCAiZjZlMiIsICJNNDAuMSA0NjcuMWwtMTEuMiA5QzI1LjcgNDc4LjYgMjEuOCA0ODAgMTcuOCA0ODAgOCA0ODAgMCA0NzIgMCA0NjIuMkwwIDE5MkMwIDg2IDg2IDAgMTkyIDBTMzg0IDg2IDM4NCAxOTJsMCAyNzAuMmMwIDkuOC04IDE3LjgtMTcuOCAxNy44LTQgMC03LjktMS40LTExLjEtMy45bC0xMS4yLTljLTEzLjQtMTAuNy0zMi44LTktNDQuMSAzLjlMMjY5LjMgNTA2Yy0zLjMgMy44LTguMiA2LTEzLjMgNnMtOS45LTIuMi0xMy4zLTZsLTI2LjYtMzAuNWMtMTIuNy0xNC42LTM1LjQtMTQuNi00OC4yIDBMMTQxLjMgNTA2Yy0zLjMgMy44LTguMiA2LTEzLjMgNnMtOS45LTIuMi0xMy4zLTZMODQuMiA0NzFjLTExLjMtMTIuOS0zMC43LTE0LjYtNDQuMS0zLjl6TTE2MCAxOTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptOTYgMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFDb21tZW50Tm9kZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudC1ub2RlcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNjk2IiwgIk00ODAgMjA4QzUwMy43IDIwOCA1MjUuNiAyMTUuMyA1NDMuNyAyMjcuOSA1MzYuOSAxMDAuOSA0MjUgMCAyODggMCAxNDYuNiAwIDMyIDEwNy41IDMyIDI0MCAzMiAyOTQuMyA1MS4yIDM0NC4zIDgzLjYgMzg0LjVMMzQuOCA0NzYuOGMtNC44IDktMy4zIDIwIDMuNiAyNy41czE3LjggOS44IDI3LjEgNS44bDExOC40LTUwLjdjMjcuMiAxMS40IDU2LjkgMTguNCA4OC4xIDIwLjIgLjEtMTguOSA0LjktMzggMTUtNTUuNSAxNy4xLTI5LjcgNDUuOC00OC41IDc3LTU0LjJsOS4yLTE2Yy0zLjQtMTAuNy01LjItMjItNS4yLTMzLjggMC02MS45IDUwLjEtMTEyIDExMi0xMTJ6TTMyOC42IDQ0OGMtMTcuNyAzMC42LTcuMiA2OS43IDIzLjQgODcuNHM2OS43IDcuMiA4Ny40LTIzLjRjMS41LTIuNiAyLjgtNS4zIDMuOS04bDczLjMgMGMxLjEgMi43IDIuNCA1LjQgMy45IDggMTcuNyAzMC42IDU2LjggNDEuMSA4Ny40IDIzLjRzNDEuMS01Ni44IDIzLjQtODcuNGMtMTMuNC0yMy4yLTM5LjEtMzQuOC02NC0zMS40bC0xNy42LTMwLjdjLTExIDExLjctMjUgMjAuNi00MC42IDI1LjZsMTYuNSAyOC45Yy0zLjggNC44LTYuOCAxMC05IDE1LjZsLTczLjQgMGMtMi4yLTUuNi01LjMtMTAuOC05LTE1LjZsMzMtNTcuN2M0LjEgLjggOC40IDEuMyAxMi44IDEuMyAzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NC02NCAyOC43LTY0IDY0YzAgMTMuNCA0LjEgMjUuOCAxMS4yIDM2LjFsLTM0LjYgNjAuNWMtMjUtMy40LTUwLjYgOC4zLTY0IDMxLjR6Il0KICAgIH07CiAgICBmYVBlcnNvbkFycm93RG93blRvTGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tYXJyb3ctZG93bi10by1saW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MzgiLCAiTTE5Mi0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMzE4LjMgMjk5LjFsLTQ2LjMtNjIuNCAwIDI0My4zIDI3MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDU0NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4MCAwIDAtMjQzLjMtNDYuMyA2Mi40Yy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NUMxMTAgMTMyIDE0OS43IDExMiAxOTIgMTEyczgyIDIwIDEwNy4yIDUzLjlsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42ek0xNzYgNDgwbDMyIDAgMC0xMjhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCAxMjh6TTU2Ni42IDE2Ni42bC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDQzMiAxNDYuNyA0MzIgMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTQ2LjcgMjUuNC0yNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6Il0KICAgIH07CiAgICBmYVBsdWdDaXJjbGVQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsdWctY2lyY2xlLXBsdXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU1ZiIsICJNMTkyLTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgMTI4IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTYgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDQ4LjdjLTk4LjYgOC4xLTE3NiA5MC43LTE3NiAxOTEuMyAwIDI3LjMgNS43IDUzLjMgMTYgNzYuOWwwIDMuMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY2LjdDMTY1LjIgMzk4LjEgOTYgMzE5LjEgOTYgMjI0bDAtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzc4LjMgOTYgOTYgOTZsNjQgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek00OTYgMjU2YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMTYgODBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA0OC00OCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDQ4IDAgMCA0OGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNDggNDggMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtNDggMCAwLTQ4eiJdCiAgICB9OwogICAgZmFQZXJzb25Td2ltbWluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tc3dpbW1pbmciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjc5NDYsICJzd2ltbWVyIl0sICJmNWM0IiwgIk01NTIgMTUyYTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHpNMjkzLjQgMTk4LjJsLTg4LjYgNzMuOWMxLjEgMCAyLjItLjEgMy4zLS4xIDMzLjEtLjIgNjYuMyAxMC4yIDk0LjQgMzEuNCAyMi4xIDE2LjYgMjkuMSAxNi42IDUxLjIgMCAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjQtMzEuNCA0LjggMCA5LjcgLjIgMTQuNSAuNi04LjMtMzAtMjQuMy01Ny43LTQ2LjgtODAuMi0xOC40LTE4LjQtNDAuNi0zMi43LTY1LTQxLjhsLTY4LjYtMjUuN2MtMjcuNC0xMC4zLTU4LTcuNS04My4xIDcuNmwtNTMuNSAzMi4xYy0xNS4yIDkuMS0yMC4xIDI4LjctMTEgNDMuOXMyOC43IDIwLjEgNDMuOSAxMUwyMzAgMTg3LjNjOC40LTUgMTguNi01LjkgMjcuNy0yLjVsMzUuNyAxMy40em0xMTAgMTgxLjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdTNyAzODYuMyAxNy42IDM5NC4zYzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOXoiXQogICAgfTsKICAgIGZhU3dpbW1lciA9IGZhUGVyc29uU3dpbW1pbmc7CiAgICBmYUNvbW1lbnREb3RzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21tZW50LWRvdHMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNzIsIDYyMDc1LCAiY29tbWVudGluZyJdLCAiZjRhZCIsICJNMjU2IDQ4MGMxNDEuNCAwIDI1Ni0xMDcuNSAyNTYtMjQwUzM5Ny40IDAgMjU2IDAgMCAxMDcuNSAwIDI0MGMwIDU0LjMgMTkuMiAxMDQuMyA1MS42IDE0NC41TDIuOCA0NzYuOGMtNC44IDktMy4zIDIwIDMuNiAyNy41czE3LjggOS44IDI3LjEgNS44bDExOC40LTUwLjdDMTgzLjcgNDcyLjYgMjE4LjkgNDgwIDI1NiA0ODB6TTEyOCAyMDhhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMjggMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTk2IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYUNvbW1lbnRpbmcyID0gZmFDb21tZW50RG90czI7CiAgICBmYUNoYXJ0UGllID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYXJ0LXBpZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJwaWUtY2hhcnQiXSwgImYyMDAiLCAiTTUxMi40IDI0MGwtMTc2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTc2YzAtMTcuNyAxNC40LTMyLjIgMzEuOS0yOS45IDEwNyAxNC4yIDE5MS44IDk5IDIwNiAyMDYgMi4zIDE3LjUtMTIuMiAzMS45LTI5LjkgMzEuOXpNMjIyLjYgMzcuMmMxOC4xLTMuOCAzMy44IDExIDMzLjggMjkuNWwwIDE5Ny4zYzAgNS42IDIgMTEgNS41IDE1LjNMMzk0IDQzOC43YzExLjcgMTQuMSA5LjIgMzUuNC02LjkgNDQuMS0zNC4xIDE4LjYtNzMuMiAyOS4yLTExNC43IDI5LjItMTMyLjUgMC0yNDAtMTA3LjUtMjQwLTI0MCAwLTExNS41IDgxLjUtMjExLjkgMTkwLjItMjM0Ljh6TTQ3Ny44IDI4OGw2NCAwYzE4LjUgMCAzMy4zIDE1LjcgMjkuNSAzMy44LTEwLjIgNDguNC0zNSA5MS40LTY5LjYgMTI0LjItMTIuMyAxMS43LTMxLjYgOS4yLTQyLjQtMy45TDM3NC45IDM0MC40Yy0xNy4zLTIwLjktMi40LTUyLjQgMjQuNi01Mi40bDc4LjIgMHoiXQogICAgfTsKICAgIGZhUGllQ2hhcnQgPSBmYUNoYXJ0UGllOwogICAgZmFGcm9nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZyb2ciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjUyZSIsICJNMzY4IDMyYzQxLjcgMCA3NS45IDMxLjggNzkuNyA3Mi41bDg1LjYgMjYuM2MyNS40IDcuOCA0Mi44IDMxLjMgNDIuOCA1Ny45IDAgMjEuOC0xMS43IDQxLjktMzAuNyA1Mi43bC0xNDQuNSA4Mi4xIDkyLjUgOTIuNSA1MC43IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDBjLTguNSAwLTE2LjYtMy40LTIyLjYtOS40TDM0Ni45IDM2MC4yYzExLjctMzYgMy4yLTc3LjEtMjUuNC0xMDUuNy00MC42LTQwLjYtMTA2LjMtNDAuNi0xNDYuOS0uMUwxMDEgMzI0LjRjLTYuNCA2LjEtNi43IDE2LjItLjYgMjIuNnMxNi4yIDYuNiAyMi42IC42bDczLjgtNzAuMiAuMS0uMSAuMS0uMWMzLjUtMy41IDcuMy02LjYgMTEuMy05LjIgMjcuOS0xOC41IDY1LjktMTUuNCA5MC41IDkuMiAyNC43IDI0LjcgMjcuNyA2Mi45IDkgOTAuOS0yLjYgMy44LTUuNiA3LjUtOSAxMC45TDI2MS44IDQxNiAzNTIgNDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDY0IDQ4MEMyOC43IDQ4MCAwIDQ1MS4zIDAgNDE2IDAgMjQ5LjYgMTI3IDExMi45IDI4OS4zIDk3LjUgMjk2LjIgNjAuMiAzMjguOCAzMiAzNjggMzJ6bTAgMTA0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhV2luZUJvdHRsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aW5lLWJvdHRsZSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmNzJmIiwgIk04MC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyIDAgMTEuOC02LjQgMjIuMi0xNiAyNy43bDAgMTQ1LjZjNTYuNSAyNC43IDk2IDgxLjEgOTYgMTQ2LjdsMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTc2Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDI4OGMwLTY1LjYgMzkuNS0xMjIgOTYtMTQ2LjdMOTYtNC4zQzg2LjQtOS44IDgwLTIwLjIgODAtMzJ6TTk2IDI4OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMjg4eiJdCiAgICB9OwogICAgZmFJbmJveCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbmJveCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMDFjIiwgIk05MS44IDMyQzU5LjkgMzIgMzIuOSA1NS40IDI4LjQgODYuOUwuNiAyODEuMmMtLjQgMy0uNiA2LS42IDkuMUwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTEyNS43YzAtMy0uMi02LjEtLjYtOS4xTDQ4My42IDg2LjlDNDc5LjEgNTUuNCA0NTIuMSAzMiA0MjAuMiAzMkw5MS44IDMyem0wIDY0bDMyOC41IDAgMjcuNCAxOTItNTkuOSAwYy0xMi4xIDAtMjMuMiA2LjgtMjguNiAxNy43bC0xNC4zIDI4LjZjLTUuNCAxMC44LTE2LjUgMTcuNy0yOC42IDE3LjdsLTEyMC40IDBjLTEyLjEgMC0yMy4yLTYuOC0yOC42LTE3LjdsLTE0LjMtMjguNmMtNS40LTEwLjgtMTYuNS0xNy43LTI4LjYtMTcuN0w2NC4zIDI4OCA5MS44IDk2eiJdCiAgICB9OwogICAgZmFTcXVhcmVIID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1oIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImgtc3F1YXJlIl0sICJmMGZkIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0zMjAgMTY4bDAgMTc2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNjQtOTYgMCAwIDY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTc2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA2NCA5NiAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhSFNxdWFyZSA9IGZhU3F1YXJlSDsKICAgIGZhSG91c2VNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLW1lZGljYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTNiMiIsICJNMjc3LjggOC42Yy0xMi4zLTExLjQtMzEuMy0xMS40LTQzLjUgMGwtMjI0IDIwOGMtOS42IDktMTIuOCAyMi45LTggMzUuMVMxOC44IDI3MiAzMiAyNzJsMTYgMCAwIDE3NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyODggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE3NiAxNiAwYzEzLjIgMCAyNS04LjEgMjkuOC0yMC4zczEuNi0yNi4yLTgtMzUuMWwtMjI0LTIwOHpNMjI0IDI0OGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhQ2lyY2xlQ2hldnJvblJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1jaGV2cm9uLXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNoZXZyb24tY2lyY2xlLXJpZ2h0Il0sICJmMTM4IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAwIDUxMiAwIDI1NiAyNTYgMCAxIDAgLTUxMiAwek0yNDEgMzc3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDg3LTg3LTg3LTg3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBMMzQ1IDIzOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOUwyNDEgMzc3eiJdCiAgICB9OwogICAgZmFDaGV2cm9uQ2lyY2xlUmlnaHQgPSBmYUNpcmNsZUNoZXZyb25SaWdodDsKICAgIGZhRmlsZUNzdiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNzdiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNmRkIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDgwIDAgMC0xMTJjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTc2IDAgMC0xNjUuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNMjY0IDM4MGMtMjQuMyAwLTQ0IDE5LjctNDQgNDRsMCA4MGMwIDI0LjMgMTkuNyA0NCA0NCA0NGwxNiAwYzI0LjMgMCA0NC0xOS43IDQ0LTQ0bDAtOGMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjBsMCA4YzAgMi4yLTEuOCA0LTQgNGwtMTYgMGMtMi4yIDAtNC0xLjgtNC00bDAtODBjMC0yLjIgMS44LTQgNC00bDE2IDBjMi4yIDAgNCAxLjggNCA0bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0yNC4zLTE5LjctNDQtNDQtNDRsLTE2IDB6bTEzNiAwYy0yOC43IDAtNTIgMjMuMy01MiA1MnMyMy4zIDUyIDUyIDUyYzYuNiAwIDEyIDUuNCAxMiAxMnMtNS40IDEyLTEyIDEybC0zMiAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGwzMiAwYzI4LjcgMCA1Mi0yMy4zIDUyLTUycy0yMy4zLTUyLTUyLTUyYy02LjYgMC0xMi01LjQtMTItMTJzNS40LTEyIDEyLTEybDI0IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC0yNCAwem05NiAwYy0xMSAwLTIwIDktMjAgMjBsMCAzMS42YzAgMzUuNSAxMC41IDcwLjMgMzAuMiA5OS44bDUuMSA3LjdjMy43IDUuNiAxMCA4LjkgMTYuNiA4LjlzMTIuOS0zLjMgMTYuNi04LjlsNS4xLTcuN2MxOS43LTI5LjYgMzAuMi02NC4zIDMwLjItOTkuOGwwLTMxLjZjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwbDAgMzEuNmMwIDE5LjYtNC4xIDM4LjktMTIgNTYuNy03LjktMTcuOC0xMi0zNy4xLTEyLTU2LjdsMC0zMS42YzAtMTEtOS0yMC0yMC0yMHoiXQogICAgfTsKICAgIGZhSGF0Q293Ym95ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhdC1jb3dib3kiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjhjMCIsICJNMTgyLjIgNzYuMUwxMzAuOCAzMDcuNUMxNDUuNSAzMjQuOSAxNjcuNCAzMzYgMTkyIDMzNmwyNTYgMGMyNC42IDAgNDYuNS0xMS4xIDYxLjItMjguNUw0NTcuOCA3Ni4xYy01LjctMjUuOC0yOC42LTQ0LjEtNTUtNDQuMS0xMi4yIDAtMjQuMSA0LTMzLjggMTEuM2wtNC43IDMuNWMtMjYuMyAxOS43LTYyLjQgMTkuNy04OC42IDBMMjcxIDQzLjNjLTkuOC03LjMtMjEuNi0xMS4zLTMzLjgtMTEuMy0yNi40IDAtNDkuMyAxOC4zLTU1IDQ0LjF6TTY0IDI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDIzOC4zIDAgMjU2QzAgMzYyIDg2IDQ0OCAxOTIgNDQ4bDI1NiAwYzEwNiAwIDE5Mi04NiAxOTItMTkyIDAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0yNTYgMGMtNzAuNyAwLTEyOC01Ny4zLTEyOC0xMjh6Il0KICAgIH07CiAgICBmYUZhY2VHcmluVG9uZ3VlV2luazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXRvbmd1ZS13aW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTQwLCAiZ3Jpbi10b25ndWUtd2luayJdLCAiZjU4YiIsICJNMTUyLjIgNDkwLjFDNjIuNSA0NTAuMiAwIDM2MC40IDAgMjU2IDAgMTE0LjYgMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NmMwIDEwNC40LTYyLjUgMTk0LjItMTUyLjIgMjM0LjEgNS4zLTEzIDguMi0yNy4yIDguMi00Mi4xbDAtNjEuN2MxNi45LTE2LjUgMzAuMS0zNi43IDM4LjMtNTkuMyA0LjMtMTEuOC03LjctMjEuOC0xOS42LTE4LjEtMzkuMiAxMi4yLTgzLjcgMTkuMS0xMzAuNyAxOS4xcy05MS41LTYuOS0xMzAuNy0xOS4xYy0xMS45LTMuNy0yMy45IDYuMy0xOS42IDE4LjEgOC4zIDIyLjYgMjEuNSA0Mi44IDM4LjMgNTkuM2wwIDYxLjdjMCAxNC45IDIuOSAyOS4xIDguMiA0Mi4xek0xNTIgMjEybDE2IDBjMTEgMCAyMCA5IDIwIDIwczkgMjAgMjAgMjAgMjAtOSAyMC0yMGMwLTMzLjEtMjYuOS02MC02MC02MGwtMTYgMGMtMzMuMSAwLTYwIDI2LjktNjAgNjAgMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjAgOS0yMCAyMC0yMHptMTg0IDYwYTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4ek0zMjAgNDAyLjZsMCA0NS40YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0bDAtNDUuNGMwLTE0LjcgMTEuOS0yNi42IDI2LjYtMjYuNmwyIDBjMTEuMyAwIDIxLjEgNy45IDIzLjYgMTguOSAyLjggMTIuNiAyMC44IDEyLjYgMjMuNiAwIDIuNS0xMS4xIDEyLjMtMTguOSAyMy42LTE4LjlsMiAwYzE0LjcgMCAyNi42IDExLjkgMjYuNiAyNi42ek0zMzYgMTg0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXQogICAgfTsKICAgIGZhR3JpblRvbmd1ZVdpbmsyID0gZmFGYWNlR3JpblRvbmd1ZVdpbmsyOwogICAgZmFMID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImwiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMDhdLCAiNGMiLCAiTTY0IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzUyIDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDY0IDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMzIgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUFycm93RG93blNob3J0V2lkZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLXNob3J0LXdpZGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsic29ydC1hbW91bnQtZGVzYyIsICJzb3J0LWFtb3VudC1kb3duLWFsdCJdLCAiZjg4NCIsICJNMjQ2LjYgMzc0LjZsLTk2IDk2Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMzcwLjcgOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMwNi43IDQxLjQtNDEuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zek0zMjAgMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxMjhsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxMjhsMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDEyOGwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjI0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVNvcnRBbW91bnREZXNjID0gZmFBcnJvd0Rvd25TaG9ydFdpZGU7CiAgICBmYVNvcnRBbW91bnREb3duQWx0ID0gZmFBcnJvd0Rvd25TaG9ydFdpZGU7CiAgICBmYUhvdXJnbGFzc0hhbGYyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXJnbGFzcy1oYWxmIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImhvdXJnbGFzcy0yIl0sICJmMjUyIiwgIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDAgMTFjMCA0Mi40IDE2LjkgODMuMSA0Ni45IDExMy4xbDY3LjkgNjcuOS02Ny45IDY3LjlDNDguOSAzNTMuOSAzMiAzOTQuNiAzMiA0MzdsMCAxMWMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTExYzAtNDIuNC0xNi45LTgzLjEtNDYuOS0xMTMuMWwtNjcuOS02Ny45IDY3LjktNjcuOWMzMC0zMCA0Ni45LTcwLjcgNDYuOS0xMTMuMWwwLTExYzE3LjcgMCAzMi0xNC4zIDMyLTMyUzM2OS43IDAgMzUyIDBMMzIgMHpNOTYgNzVsMC0xMSAxOTIgMCAwIDExYzAgMTktNS42IDM3LjQtMTYgNTNMMTEyIDEyOGMtMTAuMy0xNS42LTE2LTM0LTE2LTUzem0xNiAzMDljMy41LTUuMyA3LjYtMTAuMyAxMi4xLTE0LjlsNjcuOS02Ny45IDY3LjkgNjcuOWM0LjYgNC42IDguNiA5LjYgMTIuMiAxNC45TDExMiAzODR6Il0KICAgIH07CiAgICBmYUhvdXJnbGFzczIyID0gZmFIb3VyZ2xhc3NIYWxmMjsKICAgIGZhU3Bvb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Bvb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzNDgsIDYxODczLCAidXRlbnNpbC1zcG9vbiJdLCAiZjJlNSIsICJNMjQ1LjggMjIwLjljLTE0LjUtMTcuNi0yMS44LTM5LjItMjEuOC02MC44IDAtODAuMiA5Ni0xNjAuMiAxOTItMTYwLjIgNTMgMCA5NiA0MyA5NiA5NiAwIDk2LTgwIDE5Mi0xNjAuMiAxOTItMjEuNiAwLTQzLjItNy4zLTYwLjgtMjEuOEw1NC42IDUwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyNDUuOCAyMjAuOXoiXQogICAgfTsKICAgIGZhVXRlbnNpbFNwb29uID0gZmFTcG9vbjsKICAgIGZhQ3JlZGl0Q2FyZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3JlZGl0LWNhcmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNzksIDYyMDgzLCAiY3JlZGl0LWNhcmQtYWx0Il0sICJmMDlkIiwgIk0wIDEyOGwwIDMyIDUxMiAwIDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjh6bTAgODBMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNzYtNTEyIDB6TTY0IDM2MGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMTQ0IDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsNjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYUNyZWRpdENhcmRBbHQyID0gZmFDcmVkaXRDYXJkMjsKICAgIGZhRmlsZUludm9pY2VEb2xsYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1pbnZvaWNlLWRvbGxhciIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNTcxIiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNNjQgODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw4OCA2NEM3NC43IDY0IDY0IDc0LjcgNjQgODh6bTAgOTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTExMiA3NmwwIDRjLTI4LjggLjMtNTIgMjMuNy01MiA1Mi41IDAgMjUuNyAxOC41IDQ3LjYgNDMuOSA1MS44bDQxLjcgN2M2IDEgMTAuNCA2LjIgMTAuNCAxMi4zIDAgNi45LTUuNiAxMi41LTEyLjUgMTIuNUwxNTIgNDAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGwyNCAwIDAgNGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTQuN2MyNS00LjEgNDQtMjUuNyA0NC01MS44IDAtMjUuNy0xOC41LTQ3LjYtNDMuOS01MS44bC00MS43LTdjLTYtMS0xMC40LTYuMi0xMC40LTEyLjMgMC02LjkgNS42LTEyLjUgMTIuNS0xMi41bDQ3LjUgMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTggMCAwLTRjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIweiJdCiAgICB9OwogICAgZmFTcGFnaGV0dGlNb25zdGVyRmx5aW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwYWdoZXR0aS1tb25zdGVyLWZseWluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJwYXN0YWZhcmlhbmlzbSJdLCAiZjY3YiIsICJNMjA4IDY0YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDBjMCAxNi4yLTYgMzEuMS0xNiA0Mi4zbDE1LjYgMzEuMmMxOC43LTYgMzkuOS05LjUgNjQuNC05LjVzNDUuOCAzLjUgNjQuNCA5LjVMNDAwIDEwNi4zYy0xMC0xMS4zLTE2LTI2LjEtMTYtNDIuMyAwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0LTI4LjcgNjQtNjQgNjRjLTEuNyAwLTMuNC0uMS01LjEtLjJMNDI3LjggMTU4YzIxLjEgMTMuNiAzNy43IDMwLjIgNTEuNCA0Ni40IDcuMSA4LjMgMTMuNSAxNi42IDE5LjMgMjRsMS40IDEuOGM2LjMgOC4xIDExLjYgMTQuOCAxNi43IDIwLjQgMTAuNyAxMS43IDE2LjEgMTMuNCAxOS40IDEzLjQgMi41IDAgNC4zLS42IDcuMS0zLjMgMy43LTMuNSA3LjEtOC44IDEyLjUtMTcuNGwuNi0uOWM0LjYtNy40IDExLTE3LjYgMTkuNC0yNS43IDkuNy05LjMgMjIuOS0xNi43IDQwLjQtMTYuNyAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMi41IDAtNC4zIC42LTcuMSAzLjMtMy43IDMuNS03LjEgOC44LTEyLjUgMTcuNGwtLjYgLjljLTQuNiA3LjQtMTEgMTcuNi0xOS40IDI1LjctOS43IDkuMy0yMi45IDE2LjctNDAuNCAxNi43LTE4LjUgMC0zMi45LTguNS00NC4zLTE4LjYtMy4xIDQtNi42IDguMy0xMC41IDEyLjcgMS40IDQuMyAyLjggOC41IDQgMTIuNSAuOSAzIDEuOCA1LjggMi42IDguNiAzIDkuOCA1LjUgMTguMiA4LjYgMjUuOSAzLjkgOS44IDcuNCAxNS40IDEwLjggMTguNSAyLjYgMi40IDUuOSA0LjMgMTIuOCA0LjMgOC43IDAgMTYuOS00LjIgMzMuNy0xMy4yIDE1LTggMzUuNy0xOC44IDYyLjMtMTguOCAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMTMuNCAwLTI0LjcgNS4yLTM5LjcgMTMuMi0xIC42LTIuMSAxLjEtMy4yIDEuNy0xMy4xIDcuMS0zMS42IDE3LjEtNTMuMSAxNy4xLTE4LjQgMC0zMy42LTYuMS00NS41LTE3LjItMTEuMS0xMC4zLTE3LjktMjMuNy0yMi43LTM2LTMuNi05LTYuNy0xOS4xLTkuNS0yOC41LTE2LjQgMTIuMy0zNi4xIDIzLjYtNTguOSAzMS4zIDMuNiAxMC44IDguNCAyMy41IDE0LjQgMzYuMiA3LjUgMTUuOSAxNi4yIDMwLjQgMjUuOCA0MC41IDkuNiAxMC4yIDE3LjcgMTMuNyAyNC41IDEzLjcgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTI1LjIgMC00NS0xMy41LTU5LjUtMjguOC0xNC41LTE1LjQtMjUuNy0zNC45LTM0LjItNTMtOC0xNy0xNC4xLTMzLjgtMTguMy00Ni45LTUuMiAuNC0xMC42IC42LTE2IC42cy0xMC44LS4yLTE2LS42Yy00LjIgMTMtMTAuMyAyOS45LTE4LjMgNDYuOS04LjUgMTguMS0xOS44IDM3LjYtMzQuMiA1My0xNC40IDE1LjMtMzQuMyAyOC44LTU5LjUgMjguOC0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzYuOCAwIDE1LTMuNSAyNC41LTEzLjcgOS41LTEwLjEgMTguMy0yNC42IDI1LjgtNDAuNSA1LjktMTIuNiAxMC43LTI1LjQgMTQuNC0zNi4yLTIyLjgtNy43LTQyLjUtMTktNTguOS0zMS4zLTIuOSA5LjQtNiAxOS41LTkuNSAyOC41LTQuOCAxMi4yLTExLjYgMjUuNi0yMi43IDM2LTExLjkgMTEuMS0yNy4xIDE3LjItNDUuNSAxNy4yLTEzLjEgMC0yNC41LTQuMS0zMy44LTguOS03LjktNC0xNS43LTkuMi0yMi4xLTEzLjVsMCAwLTIuNC0xLjZjLTE1LjMtMTAuMi0yNS44LTE2LTM3LjctMTYtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyOC4xIDAgNDkuNiAxNC4yIDY0LjMgMjRsMi40IDEuNmM2LjkgNC42IDEyLjEgOC4xIDE3LjIgMTAuNyA1LjUgMi44IDkuMSAzLjYgMTIgMy42IDYuOCAwIDEwLjItMS45IDEyLjgtNC4zIDMuNC0zLjIgNy04LjggMTAuOC0xOC41IDMtNy43IDUuNi0xNi4xIDguNi0yNS45IC44LTIuNyAxLjctNS42IDIuNi04LjYgMS4yLTQgMi42LTguMiA0LTEyLjUtMy45LTQuNS03LjQtOC44LTEwLjUtMTIuNy0xMS40IDEwLjEtMjUuOSAxOC42LTQ0LjMgMTguNi0xNy41IDAtMzAuNy03LjQtNDAuNC0xNi43LTguNC04LjEtMTQuOC0xOC4zLTE5LjQtMjUuN2wtLjYtLjljLTUuNC04LjYtOC44LTEzLjktMTIuNS0xNy40LTIuOC0yLjctNC42LTMuMy03LjEtMy4zLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMTcuNSAwIDMwLjcgNy40IDQwLjQgMTYuNyA4LjQgOC4xIDE0LjggMTguMyAxOS40IDI1LjdsLjYgLjljNS40IDguNiA4LjggMTMuOSAxMi41IDE3LjQgMi44IDIuNyA0LjYgMy4zIDcuMSAzLjMgMy4zIDAgOC43LTEuNyAxOS40LTEzLjQgNS4xLTUuNiAxMC40LTEyLjMgMTYuNy0yMC40bDEuNC0xLjhjNS44LTcuNCAxMi4yLTE1LjcgMTkuMy0yNCAxMy44LTE2LjIgMzAuMy0zMi44IDUxLjQtNDYuNGwtMTUuMS0zMC4yYy0xLjcgLjEtMy40IC4yLTUuMSAuMi0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0IDY0IDI4LjcgNjQgNjR6bTIwOCAwYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6Il0KICAgIH07CiAgICBmYVBhc3RhZmFyaWFuaXNtID0gZmFTcGFnaGV0dGlNb25zdGVyRmx5aW5nOwogICAgZmFNYXJ0aW5pR2xhc3NDaXRydXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFydGluaS1nbGFzcy1jaXRydXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiY29ja3RhaWwiXSwgImY1NjEiLCAiTTU3NiA4MGMwLTQ0LjItMzUuOC04MC04MC04MC0xOCAwLTM0LjYgNi00OCAxNmwtODEgMGMyMy42LTQ3LjQgNzIuNS04MCAxMjktODAgNzkuNSAwIDE0NCA2NC41IDE0NCAxNDRTNTc1LjUgMjI0IDQ5NiAyMjRjLTYuNSAwLTEzLS40LTE5LjMtMS4zbDY0LTc0LjdjMS4xLTEuMyAyLjItMi43IDMuMy00LjEgMTkuNC0xNC42IDMyLTM3LjggMzItNjR6TTY2LjkgODIuNkM3Mi4yIDcxLjMgODMuNSA2NCA5NiA2NGwzODQgMGMxMi41IDAgMjMuOCA3LjMgMjkuMSAxOC42czMuNCAyNC43LTQuOCAzNC4ybC0xODQuMyAyMTUgMCAxMTYuMiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2NCAwIDAtMTE2LjItMTg0LjMtMjE1Yy04LjEtOS41LTEwLTIyLjgtNC44LTM0LjJ6TTE2NS42IDEyOEwyODggMjcwLjggNDEwLjQgMTI4IDE2NS42IDEyOHoiXQogICAgfTsKICAgIGZhQ29ja3RhaWwgPSBmYU1hcnRpbmlHbGFzc0NpdHJ1czsKICAgIGZhQnVsbGhvcm4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVsbGhvcm4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMjYsIDEyODM2M10sICJmMGExIiwgIk00NjEuMiAxOC45QzQ3Mi43IDI0IDQ4MCAzNS40IDQ4MCA0OGwwIDQxNmMwIDEyLjYtNy4zIDI0LTE4LjggMjkuMXMtMjQuOCAzLjItMzQuMy01LjFsLTQ2LjYtNDAuN2MtNDMuNi0zOC4xLTk4LjctNjAuMy0xNTYuNC02M2wwIDk1LjdjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZDNTcuMyAzODQgMCAzMjYuNyAwIDI1NlM1Ny4zIDEyOCAxMjggMTI4bDg0LjUgMGM2MS44LS4yIDEyMS40LTIyLjcgMTY3LjktNjMuM2w0Ni42LTQwLjdjOS40LTguMyAyMi45LTEwLjIgMzQuMy01LjF6TTIyNCAzMjBsMCAuMmM3MC4zIDIuNyAxMzcuOCAyOC41IDE5MiA3My40bDAtMjc1LjNjLTU0LjIgNDQuOS0xMjEuNyA3MC43LTE5MiA3My40TDIyNCAzMjB6Il0KICAgIH07CiAgICBmYUJveFRpc3N1ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3gtdGlzc3VlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwNWIiLCAiTTEwMy45IDMybDE2MSAwYzEzLjggMCAyNiA4LjggMzAuNCAyMS45bDE3LjQgNTIuMmM0LjQgMTMuMSAxNi42IDIxLjkgMzAuNCAyMS45bDYwLjUgMGMyMS44IDAgMzcuMyAyMS40IDMwLjQgNDIuMUwzODQgMzIwIDEyOCAzMjAgNzIuNyA3MC45QzY4LjIgNTEgODMuNCAzMiAxMDMuOSAzMnpNNDggMjU2bDE2LjYgMCAxNi41IDc0LjRDODYgMzUyLjQgMTA1LjUgMzY4IDEyOCAzNjhsMjU2IDBjMjAuNyAwIDM5LTEzLjIgNDUuNS0zMi44bDI2LjQtNzkuMiA4LjEgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDEyOGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMzA0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4eiJdCiAgICB9OwogICAgZmFNYXR0cmVzc1BpbGxvdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXR0cmVzcy1waWxsb3ciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUyNSIsICJNMjU2IDY0TDY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwIDAtMzg0em00OCAzODRsMjA4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTIwOCAwIDAgMzg0ek02NCAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xOTJ6Il0KICAgIH07CiAgICBmYUNoZXZyb25MZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXZyb24tbGVmdCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzkwMDFdLCAiZjA1MyIsICJNOS40IDIzMy40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxOTIgMTkyYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMNzcuMyAyNTYgMjQ2LjYgODYuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTkyIDE5MnoiXQogICAgfTsKICAgIGZhQ2xvdWRNb29uUmFpbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1tb29uLXJhaW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjczYyIsICJNNDQ4IDBjLTY4LjYgMC0xMjcuMSA0My4xLTE0OS44IDEwMy44IDE3LjEgMTQuMSAyOS42IDMzLjUgMzQuOSA1NS44IDM5LjkgMjEuNyA2Ni45IDYzLjkgNjYuOSAxMTIuNSAwIDEzLjUtMi4xIDI2LjUtNS45IDM4LjcgMTYuOSA2IDM1IDkuMyA1My45IDkuMyA0MyAwIDgyLjEtMTcgMTEwLjgtNDQuNiA0LjYtNC40IDUuOS0xMS4yIDMuMy0xN3MtOC42LTkuMy0xNC45LTguOGMtMyAuMi02LjEgLjQtOS4yIC40LTYzLjUgMC0xMTUtNTEuNS0xMTUtMTE1IDAtNDUuMSAyNi04NC4yIDYzLjgtMTAzIDUuNy0yLjggOS04LjkgOC4yLTE1LjJTNDg5LjYgNS4zIDQ4My40IDMuOUM0NzIgMS40IDQ2MC4yIDAgNDQ4IDB6TTI3MiAzNTJjNDQuMiAwIDgwLTM1LjggODAtODAgMC0zOS0yNy45LTcxLjUtNjQuOC03OC42IC41LTMuMSAuOC02LjIgLjgtOS40IDAtMzAuOS0yNS4xLTU2LTU2LTU2LTEyLjQgMC0yMy45IDQtMzMuMSAxMC44LTEzLjQtMjUuNS00MC4xLTQyLjgtNzAuOS00Mi44LTQ0LjIgMC04MCAzNS44LTgwIDgwIDAgNy40IDEgMTQuNiAyLjkgMjEuNS0yOS44IDExLjYtNTAuOSA0MC42LTUwLjkgNzQuNSAwIDQ0LjIgMzUuOCA4MCA4MCA4MGwxOTIgMHpNNjkgNDAxLjFjLTEyLjYtNC4yLTI2LjIgMi42LTMwLjQgMTUuMkwxNy4yIDQ4MC40QzEzIDQ5MyAxOS44IDUwNi42IDMyLjQgNTEwLjhzMjYuMi0yLjYgMzAuNC0xNS4ybDIxLjQtNjQuMWM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjR6bTEyMCAwYy0xMi42LTQuMi0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjQgNjQuMWMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS40LTY0LjFjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40em0xMjAgMGMtMTIuNi00LjItMjYuMiAyLjYtMzAuNCAxNS4ybC0yMS40IDY0LjFjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuNC02NC4xYzQuMi0xMi42LTIuNi0yNi4yLTE1LjItMzAuNHoiXQogICAgfTsKICAgIGZhQXJyb3dEb3duMTkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctZG93bi0xLTkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic29ydC1udW1lcmljLWFzYyIsICJzb3J0LW51bWVyaWMtZG93biJdLCAiZjE2MiIsICJNNDE4LjcgMzhjOC4zIDYgMTMuMyAxNS43IDEzLjMgMjZsMCA5NiAxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDAgMC01MS42LTUuOSAyYy0xNi44IDUuNi0zNC45LTMuNS00MC41LTIwLjJzMy41LTM0LjkgMjAuMi00MC41bDQ4LTE2YzkuOC0zLjMgMjAuNS0xLjYgMjguOCA0LjR6TTM2NS4xIDQzMC42bDExLjctMThjLTMyLjktOS45LTU2LjgtNDAuNS01Ni44LTc2LjYgMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDIyLjktNi42IDQ1LjMtMTkuMSA2NC41bC00Mi4xIDY0LjljLTkuNiAxNC44LTI5LjQgMTkuMS00NC4zIDkuNHMtMTkuMS0yOS40LTkuNC00NC4zek00MjQgMzM2YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTE1MC42IDQ3MC42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMzcwLjcgOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMwNi43IDQxLjQtNDEuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC05NiA5NnoiXQogICAgfTsKICAgIGZhU29ydE51bWVyaWNBc2MgPSBmYUFycm93RG93bjE5OwogICAgZmFTb3J0TnVtZXJpY0Rvd24gPSBmYUFycm93RG93bjE5OwogICAgZmFIYW5kU3BvY2syID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtc3BvY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0MDZdLCAiZjI1OSIsICJNMjE0LjkgMjMuN0MyMTAuMyA2LjYgMTkyLjgtMy41IDE3NS43IDEuMXMtMjcuMiAyMi4xLTIyLjYgMzkuMkwyMDYgMjM3LjhjMi41IDkuMi00LjUgMTguMi0xNCAxOC4yLTYuNCAwLTEyLTQuMi0xMy45LTEwLjNMMTM0LjYgMTAyLjdjLTUuMS0xNi45LTIzLTI2LjQtMzkuOS0yMS4zcy0yNi40IDIzLTIxLjMgMzkuOWw2Mi44IDIwNi40YzIuNCA3LjktNy4yIDEzLjgtMTMuMiA4LjFMNjcuNiAyODNjLTE2LTE1LjItNDEuMy0xNC42LTU2LjYgMS40Uy0zLjYgMzI1LjcgMTIuNCAzNDFMMTI0LjggNDQ4YzQzLjEgNDEuMSAxMDAuNCA2NCAxNjAgNjRsMTkuMSAwYy4xIDAgLjEtLjEgLjEtLjFzLjEtLjEgLjEtLjFjNTguMy0zLjUgMTA4LjYtNDMuMiAxMjUuMy05OS43bDgxLjItMjc1YzUtMTYuOS00LjctMzQuNy0yMS42LTM5LjhzLTM0LjcgNC43LTM5LjggMjEuNkw0MTEuNSAyNDcuMWMtMS42IDUuMy02LjQgOC45LTEyIDguOS03LjkgMC0xMy44LTcuMy0xMi4yLTE1LjFsMzYtMTcwLjNjMy43LTE3LjMtNy40LTM0LjMtMjQuNy0zNy45cy0zNC4zIDcuNC0zNy45IDI0LjdMMzIzLjEgMjM1LjFjLTIuNiAxMi4yLTEzLjMgMjAuOS0yNS44IDIwLjktMTEuOSAwLTIyLjQtOC0yNS40LTE5LjVsLTU3LTIxMi44eiJdCiAgICB9OwogICAgZmFXYW5kTWFnaWNTcGFya2xlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3YW5kLW1hZ2ljLXNwYXJrbGVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbIm1hZ2ljLXdhbmQtc3BhcmtsZXMiXSwgImUyY2EiLCAiTTI2My40LTI3TDI3OC4yIDkuOCAzMTUgMjQuNmMzIDEuMiA1IDQuMiA1IDcuNHMtMiA2LjItNSA3LjRMMjc4LjIgNTQuMiAyNjMuNCA5MWMtMS4yIDMtNC4yIDUtNy40IDVzLTYuMi0yLTcuNC01TDIzMy44IDU0LjIgMTk3IDM5LjRjLTMtMS4yLTUtNC4yLTUtNy40czItNi4yIDUtNy40TDIzMy44IDkuOCAyNDguNi0yN2MxLjItMyA0LjItNSA3LjQtNXM2LjIgMiA3LjQgNXpNMTEwLjcgNDEuN2wyMS41IDUwLjEgNTAuMSAyMS41YzUuOSAyLjUgOS43IDguMyA5LjcgMTQuN3MtMy44IDEyLjItOS43IDE0LjdsLTUwLjEgMjEuNS0yMS41IDUwLjFjLTIuNSA1LjktOC4zIDkuNy0xNC43IDkuN3MtMTIuMi0zLjgtMTQuNy05LjdMNTkuOCAxNjQuMiA5LjcgMTQyLjdDMy44IDE0MC4yIDAgMTM0LjQgMCAxMjhzMy44LTEyLjIgOS43LTE0LjdMNTkuOCA5MS44IDgxLjMgNDEuN0M4My44IDM1LjggODkuNiAzMiA5NiAzMnMxMi4yIDMuOCAxNC43IDkuN3pNNDY0IDMwNGM2LjQgMCAxMi4yIDMuOCAxNC43IDkuN2wyMS41IDUwLjEgNTAuMSAyMS41YzUuOSAyLjUgOS43IDguMyA5LjcgMTQuN3MtMy44IDEyLjItOS43IDE0LjdsLTUwLjEgMjEuNS0yMS41IDUwLjFjLTIuNSA1LjktOC4zIDkuNy0xNC43IDkuN3MtMTIuMi0zLjgtMTQuNy05LjdsLTIxLjUtNTAuMS01MC4xLTIxLjVjLTUuOS0yLjUtOS43LTguMy05LjctMTQuN3MzLjgtMTIuMiA5LjctMTQuN2w1MC4xLTIxLjUgMjEuNS01MC4xYzIuNS01LjkgOC4zLTkuNyAxNC43LTkuN3pNNDYwIDBjMTEgMCAyMS42IDQuNCAyOS41IDEyLjJsNDIuMyA0Mi4zQzUzOS42IDYyLjQgNTQ0IDczIDU0NCA4NHMtNC40IDIxLjYtMTIuMiAyOS41bC04OC4yIDg4LjItMTAxLjMtMTAxLjMgODguMi04OC4yQzQzOC40IDQuNCA0NDkgMCA0NjAgMHpNNDQuMiAzOTguNUwzMDguNCAxMzQuMyA0MDkuNyAyMzUuNiAxNDUuNSA0OTkuOEMxMzcuNiA1MDcuNiAxMjcgNTEyIDExNiA1MTJzLTIxLjYtNC40LTI5LjUtMTIuMkw0NC4yIDQ1Ny41QzM2LjQgNDQ5LjYgMzIgNDM5IDMyIDQyOHM0LjQtMjEuNiAxMi4yLTI5LjV6Il0KICAgIH07CiAgICBmYU1hZ2ljV2FuZFNwYXJrbGVzID0gZmFXYW5kTWFnaWNTcGFya2xlczsKICAgIGZhQ29tbWVudE1lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudC1tZWRpY2FsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ZjUiLCAiTTI1NiA0ODBjMTQxLjQgMCAyNTYtMTA3LjUgMjU2LTI0MFMzOTcuNCAwIDI1NiAwIDAgMTA3LjUgMCAyNDBjMCA1NC4zIDE5LjIgMTA0LjMgNTEuNiAxNDQuNUwyLjggNDc2LjhjLTQuOCA5LTMuMyAyMCAzLjYgMjcuNXMxNy44IDkuOCAyNy4xIDUuOGwxMTguNC01MC43QzE4My43IDQ3Mi42IDIxOC45IDQ4MCAyNTYgNDgwek0yMTcuNiAxNTMuNmMwLTEwLjYgOC42LTE5LjIgMTkuMi0xOS4ybDM4LjQgMGMxMC42IDAgMTkuMiA4LjYgMTkuMiAxOS4ybDAgNDggNDggMGMxMC42IDAgMTkuMiA4LjYgMTkuMiAxOS4ybDAgMzguNGMwIDEwLjYtOC42IDE5LjItMTkuMiAxOS4ybC00OCAwIDAgNDhjMCAxMC42LTguNiAxOS4yLTE5LjIgMTkuMmwtMzguNCAwYy0xMC42IDAtMTkuMi04LjYtMTkuMi0xOS4ybDAtNDgtNDggMGMtMTAuNiAwLTE5LjItOC42LTE5LjItMTkuMmwwLTM4LjRjMC0xMC42IDguNi0xOS4yIDE5LjItMTkuMmw0OCAwIDAtNDh6Il0KICAgIH07CiAgICBmYUJlbGxTbGFzaDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmVsbC1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODI3NywgNjE5NDNdLCAiZjFmNiIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtODcuNS04Ny41YzE3LjItMi40IDMwLjUtMTcuMyAzMC41LTM1LjIgMC04LjEtMi43LTE1LjktNy44LTIyLjJsLTkuOC0xMi4yQzQ2NC40IDMwOC41IDQ0OCAyNjEuOCA0NDggMjEzLjdsMC0yMS43YzAtNzcuNC01NS0xNDItMTI4LTE1Ni44bDAtMy4yYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMy4yYy0zOC42IDcuOC03Mi4yIDI5LjYtOTUuMiA1OS43TDQxLTI0Ljl6bTg3IDIzOC41YzAgNDguMS0xNi40IDk0LjgtNDYuNCAxMzIuNGwtOS44IDEyLjJjLTUgNi4zLTcuOCAxNC4xLTcuOCAyMi4yIDAgMTkuNiAxNS45IDM1LjUgMzUuNSAzNS41bDIzNS4zIDAtMjA2LjktMjA2LjkgMCA0LjV6TTI4OCA1MTJjMjkuOCAwIDU0LjktMjAuNCA2Mi00OGwtMTI0IDBjNy4xIDI3LjYgMzIuMiA0OCA2MiA0OHoiXQogICAgfTsKICAgIGZhSGFuZHNoYWtlU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZHNoYWtlLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNTc0MzksICJoYW5kc2hha2UtYWx0LXNsYXNoIiwgImhhbmRzaGFrZS1zaW1wbGUtc2xhc2giXSwgImUwNjAiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTI4OC0yODggMTQuMi0xNC4yYzQuMi00LjIgOS41LTYuNSAxNC45LTYuOSA2LjgtLjYgMTMuOCAxLjcgMTkgNi45TDUwNS42IDM3NiA1NzYgMzIwIDU3NiAzMiA0NjQgOTYgNDQwLjIgODAuMUM0MjQuNCA2OS42IDQwNS45IDY0IDM4Ni45IDY0bC03MC40IDBjLTEuMSAwLTIuMyAwLTMuNCAuMS0xNi45IC45LTMyLjggOC41LTQ0LjIgMjEuMWwtNTUuOCA2Mi4xLTM0LTM0IDQ0LjMtNDkuMi0zOS43IDBjLTE1LjMgMC0zMC4xIDMuNi00My41IDEwLjRMNDEtMjQuOXpNMCA2OS44TDAgMzIwIDE1Ni40IDQ1MC4zYzIzIDE5LjIgNTIgMjkuNyA4MS45IDI5LjdsMTUuNyAwLTctN2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQxIDQxIDkgMGMyMi4yIDAgNDMuOC01LjggNjIuOC0xNi40TDAgNjkuOHoiXQogICAgfTsKICAgIGZhSGFuZHNoYWtlQWx0U2xhc2ggPSBmYUhhbmRzaGFrZVNsYXNoOwogICAgZmFIYW5kc2hha2VTaW1wbGVTbGFzaCA9IGZhSGFuZHNoYWtlU2xhc2g7CiAgICBmYUJvdHRsZVdhdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvdHRsZS13YXRlciIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlNGM1IiwgIk0xMTItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMEM5NC4zIDMyIDgwIDE3LjcgODAgMHMxNC4zLTMyIDMyLTMyek0xNiAxNDRjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTYwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAyNC4xLTEzLjMgNDUuMS0zMyA1NiAxOS43IDEwLjkgMzMgMzEuOSAzMyA1NnMtMTMuMyA0NS4xLTMzIDU2YzE5LjcgMTAuOSAzMyAzMS45IDMzIDU2cy0xMy4zIDQ1LjEtMzMgNTZjMTkuNyAxMC45IDMzIDMxLjkgMzMgNTYgMCAzNS4zLTI4LjcgNjQtNjQgNjRMODAgNTQ0Yy0zNS4zIDAtNjQtMjguNy02NC02NCAwLTI0LjEgMTMuMy00NS4xIDMzLTU2LTE5LjctMTAuOS0zMy0zMS45LTMzLTU2czEzLjMtNDUuMSAzMy01NmMtMTkuNy0xMC45LTMzLTMxLjktMzMtNTZzMTMuMy00NS4xIDMzLTU2Yy0xOS43LTEwLjktMzMtMzEuOS0zMy01NnoiXQogICAgfTsKICAgIGZhRGljZUQyMCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWNlLWQyMCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNmNmIiwgIk0yMjQuNC04LjJjMTkuNi0xMS4xIDQzLjYtMTEuMSA2My4xIDBsMTkyIDEwOC44YzIwIDExLjQgMzIuNCAzMi42IDMyLjQgNTUuN2wwIDIxNS42YzAgMjMtMTIuNCA0NC4zLTMyLjQgNTUuN2wtMTkyIDEwOC44Yy0xOS42IDExLjEtNDMuNiAxMS4xLTYzLjEgMEwzMi40IDQyNy41QzEyLjQgNDE2LjEgMCAzOTQuOCAwIDM3MS44TDAgMTU2LjJjMC0yMyAxMi40LTQ0LjMgMzIuNC01NS43TDIyNC40LTguMnptNTIgNzMuMkMyNjcgNDkuOCAyNDUgNDkuOCAyMzUuNiA2NWwtNzYuNiAxMjMuNy04NS40LTQ2LjMtMy44LTEuNmMtOC45LTIuNy0xOC44IDEuMS0yMy40IDkuNnMtMi40IDE4LjkgNC43IDI0LjhsMy4zIDIuMyA4My40IDQ1LjItNzQuNiAxMjAuNkM1NS4zIDM1Ni4yIDYxIDM3MyA3NSAzNzguNGwxNjEgNjEuOSAwIDM5LjdjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC0zOS43IDE2MS02MS45YzE0LTUuNCAxOS43LTIyLjIgMTEuOC0zNWwtNzQuNy0xMjAuNiA4My40LTQ1LjJjOS43LTUuMyAxMy4zLTE3LjQgOC4xLTI3LjFzLTE3LjQtMTMuMy0yNy4xLTguMUwzNTMgMTg4LjcgMjc2LjQgNjV6bS00NyAzMjkuOWwtMTIyLTQ2LjkgNTQuNS04OC4xIDY3LjUgMTM1ek00MDQuNiAzNDhsLTEyMiA0Ni45IDY3LjUtMTM1IDU0LjUgODguMXpNMzE5LjMgMjMyTDI1NiAzNTguNiAxOTIuNyAyMzIgMzE5LjMgMjMyek0zMDggMTkybC0xMDQuMSAwIDUyLTg0IDUyIDg0eiJdCiAgICB9OwogICAgZmFBcnJvd0Rvd25aQSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLXotYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LWFscGhhLWRlc2MiLCAic29ydC1hbHBoYS1kb3duLWFsdCJdLCAiZjg4MSIsICJNMjMwLjYgMzkwLjZsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtODAtODBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMzcwLjcgOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMwNi43IDI1LjQtMjUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zek0yODggNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOUwzOTcuMyAxNjAgNDQ4IDE2MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45TDM3MC44IDk2IDMyMCA5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQxMi42IDI3My43bDgwIDE2MGM3LjkgMTUuOCAxLjUgMzUtMTQuMyA0Mi45cy0zNSAxLjUtNDIuOS0xNC4zbC03LjItMTQuMy04OC40IDAtNy4yIDE0LjNjLTcuOSAxNS44LTI3LjEgMjIuMi00Mi45IDE0LjNzLTIyLjItMjcuMS0xNC4zLTQyLjlsODAtMTYwYzUuNC0xMC44IDE2LjUtMTcuNyAyOC42LTE3LjdzMjMuMiA2LjggMjguNiAxNy43ek0zODQgMzU5LjZsLTIwLjIgNDAuNCA0MC40IDAtMjAuMi00MC40eiJdCiAgICB9OwogICAgZmFTb3J0QWxwaGFEZXNjID0gZmFBcnJvd0Rvd25aQTsKICAgIGZhU29ydEFscGhhRG93bkFsdCA9IGZhQXJyb3dEb3duWkE7CiAgICBmYUJydXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJydXNoIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1NWQiLCAiTTE2Mi40IDZjLTEuNS0zLjYtNS02LTguOS02bC0xOSAwYy0zLjkgMC03LjUgMi40LTguOSA2TDEwNC45IDU3LjdjLTMuMiA4LTE0LjYgOC0xNy44IDBMNjYuNCA2Yy0xLjUtMy42LTUtNi04LjktNkw0OCAwQzIxLjUgMCAwIDIxLjUgMCA0OGwwIDIwOCAzODQgMCAwLTIwOGMwLTI2LjUtMjEuNS00OC00OC00OEwyMzAuNSAwYy0zLjkgMC03LjUgMi40LTguOSA2TDIwMC45IDU3LjdjLTMuMiA4LTE0LjYgOC0xNy44IDBMMTYyLjQgNnpNMCAzMDRsMCAxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw2NCAwIDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGwwLTY0IDY0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNi0zODQgMHpNMTkyIDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNiAxNiA3LjIgMTYgMTYtNy4yIDE2LTE2IDE2eiJdCiAgICB9OwogICAgZmFQZXJzb25XYWxraW5nRGFzaGVkTGluZUFycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXdhbGtpbmctZGFzaGVkLWxpbmUtYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU1MyIsICJNMTYwIDgwYTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyek03My40IDIyNy45bDIyLjYtMjIuNiAwIDY5LjNjMCAyOCAxMi4yIDU0LjcgMzMuNSA3Mi45bDcxLjQgNjEuMmM1LjkgNS4xIDkuOCAxMi4xIDEwLjkgMTkuOGwxMi42IDg4LjFjMi41IDE3LjUgMTguNyAyOS43IDM2LjIgMjcuMnMyOS43LTE4LjcgMjcuMi0zNi4ybC0xMi42LTg4LjFjLTMuMy0yMy4xLTE0LjktNDQuMS0zMi42LTU5LjNsLTM0LjUtMjkuNiAwLTExNS4yIDMuOCA0LjdjMTguMiAyMi44IDQ1LjggMzYgNzUgMzZsMzMuMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMy4yIDBjLTkuNyAwLTE4LjktNC40LTI1LTEybC0xNy45LTIyLjRjLTIzLTI4LjgtNTcuOS00NS42LTk0LjgtNDUuNi0zMi4yIDAtNjMuMSAxMi44LTg1LjggMzUuNkwyOC4xIDE4Mi42QzEwLjEgMjAwLjYgMCAyMjUgMCAyNTAuNUwwIDI4OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzcuNWMwLTguNSAzLjQtMTYuNiA5LjQtMjIuNnpNODUuOCA0MDcuM2MtMS41IDUuMi00LjMgMTAtOC4xIDEzLjhMOS40IDQ4OS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDY4LjMtNjguM2MxMS41LTExLjUgMTkuOS0yNS44IDI0LjQtNDEuNWwyLjItNy42LTQ2LTM5LjRjLTIuNS0yLjItNS00LjQtNy40LTYuOEw4NS44IDQwNy4zek00MzIgOGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMzODQtNS4zIDM4NCA4bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMyem0wIDEyOGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMnpNNDA4IDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzJjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTI0IDE1MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMnpNNjA5IDI3M2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtNzItNzJjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzEgMzEtMTAyLjEgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMDIuMSAwLTMxIDMxYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNzItNzJ6Il0KICAgIH07CiAgICBmYUFycm93VXBTaG9ydFdpZGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtc2hvcnQtd2lkZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzb3J0LWFtb3VudC11cC1hbHQiXSwgImY4ODUiLCAiTTMyMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwem0wIDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAwem0wIDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYwIDB6bTAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yMjQgMHpNMTUwLjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDk2IDE0MS4zIDk2IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzA2LjcgNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2eiJdCiAgICB9OwogICAgZmFTb3J0QW1vdW50VXBBbHQgPSBmYUFycm93VXBTaG9ydFdpZGU7CiAgICBmYUdyaXBWZXJ0aWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJncmlwLXZlcnRpY2FsIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbImdyaWQtdmVydGljYWwiXSwgImY1OGUiLCAiTTEyOCA0MGMwLTIyLjEtMTcuOS00MC00MC00MEw0MCAwQzE3LjkgMCAwIDE3LjkgMCA0MEwwIDg4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OHptMCAxOTJjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwbDAgNDhjMCAyMi4xIDE3LjkgNDAgNDAgNDBsNDggMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTQ4ek0wIDQyNGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OGMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDB6TTMyMCA0MGMwLTIyLjEtMTcuOS00MC00MC00MEwyMzIgMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCA0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGw0OCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDh6TTE5MiAyMzJsMCA0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGw0OCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDhjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwek0zMjAgNDI0YzAtMjIuMS0xNy45LTQwLTQwLTQwbC00OCAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OHoiXQogICAgfTsKICAgIGZhR3JpZFZlcnRpY2FsID0gZmFHcmlwVmVydGljYWw7CiAgICBmYUNhclR1bm5lbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXItdHVubmVsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0ZGUiLCAiTTI1NiAwQzExNC42IDAgMCAxMTQuNiAwIDI1NkwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0Mi44IDBjLTYuNi01LjktMTAuOC0xNC40LTEwLjgtMjRsMC0xMTMuMWMwLTEzLjUgMy4xLTI2LjggOS0zOC45bDM5LjctODAuOGM5LjQtMTkuMSAyOC45LTMxLjMgNTAuMi0zMS4zTDMxNyAyMjRjMjEuMyAwIDQwLjggMTIuMSA1MC4yIDMxLjNMNDA3IDMzNmM1LjkgMTIuMSA5IDI1LjQgOSAzOC45TDQxNiA0ODhjMCA5LjYtNC4yIDE4LjEtMTAuOCAyNGw0Mi44IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xOTJDNTEyIDExNC42IDM5Ny40IDAgMjU2IDB6TTM2Mi44IDUxMmMtNi42LTUuOS0xMC44LTE0LjQtMTAuOC0yNGwwLTI0LTE5MiAwIDAgMjRjMCA5LjYtNC4yIDE4LjEtMTAuOCAyNGwyMTMuNyAwem0tMTc1LTIzNS41bC0yOS4zIDU5LjUgMTk0LjkgMC0yOS4zLTU5LjVjLTEuMy0yLjctNC4xLTQuNS03LjItNC41TDE5NSAyNzJjLTMgMC01LjggMS43LTcuMiA0LjV6TTE3NiA0MjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0xODQtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhQ2hhcnRDb2x1bW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtY29sdW1uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwZTMiLCAiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzM2YzAgOC44IDcuMiAxNiAxNiAxNmw0MDAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw4MCA0ODBjLTQ0LjIgMC04MC0zNS44LTgwLTgwTDAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJ6TTE0NCAyMjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xNDQtNjRsMCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNjBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptODAgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek01MTIgOTZsMCAyMjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yMjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhVHJ1Y2tBcnJvd1JpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLWFycm93LXJpZ2h0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1OGIiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMy4zIDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NHM3NC4yLTI3LjEgODQuNy02NGwxMDIuNiAwYzEwLjQgMzYuOSA0NC40IDY0IDg0LjcgNjRzNzQuMi0yNy4xIDg0LjctNjRsMy4zIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNDYuN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0w1MTIgMTQ2LjdjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdsLTUwLjcgMCAwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek01MTIgMjM3LjNsMCA1MC43LTk2IDAgMC05NiA1MC43IDAgNDUuMyA0NS4zek0xNTIgMzg0YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHptMjMyIDQwYTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTMwNSAyMjVsLTcyIDcyYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTEwMi4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTAyLjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45eiJdCiAgICB9OwogICAgZmFUdiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0diIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYzNzE3LCAidGVsZXZpc2lvbiIsICJ0di1hbHQiXSwgImYyNmMiLCAiTTY0IDk2bDAgMjQwIDQ0OCAwIDAtMjQwLTQ0OCAwek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDQ0OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjQwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQwMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNMTYwIDQ0OGwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVRlbGV2aXNpb24gPSBmYVR2OwogICAgZmFUdkFsdCA9IGZhVHY7CiAgICBmYVNlY3Rpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2VjdGlvbiIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJlNDQ3IiwgIk0xMTAgMEM0OS4yIDAgMCA0OS4yIDAgMTEwIDAgMTMzLjcgNy42IDE1NS44IDIwLjUgMTc0IDcuNiAxOTIgMCAyMTQuMSAwIDIzOCAwIDI5MS43IDM4LjkgMzM3LjYgOTEuOSAzNDYuNGw2MS43IDEwLjNjMjIuMiAzLjcgMzguNCAyMi45IDM4LjQgNDUuMyAwIDI1LjQtMjAuNiA0Ni00NiA0NmwtOTggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5OCAwYzYwLjcgMCAxMTAtNDkuMiAxMTAtMTEwIDAtMjMuNy03LjYtNDUuOS0yMC41LTY0IDEyLjktMTggMjAuNS00MC4xIDIwLjUtNjQgMC01My44LTM4LjktOTkuNi05MS45LTEwOC41bC02MS43LTEwLjNDODAuMiAxNTEuNiA2NCAxMzIuNCA2NCAxMTAgNjQgODQuNiA4NC42IDY0IDExMCA2NGw5OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyUzIyNS43IDAgMjA4IDBMMTEwIDB6bTc0LjcgMjk5LjFjLTYuNS0yLjQtMTMuNC00LjMtMjAuNS01LjVsLTYxLjctMTAuM2MtMjIuMi0zLjctMzguNC0yMi45LTM4LjQtNDUuMyAwLTkuMiAyLjctMTcuOCA3LjQtMjUgNi41IDIuNCAxMy40IDQuMyAyMC41IDUuNWw2MS43IDEwLjNjMjIuMiAzLjcgMzguNCAyMi45IDM4LjQgNDUuMyAwIDkuMi0yLjcgMTcuOC03LjQgMjV6Il0KICAgIH07CiAgICBmYVBlYWNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlYWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTc3NF0sICJmNjdjIiwgIk0yMjQgNDQ1LjNsMC0xMjEuOC05NC4zIDc3LjFjMjYuMSAyMi44IDU4LjUgMzguNyA5NC4zIDQ0Ljd6TTg5LjIgMzUxLjFMMjI0IDI0MC44IDIyNCA2Ni43Yy05MC44IDE1LjItMTYwIDk0LjItMTYwIDE4OS4zIDAgMzQuNiA5LjIgNjcuMSAyNS4yIDk1LjF6bTI5My4xIDQ5LjVsLTk0LjMtNzcuMSAwIDEyMS44YzM1LjctNiA2OC4xLTIxLjkgOTQuMy00NC43em00MC42LTQ5LjVjMTYtMjggMjUuMi02MC41IDI1LjItOTUuMSAwLTk1LjEtNjkuMi0xNzQuMS0xNjAtMTg5LjNsMCAxNzQuMiAxMzQuOCAxMTAuM3pNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHoiXQogICAgfTsKICAgIGZhU3RhcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3RhciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzExMDg4LCA2MTQ0Nl0sICJmMDA1IiwgIk0zMDkuNS0xOC45Yy00LjEtOC0xMi40LTEzLjEtMjEuNC0xMy4xcy0xNy4zIDUuMS0yMS40IDEzLjFMMTkzLjEgMTI1LjMgMzMuMiAxNTAuN2MtOC45IDEuNC0xNi4zIDcuNy0xOS4xIDE2LjNzLS41IDE4IDUuOCAyNC40bDExNC40IDExNC41LTI1LjIgMTU5LjljLTEuNCA4LjkgMi4zIDE3LjkgOS42IDIzLjJzMTYuOSA2LjEgMjUgMkwyODguMSA0MTcuNiA0MzIuNCA0OTFjOCA0LjEgMTcuNyAzLjMgMjUtMnMxMS0xNC4yIDkuNi0yMy4yTDQ0MS43IDMwNS45IDU1Ni4xIDE5MS40YzYuNC02LjQgOC42LTE1LjggNS44LTI0LjRzLTEwLjEtMTQuOS0xOS4xLTE2LjNMMzgzIDEyNS4zIDMwOS41LTE4Ljl6Il0KICAgIH07CiAgICBmYUZsYWcyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZsYWciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5ODgsIDYxNzI1XSwgImYwMjQiLCAiTTY0IDMyQzY0IDE0LjMgNDkuNyAwIDMyIDBTMCAxNC4zIDAgMzJMMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyMS42IDYyLjctMTguOGM0MS45LTEyLjYgODcuMS04LjcgMTI2LjIgMTAuOSA0Mi43IDIxLjQgOTIuNSAyNCAxMzcuMiA3LjJsMzcuMS0xMy45YzEyLjUtNC43IDIwLjgtMTYuNiAyMC44LTMwbDAtMjQ3LjdjMC0yMy0yNC4yLTM4LTQ0LjgtMjcuN2wtMTEuOCA1LjljLTQ0LjkgMjIuNS05Ny44IDIyLjUtMTQyLjggMC0zNi40LTE4LjItNzguMy0yMS44LTExNy4yLTEwLjFMNjQgNTQuNCA2NCAzMnoiXQogICAgfTsKICAgIGZhVHJpYW5nbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmlhbmdsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk4ODgsICJleGNsYW1hdGlvbi10cmlhbmdsZSIsICJ3YXJuaW5nIl0sICJmMDcxIiwgIk0yNTYgMGMxNC43IDAgMjguMiA4LjEgMzUuMiAyMWwyMTYgNDAwYzYuNyAxMi40IDYuNCAyNy40LS44IDM5LjVTNDg2LjEgNDgwIDQ3MiA0ODBMNDAgNDgwYy0xNC4xIDAtMjcuMi03LjQtMzQuNC0xOS41cy03LjUtMjcuMS0uOC0zOS41bDIxNi00MDBjNy0xMi45IDIwLjUtMjEgMzUuMi0yMXptMCAzNTJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wLTE5MmMtMTguMiAwLTMyLjcgMTUuNS0zMS40IDMzLjdsNy40IDEwNGMuOSAxMi41IDExLjQgMjIuMyAyMy45IDIyLjMgMTIuNiAwIDIzLTkuNyAyMy45LTIyLjNsNy40LTEwNGMxLjMtMTguMi0xMy4xLTMzLjctMzEuNC0zMy43eiJdCiAgICB9OwogICAgZmFFeGNsYW1hdGlvblRyaWFuZ2xlID0gZmFUcmlhbmdsZUV4Y2xhbWF0aW9uOwogICAgZmFXYXJuaW5nID0gZmFUcmlhbmdsZUV4Y2xhbWF0aW9uOwogICAgZmFTY2hvb2xDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2hvb2wtY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NmMiLCAiTTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjc2IDBjLTEwLjUtMTQuNi0xOS0zMC43LTI1LjEtNDhsLTkwLjkgMCAwLTg4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMSAwIDEuOSAwIDIuOSAuMSAyNi4zLTc0LjYgOTcuNS0xMjguMSAxODEuMS0xMjguMSAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTMzLjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDAtMTI3LjktMTE1LjFjLTE4LjMtMTYuNC00Ni0xNi40LTY0LjIgMEwxMjggMTI4IDY0IDEyOHptNjQgMjQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJ6TTExMiAyNTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNnpNMjg4IDEyOGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNNDk2IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYUdyYWR1YXRpb25DYXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3JhZHVhdGlvbi1jYXAiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc4OTEsICJtb3J0YXItYm9hcmQiXSwgImYxOWQiLCAiTTQ4IDE5NS44bDIwOS4yIDg2LjFjOS44IDQgMjAuMiA2LjEgMzAuOCA2LjFzMjEtMi4xIDMwLjgtNi4xbDI0Mi40LTk5LjhjOS0zLjcgMTQuOC0xMi40IDE0LjgtMjIuMXMtNS44LTE4LjQtMTQuOC0yMi4xTDMxOC44IDM4LjFDMzA5IDM0LjEgMjk4LjYgMzIgMjg4IDMycy0yMSAyLjEtMzAuOCA2LjFMMTQuOCAxMzcuOUM1LjggMTQxLjYgMCAxNTAuMyAwIDE2MEwwIDQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjYwLjJ6bTQ4IDcxLjdMOTYgMzg0YzAgNTMgODYgOTYgMTkyIDk2czE5Mi00MyAxOTItOTZsMC0xMTYuNi0xNDIuOSA1OC45Yy0xNS42IDYuNC0zMi4yIDkuNy00OS4xIDkuN3MtMzMuNS0zLjMtNDkuMS05LjdMOTYgMjY3LjR6Il0KICAgIH07CiAgICBmYU1vcnRhckJvYXJkID0gZmFHcmFkdWF0aW9uQ2FwOwogICAgZmFTdG9yZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdG9yZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTRlIiwgIk0zMC43IDcyLjNDMzcuNiA0OC40IDU5LjUgMzIgODQuNCAzMmwzNDQgMGMyNC45IDAgNDYuOCAxNi40IDUzLjggNDAuM2wyMy40IDgwLjJjMTIuOCA0My43LTIwLjEgODcuNS02NS42IDg3LjUtMjYuMyAwLTQ5LjQtMTQuOS02MC44LTM3LjEtMTEuNiAyMS45LTM0LjYgMzcuMS02MS40IDM3LjEtMjYuNiAwLTQ5LjctMTUtNjEuMy0zNy0xMS42IDIyLTM0LjcgMzctNjEuMyAzNy0yNi44IDAtNDkuOC0xNS4xLTYxLjQtMzcuMS0xMS40IDIyLjEtMzQuNSAzNy4xLTYwLjggMzcuMS00NS42IDAtNzguNC00My43LTY1LjYtODcuNUwzMC43IDcyLjN6TTk2LjQgMzUybDMyMCAwIDAtNjYuNGM3LjYgMS42IDE1LjUgMi40IDIzLjUgMi40IDE0LjMgMCAyOC0yLjYgNDAuNS03LjJsMCAxNTEuMmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzUyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTUxLjJjMTIuNSA0LjYgMjYuMSA3LjIgNDAuNSA3LjIgOC4xIDAgMTUuOS0uOCAyMy41LTIuNGwwIDY2LjR6Il0KICAgIH07CiAgICBmYVVzZXJBc3Ryb25hdXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1hc3Ryb25hdXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjRmYiIsICJNMjI0IDMzNmM3NC42IDAgMTM4LjQtNDYuNCAxNjQtMTEybDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTgwYzAtMTMuMy0xMC43LTI0LTI0LTI0bC00IDBDMzYyLjQgMzAuNCAyOTguNi0xNiAyMjQtMTZTODUuNiAzMC40IDYwIDk2bC00IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNCAwYzI1LjYgNjUuNiA4OS40IDExMiAxNjQgMTEyek0yMDggODBsMzIgMGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NmwtMzIgMGMtNTMgMC05Ni00My05Ni05NnM0My05NiA5Ni05NnpNMTYgNDg0LjZDMTYgNDk5LjcgMjguMyA1MTIgNDMuNCA1MTJsNTIuNiAwIDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0OCA1Mi42IDBjMTUuMSAwIDI3LjQtMTIuMyAyNy40LTI3LjQgMC01OS44LTMxLjktMTEyLjItNzkuNi0xNDEtMzYuNCAyNS41LTgwLjYgNDAuNC0xMjguNCA0MC40cy05Mi0xNC45LTEyOC40LTQwLjRDNDcuOSAzNzIuNCAxNiA0MjQuOCAxNiA0ODQuNnpNMTgzLjMgMTQxLjVjLS45LTMuMy0zLjktNS41LTcuMy01LjVzLTYuNCAyLjItNy4zIDUuNWwtNiAyMS4yLTIxLjIgNmMtMy4zIC45LTUuNSAzLjktNS41IDcuM3MyLjIgNi40IDUuNSA3LjNsMjEuMiA2IDYgMjEuMmMuOSAzLjMgMy45IDUuNSA3LjMgNS41czYuNC0yLjIgNy4zLTUuNWw2LTIxLjIgMjEuMi02YzMuMy0uOSA1LjUtMy45IDUuNS03LjNzLTIuMi02LjQtNS41LTcuM2wtMjEuMi02LTYtMjEuMnpNMTUyIDQ4OGwwIDI0IDQ4IDAgMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptMTIwLTI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDI0IDQ4IDAgMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhQnVpbGRpbmdGbGFnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLWZsYWciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRkNSIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpNMTc2IDM1MmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgODAtOTYgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek05NiAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjQwIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTk2IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNDQtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNDY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yODggMTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMkw0OTYgMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6Il0KICAgIH07CiAgICBmYU11Z1NhdWNlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtdWctc2F1Y2VyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImNvZmZlZSJdLCAiZjBmNCIsICJNNjQgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMzUyIDBjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhTNTE4LjcgMjg4IDQ0OCAyODhjMCA1My00MyA5Ni05NiA5NmwtMTkyIDBjLTUzIDAtOTYtNDMtOTYtOTZMNjQgNjR6bTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NGwwIDEyOGMzNS4zIDAgNjQtMjguNyA2NC02NHpNNjQgNDQ4bDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDY0IDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhQ29mZmVlID0gZmFNdWdTYXVjZXI7CiAgICBmYUxlbW9uMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsZW1vbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzgxOV0sICJmMDk0IiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjQtNi42IDAtMTMgMS0xOSAyLjktMjIuNSA3LTQ4LjEgMTQuOS03MSA5LTc1LjItMTkuMS0xNTYuNCAxMS0yMTMuNyA2OC4zUy03LjIgMjUwLjggMTEuOSAzMjZjNS44IDIyLjktMiA0OC40LTkgNzEtMS45IDYtMi45IDEyLjQtMi45IDE5IDAgMzUuMyAyOC43IDY0IDY0IDY0IDYuNiAwIDEzLTEgMTkuMS0yLjkgMjIuNS03IDQ4LjEtMTQuOSA3MS05IDc1LjIgMTkuMSAxNTYuNC0xMSAyMTMuNy02OC4zUzQ1NS4yIDI2MS4yIDQzNi4xIDE4NmMtNS44LTIyLjkgMi00OC40IDktNzEgMS45LTYgMi45LTEyLjQgMi45LTE5LjF6TTIyMi43IDE0M2MtNTIgMTUuMi05Ni41IDU5LjctMTExLjcgMTExLjctMy43IDEyLjctMTcuMSAyMC0yOS44IDE2LjNTNjEuMiAyNTQgNjUgMjQxLjNjMTkuOC02Ny43IDc2LjYtMTI0LjUgMTQ0LjMtMTQ0LjMgMTIuNy0zLjcgMjYuMSAzLjYgMjkuOCAxNi4zcy0zLjYgMjYuMS0xNi4zIDI5Ljh6Il0KICAgIH07CiAgICBmYUNhcmF2YW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FyYXZhbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmOGZmIiwgIk0zMiA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGwwIDE5MiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yOTYuNCAwYy4yIDIuNiAuNCA1LjMgLjQgOCAwIDQ4LjYtMzkuNCA4OC04OCA4OHMtODgtMzkuNC04OC04OGMwLTIuNyAuMS01LjQgLjQtOEw5NiA0MTZjLTM1LjMgMC02NC0yOC43LTY0LTY0TDMyIDk2ek0zNTIgMzUybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC00OC0yNCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDI0IDAgMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJ6TTE2MCAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwem02NCAzMzZhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgweiJdCiAgICB9OwogICAgZmFRID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMTNdLCAiNTEiLCAiTTY0IDI1NmMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MCAyOC45IDAgNTYtNy43IDc5LjQtMjEuMWwtNzItODYuNGMtMTEuMy0xMy42LTkuNS0zMy44IDQuMS00NS4xczMzLjgtOS41IDQ1LjEgNC4xbDcwLjkgODUuMWMyMC40LTI2LjggMzIuNS02MC4zIDMyLjUtOTYuNiAwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MFM2NCAxNjcuNiA2NCAyNTZ6TTM0NC45IDQ0NC42QzMxMCA0NjcgMjY4LjUgNDgwIDIyNCA0ODAgMTAwLjMgNDgwIDAgMzc5LjcgMCAyNTZTMTAwLjMgMzIgMjI0IDMyIDQ0OCAxMzIuMyA0NDggMjU2YzAgNTYuMS0yMC42IDEwNy40LTU0LjcgMTQ2LjdsNDcuMyA1Ni44YzExLjMgMTMuNiA5LjUgMzMuOC00LjEgNDUuMXMtMzMuOCA5LjUtNDUuMS00LjFsLTQ2LjYtNTUuOXoiXQogICAgfTsKICAgIGZhTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsb2NrIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4Mjc0XSwgImYwMjMiLCAiTTEyOCA5NmwwIDY0IDEyOCAwIDAtNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjR6TTY0IDE2MGwwLTY0QzY0IDI1LjMgMTIxLjMtMzIgMTkyLTMyUzMyMCAyNS4zIDMyMCA5NmwwIDY0YzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyMjRjMC0zNS4zIDI4LjctNjQgNjQtNjR6Il0KICAgIH07CiAgICBmYVBhaW50Um9sbGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhaW50LXJvbGxlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWFhIiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwzNTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwxNiAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgOTZjMCA0NC4yLTM1LjggODAtODAgODBsLTE2MCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxOC43YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTE4LjdjMC00NC4yIDM1LjgtODAgODAtODBsMTYwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtOTZjMC04LjgtNy4yLTE2LTE2LTE2bC0xNiAwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDE5MmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHoiXQogICAgfTsKICAgIGZhVm9sdW1lSGlnaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2b2x1bWUtaGlnaCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODI2NiwgInZvbHVtZS11cCJdLCAiZjAyOCIsICJNNTMzLjYgMzIuNWMtMTAuMy04LjQtMjUuNC02LjgtMzMuOCAzLjVzLTYuOCAyNS40IDMuNSAzMy44QzU1Ny41IDExMy44IDU5MiAxODAuOCA1OTIgMjU2cy0zNC41IDE0Mi4yLTg4LjcgMTg2LjNjLTEwLjMgOC40LTExLjggMjMuNS0zLjUgMzMuOHMyMy41IDExLjggMzMuOCAzLjVDNTk4LjUgNDI2LjcgNjQwIDM0Ni4yIDY0MCAyNTZTNTk4LjUgODUuMiA1MzMuNiAzMi41ek00NzMuMSAxMDdjLTEwLjMtOC40LTI1LjQtNi44LTMzLjggMy41cy02LjggMjUuNCAzLjUgMzMuOEM0NzUuMyAxNzAuNyA0OTYgMjEwLjkgNDk2IDI1NnMtMjAuNyA4NS4zLTUzLjIgMTExLjhjLTEwLjMgOC40LTExLjggMjMuNS0zLjUgMzMuOHMyMy41IDExLjggMzMuOCAzLjVjNDMuMi0zNS4yIDcwLjktODguOSA3MC45LTE0OXMtMjcuNy0xMTMuOC03MC45LTE0OXptLTYwLjUgNzQuNWMtMTAuMy04LjQtMjUuNC02LjgtMzMuOCAzLjVzLTYuOCAyNS40IDMuNSAzMy44QzM5My4xIDIyNy42IDQwMCAyNDEgNDAwIDI1NnMtNi45IDI4LjQtMTcuNyAzNy4zYy0xMC4zIDguNC0xMS44IDIzLjUtMy41IDMzLjhzMjMuNSAxMS44IDMzLjggMy41QzQzNC4xIDMxMi45IDQ0OCAyODYuMSA0NDggMjU2cy0xMy45LTU2LjktMzUuNC03NC41ek04MCAzNTJsNDggMCAxMzQuMSAxMTkuMmM2LjQgNS43IDE0LjYgOC44IDIzLjEgOC44IDE5LjIgMCAzNC44LTE1LjYgMzQuOC0zNC44bDAtMzc4LjRjMC0xOS4yLTE1LjYtMzQuOC0zNC44LTM0LjgtOC41IDAtMTYuNyAzLjEtMjMuMSA4LjhMMTI4IDE2MCA4MCAxNjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDh6Il0KICAgIH07CiAgICBmYVZvbHVtZVVwID0gZmFWb2x1bWVIaWdoOwogICAgZmFGb2xkZXJQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZvbGRlci1wbHVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2NWUiLCAiTTUxMiAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDEzOC43IDBjMTMuOCAwIDI3LjMgNC41IDM4LjQgMTIuOGwzOC40IDI4LjhjNS41IDQuMiAxMi4zIDYuNCAxOS4yIDYuNEw0NDggODBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDB6TTI1NiAxNjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDgtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwIDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQ4IDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDAgMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhTWVyY3VyeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtZXJjdXJ5IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTc5MV0sICJmMjIzIiwgIk0xMTctNEMxMDYtMTcuOCA4NS44LTIwIDcyLjEtOXMtMTYgMzEuMi01IDQ1Qzc0LjkgNDUuNyA4My43IDU0LjUgOTMuNSA2Mi4xIDQ2LjcgOTMuNyAxNiAxNDcuMyAxNiAyMDggMTYgMjk0LjMgNzguMSAzNjYuMSAxNjAgMzgxLjFsMCAzNC45LTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMzQuOWM4MS45LTE1IDE0NC04Ni44IDE0NC0xNzMuMSAwLTYwLjctMzAuNy0xMTQuMy03Ny41LTE0NS45IDkuOC03LjcgMTguNy0xNi40IDI2LjQtMjYuMSAxMS4xLTEzLjggOC44LTMzLjktNS00NVMyNzgtMTcuOCAyNjctNGMtMTcuNiAyMi00NC43IDM2LTc1IDM2UzEzNC43IDE4IDExNy00em03NSAzMjRjLTYxLjkgMC0xMTItNTAuMS0xMTItMTEyUzEzMC4xIDk2IDE5MiA5NiAzMDQgMTQ2LjEgMzA0IDIwOGMwIDYxLjgtNTAuMSAxMTItMTExLjkgMTEybC0uMSAweiJdCiAgICB9OwogICAgZmFBbmNob3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYW5jaG9yIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTg3NV0sICJmMTNkIiwgIk0yODggNjRhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0ek0xOTIgOTZjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmMwIDQxLjgtMjYuNyA3Ny40LTY0IDkwLjVsMCAyNTcuOWM2Mi45LTE0LjMgMTEwLjItNjkuNyAxMTEuOS0xMzYuNWwtMTYuMSAxNC4xYy0xMCA4LjctMjUuMSA3LjctMzMuOS0yLjNzLTcuNy0yNS4xIDIuMy0zMy45bDY0LTU2YzktNy45IDIyLjYtNy45IDMxLjYgMGw2NCA1NmMxMCA4LjcgMTEgMjMuOSAyLjMgMzMuOXMtMjMuOSAxMS0zMy45IDIuM0w0OTYgMzA3LjlDNDkzLjkgNDIxIDQwMS42IDUxMiAyODggNTEyUzgyLjEgNDIxIDgwIDMwNy45TDYzLjggMzIyLjFjLTEwIDguNy0yNS4xIDcuNy0zMy45LTIuM3MtNy43LTI1LjEgMi4zLTMzLjlsNjQtNTZjOS03LjkgMjIuNi03LjkgMzEuNiAwbDY0IDU2YzEwIDguNyAxMSAyMy45IDIuMyAzMy45cy0yMy45IDExLTMzLjkgMi4zbC0xNi4xLTE0LjFjMS44IDY2LjggNDkuMSAxMjIuMiAxMTEuOSAxMzYuNWwwLTI1Ny45Yy0zNy4zLTEzLjItNjQtNDguNy02NC05MC41eiJdCiAgICB9OwogICAgZmFTcXVhcmVQYXJraW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1wYXJraW5nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3MzU5LCAicGFya2luZyJdLCAiZjU0MCIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMTkyIDI1Nmw0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00OCAwIDAgNjR6bTQ4IDY0bC00OCAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xODRjMC0yMi4xIDE3LjktNDAgNDAtNDBsNzIgMGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NnoiXQogICAgfTsKICAgIGZhUGFya2luZyA9IGZhU3F1YXJlUGFya2luZzsKICAgIGZhSGFudWtpYWggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFudWtpYWgiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjgzMzRdLCAiZjZlNiIsICJNMzE0LjIgMy4zYy01LjEgOC44LTE4LjIgMzMuMy0xOC4yIDUyLjcgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zem0tMjg4IDQ4QzIxLjEgNjAuMSA4IDg0LjYgOCAxMDQgOCAxMTcuMyAxOC43IDEyOCAzMiAxMjhzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zek04OCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zQzEwMS4xIDYwLjEgODggODQuNiA4OCAxMDR6bTgyLjItNTIuN2MtNS4xIDguOC0xOC4yIDMzLjMtMTguMiA1Mi43IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM3pNMjE2IDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDMjI5LjEgNjAuMSAyMTYgODQuNiAyMTYgMTA0ek0zOTQuMiA1MS4zYy01LjEgOC44LTE4LjIgMzMuMy0xOC4yIDUyLjcgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zek00NDAgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM0M0NTMuMSA2MC4xIDQ0MCA4NC42IDQ0MCAxMDR6bTgyLjItNTIuN2MtNS4xIDguOC0xOC4yIDMzLjMtMTguMiA1Mi43IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM3pNNTg0IDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDNTk3LjEgNjAuMSA1ODQgODQuNiA1ODQgMTA0ek0xMTIgMTYwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTIgMzIgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZ6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMiAzMiAwIDAtMTEyYzAtOC44LTcuMi0xNi0xNi0xNnptNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTEyIDMyIDAgMC0xMTJjMC04LjgtNy4yLTE2LTE2LTE2em0xNjAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTEyIDMyIDAgMC0xMTJjMC04LjgtNy4yLTE2LTE2LTE2em02NCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTIgMzIgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZ6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMiAzMiAwIDAtMTEyYzAtOC44LTcuMi0xNi0xNi0xNnpNMzUyIDE0NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE3Ni0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDE3NC4zIDAgMTkybDAgOTZjMCA1MyA0MyA5NiA5NiA5NmwxOTIgMCAwIDY0LTEyOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMjggMCAwLTY0IDE5MiAwYzUzIDAgOTYtNDMgOTYtOTZsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xOTIgMCAwLTE3NnoiXQogICAgfTsKICAgIGZhUm90YXRlTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb3RhdGUtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJyb3RhdGUtYmFjayIsICJyb3RhdGUtYmFja3dhcmQiLCAidW5kby1hbHQiXSwgImYyZWEiLCAiTTI0IDE5MmwxNDQgMGM5LjcgMCAxOC41LTUuOCAyMi4yLTE0LjhzMS43LTE5LjMtNS4yLTI2LjJsLTQ2LjctNDYuN2M3NS4zLTU4LjYgMTg0LjMtNTMuMyAyNTMuNSAxNS45IDc1IDc1IDc1IDE5Ni41IDAgMjcxLjVzLTE5Ni41IDc1LTI3MS41IDBjLTEwLjItMTAuMi0xOS0yMS4zLTI2LjQtMzMtOS41LTE0LjktMjkuMy0xOS4zLTQ0LjItOS44cy0xOS4zIDI5LjMtOS44IDQ0LjJDNDkuNyA0MDguNyA2MS40IDQyMy41IDc1IDQzNyAxNzUgNTM3IDMzNyA1MzcgNDM3IDQzN1M1MzcgMTc1IDQzNyA3NUMzNDIuOC0xOS4zIDE5My4zLTI0LjcgOTIuNyA1OC44TDQxIDdDMzQuMSAuMiAyMy44LTEuOSAxNC44IDEuOFMwIDE0LjMgMCAyNEwwIDE2OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHoiXQogICAgfTsKICAgIGZhUm90YXRlQmFjayA9IGZhUm90YXRlTGVmdDsKICAgIGZhUm90YXRlQmFja3dhcmQgPSBmYVJvdGF0ZUxlZnQ7CiAgICBmYVVuZG9BbHQgPSBmYVJvdGF0ZUxlZnQ7CiAgICBmYUhlYWRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhZGluZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJoZWFkZXIiXSwgImYxZGMiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYgMCAwIDExMiAyMjQgMCAwLTExMi0xNiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE2IDAgMCAzMjAgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwIDAtMTQ0LTIyNCAwIDAgMTQ0IDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYgMCAwLTMyMC0xNiAwQzE0LjMgOTYgMCA4MS43IDAgNjR6Il0KICAgIH07CiAgICBmYUhlYWRlciA9IGZhSGVhZGluZzsKICAgIGZhQ3Jvc3NoYWlycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjcm9zc2hhaXJzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYwNWIiLCAiTTI4OC0xNmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE4LjNjOTguMSAxNCAxNzUuNyA5MS42IDE4OS43IDE4OS43bDE4LjMgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTguMyAwYy0xNCA5OC4xLTkxLjYgMTc1LjctMTg5LjcgMTg5LjdsMCAxOC4zYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTguM0MxNTcuOSA0NjMuNyA4MC4zIDM4Ni4xIDY2LjMgMjg4TDQ4IDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxOC4zIDBDODAuMyAxMjUuOSAxNTcuOSA0OC4zIDI1NiAzNC4zTDI1NiAxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTMxLjIgMjg4YzEyLjcgNjIuNyA2Mi4xIDExMi4xIDEyNC44IDEyNC44bDAtMTIuOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTIuOGM2Mi43LTEyLjcgMTEyLjEtNjIuMSAxMjQuOC0xMjQuOEw0MzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDEyLjggMEM0MzIuMSAxNjEuMyAzODIuNyAxMTEuOSAzMjAgOTkuMmwwIDEyLjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMi44QzE5My4zIDExMS45IDE0My45IDE2MS4zIDEzMS4yIDIyNGwxMi44IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEyLjggMHpNMjg4IDIwOGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6Il0KICAgIH07CiAgICBmYUNpcmNsZU5vZGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1ub2RlcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGUyIiwgIk00MTguNCAxNTcuOWMzNS4zLTguMyA2MS42LTQwIDYxLjYtNzcuOSAwLTQ0LjItMzUuOC04MC04MC04MC00My40IDAtNzguNyAzNC41LTgwIDc3LjVMMTM2LjIgMTUxLjFDMTIxLjcgMTM2LjggMTAxLjkgMTI4IDgwIDEyOCAzNS44IDEyOCAwIDE2My44IDAgMjA4czM1LjggODAgODAgODBjMTIuMiAwIDIzLjgtMi43IDM0LjEtNy42TDI1OS43IDQwNy44Yy0yLjQgNy42LTMuNyAxNS44LTMuNyAyNC4yIDAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0yNy43LTE0LTUyLjEtMzUuNC02Ni40bDM3LjgtMjA3Ljd6TTE1Ni4zIDIzMi4yYzIuMi02LjkgMy41LTE0LjIgMy43LTIxLjdsMTgzLjgtNzMuNWMzLjYgMy41IDcuNCA2LjcgMTEuNiA5LjVMMzE3LjYgMzU0LjFjLTUuNSAxLjMtMTAuOCAzLjEtMTUuOCA1LjVMMTU2LjMgMjMyLjJ6Il0KICAgIH07CiAgICBmYVdpbmRvd1Jlc3RvcmUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndpbmRvdy1yZXN0b3JlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyZDIiLCAiTTUxMiA5NkwxNjAgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTQ4IDAgMC02NCA0OCAwIDAtMTkyek0wIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NGwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE5MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjI0em02NCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwyNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw4OCAyNDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0eiJdCiAgICB9OwogICAgZmFSID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInIiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMTRdLCAiNTIiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCA5NS4zIDAgMTAyLjQgMTQ2LjRjMTAuMSAxNC41IDMwLjEgMTggNDQuNiA3LjlzMTgtMzAuMSA3LjktNDQuNkwyMzAuMSAzMDkuNUMyODIuOCAyODguMSAzMjAgMjM2LjQgMzIwIDE3NiAzMjAgOTYuNSAyNTUuNSAzMiAxNzYgMzJMMzIgMzJ6TTE3NiAyNTZsLTExMiAwIDAtMTYwIDExMiAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwcy0zNS44IDgwLTgwIDgweiJdCiAgICB9OwogICAgZmFGaWx0ZXJDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWx0ZXItY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUxN2IiLCAiTTMyIDY0QzE5LjEgNjQgNy40IDcxLjggMi40IDgzLjhTLjIgMTA5LjUgOS40IDExOC42TDE5MiAzMDEuMyAxOTIgNDE2YzAgOC41IDMuNCAxNi42IDkuNCAyMi42bDY0IDY0YzIuNSAyLjUgNS4zIDQuNSA4LjMgNi0yMS4yLTMwLjktMzMuNi02OC4zLTMzLjYtMTA4LjYgMC05OS40IDc1LjUtMTgxLjEgMTcyLjMtMTkxbDkwLjQtOTAuNGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0OTIuOSA2NCA0ODAgNjRMMzIgNjR6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43bC0zNi43IDM2LjcgMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42eiJdCiAgICB9OwogICAgZmFHb3B1cmFtID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdvcHVyYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjY2NCIsICJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA4IDQwIDAgMC04YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA4IDQ4IDAgMC04YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA4IDQwIDAgMC04YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMzZjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA4MGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDEyOGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtNDggMCAwLTIyNC0zMiAwIDAtMTI4LTQ4IDAgMCAxMjggMzIgMCAwIDIyNC0yMjQgMCAwLTIyNCAzMiAwIDAtMTI4LTQ4IDAgMCAxMjgtMzIgMCAwIDIyNC00OCAwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDMzNmMwLTI2LjUgMjEuNS00OCA0OC00OGwwLTgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4TDk2IDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0ek0yNTYgMjA4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4IDY0IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMjA4IDQwMGwwIDY0IDk2IDAgMC02NGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHpNMjU2IDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyIDY0IDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhSGVhcnRDaXJjbGVNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydC1jaXJjbGUtbWludXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRmZiIsICJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDE3LjYtMy40IDM1LjYtOS41IDUzLjctMjEuOC04LjYtNDUuNi0xMy40LTcwLjUtMTMuNC0xMDYgMC0xOTIgODYtMTkyIDE5MiAwIDI4LjUgNi4yIDU1LjYgMTcuNCA4MC0uNSAwLS45IDAtMS40IDAtMTUuNSAwLTMwLjgtNC42LTQzLjEtMTQuMS03My01NS43LTIxMi45LTE4Ni0yMTIuOS0yOTguMmwwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXpNMjg4IDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMjQgMGMwLTguOC03LjItMTYtMTYtMTZsLTEyOCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDEyOCAwYzguOCAwIDE2LTcuMiAxNi0xNnoiXQogICAgfTsKICAgIGZhU3Rhck9mTGlmZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFyLW9mLWxpZmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjYyMSIsICJNMjA4LjUgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE0MC45IDEyMi03MC40YzE1LjMtOC44IDM0LjktMy42IDQzLjcgMTEuN2wxNiAyNy43YzguOCAxNS4zIDMuNiAzNC45LTExLjcgNDMuN2wtMTIyIDcwLjQgMTIyIDcwLjRjMTUuMyA4LjggMjAuNiAyOC40IDExLjcgNDMuN2wtMTYgMjcuN2MtOC44IDE1LjMtMjguNCAyMC42LTQzLjcgMTEuN2wtMTIyLTcwLjQgMCAxNDAuOWMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNDAuOS0xMjIgNzAuNGMtMTUuMyA4LjgtMzQuOSAzLjYtNDMuNy0xMS43bC0xNi0yNy43Yy04LjgtMTUuMy0zLjYtMzQuOSAxMS43LTQzLjdsMTIyLTcwLjQtMTIyLTcwLjRjLTE1LjMtOC44LTIwLjUtMjguNC0xMS43LTQzLjdsMTYtMjcuN2M4LjgtMTUuMyAyOC40LTIwLjUgNDMuNy0xMS43bDEyMiA3MC40IDAtMTQwLjl6Il0KICAgIH07CiAgICBmYUJ1c2luZXNzVGltZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidXNpbmVzcy10aW1lIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImJyaWVmY2FzZS1jbG9jayJdLCAiZjY0YSIsICJNMjY0IDQ4bDExMiAwYzQuNCAwIDggMy42IDggOGwwIDQwLTEyOCAwIDAtNDBjMC00LjQgMy42LTggOC04em0tNTYgOGwwIDQwLTgwIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgOTYgMzA1IDBjMzMuOC0yOS45IDc4LjMtNDggMTI3LTQ4IDI4LjYgMCA1NS42IDYuMiA4MCAxNy40bDAtNjUuNGMwLTM1LjMtMjguNy02NC02NC02NGwtODAgMCAwLTQwYzAtMzAuOS0yNS4xLTU2LTU2LTU2TDI2NCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NnptODAgMjk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2LTE5MiAwIDAgMTEyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5My40IDBjLTExLjItMjQuNC0xNy40LTUxLjQtMTcuNC04MCAwLTE2LjYgMi4xLTMyLjcgNi00OGwtMjIgMHptMzUyIDQ4YTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6TTQ5NiAzMjBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDggMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNDggMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNjRjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFCcmllZmNhc2VDbG9jayA9IGZhQnVzaW5lc3NUaW1lOwogICAgZmFGaXJlRXh0aW5ndWlzaGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpcmUtZXh0aW5ndWlzaGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTE5XSwgImYxMzQiLCAiTTUxMiAzMmMwLTkuNi00LjMtMTguNy0xMS43LTI0LjdTNDgzLjEtMS4zIDQ3My43IC42bC0xNjAgMzJDMzAxLjUgMzUuMSAyOTIgNDQuMyAyODkgNTZsLTY1IDAgMC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMkwxNjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyOC40Yy01NS4zIDEyLjMtMTAxLjMgNDkuNS0xMjUuNSA5OS4xLTUuOCAxMS45LS45IDI2LjMgMTEuMSAzMi4xczI2LjMgLjkgMzIuMS0xMS4xQzYyIDE0Ni45IDkxLjggMTIxLjEgMTI4IDExMGwwIDI4LjhjLTM3LjggMTgtNjQgNTYuNS02NCAxMDEuMmwwIDEyOCAyMjQgMCAwLTEyOGMwLTQ0LjctMjYuMi04My4yLTY0LTEwMS4ybDAtMzQuOCA2NSAwYzMgMTEuNyAxMi41IDIwLjkgMjQuNyAyMy40bDE2MCAzMmM5LjQgMS45IDE5LjEtLjYgMjYuNi02LjZTNTEyIDEzNy42IDUxMiAxMjhsMC05NnpNMjg4IDQ0OGwwLTMyLTIyNCAwIDAgMzJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsOTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NHoiXQogICAgfTsKICAgIGZhQXJyb3dEb3duTG9uZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLWxvbmciLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsibG9uZy1hcnJvdy1kb3duIl0sICJmMTc1IiwgIk0xMzcuNCA1MzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDE5MiA0MzQuNyAxOTIgMGMwLTE3LjctMTQuMy0zMi0zMi0zMlMxMjgtMTcuNyAxMjggMGwwIDQzNC43LTczLjQtNzMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTI4IDEyOHoiXQogICAgfTsKICAgIGZhTG9uZ0Fycm93RG93biA9IGZhQXJyb3dEb3duTG9uZzsKICAgIGZhVXNlck1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItbWludXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjUwMyIsICJNMTM2IDEyOGExMjAgMTIwIDAgMSAxIDI0MCAwIDEyMCAxMjAgMCAxIDEgLTI0MCAwek00OCA0ODIuM0M0OCAzODMuOCAxMjcuOCAzMDQgMjI2LjMgMzA0bDU5LjQgMGM5OC41IDAgMTc4LjMgNzkuOCAxNzguMyAxNzguMyAwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0w3Ny43IDUxMkM2MS4zIDUxMiA0OCA0OTguNyA0OCA0ODIuM3pNNDcyIDE2OGwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYU1vbmV5Q2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9uZXktY2hlY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUzYyIsICJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHpNOTYgMzEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTI0LTEzNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjcyIDB6Il0KICAgIH07CiAgICBmYUhvdXNlTGFwdG9wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWxhcHRvcCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJsYXB0b3AtaG91c2UiXSwgImUwNjYiLCAiTTQ0OCAyNDBsMTkuOSAwYzE1LjUgMCAyOC4xLTEyLjYgMjguMS0yOC4xIDAtNy42LTMuMS0xNC45LTguNi0yMC4yTDI4My41LTQuOUMyNzYuMS0xMiAyNjYuMy0xNiAyNTYtMTZzLTIwLjEgNC0yNy41IDExLjFMMjQuNiAxOTEuN0MxOS4xIDE5NyAxNiAyMDQuMyAxNiAyMTEuOSAxNiAyMjcuNCAyOC42IDI0MCA0NC4xIDI0MGwxOS45IDAgMCAxNDRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODUuNyAwYzcuNC02LjYgMTYuNC0xMS40IDI2LjMtMTRsMC0xMzBjMC01LjUgLjctMTAuOSAyLTE2bC0xMCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyNCAxNDQgMHpNMzUyIDM1MmwxNjAgMCAwIDEyOC0xNjAgMCAwLTEyOHptLTY0LTMybDAgMTYwLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDI2LjUgMjEuNSA0OCA0OCA0OGwyODggMGMyNi41IDAgNDgtMjEuNSA0OC00OCAwLTguOC03LjItMTYtMTYtMTZsLTMyIDAgMC0xNjBjMC0xNy43LTE0LjMtMzItMzItMzJsLTIyNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnoiXQogICAgfTsKICAgIGZhTGFwdG9wSG91c2UgPSBmYUhvdXNlTGFwdG9wOwogICAgZmFEb3dubG9hZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb3dubG9hZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDE5IiwgIk0yNTYgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMTAuNy00MS40LTQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDI1NiAyNDIuNyAyNTYgMzJ6TTY0IDMyMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzMmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC00Ni45IDAtNTYuNiA1Ni42Yy0zMS4yIDMxLjItODEuOSAzMS4yLTExMy4xIDBMMTEwLjkgMzIwIDY0IDMyMHptMzA0IDU2YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXQogICAgfTsKICAgIGZhQ291Y2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY291Y2giLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjRiOCIsICJNMTQ0IDI3MkMxNDQgMjI0LjcgMTA5LjggMTg1LjQgNjQuOCAxNzcuNSA3MiAxMTMuNiAxMjYuMiA2NCAxOTIgNjRsMjU2IDBjNjUuOCAwIDEyMCA0OS42IDEyNy4yIDExMy41LTQ1IDgtNzkuMiA0Ny4yLTc5LjIgOTQuNWwwIDMyLTM1MiAwIDAtMzJ6TTAgMzg0TDAgMjcyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCA4MCA0NDggMCAwLTgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCAxMTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NHoiXQogICAgfTsKICAgIGZhUm9hZExvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9hZC1sb2NrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1NjciLCAiTTI1NiAzMmwtNzYuMyAwYy0yOS40IDAtNTUuMSAyMC4xLTYyLjEgNDguNkwzMy40IDQyMC41QzI1LjkgNDUwLjcgNDguOCA0ODAgODAgNDgwbDE3NS45IDAgMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMiA2LjEgMCAxMS44IDEuNyAxNi43IDQuNyAyLjgtMjMuOSAxNC4zLTQ1LjEgMzEuNC02MC4zbDAtMjQuNGMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOCA2LjIgMCAxMi40IC40IDE4LjQgMS4zTDQ1OC41IDgwLjZDNDUxLjQgNTIuMSA0MjUuOCAzMiAzOTYuMyAzMmwtNzYuNCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHptNjQgMTkybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem0xNzYgODAuMWwwIDQ3LjktNjQgMCAwLTQ3LjljMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNMzUyIDQwMGwwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEyOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yMC45LTEzLjQtMzguNy0zMi00NS4zbDAtNTAuNmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGwwIDUwLjZjLTE4LjYgNi42LTMyIDI0LjQtMzIgNDUuM3oiXQogICAgfTsKICAgIGZhU2Npc3NvcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2Npc3NvcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5OTg0LCA5OTg2LCA5OTg4LCAiY3V0Il0sICJmMGM0IiwgIk0xOTIgMjU2bC0zOS41IDM5LjVjLTEyLjYtNC45LTI2LjItNy41LTQwLjUtNy41LTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEyczUwLjEgMTEyIDExMiAxMTIgMTEyLTUwLjEgMTEyLTExMmMwLTE0LjMtMi43LTI3LjktNy41LTQwLjVMNDk5LjIgNzYuOGM3LjEtNy4xIDcuMS0xOC41IDAtMjUuNi0yOC4zLTI4LjMtNzQuMS0yOC4zLTEwMi40IDBMMjU2IDE5MiAyMTYuNSAxNTIuNWM0LjktMTIuNiA3LjUtMjYuMiA3LjUtNDAuNSAwLTYxLjktNTAuMS0xMTItMTEyLTExMlMwIDUwLjEgMCAxMTIgNTAuMSAyMjQgMTEyIDIyNGMxNC4zIDAgMjcuOS0yLjcgNDAuNS03LjVMMTkyIDI1NnptOTcuOSA5Ny45TDM5Ni44IDQ2MC44YzI4LjMgMjguMyA3NC4xIDI4LjMgMTAyLjQgMCA3LjEtNy4xIDcuMS0xOC41IDAtMjUuNmwtMTQ1LjMtMTQ1LjMtNjQgNjR6TTY0IDExMmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem00OCAyNDBhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2eiJdCiAgICB9OwogICAgZmFDdXQgPSBmYVNjaXNzb3JzOwogICAgZmFCdWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVnIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxODgiLCAiTTE5MiA5NmMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgMy42YzAgMTUuNy0xMi43IDI4LjQtMjguNCAyOC40bC0xMzUuMSAwYy0xNS43IDAtMjguNC0xMi43LTI4LjQtMjguNGwwLTMuNnptMzQ1LjYgMTIuOGMxMC42IDE0LjEgNy43IDM0LjItNi40IDQ0LjhsLTk3LjggNzMuM2M1LjMgOC45IDkuMyAxOC43IDExLjggMjkuMWw5OC44IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDAgMCAzMmMwIDIuNi0uMSA1LjMtLjIgNy45bDgzLjQgNjIuNWMxNC4xIDEwLjYgMTcgMzAuNyA2LjQgNDQuOHMtMzAuNyAxNy00NC44IDYuNGwtNjMuMS00Ny4zYy0yMy4yIDQ0LjItNjYuNSA3Ni4yLTExNy43IDgzLjlMMzEyIDI4MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIzMC4yYy01MS4yLTcuNy05NC41LTM5LjctMTE3LjctODMuOUw4My4yIDQ3My42Yy0xNC4xIDEwLjYtMzQuMiA3LjctNDQuOC02LjRzLTcuNy0zNC4yIDYuNC00NC44bDgzLjQtNjIuNWMtLjEtMi42LS4yLTUuMi0uMi03LjlsMC0zMi05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk4LjggMGMyLjUtMTAuNCA2LjUtMjAuMiAxMS44LTI5LjFMNDQuOCAxNTMuNmMtMTQuMS0xMC42LTE3LTMwLjctNi40LTQ0LjhzMzAuNy0xNyA0NC44LTYuNEwxOTIgMTg0YzEyLjMtNS4xIDI1LjgtOCA0MC04bDExMiAwYzE0LjIgMCAyNy43IDIuOCA0MCA4bDEwOC44LTgxLjZjMTQuMS0xMC42IDM0LjItNy43IDQ0LjggNi40eiJdCiAgICB9OwogICAgZmFBcnJvd1JpZ2h0RnJvbUJyYWNrZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcmlnaHQtZnJvbS1icmFja2V0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNpZ24tb3V0Il0sICJmMDhiIiwgIk0xNjAgOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMOTYgMzJDNDMgMzIgMCA3NSAwIDEyOEwwIDM4NGMwIDUzIDQzIDk2IDk2IDk2bDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDB6TTUwMi42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w0MDIuNyAyMjQgMTkyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyMTAuNyAwLTczLjQgNzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4eiJdCiAgICB9OwogICAgZmFTaWduT3V0ID0gZmFBcnJvd1JpZ2h0RnJvbUJyYWNrZXQ7CiAgICBmYUhhbmRIb2xkaW5nSGFuZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWhvbGRpbmctaGFuZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGY3IiwgIk00NjYuOCAxODYuNWw0Mi41LTQyLjUgMzQuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMjIzLjYgMTZjLTI5IDAtNTcuMyA5LjMtODAuNyAyNi41TDE2LjMgMTM1LjhjLTE3LjggMTMuMS0yMS42IDM4LjEtOC41IDU1LjlzMzguMSAyMS42IDU1LjkgOC41TDE4My40IDExMiAyOTYgMTEyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC03MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE1Mi4yIDBjMzMuOSAwIDY2LjUtMTMuNSA5MC41LTM3LjV6bS0zNTcuNSAxMzlMNjYuNyAzNjggMzIgMzY4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMC41IDBjMjkgMCA1Ny4zLTkuMyA4MC43LTI2LjVsMTI2LjYtOTMuM2MxNy44LTEzLjEgMjEuNi0zOC4xIDguNS01NS45cy0zOC4xLTIxLjYtNTUuOS04LjVMMzkyLjYgNDAwIDI4MCA0MDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUyLjIgMGMtMzMuOSAwLTY2LjUgMTMuNS05MC41IDM3LjV6Il0KICAgIH07CiAgICBmYVN0cm9vcHdhZmVsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0cm9vcHdhZmVsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1NTEiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTMxMi42IDYzLjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwTDI1NiA5Ny42IDIyMi4xIDYzLjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsMzMuOSAzMy45LTQ1LjMgNDUuMy01Ni42LTU2LjZjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNTYuNiA1Ni42LTQ1LjMgNDUuMy0zMy45LTMzLjljLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZMOTcuNiAyNTYgNjMuNyAyODkuOWMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDMzLjktMzMuOSA0NS4zIDQ1LjMtNTYuNiA1Ni42Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsNTYuNi01Ni42IDQ1LjMgNDUuMy0zMy45IDMzLjljLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGwzMy45LTMzLjkgMzMuOSAzMy45YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtMzMuOS0zMy45IDQ1LjMtNDUuMyA1Ni42IDU2LjZjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC01Ni42LTU2LjYgNDUuMy00NS4zIDMzLjkgMzMuOWM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTMzLjktMzMuOSAzMy45LTMzLjljNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMGwtMzMuOSAzMy45LTQ1LjMtNDUuMyA1Ni42LTU2LjZjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMGwtNTYuNiA1Ni42LTQ1LjMtNDUuMyAzMy45LTMzLjljNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6TTE0Mi45IDI1Nmw0NS4zLTQ1LjMgNDUuMyA0NS4zLTQ1LjMgNDUuMy00NS4zLTQ1LjN6bTY3LjkgNjcuOWw0NS4zLTQ1LjMgNDUuMyA0NS4zLTQ1LjMgNDUuMy00NS4zLTQ1LjN6TTI3OC42IDI1Nmw0NS4zLTQ1LjMgNDUuMyA0NS4zLTQ1LjMgNDUuMy00NS4zLTQ1LjN6bTIyLjYtNjcuOWwtNDUuMyA0NS4zLTQ1LjMtNDUuMyA0NS4zLTQ1LjMgNDUuMyA0NS4zeiJdCiAgICB9OwogICAgZmFDaGlsZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGlsZCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMWFlIiwgIk05NiA2NEE2NCA2NCAwIDEgMSAyMjQgNjQgNjQgNjQgMCAxIDEgOTYgNjR6bTQ4IDMyMGwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyTDgwIDI4Ny44IDU5LjEgMzIxYy05LjQgMTUtMjkuMiAxOS40LTQ0LjEgMTBTLTQuNSAzMDEuOSA0LjkgMjg3bDM5LjktNjMuM0M2OS43IDE4NCAxMTMuMiAxNjAgMTYwIDE2MHM5MC4zIDI0IDExNS4yIDYzLjZMMzE1LjEgMjg3YzkuNCAxNSA0LjkgMzQuNy0xMCA0NC4xcy0zNC43IDQuOS00NC4xLTEwTDI0MCAyODcuOCAyNDAgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTYtMzIgMHoiXQogICAgfTsKICAgIGZhSWNlQ3JlYW0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaWNlLWNyZWFtIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI3ODQ4XSwgImY4MTAiLCAiTTMzNS4xIDE2MGMuNi01LjMgLjktMTAuNiAuOS0xNiAwLTc5LjUtNjQuNS0xNDQtMTQ0LTE0NFM0OCA2NC41IDQ4IDE0NGMwIDUuNCAuMyAxMC43IC45IDE2bC0uOSAwYy0yNi41IDAtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4bDI4OCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4bC0uOSAwek02NCAzMDRMMTY5LjIgNTI5LjVjNC4xIDguOCAxMyAxNC41IDIyLjggMTQuNXMxOC42LTUuNyAyMi44LTE0LjVMMzIwIDMwNCA2NCAzMDR6Il0KICAgIH07CiAgICBmYUNvbXB1dGVyTW91c2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tcHV0ZXItbW91c2UiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjg0MzMsICJtb3VzZSJdLCAiZjhjYyIsICJNMCAxOTJsMTY4IDAgMC0xOTItOCAwQzcxLjYgMCAwIDcxLjYgMCAxNjBsMCAzMnptMCA0OEwwIDM1MmMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MGw2NCAwYzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwbDAtMTEyLTM4NCAwem0zODQtNDhsMC0zMkMzODQgNzEuNiAzMTIuNCAwIDIyNCAwbC04IDAgMCAxOTIgMTY4IDB6Il0KICAgIH07CiAgICBmYU1vdXNlID0gZmFDb21wdXRlck1vdXNlOwogICAgZmFGYXVjZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmF1Y2V0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwMDUiLCAiTTE5MiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDAgMCA2NCAxOC43IDBjOC41IDAgMTYuNiAzLjQgMjIuNiA5LjRsMjIuNiAyMi42IDMyIDBjODguNCAwIDE2MCA3MS42IDE2MCAxNjAgMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMycy0xNC4zLTMyLTMyLTMybC0zNi4xIDBjLTIwLjIgMjktNTMuOSA0OC05MS45IDQ4cy03MS43LTE5LTkxLjktNDhMMzIgMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDAgMjIuNi0yMi42YzYtNiAxNC4xLTkuNCAyMi42LTkuNGwxOC43IDAgMC02NC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDY0IDk2IDY0bDk2IDB6Il0KICAgIH07CiAgICBmYUF3YXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImF3YXJkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1NTkiLCAiTTI0NS45LTI1LjljLTEzLjQtOC4yLTMwLjMtOC4yLTQzLjcgMC0yNC40IDE0LjktMzkuNSAxOC45LTY4LjEgMTguMy0xNS43LS40LTMwLjMgOC4xLTM3LjkgMjEuOS0xMy43IDI1LjEtMjQuOCAzNi4yLTQ5LjkgNDkuOS0xMy44IDcuNS0yMi4yIDIyLjItMjEuOSAzNy45IC43IDI4LjYtMy40IDQzLjctMTguMyA2OC4xLTguMiAxMy40LTguMiAzMC4zIDAgNDMuNyAxNC45IDI0LjQgMTguOSAzOS41IDE4LjMgNjguMS0uNCAxNS43IDguMSAzMC4zIDIxLjkgMzcuOSAyMi4xIDEyLjEgMzMuMyAyMi4xIDQ1LjEgNDEuNUw0Mi43IDQ1OC41Yy01LjkgMTEuOS0xLjEgMjYuMyAxMC43IDMyLjJsODYgNDNjMTEuNSA1LjcgMjUuNSAxLjQgMzEuNy05LjhsNTIuOC05NS4xIDUyLjggOTUuMWM2LjIgMTEuMiAyMC4yIDE1LjYgMzEuNyA5LjhsODYtNDNjMTEuOS01LjkgMTYuNy0yMC4zIDEwLjctMzIuMmwtNDguNi05Ny4yYzExLjctMTkuNCAyMy0yOS40IDQ1LjEtNDEuNSAxMy44LTcuNSAyMi4yLTIyLjIgMjEuOS0zNy45LS43LTI4LjYgMy40LTQzLjcgMTguMy02OC4xIDguMi0xMy40IDguMi0zMC4zIDAtNDMuNy0xNC45LTI0LjQtMTguOS0zOS41LTE4LjMtNjguMSAuNC0xNS43LTguMS0zMC4zLTIxLjktMzcuOS0yNS4xLTEzLjctMzYuMi0yNC44LTQ5LjktNDkuOS03LjUtMTMuOC0yMi4yLTIyLjItMzcuOS0yMS45LTI4LjYgLjctNDMuNy0zLjQtNjguMS0xOC4zek0yMjQgOTZhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6Il0KICAgIH07CiAgICBmYVBlcnNvbkRyb3duaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1kcm93bmluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTQ1IiwgIk0yNjQgODhhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMzMuOSA2NS42YzE2LjgtNS42IDM0LjkgMy41IDQwLjUgMjAuMmwxMC45IDMyLjhjOS40IDI4LjMgMzMuMiA0OS41IDYyLjUgNTUuNiA1LjYgMS4yIDExLjMgMS44IDE3LjEgMS44bDg4IDBjMTcuMiAwIDM0LjMtMi44IDUwLjYtOC4ybDExNC40LTM4LjFjMTYuOC01LjYgMzQuOSAzLjUgNDAuNSAyMC4ycy0zLjUgMzQuOS0yMC4yIDQwLjVMNDIzLjcgMjI4LjVjLTguNCAyLjgtMTcgNS4xLTI1LjcgNi45bC0yNi41IDg4LjNjLTYuMSAzLjQtMTIuMSA3LjMtMTcuOSAxMS43LTIyLjEgMTYuNi0yOS4xIDE2LjYtNTEuMiAwLTI2LjItMTkuNy01Ni45LTMwLjItODcuOC0zMS4zbDIwLjItNjcuMmMtNTEuNS0xMC43LTkzLjUtNDguMS0xMTAuMi05OGwtMTAuOS0zMi44Yy01LjYtMTYuOCAzLjUtMzQuOSAyMC4yLTQwLjV6TTQwMy40IDQxMi4xQzM3OS4xIDQzMC4zIDM1MS4xIDQ0OCAzMjAgNDQ4cy01OS4xLTE3LjctODMuNC0zNS45Yy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0yMy44IDE3LjktNTQuMSAzNS41LTg4LjEgMzUuMy0yMC40LS4xLTQwLjctNi43LTU5LjgtMjEuMS0xMC42LTgtMTIuNy0yMy00LjctMzMuNnMyMy0xMi43IDMzLjYtNC43YzExLjMgOC41IDIxLjYgMTEuNCAzMS4yIDExLjUgMTcuNiAuMSAzNy4zLTkuNCA1OC45LTI1LjcgMzguNC0yOSA5MC41LTI5IDEyOSAwIDI0IDE4LjEgNDAuNyAyNi4zIDU0LjUgMjYuM3MzMC41LTguMiA1NC41LTI2LjNjMzguNC0yOSA5MC41LTI5IDEyOSAwIDE2LjkgMTIuNyAzMi45IDIxLjUgNDcuOCAyNC42IDEzLjcgMi44IDI3LjQgLjkgNDIuMy0xMC4zIDEwLjYtOCAyNS42LTUuOSAzMy42IDQuN3M1LjkgMjUuNi00LjcgMzMuNmMtMjYuNCAxOS45LTU0LjIgMjQuNC04MC43IDE5LjEtMjUuMy01LjEtNDguMS0xOC45LTY3LjItMzMuMy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMHoiXQogICAgfTsKICAgIGZhQ2FtZXJhUm90YXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbWVyYS1yb3RhdGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTBkOCIsICJNMTM4LjcgOTZsMTAuNC0zMS4yQzE1NS42IDQ1LjIgMTczLjkgMzIgMTk0LjYgMzJsMTIyLjggMGMyMC43IDAgMzkgMTMuMiA0NS41IDMyLjhMMzczLjMgOTYgNDQ4IDk2YzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjRsNzQuNyAwek05NiAzMDUuOWMwIDMuOSAxLjQgNy43IDQgMTAuNmw0OCA1NGM2LjQgNy4yIDE3LjYgNy4yIDIzLjkgMGw0OC01NGMyLjYtMi45IDQtNi43IDQtMTAuNmwwLTEuOWMwLTguOC03LjItMTYtMTYtMTZsLTI0IDBjMC0zOS44IDMyLjItNzIgNzItNzIgNC40IDAgOC43IC40IDEyLjkgMS4ybDM0LjktMzkuM2MtMTQuNi02LjQtMzAuOC05LjktNDcuOC05LjktNjYuMyAwLTEyMCA1My43LTEyMCAxMjBsLTI0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDEuOXptMTk2LTQ2LjVjLTIuNiAyLjktNCA2LjctNCAxMC42bDAgMS45YzAgOC44IDcuMiAxNiAxNiAxNmwyNCAwYzAgMzkuOC0zMi4yIDcyLTcyIDcyLTQuNCAwLTguNy0uNC0xMi45LTEuMmwtMzQuOSAzOS4zYzE0LjcgNi40IDMwLjggOS45IDQ3LjggOS45IDY2LjMgMCAxMjAtNTMuNyAxMjAtMTIwbDI0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMS45YzAtMy45LTEuNC03LjctNC0xMC42bC00OC01NGMtNi40LTcuMi0xNy42LTcuMi0yMy45IDBsLTQ4IDU0eiJdCiAgICB9OwogICAgZmFGYWNlR3JpbkhlYXJ0czIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLWhlYXJ0cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUyNSwgImdyaW4taGVhcnRzIl0sICJmNTg0IiwgIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTYgMC0yMy4zLTMuMS00NS45LTguOS02Ny4zIDUuNS0xMy41IDguOS0yOC40IDguOS00NC43IDAtNTMtNDMtOTYtOTYtOTZsLTIuOSAwYy0yLjUgMC01IC4xLTcuNCAuMy00Mi4xLTMwLjQtOTMuOC00OC4zLTE0OS43LTQ4LjNTMTQ4LjQgMTcuOSAxMDYuMyA0OC4zYy0yLjUtLjItNC45LS4zLTcuNC0uM0w5NiA0OGMtNTMgMC05NiA0My05NiA5NiAwIDE2LjMgMy41IDMxLjIgOC45IDQ0LjctNS44IDIxLjQtOC45IDQ0LTguOSA2Ny4zIDAgMTQxLjQgMTE0LjYgMjU2IDI1NiAyNTZ6TTM4Ni43IDMyNC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSA0MDQuMiAxMDUuNyAzNDIuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xek0zMjIuOSA5NmMxMy41IDAgMjYuNSA1LjQgMzYgMTQuOWw5LjEgOS4xIDkuMS05LjFjOS41LTkuNSAyMi41LTE0LjkgMzYtMTQuOWwyLjkgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDUzLjQtNjYuOSA5NS43LTg5IDEwOC4yLTQuNCAyLjUtOS42IDIuNS0xNCAwLTIyLjEtMTIuNS04OS01NC44LTg5LTEwOC4yIDAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDIuOSAwem0tMTg4IDE0LjlsOS4xIDkuMSA5LjEtOS4xYzkuNS05LjUgMjIuNS0xNC45IDM2LTE0LjlsMi45IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCA1My40LTY2LjkgOTUuNy04OSAxMDguMi00LjQgMi41LTkuNiAyLjUtMTQgMC0yMi4xLTEyLjUtODktNTQuOC04OS0xMDguMiAwLTI2LjUgMjEuNS00OCA0OC00OGwyLjkgMGMxMy41IDAgMjYuNSA1LjQgMzYgMTQuOXoiXQogICAgfTsKICAgIGZhR3JpbkhlYXJ0czIgPSBmYUZhY2VHcmluSGVhcnRzMjsKICAgIGZhRmlsZUZyYWdtZW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtZnJhZ21lbnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTY5NyIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRsMCAyNDAgMTI4IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCAxMjggMTEyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzcuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNTguNyAxOC43QzI0Ni43IDYuNyAyMzAuNSAwIDIxMy41IDBMNjQgMHpNMzI1LjUgMTc2TDIzMiAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDIwOCA1OC41IDMyNS41IDE3NnpNMzIgMzUyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMHoiXQogICAgfTsKICAgIGZhUGVyc29uTWlsaXRhcnlSaWZsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tbWlsaXRhcnktcmlmbGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTU0YiIsICJNMTI4IDM5YzAtMTMgMTAtMjMuOCAyMi45LTI0LjlMMzAyLjcgMS40QzMxMiAuNyAzMjAgOCAzMjAgMTcuNEwzMjAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2TDE1MyA2NGMtMTMuOCAwLTI1LTExLjItMjUtMjV6bTE3LjYgNTdsMTU2LjggMGMxIDUuMiAxLjYgMTAuNSAxLjYgMTYgMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBjMC01LjUgLjYtMTAuOCAxLjYtMTZ6bTIyOCAzNjQuM0wzMjAgMzY5LjcgMzIwIDQ4MGMwIDEuMy0uMSAyLjUtLjIgMy44TDE0NS41IDIzNC45YzE2LjYtNy4xIDM0LjYtMTAuOSA1My4zLTEwLjlsNTAuNCAwYzE1LjkgMCAzMS4zIDIuOCA0NS44IDcuOUwzODkuOSA2Ny43Yy03LjctNC40LTEwLjMtMTQuMi01LjktMjEuOXMxNC4yLTEwLjMgMjEuOS01LjlsMjcuNyAxNmM3LjcgNC40IDEwLjMgMTQuMiA1LjkgMjEuOWwtNTUuNSA5Ni4xIDEuNiAuOWMxNS4zIDguOCAyMC42IDI4LjQgMTEuNyA0My43TDM2MC43IDI4MmMyIDIuOCAzLjkgNS44IDUuNyA4LjhsNzYuMSAxMjguOGMxMS4yIDE5IDQuOSA0My41LTE0LjEgNTQuOHMtNDMuNSA0LjktNTQuOC0xNC4xek0yODggNTEybC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMTAuMy01My42IDkwLjZjLTExLjIgMTktMzUuOCAyNS4zLTU0LjggMTQuMVMtNS43IDQzOC43IDUuNiA0MTkuN0w4MS43IDI5MC44YzkuNC0xNS44IDIxLjctMjkuMyAzNi00MEwyOTkuMSA1MTBjLTMuNSAxLjMtNy4yIDItMTEuMSAyek0yNjQgMzIwYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhVG9nZ2xlT24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9nZ2xlLW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyMDUiLCAiTTE5MiA2NEM4NiA2NCAwIDE1MCAwIDI1NlM4NiA0NDggMTkyIDQ0OGwxOTIgMGMxMDYgMCAxOTItODYgMTkyLTE5MlM0OTAgNjQgMzg0IDY0TDE5MiA2NHptMTkyIDk2YTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyeiJdCiAgICB9OwogICAgZmFMdW5nc1ZpcnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImx1bmdzLXZpcnVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwNjciLCAiTTI4OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE1MS4zYzkuNi00LjggMjAuNS03LjUgMzItNy41czIyLjQgMi43IDMyIDcuNUwzMjAgMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTQ1MC4xIDQ1MWM4IDE4LjMgOC4xIDM5LjIgLjIgNTcuNSAxMC4yIDIuMyAyMC42IDMuNSAzMS4yIDMuNSA1Mi4yIDAgOTQuNS00Mi4zIDk0LjUtOTQuNWwwLTYuMmMwLTExMS4xLTM2LjctMjE5LTEwNC40LTMwN0w0MjguOSA0OC43Yy04LjEtMTAuNi0yMC43LTE2LjctMzQtMTYuNy0yMy43IDAtNDIuOSAxOS4yLTQyLjkgNDIuOWwwIDEzOS45YzEuMiAyLjIgMi4yIDQuNiAzLjEgNi45IDI2LjQtMTEuNiA1OC4zLTYuNiA3OS45IDE1czI2LjYgNTMuNiAxNSA3OS45QzQ3NyAzMjcuMiA0OTYgMzUzLjMgNDk2IDM4My44cy0xOSA1Ni43LTQ1LjkgNjcuMXpNMjIwLjkgMjIxLjhjLjktMi40IDItNC43IDMuMS02LjlsMC0xMzguNWMwLTI0LjUtMTkuOS00NC40LTQ0LjQtNDQuNC0xMi41IDAtMjQuNCA1LjMtMzIuOCAxNC41bC0yNi40IDI5QzQyLjkgMTYwLjggMCAyNzEuOCAwIDM4N2wwIDMwLjVjMCA1Mi4yIDQyLjMgOTQuNSA5NC41IDk0LjUgMTAuNSAwIDIxLTEuMiAzMS4yLTMuNS03LjktMTguMy03LjgtMzkuMyAuMi01Ny41LTI2LjktMTAuNC00NS45LTM2LjYtNDUuOS02Ny4xczE5LTU2LjcgNDUuOS02Ny4xYy0xMS42LTI2LjQtNi42LTU4LjMgMTUtNzkuOXM1My42LTI2LjYgNzkuOS0xNXpNMTUyIDQwOGMyOC44IDAgNDMuMiAzNC44IDIyLjkgNTUuMi05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBjMjAuNC0yMC40IDU1LjItNS45IDU1LjIgMjIuOSAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMjguOCAzNC44LTQzLjIgNTUuMi0yMi45IDkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWMtMjAuNC0yMC40LTUuOS01NS4yIDIyLjktNTUuMiAxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGMtMjguOCAwLTQzLjItMzQuOC0yMi45LTU1LjIgOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGMtMjAuNCAyMC40LTU1LjIgNS45LTU1LjItMjIuOSAwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDI4LjgtMzQuOCA0My4yLTU1LjIgMjIuOS05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45YzIwLjQgMjAuNCA1LjkgNTUuMi0yMi45IDU1LjItMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHptMTA0LTgwYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNDAgODhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlLXRlbm5pcy1wYWRkbGUtYmFsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk1NSwgInBpbmctcG9uZy1wYWRkbGUtYmFsbCIsICJ0YWJsZS10ZW5uaXMiXSwgImY0NWQiLCAiTTk3IDEyN2w2Ny40LTY3LjRjMzguMi0zOC4yIDkwLTU5LjYgMTQ0LTU5LjYgMTEyLjUgMCAyMDMuNyA5MS4yIDIwMy43IDIwMy42IDAgNDYuNC0xNS44IDkxLjEtNDQuNSAxMjctMjMuNi0xNi44LTUyLjQtMjYuNy04My41LTI2LjctMzEuMSAwLTU5LjkgOS45LTgzLjQgMjYuNkw5NyAxMjd6TTI0MCA0NDhjMCA5LjcgMSAxOS4xIDIuOCAyOC4yLTE5LjgtNS4yLTM4LTE1LjUtNTIuNy0zMC4yLTEyLjItMTIuMi0zMS45LTEyLjItNDQuMSAwTDk2LjYgNDk1LjRjLTEwLjYgMTAuNi0yNSAxNi42LTQwIDE2LjYtMzEuMiAwLTU2LjYtMjUuMy01Ni42LTU2LjYgMC0xNSA2LTI5LjQgMTYuNi00MGw0OS40LTQ5LjRjMTIuMi0xMi4yIDEyLjItMzEuOSAwLTQ0LjEtMjEuNy0yMS43LTMzLjktNTEuMi0zMy45LTgxLjkgMC0yOS40IDExLjEtNTcuNiAzMS4xLTc5TDI2Ni42IDM2NC42QzI0OS45IDM4OC4xIDI0MCA0MTYuOSAyNDAgNDQ4em0xNDQtOTZhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6Il0KICAgIH07CiAgICBmYVBpbmdQb25nUGFkZGxlQmFsbCA9IGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsOwogICAgZmFUYWJsZVRlbm5pcyA9IGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsOwogICAgZmFCb3hlc1BhY2tpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm94ZXMtcGFja2luZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGM3IiwgIk0yMDggMGw4MCAwIDAgNTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTU2IDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0MTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEwOC44IDBjOC4yLTE0LjEgMTIuOC0zMC41IDEyLjgtNDhsMC0xNjBjMTAtMTMuNCAxNi0zMCAxNi00OGwwLTMyYzAtNDQuMi0zNS44LTgwLTgwLTgwbC0xNzYgMCAwLTk2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4ek0zMiAzMzZsMzIwIDAgMCAxMjhjMCAyNi41LTIxLjUgNDgtNDggNDhMODAgNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTEyOHpNNDggMTkybDI4OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJMNDggMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFQZXJzb25DaGFsa2JvYXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jaGFsa2JvYXJkIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1M2QiLCAiTTE5MiA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNMTc2IDUxMmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMzYgMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2IDAgMC00OCAxOTIgMCAwIDE5Mi0xOTIgMCAwLTMyLTY0IDAgMCA0OGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyMjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIyNGMwLTI2LjUtMjEuNS00OC00OC00OEwzNjggMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NC0xMjIuNyAwYy00NS42IDAtODguNSAyMS42LTExNS42IDU4LjJMMTQuMyAyNjAuOWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDExMiAyMzYuNyAxMTIgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6Il0KICAgIH07CiAgICBmYURpY2VUd28gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGljZS10d28iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODU3XSwgImY1MjgiLCAiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek0zNTIgMzUyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTEyOCAxOTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFBcnJvd1JpZ2h0QXJyb3dMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXJpZ2h0LWFycm93LWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs4NjQ0LCAiZXhjaGFuZ2UiXSwgImYwZWMiLCAiTTUwMi42IDE1MC42bC05NiA5NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMNDAyLjcgMTYwIDMyIDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyA5NiAzMiA5NmwzNzAuNyAwLTQxLjQtNDEuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3ptLTM5Ny4zIDM1MmwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDk2LTk2YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMTA5LjMgMzUyIDQ4MCAzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM3MC43IDAgNDEuNCA0MS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAweiJdCiAgICB9OwogICAgZmFFeGNoYW5nZSA9IGZhQXJyb3dSaWdodEFycm93TGVmdDsKICAgIGZhRm9vdGJhbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9vdGJhbGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NDQsICJmb290YmFsbC1iYWxsIl0sICJmNDRlIiwgIk0yNjEuMSAyMi42Yy04OSAxOC0xNTAuNSA2My40LTE5MCAxMjMuOS0yMy4zIDM1LjYtMzguMSA3NS4zLTQ2LjcgMTE1LjVMMjUxLjkgNDg5LjRjODktMTggMTUwLjUtNjMuNCAxOTAuMS0xMjMuOSAyMy4zLTM1LjYgMzguMS03NS4zIDQ2LjctMTE1LjVMMjYxLjEgMjIuNnptMjM2IDE2OC4xYzMuMi00Mi4zIC43LTgzLjMtNC44LTExOC43LTQuNC0yNy44LTI2LjgtNDgtNTMuMS01MS42LTQzLTUuOS04Mi4yLTcuNS0xMTcuOC01LjRMNDk3LjEgMTkwLjZ6TTE5MS43IDQ5Ny4xTDE1LjkgMzIxLjRjLTMuMiA0Mi4zLS43IDgzLjMgNC44IDExOC43IDQuNCAyNy44IDI2LjggNDggNTMuMSA1MS42IDQzIDUuOSA4Mi4yIDcuNSAxMTcuOCA1LjR6TTI3MS41IDE0M2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw2NCA2NGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC02NC02NGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6bS02NCA2NGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw2NCA2NGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC02NC02NGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6bS02NCA2NGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw2NCA2NGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC02NC02NGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYUZvb3RiYWxsQmFsbCA9IGZhRm9vdGJhbGw7CiAgICBmYVRydWNrTW9uc3RlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1tb25zdGVyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2M2IiLCAiTTMzNiA5Nmw0OCA2NC0xMjggMCAwLTY0IDgwIDB6bTEyOCA2NEwzODcuMiA1Ny42QzM3NS4xIDQxLjUgMzU2LjEgMzIgMzM2IDMyTDIyNCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA5Ni0xNDQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NGMwIDE4LjEgMTAuMSAzMy45IDI0LjkgNDIuMS0uNSA1LjcgMS4xIDExLjYgNC43IDE2LjQtMy43IDYuOS02LjggMTQuMS05IDIxLjgtMTEuNiAxLjctMjAuNiAxMS43LTIwLjYgMjMuOGwwIDE2YzAgMTIuMSA4LjkgMjIuMSAyMC42IDIzLjggMi4yIDcuNiA1LjMgMTQuOSA5IDIxLjgtNyA5LjQtNi4zIDIyLjggMi4zIDMxLjNsMTEuMyAxMS4zYzguNiA4LjYgMjEuOSA5LjMgMzEuMyAyLjIgNi44IDMuNyAxNC4xIDYuOCAyMS43IDkgMS43IDExLjYgMTEuNyAyMC42IDIzLjggMjAuNmwxNiAwYzEyLjEgMCAyMi4xLTguOSAyMy44LTIwLjYgNy42LTIuMiAxNC45LTUuMyAyMS43LTkgOS40IDcgMjIuOCA2LjMgMzEuMy0yLjJsMTEuMy0xMS4zYzguNi04LjYgOS4zLTIxLjkgMi4zLTMxLjMgMy43LTYuOCA2LjgtMTQuMSA5LTIxLjcgMTEuNi0xLjcgMjAuNi0xMS43IDIwLjYtMjMuOGwwLTE2YzAtMTIuMS04LjktMjIuMS0yMC42LTIzLjgtMi4yLTcuNi01LjMtMTQuOS05LTIxLjcgMi40LTMuMiAzLjktNi44IDQuNS0xMC41bDExNC4yIDBjLjYgMy43IDIuMSA3LjMgNC41IDEwLjUtMy43IDYuOS02LjggMTQuMS05IDIxLjgtMTEuNiAxLjctMjAuNiAxMS43LTIwLjYgMjMuOGwwIDE2YzAgMTIuMSA4LjkgMjIuMSAyMC42IDIzLjggMi4yIDcuNiA1LjMgMTQuOSA5IDIxLjgtNyA5LjQtNi4zIDIyLjggMi4yIDMxLjNsMTEuMyAxMS4zYzguNSA4LjYgMjEuOSA5LjMgMzEuMyAyLjIgNi44IDMuNyAxNC4xIDYuOCAyMS43IDkgMS43IDExLjYgMTEuNyAyMC42IDIzLjggMjAuNmwxNiAwYzEyLjEgMCAyMi4xLTguOSAyMy44LTIwLjYgNy42LTIuMiAxNC45LTUuMyAyMS44LTkgOS40IDcgMjIuOCA2LjMgMzEuMy0yLjJsMTEuMy0xMS4zYzguNi04LjYgOS4zLTIxLjkgMi4yLTMxLjMgMy43LTYuOCA2LjgtMTQuMSA5LTIxLjcgMTEuNi0xLjcgMjAuNi0xMS43IDIwLjYtMjMuOGwwLTE2YzAtMTIuMS04LjktMjIuMS0yMC42LTIzLjgtMi4yLTcuNi01LjMtMTQuOS05LTIxLjcgMy42LTQuOCA1LjItMTAuNyA0LjctMTYuNCAxNC44LTguMiAyNC45LTIzLjkgMjQuOS00Mi4xbDAtNjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDB6TTEyOCAzMzZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0yNzIgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXQogICAgfTsKICAgIGZhQXN0ZXJpc2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXN0ZXJpc2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMDAzMywgNjE1NDVdLCAiMmEiLCAiTTIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTY4LjYgMTQ0LTgzLjFjMTUuMy04LjggMzQuOS0zLjYgNDMuNyAxMS43czMuNiAzNC45LTExLjcgNDMuN0wyODggMjU2IDQzMiAzMzkuMWMxNS4zIDguOCAyMC42IDI4LjQgMTEuNyA0My43cy0yOC40IDIwLjYtNDMuNyAxMS43TDI1NiAzMTEuNCAyNTYgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTY4LjYtMTQ0IDgzLjFjLTE1LjMgOC44LTM0LjkgMy42LTQzLjctMTEuN1MuNyAzNDggMTYgMzM5LjFMMTYwIDI1NiAxNiAxNzIuOUMuNyAxNjQtNC41IDE0NC41IDQuMyAxMjkuMVMzMi43IDEwOC42IDQ4IDExNy40TDE5MiAyMDAuNiAxOTIgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUJhdHRlcnlGdWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhdHRlcnktZnVsbCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODI2NywgImJhdHRlcnkiLCAiYmF0dGVyeS01Il0sICJmMjQwIiwgIk01MjggMTI4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDIyNGMwIDguOC03LjIgMTYtMTYgMTZsLTQxNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yMjRjMC04LjggNy4yLTE2IDE2LTE2bDQxNiAwek0xMTIgNjRjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjI0YzAgNDQuMiAzNS44IDgwIDgwIDgwbDQxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwwLTQ4YzAtNDQuMi0zNS44LTgwLTgwLTgwTDExMiA2NHptNTYgMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwzMDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMzA0IDB6Il0KICAgIH07CiAgICBmYUJhdHRlcnkgPSBmYUJhdHRlcnlGdWxsOwogICAgZmFCYXR0ZXJ5NSA9IGZhQmF0dGVyeUZ1bGw7CiAgICBmYUNoaWxkRHJlc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hpbGQtZHJlc3MiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZTU5YyIsICJNMjI0IDY0QTY0IDY0IDAgMSAwIDk2IDY0IDY0IDY0IDAgMSAwIDIyNCA2NHpNODggNDAwbDAgODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTgwIDE2IDAgMCA4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtODAgMTcuOCAwYzEwLjkgMCAxOC42LTEwLjcgMTUuMi0yMS4xbC0zMS4xLTkzLjQgMjguNyAzNy44YzEwLjcgMTQuMSAzMC44IDE2LjggNDQuOCA2LjJzMTYuOC0zMC43IDYuMi00NC44TDI1NC42IDIwN2MtMjIuNC0yOS42LTU3LjUtNDctOTQuNi00N3MtNzIuMiAxNy40LTk0LjYgNDdMNi41IDI4NC43Yy0xMC43IDE0LjEtNy45IDM0LjIgNi4yIDQ0LjhzMzQuMiA3LjkgNDQuOC02LjJMODYuMiAyODUuNSA1NSAzNzguOUM1MS42IDM4OS4zIDU5LjMgNDAwIDcwLjIgNDAwTDg4IDQwMHoiXQogICAgfTsKICAgIGZhRmFjZUtpc3NCZWFtMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWtpc3MtYmVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUzNywgImtpc3MtYmVhbSJdLCAiZjU5NyIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTI0MCAyODhsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDEyLjMtNC42IDIzLjUtMTIuMiAzMiA3LjYgOC41IDEyLjIgMTkuNyAxMi4yIDMyIDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpNMTc2IDE4MGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHptMTMyIDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6Il0KICAgIH07CiAgICBmYUtpc3NCZWFtMiA9IGZhRmFjZUtpc3NCZWFtMjsKICAgIGZhVHJhc2hDYW5BcnJvd1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyYXNoLWNhbi1hcnJvdy11cCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ0cmFzaC1yZXN0b3JlLWFsdCJdLCAiZjgyYSIsICJNMTY3LjEtMTZsMTEzLjkgMGMxMy44IDAgMjYgOC44IDMwLjQgMjEuOUwzMjAgMzIgNDE2IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMmw5NiAwIDguNy0yNi4xQzE0MS4xLTcuMiAxNTMuMy0xNiAxNjcuMS0xNnpNMzIgMTQ0bDM4NCAwIDAgMzA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMDR6bTIwOSA3OWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTcyIDcyYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzEtMzEgMCAxMDIuMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTAyLjEgMzEgMzFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC03Mi03MnoiXQogICAgfTsKICAgIGZhVHJhc2hSZXN0b3JlQWx0ID0gZmFUcmFzaENhbkFycm93VXA7CiAgICBmYUZvbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9udCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMDMxIiwgIk0yODUuMSA1MC43QzI3OS45IDM5LjMgMjY4LjUgMzIgMjU2IDMycy0yMy45IDcuMy0yOS4xIDE4LjdMNTkuNSA0MTYgNDggNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTYuMSAwIDIyLTQ4IDIwOC4zIDAgMjIgNDgtNi4xIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTEuNSAwLTE2Ny40LTM2NS4zek0zMzAuOCAzMDRMMTgxLjIgMzA0IDI1NiAxNDAuOCAzMzAuOCAzMDR6Il0KICAgIH07CiAgICBmYUJvcmVIb2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvcmUtaG9sZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGMzIiwgIk0yNTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyMzIuNmMtMTkuMSAxMS4xLTMyIDMxLjctMzIgNTUuNCAwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0YzAtMjMuNy0xMi45LTQ0LjQtMzItNTUuNEwyODggMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTAgMzg0bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzJjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQ4IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTQ0YzAgNjEuOS01MC4xIDExMi0xMTIgMTEyUzE0NCAzODEuOSAxNDQgMzIwbDAtMTQ0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC00OCAwYy0yNi41IDAtNDggMjEuNS00OCA0OEwwIDM4NHoiXQogICAgfTsKICAgIGZhVmlydXNDb3ZpZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aXJ1cy1jb3ZpZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGE4IiwgIk0xOTIgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMCAwIDMzLjZjMzAuNyA0LjIgNTguOCAxNi4zIDgyLjMgMzQuMUwzODYuMSA5MiAzNzQuOCA4MC42Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNTYuNiA1Ni42YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTExLjMtMTEuMy0yMy44IDIzLjhjMTcuOSAyMy41IDI5LjkgNTEuNyAzNC4xIDgyLjNsMzMuNiAwIDAtMTZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDgwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTYtMzMuNiAwYy00LjIgMzAuNy0xNi4zIDU4LjgtMzQuMSA4Mi4zbDIzLjggMjMuOCAxMS4zLTExLjNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC01Ni42IDU2LjZjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMTEuMy0xMS4zLTIzLjgtMjMuOGMtMjMuNSAxNy45LTUxLjcgMjkuOS04Mi4zIDM0LjFsMCAzMy42IDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTYgMCAwLTMzLjZjLTMwLjctNC4yLTU4LjgtMTYuMy04Mi4zLTM0LjFsLTIzLjggMjMuOCAxMS4zIDExLjNjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEw0Ni43IDQwOC43Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMTEuMyAxMS4zIDIzLjgtMjMuOEM5Ny45IDMzOC44IDg1LjggMzEwLjcgODEuNiAyODBsLTMzLjYgMCAwIDE2YzAgMTMuMy0xMC43IDI0LTI0IDI0UzAgMzA5LjMgMCAyOTZsMC04MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTYgMzMuNiAwYzQuMi0zMC43IDE2LjMtNTguOCAzNC4xLTgyLjNMOTIgMTI1LjkgODAuNiAxMzcuMmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1Ni42LTU2LjZjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDEyNS45IDkyIDE0OS43IDExNS43YzIzLjUtMTcuOSA1MS43LTI5LjkgODIuMy0zNC4xbDAtMzMuNi0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMzIgMjAwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTk2IDk2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhRmlsZVBkZjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1wZGYiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFjMSIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw4MCAwIDAtMTEyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDE3NiAwIDAtMTY1LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTI0MCAzODBjLTExIDAtMjAgOS0yMCAyMGwwIDEyOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTI4IDEyIDBjMzMuMSAwIDYwLTI2LjkgNjAtNjBzLTI2LjktNjAtNjAtNjBsLTMyIDB6bTMyIDgwbC0xMiAwIDAtNDAgMTIgMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjB6bTk2LTgwYy0xMSAwLTIwIDktMjAgMjBsMCAxMjhjMCAxMSA5IDIwIDIwIDIwbDMyIDBjMjguNyAwIDUyLTIzLjMgNTItNTJsMC02NGMwLTI4LjctMjMuMy01Mi01Mi01MmwtMzIgMHptMjAgMTI4bDAtODggMTIgMGM2LjYgMCAxMiA1LjQgMTIgMTJsMCA2NGMwIDYuNi01LjQgMTItMTIgMTJsLTEyIDB6bTg4LTEwOGwwIDEyOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTQ0IDI4IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC0yOCAwIDAtMjQgMjggMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTQ4IDBjLTExIDAtMjAgOS0yMCAyMHoiXQogICAgfTsKICAgIGZhTGFuZ3VhZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGFuZ3VhZ2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFhYiIsICJNMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOS42IDAtOC40IDIzLjFjLTE2LjQgNDUuMi00MS4xIDg2LjUtNzIuMiAxMjIgMTQuMiA4LjggMjkgMTYuNiA0NC40IDIzLjVsNTAuNCAyMi40IDYyLjItMTQwYzUuMS0xMS42IDE2LjYtMTkgMjkuMi0xOXMyNC4xIDcuNCAyOS4yIDE5bDEyOCAyODhjNy4yIDE2LjItLjEgMzUuMS0xNi4yIDQyLjJzLTM1LjEtLjEtNDIuMi0xNi4ybC0yMC00NS0xNTcuNSAwLTIwIDQ1Yy03LjIgMTYuMi0yNi4xIDIzLjQtNDIuMiAxNi4ycy0yMy40LTI2LjEtMTYuMi00Mi4ybDM5LjgtODkuNS01MC40LTIyLjRjLTIzLTEwLjItNDUtMjIuNC02NS44LTM2LjQtMjEuMyAxNy4yLTQ0LjYgMzIuMi02OS41IDQ0LjdMNzguMyAzODAuNmMtMTUuOCA3LjktMzUgMS41LTQyLjktMTQuM3MtMS41LTM1IDE0LjMtNDIuOWwzNC41LTE3LjNjMTYuMy04LjIgMzEuOC0xNy43IDQ2LjQtMjguMy0xMy44LTEyLjctMjYuOC0yNi40LTM4LjktNDAuOUw4MS42IDIyNC43Yy0xMS4zLTEzLjYtOS41LTMzLjggNC4xLTQ1LjFzMzMuOC05LjUgNDUuMSA0LjFsMTAuMiAxMi4yYzExLjUgMTMuOSAyNC4xIDI2LjggMzcuNCAzOC43IDI3LjUtMzAuNCA0OS4yLTY2LjEgNjMuNS0xMDUuNGwuNS0xLjItMjEwLjMgMEMxNC4zIDEyOCAwIDExMy43IDAgOTZTMTQuMyA2NCAzMiA2NGw5NiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTQxNiAyNzAuOEwzNjUuNyAzODQgNDY2LjMgMzg0IDQxNiAyNzAuOHoiXQogICAgfTsKICAgIGZhU2hpZWxkSGFsdmVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoaWVsZC1oYWx2ZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2hpZWxkLWFsdCJdLCAiZjNlZCIsICJNMjU2IDBjNC42IDAgOS4yIDEgMTMuNCAyLjlMNDU3LjggODIuOGMyMiA5LjMgMzguNCAzMSAzOC4zIDU3LjItLjUgOTkuMi00MS4zIDI4MC43LTIxMy42IDM2My4yLTE2LjcgOC0zNi4xIDgtNTIuOCAwLTE3Mi40LTgyLjUtMjEzLjEtMjY0LTIxMy42LTM2My4yLS4xLTI2LjIgMTYuMy00Ny45IDM4LjMtNTcuMkwyNDIuNyAyLjlDMjQ2LjkgMSAyNTEuNCAwIDI1NiAwem0wIDY2LjhsMCAzNzguMWMxMzgtNjYuOCAxNzUuMS0yMTQuOCAxNzYtMzAzLjRsLTE3Ni03NC42IDAgMHoiXQogICAgfTsKICAgIGZhU2hpZWxkQWx0ID0gZmFTaGllbGRIYWx2ZWQ7CiAgICBmYUNhcmV0VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FyZXQtdXAiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjBkOCIsICJNMTQwLjMgMTM1LjJjMTIuNi0xMC4zIDMxLjEtOS41IDQyLjggMi4ybDEyOCAxMjhjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlTMzAxLjQgMzIwIDI4OC41IDMyMGwtMjU2IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhTLjcgMjc0LjUgOS45IDI2NS40bDEyOC0xMjggMi40LTIuMnoiXQogICAgfTsKICAgIGZhRmlsZVBlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXBlbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODIyMSwgImZpbGUtZWRpdCJdLCAiZjMxYyIsICJNMTI4LjEgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTQ2LjIgMCAxMC45LTU0LjVjNC4zLTIxLjcgMTUtNDEuNiAzMC42LTU3LjJsMTMyLjItMTMyLjIgMC05Ny41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDMyMi44IDE4LjdDMzEwLjggNi43IDI5NC41IDAgMjc3LjYgMEwxMjguMSAwek0zODkuNiAxNzZsLTkzLjUgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC05My41IDExNy41IDExNy41ek0zMzIuMyA0NjYuOWwtMTEuOSA1OS42Yy0uMiAuOS0uMyAxLjktLjMgMi45IDAgOCA2LjUgMTQuNiAxNC42IDE0LjYgMSAwIDEuOS0uMSAyLjktLjNsNTkuNi0xMS45YzEyLjQtMi41IDIzLjgtOC42IDMyLjctMTcuNWwxMTguOS0xMTguOS04MC04MC0xMTguOSAxMTguOWMtOC45IDguOS0xNSAyMC4zLTE3LjUgMzIuN3ptMjY3LjgtMTIzYzIyLjEtMjIuMSAyMi4xLTU3LjkgMC04MHMtNTcuOS0yMi4xLTgwIDBsLTI4LjggMjguOCA4MCA4MCAyOC44LTI4Ljh6Il0KICAgIH07CiAgICBmYUZpbGVFZGl0ID0gZmFGaWxlUGVuOwogICAgZmFQZXJzb25CaWtpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWJpa2luZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY5MiwgImJpa2luZyJdLCAiZjg0YSIsICJNMzY4IDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptMjcuMiA2NGwtNjEuOC00OC44Yy0xNy4zLTEzLjYtNDEuNy0xMy44LTU5LjEtLjNsLTgzLjEgNjQuMmMtMzAuNyAyMy44LTI4LjUgNzAuOCA0LjMgOTEuNkwyNTYgMzA1LjEgMjU2IDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTAuNy01LjMtMjAuNy0xNC4yLTI2LjZMMjYzIDIzMi45IDMyMy4zIDE4NC40IDM2NCAyMTdjNS43IDQuNSAxMi43IDcgMjAgN2w2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01Mi44IDB6TTExMiA1MTJhMTEyIDExMiAwIDEgMCAwLTIyNCAxMTIgMTEyIDAgMSAwIDAgMjI0em0zNTIgMGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6Il0KICAgIH07CiAgICBmYUJpa2luZyA9IGZhUGVyc29uQmlraW5nOwogICAgZmFCb29rT3BlblJlYWRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLW9wZW4tcmVhZGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImJvb2stcmVhZGVyIl0sICJmNWRhIiwgIk0yNTYgMTUyYTg4IDg4IDAgMSAwIDAtMTc2IDg4IDg4IDAgMSAwIDAgMTc2em0wIDI5OC43bDAtMTQ5LjNjMTYuMy02LjggMzIuOS0xMy43IDQ5LjctMjAuNyAzOS0xNi4yIDgwLjgtMjQuNiAxMjMuMS0yNC42bDE5LjIgMCAwIDE2MC0xOS4yIDBjLTU5LjEgMC0xMTcuNyAxMS43LTE3Mi4zIDM0LjVsLS41IC4yek0yNTYgMjMybC0yNS4xLTEwLjVDMTg0LjEgMjAyIDEzMy45IDE5MiA4My4yIDE5Mkw0OCAxOTJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4TDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDM1LjIgMGM1MC43IDAgMTAwLjkgMTAgMTQ3LjcgMjkuNWwxMi44IDUuM2M3LjkgMy4zIDE2LjcgMy4zIDI0LjYgMGwxMi44LTUuM2M0Ni44LTE5LjUgOTctMjkuNSAxNDcuNy0yOS41bDM1LjIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE5MmMwLTI2LjUtMjEuNS00OC00OC00OGwtMzUuMiAwYy01MC43IDAtMTAwLjkgMTAtMTQ3LjcgMjkuNUwyNTYgMjMyeiJdCiAgICB9OwogICAgZmFCb29rUmVhZGVyID0gZmFCb29rT3BlblJlYWRlcjsKICAgIGZhR2xhc3NXYXRlckRyb3BsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2xhc3Mtd2F0ZXItZHJvcGxldCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNGY1IiwgIk0zMiAwQzIzLjEgMCAxNC42IDMuNyA4LjYgMTAuMlMtLjYgMjUuNCAuMSAzNC4zTDI4LjkgNDM3LjdjMyA0MS45IDM3LjggNzQuMyA3OS44IDc0LjNsMTY2LjYgMGM0MiAwIDc2LjgtMzIuNCA3OS44LTc0LjNMMzgzLjkgMzQuM2MuNi04LjktMi40LTE3LjYtOC41LTI0LjFTMzYwLjkgMCAzNTIgMEwzMiAwek04MyAyOTcuNUw2Ni40IDY0IDMxNy42IDY0IDMwMSAyOTcuNSAyODggMzA0Yy0yMC4xIDEwLjEtNDMuOSAxMC4xLTY0IDBzLTQzLjktMTAuMS02NCAwLTQzLjkgMTAuMS02NCAwbC0xMy02LjV6TTI1NiAxOTZjMC0yNC0zMy43LTcwLjEtNTIuMi05My41LTYuMS03LjctMTcuNS03LjctMjMuNiAwLTE4LjUgMjMuNC01Mi4yIDY5LjUtNTIuMiA5My41IDAgMzMuMSAyOC43IDYwIDY0IDYwczY0LTI2LjkgNjQtNjB6Il0KICAgIH07CiAgICBmYVRvd2VyQnJvYWRjYXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvd2VyLWJyb2FkY2FzdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJicm9hZGNhc3QtdG93ZXIiXSwgImY1MTkiLCAiTTg3LjkgMTEuNWMtMTEuMy02LjktMjYuMS0zLjItMzMgOC4xLTI0LjggNDEtMzkgODkuMS0zOSAxNDAuNHMxNC4yIDk5LjQgMzkgMTQwLjRjNi45IDExLjMgMjEuNiAxNSAzMyA4LjFzMTUtMjEuNiA4LjEtMzNDNzUuNyAyNDEuOSA2NCAyMDIuMyA2NCAxNjBTNzUuNyA3OC4xIDk2LjEgNDQuNGM2LjktMTEuMyAzLjItMjYuMS04LjEtMzN6bTQwMC4xIDBjLTExLjMgNi45LTE1IDIxLjYtOC4xIDMzIDIwLjQgMzMuNyAzMi4xIDczLjMgMzIuMSAxMTUuNnMtMTEuNyA4MS45LTMyLjEgMTE1LjZjLTYuOSAxMS4zLTMuMiAyNi4xIDguMSAzM3MyNi4xIDMuMiAzMy04LjFjMjQuOC00MSAzOS04OS4xIDM5LTE0MC40UzU0NS44IDYwLjYgNTIxIDE5LjZjLTYuOS0xMS4zLTIxLjYtMTUtMzMtOC4xek0zMjAgMjE1LjRjMTkuMS0xMS4xIDMyLTMxLjcgMzItNTUuNCAwLTM1LjMtMjguNy02NC02NC02NHMtNjQgMjguNy02NCA2NGMwIDIzLjcgMTIuOSA0NC40IDMyIDU1LjRMMjU2IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjY0LjZ6TTE4MC4yIDkxYzcuMi0xMS4yIDMuOS0yNi03LjItMzMuMnMtMjYtMy45LTMzLjIgNy4yYy0xNy42IDI3LjQtMjcuOCA2MC0yNy44IDk1czEwLjIgNjcuNiAyNy44IDk1YzcuMiAxMS4yIDIyIDE0LjQgMzMuMiA3LjJzMTQuNC0yMiA3LjItMzMuMmMtMTIuOC0xOS45LTIwLjItNDMuNi0yMC4yLTY5czcuNC00OS4xIDIwLjItNjl6TTQzNi4yIDY1Yy03LjItMTEuMi0yMi0xNC40LTMzLjItNy4ycy0xNC40IDIyLTcuMiAzMy4yYzEyLjggMTkuOSAyMC4yIDQzLjYgMjAuMiA2OXMtNy40IDQ5LjEtMjAuMiA2OWMtNy4yIDExLjItMy45IDI2IDcuMiAzMy4yczI2IDMuOSAzMy4yLTcuMmMxNy42LTI3LjQgMjcuOC02MCAyNy44LTk1cy0xMC4yLTY3LjYtMjcuOC05NXoiXQogICAgfTsKICAgIGZhQnJvYWRjYXN0VG93ZXIgPSBmYVRvd2VyQnJvYWRjYXN0OwogICAgZmFNaW5pbWl6ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtaW5pbWl6ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjb21wcmVzcy1hcnJvd3MtYWx0Il0sICJmNzhjIiwgIk00NTYgMjI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0xNDRjMC05LjcgNS44LTE4LjUgMTQuOC0yMi4yUzMyMi4xIDMyLjIgMzI5IDM5bDQwIDQwIDczLjQtNzMuNEM0NDYgMiA0NTAuOSAwIDQ1NiAwczEwIDIgMTMuNyA1LjdsMzYuNyAzNi43QzUxMCA0NiA1MTIgNTAuOSA1MTIgNTZzLTIgMTAtNS43IDEzLjdMNDMzIDE0MyA0NzMgMTgzYzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJTNDY1LjcgMjI0IDQ1NiAyMjR6bTAgNjRjOS43IDAgMTguNSA1LjggMjIuMiAxNC44czEuNyAxOS4zLTUuMiAyNi4ybC00MCA0MCA3My40IDczLjRjMy42IDMuNiA1LjcgOC41IDUuNyAxMy43cy0yIDEwLTUuNyAxMy43bC0zNi43IDM2LjdDNDY2IDUxMCA0NjEuMSA1MTIgNDU2IDUxMnMtMTAtMi0xMy43LTUuN0wzNjkgNDMzIDMyOSA0NzNjLTYuOSA2LjktMTcuMiA4LjktMjYuMiA1LjJTMjg4IDQ2NS43IDI4OCA0NTZsMC0xNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTQ0IDB6bS0yNTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE0NGMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC00MC00MC03My40IDczLjRDNjYgNTEwIDYxLjEgNTEyIDU2IDUxMnMtMTAtMi0xMy43LTUuN0w1LjcgNDY5LjdDMiA0NjYgMCA0NjEuMSAwIDQ1NnMyLTEwIDUuNy0xMy43TDc5IDM2OSAzOSAzMjljLTYuOS02LjktOC45LTE3LjItNS4yLTI2LjJTNDYuMyAyODggNTYgMjg4bDE0NCAwek01NiAyMjRjLTkuNyAwLTE4LjUtNS44LTIyLjItMTQuOFMzMi4yIDE4OS45IDM5IDE4M0w3OSAxNDMgNS43IDY5LjdDMiA2NiAwIDYxLjEgMCA1NlMyIDQ2IDUuNyA0Mi4zTDQyLjMgNS43QzQ2IDIgNTAuOSAwIDU2IDBTNjYgMiA2OS43IDUuN0wxNDMgNzkgMTgzIDM5YzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJTMjI0IDQ2LjMgMjI0IDU2bDAgMTQ0YzAgMTMuMy0xMC43IDI0LTI0IDI0TDU2IDIyNHoiXQogICAgfTsKICAgIGZhQ29tcHJlc3NBcnJvd3NBbHQgPSBmYU1pbmltaXplOwogICAgZmFBcnJvd1JpZ2h0VG9DaXR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXJpZ2h0LXRvLWNpdHkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRiMyIsICJNMjg4IDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA4MCA0OCAwIDAtNzJjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDcyIDE2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyODhjMCAyNi41LTIxLjUgNDgtNDggNDhsLTI1NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTQxNnptNjQgNjRsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTYgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNMzUyIDMwNGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNzYtODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNNTEyIDMzNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNTMgMTY3bDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC03MiA3MmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0xMDIuMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDEwMi4xIDAtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMHoiXQogICAgfTsKICAgIGZhTGFwdG9wTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYXB0b3AtbWVkaWNhbCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmODEyIiwgIk02NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI0MC02NCAwIDAtMjQwLTM4NCAwIDAgMjQwLTY0IDAgMC0yNDB6TTAgNDAzLjJDMCAzOTIuNiA4LjYgMzg0IDE5LjIgMzg0bDYwMS42IDBjMTAuNiAwIDE5LjIgOC42IDE5LjIgMTkuMiAwIDQyLjQtMzQuNCA3Ni44LTc2LjggNzYuOEw3Ni44IDQ4MEMzNC40IDQ4MCAwIDQ0NS42IDAgNDAzLjJ6TTI4OCAxNjBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQwIDAgMCA0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDB6Il0KICAgIH07CiAgICBmYUJyZWFkU2xpY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJlYWQtc2xpY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdlYyIsICJNNjQgNDMybDAtMTc2Yy0zNS4zIDAtNjQtMjguNy02NC02NCAwLTIxNi41IDUxMi0yMTYuNSA1MTIgMCAwIDM1LjMtMjguNyA2NC02NCA2NGwwIDE3NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjg4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4eiJdCiAgICB9OwogICAgZmFHbG9iZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnbG9iZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc2MF0sICJmMGFjIiwgIk0zNTEuOSAyODBsLTE5MC45IDBjMi45IDY0LjUgMTcuMiAxMjMuOSAzNy41IDE2Ny40IDExLjQgMjQuNSAyMy43IDQxLjggMzUuMSA1Mi40IDExLjIgMTAuNSAxOC45IDEyLjIgMjIuOSAxMi4yczExLjctMS43IDIyLjktMTIuMmMxMS40LTEwLjYgMjMuNy0yOCAzNS4xLTUyLjQgMjAuMy00My41IDM0LjYtMTAyLjkgMzcuNS0xNjcuNHpNMTYwLjkgMjMybDE5MC45IDBDMzQ5IDE2Ny41IDMzNC43IDEwOC4xIDMxNC40IDY0LjYgMzAzIDQwLjIgMjkwLjcgMjIuOCAyNzkuMyAxMi4yIDI2OC4xIDEuNyAyNjAuNCAwIDI1Ni40IDBzLTExLjcgMS43LTIyLjkgMTIuMmMtMTEuNCAxMC42LTIzLjcgMjgtMzUuMSA1Mi40LTIwLjMgNDMuNS0zNC42IDEwMi45LTM3LjUgMTY3LjR6bS00OCAwQzExNi40IDE0Ni40IDEzOC41IDY2LjkgMTcwLjggMTQuNyA3OC43IDQ3LjMgMTAuOSAxMzEuMiAxLjUgMjMybDExMS40IDB6TTEuNSAyODBjOS40IDEwMC44IDc3LjIgMTg0LjcgMTY5LjMgMjE3LjMtMzIuMy01Mi4yLTU0LjQtMTMxLjctNTcuOS0yMTcuM0wxLjUgMjgwem0zOTguNCAwYy0zLjUgODUuNi0yNS42IDE2NS4xLTU3LjkgMjE3LjMgOTIuMS0zMi43IDE1OS45LTExNi41IDE2OS4zLTIxNy4zbC0xMTEuNCAwem0xMTEuNC00OEM1MDEuOSAxMzEuMiA0MzQuMSA0Ny4zIDM0MiAxNC43IDM3NC4zIDY2LjkgMzk2LjQgMTQ2LjQgMzk5LjkgMjMybDExMS40IDB6Il0KICAgIH07CiAgICBmYUZvbGRlck1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZvbGRlci1taW51cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjVkIiwgIk00NDggNDQ4TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwxMzguNyAwYzEzLjggMCAyNy4zIDQuNSAzOC40IDEyLjhsMzguNCAyOC44YzUuNSA0LjIgMTIuMyA2LjQgMTkuMiA2LjRMNDQ4IDgwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjQwYzAgMzUuMy0yOC43IDY0LTY0IDY0ek0xODQgMjQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXQogICAgfTsKICAgIGZhTWFza0ZhY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFzay1mYWNlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUxZDciLCAiTTMyMCA2NGMtMjcuMiAwLTUzLjggOC03Ni40IDIzLjFsLTM3LjEgMjQuOGMtMTUuOCAxMC41LTM0LjMgMTYuMS01My4zIDE2LjFMNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDc4LjdjMCA2Mi42IDQ1LjIgMTE2IDEwNyAxMjYuM2w5Ny45IDE2LjNjMzMgMjIgNzIuNiAzNC43IDExNS4xIDM0LjdzODIuMi0xMi44IDExNS4xLTM0LjdMNTMzIDM5Ni45YzYxLjctMTAuMyAxMDctNjMuNyAxMDctMTI2LjNsMC03OC43YzAtMzUuMy0yOC43LTY0LTY0LTY0bC04OS4yIDBjLTE5IDAtMzcuNS01LjYtNTMuMy0xNi4xTDM5Ni40IDg3LjFDMzczLjggNzIgMzQ3LjIgNjQgMzIwIDY0ek0xMzUuOSAzMzYuOWwtMTguNC0zLjFDODYuNiAzMjguNyA2NCAzMDIgNjQgMjcwLjdsMC03OC43IDQ4IDAgMCA0OGMwIDM1IDguNiA2Ny45IDIzLjkgOTYuOXptMzg2LjYtMy4xbC0xOC40IDMuMUM1MTkuNCAzMDcuOSA1MjggMjc1IDUyOCAyNDBsMC00OCA0OCAwIDAgNzguN2MwIDMxLjMtMjIuNiA1OC01My41IDYzLjF6TTE5MiAyMzJjMC0xMy4zIDEwLjctMjQgMjQtMjRsMjA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTIwOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptNTYgNTZsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFCb25nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjU1YyIsICJNNDQ4LjUgMzg0YzAgNDEuNS0xMy4xIDc5LjktMzUuNSAxMTEuMy03LjkgMTEuMS0yMS4yIDE2LjctMzQuOCAxNi43bC0yNDMuMyAwYy0xMy43IDAtMjYuOS01LjYtMzQuOC0xNi43LTIyLjQtMzEuNC0zNS41LTY5LjgtMzUuNS0xMTEuMyAwLTcxLjEgMzguNi0xMzMuMSA5Ni0xNjYuM2wwLTE1My43Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMTUzLjdjMTQuMiA4LjIgMjcuMiAxOC4yIDM4LjggMjkuNmwzOS4zLTM5LjMtNy03Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBjMTYgMTYgMzIgMzIgNDggNDggOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNy03LTQzLjMgNDMuM2MxNy4zIDI4LjkgMjcuMyA2Mi42IDI3LjMgOTguOHpNMjg4LjUgNjRsLTY0IDAgMCAxOTAuNi0zMiAxOC41Yy0xOS41IDExLjMtMzUuNyAyNy41LTQ2LjkgNDYuOWwyMjEuOCAwYy0xMS4yLTE5LjQtMjcuNC0zNS42LTQ2LjktNDYuOWwtMzItMTguNSAwLTE5MC42eiJdCiAgICB9OwogICAgZmFSb2FkQnJpZGdlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvYWQtYnJpZGdlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1NjMiLCAiTTMyIDMybDIwOCAwIDAgNjQtMjQgMCAwIDY0IDI0IDAgMCAxMjkuM2MtNDUuNCA3LjYtODAgNDcuMS04MCA5NC43bDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTRjMC0zOC44LTI2LjQtNzIuNi02NC04MmwwLTExMiA0MCAwIDAtNjQtOCAwQzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMnpNODggOTZsMCA2NCA4MCAwIDAtNjQtODAgMHpNMzM2IDMybDcyIDAgMCA3MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNzIgNzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtNzIgMCAwLTcyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNzItNzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0zNTJjMC0yNi41IDIxLjUtNDggNDgtNDh6bTk2IDE2MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYUFycm93VXA5MSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC05LTEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic29ydC1udW1lcmljLXVwLWFsdCJdLCAiZjg4NyIsICJNMTUwLjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDk2IDE0MS4zIDk2IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzA2LjcgNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2ek0zNjUuMSAyMDYuNmMtOS42IDE0LjgtNS40IDM0LjYgOS40IDQ0LjNzMzQuNiA1LjQgNDQuMy05LjRsNDIuMS02NC45YzEyLjQtMTkuMiAxOS4xLTQxLjYgMTkuMS02NC41IDAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwYzAgMzYuMSAyMy45IDY2LjcgNTYuOCA3Ni42bC0xMS43IDE4ek0zNzYgMTEyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTQyLjcgMTgyYy04LjMtNi0xOS4xLTcuNy0yOC44LTQuNGwtNDggMTZjLTE2LjggNS42LTI1LjggMjMuNy0yMC4yIDQwLjVzMjMuNyAyNS44IDQwLjUgMjAuMmw1LjktMiAwIDUxLjYtMTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNiAwIDAtOTZjMC0xMC4zLTQuOS0xOS45LTEzLjMtMjZ6Il0KICAgIH07CiAgICBmYVNvcnROdW1lcmljVXBBbHQgPSBmYUFycm93VXA5MTsKICAgIGZhTW91bnRhaW5DaXR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vdW50YWluLWNpdHkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUyZSIsICJNMjU2LjMgNDhjMC0yNi41IDIxLjUtNDggNDgtNDhsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQ4IDQ4IDAgMC03MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNzIgMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDMyMGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtNzcuOCAwYzQtMTUuNCAyLjQtMzIuNi02LjctNDguMkwzNTQuNiAyNTYgMzY4LjMgMjU2YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtNi4xIDAtMTEuNCAzLjQtMTQuMSA4LjVsLTQyLjYtNzNjLTYtMTAuMi0xNC4xLTE4LTIzLjMtMjMuM2wwLTU2LjJ6bTY0IDY0bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2MCA5NmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNiA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0tMjcyLTY0LjdsLTY1LjEgMTExLjYgMzMuMSAzMy4xIDQ4LTQ4IDQwLjQgMC01Ni40LTk2Ljd6bS0yNy42LTQ3LjljMTIuMy0yMS4yIDQyLjktMjEuMiA1NS4zIDBMNDIwLjMgNDYzLjljMTIuNCAyMS4zLTIuOSA0OC4xLTI3LjYgNDguMUw1NiA1MTJjLTI0LjcgMC00MC4xLTI2LjgtMjcuNi00OC4xTDE5Ni43IDE3NS40eiJdCiAgICB9OwogICAgZmFBcnJvd0Rvd245MSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLTktMSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LW51bWVyaWMtZGVzYyIsICJzb3J0LW51bWVyaWMtZG93bi1hbHQiXSwgImY4ODYiLCAiTTIzMC42IDM5MC42bC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDM3MC43IDk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDYuNyAyNS40LTI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3ptMTM0LjUtMTg0bDExLjctMThjLTMyLjktOS45LTU2LjgtNDAuNS01Ni44LTc2LjYgMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDIyLjktNi42IDQ1LjMtMTkuMSA2NC41bC00Mi4xIDY0LjljLTkuNiAxNC44LTI5LjQgMTkuMS00NC4zIDkuNHMtMTkuMS0yOS40LTkuNC00NC4zek00MjQgMTEyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bS01LjMgMTgyYzguMyA2IDEzLjMgMTUuNyAxMy4zIDI2bDAgOTYgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwIDAtNTEuNi01LjkgMmMtMTYuOCA1LjYtMzQuOS0zLjUtNDAuNS0yMC4yczMuNS0zNC45IDIwLjItNDAuNWw0OC0xNmM5LjgtMy4zIDIwLjUtMS42IDI4LjggNC40eiJdCiAgICB9OwogICAgZmFTb3J0TnVtZXJpY0Rlc2MgPSBmYUFycm93RG93bjkxOwogICAgZmFTb3J0TnVtZXJpY0Rvd25BbHQgPSBmYUFycm93RG93bjkxOwogICAgZmFGYWNlR3JpbldpZGUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi13aWRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTE1LCAiZ3Jpbi1hbHQiXSwgImY1ODEiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0zODYuNyAzMDguOWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtMjIuNCA2MS4zLTgxLjMgMTA1LjEtMTUwLjMgMTA1LjFTMTI4LjEgMzg4LjIgMTA1LjcgMzI2LjljLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMXpNMjA4IDE5MmMwIDM1LjMtMTQuMyA2NC0zMiA2NHMtMzItMjguNy0zMi02NCAxNC4zLTY0IDMyLTY0IDMyIDI4LjcgMzIgNjR6bTEyOCA2NGMtMTcuNyAwLTMyLTI4LjctMzItNjRzMTQuMy02NCAzMi02NCAzMiAyOC43IDMyIDY0LTE0LjMgNjQtMzIgNjR6Il0KICAgIH07CiAgICBmYUdyaW5BbHQyID0gZmFGYWNlR3JpbldpZGUyOwogICAgZmFQb29wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBvb3AiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjYxOSIsICJNMjU0LjQgNi42YzMuNS00LjMgOS02LjUgMTQuNS01LjcgNDYuOSA2LjMgODMuMSA0Ni41IDgzLjEgOTUuMSAwIDExLjItMS45IDIyLTUuNSAzMmw1LjUgMGMzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDE5LjEtOC40IDM2LjMtMjEuNyA0OGwxMy43IDBjMzkuOCAwIDcyIDMyLjIgNzIgNzIgMCAyMy4yLTExIDQzLjgtMjggNTcgMzQuMSA1LjcgNjAgMzUuMyA2MCA3MSAwIDM5LjgtMzIuMiA3Mi03MiA3Mkw3MiA1MTJjLTM5LjggMC03Mi0zMi4yLTcyLTcyIDAtMzUuNyAyNS45LTY1LjMgNjAtNzEtMTctMTMuMi0yOC0zMy44LTI4LTU3IDAtMzkuOCAzMi4yLTcyIDcyLTcybDEzLjcgMGMtMTMuMy0xMS43LTIxLjctMjguOS0yMS43LTQ4IDAtMzUuMyAyOC43LTY0IDY0LTY0bDE2LjIgMGM0NC4xLS4xIDc5LjgtMzUuOSA3OS44LTgwIDAtOS4yLTEuNS0xNy45LTQuMy0yNi4xLTEuOC01LjItLjgtMTEuMSAyLjgtMTUuNHoiXQogICAgfTsKICAgIGZhRGhhcm1hY2hha3JhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRoYXJtYWNoYWtyYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3ODRdLCAiZjY1NSIsICJNMzM3LjggMjA1LjdsNDguNi00Mi41YzEzLjggMTkuMyAyMy40IDQxLjkgMjcuNCA2Ni4ybC02NC40IDQuM2MtMi40LTEwLjEtNi40LTE5LjUtMTEuNi0yOHptMTQwLjEgMTkuNWMtNS4zLTM4LjgtMjAuNi03NC41LTQzLjItMTA0LjNsLjgtLjdDNDQ5IDEwOC40IDQ0OS43IDg3LjYgNDM3IDc1cy0zMy40LTEyLTQ1LjIgMS41bC0uNyAuOGMtMjkuOC0yMi42LTY1LjUtMzcuOS0xMDQuMy00My4ybC4xLTEuMWMxLjItMTcuOS0xMy0zMy0zMC45LTMzcy0zMi4xIDE1LjItMzAuOSAzM2wuMSAxLjFjLTM4LjggNS4zLTc0LjUgMjAuNi0xMDQuMyA0My4ybC0uNy0uOEMxMDguNCA2MyA4Ny42IDYyLjMgNzUgNzVzLTEyIDMzLjQgMS41IDQ1LjJsLjggLjdjLTIyLjYgMjkuOC0zNy45IDY1LjUtNDMuMiAxMDQuM2wtMS4xLS4xYy0xNy45LTEuMi0zMyAxMy0zMyAzMC45czE1LjIgMzIuMSAzMyAzMC45bDEuMS0uMWM1LjMgMzguOCAyMC42IDc0LjUgNDMuMiAxMDQuM2wtLjggLjdDNjMgNDAzLjYgNjIuMyA0MjQuNCA3NSA0MzdzMzMuNCAxMiA0NS4yLTEuNWwuNy0uOGMyOS44IDIyLjYgNjUuNSAzNy45IDEwNC4zIDQzLjJsLS4xIDEuMWMtMS4yIDE3LjkgMTMgMzMgMzAuOSAzM3MzMi4xLTE1LjIgMzAuOS0zM2wtLjEtMS4xYzM4LjgtNS4zIDc0LjUtMjAuNiAxMDQuMy00My4ybC43IC44YzExLjggMTMuNSAzMi41IDE0LjIgNDUuMiAxLjVzMTItMzMuNC0xLjUtNDUuMmwtLjgtLjdjMjIuNi0yOS44IDM3LjktNjUuNSA0My4yLTEwNC4zbDEuMSAuMWMxNy45IDEuMiAzMy0xMyAzMy0zMC45cy0xNS4yLTMyLjEtMzMtMzAuOWwtMS4xIC4xek0xNjMuMiAxMjUuNmMxOS4zLTEzLjggNDEuOS0yMy40IDY2LjItMjcuNWw0LjMgNjQuNGMtMTAgMi40LTE5LjUgNi40LTI4IDExLjZsLTQyLjUtNDguNnptLTY1IDEwMy44YzQuMS0yNC40IDEzLjctNDYuOSAyNy41LTY2LjJsNDguNiA0Mi41Yy01LjMgOC41LTkuMiAxOC0xMS42IDI4bC02NC40LTQuM3ptMjcuNSAxMTkuNGMtMTMuOC0xOS4zLTIzLjQtNDEuOS0yNy41LTY2LjJsNjQuNC00LjNjMi40IDEwLjEgNi40IDE5LjUgMTEuNiAyOGwtNDguNiA0Mi41em0xMDMuOCA2NWMtMjQuNC00LjEtNDYuOS0xMy43LTY2LjItMjcuNGw0Mi41LTQ4LjZjOC41IDUuMyAxOCA5LjIgMjggMTEuNmwtNC4zIDY0LjR6bTExOS40LTI3LjRjLTE5LjMgMTMuOC00MS45IDIzLjQtNjYuMiAyNy40bC00LjMtNjQuNGMxMC0yLjQgMTkuNS02LjQgMjgtMTEuNmw0Mi41IDQ4LjZ6bTY1LTEwMy44Yy00LjEgMjQuNC0xMy43IDQ2LjktMjcuNCA2Ni4ybC00OC42LTQyLjVjNS4zLTguNiA5LjItMTggMTEuNi0yOGw2NC40IDQuM3ptLTY1LTE1Ni45bC00Mi41IDQ4LjZjLTguNi01LjMtMTgtOS4yLTI4LTExLjZsNC4zLTY0LjRjMjQuNCA0LjEgNDYuOSAxMy43IDY2LjIgMjcuNXpNMjU2IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUJhdHRlcnlRdWFydGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhdHRlcnktcXVhcnRlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJiYXR0ZXJ5LTIiXSwgImYyNDMiLCAiTTUyOCAxMjhjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjI0YzAgOC44LTcuMiAxNi0xNiAxNmwtNDE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTIyNGMwLTguOCA3LjItMTYgMTYtMTZsNDE2IDB6TTExMiA2NGMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyMjRjMCA0NC4yIDM1LjggODAgODAgODBsNDE2IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC00OGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybDAtNDhjMC00NC4yLTM1LjgtODAtODAtODBMMTEyIDY0em01NiAxMTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTY0IDB6Il0KICAgIH07CiAgICBmYUJhdHRlcnkyID0gZmFCYXR0ZXJ5UXVhcnRlcjsKICAgIGZhQW5raCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmtoIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbOTc2NV0sICJmNjQ0IiwgIk05NiAxMjhjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NGMwIDQxLjYtMjAuNyA3Ni42LTQ2LjYgMTA0LjEtNS45IDYuMi0xMS44IDExLjgtMTcuNCAxNi43LTUuNi00LjktMTEuNS0xMC41LTE3LjQtMTYuNy0yNS45LTI3LjUtNDYuNi02Mi42LTQ2LjYtMTA0LjF6TTE2MCAwQzg5LjMgMCAzMiA1Ny4zIDMyIDEyOCAzMiAxODAuNCA1My41IDIyMy41IDc4LjggMjU2TDMyIDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwIDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjAgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNDYuOCAwQzI2Ni41IDIyMy41IDI4OCAxODAuNCAyODggMTI4IDI4OCA1Ny4zIDIzMC43IDAgMTYwIDB6Il0KICAgIH07CiAgICBmYURpYW1vbmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGlhbW9uZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk4MzBdLCAiZjIxOSIsICJNMTcgMjE1TDIxNSAxN0MyMjUuOSA2LjEgMjQwLjYgMCAyNTYgMHMzMC4xIDYuMSA0MSAxN0w0OTUgMjE1YzEwLjkgMTAuOSAxNyAyNS42IDE3IDQxcy02LjEgMzAuMS0xNyA0MUwyOTcgNDk1Yy0xMC45IDEwLjktMjUuNiAxNy00MSAxN3MtMzAuMS02LjEtNDEtMTdMMTcgMjk3QzYuMSAyODYuMSAwIDI3MS40IDAgMjU2czYuMS0zMC4xIDE3LTQxeiJdCiAgICB9OwogICAgZmFTdWJzY3JpcHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Vic2NyaXB0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxMmMiLCAiTTk2IDY0Qzc4LjMgNjQgNjQgNzguMyA2NCA5NnMxNC4zIDMyIDMyIDMybDE1LjMgMCA4OS42IDEyOC04OS42IDEyOC0xNS4zIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMGMxMC40IDAgMjAuMi01LjEgMjYuMi0xMy42TDI0MCAzMTEuOCAzMjUuOCA0MzQuNGM2IDguNiAxNS44IDEzLjYgMjYuMiAxMy42bDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE1LjMgMC04OS42LTEyOCA4OS42LTEyOCAxNS4zIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDBjLTEwLjQgMC0yMC4yIDUuMS0yNi4yIDEzLjZMMjQwIDIwMC4yIDE1NC4yIDc3LjZDMTQ4LjIgNjkuMSAxMzguNCA2NCAxMjggNjRMOTYgNjR6TTU0NCAzMjBjMC0xMS4xLTUuNy0yMS40LTE1LjItMjcuMnMtMjEuMi02LjQtMzEuMS0xLjRsLTMyIDE2Yy0xNS44IDcuOS0yMi4yIDI3LjEtMTQuMyA0Mi45IDUuNiAxMS4yIDE2LjkgMTcuNyAyOC42IDE3LjdsMCA4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTI4eiJdCiAgICB9OwogICAgZmFSdXBlZVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVwZWUtc2lnbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzgzNjAsICJydXBlZSJdLCAiZjE1NiIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmw4MCAwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgNTQuMy0zMCAxMDEuNS03NC40IDEyNi4xbDQxIDEzNi43YzUuMSAxNi45LTQuNSAzNC44LTIxLjUgMzkuOHMtMzQuOC00LjUtMzkuOC0yMS41TDEyMC4xIDMxOS44Yy0yLjcgLjEtNS40IC4yLTguMSAuMmwtNDggMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ2NS43IDAgNDQ4TDAgNjR6TTY0IDI1Nmw0OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwbC00OCAwIDAgMTYwem0yODUuMS0zMmwzNC45IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM0LjkgMGMtNy4yIDAtMTMuMSA1LjktMTMuMSAxMy4xIDAgNS43IDMuNyAxMC43IDkuMSAxMi41bDQ5LjQgMTUuOWMzMS45IDEwLjMgNTMuNSAzOS45IDUzLjUgNzMuNCAwIDQyLjYtMzQuNSA3Ny4xLTc3LjEgNzcuMUwzMjAgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDUwLjkgMGM3LjIgMCAxMy4xLTUuOSAxMy4xLTEzLjEgMC01LjctMy43LTEwLjctOS4xLTEyLjVsLTQ5LjQtMTUuOWMtMzEuOS0xMC4zLTUzLjUtMzkuOS01My41LTczLjQgMC00Mi42IDM0LjUtNzcuMSA3Ny4xLTc3LjF6Il0KICAgIH07CiAgICBmYVJ1cGVlID0gZmFSdXBlZVNpZ247CiAgICBmYVBlcnNvblJpZmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1yaWZsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTRlIiwgIk00MTYgMEwzODQgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwwIDEwMC4zYy05LjYgNS41LTE2IDE1LjktMTYgMjcuN2wwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE0NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNiAwIDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2bDU5LjUgMGMxMC40IDAgMTgtOS44IDE1LjUtMTkuOWwtMjMtOTIuMSA0NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtNDggMCAwLTI2LjcgNTMuMS0xNy43YzYuNS0yLjIgMTAuOS04LjMgMTAuOS0xNS4ybDAtODQuNWMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDU2LTE2IDUuMyAwLTEwOS4zYzAtMTEuOC02LjQtMjIuMi0xNi0yNy43TDQzMiAxNmMwLTguOC03LjItMTYtMTYtMTZ6TTIyNCAyMDhDMTE4IDIwOCAzMiAyOTQgMzIgNDAwbDAgNDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTQ4YzAtMzIuNSAxMi4xLTYyLjEgMzItODQuN2wwIDE5Ni43IDE2MCAwIDAtMjkzLjFjLTIwLTcuMS00MS42LTEwLjktNjQtMTAuOXpNMjgwIDg4YTcyIDcyIDAgMSAwIC0xNDQgMCA3MiA3MiAwIDEgMCAxNDQgMHoiXQogICAgfTsKICAgIGZhRCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTAwXSwgIjQ0IiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDEyOCAwYzEyMy43IDAgMjI0IDEwMC4zIDIyNCAyMjRTMjgzLjcgNDgwIDE2MCA0ODBMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDY0ek02NCA5NmwwIDMyMCA5NiAwYzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwUzI0OC40IDk2IDE2MCA5Nkw2NCA5NnoiXQogICAgfTsKICAgIGZhU3F1YXJlTmZpID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1uZmkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTU3NiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNOTMgMTcyLjNsMzUgNjMgMC01MS40YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxNDRjMCAxMC45LTcuNCAyMC41LTE4IDIzLjJzLTIxLjctMi0yNy0xMS42bC0zNS02MyAwIDUxLjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNDRjMC0xMC45IDcuNC0yMC41IDE4LTIzLjJzMjEuNyAyIDI3IDExLjZ6TTIwOCAxODRjMC0xMy4zIDEwLjctMjQgMjQtMjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNTYgMCAwIDMyIDQwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQwIDAgMCA0MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE0NHptMTkyIDBsMCAxNDRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhVGVldGggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVldGgiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjYyZSIsICJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTE0NCAyMDhsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMjRjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6bTEyOCAwbDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4ek04MCAxNzZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyem0zMjAgMzJsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6TTQ4IDMzNmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNnptMTQ0IDQ4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC02NCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxNmMwIDI2LjUgMjEuNSA0OCA0OCA0OHptMTI4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4em0xMTItMTZjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyeiJdCiAgICB9OwogICAgZmFNYWduaWZ5aW5nR2xhc3NEb2xsYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFnbmlmeWluZy1nbGFzcy1kb2xsYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2VhcmNoLWRvbGxhciJdLCAiZjY4OCIsICJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NkMyOTYuMyA0MDEuMSAyNTMuOSA0MTYgMjA4IDQxNiA5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMCA0MTYgOTMuMSA0MTYgMjA4ek0yMTIgOTZjLTExIDAtMjAgOS0yMCAyMGwwIDRjLTI4LjggLjMtNTIgMjMuNy01MiA1Mi41IDAgMjUuNyAxOC41IDQ3LjYgNDMuOSA1MS44bDQxLjcgN2M2IDEgMTAuNCA2LjIgMTAuNCAxMi4zIDAgNi45LTUuNiAxMi41LTEyLjUgMTIuNUwxNjggMjU2Yy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGwyNCAwIDAgNGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTQuN2MyNS00LjEgNDQtMjUuNyA0NC01MS44IDAtMjUuNy0xOC41LTQ3LjYtNDMuOS01MS44bC00MS43LTdjLTYtMS0xMC40LTYuMi0xMC40LTEyLjMgMC02LjkgNS42LTEyLjUgMTIuNS0xMi41bDQ3LjUgMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTggMCAwLTRjMC0xMS05LTIwLTIwLTIweiJdCiAgICB9OwogICAgZmFTZWFyY2hEb2xsYXIgPSBmYU1hZ25pZnlpbmdHbGFzc0RvbGxhcjsKICAgIGZhRHVtcHN0ZXJGaXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImR1bXBzdGVyLWZpcmUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjc5NCIsICJNMTY0LjMgNjRMMTM4LjcgMTkyIDU2IDE5MmMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00LjFjMC0yLjYgLjQtNS4xIDEuMi03LjZMNTguNSA4MC40QzYxLjggNzAuNiA3MSA2NCA4MS4zIDY0bDgzIDB6bTIzLjQgMTI4bDI1LjYtMTI4IDgyLjcgMCAwIDEyOC0xMDguMyAwek0zNDQgNjRsODIuNyAwIDE2IDgwYy0xNC43IC4yLTI5LjMgNS41LTQwLjkgMTUuOS0xMS41IDEwLjMtMjIuNSAyMS0zMi44IDMyLjFsLTI0LjkgMCAwLTEyOHpNOTYgMjQwbDIzMy4yIDBjLTYuNCA4LjgtMTIuMyAxNy42LTE3LjcgMjYuMy0yMS40IDM0LjctMzkuNSA3Ni4xLTM5LjUgMTE1LjggMCAxNy4xIDIuMSAzMy44IDYgNDkuOWwtMTIwLjQgMCAxLjkgMTAuM2MzLjIgMTcuNC04LjQgMzQtMjUuOCAzNy4ycy0zNC04LjQtMzcuMi0yNS44QzcxIDMxMy4zIDU4IDI0Mi4xIDU3LjcgMjQwTDk2IDI0MHptNTEyLTcyYzAgMTEtNy40IDIwLjMtMTcuNSAyMy4xLS45LS44LTEuNy0xLjYtMi42LTIuNC0yMS44LTIwLTU0LjMtMjEuOC03OC01LjUtNC4yLTQuMy04LjUtOC41LTEyLjktMTIuNmwtMjEuMy0xMDYuNiA4MyAwYzEwLjMgMCAxOS41IDYuNiAyMi44IDE2LjRsMjUuMyA3NS45Yy44IDIuNCAxLjIgNSAxLjIgNy42bDAgNC4xek01MDUuNyAyNDAuM0w1MTggMjI2LjVjNS40LTYuMSAxMy4zLTguOCAyMC45LTguOSA3LjIgMCAxNC4zIDIuNiAxOS45IDcuOCAxOS43IDE4LjMgMzkuOCA0My4yIDU1IDcwLjYgMTUuMSAyNy4yIDI2LjIgNTguMSAyNi4yIDg4LjEgMCA4OC43LTcxLjMgMTU5LjgtMTYwIDE1OS44LTg5LjYgMC0xNjAtNzEuMy0xNjAtMTU5LjggMC0zNy4zIDE2LTczLjQgMzYuOC0xMDQuNSAyMC45LTMxLjMgNDcuNS01OSA3MC45LTgwLjIgNS43LTUuMiAxMy4xLTcuNyAyMC4zLTcuNXMxMy40IDMuMiAxOC44IDcuNWMxNC40IDExLjQgMzguOSA0MC43IDM4LjkgNDAuN3pNNTQ0IDQzMi4yYzAtMzYuNS0zNy03My01NC44LTg4LjQtNS40LTQuNy0xMy4xLTQuNy0xOC41IDAtMTcuNyAxNS40LTU0LjggNTEuOS01NC44IDg4LjQgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHoiXQogICAgfTsKICAgIGZhVXBsb2FkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVwbG9hZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDkzIiwgIk0yNTYgMTA5LjNMMjU2IDMyMGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTIxMC43LTQxLjQgNDEuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsOTYtOTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMjU2IDEwOS4zek0yMjQgNDAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDgwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzJjMC0zNS4zIDI4LjctNjQgNjQtNjRsODAgMGMwIDQ0LjIgMzUuOCA4MCA4MCA4MHptMTQ0IDI0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhVXNlclNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MjcxNCwgInVzZXItYWx0LXNsYXNoIiwgInVzZXItbGFyZ2Utc2xhc2giXSwgImY1MDYiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMMzExLjUgMjQ1LjdjNTUtMTAuOSA5Ni41LTU5LjUgOTYuNS0xMTcuNyAwLTY2LjMtNTMuNy0xMjAtMTIwLTEyMC01OC4yIDAtMTA2LjggNDEuNS0xMTcuNyA5Ni41TDQxLTI0Ljl6TTIzNS42IDMwNS40QzE0Ny45IDMxNi42IDgwIDM5MS41IDgwIDQ4Mi4zIDgwIDQ5OC43IDkzLjMgNTEyIDEwOS43IDUxMmwzMzIuNSAwLTIwNi42LTIwNi42eiJdCiAgICB9OwogICAgZmFVc2VyQWx0U2xhc2ggPSBmYVVzZXJTbGFzaDsKICAgIGZhVXNlckxhcmdlU2xhc2ggPSBmYVVzZXJTbGFzaDsKICAgIGZhQXJyb3dMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs4NTkyXSwgImYwNjAiLCAiTTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDEwOS4zIDI4OCA0ODAgMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zNzAuNyAwIDEwNS40LTEwNS40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYweiJdCiAgICB9OwogICAgZmFWaWFsVmlydXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlhbC12aXJ1cyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTk3IiwgIk02NCAzMkM2NCAxNC4zIDc4LjMgMCA5NiAwTDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMTUxLjdjLTE4LjUgMC0zNyA3LTUxLjEgMjEuMS0yMS42IDIxLjYtMjYuNiA1My42LTE1IDc5LjktMjYuOSAxMC40LTQ1LjkgMzYuNi00NS45IDY3LjFzMTkgNTYuNyA0NS45IDY3LjFjLTcuMyAxNi41LTggMzUuMi0yLjMgNTIuMi0xMy40IDUuNy0yOC4yIDguOC00My42IDguOC02MS45IDAtMTEyLTUwLjEtMTEyLTExMkw5NiA2NEM3OC4zIDY0IDY0IDQ5LjcgNjQgMzJ6bTk2IDMybDAgMTI4IDk2IDAgMC0xMjgtOTYgMHpNMjgwIDQwOGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyOC44IDAgNDMuMi0zNC44IDIyLjktNTUuMi05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBjMjAuNCAyMC40IDU1LjIgNS45IDU1LjItMjIuOSAwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0YzAgMjguOCAzNC44IDQzLjIgNTUuMiAyMi45IDkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWMtMjAuNCAyMC40LTUuOSA1NS4yIDIyLjkgNTUuMiAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjguOCAwLTQzLjIgMzQuOC0yMi45IDU1LjIgOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMjAuNC0yMC40LTU1LjItNS45LTU1LjIgMjIuOSAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTI4LjgtMzQuOC00My4yLTU1LjItMjIuOS05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45YzIwLjQtMjAuNCA1LjktNTUuMi0yMi45LTU1LjJ6bTEwNC0zMmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTg4IDQwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYUNoZWNrRG91YmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZWNrLWRvdWJsZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNTYwIiwgIk0yNDkuOSA2Ni44YzEwLjQtMTQuMyA3LjItMzQuMy03LjEtNDQuN3MtMzQuMy03LjItNDQuNyA3LjFsLTEwNiAxNDUuNy0zNy41LTM3LjVjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzYuNiA2LjYgMTUuOCAxMCAyNS4xIDkuM3MxNy45LTUuNSAyMy40LTEzLjFsMTI4LTE3NnptMTI4IDEzNmMxMC40LTE0LjMgNy4yLTM0LjMtNy4xLTQ0LjdzLTM0LjMtNy4yLTQ0LjcgNy4xbC0xNzAgMjMzLjctNjkuNS02OS41Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmM2LjYgNi42IDE1LjggMTAgMjUuMSA5LjNzMTcuOS01LjUgMjMuNC0xMy4xbDE5Mi0yNjR6Il0KICAgIH07CiAgICBmYVBhdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYXciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFiMCIsICJNMjM0LjUgOTIuOWMxNC4zIDQyLjktLjMgODYuMi0zMi42IDk2LjhzLTcwLjEtMTUuNi04NC40LTU4LjUgLjMtODYuMiAzMi42LTk2LjggNzAuMSAxNS42IDg0LjQgNTguNXpNMTAwLjQgMTk4LjZjMTguOSAzMi40IDE0LjMgNzAuMS0xMC4yIDg0LjFzLTU5LjctLjktNzguNS0zMy4zLTE0LjMtNzAuMSAxMC4yLTg0LjEgNTkuNyAuOSA3OC41IDMzLjN6TTY5LjIgNDAxLjJDMTIxLjYgMjU5LjkgMjE0LjcgMjI0IDI1NiAyMjRzMTM0LjQgMzUuOSAxODYuOCAxNzcuMmMzLjYgOS43IDUuMiAyMC4xIDUuMiAzMC41bDAgMS42YzAgMjUuOC0yMC45IDQ2LjctNDYuNyA0Ni43LTExLjUgMC0yMi45LTEuNC0zNC00LjJsLTg4LTIyYy0xNS4zLTMuOC0zMS4zLTMuOC00Ni42IDBsLTg4IDIyYy0xMS4xIDIuOC0yMi41IDQuMi0zNCA0LjItMjUuOCAwLTQ2LjctMjAuOS00Ni43LTQ2LjdsMC0xLjZjMC0xMC40IDEuNi0yMC44IDUuMi0zMC41ek00MjEuOCAyODIuN2MtMjQuNS0xNC0yOS4xLTUxLjctMTAuMi04NC4xczU0LTQ3LjMgNzguNS0zMy4zIDI5LjEgNTEuNyAxMC4yIDg0LjEtNTQgNDcuMy03OC41IDMzLjN6TTMxMC4xIDE4OS43Yy0zMi4zLTEwLjYtNDYuOS01My45LTMyLjYtOTYuOHM1Mi4xLTY5LjEgODQuNC01OC41IDQ2LjkgNTMuOSAzMi42IDk2LjgtNTIuMSA2OS4xLTg0LjQgNTguNXoiXQogICAgfTsKICAgIGZhSGVsbWV0U2FmZXR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlbG1ldC1zYWZldHkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiaGFyZC1oYXQiLCAiaGF0LWhhcmQiXSwgImY4MDciLCAiTTM1MiAyNjRsMC0yMDBjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjAwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTg1LjlDOTAgMTA5LjggMzIgMTkxLjggMzIgMjg4bDAgNjQgNTEyIDAgMC02NGMtMS05NS4yLTU4LjQtMTc3LjctMTQ0LTIwOS44TDQwMCAyNjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjR6TTQwIDQwMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGw0OTYgMGMyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MEw0MCA0MDB6Il0KICAgIH07CiAgICBmYUhhcmRIYXQgPSBmYUhlbG1ldFNhZmV0eTsKICAgIGZhSGF0SGFyZCA9IGZhSGVsbWV0U2FmZXR5OwogICAgZmFFID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImUiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMDFdLCAiNDUiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjU2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTIyNCAwIDAtMTI4IDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNjAgMCAwLTEyOCAyMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnoiXQogICAgfTsKICAgIGZhRmFjZUxhdWdoU3F1aW50MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWxhdWdoLXNxdWludCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJsYXVnaC1zcXVpbnQiXSwgImY1OWIiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xMDcuNyAzMzIuMUMxMDIgMzE4IDExMy40IDMwNCAxMjguNiAzMDRsMjU0LjkgMGMxNS4yIDAgMjYuNiAxNCAyMC45IDI4LjEtMjMuOCA1OC42LTgxLjIgOTkuOS0xNDguMyA5OS45cy0xMjQuNi00MS4zLTE0OC4zLTk5Ljl6bTE1LTE4OC44YzQuNS02LjggMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMTkyIDEyNS44IDE2NC4zYy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xem0yNjMuNiAyMS4xTDM1MyAxOTIgMzg2LjIgMjE5LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjVzMy4xIDE1LjktMy4xIDIxLjF6Il0KICAgIH07CiAgICBmYUxhdWdoU3F1aW50MiA9IGZhRmFjZUxhdWdoU3F1aW50MjsKICAgIGZhRG93bkxlZnRBbmRVcFJpZ2h0VG9DZW50ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG93bi1sZWZ0LWFuZC11cC1yaWdodC10by1jZW50ZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY29tcHJlc3MtYWx0Il0sICJmNDIyIiwgIk00MzkuNSA3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDMyIDMyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC04NyA4NyAzOSAzOWM2LjkgNi45IDguOSAxNy4yIDUuMiAyNi4yUzQ1MC4yIDI0MCA0NDAuNSAyNDBsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTE0NGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJzMTkuMy0xLjcgMjYuMiA1LjJsMzkgMzkgODctODd6TTcyLjUgMjcybDE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTQ0YzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTM5LTM5LTg3IDg3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtMzItMzJjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDg3LTg3LTM5LTM5Yy02LjktNi45LTguOS0xNy4yLTUuMi0yNi4yUzYyLjggMjcyIDcyLjUgMjcyeiJdCiAgICB9OwogICAgZmFDb21wcmVzc0FsdCA9IGZhRG93bkxlZnRBbmRVcFJpZ2h0VG9DZW50ZXI7CiAgICBmYUdpZnRzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdpZnRzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3OWMiLCAiTTIwMi0zMC42YzEyLjUgNC40IDE5IDE4LjEgMTQuNiAzMC42bC04LjIgMjMuMSAyNS40LTE4LjVjMTAuNy03LjggMjUuNy01LjQgMzMuNSA1LjNzNS40IDI1LjctNS4zIDMzLjVMMjMzLjggNjQgMjcyIDY0YzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMi4xYy01NC43IDEwLjQtOTYgNTguNC05NiAxMTZsMCAxLjljMCA4LjkgMSAxNy41IDIuOCAyNS45LTExLjkgMTcuOC0xOC44IDM5LjEtMTguOCA2Mi4xbDAgMTI4YzAgMjMuOCA3LjQgNDUuOSAyMC4xIDY0TDQ4IDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRsMzguMiAwLTI4LjMtMjAuNkM0Ny4yIDM1LjYgNDQuOCAyMC42IDUyLjYgOS45Uzc1LjQtMy4yIDg2LjEgNC42bDI3LjQgMjAtOC4zLTI1QzEwMS0xMyAxMDcuOC0yNi42IDEyMC40LTMwLjhzMjYuMiAyLjYgMzAuNCAxNS4ybDkuOSAyOS44IDEwLjctMzAuMmM0LjQtMTIuNSAxOC4xLTE5IDMwLjYtMTQuNnpNNDg5LjkgMjA4Yy03LjUgMC0xNC41IDMuOC0xOC42IDEwLjFMNDQ2LjkgMjU2IDQ4OCAyNTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xLjljMC0xMi4yLTkuOS0yMi4xLTIyLjEtMjIuMXpNMzg1LjEgMjU2bC0yNC40LTM3LjljLTQuMS02LjMtMTEuMS0xMC4xLTE4LjYtMTAuMS0xMi4yIDAtMjIuMSA5LjktMjIuMSAyMi4xbDAgMS45YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQxLjEgMHpNMjgxLjkgMjY4LjVjLTYuMy0xMC43LTkuOS0yMy4yLTkuOS0zNi41bDAtMS45YzAtMzguNyAzMS40LTcwLjEgNzAuMS03MC4xIDIzLjggMCA0NiAxMi4xIDU4LjkgMzIuMWwxNSAyMy4yIDE1LTIzLjJjMTIuOS0yMCAzNS4xLTMyLjEgNTguOS0zMi4xIDM4LjcgMCA3MC4xIDMxLjQgNzAuMSA3MC4xbDAgMS45YzAgMTMuMy0zLjYgMjUuOC05LjkgMzYuNSAxNS43IDExLjcgMjUuOSAzMC40IDI1LjkgNTEuNWwwIDEyOGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNzIgMCAwLTIwOC00OCAwIDAgMjA4LTcyIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTI4YzAtMjEuMSAxMC4yLTM5LjggMjUuOS01MS41eiJdCiAgICB9OwogICAgZmFCZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmVkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NzE2XSwgImYyMzYiLCAiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjI0IDIyNCAwIDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE2MCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyMjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NC00NDggMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptODAgMTYwYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHoiXQogICAgfTsKICAgIGZhTW9uZXlCaWxsVHJhbnNmZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9uZXktYmlsbC10cmFuc2ZlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTI4IiwgIk0zMSAxMDVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45TDEwMy0xYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtMzEgMzEgNjcuNyAwIDAgMCAzMzguMyAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTc4LjItNS4xLTUuMWMtMjguMS0yOC4xLTczLjctMjguMS0xMDEuOCAwLTI3LjIgMjcuMi0yOC4xIDcwLjYtMi44IDk4LjlsNjcuNyAwLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTcyIDcyYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTQwNi4xIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc4LjIgNS4xIDUuMWMyOC4xIDI4LjEgNzMuNyAyOC4xIDEwMS44IDAgMjcuMi0yNy4yIDI4LjEtNzAuNiAyLjgtOTguOWwtNjcuNyAwIDMxIDMxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMMzEgMTA1ek00MTYgMjU2YTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHptODgtNjQuNWM0LjQgLjUgOC0zLjEgOC03LjVsMC00OGMwLTQuNC0zLjYtOC04LThsLTQ4IDBjLTQuNCAwLTguMSAzLjYtNy41IDggMy42IDI5IDI2LjYgNTEuOSA1NS41IDU1LjV6bS0zNjggMTI5Yy00LjQtLjUtOCAzLjEtOCA3LjVsMCA0OGMwIDQuNCAzLjYgOCA4IDhsNDggMGM0LjQgMCA4LjEtMy42IDcuNS04LTMuNi0yOS0yNi42LTUxLjktNTUuNS01NS41eiJdCiAgICB9OwogICAgZmFQZXJzb25SdW5uaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1ydW5uaW5nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3OTM5LCAicnVubmluZyJdLCAiZjcwYyIsICJNMjU2LjUtMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTEyMy42IDE3NmMtMy4zIDAtNi4yIDItNy40IDVMOTQuMiAyMzUuOWMtNi42IDE2LjQtMjUuMiAyNC40LTQxLjYgMTcuOHMtMjQuNC0yNS4yLTE3LjgtNDEuNmwyMS45LTU0LjlDNjcuNyAxMjkuOSA5NC4xIDExMiAxMjMuNiAxMTJsOTcuMyAwYzI4LjUgMCA1NC44IDE1LjEgNjkuMSAzOS43bDMyLjggNTYuMyA2MS42IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTYxLjYgMGMtMjIuOCAwLTQzLjgtMTIuMS01NS4zLTMxLjhsLTEwLTE3LjEtMjAuNyA3MC40IDc1LjQgMjIuNmMyNy43IDguMyA0MS44IDM5IDMwLjEgNjUuNUwyODUuNyA1MDljLTcuMiAxNi4yLTI2LjEgMjMuNC00Mi4yIDE2LjJzLTIzLjQtMjYuMS0xNi4yLTQyLjJsNDkuMi0xMTAuOC05NS45LTI4LjhjLTMyLjctOS44LTUyLTQzLjctNDMuNy03Ni44bDIyLjctOTAuNi0zNS45IDB6bS04IDE4MWMxMy4zIDE0LjkgMzAuNyAyNi4zIDUxLjIgMzIuNGw0LjcgMS40LTYuOSAxOS4zYy01LjggMTYuMy0xNiAzMC44LTI5LjMgNDEuOEw1Mi45IDUxOS44Yy0xMy42IDExLjItMzMuOCA5LjMtNDUtNC4zcy05LjMtMzMuOCA0LjMtNDVsODIuNC02Ny45YzQuNS0zLjcgNy44LTguNSA5LjgtMTMuOUwxMTUuNiAzNTd6Il0KICAgIH07CiAgICBmYVJ1bm5pbmcgPSBmYVBlcnNvblJ1bm5pbmc7CiAgICBmYUNpcmNsZUNoZXZyb25Eb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1jaGV2cm9uLWRvd24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY2hldnJvbi1jaXJjbGUtZG93biJdLCAiZjEzYSIsICJNMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMiAyNTYgMjU2IDAgMSAwIDAtNTEyek0xMzUgMjQxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsODcgODcgODctODdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDI3MyAzNDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwTDEzNSAyNDF6Il0KICAgIH07CiAgICBmYUNoZXZyb25DaXJjbGVEb3duID0gZmFDaXJjbGVDaGV2cm9uRG93bjsKICAgIGZhVXNlck51cnNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItbnVyc2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjgyZiIsICJNOTYgNDQuOWMwLTEyLjcgNy41LTI0LjIgMTkuMi0yOS4zbDk2LTQyYzguMi0zLjYgMTcuNS0zLjYgMjUuNyAwbDk2IDQyQzM0NC41IDIwLjcgMzUyIDMyLjIgMzUyIDQ0LjlsMCA5OS4xYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4Uzk2IDIxNC43IDk2IDE0NGwwLTk5LjF6TTMwNCAxMjhsLTExMS42IDAtLjQgMC00OCAwIDAgMTZjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGwwLTE2ek0yMDggMTZsMCAxNi0xNiAwYy00LjQgMC04IDMuNi04IDhsMCAxNmMwIDQuNCAzLjYgOCA4IDhsMTYgMCAwIDE2YzAgNC40IDMuNiA4IDggOGwxNiAwYzQuNCAwIDgtMy42IDgtOGwwLTE2IDE2IDBjNC40IDAgOC0zLjYgOC04bDAtMTZjMC00LjQtMy42LTgtOC04bC0xNiAwIDAtMTZjMC00LjQtMy42LTgtOC04TDIxNiA4Yy00LjQgMC04IDMuNi04IDh6TTE0Mi42IDMyM2MtNi41LTQuOS0xNS4yLTYuMi0yMi42LTIuOC02MS40IDI4LjItMTA0LjEgOTAuMi0xMDQuMSAxNjIuMSAwIDE2LjQgMTMuMyAyOS43IDI5LjcgMjkuN2wzNTYuNiAwYzE2LjQgMCAyOS43LTEzLjMgMjkuNy0yOS43IDAtNzItNDIuNy0xMzQtMTA0LjEtMTYyLjEtNy40LTMuNC0xNi4xLTIuMS0yMi42IDIuOGwtNjcgNTAuMmMtOC41IDYuNC0yMC4zIDYuNC0yOC44IDBsLTY3LTUwLjJ6Il0KICAgIH07CiAgICBmYUZhY2VLaXNzV2lua0hlYXJ0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWtpc3Mtd2luay1oZWFydCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODUzNiwgImtpc3Mtd2luay1oZWFydCJdLCAiZjU5OCIsICJNNTQzLjcgMjY4LjNjLjItNC4xIC4zLTguMiAuMy0xMi4zIDAtMTQxLjQtMTE0LjYtMjU2LTI1Ni0yNTZTMzIgMTE0LjYgMzIgMjU2IDE0Ni42IDUxMiAyODggNTEyYzQxLjQgMCA4MC41LTkuOCAxMTUuMS0yNy4zLTcuNi0xNy4xLTE2LjEtMzguOC0yMS44LTYxLjctNy43LTMwLjUtMTQuMS03Ni4yIDguMi0xMTQuN2wyLjctNC42YzI5LjUtNTEgOTQuNy02OC41IDE0NS43LTM5IDIgMS4yIDQgMi40IDUuOSAzLjd6TTI0MCAzMDRjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCAxMi4zLTQuNiAyMy41LTEyLjIgMzIgNy42IDguNSAxMi4yIDE5LjcgMTIuMiAzMiAwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnpNMjA4IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTE1MiAyMGMtMTEgMC0yMCA5LTIwIDIwcy05IDIwLTIwIDIwLTIwLTktMjAtMjBjMC0zMy4xIDI2LjktNjAgNjAtNjBsMTYgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MCAwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjAtOS0yMC0yMC0yMGwtMTYgMHpNNTQyLjggMzUwYy0yLjItMTguMy0xMi45LTM0LjYtMjguOS00My44LTI4LjEtMTYuMi02My45LTYuNi04MC4xIDIxLjVsLTIuNyA0LjZjLTI0LjUgNDIuNSA3LjkgMTE3LjkgMjQuNCAxNTAuOCA1LjEgMTAuMSAxNS41IDE2LjEgMjYuOCAxNS41IDM2LjctMi4yIDExOC4yLTExLjcgMTQyLjgtNTQuMmwyLjctNC42YzE2LjItMjguMSA2LjYtNjMuOS0yMS41LTgwLjEtMTYtOS4yLTM1LjQtMTAuNC01Mi40LTMuMWwtOS44IDQuMi0xLjMtMTAuNnoiXQogICAgfTsKICAgIGZhS2lzc1dpbmtIZWFydDIgPSBmYUZhY2VLaXNzV2lua0hlYXJ0MjsKICAgIGZhRmlsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1NzUiLCAiTTI5NiA2NGM2LjkgMCAxMy41IDIuNyAxOC4zIDcuNkw0NDAuNCAxOTcuN2M0LjkgNC45IDcuNiAxMS41IDcuNiAxOC4zcy0yLjcgMTMuNS03LjYgMTguM0wzODYuNyAyODggNjUuMyAyODhjMS4zLTMuOSAzLjQtNy40IDYuMy0xMC4zbDk2LjQtOTYuNCAzMy40IDMzLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wyMTMuMyAxMzYgMjc3LjcgNzEuNmM0LjktNC45IDExLjUtNy42IDE4LjMtNy42ek0xMjIuNyAxMzZMMjYuMyAyMzIuNEM5LjUgMjQ5LjMgMCAyNzIuMSAwIDI5NnM5LjUgNDYuNyAyNi4zIDYzLjZMMTUyLjQgNDg1LjdDMTY5LjMgNTAyLjUgMTkyLjEgNTEyIDIxNiA1MTJzNDYuNy05LjUgNjMuNi0yNi4zTDQ4NS43IDI3OS42QzUwMi41IDI2Mi43IDUxMiAyMzkuOSA1MTIgMjE2cy05LjUtNDYuNy0yNi4zLTYzLjZMMzU5LjYgMjYuM0MzNDIuNyA5LjUgMzE5LjkgMCAyOTYgMHMtNDYuNyA5LjUtNjMuNiAyNi4zTDE2OCA5MC43IDExOC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDEyMi43IDEzNnoiXQogICAgfTsKICAgIGZhTW9uZXlCaWxsMVdhdmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9uZXktYmlsbC0xLXdhdmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibW9uZXktYmlsbC13YXZlLWFsdCJdLCAiZjUzYiIsICJNMCAxMDkuNUwwIDQxOS42YzAgMTkuNCAxMS44IDM3LjMgMzAuMyA0My4zIDk0IDMwIDE1OC44IDguNCAyMjMuMy0xMy4xIDYyLjQtMjAuOCAxMjQuNC00MS41IDIxMi4xLTE1LjMgMjIuMiA2LjYgNDYuMi04LjggNDYuMi0zMmwwLTMxMC4xYzAtMTkuNC0xMS44LTM3LjMtMzAuMy00My4zLTk0LTMwLTE1OC44LTguNC0yMjMuMyAxMy4xLTYyLjQgMjAuOC0xMjQuNCA0MS41LTIxMi4xIDE1LjMtMjIuMi02LjYtNDYuMyA4LjgtNDYuMyAzMnpNMjU2IDM2OGMtNTMgMC05Ni01MC4xLTk2LTExMnM0My0xMTIgOTYtMTEyIDk2IDUwLjEgOTYgMTEyLTQzIDExMi05NiAxMTJ6TTEyNy4xIDQwNS41Yy43IDQuNC0yLjggOC4xLTcuMiA4LjEtMTUuNyAwLTMyLjEtMS44LTUwLTYuMS0zLjUtLjgtNi00LTYtNy43TDY0IDM2MGMwLTQuNCAzLjYtOC4xIDgtNy41IDI4LjEgMy41IDUwLjYgMjUuMiA1NS4yIDUzek00NDggMzU0LjZjMCA1LTQuNiA4LjgtOS41IDgtMTUuNC0yLjUtMzAuMi0zLjktNDQuNC00LjMtNC45LS4xLTguNy00LjUtNy4yLTkuMiA3LjMtMjMuNyAyOC00MS40IDUzLjItNDQuNiA0LjQtLjUgOCAzLjEgOCA3LjVsMCA0Mi42em0tOC0xOTUuMWMtMjguMS0zLjUtNTAuNi0yNS4yLTU1LjItNTMtLjctNC40IDIuOC04LjEgNy4yLTguMSAxNS43IDAgMzIuMSAxLjggNTAgNi4xIDMuNSAuOCA2IDQgNiA3LjdsMCAzOS45YzAgNC40LTMuNiA4LjEtOCA3LjV6bS0zMjIuMS01LjhjNC45IC4xIDguNyA0LjUgNy4yIDkuMi03LjMgMjMuNy0yOCA0MS40LTUzLjIgNDQuNi00LjQgLjUtOC0zLjEtOC03LjVsMC00Mi42YzAtNSA0LjYtOC44IDkuNS04IDE1LjQgMi41IDMwLjIgMy45IDQ0LjQgNC4zek0yNDAgMTg4Yy0xMSAwLTIwIDktMjAgMjAgMCA5LjcgNi45IDE3LjcgMTYgMTkuNmwwIDQ4LjQtNCAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGw0OCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtNCAwIDAtNjhjMC0xMS05LTIwLTIwLTIwbC0xNiAweiJdCiAgICB9OwogICAgZmFNb25leUJpbGxXYXZlQWx0ID0gZmFNb25leUJpbGwxV2F2ZTsKICAgIGZhTGFuZG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGFuZG1hcmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NjNdLCAiZjY2ZiIsICJNMjM4LjcgNS4xYzEwLjUtNi44IDI0LjEtNi44IDM0LjYgMGwyMjQgMTQ0YzExLjkgNy43IDE3LjQgMjIuMyAxMy40IDM1LjlzLTE2LjUgMjMtMzAuNyAyM2wtMzIgMCAwIDIwOCA1MS4yIDM4LjRjOC4xIDYgMTIuOCAxNS41IDEyLjggMjUuNiAwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyIDAtMTAuMSA0LjctMTkuNiAxMi44LTI1LjZsNTEuMi0zOC40IDAgMCAwLTIwOC0zMiAwYy0xNC4yIDAtMjYuNy05LjQtMzAuNy0yM3MxLjUtMjguMyAxMy40LTM1LjlsMjI0LTE0NHpNMzM2IDIwOGwwIDIwOCA2NCAwIDAtMjA4LTY0IDB6TTIyNCA0MTZsNjQgMCAwLTIwOC02NCAwIDAgMjA4ek0xMTIgMjA4bDAgMjA4IDY0IDAgMC0yMDgtNjQgMHoiXQogICAgfTsKICAgIGZhTXVzaWMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibXVzaWMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5MjVdLCAiZjAwMSIsICJNNDY4IDdjNy42IDYuMSAxMiAxNS4zIDEyIDI1bDAgMzA0YzAgNDQuMi00MyA4MC05NiA4MHMtOTYtMzUuOC05Ni04MCA0My04MCA5Ni04MGMxMS4yIDAgMjIgMS42IDMyIDQuNmwwLTExNi43LTIyNCA0OS44IDAgMjA2LjNjMCA0NC4yLTQzIDgwLTk2IDgwcy05Ni0zNS44LTk2LTgwIDQzLTgwIDk2LTgwYzExLjIgMCAyMiAxLjYgMzIgNC42TDEyOCA5NmMwLTE1IDEwLjQtMjggMjUuMS0zMS4ybDI4OC02NGM5LjUtMi4xIDE5LjQgLjIgMjcgNi4zeiJdCiAgICB9OwogICAgZmFCb29rTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLW1lZGljYWwiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjdlNiIsICJNOTYgNTEybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtNjYuN2MxOC42LTYuNiAzMi0yNC40IDMyLTQ1LjNsMC0yODhjMC0yNi41LTIxLjUtNDgtNDgtNDhMOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2ek02NCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjU2IDAgMCA2NC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTE5MiAxMjBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQwIDAgMCA0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDB6Il0KICAgIH07CiAgICBmYVNodWZmbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2h1ZmZsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI1NiwgInJhbmRvbSJdLCAiZjA3NCIsICJNNDAzLjggMzQuNGMxMi01IDI1LjctMi4yIDM0LjkgNi45bDY0IDY0YzYgNiA5LjQgMTQuMSA5LjQgMjIuNnMtMy40IDE2LjYtOS40IDIyLjZsLTY0IDY0Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOVMzODQgMjA0LjkgMzg0IDE5MmwwLTMyLTMyIDBjLTEwLjEgMC0xOS42IDQuNy0yNS42IDEyLjhsLTMyLjQgNDMuMi00MC01My4zIDIxLjItMjguM0MyOTMuMyAxMTAuMiAzMjEuOCA5NiAzNTIgOTZsMzIgMCAwLTMyYzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZ6TTE1NCAyOTZsNDAgNTMuMy0yMS4yIDI4LjNDMTU0LjcgNDAxLjggMTI2LjIgNDE2IDk2IDQxNmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw2NCAwYzEwLjEgMCAxOS42LTQuNyAyNS42LTEyLjhMMTU0IDI5NnpNNDM4LjYgNDcwLjZjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzM4NCA0NjAuOSAzODQgNDQ4bDAtMzItMzIgMGMtMzAuMiAwLTU4LjctMTQuMi03Ni44LTM4LjRMMTIxLjYgMTcyLjhjLTYtOC4xLTE1LjUtMTIuOC0yNS42LTEyLjhsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzE0LjMgOTYgMzIgOTZsNjQgMGMzMC4yIDAgNTguNyAxNC4yIDc2LjggMzguNEwzMjYuNCAzMzkuMmM2IDguMSAxNS41IDEyLjggMjUuNiAxMi44bDMyIDAgMC0zMmMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDY0IDY0YzYgNiA5LjQgMTQuMSA5LjQgMjIuNnMtMy40IDE2LjYtOS40IDIyLjZsLTY0IDY0eiJdCiAgICB9OwogICAgZmFSYW5kb20gPSBmYVNodWZmbGU7CiAgICBmYVVuZGVybGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1bmRlcmxpbmUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjBjZCIsICJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBMOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlMxMTMuNyA2NCA5NiA2NGwwIDE2MGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMlMyNzAuMyAwIDI4OCAwbDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxNjBjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBTMzIgMzEyLjQgMzIgMjI0TDMyIDY0QzE0LjMgNjQgMCA0OS43IDAgMzJ6TTAgNDgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nVXNlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy11c2VyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZGEiLCAiTTY0IDY0QzY0IDI4LjcgOTIuNyAwIDEyOCAwTDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTIxLjNjLTQ2LjkgMTktODAgNjUtODAgMTE4LjcgMCAyNy43IDguOCA1My40IDIzLjggNzQuNC01MS41IDIxLTg3LjggNzEuNi04Ny44IDEzMC43IDAgMSAwIDEuOSAwIDIuOWwtMTc2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDY0IDY0ek0yMDggNDAwbDAgNjQgNTMuNCAwYzcuMi0yOS40IDIxLjMtNTYuMSA0MC40LTc4LjMtNi4xLTE5LjUtMjQuMy0zMy43LTQ1LjgtMzMuNy0yNi41IDAtNDggMjEuNS00OCA0OHpNMzM5IDIyNC4zYy0xLS4yLTItLjMtMy0uM2wtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDE2LjcgMGMyLjEtMjIuOCA4LjQtNDQuMyAxOC4zLTYzLjd6TTE3NiA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0xMTIgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTc2IDIyNGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0yNDAgODBhODAgODAgMCAxIDEgMTYwIDAgODAgODAgMCAxIDEgLTE2MCAwek0zNTIgNTEyYzAtNTMgNDMtOTYgOTYtOTZsOTYgMGM1MyAwIDk2IDQzIDk2IDk2IDAgMTcuNy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYVJvYm90ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvYm90IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI5MzAyXSwgImY1NDQiLCAiTTM1MiAwYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzI4OC0xNy43IDI4OCAwbDAgNjQtOTYgMGMtNTMgMC05NiA0My05NiA5NmwwIDIyNGMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0yMjRjMC01My00My05Ni05Ni05NmwtOTYgMCAwLTY0ek0xNjAgMzY4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTMyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0xMjAgMGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwzMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0zMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMTIwIDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMzIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTIyNCAxNzZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2em0xNDQgNDhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNNjQgMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgMjA2LjMgMCAyMjRsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTZ6bTU0NC0zMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJ6Il0KICAgIH07CiAgICBmYVBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEwMTMzLCA2MTU0MywgImFkZCJdLCAiMmIiLCAiTTI1NiA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE2MC0xNjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNjAgMCAwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwIDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNjAgMCAwLTE2MHoiXQogICAgfTsKICAgIGZhQWRkID0gZmFQbHVzOwogICAgZmFDb3B5MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb3B5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwYzUiLCAiTTE5MiAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTIwMC42YzAtMTcuNC03LjEtMzQuMS0xOS43LTQ2LjJMMzcwLjYgMTcuOEMzNTguNyA2LjQgMzQyLjggMCAzMjYuMyAwTDE5MiAwek02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTYtNjQgMCAwIDE2LTE5MiAwIDAtMjU2IDE2IDAgMC02NC0xNiAweiJdCiAgICB9OwogICAgZmFDaGVzc0tpbmcyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXNzLWtpbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODE4XSwgImY0M2YiLCAiTTIyNC0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCA2NCAxNTMuOCAwYzIxLjEgMCAzOC4yIDE3LjEgMzguMiAzOC4yIDAgNi40LTEuNiAxMi43LTQuNyAxOC4zTDM1MiAzODQgNDA4LjIgNDU0LjNjNSA2LjMgNy44IDE0LjEgNy44IDIyLjIgMCAxOS42LTE1LjkgMzUuNS0zNS41IDM1LjVMNjcuNSA1MTJjLTE5LjYgMC0zNS41LTE1LjktMzUuNS0zNS41IDAtOC4xIDIuNy0xNS45IDcuOC0yMi4yTDk2IDM4NCA0LjcgMjE2LjZDMS42IDIxMC45IDAgMjA0LjYgMCAxOTguMiAwIDE3Ny4xIDE3LjEgMTYwIDM4LjIgMTYwbDE1My44IDAgMC02NC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhSG91c2VGbG9vZFdhdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWZsb29kLXdhdGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MGUiLCAiTTQ5NiAyMDhsNC41IDBjMTUuMiAwIDI3LjUtMTIuMyAyNy41LTI3LjUgMC03LjktMy40LTE1LjUtOS40LTIwLjdMMzQ4IDEwLjVDMzQwLjMgMy43IDMzMC4zIDAgMzIwIDBzLTIwLjMgMy43LTI4IDEwLjVMMTIxLjQgMTU5LjhjLTYgNS4yLTkuNCAxMi44LTkuNCAyMC43IDAgMTUuMiAxMi4zIDI3LjUgMjcuNSAyNy41bDQuNSAwIDAgOTQuNGMyMC4zLTkuNCA0Mi4xLTE0LjIgNjQtMTQuNCAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjQgMjIuMSAxNi42IDI5LjEgMTYuNiA1MS4yIDAgMjcuNS0yMC43IDU5LjktMzEuMiA5Mi40LTMxLjQgMTYuOS0uMSAzMy44IDIuNiA1MCA4bDAtODh6bS0yMjQtOGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDh6TTQ3NC42IDQxMi4xYzE5IDE0LjQgNDEuOSAyOC4yIDY3LjIgMzMuMyAyNi41IDUuNCA1NC4zIC44IDgwLjctMTkuMSAxMC42LTggMTIuNy0yMyA0LjctMzMuNnMtMjMtMTIuNy0zMy42LTQuN2MtMTQuOSAxMS4yLTI4LjYgMTMuMS00Mi4zIDEwLjMtMTQuOS0zLTMwLjktMTEuOS00Ny44LTI0LjYtMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjEuNiAxNi4zLTQxLjMgMjUuOC01OC45IDI1LjctOS42LS4xLTE5LjktMy0zMS4yLTExLjUtMTAuNi04LTI1LjYtNS45LTMzLjYgNC43UzcgNDE4LjMgMTcuNiA0MjYuM2MxOS4xIDE0LjQgMzkuNCAyMSA1OS44IDIxLjEgMzMuOSAuMiA2NC4zLTE3LjQgODguMS0zNS4zIDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1LjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDB6bS03MS4yIDk2YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDE5IDE0LjQgNDEuOSAyOC4yIDY3LjIgMzMuMyAyNi41IDUuNCA1NC4zIC44IDgwLjctMTkuMSAxMC42LTggMTIuNy0yMyA0LjctMzMuNnMtMjMtMTIuNy0zMy42LTQuN2MtMTQuOSAxMS4yLTI4LjYgMTMuMS00Mi4zIDEwLjMtMTQuOS0zLTMwLjktMTEuOS00Ny44LTI0LjYtMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjEuNiAxNi4zLTQxLjMgMjUuOC01OC45IDI1LjctOS42LS4xLTE5LjktMy0zMS4yLTExLjUtMTAuNi04LTI1LjYtNS45LTMzLjYgNC43UzcgNTE0LjMgMTcuNiA1MjIuM2MxOS4xIDE0LjQgMzkuNCAyMSA1OS44IDIxLjEgMzMuOSAuMiA2NC4zLTE3LjQgODguMS0zNS4zIDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1Ljl6Il0KICAgIH07CiAgICBmYUJpdGNvaW5TaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJpdGNvaW4tc2lnbiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlMGI0IiwgIk02NCAyNEM2NCAxMC43IDc0LjcgMCA4OCAwczI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQxLjFjNTQuMyA3LjggOTYgNTQuNCA5NiAxMTAuOSAwIDI0LjItNy43IDQ2LjYtMjAuNyA2NC45IDMxLjcgMTkuOCA1Mi43IDU1IDUyLjcgOTUuMSAwIDYxLjktNTAuMSAxMTItMTEyIDExMmwtMTYgMCAwIDQwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDAtMzIgMCAwIDQwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDAtMjIuMyAwQzE4LjcgNDQ4IDAgNDI5LjMgMCA0MDYuM0wwIDEwMS42QzAgODAuOCAxNi44IDY0IDM3LjYgNjRMNjQgNjQgNjQgMjR6bTAgMjAwbDExMiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4bC0xMTIgMCAwIDk2em0xMTIgNjRsLTExMiAwIDAgOTYgMTQ0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhsLTMyIDB6Il0KICAgIH07CiAgICBmYUJveCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyMzBdLCAiZjQ2NiIsICJNMzY5LjQgMTI4bC0zNC4zLTQ4LTIyMi4xIDAtMzQuMyA0OCAyOTAuNyAwek0wIDE0OC41YzAtMTMuMyA0LjItMjYuMyAxMS45LTM3LjJMNjAuOSA0Mi44QzcyLjkgMjYgOTIuMyAxNiAxMTIuOSAxNmwyMjIuMSAwYzIwLjcgMCA0MC4xIDEwIDUyLjEgMjYuOGw0OC45IDY4LjVjNy44IDEwLjkgMTEuOSAyMy45IDExLjkgMzcuMkw0NDggNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxNDguNXoiXQogICAgfTsKICAgIGZhU3F1YXJlUGx1czIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXBsdXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2MTg0NiwgInBsdXMtc3F1YXJlIl0sICJmMGZlIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yMDAgMzQ0bDAtNjQtNjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw2NCAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDY0IDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTY0IDAgMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhUGx1c1NxdWFyZTIgPSBmYVNxdWFyZVBsdXMyOwogICAgZmFBcnJvd3NMZWZ0UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLWxlZnQtcmlnaHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiYXJyb3dzLWgiXSwgImYwN2UiLCAiTTQ3MC42IDM3NC42bDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC05Ni05NmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNDEuNCA0MS40LTM1Ny41IDAgNDEuNC00MS40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtNiA2LTkuNCAxNC4xLTkuNCAyMi42czMuNCAxNi42IDkuNCAyMi42bDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTQxLjQtNDEuNCAzNTcuNSAwLTQxLjQgNDEuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMHoiXQogICAgfTsKICAgIGZhQXJyb3dzSCA9IGZhQXJyb3dzTGVmdFJpZ2h0OwogICAgZmFGYW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4NjMiLCAiTTE2MCAxNDRjMC03OS41IDY0LjUtMTQ0IDE0NC0xNDQgOC44IDAgMTYgNy4yIDE2IDE2bDAgMTUyLjJjMTUtNS4zIDMxLjItOC4yIDQ4LTguMiA3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NCAwIDguOC03LjIgMTYtMTYgMTZsLTE1Mi4yIDBjNS4zIDE1IDguMiAzMS4yIDguMiA0OCAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NC04LjggMC0xNi03LjItMTYtMTZsMC0xNTIuMmMtMTUgNS4zLTMxLjIgOC4yLTQ4IDguMi03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NCAwLTguOCA3LjItMTYgMTYtMTZsMTUyLjIgMGMtNS4zLTE1LTguMi0zMS4yLTguMi00OHptOTYgMTQ0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQ3JvdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjcm93IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY1MjAiLCAiTTQ1Ni41IDBjLTQ4LjYgMC04OCAzOS40LTg4IDg4bDAgMzYtMzU1LjIgMjY2LjRDLS44IDQwMS0zLjcgNDIxIDYuOSA0MzUuMnMzMC42IDE3IDQ0LjggNi40bDc2LjgtNTcuNiAxMzEuMyAwIDQ2LjYgMTEzLjEgMSAyLjJjNS43IDEwLjcgMTguOCAxNS41IDMwLjMgMTAuOHMxNy4zLTE3LjMgMTMuOS0yOWwtLjgtMi4zLTM5LjEtOTQuOSA0MC45IDBjMS4xIDAgMi4yIDAgMy4yIDBsNDYuNiAxMTMuMiAxIDIuMmM1LjcgMTAuNyAxOC44IDE1LjUgMzAuMyAxMC44czE3LjMtMTcuMyAxMy45LTI5bC0uOC0yLjMtNDItMTAyQzQ4NS4zIDM1NC4xIDU0NC41IDI4MCA1NDQuNSAxOTJsMC03MiA4MC41LTIwLjFjOC42LTIuMSAxMy44LTEwLjggMTEuNi0xOS40LTcuMS0yOC41LTMyLjctNDguNS02Mi4xLTQ4LjVsLTUwLjEgMEM1MDguMiAxMi41IDQ4My44IDAgNDU2LjUgMHptMCA2NGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYUZpbGVDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNWEwIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTU3NiA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdCiAgICB9OwogICAgZmFMaW5rU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGluay1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJjaGFpbi1icm9rZW4iLCAiY2hhaW4tc2xhc2giLCAidW5saW5rIl0sICJmMTI3IiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xMjItMTIyYzQuMi0zLjQgOC4zLTcuMSAxMi4xLTEwLjlsNzEuMS03MS4xYzI5LjMtMjkuMyA0NS44LTY5LjEgNDUuOC0xMTAuNiAwLTg2LjQtNzAtMTU2LjUtMTU2LjUtMTU2LjUtMzcuMyAwLTczLjEgMTMuMy0xMDEuMyAzNy4yIDIwLjMgMTAuMSAzOC43IDIzLjUgNTQuNSAzOS41IDE0LjEtOC4zIDMwLjItMTIuNyA0Ni44LTEyLjcgNTEuMSAwIDkyLjUgNDEuNCA5Mi41IDkyLjUgMCAyNC41LTkuNyA0OC0yNy4xIDY1LjRsLTcxLjEgNzEuMWMtMy45IDMuOS04LjEgNy40LTEyLjYgMTAuNWwtNDcuNS00Ny41YzE2LjUtLjkgMjkuNy0xNC40IDMwLjItMzEuMSAwLTEuMyAwLTIuNiAwLTMuOSAwLTg2LjMtNjkuOS0xNTYuOS0xNTYuNS0xNTYuOS0xOS4yIDAtMzcuOSAzLjUtNTUuNSAxMC4yTDQxLTI0Ljl6TTIyNS45IDE2MGMuNiAwIDEuMSAwIDEuNyAwIDE1LjEgMCAyOS41IDMuNyA0Mi4xIDEwLjIgMS44IDEuMiAzLjYgMi4zIDUuNSAzLjEgMjYuOCAxNi4zIDQ0LjggNDUuOSA0NC44IDc5LjYgMCAuNCAwIC44IDAgMS4yTDIyNS45IDE2MHpNMzQ2LjIgNDE2TDE5MiAyNjEuOGMxLjIgODQuNiA2OS42IDE1Mi45IDE1NC4xIDE1NC4xek0xMzkuNyAyMDkuNWwtNDUuMy00NS4zLTQ4LjYgNDguNmMtMjkuMyAyOS4zLTQ1LjggNjkuMS00NS44IDExMC42IDAgODYuNCA3MCAxNTYuNSAxNTYuNSAxNTYuNSAzNy4yIDAgNzMuMS0xMy4zIDEwMS4zLTM3LjItMjAuMy0xMC4xLTM4LjgtMjMuNS01NC42LTM5LjUtMTQgOC4yLTMwLjEgMTIuNi00Ni43IDEyLjYtNTEuMSAwLTkyLjUtNDEuNC05Mi41LTkyLjUgMC0yNC41IDkuNy00OCAyNy4xLTY1LjRsNDguNi00OC42eiJdCiAgICB9OwogICAgZmFDaGFpbkJyb2tlbiA9IGZhTGlua1NsYXNoOwogICAgZmFDaGFpblNsYXNoID0gZmFMaW5rU2xhc2g7CiAgICBmYVVubGluayA9IGZhTGlua1NsYXNoOwogICAgZmFBcnJvd1JvdGF0ZVJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXJvdGF0ZS1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzg2MzUsICJhcnJvdy1yaWdodC1yb3RhdGUiLCAiYXJyb3ctcm90YXRlLWZvcndhcmQiLCAicmVkbyJdLCAiZjAxZSIsICJNNDM2LjcgNzQuN0w0NDggODUuNCA0NDggMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNDcuOSAwLTcuNi03LjJjLS4yLS4yLS40LS40LS42LS42LTc1LTc1LTE5Ni41LTc1LTI3MS41IDBzLTc1IDE5Ni41IDAgMjcxLjUgMTk2LjUgNzUgMjcxLjUgMGM4LjItOC4yIDE1LjUtMTYuOSAyMS45LTI2LjEgMTAuMS0xNC41IDMwLjEtMTggNDQuNi03LjlzMTggMzAuMSA3LjkgNDQuNmMtOC41IDEyLjItMTguMiAyMy44LTI5LjEgMzQuNy0xMDAgMTAwLTI2Mi4xIDEwMC0zNjIgMFMtMjUgMTc1IDc1IDc1Yzk5LjktOTkuOSAyNjEuNy0xMDAgMzYxLjctLjN6Il0KICAgIH07CiAgICBmYUFycm93UmlnaHRSb3RhdGUgPSBmYUFycm93Um90YXRlUmlnaHQ7CiAgICBmYUFycm93Um90YXRlRm9yd2FyZCA9IGZhQXJyb3dSb3RhdGVSaWdodDsKICAgIGZhUmVkbyA9IGZhQXJyb3dSb3RhdGVSaWdodDsKICAgIGZhUGVuQ2xpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW4tY2xpcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJwZW4tYWx0Il0sICJmMzA1IiwgIk00MDQgMGMxOS4yIDAgMzcuNiA3LjYgNTEuMSAyMS4ybDM1LjcgMzUuN0M1MDQuNCA3MC40IDUxMiA4OC44IDUxMiAxMDhzLTcuNiAzNy42LTIxLjIgNTEuMUw0NDUuOSAyMDQgMzA4IDY2LjEgMzUyLjkgMjEuMkMzNjYuNCA3LjYgMzg0LjggMCA0MDQgMHpNMjc0LjEgMTAwbDAgMCAxMzcuOSAxMzcuOS0yMTUuMSAyMTUuMWMtMTAuNyAxMC43LTI0LjEgMTguNS0zOC43IDIyLjZMMzAuNCA1MTEuMWMtOC4zIDIuMy0xNy4zIDAtMjMuNC02LjJzLTguNS0xNS4xLTYuMi0yMy40TDM2LjQgMzUzLjhjNC4xLTE0LjYgMTEuOC0yNy45IDIyLjYtMzguN0wyNDAuMSAxMzMuOSAyMjMgMTE2LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDg5IDIxN2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUwxNTUuMSA4Mi45YzI4LjEtMjguMSA3My43LTI4LjEgMTAxLjggMEwyNzQuMSAxMDB6Il0KICAgIH07CiAgICBmYVBlbkFsdCA9IGZhUGVuQ2xpcDsKICAgIGZhRG9vckNsb3NlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb29yLWNsb3NlZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODY4Ml0sICJmNTJhIiwgIk0zMiA2NEMzMiAyOC43IDYwLjcgMCA5NiAwTDM1MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkwzMiA2NHpNMzIwIDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUFycm93RG93bldpZGVTaG9ydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLXdpZGUtc2hvcnQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsic29ydC1hbW91bnQtYXNjIiwgInNvcnQtYW1vdW50LWRvd24iXSwgImYxNjAiLCAiTTI0Ni42IDM3NC42bC05NiA5NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTk2LTk2Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDM3MC43IDk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDYuNyA0MS40LTQxLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pNMzIwIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwem0wLTEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwem0wLTEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYwIDB6bTAtMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyMCA5NnoiXQogICAgfTsKICAgIGZhU29ydEFtb3VudEFzYyA9IGZhQXJyb3dEb3duV2lkZVNob3J0OwogICAgZmFTb3J0QW1vdW50RG93biA9IGZhQXJyb3dEb3duV2lkZVNob3J0OwogICAgZmFDYXJldERvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FyZXQtZG93biIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMGQ3IiwgIk0xNDAuMyAzNzYuOGMxMi42IDEwLjIgMzEuMSA5LjUgNDIuOC0yLjJsMTI4LTEyOGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVMzMDEuNCAxOTIgMjg4LjUgMTkybC0yNTYgMGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOFMuNyAyMzcuNSA5LjkgMjQ2LjZsMTI4IDEyOCAyLjQgMi4yeiJdCiAgICB9OwogICAgZmFLID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImsiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMDddLCAiNGIiLCAiTTMxMSA4Ni4zYzEyLjMtMTIuNyAxMi0zMi45LS43LTQ1LjJzLTMyLjktMTItNDUuMiAuN0MxNDMuNCAxNjcuMiA3Ni40IDIzNi4zIDY0IDI0OUw2NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTA3IDY0LjctNjYuNyAxMzMgMTkyYzEwLjEgMTQuNSAzMCAxOC4xIDQ0LjUgOC4xczE4LjEtMzAgOC4xLTQ0LjVMMTc0LjEgMjI3LjQgMzExIDg2LjN6Il0KICAgIH07CiAgICBmYUNoZWNrVG9TbG90ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZWNrLXRvLXNsb3QiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsidm90ZS15ZWEiXSwgImY3NzIiLCAiTTU1MiAyODhjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxMDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDMxMmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTA0YzAgOC44IDcuMiAxNiAxNiAxNmw0NDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xMDRjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTQxNiAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMjU2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDk2IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDI1NiAwem0tMzcuMSA4NC42Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM2wtODUuNiAxMTcuNy0yNi41LTI3LjRjLTkuMi05LjUtMjQuNC05LjgtMzMuOS0uNi05LjUgOS4yLTkuOCAyNC40LS42IDMzLjlsNDYuNCA0OGM0LjkgNS4xIDExLjggNy44IDE4LjkgNy4zczEzLjYtNC4xIDE3LjgtOS44TDM4NC4yIDE1MC4xYzcuOC0xMC43IDUuNC0yNS43LTUuMy0zMy41eiJdCiAgICB9OwogICAgZmFWb3RlWWVhID0gZmFDaGVja1RvU2xvdDsKICAgIGZhRmlzaEZpbnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlzaC1maW5zIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZjIiLCAiTTI3NS4yIDM4LjRjLTEwLjYtOC0yNS04LjUtMzYuMy0xLjVTMjIyIDU3LjMgMjI0LjYgNzAuM2w5LjcgNDguNmMtMTkuNCA5LTM2LjkgMTkuOS01Mi40IDMxLjUtMTUuMyAxMS41LTI5IDIzLjktNDAuNyAzNi4zTDQ4LjEgMTMyLjRjLTEyLjUtNy4zLTI4LjQtNS4zLTM4LjcgNC45cy0xMi40IDI2LTUuMyAzOC42TDUwIDI1NiA0LjIgMzM2LjFjLTcuMiAxMi42LTUgMjguNCA1LjMgMzguNnMyNi4xIDEyLjIgMzguNyA0LjlsOTMuMS01NC4zYzExLjggMTIuMyAyNS40IDI0LjggNDAuNyAzNi4zIDE1LjUgMTEuNiAzMyAyMi41IDUyLjQgMzEuNWwtOS43IDQ4LjZjLTIuNiAxMyAzLjEgMjYuMyAxNC4zIDMzLjNzMjUuNiA2LjUgMzYuMy0xLjVsNzcuNi01OC4yYzU0LjktNCAxMDEuNS0yNyAxMzcuMi01My44IDM5LjItMjkuNCA2Ny4yLTY0LjcgODEuNi04OS41IDUuOC05LjkgNS44LTIyLjIgMC0zMi4xLTE0LjQtMjQuOC00Mi41LTYwLjEtODEuNi04OS41LTM1LjgtMjYuOC04Mi4zLTQ5LjgtMTM3LjItNTMuOEwyNzUuMiAzOC40ek0zODQgMjU2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYUNvbXByZXNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbXByZXNzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwNjYiLCAiTTE2MCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlM5NiA0Ni4zIDk2IDY0bDAgNjQtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtOTZ6TTMyIDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAwek0zNTIgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwIDAtNjR6TTMyMCAzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDB6Il0KICAgIH07CiAgICBmYUFycm93VXBBWiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC1hLXoiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic29ydC1hbHBoYS11cCJdLCAiZjE1ZSIsICJNNDEyLjYgNDkuN0M0MDcuMiAzOC44IDM5Ni4xIDMyIDM4NCAzMnMtMjMuMiA2LjgtMjguNiAxNy43Yy01MC43IDEwMS4zLTc3LjMgMTU0LjctODAgMTYwLTcuOSAxNS44LTEuNSAzNSAxNC4zIDQyLjlzMzUgMS41IDQyLjktMTQuM2w3LjItMTQuMyA4OC40IDAgNy4yIDE0LjNjNy45IDE1LjggMjcuMSAyMi4yIDQyLjkgMTQuM3MyMi4yLTI3LjEgMTQuMy00Mi45Yy0yLjctNS4zLTI5LjMtNTguNy04MC0xNjB6TTM4NCAxMzUuNmwyMC4yIDQwLjQtNDAuNCAwIDIwLjItNDAuNHpNMjg4IDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw1MC43IDAtNzMuNCA3My40Yy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOVMzMDcuMSA0ODAgMzIwIDQ4MGwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNTAuNyAwIDczLjQtNzMuNGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0NjAuOSAyODggNDQ4IDI4OGwtMTI4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtODAgODBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyAyNS40IDI1LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtODAtODB6Il0KICAgIH07CiAgICBmYVNvcnRBbHBoYVVwID0gZmFBcnJvd1VwQVo7CiAgICBmYVVzZXJHcmFkdWF0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWdyYWR1YXRlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1MDEiLCAiTTI0MS4zLTEzYy0xMS40LTIuMy0yMy4xLTIuMy0zNC41IDBMMTkuMyAyNC41QzguMSAyNi43IDAgMzYuNiAwIDQ4IDAgNTguMyA2LjUgNjcuMyAxNiA3MC42TDE2IDE0NCAuMyAyMjIuNmMtLjIgLjktLjMgMS45LS4zIDIuOSAwIDggNi41IDE0LjYgMTQuNiAxNC42bDM0LjkgMGM4IDAgMTQuNi02LjUgMTQuNi0xNC42IDAtMS0uMS0xLjktLjMtMi45TDQ4IDE0NCA0OCA3Ny4zIDk2IDg2LjkgOTYgMTQ0YzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4czEyOC01Ny4zIDEyOC0xMjhsMC01Ny4xIDc2LjctMTUuM0M0MzkuOSA2OS4zIDQ0OCA1OS40IDQ0OCA0OHMtOC4xLTIxLjMtMTkuMy0yMy41TDI0MS4zLTEzek0yMjQgMjI0Yy00NC4yIDAtODAtMzUuOC04MC04MGwxNjAgMGMwIDQ0LjItMzUuOCA4MC04MCA4MHpNMTIwLjEgMzIwLjFDNTguNyAzNDguMyAxNiA0MTAuMyAxNiA0ODIuMyAxNiA0OTguNyAyOS4zIDUxMiA0NS43IDUxMmwxNTQuMyAwIDAtMTQ2LTU3LjQtNDNjLTYuNS00LjktMTUuMi02LjItMjIuNi0yLjh6TTI0OCA1MTJsMTU0LjMgMGMxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuNyAwLTcyLTQyLjctMTM0LTEwNC4xLTE2Mi4xLTcuNC0zLjQtMTYuMS0yLjEtMjIuNiAyLjhsLTU3LjQgNDMgMCAxNDZ6Il0KICAgIH07CiAgICBmYUZpbGVDb2RlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNvZGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFjOSIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTE1NC4yIDI5NS42YzguNi0xMC4xIDcuNS0yNS4yLTIuNi0zMy44cy0yNS4yLTcuNS0zMy44IDIuNmwtNDggNTZjLTcuNyA5LTcuNyAyMi4yIDAgMzEuMmw0OCA1NmM4LjYgMTAuMSAyMy44IDExLjIgMzMuOCAyLjZzMTEuMi0yMy44IDIuNi0zMy44bC0zNC42LTQwLjQgMzQuNi00MC40em0xMTItMzEuMmMtOC42LTEwLjEtMjMuOC0xMS4yLTMzLjgtMi42cy0xMS4yIDIzLjgtMi42IDMzLjhsMzQuNiA0MC40LTM0LjYgNDAuNGMtOC42IDEwLjEtNy41IDI1LjIgMi42IDMzLjhzMjUuMiA3LjUgMzMuOC0yLjZsNDgtNTZjNy43LTkgNy43LTIyLjIgMC0zMS4ybC00OC01NnoiXQogICAgfTsKICAgIGZhU29hcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzb2FwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTMyXSwgImUwNmUiLCAiTTIwOC0zMmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6TTMyMCA5NmE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNMzUyIDBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNOTYgMTYwbDExMiAwYzAgMjMuOCA3LjQgNDUuOSAyMC4xIDY0TDE2MCAyMjRjLTUzIDAtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZsMTkyIDBjNTMgMCA5Ni00MyA5Ni05NiAwLTM1LjEtMTguOS02NS45LTQ3LTgyLjYgMTktMTkuOCAzMC43LTQ2LjYgMzEtNzYuMSA0NS40IDcuNiA4MCA0Ny4xIDgwIDk0LjdsMCAxMjhjMCA1My00MyA5Ni05NiA5Nkw5NiA0ODBjLTUzIDAtOTYtNDMtOTYtOTZMMCAyNTZjMC01MyA0My05NiA5Ni05NnptNjQgMTEybDE5MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4bC0xOTIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHoiXQogICAgfTsKICAgIGZhUmVjeWNsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZWN5Y2xlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTg0MiwgOTg1MCwgOTg1MV0sICJmMWI4IiwgIk0xNTIuMyA2MEMxOTguNS0yMCAzMTQtMjAgMzYwLjIgNjBsMzcuMyA2NC42IDI3LjctMTZjOC40LTQuOSAxOC45LTQuMiAyNi42IDEuN3MxMS4xIDE1LjkgOC42IDI1LjNMNDM2LjkgMjIzYy0zLjQgMTIuOC0xNi42IDIwLjQtMjkuNCAxN2wtODcuNC0yMy40Yy05LjQtMi41LTE2LjMtMTAuNC0xNy42LTIwczMuNC0xOS4xIDExLjgtMjMuOWwyNy43LTE2LTM3LjMtNjQuNmMtMjEuNi0zNy4zLTc1LjQtMzcuMy05NyAwbC01LjMgOS4xYy04LjggMTUuMy0yOC40IDIwLjUtNDMuNyAxMS43UzEzOC4yIDg0LjUgMTQ3IDY5LjFsNS4zLTkuMXpNNDQ5LjcgMjc5LjFjMTUuMy04LjggMzQuOS0zLjYgNDMuNyAxMS43bDUuMyA5LjFjNDYuMiA4MC0xMS41IDE4MC0xMDMuOSAxODBsLTc0LjYgMCAwIDMyYzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw2NC02NGM2LjktNi45IDE3LjItOC45IDI2LjItNS4yczE0LjggMTIuNSAxNC44IDIyLjJsMCAzMiA3NC42IDBjNDMuMSAwIDcwLjEtNDYuNyA0OC41LTg0bC01LjMtOS4xYy04LjgtMTUuMy0zLjYtMzQuOSAxMS43LTQzLjd6TTUxIDIzNS40bC0yNy43LTE2Yy04LjQtNC45LTEzLjEtMTQuMy0xMS44LTIzLjlzOC4yLTE3LjUgMTcuNi0yMEwxMTYuNSAxNTJjMTIuOC0zLjQgMjYgNC4yIDI5LjQgMTdsMjMuNCA4Ny40YzIuNSA5LjQtLjkgMTkuMy04LjYgMjUuM3MtMTguMiA2LjYtMjYuNiAxLjdsLTI3LjctMTYtMzcuMyA2NC42Yy0yMS42IDM3LjMgNS40IDg0IDQ4LjUgODRsMTAuNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMC42IDBDMjUuMyA0ODAtMzIuNCAzODAgMTMuOCAzMDBMNTEgMjM1LjR6Il0KICAgIH07CiAgICBmYUZhY2VHcmluV2luazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXdpbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZ3Jpbi13aW5rIl0sICJmNThjIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzg2LjcgMzA4LjljMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTIyLjQgNjEuMy04MS4zIDEwNS4xLTE1MC4zIDEwNS4xUzEyOC4xIDM4OC4yIDEwNS43IDMyNi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjF6TTMyOCAxOTZjLTExIDAtMjAgOS0yMCAyMHMtOSAyMC0yMCAyMC0yMC05LTIwLTIwYzAtMzMuMSAyNi45LTYwIDYwLTYwbDE2IDBjMzMuMSAwIDYwIDI2LjkgNjAgNjAgMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwLTktMjAtMjAtMjBsLTE2IDB6TTE3NiAxNzZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFHcmluV2luazIgPSBmYUZhY2VHcmluV2luazI7CiAgICBmYVdhdGVyTGFkZGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndhdGVyLWxhZGRlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJsYWRkZXItd2F0ZXIiLCAic3dpbW1pbmctcG9vbCJdLCAiZjVjNSIsICJNMzc0LjUgNDA1LjdjMzguNC0yOSA5MC41LTI5IDEyOSAwIDE2LjkgMTIuNyAzMi45IDIxLjUgNDcuOCAyNC42IDEzLjcgMi44IDI3LjQgLjkgNDIuMy0xMC4zIDEwLjYtOCAyNS42LTUuOSAzMy42IDQuN3M1LjggMjUuNy00LjggMzMuNmMtMjYuNCAxOS45LTU0LjIgMjQuNC04MC43IDE5LjEtMjUuMy01LjEtNDguMS0xOC45LTY3LjItMzMuMy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0yNC4yIDE4LjMtNTIuMyAzNS45LTgzLjQgMzUuOXMtNTkuMS0xNy43LTgzLjMtMzUuOWMtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDAtMjMuOCAxNy45LTU0LjEgMzUuNS04OC4xIDM1LjMtMjAuNC0uMS00MC43LTYuNy01OS44LTIxLjEtMTAuNi04LTEyLjctMjMtNC43LTMzLjZzMjMtMTIuNyAzMy42LTQuN2MxMS4zIDguNSAyMS42IDExLjQgMzEuMiAxMS41IDE3LjYgLjEgMzcuMy05LjQgNTguOS0yNS43IDM4LjQtMjkgOTAuNi0yOSAxMjkgMCAyNCAxOC4xIDQwLjcgMjYuMyA1NC41IDI2LjNzMzAuNS04LjIgNTQuNS0yNi4zek01MTEuOCAzMmM0OC4zIDAgODkgMzYgOTUgODMuOWwxIDguMmMyLjIgMTcuNS0xMC4yIDMzLjUtMjcuOCAzNS43cy0zMy41LTEwLjItMzUuNy0yNy44bC0xLTguMmMtMi0xNS45LTE1LjUtMjcuOC0zMS41LTI3LjgtMTcuNSAwLTMxLjggMTQuMi0zMS44IDMxLjhsMCAyMTEuOGMtMjMuMS01LjEtNDQuOS00LjQtNjQtLjRsMC01MS4yLTE5MiAwIDAgNDguN2MtNS4zLS41LTEwLjctLjgtMTYtLjctMTYuMiAuMS0zMi40IDIuNy00OCA4bDAtMjE2LjJjMC01Mi45IDQyLjktOTUuOCA5NS43LTk1LjggNDguMyAwIDg5IDM2IDk1IDgzLjlsMSA4LjJjMi4yIDE3LjUtMTAuMiAzMy41LTI3LjggMzUuN3MtMzMuNS0xMC4yLTM1LjctMjcuOGwtMS04LjJjLTItMTUuOS0xNS41LTI3LjgtMzEuNS0yNy44LTE3LjUgMC0zMS43IDE0LjItMzEuNyAzMS44bDAgOTYuMiAxOTIgMCAwLTk2LjJDNDE2IDc0LjkgNDU4LjkgMzIgNTExLjggMzJ6Il0KICAgIH07CiAgICBmYUxhZGRlcldhdGVyID0gZmFXYXRlckxhZGRlcjsKICAgIGZhU3dpbW1pbmdQb29sID0gZmFXYXRlckxhZGRlcjsKICAgIGZhVG93ZXJDZWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvd2VyLWNlbGwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU4NSIsICJNNTkuNiA5LjhDNDcuMyA0LjggMzMuMyAxMC43IDI4LjQgMjMgMTUuMiA1NS41IDggOTAuOSA4IDEyOHM3LjIgNzIuNSAyMC40IDEwNWM1IDEyLjMgMTkgMTguMiAzMS4zIDEzLjJzMTguMi0xOSAxMy4yLTMxLjNDNjIgMTg4LjIgNTYgMTU4LjggNTYgMTI4czYtNjAuMiAxNi45LTg3YzUtMTIuMy0xLTI2LjMtMTMuMi0zMS4zem00NTYuOCAwYy0xMi4zIDUtMTguMiAxOS0xMy4yIDMxLjMgMTAuOSAyNi44IDE2LjkgNTYuMiAxNi45IDg3cy02IDYwLjItMTYuOSA4N2MtNSAxMi4zIDEgMjYuMyAxMy4yIDMxLjNzMjYuMy0xIDMxLjMtMTMuMmMxMy4xLTMyLjUgMjAuNC02Ny45IDIwLjQtMTA1cy03LjItNzIuNS0yMC40LTEwNWMtNS0xMi4zLTE5LTE4LjItMzEuMy0xMy4yek0zNDAuMSAxNjUuMmM3LjUtMTAuNSAxMS45LTIzLjMgMTEuOS0zNy4yIDAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0YzAgMTMuOSA0LjQgMjYuNyAxMS45IDM3LjJMOTguOSA0NjYuOGMtNy4zIDE2LjEtLjIgMzUuMSAxNS45IDQyLjRzMzUuMSAuMiA0Mi40LTE1LjlsMjAuNi00NS4yIDIyMC42IDAgMjAuNiA0NS4yYzcuMyAxNi4xIDI2LjMgMjMuMiA0Mi40IDE1LjlzMjMuMi0yNi4zIDE1LjktNDIuNEwzNDAuMSAxNjUuMnpNMzc2LjUgNDAwbC0xNzcgMCAyMS44LTQ4IDEzMy4zIDAgMjEuOCA0OHpNMjg4IDIwNS4zbDQ0LjggOTguNy04OS43IDAgNDQuOC05OC43ek0xNjMuMyA3My42YzUuMy0xMi4xLS4yLTI2LjMtMTIuNC0zMS42cy0yNi4zIC4yLTMxLjYgMTIuNEMxMDkuNSA3NyAxMDQgMTAxLjkgMTA0IDEyOHM1LjUgNTEgMTUuMyA3My42YzUuMyAxMi4xIDE5LjUgMTcuNyAzMS42IDEyLjRzMTcuNy0xOS41IDEyLjQtMzEuNkMxNTYgMTY1LjggMTUyIDE0Ny40IDE1MiAxMjhzNC0zNy44IDExLjMtNTQuNHpNNDU2LjcgNTQuNGMtNS4zLTEyLjEtMTkuNS0xNy43LTMxLjYtMTIuNHMtMTcuNyAxOS41LTEyLjQgMzEuNkM0MjAgOTAuMiA0MjQgMTA4LjYgNDI0IDEyOHMtNCAzNy44LTExLjMgNTQuNGMtNS4zIDEyLjEgLjIgMjYuMyAxMi40IDMxLjZzMjYuMy0uMiAzMS42LTEyLjRDNDY2LjUgMTc5IDQ3MiAxNTQuMSA0NzIgMTI4cy01LjUtNTEtMTUuMy03My42eiJdCiAgICB9OwogICAgZmFDb2xvblNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29sb24tc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMTQwIiwgIk0yMTMuOCA4LjdjMTIuOSAzLjIgMjAuNyAxNi4yIDE3LjUgMjkuMWwtNC42IDE4LjVjMTUuNCAuOCAzMC40IDMuNCA0NC43IDcuNWw5LjQtMzcuNkMyODMuOSAxMy4zIDI5NyA1LjUgMzA5LjggOC43UzMzMC41IDI1IDMyNy4zIDM3LjhMMzE2IDgyLjhjMTMuNSA3LjggMjYgMTcuMSAzNy4yIDI3LjggMTIuOSAxMi4xIDEzLjQgMzIuNCAxLjMgNDUuMnMtMzIuNCAxMy40LTQ1LjIgMS4zYy0zLjEtMi45LTYuNC01LjgtOS44LTguNEwyMzkuMiAzOTBjMjYuOS00LjYgNTEuMS0xNy4xIDcwLjEtMzUuMSAxMi45LTEyLjEgMzMuMS0xMS41IDQ1LjIgMS4zczExLjUgMzMuMS0xLjMgNDUuMmMtMzQuMyAzMi4zLTgwIDUyLjgtMTMwLjUgNTQuNGwtNy41IDI5LjljLTMuMiAxMi45LTE2LjIgMjAuNy0yOS4xIDE3LjVzLTIwLjctMTYuMi0xNy41LTI5LjFsNS42LTIyLjVjLTE1LTMuMi0yOS40LTgtNDIuOS0xNC40bC0xMi4xIDQ4LjVjLTMuMiAxMi45LTE2LjIgMjAuNy0yOS4xIDE3LjVTNjkuNSA0ODcgNzIuNyA0NzQuMmwxNi02My45QzQ0LjMgMzczLjYgMTYgMzE4LjEgMTYgMjU2IDE2IDE1OS4yIDg0LjggNzguNCAxNzYuMyA2MGw4LjQtMzMuOEMxODcuOSAxMy4zIDIwMSA1LjUgMjEzLjggOC43ek0xNTggMTMyLjljLTQ2LjEgMjEuOC03OCA2OC43LTc4IDEyMy4xIDAgMzAuNSAxMCA1OC42IDI2LjkgODEuM0wxNTggMTMyLjl6TTE0Ny40IDM3My40YzEzIDcuNiAyNy4zIDEzLjEgNDIuNSAxNi4xbDY1LjktMjYzLjZjLTEyLjYtMy44LTI1LjktNS45LTM5LjgtNS45LTEuOCAwLTMuNSAwLTUuMyAuMUwxNDcuNCAzNzMuNHoiXQogICAgfTsKICAgIGZhTGFwdG9wRmlsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYXB0b3AtZmlsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTFkIiwgIk02NCA2NEM2NCAyOC43IDkyLjcgMCAxMjggMEw0MTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDQ4LTY0IDAgMC00OC0yODggMCAwIDE5MiAxMTIgMCAwIDk2LTE2My4yIDBDMzQuNCAzNTIgMCAzMTcuNiAwIDI3NS4yIDAgMjY0LjYgOC42IDI1NiAxOS4yIDI1Nkw2NCAyNTYgNjQgNjR6TTUyOS45IDI1Ny45YzkgOSAxNC4xIDIxLjIgMTQuMSAzMy45TDU0NCA0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2MCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTI1NmMwLTI2LjUgMjEuNS00OCA0OC00OGw3Ni4xIDBjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMSAyMCAyMCA0Ny45IDQ3LjkgODMuOSA4My45ek00MTYgMjcyYzAgOC44IDcuMiAxNiAxNiAxNmw2MC4xIDAtNzYuMS03Ni4xIDAgNjAuMXoiXQogICAgfTsKICAgIGZhQmFoYWkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFoYWkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiaGF5a2FsIl0sICJmNjY2IiwgIk0yODguNC04YzEzLjIgMCAyNSA4LjEgMjkuOCAyMC40bDMxLjkgODIgNzcuMi00Mi4zYzExLjYtNi4zIDI1LjgtNC45IDM1LjkgMy41czE0IDIyLjMgOS43IDM0LjhsLTI4LjIgODMuMyA4Ni4zIDE3LjJjMTIuOSAyLjYgMjMgMTIuOCAyNS4zIDI1LjhzLTMuNiAyNi4xLTE0LjkgMzIuOWwtNzUuMiA0NS43IDU1IDY4LjZjOC4zIDEwLjMgOS4zIDI0LjYgMi43IDM2cy0xOS41IDE3LjYtMzIuNiAxNS42bC04Ny0xMy4zLTIgODhjLS4zIDEzLjItOC42IDI0LjgtMjEgMjkuNHMtMjYuMyAxLTM1LTlsLTU4LTY2LjEtNTggNjYuMWMtOC43IDkuOS0yMi42IDEzLjUtMzUgOXMtMjAuOC0xNi4yLTIxLTI5LjRsLTItODgtODcgMTMuM2MtMTMgMi0yNi00LjItMzIuNi0xNS42cy01LjUtMjUuNyAyLjctMzZsNTUtNjguNi03NS4yLTQ1LjdjLTExLjMtNi44LTE3LjItMTkuOS0xNC45LTMyLjlzMTIuMy0yMy4yIDI1LjMtMjUuOGw4Ni4zLTE3LjItMjguMi04My4zYy00LjItMTIuNS0uNC0yNi4zIDkuNy0zNC44czI0LjQtOS45IDM1LjktMy41bDc3LjEgNDIuMyAzMS45LTgyQzI2My4zIC4xIDI3NS4yLTggMjg4LjQtOHptMCAxMjAuMkwyNzMgMTUxLjZjLTMuMyA4LjYtMTAuMiAxNS4zLTE4LjkgMTguNXMtMTguMiAyLjQtMjYuMy0ybC0zNy0yMC4zIDEzLjYgNDBjMyA4LjcgMiAxOC4zLTIuNiAyNi4zcy0xMi40IDEzLjYtMjEuNSAxNS40bC00MS40IDguMyAzNi4xIDIxLjljNy45IDQuOCAxMy4zIDEyLjcgMTQuOSAyMS44cy0uOCAxOC40LTYuNSAyNS42bC0yNi40IDMzIDQxLjgtNi40YzkuMS0xLjQgMTguNCAxLjIgMjUuNCA3LjFzMTEuMiAxNC42IDExLjQgMjMuOGwuOSA0Mi4yIDI3LjktMzEuOGM2LjEtNi45IDE0LjgtMTAuOSAyNC4xLTEwLjlzMTggNCAyNC4xIDEwLjlsMjcuOSAzMS44IC45LTQyLjJjLjItOS4yIDQuNC0xNy45IDExLjQtMjMuOHMxNi4zLTguNSAyNS40LTcuMWw0MS44IDYuNC0yNi40LTMzYy01LjgtNy4yLTguMi0xNi41LTYuNi0yNS42czctMTcgMTQuOS0yMS44bDM2LjEtMjEuOS00MS40LTguM2MtOS0xLjgtMTYuOS03LjQtMjEuNS0xNS40cy01LjUtMTcuNi0yLjYtMjYuM2wxMy42LTQwLTM3IDIwLjNjLTguMSA0LjQtMTcuNyA1LjItMjYuMyAycy0xNS41LTkuOS0xOC45LTE4LjVsLTE1LjMtMzkuNHoiXQogICAgfTsKICAgIGZhSGF5a2FsID0gZmFCYWhhaTsKICAgIGZhTW9uZXlCaWxsMTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9uZXktYmlsbC0xIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbIm1vbmV5LWJpbGwtYWx0Il0sICJmM2QxIiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptMTkyIDgwYTExMiAxMTIgMCAxIDEgMCAyMjQgMTEyIDExMiAwIDEgMSAwLTIyNHpNNjQgMTg0bDAtNDhjMC00LjQgMy42LTggOC04bDQ4IDBjNC40IDAgOC4xIDMuNiA3LjUgOC0zLjYgMjktMjYuNiA1MS45LTU1LjUgNTUuNS00LjQgLjUtOC0zLjEtOC03LjV6bTAgMTQ0YzAtNC40IDMuNi04LjEgOC03LjUgMjkgMy42IDUxLjkgMjYuNiA1NS41IDU1LjUgLjUgNC40LTMuMSA4LTcuNSA4bC00OCAwYy00LjQgMC04LTMuNi04LThsMC00OHpNNDQwIDE5MS41Yy0yOS0zLjYtNTEuOS0yNi42LTU1LjUtNTUuNS0uNS00LjQgMy4xLTggNy41LThsNDggMGM0LjQgMCA4IDMuNiA4IDhsMCA0OGMwIDQuNC0zLjYgOC4xLTggNy41ek00NDggMzI4bDAgNDhjMCA0LjQtMy42IDgtOCA4bC00OCAwYy00LjQgMC04LjEtMy42LTcuNS04IDMuNi0yOSAyNi42LTUxLjkgNTUuNS01NS41IDQuNC0uNSA4IDMuMSA4IDcuNXpNMjQwIDE4OGMtMTEgMC0yMCA5LTIwIDIwIDAgOS43IDYuOSAxNy43IDE2IDE5LjZsMCA0OC40LTQgMGMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBsNDggMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTQgMCAwLTY4YzAtMTEtOS0yMC0yMC0yMGwtMTYgMHoiXQogICAgfTsKICAgIGZhTW9uZXlCaWxsQWx0MiA9IGZhTW9uZXlCaWxsMTI7CiAgICBmYUNsb3VkQm9sdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1ib2x0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3Nzg1LCAidGh1bmRlcnN0b3JtIl0sICJmNzZjIiwgIk0wIDIyNGMwIDUzIDQzIDk2IDk2IDk2bDM4LjYgMCAxMjQuMS0xMTFjMTIuMi0xMC45IDI4LTE3IDQ0LjQtMTcgNDQuNiAwIDc2LjUgNDMgNjMuNyA4NS43TDM1NC4xIDMyMCA0MTYgMzIwYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0uNSAwLTEuMSAwLTEuNiAwIDEuMS01LjIgMS42LTEwLjUgMS42LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwLTI0LjMgMC00Ni4xIDEwLjktNjAuOCAyOC0xOC43LTM1LjctNTYuMS02MC05OS4yLTYwLTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEyIDAgNy4xIC43IDE0LjEgMS45IDIwLjgtMzguMyAxMi42LTY1LjkgNDguNy02NS45IDkxLjJ6TTE2MC42IDQwMGw2MS44IDAtMzEuMiAxMDQuMWMtMy42IDExLjkgNS4zIDIzLjkgMTcuOCAyMy45IDQuNiAwIDktMS43IDEyLjQtNC43TDM2Mi41IDM5Ni45YzMuNS0zLjEgNS41LTcuNiA1LjUtMTIuNCAwLTkuMi03LjQtMTYuNi0xNi42LTE2LjZsLTYxLjggMCAzMS4yLTEwNC4xYzMuNi0xMS45LTUuMy0yMy45LTE3LjgtMjMuOS00LjYgMC05IDEuNy0xMi40IDQuN0wxNDkuNSAzNzEuMWMtMy41IDMuMS01LjUgNy42LTUuNSAxMi40IDAgOS4yIDcuNCAxNi42IDE2LjYgMTYuNnoiXQogICAgfTsKICAgIGZhVGh1bmRlcnN0b3JtID0gZmFDbG91ZEJvbHQ7CiAgICBmYUV0aGVybmV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImV0aGVybmV0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3OTYiLCAiTTAgMjI0TDAgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDAgMC0xMDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEwNCA2NCAwIDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDQgNjQgMCAwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTA0IDY0IDAgMC0xMDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEwNCAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJsLTMyIDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMkwxNjAgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnoiXQogICAgfTsKICAgIGZhSHJ5dm5pYVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaHJ5dm5pYS1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbODM3MiwgImhyeXZuaWEiXSwgImY2ZjIiLCAiTTMzNiAxNDkuNEMzMzYgNzcgMjY4LjUgMjMuNSAxOTggNDAuMUw5My4yIDY0LjlDNzYgNjguOSA2NS40IDg2LjIgNjkuNCAxMDMuNHMyMS4zIDI3LjkgMzguNSAyMy44bDEwNC44LTI0LjdjMzAuMy03LjEgNTkuMyAxNS44IDU5LjMgNDYuOSAwIDE3LjYtOS42IDMzLjgtMjUgNDIuM2wtLjcgLjQtMjIyLjMgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzIuNCAwYzUuNS0xMy4zIDguNC0yNy44IDguNC00Mi42ek0zNjAgMjcyTDI0IDI3MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMy4zIDBjLTYuMSAxMy40LTkuMyAyOC4xLTkuMyA0My4zIDAgNjQuMSA1Ni45IDExMy40IDEyMC40IDEwNC4ybDEzNy45LTE5LjljMTcuNS0yLjUgMjkuNi0xOC43IDI3LjEtMzYuMnMtMTguOC0yOS42LTM2LjItMjcuMUwxNTkuMiA0MDQuMmMtMjQuOSAzLjYtNDcuMi0xNS43LTQ3LjItNDAuOSAwLTE1LjEgOC4yLTI4LjkgMjEuNC0zNi4ybDEzLTcuMSAyMTMuNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFIcnl2bmlhID0gZmFIcnl2bmlhU2lnbjsKICAgIGZhRXllU2xhc2gyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImV5ZS1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMDcwIiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC05Ni40LTk2LjRjMi43LTIuNCA1LjQtNC44IDgtNy4yIDQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjEgMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjYtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMS00Ny4xLTQzLjctMTExLjgtODAuNi0xOTIuNi04MC42LTU2LjggMC0xMDUuNiAxOC4yLTE0NiA0NC4yTDQxLTI0Ljl6TTIwNC41IDEzOC43YzIzLjUtMTYuOCA1Mi40LTI2LjcgODMuNS0yNi43IDc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgMzEuMS05LjkgNTkuOS0yNi43IDgzLjVsLTM0LjctMzQuN2MxMi43LTIxLjQgMTctNDcuNyAxMC4xLTczLjctMTMuNy01MS4yLTY2LjQtODEuNi0xMTcuNi02Ny45LTguNiAyLjMtMTYuNyA1LjctMjQgMTBsLTM0LjctMzQuN3pNMzI1LjMgMzk1LjFjLTExLjkgMy4yLTI0LjQgNC45LTM3LjMgNC45LTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0IDAtMTIuOSAxLjctMjUuNCA0LjktMzcuM0w2OS40IDEzOS4yYy0zMi42IDM2LjgtNTUgNzUuOC02Ni45IDEwNC41LTMuMyA3LjktMy4zIDE2LjcgMCAyNC42IDE0LjkgMzUuNyA0Ni4yIDg3LjcgOTMgMTMxLjEgNDcuMSA0My43IDExMS44IDgwLjYgMTkyLjYgODAuNiAzNy4zIDAgNzEuMi03LjkgMTAxLjUtMjAuNmwtNjQuMi02NC4yeiJdCiAgICB9OwogICAgZmFDYXJ0RmxhdGJlZFN1aXRjYXNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcnQtZmxhdGJlZC1zdWl0Y2FzZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJsdWdnYWdlLWNhcnQiXSwgImY1OWQiLCAiTTAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDQ4IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDQwMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zNC43IDBjMS44IDUgMi43IDEwLjQgMi43IDE2IDAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtNS42IDEtMTEgMi43LTE2bC0xOTcuNSAwYzEuOCA1IDIuNyAxMC40IDIuNyAxNiAwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGMwLTYgMS4xLTExLjcgMy4xLTE3LTM4LjEtNi4yLTY3LjEtMzkuMi02Ny4xLTc5TDY0IDgwYzAtOC44LTcuMi0xNi0xNi0xNkwzMiA2NEMxNC4zIDY0IDAgNDkuNyAwIDMyek0xNzYgMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDMyIDAgMC0yNGMwLTMwLjkgMjUuMS01NiA1Ni01Nmw2NCAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2bDAgMjQgMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE0NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjQwIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTQ0ek0zODQgOTZsMC0yNGMwLTQuNC0zLjYtOC04LThsLTY0IDBjLTQuNCAwLTggMy42LTggOGwwIDI0IDgwIDB6Il0KICAgIH07CiAgICBmYUx1Z2dhZ2VDYXJ0ID0gZmFDYXJ0RmxhdGJlZFN1aXRjYXNlOwogICAgZmFSYWRpYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmFkaWF0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3YjkiLCAiTTQ0Ni4yIDM0LjVjLTE0LjItMTAuMS0zMy41LTQuNi00Mi4yIDEwLjVMMzMxLjYgMTcwLjNjMzEuMyAxNS44IDUyLjggNDguMyA1Mi44IDg1LjdsMTQ0IDBjMTcuNyAwIDMyLjItMTQuNCAzMC4xLTMxLjktOS4xLTc4LjEtNTEuNC0xNDYuMS0xMTIuMy0xODkuNnpNMTcyLjcgNDQuOUMxNjQgMjkuOCAxNDQuNyAyNC4zIDEzMC41IDM0LjUgNjkuNiA3Ny45IDI3LjMgMTQ1LjkgMTguMiAyMjQuMSAxNi4xIDI0MS42IDMwLjcgMjU2IDQ4LjMgMjU2bDE0NCAwYzAtMzcuNSAyMS41LTY5LjkgNTIuOC04NS43TDE3Mi43IDQ0Ljl6bS05LjQgNDE2LjhjLTguNyAxNS4xLTMuOCAzNC41IDEyIDQxLjggMzQuNCAxNS43IDcyLjcgMjQuNSAxMTMgMjQuNXM3OC42LTguOCAxMTMtMjQuNWMxNS44LTcuMiAyMC43LTI2LjcgMTItNDEuOEwzNDEgMzM2LjNjLTE1LjEgOS45LTMzLjIgMTUuNy01Mi42IDE1LjdzLTM3LjUtNS44LTUyLjYtMTUuN0wxNjMuMyA0NjEuN3pNMjg4LjMgMzA0YTQ4IDQ4IDAgMSAwIC0uNy05NiA0OCA0OCAwIDEgMCAuNyA5NnoiXQogICAgfTsKICAgIGZhRmlsZVdvcmQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtd29yZCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWMyIiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTM1LjQgMjc0LjhjLTIuOS0xMi45LTE1LjctMjEuMS0yOC42LTE4LjJzLTIxLjEgMTUuNy0xOC4yIDI4LjZsMzIgMTQ0YzIuMyAxMC41IDExLjQgMTguMiAyMi4yIDE4LjhzMjAuNi02LjEgMjQtMTYuNGwyNS4yLTc1LjcgMjUuMiA3NS43YzMuNCAxMC4yIDEzLjIgMTYuOSAyNCAxNi40czE5LjktOC4yIDIyLjItMTguOGwzMi0xNDRjMi45LTEyLjktNS4zLTI1LjgtMTguMi0yOC42cy0yNS44IDUuMy0yOC42IDE4LjJsLTEzLjIgNTkuNC0yMC42LTYxLjhjLTMuMy05LjgtMTIuNC0xNi40LTIyLjgtMTYuNHMtMTkuNSA2LjYtMjIuOCAxNi40bC0yMC42IDYxLjgtMTMuMi01OS40eiJdCiAgICB9OwogICAgZmFCZWRQdWxzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiZWQtcHVsc2UiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsicHJvY2VkdXJlcyJdLCAiZjQ4NyIsICJNNTMxLjItMjIuNEw1NzIgMzIgNjE2IDMyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC01NiAwYy03LjYgMC0xNC43LTMuNi0xOS4yLTkuNmwtMjQuMS0zMi4xLTQ3IDk5LjljLTMuNyA3LjgtMTEuMyAxMy4xLTE5LjkgMTMuN3MtMTYuOS0zLjQtMjEuNy0xMC42TDM4Ny4yIDgwIDM0NCA4MGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw1NiAwYzggMCAxNS41IDQgMjAgMTAuN2wyNC40IDM2LjYgNDUuOS05Ny41YzMuNi03LjYgMTAuOS0xMi44IDE5LjMtMTMuN3MxNi42IDIuNyAyMS42IDkuNXpNMzIwIDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5LjUgMCAyNi42IDM5LjljMTQuNCAyMS42IDM5LjMgMzMuOCA2NS4yIDMxLjlzNDguOC0xNy42IDU5LjgtNDEuMUw1MjcgMTI5LjJjNDUuOSA3LjIgODEgNDYuOSA4MSA5NC44bDAgMjI0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjQtNDQ4IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMkwzMiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMlM5NiA0Ni4zIDk2IDY0bDAgMjI0IDIyNCAwIDAtMTI4ek0xNDQgMTkyYTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHoiXQogICAgfTsKICAgIGZhUHJvY2VkdXJlcyA9IGZhQmVkUHVsc2U7CiAgICBmYVRlbnRzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbnRzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1ODIiLCAiTTUzOS45IDM1MmwtOTUuNiAwLTguNC02Ni4xYy0yLjktMjMuMi0xNS45LTQzLjktMzUuNC01Ni44TDI1Mi4yIDEzMS41Yy0xOC0xMS45LTM5LjctMTUuNy02MC4xLTExLjUgMi41LTQuMyA1LjktNy45IDEwLjEtMTAuN0wzNTAuNiAxMS42YzEwLjctNyAyNC41LTcgMzUuMiAwbDE0OC40IDk3LjdjNy44IDUuMSAxMyAxMy40IDE0LjIgMjIuN2wyMy4zIDE4NGMyLjQgMTkuMS0xMi41IDM2LTMxLjcgMzZ6TTQuOCA0NzZsMjMuMy0xODRjMS4yLTkuMyA2LjMtMTcuNiAxNC4yLTIyLjdsMTQ4LjQtOTcuN2MxMC43LTcgMjQuNS03IDM1LjIgMGwxNDguNCA5Ny43YzcuOCA1LjEgMTMgMTMuNCAxNC4yIDIyLjdsMjMuMyAxODRjMi40IDE5LjEtMTIuNSAzNi0zMS43IDM2bC00OS43IDBjLTExLjIgMC0yMS41LTUuOC0yNy4zLTE1LjRsLTc3LTEyNi43Yy0xLjctMi44LTQuOC00LjYtOC4xLTQuNi01LjMgMC05LjUgNC4zLTkuNSA5LjVsMCAxMDUuMmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzNi41IDUxMmMtMTkuMyAwLTM0LjItMTYuOS0zMS43LTM2eiJdCiAgICB9OwogICAgZmFNdWdIb3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibXVnLWhvdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzk3NDldLCAiZjdiNiIsICJNMTUyLTE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNCAwIDM4LjkgMjMuNCA1OS40IDM5LjEgNzMuMWwxLjEgMWMxNi4zIDE0LjMgMjMuOCAyMS44IDIzLjggMzcuOSAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzguOS0yMy40LTU5LjQtMzkuMS03My4xbC0xLjEtMUMxODMuNSAzMS43IDE3NiAyNC4xIDE3NiA4IDE3Ni01LjMgMTY1LjMtMTYgMTUyLTE2ek05NiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTkyYzAgNTMgNDMgOTYgOTYgOTZsMTkyIDBjNDEuOCAwIDc3LjQtMjYuNyA5MC41LTY0bDUuNSAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4UzUxOC43IDE5MiA0NDggMTkyTDk2IDE5MnpNNDQ4IDM4NGwwLTEyOGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NHpNMjg4IDhjMC0xMy4zLTEwLjctMjQtMjQtMjRTMjQwLTUuMyAyNDAgOGMwIDM4LjkgMjMuNCA1OS40IDM5LjEgNzMuMWwxLjEgMWMxNi4zIDE0LjMgMjMuOCAyMS44IDIzLjggMzcuOSAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzguOS0yMy40LTU5LjQtMzkuMS03My4xbC0xLjEtMUMyOTUuNSAzMS43IDI4OCAyNC4xIDI4OCA4eiJdCiAgICB9OwogICAgZmFCb2x0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvbHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODg5LCAiemFwIl0sICJmMGU3IiwgIk0zMzguOC05LjljMTEuOSA4LjYgMTYuMyAyNC4yIDEwLjkgMzcuOEwyNzEuMyAyMjQgNDE2IDIyNGMxMy41IDAgMjUuNSA4LjQgMzAuMSAyMS4xcy43IDI2LjktOS42IDM1LjVsLTI4OCAyNDBjLTExLjMgOS40LTI3LjQgOS45LTM5LjMgMS4zcy0xNi4zLTI0LjItMTAuOS0zNy44TDE3Ni43IDI4OCAzMiAyODhjLTEzLjUgMC0yNS41LTguNC0zMC4xLTIxLjFzLS43LTI2LjkgOS42LTM1LjVsMjg4LTI0MGMxMS4zLTkuNCAyNy40LTkuOSAzOS4zLTEuM3oiXQogICAgfTsKICAgIGZhWmFwID0gZmFCb2x0OwogICAgZmFKYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiamFyIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImU1MTYiLCAiTTMyLThjMC0xMy4zIDEwLjctMjQgMjQtMjRsMjA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMNTYgMTZDNDIuNyAxNiAzMiA1LjMgMzItOHpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptOTYgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDE5MnoiXQogICAgfTsKICAgIGZhVHJ1Y2tQbGFuZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1wbGFuZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNThmIiwgIk0xNDQgNDhjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDMyMGMwIDMyLjUgMTIuMSA2Mi4xIDMyIDg0LjdsMCAyNy4zYzAgNy4xIC45IDE0LjEgMi43IDIwLjdMMTkyIDQ4MCA4My45IDUwN0M3My44IDUwOS42IDY0IDUwMS45IDY0IDQ5MS41bDAtMTkuOGMwLTQuOSAyLjItOS41IDYtMTIuNWw3NC01OS4yIDAtNTcuNi0xMjIuMSA0OC44QzExLjQgMzk1LjQgMCAzODcuNyAwIDM3Ni40bDAtNDRjMC04IDMtMTUuNiA4LjMtMjEuNUwxNDQgMTYxLjYgMTQ0IDQ4em0yMjQgODBsMTkyIDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCAxNjBjMCAyNi4yLTEyLjYgNDkuNC0zMiA2NGwwIDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMTYwIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTQ4Yy0xOS40LTE0LjYtMzItMzcuOC0zMi02NGwwLTE2MGMwLTQ0LjIgMzUuOC04MCA4MC04MHptMCAxNzZsMTkyIDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTI4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJ6bTAgODhhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yMTYtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhSGFuZEhvbGRpbmdIZWFydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWhvbGRpbmctaGVhcnQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRiZSIsICJNMjc5LjYgMzFDMjY1LjUgMTEuNSAyNDIuOSAwIDIxOC45IDAgMTc3LjUgMCAxNDQgMzMuNSAxNDQgNzQuOWwwIDIuNGMwIDY0LjQgODIgMTMzLjQgMTIyLjIgMTYzLjMgMTMgOS43IDMwLjUgOS43IDQzLjUgMCA0MC4yLTMwIDEyMi4yLTk4LjkgMTIyLjItMTYzLjNsMC0yLjRjMC00MS40LTMzLjUtNzQuOS03NC45LTc0LjktMjQgMC00Ni42IDExLjUtNjAuNyAzMUwyODggNDIuNyAyNzkuNiAzMXpNMTA5LjMgMzQxLjVMNjYuNyAzODQgMzIgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMC41IDBjMjkgMCA1Ny4zLTkuMyA4MC43LTI2LjVsMTI2LjYtOTMuM2MxNy44LTEzLjEgMjEuNi0zOC4xIDguNS01NS45cy0zOC4xLTIxLjYtNTUuOS04LjVMMzkyLjYgNDE2IDI4MCA0MTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUyLjIgMGMtMzMuOSAwLTY2LjUgMTMuNS05MC41IDM3LjV6Il0KICAgIH07CiAgICBmYUFycm93Um90YXRlTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1yb3RhdGUtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzg2MzQsICJhcnJvdy1sZWZ0LXJvdGF0ZSIsICJhcnJvdy1yb3RhdGUtYmFjayIsICJhcnJvdy1yb3RhdGUtYmFja3dhcmQiLCAidW5kbyJdLCAiZjBlMiIsICJNMjU2IDY0Yy01Ni44IDAtMTA3LjkgMjQuNy0xNDMuMSA2NGw0Ny4xIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMTkyYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDMyQzAgMTQuMyAxNC4zIDAgMzIgMFM2NCAxNC4zIDY0IDMybDAgNTQuN0MxMTAuOSAzMy42IDE3OS41IDAgMjU2IDAgMzk3LjQgMCA1MTIgMTE0LjYgNTEyIDI1NlMzOTcuNCA1MTIgMjU2IDUxMmMtODcgMC0xNjMuOS00My40LTIxMC4xLTEwOS43LTEwLjEtMTQuNS02LjYtMzQuNCA3LjktNDQuNnMzNC40LTYuNiA0NC42IDcuOWMzNC44IDQ5LjggOTIuNCA4Mi4zIDE1Ny42IDgyLjMgMTA2IDAgMTkyLTg2IDE5Mi0xOTJTMzYyIDY0IDI1NiA2NHoiXQogICAgfTsKICAgIGZhQXJyb3dMZWZ0Um90YXRlID0gZmFBcnJvd1JvdGF0ZUxlZnQ7CiAgICBmYUFycm93Um90YXRlQmFjayA9IGZhQXJyb3dSb3RhdGVMZWZ0OwogICAgZmFBcnJvd1JvdGF0ZUJhY2t3YXJkID0gZmFBcnJvd1JvdGF0ZUxlZnQ7CiAgICBmYVVuZG8gPSBmYUFycm93Um90YXRlTGVmdDsKICAgIGZhRmFjZUFuZ3J5MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWFuZ3J5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTQ0LCAiYW5ncnkiXSwgImY1NTYiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTI1NiAzNjhjMjQuMSAwIDQ1LjQgMTEuOCA1OC41IDMwIDcuNyAxMC44IDIyLjcgMTMuMiAzMy41IDUuNXMxMy4yLTIyLjcgNS41LTMzLjVjLTIxLjctMzAuMi01Ny4zLTUwLTk3LjUtNTBzLTc1LjcgMTkuOC05Ny41IDUwYy03LjcgMTAuOC01LjMgMjUuOCA1LjUgMzMuNXMyNS44IDUuMyAzMy41LTUuNWMxMy4xLTE4LjIgMzQuNC0zMCA1OC41LTMwem0tODAtOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0uMyA5LjcgMy4yYzEwLjUgMy41IDIxLjgtMi4yIDI1LjMtMTIuNnMtMi4yLTIxLjgtMTIuNi0yNS4zbC05Ni0zMmMtMTAuNS0zLjUtMjEuOCAyLjItMjUuMyAxMi42czIuMiAyMS44IDEyLjYgMjUuM2wyOC45IDkuNmMtNC4xIDUuNC02LjYgMTIuMS02LjYgMTkuNCAwIDE3LjcgMTQuMyAzMiAzMiAzMnptMTkyLTMyYzAtNy4zLTIuNC0xNC02LjYtMTkuNGwyOC45LTkuNmMxMC41LTMuNSAxNi4xLTE0LjggMTIuNi0yNS4zcy0xNC44LTE2LjEtMjUuMy0xMi42bC05NiAzMmMtMTAuNSAzLjUtMTYuMSAxNC44LTEyLjYgMjUuM3MxNC44IDE2LjEgMjUuMyAxMi42bDkuNy0zLjIgMCAuM2MwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyeiJdCiAgICB9OwogICAgZmFBbmdyeTIgPSBmYUZhY2VBbmdyeTI7CiAgICBmYUJ1cnN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1cnN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0ZGMiLCAiTTM3LjYgNC4yQzI4LTIuMyAxNS4yLTEuMSA3IDdTLTIuMyAyOCA0LjIgMzcuNmwxMTIgMTYzLjMtOTkuNiAzMi4zQzYuNyAyMzYuNCAwIDI0NS42IDAgMjU2czYuNyAxOS42IDE2LjYgMjIuOGwxMDMuMSAzMy40LTUyLjkgMTAwLjZjLTQuOSA5LjMtMy4yIDIwLjcgNC4zIDI4LjFzMTguOCA5LjIgMjguMSA0LjNsMTAwLjYtNTIuOSAzMy40IDEwMy4xYzMuMiA5LjkgMTIuNCAxNi42IDIyLjggMTYuNnMxOS42LTYuNyAyMi44LTE2LjZsMzMuNC0xMDMuMSAxMDAuNiA1Mi45YzkuMyA0LjkgMjAuNyAzLjIgMjguMS00LjNzOS4yLTE4LjggNC4zLTI4LjFsLTUyLjktMTAwLjYgMTAzLjEtMzMuNGM5LjktMy4yIDE2LjYtMTIuNCAxNi42LTIyLjhzLTYuNy0xOS42LTE2LjYtMjIuOGwtMTA2LjUtMzQuNSAyNS43LTcwLjRjMy4yLTguOCAxLTE4LjYtNS42LTI1LjJzLTE2LjQtOC44LTI1LjItNS42bC03MC40IDI1LjctMzQuNS0xMDYuNUMyNzUuNiA2LjcgMjY2LjQgMCAyNTYgMHMtMTkuNiA2LjctMjIuOCAxNi42TDIwMC45IDExNi4yIDM3LjYgNC4yeiJdCiAgICB9OwogICAgZmFaID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInoiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjJdLCAiNWEiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsMzIwIDBjMTIuNCAwIDIzLjcgNy4yIDI5IDE4LjRzMy42IDI0LjUtNC40IDM0LjFMMTAwLjMgNDE2IDM1MiA0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xMi40IDAtMjMuNy03LjItMjktMTguNHMtMy42LTI0LjUgNC40LTM0LjFMMjgzLjcgOTYgMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHoiXQogICAgfTsKICAgIGZhQmFuZGFnZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYW5kYWdlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI5NjU3LCAiYmFuZC1haWQiXSwgImY0NjIiLCAiTTQ2NCA0MTZsNDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MmMwLTM1LjMtMjguNy02NC02NC02NGwtNDggMCAwIDMyMHpNNDE2IDk2bC0yNTYgMCAwIDMyMCAyNTYgMCAwLTMyMHpNNjQgOTZDMjguNyA5NiAwIDEyNC43IDAgMTYwTDAgMzUyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ4IDAgMC0zMjAtNDggMHpNMjE2IDIwOGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem0xMjAtMjRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0yMTYgMzA0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyMC0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYUJhbmRBaWQgPSBmYUJhbmRhZ2U7CiAgICBmYVBsYW5lQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbmUtY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NTYiLCAiTTIzMiAyNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI3LjMgNzggNzEuNWMtNjkuMyAyOS0xMTggOTcuNC0xMTggMTc3LjIgMCA0OS4zIDE4LjYgOTQuMyA0OS4xIDEyOC4zTDI4OCA1MTIgMTc5LjkgNTM5Yy0xMC4xIDIuNS0xOS45LTUuMS0xOS45LTE1LjVsMC0xOS44YzAtNC45IDIuMi05LjUgNi0xMi41bDY2LTUyLjggMC05OS43LTE2Mi45IDU0LjNDNTguNyAzOTYuNCA0OCAzODguNyA0OCAzNzcuOGwwLTQzLjdjMC05IDMuOC0xNy41IDEwLjQtMjMuNkwyMzIgMTUxLjMgMjMyIDI0ek00OTYgMjU2YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMCAyMjhhMjAgMjAgMCAxIDAgMC00MCAyMCAyMCAwIDEgMCAwIDQwem0wLTE4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgODBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTgwYzAtOC44LTcuMi0xNi0xNi0xNnoiXQogICAgfTsKICAgIGZhQnVzU2lkZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidXMtc2lkZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlODFkIiwgIk00ODAgMGM4OC40IDAgMTYwIDcxLjYgMTYwIDE2MGwwIDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNS42IDBjLTEzLjIgMzcuMy00OC42IDY0LTkwLjQgNjRzLTc3LjMtMjYuNy05MC40LTY0bC0xMzkuMSAwYy0xMy4yIDM3LjMtNDguNyA2NC05MC40IDY0cy03Ny4yLTI2LjctOTAuNC02NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA0MyA0MyAwIDk2IDBMNDgwIDB6TTE2MCAzNjhhNDggNDggMCAxIDAgMCA5NiA0OCA0OCAwIDEgMCAwLTk2em0zMjAgMGE0OCA0OCAwIDEgMCAwIDk2IDQ4IDQ4IDAgMSAwIDAtOTZ6bTAtMzA0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtNTMtNDMtOTYtOTYtOTZ6TTI0OCAyMjRsMTA0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTA0IDAgMCAxNjB6TTk2IDY0Qzc4LjMgNjQgNjQgNzguMyA2NCA5NmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEwNCAwIDAtMTYwLTEwNCAweiJdCiAgICB9OwogICAgZmFCdWdzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1Z3MiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRkMCIsICJNNDQ3LjUgMTc0LjZjOC44LTguNCAyMi43LTguOSAzMi4yLS44czExIDIxLjkgNC4xIDMxLjlsLTEuNSAxLjktMjMgMjYuN2MyNi43IDEzLjUgNDYuMyAzOS4xIDUxLjQgNjkuNmwyNS4zIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTI0IDAgMCAzMiAyNCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNS4zIDBjLTcuNiA0NS40LTQ3LjEgODAtOTQuNyA4MHMtODctMzQuNi05NC43LTgwTDI5NiA0MzJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQgMCAwLTMyLTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjUuMyAwYzUuMS0zMC41IDI0LjctNTYuMSA1MS40LTY5LjZsLTIyLjktMjYuN2MtOC42LTEwLjEtNy41LTI1LjIgMi42LTMzLjhzMjUuMi03LjUgMzMuOCAyLjZsMjkuOCAzNC44IDI5LjgtMzQuOCAxLjctMS44em0tMjU2LTE5MmM4LjgtOC40IDIyLjctOC45IDMyLjItLjhzMTEgMjEuOSA0LjEgMzEuOWwtMS41IDEuOS0yMyAyNi43QzIzMCA1NS45IDI0OS41IDgxLjUgMjU0LjcgMTEybDI1LjMgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjQgMCAwIDMyIDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTI1LjMgMGMtNy42IDQ1LjQtNDcuMSA4MC05NC43IDgwcy04Ny0zNC42LTk0LjctODBMNDAgMjQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDI0IDAgMC0zMi0yNCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDI1LjMgMEM3MC41IDgxLjUgOTAgNTUuOSAxMTYuNyA0Mi40TDkzLjggMTUuNkM4NS4yIDUuNiA4Ni4zLTkuNiA5Ni40LTE4LjJzMjUuMi03LjUgMzMuOCAyLjZsMjkuOCAzNC44IDI5LjgtMzQuOCAxLjctMS44eiJdCiAgICB9OwogICAgZmFCZWVyTXVnRW1wdHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmVlci1tdWctZW1wdHkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiYmVlciJdLCAiZjBmYyIsICJNNjQgODBjMC0yNi41IDIxLjUtNDggNDgtNDhsMjg4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNiA2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTA4LjJjMCAyNC4yLTEzLjcgNDYuNC0zNS40IDU3LjJMNDQ4IDM3MS44IDQ0OCAzODRjMCA1My00MyA5Ni05NiA5NmwtMTkyIDBjLTUzIDAtOTYtNDMtOTYtOTZMNjQgODB6TTQ0OCAzMDAuMmw2NC0zMiAwLTEwOC4yLTY0IDAgMCAxNDAuMnpNMTkyIDE1MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjA4em04OCAwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjA4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yMDh6bTg4IDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyMDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTIwOHoiXQogICAgfTsKICAgIGZhQmVlciA9IGZhQmVlck11Z0VtcHR5OwogICAgZmFQZXJzb25DaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1M2UiLCAiTTI4MCAyNGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6bTI0IDIxMi43TDM0MSAyODYuNmMxMi44LTE3LjUgMjguNS0zMi43IDQ2LjMtNDVsLTU2LjItNzUuN0MzMDYgMTMyIDI2Ni4zIDExMiAyMjQgMTEycy04MiAyMC0xMDcuMiA1My45bC03MC41IDk1Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZMMTQ0IDIzNi43IDE0NCA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNzUuM3pNNjQwIDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il0KICAgIH07CiAgICBmYVN0YXBsZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3RhcGxlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNWFmIiwgIk02NDAgMjk5LjNMNjQwIDQzMmMwIDI2LjUtMjEuNSA0OC00OCA0OEw2NCA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDAgMC00OC0zNTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMTYuNi0zMC4yLTUuNGMtMTkuNi0zLjUtMzMuOC0yMC41LTMzLjgtNDAuNCAwLTguOSAyLjktMTcuNSA4LjItMjQuNmwzNS42LTQ3LjVjMzIuOC00My44IDg0LjQtNjkuNiAxMzkuMS02OS42IDI3IDAgNTMuNiA2LjMgNzcuOCAxOC40TDU4Ni45IDIxMy41QzYxOS41IDIyOS43IDY0MCAyNjMgNjQwIDI5OS4zek00NDggMzA0bDAtMTYtMzIwLTU3LjEgMCA3My4xIDMyMCAweiJdCiAgICB9OwogICAgZmFIb3VzZU1lZGljYWxDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1tZWRpY2FsLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTExIiwgIk0zMDkuOCA4LjZjLTEyLjMtMTEuNC0zMS4zLTExLjQtNDMuNSAwbC0yMjQgMjA4Yy05LjYgOS0xMi44IDIyLjktOCAzNS4xUzUwLjggMjcyIDY0IDI3MmwxNiAwIDAgMTc2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5NiAwYy0yMS4yLTI5LjUtMzQuMy02NS4zLTM1LjktMTA0TDI3MiA0MDhjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgMjAgMGMzNC45LTQ4LjUgOTEuNy04MCAxNTYtODAgMTAuNyAwIDIxLjEgLjkgMzEuMyAyLjVMMzA5LjggOC42ek02NDAgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS04Ni42LTYwLjljNy4xIDUuMiA4LjcgMTUuMiAzLjUgMjIuM2wtNjQgODhjLTIuOCAzLjgtNyA2LjItMTEuNyA2LjVzLTkuMy0xLjMtMTIuNi00LjZsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMjYuOCAyNi44IDUzLTcyLjljNS4yLTcuMSAxNS4yLTguNyAyMi40LTMuNXoiXQogICAgfTsKICAgIGZhTmFpcmFTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm5haXJhLXNpZ24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTFmNiIsICJNMTIyLjYgNDYuM2MtNy44LTExLjctMjIuNC0xNy0zNS45LTEyLjlTNjQgNDkuOSA2NCA2NGwwIDE5Mi0zMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMyIDAgMCAxNDRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE0NCA4OS41IDAgMTA3LjggMTYxLjhjNy44IDExLjcgMjIuNCAxNyAzNS45IDEyLjlTMzg0IDQ2Mi4xIDM4NCA0NDhsMC0xNDQgMzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzIgMCAwLTE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE5Mi01Ny41IDAtMTM5LjgtMjA5Ljd6TTI5NC41IDMwNGwyNS41IDAgMCAzOC4zLTI1LjUtMzguM3pNMTg1LjUgMjU2bC01Ny41IDAgMC04Ni4zIDU3LjUgODYuM3oiXQogICAgfTsKICAgIGZhV2lmaSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aWZpIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbIndpZmktMyIsICJ3aWZpLXN0cm9uZyJdLCAiZjFlYiIsICJNMjg4IDk2Yy05MC45IDAtMTczLjIgMzYtMjMzLjcgOTQuNi0xMi43IDEyLjMtMzMgMTItNDUuMi0uN3MtMTItMzMgLjctNDUuMkM4MS43IDc0LjkgMTc5LjkgMzIgMjg4IDMyUzQ5NC4zIDc0LjkgNTY2LjMgMTQ0LjdjMTIuNyAxMi4zIDEzIDMyLjYgLjcgNDUuMnMtMzIuNiAxMy00NS4yIC43QzQ2MS4yIDEzMiAzNzguOSA5NiAyODggOTZ6TTI0MCA0MzJhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMTY4IDMyNi4yYy0xMS43IDEzLjMtMzEuOSAxNC41LTQ1LjIgMi44cy0xNC41LTMxLjktMi44LTQ1LjJDMTYxIDIzNy40IDIyMS4xIDIwOCAyODggMjA4czEyNyAyOS40IDE2OCA3NS44YzExLjcgMTMuMyAxMC40IDMzLjUtMi44IDQ1LjJzLTMzLjUgMTAuNC00NS4yLTIuOEMzNzguNiAyOTIuOSAzMzUuOCAyNzIgMjg4IDI3MnMtOTAuNiAyMC45LTEyMCA1NC4yeiJdCiAgICB9OwogICAgZmFXaWZpMyA9IGZhV2lmaTsKICAgIGZhV2lmaVN0cm9uZyA9IGZhV2lmaTsKICAgIGZhTW9uZXlDaGVja0RvbGxhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1jaGVjay1kb2xsYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibW9uZXktY2hlY2stYWx0Il0sICJmNTNkIiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNMjk2IDI4OGwxMjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTI4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bS0yNC04OGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxMjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTI4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek0xNDggMTQ0YzExIDAgMjAgOSAyMCAyMGwwIDQgOCAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMGwtNDcuNSAwYy02LjkgMC0xMi41IDUuNi0xMi41IDEyLjUgMCA2LjEgNC40IDExLjMgMTAuNCAxMi4zbDQxLjcgN2MyNS4zIDQuMiA0My45IDI2LjEgNDMuOSA1MS44IDAgMjYuMS0xOSA0Ny43LTQ0IDUxLjhsMCA0LjdjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtNC0yNCAwYy0xMSAwLTIwLTktMjAtMjBzOS0yMCAyMC0yMGw1NS41IDBjNi45IDAgMTIuNS01LjYgMTIuNS0xMi41IDAtNi4xLTQuNC0xMS4zLTEwLjQtMTIuM2wtNDEuNy03Qzk0LjUgMjY4IDc2IDI0Ni4xIDc2IDIyMC41IDc2IDE5MS43IDk5LjIgMTY4LjMgMTI4IDE2OGwwLTRjMC0xMSA5LTIwIDIwLTIweiJdCiAgICB9OwogICAgZmFNb25leUNoZWNrQWx0ID0gZmFNb25leUNoZWNrRG9sbGFyOwogICAgZmFFeWVMb3dWaXNpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXllLWxvdy12aXNpb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsibG93LXZpc2lvbiJdLCAiZjJhOCIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtOTYuNC05Ni40YzIuNy0yLjQgNS40LTQuOCA4LTcuMiA0Ni44LTQzLjUgNzguMS05NS40IDkzLTEzMS4xIDMuMy03LjkgMy4zLTE2LjcgMC0yNC42LTE0LjktMzUuNy00Ni4yLTg3LjctOTMtMTMxLjEtNDcuMS00My43LTExMS44LTgwLjYtMTkyLjYtODAuNi01Ni44IDAtMTA1LjYgMTguMi0xNDYgNDQuMkw0MS0yNC45ek0yMDQuNSAxMzguN2MyMy41LTE2LjggNTIuNC0yNi43IDgzLjUtMjYuNyA3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NCAwIDMxLjEtOS45IDU5LjktMjYuNyA4My41bC0zNC43LTM0LjdjMTIuNy0yMS40IDE3LTQ3LjcgMTAuMS03My43LTEzLjctNTEuMi02Ni40LTgxLjYtMTE3LjYtNjcuOS04LjYgMi4zLTE2LjcgNS43LTI0IDEwbC0zNC43LTM0Ljd6TTg4IDE1Ny45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45TDMyOC4yIDQ2NmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMODggMTU3Ljl6TTQ1LjcgMjUxLjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlMMTgxLjkgNDU1LjVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQ1LjcgMjUxLjN6Il0KICAgIH07CiAgICBmYUxvd1Zpc2lvbiA9IGZhRXllTG93VmlzaW9uOwogICAgZmFDaXJjbGVBcnJvd1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1hcnJvdy11cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhcnJvdy1jaXJjbGUtdXAiXSwgImYwYWEiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0xNy0zNzdsODAgODBjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMzktMzkgMCAxNTAuMWMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE1MC4xLTM5IDM5Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDgwLTgwYzkuNC05LjQgMjQuNi05LjQgMzMuOSAweiJdCiAgICB9OwogICAgZmFBcnJvd0NpcmNsZVVwID0gZmFDaXJjbGVBcnJvd1VwOwogICAgZmFDYW1lcmFSZXRybyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYW1lcmEtcmV0cm8iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNDddLCAiZjA4MyIsICJNMCA0MTZsMC0yMDggMTM2LjIgMGMxMy41LTIwLjIgMzItMzYuOCA1My43LTQ4TDAgMTYwIDAgMTI1LjdjMC0zNS4zIDI4LjctNjQgNjQtNjRsLjEgMEM2NS4zIDQ1LjEgNzkuMSAzMiA5NiAzMmwzMiAwYzE2LjkgMCAzMC43IDEzLjEgMzEuOSAyOS43bDMyLjEgMCA1MS4yLTIzLjhjOC40LTMuOSAxNy42LTYgMjYuOS02TDQ0OCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0LTE5MCAwYzIxLjcgMTEuMiA0MC4yIDI3LjggNTMuNyA0OGwxMzYuMiAwIDAgMjA4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjR6TTI1NiAxOTJhOTYuMSA5Ni4xIDAgMSAwIDAgMTkyLjEgOTYuMSA5Ni4xIDAgMSAwIDAtMTkyLjF6Il0KICAgIH07CiAgICBmYUNhcHN1bGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcHN1bGVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0NmIiLCAiTTk2IDExMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMTEyLTk2IDAgMC0xMTJ6bS02NCAwbDAgMjg4YzAgNjEuOSA1MC4xIDExMiAxMTIgMTEyczExMi01MC4xIDExMi0xMTJsMC0xMDUuOCAxMTYuMyAxNjkuNWMzNS41IDUxLjcgMTA1LjMgNjQuMyAxNTYgMjguMXM2My0xMDcuNSAyNy41LTE1OS4yTDQyNy4zIDE0NS4zYy0zNS41LTUxLjctMTA1LjMtNjQuMy0xNTYtMjguMS01LjYgNC0xMC43IDguNC0xNS4zIDEzLjFsMC0xOC4zQzI1NiA1MC4xIDIwNS45IDAgMTQ0IDBTMzIgNTAuMSAzMiAxMTJ6TTI5Ni42IDI0MC4yYy0xNi0yMy4zLTEwLTU1LjMgMTEuOS03MSAyMS4yLTE1LjEgNTAuNS0xMC4zIDY2IDEyLjJsNjcgOTcuNi03OS45IDU1LjktNjUtOTQuOHoiXQogICAgfTsKICAgIGZhUG9vID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBvbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE2OV0sICJmMmZlIiwgIk0yNjguOSAuOWMtNS41LS43LTExIDEuNC0xNC41IDUuN3MtNC42IDEwLjEtMi44IDE1LjRjMi44IDguMiA0LjMgMTYuOSA0LjMgMjYuMSAwIDQ0LjEtMzUuNyA3OS45LTc5LjggODBMMTYwIDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjQgMCAxOS4xIDguNCAzNi4zIDIxLjcgNDhMMTA0IDI0MGMtMzkuOCAwLTcyIDMyLjItNzIgNzIgMCAyMy4yIDExIDQzLjggMjggNTctMzQuMSA1LjctNjAgMzUuMy02MCA3MSAwIDM5LjggMzIuMiA3MiA3MiA3MmwzNjggMGMzOS44IDAgNzItMzIuMiA3Mi03MiAwLTM1LjctMjUuOS02NS4zLTYwLTcxIDE3LTEzLjIgMjgtMzMuOCAyOC01NyAwLTM5LjgtMzIuMi03Mi03Mi03MmwtMTMuNyAwYzEzLjMtMTEuNyAyMS43LTI4LjkgMjEuNy00OCAwLTM1LjMtMjguNy02NC02NC02NGwtNS41IDBjMy41LTEwIDUuNS0yMC44IDUuNS0zMiAwLTQ4LjYtMzYuMi04OC44LTgzLjEtOTUuMXpNMTkyIDI1NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTk2IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTY0IDEwOC4zYzAgMi40LS43IDQuOC0yLjIgNi43LTguMiAxMC41LTM5LjUgNDUtOTMuOCA0NXMtODUuNi0zNC42LTkzLjgtNDVjLTEuNS0xLjktMi4yLTQuMy0yLjItNi43IDAtNi44IDUuNS0xMi4zIDEyLjMtMTIuM2wxNjcuNCAwYzYuOCAwIDEyLjMgNS41IDEyLjMgMTIuM3oiXQogICAgfTsKICAgIGZhRWxldmF0b3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWxldmF0b3IiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTE2ZCIsICJNMjkyLjctNC43bDY0IDY0YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwbDY0LTY0YzQuNi00LjYgNS45LTExLjUgMy41LTE3LjRTNDM4LjUtMzIgNDMyLTMyTDMwNC0zMmMtNi41IDAtMTIuMyAzLjktMTQuOCA5LjlzLTEuMSAxMi45IDMuNSAxNy40em0tMTYwLTIyLjZsLTY0IDY0Yy00LjYgNC42LTUuOSAxMS41LTMuNSAxNy40UzczLjUgNjQgODAgNjRsMTI4IDBjNi41IDAgMTIuMy0zLjkgMTQuOC05LjlzMS4xLTEyLjktMy41LTE3LjRsLTY0LTY0Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAxMjh6bTk2IDk2YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpNODAgNDAwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDY0IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNnptMTkyIDBjMC0yNi41IDIxLjUtNDggNDgtNDhsNjQgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2em0zMi0xMjhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXQogICAgfTsKICAgIGZhVGFnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk5MV0sICJmMDJiIiwgIk0zMi41IDk2bDAgMTQ5LjVjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNsMTkyIDE5MmMyNSAyNSA2NS41IDI1IDkwLjUgMEw0ODMuMiAzMzMuM2MyNS0yNSAyNS02NS41IDAtOTAuNWwtMTkyLTE5MkMyNzkuMiAzOC43IDI2MyAzMiAyNDYgMzJMOTYuNSAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjR6bTExMiAxNmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUZpbGVDaXJjbGVNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNpcmNsZS1taW51cyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGVkIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTU3NiA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTY0IDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0xMjggMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxMjggMGM4LjggMCAxNiA3LjIgMTYgMTZ6Il0KICAgIH07CiAgICBmYURvd25Mb25nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRvd24tbG9uZyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWyJsb25nLWFycm93LWFsdC1kb3duIl0sICJmMzA5IiwgIk0xMzcuNCA1MzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzMwMC45IDM1MiAyODggMzUybC02NCAwIDAtMzM2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zMiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDMzNi02NCAwYy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44Uy4yIDM5Ny41IDkuNCA0MDYuNmwxMjggMTI4eiJdCiAgICB9OwogICAgZmFMb25nQXJyb3dBbHREb3duID0gZmFEb3duTG9uZzsKICAgIGZhQ29tcGFjdERpc2MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tcGFjdC1kaXNjIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTkxLCAxMjgxOTIsIDEyODQ0MF0sICJmNTFmIiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNTYgMzJhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em0tOTYtMzJhOTYgOTYgMCAxIDAgMTkyIDAgOTYgOTYgMCAxIDAgLTE5MiAwem0tNTYtMTZjMC0zMi40IDE2LjMtNjYuNiA0Mi44LTkzLjJTMjA3LjYgMTA0IDI0MCAxMDRjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRjLTQ3LjkgMC05My43IDIzLjUtMTI3LjEgNTYuOVM1NiAxOTIuMSA1NiAyNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHoiXQogICAgfTsKICAgIGZhU3VpdGNhc2VSb2xsaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN1aXRjYXNlLXJvbGxpbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjVjMSIsICJNMTQ0IDI0YzAtNC40IDMuNi04IDgtOGw4MCAwYzQuNCAwIDggMy42IDggOGwwIDcyLTk2IDAgMC03MnpNMzIwIDk2bC0zMiAwIDAtNzJjMC0zMC45LTI1LjEtNTYtNTYtNTZsLTgwIDBDMTIxLjEtMzIgOTYtNi45IDk2IDI0bDAgNzItMzIgMEMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjQgMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwxMjggMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjg4YzAtMzUuMy0yOC43LTY0LTY0LTY0ek0xMjAgMjA4bDE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMCAxMjhsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFCb29rUXVyYW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9vay1xdXJhbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJxdXJhbiJdLCAiZjY4NyIsICJNNjQgNTEybDI4OCAwYzUzIDAgOTYtNDMgOTYtOTZsMC0zMjBjMC01My00My05Ni05Ni05Nkw0OCAwQzIxLjUgMCAwIDIxLjUgMCA0OEwwIDMzNmMwIDIwLjkgMTMuNCAzOC43IDMyIDQ1LjNMMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDB6TTM1MiAzODRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI1NiAwIDAtNjQgMjU2IDB6TTI3My4xIDE0NC40YzIuNS02LjEgMTEuMi02LjEgMTMuNyAwbDEwLjMgMjQuOCAyNi44IDIuMWM2LjYgLjUgOS4yIDguNyA0LjIgMTNMMzA3LjggMjAxLjkgMzE0IDIyOGMxLjUgNi40LTUuNSAxMS41LTExLjEgOC4xbC0yMi45LTE0LTIyLjkgMTRjLTUuNiAzLjQtMTIuNi0xLjYtMTEuMS04LjFsNi4yLTI2LjEtMjAuNC0xNy41Yy01LTQuMy0yLjMtMTIuNSA0LjItMTNsMjYuOC0yLjEgMTAuMy0yNC44ek0xMDAgMTkyYzAtNjguNSA1NS41LTEyNCAxMjQtMTI0IDIzLjggMCA0Ni4xIDYuNyA2NSAxOC40IDQuOCAyLjkgNi45IDguOCA1IDE0LjFzLTcuMSA4LjYtMTIuNyA4Yy0zLjEtLjMtNi4yLS41LTkuNC0uNS00Ni40IDAtODQgMzcuNi04NCA4NHMzNy42IDg0IDg0IDg0YzMuMiAwIDYuMy0uMiA5LjQtLjUgNS42LS42IDEwLjggMi43IDEyLjcgOHMtLjMgMTEuMi01IDE0LjFjLTE4LjkgMTEuNy00MS4yIDE4LjQtNjUgMTguNC02OC41IDAtMTI0LTU1LjUtMTI0LTEyNHoiXQogICAgfTsKICAgIGZhUXVyYW4gPSBmYUJvb2tRdXJhbjsKICAgIGZhUGhvbmVTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwaG9uZS1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmM2RkIiwgIk01MzUtMjQuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMNDEgNTM3LjFjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMMTQxLjUgMzY4LjZDODkuMiAzMTAuNSA1MS42IDIzOC44IDM0LjggMTU5LjQgMTguNyA4My4xIDczLjkgMjAuNiAxMzguNSAyLjlsNS41LTEuNWMxOS43LTUuNCA0MC4zIDQuNyA0OC4xIDIzLjVsNDAuNSA5Ny4zYzYuOSAxNi41IDIuMSAzNS42LTExLjggNDdsLTQ0LjEgMzYuMWMxMi45IDI4LjUgMjkuNiA1NC44IDQ5LjUgNzguNUw1MzUtMjQuOXptLTE1MC40IDUzNGMtNjMtMTMuNC0xMjEuMy0zOS44LTE3MS43LTc2LjNMMjk3LjggMzQ4YzEyLjIgOC4yIDI1IDE1LjYgMzguMyAyMi4yTDM3NC43IDMyM2MxMS4zLTEzLjkgMzAuNC0xOC42IDQ3LTExLjhMNTE5IDM1MS44YzE4LjggNy44IDI4LjkgMjguNCAyMy41IDQ4LjFsLTEuNSA1LjVjLTE3LjYgNjQuNi04MC4yIDExOS44LTE1Ni40IDEwMy43eiJdCiAgICB9OwogICAgZmFSb2FkQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9hZC1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU2NCIsICJNMjg4IDMybC03Ni4zIDBjLTI5LjQgMC01NS4xIDIwLjEtNjIuMSA0OC42TDY1LjQgNDIwLjVDNTcuOSA0NTAuNyA4MC44IDQ4MCAxMTIgNDgwbDIwOS40IDBjLTExLjItMjQuNC0xNy40LTUxLjQtMTcuNC04MCAwLTI4LjYgNi4yLTU1LjcgMTcuNC04MC0uNSAwLTEgMC0xLjUgMC0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA0OWMzNS4yLTM5LjkgODYuNy02NSAxNDQtNjUgOSAwIDE3LjggLjYgMjYuNSAxLjhsLTMyLTEyOS4yQzQ4My40IDUyLjEgNDU3LjggMzIgNDI4LjMgMzJsLTc2LjQgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6TTY0MCA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdCiAgICB9OwogICAgZmFTaG9wTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaG9wLWxvY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRhNSIsICJNMjEuNSAxODEuMUw3OC4zIDY3LjRDODkuMiA0NS43IDExMS4zIDMyIDEzNS42IDMybDMwNC45IDBjMjQuMiAwIDQ2LjQgMTMuNyA1Ny4yIDM1LjRsNTUuNiAxMTEuMWMtOC4yLTEuNi0xNi42LTIuNS0yNS4yLTIuNS01My43IDAtOTkuNyAzMy4xLTExOC43IDgwbC01Ny4zIDAgMCAxNzZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE5MiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE3Ni4xYy0yNi44LTEuOS00OC0yNC4zLTQ4LTUxLjYgMC04IDEuOS0xNiA1LjUtMjMuMnpNMTI4IDI1NmwwIDExMmMwIDguOCA3LjIgMTYgMTYgMTZsMTI4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTEyLTE2MCAwem00MzIgNDguMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTQxNiA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il0KICAgIH07CiAgICBmYUltYWdlUG9ydHJhaXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaW1hZ2UtcG9ydHJhaXQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsicG9ydHJhaXQiXSwgImYzZTAiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHpNODAgMzY4YzAgOC44IDcuMiAxNiAxNiAxNmwxOTIgMGM4LjggMCAxNi03LjIgMTYtMTYgMC00NC4yLTM1LjgtODAtODAtODBsLTY0IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwek0xOTIgMjQ4YTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyeiJdCiAgICB9OwogICAgZmFQb3J0cmFpdCA9IGZhSW1hZ2VQb3J0cmFpdDsKICAgIGZhQnJpZGdlTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmlkZ2UtbG9jayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGNjIiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDQ0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04IDAgMCAzMi4yYzEzLjggLjYgMjcuMiAyLjggNDAgNi40bDAgNTAuN2MtMTQuOC02LTMxLTkuMy00OC05LjMtNzAuNyAwLTEyOCA1Ny4zLTEyOCAxMjhsMCAyNC40Yy0uNCAuMy0uNyAuNi0xLjEgMS0xNy4zLTI1LTQ2LjItNDEuMy03OC45LTQxLjMtNTMgMC05NiA0My05NiA5NmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk0YzAtMzguOC0yNi40LTcyLjYtNjQtODJsMC0xMTIgNDAgMCAwLTY0LTggMEMxNC4zIDk2IDAgODEuNyAwIDY0em00MjQgNjguNmwwLTM2LjYtODAgMCAwIDY0IDE4LjggMGMxOC4yLTEyLjggMzguOS0yMi4yIDYxLjItMjcuNHpNMjE2IDk2bDAgNjQgODAgMCAwLTY0LTgwIDB6bS00OCAwbC04MCAwIDAgNjQgODAgMCAwLTY0ek00OTYgMzA0LjFjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45ek0zNTIgNDAwYzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2eiJdCiAgICB9OwogICAgZmFIYW1tZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFtbWVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4Mjk2XSwgImY2ZTMiLCAiTTI0Ni45IDE4LjNMMjcxIDMuOGMyMS42LTEzIDQ2LjMtMTkuOCA3MS41LTE5LjggMzYuOCAwIDcyLjIgMTQuNiA5OC4yIDQwLjdsNjMuOSA2My45YzE1IDE1IDIzLjQgMzUuNCAyMy40IDU2LjZsMCAzMC45IDE5LjcgMTkuNyAwIDBjMTUuNi0xNS42IDQwLjktMTUuNiA1Ni42IDBzMTUuNiA0MC45IDAgNTYuNmwtNjQgNjRjLTE1LjYgMTUuNi00MC45IDE1LjYtNTYuNiAwcy0xNS42LTQwLjkgMC01Ni42TDQ2NCAyNDAgNDMzLjEgMjQwYy0yMS4yIDAtNDEuNi04LjQtNTYuNi0yMy40bC00OS4xLTQ5LjFjLTE1LTE1LTIzLjQtMzUuNC0yMy40LTU2LjZsMC0xMi43YzAtMTEuMi01LjktMjEuNy0xNS41LTI3LjRsLTQxLjYtMjVjLTEwLjQtNi4yLTEwLjQtMjEuMiAwLTI3LjR6TTUwLjcgNDAyLjdsMjIyLjEtMjIyLjEgOTAuNSA5MC41LTIyMi4xIDIyMi4xYy0yNSAyNS02NS41IDI1LTkwLjUgMHMtMjUtNjUuNSAwLTkwLjV6Il0KICAgIH07CiAgICBmYUFycm93VXAxOSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC0xLTkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic29ydC1udW1lcmljLXVwIl0sICJmMTYzIiwgIk0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZ6TTQxOC43IDM4Yy04LjMtNi0xOS4xLTcuNy0yOC44LTQuNGwtNDggMTZjLTE2LjggNS42LTI1LjggMjMuNy0yMC4yIDQwLjVzMjMuNyAyNS44IDQwLjUgMjAuMmw1LjktMiAwIDUxLjYtMTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNiAwIDAtOTZjMC0xMC4zLTQuOS0xOS45LTEzLjMtMjZ6TTM2NS4xIDQzMC42Yy05LjYgMTQuOC01LjQgMzQuNiA5LjQgNDQuM3MzNC42IDUuNCA0NC4zLTkuNGw0Mi4xLTY0LjljMTIuNC0xOS4yIDE5LjEtNDEuNiAxOS4xLTY0LjUgMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCAzNi4xIDIzLjkgNjYuNyA1Ni44IDc2LjZsLTExLjcgMTh6TTM3NiAzMzZhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhU29ydE51bWVyaWNVcCA9IGZhQXJyb3dVcDE5OwogICAgZmFDaGVzc0tuaWdodDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlc3Mta25pZ2h0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTgyMl0sICJmNDQxIiwgIk0xOTItMzJjMTA2IDAgMTkyIDg2IDE5MiAxOTJsMCAxMzMuNWMwIDE3LTYuOCAzMy4yLTE4LjcgNDUuMkwzMjAgMzg0IDM3MC44IDQzNC43YzguNSA4LjUgMTMuMiAyMCAxMy4yIDMyIDAgMjUtMjAuMyA0NS4yLTQ1LjIgNDUuM0w0NS4zIDUxMmMtMjUgMC00NS4yLTIwLjMtNDUuMi00NS4zIDAtMTIgNC44LTIzLjUgMTMuMi0zMkw2NCAzODQgNjQgMzQ5LjRjMC0xOC43IDguMi0zNi40IDIyLjMtNDguNmw4OS43LTc2LjgtNDggMC0xMi4xIDEyLjFjLTEyLjcgMTIuNy0zMCAxOS45LTQ4IDE5LjktMzcuNSAwLTY3LjktMzAuNC02Ny45LTY3LjlsMC04LjdjMC0yMi44IDguMi00NC45IDIzLjEtNjIuM0w5NiAzMiA5NiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDB6TTE2MCA3MmEyNCAyNCAwIDEgMCAwIDQ4IDI0IDI0IDAgMSAwIDAtNDh6Il0KICAgIH07CiAgICBmYUhvdXNlRmxvb2RXYXRlckNpcmNsZUFycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtZmxvb2Qtd2F0ZXItY2lyY2xlLWFycm93LXJpZ2h0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MGYiLCAiTTI4OC41IDExMmExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwek0xNDEuMiA0NC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDU2IDU2YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC01NiA1NmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwyOC43LTI4LjctODkuNCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDg5LjQgMC0yOC43LTI4LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42ek0zMzYuNSAxMTJjMCA3MS4xLTM4LjYgMTMzLjEtOTYgMTY2LjNsMCAxMi44YzIyLjEgNC41IDQzLjQgMTMuOSA2Mi40IDI4LjIgMjIuMSAxNi42IDI5LjEgMTYuNiA1MS4yIDAgMjcuNS0yMC43IDU5LjktMzEuMiA5Mi40LTMxLjQgMzMuMS0uMiA2Ni4zIDEwLjIgOTQuNCAzMS40IDYuOSA1LjIgMTIuOCA5IDE4IDExLjcgLjYgLjMgMS4yIC42IDEuOCAxIDQuMiAyLjMgOC41IDQuNiAxMi42IDEuNSA2LTQuNSAxMi42LTggMTkuMy0xMC40bDAtMTE1LjIgNC41IDBjMTUuMiAwIDI3LjUtMTIuMyAyNy41LTI3LjUgMC03LjktMy40LTE1LjUtOS40LTIwLjdMNDQ0LjUgMTAuNUM0MzYuOCAzLjcgNDI2LjggMCA0MTYuNSAwcy0yMC4zIDMuNy0yOCAxMC41TDMyOS45IDYxLjhjNC4zIDE2IDYuNiAzMi44IDYuNiA1MC4yem0zMiA4OGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDh6TTQ3NS4xIDQxMi4xYzE5IDE0LjQgNDEuOSAyOC4yIDY3LjIgMzMuMyAyNi41IDUuNCA1NC4zIC44IDgwLjctMTkuMSAxMC42LTggMTIuNy0yMyA0LjctMzMuNnMtMjMtMTIuNy0zMy42LTQuN2MtMTQuOSAxMS4yLTI4LjYgMTMuMS00Mi4zIDEwLjMtMTQuOS0zLTMwLjktMTEuOS00Ny44LTI0LjYtMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM1MyOTAgMzkxLjggMjY2IDM3My43Yy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjEuNiAxNi4zLTQxLjMgMjUuOC01OC45IDI1LjctOS42LS4xLTE5LjktMy0zMS4yLTExLjUtMTAuNi04LTI1LjYtNS45LTMzLjYgNC43cy01LjkgMjUuNiA0LjcgMzMuNmMxOS4xIDE0LjQgMzkuNCAyMSA1OS44IDIxLjEgMzMuOSAuMiA2NC4zLTE3LjQgODguMS0zNS4zIDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1LjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDB6bS03MS4yIDk2YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDE5IDE0LjQgNDEuOSAyOC4yIDY3LjIgMzMuMyAyNi41IDUuNCA1NC4zIC44IDgwLjctMTkuMSAxMC42LTggMTIuNy0yMyA0LjctMzMuNnMtMjMtMTIuNy0zMy42LTQuN2MtMTQuOSAxMS4yLTI4LjYgMTMuMS00Mi4zIDEwLjMtMTQuOS0zLTMwLjktMTEuOS00Ny44LTI0LjYtMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM1MyOTAgNDg3LjggMjY2IDQ2OS43Yy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjEuNiAxNi4zLTQxLjMgMjUuOC01OC45IDI1LjctOS42LS4xLTE5LjktMy0zMS4yLTExLjUtMTAuNi04LTI1LjYtNS45LTMzLjYgNC43cy01LjkgMjUuNiA0LjcgMzMuNmMxOS4xIDE0LjQgMzkuNCAyMSA1OS44IDIxLjEgMzMuOSAuMiA2NC4zLTE3LjQgODguMS0zNS4zIDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1Ljl6Il0KICAgIH07CiAgICBmYUFycm93VXBSaWdodEZyb21TcXVhcmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtcmlnaHQtZnJvbS1zcXVhcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZXh0ZXJuYWwtbGluayJdLCAiZjA4ZSIsICJNMzIwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsODIuNyAwLTIwMS40IDIwMS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDQ0OCAxMDkuMyA0NDggMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC0xNy43LTE0LjMtMzItMzItMzJMMzIwIDB6TTgwIDk2QzM1LjggOTYgMCAxMzEuOCAwIDE3NkwwIDQzMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGwyNTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTgwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2TDgwIDQ0OGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmw4MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDgwIDk2eiJdCiAgICB9OwogICAgZmFFeHRlcm5hbExpbmsgPSBmYUFycm93VXBSaWdodEZyb21TcXVhcmU7CiAgICBmYUFycm93RG93blVwQWNyb3NzTGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLXVwLWFjcm9zcy1saW5lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YWYiLCAiTTI2NS40IDEwNS40bDk2LTk2YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDk2IDk2YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC00MS40LTQxLjQgMCAxMTQuNyA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMjAgMCAwIDExNC43IDQxLjQtNDEuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC05NiA5NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTk2LTk2Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDQwMi43IDk2IDI4OCAzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIwIDAgMC0xMTQuNy00MS40IDQxLjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zek00MTYgMzM2bDAgMTQ0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTQ0IDY0IDB6TTk2IDE3Nkw5NiAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTQ0LTY0IDB6Il0KICAgIH07CiAgICBmYUZhY2VHcmluQmVhbTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLWJlYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTYsICJncmluLWJlYW0iXSwgImY1ODIiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0zODYuNyAzMDguOWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtMjIuNCA2MS4zLTgxLjMgMTA1LjEtMTUwLjMgMTA1LjFTMTI4LjEgMzg4LjIgMTA1LjcgMzI2LjljLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMXpNMTc2IDE4MGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHptMTMyIDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6Il0KICAgIH07CiAgICBmYUdyaW5CZWFtMiA9IGZhRmFjZUdyaW5CZWFtMjsKICAgIGZhUmVjdGFuZ2xlQWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVjdGFuZ2xlLWFkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFkIl0sICJmNjQxIiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNNDE2IDE4NGwwIDE0NGMwIDEzLjMtMTAuNyAyNC0yNCAyNC03LjEgMC0xMy41LTMuMS0xNy45LTgtMTAuMiA1LjEtMjEuOCA4LTM0LjEgOC00MiAwLTc2LTM0LTc2LTc2czM0LTc2IDc2LTc2YzkuOSAwIDE5LjMgMS45IDI4IDUuM2wwLTIxLjNjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHptLTQ4IDkyYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6TTE2MCAyMDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyIDQ4IDAgMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDB6bTMyIDk2bC00OCAwIDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMDRjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEwNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTI0eiJdCiAgICB9OwogICAgZmFBZCA9IGZhUmVjdGFuZ2xlQWQ7CiAgICBmYUJvb2tUYW5ha2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9vay10YW5ha2giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidGFuYWtoIl0sICJmODI3IiwgIk0zNTIgNTEyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwwLTY2LjdDMTMuNCAzNzQuNyAwIDM1Ni45IDAgMzM2TDAgNDhDMCAyMS41IDIxLjUgMCA0OCAwTDM1MiAwYzUzIDAgOTYgNDMgOTYgOTZsMCAzMjBjMCA1My00MyA5Ni05NiA5NnptMzItOTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTI1NiAwIDAgNjQgMjU2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6TTExMy45IDIyOWMtMS4yIDItMS45IDQuMi0xLjkgNi42IDAgNi45IDUuNiAxMi41IDEyLjUgMTIuNWw1Ni45IDAgMzAuNSA0OS4yYzIuNiA0LjIgNy4yIDYuOCAxMi4yIDYuOHM5LjYtMi42IDEyLjItNi44bDMwLjUtNDkuMiA1Ni45IDBjNi45IDAgMTIuNS01LjYgMTIuNS0xMi41IDAtMi4zLS42LTQuNi0xLjktNi42bC0yNy44LTQ1IDI3LjgtNDVjMS4yLTIgMS45LTQuMiAxLjktNi42IDAtNi45LTUuNi0xMi41LTEyLjUtMTIuNWwtNTYuOSAwLTMwLjUtNDkuMkMyMzMuNiA2Ni42IDIyOSA2NCAyMjQgNjRzLTkuNiAyLjYtMTIuMiA2LjhsLTMwLjUgNDkuMi01Ni45IDBjLTYuOSAwLTEyLjUgNS42LTEyLjUgMTIuNSAwIDIuMyAuNiA0LjYgMS45IDYuNmwyNy44IDQ1LTI3LjggNDV6Il0KICAgIH07CiAgICBmYVRhbmFraCA9IGZhQm9va1RhbmFraDsKICAgIGZhSG90VHViUGVyc29uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdC10dWItcGVyc29uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImhvdC10dWIiXSwgImY1OTMiLCAiTTI0MCA0MGMwIDEzLjYgNS44IDI2LjUgMTUuOCAzNS42bDI2LjUgMjMuOGMyNCAyMS42IDM3LjcgNTIuMyAzNy43IDg0LjYgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xOC43LTcuOS0zNi40LTIxLjgtNDguOWwtMjYuNS0yMy44QzIwMy41IDkzLjEgMTkyIDY3LjIgMTkyIDQwIDE5MiAyNi43IDIwMi43IDE2IDIxNiAxNnMyNCAxMC43IDI0IDI0ek0wIDMzNmwwLTgwYzAtMzUuMyAyOC43LTY0IDY0LTY0bDE5LjcgMGM4LjEgMCAxNi4yIDEuNiAyMy44IDQuNmwxMzcuMSA1NC44YzcuNiAzIDE1LjYgNC42IDIzLjggNC42TDM4NCAyNTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDMzNnptOTYtMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTgwYzAtMTMuMy0xMC43LTI0LTI0LTI0em0xNTIgMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODB6bTEwNC0yNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTMyOCAxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNCAwIDEzLjYgNS44IDI2LjUgMTUuOCAzNS42bDI2LjUgMjMuOGMyNCAyMS42IDM3LjcgNTIuMyAzNy43IDg0LjYgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xOC43LTcuOS0zNi40LTIxLjgtNDguOWwtMjYuNS0yMy44QzMxNS41IDkzLjEgMzA0IDY3LjIgMzA0IDQwIDMwNCAyNi43IDMxNC43IDE2IDMyOCAxNnpNNjQgNDBhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6Il0KICAgIH07CiAgICBmYUhvdFR1YiA9IGZhSG90VHViUGVyc29uOwogICAgZmFGaWxlSGFsZkRhc2hlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWhhbGYtZGFzaGVkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU2OTgiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0bDAgMjU2IDM4NCAwIDAtMTQ5LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjU4LjcgMTguN0MyNDYuNyA2LjcgMjMwLjUgMCAyMTMuNSAwTDY0IDB6TTMyNS41IDE3NkwyMzIgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyMDggNTguNSAzMjUuNSAxNzZ6TTAgMzUybDAgNjQgNjQgMCAwLTY0LTY0IDB6TTY0IDUxMmwwLTY0LTY0IDBjMCAzNS4zIDI4LjcgNjQgNjQgNjR6bTMyIDBsODAgMCAwLTY0LTgwIDAgMCA2NHptMTEyIDBsODAgMCAwLTY0LTgwIDAgMCA2NHptMTEyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsLTY0IDAgMCA2NHptNjQtMTYwbC02NCAwIDAgNjQgNjQgMCAwLTY0eiJdCiAgICB9OwogICAgZmFPdXRkZW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm91dGRlbnQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZGVkZW50Il0sICJmMDNiIiwgIk0uNCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzg0IDBDMTQuOCA5NiAuNCA4MS43IC40IDY0em0xOTIgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTMyIDk2bDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpNLjQgNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zODQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TS43IDI2OC42Yy04LjItNi40LTguMi0xOC45IDAtMjUuM2wxMDEuOS03OS4zYzEwLjUtOC4yIDI1LjgtLjcgMjUuOCAxMi42bDAgMTU4LjZjMCAxMy4zLTE1LjMgMjAuOC0yNS44IDEyLjZMLjcgMjY4LjZ6Il0KICAgIH07CiAgICBmYURlZGVudCA9IGZhT3V0ZGVudDsKICAgIGZhSGFuZFBlYWNlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBlYWNlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTk5Nl0sICJmMjViIiwgIk0xOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDIwOC02NCAwIDAtMjA4YzAtMTcuNyAxNC4zLTMyIDMyLTMyem05NiAxNjBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyem02NCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHpNNjEuMyA1MS4yTDE0My45IDI0MCA3NC4xIDI0MCAyLjcgNzYuOEMtNC40IDYwLjYgMyA0MS44IDE5LjIgMzQuN1M1NC4yIDM1IDYxLjMgNTEuMnptMjcgMjIxLjNsLS4yLS41IDk1LjkgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MGwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw1NiAwYzM5LjggMCA3Mi0zMi4yIDcyLTcybDAtLjZjOS40IDUuNCAyMC4zIDguNiAzMiA4LjYgMTMuMiAwIDI1LjQtNCAzNS42LTEwLjggOC43IDI0LjkgMzIuNSA0Mi44IDYwLjQgNDIuOCAxMS43IDAgMjIuNi0zLjEgMzItOC42bDAgOC42YzAgODguNC03MS42IDE2MC0xNjAgMTYwbC02MS43IDBjLTQyLjQgMC04My4xLTE2LjktMTEzLjEtNDYuOUw2OS41IDQ1My41QzQ1LjUgNDI5LjUgMzIgMzk2LjkgMzIgMzYzbDAtMjdjMC0zMi43IDI0LjYtNTkuNyA1Ni4zLTYzLjV6Il0KICAgIH07CiAgICBmYUhlYWRTaWRlVmlydXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhZC1zaWRlLXZpcnVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwNjQiLCAiTTMyOS43IDQ0OGMtNS4xIDAtOS43IDMuNy05LjcgOC44bDAgNy4yYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xNjAgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC02My42YzAtMTIuNi01LjEtMjQuNS0xMy4xLTM0LjItMzEuOC0zOC43LTUwLjktODguMi01MC45LTE0Mi4yIDAtMTIzLjcgMTAwLjMtMjI0IDIyNC0yMjQgMTEyLjcgMCAyMDYgODMuMyAyMjEuNyAxOTEuNyAuNCAzIDEuNyA1LjkgMy42IDguM2wzNS44IDQyLjljNyA4LjQgMTAuOSAxOS4xIDEwLjkgMzAuMSAwIDI1LjktMjEgNDctNDcgNDdsLTEgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTM4LjMgMHpNMjI0IDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNCAwIDIyLjktMjcuNyAzNC40LTQzLjkgMTguMi05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45YzE2LjIgMTYuMiA0LjcgNDMuOS0xOC4yIDQzLjktMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGMyMi45IDAgMzQuNCAyNy43IDE4LjIgNDMuOS05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBjMTYuMi0xNi4yIDQzLjktNC43IDQzLjkgMTguMiAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMjIuOSAyNy43LTM0LjQgNDMuOS0xOC4yIDkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWMtMTYuMi0xNi4yLTQuNy00My45IDE4LjItNDMuOSAxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGMtMjIuOSAwLTM0LjQtMjcuNy0xOC4yLTQzLjkgOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGMtMTYuMiAxNi4yLTQzLjkgNC43LTQzLjktMTguMiAwLTEzLjMtMTAuNy0yNC0yNC0yNHptLTMyIDg4YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptNDAgODhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhQ29tcGFzczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tcGFzcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTUxN10sICJmMTRlIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptNTAuNy0xODYuOUwxNjIuNCAzODAuNmMtMTkuNCA3LjUtMzguNS0xMS42LTMxLTMxbDU1LjUtMTQ0LjNjMy4zLTguNSA5LjktMTUuMSAxOC40LTE4LjRsMTQ0LjMtNTUuNWMxOS40LTcuNSAzOC41IDExLjYgMzEgMzFMMzI1LjEgMzA2LjdjLTMuMiA4LjUtOS45IDE1LjEtMTguNCAxOC40ek0yODggMjU2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYVBlbk5pYiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW4tbmliIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTAwMDFdLCAiZjVhZCIsICJNMzY4LjUgMTguM2wtNTAuMSA1MC4xIDEyNS4zIDEyNS4zIDUwLjEtNTAuMWMyMS45LTIxLjkgMjEuOS01Ny4zIDAtNzkuMkw0NDcuNyAxOC4zYy0yMS45LTIxLjktNTcuMy0yMS45LTc5LjIgMHpNMjc5LjMgOTcuMmwtLjUgLjEtMTQ0LjEgNDMuMmMtMTkuOSA2LTM1LjcgMjEuMi00Mi4zIDQxTDMuOCA0NDUuOGMtMi45IDguNy0xLjkgMTguMiAyLjUgMjZMMTYxLjcgMzE2LjRjLTEuMS00LTEuNi04LjEtMS42LTEyLjQgMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OC0yMS41IDQ4LTQ4IDQ4Yy00LjMgMC04LjUtLjYtMTIuNC0xLjZMNDAuMyA1MDUuN2M3LjggNC40IDE3LjIgNS40IDI2IDIuNWwyNjQuMy04OC42YzE5LjctNi42IDM1LTIyLjQgNDEtNDIuM2w0My4yLTE0NC4xIC4xLS41LTEzNS41LTEzNS41eiJdCiAgICB9OwogICAgZmFUZW50QXJyb3dzRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW50LWFycm93cy1kb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1ODEiLCAiTTE4NS41IDEyMWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0zMSAzMSAwLTEwMi4xYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTAyLjEtMzEtMzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNzItNzJ6bTI0OCA3Mmw3Mi03MmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0zMSAzMSAwLTEwMi4xYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTAyLjEtMzEtMzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDB6TTYwLjMgMjkyLjZMMzcuMSA0NzZjLTIuNCAxOS4xIDEyLjUgMzYgMzEuNyAzNmwxNTQuNSAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTE3LjRjMC01LjkgNC43LTEwLjYgMTAuNi0xMC42IDQgMCA3LjcgMi4zIDkuNSA1LjlsNjguMiAxMzYuNWM1LjQgMTAuOCAxNi41IDE3LjcgMjguNiAxNy43bDcxLjkgMGMxOS4zIDAgMzQuMi0xNi45IDMxLjctMzZMNDUyLjcgMjkyLjdjLTEuMi05LjctNi45LTE4LjQtMTUuMy0yMy40TDI3MS45IDE2OS45Yy0xMC4yLTYuMS0yMi45LTYuMS0zMy4xIC4xTDc1LjQgMjY5LjNjLTguMyA1LjEtMTMuOSAxMy43LTE1LjEgMjMuM3oiXQogICAgfTsKICAgIGZhRm9yd2FyZEZhc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9yd2FyZC1mYXN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTE5NywgImZhc3QtZm9yd2FyZCJdLCAiZjA1MCIsICJNMTkuOCA0NzcuNmMxMiA1IDI1LjcgMi4yIDM0LjktNi45TDIyNCAzMDEuMyAyMjQgNDQ4YzAgMTIuOSA3LjggMjQuNiAxOS44IDI5LjZzMjUuNyAyLjIgMzQuOS02LjlMNDQ4IDMwMS4zIDQ0OCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE0Ni43LTE2OS40LTE2OS40Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOVMyMjQgNTEuMSAyMjQgNjRMMjI0IDIxMC43IDU0LjYgNDEuNGMtOS4yLTkuMi0yMi45LTExLjktMzQuOS02LjlTMCA1MS4xIDAgNjRMMCA0NDhjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnoiXQogICAgfTsKICAgIGZhRmFzdEZvcndhcmQgPSBmYUZvcndhcmRGYXN0OwogICAgZmFDcm9wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNyb3AiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjEyNSIsICJNNDQ4IDEwOS4zbDU0LjYtNTQuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEw0MDIuNyA2NCAxNzYgNjQgMTc2IDEyOCAzMzguNyAxMjggMTI4IDMzOC43IDEyOCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCAxNC4zIDY0IDMybDAgMzItMzIgMEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJsMzIgMCAwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMDggMCAwLTY0LTE2Mi43IDAgMjEwLjctMjEwLjcgMCAzMDYuN2MwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTI3NC43eiJdCiAgICB9OwogICAgZmFXaGlza2V5R2xhc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2hpc2tleS1nbGFzcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyOTM0NywgImdsYXNzLXdoaXNrZXkiXSwgImY3YTAiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCAzNTJjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhsMTkyIDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhsMC0yODhjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMzJ6TTY0IDI1NmwwLTE2MCAzMjAgMCAwIDE2MC0zMjAgMHoiXQogICAgfTsKICAgIGZhR2xhc3NXaGlza2V5ID0gZmFXaGlza2V5R2xhc3M7CiAgICBmYVNxdWFyZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTYzMiwgOTcyMywgOTcyNCwgNjE1OTBdLCAiZjBjOCIsICJNNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMyeiJdCiAgICB9OwogICAgZmFGYWNlR3JpbjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTEyLCAiZ3JpbiJdLCAiZjU4MCIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4Ni43IDMwOC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSAzODguMiAxMDUuNyAzMjYuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUdyaW4yID0gZmFGYWNlR3JpbjI7CiAgICBmYUZpbGVDb250cmFjdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWNvbnRyYWN0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1NmMiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek04OCA2NEM3NC43IDY0IDY0IDc0LjcgNjQgODhzMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDg4IDY0em0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6bTcwLjMgMTYwYy0xMS4zIDAtMjEuOSA1LjEtMjguOSAxMy45TDY5LjMgNDA5Yy04LjMgMTAuMy02LjYgMjUuNSAzLjcgMzMuN3MyNS41IDYuNiAzMy43LTMuOGw0Ny4xLTU4LjggMTUuMiA1MC43YzMgMTAuMiAxMi40IDE3LjEgMjMgMTcuMWwxMDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODYuMSAwLTE2LjEtNTMuNmMtNC43LTE1LjctMTkuMS0yNi40LTM1LjUtMjYuNHoiXQogICAgfTsKICAgIGZhQW5nbGVVcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmdsZS11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzg5NjNdLCAiZjEwNiIsICJNMTY5LjQgMTM3LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwxOTIgMjA1LjMgNTQuNiAzNDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTYwLTE2MHoiXQogICAgfTsKICAgIGZhRmFjZVNtaWxlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXNtaWxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTc4LCAic21pbGUiXSwgImYxMTgiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjUuNCAzMjEuOWMyMC40IDI4IDUzLjQgNDYuMSA5MC42IDQ2LjFzNzAuMi0xOC4xIDkwLjYtNDYuMWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjNzMTMuMSAyMi44IDUuMyAzMy41QzM1Ni4zIDM5MCAzMDkuMiA0MTYgMjU2IDQxNnMtMTAwLjMtMjYtMTI5LjQtNjUuOWMtNy44LTEwLjctNS40LTI1LjcgNS4zLTMzLjVzMjUuNy01LjQgMzMuNSA1LjN6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhU21pbGUyID0gZmFGYWNlU21pbGUyOwogICAgZmFQZXJzb25EcmVzc0J1cnN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1kcmVzcy1idXJzdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTQ0IiwgIk0yMDggNDAuMWMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjR6TTggMTQ0LjFjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTkyLjUgMTQxLjRsMzMuOS0zMy45YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMNjYuNiAyNTEuNmMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwek02Ni42IDIuN2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsMzMuOSAzMy45YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUwxMDAuNSAyLjdDOTEuMS02LjcgNzYtNi43IDY2LjYgMi43ek0zNTIgODBhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTI0Ni4yIDM4NGwyNS44IDAgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAzMiAwIDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjggMjUuOCAwYzEwLjkgMCAxOC42LTEwLjcgMTUuMi0yMS4xbC00My0xMjkgNDguMyA2NS4xYzEwLjUgMTQuMiAzMC42IDE3LjIgNDQuOCA2LjZzMTcuMi0zMC42IDYuNi00NC44bC03MC41LTk1QzQzNCAxMzIgMzk0LjMgMTEyIDM1MiAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNmw0OC4zLTY1LjEtNDMgMTI5Yy0zLjUgMTAuNCA0LjMgMjEuMSAxNS4yIDIxLjF6Il0KICAgIH07CiAgICBmYURpdmlkZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaXZpZGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMDEzNSwgMjQ3XSwgImY1MjkiLCAiTTIyNCA0OGE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMCAyNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTY4IDQwOGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6Il0KICAgIH07CiAgICBmYUNvZGVGb3JrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvZGUtZm9yayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMTNiIiwgIk04MCAxMDRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em04MC0yNGMwIDMyLjgtMTkuNyA2MS00OCA3My4zbDAgMjIuN2MwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIyLjdjLTI4LjMtMTIuMy00OC00MC41LTQ4LTczLjMgMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDMyLjgtMTkuNyA2MS00OCA3My4zbDAgMjIuN2MwIDYxLjktNTAuMSAxMTItMTEyIDExMmwtMzIgMCAwIDcwLjdjMjguMyAxMi4zIDQ4IDQwLjUgNDggNzMuMyAwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTMyLjggMTkuNy02MSA0OC03My4zbDAtNzAuNy0zMiAwQzk4LjEgMjg4IDQ4IDIzNy45IDQ4IDE3NmwwLTIyLjdDMTkuNyAxNDEgMCAxMTIuOCAwIDgwIDAgMzUuOCAzNS44IDAgODAgMHM4MCAzNS44IDgwIDgwem0yMDggMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4ek0yNDggNDMyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYUhvdXNlRmxhZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1mbGFnIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MGQiLCAiTTQ3MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDI4OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTQ0OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMjgzLjUgNTkuMWwxMDAuNSA5Ni45IDAgMzU2LTI1NiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE0NC0xOS45IDBjLTE1LjUgMC0yOC4xLTEyLjYtMjguMS0yOC4xIDAtNy42IDMuMS0xNC45IDguNi0yMC4yTDIyOC41IDU5LjFDMjM1LjkgNTIgMjQ1LjcgNDggMjU2IDQ4czIwLjEgNCAyNy41IDExLjF6TTIzMiAyNTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC00OCAweiJdCiAgICB9OwogICAgZmFCdWlsZGluZ0NvbHVtbnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctY29sdW1ucyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJiYW5rIiwgImluc3RpdHV0aW9uIiwgIm11c2V1bSIsICJ1bml2ZXJzaXR5Il0sICJmMTljIiwgIk0yNzEuOSAyMC4yYy05LjgtNS42LTIxLjktNS42LTMxLjggMGwtMjI0IDEyOGMtMTIuNiA3LjItMTguOCAyMi0xNS4xIDM2UzE3LjUgMjA4IDMyIDIwOGwzMiAwIDAgMjA4IDAgMC01MS4yIDM4LjRDNC43IDQ2MC40IDAgNDY5LjkgMCA0ODAgMCA0OTcuNyAxNC4zIDUxMiAzMiA1MTJsNDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzIgMC0xMC4xLTQuNy0xOS42LTEyLjgtMjUuNmwtNTEuMi0zOC40IDAtMjA4IDMyIDBjMTQuNSAwIDI3LjItOS44IDMwLjktMjMuOHMtMi41LTI4LjgtMTUuMS0zNmwtMjI0LTEyOHpNNDAwIDIwOGwwIDIwOC02NCAwIDAtMjA4IDY0IDB6bS0xMTIgMGwwIDIwOC02NCAwIDAtMjA4IDY0IDB6bS0xMTIgMGwwIDIwOC02NCAwIDAtMjA4IDY0IDB6TTI1NiA5NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUJhbmsgPSBmYUJ1aWxkaW5nQ29sdW1uczsKICAgIGZhSW5zdGl0dXRpb24gPSBmYUJ1aWxkaW5nQ29sdW1uczsKICAgIGZhTXVzZXVtID0gZmFCdWlsZGluZ0NvbHVtbnM7CiAgICBmYVVuaXZlcnNpdHkgPSBmYUJ1aWxkaW5nQ29sdW1uczsKICAgIGZhUnVnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJ1ZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTY5IiwgIk0yNCA2NGw1NiAwIDAgMzg0LTU2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOCAwIDAtNDAtOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDggMCAwLTMyLTggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC0zMi04IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOCAwIDAtNDAtOCAwQzEwLjcgMTEyIDAgMTAxLjMgMCA4OFMxMC43IDY0IDI0IDY0em0xMDQgMGwzMjAgMCAwIDM4NC0zMjAgMCAwLTM4NHpNNTc2IDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0bC04IDAgMCA0MCA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMCAwIDMyIDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOCAwIDAgMzIgOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04IDAgMCA0MCA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTU2IDAgMC0zODQgNTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhQ29kZU1lcmdlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvZGUtbWVyZ2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM4NyIsICJNODAgNTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0zMi40IDk3LjJjMjgtMTIuNCA0Ny42LTQwLjUgNDcuNi03My4yIDAtNDQuMi0zNS44LTgwLTgwLTgwUzAgMzUuOCAwIDgwYzAgMzIuOCAxOS43IDYxIDQ4IDczLjNsMCAyMDUuM0MxOS43IDM3MSAwIDM5OS4yIDAgNDMyIDAgNDc2LjIgMzUuOCA1MTIgODAgNTEyczgwLTM1LjggODAtODBjMC0zMi44LTE5LjctNjEtNDgtNzMuM2wwLTg2LjZjMjYuNyAyMC4xIDYwIDMyIDk2IDMybDg2LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4IDQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwYy0zMi44IDAtNjEgMTkuNy03My4zIDQ4TDIwOCAyNDBjLTQ5LjkgMC05MS0zOC4xLTk1LjYtODYuOHpNODAgNDA4YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMzQ0IDI3MmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFIb3VzZVRzdW5hbWkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtdHN1bmFtaSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTE1IiwgIk0yODggMTZDMTU1LjUgMTYgNDggMTIzLjUgNDggMjU2UzE1NS41IDQ5NiAyODggNDk2YzcuNCAwIDE5LjctMi4zIDMzLjctNy4zIDEzLjgtNC45IDI3LjEtMTEuNyAzNi43LTE4LjkgMzguNC0yOSA5MC41LTI5IDEyOSAwIDE1LjQgMTEuNiAzNS4zIDIxLjEgNTUgMjQuNCAxOS41IDMuMyAzNyAuNCA1MS4xLTEwLjIgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOSAyNS42LTQuNyAzMy42Yy0yNy4zIDIwLjUtNTkuMiAyNC04Ny45IDE5LjItMjguNS00LjgtNTUuNC0xOC03NS45LTMzLjQtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDAtMTQuNSAxMC45LTMyLjQgMTkuNy00OS41IDI1LjgtMTYuOCA2LTM0LjkgMTAuMS00OS45IDEwLjFsLS4xIDBDMTI4LjkgNTQzLjkgMCA0MTUgMCAyNTYgMCA5Ni45IDEyOC45LTMyIDI4OC0zMiAzMDEuMy0zMiAzMTItMjEuMyAzMTItOHMtMTAuNyAyNC0yNCAyNHptNDQuOCAxNjYuNGw5Ni03MmMxMS40LTguNSAyNy4xLTguNSAzOC41IDBsOTUuNSA3MmM4IDYgMTIuNyAxNS41IDEyLjcgMjUuNWwuMyAxMjEuNWMtMi4yIDEuMy00LjMgMi42LTYuNCA0LjItNC4zIDMuMS04LjcgLjgtMTMuMi0xLjVsLTEuMi0uNi0uNy0uM2MtNS40LTIuNy0xMS43LTYuNi0xOC45LTExLjctMjkuNS0yMS4xLTY0LjMtMzEuNi05OS4xLTMxLjQtMzQuMSAuMi02OC4xIDEwLjctOTcgMzEuNC03LjggNS42LTEzLjggOS4zLTE5LjMgMTEuMkwzMjAgMjA4YzAtMTAuMSA0LjctMTkuNiAxMi44LTI1LjZ6bTU0LjYgMjI5LjdjLTE0LjUgMTAuOS0zMi40IDE5LjctNDkuNSAyNS44LTE2LjggNi0zNC45IDEwLjEtNDkuOSAxMC4xLTEwNiAwLTE5Mi04Ni0xOTItMTkyUzE4MiA2NCAyODggNjRjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0czY0LjUgMTQ0IDE0NCAxNDRjNy40IDAgMTkuNy0yLjMgMzMuNy03LjMgMTMuOC00LjkgMjcuMS0xMS43IDM2LjctMTguOSAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTUuNCAxMS42IDM1LjMgMjEuMSA1NSAyNC40IDE5LjUgMy4zIDM3IC40IDUxLjEtMTAuMiAxMC42LTggMjUuNi01LjkgMzMuNiA0LjdzNS45IDI1LjYtNC43IDMzLjZjLTI3LjMgMjAuNS01OS4yIDI0LTg3LjkgMTkuMi0yOC41LTQuOC01NS40LTE4LTc1LjktMzMuNC0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMHoiXQogICAgfTsKICAgIGZhTWFnbmlmeWluZ0dsYXNzQ2hhcnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFnbmlmeWluZy1nbGFzcy1jaGFydCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTIyIiwgIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6bS0zMTIgOGwwIDY0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC02NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptODAtOTZsMCAxNjBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptODAgNjRsMCA5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtOTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6Il0KICAgIH07CiAgICBmYVVtYnJlbGxhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVtYnJlbGxhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwZTkiLCAiTTI1Ni0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDJjMTI2LjMgMTUuNyAyMjQgMTIzLjUgMjI0IDI1NCAwIDMuOC0uMSA3LjUtLjIgMTEuMy0uMyA2LjktNSAxMi44LTExLjcgMTQuN3MtMTMuOC0uNy0xNy42LTYuNWMtMTQuNC0yMS40LTM4LjgtMzUuNS02Ni41LTM1LjUtMjkuMyAwLTU0LjkgMTUuNy02OC45IDM5LjMtMi43IDQuNi03LjYgNy42LTEzIDcuOHMtMTAuNS0yLjItMTMuNy02LjVjLTE0LjYtMTkuOC0zOC0zMi42LTY0LjUtMzIuNnMtNDkuOSAxMi44LTY0LjUgMzIuNmMtMy4yIDQuMy04LjMgNi44LTEzLjcgNi41cy0xMC4yLTMuMi0xMy03LjhjLTE0LTIzLjYtMzkuNi0zOS4zLTY4LjktMzkuMy0yNy43IDAtNTIuMSAxNC4xLTY2LjUgMzUuNS0zLjkgNS43LTExIDguNC0xNy42IDYuNVMuNSAyNzQuMiAuMiAyNjcuM0MuMSAyNjMuNSAwIDI1OS44IDAgMjU2IDAgMTI1LjUgOTcuNyAxNy43IDIyNCAybDAtMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMzIgMzYwbDAgMTAyLjZjMCA0NS0zNi41IDgxLjQtODEuNCA4MS40LTMwLjggMC01OS0xNy40LTcyLjgtNDVsLTIuMy00LjdjLTcuOS0xNS44LTEuNS0zNSAxNC4zLTQyLjlzMzUtMS41IDQyLjkgMTQuM2wyLjMgNC43YzMgNS45IDkgOS42IDE1LjYgOS42IDkuNiAwIDE3LjQtNy44IDE3LjQtMTcuNEwyMjQgMzI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6Il0KICAgIH07CiAgICBmYUhpbGxSb2Nrc2xpZGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGlsbC1yb2Nrc2xpZGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUwOCIsICJNMjUyLjQgMTAzLjhsMjcgNDhjMi44IDUgOC4yIDguMiAxMy45IDguMmw1My4zIDBjNS44IDAgMTEuMS0zLjEgMTMuOS04LjJsMjctNDhjMi43LTQuOSAyLjctMTAuOCAwLTE1LjdsLTI3LTQ4Yy0yLjgtNS04LjItOC4yLTEzLjktOC4ybC01My4zIDBjLTUuOCAwLTExLjEgMy4xLTEzLjkgOC4ybC0yNyA0OGMtMi43IDQuOS0yLjcgMTAuOCAwIDE1Ljd6TTY4LjMgODdDNDMuMSA2MS44IDAgNzkuNyAwIDExNS4zTDAgNDMyYzAgNDQuMiAzNS44IDgwIDgwIDgwbDMxNi43IDBjMzUuNiAwIDUzLjUtNDMuMSAyOC4zLTY4LjNMNjguMyA4N3pNNTA0LjIgNDAzLjZjNC45IDIuNyAxMC44IDIuNyAxNS43IDBsNDgtMjdjNS0yLjggOC4yLTguMiA4LjItMTMuOWwwLTUzLjNjMC01LjgtMy4xLTExLjEtOC4yLTEzLjlsLTQ4LTI3Yy00LjktMi43LTEwLjgtMi43LTE1LjcgMGwtNDggMjdjLTUgMi44LTguMiA4LjItOC4yIDEzLjlsMCA1My4zYzAgNS44IDMuMSAxMS4xIDguMiAxMy45bDQ4IDI3ek0xOTIgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzg0IDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYVVzZXJTZWNyZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1zZWNyZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgzNzNdLCAiZjIxYiIsICJNMTcxLTE2Yy0zNi40IDAtNTcuOCA1OC4zLTY4LjMgMTEyTDcyIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCAzMmMwIDE3IDMuMyAzMy4yIDkuMyA0OGwtOS4zIDAgMCAwLTIwLjUgMGMtMTUuMiAwLTI3LjUgMTIuMy0yNy41IDI3LjUgMCAzIC41IDUuOSAxLjQgOC43bDI4LjkgODYuNkM0MC4yIDM3OS42IDE2IDQyOC4xIDE2IDQ4Mi4zIDE2IDQ5OC43IDI5LjMgNTEyIDQ1LjcgNTEybDM1Ni42IDBjMTYuNCAwIDI5LjctMTMuMyAyOS43LTI5LjcgMC01NC4yLTI0LjItMTAyLjctNjIuMy0xMzUuNGwyOC45LTg2LjZjLjktMi44IDEuNC01LjcgMS40LTguNyAwLTE1LjItMTIuMy0yNy41LTI3LjUtMjcuNWwtMjAuNSAwIDAgMC05LjMgMGM2LTE0LjggOS4zLTMxIDkuMy00OGwwLTMyIDI0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTMwLjcgMGMtMTAuNC01My43LTMxLjktMTEyLTY4LjMtMTEyLTkuNiAwLTE5IDMuOS0yNy41IDguMi04LjIgNC4xLTE4LjQgNy44LTI1LjUgNy44cy0xNy4zLTMuNy0yNS41LTcuOEMxOTAtMTIuMSAxODAuNi0xNiAxNzEtMTZ6bTkzLjcgNDg0LjRsLTI0LjgtNzAuOSAyNy45LTMyLjVjMi43LTMuMiA0LjItNy4yIDQuMi0xMS40IDAtOS43LTcuOC0xNy41LTE3LjUtMTcuNWwtNjEgMGMtOS43IDAtMTcuNSA3LjgtMTcuNSAxNy41IDAgNC4yIDEuNSA4LjIgNC4yIDExLjRsMjcuOSAzMi41LTI0LjggNzAuOS01Ny0xODAuNCAzNS43IDBjMTguNCAxMC4yIDM5LjUgMTYgNjIgMTZzNDMuNi01LjggNjItMTZsMzUuNyAwLTU3IDE4MC40ek0yMjQgMjU2Yy0zNC43IDAtNjQuMi0yMi4xLTc1LjMtNTMgNS43IDMuMiAxMi4zIDUgMTkuMyA1bDEyLjQgMGMxNi41IDAgMzEuMS0xMC42IDM2LjMtMjYuMiAyLjMtNyAxMi4yLTcgMTQuNSAwIDUuMiAxNS42IDE5LjkgMjYuMiAzNi4zIDI2LjJsMTIuNCAwYzcgMCAxMy42LTEuOCAxOS4zLTUtMTEuMSAzMC45LTQwLjYgNTMtNzUuMyA1M3oiXQogICAgfTsKICAgIGZhUGFnZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFnZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyMjNdLCAiZjgxNSIsICJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptNjQgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTg4IDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwem0xMjggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAweiJdCiAgICB9OwogICAgZmFCcmllZmNhc2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJpZWZjYXNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTg4XSwgImYwYjEiLCAiTTIwMCA0OGwxMTIgMGM0LjQgMCA4IDMuNiA4IDhsMCA0MC0xMjggMCAwLTQwYzAtNC40IDMuNi04IDgtOHptLTU2IDhsMCA0MC04MCAwQzI4LjcgOTYgMCAxMjQuNyAwIDE2MGwwIDk2IDUxMiAwIDAtOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTgwIDAgMC00MGMwLTMwLjktMjUuMS01Ni01Ni01NkwyMDAgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6TTUxMiAzMDRsLTE5MiAwIDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYtMTkyIDAgMCAxMTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xMTJ6Il0KICAgIH07CiAgICBmYVRyb3dlbEJyaWNrcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cm93ZWwtYnJpY2tzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1OGEiLCAiTTIyNCAzMmMwLTExLjUtNi4yLTIyLjItMTYuMi0yNy44cy0yMi4zLTUuNS0zMi4yIC40bC0xNjAgOTZDNS45IDEwNi4zIDAgMTE2LjggMCAxMjhzNS45IDIxLjcgMTUuNSAyNy40bDE2MCA5NmM5LjkgNS45IDIyLjIgNi4xIDMyLjIgLjRTMjI0IDIzNS41IDIyNCAyMjRsMC02NCAyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjU2IDAgMC02NHptOTYgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTE2MCAwek0wIDQxNmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTIyNC0zMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0yNTYgMHoiXQogICAgfTsKICAgIGZhU29ja3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic29ja3MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MTBdLCAiZjY5NiIsICJNMjUyLjggMEwxNzYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNiAxMTIgMCAwLTE2YzAtMTcuNSA0LjctMzMuOSAxMi44LTQ4ek0xMjggMTEybDAgMTI4YzAgMjAuMS05LjUgMzkuMS0yNS42IDUxLjJsLTY0IDQ4Yy0yNC4yIDE4LjEtMzguNCA0Ni42LTM4LjQgNzYuOCAwIDUzIDQzIDk2IDk2IDk2IDE1LjQgMCAzMC41LTMuNyA0NC0xMC43LTE3LjYtMjMuOS0yOC01My40LTI4LTg1LjMgMC00NS4zIDIxLjMtODggNTcuNi0xMTUuMmw2NC00OGM0LTMgNi40LTcuOCA2LjQtMTIuOGwwLTEyOC0xMTIgMHptMTYwIDBsMCAxMjhjMCAyMC4xLTkuNSAzOS4xLTI1LjYgNTEuMmwtNjQgNDhjLTI0LjIgMTguMS0zOC40IDQ2LjYtMzguNCA3Ni44IDAgNTMgNDMgOTYgOTYgOTYgMjAuOCAwIDQxLTYuNyA1Ny42LTE5LjJsMTE1LjItODYuNEM0NjEgMzgyLjIgNDgwIDM0NC4zIDQ4MCAzMDRsMC0xOTItMTkyIDB6TTQ4MCA2NGwwLTE2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDMzNiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE2IDE5MiAweiJdCiAgICB9OwogICAgZmFUID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMTZdLCAiNTQiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5NmwxMjggMCAwIDM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzUyIDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyeiJdCiAgICB9OwogICAgZmFNaWNyb2NoaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWljcm9jaGlwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyZGIiLCAiTTE3NiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwIDAgNTYtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwIDAgNTYtNDAgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0MCAwYzAgMzUuMyAyOC43IDY0IDY0IDY0bDAgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwIDU2IDAgMCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDAgNTYgMCAwIDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MGMzNS4zIDAgNjQtMjguNyA2NC02NGw0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00MCAwIDAtNTYgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDAgMCAwLTU2IDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQwIDBjMC0zNS4zLTI4LjctNjQtNjQtNjRsMC00MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwLTU2IDAgMC00MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwLTU2IDAgMC00MHpNMTYwIDEyOGwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xNiA0OGwwIDE2MCAxNjAgMCAwLTE2MC0xNjAgMHoiXQogICAgfTsKICAgIGZhVHJ1Y2tNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLW1lZGljYWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg2NTcsICJhbWJ1bGFuY2UiXSwgImYwZjkiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMy4zIDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NHM3NC4yLTI3LjEgODQuNy02NGwxMDIuNiAwYzEwLjQgMzYuOSA0NC40IDY0IDg0LjcgNjRzNzQuMi0yNy4xIDg0LjctNjRsMy4zIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNDYuN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0w1MTIgMTQ2LjdjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdsLTUwLjcgMCAwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek01MTIgMjM3LjNsMCA1MC43LTk2IDAgMC05NiA1MC43IDAgNDUuMyA0NS4zek0xNTIgMzg0YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHptMjMyIDQwYTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTE3NiAxMzZjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgNDAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQwIDAgMCA0MGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDB6Il0KICAgIH07CiAgICBmYUFtYnVsYW5jZSA9IGZhVHJ1Y2tNZWRpY2FsOwogICAgZmFPbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJvbSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODMyOV0sICJmNjc5IiwgIk0zODguNyA0LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBsMTYgMTZjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTE2IDE2Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtMTYtMTZjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42bDE2LTE2ek0xNzYgMTYwYy0xMC44IDAtMjAuOCAzLjYtMjguOCA5LjYtMTQuMSAxMC42LTM0LjIgNy44LTQ0LjgtNi40cy03LjgtMzQuMiA2LjQtNDQuOGMxOC43LTE0LjEgNDItMjIuNCA2Ny4yLTIyLjQgNjEuOSAwIDExMiA1MC4xIDExMiAxMTIgMCAxNy4yLTMuOSAzMy41LTEwLjggNDhsNDkuNyAwYzEyLjcgMCAyNC45LTUgMzMuOS0xNC4xbDIwLjctMjAuN2MxOC43LTE4LjcgNDQuMS0yOS4zIDcwLjYtMjkuMyA1NS4yIDAgOTkuOSA0NC43IDk5LjkgOTkuOWwwIDk2LjFjMCA1NS4yLTQ0LjggMTAwLTEwMCAxMDBTMzUyIDQ0My4yIDM1MiAzODhsMC00YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA0YzAgMTkuOSAxNi4xIDM2IDM2IDM2czM2LTE2LjEgMzYtMzZsMC05Ni4xYzAtMTkuOC0xNi4xLTM1LjktMzUuOS0zNS45LTkuNSAwLTE4LjYgMy44LTI1LjQgMTAuNWwtMjAuNyAyMC43Yy0yMSAyMS00OS40IDMyLjgtNzkuMSAzMi44bC0yNi44IDBjMTIuNiAxOS42IDE5LjkgNDIuOCAxOS45IDY4IDAgNzUuMi02NSAxMzItMTQwIDEzMlM0MCA0NjMuMiA0MCAzODhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmMwIDM1LjMgMzEuNyA2OCA3NiA2OHM3Ni0zMi43IDc2LTY4LTMxLjctNjgtNzYtNjhsLTIwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OHpNMzM3LjEgNjAuMWMtMTEtMTMuOC0zMS4xLTE2LjItNDUtNS4ycy0xNi4yIDMxLjEtNS4yIDQ1QzMxMi42IDEzMi4yIDM1NC40IDE1MiA0MDAgMTUyczg3LjQtMTkuOCAxMTMuMS01Mi4xYzExLTEzLjggOC43LTM0LTUuMi00NXMtMzQtOC43LTQ1IDUuMkM0NTAuMyA3NiA0MjcuNSA4OCA0MDAgODhzLTUwLjMtMTItNjIuOS0yNy45eiJdCiAgICB9OwogICAgZmFNb3NxdWl0b05ldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb3NxdWl0by1uZXQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUyYyIsICJNNTc2IDM1MmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE2IDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDAgMCA0OCAxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwIDAgMTYtLjEgMi41QzU5OC42IDU2Ni42IDU4OC40IDU3NiA1NzYgNTc2cy0yMi42LTkuNC0yMy45LTIxLjVsLS4xLTIuNSAwLTE2LTQ4IDAgMCAxNi0uMSAyLjVDNTAyLjYgNTY2LjYgNDkyLjQgNTc2IDQ4MCA1NzZzLTIyLjYtOS40LTIzLjktMjEuNWwtLjEtMi41IDAtMTYtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNiAwIDAtNDgtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNiAwIDAtMTZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDE2IDQ4IDAgMC0xNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNDI5LjkgMTYuM2M3LjctOS40IDIxLjMtMTEuNSAzMS40LTQuMyAxMC4xIDcuMSAxMy4xIDIwLjkgNy40IDMxLjdsLTEuMyAyLjEtMjUuOSAzOC45IDEzLjMgNTMuNGMyIDgtLjEgMTYuMy01LjMgMjIuM2wtMi40IDIuNC00NC43IDM4LjMgMTMwLjUgMTQuNWM0Mi44IDQuOCA3NS4xIDQwLjkgNzUuMSA4My45IDAgMy45LS40IDcuNy0uOSAxMS41LTcuMy0zLjUtMTUuMy01LjgtMjMuOC02LjdMNTc2IDMwNGMtMTguNSAwLTM1LjMgNy00OCAxOC40LTExLTkuOS0yNS4xLTE2LjUtNDAuNi0xOC4xTDQ4MCAzMDRjLTMwLjMgMC01Ni4xIDE4LjctNjYuOCA0NS4yLTEyLjUgNS0yMy4yIDEzLjQtMzEuMSAyNGwtMzAuMi00MC4xIDAgNzQuN2MwIDE3LjctMTQuMyAzMi0zMiAzMi0xNi42IDAtMzAuMi0xMi42LTMxLjgtMjguN2wtLjItMy4zIDAtNzQuNi0zMi4zIDQzIDAgMzkuOGMwIDMuNS0uNyA2LjktMi4xIDEwLjFsLTEuNiAzLjEtNDAgNjQtMS40IDJjLTcuNSA5LjYtMjEgMTIuMS0zMS4zIDUuMy0xMC4zLTYuOC0xMy43LTIwLjUtOC4zLTMxLjVsMS4yLTIuMiAzNi4yLTU4IDAtNDEgLjMtNGMuNi0zLjkgMi4yLTcuNyA0LjYtMTAuOWwzOS4zLTUyLjItNjYuMiA1OS41Yy0xNyAxNS4zLTM5IDIzLjctNjEuOSAyMy44bC04LjEgMGMtNDYuNiAwLTg0LjQtMzcuOC04NC40LTg0LjQgMC00MyAzMi40LTc5LjIgNzUuMS04My45bDEzMC41LTE0LjUtNDQuNy0zOC4zLTIuNC0yLjRjLTUuMi02LTcuMy0xNC40LTUuMy0yMi4zbDEzLjMtNTMuNC0yNS45LTM4LjktMS4yLTIuMWMtNS43LTEwLjgtMi43LTI0LjYgNy40LTMxLjcgMTAuMS03LjEgMjMuNy01LjEgMzEuNCA0LjNsMS41IDIgMzIgNDggMS40IDIuMmMyLjggNS4zIDMuNSAxMS42IDIuMSAxNy42bC0xMi4zIDQ5LjIgNTMuMyA0NS43IDAtMjguOCAuMi0zLjJjMS4xLTEwLjQgNy4yLTE5LjQgMTUuOC0yNC40bDAtNjAuNSAuMy0zLjJjMS41LTcuMyA4LTEyLjcgMTUuNy0xMi44IDcuNyAwIDE0LjIgNS41IDE1LjcgMTIuOGwuMyAzLjIgMCA2MC41YzguNyA1IDE0LjggMTQgMTUuOCAyNC40bC4yIDMuMiAwIDI4LjkgNTMuNC00NS43LTEyLjMtNDkuMmMtMS41LTUuOS0uNy0xMi4yIDIuMS0xNy42bDEuNC0yLjIgMzItNDggMS41LTJ6TTUwNCA0ODhsNDggMCAwLTQ4LTQ4IDAgMCA0OHoiXQogICAgfTsKICAgIGZhUHJlc2NyaXB0aW9uQm90dGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInByZXNjcmlwdGlvbi1ib3R0bGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjQ4NSIsICJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBMMzUyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0TDAgMzJ6TTMyIDE0NGwzMjAgMCAwIDMwNGMwIDM1LjMtMjguNyA2NC02NCA2NEw5NiA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTcyIDAgMC00OCA3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC03MiAwIDAtNDggNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNzIgMCAwLTY0eiJdCiAgICB9OwogICAgZmFVc2Vyc0dlYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlcnMtZ2VhciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJ1c2Vycy1jb2ciXSwgImY1MDkiLCAiTTMyMCAyMjRhMTA0IDEwNCAwIDEgMCAwLTIwOCAxMDQgMTA0IDAgMSAwIDAgMjA4ek05NiAyMzJhNzIgNzIgMCAxIDAgMC0xNDQgNzIgNzIgMCAxIDAgMCAxNDR6TTAgNDE2bDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsODYuNyAwYy00LjMtOS44LTYuNy0yMC42LTYuNy0zMmwwLTE2YzAtNTMuMiAyMC0xMDEuOCA1Mi45LTEzOC42LTExLjctMy41LTI0LjEtNS40LTM2LjktNS40LTcwLjcgMC0xMjggNTcuMy0xMjggMTI4ek02MTYgMTYwYTcyIDcyIDAgMSAwIC0xNDQgMCA3MiA3MiAwIDEgMCAxNDQgMHpNMTYwIDQzMmwwIDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE1Ni44IDBjLTcuMS0yMS42LTYuMy00NC40IDEwLjctNjQtMTQtMTYuMi0yMC41LTM5LjctMTEuNC02My4zIDYuNi0xNy4xIDE1LjktMzMuMSAyNy40LTQ3LjMgNS40LTYuNiAxMS42LTExLjcgMTguMy0xNS40LTIyLjEtMTEuNS00Ny4yLTE4LTczLjgtMTgtODguNCAwLTE2MCA3MS42LTE2MCAxNjB6bTQ2NC42LTQ0LjFjNi4zLTMuNiA5LjUtMTEuMSA2LjgtMTgtNC44LTEyLjQtMTEuNS0yNC4xLTE5LjktMzQuNC00LjYtNS43LTEyLjctNi43LTE5LTMtMjEuOCAxMi42LTQ4LjYtMi44LTQ4LjYtMjguMSAwLTcuMy00LjktMTMuOC0xMi4xLTE0LjktMTIuOS0yLTI2LjgtMi0zOS43IDAtNy4yIDEuMS0xMi4xIDcuNi0xMi4xIDE0LjkgMCAyNS4yLTI2LjggNDAuNy00OC42IDI4LjEtNi4zLTMuNi0xNC40LTIuNi0xOSAzLTguNCAxMC4zLTE1LjEgMjItMTkuOSAzNC40LTIuNiA2LjggLjUgMTQuMyA2LjggMTcuOSAyMS45IDEyLjYgMjEuOSA0My41IDAgNTYuMi02LjMgMy42LTkuNSAxMS4xLTYuOCAxNy45IDQuOCAxMi40IDExLjUgMjQuMSAxOS45IDM0LjQgNC42IDUuNyAxMi43IDYuNyAxOSAzIDIxLjgtMTIuNiA0OC42IDIuOSA0OC42IDI4LjEgMCA3LjMgNC45IDEzLjggMTIuMSAxNC45IDEyLjkgMiAyNi44IDIgMzkuNyAwIDcuMi0xLjEgMTIuMS03LjYgMTIuMS0xNC45IDAtMjUuMiAyNi44LTQwLjcgNDguNi0yOC4xIDYuMyAzLjYgMTQuNCAyLjYgMTktMyA4LjQtMTAuMyAxNS4xLTIyIDE5LjktMzQuNCAyLjYtNi44LS41LTE0LjMtNi44LTE3LjktMjEuOS0xMi42LTIxLjktNDMuNSAwLTU2LjJ6TTQ3MiA0MTZhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHoiXQogICAgfTsKICAgIGZhVXNlcnNDb2cgPSBmYVVzZXJzR2VhcjsKICAgIGZhUm9hZENpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvYWQtY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NjUiLCAiTTI4OCAzMmwtNzYuMyAwYy0yOS40IDAtNTUuMSAyMC4xLTYyLjEgNDguNkw2NS40IDQyMC41QzU3LjkgNDUwLjcgODAuOCA0ODAgMTEyIDQ4MGwyMDkuNCAwYy0xMS4yLTI0LjQtMTcuNC01MS40LTE3LjQtODAgMC0yOC42IDYuMi01NS43IDE3LjQtODAtLjUgMC0xIDAtMS41IDAtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNDljMzUuMi0zOS45IDg2LjctNjUgMTQ0LTY1IDkgMCAxNy44IC42IDI2LjUgMS44bC0zMi0xMjkuMkM0ODMuNCA1Mi4xIDQ1Ny44IDMyIDQyOC4zIDMybC03Ni40IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0ek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC0xMDBhMjAgMjAgMCAxIDEgMCA0MCAyMCAyMCAwIDEgMSAwLTQwem0wLTE0MGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhUGF1c2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGF1c2UiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5MjA4XSwgImYwNGMiLCAiTTQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1MmMwLTI2LjUtMjEuNS00OC00OC00OEw0OCAzMnptMjI0IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMzUyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDB6Il0KICAgIH07CiAgICBmYVN0YWZmU25ha2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3RhZmYtc25ha2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsicm9kLWFzY2xlcGl1cyIsICJyb2Qtc25ha2UiLCAic3RhZmYtYWVzY3VsYXBpdXMiXSwgImU1NzkiLCAiTTE5MiAzMmwwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiA2NCAwYzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2bC0xNiAwIDAtNjQgMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwIDE5MiAzMiAwYzUzIDAgOTYgNDMgOTYgOTYgMCA0Ny42LTM0LjYgODcuMS04MCA5NC43bDAtNjdjOS42LTUuNSAxNi0xNS45IDE2LTI3LjcgMC0xNy43LTE0LjMtMzItMzItMzJsLTMyIDAgMCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC02NC0zMiAwYy01MyAwLTk2LTQzLTk2LTk2IDAtNDcuNiAzNC42LTg3LjEgODAtOTQuN2wwIDY3Yy05LjYgNS41LTE2IDE1LjktMTYgMjcuNyAwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwIDAtMTkyLTcyLjYgMGMtMTEuMSAxOS4xLTMxLjcgMzItNTUuNCAzMmwtMTYgMEMyMS41IDEyOCAwIDEwNi41IDAgODBTMjEuNSAzMiA0OCAzMmwxNDQgMHoiXQogICAgfTsKICAgIGZhUm9kQXNjbGVwaXVzID0gZmFTdGFmZlNuYWtlOwogICAgZmFSb2RTbmFrZSA9IGZhU3RhZmZTbmFrZTsKICAgIGZhU3RhZmZBZXNjdWxhcGl1cyA9IGZhU3RhZmZTbmFrZTsKICAgIGZhUGlnZ3lCYW5rID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBpZ2d5LWJhbmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRkMyIsICJNMjg4LTMyYTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyek00OCAzMDRjMC03MC4xIDQ3LTEzMS40IDExNy4xLTE2NC45IDI1LjMgNDEuMyA3MC45IDY4LjkgMTIyLjkgNjguOSA1NS43IDAgMTA0LjEtMzEuNyAxMjgtNzggMTUuOC0xMS4zIDM1LjEtMTggNTYtMThsMTkuNSAwYzEwLjQgMCAxOCA5LjggMTUuNSAxOS45bC0xNy4xIDY4LjNjOS45IDEyLjQgMTguMiAyNS43IDI0LjQgMzkuOGwyMS43IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxMTJjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQwIDBjLTE2LjUgMjItMzguNSAzOS42LTY0IDUwLjdsMCAyOS4zYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMyAwYy0xNC4zIDAtMjYuOC05LjUtMzAuOC0yMy4ybC03LjEtMjQuOC04Mi4zIDAtNy4xIDI0LjhDMjM1LjggNTAyLjUgMjIzLjMgNTEyIDIwOSA1MTJsLTMzIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjkuM0M4Ny41IDQyNiA0OCAzNjkuNiA0OCAzMDR6bTM3NiAxNmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il0KICAgIH07CiAgICBmYU1vbnVtZW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vbnVtZW50IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1YTYiLCAiTTIwOS0zM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMOTUgNDdjLTQuMSA0LjEtNi41IDkuNC03IDE1LjFMNTguNCA0NDggNDggNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMC40IDAtMjkuNy0zODUuOGMtLjQtNS43LTIuOS0xMS4xLTctMTUuMUwyMDktMzN6TTEyOCAyOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYUFuZ2xlc1JpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlcy1yaWdodCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzE4NywgImFuZ2xlLWRvdWJsZS1yaWdodCJdLCAiZjEwMSIsICJNNDM5LjEgMjc4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDM3MS4yIDI1NiAyMzMuOSAzOTMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwem0tMzUyIDE2MGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0wxNzkuMiAyNTYgNDEuOSAzOTMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMHoiXQogICAgfTsKICAgIGZhQW5nbGVEb3VibGVSaWdodCA9IGZhQW5nbGVzUmlnaHQ7CiAgICBmYURlc2t0b3AgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGVza3RvcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQyMSwgNjE3MDQsICJkZXNrdG9wLWFsdCJdLCAiZjM5MCIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNDQgMC0xNiA0OC03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC03MiAwLTE2LTQ4IDE0NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek05NiA5NmwzMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMkw5NiAzMjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFEZXNrdG9wQWx0ID0gZmFEZXNrdG9wOwogICAgZmFQbGFuZUNpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYW5lLWNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTU3IiwgIk0yMzIgMjRjMC0zMC45IDI1LjEtNTYgNTYtNTZzNTYgMjUuMSA1NiA1NmwwIDEyNy4zIDc4IDcxLjVjLTY5LjMgMjktMTE4IDk3LjQtMTE4IDE3Ny4yIDAgNDkuMyAxOC42IDk0LjMgNDkuMSAxMjguM0wyODggNTEyIDE3OS45IDUzOWMtMTAuMSAyLjUtMTkuOS01LjEtMTkuOS0xNS41bDAtMTkuOGMwLTQuOSAyLjItOS41IDYtMTIuNWw2Ni01Mi44IDAtOTkuNy0xNjIuOSA1NC4zQzU4LjcgMzk2LjQgNDggMzg4LjcgNDggMzc3LjhsMC00My43YzAtOSAzLjgtMTcuNSAxMC40LTIzLjZMMjMyIDE1MS4zIDIzMiAyNHpNNDk2IDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTU5LjMgMTA3LjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMGwtMzYuNyAzNi43LTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmwzNi43IDM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzYuNy0zNi43IDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTM2LjctMzYuNyAzNi43LTM2Ljd6Il0KICAgIH07CiAgICBmYVJldHdlZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmV0d2VldCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMDc5IiwgIk0xMTguNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45UzE5LjEgMTYwIDMyIDE2MGwzMiAwIDAgMjI0YzAgNTMgNDMgOTYgOTYgOTZsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTIyNCAzMiAwYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTY0LTY0ek00NTcuNCA0NzAuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw2NC02NGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM1NTYuOSAzNTIgNTQ0IDM1MmwtMzIgMCAwLTIyNGMwLTUzLTQzLTk2LTk2LTk2TDI4OCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDIyNC0zMiAwYy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44cy0yLjIgMjUuNyA2LjkgMzQuOWw2NCA2NHoiXQogICAgfTsKICAgIGZhVXNlckdlYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1nZWFyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbInVzZXItY29nIl0sICJmNGZlIiwgIk0yNTYuNSA4YTEyMCAxMjAgMCAxIDEgMCAyNDAgMTIwIDEyMCAwIDEgMSAwLTI0MHpNMjI2LjcgMzA0bDU5LjQgMCAxLjUgMGMtMTIuOSAyNi44LTcuOCA1OC4yIDExLjUgNzkuNS0yMC4yIDIyLjMtMjQuOCA1NS44LTkuNCA4My40bDIyLjUgNDAuNGMuOSAxLjYgMS45IDMuMiAyLjkgNC43bC0yMzcgMGMtMTYuNCAwLTI5LjctMTMuMy0yOS43LTI5LjcgMC05OC41IDc5LjgtMTc4LjMgMTc4LjMtMTc4LjN6bTIwNS45LTU2LjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDYuMWMwIDE4LjkgMjQuMSAzMi44IDQwLjUgMjMuNGw1LTIuOWMxMS42LTYuNyAyNi41LTIuNiAzMyA5LjFsMjIuNCA0MC4yYzYuMiAxMS4yIDIuNiAyNS4yLTguMiAzMmwtNC43IDIuOWMtMTYuMiAxMC4xLTE2LjIgMzkuOSAwIDUwLjFsNC42IDIuOWMxMC44IDYuOCAxNC41IDIwLjggOC4zIDMyTDYwNyA0ODMuOGMtNi41IDExLjctMjEuNCAxNS45LTMzIDkuMWwtNC45LTIuOWMtMTYuNC05LjUtNDAuNSA0LjUtNDAuNSAyMy40bDAgNi4xYzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTUuOWMwLTE5LTI0LjItMzMtNDAuNy0yMy41bC00LjggMi44Yy0xMS42IDYuNy0yNi40IDIuNi0zMy05LjFsLTIyLjYtNDAuNGMtNi4yLTExLjItMi42LTI1LjMgOC4zLTMyLjFsNC40LTIuN2MxNi4zLTEwLjEgMTYuMy00MC4xIDAtNTAuMmwtNC41LTIuOGMtMTAuOS02LjgtMTQuNS0yMC45LTguMy0zMi4xbDIyLjUtNDAuM2M2LjUtMTEuNyAyMS40LTE1LjggMzIuOS05LjFsNC44IDIuOGMxNi41IDkuNSA0MC43LTQuNSA0MC43LTIzLjVsMC01Ljl6bTk5LjkgMTM2LjJhNTIgNTIgMCAxIDAgLTEwNCAwIDUyIDUyIDAgMSAwIDEwNCAweiJdCiAgICB9OwogICAgZmFVc2VyQ29nID0gZmFVc2VyR2VhcjsKICAgIGZhQm9yZGVyQWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvcmRlci1hbGwiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjg0YyIsICJNMzg0IDk2bDAgMTI4LTEyOCAwIDAtMTI4IDEyOCAwem0wIDE5MmwwIDEyOC0xMjggMCAwLTEyOCAxMjggMHpNMTkyIDIyNGwtMTI4IDAgMC0xMjggMTI4IDAgMCAxMjh6TTY0IDI4OGwxMjggMCAwIDEyOC0xMjggMCAwLTEyOHpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnoiXQogICAgfTsKICAgIGZhQ29pbnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29pbnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUxZSIsICJNMTI4IDk2bDAtMTZjMC00NC4yIDg2LTgwIDE5Mi04MFM1MTIgMzUuOCA1MTIgODBsMCAxNmMwIDMwLjYtNDEuMyA1Ny4yLTEwMiA3MC43LTIuNC0yLjgtNC45LTUuNS03LjQtOC0xNS41LTE1LjMtMzUuNS0yNi45LTU2LjQtMzUuNS00MS45LTE3LjUtOTYuNS0yNy4xLTE1NC4yLTI3LjEtMjEuOSAwLTQzLjMgMS40LTYzLjggNC4xLS4yLTEuMy0uMi0yLjctLjItNC4xek00MzIgMzUzbDAtNDYuMmMxNS4xLTMuOSAyOS4zLTguNSA0Mi4yLTEzLjkgMTMuMi01LjUgMjYuMS0xMi4yIDM3LjgtMjAuM2wwIDE1LjRjMCAyNi44LTMxLjUgNTAuNS04MCA2NXptMC05NmwwLTMzYzAtNC41LS40LTguOC0xLTEzIDE1LjUtMy45IDMwLTguNiA0My4yLTE0LjJzMjYuMS0xMi4yIDM3LjgtMjAuM2wwIDE1LjRjMCAyNi44LTMxLjUgNTAuNS04MCA2NXpNMCAyNDBsMC0xNmMwLTQ0LjIgODYtODAgMTkyLTgwczE5MiAzNS44IDE5MiA4MGwwIDE2YzAgNDQuMi04NiA4MC0xOTIgODBTMCAyODQuMiAwIDI0MHptMzg0IDk2YzAgNDQuMi04NiA4MC0xOTIgODBTMCAzODAuMiAwIDMzNmwwLTE1LjRjMTEuNiA4LjEgMjQuNSAxNC43IDM3LjggMjAuMyA0MS45IDE3LjUgOTYuNSAyNy4xIDE1NC4yIDI3LjFzMTEyLjMtOS43IDE1NC4yLTI3LjFjMTMuMi01LjUgMjYuMS0xMi4yIDM3LjgtMjAuM2wwIDE1LjR6bTAgODAuNmwwIDE1LjRjMCA0NC4yLTg2IDgwLTE5MiA4MFMwIDQ3Ni4yIDAgNDMybDAtMTUuNGMxMS42IDguMSAyNC41IDE0LjcgMzcuOCAyMC4zIDQxLjkgMTcuNSA5Ni41IDI3LjEgMTU0LjIgMjcuMXMxMTIuMy05LjcgMTU0LjItMjcuMWMxMy4yLTUuNSAyNi4xLTEyLjIgMzcuOC0yMC4zeiJdCiAgICB9OwogICAgZmFNYXJzU3Ryb2tlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnMtc3Ryb2tlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTg5NF0sICJmMjI5IiwgIk00MTYtMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTAuNyAwLTU4LjcgNTguNy0xNy40LTE3LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE3LjQgMTcuNC0yMyAyM2MtMjguNC0xOS41LTYyLjctMzEtOTkuOC0zMS05Ny4yIDAtMTc2IDc4LjgtMTc2IDE3NnM3OC44IDE3NiAxNzYgMTc2IDE3Ni03OC44IDE3Ni0xNzZjMC0zNy0xMS40LTcxLjQtMzEtOTkuOGwyMy0yMyAxNy40IDE3LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w0NTMuMyAxMzYgNTEyIDc3LjMgNTEyIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyTDU3NiAwYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDQxNi0zMnpNMTI4IDMwNGExMTIgMTEyIDAgMSAxIDIyNCAwIDExMiAxMTIgMCAxIDEgLTIyNCAweiJdCiAgICB9OwogICAgZmFIYW5kc2hha2VBbmdsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kc2hha2UtYW5nbGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiaGFuZHMtaGVscGluZyJdLCAiZjRjNCIsICJNMjY4LjkgNTMuMkwxNTIuMyAxODIuOGMtNC42IDUuMS00LjQgMTMgLjUgMTcuOSAzMC41IDMwLjUgODAgMzAuNSAxMTAuNSAwbDMxLjgtMzEuOGM0LjItNC4yIDkuNS02LjUgMTQuOS02LjkgNi44LS42IDEzLjggMS43IDE5IDYuOUw1MDUuNiAzNDQgNTc2IDI4OCA1NzYgMCA0NjQgNjQgNDQwLjIgNDguMUM0MjQuNCAzNy42IDQwNS45IDMyIDM4Ni45IDMybC03MC40IDBjLTEuMSAwLTIuMyAwLTMuNCAuMS0xNi45IC45LTMyLjggOC41LTQ0LjIgMjEuMXpNMTE2LjYgMTUwLjdMMjIzLjQgMzIgMTgzLjggMzJjLTI1LjUgMC00OS45IDEwLjEtNjcuOSAyOC4xTDAgMTkyIDAgNTQ0IDE0NCA0MDggMTU2LjQgNDE4LjNjMjMgMTkuMiA1MiAyOS43IDgxLjkgMjkuN2wxNS43IDAtNy03Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNDEgNDEgOSAwYzE5LjEgMCAzNy44LTQuMyA1NC44LTEyLjNMMzU5IDQwOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDMyIDMyIDE3LjUtMTcuNWM4LjktOC45IDExLjUtMjEuOCA3LjYtMzMuMWwtMTM3LjktMTM2LjgtMTQuOSAxNC45Yy00OS4zIDQ5LjMtMTI5LjEgNDkuMy0xNzguNCAwLTIzLTIzLTIzLjktNTkuOS0yLjItODR6Il0KICAgIH07CiAgICBmYUhhbmRzSGVscGluZyA9IGZhSGFuZHNoYWtlQW5nbGU7CiAgICBmYUFycm93RG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbODU5NV0sICJmMDYzIiwgIk0xNjkuNCA1MDIuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCA0MDIuNyAyMjQgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzNzAuNy0xMDUuNC0xMDUuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MHoiXQogICAgfTsKICAgIGZhTG9jYXRpb25Eb3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibG9jYXRpb24tZG90IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbIm1hcC1tYXJrZXItYWx0Il0sICJmM2M1IiwgIk0wIDE4OC42QzAgODQuNCA4NiAwIDE5MiAwUzM4NCA4NC40IDM4NCAxODguNmMwIDExOS4zLTEyMC4yIDI2Mi4zLTE3MC40IDMxNi44LTExLjggMTIuOC0zMS41IDEyLjgtNDMuMyAwLTUwLjItNTQuNS0xNzAuNC0xOTcuNS0xNzAuNC0zMTYuOHpNMTkyIDI1NmE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHoiXQogICAgfTsKICAgIGZhTWFwTWFya2VyQWx0ID0gZmFMb2NhdGlvbkRvdDsKICAgIGZhUGx1Z0NpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsdWctY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NWQiLCAiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNDk2IDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTAgMjI4YTIwIDIwIDAgMSAwIDAtNDAgMjAgMjAgMCAxIDAgMCA0MHptMC0xODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDgwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC04MGMwLTguOC03LjItMTYtMTYtMTZ6Il0KICAgIH07CiAgICBmYUNvb2tpZUJpdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29va2llLWJpdGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjU2NCIsICJNMjU3LjUgMjcuNmMtLjgtNS40LTQuOS05LjgtMTAuMy0xMC42LTIyLjEtMy4xLTQ0LjYgLjktNjQuNCAxMS40bC03NCAzOS41Qzg5LjEgNzguNCA3My4yIDk0LjkgNjMuNCAxMTVMMjYuNyAxOTAuNmMtOS44IDIwLjEtMTMgNDIuOS05LjEgNjQuOWwxNC41IDgyLjhjMy45IDIyLjEgMTQuNiA0Mi4zIDMwLjcgNTcuOWw2MC4zIDU4LjRjMTYuMSAxNS42IDM2LjYgMjUuNiA1OC43IDI4LjdsODMgMTEuN2MyMi4xIDMuMSA0NC42LS45IDY0LjQtMTEuNGw3NC0zOS41YzE5LjctMTAuNSAzNS42LTI3IDQ1LjQtNDcuMmwzNi43LTc1LjVjOS44LTIwLjEgMTMtNDIuOSA5LjEtNjQuOS0uOS01LjMtNS4zLTkuMy0xMC42LTEwLjEtNTEuNS04LjItOTIuOC00Ny4xLTEwNC41LTk3LjQtMS44LTcuNi04LTEzLjQtMTUuNy0xNC42LTU0LjYtOC43LTk3LjctNTItMTA2LjItMTA2Ljh6TTIwOCAxNDRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0xNDQgMzM2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTIyNC02NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVNjcmV3ZHJpdmVyV3JlbmNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjcmV3ZHJpdmVyLXdyZW5jaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ0b29scyJdLCAiZjdkOSIsICJNNzAuOC02LjdjNS40LTUuNCAxMy44LTYuMiAyMC4yLTJMMjA5LjkgNzAuNWM4LjkgNS45IDE0LjIgMTUuOSAxNC4yIDI2LjZsMCA0OS42IDkwLjggOTAuOGMzMy4zLTE1IDczLjktOC45IDEwMS4yIDE4LjVMNTQyLjIgMzgyLjFjMTguNyAxOC43IDE4LjcgNDkuMSAwIDY3LjlsLTYwLjEgNjAuMWMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBMMjg4LjEgMzg0Yy0yNy40LTI3LjQtMzMuNS02Ny45LTE4LjUtMTAxLjJsLTkwLjgtOTAuOC00OS42IDBjLTEwLjcgMC0yMC43LTUuMy0yNi42LTE0LjJMMjMuNCA1OC45Yy00LjItNi4zLTMuNC0xNC44IDItMjAuMkw3MC44LTYuN3ptMTQ1IDMwMy41Yy02LjMgMzYuOSAyLjMgNzUuOSAyNi4yIDEwNy4ybC05NC45IDk1Yy0yOC4xIDI4LjEtNzMuNyAyOC4xLTEwMS44IDBzLTI4LjEtNzMuNyAwLTEwMS44bDEzNS40LTEzNS41IDM1LjIgMzUuMXpNMzg0LjEgMGMyMC4xIDAgMzkuNCAzLjcgNTcuMSAxMC41IDEwIDMuOCAxMS44IDE2LjUgNC4zIDI0LjFMMzg4LjggOTEuM2MtMyAzLTQuNyA3LjEtNC43IDExLjNsMCA0MS40YzAgOC44IDcuMiAxNiAxNiAxNmw0MS40IDBjNC4yIDAgOC4zLTEuNyAxMS4zLTQuN2w1Ni43LTU2LjdjNy42LTcuNSAyMC4zLTUuNyAyNC4xIDQuMyA2LjggMTcuNyAxMC41IDM3IDEwLjUgNTcuMSAwIDQzLjItMTcuMiA4Mi4zLTQ1IDExMS4xbC00OS4xLTQ5LjFjLTMzLjEtMzMtNzguNS00NS43LTEyMS4xLTM4LjRsLTU2LjgtNTYuOCAwLTI5LjctLjItNWMtLjgtMTIuNC00LjQtMjQuMy0xMC41LTM0LjkgMjkuNC0zNSA3My40LTU3LjIgMTIyLjctNTcuM3oiXQogICAgfTsKICAgIGZhVG9vbHMgPSBmYVNjcmV3ZHJpdmVyV3JlbmNoOwogICAgZmFJbmRlbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaW5kZW50IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwM2MiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHpNMTkyIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem0zMiA5NmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6TTAgNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTEyNy44IDI2OC42TDI1LjggMzQ3LjlDMTUuMyAzNTYuMSAwIDM0OC42IDAgMzM1LjNMMCAxNzYuN2MwLTEzLjMgMTUuMy0yMC44IDI1LjgtMTIuNmwxMDEuOSA3OS4zYzguMiA2LjQgOC4yIDE4LjkgMCAyNS4zeiJdCiAgICB9OwogICAgZmFCYXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhcnMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsibmF2aWNvbiJdLCAiZjBjOSIsICJNMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NGwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAxMjhDMTQuMyAxMjggMCAxMTMuNyAwIDk2ek0wIDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00NDggNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhTmF2aWNvbiA9IGZhQmFyczsKICAgIGZhSGFuZHNQcmF5aW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLXByYXlpbmciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsicHJheWluZy1oYW5kcyJdLCAiZjY4NCIsICJNMjI0IDI5NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTExMi42IDg4LjItMTE5LjdjMTMuMS0xNy44IDkuMy00Mi44LTguNS01NS45cy00Mi44LTkuMy01NS45IDguNUwxMDYuNSAxNDIuOUM4OS4zIDE2Ni4yIDgwIDE5NC41IDgwIDIyMy42bDAgMTEwLjctNTguMSAxOS40QzguOCAzNTggMCAzNzAuMiAwIDM4NGwwIDk2YzAgMTAgNC43IDE5LjUgMTIuNyAyNS41czE4LjQgOCAyOC4xIDUuMmwxNTQuNC00NC4xYzU1LTE1LjcgOTIuOC02NS45IDkyLjgtMTIzLjFMMjg4IDIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDcyem0xOTIgMGwwLTcyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTE5LjZjMCA1Ny4yIDM3LjkgMTA3LjQgOTIuOCAxMjMuMWwxNTQuNCA0NC4xYzkuNyAyLjggMjAgLjggMjguMS01LjJTNjQwIDQ5MCA2NDAgNDgwbDAtOTZjMC0xMy44LTguOC0yNi0yMS45LTMwLjRsLTU4LjEtMTkuNCAwLTExMC43YzAtMjktOS4zLTU3LjMtMjYuNS04MC43TDQ0MC4yIDE2LjNDNDI3LjEtMS41IDQwMi4xLTUuMyAzODQuMyA3LjhzLTIxLjYgMzguMS04LjUgNTUuOUw0NjQgMTgzLjQgNDY0IDI5NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhUHJheWluZ0hhbmRzID0gZmFIYW5kc1ByYXlpbmc7CiAgICBmYVZpcnVzZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlydXNlcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMDc2IiwgIk0xOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMiAwIDMwLjUgMzYuOSA0NS44IDU4LjUgMjQuMiAxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zYy0yMS42IDIxLjYtNi4zIDU4LjUgMjQuMiA1OC41IDE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyYy0zMC41IDAtNDUuOCAzNi45LTI0LjIgNTguNSAxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGMtMjEuNi0yMS42LTU4LjUtNi4zLTU4LjUgMjQuMiAwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmMwLTMwLjUtMzYuOS00NS44LTU4LjUtMjQuMi0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0M3Ny44IDI2MC45IDYyLjUgMjI0IDMyIDIyNCAxNC4zIDIyNCAwIDIwOS43IDAgMTkyczE0LjMtMzIgMzItMzJjMzAuNSAwIDQ1LjgtMzYuOSAyNC4yLTU4LjUtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEMxMjMuMSA3Ny44IDE2MCA2Mi41IDE2MCAzMiAxNjAgMTQuMyAxNzQuMyAwIDE5MiAwek0xNDQgMTc2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMTI4IDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTI0OCA0MGMwIDIyLjkgMjcuNyAzNC40IDQzLjkgMTguMiA5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjljLTE2LjIgMTYuMi00LjcgNDMuOSAxOC4yIDQzLjkgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTIyLjkgMC0zNC40IDI3LjctMTguMiA0My45IDkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBjLTE2LjItMTYuMi00My45LTQuNy00My45IDE4LjIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0yMi45LTI3LjctMzQuNC00My45LTE4LjItOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWMxNi4yLTE2LjIgNC43LTQzLjktMTguMi00My45LTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMjIuOSAwIDM0LjQtMjcuNyAxOC4yLTQzLjktOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwYzE2LjIgMTYuMiA0My45IDQuNyA0My45LTE4LjIgMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpNNTA0IDM4NGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFTY2hvb2xGbGFnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjaG9vbC1mbGFnIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1NmUiLCAiTTI1Ni04YzAtMTMuMyAxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTcyIDAgMCAxOS4yIDEyOCA3Ni44IDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwIDEyOC03Ni44IDAtOTEuMnpNMjQwIDM4NGwwIDgwIDk2IDAgMC04MGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHpNMTEyIDQxNmM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwem0xNi0xNDRsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnpNNDk2IDQxNmM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwem0xNi0xNDRsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnptLTIyNCAwYTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnoiXQogICAgfTsKICAgIGZhVHJhZGVtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyYWRlbWFyayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzg0ODJdLCAiZjI1YyIsICJNMzQ2LjYgMTEwLjJjLTcuOC0xMS43LTIyLjQtMTctMzUuOS0xMi45UzI4OCAxMTMuOSAyODggMTI4bDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNTAuMyA2OS40IDEwNC4xYzUuOSA4LjkgMTUuOSAxNC4yIDI2LjYgMTQuMnMyMC43LTUuMyAyNi42LTE0LjJMNTQ0IDIzMy43IDU0NCAzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI1NmMwLTE0LjEtOS4yLTI2LjUtMjIuNy0zMC42cy0yOC4xIDEuMS0zNS45IDEyLjlMNDQ4IDI2Mi4zIDM0Ni42IDExMC4yek0zMiA5NkMxNC4zIDk2IDAgMTEwLjMgMCAxMjhzMTQuMyAzMiAzMiAzMmw2NCAwIDAgMjI0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yMjQgNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA5NnoiXQogICAgfTsKICAgIGZhRmlyZUJ1cm5lciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaXJlLWJ1cm5lciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGYxIiwgIk0yODEuNyA0OC4zTDI5NCAzNC41YzUuNC02LjEgMTMuMy04LjggMjAuOS04LjkgNy4yIDAgMTQuMyAyLjYgMTkuOSA3LjggMTkuNyAxOC4zIDM5LjggNDMuMiA1NSA3MC42IDE1LjEgMjcuMiAyNi4yIDU4LjEgMjYuMiA4OC4xIDAgODguNy03MS4zIDE1OS44LTE2MCAxNTkuOC04OS42IDAtMTYwLTcxLjMtMTYwLTE1OS44IDAtMzcuMyAxNi03My40IDM2LjgtMTA0LjUgMjAuOS0zMS4zIDQ3LjUtNTkgNzAuOS04MC4yIDUuNy01LjIgMTMuMS03LjcgMjAuMy03LjVzMTMuNCAzLjIgMTguOCA3LjVjMTQuNCAxMS40IDM4LjkgNDAuNyAzOC45IDQwLjd6TTMyMCAyNDAuMmMwLTM2LjUtMzctNzMtNTQuOC04OC40LTUuNC00LjctMTMuMS00LjctMTguNSAwLTE3LjcgMTUuNC01NC44IDUxLjktNTQuOCA4OC40IDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6TTkyLjggMzIwYzM3LjcgNDguMyA5Ni4xIDgwIDE2My4yIDgwIDY2LjUgMCAxMjUuMS0zMS43IDE2My04MGw0NSAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNjRjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTY0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDQ0LjggMHpNNDU2IDQwMGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFGYWNlU21pbGVCZWFtMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXNtaWxlLWJlYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjIsICJzbWlsZS1iZWFtIl0sICJmNWI4IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTY1LjQgMzIxLjljMjAuNCAyOCA1My40IDQ2LjEgOTAuNiA0Ni4xczcwLjItMTguMSA5MC42LTQ2LjFjNy44LTEwLjcgMjIuOC0xMy4xIDMzLjUtNS4zczEzLjEgMjIuOCA1LjMgMzMuNUMzNTYuMyAzOTAgMzA5LjIgNDE2IDI1NiA0MTZzLTEwMC4zLTI2LTEyOS40LTY1LjljLTcuOC0xMC43LTUuNC0yNS43IDUuMy0zMy41czI1LjctNS40IDMzLjUgNS4zek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXQogICAgfTsKICAgIGZhU21pbGVCZWFtMiA9IGZhRmFjZVNtaWxlQmVhbTI7CiAgICBmYVRlbnRBcnJvd0xlZnRSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW50LWFycm93LWxlZnQtcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU3ZiIsICJNLS41IDExM2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNzItNzJjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC0zMSAzMSAzMTAuMSAwIDU0LjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC03MiA3MmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0xMDIuMSAwLS4xIDAtMjYyIDAgMzEgMzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNzItNzJ6TTM3LjEgNDc2TDYwLjMgMjkyLjZjMS4yLTkuNyA2LjgtMTguMyAxNS4xLTIzLjNMMjM4LjggMTcwYzEwLjItNi4yIDIyLjktNi4yIDMzLjEtLjFsMTY1LjUgOTkuNGM4LjQgNSAxNCAxMy43IDE1LjMgMjMuNEw0NzUuOSA0NzZjMi40IDE5LjEtMTIuNSAzNi0zMS43IDM2bC03MS45IDBjLTEyLjEgMC0yMy4yLTYuOC0yOC42LTE3LjdMMjc1LjQgMzU3LjljLTEuOC0zLjYtNS41LTUuOS05LjUtNS45LTUuOSAwLTEwLjYgNC43LTEwLjYgMTAuNmwwIDExNy40YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDY4LjggNTEyYy0xOS4zIDAtMzQuMi0xNi45LTMxLjctMzZ6Il0KICAgIH07CiAgICBmYVJvdXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvdXRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZDciLCAiTTUxMiA5NmMwIDUwLjItNTkuMSAxMjUuMS04NC42IDE1NS0zLjggNC40LTkuNCA2LjEtMTQuNSA1TDMyMCAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NmwtMjc2LjQgMGM4LjctOS45IDE5LjMtMjIuNiAzMC0zNi44IDYuMy04LjQgMTIuOC0xNy42IDE5LTI3LjJMNDE2IDQ0OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMGMtNTMgMC05Ni00My05Ni05NnM0My05NiA5Ni05NmwzOS44IDBjLTIxLTMxLjUtMzkuOC02Ny43LTM5LjgtOTYgMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NnpNMTE3LjEgNDg5LjFjLTMuOCA0LjMtNy4yIDguMS0xMC4xIDExLjNsLTEuOCAyLS4yLS4yYy02IDQuNi0xNC42IDQtMjAtMS44LTI1LjItMjcuNC04NS05Ny45LTg1LTE0OC40IDAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCAzMC0yMS4xIDY3LTQzLjUgOTcuOS0xMC43IDE0LjctMjEuNyAyOC0zMC44IDM4LjVsLS42IC43ek0xMjggMzUyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTQxNiAxMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFBbmdsZXNVcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmdsZXMtdXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiYW5nbGUtZG91YmxlLXVwIl0sICJmMTAyIiwgIk0yMTQuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxOTIgMTA5LjMgMzI5LjQgMjQ2LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MHptMTYwIDM1MmwtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTkyIDMwMS4zIDMyOS40IDQzOC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjN6Il0KICAgIH07CiAgICBmYUFuZ2xlRG91YmxlVXAgPSBmYUFuZ2xlc1VwOwogICAgZmFCdWNrZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVja2V0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU0Y2YiLCAiTTQ0My43IDIwOGMyLjcgNC43IDQuMyAxMC4yIDQuMyAxNiAwIDE3LjctMTQuMyAzMi0zMiAzMmwtNS4xIDAtMjIuNCAyMTNjLTIuNiAyNC40LTIzLjIgNDMtNDcuOCA0M2wtMjMzLjYgMGMtMjQuNiAwLTQ1LjItMTguNS00Ny44LTQzTDM3LjEgMjU2IDMyIDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzIgMC01LjggMS42LTExLjMgNC4zLTE2bDQzOS40IDB6TTIyNC0xNmM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NGwwIDMyLTQ4IDAgMC0zMmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmwwIDMyLTQ4IDAgMC0zMkM4MCA0OC41IDE0NC41LTE2IDIyNC0xNnoiXQogICAgfTsKICAgIGZhTGVzc1RoYW5FcXVhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsZXNzLXRoYW4tZXF1YWwiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjUzNyIsICJNNDI2LjEgOTQuNGMxNi44LTUuNiAyNS44LTIzLjcgMjAuMi00MC41cy0yMy43LTI1LjgtNDAuNS0yMC4ybC0zODQgMTI4QzguOCAxNjYgMCAxNzguMiAwIDE5MnM4LjggMjYgMjEuOSAzMC40bDM4NCAxMjhjMTYuOCA1LjYgMzQuOS0zLjUgNDAuNS0yMC4ycy0zLjUtMzQuOS0yMC4yLTQwLjVMMTMzLjIgMTkyIDQyNi4xIDk0LjR6TTMyIDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0MTZ6Il0KICAgIH07CiAgICBmYUZvbGRlckNsb3NlZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9sZGVyLWNsb3NlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMTg1IiwgIk00NDggNDQ4TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYgNTEyIDAgMCAxNzZjMCAzNS4zLTI4LjcgNjQtNjQgNjR6bTY0LTI4OEwwIDE2MCAwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDEzOC43IDBjMTMuOCAwIDI3LjMgNC41IDM4LjQgMTIuOGwzOC40IDI4LjhjNS41IDQuMiAxMi4zIDYuNCAxOS4yIDYuNEw0NDggODBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNnoiXQogICAgfTsKICAgIGZhUGVyc29uVGhyb3VnaFdpbmRvdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tdGhyb3VnaC13aW5kb3ciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTVhOSIsICJNNjQgNjRsMjI0IDAgMCA5LjhjMCAzOS0yMy43IDc0LTU5LjkgODguNC02MC41IDI0LjItMTAwLjEgODIuNy0xMDAuMSAxNDcuOWwwIDczLjgtNjQgMCAwLTMyMHptMjg4IDBsMjI0IDAgMCAzMjAtNjcuNyAwLTMuNy00LjUtNzUuMi05MC4yYy05LjEtMTAuOS0yMi42LTE3LjMtMzYuOS0xNy4zbC03MS4xIDAtNDEtNjMuMWMtLjMtLjUtLjYtMS0xLTEuNCA0NC43LTI5IDcyLjUtNzkgNzIuNS0xMzMuNmwwLTkuOHptNzMgMzIwbC0yNi42IDAgNDIuNyA2NCAxNTAuOSAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4TDAgNDAwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDI2MC4yIDAgMzMuMiA0OS44YzkuOCAxNC43IDI5LjcgMTguNyA0NC40IDguOXMxOC43LTI5LjcgOC45LTQ0LjRsLTg0LjItMTI2LjIgNzQuNiAwIDQwIDQ4em0tMTU5LjUgMGwtNzMuNSAwIDAtNzMuOGMwLTEwLjIgMS42LTIwLjEgNC43LTI5LjVMMjY1LjUgMzg0ek0xOTIgMTI4YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il0KICAgIH07CiAgICBmYVNjaG9vbExvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2Nob29sLWxvY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU2ZiIsICJNMCAxOTJjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjQgMCAxMjcuOS0xMTUuMWMxOC4zLTE2LjQgNDYtMTYuNCA2NC4yIDBMNDQ4IDEyOCA1MTIgMTI4YzMzIDAgNjAuMiAyNSA2My42IDU3LjItMTQuNy01LjktMzAuOC05LjItNDcuNi05LjItNzAuNyAwLTEyOCA1Ny4zLTEyOCAxMjhsMCAyNC40Yy0xOS42IDE3LjYtMzIgNDMuMS0zMiA3MS41bDAgOTZjMCA1LjUgLjUgMTAuOSAxLjMgMTYuMUw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTkyek0zMzIuMyAzNDEuNWMtNi0zLjUtMTIuOS01LjUtMjAuMy01LjVsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwbDAgODggOTYgMCAwLTY0LjFjMC0yMC44IDQuNC00MC41IDEyLjMtNTguNHpNMTEyIDM4NGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwem0xNi0xNDRsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnptMjI0LTQ4YTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpNNTYwIDM1MmwwLTQ3LjljMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDB6bS0xMTIgMi43bDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zeiJdCiAgICB9OwogICAgZmFQZXJzb25CdXJzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tYnVyc3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUzYiIsICJNMjA0IDQwLjFjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0ek00IDE0NC4xYzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek05Ni41IDI4NS41Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMzLjktMzMuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMOTYuNSAyODUuNXpNNjIuNiAyLjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMzMuOSAzMy45YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMNjIuNiAzNi42Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpNMzUyLjQtMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTQ3OC43IDI5OS4xbC00Ni4zLTYyLjQgMCAyNzUuM2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI3NS4zLTQ2LjMgNjIuNGMtMTAuNSAxNC4yLTMwLjYgMTcuMi00NC44IDYuNnMtMTcuMi0zMC42LTYuNi00NC44bDcwLjUtOTVjMjUuMi0zMy45IDY1LTUzLjkgMTA3LjItNTMuOXM4MiAyMCAxMDcuMiA1My45bDcwLjUgOTVjMTAuNSAxNC4yIDcuNiAzNC4yLTYuNiA0NC44cy0zNC4yIDcuNi00NC44LTYuNnoiXQogICAgfTsKICAgIGZhTGVmdExvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGVmdC1sb25nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImxvbmctYXJyb3ctYWx0LWxlZnQiXSwgImYzMGEiLCAiTTkuNCAyNzguNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsMTI4LTEyOGM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOVMxOTIgMTE1LjEgMTkyIDEyOGwwIDY0IDMzNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMzNiAwIDAgNjRjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTEyOC0xMjh6Il0KICAgIH07CiAgICBmYUxvbmdBcnJvd0FsdExlZnQgPSBmYUxlZnRMb25nOwogICAgZmFMb2NhdGlvbkNyb3NzaGFpcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibG9jYXRpb24tY3Jvc3NoYWlycyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJsb2NhdGlvbiJdLCAiZjYwMSIsICJNMjg4LTE2YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTguM2M5OC4xIDE0IDE3NS43IDkxLjYgMTg5LjcgMTg5LjdsMTguMyAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOC4zIDBjLTE0IDk4LjEtOTEuNiAxNzUuNy0xODkuNyAxODkuN2wwIDE4LjNjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xOC4zQzE1Ny45IDQ2My43IDgwLjMgMzg2LjEgNjYuMyAyODhMNDggMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE4LjMgMEM4MC4zIDEyNS45IDE1Ny45IDQ4LjMgMjU2IDM0LjNMMjU2IDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xMjggMjU2YTE2MCAxNjAgMCAxIDAgMzIwIDAgMTYwIDE2MCAwIDEgMCAtMzIwIDB6bTE2MC05NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnoiXQogICAgfTsKICAgIGZhTG9jYXRpb24gPSBmYUxvY2F0aW9uQ3Jvc3NoYWlyczsKICAgIGZhUGVyc29uRG90c0Zyb21MaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1kb3RzLWZyb20tbGluZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJkaWFnbm9zZXMiXSwgImY0NzAiLCAiTTE4NCA3MmE3MiA3MiAwIDEgMSAxNDQgMCA3MiA3MiAwIDEgMSAtMTQ0IDB6TTE2MCAyOTkuM2MtMTkuOSAyMi42LTMyIDUyLjItMzIgODQuN2wwIDMyLTY0IDAgMC0zMmMwLTEwNiA4Ni0xOTIgMTkyLTE5MnMxOTIgODYgMTkyIDE5MmwwIDMyLTY0IDAgMC0zMmMwLTMyLjUtMTIuMS02Mi4xLTMyLTg0LjdsMCAxMTYuNy0xOTIgMCAwLTExNi43ek0yMzIgMzg0YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODgtMTA0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTI0IDQ2NGw0NjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6TTY0IDE4NGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwem00MjQgNzJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdCiAgICB9OwogICAgZmFEaWFnbm9zZXMgPSBmYVBlcnNvbkRvdHNGcm9tTGluZTsKICAgIGZhR2F1Z2VTaW1wbGVIaWdoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdhdWdlLXNpbXBsZS1oaWdoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE2NjgsICJ0YWNob21ldGVyIiwgInRhY2hvbWV0ZXItZmFzdCJdLCAiZjYyYSIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMzIwIDk2YzAtMTYuMi02LTMxLjEtMTYtNDIuM2w2OS41LTEzOC45YzUuOS0xMS45IDEuMS0yNi4zLTEwLjctMzIuMnMtMjYuMy0xLjEtMzIuMiAxMC43TDI2MS4xIDI4OC4yYy0xLjctLjEtMy40LS4yLTUuMS0uMi0zNS4zIDAtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0IDY0LTI4LjcgNjQtNjR6Il0KICAgIH07CiAgICBmYVRhY2hvbWV0ZXIgPSBmYUdhdWdlU2ltcGxlSGlnaDsKICAgIGZhVGFjaG9tZXRlckZhc3QgPSBmYUdhdWdlU2ltcGxlSGlnaDsKICAgIGZhQW5nbGVzTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmdsZXMtbGVmdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzE3MSwgImFuZ2xlLWRvdWJsZS1sZWZ0Il0sICJmMTAwIiwgIk05LjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w3Ny4zIDI1NiAyMTQuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MHptMzUyLTE2MGwtMTYwIDE2MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDI2OS4zIDI1NiA0MDYuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMHoiXQogICAgfTsKICAgIGZhQW5nbGVEb3VibGVMZWZ0ID0gZmFBbmdsZXNMZWZ0OwogICAgZmFVcERvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXAtZG93biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzg1OTcsIDExMDIxLCAiYXJyb3dzLWFsdC12Il0sICJmMzM4IiwgIk00MDYuNiA1MDIuNmw5Ni05NmM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0OTIuOSAzNTIgNDgwIDM1MmwtNjQgMCAwLTMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDMyMC02NCAwYy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44cy0yLjIgMjUuNyA2LjkgMzQuOWw5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHpNMTUwLjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45UzE5LjEgMTYwIDMyIDE2MGw2NCAwIDAgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMjAgNjQgMGMxMi45IDAgMjQuNi03LjggMjkuNi0xOS44czIuMi0yNS43LTYuOS0zNC45bC05Ni05NnoiXQogICAgfTsKICAgIGZhQXJyb3dzQWx0ViA9IGZhVXBEb3duOwogICAgZmFCYXR0ZXJ5RW1wdHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmF0dGVyeS1lbXB0eSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJiYXR0ZXJ5LTAiXSwgImYyNDQiLCAiTTExMiAxNjBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDIyNGMwIDguOCA3LjIgMTYgMTYgMTZsNDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjI0YzAtOC44LTcuMi0xNi0xNi0xNmwtNDE2IDB6TTMyIDE3NmMwLTQ0LjIgMzUuOC04MCA4MC04MGw0MTYgMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsMCA0OGMwIDQ0LjItMzUuOCA4MC04MCA4MGwtNDE2IDBjLTQ0LjIgMC04MC0zNS44LTgwLTgwbDAtMjI0eiJdCiAgICB9OwogICAgZmFCYXR0ZXJ5MCA9IGZhQmF0dGVyeUVtcHR5OwogICAgZmFLZXlib2FyZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAia2V5Ym9hcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5ZTNdLCAiZjExYyIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6bTE2IDY0bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0xNzYgMTI4bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTE2MCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYgODBsMjI0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0yMjQgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MC0xNzZjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYgODBsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnptODAtODBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYgODBsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnptODAtODBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTYgODBsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhQ29va2llID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvb2tpZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzg1MF0sICJmNTYzIiwgIk0yNDcuMiAxN2MtMjIuMS0zLjEtNDQuNiAuOS02NC40IDExLjRsLTc0IDM5LjVDODkuMSA3OC40IDczLjIgOTQuOSA2My40IDExNUwyNi43IDE5MC42Yy05LjggMjAuMS0xMyA0Mi45LTkuMSA2NC45bDE0LjUgODIuOGMzLjkgMjIuMSAxNC42IDQyLjMgMzAuNyA1Ny45bDYwLjMgNTguNGMxNi4xIDE1LjYgMzYuNiAyNS42IDU4LjcgMjguN2w4MyAxMS43YzIyLjEgMy4xIDQ0LjYtLjkgNjQuNC0xMS40bDc0LTM5LjVjMTkuNy0xMC41IDM1LjYtMjcgNDUuNC00Ny4ybDM2LjctNzUuNWM5LjgtMjAuMSAxMy00Mi45IDkuMS02NC45bC0xNC42LTgyLjhjLTMuOS0yMi4xLTE0LjYtNDIuMy0zMC43LTU3LjlMMzg4LjkgNTcuNWMtMTYuMS0xNS42LTM2LjYtMjUuNi01OC43LTI4LjdMMjQ3LjIgMTd6TTIwOCAxNDRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0xNDQgMzM2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTIyNC02NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVN0b3B3YXRjaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdG9wd2F0Y2giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5MjAxXSwgImYyZjIiLCAiTTE2OC41IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDI1LjNjLTEwOCAxMS45LTE5MiAxMDMuNS0xOTIgMjE0LjcgMCAxMTkuMyA5Ni43IDIxNiAyMTYgMjE2czIxNi05Ni43IDIxNi0yMTZjMC0zOS44LTEwLjgtNzcuMS0yOS42LTEwOS4ybDI4LjItMjguMmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMjMuNCAyMy40Yy0zMi45LTMwLjItNzUuMi01MC4zLTEyMi01NS41bDAtMjUuMyAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMTIgMHptODAgMTg0bDAgMTA0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il0KICAgIH07CiAgICBmYUVqZWN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVqZWN0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTE2N10sICJmMDUyIiwgIk0yMjQgMzJjMTMuNSAwIDI2LjMgNS42IDM1LjQgMTUuNmwxNzYgMTkyYzEyLjkgMTQgMTYuMiAzNC4zIDguNiA1MS44UzQxOSAzMjAgNDAwIDMyMEw0OCAzMjBjLTE5IDAtMzYuMy0xMS4yLTQzLjktMjguN3MtNC4zLTM3LjcgOC42LTUxLjhsMTc2LTE5MkMxOTcuNyAzNy42IDIxMC41IDMyIDIyNCAzMnpNMCA0MzJjMC0yNi41IDIxLjUtNDggNDgtNDhsMzUyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OHoiXQogICAgfTsKICAgIGZhU2F0ZWxsaXRlRGlzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzYXRlbGxpdGUtZGlzaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODIyNV0sICJmN2MwIiwgIk0yMzIgMGMxNTQuNiAwIDI4MCAxMjUuNCAyODAgMjgwIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTI4LjEtMTAzLjktMjMyLTIzMi0yMzItMTMuMyAwLTI0LTEwLjctMjQtMjRTMjE4LjcgMCAyMzIgMHpNMjA4IDEyMGMwLTEzLjMgMTAuNy0yNCAyNC0yNCAxMDEuNiAwIDE4NCA4Mi40IDE4NCAxODQgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC03NS4xLTYwLjktMTM2LTEzNi0xMzYtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTI2LjQgMTQyLjdjOC44LTE3LjkgMzIuNC0xOS45IDQ2LjUtNS44bDEyOC41IDEyOC41IDMyLTMyYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTMyIDMyIDEyOC41IDEyOC41YzE0LjEgMTQuMSAxMiAzNy42LTUuOCA0Ni41LTM0LjIgMTYuOS03Mi42IDI2LjQtMTEzLjMgMjYuNC0xNDEuNCAwLTI1Ni0xMTQuNi0yNTYtMjU2IDAtNDAuNyA5LjUtNzkuMiAyNi40LTExMy4zeiJdCiAgICB9OwogICAgZmFGYWNlUm9sbGluZ0V5ZXMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Utcm9sbGluZy1leWVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTgwLCAibWVoLXJvbGxpbmctZXllcyJdLCAiZjVhNSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE5MiAzNTJsMTI4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTEyOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0zMi0xMjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0yNiAxNS41LTQ4LjQgMzcuOC01OC40LTMuNyA1LjItNS44IDExLjYtNS44IDE4LjQgMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTYuOS0yLjItMTMuMi01LjgtMTguNCAyMi4zIDEwIDM3LjggMzIuNCAzNy44IDU4LjR6bTEyOCA2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yNiAxNS41LTQ4LjQgMzcuOC01OC40LTMuNyA1LjItNS44IDExLjYtNS44IDE4LjQgMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTYuOS0yLjItMTMuMi01LjgtMTguNCAyMi4zIDEwIDM3LjggMzIuNCAzNy44IDU4LjQgMCAzNS4zLTI4LjcgNjQtNjQgNjR6Il0KICAgIH07CiAgICBmYU1laFJvbGxpbmdFeWVzMiA9IGZhRmFjZVJvbGxpbmdFeWVzMjsKICAgIGZhTGlzdENoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpc3QtY2hlY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsidGFza3MiXSwgImYwYWUiLCAiTTEzMy44IDM2LjNjMTAuOSA3LjYgMTMuNSAyMi42IDUuOSAzMy40bC01NiA4MGMtNC4xIDUuOC0xMC41IDkuNS0xNy42IDEwLjFTNTIgMTU4IDQ3IDE1M0w3IDExM0MtMi4zIDEwMy42LTIuMyA4OC40IDcgNzlTMzEuNiA2OS43IDQxIDc5bDE5LjggMTkuOCAzOS42LTU2LjZjNy42LTEwLjkgMjIuNi0xMy41IDMzLjQtNS45em0wIDE2MGMxMC45IDcuNiAxMy41IDIyLjYgNS45IDMzLjRsLTU2IDgwYy00LjEgNS44LTEwLjUgOS41LTE3LjYgMTAuMVM1MiAzMTggNDcgMzEzTDcgMjczYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMTkuOCAxOS44IDM5LjYtNTYuNmM3LjYtMTAuOSAyMi42LTEzLjUgMzMuNC01Ljl6TTIyNCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjI0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem0wIDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjI0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0xNjAgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI4OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yODggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTY0IDM3NmE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6Il0KICAgIH07CiAgICBmYVRhc2tzID0gZmFMaXN0Q2hlY2s7CiAgICBmYVNhY2tYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzYWNrLXhtYXJrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NmEiLCAiTTMyOCAxMTJsLTE0NCAwLTM3LjMtNzQuNWMtMS44LTMuNi0yLjctNy42LTIuNy0xMS42IDAtMTQuMyAxMS42LTI1LjkgMjUuOS0yNS45TDM0Mi4xIDBjMTQuMyAwIDI1LjkgMTEuNiAyNS45IDI1LjkgMCA0LS45IDgtMi43IDExLjZMMzI4IDExMnpNMTY5LjYgMTYwbDE3Mi44IDAgNDguNyA0MC42QzQ1Ny42IDI1NiA0OTYgMzM4IDQ5NiA0MjQuNSA0OTYgNDcyLjggNDU2LjggNTEyIDQwOC41IDUxMmwtMzA1LjEgMEM1NS4yIDUxMiAxNiA0NzIuOCAxNiA0MjQuNSAxNiAzMzggNTQuNCAyNTYgMTIwLjkgMjAwLjZMMTY5LjYgMTYwek0zMjMuOSAyODQuMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTMzLjkgMzMuOS0zMy45LTMzLjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzMuOSAzMy45LTMzLjkgMzMuOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDMzLjktMzMuOSAzMy45IDMzLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0zMy45LTMzLjkgMzMuOS0zMy45YzkuNC05LjQgOS40LTI0LjYgMC0zMy45eiJdCiAgICB9OwogICAgZmFIYXNodGFnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhc2h0YWciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjA5OF0sICIyMyIsICJNMjE0LjcgLjdjMTcuMyAzLjcgMjguMyAyMC43IDI0LjYgMzhsLTE5LjEgODkuMyAxMjYuNSAwIDIyLTEwMi43QzM3Mi40IDggMzg5LjQtMyA0MDYuNyAuN3MyOC4zIDIwLjcgMjQuNiAzOEw0MTIuMiAxMjggNDgwIDEyOGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtODEuNiAwLTI3LjQgMTI4IDY3LjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtODEuNiAwLTIyIDEwMi43Yy0zLjcgMTcuMy0yMC43IDI4LjMtMzggMjQuNnMtMjguMy0yMC43LTI0LjYtMzhsMTkuMS04OS4zLTEyNi41IDAtMjIgMTAyLjdjLTMuNyAxNy4zLTIwLjcgMjguMy0zOCAyNC42cy0yOC4zLTIwLjctMjQuNi0zOEw5OS44IDM4NCAzMiAzODRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsODEuNiAwIDI3LjQtMTI4LTY3LjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4MS42IDAgMjItMTAyLjdDMTgwLjQgOCAxOTcuNC0zIDIxNC43IC43ek0yMDYuNCAxOTJsLTI3LjQgMTI4IDEyNi41IDAgMjcuNC0xMjgtMTI2LjUgMHoiXQogICAgfTsKICAgIGZhVHJhaW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhaW4iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjg2NDZdLCAiZjIzOCIsICJNMCA5NkMwIDQzIDQzIDAgOTYgMEwyODggMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjU2YzAgNDAuMS0yNC42IDc0LjUtNTkuNSA4OC44bDUzLjkgNjMuN2M4LjYgMTAuMSA3LjMgMjUuMy0yLjggMzMuOHMtMjUuMyA3LjMtMzMuOC0yLjhsLTc0LTg3LjUtMTUxLjMgMC03NCA4Ny41Yy04LjYgMTAuMS0yMy43IDExLjQtMzMuOCAyLjhzLTExLjQtMjMuNy0yLjgtMzMuOGw1My45LTYzLjdDMjQuNiA0MjYuNSAwIDM5Mi4xIDAgMzUyTDAgOTZ6bTY0IDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMkw5NiA5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTE5MiAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFHYW1lcGFkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdhbWVwYWQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjExYiIsICJNNDQ4IDY0YzEwNiAwIDE5MiA4NiAxOTIgMTkyUzU1NCA0NDggNDQ4IDQ0OGwtMjU2IDBDODYgNDQ4IDAgMzYyIDAgMjU2Uzg2IDY0IDE5MiA2NGwyNTYgMHpNMTkyIDE3NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAzMi0zMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMyIDAgMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzIgMzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzIgMCAwLTMyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0yNDAgOTZhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em02NC05NmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6Il0KICAgIH07CiAgICBmYUZpbGVFeHBvcnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1leHBvcnQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiYXJyb3ctcmlnaHQtZnJvbS1maWxlIl0sICJmNTZlIiwgIk05Ni41IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtOTYgNzguMSAwLTMxIDMxYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNzItNzJjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlsLTcyLTcyYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDMxIDMxLTc4LjEgMCAwLTEzMy41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MS4yIDE4LjdDMjc5LjIgNi43IDI2MyAwIDI0NiAwTDk2LjUgMHpNMzU4IDE3NmwtOTMuNSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAuNSA1OC41IDM1OCAxNzZ6TTIyNC41IDMyOGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxMDQgMCAwIDQ4LTEwNCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhQXJyb3dSaWdodEZyb21GaWxlID0gZmFGaWxlRXhwb3J0OwogICAgZmFGYWNlR3JpbWFjZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmltYWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTU2LCAiZ3JpbWFjZSJdLCAiZjU3ZiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTQwMCAzNTJjMCAyNS4yLTE5LjQgNDUuOC00NCA0Ny44bDAtOTUuN2MyNC42IDIgNDQgMjIuNyA0NCA0Ny44ek0yNzYgMzA0bDQwIDAgMCA5Ni00MCAwIDAtOTZ6bS04MCA5NmwwLTk2IDQwIDAgMCA5Ni00MCAwem0tNDAtOTUuOGwwIDk1LjdjLTI0LjYtMi00NC0yMi43LTQ0LTQ3LjhzMTkuNC00NS44IDQ0LTQ3Ljh6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhR3JpbWFjZTIgPSBmYUZhY2VHcmltYWNlMjsKICAgIGZhVHJhaW5TdWJ3YXkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhaW4tc3Vid2F5IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbInN1YndheSJdLCAiZjIzOSIsICJNMCA5NkMwIDQzIDQzIDAgOTYgMEwyODggMGM1MyAwIDk2IDQzIDk2IDk2bDAgMjU2YzAgNDAuMS0yNC42IDc0LjUtNTkuNSA4OC44bDUzLjkgNjMuN2M4LjYgMTAuMSA3LjMgMjUuMy0yLjggMzMuOHMtMjUuMyA3LjMtMzMuOC0yLjhsLTc0LTg3LjUtMTUxLjMgMC03NCA4Ny41Yy04LjYgMTAuMS0yMy43IDExLjQtMzMuOCAyLjhzLTExLjQtMjMuNy0yLjgtMzMuOGw1My45LTYzLjdDMjQuNiA0MjYuNSAwIDM5Mi4xIDAgMzUyTDAgOTZ6bTY0IDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsNzIgMCAwLTE2MC03MiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMjE2IDI1Nmw3MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTcyIDAgMCAxNjB6TTk2IDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTIyNC0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdCiAgICB9OwogICAgZmFTdWJ3YXkgPSBmYVRyYWluU3Vid2F5OwogICAgZmFDaXJjbGVEb3QyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1kb3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyODAsICJkb3QtY2lyY2xlIl0sICJmMTkyIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptMC0zNTJhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6Il0KICAgIH07CiAgICBmYURvdENpcmNsZTIgPSBmYUNpcmNsZURvdDI7CiAgICBmYU9iamVjdEdyb3VwMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJvYmplY3QtZ3JvdXAiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjI0NyIsICJNMzIgMTE5LjRDMTIuOSAxMDguNCAwIDg3LjcgMCA2NCAwIDI4LjcgMjguNyAwIDY0IDAgODcuNyAwIDEwOC40IDEyLjkgMTE5LjQgMzJsMzM3LjEgMGMxMS4xLTE5LjEgMzEuNy0zMiA1NS40LTMyIDM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNGwwIDI3My4xYzE5LjEgMTEuMSAzMiAzMS43IDMyIDU1LjQgMCAzNS4zLTI4LjcgNjQtNjQgNjQtMjMuNyAwLTQ0LjQtMTIuOS01NS40LTMybC0zMzcuMSAwYy0xMS4xIDE5LjEtMzEuNyAzMi01NS40IDMyLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNGwwLTI3My4xem00NDggMGMtOS43LTUuNi0xNy44LTEzLjctMjMuNC0yMy40TDExOS40IDk2Yy01LjYgOS43LTEzLjcgMTcuOC0yMy40IDIzLjRsMCAyNzMuMWM5LjcgNS42IDE3LjggMTMuNyAyMy40IDIzLjRsMzM3LjEgMGM1LjYtOS43IDEzLjctMTcuOCAyMy40LTIzLjRsMC0yNzMuMXpNMTQ0IDE3NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NHpNMjU2IDMyMGwzMiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTEyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTZ6Il0KICAgIH07CiAgICBmYVNoaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hpcCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODY3NF0sICJmMjFhIiwgIk0yNzIgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNi0xNiAwYy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDEwOC44LTIxLjYgOC42Yy0xNC44IDUuOS0yMi41IDIyLjQtMTcuNCAzNy41IDEwLjQgMzEuMyAyNi44IDU5LjMgNDcuNyA4My4xIDIwLjEtOS4yIDQxLjctMTMuOSA2My4zLTE0IDMzLjEtLjIgNjYuMyAxMC4yIDk0LjQgMzEuNGwxLjYgMS4yIDAtMjE1LTEwNCA0MS42IDAtODMuMmMwLTguOCA3LjItMTYgMTYtMTZsMjI0IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODMuMi0xMDQtNDEuNiAwIDIxNSAxLjYtMS4yYzI3LjUtMjAuNyA1OS45LTMxLjIgOTIuNC0zMS40IDIyLjMtLjEgNDQuNiA0LjUgNjUuMyAxNCAyMC45LTIzLjcgMzcuMy01MS44IDQ3LjctODMuMSA1LTE1LjItMi42LTMxLjYtMTcuNC0zNy41TDUxMiAyNTIuOCA1MTIgMTQ0YzAtNDQuMi0zNS44LTgwLTgwLTgwbC0xNiAwIDAtMTZjMC0yNi41LTIxLjUtNDgtNDgtNDhMMjcyIDB6TTQwMy40IDQ3Ni4xYzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDE5IDE0LjQgNDEuOSAyOC4yIDY3LjIgMzMuMyAyNi41IDUuNCA1NC4zIC44IDgwLjctMTkuMSAxMC42LTggMTIuNy0yMyA0LjctMzMuNnMtMjMtMTIuNy0zMy42LTQuN2MtMTQuOSAxMS4yLTI4LjYgMTMuMS00Mi4zIDEwLjMtMTQuOS0zLTMwLjktMTEuOS00Ny44LTI0LjYtMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjEuNiAxNi4zLTQxLjMgMjUuOC01OC45IDI1LjctOS42LS4xLTE5LjktMy0zMS4yLTExLjUtMTAuNi04LTI1LjYtNS45LTMzLjYgNC43UzcgNDgyLjMgMTcuNiA0OTAuM2MxOS4xIDE0LjQgMzkuNCAyMSA1OS44IDIxLjEgMzMuOSAuMiA2NC4zLTE3LjQgODguMS0zNS4zIDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1Ljl6Il0KICAgIH07CiAgICBmYUMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk5XSwgIjQzIiwgIk0zMjkuMSAxNDIuOWMtNjIuNS02Mi41LTE1NS44LTYyLjUtMjE4LjMgMHMtNjIuNSAxNjMuOCAwIDIyNi4zIDE1NS44IDYyLjUgMjE4LjMgMGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zYy04Ny41IDg3LjUtMjIxLjMgODcuNS0zMDguOCAwcy04Ny41LTIyOS4zIDAtMzE2LjggMjIxLjMtODcuNSAzMDguOCAwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAweiJdCiAgICB9OwogICAgZmFTcXVhcmVQaG9uZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGhvbmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsicGhvbmUtc3F1YXJlIl0sICJmMDk4IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem04OCA5Ni43YzkuOC0yLjcgMjAuMSAyLjQgMjQgMTEuOGwyMC4zIDQ4LjdjMy40IDguMyAxLjEgMTcuOC01LjkgMjMuNWwtMjIuMSAxOGMxNi4yIDM1LjggNDQuNSA2NSA3OS42IDgyLjRsMTkuMy0yMy42YzUuNy02LjkgMTUuMi05LjMgMjMuNS01LjlsNDguNyAyMC4zYzkuNCAzLjkgMTQuNCAxNC4yIDExLjggMjRsLS44IDIuOGMtOC44IDMyLjMtNDAuMSA1OS45LTc4LjIgNTEuOC04Ny41LTE4LjUtMTU2LjMtODcuNC0xNzQuOS0xNzQuOS04LjEtMzguMSAxOS41LTY5LjQgNTEuOC03OC4ybDIuOC0uOHoiXQogICAgfTsKICAgIGZhUGhvbmVTcXVhcmUgPSBmYVNxdWFyZVBob25lOwogICAgZmFSdWxlckNvbWJpbmVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJ1bGVyLWNvbWJpbmVkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1NDYiLCAiTTEgNDQxLjdDNS41IDQ2My41IDI0LjggNDgwIDQ4IDQ4MGwzNTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC00OCAwIDAgNzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC03Mi02NCAwIDAgNzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC03Mi03MiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDcyIDAgMC02NC03MiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDcyIDAgMC00OGMwLTI2LjUtMjEuNS00OC00OC00OEw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyYzAgMy4zIC4zIDYuNiAxIDkuN3oiXQogICAgfTsKICAgIGZhQXJyb3dzUm90YXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy1yb3RhdGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0NzIsICJyZWZyZXNoIiwgInN5bmMiXSwgImYwMjEiLCAiTTY1LjkgMjI4LjVjMTMuMy05MyA5My40LTE2NC41IDE5MC4xLTE2NC41IDUzIDAgMTAxIDIxLjUgMTM1LjggNTYuMiAuMiAuMiAuNCAuNCAuNiAuNmw3LjYgNy4yLTQ3LjkgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDUzLjQtMTEuMy0xMC43QzM5MC41IDI4LjYgMzI2LjUgMCAyNTYgMCAxMjcgMCAyMC4zIDk1LjQgMi42IDIxOS41IC4xIDIzNyAxMi4yIDI1My4yIDI5LjcgMjU1LjdzMzMuNy05LjcgMzYuMi0yNy4xem00NDMuNSA2NGMyLjUtMTcuNS05LjctMzMuNy0yNy4xLTM2LjJzLTMzLjcgOS43LTM2LjIgMjcuMWMtMTMuMyA5My05My40IDE2NC41LTE5MC4xIDE2NC41LTUzIDAtMTAxLTIxLjUtMTM1LjgtNTYuMi0uMi0uMi0uNC0uNC0uNi0uNmwtNy42LTcuMiA0Ny45IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzIwYy04LjUgMC0xNi43IDMuNC0yMi43IDkuNVMtLjEgMzQzLjcgMCAzNTIuM2wxIDEyN2MuMSAxNy43IDE0LjYgMzEuOSAzMi4zIDMxLjdTNjUuMiA0OTYuNCA2NSA0NzguN2wtLjQtNTEuNSAxMC43IDEwLjFjNDYuMyA0Ni4xIDExMC4yIDc0LjcgMTgwLjcgNzQuNyAxMjkgMCAyMzUuNy05NS40IDI1My40LTIxOS41eiJdCiAgICB9OwogICAgZmFSZWZyZXNoID0gZmFBcnJvd3NSb3RhdGU7CiAgICBmYVN5bmMgPSBmYUFycm93c1JvdGF0ZTsKICAgIGZhUGVyc29uRHJlc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWRyZXNzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImZlbWFsZSJdLCAiZjE4MiIsICJNMTM2IDI0YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMTEyIDM4NGwtMjUuOCAwYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMWw0My0xMjktNDguMyA2NS4xYy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NUMxMTAgMTMyIDE0OS43IDExMiAxOTIgMTEyczgyIDIwIDEwNy4yIDUzLjlsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42TDI3MCAyMzQgMzEzIDM2Mi45YzMuNSAxMC40LTQuMyAyMS4xLTE1LjIgMjEuMWwtMjUuOCAwIDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTI4LTMyIDAgMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjh6Il0KICAgIH07CiAgICBmYUZlbWFsZSA9IGZhUGVyc29uRHJlc3M7CiAgICBmYUJvb2tPcGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2stb3BlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODIxNCwgMTI4MzY2XSwgImY1MTgiLCAiTTI1NiAxNDEuM2wwIDMwOS4zIC41LS4yQzMxMS4xIDQyNy43IDM2OS43IDQxNiA0MjguOCA0MTZsMTkuMiAwIDAtMzIwLTE5LjIgMGMtNDIuMiAwLTg0LjEgOC40LTEyMy4xIDI0LjYtMTYuOCA3LTMzLjQgMTMuOS00OS43IDIwLjd6TTIzMC45IDYxLjVMMjU2IDcyIDI4MS4xIDYxLjVDMzI3LjkgNDIgMzc4LjEgMzIgNDI4LjggMzJMNDY0IDMyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zNS4yIDBjLTUwLjcgMC0xMDAuOSAxMC0xNDcuNyAyOS41bC0xMi44IDUuM2MtNy45IDMuMy0xNi43IDMuMy0yNC42IDBsLTEyLjgtNS4zQzE4NC4xIDQ5MCAxMzMuOSA0ODAgODMuMiA0ODBMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDM1LjIgMGM1MC43IDAgMTAwLjkgMTAgMTQ3LjcgMjkuNXoiXQogICAgfTsKICAgIGZhRm9sZGVyVHJlZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb2xkZXItdHJlZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmODAyIiwgIk00OCAyNEM0OCAxMC43IDM3LjMgMCAyNCAwUzAgMTAuNyAwIDI0TDAgMzkyYzAgMzAuOSAyNS4xIDU2IDU2IDU2bDE4NCAwIDAtNDgtMTg0IDBjLTQuNCAwLTgtMy42LTgtOGwwLTIzMiAxOTIgMCAwLTQ4LTE5MiAwIDAtODh6TTMzNiAyMjRsMTkyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NmMwLTI2LjUtMjEuNS00OC00OC00OGwtODIuNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtOC42LTguNmMtOS05LTIxLjItMTQuMS0zMy45LTE0LjFMMzM2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTI4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4em0wIDI4OGwxOTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC04Mi43IDBjLTguNSAwLTE2LjYtMy40LTIyLjYtOS40bC04LjYtOC42Yy05LTktMjEuMi0xNC4xLTMzLjktMTQuMUwzMzYgMjg4Yy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDEyOGMwIDI2LjUgMjEuNSA0OCA0OCA0OHoiXQogICAgfTsKICAgIGZhQm94QXJjaGl2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3gtYXJjaGl2ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhcmNoaXZlIl0sICJmMTg3IiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDQ0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgMTI4QzE0LjMgMTI4IDAgMTEzLjcgMCA5NkwwIDY0ek0zMiAxNzZsNDQ4IDAgMCAyNDBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTI0MHptMTUyIDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXQogICAgfTsKICAgIGZhQXJjaGl2ZSA9IGZhQm94QXJjaGl2ZTsKICAgIGZhVGVudEFycm93RG93blRvTGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW50LWFycm93LWRvd24tdG8tbGluZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTdlIiwgIk0xODUgMTIxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTMxIDMxIDAtMTAyLjFDMTIwIDIuNyAxMDkuMy04IDk2LThTNzIgMi43IDcyIDE2bDAgMTAyLjEtMzEtMzFDMzEuNiA3Ny43IDE2LjQgNzcuNyA3IDg3Uy0yLjMgMTExLjYgNyAxMjFsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNzItNzJ6TTE1NS44IDI2MC42TDEzMi4xIDQ0OCAzMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzIgMC0yLjgtLjQtNS41LTEtOEw1NDguMiAyNjAuN2MtMS4yLTkuNy02LjktMTguNC0xNS4zLTIzLjRMMzY3LjQgMTM3LjljLTEwLjItNi4xLTIyLjktNi4xLTMzLjEgLjFMMTcwLjkgMjM3LjNjLTguMyA1LjEtMTMuOSAxMy43LTE1LjEgMjMuM3pNNDQ4IDQ0OGwtOTcuMSAwIDAtMTQ5LjRjMC01LjkgNC43LTEwLjYgMTAuNi0xMC42IDQgMCA3LjcgMi4zIDkuNSA1LjlMNDQ4IDQ0OHoiXQogICAgfTsKICAgIGZhUXJjb2RlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInFyY29kZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDI5IiwgIk02NCAxNjBsNjQgMCAwLTY0LTY0IDAgMCA2NHpNMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTk2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODB6TTY0IDQxNmw2NCAwIDAtNjQtNjQgMCAwIDY0ek0wIDMzNmMwLTI2LjUgMjEuNS00OCA0OC00OGw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTk2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6TTMyMCA5NmwwIDY0IDY0IDAgMC02NC02NCAwek0zMDQgMzJsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC05NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4ek0yODggMzUyYTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptMCA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMi0zMi0xNC4zLTMyLTMyIDE0LjMtMzIgMzItMzJ6bTk2IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzItMTQuMyAzMi0zMiAzMi0zMi0xNC4zLTMyLTMyem0zMi05NmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bS0zMiAzMmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAweiJdCiAgICB9OwogICAgZmFEcmFnb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHJhZ29uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MDA5XSwgImY2ZDUiLCAiTTM1MiAxMjQuNWwtNTEuOS0xM2MtNi41LTEuNi0xMS4zLTcuMS0xMi0xMy44czIuOC0xMy4xIDguNy0xNi4xbDQwLjgtMjAuNC00My4zLTMyLjVjLTUuNS00LjEtNy44LTExLjMtNS42LTE3LjlTMjk3LjEgMCAzMDQgMEw0NjQgMGMzMC4yIDAgNTguNyAxNC4yIDc2LjggMzguNGw1Ny42IDc2LjhjNi4yIDguMyA5LjYgMTguNCA5LjYgMjguOCAwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjEuNSAwYy0xNyAwLTMzLjMtNi43LTQ1LjMtMTguN2wtMTMuMy0xMy4zLTMyIDAgMCAyMS41YzAgMjQuOCAxMi44IDQ3LjkgMzMuOCA2MS4xbDEwNi42IDY2LjZjMzIuMSAyMC4xIDUxLjYgNTUuMiA1MS42IDkzLjEgMCA2MC42LTQ5LjEgMTA5LjgtMTA5LjggMTA5LjhMMzIuMyA1MTJjLTMuMyAwLTYuNi0uNC05LjYtMS40LTkuMi0yLjgtMTYuNy05LjYtMjAuNC0xOC42LTEuMy0zLjMtMi4yLTYuOS0yLjMtMTAuNy0uMi0zLjcgLjMtNy4zIDEuMy0xMC43IDIuOC05LjIgOS42LTE2LjcgMTguNi0yMC40IDMtMS4yIDYuMi0yIDkuNS0yLjJMNDMzLjMgNDEyYzguMy0uNyAxNC43LTcuNyAxNC43LTE2LjEgMC00LjMtMS43LTguNC00LjctMTEuNGwtNDQuNC00NC40Yy0zMC0zMC00Ni45LTcwLjctNDYuOS0xMTMuMWwwLTEwMi41ek01MTIgNzIuM2MwLS4xIDAtLjIgMC0uM3MwLS4yIDAtLjNsMCAuNnptLTEuMyA3LjRMNDY0LjMgNjguMWMtLjIgMS4zLS4zIDIuNi0uMyAzLjkgMCAxMy4zIDEwLjcgMjQgMjQgMjQgMTAuNiAwIDE5LjUtNi44IDIyLjctMTYuM3pNMTMwLjkgMTE2LjVjMTYuMy0xNC41IDQwLjQtMTYuMiA1OC41LTQuMWwxMzAuNiA4NyAwIDI3LjVjMCAzMi44IDguNCA2NC44IDI0IDkzbC0yMzIgMGMtNi43IDAtMTIuNy00LjItMTUtMTAuNHMtLjUtMTMuMyA0LjYtMTcuN0wxNzEgMjMyLjMgMTguNCAyNTUuOGMtNyAxLjEtMTMuOS0yLjYtMTYuOS05Uy4xIDIzMi44IDUuNCAyMjhMMTMwLjkgMTE2LjV6Il0KICAgIH07CiAgICBmYUhvdXJnbGFzc0VuZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VyZ2xhc3MtZW5kIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbODk4NywgImhvdXJnbGFzcy0zIl0sICJmMjUzIiwgIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDAgMTFjMCA0Mi40IDE2LjkgODMuMSA0Ni45IDExMy4xbDY3LjkgNjcuOS02Ny45IDY3LjlDNDguOSAzNTMuOSAzMiAzOTQuNiAzMiA0MzdsMCAxMWMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTExYzAtNDIuNC0xNi45LTgzLjEtNDYuOS0xMTMuMWwtNjcuOS02Ny45IDY3LjktNjcuOWMzMC0zMCA0Ni45LTcwLjcgNDYuOS0xMTMuMWwwLTExYzE3LjcgMCAzMi0xNC4zIDMyLTMyUzM2OS43IDAgMzUyIDBMMzIgMHpNOTYgNzVsMC0xMSAxOTIgMCAwIDExYzAgMjUuNS0xMC4xIDQ5LjktMjguMSA2Ny45bC02Ny45IDY3LjktNjcuOS02Ny45QzEwNi4xIDEyNC45IDk2IDEwMC40IDk2IDc1eiJdCiAgICB9OwogICAgZmFIb3VyZ2xhc3MzMiA9IGZhSG91cmdsYXNzRW5kOwogICAgZmFHcmlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdyaXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs1ODExOSwgImdyaWQtaG9yaXpvbnRhbCIsICJncmlwLWhvcml6b250YWwiXSwgImY1OGQiLCAiTTg4IDk2YzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMHpNMjgwIDIyNGwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDB6bTE5MiAwbC00OCAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MHptMCAxOTJsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDQ4YzAgMjIuMS0xNy45IDQwLTQwIDQwek0yODAgMjg4YzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMHpNODggNDE2bC00OCAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MHoiXQogICAgfTsKICAgIGZhR3JpZEhvcml6b250YWwgPSBmYUdyaXA7CiAgICBmYUdyaXBIb3Jpem9udGFsID0gZmFHcmlwOwogICAgZmFCb3JkZXJUb3BMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvcmRlci10b3AtbGVmdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJib3JkZXItc3R5bGUiXSwgImY4NTMiLCAiTTAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNTIgMzUyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQ0OHptMTI4IDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMi0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzJ6bTEyOCAwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzItMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyem0xNjAgMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyek0zODQgMTkyYTMyIDMyIDAgMSAwIDY0IDAgMzIgMzIgMCAxIDAgLTY0IDB6bTMyIDE2MGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUJvcmRlclN0eWxlID0gZmFCb3JkZXJUb3BMZWZ0OwogICAgZmFMaXN0VWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGlzdC11bCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJsaXN0LWRvdHMiXSwgImYwY2EiLCAiTTQ4IDE0NGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTE5MiA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwxOTIgNjR6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yODggMHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI4OCAwek00OCA0NjRhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek05NiAyNTZhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXQogICAgfTsKICAgIGZhTGlzdERvdHMgPSBmYUxpc3RVbDsKICAgIGZhUGVvcGxlUm9iYmVyeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW9wbGUtcm9iYmVyeSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTM2IiwgIk00ODguMiA1OS4xQzQ3OC4xIDk5LjYgNDQxLjcgMTI4IDQwMCAxMjhzLTc4LjEtMjguNC04OC4yLTY4LjlMMzAzIDI0LjJDMjk4LjggNy4xIDI4MS40LTMuMyAyNjQuMiAxUzIzNi43IDIyLjYgMjQxIDM5LjhsOC43IDM0LjljMTEgNDQgNDAuMiA3OS42IDc4LjMgOTkuNkwzMjggNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjggMTYgMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzA1LjdjMzguMS0yMCA2Ny4zLTU1LjYgNzguMy05OS42TDU1OSAzOS44YzQuMy0xNy4xLTYuMS0zNC41LTIzLjMtMzguOFM1MDEuMiA3LjEgNDk3IDI0LjJsLTguNyAzNC45ek00MDAgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek04MCA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6bS04IDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDk2IDAgLjYgMCAxOTEuNGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4IDE2IDAgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIyNy4zIDEzIDIwLjVjNS45IDkuMiAxNi4xIDE0LjkgMjcgMTQuOWw0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMC40IDAtMzcuNC01OC45QzE1Ny42IDE0MiAxMzIuMSAxMjggMTA0LjcgMTI4TDcyIDEyOHoiXQogICAgfTsKICAgIGZhTW9iaWxlQnV0dG9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vYmlsZS1idXR0b24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjEwYiIsICJNODAgMEM0NC43IDAgMTYgMjguNyAxNiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw4MCAwek0xOTIgNDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyIDMyIDE0LjMgMzIgMzItMTQuMyAzMi0zMiAzMnoiXQogICAgfTsKICAgIGZhQXJyb3dEb3duQVogPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctZG93bi1hLXoiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic29ydC1hbHBoYS1hc2MiLCAic29ydC1hbHBoYS1kb3duIl0sICJmMTVkIiwgIk0yMzAuNiAzOTAuNmwtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC04MC04MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEw5NiAzNzAuNyA5NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzA2LjcgMjUuNC0yNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6bTE4Mi0zNDAuOWM1MC43IDEwMS4zIDc3LjMgMTU0LjcgODAgMTYwIDcuOSAxNS44IDEuNSAzNS0xNC4zIDQyLjlzLTM1IDEuNS00Mi45LTE0LjNsLTcuMi0xNC4zLTg4LjQgMC03LjIgMTQuM2MtNy45IDE1LjgtMjcuMSAyMi4yLTQyLjkgMTQuM3MtMjIuMi0yNy4xLTE0LjMtNDIuOWMyLjctNS4zIDI5LjMtNTguNyA4MC0xNjAgNS40LTEwLjggMTYuNS0xNy43IDI4LjYtMTcuN3MyMy4yIDYuOCAyOC42IDE3Ljd6TTM4NCAxMzUuNmwtMjAuMiA0MC40IDQwLjQgMC0yMC4yLTQwLjR6TTI4OCAzMjBjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOUwzOTcuMyA0MTYgNDQ4IDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45bDczLjQtNzMuNC01MC43IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFTb3J0QWxwaGFBc2MgPSBmYUFycm93RG93bkFaOwogICAgZmFTb3J0QWxwaGFEb3duID0gZmFBcnJvd0Rvd25BWjsKICAgIGZhTW9uZXlCaWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vbmV5LWJpbGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBkNiIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6bTE5MiA5NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnptMTkyIDI0YzAgNC40LTMuNiA4LjEtOCA3LjUtMjktMy42LTUxLjktMjYuNi01NS41LTU1LjUtLjUtNC40IDMuMS04IDcuNS04bDQ4IDBjNC40IDAgOCAzLjYgOCA4bDAgNDh6TTY0IDMyOGMwLTQuNCAzLjYtOC4xIDgtNy41IDI5IDMuNiA1MS45IDI2LjYgNTUuNSA1NS41IC41IDQuNC0zLjEgOC03LjUgOGwtNDggMGMtNC40IDAtOC0zLjYtOC04bDAtNDh6bTgtMTM2LjVjLTQuNCAuNS04LTMuMS04LTcuNWwwLTQ4YzAtNC40IDMuNi04IDgtOGw0OCAwYzQuNCAwIDguMSAzLjYgNy41IDgtMy42IDI5LTI2LjYgNTEuOS01NS41IDU1LjV6bTM2OCAxMjljNC40LS41IDggMy4xIDggNy41bDAgNDhjMCA0LjQtMy42IDgtOCA4bC00OCAwYy00LjQgMC04LjEtMy42LTcuNS04IDMuNi0yOSAyNi42LTUxLjkgNTUuNS01NS41eiJdCiAgICB9OwogICAgZmFDaXJjbGVNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtbWludXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibWludXMtY2lyY2xlIl0sICJmMDU2IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTY4IDIzMmwxNzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYU1pbnVzQ2lyY2xlID0gZmFDaXJjbGVNaW51czsKICAgIGZhQXJyb3dQb2ludGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXBvaW50ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsibW91c2UtcG9pbnRlciJdLCAiZjI0NSIsICJNNzcuMyAyLjVjOC4xLTQuMSAxNy45LTMuMiAyNS4xIDIuM2wzMjAgMjM5LjljOC4zIDYuMiAxMS42IDE3IDguNCAyNi44cy0xMi40IDE2LjQtMjIuOCAxNi40bC0xNTIuMyAwIDg4LjkgMTc3LjdjNy45IDE1LjggMS41IDM1LTE0LjMgNDIuOXMtMzUgMS41LTQyLjktMTQuM2wtODguOS0xNzcuNy05MS4zIDEyMS44Yy02LjIgOC4zLTE3IDExLjYtMjYuOCA4LjRTNjQgNDM0LjMgNjQgNDI0TDY0IDI0YzAtOS4xIDUuMS0xNy40IDEzLjMtMjEuNXoiXQogICAgfTsKICAgIGZhTW91c2VQb2ludGVyID0gZmFBcnJvd1BvaW50ZXI7CiAgICBmYVNxdWFyZVNoYXJlTm9kZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXNoYXJlLW5vZGVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInNoYXJlLWFsdC1zcXVhcmUiXSwgImYxZTEiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTM2OCAxNjBjMCAzNS4zLTI4LjcgNjQtNjQgNjQtMTUuNCAwLTI5LjUtNS40LTQwLjYtMTQuNWwtODUuMyA0Ni41IDg1LjMgNDYuNWMxMS05LjEgMjUuMi0xNC41IDQwLjYtMTQuNSAzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NC02NC0yOC43LTY0LTY0YzAtMi41IC4xLTQuOSAuNC03LjNMMTU4LjUgMzAwYy0xMS43IDEyLjMtMjguMiAyMC00Ni41IDIwLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRjMTguMyAwIDM0LjggNy43IDQ2LjUgMjBsODEuOS00NC43Yy0uMy0yLjQtLjQtNC45LS40LTcuMyAwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0eiJdCiAgICB9OwogICAgZmFTaGFyZUFsdFNxdWFyZSA9IGZhU3F1YXJlU2hhcmVOb2RlczsKICAgIGZhVGFibGVDZWxsc0xhcmdlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxlLWNlbGxzLWxhcmdlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRoLWxhcmdlIl0sICJmMDA5IiwgIk0zODQgOTZsLTEyOCAwIDAgMTI4IDEyOCAwIDAtMTI4em02NCAxMjhsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTI4ek02NCAyODhsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6bTEyOC02NGwwLTEyOC0xMjggMCAwIDEyOCAxMjggMHptNjQgNjRsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6Il0KICAgIH07CiAgICBmYVRoTGFyZ2UgPSBmYVRhYmxlQ2VsbHNMYXJnZTsKICAgIGZhQ2F0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODAwOF0sICJmNmJlIiwgIk02NCA5NmM1MyAwIDk2IDQzIDk2IDk2bDAgODUuOGMyOS43LTQ0LjcgNzcuOC03Ni4yIDEzMy40LTg0IDI1LjYgNjAgODUuMiAxMDIuMSAxNTQuNiAxMDIuMSAxMC45IDAgMjEuNi0xLjEgMzItMy4xTDQ4MCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNDAuOC0xMzYgMTA4LjggNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTQ0IDBjLTUzIDAtOTYtNDMtOTYtOTZsMC0yMjRjMC0xNi42LTEyLjYtMzAuMi0yOC43LTMxLjhsLTYuNi0uM0M0NC42IDE1OC4yIDMyIDE0NC42IDMyIDEyOCAzMiAxMTAuMyA0Ni4zIDk2IDY0IDk2ek01MzMuOCAzLjJDNTQ0LjItNS41IDU2MCAxLjkgNTYwIDE1LjVMNTYwIDEyOGMwIDYxLjktNTAuMSAxMTItMTEyIDExMlMzMzYgMTg5LjkgMzM2IDEyOGwwLTExMi41YzAtMTMuNiAxNS44LTIxIDI2LjItMTIuM0w0MTYgNDggNDgwIDQ4IDUzMy44IDMuMnpNNDAwIDEwOGEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6bTk2IDBhMjAgMjAgMCAxIDAgMCA0MCAyMCAyMCAwIDEgMCAwLTQweiJdCiAgICB9OwogICAgZmFDYWxlbmRhcldlZWsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXItd2VlayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNzg0IiwgIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTAgMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTE5MiAweiJdCiAgICB9OwogICAgZmFDb2RlQ29tcGFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb2RlLWNvbXBhcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTEzYSIsICJNMTk4LjggMS44YzktMy43IDE5LjMtMS43IDI2LjIgNS4ybDU2IDU2YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC01NiA1NmMtNi45IDYuOS0xNy4yIDguOS0yNi4yIDUuMlMxODQgMTQ1LjcgMTg0IDEzNmwwLTI0LTI0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjE0LjdjMjguMyAxMi4zIDQ4IDQwLjUgNDggNzMuMyAwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTMyLjggMTkuNy02MSA0OC03My4zTDY0IDE0NGMwLTUzIDQzLTk2IDk2LTk2bDI0IDAgMC0yNGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJ6TTM5MiA4MGEyNCAyNCAwIDEgMCA0OCAwIDI0IDI0IDAgMSAwIC00OCAwem0tOCA3My4zYy0yOC4zLTEyLjMtNDgtNDAuNS00OC03My4zIDAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAzMi44LTE5LjcgNjEtNDggNzMuM0w0NDggMzY4YzAgNTMtNDMgOTYtOTYgOTZsLTI0IDAgMCAyNGMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC01Ni01NmMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNTYtNTZjNi45LTYuOSAxNy4yLTguOSAyNi4yLTUuMlMzMjggMzY2LjMgMzI4IDM3NmwwIDI0IDI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yMTQuN3pNNzIgNDMyYTI0IDI0IDAgMSAwIDQ4IDAgMjQgMjQgMCAxIDAgLTQ4IDB6Il0KICAgIH07CiAgICBmYVJvYWRDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb2FkLWNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTY2IiwgIk0yODcuOSAzMmwtNzYuMiAwYy0yOS40IDAtNTUuMSAyMC4xLTYyLjEgNDguNkw2NS40IDQyMC41QzU3LjkgNDUwLjcgODAuOCA0ODAgMTEyIDQ4MGwyMDkuNCAwYy0xMS4yLTI0LjQtMTcuNC01MS40LTE3LjQtODAgMC0yOC42IDYuMi01NS43IDE3LjQtODAtLjUgMC0xIDAtMS42IDAtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNDkuMmMzNS4yLTQwIDg2LjctNjUuMiAxNDQuMi02NS4yIDkgMCAxNy44IC42IDI2LjQgMS44bC0zMi0xMjkuMkM0ODMuNCA1Mi4xIDQ1Ny44IDMyIDQyOC4zIDMybC03Ni41IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0ek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN2wtMzYuNyAzNi43IDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXQogICAgfTsKICAgIGZhUGFsbGV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhbGxldCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNDgyIiwgIk0zMiAzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDY0LTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC02NCAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyMHptOTYgNjRsMTI4IDAgMCA2NC0xMjggMCAwLTY0em0xOTIgMGwxMjggMCAwIDY0LTEyOCAwIDAtNjR6Il0KICAgIH07CiAgICBmYUNha2VDYW5kbGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNha2UtY2FuZGxlcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzg3NCwgImJpcnRoZGF5LWNha2UiLCAiY2FrZSJdLCAiZjFmZCIsICJNODYuNC0xMC41TDYxLjggMzEuNkM1OCAzOC4xIDU2IDQ1LjYgNTYgNTMuMkw1NiA1NmMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwbDAtMi44YzAtNy42LTItMTUtNS44LTIxLjZMMTA1LjYtMTAuNWMtMi0zLjQtNS43LTUuNS05LjYtNS41cy03LjYgMi4xLTkuNiA1LjV6bTEyOCAwTDE4OS44IDMxLjZjLTMuOCA2LjUtNS44IDE0LTUuOCAyMS42bDAgMi44YzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBsMC0yLjhjMC03LjYtMi0xNS01LjgtMjEuNkwyMzMuNi0xMC41Yy0yLTMuNC01LjctNS41LTkuNi01LjVzLTcuNiAyLjEtOS42IDUuNXpNMzE3LjggMzEuNmMtMy44IDYuNS01LjggMTQtNS44IDIxLjZsMCAyLjhjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MGwwLTIuOGMwLTcuNi0yLTE1LTUuOC0yMS42TDM2MS42LTEwLjVjLTItMy40LTUuNy01LjUtOS42LTUuNXMtNy42IDIuMS05LjYgNS41TDMxNy44IDMxLjZ6TTEyOCAxNjBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA1My41QzI2LjcgMjI2LjYgMCAyNjIuMiAwIDMwNGwwIDIwLjhjMjAuOSAxLjMgNDEuNiA3LjMgNjAuMyAxOGw3LjEgNC4xYzI2LjMgMTUgNTguOSAxMy40IDgzLjYtNC4yIDQzLjctMzEuMiAxMDIuMy0zMS4yIDE0NiAwIDI0LjYgMTcuNiA1Ny4zIDE5LjMgODMuNiA0LjJsNy4xLTQuMWMxOC43LTEwLjcgMzkuMy0xNi43IDYwLjMtMThsMC0yMC44YzAtNDEuOC0yNi43LTc3LjQtNjQtOTAuNWwwLTUzLjVjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0OC02NCAwIDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0OC02NCAwIDAtNDh6TTQ0OCAzNzNjLTEyLjcgMS4yLTI1LjEgNS0zNi41IDExLjVsLTcuMSA0LjFjLTQyLjYgMjQuMy05NS40IDIxLjctMTM1LjMtNi44LTI3LTE5LjMtNjMuMi0xOS4zLTkwLjIgMC0zOS45IDI4LjUtOTIuNyAzMS4yLTEzNS4zIDYuOGwtNy4xLTQuMUMyNS4xIDM3OCAxMi43IDM3NC4xIDAgMzczbDAgNzVjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC03NXoiXQogICAgfTsKICAgIGZhQmlydGhkYXlDYWtlID0gZmFDYWtlQ2FuZGxlczsKICAgIGZhQ2FrZSA9IGZhQ2FrZUNhbmRsZXM7CiAgICBmYUJ1Z1NsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1Zy1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNDkwIiwgIk03LTI0LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBMMjQxLjggMTc2IDM0NCAxNzZjMTQuMiAwIDI3LjcgMi44IDQwIDhsMTA4LjgtODEuNmMxNC4xLTEwLjYgMzQuMi03LjcgNDQuOCA2LjRzNy43IDM0LjItNi40IDQ0LjhsLTk3LjggNzMuM2M1LjMgOC45IDkuMyAxOC43IDExLjggMjkuMWw5OC44IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDAgMCAzMmMwIDkuNS0uOCAxOC43LTIuNCAyNy44TDU2OSA1MDMuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDcgOS4xQy0yLjMtLjMtMi4zLTE1LjUgNy0yNC45ek0zOTguMiA0NjhjLTIzLjIgMjIuMS01MyAzNy4yLTg2LjIgNDIuMmwwLTEyOC40IDg2LjIgODYuMnpNMjY0IDMzMy44bDAgMTc2LjRjLTUxLjItNy43LTk0LjUtMzkuNy0xMTcuNy04My45TDgzLjIgNDczLjZjLTE0LjEgMTAuNi0zNC4yIDcuNy00NC44LTYuNHMtNy43LTM0LjIgNi40LTQ0LjhsODMuNC02Mi41Yy0uMS0yLjYtLjItNS4yLS4yLTcuOWwwLTMyLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTguOCAwYzMuMy0xMy45IDkuMy0yNi43IDE3LjYtMzcuOEwyNjQgMzMzLjh6TTM1NS42IDEyOGwtODIuNCAwLTcyLjMtNzIuM0MyMTYuMSAyMi44IDI0OS40IDAgMjg4IDAgMzQxIDAgMzg0IDQzIDM4NCA5NmwwIDMuNmMwIDE1LjctMTIuNyAyOC40LTI4LjQgMjguNHoiXQogICAgfTsKICAgIGZhVGFycCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YXJwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1N2IiLCAiTTQ0OCA2NGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE0OS41YzAgMTctNi43IDMzLjMtMTguNyA0NS4zTDM4Ni43IDQyOS4zYy0xMiAxMi0yOC4zIDE4LjctNDUuMyAxOC43TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDB6bTUuNSAyMDhMMzYwIDI3MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA5My41IDExNy41LTExNy41ek05NiAxOTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFEaWFncmFtUHJlZGVjZXNzb3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGlhZ3JhbS1wcmVkZWNlc3NvciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNDc3IiwgIk0yODkuMiAxMzcuOWMyLjUtNiA4LjMtOS45IDE0LjgtOS45bDQwIDAgMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtOTggMGMxLjMgNS4xIDIgMTAuNSAyIDE2bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTk2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjU2IDBjMzkuOCAwIDcyIDMyLjIgNzIgNzJsMCAyNCA0MCAwYzYuNSAwIDEyLjMgMy45IDE0LjggOS45czEuMSAxMi45LTMuNSAxNy40bC02NCA2NGMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTY0LTY0Yy00LjYtNC42LTUuOS0xMS41LTMuNS0xNy40ek0zODQgMzUybC0zMjAgMCAwIDY0IDMyMCAwIDAtNjR6bTY0IDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0eiJdCiAgICB9OwogICAgZmFGYWNlRmx1c2hlZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1mbHVzaGVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTYzLCAiZmx1c2hlZCJdLCAiZjU3OSIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMTY4IDM5MmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMjggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTI4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em0tOC05NmE3MiA3MiAwIDEgMCAwLTE0NCA3MiA3MiAwIDEgMCAwIDE0NHptMjY0LTcyYTcyIDcyIDAgMSAwIC0xNDQgMCA3MiA3MiAwIDEgMCAxNDQgMHptLTI4OCAwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTE5MiAwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il0KICAgIH07CiAgICBmYUZsdXNoZWQyID0gZmFGYWNlRmx1c2hlZDI7CiAgICBmYURpYWdyYW1OZXh0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpYWdyYW0tbmV4dCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNDc2IiwgIk0zODQgMjI0YzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NmwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDEyOCAwIDAgNjQtMzIgMGMtNi41IDAtMTIuMyAzLjktMTQuOCA5LjlzLTEuMSAxMi45IDMuNSAxNy40bDY0IDY0YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwbDY0LTY0YzQuNi00LjYgNS45LTExLjUgMy41LTE3LjRTMjk0LjUgMjg4IDI4OCAyODhsLTMyIDAgMC02NCAxMjggMHpNNjQgMjg4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTM0IDBjNS42IDIxLjctLjUgNDUuMS0xNi43IDYxLjNsLTY0IDY0Yy0yNSAyNS02NS41IDI1LTkwLjUgMGwtNjQtNjRDOTguNiAzMzMuMSA5Mi40IDMwOS43IDk4IDI4OGwtMzQgMHoiXQogICAgfTsKICAgIGZhQW5jaG9yQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYW5jaG9yLWNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGFjIiwgIk0zMjAuNSA5NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0tMzItOTZjLTUzIDAtOTYgNDMtOTYgOTYgMCA0MS44IDI2LjcgNzcuNCA2NCA5MC41bDAgMjU3LjljLTYyLjktMTQuMy0xMTAuMi02OS43LTExMS45LTEzNi41bDE2LjEgMTQuMWMxMCA4LjcgMjUuMSA3LjcgMzMuOS0yLjNzNy43LTI1LjEtMi4zLTMzLjlsLTY0LTU2Yy05LTcuOS0yMi42LTcuOS0zMS42IDBsLTY0IDU2Yy0xMCA4LjctMTEgMjMuOS0yLjMgMzMuOXMyMy45IDExIDMzLjkgMi4zbDE2LjItMTQuMmMyLjEgMTEzLjEgOTQuNCAyMDQuMSAyMDggMjA0LjEgMTYuNiAwIDMyLjctMS45IDQ4LjItNS42LTIwLjMtMzAuNS0zMi4yLTY3LTMyLjItMTA2LjQgMC0yNy4zIDUuNy01My4zIDE2LTc2LjlsMC0xMzYuNmMzNy4zLTEzLjIgNjQtNDguNyA2NC05MC41IDAtNTMtNDMtOTYtOTYtOTZ6bTIwOCA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43bC0zNi43IDM2LjcgMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42eiJdCiAgICB9OwogICAgZmFQZXJzb25DaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NDMiLCAiTTI4MCAyNGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6bTI0IDIxMi43TDM0MSAyODYuNmMxMi44LTE3LjUgMjguNS0zMi43IDQ2LjMtNDVsLTU2LjItNzUuN0MzMDYgMTMyIDI2Ni4zIDExMiAyMjQgMTEycy04MiAyMC0xMDcuMiA1My45bC03MC41IDk1Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZMMTQ0IDIzNi43IDE0NCA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNzUuM3pNNDk2IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTIyLjYtMTQ0bDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNkw1MTguNiA0MDB6Il0KICAgIH07CiAgICBmYVNwYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcGEiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjViYiIsICJNMTY5LjcgMjI3LjVjMzQuMyAxOC43IDY0LjUgNDQuMSA4OC44IDc0LjUgMTEuMSAxMy45IDIxIDI4LjkgMjkuNCA0NC44IDguNS0xNS45IDE4LjMtMzAuOCAyOS40LTQ0LjggMjQuMy0zMC41IDU0LjUtNTUuOSA4OC44LTc0LjUgNDEuNy0yMi43IDg5LjQtMzUuNSAxMzkuNy0zNS41bDkuOSAwYzExLjEgMCAyMC4xIDkgMjAuMSAyMC4xIDAgMTQ4LTExOS45IDI2Ny45LTI2Ny45IDI2Ny45bC00MC4yIDBDMTE5LjkgNDgwIDAgMzYwLjEgMCAyMTIuMSAwIDIwMSA5IDE5MiAyMC4xIDE5Mmw5LjkgMGM1MC40IDAgOTguMSAxMi44IDEzOS43IDM1LjV6TTMwMy45IDM4YzE2LjkgMTUuOSA2MS40IDYzLjQgODkgMTQyLjMtNDAuMSAyMC4yLTc1LjggNDguMi0xMDQuOSA4Mi4xLTI5LjItMzMuOS02NC44LTYxLjgtMTA0LjktODIuMSAyNy42LTc4LjkgNzIuMi0xMjYuNCA4OS0xNDIuMyA0LjMtNC4xIDEwLTYgMTUuOS02czExLjYgMiAxNS45IDZ6Il0KICAgIH07CiAgICBmYUJhcnNQcm9ncmVzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXJzLXByb2dyZXNzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRhc2tzLWFsdCJdLCAiZjgyOCIsICJNMjg4IDE2MGw5NiAwIDAtNjQtOTYgMCAwIDY0ek0wIDE2MEwwIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDM1MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggMjI0Yy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE2ek0xNjAgNDE2bDIyNCAwIDAtNjQtMjI0IDAgMCA2NHpNMCA0MTZsMC04MGMwLTI2LjUgMjEuNS00OCA0OC00OGwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNnoiXQogICAgfTsKICAgIGZhVGFza3NBbHQgPSBmYUJhcnNQcm9ncmVzczsKICAgIGZhSGVhcnRDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydC1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRmZCIsICJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDE3LjYtMy40IDM1LjYtOS41IDUzLjctMjEuOC04LjYtNDUuNi0xMy40LTcwLjUtMTMuNC0xMDYgMC0xOTIgODYtMTkyIDE5MiAwIDI4LjUgNi4yIDU1LjYgMTcuNCA4MC0uNSAwLS45IDAtMS40IDAtMTUuNSAwLTMwLjgtNC42LTQzLjEtMTQuMS03My01NS43LTIxMi45LTE4Ni0yMTIuOS0yOTguMmwwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXpNMjg4IDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMDEuNC02MC45Yy03LjEtNS4yLTE3LjItMy42LTIyLjQgMy41bC01MyA3Mi45LTI2LjgtMjYuOGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGMzLjMgMy4zIDcuOSA1IDEyLjYgNC42czguOS0yLjggMTEuNy02LjVsNjQtODhjNS4yLTcuMSAzLjYtMTcuMi0zLjUtMjIuM3oiXQogICAgfTsKICAgIGZhTWFyc1N0cm9rZVJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnMtc3Ryb2tlLXJpZ2h0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbOTg5NywgIm1hcnMtc3Ryb2tlLWgiXSwgImYyMmIiLCAiTTMyMC41IDI1NmExMTIgMTEyIDAgMSAwIC0yMjQgMCAxMTIgMTEyIDAgMSAwIDIyNCAwek0yMDguNSA4MGM4Ni4zIDAgMTU4LjEgNjIuMSAxNzMuMSAxNDQuMSAxLS4xIDEuOS0uMSAyLjktLjFsMTYgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiA2MS40IDAtMjIuNC0yOGMtMTEtMTMuOC04LjgtMzMuOSA1LTQ1czMzLjktOC44IDQ1IDVsNjQgODBjOS4zIDExLjcgOS4zIDI4LjMgMCA0MGwtNjQgODBjLTExIDEzLjgtMzEuMiAxNi00NSA1cy0xNi0zMS4yLTUtNDVsMjIuNC0yOC02MS40IDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTE2IDBjLTEgMC0xLjkgMC0yLjktLjEtMTUgODItODYuOCAxNDQuMS0xNzMuMSAxNDQuMS05Ny4yIDAtMTc2LTc4LjgtMTc2LTE3NnM3OC44LTE3NiAxNzYtMTc2eiJdCiAgICB9OwogICAgZmFNYXJzU3Ryb2tlSCA9IGZhTWFyc1N0cm9rZVJpZ2h0OwogICAgZmFUb3dlck9ic2VydmF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvd2VyLW9ic2VydmF0aW9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU1ODYiLCAiTTIwOS43IDMuNGM5LTQuNSAxOS42LTQuNSAyOC42IDBsMTYwIDgwYzE1LjggNy45IDIyLjIgMjcuMSAxNC4zIDQyLjktNS42IDExLjItMTYuOSAxNy43LTI4LjYgMTcuN2wwIDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMyAwIDMyIDE5MiA0NSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0NSAwIDMyLTE5Mi0xMyAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTgwYy0xMS43IDAtMjMtNi41LTI4LjYtMTcuNy03LjktMTUuOC0xLjUtMzUgMTQuMy00Mi45bDE2MC04MHpNMzEwLjcgNDQ4bC04Ni43LTYxLjktODYuNyA2MS45IDE3My40IDB6bS0xNTMtMTkybC0zLjUgMjEuMiA2OS45IDQ5LjkgNjkuOS00OS45LTMuNS0yMS4yLTEzMi43IDB6bS0xMi4zIDczLjlsLTEwLjEgNjAuNiA0Ny41LTMzLjktMzcuNC0yNi43em0xMTkuOSAyNi43bDQ3LjUgMzMuOS0xMC4xLTYwLjYtMzcuNCAyNi43ek0xNTIgMTI4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXQogICAgfTsKICAgIGZhU3RlcmxpbmdTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0ZXJsaW5nLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxNjMsICJnYnAiLCAicG91bmQtc2lnbiJdLCAiZjE1NCIsICJNOTEuMyAyODhsLTM0LjggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyMS40IDBDMzcuMyAxNDcuMyAxMDUuMSA0MiAyMDcuNiA0Mmw4LjIgMGMzMy42IDAgNjYuMiAxMS4zIDkyLjUgMzIuMmwxNi4xIDEyLjdjMTMuOSAxMSAxNi4yIDMxLjEgNS4yIDQ1cy0zMS4xIDE2LjItNDUgNS4ybC0xNi4xLTEyLjdjLTE1LTExLjktMzMuNi0xOC40LTUyLjgtMTguNGwtOC4yIDBjLTU3LjMgMC05NC43IDU5LjktNjkuNyAxMTEuNCAzLjYgNy40IDYuNiAxNC45IDkuMSAyMi42bDE0OS41IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0MS4yIDBjMSAzNS4zLTguNyA3MC42LTI4LjkgMTAwLjlsLTE4LjEgMjcuMSAyMTIuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNzIgMGMtMTEuOCAwLTIyLjYtNi41LTI4LjItMTYuOXMtNS0yMyAxLjYtMzIuOWw1MS4yLTc2LjhjMTMuMS0xOS42IDE5LjItNDIuNiAxOC4yLTY1LjR6Il0KICAgIH07CiAgICBmYUdicCA9IGZhU3RlcmxpbmdTaWduOwogICAgZmFQb3VuZFNpZ24gPSBmYVN0ZXJsaW5nU2lnbjsKICAgIGZhRmF1Y2V0RHJpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYXVjZXQtZHJpcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODY4OF0sICJlMDA2IiwgIk0yMjQgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyTDk2IDY0Qzc4LjMgNjQgNjQgNzguMyA2NCA5NnMxNC4zIDMyIDMyIDMybDk2IDAgMCA2NC0xOC43IDBjLTguNSAwLTE2LjYgMy40LTIyLjYgOS40TDEyOCAyMjQgMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEwMC4xIDBjMjAuMiAyOSA1My45IDQ4IDkxLjkgNDhzNzEuNy0xOSA5MS45LTQ4bDM2LjEgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzIgMC04OC40LTcxLjYtMTYwLTE2MC0xNjBsLTMyIDAtMjIuNi0yMi42Yy02LTYtMTQuMS05LjQtMjIuNi05LjRsLTE4LjcgMCAwLTY0IDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDBjMC0xNy43LTE0LjMtMzItMzItMzJ6TTQzNi44IDQ1NS40bC0xOC4yIDQyLjRjLTEuOCA0LjEtMi43IDguNi0yLjcgMTMuMWwwIDEuMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMS4yYzAtNC41LS45LTguOS0yLjctMTMuMWwtMTguMi00Mi40Yy0xLjktNC41LTYuMy03LjQtMTEuMi03LjRzLTkuMiAyLjktMTEuMiA3LjR6Il0KICAgIH07CiAgICBmYUNpcmNsZUluZm8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWluZm8iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiaW5mby1jaXJjbGUiXSwgImYwNWEiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMjQgMTYwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bS04IDY0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA4OCA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQgMCAwLTY0LTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUluZm9DaXJjbGUgPSBmYUNpcmNsZUluZm87CiAgICBmYUZlYXRoZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmVhdGhlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTcxOF0sICJmNTJkIiwgIk0zNTIgMGM0MSAwIDgwLjMgMTYuMyAxMDkuMiA0NS4ybDUuNSA1LjVjMjkgMjkgNDUuMyA2OC4zIDQ1LjMgMTA5LjIgMCAyNC4xLTUuNyA0Ny42LTE2LjIgNjguOC0xLjkgMy43LTUuMyA2LjUtOS4zIDcuN0wzNzQuNSAyNzBjLTMuOSAxLjItNi41IDQuNy02LjUgOC44IDAgNS4xIDQuMSA5LjIgOS4yIDkuMmwzMi4yIDBjMTQuMyAwIDIxLjQgMTcuMiAxMS4zIDI3LjNsLTIyLjQgMjIuNGMtMS45IDEuOS00LjIgMy4yLTYuNyA0bC04MSAyNC4zYy0zLjkgMS4yLTYuNSA0LjctNi41IDguOCAwIDUuMSA0LjEgOS4yIDkuMiA5LjIgMTMuMiAwIDE4LjkgMTUuNyA3LjggMjIuOS00MS4xIDI2LjYtODkuMyA0MS4xLTEzOSA0MS4xbC04NiAwLTQ4IDQ4Yy04LjggOC44LTIzLjIgOC44LTMyIDBzLTguOC0yMy4yIDAtMzJMMjU2IDIyNGM4LjgtOC44IDguOC0yMy4yIDAtMzJzLTIzLjItOC44LTMyIDBMNzkuNSAzMzYuNWMtNS43IDUuNy0xNS41IDEuNy0xNS41LTYuNCAwLTY3LjkgMjctMTMzIDc1LTE4MUwyNDIuOCA0NS4yQzI3MS43IDE2LjMgMzExIDAgMzUyIDB6Il0KICAgIH07CiAgICBmYUJvd2xSaWNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvd2wtcmljZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMmViIiwgIk0xNzYgNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTI0IDQ4bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6TTU2IDE2MGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0wIDI4My40QzAgMjY4LjMgMTIuMyAyNTYgMjcuNCAyNTZsNDU3LjEgMGMxNS4xIDAgMjcuNCAxMi4zIDI3LjQgMjcuNCAwIDcwLjUtNDQuNCAxMzAuNy0xMDYuNyAxNTQuMUw0MDMuNSA0NTJjLTIgMTYtMTUuNiAyOC0zMS44IDI4bC0yMzEuNSAwYy0xNi4xIDAtMjkuOC0xMi0zMS44LTI4bC0xLjgtMTQuNEM0NC40IDQxNC4xIDAgMzUzLjkgMCAyODMuNHpNMjI0IDE4NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptLTk2IDBjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTEwNCA4OGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0yMTYgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTI5NiA4OGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0xMjAgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTM5MiA4OGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0yOTYgMTZsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhU3RhckhhbGZTdHJva2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0YXItaGFsZi1zdHJva2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsic3Rhci1oYWxmLWFsdCJdLCAiZjVjMCIsICJNMjg4LjEgMzUzLjZjMTAgMCAxOS45IDIuMyAyOSA3bDc0LjQgMzcuOS0xMy04Mi41Yy0zLjItMjAuMiAzLjUtNDAuNyAxNy45LTU1LjJsNTktNTkuMS04Mi41LTEzLjFjLTIwLjItMy4yLTM3LjctMTUuOS00Ny0zNC4xbC0zOC03NC40IDAgMjczLjZ6TTQ1Ny40IDQ4OWMtNy4zIDUuMy0xNyA2LjEtMjUgMkwyODguMSA0MTcuNiAxNDMuOCA0OTFjLTggNC4xLTE3LjcgMy4zLTI1LTJzLTExLTE0LjItOS42LTIzLjJMMTM0LjQgMzA1LjkgMjAgMTkxLjRjLTYuNC02LjQtOC42LTE1LjgtNS44LTI0LjRzMTAuMS0xNC45IDE5LjEtMTYuM2wxNTkuOS0yNS40IDczLjYtMTQ0LjJjNC4xLTggMTIuNC0xMy4xIDIxLjQtMTMuMXMxNy4zIDUuMSAyMS40IDEzLjFMMzgzIDEyNS4zIDU0Mi45IDE1MC43YzguOSAxLjQgMTYuMyA3LjcgMTkuMSAxNi4zcy41IDE4LTUuOCAyNC40TDQ0MS43IDMwNS45IDQ2NyA0NjUuOGMxLjQgOC45LTIuMyAxNy45LTkuNiAyMy4yeiJdCiAgICB9OwogICAgZmFTdGFySGFsZkFsdDIgPSBmYVN0YXJIYWxmU3Ryb2tlMjsKICAgIGZhVGVtcGVyYXR1cmVBcnJvd0Rvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVtcGVyYXR1cmUtYXJyb3ctZG93biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJ0ZW1wZXJhdHVyZS1kb3duIl0sICJlMDNmIiwgIk02NC41IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NHMtMTQ0LTY0LjUtMTQ0LTE0NGMwLTQyLjYgMTguNS04MSA0OC0xMDcuM0w2NC41IDk2em05NiAzMzZjMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yNi45LTE2LjUtNDkuOS00MC01OS4zbDAtMjguN2MwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDI4LjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NHpNNDM5LjEgMzEwLjZjLTYgNi0xNC4xIDkuNC0yMi42IDkuNHMtMTYuNi0zLjQtMjIuNi05LjRsLTY0LTY0Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDkuNCA5LjQgMC0xNzguN2MwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTc4LjcgOS40LTkuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC02NCA2NHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVEb3duID0gZmFUZW1wZXJhdHVyZUFycm93RG93bjsKICAgIGZhTWFza1ZlbnRpbGF0b3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFzay12ZW50aWxhdG9yIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MjQiLCAiTTE1Mi4yIDE5MmMtMTUuNCAzOC4zLTI0LjIgNzcuMi0yNC4yIDEwOC44IDAgMTMuMyAxLjUgMjYuMiA0LjQgMzguN2wtMTctMy40Yy0yOS45LTYtNTEuNC0zMi4yLTUxLjQtNjIuOGwwLTgxLjMgODguMiAwem0zMi45LTY0TDY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA4MS4zYzAgNjEgNDMuMSAxMTMuNSAxMDIuOSAxMjUuNWw2Ni4zIDEzLjNjMTguNyAyMi4xIDQyLjkgNDAgNzAuOCA1MS44bDAtODcuOGMtMTAuMS0xNC4yLTE2LTMxLjMtMTYtNDkuNyAwLTQ5LjUgNDMtMTM0LjQgOTYtMTM0LjQgNTIuNSAwIDk2IDg0LjkgOTYgMTM0LjQgMCAxOC40LTUuOSAzNS40LTE2IDQ5LjZsMCA4Ny43YzI3LjYtMTEuOCA1MS43LTI5LjYgNzAuNC01MS42bDY2LjctMTMuM2M1OS44LTEyIDEwMi45LTY0LjUgMTAyLjktMTI1LjVsMC04MS4zYzAtMzUuMy0yOC43LTY0LTY0LTY0bC0xMjEuNSAwYy0zNC44LTU0LjItODIuNS05Ni0xMzQuNS05Ni01Mi42IDAtMTAwLjIgNDEuOC0xMzQuOSA5NnptMzAyLjUgNjRsODguNCAwIDAgODEuM2MwIDMwLjUtMjEuNSA1Ni44LTUxLjQgNjIuOGwtMTcgMy40YzIuOS0xMi40IDQuNS0yNS40IDQuNS0zOC43IDAtMzEuNi04LjktNzAuNS0yNC40LTEwOC44ek0yODggMzIwbDAgMTkyIDY0IDAgMC0xOTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6Il0KICAgIH07CiAgICBmYUZpbGVWaWRlbzIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS12aWRlbyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM4IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNODAgMzA0bDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTI0IDM1IDM1YzMuMiAzLjIgNy41IDUgMTIgNSA5LjQgMCAxNy03LjYgMTctMTdsMC05NC4xYzAtOS40LTcuNi0xNy0xNy0xNy00LjUgMC04LjggMS44LTEyIDVsLTM1IDM1IDAtMjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTk2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyeiJdCiAgICB9OwogICAgZmFBcnJvd1RyZW5kRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy10cmVuZC1kb3duIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwOTciLCAiTTM4NCAzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xNjBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA4Mi43LTE2OS40LTE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMEwxOTIgMjQyLjcgNTQuNiAxMDUuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMEwzMjAgMjA1LjMgNDY2LjcgMzUyIDM4NCAzNTJ6Il0KICAgIH07CiAgICBmYU9pbENhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJvaWwtY2FuIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY2MTMiLCAiTTMyMCAxMjhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMTkyIDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDAgMCAzMi0xNzYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NC44YzAgMTkgMTEuMiAzNi4yIDI4LjUgNDMuOWw2Ny41IDMwIDAgMjEuM2MwIDI2LjUgMjEuNSA0OCA0OCA0OGwyNTkuMSAwYzE4LjQgMCAzNS44LTcuOSA0OC0yMS43TDYzMy41IDE4Ny43YzEyLjMtMTMuOS0uMy0zNS40LTE4LjQtMzEuNUw0NDggMTkyIDM5Ny41IDE2Ni44Yy04LjktNC40LTE4LjctNi44LTI4LjYtNi44bC04MC45IDAgMC0zMiAzMiAwek05NiAyMDhsMCA4Ni4xLTQ4LTIxLjMgMC02NC44IDQ4IDB6Il0KICAgIH07CiAgICBmYVBlb3BsZUNhcnJ5Qm94ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlb3BsZS1jYXJyeS1ib3giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsicGVvcGxlLWNhcnJ5Il0sICJmNGNlIiwgIk02NC0zMkE1NiA1NiAwIDEgMSA2NCA4MCA1NiA1NiAwIDEgMSA2NC0zMnpNMCAxNzEuMWMwLTMyLjYgMjYuNS01OS4xIDU5LjEtNTkuMSAyMy41IDAgNDUuNSAxMS4zIDU5LjEgMzAuNGw0OC43IDY4LjJjNS44IDguMiAxNS4xIDEzLjEgMjUuMSAxMy40bDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMxMC0uMyAxOS4zLTUuMiAyNS4xLTEzLjRsNDguNy02OC4yYzEzLjYtMTkuMSAzNS42LTMwLjQgNTkuMS0zMC40IDMyLjYgMCA1OS4xIDI2LjUgNTkuMSA1OS4xTDU3NiAyNzJjMCAzMC4yLTE0LjIgNTguNy0zOC40IDc2LjhsLTc2LjggNTcuNmMtOC4xIDYtMTIuOCAxNS41LTEyLjggMjUuNmwwIDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODBjMC0zMC4yIDE0LjItNTguNyAzOC40LTc2LjhsNDEuNi0zMS4yIDAtODAuMS0yLjggMy45Yy0xOCAyNS4yLTQ3LjEgNDAuMi03OC4xIDQwLjJMMzUyIDI4OGMtLjYgMC0xLjMgMC0xLjktLjEtLjYgMC0xLjMgLjEtMS45IC4xbC0xMjAuNCAwYy0uNiAwLTEuMyAwLTEuOS0uMS0uNiAwLTEuMyAuMS0xLjkgLjFsLTMxLjEgMGMtMzEgMC02MC4xLTE1LTc4LjEtNDAuMmwtMi44LTMuOSAwIDgwLjEgNDEuNiAzMS4yQzE3Ny44IDM3My4zIDE5MiA0MDEuOCAxOTIgNDMybDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04MGMwLTEwLjEtNC43LTE5LjYtMTIuOC0yNS42TDM4LjQgMzQ4LjhDMTQuMiAzMzAuNyAwIDMwMi4yIDAgMjcyTDAgMTcxLjF6TTAgMzc5LjNjMy4xIDIuNyA2LjMgNS40IDkuNiA3LjlMNjQgNDI4IDY0IDUxMmMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDUyOS43IDAgNTEyTDAgMzc5LjN6TTU2OCAyNGE1NiA1NiAwIDEgMSAtMTEyIDAgNTYgNTYgMCAxIDEgMTEyIDB6bTggNDg4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODQgNTQuNC00MC44YzMuMy0yLjUgNi41LTUuMSA5LjYtNy45TDU3NiA1MTJ6Il0KICAgIH07CiAgICBmYVBlb3BsZUNhcnJ5ID0gZmFQZW9wbGVDYXJyeUJveDsKICAgIGZhQ2hhaXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhaXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjk2ODFdLCAiZjZjMCIsICJNMTUyIDI1NmwwLTE4MS44Yy0yNC41IDIwLjUtNDAgNTEuNC00MCA4NS44bDAgOTYgNDAgMHptNDggMGw0OCAwIDAtMjA1LjRjLTcuNy0xLjctMTUuOC0yLjYtMjQtMi42cy0xNi4zIC45LTI0IDIuNkwyMDAgMjU2ek0yOTYgNzQuMmwwIDE4MS44IDQwIDAgMC05NmMwLTM0LjQtMTUuNS02NS4yLTQwLTg1Ljh6TTMyIDI1NmwzMiAwIDAtOTZDNjQgNzEuNiAxMzUuNiAwIDIyNCAwUzM4NCA3MS42IDM4NCAxNjBsMCA5NiAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2LTI1NiAwIDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhV2luZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aW5kIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3MmUiLCAiTTI4OCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDMyIDExMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMjggMGM0OC42IDAgODgtMzkuNCA4OC04OFM0MDguNiAwIDM2MCAwTDMyMCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptNjQgMzUyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZMMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMTI4IDUxMmw0MCAwYzQ4LjYgMCA4OC0zOS40IDg4LTg4cy0zOS40LTg4LTg4LTg4TDMyIDMzNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnoiXQogICAgfTsKICAgIGZhTGF5ZXJHcm91cCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYXllci1ncm91cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWZkIiwgIk0yMzIuNSA1LjJjMTQuOS02LjkgMzIuMS02LjkgNDcgMGwyMTguNiAxMDFjOC41IDMuOSAxMy45IDEyLjQgMTMuOSAyMS44cy01LjQgMTcuOS0xMy45IDIxLjhsLTIxOC42IDEwMWMtMTQuOSA2LjktMzIuMSA2LjktNDcgMEwxMy45IDE0OS44QzUuNCAxNDUuOCAwIDEzNy4zIDAgMTI4czUuNC0xNy45IDEzLjktMjEuOEwyMzIuNSA1LjJ6TTQ4LjEgMjE4LjRsMTY0LjMgNzUuOWMyNy43IDEyLjggNTkuNiAxMi44IDg3LjMgMGwxNjQuMy03NS45IDM0LjEgMTUuOGM4LjUgMy45IDEzLjkgMTIuNCAxMy45IDIxLjhzLTUuNCAxNy45LTEzLjkgMjEuOGwtMjE4LjYgMTAxYy0xNC45IDYuOS0zMi4xIDYuOS00NyAwTDEzLjkgMjc3LjhDNS40IDI3My44IDAgMjY1LjMgMCAyNTZzNS40LTE3LjkgMTMuOS0yMS44bDM0LjEtMTUuOHpNMTMuOSAzNjIuMmwzNC4xLTE1LjggMTY0LjMgNzUuOWMyNy43IDEyLjggNTkuNiAxMi44IDg3LjMgMGwxNjQuMy03NS45IDM0LjEgMTUuOGM4LjUgMy45IDEzLjkgMTIuNCAxMy45IDIxLjhzLTUuNCAxNy45LTEzLjkgMjEuOGwtMjE4LjYgMTAxYy0xNC45IDYuOS0zMi4xIDYuOS00NyAwTDEzLjkgNDA1LjhDNS40IDQwMS44IDAgMzkzLjMgMCAzODRzNS40LTE3LjkgMTMuOS0yMS44eiJdCiAgICB9OwogICAgZmFIZWFkU2lkZU1hc2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhZC1zaWRlLW1hc2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA2MyIsICJNNDQ1LjkgMTkzYy0uMS0uNC0uMi0uOS0uMi0xLjMtMTUuNy0xMDguNC0xMDguOS0xOTEuNy0yMjEuNy0xOTEuNy04NSAwLTE1OSA0Ny40LTE5Ni45IDExNy4yTDI4My4zIDI4OCA0NTYgMjg4IDQ0Mi45IDMzNiAzMzYgMzM2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDk4LjIgMC04LjcgMzItODkuNSAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDgwLjYgMGMtNi43IDE5LjEtMjQuOCAzMi00NS4zIDMyTDI4OCA0NjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTA0LjUtMjQ3LjUtMTY1QzMgMTgyLjEgMCAyMDIuNyAwIDIyNCAwIDI3OCAxOS4xIDMyNy41IDUwLjkgMzY2LjIgNTguOSAzNzUuOSA2NCAzODcuOCA2NCA0MDAuNEw2NCA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsMTI3LjMgMCAuNyAwIDEzMS4zIDBjNDQuOSAwIDgzLjgtMzEuMSA5My42LTc0LjlsMzMuOS0xNTAuM2MzLjMtMTQuNC0uMy0yOS41LTkuNy00MUw0NDUuOSAxOTN6TTI4OCAxOTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhSGFuZHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZHMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2lnbi1sYW5ndWFnZSIsICJzaWduaW5nIl0sICJmMmE3IiwgIk01MTIgMTYwbC0uMSA3Mi42YzAgNDQuOC0xNy42IDg3LjEtNDcuOSAxMTguNC0uMy03Ny00MC4xLTE0OC40LTEwNS40LTE4OS4zbC0xLjktMS4yYzIuNS0zLjcgMi44LTguNiAuNC0xMi43bC02Mi0xMDcuNGMtNi42LTExLjUtMi43LTI2LjIgOC44LTMyLjhTMzMwIDUgMzM2LjYgMTYuNWw2OCAxMTcuOCAwIDAgMCAwIDQzLjMgNzUgLjEtNDkuM2MwLTE3LjcgMTQuNC0zMiAzMi0zMnMzMiAxNC40IDMyIDMyek0yOTguNCAxMjQuMmMtMTQuMS04LjgtMjkuOC0xMi43LTQ1LjItMTIuMUwyMTYuNyA0OC44Yy02LjYtMTEuNS0yLjctMjYuMiA4LjgtMzIuOHMyNi4yLTIuNyAzMi44IDguOGw2Ny4xIDExNi4yLTI3LTE2Ljl6TTIxMS45IDg4LjVsMTYuNCAyOC40Yy0xNS4xIDUuNS0yOC42IDE1LjYtMzguMyAyOS43bC0xOS43LTM0LjJjLTYuNi0xMS41LTIuNy0yNi4yIDguOC0zMi44czI2LjItMi43IDMyLjggOC44em0tNDYuNCA2My43bDEyLjUgMjEuN2MtMiA4LjYtMi41IDE3LjUtMS43IDI2LjFsLTQuMyAwIDAgMC0zNC40IDAtMTMuNy0yMy44Yy02LjYtMTEuNS0yLjctMjYuMiA4LjgtMzIuOHMyNi4yLTIuNyAzMi44IDguOHpNMjI4LjkgMTc1YzkuNC0xNSAyOS4xLTE5LjUgNDQuMS0xMC4ybDYwLjIgMzcuNkMzODQuNyAyMzQuNyA0MTYgMjkxLjIgNDE2IDM1MmwwIDhjMCA4My45LTY4LjEgMTUyLTE1MiAxNTJMODggNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDkyIDBjNi42IDAgMTItNS40IDEyLTEycy01LjQtMTItMTItMTJMNTYgNDQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDEyNCAwYzYuNiAwIDEyLTUuNCAxMi0xMnMtNS40LTEyLTEyLTEyTDI0IDM2OGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNTYgMGM2LjYgMCAxMi01LjQgMTItMTJzLTUuNC0xMi0xMi0xMkw1NiAyOTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTM2IDAgMCAwIDAgMCA5My4yIDAtNDYuMi0yOC45Yy0xNS05LjQtMTkuNS0yOS4xLTEwLjItNDQuMXoiXQogICAgfTsKICAgIGZhU2lnbkxhbmd1YWdlID0gZmFIYW5kczsKICAgIGZhU2lnbmluZyA9IGZhSGFuZHM7CiAgICBmYVRhYmxldHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGV0cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDkwIiwgIk00OTUuMyA3Ni42Yy00LjYtOC43LTE2LjMtOS43LTIzLjMtMi43TDI5Ny45IDI0OGMtNyA3LTYgMTguNyAyLjcgMjMuMyAyMC4xIDEwLjcgNDMgMTYuNyA2Ny40IDE2LjcgNzkuNSAwIDE0NC02NC41IDE0NC0xNDQgMC0yNC4zLTYtNDcuMy0xNi43LTY3LjR6TTI0MC43IDIxMS40YzQuNiA4LjcgMTYuMyA5LjcgMjMuMyAyLjdMNDM4LjEgNDBjNy03IDYtMTguNy0yLjctMjMuMy0yMC4xLTEwLjctNDMtMTYuNy02Ny40LTE2LjctNzkuNSAwLTE0NCA2NC41LTE0NCAxNDQgMCAyNC4zIDYgNDcuMyAxNi43IDY3LjR6TTE0NCAyMjRDNzkuMiAyMjQgMjQuNCAyNjYuOCA2LjMgMzI1LjYgMy40IDMzNS4xIDExIDM0NCAyMC45IDM0NGwyNDYuMiAwYzkuOSAwIDE3LjUtOC45IDE0LjYtMTguNC0uOS0zLTEuOS01LjktMy04LjctMzcuNC0xOC4xLTY4LTQ4LTg3LTg0LjgtMTQuOS01LjItMzAuOS04LjEtNDcuNi04LjF6TTI4MS43IDQxMC40YzIuOS05LjUtNC43LTE4LjQtMTQuNi0xOC40TDIwLjkgMzkyQzExIDM5MiAzLjQgNDAwLjkgNi4zIDQxMC40IDI0LjQgNDY5LjIgNzkuMiA1MTIgMTQ0IDUxMnMxMTkuNi00Mi44IDEzNy43LTEwMS42eiJdCiAgICB9OwogICAgZmFXZWlnaHRIYW5naW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndlaWdodC1oYW5naW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1Y2QiLCAiTTIyNCA5NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xMjIuNSAzMmMzLjUtMTAgNS41LTIwLjggNS41LTMyIDAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMTEuMiAxLjkgMjIgNS41IDMybC0yMS44IDBjLTI4LjMgMC01My4yIDE4LjUtNjEuMyA0NS42TDIuNCA0NDAuMkMuOCA0NDUuNCAwIDQ1MC44IDAgNDU2LjIgMCA0ODcgMjUgNTEyIDU1LjggNTEybDQwMC40IDBjMzAuOCAwIDU1LjgtMjUgNTUuOC01NS44IDAtNS40LS44LTEwLjgtMi40LTE2bC04MC0yNjYuNWMtOC4xLTI3LjEtMzMtNDUuNi02MS4zLTQ1LjZsLTIxLjggMHoiXQogICAgfTsKICAgIGZhRGljZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTIyXSwgImY1MjIiLCAiTTE0MS40IDIuM0MxMDMtOCA2My41IDE0LjggNTMuMyA1My4yTDIuNSAyNDIuN0MtNy44IDI4MS4xIDE1IDMyMC42IDUzLjQgMzMwLjlsMTg5LjUgNTAuOGMzOC40IDEwLjMgNzcuOS0xMi41IDg4LjItNTAuOWw1MC44LTE4OS41YzEwLjMtMzguNC0xMi41LTc3LjktNTAuOS04OC4yTDE0MS40IDIuM3ptMjMgMjA1LjdhMzIgMzIgMCAxIDEgNTUuNC0zMiAzMiAzMiAwIDEgMSAtNTUuNCAzMnpNNzkuMiAyMjAuM2EzMiAzMiAwIDEgMSAzMiA1NS40IDMyIDMyIDAgMSAxIC0zMi01NS40em0xODUgOTYuNGEzMiAzMiAwIDEgMSAtMzItNTUuNCAzMiAzMiAwIDEgMSAzMiA1NS40em05LTIwOC40YTMyIDMyIDAgMSAxIDMyIDU1LjQgMzIgMzIgMCAxIDEgLTMyLTU1LjR6bS0xMjEgMTQuNGEzMiAzMiAwIDEgMSAtMzItNTUuNCAzMiAzMiAwIDEgMSAzMiA1NS40ek00MTggMTkyTDM3Ny40IDM0My4yYy0xNy4yIDY0LTgzIDEwMi0xNDcgODQuOWwtMzguMy0xMC4zIDAgMzAuMmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MmMwLTM1LjMtMjguNy02NC02NC02NEw0MTggMTkyeiJdCiAgICB9OwogICAgZmFTaG9wU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hvcC1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzdG9yZS1hbHQtc2xhc2giXSwgImUwNzAiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU3LTU3IDAtMTkwLjNjMjYuOC0xLjkgNDgtMjQuMyA0OC01MS42IDAtOC0xLjktMTYtNS41LTIzLjJMNDk3LjcgNjcuNEM0ODYuOCA0NS43IDQ2NC43IDMyIDQ0MC40IDMyTDEzNS42IDMyYy0xMC43IDAtMjEgMi43LTMwLjIgNy42TDQxLTI0Ljl6TTMyMS44IDI1Nkw0NDggMjU2IDQ0OCAzODIuMiAzMjEuOCAyNTZ6TTM1MiA0MjEuOGwtNjQtNjQgMCAxMC4yYzAgOC44LTcuMiAxNi0xNiAxNmwtMTI4IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTExMiA1OC4yIDAtMTM0LjgtMTM0LjgtMjkuOSA1OS45Yy0zLjYgNy4yLTUuNSAxNS4xLTUuNSAyMy4yIDAgMjcuMyAyMS4yIDQ5LjcgNDggNTEuNkw2NCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsMTkyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xMC4yeiJdCiAgICB9OwogICAgZmFTdG9yZUFsdFNsYXNoID0gZmFTaG9wU2xhc2g7CiAgICBmYVNvcnREb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNvcnQtZG93biIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJzb3J0LWRlc2MiXSwgImYwZGQiLCAiTTMyIDI4OGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOFMuMiAzMzMuNSA5LjQgMzQyLjZsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzM2NC45IDI4OCAzNTIgMjg4TDMyIDI4OHoiXQogICAgfTsKICAgIGZhU29ydERlc2MgPSBmYVNvcnREb3duOwogICAgZmFQZXNldGFTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlc2V0YS1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUyMjEiLCAiTTExMiAzMkM5NC4zIDMyIDgwIDQ2LjMgODAgNjRsMCAxMDQtMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwyNCAwIDAgMjMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiA5NiAwYzgwLjIgMCAxNDYuNi01OSAxNTguMi0xMzZsMjUuOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNS44IDBDMzg2LjYgOTEgMzIwLjIgMzIgMjQwIDMyTDExMiAzMnpNMzMzIDE2OGwtMTg5IDAgMC03MiA5NiAwYzQ0LjcgMCA4Mi4zIDMwLjYgOTMgNzJ6TTE0NCAyMTZsMTg5IDBjLTEwLjcgNDEuNC00OC4yIDcyLTkzIDcybC05NiAwIDAtNzJ6Il0KICAgIH07CiAgICBmYVRhYmxldFNjcmVlbkJ1dHRvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YWJsZXQtc2NyZWVuLWJ1dHRvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ0YWJsZXQtYWx0Il0sICJmM2ZhIiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6TTI1NiA0MzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzg0IDY0bC0zMjAgMCAwIDI4OCAzMjAgMCAwLTI4OHoiXQogICAgfTsKICAgIGZhVGFibGV0QWx0ID0gZmFUYWJsZXRTY3JlZW5CdXR0b247CiAgICBmYUhhbmRIb2xkaW5nRG9sbGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtaG9sZGluZy1kb2xsYXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiaGFuZC1ob2xkaW5nLXVzZCJdLCAiZjRjMCIsICJNMjg4LTE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDEyLTEuOCAwYy0zNi42IDAtNjYuMiAyOS43LTY2LjIgNjYuMiAwIDMzLjQgMjQuOSA2MS42IDU4IDY1LjdsNjEgNy42YzUuMSAuNiA5IDUgOSAxMC4yIDAgNS43LTQuNiAxMC4yLTEwLjIgMTAuMkwyNDAgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOHMxMi41IDI4IDI4IDI4bDI0IDAgMCAxMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTIgMS44IDBjMzYuNiAwIDY2LjItMjkuNyA2Ni4yLTY2LjIgMC0zMy40LTI0LjktNjEuNi01OC02NS43bC02MS03LjZjLTUuMS0uNi05LTUtOS0xMC4yIDAtNS43IDQuNi0xMC4yIDEwLjItMTAuMkwzMjggNzZjMTUuNSAwIDI4LTEyLjUgMjgtMjhzLTEyLjUtMjgtMjgtMjhsLTE2IDAgMC0xMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMTA5LjMgMzQxLjVMNjYuNyAzODQgMzIgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMC41IDBjMjkgMCA1Ny4zLTkuMyA4MC43LTI2LjVsMTI2LjYtOTMuM2MxNy44LTEzLjEgMjEuNi0zOC4xIDguNS01NS45cy0zOC4xLTIxLjYtNTUuOS04LjVMMzkyLjYgNDE2IDI4MCA0MTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUyLjIgMGMtMzMuOSAwLTY2LjUgMTMuNS05MC41IDM3LjV6Il0KICAgIH07CiAgICBmYUhhbmRIb2xkaW5nVXNkID0gZmFIYW5kSG9sZGluZ0RvbGxhcjsKICAgIGZhU2hpZWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoaWVsZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODczNywgInNoaWVsZC1ibGFuayJdLCAiZjEzMiIsICJNMjU2IDBjNC42IDAgOS4yIDEgMTMuNCAyLjlMNDU3LjggODIuOGMyMiA5LjMgMzguNCAzMSAzOC4zIDU3LjItLjUgOTkuMi00MS4zIDI4MC43LTIxMy42IDM2My4yLTE2LjcgOC0zNi4xIDgtNTIuOCAwLTE3Mi40LTgyLjUtMjEzLjEtMjY0LTIxMy42LTM2My4yLS4xLTI2LjIgMTYuMy00Ny45IDM4LjMtNTcuMkwyNDIuNyAyLjlDMjQ2LjkgMSAyNTEuNCAwIDI1NiAweiJdCiAgICB9OwogICAgZmFTaGllbGRCbGFuayA9IGZhU2hpZWxkOwogICAgZmFGYWNlTGF1Z2gyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtbGF1Z2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGF1Z2giXSwgImY1OTkiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xMDEuNiAzMTRjLTMuNy0xMy43IDcuNS0yNiAyMS43LTI2bDI2NS40IDBjMTQuMiAwIDI1LjQgMTIuMyAyMS43IDI2LTE4LjUgNjgtODAuNiAxMTgtMTU0LjQgMTE4UzEyMCAzODIgMTAxLjYgMzE0ek0xNDQgMTkyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUxhdWdoMiA9IGZhRmFjZUxhdWdoMjsKICAgIGZhSGFuZHNIb2xkaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLWhvbGRpbmciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjRjMiIsICJNODAgMTA0YzAtMjIuMS0xNy45LTQwLTQwLTQwUzAgODEuOSAwIDEwNEwwIDMyNS41YzAgMjUuNSAxMC4xIDQ5LjkgMjguMSA2Ny45TDEyOCA0OTMuM2MxMiAxMiAyOC4zIDE4LjcgNDUuMyAxOC43bDY2LjcgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTc4LjljMC0yOS43LTExLjgtNTguMi0zMi44LTc5LjJsLTI1LjMtMjUuMyAwIDBjLTcuMy03LjMtMjMuMS0yMy4xLTQ3LjItNDcuMi0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2MyNC4xIDI0LjEgMzkuOSAzOS45IDQ3LjIgNDcuMiAxMSAxMSA5LjIgMjkuMi0zLjcgMzcuOC05LjcgNi41LTIyLjcgNS4yLTMxLTMuMUw5OC43IDMwOS41Yy0xMi0xMi0xOC43LTI4LjMtMTguNy00NS4zTDgwIDEwNHptNDgwIDBsMCAxNjAuMmMwIDE3LTYuNyAzMy4zLTE4LjcgNDUuM2wtNTEuMSA1MS4xYy04LjMgOC4zLTIxLjMgOS42LTMxIDMuMS0xMi45LTguNi0xNC43LTI2LjktMy43LTM3LjggNy4zLTcuMyAyMy4xLTIzLjEgNDcuMi00Ny4yIDEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwYy0yNC4xIDI0LjEtMzkuOSAzOS45LTQ3LjIgNDcuMmwwIDAtMjUuMyAyNS4zYy0yMSAyMS0zMi44IDQ5LjUtMzIuOCA3OS4ybDAgNzguOWMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2Ni43IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdsOTkuOS05OS45YzE4LTE4IDI4LjEtNDIuNCAyOC4xLTY3LjlMNjQwIDEwNGMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MHoiXQogICAgfTsKICAgIGZhQ2FydFNob3BwaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcnQtc2hvcHBpbmciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjg3MjIsICJzaG9wcGluZy1jYXJ0Il0sICJmMDdhIiwgIk0yNC0xNkMxMC43LTE2IDAtNS4zIDAgOFMxMC43IDMyIDI0IDMybDQ1LjMgMGMzLjkgMCA3LjIgMi44IDcuOSA2LjZsNTIuMSAyODYuM2M2LjIgMzQuMiAzNiA1OS4xIDcwLjggNTkuMUw0NTYgMzg0YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNTUuOSAwYy0xMS42IDAtMjEuNS04LjMtMjMuNi0xOS43bC01LjEtMjguMyAzMDMuNiAwYzMwLjggMCA1Ny4yLTIxLjkgNjIuOS01Mi4yTDU2OC45IDY5LjlDNTcyLjYgNTAuMiA1NTcuNSAzMiA1MzcuNCAzMmwtNDEyLjcgMC0uNC0yYy00LjgtMjYuNi0yOC00Ni01NS4xLTQ2TDI0LTE2ek0yMDggNTEyYTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptMjI0IDBhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2eiJdCiAgICB9OwogICAgZmFTaG9wcGluZ0NhcnQgPSBmYUNhcnRTaG9wcGluZzsKICAgIGZhT2N0YWdvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJvY3RhZ29uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzIxXSwgImYzMDYiLCAiTTE4OC42IC4xYy0xNyAwLTMzLjMgNi43LTQ1LjMgMTguN0wxOS4yIDE0M0M3LjIgMTU1IC41IDE3MS4yIC41IDE4OC4ybDAgMTM1LjZjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNMMTQzLjQgNDkzLjJjMTIgMTIgMjguMyAxOC43IDQ1LjMgMTguN2wxMzUuNiAwYzE3IDAgMzMuMy02LjcgNDUuMy0xOC43TDQ5My42IDM2OWMxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zbDAtMTM1LjZjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMzY5LjUgMTguOGMtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN0wxODguNiAuMXoiXQogICAgfTsKICAgIGZhSGFuZFBvaW50ZXIyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjVhIiwgIk0xMjggNDBjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MGwwIDE0OC4yYzguNS03LjYgMTkuNy0xMi4yIDMyLTEyLjIgMjAuNiAwIDM4LjIgMTMgNDUgMzEuMiA4LjgtOS4zIDIxLjItMTUuMiAzNS0xNS4yIDI1LjMgMCA0NiAxOS41IDQ3LjkgNDQuMyA4LjUtNy43IDE5LjgtMTIuMyAzMi4xLTEyLjMgMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxMTJjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTg1LjMgMGMtNSAwLTkuOS0uMy0xNC43LTEtNTUuMy01LjYtMTA2LjItMzQtMTQwLTc5TDggMzM2Yy0xMy4zLTE3LjctOS43LTQyLjcgOC01NnM0Mi43LTkuNyA1NiA4bDU2IDc0LjcgMC0zMjIuN3pNMjQwIDMwNGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05NnptNDgtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05NmMwLTguOC03LjItMTYtMTYtMTZ6bTgwIDE2YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2eiJdCiAgICB9OwogICAgZmFSZWdpc3RlcmVkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZWdpc3RlcmVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTc0XSwgImYyNWQiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMDAgMTQ0bDgwIDBjMzkuOCAwIDcyIDMyLjIgNzIgNzIgMCAyOC45LTE3IDUzLjgtNDEuNiA2NS4zbDMwLjIgNTAuM2M2LjggMTEuNCAzLjEgMjYuMS04LjIgMzIuOXMtMjYuMSAzLjEtMzIuOS04LjJsLTQxLTY4LjMtMzQuNCAwIDAgNTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNzZjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTcyIDk2bDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNTYgMCAwIDQ4IDQ4IDB6Il0KICAgIH07CiAgICBmYUhvdXNlU2lnbmFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLXNpZ25hbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMDEyIiwgIk01MTUuOSAyNDBsLTE5LjkgMCAwIDE0NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMTM3IDBjLTI0LTkxLjctOTMuNS0xNjUtMTgzLTE5NC4zbDAtMTMuNy0xOS45IDBjLTE1LjUgMC0yOC4xLTEyLjYtMjguMS0yOC4xIDAtNy42IDMuMS0xNC45IDguNi0yMC4yTDI3Ni41LTQuOUMyODMuOS0xMiAyOTMuNy0xNiAzMDQtMTZzMjAuMSA0IDI3LjUgMTEuMUw1MzUuNCAxOTEuN2M1LjUgNS4zIDguNiAxMi42IDguNiAyMC4yIDAgMTUuNS0xMi42IDI4LjEtMjguMSAyOC4xek0yODAgMTkyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC00OGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNDggMHpNMjQgMjg4YzEyOC4xIDAgMjMyIDEwMy45IDIzMiAyMzIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xMDEuNi04Mi40LTE4NC0xODQtMTg0LTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTggMTkyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNMCA0MDhjMC0xMy4zIDEwLjctMjQgMjQtMjQgNzUuMSAwIDEzNiA2MC45IDEzNiAxMzYgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00OC42LTM5LjQtODgtODgtODgtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYUJhbmdsYWRlc2hpVGFrYVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFuZ2xhZGVzaGktdGFrYS1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUyZTYiLCAiTTM2IDMyLjNDMTguNCAzMC4xIDIuNCA0Mi41IC4zIDYwUzEwLjUgOTMuNiAyOCA5NS44bDcuOSAxYzE2IDIgMjggMTUuNiAyOCAzMS44bDAgMzEuNS00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDAgMCAxNzZjMCA1MyA0MyA5NiA5NiA5NmwzMiAwYzEwNiAwIDE5Mi04NiAxOTItMTkybDAtMzJjMC01My00My05Ni05Ni05NmwtMTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTc2IDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQwIDAgMC0zMS41QzEyOCA4MC4xIDkyIDM5LjIgNDMuOSAzMy4ybC03LjktMXoiXQogICAgfTsKICAgIGljb25zMyA9IHsKICAgICAgZmEwLAogICAgICBmYTEsCiAgICAgIGZhMiwKICAgICAgZmEzLAogICAgICBmYTQsCiAgICAgIGZhNSwKICAgICAgZmE2LAogICAgICBmYTcsCiAgICAgIGZhOCwKICAgICAgZmE5LAogICAgICBmYURvbGxhclNpZ24sCiAgICAgIGZhRG9sbGFyLAogICAgICBmYVVzZCwKICAgICAgZmFEb2csCiAgICAgIGZhVHJ1Y2tNb3ZpbmcsCiAgICAgIGZhUm90YXRlLAogICAgICBmYVN5bmNBbHQsCiAgICAgIGZhU3F1YXJlTWludXM6IGZhU3F1YXJlTWludXMyLAogICAgICBmYU1pbnVzU3F1YXJlOiBmYU1pbnVzU3F1YXJlMiwKICAgICAgZmFBbGlnbkp1c3RpZnksCiAgICAgIGZhQ2FsZW5kYXJDaGVjazogZmFDYWxlbmRhckNoZWNrMiwKICAgICAgZmFGYWNlS2lzczogZmFGYWNlS2lzczIsCiAgICAgIGZhS2lzczogZmFLaXNzMiwKICAgICAgZmFLaXRjaGVuU2V0LAogICAgICBmYURuYSwKICAgICAgZmFDaGlsZFJlYWNoaW5nLAogICAgICBmYVBhc3RlOiBmYVBhc3RlMiwKICAgICAgZmFGaWxlQ2xpcGJvYXJkOiBmYUZpbGVDbGlwYm9hcmQyLAogICAgICBmYU1ldGVvciwKICAgICAgZmFHZWFycywKICAgICAgZmFDb2dzLAogICAgICBmYUZpbGVDaXJjbGVQbHVzLAogICAgICBmYUljaWNsZXMsCiAgICAgIGZhQXJyb3dUcmVuZFVwLAogICAgICBmYUhleGFnb25Ob2Rlc0JvbHQsCiAgICAgIGZhUXVlc3Rpb24sCiAgICAgIGZhSGFuZHNCb3VuZCwKICAgICAgZmFQZXJzb25XYWxraW5nTHVnZ2FnZSwKICAgICAgZmFGaWxlQXJyb3dEb3duLAogICAgICBmYUZpbGVEb3dubG9hZCwKICAgICAgZmFQZXJzb25Cb290aCwKICAgICAgZmFMb2N1c3QsCiAgICAgIGZhUmlnaHRMb25nLAogICAgICBmYUxvbmdBcnJvd0FsdFJpZ2h0LAogICAgICBmYVRydWNrRHJvcGxldCwKICAgICAgZmFIYW5kSG9sZGluZ01lZGljYWwsCiAgICAgIGZhSGFuZFBvaW50TGVmdDogZmFIYW5kUG9pbnRMZWZ0MiwKICAgICAgZmFDYWxjdWxhdG9yLAogICAgICBmYU1pbnVzLAogICAgICBmYVN1YnRyYWN0LAogICAgICBmYUFycm93VXBaQSwKICAgICAgZmFTb3J0QWxwaGFVcEFsdCwKICAgICAgZmFNaWNyb3Bob25lU2xhc2gsCiAgICAgIGZhU3F1YXJlUGVuLAogICAgICBmYVBlblNxdWFyZSwKICAgICAgZmFQZW5jaWxTcXVhcmUsCiAgICAgIGZhSGFuZEZpc3QsCiAgICAgIGZhRmlzdFJhaXNlZCwKICAgICAgZmFDb21tZW50U21zLAogICAgICBmYVNtcywKICAgICAgZmFTaW1DYXJkLAogICAgICBmYVNjYWxlQmFsYW5jZWQsCiAgICAgIGZhQmFsYW5jZVNjYWxlLAogICAgICBmYUNhciwKICAgICAgZmFBdXRvbW9iaWxlLAogICAgICBmYUNyb3BTaW1wbGUsCiAgICAgIGZhQ3JvcEFsdCwKICAgICAgZmFNZWRhbCwKICAgICAgZmFTY3JvbGwsCiAgICAgIGZhRmlsZUV4Y2VsOiBmYUZpbGVFeGNlbDIsCiAgICAgIGZhRmlsdGVyLAogICAgICBmYURydW0sCiAgICAgIGZhTWFwUGluLAogICAgICBmYVNjYWxlVW5iYWxhbmNlZEZsaXAsCiAgICAgIGZhQmFsYW5jZVNjYWxlUmlnaHQsCiAgICAgIGZhQXJyb3dzVG9DaXJjbGUsCiAgICAgIGZhRW52ZWxvcGU6IGZhRW52ZWxvcGUyLAogICAgICBmYUJhYnksCiAgICAgIGZhU3F1YXJlQ2FyZXREb3duOiBmYVNxdWFyZUNhcmV0RG93bjIsCiAgICAgIGZhQ2FyZXRTcXVhcmVEb3duOiBmYUNhcmV0U3F1YXJlRG93bjIsCiAgICAgIGZhVGVudCwKICAgICAgZmFBLAogICAgICBmYVBhcmFjaHV0ZUJveCwKICAgICAgZmFDYXJ0QXJyb3dEb3duLAogICAgICBmYUJyaWRnZUNpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYUNsb3VkQXJyb3dVcCwKICAgICAgZmFDbG91ZFVwbG9hZCwKICAgICAgZmFDbG91ZFVwbG9hZEFsdCwKICAgICAgZmFBdCwKICAgICAgZmFJbmRpYW5SdXBlZVNpZ24sCiAgICAgIGZhSW5kaWFuUnVwZWUsCiAgICAgIGZhSW5yLAogICAgICBmYVRydWNrOiBmYVRydWNrMiwKICAgICAgZmFDaGFsa2JvYXJkVXNlciwKICAgICAgZmFDaGFsa2JvYXJkVGVhY2hlciwKICAgICAgZmFVc2VyQ2hlY2ssCiAgICAgIGZhVXNlck5pbmphLAogICAgICBmYVBsYW50V2lsdCwKICAgICAgZmFXZWlnaHRTY2FsZSwKICAgICAgZmFXZWlnaHQsCiAgICAgIGZhQ2FyZXRSaWdodCwKICAgICAgZmFGbG9yaW5TaWduLAogICAgICBmYUJlbGw6IGZhQmVsbDIsCiAgICAgIGZhTGFyaVNpZ24sCiAgICAgIGZhTWlsbFNpZ24sCiAgICAgIGZhUGVyc29uU25vd2JvYXJkaW5nLAogICAgICBmYVNub3dib2FyZGluZywKICAgICAgZmFUdHksCiAgICAgIGZhVGVsZXR5cGUsCiAgICAgIGZhVXNlcnNSZWN0YW5nbGUsCiAgICAgIGZhTW9iaWxlLAogICAgICBmYU1vYmlsZUFuZHJvaWQsCiAgICAgIGZhTW9iaWxlUGhvbmUsCiAgICAgIGZhQXJyb3dzVHVyblRvRG90cywKICAgICAgZmFFeGNsYW1hdGlvbiwKICAgICAgZmFDaHVyY2gsCiAgICAgIGZhVG9nZ2xlT2ZmLAogICAgICBmYVNob2VQcmludHMsCiAgICAgIGZhRmlsZUNpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYVdhbGxldCwKICAgICAgZmFNZXNzYWdlOiBmYU1lc3NhZ2UyLAogICAgICBmYUNvbW1lbnRBbHQ6IGZhQ29tbWVudEFsdDIsCiAgICAgIGZhVHJvcGh5LAogICAgICBmYUZhY2VEaXp6eTogZmFGYWNlRGl6enkyLAogICAgICBmYURpenp5OiBmYURpenp5MiwKICAgICAgZmFCYWN0ZXJpYSwKICAgICAgZmFFYXJEZWFmLAogICAgICBmYURlYWYsCiAgICAgIGZhRGVhZm5lc3MsCiAgICAgIGZhSGFyZE9mSGVhcmluZywKICAgICAgZmFQZW9wbGVBcnJvd3MsCiAgICAgIGZhUGVvcGxlQXJyb3dzTGVmdFJpZ2h0LAogICAgICBmYUhhbmRzQ2xhcHBpbmcsCiAgICAgIGZhVmlydXNDb3ZpZFNsYXNoLAogICAgICBmYUNhbGVuZGFyRGF5czogZmFDYWxlbmRhckRheXMyLAogICAgICBmYUNhbGVuZGFyQWx0OiBmYUNhbGVuZGFyQWx0MiwKICAgICAgZmFEaWFtb25kVHVyblJpZ2h0LAogICAgICBmYURpcmVjdGlvbnMsCiAgICAgIGZhSGFuZFBvaW50VXA6IGZhSGFuZFBvaW50VXAyLAogICAgICBmYUJlemllckN1cnZlLAogICAgICBmYVBlcnNvbkhhbGZEcmVzcywKICAgICAgZmFTcXVhcmVQb2xsSG9yaXpvbnRhbCwKICAgICAgZmFQb2xsSCwKICAgICAgZmFTY2hvb2xDaXJjbGVYbWFyaywKICAgICAgZmFIYW5kTGl6YXJkOiBmYUhhbmRMaXphcmQyLAogICAgICBmYUNoYWxrYm9hcmQsCiAgICAgIGZhQmxhY2tib2FyZCwKICAgICAgZmFVcFJpZ2h0RnJvbVNxdWFyZSwKICAgICAgZmFFeHRlcm5hbExpbmtBbHQsCiAgICAgIGZhU3F1YXJlRnVsbDogZmFTcXVhcmVGdWxsMiwKICAgICAgZmFDbG92ZXIsCiAgICAgIGZhVGVldGhPcGVuLAogICAgICBmYUJhcnNTdGFnZ2VyZWQsCiAgICAgIGZhUmVvcmRlciwKICAgICAgZmFTdHJlYW0sCiAgICAgIGZhV2FyZWhvdXNlLAogICAgICBmYVN3YXRjaGJvb2ssCiAgICAgIGZhQ2FtcGdyb3VuZCwKICAgICAgZmFQZXJzb25XYWxraW5nQXJyb3dSaWdodCwKICAgICAgZmFHbGFzc2VzLAogICAgICBmYUNpcmNsZVBhdXNlOiBmYUNpcmNsZVBhdXNlMiwKICAgICAgZmFQYXVzZUNpcmNsZTogZmFQYXVzZUNpcmNsZTIsCiAgICAgIGZhTWVtb3J5LAogICAgICBmYUdpZnQsCiAgICAgIGZhTW9uZXlCaWxsV2hlYXQsCiAgICAgIGZhRHVuZ2VvbiwKICAgICAgZmFTdWl0Y2FzZU1lZGljYWwsCiAgICAgIGZhTWVka2l0LAogICAgICBmYVBlcnNvbkNhbmUsCiAgICAgIGZhR2F1Z2UsCiAgICAgIGZhRGFzaGJvYXJkLAogICAgICBmYUdhdWdlTWVkLAogICAgICBmYVRhY2hvbWV0ZXJBbHRBdmVyYWdlLAogICAgICBmYUVudmVsb3BlT3BlblRleHQsCiAgICAgIGZhVG9vbGJveCwKICAgICAgZmFQb3dlck9mZiwKICAgICAgZmFTaWduYWwsCiAgICAgIGZhU2lnbmFsNSwKICAgICAgZmFTaWduYWxQZXJmZWN0LAogICAgICBmYUFycm93c1NwaW4sCiAgICAgIGZhSm9pbnQsCiAgICAgIGZhQnJhaWxsZSwKICAgICAgZmFCYXNrZXRTaG9wcGluZywKICAgICAgZmFTaG9wcGluZ0Jhc2tldCwKICAgICAgZmFCcmlkZ2UsCiAgICAgIGZhUGxhbmVBcnJpdmFsLAogICAgICBmYUNhc2hSZWdpc3RlciwKICAgICAgZmFSaW5nLAogICAgICBmYVNoYXJlTm9kZXMsCiAgICAgIGZhU2hhcmVBbHQsCiAgICAgIGZhUGVyc29uQ2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhQmlub2N1bGFycywKICAgICAgZmFLaXBTaWduLAogICAgICBmYUhhcmREcml2ZTogZmFIYXJkRHJpdmUyLAogICAgICBmYUhkZDogZmFIZGQyLAogICAgICBmYVJhbmtpbmdTdGFyLAogICAgICBmYVVzZXJUaWUsCiAgICAgIGZhRWxsaXBzaXMsCiAgICAgIGZhRWxsaXBzaXNILAogICAgICBmYVN0b3JlU2xhc2gsCiAgICAgIGZhUGVyY2VudCwKICAgICAgZmFQZXJjZW50YWdlLAogICAgICBmYUZpbGVaaXBwZXI6IGZhRmlsZVppcHBlcjIsCiAgICAgIGZhRmlsZUFyY2hpdmU6IGZhRmlsZUFyY2hpdmUyLAogICAgICBmYURpc3BsYXksCiAgICAgIGZhSWNvbnMsCiAgICAgIGZhSGVhcnRNdXNpY0NhbWVyYUJvbHQsCiAgICAgIGZhUnVsZXJWZXJ0aWNhbCwKICAgICAgZmFNYXBMb2NhdGlvbkRvdCwKICAgICAgZmFNYXBNYXJrZWRBbHQsCiAgICAgIGZhSGVhcnRDcmFjaywKICAgICAgZmFIZWFydEJyb2tlbiwKICAgICAgZmFDb3csCiAgICAgIGZhUnNzLAogICAgICBmYUZlZWQsCiAgICAgIGZhTWFnbmlmeWluZ0dsYXNzLAogICAgICBmYVNlYXJjaCwKICAgICAgZmFDbG91ZE1vb24sCiAgICAgIGZhQm94ZXNTdGFja2VkLAogICAgICBmYUJveGVzLAogICAgICBmYUJveGVzQWx0LAogICAgICBmYUNvZGVCcmFuY2gsCiAgICAgIGZhQmFuLAogICAgICBmYUNhbmNlbCwKICAgICAgZmFKdWdEZXRlcmdlbnQsCiAgICAgIGZhUmVwbHksCiAgICAgIGZhTWFpbFJlcGx5LAogICAgICBmYVN1blBsYW50V2lsdCwKICAgICAgZmFCYWN0ZXJpdW0sCiAgICAgIGZhUmVjb3JkVmlueWwsCiAgICAgIGZhRmxvcHB5RGlzazogZmFGbG9wcHlEaXNrMiwKICAgICAgZmFTYXZlOiBmYVNhdmUyLAogICAgICBmYVRvaWxldHNQb3J0YWJsZSwKICAgICAgZmFPLAogICAgICBmYVBhbGV0dGUsCiAgICAgIGZhVW5sb2NrLAogICAgICBmYUVhckxpc3RlbiwKICAgICAgZmFBc3Npc3RpdmVMaXN0ZW5pbmdTeXN0ZW1zLAogICAgICBmYUNvZGVQdWxsUmVxdWVzdCwKICAgICAgZmFLZXksCiAgICAgIGZhU2t1bGwsCiAgICAgIGZhTWFyc1N0cm9rZVVwLAogICAgICBmYU1hcnNTdHJva2VWLAogICAgICBmYUZpcmVGbGFtZVNpbXBsZSwKICAgICAgZmFCdXJuLAogICAgICBmYVRyZWUsCiAgICAgIGZhU21vZywKICAgICAgZmFTLAogICAgICBmYUplZGksCiAgICAgIGZhUGVyc29uSGlraW5nLAogICAgICBmYUhpa2luZywKICAgICAgZmFBcnJvd3NVcFRvTGluZSwKICAgICAgZmFNYXJzRG91YmxlLAogICAgICBmYVRoZXJtb21ldGVyLAogICAgICBmYVBhaW50YnJ1c2gsCiAgICAgIGZhUGFpbnRCcnVzaCwKICAgICAgZmFOZXV0ZXIsCiAgICAgIGZhU3F1YXJlUGhvbmVGbGlwLAogICAgICBmYVBob25lU3F1YXJlQWx0LAogICAgICBmYUZhY2VHcmluVG9uZ3VlU3F1aW50OiBmYUZhY2VHcmluVG9uZ3VlU3F1aW50MiwKICAgICAgZmFHcmluVG9uZ3VlU3F1aW50OiBmYUdyaW5Ub25ndWVTcXVpbnQyLAogICAgICBmYUNvbW1lbnREb2xsYXIsCiAgICAgIGZhSGlwcG8sCiAgICAgIGZhQm93bEZvb2QsCiAgICAgIGZhU3F1YXJlVmlydXMsCiAgICAgIGZhQ2xvdWRTdW5SYWluLAogICAgICBmYUFycm93UmlnaHRMb25nLAogICAgICBmYUxvbmdBcnJvd1JpZ2h0LAogICAgICBmYUJ1aWxkaW5nVW4sCiAgICAgIGZhVGVtcGVyYXR1cmVMb3csCiAgICAgIGZhRG9vck9wZW4sCiAgICAgIGZhQWxpZ25MZWZ0LAogICAgICBmYUNhbWVyYTogZmFDYW1lcmEyLAogICAgICBmYUNhbWVyYUFsdDogZmFDYW1lcmFBbHQyLAogICAgICBmYVVzZXJzUmF5cywKICAgICAgZmFSYWluYm93LAogICAgICBmYVNpdGVtYXAsCiAgICAgIGZhRmFjZUdyaW5TdGFyczogZmFGYWNlR3JpblN0YXJzMiwKICAgICAgZmFHcmluU3RhcnM6IGZhR3JpblN0YXJzMiwKICAgICAgZmFTb3J0VXAsCiAgICAgIGZhU29ydEFzYywKICAgICAgZmFFeWU6IGZhRXllMiwKICAgICAgZmFDYXJldExlZnQsCiAgICAgIGZhQXBwbGVXaG9sZSwKICAgICAgZmFBcHBsZUFsdCwKICAgICAgZmFTY3JvbGxUb3JhaCwKICAgICAgZmFUb3JhaCwKICAgICAgZmFIb3VzZUxvY2ssCiAgICAgIGZhQXJyb3dzTGVmdFJpZ2h0VG9MaW5lLAogICAgICBmYVRyYXNoLAogICAgICBmYUZhY2VTYWRUZWFyOiBmYUZhY2VTYWRUZWFyMiwKICAgICAgZmFTYWRUZWFyOiBmYVNhZFRlYXIyLAogICAgICBmYUZheCwKICAgICAgZmFQZXJzb25DaXJjbGVQbHVzLAogICAgICBmYUhhbXNhLAogICAgICBmYVBlcnNvbkNpcmNsZVF1ZXN0aW9uLAogICAgICBmYUNsaXBib2FyZENoZWNrLAogICAgICBmYVNoYXJlRnJvbVNxdWFyZTogZmFTaGFyZUZyb21TcXVhcmUyLAogICAgICBmYVNoYXJlU3F1YXJlOiBmYVNoYXJlU3F1YXJlMiwKICAgICAgZmFSZWNlaXB0LAogICAgICBmYUVxdWFscywKICAgICAgZmFDaGV2cm9uVXAsCiAgICAgIGZhVmlydXNTbGFzaCwKICAgICAgZmFTbGFzaCwKICAgICAgZmFFeHBhbmQsCiAgICAgIGZhTm90ZVN0aWNreTogZmFOb3RlU3RpY2t5MiwKICAgICAgZmFTdGlja3lOb3RlOiBmYVN0aWNreU5vdGUyLAogICAgICBmYVRhYmxlQ29sdW1ucywKICAgICAgZmFDb2x1bW5zLAogICAgICBmYVBlcnNvblNoZWx0ZXIsCiAgICAgIGZhQ2lyY2xlTm90Y2gsCiAgICAgIGZhV2F0ZXIsCiAgICAgIGZhRGVsZXRlTGVmdCwKICAgICAgZmFCYWNrc3BhY2UsCiAgICAgIGZhQnJvb21CYWxsLAogICAgICBmYVF1aWRkaXRjaCwKICAgICAgZmFRdWlkZGl0Y2hCcm9vbUJhbGwsCiAgICAgIGZhSiwKICAgICAgZmFTaHV0dGxlU3BhY2UsCiAgICAgIGZhU3BhY2VTaHV0dGxlLAogICAgICBmYVlpbllhbmcsCiAgICAgIGZhU3RvcCwKICAgICAgZmFUcm93ZWwsCiAgICAgIGZhSGFuZEJhY2tGaXN0OiBmYUhhbmRCYWNrRmlzdDIsCiAgICAgIGZhSGFuZFJvY2s6IGZhSGFuZFJvY2syLAogICAgICBmYVRlbXBlcmF0dXJlSGlnaCwKICAgICAgZmFHcmVhdGVyVGhhbiwKICAgICAgZmFDcnV0Y2gsCiAgICAgIGZhU2VwdGFnb24sCiAgICAgIGZhSGVwdGFnb24sCiAgICAgIGZhU3RyZWV0VmlldywKICAgICAgZmFXYXZlU3F1YXJlLAogICAgICBmYUFuZ2xlTGVmdCwKICAgICAgZmFTY3Jld2RyaXZlciwKICAgICAgZmFUcmFjdG9yLAogICAgICBmYUJyaWRnZUNpcmNsZVhtYXJrLAogICAgICBmYVZpYWxzLAogICAgICBmYVN0ZXRob3Njb3BlLAogICAgICBmYVBvZGNhc3QsCiAgICAgIGZhQXJyb3dVcFJpZ2h0RG90cywKICAgICAgZmFDaGVzc1F1ZWVuOiBmYUNoZXNzUXVlZW4yLAogICAgICBmYUFuY2hvckNpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYUVsbGlwc2lzVmVydGljYWwsCiAgICAgIGZhRWxsaXBzaXNWLAogICAgICBmYUhlYXJ0Q2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhQnVpbGRpbmdDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFQZXJzb25BcnJvd1VwRnJvbUxpbmUsCiAgICAgIGZhTm90RXF1YWwsCiAgICAgIGZhVHJhaW5UcmFtLAogICAgICBmYVBsYW5lRGVwYXJ0dXJlLAogICAgICBmYVJpZ2h0VG9CcmFja2V0LAogICAgICBmYVNpZ25JbkFsdCwKICAgICAgZmFTZENhcmQsCiAgICAgIGZhSG91c2VDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFTaGVrZWxTaWduLAogICAgICBmYUlscywKICAgICAgZmFTaGVrZWwsCiAgICAgIGZhU2hlcWVsLAogICAgICBmYVNoZXFlbFNpZ24sCiAgICAgIGZhUmFkaW8sCiAgICAgIGZhSGFuZERvdHMsCiAgICAgIGZhQWxsZXJnaWVzLAogICAgICBmYUJvb2tTa3VsbCwKICAgICAgZmFCb29rRGVhZCwKICAgICAgZmFVbmxvY2tLZXlob2xlLAogICAgICBmYVVubG9ja0FsdCwKICAgICAgZmFGaWxlQXJyb3dVcCwKICAgICAgZmFGaWxlVXBsb2FkLAogICAgICBmYUZhY2VHcmluVGVhcnM6IGZhRmFjZUdyaW5UZWFyczIsCiAgICAgIGZhR3JpblRlYXJzOiBmYUdyaW5UZWFyczIsCiAgICAgIGZhUGVuVG9TcXVhcmU6IGZhUGVuVG9TcXVhcmUyLAogICAgICBmYUVkaXQ6IGZhRWRpdDIsCiAgICAgIGZhRWFydGhFdXJvcGUsCiAgICAgIGZhR2xvYmVFdXJvcGUsCiAgICAgIGZhRmFjZUdyaW5CZWFtU3dlYXQ6IGZhRmFjZUdyaW5CZWFtU3dlYXQyLAogICAgICBmYUdyaW5CZWFtU3dlYXQ6IGZhR3JpbkJlYW1Td2VhdDIsCiAgICAgIGZhQ2lyY2xlSGFsZlN0cm9rZSwKICAgICAgZmFBZGp1c3QsCiAgICAgIGZhUGVyc29uTWlsaXRhcnlUb1BlcnNvbiwKICAgICAgZmFUYWJsZUNlbGxzQ29sdW1uTG9jaywKICAgICAgZmFUcnVja0ZpZWxkVW4sCiAgICAgIGZhQ2xvY2s6IGZhQ2xvY2syLAogICAgICBmYUNsb2NrRm91cjogZmFDbG9ja0ZvdXIyLAogICAgICBmYUJvb2ssCiAgICAgIGZhRmFjZUxhdWdoV2luazogZmFGYWNlTGF1Z2hXaW5rMiwKICAgICAgZmFMYXVnaFdpbms6IGZhTGF1Z2hXaW5rMiwKICAgICAgZmFDbG91ZE1lYXRiYWxsLAogICAgICBmYUNoYXJ0QXJlYSwKICAgICAgZmFBcmVhQ2hhcnQsCiAgICAgIGZhUnVwaWFoU2lnbiwKICAgICAgZmFUZXh0V2lkdGgsCiAgICAgIGZhU2F0ZWxsaXRlLAogICAgICBmYU1hZ25pZnlpbmdHbGFzc01pbnVzLAogICAgICBmYVNlYXJjaE1pbnVzLAogICAgICBmYVBlb3BsZUdyb3VwLAogICAgICBmYVNxdWFyZUJpbmFyeSwKICAgICAgZmFNYXNrc1RoZWF0ZXIsCiAgICAgIGZhVGhlYXRlck1hc2tzLAogICAgICBmYUNhcnRQbHVzLAogICAgICBmYUhhbmRzQXNsSW50ZXJwcmV0aW5nLAogICAgICBmYUFtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nLAogICAgICBmYUFzbEludGVycHJldGluZywKICAgICAgZmFIYW5kc0FtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nLAogICAgICBmYVRhYmxlQ2VsbHNSb3dVbmxvY2ssCiAgICAgIGZhUm9ja2V0LAogICAgICBmYVNocmltcCwKICAgICAgZmFUZW5nZVNpZ24sCiAgICAgIGZhVGVuZ2UsCiAgICAgIGZhSG91c2VDaGltbmV5TWVkaWNhbCwKICAgICAgZmFDbGluaWNNZWRpY2FsLAogICAgICBmYVVzZXJzU2xhc2gsCiAgICAgIGZhUGFwZXJQbGFuZTogZmFQYXBlclBsYW5lMiwKICAgICAgZmFCb29rQXRsYXMsCiAgICAgIGZhQXRsYXMsCiAgICAgIGZhVGFibGUsCiAgICAgIGZhSGVhcnQ6IGZhSGVhcnQyLAogICAgICBmYUNpcmNsZUNoZXZyb25VcCwKICAgICAgZmFDaGV2cm9uQ2lyY2xlVXAsCiAgICAgIGZhQmF0dGVyeUhhbGYsCiAgICAgIGZhQmF0dGVyeTMsCiAgICAgIGZhRm9udEF3ZXNvbWU6IGZhRm9udEF3ZXNvbWUzLAogICAgICBmYUZvbnRBd2Vzb21lRmxhZzogZmFGb250QXdlc29tZUZsYWczLAogICAgICBmYUZvbnRBd2Vzb21lTG9nb0Z1bGw6IGZhRm9udEF3ZXNvbWVMb2dvRnVsbDMsCiAgICAgIGZhSGFuZGN1ZmZzLAogICAgICBmYUhhdENvd2JveVNpZGUsCiAgICAgIGZhSW5kdXN0cnksCiAgICAgIGZhTGluZXNMZWFuaW5nLAogICAgICBmYVBhc3Nwb3J0LAogICAgICBmYUluZmluaXR5LAogICAgICBmYUNsb25lOiBmYUNsb25lMiwKICAgICAgZmFGb3J3YXJkLAogICAgICBmYU0sCiAgICAgIGZhUm9hZFNwaWtlcywKICAgICAgZmFNb3VudGFpbiwKICAgICAgZmFDaGVzcywKICAgICAgZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnMsCiAgICAgIGZhVGVtcGVyYXR1cmUzLAogICAgICBmYVRoZXJtb21ldGVyMywKICAgICAgZmFUaGVybW9tZXRlclRocmVlUXVhcnRlcnMsCiAgICAgIGZhQiwKICAgICAgZmFTaGllbGRWaXJ1cywKICAgICAgZmFMaXRlY29pblNpZ24sCiAgICAgIGZhRGljZUQ2LAogICAgICBmYUdyaXBMaW5lc1ZlcnRpY2FsLAogICAgICBmYUdvbGZCYWxsVGVlLAogICAgICBmYUdvbGZCYWxsLAogICAgICBmYUhleGFnb24sCiAgICAgIGZhRm9sZGVyT3BlbjogZmFGb2xkZXJPcGVuMiwKICAgICAgZmFLYWFiYSwKICAgICAgZmFIYW5kSG9sZGluZywKICAgICAgZmFTaW5nbGVRdW90ZVJpZ2h0LAogICAgICBmYUJvdHRsZURyb3BsZXQsCiAgICAgIGZhV2luZG93TWluaW1pemU6IGZhV2luZG93TWluaW1pemUyLAogICAgICBmYUNoZXZyb25SaWdodCwKICAgICAgZmFFZ2csCiAgICAgIGZhTGFuZG1hcmtEb21lLAogICAgICBmYUxhbmRtYXJrQWx0LAogICAgICBmYVdvcm0sCiAgICAgIGZhVXNlckluanVyZWQsCiAgICAgIGZhU3RyaWtldGhyb3VnaCwKICAgICAgZmFCbG9nLAogICAgICBmYVN0b3B3YXRjaDIwLAogICAgICBmYVRydWNrUGlja3VwLAogICAgICBmYVNlZWRsaW5nLAogICAgICBmYVNwcm91dCwKICAgICAgZmFUcmFuc2dlbmRlciwKICAgICAgZmFUcmFuc2dlbmRlckFsdCwKICAgICAgZmFTdGFySGFsZjogZmFTdGFySGFsZjIsCiAgICAgIGZhUGhvdG9GaWxtLAogICAgICBmYVBob3RvVmlkZW8sCiAgICAgIGZhUHVtcE1lZGljYWwsCiAgICAgIGZhRmlyZSwKICAgICAgZmFNYWduaWZ5aW5nR2xhc3NQbHVzLAogICAgICBmYVNlYXJjaFBsdXMsCiAgICAgIGZhRmxhc2ssCiAgICAgIGZhQWxpZ25SaWdodCwKICAgICAgZmFDYWJsZUNhciwKICAgICAgZmFUcmFtLAogICAgICBmYUtpdE1lZGljYWwsCiAgICAgIGZhRmlyc3RBaWQsCiAgICAgIGZhR3JpcExpbmVzLAogICAgICBmYUJ1cmdlciwKICAgICAgZmFIYW1idXJnZXIsCiAgICAgIGZhU25vd21hbiwKICAgICAgZmFIb3RlbCwKICAgICAgZmFQcmludCwKICAgICAgZmFWb2xsZXliYWxsLAogICAgICBmYVZvbGxleWJhbGxCYWxsLAogICAgICBmYVRyYWZmaWNMaWdodCwKICAgICAgZmFQbGFuZUNpcmNsZUNoZWNrLAogICAgICBmYVVzZXJzLAogICAgICBmYUNlcnRpZmljYXRlLAogICAgICBmYUFsYXJtQ2xvY2s6IGZhQWxhcm1DbG9jazIsCiAgICAgIGZhSGVsaWNvcHRlclN5bWJvbCwKICAgICAgZmFIb3VzZUNoaW1uZXlDcmFjaywKICAgICAgZmFIb3VzZURhbWFnZSwKICAgICAgZmFQZXJzb25NaWxpdGFyeVBvaW50aW5nLAogICAgICBmYURhdGFiYXNlLAogICAgICBmYU5ld3NwYXBlcjogZmFOZXdzcGFwZXIyLAogICAgICBmYUNsb3VkUmFpbiwKICAgICAgZmFNYXhpbWl6ZSwKICAgICAgZmFFeHBhbmRBcnJvd3NBbHQsCiAgICAgIGZhTG9jYXRpb25BcnJvdywKICAgICAgZmFDaXR5LAogICAgICBmYVhSYXksCiAgICAgIGZhVW1icmVsbGFCZWFjaCwKICAgICAgZmFBcnJvd1JpZ2h0VG9CcmFja2V0LAogICAgICBmYVNpZ25JbiwKICAgICAgZmFIZWFkc2V0LAogICAgICBmYVNwbG90Y2gsCiAgICAgIGZhVXBMb25nLAogICAgICBmYUxvbmdBcnJvd0FsdFVwLAogICAgICBmYUhleGFnb25Ob2RlcywKICAgICAgZmFIb3NwaXRhbDogZmFIb3NwaXRhbDIsCiAgICAgIGZhSG9zcGl0YWxBbHQ6IGZhSG9zcGl0YWxBbHQyLAogICAgICBmYUhvc3BpdGFsV2lkZTogZmFIb3NwaXRhbFdpZGUyLAogICAgICBmYVBlcnNvbkhhcmFzc2luZywKICAgICAgZmFNb25leUJpbGxUcmVuZFVwLAogICAgICBmYVBlblJ1bGVyLAogICAgICBmYVBlbmNpbFJ1bGVyLAogICAgICBmYVJlcGVhdCwKICAgICAgZmFCb25lLAogICAgICBmYUZpcmVGbGFtZUN1cnZlZCwKICAgICAgZmFGaXJlQWx0LAogICAgICBmYUJ1c1NpbXBsZSwKICAgICAgZmFCdXNBbHQsCiAgICAgIGZhVmVudXNNYXJzLAogICAgICBmYUJsZW5kZXIsCiAgICAgIGZhVSwKICAgICAgZmFTaGFyZSwKICAgICAgZmFNYWlsRm9yd2FyZCwKICAgICAgZmFQaG9uZUZsaXAsCiAgICAgIGZhUGhvbmVBbHQsCiAgICAgIGZhVG9pbGV0UG9ydGFibGUsCiAgICAgIGZhUGVyc29uUHJlZ25hbnQsCiAgICAgIGZhTGVzc1RoYW4sCiAgICAgIGZhU3VwZXJzY3JpcHQsCiAgICAgIGZhQ2lyY2xlU3RvcDogZmFDaXJjbGVTdG9wMiwKICAgICAgZmFTdG9wQ2lyY2xlOiBmYVN0b3BDaXJjbGUyLAogICAgICBmYUFycm93c1VwRG93biwKICAgICAgZmFBcnJvd3NWLAogICAgICBmYVBvb1N0b3JtLAogICAgICBmYVBvb0JvbHQsCiAgICAgIGZhVmlkZW9TbGFzaCwKICAgICAgZmFTcXVhcmVYbWFyaywKICAgICAgZmFUaW1lc1NxdWFyZSwKICAgICAgZmFYbWFya1NxdWFyZSwKICAgICAgZmFIYW5kSG9sZGluZ0Ryb3BsZXQsCiAgICAgIGZhSGFuZEhvbGRpbmdXYXRlciwKICAgICAgZmFXb25TaWduLAogICAgICBmYUtydywKICAgICAgZmFXb24sCiAgICAgIGZhT2JqZWN0VW5ncm91cDogZmFPYmplY3RVbmdyb3VwMiwKICAgICAgZmFDb21tZW50OiBmYUNvbW1lbnQyLAogICAgICBmYUhpbGxBdmFsYW5jaGUsCiAgICAgIGZhQXJyb3dzVG9FeWUsCiAgICAgIGZhU25vd3Bsb3csCiAgICAgIGZhQ2hhcnRHYW50dCwKICAgICAgZmFWaWRlbywKICAgICAgZmFWaWRlb0NhbWVyYSwKICAgICAgZmFDaGVzc1Bhd246IGZhQ2hlc3NQYXduMiwKICAgICAgZmFTeW5hZ29ndWUsCiAgICAgIGZhQnVpbGRpbmdDaXJjbGVDaGVjaywKICAgICAgZmFDYWxlbmRhclBsdXM6IGZhQ2FsZW5kYXJQbHVzMiwKICAgICAgZmFXaGVlbGNoYWlyTW92ZSwKICAgICAgZmFXaGVlbGNoYWlyQWx0LAogICAgICBmYVVzZXJTaGllbGQsCiAgICAgIGZhQm9sZCwKICAgICAgZmFIZWFydFB1bHNlLAogICAgICBmYUhlYXJ0YmVhdCwKICAgICAgZmFTcXVhcmVSb290VmFyaWFibGUsCiAgICAgIGZhU3F1YXJlUm9vdEFsdCwKICAgICAgZmFIYW5kc0J1YmJsZXMsCiAgICAgIGZhSGFuZHNXYXNoLAogICAgICBmYU1hcmtlciwKICAgICAgZmFDbGlwYm9hcmQ6IGZhQ2xpcGJvYXJkMiwKICAgICAgZmFQbGFjZU9mV29yc2hpcCwKICAgICAgZmFDYW5uYWJpcywKICAgICAgZmFQZW9wbGVSb29mLAogICAgICBmYURpc2Vhc2UsCiAgICAgIGZhQm9va0JpYmxlLAogICAgICBmYUJpYmxlLAogICAgICBmYUNoZXNzQm9hcmQsCiAgICAgIGZhTWFycywKICAgICAgZmFMYXB0b3AsCiAgICAgIGZhVXNlclhtYXJrLAogICAgICBmYVVzZXJUaW1lcywKICAgICAgZmFGbGFnVXNhLAogICAgICBmYUhhbmRNaWRkbGVGaW5nZXIsCiAgICAgIGZhTW9ydGFyUGVzdGxlLAogICAgICBmYUhlYWRTaWRlQ291Z2gsCiAgICAgIGZhUGxhbmVMb2NrLAogICAgICBmYUJhdHRlcnlUaHJlZVF1YXJ0ZXJzLAogICAgICBmYUJhdHRlcnk0LAogICAgICBmYUZyYW5jU2lnbiwKICAgICAgZmFGaWx0ZXJDaXJjbGVEb2xsYXIsCiAgICAgIGZhRnVubmVsRG9sbGFyLAogICAgICBmYUNoZWVzZSwKICAgICAgZmFDaXJjbGVILAogICAgICBmYUhvc3BpdGFsU3ltYm9sLAogICAgICBmYVNjaG9vbCwKICAgICAgZmFEaWNlRml2ZSwKICAgICAgZmFUb3JuYWRvLAogICAgICBmYUpldEZpZ2h0ZXIsCiAgICAgIGZhRmlnaHRlckpldCwKICAgICAgZmFUaHVtYnNEb3duOiBmYVRodW1ic0Rvd24yLAogICAgICBmYUJyb29tLAogICAgICBmYUZpbGVJbXBvcnQsCiAgICAgIGZhQXJyb3dSaWdodFRvRmlsZSwKICAgICAgZmFVdGVuc2lscywKICAgICAgZmFDdXRsZXJ5LAogICAgICBmYUlkQmFkZ2U6IGZhSWRCYWRnZTIsCiAgICAgIGZhU3BpZGVyLAogICAgICBmYU1vYmlsZVJldHJvLAogICAgICBmYVNpZ25zUG9zdCwKICAgICAgZmFNYXBTaWducywKICAgICAgZmFHcm91cEFycm93c1JvdGF0ZSwKICAgICAgZmFBcnJvd3NTcGxpdFVwQW5kTGVmdCwKICAgICAgZmFGaWxsRHJpcCwKICAgICAgZmFTaGllbGRIZWFydCwKICAgICAgZmFQZXJzb25Ta2lpbmdOb3JkaWMsCiAgICAgIGZhU2tpaW5nTm9yZGljLAogICAgICBmYVNxdWFyZUNoZWNrOiBmYVNxdWFyZUNoZWNrMiwKICAgICAgZmFDaGVja1NxdWFyZTogZmFDaGVja1NxdWFyZTIsCiAgICAgIGZhQmF0aCwKICAgICAgZmFCYXRodHViLAogICAgICBmYUNoZXNzQmlzaG9wOiBmYUNoZXNzQmlzaG9wMiwKICAgICAgZmFQcmVzY3JpcHRpb25Cb3R0bGVNZWRpY2FsLAogICAgICBmYVByZXNjcmlwdGlvbkJvdHRsZUFsdCwKICAgICAgZmFEcmF3UG9seWdvbiwKICAgICAgZmFWZWN0b3JQb2x5Z29uLAogICAgICBmYUlDdXJzb3IsCiAgICAgIGZhSGVhcnRDaXJjbGVQbHVzLAogICAgICBmYVNoaWVsZERvZywKICAgICAgZmFHcmVhdGVyVGhhbkVxdWFsLAogICAgICBmYUVudmVsb3BlT3BlbjogZmFFbnZlbG9wZU9wZW4yLAogICAgICBmYU1vdW5kLAogICAgICBmYVZvaWNlbWFpbCwKICAgICAgZmFWZXN0LAogICAgICBmYUF1ZGlvRGVzY3JpcHRpb24sCiAgICAgIGZhVywKICAgICAgZmFFeWVEcm9wcGVyLAogICAgICBmYUV5ZURyb3BwZXJFbXB0eSwKICAgICAgZmFFeWVkcm9wcGVyLAogICAgICBmYUNpcmNsZVhtYXJrOiBmYUNpcmNsZVhtYXJrMiwKICAgICAgZmFUaW1lc0NpcmNsZTogZmFUaW1lc0NpcmNsZTIsCiAgICAgIGZhWG1hcmtDaXJjbGU6IGZhWG1hcmtDaXJjbGUyLAogICAgICBmYVRyYWlsZXIsCiAgICAgIGZhVHVya2lzaExpcmFTaWduLAogICAgICBmYVRyeSwKICAgICAgZmFUdXJraXNoTGlyYSwKICAgICAgZmFWb2xjYW5vLAogICAgICBmYVdhbmRTcGFya2xlcywKICAgICAgZmFNaWNyb3Bob25lLAogICAgICBmYUNyb3duLAogICAgICBmYVRlbnRBcnJvd1R1cm5MZWZ0LAogICAgICBmYVRydWNrRmFzdCwKICAgICAgZmFTaGlwcGluZ0Zhc3QsCiAgICAgIGZhVXNlclBlbiwKICAgICAgZmFVc2VyRWRpdCwKICAgICAgZmFVc2VyQ2xvY2ssCiAgICAgIGZhU2hvd2VyLAogICAgICBmYVNxdWFyZUNhcmV0VXA6IGZhU3F1YXJlQ2FyZXRVcDIsCiAgICAgIGZhQ2FyZXRTcXVhcmVVcDogZmFDYXJldFNxdWFyZVVwMiwKICAgICAgZmFNYXBMb2NhdGlvbiwKICAgICAgZmFNYXBNYXJrZWQsCiAgICAgIGZhUGVuRmFuY3ksCiAgICAgIGZhRXVyb1NpZ24sCiAgICAgIGZhRXVyLAogICAgICBmYUV1cm8sCiAgICAgIGZhSG91c2VDaXJjbGVYbWFyaywKICAgICAgZmFMaXJhU2lnbiwKICAgICAgZmFZZW5TaWduLAogICAgICBmYUNueSwKICAgICAgZmFKcHksCiAgICAgIGZhUm1iLAogICAgICBmYVllbiwKICAgICAgZmFCb3hPcGVuLAogICAgICBmYVRydWNrRmllbGQsCiAgICAgIGZhTG9jYXRpb25QaW5Mb2NrLAogICAgICBmYVBlcnNvblByYXlpbmcsCiAgICAgIGZhUHJheSwKICAgICAgZmFDbGlwYm9hcmRMaXN0LAogICAgICBmYVNhY2tEb2xsYXIsCiAgICAgIGZhTW91bnRhaW5TdW4sCiAgICAgIGZhQXJyb3dVcFdpZGVTaG9ydCwKICAgICAgZmFTb3J0QW1vdW50VXAsCiAgICAgIGZhVXNlcnNMaW5lLAogICAgICBmYVN0YXJPZkRhdmlkLAogICAgICBmYU5vdGVzTWVkaWNhbCwKICAgICAgZmFBdXN0cmFsU2lnbiwKICAgICAgZmFDbGlwYm9hcmRVc2VyLAogICAgICBmYUZpbGVJbWFnZTogZmFGaWxlSW1hZ2UyLAogICAgICBmYVNxdWFyZUNhcmV0UmlnaHQ6IGZhU3F1YXJlQ2FyZXRSaWdodDIsCiAgICAgIGZhQ2FyZXRTcXVhcmVSaWdodDogZmFDYXJldFNxdWFyZVJpZ2h0MiwKICAgICAgZmFWaWFsLAogICAgICBmYUhlbGljb3B0ZXIsCiAgICAgIGZhTWl0dGVuLAogICAgICBmYUdhc1B1bXAsCiAgICAgIGZhRW52ZWxvcGVDaXJjbGVDaGVjaywKICAgICAgZmFQZXJzb25Ta2F0aW5nLAogICAgICBmYVNrYXRpbmcsCiAgICAgIGZhU3VuOiBmYVN1bjIsCiAgICAgIGZhQmFzZWJhbGwsCiAgICAgIGZhQmFzZWJhbGxCYWxsLAogICAgICBmYUltYWdlOiBmYUltYWdlMiwKICAgICAgZmFOb3RkZWYsCiAgICAgIGZhQmFza2V0YmFsbCwKICAgICAgZmFCYXNrZXRiYWxsQmFsbCwKICAgICAgZmFQZW5jaWwsCiAgICAgIGZhUGVuY2lsQWx0LAogICAgICBmYVBlcnNvbldhbGtpbmdBcnJvd0xvb3BMZWZ0LAogICAgICBmYURpY2VTaXgsCiAgICAgIGZhQW5nbGVzRG93biwKICAgICAgZmFBbmdsZURvdWJsZURvd24sCiAgICAgIGZhU3lyaW5nZSwKICAgICAgZmFXaGVhdEF3biwKICAgICAgZmFXaGVhdEFsdCwKICAgICAgZmFQbGFuZVVwLAogICAgICBmYUFsaWduQ2VudGVyLAogICAgICBmYUhvY2tleVB1Y2ssCiAgICAgIGZhQ2lyY2xlQXJyb3dMZWZ0LAogICAgICBmYUFycm93Q2lyY2xlTGVmdCwKICAgICAgZmFQbHVnQ2lyY2xlQm9sdCwKICAgICAgZmFSZXN0cm9vbSwKICAgICAgZmFBbmNob3JMb2NrLAogICAgICBmYVRpbWVsaW5lLAogICAgICBmYUxpZ2h0YnVsYjogZmFMaWdodGJ1bGIyLAogICAgICBmYUNpcmNsZUFycm93UmlnaHQsCiAgICAgIGZhQXJyb3dDaXJjbGVSaWdodCwKICAgICAgZmFNYXJzQW5kVmVudXMsCiAgICAgIGZhTmV0d29ya1dpcmVkLAogICAgICBmYUJ1aWxkaW5nU2hpZWxkLAogICAgICBmYUNvZGUsCiAgICAgIGZhRmVhdGhlclBvaW50ZWQsCiAgICAgIGZhRmVhdGhlckFsdCwKICAgICAgZmFGaWxlQ2lyY2xlUXVlc3Rpb24sCiAgICAgIGZhU2lnbmF0dXJlLAogICAgICBmYUVhcnRoQW1lcmljYXMsCiAgICAgIGZhRWFydGgsCiAgICAgIGZhRWFydGhBbWVyaWNhLAogICAgICBmYUdsb2JlQW1lcmljYXMsCiAgICAgIGZhQ2Fycm90LAogICAgICBmYVRlbXBlcmF0dXJlRnVsbCwKICAgICAgZmFUZW1wZXJhdHVyZTQsCiAgICAgIGZhVGhlcm1vbWV0ZXI0LAogICAgICBmYVRoZXJtb21ldGVyRnVsbCwKICAgICAgZmFUYWJsZUNlbGxzUm93TG9jaywKICAgICAgZmFCb2x0TGlnaHRuaW5nLAogICAgICBmYUNsb3VkU2hvd2Vyc1dhdGVyLAogICAgICBmYUFycm93VXBMb25nLAogICAgICBmYUxvbmdBcnJvd1VwLAogICAgICBmYUFkZHJlc3NDYXJkOiBmYUFkZHJlc3NDYXJkMiwKICAgICAgZmFDb250YWN0Q2FyZDogZmFDb250YWN0Q2FyZDIsCiAgICAgIGZhVmNhcmQ6IGZhVmNhcmQyLAogICAgICBmYUFuZ2xlUmlnaHQsCiAgICAgIGZhRmFjZU1laDogZmFGYWNlTWVoMiwKICAgICAgZmFNZWg6IGZhTWVoMiwKICAgICAgZmFBcnJvd1VwRnJvbUdyb3VuZFdhdGVyLAogICAgICBmYU1hcDogZmFNYXAyLAogICAgICBmYVVzZXJQbHVzLAogICAgICBmYVZlbnVzLAogICAgICBmYURpYWdyYW1TdWNjZXNzb3IsCiAgICAgIGZhSGVhZFNpZGVDb3VnaFNsYXNoLAogICAgICBmYURpYWdyYW1Qcm9qZWN0LAogICAgICBmYVByb2plY3REaWFncmFtLAogICAgICBmYVRlcm1pbmFsLAogICAgICBmYUhvdXNlRmlyZSwKICAgICAgZmFNYXNrLAogICAgICBmYUh1cnJpY2FuZSwKICAgICAgZmFFYXJ0aEFmcmljYSwKICAgICAgZmFHbG9iZUFmcmljYSwKICAgICAgZmFUaHVtYnRhY2ssCiAgICAgIGZhVGh1bWJUYWNrLAogICAgICBmYUhhbmRQb2ludERvd246IGZhSGFuZFBvaW50RG93bjIsCiAgICAgIGZhRmFjZU1laEJsYW5rOiBmYUZhY2VNZWhCbGFuazIsCiAgICAgIGZhTWVoQmxhbms6IGZhTWVoQmxhbmsyLAogICAgICBmYVRlbXBlcmF0dXJlRW1wdHksCiAgICAgIGZhVGVtcGVyYXR1cmUwLAogICAgICBmYVRoZXJtb21ldGVyMCwKICAgICAgZmFUaGVybW9tZXRlckVtcHR5LAogICAgICBmYUJvcmRlck5vbmUsCiAgICAgIGZhSGlnaGxpZ2h0ZXIsCiAgICAgIGZhTW9uZXlCaWxsV2F2ZSwKICAgICAgZmFUb2lsZXRQYXBlclNsYXNoLAogICAgICBmYUZpbGVTaGllbGQsCiAgICAgIGZhVGV4dEhlaWdodCwKICAgICAgZmFGYWNlR3JpblRvbmd1ZTogZmFGYWNlR3JpblRvbmd1ZTIsCiAgICAgIGZhR3JpblRvbmd1ZTogZmFHcmluVG9uZ3VlMiwKICAgICAgZmFGaWxlU2lnbmF0dXJlLAogICAgICBmYUJ1aWxkaW5nV2hlYXQsCiAgICAgIGZhUGx1Z0NpcmNsZU1pbnVzLAogICAgICBmYUZ1dGJvbDogZmFGdXRib2wyLAogICAgICBmYUZ1dGJvbEJhbGw6IGZhRnV0Ym9sQmFsbDIsCiAgICAgIGZhU29jY2VyQmFsbDogZmFTb2NjZXJCYWxsMiwKICAgICAgZmFDaXJjbGVQbHVzLAogICAgICBmYVBsdXNDaXJjbGUsCiAgICAgIGZhQnJhemlsaWFuUmVhbFNpZ24sCiAgICAgIGZhU3RhckFuZENyZXNjZW50LAogICAgICBmYUZhY2VTdXJwcmlzZTogZmFGYWNlU3VycHJpc2UyLAogICAgICBmYVN1cnByaXNlOiBmYVN1cnByaXNlMiwKICAgICAgZmFIb3NwaXRhbFVzZXIsCiAgICAgIGZhQXJyb3dEb3duVXBMb2NrLAogICAgICBmYUZvbGRlcjogZmFGb2xkZXIyLAogICAgICBmYUZvbGRlckJsYW5rOiBmYUZvbGRlckJsYW5rMiwKICAgICAgZmFIb2xseUJlcnJ5LAogICAgICBmYVZlbnVzRG91YmxlLAogICAgICBmYUNsaXBib2FyZFF1ZXN0aW9uLAogICAgICBmYUhvdGRvZywKICAgICAgZmFBcnJvd1VwRnJvbUJyYWNrZXQsCiAgICAgIGZhTWljcm9zY29wZSwKICAgICAgZmFDbG91ZDogZmFDbG91ZDIsCiAgICAgIGZhQmFzZWJhbGxCYXRCYWxsLAogICAgICBmYUNhclJlYXIsCiAgICAgIGZhQ2FyQWx0LAogICAgICBmYVRodW1idGFja1NsYXNoLAogICAgICBmYVRodW1iVGFja1NsYXNoLAogICAgICBmYVBsdXNNaW51cywKICAgICAgZmFIb3VzZUNpcmNsZUNoZWNrLAogICAgICBmYUNhbGVuZGFyRGF5LAogICAgICBmYUNpcmNsZTogZmFDaXJjbGUyLAogICAgICBmYU1vYmlsZVZpYnJhdGUsCiAgICAgIGZhRmFjZUdyaW5TcXVpbnQ6IGZhRmFjZUdyaW5TcXVpbnQyLAogICAgICBmYUdyaW5TcXVpbnQ6IGZhR3JpblNxdWludDIsCiAgICAgIGZhVXNlcnNCZXR3ZWVuTGluZXMsCiAgICAgIGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcmssCiAgICAgIGZhVGFibGVMaXN0LAogICAgICBmYVRoTGlzdCwKICAgICAgZmFGbGFza1ZpYWwsCiAgICAgIGZhQ2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhRXhjbGFtYXRpb25DaXJjbGUsCiAgICAgIGZhVGF4aSwKICAgICAgZmFDYWIsCiAgICAgIGZhVGV4dFNsYXNoLAogICAgICBmYVJlbW92ZUZvcm1hdCwKICAgICAgZmFQZW9wbGVQdWxsaW5nLAogICAgICBmYUJhY2t3YXJkLAogICAgICBmYUNhckJ1cnN0LAogICAgICBmYUNhckNyYXNoLAogICAgICBmYUxpbmssCiAgICAgIGZhQ2hhaW4sCiAgICAgIGZhQmFja3dhcmRTdGVwLAogICAgICBmYVN0ZXBCYWNrd2FyZCwKICAgICAgZmFYLAogICAgICBmYUNpcmNsZVVzZXI6IGZhQ2lyY2xlVXNlcjIsCiAgICAgIGZhVXNlckNpcmNsZTogZmFVc2VyQ2lyY2xlMiwKICAgICAgZmFSZWN0YW5nbGVMaXN0OiBmYVJlY3RhbmdsZUxpc3QyLAogICAgICBmYUxpc3RBbHQ6IGZhTGlzdEFsdDIsCiAgICAgIGZhSGFuZDogZmFIYW5kMiwKICAgICAgZmFIYW5kUGFwZXI6IGZhSGFuZFBhcGVyMiwKICAgICAgZmFWYW5TaHV0dGxlLAogICAgICBmYVNodXR0bGVWYW4sCiAgICAgIGZhU3RhaXJzLAogICAgICBmYUhvcnNlSGVhZCwKICAgICAgZmFWYXVsdCwKICAgICAgZmFEcnVtU3RlZWxwYW4sCiAgICAgIGZhVGh1bWJzVXA6IGZhVGh1bWJzVXAyLAogICAgICBmYVN0YW1wLAogICAgICBmYU1lbm9yYWgsCiAgICAgIGZhQ2hpbGRyZW4sCiAgICAgIGZhQ2hhcnRMaW5lLAogICAgICBmYUxpbmVDaGFydCwKICAgICAgZmFTcXVhcmVFbnZlbG9wZSwKICAgICAgZmFFbnZlbG9wZVNxdWFyZSwKICAgICAgZmFCYW5TbW9raW5nLAogICAgICBmYVNtb2tpbmdCYW4sCiAgICAgIGZhVHJ1Y2tGcm9udCwKICAgICAgZmFCdWlsZGluZzogZmFCdWlsZGluZzIsCiAgICAgIGZhQnVsbHNleWUsCiAgICAgIGZhQXJyb3dMZWZ0TG9uZywKICAgICAgZmFMb25nQXJyb3dMZWZ0LAogICAgICBmYUNoZXNzUm9vazogZmFDaGVzc1Jvb2syLAogICAgICBmYUJsZW5kZXJQaG9uZSwKICAgICAgZmFBcnJvd1R1cm5VcCwKICAgICAgZmFMZXZlbFVwLAogICAgICBmYUJpY3ljbGUsCiAgICAgIGZhQ2lyY2xlQXJyb3dEb3duLAogICAgICBmYUFycm93Q2lyY2xlRG93biwKICAgICAgZmFHZWFyLAogICAgICBmYUNvZywKICAgICAgZmFNYXJzQW5kVmVudXNCdXJzdCwKICAgICAgZmFPdHRlciwKICAgICAgZmFDaXJjbGVDaGV2cm9uTGVmdCwKICAgICAgZmFDaGV2cm9uQ2lyY2xlTGVmdCwKICAgICAgZmFDaXJjbGVRdWVzdGlvbjogZmFDaXJjbGVRdWVzdGlvbjIsCiAgICAgIGZhUXVlc3Rpb25DaXJjbGU6IGZhUXVlc3Rpb25DaXJjbGUyLAogICAgICBmYVdhbGtpZVRhbGtpZSwKICAgICAgZmFVc2VyR3JvdXAsCiAgICAgIGZhVXNlckZyaWVuZHMsCiAgICAgIGZhSG91c2VDaGltbmV5LAogICAgICBmYUhvbWVMZywKICAgICAgZmFSaWdodEZyb21CcmFja2V0LAogICAgICBmYVNpZ25PdXRBbHQsCiAgICAgIGZhRmlsZTogZmFGaWxlMiwKICAgICAgZmFQbGFuZVNsYXNoLAogICAgICBmYUNsb3VkU2hvd2Vyc0hlYXZ5LAogICAgICBmYVBlcnNvbkZhbGxpbmcsCiAgICAgIGZhVHVybkRvd24sCiAgICAgIGZhTGV2ZWxEb3duQWx0LAogICAgICBmYVVwUmlnaHRBbmREb3duTGVmdEZyb21DZW50ZXIsCiAgICAgIGZhRXhwYW5kQWx0LAogICAgICBmYVVzZXJUYWcsCiAgICAgIGZhSGFuZFNwYXJrbGVzLAogICAgICBmYUFycm93c1RvRG90LAogICAgICBmYUZhY2VTYWRDcnk6IGZhRmFjZVNhZENyeTIsCiAgICAgIGZhU2FkQ3J5OiBmYVNhZENyeTIsCiAgICAgIGZhRG9uZ1NpZ24sCiAgICAgIGZhUGVvcGxlTGluZSwKICAgICAgZmFTcXVhcmVSc3MsCiAgICAgIGZhUnNzU3F1YXJlLAogICAgICBmYUNhbGVuZGFyTWludXM6IGZhQ2FsZW5kYXJNaW51czIsCiAgICAgIGZhQ2hhcnREaWFncmFtLAogICAgICBmYUZhY2VUaXJlZDogZmFGYWNlVGlyZWQyLAogICAgICBmYVRpcmVkOiBmYVRpcmVkMiwKICAgICAgZmFIYW5kUG9pbnRSaWdodDogZmFIYW5kUG9pbnRSaWdodDIsCiAgICAgIGZhQXJyb3dVcCwKICAgICAgZmFDdWJlc1N0YWNrZWQsCiAgICAgIGZhQ2hpbGRDb21iYXRhbnQsCiAgICAgIGZhQ2hpbGRSaWZsZSwKICAgICAgZmFWZXN0UGF0Y2hlcywKICAgICAgZmFNYXJ0aW5pR2xhc3NFbXB0eSwKICAgICAgZmFHbGFzc01hcnRpbmksCiAgICAgIGZhTWFnbmV0LAogICAgICBmYVJvYWRCYXJyaWVyLAogICAgICBmYUNvbXBhc3NEcmFmdGluZywKICAgICAgZmFEcmFmdGluZ0NvbXBhc3MsCiAgICAgIGZhU3F1YXJlUGVyc29uQ29uZmluZWQsCiAgICAgIGZhUGxhdGVXaGVhdCwKICAgICAgZmFTaWduSGFuZ2luZywKICAgICAgZmFTaWduLAogICAgICBmYUNhckJhdHRlcnksCiAgICAgIGZhQmF0dGVyeUNhciwKICAgICAgZmFTaGlydCwKICAgICAgZmFUU2hpcnQsCiAgICAgIGZhVHNoaXJ0LAogICAgICBmYVBhcmFncmFwaCwKICAgICAgZmFFbnZlbG9wZXNCdWxrLAogICAgICBmYU1haWxCdWxrLAogICAgICBmYUd1aXRhciwKICAgICAgZmFTdWl0Y2FzZSwKICAgICAgZmFDaXJjbGVVcDogZmFDaXJjbGVVcDIsCiAgICAgIGZhQXJyb3dBbHRDaXJjbGVVcDogZmFBcnJvd0FsdENpcmNsZVVwMiwKICAgICAgZmFGLAogICAgICBmYVhtYXJrc0xpbmVzLAogICAgICBmYUVhcnRoT2NlYW5pYSwKICAgICAgZmFHbG9iZU9jZWFuaWEsCiAgICAgIGZhQ29tbWVudFNsYXNoLAogICAgICBmYVBsYXksCiAgICAgIGZhVmlhbENpcmNsZUNoZWNrLAogICAgICBmYUJyaWRnZUNpcmNsZUNoZWNrLAogICAgICBmYUNlZGlTaWduLAogICAgICBmYVB1enpsZVBpZWNlLAogICAgICBmYUhlbG1ldFVuLAogICAgICBmYUdsYXNzV2F0ZXIsCiAgICAgIGZhSGVhcnRDaXJjbGVCb2x0LAogICAgICBmYVB1bXBTb2FwLAogICAgICBmYUhhbmRTY2lzc29yczogZmFIYW5kU2Npc3NvcnMyLAogICAgICBmYURvbGx5LAogICAgICBmYURvbGx5Qm94LAogICAgICBmYVBhcGVyY2xpcCwKICAgICAgZmFEZW1vY3JhdCwKICAgICAgZmFTcXVhcmVBcnJvd1VwUmlnaHQsCiAgICAgIGZhRXh0ZXJuYWxMaW5rU3F1YXJlLAogICAgICBmYUZlcnJ5LAogICAgICBmYU1vc3F1aXRvLAogICAgICBmYUJ1aWxkaW5nQ2lyY2xlQXJyb3dSaWdodCwKICAgICAgZmFMZWZ0UmlnaHQsCiAgICAgIGZhQXJyb3dzQWx0SCwKICAgICAgZmFWaXJ1cywKICAgICAgZmFHZW06IGZhR2VtMiwKICAgICAgZmFUb2lsZXQsCiAgICAgIGZhU2luZ2xlUXVvdGVMZWZ0LAogICAgICBmYU1vbmV5QmlsbHMsCiAgICAgIGZhVGFibGV0QnV0dG9uLAogICAgICBmYVJlY3RhbmdsZVhtYXJrOiBmYVJlY3RhbmdsZVhtYXJrMiwKICAgICAgZmFSZWN0YW5nbGVUaW1lczogZmFSZWN0YW5nbGVUaW1lczIsCiAgICAgIGZhVGltZXNSZWN0YW5nbGU6IGZhVGltZXNSZWN0YW5nbGUyLAogICAgICBmYVdpbmRvd0Nsb3NlOiBmYVdpbmRvd0Nsb3NlMiwKICAgICAgZmFXcmVuY2gsCiAgICAgIGZhVHJhc2hDYW46IGZhVHJhc2hDYW4yLAogICAgICBmYVRyYXNoQWx0OiBmYVRyYXNoQWx0MiwKICAgICAgZmFUYWJsZUNlbGxzLAogICAgICBmYVRoLAogICAgICBmYVJpYmJvbiwKICAgICAgZmFMYW5kbWFya0ZsYWcsCiAgICAgIGZhVXBEb3duTGVmdFJpZ2h0LAogICAgICBmYUFycm93c0FsdCwKICAgICAgZmFDYXJTaWRlLAogICAgICBmYVRyYXNoQXJyb3dVcCwKICAgICAgZmFUcmFzaFJlc3RvcmUsCiAgICAgIGZhTGlmZVJpbmc6IGZhTGlmZVJpbmcyLAogICAgICBmYUNvcHlyaWdodDogZmFDb3B5cmlnaHQyLAogICAgICBmYUZpbGVQcmVzY3JpcHRpb24sCiAgICAgIGZhRXJhc2VyLAogICAgICBmYUhvdXJnbGFzc1N0YXJ0LAogICAgICBmYUhvdXJnbGFzczEsCiAgICAgIGZhQ2lyY2xlTGVmdDogZmFDaXJjbGVMZWZ0MiwKICAgICAgZmFBcnJvd0FsdENpcmNsZUxlZnQ6IGZhQXJyb3dBbHRDaXJjbGVMZWZ0MiwKICAgICAgZmFDcnV6ZWlyb1NpZ24sCiAgICAgIGZhU21va2luZywKICAgICAgZmFTcXVhcmVQb2xsVmVydGljYWwsCiAgICAgIGZhUG9sbCwKICAgICAgZmFQZXJzb25DaXJjbGVNaW51cywKICAgICAgZmFCaW9oYXphcmQsCiAgICAgIGZhQmVsbENvbmNpZXJnZSwKICAgICAgZmFDb25jaWVyZ2VCZWxsLAogICAgICBmYVJ1bGVySG9yaXpvbnRhbCwKICAgICAgZmFIb3JzZSwKICAgICAgZmFDYWxlbmRhcjogZmFDYWxlbmRhcjIsCiAgICAgIGZhSGFuZHNIb2xkaW5nQ2hpbGQsCiAgICAgIGZhSXRhbGljLAogICAgICBmYUtoYW5kYSwKICAgICAgZmFGYWNlRnJvd25PcGVuOiBmYUZhY2VGcm93bk9wZW4yLAogICAgICBmYUZyb3duT3BlbjogZmFGcm93bk9wZW4yLAogICAgICBmYUNoZWNrLAogICAgICBmYUZpbmdlcnByaW50LAogICAgICBmYUNoYXJnaW5nU3RhdGlvbiwKICAgICAgZmFVc2VyTG9jaywKICAgICAgZmFNb2JpbGVTY3JlZW5CdXR0b24sCiAgICAgIGZhTW9iaWxlQWx0LAogICAgICBmYUFuY2hvckNpcmNsZUNoZWNrLAogICAgICBmYVBlcnNvbldhbGtpbmdXaXRoQ2FuZSwKICAgICAgZmFCbGluZCwKICAgICAgZmFGaWxlV2F2ZWZvcm0sCiAgICAgIGZhRmlsZU1lZGljYWxBbHQsCiAgICAgIGZhSG91c2VDcmFjaywKICAgICAgZmFIYXRXaXphcmQsCiAgICAgIGZhVXNlckRvY3RvciwKICAgICAgZmFVc2VyTWQsCiAgICAgIGZhQ2hhcnRCYXI6IGZhQ2hhcnRCYXIyLAogICAgICBmYUJhckNoYXJ0OiBmYUJhckNoYXJ0MiwKICAgICAgZmFTcHJheUNhblNwYXJrbGVzLAogICAgICBmYUFpckZyZXNoZW5lciwKICAgICAgZmFCYWh0U2lnbiwKICAgICAgZmFUZW1wZXJhdHVyZUFycm93VXAsCiAgICAgIGZhVGVtcGVyYXR1cmVVcCwKICAgICAgZmFXZWJBd2Vzb21lOiBmYVdlYkF3ZXNvbWUyLAogICAgICBmYU5vbkJpbmFyeSwKICAgICAgZmFOLAogICAgICBmYUFycm93c1VwRG93bkxlZnRSaWdodCwKICAgICAgZmFBcnJvd3MsCiAgICAgIGZhSG91c2U6IGZhSG91c2UyLAogICAgICBmYUhvbWU6IGZhSG9tZTIsCiAgICAgIGZhSG9tZUFsdDogZmFIb21lQWx0MiwKICAgICAgZmFIb21lTGdBbHQ6IGZhSG9tZUxnQWx0MiwKICAgICAgZmFTcGlubmVyLAogICAgICBmYUdhdmVsLAogICAgICBmYUxlZ2FsLAogICAgICBmYVRpY2tldFNpbXBsZSwKICAgICAgZmFUaWNrZXRBbHQsCiAgICAgIGZhRG92ZSwKICAgICAgZmFUYXJwRHJvcGxldCwKICAgICAgZmFUcmVlQ2l0eSwKICAgICAgZmFUdXJuVXAsCiAgICAgIGZhTGV2ZWxVcEFsdCwKICAgICAgZmFUZW1wZXJhdHVyZVF1YXJ0ZXIsCiAgICAgIGZhVGVtcGVyYXR1cmUxLAogICAgICBmYVRoZXJtb21ldGVyMSwKICAgICAgZmFUaGVybW9tZXRlclF1YXJ0ZXIsCiAgICAgIGZhU2xpZGVycywKICAgICAgZmFTbGlkZXJzSCwKICAgICAgZmFNb3NxdWUsCiAgICAgIGZhSCwKICAgICAgZmFJbmZvLAogICAgICBmYVBlcnNvbldhbGtpbmcsCiAgICAgIGZhV2Fsa2luZywKICAgICAgZmFBcnJvd1R1cm5Eb3duLAogICAgICBmYUxldmVsRG93biwKICAgICAgZmFSb2FkLAogICAgICBmYVNwaXJhbCwKICAgICAgZmFGYWNlRnJvd246IGZhRmFjZUZyb3duMiwKICAgICAgZmFGcm93bjogZmFGcm93bjIsCiAgICAgIGZhV2luZUdsYXNzRW1wdHksCiAgICAgIGZhV2luZUdsYXNzQWx0LAogICAgICBmYUNsYXBwZXJib2FyZCwKICAgICAgZmFGb3J3YXJkU3RlcCwKICAgICAgZmFTdGVwRm9yd2FyZCwKICAgICAgZmFTcXVhcmVVcFJpZ2h0LAogICAgICBmYUV4dGVybmFsTGlua1NxdWFyZUFsdCwKICAgICAgZmFCb29rSm91cm5hbFdoaWxscywKICAgICAgZmFKb3VybmFsV2hpbGxzLAogICAgICBmYUNoYW1wYWduZUdsYXNzZXMsCiAgICAgIGZhR2xhc3NDaGVlcnMsCiAgICAgIGZhRHVtcHN0ZXIsCiAgICAgIGZhSGVhcnRDaXJjbGVYbWFyaywKICAgICAgZmFDb21wdXRlciwKICAgICAgZmFXYW5kTWFnaWMsCiAgICAgIGZhTWFnaWMsCiAgICAgIGZhQnJhaW4sCiAgICAgIGZhQnJpZWZjYXNlTWVkaWNhbCwKICAgICAgZmFIb3VzZU1lZGljYWxDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFDb2RlQ29tbWl0LAogICAgICBmYVBlcnNvbkJyZWFzdGZlZWRpbmcsCiAgICAgIGZhUGVyc29uUmF5cywKICAgICAgZmFNYW5hdFNpZ24sCiAgICAgIGZhU29ydCwKICAgICAgZmFVbnNvcnRlZCwKICAgICAgZmFDaXJjbGVSYWRpYXRpb24sCiAgICAgIGZhUmFkaWF0aW9uQWx0LAogICAgICBmYUxhcHRvcENvZGUsCiAgICAgIGZhU2luaywKICAgICAgZmFBcnJvd1VwRnJvbVdhdGVyUHVtcCwKICAgICAgZmFNaWNyb3Bob25lTGluZXNTbGFzaCwKICAgICAgZmFNaWNyb3Bob25lQWx0U2xhc2gsCiAgICAgIGZhU2VydmVyLAogICAgICBmYVVzZXI6IGZhVXNlcjIsCiAgICAgIGZhVXNlckFsdDogZmFVc2VyQWx0MiwKICAgICAgZmFVc2VyTGFyZ2U6IGZhVXNlckxhcmdlMiwKICAgICAgZmFTbm93Zmxha2U6IGZhU25vd2ZsYWtlMiwKICAgICAgZmFTa3VsbENyb3NzYm9uZXMsCiAgICAgIGZhUGVzb1NpZ24sCiAgICAgIGZhV2luZUdsYXNzLAogICAgICBmYVRlbXBlcmF0dXJlSGFsZiwKICAgICAgZmFUZW1wZXJhdHVyZTIsCiAgICAgIGZhVGhlcm1vbWV0ZXIyLAogICAgICBmYVRoZXJtb21ldGVySGFsZiwKICAgICAgZmFUaWNrZXQsCiAgICAgIGZhV2hlYXRBd25DaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFBcnJvd3NUdXJuUmlnaHQsCiAgICAgIGZhQ2FuZHlDYW5lLAogICAgICBmYVdoZWVsY2hhaXIsCiAgICAgIGZhU3BlbGxDaGVjaywKICAgICAgZmFWb2x1bWVPZmYsCiAgICAgIGZhTHVuZ3MsCiAgICAgIGZhQm9va21hcms6IGZhQm9va21hcmsyLAogICAgICBmYUJhcmNvZGUsCiAgICAgIGZhTGlzdE9sLAogICAgICBmYUxpc3QxMiwKICAgICAgZmFMaXN0TnVtZXJpYywKICAgICAgZmFGaWxlQ2lyY2xlWG1hcmssCiAgICAgIGZhQ3ViZSwKICAgICAgZmFUYXBlLAogICAgICBmYUJvbWIsCiAgICAgIGZhU2NhbGVVbmJhbGFuY2VkLAogICAgICBmYUJhbGFuY2VTY2FsZUxlZnQsCiAgICAgIGZhU3F1YXJlQ2FyZXRMZWZ0OiBmYVNxdWFyZUNhcmV0TGVmdDIsCiAgICAgIGZhQ2FyZXRTcXVhcmVMZWZ0OiBmYUNhcmV0U3F1YXJlTGVmdDIsCiAgICAgIGZhUnVsZXIsCiAgICAgIGZhSSwKICAgICAgZmFWb2x1bWVYbWFyaywKICAgICAgZmFWb2x1bWVNdXRlLAogICAgICBmYVZvbHVtZVRpbWVzLAogICAgICBmYUFyY2h3YXksCiAgICAgIGZhUGVyc29uRGlnZ2luZywKICAgICAgZmFEaWdnaW5nLAogICAgICBmYUdhdWdlSGlnaCwKICAgICAgZmFUYWNob21ldGVyQWx0LAogICAgICBmYVRhY2hvbWV0ZXJBbHRGYXN0LAogICAgICBmYUdlbmRlcmxlc3MsCiAgICAgIGZhQ2xvdWRTdW4sCiAgICAgIGZhQXJyb3dSaWdodCwKICAgICAgZmFIYW5kc2hha2U6IGZhSGFuZHNoYWtlMiwKICAgICAgZmFIYW5kc2hha2VBbHQ6IGZhSGFuZHNoYWtlQWx0MiwKICAgICAgZmFIYW5kc2hha2VTaW1wbGU6IGZhSGFuZHNoYWtlU2ltcGxlMiwKICAgICAgZmFQZXJzb25Ta2lpbmcsCiAgICAgIGZhU2tpaW5nLAogICAgICBmYUJyaWRnZVdhdGVyLAogICAgICBmYUJ1aWxkaW5nTmdvLAogICAgICBmYUlnbG9vLAogICAgICBmYUNpcmNsZURvbGxhclRvU2xvdCwKICAgICAgZmFEb25hdGUsCiAgICAgIGZhWSwKICAgICAgZmFGYWNlU21pbGVXaW5rOiBmYUZhY2VTbWlsZVdpbmsyLAogICAgICBmYVNtaWxlV2luazogZmFTbWlsZVdpbmsyLAogICAgICBmYURpY2VGb3VyLAogICAgICBmYUZhY2VHcmluU3F1aW50VGVhcnM6IGZhRmFjZUdyaW5TcXVpbnRUZWFyczIsCiAgICAgIGZhR3JpblNxdWludFRlYXJzOiBmYUdyaW5TcXVpbnRUZWFyczIsCiAgICAgIGZhRmlsZUF1ZGlvOiBmYUZpbGVBdWRpbzIsCiAgICAgIGZhQXJyb3dzRG93blRvTGluZSwKICAgICAgZmFHLAogICAgICBmYVZpaGFyYSwKICAgICAgZmFGbGFnQ2hlY2tlcmVkLAogICAgICBmYUdhdWdlU2ltcGxlLAogICAgICBmYUdhdWdlU2ltcGxlTWVkLAogICAgICBmYVRhY2hvbWV0ZXJBdmVyYWdlLAogICAgICBmYVJpZ2h0TGVmdCwKICAgICAgZmFFeGNoYW5nZUFsdCwKICAgICAgZmFQaWxscywKICAgICAgZmFFeHBsb3Npb24sCiAgICAgIGZhQXJyb3dzRG93blRvUGVvcGxlLAogICAgICBmYVVzZXJzVmlld2ZpbmRlciwKICAgICAgZmFDYXJPbiwKICAgICAgZmFTbGVpZ2gsCiAgICAgIGZhRHVtYmJlbGwsCiAgICAgIGZhQmFieUNhcnJpYWdlLAogICAgICBmYUNhcnJpYWdlQmFieSwKICAgICAgZmFLaXdpQmlyZCwKICAgICAgZmFDYWxlbmRhclhtYXJrOiBmYUNhbGVuZGFyWG1hcmsyLAogICAgICBmYUNhbGVuZGFyVGltZXM6IGZhQ2FsZW5kYXJUaW1lczIsCiAgICAgIGZhQ2lyY2xlRG93bjogZmFDaXJjbGVEb3duMiwKICAgICAgZmFBcnJvd0FsdENpcmNsZURvd246IGZhQXJyb3dBbHRDaXJjbGVEb3duMiwKICAgICAgZmFGaWxlTWVkaWNhbCwKICAgICAgZmFYbWFyaywKICAgICAgZmFDbG9zZSwKICAgICAgZmFNdWx0aXBseSwKICAgICAgZmFSZW1vdmUsCiAgICAgIGZhVGltZXMsCiAgICAgIGZhU2hhcGVzLAogICAgICBmYVRyaWFuZ2xlQ2lyY2xlU3F1YXJlLAogICAgICBmYURpY2VPbmUsCiAgICAgIGZhTG9ja09wZW4sCiAgICAgIGZhUGVwcGVySG90LAogICAgICBmYURyb3BsZXRTbGFzaCwKICAgICAgZmFUaW50U2xhc2gsCiAgICAgIGZhRHJvcGxldCwKICAgICAgZmFUaW50LAogICAgICBmYUZpbGVMaW5lczogZmFGaWxlTGluZXMyLAogICAgICBmYUZpbGVBbHQ6IGZhRmlsZUFsdDIsCiAgICAgIGZhRmlsZVRleHQ6IGZhRmlsZVRleHQyLAogICAgICBmYUNvbW1lbnRzRG9sbGFyLAogICAgICBmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uLAogICAgICBmYVNlYXJjaExvY2F0aW9uLAogICAgICBmYUZpbGVJbnZvaWNlLAogICAgICBmYVBlbnRhZ29uLAogICAgICBmYVJlcHVibGljYW4sCiAgICAgIGZhU2hvcCwKICAgICAgZmFTdG9yZUFsdCwKICAgICAgZmFGaWxtLAogICAgICBmYUZpbG1BbHQsCiAgICAgIGZhRmlsbVNpbXBsZSwKICAgICAgZmFCdWlsZGluZ0NpcmNsZVhtYXJrLAogICAgICBmYUNvbW1lbnRzOiBmYUNvbW1lbnRzMiwKICAgICAgZmFUYWdzLAogICAgICBmYUd1biwKICAgICAgZmFDaXJjbGVDaGVjazogZmFDaXJjbGVDaGVjazIsCiAgICAgIGZhQ2hlY2tDaXJjbGU6IGZhQ2hlY2tDaXJjbGUyLAogICAgICBmYUlkQ2FyZENsaXAsCiAgICAgIGZhSWRDYXJkQWx0LAogICAgICBmYU1vb246IGZhTW9vbjIsCiAgICAgIGZhT2lsV2VsbCwKICAgICAgZmFUYWNob2dyYXBoRGlnaXRhbCwKICAgICAgZmFEaWdpdGFsVGFjaG9ncmFwaCwKICAgICAgZmFUYWJsZXQsCiAgICAgIGZhVGFibGV0QW5kcm9pZCwKICAgICAgZmFSdWJsZVNpZ24sCiAgICAgIGZhUm91YmxlLAogICAgICBmYVJ1YiwKICAgICAgZmFSdWJsZSwKICAgICAgZmFDbG9zZWRDYXB0aW9uaW5nOiBmYUNsb3NlZENhcHRpb25pbmcyLAogICAgICBmYVBlbiwKICAgICAgZmFQbGFuZSwKICAgICAgZmFJbWFnZXM6IGZhSW1hZ2VzMiwKICAgICAgZmFNb2JpbGVTY3JlZW4sCiAgICAgIGZhTW9iaWxlQW5kcm9pZEFsdCwKICAgICAgZmFHdWFyYW5pU2lnbiwKICAgICAgZmFCYWdTaG9wcGluZywKICAgICAgZmFTaG9wcGluZ0JhZywKICAgICAgZmFDaXJjbGVSaWdodDogZmFDaXJjbGVSaWdodDIsCiAgICAgIGZhQXJyb3dBbHRDaXJjbGVSaWdodDogZmFBcnJvd0FsdENpcmNsZVJpZ2h0MiwKICAgICAgZmFQaG9uZVZvbHVtZSwKICAgICAgZmFWb2x1bWVDb250cm9sUGhvbmUsCiAgICAgIGZhQ3ViZXMsCiAgICAgIGZhUGhvbmUsCiAgICAgIGZhVG9yaWlHYXRlLAogICAgICBmYUJhY29uLAogICAgICBmYVBlcnNvbkZhbGxpbmdCdXJzdCwKICAgICAgZmFRdW90ZVJpZ2h0LAogICAgICBmYVF1b3RlUmlnaHRBbHQsCiAgICAgIGZhSG91c2VNZWRpY2FsRmxhZywKICAgICAgZmFQcmVzY3JpcHRpb24sCiAgICAgIGZhRGljZVRocmVlLAogICAgICBmYUJ1aWxkaW5nTG9jaywKICAgICAgZmFJZENhcmQ6IGZhSWRDYXJkMiwKICAgICAgZmFEcml2ZXJzTGljZW5zZTogZmFEcml2ZXJzTGljZW5zZTIsCiAgICAgIGZhQ2lyY2xlUGxheTogZmFDaXJjbGVQbGF5MiwKICAgICAgZmFQbGF5Q2lyY2xlOiBmYVBsYXlDaXJjbGUyLAogICAgICBmYUZhY2VMYXVnaEJlYW06IGZhRmFjZUxhdWdoQmVhbTIsCiAgICAgIGZhTGF1Z2hCZWFtOiBmYUxhdWdoQmVhbTIsCiAgICAgIGZhTGVhZiwKICAgICAgZmFIb3VzZUNoaW1uZXlVc2VyLAogICAgICBmYVJvdGF0ZVJpZ2h0LAogICAgICBmYVJlZG9BbHQsCiAgICAgIGZhUm90YXRlRm9yd2FyZCwKICAgICAgZmFUb290aCwKICAgICAgZmFIb3VzZUNoaW1uZXlXaW5kb3csCiAgICAgIGZhTW90b3JjeWNsZSwKICAgICAgZmFCYWNrd2FyZEZhc3QsCiAgICAgIGZhRmFzdEJhY2t3YXJkLAogICAgICBmYUFkZHJlc3NCb29rOiBmYUFkZHJlc3NCb29rMiwKICAgICAgZmFDb250YWN0Qm9vazogZmFDb250YWN0Qm9vazIsCiAgICAgIGZhU2FpbGJvYXQsCiAgICAgIGZhQm9va0Jvb2ttYXJrLAogICAgICBmYU1hZ25pZnlpbmdHbGFzc0Fycm93UmlnaHQsCiAgICAgIGZhTWljcm9waG9uZUxpbmVzLAogICAgICBmYU1pY3JvcGhvbmVBbHQsCiAgICAgIGZhUmVwbHlBbGwsCiAgICAgIGZhTWFpbFJlcGx5QWxsLAogICAgICBmYVVuaXZlcnNhbEFjY2VzcywKICAgICAgZmFUb2lsZXRQYXBlciwKICAgICAgZmFUb2lsZXRQYXBlckFsdCwKICAgICAgZmFUb2lsZXRQYXBlckJsYW5rLAogICAgICBmYVZyQ2FyZGJvYXJkLAogICAgICBmYVBpenphU2xpY2UsCiAgICAgIGZhU3ByYXlDYW4sCiAgICAgIGZhVm9sdW1lTG93LAogICAgICBmYVZvbHVtZURvd24sCiAgICAgIGZhQ3Jvc3MsCiAgICAgIGZhUGVyc29uLAogICAgICBmYU1hbGUsCiAgICAgIGZhSG91cmdsYXNzOiBmYUhvdXJnbGFzczMsCiAgICAgIGZhSG91cmdsYXNzRW1wdHk6IGZhSG91cmdsYXNzRW1wdHkyLAogICAgICBmYUZpc2gsCiAgICAgIGZhRHJ1bXN0aWNrQml0ZSwKICAgICAgZmFDaGFydFNpbXBsZSwKICAgICAgZmFBdG9tLAogICAgICBmYVAsCiAgICAgIGZhSmV0RmlnaHRlclVwLAogICAgICBmYVBsdWdDaXJjbGVYbWFyaywKICAgICAgZmFTaGVldFBsYXN0aWMsCiAgICAgIGZhViwKICAgICAgZmFMaXN0LAogICAgICBmYUxpc3RTcXVhcmVzLAogICAgICBmYVNvbGFyUGFuZWwsCiAgICAgIGZhTGFuZE1pbmVPbiwKICAgICAgZmFIZWFkcGhvbmVzOiBmYUhlYWRwaG9uZXMyLAogICAgICBmYUhlYWRwaG9uZXNBbHQ6IGZhSGVhZHBob25lc0FsdDIsCiAgICAgIGZhSGVhZHBob25lc1NpbXBsZTogZmFIZWFkcGhvbmVzU2ltcGxlMiwKICAgICAgZmFCdXMsCiAgICAgIGZhRmlsZVBvd2VycG9pbnQ6IGZhRmlsZVBvd2VycG9pbnQyLAogICAgICBmYVF1b3RlTGVmdCwKICAgICAgZmFRdW90ZUxlZnRBbHQsCiAgICAgIGZhQ2hldnJvbkRvd24sCiAgICAgIGZhRWFydGhBc2lhLAogICAgICBmYUdsb2JlQXNpYSwKICAgICAgZmFDZW50U2lnbiwKICAgICAgZmFTaGllbGRDYXQsCiAgICAgIGZhU2Nob29sQ2lyY2xlQ2hlY2ssCiAgICAgIGZhTWFydGluaUdsYXNzLAogICAgICBmYUdsYXNzTWFydGluaUFsdCwKICAgICAgZmFQbHVnLAogICAgICBmYVBhbm9yYW1hLAogICAgICBmYUNsb2NrUm90YXRlTGVmdCwKICAgICAgZmFIaXN0b3J5LAogICAgICBmYUphcldoZWF0LAogICAgICBmYUNsb3VkQXJyb3dEb3duLAogICAgICBmYUNsb3VkRG93bmxvYWQsCiAgICAgIGZhQ2xvdWREb3dubG9hZEFsdCwKICAgICAgZmFUcnVja1JhbXBCb3gsCiAgICAgIGZhVHJ1Y2tMb2FkaW5nLAogICAgICBmYUFuZ2xlRG93biwKICAgICAgZmFQbHVnQ2lyY2xlQ2hlY2ssCiAgICAgIGZhV2luZG93TWF4aW1pemU6IGZhV2luZG93TWF4aW1pemUyLAogICAgICBmYUhhbmRzSG9sZGluZ0NpcmNsZSwKICAgICAgZmFMb2NhdGlvblBpbiwKICAgICAgZmFNYXBNYXJrZXIsCiAgICAgIGZhQm93bGluZ0JhbGwsCiAgICAgIGZhQ2FydEZsYXRiZWQsCiAgICAgIGZhRG9sbHlGbGF0YmVkLAogICAgICBmYUhvdXNlVXNlciwKICAgICAgZmFIb21lVXNlciwKICAgICAgZmFHaG9zdCwKICAgICAgZmFDb21tZW50Tm9kZXMsCiAgICAgIGZhUGVyc29uQXJyb3dEb3duVG9MaW5lLAogICAgICBmYVBsdWdDaXJjbGVQbHVzLAogICAgICBmYVBlcnNvblN3aW1taW5nLAogICAgICBmYVN3aW1tZXIsCiAgICAgIGZhQ29tbWVudERvdHM6IGZhQ29tbWVudERvdHMyLAogICAgICBmYUNvbW1lbnRpbmc6IGZhQ29tbWVudGluZzIsCiAgICAgIGZhQ2hhcnRQaWUsCiAgICAgIGZhUGllQ2hhcnQsCiAgICAgIGZhRnJvZywKICAgICAgZmFXaW5lQm90dGxlLAogICAgICBmYUluYm94LAogICAgICBmYVNxdWFyZUgsCiAgICAgIGZhSFNxdWFyZSwKICAgICAgZmFIb3VzZU1lZGljYWwsCiAgICAgIGZhQ2lyY2xlQ2hldnJvblJpZ2h0LAogICAgICBmYUNoZXZyb25DaXJjbGVSaWdodCwKICAgICAgZmFGaWxlQ3N2LAogICAgICBmYUhhdENvd2JveSwKICAgICAgZmFGYWNlR3JpblRvbmd1ZVdpbms6IGZhRmFjZUdyaW5Ub25ndWVXaW5rMiwKICAgICAgZmFHcmluVG9uZ3VlV2luazogZmFHcmluVG9uZ3VlV2luazIsCiAgICAgIGZhTCwKICAgICAgZmFBcnJvd0Rvd25TaG9ydFdpZGUsCiAgICAgIGZhU29ydEFtb3VudERlc2MsCiAgICAgIGZhU29ydEFtb3VudERvd25BbHQsCiAgICAgIGZhSG91cmdsYXNzSGFsZjogZmFIb3VyZ2xhc3NIYWxmMiwKICAgICAgZmFIb3VyZ2xhc3MyOiBmYUhvdXJnbGFzczIyLAogICAgICBmYVNwb29uLAogICAgICBmYVV0ZW5zaWxTcG9vbiwKICAgICAgZmFDcmVkaXRDYXJkOiBmYUNyZWRpdENhcmQyLAogICAgICBmYUNyZWRpdENhcmRBbHQ6IGZhQ3JlZGl0Q2FyZEFsdDIsCiAgICAgIGZhRmlsZUludm9pY2VEb2xsYXIsCiAgICAgIGZhU3BhZ2hldHRpTW9uc3RlckZseWluZywKICAgICAgZmFQYXN0YWZhcmlhbmlzbSwKICAgICAgZmFNYXJ0aW5pR2xhc3NDaXRydXMsCiAgICAgIGZhQ29ja3RhaWwsCiAgICAgIGZhQnVsbGhvcm4sCiAgICAgIGZhQm94VGlzc3VlLAogICAgICBmYU1hdHRyZXNzUGlsbG93LAogICAgICBmYUNoZXZyb25MZWZ0LAogICAgICBmYUNsb3VkTW9vblJhaW4sCiAgICAgIGZhQXJyb3dEb3duMTksCiAgICAgIGZhU29ydE51bWVyaWNBc2MsCiAgICAgIGZhU29ydE51bWVyaWNEb3duLAogICAgICBmYUhhbmRTcG9jazogZmFIYW5kU3BvY2syLAogICAgICBmYVdhbmRNYWdpY1NwYXJrbGVzLAogICAgICBmYU1hZ2ljV2FuZFNwYXJrbGVzLAogICAgICBmYUNvbW1lbnRNZWRpY2FsLAogICAgICBmYUJlbGxTbGFzaDogZmFCZWxsU2xhc2gyLAogICAgICBmYUhhbmRzaGFrZVNsYXNoLAogICAgICBmYUhhbmRzaGFrZUFsdFNsYXNoLAogICAgICBmYUhhbmRzaGFrZVNpbXBsZVNsYXNoLAogICAgICBmYUJvdHRsZVdhdGVyLAogICAgICBmYURpY2VEMjAsCiAgICAgIGZhQXJyb3dEb3duWkEsCiAgICAgIGZhU29ydEFscGhhRGVzYywKICAgICAgZmFTb3J0QWxwaGFEb3duQWx0LAogICAgICBmYUJydXNoLAogICAgICBmYVBlcnNvbldhbGtpbmdEYXNoZWRMaW5lQXJyb3dSaWdodCwKICAgICAgZmFBcnJvd1VwU2hvcnRXaWRlLAogICAgICBmYVNvcnRBbW91bnRVcEFsdCwKICAgICAgZmFHcmlwVmVydGljYWwsCiAgICAgIGZhR3JpZFZlcnRpY2FsLAogICAgICBmYUNhclR1bm5lbCwKICAgICAgZmFDaGFydENvbHVtbiwKICAgICAgZmFUcnVja0Fycm93UmlnaHQsCiAgICAgIGZhVHYsCiAgICAgIGZhVGVsZXZpc2lvbiwKICAgICAgZmFUdkFsdCwKICAgICAgZmFTZWN0aW9uLAogICAgICBmYVBlYWNlLAogICAgICBmYVN0YXI6IGZhU3RhcjIsCiAgICAgIGZhRmxhZzogZmFGbGFnMiwKICAgICAgZmFUcmlhbmdsZUV4Y2xhbWF0aW9uLAogICAgICBmYUV4Y2xhbWF0aW9uVHJpYW5nbGUsCiAgICAgIGZhV2FybmluZywKICAgICAgZmFTY2hvb2xDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFHcmFkdWF0aW9uQ2FwLAogICAgICBmYU1vcnRhckJvYXJkLAogICAgICBmYVN0b3JlLAogICAgICBmYVVzZXJBc3Ryb25hdXQsCiAgICAgIGZhQnVpbGRpbmdGbGFnLAogICAgICBmYU11Z1NhdWNlciwKICAgICAgZmFDb2ZmZWUsCiAgICAgIGZhTGVtb246IGZhTGVtb24yLAogICAgICBmYUNhcmF2YW4sCiAgICAgIGZhUSwKICAgICAgZmFMb2NrLAogICAgICBmYVBhaW50Um9sbGVyLAogICAgICBmYVZvbHVtZUhpZ2gsCiAgICAgIGZhVm9sdW1lVXAsCiAgICAgIGZhRm9sZGVyUGx1cywKICAgICAgZmFNZXJjdXJ5LAogICAgICBmYUFuY2hvciwKICAgICAgZmFTcXVhcmVQYXJraW5nLAogICAgICBmYVBhcmtpbmcsCiAgICAgIGZhSGFudWtpYWgsCiAgICAgIGZhUm90YXRlTGVmdCwKICAgICAgZmFSb3RhdGVCYWNrLAogICAgICBmYVJvdGF0ZUJhY2t3YXJkLAogICAgICBmYVVuZG9BbHQsCiAgICAgIGZhSGVhZGluZywKICAgICAgZmFIZWFkZXIsCiAgICAgIGZhQ3Jvc3NoYWlycywKICAgICAgZmFDaXJjbGVOb2RlcywKICAgICAgZmFXaW5kb3dSZXN0b3JlOiBmYVdpbmRvd1Jlc3RvcmUyLAogICAgICBmYVIsCiAgICAgIGZhRmlsdGVyQ2lyY2xlWG1hcmssCiAgICAgIGZhR29wdXJhbSwKICAgICAgZmFIZWFydENpcmNsZU1pbnVzLAogICAgICBmYVN0YXJPZkxpZmUsCiAgICAgIGZhQnVzaW5lc3NUaW1lLAogICAgICBmYUJyaWVmY2FzZUNsb2NrLAogICAgICBmYUZpcmVFeHRpbmd1aXNoZXIsCiAgICAgIGZhQXJyb3dEb3duTG9uZywKICAgICAgZmFMb25nQXJyb3dEb3duLAogICAgICBmYVVzZXJNaW51cywKICAgICAgZmFNb25leUNoZWNrLAogICAgICBmYUhvdXNlTGFwdG9wLAogICAgICBmYUxhcHRvcEhvdXNlLAogICAgICBmYURvd25sb2FkLAogICAgICBmYUNvdWNoLAogICAgICBmYVJvYWRMb2NrLAogICAgICBmYVNjaXNzb3JzLAogICAgICBmYUN1dCwKICAgICAgZmFCdWcsCiAgICAgIGZhQXJyb3dSaWdodEZyb21CcmFja2V0LAogICAgICBmYVNpZ25PdXQsCiAgICAgIGZhSGFuZEhvbGRpbmdIYW5kLAogICAgICBmYVN0cm9vcHdhZmVsLAogICAgICBmYUNoaWxkLAogICAgICBmYUljZUNyZWFtLAogICAgICBmYUNvbXB1dGVyTW91c2UsCiAgICAgIGZhTW91c2UsCiAgICAgIGZhRmF1Y2V0LAogICAgICBmYUF3YXJkLAogICAgICBmYVBlcnNvbkRyb3duaW5nLAogICAgICBmYUNhbWVyYVJvdGF0ZSwKICAgICAgZmFGYWNlR3JpbkhlYXJ0czogZmFGYWNlR3JpbkhlYXJ0czIsCiAgICAgIGZhR3JpbkhlYXJ0czogZmFHcmluSGVhcnRzMiwKICAgICAgZmFGaWxlRnJhZ21lbnQsCiAgICAgIGZhUGVyc29uTWlsaXRhcnlSaWZsZSwKICAgICAgZmFUb2dnbGVPbiwKICAgICAgZmFMdW5nc1ZpcnVzLAogICAgICBmYVRhYmxlVGVubmlzUGFkZGxlQmFsbCwKICAgICAgZmFQaW5nUG9uZ1BhZGRsZUJhbGwsCiAgICAgIGZhVGFibGVUZW5uaXMsCiAgICAgIGZhQm94ZXNQYWNraW5nLAogICAgICBmYVBlcnNvbkNoYWxrYm9hcmQsCiAgICAgIGZhRGljZVR3bywKICAgICAgZmFBcnJvd1JpZ2h0QXJyb3dMZWZ0LAogICAgICBmYUV4Y2hhbmdlLAogICAgICBmYUZvb3RiYWxsLAogICAgICBmYUZvb3RiYWxsQmFsbCwKICAgICAgZmFUcnVja01vbnN0ZXIsCiAgICAgIGZhQXN0ZXJpc2ssCiAgICAgIGZhQmF0dGVyeUZ1bGwsCiAgICAgIGZhQmF0dGVyeSwKICAgICAgZmFCYXR0ZXJ5NSwKICAgICAgZmFDaGlsZERyZXNzLAogICAgICBmYUZhY2VLaXNzQmVhbTogZmFGYWNlS2lzc0JlYW0yLAogICAgICBmYUtpc3NCZWFtOiBmYUtpc3NCZWFtMiwKICAgICAgZmFUcmFzaENhbkFycm93VXAsCiAgICAgIGZhVHJhc2hSZXN0b3JlQWx0LAogICAgICBmYUZvbnQsCiAgICAgIGZhQm9yZUhvbGUsCiAgICAgIGZhVmlydXNDb3ZpZCwKICAgICAgZmFGaWxlUGRmOiBmYUZpbGVQZGYyLAogICAgICBmYUxhbmd1YWdlLAogICAgICBmYVNoaWVsZEhhbHZlZCwKICAgICAgZmFTaGllbGRBbHQsCiAgICAgIGZhQ2FyZXRVcCwKICAgICAgZmFGaWxlUGVuLAogICAgICBmYUZpbGVFZGl0LAogICAgICBmYVBlcnNvbkJpa2luZywKICAgICAgZmFCaWtpbmcsCiAgICAgIGZhQm9va09wZW5SZWFkZXIsCiAgICAgIGZhQm9va1JlYWRlciwKICAgICAgZmFHbGFzc1dhdGVyRHJvcGxldCwKICAgICAgZmFUb3dlckJyb2FkY2FzdCwKICAgICAgZmFCcm9hZGNhc3RUb3dlciwKICAgICAgZmFNaW5pbWl6ZSwKICAgICAgZmFDb21wcmVzc0Fycm93c0FsdCwKICAgICAgZmFBcnJvd1JpZ2h0VG9DaXR5LAogICAgICBmYUxhcHRvcE1lZGljYWwsCiAgICAgIGZhQnJlYWRTbGljZSwKICAgICAgZmFHbG9iZSwKICAgICAgZmFGb2xkZXJNaW51cywKICAgICAgZmFNYXNrRmFjZSwKICAgICAgZmFCb25nLAogICAgICBmYVJvYWRCcmlkZ2UsCiAgICAgIGZhQXJyb3dVcDkxLAogICAgICBmYVNvcnROdW1lcmljVXBBbHQsCiAgICAgIGZhTW91bnRhaW5DaXR5LAogICAgICBmYUFycm93RG93bjkxLAogICAgICBmYVNvcnROdW1lcmljRGVzYywKICAgICAgZmFTb3J0TnVtZXJpY0Rvd25BbHQsCiAgICAgIGZhRmFjZUdyaW5XaWRlOiBmYUZhY2VHcmluV2lkZTIsCiAgICAgIGZhR3JpbkFsdDogZmFHcmluQWx0MiwKICAgICAgZmFQb29wLAogICAgICBmYURoYXJtYWNoYWtyYSwKICAgICAgZmFCYXR0ZXJ5UXVhcnRlciwKICAgICAgZmFCYXR0ZXJ5MiwKICAgICAgZmFBbmtoLAogICAgICBmYURpYW1vbmQsCiAgICAgIGZhU3Vic2NyaXB0LAogICAgICBmYVJ1cGVlU2lnbiwKICAgICAgZmFSdXBlZSwKICAgICAgZmFQZXJzb25SaWZsZSwKICAgICAgZmFELAogICAgICBmYVNxdWFyZU5maSwKICAgICAgZmFUZWV0aCwKICAgICAgZmFNYWduaWZ5aW5nR2xhc3NEb2xsYXIsCiAgICAgIGZhU2VhcmNoRG9sbGFyLAogICAgICBmYUR1bXBzdGVyRmlyZSwKICAgICAgZmFVcGxvYWQsCiAgICAgIGZhVXNlclNsYXNoLAogICAgICBmYVVzZXJBbHRTbGFzaCwKICAgICAgZmFVc2VyTGFyZ2VTbGFzaCwKICAgICAgZmFBcnJvd0xlZnQsCiAgICAgIGZhVmlhbFZpcnVzLAogICAgICBmYUNoZWNrRG91YmxlLAogICAgICBmYVBhdywKICAgICAgZmFIZWxtZXRTYWZldHksCiAgICAgIGZhSGFyZEhhdCwKICAgICAgZmFIYXRIYXJkLAogICAgICBmYUUsCiAgICAgIGZhRmFjZUxhdWdoU3F1aW50OiBmYUZhY2VMYXVnaFNxdWludDIsCiAgICAgIGZhTGF1Z2hTcXVpbnQ6IGZhTGF1Z2hTcXVpbnQyLAogICAgICBmYURvd25MZWZ0QW5kVXBSaWdodFRvQ2VudGVyLAogICAgICBmYUNvbXByZXNzQWx0LAogICAgICBmYUdpZnRzLAogICAgICBmYUJlZCwKICAgICAgZmFNb25leUJpbGxUcmFuc2ZlciwKICAgICAgZmFQZXJzb25SdW5uaW5nLAogICAgICBmYVJ1bm5pbmcsCiAgICAgIGZhQ2lyY2xlQ2hldnJvbkRvd24sCiAgICAgIGZhQ2hldnJvbkNpcmNsZURvd24sCiAgICAgIGZhVXNlck51cnNlLAogICAgICBmYUZhY2VLaXNzV2lua0hlYXJ0OiBmYUZhY2VLaXNzV2lua0hlYXJ0MiwKICAgICAgZmFLaXNzV2lua0hlYXJ0OiBmYUtpc3NXaW5rSGVhcnQyLAogICAgICBmYUZpbGwsCiAgICAgIGZhTW9uZXlCaWxsMVdhdmUsCiAgICAgIGZhTW9uZXlCaWxsV2F2ZUFsdCwKICAgICAgZmFMYW5kbWFyaywKICAgICAgZmFNdXNpYywKICAgICAgZmFCb29rTWVkaWNhbCwKICAgICAgZmFTaHVmZmxlLAogICAgICBmYVJhbmRvbSwKICAgICAgZmFVbmRlcmxpbmUsCiAgICAgIGZhQnVpbGRpbmdVc2VyLAogICAgICBmYVJvYm90LAogICAgICBmYVBsdXMsCiAgICAgIGZhQWRkLAogICAgICBmYUNvcHk6IGZhQ29weTIsCiAgICAgIGZhQ2hlc3NLaW5nOiBmYUNoZXNzS2luZzIsCiAgICAgIGZhSG91c2VGbG9vZFdhdGVyLAogICAgICBmYUJpdGNvaW5TaWduLAogICAgICBmYUJveCwKICAgICAgZmFTcXVhcmVQbHVzOiBmYVNxdWFyZVBsdXMyLAogICAgICBmYVBsdXNTcXVhcmU6IGZhUGx1c1NxdWFyZTIsCiAgICAgIGZhQXJyb3dzTGVmdFJpZ2h0LAogICAgICBmYUFycm93c0gsCiAgICAgIGZhRmFuLAogICAgICBmYUNyb3csCiAgICAgIGZhRmlsZUNpcmNsZUNoZWNrLAogICAgICBmYUxpbmtTbGFzaCwKICAgICAgZmFDaGFpbkJyb2tlbiwKICAgICAgZmFDaGFpblNsYXNoLAogICAgICBmYVVubGluaywKICAgICAgZmFBcnJvd1JvdGF0ZVJpZ2h0LAogICAgICBmYUFycm93UmlnaHRSb3RhdGUsCiAgICAgIGZhQXJyb3dSb3RhdGVGb3J3YXJkLAogICAgICBmYVJlZG8sCiAgICAgIGZhUGVuQ2xpcCwKICAgICAgZmFQZW5BbHQsCiAgICAgIGZhRG9vckNsb3NlZCwKICAgICAgZmFBcnJvd0Rvd25XaWRlU2hvcnQsCiAgICAgIGZhU29ydEFtb3VudEFzYywKICAgICAgZmFTb3J0QW1vdW50RG93biwKICAgICAgZmFDYXJldERvd24sCiAgICAgIGZhSywKICAgICAgZmFDaGVja1RvU2xvdCwKICAgICAgZmFWb3RlWWVhLAogICAgICBmYUZpc2hGaW5zLAogICAgICBmYUNvbXByZXNzLAogICAgICBmYUFycm93VXBBWiwKICAgICAgZmFTb3J0QWxwaGFVcCwKICAgICAgZmFVc2VyR3JhZHVhdGUsCiAgICAgIGZhRmlsZUNvZGU6IGZhRmlsZUNvZGUyLAogICAgICBmYVNvYXAsCiAgICAgIGZhUmVjeWNsZSwKICAgICAgZmFGYWNlR3Jpbldpbms6IGZhRmFjZUdyaW5XaW5rMiwKICAgICAgZmFHcmluV2luazogZmFHcmluV2luazIsCiAgICAgIGZhV2F0ZXJMYWRkZXIsCiAgICAgIGZhTGFkZGVyV2F0ZXIsCiAgICAgIGZhU3dpbW1pbmdQb29sLAogICAgICBmYVRvd2VyQ2VsbCwKICAgICAgZmFDb2xvblNpZ24sCiAgICAgIGZhTGFwdG9wRmlsZSwKICAgICAgZmFCYWhhaSwKICAgICAgZmFIYXlrYWwsCiAgICAgIGZhTW9uZXlCaWxsMTogZmFNb25leUJpbGwxMiwKICAgICAgZmFNb25leUJpbGxBbHQ6IGZhTW9uZXlCaWxsQWx0MiwKICAgICAgZmFDbG91ZEJvbHQsCiAgICAgIGZhVGh1bmRlcnN0b3JtLAogICAgICBmYUV0aGVybmV0LAogICAgICBmYUhyeXZuaWFTaWduLAogICAgICBmYUhyeXZuaWEsCiAgICAgIGZhRXllU2xhc2g6IGZhRXllU2xhc2gyLAogICAgICBmYUNhcnRGbGF0YmVkU3VpdGNhc2UsCiAgICAgIGZhTHVnZ2FnZUNhcnQsCiAgICAgIGZhUmFkaWF0aW9uLAogICAgICBmYUZpbGVXb3JkOiBmYUZpbGVXb3JkMiwKICAgICAgZmFCZWRQdWxzZSwKICAgICAgZmFQcm9jZWR1cmVzLAogICAgICBmYVRlbnRzLAogICAgICBmYU11Z0hvdCwKICAgICAgZmFCb2x0LAogICAgICBmYVphcCwKICAgICAgZmFKYXIsCiAgICAgIGZhVHJ1Y2tQbGFuZSwKICAgICAgZmFIYW5kSG9sZGluZ0hlYXJ0LAogICAgICBmYUFycm93Um90YXRlTGVmdCwKICAgICAgZmFBcnJvd0xlZnRSb3RhdGUsCiAgICAgIGZhQXJyb3dSb3RhdGVCYWNrLAogICAgICBmYUFycm93Um90YXRlQmFja3dhcmQsCiAgICAgIGZhVW5kbywKICAgICAgZmFGYWNlQW5ncnk6IGZhRmFjZUFuZ3J5MiwKICAgICAgZmFBbmdyeTogZmFBbmdyeTIsCiAgICAgIGZhQnVyc3QsCiAgICAgIGZhWiwKICAgICAgZmFCYW5kYWdlLAogICAgICBmYUJhbmRBaWQsCiAgICAgIGZhUGxhbmVDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFCdXNTaWRlLAogICAgICBmYUJ1Z3MsCiAgICAgIGZhQmVlck11Z0VtcHR5LAogICAgICBmYUJlZXIsCiAgICAgIGZhUGVyc29uQ2lyY2xlQ2hlY2ssCiAgICAgIGZhU3RhcGxlciwKICAgICAgZmFIb3VzZU1lZGljYWxDaXJjbGVDaGVjaywKICAgICAgZmFOYWlyYVNpZ24sCiAgICAgIGZhV2lmaSwKICAgICAgZmFXaWZpMywKICAgICAgZmFXaWZpU3Ryb25nLAogICAgICBmYU1vbmV5Q2hlY2tEb2xsYXIsCiAgICAgIGZhTW9uZXlDaGVja0FsdCwKICAgICAgZmFFeWVMb3dWaXNpb24sCiAgICAgIGZhTG93VmlzaW9uLAogICAgICBmYUNpcmNsZUFycm93VXAsCiAgICAgIGZhQXJyb3dDaXJjbGVVcCwKICAgICAgZmFDYW1lcmFSZXRybywKICAgICAgZmFDYXBzdWxlcywKICAgICAgZmFQb28sCiAgICAgIGZhRWxldmF0b3IsCiAgICAgIGZhVGFnLAogICAgICBmYUZpbGVDaXJjbGVNaW51cywKICAgICAgZmFEb3duTG9uZywKICAgICAgZmFMb25nQXJyb3dBbHREb3duLAogICAgICBmYUNvbXBhY3REaXNjLAogICAgICBmYVN1aXRjYXNlUm9sbGluZywKICAgICAgZmFCb29rUXVyYW4sCiAgICAgIGZhUXVyYW4sCiAgICAgIGZhUGhvbmVTbGFzaCwKICAgICAgZmFSb2FkQ2lyY2xlQ2hlY2ssCiAgICAgIGZhU2hvcExvY2ssCiAgICAgIGZhSW1hZ2VQb3J0cmFpdCwKICAgICAgZmFQb3J0cmFpdCwKICAgICAgZmFCcmlkZ2VMb2NrLAogICAgICBmYUhhbW1lciwKICAgICAgZmFBcnJvd1VwMTksCiAgICAgIGZhU29ydE51bWVyaWNVcCwKICAgICAgZmFDaGVzc0tuaWdodDogZmFDaGVzc0tuaWdodDIsCiAgICAgIGZhSG91c2VGbG9vZFdhdGVyQ2lyY2xlQXJyb3dSaWdodCwKICAgICAgZmFBcnJvd1VwUmlnaHRGcm9tU3F1YXJlLAogICAgICBmYUV4dGVybmFsTGluaywKICAgICAgZmFBcnJvd0Rvd25VcEFjcm9zc0xpbmUsCiAgICAgIGZhRmFjZUdyaW5CZWFtOiBmYUZhY2VHcmluQmVhbTIsCiAgICAgIGZhR3JpbkJlYW06IGZhR3JpbkJlYW0yLAogICAgICBmYVJlY3RhbmdsZUFkLAogICAgICBmYUFkLAogICAgICBmYUJvb2tUYW5ha2gsCiAgICAgIGZhVGFuYWtoLAogICAgICBmYUhvdFR1YlBlcnNvbiwKICAgICAgZmFIb3RUdWIsCiAgICAgIGZhRmlsZUhhbGZEYXNoZWQsCiAgICAgIGZhT3V0ZGVudCwKICAgICAgZmFEZWRlbnQsCiAgICAgIGZhSGFuZFBlYWNlOiBmYUhhbmRQZWFjZTIsCiAgICAgIGZhSGVhZFNpZGVWaXJ1cywKICAgICAgZmFDb21wYXNzOiBmYUNvbXBhc3MyLAogICAgICBmYVBlbk5pYiwKICAgICAgZmFUZW50QXJyb3dzRG93biwKICAgICAgZmFGb3J3YXJkRmFzdCwKICAgICAgZmFGYXN0Rm9yd2FyZCwKICAgICAgZmFDcm9wLAogICAgICBmYVdoaXNrZXlHbGFzcywKICAgICAgZmFHbGFzc1doaXNrZXksCiAgICAgIGZhU3F1YXJlOiBmYVNxdWFyZTIsCiAgICAgIGZhRmFjZUdyaW46IGZhRmFjZUdyaW4yLAogICAgICBmYUdyaW46IGZhR3JpbjIsCiAgICAgIGZhRmlsZUNvbnRyYWN0LAogICAgICBmYUFuZ2xlVXAsCiAgICAgIGZhRmFjZVNtaWxlOiBmYUZhY2VTbWlsZTIsCiAgICAgIGZhU21pbGU6IGZhU21pbGUyLAogICAgICBmYVBlcnNvbkRyZXNzQnVyc3QsCiAgICAgIGZhRGl2aWRlLAogICAgICBmYUNvZGVGb3JrLAogICAgICBmYUhvdXNlRmxhZywKICAgICAgZmFCdWlsZGluZ0NvbHVtbnMsCiAgICAgIGZhQmFuaywKICAgICAgZmFJbnN0aXR1dGlvbiwKICAgICAgZmFNdXNldW0sCiAgICAgIGZhVW5pdmVyc2l0eSwKICAgICAgZmFSdWcsCiAgICAgIGZhQ29kZU1lcmdlLAogICAgICBmYUhvdXNlVHN1bmFtaSwKICAgICAgZmFNYWduaWZ5aW5nR2xhc3NDaGFydCwKICAgICAgZmFVbWJyZWxsYSwKICAgICAgZmFIaWxsUm9ja3NsaWRlLAogICAgICBmYVVzZXJTZWNyZXQsCiAgICAgIGZhUGFnZXIsCiAgICAgIGZhQnJpZWZjYXNlLAogICAgICBmYVRyb3dlbEJyaWNrcywKICAgICAgZmFTb2NrcywKICAgICAgZmFULAogICAgICBmYU1pY3JvY2hpcCwKICAgICAgZmFUcnVja01lZGljYWwsCiAgICAgIGZhQW1idWxhbmNlLAogICAgICBmYU9tLAogICAgICBmYU1vc3F1aXRvTmV0LAogICAgICBmYVByZXNjcmlwdGlvbkJvdHRsZSwKICAgICAgZmFVc2Vyc0dlYXIsCiAgICAgIGZhVXNlcnNDb2csCiAgICAgIGZhUm9hZENpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYVBhdXNlLAogICAgICBmYVN0YWZmU25ha2UsCiAgICAgIGZhUm9kQXNjbGVwaXVzLAogICAgICBmYVJvZFNuYWtlLAogICAgICBmYVN0YWZmQWVzY3VsYXBpdXMsCiAgICAgIGZhUGlnZ3lCYW5rLAogICAgICBmYU1vbnVtZW50LAogICAgICBmYUFuZ2xlc1JpZ2h0LAogICAgICBmYUFuZ2xlRG91YmxlUmlnaHQsCiAgICAgIGZhRGVza3RvcCwKICAgICAgZmFEZXNrdG9wQWx0LAogICAgICBmYVBsYW5lQ2lyY2xlWG1hcmssCiAgICAgIGZhUmV0d2VldCwKICAgICAgZmFVc2VyR2VhciwKICAgICAgZmFVc2VyQ29nLAogICAgICBmYUJvcmRlckFsbCwKICAgICAgZmFDb2lucywKICAgICAgZmFNYXJzU3Ryb2tlLAogICAgICBmYUhhbmRzaGFrZUFuZ2xlLAogICAgICBmYUhhbmRzSGVscGluZywKICAgICAgZmFBcnJvd0Rvd24sCiAgICAgIGZhTG9jYXRpb25Eb3QsCiAgICAgIGZhTWFwTWFya2VyQWx0LAogICAgICBmYVBsdWdDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFDb29raWVCaXRlLAogICAgICBmYVNjcmV3ZHJpdmVyV3JlbmNoLAogICAgICBmYVRvb2xzLAogICAgICBmYUluZGVudCwKICAgICAgZmFCYXJzLAogICAgICBmYU5hdmljb24sCiAgICAgIGZhSGFuZHNQcmF5aW5nLAogICAgICBmYVByYXlpbmdIYW5kcywKICAgICAgZmFWaXJ1c2VzLAogICAgICBmYVNjaG9vbEZsYWcsCiAgICAgIGZhVHJhZGVtYXJrLAogICAgICBmYUZpcmVCdXJuZXIsCiAgICAgIGZhRmFjZVNtaWxlQmVhbTogZmFGYWNlU21pbGVCZWFtMiwKICAgICAgZmFTbWlsZUJlYW06IGZhU21pbGVCZWFtMiwKICAgICAgZmFUZW50QXJyb3dMZWZ0UmlnaHQsCiAgICAgIGZhUm91dGUsCiAgICAgIGZhQW5nbGVzVXAsCiAgICAgIGZhQW5nbGVEb3VibGVVcCwKICAgICAgZmFCdWNrZXQsCiAgICAgIGZhTGVzc1RoYW5FcXVhbCwKICAgICAgZmFGb2xkZXJDbG9zZWQ6IGZhRm9sZGVyQ2xvc2VkMiwKICAgICAgZmFQZXJzb25UaHJvdWdoV2luZG93LAogICAgICBmYVNjaG9vbExvY2ssCiAgICAgIGZhUGVyc29uQnVyc3QsCiAgICAgIGZhTGVmdExvbmcsCiAgICAgIGZhTG9uZ0Fycm93QWx0TGVmdCwKICAgICAgZmFMb2NhdGlvbkNyb3NzaGFpcnMsCiAgICAgIGZhTG9jYXRpb24sCiAgICAgIGZhUGVyc29uRG90c0Zyb21MaW5lLAogICAgICBmYURpYWdub3NlcywKICAgICAgZmFHYXVnZVNpbXBsZUhpZ2gsCiAgICAgIGZhVGFjaG9tZXRlciwKICAgICAgZmFUYWNob21ldGVyRmFzdCwKICAgICAgZmFBbmdsZXNMZWZ0LAogICAgICBmYUFuZ2xlRG91YmxlTGVmdCwKICAgICAgZmFVcERvd24sCiAgICAgIGZhQXJyb3dzQWx0ViwKICAgICAgZmFCYXR0ZXJ5RW1wdHksCiAgICAgIGZhQmF0dGVyeTAsCiAgICAgIGZhS2V5Ym9hcmQ6IGZhS2V5Ym9hcmQyLAogICAgICBmYUNvb2tpZSwKICAgICAgZmFTdG9wd2F0Y2gsCiAgICAgIGZhRWplY3QsCiAgICAgIGZhU2F0ZWxsaXRlRGlzaCwKICAgICAgZmFGYWNlUm9sbGluZ0V5ZXM6IGZhRmFjZVJvbGxpbmdFeWVzMiwKICAgICAgZmFNZWhSb2xsaW5nRXllczogZmFNZWhSb2xsaW5nRXllczIsCiAgICAgIGZhTGlzdENoZWNrLAogICAgICBmYVRhc2tzLAogICAgICBmYVNhY2tYbWFyaywKICAgICAgZmFIYXNodGFnLAogICAgICBmYVRyYWluLAogICAgICBmYUdhbWVwYWQsCiAgICAgIGZhRmlsZUV4cG9ydCwKICAgICAgZmFBcnJvd1JpZ2h0RnJvbUZpbGUsCiAgICAgIGZhRmFjZUdyaW1hY2U6IGZhRmFjZUdyaW1hY2UyLAogICAgICBmYUdyaW1hY2U6IGZhR3JpbWFjZTIsCiAgICAgIGZhVHJhaW5TdWJ3YXksCiAgICAgIGZhU3Vid2F5LAogICAgICBmYUNpcmNsZURvdDogZmFDaXJjbGVEb3QyLAogICAgICBmYURvdENpcmNsZTogZmFEb3RDaXJjbGUyLAogICAgICBmYU9iamVjdEdyb3VwOiBmYU9iamVjdEdyb3VwMiwKICAgICAgZmFTaGlwLAogICAgICBmYUMsCiAgICAgIGZhU3F1YXJlUGhvbmUsCiAgICAgIGZhUGhvbmVTcXVhcmUsCiAgICAgIGZhUnVsZXJDb21iaW5lZCwKICAgICAgZmFBcnJvd3NSb3RhdGUsCiAgICAgIGZhUmVmcmVzaCwKICAgICAgZmFTeW5jLAogICAgICBmYVBlcnNvbkRyZXNzLAogICAgICBmYUZlbWFsZSwKICAgICAgZmFCb29rT3BlbiwKICAgICAgZmFGb2xkZXJUcmVlLAogICAgICBmYUJveEFyY2hpdmUsCiAgICAgIGZhQXJjaGl2ZSwKICAgICAgZmFUZW50QXJyb3dEb3duVG9MaW5lLAogICAgICBmYVFyY29kZSwKICAgICAgZmFEcmFnb24sCiAgICAgIGZhSG91cmdsYXNzRW5kLAogICAgICBmYUhvdXJnbGFzczM6IGZhSG91cmdsYXNzMzIsCiAgICAgIGZhR3JpcCwKICAgICAgZmFHcmlkSG9yaXpvbnRhbCwKICAgICAgZmFHcmlwSG9yaXpvbnRhbCwKICAgICAgZmFCb3JkZXJUb3BMZWZ0LAogICAgICBmYUJvcmRlclN0eWxlLAogICAgICBmYUxpc3RVbCwKICAgICAgZmFMaXN0RG90cywKICAgICAgZmFQZW9wbGVSb2JiZXJ5LAogICAgICBmYU1vYmlsZUJ1dHRvbiwKICAgICAgZmFBcnJvd0Rvd25BWiwKICAgICAgZmFTb3J0QWxwaGFBc2MsCiAgICAgIGZhU29ydEFscGhhRG93biwKICAgICAgZmFNb25leUJpbGwsCiAgICAgIGZhQ2lyY2xlTWludXMsCiAgICAgIGZhTWludXNDaXJjbGUsCiAgICAgIGZhQXJyb3dQb2ludGVyLAogICAgICBmYU1vdXNlUG9pbnRlciwKICAgICAgZmFTcXVhcmVTaGFyZU5vZGVzLAogICAgICBmYVNoYXJlQWx0U3F1YXJlLAogICAgICBmYVRhYmxlQ2VsbHNMYXJnZSwKICAgICAgZmFUaExhcmdlLAogICAgICBmYUNhdCwKICAgICAgZmFDYWxlbmRhcldlZWssCiAgICAgIGZhQ29kZUNvbXBhcmUsCiAgICAgIGZhUm9hZENpcmNsZVhtYXJrLAogICAgICBmYVBhbGxldCwKICAgICAgZmFDYWtlQ2FuZGxlcywKICAgICAgZmFCaXJ0aGRheUNha2UsCiAgICAgIGZhQ2FrZSwKICAgICAgZmFCdWdTbGFzaCwKICAgICAgZmFUYXJwLAogICAgICBmYURpYWdyYW1QcmVkZWNlc3NvciwKICAgICAgZmFGYWNlRmx1c2hlZDogZmFGYWNlRmx1c2hlZDIsCiAgICAgIGZhRmx1c2hlZDogZmFGbHVzaGVkMiwKICAgICAgZmFEaWFncmFtTmV4dCwKICAgICAgZmFBbmNob3JDaXJjbGVYbWFyaywKICAgICAgZmFQZXJzb25DaXJjbGVYbWFyaywKICAgICAgZmFTcGEsCiAgICAgIGZhQmFyc1Byb2dyZXNzLAogICAgICBmYVRhc2tzQWx0LAogICAgICBmYUhlYXJ0Q2lyY2xlQ2hlY2ssCiAgICAgIGZhTWFyc1N0cm9rZVJpZ2h0LAogICAgICBmYU1hcnNTdHJva2VILAogICAgICBmYVRvd2VyT2JzZXJ2YXRpb24sCiAgICAgIGZhU3RlcmxpbmdTaWduLAogICAgICBmYUdicCwKICAgICAgZmFQb3VuZFNpZ24sCiAgICAgIGZhRmF1Y2V0RHJpcCwKICAgICAgZmFDaXJjbGVJbmZvLAogICAgICBmYUluZm9DaXJjbGUsCiAgICAgIGZhRmVhdGhlciwKICAgICAgZmFCb3dsUmljZSwKICAgICAgZmFTdGFySGFsZlN0cm9rZTogZmFTdGFySGFsZlN0cm9rZTIsCiAgICAgIGZhU3RhckhhbGZBbHQ6IGZhU3RhckhhbGZBbHQyLAogICAgICBmYVRlbXBlcmF0dXJlQXJyb3dEb3duLAogICAgICBmYVRlbXBlcmF0dXJlRG93biwKICAgICAgZmFNYXNrVmVudGlsYXRvciwKICAgICAgZmFGaWxlVmlkZW86IGZhRmlsZVZpZGVvMiwKICAgICAgZmFBcnJvd1RyZW5kRG93biwKICAgICAgZmFPaWxDYW4sCiAgICAgIGZhUGVvcGxlQ2FycnlCb3gsCiAgICAgIGZhUGVvcGxlQ2FycnksCiAgICAgIGZhQ2hhaXIsCiAgICAgIGZhV2luZCwKICAgICAgZmFMYXllckdyb3VwLAogICAgICBmYUhlYWRTaWRlTWFzaywKICAgICAgZmFIYW5kcywKICAgICAgZmFTaWduTGFuZ3VhZ2UsCiAgICAgIGZhU2lnbmluZywKICAgICAgZmFUYWJsZXRzLAogICAgICBmYVdlaWdodEhhbmdpbmcsCiAgICAgIGZhRGljZSwKICAgICAgZmFTaG9wU2xhc2gsCiAgICAgIGZhU3RvcmVBbHRTbGFzaCwKICAgICAgZmFTb3J0RG93biwKICAgICAgZmFTb3J0RGVzYywKICAgICAgZmFQZXNldGFTaWduLAogICAgICBmYVRhYmxldFNjcmVlbkJ1dHRvbiwKICAgICAgZmFUYWJsZXRBbHQsCiAgICAgIGZhSGFuZEhvbGRpbmdEb2xsYXIsCiAgICAgIGZhSGFuZEhvbGRpbmdVc2QsCiAgICAgIGZhU2hpZWxkLAogICAgICBmYVNoaWVsZEJsYW5rLAogICAgICBmYUZhY2VMYXVnaDogZmFGYWNlTGF1Z2gyLAogICAgICBmYUxhdWdoOiBmYUxhdWdoMiwKICAgICAgZmFIYW5kc0hvbGRpbmcsCiAgICAgIGZhQ2FydFNob3BwaW5nLAogICAgICBmYVNob3BwaW5nQ2FydCwKICAgICAgZmFPY3RhZ29uLAogICAgICBmYUhhbmRQb2ludGVyOiBmYUhhbmRQb2ludGVyMiwKICAgICAgZmFSZWdpc3RlcmVkOiBmYVJlZ2lzdGVyZWQyLAogICAgICBmYUhvdXNlU2lnbmFsLAogICAgICBmYUJhbmdsYWRlc2hpVGFrYVNpZ24KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjMuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvY2pzL2x1Y2lkZS5qcwp2YXIgcmVxdWlyZV9sdWNpZGUgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2My4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9janMvbHVjaWRlLmpzIihleHBvcnRzKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgZGVmYXVsdEF0dHJpYnV0ZXMgPSB7CiAgICAgIHhtbG5zOiAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLAogICAgICB3aWR0aDogMjQsCiAgICAgIGhlaWdodDogMjQsCiAgICAgIHZpZXdCb3g6ICIwIDAgMjQgMjQiLAogICAgICBmaWxsOiAibm9uZSIsCiAgICAgIHN0cm9rZTogImN1cnJlbnRDb2xvciIsCiAgICAgICJzdHJva2Utd2lkdGgiOiAyLAogICAgICAic3Ryb2tlLWxpbmVjYXAiOiAicm91bmQiLAogICAgICAic3Ryb2tlLWxpbmVqb2luIjogInJvdW5kIgogICAgfTsKICAgIHZhciBjcmVhdGVTVkdFbGVtZW50ID0gKFt0YWcsIGF0dHJzLCBjaGlsZHJlbjJdKSA9PiB7CiAgICAgIGNvbnN0IGVsZW1lbnQ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsIHRhZyk7CiAgICAgIE9iamVjdC5rZXlzKGF0dHJzKS5mb3JFYWNoKChuYW1lKSA9PiB7CiAgICAgICAgZWxlbWVudDQuc2V0QXR0cmlidXRlKG5hbWUsIFN0cmluZyhhdHRyc1tuYW1lXSkpOwogICAgICB9KTsKICAgICAgaWYgKGNoaWxkcmVuMj8ubGVuZ3RoKSB7CiAgICAgICAgY2hpbGRyZW4yLmZvckVhY2goKGNoaWxkKSA9PiB7CiAgICAgICAgICBjb25zdCBjaGlsZEVsZW1lbnQgPSBjcmVhdGVTVkdFbGVtZW50KGNoaWxkKTsKICAgICAgICAgIGVsZW1lbnQ0LmFwcGVuZENoaWxkKGNoaWxkRWxlbWVudCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgfTsKICAgIHZhciBjcmVhdGVFbGVtZW50MyA9IChpY29uTm9kZSwgY3VzdG9tQXR0cnMgPSB7fSkgPT4gewogICAgICBjb25zdCB0YWcgPSAic3ZnIjsKICAgICAgY29uc3QgYXR0cnMgPSB7CiAgICAgICAgLi4uZGVmYXVsdEF0dHJpYnV0ZXMsCiAgICAgICAgLi4uY3VzdG9tQXR0cnMKICAgICAgfTsKICAgICAgcmV0dXJuIGNyZWF0ZVNWR0VsZW1lbnQoW3RhZywgYXR0cnMsIGljb25Ob2RlXSk7CiAgICB9OwogICAgdmFyIGhhc0ExMXlQcm9wID0gKHByb3BzKSA9PiB7CiAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBwcm9wcykgewogICAgICAgIGlmIChwcm9wLnN0YXJ0c1dpdGgoImFyaWEtIikgfHwgcHJvcCA9PT0gInJvbGUiIHx8IHByb3AgPT09ICJ0aXRsZSIpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdmFyIG1lcmdlQ2xhc3NlcyA9ICguLi5jbGFzc2VzKSA9PiBjbGFzc2VzLmZpbHRlcigoY2xhc3NOYW1lLCBpbmRleDIsIGFycmF5KSA9PiB7CiAgICAgIHJldHVybiBCb29sZWFuKGNsYXNzTmFtZSkgJiYgY2xhc3NOYW1lLnRyaW0oKSAhPT0gIiIgJiYgYXJyYXkuaW5kZXhPZihjbGFzc05hbWUpID09PSBpbmRleDI7CiAgICB9KS5qb2luKCIgIikudHJpbSgpOwogICAgdmFyIHRvQ2FtZWxDYXNlID0gKHN0cmluZzMpID0+IHN0cmluZzMucmVwbGFjZSgKICAgICAgL14oW0EtWl0pfFtccy1fXSsoXHcpL2csCiAgICAgIChtYXRjaDIsIHAxLCBwMjIpID0+IHAyMiA/IHAyMi50b1VwcGVyQ2FzZSgpIDogcDEudG9Mb3dlckNhc2UoKQogICAgKTsKICAgIHZhciB0b1Bhc2NhbENhc2UgPSAoc3RyaW5nMykgPT4gewogICAgICBjb25zdCBjYW1lbENhc2UgPSB0b0NhbWVsQ2FzZShzdHJpbmczKTsKICAgICAgcmV0dXJuIGNhbWVsQ2FzZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGNhbWVsQ2FzZS5zbGljZSgxKTsKICAgIH07CiAgICB2YXIgZ2V0QXR0cnMgPSAoZWxlbWVudDQpID0+IEFycmF5LmZyb20oZWxlbWVudDQuYXR0cmlidXRlcykucmVkdWNlKChhdHRycywgYXR0cikgPT4gewogICAgICBhdHRyc1thdHRyLm5hbWVdID0gYXR0ci52YWx1ZTsKICAgICAgcmV0dXJuIGF0dHJzOwogICAgfSwge30pOwogICAgdmFyIGdldENsYXNzTmFtZXMgPSAoYXR0cnMpID0+IHsKICAgICAgaWYgKHR5cGVvZiBhdHRycyA9PT0gInN0cmluZyIpIHJldHVybiBhdHRyczsKICAgICAgaWYgKCFhdHRycyB8fCAhYXR0cnMuY2xhc3MpIHJldHVybiAiIjsKICAgICAgaWYgKGF0dHJzLmNsYXNzICYmIHR5cGVvZiBhdHRycy5jbGFzcyA9PT0gInN0cmluZyIpIHsKICAgICAgICByZXR1cm4gYXR0cnMuY2xhc3Muc3BsaXQoIiAiKTsKICAgICAgfQogICAgICBpZiAoYXR0cnMuY2xhc3MgJiYgQXJyYXkuaXNBcnJheShhdHRycy5jbGFzcykpIHsKICAgICAgICByZXR1cm4gYXR0cnMuY2xhc3M7CiAgICAgIH0KICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHZhciByZXBsYWNlRWxlbWVudCA9IChlbGVtZW50NCwgeyBuYW1lQXR0ciwgaWNvbnM6IGljb25zNiwgYXR0cnMgfSkgPT4gewogICAgICBjb25zdCBpY29uTmFtZSA9IGVsZW1lbnQ0LmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgIGlmIChpY29uTmFtZSA9PSBudWxsKSByZXR1cm47CiAgICAgIGNvbnN0IENvbXBvbmVudE5hbWUgPSB0b1Bhc2NhbENhc2UoaWNvbk5hbWUpOwogICAgICBjb25zdCBpY29uTm9kZSA9IGljb25zNltDb21wb25lbnROYW1lXTsKICAgICAgaWYgKCFpY29uTm9kZSkgewogICAgICAgIHJldHVybiBjb25zb2xlLndhcm4oCiAgICAgICAgICBgJHtlbGVtZW50NC5vdXRlckhUTUx9IGljb24gbmFtZSB3YXMgbm90IGZvdW5kIGluIHRoZSBwcm92aWRlZCBpY29ucyBvYmplY3QuYAogICAgICAgICk7CiAgICAgIH0KICAgICAgY29uc3QgZWxlbWVudEF0dHJzID0gZ2V0QXR0cnMoZWxlbWVudDQpOwogICAgICBjb25zdCBhcmlhUHJvcHMgPSBoYXNBMTF5UHJvcChlbGVtZW50QXR0cnMpID8ge30gOiB7ICJhcmlhLWhpZGRlbiI6ICJ0cnVlIiB9OwogICAgICBjb25zdCBpY29uQXR0cnMgPSB7CiAgICAgICAgLi4uZGVmYXVsdEF0dHJpYnV0ZXMsCiAgICAgICAgImRhdGEtbHVjaWRlIjogaWNvbk5hbWUsCiAgICAgICAgLi4uYXJpYVByb3BzLAogICAgICAgIC4uLmF0dHJzLAogICAgICAgIC4uLmVsZW1lbnRBdHRycwogICAgICB9OwogICAgICBjb25zdCBlbGVtZW50Q2xhc3NOYW1lcyA9IGdldENsYXNzTmFtZXMoZWxlbWVudEF0dHJzKTsKICAgICAgY29uc3QgY2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lcyhhdHRycyk7CiAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBtZXJnZUNsYXNzZXMoCiAgICAgICAgImx1Y2lkZSIsCiAgICAgICAgYGx1Y2lkZS0ke2ljb25OYW1lfWAsCiAgICAgICAgLi4uZWxlbWVudENsYXNzTmFtZXMsCiAgICAgICAgLi4uY2xhc3NOYW1lCiAgICAgICk7CiAgICAgIGlmIChjbGFzc05hbWVzKSB7CiAgICAgICAgT2JqZWN0LmFzc2lnbihpY29uQXR0cnMsIHsKICAgICAgICAgIGNsYXNzOiBjbGFzc05hbWVzCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgY29uc3Qgc3ZnRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQzKGljb25Ob2RlLCBpY29uQXR0cnMpOwogICAgICByZXR1cm4gZWxlbWVudDQucGFyZW50Tm9kZT8ucmVwbGFjZUNoaWxkKHN2Z0VsZW1lbnQsIGVsZW1lbnQ0KTsKICAgIH07CiAgICB2YXIgQUFycm93RG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEyIDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTZWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE2IDQuMDM5LTkuNjlhLjUuNSAwIDAgMSAuOTIzIDBMMTEgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zMDQgMTNoNi4zOTIiIH1dCiAgICBdOwogICAgdmFyIEFBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTEgNC00IDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNlY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMTYgNC4wMzktOS42OWEuNS41IDAgMCAxIC45MjMgMEwxMSAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjMwNCAxM2g2LjM5MiIgfV0KICAgIF07CiAgICB2YXIgQUxhcmdlU21hbGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxNiAyLjUzNi03LjMyOGExLjAyIDEuMDIgMSAwIDEgMS45MjggMEwyMiAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS42OTcgMTRoNS42MDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAxNiA0LjAzOS05LjY5YS41LjUgMCAwIDEgLjkyMyAwTDExIDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuMzA0IDEzaDYuMzkyIiB9XQogICAgXTsKICAgIHZhciBBY3Rpdml0eSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDEyaC0yLjQ4YTIgMiAwIDAgMC0xLjkzIDEuNDZsLTIuMzUgOC4zNmEuMjUuMjUgMCAwIDEtLjQ4IDBMOS4yNCAyLjE4YS4yNS4yNSAwIDAgMC0uNDggMGwtMi4zNSA4LjM2QTIgMiAwIDAgMSA0LjQ5IDEySDIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEFjY2Vzc2liaWxpdHkgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICI0IiwgcjogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggMTkgMS03LTYgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDggMy0zIDUuNSAzLTIuMzYgMy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuMjQgMTQuNWE1IDUgMCAwIDAgNi44OCA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjc2IDE3LjVhNSA1IDAgMCAwLTYuODgtNiIgfV0KICAgIF07CiAgICB2YXIgQWlyVmVudCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE3LjVhMi41IDIuNSAwIDEgMS00IDIuMDNWMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NWEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjYgMTUuNTcyQTIgMiAwIDEgMCAxMCAxN3YtNSIgfV0KICAgIF07CiAgICB2YXIgQWxhcm1DbG9ja0NoZWNrID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDMgMiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDYtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzggMTguNyA0IDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjY0IDE4LjY3IDIwIDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTMgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgQWlycGxheSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTdINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJoLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTUgNSA2SDdaIiB9XQogICAgXTsKICAgIHZhciBBbGFybUNsb2NrTWludXMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMyIsIHI6ICI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMyAyIDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNi0zLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zOCAxOC43IDQgMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNjQgMTguNjcgMjAgMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM2g2IiB9XQogICAgXTsKICAgIHZhciBBbGFybUNsb2NrT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNi44NyA2Ljg3YTggOCAwIDEgMCAxMS4yNiAxMS4yNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS45IDE0LjI1YTggOCAwIDAgMC05LjE1LTkuMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNi0zLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4yNiAxOC42NyA0IDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDQgMiA2IiB9XQogICAgXTsKICAgIHZhciBBbGFybUNsb2NrUGx1cyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEzIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzIDIgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA2LTMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjM4IDE4LjcgNCAyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy42NCAxOC42NyAyMCAyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMHY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTNoNiIgfV0KICAgIF07CiAgICB2YXIgQWxhcm1DbG9jayA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEzIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXY0bDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDMgMiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDYtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzggMTguNyA0IDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjY0IDE4LjY3IDIwIDIxIiB9XQogICAgXTsKICAgIHZhciBBbGFybVNtb2tlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjFjMC0yLjUgMi0yLjUgMi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDIxYzAtMi41IDItMi41IDItNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA4LS44IDNhMS4yNSAxLjI1IDAgMCAxLTEuMiAxSDdhMS4yNSAxLjI1IDAgMCAxLTEuMi0xTDUgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAzYTEgMSAwIDAgMSAxIDF2MmEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY0YTEgMSAwIDAgMSAxLTF6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjFjMC0yLjUgMi0yLjUgMi01IiB9XQogICAgXTsKICAgIHZhciBBbGJ1bSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMTEgMyAxMSAxMSAxNCA4IDE3IDExIDE3IDMiIH1dCiAgICBdOwogICAgdmFyIEFsaWduQ2VudGVySG9yaXpvbnRhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTZ2NGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMnYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA4VjRhMiAyIDAgMCAwLTItMkg2YTIgMiAwIDAgMC0yIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNnYxYTIgMiAwIDAgMS0yIDJoLTJhMiAyIDAgMCAxLTItMnYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA4VjdjMC0xLjEuOS0yIDItMmgyYTIgMiAwIDAgMSAyIDJ2MSIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25FbmRIb3Jpem9udGFsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjE2IiwgeDogIjQiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiOSIsIHg6ICIxNCIsIHk6ICI5Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIySDIiIH1dCiAgICBdOwogICAgdmFyIEFsaWduQ2VudGVyVmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTBINGEyIDIgMCAwIDEtMi0yVjZjMC0xLjEuOS0yIDItMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEwaDRhMiAyIDAgMCAwIDItMlY2YTIgMiAwIDAgMC0yLTJoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMEg3YTIgMiAwIDAgMS0yLTJ2LTJjMC0xLjEuOS0yIDItMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0aDFhMiAyIDAgMCAxIDIgMnYyYTIgMiAwIDAgMS0yIDJoLTEiIH1dCiAgICBdOwogICAgdmFyIEFsaWduRW5kVmVydGljYWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjYiLCB4OiAiMiIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjkiLCBoZWlnaHQ6ICI2IiwgeDogIjkiLCB5OiAiMTQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjJWMiIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZUNlbnRlciA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNCIsIHg6ICI0IiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjE0IiwgeTogIjciLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjJ2LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgN1YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjJ2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA1VjIiIH1dCiAgICBdOwogICAgdmFyIEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVFbmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTQiLCB4OiAiNCIsIHk6ICI1Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMCIsIHg6ICIxNCIsIHk6ICI3Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMnYyMCIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZVN0YXJ0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjE0IiwgeDogIjQiLCB5OiAiNSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTAiLCB4OiAiMTQiLCB5OiAiNyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnYyMCIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUNlbnRlciA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjE2IiwgeTogIjciLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyMCIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUVuZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjEyIiwgeTogIjciLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMnYyMCIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeVN0YXJ0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjE0IiwgeDogIjYiLCB5OiAiNSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTAiLCB4OiAiMTYiLCB5OiAiNyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDJ2MjAiIH1dCiAgICBdOwogICAgdmFyIEFsaWduSG9yaXpvbnRhbFNwYWNlQXJvdW5kID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjkiLCB5OiAiNyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIyVjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjJWMiIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25Ib3Jpem9udGFsU3BhY2VCZXR3ZWVuID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjE0IiwgeDogIjMiLCB5OiAiNSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTAiLCB4OiAiMTUiLCB5OiAiNyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMnYyMCIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25TdGFydEhvcml6b250YWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTYiLCB4OiAiNCIsIHk6ICI2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICI5IiwgeDogIjE0IiwgeTogIjYiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMkgyIiB9XQogICAgXTsKICAgIHZhciBBbGlnblN0YXJ0VmVydGljYWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI5IiwgaGVpZ2h0OiAiNiIsIHg6ICI2IiwgeTogIjE0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiNiIsIHg6ICI2IiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAydjIwIiB9XQogICAgXTsKICAgIHZhciBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUNlbnRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE3aC0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDdoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxN0gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgN0gyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNSIsIHk6ICIxNCIsIHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICI2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICI0Iiwgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIEFsaWduVmVydGljYWxEaXN0cmlidXRlRW5kID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICI2IiwgeDogIjUiLCB5OiAiMTQiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2IiwgeDogIjciLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIwaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoMjAiIH1dCiAgICBdOwogICAgdmFyIEFsaWduVmVydGljYWxEaXN0cmlidXRlU3RhcnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjYiLCB4OiAiNSIsIHk6ICIxNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCB4OiAiNyIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTRoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA0aDIwIiB9XQogICAgXTsKICAgIHZhciBBbGlnblZlcnRpY2FsSnVzdGlmeUNlbnRlciA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiNiIsIHg6ICI1IiwgeTogIjE2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiNiIsIHg6ICI3IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyMCIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25WZXJ0aWNhbEp1c3RpZnlFbmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjYiLCB4OiAiNSIsIHk6ICIxMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCB4OiAiNyIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjJoMjAiIH1dCiAgICBdOwogICAgdmFyIEFsaWduVmVydGljYWxKdXN0aWZ5U3RhcnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjYiLCB4OiAiNSIsIHk6ICIxNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCB4OiAiNyIsIHk6ICI2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMmgyMCIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25WZXJ0aWNhbFNwYWNlQXJvdW5kID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2IiwgeDogIjciLCB5OiAiOSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyMEgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDRIMiIgfV0KICAgIF07CiAgICB2YXIgQWxpZ25WZXJ0aWNhbFNwYWNlQmV0d2VlbiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiNiIsIHg6ICI1IiwgeTogIjE1Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiNiIsIHg6ICI3IiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDNoMjAiIH1dCiAgICBdOwogICAgdmFyIEFtcGVyc2FuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaDMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuNSAxMmE4IDggMCAwIDEtOCA4QTQuNSA0LjUgMCAwIDEgNSAxNS41YzAtNiA4LTQgOC04LjVhMyAzIDAgMSAwLTYgMGMwIDMgMi41IDguNSAxMiAxMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQW1idWxhbmNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTBINiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOFY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjExYTEgMSAwIDAgMCAxIDFoMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOSAxOGgyYTEgMSAwIDAgMCAxLTF2LTMuMjhhMSAxIDAgMCAwLS42ODQtLjk0OGwtMS45MjMtLjY0MWExIDEgMCAwIDEtLjU3OC0uNTAybC0xLjUzOS0zLjA3NkExIDEgMCAwIDAgMTYuMzgyIDhIMTQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOGg2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjE4IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3IiwgY3k6ICIxOCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBBbXBlcnNhbmRzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMCAxN2MtNS0zLTctNy03LTlhMiAyIDAgMCAxIDQgMGMwIDIuNS01IDIuNS01IDYgMCAxLjcgMS4zIDMgMyAzIDIuOCAwIDUtMi4yIDUtNSIgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0yMiAxN2MtNS0zLTctNy03LTlhMiAyIDAgMCAxIDQgMGMwIDIuNS01IDIuNS01IDYgMCAxLjcgMS4zIDMgMyAzIDIuOCAwIDUtMi4yIDUtNSIgfQogICAgICBdCiAgICBdOwogICAgdmFyIEFtcGhvcmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjUuNjMyYzAgLjQyNC0uMjcyLjc5NS0uNjUzLjk4MkE2IDYgMCAwIDAgNiAxNGMuMDA2IDQgMyA3IDUgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA1SDhhMiAyIDAgMCAwIDAgNGguNjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1LjYzMmMwIC40MjQuMjcyLjc5NS42NTIuOTgyQTYgNiAwIDAgMSAxOCAxNGMwIDQtMyA3LTUgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA1aDJhMiAyIDAgMCAxIDAgNGgtLjY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIySDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyaDYiIH1dCiAgICBdOwogICAgdmFyIEFuY2hvciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgMTMgMi0xYTkgOSAwIDAgMS0xOCAwbDIgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDExaDYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBBbmdyeSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2cy0xLjUtMi00LTItNCAyLTQgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjUgOCAxMCA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDkgMi41LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBoLjAxIiB9XQogICAgXTsKICAgIHZhciBBbm5veWVkID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDloMiIgfV0KICAgIF07CiAgICB2YXIgQW50ZW5uYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTIgNyAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTIgNS0xMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxMiA1LTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDEyIDUtMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC41IDdoMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZ2NiIgfV0KICAgIF07CiAgICB2YXIgQW52aWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEwSDZhNCA0IDAgMCAxLTQtNCAxIDEgMCAwIDEgMS0xaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA1YTEgMSAwIDAgMSAxLTFoMTNhMSAxIDAgMCAxIDEgMSA3IDcgMCAwIDEtNyA3SDhhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMnY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEydjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMGEzIDMgMCAwIDEgMy0zaDhhMyAzIDAgMCAxIDMgMyAxIDEgMCAwIDEtMSAxSDZhMSAxIDAgMCAxLTEtMSIgfV0KICAgIF07CiAgICB2YXIgQXBlcnR1cmUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4zMSA4IDUuNzQgOS45NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjY5IDhoMTEuNDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNy4zOCAxMiA1Ljc0LTkuOTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS42OSAxNiAzLjk1IDYuMDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuMzEgMTZIMi44MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi42MiAxMi01Ljc0IDkuOTQiIH1dCiAgICBdOwogICAgdmFyIEFwcFdpbmRvd01hYyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTYiLCB4OiAiMiIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOGguMDEiIH1dCiAgICBdOwogICAgdmFyIEFwcFdpbmRvdyA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI0Iiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDhoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA0djQiIH1dCiAgICBdOwogICAgdmFyIEFwcGxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNi41MjhWM2ExIDEgMCAwIDEgMS0xaDAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguMjM3IDIxQTE1IDE1IDAgMCAwIDIyIDExYTYgNiAwIDAgMC0xMC00LjQ3MkE2IDYgMCAwIDAgMiAxMWExNS4xIDE1LjEgMCAwIDAgMy43NjMgMTAgMyAzIDAgMCAwIDMuNjQ4LjY0OCA1LjUgNS41IDAgMCAxIDUuMTc4IDBBMyAzIDAgMCAwIDE4LjIzNyAyMSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQXJjaGl2ZVJlc3RvcmUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjUiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgOHYxMWEyIDIgMCAwIDAgMiAyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgOHYxMWEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTUgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnY5IiB9XQogICAgXTsKICAgIHZhciBBcmNoaXZlWCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiNSIsIHg6ICIyIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA4djExYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSAxNyA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDEyIDUgNSIgfV0KICAgIF07CiAgICB2YXIgQXJjaGl2ZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiNSIsIHg6ICIyIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA4djExYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEyaDQiIH1dCiAgICBdOwogICAgdmFyIEFybWNoYWlyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgOVY2YTIgMiAwIDAgMC0yLTJIN2EyIDIgMCAwIDAtMiAydjMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxNmEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJ2LTVhMiAyIDAgMCAwLTQgMHYxLjVhLjUuNSAwIDAgMS0uNS41aC05YS41LjUgMCAwIDEtLjUtLjVWMTFhMiAyIDAgMCAwLTQgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE4djIiIH1dCiAgICBdOwogICAgdmFyIEFycm93QmlnRG93bkRhc2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSAxMWExIDEgMCAwIDAgMSAxaDIuOTM5YTEgMSAwIDAgMSAuNzUgMS44MTFsLTYuODM1IDYuODM2YTEuMjA3IDEuMjA3IDAgMCAxLTEuNzA3IDBMNC4zMSAxMy44MWExIDEgMCAwIDEgLjc1LTEuODExSDhhMSAxIDAgMCAwIDEtMVY5YTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDRoNiIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dCaWdEb3duID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMTFhMSAxIDAgMCAwIDEgMWgyLjkzOWExIDEgMCAwIDEgLjc1IDEuODExbC02LjgzNSA2LjgzNmExLjIwNyAxLjIwNyAwIDAgMS0xLjcwNyAwTDQuMzEgMTMuODFhMSAxIDAgMCAxIC43NS0xLjgxMUg4YTEgMSAwIDAgMCAxLTFWNWExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEFycm93QmlnTGVmdERhc2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMyA5YTEgMSAwIDAgMS0xLTFWNS4wNjFhMSAxIDAgMCAwLTEuODExLS43NWwtNi44MzUgNi44MzZhMS4yMDcgMS4yMDcgMCAwIDAgMCAxLjcwN2w2LjgzNSA2LjgzNWExIDEgMCAwIDAgMS44MTEtLjc1VjE2YTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDAgMS0xdi00YTEgMSAwIDAgMC0xLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDl2NiIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dCaWdMZWZ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMgOWExIDEgMCAwIDEtMS0xVjUuMDYxYTEgMSAwIDAgMC0xLjgxMS0uNzVsLTYuODM1IDYuODM2YTEuMjA3IDEuMjA3IDAgMCAwIDAgMS43MDdsNi44MzUgNi44MzVhMSAxIDAgMCAwIDEuODExLS43NVYxNmExIDEgMCAwIDEgMS0xaDZhMSAxIDAgMCAwIDEtMXYtNGExIDEgMCAwIDAtMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQXJyb3dCaWdSaWdodERhc2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSA5YTEgMSAwIDAgMCAxLTFWNS4wNjFhMSAxIDAgMCAxIDEuODExLS43NWw2LjgzNiA2LjgzNmExLjIwNyAxLjIwNyAwIDAgMSAwIDEuNzA3bC02LjgzNiA2LjgzNWExIDEgMCAwIDEtMS44MTEtLjc1VjE2YTEgMSAwIDAgMC0xLTFIOWExIDEgMCAwIDEtMS0xdi00YTEgMSAwIDAgMSAxLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgOXY2IiB9XQogICAgXTsKICAgIHZhciBBcnJvd0JpZ1JpZ2h0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgOWExIDEgMCAwIDAgMS0xVjUuMDYxYTEgMSAwIDAgMSAxLjgxMS0uNzVsNi44MzYgNi44MzZhMS4yMDcgMS4yMDcgMCAwIDEgMCAxLjcwN2wtNi44MzYgNi44MzVhMSAxIDAgMCAxLTEuODExLS43NVYxNmExIDEgMCAwIDAtMS0xSDVhMSAxIDAgMCAxLTEtMXYtNGExIDEgMCAwIDEgMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQXJyb3dCaWdVcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTNhMSAxIDAgMCAwLTEtMUg1LjA2MWExIDEgMCAwIDEtLjc1LTEuODExbDYuODM2LTYuODM1YTEuMjA3IDEuMjA3IDAgMCAxIDEuNzA3IDBsNi44MzUgNi44MzVhMSAxIDAgMCAxLS43NSAxLjgxMUgxNmExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAxLTEgMWgtNGExIDEgMCAwIDEtMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQXJyb3dCaWdVcERhc2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDEzYTEgMSAwIDAgMC0xLTFINS4wNjFhMSAxIDAgMCAxLS43NS0xLjgxMWw2LjgzNi02LjgzNWExLjIwNyAxLjIwNyAwIDAgMSAxLjcwNyAwbDYuODM1IDYuODM1YTEgMSAwIDAgMS0uNzUgMS44MTFIMTZhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMS0xIDFoLTRhMSAxIDAgMCAxLTEtMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMGg2IiB9XQogICAgXTsKICAgIHZhciBBcnJvd0Rvd24wMSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwVjQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxNSIsIHk6ICI0Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiNiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMHYtNmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMGg0IiB9XQogICAgXTsKICAgIHZhciBBcnJvd0Rvd24xMCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTBWNGgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMGg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiMTQiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICI2Iiwgcnk6ICIyIiB9XQogICAgXTsKICAgIHZhciBBcnJvd0Rvd25BWiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgOGgtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMFY2LjVhMi41IDIuNSAwIDAgMSA1IDBWMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTRoNWwtNSA2aDUiIH1dCiAgICBdOwogICAgdmFyIEFycm93RG93bkZyb21MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgM0g1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxVjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxNSA2IDYgNi02IiB9XQogICAgXTsKICAgIHZhciBBcnJvd0Rvd25MZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNyA3IDE3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE3SDdWNyIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dEb3duTmFycm93V2lkZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgNGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDhoNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMmgxMCIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dEb3duUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDcgMTAgMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgN3YxMEg3IiB9XQogICAgXTsKICAgIHZhciBBcnJvd0Rvd25Ub0RvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgOS03IDctNy03IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjIxIiwgcjogIjEiIH1dCiAgICBdOwogICAgdmFyIEFycm93RG93blVwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxNiA0IDQgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjBWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSA4LTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNHYxNiIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dEb3duVG9MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTdWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDExIDYgNiA2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjFINSIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dEb3duV2lkZU5hcnJvdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgNGgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSA4aDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTJoNCIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dEb3duWkEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDE2IDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDRoNWwtNSA2aDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjB2LTMuNWEyLjUgMi41IDAgMCAxIDUgMFYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxOGgtNSIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNXYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAxMi03IDctNy03IiB9XQogICAgXTsKICAgIHZhciBBcnJvd0xlZnRGcm9tTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgNi02IDYgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTlWNSIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dMZWZ0UmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDMgNCA3bDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDdoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMjEgNC00LTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxN0g0IiB9XQogICAgXTsKICAgIHZhciBBcnJvd0xlZnRUb0xpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE5VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgNi02IDYgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoMTQiIH1dCiAgICBdOwogICAgdmFyIEFycm93TGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDE5LTctNyA3LTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTJINSIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dSaWdodEZyb21MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEySDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTggNi02LTYtNiIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dSaWdodExlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAzIDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgN0g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMjEtNC00IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE3aDE2IiB9XQogICAgXTsKICAgIHZhciBBcnJvd1JpZ2h0VG9MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSAxOCA2LTYtNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDV2MTQiIH1dCiAgICBdOwogICAgdmFyIEFycm93UmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEyaDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDUgNyA3LTcgNyIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dVcDAxID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiNCIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjYiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjB2LTZoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjBoNCIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dVcDEwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEwVjRoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBoNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE1IiwgeTogIjE0Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiNiIsIHJ5OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dVcEFaID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDhoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBWNi41YTIuNSAyLjUgMCAwIDEgNSAwVjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE0aDVsLTUgNmg1IiB9XQogICAgXTsKICAgIHZhciBBcnJvd1VwRG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE2LTQgNC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjBWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDggNC00IDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDR2MTYiIH1dCiAgICBdOwogICAgdmFyIEFycm93VXBGcm9tRG90ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNSA5IDctNyA3IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZWMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIyMSIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBBcnJvd1VwRnJvbUxpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCA5LTYtNi02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxaDE0IiB9XQogICAgXTsKICAgIHZhciBBcnJvd1VwTGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTdWN2gxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNyA3IDciIH1dCiAgICBdOwogICAgdmFyIEFycm93VXBOYXJyb3dXaWRlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTZoNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyMGgxMCIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dVcFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA3aDEwdjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTcgMTcgNyIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dVcFRvTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM2gxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxMy02LTYtNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2MTQiIH1dCiAgICBdOwogICAgdmFyIEFycm93VXBXaWRlTmFycm93ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE2aDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjBoNCIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dVcFpBID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDRoNWwtNSA2aDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjB2LTMuNWEyLjUgMi41IDAgMCAxIDUgMFYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxOGgtNSIgfV0KICAgIF07CiAgICB2YXIgQXJyb3dVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTIgNy03IDcgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOVY1IiB9XQogICAgXTsKICAgIHZhciBBcnJvd3NVcEZyb21MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNCA2IDMtMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxN1YzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDYgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxN1YzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMjFoMTYiIH1dCiAgICBdOwogICAgdmFyIEFzdGVyaXNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnYxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy4xOTYgOSA2LjgwNCAxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjgwNCA5IDEwLjM5MiA2IiB9XQogICAgXTsKICAgIHZhciBBdFNpZ24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDh2NWEzIDMgMCAwIDAgNiAwdi0xYTEwIDEwIDAgMSAwLTQgOCIgfV0KICAgIF07CiAgICB2YXIgQXRvbSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAuMiAyMC4yYzIuMDQtMi4wMy4wMi03LjM2LTQuNS0xMS45LTQuNTQtNC41Mi05Ljg3LTYuNTQtMTEuOS00LjUtMi4wNCAyLjAzLS4wMiA3LjM2IDQuNSAxMS45IDQuNTQgNC41MiA5Ljg3IDYuNTQgMTEuOSA0LjVaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjcgMTUuN2M0LjUyLTQuNTQgNi41NC05Ljg3IDQuNS0xMS45LTIuMDMtMi4wNC03LjM2LS4wMi0xMS45IDQuNS00LjUyIDQuNTQtNi41NCA5Ljg3LTQuNSAxMS45IDIuMDMgMi4wNCA3LjM2LjAyIDExLjktNC41WiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQXVkaW9MaW5lcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTB2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDZ2MTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA4djciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNXYxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMHYzIiB9XQogICAgXTsKICAgIHZhciBBd2FyZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE1LjQ3NyAxMi44OSAxLjUxNSA4LjUyNmEuNS41IDAgMCAxLS44MS40N2wtMy41OC0yLjY4N2ExIDEgMCAwIDAtMS4xOTcgMGwtMy41ODYgMi42ODZhLjUuNSAwIDAgMS0uODEtLjQ2OWwxLjUxNC04LjUyNiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI4IiwgcjogIjYiIH1dCiAgICBdOwogICAgdmFyIEF1ZGlvV2F2ZWZvcm0gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDEzYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDEgNCAwdjEzYTIgMiAwIDAgMCA0IDBWNGEyIDIgMCAwIDEgNCAwdjEzYTIgMiAwIDAgMCA0IDB2LTRhMiAyIDAgMCAxIDItMiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQXhlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTItOC4zODEgOC4zOGExIDEgMCAwIDEtMy4wMDEtM0wxMSA5IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1IDE1LjVhLjUuNSAwIDAgMCAuNS41QTYuNSA2LjUgMCAwIDAgMjIgOS41YS41LjUgMCAwIDAtLjUtLjVoLTEuNjcyYTIgMiAwIDAgMS0xLjQxNC0uNTg2bC01LjA2Mi01LjA2MmExLjIwNSAxLjIwNSAwIDAgMC0xLjcwNCAwTDkuMzUyIDUuNjQ4YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRsNS4wNjIgNS4wNjJBMiAyIDAgMCAxIDE1IDEzLjgyOHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEF4aXMzZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjUgMTAuNSAxNSA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHYxNWExIDEgMCAwIDAgMSAxaDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuMjkzIDE5LjcwNyA2IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTUgMS41LTEuNSIgfV0KICAgIF07CiAgICB2YXIgQmFieSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2Yy41LjMgMS4yLjUgMiAuNXMxLjUtLjIgMi0uNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMmguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuMzggNi44MTNBOSA5IDAgMCAxIDIwLjggMTAuMmEyIDIgMCAwIDEgMCAzLjYgOSA5IDAgMCAxLTE3LjYgMCAyIDIgMCAwIDEgMC0zLjZBOSA5IDAgMCAxIDEyIDNjMiAwIDMuNSAxLjEgMy41IDIuNXMtLjkgMi41LTIgMi41Yy0uOCAwLTEuNS0uNC0xLjUtMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEyaC4wMSIgfV0KICAgIF07CiAgICB2YXIgQmFja3BhY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEwYTQgNCAwIDAgMSA0LTRoOGE0IDQgMCAwIDEgNCA0djEwYTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjJ2LTZhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDZWNGEyIDIgMCAwIDEgMi0yaDJhMiAyIDAgMCAxIDIgMnYyIiB9XQogICAgXTsKICAgIHZhciBCYWRnZUFsZXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI4IiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIuMDEiLCB5MTogIjE2IiwgeTI6ICIxNiIgfV0KICAgIF07CiAgICB2YXIgQmFkZ2VDZW50ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3YxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS40IDEwYTQgNCAwIDEgMCAwIDQiIH1dCiAgICBdOwogICAgdmFyIEJhZGdlQ2hlY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEyIDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIEJhZGdlRG9sbGFyU2lnbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoLTZhMiAyIDAgMSAwIDAgNGg0YTIgMiAwIDEgMSAwIDRIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY2IiB9XQogICAgXTsKICAgIHZhciBCYWRnZUV1cm8gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOS40YTQgNCAwIDEgMCAwIDUuMiIgfV0KICAgIF07CiAgICB2YXIgQmFkZ2VJbmRpYW5SdXBlZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyAxNy01LTFoMWE0IDQgMCAwIDAgMC04IiB9XQogICAgXTsKICAgIHZhciBCYWRnZUluZm8gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjE2IiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIuMDEiLCB5MTogIjgiLCB5MjogIjgiIH1dCiAgICBdOwogICAgdmFyIEJhZGdlSmFwYW5lc2VZZW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDggMyAzdjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTEgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE2aDYiIH1dCiAgICBdOwogICAgdmFyIEJhZGdlTWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI4IiwgeDI6ICIxNiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XQogICAgXTsKICAgIHZhciBCYWRnZVBlcmNlbnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1aC4wMSIgfV0KICAgIF07CiAgICB2YXIgQmFkZ2VQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI4IiwgeTI6ICIxNiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI4IiwgeDI6ICIxNiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XQogICAgXTsKICAgIHZhciBCYWRnZVBvdW5kU3RlcmxpbmcgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTZWOS41YTIuNSAyLjUgMCAwIDEgNSAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTZoNyIgfV0KICAgIF07CiAgICB2YXIgQmFkZ2VRdWVzdGlvbk1hcmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIuMDEiLCB5MTogIjE3IiwgeTI6ICIxNyIgfV0KICAgIF07CiAgICB2YXIgQmFkZ2VSdXNzaWFuUnVibGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE2aDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMmg1YTIgMiAwIDEgMCAwLTRoLTN2OSIgfV0KICAgIF07CiAgICB2YXIgQmFkZ2VTd2lzc0ZyYW5jID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTdWOGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEyaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNmg0IiB9XQogICAgXTsKICAgIHZhciBCYWRnZVR1cmtpc2hMaXJhID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgN3YxMGE1IDUgMCAwIDAgNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDgtNiAzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzYiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJhZGdlWCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICI5IiwgeTE6ICI5IiwgeTI6ICIxNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICIxNSIsIHkxOiAiOSIsIHkyOiAiMTUiIH1dCiAgICBdOwogICAgdmFyIEJhZGdlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJhZ2dhZ2VDbGFpbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE4SDZhMiAyIDAgMCAxLTItMlY3YTIgMiAwIDAgMC0yLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRWNGEyIDIgMCAwIDAtMi0yaC0xYTIgMiAwIDAgMC0yIDJ2MTAiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTMiLCBoZWlnaHQ6ICI4IiwgeDogIjgiLCB5OiAiNiIsIHJ4OiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIyMCIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiMjAiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQmFsbG9vbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2djFhMiAyIDAgMCAwIDIgMmgxYTIgMiAwIDAgMSAyIDJ2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2YTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGMwIDQtMy41IDgtNiA4cy02LTQtNi04YTYgNiAwIDAgMSAxMiAwIiB9XQogICAgXTsKICAgIHZhciBCYW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjkyOSA0LjkyOSAxOS4wNyAxOS4wNzEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIEJhbmFuYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTNjMy41LTIgOC0yIDEwIDJhNS41IDUuNSAwIDAgMSA4IDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNS4xNSAxNy44OWM1LjUyLTEuNTIgOC42NS02Ljg5IDctMTJDMTEuNTUgNCAxMS41IDIgMTMgMmMzLjIyIDAgNSA1LjUgNSA4IDAgNi41LTQuMiAxMi0xMC40OSAxMkM1LjExIDIyIDIgMjIgMiAyMGMwLTEuNSAxLjE0LTEuNTUgMy4xNS0yLjExWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQmFua25vdGVBcnJvd0Rvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxOSAzIDMgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoLjAxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEJhbmRhZ2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMC4wMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTQuMDFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwLjAxaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNC4wMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNnYxMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNnYxMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNiIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxMiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQmFua25vdGVBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDIydi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE5LTMtMy0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmguMDEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQmFua25vdGVYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTcgNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxNy01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmguMDEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQmFua25vdGUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoLjAxTTE4IDEyaC4wMSIgfV0KICAgIF07CiAgICB2YXIgQmFycmVsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgM2E0MSA0MSAwIDAgMCAwIDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDNhNDEgNDEgMCAwIDEgMCAxOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAzYTIgMiAwIDAgMSAxLjY4LjkyIDE1LjI1IDE1LjI1IDAgMCAxIDAgMTYuMTZBMiAyIDAgMCAxIDE3IDIxSDdhMiAyIDAgMCAxLTEuNjgtLjkyIDE1LjI1IDE1LjI1IDAgMCAxIDAtMTYuMTZBMiAyIDAgMCAxIDcgM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy44NCAxN2gxNi4zMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjg0IDdoMTYuMzIiIH1dCiAgICBdOwogICAgdmFyIEJhcmNvZGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDV2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA1djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDV2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNXYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1djE0IiB9XQogICAgXTsKICAgIHZhciBCYXNlbGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMjBoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxNiA2LTEyIDYgMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XQogICAgXTsKICAgIHZhciBCYXRoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNCA4IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTl2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTl2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDUgNy42MjEgMy42MjFBMi4xMjEgMi4xMjEgMCAwIDAgNCA1djEyYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtNSIgfV0KICAgIF07CiAgICB2YXIgQmF0dGVyeUZ1bGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwdjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTR2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMHY0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI2Iiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBCYXR0ZXJ5TG93ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTR2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNHYtNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNiIsIHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxMiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQmF0dGVyeUNoYXJnaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgNy0zIDVoNGwtMyA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0Ljg1NiA2SDE2YTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAyaC0yLjkzNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01LjE0IDE4SDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMi45MzYiIH1dCiAgICBdOwogICAgdmFyIEJhdHRlcnlNZWRpdW0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE0di00IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI2Iiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBCYXR0ZXJ5UGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDl2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi41NDMgNkgxNmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMmgtMy42MDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTR2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNjA2IDE4SDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMy42MDYiIH1dCiAgICBdOwogICAgdmFyIEJhdHRlcnlXYXJuaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTdoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDd2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA2aDJhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTR2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDIiIH1dCiAgICBdOwogICAgdmFyIEJhdHRlcnkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0gMjIgMTQgTCAyMiAxMCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNiIsIHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxMiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQmVha2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNC41IDNoMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAzdjE2YTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNGgxMiIgfV0KICAgIF07CiAgICB2YXIgQmVhbk9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOWMtLjY0LjY0LTEuNTIxLjk1NC0yLjQwMiAxLjE2NUE2IDYgMCAwIDAgOCAyMmExMy45NiAxMy45NiAwIDAgMCA5LjktNC4xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjc1IDUuMDkzQTYgNiAwIDAgMSAyMiA4YzAgMi40MTEtLjYxIDQuNjgtMS42ODMgNi42NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01LjM0MSAxMC42MmE0IDQgMCAwIDAgNi40ODcgMS4yMDhNMTAuNjIgNS4zNDFhNC4wMTUgNC4wMTUgMCAwIDEgMi4wMzkgMi4wNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIEJlYW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4xNjUgNi41OThDOS45NTQgNy40NzggOS42NCA4LjM2IDkgOWMtLjY0LjY0LTEuNTIxLjk1NC0yLjQwMiAxLjE2NUE2IDYgMCAwIDAgOCAyMmM3LjczMiAwIDE0LTYuMjY4IDE0LTE0YTYgNiAwIDAgMC0xMS44MzUtMS40MDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuMzQxIDEwLjYyYTQgNCAwIDEgMCA1LjI3OS01LjI4IiB9XQogICAgXTsKICAgIHZhciBCZWREb3VibGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIwdi04YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBWNmEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA0djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGgyMCIgfV0KICAgIF07CiAgICB2YXIgQmVkU2luZ2xlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMHYtOGEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEwVjZhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOGgxOCIgfV0KICAgIF07CiAgICB2YXIgQmVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOGgxOGEyIDIgMCAwIDEgMiAydjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTdoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4djkiIH1dCiAgICBdOwogICAgdmFyIEJlZWYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNi40IDEzLjdBNi41IDYuNSAwIDEgMCA2LjI4IDYuNmMtMS4xIDMuMTMtLjc4IDMuOS0zLjE4IDYuMDhBMyAzIDAgMCAwIDUgMThjNCAwIDguNC0xLjggMTEuNC00LjMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTguNSA2IDIuMTkgNC41YTYuNDggNi40OCAwIDAgMS0yLjI5IDcuMkMxNS40IDIwLjIgMTEgMjIgNyAyMmEzIDMgMCAwIDEtMi42OC0xLjY2TDIuNCAxNi41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIuNSIsIGN5OiAiOC41IiwgcjogIjIuNSIgfV0KICAgIF07CiAgICB2YXIgQmVlck9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEzdjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTEuNDdWOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMWgxYTMgMyAwIDAgMSAyLjc0NSA0LjIxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA4djEyYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0ydi0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNTM2IDcuNTM1QzYuNzY2IDcuNjQ5IDYuMTU0IDggNS41IDhhMi41IDIuNSAwIDAgMS0xLjc2OC00LjI2OCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjcyNyAzLjIwNEM5LjMwNiAyLjc2NyA5Ljg4NSAyIDExIDJjMS41NiAwIDIgMS41IDMgMS41czEuNzItLjUgMi41LS41YTEgMSAwIDEgMSAwIDVjLS43OCAwLTEuNS0uNS0yLjUtLjVhMy4xNDkgMy4xNDkgMCAwIDAtLjg0Mi4xMiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE0LjZWMTgiIH1dCiAgICBdOwogICAgdmFyIEJlZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMWgxYTMgMyAwIDAgMSAwIDZoLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEydjYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQgNy41Yy0xIDAtMS40NC41LTMgLjVzLTItLjUtMy0uNS0xLjcyLjUtMi41LjVhMi41IDIuNSAwIDAgMSAwLTVjLjc4IDAgMS41Ny41IDIuNS41UzkuNDQgMiAxMSAyczIgMS41IDMgMS41IDEuNzItLjUgMi41LS41YTIuNSAyLjUgMCAwIDEgMCA1Yy0uNzggMC0xLjUtLjUtMi41LS41WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDh2MTJhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJWOCIgfV0KICAgIF07CiAgICB2YXIgQmVsbERvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjI2OCAyMWEyIDIgMCAwIDAgMy40NjQgMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy45MTYgMi4zMTRBNiA2IDAgMCAwIDYgOGMwIDQuNDk5LTEuNDExIDUuOTU2LTIuNzQgNy4zMjdBMSAxIDAgMCAwIDQgMTdoMTZhMSAxIDAgMCAwIC43NC0xLjY3MyA5IDkgMCAwIDEtLjU4NS0uNjY1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjgiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgQmVsbEVsZWN0cmljID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguNTE4IDE3LjM0N0E3IDcgMCAwIDEgMTQgMTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguOCA0QTExIDExIDAgMCAxIDIwIDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aC4wMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjIwIiwgY3k6ICIxNiIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICI3IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNCIsIHk6ICIxNiIsIHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBCZWxsTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4yNjggMjFhMiAyIDAgMCAwIDMuNDY0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOGg2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjI0MyAzLjc1N0E2IDYgMCAwIDAgNiA4YzAgNC40OTktMS40MTEgNS45NTYtMi43MzggNy4zMjZBMSAxIDAgMCAwIDQgMTdoMTZhMSAxIDAgMCAwIC43NC0xLjY3M0E5LjQgOS40IDAgMCAxIDE4LjY2NyAxMiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQmVsbFBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4yNjggMjFhMiAyIDAgMCAwIDMuNDY0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDV2NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC4wMDIgMTQuNDY0YTkgOSAwIDAgMCAuNzM4Ljg2M0ExIDEgMCAwIDEgMjAgMTdINGExIDEgMCAwIDEtLjc0LTEuNjczQzQuNTkgMTMuOTU2IDYgMTIuNDk5IDYgOGE2IDYgMCAwIDEgOC43NS01LjMzMiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQmVsbE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjI2OCAyMWEyIDIgMCAwIDAgMy40NjQgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxN0g0YTEgMSAwIDAgMS0uNzQtMS42NzNDNC41OSAxMy45NTYgNiAxMi40OTkgNiA4YTYgNiAwIDAgMSAuMjU4LTEuNzQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjY2OCAzLjAxQTYgNiAwIDAgMSAxOCA4YzAgMi42ODcuNzcgNC42NTMgMS43MDcgNi4wNSIgfV0KICAgIF07CiAgICB2YXIgQmVsbFJpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4yNjggMjFhMiAyIDAgMCAwIDMuNDY0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgOGMwLTIuMy0uOC00LjMtMi02IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuMjYyIDE1LjMyNkExIDEgMCAwIDAgNCAxN2gxNmExIDEgMCAwIDAgLjc0LTEuNjczQzE5LjQxIDEzLjk1NiAxOCAxMi40OTkgMTggOEE2IDYgMCAwIDAgNiA4YzAgNC40OTktMS40MTEgNS45NTYtMi43MzggNy4zMjYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyQzIuOCAzLjcgMiA1LjcgMiA4IiB9XQogICAgXTsKICAgIHZhciBCZWxsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMjY4IDIxYTIgMiAwIDAgMCAzLjQ2NCAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuMjYyIDE1LjMyNkExIDEgMCAwIDAgNCAxN2gxNmExIDEgMCAwIDAgLjc0LTEuNjczQzE5LjQxIDEzLjk1NiAxOCAxMi40OTkgMTggOEE2IDYgMCAwIDAgNiA4YzAgNC40OTktMS40MTEgNS45NTYtMi43MzggNy4zMjYiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJldHdlZW5Ib3Jpem9udGFsRW5kID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTMiLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxNS0zLTMgMy0zIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEzIiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjE0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBCZXR3ZWVuSG9yaXpvbnRhbFN0YXJ0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTMiLCBoZWlnaHQ6ICI3IiwgeDogIjgiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDkgMyAzLTMgMyIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMyIsIGhlaWdodDogIjciLCB4OiAiOCIsIHk6ICIxNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQmV0d2VlblZlcnRpY2FsU3RhcnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiMTMiLCB4OiAiMyIsIHk6ICI4Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDItMyAzLTMtMyIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiMTMiLCB4OiAiMTQiLCB5OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQmV0d2VlblZlcnRpY2FsRW5kID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjEzIiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDIyIDMtMyAzIDMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjEzIiwgeDogIjE0IiwgeTogIjMiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIEJpY2Vwc0ZsZXhlZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjQwOSAxMy4wMTdBNSA1IDAgMCAxIDIyIDE1YzAgMy44NjYtNCA3LTkgNy00LjA3NyAwLTguMTUzLS44Mi0xMC4zNzEtMi40NjItLjQyNi0uMzE2LS42MzEtLjgzMi0uNjItMS4zNjJDMi4xMTggMTIuNzIzIDIuNjI3IDIgMTAgMmEzIDMgMCAwIDEgMyAzIDIgMiAwIDAgMS0yIDJjLTEuMTA1IDAtMS42NC0uNDQ0LTItMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNGE1IDUgMCAwIDAtNy41ODQgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05Ljk2NCA2LjgyNUM4LjAxOSA3Ljk3NyA5LjUgMTMgOCAxNSIgfV0KICAgIF07CiAgICB2YXIgQmlrZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTguNSIsIGN5OiAiMTcuNSIsIHI6ICIzLjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1LjUiLCBjeTogIjE3LjUiLCByOiAiMy41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjUiLCByOiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNy41VjE0bC0zLTMgNC0zIDIgM2gyIiB9XQogICAgXTsKICAgIHZhciBCaW5hcnkgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjE0IiwgeTogIjE0Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjYiLCB5OiAiNCIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjYiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNGgydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNGgydjYiIH1dCiAgICBdOwogICAgdmFyIEJpb2hhemFyZCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExLjkiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjcgMy40Yy0uOSAyLjUgMCA1LjIgMi4yIDYuN0M2LjUgOSAzLjcgOS42IDIgMTEuNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjkgMTAuMSAxLjQuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy4zIDMuNGMuOSAyLjUgMCA1LjItMi4yIDYuNyAyLjQtMS4yIDUuMi0uNiA2LjkgMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjEgMTAuMS0xLjQuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi43IDIwLjhjLTIuNi0uNC00LjYtMi42LTQuNy01LjMtLjIgMi42LTIuMSA0LjgtNC43IDUuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMy45djEuNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy41IDUuNGMtMS0uMi0yLS4yLTMgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNi40Yy43LS43IDEuMi0xLjYgMS41LTIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01LjUgMTMuOWMuMy45LjggMS44IDEuNSAyLjUiIH1dCiAgICBdOwogICAgdmFyIEJpcmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjQgMThIMTJhOCA4IDAgMCAwIDgtOFY3YTQgNCAwIDAgMC03LjI4LTIuM0wyIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDcgMiAuNS0yIC41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE4djMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTcuNzVWMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxOGE2IDYgMCAwIDAgMy44NC0xMC42MSIgfV0KICAgIF07CiAgICB2YXIgQmlub2N1bGFycyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgN1Y0YTEgMSAwIDAgMC0xLTFoLTJhMSAxIDAgMCAwLTEgMXYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIxYTIgMiAwIDAgMCAyLTJ2LTMuODUxYzAtMS4zOS0yLTIuOTYyLTItNC44MjlWOGExIDEgMCAwIDAtMS0xaC00YTEgMSAwIDAgMC0xIDF2MTFhMiAyIDAgMCAwIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNIDIyIDE2IEwgMiAxNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDIxYTIgMiAwIDAgMS0yLTJ2LTMuODUxYzAtMS4zOSAyLTIuOTYyIDItNC44MjlWOGExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXYxMWEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDdWNGExIDEgMCAwIDAtMS0xSDZhMSAxIDAgMCAwLTEgMXYzIiB9XQogICAgXTsKICAgIHZhciBCaXJkaG91c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE4IDEuOTU2LTExLjQ2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDggNy44Mi01LjYxNWEyIDIgMCAwIDEgMi4zNiAwTDIxIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOGgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE4IDUuMDQ0IDYuNTMyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEJpdGNvaW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS43NjcgMTkuMDg5YzQuOTI0Ljg2OCA2LjE0LTYuMDI1IDEuMjE2LTYuODk0bS0xLjIxNiA2Ljg5NEw1Ljg2IDE4LjA0N201LjkwOCAxLjA0Mi0uMzQ3IDEuOTdtMS41NjMtOC44NjRjNC45MjQuODY5IDYuMTQtNi4wMjUgMS4yMTUtNi44OTNtLTEuMjE1IDYuODkzLTMuOTQtLjY5NG01LjE1NS02LjJMOC4yOSA0LjI2bTUuOTA4IDEuMDQyLjM0OC0xLjk3TTcuNDggMjAuMzY0bDMuMTI2LTE3LjcyNyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQmxlbmQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjkiLCByOiAiNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICIxNSIsIHI6ICI3IiB9XQogICAgXTsKICAgIHZhciBCbGluZHMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDNoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgN0g4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDExSDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTloMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDN2MTQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICIxOSIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBCbG9ja3MgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMCAyMlY3YTEgMSAwIDAgMC0xLTFINGEyIDIgMCAwIDAtMiAydjEyYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtNWExIDEgMCAwIDAtMS0xSDIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInJlY3QiLCB7IHg6ICIxNCIsIHk6ICIyIiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQmx1ZXRvb3RoQ29ubmVjdGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNyA3IDEwIDEwLTUgNVYybDUgNUw3IDE3IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE4IiwgeDI6ICIyMSIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB4MjogIjYiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgICB2YXIgQmx1ZXRvb3RoT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTctNSA1VjEybC01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjUgOS41IDE3IDdsLTUtNXY0LjUiIH1dCiAgICBdOwogICAgdmFyIEJsdWV0b290aFNlYXJjaGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgNyAxMCAxMC01IDVWMmw1IDVMNyAxNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC44MyAxNC44M2E0IDQgMCAwIDAgMC01LjY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEyaC4wMSIgfV0KICAgIF07CiAgICB2YXIgQmx1ZXRvb3RoID0gW1sicGF0aCIsIHsgZDogIm03IDcgMTAgMTAtNSA1VjJsNSA1TDcgMTciIH1dXTsKICAgIHZhciBCb2xkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmg5YTQgNCAwIDAgMSAwIDhIN2ExIDEgMCAwIDEtMS0xVjVhMSAxIDAgMCAxIDEtMWg3YTQgNCAwIDAgMSAwIDgiIH1dCiAgICBdOwogICAgdmFyIEJvbHQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNCIgfV0KICAgIF07CiAgICB2YXIgQm9tYiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjEzIiwgcjogIjkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xNC4zNSA0LjY1IDE2LjMgMi43YTIuNDEgMi40MSAwIDAgMSAzLjQgMGwxLjYgMS42YTIuNCAyLjQgMCAwIDEgMCAzLjRsLTEuOTUgMS45NSIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMi0xLjUgMS41IiB9XQogICAgXTsKICAgIHZhciBCb25lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgMTBjLjctLjcgMS42OSAwIDIuNSAwYTIuNSAyLjUgMCAxIDAgMC01IC41LjUgMCAwIDEtLjUtLjUgMi41IDIuNSAwIDEgMC01IDBjMCAuODEuNyAxLjggMCAyLjVsLTcgN2MtLjcuNy0xLjY5IDAtMi41IDBhMi41IDIuNSAwIDAgMCAwIDVjLjI4IDAgLjUuMjIuNS41YTIuNSAyLjUgMCAxIDAgNSAwYzAtLjgxLS43LTEuOCAwLTIuNVoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJvb2tBID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDEzIDQtNyA0IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4xIDExaDUuNyIgfV0KICAgIF07CiAgICB2YXIgQm9va0FsZXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTNoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXQogICAgXTsKICAgIHZhciBCb29rQXVkaW8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOHYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4djMiIH1dCiAgICBdOwogICAgdmFyIEJvb2tDaGVjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA5LjUgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgQm9va0NvcHkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDdhMiAyIDAgMCAwLTIgMnYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01LjgwMyAxOEg1YTIgMiAwIDAgMCAwIDRoOS41YS41LjUgMCAwIDAgLjUtLjVWMjEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk05IDE1VjRhMiAyIDAgMCAxIDItMmg5LjVhLjUuNSAwIDAgMSAuNS41djE0YS41LjUgMCAwIDEtLjUuNUgxMWEyIDIgMCAwIDEgMC00aDEwIiB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQm9va0Rhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aDEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMmgxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmgxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNSAyMkgxOWExIDEgMCAwIDAgMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjUgMkgxOWExIDEgMCAwIDEgMSAxdjEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNHYzaC0yLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgOC41VjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBWOC41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTkuNVYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDQuNUEyLjUgMi41IDAgMCAxIDYuNSAySDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMkg2LjVhMSAxIDAgMCAxIDAtNUg4IiB9XQogICAgXTsKICAgIHZhciBCb29rRG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzVjciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEwIDMgMyAzLTMiIH1dCiAgICBdOwogICAgdmFyIEJvb2tIZWFkcGhvbmVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEydi0yYTQgNCAwIDAgMSA4IDB2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiMTIiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgQm9va0hlYXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjYyIDkuOEEyLjI1IDIuMjUgMCAxIDEgMTIgNi44MzZhMi4yNSAyLjI1IDAgMSAxIDMuMzggMi45NjZsLTIuNjI2IDIuODU2YS45OTguOTk4IDAgMCAxLTEuNTA3IDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBCb29rSW1hZ2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxMy43LTIuMS0yLjFhMiAyIDAgMCAwLTIuOCAwTDkuNyAxNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjgiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQm9va0tleSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDMgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDItNC41IDQuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA3Ljg5OFYyMWExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMmg3Ljg0NCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE0IiwgY3k6ICI4IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEJvb2tMb2NrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNlY0YTIgMiAwIDEgMC00IDB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNXY2YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTIiLCB5OiAiNiIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjUiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIEJvb2tNYXJrZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjhsMy0zIDMgM1YyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJvb2tNaW51cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMGg2IiB9XQogICAgXTsKICAgIHZhciBCb29rT3BlbkNoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjFWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMiAyIDIgNC00IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDZWNGExIDEgMCAwIDAtMS0xaC01YTQgNCAwIDAgMC00IDQgNCA0IDAgMCAwLTQtNEgzYTEgMSAwIDAgMC0xIDF2MTNhMSAxIDAgMCAwIDEgMWg2YTMgMyAwIDAgMSAzIDMgMyAzIDAgMCAxIDMtM2g2YTEgMSAwIDAgMCAxLTF2LTEuMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQm9va09wZW5UZXh0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3YxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDE4YTEgMSAwIDAgMS0xLTFWNGExIDEgMCAwIDEgMS0xaDVhNCA0IDAgMCAxIDQgNCA0IDQgMCAwIDEgNC00aDVhMSAxIDAgMCAxIDEgMXYxM2ExIDEgMCAwIDEtMSAxaC02YTMgMyAwIDAgMC0zIDMgMyAzIDAgMCAwLTMtM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGgyIiB9XQogICAgXTsKICAgIHZhciBCb29rT3BlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2MTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxOGExIDEgMCAwIDEtMS0xVjRhMSAxIDAgMCAxIDEtMWg1YTQgNCAwIDAgMSA0IDQgNCA0IDAgMCAxIDQtNGg1YTEgMSAwIDAgMSAxIDF2MTNhMSAxIDAgMCAxLTEgMWgtNmEzIDMgMCAwIDAtMyAzIDMgMyAwIDAgMC0zLTN6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBCb29rUGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTBoNiIgfV0KICAgIF07CiAgICB2YXIgQm9va1NlYXJjaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIySDUuNWExIDEgMCAwIDEgMC01aDQuNTAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIyLTEuODc5LTEuODc4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA1LjUgMkgxOGExIDEgMCAwIDEgMSAxdjgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgQm9va1RleHQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDdoNiIgfV0KICAgIF07CiAgICB2YXIgQm9va1R5cGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxM2g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4VjZIOHYyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJvb2tVcDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM1Y3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDJoMWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDUgMy0zIDMgMyIgfV0KICAgIF07CiAgICB2YXIgQm9va1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTNWNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMy0zIDMgMyIgfV0KICAgIF07CiAgICB2YXIgQm9va1VzZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxM2EzIDMgMCAxIDAtNiAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBCb29rWCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgNy01IDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjUgNyA1IDUiIH1dCiAgICBdOwogICAgdmFyIEJvb2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXQogICAgXTsKICAgIHZhciBCb29rbWFya0NoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgM2EyIDIgMCAwIDEgMiAydjE1YTEgMSAwIDAgMS0xLjQ5Ni44NjhsLTQuNTEyLTIuNTc4YTIgMiAwIDAgMC0xLjk4NCAwbC00LjUxMiAyLjU3OEExIDEgMCAwIDEgNSAyMFY1YTIgMiAwIDAgMSAyLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgQm9va21hcmtNaW51cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEwSDkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgM2EyIDIgMCAwIDEgMiAydjE1YTEgMSAwIDAgMS0xLjQ5Ni44NjhsLTQuNTEyLTIuNTc4YTIgMiAwIDAgMC0xLjk4NCAwbC00LjUxMiAyLjU3OEExIDEgMCAwIDEgNSAyMFY1YTIgMiAwIDAgMSAyLTJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBCb29rbWFya1ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDcuNS01IDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgM2EyIDIgMCAwIDEgMiAydjE1YTEgMSAwIDAgMS0xLjQ5Ni44NjhsLTQuNTEyLTIuNTc4YTIgMiAwIDAgMC0xLjk4NCAwbC00LjUxMiAyLjU3OEExIDEgMCAwIDEgNSAyMFY1YTIgMiAwIDAgMSAyLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSA3LjUgNSA1IiB9XQogICAgXTsKICAgIHZhciBCb29rbWFya1BsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBIOSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAzYTIgMiAwIDAgMSAyIDJ2MTVhMSAxIDAgMCAxLTEuNDk2Ljg2OGwtNC41MTItMi41NzhhMiAyIDAgMCAwLTEuOTg0IDBsLTQuNTEyIDIuNTc4QTEgMSAwIDAgMSA1IDIwVjVhMiAyIDAgMCAxIDItMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEJvb2ttYXJrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgM2EyIDIgMCAwIDEgMiAydjE1YTEgMSAwIDAgMS0xLjQ5Ni44NjhsLTQuNTEyLTIuNTc4YTIgMiAwIDAgMC0xLjk4NCAwbC00LjUxMiAyLjU3OEExIDEgMCAwIDEgNSAyMFY1YTIgMiAwIDAgMSAyLTJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBCb29tQm94ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA5VjVhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDh2MSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiOSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjE1IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMTUiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQm90TWVzc2FnZVNxdWFyZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZWMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDExdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEyaDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTZhMiAyIDAgMCAxLTIgMkg4LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgNCAyMC4yODZWOGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTF2MiIgfV0KICAgIF07CiAgICB2YXIgQm90T2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNjcgOEgxOGEyIDIgMCAwIDEgMiAydjQuMzMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE0aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjIgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOEg2YTIgMiAwIDAgMC0yIDJ2OGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAxLjQxNC0uNTg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTN2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjY3IDRIMTJ2Mi4zMyIgfV0KICAgIF07CiAgICB2YXIgQm90ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOFY0SDgiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxMiIsIHg6ICI0IiwgeTogIjgiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE0aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTN2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEzdjIiIH1dCiAgICBdOwogICAgdmFyIEJvdHRsZVdpbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMCAzYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhNiA2IDAgMCAwIDEuMiAzLjZsLjYuOEE2IDYgMCAwIDEgMTcgMTN2OGExIDEgMCAwIDEtMSAxSDhhMSAxIDAgMCAxLTEtMXYtOGE2IDYgMCAwIDEgMS4yLTMuNmwuNi0uOEE2IDYgMCAwIDAgMTAgNXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTNoLTRhMSAxIDAgMCAwLTEgMXYzYTEgMSAwIDAgMCAxIDFoNCIgfV0KICAgIF07CiAgICB2YXIgQm93QXJyb3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC41NzUgMTEuMDgyYTEzIDEzIDAgMCAxIDEuMDQ4IDkuMDI3IDEuMTcgMS4xNyAwIDAgMS0xLjkxNC41OTdMMTQgMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMCAzLjI5IDYuMjlhMS4xNyAxLjE3IDAgMCAxIC42LTEuOTEgMTMgMTMgMCAwIDEgOS4wMyAxLjA1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMTRhMS43IDEuNyAwIDAgMC0xLjIwNy41bC0yLjY0NiAyLjY0NkEuNS41IDAgMCAwIDMuNSAxOEg1YTEgMSAwIDAgMSAxIDF2MS41YS41LjUgMCAwIDAgLjg1NC4zNTRMOS41IDE4LjIwN0ExLjcgMS43IDAgMCAwIDEwIDE3di0yYTEgMSAwIDAgMC0xLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNzA3IDE0LjI5MyAyMSAzIiB9XQogICAgXTsKICAgIHZhciBCb3ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSA4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMy4zIDcgOC43IDUgOC43LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJWMTIiIH1dCiAgICBdOwogICAgdmFyIEJveGVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi45NyAxMi45MkEyIDIgMCAwIDAgMiAxNC42M3YzLjI0YTIgMiAwIDAgMCAuOTcgMS43MWwzIDEuOGEyIDIgMCAwIDAgMi4wNiAwTDEyIDE5di01LjVsLTUtMy00LjAzIDIuNDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTYuNS00Ljc0LTIuODUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxNi41IDUtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE2LjV2NS4xNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiAxMy41VjE5bDMuOTcgMi4zOGEyIDIgMCAwIDAgMi4wNiAwbDMtMS44YTIgMiAwIDAgMCAuOTctMS43MXYtMy4yNGEyIDIgMCAwIDAtLjk3LTEuNzFMMTcgMTAuNWwtNSAzWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxNi41LTUtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxNi41IDQuNzQtMi44NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNi41djUuMTciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy45NyA0LjQyQTIgMiAwIDAgMCA3IDYuMTN2NC4zN2w1IDMgNS0zVjYuMTNhMiAyIDAgMCAwLS45Ny0xLjcxbC0zLTEuOGEyIDIgMCAwIDAtMi4wNiAwbC0zIDEuOFoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOCA3LjI2IDUuMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgOCA0Ljc0LTIuODUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTMuNVY4IiB9XQogICAgXTsKICAgIHZhciBCcmFjZXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDNIN2EyIDIgMCAwIDAtMiAydjVhMiAyIDAgMCAxLTIgMiAyIDIgMCAwIDEgMiAydjVjMCAxLjEuOSAyIDIgMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDIxaDFhMiAyIDAgMCAwIDItMnYtNWMwLTEuMS45LTIgMi0yYTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDAtMi0yaC0xIiB9XQogICAgXTsKICAgIHZhciBCcmFja2V0cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoM2ExIDEgMCAwIDEgMSAxdjE2YTEgMSAwIDAgMS0xIDFoLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMUg1YTEgMSAwIDAgMS0xLTFWNGExIDEgMCAwIDEgMS0xaDMiIH1dCiAgICBdOwogICAgdmFyIEJyYWluQ2lyY3VpdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTIgNWEzIDMgMCAxIDAtNS45OTcuMTI1IDQgNCAwIDAgMC0yLjUyNiA1Ljc3IDQgNCAwIDAgMCAuNTU2IDYuNTg4QTQgNCAwIDEgMCAxMiAxOFoiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTNhNC41IDQuNSAwIDAgMCAzLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4wMDMgNS4xMjVBMyAzIDAgMCAwIDYuNDAxIDYuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjQ3NyAxMC44OTZhNCA0IDAgMCAxIC41ODUtLjM5NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4YTQgNCAwIDAgMS0xLjk2Ny0uNTE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThoNmEyIDIgMCAwIDEgMiAydjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhWNWEyIDIgMCAwIDEgMi0yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjEzIiwgcjogIi41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjMiLCByOiAiLjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiMjEiLCByOiAiLjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiOCIsIHI6ICIuNSIgfV0KICAgIF07CiAgICB2YXIgQnJhaW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEzYTQuMTcgNC4xNyAwIDAgMS0zLTQgNC4xNyA0LjE3IDAgMCAxLTMgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41OTggNi41QTMgMyAwIDEgMCAxMiA1YTMgMyAwIDEgMC01LjU5OCAxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOTk3IDUuMTI1YTQgNCAwIDAgMSAyLjUyNiA1Ljc3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE4YTQgNCAwIDAgMCAyLTcuNDY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5Ljk2NyAxNy40ODNBNCA0IDAgMSAxIDEyIDE4YTQgNCAwIDEgMS03Ljk2Ny0uNTE3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMThhNCA0IDAgMCAxLTItNy40NjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4wMDMgNS4xMjVhNCA0IDAgMCAwLTIuNTI2IDUuNzciIH1dCiAgICBdOwogICAgdmFyIEJyaWNrV2FsbEZpcmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzdjIuMTA3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3IDljMSAzIDIuNSAzLjUgMy41IDQuNUE1IDUgMCAwIDEgMjIgMTdhNSA1IDAgMCAxLTEwIDBjMC0uMyAwLS42LjEtLjlhMiAyIDAgMSAwIDMuMy0yQzEzIDExLjUgMTYgOSAxNyA5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDguMjc0VjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgzLjkzOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDUuMjUzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWg4LjIyOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE1djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzdjYiIH1dCiAgICBdOwogICAgdmFyIEJyYWluQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAuODUyIDE0Ljc3Mi0uMzgzLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMC44NTIgOS4yMjgtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjE0OCAxNC43NzIuMzgyLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy41MzEgOC4zMDUtLjM4My45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNzcyIDEwLjg1Mi45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC43NzIgMTMuMTQ4LjkyMy4zODMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuNTk4IDYuNUEzIDMgMCAxIDAgMTIgNWEzIDMgMCAwIDAtNS42My0xLjQ0NiAzIDMgMCAwIDAtLjM2OCAxLjU3MSA0IDQgMCAwIDAtMi41MjUgNS43NzEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOTk4IDUuMTI1YTQgNCAwIDAgMSAyLjUyNSA1Ljc3MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS41MDUgMTAuMjk0YTQgNCAwIDAgMS0xLjUgNy43MDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00LjAzMiAxNy40ODNBNCA0IDAgMCAwIDExLjQ2NCAyMGMuMTgtLjMxMS44OTItLjMxMSAxLjA3MiAwYTQgNCAwIDAgMCA3LjQzMi0yLjUxNiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC41IDEwLjI5MUE0IDQgMCAwIDAgNiAxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjAwMiA1LjEyNWEzIDMgMCAwIDAgLjQgMS4zNzUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4yMjggMTAuODUyLS45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjIyOCAxMy4xNDgtLjkyMy4zODMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgQnJpY2tXYWxsU2hpZWxkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXYxLjI1OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzdjUuNDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOS4xMThWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDUuNzUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgMTcuNWMwIDIuNDk5LTEuNzUgMy43NDktMy44MyA0LjQ3NGEuNS41IDAgMCAxLS4zMzUtLjAwNWMtMi4wODUtLjcyLTMuODM1LTEuOTctMy44MzUtNC40N1YxNGEuNS41IDAgMCAxIC41LS40OTljMSAwIDIuMjUtLjYgMy4xMi0xLjM2YS42LjYgMCAwIDEgLjc2LS4wMDFjLjg3NS43NjUgMi4xMiAxLjM2IDMuMTIgMS4zNmEuNS41IDAgMCAxIC41LjV6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDloMTIuMTQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTV2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDN2NiIgfV0KICAgIF07CiAgICB2YXIgQnJpY2tXYWxsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE1djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgM3Y2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTV2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDN2NiIgfV0KICAgIF07CiAgICB2YXIgQnJpZWZjYXNlQnVzaW5lc3MgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNlY0YTIgMiAwIDAgMC0yLTJoLTRhMiAyIDAgMCAwLTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEzYTE4LjE1IDE4LjE1IDAgMCAxLTIwIDAiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjYiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIEJyaWVmY2FzZUNvbnZleW9yQmVsdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDIwSDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTZWNGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYxMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjQiLCB5OiAiNiIsIHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxMCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQnJpZWZjYXNlTWVkaWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDExdjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTNoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNlY0YTIgMiAwIDAgMC0yLTJoLTRhMiAyIDAgMCAwLTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDZ2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA2djE0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBCcmllZmNhc2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMFY0YTIgMiAwIDAgMC0yLTJoLTRhMiAyIDAgMCAwLTIgMnYxNiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQnJ1c2hDbGVhbmluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIyLTEtNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOSAxNGExIDEgMCAwIDAgMS0xdi0xYTIgMiAwIDAgMC0yLTJoLTNhMSAxIDAgMCAxLTEtMVY0YTIgMiAwIDAgMC00IDB2NWExIDEgMCAwIDEtMSAxSDZhMiAyIDAgMCAwLTIgMnYxYTEgMSAwIDAgMCAxIDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTRINWwtMS45NzMgNi43NjdBMSAxIDAgMCAwIDQgMjJoMTZhMSAxIDAgMCAwIC45NzMtMS4yMzN6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMjIgMS00IiB9XQogICAgXTsKICAgIHZhciBCcmluZ1RvRnJvbnQgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiOCIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjgiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjBhMiAyIDAgMCAwIDIgMmg0YTIgMiAwIDAgMCAyLTJ2LTRhMiAyIDAgMCAwLTItMiIgfV0KICAgIF07CiAgICB2YXIgQnJ1c2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSAxMCAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi41IDIxQTMuNSAzLjUgMCAxIDAgMyAxNy41YTIuNjIgMi42MiAwIDAgMS0uNzA4IDEuNzkyQTEgMSAwIDAgMCAzIDIxeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05Ljk2OSAxNy4wMzEgMjEuMzc4IDUuNjI0YTEgMSAwIDAgMC0zLjAwMi0zLjAwMkw2Ljk2NyAxNC4wMzEiIH1dCiAgICBdOwogICAgdmFyIEJ1YmJsZXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjAwMSAxNS4wODVBMS41IDEuNSAwIDAgMSA5IDE2LjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOC41IiwgY3k6ICI4LjUiLCByOiAiMy41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNy41IiwgY3k6ICIxNi41IiwgcjogIjUuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjcuNSIsIGN5OiAiNC41IiwgcjogIjIuNSIgfV0KICAgIF07CiAgICB2YXIgQnVnT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2LTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuMTIgMy44OCAxNiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDcuMTNWNmEzIDMgMCAwIDAtNS4xNC0yLjFMOCAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEyLjM0VjExYTQgNCAwIDAgMC00LTRoLTEuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNWE0IDQgMCAwIDEtMy41NSAzLjk3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEzaC0zLjM0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjFhNCA0IDAgMCAxIDMuODEtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEzSDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy43IDcuN0E0IDQgMCAwIDAgNiAxMXYzYTYgNiAwIDAgMCAxMS4xMyAzLjEzIiB9XQogICAgXTsKICAgIHZhciBCdWdQbGF5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTkuNjU1QTYgNiAwIDAgMSA2IDE0di0zYTQgNCAwIDAgMSA0LTRoNGE0IDQgMCAwIDEgNCAzLjk3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDE1LjAwM2ExIDEgMCAwIDEgMS41MTctLjg1OWw0Ljk5NyAyLjk5N2ExIDEgMCAwIDEgMCAxLjcxOGwtNC45OTcgMi45OTdhMSAxIDAgMCAxLTEuNTE3LS44NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuMTIgMy44OCAxNiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVhNCA0IDAgMCAxLTMuNTUgMy45NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIxYTQgNCAwIDAgMSAzLjgxLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1YTQgNCAwIDAgMCAzLjU1IDMuOTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxM0gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMiAxLjg4IDEuODgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA3LjEzVjZhMyAzIDAgMSAxIDYgMHYxLjEzIiB9XQogICAgXTsKICAgIHZhciBCdWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYtOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA3YTQgNCAwIDAgMSA0IDR2M2E2IDYgMCAwIDEtMTIgMHYtM2E0IDQgMCAwIDEgNC00eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4xMiAzLjg4IDE2IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMjFhNCA0IDAgMCAwLTMuODEtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1YTQgNCAwIDAgMS0zLjU1IDMuOTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTNoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMWE0IDQgMCAwIDEgMy44MS00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWE0IDQgMCAwIDAgMy41NSAzLjk3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTNIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDIgMS44OCAxLjg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNy4xM1Y2YTMgMyAwIDEgMSA2IDB2MS4xMyIgfV0KICAgIF07CiAgICB2YXIgQnVpbGRpbmcyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjF2LTNhMiAyIDAgMCAwLTQgMHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTBINGEyIDIgMCAwIDAtMiAydjdhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0yVjlhMiAyIDAgMCAwLTItMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIxVjVhMiAyIDAgMCAxIDItMmg4YTIgMiAwIDAgMSAyIDJ2MTYiIH1dCiAgICBdOwogICAgdmFyIEJ1aWxkaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMnYtM2ExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXYzIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNCIsIHk6ICIyIiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjIwIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBCdXNGcm9udCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNiAyIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDctMi0xIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMTYiLCB4OiAiNCIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTFoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTl2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMXYtMiIgfV0KICAgIF07CiAgICB2YXIgQnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMTkuNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCAxOGgzcy41LTEuNy44LTIuOGMuMS0uNC4yLS44LjItMS4yIDAtLjQtLjEtLjgtLjItMS4ybC0xLjQtNUMyMC4xIDYuOCAxOS4xIDYgMTggNkg0YTIgMiAwIDAgMC0yIDJ2MTBoMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjE4IiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOGg1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE4IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIENhYmxlQ2FyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgM2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiA5IDIwLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJWNi41IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMTAiLCB4OiAiNCIsIHk6ICIxMiIsIHJ4OiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEydjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE3aDE2IiB9XQogICAgXTsKICAgIHZhciBDYWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE5YTEgMSAwIDAgMS0xLTF2LTJhMiAyIDAgMCAxIDItMmgyYTIgMiAwIDAgMSAyIDJ2MmExIDEgMCAwIDEtMSAxeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMXYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNFY2LjVhMSAxIDAgMCAwLTcgMHYxMWExIDEgMCAwIDEtNyAwVjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDIxdi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBhMiAyIDAgMCAxLTItMlY2YTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMSAxdjJhMiAyIDAgMCAxLTIgMnoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA1VjMiIH1dCiAgICBdOwogICAgdmFyIENha2VTbGljZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEzSDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTdIMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm03LjIgNy45LTMuMzg4IDIuNUEyIDIgMCAwIDAgMyAxMi4wMVYyMGExIDEgMCAwIDAgMSAxaDE2YTEgMSAwIDAgMCAxLTF2LTguNjU0YzAtMi0yLjQ0LTYuMDI2LTYuNDQtOC4wMjZhMSAxIDAgMCAwLTEuMDgyLjA1N0wxMC40IDUuNiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjciLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQ2FrZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIxdi04YTIgMiAwIDAgMC0yLTJINmEyIDIgMCAwIDAtMiAydjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNnMuNS0xIDItMSAyLjUgMiA0IDIgMi41LTIgNC0yIDIuNSAyIDQgMiAyLTEgMi0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA4djMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDh2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDRoLjAxIiB9XQogICAgXTsKICAgIHZhciBDYWxjdWxhdG9yID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIyMCIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiMTYiLCB5MTogIjYiLCB5MjogIjYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTYiLCB4MjogIjE2IiwgeTE6ICIxNCIsIHkyOiAiMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMThoLjAxIiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhcjEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxNGgxdjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjQiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyQXJyb3dEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTggNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTR2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMS4zNTRWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDcuMzQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyQXJyb3dVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIydi04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDExLjM0M1Y2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhckNoZWNrMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNFY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIwIDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE2IDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyQ2xvY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNHYyLjJsMS42IDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDcuNVY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxNiIsIHI6ICI2IiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhckNvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjIyOCAxNi44NTItLjkyMy0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjIyOCAxOS4xNDgtLjkyMy4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2LjQ3IDE0LjMwNS4zODIuOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAyMC43NzItLjM4My45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMTQ4IDE1LjIyOC4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS41MyAyMS42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiAxNi44NTIuOTI0LS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDE5LjE0OC45MjQuMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEwLjU5MlY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyRGF5cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE4aC4wMSIgfV0KICAgIF07CiAgICB2YXIgQ2FsZW5kYXJGb2xkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAyMGEyIDIgMCAwIDAgMiAyaDEwYTIuNCAyLjQgMCAwIDAgMS43MDYtLjcwNmwzLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDIxIDE2VjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDIydi01YTEgMSAwIDAgMSAxLTFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0KICAgIF07CiAgICB2YXIgQ2FsZW5kYXJIZWFydCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjEyNyAyMkg1YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2NS4xMjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQuNjIgMTguOEEyLjI1IDIuMjUgMCAxIDEgMTggMTUuODM2YTIuMjUgMi4yNSAwIDEgMSAzLjM4IDIuOTY2bC0yLjYyNiAyLjg1NmEuOTk4Ljk5OCAwIDAgMS0xLjUwNyAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0KICAgIF07CiAgICB2YXIgQ2FsZW5kYXJNaW51czIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNmg0IiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhck1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTVWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDguNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhck9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuMiA0LjJBMiAyIDAgMCAwIDMgNnYxNGEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAxLjgyLTEuMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTUuNVY2YTIgMiAwIDAgMC0yLTJIOS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTBoLTUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyUGx1czIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djQiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyUGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE5aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTIuNTk4VjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg4LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0KICAgIF07CiAgICB2YXIgQ2FsZW5kYXJSYW5nZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE0aC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE4SDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMThoLjAxIiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhclNlYXJjaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMS43NVY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNy4yNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAyMi0xLjg3NS0xLjg3NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyU3luYyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEwdjRoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSAxNCAxLjUzNS0xLjYwNWE1IDUgMCAwIDEgOCAxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE4LTEuNTM1IDEuNjA1YTUgNSAwIDAgMS04LTEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAyMnYtNGgtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA4LjVWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDQuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dCiAgICBdOwogICAgdmFyIENhbGVuZGFyWDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTNWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMiA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTcgNSA1IiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhclggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMTQgNCA0IiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XQogICAgXTsKICAgIHZhciBDYWxlbmRhcnMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUuNzI2IDIxLjAxQTIgMiAwIDAgMSAxNCAyMkg0YTIgMiAwIDAgMS0yLTJWMTBhMiAyIDAgMCAxIDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxM2gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOGgxNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiMyIsIHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgQ2FtZXJhT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuNTY0IDE0LjU1OGEzIDMgMCAxIDEtNC4xMjItNC4xMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIwSDRhMiAyIDAgMCAxLTItMlY5YTIgMiAwIDAgMSAyLTJoMS45OTdhMiAyIDAgMCAwIC44MTktLjE3NSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjY5NSA0LjAyNEEyIDIgMCAwIDEgMTAuMDA0IDRoMy45OTNhMiAyIDAgMCAxIDEuNzYgMS4wNWwuNDg2LjlBMiAyIDAgMCAwIDE4LjAwMyA3SDIwYTIgMiAwIDAgMSAyIDJ2Ny4zNDQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIENhbWVyYSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjk5NyA0YTIgMiAwIDAgMSAxLjc2IDEuMDVsLjQ4Ni45QTIgMiAwIDAgMCAxOC4wMDMgN0gyMGEyIDIgMCAwIDEgMiAydjlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWOWEyIDIgMCAwIDEgMi0yaDEuOTk3YTIgMiAwIDAgMCAxLjc1OS0xLjA0OGwuNDg5LS45MDRBMiAyIDAgMCAxIDEwLjAwNCA0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMyIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBDYW5keUNhbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTUuNyAyMWEyIDIgMCAwIDEtMy41LTJsOC42LTE0YTYgNiAwIDAgMSAxMC40IDYgMiAyIDAgMSAxLTMuNDY0LTIgMiAyIDAgMSAwLTMuNDY0LTJaIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy43NSA3IDE1IDIuMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC45IDQuOCAxMyA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuOSA5LjcgMiA0LjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC45IDE0LjcgNyAxOC45IiB9XQogICAgXTsKICAgIHZhciBDYW5keU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwdjcuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS44MDIgNi4xNDVhNSA1IDAgMCAxIDYuMDUzIDYuMDUzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDYuMXYyLjI0MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS41IDE1LjU3MS0uOTY0Ljk2NGE1IDUgMCAwIDEtNy4wNzEgMCA1IDUgMCAwIDEgMC03LjA3bC45NjQtLjk2NSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiA3VjNhMSAxIDAgMCAxIDEuNzA3LS43MDcgMi41IDIuNSAwIDAgMCAyLjE1Mi43MTcgMSAxIDAgMCAxIDEuMTMxIDEuMTMxIDIuNSAyLjUgMCAwIDAgLjcxNyAyLjE1MkExIDEgMCAwIDEgMjEgOGgtNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOCAxN3Y0YTEgMSAwIDAgMS0xLjcwNy43MDcgMi41IDIuNSAwIDAgMC0yLjE1Mi0uNzE3IDEgMSAwIDAgMS0xLjEzMS0xLjEzMSAyLjUgMi41IDAgMCAwLS43MTctMi4xNTJBMSAxIDAgMCAxIDMgMTZoNCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQ2FuZHkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA3djEwLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNi4xVjE3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2IDdWM2ExIDEgMCAwIDEgMS43MDctLjcwNyAyLjUgMi41IDAgMCAwIDIuMTUyLjcxNyAxIDEgMCAwIDEgMS4xMzEgMS4xMzEgMi41IDIuNSAwIDAgMCAuNzE3IDIuMTUyQTEgMSAwIDAgMSAyMSA4aC00IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjUzNiA3LjQ2NWE1IDUgMCAwIDAtNy4wNzIgMGwtMiAyYTUgNSAwIDAgMCAwIDcuMDcgNSA1IDAgMCAwIDcuMDcyIDBsMi0yYTUgNSAwIDAgMCAwLTcuMDciCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOCAxN3Y0YTEgMSAwIDAgMS0xLjcwNy43MDcgMi41IDIuNSAwIDAgMC0yLjE1Mi0uNzE3IDEgMSAwIDAgMS0xLjEzMS0xLjEzMSAyLjUgMi41IDAgMCAwLS43MTctMi4xNTJBMSAxIDAgMCAxIDMgMTZoNCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQ2FubmFiaXNPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMnYtNGMxLjUgMS41IDMuNSAzIDYgMyAwLTEuNS0uNS0zLjUtMi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjk4OCA4LjMyN0MxMy45MDIgNi4wNTQgMTMuMzY1IDMuODIgMTIgMmE5LjMgOS4zIDAgMCAwLTEuNDQ1IDIuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy4zNzUgMTEuNzI1QzE4Ljg4MiAxMC41MyAyMSA3Ljg0MSAyMSA2Yy0yLjMyNCAwLTUuMDggMS4yOTYtNi42NjIgMi42ODQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjAyNCAxNS4zNzhBMTUgMTUgMCAwIDAgMjIgMTVjLS40MjYtMS4yNzktMi42Ny0yLjU1Ny00LjI1LTIuOTA3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYuOTk1IDYuOTkyQzUuNzE0IDYuNCA0LjI5IDYgMyA2YzAgMiAyLjUgNSA0IDYtMS41IDAtNC41IDEuNS01IDMgMy41IDEuNSA2IDEgNiAxLTEuNSAxLjUtMiAzLjUtMiA1IDIuNSAwIDQuNS0xLjUgNi0zIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBDYW5uYWJpcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi00IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMTJjLTEuNSAwLTQuNSAxLjUtNSAzIDMuNSAxLjUgNiAxIDYgMS0xLjUgMS41LTIgMy41LTIgNSAyLjUgMCA0LjUtMS41IDYtMyAxLjUgMS41IDMuNSAzIDYgMyAwLTEuNS0uNS0zLjUtMi01IDAgMCAyLjUuNSA2LTEtLjUtMS41LTMuNS0zLTUtMyAxLjUtMSA0LTQgNC02LTIuNSAwLTUuNSAxLjUtNyAzIDAtMi41LS41LTUtMi03LTEuNSAyLTIgNC41LTIgNy0xLjUtMS41LTQuNS0zLTctMyAwIDIgMi41IDUgNCA2IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBDYXB0aW9uc09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUgNUgxOWEyIDIgMCAwIDEgMiAydjguNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMWgtLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTlINWEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAxIDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVoMi41IiB9XQogICAgXTsKICAgIHZhciBDYXB0aW9ucyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTQiLCB4OiAiMyIsIHk6ICI1Iiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVoNE0xNSAxNWgyTTcgMTFoMk0xMyAxMWg0IiB9XQogICAgXTsKICAgIHZhciBDYXJGcm9udCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDgtMiAyLTEuNS0zLjdBMiAyIDAgMCAwIDE1LjY0NiA1SDguNGEyIDIgMCAwIDAtMS45MDMgMS4yNTdMNSAxMCAzIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiOCIsIHg6ICIzIiwgeTogIjEwIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTh2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxOHYyIiB9XQogICAgXTsKICAgIHZhciBDYXJUYXhpRnJvbnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgOC0yIDItMS41LTMuN0EyIDIgMCAwIDAgMTUuNjQ2IDVIOC40YTIgMiAwIDAgMC0xLjkwMyAxLjI1N0w1IDEwIDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNGguMDEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICI4IiwgeDogIjMiLCB5OiAiMTAiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE4djIiIH1dCiAgICBdOwogICAgdmFyIENhciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5IDE3aDJjLjYgMCAxLS40IDEtMXYtM2MwLS45LS43LTEuNy0xLjUtMS45QzE4LjcgMTAuNiAxNiAxMCAxNiAxMHMtMS4zLTEuNC0yLjItMi4zYy0uNS0uNC0xLjEtLjctMS44LS43SDVjLS42IDAtMS4xLjQtMS40LjlsLTEuNCAyLjlBMy43IDMuNyAwIDAgMCAyIDEydjRjMCAuNi40IDEgMSAxaDIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3IiwgY3k6ICIxNyIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdoNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxNyIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBDYXJhdmFuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTlWOWE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHY4YTIgMiAwIDAgMCAyIDJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloM2ExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE3djFhMSAxIDAgMCAxLTEgMUgxMHYtOWExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXY5IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMTkiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgQ2FyZFNpbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQuMTcyIDJhMiAyIDAgMCAxIDEuNDE0LjU4NmwzLjgyOCAzLjgyOEEyIDIgMCAwIDEgMjAgNy44MjhWMjBhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0aDgiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI4IiwgeTogIjEwIiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQ2Fycm90ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi4yNyAyMS43czkuODctMy41IDEyLjczLTYuMzZhNC41IDQuNSAwIDAgMC02LjM2LTYuMzdDNS43NyAxMS44NCAyLjI3IDIxLjcgMi4yNyAyMS43ek04LjY0IDE0bC0yLjA1LTIuMDRNMTUuMzQgMTVsLTIuNDYtMi40NiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA5cy0xLjMzLTItMy41LTJDMTYuODYgNyAxNSA5IDE1IDlzMS4zMyAyIDMuNSAyUzIyIDkgMjIgOXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMnMtMiAxLjMzLTIgMy41UzE1IDkgMTUgOXMyLTEuODQgMi0zLjVDMTcgMy4zMyAxNSAyIDE1IDJ6IiB9XQogICAgXTsKICAgIHZhciBDYXNlTG93ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5djciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNnYxMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3LjUiLCBjeTogIjEyLjUiLCByOiAiMy41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNi41IiwgY3k6ICIxMi41IiwgcjogIjMuNSIgfV0KICAgIF07CiAgICB2YXIgQ2FzZVNlbnNpdGl2ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMTYgNC4wMzktOS42OWEuNS41IDAgMCAxIC45MjMgMEwxMSAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA5djciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zMDQgMTNoNi4zOTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOC41IiwgY3k6ICIxMi41IiwgcjogIjMuNSIgfV0KICAgIF07CiAgICB2YXIgQ2FzZVVwcGVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xNSAxMWg0LjVhMSAxIDAgMCAxIDAgNWgtNGEuNS41IDAgMCAxLS41LS41di05YS41LjUgMCAwIDEgLjUtLjVoM2ExIDEgMCAwIDEgMCA1IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE2IDQuMDM5LTkuNjlhLjUuNSAwIDAgMSAuOTIzIDBMMTEgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zMDQgMTNoNi4zOTIiIH1dCiAgICBdOwogICAgdmFyIENhc3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDhWNmEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMmgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyYTkgOSAwIDAgMSA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNmE1IDUgMCAwIDEgNCA0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIiLCB4MjogIjIuMDEiLCB5MTogIjIwIiwgeTI6ICIyMCIgfV0KICAgIF07CiAgICB2YXIgQ2Fzc2V0dGVUYXBlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4IiwgY3k6ICIxMCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxMCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMjAgLjctMi45QTEuNCAxLjQgMCAwIDEgOC4xIDE2aDcuOGExLjQgMS40IDAgMCAxIDEuNCAxbC43IDMiIH1dCiAgICBdOwogICAgdmFyIENhdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDVjLjY3IDAgMS4zNS4wOSAyIC4yNiAxLjc4LTIgNS4wMy0yLjg0IDYuNDItMi4yNiAxLjQuNTgtLjQyIDctLjQyIDcgLjU3IDEuMDcgMSAyLjI0IDEgMy40NEMyMSAxNy45IDE2Ljk3IDIxIDEyIDIxcy05LTMtOS03LjU2YzAtMS4yNS41LTIuNCAxLTMuNDQgMCAwLTEuODktNi40Mi0uNS03IDEuMzktLjU4IDQuNzIuMjMgNi41IDIuMjNBOS4wNCA5LjA0IDAgMCAxIDEyIDVaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuMjUgMTYuMjVoMS41TDEyIDE3bC0uNzUtLjc1WiIgfV0KICAgIF07CiAgICB2YXIgQ2FzdGxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDVWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMXYtM2EzIDMgMCAwIDAtNiAwdjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggM3Y4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDVINiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMUgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDl2MTBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDN2OCIgfV0KICAgIF07CiAgICB2YXIgQ2N0diA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTYuNzUgMTJoMy42MzJhMSAxIDAgMCAxIC44OTQgMS40NDdsLTIuMDM0IDQuMDY5YTEgMSAwIDAgMS0xLjcwOC4xMzRsLTIuMTI0LTIuOTciIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjEwNiA5LjA1M2ExIDEgMCAwIDEgLjQ0NyAxLjM0MWwtMy4xMDYgNi4yMTFhMSAxIDAgMCAxLTEuMzQyLjQ0N0wzLjYxIDEyLjNhMi45MiAyLjkyIDAgMCAxLTEuMy0zLjkxTDMuNjkgNS42YTIuOTIgMi45MiAwIDAgMSAzLjkyLTEuM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOWgzLjc2YTIgMiAwIDAgMCAxLjgtMS4xTDkgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMXYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDloLjAxIiB9XQogICAgXTsKICAgIHZhciBDaGFydEFyZWEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03IDExLjIwN2EuNS41IDAgMCAxIC4xNDYtLjM1M2wyLTJhLjUuNSAwIDAgMSAuNzA4IDBsMy4yOTIgMy4yOTJhLjUuNSAwIDAgMCAuNzA4IDBsNC4yOTItNC4yOTJhLjUuNSAwIDAgMSAuODU0LjM1M1YxNmExIDEgMCAwIDEtMSAxSDhhMSAxIDAgMCAxLTEtMXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIENoYXJ0QmFyQmlnID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI3IiwgeTogIjEzIiwgd2lkdGg6ICI5IiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjciLCB5OiAiNSIsIHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICI0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBDaGFydEJhckRlY3JlYXNpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDExaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNmgxMiIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRCYXJJbmNyZWFzaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTZoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA2aDMiIH1dCiAgICBdOwogICAgdmFyIENoYXJ0QmFyU3RhY2tlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEzdjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICIxMyIsIHdpZHRoOiAiOSIsIGhlaWdodDogIjQiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI3IiwgeTogIjUiLCB3aWR0aDogIjEyIiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRDYW5kbGVzdGljayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNXY0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjQiLCBoZWlnaHQ6ICI2IiwgeDogIjciLCB5OiAiOSIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM3YyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjQiLCBoZWlnaHQ6ICI4IiwgeDogIjE1IiwgeTogIjUiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTN2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRDb2x1bW5CaWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE1IiwgeTogIjUiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICIxMiIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjciLCB5OiAiOCIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjkiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIENoYXJ0QmFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTFoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA2aDMiIH1dCiAgICBdOwogICAgdmFyIENoYXJ0Q29sdW1uRGVjcmVhc2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE3VjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTd2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxN1Y1IiB9XQogICAgXTsKICAgIHZhciBDaGFydENvbHVtbkluY3JlYXNpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxN1Y5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE3VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxN3YtMyIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRDb2x1bW5TdGFja2VkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTNINyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA5aC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiNSIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjEyIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICI4Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiOSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRDb2x1bW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxN1Y5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE3VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxN3YtMyIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRMaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgOS01IDUtNC00LTMgMyIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRHYW50dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDZoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTFoNyIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnROZXR3b3JrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuMTEgNy42NjQgMS43OCAyLjY3MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4xNjIgMTIuNzg4LTMuMzI0IDEuNDI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDQtNi4wNiAxLjUxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI2IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjE1IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIENoYXJ0Tm9BeGVzQ29sdW1uRGVjcmVhc2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDIxdi02IiB9XQogICAgXTsKICAgIHZhciBDaGFydE5vQXhlc0NvbHVtbkluY3JlYXNpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxdi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxVjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjFWMyIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnROb0F4ZXNDb2x1bW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxdi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxVjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjFWOSIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnROb0F4ZXNHYW50dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNWgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE5aDgiIH1dCiAgICBdOwogICAgdmFyIENoYXJ0Tm9BeGVzQ29tYmluZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNnY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0djciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTB2MTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMy04LjY0NiA4LjY0NmEuNS41IDAgMCAxLS43MDggMEw5LjM1NCA4LjM1NGEuNS41IDAgMCAwLS43MDcgMEwyIDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTh2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0djciIH1dCiAgICBdOwogICAgdmFyIENoYXJ0UGllID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMTJjLjU1MiAwIDEuMDA1LS40NDkuOTUtLjk5OGExMCAxMCAwIDAgMC04Ljk1My04Ljk1MWMtLjU1LS4wNTUtLjk5OC4zOTgtLjk5OC45NXY4YTEgMSAwIDAgMCAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjIxIDE1Ljg5QTEwIDEwIDAgMSAxIDggMi44MyIgfV0KICAgIF07CiAgICB2YXIgQ2hhcnRTY2F0dGVyID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjcuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOC41IiwgY3k6ICI1LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEuNSIsIGN5OiAiMTEuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjE2LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTcuNSIsIGN5OiAiMTQuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dCiAgICBdOwogICAgdmFyIENoYXJ0U3BsaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmMuNS0yIDEuNS03IDQtNyAyIDAgMiAzIDQgMyAyLjUgMCA0LjUtNSA1LTciIH1dCiAgICBdOwogICAgdmFyIENoZWNrQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2IDcgMTdsLTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxMC03LjUgNy41TDEzIDE2IiB9XQogICAgXTsKICAgIHZhciBDaGVjayA9IFtbInBhdGgiLCB7IGQ6ICJNMjAgNiA5IDE3bC01LTUiIH1dXTsKICAgIHZhciBDaGVja0xpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA0TDkgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTlMMyAxOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1TDQgMTAiIH1dCiAgICBdOwogICAgdmFyIENoZWZIYXQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAyMWExIDEgMCAwIDAgMS0xdi01LjM1YzAtLjQ1Ny4zMTYtLjg0NC43MjctMS4wNDFhNCA0IDAgMCAwLTIuMTM0LTcuNTg5IDUgNSAwIDAgMC05LjE4NiAwIDQgNCAwIDAgMC0yLjEzNCA3LjU4OGMuNDExLjE5OC43MjcuNTg1LjcyNyAxLjA0MVYyMGExIDEgMCAwIDAgMSAxWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE3aDEyIiB9XQogICAgXTsKICAgIHZhciBDaGVycnkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE3YTUgNSAwIDAgMCAxMCAwYzAtMi43Ni0yLjUtNS01LTMtMi41LTItNSAuMjQtNSAzWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN2E1IDUgMCAwIDAgMTAgMGMwLTIuNzYtMi41LTUtNS0zLTIuNS0yLTUgLjI0LTUgM1oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNGMzLjIyLTIuOTEgNC4yOS04Ljc1IDUtMTIgMS42NiAyLjM4IDQuOTQgOSA1IDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDljLTQuMjkgMC03LjE0LTIuMzMtMTAtNyA1LjcxIDAgMTAgNC42NyAxMCA3WiIgfV0KICAgIF07CiAgICB2YXIgQ2hlc3NCaXNob3AgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIwYTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFINmExIDEgMCAwIDEtMS0xeiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSAxOGMxLjUtLjYxNSAzLTIuNDYxIDMtNC45MjNDMTggOC43NjkgMTQuNSA0LjQ2MiAxMiAyIDkuNSA0LjQ2MiA2IDguNzcgNiAxMy4wNzcgNiAxNS41MzkgNy41IDE3LjM4NSA5IDE4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDctMi41IDIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDJoNiIgfV0KICAgIF07CiAgICB2YXIgQ2hlc3NLaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyMGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDVhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNi43IDE4LTEtMUM0LjM1IDE1LjY4MiAzIDE0LjA5IDMgMTJhNSA1IDAgMCAxIDQuOTUtNWMxLjU4NCAwIDIuNy40NTUgNC4wNSAxLjgxOEMxMy4zNSA3LjQ1NSAxNC40NjYgNyAxNi4wNSA3QTUgNSAwIDAgMSAyMSAxMmMwIDIuMDgyLTEuMzU5IDMuNjczLTIuNyA1bC0xIDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2Ni44MTgiIH1dCiAgICBdOwogICAgdmFyIENoZXNzS25pZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMGEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDZhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYuNSAxOGMxLTIgMi41LTUgMi41LTlhNyA3IDAgMCAwLTctN0g2LjYzNWExIDEgMCAwIDAtLjc2OCAxLjY0TDcgNWwtMi4zMiA1LjgwMmEyIDIgMCAwIDAgLjk1IDIuNTI2bDIuODcgMS40NTYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNSAxLjQyNS0xLjQyNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyA4IDEuNTMtMS41MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjcxMyAxMi4xODUgNyAxOCIgfV0KICAgIF07CiAgICB2YXIgQ2hlc3NQYXduID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMGEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDZhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSAxMCAxLjUgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEwaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTggMS41LTgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNiIsIHI6ICI0IiB9XQogICAgXTsKICAgIHZhciBDaGVzc1F1ZWVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyMGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDVhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuNDc0IDUuOTQzIDEuNTY3IDUuMzRhMSAxIDAgMCAwIDEuNzUuMzI4bDIuNjE2LTMuNDAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDktMyA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuNTk0IDguMjA5IDIuNjE1IDMuNDAzYTEgMSAwIDAgMCAxLjc1LS4zMjlsMS41NjctNS4zNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE4IDQgOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI0IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiNyIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiNyIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBDaGVzc1Jvb2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIwYTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFINmExIDEgMCAwIDEtMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE4LTEtOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDJ2NWEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNGgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDE4IDEtOSIgfV0KICAgIF07CiAgICB2YXIgQ2hldnJvbkRvd24gPSBbWyJwYXRoIiwgeyBkOiAibTYgOSA2IDYgNi02IiB9XV07CiAgICB2YXIgQ2hldnJvbkZpcnN0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTgtNi02IDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDZ2MTIiIH1dCiAgICBdOwogICAgdmFyIENoZXZyb25MYXN0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxOCA2LTYtNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDZ2MTIiIH1dCiAgICBdOwogICAgdmFyIENoZXZyb25MZWZ0ID0gW1sicGF0aCIsIHsgZDogIm0xNSAxOC02LTYgNi02IiB9XV07CiAgICB2YXIgQ2hldnJvblJpZ2h0ID0gW1sicGF0aCIsIHsgZDogIm05IDE4IDYtNi02LTYiIH1dXTsKICAgIHZhciBDaGV2cm9uc0Rvd25VcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMjAgNS01IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDQgNSA1IDUtNSIgfV0KICAgIF07CiAgICB2YXIgQ2hldnJvblVwID0gW1sicGF0aCIsIHsgZDogIm0xOCAxNS02LTYtNiA2IiB9XV07CiAgICB2YXIgQ2hldnJvbnNEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNyA2IDUgNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxMyA1IDUgNS01IiB9XQogICAgXTsKICAgIHZhciBDaGV2cm9uc0xlZnRSaWdodEVsbGlwc2lzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyA3IDUgNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyA3LTUgNSA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmguMDEiIH1dCiAgICBdOwogICAgdmFyIENoZXZyb25zTGVmdFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA3LTUgNSA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNyA1IDUtNSA1IiB9XQogICAgXTsKICAgIHZhciBDaGV2cm9uc0xlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSAxNy01LTUgNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDE3LTUtNSA1LTUiIH1dCiAgICBdOwogICAgdmFyIENoZXZyb25zUmlnaHRMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgMTctNS01IDUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDE3IDUtNS01LTUiIH1dCiAgICBdOwogICAgdmFyIENoZXZyb25zUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDE3IDUtNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgMTcgNS01LTUtNSIgfV0KICAgIF07CiAgICB2YXIgQ2hldnJvbnNVcERvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDE1IDUgNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyA5IDUtNSA1IDUiIH1dCiAgICBdOwogICAgdmFyIENoZXZyb25zVXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxMS01LTUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE4LTUtNS01IDUiIH1dCiAgICBdOwogICAgdmFyIENocm9taXVtID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuODggMjEuOTQgMTUuNDYgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEuMTcgOEgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjk1IDYuMDYgOC41NCAxNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XQogICAgXTsKICAgIHZhciBDaHVyY2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxdi0zYTIgMiAwIDAgMC00IDB2MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xOCA5IDMuNTIgMi4xNDdhMSAxIDAgMCAxIC40OC44NTRWMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJ2LTYuOTk5YTEgMSAwIDAgMSAuNDgtLjg1NEw2IDkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMVY3YTEgMSAwIDAgMSAuMzc2LS43ODJsNS0zLjk5OWExIDEgMCAwIDEgMS4yNDkuMDAxbDUgNEExIDEgMCAwIDEgMTggN3YxNCIgfV0KICAgIF07CiAgICB2YXIgQ2lnYXJldHRlT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJIM2ExIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAwIDEgMWgxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA4YzAtMi41LTItMi41LTItNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0uNS44NjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgOGMwLTIuNS0yLTIuNS0yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMnY0IiB9XQogICAgXTsKICAgIHZhciBDaWdhcmV0dGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMkgzYTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxaDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDhjMC0yLjUtMi0yLjUtMi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE2YTEgMSAwIDAgMCAxLTF2LTJhMSAxIDAgMCAwLTEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA4YzAtMi41LTItMi41LTItNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEydjQiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZUFsZXJ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI4IiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIuMDEiLCB5MTogIjE2IiwgeTI6ICIxNiIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQXJyb3dEb3duID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTIgNCA0IDQtNCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQXJyb3dMZWZ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgOC00IDQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEySDgiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZUFycm93T3V0RG93bkxlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyYTEwIDEwIDAgMSAxIDEwIDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMjIgMTAtMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMkgydi02IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVBcnJvd091dERvd25SaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIyYTEwIDEwIDAgMSAxIDEwLTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIyIDEyIDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE2djZoLTYiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZUFycm93T3V0VXBMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4VjJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMTAgMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMkExMCAxMCAwIDEgMSAyIDEyIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVBcnJvd091dFVwUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMkExMCAxMCAwIDEgMSAxMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIgMTIgMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMmg2djYiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZUFycm93UmlnaHQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNiA0LTQtNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQXJyb3dVcCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDEyLTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZWOCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQ2hlY2tCaWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS44MDEgMTBBMTAgMTAgMCAxIDEgMTcgMy4zMzUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMSAzIDNMMjIgNCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQ2hlY2sgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEyIDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZUNoZXZyb25MZWZ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTYtNC00IDQtNCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlQ2hldnJvbkRvd24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMC00IDQtNC00IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVDaGV2cm9uUmlnaHQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCA4IDQgNC00IDQiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZUNoZXZyb25VcCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTQgNC00IDQgNCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlRGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMSAyLjE4MmExMCAxMCAwIDAgMSAzLjggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy45IDIxLjgxOGExMCAxMCAwIDAgMS0zLjggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy42MDkgMy43MjFhMTAgMTAgMCAwIDEgMi42OSAyLjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi4xODIgMTMuOWExMCAxMCAwIDAgMSAwLTMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4yNzkgMTcuNjA5YTEwIDEwIDAgMCAxLTIuNyAyLjY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjgxOCAxMC4xYTEwIDEwIDAgMCAxIDAgMy44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuNzIxIDYuMzkxYTEwIDEwIDAgMCAxIDIuNy0yLjY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzkxIDIwLjI3OWExMCAxMCAwIDAgMS0yLjY5LTIuNyIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlRGl2aWRlID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiMTYiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjE2IiwgeTI6ICIxNiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjgiLCB5MjogIjgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZURvbGxhclNpZ24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4aC02YTIgMiAwIDEgMCAwIDRoNGEyIDIgMCAxIDEgMCA0SDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThWNiIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlRG90RGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMSAyLjE4YTkuOTMgOS45MyAwIDAgMSAzLjggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy42IDMuNzFhOS45NSA5Ljk1IDAgMCAxIDIuNjkgMi43IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjgyIDEwLjFhOS45MyA5LjkzIDAgMCAxIDAgMy44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjI5IDE3LjZhOS45NSA5Ljk1IDAgMCAxLTIuNyAyLjY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjkgMjEuODJhOS45NCA5Ljk0IDAgMCAxLTMuOCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNCAyMC4yOWE5Ljk1IDkuOTUgMCAwIDEtMi42OS0yLjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi4xOCAxMy45YTkuOTMgOS45MyAwIDAgMSAwLTMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjcxIDYuNGE5Ljk1IDkuOTUgMCAwIDEgMi43LTIuNjkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlRG90ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlRWxsaXBzaXMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoLjAxIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVFcXVhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNGgxMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlRmFkaW5nQXJyb3dVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJhMTAgMTAgMCAwIDEgNy4zOCAxNi43NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMi00LTQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2VjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi41IDguODc1YTEwIDEwIDAgMCAwLS41IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi44MyAxNmExMCAxMCAwIDAgMCAyLjQzIDMuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjYzNiA1LjIzNWExMCAxMCAwIDAgMSAuODkxLS44NTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC42NDQgMjEuNDJhMTAgMTAgMCAwIDAgNy42MzEtLjM4IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVGYWRpbmdQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmExMCAxMCAwIDAgMSA3LjM4IDE2Ljc1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuNSA4Ljg3NWExMCAxMCAwIDAgMC0uNSAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuODMgMTZhMTAgMTAgMCAwIDAgMi40MyAzLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC42MzYgNS4yMzVhMTAgMTAgMCAwIDEgLjg5MS0uODU3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNjQ0IDIxLjQyYTEwIDEwIDAgMCAwIDcuNjMxLS4zOCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlR2F1Z2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS42IDIuN2ExMCAxMCAwIDEgMCA1LjcgNS43IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNCAxMC42IDE5IDUiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZU1pbnVzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC4zNSAyLjY5QTEwIDEwIDAgMCAxIDIxLjMgMTUuNjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuMDggMTkuMDhBMTAgMTAgMCAxIDEgNC45MiA0LjkyIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVQYXJraW5nT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIuNjU2IDdIMTNhMyAzIDAgMCAxIDIuOTg0IDMuMzA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEzSDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuMDcxIDE5LjA3MUExIDEgMCAwIDEgNC45MyA0LjkzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjM1NyAyLjY4N2ExMCAxMCAwIDAgMSAxMi45NTYgMTIuOTU2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdWOSIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlUGFya2luZyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdWN2g0YTMgMyAwIDAgMSAwIDZIOSIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlUGF1c2UgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMCIsIHgyOiAiMTAiLCB5MTogIjE1IiwgeTI6ICI5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE0IiwgeDI6ICIxNCIsIHkxOiAiMTUiLCB5MjogIjkiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZVBlcmNlbnQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1aC4wMSIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlUGlsZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE5IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjEyIiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiMTkiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjQiLCBjeTogIjE5IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4IiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVQbGF5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSA5LjAwM2ExIDEgMCAwIDEgMS41MTctLjg1OWw0Ljk5NyAyLjk5N2ExIDEgMCAwIDEgMCAxLjcxOGwtNC45OTcgMi45OTdBMSAxIDAgMCAxIDkgMTQuOTk2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlUGx1cyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZVBvd2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuOTk4IDkuMDAzYTUgNSAwIDEgMCA4LS4wMDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZVBvdW5kU3RlcmxpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNlY5LjVhMSAxIDAgMCAxIDUgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmg3IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDaXJjbGVRdWVzdGlvbk1hcmsgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN2guMDEiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZVNsYXNoMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIgMiAyMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlU2xhc2ggPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICIxNSIsIHkxOiAiMTUiLCB5MjogIjkiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZVNtYWxsID0gW1siY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI2IiB9XV07CiAgICB2YXIgQ2lyY2xlU3RhciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjA1MSA3LjYxNmExIDEgMCAwIDEgMS45MDkuMDI0bC43MzcgMS40NTJhMSAxIDAgMCAwIC43MzcuNTM1bDEuNjM0LjI1NmExIDEgMCAwIDEgLjU4OCAxLjgwNmwtMS4xNzIgMS4xNjhhMSAxIDAgMCAwLS4yODIuODY2bC4yNTkgMS42MTNhMSAxIDAgMCAxLTEuNTQxIDEuMTM0bC0xLjQ2NS0uNzVhMSAxIDAgMCAwLS45MTIgMGwtMS40NjUuNzVhMSAxIDAgMCAxLTEuNTM5LTEuMTMzbC4yNTgtMS42MTNhMSAxIDAgMCAwLS4yODItLjg2N2wtMS4xNTYtMS4xNTJhMSAxIDAgMCAxIC41NzItMS44MjJsMS42MzMtLjI1NmExIDEgMCAwIDAgLjczNy0uNTM1eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlU3RvcCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiOSIsIHk6ICI5Iiwgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlVXNlclJvdW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjBhNiA2IDAgMCAwLTEyIDAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2lyY2xlVXNlciA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMC42NjJWMTlhMiAyIDAgMCAxIDItMmg2YTIgMiAwIDAgMSAyIDJ2MS42NjIiIH1dCiAgICBdOwogICAgdmFyIENpcmNsZVggPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDkgNiA2IiB9XQogICAgXTsKICAgIHZhciBDaXJjbGUgPSBbWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XV07CiAgICB2YXIgQ2lyY3VpdEJvYXJkID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgOWg0YTIgMiAwIDAgMCAyLTJWMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjkiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxdi00YTIgMiAwIDAgMSAyLTJoNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICIxNSIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBDaXRydXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTIxLjY2IDE3LjY3YTEuMDggMS4wOCAwIDAgMS0uMDQgMS42QTEyIDEyIDAgMCAxIDQuNzMgMi4zOGExLjEgMS4xIDAgMCAxIDEuNjEtLjA0eiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuNjUgMTUuNjZBOCA4IDAgMCAxIDguMzUgNC4zNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxMC01LjUgNS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE3Ljg1VjEwSDYuMTUiIH1dCiAgICBdOwogICAgdmFyIENsYXBwZXJib2FyZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjIgNiAzIDExbC0uOS0yLjRjLS4zLTEuMS4zLTIuMiAxLjMtMi41bDEzLjUtNGMxLjEtLjMgMi4yLjMgMi41IDEuM1oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi4yIDUuMyAzLjEgMy45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyLjQgMy40IDMuMSA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTFoMTh2OGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMloiIH1dCiAgICBdOwogICAgdmFyIENsaXBib2FyZENsb2NrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2Mi4ybDEuNiAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydi44MzIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA0SDZhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMTYiLCByOiAiNiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiMiIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIENsaXBib2FyZENoZWNrID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCB4OiAiOCIsIHk6ICIyIiwgcng6ICIxIiwgcnk6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTQgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgQ2xpcGJvYXJkQ29weSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDRINmEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE0SDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDEwLTQgNCA0IDQiIH1dCiAgICBdOwogICAgdmFyIENsaXBib2FyZExpc3QgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNCIsIHg6ICI4IiwgeTogIjIiLCByeDogIjEiLCByeTogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTFoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTZoLjAxIiB9XQogICAgXTsKICAgIHZhciBDbGlwYm9hcmRNaW51cyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE0aDYiIH1dCiAgICBdOwogICAgdmFyIENsaXBib2FyZFBhc3RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTRoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MS4zNDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTggNC00LTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDRINmEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDEuNzkzLTEuMTEzIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiOCIsIHk6ICIyIiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgQ2xpcGJvYXJkUGVuTGluZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDRINmEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNGgyYTIgMiAwIDAgMSAxLjczIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGgxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjM3OCAxMi42MjZhMSAxIDAgMCAwLTMuMDA0LTMuMDA0bC00LjAxIDQuMDEyYTIgMiAwIDAgMC0uNTA2Ljg1NGwtLjgzNyAyLjg3YS41LjUgMCAwIDAgLjYyLjYybDIuODctLjgzN2EyIDIgMCAwIDAgLjg1NC0uNTA2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgQ2xpcGJvYXJkUGVuID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCB4OiAiOCIsIHk6ICIyIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJoLTUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEzLjVWNmEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuMzc4IDE1LjYyNmExIDEgMCAxIDAtMy4wMDQtMy4wMDRsLTUuMDEgNS4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBDbGlwYm9hcmRQbHVzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCB4OiAiOCIsIHk6ICIyIiwgcng6ICIxIiwgcnk6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTRoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3YtNiIgfV0KICAgIF07CiAgICB2YXIgQ2xpcGJvYXJkVHlwZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEydi0xaDZ2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxN2gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDExdjYiIH1dCiAgICBdOwogICAgdmFyIENsaXBib2FyZFggPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNCIsIHg6ICI4IiwgeTogIjIiLCByeDogIjEiLCByeTogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTEtNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEgNiA2IiB9XQogICAgXTsKICAgIHZhciBDbGlwYm9hcmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNCIsIHg6ICI4IiwgeTogIjIiLCByeDogIjEiLCByeTogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDIiIH1dCiAgICBdOwogICAgdmFyIENsb2NrMSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NmwyLTQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIENsb2NrMTAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsLTQtMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2sxMSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NmwtMi00IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDbG9jazEyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDbG9jazIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsNC0yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDbG9jazQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsNCAyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDbG9jazMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZoNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2s1ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDIgNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2s2ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnYxMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2s3ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bC0yIDQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIENsb2NrOCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NmwtNCAyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDbG9jazkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZIOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2tBcnJvd0Rvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsMiAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjMzNyAyMS45OTRhMTAgMTAgMCAxIDEgOS41ODgtOC43NjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTggNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNHY4IiB9XQogICAgXTsKICAgIHZhciBDbG9ja0FsZXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDQgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMnY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIxaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS4yNSA4LjJBMTAgMTAgMCAxIDAgMTYgMjEuMTYiIH1dCiAgICBdOwogICAgdmFyIENsb2NrQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsNCAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyYTEwIDEwIDAgMSAwLTExIDkuOTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTYtNS41IDUuNUwxNCAxOSIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2tBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDEuNTYuNzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuMjI3IDIxLjkyNWExMCAxMCAwIDEgMSA4Ljc2Ny05LjU4OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIydi04IiB9XQogICAgXTsKICAgIHZhciBDbG9ja0ZhZGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJhMTAgMTAgMCAwIDEgNy4zOCAxNi43NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsNCAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuNSA4Ljg3NWExMCAxMCAwIDAgMC0uNSAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuODMgMTZhMTAgMTAgMCAwIDAgMi40MyAzLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC42MzYgNS4yMzVhMTAgMTAgMCAwIDEgLjg5MS0uODU3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNjQ0IDIxLjQyYTEwIDEwIDAgMCAwIDcuNjMxLS4zOCIgfV0KICAgIF07CiAgICB2YXIgQ2xvY2tQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDMuNjQ0IDEuODIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE5aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS45MiAxMy4yNjdhMTAgMTAgMCAxIDAtOC42NTMgOC42NTMiIH1dCiAgICBdOwogICAgdmFyIENsb2NrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDQgMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ2xvc2VkQ2FwdGlvbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDkuMTdhMyAzIDAgMSAwIDAgNS42NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA5LjE3YTMgMyAwIDEgMCAwIDUuNjYiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjUiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIENsb3VkQWxlcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxOGguNWExIDEgMCAwIDAgMC05aC0xLjc5QTcgNyAwIDEgMCA3IDE3LjcwOCIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRCYWNrdXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNS4yNTFBNC41IDQuNSAwIDAgMCAxNy41IDhoLTEuNzlBNyA3IDAgMSAwIDMgMTMuNjA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTF2NGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTlhNSA1IDAgMCAwIDktMyA0LjUgNC41IDAgMCAwLTQuNS00LjUgNC44MiA0LjgyIDAgMCAwLTMuNDEgMS40MUw3IDE1IiB9XQogICAgXTsKICAgIHZhciBDbG91ZENoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTUtNS41IDUuNUw5IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTcuNzQzQTcgNyAwIDEgMSAxNS43MSAxMGgxLjc5YTQuNSA0LjUgMCAwIDEgMS41IDguNzQyIiB9XQogICAgXTsKICAgIHZhciBDbG91ZENvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwLjg1MiAxOS43NzItLjM4My45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuMTQ4IDE0LjIyOC4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy4xNDggMTkuNzcyYTMgMyAwIDEgMC0yLjI5Ni01LjU0NGwtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjUzIDIwLjY5Ni0uMzgyLS45MjRhMyAzIDAgMSAxLTIuMjk2LTUuNTQ0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0Ljc3MiAxNS44NTIuOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNzcyIDE4LjE0OC45MjMuMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuMiAxNS4xYTcgNyAwIDEgMSA5LjkzLTkuODU4QTcgNyAwIDAgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjUgOC4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuMjI4IDE1Ljg1Mi0uOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4yMjggMTguMTQ4LS45MjMuMzgzIiB9XQogICAgXTsKICAgIHZhciBDbG91ZERvd25sb2FkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTN2OGwtNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDIxIDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjM5MyAxNS4yNjlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNDM2IDguMjg0IiB9XQogICAgXTsKICAgIHZhciBDbG91ZERyaXp6bGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxdjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZ2MSIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRGb2cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE3SDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjFIOSIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRIYWlsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNC44OTlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjI0MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMmguMDEiIH1dCiAgICBdOwogICAgdmFyIENsb3VkTGlnaHRuaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNi4zMjZBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIC41IDguOTczIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzIDEyLTMgNWg0bC0zIDUiIH1dCiAgICBdOwogICAgdmFyIENsb3VkTW9vblJhaW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyMHYyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjM3NiAxNC41MTJhNiA2IDAgMCAwIDMuNDYxLTQuMTI3Yy4xNDgtLjYyNS0uNjU5LS45Ny0xLjI0OC0uNzE0YTQgNCAwIDAgMS01LjI1OS01LjI2Yy4yNTUtLjU4OS0uMDktMS4zOTUtLjcxNi0xLjI0OGE2IDYgMCAwIDAtNC41OTQgNS4zNiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIwYTUgNSAwIDEgMSA4LjktNEgxM2EzIDMgMCAwIDEgMiA1LjI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTl2MiIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRNb29uID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTZhMyAzIDAgMCAxIDAgNkg3YTUgNSAwIDEgMSA0LjktNnoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguMzc2IDE0LjUxMmE2IDYgMCAwIDAgMy40NjEtNC4xMjdjLjE0OC0uNjI1LS42NTktLjk3LTEuMjQ4LS43MTRhNCA0IDAgMCAxLTUuMjU5LTUuMjZjLjI1NS0uNTg5LS4wOS0xLjM5NS0uNzE2LTEuMjQ4YTYgNiAwIDAgMC00LjU5NCA1LjM2IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBDbG91ZE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjk0IDUuMjc0QTcgNyAwIDAgMSAxNS43MSAxMGgxLjc5YTQuNSA0LjUgMCAwIDEgNC4yMjIgNi4wNTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguNzk2IDE4LjgxQTQuNSA0LjUgMCAwIDEgMTcuNSAxOUg5QTcgNyAwIDAgMSA1Ljc5IDUuNzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICAgIHZhciBDbG91ZFJhaW5XaW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNC44OTlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjI0MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjIgMjIgMy03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTMtMyA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDEzLTMgNyIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRSYWluID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNC44OTlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjI0MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNHY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNnY2IiB9XQogICAgXTsKICAgIHZhciBDbG91ZFNub3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE5aC4wMSIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWRTdW5SYWluID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQuOTMgNC45MyAxLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4wNyA0LjkzLTEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS45NDcgMTIuNjVhNCA0IDAgMCAwLTUuOTI1LTQuMTI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjBhNSA1IDAgMSAxIDguOS00SDEzYTMgMyAwIDAgMSAyIDUuMjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE5djIiIH1dCiAgICBdOwogICAgdmFyIENsb3VkU3VuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQuOTMgNC45MyAxLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4wNyA0LjkzLTEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS45NDcgMTIuNjVhNCA0IDAgMCAwLTUuOTI1LTQuMTI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIySDdhNSA1IDAgMSAxIDQuOS02SDEzYTMgMyAwIDAgMSAwIDZaIiB9XQogICAgXTsKICAgIHZhciBDbG91ZFN5bmMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxOC0xLjUzNSAxLjYwNWE1IDUgMCAwIDEtOC0xLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjJ2LTRoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuOTk2IDE1LjI1MUE0LjUgNC41IDAgMCAwIDE3LjQ5NSA4aC0xLjc5YTcgNyAwIDEgMC0xMi43MDkgNS42MDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMHY0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxNCAxLjUzNS0xLjYwNWE1IDUgMCAwIDEgOCAxLjUiIH1dCiAgICBdOwogICAgdmFyIENsb3VkVXBsb2FkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTcgNC00IDQgNCIgfV0KICAgIF07CiAgICB2YXIgQ2xvdWQgPSBbWyJwYXRoIiwgeyBkOiAiTTE3LjUgMTlIOWE3IDcgMCAxIDEgNi43MS05aDEuNzlhNC41IDQuNSAwIDEgMSAwIDlaIiB9XV07CiAgICB2YXIgQ2xvdWR5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNSAxMmExIDEgMCAxIDEgMCA5SDkuMDA2YTcgNyAwIDEgMSA2LjcwMi05eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS44MzIgOUEzIDMgMCAwIDAgMTkgN2gtMi4yMDdhNS41IDUuNSAwIDAgMC0xMC43Mi42MSIgfV0KICAgIF07CiAgICB2YXIgQ2x1YiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTcuMjggOS4wNWE1LjUgNS41IDAgMSAwLTEwLjU2IDBBNS41IDUuNSAwIDEgMCAxMiAxNy42NmE1LjUgNS41IDAgMSAwIDUuMjgtOC42WiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTcuNjZMMTIgMjIiIH1dCiAgICBdOwogICAgdmFyIENsb3ZlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjE3IDcuODMgMiAyMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00LjAyIDEyYTIuODI3IDIuODI3IDAgMSAxIDMuODEtNC4xN0EyLjgyNyAyLjgyNyAwIDEgMSAxMiA0LjAyYTIuODI3IDIuODI3IDAgMSAxIDQuMTcgMy44MUEyLjgyNyAyLjgyNyAwIDEgMSAxOS45OCAxMmEyLjgyNyAyLjgyNyAwIDEgMS0zLjgxIDQuMTdBMi44MjcgMi44MjcgMCAxIDEgMTIgMTkuOThhMi44MjcgMi44MjcgMCAxIDEtNC4xNy0zLjgxQTEgMSAwIDEgMSA0IDEyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuODMgNy44MyA4LjM0IDguMzQiIH1dCiAgICBdOwogICAgdmFyIENvZGVYbWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNiA0LTQtNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgOC00IDQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgNC01IDE2IiB9XQogICAgXTsKICAgIHZhciBDb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTggNi02LTYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDYtNiA2IDYgNiIgfV0KICAgIF07CiAgICB2YXIgQ29kZXBlbiA9IFsKICAgICAgWyJwb2x5Z29uIiwgeyBwb2ludHM6ICIxMiAyIDIyIDguNSAyMiAxNS41IDEyIDIyIDIgMTUuNSAyIDguNSAxMiAyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMjIiLCB5MjogIjE1LjUiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIyMiA4LjUgMTIgMTUuNSAyIDguNSIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjIgMTUuNSAxMiA4LjUgMjIgMTUuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIiLCB5MjogIjguNSIgfV0KICAgIF07CiAgICB2YXIgQ29kZXNhbmRib3ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICI3LjUgNC4yMSAxMiA2LjgxIDE2LjUgNC4yMSIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjcuNSAxOS43OSA3LjUgMTQuNiAzIDEyIiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMjEgMTIgMTYuNSAxNC42IDE2LjUgMTkuNzkiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIzLjI3IDYuOTYgMTIgMTIuMDEgMjAuNzMgNi45NiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIyLjA4IiwgeTI6ICIxMiIgfV0KICAgIF07CiAgICB2YXIgQ29mZmVlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2MiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiA4YTEgMSAwIDAgMSAxIDF2OGE0IDQgMCAwIDEtNCA0SDdhNCA0IDAgMCAxLTQtNFY5YTEgMSAwIDAgMSAxLTFoMTRhNCA0IDAgMSAxIDAgOGgtMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDJ2MiIgfV0KICAgIF07CiAgICB2YXIgQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTAuMjcgNyAzLjM0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDEzLjczLTQgNi45MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMC42Ni0xLTEuNzMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMy4zNC0xIDEuNzMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjY2IDE3LTEuNzMtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC42NiA3LTEuNzMgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zLjM0IDE3IDEuNzMtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zLjM0IDcgMS43MyAxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiOCIgfV0KICAgIF07CiAgICB2YXIgQ29pbnMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjgiLCByOiAiNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC4wOSAxMC4zN0E2IDYgMCAxIDEgMTAuMzQgMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA2aDF2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi43MSAxMy44OC43LjcxLTIuODIgMi44MiIgfV0KICAgIF07CiAgICB2YXIgQ29sdW1uczIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzdjE4IiB9XQogICAgXTsKICAgIHZhciBDb2x1bW5zM0NvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4zIDE5LjYgMS0uNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjcuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS4yIDE2LjktLjktLjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuNiAyMS43LjMtLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuOCAxNS4zLS40LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMSAxNS4yLjMtLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuNiAyMS43LS40LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNyAxNi44IDEtLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEuNyAxOS40LS45LS4zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBDb2x1bW5zNCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNSAzdjE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuNSAzdjE4IiB9XQogICAgXTsKICAgIHZhciBDb2x1bW5zMyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjE4IiB9XQogICAgXTsKICAgIHZhciBDb21iaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM2ExIDEgMCAwIDEgMSAxdjVhMSAxIDAgMCAxLTEgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzYTEgMSAwIDAgMSAxIDF2NWExIDEgMCAwIDEtMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTUgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMjEgMy0zSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE0IiwgeTogIjE0Iiwgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMyIsIHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIENvbW1hbmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA2djEyYTMgMyAwIDEgMCAzLTNINmEzIDMgMCAxIDAgMyAzVjZhMyAzIDAgMSAwLTMgM2gxMmEzIDMgMCAxIDAtMy0zIiB9XQogICAgXTsKICAgIHZhciBDb21wYXNzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTYuMjQgNy43Ni0xLjgwNCA1LjQxMWEyIDIgMCAwIDEtMS4yNjUgMS4yNjVMNy43NiAxNi4yNGwxLjgwNC01LjQxMWEyIDIgMCAwIDEgMS4yNjUtMS4yNjV6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICAgIHZhciBDb21wb25lbnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS41MzYgMTEuMjkzYTEgMSAwIDAgMCAwIDEuNDE0bDIuMzc2IDIuMzc3YTEgMSAwIDAgMCAxLjQxNCAwbDIuMzc3LTIuMzc3YTEgMSAwIDAgMCAwLTEuNDE0bC0yLjM3Ny0yLjM3N2ExIDEgMCAwIDAtMS40MTQgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi4yOTcgMTEuMjkzYTEgMSAwIDAgMCAwIDEuNDE0bDIuMzc3IDIuMzc3YTEgMSAwIDAgMCAxLjQxNCAwbDIuMzc3LTIuMzc3YTEgMSAwIDAgMCAwLTEuNDE0TDYuMDg4IDguOTE2YTEgMSAwIDAgMC0xLjQxNCAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjkxNiAxNy45MTJhMSAxIDAgMCAwIDAgMS40MTVsMi4zNzcgMi4zNzZhMSAxIDAgMCAwIDEuNDE0IDBsMi4zNzctMi4zNzZhMSAxIDAgMCAwIDAtMS40MTVsLTIuMzc3LTIuMzc2YTEgMSAwIDAgMC0xLjQxNCAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjkxNiA0LjY3NGExIDEgMCAwIDAgMCAxLjQxNGwyLjM3NyAyLjM3NmExIDEgMCAwIDAgMS40MTQgMGwyLjM3Ny0yLjM3NmExIDEgMCAwIDAgMC0xLjQxNGwtMi4zNzctMi4zNzdhMSAxIDAgMCAwLTEuNDE0IDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBDb21wdXRlciA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiOCIsIHg6ICI1IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI4IiwgeDogIjIiLCB5OiAiMTQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4aDYiIH1dCiAgICBdOwogICAgdmFyIENvbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC45IDE4LjU1LTgtMTUuOThhMSAxIDAgMCAwLTEuOCAwbC04IDE1Ljk4IiB9XSwKICAgICAgWyJlbGxpcHNlIiwgeyBjeDogIjEyIiwgY3k6ICIxOSIsIHJ4OiAiOSIsIHJ5OiAiMyIgfV0KICAgIF07CiAgICB2YXIgQ29uY2llcmdlQmVsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjBhMSAxIDAgMCAxLTEtMXYtMWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNmE4IDggMCAxIDAtMTYgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA0djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNGg0IiB9XQogICAgXTsKICAgIHZhciBDb25zdHJ1Y3Rpb24gPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNiIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI4Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE0djciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNHY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDN2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDN2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNCAyLjMgNi4zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDYgNy43IDcuNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDYgOCA4IiB9XQogICAgXTsKICAgIHZhciBDb250YWN0Um91bmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOTE1IDIyYTYgNiAwIDAgMC0xMiAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjQiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIENvbnRhY3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMnYtMmEyIDIgMCAwIDEgMi0yaDZhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcjogIjMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjQiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIENvbnRhaW5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDcuN2MwLS42LS40LTEuMi0uOC0xLjVsLTYuMy0zLjlhMS43MiAxLjcyIDAgMCAwLTEuNyAwbC0xMC4zIDZjLS41LjItLjkuOC0uOSAxLjR2Ni42YzAgLjUuNCAxLjIuOCAxLjVsNi4zIDMuOWExLjcyIDEuNzIgMCAwIDAgMS43IDBsMTAuMy02Yy41LS4zLjktMSAuOS0xLjVaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIxLjlWMTRMMi4xIDkuMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNCAxMS45LTYuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOS44di04LjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTcuNVY5LjQiIH1dCiAgICBdOwogICAgdmFyIENvbnRyYXN0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThhNiA2IDAgMCAwIDAtMTJ2MTJ6IiB9XQogICAgXTsKICAgIHZhciBDb29raWUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyYTEwIDEwIDAgMSAwIDEwIDEwIDQgNCAwIDAgMS01LTUgNCA0IDAgMCAxLTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjUgOC41di4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNS41di4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTd2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTR2LjAxIiB9XQogICAgXTsKICAgIHZhciBDb29raW5nUG90ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMnY4YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0ydi04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQgOCAxNi00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguODYgNi43OC0uNDUtMS44MWEyIDIgMCAwIDEgMS40NS0yLjQzbDEuOTQtLjQ4YTIgMiAwIDAgMSAyLjQzIDEuNDZsLjQ1IDEuOCIgfV0KICAgIF07CiAgICB2YXIgQ29weUNoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTUgMiAyIDQtNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjE0IiwgeDogIjgiLCB5OiAiOCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIiIH1dCiAgICBdOwogICAgdmFyIENvcHlTbGFzaCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxOCIsIHkxOiAiMTgiLCB5MjogIjEyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiMTQiLCB4OiAiOCIsIHk6ICI4Iiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTZjLTEuMSAwLTItLjktMi0yVjRjMC0xLjEuOS0yIDItMmgxMGMxLjEgMCAyIC45IDIgMiIgfV0KICAgIF07CiAgICB2YXIgQ29weU1pbnVzID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjE4IiwgeTE6ICIxNSIsIHkyOiAiMTUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIxNCIsIHg6ICI4IiwgeTogIjgiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNmMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDIgLjkgMiAyIiB9XQogICAgXTsKICAgIHZhciBDb3B5UGx1cyA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIxNSIsIHkxOiAiMTIiLCB5MjogIjE4IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxOCIsIHkxOiAiMTUiLCB5MjogIjE1IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiMTQiLCB4OiAiOCIsIHk6ICI4Iiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTZjLTEuMSAwLTItLjktMi0yVjRjMC0xLjEuOS0yIDItMmgxMGMxLjEgMCAyIC45IDIgMiIgfV0KICAgIF07CiAgICB2YXIgQ29weVggPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTgiLCB5MTogIjEyIiwgeTI6ICIxOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTgiLCB5MTogIjE4IiwgeTI6ICIxMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjE0IiwgeDogIjgiLCB5OiAiOCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIiIH1dCiAgICBdOwogICAgdmFyIENvcHkgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjE0IiwgeDogIjgiLCB5OiAiOCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIiIH1dCiAgICBdOwogICAgdmFyIENvcHlsZWZ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4xNyAxNC44M2E0IDQgMCAxIDAgMC01LjY2IiB9XQogICAgXTsKICAgIHZhciBDb3B5cmlnaHQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC44MyAxNC44M2E0IDQgMCAxIDEgMC01LjY2IiB9XQogICAgXTsKICAgIHZhciBDb3JuZXJEb3duUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxMCA1IDUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHY3YTQgNCAwIDAgMCA0IDRoMTIiIH1dCiAgICBdOwogICAgdmFyIENvcm5lckRvd25MZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgNHY3YTQgNCAwIDAgMS00IDRINCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEwLTUgNSA1IDUiIH1dCiAgICBdOwogICAgdmFyIENvcm5lckxlZnREb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTUtNSA1LTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA0aC03YTQgNCAwIDAgMC00IDR2MTIiIH1dCiAgICBdOwogICAgdmFyIENvcm5lckxlZnRVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDkgOSA0IDQgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMGgtN2E0IDQgMCAwIDEtNC00VjQiIH1dCiAgICBdOwogICAgdmFyIENvcm5lclJpZ2h0RG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE1IDUgNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0aDdhNCA0IDAgMCAxIDQgNHYxMiIgfV0KICAgIF07CiAgICB2YXIgQ29ybmVyUmlnaHRVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDkgNS01IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIwaDdhNCA0IDAgMCAwIDQtNFY0IiB9XQogICAgXTsKICAgIHZhciBDb3JuZXJVcExlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMHYtN2E0IDQgMCAwIDAtNC00SDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNCA0IDlsNS01IiB9XQogICAgXTsKICAgIHZhciBDb3JuZXJVcFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTQgNS01LTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIwdi03YTQgNCAwIDAgMSA0LTRoMTIiIH1dCiAgICBdOwogICAgdmFyIENwdSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE3aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA3aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxN2gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDdoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAydjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI0IiwgeTogIjQiLCB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMTYiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI4IiwgeTogIjgiLCB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBDcmVhdGl2ZUNvbW1vbnMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5LjNhMi44IDIuOCAwIDAgMC0zLjUgMSAzLjEgMy4xIDAgMCAwIDAgMy40IDIuNyAyLjcgMCAwIDAgMy41IDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgOS4zYTIuOCAyLjggMCAwIDAtMy41IDEgMy4xIDMuMSAwIDAgMCAwIDMuNCAyLjcgMi43IDAgMCAwIDMuNSAxIiB9XQogICAgXTsKICAgIHZhciBDcmVkaXRDYXJkID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjEwIiwgeTI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgQ3JvaXNzYW50ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMiAxOEg0Ljc3NGExLjUgMS41IDAgMCAxLTEuMzUyLS45NyAxMSAxMSAwIDAgMSAuMTMyLTYuNDg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEwLjJWNC43NzRhMS41IDEuNSAwIDAgMC0uOTctMS4zNTIgMTEgMTEgMCAwIDAtNi40ODYuMTMyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDVhNCAzIDAgMCAxIDQgMyAyIDIgMCAwIDEtMiAyIDEwIDEwIDAgMCAwLTUuMTM5IDEuNDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxOGEzIDQgMCAwIDAgMyA0IDIgMiAwIDAgMCAyLTIgMTAgMTAgMCAwIDEgMS40Mi01LjE0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguNzA5IDIuNTU0YTEwIDEwIDAgMCAwLTYuMTU1IDYuMTU1IDEuNSAxLjUgMCAwIDAgLjY3NiAxLjYyNmw5LjgwNyA1LjQyYTIgMiAwIDAgMCAyLjcxOC0yLjcxOGwtNS40Mi05LjgwN2ExLjUgMS41IDAgMCAwLTEuNjI2LS42NzYiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIENyb3AgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDJ2MTRhMiAyIDAgMCAwIDIgMmgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMlY4YTIgMiAwIDAgMC0yLTJIMiIgfV0KICAgIF07CiAgICB2YXIgQ3Jvc3MgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDlhMiAyIDAgMCAwLTIgMnYyYTIgMiAwIDAgMCAyIDJoNGExIDEgMCAwIDEgMSAxdjRhMiAyIDAgMCAwIDIgMmgyYTIgMiAwIDAgMCAyLTJ2LTRhMSAxIDAgMCAxIDEtMWg0YTIgMiAwIDAgMCAyLTJ2LTJhMiAyIDAgMCAwLTItMmgtNGExIDEgMCAwIDEtMS0xVjRhMiAyIDAgMCAwLTItMmgtMmEyIDIgMCAwIDAtMiAydjRhMSAxIDAgMCAxLTEgMXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIENyb3NzaGFpciA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIyIiwgeDI6ICIxOCIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjIiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjYiLCB5MjogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIyMiIsIHkyOiAiMTgiIH1dCiAgICBdOwogICAgdmFyIENyb3duID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuNTYyIDMuMjY2YS41LjUgMCAwIDEgLjg3NiAwTDE1LjM5IDguODdhMSAxIDAgMCAwIDEuNTE2LjI5NEwyMS4xODMgNS41YS41LjUgMCAwIDEgLjc5OC41MTlsLTIuODM0IDEwLjI0NmExIDEgMCAwIDEtLjk1Ni43MzRINS44MWExIDEgMCAwIDEtLjk1Ny0uNzM0TDIuMDIgNi4wMmEuNS41IDAgMCAxIC43OTgtLjUxOWw0LjI3NiAzLjY2NGExIDEgMCAwIDAgMS41MTYtLjI5NHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWgxNCIgfV0KICAgIF07CiAgICB2YXIgQ3Vib2lkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMjEuMTIgNi40LTYuMDUtNC4wNmEyIDIgMCAwIDAtMi4xNy0uMDVMMi45NSA4LjQxYTIgMiAwIDAgMC0uOTUgMS43djUuODJhMiAyIDAgMCAwIC44OCAxLjY2bDYuMDUgNC4wN2EyIDIgMCAwIDAgMi4xNy4wNWw5Ljk1LTYuMTJhMiAyIDAgMCAwIC45NS0xLjdWOC4wNmEyIDIgMCAwIDAtLjg4LTEuNjZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIydi04TDIuMjUgOS4xNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNCAxMS43Ny02Ljg3IiB9XQogICAgXTsKICAgIHZhciBDdXBTb2RhID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNiA4IDEuNzUgMTIuMjhhMiAyIDAgMCAwIDIgMS43Mmg0LjU0YTIgMiAwIDAgMCAyLTEuNzJMMTggOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDhoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNWE2LjQ3IDYuNDcgMCAwIDEgNSAwIDYuNDcgNi40NyAwIDAgMCA1IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgOCAxLTZoMiIgfV0KICAgIF07CiAgICB2YXIgQ3VycmVuY3kgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI4IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB4MjogIjYiLCB5MTogIjMiLCB5MjogIjYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjEiLCB4MjogIjE4IiwgeTE6ICIzIiwgeTI6ICI2IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB4MjogIjYiLCB5MTogIjIxIiwgeTI6ICIxOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMSIsIHgyOiAiMTgiLCB5MTogIjIxIiwgeTI6ICIxOCIgfV0KICAgIF07CiAgICB2YXIgQ3lsaW5kZXIgPSBbCiAgICAgIFsiZWxsaXBzZSIsIHsgY3g6ICIxMiIsIGN5OiAiNSIsIHJ4OiAiOSIsIHJ5OiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDV2MTRhOSAzIDAgMCAwIDE4IDBWNSIgfV0KICAgIF07CiAgICB2YXIgRGFtID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTEuMzFjMS4xNy41NiAxLjU0IDEuNjkgMy41IDEuNjkgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjc1IDE4Yy4zNS41IDEuNDUgMSAyLjc1IDEgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgM2ExIDEgMCAwIDAtMSAxdjE2YTEgMSAwIDAgMCAxIDFoNGExIDEgMCAwIDAgMS0xTDEwIDRhMSAxIDAgMCAwLTEtMXoiIH1dCiAgICBdOwogICAgdmFyIERhdGFiYXNlQmFja3VwID0gWwogICAgICBbImVsbGlwc2UiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByeDogIjkiLCByeTogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmE5IDMgMCAwIDAgNSAyLjY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDkuM1Y1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNXYxNGE5IDMgMCAwIDAgNi40NyAyLjg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjRoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAyMGE1IDUgMCAwIDAgOS0zIDQuNSA0LjUgMCAwIDAtNC41LTQuNWMtMS4zMyAwLTIuNTQuNTQtMy40MSAxLjQxTDEyIDE2IiB9XQogICAgXTsKICAgIHZhciBEYXRhYmFzZVphcCA9IFsKICAgICAgWyJlbGxpcHNlIiwgeyBjeDogIjEyIiwgY3k6ICI1Iiwgcng6ICI5Iiwgcnk6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNVYxOUE5IDMgMCAwIDAgMTUgMjEuODQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNVY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyTDE4IDE3SDIyTDE5IDIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJBOSAzIDAgMCAwIDE0LjU5IDE0Ljg3IiB9XQogICAgXTsKICAgIHZhciBEYXRhYmFzZSA9IFsKICAgICAgWyJlbGxpcHNlIiwgeyBjeDogIjEyIiwgY3k6ICI1Iiwgcng6ICI5Iiwgcnk6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNVYxOUE5IDMgMCAwIDAgMjEgMTlWNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyQTkgMyAwIDAgMCAyMSAxMiIgfV0KICAgIF07CiAgICB2YXIgRGVjaW1hbHNBcnJvd0xlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyAyMS0zLTMgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4SDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTFoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNiIsIHk6ICIzIiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMi41IiB9XQogICAgXTsKICAgIHZhciBEZWNpbWFsc0Fycm93UmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxOGgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMSAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTFoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiMyIsIHdpZHRoOiAiNSIsIGhlaWdodDogIjgiLCByeDogIjIuNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjYiLCB5OiAiMyIsIHdpZHRoOiAiNSIsIGhlaWdodDogIjgiLCByeDogIjIuNSIgfV0KICAgIF07CiAgICB2YXIgRGVsZXRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAgNWEyIDIgMCAwIDAtMS4zNDQuNTE5bC02LjMyOCA1Ljc0YTEgMSAwIDAgMCAwIDEuNDgxbDYuMzI4IDUuNzQxQTIgMiAwIDAgMCAxMCAxOWgxMGEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgOSA2IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggOS02IDYiIH1dCiAgICBdOwogICAgdmFyIERlc3NlcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4xNjIgMy4xNjdBMTAgMTAgMCAwIDAgMiAxM2EyIDIgMCAwIDAgNCAwdi0xYTIgMiAwIDAgMSA0IDB2NGEyIDIgMCAwIDAgNCAwdi00YTIgMiAwIDAgMSA0IDB2MWEyIDIgMCAwIDAgNC0uMDA2IDEwIDEwIDAgMCAwLTguMTYxLTkuODI2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjgwNCAxNC44NjlhOSA5IDAgMCAxLTE3LjYwOCAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjQiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgRGlhbWV0ZXIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiNSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNDggMy42NmExMCAxMCAwIDAgMSAxMy44NiAxMy44NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjQxIDYuNDEgMTEuMTggMTEuMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy42NiA2LjQ4YTEwIDEwIDAgMCAwIDEzLjg2IDEzLjg2IiB9XQogICAgXTsKICAgIHZhciBEaWFtb25kTWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjcgMTAuM2EyLjQxIDIuNDEgMCAwIDAgMCAzLjQxbDcuNTkgNy41OWEyLjQxIDIuNDEgMCAwIDAgMy40MSAwbDcuNTktNy41OWEyLjQxIDIuNDEgMCAwIDAgMC0zLjQxTDEzLjcgMi43MWEyLjQxIDIuNDEgMCAwIDAtMy40MSAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dCiAgICBdOwogICAgdmFyIERpYW1vbmRQZXJjZW50ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi43IDEwLjNhMi40MSAyLjQxIDAgMCAwIDAgMy40MWw3LjU5IDcuNTlhMi40MSAyLjQxIDAgMCAwIDMuNDEgMGw3LjU5LTcuNTlhMi40MSAyLjQxIDAgMCAwIDAtMy40MUwxMy43IDIuNzFhMi40MSAyLjQxIDAgMCAwLTMuNDEgMFoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4yIDkuMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSA5LjUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjcgMTQuOGguMDEiIH1dCiAgICBdOwogICAgdmFyIERpYW1vbmRQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNyAxMC4zYTIuNDEgMi40MSAwIDAgMCAwIDMuNDFsNy41OSA3LjU5YTIuNDEgMi40MSAwIDAgMCAzLjQxIDBsNy41OS03LjU5YTIuNDEgMi40MSAwIDAgMCAwLTMuNDFMMTMuNyAyLjcxYTIuNDEgMi40MSAwIDAgMC0zLjQxIDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0KICAgIF07CiAgICB2YXIgRGlhbW9uZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNyAxMC4zYTIuNDEgMi40MSAwIDAgMCAwIDMuNDFsNy41OSA3LjU5YTIuNDEgMi40MSAwIDAgMCAzLjQxIDBsNy41OS03LjU5YTIuNDEgMi40MSAwIDAgMCAwLTMuNDFsLTcuNTktNy41OWEyLjQxIDIuNDEgMCAwIDAtMy40MSAwWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRGljZTEgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dCiAgICBdOwogICAgdmFyIERpY2UyID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNWguMDEiIH1dCiAgICBdOwogICAgdmFyIERpY2UzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTZoLjAxIiB9XQogICAgXTsKICAgIHZhciBEaWNlNCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoLjAxIiB9XQogICAgXTsKICAgIHZhciBEaWNlNSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0KICAgIF07CiAgICB2YXIgRGljZTYgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmguMDEiIH1dCiAgICBdOwogICAgdmFyIERpY2VzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICIxMiIsIHg6ICIyIiwgeTogIjEwIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjkyIDE0IDMuNS0zLjVhMi4yNCAyLjI0IDAgMCAwIDAtM2wtNS00LjkyYTIuMjQgMi4yNCAwIDAgMC0zIDBMMTAgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOWguMDEiIH1dCiAgICBdOwogICAgdmFyIERpZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzdjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTBoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWgxNCIgfV0KICAgIF07CiAgICB2YXIgRGlzYzIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0KICAgIF07CiAgICB2YXIgRGlzYzMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyYzAtMS43LjctMy4yIDEuOC00LjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmMwIDEuNy0uNyAzLjItMS44IDQuMiIgfV0KICAgIF07CiAgICB2YXIgRGlzYyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIERpc2NBbGJ1bSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XQogICAgXTsKICAgIHZhciBEaXZpZGUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI2IiwgcjogIjEiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNSIsIHgyOiAiMTkiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxOCIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBEbmFPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyYy0xLjM1IDEuNS0yLjA5MiAzLTIuNSA0LjVMMTQgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyA2LTIuODkxLTIuODkxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTVjMy4zMzMtMyA2LjY2Ny0zIDEwLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDkgLjg5MS44OTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgOWMtMS41IDEuMzUtMyAyLjA5Mi00LjUgMi41bC0xLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4xMDkgMTQuMTA5IDQgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi41IDEyLjUgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTggMi44OTEgMi44OTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMmMxLjM1LTEuNSAyLjA5Mi0zIDIuNS00LjVMMTAgMTYiIH1dCiAgICBdOwogICAgdmFyIERuYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE2IDEuNSAxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgOC0xLjUtMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDJjLTEuNzk4IDEuOTk4LTIuNTE4IDMuOTk1LTIuODA3IDUuOTkzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2LjUgMTAuNSAxIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgNi0yLjg5MS0yLjg5MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE1YzYuNjY3LTYgMTMuMzMzIDAgMjAtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCA5IC44OTEuODkxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuMTA5IDE0LjEwOSA0IDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuNSAxMi41IDEgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDE4IDIuODkxIDIuODkxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjJjMS43OTgtMS45OTggMi41MTgtMy45OTUgMi44MDctNS45OTMiIH1dCiAgICBdOwogICAgdmFyIERvY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDhoMjAiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNmgxMiIgfV0KICAgIF07CiAgICB2YXIgRG9nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuMjUgMTYuMjVoMS41TDEyIDE3eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNHYuNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00LjQyIDExLjI0N0ExMy4xNTIgMTMuMTUyIDAgMCAwIDQgMTQuNTU2QzQgMTguNzI4IDcuNTgyIDIxIDEyIDIxczgtMi4yNzIgOC02LjQ0NGExMS43MDIgMTEuNzAyIDAgMCAwLS40OTMtMy4zMDkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNHYuNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjUgOC41Yy0uMzg0IDEuMDUtMS4wODMgMi4wMjgtMi4zNDQgMi41LTEuOTMxLjcyMi0zLjU3Ni0uMjk3LTMuNjU2LTEtLjExMy0uOTk0IDEuMTc3LTYuNTMgNC03IDEuOTIzLS4zMjEgMy42NTEuODQ1IDMuNjUxIDIuMjM1QTcuNDk3IDcuNDk3IDAgMCAxIDE0IDUuMjc3YzAtMS4zOSAxLjg0NC0yLjU5OCAzLjc2Ny0yLjI3NyAyLjgyMy40NyA0LjExMyA2LjAwNiA0IDctLjA4LjcwMy0xLjcyNSAxLjcyMi0zLjY1NiAxLTEuMjYxLS40NzItMS44NTUtMS40NS0yLjIzOS0yLjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIERvbGxhclNpZ24gPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIiLCB5MjogIjIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDVIOS41YTMuNSAzLjUgMCAwIDAgMCA3aDVhMy41IDMuNSAwIDAgMSAwIDdINiIgfV0KICAgIF07CiAgICB2YXIgRG9udXQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC41IDEwYTIuNSAyLjUgMCAwIDEtMi40LTNIMThhMi45NSAyLjk1IDAgMCAxLTIuNi00LjQgMTAgMTAgMCAxIDAgNi4zIDcuMWMtLjMuMi0uOC4zLTEuMi4zIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIERvb3JDbG9zZWRMb2NrZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOVY2YTIgMiAwIDAgMC0yLTJIOGEyIDIgMCAwIDAtMiAydjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjBoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxN3YtMmEyIDIgMCAxIDAtNCAwdjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxNCIsIHk6ICIxNyIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjUiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIERvb3JDbG9zZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjBWNmEyIDIgMCAwIDAtMi0ySDhhMiAyIDAgMCAwLTIgMnYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIwaDIwIiB9XQogICAgXTsKICAgIHZhciBEb29yT3BlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIwSDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgNC41NjJ2MTYuMTU3YTEgMSAwIDAgMCAxLjI0Mi45N0wxOSAyMFY1LjU2MmEyIDIgMCAwIDAtMS41MTUtMS45NGwtNC0xQTIgMiAwIDAgMCAxMSA0LjU2MXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgNEg4YTIgMiAwIDAgMC0yIDJ2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIwaC0zIiB9XQogICAgXTsKICAgIHZhciBEb3QgPSBbWyJjaXJjbGUiLCB7IGN4OiAiMTIuMSIsIGN5OiAiMTIuMSIsIHI6ICIxIiB9XV07CiAgICB2YXIgRG93bmxvYWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxMCA1IDUgNS01IiB9XQogICAgXTsKICAgIHZhciBEcmFmdGluZ0NvbXBhc3MgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMi45OSA2Ljc0IDEuOTMgMy40NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS4xMzYgMTJhMTAgMTAgMCAwIDEtMTQuMjcxIDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtMi4xNi0zLjg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMjEgOC4wMi0xNC4yNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI1IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIERyYW1hID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNSAxMy4xaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA1YzAgOS00IDEyLTYgMTJzLTYtMy02LTEyYzAtMiAyLTMgNi0zczYgMSA2IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNCA5LjljLS44LjgtMiAuOC0yLjggMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4xIDcuMUM5IDcuMiA3LjcgNy43IDYgOC42Yy0zLjUgMi00LjcgMy45LTMuNyA1LjYgNC41IDcuOCA5LjUgOC40IDExLjIgNy40LjktLjUgMS45LTIuMSAxLjktNC43IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMSAxNi41Yy4zLTEuMSAxLjQtMS43IDIuNC0xLjQiIH1dCiAgICBdOwogICAgdmFyIERyaWJiYmxlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuMTMgNS4wOUMxNS4yMiA5LjE0IDEwIDEwLjQ0IDIuMjUgMTAuOTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEuNzUgMTIuODRjLTYuNjItMS40MS0xMi4xNCAxLTE2LjM4IDYuMzIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41NiAyLjc1YzQuMzcgNiA2IDkuNDIgOCAxNy43MiIgfV0KICAgIF07CiAgICB2YXIgRHJpbGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxOGExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg1YTMgMyAwIDAgMS0zLTMgMSAxIDAgMCAxIDEtMXoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMgMTBINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg5YTEgMSAwIDAgMSAxIDF2NmExIDEgMCAwIDEtMSAxbC0uODEgMy4yNDJhMSAxIDAgMCAxLS45Ny43NThIOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA0aDNhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTAtMiA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTggMi04IiB9XQogICAgXTsKICAgIHZhciBEcm9uZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwIDcgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNC0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTAgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE0IDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4yMDUgNC4xMzlhNCA0IDAgMSAxIDUuNDM5IDUuODYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjYzNyAxNGE0IDQgMCAxIDEtNS40MzIgNS44NjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4zNjcgMTBhNCA0IDAgMSAxIDUuNDM4LTUuODYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNzk1IDE5Ljg2MmE0IDQgMCAxIDEtNS40MjktNS44NzMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxMCIsIHk6ICI4Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgRHJvcGxldE9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjcxNSAxMy4xODZDMTguMjkgMTEuODU4IDE3LjM4NCAxMC42MDcgMTYgOS41Yy0yLTEuNi0zLjUtNC00LTYuNWExMC43IDEwLjcgMCAwIDEtLjg4NCAyLjU4NiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC43OTUgOC43OTdBMTEgMTEgMCAwIDEgOCA5LjVDNiAxMS4xIDUgMTMgNSAxNWE3IDcgMCAwIDAgMTMuMjIyIDMuMjA4IiB9XQogICAgXTsKICAgIHZhciBEcm9wbGV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMjJhNyA3IDAgMCAwIDctN2MwLTItMS0zLjktMy01LjVzLTMuNS00LTQtNi41Yy0uNSAyLjUtMiA0LjktNCA2LjVDNiAxMS4xIDUgMTMgNSAxNWE3IDcgMCAwIDAgNyA3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRHJvcGxldHMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03IDE2LjNjMi4yIDAgNC0xLjgzIDQtNC4wNSAwLTEuMTYtLjU3LTIuMjYtMS43MS0zLjE5UzcuMjkgNi43NSA3IDUuM2MtLjI5IDEuNDUtMS4xNCAyLjg0LTIuMjkgMy43NlMzIDExLjEgMyAxMi4yNWMwIDIuMjIgMS44IDQuMDUgNCA0LjA1eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi41NiA2LjZBMTAuOTcgMTAuOTcgMCAwIDAgMTQgMy4wMmMuNSAyLjUgMiA0LjkgNCA2LjVzMyAzLjUgMyA1LjVhNi45OCA2Ljk4IDAgMCAxLTExLjkxIDQuOTciCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIERydW0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDItOCA4IiB9XSwKICAgICAgWyJlbGxpcHNlIiwgeyBjeDogIjEyIiwgY3k6ICI5Iiwgcng6ICIxMCIsIHJ5OiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEzLjR2Ny45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTMuNHY3LjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA5djhhMTAgNSAwIDAgMCAyMCAwVjkiIH1dCiAgICBdOwogICAgdmFyIERydW1zdGljayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjQgMTUuNjNhNy44NzUgNiAxMzUgMSAxIDYuMjMtNi4yMyA0LjUgMy40MyAxMzUgMCAwLTYuMjMgNi4yMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjI5IDEyLjcxLTIuNiAyLjZhMi41IDIuNSAwIDEgMC0xLjY1IDQuNjVBMi41IDIuNSAwIDEgMCA4LjcgMTguM2wyLjU5LTIuNTkiIH1dCiAgICBdOwogICAgdmFyIER1bWJiZWxsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuNTk2IDEyLjc2OGEyIDIgMCAxIDAgMi44MjktMi44MjlsLTEuNzY4LTEuNzY3YTIgMiAwIDAgMCAyLjgyOC0yLjgyOWwtMi44MjgtMi44MjhhMiAyIDAgMCAwLTIuODI5IDIuODI4bC0xLjc2Ny0xLjc2OGEyIDIgMCAxIDAtMi44MjkgMi44Mjl6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIuNSAyMS41IDEuNC0xLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuMSAzLjkgMS40LTEuNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01LjM0MyAyMS40ODVhMiAyIDAgMSAwIDIuODI5LTIuODI4bDEuNzY3IDEuNzY4YTIgMiAwIDEgMCAyLjgyOS0yLjgyOWwtNi4zNjQtNi4zNjRhMiAyIDAgMSAwLTIuODI5IDIuODI5bDEuNzY4IDEuNzY3YTIgMiAwIDAgMC0yLjgyOCAyLjgyOXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS42IDE0LjQgNC44LTQuOCIgfV0KICAgIF07CiAgICB2YXIgRWFyT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOC41YTMuNSAzLjUgMCAxIDAgNyAwYzAtMS41Ny45Mi0yLjUyIDIuMDQtMy40NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDguNWMwLS43NS4xMy0xLjQ3LjM2LTIuMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC44IDMuMTVBNi41IDYuNSAwIDAgMSAxOSA4LjVjMCAxLjYzLS40NCAyLjgxLTEuMDkgMy43NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi41IDZBMi41IDIuNSAwIDAgMSAxNSA4LjVNMTAgMTNhMiAyIDAgMCAwIDEuODItMS4xOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIEVhciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOC41YTYuNSA2LjUgMCAxIDEgMTMgMGMwIDYtNiA2LTYgMTBhMy41IDMuNSAwIDEgMS03IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOC41YTIuNSAyLjUgMCAwIDAtNSAwdjFhMiAyIDAgMSAxIDAgNCIgfV0KICAgIF07CiAgICB2YXIgRWFydGggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS41NCAxNUgxN2EyIDIgMCAwIDAtMiAydjQuNTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk03IDMuMzRWNWEzIDMgMCAwIDAgMyAzYTIgMiAwIDAgMSAyIDJjMCAxLjEuOSAyIDIgMmEyIDIgMCAwIDAgMi0yYzAtMS4xLjktMiAyLTJoMy4xNyIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjEuOTVWMThhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDEtMi0ydi0xYTIgMiAwIDAgMC0yLTJIMi4wNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgRWFydGhMb2NrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAzLjM0VjVhMyAzIDAgMCAwIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyMS45NVYxOGEyIDIgMCAwIDAtMi0yIDIgMiAwIDAgMS0yLTJ2LTFhMiAyIDAgMCAwLTItMkgyLjA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjU0IDE1SDE3YTIgMiAwIDAgMC0yIDJ2NC41NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyYTEwIDEwIDAgMSAwIDkuNTQgMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgNlY0YTIgMiAwIDEgMC00IDB2MiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHg6ICIxNCIsIHk6ICI2Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBFY2xpcHNlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmE3IDcgMCAxIDAgMTAgMTAiIH1dCiAgICBdOwogICAgdmFyIEVnZ0ZyaWVkID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMS41IiwgY3k6ICIxMi41IiwgcjogIjMuNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDhjMC0zLjUgMi41LTYgNi41LTYgNSAwIDQuODMgMyA3LjUgNXM1IDIgNSA2YzAgNC41LTIuNSA2LjUtNyA2LjUtMi41IDAtMi41IDIuNS02IDIuNXMtNy0yLTctNS41YzAtMyAxLjUtMyAxLjUtNUMzLjUgMTAgMyA5IDMgOFoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEVnZ09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNC4zNDdWMTRjMC02LTQtMTItOC0xMi0xLjA3OCAwLTIuMTU3LjQzNi0zLjE1NyAxLjE5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMjA2IDYuMjFDNC44NzEgOC40IDQgMTEuMiA0IDE0YTggOCAwIDAgMCAxNC41NjggNC41NjgiIH1dCiAgICBdOwogICAgdmFyIEVnZyA9IFtbInBhdGgiLCB7IGQ6ICJNMTIgMkM4IDIgNCA4IDQgMTRhOCA4IDAgMCAwIDE2IDBjMC02LTQtMTItOC0xMiIgfV1dOwogICAgdmFyIEVsbGlwc2lzVmVydGljYWwgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxOSIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBFbGxpcHNpcyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTIiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjEyIiwgcjogIjEiIH1dCiAgICBdOwogICAgdmFyIEVxdWFsQXBwcm94aW1hdGVseSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTVhNi41IDYuNSAwIDAgMSA3IDAgNi41IDYuNSAwIDAgMCA3IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA5YTYuNSA2LjUgMCAwIDEgNyAwIDYuNSA2LjUgMCAwIDAgNyAwIiB9XQogICAgXTsKICAgIHZhciBFcXVhbE5vdCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjUiLCB4MjogIjE5IiwgeTE6ICI5IiwgeTI6ICI5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjUiLCB4MjogIjE5IiwgeTE6ICIxNSIsIHkyOiAiMTUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTkiLCB4MjogIjUiLCB5MTogIjUiLCB5MjogIjE5IiB9XQogICAgXTsKICAgIHZhciBFcXVhbCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjUiLCB4MjogIjE5IiwgeTE6ICI5IiwgeTI6ICI5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjUiLCB4MjogIjE5IiwgeTE6ICIxNSIsIHkyOiAiMTUiIH1dCiAgICBdOwogICAgdmFyIEVyYXNlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDIxSDhhMiAyIDAgMCAxLTEuNDItLjU4N2wtMy45OTQtMy45OTlhMiAyIDAgMCAxIDAtMi44MjhsMTAtMTBhMiAyIDAgMCAxIDIuODI5IDBsNS45OTkgNmEyIDIgMCAwIDEgMCAyLjgyOEwxMi44MzQgMjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNS4wODIgMTEuMDkgOC44MjggOC44MjgiIH1dCiAgICBdOwogICAgdmFyIEV0aGVybmV0UG9ydCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJtMTUgMjAgMy0zaDJhMiAyIDAgMCAwIDItMlY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjlhMiAyIDAgMCAwIDIgMmgybDMgM3oiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDh2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA4djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOHYxIiB9XQogICAgXTsKICAgIHZhciBFdXJvID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMGgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0aDkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xOSA2YTcuNyA3LjcgMCAwIDAtNS4yLTJBNy45IDcuOSAwIDAgMCA2IDEyYzAgNC40IDMuNSA4IDcuOCA4IDIgMCAzLjgtLjggNS4yLTIiIH0KICAgICAgXQogICAgXTsKICAgIHZhciBFdkNoYXJnZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM2gyYTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDAgNCAwdi02Ljk5OGEyIDIgMCAwIDAtLjU5LTEuNDJMMTggNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3aDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEtMiAzaDNsLTIgMyIgfV0KICAgIF07CiAgICB2YXIgRXhwYW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTUgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDkgNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE2djVoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOFYzaC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTZ2NWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMjEgNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOFYzaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5IDMgMyIgfV0KICAgIF07CiAgICB2YXIgRXh0ZXJuYWxMaW5rID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM2g2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTQgMjEgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2IiB9XQogICAgXTsKICAgIHZhciBFeWVDbG9zZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxOC0uNzIyLTMuMjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4YTEwLjY0NSAxMC42NDUgMCAwIDAgMjAgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxNS0xLjcyNi0yLjA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQgMTUgMS43MjYtMi4wNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE4IC43MjItMy4yNSIgfV0KICAgIF07CiAgICB2YXIgRXllT2ZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuNzMzIDUuMDc2YTEwLjc0NCAxMC43NDQgMCAwIDEgMTEuMjA1IDYuNTc1IDEgMSAwIDAgMSAwIC42OTYgMTAuNzQ3IDEwLjc0NyAwIDAgMS0xLjQ0NCAyLjQ5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjA4NCAxNC4xNThhMyAzIDAgMCAxLTQuMjQyLTQuMjQyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjQ3OSAxNy40OTlhMTAuNzUgMTAuNzUgMCAwIDEtMTUuNDE3LTUuMTUxIDEgMSAwIDAgMSAwLS42OTYgMTAuNzUgMTAuNzUgMCAwIDEgNC40NDYtNS4xNDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICAgIHZhciBFeWUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjA2MiAxMi4zNDhhMSAxIDAgMCAxIDAtLjY5NiAxMC43NSAxMC43NSAwIDAgMSAxOS44NzYgMCAxIDEgMCAwIDEgMCAuNjk2IDEwLjc1IDEwLjc1IDAgMCAxLTE5Ljg3NiAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIEZhY2Vib29rID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMmgtM2E1IDUgMCAwIDAtNSA1djNIN3Y0aDN2OGg0di04aDNsMS00aC00VjdhMSAxIDAgMCAxIDEtMWgzeiIgfV0KICAgIF07CiAgICB2YXIgRmFjdG9yeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxOWEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJWOC41YS41LjUgMCAwIDAtLjc2OS0uNDIybC00LjQ2MiAyLjg0NEEuNS41IDAgMCAxIDE1IDEwLjV2LTJhLjUuNSAwIDAgMC0uNzY5LS40MjJMOS43NyAxMC45MjJBLjUuNSAwIDAgMSA5IDEwLjVWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmguMDEiIH1dCiAgICBdOwogICAgdmFyIEZhbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjgyNyAxNi4zNzlhNi4wODIgNi4wODIgMCAwIDEtOC42MTgtNy4wMDJsNS40MTIgMS40NWE2LjA4MiA2LjA4MiAwIDAgMSA3LjAwMi04LjYxOGwtMS40NSA1LjQxMmE2LjA4MiA2LjA4MiAwIDAgMSA4LjYxOCA3LjAwMmwtNS40MTItMS40NWE2LjA4MiA2LjA4MiAwIDAgMS03LjAwMiA4LjYxOGwxLjQ1LTUuNDEyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnYuMDEiIH1dCiAgICBdOwogICAgdmFyIEZhc3RGb3J3YXJkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAyIDE4eiIgfV0KICAgIF07CiAgICB2YXIgRmVuY2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDMgMiA1djE1YzAgLjYuNCAxIDEgMWgyYy42IDAgMS0uNCAxLTFWNVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDMtMiAydjE1YzAgLjYuNCAxIDEgMWgyYy42IDAgMS0uNCAxLTFWNVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgMy0yIDJ2MTVjMCAuNi40IDEgMSAxaDJjLjYgMCAxLS40IDEtMVY1WiIgfV0KICAgIF07CiAgICB2YXIgRmVhdGhlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjY3IDE5YTIgMiAwIDAgMCAxLjQxNi0uNTg4bDYuMTU0LTYuMTcyYTYgNiAwIDAgMC04LjQ5LTguNDlMNS41ODYgOS45MTRBMiAyIDAgMCAwIDUgMTEuMzI4VjE4YTEgMSAwIDAgMCAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDggMiAyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41IDE1SDkiIH1dCiAgICBdOwogICAgdmFyIEZlcnJpc1doZWVsID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi44IDE1LTMuNSAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjcgNy0zLjUgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjggOSAzLjMgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43IDE3LTMuNS0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMjIgMy04IDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTguN2E5IDkgMCAxIDAtMTIgMCIgfV0KICAgIF07CiAgICB2YXIgRmlnbWEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDUuNUEzLjUgMy41IDAgMCAxIDguNSAySDEydjdIOC41QTMuNSAzLjUgMCAwIDEgNSA1LjV6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJoMy41YTMuNSAzLjUgMCAxIDEgMCA3SDEyVjJ6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyLjVhMy41IDMuNSAwIDEgMSA3IDAgMy41IDMuNSAwIDEgMS03IDB6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTkuNUEzLjUgMy41IDAgMCAxIDguNSAxNkgxMnYzLjVhMy41IDMuNSAwIDEgMS03IDB6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuNUEzLjUgMy41IDAgMCAxIDguNSA5SDEydjdIOC41QTMuNSAzLjUgMCAwIDEgNSAxMi41eiIgfV0KICAgIF07CiAgICB2YXIgRmlsZUFyY2hpdmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy42NTkgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYxMS41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMnYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4di0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggN1Y2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMjAiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgRmlsZUF4aXMzZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE4IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwdjhoOCIgfV0KICAgIF07CiAgICB2YXIgRmlsZUJhZGdlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMgMjJoNWEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjMuMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTcuNjkgMTYuNDc5IDEuMjkgNC44OGEuNS41IDAgMCAxLS42OTguNTkxbC0xLjg0My0uODQ5YTEgMSAwIDAgMC0uODc5LjAwMWwtMS44NDYuODVhLjUuNSAwIDAgMS0uNjkyLS41OTNsMS4yOS00Ljg4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTQiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgRmlsZUJveCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0LjUgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYzLjgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS43IDE0LjIgNyAxN2wtNC43LTIuOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDEzLjFhMiAyIDAgMCAwLS45OTkgMS43NnYzLjI0YTIgMiAwIDAgMCAuOTY5IDEuNzhMNiAyMS43YTIgMiAwIDAgMCAyLjAzLjAxTDExIDE5LjlhMiAyIDAgMCAwIDEtMS43NlYxNC45YTIgMiAwIDAgMC0uOTctMS43OEw4IDExLjNhMiAyIDAgMCAwLTIuMDMtLjAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE3djUiIH1dCiAgICBdOwogICAgdmFyIEZpbGVCcmFjZXNDb3JuZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNCAyMmg0YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2NiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTRhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMS0xIDEgMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMCAxIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMmExIDEgMCAwIDAgMS0xdi0yYTEgMSAwIDAgMSAxLTEgMSAxIDAgMCAxLTEtMXYtMmExIDEgMCAwIDAtMS0xIiB9XQogICAgXTsKICAgIHZhciBGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTh2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTh2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTh2LTYiIH1dCiAgICBdOwogICAgdmFyIEZpbGVDaGFydENvbHVtbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4di0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4di02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE4di0zIiB9XQogICAgXTsKICAgIHZhciBGaWxlQnJhY2VzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEyYTEgMSAwIDAgMC0xIDF2MWExIDEgMCAwIDEtMSAxIDEgMSAwIDAgMSAxIDF2MWExIDEgMCAwIDAgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE4YTEgMSAwIDAgMCAxLTF2LTFhMSAxIDAgMCAxIDEtMSAxIDEgMCAwIDEtMS0xdi0xYTEgMSAwIDAgMC0xLTEiIH1dCiAgICBdOwogICAgdmFyIEZpbGVDaGFydExpbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTMtMy41IDMuNS0yLTJMOCAxNyIgfV0KICAgIF07CiAgICB2YXIgRmlsZUNoYXJ0UGllID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuOTQxIDIySDE4YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDRsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2My41MTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjAxNyAxMS41MTJhNiA2IDAgMSAwIDguNDY2IDguNDc1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTZhMSAxIDAgMCAxLTEtMXYtNGMwLS41NTIuNDUtMS4wMDguOTk1LS45MTdhNiA2IDAgMCAxIDQuOTIyIDQuOTIyYy4wOTEuNTQ0LS4zNjUuOTk1LS45MTcuOTk1eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRmlsZUNoZWNrQ29ybmVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuNSAyMkg2YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAyMCAyIDIgNC00IiB9XQogICAgXTsKICAgIHZhciBGaWxlQ2hlY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNSAyIDIgNC00IiB9XQogICAgXTsKICAgIHZhciBGaWxlQ2xvY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiAyMmgyYTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2Mi44NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2Mi4ybDEuNiAxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMTYiLCByOiAiNiIgfV0KICAgIF07CiAgICB2YXIgRmlsZUNvZGVDb3JuZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDEyLjE1VjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyaC0zLjM1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxNi0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMjIgMy0zLTMtMyIgfV0KICAgIF07CiAgICB2YXIgRmlsZUNvZGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTIuNSA4IDE1bDIgMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEyLjUgMiAyLjUtMiAyLjUiIH1dCiAgICBdOwogICAgdmFyIEZpbGVDb2cgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy44NSAyMkgxOGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLS41ODYtMS40MTRsLTQtNEEyIDIgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2Ni42IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMy4zMDUgMTkuNTMuOTIzLS4zODIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC4yMjggMTYuODUyLS45MjQtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01Ljg1MiAxNS4yMjgtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuODUyIDIwLjc3Mi0uMzgzLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjE0OCAxNS4yMjguMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41MyAyMS42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNzczIDE2Ljg1Mi45MjItLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05Ljc3MyAxOS4xNDguOTIyLjM4MyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjE4IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIEZpbGVEaWZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTNWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE3aDYiIH1dCiAgICBdOwogICAgdmFyIEZpbGVEaWdpdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNmgydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjJoNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMTYiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBGaWxlRG93biA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOHYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDMgMyAzLTMiIH1dCiAgICBdOwogICAgdmFyIEZpbGVFeGNsYW1hdGlvblBvaW50ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA5djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTdoLjAxIiB9XQogICAgXTsKICAgIHZhciBGaWxlSGVhZHBob25lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCA2LjgzNVY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtLjM0MyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMiAxOWEyIDIgMCAwIDEgNCAwdjFhMiAyIDAgMCAxLTQgMHYtNGE2IDYgMCAwIDEgMTIgMHY0YTIgMiAwIDAgMS00IDB2LTFhMiAyIDAgMCAxIDQgMCIgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZpbGVIZWFydCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzIDIyaDVhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnY3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy42MiAxOC44QTIuMjUgMi4yNSAwIDEgMSA3IDE1LjgzNmEyLjI1IDIuMjUgMCAxIDEgMy4zOCAyLjk2NmwtMi42MjYgMi44NTZhMSAxIDAgMCAxLTEuNTA3IDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGaWxlSW1hZ2UgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxNy0xLjI5Ni0xLjI5NmEyLjQxIDIuNDEgMCAwIDAtMy40MDggMEw5IDIyIiB9XQogICAgXTsKICAgIHZhciBGaWxlSW5wdXQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDExVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMnYtMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTVoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxOCAzLTMtMy0zIiB9XQogICAgXTsKICAgIHZhciBGaWxlS2V5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuNjUgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYxMC4xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMTUgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDE0LTQuNTg2IDQuNTg2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMjAiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgRmlsZUxvY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDkuOFY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTd2LTJhMiAyIDAgMCAwLTQgMHYyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI1IiwgeDogIjMiLCB5OiAiMTciLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIEZpbGVNaW51c0Nvcm5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDE0VjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOGg2IiB9XQogICAgXTsKICAgIHZhciBGaWxlTXVzaWMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS42NSAyMkgxOGEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjEwLjM1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMHYtN2wzIDEuNDc0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMjAiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgRmlsZU1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTVoNiIgfV0KICAgIF07CiAgICB2YXIgRmlsZU91dHB1dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQuMjI2IDIwLjkyNUEyIDIgMCAwIDAgNiAyMmgxMmEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjMuMTI3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxMS0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxNy0zLTNoMTAiIH1dCiAgICBdOwogICAgdmFyIEZpbGVQZW5MaW5lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTguMjI2IDUuMjI2LTIuNTItMi41MkEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtLjM1MSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggMTIuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGgxIiB9XQogICAgXTsKICAgIHZhciBGaWxlUGVuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuNjU5IDIySDE4YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2OS4zNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjM3OCAxMi42MjJhMSAxIDAgMCAxIDMgMy4wMDNMOC4zNiAyMC42MzdhMiAyIDAgMCAxLS44NTQuNTA2bC0yLjg2Ny44MzdhLjUuNSAwIDAgMS0uNjItLjYybC44MzYtMi44NjlhMiAyIDAgMCAxIC41MDYtLjg1M3oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZpbGVQbGF5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjAzMyAxMy40NGEuNjQ3LjY0NyAwIDAgMSAwIDEuMTJsLTQuMDY1IDIuMzUyYS42NDUuNjQ1IDAgMCAxLS45NjgtLjU2di00LjcwNGEuNjQ1LjY0NSAwIDAgMSAuOTY3LS41NnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZpbGVQbHVzQ29ybmVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMzUgMjJINmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHY1LjM1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNnY2IiB9XQogICAgXTsKICAgIHZhciBGaWxlUGx1cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTh2LTYiIH1dCiAgICBdOwogICAgdmFyIEZpbGVRdWVzdGlvbk1hcmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjEgOWEzIDMgMCAwIDEgNS44MiAxYzAgMi0zIDMtMyAzIiB9XQogICAgXTsKICAgIHZhciBGaWxlU2NhbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEwVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA0bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoNC4zNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0YTIgMiAwIDAgMC0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjJhMiAyIDAgMCAxLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNGEyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIyYTIgMiAwIDAgMCAyLTIiIH1dCiAgICBdOwogICAgdmFyIEZpbGVTZWFyY2hDb3JuZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS4xIDIySDZhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OSAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2My4yNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIyLTIuODgtMi44OCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxNyIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBGaWxlU2VhcmNoID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEuNSIsIGN5OiAiMTQuNSIsIHI6ICIyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuMyAxNi4zIDE1IDE4IiB9XQogICAgXTsKICAgIHZhciBGaWxlU2lnbmFsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjUgMTMuNWEyLjUgMi41IDAgMCAxIDAgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMmE1IDUgMCAwIDEgMCA2IiB9XQogICAgXTsKICAgIHZhciBGaWxlU2xpZGVycyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTF2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE3aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTZ2MiIgfV0KICAgIF07CiAgICB2YXIgRmlsZVNwcmVhZHNoZWV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTNoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM2gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTdoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxN2gyIiB9XQogICAgXTsKICAgIHZhciBGaWxlU3RhY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyMWExIDEgMCAwIDEtMSAxSDRhMSAxIDAgMCAxLTEtMXYtOGExIDEgMCAwIDEgMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2YTEgMSAwIDAgMS0xIDFIOWExIDEgMCAwIDEtMS0xVjhhMSAxIDAgMCAxIDEtMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSA2YTIgMiAwIDAgMC0uNTg2LTEuNDE0bC0yLTJBMiAyIDAgMCAwIDE3IDJoLTNhMSAxIDAgMCAwLTEgMXY4YTEgMSAwIDAgMCAxIDFoNmExIDEgMCAwIDAgMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRmlsZVN5bWxpbmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDExVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMnYtM2EyIDIgMCAwIDEgMi0yaDciCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxOCAzLTMtMy0zIiB9XQogICAgXTsKICAgIHZhciBGaWxlVGVybWluYWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxNiAyLTItMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4aDQiIH1dCiAgICBdOwogICAgdmFyIEZpbGVUZXh0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDlIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxM0g4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE3SDgiIH1dCiAgICBdOwogICAgdmFyIEZpbGVUeXBlQ29ybmVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMjJoNmEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE2di0xLjVhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgLjUuNVYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNHY4IiB9XQogICAgXTsKICAgIHZhciBGaWxlVHlwZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxOGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM3YtLjVhLjUuNSAwIDAgMSAuNS0uNWg1YS41LjUgMCAwIDEgLjUuNXYuNSIgfV0KICAgIF07CiAgICB2YXIgRmlsZVVwID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTUtMy0zLTMgMyIgfV0KICAgIF07CiAgICB2YXIgRmlsZVVzZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjJhNCA0IDAgMCAwLTggMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNSIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBGaWxlVmlkZW9DYW1lcmEgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDEyVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIm0xMCAxNy44NDMgMy4wMzMtMS43NTVhLjY0LjY0IDAgMCAxIC45NjcuNTZ2NC43MDRhLjY1LjY1IDAgMCAxLS45NjcuNTZMMTAgMjAuMTU3IiB9CiAgICAgIF0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNiIsIHg6ICIzIiwgeTogIjE2Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBGaWxlVm9sdW1lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAxMS41NVY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtMS45NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1YTUgNSAwIDAgMSAwIDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOCAxNC41MDJhLjUuNSAwIDAgMC0uODI2LS4zODFsLTEuODkzIDEuNjMxYTEgMSAwIDAgMS0uNjUxLjI0M0gzLjVhLjUuNSAwIDAgMC0uNS41MDF2My4wMDZhLjUuNSAwIDAgMCAuNS41MDFoMS4xMjlhMSAxIDAgMCAxIC42NTIuMjQzbDEuODkzIDEuNjMzYS41LjUgMCAwIDAgLjgyNi0uMzh6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGaWxlWENvcm5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDIySDZhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE3IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxNy01IDUiIH1dCiAgICBdOwogICAgdmFyIEZpbGVYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgMTIuNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDEyLjUgNSA1IiB9XQogICAgXTsKICAgIHZhciBGaWxlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XQogICAgXTsKICAgIHZhciBGaWxlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDJoLTRhMiAyIDAgMCAwLTIgMnYxMWEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjcwNiAyLjcwNkEyLjQgMi40IDAgMCAwIDE1IDJ2NWExIDEgMCAwIDAgMSAxaDVhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDdhMiAyIDAgMCAwLTIgMnYxMWEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDEuNzMyLTEiIH1dCiAgICBdOwogICAgdmFyIEZpbG0gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3LjVoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTYuNWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNy41aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTYuNWg0IiB9XQogICAgXTsKICAgIHZhciBGaW5nZXJwcmludFBhdHRlcm4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMGEyIDIgMCAwIDAtMiAyYzAgMS4wMi0uMSAyLjUxLS4yNiA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEzLjEyYzAgMi4zOCAwIDYuMzgtMSA4Ljg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjI5IDIxLjAyYy4xMi0uNi40My0yLjMuNS0zLjAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJhMTAgMTAgMCAwIDEgMTgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS44IDE2Yy4yLTIgLjEzMS01LjM1NCAwLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxOS41QzUuNSAxOCA2IDE1IDYgMTJhNiA2IDAgMCAxIC4zNC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNjUgMjJjLjIxLS42Ni40NS0xLjMyLjU3LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA2LjhhNiA2IDAgMCAxIDkgNS4ydjIiIH1dCiAgICBdOwogICAgdmFyIEZpcmVFeHRpbmd1aXNoZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA2LjVWM2ExIDEgMCAwIDAtMS0xaC0yYTEgMSAwIDAgMC0xIDF2My41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMThoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAzaC0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDNhNiA2IDAgMCAwLTYgNnYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEzaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTBhNCA0IDAgMCAwLTggMHYxMGEyIDIgMCAwIDAgMiAyaDRhMiAyIDAgMCAwIDItMloiIH1dCiAgICBdOwogICAgdmFyIEZpc2hPZmYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCAxMi40N3YuMDNtMC0uNXYuNDdtLS40NzUgNS4wNTZBNi43NDQgNi43NDQgMCAwIDEgMTUgMThjLTMuNTYgMC03LjU2LTIuNTMtOC41LTYgLjM0OC0xLjI4IDEuMTE0LTIuNDMzIDIuMTIxLTMuMzhtMy40NDQtMi4wODhBOC44MDIgOC44MDIgMCAwIDEgMTUgNmMzLjU2IDAgNi4wNiAyLjU0IDcgNi0uMzA5IDEuMTQtLjc4NiAyLjE3Ny0xLjQxMyAzLjA1OCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03IDEwLjY3QzcgOCA1LjU4IDUuOTcgMi43MyA1LjVjLTEgMS41LTEgNSAuMjMgNi41LTEuMjQgMS41LTEuMjQgNS0uMjMgNi41QzUuNTggMTguMDMgNyAxNiA3IDEzLjMzbTcuNDgtNC4zNzJBOS43NyA5Ljc3IDAgMCAxIDE2IDYuMDdtMCAxMS44NmE5Ljc3IDkuNzcgMCAwIDEtMS43MjgtMy42MTgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTYuMDEgMTcuOTMtLjIzIDEuNEEyIDIgMCAwIDEgMTMuOCAyMUg5LjVhNS45NiA1Ljk2IDAgMCAwIDEuNDktMy45OE04LjUzIDNoNS4yN2EyIDIgMCAwIDEgMS45OCAxLjY3bC4yMyAxLjRNMiAybDIwIDIwIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGaXNoU3ltYm9sID0gW1sicGF0aCIsIHsgZDogIk0yIDE2czktMTUgMjAtNEMxMSAyMyAyIDggMiA4IiB9XV07CiAgICB2YXIgRmlzaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYuNSAxMmMuOTQtMy40NiA0Ljk0LTYgOC41LTYgMy41NiAwIDYuMDYgMi41NCA3IDYtLjk0IDMuNDctMy40NCA2LTcgNnMtNy41Ni0yLjUzLTguNS02WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMnYuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNy45M2E5Ljc3IDkuNzcgMCAwIDEgMC0xMS44NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03IDEwLjY3QzcgOCA1LjU4IDUuOTcgMi43MyA1LjVjLTEgMS41LTEgNSAuMjMgNi41LTEuMjQgMS41LTEuMjQgNS0uMjMgNi41QzUuNTggMTguMDMgNyAxNiA3IDEzLjMzIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjQ2IDcuMjZDMTAuMiA1Ljg4IDkuMTcgNC4yNCA4IDNoNS44YTIgMiAwIDAgMSAxLjk4IDEuNjdsLjIzIDEuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi4wMSAxNy45My0uMjMgMS40QTIgMiAwIDAgMSAxMy44IDIxSDkuNWE1Ljk2IDUuOTYgMCAwIDAgMS40OS0zLjk4IiB9XQogICAgXTsKICAgIHZhciBGaXNoaW5nSG9vayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjU4NiAxMS40MTQtNS45MyA1LjkzYTEgMSAwIDAgMS04LThsMy4xMzctMy4xMzdhLjcwNy43MDcgMCAwIDEgMS4yMDcuNVYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC40MTQgOC41ODYgMjIgNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxMCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBGbGFnT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZjLTMgMC01LTItOC0yYTYgNiAwIDAgMC00IDEuNTI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIyVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy42NTYgMkg4YzMgMCA1IDIgNy4zMzMgMnEyIDAgMy4wNjctLjhBMSAxIDAgMCAxIDIwIDR2MTAuMzQ3IiB9XQogICAgXTsKICAgIHZhciBGbGFnVHJpYW5nbGVMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjJWMi44YS44LjggMCAwIDAtMS4xNy0uNzFMNS40NSA3Ljc4YS44LjggMCAwIDAgMCAxLjQ0TDE4IDE1LjUiIH1dCiAgICBdOwogICAgdmFyIEZsYWdUcmlhbmdsZVJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMlYyLjhhLjguOCAwIDAgMSAxLjE3LS43MWwxMS4zOCA1LjY5YS44LjggMCAwIDEgMCAxLjQ0TDYgMTUuNSIgfV0KICAgIF07CiAgICB2YXIgRmxhZyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMjJWNGExIDEgMCAwIDEgLjQtLjhBNiA2IDAgMCAxIDggMmMzIDAgNSAyIDcuMzMzIDJxMiAwIDMuMDY3LS44QTEgMSAwIDAgMSAyMCA0djEwYTEgMSAwIDAgMS0uNC44QTYgNiAwIDAgMSAxNiAxNmMtMyAwLTUtMi04LTJhNiA2IDAgMCAwLTQgMS41MjgiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZsYW1lS2luZGxpbmcgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiAyYzEgMyAyLjUgMy41IDMuNSA0LjVBNSA1IDAgMCAxIDE3IDEwYTUgNSAwIDEgMS0xMCAwYzAtLjMgMC0uNi4xLS45YTIgMiAwIDEgMCAzLjMtMkM4IDQuNSAxMSAyIDEyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMjIgMTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDE4IDE0IDQiIH1dCiAgICBdOwogICAgdmFyIEZsYW1lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgM3ExIDQgNCA2LjV0MyA1LjVhMSAxIDAgMCAxLTE0IDAgNSA1IDAgMCAxIDEtMyAxIDEgMCAwIDAgNSAwYzAtMi0xLjUtMy0xLjUtNXEwLTIgMi41LTQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZsYXNobGlnaHRPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS42NTIgNkgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM3YxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTYgMTZ2NGEyIDIgMCAwIDEtMiAyaC00YTIgMiAwIDAgMS0yLTJ2LThhNCA0IDAgMCAwLS44LTIuNGwtLjYtLjhBMyAzIDAgMCAxIDYgN1Y2IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy42NDkgMkgxN2ExIDEgMCAwIDEgMSAxdjRhMyAzIDAgMCAxLS42IDEuOGwtLjYuOGE0IDQgMCAwIDAtLjU1IDEuMDA3IiB9XQogICAgXTsKICAgIHZhciBGbGFzaGxpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTN2MSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAyYTEgMSAwIDAgMSAxIDF2NGEzIDMgMCAwIDEtLjYgMS44bC0uNi44QTQgNCAwIDAgMCAxNiAxMnY4YTIgMiAwIDAgMS0yIDJIMTBhMiAyIDAgMCAxLTItMnYtOGE0IDQgMCAwIDAtLjgtMi40bC0uNi0uOEEzIDMgMCAwIDEgNiA3VjNhMSAxIDAgMCAxIDEtMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA2aDEyIiB9XQogICAgXTsKICAgIHZhciBGbGFza0NvbmljYWxPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjIuMzQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2Ni4zNDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIwYTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMS43NTUtMi45Nmw1LjIyNy05LjU2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjQ1MyAxNUgxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjUgMmg3IiB9XQogICAgXTsKICAgIHZhciBGbGFza0NvbmljYWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNCAydjZhMiAyIDAgMCAwIC4yNDUuOTZsNS41MSAxMC4wOEEyIDIgMCAwIDEgMTggMjJINmEyIDIgMCAwIDEtMS43NTUtMi45Nmw1LjUxLTEwLjA4QTIgMiAwIDAgMCAxMCA4VjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi40NTMgMTVoMTEuMDk0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAyaDciIH1dCiAgICBdOwogICAgdmFyIEZsYXNrUm91bmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjYuMjkyYTcgNyAwIDEgMCA0IDBWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE1aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAyaDciIH1dCiAgICBdOwogICAgdmFyIEZsaXBIb3Jpem9udGFsMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgNyA1IDUtNSA1VjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgNy01IDUgNSA1VjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dCiAgICBdOwogICAgdmFyIEZsaXBIb3Jpem9udGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzSDVhMiAyIDAgMCAwLTIgMnYxNGMwIDEuMS45IDIgMiAyaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgM2gzYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMmgtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MiIgfV0KICAgIF07CiAgICB2YXIgRmxpcFZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOFY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTZ2M2EyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEySDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMmgtMiIgfV0KICAgIF07CiAgICB2YXIgRmxvd2VyMiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDVhMyAzIDAgMSAxIDMgM20tMy0zYTMgMyAwIDEgMC0zIDNtMy0zdjFNOSA4YTMgMyAwIDEgMCAzIDNNOSA4aDFtNSAwYTMgMyAwIDEgMS0zIDNtMy0zaC0xbS0yIDN2LTEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIyYzQuMiAwIDctMS42NjcgNy01LTQuMiAwLTcgMS42NjctNyA1WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMmMtNC4yIDAtNy0xLjY2Ny03LTUgNC4yIDAgNyAxLjY2NyA3IDVaIiB9XQogICAgXTsKICAgIHZhciBGbGlwVmVydGljYWwyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMy01IDUtNS01aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDIxLTUtNS01IDVoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMkgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEySDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTJoLTIiIH1dCiAgICBdOwogICAgdmFyIEZsb3dlciA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMTYuNUE0LjUgNC41IDAgMSAxIDcuNSAxMiA0LjUgNC41IDAgMSAxIDEyIDcuNWE0LjUgNC41IDAgMSAxIDQuNSA0LjUgNC41IDQuNSAwIDEgMS00LjUgNC41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDcuNVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNSAxMkg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjUgMTJIMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTYuNVYxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDggMS44OCAxLjg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjEyIDkuODggMTYgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE2IDEuODgtMS44OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4xMiAxNC4xMiAxNiAxNiIgfV0KICAgIF07CiAgICB2YXIgRm9jdXMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0KICAgIF07CiAgICB2YXIgRm9sZFZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOFYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE5LTMtMy0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNS0zIDMtMy0zIiB9XQogICAgXTsKICAgIHZhciBGb2xkSG9yaXpvbnRhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMmgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA5LTMgMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxNSAzLTMtMy0zIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJBcmNoaXZlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNSIsIGN5OiAiMTkiLCByOiAiMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC45IDE5LjhBMiAyIDAgMCAwIDIyIDE4VjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMmg1LjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTF2LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTd2LTIiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlckNsb2NrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2Mi4ybDEuNiAxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxNiIsIHI6ICI2IiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJDaGVjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEzIDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlckNsb3NlZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwaDIwIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJDb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTAuNSA4IDEzbDIgMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEwLjUgMiAyLjUtMiAyLjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGb2xkZXJDb2cgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4zIDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45OGEyIDIgMCAwIDEgMS42OS45bC42NiAxLjJBMiAyIDAgMCAwIDEyIDZoOGEyIDIgMCAwIDEgMiAydjMuMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4zMDUgMTkuNTMuOTIzLS4zODIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMjI4IDE2Ljg1Mi0uOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuODUyIDE1LjIyOC0uMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuODUyIDIwLjc3Mi0uMzgzLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4xNDggMTUuMjI4LjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjUzIDIxLjY5Ni0uMzgyLS45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDE2Ljg1Mi45MjQtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgMTkuMTQ4LjkyNC4zODMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyRG90ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAyMGgxNmEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45M2EyIDIgMCAwIDEtMS42Ni0uOWwtLjgyLTEuMkEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2MwIDEuMS45IDIgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMyIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJEb3duID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTMtMyAzLTMtMyIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyR2l0MiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE5YTUgNSAwIDAgMS01LTV2OCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEzIiwgY3k6ICIxMiIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMjAiLCBjeTogIjE5IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlckhlYXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuNjM4IDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2My40MTciCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQuNjIgMTguOEEyLjI1IDIuMjUgMCAxIDEgMTggMTUuODM2YTIuMjUgMi4yNSAwIDEgMSAzLjM4IDIuOTY2bC0yLjYyNiAyLjg1NmEuOTk4Ljk5OCAwIDAgMS0xLjUwNyAweiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRm9sZGVyR2l0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTNoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEzaDMiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlcklucHV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5VjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEzaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTYgMy0zLTMtMyIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyS2FuYmFuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAyMGgxNmEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45M2EyIDIgMCAwIDEtMS42Ni0uOWwtLjgyLTEuMkEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2MwIDEuMS45IDIgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwdjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMHY2IiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJMb2NrID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjUiLCB4OiAiMTQiLCB5OiAiMTciLCByeDogIjEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYyLjUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTd2LTJhMiAyIDAgMSAwLTQgMHYyIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJLZXkgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIyMCIsIHI6ICIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwIDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2MiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxNC00LjUgNC41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE1IDEgMSIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEzaDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGb2xkZXJPcGVuRG90ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNiAxNCAxLjQ1LTIuOUEyIDIgMCAwIDEgOS4yNCAxMEgyMGEyIDIgMCAwIDEgMS45NCAyLjVsLTEuNTUgNmEyIDIgMCAwIDEtMS45NCAxLjVINGEyIDIgMCAwIDEtMi0yVjVjMC0xLjEuOS0yIDItMmgzLjkzYTIgMiAwIDAgMSAxLjY2LjlsLjgyIDEuMmEyIDIgMCAwIDAgMS42Ni45SDE4YTIgMiAwIDAgMSAyIDJ2MiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE0IiwgY3k6ICIxNSIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJPcGVuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNiAxNCAxLjUtMi45QTIgMiAwIDAgMSA5LjI0IDEwSDIwYTIgMiAwIDAgMSAxLjk0IDIuNWwtMS41NCA2YTIgMiAwIDAgMS0xLjk1IDEuNUg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgxOGEyIDIgMCAwIDEgMiAydjIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEZvbGRlck91dHB1dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgNy41VjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMS41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTNoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxMC0zIDMgMyAzIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJQZW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDExLjVWNWEyIDIgMCAwIDEgMi0yaDMuOWMuNyAwIDEuMy4zIDEuNy45bC44IDEuMmMuNC42IDEgLjkgMS43LjlIMjBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAyaC05LjUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMzc4IDEzLjYyNmExIDEgMCAxIDAtMy4wMDQtMy4wMDRsLTUuMDEgNS4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGb2xkZXJQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTB2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEzaDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGb2xkZXJSb290ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAyMGgxNmEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45M2EyIDIgMCAwIDEtMS42Ni0uOWwtLjgyLTEuMkEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2MwIDEuMS45IDIgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMyIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1djUiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlclNlYXJjaDIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjExLjUiLCBjeTogIjEyLjUiLCByOiAiMi41IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy4zIDE0LjMgMTUgMTYiIH1dCiAgICBdOwogICAgdmFyIEZvbGRlclNlYXJjaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjcgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnY0LjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtMS45LTEuOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxNyIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJTeW1saW5rID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5LjM1VjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtM2EyIDIgMCAwIDEgMi0yaDciCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxNiAzLTMtMy0zIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJTeW5jID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSAyMEg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAydi41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjRoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNCAxLjUzNS0xLjYwNWE1IDUgMCAwIDEgOCAxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjJ2LTRoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTgtMS41MzUgMS42MDVhNSA1IDAgMCAxLTgtMS41IiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJUcmVlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTBhMSAxIDAgMCAwIDEtMVY2YTEgMSAwIDAgMC0xLTFoLTIuNWExIDEgMCAwIDEtLjgtLjRsLS45LTEuMkExIDEgMCAwIDAgMTUgM2gtMmExIDEgMCAwIDAtMSAxdjVhMSAxIDAgMCAwIDEgMVoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjFhMSAxIDAgMCAwIDEtMXYtM2ExIDEgMCAwIDAtMS0xaC0yLjlhMSAxIDAgMCAxLS44OC0uNTVsLS40Mi0uODVhMSAxIDAgMCAwLS45Mi0uNkgxM2ExIDEgMCAwIDAtMSAxdjVhMSAxIDAgMCAwIDEgMVoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1YTIgMiAwIDAgMCAyIDJoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTNhMiAyIDAgMCAwIDIgMmgzIiB9XQogICAgXTsKICAgIHZhciBGb2xkZXJVcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMHY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTMgMy0zIDMgMyIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyWCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjUgMTAuNSA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSAxMC41LTUgNSIgfV0KICAgIF07CiAgICB2YXIgRm9sZGVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBGb2xkZXJzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgNWEyIDIgMCAwIDEgMiAydjdhMiAyIDAgMCAxLTIgMkg5YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDIuNWExLjUgMS41IDAgMCAxIDEuMi42bC42LjhhMS41IDEuNSAwIDAgMCAxLjIuNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA4LjI2OGEyIDIgMCAwIDAtMSAxLjczOFYxOWEyIDIgMCAwIDAgMiAyaDExYTIgMiAwIDAgMCAxLjczMi0xIiB9XQogICAgXTsKICAgIHZhciBGb290cHJpbnRzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAxNnYtMi4zOEM0IDExLjUgMi45NyAxMC41IDMgOGMuMDMtMi43MiAxLjQ5LTYgNC41LTZDOS4zNyAyIDEwIDMuOCAxMCA1LjVjMCAzLjExLTIgNS42Ni0yIDguNjhWMTZhMiAyIDAgMSAxLTQgMFoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjB2LTIuMzhjMC0yLjEyIDEuMDMtMy4xMiAxLTUuNjItLjAzLTIuNzItMS40OS02LTQuNS02QzE0LjYzIDYgMTQgNy44IDE0IDkuNWMwIDMuMTEgMiA1LjY2IDIgOC42OFYyMGEyIDIgMCAxIDAgNCAwWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxN2g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTNoNCIgfV0KICAgIF07CiAgICB2YXIgRm9ya2xpZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMkg1YTIgMiAwIDAgMC0yIDJ2NSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEzIiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE5aDNtNS0xN3YxN2g2TTYgMTJWN2MwLTEuMS45LTIgMi0yaDNsNSA1IiB9XQogICAgXTsKICAgIHZhciBGb3JtID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMmgxMCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjQiLCB5OiAiMTgiLCB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjQiLCB5OiAiNiIsIHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICI0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBGb3J3YXJkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTcgNS01LTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE4di0yYTQgNCAwIDAgMSA0LTRoMTIiIH1dCiAgICBdOwogICAgdmFyIEZyYW1lID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMjIiLCB4MjogIjIiLCB5MTogIjYiLCB5MjogIjYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjIiLCB4MjogIjIiLCB5MTogIjE4IiwgeTI6ICIxOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI2IiwgeDI6ICI2IiwgeTE6ICIyIiwgeTI6ICIyMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxOCIsIHgyOiAiMTgiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICAgIHZhciBGcmFtZXIgPSBbWyJwYXRoIiwgeyBkOiAiTTUgMTZWOWgxNFYySDVsMTQgMTRoLTdtLTcgMCA3IDd2LTdtLTcgMGg3IiB9XV07CiAgICB2YXIgRnJvd24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNnMtMS41LTItNC0yLTQgMi00IDIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiOS4wMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dCiAgICBdOwogICAgdmFyIEZ1ZWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM2gyYTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDAgNCAwdi02Ljk5OGEyIDIgMCAwIDAtLjU5LTEuNDJMMTggNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDExIiB9XQogICAgXTsKICAgIHZhciBGdWxsc2NyZWVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiOCIsIHg6ICI3IiwgeTogIjgiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIEZ1bm5lbFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy4zNTQgM0gzYTEgMSAwIDAgMC0uNzQyIDEuNjdsNy4yMjUgNy45ODlBMiAyIDAgMCAxIDEwIDE0djZhMSAxIDAgMCAwIC41NTMuODk1bDIgMUExIDEgMCAwIDAgMTQgMjF2LTdhMiAyIDAgMCAxIC41MTctMS4zNDFsMS4yMTgtMS4zNDgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDN2NiIgfV0KICAgIF07CiAgICB2YXIgRnVubmVsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAgMjBhMSAxIDAgMCAwIC41NTMuODk1bDIgMUExIDEgMCAwIDAgMTQgMjF2LTdhMiAyIDAgMCAxIC41MTctMS4zNDFMMjEuNzQgNC42N0ExIDEgMCAwIDAgMjEgM0gzYTEgMSAwIDAgMC0uNzQyIDEuNjdsNy4yMjUgNy45ODlBMiAyIDAgMCAxIDEwIDE0eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgRnVubmVsWCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjUzMSAzSDNhMSAxIDAgMCAwLS43NDIgMS42N2w3LjIyNSA3Ljk4OUEyIDIgMCAwIDEgMTAgMTR2NmExIDEgMCAwIDAgLjU1My44OTVsMiAxQTEgMSAwIDAgMCAxNCAyMXYtN2EyIDIgMCAwIDEgLjUxNy0xLjM0MWwuNDI3LS40NzMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuNSAzLjUgNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxLjUgMy41LTUgNSIgfV0KICAgIF07CiAgICB2YXIgR2FsbGVyeUhvcml6b250YWxFbmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA1djE0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEyIiwgaGVpZ2h0OiAiMTgiLCB4OiAiMTAiLCB5OiAiMyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgR2FsbGVyeUhvcml6b250YWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDN2MTgiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICIxOCIsIHg6ICI2IiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgM3YxOCIgfV0KICAgIF07CiAgICB2YXIgR2FsbGVyeVRodW1ibmFpbHMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE0IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjFoMSIgfV0KICAgIF07CiAgICB2YXIgR2FsbGVyeVZlcnRpY2FsRW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgNmgxNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgeDogIjMiLCB5OiAiMTAiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIEdhbGxlcnlWZXJ0aWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMmgxOCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgeDogIjMiLCB5OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIyaDE4IiB9XQogICAgXTsKICAgIHZhciBHYW1lcGFkMiA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjEwIiwgeTE6ICIxMSIsIHkyOiAiMTEiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiOCIsIHkxOiAiOSIsIHkyOiAiMTMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjE1LjAxIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTgiLCB4MjogIjE4LjAxIiwgeTE6ICIxMCIsIHkyOiAiMTAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuMzIgNUg2LjY4YTQgNCAwIDAgMC0zLjk3OCAzLjU5Yy0uMDA2LjA1Mi0uMDEuMTAxLS4wMTcuMTUyQzIuNjA0IDkuNDE2IDIgMTQuNDU2IDIgMTZhMyAzIDAgMCAwIDMgM2MxIDAgMS41LS41IDItMWwxLjQxNC0xLjQxNEEyIDIgMCAwIDEgOS44MjggMTZoNC4zNDRhMiAyIDAgMCAxIDEuNDE0LjU4NkwxNyAxOGMuNS41IDEgMSAyIDFhMyAzIDAgMCAwIDMtM2MwLTEuNTQ1LS42MDQtNi41ODQtLjY4NS03LjI1OC0uMDA3LS4wNS0uMDExLS4xLS4wMTctLjE1MUE0IDQgMCAwIDAgMTcuMzIgNXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEdhbWVwYWREaXJlY3Rpb25hbCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjE0NiAxNS44NTRhMS4yMDcgMS4yMDcgMCAwIDEgMS43MDggMGwxLjU2IDEuNTZBMiAyIDAgMCAxIDE1IDE4LjgyOFYyMWExIDEgMCAwIDEtMSAxaC00YTEgMSAwIDAgMS0xLTF2LTIuMTcyYTIgMiAwIDAgMSAuNTg2LTEuNDE0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOC44MjggMTVhMiAyIDAgMCAxLTEuNDE0LS41ODZsLTEuNTYtMS41NmExLjIwNyAxLjIwNyAwIDAgMSAwLTEuNzA4bDEuNTYtMS41NkEyIDIgMCAwIDEgMTguODI4IDlIMjFhMSAxIDAgMCAxIDEgMXY0YTEgMSAwIDAgMS0xIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYuNTg2IDE0LjQxNEEyIDIgMCAwIDEgNS4xNzIgMTVIM2ExIDEgMCAwIDEtMS0xdi00YTEgMSAwIDAgMSAxLTFoMi4xNzJhMiAyIDAgMCAxIDEuNDE0LjU4NmwxLjU2IDEuNTZhMS4yMDcgMS4yMDcgMCAwIDEgMCAxLjcwOHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSAzYTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMSAxdjIuMTcyYTIgMiAwIDAgMS0uNTg2IDEuNDE0bC0xLjU2IDEuNTZhMS4yMDcgMS4yMDcgMCAwIDEtMS43MDggMGwtMS41Ni0xLjU2QTIgMiAwIDAgMSA5IDUuMTcyeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgR2FtZXBhZCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjEwIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiOCIsIHkxOiAiMTAiLCB5MjogIjE0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIxNS4wMSIsIHkxOiAiMTMiLCB5MjogIjEzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE4IiwgeDI6ICIxOC4wMSIsIHkxOiAiMTEiLCB5MjogIjExIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTIiLCB4OiAiMiIsIHk6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBHYXVnZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDE0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjM0IDE5YTEwIDEwIDAgMSAxIDE3LjMyIDAiIH1dCiAgICBdOwogICAgdmFyIEdhdmVsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTMtOC4zODEgOC4zOGExIDEgMCAwIDEtMy4wMDEtM2w4LjM4NC04LjM4MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNiA2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEuNSAxMC41LTgtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDggNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguNSA3LjUgOCA4IiB9XQogICAgXTsKICAgIHZhciBHZW0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC41IDMgOCA5bDQgMTMgNC0xMy0yLjUtNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAzYTIgMiAwIDAgMSAxLjYuOGwzIDRhMiAyIDAgMCAxIC4wMTMgMi4zODJsLTcuOTkgMTAuOTg2YTIgMiAwIDAgMS0zLjI0NyAwbC03Ljk5LTEwLjk4NkEyIDIgMCAwIDEgMi40IDcuOGwyLjk5OC0zLjk5N0EyIDIgMCAwIDEgNyAzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloMjAiIH1dCiAgICBdOwogICAgdmFyIEdlb3JnaWFuTGFyaSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjUgMjFhNy41IDcuNSAwIDEgMSA3LjM1LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTJWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIxaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJWMyIgfV0KICAgIF07CiAgICB2YXIgR2hvc3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmE4IDggMCAwIDAtOCA4djEybDMtMyAyLjUgMi41TDEyIDE5bDIuNSAyLjVMMTcgMTlsMyAzVjEwYTggOCAwIDAgMC04LTh6IiB9XQogICAgXTsKICAgIHZhciBHaWZ0ID0gWwogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjgiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEydjdhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJ2LTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy41IDhhMi41IDIuNSAwIDAgMSAwLTVBNC44IDggMCAwIDEgMTIgOGE0LjggOCAwIDAgMSA0LjUtNSAyLjUgMi41IDAgMCAxIDAgNSIgfV0KICAgIF07CiAgICB2YXIgR2l0QnJhbmNoTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA2YTkgOSAwIDAgMC05IDlWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOGgtNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBHaXRCcmFuY2hQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAzdjEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDlhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIxYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNmE5IDkgMCAwIDAtOSA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE1djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMThoLTYiIH1dCiAgICBdOwogICAgdmFyIEdpdEJyYW5jaCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjYiLCB5MTogIjMiLCB5MjogIjE1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjE4IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOWE5IDkgMCAwIDEtOSA5IiB9XQogICAgXTsKICAgIHZhciBHaXRDb21taXRIb3Jpem9udGFsID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIzIiwgeDI6ICI5IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjIxIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dCiAgICBdOwogICAgdmFyIEdpdENvbW1pdFZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3Y2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTV2NiIgfV0KICAgIF07CiAgICB2YXIgR2l0Q29tcGFyZUFycm93cyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZoNWEyIDIgMCAwIDEgMiAydjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS0zLTMgMy0zIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjE4IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThIN2EyIDIgMCAwIDEtMi0yVjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNSAzIDMtMyAzIiB9XQogICAgXTsKICAgIHZhciBHaXRDb21wYXJlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA2aDNhMiAyIDAgMCAxIDIgMnY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE4SDhhMiAyIDAgMCAxLTItMlY5IiB9XQogICAgXTsKICAgIHZhciBHaXRGb3JrID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOXYyYzAgLjYtLjQgMS0xIDFIN2MtLjYgMC0xLS40LTEtMVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjMiIH1dCiAgICBdOwogICAgdmFyIEdpdEdyYXBoID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA5djYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE1LjdBOSA5IDAgMCAwIDE5IDkiIH1dCiAgICBdOwogICAgdmFyIEdpdE1lcmdlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIxVjlhOSA5IDAgMCAwIDkgOSIgfV0KICAgIF07CiAgICB2YXIgR2l0UHVsbFJlcXVlc3RBcnJvdyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgOXYxMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDktMy0zIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2aDVhMiAyIDAgMCAxIDIgMnY3IiB9XQogICAgXTsKICAgIHZhciBHaXRQdWxsUmVxdWVzdENsb3NlZCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOXYxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSA5LTYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMS41VjE1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIEdpdFB1bGxSZXF1ZXN0Q3JlYXRlQXJyb3cgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDl2MTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS0zLTMgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZoNWEyIDIgMCAwIDEgMiAydjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTV2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOGgtNiIgfV0KICAgIF07CiAgICB2YXIgR2l0UHVsbFJlcXVlc3RDcmVhdGUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDl2MTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNmgzYTIgMiAwIDAgMSAyIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE4aC02IiB9XQogICAgXTsKICAgIHZhciBHaXRQdWxsUmVxdWVzdERyYWZ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTF2LTEiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNiIsIHkxOiAiOSIsIHkyOiAiMjEiIH1dCiAgICBdOwogICAgdmFyIEdpdFB1bGxSZXF1ZXN0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA2aDNhMiAyIDAgMCAxIDIgMnY3IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjYiLCB5MTogIjkiLCB5MjogIjIxIiB9XQogICAgXTsKICAgIHZhciBHaXRodWIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSAyMnYtNGE0LjggNC44IDAgMCAwLTEtMy41YzMgMCA2LTIgNi01LjUuMDgtMS4yNS0uMjctMi40OC0xLTMuNS4yOC0xLjE1LjI4LTIuMzUgMC0zLjUgMCAwLTEgMC0zIDEuNS0yLjY0LS41LTUuMzYtLjUtOCAwQzYgMiA1IDIgNSAyYy0uMyAxLjE1LS4zIDIuMzUgMCAzLjVBNS40MDMgNS40MDMgMCAwIDAgNCA5YzAgMy41IDMgNS41IDYgNS41LS4zOS40OS0uNjggMS4wNS0uODUgMS42NS0uMTcuNi0uMjIgMS4yMy0uMTUgMS44NXY0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMThjLTQuNTEgMi01LTItNy0yIiB9XQogICAgXTsKICAgIHZhciBHaXRsYWIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0yMiAxMy4yOS0zLjMzLTEwYS40Mi40MiAwIDAgMC0uMTQtLjE4LjM4LjM4IDAgMCAwLS4yMi0uMTEuMzkuMzkgMCAwIDAtLjIzLjA3LjQyLjQyIDAgMCAwLS4xNC4xOGwtMi4yNiA2LjY3SDguMzJMNi4xIDMuMjZhLjQyLjQyIDAgMCAwLS4xLS4xOC4zOC4zOCAwIDAgMC0uMjYtLjA4LjM5LjM5IDAgMCAwLS4yMy4wNy40Mi40MiAwIDAgMC0uMTQuMThMMiAxMy4yOWEuNzQuNzQgMCAwIDAgLjI3LjgzTDEyIDIxbDkuNjktNi44OGEuNzEuNzEgMCAwIDAgLjMxLS44M1oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEdsYXNzV2F0ZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01LjExNiA0LjEwNEExIDEgMCAwIDEgNi4xMSAzaDExLjc4YTEgMSAwIDAgMSAuOTk0IDEuMTA1TDE3LjE5IDIwLjIxQTIgMiAwIDAgMSAxNS4yIDIySDguOGEyIDIgMCAwIDEtMi0xLjc5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyYTUgNSAwIDAgMSA2IDAgNSA1IDAgMCAwIDYgMCIgfV0KICAgIF07CiAgICB2YXIgR2xhc3NlcyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTUiLCByOiAiNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxNSIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE1YTIgMiAwIDAgMC0yLTIgMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yLjUgMTMgNSA3Yy43LTEuMyAxLjQtMiAzLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEuNSAxMyAxOSA3Yy0uNy0xLjMtMS41LTItMy0yIiB9XQogICAgXTsKICAgIHZhciBHbG9iZVggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAzIDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIwQTEwIDEwIDAgMSAxIDEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDQtMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMy01IDUiIH1dCiAgICBdOwogICAgdmFyIEdsb2JlTG9jayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjY4NiAxNUExNC41IDE0LjUgMCAwIDEgMTIgMjJhMTQuNSAxNC41IDAgMCAxIDAtMjAgMTAgMTAgMCAxIDAgOS41NDIgMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmg4LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgNlY0YTIgMiAwIDEgMC00IDB2MiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHg6ICIxNCIsIHk6ICI2Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBHbG9iZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyMCIgfV0KICAgIF07CiAgICB2YXIgR29hbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzVjJsOCA0LTggNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC41NjEgMTAuMjIyYTkgOSAwIDEgMS0xMi41NS01LjI5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMDAyIDkuOTk3YTUgNSAwIDEgMCA4LjkgMi4wMiIgfV0KICAgIF07CiAgICB2YXIgR3B1ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNWgxOGEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMkgyLjI2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTd2M2ExIDEgMCAwIDAgMSAxaDVhMSAxIDAgMCAwIDEtMXYtMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxMSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMTEiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgR3JhZHVhdGlvbkNhcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjQyIDEwLjkyMmExIDEgMCAwIDAtLjAxOS0xLjgzOEwxMi44MyA1LjE4YTIgMiAwIDAgMC0xLjY2IDBMMi42IDkuMDhhMSAxIDAgMCAwIDAgMS44MzJsOC41NyAzLjkwOGEyIDIgMCAwIDAgMS42NiAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMHY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTIuNVYxNmE2IDMgMCAwIDAgMTIgMHYtMy41IiB9XQogICAgXTsKICAgIHZhciBHcmFwZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDVWMmwtNS44OSA1Ljg5IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYuNiIsIGN5OiAiMTUuODkiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjguMTEiLCBjeTogIjcuNCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIuMzUiLCBjeTogIjExLjY1IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMy45MSIsIGN5OiAiNS44NSIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTguMTUiLCBjeTogIjEwLjA5IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2LjU2IiwgY3k6ICIxMy4yIiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMC44IiwgY3k6ICIxNy40NCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgR3JpZDJ4MkNoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgM3YxN2ExIDEgMCAwIDEtMSAxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY2YTEgMSAwIDAgMS0xIDFIMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxOSAyIDIgNC00IiB9XQogICAgXTsKICAgIHZhciBHcmlkMngyUGx1cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDN2MTdhMSAxIDAgMCAxLTEgMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2NmExIDEgMCAwIDEtMSAxSDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMnYtNiIgfV0KICAgIF07CiAgICB2YXIgR3JpZDN4MiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDN2MTgiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIEdyaWQyeDJYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgM3YxN2ExIDEgMCAwIDEtMSAxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY2YTEgMSAwIDAgMS0xIDFIMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNiA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMjEgNS01IiB9XQogICAgXTsKICAgIHZhciBHcmlkMngyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBHcmlkM3gzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzdjE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dCiAgICBdOwogICAgdmFyIEdyaXBIb3Jpem9udGFsID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjkiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjkiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjE1IiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxNSIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBHcmlwVmVydGljYWwgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI1IiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIxOSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNSIsIGN5OiAiNSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjE5IiwgcjogIjEiIH1dCiAgICBdOwogICAgdmFyIEdyaXAgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI1IiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiNSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiNSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTIiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTkiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxOSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgR3JvdXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWMwLTEuMS45LTIgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYzEuMSAwIDIgLjkgMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmMwIDEuMS0uOSAyLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVjLTEuMSAwLTItLjktMi0ydi0yIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI1IiwgeDogIjciLCB5OiAiNyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNSIsIHg6ICIxMCIsIHk6ICIxMiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgR3VpdGFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEuOSAxMi4xIDQuNTE0LTQuNTE0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwLjEgMi4zYTEgMSAwIDAgMC0xLjQgMGwtMS4xMTQgMS4xMTRBMiAyIDAgMCAwIDE3IDQuODI4djEuMzQ0YTIgMiAwIDAgMS0uNTg2IDEuNDE0QTIgMiAwIDAgMSAxNy44MjggN2gxLjM0NGEyIDIgMCAwIDAgMS40MTQtLjU4NkwyMS43IDUuM2ExIDEgMCAwIDAgMC0xLjR6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMTYgMiAyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguMjMgOS44NUEzIDMgMCAwIDEgMTEgOGE1IDUgMCAwIDEgNSA1IDMgMyAwIDAgMS0xLjg1IDIuNzdsLS45Mi4zOEEyIDIgMCAwIDAgMTIgMThhNCA0IDAgMCAxLTQgNCA2IDYgMCAwIDEtNi02IDQgNCAwIDAgMSA0LTQgMiAyIDAgMCAwIDEuODUtMS4yM3oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhhbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjE0NCAyMS4xNDRBNy4yNzQgMTAuNDQ1IDQ1IDEgMCAyLjg1NiAxMC44NTYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMy4xNDQgMjEuMTQ0QTcuMjc0IDQuMzY1IDQ1IDAgMCAyLjg1NiAxMC44NTZhNy4yNzQgNC4zNjUgNDUgMCAwIDEwLjI4OCAxMC4yODgiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjU2NSAxMC40MzUgMTguNiA4LjRhMi41MDEgMi41MDEgMCAxIDAgMS42NS00LjY1IDIuNSAyLjUgMCAxIDAtNC42NiAxLjY2bC0yLjAyNCAyLjAyNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjUgMTYuNS0xLTEiIH1dCiAgICBdOwogICAgdmFyIEhhbWJ1cmdlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2SDRhMiAyIDAgMSAxIDAtNGgxNmEyIDIgMCAxIDEgMCA0aC00LjI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTJhMiAyIDAgMCAxLTItMiA5IDcgMCAwIDEgMTggMCAyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTZhMiAyIDAgMCAwLTIgMiAzIDMgMCAwIDAgMyAzaDEyYTMgMyAwIDAgMCAzLTMgMiAyIDAgMCAwLTItMnEwIDAgMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuNjcgMTIgNi4xMyA0LjZhMiAyIDAgMCAwIDIuOC0uNGwzLjE1LTQuMiIgfV0KICAgIF07CiAgICB2YXIgSGFtbWVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTItOS4zNzMgOS4zNzNhMSAxIDAgMCAxLTMuMDAxLTNMMTIgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNSA0LTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMjEuNSAxMS41LTEuOTE0LTEuOTE0QTIgMiAwIDAgMSAxOSA4LjE3MnYtLjM0NGEyIDIgMCAwIDAtLjU4Ni0xLjQxNGwtMS42NTctMS42NTdBNiA2IDAgMCAwIDEyLjUxNiAzSDlsMS4yNDMgMS4yNDNBNiA2IDAgMCAxIDEyIDguNDg1VjEwbDIgMmgxLjE3MmEyIDIgMCAwIDEgMS40MTQuNTg2TDE4LjUgMTQuNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSGFuZENvaW5zID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTVoMmEyIDIgMCAxIDAgMC00aC0zYy0uNiAwLTEuMS4yLTEuNC42TDMgMTciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNyAyMSAxLjYtMS40Yy4zLS40LjgtLjYgMS40LS42aDRjMS4xIDAgMi4xLS40IDIuOC0xLjJsNC42LTQuNGEyIDIgMCAwIDAtMi43NS0yLjkxbC00LjIgMy45IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMTYgNiA2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjkiLCByOiAiMi45IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiNSIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBIYW5kRmlzdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjAzNSAxNy4wMTJhMyAzIDAgMCAwLTMtM2wtLjMxMS0uMDAyYS43Mi43MiAwIDAgMS0uNTA1LTEuMjI5bDEuMTk1LTEuMTk1QTIgMiAwIDAgMSAxMC44MjggMTFIMTJhMiAyIDAgMCAwIDAtNEg5LjI0M2EzIDMgMCAwIDAtMi4xMjIuODc5bC0yLjcwNyAyLjcwN0E0LjgzIDQuODMgMCAwIDAgMyAxNGE4IDggMCAwIDAgOCA4aDJhOCA4IDAgMCAwIDgtOFY3YTIgMiAwIDEgMC00IDB2MmEyIDIgMCAxIDAgNCAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjg4OCA5LjY2MkEyIDIgMCAwIDAgMTcgOFY1QTIgMiAwIDEgMCAxMyA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNUEyIDIgMCAxIDAgNSA1VjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgN1Y0QTIgMiAwIDEgMSAxMyA0VjcuMjY4IiB9XQogICAgXTsKICAgIHZhciBIYW5kR3JhYiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExLjVWOWEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDJ2MS40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwVjhhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOS45VjlhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNGEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTFhMiAyIDAgMSAxIDQgMHYzYTggOCAwIDAgMS04IDhoLTRhOCA4IDAgMCAxLTgtOCAyIDIgMCAxIDEgNCAwIiB9XQogICAgXTsKICAgIHZhciBIYW5kSGVhcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxNGgyYTIgMiAwIDAgMCAwLTRoLTNjLS42IDAtMS4xLjItMS40LjZMMyAxNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNC40NSAxMy4zOSA1LjA1LTQuNjk0QzIwLjE5NiA4IDIxIDYuODUgMjEgNS43NWEyLjc1IDIuNzUgMCAwIDAtNC43OTctMS44MzcuMjc2LjI3NiAwIDAgMS0uNDA2IDBBMi43NSAyLjc1IDAgMCAwIDExIDUuNzVjMCAxLjIuODAyIDIuMjQ4IDEuNSAyLjk0NkwxNiAxMS45NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE1IDYgNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAibTcgMjAgMS42LTEuNGMuMy0uNC44LS42IDEuNC0uNmg0YzEuMSAwIDIuMS0uNCAyLjgtMS4ybDQuNi00LjRhMSAxIDAgMCAwLTIuNzUtMi45MSIgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhhbmRIZWxwaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTJoMmEyIDIgMCAxIDAgMC00aC0zYy0uNiAwLTEuMS4yLTEuNC42TDMgMTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNyAxOCAxLjYtMS40Yy4zLS40LjgtLjYgMS40LS42aDRjMS4xIDAgMi4xLS40IDIuOC0xLjJsNC42LTQuNGEyIDIgMCAwIDAtMi43NS0yLjkxbC00LjIgMy45IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMTMgNiA2IiB9XQogICAgXTsKICAgIHZhciBIYW5kTWV0YWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMi41VjEwYTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnYxLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTFWOWEyIDIgMCAxIDAtNCAwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTAuNVY1YTIgMiAwIDEgMC00IDB2OSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm03IDE1LTEuNzYtMS43NmEyIDIgMCAwIDAtMi44MyAyLjgybDMuNiAzLjZDNy41IDIxLjE0IDkuMiAyMiAxMiAyMmgyYTggOCAwIDAgMCA4LThWN2EyIDIgMCAxIDAtNCAwdjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhhbmRQbGF0dGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM1YyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE1LjQgMTcuNCAzLjItMi44YTIgMiAwIDEgMSAyLjggMi45bC0zLjYgMy4zYy0uNy44LTEuNyAxLjItMi44IDEuMmgtNGMtMS4xIDAtMi4xLS40LTIuOC0xLjJsLTEuMzAyLTEuNDY0QTEgMSAwIDAgMCA2LjE1MSAxOUg1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTRoMTJhMiAyIDAgMCAxIDAgNGgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEwaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTBhNyA3IDAgMCAxIDE0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxNHY2YTEgMSAwIDAgMS0xIDFIMiIgfV0KICAgIF07CiAgICB2YXIgSGFuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExVjZhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwVjRhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTAuNVY2YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnY4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4IDhhMiAyIDAgMSAxIDQgMHY2YTggOCAwIDAgMS04IDhoLTJjLTIuOCAwLTQuNS0uODYtNS45OS0yLjM0bC0zLjYtMy42YTIgMiAwIDAgMSAyLjgzLTIuODJMNyAxNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSGFuZGJhZyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuMDQ4IDE4LjU2NkEyIDIgMCAwIDAgNCAyMWgxNmEyIDIgMCAwIDAgMS45NTItMi40MzRsLTItOUEyIDIgMCAwIDAgMTggOEg2YTIgMiAwIDAgMC0xLjk1MiAxLjU2NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMVY2YTQgNCAwIDAgMSA4IDB2NSIgfV0KICAgIF07CiAgICB2YXIgSGFuZHNoYWtlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgMTcgMiAyYTEgMSAwIDEgMCAzLTMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTQgMTQgMi41IDIuNWExIDEgMCAxIDAgMy0zbC0zLjg4LTMuODhhMyAzIDAgMCAwLTQuMjQgMGwtLjg4Ljg4YTEgMSAwIDEgMS0zLTNsMi44MS0yLjgxYTUuNzkgNS43OSAwIDAgMSA3LjA2LS44N2wuNDcuMjhhMiAyIDAgMCAwIDEuNDIuMjVMMjEgNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzIDEgMTFoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzIDIgMTRsNi41IDYuNWExIDEgMCAxIDAgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNGg4IiB9XQogICAgXTsKICAgIHZhciBIYXJkRHJpdmVEb3dubG9hZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA2LTQgNC00LTQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI4IiwgeDogIjIiLCB5OiAiMTQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMThoLjAxIiB9XQogICAgXTsKICAgIHZhciBIYXJkRHJpdmVVcGxvYWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA2LTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiOCIsIHg6ICIyIiwgeTogIjE0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMThoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE4aC4wMSIgfV0KICAgIF07CiAgICB2YXIgSGFyZERyaXZlID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMjIiLCB4MjogIjIiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01LjQ1IDUuMTEgMiAxMnY2YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNmwtMy40NS02Ljg5QTIgMiAwIDAgMCAxNi43NiA0SDcuMjRhMiAyIDAgMCAwLTEuNzkgMS4xMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNi4wMSIsIHkxOiAiMTYiLCB5MjogIjE2IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEwIiwgeDI6ICIxMC4wMSIsIHkxOiAiMTYiLCB5MjogIjE2IiB9XQogICAgXTsKICAgIHZhciBIYXJkSGF0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTBWNWExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDZhNiA2IDAgMCAxIDYgNnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTV2LTNhNiA2IDAgMCAxIDYtNiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMTUiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgSGFzaCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjQiLCB4MjogIjIwIiwgeTE6ICI5IiwgeTI6ICI5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjQiLCB4MjogIjIwIiwgeTE6ICIxNSIsIHkyOiAiMTUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTAiLCB4MjogIjgiLCB5MTogIjMiLCB5MjogIjIxIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE2IiwgeDI6ICIxNCIsIHkxOiAiMyIsIHkyOiAiMjEiIH1dCiAgICBdOwogICAgdmFyIEhhdEdsYXNzZXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOGEyIDIgMCAwIDAtNCAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE5IDExLTIuMTEtNi42NTdhMiAyIDAgMCAwLTIuNzUyLTEuMTQ4bC0xLjI3Ni42MUEyIDIgMCAwIDEgMTIgNEg4LjVhMiAyIDAgMCAwLTEuOTI1IDEuNDU2TDUgMTEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMWgyMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgSGF6ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuMiA2LjIgMS40IDEuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEzaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTNoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNy40IDcuNiAxLjQtMS40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE3SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjFIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxM2E0IDQgMCAwIDAtOCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDVWMi41IiB9XQogICAgXTsKICAgIHZhciBIZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEySDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTVWOSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNCAxNC41YS41LjUgMCAwIDAgLjUuNWgxYTIuNSAyLjUgMCAwIDAgMi41LTIuNXYtMUEyLjUgMi41IDAgMCAwIDE1LjUgOWgtMWEuNS41IDAgMCAwLS41LjV6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTVWOSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNSIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgSGRtaVBvcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTIyIDlhMSAxIDAgMCAwLTEtMUgzYTEgMSAwIDAgMC0xIDF2NGExIDEgMCAwIDAgMSAxaDFsMiAyaDEybDItMmgxYTEgMSAwIDAgMCAxLTFaIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjUgMTJoOSIgfV0KICAgIF07CiAgICB2YXIgSGVhZGluZzEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTIgMy0ydjgiIH1dCiAgICBdOwogICAgdmFyIEhlYWRpbmcyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMThWNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE4aC00YzAtNCA0LTMgNC02IDAtMS41LTItMi41LTQtMSIgfV0KICAgIF07CiAgICB2YXIgSGVhZGluZzMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNSAxMC41YzEuNy0xIDMuNSAwIDMuNSAxLjVhMiAyIDAgMCAxLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNy41YzIgMS41IDQgLjMgNC0xLjVhMiAyIDAgMCAwLTItMiIgfV0KICAgIF07CiAgICB2YXIgSGVhZGluZzQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEwdjNhMSAxIDAgMCAwIDEgMWgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEwdjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMThWNiIgfV0KICAgIF07CiAgICB2YXIgSGVhZGluZzYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTYiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMGMtMiAyLTMgMy41LTMgNiIgfV0KICAgIF07CiAgICB2YXIgSGVhZGluZzUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTN2LTNoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNy43Yy40LjIuOC4zIDEuMy4zIDEuNSAwIDIuNy0xLjEgMi43LTIuNVMxOS44IDEzIDE4LjMgMTNIMTciIH1dCiAgICBdOwogICAgdmFyIEhlYWRpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjBWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMFY0IiB9XQogICAgXTsKICAgIHZhciBIZWFkcGhvbmVPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNGgtMS4zNDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4xMjggMy40N0E5IDkgMCAwIDEgMjEgMTJ2My4zNDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjQxNCAyMC40MTRBMiAyIDAgMCAxIDE5IDIxaC0xYTIgMiAwIDAgMS0yLTJ2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNGgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtN2E5IDkgMCAwIDEgMi42MzYtNi4zNjQiIH1dCiAgICBdOwogICAgdmFyIEhlYWRwaG9uZXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDE0aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi03YTkgOSAwIDAgMSAxOCAwdjdhMiAyIDAgMCAxLTIgMmgtMWEyIDIgMCAwIDEtMi0ydi0zYTIgMiAwIDAgMSAyLTJoMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSGVhZHNldCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMTFoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTVabTAgMGE5IDkgMCAxIDEgMTggMG0wIDB2NWEyIDIgMCAwIDEtMiAyaC0xYTIgMiAwIDAgMS0yLTJ2LTNhMiAyIDAgMCAxIDItMmgzWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNnYyYTQgNCAwIDAgMS00IDRoLTUiIH1dCiAgICBdOwogICAgdmFyIEhlYXJ0Q3JhY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi40MDkgNS44MjRjLS43MDIuNzkyLTEuMTUgMS40OTYtMS40MTUgMi4xNjZsMi4xNTMgMi4xNTZhLjUuNSAwIDAgMSAwIC43MDdsLTIuMjkzIDIuMjkzYS41LjUgMCAwIDAgMCAuNzA3TDEyIDE1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjUwOCAyMC4zMTNhMiAyIDAgMCAxLTMgLjAxOUw1IDE1Yy0xLjUtMS41LTMtMy4yLTMtNS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzcuNi42IDAgMCAwIC44MTguMDAxQTUuNSA1LjUgMCAwIDEgMjIgOS41YzAgMi4yOS0xLjUgNC0zIDUuNXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhlYXJ0SGFuZHNoYWtlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuNDE0IDE0LjQxNEMyMSAxMi44MjggMjIgMTEuNSAyMiA5LjVhNS41IDUuNSAwIDAgMC05LjU5MS0zLjY3Ni42LjYgMCAwIDEtLjgxOC4wMDFBNS41IDUuNSAwIDAgMCAyIDkuNWMwIDIuMyAxLjUgNCAzIDUuNWw1LjUzNSA1LjM2MmEyIDIgMCAwIDAgMi44NzkuMDUyIDIuMTIgMi4xMiAwIDAgMC0uMDA0LTMgMi4xMjQgMi4xMjQgMCAxIDAgMy0zIDIuMTI0IDIuMTI0IDAgMCAwIDMuMDA0IDAgMiAyIDAgMCAwIDAtMi44MjhsLTEuODgxLTEuODgyYTIuNDEgMi40MSAwIDAgMC0zLjQwOSAwbC0xLjcxIDEuNzFhMiAyIDAgMCAxLTIuODI4IDAgMiAyIDAgMCAxIDAtMi44MjhsMi44MjMtMi43NjIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhlYXJ0TWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNC44NzYgMTguOTktMS4zNjggMS4zMjNhMiAyIDAgMCAxLTMgLjAxOUw1IDE1Yy0xLjUtMS41LTMtMy4yLTMtNS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzYuNTYuNTYgMCAwIDAgLjgxOCAwQTUuNDkgNS40OSAwIDAgMSAyMiA5LjVhNS4yIDUuMiAwIDAgMS0uMjQ0IDEuNTcyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1aDYiIH1dCiAgICBdOwogICAgdmFyIEhlYXJ0T2ZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuNSA0Ljg5M2E1LjUgNS41IDAgMCAxIDEuMDkxLjkzMS41Ni41NiAwIDAgMCAuODE4IDBBNS40OSA1LjQ5IDAgMCAxIDIyIDkuNWMwIDEuODcyLTEuMDAyIDMuMzU2LTIuMTg3IDQuNjU1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE2Ljk2NyAxNi45NjctMy40NTkgMy4zNDZhMiAyIDAgMCAxLTMgLjAxOUw1IDE1Yy0xLjUtMS41LTMtMy4yLTMtNS41YTUuNSA1LjUgMCAwIDEgMi43NDctNC43NjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICAgIHZhciBIZWFydFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNC40NzkgMTkuMzc0LS45NzEuOTM5YTIgMiAwIDAgMS0zIC4wMTlMNSAxNWMtMS41LTEuNS0zLTMuMi0zLTUuNWE1LjUgNS41IDAgMCAxIDkuNTkxLTMuNjc2LjU2LjU2IDAgMCAwIC44MTggMEE1LjQ5IDUuNDkgMCAwIDEgMjIgOS41YTUuMiA1LjIgMCAwIDEtLjIxOSAxLjQ5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJ2NiIgfV0KICAgIF07CiAgICB2YXIgSGVhcnRQdWxzZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzYuNTYuNTYgMCAwIDAgLjgxOCAwQTUuNDkgNS40OSAwIDAgMSAyMiA5LjVjMCAyLjI5LTEuNSA0LTMgNS41bC01LjQ5MiA1LjMxM2EyIDIgMCAwIDEtMyAuMDE5TDUgMTVjLTEuNS0xLjUtMy0zLjItMy01LjUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4yMiAxM0g5LjVsLjUtMSAyIDQuNSAyLTcgMS41IDMuNWg1LjI3IiB9XQogICAgXTsKICAgIHZhciBIZWFydCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzYuNTYuNTYgMCAwIDAgLjgxOCAwQTUuNDkgNS40OSAwIDAgMSAyMiA5LjVjMCAyLjI5LTEuNSA0LTMgNS41bC01LjQ5MiA1LjMxM2EyIDIgMCAwIDEtMyAuMDE5TDUgMTVjLTEuNS0xLjUtMy0zLjItMy01LjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhlYXRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDhjMi0zLTItMyAwLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUuNSA4YzItMy0yLTMgMC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDZhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjB2MiIgfV0KICAgIF07CiAgICB2YXIgSGV4YWdvbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSGVsaWNvcHRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM3Y4YTIgMiAwIDAgMCAyIDJoNS44NjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxN2E0IDQgMCAwIDAgNC00IDggNiAwIDAgMC04LTYgNiA1IDAgMCAwLTYgNXYzYTIgMiAwIDAgMCAyIDJ6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTB2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDNoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMWgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEzSDIiIH1dCiAgICBdOwogICAgdmFyIEhpZ2hsaWdodGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMS02IDZ2M2g5bDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxMi00LjYgNC42YTIgMiAwIDAgMS0yLjggMGwtNS4yLTUuMmEyIDIgMCAwIDEgMC0yLjhMMTQgNCIgfV0KICAgIF07CiAgICB2YXIgSGlzdG9yeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2NWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2NWw0IDIiIH1dCiAgICBdOwogICAgdmFyIEhvcE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjgyIDE2LjEyYzEuNjkuNiAzLjkxLjc5IDUuMTguODUuMjguMDEuNTMtLjA5LjctLjI3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTEuMTQgMjAuNTdjLjUyLjI0IDIuNDQgMS4xMiA0LjA4IDEuMzcuNDYuMDYuODYtLjI1LjktLjcxLjEyLTEuNTItLjMtMy40My0uNS00LjI4IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi4xMyAyMS4wNWMxLjY1LjYzIDMuNjguODQgNC44Ny45MWEuOS45IDAgMCAwIC43LS4yNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTE3Ljk5IDUuNTJhMjAuODMgMjAuODMgMCAwIDEgMy4xNSA0LjUuOC44IDAgMCAxLS42OCAxLjEzYy0xLjE3LjEtMi41LjAyLTMuOS0uMjUiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjU3IDExLjE0Yy4yNC41MiAxLjEyIDIuNDQgMS4zNyA0LjA4LjA0LjMtLjA4LjU5LS4zMS43NSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00LjkzIDQuOTNhMTAgMTAgMCAwIDAtLjY3IDEzLjRjLjM1LjQzLjk2LjQgMS4xNy0uMTIuNjktMS43MSAxLjA3LTUuMDcgMS4wNy02LjcxIDEuMzQuNDUgMy4xLjkgNC44OC42MmEuODUuODUgMCAwIDAgLjQ4LS4yNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTUuNTIgMTcuOTljMS4wNS45NSAyLjkxIDIuNDIgNC41IDMuMTVhLjguOCAwIDAgMCAxLjEzLS42OGMuMi0yLjM0LS4zMy01LjMtMS41Ny04LjI4IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjM1IDIuNjhhMTAgMTAgMCAwIDEgOS45OCAxLjU4Yy40My4zNS40Ljk2LS4xMiAxLjE3LTEuNS42LTQuMy45OC02LjA3IDEuMDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICAgIHZhciBIb3AgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTEwLjgyIDE2LjEyYzEuNjkuNiAzLjkxLjc5IDUuMTguODUuNTUuMDMgMS0uNDIuOTctLjk3LS4wNi0xLjI3LS4yNi0zLjUtLjg1LTUuMTgiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjUgNi41YzEuNjQgMCA1LS4zOCA2LjcxLTEuMDcuNTItLjIuNTUtLjgyLjEyLTEuMTdBMTAgMTAgMCAwIDAgNC4yNiAxOC4zM2MuMzUuNDMuOTYuNCAxLjE3LS4xMi42OS0xLjcxIDEuMDctNS4wNyAxLjA3LTYuNzEgMS4zNC40NSAzLjEuOSA0Ljg4LjYyYS44OC44OCAwIDAgMCAuNzMtLjc0Yy4zLTIuMTQtLjE1LTMuNS0uNjEtNC44OCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTE1LjYyIDE2Ljk1Yy4yLjg1LjYyIDIuNzYuNSA0LjI4YS43Ny43NyAwIDAgMS0uOS43IDE2LjY0IDE2LjY0IDAgMCAxLTQuMDgtMS4zNiIgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xNi4xMyAyMS4wNWMxLjY1LjYzIDMuNjguODQgNC44Ny45MWEuOS45IDAgMCAwIC45Ni0uOTYgMTcuNjggMTcuNjggMCAwIDAtLjktNC44NyIgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xNi45NCAxNS42MmMuODYuMiAyLjc3LjYyIDQuMjkuNWEuNzcuNzcgMCAwIDAgLjctLjkgMTYuNjQgMTYuNjQgMCAwIDAtMS4zNi00LjA4IiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTE3Ljk5IDUuNTJhMjAuODIgMjAuODIgMCAwIDEgMy4xNSA0LjUuOC44IDAgMCAxLS42OCAxLjEzYy0yLjMzLjItNS4zLS4zMi04LjI3LTEuNTciIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuOTMgNC45MyAzIDNhLjcuNyAwIDAgMSAwLTEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOS41OCAxMi4xOGMxLjI0IDIuOTggMS43NyA1Ljk1IDEuNTcgOC4yOGEuOC44IDAgMCAxLTEuMTMuNjggMjAuODIgMjAuODIgMCAwIDEtNC41LTMuMTUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEhvc3BpdGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxdi0zYTIgMiAwIDAgMC00IDB2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA5aC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExaDJhMiAyIDAgMCAxIDIgMnY2YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi05YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMVY1YTIgMiAwIDAgMC0yLTJIOGEyIDIgMCAwIDAtMiAydjE2IiB9XQogICAgXTsKICAgIHZhciBIb3RlbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIydi02LjU3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDExaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNS40M1YyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNmE1IDUgMCAwIDAtNiAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDExaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDExaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDdoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNCIsIHk6ICIyIiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjIwIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBIb3VyZ2xhc3MgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIyaDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMmgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMnYtNC4xNzJhMiAyIDAgMCAwLS41ODYtMS40MTRMMTIgMTJsLTQuNDE0IDQuNDE0QTIgMiAwIDAgMCA3IDE3LjgyOFYyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDJ2NC4xNzJhMiAyIDAgMCAwIC41ODYgMS40MTRMMTIgMTJsNC40MTQtNC40MTRBMiAyIDAgMCAwIDE3IDYuMTcyVjIiIH1dCiAgICBdOwogICAgdmFyIEhvdXNlSGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjYyIDEzLjhBMi4yNSAyLjI1IDAgMSAxIDEyIDEwLjgzNmEyLjI1IDIuMjUgMCAxIDEgMy4zOCAyLjk2NmwtMi42MjYgMi44NTZhLjk5OC45OTggMCAwIDEtMS41MDcgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxMGEyIDIgMCAwIDEgLjcwOS0xLjUyOGw3LTZhMiAyIDAgMCAxIDIuNTgyIDBsNyA2QTIgMiAwIDAgMSAyMSAxMHY5YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSG91c2VQbHVnID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJWOC45NjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTJWOC45NjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTJhMSAxIDAgMCAxIDEgMXYyYTIgMiAwIDAgMS0yIDJoLTRhMiAyIDAgMCAxLTItMnYtMmExIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjUgMjFINWEyIDIgMCAwIDEtMi0ydi05YTIgMiAwIDAgMSAuNzA5LTEuNTI4bDctNmEyIDIgMCAwIDEgMi41ODIgMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjlhMiAyIDAgMCAxLTIgMmgtNWEyIDIgMCAwIDEtMi0ydi0yIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBIb3VzZVdpZmkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjUgMTMuODY2YTQgNCAwIDAgMSA1IC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN2guMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxMGEyIDIgMCAwIDEgLjcwOS0xLjUyOGw3LTZhMiAyIDAgMCAxIDIuNTgyIDBsNyA2QTIgMiAwIDAgMSAyMSAxMHY5YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEwLjc1NGE4IDggMCAwIDEgMTAgMCIgfV0KICAgIF07CiAgICB2YXIgSG91c2VQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuMzUgMjFINWEyIDIgMCAwIDEtMi0ydi05YTIgMiAwIDAgMSAuNzEtMS41M2w3LTZhMiAyIDAgMCAxIDIuNTggMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjIuMzUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuOCAxMi40QTEgMSAwIDAgMCAxNCAxMmgtNGExIDEgMCAwIDAtMSAxdjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMThoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNXY2IiB9XQogICAgXTsKICAgIHZhciBJY2VDcmVhbUJvd2wgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTEyIDE3YzUgMCA4LTIuNjkgOC02SDRjMCAzLjMxIDMgNiA4IDZtLTQgNGg4bS00LTN2M001LjE0IDExYTMuNSAzLjUgMCAxIDEgNi43MSAwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi4xNCAxMWEzLjUgMy41IDAgMSAxIDYuNzEgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS41IDYuNWEzLjUgMy41IDAgMSAwLTcgMCIgfV0KICAgIF07CiAgICB2YXIgSG91c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMXYtOGExIDEgMCAwIDAtMS0xaC00YTEgMSAwIDAgMC0xIDF2OCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDEwYTIgMiAwIDAgMSAuNzA5LTEuNTI4bDctNmEyIDIgMCAwIDEgMi41ODIgMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBJY2VDcmVhbUNvbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDExIDQuMDggMTAuMzVhMSAxIDAgMCAwIDEuODQgMEwxNyAxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA3QTUgNSAwIDAgMCA3IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgN2EyIDIgMCAwIDEgMCA0SDdhMiAyIDAgMCAxIDAtNCIgfV0KICAgIF07CiAgICB2YXIgSWRDYXJkTGFueWFyZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjUgOGgtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAyLTEgMmgzYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuODk5IDIyQTUgNSAwIDAgMCA3LjEgMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAyIDMgNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNSIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBJZENhcmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4xNyAxNWEzIDMgMCAwIDEgNS42NiAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiMTEiLCByOiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNSIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgSW1hZ2VEb3duID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuMyAyMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2MTBsLTMuMS0zLjFhMiAyIDAgMCAwLTIuODE0LjAxNEw2IDIxIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE5IDMgM3YtNS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDIyIDMtMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjkiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgSW1hZ2VNaW51cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDl2MTBhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDciIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTYiLCB4MjogIjIyIiwgeTE6ICI1IiwgeTI6ICI1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE1LTMuMDg2LTMuMDg2YTIgMiAwIDAgMC0yLjgyOCAwTDYgMjEiIH1dCiAgICBdOwogICAgdmFyIEltYWdlT2ZmID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjQxIDEwLjQxYTIgMiAwIDEgMS0yLjgzLTIuODMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTMuNSIsIHgyOiAiNiIsIHkxOiAiMTMuNSIsIHkyOiAiMjEiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTgiLCB4MjogIjIxIiwgeTE6ICIxMiIsIHkyOiAiMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy41OSAzLjU5QTEuOTkgMS45OSAwIDAgMCAzIDV2MTRhMiAyIDAgMCAwIDIgMmgxNGMuNTUgMCAxLjA1Mi0uMjIgMS40MS0uNTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTVWNWEyIDIgMCAwIDAtMi0ySDkiIH1dCiAgICBdOwogICAgdmFyIEltYWdlUGxheSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1IDE1LjAwM2ExIDEgMCAwIDEgMS41MTctLjg1OWw0Ljk5NyAyLjk5N2ExIDEgMCAwIDEgMCAxLjcxOGwtNC45OTcgMi45OTdhMSAxIDAgMCAxLTEuNTE3LS44NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTIuMTdWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAyMSA1LTUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI5IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEltYWdlUGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTEuNVYxOWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE1LTMuMDg2LTMuMDg2YTIgMiAwIDAgMC0yLjgyOCAwTDYgMjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI5IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEltYWdlVXAgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4zIDIxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxMGwtMy4xLTMuMWEyIDIgMCAwIDAtMi44MTQuMDE0TDYgMjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTkuNSAzLTMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIydi01LjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI5IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIEltYWdlVXBzY2FsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoNXY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIxaDJhMiAyIDAgMCAwIDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAyMSA0LjE0NC00LjE0NGExLjIxIDEuMjEgMCAwIDEgMS43MTIgMEwxMyAxOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDNoMyIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMTEiLCB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiMTAiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIEltYWdlMiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE1LTMuMDg2LTMuMDg2YTIgMiAwIDAgMC0yLjgyOCAwTDYgMjEiIH1dCiAgICBdOwogICAgdmFyIEltYWdlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDExLTEuMjk2LTEuMjk2YTIuNCAyLjQgMCAwIDAtMy40MDggMEwxMSAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDhhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDEwYTIgMiAwIDAgMCAyLTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMyIsIGN5OiAiNyIsIHI6ICIxIiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiMiIsIHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgSW1wb3J0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDExIDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA1SDRhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC00IiB9XQogICAgXTsKICAgIHZhciBJbmRpYW5SdXBlZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgM2gxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDhoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxMyA4LjUgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEzaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM2M2LjY2NyAwIDYuNjY3LTEwIDAtMTAiIH1dCiAgICBdOwogICAgdmFyIEluZmluaXR5MiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTZjNSAwIDctOCAxMi04YTQgNCAwIDAgMSAwIDhjLTUgMC03LTgtMTItOGE0IDQgMCAxIDAgMCA4IiB9XQogICAgXTsKICAgIHZhciBJbmZvMiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDhoLjAxIiB9XQogICAgXTsKICAgIHZhciBJbmJveCA9IFsKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMjIgMTIgMTYgMTIgMTQgMTUgMTAgMTUgOCAxMiAyIDEyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTUuNDUgNS4xMSAyIDEydjZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi02bC0zLjQ1LTYuODlBMiAyIDAgMCAwIDE2Ljc2IDRINy4yNGEyIDIgMCAwIDAtMS43OSAxLjExeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgSW5zcGVjdGlvblBhbmVsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxN2guMDEiIH1dCiAgICBdOwogICAgdmFyIEl0YWxpYyA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIxMCIsIHkxOiAiNCIsIHkyOiAiNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNCIsIHgyOiAiNSIsIHkxOiAiMjAiLCB5MjogIjIwIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICI5IiwgeTE6ICI0IiwgeTI6ICIyMCIgfV0KICAgIF07CiAgICB2YXIgSW5zdGFncmFtID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIyMCIsIHg6ICIyIiwgeTogIjIiLCByeDogIjUiLCByeTogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTEuMzdBNCA0IDAgMSAxIDEyLjYzIDggNCA0IDAgMCAxIDE2IDExLjM3eiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNy41IiwgeDI6ICIxNy41MSIsIHkxOiAiNi41IiwgeTI6ICI2LjUiIH1dCiAgICBdOwogICAgdmFyIEl0ZXJhdGlvbkNjdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE0IDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTBhOCA4IDAgMSAwLTggOGg4IiB9XQogICAgXTsKICAgIHZhciBJdGVyYXRpb25DdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBhOCA4IDAgMSAxIDggOEg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMjItNC00IDQtNCIgfV0KICAgIF07CiAgICB2YXIgSmFwYW5lc2VZZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA5LjVWMjFtMC0xMS41TDYgM202IDYuNUwxOCAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTVoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMWgxMiIgfV0KICAgIF07CiAgICB2YXIgS2FuYmFuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzdjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzdjE4IiB9XQogICAgXTsKICAgIHZhciBLYXlhayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE3YTEgMSAwIDAgMC0xIDF2MWEyIDIgMCAxIDAgMi0yeiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC45NyAzLjYxYS40NS40NSAwIDAgMC0uNTgtLjU4QzEwLjIgNi42IDYuNiAxMC4yIDMuMDMgMjAuMzlhLjQ1LjQ1IDAgMCAwIC41OC41OEMxMy44IDE3LjQgMTcuNCAxMy44IDIwLjk3IDMuNjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi43MDcgNi43MDcgMTAuNTg2IDEwLjU4NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDVhMiAyIDAgMSAwLTIgMmgxYTEgMSAwIDAgMCAxLTF6IiB9XQogICAgXTsKICAgIHZhciBKb3lzdGljayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjJhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0ydi0yWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE1di0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1VjkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNiIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBLZXlSb3VuZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNTg2IDE3LjQxNEEyIDIgMCAwIDAgMiAxOC44MjhWMjFhMSAxIDAgMCAwIDEgMWgzYTEgMSAwIDAgMCAxLTF2LTFhMSAxIDAgMCAxIDEtMWgxYTEgMSAwIDAgMCAxLTF2LTFhMSAxIDAgMCAxIDEtMWguMTcyYTIgMiAwIDAgMCAxLjQxNC0uNTg2bC44MTQtLjgxNGE2LjUgNi41IDAgMSAwLTQtNHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNi41IiwgY3k6ICI3LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XQogICAgXTsKICAgIHZhciBLZXlTcXVhcmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi40IDIuN2EyLjUgMi41IDAgMCAxIDMuNCAwbDUuNSA1LjVhMi41IDIuNSAwIDAgMSAwIDMuNGwtMy43IDMuN2EyLjUgMi41IDAgMCAxLTMuNCAwTDguNyA5LjhhMi41IDIuNSAwIDAgMSAwLTMuNHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgNyAzIDMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtOS40IDEwLjYtNi44MTQgNi44MTRBMiAyIDAgMCAwIDIgMTguODI4VjIxYTEgMSAwIDAgMCAxIDFoM2ExIDEgMCAwIDAgMS0xdi0xYTEgMSAwIDAgMSAxLTFoMWExIDEgMCAwIDAgMS0xdi0xYTEgMSAwIDAgMSAxLTFoLjE3MmEyIDIgMCAwIDAgMS40MTQtLjU4NmwuODE0LS44MTQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIEtleTIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS41IDcuNSAyLjMgMi4zYTEgMSAwIDAgMCAxLjQgMGwyLjEtMi4xYTEgMSAwIDAgMCAwLTEuNEwxOSA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDItOS42IDkuNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjcuNSIsIGN5OiAiMTUuNSIsIHI6ICI1LjUiIH1dCiAgICBdOwogICAgdmFyIEtleWJvYXJkTXVzaWMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDhoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJ2NCIgfV0KICAgIF07CiAgICB2YXIgS2V5Ym9hcmRPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0gMjAgNCBBMiAyIDAgMCAxIDIyIDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNIDIyIDYgTCAyMiAxNi40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0gNyAxNiBMIDE2IDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTSA5LjY5IDQgTCAyMCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMEg0YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmguMDEiIH1dCiAgICBdOwogICAgdmFyIEtleWJvYXJkMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE2aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTYiLCB4OiAiMiIsIHk6ICI0Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBMYW1wQ2VpbGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC44MjkgMTUuOTk4YTMgMyAwIDEgMS01LjY1OCAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwLjkyIDE0LjYwNkExIDEgMCAwIDEgMjAgMTZINGExIDEgMCAwIDEtLjkyLTEuMzk0bDMtN0ExIDEgMCAwIDEgNyA3aDEwYTEgMSAwIDAgMSAuOTIuNjA2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTGFtcERlc2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4yOTMgMi4yOTNhMSAxIDAgMCAxIDEuNDE0IDBsMi41IDIuNSA1Ljk5NCAxLjIyN2ExIDEgMCAwIDEgLjUwNiAxLjY4N2wtNyA3YTEgMSAwIDAgMS0xLjY4Ny0uNTA2bC0xLjIyNy01Ljk5NC0yLjUtMi41YTEgMSAwIDAgMSAwLTEuNDE0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4yMDcgNC43OTMtMy40MTQgMy40MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFINGExIDEgMCAwIDEtMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjA4NiA2LjUtNC43OTMgNC43OTNhMSAxIDAgMCAwLS4xOCAxLjE3TDcgMTgiIH1dCiAgICBdOwogICAgdmFyIExhbXBGbG9vciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjEyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjkyOSA3LjYyOUExIDEgMCAwIDEgMTcgOUg3YTEgMSAwIDAgMS0uOTI4LTEuMzcxbDItNUExIDEgMCAwIDEgOSAyaDZhMSAxIDAgMCAxIC45MjguNjI5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIyaDYiIH1dCiAgICBdOwogICAgdmFyIExhbXBXYWxsVXAgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS45MjkgOS42MjlBMSAxIDAgMCAxIDE5IDExSDlhMSAxIDAgMCAxLS45MjgtMS4zNzFsMi01QTEgMSAwIDAgMSAxMSA0aDZhMSAxIDAgMCAxIC45MjguNjI5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE1YTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDEtMiAySDVhMSAxIDAgMCAxLTEtMXYtNGExIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4aDRhMiAyIDAgMCAwIDItMnYtNSIgfV0KICAgIF07CiAgICB2YXIgTGFtcFdhbGxEb3duID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuOTI5IDE4LjYyOUExIDEgMCAwIDEgMTkgMjBIOWExIDEgMCAwIDEtLjkyOC0xLjM3MWwyLTVBMSAxIDAgMCAxIDExIDEzaDZhMSAxIDAgMCAxIC45MjguNjI5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDNhMiAyIDAgMCAxIDIgMnYyYTIgMiAwIDAgMS0yIDJINWExIDEgMCAwIDEtMS0xVjRhMSAxIDAgMCAxIDEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA2aDRhMiAyIDAgMCAxIDIgMnY1IiB9XQogICAgXTsKICAgIHZhciBMYW1wID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJ2NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00LjA3NyAxMC42MTVBMSAxIDAgMCAwIDUgMTJoMTRhMSAxIDAgMCAwIC45MjMtMS4zODVsLTMuMDc3LTcuMzg0QTIgMiAwIDAgMCAxNSAySDlhMiAyIDAgMCAwLTEuODQ2IDEuMjNaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjBhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDlhMSAxIDAgMCAxLTEtMXoiIH1dCiAgICBdOwogICAgdmFyIExhbmRQbG90ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgOCA2LTMtNi0zdjEwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTggMTEuOTktNS41IDMuMTRhMSAxIDAgMCAwIDAgMS43NGw4LjUgNC44NmEyIDIgMCAwIDAgMiAwbDguNS00Ljg2YTEgMSAwIDAgMCAwLTEuNzRMMTYgMTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi40OSAxMi44NSAxMS4wMiA2LjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNTEgMTIuODUgNi41IDE5LjE1IiB9XQogICAgXTsKICAgIHZhciBMYW5kbWFyayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE4di03IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjEyIDIuMTk4YTIgMiAwIDAgMSAxLjc2LjAwNmw3Ljg2NiAzLjg0N2MuNDc2LjIzMy4zMS45NDktLjIyLjk0OUgzLjQ3NGMtLjUzIDAtLjY5NS0uNzE2LS4yMi0uOTQ5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOHYtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxOHYtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIyaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTh2LTciIH1dCiAgICBdOwogICAgdmFyIExhbmd1YWdlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgOCA2IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNCAxNCA2LTYgMi0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNWgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAyMi01LTEwLTUgMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMThoNiIgfV0KICAgIF07CiAgICB2YXIgTGFwdG9wTWluaW1hbENoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMGgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEwIDIgMiA0LTQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjQiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTIiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIExhcHRvcE1pbmltYWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgeDogIjMiLCB5OiAiNCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMjAiLCB5MjogIjIwIiB9XQogICAgXTsKICAgIHZhciBMYXB0b3AgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCA1YTIgMiAwIDAgMSAyIDJ2OC41MjZhMiAyIDAgMCAwIC4yMTIuODk3bDEuMDY4IDIuMTI3YTEgMSAwIDAgMS0uOSAxLjQ1SDMuNjJhMSAxIDAgMCAxLS45LTEuNDVsMS4wNjgtMi4xMjdBMiAyIDAgMCAwIDQgMTUuNTI2VjdhMiAyIDAgMCAxIDItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuMDU0IDE1Ljk4N0gzLjk0NiIgfV0KICAgIF07CiAgICB2YXIgTGFzc29TZWxlY3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIyYTUgNSAwIDAgMS0yLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNi45M2MuOTYuNDMgMS45Ni43NCAyLjk5LjkxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMy4zNCAxNEE2LjggNi44IDAgMCAxIDIgMTBjMC00LjQyIDQuNDgtOCAxMC04czEwIDMuNTggMTAgOGE3LjE5IDcuMTkgMCAwIDEtLjMzIDIiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMThhMiAyIDAgMSAwIDAtNCAyIDIgMCAwIDAgMCA0eiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC4zMyAyMmgtLjA5YS4zNS4zNSAwIDAgMS0uMjQtLjMydi0xMGEuMzQuMzQgMCAwIDEgLjMzLS4zNGMuMDggMCAuMTUuMDMuMjEuMDhsNy4zNCA2YS4zMy4zMyAwIDAgMS0uMjEuNTloLTQuNDlsLTIuNTcgMy44NWEuMzUuMzUgMCAwIDEtLjI4LjE0eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTGFzc28gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjcwNCAxNC40NjdhMTAgOCAwIDEgMSAzLjExNSAyLjM3NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIyYTUgNSAwIDAgMS0yLTMuOTk0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTYiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgTGF1Z2ggPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxM2E2IDYgMCAwIDEtNiA1IDYgNiAwIDAgMS02LTVoMTJaIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkiLCB4MjogIjkuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjE1LjAxIiwgeTE6ICI5IiwgeTI6ICI5IiB9XQogICAgXTsKICAgIHZhciBMYXllcnMyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMgMTMuNzRhMiAyIDAgMCAxLTIgMEwyLjUgOC44N2ExIDEgMCAwIDEgMC0xLjc0TDExIDIuMjZhMiAyIDAgMCAxIDIgMGw4LjUgNC44N2ExIDEgMCAwIDEgMCAxLjc0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0yMCAxNC4yODUgMS41Ljg0NWExIDEgMCAwIDEgMCAxLjc0TDEzIDIxLjc0YTIgMiAwIDAgMS0yIDBsLTguNS00Ljg3YTEgMSAwIDAgMSAwLTEuNzRsMS41LS44NDUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIExheWVyczMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi44MyAyLjE4YTIgMiAwIDAgMC0xLjY2IDBMMi42IDYuMDhhMSAxIDAgMCAwIDAgMS44M2w4LjU4IDMuOTFhMiAyIDAgMCAwIDEuNjYgMGw4LjU4LTMuOWExIDEgMCAwIDAgMC0xLjgzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyYTEgMSAwIDAgMCAuNTguOTFsOC42IDMuOTFhMiAyIDAgMCAwIDEuNjUgMGw4LjU4LTMuOUExIDEgMCAwIDAgMjIgMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxN2ExIDEgMCAwIDAgLjU4LjkxbDguNiAzLjkxYTIgMiAwIDAgMCAxLjY1IDBsOC41OC0zLjlBMSAxIDAgMCAwIDIyIDE3IiB9XQogICAgXTsKICAgIHZhciBMYXllcnNQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuODMgMi4xOGEyIDIgMCAwIDAtMS42NiAwTDIuNiA2LjA4YTEgMSAwIDAgMCAwIDEuODNsOC41OCAzLjkxYTIgMiAwIDAgMCAuODMuMTggMiAyIDAgMCAwIC44My0uMThsOC41OC0zLjlhMSAxIDAgMCAwIDAtMS44MzF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE3aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTR2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyYTEgMSAwIDAgMCAuNTguOTFsOC42IDMuOTFhMiAyIDAgMCAwIC44MjUuMTc4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTdhMSAxIDAgMCAwIC41OC45MWw4LjYgMy45MWEyIDIgMCAwIDAgMS42NSAwbDIuMTE2LS45NjIiIH1dCiAgICBdOwogICAgdmFyIExheW91dERhc2hib2FyZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI5IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNSIsIHg6ICIxNCIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI5IiwgeDogIjE0IiwgeTogIjEyIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI1IiwgeDogIjMiLCB5OiAiMTYiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIExheW91dEdyaWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMTQiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIxNCIsIHk6ICIxNCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjE0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBMYXlvdXRMaXN0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMTQiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNGg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDloNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNWg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIwaDciIH1dCiAgICBdOwogICAgdmFyIExheW91dFBhbmVsTGVmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMTQiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIxNCIsIHk6ICIxNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgTGF5b3V0UGFuZWxUb3AgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjciLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMTQiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMTQiLCB5OiAiMTQiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIExheW91dFRlbXBsYXRlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI5IiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjE0Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjUiLCBoZWlnaHQ6ICI3IiwgeDogIjE2IiwgeTogIjE0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBMZWFmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMSAyMEE3IDcgMCAwIDEgOS44IDYuMUMxNS41IDUgMTcgNC40OCAxOSAyYzEgMiAyIDQuMTggMiA4IDAgNS41LTQuNzggMTAtMTAgMTBaIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYzAtMyAxLjg1LTUuMzYgNS4wOC02QzkuNSAxNC41MiAxMiAxMyAxMyAxMiIgfV0KICAgIF07CiAgICB2YXIgTGVhZnlHcmVlbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMjJjMS4yNS0uOTg3IDIuMjctMS45NzUgMy45LTIuMmE1LjU2IDUuNTYgMCAwIDEgMy44IDEuNSA0IDQgMCAwIDAgNi4xODctMi4zNTMgMy41IDMuNSAwIDAgMCAzLjY5LTUuMTE2QTMuNSAzLjUgMCAwIDAgMjAuOTUgOCAzLjUgMy41IDAgMSAwIDE2IDMuMDVhMy41IDMuNSAwIDAgMC01LjgzMSAxLjM3MyAzLjUgMy41IDAgMCAwLTUuMTE2IDMuNjkgNCA0IDAgMCAwLTIuMzQ4IDYuMTU1QzMuNDk5IDE1LjQyIDQuNDA5IDE2LjcxMiA0LjIgMTguMSAzLjkyNiAxOS43NDMgMy4wMTQgMjAuNzMyIDIgMjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMiAxNyA3IiB9XQogICAgXTsKICAgIHZhciBMZWN0ZXJuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgMTJoM2EyIDIgMCAwIDAgMS45MDItMS4zOGwxLjA1Ni0zLjMzM0ExIDEgMCAwIDAgMjEgNkgzYTEgMSAwIDAgMC0uOTU4IDEuMjg3bDEuMDU2IDMuMzM0QTIgMiAwIDAgMCA1IDEyaDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNlYzYTEgMSAwIDAgMC0xLTFoLTMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjEyIiwgeDogIjgiLCB5OiAiMTAiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIExpYnJhcnlCaWcgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgM3YxOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC40IDE4LjljLjIuNS0uMSAxLjEtLjYgMS4zbC0xLjkuN2MtLjUuMi0xLjEtLjEtMS4zLS42TDExLjEgNS4xYy0uMi0uNS4xLTEuMS42LTEuM2wxLjktLjdjLjUtLjIgMS4xLjEgMS4zLjZaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBMaWJyYXJ5MiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDYgNCAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOHYxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDR2MTYiIH1dCiAgICBdOwogICAgdmFyIExpZmVCdW95ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45MyA0LjkzIDQuMjQgNC4yNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC44MyA5LjE3IDQuMjQtNC4yNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC44MyAxNC44MyA0LjI0IDQuMjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4xNyAxNC44My00LjI0IDQuMjQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNCIgfV0KICAgIF07CiAgICB2YXIgTGlnYXR1cmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMmgydjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjBWOGE0IDQgMCAwIDEgNy40NjQtMiIgfV0KICAgIF07CiAgICB2YXIgTGlnaHRidWxiT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuOCAxMS4yYy44LS45IDEuMi0yIDEuMi0zLjJhNiA2IDAgMCAwLTkuMy01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjMgNi4zYTQuNjcgNC42NyAwIDAgMCAxLjIgNS4yYy43LjcgMS4zIDEuNSAxLjUgMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMThoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMmg0IiB9XQogICAgXTsKICAgIHZhciBMaWdodGJ1bGIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSAxNGMuMi0xIC43LTEuNyAxLjUtMi41IDEtLjkgMS41LTIuMiAxLjUtMy41QTYgNiAwIDAgMCA2IDhjMCAxIC4yIDIuMiAxLjUgMy41LjcuNyAxLjMgMS41IDEuNSAyLjUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIyaDQiIH1dCiAgICBdOwogICAgdmFyIExpbmVTcXVpZ2dsZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNyAzLjVjNS0yIDcgMi41IDMgNEMxLjUgMTAgMiAxNSA1IDE2YzUgMiA5LTEwIDE0LTdzLjUgMTMuNS00IDEyYy01LTIuNS41LTExIDYtMiIgfQogICAgICBdCiAgICBdOwogICAgdmFyIExpbmsyT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN0g3QTUgNSAwIDAgMSA3IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgN2gyYTUgNSAwIDAgMSA0IDgiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiMTIiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIExpbmsgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxM2E1IDUgMCAwIDAgNy41NC41NGwzLTNhNSA1IDAgMCAwLTcuMDctNy4wN2wtMS43MiAxLjcxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDExYTUgNSAwIDAgMC03LjU0LS41NGwtMyAzYTUgNSAwIDAgMCA3LjA3IDcuMDdsMS43MS0xLjcxIiB9XQogICAgXTsKICAgIHZhciBMaW5rMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdIN0E1IDUgMCAwIDEgNyA3aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgN2gyYTUgNSAwIDEgMSAwIDEwaC0yIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE2IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dCiAgICBdOwogICAgdmFyIExpc3RDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE5SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTggMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgTGlua2VkaW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4YTYgNiAwIDAgMSA2IDZ2N2gtNHYtN2EyIDIgMCAwIDAtMi0yIDIgMiAwIDAgMC0yIDJ2N2gtNHYtN2E2IDYgMCAwIDEgNi02eiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiMTIiLCB4OiAiMiIsIHk6ICI5IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiNCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBMaXN0Q2hlY2tzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTloOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDE3IDIgMiA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA3IDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIExpc3RDaGV2cm9uc0Rvd25VcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE5aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNSAzIDMgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE5IDMtMyAzIDMiIH1dCiAgICBdOwogICAgdmFyIExpc3RDaGV2cm9uc1VwRG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE5aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOCAzLTMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE2IDMgMyAzLTMiIH1dCiAgICBdOwogICAgdmFyIExpc3RDb2xsYXBzZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDVoMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJoMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTloMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxMCAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMjAgMy0zLTMtMyIgfV0KICAgIF07CiAgICB2YXIgTGlzdEVuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNi0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDV2MTJhMiAyIDAgMCAxLTIgMmgtNiIgfV0KICAgIF07CiAgICB2YXIgTGlzdEZpbHRlclBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA1SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE5aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDhWMiIgfV0KICAgIF07CiAgICB2YXIgTGlzdEZpbHRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNWgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTloNiIgfV0KICAgIF07CiAgICB2YXIgTGlzdEluZGVudERlY3JlYXNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMkgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOUgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDgtNCA0IDQgNCIgfV0KICAgIF07CiAgICB2YXIgTGlzdEluZGVudEluY3JlYXNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMkgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOUgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDggNCA0LTQgNCIgfV0KICAgIF07CiAgICB2YXIgTGlzdE1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMmgtNiIgfV0KICAgIF07CiAgICB2YXIgTGlzdE11c2ljID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNlY1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE2IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIExpc3RQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA5djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJoLTYiIH1dCiAgICBdOwogICAgdmFyIExpc3RSZXN0YXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE5SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThhNSA1IDAgMCAwIDktMyA0LjUgNC41IDAgMCAwLTQuNS00LjVjLTEuMzMgMC0yLjU0LjU0LTMuNDEgMS40MUwxMSAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMHY0aDQiIH1dCiAgICBdOwogICAgdmFyIExpc3RPcmRlcmVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgNWgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMmgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxOWgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDRoMXY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNSAyMEgzLjRjMC0xIDIuNi0xLjkyNSAyLjYtMy41YTEuNSAxLjUgMCAwIDAtMi42LTEuMDIiIH1dCiAgICBdOwogICAgdmFyIExpc3RTdGFydCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOWgxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA4LTMtMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTlWN2EyIDIgMCAwIDAtMi0yaC02IiB9XQogICAgXTsKICAgIHZhciBMaXN0VG9kbyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE5aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxNyAyIDIgNC00IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICI0Iiwgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgTGlzdFRyZWUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDVoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxOWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBhMiAyIDAgMCAwIDIgMmgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNXYxMmEyIDIgMCAwIDAgMiAyaDMiIH1dCiAgICBdOwogICAgdmFyIExpc3RWaWRlbyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE5SDMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMTIuMDAzYTEgMSAwIDAgMSAxLjUxNy0uODU5bDQuOTk3IDIuOTk3YTEgMSAwIDAgMSAwIDEuNzE4bC00Ljk5NyAyLjk5N2ExIDEgMCAwIDEtMS41MTctLjg2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTGlzdFggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjUgOS41IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC41IDkuNS01IDUiIH1dCiAgICBdOwogICAgdmFyIExpc3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNWgxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTloMTMiIH1dCiAgICBdOwogICAgdmFyIExvYWRlckNpcmNsZSA9IFtbInBhdGgiLCB7IGQ6ICJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiIH1dXTsKICAgIHZhciBMb2FkZXJQaW53aGVlbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyYTEgMSAwIDAgMS0xMCAwIDEgMSAwIDAgMC0xMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjAuN2ExIDEgMCAxIDEgNS04LjcgMSAxIDAgMSAwIDUtOC42IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMy4zYTEgMSAwIDEgMSA1IDguNiAxIDEgMCAxIDAgNSA4LjYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogICAgdmFyIExvYWRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi4yIDcuOCAyLjktMi45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuMiAxNi4yIDIuOSAyLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTh2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkgMTkuMSAyLjktMi45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkgNC45IDIuOSAyLjkiIH1dCiAgICBdOwogICAgdmFyIExvY2F0ZUZpeGVkID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiNSIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIyMiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMiIsIHkyOiAiNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjE5IiwgeTI6ICIyMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI3IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIExvY2F0ZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE5djMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4Ljg5IDEzLjI0YTcgNyAwIDAgMC04LjEzLTguMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTJoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuMDUgNy4wNWE3IDcgMCAwIDAgOS45IDkuOSIgfV0KICAgIF07CiAgICB2YXIgTG9ja0tleWhvbGVPcGVuID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTYiLCByOiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgeDogIjMiLCB5OiAiMTAiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMFY3YTUgNSAwIDAgMSA5LjMzLTIuNSIgfV0KICAgIF07CiAgICB2YXIgTG9jYXRlID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiNSIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIyMiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMiIsIHkyOiAiNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjE5IiwgeTI6ICIyMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI3IiB9XQogICAgXTsKICAgIHZhciBMb2NrS2V5aG9sZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE2IiwgcjogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjEwIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBWN2E1IDUgMCAwIDEgMTAgMHYzIiB9XQogICAgXTsKICAgIHZhciBMb2NrT3BlbiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTEiLCB4OiAiMyIsIHk6ICIxMSIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDExVjdhNSA1IDAgMCAxIDkuOS0xIiB9XQogICAgXTsKICAgIHZhciBMb2NrID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxMSIsIHg6ICIzIiwgeTogIjExIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTFWN2E1IDUgMCAwIDEgMTAgMHY0IiB9XQogICAgXTsKICAgIHZhciBMb2dJbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE3IDUtNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzaDRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyaC00IiB9XQogICAgXTsKICAgIHZhciBMb2dPdXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNyA1LTUtNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEySDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDQiIH1dCiAgICBdOwogICAgdmFyIExvZ3MgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE5aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTloOCIgfV0KICAgIF07CiAgICB2YXIgTG9sbGlwb3AgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjExIiwgY3k6ICIxMSIsIHI6ICI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIxLTQuMy00LjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTFhMiAyIDAgMCAwIDQgMCA0IDQgMCAwIDAtOCAwIDYgNiAwIDAgMCAxMiAwIiB9XQogICAgXTsKICAgIHZhciBMdWdnYWdlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOFY0YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIwaDQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMjAiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjIwIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIE1haWxDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEzVjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTkgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgTWFnbmV0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTUgNCA0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuMzUyIDEwLjY0OGExLjIwNSAxLjIwNSAwIDAgMCAwIDEuNzA0bDIuMjk2IDIuMjk2YTEuMjA1IDEuMjA1IDAgMCAwIDEuNzA0IDBsNi4wMjktNi4wMjlhMSAxIDAgMSAxIDMgM2wtNi4wMjkgNi4wMjlhMS4yMDUgMS4yMDUgMCAwIDAgMCAxLjcwNGwyLjI5NiAyLjI5NmExLjIwNSAxLjIwNSAwIDAgMCAxLjcwNCAwbDYuMzY1LTYuMzY3QTEgMSAwIDAgMCA4LjcxNiA0LjI4MnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSA4IDQgNCIgfV0KICAgIF07CiAgICB2YXIgTWFpbE1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTVWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMmMwIDEuMS45IDIgMiAyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOWg2IiB9XQogICAgXTsKICAgIHZhciBNYWlsT3BlbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjIgOC40Yy41LjM4LjguOTcuOCAxLjZ2MTBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWMTBhMiAyIDAgMCAxIC44LTEuNmw4LTZhMiAyIDAgMCAxIDIuNCAwbDggNloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTAtOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDEwIiB9XQogICAgXTsKICAgIHZhciBNYWlsUGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEzVjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOWg2IiB9XQogICAgXTsKICAgIHZhciBNYWlsUXVlc3Rpb25NYXJrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTAuNVY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjEyYzAgMS4xLjkgMiAyIDJoMTIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA3LTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE1LjI4Yy4yLS40LjUtLjguOS0xYTIuMSAyLjEgMCAwIDEgMi42LjRjLjMuNC41LjguNSAxLjMgMCAxLjMtMiAyLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMnYuMDEiIH1dCiAgICBdOwogICAgdmFyIE1haWxTZWFyY2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMi41VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg3LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMWEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZaIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMjItMS41LTEuNSIgfV0KICAgIF07CiAgICB2YXIgTWFpbFdhcm5pbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMC41VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMnYuMDEiIH1dCiAgICBdOwogICAgdmFyIE1haWxYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTNWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMmMwIDEuMS45IDIgMiAyaDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxNyA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMTctNCA0IiB9XQogICAgXTsKICAgIHZhciBNYWlsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk5MSA1LjcyN2EyIDIgMCAwIDEtMi4wMDkgMEwyIDciIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjQiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTYiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIE1haWxzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJ2LThhMiAyIDAgMCAxIDEtMS43MzIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNS41LTYuNDE5IDQuMTc5YTIgMiAwIDAgMS0yLjE2MiAwTDcgNS41IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICIzIiwgd2lkdGg6ICIxNSIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBNYWlsYm94ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTdhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWOS41QzIgNyA0IDUgNi41IDVIMThjMi4yIDAgNCAxLjggNCA0djhaIiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMTUsOSAxOCw5IDE4LDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNSA1QzkgNSAxMSA3IDExIDkuNVYxN2EyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjciLCB5MTogIjEwIiwgeTI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgTWFwTWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMSAxOS0xLjEwNi0uNTUyYTIgMiAwIDAgMC0xLjc4OCAwbC0zLjY1OSAxLjgzQTEgMSAwIDAgMSAzIDE5LjM4MVY2LjYxOGExIDEgMCAwIDEgLjU1My0uODk0bDQuNTUzLTIuMjc3YTIgMiAwIDAgMSAxLjc4OCAwbDQuMjEyIDIuMTA2YTIgMiAwIDAgMCAxLjc4OCAwbDMuNjU5LTEuODNBMSAxIDAgMCAxIDIxIDQuNjE5VjE0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDUuNzY0VjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE4aC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMy4yMzZ2MTUiIH1dCiAgICBdOwogICAgdmFyIE1hcFBpbkNoZWNrSW5zaWRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTBjMCA0Ljk5My01LjUzOSAxMC4xOTMtNy4zOTkgMTEuNzk5YTEgMSAwIDAgMS0xLjIwMiAwQzkuNTM5IDIwLjE5MyA0IDE0Ljk5MyA0IDEwYTggOCAwIDAgMSAxNiAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgTWFwUGluQ2hlY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS40MyAxMi45MzVjLjM1Ny0uOTY3LjU3LTEuOTU1LjU3LTIuOTM1YTggOCAwIDAgMC0xNiAwYzAgNC45OTMgNS41MzkgMTAuMTkzIDcuMzk5IDExLjc5OWExIDEgMCAwIDAgMS4yMDIgMCAzMi4xOTcgMzIuMTk3IDAgMCAwIC44MTMtLjcyOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE4IDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIE1hcFBpbkhvdXNlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMjJhMSAxIDAgMCAxLTEtMXYtNGExIDEgMCAwIDEgLjQ0NS0uODMybDMtMmExIDEgMCAwIDEgMS4xMSAwbDMgMkExIDEgMCAwIDEgMjIgMTd2NGExIDEgMCAwIDEtMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMGE4IDggMCAwIDAtMTYgMGMwIDQuOTkzIDUuNTM5IDEwLjE5MyA3LjM5OSAxMS43OTlhMSAxIDAgMCAwIC42MDEuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMnYtMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICIxMCIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBNYXBQaW5NaW51c0luc2lkZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEwYzAgNC45OTMtNS41MzkgMTAuMTkzLTcuMzk5IDExLjc5OWExIDEgMCAwIDEtMS4yMDIgMEM5LjUzOSAyMC4xOTMgNCAxNC45OTMgNCAxMGE4IDggMCAwIDEgMTYgMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwaDYiIH1dCiAgICBdOwogICAgdmFyIE1hcFBpbk1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguOTc3IDE0QzE5LjYgMTIuNzAxIDIwIDExLjM0MyAyMCAxMGE4IDggMCAwIDAtMTYgMGMwIDQuOTkzIDUuNTM5IDEwLjE5MyA3LjM5OSAxMS43OTlhMSAxIDAgMCAwIDEuMjAyIDAgMzIgMzIgMCAwIDAgLjgyNC0uNzM4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThoNiIgfV0KICAgIF07CiAgICB2YXIgTWFwUGluT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIuNzUgNy4wOWEzIDMgMCAwIDEgMi4xNiAyLjE2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjA3MiAxNy4wNzJjLTEuNjM0IDIuMTctMy41MjcgMy45MTItNC40NzEgNC43MjdhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDEuNDMyLTQuNTY4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjQ3NSAyLjgxOEE4IDggMCAwIDEgMjAgMTBjMCAxLjE4My0uMzEgMi4zNzctLjgxIDMuNTMzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMTMgOS4xM2EzIDMgMCAwIDAgMy43NCAzLjc0IiB9XQogICAgXTsKICAgIHZhciBNYXBQaW5QZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy45NyA5LjMwNEE4IDggMCAwIDAgMiAxMGMwIDQuNjkgNC44ODcgOS41NjIgNy4wMjIgMTEuNDY4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjM3OCAxNi42MjZhMSAxIDAgMCAwLTMuMDA0LTMuMDA0bC00LjAxIDQuMDEyYTIgMiAwIDAgMC0uNTA2Ljg1NGwtLjgzNyAyLjg3YS41LjUgMCAwIDAgLjYyLjYybDIuODctLjgzN2EyIDIgMCAwIDAgLjg1NC0uNTA2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICIxMCIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBNYXBQaW5QbHVzSW5zaWRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTBjMCA0Ljk5My01LjUzOSAxMC4xOTMtNy4zOTkgMTEuNzk5YTEgMSAwIDAgMS0xLjIwMiAwQzkuNTM5IDIwLjE5MyA0IDE0Ljk5MyA0IDEwYTggOCAwIDAgMSAxNiAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwaDYiIH1dCiAgICBdOwogICAgdmFyIE1hcFBpblBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS45MTQgMTEuMTA1QTcuMjk4IDcuMjk4IDAgMCAwIDIwIDEwYTggOCAwIDAgMC0xNiAwYzAgNC45OTMgNS41MzkgMTAuMTkzIDcuMzk5IDExLjc5OWExIDEgMCAwIDAgMS4yMDIgMCAzMiAzMiAwIDAgMCAuODI0LS43MzgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE1djYiIH1dCiAgICBdOwogICAgdmFyIE1hcFBpblhJbnNpZGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxMGMwIDQuOTkzLTUuNTM5IDEwLjE5My03LjM5OSAxMS43OTlhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDE2IDAiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSA3LjUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSA3LjUgNSA1IiB9XQogICAgXTsKICAgIHZhciBNYXBQaW5YID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuNzUyIDExLjkwMUE3Ljc4IDcuNzggMCAwIDAgMjAgMTBhOCA4IDAgMCAwLTE2IDBjMCA0Ljk5MyA1LjUzOSAxMC4xOTMgNy4zOTkgMTEuNzk5YTEgMSAwIDAgMCAxLjIwMiAwIDE5IDE5IDAgMCAwIC4wOS0uMDc3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEuNSAxNS41LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMS41IDIwLjUtNS01IiB9XQogICAgXTsKICAgIHZhciBNYXBQaW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxMGMwIDQuOTkzLTUuNTM5IDEwLjE5My03LjM5OSAxMS43OTlhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDE2IDAiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgTWFwUGlubmVkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTggOGMwIDMuNjEzLTMuODY5IDcuNDI5LTUuMzkzIDguNzk1YTEgMSAwIDAgMS0xLjIxNCAwQzkuODcgMTUuNDI5IDYgMTEuNjEzIDYgOGE2IDYgMCAwIDEgMTIgMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI4IiwgcjogIjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOC43MTQgMTRoLTMuNzFhMSAxIDAgMCAwLS45NDguNjgzbC0yLjAwNCA2QTEgMSAwIDAgMCAzIDIyaDE4YTEgMSAwIDAgMCAuOTQ4LTEuMzE2bC0yLTZhMSAxIDAgMCAwLS45NDktLjY4NGgtMy43MTIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIE1hcFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMSAxOS0xLjEwNi0uNTUyYTIgMiAwIDAgMC0xLjc4OCAwbC0zLjY1OSAxLjgzQTEgMSAwIDAgMSAzIDE5LjM4MVY2LjYxOGExIDEgMCAwIDEgLjU1My0uODk0bDQuNTUzLTIuMjc3YTIgMiAwIDAgMSAxLjc4OCAwbDQuMjEyIDIuMTA2YTIgMiAwIDAgMCAxLjc4OCAwbDMuNjU5LTEuODNBMSAxIDAgMCAxIDIxIDQuNjE5VjEyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDUuNzY0VjEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE1djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMThoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzLjIzNnYxNSIgfV0KICAgIF07CiAgICB2YXIgTWFwMiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0LjEwNiA1LjU1M2EyIDIgMCAwIDAgMS43ODggMGwzLjY1OS0xLjgzQTEgMSAwIDAgMSAyMSA0LjYxOXYxMi43NjRhMSAxIDAgMCAxLS41NTMuODk0bC00LjU1MyAyLjI3N2EyIDIgMCAwIDEtMS43ODggMGwtNC4yMTItMi4xMDZhMiAyIDAgMCAwLTEuNzg4IDBsLTMuNjU5IDEuODNBMSAxIDAgMCAxIDMgMTkuMzgxVjYuNjE4YTEgMSAwIDAgMSAuNTUzLS44OTRsNC41NTMtMi4yNzdhMiAyIDAgMCAxIDEuNzg4IDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDUuNzY0djE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMy4yMzZ2MTUiIH1dCiAgICBdOwogICAgdmFyIE1hcnNTdHJva2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA2IDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTcuNzUgNy43NSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjE1IiwgcjogIjYiIH1dCiAgICBdOwogICAgdmFyIE1hcnMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzaDV2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTYuNzUgNi43NSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICIxNCIsIHI6ICI2IiB9XQogICAgXTsKICAgIHZhciBNYXJ0aW5pID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDExdjExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDMtNyA4LTctOFoiIH1dCiAgICBdOwogICAgdmFyIE1heGltaXplMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDNoNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtNyA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMjEgNy03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFIM3YtNiIgfV0KICAgIF07CiAgICB2YXIgTWF4aW1pemUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDNINWEyIDIgMCAwIDAtMiAydjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOFY1YTIgMiAwIDAgMC0yLTJoLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNnYzYTIgMiAwIDAgMCAyIDJoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMWgzYTIgMiAwIDAgMCAyLTJ2LTMiIH1dCiAgICBdOwogICAgdmFyIE1lZGFsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy4yMSAxNSAyLjY2IDcuMTRhMiAyIDAgMCAxIC4xMy0yLjJMNC40IDIuOEEyIDIgMCAwIDEgNiAyaDEyYTIgMiAwIDAgMSAxLjYuOGwxLjYgMi4xNGEyIDIgMCAwIDEgLjE0IDIuMkwxNi43OSAxNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMiA1LjEyIDIuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyAxMiA1Ljg4LTkuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDdoOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNyIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4di0yaC0uNSIgfV0KICAgIF07CiAgICB2YXIgTWVnYXBob25lT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuNjM2IDZBMTMgMTMgMCAwIDAgMTkuNCAzLjIgMSAxIDAgMCAxIDIxIDR2MTEuMzQ0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjM3OCAxNC4zNTdBMTMgMTMgMCAwIDAgMTEgMTRINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE0YTEyIDEyIDAgMCAwIDIuNCA3LjIgMiAyIDAgMCAwIDMuMi0yLjRBOCA4IDAgMCAxIDEwIDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOHY2IiB9XQogICAgXTsKICAgIHZhciBNZWdhcGhvbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSA2YTEzIDEzIDAgMCAwIDguNC0yLjhBMSAxIDAgMCAxIDIxIDR2MTJhMSAxIDAgMCAxLTEuNi44QTEzIDEzIDAgMCAwIDExIDE0SDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTRhMTIgMTIgMCAwIDAgMi40IDcuMiAyIDIgMCAwIDAgMy4yLTIuNEE4IDggMCAwIDEgMTAgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA2djgiIH1dCiAgICBdOwogICAgdmFyIE1laCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE2IiwgeTE6ICIxNSIsIHkyOiAiMTUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiOS4wMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dCiAgICBdOwogICAgdmFyIE1lbW9yeVN0aWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTh2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTh2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMWgxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTh2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuNSAxMUgyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE4di0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOHYtMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNiIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxMCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgTWVudSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNWgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTloMTYiIH1dCiAgICBdOwogICAgdmFyIE1lcmdlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYxMC4zYTQgNCAwIDAgMS0xLjE3MiAyLjg3Mkw0IDIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDIyLTUtNSIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZUNpcmNsZUNvZGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCA5LTMgMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTUgMy0zLTMtMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTWVzc2FnZUNpcmNsZURhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjEgMi4xODJhMTAgMTAgMCAwIDEgMy44IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuOSAyMS44MThhMTAgMTAgMCAwIDEtMy44IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNjA5IDMuNzJhMTAgMTAgMCAwIDEgMi42OSAyLjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi4xODIgMTMuOWExMCAxMCAwIDAgMSAwLTMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4yOCAxNy42MWExMCAxMCAwIDAgMS0yLjcgMi42OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS44MTggMTAuMWExMCAxMCAwIDAgMSAwIDMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjcyMSA2LjM5MWExMCAxMCAwIDAgMSAyLjctMi42OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjE2MyAyMS4xMTctMi45MDYuODVhMSAxIDAgMCAxLTEuMjM2LTEuMTY5bC45NjUtMi45OCIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZUNpcmNsZUhlYXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy44MjggMTMuMDdBMyAzIDAgMCAxIDEyIDguNzY0YTMgMyAwIDAgMSA1LjAwNCAyLjIyNCAzIDMgMCAwIDEtLjgzMiAyLjA4M2wtMy40NDcgMy42MmExIDEgMCAwIDEtMS40NS0uMDAxeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTWVzc2FnZUNpcmNsZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00LjkzIDQuOTI5YTEwIDEwIDAgMCAwLTEuOTM4IDExLjQxMiAyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMCAwIDExLjMwMi0xLjk4OSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjM1IDIuNjlBMTAgMTAgMCAwIDEgMjEuMyAxNS42NSIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZUNpcmNsZU1vcmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLjAxIiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlQ2lyY2xlUGx1cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VDaXJjbGVRdWVzdGlvbk1hcmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN2guMDEiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VDaXJjbGVSZXBseSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE1LTMtMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMmg4YTIgMiAwIDAgMSAyIDJ2MSIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZUNpcmNsZVdhcm5pbmcgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZoLjAxIiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlQ2lyY2xlWCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDktNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgOSA2IDYiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VDaXJjbGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZUNvZGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgOC0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE0IDMtMy0zLTMiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVEYXNoZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE2djUuMjg2YS43MS43MSAwIDAgMCAxLjIxMi41MDJsMS4xNDktMS4xNDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTlhMiAyIDAgMCAwIDItMnYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDZWNWEyIDIgMCAwIDAtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgM2EyIDIgMCAwIDAtMiAydjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggM2gyIiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlU3F1YXJlRGlmZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDE3YTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMjEuMjg2VjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDloNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djQiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVEb3QgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi43IDNINGEyIDIgMCAwIDAtMiAydjE2LjI4NmEuNzEuNzEgMCAwIDAgMS4yMTIuNTAybDIuMjAyLTIuMjAyQTIgMiAwIDAgMSA2LjgyOCAxOUgyMGEyIDIgMCAwIDAgMi0ydi00LjciCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiNiIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlU3F1YXJlSGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy41IDkuNWMwIC42ODcuMjY1IDEuMzgzLjY5NyAxLjg0NGwzLjAwOSAzLjI2NGExLjE0IDEuMTQgMCAwIDAgLjQwNy4zMTQgMSAxIDAgMCAwIC43ODMtLjAwNCAxLjE0IDEuMTQgMCAwIDAgLjM5OC0uMzFsMy4wMDgtMy4yNjRBMi43NyAyLjc3IDAgMCAwIDE2LjUgOS41IDIuNSAyLjUgMCAwIDAgMTIgOGEyLjUgMi41IDAgMCAwLTQuNSAxLjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVMb2NrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgOC41VjVhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTYuMjg2YS43MS43MSAwIDAgMCAxLjIxMi41MDJsMi4yMDItMi4yMDJBMiAyIDAgMCAxIDYuODI4IDE5SDEwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE1di0yYTIgMiAwIDAgMC00IDB2MiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE0IiwgeTogIjE1Iiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZU1vcmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDExaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDExaC4wMSIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZU9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5IDE5SDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43LjcgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMS4xODQtMS44MjYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNjU2IDNIMjBhMiAyIDAgMCAxIDIgMnYxMS4zNDQiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDExaDYiIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVRdW90ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0YTIgMiAwIDAgMCAyLTJWOGgtMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNGEyIDIgMCAwIDAgMi0yVjhIOCIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZVJlcGx5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDgtMyAzIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNHYtMWEyIDIgMCAwIDAtMi0ySDciIH1dCiAgICBdOwogICAgdmFyIE1lc3NhZ2VTcXVhcmVTaGFyZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDNINGEyIDIgMCAwIDAtMiAydjE2LjI4NmEuNzEuNzEgMCAwIDAgMS4yMTIuNTAybDIuMjAyLTIuMjAyQTIgMiAwIDAgMSA2LjgyOCAxOUgyMGEyIDIgMCAwIDAgMi0ydi00IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDkgNi02IiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlU3F1YXJlVGV4dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDE3YTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMjEuMjg2VjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDExaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDdoOCIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZVdhcm5pbmcgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2NCIgfV0KICAgIF07CiAgICB2YXIgTWVzc2FnZVNxdWFyZVggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSA4LjUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSA4LjUgNSA1IiB9XQogICAgXTsKICAgIHZhciBNZXNzYWdlU3F1YXJlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBNZXNzYWdlc1NxdWFyZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2IDEwYTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMTQuMjg2VjRhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCA5YTIgMiAwIDAgMSAyIDJ2MTAuMjg2YS43MS43MSAwIDAgMS0xLjIxMi41MDJsLTIuMjAyLTIuMjAyQTIgMiAwIDAgMCAxNy4xNzIgMTlIMTBhMiAyIDAgMCAxLTItMnYtMSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTWljT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTl2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA5LjM0VjVhMyAzIDAgMCAwLTUuNjgtMS4zMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi45NSAxNi45NUE3IDcgMCAwIDEgNSAxMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC44OSAxMy4yM0E3IDcgMCAwIDAgMTkgMTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOXYzYTMgMyAwIDAgMCA1LjEyIDIuMTIiIH1dCiAgICBdOwogICAgdmFyIE1pY1ZvY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgNy42MDEtNS45OTQgOC4xOWExIDEgMCAwIDAgLjEgMS4yOThsLjgxNy44MThhMSAxIDAgMCAwIDEuMzE0LjA4N0wxNS4wOSAxMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNi41IDIxLjE3NEMxNS41IDIwLjUgMTQuMzcyIDIwIDEzIDIwYy0yLjA1OCAwLTMuOTI4IDIuMzU2LTYgMi0yLjA3Mi0uMzU2LTIuNzc1LTMuMzY5LTEuNS00LjUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiNyIsIHI6ICI1IiB9XQogICAgXTsKICAgIHZhciBNaWMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOXYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEwdjJhNyA3IDAgMCAxLTE0IDB2LTIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI5IiwgeTogIjIiLCB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMyIsIHJ4OiAiMyIgfV0KICAgIF07CiAgICB2YXIgTWljcm9jaGlwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxN2g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDdoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA2aDIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI2IiwgeTogIjIiLCB3aWR0aDogIjEyIiwgaGVpZ2h0OiAiMjAiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIE1pY3Jvc2NvcGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMmgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMmE3IDcgMCAxIDAgMC0xNGgtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE0aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMmEyIDIgMCAwIDEtMi0yVjZoNnY0YTIgMiAwIDAgMS0yIDJaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZWM2ExIDEgMCAwIDAtMS0xSDlhMSAxIDAgMCAwLTEgMXYzIiB9XQogICAgXTsKICAgIHZhciBNaWNyb3dhdmUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE1IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNyIsIHg6ICI2IiwgeTogIjgiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOHY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTl2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxOXYyIiB9XQogICAgXTsKICAgIHZhciBNaWxlc3RvbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM3Y4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDZhMSAxIDAgMCAwLTEgMXY1YTEgMSAwIDAgMCAxIDFoMTNhMiAyIDAgMCAwIDEuMTUyLS4zNjVsMy40MjQtMi4zMTdhMSAxIDAgMCAwIDAtMS42MzVsLTMuNDI0LTIuMzE4QTIgMiAwIDAgMCAxNyA2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTWlsa09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMmg4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMnYxLjM0M00xNSAydjIuNzg5YTQgNCAwIDAgMCAuNjcyIDIuMjE5bC42NTYuOTg0YTQgNCAwIDAgMSAuNjcyIDIuMjJ2MS4xMzFNNy44IDcuOGwtLjEyOC4xOTJBNCA0IDAgMCAwIDcgMTAuMjEyVjIwYTIgMiAwIDAgMCAyIDJoNmEyIDIgMCAwIDAgMi0ydi0zIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVhNi40NyA2LjQ3IDAgMCAxIDUgMCA2LjQ3MiA2LjQ3MiAwIDAgMCAzLjQzNS40MzUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICAgIHZhciBNaWxrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyaDgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSAydjIuNzg5YTQgNCAwIDAgMS0uNjcyIDIuMjE5bC0uNjU2Ljk4NEE0IDQgMCAwIDAgNyAxMC4yMTJWMjBhMiAyIDAgMCAwIDIgMmg2YTIgMiAwIDAgMCAyLTJ2LTkuNzg5YTQgNCAwIDAgMC0uNjcyLTIuMjE5bC0uNjU2LS45ODRBNCA0IDAgMCAxIDE1IDQuNzg4VjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNWE2LjQ3MiA2LjQ3MiAwIDAgMSA1IDAgNi40NyA2LjQ3IDAgMCAwIDUgMCIgfV0KICAgIF07CiAgICB2YXIgTWluaW1pemUyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTAgNy03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEwaC02VjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAyMSA3LTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNGg2djYiIH1dCiAgICBdOwogICAgdmFyIE1pbmltaXplID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzdjNhMiAyIDAgMCAxLTIgMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDhoLTNhMiAyIDAgMCAxLTItMlYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTZoM2EyIDIgMCAwIDEgMiAydjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjF2LTNhMiAyIDAgMCAxIDItMmgzIiB9XQogICAgXTsKICAgIHZhciBNaW51cyA9IFtbInBhdGgiLCB7IGQ6ICJNNSAxMmgxNCIgfV1dOwogICAgdmFyIE1vbml0b3JDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMiAyIDQtNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0KICAgIF07CiAgICB2YXIgTW9uaXRvckNsb3VkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTNhMyAzIDAgMSAxIDIuODMtNEgxNGEyIDIgMCAwIDEgMCA0eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMyIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgTW9uaXRvckNvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuMzA1IDcuNTMuOTIzLS4zODIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMjI4IDQuODUyLS45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi44NTIgMy4yMjgtLjM4My0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiA4Ljc3Mi0uMzgzLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4xNDggMy4yMjguMzgzLS45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuNTMgOS42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiA0Ljg1Mi45MjQtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgNy4xNDguOTI0LjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxM3YyYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICI2IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIE1vbml0b3JEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTNWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxMC0zIDMtMy0zIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XQogICAgXTsKICAgIHZhciBNb25pdG9yT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxN0g0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMS4xODQtMS44MjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjY1NiAzSDIwYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLS4yOTMgMS4wNDIiIH1dCiAgICBdOwogICAgdmFyIE1vbml0b3JEb3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyLjMwN1YxNWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoOC42OTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjYiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgTW9uaXRvclBhdXNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTNWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM1Y3IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XQogICAgXTsKICAgIHZhciBNb25pdG9yUGxheSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjAzMyA5LjQ0YS42NDcuNjQ3IDAgMCAxIDAgMS4xMmwtNC4wNjUgMi4zNTJhLjY0NS42NDUgMCAwIDEtLjk2OC0uNTZWNy42NDhhLjY0NS42NDUgMCAwIDEgLjk2Ny0uNTZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIzIiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBNb25pdG9yU3BlYWtlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuNSAyMEg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDloLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiMTYiLCB4OiAiMTIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDZINGEyIDIgMCAwIDAtMiAydjZhMiAyIDAgMCAwIDIgMmg0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjE1IiwgcjogIjEiIH1dCiAgICBdOwogICAgdmFyIE1vbml0b3JTdG9wID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxaDgiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjMiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI5IiwgeTogIjciLCB3aWR0aDogIjYiLCBoZWlnaHQ6ICI2Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBNb25pdG9yU21hcnRwaG9uZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDhWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnY3YTIgMiAwIDAgMCAyIDJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxOXYtMy45NiAzLjE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTloNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTAiLCB4OiAiMTYiLCB5OiAiMTIiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIE1vbml0b3JVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM1Y3IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XQogICAgXTsKICAgIHZhciBNb25pdG9yWCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgMTIuNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDEyLjUgNS01IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XQogICAgXTsKICAgIHZhciBNb25pdG9yID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiMTYiLCB5MTogIjIxIiwgeTI6ICIyMSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjE3IiwgeTI6ICIyMSIgfV0KICAgIF07CiAgICB2YXIgTW9vbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwLjk4NSAxMi40ODZhOSA5IDAgMSAxLTkuNDczLTkuNDcyYy40MDUtLjAyMi42MTcuNDYuNDAyLjgwM2E2IDYgMCAwIDAgOC4yNjggOC4yNjhjLjM0NC0uMjE1LjgyNS0uMDA0LjgwMy40MDEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIE1vb25TdGFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDN2NCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC45ODUgMTIuNDg2YTkgOSAwIDEgMS05LjQ3My05LjQ3MmMuNDA1LS4wMjIuNjE3LjQ2LjQwMi44MDNhNiA2IDAgMCAwIDguMjY4IDguMjY4Yy4zNDQtLjIxNS44MjUtLjAwNC44MDMuNDAxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBNb3RvcmJpa2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNC0xLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA5IDYgMmEyIDIgMCAwIDEgMi0yaDJhMiAyIDAgMCAxIDEuOTkgMS44MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE3aDNhMSAxIDAgMCAwIDEtMSA2IDYgMCAwIDEgNi02IDEgMSAwIDAgMCAxLTF2LS43NUE1IDUgMCAwIDAgMTcgNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxNyIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTciLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgTW91bnRhaW5Tbm93ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAzIDQgOCA1LTUgNSAxNUgyTDggM3oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4xNCAxNS4wOGMyLjYyLTEuNTcgNS4yNC0xLjQzIDcuODYuNDIgMi43NCAxLjk0IDUuNDkgMiA4LjIzLjE5IiB9XQogICAgXTsKICAgIHZhciBNb3VudGFpbiA9IFtbInBhdGgiLCB7IGQ6ICJtOCAzIDQgOCA1LTUgNSAxNUgyTDggM3oiIH1dXTsKICAgIHZhciBNb3VzZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2LjM0MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC4yMTggMTguMjE4QTcgNyAwIDAgMSA1IDE1VjlhNyA3IDAgMCAxIC43ODItMy4yMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTMuMzQzVjlBNyA3IDAgMCAwIDguNTYgMi45MDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjIgMiAyIiB9XQogICAgXTsKICAgIHZhciBNb3VzZVBvaW50ZXIyT2ZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTUuNTUgOC40NSA1LjEzOCAyLjA4N2EuNS41IDAgMCAxLS4wNjMuOTQ3bC02LjEyNCAxLjU4YTIgMiAwIDAgMC0xLjQzOCAxLjQzNWwtMS41NzkgNi4xMjZhLjUuNSAwIDAgMS0uOTQ3LjA2M0w4LjQ1IDE1LjU1MSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyIDIgMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi44MTYgMTEuNTI4LTIuNzc5LTYuODRhLjQ5NS40OTUgMCAwIDEgLjY1MS0uNjUxbDYuODQgMi43NzkiIH1dCiAgICBdOwogICAgdmFyIE1vdXNlUG9pbnRlcjIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00LjAzNyA0LjY4OGEuNDk1LjQ5NSAwIDAgMSAuNjUxLS42NTFsMTYgNi41YS41LjUgMCAwIDEtLjA2My45NDdsLTYuMTI0IDEuNThhMiAyIDAgMCAwLTEuNDM4IDEuNDM1bC0xLjU3OSA2LjEyNmEuNS41IDAgMCAxLS45NDcuMDYzeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTW91c2VQb2ludGVyQmFuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi4wMzQgMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDRMOC4yMDQgNy41NDVhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjYgMy40NDNhLjUuNSAwIDAgMS0uOTQ0LjAzM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMTYiLCByOiAiNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMS44IDExLjggOC40IDguNCIgfV0KICAgIF07CiAgICB2YXIgTW91c2VQb2ludGVyQ2xpY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA0LjEgMTIgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01LjEgOC0yLjktLjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxMi0xLjkgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjIgMi4yIDggNS4xIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkuMDM3IDkuNjlhLjQ5OC40OTggMCAwIDEgLjY1My0uNjUzbDExIDQuNWEuNS41IDAgMCAxLS4wNzQuOTQ5bC00LjM0OSAxLjA0MWExIDEgMCAwIDAtLjc0LjczOWwtMS4wNCA0LjM1YS41LjUgMCAwIDEtLjk1LjA3NHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIE1vdXNlUG9pbnRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjU4NiAxMi41ODYgMTkgMTkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy42ODggMy4wMzdhLjQ5Ny40OTcgMCAwIDAtLjY1MS42NTFsNi41IDE1Ljk5OWEuNTAxLjUwMSAwIDAgMCAuOTQ3LS4wNjJsMS41NjktNi4wODNhMiAyIDAgMCAxIDEuNDQ4LTEuNDc5bDYuMTI0LTEuNTc5YS41LjUgMCAwIDAgLjA2My0uOTQ3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTW91c2UgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjUiLCB5OiAiMiIsIHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIyMCIsIHJ4OiAiNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djQiIH1dCiAgICBdOwogICAgdmFyIE1vdmUzZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM3YxNmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDE5IDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDYgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNiAzIDMtMyAzIiB9XQogICAgXTsKICAgIHZhciBNb3ZlRGlhZ29uYWwyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTN2NmgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDExVjVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDUgMTQgMTQiIH1dCiAgICBdOwogICAgdmFyIE1vdmVEaWFnb25hbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE5SDV2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNWg2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgNSA1IDE5IiB9XQogICAgXTsKICAgIHZhciBNb3ZlRG93blJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTNWMTlIMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA1TDE5IDE5IiB9XQogICAgXTsKICAgIHZhciBNb3ZlRG93bkxlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxOUg1VjEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDVMNSAxOSIgfV0KICAgIF07CiAgICB2YXIgTW92ZURvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4TDEyIDIyTDE2IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJWMjIiIH1dCiAgICBdOwogICAgdmFyIE1vdmVIb3Jpem9udGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggOCA0IDQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiA4LTQgNCA0IDQiIH1dCiAgICBdOwogICAgdmFyIE1vdmVSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDhMMjIgMTJMMTggMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMkgyMiIgfV0KICAgIF07CiAgICB2YXIgTW92ZUxlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDhMMiAxMkw2IDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJIMjIiIH1dCiAgICBdOwogICAgdmFyIE1vdmVVcExlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDExVjVIMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA1TDE5IDE5IiB9XQogICAgXTsKICAgIHZhciBNb3ZlVXBSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDVIMTlWMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgNUw1IDE5IiB9XQogICAgXTsKICAgIHZhciBNb3ZlVXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDZMMTIgMkwxNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJWMjIiIH1dCiAgICBdOwogICAgdmFyIE1vdmVWZXJ0aWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxOCA0IDQgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggNiA0LTQgNCA0IiB9XQogICAgXTsKICAgIHZhciBNb3ZlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxOS0zIDMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDkgMyAzLTMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgOS0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgNSAzLTMgMyAzIiB9XQogICAgXTsKICAgIHZhciBNdXNpYzIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjE4IiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThWMmw3IDQiIH1dCiAgICBdOwogICAgdmFyIE11c2ljMyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE4IiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThWMiIgfV0KICAgIF07CiAgICB2YXIgTXVzaWM0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOFY1bDEyLTJ2MTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA5IDEyLTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE2IiwgcjogIjMiIH1dCiAgICBdOwogICAgdmFyIE5hdmlnYXRpb24yT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4zMSA5LjMxIDUgMjFsNy00IDcgNC0xLjE3LTMuMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuNTMgOC44OCAxMiAybC0xLjE3IDMuMTciIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICAgIHZhciBNdXNpYyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMThWNWwxMi0ydjEzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxNiIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBOYXZpZ2F0aW9uMiA9IFtbInBvbHlnb24iLCB7IHBvaW50czogIjEyIDIgMTkgMjEgMTIgMTcgNSAyMSAxMiAyIiB9XV07CiAgICB2YXIgTmF2aWdhdGlvbk9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNDMgOC40MyAzIDExbDggMiAyIDggMi41Ny01LjQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjM5IDExLjczIDIyIDJsLTkuNzMgNC42MSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIE5hdmlnYXRpb24gPSBbWyJwb2x5Z29uIiwgeyBwb2ludHM6ICIzIDExIDIyIDIgMTMgMjEgMTEgMTMgMyAxMSIgfV1dOwogICAgdmFyIE5ldHdvcmsgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjE2IiwgeTogIjE2Iiwgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMTYiLCB3aWR0aDogIjYiLCBoZWlnaHQ6ICI2Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiOSIsIHk6ICIyIiwgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE2di0zYTEgMSAwIDAgMSAxLTFoMTJhMSAxIDAgMCAxIDEgMXYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyVjgiIH1dCiAgICBdOwogICAgdmFyIE5ld3NwYXBlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE4aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE0aC04IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMjJoMTZhMiAyIDAgMCAwIDItMlY0YTIgMiAwIDAgMC0yLTJIOGEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMS00IDB2LTlhMiAyIDAgMCAxIDItMmgyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjEwIiwgeTogIjYiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIE5mYyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOC4zMmE3LjQzIDcuNDMgMCAwIDEgMCA3LjM2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNDYgNi4yMWExMS43NiAxMS43NiAwIDAgMSAwIDExLjU4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjkxIDQuMWExNS45MSAxNS45MSAwIDAgMSAuMDEgMTUuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi4zNyAyYTIwLjE2IDIwLjE2IDAgMCAxIDAgMjAiIH1dCiAgICBdOwogICAgdmFyIE5vbkJpbmFyeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41IDQgNyA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguNSA4IDctNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNyIsIHI6ICI1IiB9XQogICAgXTsKICAgIHZhciBOb3RlYm9va1RhYnMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDZoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMThoNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjIwIiwgeDogIjQiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAydjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDdoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMmg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE3aDUiIH1dCiAgICBdOwogICAgdmFyIE5vdGVib29rUGVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJ2LTcuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDZoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMThoNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggNS42MjZhMSAxIDAgMSAwLTMuMDA0LTMuMDA0bC01LjAxIDUuMDEyYTIgMiAwIDAgMC0uNTA2Ljg1NGwtLjgzNyAyLjg3YS41LjUgMCAwIDAgLjYyLjYybDIuODctLjgzN2EyIDIgMCAwIDAgLjg1NC0uNTA2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgTm90ZWJvb2tUZXh0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA2aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTRoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE4aDQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIyMCIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS41IDhoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjUgMTJIMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS41IDE2SDE0IiB9XQogICAgXTsKICAgIHZhciBOb3RlYm9vayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMjAiLCB4OiAiNCIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2MjAiIH1dCiAgICBdOwogICAgdmFyIE5vdGVwYWRUZXh0RGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTh2MmEyIDIgMCAwIDEtMiAyaC0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjJINmEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTR2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA4VjZhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTBoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGg1IiB9XQogICAgXTsKICAgIHZhciBOb3RlcGFkVGV4dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxOCIsIHg6ICI0IiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTRoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4aDUiIH1dCiAgICBdOwogICAgdmFyIE51dE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDRWMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01IDEwdjRhNy4wMDQgNy4wMDQgMCAwIDAgNS4yNzcgNi43ODdjLjQxMi4xMDQuODAyLjI5MiAxLjEwMi41OTJMMTIgMjJsLjYyMS0uNjIxYy4zLS4zLjY5LS40ODggMS4xMDItLjU5MmE3LjAxIDcuMDEgMCAwIDAgNC4xMjUtMi45MzkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTB2My4zNDMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMTJjLTEuMzQ5LS41NzMtMS45MDUtMS4wMDUtMi41LTItLjU0Ni45MDItMS4wNDggMS4zNTMtMi41IDItMS4wMTgtLjY0NC0xLjQ2LTEuMDgtMi0yLTEuMDI4LjcxLTEuNjkuOTE4LTMgMSAxLjA4MS0xLjA0OCAxLjc1Ny0yLjAzIDItMyAuMTk0LS43NzYuODQtMS41NTEgMS43OS0yLjIxbTExLjY1NCA1Ljk5N2MuODg3LS40NTcgMS4yOC0uODkxIDEuNTU2LTEuNzg3IDEuMDMyLjkxNiAxLjY4MyAxLjE1NyAzIDEtMS4yOTctMS4wMzYtMS43NTgtMi4wMy0yLTMtLjUtMi00LTQtOC00LS43NCAwLTEuNDYxLjA2OC0yLjE1LjE5MiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIE51dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDRWMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01IDEwdjRhNy4wMDQgNy4wMDQgMCAwIDAgNS4yNzcgNi43ODdjLjQxMi4xMDQuODAyLjI5MiAxLjEwMi41OTJMMTIgMjJsLjYyMS0uNjIxYy4zLS4zLjY5LS40ODggMS4xMDItLjU5MkE3LjAwMyA3LjAwMyAwIDAgMCAxOSAxNHYtNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiA0QzggNCA0LjUgNiA0IDhjLS4yNDMuOTctLjkxOSAxLjk1Mi0yIDMgMS4zMS0uMDgyIDEuOTcyLS4yOSAzLTEgLjU0LjkyLjk4MiAxLjM1NiAyIDIgMS40NTItLjY0NyAxLjk1NC0xLjA5OCAyLjUtMiAuNTk1Ljk5NSAxLjE1MSAxLjQyNyAyLjUgMiAxLjMxLS42MjEgMS44NjItMS4wNTggMi41LTIgLjYyOS45NzcgMS4xNjIgMS40MjMgMi41IDIgMS4yMDktLjU0OCAxLjY4LS45NjcgMi0yIDEuMDMyLjkxNiAxLjY4MyAxLjE1NyAzIDEtMS4yOTctMS4wMzYtMS43NTgtMi4wMy0yLTMtLjUtMi00LTQtOC00WiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgT2N0YWdvbkFsZXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2NCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS4zMTIgMmEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NmwtNC42ODgtNC42ODhBMiAyIDAgMCAxIDIgMTUuMzEyVjguNjg4YTIgMiAwIDAgMSAuNTg2LTEuNDE0bDQuNjg4LTQuNjg4QTIgMiAwIDAgMSA4LjY4OCAyeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgT2N0YWdvbk1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi41ODYgMTYuNzI2QTIgMiAwIDAgMSAyIDE1LjMxMlY4LjY4OGEyIDIgMCAwIDEgLjU4Ni0xLjQxNGw0LjY4OC00LjY4OEEyIDIgMCAwIDEgOC42ODggMmg2LjYyNGEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XQogICAgXTsKICAgIHZhciBPY3RhZ29uUGF1c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE1VjkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi41ODYgMTYuNzI2QTIgMiAwIDAgMSAyIDE1LjMxMlY4LjY4OGEyIDIgMCAwIDEgLjU4Ni0xLjQxNGw0LjY4OC00LjY4OEEyIDIgMCAwIDEgOC42ODggMmg2LjYyNGEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIE9jdGFnb25YID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi41ODYgMTYuNzI2QTIgMiAwIDAgMSAyIDE1LjMxMlY4LjY4OGEyIDIgMCAwIDEgLjU4Ni0xLjQxNGw0LjY4OC00LjY4OEEyIDIgMCAwIDEgOC42ODggMmg2LjYyNGEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA5IDYgNiIgfV0KICAgIF07CiAgICB2YXIgT2N0YWdvbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNTg2IDE2LjcyNkEyIDIgMCAwIDEgMiAxNS4zMTJWOC42ODhhMiAyIDAgMCAxIC41ODYtMS40MTRsNC42ODgtNC42ODhBMiAyIDAgMCAxIDguNjg4IDJoNi42MjRhMiAyIDAgMCAxIDEuNDE0LjU4Nmw0LjY4OCA0LjY4OEEyIDIgMCAwIDEgMjIgOC42ODh2Ni42MjRhMiAyIDAgMCAxLS41ODYgMS40MTRsLTQuNjg4IDQuNjg4YTIgMiAwIDAgMS0xLjQxNC41ODZIOC42ODhhMiAyIDAgMCAxLTEuNDE0LS41ODZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBPbWVnYSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMjBoNC41YS41LjUgMCAwIDAgLjUtLjV2LS4yODJhLjUyLjUyIDAgMCAwLS4yNDctLjQzNyA4IDggMCAxIDEgOC40OTQtLjAwMS41Mi41MiAwIDAgMC0uMjQ3LjQzOHYuMjgyYS41LjUgMCAwIDAgLjUuNUgyMSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgT3B0aW9uID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzaDZsNiAxOGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDNoNyIgfV0KICAgIF07CiAgICB2YXIgT3JiaXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4zNDEgNi40ODRBMTAgMTAgMCAwIDEgMTAuMjY2IDIxLjg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuNjU5IDE3LjUxNkExMCAxMCAwIDAgMSAxMy43NCAyLjE1MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjUiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjE5IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIE9yaWdhbWkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMlY0YTEgMSAwIDAgMSAxLTFoNi4yOTdhMSAxIDAgMCAxIC42NTEgMS43NTlsLTQuNjk2IDQuMDI1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJtMTIgMjEtNy40MTQtNy40MTRBMiAyIDAgMCAxIDQgMTIuMTcyVjYuNDE1YTEuMDAyIDEuMDAyIDAgMCAxIDEuNzA3LS43MDdMMjAgMjAuMDA5IiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMi4yMTQgMy4zODEgOC40MTQgMTQuOTY2YTEgMSAwIDAgMS0uMTY3IDEuMTk5bC0xLjE2OCAxLjE2M2ExIDEgMCAwIDEtLjcwNi4yOTFINi4zNTFhMSAxIDAgMCAxLS42MjUtLjIxOUwzLjI1IDE4LjhhMSAxIDAgMCAxIC42MzEtMS43ODFsNC4xNjUuMDI3IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQYWNrYWdlMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNi43NiAzYTIgMiAwIDAgMSAxLjggMS4xbDIuMjMgNC40NzlhMiAyIDAgMCAxIC4yMS44OTFWMTlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOS40NzJhMiAyIDAgMCAxIC4yMTEtLjg5NEw1LjQ1IDQuMUEyIDIgMCAwIDEgNy4yNCAzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjA1NCA5LjAxM2gxNy44OTMiIH1dCiAgICBdOwogICAgdmFyIFBhY2thZ2VDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE2IDIgMiA0LTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMTBWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDItMS4xNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03LjUgNC4yNyA5IDUuMTUiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIzLjI5IDcgMTIgMTIgMjAuNzEgNyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgICB2YXIgUGFja2FnZU1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxMFY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsMi0xLjE0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuNSA0LjI3IDkgNS4xNSIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjMuMjkgNyAxMiAxMiAyMC43MSA3IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMjIiLCB5MjogIjEyIiB9XQogICAgXTsKICAgIHZhciBQYWNrYWdlT3BlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi05IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjE3IDIuMjFhMS42NyAxLjY3IDAgMCAxIDEuNjMgMEwyMSA0LjU3YTEuOTMgMS45MyAwIDAgMSAwIDMuMzZMOC44MiAxNC43OWExLjY1NSAxLjY1NSAwIDAgMS0xLjY0IDBMMyAxMi40M2ExLjkzIDEuOTMgMCAwIDEgMC0zLjM2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM3YzLjg3YTIuMDYgMi4wNiAwIDAgMS0xLjExIDEuODNsLTYgMy4wOGExLjkzIDEuOTMgMCAwIDEtMS43OCAwbC02LTMuMDhBMi4wNiAyLjA2IDAgMCAxIDQgMTYuODdWMTMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMTIuNDNhMS45MyAxLjkzIDAgMCAwIDAtMy4zNkw4LjgzIDIuMmExLjY0IDEuNjQgMCAwIDAtMS42MyAwTDMgNC41N2ExLjkzIDEuOTMgMCAwIDAgMCAzLjM2bDEyLjE4IDYuODZhMS42MzYgMS42MzYgMCAwIDAgMS42MyAweiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGFja2FnZVBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEzdjYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMTBWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDItMS4xNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03LjUgNC4yNyA5IDUuMTUiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIzLjI5IDcgMTIgMTIgMjAuNzEgNyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgICB2YXIgUGFja2FnZVNlYXJjaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDEwVjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGwyLTEuMTQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNy41IDQuMjcgOSA1LjE1IiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMy4yOSA3IDEyIDEyIDIwLjcxIDciIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIyMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOC41IiwgY3k6ICIxNS41IiwgcjogIjIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4yNyAxNy4yNyAyMiAxOSIgfV0KICAgIF07CiAgICB2YXIgUGFja2FnZVggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxMFY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsMi0xLjE0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuNSA0LjI3IDkgNS4xNSIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjMuMjkgNyAxMiAxMiAyMC43MSA3IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMjIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDEzIDUgNW0tNSAwIDUtNSIgfV0KICAgIF07CiAgICB2YXIgUGFja2FnZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDIxLjczYTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzN6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIyVjEyIiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMy4yOSA3IDEyIDEyIDIwLjcxIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNy41IDQuMjcgOSA1LjE1IiB9XQogICAgXTsKICAgIHZhciBQYWludEJ1Y2tldCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDcgNiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4Ljk5MiAxMkgyLjA0MSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4xNDUgMTguMzhBMy4zNCAzLjM0IDAgMCAxIDIwIDE2LjVhMy4zIDMuMyAwIDAgMS0xLjE0NSAxLjg4Yy0uNTc1LjQ2LS44NTUgMS4wMi0uODU1IDEuNTk1QTIgMiAwIDAgMCAyMCAyMmEyIDIgMCAwIDAgMi0yLjAyNWMwLS41OC0uMjg1LTEuMTMtLjg1NS0xLjU5NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm04LjUgNC41IDIuMTQ4LTIuMTQ4YTEuMjA1IDEuMjA1IDAgMCAxIDEuNzA0IDBsNy4yOTYgNy4yOTZhMS4yMDUgMS4yMDUgMCAwIDEgMCAxLjcwNGwtNy41OTIgNy41OTJhMy42MTUgMy42MTUgMCAwIDEtNS4xMTIgMGwtMy44ODgtMy44ODhhMy42MTUgMy42MTUgMCAwIDEgMC01LjExMkw1LjY3IDcuMzMiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFBhaW50Um9sbGVyID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICI2IiwgeDogIjIiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNnYtMmEyIDIgMCAwIDEgMi0yaDhhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMC0yLTJoLTIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNCIsIGhlaWdodDogIjYiLCB4OiAiOCIsIHk6ICIxNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgUGFpbnRicnVzaFZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyYTEgMSAwIDAgMSAxIDF2OUg2VjNhMSAxIDAgMCAxIDEtMXoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAxMmExIDEgMCAwIDAtMSAxdjFhMiAyIDAgMCAwIDIgMmgyYTEgMSAwIDAgMSAxIDF2Mi45YTIgMiAwIDEgMCA0IDBWMTdhMSAxIDAgMCAxIDEtMWgyYTIgMiAwIDAgMCAyLTJ2LTFhMSAxIDAgMCAwLTEtMSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGFpbnRicnVzaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjYyMiAxNy44OTctMTAuNjgtMi45MTMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguMzc2IDIuNjIyYTEgMSAwIDEgMSAzLjAwMiAzLjAwMkwxNy4zNiA5LjY0M2EuNS41IDAgMCAwIDAgLjcwN2wuOTQ0Ljk0NGEyLjQxIDIuNDEgMCAwIDEgMCAzLjQwOGwtLjk0NC45NDRhLjUuNSAwIDAgMS0uNzA3IDBMOC4zNTQgNy4zNDhhLjUuNSAwIDAgMSAwLS43MDdsLjk0NC0uOTQ0YTIuNDEgMi40MSAwIDAgMSAzLjQwOCAwbC45NDQuOTQ0YS41LjUgMCAwIDAgLjcwNyAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDhjLTEuODA0IDIuNzEtMy45NyAzLjQ2LTYuNTgzIDMuOTQ4YS41MDcuNTA3IDAgMCAwLS4zMDIuODE5bDcuMzIgOC44ODNhMSAxIDAgMCAwIDEuMTg1LjIwNEMxMi43MzUgMjAuNDA1IDE2IDE2Ljc5MiAxNiAxNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGFsZXR0ZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDIyYTEgMSAwIDAgMSAwLTIwIDEwIDkgMCAwIDEgMTAgOSA1IDUgMCAwIDEtNSA1aC0yLjI1YTEuNzUgMS43NSAwIDAgMC0xLjQgMi44bC4zLjRhMS43NSAxLjc1IDAgMCAxLTEuNCAyLjh6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTMuNSIsIGN5OiAiNi41IiwgcjogIi41IiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3LjUiLCBjeTogIjEwLjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNi41IiwgY3k6ICIxMi41IiwgcjogIi41IiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjguNSIsIGN5OiAiNy41IiwgcjogIi41IiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0KICAgIF07CiAgICB2YXIgUGFuZGEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS4yNSAxNy4yNWgxLjVMMTIgMTh6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDEyIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2LjVhLjUuNSAwIDAgMC0uNS0uNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC42OSA5LjY3YTQuNSA0LjUgMCAxIDAtNy4wNC01LjUgOC4zNSA4LjM1IDAgMCAwLTMuMyAwIDQuNSA0LjUgMCAxIDAtNy4wNCA1LjVDMi40OSAxMS4yIDIgMTIuODggMiAxNC41IDIgMTkuNDcgNi40OCAyMiAxMiAyMnMxMC0yLjUzIDEwLTcuNWMwLTEuNjItLjQ4LTMuMy0xLjMtNC44MyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDYuNWEuNDk1LjQ5NSAwIDAgMSAuNS0uNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEyLTIgMiIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxCb3R0b21DbG9zZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOC0zIDMtMy0zIiB9XQogICAgXTsKICAgIHZhciBQYW5lbEJvdHRvbURhc2hlZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE1aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTVoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNWgxIiB9XQogICAgXTsKICAgIHZhciBQYW5lbEJvdHRvbU9wZW4gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMy0zIDMgMyIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxMZWZ0Q2xvc2UgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTUtMy0zIDMtMyIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxCb3R0b20gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDE4IiB9XQogICAgXTsKICAgIHZhciBQYW5lbExlZnREYXNoZWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOXYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOXYxIiB9XQogICAgXTsKICAgIHZhciBQYW5lbExlZnRPcGVuID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzdjE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDkgMyAzLTMgMyIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxMZWZ0UmlnaHREYXNoZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMFY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1di0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDIxdi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDVWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwVjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNXYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxdi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNVYzIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBQYW5lbExlZnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDN2MTgiIH1dCiAgICBdOwogICAgdmFyIFBhbmVsUmlnaHRDbG9zZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA5IDMgMy0zIDMiIH1dCiAgICBdOwogICAgdmFyIFBhbmVsUmlnaHREYXNoZWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE5djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDl2MSIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxSaWdodCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dCiAgICBdOwogICAgdmFyIFBhbmVsUmlnaHRPcGVuID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNS0zLTMgMy0zIiB9XQogICAgXTsKICAgIHZhciBQYW5lbFRvcEJvdHRvbURhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE1aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE1aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDloMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aDEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFBhbmVsVG9wQ2xvc2UgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDloMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNiAzLTMgMyAzIiB9XQogICAgXTsKICAgIHZhciBQYW5lbFRvcERhc2hlZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDloMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA5aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aDEiIH1dCiAgICBdOwogICAgdmFyIFBhbmVsVG9wT3BlbiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxNC0zIDMtMy0zIiB9XQogICAgXTsKICAgIHZhciBQYW5lbFRvcCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxOCIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxzTGVmdEJvdHRvbSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1aDEyIiB9XQogICAgXTsKICAgIHZhciBQYW5lbHNSaWdodEJvdHRvbSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YxOCIgfV0KICAgIF07CiAgICB2YXIgUGFuZWxzVG9wTGVmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxVjkiIH1dCiAgICBdOwogICAgdmFyIFBhcGVyY2xpcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE2IDYtOC40MTQgOC41ODZhMiAyIDAgMCAwIDIuODI5IDIuODI5bDguNDE0LTguNTg2YTQgNCAwIDEgMC01LjY1Ny01LjY1N2wtOC4zNzkgOC41NTFhNiA2IDAgMSAwIDguNDg1IDguNDg1bDguMzc5LTguNTUxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQYXJlbnRoZXNlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFzLTQtMy00LTkgNC05IDQtOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzczQgMyA0IDktNCA5LTQgOSIgfV0KICAgIF07CiAgICB2YXIgUGFya2luZ01ldGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTVoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE5djMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuMjgyIDE5YTEgMSAwIDAgMCAuOTQ4LS42OGwyLjM3LTYuOTg4YTcgNyAwIDEgMC0xMy4yIDBsMi4zNyA2Ljk4OGExIDEgMCAwIDAgLjk0OC42OHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5YTMgMyAwIDEgMSA2IDAiIH1dCiAgICBdOwogICAgdmFyIFBhcnR5UG9wcGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNS44IDExLjMgMiAyMmwxMC43LTMuNzkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyMGguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMjIgMi0yLjI0Ljc1YTIuOSAyLjkgMCAwIDAtMS45NiAzLjEyYy4xLjg2LS41NyAxLjYzLTEuNDUgMS42M2gtLjM4Yy0uODYgMC0xLjYuNi0xLjc2IDEuNDRMMTQgMTAiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTMtLjgyLS4zM2MtLjg2LS4zNC0xLjgyLjItMS45OCAxLjExYy0uMTEuNy0uNzIgMS4yMi0xLjQzIDEuMjJIMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgMiAuMzMuODJjLjM0Ljg2LS4yIDEuODItMS4xMSAxLjk4QzkuNTIgNC45IDkgNS41MiA5IDYuMjNWNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSAxM2MxLjkzIDEuOTMgMi44MyA0LjE3IDIgNS0uODMuODMtMy4wNy0uMDctNS0yLTEuOTMtMS45My0yLjgzLTQuMTctMi01IC44My0uODMgMy4wNy4wNyA1IDJaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQYXVzZSA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMTQiLCB5OiAiMyIsIHdpZHRoOiAiNSIsIGhlaWdodDogIjE4Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNSIsIHk6ICIzIiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiMTgiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIFBhd1ByaW50ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiNCIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjgiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjIwIiwgY3k6ICIxNiIsIHI6ICIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTBhNSA1IDAgMCAxIDUgNXYzLjVhMy41IDMuNSAwIDAgMS02Ljg0IDEuMDQ1UTYuNTIgMTcuNDggNC40NiAxNi44NEEzLjUgMy41IDAgMCAxIDUuNSAxMFoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFBjQ2FzZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiMjAiLCB4OiAiNSIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDZoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwaDYiIH1dCiAgICBdOwogICAgdmFyIFBlbkxpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAyMWg4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjE3NCA2LjgxMmExIDEgMCAwIDAtMy45ODYtMy45ODdMMy44NDIgMTYuMTc0YTIgMiAwIDAgMC0uNS44M2wtMS4zMjEgNC4zNTJhLjUuNSAwIDAgMCAuNjIzLjYyMmw0LjM1My0xLjMyYTIgMiAwIDAgMCAuODMtLjQ5N3oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFBlbk9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTEwIDEwLTYuMTU3IDYuMTYyYTIgMiAwIDAgMC0uNS44MzNsLTEuMzIyIDQuMzZhLjUuNSAwIDAgMCAuNjIyLjYyNGw0LjM1OC0xLjMyM2EyIDIgMCAwIDAgLjgzLS41TDE0IDEzLjk4MiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMi44MjkgNy4xNzIgNC4zNTktNC4zNDZhMSAxIDAgMSAxIDMuOTg2IDMuOTg2bC00LjM1MyA0LjM1MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogICAgdmFyIFBlblRvb2wgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS43MDcgMjEuMjkzYTEgMSAwIDAgMS0xLjQxNCAwbC0xLjU4Ni0xLjU4NmExIDEgMCAwIDEgMC0xLjQxNGw1LjU4Ni01LjU4NmExIDEgMCAwIDEgMS40MTQgMGwxLjU4NiAxLjU4NmExIDEgMCAwIDEgMCAxLjQxNHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTggMTMtMS4zNzUtNi44NzRhMSAxIDAgMCAwLS43NDYtLjc3NkwzLjIzNSAyLjAyOGExIDEgMCAwIDAtMS4yMDcgMS4yMDdMNS4zNSAxNS44NzlhMSAxIDAgMCAwIC43NzYuNzQ2TDEzIDE4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIuMyAyLjMgNy4yODYgNy4yODYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgUGVuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGVuY2lsTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIxaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNSA0IDQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGVuY2lsT2ZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTAgMTAtNi4xNTcgNi4xNjJhMiAyIDAgMCAwLS41LjgzM2wtMS4zMjIgNC4zNmEuNS41IDAgMCAwIC42MjIuNjI0bDQuMzU4LTEuMzIzYTIgMiAwIDAgMCAuODMtLjVMMTQgMTMuOTgyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyLjgyOSA3LjE3MiA0LjM1OS00LjM0NmExIDEgMCAxIDEgMy45ODYgMy45ODZsLTQuMzUzIDQuMzUzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDUgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgICB2YXIgUGVuY2lsUnVsZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA3IDguNyAyLjdhMi40MSAyLjQxIDAgMCAwLTMuNCAwTDIuNyA1LjNhMi40MSAyLjQxIDAgMCAwIDAgMy40TDcgMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNiAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTEgNC4zIDQuM2MuOTQuOTQuOTQgMi40NiAwIDMuNGwtMi42IDIuNmMtLjk0Ljk0LTIuNDYuOTQtMy40IDBMMTEgMTciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA1IDQgNCIgfV0KICAgIF07CiAgICB2YXIgUGVuY2lsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA1IDQgNCIgfV0KICAgIF07CiAgICB2YXIgUGVudGFnb24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC44MyAyLjM4YTIgMiAwIDAgMSAyLjM0IDBsOCA1Ljc0YTIgMiAwIDAgMSAuNzMgMi4yNWwtMy4wNCA5LjI2YTIgMiAwIDAgMS0xLjkgMS4zN0g3LjA0YTIgMiAwIDAgMS0xLjktMS4zN0wyLjEgMTAuMzdhMiAyIDAgMCAxIC43My0yLjI1eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGVyY2VudCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICI1IiwgeTE6ICI1IiwgeTI6ICIxOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYuNSIsIGN5OiAiNi41IiwgcjogIjIuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3LjUiLCBjeTogIjE3LjUiLCByOiAiMi41IiB9XQogICAgXTsKICAgIHZhciBQZXJzb25TdGFuZGluZyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByOiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDIwIDMtNiAzIDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiA4IDYgMiA2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTB2NCIgfV0KICAgIF07CiAgICB2YXIgUGhpbGlwcGluZVBlc28gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMUg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDdINCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxVjRhMSAxIDAgMCAxIDEtMWg0YTEgMSAwIDAgMSAwIDEySDciIH1dCiAgICBdOwogICAgdmFyIFBob25lQ2FsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDJhOSA5IDAgMCAxIDkgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA2YTUgNSAwIDAgMSA1IDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuODMyIDE2LjU2OGExIDEgMCAwIDAgMS4yMTMtLjMwM2wuMzU1LS40NjVBMiAyIDAgMCAxIDE3IDE1aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJBMTggMTggMCAwIDEgMiA0YTIgMiAwIDAgMSAyLTJoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLS44IDEuNmwtLjQ2OC4zNTFhMSAxIDAgMCAwLS4yOTIgMS4yMzMgMTQgMTQgMCAwIDAgNi4zOTIgNi4zODQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFBob25lRm9yd2FyZGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDIgNCA0LTQgNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy44MzIgMTYuNTY4YTEgMSAwIDAgMCAxLjIxMy0uMzAzbC4zNTUtLjQ2NUEyIDIgMCAwIDEgMTcgMTVoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCA2LjM5MiA2LjM4NCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGhvbmVJbmNvbWluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2Nmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDItNiA2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjgzMiAxNi41NjhhMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyQTE4IDE4IDAgMCAxIDIgNGEyIDIgMCAwIDEgMi0yaDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0uOCAxLjZsLS40NjguMzUxYTEgMSAwIDAgMC0uMjkyIDEuMjMzIDE0IDE0IDAgMCAwIDYuMzkyIDYuMzg0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQaG9uZU1pc3NlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDItNiA2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjgzMiAxNi41NjhhMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyQTE4IDE4IDAgMCAxIDIgNGEyIDIgMCAwIDEgMi0yaDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0uOCAxLjZsLS40NjguMzUxYTEgMSAwIDAgMC0uMjkyIDEuMjMzIDE0IDE0IDAgMCAwIDYuMzkyIDYuMzg0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQaG9uZU9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjEgMTMuOWExNCAxNCAwIDAgMCAzLjczMiAyLjY2OCAxIDEgMCAwIDAgMS4yMTMtLjMwM2wuMzU1LS40NjVBMiAyIDAgMCAxIDE3IDE1aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDIgMTggMTggMCAwIDEtMTIuNzI4LTUuMjcyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIgMiAyMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00Ljc2IDEzLjU4MkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCAuMjQ0LjQ3MyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGhvbmVPdXRnb2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDggNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDhWMmgtNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy44MzIgMTYuNTY4YTEgMSAwIDAgMCAxLjIxMy0uMzAzbC4zNTUtLjQ2NUEyIDIgMCAwIDEgMTcgMTVoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCA2LjM5MiA2LjM4NCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGhvbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy44MzIgMTYuNTY4YTEgMSAwIDAgMCAxLjIxMy0uMzAzbC4zNTUtLjQ2NUEyIDIgMCAwIDEgMTcgMTVoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCA2LjM5MiA2LjM4NCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGkgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICI5IiwgeTE6ICI0IiwgeTI6ICIyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDdjMC0xLjcgMS4zLTMgMy0zaDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIwYy0xLjcgMC0zLTEuMy0zLTNWNCIgfV0KICAgIF07CiAgICB2YXIgUGlhbm8gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOC41IDhjLTEuNCAwLTIuNi0uOC0zLjItMkE2Ljg3IDYuODcgMCAwIDAgMiA5djExYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtOC41QzIyIDkuNiAyMC40IDggMTguNSA4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTRoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE0djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNHY0IiB9XQogICAgXTsKICAgIHZhciBQaWNrYXhlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTMtOC4zODEgOC4zOGExIDEgMCAwIDEtMy4wMDEtM0wxMSA5Ljk5OSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS45NzMgNC4wMjdBMTMgMTMgMCAwIDAgNS45MDIgMi4zNzNjLTEuMzk4LjM0Mi0xLjA5MiAyLjE1OC4yNzcgMi42MDFhMTkuOSAxOS45IDAgMCAxIDUuODIyIDMuMDI0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjAwMSAxMS45OTlhMTkuOSAxOS45IDAgMCAxIDMuMDI0IDUuODI0Yy40NDQgMS4zNjkgMi4yNiAxLjY3NiAyLjYwMy4yNzhBMTMgMTMgMCAwIDAgMjAgOC4wNjkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguMzUyIDMuMzUyYTEuMjA1IDEuMjA1IDAgMCAwLTEuNzA0IDBsLTUuMjk2IDUuMjk2YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRsMi4yOTYgMi4yOTZhMS4yMDUgMS4yMDUgMCAwIDAgMS43MDQgMGw1LjI5Ni01LjI5NmExLjIwNSAxLjIwNSAwIDAgMCAwLTEuNzA0eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGljdHVyZUluUGljdHVyZTIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTBjMCAxLjEuOSAyIDIgMmg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiNyIsIHg6ICIxMiIsIHk6ICIxMyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgUGljdHVyZUluUGljdHVyZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoNlY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgNCA2IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTBWN2EyIDIgMCAwIDAtMi0yaC03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTR2MmEyIDIgMCAwIDAgMiAyaDMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxMiIsIHk6ICIxNCIsIHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI3Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBQaWdneUJhbmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSAxN2gzdjJhMSAxIDAgMCAwIDEgMWgyYTEgMSAwIDAgMCAxLTF2LTNhMy4xNiAzLjE2IDAgMCAwIDItMmgxYTEgMSAwIDAgMCAxLTF2LTJhMSAxIDAgMCAwLTEtMWgtMWE1IDUgMCAwIDAtMi00VjNhNCA0IDAgMCAwLTMuMiAxLjZsLS4zLjRIMTFhNiA2IDAgMCAwLTYgNnYxYTUgNSAwIDAgMCAyIDR2M2ExIDEgMCAwIDAgMSAxaDJhMSAxIDAgMCAwIDEtMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOHYxYTIgMiAwIDAgMCAyIDJoMSIgfV0KICAgIF07CiAgICB2YXIgUGlsY3Jvd0xlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzdjExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDloLTNhMyAzIDAgMCAxIDAtNmg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDN2MTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMThIMmw0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAyMi00LTQiIH1dCiAgICBdOwogICAgdmFyIFBpbGNyb3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgNEg5LjVhNC41IDQuNSAwIDAgMCAwIDlIMTMiIH1dCiAgICBdOwogICAgdmFyIFBpbGNyb3dSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDN2MTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOUg3YTEgMSAwIDAgMSAwLTZoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzdjExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDE0IDQgNEgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE4LTQgNCIgfV0KICAgIF07CiAgICB2YXIgUGlsbEJvdHRsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExaC00YTEgMSAwIDAgMC0xIDF2NWExIDEgMCAwIDAgMSAxaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA3djEzYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjciIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICI1IiwgeDogIjQiLCB5OiAiMiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgUGlsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwLjUgMjAuNSAxMC0xMGE0Ljk1IDQuOTUgMCAxIDAtNy03bC0xMCAxMGE0Ljk1IDQuOTUgMCAxIDAgNyA3WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjUgOC41IDcgNyIgfV0KICAgIF07CiAgICB2YXIgUGluT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA5LjM0VjdhMSAxIDAgMCAxIDEtMSAyIDIgMCAwIDAgMC00SDcuODkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOXYxLjc2YTIgMiAwIDAgMS0xLjExIDEuNzlsLTEuNzguOUEyIDIgMCAwIDAgNSAxNS4yNFYxNmExIDEgMCAwIDAgMSAxaDExIiB9XQogICAgXTsKICAgIHZhciBQaW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTAuNzZhMiAyIDAgMCAxLTEuMTEgMS43OWwtMS43OC45QTIgMiAwIDAgMCA1IDE1LjI0VjE2YTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMXYtLjc2YTIgMiAwIDAgMC0xLjExLTEuNzlsLTEuNzgtLjlBMiAyIDAgMCAxIDE1IDEwLjc2VjdhMSAxIDAgMCAxIDEtMSAyIDIgMCAwIDAgMC00SDhhMiAyIDAgMCAwIDAgNCAxIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUGlwZXR0ZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTEyIDktOC40MTQgOC40MTRBMiAyIDAgMCAwIDMgMTguODI4djEuMzQ0YTIgMiAwIDAgMS0uNTg2IDEuNDE0QTIgMiAwIDAgMSAzLjgyOCAyMWgxLjM0NGEyIDIgMCAwIDAgMS40MTQtLjU4NkwxNSAxMiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCA5IC40LjRhMSAxIDAgMSAxLTMgM2wtMy44LTMuOGExIDEgMCAxIDEgMy0zbC40LjQgMy40LTMuNGExIDEgMCAxIDEgMyAzeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIyIC40MTQtLjQxNCIgfV0KICAgIF07CiAgICB2YXIgUGl6emEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNC0xIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNzUgMTguMjUtMS4yNSAxLjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljc3NSA1LjY1NGExNS42OCAxNS42OCAwIDAgMC0xMi4xMjEgMTIuMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguOCA5LjNhMSAxIDAgMCAwIDIuMSA3LjciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuOTY0IDIwLjczMmExIDEgMCAwIDEtMS4yMzIgMS4yMzJsLTE4LTVhMSAxIDAgMCAxLS42OTUtMS4yMzJBMTkuNjggMTkuNjggMCAwIDEgMTUuNzMyIDIuMDM3YTEgMSAwIDAgMSAxLjIzMi42OTV6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQbGFuZUxhbmRpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIyaDIwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuNzcgMTAuNzcgMiA5bDItNC41IDEuMS41NWMuNTUuMjguOS44NC45IDEuNDVzLjM1IDEuMTcuOSAxLjQ1TDggOC41bDMtNiAxLjA1LjUzYTIgMiAwIDAgMSAxLjA5IDEuNTJsLjcyIDUuNGEyIDIgMCAwIDAgMS4wOSAxLjUybDQuNCAyLjJjLjQyLjIyLjc4LjU1IDEuMDEuOTZsLjYgMS4wM2MuNDkuODgtLjA2IDEuOTgtMS4wNiAyLjFsLTEuMTguMTVjLS40Ny4wNi0uOTUtLjAyLTEuMzctLjI0TDQuMjkgMTEuMTVhMiAyIDAgMCAxLS41Mi0uMzhaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQbGFuZVRha2VvZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIyaDIwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYuMzYgMTcuNCA0IDE3bC0yLTQgMS4xLS41NWEyIDIgMCAwIDEgMS44IDBsLjE3LjFhMiAyIDAgMCAwIDEuOCAwTDggMTIgNSA2bC45LS40NWEyIDIgMCAwIDEgMi4wOS4ybDQuMDIgM2EyIDIgMCAwIDAgMi4xLjJsNC4xOS0yLjA2YTIuNDEgMi40MSAwIDAgMSAxLjczLS4xN0wyMSA3YTEuNCAxLjQgMCAwIDEgLjg3IDEuOTlsLS4zOC43NmMtLjIzLjQ2LS42Ljg0LTEuMDcgMS4wOEw3LjU4IDE3LjJhMiAyIDAgMCAxLTEuMjIuMThaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQbGF5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk01IDVhMiAyIDAgMCAxIDMuMDA4LTEuNzI4bDExLjk5NyA2Ljk5OGEyIDIgMCAwIDEgLjAwMyAzLjQ1OGwtMTIgN0EyIDIgMCAwIDEgNSAxOXoiIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQbGFuZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjggMTkuMiAxNiAxMWwzLjUtMy41QzIxIDYgMjEuNSA0IDIxIDNjLTEtLjUtMyAwLTQuNSAxLjVMMTMgOCA0LjggNi4yYy0uNS0uMS0uOS4xLTEuMS41bC0uMy41Yy0uMi41LS4xIDEgLjMgMS4zTDkgMTJsLTIgM0g0bC0xIDEgMyAyIDIgMyAxLTF2LTNsMy0yIDMuNSA1LjNjLjMuNC44LjUgMS4zLjNsLjUtLjJjLjQtLjMuNi0uNy41LTEuMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFBsdWcyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA4aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTFWOGgxMnYzYTYgNiAwIDEgMS0xMiAwWiIgfV0KICAgIF07CiAgICB2YXIgUGx1ZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDhWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA4YTEgMSAwIDAgMSAxIDF2NGE0IDQgMCAwIDEtNCA0aC00YTQgNCAwIDAgMS00LTRWOWExIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDhWMiIgfV0KICAgIF07CiAgICB2YXIgUGx1Z1phcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMyAyMC4zYTIuNCAyLjQgMCAwIDAgMy40IDBMMTIgMThsLTYtNi0yLjMgMi4zYTIuNCAyLjQgMCAwIDAgMCAzLjRaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMjIgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNSAxMy41IDEwIDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUgMTYuNSAxMyAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAzLTQgNGg2bC00IDQiIH1dCiAgICBdOwogICAgdmFyIFBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEyaDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDV2MTQiIH1dCiAgICBdOwogICAgdmFyIFBvY2tldEtuaWZlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAydjFjMCAxIDIgMSAyIDJTMyA2IDMgN3MyIDEgMiAyLTIgMS0yIDIgMiAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC44MyA4LjgzYTQgNCAwIDAgMC01LjY2LTUuNjZsLTEyIDEyYTQgNCAwIDEgMCA1LjY2IDUuNjZaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExLjY2VjIyYTQgNCAwIDAgMCA0LTRWNiIgfV0KICAgIF07CiAgICB2YXIgUG9kY2FzdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE3YTEgMSAwIDEgMC0yIDBsLjUgNC41YTAuNSAwLjUgMCAwIDAgMSAweiIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuODUgMTguNThhOSA5IDAgMSAwLTkuNyAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTRhNSA1IDAgMSAxIDggMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMSIsIHI6ICIxIiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0KICAgIF07CiAgICB2YXIgUG9pbnRlck9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDQuNVY0YTIgMiAwIDAgMC0yLjQxLTEuOTU3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjkgOC40YTIgMiAwIDAgMC0xLjI2LTEuMjk1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjcgMTYuMkE4IDggMCAwIDAgMjIgMTR2LTNhMiAyIDAgMSAwLTQgMHYtMWEyIDIgMCAwIDAtMy42My0xLjE1OCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAibTcgMTUtMS44LTEuOGEyIDIgMCAwIDAtMi43OSAyLjg2TDYgMTkuN2E3Ljc0IDcuNzQgMCAwIDAgNiAyLjNoMmE4IDggMCAwIDAgNS42NTctMi4zNDMiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNnY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgICB2YXIgUG9ja2V0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgM2EyIDIgMCAwIDEgMiAydjZhMSAxIDAgMCAxLTIwIDBWNWEyIDIgMCAwIDEgMi0yeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDEwIDQgNCA0LTQiIH1dCiAgICBdOwogICAgdmFyIFBvaW50ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNGE4IDggMCAwIDEtOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExdi0xYTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMFY5YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDkuNVY0YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnYxMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCAxMWEyIDIgMCAxIDEgNCAwdjNhOCA4IDAgMCAxLTggOGgtMmMtMi44IDAtNC41LS44Ni01Ljk5LTIuMzRsLTMuNi0zLjZhMiAyIDAgMCAxIDIuODMtMi44Mkw3IDE1IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQb3Bjb3JuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGEyIDIgMCAwIDAgMC00IDIgMiAwIDAgMC00IDAgMiAyIDAgMCAwLTQgMCAyIDIgMCAwIDAtNCAwIDIgMiAwIDAgMCAwIDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjIgOSA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDIyIDEtMTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgOGMuNSAwIC45LjQuOCAxbC0yLjYgMTJjLS4xLjUtLjcgMS0xLjIgMUg3Yy0uNiAwLTEuMS0uNC0xLjItMUwzLjIgOWMtLjEtLjYuMy0xIC44LTFaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQb3BzaWNsZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTguNiAxNC40Yy44LS44LjgtMiAwLTIuOGwtOC4xLTguMWE0Ljk1IDQuOTUgMCAxIDAtNy4xIDcuMWw4LjEgOC4xYy45LjcgMi4xLjcgMi45LS4xWiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMjItNS41LTUuNSIgfV0KICAgIF07CiAgICB2YXIgUG91bmRTdGVybGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDdjMC01LjMzMy04LTUuMzMzLTggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA3djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjFoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxM2gxMCIgfV0KICAgIF07CiAgICB2YXIgUG93ZXJPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC4zNiA2LjY0QTkgOSAwIDAgMSAyMC43NyAxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjE2IDYuMTZhOSA5IDAgMSAwIDEyLjY4IDEyLjY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogICAgdmFyIFBvd2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC40IDYuNmE5IDkgMCAxIDEtMTIuNzcuMDQiIH1dCiAgICBdOwogICAgdmFyIFByZXNlbnRhdGlvbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgM2gyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAzdjExYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAyMSA1LTUgNSA1IiB9XQogICAgXTsKICAgIHZhciBQcmludGVyQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy41IDIySDdhMSAxIDAgMCAxLTEtMXYtNmExIDEgMCAwIDEgMS0xaDEwYTEgMSAwIDAgMSAxIDF2LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTkgMiAyIDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4SDRhMiAyIDAgMCAxLTItMnYtNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDlWM2ExIDEgMCAwIDEgMS0xaDEwYTEgMSAwIDAgMSAxIDF2NiIgfV0KICAgIF07CiAgICB2YXIgUHJpbnRlclggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi41MzEgMjJIN2ExIDEgMCAwIDEtMS0xdi02YTEgMSAwIDAgMSAxLTFoNi4zNzciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuNSAxNi41IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi41IDIxLjUgNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMThINGEyIDIgMCAwIDEtMi0ydi01YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnYxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA5VjNhMSAxIDAgMCAxIDEtMWgxMGExIDEgMCAwIDEgMSAxdjYiIH1dCiAgICBdOwogICAgdmFyIFByaW50ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4SDRhMiAyIDAgMCAxLTItMnYtNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NWEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOVYzYTEgMSAwIDAgMSAxLTFoMTBhMSAxIDAgMCAxIDEgMXY2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNiIsIHk6ICIxNCIsIHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICI4Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBQcm9qZWN0b3IgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDcgMyA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNlYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzIDcgMi0yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiMTMiLCByOiAiMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTExLjgzIDEySDIwYTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtNGEyIDIgMCAwIDEgMi0yaDIuMTciIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2aDIiIH1dCiAgICBdOwogICAgdmFyIFByb3BvcnRpb25zID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloMTNhMiAyIDAgMCAxIDIgMnY5IiB9XQogICAgXTsKICAgIHZhciBQdXp6bGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS4zOSA0LjM5YTEgMSAwIDAgMCAxLjY4LS40NzQgMi41IDIuNSAwIDEgMSAzLjAxNCAzLjAxNSAxIDEgMCAwIDAtLjQ3NCAxLjY4bDEuNjgzIDEuNjgyYTIuNDE0IDIuNDE0IDAgMCAxIDAgMy40MTRMMTkuNjEgMTUuMzlhMSAxIDAgMCAxLTEuNjgtLjQ3NCAyLjUgMi41IDAgMSAwLTMuMDE0IDMuMDE1IDEgMSAwIDAgMSAuNDc0IDEuNjhsLTEuNjgzIDEuNjgyYTIuNDE0IDIuNDE0IDAgMCAxLTMuNDE0IDBMOC42MSAxOS42MWExIDEgMCAwIDAtMS42OC40NzQgMi41IDIuNSAwIDEgMS0zLjAxNC0zLjAxNSAxIDEgMCAwIDAgLjQ3NC0xLjY4bC0xLjY4My0xLjY4MmEyLjQxNCAyLjQxNCAwIDAgMSAwLTMuNDE0TDQuMzkgOC42MWExIDEgMCAwIDEgMS42OC40NzQgMi41IDIuNSAwIDEgMCAzLjAxNC0zLjAxNSAxIDEgMCAwIDEtLjQ3NC0xLjY4bDEuNjgzLTEuNjgyYTIuNDE0IDIuNDE0IDAgMCAxIDMuNDE0IDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBQeXJhbWlkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi41IDE2Ljg4YTEgMSAwIDAgMS0uMzItMS40M2w5LTEzLjAyYTEgMSAwIDAgMSAxLjY0IDBsOSAxMy4wMWExIDEgMCAwIDEtLjMyIDEuNDRsLTguNTEgNC44NmEyIDIgMCAwIDEtMS45OCAwWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIwIiB9XQogICAgXTsKICAgIHZhciBRckNvZGUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiNSIsIHg6ICIzIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNSIsIGhlaWdodDogIjUiLCB4OiAiMTYiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiNSIsIHg6ICIzIiwgeTogIjE2Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE2aC0zYTIgMiAwIDAgMC0yIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAyMXYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3YzYTIgMiAwIDAgMS0yIDJINyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNnYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMnYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjF2LTEiIH1dCiAgICBdOwogICAgdmFyIFF1b3RlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgM2EyIDIgMCAwIDAtMiAydjZhMiAyIDAgMCAwIDIgMiAxIDEgMCAwIDEgMSAxdjFhMiAyIDAgMCAxLTIgMiAxIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAwIDEgMSA2IDYgMCAwIDAgNi02VjVhMiAyIDAgMCAwLTItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNSAzYTIgMiAwIDAgMC0yIDJ2NmEyIDIgMCAwIDAgMiAyIDEgMSAwIDAgMSAxIDF2MWEyIDIgMCAwIDEtMiAyIDEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxIDYgNiAwIDAgMCA2LTZWNWEyIDIgMCAwIDAtMi0yeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUmFiYml0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTZhMyAzIDAgMCAxIDIuMjQgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTggMjFoLThhNCA0IDAgMCAxLTQtNCA3IDcgMCAwIDEgNy03aC4yTDkuNiA2LjRhMSAxIDAgMSAxIDIuOC0yLjhMMTUuOCA3aC4yYzMuMyAwIDYgMi43IDYgNnYxYTIgMiAwIDAgMS0yIDJoLTFhMyAzIDAgMCAwLTMgMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA4LjU0VjRhMiAyIDAgMSAwLTQgMHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNjEyIDEyLjUyNGEzIDMgMCAxIDAtMS42IDQuMyIgfV0KICAgIF07CiAgICB2YXIgUmFkYXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS4wNyA0LjkzQTEwIDEwIDAgMCAwIDYuOTkgMy4zNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuMjkgOS42MkExMCAxMCAwIDEgMCAyMS4zMSA4LjM1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjI0IDcuNzZBNiA2IDAgMSAwIDguMjMgMTYuNjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljk5IDExLjY2QTYgNiAwIDAgMSAxNS43NyAxNi42NyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjQxIDEwLjU5IDUuNjYtNS42NiIgfV0KICAgIF07CiAgICB2YXIgUmFkaWF0aW9uID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDE1LjQ2NDFhNCA0IDAgMCAxLTQgMEw3LjUyNzg2IDE5Ljc0NTk3IEEgMSAxIDAgMCAwIDcuOTkzMDMgMjEuMTYyMTEgMTAgMTAgMCAwIDAgMTYuMDA2OTcgMjEuMTYyMTEgMSAxIDAgMCAwIDE2LjQ3MjE0IDE5Ljc0NTk3eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiAxMmE0IDQgMCAwIDAtMi0zLjQ2NGwyLjQ3Mi00LjI4MmExIDEgMCAwIDEgMS40Ni0uMzA1IDEwIDEwIDAgMCAxIDQuMDA2IDYuOTRBMSAxIDAgMCAxIDIxIDEyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04IDEyYTQgNCAwIDAgMSAyLTMuNDY0TDcuNTI4IDQuMjU0YTEgMSAwIDAgMC0xLjQ2LS4zMDUgMTAgMTAgMCAwIDAtNC4wMDYgNi45NEExIDEgMCAwIDAgMyAxMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFJhZGljYWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDEyaDMuMjhhMSAxIDAgMCAxIC45NDguNjg0bDIuMjk4IDcuOTM0YS41LjUgMCAwIDAgLjk2LS4wNDRMMTMuODIgNC43NzFBMSAxIDAgMCAxIDE0Ljc5MiA0SDIxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBSYWRpb1JlY2VpdmVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxNnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE2djIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI4IiwgeDogIjIiLCB5OiAiOCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmguMDEiIH1dCiAgICBdOwogICAgdmFyIFJhZGlvVG93ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjkgMTYuMUMxIDEyLjIgMSA1LjggNC45IDEuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjggNC43YTYuMTQgNi4xNCAwIDAgMC0uOCA3LjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjIgNC44YzIgMiAyLjI2IDUuMTEuOCA3LjQ3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjEgMS45YTkuOTYgOS45NiAwIDAgMSAwIDE0LjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS41IDE4aDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAyMiA0LTExIDQgMTEiIH1dCiAgICBdOwogICAgdmFyIFJhZGlvID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuMjQ3IDcuNzYxYTYgNiAwIDAgMSAwIDguNDc4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjA3NSA0LjkzM2ExMCAxMCAwIDAgMSAwIDE0LjEzNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjkyNSAxOS4wNjdhMTAgMTAgMCAwIDEgMC0xNC4xMzQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy43NTMgMTYuMjM5YTYgNiAwIDAgMSAwLTguNDc4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIFJhZGl1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjM0IDE3LjUyYTEwIDEwIDAgMSAwLTIuODIgMi44MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjQxIDEzLjQxIDQuMTggNC4xOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBSYWlsU3ltYm9sID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxNWgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDloMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMjAtNS01IDYtNi01LTUiIH1dCiAgICBdOwogICAgdmFyIFJhaW5ib3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxN2ExMCAxMCAwIDAgMC0yMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTdhNiA2IDAgMCAxIDEyIDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTdhMiAyIDAgMCAxIDQgMCIgfV0KICAgIF07CiAgICB2YXIgUmF0aW8gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMiIsIGhlaWdodDogIjIwIiwgeDogIjYiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgUmF0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMjJINGEyIDIgMCAwIDEgMC00aDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjIzNiAxOGEzIDMgMCAwIDAtMi4yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOWguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYuODIgMy45NGEzIDMgMCAxIDEgMy4yMzcgNC44NjhsMS44MTUgMi41ODdhMS41IDEuNSAwIDAgMS0xLjUgMi4xbC0yLjg3Mi0uNDUzYTMgMyAwIDAgMC0zLjUgMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA0Ljk4OGEzIDMgMCAxIDAtNS4yIDIuMDUyQTcgNyAwIDAgMCA0IDE0LjAxNSA0IDQgMCAwIDAgOCAxOCIgfV0KICAgIF07CiAgICB2YXIgUmVjZWlwdENlbnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDFaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDYuNXYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA5LjRhNCA0IDAgMSAwIDAgNS4yIiB9XQogICAgXTsKICAgIHZhciBSZWNlaXB0RXVybyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDkuNWE0IDQgMCAxIDAgMCA1LjIiIH1dCiAgICBdOwogICAgdmFyIFJlY2VpcHRJbmRpYW5SdXBlZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA3aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTcuNSA4IDE1aDFhNCA0IDAgMCAwIDAtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDExaDgiIH1dCiAgICBdOwogICAgdmFyIFJlY2VpcHRKYXBhbmVzZVllbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTAgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgNyAzIDN2Ny41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTFoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1aDYiIH1dCiAgICBdOwogICAgdmFyIFJlY2VpcHRQb3VuZFN0ZXJsaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAydjIwbDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxIDItMSAyIDFWMmwtMiAxLTItMS0yIDEtMi0xLTIgMS0yLTEtMiAxWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEzaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTdWOS41YTIuNSAyLjUgMCAwIDEgNSAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTdoNyIgfV0KICAgIF07CiAgICB2YXIgUmVjZWlwdFJ1c3NpYW5SdWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTFoNWEyIDIgMCAxIDAgMC00aC0zdjEwIiB9XQogICAgXTsKICAgIHZhciBSZWNlaXB0VGV4dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE2SDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOEg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEySDgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAzYTEgMSAwIDAgMSAxLTEgMS4zIDEuMyAwIDAgMSAuNy4ybC45MzMuNmExLjMgMS4zIDAgMCAwIDEuNCAwbC45MzQtLjZhMS4zIDEuMyAwIDAgMSAxLjQgMGwuOTMzLjZhMS4zIDEuMyAwIDAgMCAxLjQgMGwuOTMzLS42YTEuMyAxLjMgMCAwIDEgMS40IDBsLjkzNC42YTEuMyAxLjMgMCAwIDAgMS40IDBsLjkzMy0uNkExLjMgMS4zIDAgMCAxIDE5IDJhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxIDEuMyAxLjMgMCAwIDEtLjctLjJsLS45MzMtLjZhMS4zIDEuMyAwIDAgMC0xLjQgMGwtLjkzNC42YTEuMyAxLjMgMCAwIDEtMS40IDBsLS45MzMtLjZhMS4zIDEuMyAwIDAgMC0xLjQgMGwtLjkzMy42YTEuMyAxLjMgMCAwIDEtMS40IDBsLS45MzQtLjZhMS4zIDEuMyAwIDAgMC0xLjQgMGwtLjkzMy42YTEuMyAxLjMgMCAwIDEtLjcuMiAxIDEgMCAwIDEtMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgUmVjZWlwdFN3aXNzRnJhbmMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDFaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE3VjdoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoNSIgfV0KICAgIF07CiAgICB2YXIgUmVjZWlwdFR1cmtpc2hMaXJhID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNi41djExYTUuNSA1LjUgMCAwIDAgNS41LTUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA4LTYgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDF6IiB9XQogICAgXTsKICAgIHZhciBSZWNlaXB0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAydjIwbDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxIDItMSAyIDFWMmwtMiAxLTItMS0yIDEtMi0xLTIgMS0yLTEtMiAxWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4aC02YTIgMiAwIDEgMCAwIDRoNGEyIDIgMCAxIDEgMCA0SDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTcuNXYtMTEiIH1dCiAgICBdOwogICAgdmFyIFJlY3RhbmdsZUNpcmNsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDR2MTZIM2ExIDEgMCAwIDEtMS0xVjVhMSAxIDAgMCAxIDEtMXoiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNCIsIGN5OiAiMTIiLCByOiAiOCIgfV0KICAgIF07CiAgICB2YXIgUmVjdGFuZ2xlRWxsaXBzaXMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoLjAxIiB9XQogICAgXTsKICAgIHZhciBSZWN0YW5nbGVHb2dnbGVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgNmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMmgtNGEyIDIgMCAwIDEtMS42LS44bC0xLjYtMi4xM2ExIDEgMCAwIDAtMS42IDBMOS42IDE3LjJBMiAyIDAgMCAxIDggMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFJlY3RhbmdsZUhvcml6b250YWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgUmVjdGFuZ2xlVmVydGljYWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMiIsIGhlaWdodDogIjIwIiwgeDogIjYiLCB5OiAiMiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgUmVjeWNsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTlINC44MTVhMS44MyAxLjgzIDAgMCAxLTEuNTctLjg4MSAxLjc4NSAxLjc4NSAwIDAgMS0uMDA0LTEuNzg0TDcuMTk2IDkuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxOWg4LjIwM2ExLjgzIDEuODMgMCAwIDAgMS41NTYtLjg5IDEuNzg0IDEuNzg0IDAgMCAwIDAtMS43NzVsLTEuMjI2LTIuMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTYtMyAzIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjI5MyAxMy41OTYgNy4xOTYgOS41IDMuMSAxMC41OTgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtOS4zNDQgNS44MTEgMS4wOTMtMS44OTJBMS44MyAxLjgzIDAgMCAxIDExLjk4NSAzYTEuNzg0IDEuNzg0IDAgMCAxIDEuNTQ2Ljg4OGwzLjk0MyA2Ljg0MyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy4zNzggOS42MzMgNC4wOTYgMS4wOTggMS4wOTctNC4wOTYiIH1dCiAgICBdOwogICAgdmFyIFJlZG8yID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTQgNS01LTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA5SDkuNUE1LjUgNS41IDAgMCAwIDQgMTQuNUE1LjUgNS41IDAgMCAwIDkuNSAyMEgxMyIgfV0KICAgIF07CiAgICB2YXIgUmVkb0RvdCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE3IiwgcjogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgN3Y2aC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTdhOSA5IDAgMCAxIDktOSA5IDkgMCAwIDEgNiAyLjNsMyAyLjciIH1dCiAgICBdOwogICAgdmFyIFJlZG8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA3djZoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxN2E5IDkgMCAwIDEgOS05IDkgOSAwIDAgMSA2IDIuM2wzIDIuNyIgfV0KICAgIF07CiAgICB2YXIgUmVmcmVzaENjd0RvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyYTkgOSAwIDAgMC05LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjVoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDAgMCA5IDkgOS43NSA5Ljc1IDAgMCAwIDYuNzQtMi43NEwyMSAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmg1djUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgUmVmcmVzaENjdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyYTkgOSAwIDAgMC05LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjVoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDAgMCA5IDkgOS43NSA5Ljc1IDAgMCAwIDYuNzQtMi43NEwyMSAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmg1djUiIH1dCiAgICBdOwogICAgdmFyIFJlZnJlc2hDd09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDhMMTguNzQgNS43NEE5Ljc1IDkuNzUgMCAwIDAgMTIgM0MxMSAzIDEwLjAzIDMuMTYgOS4xMyAzLjQ3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTZIM3Y1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJDMyA5LjUxIDQgNy4yNiA1LjY0IDUuNjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxNiAyLjI2IDIuMjZBOS43NSA5Ljc1IDAgMCAwIDEyIDIxYzIuNDkgMCA0Ljc0LTEgNi4zNi0yLjY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyYzAgMS0uMTYgMS45Ny0uNDcgMi44NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAzdjVoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjIgMiAyIiB9XQogICAgXTsKICAgIHZhciBSZWZyZXNoQ3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDAgMSA5LTkgOS43NSA5Ljc1IDAgMCAxIDYuNzQgMi43NEwyMSA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDN2NWgtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMmE5IDkgMCAwIDEtOSA5IDkuNzUgOS43NSAwIDAgMS02Ljc0LTIuNzRMMyAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2SDN2NSIgfV0KICAgIF07CiAgICB2YXIgUmVmcmlnZXJhdG9yID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA2YTQgNCAwIDAgMSA0LTRoNmE0IDQgMCAwIDEgNCA0djE0YTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0yVjZaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTBoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgN3Y2IiB9XQogICAgXTsKICAgIHZhciBSZWdleCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDN2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuNjcgNS41IDguNjYgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMi42NyAxMC41IDguNjYtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE3YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjJhMiAyIDAgMCAwIDIgMmgyYTIgMiAwIDAgMCAyLTJ2LTJ6IiB9XQogICAgXTsKICAgIHZhciBSZW1vdmVGb3JtYXR0aW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA3VjRoMTZ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIwaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNCA4IDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE1IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxNS01IDUiIH1dCiAgICBdOwogICAgdmFyIFJlcGVhdDEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyIDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMXYtMWE0IDQgMCAwIDEgNC00aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMjItNC00IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxM3YxYTQgNCAwIDAgMS00IDRIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMGgxdjQiIH1dCiAgICBdOwogICAgdmFyIFJlcGVhdDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDkgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxOEg3YTIgMiAwIDAgMS0yLTJWNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxNS0zIDMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDZoNmEyIDIgMCAwIDEgMiAydjEwIiB9XQogICAgXTsKICAgIHZhciBSZXBlYXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyIDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMXYtMWE0IDQgMCAwIDEgNC00aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMjItNC00IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxM3YxYTQgNCAwIDAgMS00IDRIMyIgfV0KICAgIF07CiAgICB2YXIgUmVwbGFjZUFsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0YTEgMSAwIDAgMSAxIDF2NWExIDEgMCAwIDEtMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDRhMSAxIDAgMCAxIDEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMGExIDEgMCAwIDEtMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE0YTEgMSAwIDAgMSAxIDF2NWExIDEgMCAwIDEtMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDRhMSAxIDAgMCAwLTEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5YTEgMSAwIDAgMS0xIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA3IDMgMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMFY1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMTQiLCB3aWR0aDogIjciLCBoZWlnaHQ6ICI3Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBSZXBsYWNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNGExIDEgMCAwIDEgMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEwYTEgMSAwIDAgMS0xLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNGExIDEgMCAwIDAtMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDlhMSAxIDAgMCAxLTEgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDcgMyAzIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEwVjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIxNCIsIHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIFJlcGx5QWxsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTctNS01IDUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOHYtMmE0IDQgMCAwIDAtNC00SDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxNy01LTUgNS01IiB9XQogICAgXTsKICAgIHZhciBSZXBseSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4di0yYTQgNCAwIDAgMC00LTRINCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE3LTUtNSA1LTUiIH1dCiAgICBdOwogICAgdmFyIFJld2luZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZhMiAyIDAgMCAwLTMuNDE0LTEuNDE0bC02IDZhMiAyIDAgMCAwIDAgMi44MjhsNiA2QTIgMiAwIDAgMCAxMiAxOHoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgNmEyIDIgMCAwIDAtMy40MTQtMS40MTRsLTYgNmEyIDIgMCAwIDAgMCAyLjgyOGw2IDZBMiAyIDAgMCAwIDIyIDE4eiIgfV0KICAgIF07CiAgICB2YXIgUm9ja2V0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNC41IDE2LjVjLTEuNSAxLjI2LTIgNS0yIDVzMy43NC0uNSA1LTJjLjcxLS44NC43LTIuMTMtLjA5LTIuOTFhMi4xOCAyLjE4IDAgMCAwLTIuOTEtLjA5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMiAxNS0zLTNhMjIgMjIgMCAwIDEgMi0zLjk1QTEyLjg4IDEyLjg4IDAgMCAxIDIyIDJjMCAyLjcyLS43OCA3LjUtNiAxMWEyMi4zNSAyMi4zNSAwIDAgMS00IDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJINHMuNTUtMy4wMyAyLTRjMS42Mi0xLjA4IDUgMCA1IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTV2NXMzLjAzLS41NSA0LTJjMS4wOC0xLjYyIDAtNSAwLTUiIH1dCiAgICBdOwogICAgdmFyIFJvY2tpbmdDaGFpciA9IFsKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMy41IDIgNi41IDEyLjUgMTggMTIuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5LjUiLCB4MjogIjUuNSIsIHkxOiAiMTIuNSIsIHkyOiAiMjAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjE4LjUiLCB5MTogIjEyLjUiLCB5MjogIjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuNzUgMThhMTMgMTMgMCAwIDAgMTguNSAwIiB9XQogICAgXTsKICAgIHZhciBSaWJib24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMS4yMkMxMSA5Ljk5NyAxMCA5IDEwIDhhMiAyIDAgMCAxIDQgMGMwIDEtLjk5OCAyLjAwMi0yLjAxIDMuMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTggMi41Ny0zLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4yNDMgOS4wMTZhNyA3IDAgMCAxIDExLjUwNy0uMDA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMzUgMTQuNTMgMTIgMTEuMjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOS4zNSAxNC41M0M3LjcyOCAxMi4yNDYgNiAxMC4yMjEgNiA3YTYgNSAwIDAgMSAxMiAwYy0uMDA1IDMuMjItMS43NzggNS4yMzUtMy40MyA3LjVsMy41NTcgNC41MjdhMSAxIDAgMCAxLS4yMDMgMS40M2wtMS44OTQgMS4zNmExIDEgMCAwIDEtMS4zODQtLjIxNUwxMiAxOGwtMi42NzkgMy41OTNhMSAxIDAgMCAxLTEuMzkuMjEzbC0xLjg2NS0xLjM1M2ExIDEgMCAwIDEtLjIwMy0xLjQyMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFJvbGxlckNvYXN0ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE5VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTlWNi44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE5di03LjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE5di02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE5VjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOVY5YTQgNCAwIDAgMSA0LTRjMiAwIDQgMS4zMyA2IDRzNCA0IDYgNGE0IDQgMCAxIDAtMy02LjY1IiB9XQogICAgXTsKICAgIHZhciBSb3RhdGUzZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjQ2NiA3LjVDMTUuNjQzIDQuMjM3IDEzLjk1MiAyIDEyIDIgOS4yMzkgMiA3IDYuNDc3IDcgMTJzMi4yMzkgMTAgNSAxMGMuMzQyIDAgLjY3Ny0uMDY5IDEtLjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMTk0IDEzLjcwNyAzLjgxNCAxLjg2LTEuODYgMy44MTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkgMTUuNTdjLTEuODA0Ljg4NS00LjI3NCAxLjQzLTcgMS40My01LjUyMyAwLTEwLTIuMjM5LTEwLTVzNC40NzctNSAxMC01YzQuODM4IDAgOC44NzMgMS43MTggOS44IDQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFJvc2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMGgtMWE0IDQgMCAxIDEgNC00di41MzQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNmgxYTQgNCAwIDAgMSAxLjQyIDcuNzRsLTIuMjkuODdhNiA2IDAgMCAxLTUuMzM5LTEwLjY4bDIuMDY5LTEuMzEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00LjUgMTdjMi44LS41IDQuNCAwIDUuNS44czEuOCAyLjIgMi4zIDMuN2MtMiAuNC0zLjUuNC00LjgtLjMtMS4yLS42LTIuMy0xLjktMy00LjIiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNzcgMTJDNCAxNSAyIDIyIDIgMjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiOCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBSb3RhdGVDY3dLZXkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDkuNSAxIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuNSA4LjUtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc0IDkuNzQgMCAwIDAtNi43NCAyLjc0TDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2NWg1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjE0IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIFJvdGF0ZUNjd1NxdWFyZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDlWN2EyIDIgMCAwIDAtMi0yaC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDItMyAzIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxM3Y1YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAxIDItMmgyIiB9XQogICAgXTsKICAgIHZhciBSb3RhdGVDY3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDEgMCA5LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjVoNSIgfV0KICAgIF07CiAgICB2YXIgUm90YXRlQ3dTcXVhcmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA1SDZhMiAyIDAgMCAwLTIgMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgOCAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIiB9XQogICAgXTsKICAgIHZhciBSb3RhdGVDdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyYTkgOSAwIDEgMS05LTljMi41MiAwIDQuOTMgMSA2Ljc0IDIuNzRMMjEgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAzdjVoLTUiIH1dCiAgICBdOwogICAgdmFyIFJvdXRlT2ZmID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOSIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTloOC41Yy40IDAgLjktLjEgMS4zLS4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuMiA1LjJBMy41IDMuNTMgMCAwIDAgNi41IDEySDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNS4zYTMuNSAzLjUgMCAwIDAtMy4zLTMuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA1aC00LjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiNSIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBSb3V0ZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTkiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE5aDguNWEzLjUgMy41IDAgMCAwIDAtN2gtMTFhMy41IDMuNSAwIDAgMSAwLTdIMTUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiNSIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBSb3V0ZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjgiLCB4OiAiMiIsIHk6ICIxNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjAxIDE4SDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMDEgMThIMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTB2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy44NCA3LjE3YTQgNCAwIDAgMC01LjY2IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuNjYgNC4zNGE4IDggMCAwIDAtMTEuMzEgMCIgfV0KICAgIF07CiAgICB2YXIgUm93czIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XQogICAgXTsKICAgIHZhciBSb3dzMyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNUgzIiB9XQogICAgXTsKICAgIHZhciBSc3MgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDExYTkgOSAwIDAgMSA5IDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0YTE2IDE2IDAgMCAxIDE2IDE2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMSIgfV0KICAgIF07CiAgICB2YXIgUm93czQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA3LjVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE2LjVIMyIgfV0KICAgIF07CiAgICB2YXIgUnVsZXJEaW1lbnNpb25MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTV2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTV2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTV2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4VjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgNkgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDhWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE1di0zIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIxMiIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI4Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBSdWxlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjMgMTUuM2EyLjQgMi40IDAgMCAxIDAgMy40bC0yLjYgMi42YTIuNCAyLjQgMCAwIDEtMy40IDBMMi43IDguN2EyLjQxIDIuNDEgMCAwIDEgMC0zLjRsMi42LTIuNmEyLjQxIDIuNDEgMCAwIDEgMy40IDBaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgMTIuNSAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEuNSA5LjUgMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguNSA2LjUgMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjUgMTUuNSAyLTIiIH1dCiAgICBdOwogICAgdmFyIFNhaWxib2F0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnYxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIyYTQgNCAwIDAgMS00LTQgMSAxIDAgMCAxIDEtMWgxNmExIDEgMCAwIDEgMSAxIDQgNCAwIDAgMS00IDR6IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNOS4xNTkgMi40NmExIDEgMCAwIDEgMS41MjEtLjE5M2w5Ljk3NyA4Ljk4QTEgMSAwIDAgMSAyMCAxM0g0YTEgMSAwIDAgMS0uODI0LTEuNTY3eiIgfQogICAgICBdCiAgICBdOwogICAgdmFyIFJ1c3NpYW5SdWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTFoOGE0IDQgMCAwIDAgMC04SDl2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNWg4IiB9XQogICAgXTsKICAgIHZhciBTYWxhZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjFhOSA5IDAgMCAwIDktOUgzYTkgOSAwIDAgMCA5IDlaIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjM4IDEyYTIuNCAyLjQgMCAwIDEtLjQtNC43NyAyLjQgMi40IDAgMCAxIDMuMi0yLjc3IDIuNCAyLjQgMCAwIDEgMy40Ny0uNjMgMi40IDIuNCAwIDAgMSAzLjM3IDMuMzcgMi40IDIuNCAwIDAgMS0xLjEgMy43IDIuNTEgMi41MSAwIDAgMSAuMDMgMS4xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzIDEyIDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC45IDcuMjVBMy45OSAzLjk5IDAgMCAwIDQgMTBjMCAuNzMuMiAxLjQxLjU0IDIiIH1dCiAgICBdOwogICAgdmFyIFNhbmR3aWNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMi4zNyAxMS4yMjMgOC4zNzItNi43NzdhMiAyIDAgMCAxIDIuNTE2IDBsOC4zNzEgNi43NzciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTVhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTUuMjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNWExIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAwIDEgMWg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuNjcgMTUgNi4xMyA0LjZhMiAyIDAgMCAwIDIuOC0uNGwzLjE1LTQuMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjQiLCB4OiAiMiIsIHk6ICIxMSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgU2F0ZWxsaXRlRGlzaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBhNy4zMSA3LjMxIDAgMCAwIDEwIDEwWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxM2E2IDYgMCAwIDAtNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEzQTEwIDEwIDAgMCAwIDExIDMiIH1dCiAgICBdOwogICAgdmFyIFNhdGVsbGl0ZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTEzLjUgNi41LTMuMTQ4LTMuMTQ4YTEuMjA1IDEuMjA1IDAgMCAwLTEuNzA0IDBMNi4zNTIgNS42NDhhMS4yMDUgMS4yMDUgMCAwIDAgMCAxLjcwNEw5LjUgMTAuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi41IDcuNSAxOSA1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE3LjUgMTAuNSAzLjE0OCAzLjE0OGExLjIwNSAxLjIwNSAwIDAgMSAwIDEuNzA0bC0yLjI5NiAyLjI5NmExLjIwNSAxLjIwNSAwIDAgMS0xLjcwNCAwTDEzLjUgMTQuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxYTYgNiAwIDAgMC02LTYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOS4zNTIgMTAuNjQ4YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRsMi4yOTYgMi4yOTZhMS4yMDUgMS4yMDUgMCAwIDAgMS43MDQgMGw0LjI5Ni00LjI5NmExLjIwNSAxLjIwNSAwIDAgMCAwLTEuNzA0bC0yLjI5Ni0yLjI5NmExLjIwNSAxLjIwNSAwIDAgMC0xLjcwNCAweiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU2F1ZGlSaXlhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDE5LjUtNS41IDEuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC41IDR2MTEuMjJhMSAxIDAgMCAwIDEuMjQyLjk3TDIwIDE1LjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMi45NzggMTkuMzUxIDUuNTQ5LTEuMzYzQTIgMiAwIDAgMCAxMCAxNlYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEwIDQgMTMuNSIgfV0KICAgIF07CiAgICB2YXIgU2F2ZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEzSDhhMSAxIDAgMCAwLTEgMXY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDhoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMXYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuNDEgMjAuNDFBMiAyIDAgMCAxIDE5IDIxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAuNTktMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yOS41IDExLjVzNSA1IDQgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDNoNi4yYTIgMiAwIDAgMSAxLjQuNmwzLjggMy44YTIgMiAwIDAgMSAuNiAxLjRWMTUiIH1dCiAgICBdOwogICAgdmFyIFNhdmVBbGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjNhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE4di02YTEgMSAwIDAgMC0xLTFoLTZhMSAxIDAgMCAwLTEgMXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIySDRhMiAyIDAgMCAxLTItMlY2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTggMThhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOS4xNzJhMiAyIDAgMCAxIDEuNDE0LjU4NmwyLjgyOCAyLjgyOEEyIDIgMCAwIDEgMjIgNi44MjhWMTZhMiAyIDAgMCAxLTIuMDEgMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNhdmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS4yIDNhMiAyIDAgMCAxIDEuNC42bDMuOCAzLjhhMiAyIDAgMCAxIC42IDEuNFYxOWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIxdi03YTEgMSAwIDAgMC0xLTFIOGExIDEgMCAwIDAtMSAxdjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAzdjRhMSAxIDAgMCAwIDEgMWg3IiB9XQogICAgXTsKICAgIHZhciBTY2FsZTNkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA3djExYTEgMSAwIDAgMCAxIDFoMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNS4yOTMgMTguNzA3IDExIDEzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjE5IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICI1IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIFNjYWxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA4IDMgOGE1IDUgMCAwIDEtNiAwelY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN2gxYTE3IDE3IDAgMCAwIDgtMiAxNyAxNyAwIDAgMCA4IDJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDggMyA4YTUgNSAwIDAgMS02IDB6VjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMWgxMCIgfV0KICAgIF07CiAgICB2YXIgU2NhbGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDNINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNUg5di01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoNXY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDMgOSAxNSIgfV0KICAgIF07CiAgICB2YXIgU2NhbkJhcmNvZGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA3djEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgN3YxMCIgfV0KICAgIF07CiAgICB2YXIgU2NhbkV5ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4Ljk0NCAxMi4zM2ExIDEgMCAwIDAgMC0uNjYgNy41IDcuNSAwIDAgMC0xMy44ODggMCAxIDEgMCAwIDAgMCAuNjYgNy41IDcuNSAwIDAgMCAxMy44ODggMCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU2NhbkZhY2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNHMxLjUgMiA0IDIgNC0yIDQtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDloLjAxIiB9XQogICAgXTsKICAgIHZhciBTY2FuSGVhcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk03LjgyOCAxMy4wN0EzIDMgMCAwIDEgMTIgOC43NjRhMyAzIDAgMCAxIDQuMTcyIDQuMzA2bC0zLjQ0NyAzLjYyYTEgMSAwIDAgMS0xLjQ0OSAweiIgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNjYW5MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoMTAiIH1dCiAgICBdOwogICAgdmFyIFNjYW5RckNvZGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMnY0YTEgMSAwIDAgMS0xIDFoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA4VjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjciLCB5OiAiNyIsIHdpZHRoOiAiNSIsIGhlaWdodDogIjUiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIFNjYW5TZWFyY2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNi0xLjktMS45IiB9XQogICAgXTsKICAgIHZhciBTY2FuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIiB9XQogICAgXTsKICAgIHZhciBTY2FuVGV4dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDhoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTZoNiIgfV0KICAgIF07CiAgICB2YXIgU2Nob29sID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjF2LTNhMiAyIDAgMCAwLTQgMHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDV2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNCA2IDcuMTA2LTMuNzlhMiAyIDAgMCAxIDEuNzg4IDBMMjAgNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm02IDExLTMuNTIgMi4xNDdhMSAxIDAgMCAwLS40OC44NTRWMTlhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi01YTEgMSAwIDAgMC0uNDgtLjg1M0wxOCAxMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDV2MTYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOSIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBTY2lzc29ycyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMTIgOC4xMiAxMiAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA0IDguMTIgMTUuODgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjggMTQuOCAyMCAyMCIgfV0KICAgIF07CiAgICB2YXIgU2Npc3NvcnNMaW5lRGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNS40MiA5LjQyIDggMTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICI4IiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgNi04LjU4IDguNTgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICIxNiIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjggMTQuOCAxNCAxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMmgtMiIgfV0KICAgIF07CiAgICB2YXIgU2Nvb3RlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDRoLTMuNWwyIDExLjA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuOTUgMTdoNS4xNDJjLjUyMyAwIC45NS0uNDA2IDEuMDYzLS45MTZhNi41IDYuNSAwIDAgMSA1LjM0NS01LjAwOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5LjUiLCBjeTogIjE3LjUiLCByOiAiMi41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNC41IiwgY3k6ICIxNy41IiwgcjogIjIuNSIgfV0KICAgIF07CiAgICB2YXIgU2NyZWVuU2hhcmVPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAzSDRhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMy01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMyA1IDUiIH1dCiAgICBdOwogICAgdmFyIFNjcmVlblNoYXJlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDggNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoNXY1IiB9XQogICAgXTsKICAgIHZhciBTY3JvbGxUZXh0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTJoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOGgtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxN1Y1YTIgMiAwIDAgMC0yLTJINCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04IDIxaDEyYTIgMiAwIDAgMCAyLTJ2LTFhMSAxIDAgMCAwLTEtMUgxMWExIDEgMCAwIDAtMSAxdjFhMiAyIDAgMSAxLTQgMFY1YTIgMiAwIDEgMC00IDB2MmExIDEgMCAwIDAgMSAxaDMiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNjcm9sbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE3VjVhMiAyIDAgMCAwLTItMkg0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTggMjFoMTJhMiAyIDAgMCAwIDItMnYtMWExIDEgMCAwIDAtMS0xSDExYTEgMSAwIDAgMC0xIDF2MWEyIDIgMCAxIDEtNCAwVjVhMiAyIDAgMSAwLTQgMHYyYTEgMSAwIDAgMCAxIDFoMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU2VhcmNoQWxlcnQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjExIiwgY3k6ICIxMSIsIHI6ICI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIxLTQuMy00LjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE1aC4wMSIgfV0KICAgIF07CiAgICB2YXIgU2VhcmNoQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDExIDIgMiA0LTQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMS00LjMtNC4zIiB9XQogICAgXTsKICAgIHZhciBTZWFyY2hDb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgMTMuNSAyLTIuNS0yLTIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMS00LjMtNC4zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOC41IDcgMTFsMiAyLjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiOCIgfV0KICAgIF07CiAgICB2YXIgU2VhcmNoU2xhc2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy41IDguNS01IDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMS00LjMtNC4zIiB9XQogICAgXTsKICAgIHZhciBTZWFyY2hYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNSA4LjUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguNSA4LjUgNSA1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtNC4zLTQuMyIgfV0KICAgIF07CiAgICB2YXIgU2VhcmNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtNC4zNC00LjM0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjgiIH1dCiAgICBdOwogICAgdmFyIFNlY3Rpb24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA1YTQgMyAwIDAgMC04IDBjMCA0IDggMyA4IDdhNCAzIDAgMCAxLTggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE5YTQgMyAwIDAgMCA4IDBjMC00LTgtMy04LTdhNCAzIDAgMCAxIDggMCIgfV0KICAgIF07CiAgICB2YXIgU2VuZEhvcml6b250YWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjcxNCAzLjA0OGEuNDk4LjQ5OCAwIDAgMC0uNjgzLjYyN2wyLjg0MyA3LjYyN2EyIDIgMCAwIDEgMCAxLjM5NmwtMi44NDIgNy42MjdhLjQ5OC40OTggMCAwIDAgLjY4Mi42MjdsMTgtOC41YS41LjUgMCAwIDAgMC0uOTA0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDE2IiB9XQogICAgXTsKICAgIHZhciBTZW5kVG9CYWNrID0gWwogICAgICBbInJlY3QiLCB7IHg6ICIxNCIsIHk6ICIxNCIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjgiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjIiLCB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTR2MWEyIDIgMCAwIDAgMiAyaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgN2gxYTIgMiAwIDAgMSAyIDJ2MSIgfV0KICAgIF07CiAgICB2YXIgU2VuZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0LjUzNiAyMS42ODZhLjUuNSAwIDAgMCAuOTM3LS4wMjRsNi41LTE5YS40OTYuNDk2IDAgMCAwLS42MzUtLjYzNWwtMTkgNi41YS41LjUgMCAwIDAtLjAyNC45MzdsNy45MyAzLjE4YTIgMiAwIDAgMSAxLjExMiAxLjExeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMS44NTQgMi4xNDctMTAuOTQgMTAuOTM5IiB9XQogICAgXTsKICAgIHZhciBTZXBhcmF0b3JIb3Jpem9udGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTYtNCA0LTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggOCA0LTQgNCA0IiB9XQogICAgXTsKICAgIHZhciBTZXBhcmF0b3JWZXJ0aWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTYgNC00LTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDgtNCA0IDQgNCIgfV0KICAgIF07CiAgICB2YXIgU2VydmVyQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAuODUyIDE0Ljc3Mi0uMzgzLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy4xNDggMTQuNzcyYTMgMyAwIDEgMC0yLjI5Ni01LjU0NGwtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjE0OCA5LjIyOC4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy41MyAxNS42OTYtLjM4Mi0uOTI0YTMgMyAwIDEgMS0yLjI5Ni01LjU0NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC43NzIgMTAuODUyLjkyMy0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0Ljc3MiAxMy4xNDguOTIzLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjUgMTBINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMmgtLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC41IDE0SDRhMiAyIDAgMCAwLTIgMnY0YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNGEyIDIgMCAwIDAtMi0yaC0uNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuMjI4IDEwLjg1Mi0uOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4yMjggMTMuMTQ4LS45MjMuMzgzIiB9XQogICAgXTsKICAgIHZhciBTZXJ2ZXJDcmFzaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTBINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE0SDRhMiAyIDAgMCAwLTIgMnY0YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNGEyIDIgMCAwIDAtMi0yaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgNi00IDZoNmwtNCA2IiB9XQogICAgXTsKICAgIHZhciBTZXJ2ZXJPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDJoMTNhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTAgMi41IDIuNUMyIDIgMiAyLjUgMiA1djNhMiAyIDAgMCAwIDIgMmg2eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxN3YtMWEyIDIgMCAwIDAtMi0yaC0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTRhMiAyIDAgMCAwLTIgMnY0YTIgMiAwIDAgMCAyIDJoMTYuNWwxLS41LjUuNS04LThINHoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICAgIHZhciBTZXJ2ZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjgiLCB4OiAiMiIsIHk6ICIyIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiOCIsIHg6ICIyIiwgeTogIjE0Iiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjYuMDEiLCB5MTogIjYiLCB5MjogIjYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNi4wMSIsIHkxOiAiMTgiLCB5MjogIjE4IiB9XQogICAgXTsKICAgIHZhciBTZXR0aW5nczIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxN0g1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDdoLTkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTciLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjciLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgU2V0dGluZ3MgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjY3MSA0LjEzNmEyLjM0IDIuMzQgMCAwIDEgNC42NTkgMCAyLjM0IDIuMzQgMCAwIDAgMy4zMTkgMS45MTUgMi4zNCAyLjM0IDAgMCAxIDIuMzMgNC4wMzMgMi4zNCAyLjM0IDAgMCAwIDAgMy44MzEgMi4zNCAyLjM0IDAgMCAxLTIuMzMgNC4wMzMgMi4zNCAyLjM0IDAgMCAwLTMuMzE5IDEuOTE1IDIuMzQgMi4zNCAwIDAgMS00LjY1OSAwIDIuMzQgMi4zNCAwIDAgMC0zLjMyLTEuOTE1IDIuMzQgMi4zNCAwIDAgMS0yLjMzLTQuMDMzIDIuMzQgMi4zNCAwIDAgMCAwLTMuODMxQTIuMzQgMi4zNCAwIDAgMSA2LjM1IDYuMDUxYTIuMzQgMi4zNCAwIDAgMCAzLjMxOS0xLjkxNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBTaGFwZXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjMgMTBhLjcuNyAwIDAgMS0uNjI2LTEuMDc5TDExLjQgM2EuNy43IDAgMCAxIDEuMTk4LS4wNDNMMTYuMyA4LjlhLjcuNyAwIDAgMS0uNTcyIDEuMVoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjE0Iiwgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3LjUiLCBjeTogIjE3LjUiLCByOiAiMy41IiB9XQogICAgXTsKICAgIHZhciBTaGFyZTIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICI1IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE5IiwgcjogIjMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOC41OSIsIHgyOiAiMTUuNDIiLCB5MTogIjEzLjUxIiwgeTI6ICIxNy40OSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNS40MSIsIHgyOiAiOC41OSIsIHkxOiAiNi41MSIsIHkyOiAiMTAuNDkiIH1dCiAgICBdOwogICAgdmFyIFNoYXJlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA2LTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMnY4YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtOCIgfV0KICAgIF07CiAgICB2YXIgU2hlZXQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIzIiwgeDI6ICIyMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIzIiwgeDI6ICIyMSIsIHkxOiAiMTUiLCB5MjogIjE1IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkiLCB4MjogIjkiLCB5MTogIjkiLCB5MjogIjIxIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIxNSIsIHkxOiAiOSIsIHkyOiAiMjEiIH1dCiAgICBdOwogICAgdmFyIFNoZWxsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQgMTFhMiAyIDAgMSAxLTQgMCA0IDQgMCAwIDEgOCAwIDYgNiAwIDAgMS0xMiAwIDggOCAwIDAgMSAxNiAwIDEwIDEwIDAgMSAxLTIwIDAgMTEuOTMgMTEuOTMgMCAwIDEgMi40Mi03LjIyIDIgMiAwIDEgMSAzLjE2IDIuNDQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNoaWVsZEFsZXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2aC4wMSIgfV0KICAgIF07CiAgICB2YXIgU2hpZWxkQmFuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC4yNDMgNS4yMSAxNC4zOSAxMi40NzIiIH1dCiAgICBdOwogICAgdmFyIFNoaWVsZENoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMiAyIDIgNC00IiB9XQogICAgXTsKICAgIHZhciBTaGllbGRFbGxpcHNpcyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmguMDEiIH1dCiAgICBdOwogICAgdmFyIFNoaWVsZE1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMmg2IiB9XQogICAgXTsKICAgIHZhciBTaGllbGRPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNSA1YTEgMSAwIDAgMC0xIDF2N2MwIDUgMy41IDcuNSA3LjY3IDguOTRhMSAxIDAgMCAwIC42Ny4wMWMyLjM1LS44MiA0LjQ4LTEuOTcgNS45LTMuNzEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOS4zMDkgMy42NTJBMTIuMjUyIDEyLjI1MiAwIDAgMCAxMS4yNCAyLjI4YTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXY3YTkuNzg0IDkuNzg0IDAgMCAxLS4wOCAxLjI2NCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU2hpZWxkSGFsZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIyVjIiIH1dCiAgICBdOwogICAgdmFyIFNoaWVsZFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXY2IiB9XQogICAgXTsKICAgIHZhciBTaGllbGRRdWVzdGlvbk1hcmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjEgOWEzIDMgMCAwIDEgNS44MiAxYzAgMi0zIDMtMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0KICAgIF07CiAgICB2YXIgU2hpZWxkWCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgOS41LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjUgOS41IDUgNSIgfV0KICAgIF07CiAgICB2YXIgU2hpZWxkVXNlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzc2IDE4LjkxYTYgNiAwIDAgMSAxMS4yNDkuMDAzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcjogIjQiIH1dCiAgICBdOwogICAgdmFyIFNoaWVsZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTaGlwV2hlZWwgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2Ny41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDUtNS4yMyA1LjIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyaC03LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgMTktNS4yMy01LjIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0LjVWMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMjMgMTMuNzcgNSAxOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjUgMTJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4yMyAxMC4yMyA1IDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMi41IiB9XQogICAgXTsKICAgIHZhciBTaGlwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTAuMTg5VjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxM1Y3YTIgMiAwIDAgMC0yLTJIN2EyIDIgMCAwIDAtMiAydjYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuMzggMjBBMTEuNiAxMS42IDAgMCAwIDIxIDE0bC04LjE4OC0zLjYzOWEyIDIgMCAwIDAtMS42MjQgMEwzIDE0YTExLjYgMTEuNiAwIDAgMCAyLjgxIDcuNzYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiAyMWMuNi41IDEuMiAxIDIuNSAxIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMXMxLjIgMSAyLjUgMWMyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNoaXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAuMzggMy40NiAxNiAyYTQgNCAwIDAgMS04IDBMMy42MiAzLjQ2YTIgMiAwIDAgMC0xLjM0IDIuMjNsLjU4IDMuNDdhMSAxIDAgMCAwIC45OS44NEg2djEwYzAgMS4xLjkgMiAyIDJoOGEyIDIgMCAwIDAgMi0yVjEwaDIuMTVhMSAxIDAgMCAwIC45OS0uODRsLjU4LTMuNDdhMiAyIDAgMCAwLTEuMzQtMi4yM3oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNob3BwaW5nQmFnID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTBhNCA0IDAgMCAxLTggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjEwMyA2LjAzNGgxNy43OTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy40IDUuNDY3YTIgMiAwIDAgMC0uNCAxLjJWMjBhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yVjYuNjY3YTIgMiAwIDAgMC0uNC0xLjJsLTItMi42NjdBMiAyIDAgMCAwIDE3IDJIN2EyIDIgMCAwIDAtMS42Ljh6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTaG9wcGluZ0Jhc2tldCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDExLTEgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAxMS00LTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMWgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zLjUgMTEgMS42IDcuNGEyIDIgMCAwIDAgMiAxLjZoOS44YTIgMiAwIDAgMCAyLTEuNmwxLjctNy40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNSAxNS41aDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTEgNC03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEgMSA5IiB9XQogICAgXTsKICAgIHZhciBTaG9wcGluZ0NhcnQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjIxIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMjEiLCByOiAiMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTIuMDUgMi4wNWgybDIuNjYgMTIuNDJhMiAyIDAgMCAwIDIgMS41OGg5Ljc4YTIgMiAwIDAgMCAxLjk1LTEuNTdsMS42NS03LjQzSDUuMTIiIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTaG93ZXJIZWFkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNCA0IDIuNSAyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNSA2LjVhNC45NSA0Ljk1IDAgMCAwLTcgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA1IDUgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTd2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2di4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxM3YuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTB2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIwdi4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNHYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTF2LjAxIiB9XQogICAgXTsKICAgIHZhciBTaHJlZGRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxM1Y0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2NSIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMnYtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOXYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMHYtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEzaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjB2LTMiIH1dCiAgICBdOwogICAgdmFyIFNob3ZlbCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjU2IDQuNTZhMS41IDEuNSAwIDAgMSAwIDIuMTIybC0uNDcuNDdhMyAzIDAgMCAxLTQuMjEyLS4wMyAzIDMgMCAwIDEgMC00LjI0M2wuNDQtLjQ0YTEuNSAxLjUgMCAwIDEgMi4xMjEgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAyMmExIDEgMCAwIDEtMS0xdi0zLjU4NmExIDEgMCAwIDEgLjI5My0uNzA3bDMuMzU1LTMuMzU1YTEuMjA1IDEuMjA1IDAgMCAxIDEuNzA0IDBsMy4yOTYgMy4yOTZhMS4yMDUgMS4yMDUgMCAwIDEgMCAxLjcwNGwtMy4zNTUgMy4zNTVhMSAxIDAgMCAxLS43MDcuMjkzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDcuODc5LTcuODc4IiB9XQogICAgXTsKICAgIHZhciBTaHJpbXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMjJjLjUtLjUgMS4xMi0xIDIuNS0xLTEuMzggMC0yLS41LTIuNS0xIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDJhMy4yOCAzLjI4IDAgMCAxLTMuMjI3IDEuNzk4bC02LjE3LS41NjFBMi4zODcgMi4zODcgMCAxIDAgNC4zODcgOEgxNS41YTEgMSAwIDAgMSAwIDEzIDEgMSAwIDAgMCAwLTVIMTJhNyA3IDAgMCAxLTctN1Y4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDhhOC41IDguNSAwIDAgMSAwIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZjMiAwIDQuNS00IDQtNiIgfV0KICAgIF07CiAgICB2YXIgU2hyaW5rID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTUgNiA2bS02LTZ2NC44bTAtNC44aDQuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE5LjhWMTVtMCAwSDQuMk05IDE1bC02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNC4yVjltMCAwaDQuOE0xNSA5bDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDQuMlY5bTAgMEg0LjJNOSA5IDMgMyIgfV0KICAgIF07CiAgICB2YXIgU2hydWIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMnYtNS4xNzJhMiAyIDAgMCAwLS41ODYtMS40MTRMOS41IDEzLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuNSAxNC41IDEyIDE3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDguOEE2IDYgMCAwIDEgMTMuOCAyMEgxMEE2LjUgNi41IDAgMCAxIDcgOGE1IDUgMCAwIDEgMTAgMHoiIH1dCiAgICBdOwogICAgdmFyIFNodWZmbGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNCA0IDQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDIgNCA0LTQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE4aDEuOTczYTQgNCAwIDAgMCAzLjMtMS43bDUuNDU0LTguNmE0IDQgMCAwIDEgMy4zLTEuN0gyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDZoMS45NzJhNCA0IDAgMCAxIDMuNiAyLjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMThoLTYuMDQxYTQgNCAwIDAgMS0zLjMtMS44bC0uMzU5LS40NSIgfV0KICAgIF07CiAgICB2YXIgU2lnbWEgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCA3VjVhMSAxIDAgMCAwLTEtMUg2LjVhLjUuNSAwIDAgMC0uNC44bDQuNSA2YTIgMiAwIDAgMSAwIDIuNGwtNC41IDZhLjUuNSAwIDAgMCAuNC44SDE3YTEgMSAwIDAgMCAxLTF2LTIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNpZ25hbEhpZ2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwdi00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdi04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIwVjgiIH1dCiAgICBdOwogICAgdmFyIFNpZ25hbExvdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjB2LTQiIH1dCiAgICBdOwogICAgdmFyIFNpZ25hbE1lZGl1bSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjB2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2LTgiIH1dCiAgICBdOwogICAgdmFyIFNpZ25hbFplcm8gPSBbWyJwYXRoIiwgeyBkOiAiTTIgMjBoLjAxIiB9XV07CiAgICB2YXIgU2lnbmFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMFY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDR2MTYiIH1dCiAgICBdOwogICAgdmFyIFNpZ25hdHVyZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTIxIDE3LTIuMTU2LTEuODY4QS41LjUgMCAwIDAgMTggMTUuNXYuNWExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTFjMC0yLjU0NS0zLjk5MS0zLjk3LTguNS00YTEgMSAwIDAgMCAwIDVjNC4xNTMgMCA0Ljc0NS0xMS4yOTUgNS43MDgtMTMuNWEyLjUgMi41IDAgMSAxIDMuMzEgMy4yODQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMWgxOCIgfV0KICAgIF07CiAgICB2YXIgU2lnbnBvc3RCaWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5SDRMMiA3bDItMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDVoNmwyIDItMiAyaC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIyVjRhMiAyIDAgMSAxIDQgMHYxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIyaDgiIH1dCiAgICBdOwogICAgdmFyIFNpZ25wb3N0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzdjMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTggNmEyIDIgMCAwIDEgMS4zODcuNTZsMi4zMDcgMi4yMmExIDEgMCAwIDEgMCAxLjQ0bC0yLjMwNyAyLjIyQTIgMiAwIDAgMSAxOCAxM0g2YTIgMiAwIDAgMS0xLjM4Ny0uNTZsLTIuMzA2LTIuMjJhMSAxIDAgMCAxIDAtMS40NGwyLjMwNi0yLjIyQTIgMiAwIDAgMSA2IDZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTaXJlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTh2LTZhNSA1IDAgMSAxIDEwIDB2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxYTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMXYtMWEyIDIgMCAwIDAtMi0ySDdhMiAyIDAgMCAwLTIgMnoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC41IDQuNSAxOCA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45MjkgNC45MjkuNzA3LjcwNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnY2IiB9XQogICAgXTsKICAgIHZhciBTa2lwQmFjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3Ljk3MSA0LjI4NUEyIDIgMCAwIDEgMjEgNnYxMmEyIDIgMCAwIDEtMy4wMjkgMS43MTVsLTkuOTk3LTUuOTk4YTIgMiAwIDAgMS0uMDAzLTMuNDMyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIwVjQiIH1dCiAgICBdOwogICAgdmFyIFNraXBGb3J3YXJkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNHYxNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTYuMDI5IDQuMjg1QTIgMiAwIDAgMCAzIDZ2MTJhMiAyIDAgMCAwIDMuMDI5IDEuNzE1bDkuOTk3LTUuOTk4YTIgMiAwIDAgMCAuMDAzLTMuNDMyeiIgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNrdWxsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuNSAxNy0uNS0xLS41IDFoMXoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMjJhMSAxIDAgMCAwIDEtMXYtMWEyIDIgMCAwIDAgMS41Ni0zLjI1IDggOCAwIDEgMC0xMS4xMiAwQTIgMiAwIDAgMCA4IDIwdjFhMSAxIDAgMCAwIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNSIsIGN5OiAiMTIiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjEyIiwgcjogIjEiIH1dCiAgICBdOwogICAgdmFyIFNsYWNrID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMyIsIGhlaWdodDogIjgiLCB4OiAiMTMiLCB5OiAiMiIsIHJ4OiAiMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDguNVYxMGgxLjVBMS41IDEuNSAwIDEgMCAxOSA4LjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMyIsIGhlaWdodDogIjgiLCB4OiAiOCIsIHk6ICIxNCIsIHJ4OiAiMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTUuNVYxNEgzLjVBMS41IDEuNSAwIDEgMCA1IDE1LjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjMiLCB4OiAiMTQiLCB5OiAiMTMiLCByeDogIjEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS41IDE5SDE0djEuNWExLjUgMS41IDAgMSAwIDEuNS0xLjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjMiLCB4OiAiMiIsIHk6ICI4Iiwgcng6ICIxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDVIMTBWMy41QTEuNSAxLjUgMCAxIDAgOC41IDUiIH1dCiAgICBdOwogICAgdmFyIFNsYXNoID0gW1sicGF0aCIsIHsgZDogIk0yMiAyIDIgMjIiIH1dXTsKICAgIHZhciBTbGlkZXJzVmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjF2LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOFYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE2aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTJWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMXYtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxMFYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjF2LTciIH1dCiAgICBdOwogICAgdmFyIFNsaWNlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgMTYuNTg2VjE5YTEgMSAwIDAgMS0xIDFIMkwxOC4zNyAzLjYzYTEgMSAwIDEgMSAzIDNsLTkuNjYzIDkuNjYzYTEgMSAwIDAgMS0xLjQxNCAwTDggMTQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNsaWRlcnNIb3Jpem9udGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE5SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJoLTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTloLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNWgtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwdjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMkgzIiB9XQogICAgXTsKICAgIHZhciBTbWFydHBob25lQ2hhcmdpbmcgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjIwIiwgeDogIjUiLCB5OiAiMiIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi42NjcgOCAxMCAxMmg0bC0yLjY2NyA0IiB9XQogICAgXTsKICAgIHZhciBTbWFydHBob25lID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIyMCIsIHg6ICI1IiwgeTogIjIiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThoLjAxIiB9XQogICAgXTsKICAgIHZhciBTbWFydHBob25lTmZjID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA4LjMyYTcuNDMgNy40MyAwIDAgMSAwIDcuMzYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuNDYgNi4yMWExMS43NiAxMS43NiAwIDAgMSAwIDExLjU4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjkxIDQuMWExNS45MSAxNS45MSAwIDAgMSAuMDEgMTUuOCIgfV0KICAgIF07CiAgICB2YXIgU21pbGVQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTF2MWExMCAxMCAwIDEgMS05LTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTRzMS41IDIgNCAyIDQtMiA0LTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiOS4wMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDJ2NiIgfV0KICAgIF07CiAgICB2YXIgU21pbGUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0czEuNSAyIDQgMiA0LTIgNC0yIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkiLCB4MjogIjkuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjE1LjAxIiwgeTE6ICI5IiwgeTI6ICI5IiB9XQogICAgXTsKICAgIHZhciBTbmFpbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTNhNiA2IDAgMSAwIDEyIDAgNCA0IDAgMSAwLTggMCAyIDIgMCAwIDAgNCAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjEzIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWgxMmM0LjQgMCA4LTMuNiA4LThWN2EyIDIgMCAxIDAtNCAwdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMyAxOS4xIDUuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAzIDIwLjkgNS4yIiB9XQogICAgXTsKICAgIHZhciBTbm93Zmxha2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAyMC0xLjI1LTIuNUw2IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDQgOC43NSA2LjUgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDIwIDEuMjUtMi41TDE4IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDQgMS4yNSAyLjVMMTggNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMS0zLTZoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMy0zIDYgMS41IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmg2LjVMMTAgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxMC0xLjUgMiAxLjUgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMmgtNi41TDE0IDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQgMTAgMS41IDJMNCAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDIxIDMtNi0xLjUtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDMgMyA2aDQiIH1dCiAgICBdOwogICAgdmFyIFNvYXBEaXNwZW5zZXJEcm9wbGV0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuNSAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMkg3YTIgMiAwIDAgMC0yIDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuMjkgMTQuNzZBNi42NyA2LjY3IDAgMCAxIDE3IDExYTYuNiA2LjYgMCAwIDEtMi4yOSAzLjc2Yy0xLjE1LjkyLTEuNzEgMi4wNC0xLjcxIDMuMTkgMCAyLjIyIDEuOCA0LjA1IDQgNC4wNXM0LTEuODMgNC00LjA1YzAtMS4xNi0uNTctMi4yNi0xLjcxLTMuMTkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS42MDcgMjFINmEyIDIgMCAwIDEtMi0ydi03YTIgMiAwIDAgMSAyLTJoN1Y3YTEgMSAwIDAgMC0xLTFIOWExIDEgMCAwIDAtMSAxdjMiIH1dCiAgICBdOwogICAgdmFyIFNvZmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA5VjZhMiAyIDAgMCAwLTItMkg2YTIgMiAwIDAgMC0yIDJ2MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE2YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNWEyIDIgMCAwIDAtNCAwdjEuNWEuNS41IDAgMCAxLS41LjVoLTExYS41LjUgMCAwIDEtLjUtLjVWMTFhMiAyIDAgMCAwLTQgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNHY5IiB9XQogICAgXTsKICAgIHZhciBTb2xhclBhbmVsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjI4IDE0LTQuNTYgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMi0xLjU1OC00SDQuNTU4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTB2MiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02LjI0NSAxNS4wNEEyIDIgMCAwIDEgOCAxNGgxMmExIDEgMCAwIDEgLjg2NCAxLjUwNWwtMy4xMSA1LjQ1N0EyIDIgMCAwIDEgMTYgMjJINGExIDEgMCAwIDEtLjg2My0xLjUwNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyYTQgNCAwIDAgMS00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC42NiA3LjY2IDEuNDEgMS40MSIgfV0KICAgIF07CiAgICB2YXIgU291cCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxYTkgOSAwIDAgMCA5LTlIM2E5IDkgMCAwIDAgOSA5WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjUgMTIgMjIgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi4yNSAzYy4yNy4xLjguNTMuNzUgMS4zNi0uMDYuODMtLjkzIDEuMi0xIDIuMDItLjA1Ljc4LjM0IDEuMjQuNzMgMS42MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS4yNSAzYy4yNy4xLjguNTMuNzQgMS4zNi0uMDUuODMtLjkzIDEuMi0uOTggMi4wMi0uMDYuNzguMzMgMS4yNC43MiAxLjYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMjUgM2MuMjcuMS44LjUzLjc1IDEuMzYtLjA2LjgzLS45MyAxLjItMSAyLjAyLS4wNS43OC4zNCAxLjI0Ljc0IDEuNjIiIH1dCiAgICBdOwogICAgdmFyIFNwYWNlID0gW1sicGF0aCIsIHsgZDogIk0yMiAxN3YxYzAgLjUtLjUgMS0xIDFIM2MtLjUgMC0xLS41LTEtMXYtMSIgfV1dOwogICAgdmFyIFNwYWRlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTh2NCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE0LjQ5OWE1LjUgNS41IDAgMCAwIDkuNTkxIDMuNjc1LjYuNiAwIDAgMSAuODE4LjAwMUE1LjUgNS41IDAgMCAwIDIyIDE0LjVjMC0yLjI5LTEuNS00LTMtNS41bC01LjQ5Mi01LjMxMmEyIDIgMCAwIDAtMy0uMDJMNSA4Ljk5OWMtMS41IDEuNS0zIDMuMi0zIDUuNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU3BhcmtsZXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS4wMTcgMi44MTRhMSAxIDAgMCAxIDEuOTY2IDBsMS4wNTEgNS41NThhMiAyIDAgMCAwIDEuNTk0IDEuNTk0bDUuNTU4IDEuMDUxYTEgMSAwIDAgMSAwIDEuOTY2bC01LjU1OCAxLjA1MWEyIDIgMCAwIDAtMS41OTQgMS41OTRsLTEuMDUxIDUuNTU4YTEgMSAwIDAgMS0xLjk2NiAwbC0xLjA1MS01LjU1OGEyIDIgMCAwIDAtMS41OTQtMS41OTRsLTUuNTU4LTEuMDUxYTEgMSAwIDAgMSAwLTEuOTY2bDUuNTU4LTEuMDUxYTIgMiAwIDAgMCAxLjU5NC0xLjU5NHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDRoLTQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICIyMCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBTcGFya2xlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMDE3IDIuODE0YTEgMSAwIDAgMSAxLjk2NiAwbDEuMDUxIDUuNTU4YTIgMiAwIDAgMCAxLjU5NCAxLjU5NGw1LjU1OCAxLjA1MWExIDEgMCAwIDEgMCAxLjk2NmwtNS41NTggMS4wNTFhMiAyIDAgMCAwLTEuNTk0IDEuNTk0bC0xLjA1MSA1LjU1OGExIDEgMCAwIDEtMS45NjYgMGwtMS4wNTEtNS41NThhMiAyIDAgMCAwLTEuNTk0LTEuNTk0bC01LjU1OC0xLjA1MWExIDEgMCAwIDEgMC0xLjk2Nmw1LjU1OC0xLjA1MWEyIDIgMCAwIDAgMS41OTQtMS41OTR6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTcGVha2VyID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIyMCIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNmguMDEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTQiLCByOiAiNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNGguMDEiIH1dCiAgICBdOwogICAgdmFyIFNwZWVjaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguOCAyMHYtNC4xbDEuOS4yYTIuMyAyLjMgMCAwIDAgMi4xNjQtMi4xVjguM0E1LjM3IDUuMzcgMCAwIDAgMiA4LjI1YzAgMi44LjY1NiAzLjA1NCAxIDQuNTVhNS43NyA1Ljc3IDAgMCAxIC4wMjkgMi43NThMMiAyMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS44IDE3LjhhNy41IDcuNSAwIDAgMCAuMDAzLTEwLjYwMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNWEzLjUgMy41IDAgMCAwLS4wMjUtNC45NzUiIH1dCiAgICBdOwogICAgdmFyIFNwZWxsQ2hlY2syID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxNiA2LTEyIDYgMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMjFjMS4xIDAgMS4xLTEgMi4zLTFzMS4xIDEgMi4zIDFjMS4xIDAgMS4xLTEgMi4zLTEgMS4xIDAgMS4xIDEgMi4zIDEgMS4xIDAgMS4xLTEgMi4zLTEgMS4xIDAgMS4xIDEgMi4zIDEgMS4xIDAgMS4xLTEgMi4zLTEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNwZWxsQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDE2IDYtMTIgNiAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMjAgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgU3BsaW5lUG9pbnRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjAzNCAxMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDNsLTMuNDQ0IDEuMDY4YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY3IDMuNDQzYS41LjUgMCAwIDEtLjk0My4wMzN6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTdBMTIgMTIgMCAwIDEgMTcgNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICI1IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxOSIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBTcGxpbmUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICI1IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTdBMTIgMTIgMCAwIDEgMTcgNSIgfV0KICAgIF07CiAgICB2YXIgU3BsaXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzaDV2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDNIM3Y1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi04LjNhNCA0IDAgMCAwLTEuMTcyLTIuODcyTDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5IDYtNiIgfV0KICAgIF07CiAgICB2YXIgU3Bvb2wgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAxMy40NCA0LjQ0MiAxNy4wODJBMiAyIDAgMCAwIDQuOTgyIDIxSDE5YTIgMiAwIDAgMCAuNTU4LTMuOTIxbC0xLjExNS0uMzJBMiAyIDAgMCAxIDE3IDE0LjgzN1Y3LjY2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTcgMTAuNTYgMTIuNTU4LTMuNjQyQTIgMiAwIDAgMCAxOS4wMTggM0g1YTIgMiAwIDAgMC0uNTU4IDMuOTIxbDEuMTE1LjMyQTIgMiAwIDAgMSA3IDkuMTYzdjcuMTc4IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTcG90bGlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS4yOTUgMTkuNTYyIDE2IDIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE2IDMuNzU4IDIuMDk4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDEyLjUgMy4wMjYtLjU5OCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03LjYxIDYuM2EzIDMgMCAwIDAtMy45MiAxLjNsLTEuMzggMi43OWEzIDMgMCAwIDAgMS4zIDMuOTFsNi44OSAzLjU5N2ExIDEgMCAwIDAgMS4zNDItLjQ0N2wzLjEwNi02LjIxMWExIDEgMCAwIDAtLjQ0Ny0xLjM0MXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA5VjIiIH1dCiAgICBdOwogICAgdmFyIFNwcmF5Q2FuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDdoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA5aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDExaC4wMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiNCIsIHg6ICIxNSIsIHk6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDkgMiAydjEwYzAgLjYtLjQgMS0xIDFoLTZjLS42IDAtMS0uNC0xLTFWMTFsMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzIDE0IDgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyAxOSA4LTIiIH1dCiAgICBdOwogICAgdmFyIFNwcm91dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDkuNTM2VjdhNCA0IDAgMCAxIDQtNGgxLjVhLjUuNSAwIDAgMSAuNS41VjVhNCA0IDAgMCAxLTQgNCA0IDQgMCAwIDAtNCA0YzAgMiAxIDMgMSA1YTUgNSAwIDAgMS0xIDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA5YTUgNSAwIDAgMSA4IDQgNSA1IDAgMCAxLTgtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxaDE0IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBcnJvd0Rvd25MZWZ0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgOC04IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZIOFY4IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBY3Rpdml0eSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEyaC0ybC0yIDUtMi0xMC0yIDVINyIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dEb3duUmlnaHQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDggOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDh2OEg4IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBcnJvd0Rvd24gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxMiA0IDQgNC00IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBcnJvd0xlZnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA4LTQgNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJIOCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dPdXREb3duTGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIxaDZhMiAyIDAgMCAwIDItMlY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAyMSA5LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMUgzdi02IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBcnJvd091dERvd25SaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIxLTktOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNXY2aC02IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVBcnJvd091dFVwTGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDNoNmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMyA5IDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5VjNoNiIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dPdXRVcFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTN2NmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTkgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzaDZ2NiIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dVcExlZnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2VjhoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNiA4IDgiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZUFycm93UmlnaHQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTYgNC00LTQtNCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dVcFJpZ2h0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4aDh2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE2IDgtOCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXJyb3dVcCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDEyLTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZWOCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQXN0ZXJpc2sgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41IDE0IDctNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjUgMTAgNyA0IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVCb3R0b21EYXNoZWRTY2lzc29ycyA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjUiLCB5MTogIjMiLCB4MjogIjE5IiwgeTI6ICIzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB5MTogIjUiLCB4MjogIjMiLCB5MjogIjE5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIxIiwgeTE6ICI1IiwgeDI6ICIyMSIsIHkyOiAiMTkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHkxOiAiMjEiLCB4MjogIjEwIiwgeTI6ICIyMSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNCIsIHkxOiAiMjEiLCB4MjogIjE1IiwgeTI6ICIyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0gMyA1IEEyIDIgMCAwIDEgNSAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTSAxOSAzIEEyIDIgMCAwIDEgMjEgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0gNSAyMSBBMiAyIDAgMCAxIDMgMTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNIDIxIDE5IEEyIDIgMCAwIDEgMTkgMjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4LjUiLCBjeTogIjguNSIsIHI6ICIxLjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOS41NjA2NiIsIHkxOiAiOS41NjA2NiIsIHgyOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE3IiwgeTE6ICIxNyIsIHgyOiAiMTQuODIiLCB5MjogIjE0LjgyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOC41IiwgY3k6ICIxNS41IiwgcjogIjEuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5LjU2MDY2IiwgeTE6ICIxNC40MzkzNCIsIHgyOiAiMTciLCB5MjogIjciIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZUNoYXJ0R2FudHQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDhoNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTZoNSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQ2hlY2tCaWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMC42NTZWMTlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDEyLjM0NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDExIDMgM0wyMiA0IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVDaGVjayA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTIgMiAyIDQtNCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQ2hldnJvbkRvd24gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMC00IDQtNC00IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVDaGV2cm9uTGVmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE2LTQtNCA0LTQiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZUNoZXZyb25SaWdodCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDggNCA0LTQgNCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlQ2hldnJvblVwID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxNCA0LTQgNCA0IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVDb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgOS0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE1IDMtMy0zLTMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZURhc2hlZEJvdHRvbUNvZGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5LjUgOCAxMmwyIDIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDkuNSAyIDIuNS0yIDIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxYTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxaDEiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZURhc2hlZEJvdHRvbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMWgxIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVEYXNoZWRNb3VzZVBvaW50ZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi4wMzQgMTIuNjgxYS40OTguNDk4IDAgMCAxIC42NDctLjY0N2w5IDMuNWEuNS41IDAgMCAxLS4wMzMuOTQzbC0zLjQ0NCAxLjA2OGExIDEgMCAwIDAtLjY2LjY2bC0xLjA2NyAzLjQ0M2EuNS41IDAgMCAxLS45NDMuMDMzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDNhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzYTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM2gxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOXYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTR2MSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlRGFzaGVkS2FuYmFuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA3djciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDd2OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDNhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDNoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgM2EyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE5YTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTR2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDl2MSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlRGFzaGVkVG9wU29saWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTlhMiAyIDAgMCAxLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlRGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzYTIgMiAwIDAgMC0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgM2EyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE5YTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM2gxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE0djEiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZURpdmlkZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE2IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIxNiIsIHkyOiAiMTYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI4IiwgeTI6ICI4IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVEb3QgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVFcXVhbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNGgxMCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlRnVuY3Rpb24gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE3YzIgMCAyLjgtMSAyLjgtMi44VjEwYzAtMiAxLTMuMyAzLjItMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDExLjJoNS43IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVLYW5iYW4gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDd2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgN3Y5IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVMaWJyYXJ5ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA3djEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNyAyIDEwIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVNID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk04IDE2VjguNWEuNS41IDAgMCAxIC45LS4zbDIuNyAzLjU5OWEuNS41IDAgMCAwIC44IDBsMi43LTMuNmEuNS41IDAgMCAxIC45LjNWMTYiIH0KICAgICAgXSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVNZW51ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA4aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmgxMCIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlTWludXMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZU1vdXNlUG9pbnRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjAzNCAxMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDNsLTMuNDQ0IDEuMDY4YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY3IDMuNDQzYS41LjUgMCAwIDEtLjk0My4wMzN6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVQYXJraW5nT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMy42IDMuNkEyIDIgMCAwIDEgNSAzaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLS41OSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOC43VjE5YTIgMiAwIDAgMCAyIDJoMTAuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTNhMyAzIDAgMSAwIDAtNkg5djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN3YtMi4zIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVQYXJraW5nID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN1Y3aDRhMyAzIDAgMCAxIDAgNkg5IiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVQYXVzZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEwIiwgeDI6ICIxMCIsIHkxOiAiMTUiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTQiLCB4MjogIjE0IiwgeTE6ICIxNSIsIHkyOiAiOSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlUGVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM0g1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0ydi03IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjM3NSAyLjYyNWExIDEgMCAwIDEgMyAzbC05LjAxMyA5LjAxNGEyIDIgMCAwIDEtLjg1My41MDVsLTIuODczLjg0YS41LjUgMCAwIDEtLjYyLS42MmwuODQtMi44NzNhMiAyIDAgMCAxIC41MDYtLjg1MnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFNxdWFyZVBlcmNlbnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1aC4wMSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlUGkgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDdoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgN3YxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxN2EyIDIgMCAwIDEtMi0yVjciIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVBpbGNyb3cgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMkg5LjVhMi41IDIuNSAwIDAgMSAwLTVIMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3YxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA3djEwIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVQbGF5ID0gWwogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSA5LjAwM2ExIDEgMCAwIDEgMS41MTctLjg1OWw0Ljk5NyAyLjk5N2ExIDEgMCAwIDEgMCAxLjcxOGwtNC45OTcgMi45OTdBMSAxIDAgMCAxIDkgMTQuOTk2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU3F1YXJlUGx1cyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVBvd2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuOTk4IDkuMDAzYTUgNSAwIDEgMCA4LS4wMDUiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVJhZGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaDJsMiA1IDItMTBoNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMyIsIHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlUm91bmRDb3JuZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMWE4IDggMCAwIDAtOC04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDQiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVNjaXNzb3JzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4LjUiLCBjeTogIjguNSIsIHI6ICIxLjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOS41NjA2NiIsIHkxOiAiOS41NjA2NiIsIHgyOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE3IiwgeTE6ICIxNyIsIHgyOiAiMTQuODIiLCB5MjogIjE0LjgyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOC41IiwgY3k6ICIxNS41IiwgcjogIjEuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5LjU2MDY2IiwgeTE6ICIxNC40MzkzNCIsIHgyOiAiMTciLCB5MjogIjciIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVNpZ21hID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOC45VjdIOGw0IDUtNCA1aDh2LTEuOSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlU2xhc2ggPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICIxNSIsIHkxOiAiMTUiLCB5MjogIjkiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVNwbGl0SG9yaXpvbnRhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTlINWMtMSAwLTItMS0yLTJWN2MwLTEgMS0yIDItMmgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVoM2MxIDAgMiAxIDIgMnYxMGMwIDEtMSAyLTIgMmgtMyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjQiLCB5MjogIjIwIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVTcGxpdFZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA4VjVjMC0xIDEtMiAyLTJoMTBjMSAwIDIgMSAyIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNnYzYzAgMS0xIDItMiAySDdjLTEgMC0yLTEtMi0ydi0zIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjQiLCB4MjogIjIwIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVNxdWFyZSA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiOCIsIHk6ICI4Iiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlU3RhY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEwYy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoNGMxLjEgMCAyIC45IDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNmMtMS4xIDAtMi0uOS0yLTJ2LTRjMC0xLjEuOS0yIDItMmg0YzEuMSAwIDIgLjkgMiAyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4IiwgeDogIjE0IiwgeTogIjE0Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBTcXVhcmVTdGFyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMDM1IDcuNjlhMSAxIDAgMCAxIDEuOTA5LjAyNGwuNzM3IDEuNDUyYTEgMSAwIDAgMCAuNzM3LjUzNWwxLjYzNC4yNTZhMSAxIDAgMCAxIC41ODggMS44MDZsLTEuMTcyIDEuMTY4YTEgMSAwIDAgMC0uMjgyLjg2NmwuMjU5IDEuNjEzYTEgMSAwIDAgMS0xLjU0MSAxLjEzNGwtMS40NjUtLjc1YTEgMSAwIDAgMC0uOTEyIDBsLTEuNDY1Ljc1YTEgMSAwIDAgMS0xLjUzOS0xLjEzM2wuMjU4LTEuNjEzYTEgMSAwIDAgMC0uMjgyLS44NjZsLTEuMTU2LTEuMTUzYTEgMSAwIDAgMSAuNTcyLTEuODIybDEuNjMzLS4yNTZhMSAxIDAgMCAwIC43MzctLjUzNXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVN0b3AgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjkiLCB5OiAiOSIsIHdpZHRoOiAiNiIsIGhlaWdodDogIjYiLCByeDogIjEiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVRlcm1pbmFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxMSAyLTItMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEzaDQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVVzZXJSb3VuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIxYTYgNiAwIDAgMC0xMiAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcjogIjQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZVVzZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjF2LTJhMiAyIDAgMCAxIDItMmg2YTIgMiAwIDAgMSAyIDJ2MiIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlWCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDktNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgOSA2IDYiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZSA9IFtbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dXTsKICAgIHZhciBTcXVhcmVzRXhjbHVkZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2IDEydjJhMiAyIDAgMCAxLTIgMkg5YTEgMSAwIDAgMC0xIDF2M2EyIDIgMCAwIDAgMiAyaDEwYTIgMiAwIDAgMCAyLTJWMTBhMiAyIDAgMCAwLTItMmgwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTZhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnYzYTEgMSAwIDAgMS0xIDFoLTVhMiAyIDAgMCAwLTIgMnYyIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTcXVhcmVzSW50ZXJzZWN0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjJhMiAyIDAgMCAxLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyYTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMFY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNGEyIDIgMCAwIDEgMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDhhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIwYTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNmEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTBhMiAyIDAgMCAxIDItMmg1YTEgMSAwIDAgMSAxIDF2NWEyIDIgMCAwIDEtMiAySDlhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyaDIiIH1dCiAgICBdOwogICAgdmFyIFNxdWFyZXNTdWJ0cmFjdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIyYTIgMiAwIDAgMS0yLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjJoLTIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgNGEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDNhMSAxIDAgMCAwIDEtMXYtNWEyIDIgMCAwIDEgMi0yaDVhMSAxIDAgMCAwIDEtMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgOGEyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjBhMiAyIDAgMCAxLTIgMiIgfV0KICAgIF07CiAgICB2YXIgU3F1YXJlc1VuaXRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAxNmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjNhMSAxIDAgMCAwIDEgMWgzYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkgxMGEyIDIgMCAwIDEtMi0ydi0zYTEgMSAwIDAgMC0xLTF6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBTcXVpcmNsZURhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjc3IDMuMDQzYTM0IDM0IDAgMCAwLTMuNTQgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy43NzEgMjAuOTU2YTMzIDMzIDAgMCAxLTMuNTQxLjAwMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4xOCAxNy43NGMtLjUxIDEuMTUtMS4yOSAxLjkzLTIuNDM5IDIuNDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuMTggNi4yNTljLS41MS0xLjE0OC0xLjI5MS0xLjkyOS0yLjQ0LTIuNDM4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjk1NyAxMC4yM2EzMyAzMyAwIDAgMSAwIDMuNTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4wNDMgMTAuMjNhMzQgMzQgMCAwIDAgLjAwMSAzLjU0MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjI2IDIwLjE3OWMtMS4xNS0uNTA4LTEuOTMtMS4yOS0yLjQ0LTIuNDM4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMjYgMy44MmMtMS4xNDkuNTEtMS45MyAxLjI5MS0yLjQ0IDIuNDQiIH1dCiAgICBdOwogICAgdmFyIFNxdWlyY2xlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM2M3LjIgMCA5IDEuOCA5IDlzLTEuOCA5LTkgOS05LTEuOC05LTkgMS44LTkgOS05IiB9XQogICAgXTsKICAgIHZhciBTcXVpcnJlbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjIzNiAyMmEzIDMgMCAwIDAtMi4yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjBhMyAzIDAgMCAxIDMtM2gxYTIgMiAwIDAgMCAyLTJ2LTJhNCA0IDAgMCAwLTQtNFY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEzaC4wMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCA2YTQgNCAwIDAgMC00IDQgNyA3IDAgMCAwLTcgN2MwLTUgNC01IDQtMTAuNWE0LjUgNC41IDAgMSAwLTkgMCAyLjUgMi41IDAgMCAwIDUgMEM3IDEwIDMgMTEgMyAxN2MwIDIuOCAyLjIgNSA1IDVoMTAiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFN0YW1wID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTNWOC41QzE0IDcgMTUgNyAxNSA1YTMgMyAwIDAgMC02IDBjMCAyIDEgMiAxIDMuNVYxMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxNS41YTIuNSAyLjUgMCAwIDAtMi41LTIuNWgtMTFBMi41IDIuNSAwIDAgMCA0IDE1LjVWMTdhMSAxIDAgMCAwIDEgMWgxNGExIDEgMCAwIDAgMS0xeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIyaDE0IiB9XQogICAgXTsKICAgIHZhciBTdGFySGFsZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDE4LjMzOGEyLjEgMi4xIDAgMCAwLS45ODcuMjQ0TDYuMzk2IDIxLjAxYS41My41MyAwIDAgMS0uNzctLjU2bC44ODEtNS4xMzlhMi4xMiAyLjEyIDAgMCAwLS42MTEtMS44NzlMMi4xNiA5Ljc5NWEuNTMuNTMgMCAwIDEgLjI5NC0uOTA2bDUuMTY1LS43NTVhMi4xMiAyLjEyIDAgMCAwIDEuNTk3LTEuMTZsMi4zMDktNC42NzlBLjUzLjUzIDAgMCAxIDEyIDIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFN0YXJPZmYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMC4zNDQgNC42ODggMS4xODEtMi4zOTNhLjUzLjUzIDAgMCAxIC45NSAwbDIuMzEgNC42NzlhMi4xMiAyLjEyIDAgMCAwIDEuNTk1IDEuMTZsNS4xNjYuNzU2YS41My41MyAwIDAgMSAuMjk0LjkwNGwtMy4yMzcgMy4xNTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTcuOTQ1IDE3Ljk0NS40MyAyLjUwNWEuNTMuNTMgMCAwIDEtLjc3MS41NmwtNC42MTgtMi40MjhhMi4xMiAyLjEyIDAgMCAwLTEuOTczIDBMNi4zOTYgMjEuMDFhLjUzLjUzIDAgMCAxLS43Ny0uNTZsLjg4MS01LjEzOWEyLjEyIDIuMTIgMCAwIDAtLjYxMS0xLjg3OUwyLjE2IDkuNzk1YS41My41MyAwIDAgMSAuMjk0LS45MDZsNS4xNjUtLjc1NWE4IDggMCAwIDAgLjQtLjA5OSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogICAgdmFyIFN0YXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS41MjUgMi4yOTVhLjUzLjUzIDAgMCAxIC45NSAwbDIuMzEgNC42NzlhMi4xMjMgMi4xMjMgMCAwIDAgMS41OTUgMS4xNmw1LjE2Ni43NTZhLjUzLjUzIDAgMCAxIC4yOTQuOTA0bC0zLjczNiAzLjYzOGEyLjEyMyAyLjEyMyAwIDAgMC0uNjExIDEuODc4bC44ODIgNS4xNGEuNTMuNTMgMCAwIDEtLjc3MS41NmwtNC42MTgtMi40MjhhMi4xMjIgMi4xMjIgMCAwIDAtMS45NzMgMEw2LjM5NiAyMS4wMWEuNTMuNTMgMCAwIDEtLjc3LS41NmwuODgxLTUuMTM5YTIuMTIyIDIuMTIyIDAgMCAwLS42MTEtMS44NzlMMi4xNiA5Ljc5NWEuNTMuNTMgMCAwIDEgLjI5NC0uOTA2bDUuMTY1LS43NTVhMi4xMjIgMi4xMjIgMCAwIDAgMS41OTctMS4xNnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFN0ZXRob3Njb3BlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM0g0YTIgMiAwIDAgMC0yIDJ2NGE2IDYgMCAwIDAgMTIgMFY1YTIgMiAwIDAgMC0yLTJoLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWE2IDYgMCAwIDAgMTIgMHYtMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjIwIiwgY3k6ICIxMCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBTdGVwQmFjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjk3MSA0LjI4NUEyIDIgMCAwIDEgMTcgNnYxMmEyIDIgMCAwIDEtMy4wMjkgMS43MTVsLTkuOTk3LTUuOTk4YTIgMiAwIDAgMS0uMDAzLTMuNDMyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAyMFY0IiB9XQogICAgXTsKICAgIHZhciBTdGVwRm9yd2FyZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTAuMDI5IDQuMjg1QTIgMiAwIDAgMCA3IDZ2MTJhMiAyIDAgMCAwIDMuMDI5IDEuNzE1bDkuOTk3LTUuOTk4YTIgMiAwIDAgMCAuMDAzLTMuNDMyeiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA0djE2IiB9XQogICAgXTsKICAgIHZhciBTdGlja2VyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgOWEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTUgM0g1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTNoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNnMuOCAxIDIgMWMxLjMgMCAyLTEgMi0xIiB9XQogICAgXTsKICAgIHZhciBTdGlja3lOb3RlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgOWEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTUgM0g1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjVhMSAxIDAgMCAwIDEgMWg1IiB9XQogICAgXTsKICAgIHZhciBTdG9uZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjI2NCAyLjIwNUE0IDQgMCAwIDAgNi40MiA0LjIxMWwtNCA4YTQgNCAwIDAgMCAxLjM1OSA1LjExN2w2IDRhNCA0IDAgMCAwIDQuNDM4IDBsNi00YTQgNCAwIDAgMCAxLjU3Ni00LjU5MmwtMi02YTQgNCAwIDAgMC0yLjUzLTIuNTN6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjk5IDIyIDE0IDEybDcuODIyIDMuMTg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEyIDguNDcgMi4zMDIiIH1dCiAgICBdOwogICAgdmFyIFN0cmV0Y2hIb3Jpem9udGFsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjYiLCB4OiAiMiIsIHk6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgU3RvcmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMXYtNWExIDEgMCAwIDAtMS0xaC00YTEgMSAwIDAgMC0xIDF2NSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNy43NzQgMTAuMzFhMS4xMiAxLjEyIDAgMCAwLTEuNTQ5IDAgMi41IDIuNSAwIDAgMS0zLjQ1MSAwIDEuMTIgMS4xMiAwIDAgMC0xLjU0OCAwIDIuNSAyLjUgMCAwIDEtMy40NTIgMCAxLjEyIDEuMTIgMCAwIDAtMS41NDkgMCAyLjUgMi41IDAgMCAxLTMuNzctMy4yNDhsMi44ODktNC4xODRBMiAyIDAgMCAxIDcgMmgxMGEyIDIgMCAwIDEgMS42NTMuODczbDIuODk1IDQuMTkyYTIuNSAyLjUgMCAwIDEtMy43NzQgMy4yNDQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMC45NVYxOWEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJ2LTguMDUiIH1dCiAgICBdOwogICAgdmFyIFN0cmV0Y2hWZXJ0aWNhbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIyMCIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjIwIiwgeDogIjE0IiwgeTogIjIiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFN0cmlrZXRocm91Z2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0SDlhMyAzIDAgMCAwLTIuODMgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMmE0IDQgMCAwIDEgMCA4SDYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNCIsIHgyOiAiMjAiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgICB2YXIgU3Vic2NyaXB0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNCA1IDggOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA1LTggOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxOWgtNGMwLTEuNS40NC0yIDEuNS0yLjVTMjAgMTUuMzMgMjAgMTRjMC0uNDctLjE3LS45My0uNDgtMS4yOWEyLjExIDIuMTEgMCAwIDAtMi42Mi0uNDRjLS40Mi4yNC0uNzQuNjItLjkgMS4wNyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU3VuRGltID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjY1NyA2LjM0M2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNjU3IDE3LjY1N2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zNDMgMTcuNjU3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjM0MyA2LjM0M2guMDEiIH1dCiAgICBdOwogICAgdmFyIFN1bk1lZGl1bSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEyaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTguMzY0IDUuNjM2LS43MDcuNzA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuMzQzIDE3LjY1Ny0uNzA3LjcwNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01LjYzNiA1LjYzNi43MDcuNzA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjY1NyAxNy42NTcuNzA3LjcwNyIgfV0KICAgIF07CiAgICB2YXIgU3VuTW9vbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC44MzcgMTYuMzg1YTYgNiAwIDEgMS03LjIyMy03LjIyMmMuNjI0LS4xNDcuOTcuNjYuNzE1IDEuMjQ4YTQgNCAwIDAgMCA1LjI2IDUuMjU5Yy41ODktLjI1NSAxLjM5Ni4wOSAxLjI0OC43MTUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJhNCA0IDAgMCAwLTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA1LTEuMjU2IDEuMjU2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEyaDIiIH1dCiAgICBdOwogICAgdmFyIFN1blNub3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMXYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA0VjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOWEzIDMgMCAwIDAgMCA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDIwIDEuMjUtMi41TDE4IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDQgMS4yNSAyLjVMMTggNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMS0zLTYgMS41LTNIMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMy0zIDYgMS41IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDEwLTEuNSAyIDEuNSAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMuNjQgMTguMzYuNy0uNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjM0IDYuMzQtLjctLjciIH1dCiAgICBdOwogICAgdmFyIFN1bnJpc2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45MyAxMC45MyAxLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMDcgMTAuOTMtMS40MSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIySDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThhNCA0IDAgMCAwLTggMCIgfV0KICAgIF07CiAgICB2YXIgU3VuID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkzIDQuOTMgMS40MSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjY2IDE3LjY2IDEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjM0IDE3LjY2LTEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4wNyA0LjkzLTEuNDEgMS40MSIgfV0KICAgIF07CiAgICB2YXIgU3Vuc2V0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTBWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkzIDEwLjkzIDEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMThoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4wNyAxMC45My0xLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA2LTQgNC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThhNCA0IDAgMCAwLTggMCIgfV0KICAgIF07CiAgICB2YXIgU3VwZXJzY3JpcHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDE5IDgtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxOS04LTgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTJoLTRjMC0xLjUuNDQyLTIgMS41LTIuNVMyMCA4LjMzNCAyMCA3LjAwMmMwLS40NzItLjE3LS45My0uNDg0LTEuMjlhMi4xMDUgMi4xMDUgMCAwIDAtMi42MTctLjQzNmMtLjQyLjIzOS0uNzM4LjYxNC0uODk5IDEuMDYiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFN3YXRjaEJvb2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxN2E0IDQgMCAwIDEtOCAwVjVhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjcgMTNIMTlhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJINyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0gNyAxN2guMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIm0xMSA4IDIuMy0yLjNhMi40IDIuNCAwIDAgMSAzLjQwNC4wMDRMMTguNiA3LjZhMi40IDIuNCAwIDAgMSAuMDI2IDMuNDM0TDkuOSAxOS44IiB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgU3dpc3NGcmFuYyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIxVjNoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE2aDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOS41aDciIH1dCiAgICBdOwogICAgdmFyIFN3aXRjaENhbWVyYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE5SDRhMiAyIDAgMCAxLTItMlY3YTIgMiAwIDAgMSAyLTJoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA1aDdhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAyaC01IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggMjItMy0zIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDIgMyAzLTMgMyIgfV0KICAgIF07CiAgICB2YXIgU3dvcmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSAxOS02LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAyMS0yLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxNi00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS41IDE3LjUgMjEgNlYzaC0zTDYuNSAxNC41IiB9XQogICAgXTsKICAgIHZhciBTd29yZHMgPSBbCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjE0LjUgMTcuNSAzIDYgMyAzIDYgMyAxNy41IDE0LjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTMiLCB4MjogIjE5IiwgeTE6ICIxOSIsIHkyOiAiMTMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTYiLCB4MjogIjIwIiwgeTE6ICIxNiIsIHkyOiAiMjAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTkiLCB4MjogIjIxIiwgeTE6ICIyMSIsIHkyOiAiMTkiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIxNC41IDYuNSAxOCAzIDIxIDMgMjEgNiAxNy41IDkuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI1IiwgeDI6ICI5IiwgeTE6ICIxNCIsIHkyOiAiMTgiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNyIsIHgyOiAiNCIsIHkxOiAiMTciLCB5MjogIjIwIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB4MjogIjUiLCB5MTogIjE5IiwgeTI6ICIyMSIgfV0KICAgIF07CiAgICB2YXIgU3lyaW5nZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDIgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDcgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDkgOC43IDE5LjNjLTEgMS0yLjUgMS0zLjQgMGwtLjYtLjZjLTEtMS0xLTIuNSAwLTMuNEwxNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTktMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDQgNiA2IiB9XQogICAgXTsKICAgIHZhciBUYWJsZTIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDNINWEyIDIgMCAwIDAtMiAydjRtNi02aDEwYTIgMiAwIDAgMSAyIDJ2NE05IDN2MThtMCAwaDEwYTIgMiAwIDAgMCAyLTJWOU05IDIxSDVhMiAyIDAgMCAxLTItMlY5bTAgMGgxOCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgVGFibGVDZWxsc01lcmdlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjF2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBUYWJsZUNlbGxzU3BsaXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBUYWJsZUNvbHVtbnNTcGxpdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDNoNmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNWgtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAzaC0yYTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDloLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzdjE4IiB9XQogICAgXTsKICAgIHZhciBUYWJsZU9mQ29udGVudHMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOWguMDEiIH1dCiAgICBdOwogICAgdmFyIFRhYmxlUHJvcGVydGllcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE1SDMiIH1dCiAgICBdOwogICAgdmFyIFRhYmxlUm93c1NwbGl0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTBoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMnYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEwaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIydi02YTIgMiAxMzUgMCAxIDItMmgxNGEyIDIgNDUgMCAxIDIgMnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMnYyYTIgMiA0NSAwIDAgMiAyaDE0YTIgMiAxMzUgMCAwIDItMlYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTBoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIydi04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMnY0IiB9XQogICAgXTsKICAgIHZhciBUYWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dCiAgICBdOwogICAgdmFyIFRhYmxldFNtYXJ0cGhvbmUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjE0IiwgeDogIjMiLCB5OiAiOCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDRhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjE2YTIgMiAwIDAgMS0yIDJoLTIuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4aC4wMSIgfV0KICAgIF07CiAgICB2YXIgVGFibGV0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIyMCIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyLjAxIiwgeTE6ICIxOCIsIHkyOiAiMTgiIH1dCiAgICBdOwogICAgdmFyIFRhYmxldHMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjciLCByOiAiNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxNyIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMuNDYgMTAuNTQgNy4wOC03LjA4IiB9XQogICAgXTsKICAgIHZhciBUYWcyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuNTg2IDIuNTg2QTIgMiAwIDAgMCAxMS4xNzIgMkg0YTIgMiAwIDAgMC0yIDJ2Ny4xNzJhMiAyIDAgMCAwIC41ODYgMS40MTRsOC43MDQgOC43MDRhMi40MjYgMi40MjYgMCAwIDAgMy40MiAwbDYuNTgtNi41OGEyLjQyNiAyLjQyNiAwIDAgMCAwLTMuNDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNy41IiwgY3k6ICI3LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XQogICAgXTsKICAgIHZhciBUYWdzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuMTcyIDJhMiAyIDAgMCAxIDEuNDE0LjU4Nmw2LjcxIDYuNzFhMi40IDIuNCAwIDAgMSAwIDMuNDA4bC00LjU5MiA0LjU5MmEyLjQgMi40IDAgMCAxLTMuNDA4IDBsLTYuNzEtNi43MUEyIDIgMCAwIDEgNiA5LjE3MlYzYTEgMSAwIDAgMSAxLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgN3Y2LjE3MmEyIDIgMCAwIDAgLjU4NiAxLjQxNGw2LjcxIDYuNzFhMi40IDIuNCAwIDAgMCAzLjE5MS4xOTMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMC41IiwgY3k6ICI2LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XQogICAgXTsKICAgIHZhciBUYWxseTEgPSBbWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV1dOwogICAgdmFyIFRhbGx5MiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDR2MTYiIH1dCiAgICBdOwogICAgdmFyIFRhbGx5MyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNHYxNiIgfV0KICAgIF07CiAgICB2YXIgVGFsbHk0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDR2MTYiIH1dCiAgICBdOwogICAgdmFyIFRhbGx5NSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDYgMiAxOCIgfV0KICAgIF07CiAgICB2YXIgVGFuZ2VudCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjQiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS41OSA1LjQxIDUuNDEgMTUuNTkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICIxNyIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIycy00LTktMS41LTExLjVTMjIgMTIgMjIgMTIiIH1dCiAgICBdOwogICAgdmFyIFRhcmdldCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgVGVsZXNjb3BlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTAuMDY1IDEyLjQ5My02LjE4IDEuMzE4YS45MzQuOTM0IDAgMCAxLTEuMTA4LS43MDJsLS41MzctMi4xNWExLjA3IDEuMDcgMCAwIDEgLjY5MS0xLjI2NWwxMy41MDQtNC40NCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy41NiAxMS43NDcgNC4zMzItLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAyMS0zLjEwNS02LjIxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjQ4NSA1Ljk0YTIgMiAwIDAgMSAxLjQ1NS0yLjQyNWwxLjA5LS4yNzJhMSAxIDAgMCAxIDEuMjEyLjcyN2wxLjUxNSA2LjA2YTEgMSAwIDAgMS0uNzI3IDEuMjEzbC0xLjA5LjI3MmEyIDIgMCAwIDEtMi40MjUtMS40NTV6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuMTU4IDguNjMzIDEuMTE0IDQuNDU2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMjEgMy4xMDUtNi4yMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMyIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBUZW50VHJlZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiNCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDUgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxMCAzLTMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE0VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRIN2wtNSA4aDIwWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNCA1IDgiIH1dCiAgICBdOwogICAgdmFyIFRlbnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjUgMjEgMTQgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC41IDIxIDEwIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUuNSAyMSAxMiAxNWwtMy41IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWgyMCIgfV0KICAgIF07CiAgICB2YXIgVGVybWluYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQgMTcgNi02LTYtNiIgfV0KICAgIF07CiAgICB2YXIgVGVzdFR1YmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC41IDJ2MTcuNWMwIDEuNC0xLjEgMi41LTIuNSAyLjVjLTEuNCAwLTIuNS0xLjEtMi41LTIuNVYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAyaDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuNSAxNmgtNSIgfV0KICAgIF07CiAgICB2YXIgVGVzdFR1YmVEaWFnb25hbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDcgNi44MiAyMS4xOGEyLjgzIDIuODMgMCAwIDEtMy45OS0uMDFhMi44MyAyLjgzIDAgMCAxIDAtNEwxNyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2SDQiIH1dCiAgICBdOwogICAgdmFyIFRlc3RUdWJlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMnYxNy41QTIuNSAyLjUgMCAwIDEgNi41IDIyQTIuNSAyLjUgMCAwIDEgNCAxOS41VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMnYxNy41YTIuNSAyLjUgMCAwIDEtMi41IDIuNWEyLjUgMi41IDAgMCAxLTIuNS0yLjVWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDJoNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyaDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNkg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE2aC01IiB9XQogICAgXTsKICAgIHZhciBUZXh0QWxpZ25DZW50ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTJINyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxOUg1IiB9XQogICAgXTsKICAgIHZhciBUZXh0QWxpZ25FbmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJIOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOUg3IiB9XQogICAgXTsKICAgIHZhciBUZXh0QWxpZ25KdXN0aWZ5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOWgxOCIgfV0KICAgIF07CiAgICB2YXIgVGV4dEFsaWduU3RhcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxOUgzIiB9XQogICAgXTsKICAgIHZhciBUZXh0Q3Vyc29ySW5wdXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMGgtMWEyIDIgMCAwIDEtMi0yIDIgMiAwIDAgMS0yIDJINiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA4aDdhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJoLTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxNkg0YTIgMiAwIDAgMS0yLTJ2LTRhMiAyIDAgMCAxIDItMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNGgxYTIgMiAwIDAgMSAyIDIgMiAyIDAgMCAxIDItMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNnYxMiIgfV0KICAgIF07CiAgICB2YXIgVGV4dEN1cnNvciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIyaC0xYTQgNCAwIDAgMS00LTRWNmE0IDQgMCAwIDEgNC00aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMmgxYTQgNCAwIDAgMCA0LTR2LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyaDFhNCA0IDAgMCAxIDQgNHYxIiB9XQogICAgXTsKICAgIHZhciBUZXh0SW5pdGlhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxMiAzLjU1My03LjcyNGEuNS41IDAgMCAxIC44OTQgMEwxMSAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjkyIDEwaDYuMTYiIH1dCiAgICBdOwogICAgdmFyIFRleHRRdW90ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE5SDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMnY3IiB9XQogICAgXTsKICAgIHZhciBUZXh0U2VhcmNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTlIMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxNSIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE5LTEuOS0xLjkiIH1dCiAgICBdOwogICAgdmFyIFRleHRTZWxlY3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDNoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzYTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTR2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOWEyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM2EyIDIgMCAwIDAtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgOGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDNoMSIgfV0KICAgIF07CiAgICB2YXIgVGV4dFdyYXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNi0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJoMTQuNWExIDEgMCAwIDEgMCA3SDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVoMTgiIH1dCiAgICBdOwogICAgdmFyIFRoZWF0ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwczMtMyAzLTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTBzLTMtMy0zLTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMmMwIDQuNC0zLjYgOC04IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMmMwIDQuNCAzLjYgOCA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMHMyIDIgMiA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEwcy0yIDItMiA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIydi0xYTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjJ2LTFhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MSIgfV0KICAgIF07CiAgICB2YXIgVGhlcm1vbWV0ZXJTbm93Zmxha2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAyMC0xLjI1LTIuNUw2IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDQgOC43NSA2LjUgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjU4NSAxNUgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDYuNUwxMCA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE0LjU0YTQgNCAwIDEgMS00IDBWNGEyIDIgMCAwIDEgNCAweiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDEwIDEuNSAyTDQgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAyMSAzLTYtMS41LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAzIDMgNmgyIiB9XQogICAgXTsKICAgIHZhciBUaGVybW9tZXRlclN1biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4YTQgNCAwIDAgMC0xLjY0NSA3LjY0NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTQuNTRhNCA0IDAgMSAxLTQgMFY0YTIgMiAwIDAgMSA0IDB6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQuOTMgNC45MyAxLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi4zNCAxNy42Ni0xLjQxIDEuNDEiIH1dCiAgICBdOwogICAgdmFyIFRoZXJtb21ldGVyID0gW1sicGF0aCIsIHsgZDogIk0xNCA0djEwLjU0YTQgNCAwIDEgMS00IDBWNGEyIDIgMCAwIDEgNCAwWiIgfV1dOwogICAgdmFyIFRodW1ic0Rvd24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDE4LjEyIDEwIDE0SDQuMTdhMiAyIDAgMCAxLTEuOTItMi41NmwyLjMzLThBMiAyIDAgMCAxIDYuNSAySDIwYTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAyaC0yLjc2YTIgMiAwIDAgMC0xLjc5IDEuMTFMMTIgMjJhMy4xMyAzLjEzIDAgMCAxLTMtMy44OFoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRWMiIgfV0KICAgIF07CiAgICB2YXIgVGh1bWJzVXAgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSA1Ljg4IDE0IDEwaDUuODNhMiAyIDAgMCAxIDEuOTIgMi41NmwtMi4zMyA4QTIgMiAwIDAgMSAxNy41IDIySDRhMiAyIDAgMCAxLTItMnYtOGEyIDIgMCAwIDEgMi0yaDIuNzZhMiAyIDAgMCAwIDEuNzktMS4xMUwxMiAyYTMuMTMgMy4xMyAwIDAgMSAzIDMuODhaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTB2MTIiIH1dCiAgICBdOwogICAgdmFyIFRpY2tldENoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEyIDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIFRpY2tldE1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEyaDYiIH1dCiAgICBdOwogICAgdmFyIFRpY2tldFBlcmNlbnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDlhMyAzIDAgMSAxIDAgNnYyYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtMmEzIDMgMCAxIDEgMC02VjdhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTVoLjAxIiB9XQogICAgXTsKICAgIHZhciBUaWNrZXRQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXY2IiB9XQogICAgXTsKICAgIHZhciBUaWNrZXRTbGFzaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOWEzIDMgMCAwIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDAgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDE0LjUgNS01IiB9XQogICAgXTsKICAgIHZhciBUaWNrZXRYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjUgMTQuNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDkuNSA1IDUiIH1dCiAgICBdOwogICAgdmFyIFRpY2tldCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOWEzIDMgMCAwIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDAgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNXYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE3djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTF2MiIgfV0KICAgIF07CiAgICB2YXIgVGlja2V0c1BsYW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuNSAxN2gxLjIyN2EyIDIgMCAwIDAgMS4zNDUtLjUyTDE4IDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDEzLjUgMy43OTQuNTA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMuMTczIDguMTggMTEtNWEyIDIgMCAwIDEgMi42NDcuOTkzTDE4LjU2IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMFY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTR2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE5djIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjgiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTMiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFRpbWVyT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNiAxMWE4IDggMCAwIDAgMS43IDguNyA4IDggMCAwIDAgOC43IDEuNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjQgNy40YTggOCAwIDAgMSAxMC4zIDEgOCA4IDAgMCAxIC45IDEwLjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydi0yIiB9XQogICAgXTsKICAgIHZhciBUaW1lclJlc2V0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTNhOCA4IDAgMCAxIDgtNyA4IDggMCAxIDEtNS4zIDE0TDQgMTcuNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE3SDR2NSIgfV0KICAgIF07CiAgICB2YXIgVGltZXIyID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMTAiLCB4MjogIjE0IiwgeTE6ICIyIiwgeTI6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxNSIsIHkxOiAiMTQiLCB5MjogIjExIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE0IiwgcjogIjgiIH1dCiAgICBdOwogICAgdmFyIFRpY2tldHMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0zLjE3MyA4LjE4IDExLTVhMiAyIDAgMCAxIDIuNjQ3Ljk5M0wxOC41NiA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTBWOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOXYyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI4Iiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEzIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBUb2dnbGVMZWZ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICI1Iiwgcng6ICI3IiB9XQogICAgXTsKICAgIHZhciBUb2dnbGVSaWdodCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjciIH1dCiAgICBdOwogICAgdmFyIFRvaWxldCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMTJoMTNhMSAxIDAgMCAxIDEgMSA1IDUgMCAwIDEtNSA1aC0uNTk4YS41LjUgMCAwIDAtLjQyNC43NjVsMS41NDQgMi40N2EuNS41IDAgMCAxLS40MjQuNzY1SDUuNDAyYS41LjUgMCAwIDEtLjQyNC0uNzY1TDcgMTgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGE1IDUgMCAwIDEtNS01VjRhMiAyIDAgMCAxIDItMmg4YTIgMiAwIDAgMSAyIDJ2OCIgfV0KICAgIF07CiAgICB2YXIgVG9vbENhc2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNWg0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE0LjgxNyAxMC45OTUtLjk3MS0xLjQ1IDEuMDM0LTEuMjMyYTIgMiAwIDAgMC0yLjAyNS0zLjIzOGwtMS44Mi4zNjRMOS45MSAzLjg4NWEyIDIgMCAwIDAtMy42MjUuNzQ4TDYuMTQxIDYuNTVsLTEuNzI1LjQyNmEyIDIgMCAwIDAtLjE5IDMuNzU2bC42NTcuMjciCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTguODIyIDEwLjk5NSAyLjI2LTUuMzhhMSAxIDAgMCAwLS41NTctMS4zMThMMTYuOTU0IDIuOWExIDEgMCAwIDAtMS4yODEuNTMzbC0uOTI0IDIuMTIyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTIuMDA2QTEgMSAwIDAgMSA0Ljk5NCAxMUgxOWExIDEgMCAwIDEgMSAxdjdhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJ6IiB9XQogICAgXTsKICAgIHZhciBUb29sYm94ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJ2NCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiA2YTIgMiAwIDAgMSAxLjQxNC41ODZsNCA0QTIgMiAwIDAgMSAyMiAxMnY3YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi03YTIgMiAwIDAgMSAuNTg2LTEuNDE0bDQtNEEyIDIgMCAwIDEgOCA2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA2VjRhMiAyIDAgMCAwLTItMmgtNGEyIDIgMCAwIDAtMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEydjQiIH1dCiAgICBdOwogICAgdmFyIFRvcm5hZG8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA0SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOEg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEySDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjBIOSIgfV0KICAgIF07CiAgICB2YXIgVG9ydXMgPSBbCiAgICAgIFsiZWxsaXBzZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTEiLCByeDogIjMiLCByeTogIjIiIH1dLAogICAgICBbImVsbGlwc2UiLCB7IGN4OiAiMTIiLCBjeTogIjEyLjUiLCByeDogIjEwIiwgcnk6ICI4LjUiIH1dCiAgICBdOwogICAgdmFyIFRvdWNocGFkT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuNjU2IDE0SDIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTRoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIwSDRhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS42NTYgNEgyMGEyIDIgMCAwIDEgMiAydjEwLjM0NCIgfV0KICAgIF07CiAgICB2YXIgVG91Y2hwYWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdi02IiB9XQogICAgXTsKICAgIHZhciBUb3dlckNvbnRyb2wgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC4yIDEyLjI3IDIwIDZINGwxLjggNi4yN2ExIDEgMCAwIDAgLjk1LjczaDEwLjVhMSAxIDAgMCAwIC45Ni0uNzNaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTN2OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMnYtOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDYgMSA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDYtMSA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAyaC0yIiB9XQogICAgXTsKICAgIHZhciBUb3lCcmljayA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTIiLCB4OiAiMyIsIHk6ICI4Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDhWNWMwLS42LS40LTEtMS0xSDZhMSAxIDAgMCAwLTEgMXYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDhWNWMwLS42LS40LTEtMS0xaC0zYTEgMSAwIDAgMC0xIDF2MyIgfV0KICAgIF07CiAgICB2YXIgVHJhY3RvciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDExIDExIC45YTEgMSAwIDAgMSAuOCAxLjFsLS42NjUgNC4xNThhMSAxIDAgMCAxLS45ODguODQySDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE4aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDVhMSAxIDAgMCAwLTEgMXY1LjU3MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDRoOC4xMjlhMSAxIDAgMCAxIC45OS44NjNMMTMgMTEuMjQ2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTFWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE1aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwLjFWNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiMTUiLCByOiAiNSIgfV0KICAgIF07CiAgICB2YXIgVHJhZmZpY0NvbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi4wNSAxMC45NjZhNSAyLjUgMCAwIDEtOC4xIDAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTYuOTIzIDE0LjA0OSA0LjQ4IDIuMDRhMSAxIDAgMCAxIC4wMDEgMS44MzFsLTguNTc0IDMuOWEyIDIgMCAwIDEtMS42NiAwbC04LjU3NC0zLjkxYTEgMSAwIDAgMSAwLTEuODNsNC40ODQtMi4wNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi45NDkgMTQuMTRhNSAyLjUgMCAxIDEtOS45IDBMMTAuMDYzIDMuNWEyIDIgMCAwIDEgMy44NzQgMHoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4xOTQgNi41N2E1IDIuNSAwIDAgMCA1LjYxIDAiIH1dCiAgICBdOwogICAgdmFyIFRyYWluRnJvbnRUdW5uZWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIyVjEyYTEwIDEwIDAgMSAxIDIwIDB2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNi44djEuNGEzIDIuOCAwIDEgMS02IDBWNi44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE1aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTlhNCA0IDAgMCAxLTQtNHYtM2E2IDYgMCAxIDEgMTIgMHYzYTQgNCAwIDAgMS00IDRaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTktMiAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE5IDIgMyIgfV0KICAgIF07CiAgICB2YXIgVHJhaW5Gcm9udCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMy4xVjdhNCA0IDAgMCAwIDggMFYzLjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNS0xLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTUgMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTljLTIuOCAwLTUtMi4yLTUtNXYtNGE4IDggMCAwIDEgMTYgMHY0YzAgMi44LTIuMiA1LTUgNVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxOS0yIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTkgMiAzIiB9XQogICAgXTsKICAgIHZhciBUcmFpblRyYWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNyAxNyAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMTQgOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTEgOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggOCA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgNSA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMiA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMiAyMiA3IiB9XQogICAgXTsKICAgIHZhciBUcmFuc2dlbmRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjBoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMmg0djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDcuMTcgNy4xNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDUuMzU1VjJoMy4zNTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMi03LjE3IDcuMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA1IDUgOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XQogICAgXTsKICAgIHZhciBUcmFtRnJvbnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjE2IiwgeDogIjQiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDExaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE5LTIgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAyMi0yLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTVoLjAxIiB9XQogICAgXTsKICAgIHZhciBUcmFzaDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDExdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgNnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNmgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDZWNGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYyIiB9XQogICAgXTsKICAgIHZhciBUcmFzaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDZ2MTRhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDZoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA2VjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MiIgfV0KICAgIF07CiAgICB2YXIgVHJlZURlY2lkdW91cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTggMTlhNCA0IDAgMCAxLTIuMjQtNy4zMkEzLjUgMy41IDAgMCAxIDkgNi4wM1Y2YTMgMyAwIDEgMSA2IDB2LjA0YTMuNSAzLjUgMCAwIDEgMy4yNCA1LjY1QTQgNCAwIDAgMSAxNiAxOVoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTl2MyIgfV0KICAgIF07CiAgICB2YXIgVHJlZVBhbG0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA4YzAtMi43Ni0yLjQ2LTUtNS41LTVTMiA1LjI0IDIgOGgybDEtMSAxIDFoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA3LjE0QTUuODIgNS44MiAwIDAgMSAxNi41IDZjMy4wNCAwIDUuNSAyLjI0IDUuNSA1aC0zbC0xLTEtMSAxaC0zIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTUuODkgOS43MWMtMi4xNSAyLjE1LTIuMyA1LjQ3LS4zNSA3LjQzbDQuMjQtNC4yNS43LS43LjcxLS43MSAyLjEyLTIuMTJjLTEuOTUtMS45Ni01LjI3LTEuOC03LjQyLjM1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE1LjVjLjUgMi41LS4xNyA0LjUtMSA2LjVoNGMyLTUuNS0uNS0xMi0xLTE0IiB9XQogICAgXTsKICAgIHZhciBUcmVlUGluZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE3IDE0IDMgMy4zYTEgMSAwIDAgMS0uNyAxLjdINC43YTEgMSAwIDAgMS0uNy0xLjdMNyAxNGgtLjNhMSAxIDAgMCAxLS43LTEuN0w5IDloLS4yQTEgMSAwIDAgMSA4IDcuM0wxMiAzbDQgNC4zYTEgMSAwIDAgMS0uOCAxLjdIMTVsMyAzLjNhMSAxIDAgMCAxLS43IDEuN0gxN1oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTMiIH1dCiAgICBdOwogICAgdmFyIFRyZW5kaW5nRG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE3aDZ2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTctOC41LTguNS01IDVMMiA3IiB9XQogICAgXTsKICAgIHZhciBUcmVsbG8gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIzIiwgaGVpZ2h0OiAiOSIsIHg6ICI3IiwgeTogIjciIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMyIsIGhlaWdodDogIjUiLCB4OiAiMTQiLCB5OiAiNyIgfV0KICAgIF07CiAgICB2YXIgVHJlZXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMHYuMkEzIDMgMCAwIDEgOC45IDE2SDVhMyAzIDAgMCAxLTEtNS44VjEwYTMgMyAwIDAgMSA2IDBaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxOXYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDE5aDguM2ExIDEgMCAwIDAgLjctMS43TDE4IDE0aC4zYTEgMSAwIDAgMCAuNy0xLjdMMTYgOWguMmExIDEgMCAwIDAgLjgtMS43TDEzIDNsLTEuNCAxLjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFRyZW5kaW5nVXBEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuODI4IDE0LjgyOCAyMSAyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNnY1aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtOSA5LTQtNC02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOFYzaC01IiB9XQogICAgXTsKICAgIHZhciBUcmVuZGluZ1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgN2g2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04LjUgOC41LTUtNUwyIDE3IiB9XQogICAgXTsKICAgIHZhciBUcmlhbmdsZUFsZXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEuNzMgMTgtOC0xNGEyIDIgMCAwIDAtMy40OCAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0KICAgIF07CiAgICB2YXIgVHJpYW5nbGVEYXNoZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4xNyA0LjE5M2EyIDIgMCAwIDEgMy42NjYuMDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuODc0IDcuNzQzIDEgMS43MzIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTguODQ5IDEyLjk1MiAxIDEuNzMyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjgyNCAxOC4xOGEyIDIgMCAwIDEtMS44MzUgMi44MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4wMjQgMjFhMiAyIDAgMCAxLTEuODM5LTIuODM5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuMTM2IDEyLjk1Mi0xIDEuNzMyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjEwMiA3Ljc0My0xIDEuNzMyIiB9XQogICAgXTsKICAgIHZhciBUcmlhbmdsZVJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMThhMiAyIDAgMCAxLTIgMkgzYy0xLjEgMC0xLjMtLjYtLjQtMS4zTDIwLjQgNC4zYy45LS43IDEuNi0uNCAxLjYuN1oiIH1dCiAgICBdOwogICAgdmFyIFRyaWFuZ2xlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNzMgNGEyIDIgMCAwIDAtMy40NiAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTNaIiB9XQogICAgXTsKICAgIHZhciBUcm9waHkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNC42NnYxLjYyNmEyIDIgMCAwIDEtLjk3NiAxLjY5NkE1IDUgMCAwIDAgNyAyMS45NzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTQuNjZ2MS42MjZhMiAyIDAgMCAwIC45NzYgMS42OTZBNSA1IDAgMCAxIDE3IDIxLjk3OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA5aDEuNWExIDEgMCAwIDAgMC01SDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMjJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA5YTYgNiAwIDAgMCAxMiAwVjNhMSAxIDAgMCAwLTEtMUg3YTEgMSAwIDAgMC0xIDF6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOUg0LjVhMSAxIDAgMCAxIDAtNUg2IiB9XQogICAgXTsKICAgIHZhciBUcnVja0VsZWN0cmljID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTlWN2EyIDIgMCAwIDAtMi0ySDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTlIOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxOWgyYTEgMSAwIDAgMCAxLTF2LTMuNjVhMSAxIDAgMCAwLS4yMi0uNjJMMTguMyA5LjM4YTEgMSAwIDAgMC0uNzgtLjM4SDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTN2NWExIDEgMCAwIDAgMSAxaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAzIDIuMTUgNS4xNWEuNDk1LjQ5NSAwIDAgMCAuMzUuODZoMi4xNWEuNDcuNDcgMCAwIDEgLjM1Ljg2TDMgOS4wMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiMTkiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgVHJ1Y2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOFY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjExYTEgMSAwIDAgMCAxIDFoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxOEg5IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTkgMThoMmExIDEgMCAwIDAgMS0xdi0zLjY1YTEgMSAwIDAgMC0uMjItLjYyNGwtMy40OC00LjM1QTEgMSAwIDAgMCAxNy41MiA4SDE0IiB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxOCIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiMTgiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgVHVya2lzaExpcmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA0IDUgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA4LjUtMTAgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmE5IDkgMCAwIDEtOSA5VjMiIH1dCiAgICBdOwogICAgdmFyIFR1cm50YWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEyLjAxaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA4djRhOCA4IDAgMCAxLTEuMDcgNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICIxMiIsIHI6ICI0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI0Iiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2Iiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBUdXJ0bGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMiAxMCAyIDR2M2ExIDEgMCAwIDAgMSAxaDJhMSAxIDAgMCAwIDEtMXYtM2E4IDggMCAxIDAtMTYgMHYzYTEgMSAwIDAgMCAxIDFoMmExIDEgMCAwIDAgMS0xdi0zbDItNGg0WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjgyIDcuOSA4IDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjE4IDcuOSAxMiAxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi45MyAxMEgyMGEyIDIgMCAwIDEgMCA0SDIiIH1dCiAgICBdOwogICAgdmFyIFR2TWluaW1hbFBsYXkgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS4wMzMgOS40NGEuNjQ3LjY0NyAwIDAgMSAwIDEuMTJsLTQuMDY1IDIuMzUyYS42NDUuNjQ1IDAgMCAxLS45NjgtLjU2VjcuNjQ4YS42NDUuNjQ1IDAgMCAxIC45NjctLjU2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxaDEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBUdk1pbmltYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxaDEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XQogICAgXTsKICAgIHZhciBUdiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDItNSA1LTUtNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE1IiwgeDogIjIiLCB5OiAiNyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgVHdpdGNoID0gW1sicGF0aCIsIHsgZDogIk0yMSAySDN2MTZoNXY0bDQtNGg1bDQtNFYyem0tMTAgOVY3bTUgNFY3IiB9XV07CiAgICB2YXIgVHdpdHRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDRzLS43IDIuMS0yIDMuNGMxLjYgMTAtOS40IDE3LjMtMTggMTEuNiAyLjIuMSA0LjQtLjYgNi0yQzMgMTUuNS41IDkuNiAzIDVjMi4yIDIuNiA1LjYgNC4xIDkgNC0uOS00LjIgNC02LjYgNy0zLjggMS4xIDAgMy0xLjIgMy0xLjJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBUeXBlT3V0bGluZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDE2LjVhLjUuNSAwIDAgMCAuNS41aC41YTIgMiAwIDAgMSAwIDRIOWEyIDIgMCAwIDEgMC00aC41YS41LjUgMCAwIDAgLjUtLjV2LTlhLjUuNSAwIDAgMC0uNS0uNWgtM2EuNS41IDAgMCAwLS41LjVWOGEyIDIgMCAwIDEtNCAwVjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTQgMHYtLjVhLjUuNSAwIDAgMC0uNS0uNWgtM2EuNS41IDAgMCAwLS41LjVaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBVbWJyZWxsYU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzdjdhMiAyIDAgMCAwIDQgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguNjU2IDEzaDIuMzM2YTEgMSAwIDAgMCAuOTctMS4yNzQgMTAuMjg0IDEwLjI4NCAwIDAgMC0xMi4wNy03LjUxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01Ljk2MSA1Ljk1N2ExMC4yOCAxMC4yOCAwIDAgMC0zLjkyMiA1Ljc2OUExIDEgMCAwIDAgMyAxM2gxMCIgfV0KICAgIF07CiAgICB2YXIgVW1icmVsbGEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM3Y3YTIgMiAwIDAgMCA0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjk5MiAxM2ExIDEgMCAwIDAgLjk3LTEuMjc0IDEwLjI4NCAxMC4yODQgMCAwIDAtMTkuOTIzIDBBMSAxIDAgMCAwIDMgMTN6IiB9XQogICAgXTsKICAgIHZhciBUeXBlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDdWNWExIDEgMCAwIDEgMS0xaDE0YTEgMSAwIDAgMSAxIDF2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIwaDYiIH1dCiAgICBdOwogICAgdmFyIFVuZGVybGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNHY2YTYgNiAwIDAgMCAxMiAwVjQiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNCIsIHgyOiAiMjAiLCB5MTogIjIwIiwgeTI6ICIyMCIgfV0KICAgIF07CiAgICB2YXIgVW5kbzIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE0IDQgOWw1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA5aDEwLjVhNS41IDUuNSAwIDAgMSA1LjUgNS41YTUuNSA1LjUgMCAwIDEtNS41IDUuNUgxMSIgfV0KICAgIF07CiAgICB2YXIgVW5kb0RvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3YTkgOSAwIDAgMC0xNS02LjdMMyAxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDd2Nmg2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE3IiwgcjogIjEiIH1dCiAgICBdOwogICAgdmFyIFVuZG8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDd2Nmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3YTkgOSAwIDAgMC05LTkgOSA5IDAgMCAwLTYgMi4zTDMgMTMiIH1dCiAgICBdOwogICAgdmFyIFVuZm9sZEhvcml6b250YWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAxNSAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgOS0zIDMgMyAzIiB9XQogICAgXTsKICAgIHZhciBVbmdyb3VwID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjYiLCB4OiAiNSIsIHk6ICI0Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI2IiwgeDogIjExIiwgeTogIjE0Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBVbmZvbGRWZXJ0aWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDhWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEySDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxOS0zIDMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDUtMy0zLTMgMyIgfV0KICAgIF07CiAgICB2YXIgVW5pdmVyc2l0eSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxdi0zYTIgMiAwIDAgMC00IDB2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTZoLjAxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDdhMSAxIDAgMCAwLTEtMWgtMmEyIDIgMCAwIDEtMS4xNDMtLjM1OUwxMy4xNDMgMi4zNmEyIDIgMCAwIDAtMi4yODYtLjAwMUw2LjE0MyA1LjY0QTIgMiAwIDAgMSA1IDZIM2ExIDEgMCAwIDAtMSAxdjEyYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNmguMDEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMiIgfV0KICAgIF07CiAgICB2YXIgVW5saW5rMiA9IFtbInBhdGgiLCB7IGQ6ICJNMTUgN2gyYTUgNSAwIDAgMSAwIDEwaC0ybS02IDBIN0E1IDUgMCAwIDEgNyA3aDIiIH1dXTsKICAgIHZhciBVbmxpbmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xOC44NCAxMi4yNSAxLjcyLTEuNzFoLS4wMmE1LjAwNCA1LjAwNCAwIDAgMC0uMTItNy4wNyA1LjAwNiA1LjAwNiAwIDAgMC02Ljk1IDBsLTEuNzIgMS43MSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAibTUuMTcgMTEuNzUtMS43MSAxLjcxYTUuMDA0IDUuMDA0IDAgMCAwIC4xMiA3LjA3IDUuMDA2IDUuMDA2IDAgMCAwIDYuOTUgMGwxLjcxLTEuNzEiIH0KICAgICAgXSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjgiLCB5MTogIjIiLCB5MjogIjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiNSIsIHkxOiAiOCIsIHkyOiAiOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNiIsIHgyOiAiMTYiLCB5MTogIjE5IiwgeTI6ICIyMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxOSIsIHgyOiAiMjIiLCB5MTogIjE2IiwgeTI6ICIxNiIgfV0KICAgIF07CiAgICB2YXIgVW5wbHVnID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgNSAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyMiAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zIDIwLjNhMi40IDIuNCAwIDAgMCAzLjQgMEwxMiAxOGwtNi02LTIuMyAyLjNhMi40IDIuNCAwIDAgMCAwIDMuNFoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy41IDEzLjUgMTAgMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuNSAxNi41IDEzIDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDYgNiA2IDIuMy0yLjNhMi40IDIuNCAwIDAgMCAwLTMuNGwtMi42LTIuNmEyLjQgMi40IDAgMCAwLTMuNCAwWiIgfV0KICAgIF07CiAgICB2YXIgVXBsb2FkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyA4LTUtNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIgfV0KICAgIF07CiAgICB2YXIgVXNiID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiNyIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiMjAiLCByOiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjcgMTkuMyAxOSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtMyAxIDIgMloiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4yNiA3LjY4IDUgMTJsMiA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE0IDUgMiAzLjUtMy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDEyIDEtMSAxIDEtMSAxWiIgfV0KICAgIF07CiAgICB2YXIgVXNlckNoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTEgMiAyIDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiNyIsIHI6ICI0IiB9XQogICAgXTsKICAgIHZhciBVc2VyQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTVINmE0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuMzA1IDE2LjUzLjkyMy0uMzgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjIyOCAxMy44NTItLjkyMy0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAxMi4yMjgtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAxNy43NzItLjM4My45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMTQ4IDEyLjIyOC4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS41MyAxOC42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiAxMy44NTIuOTI0LS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDE2LjE0OC45MjQuMzgzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE1IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI3IiwgcjogIjQiIH1dCiAgICBdOwogICAgdmFyIFVzZXJMb2NrID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiNyIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjMgMTVIN2E0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTUuNVYxNGEyIDIgMCAwIDEgNCAwdjEuNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHg6ICIxMyIsIHk6ICIxNiIsIHJ4OiAiLjg5OSIgfV0KICAgIF07CiAgICB2YXIgVXNlck1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjF2LTJhNCA0IDAgMCAwLTQtNEg2YTQgNCAwIDAgMC00IDR2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjciLCByOiAiNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMiIsIHgyOiAiMTYiLCB5MTogIjExIiwgeTI6ICIxMSIgfV0KICAgIF07CiAgICB2YXIgVXNlclBlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjUgMTVIN2E0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMzc4IDE2LjYyNmExIDEgMCAwIDAtMy4wMDQtMy4wMDRsLTQuMDEgNC4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjciLCByOiAiNCIgfV0KICAgIF07CiAgICB2YXIgVXNlclBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiNyIsIHI6ICI0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIxOSIsIHkxOiAiOCIsIHkyOiAiMTQiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjIiLCB4MjogIjE2IiwgeTE6ICIxMSIsIHkyOiAiMTEiIH1dCiAgICBdOwogICAgdmFyIFVzZXJSb3VuZENoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWE4IDggMCAwIDEgMTMuMjkyLTYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE5IDIgMiA0LTQiIH1dCiAgICBdOwogICAgdmFyIFVzZXJSb3VuZENvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjMwNSAxOS41My45MjMtLjM4MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS4yMjggMTYuODUyLS45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi44NTIgMTUuMjI4LS4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi44NTIgMjAuNzcyLS4zODMuOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjE0OCAxNS4yMjguMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuNTMgMjEuNjk2LS4zODItLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYTggOCAwIDAgMSAxMC40MzQtNy42MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgMTYuODUyLjkyNC0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiAxOS4xNDguOTI0LjM4MyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI4IiwgcjogIjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgVXNlclJvdW5kTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYTggOCAwIDAgMSAxMy4yOTItNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI4IiwgcjogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTloLTYiIH1dCiAgICBdOwogICAgdmFyIFVzZXJSb3VuZFBlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFhOCA4IDAgMCAxIDEwLjgyMS03LjQ4NyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggMTYuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICI1IiB9XQogICAgXTsKICAgIHZhciBVc2VyUm91bmRQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWE4IDggMCAwIDEgMTMuMjkyLTYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTloLTYiIH1dCiAgICBdOwogICAgdmFyIFVzZXJSb3VuZFNlYXJjaCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjgiLCByOiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYTggOCAwIDAgMSAxMC40MzQtNy42MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDIyLTEuOS0xLjkiIH1dCiAgICBdOwogICAgdmFyIFVzZXJSb3VuZFggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYTggOCAwIDAgMSAxMS44NzMtNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI4IiwgcjogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTcgNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE3LTUgNSIgfV0KICAgIF07CiAgICB2YXIgVXNlclJvdW5kID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOCIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIxYTggOCAwIDAgMC0xNiAwIiB9XQogICAgXTsKICAgIHZhciBVc2VyU2VhcmNoID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiNyIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjMgMTVIN2E0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTciLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMS0xLjktMS45IiB9XQogICAgXTsKICAgIHZhciBVc2VyU3RhciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjA1MSAxMi42MTZhMSAxIDAgMCAxIDEuOTA5LjAyNGwuNzM3IDEuNDUyYTEgMSAwIDAgMCAuNzM3LjUzNWwxLjYzNC4yNTZhMSAxIDAgMCAxIC41ODggMS44MDZsLTEuMTcyIDEuMTY4YTEgMSAwIDAgMC0uMjgyLjg2NmwuMjU5IDEuNjEzYTEgMSAwIDAgMS0xLjU0MSAxLjEzNGwtMS40NjUtLjc1YTEgMSAwIDAgMC0uOTEyIDBsLTEuNDY1Ljc1YTEgMSAwIDAgMS0xLjUzOS0xLjEzM2wuMjU4LTEuNjEzYTEgMSAwIDAgMC0uMjgyLS44NjZsLTEuMTU2LTEuMTUzYTEgMSAwIDAgMSAuNTcyLTEuODIybDEuNjMzLS4yNTZhMSAxIDAgMCAwIC43MzctLjUzNXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNUg3YTQgNCAwIDAgMC00IDR2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI3IiwgcjogIjQiIH1dCiAgICBdOwogICAgdmFyIFVzZXJYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjF2LTJhNCA0IDAgMCAwLTQtNEg2YTQgNCAwIDAgMC00IDR2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjciLCByOiAiNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNyIsIHgyOiAiMjIiLCB5MTogIjgiLCB5MjogIjEzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIyIiwgeDI6ICIxNyIsIHkxOiAiOCIsIHkyOiAiMTMiIH1dCiAgICBdOwogICAgdmFyIFVzZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMXYtMmE0IDQgMCAwIDAtNC00SDlhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjciLCByOiAiNCIgfV0KICAgIF07CiAgICB2YXIgVXNlcnNSb3VuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIxYTggOCAwIDAgMC0xNiAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjgiLCByOiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyMGMwLTMuMzctMi02LjUtNC04YTUgNSAwIDAgMC0uNDUtOC4zIiB9XQogICAgXTsKICAgIHZhciBVc2VycyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINmE0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMy4xMjhhNCA0IDAgMCAxIDAgNy43NDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjF2LTJhNCA0IDAgMCAwLTMtMy44NyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjciLCByOiAiNCIgfV0KICAgIF07CiAgICB2YXIgVXRlbnNpbHNDcm9zc2VkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMi0yLjMgMi4zYTMgMyAwIDAgMCAwIDQuMmwxLjggMS44YTMgMyAwIDAgMCA0LjIgMEwyMiA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1IDMuMyAzLjNhNC4yIDQuMiAwIDAgMCAwIDZsNy4zIDcuM2MuNy43IDIgLjcgMi44IDBMMTUgMTVabTAgMCA3IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMi4xIDIxLjggNi40LTYuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA1LTcgNyIgfV0KICAgIF07CiAgICB2YXIgVXRlbnNpbHMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDJ2N2MwIDEuMS45IDIgMiAyaDRhMiAyIDAgMCAwIDItMlYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMnYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNVYyYTUgNSAwIDAgMC01IDV2NmMwIDEuMS45IDIgMiAyaDNabTAgMHY3IiB9XQogICAgXTsKICAgIHZhciBVdGlsaXR5UG9sZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA1aDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDN2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAzdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgNS03IDctNy03IiB9XQogICAgXTsKICAgIHZhciBWYW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMyA2djVhMSAxIDAgMCAwIDEgMWg2LjEwMmExIDEgMCAwIDEgLjcxMi4yOThsLjg5OC45MWExIDEgMCAwIDEgLjI4OC43MDJWMTdhMSAxIDAgMCAxLTEgMWgtMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE4SDNhMSAxIDAgMCAxLTEtMVY4YTIgMiAwIDAgMSAyLTJoMTJjMS4xIDAgMi4xLjggMi40IDEuOGwxLjE3NiA0LjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOGg1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE4IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3IiwgY3k6ICIxOCIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBWYXJpYWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFzLTQtMy00LTkgNC05IDQtOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzczQgMyA0IDktNCA5LTQgOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiOSIsIHkxOiAiOSIsIHkyOiAiMTUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiMTUiLCB5MTogIjkiLCB5MjogIjE1IiB9XQogICAgXTsKICAgIHZhciBWYXVsdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNy41IiwgY3k6ICI3LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuOSA3LjkgMi43IDIuNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2LjUiLCBjeTogIjcuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNCAxMC42IDIuNy0yLjciIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjE2LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuOSAxNi4xIDIuNy0yLjciIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNi41IiwgY3k6ICIxNi41IiwgcjogIi41IiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy40IDEzLjQgMi43IDIuNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICAgIHZhciBWZWN0b3JTcXVhcmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS41IDdhMjQgMjQgMCAwIDEgMCAxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjUgN2EyNCAyNCAwIDAgMCAwIDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTkuNWEyNCAyNCAwIDAgMCAxMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNC41YTI0IDI0IDAgMCAxIDEwIDAiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxNyIsIHk6ICIxNyIsIHdpZHRoOiAiNSIsIGhlaWdodDogIjUiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxNyIsIHk6ICIyIiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMTciLCB3aWR0aDogIjUiLCBoZWlnaHQ6ICI1Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIyIiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgICB2YXIgVmVnYW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4cTYgMCA2LTYtNiAwLTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy40MSAzLjU5YTEwIDEwIDAgMSAwIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDJhMjYuNiAyNi42IDAgMCAxIDEwIDIwYy45LTYuODIgMS41LTkuNSA0LTE0IiB9XQogICAgXTsKICAgIHZhciBWZW5ldGlhbk1hc2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMWMtMS41IDAtMi41LjUtMyAyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgNmEyIDIgMCAwIDAtMiAydjRhNSA1IDAgMCAwIDUgNSA4IDggMCAwIDEgNSAyIDggOCAwIDAgMSA1LTIgNSA1IDAgMCAwIDUtNVY4YTIgMiAwIDAgMC0yLTJoLTNhOCA4IDAgMCAwLTUgMiA4IDggMCAwIDAtNS0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDExYzEuNSAwIDIuNS41IDMgMiIgfV0KICAgIF07CiAgICB2YXIgVmVudXNBbmRNYXJzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDJoNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDItNS40NiA1LjQ2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcjogIjUiIH1dCiAgICBdOwogICAgdmFyIFZlbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTV2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE5aDYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOSIsIHI6ICI2IiB9XQogICAgXTsKICAgIHZhciBWaWJyYXRlT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMiA4IDIgMi0yIDIgMiAyLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA4LTIgMiAyIDItMiAyIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDh2MTBjMCAuNTUuNDUgMSAxIDFoNmMuNTUgMCAxLS40NSAxLTF2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTAuMzRWNmMwLS41NS0uNDUtMS0xLTFoLTQuMzQiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICAgIHZhciBWaWJyYXRlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMiA4IDIgMi0yIDIgMiAyLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA4LTIgMiAyIDItMiAyIDIgMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiMTQiLCB4OiAiOCIsIHk6ICI1Iiwgcng6ICIxIiB9XQogICAgXTsKICAgIHZhciBWaWRlb09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjY2IDZIMTRhMiAyIDAgMCAxIDIgMnYyLjVsNS4yNDgtMy4wNjJBLjUuNSAwIDAgMSAyMiA3Ljg3djguMTk2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgICB2YXIgVmlkZW8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMyA1LjIyMyAzLjQ4MmEuNS41IDAgMCAwIC43NzctLjQxNlY3Ljg3YS41LjUgMCAwIDAtLjc1Mi0uNDMyTDE2IDEwLjUiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjYiLCB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiMTIiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFZpZGVvdGFwZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTYiLCB4OiAiMiIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOGgyMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjE0IiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE0IiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIFZpZXcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDdWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguOTQ0IDEyLjMzYTEgMSAwIDAgMCAwLS42NiA3LjUgNy41IDAgMCAwLTEzLjg4OCAwIDEgMSAwIDAgMCAwIC42NiA3LjUgNy41IDAgMCAwIDEzLjg4OCAwIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBWb2ljZW1haWwgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTIiLCByOiAiNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI2IiwgeDI6ICIxOCIsIHkxOiAiMTYiLCB5MjogIjE2IiB9XQogICAgXTsKICAgIHZhciBWb2xsZXliYWxsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuMSA3LjFhMTYuNTUgMTYuNTUgMCAwIDEgMTAuOSA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyYTEyLjYgMTIuNiAwIDAgMS04LjcgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi44IDEzLjZhMTYuNTUgMTYuNTUgMCAwIDEtOSA3LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuNyAxN2ExMi44IDEyLjggMCAwIDAtOC43LTUgMTMuMyAxMy4zIDAgMCAxIDAtMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zIDMuOGExNi41NSAxNi41NSAwIDAgMCAxLjkgMTEuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgICB2YXIgVm9sdW1lMSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDQuNzAyYS43MDUuNzA1IDAgMCAwLTEuMjAzLS40OThMNi40MTMgNy41ODdBMS40IDEuNCAwIDAgMSA1LjQxNiA4SDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMi40MTZhMS40IDEuNCAwIDAgMSAuOTk3LjQxM2wzLjM4MyAzLjM4NEEuNzA1LjcwNSAwIDAgMCAxMSAxOS4yOTh6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDlhNSA1IDAgMCAxIDAgNiIgfV0KICAgIF07CiAgICB2YXIgVm9sdW1lMiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDQuNzAyYS43MDUuNzA1IDAgMCAwLTEuMjAzLS40OThMNi40MTMgNy41ODdBMS40IDEuNCAwIDAgMSA1LjQxNiA4SDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMi40MTZhMS40IDEuNCAwIDAgMSAuOTk3LjQxM2wzLjM4MyAzLjM4NEEuNzA1LjcwNSAwIDAgMCAxMSAxOS4yOTh6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDlhNSA1IDAgMCAxIDAgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS4zNjQgMTguMzY0YTkgOSAwIDAgMCAwLTEyLjcyOCIgfV0KICAgIF07CiAgICB2YXIgVm9sdW1lT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOWE1IDUgMCAwIDEgLjk1IDIuMjkzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjM2NCA1LjYzNmE5IDkgMCAwIDEgMS44ODkgOS45NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNyA3LS41ODcuNTg3QTEuNCAxLjQgMCAwIDEgNS40MTYgOEgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDIuNDE2YTEuNCAxLjQgMCAwIDEgLjk5Ny40MTNsMy4zODMgMy4zODRBLjcwNS43MDUgMCAwIDAgMTEgMTkuMjk4VjExIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuODI4IDQuMTcyQS42ODYuNjg2IDAgMCAxIDExIDQuNjU3di42ODYiIH1dCiAgICBdOwogICAgdmFyIFZvbHVtZVggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSA0LjcwMmEuNzA1LjcwNSAwIDAgMC0xLjIwMy0uNDk4TDYuNDEzIDcuNTg3QTEuNCAxLjQgMCAwIDEgNS40MTYgOEgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDIuNDE2YTEuNCAxLjQgMCAwIDEgLjk5Ny40MTNsMy4zODMgMy4zODRBLjcwNS43MDUgMCAwIDAgMTEgMTkuMjk4eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMiIsIHgyOiAiMTYiLCB5MTogIjkiLCB5MjogIjE1IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE2IiwgeDI6ICIyMiIsIHkxOiAiOSIsIHkyOiAiMTUiIH1dCiAgICBdOwogICAgdmFyIFZvbHVtZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDQuNzAyYS43MDUuNzA1IDAgMCAwLTEuMjAzLS40OThMNi40MTMgNy41ODdBMS40IDEuNCAwIDAgMSA1LjQxNiA4SDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMi40MTZhMS40IDEuNCAwIDAgMSAuOTk3LjQxM2wzLjM4MyAzLjM4NEEuNzA1LjcwNSAwIDAgMCAxMSAxOS4yOTh6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBWb3RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMiAyIDIgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgN2MwLTEuMS45LTIgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MTJINVY3WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOUgyIiB9XQogICAgXTsKICAgIHZhciBXYWxsZXRDYXJkcyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0zIDExaDNjLjggMCAxLjYuMyAyLjEuOWwxLjEuOWMxLjYgMS42IDQuMSAxLjYgNS43IDBsMS4xLS45Yy41LS41IDEuMy0uOSAyLjEtLjlIMjEiIH0KICAgICAgXQogICAgXTsKICAgIHZhciBXYWxsZXRNaW5pbWFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgN2gxMmEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNCIgfV0KICAgIF07CiAgICB2YXIgV2FsbGV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkgN1Y0YTEgMSAwIDAgMC0xLTFINWEyIDIgMCAwIDAgMCA0aDE1YTEgMSAwIDAgMSAxIDF2NGgtM2EyIDIgMCAwIDAgMCA0aDNhMSAxIDAgMCAwIDEtMXYtMmExIDEgMCAwIDAtMS0xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNXYxNGEyIDIgMCAwIDAgMiAyaDE1YTEgMSAwIDAgMCAxLTF2LTQiIH1dCiAgICBdOwogICAgdmFyIFdhbGxwYXBlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTcgNi4xLTYuMWEyIDIgMCAwIDEgMi44MS4wMUwyMiAxNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjkiLCByOiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMyIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgICB2YXIgV2FuZFNwYXJrbGVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMjEuNjQgMy42NC0xLjI4LTEuMjhhMS4yMSAxLjIxIDAgMCAwLTEuNzIgMEwyLjM2IDE4LjY0YTEuMjEgMS4yMSAwIDAgMCAwIDEuNzJsMS4yOCAxLjI4YTEuMiAxLjIgMCAwIDAgMS43MiAwTDIxLjY0IDUuMzZhMS4yIDEuMiAwIDAgMCAwLTEuNzIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgNyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA2djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA4SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTZoLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgM0g5IiB9XQogICAgXTsKICAgIHZhciBXYW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNFYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE2di0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDloMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy44IDExLjggMTkgMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOCA2LjIgMTkgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDIxIDktOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi4yIDYuMiAxMSA1IiB9XQogICAgXTsKICAgIHZhciBXYXJlaG91c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMVYxMGExIDEgMCAwIDAtMS0xSDdhMSAxIDAgMCAwLTEgMXYxMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAxLjEzMi0xLjgwM2w3Ljk1LTMuOTc0YTIgMiAwIDAgMSAxLjgzNyAwbDcuOTQ4IDMuOTc0QTIgMiAwIDAgMSAyMiA4eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEzaDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTdoMTIiIH1dCiAgICBdOwogICAgdmFyIFdhc2hpbmdNYWNoaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA2aDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNmguMDEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIyMCIsIHg6ICIzIiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGEyLjUgMi41IDAgMCAwIDAtNSAyLjUgMi41IDAgMCAxIDAtNSIgfV0KICAgIF07CiAgICB2YXIgV2F0Y2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMHYyLjJsMS42IDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuMTMgNy42Ni0uODEtNC4wNWEyIDIgMCAwIDAtMi0xLjYxaC0yLjY4YTIgMiAwIDAgMC0yIDEuNjFsLS43OCA0LjA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuODggMTYuMzYuOCA0YTIgMiAwIDAgMCAyIDEuNjFoMi43MmEyIDIgMCAwIDAgMi0xLjYxbC44MS00LjA1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjYiIH1dCiAgICBdOwogICAgdmFyIFdhdmVzQXJyb3dEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTBMMTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA2TDEyIDEwTDggNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE1QzIuNiAxNS41IDMuMiAxNiA0LjUgMTZDNyAxNiA3IDE0IDkuNSAxNEMxMi4xIDE0IDExLjkgMTYgMTQuNSAxNkMxNyAxNiAxNyAxNCAxOS41IDE0QzIwLjggMTQgMjEuNCAxNC41IDIyIDE1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMjFDMi42IDIxLjUgMy4yIDIyIDQuNSAyMkM3IDIyIDcgMjAgOS41IDIwQzEyLjEgMjAgMTEuOSAyMiAxNC41IDIyQzE3IDIyIDE3IDIwIDE5LjUgMjBDMjAuOCAyMCAyMS40IDIwLjUgMjIgMjEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFdhdmVzTGFkZGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgNWEyIDIgMCAwIDAtMiAydjExIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMThjLjYuNSAxLjIgMSAyLjUgMSAyLjUgMCAyLjUtMiA1LTIgMi42IDAgMi40IDIgNSAyIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEzaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgOWgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDVhMiAyIDAgMCAwLTIgMnYxMSIgfV0KICAgIF07CiAgICB2YXIgV2F2ZXNBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMTVjLjYuNSAxLjIgMSAyLjUgMSAyLjUgMCAyLjUtMiA1LTIgMi42IDAgMi40IDIgNSAyIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDIxYy42LjUgMS4yIDEgMi41IDEgMi41IDAgMi41LTIgNS0yIDIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDQtNCA0IDQiIH1dCiAgICBdOwogICAgdmFyIFdhdmVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0yIDZjLjYuNSAxLjIgMSAyLjUgMUM3IDcgNyA1IDkuNSA1YzIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMTJjLjYuNSAxLjIgMSAyLjUgMSAyLjUgMCAyLjUtMiA1LTIgMi42IDAgMi40IDIgNSAyIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE4Yy42LjUgMS4yIDEgMi41IDEgMi41IDAgMi41LTIgNS0yIDIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFdheXBvaW50cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwLjU4NiA1LjQxNC01LjE3MiA1LjE3MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOC41ODYgMTMuNDE0LTUuMTcyIDUuMTcyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoMTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMjAiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI0IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjQiLCBjeTogIjEyIiwgcjogIjIiIH1dCiAgICBdOwogICAgdmFyIFdlYmNhbSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi00IiB9XQogICAgXTsKICAgIHZhciBXZWJob29rT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTdoLTVjLTEuMDktLjAyLTEuOTQuOTItMi41IDEuOUEzIDMgMCAxIDEgMi41NyAxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDMuNGE0IDQgMCAwIDEgNi41Mi42NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDE3IDMuMS01LjhhMi41IDIuNSAwIDAgMCAuMDU3LTIuMDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuMyAyMC4zYTQgNCAwIDAgMS0yLjMuNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC42IDEzYTQgNCAwIDAgMSAzLjM1NyAzLjQxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA2IC42IDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICAgIHZhciBXZWJob29rID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTYuOThoLTUuOTljLTEuMSAwLTEuOTUuOTQtMi40OCAxLjlBNCA0IDAgMCAxIDIgMTdjLjAxLS43LjItMS40LjU3LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxNyAzLjEzLTUuNzhjLjUzLS45Ny4xLTIuMTgtLjUtMy4xYTQgNCAwIDEgMSA2Ljg5LTQuMDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgNiAzLjEzIDUuNzNDMTUuNjYgMTIuNyAxNi45IDEzIDE4IDEzYTQgNCAwIDAgMSAwIDgiIH1dCiAgICBdOwogICAgdmFyIFdlaWdodFRpbGRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNi41IDhhMiAyIDAgMCAwLTEuOTA2IDEuNDZMMi4xIDE4LjVBMiAyIDAgMCAwIDQgMjFoMTZhMiAyIDAgMCAwIDEuOTI1LTIuNTRMMTkuNCA5LjVBMiAyIDAgMCAwIDE3LjQ4IDh6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuOTk5IDE1YTIuNSAyLjUgMCAwIDEgNCAwIDIuNSAyLjUgMCAwIDAgNCAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByOiAiMyIgfV0KICAgIF07CiAgICB2YXIgV2VpZ2h0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNSIsIHI6ICIzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYuNSA4YTIgMiAwIDAgMC0xLjkwNSAxLjQ2TDIuMSAxOC41QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjkyNS0yLjU0TDE5LjQgOS41QTIgMiAwIDAgMCAxNy40OCA4WiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgV2hlYXRPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIyIDEwLTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDgtMS4xNyAxLjE3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMy40NyAxMi41MyA1IDExbDEuNTMgMS41M2EzLjUgMy41IDAgMCAxIDAgNC45NEw1IDE5bC0xLjUzLTEuNTNhMy41IDMuNSAwIDAgMSAwLTQuOTRaIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDgtLjUzLjUzYTMuNSAzLjUgMCAwIDAgMCA0Ljk0TDkgMTVsMS41My0xLjUzYy41NS0uNTUuODgtMS4yNS45OC0xLjk3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjkxIDUuMjZjLjE1LS4yNi4zNC0uNTEuNTYtLjczTDEzIDNsMS41MyAxLjUzYTMuNSAzLjUgMCAwIDEgLjI4IDQuNjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMmgydjJhNCA0IDAgMCAxLTQgNGgtMlY2YTQgNCAwIDAgMSA0LTRaIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjQ3IDE3LjQ3IDEzIDE5bC0xLjUzIDEuNTNhMy41IDMuNSAwIDAgMS00Ljk0IDBMNSAxOWwxLjUzLTEuNTNhMy41IDMuNSAwIDAgMSA0Ljk0IDBaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE2LS41My41M2EzLjUgMy41IDAgMCAxLTQuOTQgMEw5IDE1bDEuNTMtMS41M2EzLjQ5IDMuNDkgMCAwIDEgMS45Ny0uOTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguNzQgMTMuMDljLjI2LS4xNS41MS0uMzQuNzMtLjU2TDIxIDExbC0xLjUzLTEuNTNhMy41IDMuNSAwIDAgMC00LjYyLS4yOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIFdob2xlV29yZCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiMTIiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5djYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTIiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA3djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTd2MWMwIC41LS41IDEtMSAxSDNjLS41IDAtMS0uNS0xLTF2LTEiIH1dCiAgICBdOwogICAgdmFyIFdoZWF0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMiAxNiA4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMy40NyAxMi41MyA1IDExbDEuNTMgMS41M2EzLjUgMy41IDAgMCAxIDAgNC45NEw1IDE5bC0xLjUzLTEuNTNhMy41IDMuNSAwIDAgMSAwLTQuOTRaIiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTcuNDcgOC41MyA5IDdsMS41MyAxLjUzYTMuNSAzLjUgMCAwIDEgMCA0Ljk0TDkgMTVsLTEuNTMtMS41M2EzLjUgMy41IDAgMCAxIDAtNC45NFoiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTEuNDcgNC41MyAxMyAzbDEuNTMgMS41M2EzLjUgMy41IDAgMCAxIDAgNC45NEwxMyAxMWwtMS41My0xLjUzYTMuNSAzLjUgMCAwIDEgMC00Ljk0WiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMmgydjJhNCA0IDAgMCAxLTQgNGgtMlY2YTQgNCAwIDAgMSA0LTRaIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjQ3IDE3LjQ3IDEzIDE5bC0xLjUzIDEuNTNhMy41IDMuNSAwIDAgMS00Ljk0IDBMNSAxOWwxLjUzLTEuNTNhMy41IDMuNSAwIDAgMSA0Ljk0IDBaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjQ3IDEzLjQ3IDE3IDE1bC0xLjUzIDEuNTNhMy41IDMuNSAwIDAgMS00Ljk0IDBMOSAxNWwxLjUzLTEuNTNhMy41IDMuNSAwIDAgMSA0Ljk0IDBaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5LjQ3IDkuNDcgMjEgMTFsLTEuNTMgMS41M2EzLjUgMy41IDAgMCAxLTQuOTQgMEwxMyAxMWwxLjUzLTEuNTNhMy41IDMuNSAwIDAgMSA0Ljk0IDBaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICAgIHZhciBXaWZpQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuMzA1IDE5LjUzLjkyMy0uMzgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjIyOCAxNi44NTItLjkyMy0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAxNS4yMjgtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAyMC43NzItLjM4My45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMTQ4IDE1LjIyOC4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS41MyAyMS42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNy44MmExNSAxNSAwIDAgMSAyMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiAxNi44NTIuOTI0LS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDE5LjE0OC45MjQuMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTEuODU4YTEwIDEwIDAgMCAxIDExLjUtMS43ODUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDE1LjQyOWE1IDUgMCAwIDEgMi40MTMtMS4zMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICAgIHZhciBXaWZpSGlnaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEyLjg1OWExMCAxMCAwIDAgMSAxNCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAxNi40MjlhNSA1IDAgMCAxIDcgMCIgfV0KICAgIF07CiAgICB2YXIgV2lmaUxvdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjUgMTYuNDI5YTUgNSAwIDAgMSA3IDAiIH1dCiAgICBdOwogICAgdmFyIFdpZmlPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDE2LjQyOWE1IDUgMCAwIDEgNyAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuODU5YTEwIDEwIDAgMCAxIDUuMTctMi42OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxMi44NTlhMTAgMTAgMCAwIDAtMi4wMDctMS41MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4LjgyYTE1IDE1IDAgMCAxIDQuMTc3LTIuNjQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDguODJhMTUgMTUgMCAwIDAtMTEuMjg4LTMuNzY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgICB2YXIgV2lmaVN5bmMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS45NjUgMTAuMTA1djRMMTMuNSAxMi41YTUgNSAwIDAgMSA4IDEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS45NjUgMTQuMTA1aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOTY1IDE4LjEwNWg0TDIwLjQzIDE5LjcxYTUgNSAwIDAgMS04LTEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDguODJhMTUgMTUgMCAwIDEgMjAgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS45NjUgMjIuMTA1di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuODZhMTAgMTAgMCAwIDEgMy0yLjAzMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjUgMTYuNDI5aC4wMSIgfV0KICAgIF07CiAgICB2YXIgV2lmaVplcm8gPSBbWyJwYXRoIiwgeyBkOiAiTTEyIDIwaC4wMSIgfV1dOwogICAgdmFyIFdpZmlQZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDguODJhMTUgMTUgMCAwIDEgMjAgMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggMTYuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxMi44NTlhMTAgMTAgMCAwIDEgMTAuNS0yLjIyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjUgMTYuNDI5YTUgNSAwIDAgMSAzLTEuNDA2IiB9XQogICAgXTsKICAgIHZhciBXaWZpID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOC44MmExNSAxNSAwIDAgMSAyMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuODU5YTEwIDEwIDAgMCAxIDE0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDE2LjQyOWE1IDUgMCAwIDEgNyAwIiB9XQogICAgXTsKICAgIHZhciBXaW5kQXJyb3dEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjggMjEuNkEyIDIgMCAxIDAgMTQgMThIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41IDEwYTIuNSAyLjUgMCAxIDEgMiA0SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiA2IDQgNCA0LTQiIH1dCiAgICBdOwogICAgdmFyIFdpbmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi44IDE5LjZBMiAyIDAgMSAwIDE0IDE2SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNSA4YTIuNSAyLjUgMCAxIDEgMiA0SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS44IDQuNEEyIDIgMCAxIDEgMTEgOEgyIiB9XQogICAgXTsKICAgIHZhciBXaW5lT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBoM203IDBoLTEuMzQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1djciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy4zMDcgNy4zMDdBMTIuMzMgMTIuMzMgMCAwIDAgNyAxMGE1IDUgMCAwIDAgNy4zOTEgNC4zOTFNOC42MzggMi45ODFDOC43NSAyLjY2OCA4Ljg3MiAyLjM0IDkgMmg2YzEuNSA0IDIgNiAyIDggMCAuNDA3LS4wNS44MDktLjE0NSAxLjE5OCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogICAgdmFyIFdpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMGgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNXY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1YTUgNSAwIDAgMCA1LTVjMC0yLS41LTQtMi04SDljLTEuNSA0LTIgNi0yIDhhNSA1IDAgMCAwIDUgNVoiIH1dCiAgICBdOwogICAgdmFyIFdvcm0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAxMi0xLjUgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS42MyAxOC44MSAyMiAyMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02LjQ3IDguMjNhMS42OCAxLjY4IDAgMCAxIDIuNDQgMS45M2wtLjY0IDIuMDhhNi43NiA2Ljc2IDAgMCAwIDEwLjE2IDcuNjdsLjQyLS4yN2ExIDEgMCAxIDAtMi43My00LjIxbC0uNDIuMjdhMS43NiAxLjc2IDAgMCAxLTIuNjMtMS45OWwuNjQtMi4wOEE2LjY2IDYuNjYgMCAwIDAgMy45NCAzLjlsLS43LjRhMSAxIDAgMSAwIDIuNTUgNC4zNHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogICAgdmFyIFdvcmtmbG93ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTF2NGEyIDIgMCAwIDAgMiAyaDQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjgiLCB4OiAiMTMiLCB5OiAiMTMiLCByeDogIjIiIH1dCiAgICBdOwogICAgdmFyIFdyZW5jaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0LjcgNi4zYTEgMSAwIDAgMCAwIDEuNGwxLjYgMS42YTEgMSAwIDAgMCAxLjQgMGwzLjEwNi0zLjEwNWMuMzItLjMyMi44NjMtLjIyLjk4My4yMThhNiA2IDAgMCAxLTguMjU5IDcuMDU3bC03LjkxIDcuOTFhMSAxIDAgMCAxLTIuOTk5LTNsNy45MS03LjkxYTYgNiAwIDAgMSA3LjA1Ny04LjI1OWMuNDM4LjEyLjU0LjY2Mi4yMTkuOTg0eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgWCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDYgNiAxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDYgMTIgMTIiIH1dCiAgICBdOwogICAgdmFyIFlvdXR1YmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjUgMTdhMjQuMTIgMjQuMTIgMCAwIDEgMC0xMCAyIDIgMCAwIDEgMS40LTEuNCA0OS41NiA0OS41NiAwIDAgMSAxNi4yIDBBMiAyIDAgMCAxIDIxLjUgN2EyNC4xMiAyNC4xMiAwIDAgMSAwIDEwIDIgMiAwIDAgMS0xLjQgMS40IDQ5LjU1IDQ5LjU1IDAgMCAxLTE2LjIgMEEyIDIgMCAwIDEgMi41IDE3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE1IDUtMy01LTN6IiB9XQogICAgXTsKICAgIHZhciBaYXBPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC41MTMgNC44NTYgMTMuMTIgMi4xN2EuNS41IDAgMCAxIC44Ni40NmwtMS4zNzcgNC4zMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUuNjU2IDEwSDIwYTEgMSAwIDAgMSAuNzggMS42M2wtMS43MiAxLjc3MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNi4yNzMgMTYuMjczIDEwLjg4IDIxLjgzYS41LjUgMCAwIDEtLjg2LS40NmwxLjkyLTYuMDJBMSAxIDAgMCAwIDExIDE0SDRhMSAxIDAgMCAxLS43OC0xLjYzbDQuNTA3LTQuNjQzIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgICB2YXIgWmFwID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAxNGExIDEgMCAwIDEtLjc4LTEuNjNsOS45LTEwLjJhLjUuNSAwIDAgMSAuODYuNDZsLTEuOTIgNi4wMkExIDEgMCAwIDAgMTMgMTBoN2ExIDEgMCAwIDEgLjc4IDEuNjNsLTkuOSAxMC4yYS41LjUgMCAwIDEtLjg2LS40NmwxLjkyLTYuMDJBMSAxIDAgMCAwIDExIDE0eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgICB2YXIgWm9vbUluID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMSIsIHgyOiAiMTYuNjUiLCB5MTogIjIxIiwgeTI6ICIxNi42NSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMSIsIHgyOiAiMTEiLCB5MTogIjgiLCB5MjogIjE0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE0IiwgeTE6ICIxMSIsIHkyOiAiMTEiIH1dCiAgICBdOwogICAgdmFyIFpvb21PdXQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjExIiwgY3k6ICIxMSIsIHI6ICI4IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIxIiwgeDI6ICIxNi42NSIsIHkxOiAiMjEiLCB5MjogIjE2LjY1IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE0IiwgeTE6ICIxMSIsIHkyOiAiMTEiIH1dCiAgICBdOwogICAgdmFyIGljb25zQW5kQWxpYXNlcyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuZnJlZXplKHsKICAgICAgX19wcm90b19fOiBudWxsLAogICAgICBBQXJyb3dEb3duLAogICAgICBBQXJyb3dVcCwKICAgICAgQUxhcmdlU21hbGwsCiAgICAgIEFjY2Vzc2liaWxpdHksCiAgICAgIEFjdGl2aXR5LAogICAgICBBY3Rpdml0eVNxdWFyZTogU3F1YXJlQWN0aXZpdHksCiAgICAgIEFpclZlbnQsCiAgICAgIEFpcnBsYXksCiAgICAgIEFsYXJtQ2hlY2s6IEFsYXJtQ2xvY2tDaGVjaywKICAgICAgQWxhcm1DbG9jaywKICAgICAgQWxhcm1DbG9ja0NoZWNrLAogICAgICBBbGFybUNsb2NrTWludXMsCiAgICAgIEFsYXJtQ2xvY2tPZmYsCiAgICAgIEFsYXJtQ2xvY2tQbHVzLAogICAgICBBbGFybU1pbnVzOiBBbGFybUNsb2NrTWludXMsCiAgICAgIEFsYXJtUGx1czogQWxhcm1DbG9ja1BsdXMsCiAgICAgIEFsYXJtU21va2UsCiAgICAgIEFsYnVtLAogICAgICBBbGVydENpcmNsZTogQ2lyY2xlQWxlcnQsCiAgICAgIEFsZXJ0T2N0YWdvbjogT2N0YWdvbkFsZXJ0LAogICAgICBBbGVydFRyaWFuZ2xlOiBUcmlhbmdsZUFsZXJ0LAogICAgICBBbGlnbkNlbnRlcjogVGV4dEFsaWduQ2VudGVyLAogICAgICBBbGlnbkNlbnRlckhvcml6b250YWwsCiAgICAgIEFsaWduQ2VudGVyVmVydGljYWwsCiAgICAgIEFsaWduRW5kSG9yaXpvbnRhbCwKICAgICAgQWxpZ25FbmRWZXJ0aWNhbCwKICAgICAgQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZUNlbnRlciwKICAgICAgQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZUVuZCwKICAgICAgQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZVN0YXJ0LAogICAgICBBbGlnbkhvcml6b250YWxKdXN0aWZ5Q2VudGVyLAogICAgICBBbGlnbkhvcml6b250YWxKdXN0aWZ5RW5kLAogICAgICBBbGlnbkhvcml6b250YWxKdXN0aWZ5U3RhcnQsCiAgICAgIEFsaWduSG9yaXpvbnRhbFNwYWNlQXJvdW5kLAogICAgICBBbGlnbkhvcml6b250YWxTcGFjZUJldHdlZW4sCiAgICAgIEFsaWduSnVzdGlmeTogVGV4dEFsaWduSnVzdGlmeSwKICAgICAgQWxpZ25MZWZ0OiBUZXh0QWxpZ25TdGFydCwKICAgICAgQWxpZ25SaWdodDogVGV4dEFsaWduRW5kLAogICAgICBBbGlnblN0YXJ0SG9yaXpvbnRhbCwKICAgICAgQWxpZ25TdGFydFZlcnRpY2FsLAogICAgICBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUNlbnRlciwKICAgICAgQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVFbmQsCiAgICAgIEFsaWduVmVydGljYWxEaXN0cmlidXRlU3RhcnQsCiAgICAgIEFsaWduVmVydGljYWxKdXN0aWZ5Q2VudGVyLAogICAgICBBbGlnblZlcnRpY2FsSnVzdGlmeUVuZCwKICAgICAgQWxpZ25WZXJ0aWNhbEp1c3RpZnlTdGFydCwKICAgICAgQWxpZ25WZXJ0aWNhbFNwYWNlQXJvdW5kLAogICAgICBBbGlnblZlcnRpY2FsU3BhY2VCZXR3ZWVuLAogICAgICBBbWJ1bGFuY2UsCiAgICAgIEFtcGVyc2FuZCwKICAgICAgQW1wZXJzYW5kcywKICAgICAgQW1waG9yYSwKICAgICAgQW5jaG9yLAogICAgICBBbmdyeSwKICAgICAgQW5ub3llZCwKICAgICAgQW50ZW5uYSwKICAgICAgQW52aWwsCiAgICAgIEFwZXJ0dXJlLAogICAgICBBcHBXaW5kb3csCiAgICAgIEFwcFdpbmRvd01hYywKICAgICAgQXBwbGUsCiAgICAgIEFyY2hpdmUsCiAgICAgIEFyY2hpdmVSZXN0b3JlLAogICAgICBBcmNoaXZlWCwKICAgICAgQXJlYUNoYXJ0OiBDaGFydEFyZWEsCiAgICAgIEFybWNoYWlyLAogICAgICBBcnJvd0JpZ0Rvd24sCiAgICAgIEFycm93QmlnRG93bkRhc2gsCiAgICAgIEFycm93QmlnTGVmdCwKICAgICAgQXJyb3dCaWdMZWZ0RGFzaCwKICAgICAgQXJyb3dCaWdSaWdodCwKICAgICAgQXJyb3dCaWdSaWdodERhc2gsCiAgICAgIEFycm93QmlnVXAsCiAgICAgIEFycm93QmlnVXBEYXNoLAogICAgICBBcnJvd0Rvd24sCiAgICAgIEFycm93RG93bjAxLAogICAgICBBcnJvd0Rvd24xMCwKICAgICAgQXJyb3dEb3duQVosCiAgICAgIEFycm93RG93bkF6OiBBcnJvd0Rvd25BWiwKICAgICAgQXJyb3dEb3duQ2lyY2xlOiBDaXJjbGVBcnJvd0Rvd24sCiAgICAgIEFycm93RG93bkZyb21MaW5lLAogICAgICBBcnJvd0Rvd25MZWZ0LAogICAgICBBcnJvd0Rvd25MZWZ0RnJvbUNpcmNsZTogQ2lyY2xlQXJyb3dPdXREb3duTGVmdCwKICAgICAgQXJyb3dEb3duTGVmdEZyb21TcXVhcmU6IFNxdWFyZUFycm93T3V0RG93bkxlZnQsCiAgICAgIEFycm93RG93bkxlZnRTcXVhcmU6IFNxdWFyZUFycm93RG93bkxlZnQsCiAgICAgIEFycm93RG93bk5hcnJvd1dpZGUsCiAgICAgIEFycm93RG93blJpZ2h0LAogICAgICBBcnJvd0Rvd25SaWdodEZyb21DaXJjbGU6IENpcmNsZUFycm93T3V0RG93blJpZ2h0LAogICAgICBBcnJvd0Rvd25SaWdodEZyb21TcXVhcmU6IFNxdWFyZUFycm93T3V0RG93blJpZ2h0LAogICAgICBBcnJvd0Rvd25SaWdodFNxdWFyZTogU3F1YXJlQXJyb3dEb3duUmlnaHQsCiAgICAgIEFycm93RG93blNxdWFyZTogU3F1YXJlQXJyb3dEb3duLAogICAgICBBcnJvd0Rvd25Ub0RvdCwKICAgICAgQXJyb3dEb3duVG9MaW5lLAogICAgICBBcnJvd0Rvd25VcCwKICAgICAgQXJyb3dEb3duV2lkZU5hcnJvdywKICAgICAgQXJyb3dEb3duWkEsCiAgICAgIEFycm93RG93blphOiBBcnJvd0Rvd25aQSwKICAgICAgQXJyb3dMZWZ0LAogICAgICBBcnJvd0xlZnRDaXJjbGU6IENpcmNsZUFycm93TGVmdCwKICAgICAgQXJyb3dMZWZ0RnJvbUxpbmUsCiAgICAgIEFycm93TGVmdFJpZ2h0LAogICAgICBBcnJvd0xlZnRTcXVhcmU6IFNxdWFyZUFycm93TGVmdCwKICAgICAgQXJyb3dMZWZ0VG9MaW5lLAogICAgICBBcnJvd1JpZ2h0LAogICAgICBBcnJvd1JpZ2h0Q2lyY2xlOiBDaXJjbGVBcnJvd1JpZ2h0LAogICAgICBBcnJvd1JpZ2h0RnJvbUxpbmUsCiAgICAgIEFycm93UmlnaHRMZWZ0LAogICAgICBBcnJvd1JpZ2h0U3F1YXJlOiBTcXVhcmVBcnJvd1JpZ2h0LAogICAgICBBcnJvd1JpZ2h0VG9MaW5lLAogICAgICBBcnJvd1VwLAogICAgICBBcnJvd1VwMDEsCiAgICAgIEFycm93VXAxMCwKICAgICAgQXJyb3dVcEFaLAogICAgICBBcnJvd1VwQXo6IEFycm93VXBBWiwKICAgICAgQXJyb3dVcENpcmNsZTogQ2lyY2xlQXJyb3dVcCwKICAgICAgQXJyb3dVcERvd24sCiAgICAgIEFycm93VXBGcm9tRG90LAogICAgICBBcnJvd1VwRnJvbUxpbmUsCiAgICAgIEFycm93VXBMZWZ0LAogICAgICBBcnJvd1VwTGVmdEZyb21DaXJjbGU6IENpcmNsZUFycm93T3V0VXBMZWZ0LAogICAgICBBcnJvd1VwTGVmdEZyb21TcXVhcmU6IFNxdWFyZUFycm93T3V0VXBMZWZ0LAogICAgICBBcnJvd1VwTGVmdFNxdWFyZTogU3F1YXJlQXJyb3dVcExlZnQsCiAgICAgIEFycm93VXBOYXJyb3dXaWRlLAogICAgICBBcnJvd1VwUmlnaHQsCiAgICAgIEFycm93VXBSaWdodEZyb21DaXJjbGU6IENpcmNsZUFycm93T3V0VXBSaWdodCwKICAgICAgQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZTogU3F1YXJlQXJyb3dPdXRVcFJpZ2h0LAogICAgICBBcnJvd1VwUmlnaHRTcXVhcmU6IFNxdWFyZUFycm93VXBSaWdodCwKICAgICAgQXJyb3dVcFNxdWFyZTogU3F1YXJlQXJyb3dVcCwKICAgICAgQXJyb3dVcFRvTGluZSwKICAgICAgQXJyb3dVcFdpZGVOYXJyb3csCiAgICAgIEFycm93VXBaQSwKICAgICAgQXJyb3dVcFphOiBBcnJvd1VwWkEsCiAgICAgIEFycm93c1VwRnJvbUxpbmUsCiAgICAgIEFzdGVyaXNrLAogICAgICBBc3Rlcmlza1NxdWFyZTogU3F1YXJlQXN0ZXJpc2ssCiAgICAgIEF0U2lnbiwKICAgICAgQXRvbSwKICAgICAgQXVkaW9MaW5lcywKICAgICAgQXVkaW9XYXZlZm9ybSwKICAgICAgQXdhcmQsCiAgICAgIEF4ZSwKICAgICAgQXhpczNEOiBBeGlzM2QsCiAgICAgIEF4aXMzZCwKICAgICAgQmFieSwKICAgICAgQmFja3BhY2ssCiAgICAgIEJhZGdlLAogICAgICBCYWRnZUFsZXJ0LAogICAgICBCYWRnZUNlbnQsCiAgICAgIEJhZGdlQ2hlY2ssCiAgICAgIEJhZGdlRG9sbGFyU2lnbiwKICAgICAgQmFkZ2VFdXJvLAogICAgICBCYWRnZUhlbHA6IEJhZGdlUXVlc3Rpb25NYXJrLAogICAgICBCYWRnZUluZGlhblJ1cGVlLAogICAgICBCYWRnZUluZm8sCiAgICAgIEJhZGdlSmFwYW5lc2VZZW4sCiAgICAgIEJhZGdlTWludXMsCiAgICAgIEJhZGdlUGVyY2VudCwKICAgICAgQmFkZ2VQbHVzLAogICAgICBCYWRnZVBvdW5kU3RlcmxpbmcsCiAgICAgIEJhZGdlUXVlc3Rpb25NYXJrLAogICAgICBCYWRnZVJ1c3NpYW5SdWJsZSwKICAgICAgQmFkZ2VTd2lzc0ZyYW5jLAogICAgICBCYWRnZVR1cmtpc2hMaXJhLAogICAgICBCYWRnZVgsCiAgICAgIEJhZ2dhZ2VDbGFpbSwKICAgICAgQmFsbG9vbiwKICAgICAgQmFuLAogICAgICBCYW5hbmEsCiAgICAgIEJhbmRhZ2UsCiAgICAgIEJhbmtub3RlLAogICAgICBCYW5rbm90ZUFycm93RG93biwKICAgICAgQmFua25vdGVBcnJvd1VwLAogICAgICBCYW5rbm90ZVgsCiAgICAgIEJhckNoYXJ0OiBDaGFydE5vQXhlc0NvbHVtbkluY3JlYXNpbmcsCiAgICAgIEJhckNoYXJ0MjogQ2hhcnROb0F4ZXNDb2x1bW4sCiAgICAgIEJhckNoYXJ0MzogQ2hhcnRDb2x1bW4sCiAgICAgIEJhckNoYXJ0NDogQ2hhcnRDb2x1bW5JbmNyZWFzaW5nLAogICAgICBCYXJDaGFydEJpZzogQ2hhcnRDb2x1bW5CaWcsCiAgICAgIEJhckNoYXJ0SG9yaXpvbnRhbDogQ2hhcnRCYXIsCiAgICAgIEJhckNoYXJ0SG9yaXpvbnRhbEJpZzogQ2hhcnRCYXJCaWcsCiAgICAgIEJhcmNvZGUsCiAgICAgIEJhcnJlbCwKICAgICAgQmFzZWxpbmUsCiAgICAgIEJhdGgsCiAgICAgIEJhdHRlcnksCiAgICAgIEJhdHRlcnlDaGFyZ2luZywKICAgICAgQmF0dGVyeUZ1bGwsCiAgICAgIEJhdHRlcnlMb3csCiAgICAgIEJhdHRlcnlNZWRpdW0sCiAgICAgIEJhdHRlcnlQbHVzLAogICAgICBCYXR0ZXJ5V2FybmluZywKICAgICAgQmVha2VyLAogICAgICBCZWFuLAogICAgICBCZWFuT2ZmLAogICAgICBCZWQsCiAgICAgIEJlZERvdWJsZSwKICAgICAgQmVkU2luZ2xlLAogICAgICBCZWVmLAogICAgICBCZWVyLAogICAgICBCZWVyT2ZmLAogICAgICBCZWxsLAogICAgICBCZWxsRG90LAogICAgICBCZWxsRWxlY3RyaWMsCiAgICAgIEJlbGxNaW51cywKICAgICAgQmVsbE9mZiwKICAgICAgQmVsbFBsdXMsCiAgICAgIEJlbGxSaW5nLAogICAgICBCZXR3ZWVuSG9yaXpvbmFsRW5kOiBCZXR3ZWVuSG9yaXpvbnRhbEVuZCwKICAgICAgQmV0d2Vlbkhvcml6b25hbFN0YXJ0OiBCZXR3ZWVuSG9yaXpvbnRhbFN0YXJ0LAogICAgICBCZXR3ZWVuSG9yaXpvbnRhbEVuZCwKICAgICAgQmV0d2Vlbkhvcml6b250YWxTdGFydCwKICAgICAgQmV0d2VlblZlcnRpY2FsRW5kLAogICAgICBCZXR3ZWVuVmVydGljYWxTdGFydCwKICAgICAgQmljZXBzRmxleGVkLAogICAgICBCaWtlLAogICAgICBCaW5hcnksCiAgICAgIEJpbm9jdWxhcnMsCiAgICAgIEJpb2hhemFyZCwKICAgICAgQmlyZCwKICAgICAgQmlyZGhvdXNlLAogICAgICBCaXRjb2luLAogICAgICBCbGVuZCwKICAgICAgQmxpbmRzLAogICAgICBCbG9ja3MsCiAgICAgIEJsdWV0b290aCwKICAgICAgQmx1ZXRvb3RoQ29ubmVjdGVkLAogICAgICBCbHVldG9vdGhPZmYsCiAgICAgIEJsdWV0b290aFNlYXJjaGluZywKICAgICAgQm9sZCwKICAgICAgQm9sdCwKICAgICAgQm9tYiwKICAgICAgQm9uZSwKICAgICAgQm9vaywKICAgICAgQm9va0EsCiAgICAgIEJvb2tBbGVydCwKICAgICAgQm9va0F1ZGlvLAogICAgICBCb29rQ2hlY2ssCiAgICAgIEJvb2tDb3B5LAogICAgICBCb29rRGFzaGVkLAogICAgICBCb29rRG93biwKICAgICAgQm9va0hlYWRwaG9uZXMsCiAgICAgIEJvb2tIZWFydCwKICAgICAgQm9va0ltYWdlLAogICAgICBCb29rS2V5LAogICAgICBCb29rTG9jaywKICAgICAgQm9va01hcmtlZCwKICAgICAgQm9va01pbnVzLAogICAgICBCb29rT3BlbiwKICAgICAgQm9va09wZW5DaGVjaywKICAgICAgQm9va09wZW5UZXh0LAogICAgICBCb29rUGx1cywKICAgICAgQm9va1NlYXJjaCwKICAgICAgQm9va1RlbXBsYXRlOiBCb29rRGFzaGVkLAogICAgICBCb29rVGV4dCwKICAgICAgQm9va1R5cGUsCiAgICAgIEJvb2tVcCwKICAgICAgQm9va1VwMiwKICAgICAgQm9va1VzZXIsCiAgICAgIEJvb2tYLAogICAgICBCb29rbWFyaywKICAgICAgQm9va21hcmtDaGVjaywKICAgICAgQm9va21hcmtNaW51cywKICAgICAgQm9va21hcmtQbHVzLAogICAgICBCb29rbWFya1gsCiAgICAgIEJvb21Cb3gsCiAgICAgIEJvdCwKICAgICAgQm90TWVzc2FnZVNxdWFyZSwKICAgICAgQm90T2ZmLAogICAgICBCb3R0bGVXaW5lLAogICAgICBCb3dBcnJvdywKICAgICAgQm94LAogICAgICBCb3hTZWxlY3Q6IFNxdWFyZURhc2hlZCwKICAgICAgQm94ZXMsCiAgICAgIEJyYWNlcywKICAgICAgQnJhY2tldHMsCiAgICAgIEJyYWluLAogICAgICBCcmFpbkNpcmN1aXQsCiAgICAgIEJyYWluQ29nLAogICAgICBCcmlja1dhbGwsCiAgICAgIEJyaWNrV2FsbEZpcmUsCiAgICAgIEJyaWNrV2FsbFNoaWVsZCwKICAgICAgQnJpZWZjYXNlLAogICAgICBCcmllZmNhc2VCdXNpbmVzcywKICAgICAgQnJpZWZjYXNlQ29udmV5b3JCZWx0LAogICAgICBCcmllZmNhc2VNZWRpY2FsLAogICAgICBCcmluZ1RvRnJvbnQsCiAgICAgIEJydXNoLAogICAgICBCcnVzaENsZWFuaW5nLAogICAgICBCdWJibGVzLAogICAgICBCdWcsCiAgICAgIEJ1Z09mZiwKICAgICAgQnVnUGxheSwKICAgICAgQnVpbGRpbmcsCiAgICAgIEJ1aWxkaW5nMiwKICAgICAgQnVzLAogICAgICBCdXNGcm9udCwKICAgICAgQ2FibGUsCiAgICAgIENhYmxlQ2FyLAogICAgICBDYWtlLAogICAgICBDYWtlU2xpY2UsCiAgICAgIENhbGN1bGF0b3IsCiAgICAgIENhbGVuZGFyLAogICAgICBDYWxlbmRhcjEsCiAgICAgIENhbGVuZGFyQXJyb3dEb3duLAogICAgICBDYWxlbmRhckFycm93VXAsCiAgICAgIENhbGVuZGFyQ2hlY2ssCiAgICAgIENhbGVuZGFyQ2hlY2syLAogICAgICBDYWxlbmRhckNsb2NrLAogICAgICBDYWxlbmRhckNvZywKICAgICAgQ2FsZW5kYXJEYXlzLAogICAgICBDYWxlbmRhckZvbGQsCiAgICAgIENhbGVuZGFySGVhcnQsCiAgICAgIENhbGVuZGFyTWludXMsCiAgICAgIENhbGVuZGFyTWludXMyLAogICAgICBDYWxlbmRhck9mZiwKICAgICAgQ2FsZW5kYXJQbHVzLAogICAgICBDYWxlbmRhclBsdXMyLAogICAgICBDYWxlbmRhclJhbmdlLAogICAgICBDYWxlbmRhclNlYXJjaCwKICAgICAgQ2FsZW5kYXJTeW5jLAogICAgICBDYWxlbmRhclgsCiAgICAgIENhbGVuZGFyWDIsCiAgICAgIENhbGVuZGFycywKICAgICAgQ2FtZXJhLAogICAgICBDYW1lcmFPZmYsCiAgICAgIENhbmRsZXN0aWNrQ2hhcnQ6IENoYXJ0Q2FuZGxlc3RpY2ssCiAgICAgIENhbmR5LAogICAgICBDYW5keUNhbmUsCiAgICAgIENhbmR5T2ZmLAogICAgICBDYW5uYWJpcywKICAgICAgQ2FubmFiaXNPZmYsCiAgICAgIENhcHRpb25zLAogICAgICBDYXB0aW9uc09mZiwKICAgICAgQ2FyLAogICAgICBDYXJGcm9udCwKICAgICAgQ2FyVGF4aUZyb250LAogICAgICBDYXJhdmFuLAogICAgICBDYXJkU2ltLAogICAgICBDYXJyb3QsCiAgICAgIENhc2VMb3dlciwKICAgICAgQ2FzZVNlbnNpdGl2ZSwKICAgICAgQ2FzZVVwcGVyLAogICAgICBDYXNzZXR0ZVRhcGUsCiAgICAgIENhc3QsCiAgICAgIENhc3RsZSwKICAgICAgQ2F0LAogICAgICBDY3R2LAogICAgICBDaGFydEFyZWEsCiAgICAgIENoYXJ0QmFyLAogICAgICBDaGFydEJhckJpZywKICAgICAgQ2hhcnRCYXJEZWNyZWFzaW5nLAogICAgICBDaGFydEJhckluY3JlYXNpbmcsCiAgICAgIENoYXJ0QmFyU3RhY2tlZCwKICAgICAgQ2hhcnRDYW5kbGVzdGljaywKICAgICAgQ2hhcnRDb2x1bW4sCiAgICAgIENoYXJ0Q29sdW1uQmlnLAogICAgICBDaGFydENvbHVtbkRlY3JlYXNpbmcsCiAgICAgIENoYXJ0Q29sdW1uSW5jcmVhc2luZywKICAgICAgQ2hhcnRDb2x1bW5TdGFja2VkLAogICAgICBDaGFydEdhbnR0LAogICAgICBDaGFydExpbmUsCiAgICAgIENoYXJ0TmV0d29yaywKICAgICAgQ2hhcnROb0F4ZXNDb2x1bW4sCiAgICAgIENoYXJ0Tm9BeGVzQ29sdW1uRGVjcmVhc2luZywKICAgICAgQ2hhcnROb0F4ZXNDb2x1bW5JbmNyZWFzaW5nLAogICAgICBDaGFydE5vQXhlc0NvbWJpbmVkLAogICAgICBDaGFydE5vQXhlc0dhbnR0LAogICAgICBDaGFydFBpZSwKICAgICAgQ2hhcnRTY2F0dGVyLAogICAgICBDaGFydFNwbGluZSwKICAgICAgQ2hlY2ssCiAgICAgIENoZWNrQ2hlY2ssCiAgICAgIENoZWNrQ2lyY2xlOiBDaXJjbGVDaGVja0JpZywKICAgICAgQ2hlY2tDaXJjbGUyOiBDaXJjbGVDaGVjaywKICAgICAgQ2hlY2tMaW5lLAogICAgICBDaGVja1NxdWFyZTogU3F1YXJlQ2hlY2tCaWcsCiAgICAgIENoZWNrU3F1YXJlMjogU3F1YXJlQ2hlY2ssCiAgICAgIENoZWZIYXQsCiAgICAgIENoZXJyeSwKICAgICAgQ2hlc3NCaXNob3AsCiAgICAgIENoZXNzS2luZywKICAgICAgQ2hlc3NLbmlnaHQsCiAgICAgIENoZXNzUGF3biwKICAgICAgQ2hlc3NRdWVlbiwKICAgICAgQ2hlc3NSb29rLAogICAgICBDaGV2cm9uRG93biwKICAgICAgQ2hldnJvbkRvd25DaXJjbGU6IENpcmNsZUNoZXZyb25Eb3duLAogICAgICBDaGV2cm9uRG93blNxdWFyZTogU3F1YXJlQ2hldnJvbkRvd24sCiAgICAgIENoZXZyb25GaXJzdCwKICAgICAgQ2hldnJvbkxhc3QsCiAgICAgIENoZXZyb25MZWZ0LAogICAgICBDaGV2cm9uTGVmdENpcmNsZTogQ2lyY2xlQ2hldnJvbkxlZnQsCiAgICAgIENoZXZyb25MZWZ0U3F1YXJlOiBTcXVhcmVDaGV2cm9uTGVmdCwKICAgICAgQ2hldnJvblJpZ2h0LAogICAgICBDaGV2cm9uUmlnaHRDaXJjbGU6IENpcmNsZUNoZXZyb25SaWdodCwKICAgICAgQ2hldnJvblJpZ2h0U3F1YXJlOiBTcXVhcmVDaGV2cm9uUmlnaHQsCiAgICAgIENoZXZyb25VcCwKICAgICAgQ2hldnJvblVwQ2lyY2xlOiBDaXJjbGVDaGV2cm9uVXAsCiAgICAgIENoZXZyb25VcFNxdWFyZTogU3F1YXJlQ2hldnJvblVwLAogICAgICBDaGV2cm9uc0Rvd24sCiAgICAgIENoZXZyb25zRG93blVwLAogICAgICBDaGV2cm9uc0xlZnQsCiAgICAgIENoZXZyb25zTGVmdFJpZ2h0LAogICAgICBDaGV2cm9uc0xlZnRSaWdodEVsbGlwc2lzLAogICAgICBDaGV2cm9uc1JpZ2h0LAogICAgICBDaGV2cm9uc1JpZ2h0TGVmdCwKICAgICAgQ2hldnJvbnNVcCwKICAgICAgQ2hldnJvbnNVcERvd24sCiAgICAgIENocm9tZTogQ2hyb21pdW0sCiAgICAgIENocm9taXVtLAogICAgICBDaHVyY2gsCiAgICAgIENpZ2FyZXR0ZSwKICAgICAgQ2lnYXJldHRlT2ZmLAogICAgICBDaXJjbGUsCiAgICAgIENpcmNsZUFsZXJ0LAogICAgICBDaXJjbGVBcnJvd0Rvd24sCiAgICAgIENpcmNsZUFycm93TGVmdCwKICAgICAgQ2lyY2xlQXJyb3dPdXREb3duTGVmdCwKICAgICAgQ2lyY2xlQXJyb3dPdXREb3duUmlnaHQsCiAgICAgIENpcmNsZUFycm93T3V0VXBMZWZ0LAogICAgICBDaXJjbGVBcnJvd091dFVwUmlnaHQsCiAgICAgIENpcmNsZUFycm93UmlnaHQsCiAgICAgIENpcmNsZUFycm93VXAsCiAgICAgIENpcmNsZUNoZWNrLAogICAgICBDaXJjbGVDaGVja0JpZywKICAgICAgQ2lyY2xlQ2hldnJvbkRvd24sCiAgICAgIENpcmNsZUNoZXZyb25MZWZ0LAogICAgICBDaXJjbGVDaGV2cm9uUmlnaHQsCiAgICAgIENpcmNsZUNoZXZyb25VcCwKICAgICAgQ2lyY2xlRGFzaGVkLAogICAgICBDaXJjbGVEaXZpZGUsCiAgICAgIENpcmNsZURvbGxhclNpZ24sCiAgICAgIENpcmNsZURvdCwKICAgICAgQ2lyY2xlRG90RGFzaGVkLAogICAgICBDaXJjbGVFbGxpcHNpcywKICAgICAgQ2lyY2xlRXF1YWwsCiAgICAgIENpcmNsZUZhZGluZ0Fycm93VXAsCiAgICAgIENpcmNsZUZhZGluZ1BsdXMsCiAgICAgIENpcmNsZUdhdWdlLAogICAgICBDaXJjbGVIZWxwOiBDaXJjbGVRdWVzdGlvbk1hcmssCiAgICAgIENpcmNsZU1pbnVzLAogICAgICBDaXJjbGVPZmYsCiAgICAgIENpcmNsZVBhcmtpbmcsCiAgICAgIENpcmNsZVBhcmtpbmdPZmYsCiAgICAgIENpcmNsZVBhdXNlLAogICAgICBDaXJjbGVQZXJjZW50LAogICAgICBDaXJjbGVQaWxlLAogICAgICBDaXJjbGVQbGF5LAogICAgICBDaXJjbGVQbHVzLAogICAgICBDaXJjbGVQb3VuZFN0ZXJsaW5nLAogICAgICBDaXJjbGVQb3dlciwKICAgICAgQ2lyY2xlUXVlc3Rpb25NYXJrLAogICAgICBDaXJjbGVTbGFzaCwKICAgICAgQ2lyY2xlU2xhc2gyLAogICAgICBDaXJjbGVTbGFzaGVkOiBDaXJjbGVTbGFzaDIsCiAgICAgIENpcmNsZVNtYWxsLAogICAgICBDaXJjbGVTdGFyLAogICAgICBDaXJjbGVTdG9wLAogICAgICBDaXJjbGVVc2VyLAogICAgICBDaXJjbGVVc2VyUm91bmQsCiAgICAgIENpcmNsZVgsCiAgICAgIENpcmN1aXRCb2FyZCwKICAgICAgQ2l0cnVzLAogICAgICBDbGFwcGVyYm9hcmQsCiAgICAgIENsaXBib2FyZCwKICAgICAgQ2xpcGJvYXJkQ2hlY2ssCiAgICAgIENsaXBib2FyZENsb2NrLAogICAgICBDbGlwYm9hcmRDb3B5LAogICAgICBDbGlwYm9hcmRFZGl0OiBDbGlwYm9hcmRQZW4sCiAgICAgIENsaXBib2FyZExpc3QsCiAgICAgIENsaXBib2FyZE1pbnVzLAogICAgICBDbGlwYm9hcmRQYXN0ZSwKICAgICAgQ2xpcGJvYXJkUGVuLAogICAgICBDbGlwYm9hcmRQZW5MaW5lLAogICAgICBDbGlwYm9hcmRQbHVzLAogICAgICBDbGlwYm9hcmRTaWduYXR1cmU6IENsaXBib2FyZFBlbkxpbmUsCiAgICAgIENsaXBib2FyZFR5cGUsCiAgICAgIENsaXBib2FyZFgsCiAgICAgIENsb2NrLAogICAgICBDbG9jazEsCiAgICAgIENsb2NrMTAsCiAgICAgIENsb2NrMTEsCiAgICAgIENsb2NrMTIsCiAgICAgIENsb2NrMiwKICAgICAgQ2xvY2szLAogICAgICBDbG9jazQsCiAgICAgIENsb2NrNSwKICAgICAgQ2xvY2s2LAogICAgICBDbG9jazcsCiAgICAgIENsb2NrOCwKICAgICAgQ2xvY2s5LAogICAgICBDbG9ja0FsZXJ0LAogICAgICBDbG9ja0Fycm93RG93biwKICAgICAgQ2xvY2tBcnJvd1VwLAogICAgICBDbG9ja0NoZWNrLAogICAgICBDbG9ja0ZhZGluZywKICAgICAgQ2xvY2tQbHVzLAogICAgICBDbG9zZWRDYXB0aW9uLAogICAgICBDbG91ZCwKICAgICAgQ2xvdWRBbGVydCwKICAgICAgQ2xvdWRCYWNrdXAsCiAgICAgIENsb3VkQ2hlY2ssCiAgICAgIENsb3VkQ29nLAogICAgICBDbG91ZERvd25sb2FkLAogICAgICBDbG91ZERyaXp6bGUsCiAgICAgIENsb3VkRm9nLAogICAgICBDbG91ZEhhaWwsCiAgICAgIENsb3VkTGlnaHRuaW5nLAogICAgICBDbG91ZE1vb24sCiAgICAgIENsb3VkTW9vblJhaW4sCiAgICAgIENsb3VkT2ZmLAogICAgICBDbG91ZFJhaW4sCiAgICAgIENsb3VkUmFpbldpbmQsCiAgICAgIENsb3VkU25vdywKICAgICAgQ2xvdWRTdW4sCiAgICAgIENsb3VkU3VuUmFpbiwKICAgICAgQ2xvdWRTeW5jLAogICAgICBDbG91ZFVwbG9hZCwKICAgICAgQ2xvdWR5LAogICAgICBDbG92ZXIsCiAgICAgIENsdWIsCiAgICAgIENvZGUsCiAgICAgIENvZGUyOiBDb2RlWG1sLAogICAgICBDb2RlU3F1YXJlOiBTcXVhcmVDb2RlLAogICAgICBDb2RlWG1sLAogICAgICBDb2RlcGVuLAogICAgICBDb2Rlc2FuZGJveCwKICAgICAgQ29mZmVlLAogICAgICBDb2csCiAgICAgIENvaW5zLAogICAgICBDb2x1bW5zOiBDb2x1bW5zMiwKICAgICAgQ29sdW1uczIsCiAgICAgIENvbHVtbnMzLAogICAgICBDb2x1bW5zM0NvZywKICAgICAgQ29sdW1uczQsCiAgICAgIENvbHVtbnNTZXR0aW5nczogQ29sdW1uczNDb2csCiAgICAgIENvbWJpbmUsCiAgICAgIENvbW1hbmQsCiAgICAgIENvbXBhc3MsCiAgICAgIENvbXBvbmVudCwKICAgICAgQ29tcHV0ZXIsCiAgICAgIENvbmNpZXJnZUJlbGwsCiAgICAgIENvbmUsCiAgICAgIENvbnN0cnVjdGlvbiwKICAgICAgQ29udGFjdCwKICAgICAgQ29udGFjdDI6IENvbnRhY3RSb3VuZCwKICAgICAgQ29udGFjdFJvdW5kLAogICAgICBDb250YWluZXIsCiAgICAgIENvbnRyYXN0LAogICAgICBDb29raWUsCiAgICAgIENvb2tpbmdQb3QsCiAgICAgIENvcHksCiAgICAgIENvcHlDaGVjaywKICAgICAgQ29weU1pbnVzLAogICAgICBDb3B5UGx1cywKICAgICAgQ29weVNsYXNoLAogICAgICBDb3B5WCwKICAgICAgQ29weWxlZnQsCiAgICAgIENvcHlyaWdodCwKICAgICAgQ29ybmVyRG93bkxlZnQsCiAgICAgIENvcm5lckRvd25SaWdodCwKICAgICAgQ29ybmVyTGVmdERvd24sCiAgICAgIENvcm5lckxlZnRVcCwKICAgICAgQ29ybmVyUmlnaHREb3duLAogICAgICBDb3JuZXJSaWdodFVwLAogICAgICBDb3JuZXJVcExlZnQsCiAgICAgIENvcm5lclVwUmlnaHQsCiAgICAgIENwdSwKICAgICAgQ3JlYXRpdmVDb21tb25zLAogICAgICBDcmVkaXRDYXJkLAogICAgICBDcm9pc3NhbnQsCiAgICAgIENyb3AsCiAgICAgIENyb3NzLAogICAgICBDcm9zc2hhaXIsCiAgICAgIENyb3duLAogICAgICBDdWJvaWQsCiAgICAgIEN1cFNvZGEsCiAgICAgIEN1cmx5QnJhY2VzOiBCcmFjZXMsCiAgICAgIEN1cnJlbmN5LAogICAgICBDeWxpbmRlciwKICAgICAgRGFtLAogICAgICBEYXRhYmFzZSwKICAgICAgRGF0YWJhc2VCYWNrdXAsCiAgICAgIERhdGFiYXNlWmFwLAogICAgICBEZWNpbWFsc0Fycm93TGVmdCwKICAgICAgRGVjaW1hbHNBcnJvd1JpZ2h0LAogICAgICBEZWxldGUsCiAgICAgIERlc3NlcnQsCiAgICAgIERpYW1ldGVyLAogICAgICBEaWFtb25kLAogICAgICBEaWFtb25kTWludXMsCiAgICAgIERpYW1vbmRQZXJjZW50LAogICAgICBEaWFtb25kUGx1cywKICAgICAgRGljZTEsCiAgICAgIERpY2UyLAogICAgICBEaWNlMywKICAgICAgRGljZTQsCiAgICAgIERpY2U1LAogICAgICBEaWNlNiwKICAgICAgRGljZXMsCiAgICAgIERpZmYsCiAgICAgIERpc2MsCiAgICAgIERpc2MyLAogICAgICBEaXNjMywKICAgICAgRGlzY0FsYnVtLAogICAgICBEaXZpZGUsCiAgICAgIERpdmlkZUNpcmNsZTogQ2lyY2xlRGl2aWRlLAogICAgICBEaXZpZGVTcXVhcmU6IFNxdWFyZURpdmlkZSwKICAgICAgRG5hLAogICAgICBEbmFPZmYsCiAgICAgIERvY2ssCiAgICAgIERvZywKICAgICAgRG9sbGFyU2lnbiwKICAgICAgRG9udXQsCiAgICAgIERvb3JDbG9zZWQsCiAgICAgIERvb3JDbG9zZWRMb2NrZWQsCiAgICAgIERvb3JPcGVuLAogICAgICBEb3QsCiAgICAgIERvdFNxdWFyZTogU3F1YXJlRG90LAogICAgICBEb3dubG9hZCwKICAgICAgRG93bmxvYWRDbG91ZDogQ2xvdWREb3dubG9hZCwKICAgICAgRHJhZnRpbmdDb21wYXNzLAogICAgICBEcmFtYSwKICAgICAgRHJpYmJibGUsCiAgICAgIERyaWxsLAogICAgICBEcm9uZSwKICAgICAgRHJvcGxldCwKICAgICAgRHJvcGxldE9mZiwKICAgICAgRHJvcGxldHMsCiAgICAgIERydW0sCiAgICAgIERydW1zdGljaywKICAgICAgRHVtYmJlbGwsCiAgICAgIEVhciwKICAgICAgRWFyT2ZmLAogICAgICBFYXJ0aCwKICAgICAgRWFydGhMb2NrLAogICAgICBFY2xpcHNlLAogICAgICBFZGl0OiBTcXVhcmVQZW4sCiAgICAgIEVkaXQyOiBQZW4sCiAgICAgIEVkaXQzOiBQZW5MaW5lLAogICAgICBFZ2csCiAgICAgIEVnZ0ZyaWVkLAogICAgICBFZ2dPZmYsCiAgICAgIEVsbGlwc2lzLAogICAgICBFbGxpcHNpc1ZlcnRpY2FsLAogICAgICBFcXVhbCwKICAgICAgRXF1YWxBcHByb3hpbWF0ZWx5LAogICAgICBFcXVhbE5vdCwKICAgICAgRXF1YWxTcXVhcmU6IFNxdWFyZUVxdWFsLAogICAgICBFcmFzZXIsCiAgICAgIEV0aGVybmV0UG9ydCwKICAgICAgRXVybywKICAgICAgRXZDaGFyZ2VyLAogICAgICBFeHBhbmQsCiAgICAgIEV4dGVybmFsTGluaywKICAgICAgRXllLAogICAgICBFeWVDbG9zZWQsCiAgICAgIEV5ZU9mZiwKICAgICAgRmFjZWJvb2ssCiAgICAgIEZhY3RvcnksCiAgICAgIEZhbiwKICAgICAgRmFzdEZvcndhcmQsCiAgICAgIEZlYXRoZXIsCiAgICAgIEZlbmNlLAogICAgICBGZXJyaXNXaGVlbCwKICAgICAgRmlnbWEsCiAgICAgIEZpbGUsCiAgICAgIEZpbGVBcmNoaXZlLAogICAgICBGaWxlQXVkaW86IEZpbGVIZWFkcGhvbmUsCiAgICAgIEZpbGVBdWRpbzI6IEZpbGVIZWFkcGhvbmUsCiAgICAgIEZpbGVBeGlzM0Q6IEZpbGVBeGlzM2QsCiAgICAgIEZpbGVBeGlzM2QsCiAgICAgIEZpbGVCYWRnZSwKICAgICAgRmlsZUJhZGdlMjogRmlsZUJhZGdlLAogICAgICBGaWxlQmFyQ2hhcnQ6IEZpbGVDaGFydENvbHVtbkluY3JlYXNpbmcsCiAgICAgIEZpbGVCYXJDaGFydDI6IEZpbGVDaGFydENvbHVtbiwKICAgICAgRmlsZUJveCwKICAgICAgRmlsZUJyYWNlcywKICAgICAgRmlsZUJyYWNlc0Nvcm5lciwKICAgICAgRmlsZUNoYXJ0Q29sdW1uLAogICAgICBGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nLAogICAgICBGaWxlQ2hhcnRMaW5lLAogICAgICBGaWxlQ2hhcnRQaWUsCiAgICAgIEZpbGVDaGVjaywKICAgICAgRmlsZUNoZWNrMjogRmlsZUNoZWNrQ29ybmVyLAogICAgICBGaWxlQ2hlY2tDb3JuZXIsCiAgICAgIEZpbGVDbG9jaywKICAgICAgRmlsZUNvZGUsCiAgICAgIEZpbGVDb2RlMjogRmlsZUNvZGVDb3JuZXIsCiAgICAgIEZpbGVDb2RlQ29ybmVyLAogICAgICBGaWxlQ29nLAogICAgICBGaWxlQ29nMjogRmlsZUNvZywKICAgICAgRmlsZURpZmYsCiAgICAgIEZpbGVEaWdpdCwKICAgICAgRmlsZURvd24sCiAgICAgIEZpbGVFZGl0OiBGaWxlUGVuLAogICAgICBGaWxlRXhjbGFtYXRpb25Qb2ludCwKICAgICAgRmlsZUhlYWRwaG9uZSwKICAgICAgRmlsZUhlYXJ0LAogICAgICBGaWxlSW1hZ2UsCiAgICAgIEZpbGVJbnB1dCwKICAgICAgRmlsZUpzb246IEZpbGVCcmFjZXMsCiAgICAgIEZpbGVKc29uMjogRmlsZUJyYWNlc0Nvcm5lciwKICAgICAgRmlsZUtleSwKICAgICAgRmlsZUtleTI6IEZpbGVLZXksCiAgICAgIEZpbGVMaW5lQ2hhcnQ6IEZpbGVDaGFydExpbmUsCiAgICAgIEZpbGVMb2NrLAogICAgICBGaWxlTG9jazI6IEZpbGVMb2NrLAogICAgICBGaWxlTWludXMsCiAgICAgIEZpbGVNaW51czI6IEZpbGVNaW51c0Nvcm5lciwKICAgICAgRmlsZU1pbnVzQ29ybmVyLAogICAgICBGaWxlTXVzaWMsCiAgICAgIEZpbGVPdXRwdXQsCiAgICAgIEZpbGVQZW4sCiAgICAgIEZpbGVQZW5MaW5lLAogICAgICBGaWxlUGllQ2hhcnQ6IEZpbGVDaGFydFBpZSwKICAgICAgRmlsZVBsYXksCiAgICAgIEZpbGVQbHVzLAogICAgICBGaWxlUGx1czI6IEZpbGVQbHVzQ29ybmVyLAogICAgICBGaWxlUGx1c0Nvcm5lciwKICAgICAgRmlsZVF1ZXN0aW9uOiBGaWxlUXVlc3Rpb25NYXJrLAogICAgICBGaWxlUXVlc3Rpb25NYXJrLAogICAgICBGaWxlU2NhbiwKICAgICAgRmlsZVNlYXJjaCwKICAgICAgRmlsZVNlYXJjaDI6IEZpbGVTZWFyY2hDb3JuZXIsCiAgICAgIEZpbGVTZWFyY2hDb3JuZXIsCiAgICAgIEZpbGVTaWduYWwsCiAgICAgIEZpbGVTaWduYXR1cmU6IEZpbGVQZW5MaW5lLAogICAgICBGaWxlU2xpZGVycywKICAgICAgRmlsZVNwcmVhZHNoZWV0LAogICAgICBGaWxlU3RhY2ssCiAgICAgIEZpbGVTeW1saW5rLAogICAgICBGaWxlVGVybWluYWwsCiAgICAgIEZpbGVUZXh0LAogICAgICBGaWxlVHlwZSwKICAgICAgRmlsZVR5cGUyOiBGaWxlVHlwZUNvcm5lciwKICAgICAgRmlsZVR5cGVDb3JuZXIsCiAgICAgIEZpbGVVcCwKICAgICAgRmlsZVVzZXIsCiAgICAgIEZpbGVWaWRlbzogRmlsZVBsYXksCiAgICAgIEZpbGVWaWRlbzI6IEZpbGVWaWRlb0NhbWVyYSwKICAgICAgRmlsZVZpZGVvQ2FtZXJhLAogICAgICBGaWxlVm9sdW1lLAogICAgICBGaWxlVm9sdW1lMjogRmlsZVNpZ25hbCwKICAgICAgRmlsZVdhcm5pbmc6IEZpbGVFeGNsYW1hdGlvblBvaW50LAogICAgICBGaWxlWCwKICAgICAgRmlsZVgyOiBGaWxlWENvcm5lciwKICAgICAgRmlsZVhDb3JuZXIsCiAgICAgIEZpbGVzLAogICAgICBGaWxtLAogICAgICBGaWx0ZXI6IEZ1bm5lbCwKICAgICAgRmlsdGVyWDogRnVubmVsWCwKICAgICAgRmluZ2VycHJpbnQ6IEZpbmdlcnByaW50UGF0dGVybiwKICAgICAgRmluZ2VycHJpbnRQYXR0ZXJuLAogICAgICBGaXJlRXh0aW5ndWlzaGVyLAogICAgICBGaXNoLAogICAgICBGaXNoT2ZmLAogICAgICBGaXNoU3ltYm9sLAogICAgICBGaXNoaW5nSG9vaywKICAgICAgRmxhZywKICAgICAgRmxhZ09mZiwKICAgICAgRmxhZ1RyaWFuZ2xlTGVmdCwKICAgICAgRmxhZ1RyaWFuZ2xlUmlnaHQsCiAgICAgIEZsYW1lLAogICAgICBGbGFtZUtpbmRsaW5nLAogICAgICBGbGFzaGxpZ2h0LAogICAgICBGbGFzaGxpZ2h0T2ZmLAogICAgICBGbGFza0NvbmljYWwsCiAgICAgIEZsYXNrQ29uaWNhbE9mZiwKICAgICAgRmxhc2tSb3VuZCwKICAgICAgRmxpcEhvcml6b250YWwsCiAgICAgIEZsaXBIb3Jpem9udGFsMiwKICAgICAgRmxpcFZlcnRpY2FsLAogICAgICBGbGlwVmVydGljYWwyLAogICAgICBGbG93ZXIsCiAgICAgIEZsb3dlcjIsCiAgICAgIEZvY3VzLAogICAgICBGb2xkSG9yaXpvbnRhbCwKICAgICAgRm9sZFZlcnRpY2FsLAogICAgICBGb2xkZXIsCiAgICAgIEZvbGRlckFyY2hpdmUsCiAgICAgIEZvbGRlckNoZWNrLAogICAgICBGb2xkZXJDbG9jaywKICAgICAgRm9sZGVyQ2xvc2VkLAogICAgICBGb2xkZXJDb2RlLAogICAgICBGb2xkZXJDb2csCiAgICAgIEZvbGRlckNvZzI6IEZvbGRlckNvZywKICAgICAgRm9sZGVyRG90LAogICAgICBGb2xkZXJEb3duLAogICAgICBGb2xkZXJFZGl0OiBGb2xkZXJQZW4sCiAgICAgIEZvbGRlckdpdCwKICAgICAgRm9sZGVyR2l0MiwKICAgICAgRm9sZGVySGVhcnQsCiAgICAgIEZvbGRlcklucHV0LAogICAgICBGb2xkZXJLYW5iYW4sCiAgICAgIEZvbGRlcktleSwKICAgICAgRm9sZGVyTG9jaywKICAgICAgRm9sZGVyTWludXMsCiAgICAgIEZvbGRlck9wZW4sCiAgICAgIEZvbGRlck9wZW5Eb3QsCiAgICAgIEZvbGRlck91dHB1dCwKICAgICAgRm9sZGVyUGVuLAogICAgICBGb2xkZXJQbHVzLAogICAgICBGb2xkZXJSb290LAogICAgICBGb2xkZXJTZWFyY2gsCiAgICAgIEZvbGRlclNlYXJjaDIsCiAgICAgIEZvbGRlclN5bWxpbmssCiAgICAgIEZvbGRlclN5bmMsCiAgICAgIEZvbGRlclRyZWUsCiAgICAgIEZvbGRlclVwLAogICAgICBGb2xkZXJYLAogICAgICBGb2xkZXJzLAogICAgICBGb290cHJpbnRzLAogICAgICBGb3JrS25pZmU6IFV0ZW5zaWxzLAogICAgICBGb3JrS25pZmVDcm9zc2VkOiBVdGVuc2lsc0Nyb3NzZWQsCiAgICAgIEZvcmtsaWZ0LAogICAgICBGb3JtLAogICAgICBGb3JtSW5wdXQ6IFJlY3RhbmdsZUVsbGlwc2lzLAogICAgICBGb3J3YXJkLAogICAgICBGcmFtZSwKICAgICAgRnJhbWVyLAogICAgICBGcm93biwKICAgICAgRnVlbCwKICAgICAgRnVsbHNjcmVlbiwKICAgICAgRnVuY3Rpb25TcXVhcmU6IFNxdWFyZUZ1bmN0aW9uLAogICAgICBGdW5uZWwsCiAgICAgIEZ1bm5lbFBsdXMsCiAgICAgIEZ1bm5lbFgsCiAgICAgIEdhbGxlcnlIb3Jpem9udGFsLAogICAgICBHYWxsZXJ5SG9yaXpvbnRhbEVuZCwKICAgICAgR2FsbGVyeVRodW1ibmFpbHMsCiAgICAgIEdhbGxlcnlWZXJ0aWNhbCwKICAgICAgR2FsbGVyeVZlcnRpY2FsRW5kLAogICAgICBHYW1lcGFkLAogICAgICBHYW1lcGFkMiwKICAgICAgR2FtZXBhZERpcmVjdGlvbmFsLAogICAgICBHYW50dENoYXJ0OiBDaGFydE5vQXhlc0dhbnR0LAogICAgICBHYW50dENoYXJ0U3F1YXJlOiBTcXVhcmVDaGFydEdhbnR0LAogICAgICBHYXVnZSwKICAgICAgR2F1Z2VDaXJjbGU6IENpcmNsZUdhdWdlLAogICAgICBHYXZlbCwKICAgICAgR2VtLAogICAgICBHZW9yZ2lhbkxhcmksCiAgICAgIEdob3N0LAogICAgICBHaWZ0LAogICAgICBHaXRCcmFuY2gsCiAgICAgIEdpdEJyYW5jaE1pbnVzLAogICAgICBHaXRCcmFuY2hQbHVzLAogICAgICBHaXRDb21taXQ6IEdpdENvbW1pdEhvcml6b250YWwsCiAgICAgIEdpdENvbW1pdEhvcml6b250YWwsCiAgICAgIEdpdENvbW1pdFZlcnRpY2FsLAogICAgICBHaXRDb21wYXJlLAogICAgICBHaXRDb21wYXJlQXJyb3dzLAogICAgICBHaXRGb3JrLAogICAgICBHaXRHcmFwaCwKICAgICAgR2l0TWVyZ2UsCiAgICAgIEdpdFB1bGxSZXF1ZXN0LAogICAgICBHaXRQdWxsUmVxdWVzdEFycm93LAogICAgICBHaXRQdWxsUmVxdWVzdENsb3NlZCwKICAgICAgR2l0UHVsbFJlcXVlc3RDcmVhdGUsCiAgICAgIEdpdFB1bGxSZXF1ZXN0Q3JlYXRlQXJyb3csCiAgICAgIEdpdFB1bGxSZXF1ZXN0RHJhZnQsCiAgICAgIEdpdGh1YiwKICAgICAgR2l0bGFiLAogICAgICBHbGFzc1dhdGVyLAogICAgICBHbGFzc2VzLAogICAgICBHbG9iZSwKICAgICAgR2xvYmUyOiBFYXJ0aCwKICAgICAgR2xvYmVMb2NrLAogICAgICBHbG9iZVgsCiAgICAgIEdvYWwsCiAgICAgIEdwdSwKICAgICAgR3JhYjogSGFuZEdyYWIsCiAgICAgIEdyYWR1YXRpb25DYXAsCiAgICAgIEdyYXBlLAogICAgICBHcmlkOiBHcmlkM3gzLAogICAgICBHcmlkMlgyOiBHcmlkMngyLAogICAgICBHcmlkMlgyQ2hlY2s6IEdyaWQyeDJDaGVjaywKICAgICAgR3JpZDJYMlBsdXM6IEdyaWQyeDJQbHVzLAogICAgICBHcmlkMlgyWDogR3JpZDJ4MlgsCiAgICAgIEdyaWQyeDIsCiAgICAgIEdyaWQyeDJDaGVjaywKICAgICAgR3JpZDJ4MlBsdXMsCiAgICAgIEdyaWQyeDJYLAogICAgICBHcmlkM1gzOiBHcmlkM3gzLAogICAgICBHcmlkM3gyLAogICAgICBHcmlkM3gzLAogICAgICBHcmlwLAogICAgICBHcmlwSG9yaXpvbnRhbCwKICAgICAgR3JpcFZlcnRpY2FsLAogICAgICBHcm91cCwKICAgICAgR3VpdGFyLAogICAgICBIYW0sCiAgICAgIEhhbWJ1cmdlciwKICAgICAgSGFtbWVyLAogICAgICBIYW5kLAogICAgICBIYW5kQ29pbnMsCiAgICAgIEhhbmRGaXN0LAogICAgICBIYW5kR3JhYiwKICAgICAgSGFuZEhlYXJ0LAogICAgICBIYW5kSGVscGluZywKICAgICAgSGFuZE1ldGFsLAogICAgICBIYW5kUGxhdHRlciwKICAgICAgSGFuZGJhZywKICAgICAgSGFuZHNoYWtlLAogICAgICBIYXJkRHJpdmUsCiAgICAgIEhhcmREcml2ZURvd25sb2FkLAogICAgICBIYXJkRHJpdmVVcGxvYWQsCiAgICAgIEhhcmRIYXQsCiAgICAgIEhhc2gsCiAgICAgIEhhdEdsYXNzZXMsCiAgICAgIEhhemUsCiAgICAgIEhkLAogICAgICBIZG1pUG9ydCwKICAgICAgSGVhZGluZywKICAgICAgSGVhZGluZzEsCiAgICAgIEhlYWRpbmcyLAogICAgICBIZWFkaW5nMywKICAgICAgSGVhZGluZzQsCiAgICAgIEhlYWRpbmc1LAogICAgICBIZWFkaW5nNiwKICAgICAgSGVhZHBob25lT2ZmLAogICAgICBIZWFkcGhvbmVzLAogICAgICBIZWFkc2V0LAogICAgICBIZWFydCwKICAgICAgSGVhcnRDcmFjaywKICAgICAgSGVhcnRIYW5kc2hha2UsCiAgICAgIEhlYXJ0TWludXMsCiAgICAgIEhlYXJ0T2ZmLAogICAgICBIZWFydFBsdXMsCiAgICAgIEhlYXJ0UHVsc2UsCiAgICAgIEhlYXRlciwKICAgICAgSGVsaWNvcHRlciwKICAgICAgSGVscENpcmNsZTogQ2lyY2xlUXVlc3Rpb25NYXJrLAogICAgICBIZWxwaW5nSGFuZDogSGFuZEhlbHBpbmcsCiAgICAgIEhleGFnb24sCiAgICAgIEhpZ2hsaWdodGVyLAogICAgICBIaXN0b3J5LAogICAgICBIb21lOiBIb3VzZSwKICAgICAgSG9wLAogICAgICBIb3BPZmYsCiAgICAgIEhvc3BpdGFsLAogICAgICBIb3RlbCwKICAgICAgSG91cmdsYXNzLAogICAgICBIb3VzZSwKICAgICAgSG91c2VIZWFydCwKICAgICAgSG91c2VQbHVnLAogICAgICBIb3VzZVBsdXMsCiAgICAgIEhvdXNlV2lmaSwKICAgICAgSWNlQ3JlYW06IEljZUNyZWFtQ29uZSwKICAgICAgSWNlQ3JlYW0yOiBJY2VDcmVhbUJvd2wsCiAgICAgIEljZUNyZWFtQm93bCwKICAgICAgSWNlQ3JlYW1Db25lLAogICAgICBJZENhcmQsCiAgICAgIElkQ2FyZExhbnlhcmQsCiAgICAgIEltYWdlOiBJbWFnZTIsCiAgICAgIEltYWdlRG93biwKICAgICAgSW1hZ2VNaW51cywKICAgICAgSW1hZ2VPZmYsCiAgICAgIEltYWdlUGxheSwKICAgICAgSW1hZ2VQbHVzLAogICAgICBJbWFnZVVwLAogICAgICBJbWFnZVVwc2NhbGUsCiAgICAgIEltYWdlcywKICAgICAgSW1wb3J0LAogICAgICBJbmJveCwKICAgICAgSW5kZW50OiBMaXN0SW5kZW50SW5jcmVhc2UsCiAgICAgIEluZGVudERlY3JlYXNlOiBMaXN0SW5kZW50RGVjcmVhc2UsCiAgICAgIEluZGVudEluY3JlYXNlOiBMaXN0SW5kZW50SW5jcmVhc2UsCiAgICAgIEluZGlhblJ1cGVlLAogICAgICBJbmZpbml0eTogSW5maW5pdHkyLAogICAgICBJbmZvOiBJbmZvMiwKICAgICAgSW5zcGVjdDogU3F1YXJlTW91c2VQb2ludGVyLAogICAgICBJbnNwZWN0aW9uUGFuZWwsCiAgICAgIEluc3RhZ3JhbSwKICAgICAgSXRhbGljLAogICAgICBJdGVyYXRpb25DY3csCiAgICAgIEl0ZXJhdGlvbkN3LAogICAgICBKYXBhbmVzZVllbiwKICAgICAgSm95c3RpY2ssCiAgICAgIEthbmJhbiwKICAgICAgS2FuYmFuU3F1YXJlOiBTcXVhcmVLYW5iYW4sCiAgICAgIEthbmJhblNxdWFyZURhc2hlZDogU3F1YXJlRGFzaGVkS2FuYmFuLAogICAgICBLYXlhaywKICAgICAgS2V5OiBLZXkyLAogICAgICBLZXlSb3VuZCwKICAgICAgS2V5U3F1YXJlLAogICAgICBLZXlib2FyZDogS2V5Ym9hcmQyLAogICAgICBLZXlib2FyZE11c2ljLAogICAgICBLZXlib2FyZE9mZiwKICAgICAgTGFtcCwKICAgICAgTGFtcENlaWxpbmcsCiAgICAgIExhbXBEZXNrLAogICAgICBMYW1wRmxvb3IsCiAgICAgIExhbXBXYWxsRG93biwKICAgICAgTGFtcFdhbGxVcCwKICAgICAgTGFuZFBsb3QsCiAgICAgIExhbmRtYXJrLAogICAgICBMYW5ndWFnZXMsCiAgICAgIExhcHRvcCwKICAgICAgTGFwdG9wMjogTGFwdG9wTWluaW1hbCwKICAgICAgTGFwdG9wTWluaW1hbCwKICAgICAgTGFwdG9wTWluaW1hbENoZWNrLAogICAgICBMYXNzbywKICAgICAgTGFzc29TZWxlY3QsCiAgICAgIExhdWdoLAogICAgICBMYXllcnM6IExheWVyczMsCiAgICAgIExheWVyczIsCiAgICAgIExheWVyczMsCiAgICAgIExheWVyc1BsdXMsCiAgICAgIExheW91dDogUGFuZWxzVG9wTGVmdCwKICAgICAgTGF5b3V0RGFzaGJvYXJkLAogICAgICBMYXlvdXRHcmlkLAogICAgICBMYXlvdXRMaXN0LAogICAgICBMYXlvdXRQYW5lbExlZnQsCiAgICAgIExheW91dFBhbmVsVG9wLAogICAgICBMYXlvdXRUZW1wbGF0ZSwKICAgICAgTGVhZiwKICAgICAgTGVhZnlHcmVlbiwKICAgICAgTGVjdGVybiwKICAgICAgTGV0dGVyVGV4dDogVGV4dEluaXRpYWwsCiAgICAgIExpYnJhcnk6IExpYnJhcnkyLAogICAgICBMaWJyYXJ5QmlnLAogICAgICBMaWJyYXJ5U3F1YXJlOiBTcXVhcmVMaWJyYXJ5LAogICAgICBMaWZlQnVveSwKICAgICAgTGlnYXR1cmUsCiAgICAgIExpZ2h0YnVsYiwKICAgICAgTGlnaHRidWxiT2ZmLAogICAgICBMaW5lQ2hhcnQ6IENoYXJ0TGluZSwKICAgICAgTGluZVNxdWlnZ2xlLAogICAgICBMaW5rLAogICAgICBMaW5rMiwKICAgICAgTGluazJPZmYsCiAgICAgIExpbmtlZGluLAogICAgICBMaXN0LAogICAgICBMaXN0Q2hlY2ssCiAgICAgIExpc3RDaGVja3MsCiAgICAgIExpc3RDaGV2cm9uc0Rvd25VcCwKICAgICAgTGlzdENoZXZyb25zVXBEb3duLAogICAgICBMaXN0Q29sbGFwc2UsCiAgICAgIExpc3RFbmQsCiAgICAgIExpc3RGaWx0ZXIsCiAgICAgIExpc3RGaWx0ZXJQbHVzLAogICAgICBMaXN0SW5kZW50RGVjcmVhc2UsCiAgICAgIExpc3RJbmRlbnRJbmNyZWFzZSwKICAgICAgTGlzdE1pbnVzLAogICAgICBMaXN0TXVzaWMsCiAgICAgIExpc3RPcmRlcmVkLAogICAgICBMaXN0UGx1cywKICAgICAgTGlzdFJlc3RhcnQsCiAgICAgIExpc3RTdGFydCwKICAgICAgTGlzdFRvZG8sCiAgICAgIExpc3RUcmVlLAogICAgICBMaXN0VmlkZW8sCiAgICAgIExpc3RYLAogICAgICBMb2FkZXIsCiAgICAgIExvYWRlcjI6IExvYWRlckNpcmNsZSwKICAgICAgTG9hZGVyQ2lyY2xlLAogICAgICBMb2FkZXJQaW53aGVlbCwKICAgICAgTG9jYXRlLAogICAgICBMb2NhdGVGaXhlZCwKICAgICAgTG9jYXRlT2ZmLAogICAgICBMb2NhdGlvbkVkaXQ6IE1hcFBpblBlbiwKICAgICAgTG9jaywKICAgICAgTG9ja0tleWhvbGUsCiAgICAgIExvY2tLZXlob2xlT3BlbiwKICAgICAgTG9ja09wZW4sCiAgICAgIExvZ0luLAogICAgICBMb2dPdXQsCiAgICAgIExvZ3MsCiAgICAgIExvbGxpcG9wLAogICAgICBMdWdnYWdlLAogICAgICBNU3F1YXJlOiBTcXVhcmVNLAogICAgICBNYWduZXQsCiAgICAgIE1haWwsCiAgICAgIE1haWxDaGVjaywKICAgICAgTWFpbE1pbnVzLAogICAgICBNYWlsT3BlbiwKICAgICAgTWFpbFBsdXMsCiAgICAgIE1haWxRdWVzdGlvbjogTWFpbFF1ZXN0aW9uTWFyaywKICAgICAgTWFpbFF1ZXN0aW9uTWFyaywKICAgICAgTWFpbFNlYXJjaCwKICAgICAgTWFpbFdhcm5pbmcsCiAgICAgIE1haWxYLAogICAgICBNYWlsYm94LAogICAgICBNYWlscywKICAgICAgTWFwOiBNYXAyLAogICAgICBNYXBNaW51cywKICAgICAgTWFwUGluLAogICAgICBNYXBQaW5DaGVjaywKICAgICAgTWFwUGluQ2hlY2tJbnNpZGUsCiAgICAgIE1hcFBpbkhvdXNlLAogICAgICBNYXBQaW5NaW51cywKICAgICAgTWFwUGluTWludXNJbnNpZGUsCiAgICAgIE1hcFBpbk9mZiwKICAgICAgTWFwUGluUGVuLAogICAgICBNYXBQaW5QbHVzLAogICAgICBNYXBQaW5QbHVzSW5zaWRlLAogICAgICBNYXBQaW5YLAogICAgICBNYXBQaW5YSW5zaWRlLAogICAgICBNYXBQaW5uZWQsCiAgICAgIE1hcFBsdXMsCiAgICAgIE1hcnMsCiAgICAgIE1hcnNTdHJva2UsCiAgICAgIE1hcnRpbmksCiAgICAgIE1heGltaXplLAogICAgICBNYXhpbWl6ZTIsCiAgICAgIE1lZGFsLAogICAgICBNZWdhcGhvbmUsCiAgICAgIE1lZ2FwaG9uZU9mZiwKICAgICAgTWVoLAogICAgICBNZW1vcnlTdGljaywKICAgICAgTWVudSwKICAgICAgTWVudVNxdWFyZTogU3F1YXJlTWVudSwKICAgICAgTWVyZ2UsCiAgICAgIE1lc3NhZ2VDaXJjbGUsCiAgICAgIE1lc3NhZ2VDaXJjbGVDb2RlLAogICAgICBNZXNzYWdlQ2lyY2xlRGFzaGVkLAogICAgICBNZXNzYWdlQ2lyY2xlSGVhcnQsCiAgICAgIE1lc3NhZ2VDaXJjbGVNb3JlLAogICAgICBNZXNzYWdlQ2lyY2xlT2ZmLAogICAgICBNZXNzYWdlQ2lyY2xlUGx1cywKICAgICAgTWVzc2FnZUNpcmNsZVF1ZXN0aW9uOiBNZXNzYWdlQ2lyY2xlUXVlc3Rpb25NYXJrLAogICAgICBNZXNzYWdlQ2lyY2xlUXVlc3Rpb25NYXJrLAogICAgICBNZXNzYWdlQ2lyY2xlUmVwbHksCiAgICAgIE1lc3NhZ2VDaXJjbGVXYXJuaW5nLAogICAgICBNZXNzYWdlQ2lyY2xlWCwKICAgICAgTWVzc2FnZVNxdWFyZSwKICAgICAgTWVzc2FnZVNxdWFyZUNvZGUsCiAgICAgIE1lc3NhZ2VTcXVhcmVEYXNoZWQsCiAgICAgIE1lc3NhZ2VTcXVhcmVEaWZmLAogICAgICBNZXNzYWdlU3F1YXJlRG90LAogICAgICBNZXNzYWdlU3F1YXJlSGVhcnQsCiAgICAgIE1lc3NhZ2VTcXVhcmVMb2NrLAogICAgICBNZXNzYWdlU3F1YXJlTW9yZSwKICAgICAgTWVzc2FnZVNxdWFyZU9mZiwKICAgICAgTWVzc2FnZVNxdWFyZVBsdXMsCiAgICAgIE1lc3NhZ2VTcXVhcmVRdW90ZSwKICAgICAgTWVzc2FnZVNxdWFyZVJlcGx5LAogICAgICBNZXNzYWdlU3F1YXJlU2hhcmUsCiAgICAgIE1lc3NhZ2VTcXVhcmVUZXh0LAogICAgICBNZXNzYWdlU3F1YXJlV2FybmluZywKICAgICAgTWVzc2FnZVNxdWFyZVgsCiAgICAgIE1lc3NhZ2VzU3F1YXJlLAogICAgICBNaWMsCiAgICAgIE1pYzI6IE1pY1ZvY2FsLAogICAgICBNaWNPZmYsCiAgICAgIE1pY1ZvY2FsLAogICAgICBNaWNyb2NoaXAsCiAgICAgIE1pY3Jvc2NvcGUsCiAgICAgIE1pY3Jvd2F2ZSwKICAgICAgTWlsZXN0b25lLAogICAgICBNaWxrLAogICAgICBNaWxrT2ZmLAogICAgICBNaW5pbWl6ZSwKICAgICAgTWluaW1pemUyLAogICAgICBNaW51cywKICAgICAgTWludXNDaXJjbGU6IENpcmNsZU1pbnVzLAogICAgICBNaW51c1NxdWFyZTogU3F1YXJlTWludXMsCiAgICAgIE1vbml0b3IsCiAgICAgIE1vbml0b3JDaGVjaywKICAgICAgTW9uaXRvckNsb3VkLAogICAgICBNb25pdG9yQ29nLAogICAgICBNb25pdG9yRG90LAogICAgICBNb25pdG9yRG93biwKICAgICAgTW9uaXRvck9mZiwKICAgICAgTW9uaXRvclBhdXNlLAogICAgICBNb25pdG9yUGxheSwKICAgICAgTW9uaXRvclNtYXJ0cGhvbmUsCiAgICAgIE1vbml0b3JTcGVha2VyLAogICAgICBNb25pdG9yU3RvcCwKICAgICAgTW9uaXRvclVwLAogICAgICBNb25pdG9yWCwKICAgICAgTW9vbiwKICAgICAgTW9vblN0YXIsCiAgICAgIE1vcmVIb3Jpem9udGFsOiBFbGxpcHNpcywKICAgICAgTW9yZVZlcnRpY2FsOiBFbGxpcHNpc1ZlcnRpY2FsLAogICAgICBNb3RvcmJpa2UsCiAgICAgIE1vdW50YWluLAogICAgICBNb3VudGFpblNub3csCiAgICAgIE1vdXNlLAogICAgICBNb3VzZU9mZiwKICAgICAgTW91c2VQb2ludGVyLAogICAgICBNb3VzZVBvaW50ZXIyLAogICAgICBNb3VzZVBvaW50ZXIyT2ZmLAogICAgICBNb3VzZVBvaW50ZXJCYW4sCiAgICAgIE1vdXNlUG9pbnRlckNsaWNrLAogICAgICBNb3VzZVBvaW50ZXJTcXVhcmVEYXNoZWQ6IFNxdWFyZURhc2hlZE1vdXNlUG9pbnRlciwKICAgICAgTW92ZSwKICAgICAgTW92ZTNEOiBNb3ZlM2QsCiAgICAgIE1vdmUzZCwKICAgICAgTW92ZURpYWdvbmFsLAogICAgICBNb3ZlRGlhZ29uYWwyLAogICAgICBNb3ZlRG93biwKICAgICAgTW92ZURvd25MZWZ0LAogICAgICBNb3ZlRG93blJpZ2h0LAogICAgICBNb3ZlSG9yaXpvbnRhbCwKICAgICAgTW92ZUxlZnQsCiAgICAgIE1vdmVSaWdodCwKICAgICAgTW92ZVVwLAogICAgICBNb3ZlVXBMZWZ0LAogICAgICBNb3ZlVXBSaWdodCwKICAgICAgTW92ZVZlcnRpY2FsLAogICAgICBNdXNpYywKICAgICAgTXVzaWMyLAogICAgICBNdXNpYzMsCiAgICAgIE11c2ljNCwKICAgICAgTmF2aWdhdGlvbiwKICAgICAgTmF2aWdhdGlvbjIsCiAgICAgIE5hdmlnYXRpb24yT2ZmLAogICAgICBOYXZpZ2F0aW9uT2ZmLAogICAgICBOZXR3b3JrLAogICAgICBOZXdzcGFwZXIsCiAgICAgIE5mYywKICAgICAgTm9uQmluYXJ5LAogICAgICBOb3RlYm9vaywKICAgICAgTm90ZWJvb2tQZW4sCiAgICAgIE5vdGVib29rVGFicywKICAgICAgTm90ZWJvb2tUZXh0LAogICAgICBOb3RlcGFkVGV4dCwKICAgICAgTm90ZXBhZFRleHREYXNoZWQsCiAgICAgIE51dCwKICAgICAgTnV0T2ZmLAogICAgICBPY3RhZ29uLAogICAgICBPY3RhZ29uQWxlcnQsCiAgICAgIE9jdGFnb25NaW51cywKICAgICAgT2N0YWdvblBhdXNlLAogICAgICBPY3RhZ29uWCwKICAgICAgT21lZ2EsCiAgICAgIE9wdGlvbiwKICAgICAgT3JiaXQsCiAgICAgIE9yaWdhbWksCiAgICAgIE91dGRlbnQ6IExpc3RJbmRlbnREZWNyZWFzZSwKICAgICAgUGFja2FnZSwKICAgICAgUGFja2FnZTIsCiAgICAgIFBhY2thZ2VDaGVjaywKICAgICAgUGFja2FnZU1pbnVzLAogICAgICBQYWNrYWdlT3BlbiwKICAgICAgUGFja2FnZVBsdXMsCiAgICAgIFBhY2thZ2VTZWFyY2gsCiAgICAgIFBhY2thZ2VYLAogICAgICBQYWludEJ1Y2tldCwKICAgICAgUGFpbnRSb2xsZXIsCiAgICAgIFBhaW50YnJ1c2gsCiAgICAgIFBhaW50YnJ1c2gyOiBQYWludGJydXNoVmVydGljYWwsCiAgICAgIFBhaW50YnJ1c2hWZXJ0aWNhbCwKICAgICAgUGFsZXR0ZSwKICAgICAgUGFsbXRyZWU6IFRyZWVQYWxtLAogICAgICBQYW5kYSwKICAgICAgUGFuZWxCb3R0b20sCiAgICAgIFBhbmVsQm90dG9tQ2xvc2UsCiAgICAgIFBhbmVsQm90dG9tRGFzaGVkLAogICAgICBQYW5lbEJvdHRvbUluYWN0aXZlOiBQYW5lbEJvdHRvbURhc2hlZCwKICAgICAgUGFuZWxCb3R0b21PcGVuLAogICAgICBQYW5lbExlZnQsCiAgICAgIFBhbmVsTGVmdENsb3NlLAogICAgICBQYW5lbExlZnREYXNoZWQsCiAgICAgIFBhbmVsTGVmdEluYWN0aXZlOiBQYW5lbExlZnREYXNoZWQsCiAgICAgIFBhbmVsTGVmdE9wZW4sCiAgICAgIFBhbmVsTGVmdFJpZ2h0RGFzaGVkLAogICAgICBQYW5lbFJpZ2h0LAogICAgICBQYW5lbFJpZ2h0Q2xvc2UsCiAgICAgIFBhbmVsUmlnaHREYXNoZWQsCiAgICAgIFBhbmVsUmlnaHRJbmFjdGl2ZTogUGFuZWxSaWdodERhc2hlZCwKICAgICAgUGFuZWxSaWdodE9wZW4sCiAgICAgIFBhbmVsVG9wLAogICAgICBQYW5lbFRvcEJvdHRvbURhc2hlZCwKICAgICAgUGFuZWxUb3BDbG9zZSwKICAgICAgUGFuZWxUb3BEYXNoZWQsCiAgICAgIFBhbmVsVG9wSW5hY3RpdmU6IFBhbmVsVG9wRGFzaGVkLAogICAgICBQYW5lbFRvcE9wZW4sCiAgICAgIFBhbmVsc0xlZnRCb3R0b20sCiAgICAgIFBhbmVsc0xlZnRSaWdodDogQ29sdW1uczMsCiAgICAgIFBhbmVsc1JpZ2h0Qm90dG9tLAogICAgICBQYW5lbHNUb3BCb3R0b206IFJvd3MzLAogICAgICBQYW5lbHNUb3BMZWZ0LAogICAgICBQYXBlcmNsaXAsCiAgICAgIFBhcmVudGhlc2VzLAogICAgICBQYXJraW5nQ2lyY2xlOiBDaXJjbGVQYXJraW5nLAogICAgICBQYXJraW5nQ2lyY2xlT2ZmOiBDaXJjbGVQYXJraW5nT2ZmLAogICAgICBQYXJraW5nTWV0ZXIsCiAgICAgIFBhcmtpbmdTcXVhcmU6IFNxdWFyZVBhcmtpbmcsCiAgICAgIFBhcmtpbmdTcXVhcmVPZmY6IFNxdWFyZVBhcmtpbmdPZmYsCiAgICAgIFBhcnR5UG9wcGVyLAogICAgICBQYXVzZSwKICAgICAgUGF1c2VDaXJjbGU6IENpcmNsZVBhdXNlLAogICAgICBQYXVzZU9jdGFnb246IE9jdGFnb25QYXVzZSwKICAgICAgUGF3UHJpbnQsCiAgICAgIFBjQ2FzZSwKICAgICAgUGVuLAogICAgICBQZW5Cb3g6IFNxdWFyZVBlbiwKICAgICAgUGVuTGluZSwKICAgICAgUGVuT2ZmLAogICAgICBQZW5TcXVhcmU6IFNxdWFyZVBlbiwKICAgICAgUGVuVG9vbCwKICAgICAgUGVuY2lsLAogICAgICBQZW5jaWxMaW5lLAogICAgICBQZW5jaWxPZmYsCiAgICAgIFBlbmNpbFJ1bGVyLAogICAgICBQZW50YWdvbiwKICAgICAgUGVyY2VudCwKICAgICAgUGVyY2VudENpcmNsZTogQ2lyY2xlUGVyY2VudCwKICAgICAgUGVyY2VudERpYW1vbmQ6IERpYW1vbmRQZXJjZW50LAogICAgICBQZXJjZW50U3F1YXJlOiBTcXVhcmVQZXJjZW50LAogICAgICBQZXJzb25TdGFuZGluZywKICAgICAgUGhpbGlwcGluZVBlc28sCiAgICAgIFBob25lLAogICAgICBQaG9uZUNhbGwsCiAgICAgIFBob25lRm9yd2FyZGVkLAogICAgICBQaG9uZUluY29taW5nLAogICAgICBQaG9uZU1pc3NlZCwKICAgICAgUGhvbmVPZmYsCiAgICAgIFBob25lT3V0Z29pbmcsCiAgICAgIFBpLAogICAgICBQaVNxdWFyZTogU3F1YXJlUGksCiAgICAgIFBpYW5vLAogICAgICBQaWNrYXhlLAogICAgICBQaWN0dXJlSW5QaWN0dXJlLAogICAgICBQaWN0dXJlSW5QaWN0dXJlMiwKICAgICAgUGllQ2hhcnQ6IENoYXJ0UGllLAogICAgICBQaWdneUJhbmssCiAgICAgIFBpbGNyb3csCiAgICAgIFBpbGNyb3dMZWZ0LAogICAgICBQaWxjcm93UmlnaHQsCiAgICAgIFBpbGNyb3dTcXVhcmU6IFNxdWFyZVBpbGNyb3csCiAgICAgIFBpbGwsCiAgICAgIFBpbGxCb3R0bGUsCiAgICAgIFBpbiwKICAgICAgUGluT2ZmLAogICAgICBQaXBldHRlLAogICAgICBQaXp6YSwKICAgICAgUGxhbmUsCiAgICAgIFBsYW5lTGFuZGluZywKICAgICAgUGxhbmVUYWtlb2ZmLAogICAgICBQbGF5LAogICAgICBQbGF5Q2lyY2xlOiBDaXJjbGVQbGF5LAogICAgICBQbGF5U3F1YXJlOiBTcXVhcmVQbGF5LAogICAgICBQbHVnLAogICAgICBQbHVnMiwKICAgICAgUGx1Z1phcCwKICAgICAgUGx1Z1phcDI6IFBsdWdaYXAsCiAgICAgIFBsdXMsCiAgICAgIFBsdXNDaXJjbGU6IENpcmNsZVBsdXMsCiAgICAgIFBsdXNTcXVhcmU6IFNxdWFyZVBsdXMsCiAgICAgIFBvY2tldCwKICAgICAgUG9ja2V0S25pZmUsCiAgICAgIFBvZGNhc3QsCiAgICAgIFBvaW50ZXIsCiAgICAgIFBvaW50ZXJPZmYsCiAgICAgIFBvcGNvcm4sCiAgICAgIFBvcHNpY2xlLAogICAgICBQb3VuZFN0ZXJsaW5nLAogICAgICBQb3dlciwKICAgICAgUG93ZXJDaXJjbGU6IENpcmNsZVBvd2VyLAogICAgICBQb3dlck9mZiwKICAgICAgUG93ZXJTcXVhcmU6IFNxdWFyZVBvd2VyLAogICAgICBQcmVzZW50YXRpb24sCiAgICAgIFByaW50ZXIsCiAgICAgIFByaW50ZXJDaGVjaywKICAgICAgUHJpbnRlclgsCiAgICAgIFByb2plY3RvciwKICAgICAgUHJvcG9ydGlvbnMsCiAgICAgIFB1enpsZSwKICAgICAgUHlyYW1pZCwKICAgICAgUXJDb2RlLAogICAgICBRdW90ZSwKICAgICAgUmFiYml0LAogICAgICBSYWRhciwKICAgICAgUmFkaWF0aW9uLAogICAgICBSYWRpY2FsLAogICAgICBSYWRpbywKICAgICAgUmFkaW9SZWNlaXZlciwKICAgICAgUmFkaW9Ub3dlciwKICAgICAgUmFkaXVzLAogICAgICBSYWlsU3ltYm9sLAogICAgICBSYWluYm93LAogICAgICBSYXQsCiAgICAgIFJhdGlvLAogICAgICBSZWNlaXB0LAogICAgICBSZWNlaXB0Q2VudCwKICAgICAgUmVjZWlwdEV1cm8sCiAgICAgIFJlY2VpcHRJbmRpYW5SdXBlZSwKICAgICAgUmVjZWlwdEphcGFuZXNlWWVuLAogICAgICBSZWNlaXB0UG91bmRTdGVybGluZywKICAgICAgUmVjZWlwdFJ1c3NpYW5SdWJsZSwKICAgICAgUmVjZWlwdFN3aXNzRnJhbmMsCiAgICAgIFJlY2VpcHRUZXh0LAogICAgICBSZWNlaXB0VHVya2lzaExpcmEsCiAgICAgIFJlY3RhbmdsZUNpcmNsZSwKICAgICAgUmVjdGFuZ2xlRWxsaXBzaXMsCiAgICAgIFJlY3RhbmdsZUdvZ2dsZXMsCiAgICAgIFJlY3RhbmdsZUhvcml6b250YWwsCiAgICAgIFJlY3RhbmdsZVZlcnRpY2FsLAogICAgICBSZWN5Y2xlLAogICAgICBSZWRvLAogICAgICBSZWRvMiwKICAgICAgUmVkb0RvdCwKICAgICAgUmVmcmVzaENjdywKICAgICAgUmVmcmVzaENjd0RvdCwKICAgICAgUmVmcmVzaEN3LAogICAgICBSZWZyZXNoQ3dPZmYsCiAgICAgIFJlZnJpZ2VyYXRvciwKICAgICAgUmVnZXgsCiAgICAgIFJlbW92ZUZvcm1hdHRpbmcsCiAgICAgIFJlcGVhdCwKICAgICAgUmVwZWF0MSwKICAgICAgUmVwZWF0MiwKICAgICAgUmVwbGFjZSwKICAgICAgUmVwbGFjZUFsbCwKICAgICAgUmVwbHksCiAgICAgIFJlcGx5QWxsLAogICAgICBSZXdpbmQsCiAgICAgIFJpYmJvbiwKICAgICAgUm9ja2V0LAogICAgICBSb2NraW5nQ2hhaXIsCiAgICAgIFJvbGxlckNvYXN0ZXIsCiAgICAgIFJvc2UsCiAgICAgIFJvdGF0ZTNEOiBSb3RhdGUzZCwKICAgICAgUm90YXRlM2QsCiAgICAgIFJvdGF0ZUNjdywKICAgICAgUm90YXRlQ2N3S2V5LAogICAgICBSb3RhdGVDY3dTcXVhcmUsCiAgICAgIFJvdGF0ZUN3LAogICAgICBSb3RhdGVDd1NxdWFyZSwKICAgICAgUm91dGUsCiAgICAgIFJvdXRlT2ZmLAogICAgICBSb3V0ZXIsCiAgICAgIFJvd3M6IFJvd3MyLAogICAgICBSb3dzMiwKICAgICAgUm93czMsCiAgICAgIFJvd3M0LAogICAgICBSc3MsCiAgICAgIFJ1bGVyLAogICAgICBSdWxlckRpbWVuc2lvbkxpbmUsCiAgICAgIFJ1c3NpYW5SdWJsZSwKICAgICAgU2FpbGJvYXQsCiAgICAgIFNhbGFkLAogICAgICBTYW5kd2ljaCwKICAgICAgU2F0ZWxsaXRlLAogICAgICBTYXRlbGxpdGVEaXNoLAogICAgICBTYXVkaVJpeWFsLAogICAgICBTYXZlLAogICAgICBTYXZlQWxsLAogICAgICBTYXZlT2ZmLAogICAgICBTY2FsZSwKICAgICAgU2NhbGUzRDogU2NhbGUzZCwKICAgICAgU2NhbGUzZCwKICAgICAgU2NhbGluZywKICAgICAgU2NhbiwKICAgICAgU2NhbkJhcmNvZGUsCiAgICAgIFNjYW5FeWUsCiAgICAgIFNjYW5GYWNlLAogICAgICBTY2FuSGVhcnQsCiAgICAgIFNjYW5MaW5lLAogICAgICBTY2FuUXJDb2RlLAogICAgICBTY2FuU2VhcmNoLAogICAgICBTY2FuVGV4dCwKICAgICAgU2NhdHRlckNoYXJ0OiBDaGFydFNjYXR0ZXIsCiAgICAgIFNjaG9vbCwKICAgICAgU2Nob29sMjogVW5pdmVyc2l0eSwKICAgICAgU2Npc3NvcnMsCiAgICAgIFNjaXNzb3JzTGluZURhc2hlZCwKICAgICAgU2Npc3NvcnNTcXVhcmU6IFNxdWFyZVNjaXNzb3JzLAogICAgICBTY2lzc29yc1NxdWFyZURhc2hlZEJvdHRvbTogU3F1YXJlQm90dG9tRGFzaGVkU2Npc3NvcnMsCiAgICAgIFNjb290ZXIsCiAgICAgIFNjcmVlblNoYXJlLAogICAgICBTY3JlZW5TaGFyZU9mZiwKICAgICAgU2Nyb2xsLAogICAgICBTY3JvbGxUZXh0LAogICAgICBTZWFyY2gsCiAgICAgIFNlYXJjaEFsZXJ0LAogICAgICBTZWFyY2hDaGVjaywKICAgICAgU2VhcmNoQ29kZSwKICAgICAgU2VhcmNoU2xhc2gsCiAgICAgIFNlYXJjaFgsCiAgICAgIFNlY3Rpb24sCiAgICAgIFNlbmQsCiAgICAgIFNlbmRIb3Jpem9uYWw6IFNlbmRIb3Jpem9udGFsLAogICAgICBTZW5kSG9yaXpvbnRhbCwKICAgICAgU2VuZFRvQmFjaywKICAgICAgU2VwYXJhdG9ySG9yaXpvbnRhbCwKICAgICAgU2VwYXJhdG9yVmVydGljYWwsCiAgICAgIFNlcnZlciwKICAgICAgU2VydmVyQ29nLAogICAgICBTZXJ2ZXJDcmFzaCwKICAgICAgU2VydmVyT2ZmLAogICAgICBTZXR0aW5ncywKICAgICAgU2V0dGluZ3MyLAogICAgICBTaGFwZXMsCiAgICAgIFNoYXJlLAogICAgICBTaGFyZTIsCiAgICAgIFNoZWV0LAogICAgICBTaGVsbCwKICAgICAgU2hpZWxkLAogICAgICBTaGllbGRBbGVydCwKICAgICAgU2hpZWxkQmFuLAogICAgICBTaGllbGRDaGVjaywKICAgICAgU2hpZWxkQ2xvc2U6IFNoaWVsZFgsCiAgICAgIFNoaWVsZEVsbGlwc2lzLAogICAgICBTaGllbGRIYWxmLAogICAgICBTaGllbGRNaW51cywKICAgICAgU2hpZWxkT2ZmLAogICAgICBTaGllbGRQbHVzLAogICAgICBTaGllbGRRdWVzdGlvbjogU2hpZWxkUXVlc3Rpb25NYXJrLAogICAgICBTaGllbGRRdWVzdGlvbk1hcmssCiAgICAgIFNoaWVsZFVzZXIsCiAgICAgIFNoaWVsZFgsCiAgICAgIFNoaXAsCiAgICAgIFNoaXBXaGVlbCwKICAgICAgU2hpcnQsCiAgICAgIFNob3BwaW5nQmFnLAogICAgICBTaG9wcGluZ0Jhc2tldCwKICAgICAgU2hvcHBpbmdDYXJ0LAogICAgICBTaG92ZWwsCiAgICAgIFNob3dlckhlYWQsCiAgICAgIFNocmVkZGVyLAogICAgICBTaHJpbXAsCiAgICAgIFNocmluaywKICAgICAgU2hydWIsCiAgICAgIFNodWZmbGUsCiAgICAgIFNpZGViYXI6IFBhbmVsTGVmdCwKICAgICAgU2lkZWJhckNsb3NlOiBQYW5lbExlZnRDbG9zZSwKICAgICAgU2lkZWJhck9wZW46IFBhbmVsTGVmdE9wZW4sCiAgICAgIFNpZ21hLAogICAgICBTaWdtYVNxdWFyZTogU3F1YXJlU2lnbWEsCiAgICAgIFNpZ25hbCwKICAgICAgU2lnbmFsSGlnaCwKICAgICAgU2lnbmFsTG93LAogICAgICBTaWduYWxNZWRpdW0sCiAgICAgIFNpZ25hbFplcm8sCiAgICAgIFNpZ25hdHVyZSwKICAgICAgU2lnbnBvc3QsCiAgICAgIFNpZ25wb3N0QmlnLAogICAgICBTaXJlbiwKICAgICAgU2tpcEJhY2ssCiAgICAgIFNraXBGb3J3YXJkLAogICAgICBTa3VsbCwKICAgICAgU2xhY2ssCiAgICAgIFNsYXNoLAogICAgICBTbGFzaFNxdWFyZTogU3F1YXJlU2xhc2gsCiAgICAgIFNsaWNlLAogICAgICBTbGlkZXJzOiBTbGlkZXJzVmVydGljYWwsCiAgICAgIFNsaWRlcnNIb3Jpem9udGFsLAogICAgICBTbGlkZXJzVmVydGljYWwsCiAgICAgIFNtYXJ0cGhvbmUsCiAgICAgIFNtYXJ0cGhvbmVDaGFyZ2luZywKICAgICAgU21hcnRwaG9uZU5mYywKICAgICAgU21pbGUsCiAgICAgIFNtaWxlUGx1cywKICAgICAgU25haWwsCiAgICAgIFNub3dmbGFrZSwKICAgICAgU29hcERpc3BlbnNlckRyb3BsZXQsCiAgICAgIFNvZmEsCiAgICAgIFNvbGFyUGFuZWwsCiAgICAgIFNvcnRBc2M6IEFycm93VXBOYXJyb3dXaWRlLAogICAgICBTb3J0RGVzYzogQXJyb3dEb3duV2lkZU5hcnJvdywKICAgICAgU291cCwKICAgICAgU3BhY2UsCiAgICAgIFNwYWRlLAogICAgICBTcGFya2xlLAogICAgICBTcGFya2xlcywKICAgICAgU3BlYWtlciwKICAgICAgU3BlZWNoLAogICAgICBTcGVsbENoZWNrLAogICAgICBTcGVsbENoZWNrMiwKICAgICAgU3BsaW5lLAogICAgICBTcGxpbmVQb2ludGVyLAogICAgICBTcGxpdCwKICAgICAgU3BsaXRTcXVhcmVIb3Jpem9udGFsOiBTcXVhcmVTcGxpdEhvcml6b250YWwsCiAgICAgIFNwbGl0U3F1YXJlVmVydGljYWw6IFNxdWFyZVNwbGl0VmVydGljYWwsCiAgICAgIFNwb29sLAogICAgICBTcG90bGlnaHQsCiAgICAgIFNwcmF5Q2FuLAogICAgICBTcHJvdXQsCiAgICAgIFNxdWFyZSwKICAgICAgU3F1YXJlQWN0aXZpdHksCiAgICAgIFNxdWFyZUFycm93RG93biwKICAgICAgU3F1YXJlQXJyb3dEb3duTGVmdCwKICAgICAgU3F1YXJlQXJyb3dEb3duUmlnaHQsCiAgICAgIFNxdWFyZUFycm93TGVmdCwKICAgICAgU3F1YXJlQXJyb3dPdXREb3duTGVmdCwKICAgICAgU3F1YXJlQXJyb3dPdXREb3duUmlnaHQsCiAgICAgIFNxdWFyZUFycm93T3V0VXBMZWZ0LAogICAgICBTcXVhcmVBcnJvd091dFVwUmlnaHQsCiAgICAgIFNxdWFyZUFycm93UmlnaHQsCiAgICAgIFNxdWFyZUFycm93VXAsCiAgICAgIFNxdWFyZUFycm93VXBMZWZ0LAogICAgICBTcXVhcmVBcnJvd1VwUmlnaHQsCiAgICAgIFNxdWFyZUFzdGVyaXNrLAogICAgICBTcXVhcmVCb3R0b21EYXNoZWRTY2lzc29ycywKICAgICAgU3F1YXJlQ2hhcnRHYW50dCwKICAgICAgU3F1YXJlQ2hlY2ssCiAgICAgIFNxdWFyZUNoZWNrQmlnLAogICAgICBTcXVhcmVDaGV2cm9uRG93biwKICAgICAgU3F1YXJlQ2hldnJvbkxlZnQsCiAgICAgIFNxdWFyZUNoZXZyb25SaWdodCwKICAgICAgU3F1YXJlQ2hldnJvblVwLAogICAgICBTcXVhcmVDb2RlLAogICAgICBTcXVhcmVEYXNoZWQsCiAgICAgIFNxdWFyZURhc2hlZEJvdHRvbSwKICAgICAgU3F1YXJlRGFzaGVkQm90dG9tQ29kZSwKICAgICAgU3F1YXJlRGFzaGVkS2FuYmFuLAogICAgICBTcXVhcmVEYXNoZWRNb3VzZVBvaW50ZXIsCiAgICAgIFNxdWFyZURhc2hlZFRvcFNvbGlkLAogICAgICBTcXVhcmVEaXZpZGUsCiAgICAgIFNxdWFyZURvdCwKICAgICAgU3F1YXJlRXF1YWwsCiAgICAgIFNxdWFyZUZ1bmN0aW9uLAogICAgICBTcXVhcmVHYW50dENoYXJ0OiBTcXVhcmVDaGFydEdhbnR0LAogICAgICBTcXVhcmVLYW5iYW4sCiAgICAgIFNxdWFyZUxpYnJhcnksCiAgICAgIFNxdWFyZU0sCiAgICAgIFNxdWFyZU1lbnUsCiAgICAgIFNxdWFyZU1pbnVzLAogICAgICBTcXVhcmVNb3VzZVBvaW50ZXIsCiAgICAgIFNxdWFyZVBhcmtpbmcsCiAgICAgIFNxdWFyZVBhcmtpbmdPZmYsCiAgICAgIFNxdWFyZVBhdXNlLAogICAgICBTcXVhcmVQZW4sCiAgICAgIFNxdWFyZVBlcmNlbnQsCiAgICAgIFNxdWFyZVBpLAogICAgICBTcXVhcmVQaWxjcm93LAogICAgICBTcXVhcmVQbGF5LAogICAgICBTcXVhcmVQbHVzLAogICAgICBTcXVhcmVQb3dlciwKICAgICAgU3F1YXJlUmFkaWNhbCwKICAgICAgU3F1YXJlUm91bmRDb3JuZXIsCiAgICAgIFNxdWFyZVNjaXNzb3JzLAogICAgICBTcXVhcmVTaWdtYSwKICAgICAgU3F1YXJlU2xhc2gsCiAgICAgIFNxdWFyZVNwbGl0SG9yaXpvbnRhbCwKICAgICAgU3F1YXJlU3BsaXRWZXJ0aWNhbCwKICAgICAgU3F1YXJlU3F1YXJlLAogICAgICBTcXVhcmVTdGFjaywKICAgICAgU3F1YXJlU3RhciwKICAgICAgU3F1YXJlU3RvcCwKICAgICAgU3F1YXJlVGVybWluYWwsCiAgICAgIFNxdWFyZVVzZXIsCiAgICAgIFNxdWFyZVVzZXJSb3VuZCwKICAgICAgU3F1YXJlWCwKICAgICAgU3F1YXJlc0V4Y2x1ZGUsCiAgICAgIFNxdWFyZXNJbnRlcnNlY3QsCiAgICAgIFNxdWFyZXNTdWJ0cmFjdCwKICAgICAgU3F1YXJlc1VuaXRlLAogICAgICBTcXVpcmNsZSwKICAgICAgU3F1aXJjbGVEYXNoZWQsCiAgICAgIFNxdWlycmVsLAogICAgICBTdGFtcCwKICAgICAgU3RhciwKICAgICAgU3RhckhhbGYsCiAgICAgIFN0YXJPZmYsCiAgICAgIFN0YXJzOiBTcGFya2xlcywKICAgICAgU3RlcEJhY2ssCiAgICAgIFN0ZXBGb3J3YXJkLAogICAgICBTdGV0aG9zY29wZSwKICAgICAgU3RpY2tlciwKICAgICAgU3RpY2t5Tm90ZSwKICAgICAgU3RvbmUsCiAgICAgIFN0b3BDaXJjbGU6IENpcmNsZVN0b3AsCiAgICAgIFN0b3JlLAogICAgICBTdHJldGNoSG9yaXpvbnRhbCwKICAgICAgU3RyZXRjaFZlcnRpY2FsLAogICAgICBTdHJpa2V0aHJvdWdoLAogICAgICBTdWJzY3JpcHQsCiAgICAgIFN1YnRpdGxlczogQ2FwdGlvbnMsCiAgICAgIFN1biwKICAgICAgU3VuRGltLAogICAgICBTdW5NZWRpdW0sCiAgICAgIFN1bk1vb24sCiAgICAgIFN1blNub3csCiAgICAgIFN1bnJpc2UsCiAgICAgIFN1bnNldCwKICAgICAgU3VwZXJzY3JpcHQsCiAgICAgIFN3YXRjaEJvb2ssCiAgICAgIFN3aXNzRnJhbmMsCiAgICAgIFN3aXRjaENhbWVyYSwKICAgICAgU3dvcmQsCiAgICAgIFN3b3JkcywKICAgICAgU3lyaW5nZSwKICAgICAgVGFibGUsCiAgICAgIFRhYmxlMiwKICAgICAgVGFibGVDZWxsc01lcmdlLAogICAgICBUYWJsZUNlbGxzU3BsaXQsCiAgICAgIFRhYmxlQ29sdW1uc1NwbGl0LAogICAgICBUYWJsZUNvbmZpZzogQ29sdW1uczNDb2csCiAgICAgIFRhYmxlT2ZDb250ZW50cywKICAgICAgVGFibGVQcm9wZXJ0aWVzLAogICAgICBUYWJsZVJvd3NTcGxpdCwKICAgICAgVGFibGV0LAogICAgICBUYWJsZXRTbWFydHBob25lLAogICAgICBUYWJsZXRzLAogICAgICBUYWc6IFRhZzIsCiAgICAgIFRhZ3MsCiAgICAgIFRhbGx5MSwKICAgICAgVGFsbHkyLAogICAgICBUYWxseTMsCiAgICAgIFRhbGx5NCwKICAgICAgVGFsbHk1LAogICAgICBUYW5nZW50LAogICAgICBUYXJnZXQsCiAgICAgIFRlbGVzY29wZSwKICAgICAgVGVudCwKICAgICAgVGVudFRyZWUsCiAgICAgIFRlcm1pbmFsLAogICAgICBUZXJtaW5hbFNxdWFyZTogU3F1YXJlVGVybWluYWwsCiAgICAgIFRlc3RUdWJlLAogICAgICBUZXN0VHViZTI6IFRlc3RUdWJlRGlhZ29uYWwsCiAgICAgIFRlc3RUdWJlRGlhZ29uYWwsCiAgICAgIFRlc3RUdWJlcywKICAgICAgVGV4dDogVGV4dEFsaWduU3RhcnQsCiAgICAgIFRleHRBbGlnbkNlbnRlciwKICAgICAgVGV4dEFsaWduRW5kLAogICAgICBUZXh0QWxpZ25KdXN0aWZ5LAogICAgICBUZXh0QWxpZ25TdGFydCwKICAgICAgVGV4dEN1cnNvciwKICAgICAgVGV4dEN1cnNvcklucHV0LAogICAgICBUZXh0SW5pdGlhbCwKICAgICAgVGV4dFF1b3RlLAogICAgICBUZXh0U2VhcmNoLAogICAgICBUZXh0U2VsZWN0LAogICAgICBUZXh0U2VsZWN0aW9uOiBUZXh0U2VsZWN0LAogICAgICBUZXh0V3JhcCwKICAgICAgVGhlYXRlciwKICAgICAgVGhlcm1vbWV0ZXIsCiAgICAgIFRoZXJtb21ldGVyU25vd2ZsYWtlLAogICAgICBUaGVybW9tZXRlclN1biwKICAgICAgVGh1bWJzRG93biwKICAgICAgVGh1bWJzVXAsCiAgICAgIFRpY2tldCwKICAgICAgVGlja2V0Q2hlY2ssCiAgICAgIFRpY2tldE1pbnVzLAogICAgICBUaWNrZXRQZXJjZW50LAogICAgICBUaWNrZXRQbHVzLAogICAgICBUaWNrZXRTbGFzaCwKICAgICAgVGlja2V0WCwKICAgICAgVGlja2V0cywKICAgICAgVGlja2V0c1BsYW5lLAogICAgICBUaW1lcjogVGltZXIyLAogICAgICBUaW1lck9mZiwKICAgICAgVGltZXJSZXNldCwKICAgICAgVG9nZ2xlTGVmdCwKICAgICAgVG9nZ2xlUmlnaHQsCiAgICAgIFRvaWxldCwKICAgICAgVG9vbENhc2UsCiAgICAgIFRvb2xib3gsCiAgICAgIFRvcm5hZG8sCiAgICAgIFRvcnVzLAogICAgICBUb3VjaHBhZCwKICAgICAgVG91Y2hwYWRPZmYsCiAgICAgIFRvd2VyQ29udHJvbCwKICAgICAgVG95QnJpY2ssCiAgICAgIFRyYWN0b3IsCiAgICAgIFRyYWZmaWNDb25lLAogICAgICBUcmFpbjogVHJhbUZyb250LAogICAgICBUcmFpbkZyb250LAogICAgICBUcmFpbkZyb250VHVubmVsLAogICAgICBUcmFpblRyYWNrLAogICAgICBUcmFtRnJvbnQsCiAgICAgIFRyYW5zZ2VuZGVyLAogICAgICBUcmFzaCwKICAgICAgVHJhc2gyLAogICAgICBUcmVlRGVjaWR1b3VzLAogICAgICBUcmVlUGFsbSwKICAgICAgVHJlZVBpbmUsCiAgICAgIFRyZWVzLAogICAgICBUcmVsbG8sCiAgICAgIFRyZW5kaW5nRG93biwKICAgICAgVHJlbmRpbmdVcCwKICAgICAgVHJlbmRpbmdVcERvd24sCiAgICAgIFRyaWFuZ2xlLAogICAgICBUcmlhbmdsZUFsZXJ0LAogICAgICBUcmlhbmdsZURhc2hlZCwKICAgICAgVHJpYW5nbGVSaWdodCwKICAgICAgVHJvcGh5LAogICAgICBUcnVjaywKICAgICAgVHJ1Y2tFbGVjdHJpYywKICAgICAgVHVya2lzaExpcmEsCiAgICAgIFR1cm50YWJsZSwKICAgICAgVHVydGxlLAogICAgICBUdiwKICAgICAgVHYyOiBUdk1pbmltYWwsCiAgICAgIFR2TWluaW1hbCwKICAgICAgVHZNaW5pbWFsUGxheSwKICAgICAgVHdpdGNoLAogICAgICBUd2l0dGVyLAogICAgICBUeXBlLAogICAgICBUeXBlT3V0bGluZSwKICAgICAgVW1icmVsbGEsCiAgICAgIFVtYnJlbGxhT2ZmLAogICAgICBVbmRlcmxpbmUsCiAgICAgIFVuZG8sCiAgICAgIFVuZG8yLAogICAgICBVbmRvRG90LAogICAgICBVbmZvbGRIb3Jpem9udGFsLAogICAgICBVbmZvbGRWZXJ0aWNhbCwKICAgICAgVW5ncm91cCwKICAgICAgVW5pdmVyc2l0eSwKICAgICAgVW5saW5rLAogICAgICBVbmxpbmsyLAogICAgICBVbmxvY2s6IExvY2tPcGVuLAogICAgICBVbmxvY2tLZXlob2xlOiBMb2NrS2V5aG9sZU9wZW4sCiAgICAgIFVucGx1ZywKICAgICAgVXBsb2FkLAogICAgICBVcGxvYWRDbG91ZDogQ2xvdWRVcGxvYWQsCiAgICAgIFVzYiwKICAgICAgVXNlciwKICAgICAgVXNlcjI6IFVzZXJSb3VuZCwKICAgICAgVXNlckNoZWNrLAogICAgICBVc2VyQ2hlY2syOiBVc2VyUm91bmRDaGVjaywKICAgICAgVXNlckNpcmNsZTogQ2lyY2xlVXNlciwKICAgICAgVXNlckNpcmNsZTI6IENpcmNsZVVzZXJSb3VuZCwKICAgICAgVXNlckNvZywKICAgICAgVXNlckNvZzI6IFVzZXJSb3VuZENvZywKICAgICAgVXNlckxvY2ssCiAgICAgIFVzZXJNaW51cywKICAgICAgVXNlck1pbnVzMjogVXNlclJvdW5kTWludXMsCiAgICAgIFVzZXJQZW4sCiAgICAgIFVzZXJQbHVzLAogICAgICBVc2VyUGx1czI6IFVzZXJSb3VuZFBsdXMsCiAgICAgIFVzZXJSb3VuZCwKICAgICAgVXNlclJvdW5kQ2hlY2ssCiAgICAgIFVzZXJSb3VuZENvZywKICAgICAgVXNlclJvdW5kTWludXMsCiAgICAgIFVzZXJSb3VuZFBlbiwKICAgICAgVXNlclJvdW5kUGx1cywKICAgICAgVXNlclJvdW5kU2VhcmNoLAogICAgICBVc2VyUm91bmRYLAogICAgICBVc2VyU2VhcmNoLAogICAgICBVc2VyU3F1YXJlOiBTcXVhcmVVc2VyLAogICAgICBVc2VyU3F1YXJlMjogU3F1YXJlVXNlclJvdW5kLAogICAgICBVc2VyU3RhciwKICAgICAgVXNlclgsCiAgICAgIFVzZXJYMjogVXNlclJvdW5kWCwKICAgICAgVXNlcnMsCiAgICAgIFVzZXJzMjogVXNlcnNSb3VuZCwKICAgICAgVXNlcnNSb3VuZCwKICAgICAgVXRlbnNpbHMsCiAgICAgIFV0ZW5zaWxzQ3Jvc3NlZCwKICAgICAgVXRpbGl0eVBvbGUsCiAgICAgIFZhbiwKICAgICAgVmFyaWFibGUsCiAgICAgIFZhdWx0LAogICAgICBWZWN0b3JTcXVhcmUsCiAgICAgIFZlZ2FuLAogICAgICBWZW5ldGlhbk1hc2ssCiAgICAgIFZlbnVzLAogICAgICBWZW51c0FuZE1hcnMsCiAgICAgIFZlcmlmaWVkOiBCYWRnZUNoZWNrLAogICAgICBWaWJyYXRlLAogICAgICBWaWJyYXRlT2ZmLAogICAgICBWaWRlbywKICAgICAgVmlkZW9PZmYsCiAgICAgIFZpZGVvdGFwZSwKICAgICAgVmlldywKICAgICAgVm9pY2VtYWlsLAogICAgICBWb2xsZXliYWxsLAogICAgICBWb2x1bWUsCiAgICAgIFZvbHVtZTEsCiAgICAgIFZvbHVtZTIsCiAgICAgIFZvbHVtZU9mZiwKICAgICAgVm9sdW1lWCwKICAgICAgVm90ZSwKICAgICAgV2FsbGV0LAogICAgICBXYWxsZXQyOiBXYWxsZXRNaW5pbWFsLAogICAgICBXYWxsZXRDYXJkcywKICAgICAgV2FsbGV0TWluaW1hbCwKICAgICAgV2FsbHBhcGVyLAogICAgICBXYW5kLAogICAgICBXYW5kMjogV2FuZFNwYXJrbGVzLAogICAgICBXYW5kU3BhcmtsZXMsCiAgICAgIFdhcmVob3VzZSwKICAgICAgV2FzaGluZ01hY2hpbmUsCiAgICAgIFdhdGNoLAogICAgICBXYXZlcywKICAgICAgV2F2ZXNBcnJvd0Rvd24sCiAgICAgIFdhdmVzQXJyb3dVcCwKICAgICAgV2F2ZXNMYWRkZXIsCiAgICAgIFdheXBvaW50cywKICAgICAgV2ViY2FtLAogICAgICBXZWJob29rLAogICAgICBXZWJob29rT2ZmLAogICAgICBXZWlnaHQsCiAgICAgIFdlaWdodFRpbGRlLAogICAgICBXaGVhdCwKICAgICAgV2hlYXRPZmYsCiAgICAgIFdob2xlV29yZCwKICAgICAgV2lmaSwKICAgICAgV2lmaUNvZywKICAgICAgV2lmaUhpZ2gsCiAgICAgIFdpZmlMb3csCiAgICAgIFdpZmlPZmYsCiAgICAgIFdpZmlQZW4sCiAgICAgIFdpZmlTeW5jLAogICAgICBXaWZpWmVybywKICAgICAgV2luZCwKICAgICAgV2luZEFycm93RG93biwKICAgICAgV2luZSwKICAgICAgV2luZU9mZiwKICAgICAgV29ya2Zsb3csCiAgICAgIFdvcm0sCiAgICAgIFdyYXBUZXh0OiBUZXh0V3JhcCwKICAgICAgV3JlbmNoLAogICAgICBYLAogICAgICBYQ2lyY2xlOiBDaXJjbGVYLAogICAgICBYT2N0YWdvbjogT2N0YWdvblgsCiAgICAgIFhTcXVhcmU6IFNxdWFyZVgsCiAgICAgIFlvdXR1YmUsCiAgICAgIFphcCwKICAgICAgWmFwT2ZmLAogICAgICBab29tSW4sCiAgICAgIFpvb21PdXQKICAgIH0pOwogICAgdmFyIGNyZWF0ZUljb25zID0gKHsKICAgICAgaWNvbnM6IGljb25zNiA9IHt9LAogICAgICBuYW1lQXR0ciA9ICJkYXRhLWx1Y2lkZSIsCiAgICAgIGF0dHJzID0ge30sCiAgICAgIHJvb3Q6IHJvb3Q2ID0gZG9jdW1lbnQsCiAgICAgIGluVGVtcGxhdGVzCiAgICB9ID0ge30pID0+IHsKICAgICAgaWYgKCFPYmplY3QudmFsdWVzKGljb25zNikubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgIlBsZWFzZSBwcm92aWRlIGFuIGljb25zIG9iamVjdC5cbklmIHlvdSB3YW50IHRvIHVzZSBhbGwgdGhlIGljb25zIHlvdSBjYW4gaW1wb3J0IGl0IGxpa2U6XG4gYGltcG9ydCB7IGNyZWF0ZUljb25zLCBpY29ucyB9IGZyb20gJ2x1Y2lkZSc7XG5sdWNpZGUuY3JlYXRlSWNvbnMoe2ljb25zfSk7YCIKICAgICAgICApOwogICAgICB9CiAgICAgIGlmICh0eXBlb2Ygcm9vdDYgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJgY3JlYXRlSWNvbnMoKWAgb25seSB3b3JrcyBpbiBhIGJyb3dzZXIgZW52aXJvbm1lbnQuIik7CiAgICAgIH0KICAgICAgY29uc3QgZWxlbWVudHNUb1JlcGxhY2UgPSBBcnJheS5mcm9tKHJvb3Q2LnF1ZXJ5U2VsZWN0b3JBbGwoYFske25hbWVBdHRyfV1gKSk7CiAgICAgIGVsZW1lbnRzVG9SZXBsYWNlLmZvckVhY2goKGVsZW1lbnQ0KSA9PiByZXBsYWNlRWxlbWVudChlbGVtZW50NCwgeyBuYW1lQXR0ciwgaWNvbnM6IGljb25zNiwgYXR0cnMgfSkpOwogICAgICBpZiAoaW5UZW1wbGF0ZXMpIHsKICAgICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBBcnJheS5mcm9tKHJvb3Q2LnF1ZXJ5U2VsZWN0b3JBbGwoInRlbXBsYXRlIikpOwogICAgICAgIHRlbXBsYXRlcy5mb3JFYWNoKAogICAgICAgICAgKHRlbXBsYXRlKSA9PiBjcmVhdGVJY29ucyh7CiAgICAgICAgICAgIGljb25zOiBpY29uczYsCiAgICAgICAgICAgIG5hbWVBdHRyLAogICAgICAgICAgICBhdHRycywKICAgICAgICAgICAgcm9vdDogdGVtcGxhdGUuY29udGVudCwKICAgICAgICAgICAgaW5UZW1wbGF0ZXMKICAgICAgICAgIH0pCiAgICAgICAgKTsKICAgICAgfQogICAgICBpZiAobmFtZUF0dHIgPT09ICJkYXRhLWx1Y2lkZSIpIHsKICAgICAgICBjb25zdCBkZXByZWNhdGVkRWxlbWVudHMgPSByb290Ni5xdWVyeVNlbGVjdG9yQWxsKCJbaWNvbi1uYW1lXSIpOwogICAgICAgIGlmIChkZXByZWNhdGVkRWxlbWVudHMubGVuZ3RoID4gMCkgewogICAgICAgICAgY29uc29sZS53YXJuKAogICAgICAgICAgICAiW0x1Y2lkZV0gU29tZSBpY29ucyB3ZXJlIGZvdW5kIHdpdGggdGhlIG5vdyBkZXByZWNhdGVkIGljb24tbmFtZSBhdHRyaWJ1dGUuIFRoZXNlIHdpbGwgc3RpbGwgYmUgcmVwbGFjZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBidXQgd2lsbCBubyBsb25nZXIgYmUgc3VwcG9ydGVkIGluIHYxLjAgYW5kIHlvdSBzaG91bGQgc3dpdGNoIHRvIGRhdGEtbHVjaWRlIgogICAgICAgICAgKTsKICAgICAgICAgIEFycmF5LmZyb20oZGVwcmVjYXRlZEVsZW1lbnRzKS5mb3JFYWNoKAogICAgICAgICAgICAoZWxlbWVudDQpID0+IHJlcGxhY2VFbGVtZW50KGVsZW1lbnQ0LCB7IG5hbWVBdHRyOiAiaWNvbi1uYW1lIiwgaWNvbnM6IGljb25zNiwgYXR0cnMgfSkKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgZXhwb3J0cy5BQXJyb3dEb3duID0gQUFycm93RG93bjsKICAgIGV4cG9ydHMuQUFycm93VXAgPSBBQXJyb3dVcDsKICAgIGV4cG9ydHMuQUxhcmdlU21hbGwgPSBBTGFyZ2VTbWFsbDsKICAgIGV4cG9ydHMuQWNjZXNzaWJpbGl0eSA9IEFjY2Vzc2liaWxpdHk7CiAgICBleHBvcnRzLkFjdGl2aXR5ID0gQWN0aXZpdHk7CiAgICBleHBvcnRzLkFjdGl2aXR5U3F1YXJlID0gU3F1YXJlQWN0aXZpdHk7CiAgICBleHBvcnRzLkFpclZlbnQgPSBBaXJWZW50OwogICAgZXhwb3J0cy5BaXJwbGF5ID0gQWlycGxheTsKICAgIGV4cG9ydHMuQWxhcm1DaGVjayA9IEFsYXJtQ2xvY2tDaGVjazsKICAgIGV4cG9ydHMuQWxhcm1DbG9jayA9IEFsYXJtQ2xvY2s7CiAgICBleHBvcnRzLkFsYXJtQ2xvY2tDaGVjayA9IEFsYXJtQ2xvY2tDaGVjazsKICAgIGV4cG9ydHMuQWxhcm1DbG9ja01pbnVzID0gQWxhcm1DbG9ja01pbnVzOwogICAgZXhwb3J0cy5BbGFybUNsb2NrT2ZmID0gQWxhcm1DbG9ja09mZjsKICAgIGV4cG9ydHMuQWxhcm1DbG9ja1BsdXMgPSBBbGFybUNsb2NrUGx1czsKICAgIGV4cG9ydHMuQWxhcm1NaW51cyA9IEFsYXJtQ2xvY2tNaW51czsKICAgIGV4cG9ydHMuQWxhcm1QbHVzID0gQWxhcm1DbG9ja1BsdXM7CiAgICBleHBvcnRzLkFsYXJtU21va2UgPSBBbGFybVNtb2tlOwogICAgZXhwb3J0cy5BbGJ1bSA9IEFsYnVtOwogICAgZXhwb3J0cy5BbGVydENpcmNsZSA9IENpcmNsZUFsZXJ0OwogICAgZXhwb3J0cy5BbGVydE9jdGFnb24gPSBPY3RhZ29uQWxlcnQ7CiAgICBleHBvcnRzLkFsZXJ0VHJpYW5nbGUgPSBUcmlhbmdsZUFsZXJ0OwogICAgZXhwb3J0cy5BbGlnbkNlbnRlciA9IFRleHRBbGlnbkNlbnRlcjsKICAgIGV4cG9ydHMuQWxpZ25DZW50ZXJIb3Jpem9udGFsID0gQWxpZ25DZW50ZXJIb3Jpem9udGFsOwogICAgZXhwb3J0cy5BbGlnbkNlbnRlclZlcnRpY2FsID0gQWxpZ25DZW50ZXJWZXJ0aWNhbDsKICAgIGV4cG9ydHMuQWxpZ25FbmRIb3Jpem9udGFsID0gQWxpZ25FbmRIb3Jpem9udGFsOwogICAgZXhwb3J0cy5BbGlnbkVuZFZlcnRpY2FsID0gQWxpZ25FbmRWZXJ0aWNhbDsKICAgIGV4cG9ydHMuQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZUNlbnRlciA9IEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVDZW50ZXI7CiAgICBleHBvcnRzLkFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVFbmQgPSBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlRW5kOwogICAgZXhwb3J0cy5BbGlnbkhvcml6b250YWxEaXN0cmlidXRlU3RhcnQgPSBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlU3RhcnQ7CiAgICBleHBvcnRzLkFsaWduSG9yaXpvbnRhbEp1c3RpZnlDZW50ZXIgPSBBbGlnbkhvcml6b250YWxKdXN0aWZ5Q2VudGVyOwogICAgZXhwb3J0cy5BbGlnbkhvcml6b250YWxKdXN0aWZ5RW5kID0gQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUVuZDsKICAgIGV4cG9ydHMuQWxpZ25Ib3Jpem9udGFsSnVzdGlmeVN0YXJ0ID0gQWxpZ25Ib3Jpem9udGFsSnVzdGlmeVN0YXJ0OwogICAgZXhwb3J0cy5BbGlnbkhvcml6b250YWxTcGFjZUFyb3VuZCA9IEFsaWduSG9yaXpvbnRhbFNwYWNlQXJvdW5kOwogICAgZXhwb3J0cy5BbGlnbkhvcml6b250YWxTcGFjZUJldHdlZW4gPSBBbGlnbkhvcml6b250YWxTcGFjZUJldHdlZW47CiAgICBleHBvcnRzLkFsaWduSnVzdGlmeSA9IFRleHRBbGlnbkp1c3RpZnk7CiAgICBleHBvcnRzLkFsaWduTGVmdCA9IFRleHRBbGlnblN0YXJ0OwogICAgZXhwb3J0cy5BbGlnblJpZ2h0ID0gVGV4dEFsaWduRW5kOwogICAgZXhwb3J0cy5BbGlnblN0YXJ0SG9yaXpvbnRhbCA9IEFsaWduU3RhcnRIb3Jpem9udGFsOwogICAgZXhwb3J0cy5BbGlnblN0YXJ0VmVydGljYWwgPSBBbGlnblN0YXJ0VmVydGljYWw7CiAgICBleHBvcnRzLkFsaWduVmVydGljYWxEaXN0cmlidXRlQ2VudGVyID0gQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVDZW50ZXI7CiAgICBleHBvcnRzLkFsaWduVmVydGljYWxEaXN0cmlidXRlRW5kID0gQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVFbmQ7CiAgICBleHBvcnRzLkFsaWduVmVydGljYWxEaXN0cmlidXRlU3RhcnQgPSBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZVN0YXJ0OwogICAgZXhwb3J0cy5BbGlnblZlcnRpY2FsSnVzdGlmeUNlbnRlciA9IEFsaWduVmVydGljYWxKdXN0aWZ5Q2VudGVyOwogICAgZXhwb3J0cy5BbGlnblZlcnRpY2FsSnVzdGlmeUVuZCA9IEFsaWduVmVydGljYWxKdXN0aWZ5RW5kOwogICAgZXhwb3J0cy5BbGlnblZlcnRpY2FsSnVzdGlmeVN0YXJ0ID0gQWxpZ25WZXJ0aWNhbEp1c3RpZnlTdGFydDsKICAgIGV4cG9ydHMuQWxpZ25WZXJ0aWNhbFNwYWNlQXJvdW5kID0gQWxpZ25WZXJ0aWNhbFNwYWNlQXJvdW5kOwogICAgZXhwb3J0cy5BbGlnblZlcnRpY2FsU3BhY2VCZXR3ZWVuID0gQWxpZ25WZXJ0aWNhbFNwYWNlQmV0d2VlbjsKICAgIGV4cG9ydHMuQW1idWxhbmNlID0gQW1idWxhbmNlOwogICAgZXhwb3J0cy5BbXBlcnNhbmQgPSBBbXBlcnNhbmQ7CiAgICBleHBvcnRzLkFtcGVyc2FuZHMgPSBBbXBlcnNhbmRzOwogICAgZXhwb3J0cy5BbXBob3JhID0gQW1waG9yYTsKICAgIGV4cG9ydHMuQW5jaG9yID0gQW5jaG9yOwogICAgZXhwb3J0cy5BbmdyeSA9IEFuZ3J5OwogICAgZXhwb3J0cy5Bbm5veWVkID0gQW5ub3llZDsKICAgIGV4cG9ydHMuQW50ZW5uYSA9IEFudGVubmE7CiAgICBleHBvcnRzLkFudmlsID0gQW52aWw7CiAgICBleHBvcnRzLkFwZXJ0dXJlID0gQXBlcnR1cmU7CiAgICBleHBvcnRzLkFwcFdpbmRvdyA9IEFwcFdpbmRvdzsKICAgIGV4cG9ydHMuQXBwV2luZG93TWFjID0gQXBwV2luZG93TWFjOwogICAgZXhwb3J0cy5BcHBsZSA9IEFwcGxlOwogICAgZXhwb3J0cy5BcmNoaXZlID0gQXJjaGl2ZTsKICAgIGV4cG9ydHMuQXJjaGl2ZVJlc3RvcmUgPSBBcmNoaXZlUmVzdG9yZTsKICAgIGV4cG9ydHMuQXJjaGl2ZVggPSBBcmNoaXZlWDsKICAgIGV4cG9ydHMuQXJlYUNoYXJ0ID0gQ2hhcnRBcmVhOwogICAgZXhwb3J0cy5Bcm1jaGFpciA9IEFybWNoYWlyOwogICAgZXhwb3J0cy5BcnJvd0JpZ0Rvd24gPSBBcnJvd0JpZ0Rvd247CiAgICBleHBvcnRzLkFycm93QmlnRG93bkRhc2ggPSBBcnJvd0JpZ0Rvd25EYXNoOwogICAgZXhwb3J0cy5BcnJvd0JpZ0xlZnQgPSBBcnJvd0JpZ0xlZnQ7CiAgICBleHBvcnRzLkFycm93QmlnTGVmdERhc2ggPSBBcnJvd0JpZ0xlZnREYXNoOwogICAgZXhwb3J0cy5BcnJvd0JpZ1JpZ2h0ID0gQXJyb3dCaWdSaWdodDsKICAgIGV4cG9ydHMuQXJyb3dCaWdSaWdodERhc2ggPSBBcnJvd0JpZ1JpZ2h0RGFzaDsKICAgIGV4cG9ydHMuQXJyb3dCaWdVcCA9IEFycm93QmlnVXA7CiAgICBleHBvcnRzLkFycm93QmlnVXBEYXNoID0gQXJyb3dCaWdVcERhc2g7CiAgICBleHBvcnRzLkFycm93RG93biA9IEFycm93RG93bjsKICAgIGV4cG9ydHMuQXJyb3dEb3duMDEgPSBBcnJvd0Rvd24wMTsKICAgIGV4cG9ydHMuQXJyb3dEb3duMTAgPSBBcnJvd0Rvd24xMDsKICAgIGV4cG9ydHMuQXJyb3dEb3duQVogPSBBcnJvd0Rvd25BWjsKICAgIGV4cG9ydHMuQXJyb3dEb3duQXogPSBBcnJvd0Rvd25BWjsKICAgIGV4cG9ydHMuQXJyb3dEb3duQ2lyY2xlID0gQ2lyY2xlQXJyb3dEb3duOwogICAgZXhwb3J0cy5BcnJvd0Rvd25Gcm9tTGluZSA9IEFycm93RG93bkZyb21MaW5lOwogICAgZXhwb3J0cy5BcnJvd0Rvd25MZWZ0ID0gQXJyb3dEb3duTGVmdDsKICAgIGV4cG9ydHMuQXJyb3dEb3duTGVmdEZyb21DaXJjbGUgPSBDaXJjbGVBcnJvd091dERvd25MZWZ0OwogICAgZXhwb3J0cy5BcnJvd0Rvd25MZWZ0RnJvbVNxdWFyZSA9IFNxdWFyZUFycm93T3V0RG93bkxlZnQ7CiAgICBleHBvcnRzLkFycm93RG93bkxlZnRTcXVhcmUgPSBTcXVhcmVBcnJvd0Rvd25MZWZ0OwogICAgZXhwb3J0cy5BcnJvd0Rvd25OYXJyb3dXaWRlID0gQXJyb3dEb3duTmFycm93V2lkZTsKICAgIGV4cG9ydHMuQXJyb3dEb3duUmlnaHQgPSBBcnJvd0Rvd25SaWdodDsKICAgIGV4cG9ydHMuQXJyb3dEb3duUmlnaHRGcm9tQ2lyY2xlID0gQ2lyY2xlQXJyb3dPdXREb3duUmlnaHQ7CiAgICBleHBvcnRzLkFycm93RG93blJpZ2h0RnJvbVNxdWFyZSA9IFNxdWFyZUFycm93T3V0RG93blJpZ2h0OwogICAgZXhwb3J0cy5BcnJvd0Rvd25SaWdodFNxdWFyZSA9IFNxdWFyZUFycm93RG93blJpZ2h0OwogICAgZXhwb3J0cy5BcnJvd0Rvd25TcXVhcmUgPSBTcXVhcmVBcnJvd0Rvd247CiAgICBleHBvcnRzLkFycm93RG93blRvRG90ID0gQXJyb3dEb3duVG9Eb3Q7CiAgICBleHBvcnRzLkFycm93RG93blRvTGluZSA9IEFycm93RG93blRvTGluZTsKICAgIGV4cG9ydHMuQXJyb3dEb3duVXAgPSBBcnJvd0Rvd25VcDsKICAgIGV4cG9ydHMuQXJyb3dEb3duV2lkZU5hcnJvdyA9IEFycm93RG93bldpZGVOYXJyb3c7CiAgICBleHBvcnRzLkFycm93RG93blpBID0gQXJyb3dEb3duWkE7CiAgICBleHBvcnRzLkFycm93RG93blphID0gQXJyb3dEb3duWkE7CiAgICBleHBvcnRzLkFycm93TGVmdCA9IEFycm93TGVmdDsKICAgIGV4cG9ydHMuQXJyb3dMZWZ0Q2lyY2xlID0gQ2lyY2xlQXJyb3dMZWZ0OwogICAgZXhwb3J0cy5BcnJvd0xlZnRGcm9tTGluZSA9IEFycm93TGVmdEZyb21MaW5lOwogICAgZXhwb3J0cy5BcnJvd0xlZnRSaWdodCA9IEFycm93TGVmdFJpZ2h0OwogICAgZXhwb3J0cy5BcnJvd0xlZnRTcXVhcmUgPSBTcXVhcmVBcnJvd0xlZnQ7CiAgICBleHBvcnRzLkFycm93TGVmdFRvTGluZSA9IEFycm93TGVmdFRvTGluZTsKICAgIGV4cG9ydHMuQXJyb3dSaWdodCA9IEFycm93UmlnaHQ7CiAgICBleHBvcnRzLkFycm93UmlnaHRDaXJjbGUgPSBDaXJjbGVBcnJvd1JpZ2h0OwogICAgZXhwb3J0cy5BcnJvd1JpZ2h0RnJvbUxpbmUgPSBBcnJvd1JpZ2h0RnJvbUxpbmU7CiAgICBleHBvcnRzLkFycm93UmlnaHRMZWZ0ID0gQXJyb3dSaWdodExlZnQ7CiAgICBleHBvcnRzLkFycm93UmlnaHRTcXVhcmUgPSBTcXVhcmVBcnJvd1JpZ2h0OwogICAgZXhwb3J0cy5BcnJvd1JpZ2h0VG9MaW5lID0gQXJyb3dSaWdodFRvTGluZTsKICAgIGV4cG9ydHMuQXJyb3dVcCA9IEFycm93VXA7CiAgICBleHBvcnRzLkFycm93VXAwMSA9IEFycm93VXAwMTsKICAgIGV4cG9ydHMuQXJyb3dVcDEwID0gQXJyb3dVcDEwOwogICAgZXhwb3J0cy5BcnJvd1VwQVogPSBBcnJvd1VwQVo7CiAgICBleHBvcnRzLkFycm93VXBBeiA9IEFycm93VXBBWjsKICAgIGV4cG9ydHMuQXJyb3dVcENpcmNsZSA9IENpcmNsZUFycm93VXA7CiAgICBleHBvcnRzLkFycm93VXBEb3duID0gQXJyb3dVcERvd247CiAgICBleHBvcnRzLkFycm93VXBGcm9tRG90ID0gQXJyb3dVcEZyb21Eb3Q7CiAgICBleHBvcnRzLkFycm93VXBGcm9tTGluZSA9IEFycm93VXBGcm9tTGluZTsKICAgIGV4cG9ydHMuQXJyb3dVcExlZnQgPSBBcnJvd1VwTGVmdDsKICAgIGV4cG9ydHMuQXJyb3dVcExlZnRGcm9tQ2lyY2xlID0gQ2lyY2xlQXJyb3dPdXRVcExlZnQ7CiAgICBleHBvcnRzLkFycm93VXBMZWZ0RnJvbVNxdWFyZSA9IFNxdWFyZUFycm93T3V0VXBMZWZ0OwogICAgZXhwb3J0cy5BcnJvd1VwTGVmdFNxdWFyZSA9IFNxdWFyZUFycm93VXBMZWZ0OwogICAgZXhwb3J0cy5BcnJvd1VwTmFycm93V2lkZSA9IEFycm93VXBOYXJyb3dXaWRlOwogICAgZXhwb3J0cy5BcnJvd1VwUmlnaHQgPSBBcnJvd1VwUmlnaHQ7CiAgICBleHBvcnRzLkFycm93VXBSaWdodEZyb21DaXJjbGUgPSBDaXJjbGVBcnJvd091dFVwUmlnaHQ7CiAgICBleHBvcnRzLkFycm93VXBSaWdodEZyb21TcXVhcmUgPSBTcXVhcmVBcnJvd091dFVwUmlnaHQ7CiAgICBleHBvcnRzLkFycm93VXBSaWdodFNxdWFyZSA9IFNxdWFyZUFycm93VXBSaWdodDsKICAgIGV4cG9ydHMuQXJyb3dVcFNxdWFyZSA9IFNxdWFyZUFycm93VXA7CiAgICBleHBvcnRzLkFycm93VXBUb0xpbmUgPSBBcnJvd1VwVG9MaW5lOwogICAgZXhwb3J0cy5BcnJvd1VwV2lkZU5hcnJvdyA9IEFycm93VXBXaWRlTmFycm93OwogICAgZXhwb3J0cy5BcnJvd1VwWkEgPSBBcnJvd1VwWkE7CiAgICBleHBvcnRzLkFycm93VXBaYSA9IEFycm93VXBaQTsKICAgIGV4cG9ydHMuQXJyb3dzVXBGcm9tTGluZSA9IEFycm93c1VwRnJvbUxpbmU7CiAgICBleHBvcnRzLkFzdGVyaXNrID0gQXN0ZXJpc2s7CiAgICBleHBvcnRzLkFzdGVyaXNrU3F1YXJlID0gU3F1YXJlQXN0ZXJpc2s7CiAgICBleHBvcnRzLkF0U2lnbiA9IEF0U2lnbjsKICAgIGV4cG9ydHMuQXRvbSA9IEF0b207CiAgICBleHBvcnRzLkF1ZGlvTGluZXMgPSBBdWRpb0xpbmVzOwogICAgZXhwb3J0cy5BdWRpb1dhdmVmb3JtID0gQXVkaW9XYXZlZm9ybTsKICAgIGV4cG9ydHMuQXdhcmQgPSBBd2FyZDsKICAgIGV4cG9ydHMuQXhlID0gQXhlOwogICAgZXhwb3J0cy5BeGlzM0QgPSBBeGlzM2Q7CiAgICBleHBvcnRzLkF4aXMzZCA9IEF4aXMzZDsKICAgIGV4cG9ydHMuQmFieSA9IEJhYnk7CiAgICBleHBvcnRzLkJhY2twYWNrID0gQmFja3BhY2s7CiAgICBleHBvcnRzLkJhZGdlID0gQmFkZ2U7CiAgICBleHBvcnRzLkJhZGdlQWxlcnQgPSBCYWRnZUFsZXJ0OwogICAgZXhwb3J0cy5CYWRnZUNlbnQgPSBCYWRnZUNlbnQ7CiAgICBleHBvcnRzLkJhZGdlQ2hlY2sgPSBCYWRnZUNoZWNrOwogICAgZXhwb3J0cy5CYWRnZURvbGxhclNpZ24gPSBCYWRnZURvbGxhclNpZ247CiAgICBleHBvcnRzLkJhZGdlRXVybyA9IEJhZGdlRXVybzsKICAgIGV4cG9ydHMuQmFkZ2VIZWxwID0gQmFkZ2VRdWVzdGlvbk1hcms7CiAgICBleHBvcnRzLkJhZGdlSW5kaWFuUnVwZWUgPSBCYWRnZUluZGlhblJ1cGVlOwogICAgZXhwb3J0cy5CYWRnZUluZm8gPSBCYWRnZUluZm87CiAgICBleHBvcnRzLkJhZGdlSmFwYW5lc2VZZW4gPSBCYWRnZUphcGFuZXNlWWVuOwogICAgZXhwb3J0cy5CYWRnZU1pbnVzID0gQmFkZ2VNaW51czsKICAgIGV4cG9ydHMuQmFkZ2VQZXJjZW50ID0gQmFkZ2VQZXJjZW50OwogICAgZXhwb3J0cy5CYWRnZVBsdXMgPSBCYWRnZVBsdXM7CiAgICBleHBvcnRzLkJhZGdlUG91bmRTdGVybGluZyA9IEJhZGdlUG91bmRTdGVybGluZzsKICAgIGV4cG9ydHMuQmFkZ2VRdWVzdGlvbk1hcmsgPSBCYWRnZVF1ZXN0aW9uTWFyazsKICAgIGV4cG9ydHMuQmFkZ2VSdXNzaWFuUnVibGUgPSBCYWRnZVJ1c3NpYW5SdWJsZTsKICAgIGV4cG9ydHMuQmFkZ2VTd2lzc0ZyYW5jID0gQmFkZ2VTd2lzc0ZyYW5jOwogICAgZXhwb3J0cy5CYWRnZVR1cmtpc2hMaXJhID0gQmFkZ2VUdXJraXNoTGlyYTsKICAgIGV4cG9ydHMuQmFkZ2VYID0gQmFkZ2VYOwogICAgZXhwb3J0cy5CYWdnYWdlQ2xhaW0gPSBCYWdnYWdlQ2xhaW07CiAgICBleHBvcnRzLkJhbGxvb24gPSBCYWxsb29uOwogICAgZXhwb3J0cy5CYW4gPSBCYW47CiAgICBleHBvcnRzLkJhbmFuYSA9IEJhbmFuYTsKICAgIGV4cG9ydHMuQmFuZGFnZSA9IEJhbmRhZ2U7CiAgICBleHBvcnRzLkJhbmtub3RlID0gQmFua25vdGU7CiAgICBleHBvcnRzLkJhbmtub3RlQXJyb3dEb3duID0gQmFua25vdGVBcnJvd0Rvd247CiAgICBleHBvcnRzLkJhbmtub3RlQXJyb3dVcCA9IEJhbmtub3RlQXJyb3dVcDsKICAgIGV4cG9ydHMuQmFua25vdGVYID0gQmFua25vdGVYOwogICAgZXhwb3J0cy5CYXJDaGFydCA9IENoYXJ0Tm9BeGVzQ29sdW1uSW5jcmVhc2luZzsKICAgIGV4cG9ydHMuQmFyQ2hhcnQyID0gQ2hhcnROb0F4ZXNDb2x1bW47CiAgICBleHBvcnRzLkJhckNoYXJ0MyA9IENoYXJ0Q29sdW1uOwogICAgZXhwb3J0cy5CYXJDaGFydDQgPSBDaGFydENvbHVtbkluY3JlYXNpbmc7CiAgICBleHBvcnRzLkJhckNoYXJ0QmlnID0gQ2hhcnRDb2x1bW5CaWc7CiAgICBleHBvcnRzLkJhckNoYXJ0SG9yaXpvbnRhbCA9IENoYXJ0QmFyOwogICAgZXhwb3J0cy5CYXJDaGFydEhvcml6b250YWxCaWcgPSBDaGFydEJhckJpZzsKICAgIGV4cG9ydHMuQmFyY29kZSA9IEJhcmNvZGU7CiAgICBleHBvcnRzLkJhcnJlbCA9IEJhcnJlbDsKICAgIGV4cG9ydHMuQmFzZWxpbmUgPSBCYXNlbGluZTsKICAgIGV4cG9ydHMuQmF0aCA9IEJhdGg7CiAgICBleHBvcnRzLkJhdHRlcnkgPSBCYXR0ZXJ5OwogICAgZXhwb3J0cy5CYXR0ZXJ5Q2hhcmdpbmcgPSBCYXR0ZXJ5Q2hhcmdpbmc7CiAgICBleHBvcnRzLkJhdHRlcnlGdWxsID0gQmF0dGVyeUZ1bGw7CiAgICBleHBvcnRzLkJhdHRlcnlMb3cgPSBCYXR0ZXJ5TG93OwogICAgZXhwb3J0cy5CYXR0ZXJ5TWVkaXVtID0gQmF0dGVyeU1lZGl1bTsKICAgIGV4cG9ydHMuQmF0dGVyeVBsdXMgPSBCYXR0ZXJ5UGx1czsKICAgIGV4cG9ydHMuQmF0dGVyeVdhcm5pbmcgPSBCYXR0ZXJ5V2FybmluZzsKICAgIGV4cG9ydHMuQmVha2VyID0gQmVha2VyOwogICAgZXhwb3J0cy5CZWFuID0gQmVhbjsKICAgIGV4cG9ydHMuQmVhbk9mZiA9IEJlYW5PZmY7CiAgICBleHBvcnRzLkJlZCA9IEJlZDsKICAgIGV4cG9ydHMuQmVkRG91YmxlID0gQmVkRG91YmxlOwogICAgZXhwb3J0cy5CZWRTaW5nbGUgPSBCZWRTaW5nbGU7CiAgICBleHBvcnRzLkJlZWYgPSBCZWVmOwogICAgZXhwb3J0cy5CZWVyID0gQmVlcjsKICAgIGV4cG9ydHMuQmVlck9mZiA9IEJlZXJPZmY7CiAgICBleHBvcnRzLkJlbGwgPSBCZWxsOwogICAgZXhwb3J0cy5CZWxsRG90ID0gQmVsbERvdDsKICAgIGV4cG9ydHMuQmVsbEVsZWN0cmljID0gQmVsbEVsZWN0cmljOwogICAgZXhwb3J0cy5CZWxsTWludXMgPSBCZWxsTWludXM7CiAgICBleHBvcnRzLkJlbGxPZmYgPSBCZWxsT2ZmOwogICAgZXhwb3J0cy5CZWxsUGx1cyA9IEJlbGxQbHVzOwogICAgZXhwb3J0cy5CZWxsUmluZyA9IEJlbGxSaW5nOwogICAgZXhwb3J0cy5CZXR3ZWVuSG9yaXpvbmFsRW5kID0gQmV0d2Vlbkhvcml6b250YWxFbmQ7CiAgICBleHBvcnRzLkJldHdlZW5Ib3Jpem9uYWxTdGFydCA9IEJldHdlZW5Ib3Jpem9udGFsU3RhcnQ7CiAgICBleHBvcnRzLkJldHdlZW5Ib3Jpem9udGFsRW5kID0gQmV0d2Vlbkhvcml6b250YWxFbmQ7CiAgICBleHBvcnRzLkJldHdlZW5Ib3Jpem9udGFsU3RhcnQgPSBCZXR3ZWVuSG9yaXpvbnRhbFN0YXJ0OwogICAgZXhwb3J0cy5CZXR3ZWVuVmVydGljYWxFbmQgPSBCZXR3ZWVuVmVydGljYWxFbmQ7CiAgICBleHBvcnRzLkJldHdlZW5WZXJ0aWNhbFN0YXJ0ID0gQmV0d2VlblZlcnRpY2FsU3RhcnQ7CiAgICBleHBvcnRzLkJpY2Vwc0ZsZXhlZCA9IEJpY2Vwc0ZsZXhlZDsKICAgIGV4cG9ydHMuQmlrZSA9IEJpa2U7CiAgICBleHBvcnRzLkJpbmFyeSA9IEJpbmFyeTsKICAgIGV4cG9ydHMuQmlub2N1bGFycyA9IEJpbm9jdWxhcnM7CiAgICBleHBvcnRzLkJpb2hhemFyZCA9IEJpb2hhemFyZDsKICAgIGV4cG9ydHMuQmlyZCA9IEJpcmQ7CiAgICBleHBvcnRzLkJpcmRob3VzZSA9IEJpcmRob3VzZTsKICAgIGV4cG9ydHMuQml0Y29pbiA9IEJpdGNvaW47CiAgICBleHBvcnRzLkJsZW5kID0gQmxlbmQ7CiAgICBleHBvcnRzLkJsaW5kcyA9IEJsaW5kczsKICAgIGV4cG9ydHMuQmxvY2tzID0gQmxvY2tzOwogICAgZXhwb3J0cy5CbHVldG9vdGggPSBCbHVldG9vdGg7CiAgICBleHBvcnRzLkJsdWV0b290aENvbm5lY3RlZCA9IEJsdWV0b290aENvbm5lY3RlZDsKICAgIGV4cG9ydHMuQmx1ZXRvb3RoT2ZmID0gQmx1ZXRvb3RoT2ZmOwogICAgZXhwb3J0cy5CbHVldG9vdGhTZWFyY2hpbmcgPSBCbHVldG9vdGhTZWFyY2hpbmc7CiAgICBleHBvcnRzLkJvbGQgPSBCb2xkOwogICAgZXhwb3J0cy5Cb2x0ID0gQm9sdDsKICAgIGV4cG9ydHMuQm9tYiA9IEJvbWI7CiAgICBleHBvcnRzLkJvbmUgPSBCb25lOwogICAgZXhwb3J0cy5Cb29rID0gQm9vazsKICAgIGV4cG9ydHMuQm9va0EgPSBCb29rQTsKICAgIGV4cG9ydHMuQm9va0FsZXJ0ID0gQm9va0FsZXJ0OwogICAgZXhwb3J0cy5Cb29rQXVkaW8gPSBCb29rQXVkaW87CiAgICBleHBvcnRzLkJvb2tDaGVjayA9IEJvb2tDaGVjazsKICAgIGV4cG9ydHMuQm9va0NvcHkgPSBCb29rQ29weTsKICAgIGV4cG9ydHMuQm9va0Rhc2hlZCA9IEJvb2tEYXNoZWQ7CiAgICBleHBvcnRzLkJvb2tEb3duID0gQm9va0Rvd247CiAgICBleHBvcnRzLkJvb2tIZWFkcGhvbmVzID0gQm9va0hlYWRwaG9uZXM7CiAgICBleHBvcnRzLkJvb2tIZWFydCA9IEJvb2tIZWFydDsKICAgIGV4cG9ydHMuQm9va0ltYWdlID0gQm9va0ltYWdlOwogICAgZXhwb3J0cy5Cb29rS2V5ID0gQm9va0tleTsKICAgIGV4cG9ydHMuQm9va0xvY2sgPSBCb29rTG9jazsKICAgIGV4cG9ydHMuQm9va01hcmtlZCA9IEJvb2tNYXJrZWQ7CiAgICBleHBvcnRzLkJvb2tNaW51cyA9IEJvb2tNaW51czsKICAgIGV4cG9ydHMuQm9va09wZW4gPSBCb29rT3BlbjsKICAgIGV4cG9ydHMuQm9va09wZW5DaGVjayA9IEJvb2tPcGVuQ2hlY2s7CiAgICBleHBvcnRzLkJvb2tPcGVuVGV4dCA9IEJvb2tPcGVuVGV4dDsKICAgIGV4cG9ydHMuQm9va1BsdXMgPSBCb29rUGx1czsKICAgIGV4cG9ydHMuQm9va1NlYXJjaCA9IEJvb2tTZWFyY2g7CiAgICBleHBvcnRzLkJvb2tUZW1wbGF0ZSA9IEJvb2tEYXNoZWQ7CiAgICBleHBvcnRzLkJvb2tUZXh0ID0gQm9va1RleHQ7CiAgICBleHBvcnRzLkJvb2tUeXBlID0gQm9va1R5cGU7CiAgICBleHBvcnRzLkJvb2tVcCA9IEJvb2tVcDsKICAgIGV4cG9ydHMuQm9va1VwMiA9IEJvb2tVcDI7CiAgICBleHBvcnRzLkJvb2tVc2VyID0gQm9va1VzZXI7CiAgICBleHBvcnRzLkJvb2tYID0gQm9va1g7CiAgICBleHBvcnRzLkJvb2ttYXJrID0gQm9va21hcms7CiAgICBleHBvcnRzLkJvb2ttYXJrQ2hlY2sgPSBCb29rbWFya0NoZWNrOwogICAgZXhwb3J0cy5Cb29rbWFya01pbnVzID0gQm9va21hcmtNaW51czsKICAgIGV4cG9ydHMuQm9va21hcmtQbHVzID0gQm9va21hcmtQbHVzOwogICAgZXhwb3J0cy5Cb29rbWFya1ggPSBCb29rbWFya1g7CiAgICBleHBvcnRzLkJvb21Cb3ggPSBCb29tQm94OwogICAgZXhwb3J0cy5Cb3QgPSBCb3Q7CiAgICBleHBvcnRzLkJvdE1lc3NhZ2VTcXVhcmUgPSBCb3RNZXNzYWdlU3F1YXJlOwogICAgZXhwb3J0cy5Cb3RPZmYgPSBCb3RPZmY7CiAgICBleHBvcnRzLkJvdHRsZVdpbmUgPSBCb3R0bGVXaW5lOwogICAgZXhwb3J0cy5Cb3dBcnJvdyA9IEJvd0Fycm93OwogICAgZXhwb3J0cy5Cb3ggPSBCb3g7CiAgICBleHBvcnRzLkJveFNlbGVjdCA9IFNxdWFyZURhc2hlZDsKICAgIGV4cG9ydHMuQm94ZXMgPSBCb3hlczsKICAgIGV4cG9ydHMuQnJhY2VzID0gQnJhY2VzOwogICAgZXhwb3J0cy5CcmFja2V0cyA9IEJyYWNrZXRzOwogICAgZXhwb3J0cy5CcmFpbiA9IEJyYWluOwogICAgZXhwb3J0cy5CcmFpbkNpcmN1aXQgPSBCcmFpbkNpcmN1aXQ7CiAgICBleHBvcnRzLkJyYWluQ29nID0gQnJhaW5Db2c7CiAgICBleHBvcnRzLkJyaWNrV2FsbCA9IEJyaWNrV2FsbDsKICAgIGV4cG9ydHMuQnJpY2tXYWxsRmlyZSA9IEJyaWNrV2FsbEZpcmU7CiAgICBleHBvcnRzLkJyaWNrV2FsbFNoaWVsZCA9IEJyaWNrV2FsbFNoaWVsZDsKICAgIGV4cG9ydHMuQnJpZWZjYXNlID0gQnJpZWZjYXNlOwogICAgZXhwb3J0cy5CcmllZmNhc2VCdXNpbmVzcyA9IEJyaWVmY2FzZUJ1c2luZXNzOwogICAgZXhwb3J0cy5CcmllZmNhc2VDb252ZXlvckJlbHQgPSBCcmllZmNhc2VDb252ZXlvckJlbHQ7CiAgICBleHBvcnRzLkJyaWVmY2FzZU1lZGljYWwgPSBCcmllZmNhc2VNZWRpY2FsOwogICAgZXhwb3J0cy5CcmluZ1RvRnJvbnQgPSBCcmluZ1RvRnJvbnQ7CiAgICBleHBvcnRzLkJydXNoID0gQnJ1c2g7CiAgICBleHBvcnRzLkJydXNoQ2xlYW5pbmcgPSBCcnVzaENsZWFuaW5nOwogICAgZXhwb3J0cy5CdWJibGVzID0gQnViYmxlczsKICAgIGV4cG9ydHMuQnVnID0gQnVnOwogICAgZXhwb3J0cy5CdWdPZmYgPSBCdWdPZmY7CiAgICBleHBvcnRzLkJ1Z1BsYXkgPSBCdWdQbGF5OwogICAgZXhwb3J0cy5CdWlsZGluZyA9IEJ1aWxkaW5nOwogICAgZXhwb3J0cy5CdWlsZGluZzIgPSBCdWlsZGluZzI7CiAgICBleHBvcnRzLkJ1cyA9IEJ1czsKICAgIGV4cG9ydHMuQnVzRnJvbnQgPSBCdXNGcm9udDsKICAgIGV4cG9ydHMuQ2FibGUgPSBDYWJsZTsKICAgIGV4cG9ydHMuQ2FibGVDYXIgPSBDYWJsZUNhcjsKICAgIGV4cG9ydHMuQ2FrZSA9IENha2U7CiAgICBleHBvcnRzLkNha2VTbGljZSA9IENha2VTbGljZTsKICAgIGV4cG9ydHMuQ2FsY3VsYXRvciA9IENhbGN1bGF0b3I7CiAgICBleHBvcnRzLkNhbGVuZGFyID0gQ2FsZW5kYXI7CiAgICBleHBvcnRzLkNhbGVuZGFyMSA9IENhbGVuZGFyMTsKICAgIGV4cG9ydHMuQ2FsZW5kYXJBcnJvd0Rvd24gPSBDYWxlbmRhckFycm93RG93bjsKICAgIGV4cG9ydHMuQ2FsZW5kYXJBcnJvd1VwID0gQ2FsZW5kYXJBcnJvd1VwOwogICAgZXhwb3J0cy5DYWxlbmRhckNoZWNrID0gQ2FsZW5kYXJDaGVjazsKICAgIGV4cG9ydHMuQ2FsZW5kYXJDaGVjazIgPSBDYWxlbmRhckNoZWNrMjsKICAgIGV4cG9ydHMuQ2FsZW5kYXJDbG9jayA9IENhbGVuZGFyQ2xvY2s7CiAgICBleHBvcnRzLkNhbGVuZGFyQ29nID0gQ2FsZW5kYXJDb2c7CiAgICBleHBvcnRzLkNhbGVuZGFyRGF5cyA9IENhbGVuZGFyRGF5czsKICAgIGV4cG9ydHMuQ2FsZW5kYXJGb2xkID0gQ2FsZW5kYXJGb2xkOwogICAgZXhwb3J0cy5DYWxlbmRhckhlYXJ0ID0gQ2FsZW5kYXJIZWFydDsKICAgIGV4cG9ydHMuQ2FsZW5kYXJNaW51cyA9IENhbGVuZGFyTWludXM7CiAgICBleHBvcnRzLkNhbGVuZGFyTWludXMyID0gQ2FsZW5kYXJNaW51czI7CiAgICBleHBvcnRzLkNhbGVuZGFyT2ZmID0gQ2FsZW5kYXJPZmY7CiAgICBleHBvcnRzLkNhbGVuZGFyUGx1cyA9IENhbGVuZGFyUGx1czsKICAgIGV4cG9ydHMuQ2FsZW5kYXJQbHVzMiA9IENhbGVuZGFyUGx1czI7CiAgICBleHBvcnRzLkNhbGVuZGFyUmFuZ2UgPSBDYWxlbmRhclJhbmdlOwogICAgZXhwb3J0cy5DYWxlbmRhclNlYXJjaCA9IENhbGVuZGFyU2VhcmNoOwogICAgZXhwb3J0cy5DYWxlbmRhclN5bmMgPSBDYWxlbmRhclN5bmM7CiAgICBleHBvcnRzLkNhbGVuZGFyWCA9IENhbGVuZGFyWDsKICAgIGV4cG9ydHMuQ2FsZW5kYXJYMiA9IENhbGVuZGFyWDI7CiAgICBleHBvcnRzLkNhbGVuZGFycyA9IENhbGVuZGFyczsKICAgIGV4cG9ydHMuQ2FtZXJhID0gQ2FtZXJhOwogICAgZXhwb3J0cy5DYW1lcmFPZmYgPSBDYW1lcmFPZmY7CiAgICBleHBvcnRzLkNhbmRsZXN0aWNrQ2hhcnQgPSBDaGFydENhbmRsZXN0aWNrOwogICAgZXhwb3J0cy5DYW5keSA9IENhbmR5OwogICAgZXhwb3J0cy5DYW5keUNhbmUgPSBDYW5keUNhbmU7CiAgICBleHBvcnRzLkNhbmR5T2ZmID0gQ2FuZHlPZmY7CiAgICBleHBvcnRzLkNhbm5hYmlzID0gQ2FubmFiaXM7CiAgICBleHBvcnRzLkNhbm5hYmlzT2ZmID0gQ2FubmFiaXNPZmY7CiAgICBleHBvcnRzLkNhcHRpb25zID0gQ2FwdGlvbnM7CiAgICBleHBvcnRzLkNhcHRpb25zT2ZmID0gQ2FwdGlvbnNPZmY7CiAgICBleHBvcnRzLkNhciA9IENhcjsKICAgIGV4cG9ydHMuQ2FyRnJvbnQgPSBDYXJGcm9udDsKICAgIGV4cG9ydHMuQ2FyVGF4aUZyb250ID0gQ2FyVGF4aUZyb250OwogICAgZXhwb3J0cy5DYXJhdmFuID0gQ2FyYXZhbjsKICAgIGV4cG9ydHMuQ2FyZFNpbSA9IENhcmRTaW07CiAgICBleHBvcnRzLkNhcnJvdCA9IENhcnJvdDsKICAgIGV4cG9ydHMuQ2FzZUxvd2VyID0gQ2FzZUxvd2VyOwogICAgZXhwb3J0cy5DYXNlU2Vuc2l0aXZlID0gQ2FzZVNlbnNpdGl2ZTsKICAgIGV4cG9ydHMuQ2FzZVVwcGVyID0gQ2FzZVVwcGVyOwogICAgZXhwb3J0cy5DYXNzZXR0ZVRhcGUgPSBDYXNzZXR0ZVRhcGU7CiAgICBleHBvcnRzLkNhc3QgPSBDYXN0OwogICAgZXhwb3J0cy5DYXN0bGUgPSBDYXN0bGU7CiAgICBleHBvcnRzLkNhdCA9IENhdDsKICAgIGV4cG9ydHMuQ2N0diA9IENjdHY7CiAgICBleHBvcnRzLkNoYXJ0QXJlYSA9IENoYXJ0QXJlYTsKICAgIGV4cG9ydHMuQ2hhcnRCYXIgPSBDaGFydEJhcjsKICAgIGV4cG9ydHMuQ2hhcnRCYXJCaWcgPSBDaGFydEJhckJpZzsKICAgIGV4cG9ydHMuQ2hhcnRCYXJEZWNyZWFzaW5nID0gQ2hhcnRCYXJEZWNyZWFzaW5nOwogICAgZXhwb3J0cy5DaGFydEJhckluY3JlYXNpbmcgPSBDaGFydEJhckluY3JlYXNpbmc7CiAgICBleHBvcnRzLkNoYXJ0QmFyU3RhY2tlZCA9IENoYXJ0QmFyU3RhY2tlZDsKICAgIGV4cG9ydHMuQ2hhcnRDYW5kbGVzdGljayA9IENoYXJ0Q2FuZGxlc3RpY2s7CiAgICBleHBvcnRzLkNoYXJ0Q29sdW1uID0gQ2hhcnRDb2x1bW47CiAgICBleHBvcnRzLkNoYXJ0Q29sdW1uQmlnID0gQ2hhcnRDb2x1bW5CaWc7CiAgICBleHBvcnRzLkNoYXJ0Q29sdW1uRGVjcmVhc2luZyA9IENoYXJ0Q29sdW1uRGVjcmVhc2luZzsKICAgIGV4cG9ydHMuQ2hhcnRDb2x1bW5JbmNyZWFzaW5nID0gQ2hhcnRDb2x1bW5JbmNyZWFzaW5nOwogICAgZXhwb3J0cy5DaGFydENvbHVtblN0YWNrZWQgPSBDaGFydENvbHVtblN0YWNrZWQ7CiAgICBleHBvcnRzLkNoYXJ0R2FudHQgPSBDaGFydEdhbnR0OwogICAgZXhwb3J0cy5DaGFydExpbmUgPSBDaGFydExpbmU7CiAgICBleHBvcnRzLkNoYXJ0TmV0d29yayA9IENoYXJ0TmV0d29yazsKICAgIGV4cG9ydHMuQ2hhcnROb0F4ZXNDb2x1bW4gPSBDaGFydE5vQXhlc0NvbHVtbjsKICAgIGV4cG9ydHMuQ2hhcnROb0F4ZXNDb2x1bW5EZWNyZWFzaW5nID0gQ2hhcnROb0F4ZXNDb2x1bW5EZWNyZWFzaW5nOwogICAgZXhwb3J0cy5DaGFydE5vQXhlc0NvbHVtbkluY3JlYXNpbmcgPSBDaGFydE5vQXhlc0NvbHVtbkluY3JlYXNpbmc7CiAgICBleHBvcnRzLkNoYXJ0Tm9BeGVzQ29tYmluZWQgPSBDaGFydE5vQXhlc0NvbWJpbmVkOwogICAgZXhwb3J0cy5DaGFydE5vQXhlc0dhbnR0ID0gQ2hhcnROb0F4ZXNHYW50dDsKICAgIGV4cG9ydHMuQ2hhcnRQaWUgPSBDaGFydFBpZTsKICAgIGV4cG9ydHMuQ2hhcnRTY2F0dGVyID0gQ2hhcnRTY2F0dGVyOwogICAgZXhwb3J0cy5DaGFydFNwbGluZSA9IENoYXJ0U3BsaW5lOwogICAgZXhwb3J0cy5DaGVjayA9IENoZWNrOwogICAgZXhwb3J0cy5DaGVja0NoZWNrID0gQ2hlY2tDaGVjazsKICAgIGV4cG9ydHMuQ2hlY2tDaXJjbGUgPSBDaXJjbGVDaGVja0JpZzsKICAgIGV4cG9ydHMuQ2hlY2tDaXJjbGUyID0gQ2lyY2xlQ2hlY2s7CiAgICBleHBvcnRzLkNoZWNrTGluZSA9IENoZWNrTGluZTsKICAgIGV4cG9ydHMuQ2hlY2tTcXVhcmUgPSBTcXVhcmVDaGVja0JpZzsKICAgIGV4cG9ydHMuQ2hlY2tTcXVhcmUyID0gU3F1YXJlQ2hlY2s7CiAgICBleHBvcnRzLkNoZWZIYXQgPSBDaGVmSGF0OwogICAgZXhwb3J0cy5DaGVycnkgPSBDaGVycnk7CiAgICBleHBvcnRzLkNoZXNzQmlzaG9wID0gQ2hlc3NCaXNob3A7CiAgICBleHBvcnRzLkNoZXNzS2luZyA9IENoZXNzS2luZzsKICAgIGV4cG9ydHMuQ2hlc3NLbmlnaHQgPSBDaGVzc0tuaWdodDsKICAgIGV4cG9ydHMuQ2hlc3NQYXduID0gQ2hlc3NQYXduOwogICAgZXhwb3J0cy5DaGVzc1F1ZWVuID0gQ2hlc3NRdWVlbjsKICAgIGV4cG9ydHMuQ2hlc3NSb29rID0gQ2hlc3NSb29rOwogICAgZXhwb3J0cy5DaGV2cm9uRG93biA9IENoZXZyb25Eb3duOwogICAgZXhwb3J0cy5DaGV2cm9uRG93bkNpcmNsZSA9IENpcmNsZUNoZXZyb25Eb3duOwogICAgZXhwb3J0cy5DaGV2cm9uRG93blNxdWFyZSA9IFNxdWFyZUNoZXZyb25Eb3duOwogICAgZXhwb3J0cy5DaGV2cm9uRmlyc3QgPSBDaGV2cm9uRmlyc3Q7CiAgICBleHBvcnRzLkNoZXZyb25MYXN0ID0gQ2hldnJvbkxhc3Q7CiAgICBleHBvcnRzLkNoZXZyb25MZWZ0ID0gQ2hldnJvbkxlZnQ7CiAgICBleHBvcnRzLkNoZXZyb25MZWZ0Q2lyY2xlID0gQ2lyY2xlQ2hldnJvbkxlZnQ7CiAgICBleHBvcnRzLkNoZXZyb25MZWZ0U3F1YXJlID0gU3F1YXJlQ2hldnJvbkxlZnQ7CiAgICBleHBvcnRzLkNoZXZyb25SaWdodCA9IENoZXZyb25SaWdodDsKICAgIGV4cG9ydHMuQ2hldnJvblJpZ2h0Q2lyY2xlID0gQ2lyY2xlQ2hldnJvblJpZ2h0OwogICAgZXhwb3J0cy5DaGV2cm9uUmlnaHRTcXVhcmUgPSBTcXVhcmVDaGV2cm9uUmlnaHQ7CiAgICBleHBvcnRzLkNoZXZyb25VcCA9IENoZXZyb25VcDsKICAgIGV4cG9ydHMuQ2hldnJvblVwQ2lyY2xlID0gQ2lyY2xlQ2hldnJvblVwOwogICAgZXhwb3J0cy5DaGV2cm9uVXBTcXVhcmUgPSBTcXVhcmVDaGV2cm9uVXA7CiAgICBleHBvcnRzLkNoZXZyb25zRG93biA9IENoZXZyb25zRG93bjsKICAgIGV4cG9ydHMuQ2hldnJvbnNEb3duVXAgPSBDaGV2cm9uc0Rvd25VcDsKICAgIGV4cG9ydHMuQ2hldnJvbnNMZWZ0ID0gQ2hldnJvbnNMZWZ0OwogICAgZXhwb3J0cy5DaGV2cm9uc0xlZnRSaWdodCA9IENoZXZyb25zTGVmdFJpZ2h0OwogICAgZXhwb3J0cy5DaGV2cm9uc0xlZnRSaWdodEVsbGlwc2lzID0gQ2hldnJvbnNMZWZ0UmlnaHRFbGxpcHNpczsKICAgIGV4cG9ydHMuQ2hldnJvbnNSaWdodCA9IENoZXZyb25zUmlnaHQ7CiAgICBleHBvcnRzLkNoZXZyb25zUmlnaHRMZWZ0ID0gQ2hldnJvbnNSaWdodExlZnQ7CiAgICBleHBvcnRzLkNoZXZyb25zVXAgPSBDaGV2cm9uc1VwOwogICAgZXhwb3J0cy5DaGV2cm9uc1VwRG93biA9IENoZXZyb25zVXBEb3duOwogICAgZXhwb3J0cy5DaHJvbWUgPSBDaHJvbWl1bTsKICAgIGV4cG9ydHMuQ2hyb21pdW0gPSBDaHJvbWl1bTsKICAgIGV4cG9ydHMuQ2h1cmNoID0gQ2h1cmNoOwogICAgZXhwb3J0cy5DaWdhcmV0dGUgPSBDaWdhcmV0dGU7CiAgICBleHBvcnRzLkNpZ2FyZXR0ZU9mZiA9IENpZ2FyZXR0ZU9mZjsKICAgIGV4cG9ydHMuQ2lyY2xlID0gQ2lyY2xlOwogICAgZXhwb3J0cy5DaXJjbGVBbGVydCA9IENpcmNsZUFsZXJ0OwogICAgZXhwb3J0cy5DaXJjbGVBcnJvd0Rvd24gPSBDaXJjbGVBcnJvd0Rvd247CiAgICBleHBvcnRzLkNpcmNsZUFycm93TGVmdCA9IENpcmNsZUFycm93TGVmdDsKICAgIGV4cG9ydHMuQ2lyY2xlQXJyb3dPdXREb3duTGVmdCA9IENpcmNsZUFycm93T3V0RG93bkxlZnQ7CiAgICBleHBvcnRzLkNpcmNsZUFycm93T3V0RG93blJpZ2h0ID0gQ2lyY2xlQXJyb3dPdXREb3duUmlnaHQ7CiAgICBleHBvcnRzLkNpcmNsZUFycm93T3V0VXBMZWZ0ID0gQ2lyY2xlQXJyb3dPdXRVcExlZnQ7CiAgICBleHBvcnRzLkNpcmNsZUFycm93T3V0VXBSaWdodCA9IENpcmNsZUFycm93T3V0VXBSaWdodDsKICAgIGV4cG9ydHMuQ2lyY2xlQXJyb3dSaWdodCA9IENpcmNsZUFycm93UmlnaHQ7CiAgICBleHBvcnRzLkNpcmNsZUFycm93VXAgPSBDaXJjbGVBcnJvd1VwOwogICAgZXhwb3J0cy5DaXJjbGVDaGVjayA9IENpcmNsZUNoZWNrOwogICAgZXhwb3J0cy5DaXJjbGVDaGVja0JpZyA9IENpcmNsZUNoZWNrQmlnOwogICAgZXhwb3J0cy5DaXJjbGVDaGV2cm9uRG93biA9IENpcmNsZUNoZXZyb25Eb3duOwogICAgZXhwb3J0cy5DaXJjbGVDaGV2cm9uTGVmdCA9IENpcmNsZUNoZXZyb25MZWZ0OwogICAgZXhwb3J0cy5DaXJjbGVDaGV2cm9uUmlnaHQgPSBDaXJjbGVDaGV2cm9uUmlnaHQ7CiAgICBleHBvcnRzLkNpcmNsZUNoZXZyb25VcCA9IENpcmNsZUNoZXZyb25VcDsKICAgIGV4cG9ydHMuQ2lyY2xlRGFzaGVkID0gQ2lyY2xlRGFzaGVkOwogICAgZXhwb3J0cy5DaXJjbGVEaXZpZGUgPSBDaXJjbGVEaXZpZGU7CiAgICBleHBvcnRzLkNpcmNsZURvbGxhclNpZ24gPSBDaXJjbGVEb2xsYXJTaWduOwogICAgZXhwb3J0cy5DaXJjbGVEb3QgPSBDaXJjbGVEb3Q7CiAgICBleHBvcnRzLkNpcmNsZURvdERhc2hlZCA9IENpcmNsZURvdERhc2hlZDsKICAgIGV4cG9ydHMuQ2lyY2xlRWxsaXBzaXMgPSBDaXJjbGVFbGxpcHNpczsKICAgIGV4cG9ydHMuQ2lyY2xlRXF1YWwgPSBDaXJjbGVFcXVhbDsKICAgIGV4cG9ydHMuQ2lyY2xlRmFkaW5nQXJyb3dVcCA9IENpcmNsZUZhZGluZ0Fycm93VXA7CiAgICBleHBvcnRzLkNpcmNsZUZhZGluZ1BsdXMgPSBDaXJjbGVGYWRpbmdQbHVzOwogICAgZXhwb3J0cy5DaXJjbGVHYXVnZSA9IENpcmNsZUdhdWdlOwogICAgZXhwb3J0cy5DaXJjbGVIZWxwID0gQ2lyY2xlUXVlc3Rpb25NYXJrOwogICAgZXhwb3J0cy5DaXJjbGVNaW51cyA9IENpcmNsZU1pbnVzOwogICAgZXhwb3J0cy5DaXJjbGVPZmYgPSBDaXJjbGVPZmY7CiAgICBleHBvcnRzLkNpcmNsZVBhcmtpbmcgPSBDaXJjbGVQYXJraW5nOwogICAgZXhwb3J0cy5DaXJjbGVQYXJraW5nT2ZmID0gQ2lyY2xlUGFya2luZ09mZjsKICAgIGV4cG9ydHMuQ2lyY2xlUGF1c2UgPSBDaXJjbGVQYXVzZTsKICAgIGV4cG9ydHMuQ2lyY2xlUGVyY2VudCA9IENpcmNsZVBlcmNlbnQ7CiAgICBleHBvcnRzLkNpcmNsZVBpbGUgPSBDaXJjbGVQaWxlOwogICAgZXhwb3J0cy5DaXJjbGVQbGF5ID0gQ2lyY2xlUGxheTsKICAgIGV4cG9ydHMuQ2lyY2xlUGx1cyA9IENpcmNsZVBsdXM7CiAgICBleHBvcnRzLkNpcmNsZVBvdW5kU3RlcmxpbmcgPSBDaXJjbGVQb3VuZFN0ZXJsaW5nOwogICAgZXhwb3J0cy5DaXJjbGVQb3dlciA9IENpcmNsZVBvd2VyOwogICAgZXhwb3J0cy5DaXJjbGVRdWVzdGlvbk1hcmsgPSBDaXJjbGVRdWVzdGlvbk1hcms7CiAgICBleHBvcnRzLkNpcmNsZVNsYXNoID0gQ2lyY2xlU2xhc2g7CiAgICBleHBvcnRzLkNpcmNsZVNsYXNoMiA9IENpcmNsZVNsYXNoMjsKICAgIGV4cG9ydHMuQ2lyY2xlU2xhc2hlZCA9IENpcmNsZVNsYXNoMjsKICAgIGV4cG9ydHMuQ2lyY2xlU21hbGwgPSBDaXJjbGVTbWFsbDsKICAgIGV4cG9ydHMuQ2lyY2xlU3RhciA9IENpcmNsZVN0YXI7CiAgICBleHBvcnRzLkNpcmNsZVN0b3AgPSBDaXJjbGVTdG9wOwogICAgZXhwb3J0cy5DaXJjbGVVc2VyID0gQ2lyY2xlVXNlcjsKICAgIGV4cG9ydHMuQ2lyY2xlVXNlclJvdW5kID0gQ2lyY2xlVXNlclJvdW5kOwogICAgZXhwb3J0cy5DaXJjbGVYID0gQ2lyY2xlWDsKICAgIGV4cG9ydHMuQ2lyY3VpdEJvYXJkID0gQ2lyY3VpdEJvYXJkOwogICAgZXhwb3J0cy5DaXRydXMgPSBDaXRydXM7CiAgICBleHBvcnRzLkNsYXBwZXJib2FyZCA9IENsYXBwZXJib2FyZDsKICAgIGV4cG9ydHMuQ2xpcGJvYXJkID0gQ2xpcGJvYXJkOwogICAgZXhwb3J0cy5DbGlwYm9hcmRDaGVjayA9IENsaXBib2FyZENoZWNrOwogICAgZXhwb3J0cy5DbGlwYm9hcmRDbG9jayA9IENsaXBib2FyZENsb2NrOwogICAgZXhwb3J0cy5DbGlwYm9hcmRDb3B5ID0gQ2xpcGJvYXJkQ29weTsKICAgIGV4cG9ydHMuQ2xpcGJvYXJkRWRpdCA9IENsaXBib2FyZFBlbjsKICAgIGV4cG9ydHMuQ2xpcGJvYXJkTGlzdCA9IENsaXBib2FyZExpc3Q7CiAgICBleHBvcnRzLkNsaXBib2FyZE1pbnVzID0gQ2xpcGJvYXJkTWludXM7CiAgICBleHBvcnRzLkNsaXBib2FyZFBhc3RlID0gQ2xpcGJvYXJkUGFzdGU7CiAgICBleHBvcnRzLkNsaXBib2FyZFBlbiA9IENsaXBib2FyZFBlbjsKICAgIGV4cG9ydHMuQ2xpcGJvYXJkUGVuTGluZSA9IENsaXBib2FyZFBlbkxpbmU7CiAgICBleHBvcnRzLkNsaXBib2FyZFBsdXMgPSBDbGlwYm9hcmRQbHVzOwogICAgZXhwb3J0cy5DbGlwYm9hcmRTaWduYXR1cmUgPSBDbGlwYm9hcmRQZW5MaW5lOwogICAgZXhwb3J0cy5DbGlwYm9hcmRUeXBlID0gQ2xpcGJvYXJkVHlwZTsKICAgIGV4cG9ydHMuQ2xpcGJvYXJkWCA9IENsaXBib2FyZFg7CiAgICBleHBvcnRzLkNsb2NrID0gQ2xvY2s7CiAgICBleHBvcnRzLkNsb2NrMSA9IENsb2NrMTsKICAgIGV4cG9ydHMuQ2xvY2sxMCA9IENsb2NrMTA7CiAgICBleHBvcnRzLkNsb2NrMTEgPSBDbG9jazExOwogICAgZXhwb3J0cy5DbG9jazEyID0gQ2xvY2sxMjsKICAgIGV4cG9ydHMuQ2xvY2syID0gQ2xvY2syOwogICAgZXhwb3J0cy5DbG9jazMgPSBDbG9jazM7CiAgICBleHBvcnRzLkNsb2NrNCA9IENsb2NrNDsKICAgIGV4cG9ydHMuQ2xvY2s1ID0gQ2xvY2s1OwogICAgZXhwb3J0cy5DbG9jazYgPSBDbG9jazY7CiAgICBleHBvcnRzLkNsb2NrNyA9IENsb2NrNzsKICAgIGV4cG9ydHMuQ2xvY2s4ID0gQ2xvY2s4OwogICAgZXhwb3J0cy5DbG9jazkgPSBDbG9jazk7CiAgICBleHBvcnRzLkNsb2NrQWxlcnQgPSBDbG9ja0FsZXJ0OwogICAgZXhwb3J0cy5DbG9ja0Fycm93RG93biA9IENsb2NrQXJyb3dEb3duOwogICAgZXhwb3J0cy5DbG9ja0Fycm93VXAgPSBDbG9ja0Fycm93VXA7CiAgICBleHBvcnRzLkNsb2NrQ2hlY2sgPSBDbG9ja0NoZWNrOwogICAgZXhwb3J0cy5DbG9ja0ZhZGluZyA9IENsb2NrRmFkaW5nOwogICAgZXhwb3J0cy5DbG9ja1BsdXMgPSBDbG9ja1BsdXM7CiAgICBleHBvcnRzLkNsb3NlZENhcHRpb24gPSBDbG9zZWRDYXB0aW9uOwogICAgZXhwb3J0cy5DbG91ZCA9IENsb3VkOwogICAgZXhwb3J0cy5DbG91ZEFsZXJ0ID0gQ2xvdWRBbGVydDsKICAgIGV4cG9ydHMuQ2xvdWRCYWNrdXAgPSBDbG91ZEJhY2t1cDsKICAgIGV4cG9ydHMuQ2xvdWRDaGVjayA9IENsb3VkQ2hlY2s7CiAgICBleHBvcnRzLkNsb3VkQ29nID0gQ2xvdWRDb2c7CiAgICBleHBvcnRzLkNsb3VkRG93bmxvYWQgPSBDbG91ZERvd25sb2FkOwogICAgZXhwb3J0cy5DbG91ZERyaXp6bGUgPSBDbG91ZERyaXp6bGU7CiAgICBleHBvcnRzLkNsb3VkRm9nID0gQ2xvdWRGb2c7CiAgICBleHBvcnRzLkNsb3VkSGFpbCA9IENsb3VkSGFpbDsKICAgIGV4cG9ydHMuQ2xvdWRMaWdodG5pbmcgPSBDbG91ZExpZ2h0bmluZzsKICAgIGV4cG9ydHMuQ2xvdWRNb29uID0gQ2xvdWRNb29uOwogICAgZXhwb3J0cy5DbG91ZE1vb25SYWluID0gQ2xvdWRNb29uUmFpbjsKICAgIGV4cG9ydHMuQ2xvdWRPZmYgPSBDbG91ZE9mZjsKICAgIGV4cG9ydHMuQ2xvdWRSYWluID0gQ2xvdWRSYWluOwogICAgZXhwb3J0cy5DbG91ZFJhaW5XaW5kID0gQ2xvdWRSYWluV2luZDsKICAgIGV4cG9ydHMuQ2xvdWRTbm93ID0gQ2xvdWRTbm93OwogICAgZXhwb3J0cy5DbG91ZFN1biA9IENsb3VkU3VuOwogICAgZXhwb3J0cy5DbG91ZFN1blJhaW4gPSBDbG91ZFN1blJhaW47CiAgICBleHBvcnRzLkNsb3VkU3luYyA9IENsb3VkU3luYzsKICAgIGV4cG9ydHMuQ2xvdWRVcGxvYWQgPSBDbG91ZFVwbG9hZDsKICAgIGV4cG9ydHMuQ2xvdWR5ID0gQ2xvdWR5OwogICAgZXhwb3J0cy5DbG92ZXIgPSBDbG92ZXI7CiAgICBleHBvcnRzLkNsdWIgPSBDbHViOwogICAgZXhwb3J0cy5Db2RlID0gQ29kZTsKICAgIGV4cG9ydHMuQ29kZTIgPSBDb2RlWG1sOwogICAgZXhwb3J0cy5Db2RlU3F1YXJlID0gU3F1YXJlQ29kZTsKICAgIGV4cG9ydHMuQ29kZVhtbCA9IENvZGVYbWw7CiAgICBleHBvcnRzLkNvZGVwZW4gPSBDb2RlcGVuOwogICAgZXhwb3J0cy5Db2Rlc2FuZGJveCA9IENvZGVzYW5kYm94OwogICAgZXhwb3J0cy5Db2ZmZWUgPSBDb2ZmZWU7CiAgICBleHBvcnRzLkNvZyA9IENvZzsKICAgIGV4cG9ydHMuQ29pbnMgPSBDb2luczsKICAgIGV4cG9ydHMuQ29sdW1ucyA9IENvbHVtbnMyOwogICAgZXhwb3J0cy5Db2x1bW5zMiA9IENvbHVtbnMyOwogICAgZXhwb3J0cy5Db2x1bW5zMyA9IENvbHVtbnMzOwogICAgZXhwb3J0cy5Db2x1bW5zM0NvZyA9IENvbHVtbnMzQ29nOwogICAgZXhwb3J0cy5Db2x1bW5zNCA9IENvbHVtbnM0OwogICAgZXhwb3J0cy5Db2x1bW5zU2V0dGluZ3MgPSBDb2x1bW5zM0NvZzsKICAgIGV4cG9ydHMuQ29tYmluZSA9IENvbWJpbmU7CiAgICBleHBvcnRzLkNvbW1hbmQgPSBDb21tYW5kOwogICAgZXhwb3J0cy5Db21wYXNzID0gQ29tcGFzczsKICAgIGV4cG9ydHMuQ29tcG9uZW50ID0gQ29tcG9uZW50OwogICAgZXhwb3J0cy5Db21wdXRlciA9IENvbXB1dGVyOwogICAgZXhwb3J0cy5Db25jaWVyZ2VCZWxsID0gQ29uY2llcmdlQmVsbDsKICAgIGV4cG9ydHMuQ29uZSA9IENvbmU7CiAgICBleHBvcnRzLkNvbnN0cnVjdGlvbiA9IENvbnN0cnVjdGlvbjsKICAgIGV4cG9ydHMuQ29udGFjdCA9IENvbnRhY3Q7CiAgICBleHBvcnRzLkNvbnRhY3QyID0gQ29udGFjdFJvdW5kOwogICAgZXhwb3J0cy5Db250YWN0Um91bmQgPSBDb250YWN0Um91bmQ7CiAgICBleHBvcnRzLkNvbnRhaW5lciA9IENvbnRhaW5lcjsKICAgIGV4cG9ydHMuQ29udHJhc3QgPSBDb250cmFzdDsKICAgIGV4cG9ydHMuQ29va2llID0gQ29va2llOwogICAgZXhwb3J0cy5Db29raW5nUG90ID0gQ29va2luZ1BvdDsKICAgIGV4cG9ydHMuQ29weSA9IENvcHk7CiAgICBleHBvcnRzLkNvcHlDaGVjayA9IENvcHlDaGVjazsKICAgIGV4cG9ydHMuQ29weU1pbnVzID0gQ29weU1pbnVzOwogICAgZXhwb3J0cy5Db3B5UGx1cyA9IENvcHlQbHVzOwogICAgZXhwb3J0cy5Db3B5U2xhc2ggPSBDb3B5U2xhc2g7CiAgICBleHBvcnRzLkNvcHlYID0gQ29weVg7CiAgICBleHBvcnRzLkNvcHlsZWZ0ID0gQ29weWxlZnQ7CiAgICBleHBvcnRzLkNvcHlyaWdodCA9IENvcHlyaWdodDsKICAgIGV4cG9ydHMuQ29ybmVyRG93bkxlZnQgPSBDb3JuZXJEb3duTGVmdDsKICAgIGV4cG9ydHMuQ29ybmVyRG93blJpZ2h0ID0gQ29ybmVyRG93blJpZ2h0OwogICAgZXhwb3J0cy5Db3JuZXJMZWZ0RG93biA9IENvcm5lckxlZnREb3duOwogICAgZXhwb3J0cy5Db3JuZXJMZWZ0VXAgPSBDb3JuZXJMZWZ0VXA7CiAgICBleHBvcnRzLkNvcm5lclJpZ2h0RG93biA9IENvcm5lclJpZ2h0RG93bjsKICAgIGV4cG9ydHMuQ29ybmVyUmlnaHRVcCA9IENvcm5lclJpZ2h0VXA7CiAgICBleHBvcnRzLkNvcm5lclVwTGVmdCA9IENvcm5lclVwTGVmdDsKICAgIGV4cG9ydHMuQ29ybmVyVXBSaWdodCA9IENvcm5lclVwUmlnaHQ7CiAgICBleHBvcnRzLkNwdSA9IENwdTsKICAgIGV4cG9ydHMuQ3JlYXRpdmVDb21tb25zID0gQ3JlYXRpdmVDb21tb25zOwogICAgZXhwb3J0cy5DcmVkaXRDYXJkID0gQ3JlZGl0Q2FyZDsKICAgIGV4cG9ydHMuQ3JvaXNzYW50ID0gQ3JvaXNzYW50OwogICAgZXhwb3J0cy5Dcm9wID0gQ3JvcDsKICAgIGV4cG9ydHMuQ3Jvc3MgPSBDcm9zczsKICAgIGV4cG9ydHMuQ3Jvc3NoYWlyID0gQ3Jvc3NoYWlyOwogICAgZXhwb3J0cy5Dcm93biA9IENyb3duOwogICAgZXhwb3J0cy5DdWJvaWQgPSBDdWJvaWQ7CiAgICBleHBvcnRzLkN1cFNvZGEgPSBDdXBTb2RhOwogICAgZXhwb3J0cy5DdXJseUJyYWNlcyA9IEJyYWNlczsKICAgIGV4cG9ydHMuQ3VycmVuY3kgPSBDdXJyZW5jeTsKICAgIGV4cG9ydHMuQ3lsaW5kZXIgPSBDeWxpbmRlcjsKICAgIGV4cG9ydHMuRGFtID0gRGFtOwogICAgZXhwb3J0cy5EYXRhYmFzZSA9IERhdGFiYXNlOwogICAgZXhwb3J0cy5EYXRhYmFzZUJhY2t1cCA9IERhdGFiYXNlQmFja3VwOwogICAgZXhwb3J0cy5EYXRhYmFzZVphcCA9IERhdGFiYXNlWmFwOwogICAgZXhwb3J0cy5EZWNpbWFsc0Fycm93TGVmdCA9IERlY2ltYWxzQXJyb3dMZWZ0OwogICAgZXhwb3J0cy5EZWNpbWFsc0Fycm93UmlnaHQgPSBEZWNpbWFsc0Fycm93UmlnaHQ7CiAgICBleHBvcnRzLkRlbGV0ZSA9IERlbGV0ZTsKICAgIGV4cG9ydHMuRGVzc2VydCA9IERlc3NlcnQ7CiAgICBleHBvcnRzLkRpYW1ldGVyID0gRGlhbWV0ZXI7CiAgICBleHBvcnRzLkRpYW1vbmQgPSBEaWFtb25kOwogICAgZXhwb3J0cy5EaWFtb25kTWludXMgPSBEaWFtb25kTWludXM7CiAgICBleHBvcnRzLkRpYW1vbmRQZXJjZW50ID0gRGlhbW9uZFBlcmNlbnQ7CiAgICBleHBvcnRzLkRpYW1vbmRQbHVzID0gRGlhbW9uZFBsdXM7CiAgICBleHBvcnRzLkRpY2UxID0gRGljZTE7CiAgICBleHBvcnRzLkRpY2UyID0gRGljZTI7CiAgICBleHBvcnRzLkRpY2UzID0gRGljZTM7CiAgICBleHBvcnRzLkRpY2U0ID0gRGljZTQ7CiAgICBleHBvcnRzLkRpY2U1ID0gRGljZTU7CiAgICBleHBvcnRzLkRpY2U2ID0gRGljZTY7CiAgICBleHBvcnRzLkRpY2VzID0gRGljZXM7CiAgICBleHBvcnRzLkRpZmYgPSBEaWZmOwogICAgZXhwb3J0cy5EaXNjID0gRGlzYzsKICAgIGV4cG9ydHMuRGlzYzIgPSBEaXNjMjsKICAgIGV4cG9ydHMuRGlzYzMgPSBEaXNjMzsKICAgIGV4cG9ydHMuRGlzY0FsYnVtID0gRGlzY0FsYnVtOwogICAgZXhwb3J0cy5EaXZpZGUgPSBEaXZpZGU7CiAgICBleHBvcnRzLkRpdmlkZUNpcmNsZSA9IENpcmNsZURpdmlkZTsKICAgIGV4cG9ydHMuRGl2aWRlU3F1YXJlID0gU3F1YXJlRGl2aWRlOwogICAgZXhwb3J0cy5EbmEgPSBEbmE7CiAgICBleHBvcnRzLkRuYU9mZiA9IERuYU9mZjsKICAgIGV4cG9ydHMuRG9jayA9IERvY2s7CiAgICBleHBvcnRzLkRvZyA9IERvZzsKICAgIGV4cG9ydHMuRG9sbGFyU2lnbiA9IERvbGxhclNpZ247CiAgICBleHBvcnRzLkRvbnV0ID0gRG9udXQ7CiAgICBleHBvcnRzLkRvb3JDbG9zZWQgPSBEb29yQ2xvc2VkOwogICAgZXhwb3J0cy5Eb29yQ2xvc2VkTG9ja2VkID0gRG9vckNsb3NlZExvY2tlZDsKICAgIGV4cG9ydHMuRG9vck9wZW4gPSBEb29yT3BlbjsKICAgIGV4cG9ydHMuRG90ID0gRG90OwogICAgZXhwb3J0cy5Eb3RTcXVhcmUgPSBTcXVhcmVEb3Q7CiAgICBleHBvcnRzLkRvd25sb2FkID0gRG93bmxvYWQ7CiAgICBleHBvcnRzLkRvd25sb2FkQ2xvdWQgPSBDbG91ZERvd25sb2FkOwogICAgZXhwb3J0cy5EcmFmdGluZ0NvbXBhc3MgPSBEcmFmdGluZ0NvbXBhc3M7CiAgICBleHBvcnRzLkRyYW1hID0gRHJhbWE7CiAgICBleHBvcnRzLkRyaWJiYmxlID0gRHJpYmJibGU7CiAgICBleHBvcnRzLkRyaWxsID0gRHJpbGw7CiAgICBleHBvcnRzLkRyb25lID0gRHJvbmU7CiAgICBleHBvcnRzLkRyb3BsZXQgPSBEcm9wbGV0OwogICAgZXhwb3J0cy5Ecm9wbGV0T2ZmID0gRHJvcGxldE9mZjsKICAgIGV4cG9ydHMuRHJvcGxldHMgPSBEcm9wbGV0czsKICAgIGV4cG9ydHMuRHJ1bSA9IERydW07CiAgICBleHBvcnRzLkRydW1zdGljayA9IERydW1zdGljazsKICAgIGV4cG9ydHMuRHVtYmJlbGwgPSBEdW1iYmVsbDsKICAgIGV4cG9ydHMuRWFyID0gRWFyOwogICAgZXhwb3J0cy5FYXJPZmYgPSBFYXJPZmY7CiAgICBleHBvcnRzLkVhcnRoID0gRWFydGg7CiAgICBleHBvcnRzLkVhcnRoTG9jayA9IEVhcnRoTG9jazsKICAgIGV4cG9ydHMuRWNsaXBzZSA9IEVjbGlwc2U7CiAgICBleHBvcnRzLkVkaXQgPSBTcXVhcmVQZW47CiAgICBleHBvcnRzLkVkaXQyID0gUGVuOwogICAgZXhwb3J0cy5FZGl0MyA9IFBlbkxpbmU7CiAgICBleHBvcnRzLkVnZyA9IEVnZzsKICAgIGV4cG9ydHMuRWdnRnJpZWQgPSBFZ2dGcmllZDsKICAgIGV4cG9ydHMuRWdnT2ZmID0gRWdnT2ZmOwogICAgZXhwb3J0cy5FbGxpcHNpcyA9IEVsbGlwc2lzOwogICAgZXhwb3J0cy5FbGxpcHNpc1ZlcnRpY2FsID0gRWxsaXBzaXNWZXJ0aWNhbDsKICAgIGV4cG9ydHMuRXF1YWwgPSBFcXVhbDsKICAgIGV4cG9ydHMuRXF1YWxBcHByb3hpbWF0ZWx5ID0gRXF1YWxBcHByb3hpbWF0ZWx5OwogICAgZXhwb3J0cy5FcXVhbE5vdCA9IEVxdWFsTm90OwogICAgZXhwb3J0cy5FcXVhbFNxdWFyZSA9IFNxdWFyZUVxdWFsOwogICAgZXhwb3J0cy5FcmFzZXIgPSBFcmFzZXI7CiAgICBleHBvcnRzLkV0aGVybmV0UG9ydCA9IEV0aGVybmV0UG9ydDsKICAgIGV4cG9ydHMuRXVybyA9IEV1cm87CiAgICBleHBvcnRzLkV2Q2hhcmdlciA9IEV2Q2hhcmdlcjsKICAgIGV4cG9ydHMuRXhwYW5kID0gRXhwYW5kOwogICAgZXhwb3J0cy5FeHRlcm5hbExpbmsgPSBFeHRlcm5hbExpbms7CiAgICBleHBvcnRzLkV5ZSA9IEV5ZTsKICAgIGV4cG9ydHMuRXllQ2xvc2VkID0gRXllQ2xvc2VkOwogICAgZXhwb3J0cy5FeWVPZmYgPSBFeWVPZmY7CiAgICBleHBvcnRzLkZhY2Vib29rID0gRmFjZWJvb2s7CiAgICBleHBvcnRzLkZhY3RvcnkgPSBGYWN0b3J5OwogICAgZXhwb3J0cy5GYW4gPSBGYW47CiAgICBleHBvcnRzLkZhc3RGb3J3YXJkID0gRmFzdEZvcndhcmQ7CiAgICBleHBvcnRzLkZlYXRoZXIgPSBGZWF0aGVyOwogICAgZXhwb3J0cy5GZW5jZSA9IEZlbmNlOwogICAgZXhwb3J0cy5GZXJyaXNXaGVlbCA9IEZlcnJpc1doZWVsOwogICAgZXhwb3J0cy5GaWdtYSA9IEZpZ21hOwogICAgZXhwb3J0cy5GaWxlID0gRmlsZTsKICAgIGV4cG9ydHMuRmlsZUFyY2hpdmUgPSBGaWxlQXJjaGl2ZTsKICAgIGV4cG9ydHMuRmlsZUF1ZGlvID0gRmlsZUhlYWRwaG9uZTsKICAgIGV4cG9ydHMuRmlsZUF1ZGlvMiA9IEZpbGVIZWFkcGhvbmU7CiAgICBleHBvcnRzLkZpbGVBeGlzM0QgPSBGaWxlQXhpczNkOwogICAgZXhwb3J0cy5GaWxlQXhpczNkID0gRmlsZUF4aXMzZDsKICAgIGV4cG9ydHMuRmlsZUJhZGdlID0gRmlsZUJhZGdlOwogICAgZXhwb3J0cy5GaWxlQmFkZ2UyID0gRmlsZUJhZGdlOwogICAgZXhwb3J0cy5GaWxlQmFyQ2hhcnQgPSBGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nOwogICAgZXhwb3J0cy5GaWxlQmFyQ2hhcnQyID0gRmlsZUNoYXJ0Q29sdW1uOwogICAgZXhwb3J0cy5GaWxlQm94ID0gRmlsZUJveDsKICAgIGV4cG9ydHMuRmlsZUJyYWNlcyA9IEZpbGVCcmFjZXM7CiAgICBleHBvcnRzLkZpbGVCcmFjZXNDb3JuZXIgPSBGaWxlQnJhY2VzQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlQ2hhcnRDb2x1bW4gPSBGaWxlQ2hhcnRDb2x1bW47CiAgICBleHBvcnRzLkZpbGVDaGFydENvbHVtbkluY3JlYXNpbmcgPSBGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nOwogICAgZXhwb3J0cy5GaWxlQ2hhcnRMaW5lID0gRmlsZUNoYXJ0TGluZTsKICAgIGV4cG9ydHMuRmlsZUNoYXJ0UGllID0gRmlsZUNoYXJ0UGllOwogICAgZXhwb3J0cy5GaWxlQ2hlY2sgPSBGaWxlQ2hlY2s7CiAgICBleHBvcnRzLkZpbGVDaGVjazIgPSBGaWxlQ2hlY2tDb3JuZXI7CiAgICBleHBvcnRzLkZpbGVDaGVja0Nvcm5lciA9IEZpbGVDaGVja0Nvcm5lcjsKICAgIGV4cG9ydHMuRmlsZUNsb2NrID0gRmlsZUNsb2NrOwogICAgZXhwb3J0cy5GaWxlQ29kZSA9IEZpbGVDb2RlOwogICAgZXhwb3J0cy5GaWxlQ29kZTIgPSBGaWxlQ29kZUNvcm5lcjsKICAgIGV4cG9ydHMuRmlsZUNvZGVDb3JuZXIgPSBGaWxlQ29kZUNvcm5lcjsKICAgIGV4cG9ydHMuRmlsZUNvZyA9IEZpbGVDb2c7CiAgICBleHBvcnRzLkZpbGVDb2cyID0gRmlsZUNvZzsKICAgIGV4cG9ydHMuRmlsZURpZmYgPSBGaWxlRGlmZjsKICAgIGV4cG9ydHMuRmlsZURpZ2l0ID0gRmlsZURpZ2l0OwogICAgZXhwb3J0cy5GaWxlRG93biA9IEZpbGVEb3duOwogICAgZXhwb3J0cy5GaWxlRWRpdCA9IEZpbGVQZW47CiAgICBleHBvcnRzLkZpbGVFeGNsYW1hdGlvblBvaW50ID0gRmlsZUV4Y2xhbWF0aW9uUG9pbnQ7CiAgICBleHBvcnRzLkZpbGVIZWFkcGhvbmUgPSBGaWxlSGVhZHBob25lOwogICAgZXhwb3J0cy5GaWxlSGVhcnQgPSBGaWxlSGVhcnQ7CiAgICBleHBvcnRzLkZpbGVJbWFnZSA9IEZpbGVJbWFnZTsKICAgIGV4cG9ydHMuRmlsZUlucHV0ID0gRmlsZUlucHV0OwogICAgZXhwb3J0cy5GaWxlSnNvbiA9IEZpbGVCcmFjZXM7CiAgICBleHBvcnRzLkZpbGVKc29uMiA9IEZpbGVCcmFjZXNDb3JuZXI7CiAgICBleHBvcnRzLkZpbGVLZXkgPSBGaWxlS2V5OwogICAgZXhwb3J0cy5GaWxlS2V5MiA9IEZpbGVLZXk7CiAgICBleHBvcnRzLkZpbGVMaW5lQ2hhcnQgPSBGaWxlQ2hhcnRMaW5lOwogICAgZXhwb3J0cy5GaWxlTG9jayA9IEZpbGVMb2NrOwogICAgZXhwb3J0cy5GaWxlTG9jazIgPSBGaWxlTG9jazsKICAgIGV4cG9ydHMuRmlsZU1pbnVzID0gRmlsZU1pbnVzOwogICAgZXhwb3J0cy5GaWxlTWludXMyID0gRmlsZU1pbnVzQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlTWludXNDb3JuZXIgPSBGaWxlTWludXNDb3JuZXI7CiAgICBleHBvcnRzLkZpbGVNdXNpYyA9IEZpbGVNdXNpYzsKICAgIGV4cG9ydHMuRmlsZU91dHB1dCA9IEZpbGVPdXRwdXQ7CiAgICBleHBvcnRzLkZpbGVQZW4gPSBGaWxlUGVuOwogICAgZXhwb3J0cy5GaWxlUGVuTGluZSA9IEZpbGVQZW5MaW5lOwogICAgZXhwb3J0cy5GaWxlUGllQ2hhcnQgPSBGaWxlQ2hhcnRQaWU7CiAgICBleHBvcnRzLkZpbGVQbGF5ID0gRmlsZVBsYXk7CiAgICBleHBvcnRzLkZpbGVQbHVzID0gRmlsZVBsdXM7CiAgICBleHBvcnRzLkZpbGVQbHVzMiA9IEZpbGVQbHVzQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlUGx1c0Nvcm5lciA9IEZpbGVQbHVzQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlUXVlc3Rpb24gPSBGaWxlUXVlc3Rpb25NYXJrOwogICAgZXhwb3J0cy5GaWxlUXVlc3Rpb25NYXJrID0gRmlsZVF1ZXN0aW9uTWFyazsKICAgIGV4cG9ydHMuRmlsZVNjYW4gPSBGaWxlU2NhbjsKICAgIGV4cG9ydHMuRmlsZVNlYXJjaCA9IEZpbGVTZWFyY2g7CiAgICBleHBvcnRzLkZpbGVTZWFyY2gyID0gRmlsZVNlYXJjaENvcm5lcjsKICAgIGV4cG9ydHMuRmlsZVNlYXJjaENvcm5lciA9IEZpbGVTZWFyY2hDb3JuZXI7CiAgICBleHBvcnRzLkZpbGVTaWduYWwgPSBGaWxlU2lnbmFsOwogICAgZXhwb3J0cy5GaWxlU2lnbmF0dXJlID0gRmlsZVBlbkxpbmU7CiAgICBleHBvcnRzLkZpbGVTbGlkZXJzID0gRmlsZVNsaWRlcnM7CiAgICBleHBvcnRzLkZpbGVTcHJlYWRzaGVldCA9IEZpbGVTcHJlYWRzaGVldDsKICAgIGV4cG9ydHMuRmlsZVN0YWNrID0gRmlsZVN0YWNrOwogICAgZXhwb3J0cy5GaWxlU3ltbGluayA9IEZpbGVTeW1saW5rOwogICAgZXhwb3J0cy5GaWxlVGVybWluYWwgPSBGaWxlVGVybWluYWw7CiAgICBleHBvcnRzLkZpbGVUZXh0ID0gRmlsZVRleHQ7CiAgICBleHBvcnRzLkZpbGVUeXBlID0gRmlsZVR5cGU7CiAgICBleHBvcnRzLkZpbGVUeXBlMiA9IEZpbGVUeXBlQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlVHlwZUNvcm5lciA9IEZpbGVUeXBlQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlVXAgPSBGaWxlVXA7CiAgICBleHBvcnRzLkZpbGVVc2VyID0gRmlsZVVzZXI7CiAgICBleHBvcnRzLkZpbGVWaWRlbyA9IEZpbGVQbGF5OwogICAgZXhwb3J0cy5GaWxlVmlkZW8yID0gRmlsZVZpZGVvQ2FtZXJhOwogICAgZXhwb3J0cy5GaWxlVmlkZW9DYW1lcmEgPSBGaWxlVmlkZW9DYW1lcmE7CiAgICBleHBvcnRzLkZpbGVWb2x1bWUgPSBGaWxlVm9sdW1lOwogICAgZXhwb3J0cy5GaWxlVm9sdW1lMiA9IEZpbGVTaWduYWw7CiAgICBleHBvcnRzLkZpbGVXYXJuaW5nID0gRmlsZUV4Y2xhbWF0aW9uUG9pbnQ7CiAgICBleHBvcnRzLkZpbGVYID0gRmlsZVg7CiAgICBleHBvcnRzLkZpbGVYMiA9IEZpbGVYQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlWENvcm5lciA9IEZpbGVYQ29ybmVyOwogICAgZXhwb3J0cy5GaWxlcyA9IEZpbGVzOwogICAgZXhwb3J0cy5GaWxtID0gRmlsbTsKICAgIGV4cG9ydHMuRmlsdGVyID0gRnVubmVsOwogICAgZXhwb3J0cy5GaWx0ZXJYID0gRnVubmVsWDsKICAgIGV4cG9ydHMuRmluZ2VycHJpbnQgPSBGaW5nZXJwcmludFBhdHRlcm47CiAgICBleHBvcnRzLkZpbmdlcnByaW50UGF0dGVybiA9IEZpbmdlcnByaW50UGF0dGVybjsKICAgIGV4cG9ydHMuRmlyZUV4dGluZ3Vpc2hlciA9IEZpcmVFeHRpbmd1aXNoZXI7CiAgICBleHBvcnRzLkZpc2ggPSBGaXNoOwogICAgZXhwb3J0cy5GaXNoT2ZmID0gRmlzaE9mZjsKICAgIGV4cG9ydHMuRmlzaFN5bWJvbCA9IEZpc2hTeW1ib2w7CiAgICBleHBvcnRzLkZpc2hpbmdIb29rID0gRmlzaGluZ0hvb2s7CiAgICBleHBvcnRzLkZsYWcgPSBGbGFnOwogICAgZXhwb3J0cy5GbGFnT2ZmID0gRmxhZ09mZjsKICAgIGV4cG9ydHMuRmxhZ1RyaWFuZ2xlTGVmdCA9IEZsYWdUcmlhbmdsZUxlZnQ7CiAgICBleHBvcnRzLkZsYWdUcmlhbmdsZVJpZ2h0ID0gRmxhZ1RyaWFuZ2xlUmlnaHQ7CiAgICBleHBvcnRzLkZsYW1lID0gRmxhbWU7CiAgICBleHBvcnRzLkZsYW1lS2luZGxpbmcgPSBGbGFtZUtpbmRsaW5nOwogICAgZXhwb3J0cy5GbGFzaGxpZ2h0ID0gRmxhc2hsaWdodDsKICAgIGV4cG9ydHMuRmxhc2hsaWdodE9mZiA9IEZsYXNobGlnaHRPZmY7CiAgICBleHBvcnRzLkZsYXNrQ29uaWNhbCA9IEZsYXNrQ29uaWNhbDsKICAgIGV4cG9ydHMuRmxhc2tDb25pY2FsT2ZmID0gRmxhc2tDb25pY2FsT2ZmOwogICAgZXhwb3J0cy5GbGFza1JvdW5kID0gRmxhc2tSb3VuZDsKICAgIGV4cG9ydHMuRmxpcEhvcml6b250YWwgPSBGbGlwSG9yaXpvbnRhbDsKICAgIGV4cG9ydHMuRmxpcEhvcml6b250YWwyID0gRmxpcEhvcml6b250YWwyOwogICAgZXhwb3J0cy5GbGlwVmVydGljYWwgPSBGbGlwVmVydGljYWw7CiAgICBleHBvcnRzLkZsaXBWZXJ0aWNhbDIgPSBGbGlwVmVydGljYWwyOwogICAgZXhwb3J0cy5GbG93ZXIgPSBGbG93ZXI7CiAgICBleHBvcnRzLkZsb3dlcjIgPSBGbG93ZXIyOwogICAgZXhwb3J0cy5Gb2N1cyA9IEZvY3VzOwogICAgZXhwb3J0cy5Gb2xkSG9yaXpvbnRhbCA9IEZvbGRIb3Jpem9udGFsOwogICAgZXhwb3J0cy5Gb2xkVmVydGljYWwgPSBGb2xkVmVydGljYWw7CiAgICBleHBvcnRzLkZvbGRlciA9IEZvbGRlcjsKICAgIGV4cG9ydHMuRm9sZGVyQXJjaGl2ZSA9IEZvbGRlckFyY2hpdmU7CiAgICBleHBvcnRzLkZvbGRlckNoZWNrID0gRm9sZGVyQ2hlY2s7CiAgICBleHBvcnRzLkZvbGRlckNsb2NrID0gRm9sZGVyQ2xvY2s7CiAgICBleHBvcnRzLkZvbGRlckNsb3NlZCA9IEZvbGRlckNsb3NlZDsKICAgIGV4cG9ydHMuRm9sZGVyQ29kZSA9IEZvbGRlckNvZGU7CiAgICBleHBvcnRzLkZvbGRlckNvZyA9IEZvbGRlckNvZzsKICAgIGV4cG9ydHMuRm9sZGVyQ29nMiA9IEZvbGRlckNvZzsKICAgIGV4cG9ydHMuRm9sZGVyRG90ID0gRm9sZGVyRG90OwogICAgZXhwb3J0cy5Gb2xkZXJEb3duID0gRm9sZGVyRG93bjsKICAgIGV4cG9ydHMuRm9sZGVyRWRpdCA9IEZvbGRlclBlbjsKICAgIGV4cG9ydHMuRm9sZGVyR2l0ID0gRm9sZGVyR2l0OwogICAgZXhwb3J0cy5Gb2xkZXJHaXQyID0gRm9sZGVyR2l0MjsKICAgIGV4cG9ydHMuRm9sZGVySGVhcnQgPSBGb2xkZXJIZWFydDsKICAgIGV4cG9ydHMuRm9sZGVySW5wdXQgPSBGb2xkZXJJbnB1dDsKICAgIGV4cG9ydHMuRm9sZGVyS2FuYmFuID0gRm9sZGVyS2FuYmFuOwogICAgZXhwb3J0cy5Gb2xkZXJLZXkgPSBGb2xkZXJLZXk7CiAgICBleHBvcnRzLkZvbGRlckxvY2sgPSBGb2xkZXJMb2NrOwogICAgZXhwb3J0cy5Gb2xkZXJNaW51cyA9IEZvbGRlck1pbnVzOwogICAgZXhwb3J0cy5Gb2xkZXJPcGVuID0gRm9sZGVyT3BlbjsKICAgIGV4cG9ydHMuRm9sZGVyT3BlbkRvdCA9IEZvbGRlck9wZW5Eb3Q7CiAgICBleHBvcnRzLkZvbGRlck91dHB1dCA9IEZvbGRlck91dHB1dDsKICAgIGV4cG9ydHMuRm9sZGVyUGVuID0gRm9sZGVyUGVuOwogICAgZXhwb3J0cy5Gb2xkZXJQbHVzID0gRm9sZGVyUGx1czsKICAgIGV4cG9ydHMuRm9sZGVyUm9vdCA9IEZvbGRlclJvb3Q7CiAgICBleHBvcnRzLkZvbGRlclNlYXJjaCA9IEZvbGRlclNlYXJjaDsKICAgIGV4cG9ydHMuRm9sZGVyU2VhcmNoMiA9IEZvbGRlclNlYXJjaDI7CiAgICBleHBvcnRzLkZvbGRlclN5bWxpbmsgPSBGb2xkZXJTeW1saW5rOwogICAgZXhwb3J0cy5Gb2xkZXJTeW5jID0gRm9sZGVyU3luYzsKICAgIGV4cG9ydHMuRm9sZGVyVHJlZSA9IEZvbGRlclRyZWU7CiAgICBleHBvcnRzLkZvbGRlclVwID0gRm9sZGVyVXA7CiAgICBleHBvcnRzLkZvbGRlclggPSBGb2xkZXJYOwogICAgZXhwb3J0cy5Gb2xkZXJzID0gRm9sZGVyczsKICAgIGV4cG9ydHMuRm9vdHByaW50cyA9IEZvb3RwcmludHM7CiAgICBleHBvcnRzLkZvcmtLbmlmZSA9IFV0ZW5zaWxzOwogICAgZXhwb3J0cy5Gb3JrS25pZmVDcm9zc2VkID0gVXRlbnNpbHNDcm9zc2VkOwogICAgZXhwb3J0cy5Gb3JrbGlmdCA9IEZvcmtsaWZ0OwogICAgZXhwb3J0cy5Gb3JtID0gRm9ybTsKICAgIGV4cG9ydHMuRm9ybUlucHV0ID0gUmVjdGFuZ2xlRWxsaXBzaXM7CiAgICBleHBvcnRzLkZvcndhcmQgPSBGb3J3YXJkOwogICAgZXhwb3J0cy5GcmFtZSA9IEZyYW1lOwogICAgZXhwb3J0cy5GcmFtZXIgPSBGcmFtZXI7CiAgICBleHBvcnRzLkZyb3duID0gRnJvd247CiAgICBleHBvcnRzLkZ1ZWwgPSBGdWVsOwogICAgZXhwb3J0cy5GdWxsc2NyZWVuID0gRnVsbHNjcmVlbjsKICAgIGV4cG9ydHMuRnVuY3Rpb25TcXVhcmUgPSBTcXVhcmVGdW5jdGlvbjsKICAgIGV4cG9ydHMuRnVubmVsID0gRnVubmVsOwogICAgZXhwb3J0cy5GdW5uZWxQbHVzID0gRnVubmVsUGx1czsKICAgIGV4cG9ydHMuRnVubmVsWCA9IEZ1bm5lbFg7CiAgICBleHBvcnRzLkdhbGxlcnlIb3Jpem9udGFsID0gR2FsbGVyeUhvcml6b250YWw7CiAgICBleHBvcnRzLkdhbGxlcnlIb3Jpem9udGFsRW5kID0gR2FsbGVyeUhvcml6b250YWxFbmQ7CiAgICBleHBvcnRzLkdhbGxlcnlUaHVtYm5haWxzID0gR2FsbGVyeVRodW1ibmFpbHM7CiAgICBleHBvcnRzLkdhbGxlcnlWZXJ0aWNhbCA9IEdhbGxlcnlWZXJ0aWNhbDsKICAgIGV4cG9ydHMuR2FsbGVyeVZlcnRpY2FsRW5kID0gR2FsbGVyeVZlcnRpY2FsRW5kOwogICAgZXhwb3J0cy5HYW1lcGFkID0gR2FtZXBhZDsKICAgIGV4cG9ydHMuR2FtZXBhZDIgPSBHYW1lcGFkMjsKICAgIGV4cG9ydHMuR2FtZXBhZERpcmVjdGlvbmFsID0gR2FtZXBhZERpcmVjdGlvbmFsOwogICAgZXhwb3J0cy5HYW50dENoYXJ0ID0gQ2hhcnROb0F4ZXNHYW50dDsKICAgIGV4cG9ydHMuR2FudHRDaGFydFNxdWFyZSA9IFNxdWFyZUNoYXJ0R2FudHQ7CiAgICBleHBvcnRzLkdhdWdlID0gR2F1Z2U7CiAgICBleHBvcnRzLkdhdWdlQ2lyY2xlID0gQ2lyY2xlR2F1Z2U7CiAgICBleHBvcnRzLkdhdmVsID0gR2F2ZWw7CiAgICBleHBvcnRzLkdlbSA9IEdlbTsKICAgIGV4cG9ydHMuR2VvcmdpYW5MYXJpID0gR2VvcmdpYW5MYXJpOwogICAgZXhwb3J0cy5HaG9zdCA9IEdob3N0OwogICAgZXhwb3J0cy5HaWZ0ID0gR2lmdDsKICAgIGV4cG9ydHMuR2l0QnJhbmNoID0gR2l0QnJhbmNoOwogICAgZXhwb3J0cy5HaXRCcmFuY2hNaW51cyA9IEdpdEJyYW5jaE1pbnVzOwogICAgZXhwb3J0cy5HaXRCcmFuY2hQbHVzID0gR2l0QnJhbmNoUGx1czsKICAgIGV4cG9ydHMuR2l0Q29tbWl0ID0gR2l0Q29tbWl0SG9yaXpvbnRhbDsKICAgIGV4cG9ydHMuR2l0Q29tbWl0SG9yaXpvbnRhbCA9IEdpdENvbW1pdEhvcml6b250YWw7CiAgICBleHBvcnRzLkdpdENvbW1pdFZlcnRpY2FsID0gR2l0Q29tbWl0VmVydGljYWw7CiAgICBleHBvcnRzLkdpdENvbXBhcmUgPSBHaXRDb21wYXJlOwogICAgZXhwb3J0cy5HaXRDb21wYXJlQXJyb3dzID0gR2l0Q29tcGFyZUFycm93czsKICAgIGV4cG9ydHMuR2l0Rm9yayA9IEdpdEZvcms7CiAgICBleHBvcnRzLkdpdEdyYXBoID0gR2l0R3JhcGg7CiAgICBleHBvcnRzLkdpdE1lcmdlID0gR2l0TWVyZ2U7CiAgICBleHBvcnRzLkdpdFB1bGxSZXF1ZXN0ID0gR2l0UHVsbFJlcXVlc3Q7CiAgICBleHBvcnRzLkdpdFB1bGxSZXF1ZXN0QXJyb3cgPSBHaXRQdWxsUmVxdWVzdEFycm93OwogICAgZXhwb3J0cy5HaXRQdWxsUmVxdWVzdENsb3NlZCA9IEdpdFB1bGxSZXF1ZXN0Q2xvc2VkOwogICAgZXhwb3J0cy5HaXRQdWxsUmVxdWVzdENyZWF0ZSA9IEdpdFB1bGxSZXF1ZXN0Q3JlYXRlOwogICAgZXhwb3J0cy5HaXRQdWxsUmVxdWVzdENyZWF0ZUFycm93ID0gR2l0UHVsbFJlcXVlc3RDcmVhdGVBcnJvdzsKICAgIGV4cG9ydHMuR2l0UHVsbFJlcXVlc3REcmFmdCA9IEdpdFB1bGxSZXF1ZXN0RHJhZnQ7CiAgICBleHBvcnRzLkdpdGh1YiA9IEdpdGh1YjsKICAgIGV4cG9ydHMuR2l0bGFiID0gR2l0bGFiOwogICAgZXhwb3J0cy5HbGFzc1dhdGVyID0gR2xhc3NXYXRlcjsKICAgIGV4cG9ydHMuR2xhc3NlcyA9IEdsYXNzZXM7CiAgICBleHBvcnRzLkdsb2JlID0gR2xvYmU7CiAgICBleHBvcnRzLkdsb2JlMiA9IEVhcnRoOwogICAgZXhwb3J0cy5HbG9iZUxvY2sgPSBHbG9iZUxvY2s7CiAgICBleHBvcnRzLkdsb2JlWCA9IEdsb2JlWDsKICAgIGV4cG9ydHMuR29hbCA9IEdvYWw7CiAgICBleHBvcnRzLkdwdSA9IEdwdTsKICAgIGV4cG9ydHMuR3JhYiA9IEhhbmRHcmFiOwogICAgZXhwb3J0cy5HcmFkdWF0aW9uQ2FwID0gR3JhZHVhdGlvbkNhcDsKICAgIGV4cG9ydHMuR3JhcGUgPSBHcmFwZTsKICAgIGV4cG9ydHMuR3JpZCA9IEdyaWQzeDM7CiAgICBleHBvcnRzLkdyaWQyWDIgPSBHcmlkMngyOwogICAgZXhwb3J0cy5HcmlkMlgyQ2hlY2sgPSBHcmlkMngyQ2hlY2s7CiAgICBleHBvcnRzLkdyaWQyWDJQbHVzID0gR3JpZDJ4MlBsdXM7CiAgICBleHBvcnRzLkdyaWQyWDJYID0gR3JpZDJ4Mlg7CiAgICBleHBvcnRzLkdyaWQyeDIgPSBHcmlkMngyOwogICAgZXhwb3J0cy5HcmlkMngyQ2hlY2sgPSBHcmlkMngyQ2hlY2s7CiAgICBleHBvcnRzLkdyaWQyeDJQbHVzID0gR3JpZDJ4MlBsdXM7CiAgICBleHBvcnRzLkdyaWQyeDJYID0gR3JpZDJ4Mlg7CiAgICBleHBvcnRzLkdyaWQzWDMgPSBHcmlkM3gzOwogICAgZXhwb3J0cy5HcmlkM3gyID0gR3JpZDN4MjsKICAgIGV4cG9ydHMuR3JpZDN4MyA9IEdyaWQzeDM7CiAgICBleHBvcnRzLkdyaXAgPSBHcmlwOwogICAgZXhwb3J0cy5HcmlwSG9yaXpvbnRhbCA9IEdyaXBIb3Jpem9udGFsOwogICAgZXhwb3J0cy5HcmlwVmVydGljYWwgPSBHcmlwVmVydGljYWw7CiAgICBleHBvcnRzLkdyb3VwID0gR3JvdXA7CiAgICBleHBvcnRzLkd1aXRhciA9IEd1aXRhcjsKICAgIGV4cG9ydHMuSGFtID0gSGFtOwogICAgZXhwb3J0cy5IYW1idXJnZXIgPSBIYW1idXJnZXI7CiAgICBleHBvcnRzLkhhbW1lciA9IEhhbW1lcjsKICAgIGV4cG9ydHMuSGFuZCA9IEhhbmQ7CiAgICBleHBvcnRzLkhhbmRDb2lucyA9IEhhbmRDb2luczsKICAgIGV4cG9ydHMuSGFuZEZpc3QgPSBIYW5kRmlzdDsKICAgIGV4cG9ydHMuSGFuZEdyYWIgPSBIYW5kR3JhYjsKICAgIGV4cG9ydHMuSGFuZEhlYXJ0ID0gSGFuZEhlYXJ0OwogICAgZXhwb3J0cy5IYW5kSGVscGluZyA9IEhhbmRIZWxwaW5nOwogICAgZXhwb3J0cy5IYW5kTWV0YWwgPSBIYW5kTWV0YWw7CiAgICBleHBvcnRzLkhhbmRQbGF0dGVyID0gSGFuZFBsYXR0ZXI7CiAgICBleHBvcnRzLkhhbmRiYWcgPSBIYW5kYmFnOwogICAgZXhwb3J0cy5IYW5kc2hha2UgPSBIYW5kc2hha2U7CiAgICBleHBvcnRzLkhhcmREcml2ZSA9IEhhcmREcml2ZTsKICAgIGV4cG9ydHMuSGFyZERyaXZlRG93bmxvYWQgPSBIYXJkRHJpdmVEb3dubG9hZDsKICAgIGV4cG9ydHMuSGFyZERyaXZlVXBsb2FkID0gSGFyZERyaXZlVXBsb2FkOwogICAgZXhwb3J0cy5IYXJkSGF0ID0gSGFyZEhhdDsKICAgIGV4cG9ydHMuSGFzaCA9IEhhc2g7CiAgICBleHBvcnRzLkhhdEdsYXNzZXMgPSBIYXRHbGFzc2VzOwogICAgZXhwb3J0cy5IYXplID0gSGF6ZTsKICAgIGV4cG9ydHMuSGQgPSBIZDsKICAgIGV4cG9ydHMuSGRtaVBvcnQgPSBIZG1pUG9ydDsKICAgIGV4cG9ydHMuSGVhZGluZyA9IEhlYWRpbmc7CiAgICBleHBvcnRzLkhlYWRpbmcxID0gSGVhZGluZzE7CiAgICBleHBvcnRzLkhlYWRpbmcyID0gSGVhZGluZzI7CiAgICBleHBvcnRzLkhlYWRpbmczID0gSGVhZGluZzM7CiAgICBleHBvcnRzLkhlYWRpbmc0ID0gSGVhZGluZzQ7CiAgICBleHBvcnRzLkhlYWRpbmc1ID0gSGVhZGluZzU7CiAgICBleHBvcnRzLkhlYWRpbmc2ID0gSGVhZGluZzY7CiAgICBleHBvcnRzLkhlYWRwaG9uZU9mZiA9IEhlYWRwaG9uZU9mZjsKICAgIGV4cG9ydHMuSGVhZHBob25lcyA9IEhlYWRwaG9uZXM7CiAgICBleHBvcnRzLkhlYWRzZXQgPSBIZWFkc2V0OwogICAgZXhwb3J0cy5IZWFydCA9IEhlYXJ0OwogICAgZXhwb3J0cy5IZWFydENyYWNrID0gSGVhcnRDcmFjazsKICAgIGV4cG9ydHMuSGVhcnRIYW5kc2hha2UgPSBIZWFydEhhbmRzaGFrZTsKICAgIGV4cG9ydHMuSGVhcnRNaW51cyA9IEhlYXJ0TWludXM7CiAgICBleHBvcnRzLkhlYXJ0T2ZmID0gSGVhcnRPZmY7CiAgICBleHBvcnRzLkhlYXJ0UGx1cyA9IEhlYXJ0UGx1czsKICAgIGV4cG9ydHMuSGVhcnRQdWxzZSA9IEhlYXJ0UHVsc2U7CiAgICBleHBvcnRzLkhlYXRlciA9IEhlYXRlcjsKICAgIGV4cG9ydHMuSGVsaWNvcHRlciA9IEhlbGljb3B0ZXI7CiAgICBleHBvcnRzLkhlbHBDaXJjbGUgPSBDaXJjbGVRdWVzdGlvbk1hcms7CiAgICBleHBvcnRzLkhlbHBpbmdIYW5kID0gSGFuZEhlbHBpbmc7CiAgICBleHBvcnRzLkhleGFnb24gPSBIZXhhZ29uOwogICAgZXhwb3J0cy5IaWdobGlnaHRlciA9IEhpZ2hsaWdodGVyOwogICAgZXhwb3J0cy5IaXN0b3J5ID0gSGlzdG9yeTsKICAgIGV4cG9ydHMuSG9tZSA9IEhvdXNlOwogICAgZXhwb3J0cy5Ib3AgPSBIb3A7CiAgICBleHBvcnRzLkhvcE9mZiA9IEhvcE9mZjsKICAgIGV4cG9ydHMuSG9zcGl0YWwgPSBIb3NwaXRhbDsKICAgIGV4cG9ydHMuSG90ZWwgPSBIb3RlbDsKICAgIGV4cG9ydHMuSG91cmdsYXNzID0gSG91cmdsYXNzOwogICAgZXhwb3J0cy5Ib3VzZSA9IEhvdXNlOwogICAgZXhwb3J0cy5Ib3VzZUhlYXJ0ID0gSG91c2VIZWFydDsKICAgIGV4cG9ydHMuSG91c2VQbHVnID0gSG91c2VQbHVnOwogICAgZXhwb3J0cy5Ib3VzZVBsdXMgPSBIb3VzZVBsdXM7CiAgICBleHBvcnRzLkhvdXNlV2lmaSA9IEhvdXNlV2lmaTsKICAgIGV4cG9ydHMuSWNlQ3JlYW0gPSBJY2VDcmVhbUNvbmU7CiAgICBleHBvcnRzLkljZUNyZWFtMiA9IEljZUNyZWFtQm93bDsKICAgIGV4cG9ydHMuSWNlQ3JlYW1Cb3dsID0gSWNlQ3JlYW1Cb3dsOwogICAgZXhwb3J0cy5JY2VDcmVhbUNvbmUgPSBJY2VDcmVhbUNvbmU7CiAgICBleHBvcnRzLklkQ2FyZCA9IElkQ2FyZDsKICAgIGV4cG9ydHMuSWRDYXJkTGFueWFyZCA9IElkQ2FyZExhbnlhcmQ7CiAgICBleHBvcnRzLkltYWdlID0gSW1hZ2UyOwogICAgZXhwb3J0cy5JbWFnZURvd24gPSBJbWFnZURvd247CiAgICBleHBvcnRzLkltYWdlTWludXMgPSBJbWFnZU1pbnVzOwogICAgZXhwb3J0cy5JbWFnZU9mZiA9IEltYWdlT2ZmOwogICAgZXhwb3J0cy5JbWFnZVBsYXkgPSBJbWFnZVBsYXk7CiAgICBleHBvcnRzLkltYWdlUGx1cyA9IEltYWdlUGx1czsKICAgIGV4cG9ydHMuSW1hZ2VVcCA9IEltYWdlVXA7CiAgICBleHBvcnRzLkltYWdlVXBzY2FsZSA9IEltYWdlVXBzY2FsZTsKICAgIGV4cG9ydHMuSW1hZ2VzID0gSW1hZ2VzOwogICAgZXhwb3J0cy5JbXBvcnQgPSBJbXBvcnQ7CiAgICBleHBvcnRzLkluYm94ID0gSW5ib3g7CiAgICBleHBvcnRzLkluZGVudCA9IExpc3RJbmRlbnRJbmNyZWFzZTsKICAgIGV4cG9ydHMuSW5kZW50RGVjcmVhc2UgPSBMaXN0SW5kZW50RGVjcmVhc2U7CiAgICBleHBvcnRzLkluZGVudEluY3JlYXNlID0gTGlzdEluZGVudEluY3JlYXNlOwogICAgZXhwb3J0cy5JbmRpYW5SdXBlZSA9IEluZGlhblJ1cGVlOwogICAgZXhwb3J0cy5JbmZpbml0eSA9IEluZmluaXR5MjsKICAgIGV4cG9ydHMuSW5mbyA9IEluZm8yOwogICAgZXhwb3J0cy5JbnNwZWN0ID0gU3F1YXJlTW91c2VQb2ludGVyOwogICAgZXhwb3J0cy5JbnNwZWN0aW9uUGFuZWwgPSBJbnNwZWN0aW9uUGFuZWw7CiAgICBleHBvcnRzLkluc3RhZ3JhbSA9IEluc3RhZ3JhbTsKICAgIGV4cG9ydHMuSXRhbGljID0gSXRhbGljOwogICAgZXhwb3J0cy5JdGVyYXRpb25DY3cgPSBJdGVyYXRpb25DY3c7CiAgICBleHBvcnRzLkl0ZXJhdGlvbkN3ID0gSXRlcmF0aW9uQ3c7CiAgICBleHBvcnRzLkphcGFuZXNlWWVuID0gSmFwYW5lc2VZZW47CiAgICBleHBvcnRzLkpveXN0aWNrID0gSm95c3RpY2s7CiAgICBleHBvcnRzLkthbmJhbiA9IEthbmJhbjsKICAgIGV4cG9ydHMuS2FuYmFuU3F1YXJlID0gU3F1YXJlS2FuYmFuOwogICAgZXhwb3J0cy5LYW5iYW5TcXVhcmVEYXNoZWQgPSBTcXVhcmVEYXNoZWRLYW5iYW47CiAgICBleHBvcnRzLktheWFrID0gS2F5YWs7CiAgICBleHBvcnRzLktleSA9IEtleTI7CiAgICBleHBvcnRzLktleVJvdW5kID0gS2V5Um91bmQ7CiAgICBleHBvcnRzLktleVNxdWFyZSA9IEtleVNxdWFyZTsKICAgIGV4cG9ydHMuS2V5Ym9hcmQgPSBLZXlib2FyZDI7CiAgICBleHBvcnRzLktleWJvYXJkTXVzaWMgPSBLZXlib2FyZE11c2ljOwogICAgZXhwb3J0cy5LZXlib2FyZE9mZiA9IEtleWJvYXJkT2ZmOwogICAgZXhwb3J0cy5MYW1wID0gTGFtcDsKICAgIGV4cG9ydHMuTGFtcENlaWxpbmcgPSBMYW1wQ2VpbGluZzsKICAgIGV4cG9ydHMuTGFtcERlc2sgPSBMYW1wRGVzazsKICAgIGV4cG9ydHMuTGFtcEZsb29yID0gTGFtcEZsb29yOwogICAgZXhwb3J0cy5MYW1wV2FsbERvd24gPSBMYW1wV2FsbERvd247CiAgICBleHBvcnRzLkxhbXBXYWxsVXAgPSBMYW1wV2FsbFVwOwogICAgZXhwb3J0cy5MYW5kUGxvdCA9IExhbmRQbG90OwogICAgZXhwb3J0cy5MYW5kbWFyayA9IExhbmRtYXJrOwogICAgZXhwb3J0cy5MYW5ndWFnZXMgPSBMYW5ndWFnZXM7CiAgICBleHBvcnRzLkxhcHRvcCA9IExhcHRvcDsKICAgIGV4cG9ydHMuTGFwdG9wMiA9IExhcHRvcE1pbmltYWw7CiAgICBleHBvcnRzLkxhcHRvcE1pbmltYWwgPSBMYXB0b3BNaW5pbWFsOwogICAgZXhwb3J0cy5MYXB0b3BNaW5pbWFsQ2hlY2sgPSBMYXB0b3BNaW5pbWFsQ2hlY2s7CiAgICBleHBvcnRzLkxhc3NvID0gTGFzc287CiAgICBleHBvcnRzLkxhc3NvU2VsZWN0ID0gTGFzc29TZWxlY3Q7CiAgICBleHBvcnRzLkxhdWdoID0gTGF1Z2g7CiAgICBleHBvcnRzLkxheWVycyA9IExheWVyczM7CiAgICBleHBvcnRzLkxheWVyczIgPSBMYXllcnMyOwogICAgZXhwb3J0cy5MYXllcnMzID0gTGF5ZXJzMzsKICAgIGV4cG9ydHMuTGF5ZXJzUGx1cyA9IExheWVyc1BsdXM7CiAgICBleHBvcnRzLkxheW91dCA9IFBhbmVsc1RvcExlZnQ7CiAgICBleHBvcnRzLkxheW91dERhc2hib2FyZCA9IExheW91dERhc2hib2FyZDsKICAgIGV4cG9ydHMuTGF5b3V0R3JpZCA9IExheW91dEdyaWQ7CiAgICBleHBvcnRzLkxheW91dExpc3QgPSBMYXlvdXRMaXN0OwogICAgZXhwb3J0cy5MYXlvdXRQYW5lbExlZnQgPSBMYXlvdXRQYW5lbExlZnQ7CiAgICBleHBvcnRzLkxheW91dFBhbmVsVG9wID0gTGF5b3V0UGFuZWxUb3A7CiAgICBleHBvcnRzLkxheW91dFRlbXBsYXRlID0gTGF5b3V0VGVtcGxhdGU7CiAgICBleHBvcnRzLkxlYWYgPSBMZWFmOwogICAgZXhwb3J0cy5MZWFmeUdyZWVuID0gTGVhZnlHcmVlbjsKICAgIGV4cG9ydHMuTGVjdGVybiA9IExlY3Rlcm47CiAgICBleHBvcnRzLkxldHRlclRleHQgPSBUZXh0SW5pdGlhbDsKICAgIGV4cG9ydHMuTGlicmFyeSA9IExpYnJhcnkyOwogICAgZXhwb3J0cy5MaWJyYXJ5QmlnID0gTGlicmFyeUJpZzsKICAgIGV4cG9ydHMuTGlicmFyeVNxdWFyZSA9IFNxdWFyZUxpYnJhcnk7CiAgICBleHBvcnRzLkxpZmVCdW95ID0gTGlmZUJ1b3k7CiAgICBleHBvcnRzLkxpZ2F0dXJlID0gTGlnYXR1cmU7CiAgICBleHBvcnRzLkxpZ2h0YnVsYiA9IExpZ2h0YnVsYjsKICAgIGV4cG9ydHMuTGlnaHRidWxiT2ZmID0gTGlnaHRidWxiT2ZmOwogICAgZXhwb3J0cy5MaW5lQ2hhcnQgPSBDaGFydExpbmU7CiAgICBleHBvcnRzLkxpbmVTcXVpZ2dsZSA9IExpbmVTcXVpZ2dsZTsKICAgIGV4cG9ydHMuTGluayA9IExpbms7CiAgICBleHBvcnRzLkxpbmsyID0gTGluazI7CiAgICBleHBvcnRzLkxpbmsyT2ZmID0gTGluazJPZmY7CiAgICBleHBvcnRzLkxpbmtlZGluID0gTGlua2VkaW47CiAgICBleHBvcnRzLkxpc3QgPSBMaXN0OwogICAgZXhwb3J0cy5MaXN0Q2hlY2sgPSBMaXN0Q2hlY2s7CiAgICBleHBvcnRzLkxpc3RDaGVja3MgPSBMaXN0Q2hlY2tzOwogICAgZXhwb3J0cy5MaXN0Q2hldnJvbnNEb3duVXAgPSBMaXN0Q2hldnJvbnNEb3duVXA7CiAgICBleHBvcnRzLkxpc3RDaGV2cm9uc1VwRG93biA9IExpc3RDaGV2cm9uc1VwRG93bjsKICAgIGV4cG9ydHMuTGlzdENvbGxhcHNlID0gTGlzdENvbGxhcHNlOwogICAgZXhwb3J0cy5MaXN0RW5kID0gTGlzdEVuZDsKICAgIGV4cG9ydHMuTGlzdEZpbHRlciA9IExpc3RGaWx0ZXI7CiAgICBleHBvcnRzLkxpc3RGaWx0ZXJQbHVzID0gTGlzdEZpbHRlclBsdXM7CiAgICBleHBvcnRzLkxpc3RJbmRlbnREZWNyZWFzZSA9IExpc3RJbmRlbnREZWNyZWFzZTsKICAgIGV4cG9ydHMuTGlzdEluZGVudEluY3JlYXNlID0gTGlzdEluZGVudEluY3JlYXNlOwogICAgZXhwb3J0cy5MaXN0TWludXMgPSBMaXN0TWludXM7CiAgICBleHBvcnRzLkxpc3RNdXNpYyA9IExpc3RNdXNpYzsKICAgIGV4cG9ydHMuTGlzdE9yZGVyZWQgPSBMaXN0T3JkZXJlZDsKICAgIGV4cG9ydHMuTGlzdFBsdXMgPSBMaXN0UGx1czsKICAgIGV4cG9ydHMuTGlzdFJlc3RhcnQgPSBMaXN0UmVzdGFydDsKICAgIGV4cG9ydHMuTGlzdFN0YXJ0ID0gTGlzdFN0YXJ0OwogICAgZXhwb3J0cy5MaXN0VG9kbyA9IExpc3RUb2RvOwogICAgZXhwb3J0cy5MaXN0VHJlZSA9IExpc3RUcmVlOwogICAgZXhwb3J0cy5MaXN0VmlkZW8gPSBMaXN0VmlkZW87CiAgICBleHBvcnRzLkxpc3RYID0gTGlzdFg7CiAgICBleHBvcnRzLkxvYWRlciA9IExvYWRlcjsKICAgIGV4cG9ydHMuTG9hZGVyMiA9IExvYWRlckNpcmNsZTsKICAgIGV4cG9ydHMuTG9hZGVyQ2lyY2xlID0gTG9hZGVyQ2lyY2xlOwogICAgZXhwb3J0cy5Mb2FkZXJQaW53aGVlbCA9IExvYWRlclBpbndoZWVsOwogICAgZXhwb3J0cy5Mb2NhdGUgPSBMb2NhdGU7CiAgICBleHBvcnRzLkxvY2F0ZUZpeGVkID0gTG9jYXRlRml4ZWQ7CiAgICBleHBvcnRzLkxvY2F0ZU9mZiA9IExvY2F0ZU9mZjsKICAgIGV4cG9ydHMuTG9jYXRpb25FZGl0ID0gTWFwUGluUGVuOwogICAgZXhwb3J0cy5Mb2NrID0gTG9jazsKICAgIGV4cG9ydHMuTG9ja0tleWhvbGUgPSBMb2NrS2V5aG9sZTsKICAgIGV4cG9ydHMuTG9ja0tleWhvbGVPcGVuID0gTG9ja0tleWhvbGVPcGVuOwogICAgZXhwb3J0cy5Mb2NrT3BlbiA9IExvY2tPcGVuOwogICAgZXhwb3J0cy5Mb2dJbiA9IExvZ0luOwogICAgZXhwb3J0cy5Mb2dPdXQgPSBMb2dPdXQ7CiAgICBleHBvcnRzLkxvZ3MgPSBMb2dzOwogICAgZXhwb3J0cy5Mb2xsaXBvcCA9IExvbGxpcG9wOwogICAgZXhwb3J0cy5MdWdnYWdlID0gTHVnZ2FnZTsKICAgIGV4cG9ydHMuTVNxdWFyZSA9IFNxdWFyZU07CiAgICBleHBvcnRzLk1hZ25ldCA9IE1hZ25ldDsKICAgIGV4cG9ydHMuTWFpbCA9IE1haWw7CiAgICBleHBvcnRzLk1haWxDaGVjayA9IE1haWxDaGVjazsKICAgIGV4cG9ydHMuTWFpbE1pbnVzID0gTWFpbE1pbnVzOwogICAgZXhwb3J0cy5NYWlsT3BlbiA9IE1haWxPcGVuOwogICAgZXhwb3J0cy5NYWlsUGx1cyA9IE1haWxQbHVzOwogICAgZXhwb3J0cy5NYWlsUXVlc3Rpb24gPSBNYWlsUXVlc3Rpb25NYXJrOwogICAgZXhwb3J0cy5NYWlsUXVlc3Rpb25NYXJrID0gTWFpbFF1ZXN0aW9uTWFyazsKICAgIGV4cG9ydHMuTWFpbFNlYXJjaCA9IE1haWxTZWFyY2g7CiAgICBleHBvcnRzLk1haWxXYXJuaW5nID0gTWFpbFdhcm5pbmc7CiAgICBleHBvcnRzLk1haWxYID0gTWFpbFg7CiAgICBleHBvcnRzLk1haWxib3ggPSBNYWlsYm94OwogICAgZXhwb3J0cy5NYWlscyA9IE1haWxzOwogICAgZXhwb3J0cy5NYXAgPSBNYXAyOwogICAgZXhwb3J0cy5NYXBNaW51cyA9IE1hcE1pbnVzOwogICAgZXhwb3J0cy5NYXBQaW4gPSBNYXBQaW47CiAgICBleHBvcnRzLk1hcFBpbkNoZWNrID0gTWFwUGluQ2hlY2s7CiAgICBleHBvcnRzLk1hcFBpbkNoZWNrSW5zaWRlID0gTWFwUGluQ2hlY2tJbnNpZGU7CiAgICBleHBvcnRzLk1hcFBpbkhvdXNlID0gTWFwUGluSG91c2U7CiAgICBleHBvcnRzLk1hcFBpbk1pbnVzID0gTWFwUGluTWludXM7CiAgICBleHBvcnRzLk1hcFBpbk1pbnVzSW5zaWRlID0gTWFwUGluTWludXNJbnNpZGU7CiAgICBleHBvcnRzLk1hcFBpbk9mZiA9IE1hcFBpbk9mZjsKICAgIGV4cG9ydHMuTWFwUGluUGVuID0gTWFwUGluUGVuOwogICAgZXhwb3J0cy5NYXBQaW5QbHVzID0gTWFwUGluUGx1czsKICAgIGV4cG9ydHMuTWFwUGluUGx1c0luc2lkZSA9IE1hcFBpblBsdXNJbnNpZGU7CiAgICBleHBvcnRzLk1hcFBpblggPSBNYXBQaW5YOwogICAgZXhwb3J0cy5NYXBQaW5YSW5zaWRlID0gTWFwUGluWEluc2lkZTsKICAgIGV4cG9ydHMuTWFwUGlubmVkID0gTWFwUGlubmVkOwogICAgZXhwb3J0cy5NYXBQbHVzID0gTWFwUGx1czsKICAgIGV4cG9ydHMuTWFycyA9IE1hcnM7CiAgICBleHBvcnRzLk1hcnNTdHJva2UgPSBNYXJzU3Ryb2tlOwogICAgZXhwb3J0cy5NYXJ0aW5pID0gTWFydGluaTsKICAgIGV4cG9ydHMuTWF4aW1pemUgPSBNYXhpbWl6ZTsKICAgIGV4cG9ydHMuTWF4aW1pemUyID0gTWF4aW1pemUyOwogICAgZXhwb3J0cy5NZWRhbCA9IE1lZGFsOwogICAgZXhwb3J0cy5NZWdhcGhvbmUgPSBNZWdhcGhvbmU7CiAgICBleHBvcnRzLk1lZ2FwaG9uZU9mZiA9IE1lZ2FwaG9uZU9mZjsKICAgIGV4cG9ydHMuTWVoID0gTWVoOwogICAgZXhwb3J0cy5NZW1vcnlTdGljayA9IE1lbW9yeVN0aWNrOwogICAgZXhwb3J0cy5NZW51ID0gTWVudTsKICAgIGV4cG9ydHMuTWVudVNxdWFyZSA9IFNxdWFyZU1lbnU7CiAgICBleHBvcnRzLk1lcmdlID0gTWVyZ2U7CiAgICBleHBvcnRzLk1lc3NhZ2VDaXJjbGUgPSBNZXNzYWdlQ2lyY2xlOwogICAgZXhwb3J0cy5NZXNzYWdlQ2lyY2xlQ29kZSA9IE1lc3NhZ2VDaXJjbGVDb2RlOwogICAgZXhwb3J0cy5NZXNzYWdlQ2lyY2xlRGFzaGVkID0gTWVzc2FnZUNpcmNsZURhc2hlZDsKICAgIGV4cG9ydHMuTWVzc2FnZUNpcmNsZUhlYXJ0ID0gTWVzc2FnZUNpcmNsZUhlYXJ0OwogICAgZXhwb3J0cy5NZXNzYWdlQ2lyY2xlTW9yZSA9IE1lc3NhZ2VDaXJjbGVNb3JlOwogICAgZXhwb3J0cy5NZXNzYWdlQ2lyY2xlT2ZmID0gTWVzc2FnZUNpcmNsZU9mZjsKICAgIGV4cG9ydHMuTWVzc2FnZUNpcmNsZVBsdXMgPSBNZXNzYWdlQ2lyY2xlUGx1czsKICAgIGV4cG9ydHMuTWVzc2FnZUNpcmNsZVF1ZXN0aW9uID0gTWVzc2FnZUNpcmNsZVF1ZXN0aW9uTWFyazsKICAgIGV4cG9ydHMuTWVzc2FnZUNpcmNsZVF1ZXN0aW9uTWFyayA9IE1lc3NhZ2VDaXJjbGVRdWVzdGlvbk1hcms7CiAgICBleHBvcnRzLk1lc3NhZ2VDaXJjbGVSZXBseSA9IE1lc3NhZ2VDaXJjbGVSZXBseTsKICAgIGV4cG9ydHMuTWVzc2FnZUNpcmNsZVdhcm5pbmcgPSBNZXNzYWdlQ2lyY2xlV2FybmluZzsKICAgIGV4cG9ydHMuTWVzc2FnZUNpcmNsZVggPSBNZXNzYWdlQ2lyY2xlWDsKICAgIGV4cG9ydHMuTWVzc2FnZVNxdWFyZSA9IE1lc3NhZ2VTcXVhcmU7CiAgICBleHBvcnRzLk1lc3NhZ2VTcXVhcmVDb2RlID0gTWVzc2FnZVNxdWFyZUNvZGU7CiAgICBleHBvcnRzLk1lc3NhZ2VTcXVhcmVEYXNoZWQgPSBNZXNzYWdlU3F1YXJlRGFzaGVkOwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlRGlmZiA9IE1lc3NhZ2VTcXVhcmVEaWZmOwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlRG90ID0gTWVzc2FnZVNxdWFyZURvdDsKICAgIGV4cG9ydHMuTWVzc2FnZVNxdWFyZUhlYXJ0ID0gTWVzc2FnZVNxdWFyZUhlYXJ0OwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlTG9jayA9IE1lc3NhZ2VTcXVhcmVMb2NrOwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlTW9yZSA9IE1lc3NhZ2VTcXVhcmVNb3JlOwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlT2ZmID0gTWVzc2FnZVNxdWFyZU9mZjsKICAgIGV4cG9ydHMuTWVzc2FnZVNxdWFyZVBsdXMgPSBNZXNzYWdlU3F1YXJlUGx1czsKICAgIGV4cG9ydHMuTWVzc2FnZVNxdWFyZVF1b3RlID0gTWVzc2FnZVNxdWFyZVF1b3RlOwogICAgZXhwb3J0cy5NZXNzYWdlU3F1YXJlUmVwbHkgPSBNZXNzYWdlU3F1YXJlUmVwbHk7CiAgICBleHBvcnRzLk1lc3NhZ2VTcXVhcmVTaGFyZSA9IE1lc3NhZ2VTcXVhcmVTaGFyZTsKICAgIGV4cG9ydHMuTWVzc2FnZVNxdWFyZVRleHQgPSBNZXNzYWdlU3F1YXJlVGV4dDsKICAgIGV4cG9ydHMuTWVzc2FnZVNxdWFyZVdhcm5pbmcgPSBNZXNzYWdlU3F1YXJlV2FybmluZzsKICAgIGV4cG9ydHMuTWVzc2FnZVNxdWFyZVggPSBNZXNzYWdlU3F1YXJlWDsKICAgIGV4cG9ydHMuTWVzc2FnZXNTcXVhcmUgPSBNZXNzYWdlc1NxdWFyZTsKICAgIGV4cG9ydHMuTWljID0gTWljOwogICAgZXhwb3J0cy5NaWMyID0gTWljVm9jYWw7CiAgICBleHBvcnRzLk1pY09mZiA9IE1pY09mZjsKICAgIGV4cG9ydHMuTWljVm9jYWwgPSBNaWNWb2NhbDsKICAgIGV4cG9ydHMuTWljcm9jaGlwID0gTWljcm9jaGlwOwogICAgZXhwb3J0cy5NaWNyb3Njb3BlID0gTWljcm9zY29wZTsKICAgIGV4cG9ydHMuTWljcm93YXZlID0gTWljcm93YXZlOwogICAgZXhwb3J0cy5NaWxlc3RvbmUgPSBNaWxlc3RvbmU7CiAgICBleHBvcnRzLk1pbGsgPSBNaWxrOwogICAgZXhwb3J0cy5NaWxrT2ZmID0gTWlsa09mZjsKICAgIGV4cG9ydHMuTWluaW1pemUgPSBNaW5pbWl6ZTsKICAgIGV4cG9ydHMuTWluaW1pemUyID0gTWluaW1pemUyOwogICAgZXhwb3J0cy5NaW51cyA9IE1pbnVzOwogICAgZXhwb3J0cy5NaW51c0NpcmNsZSA9IENpcmNsZU1pbnVzOwogICAgZXhwb3J0cy5NaW51c1NxdWFyZSA9IFNxdWFyZU1pbnVzOwogICAgZXhwb3J0cy5Nb25pdG9yID0gTW9uaXRvcjsKICAgIGV4cG9ydHMuTW9uaXRvckNoZWNrID0gTW9uaXRvckNoZWNrOwogICAgZXhwb3J0cy5Nb25pdG9yQ2xvdWQgPSBNb25pdG9yQ2xvdWQ7CiAgICBleHBvcnRzLk1vbml0b3JDb2cgPSBNb25pdG9yQ29nOwogICAgZXhwb3J0cy5Nb25pdG9yRG90ID0gTW9uaXRvckRvdDsKICAgIGV4cG9ydHMuTW9uaXRvckRvd24gPSBNb25pdG9yRG93bjsKICAgIGV4cG9ydHMuTW9uaXRvck9mZiA9IE1vbml0b3JPZmY7CiAgICBleHBvcnRzLk1vbml0b3JQYXVzZSA9IE1vbml0b3JQYXVzZTsKICAgIGV4cG9ydHMuTW9uaXRvclBsYXkgPSBNb25pdG9yUGxheTsKICAgIGV4cG9ydHMuTW9uaXRvclNtYXJ0cGhvbmUgPSBNb25pdG9yU21hcnRwaG9uZTsKICAgIGV4cG9ydHMuTW9uaXRvclNwZWFrZXIgPSBNb25pdG9yU3BlYWtlcjsKICAgIGV4cG9ydHMuTW9uaXRvclN0b3AgPSBNb25pdG9yU3RvcDsKICAgIGV4cG9ydHMuTW9uaXRvclVwID0gTW9uaXRvclVwOwogICAgZXhwb3J0cy5Nb25pdG9yWCA9IE1vbml0b3JYOwogICAgZXhwb3J0cy5Nb29uID0gTW9vbjsKICAgIGV4cG9ydHMuTW9vblN0YXIgPSBNb29uU3RhcjsKICAgIGV4cG9ydHMuTW9yZUhvcml6b250YWwgPSBFbGxpcHNpczsKICAgIGV4cG9ydHMuTW9yZVZlcnRpY2FsID0gRWxsaXBzaXNWZXJ0aWNhbDsKICAgIGV4cG9ydHMuTW90b3JiaWtlID0gTW90b3JiaWtlOwogICAgZXhwb3J0cy5Nb3VudGFpbiA9IE1vdW50YWluOwogICAgZXhwb3J0cy5Nb3VudGFpblNub3cgPSBNb3VudGFpblNub3c7CiAgICBleHBvcnRzLk1vdXNlID0gTW91c2U7CiAgICBleHBvcnRzLk1vdXNlT2ZmID0gTW91c2VPZmY7CiAgICBleHBvcnRzLk1vdXNlUG9pbnRlciA9IE1vdXNlUG9pbnRlcjsKICAgIGV4cG9ydHMuTW91c2VQb2ludGVyMiA9IE1vdXNlUG9pbnRlcjI7CiAgICBleHBvcnRzLk1vdXNlUG9pbnRlcjJPZmYgPSBNb3VzZVBvaW50ZXIyT2ZmOwogICAgZXhwb3J0cy5Nb3VzZVBvaW50ZXJCYW4gPSBNb3VzZVBvaW50ZXJCYW47CiAgICBleHBvcnRzLk1vdXNlUG9pbnRlckNsaWNrID0gTW91c2VQb2ludGVyQ2xpY2s7CiAgICBleHBvcnRzLk1vdXNlUG9pbnRlclNxdWFyZURhc2hlZCA9IFNxdWFyZURhc2hlZE1vdXNlUG9pbnRlcjsKICAgIGV4cG9ydHMuTW92ZSA9IE1vdmU7CiAgICBleHBvcnRzLk1vdmUzRCA9IE1vdmUzZDsKICAgIGV4cG9ydHMuTW92ZTNkID0gTW92ZTNkOwogICAgZXhwb3J0cy5Nb3ZlRGlhZ29uYWwgPSBNb3ZlRGlhZ29uYWw7CiAgICBleHBvcnRzLk1vdmVEaWFnb25hbDIgPSBNb3ZlRGlhZ29uYWwyOwogICAgZXhwb3J0cy5Nb3ZlRG93biA9IE1vdmVEb3duOwogICAgZXhwb3J0cy5Nb3ZlRG93bkxlZnQgPSBNb3ZlRG93bkxlZnQ7CiAgICBleHBvcnRzLk1vdmVEb3duUmlnaHQgPSBNb3ZlRG93blJpZ2h0OwogICAgZXhwb3J0cy5Nb3ZlSG9yaXpvbnRhbCA9IE1vdmVIb3Jpem9udGFsOwogICAgZXhwb3J0cy5Nb3ZlTGVmdCA9IE1vdmVMZWZ0OwogICAgZXhwb3J0cy5Nb3ZlUmlnaHQgPSBNb3ZlUmlnaHQ7CiAgICBleHBvcnRzLk1vdmVVcCA9IE1vdmVVcDsKICAgIGV4cG9ydHMuTW92ZVVwTGVmdCA9IE1vdmVVcExlZnQ7CiAgICBleHBvcnRzLk1vdmVVcFJpZ2h0ID0gTW92ZVVwUmlnaHQ7CiAgICBleHBvcnRzLk1vdmVWZXJ0aWNhbCA9IE1vdmVWZXJ0aWNhbDsKICAgIGV4cG9ydHMuTXVzaWMgPSBNdXNpYzsKICAgIGV4cG9ydHMuTXVzaWMyID0gTXVzaWMyOwogICAgZXhwb3J0cy5NdXNpYzMgPSBNdXNpYzM7CiAgICBleHBvcnRzLk11c2ljNCA9IE11c2ljNDsKICAgIGV4cG9ydHMuTmF2aWdhdGlvbiA9IE5hdmlnYXRpb247CiAgICBleHBvcnRzLk5hdmlnYXRpb24yID0gTmF2aWdhdGlvbjI7CiAgICBleHBvcnRzLk5hdmlnYXRpb24yT2ZmID0gTmF2aWdhdGlvbjJPZmY7CiAgICBleHBvcnRzLk5hdmlnYXRpb25PZmYgPSBOYXZpZ2F0aW9uT2ZmOwogICAgZXhwb3J0cy5OZXR3b3JrID0gTmV0d29yazsKICAgIGV4cG9ydHMuTmV3c3BhcGVyID0gTmV3c3BhcGVyOwogICAgZXhwb3J0cy5OZmMgPSBOZmM7CiAgICBleHBvcnRzLk5vbkJpbmFyeSA9IE5vbkJpbmFyeTsKICAgIGV4cG9ydHMuTm90ZWJvb2sgPSBOb3RlYm9vazsKICAgIGV4cG9ydHMuTm90ZWJvb2tQZW4gPSBOb3RlYm9va1BlbjsKICAgIGV4cG9ydHMuTm90ZWJvb2tUYWJzID0gTm90ZWJvb2tUYWJzOwogICAgZXhwb3J0cy5Ob3RlYm9va1RleHQgPSBOb3RlYm9va1RleHQ7CiAgICBleHBvcnRzLk5vdGVwYWRUZXh0ID0gTm90ZXBhZFRleHQ7CiAgICBleHBvcnRzLk5vdGVwYWRUZXh0RGFzaGVkID0gTm90ZXBhZFRleHREYXNoZWQ7CiAgICBleHBvcnRzLk51dCA9IE51dDsKICAgIGV4cG9ydHMuTnV0T2ZmID0gTnV0T2ZmOwogICAgZXhwb3J0cy5PY3RhZ29uID0gT2N0YWdvbjsKICAgIGV4cG9ydHMuT2N0YWdvbkFsZXJ0ID0gT2N0YWdvbkFsZXJ0OwogICAgZXhwb3J0cy5PY3RhZ29uTWludXMgPSBPY3RhZ29uTWludXM7CiAgICBleHBvcnRzLk9jdGFnb25QYXVzZSA9IE9jdGFnb25QYXVzZTsKICAgIGV4cG9ydHMuT2N0YWdvblggPSBPY3RhZ29uWDsKICAgIGV4cG9ydHMuT21lZ2EgPSBPbWVnYTsKICAgIGV4cG9ydHMuT3B0aW9uID0gT3B0aW9uOwogICAgZXhwb3J0cy5PcmJpdCA9IE9yYml0OwogICAgZXhwb3J0cy5PcmlnYW1pID0gT3JpZ2FtaTsKICAgIGV4cG9ydHMuT3V0ZGVudCA9IExpc3RJbmRlbnREZWNyZWFzZTsKICAgIGV4cG9ydHMuUGFja2FnZSA9IFBhY2thZ2U7CiAgICBleHBvcnRzLlBhY2thZ2UyID0gUGFja2FnZTI7CiAgICBleHBvcnRzLlBhY2thZ2VDaGVjayA9IFBhY2thZ2VDaGVjazsKICAgIGV4cG9ydHMuUGFja2FnZU1pbnVzID0gUGFja2FnZU1pbnVzOwogICAgZXhwb3J0cy5QYWNrYWdlT3BlbiA9IFBhY2thZ2VPcGVuOwogICAgZXhwb3J0cy5QYWNrYWdlUGx1cyA9IFBhY2thZ2VQbHVzOwogICAgZXhwb3J0cy5QYWNrYWdlU2VhcmNoID0gUGFja2FnZVNlYXJjaDsKICAgIGV4cG9ydHMuUGFja2FnZVggPSBQYWNrYWdlWDsKICAgIGV4cG9ydHMuUGFpbnRCdWNrZXQgPSBQYWludEJ1Y2tldDsKICAgIGV4cG9ydHMuUGFpbnRSb2xsZXIgPSBQYWludFJvbGxlcjsKICAgIGV4cG9ydHMuUGFpbnRicnVzaCA9IFBhaW50YnJ1c2g7CiAgICBleHBvcnRzLlBhaW50YnJ1c2gyID0gUGFpbnRicnVzaFZlcnRpY2FsOwogICAgZXhwb3J0cy5QYWludGJydXNoVmVydGljYWwgPSBQYWludGJydXNoVmVydGljYWw7CiAgICBleHBvcnRzLlBhbGV0dGUgPSBQYWxldHRlOwogICAgZXhwb3J0cy5QYWxtdHJlZSA9IFRyZWVQYWxtOwogICAgZXhwb3J0cy5QYW5kYSA9IFBhbmRhOwogICAgZXhwb3J0cy5QYW5lbEJvdHRvbSA9IFBhbmVsQm90dG9tOwogICAgZXhwb3J0cy5QYW5lbEJvdHRvbUNsb3NlID0gUGFuZWxCb3R0b21DbG9zZTsKICAgIGV4cG9ydHMuUGFuZWxCb3R0b21EYXNoZWQgPSBQYW5lbEJvdHRvbURhc2hlZDsKICAgIGV4cG9ydHMuUGFuZWxCb3R0b21JbmFjdGl2ZSA9IFBhbmVsQm90dG9tRGFzaGVkOwogICAgZXhwb3J0cy5QYW5lbEJvdHRvbU9wZW4gPSBQYW5lbEJvdHRvbU9wZW47CiAgICBleHBvcnRzLlBhbmVsTGVmdCA9IFBhbmVsTGVmdDsKICAgIGV4cG9ydHMuUGFuZWxMZWZ0Q2xvc2UgPSBQYW5lbExlZnRDbG9zZTsKICAgIGV4cG9ydHMuUGFuZWxMZWZ0RGFzaGVkID0gUGFuZWxMZWZ0RGFzaGVkOwogICAgZXhwb3J0cy5QYW5lbExlZnRJbmFjdGl2ZSA9IFBhbmVsTGVmdERhc2hlZDsKICAgIGV4cG9ydHMuUGFuZWxMZWZ0T3BlbiA9IFBhbmVsTGVmdE9wZW47CiAgICBleHBvcnRzLlBhbmVsTGVmdFJpZ2h0RGFzaGVkID0gUGFuZWxMZWZ0UmlnaHREYXNoZWQ7CiAgICBleHBvcnRzLlBhbmVsUmlnaHQgPSBQYW5lbFJpZ2h0OwogICAgZXhwb3J0cy5QYW5lbFJpZ2h0Q2xvc2UgPSBQYW5lbFJpZ2h0Q2xvc2U7CiAgICBleHBvcnRzLlBhbmVsUmlnaHREYXNoZWQgPSBQYW5lbFJpZ2h0RGFzaGVkOwogICAgZXhwb3J0cy5QYW5lbFJpZ2h0SW5hY3RpdmUgPSBQYW5lbFJpZ2h0RGFzaGVkOwogICAgZXhwb3J0cy5QYW5lbFJpZ2h0T3BlbiA9IFBhbmVsUmlnaHRPcGVuOwogICAgZXhwb3J0cy5QYW5lbFRvcCA9IFBhbmVsVG9wOwogICAgZXhwb3J0cy5QYW5lbFRvcEJvdHRvbURhc2hlZCA9IFBhbmVsVG9wQm90dG9tRGFzaGVkOwogICAgZXhwb3J0cy5QYW5lbFRvcENsb3NlID0gUGFuZWxUb3BDbG9zZTsKICAgIGV4cG9ydHMuUGFuZWxUb3BEYXNoZWQgPSBQYW5lbFRvcERhc2hlZDsKICAgIGV4cG9ydHMuUGFuZWxUb3BJbmFjdGl2ZSA9IFBhbmVsVG9wRGFzaGVkOwogICAgZXhwb3J0cy5QYW5lbFRvcE9wZW4gPSBQYW5lbFRvcE9wZW47CiAgICBleHBvcnRzLlBhbmVsc0xlZnRCb3R0b20gPSBQYW5lbHNMZWZ0Qm90dG9tOwogICAgZXhwb3J0cy5QYW5lbHNMZWZ0UmlnaHQgPSBDb2x1bW5zMzsKICAgIGV4cG9ydHMuUGFuZWxzUmlnaHRCb3R0b20gPSBQYW5lbHNSaWdodEJvdHRvbTsKICAgIGV4cG9ydHMuUGFuZWxzVG9wQm90dG9tID0gUm93czM7CiAgICBleHBvcnRzLlBhbmVsc1RvcExlZnQgPSBQYW5lbHNUb3BMZWZ0OwogICAgZXhwb3J0cy5QYXBlcmNsaXAgPSBQYXBlcmNsaXA7CiAgICBleHBvcnRzLlBhcmVudGhlc2VzID0gUGFyZW50aGVzZXM7CiAgICBleHBvcnRzLlBhcmtpbmdDaXJjbGUgPSBDaXJjbGVQYXJraW5nOwogICAgZXhwb3J0cy5QYXJraW5nQ2lyY2xlT2ZmID0gQ2lyY2xlUGFya2luZ09mZjsKICAgIGV4cG9ydHMuUGFya2luZ01ldGVyID0gUGFya2luZ01ldGVyOwogICAgZXhwb3J0cy5QYXJraW5nU3F1YXJlID0gU3F1YXJlUGFya2luZzsKICAgIGV4cG9ydHMuUGFya2luZ1NxdWFyZU9mZiA9IFNxdWFyZVBhcmtpbmdPZmY7CiAgICBleHBvcnRzLlBhcnR5UG9wcGVyID0gUGFydHlQb3BwZXI7CiAgICBleHBvcnRzLlBhdXNlID0gUGF1c2U7CiAgICBleHBvcnRzLlBhdXNlQ2lyY2xlID0gQ2lyY2xlUGF1c2U7CiAgICBleHBvcnRzLlBhdXNlT2N0YWdvbiA9IE9jdGFnb25QYXVzZTsKICAgIGV4cG9ydHMuUGF3UHJpbnQgPSBQYXdQcmludDsKICAgIGV4cG9ydHMuUGNDYXNlID0gUGNDYXNlOwogICAgZXhwb3J0cy5QZW4gPSBQZW47CiAgICBleHBvcnRzLlBlbkJveCA9IFNxdWFyZVBlbjsKICAgIGV4cG9ydHMuUGVuTGluZSA9IFBlbkxpbmU7CiAgICBleHBvcnRzLlBlbk9mZiA9IFBlbk9mZjsKICAgIGV4cG9ydHMuUGVuU3F1YXJlID0gU3F1YXJlUGVuOwogICAgZXhwb3J0cy5QZW5Ub29sID0gUGVuVG9vbDsKICAgIGV4cG9ydHMuUGVuY2lsID0gUGVuY2lsOwogICAgZXhwb3J0cy5QZW5jaWxMaW5lID0gUGVuY2lsTGluZTsKICAgIGV4cG9ydHMuUGVuY2lsT2ZmID0gUGVuY2lsT2ZmOwogICAgZXhwb3J0cy5QZW5jaWxSdWxlciA9IFBlbmNpbFJ1bGVyOwogICAgZXhwb3J0cy5QZW50YWdvbiA9IFBlbnRhZ29uOwogICAgZXhwb3J0cy5QZXJjZW50ID0gUGVyY2VudDsKICAgIGV4cG9ydHMuUGVyY2VudENpcmNsZSA9IENpcmNsZVBlcmNlbnQ7CiAgICBleHBvcnRzLlBlcmNlbnREaWFtb25kID0gRGlhbW9uZFBlcmNlbnQ7CiAgICBleHBvcnRzLlBlcmNlbnRTcXVhcmUgPSBTcXVhcmVQZXJjZW50OwogICAgZXhwb3J0cy5QZXJzb25TdGFuZGluZyA9IFBlcnNvblN0YW5kaW5nOwogICAgZXhwb3J0cy5QaGlsaXBwaW5lUGVzbyA9IFBoaWxpcHBpbmVQZXNvOwogICAgZXhwb3J0cy5QaG9uZSA9IFBob25lOwogICAgZXhwb3J0cy5QaG9uZUNhbGwgPSBQaG9uZUNhbGw7CiAgICBleHBvcnRzLlBob25lRm9yd2FyZGVkID0gUGhvbmVGb3J3YXJkZWQ7CiAgICBleHBvcnRzLlBob25lSW5jb21pbmcgPSBQaG9uZUluY29taW5nOwogICAgZXhwb3J0cy5QaG9uZU1pc3NlZCA9IFBob25lTWlzc2VkOwogICAgZXhwb3J0cy5QaG9uZU9mZiA9IFBob25lT2ZmOwogICAgZXhwb3J0cy5QaG9uZU91dGdvaW5nID0gUGhvbmVPdXRnb2luZzsKICAgIGV4cG9ydHMuUGkgPSBQaTsKICAgIGV4cG9ydHMuUGlTcXVhcmUgPSBTcXVhcmVQaTsKICAgIGV4cG9ydHMuUGlhbm8gPSBQaWFubzsKICAgIGV4cG9ydHMuUGlja2F4ZSA9IFBpY2theGU7CiAgICBleHBvcnRzLlBpY3R1cmVJblBpY3R1cmUgPSBQaWN0dXJlSW5QaWN0dXJlOwogICAgZXhwb3J0cy5QaWN0dXJlSW5QaWN0dXJlMiA9IFBpY3R1cmVJblBpY3R1cmUyOwogICAgZXhwb3J0cy5QaWVDaGFydCA9IENoYXJ0UGllOwogICAgZXhwb3J0cy5QaWdneUJhbmsgPSBQaWdneUJhbms7CiAgICBleHBvcnRzLlBpbGNyb3cgPSBQaWxjcm93OwogICAgZXhwb3J0cy5QaWxjcm93TGVmdCA9IFBpbGNyb3dMZWZ0OwogICAgZXhwb3J0cy5QaWxjcm93UmlnaHQgPSBQaWxjcm93UmlnaHQ7CiAgICBleHBvcnRzLlBpbGNyb3dTcXVhcmUgPSBTcXVhcmVQaWxjcm93OwogICAgZXhwb3J0cy5QaWxsID0gUGlsbDsKICAgIGV4cG9ydHMuUGlsbEJvdHRsZSA9IFBpbGxCb3R0bGU7CiAgICBleHBvcnRzLlBpbiA9IFBpbjsKICAgIGV4cG9ydHMuUGluT2ZmID0gUGluT2ZmOwogICAgZXhwb3J0cy5QaXBldHRlID0gUGlwZXR0ZTsKICAgIGV4cG9ydHMuUGl6emEgPSBQaXp6YTsKICAgIGV4cG9ydHMuUGxhbmUgPSBQbGFuZTsKICAgIGV4cG9ydHMuUGxhbmVMYW5kaW5nID0gUGxhbmVMYW5kaW5nOwogICAgZXhwb3J0cy5QbGFuZVRha2VvZmYgPSBQbGFuZVRha2VvZmY7CiAgICBleHBvcnRzLlBsYXkgPSBQbGF5OwogICAgZXhwb3J0cy5QbGF5Q2lyY2xlID0gQ2lyY2xlUGxheTsKICAgIGV4cG9ydHMuUGxheVNxdWFyZSA9IFNxdWFyZVBsYXk7CiAgICBleHBvcnRzLlBsdWcgPSBQbHVnOwogICAgZXhwb3J0cy5QbHVnMiA9IFBsdWcyOwogICAgZXhwb3J0cy5QbHVnWmFwID0gUGx1Z1phcDsKICAgIGV4cG9ydHMuUGx1Z1phcDIgPSBQbHVnWmFwOwogICAgZXhwb3J0cy5QbHVzID0gUGx1czsKICAgIGV4cG9ydHMuUGx1c0NpcmNsZSA9IENpcmNsZVBsdXM7CiAgICBleHBvcnRzLlBsdXNTcXVhcmUgPSBTcXVhcmVQbHVzOwogICAgZXhwb3J0cy5Qb2NrZXQgPSBQb2NrZXQ7CiAgICBleHBvcnRzLlBvY2tldEtuaWZlID0gUG9ja2V0S25pZmU7CiAgICBleHBvcnRzLlBvZGNhc3QgPSBQb2RjYXN0OwogICAgZXhwb3J0cy5Qb2ludGVyID0gUG9pbnRlcjsKICAgIGV4cG9ydHMuUG9pbnRlck9mZiA9IFBvaW50ZXJPZmY7CiAgICBleHBvcnRzLlBvcGNvcm4gPSBQb3Bjb3JuOwogICAgZXhwb3J0cy5Qb3BzaWNsZSA9IFBvcHNpY2xlOwogICAgZXhwb3J0cy5Qb3VuZFN0ZXJsaW5nID0gUG91bmRTdGVybGluZzsKICAgIGV4cG9ydHMuUG93ZXIgPSBQb3dlcjsKICAgIGV4cG9ydHMuUG93ZXJDaXJjbGUgPSBDaXJjbGVQb3dlcjsKICAgIGV4cG9ydHMuUG93ZXJPZmYgPSBQb3dlck9mZjsKICAgIGV4cG9ydHMuUG93ZXJTcXVhcmUgPSBTcXVhcmVQb3dlcjsKICAgIGV4cG9ydHMuUHJlc2VudGF0aW9uID0gUHJlc2VudGF0aW9uOwogICAgZXhwb3J0cy5QcmludGVyID0gUHJpbnRlcjsKICAgIGV4cG9ydHMuUHJpbnRlckNoZWNrID0gUHJpbnRlckNoZWNrOwogICAgZXhwb3J0cy5QcmludGVyWCA9IFByaW50ZXJYOwogICAgZXhwb3J0cy5Qcm9qZWN0b3IgPSBQcm9qZWN0b3I7CiAgICBleHBvcnRzLlByb3BvcnRpb25zID0gUHJvcG9ydGlvbnM7CiAgICBleHBvcnRzLlB1enpsZSA9IFB1enpsZTsKICAgIGV4cG9ydHMuUHlyYW1pZCA9IFB5cmFtaWQ7CiAgICBleHBvcnRzLlFyQ29kZSA9IFFyQ29kZTsKICAgIGV4cG9ydHMuUXVvdGUgPSBRdW90ZTsKICAgIGV4cG9ydHMuUmFiYml0ID0gUmFiYml0OwogICAgZXhwb3J0cy5SYWRhciA9IFJhZGFyOwogICAgZXhwb3J0cy5SYWRpYXRpb24gPSBSYWRpYXRpb247CiAgICBleHBvcnRzLlJhZGljYWwgPSBSYWRpY2FsOwogICAgZXhwb3J0cy5SYWRpbyA9IFJhZGlvOwogICAgZXhwb3J0cy5SYWRpb1JlY2VpdmVyID0gUmFkaW9SZWNlaXZlcjsKICAgIGV4cG9ydHMuUmFkaW9Ub3dlciA9IFJhZGlvVG93ZXI7CiAgICBleHBvcnRzLlJhZGl1cyA9IFJhZGl1czsKICAgIGV4cG9ydHMuUmFpbFN5bWJvbCA9IFJhaWxTeW1ib2w7CiAgICBleHBvcnRzLlJhaW5ib3cgPSBSYWluYm93OwogICAgZXhwb3J0cy5SYXQgPSBSYXQ7CiAgICBleHBvcnRzLlJhdGlvID0gUmF0aW87CiAgICBleHBvcnRzLlJlY2VpcHQgPSBSZWNlaXB0OwogICAgZXhwb3J0cy5SZWNlaXB0Q2VudCA9IFJlY2VpcHRDZW50OwogICAgZXhwb3J0cy5SZWNlaXB0RXVybyA9IFJlY2VpcHRFdXJvOwogICAgZXhwb3J0cy5SZWNlaXB0SW5kaWFuUnVwZWUgPSBSZWNlaXB0SW5kaWFuUnVwZWU7CiAgICBleHBvcnRzLlJlY2VpcHRKYXBhbmVzZVllbiA9IFJlY2VpcHRKYXBhbmVzZVllbjsKICAgIGV4cG9ydHMuUmVjZWlwdFBvdW5kU3RlcmxpbmcgPSBSZWNlaXB0UG91bmRTdGVybGluZzsKICAgIGV4cG9ydHMuUmVjZWlwdFJ1c3NpYW5SdWJsZSA9IFJlY2VpcHRSdXNzaWFuUnVibGU7CiAgICBleHBvcnRzLlJlY2VpcHRTd2lzc0ZyYW5jID0gUmVjZWlwdFN3aXNzRnJhbmM7CiAgICBleHBvcnRzLlJlY2VpcHRUZXh0ID0gUmVjZWlwdFRleHQ7CiAgICBleHBvcnRzLlJlY2VpcHRUdXJraXNoTGlyYSA9IFJlY2VpcHRUdXJraXNoTGlyYTsKICAgIGV4cG9ydHMuUmVjdGFuZ2xlQ2lyY2xlID0gUmVjdGFuZ2xlQ2lyY2xlOwogICAgZXhwb3J0cy5SZWN0YW5nbGVFbGxpcHNpcyA9IFJlY3RhbmdsZUVsbGlwc2lzOwogICAgZXhwb3J0cy5SZWN0YW5nbGVHb2dnbGVzID0gUmVjdGFuZ2xlR29nZ2xlczsKICAgIGV4cG9ydHMuUmVjdGFuZ2xlSG9yaXpvbnRhbCA9IFJlY3RhbmdsZUhvcml6b250YWw7CiAgICBleHBvcnRzLlJlY3RhbmdsZVZlcnRpY2FsID0gUmVjdGFuZ2xlVmVydGljYWw7CiAgICBleHBvcnRzLlJlY3ljbGUgPSBSZWN5Y2xlOwogICAgZXhwb3J0cy5SZWRvID0gUmVkbzsKICAgIGV4cG9ydHMuUmVkbzIgPSBSZWRvMjsKICAgIGV4cG9ydHMuUmVkb0RvdCA9IFJlZG9Eb3Q7CiAgICBleHBvcnRzLlJlZnJlc2hDY3cgPSBSZWZyZXNoQ2N3OwogICAgZXhwb3J0cy5SZWZyZXNoQ2N3RG90ID0gUmVmcmVzaENjd0RvdDsKICAgIGV4cG9ydHMuUmVmcmVzaEN3ID0gUmVmcmVzaEN3OwogICAgZXhwb3J0cy5SZWZyZXNoQ3dPZmYgPSBSZWZyZXNoQ3dPZmY7CiAgICBleHBvcnRzLlJlZnJpZ2VyYXRvciA9IFJlZnJpZ2VyYXRvcjsKICAgIGV4cG9ydHMuUmVnZXggPSBSZWdleDsKICAgIGV4cG9ydHMuUmVtb3ZlRm9ybWF0dGluZyA9IFJlbW92ZUZvcm1hdHRpbmc7CiAgICBleHBvcnRzLlJlcGVhdCA9IFJlcGVhdDsKICAgIGV4cG9ydHMuUmVwZWF0MSA9IFJlcGVhdDE7CiAgICBleHBvcnRzLlJlcGVhdDIgPSBSZXBlYXQyOwogICAgZXhwb3J0cy5SZXBsYWNlID0gUmVwbGFjZTsKICAgIGV4cG9ydHMuUmVwbGFjZUFsbCA9IFJlcGxhY2VBbGw7CiAgICBleHBvcnRzLlJlcGx5ID0gUmVwbHk7CiAgICBleHBvcnRzLlJlcGx5QWxsID0gUmVwbHlBbGw7CiAgICBleHBvcnRzLlJld2luZCA9IFJld2luZDsKICAgIGV4cG9ydHMuUmliYm9uID0gUmliYm9uOwogICAgZXhwb3J0cy5Sb2NrZXQgPSBSb2NrZXQ7CiAgICBleHBvcnRzLlJvY2tpbmdDaGFpciA9IFJvY2tpbmdDaGFpcjsKICAgIGV4cG9ydHMuUm9sbGVyQ29hc3RlciA9IFJvbGxlckNvYXN0ZXI7CiAgICBleHBvcnRzLlJvc2UgPSBSb3NlOwogICAgZXhwb3J0cy5Sb3RhdGUzRCA9IFJvdGF0ZTNkOwogICAgZXhwb3J0cy5Sb3RhdGUzZCA9IFJvdGF0ZTNkOwogICAgZXhwb3J0cy5Sb3RhdGVDY3cgPSBSb3RhdGVDY3c7CiAgICBleHBvcnRzLlJvdGF0ZUNjd0tleSA9IFJvdGF0ZUNjd0tleTsKICAgIGV4cG9ydHMuUm90YXRlQ2N3U3F1YXJlID0gUm90YXRlQ2N3U3F1YXJlOwogICAgZXhwb3J0cy5Sb3RhdGVDdyA9IFJvdGF0ZUN3OwogICAgZXhwb3J0cy5Sb3RhdGVDd1NxdWFyZSA9IFJvdGF0ZUN3U3F1YXJlOwogICAgZXhwb3J0cy5Sb3V0ZSA9IFJvdXRlOwogICAgZXhwb3J0cy5Sb3V0ZU9mZiA9IFJvdXRlT2ZmOwogICAgZXhwb3J0cy5Sb3V0ZXIgPSBSb3V0ZXI7CiAgICBleHBvcnRzLlJvd3MgPSBSb3dzMjsKICAgIGV4cG9ydHMuUm93czIgPSBSb3dzMjsKICAgIGV4cG9ydHMuUm93czMgPSBSb3dzMzsKICAgIGV4cG9ydHMuUm93czQgPSBSb3dzNDsKICAgIGV4cG9ydHMuUnNzID0gUnNzOwogICAgZXhwb3J0cy5SdWxlciA9IFJ1bGVyOwogICAgZXhwb3J0cy5SdWxlckRpbWVuc2lvbkxpbmUgPSBSdWxlckRpbWVuc2lvbkxpbmU7CiAgICBleHBvcnRzLlJ1c3NpYW5SdWJsZSA9IFJ1c3NpYW5SdWJsZTsKICAgIGV4cG9ydHMuU2FpbGJvYXQgPSBTYWlsYm9hdDsKICAgIGV4cG9ydHMuU2FsYWQgPSBTYWxhZDsKICAgIGV4cG9ydHMuU2FuZHdpY2ggPSBTYW5kd2ljaDsKICAgIGV4cG9ydHMuU2F0ZWxsaXRlID0gU2F0ZWxsaXRlOwogICAgZXhwb3J0cy5TYXRlbGxpdGVEaXNoID0gU2F0ZWxsaXRlRGlzaDsKICAgIGV4cG9ydHMuU2F1ZGlSaXlhbCA9IFNhdWRpUml5YWw7CiAgICBleHBvcnRzLlNhdmUgPSBTYXZlOwogICAgZXhwb3J0cy5TYXZlQWxsID0gU2F2ZUFsbDsKICAgIGV4cG9ydHMuU2F2ZU9mZiA9IFNhdmVPZmY7CiAgICBleHBvcnRzLlNjYWxlID0gU2NhbGU7CiAgICBleHBvcnRzLlNjYWxlM0QgPSBTY2FsZTNkOwogICAgZXhwb3J0cy5TY2FsZTNkID0gU2NhbGUzZDsKICAgIGV4cG9ydHMuU2NhbGluZyA9IFNjYWxpbmc7CiAgICBleHBvcnRzLlNjYW4gPSBTY2FuOwogICAgZXhwb3J0cy5TY2FuQmFyY29kZSA9IFNjYW5CYXJjb2RlOwogICAgZXhwb3J0cy5TY2FuRXllID0gU2NhbkV5ZTsKICAgIGV4cG9ydHMuU2NhbkZhY2UgPSBTY2FuRmFjZTsKICAgIGV4cG9ydHMuU2NhbkhlYXJ0ID0gU2NhbkhlYXJ0OwogICAgZXhwb3J0cy5TY2FuTGluZSA9IFNjYW5MaW5lOwogICAgZXhwb3J0cy5TY2FuUXJDb2RlID0gU2NhblFyQ29kZTsKICAgIGV4cG9ydHMuU2NhblNlYXJjaCA9IFNjYW5TZWFyY2g7CiAgICBleHBvcnRzLlNjYW5UZXh0ID0gU2NhblRleHQ7CiAgICBleHBvcnRzLlNjYXR0ZXJDaGFydCA9IENoYXJ0U2NhdHRlcjsKICAgIGV4cG9ydHMuU2Nob29sID0gU2Nob29sOwogICAgZXhwb3J0cy5TY2hvb2wyID0gVW5pdmVyc2l0eTsKICAgIGV4cG9ydHMuU2Npc3NvcnMgPSBTY2lzc29yczsKICAgIGV4cG9ydHMuU2Npc3NvcnNMaW5lRGFzaGVkID0gU2Npc3NvcnNMaW5lRGFzaGVkOwogICAgZXhwb3J0cy5TY2lzc29yc1NxdWFyZSA9IFNxdWFyZVNjaXNzb3JzOwogICAgZXhwb3J0cy5TY2lzc29yc1NxdWFyZURhc2hlZEJvdHRvbSA9IFNxdWFyZUJvdHRvbURhc2hlZFNjaXNzb3JzOwogICAgZXhwb3J0cy5TY29vdGVyID0gU2Nvb3RlcjsKICAgIGV4cG9ydHMuU2NyZWVuU2hhcmUgPSBTY3JlZW5TaGFyZTsKICAgIGV4cG9ydHMuU2NyZWVuU2hhcmVPZmYgPSBTY3JlZW5TaGFyZU9mZjsKICAgIGV4cG9ydHMuU2Nyb2xsID0gU2Nyb2xsOwogICAgZXhwb3J0cy5TY3JvbGxUZXh0ID0gU2Nyb2xsVGV4dDsKICAgIGV4cG9ydHMuU2VhcmNoID0gU2VhcmNoOwogICAgZXhwb3J0cy5TZWFyY2hBbGVydCA9IFNlYXJjaEFsZXJ0OwogICAgZXhwb3J0cy5TZWFyY2hDaGVjayA9IFNlYXJjaENoZWNrOwogICAgZXhwb3J0cy5TZWFyY2hDb2RlID0gU2VhcmNoQ29kZTsKICAgIGV4cG9ydHMuU2VhcmNoU2xhc2ggPSBTZWFyY2hTbGFzaDsKICAgIGV4cG9ydHMuU2VhcmNoWCA9IFNlYXJjaFg7CiAgICBleHBvcnRzLlNlY3Rpb24gPSBTZWN0aW9uOwogICAgZXhwb3J0cy5TZW5kID0gU2VuZDsKICAgIGV4cG9ydHMuU2VuZEhvcml6b25hbCA9IFNlbmRIb3Jpem9udGFsOwogICAgZXhwb3J0cy5TZW5kSG9yaXpvbnRhbCA9IFNlbmRIb3Jpem9udGFsOwogICAgZXhwb3J0cy5TZW5kVG9CYWNrID0gU2VuZFRvQmFjazsKICAgIGV4cG9ydHMuU2VwYXJhdG9ySG9yaXpvbnRhbCA9IFNlcGFyYXRvckhvcml6b250YWw7CiAgICBleHBvcnRzLlNlcGFyYXRvclZlcnRpY2FsID0gU2VwYXJhdG9yVmVydGljYWw7CiAgICBleHBvcnRzLlNlcnZlciA9IFNlcnZlcjsKICAgIGV4cG9ydHMuU2VydmVyQ29nID0gU2VydmVyQ29nOwogICAgZXhwb3J0cy5TZXJ2ZXJDcmFzaCA9IFNlcnZlckNyYXNoOwogICAgZXhwb3J0cy5TZXJ2ZXJPZmYgPSBTZXJ2ZXJPZmY7CiAgICBleHBvcnRzLlNldHRpbmdzID0gU2V0dGluZ3M7CiAgICBleHBvcnRzLlNldHRpbmdzMiA9IFNldHRpbmdzMjsKICAgIGV4cG9ydHMuU2hhcGVzID0gU2hhcGVzOwogICAgZXhwb3J0cy5TaGFyZSA9IFNoYXJlOwogICAgZXhwb3J0cy5TaGFyZTIgPSBTaGFyZTI7CiAgICBleHBvcnRzLlNoZWV0ID0gU2hlZXQ7CiAgICBleHBvcnRzLlNoZWxsID0gU2hlbGw7CiAgICBleHBvcnRzLlNoaWVsZCA9IFNoaWVsZDsKICAgIGV4cG9ydHMuU2hpZWxkQWxlcnQgPSBTaGllbGRBbGVydDsKICAgIGV4cG9ydHMuU2hpZWxkQmFuID0gU2hpZWxkQmFuOwogICAgZXhwb3J0cy5TaGllbGRDaGVjayA9IFNoaWVsZENoZWNrOwogICAgZXhwb3J0cy5TaGllbGRDbG9zZSA9IFNoaWVsZFg7CiAgICBleHBvcnRzLlNoaWVsZEVsbGlwc2lzID0gU2hpZWxkRWxsaXBzaXM7CiAgICBleHBvcnRzLlNoaWVsZEhhbGYgPSBTaGllbGRIYWxmOwogICAgZXhwb3J0cy5TaGllbGRNaW51cyA9IFNoaWVsZE1pbnVzOwogICAgZXhwb3J0cy5TaGllbGRPZmYgPSBTaGllbGRPZmY7CiAgICBleHBvcnRzLlNoaWVsZFBsdXMgPSBTaGllbGRQbHVzOwogICAgZXhwb3J0cy5TaGllbGRRdWVzdGlvbiA9IFNoaWVsZFF1ZXN0aW9uTWFyazsKICAgIGV4cG9ydHMuU2hpZWxkUXVlc3Rpb25NYXJrID0gU2hpZWxkUXVlc3Rpb25NYXJrOwogICAgZXhwb3J0cy5TaGllbGRVc2VyID0gU2hpZWxkVXNlcjsKICAgIGV4cG9ydHMuU2hpZWxkWCA9IFNoaWVsZFg7CiAgICBleHBvcnRzLlNoaXAgPSBTaGlwOwogICAgZXhwb3J0cy5TaGlwV2hlZWwgPSBTaGlwV2hlZWw7CiAgICBleHBvcnRzLlNoaXJ0ID0gU2hpcnQ7CiAgICBleHBvcnRzLlNob3BwaW5nQmFnID0gU2hvcHBpbmdCYWc7CiAgICBleHBvcnRzLlNob3BwaW5nQmFza2V0ID0gU2hvcHBpbmdCYXNrZXQ7CiAgICBleHBvcnRzLlNob3BwaW5nQ2FydCA9IFNob3BwaW5nQ2FydDsKICAgIGV4cG9ydHMuU2hvdmVsID0gU2hvdmVsOwogICAgZXhwb3J0cy5TaG93ZXJIZWFkID0gU2hvd2VySGVhZDsKICAgIGV4cG9ydHMuU2hyZWRkZXIgPSBTaHJlZGRlcjsKICAgIGV4cG9ydHMuU2hyaW1wID0gU2hyaW1wOwogICAgZXhwb3J0cy5TaHJpbmsgPSBTaHJpbms7CiAgICBleHBvcnRzLlNocnViID0gU2hydWI7CiAgICBleHBvcnRzLlNodWZmbGUgPSBTaHVmZmxlOwogICAgZXhwb3J0cy5TaWRlYmFyID0gUGFuZWxMZWZ0OwogICAgZXhwb3J0cy5TaWRlYmFyQ2xvc2UgPSBQYW5lbExlZnRDbG9zZTsKICAgIGV4cG9ydHMuU2lkZWJhck9wZW4gPSBQYW5lbExlZnRPcGVuOwogICAgZXhwb3J0cy5TaWdtYSA9IFNpZ21hOwogICAgZXhwb3J0cy5TaWdtYVNxdWFyZSA9IFNxdWFyZVNpZ21hOwogICAgZXhwb3J0cy5TaWduYWwgPSBTaWduYWw7CiAgICBleHBvcnRzLlNpZ25hbEhpZ2ggPSBTaWduYWxIaWdoOwogICAgZXhwb3J0cy5TaWduYWxMb3cgPSBTaWduYWxMb3c7CiAgICBleHBvcnRzLlNpZ25hbE1lZGl1bSA9IFNpZ25hbE1lZGl1bTsKICAgIGV4cG9ydHMuU2lnbmFsWmVybyA9IFNpZ25hbFplcm87CiAgICBleHBvcnRzLlNpZ25hdHVyZSA9IFNpZ25hdHVyZTsKICAgIGV4cG9ydHMuU2lnbnBvc3QgPSBTaWducG9zdDsKICAgIGV4cG9ydHMuU2lnbnBvc3RCaWcgPSBTaWducG9zdEJpZzsKICAgIGV4cG9ydHMuU2lyZW4gPSBTaXJlbjsKICAgIGV4cG9ydHMuU2tpcEJhY2sgPSBTa2lwQmFjazsKICAgIGV4cG9ydHMuU2tpcEZvcndhcmQgPSBTa2lwRm9yd2FyZDsKICAgIGV4cG9ydHMuU2t1bGwgPSBTa3VsbDsKICAgIGV4cG9ydHMuU2xhY2sgPSBTbGFjazsKICAgIGV4cG9ydHMuU2xhc2ggPSBTbGFzaDsKICAgIGV4cG9ydHMuU2xhc2hTcXVhcmUgPSBTcXVhcmVTbGFzaDsKICAgIGV4cG9ydHMuU2xpY2UgPSBTbGljZTsKICAgIGV4cG9ydHMuU2xpZGVycyA9IFNsaWRlcnNWZXJ0aWNhbDsKICAgIGV4cG9ydHMuU2xpZGVyc0hvcml6b250YWwgPSBTbGlkZXJzSG9yaXpvbnRhbDsKICAgIGV4cG9ydHMuU2xpZGVyc1ZlcnRpY2FsID0gU2xpZGVyc1ZlcnRpY2FsOwogICAgZXhwb3J0cy5TbWFydHBob25lID0gU21hcnRwaG9uZTsKICAgIGV4cG9ydHMuU21hcnRwaG9uZUNoYXJnaW5nID0gU21hcnRwaG9uZUNoYXJnaW5nOwogICAgZXhwb3J0cy5TbWFydHBob25lTmZjID0gU21hcnRwaG9uZU5mYzsKICAgIGV4cG9ydHMuU21pbGUgPSBTbWlsZTsKICAgIGV4cG9ydHMuU21pbGVQbHVzID0gU21pbGVQbHVzOwogICAgZXhwb3J0cy5TbmFpbCA9IFNuYWlsOwogICAgZXhwb3J0cy5Tbm93Zmxha2UgPSBTbm93Zmxha2U7CiAgICBleHBvcnRzLlNvYXBEaXNwZW5zZXJEcm9wbGV0ID0gU29hcERpc3BlbnNlckRyb3BsZXQ7CiAgICBleHBvcnRzLlNvZmEgPSBTb2ZhOwogICAgZXhwb3J0cy5Tb2xhclBhbmVsID0gU29sYXJQYW5lbDsKICAgIGV4cG9ydHMuU29ydEFzYyA9IEFycm93VXBOYXJyb3dXaWRlOwogICAgZXhwb3J0cy5Tb3J0RGVzYyA9IEFycm93RG93bldpZGVOYXJyb3c7CiAgICBleHBvcnRzLlNvdXAgPSBTb3VwOwogICAgZXhwb3J0cy5TcGFjZSA9IFNwYWNlOwogICAgZXhwb3J0cy5TcGFkZSA9IFNwYWRlOwogICAgZXhwb3J0cy5TcGFya2xlID0gU3BhcmtsZTsKICAgIGV4cG9ydHMuU3BhcmtsZXMgPSBTcGFya2xlczsKICAgIGV4cG9ydHMuU3BlYWtlciA9IFNwZWFrZXI7CiAgICBleHBvcnRzLlNwZWVjaCA9IFNwZWVjaDsKICAgIGV4cG9ydHMuU3BlbGxDaGVjayA9IFNwZWxsQ2hlY2s7CiAgICBleHBvcnRzLlNwZWxsQ2hlY2syID0gU3BlbGxDaGVjazI7CiAgICBleHBvcnRzLlNwbGluZSA9IFNwbGluZTsKICAgIGV4cG9ydHMuU3BsaW5lUG9pbnRlciA9IFNwbGluZVBvaW50ZXI7CiAgICBleHBvcnRzLlNwbGl0ID0gU3BsaXQ7CiAgICBleHBvcnRzLlNwbGl0U3F1YXJlSG9yaXpvbnRhbCA9IFNxdWFyZVNwbGl0SG9yaXpvbnRhbDsKICAgIGV4cG9ydHMuU3BsaXRTcXVhcmVWZXJ0aWNhbCA9IFNxdWFyZVNwbGl0VmVydGljYWw7CiAgICBleHBvcnRzLlNwb29sID0gU3Bvb2w7CiAgICBleHBvcnRzLlNwb3RsaWdodCA9IFNwb3RsaWdodDsKICAgIGV4cG9ydHMuU3ByYXlDYW4gPSBTcHJheUNhbjsKICAgIGV4cG9ydHMuU3Byb3V0ID0gU3Byb3V0OwogICAgZXhwb3J0cy5TcXVhcmUgPSBTcXVhcmU7CiAgICBleHBvcnRzLlNxdWFyZUFjdGl2aXR5ID0gU3F1YXJlQWN0aXZpdHk7CiAgICBleHBvcnRzLlNxdWFyZUFycm93RG93biA9IFNxdWFyZUFycm93RG93bjsKICAgIGV4cG9ydHMuU3F1YXJlQXJyb3dEb3duTGVmdCA9IFNxdWFyZUFycm93RG93bkxlZnQ7CiAgICBleHBvcnRzLlNxdWFyZUFycm93RG93blJpZ2h0ID0gU3F1YXJlQXJyb3dEb3duUmlnaHQ7CiAgICBleHBvcnRzLlNxdWFyZUFycm93TGVmdCA9IFNxdWFyZUFycm93TGVmdDsKICAgIGV4cG9ydHMuU3F1YXJlQXJyb3dPdXREb3duTGVmdCA9IFNxdWFyZUFycm93T3V0RG93bkxlZnQ7CiAgICBleHBvcnRzLlNxdWFyZUFycm93T3V0RG93blJpZ2h0ID0gU3F1YXJlQXJyb3dPdXREb3duUmlnaHQ7CiAgICBleHBvcnRzLlNxdWFyZUFycm93T3V0VXBMZWZ0ID0gU3F1YXJlQXJyb3dPdXRVcExlZnQ7CiAgICBleHBvcnRzLlNxdWFyZUFycm93T3V0VXBSaWdodCA9IFNxdWFyZUFycm93T3V0VXBSaWdodDsKICAgIGV4cG9ydHMuU3F1YXJlQXJyb3dSaWdodCA9IFNxdWFyZUFycm93UmlnaHQ7CiAgICBleHBvcnRzLlNxdWFyZUFycm93VXAgPSBTcXVhcmVBcnJvd1VwOwogICAgZXhwb3J0cy5TcXVhcmVBcnJvd1VwTGVmdCA9IFNxdWFyZUFycm93VXBMZWZ0OwogICAgZXhwb3J0cy5TcXVhcmVBcnJvd1VwUmlnaHQgPSBTcXVhcmVBcnJvd1VwUmlnaHQ7CiAgICBleHBvcnRzLlNxdWFyZUFzdGVyaXNrID0gU3F1YXJlQXN0ZXJpc2s7CiAgICBleHBvcnRzLlNxdWFyZUJvdHRvbURhc2hlZFNjaXNzb3JzID0gU3F1YXJlQm90dG9tRGFzaGVkU2Npc3NvcnM7CiAgICBleHBvcnRzLlNxdWFyZUNoYXJ0R2FudHQgPSBTcXVhcmVDaGFydEdhbnR0OwogICAgZXhwb3J0cy5TcXVhcmVDaGVjayA9IFNxdWFyZUNoZWNrOwogICAgZXhwb3J0cy5TcXVhcmVDaGVja0JpZyA9IFNxdWFyZUNoZWNrQmlnOwogICAgZXhwb3J0cy5TcXVhcmVDaGV2cm9uRG93biA9IFNxdWFyZUNoZXZyb25Eb3duOwogICAgZXhwb3J0cy5TcXVhcmVDaGV2cm9uTGVmdCA9IFNxdWFyZUNoZXZyb25MZWZ0OwogICAgZXhwb3J0cy5TcXVhcmVDaGV2cm9uUmlnaHQgPSBTcXVhcmVDaGV2cm9uUmlnaHQ7CiAgICBleHBvcnRzLlNxdWFyZUNoZXZyb25VcCA9IFNxdWFyZUNoZXZyb25VcDsKICAgIGV4cG9ydHMuU3F1YXJlQ29kZSA9IFNxdWFyZUNvZGU7CiAgICBleHBvcnRzLlNxdWFyZURhc2hlZCA9IFNxdWFyZURhc2hlZDsKICAgIGV4cG9ydHMuU3F1YXJlRGFzaGVkQm90dG9tID0gU3F1YXJlRGFzaGVkQm90dG9tOwogICAgZXhwb3J0cy5TcXVhcmVEYXNoZWRCb3R0b21Db2RlID0gU3F1YXJlRGFzaGVkQm90dG9tQ29kZTsKICAgIGV4cG9ydHMuU3F1YXJlRGFzaGVkS2FuYmFuID0gU3F1YXJlRGFzaGVkS2FuYmFuOwogICAgZXhwb3J0cy5TcXVhcmVEYXNoZWRNb3VzZVBvaW50ZXIgPSBTcXVhcmVEYXNoZWRNb3VzZVBvaW50ZXI7CiAgICBleHBvcnRzLlNxdWFyZURhc2hlZFRvcFNvbGlkID0gU3F1YXJlRGFzaGVkVG9wU29saWQ7CiAgICBleHBvcnRzLlNxdWFyZURpdmlkZSA9IFNxdWFyZURpdmlkZTsKICAgIGV4cG9ydHMuU3F1YXJlRG90ID0gU3F1YXJlRG90OwogICAgZXhwb3J0cy5TcXVhcmVFcXVhbCA9IFNxdWFyZUVxdWFsOwogICAgZXhwb3J0cy5TcXVhcmVGdW5jdGlvbiA9IFNxdWFyZUZ1bmN0aW9uOwogICAgZXhwb3J0cy5TcXVhcmVHYW50dENoYXJ0ID0gU3F1YXJlQ2hhcnRHYW50dDsKICAgIGV4cG9ydHMuU3F1YXJlS2FuYmFuID0gU3F1YXJlS2FuYmFuOwogICAgZXhwb3J0cy5TcXVhcmVMaWJyYXJ5ID0gU3F1YXJlTGlicmFyeTsKICAgIGV4cG9ydHMuU3F1YXJlTSA9IFNxdWFyZU07CiAgICBleHBvcnRzLlNxdWFyZU1lbnUgPSBTcXVhcmVNZW51OwogICAgZXhwb3J0cy5TcXVhcmVNaW51cyA9IFNxdWFyZU1pbnVzOwogICAgZXhwb3J0cy5TcXVhcmVNb3VzZVBvaW50ZXIgPSBTcXVhcmVNb3VzZVBvaW50ZXI7CiAgICBleHBvcnRzLlNxdWFyZVBhcmtpbmcgPSBTcXVhcmVQYXJraW5nOwogICAgZXhwb3J0cy5TcXVhcmVQYXJraW5nT2ZmID0gU3F1YXJlUGFya2luZ09mZjsKICAgIGV4cG9ydHMuU3F1YXJlUGF1c2UgPSBTcXVhcmVQYXVzZTsKICAgIGV4cG9ydHMuU3F1YXJlUGVuID0gU3F1YXJlUGVuOwogICAgZXhwb3J0cy5TcXVhcmVQZXJjZW50ID0gU3F1YXJlUGVyY2VudDsKICAgIGV4cG9ydHMuU3F1YXJlUGkgPSBTcXVhcmVQaTsKICAgIGV4cG9ydHMuU3F1YXJlUGlsY3JvdyA9IFNxdWFyZVBpbGNyb3c7CiAgICBleHBvcnRzLlNxdWFyZVBsYXkgPSBTcXVhcmVQbGF5OwogICAgZXhwb3J0cy5TcXVhcmVQbHVzID0gU3F1YXJlUGx1czsKICAgIGV4cG9ydHMuU3F1YXJlUG93ZXIgPSBTcXVhcmVQb3dlcjsKICAgIGV4cG9ydHMuU3F1YXJlUmFkaWNhbCA9IFNxdWFyZVJhZGljYWw7CiAgICBleHBvcnRzLlNxdWFyZVJvdW5kQ29ybmVyID0gU3F1YXJlUm91bmRDb3JuZXI7CiAgICBleHBvcnRzLlNxdWFyZVNjaXNzb3JzID0gU3F1YXJlU2Npc3NvcnM7CiAgICBleHBvcnRzLlNxdWFyZVNpZ21hID0gU3F1YXJlU2lnbWE7CiAgICBleHBvcnRzLlNxdWFyZVNsYXNoID0gU3F1YXJlU2xhc2g7CiAgICBleHBvcnRzLlNxdWFyZVNwbGl0SG9yaXpvbnRhbCA9IFNxdWFyZVNwbGl0SG9yaXpvbnRhbDsKICAgIGV4cG9ydHMuU3F1YXJlU3BsaXRWZXJ0aWNhbCA9IFNxdWFyZVNwbGl0VmVydGljYWw7CiAgICBleHBvcnRzLlNxdWFyZVNxdWFyZSA9IFNxdWFyZVNxdWFyZTsKICAgIGV4cG9ydHMuU3F1YXJlU3RhY2sgPSBTcXVhcmVTdGFjazsKICAgIGV4cG9ydHMuU3F1YXJlU3RhciA9IFNxdWFyZVN0YXI7CiAgICBleHBvcnRzLlNxdWFyZVN0b3AgPSBTcXVhcmVTdG9wOwogICAgZXhwb3J0cy5TcXVhcmVUZXJtaW5hbCA9IFNxdWFyZVRlcm1pbmFsOwogICAgZXhwb3J0cy5TcXVhcmVVc2VyID0gU3F1YXJlVXNlcjsKICAgIGV4cG9ydHMuU3F1YXJlVXNlclJvdW5kID0gU3F1YXJlVXNlclJvdW5kOwogICAgZXhwb3J0cy5TcXVhcmVYID0gU3F1YXJlWDsKICAgIGV4cG9ydHMuU3F1YXJlc0V4Y2x1ZGUgPSBTcXVhcmVzRXhjbHVkZTsKICAgIGV4cG9ydHMuU3F1YXJlc0ludGVyc2VjdCA9IFNxdWFyZXNJbnRlcnNlY3Q7CiAgICBleHBvcnRzLlNxdWFyZXNTdWJ0cmFjdCA9IFNxdWFyZXNTdWJ0cmFjdDsKICAgIGV4cG9ydHMuU3F1YXJlc1VuaXRlID0gU3F1YXJlc1VuaXRlOwogICAgZXhwb3J0cy5TcXVpcmNsZSA9IFNxdWlyY2xlOwogICAgZXhwb3J0cy5TcXVpcmNsZURhc2hlZCA9IFNxdWlyY2xlRGFzaGVkOwogICAgZXhwb3J0cy5TcXVpcnJlbCA9IFNxdWlycmVsOwogICAgZXhwb3J0cy5TdGFtcCA9IFN0YW1wOwogICAgZXhwb3J0cy5TdGFyID0gU3RhcjsKICAgIGV4cG9ydHMuU3RhckhhbGYgPSBTdGFySGFsZjsKICAgIGV4cG9ydHMuU3Rhck9mZiA9IFN0YXJPZmY7CiAgICBleHBvcnRzLlN0YXJzID0gU3BhcmtsZXM7CiAgICBleHBvcnRzLlN0ZXBCYWNrID0gU3RlcEJhY2s7CiAgICBleHBvcnRzLlN0ZXBGb3J3YXJkID0gU3RlcEZvcndhcmQ7CiAgICBleHBvcnRzLlN0ZXRob3Njb3BlID0gU3RldGhvc2NvcGU7CiAgICBleHBvcnRzLlN0aWNrZXIgPSBTdGlja2VyOwogICAgZXhwb3J0cy5TdGlja3lOb3RlID0gU3RpY2t5Tm90ZTsKICAgIGV4cG9ydHMuU3RvbmUgPSBTdG9uZTsKICAgIGV4cG9ydHMuU3RvcENpcmNsZSA9IENpcmNsZVN0b3A7CiAgICBleHBvcnRzLlN0b3JlID0gU3RvcmU7CiAgICBleHBvcnRzLlN0cmV0Y2hIb3Jpem9udGFsID0gU3RyZXRjaEhvcml6b250YWw7CiAgICBleHBvcnRzLlN0cmV0Y2hWZXJ0aWNhbCA9IFN0cmV0Y2hWZXJ0aWNhbDsKICAgIGV4cG9ydHMuU3RyaWtldGhyb3VnaCA9IFN0cmlrZXRocm91Z2g7CiAgICBleHBvcnRzLlN1YnNjcmlwdCA9IFN1YnNjcmlwdDsKICAgIGV4cG9ydHMuU3VidGl0bGVzID0gQ2FwdGlvbnM7CiAgICBleHBvcnRzLlN1biA9IFN1bjsKICAgIGV4cG9ydHMuU3VuRGltID0gU3VuRGltOwogICAgZXhwb3J0cy5TdW5NZWRpdW0gPSBTdW5NZWRpdW07CiAgICBleHBvcnRzLlN1bk1vb24gPSBTdW5Nb29uOwogICAgZXhwb3J0cy5TdW5Tbm93ID0gU3VuU25vdzsKICAgIGV4cG9ydHMuU3VucmlzZSA9IFN1bnJpc2U7CiAgICBleHBvcnRzLlN1bnNldCA9IFN1bnNldDsKICAgIGV4cG9ydHMuU3VwZXJzY3JpcHQgPSBTdXBlcnNjcmlwdDsKICAgIGV4cG9ydHMuU3dhdGNoQm9vayA9IFN3YXRjaEJvb2s7CiAgICBleHBvcnRzLlN3aXNzRnJhbmMgPSBTd2lzc0ZyYW5jOwogICAgZXhwb3J0cy5Td2l0Y2hDYW1lcmEgPSBTd2l0Y2hDYW1lcmE7CiAgICBleHBvcnRzLlN3b3JkID0gU3dvcmQ7CiAgICBleHBvcnRzLlN3b3JkcyA9IFN3b3JkczsKICAgIGV4cG9ydHMuU3lyaW5nZSA9IFN5cmluZ2U7CiAgICBleHBvcnRzLlRhYmxlID0gVGFibGU7CiAgICBleHBvcnRzLlRhYmxlMiA9IFRhYmxlMjsKICAgIGV4cG9ydHMuVGFibGVDZWxsc01lcmdlID0gVGFibGVDZWxsc01lcmdlOwogICAgZXhwb3J0cy5UYWJsZUNlbGxzU3BsaXQgPSBUYWJsZUNlbGxzU3BsaXQ7CiAgICBleHBvcnRzLlRhYmxlQ29sdW1uc1NwbGl0ID0gVGFibGVDb2x1bW5zU3BsaXQ7CiAgICBleHBvcnRzLlRhYmxlQ29uZmlnID0gQ29sdW1uczNDb2c7CiAgICBleHBvcnRzLlRhYmxlT2ZDb250ZW50cyA9IFRhYmxlT2ZDb250ZW50czsKICAgIGV4cG9ydHMuVGFibGVQcm9wZXJ0aWVzID0gVGFibGVQcm9wZXJ0aWVzOwogICAgZXhwb3J0cy5UYWJsZVJvd3NTcGxpdCA9IFRhYmxlUm93c1NwbGl0OwogICAgZXhwb3J0cy5UYWJsZXQgPSBUYWJsZXQ7CiAgICBleHBvcnRzLlRhYmxldFNtYXJ0cGhvbmUgPSBUYWJsZXRTbWFydHBob25lOwogICAgZXhwb3J0cy5UYWJsZXRzID0gVGFibGV0czsKICAgIGV4cG9ydHMuVGFnID0gVGFnMjsKICAgIGV4cG9ydHMuVGFncyA9IFRhZ3M7CiAgICBleHBvcnRzLlRhbGx5MSA9IFRhbGx5MTsKICAgIGV4cG9ydHMuVGFsbHkyID0gVGFsbHkyOwogICAgZXhwb3J0cy5UYWxseTMgPSBUYWxseTM7CiAgICBleHBvcnRzLlRhbGx5NCA9IFRhbGx5NDsKICAgIGV4cG9ydHMuVGFsbHk1ID0gVGFsbHk1OwogICAgZXhwb3J0cy5UYW5nZW50ID0gVGFuZ2VudDsKICAgIGV4cG9ydHMuVGFyZ2V0ID0gVGFyZ2V0OwogICAgZXhwb3J0cy5UZWxlc2NvcGUgPSBUZWxlc2NvcGU7CiAgICBleHBvcnRzLlRlbnQgPSBUZW50OwogICAgZXhwb3J0cy5UZW50VHJlZSA9IFRlbnRUcmVlOwogICAgZXhwb3J0cy5UZXJtaW5hbCA9IFRlcm1pbmFsOwogICAgZXhwb3J0cy5UZXJtaW5hbFNxdWFyZSA9IFNxdWFyZVRlcm1pbmFsOwogICAgZXhwb3J0cy5UZXN0VHViZSA9IFRlc3RUdWJlOwogICAgZXhwb3J0cy5UZXN0VHViZTIgPSBUZXN0VHViZURpYWdvbmFsOwogICAgZXhwb3J0cy5UZXN0VHViZURpYWdvbmFsID0gVGVzdFR1YmVEaWFnb25hbDsKICAgIGV4cG9ydHMuVGVzdFR1YmVzID0gVGVzdFR1YmVzOwogICAgZXhwb3J0cy5UZXh0ID0gVGV4dEFsaWduU3RhcnQ7CiAgICBleHBvcnRzLlRleHRBbGlnbkNlbnRlciA9IFRleHRBbGlnbkNlbnRlcjsKICAgIGV4cG9ydHMuVGV4dEFsaWduRW5kID0gVGV4dEFsaWduRW5kOwogICAgZXhwb3J0cy5UZXh0QWxpZ25KdXN0aWZ5ID0gVGV4dEFsaWduSnVzdGlmeTsKICAgIGV4cG9ydHMuVGV4dEFsaWduU3RhcnQgPSBUZXh0QWxpZ25TdGFydDsKICAgIGV4cG9ydHMuVGV4dEN1cnNvciA9IFRleHRDdXJzb3I7CiAgICBleHBvcnRzLlRleHRDdXJzb3JJbnB1dCA9IFRleHRDdXJzb3JJbnB1dDsKICAgIGV4cG9ydHMuVGV4dEluaXRpYWwgPSBUZXh0SW5pdGlhbDsKICAgIGV4cG9ydHMuVGV4dFF1b3RlID0gVGV4dFF1b3RlOwogICAgZXhwb3J0cy5UZXh0U2VhcmNoID0gVGV4dFNlYXJjaDsKICAgIGV4cG9ydHMuVGV4dFNlbGVjdCA9IFRleHRTZWxlY3Q7CiAgICBleHBvcnRzLlRleHRTZWxlY3Rpb24gPSBUZXh0U2VsZWN0OwogICAgZXhwb3J0cy5UZXh0V3JhcCA9IFRleHRXcmFwOwogICAgZXhwb3J0cy5UaGVhdGVyID0gVGhlYXRlcjsKICAgIGV4cG9ydHMuVGhlcm1vbWV0ZXIgPSBUaGVybW9tZXRlcjsKICAgIGV4cG9ydHMuVGhlcm1vbWV0ZXJTbm93Zmxha2UgPSBUaGVybW9tZXRlclNub3dmbGFrZTsKICAgIGV4cG9ydHMuVGhlcm1vbWV0ZXJTdW4gPSBUaGVybW9tZXRlclN1bjsKICAgIGV4cG9ydHMuVGh1bWJzRG93biA9IFRodW1ic0Rvd247CiAgICBleHBvcnRzLlRodW1ic1VwID0gVGh1bWJzVXA7CiAgICBleHBvcnRzLlRpY2tldCA9IFRpY2tldDsKICAgIGV4cG9ydHMuVGlja2V0Q2hlY2sgPSBUaWNrZXRDaGVjazsKICAgIGV4cG9ydHMuVGlja2V0TWludXMgPSBUaWNrZXRNaW51czsKICAgIGV4cG9ydHMuVGlja2V0UGVyY2VudCA9IFRpY2tldFBlcmNlbnQ7CiAgICBleHBvcnRzLlRpY2tldFBsdXMgPSBUaWNrZXRQbHVzOwogICAgZXhwb3J0cy5UaWNrZXRTbGFzaCA9IFRpY2tldFNsYXNoOwogICAgZXhwb3J0cy5UaWNrZXRYID0gVGlja2V0WDsKICAgIGV4cG9ydHMuVGlja2V0cyA9IFRpY2tldHM7CiAgICBleHBvcnRzLlRpY2tldHNQbGFuZSA9IFRpY2tldHNQbGFuZTsKICAgIGV4cG9ydHMuVGltZXIgPSBUaW1lcjI7CiAgICBleHBvcnRzLlRpbWVyT2ZmID0gVGltZXJPZmY7CiAgICBleHBvcnRzLlRpbWVyUmVzZXQgPSBUaW1lclJlc2V0OwogICAgZXhwb3J0cy5Ub2dnbGVMZWZ0ID0gVG9nZ2xlTGVmdDsKICAgIGV4cG9ydHMuVG9nZ2xlUmlnaHQgPSBUb2dnbGVSaWdodDsKICAgIGV4cG9ydHMuVG9pbGV0ID0gVG9pbGV0OwogICAgZXhwb3J0cy5Ub29sQ2FzZSA9IFRvb2xDYXNlOwogICAgZXhwb3J0cy5Ub29sYm94ID0gVG9vbGJveDsKICAgIGV4cG9ydHMuVG9ybmFkbyA9IFRvcm5hZG87CiAgICBleHBvcnRzLlRvcnVzID0gVG9ydXM7CiAgICBleHBvcnRzLlRvdWNocGFkID0gVG91Y2hwYWQ7CiAgICBleHBvcnRzLlRvdWNocGFkT2ZmID0gVG91Y2hwYWRPZmY7CiAgICBleHBvcnRzLlRvd2VyQ29udHJvbCA9IFRvd2VyQ29udHJvbDsKICAgIGV4cG9ydHMuVG95QnJpY2sgPSBUb3lCcmljazsKICAgIGV4cG9ydHMuVHJhY3RvciA9IFRyYWN0b3I7CiAgICBleHBvcnRzLlRyYWZmaWNDb25lID0gVHJhZmZpY0NvbmU7CiAgICBleHBvcnRzLlRyYWluID0gVHJhbUZyb250OwogICAgZXhwb3J0cy5UcmFpbkZyb250ID0gVHJhaW5Gcm9udDsKICAgIGV4cG9ydHMuVHJhaW5Gcm9udFR1bm5lbCA9IFRyYWluRnJvbnRUdW5uZWw7CiAgICBleHBvcnRzLlRyYWluVHJhY2sgPSBUcmFpblRyYWNrOwogICAgZXhwb3J0cy5UcmFtRnJvbnQgPSBUcmFtRnJvbnQ7CiAgICBleHBvcnRzLlRyYW5zZ2VuZGVyID0gVHJhbnNnZW5kZXI7CiAgICBleHBvcnRzLlRyYXNoID0gVHJhc2g7CiAgICBleHBvcnRzLlRyYXNoMiA9IFRyYXNoMjsKICAgIGV4cG9ydHMuVHJlZURlY2lkdW91cyA9IFRyZWVEZWNpZHVvdXM7CiAgICBleHBvcnRzLlRyZWVQYWxtID0gVHJlZVBhbG07CiAgICBleHBvcnRzLlRyZWVQaW5lID0gVHJlZVBpbmU7CiAgICBleHBvcnRzLlRyZWVzID0gVHJlZXM7CiAgICBleHBvcnRzLlRyZWxsbyA9IFRyZWxsbzsKICAgIGV4cG9ydHMuVHJlbmRpbmdEb3duID0gVHJlbmRpbmdEb3duOwogICAgZXhwb3J0cy5UcmVuZGluZ1VwID0gVHJlbmRpbmdVcDsKICAgIGV4cG9ydHMuVHJlbmRpbmdVcERvd24gPSBUcmVuZGluZ1VwRG93bjsKICAgIGV4cG9ydHMuVHJpYW5nbGUgPSBUcmlhbmdsZTsKICAgIGV4cG9ydHMuVHJpYW5nbGVBbGVydCA9IFRyaWFuZ2xlQWxlcnQ7CiAgICBleHBvcnRzLlRyaWFuZ2xlRGFzaGVkID0gVHJpYW5nbGVEYXNoZWQ7CiAgICBleHBvcnRzLlRyaWFuZ2xlUmlnaHQgPSBUcmlhbmdsZVJpZ2h0OwogICAgZXhwb3J0cy5Ucm9waHkgPSBUcm9waHk7CiAgICBleHBvcnRzLlRydWNrID0gVHJ1Y2s7CiAgICBleHBvcnRzLlRydWNrRWxlY3RyaWMgPSBUcnVja0VsZWN0cmljOwogICAgZXhwb3J0cy5UdXJraXNoTGlyYSA9IFR1cmtpc2hMaXJhOwogICAgZXhwb3J0cy5UdXJudGFibGUgPSBUdXJudGFibGU7CiAgICBleHBvcnRzLlR1cnRsZSA9IFR1cnRsZTsKICAgIGV4cG9ydHMuVHYgPSBUdjsKICAgIGV4cG9ydHMuVHYyID0gVHZNaW5pbWFsOwogICAgZXhwb3J0cy5Udk1pbmltYWwgPSBUdk1pbmltYWw7CiAgICBleHBvcnRzLlR2TWluaW1hbFBsYXkgPSBUdk1pbmltYWxQbGF5OwogICAgZXhwb3J0cy5Ud2l0Y2ggPSBUd2l0Y2g7CiAgICBleHBvcnRzLlR3aXR0ZXIgPSBUd2l0dGVyOwogICAgZXhwb3J0cy5UeXBlID0gVHlwZTsKICAgIGV4cG9ydHMuVHlwZU91dGxpbmUgPSBUeXBlT3V0bGluZTsKICAgIGV4cG9ydHMuVW1icmVsbGEgPSBVbWJyZWxsYTsKICAgIGV4cG9ydHMuVW1icmVsbGFPZmYgPSBVbWJyZWxsYU9mZjsKICAgIGV4cG9ydHMuVW5kZXJsaW5lID0gVW5kZXJsaW5lOwogICAgZXhwb3J0cy5VbmRvID0gVW5kbzsKICAgIGV4cG9ydHMuVW5kbzIgPSBVbmRvMjsKICAgIGV4cG9ydHMuVW5kb0RvdCA9IFVuZG9Eb3Q7CiAgICBleHBvcnRzLlVuZm9sZEhvcml6b250YWwgPSBVbmZvbGRIb3Jpem9udGFsOwogICAgZXhwb3J0cy5VbmZvbGRWZXJ0aWNhbCA9IFVuZm9sZFZlcnRpY2FsOwogICAgZXhwb3J0cy5Vbmdyb3VwID0gVW5ncm91cDsKICAgIGV4cG9ydHMuVW5pdmVyc2l0eSA9IFVuaXZlcnNpdHk7CiAgICBleHBvcnRzLlVubGluayA9IFVubGluazsKICAgIGV4cG9ydHMuVW5saW5rMiA9IFVubGluazI7CiAgICBleHBvcnRzLlVubG9jayA9IExvY2tPcGVuOwogICAgZXhwb3J0cy5VbmxvY2tLZXlob2xlID0gTG9ja0tleWhvbGVPcGVuOwogICAgZXhwb3J0cy5VbnBsdWcgPSBVbnBsdWc7CiAgICBleHBvcnRzLlVwbG9hZCA9IFVwbG9hZDsKICAgIGV4cG9ydHMuVXBsb2FkQ2xvdWQgPSBDbG91ZFVwbG9hZDsKICAgIGV4cG9ydHMuVXNiID0gVXNiOwogICAgZXhwb3J0cy5Vc2VyID0gVXNlcjsKICAgIGV4cG9ydHMuVXNlcjIgPSBVc2VyUm91bmQ7CiAgICBleHBvcnRzLlVzZXJDaGVjayA9IFVzZXJDaGVjazsKICAgIGV4cG9ydHMuVXNlckNoZWNrMiA9IFVzZXJSb3VuZENoZWNrOwogICAgZXhwb3J0cy5Vc2VyQ2lyY2xlID0gQ2lyY2xlVXNlcjsKICAgIGV4cG9ydHMuVXNlckNpcmNsZTIgPSBDaXJjbGVVc2VyUm91bmQ7CiAgICBleHBvcnRzLlVzZXJDb2cgPSBVc2VyQ29nOwogICAgZXhwb3J0cy5Vc2VyQ29nMiA9IFVzZXJSb3VuZENvZzsKICAgIGV4cG9ydHMuVXNlckxvY2sgPSBVc2VyTG9jazsKICAgIGV4cG9ydHMuVXNlck1pbnVzID0gVXNlck1pbnVzOwogICAgZXhwb3J0cy5Vc2VyTWludXMyID0gVXNlclJvdW5kTWludXM7CiAgICBleHBvcnRzLlVzZXJQZW4gPSBVc2VyUGVuOwogICAgZXhwb3J0cy5Vc2VyUGx1cyA9IFVzZXJQbHVzOwogICAgZXhwb3J0cy5Vc2VyUGx1czIgPSBVc2VyUm91bmRQbHVzOwogICAgZXhwb3J0cy5Vc2VyUm91bmQgPSBVc2VyUm91bmQ7CiAgICBleHBvcnRzLlVzZXJSb3VuZENoZWNrID0gVXNlclJvdW5kQ2hlY2s7CiAgICBleHBvcnRzLlVzZXJSb3VuZENvZyA9IFVzZXJSb3VuZENvZzsKICAgIGV4cG9ydHMuVXNlclJvdW5kTWludXMgPSBVc2VyUm91bmRNaW51czsKICAgIGV4cG9ydHMuVXNlclJvdW5kUGVuID0gVXNlclJvdW5kUGVuOwogICAgZXhwb3J0cy5Vc2VyUm91bmRQbHVzID0gVXNlclJvdW5kUGx1czsKICAgIGV4cG9ydHMuVXNlclJvdW5kU2VhcmNoID0gVXNlclJvdW5kU2VhcmNoOwogICAgZXhwb3J0cy5Vc2VyUm91bmRYID0gVXNlclJvdW5kWDsKICAgIGV4cG9ydHMuVXNlclNlYXJjaCA9IFVzZXJTZWFyY2g7CiAgICBleHBvcnRzLlVzZXJTcXVhcmUgPSBTcXVhcmVVc2VyOwogICAgZXhwb3J0cy5Vc2VyU3F1YXJlMiA9IFNxdWFyZVVzZXJSb3VuZDsKICAgIGV4cG9ydHMuVXNlclN0YXIgPSBVc2VyU3RhcjsKICAgIGV4cG9ydHMuVXNlclggPSBVc2VyWDsKICAgIGV4cG9ydHMuVXNlclgyID0gVXNlclJvdW5kWDsKICAgIGV4cG9ydHMuVXNlcnMgPSBVc2VyczsKICAgIGV4cG9ydHMuVXNlcnMyID0gVXNlcnNSb3VuZDsKICAgIGV4cG9ydHMuVXNlcnNSb3VuZCA9IFVzZXJzUm91bmQ7CiAgICBleHBvcnRzLlV0ZW5zaWxzID0gVXRlbnNpbHM7CiAgICBleHBvcnRzLlV0ZW5zaWxzQ3Jvc3NlZCA9IFV0ZW5zaWxzQ3Jvc3NlZDsKICAgIGV4cG9ydHMuVXRpbGl0eVBvbGUgPSBVdGlsaXR5UG9sZTsKICAgIGV4cG9ydHMuVmFuID0gVmFuOwogICAgZXhwb3J0cy5WYXJpYWJsZSA9IFZhcmlhYmxlOwogICAgZXhwb3J0cy5WYXVsdCA9IFZhdWx0OwogICAgZXhwb3J0cy5WZWN0b3JTcXVhcmUgPSBWZWN0b3JTcXVhcmU7CiAgICBleHBvcnRzLlZlZ2FuID0gVmVnYW47CiAgICBleHBvcnRzLlZlbmV0aWFuTWFzayA9IFZlbmV0aWFuTWFzazsKICAgIGV4cG9ydHMuVmVudXMgPSBWZW51czsKICAgIGV4cG9ydHMuVmVudXNBbmRNYXJzID0gVmVudXNBbmRNYXJzOwogICAgZXhwb3J0cy5WZXJpZmllZCA9IEJhZGdlQ2hlY2s7CiAgICBleHBvcnRzLlZpYnJhdGUgPSBWaWJyYXRlOwogICAgZXhwb3J0cy5WaWJyYXRlT2ZmID0gVmlicmF0ZU9mZjsKICAgIGV4cG9ydHMuVmlkZW8gPSBWaWRlbzsKICAgIGV4cG9ydHMuVmlkZW9PZmYgPSBWaWRlb09mZjsKICAgIGV4cG9ydHMuVmlkZW90YXBlID0gVmlkZW90YXBlOwogICAgZXhwb3J0cy5WaWV3ID0gVmlldzsKICAgIGV4cG9ydHMuVm9pY2VtYWlsID0gVm9pY2VtYWlsOwogICAgZXhwb3J0cy5Wb2xsZXliYWxsID0gVm9sbGV5YmFsbDsKICAgIGV4cG9ydHMuVm9sdW1lID0gVm9sdW1lOwogICAgZXhwb3J0cy5Wb2x1bWUxID0gVm9sdW1lMTsKICAgIGV4cG9ydHMuVm9sdW1lMiA9IFZvbHVtZTI7CiAgICBleHBvcnRzLlZvbHVtZU9mZiA9IFZvbHVtZU9mZjsKICAgIGV4cG9ydHMuVm9sdW1lWCA9IFZvbHVtZVg7CiAgICBleHBvcnRzLlZvdGUgPSBWb3RlOwogICAgZXhwb3J0cy5XYWxsZXQgPSBXYWxsZXQ7CiAgICBleHBvcnRzLldhbGxldDIgPSBXYWxsZXRNaW5pbWFsOwogICAgZXhwb3J0cy5XYWxsZXRDYXJkcyA9IFdhbGxldENhcmRzOwogICAgZXhwb3J0cy5XYWxsZXRNaW5pbWFsID0gV2FsbGV0TWluaW1hbDsKICAgIGV4cG9ydHMuV2FsbHBhcGVyID0gV2FsbHBhcGVyOwogICAgZXhwb3J0cy5XYW5kID0gV2FuZDsKICAgIGV4cG9ydHMuV2FuZDIgPSBXYW5kU3BhcmtsZXM7CiAgICBleHBvcnRzLldhbmRTcGFya2xlcyA9IFdhbmRTcGFya2xlczsKICAgIGV4cG9ydHMuV2FyZWhvdXNlID0gV2FyZWhvdXNlOwogICAgZXhwb3J0cy5XYXNoaW5nTWFjaGluZSA9IFdhc2hpbmdNYWNoaW5lOwogICAgZXhwb3J0cy5XYXRjaCA9IFdhdGNoOwogICAgZXhwb3J0cy5XYXZlcyA9IFdhdmVzOwogICAgZXhwb3J0cy5XYXZlc0Fycm93RG93biA9IFdhdmVzQXJyb3dEb3duOwogICAgZXhwb3J0cy5XYXZlc0Fycm93VXAgPSBXYXZlc0Fycm93VXA7CiAgICBleHBvcnRzLldhdmVzTGFkZGVyID0gV2F2ZXNMYWRkZXI7CiAgICBleHBvcnRzLldheXBvaW50cyA9IFdheXBvaW50czsKICAgIGV4cG9ydHMuV2ViY2FtID0gV2ViY2FtOwogICAgZXhwb3J0cy5XZWJob29rID0gV2ViaG9vazsKICAgIGV4cG9ydHMuV2ViaG9va09mZiA9IFdlYmhvb2tPZmY7CiAgICBleHBvcnRzLldlaWdodCA9IFdlaWdodDsKICAgIGV4cG9ydHMuV2VpZ2h0VGlsZGUgPSBXZWlnaHRUaWxkZTsKICAgIGV4cG9ydHMuV2hlYXQgPSBXaGVhdDsKICAgIGV4cG9ydHMuV2hlYXRPZmYgPSBXaGVhdE9mZjsKICAgIGV4cG9ydHMuV2hvbGVXb3JkID0gV2hvbGVXb3JkOwogICAgZXhwb3J0cy5XaWZpID0gV2lmaTsKICAgIGV4cG9ydHMuV2lmaUNvZyA9IFdpZmlDb2c7CiAgICBleHBvcnRzLldpZmlIaWdoID0gV2lmaUhpZ2g7CiAgICBleHBvcnRzLldpZmlMb3cgPSBXaWZpTG93OwogICAgZXhwb3J0cy5XaWZpT2ZmID0gV2lmaU9mZjsKICAgIGV4cG9ydHMuV2lmaVBlbiA9IFdpZmlQZW47CiAgICBleHBvcnRzLldpZmlTeW5jID0gV2lmaVN5bmM7CiAgICBleHBvcnRzLldpZmlaZXJvID0gV2lmaVplcm87CiAgICBleHBvcnRzLldpbmQgPSBXaW5kOwogICAgZXhwb3J0cy5XaW5kQXJyb3dEb3duID0gV2luZEFycm93RG93bjsKICAgIGV4cG9ydHMuV2luZSA9IFdpbmU7CiAgICBleHBvcnRzLldpbmVPZmYgPSBXaW5lT2ZmOwogICAgZXhwb3J0cy5Xb3JrZmxvdyA9IFdvcmtmbG93OwogICAgZXhwb3J0cy5Xb3JtID0gV29ybTsKICAgIGV4cG9ydHMuV3JhcFRleHQgPSBUZXh0V3JhcDsKICAgIGV4cG9ydHMuV3JlbmNoID0gV3JlbmNoOwogICAgZXhwb3J0cy5YID0gWDsKICAgIGV4cG9ydHMuWENpcmNsZSA9IENpcmNsZVg7CiAgICBleHBvcnRzLlhPY3RhZ29uID0gT2N0YWdvblg7CiAgICBleHBvcnRzLlhTcXVhcmUgPSBTcXVhcmVYOwogICAgZXhwb3J0cy5Zb3V0dWJlID0gWW91dHViZTsKICAgIGV4cG9ydHMuWmFwID0gWmFwOwogICAgZXhwb3J0cy5aYXBPZmYgPSBaYXBPZmY7CiAgICBleHBvcnRzLlpvb21JbiA9IFpvb21JbjsKICAgIGV4cG9ydHMuWm9vbU91dCA9IFpvb21PdXQ7CiAgICBleHBvcnRzLmNyZWF0ZUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50MzsKICAgIGV4cG9ydHMuY3JlYXRlSWNvbnMgPSBjcmVhdGVJY29uczsKICAgIGV4cG9ydHMuaWNvbnMgPSBpY29uc0FuZEFsaWFzZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1pY29uL2RlZXMtaWNvbi5kZW1vLmpzCnZhciBsdWNpZGVJY29ucywgZGVtb0Z1bmMyOwp2YXIgaW5pdF9kZWVzX2ljb25fZGVtbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWljb24vZGVlcy1pY29uLmRlbW8uanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjYoKTsKICAgIGluaXRfZGVlc19pY29uKCk7CiAgICBsdWNpZGVJY29ucyA9IF9fdG9FU00ocmVxdWlyZV9sdWNpZGUoKSwgMSk7CiAgICBkZW1vRnVuYzIgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGZhSWNvbnMzID0gT2JqZWN0LmtleXMoaWNvbnM0LmZhKTsKICAgICAgY29uc29sZS5sb2coIkZpcnN0IGZldyBMdWNpZGUga2V5czoiLCBPYmplY3Qua2V5cyhsdWNpZGVJY29ucykuc2xpY2UoMCwgNSkpOwogICAgICBjb25zdCBsdWNpZGVJY29uc0xpc3QgPSBPYmplY3Qua2V5cyhsdWNpZGVJY29ucykuZmlsdGVyKChrZXkyKSA9PiB7CiAgICAgICAgY29uc3QgaXNVcHBlcmNhc2VGaXJzdCA9IGtleTJbMF0gPT09IGtleTJbMF0udG9VcHBlckNhc2UoKSAmJiBrZXkyWzBdICE9PSBrZXkyWzBdLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgY29uc3QgaXNGdW5jdGlvbjIgPSB0eXBlb2YgbHVjaWRlSWNvbnNba2V5Ml0gPT09ICJmdW5jdGlvbiI7CiAgICAgICAgY29uc3Qgbm90VXRpbGl0eSA9ICFbImNyZWF0ZUVsZW1lbnQiLCAiY3JlYXRlSWNvbnMiLCAiZGVmYXVsdCJdLmluY2x1ZGVzKGtleTIpOwogICAgICAgIHJldHVybiBpc0Z1bmN0aW9uMiAmJiBpc1VwcGVyY2FzZUZpcnN0ICYmIG5vdFV0aWxpdHk7CiAgICAgIH0pLm1hcCgocGFzY2FsTmFtZSkgPT4gewogICAgICAgIHJldHVybiBwYXNjYWxOYW1lLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgcGFzY2FsTmFtZS5zbGljZSgxKTsKICAgICAgfSk7CiAgICAgIGNvbnNvbGUubG9nKGBGb3VuZCAke2x1Y2lkZUljb25zTGlzdC5sZW5ndGh9IEx1Y2lkZSBpY29uc2ApOwogICAgICBpZiAobHVjaWRlSWNvbnNMaXN0Lmxlbmd0aCA9PT0gMCkgewogICAgICAgIGNvbnNvbGUubG9nKCJUcnlpbmcgYWx0ZXJuYXRpdmUgYXBwcm9hY2ggdG8gZmluZCBMdWNpZGUgaWNvbnMiKTsKICAgICAgICBpZiAobHVjaWRlSWNvbnMuaWNvbnMpIHsKICAgICAgICAgIGNvbnN0IGljb25Tb3VyY2UgPSBsdWNpZGVJY29ucy5pY29ucyB8fCB7fTsKICAgICAgICAgIGx1Y2lkZUljb25zTGlzdC5wdXNoKC4uLk9iamVjdC5rZXlzKGljb25Tb3VyY2UpKTsKICAgICAgICAgIGNvbnNvbGUubG9nKGBGb3VuZCAke2x1Y2lkZUljb25zTGlzdC5sZW5ndGh9IGljb25zIHZpYSBhbHRlcm5hdGl2ZSBtZXRob2RgKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3QgY29weUFsbEljb25OYW1lcyA9ICgpID0+IHsKICAgICAgICBjb25zdCBmYUljb25zTGlzdCA9IGZhSWNvbnMzLm1hcCgobmFtZSkgPT4gYGZhOiR7bmFtZX1gKTsKICAgICAgICBjb25zdCBsdWNpZGVJY29uc0xpc3RQcmVmaXhlZCA9IGx1Y2lkZUljb25zTGlzdC5tYXAoKG5hbWUpID0+IGBsdWNpZGU6JHtuYW1lfWApOwogICAgICAgIGNvbnN0IGFsbEljb25zID0gWy4uLmZhSWNvbnNMaXN0LCAuLi5sdWNpZGVJY29uc0xpc3RQcmVmaXhlZF07CiAgICAgICAgY29uc3QgdGV4dFRvQ29weSA9IGFsbEljb25zLmpvaW4oIlxuIik7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dFRvQ29weSkudGhlbigoKSA9PiB7CiAgICAgICAgICBjb25zdCBjdXJyZW50RXZlbnQgPSB3aW5kb3cuZXZlbnQ7CiAgICAgICAgICBjb25zdCBidXR0b24gPSBjdXJyZW50RXZlbnQuY3VycmVudFRhcmdldDsKICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVGV4dCA9IGJ1dHRvbi50ZXh0Q29udGVudDsKICAgICAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9IGBcdTI3MTMgQ29waWVkICR7YWxsSWNvbnMubGVuZ3RofSBpY29uIG5hbWVzIWA7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgYnV0dG9uLnRleHRDb250ZW50ID0gb3JpZ2luYWxUZXh0OwogICAgICAgICAgfSwgMmUzKTsKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgY29uc3Qgc2VhcmNoSWNvbnMgPSAoZXZlbnQpID0+IHsKICAgICAgICBjb25zdCBzZWFyY2hUZXJtID0gZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpOwogICAgICAgIGNvbnN0IGRlbW9Db250YWluZXIgPSBldmVudC50YXJnZXQuY2xvc2VzdCgiLmRlbW9Db250YWluZXIiKTsKICAgICAgICBjb25zdCBjb250YWluZXJzID0gZGVtb0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCIuaWNvbkNvbnRhaW5lciIpOwogICAgICAgIGNvbnRhaW5lcnMuZm9yRWFjaCgoY29udGFpbmVyKSA9PiB7CiAgICAgICAgICBjb25zdCBpY29uTmFtZSA9IGNvbnRhaW5lci5nZXRBdHRyaWJ1dGUoImRhdGEtbmFtZSIpOwogICAgICAgICAgaWYgKHNlYXJjaFRlcm0gPT09ICIiKSB7CiAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTsKICAgICAgICAgIH0gZWxzZSBpZiAoaWNvbk5hbWUgJiYgaWNvbk5hbWUuaW5jbHVkZXMoc2VhcmNoVGVybSkpIHsKICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGRlbW9Db250YWluZXIucXVlcnlTZWxlY3RvckFsbCgiLnNlY3Rpb24tY29udGFpbmVyIikuZm9yRWFjaCgoc2VjdGlvbikgPT4gewogICAgICAgICAgY29uc3QgdmlzaWJsZUljb25zID0gc2VjdGlvbi5xdWVyeVNlbGVjdG9yQWxsKCIuaWNvbkNvbnRhaW5lcjpub3QoLmhpZGRlbikiKS5sZW5ndGg7CiAgICAgICAgICBjb25zdCBjb3VudEVsZW1lbnQgPSBzZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoIi5pY29uLWNvdW50Iik7CiAgICAgICAgICBpZiAoY291bnRFbGVtZW50KSB7CiAgICAgICAgICAgIGNvbnN0IHRvdGFsSWNvbnNDb3VudCA9IHNlY3Rpb24uY2xhc3NMaXN0LmNvbnRhaW5zKCJmYS1zZWN0aW9uIikgPyBmYUljb25zMy5sZW5ndGggOiBsdWNpZGVJY29uc0xpc3QubGVuZ3RoOwogICAgICAgICAgICBjb3VudEVsZW1lbnQudGV4dENvbnRlbnQgPSB2aXNpYmxlSWNvbnMgPT09IHRvdGFsSWNvbnNDb3VudCA/IGAke3RvdGFsSWNvbnNDb3VudH0gaWNvbnNgIDogYCR7dmlzaWJsZUljb25zfSBvZiAke3RvdGFsSWNvbnNDb3VudH0gaWNvbnNgOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9OwogICAgICBjb25zdCBjb3B5SWNvbk5hbWUgPSAoaWNvbk5hbWVUb0NvcHksIHR5cGU1KSA9PiB7CiAgICAgICAgY29uc3QgdGV4dFRvQ29weSA9IGAke3R5cGU1fToke2ljb25OYW1lVG9Db3B5fWA7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dFRvQ29weSkudGhlbigoKSA9PiB7CiAgICAgICAgICBjb25zdCBjdXJyZW50RXZlbnQgPSB3aW5kb3cuZXZlbnQ7CiAgICAgICAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gY3VycmVudEV2ZW50LmN1cnJlbnRUYXJnZXQ7CiAgICAgICAgICBjb25zdCB0b29sdGlwID0gY3VycmVudFRhcmdldC5xdWVyeVNlbGVjdG9yKCIuY29weS10b29sdGlwIik7CiAgICAgICAgICBpZiAodG9vbHRpcCkgewogICAgICAgICAgICB0b29sdGlwLnRleHRDb250ZW50ID0gIkNvcGllZCEiOwogICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICB0b29sdGlwLnRleHRDb250ZW50ID0gIkNsaWNrIHRvIGNvcHkiOwogICAgICAgICAgICB9LCAyZTMpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9OwogICAgICByZXR1cm4gYjJgCiAgPHN0eWxlPgogICAgLmRlbW9Db250YWluZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICBiYWNrZ3JvdW5kOiAjMTExMTExOwogICAgICBwYWRkaW5nOiAyMHB4OwogICAgICBmb250LXNpemU6IDMwcHg7CiAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIFJvYm90bywgT3h5Z2VuLVNhbnMsIFVidW50dSwgQ2FudGFyZWxsLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmOwogICAgfQogICAgCiAgICAuc2VhcmNoLWNvbnRhaW5lciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBnYXA6IDEwcHg7CiAgICB9CiAgICAKICAgICNpY29uU2VhcmNoIHsKICAgICAgZmxleDogMTsKICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBiYWNrZ3JvdW5kOiAjMjIyOwogICAgICBjb2xvcjogI2ZmZjsKICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKICAgIH0KICAgIAogICAgI2ljb25TZWFyY2g6Zm9jdXMgewogICAgICBvdXRsaW5lOiBub25lOwogICAgICBib3JkZXItY29sb3I6ICNlNDAwMmI7CiAgICB9CiAgICAKICAgIC5jb3B5LWFsbC1idXR0b24gewogICAgICBwYWRkaW5nOiAxMnB4IDIwcHg7CiAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgYm9yZGVyOiBub25lOwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGJhY2tncm91bmQ6ICNlNDAwMmI7CiAgICAgIGNvbG9yOiAjZmZmOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgfQogICAgCiAgICAuY29weS1hbGwtYnV0dG9uOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZDogI2M0MDAxYjsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwogICAgfQogICAgCiAgICAuY29weS1hbGwtYnV0dG9uOmFjdGl2ZSB7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgIH0KICAgIAogICAgZGVlcy1pY29uIHsKICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICB9CgogICAgLmljb25Db250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBwYWRkaW5nOiAyMHB4IDE2cHggMHB4IDE2cHg7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzMzMzM7CiAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnM7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQogICAgCiAgICAuaWNvbkNvbnRhaW5lcjpob3ZlciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMjI7CiAgICB9CgogICAgLmljb25OYW1lIHsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIGNvbG9yOiAjY2NjOwogICAgICBiYWNrZ3JvdW5kOiAjMzMzMzMzOwogICAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgICAgbWFyZ2luLWxlZnQ6IC0xNnB4OwogICAgICBtYXJnaW4tcmlnaHQ6IC0xNnB4OwogICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgbWF4LXdpZHRoOiAxMjBweDsKICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7CiAgICB9CgogICAgLnNlY3Rpb24tdGl0bGUgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgbWFyZ2luOiAyMHB4IDA7CiAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzMzMzsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgfQogICAgCiAgICAuYXBpLW5vdGUgewogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGNvbG9yOiAjZTQwMDJiOwogICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICBwYWRkaW5nOiAxMHB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTQwMDJiOwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjI4LCAwLCA0MywgMC4xKTsKICAgIH0KICAgIAogICAgLmljb24tY291bnQgewogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGNvbG9yOiAjODg4OwogICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICBiYWNrZ3JvdW5kOiAjMjIyOwogICAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgICAgYm9yZGVyLXJhZGl1czogMjBweDsKICAgIH0KICAgIAogICAgLmljb25zLWdyaWQgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQogICAgCiAgICAuc2VjdGlvbi1jb250YWluZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDsKICAgIH0KICAgIAogICAgLmNvcHktdG9vbHRpcCB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgYmFja2dyb3VuZDogIzMzMzsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIHRvcDogLTMwcHg7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zczsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB9CiAgICAKICAgIC5pY29uQ29udGFpbmVyOmhvdmVyIC5jb3B5LXRvb2x0aXAgewogICAgICBvcGFjaXR5OiAxOwogICAgfQoKICAgIC5pY29uQ29udGFpbmVyOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsKICAgIH0KICAgIAogICAgLmhpZGRlbiB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW9Db250YWluZXIiPgogICAgPGRpdiBjbGFzcz0ic2VhcmNoLWNvbnRhaW5lciI+CiAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iaWNvblNlYXJjaCIgcGxhY2Vob2xkZXI9IlNlYXJjaCBpY29ucy4uLiIgQGlucHV0PSR7c2VhcmNoSWNvbnN9PgogICAgICA8YnV0dG9uIGNsYXNzPSJjb3B5LWFsbC1idXR0b24iIEBjbGljaz0ke2NvcHlBbGxJY29uTmFtZXN9PvCfk4sgQ29weSBBbGwgSWNvbiBOYW1lczwvYnV0dG9uPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9ImFwaS1ub3RlIj4KICAgICAgTmV3IEFQSTogVXNlIDxjb2RlPmljb249ImZhOmljb25OYW1lIjwvY29kZT4gb3IgPGNvZGU+aWNvbj0ibHVjaWRlOmljb25OYW1lIjwvY29kZT4gaW5zdGVhZCBvZiA8Y29kZT5pY29uRkE8L2NvZGU+LiAKICAgICAgQ2xpY2sgYW55IGljb24gdG8gY29weSBpdHMgbmV3IGZvcm1hdCB0byBjbGlwYm9hcmQuCiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1jb250YWluZXIgZmEtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPgogICAgICAgIEZvbnRBd2Vzb21lIEljb25zCiAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tY291bnQiPiR7ZmFJY29uczMubGVuZ3RofSBpY29uczwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Imljb25zLWdyaWQiPgogICAgICAgICR7ZmFJY29uczMubWFwKChpY29uTmFtZSkgPT4gewogICAgICAgIGNvbnN0IHByZWZpeGVkTmFtZSA9IGBmYToke2ljb25OYW1lfWA7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imljb25Db250YWluZXIgZmEtaWNvbiIgZGF0YS1uYW1lPSR7aWNvbk5hbWUudG9Mb3dlckNhc2UoKX0gQGNsaWNrPSR7KCkgPT4gY29weUljb25OYW1lKGljb25OYW1lLCAiZmEiKX0+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7cHJlZml4ZWROYW1lfSBpY29uU2l6ZT0iMjQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaWNvbk5hbWUiPmZhOiR7aWNvbk5hbWV9PC9kaXY+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29weS10b29sdGlwIj5DbGljayB0byBjb3B5PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWNvbnRhaW5lciBsdWNpZGUtc2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPgogICAgICAgIEx1Y2lkZSBJY29ucwogICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWNvdW50Ij4ke2x1Y2lkZUljb25zTGlzdC5sZW5ndGh9IGljb25zPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaWNvbnMtZ3JpZCI+CiAgICAgICAgJHtsdWNpZGVJY29uc0xpc3QubWFwKChpY29uTmFtZSkgPT4gewogICAgICAgIGNvbnN0IHByZWZpeGVkTmFtZSA9IGBsdWNpZGU6JHtpY29uTmFtZX1gOwogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uQ29udGFpbmVyIGx1Y2lkZS1pY29uIiBkYXRhLW5hbWU9JHtpY29uTmFtZS50b0xvd2VyQ2FzZSgpfSBAY2xpY2s9JHsoKSA9PiBjb3B5SWNvbk5hbWUoaWNvbk5hbWUsICJsdWNpZGUiKX0+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7cHJlZml4ZWROYW1lfSBpY29uU2l6ZT0iMjQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaWNvbk5hbWUiPmx1Y2lkZToke2ljb25OYW1lfTwvZGl2PgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvcHktdG9vbHRpcCI+Q2xpY2sgdG8gY29weTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYDsKICAgICAgfSl9CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CiAgYDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1pY29uL2RlZXMtaWNvbi5qcwpmdW5jdGlvbiBsaW1pdENhY2hlU2l6ZSgpIHsKICBpZiAoaWNvbkNhY2hlLnNpemUgPiBNQVhfQ0FDSEVfU0laRSkgewogICAgY29uc3Qga2V5c1RvRGVsZXRlID0gQXJyYXkuZnJvbShpY29uQ2FjaGUua2V5cygpKS5zbGljZSgwLCBNQVhfQ0FDSEVfU0laRSAvIDUpOwogICAga2V5c1RvRGVsZXRlLmZvckVhY2goKGtleTIpID0+IGljb25DYWNoZS5kZWxldGUoa2V5MikpOwogIH0KfQp2YXIgbHVjaWRlSWNvbnMyLCBpbXBvcnRfbHVjaWRlLCBfX2VzRGVjb3JhdGU0LCBfX3J1bkluaXRpYWxpemVyczUsIGZhSWNvbnMyLCBpY29uczQsIGljb25DYWNoZSwgTUFYX0NBQ0hFX1NJWkUsIERlZXNJY29uOwp2YXIgaW5pdF9kZWVzX2ljb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1pY29uL2RlZXMtaWNvbi5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyNigpOwogICAgaW5pdF9kaXN0X3RzMjUoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIGluaXRfZm9udGF3ZXNvbWVfc3ZnX2NvcmUoKTsKICAgIGluaXRfZnJlZV9icmFuZHNfc3ZnX2ljb25zKCk7CiAgICBpbml0X2ZyZWVfcmVndWxhcl9zdmdfaWNvbnMoKTsKICAgIGluaXRfZnJlZV9zb2xpZF9zdmdfaWNvbnMoKTsKICAgIGluaXRfZGVlc19pY29uX2RlbW8oKTsKICAgIGx1Y2lkZUljb25zMiA9IF9fdG9FU00ocmVxdWlyZV9sdWNpZGUoKSwgMSk7CiAgICBpbXBvcnRfbHVjaWRlID0gX190b0VTTShyZXF1aXJlX2x1Y2lkZSgpLCAxKTsKICAgIF9fZXNEZWNvcmF0ZTQgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM1ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICAgICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogICAgICB9CiAgICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKICAgIH07CiAgICBmYUljb25zMiA9IHsKICAgICAgLy8gbm9ybWFsCiAgICAgIGFycm93UmlnaHQ6IGZhQXJyb3dSaWdodCwKICAgICAgYXJyb3dVcFJpZ2h0RnJvbVNxdWFyZTogZmFBcnJvd1VwUmlnaHRGcm9tU3F1YXJlLAogICAgICBiZWxsOiBmYUJlbGwyLAogICAgICBidWc6IGZhQnVnLAogICAgICBidWlsZGluZzogZmFCdWlsZGluZzIsCiAgICAgIGNhcmV0TGVmdDogZmFDYXJldExlZnQsCiAgICAgIGNhcmV0UmlnaHQ6IGZhQ2FyZXRSaWdodCwKICAgICAgY2hlY2s6IGZhQ2hlY2ssCiAgICAgIGNpcmNsZUluZm86IGZhQ2lyY2xlSW5mbywKICAgICAgY2lyY2xlQ2hlY2s6IGZhQ2lyY2xlQ2hlY2ssCiAgICAgIGNpcmNsZUNoZWNrU29saWQ6IGZhQ2lyY2xlQ2hlY2syLAogICAgICBjaXJjbGVYbWFyazogZmFDaXJjbGVYbWFyaywKICAgICAgY2lyY2xlWG1hcmtTb2xpZDogZmFDaXJjbGVYbWFyazIsCiAgICAgIGNsb2NrUm90YXRlTGVmdDogZmFDbG9ja1JvdGF0ZUxlZnQsCiAgICAgIGNvcHk6IGZhQ29weSwKICAgICAgY29weVNvbGlkOiBmYUNvcHkyLAogICAgICBkZXNrdG9wOiBmYURlc2t0b3AsCiAgICAgIGV5ZTogZmFFeWUyLAogICAgICBleWVTbGFzaDogZmFFeWVTbGFzaDIsCiAgICAgIGZpbGVJbnZvaWNlOiBmYUZpbGVJbnZvaWNlLAogICAgICBmaWxlSW52b2ljZURvbGxlcjogZmFGaWxlSW52b2ljZURvbGxhciwKICAgICAgZ2VhcjogZmFHZWFyLAogICAgICBncmlwOiBmYUdyaXAsCiAgICAgIG1hZ25pZnlpbmdHbGFzczogZmFNYWduaWZ5aW5nR2xhc3MsCiAgICAgIG1lc3NhZ2U6IGZhTWVzc2FnZSwKICAgICAgbWVzc2FnZVNvbGlkOiBmYU1lc3NhZ2UyLAogICAgICBtb25leUNoZWNrRG9sbGFyOiBmYU1vbmV5Q2hlY2tEb2xsYXIsCiAgICAgIG11Z0hvdDogZmFNdWdIb3QsCiAgICAgIG1pbnVzOiBmYU1pbnVzLAogICAgICBuZXR3b3JrV2lyZWQ6IGZhTmV0d29ya1dpcmVkLAogICAgICBwYXBlcmNsaXA6IGZhUGFwZXJjbGlwLAogICAgICBwYXN0ZTogZmFQYXN0ZSwKICAgICAgcGFzdGVTb2xpZDogZmFQYXN0ZTIsCiAgICAgIHBlblRvU3F1YXJlOiBmYVBlblRvU3F1YXJlMiwKICAgICAgcGx1czogZmFQbHVzLAogICAgICByZWNlaXB0OiBmYVJlY2VpcHQsCiAgICAgIHJzczogZmFSc3MsCiAgICAgIHNoYXJlOiBmYVNoYXJlLAogICAgICBzdW46IGZhU3VuLAogICAgICBzdW5Tb2xpZDogZmFTdW4yLAogICAgICB0ZXJtaW5hbDogZmFUZXJtaW5hbCwKICAgICAgdHJhc2g6IGZhVHJhc2gsCiAgICAgIHRyYXNoU29saWQ6IGZhVHJhc2gsCiAgICAgIHRyYXNoQ2FuOiBmYVRyYXNoQ2FuLAogICAgICB0cmFzaENhblNvbGlkOiBmYVRyYXNoQ2FuMiwKICAgICAgdXNlcnM6IGZhVXNlcnMsCiAgICAgIHdhbGxldDogZmFXYWxsZXQsCiAgICAgIHhtYXJrOiBmYVhtYXJrLAogICAgICAvLyBicmFuZHMKICAgICAgZmFjZWJvb2s6IGZhRmFjZWJvb2ssCiAgICAgIGdvb2dsZTogZmFHb29nbGUsCiAgICAgIGluc3RhZ3JhbTogZmFJbnN0YWdyYW0sCiAgICAgIGxpbmtlZGluOiBmYUxpbmtlZGluLAogICAgICBtZWRpdW06IGZhTWVkaXVtLAogICAgICBzbGFjazogZmFTbGFja0hhc2gsCiAgICAgIHRpa3RvazogZmFUaWt0b2ssCiAgICAgIHR3aXR0ZXI6IGZhVHdpdHRlcgogICAgfTsKICAgIGljb25zNCA9IHsKICAgICAgZmE6IGZhSWNvbnMyCiAgICB9OwogICAgaWNvbkNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgIE1BWF9DQUNIRV9TSVpFID0gNTAwOwogICAgRGVlc0ljb24gPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pY29uIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9pY29uRkFfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pY29uRkFfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaWNvbkZBX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaWNvbl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2ljb25faW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaWNvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2ljb25TaXplX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaWNvblNpemVfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaWNvblNpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jb2xvcl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2NvbG9yX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NvbG9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc3Ryb2tlV2lkdGhfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zdHJva2VXaWR0aF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zdHJva2VXaWR0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0ljb24yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfaWNvbkZBX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgICAgIGNvbnZlcnRlcjogewogICAgICAgICAgICAgIC8vIENvbnZlcnQgYXR0cmlidXRlIHN0cmluZyB0byBwcm9wZXJ0eSAoZm9yIHJlZmxlY3RlZCBhdHRyaWJ1dGVzKQogICAgICAgICAgICAgIGZyb21BdHRyaWJ1dGU6ICh2YWx1ZTIpID0+IHZhbHVlMiwKICAgICAgICAgICAgICAvLyBDb252ZXJ0IHByb3BlcnR5IHRvIGF0dHJpYnV0ZSAoZm9yIHJlZmxlY3Rpb24pCiAgICAgICAgICAgICAgdG9BdHRyaWJ1dGU6ICh2YWx1ZTIpID0+IHZhbHVlMgogICAgICAgICAgICB9CiAgICAgICAgICB9KV07CiAgICAgICAgICBfaWNvbl9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgICAgICBjb252ZXJ0ZXI6IHsKICAgICAgICAgICAgICBmcm9tQXR0cmlidXRlOiAodmFsdWUyKSA9PiB2YWx1ZTIsCiAgICAgICAgICAgICAgdG9BdHRyaWJ1dGU6ICh2YWx1ZTIpID0+IHZhbHVlMgogICAgICAgICAgICB9CiAgICAgICAgICB9KV07CiAgICAgICAgICBfaWNvblNpemVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfY29sb3JfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgICAgICBfc3Ryb2tlV2lkdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU0KHRoaXMsIG51bGwsIF9pY29uRkFfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvbkZBIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpY29uRkEiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaWNvbkZBLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaWNvbkZBID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pY29uRkFfaW5pdGlhbGl6ZXJzLCBfaWNvbkZBX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQodGhpcywgbnVsbCwgX2ljb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaWNvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pY29uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaWNvbiA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaWNvbl9pbml0aWFsaXplcnMsIF9pY29uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQodGhpcywgbnVsbCwgX2ljb25TaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImljb25TaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpY29uU2l6ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pY29uU2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmljb25TaXplID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pY29uU2l6ZV9pbml0aWFsaXplcnMsIF9pY29uU2l6ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0KHRoaXMsIG51bGwsIF9jb2xvcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2xvciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sb3IiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29sb3IsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5jb2xvciA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29sb3JfaW5pdGlhbGl6ZXJzLCBfY29sb3JfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNCh0aGlzLCBudWxsLCBfc3Ryb2tlV2lkdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3Ryb2tlV2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInN0cm9rZVdpZHRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0cm9rZVdpZHRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc3Ryb2tlV2lkdGggPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0cm9rZVdpZHRoX2luaXRpYWxpemVycywgX3N0cm9rZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc0ljb24yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMyOwogICAgICAgICNpY29uRkFfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNSh0aGlzLCBfaWNvbkZBX2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgICAgICAvKioKICAgICAgICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGBpY29uYCBwcm9wZXJ0eSBpbnN0ZWFkIHdpdGggZm9ybWF0ICJmYTppY29uTmFtZSIgb3IgImx1Y2lkZTppY29uTmFtZSIKICAgICAgICAgKi8KICAgICAgICBnZXQgaWNvbkZBKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2ljb25GQV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaWNvbkZBKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaWNvbkZBX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNpY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9pY29uRkFfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUodGhpcywgX2ljb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgcHJlZmVycmVkIGljb24gcHJvcGVydHkuIFVzZSBmb3JtYXQgImZhOmljb25OYW1lIiBvciAibHVjaWRlOmljb25OYW1lIgogICAgICAgICAqIEV4YW1wbGVzOiAiZmE6Y2hlY2siLCAibHVjaWRlOm1lbnUiCiAgICAgICAgICovCiAgICAgICAgZ2V0IGljb24oKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaWNvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaWNvbih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2ljb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2ljb25TaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9pY29uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9pY29uU2l6ZV9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgICAgIGdldCBpY29uU2l6ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpY29uU2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaWNvblNpemUodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpY29uU2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjY29sb3JfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUodGhpcywgX2ljb25TaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9jb2xvcl9pbml0aWFsaXplcnMsICJjdXJyZW50Q29sb3IiKSk7CiAgICAgICAgZ2V0IGNvbG9yKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2NvbG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjb2xvcih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2NvbG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzdHJva2VXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNSh0aGlzLCBfY29sb3JfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUodGhpcywgX3N0cm9rZVdpZHRoX2luaXRpYWxpemVycywgMikpOwogICAgICAgIGdldCBzdHJva2VXaWR0aCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzdHJva2VXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc3Ryb2tlV2lkdGgodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzdHJva2VXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAvLyBGb3IgdHJhY2tpbmcgd2hlbiB3ZSBuZWVkIHRvIHJlLXJlbmRlcgogICAgICAgIGxhc3RJY29uID0gKF9fcnVuSW5pdGlhbGl6ZXJzNSh0aGlzLCBfc3Ryb2tlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgICAgICBsYXN0SWNvblNpemUgPSBudWxsOwogICAgICAgIGxhc3RDb2xvciA9IG51bGw7CiAgICAgICAgbGFzdFN0cm9rZVdpZHRoID0gbnVsbDsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICBkb210b29sc19lbGVtZW50YmFzaWNfZXhwb3J0cy5zZXR1cCgpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXRzIHRoZSBlZmZlY3RpdmUgaWNvbiB2YWx1ZSwgc3VwcG9ydGluZyBib3RoIHRoZSBuZXcgYGljb25gIHByb3BlcnR5CiAgICAgICAgICogYW5kIHRoZSBsZWdhY3kgYGljb25GQWAgcHJvcGVydHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCiAgICAgICAgICogUHJlZmVycyBgaWNvbmAgaWYgYm90aCBhcmUgc2V0LgogICAgICAgICAqLwogICAgICAgIGdldEVmZmVjdGl2ZUljb24oKSB7CiAgICAgICAgICBpZiAodGhpcy5pY29uKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmljb247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5pY29uRkEpIHsKICAgICAgICAgICAgaWYgKHRoaXMuaWNvbkZBLnN0YXJ0c1dpdGgoImx1Y2lkZToiKSkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLmljb25GQTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gYGZhOiR7dGhpcy5pY29uRkF9YDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBQYXJzZXMgYW4gaWNvbiBzdHJpbmcgaW50byBpdHMgdHlwZSBhbmQgbmFtZSBwYXJ0cwogICAgICAgICAqIEBwYXJhbSBpY29uU3RyIFRoZSBpY29uIHN0cmluZyBpbiBmb3JtYXQgInR5cGU6bmFtZSIKICAgICAgICAgKiBAcmV0dXJucyBPYmplY3Qgd2l0aCB0eXBlIGFuZCBuYW1lIHByb3BlcnRpZXMKICAgICAgICAgKi8KICAgICAgICBwYXJzZUljb25TdHJpbmcoaWNvblN0cikgewogICAgICAgICAgY29uc3QgbG93ZXJTdHIgPSBpY29uU3RyLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBpZiAobG93ZXJTdHIuc3RhcnRzV2l0aCgiZmE6IikpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICB0eXBlOiAiZmEiLAogICAgICAgICAgICAgIG5hbWU6IGljb25TdHIuc3Vic3RyaW5nKDMpCiAgICAgICAgICAgICAgLy8gUmVtb3ZlICdmYTonIHByZWZpeAogICAgICAgICAgICB9OwogICAgICAgICAgfSBlbHNlIGlmIChsb3dlclN0ci5zdGFydHNXaXRoKCJsdWNpZGU6IikpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICB0eXBlOiAibHVjaWRlIiwKICAgICAgICAgICAgICBuYW1lOiBpY29uU3RyLnN1YnN0cmluZyg3KQogICAgICAgICAgICAgIC8vIFJlbW92ZSAnbHVjaWRlOicgcHJlZml4CiAgICAgICAgICAgIH07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHR5cGU6ICJsdWNpZGUiLAogICAgICAgICAgICAgIG5hbWU6IGljb25TdHIKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmVuZGVyTHVjaWRlSWNvbihpY29uTmFtZSkgewogICAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBgbHVjaWRlOiR7aWNvbk5hbWV9OiR7dGhpcy5pY29uU2l6ZX06JHt0aGlzLmNvbG9yfToke3RoaXMuc3Ryb2tlV2lkdGh9YDsKICAgICAgICAgIGlmIChpY29uQ2FjaGUuaGFzKGNhY2hlS2V5KSkgewogICAgICAgICAgICByZXR1cm4gaWNvbkNhY2hlLmdldChjYWNoZUtleSkgfHwgIiI7CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBwYXNjYWxDYXNlTmFtZSA9IGljb25OYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgaWNvbk5hbWUuc2xpY2UoMSk7CiAgICAgICAgICAgIGlmICghbHVjaWRlSWNvbnMyW3Bhc2NhbENhc2VOYW1lXSkgewogICAgICAgICAgICAgIGNvbnNvbGUud2FybihgTHVjaWRlIGljb24gJyR7cGFzY2FsQ2FzZU5hbWV9JyBub3QgZm91bmQgaW4gbHVjaWRlSWNvbnMgb2JqZWN0YCk7CiAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnN0IHN2Z0VsZW1lbnQgPSAoMCwgaW1wb3J0X2x1Y2lkZS5jcmVhdGVFbGVtZW50KShsdWNpZGVJY29uczJbcGFzY2FsQ2FzZU5hbWVdLCB7CiAgICAgICAgICAgICAgY29sb3I6IHRoaXMuY29sb3IsCiAgICAgICAgICAgICAgc2l6ZTogdGhpcy5pY29uU2l6ZSwKICAgICAgICAgICAgICBzdHJva2VXaWR0aDogdGhpcy5zdHJva2VXaWR0aAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKCFzdmdFbGVtZW50KSB7CiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBjcmVhdGVFbGVtZW50IHJldHVybmVkIGVtcHR5IHJlc3VsdCBmb3IgJHtwYXNjYWxDYXNlTmFtZX1gKTsKICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3ZnRWxlbWVudC5vdXRlckhUTUw7CiAgICAgICAgICAgIGljb25DYWNoZS5zZXQoY2FjaGVLZXksIHJlc3VsdCk7CiAgICAgICAgICAgIGxpbWl0Q2FjaGVTaXplKCk7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciByZW5kZXJpbmcgTHVjaWRlIGljb24gJHtpY29uTmFtZX06YCwgZXJyb3IpOwogICAgICAgICAgICByZXR1cm4gYDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iJHt0aGlzLmljb25TaXplfSIgaGVpZ2h0PSIke3RoaXMuaWNvblNpemV9IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iJHt0aGlzLmNvbG9yfSIgc3Ryb2tlLXdpZHRoPSIke3RoaXMuc3Ryb2tlV2lkdGh9IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogICAgICAgIDx0ZXh0IHg9IjUwJSIgeT0iNTAlIiBmb250LXNpemU9IjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIGZpbGw9IiR7dGhpcy5jb2xvcn0iPiR7aWNvbk5hbWV9PC90ZXh0PgogICAgICA8L3N2Zz5gOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLyogSW1wcm92ZSByZW5kZXJpbmcgcGVyZm9ybWFuY2UgKi8KICAgICAgI2ljb25Db250YWluZXIgc3ZnIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsgLyogSGVscHMgd2l0aCBhbmltYXRpb25zICovCiAgICAgICAgY29udGFpbjogc3RyaWN0OyAvKiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gKi8KICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICAke2RvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnN0eWxlc30KICAgICAgPHN0eWxlPgogICAgICAgICNpY29uQ29udGFpbmVyIHsKICAgICAgICAgIHdpZHRoOiAke3RoaXMuaWNvblNpemV9cHg7CiAgICAgICAgICBoZWlnaHQ6ICR7dGhpcy5pY29uU2l6ZX1weDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgaWQ9Imljb25Db250YWluZXIiPjwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgdXBkYXRlZCgpIHsKICAgICAgICAgIGlmICghdGhpcy5pY29uU2l6ZSkgewogICAgICAgICAgICB0aGlzLmljb25TaXplID0gcGFyc2VJbnQoZ2xvYmFsVGhpcy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmZvbnRTaXplLnJlcGxhY2UoL1xEL2csICIiKSk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBlZmZlY3RpdmVJY29uID0gdGhpcy5nZXRFZmZlY3RpdmVJY29uKCk7CiAgICAgICAgICBpZiAodGhpcy5sYXN0SWNvbiA9PT0gZWZmZWN0aXZlSWNvbiAmJiB0aGlzLmxhc3RJY29uU2l6ZSA9PT0gdGhpcy5pY29uU2l6ZSAmJiB0aGlzLmxhc3RDb2xvciA9PT0gdGhpcy5jb2xvciAmJiB0aGlzLmxhc3RTdHJva2VXaWR0aCA9PT0gdGhpcy5zdHJva2VXaWR0aCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmxhc3RJY29uID0gZWZmZWN0aXZlSWNvbjsKICAgICAgICAgIHRoaXMubGFzdEljb25TaXplID0gdGhpcy5pY29uU2l6ZTsKICAgICAgICAgIHRoaXMubGFzdENvbG9yID0gdGhpcy5jb2xvcjsKICAgICAgICAgIHRoaXMubGFzdFN0cm9rZVdpZHRoID0gdGhpcy5zdHJva2VXaWR0aDsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiI2ljb25Db250YWluZXIiKTsKICAgICAgICAgIGlmICghY29udGFpbmVyIHx8ICFlZmZlY3RpdmVJY29uKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCB7IHR5cGU6IHR5cGU1LCBuYW1lIH0gPSB0aGlzLnBhcnNlSWNvblN0cmluZyhlZmZlY3RpdmVJY29uKTsKICAgICAgICAgICAgaWYgKHR5cGU1ID09PSAibHVjaWRlIikgewogICAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgY29uc3QgcGFzY2FsQ2FzZU5hbWUgPSBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKTsKICAgICAgICAgICAgICAgIGlmIChsdWNpZGVJY29uczJbcGFzY2FsQ2FzZU5hbWVdKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHN2Z0VsZW1lbnQgPSAoMCwgaW1wb3J0X2x1Y2lkZS5jcmVhdGVFbGVtZW50KShsdWNpZGVJY29uczJbcGFzY2FsQ2FzZU5hbWVdLCB7CiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMuY29sb3IsCiAgICAgICAgICAgICAgICAgICAgc2l6ZTogdGhpcy5pY29uU2l6ZSwKICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogdGhpcy5zdHJva2VXaWR0aAogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgaWYgKHN2Z0VsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc3ZnRWxlbWVudCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBjcmVhdGUgZWxlbWVudCBmb3IgJHtwYXNjYWxDYXNlTmFtZX1gKTsKICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgcmVuZGVyaW5nIEx1Y2lkZSBpY29uOmAsIGVycm9yKTsKICAgICAgICAgICAgICAgIGNvbnN0IGljb25IdG1sID0gdGhpcy5yZW5kZXJMdWNpZGVJY29uKG5hbWUpOwogICAgICAgICAgICAgICAgaWYgKGljb25IdG1sKSB7CiAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBpY29uSHRtbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29uc3QgZmFJY29uID0gaWNvbnM0LmZhW25hbWVdOwogICAgICAgICAgICAgIGlmIChmYUljb24pIHsKICAgICAgICAgICAgICAgIGNvbnN0IGljb25IdG1sID0gaWNvbjIoZmFJY29uKS5odG1sWzBdOwogICAgICAgICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGljb25IdG1sOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEZvbnRBd2Vzb21lIGljb24gbm90IGZvdW5kOiAke25hbWV9YCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciB1cGRhdGluZyBpY29uICR7ZWZmZWN0aXZlSWNvbn06YCwgZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBDbGVhbiB1cCByZXNvdXJjZXMgd2hlbiBlbGVtZW50IGlzIHJlbW92ZWQKICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICB0aGlzLmxhc3RJY29uID0gbnVsbDsKICAgICAgICAgIHRoaXMubGFzdEljb25TaXplID0gbnVsbDsKICAgICAgICAgIHRoaXMubGFzdENvbG9yID0gbnVsbDsKICAgICAgICAgIHRoaXMubGFzdFN0cm9rZVdpZHRoID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gRGVlc0ljb24yID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvc2VydmljZXMvdmVyc2lvbnMuanMKdmFyIENETl9WRVJTSU9OUywgQ0ROX0JBU0U7CnZhciBpbml0X3ZlcnNpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL3NlcnZpY2VzL3ZlcnNpb25zLmpzIigpIHsKICAgIENETl9WRVJTSU9OUyA9IHsKICAgICAgeHRlcm06ICI1LjMuMCIsCiAgICAgIHh0ZXJtQWRkb25GaXQ6ICIwLjguMCIsCiAgICAgIHh0ZXJtQWRkb25TZWFyY2g6ICIwLjEzLjAiLAogICAgICBoaWdobGlnaHRKczogIjExLjExLjEiLAogICAgICBhcGV4Y2hhcnRzOiAiNS4zLjYiLAogICAgICB0aXB0YXA6ICIyLjIzLjAiLAogICAgICBmb250YXdlc29tZTogIjcuMS4wIgogICAgfTsKICAgIENETl9CQVNFID0gImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0iOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL3NlcnZpY2VzL0RlZXNTZXJ2aWNlTGliTG9hZGVyLmpzCnZhciBEZWVzU2VydmljZUxpYkxvYWRlcjsKdmFyIGluaXRfRGVlc1NlcnZpY2VMaWJMb2FkZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvc2VydmljZXMvRGVlc1NlcnZpY2VMaWJMb2FkZXIuanMiKCkgewogICAgaW5pdF92ZXJzaW9ucygpOwogICAgRGVlc1NlcnZpY2VMaWJMb2FkZXIgPSBjbGFzcyBfRGVlc1NlcnZpY2VMaWJMb2FkZXIgewogICAgICBzdGF0aWMgaW5zdGFuY2U7CiAgICAgIC8vIENhY2hlZCBsaWJyYXJ5IHJlZmVyZW5jZXMKICAgICAgeHRlcm1MaWIgPSBudWxsOwogICAgICB4dGVybUZpdEFkZG9uTGliID0gbnVsbDsKICAgICAgeHRlcm1TZWFyY2hBZGRvbkxpYiA9IG51bGw7CiAgICAgIGhpZ2hsaWdodEpzTGliID0gbnVsbDsKICAgICAgYXBleENoYXJ0c0xpYiA9IG51bGw7CiAgICAgIHRpcHRhcExpYiA9IG51bGw7CiAgICAgIC8vIExvYWRpbmcgcHJvbWlzZXMgdG8gcHJldmVudCBkdXBsaWNhdGUgY29uY3VycmVudCBsb2FkcwogICAgICB4dGVybUxvYWRpbmdQcm9taXNlID0gbnVsbDsKICAgICAgeHRlcm1GaXRBZGRvbkxvYWRpbmdQcm9taXNlID0gbnVsbDsKICAgICAgeHRlcm1TZWFyY2hBZGRvbkxvYWRpbmdQcm9taXNlID0gbnVsbDsKICAgICAgaGlnaGxpZ2h0SnNMb2FkaW5nUHJvbWlzZSA9IG51bGw7CiAgICAgIGFwZXhDaGFydHNMb2FkaW5nUHJvbWlzZSA9IG51bGw7CiAgICAgIHRpcHRhcExvYWRpbmdQcm9taXNlID0gbnVsbDsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIERlZXNTZXJ2aWNlTGliTG9hZGVyCiAgICAgICAqLwogICAgICBzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7CiAgICAgICAgaWYgKCFfRGVlc1NlcnZpY2VMaWJMb2FkZXIuaW5zdGFuY2UpIHsKICAgICAgICAgIF9EZWVzU2VydmljZUxpYkxvYWRlci5pbnN0YW5jZSA9IG5ldyBfRGVlc1NlcnZpY2VMaWJMb2FkZXIoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9EZWVzU2VydmljZUxpYkxvYWRlci5pbnN0YW5jZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTG9hZCB4dGVybSB0ZXJtaW5hbCBlbXVsYXRvciBmcm9tIENETgogICAgICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB4dGVybSBtb2R1bGUgd2l0aCBUZXJtaW5hbCBjbGFzcwogICAgICAgKi8KICAgICAgYXN5bmMgbG9hZFh0ZXJtKCkgewogICAgICAgIGlmICh0aGlzLnh0ZXJtTGliKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy54dGVybUxpYjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMueHRlcm1Mb2FkaW5nUHJvbWlzZSkgewogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1Mb2FkaW5nUHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgdGhpcy54dGVybUxvYWRpbmdQcm9taXNlID0gKGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHVybCA9IGAke0NETl9CQVNFfS94dGVybUAke0NETl9WRVJTSU9OUy54dGVybX0vK2VzbWA7CiAgICAgICAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoCiAgICAgICAgICAgIC8qIEB2aXRlLWlnbm9yZSAqLwogICAgICAgICAgICB1cmwKICAgICAgICAgICk7CiAgICAgICAgICBhd2FpdCB0aGlzLmluamVjdFh0ZXJtU3R5bGVzKCk7CiAgICAgICAgICB0aGlzLnh0ZXJtTGliID0gewogICAgICAgICAgICBUZXJtaW5hbDogbW9kdWxlLlRlcm1pbmFsCiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1MaWI7CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gdGhpcy54dGVybUxvYWRpbmdQcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBMb2FkIHh0ZXJtLWFkZG9uLWZpdCBmcm9tIENETgogICAgICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBGaXRBZGRvbiBjbGFzcwogICAgICAgKi8KICAgICAgYXN5bmMgbG9hZFh0ZXJtRml0QWRkb24oKSB7CiAgICAgICAgaWYgKHRoaXMueHRlcm1GaXRBZGRvbkxpYikgewogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1GaXRBZGRvbkxpYjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMueHRlcm1GaXRBZGRvbkxvYWRpbmdQcm9taXNlKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy54dGVybUZpdEFkZG9uTG9hZGluZ1Byb21pc2U7CiAgICAgICAgfQogICAgICAgIHRoaXMueHRlcm1GaXRBZGRvbkxvYWRpbmdQcm9taXNlID0gKGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHVybCA9IGAke0NETl9CQVNFfS94dGVybS1hZGRvbi1maXRAJHtDRE5fVkVSU0lPTlMueHRlcm1BZGRvbkZpdH0vK2VzbWA7CiAgICAgICAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoCiAgICAgICAgICAgIC8qIEB2aXRlLWlnbm9yZSAqLwogICAgICAgICAgICB1cmwKICAgICAgICAgICk7CiAgICAgICAgICB0aGlzLnh0ZXJtRml0QWRkb25MaWIgPSB7CiAgICAgICAgICAgIEZpdEFkZG9uOiBtb2R1bGUuRml0QWRkb24KICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gdGhpcy54dGVybUZpdEFkZG9uTGliOwogICAgICAgIH0pKCk7CiAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1GaXRBZGRvbkxvYWRpbmdQcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBMb2FkIHh0ZXJtLWFkZG9uLXNlYXJjaCBmcm9tIENETgogICAgICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBTZWFyY2hBZGRvbiBjbGFzcwogICAgICAgKi8KICAgICAgYXN5bmMgbG9hZFh0ZXJtU2VhcmNoQWRkb24oKSB7CiAgICAgICAgaWYgKHRoaXMueHRlcm1TZWFyY2hBZGRvbkxpYikgewogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1TZWFyY2hBZGRvbkxpYjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMueHRlcm1TZWFyY2hBZGRvbkxvYWRpbmdQcm9taXNlKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy54dGVybVNlYXJjaEFkZG9uTG9hZGluZ1Byb21pc2U7CiAgICAgICAgfQogICAgICAgIHRoaXMueHRlcm1TZWFyY2hBZGRvbkxvYWRpbmdQcm9taXNlID0gKGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHVybCA9IGAke0NETl9CQVNFfS94dGVybS1hZGRvbi1zZWFyY2hAJHtDRE5fVkVSU0lPTlMueHRlcm1BZGRvblNlYXJjaH0vK2VzbWA7CiAgICAgICAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoCiAgICAgICAgICAgIC8qIEB2aXRlLWlnbm9yZSAqLwogICAgICAgICAgICB1cmwKICAgICAgICAgICk7CiAgICAgICAgICB0aGlzLnh0ZXJtU2VhcmNoQWRkb25MaWIgPSB7CiAgICAgICAgICAgIFNlYXJjaEFkZG9uOiBtb2R1bGUuU2VhcmNoQWRkb24KICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gdGhpcy54dGVybVNlYXJjaEFkZG9uTGliOwogICAgICAgIH0pKCk7CiAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1TZWFyY2hBZGRvbkxvYWRpbmdQcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJbmplY3QgeHRlcm0gQ1NTIHN0eWxlcyBpbnRvIHRoZSBkb2N1bWVudCBoZWFkCiAgICAgICAqLwogICAgICBhc3luYyBpbmplY3RYdGVybVN0eWxlcygpIHsKICAgICAgICBjb25zdCBzdHlsZUlkID0gInh0ZXJtLWNkbi1zdHlsZXMiOwogICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzdHlsZUlkKSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCBjc3NVcmwgPSBgJHtDRE5fQkFTRX0veHRlcm1AJHtDRE5fVkVSU0lPTlMueHRlcm19L2Nzcy94dGVybS5jc3NgOwogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goY3NzVXJsKTsKICAgICAgICBjb25zdCBjc3NUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgICAgICBzdHlsZS5pZCA9IHN0eWxlSWQ7CiAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBjc3NUZXh0OwogICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBMb2FkIGhpZ2hsaWdodC5qcyBzeW50YXggaGlnaGxpZ2h0ZXIgZnJvbSBDRE4KICAgICAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gaGlnaGxpZ2h0LmpzIEFQSQogICAgICAgKi8KICAgICAgYXN5bmMgbG9hZEhpZ2hsaWdodEpzKCkgewogICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodEpzTGliKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRKc0xpYjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0SnNMb2FkaW5nUHJvbWlzZSkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SnNMb2FkaW5nUHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgdGhpcy5oaWdobGlnaHRKc0xvYWRpbmdQcm9taXNlID0gKGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHVybCA9IGAke0NETl9CQVNFfS9oaWdobGlnaHQuanNAJHtDRE5fVkVSU0lPTlMuaGlnaGxpZ2h0SnN9Lytlc21gOwogICAgICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KAogICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgdXJsCiAgICAgICAgICApOwogICAgICAgICAgdGhpcy5oaWdobGlnaHRKc0xpYiA9IG1vZHVsZS5kZWZhdWx0OwogICAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SnNMaWI7CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRKc0xvYWRpbmdQcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBMb2FkIEFwZXhDaGFydHMgY2hhcnRpbmcgbGlicmFyeSBmcm9tIENETgogICAgICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBBcGV4Q2hhcnRzIGNvbnN0cnVjdG9yCiAgICAgICAqLwogICAgICBhc3luYyBsb2FkQXBleENoYXJ0cygpIHsKICAgICAgICBpZiAodGhpcy5hcGV4Q2hhcnRzTGliKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5hcGV4Q2hhcnRzTGliOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5hcGV4Q2hhcnRzTG9hZGluZ1Byb21pc2UpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmFwZXhDaGFydHNMb2FkaW5nUHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgdGhpcy5hcGV4Q2hhcnRzTG9hZGluZ1Byb21pc2UgPSAoYXN5bmMgKCkgPT4gewogICAgICAgICAgY29uc3QgdXJsID0gYCR7Q0ROX0JBU0V9L2FwZXhjaGFydHNAJHtDRE5fVkVSU0lPTlMuYXBleGNoYXJ0c30vK2VzbWA7CiAgICAgICAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoCiAgICAgICAgICAgIC8qIEB2aXRlLWlnbm9yZSAqLwogICAgICAgICAgICB1cmwKICAgICAgICAgICk7CiAgICAgICAgICB0aGlzLmFwZXhDaGFydHNMaWIgPSBtb2R1bGUuZGVmYXVsdDsKICAgICAgICAgIHJldHVybiB0aGlzLmFwZXhDaGFydHNMaWI7CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gdGhpcy5hcGV4Q2hhcnRzTG9hZGluZ1Byb21pc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIExvYWQgVGlwdGFwIHJpY2ggdGV4dCBlZGl0b3IgYW5kIGV4dGVuc2lvbnMgZnJvbSBDRE4KICAgICAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gVGlwdGFwIGJ1bmRsZSB3aXRoIEVkaXRvciBhbmQgZXh0ZW5zaW9ucwogICAgICAgKi8KICAgICAgYXN5bmMgbG9hZFRpcHRhcCgpIHsKICAgICAgICBpZiAodGhpcy50aXB0YXBMaWIpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnRpcHRhcExpYjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMudGlwdGFwTG9hZGluZ1Byb21pc2UpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnRpcHRhcExvYWRpbmdQcm9taXNlOwogICAgICAgIH0KICAgICAgICB0aGlzLnRpcHRhcExvYWRpbmdQcm9taXNlID0gKGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHZlcnNpb24yID0gQ0ROX1ZFUlNJT05TLnRpcHRhcDsKICAgICAgICAgIGNvbnN0IFtjb3JlTW9kdWxlLCBzdGFydGVyS2l0TW9kdWxlLCB1bmRlcmxpbmVNb2R1bGUsIHRleHRBbGlnbk1vZHVsZSwgbGlua01vZHVsZSwgdHlwb2dyYXBoeU1vZHVsZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgICAgIGltcG9ydCgKICAgICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgICBgJHtDRE5fQkFTRX0vQHRpcHRhcC9jb3JlQCR7dmVyc2lvbjJ9Lytlc21gCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGltcG9ydCgKICAgICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgICBgJHtDRE5fQkFTRX0vQHRpcHRhcC9zdGFydGVyLWtpdEAke3ZlcnNpb24yfS8rZXNtYAogICAgICAgICAgICApLAogICAgICAgICAgICBpbXBvcnQoCiAgICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgICAgYCR7Q0ROX0JBU0V9L0B0aXB0YXAvZXh0ZW5zaW9uLXVuZGVybGluZUAke3ZlcnNpb24yfS8rZXNtYAogICAgICAgICAgICApLAogICAgICAgICAgICBpbXBvcnQoCiAgICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgICAgYCR7Q0ROX0JBU0V9L0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQtYWxpZ25AJHt2ZXJzaW9uMn0vK2VzbWAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgaW1wb3J0KAogICAgICAgICAgICAgIC8qIEB2aXRlLWlnbm9yZSAqLwogICAgICAgICAgICAgIGAke0NETl9CQVNFfS9AdGlwdGFwL2V4dGVuc2lvbi1saW5rQCR7dmVyc2lvbjJ9Lytlc21gCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGltcG9ydCgKICAgICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgICBgJHtDRE5fQkFTRX0vQHRpcHRhcC9leHRlbnNpb24tdHlwb2dyYXBoeUAke3ZlcnNpb24yfS8rZXNtYAogICAgICAgICAgICApCiAgICAgICAgICBdKTsKICAgICAgICAgIHRoaXMudGlwdGFwTGliID0gewogICAgICAgICAgICBFZGl0b3I6IGNvcmVNb2R1bGUuRWRpdG9yLAogICAgICAgICAgICBTdGFydGVyS2l0OiBzdGFydGVyS2l0TW9kdWxlLmRlZmF1bHQgfHwgc3RhcnRlcktpdE1vZHVsZS5TdGFydGVyS2l0LAogICAgICAgICAgICBVbmRlcmxpbmU6IHVuZGVybGluZU1vZHVsZS5kZWZhdWx0IHx8IHVuZGVybGluZU1vZHVsZS5VbmRlcmxpbmUsCiAgICAgICAgICAgIFRleHRBbGlnbjogdGV4dEFsaWduTW9kdWxlLmRlZmF1bHQgfHwgdGV4dEFsaWduTW9kdWxlLlRleHRBbGlnbiwKICAgICAgICAgICAgTGluazogbGlua01vZHVsZS5kZWZhdWx0IHx8IGxpbmtNb2R1bGUuTGluaywKICAgICAgICAgICAgVHlwb2dyYXBoeTogdHlwb2dyYXBoeU1vZHVsZS5kZWZhdWx0IHx8IHR5cG9ncmFwaHlNb2R1bGUuVHlwb2dyYXBoeQogICAgICAgICAgfTsKICAgICAgICAgIHJldHVybiB0aGlzLnRpcHRhcExpYjsKICAgICAgICB9KSgpOwogICAgICAgIHJldHVybiB0aGlzLnRpcHRhcExvYWRpbmdQcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBQcmVsb2FkIG11bHRpcGxlIGxpYnJhcmllcyBpbiBwYXJhbGxlbAogICAgICAgKiBVc2VmdWwgZm9yIHdhcm1pbmcgdGhlIGNhY2hlIGJlZm9yZSBjb21wb25lbnRzIGFyZSByZW5kZXJlZAogICAgICAgKi8KICAgICAgYXN5bmMgcHJlbG9hZEFsbCgpIHsKICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgICB0aGlzLmxvYWRYdGVybSgpLAogICAgICAgICAgdGhpcy5sb2FkWHRlcm1GaXRBZGRvbigpLAogICAgICAgICAgdGhpcy5sb2FkWHRlcm1TZWFyY2hBZGRvbigpLAogICAgICAgICAgdGhpcy5sb2FkSGlnaGxpZ2h0SnMoKSwKICAgICAgICAgIHRoaXMubG9hZEFwZXhDaGFydHMoKSwKICAgICAgICAgIHRoaXMubG9hZFRpcHRhcCgpCiAgICAgICAgXSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENoZWNrIGlmIGEgc3BlY2lmaWMgbGlicmFyeSBpcyBhbHJlYWR5IGxvYWRlZAogICAgICAgKi8KICAgICAgaXNMb2FkZWQobGlicmFyeTIpIHsKICAgICAgICBzd2l0Y2ggKGxpYnJhcnkyKSB7CiAgICAgICAgICBjYXNlICJ4dGVybSI6CiAgICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtTGliICE9PSBudWxsOwogICAgICAgICAgY2FzZSAieHRlcm1GaXRBZGRvbiI6CiAgICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtRml0QWRkb25MaWIgIT09IG51bGw7CiAgICAgICAgICBjYXNlICJ4dGVybVNlYXJjaEFkZG9uIjoKICAgICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1TZWFyY2hBZGRvbkxpYiAhPT0gbnVsbDsKICAgICAgICAgIGNhc2UgImhpZ2hsaWdodEpzIjoKICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SnNMaWIgIT09IG51bGw7CiAgICAgICAgICBjYXNlICJhcGV4Q2hhcnRzIjoKICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBleENoYXJ0c0xpYiAhPT0gbnVsbDsKICAgICAgICAgIGNhc2UgInRpcHRhcCI6CiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpcHRhcExpYiAhPT0gbnVsbDsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvc2VydmljZXMvaW5kZXguanMKdmFyIGluaXRfc2VydmljZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvc2VydmljZXMvaW5kZXguanMiKCkgewogICAgaW5pdF9EZWVzU2VydmljZUxpYkxvYWRlcigpOwogICAgaW5pdF92ZXJzaW9ucygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcnVudGltZS9pbnRlcmZhY2VzL0lFeGVjdXRpb25FbnZpcm9ubWVudC5qcwp2YXIgaW5pdF9JRXhlY3V0aW9uRW52aXJvbm1lbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2ludGVyZmFjZXMvSUV4ZWN1dGlvbkVudmlyb25tZW50LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvaW50ZXJmYWNlcy9pbmRleC5qcwp2YXIgaW5pdF9pbnRlcmZhY2VzMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvaW50ZXJmYWNlcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X0lFeGVjdXRpb25FbnZpcm9ubWVudCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvY29uc3RhbnRzLmpzCnZhciBERUZBVUxUX0VESVRPUl9PUklHSU4sIFNFQVJDSF9QQVJBTV9BVVRIX0NPREUsIFNFQVJDSF9QQVJBTV9FUlJPUiwgU0VBUkNIX1BBUkFNX0VSUk9SX0RFU0NSSVBUSU9OLCBCUk9BRENBU1RfQ0hBTk5FTF9OQU1FLCBTVE9SQUdFX1RPS0VOU19OQU1FLCBTVE9SQUdFX0NPREVfVkVSSUZJRVJfTkFNRSwgU1RPUkFHRV9QT1BVUF9OQU1FOwp2YXIgaW5pdF9jb25zdGFudHMzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvY29uc3RhbnRzLmpzIigpIHsKICAgIERFRkFVTFRfRURJVE9SX09SSUdJTiA9ICJodHRwczovL3N0YWNrYmxpdHouY29tIjsKICAgIFNFQVJDSF9QQVJBTV9BVVRIX0NPREUgPSAiY29kZSI7CiAgICBTRUFSQ0hfUEFSQU1fRVJST1IgPSAiZXJyb3IiOwogICAgU0VBUkNIX1BBUkFNX0VSUk9SX0RFU0NSSVBUSU9OID0gImVycm9yX2Rlc2NyaXB0aW9uIjsKICAgIEJST0FEQ0FTVF9DSEFOTkVMX05BTUUgPSAiX193Y19hcGlfYmNfXyI7CiAgICBTVE9SQUdFX1RPS0VOU19OQU1FID0gIl9fd2NfYXBpX3Rva2Vuc19fIjsKICAgIFNUT1JBR0VfQ09ERV9WRVJJRklFUl9OQU1FID0gIl9fd2NfYXBpX3ZlcmlmaWVyX18iOwogICAgU1RPUkFHRV9QT1BVUF9OQU1FID0gIl9fd2NfYXBpX3BvcHVwX18iOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvVHlwZWRFdmVudFRhcmdldC5qcwp2YXIgVHlwZWRFdmVudFRhcmdldDsKdmFyIGluaXRfVHlwZWRFdmVudFRhcmdldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL1R5cGVkRXZlbnRUYXJnZXQuanMiKCkgewogICAgVHlwZWRFdmVudFRhcmdldCA9IGNsYXNzIHsKICAgICAgX2J1cyA9IG5ldyBFdmVudFRhcmdldCgpOwogICAgICBsaXN0ZW4obGlzdGVuZXIyKSB7CiAgICAgICAgZnVuY3Rpb24gd3JhcHBlZExpc3RlbmVyKGV2ZW50KSB7CiAgICAgICAgICBsaXN0ZW5lcjIoZXZlbnQuZGF0YSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2J1cy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgd3JhcHBlZExpc3RlbmVyKTsKICAgICAgICByZXR1cm4gKCkgPT4gdGhpcy5fYnVzLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCB3cmFwcGVkTGlzdGVuZXIpOwogICAgICB9CiAgICAgIGZpcmVFdmVudChkYXRhKSB7CiAgICAgICAgdGhpcy5fYnVzLmRpc3BhdGNoRXZlbnQobmV3IE1lc3NhZ2VFdmVudCgibWVzc2FnZSIsIHsgZGF0YSB9KSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC90b2tlbnMuanMKZnVuY3Rpb24gY2xlYXJUb2tlbnNJblN0b3JhZ2UoKSB7CiAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oU1RPUkFHRV9UT0tFTlNfTkFNRSk7Cn0KZnVuY3Rpb24gYWRkQWNjZXNzVG9rZW5DaGFuZ2VkTGlzdGVuZXIobGlzdGVuZXIyKSB7CiAgcmV0dXJuIGFjY2Vzc1Rva2VuQ2hhbmdlZExpc3RlbmVycy5saXN0ZW4obGlzdGVuZXIyKTsKfQpmdW5jdGlvbiByZWFkVG9rZW5zRnJvbVN0b3JhZ2UoKSB7CiAgY29uc3Qgc2VyaWFsaXplZFRva2VucyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfVE9LRU5TX05BTUUpOwogIGlmICghc2VyaWFsaXplZFRva2VucykgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHRyeSB7CiAgICByZXR1cm4gSlNPTi5wYXJzZShzZXJpYWxpemVkVG9rZW5zKTsKICB9IGNhdGNoIHsKICAgIHJldHVybiBudWxsOwogIH0KfQpmdW5jdGlvbiBwZXJzaXN0VG9rZW5zSW5TdG9yYWdlKHRva2VucykgewogIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfVE9LRU5TX05BTUUsIEpTT04uc3RyaW5naWZ5KHRva2VucykpOwp9CmZ1bmN0aW9uIGdldEV4cGlyZXNGcm9tVG9rZW5SZXNwb25zZSh7IGNyZWF0ZWRfYXQsIGV4cGlyZXNfaW4gfSkgewogIHJldHVybiAoY3JlYXRlZF9hdCArIGV4cGlyZXNfaW4pICogMWUzOwp9CmZ1bmN0aW9uIGFzc2VydFRva2VuUmVzcG9uc2UodG9rZW4pIHsKICBpZiAodHlwZW9mIHRva2VuICE9PSAib2JqZWN0IiB8fCAhdG9rZW4pIHsKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBUb2tlbiBSZXNwb25zZSIpOwogIH0KICBpZiAodHlwZW9mIHRva2VuLmFjY2Vzc190b2tlbiAhPT0gInN0cmluZyIgfHwgdHlwZW9mIHRva2VuLnJlZnJlc2hfdG9rZW4gIT09ICJzdHJpbmciIHx8IHR5cGVvZiB0b2tlbi5jcmVhdGVkX2F0ICE9PSAibnVtYmVyIiB8fCB0eXBlb2YgdG9rZW4uZXhwaXJlc19pbiAhPT0gIm51bWJlciIpIHsKICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBUb2tlbiBSZXNwb25zZSIpOwogIH0KfQpmdW5jdGlvbiB3YWl0KG1zKSB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gc2V0VGltZW91dChyZXNvbHZlMiwgbXMpKTsKfQpmdW5jdGlvbiBmaXJlQWNjZXNzVG9rZW5DaGFuZ2VkKGFjY2Vzc1Rva2VuKSB7CiAgYWNjZXNzVG9rZW5DaGFuZ2VkTGlzdGVuZXJzLmZpcmVFdmVudChhY2Nlc3NUb2tlbik7Cn0KdmFyIElHTk9SRURfRVJST1IsIGFjY2Vzc1Rva2VuQ2hhbmdlZExpc3RlbmVycywgVG9rZW5zOwp2YXIgaW5pdF90b2tlbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC90b2tlbnMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMzKCk7CiAgICBpbml0X1R5cGVkRXZlbnRUYXJnZXQoKTsKICAgIElHTk9SRURfRVJST1IgPSBuZXcgRXJyb3IoKTsKICAgIElHTk9SRURfRVJST1Iuc3RhY2sgPSAiIjsKICAgIGFjY2Vzc1Rva2VuQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBUeXBlZEV2ZW50VGFyZ2V0KCk7CiAgICBUb2tlbnMgPSBjbGFzcyBfVG9rZW5zIHsKICAgICAgb3JpZ2luOwogICAgICByZWZyZXNoOwogICAgICBhY2Nlc3M7CiAgICAgIGV4cGlyZXM7CiAgICAgIF9yZXZva2VkID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIHJlZnJlc2gsIGFjY2VzcywgZXhwaXJlcykgewogICAgICAgIHRoaXMub3JpZ2luID0gb3JpZ2luOwogICAgICAgIHRoaXMucmVmcmVzaCA9IHJlZnJlc2g7CiAgICAgICAgdGhpcy5hY2Nlc3MgPSBhY2Nlc3M7CiAgICAgICAgdGhpcy5leHBpcmVzID0gZXhwaXJlczsKICAgICAgfQogICAgICBhc3luYyBhY3RpdmF0ZShvbkZhaWxlZFJlZnJlc2gpIHsKICAgICAgICBpZiAodGhpcy5fcmV2b2tlZC5zaWduYWwuYWJvcnRlZCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUb2tlbiByZXZva2VkIik7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmV4cGlyZXMgPCBEYXRlLm5vdygpKSB7CiAgICAgICAgICBpZiAoIWF3YWl0IHRoaXMuX2ZldGNoTmV3QWNjZXNzVG9rZW4oKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuX3N5bmMoKTsKICAgICAgICB0aGlzLl9zdGFydFJlZnJlc2hUb2tlbnNMb29wKG9uRmFpbGVkUmVmcmVzaCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgYXN5bmMgcmV2b2tlKGNsaWVudElkLCBpZ25vcmVSZXZva2VFcnJvcikgewogICAgICAgIHRoaXMuX3Jldm9rZWQuYWJvcnQoKTsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHt0aGlzLm9yaWdpbn0vb2F1dGgvcmV2b2tlYCwgewogICAgICAgICAgICBtZXRob2Q6ICJQT1NUIiwKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIgogICAgICAgICAgICB9LAogICAgICAgICAgICBib2R5OiBuZXcgVVJMU2VhcmNoUGFyYW1zKHsgdG9rZW46IHRoaXMucmVmcmVzaCwgdG9rZW5fdHlwZV9oaW50OiAicmVmcmVzaF90b2tlbiIsIGNsaWVudF9pZDogY2xpZW50SWQgfSksCiAgICAgICAgICAgIG1vZGU6ICJjb3JzIgogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvZ291dGApOwogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICBpZiAoIWlnbm9yZVJldm9rZUVycm9yKSB7CiAgICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjbGVhclRva2Vuc0luU3RvcmFnZSgpOwogICAgICB9CiAgICAgIHN0YXRpYyBmcm9tU3RvcmFnZSgpIHsKICAgICAgICBjb25zdCBzYXZlZFRva2VucyA9IHJlYWRUb2tlbnNGcm9tU3RvcmFnZSgpOwogICAgICAgIGlmICghc2F2ZWRUb2tlbnMpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IF9Ub2tlbnMoc2F2ZWRUb2tlbnMub3JpZ2luLCBzYXZlZFRva2Vucy5yZWZyZXNoLCBzYXZlZFRva2Vucy5hY2Nlc3MsIHNhdmVkVG9rZW5zLmV4cGlyZXMpOwogICAgICB9CiAgICAgIHN0YXRpYyBhc3luYyBmcm9tQXV0aENvZGUoeyBlZGl0b3JPcmlnaW46IGVkaXRvck9yaWdpbjIsIGNsaWVudElkLCBjb2RlVmVyaWZpZXIsIGF1dGhDb2RlLCByZWRpcmVjdFVyaSB9KSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtlZGl0b3JPcmlnaW4yfS9vYXV0aC90b2tlbmAsIHsKICAgICAgICAgIG1ldGhvZDogIlBPU1QiLAogICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIKICAgICAgICAgIH0sCiAgICAgICAgICBib2R5OiBuZXcgVVJMU2VhcmNoUGFyYW1zKHsKICAgICAgICAgICAgY2xpZW50X2lkOiBjbGllbnRJZCwKICAgICAgICAgICAgY29kZTogYXV0aENvZGUsCiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IGNvZGVWZXJpZmllciwKICAgICAgICAgICAgZ3JhbnRfdHlwZTogImF1dGhvcml6YXRpb25fY29kZSIsCiAgICAgICAgICAgIHJlZGlyZWN0X3VyaTogcmVkaXJlY3RVcmkKICAgICAgICAgIH0pLAogICAgICAgICAgbW9kZTogImNvcnMiCiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggdG9rZW46ICR7cmVzcG9uc2Uuc3RhdHVzfWApOwogICAgICAgIH0KICAgICAgICBjb25zdCB0b2tlblJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpOwogICAgICAgIGFzc2VydFRva2VuUmVzcG9uc2UodG9rZW5SZXNwb25zZSk7CiAgICAgICAgY29uc3QgeyBhY2Nlc3NfdG9rZW46IGFjY2VzcywgcmVmcmVzaF90b2tlbjogcmVmcmVzaCB9ID0gdG9rZW5SZXNwb25zZTsKICAgICAgICBjb25zdCBleHBpcmVzID0gZ2V0RXhwaXJlc0Zyb21Ub2tlblJlc3BvbnNlKHRva2VuUmVzcG9uc2UpOwogICAgICAgIHJldHVybiBuZXcgX1Rva2VucyhlZGl0b3JPcmlnaW4yLCByZWZyZXNoLCBhY2Nlc3MsIGV4cGlyZXMpOwogICAgICB9CiAgICAgIGFzeW5jIF9mZXRjaE5ld0FjY2Vzc1Rva2VuKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3RoaXMub3JpZ2lufS9vYXV0aC90b2tlbmAsIHsKICAgICAgICAgICAgbWV0aG9kOiAiUE9TVCIsCiAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYm9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyh7CiAgICAgICAgICAgICAgZ3JhbnRfdHlwZTogInJlZnJlc2hfdG9rZW4iLAogICAgICAgICAgICAgIHJlZnJlc2hfdG9rZW46IHRoaXMucmVmcmVzaAogICAgICAgICAgICB9KSwKICAgICAgICAgICAgbW9kZTogImNvcnMiLAogICAgICAgICAgICBzaWduYWw6IHRoaXMuX3Jldm9rZWQuc2lnbmFsCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICAgICAgdGhyb3cgSUdOT1JFRF9FUlJPUjsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHRva2VuUmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7CiAgICAgICAgICBhc3NlcnRUb2tlblJlc3BvbnNlKHRva2VuUmVzcG9uc2UpOwogICAgICAgICAgY29uc3QgeyBhY2Nlc3NfdG9rZW46IGFjY2VzcywgcmVmcmVzaF90b2tlbjogcmVmcmVzaCB9ID0gdG9rZW5SZXNwb25zZTsKICAgICAgICAgIGNvbnN0IGV4cGlyZXMgPSBnZXRFeHBpcmVzRnJvbVRva2VuUmVzcG9uc2UodG9rZW5SZXNwb25zZSk7CiAgICAgICAgICB0aGlzLmFjY2VzcyA9IGFjY2VzczsKICAgICAgICAgIHRoaXMuZXhwaXJlcyA9IGV4cGlyZXM7CiAgICAgICAgICB0aGlzLnJlZnJlc2ggPSByZWZyZXNoOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICBjbGVhclRva2Vuc0luU3RvcmFnZSgpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBfc3luYygpIHsKICAgICAgICBwZXJzaXN0VG9rZW5zSW5TdG9yYWdlKHRoaXMpOwogICAgICAgIGZpcmVBY2Nlc3NUb2tlbkNoYW5nZWQodGhpcy5hY2Nlc3MpOwogICAgICB9CiAgICAgIGFzeW5jIF9zdGFydFJlZnJlc2hUb2tlbnNMb29wKG9uRmFpbGVkUmVmcmVzaCkgewogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICBjb25zdCBleHBpcmVzSW4gPSB0aGlzLmV4cGlyZXMgLSBEYXRlLm5vdygpIC0gMWUzOwogICAgICAgICAgYXdhaXQgd2FpdChNYXRoLm1heChleHBpcmVzSW4sIDFlMykpOwogICAgICAgICAgaWYgKHRoaXMuX3Jldm9rZWQuc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCF0aGlzLl9mZXRjaE5ld0FjY2Vzc1Rva2VuKCkpIHsKICAgICAgICAgICAgb25GYWlsZWRSZWZyZXNoKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuX3N5bmMoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9pZnJhbWUtdXJsLmpzCnZhciBwYXJhbXMsIGVkaXRvck9yaWdpbiwgaWZyYW1lU2V0dGluZ3M7CnZhciBpbml0X2lmcmFtZV91cmwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9pZnJhbWUtdXJsLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMygpOwogICAgcGFyYW1zID0ge307CiAgICBlZGl0b3JPcmlnaW4gPSBudWxsOwogICAgaWZyYW1lU2V0dGluZ3MgPSB7CiAgICAgIGdldCBlZGl0b3JPcmlnaW4oKSB7CiAgICAgICAgaWYgKGVkaXRvck9yaWdpbiA9PSBudWxsKSB7CiAgICAgICAgICBlZGl0b3JPcmlnaW4gPSBuZXcgVVJMKGdsb2JhbFRoaXMuV0VCQ09OVEFJTkVSX0FQSV9JRlJBTUVfVVJMID8/IERFRkFVTFRfRURJVE9SX09SSUdJTikub3JpZ2luOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZWRpdG9yT3JpZ2luOwogICAgICB9LAogICAgICBzZXQgZWRpdG9yT3JpZ2luKG5ld09yaWdpbikgewogICAgICAgIGVkaXRvck9yaWdpbiA9IG5ldyBVUkwobmV3T3JpZ2luKS5vcmlnaW47CiAgICAgIH0sCiAgICAgIHNldFF1ZXJ5UGFyYW0oa2V5MiwgdmFsdWUyKSB7CiAgICAgICAgcGFyYW1zW2tleTJdID0gdmFsdWUyOwogICAgICB9LAogICAgICBnZXQgdXJsKCkgewogICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodGhpcy5lZGl0b3JPcmlnaW4pOwogICAgICAgIHVybC5wYXRobmFtZSA9ICIvaGVhZGxlc3MiOwogICAgICAgIGZvciAoY29uc3QgcGFyYW0gaW4gcGFyYW1zKSB7CiAgICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldChwYXJhbSwgcGFyYW1zW3BhcmFtXSk7CiAgICAgICAgfQogICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCJ2ZXJzaW9uIiwgIjEuNi4xIik7CiAgICAgICAgcmV0dXJuIHVybDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL2NvZGUuanMKYXN5bmMgZnVuY3Rpb24gUzI1NihpbnB1dCkgewogIGNvbnN0IGFzY2lpID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGlucHV0KTsKICBjb25zdCBzaGEyNTYgPSBuZXcgVWludDhBcnJheShhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgiU0hBLTI1NiIsIGFzY2lpKSk7CiAgcmV0dXJuIGJ0b2Eoc2hhMjU2LnJlZHVjZSgoYmluYXJ5LCBieXRlKSA9PiBiaW5hcnkgKyBTdHJpbmcuZnJvbUNvZGVQb2ludChieXRlKSwgIiIpKS5yZXBsYWNlKC9cKy9nLCAiLSIpLnJlcGxhY2UoL1wvL2csICJfIikucmVwbGFjZSgvPSskLywgIiIpOwp9CmZ1bmN0aW9uIG5ld0NvZGVWZXJpZmllcigpIHsKICBjb25zdCByYW5kb20gPSBuZXcgVWludDhBcnJheSg5Nik7CiAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhyYW5kb20pOwogIGxldCBjb2RlVmVyaWZpZXIgPSAiIjsKICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCAzMjsgKytpMTEpIHsKICAgIGNvZGVWZXJpZmllciArPSBuZXh0Rm91ckNoYXJzKHJhbmRvbVszICogaTExICsgMF0sIHJhbmRvbVszICogaTExICsgMV0sIHJhbmRvbVszICogaTExICsgMl0pOwogIH0KICByZXR1cm4gY29kZVZlcmlmaWVyOwp9CmZ1bmN0aW9uIG5leHRGb3VyQ2hhcnMoYnl0ZTEsIGJ5dGUyLCBieXRlMykgewogIGNvbnN0IGNoYXIxID0gYnl0ZTEgPj4gMjsKICBjb25zdCBjaGFyMiA9IChieXRlMSAmIDMpIDw8IDQgfCBieXRlMiA+PiA0OwogIGNvbnN0IGNoYXIzID0gYnl0ZTIgJiAxNSB8IChieXRlMyAmIDE5MikgPj4gMjsKICBjb25zdCBjaGFyNCA9IGJ5dGUzICYgNjM7CiAgcmV0dXJuIFtjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNF0ubWFwKHVucmVzZXJ2ZWRDaGFyYWN0ZXJzKS5qb2luKCIiKTsKfQpmdW5jdGlvbiB1bnJlc2VydmVkQ2hhcmFjdGVycyhjb2RlNCkgewogIGxldCBvZmZzZXQ7CiAgaWYgKGNvZGU0IDwgMjYpIHsKICAgIG9mZnNldCA9IGNvZGU0ICsgNjU7CiAgfSBlbHNlIGlmIChjb2RlNCA8IDUyKSB7CiAgICBvZmZzZXQgPSBjb2RlNCAtIDI2ICsgOTc7CiAgfSBlbHNlIGlmIChjb2RlNCA8IDYyKSB7CiAgICBvZmZzZXQgPSBjb2RlNCAtIDUyICsgNDg7CiAgfSBlbHNlIHsKICAgIG9mZnNldCA9IGNvZGU0ID09PSA2MiA/IDMwIDogNDU7CiAgfQogIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG9mZnNldCk7Cn0KdmFyIGluaXRfY29kZTQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9jb2RlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL3Jlc2V0LXByb21pc2UuanMKZnVuY3Rpb24gcmVzZXR0YWJsZVByb21pc2UoKSB7CiAgbGV0IHJlc29sdmUyOwogIGxldCBwcm9taXNlOwogIGZ1bmN0aW9uIHJlc2V0KCkgewogICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChfcmVzb2x2ZSkgPT4gcmVzb2x2ZTIgPSBfcmVzb2x2ZSk7CiAgfQogIHJlc2V0KCk7CiAgcmV0dXJuIHsKICAgIGdldCBwcm9taXNlKCkgewogICAgICByZXR1cm4gcHJvbWlzZTsKICAgIH0sCiAgICByZXNvbHZlKHZhbHVlMikgewogICAgICByZXR1cm4gcmVzb2x2ZTIodmFsdWUyKTsKICAgIH0sCiAgICByZXNldAogIH07Cn0KdmFyIGluaXRfcmVzZXRfcHJvbWlzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL3Jlc2V0LXByb21pc2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvYXV0aC1zdGF0ZS5qcwpmdW5jdGlvbiBicm9hZGNhc3RNZXNzYWdlKG1lc3NhZ2UyKSB7CiAgaWYgKCFhdXRoU3RhdGUuYnJvYWRjYXN0Q2hhbm5lbCkgewogICAgcmV0dXJuOwogIH0KICBhdXRoU3RhdGUuYnJvYWRjYXN0Q2hhbm5lbC5wb3N0TWVzc2FnZShtZXNzYWdlMik7CiAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfUE9QVVBfTkFNRSkgPT09ICJ0cnVlIiAmJiBtZXNzYWdlMi50eXBlICE9PSAiYXV0aC1sb2dvdXQiKSB7CiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX1BPUFVQX05BTUUpOwogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHdpbmRvdy5jbG9zZSgpOwogICAgfSk7CiAgfQp9CmZ1bmN0aW9uIG9uRmFpbGVkVG9rZW5SZWZyZXNoKCkgewogIGxvZ2dlZE91dExpc3RlbmVycy5maXJlRXZlbnQoKTsKICBicm9hZGNhc3RNZXNzYWdlKHsgdHlwZTogImF1dGgtbG9nb3V0IiB9KTsKfQpmdW5jdGlvbiBkZWZhdWx0UmVkaXJlY3RVcmkoKSB7CiAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmOwp9CmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlT0F1dGhSZXF1ZXN0KCkgewogIGNvbnN0IGNvZGVWZXJpZmllciA9IG5ld0NvZGVWZXJpZmllcigpOwogIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfQ09ERV9WRVJJRklFUl9OQU1FLCBjb2RlVmVyaWZpZXIpOwogIGNvbnN0IGNvZGVDaGFsbGVuZ2UgPSBhd2FpdCBTMjU2KGNvZGVWZXJpZmllcik7CiAgY29uc3QgdXJsID0gbmV3IFVSTCgiL29hdXRoL2F1dGhvcml6ZSIsIGF1dGhTdGF0ZS5lZGl0b3JPcmlnaW4pOwogIGNvbnN0IHsgc2VhcmNoUGFyYW1zIH0gPSB1cmw7CiAgc2VhcmNoUGFyYW1zLmFwcGVuZCgicmVzcG9uc2VfdHlwZSIsICJjb2RlIik7CiAgc2VhcmNoUGFyYW1zLmFwcGVuZCgiY2xpZW50X2lkIiwgYXV0aFN0YXRlLmNsaWVudElkKTsKICBzZWFyY2hQYXJhbXMuYXBwZW5kKCJyZWRpcmVjdF91cmkiLCBkZWZhdWx0UmVkaXJlY3RVcmkoKSk7CiAgc2VhcmNoUGFyYW1zLmFwcGVuZCgic2NvcGUiLCBhdXRoU3RhdGUub2F1dGhTY29wZSk7CiAgc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2UiLCBjb2RlQ2hhbGxlbmdlKTsKICBzZWFyY2hQYXJhbXMuYXBwZW5kKCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiLCAiUzI1NiIpOwogIHJldHVybiB1cmwudG9TdHJpbmcoKTsKfQpmdW5jdGlvbiBhc3NlcnRBdXRoVG9rZW5zKHRva2VucykgewogIGlmICghdG9rZW5zKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIk9vcHMhIFRva2VucyBpcyBub3QgZGVmaW5lZCB3aGVuIGl0IGFsd2F5cyBzaG91bGQgYmUuIik7CiAgfQp9CnZhciBhdXRoU3RhdGUsIGF1dGhGYWlsZWRMaXN0ZW5lcnMsIGxvZ2dlZE91dExpc3RlbmVycywgYXV0aDsKdmFyIGluaXRfYXV0aF9zdGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL2F1dGgtc3RhdGUuanMiKCkgewogICAgaW5pdF90b2tlbnMoKTsKICAgIGluaXRfY29uc3RhbnRzMygpOwogICAgaW5pdF9pZnJhbWVfdXJsKCk7CiAgICBpbml0X2NvZGU0KCk7CiAgICBpbml0X3Jlc2V0X3Byb21pc2UoKTsKICAgIGluaXRfVHlwZWRFdmVudFRhcmdldCgpOwogICAgYXV0aFN0YXRlID0gewogICAgICBpbml0aWFsaXplZDogZmFsc2UsCiAgICAgIGJvb3RDYWxsZWQ6IGZhbHNlLAogICAgICBhdXRoQ29tcGxldGU6IHJlc2V0dGFibGVQcm9taXNlKCksCiAgICAgIGNsaWVudElkOiAiIiwKICAgICAgb2F1dGhTY29wZTogIiIsCiAgICAgIGJyb2FkY2FzdENoYW5uZWw6IG51bGwsCiAgICAgIGdldCBlZGl0b3JPcmlnaW4oKSB7CiAgICAgICAgcmV0dXJuIGlmcmFtZVNldHRpbmdzLmVkaXRvck9yaWdpbjsKICAgICAgfSwKICAgICAgdG9rZW5zOiBudWxsCiAgICB9OwogICAgYXV0aEZhaWxlZExpc3RlbmVycyA9IG5ldyBUeXBlZEV2ZW50VGFyZ2V0KCk7CiAgICBsb2dnZWRPdXRMaXN0ZW5lcnMgPSBuZXcgVHlwZWRFdmVudFRhcmdldCgpOwogICAgYXV0aCA9IHsKICAgICAgaW5pdCh7IGVkaXRvck9yaWdpbjogZWRpdG9yT3JpZ2luMiwgY2xpZW50SWQsIHNjb3BlIH0pIHsKICAgICAgICBpZiAoYXV0aFN0YXRlLmluaXRpYWxpemVkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkluaXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UiKTsKICAgICAgICB9CiAgICAgICAgbGV0IGVudGVycHJpc2UgPSB0cnVlOwogICAgICAgIGlmIChlbnRlcnByaXNlICYmIGF1dGhTdGF0ZS5ib290Q2FsbGVkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImBhdXRoLmluaXRgIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIGJlZm9yZSBgV2ViQ29udGFpbmVyLmJvb3RgIik7CiAgICAgICAgfQogICAgICAgIGF1dGhTdGF0ZS5pbml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgYXV0aFN0YXRlLnRva2VucyA9IFRva2Vucy5mcm9tU3RvcmFnZSgpOwogICAgICAgIGF1dGhTdGF0ZS5jbGllbnRJZCA9IGNsaWVudElkOwogICAgICAgIGF1dGhTdGF0ZS5vYXV0aFNjb3BlID0gc2NvcGU7CiAgICAgICAgYXV0aFN0YXRlLmJyb2FkY2FzdENoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbChCUk9BRENBU1RfQ0hBTk5FTF9OQU1FKTsKICAgICAgICBpZnJhbWVTZXR0aW5ncy5zZXRRdWVyeVBhcmFtKCJjbGllbnRfaWQiLCBjbGllbnRJZCk7CiAgICAgICAgaWYgKGVkaXRvck9yaWdpbjIpIHsKICAgICAgICAgIGlmcmFtZVNldHRpbmdzLmVkaXRvck9yaWdpbiA9IG5ldyBVUkwoZWRpdG9yT3JpZ2luMikub3JpZ2luOwogICAgICAgIH0KICAgICAgICBsb2dnZWRPdXRMaXN0ZW5lcnMubGlzdGVuKCgpID0+IGF1dGhTdGF0ZS5hdXRoQ29tcGxldGUucmVzZXQoKSk7CiAgICAgICAgYXV0aFN0YXRlLmJyb2FkY2FzdENoYW5uZWwuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG9uQ2hhbm5lbE1lc3NhZ2UpOwogICAgICAgIGFzeW5jIGZ1bmN0aW9uIG9uQ2hhbm5lbE1lc3NhZ2UoZXZlbnQpIHsKICAgICAgICAgIGNvbnN0IHR5cGVkRXZlbnQgPSBldmVudC5kYXRhOwogICAgICAgICAgaWYgKHR5cGVkRXZlbnQudHlwZSA9PT0gImF1dGgtY29tcGxldGUiKSB7CiAgICAgICAgICAgIGF1dGhTdGF0ZS50b2tlbnMgPSBUb2tlbnMuZnJvbVN0b3JhZ2UoKTsKICAgICAgICAgICAgYXdhaXQgYXV0aFN0YXRlLnRva2Vucy5hY3RpdmF0ZShvbkZhaWxlZFRva2VuUmVmcmVzaCk7CiAgICAgICAgICAgIGF1dGhTdGF0ZS5hdXRoQ29tcGxldGUucmVzb2x2ZSgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZWRFdmVudC50eXBlID09PSAiYXV0aC1mYWlsZWQiKSB7CiAgICAgICAgICAgIGF1dGhGYWlsZWRMaXN0ZW5lcnMuZmlyZUV2ZW50KHR5cGVkRXZlbnQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZWRFdmVudC50eXBlID09PSAiYXV0aC1sb2dvdXQiKSB7CiAgICAgICAgICAgIGxvZ2dlZE91dExpc3RlbmVycy5maXJlRXZlbnQoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoYXV0aFN0YXRlLnRva2VucykgewogICAgICAgICAgY29uc3QgdG9rZW5zID0gYXV0aFN0YXRlLnRva2VuczsKICAgICAgICAgIGlmICh0b2tlbnMub3JpZ2luID09PSBhdXRoU3RhdGUuZWRpdG9yT3JpZ2luKSB7CiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IHRva2Vucy5hY3RpdmF0ZShvbkZhaWxlZFRva2VuUmVmcmVzaCk7CiAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgICAgICAgICBpZiAoYXV0aFN0YXRlLnRva2VucyAhPT0gdG9rZW5zKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxvZ2dlZE91dExpc3RlbmVycy5maXJlRXZlbnQoKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYXV0aFN0YXRlLmF1dGhDb21wbGV0ZS5yZXNvbHZlKCk7CiAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogImF1dGhvcml6ZWQiIH07CiAgICAgICAgICB9CiAgICAgICAgICBjbGVhclRva2Vuc0luU3RvcmFnZSgpOwogICAgICAgICAgYXV0aFN0YXRlLnRva2VucyA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxvY2F0aW9uVVJMID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7CiAgICAgICAgY29uc3QgeyBzZWFyY2hQYXJhbXMgfSA9IGxvY2F0aW9uVVJMOwogICAgICAgIGNvbnN0IHVwZGF0ZVVSTCA9ICgpID0+IHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgZG9jdW1lbnQudGl0bGUsIGxvY2F0aW9uVVJMKTsKICAgICAgICBpZiAoc2VhcmNoUGFyYW1zLmhhcyhTRUFSQ0hfUEFSQU1fRVJST1IpKSB7CiAgICAgICAgICBjb25zdCBlcnJvciA9IHNlYXJjaFBhcmFtcy5nZXQoU0VBUkNIX1BBUkFNX0VSUk9SKTsKICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gc2VhcmNoUGFyYW1zLmdldChTRUFSQ0hfUEFSQU1fRVJST1JfREVTQ1JJUFRJT04pOwogICAgICAgICAgc2VhcmNoUGFyYW1zLmRlbGV0ZShTRUFSQ0hfUEFSQU1fRVJST1IpOwogICAgICAgICAgc2VhcmNoUGFyYW1zLmRlbGV0ZShTRUFSQ0hfUEFSQU1fRVJST1JfREVTQ1JJUFRJT04pOwogICAgICAgICAgdXBkYXRlVVJMKCk7CiAgICAgICAgICBicm9hZGNhc3RNZXNzYWdlKHsgdHlwZTogImF1dGgtZmFpbGVkIiwgZXJyb3IsIGRlc2NyaXB0aW9uIH0pOwogICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiAiYXV0aC1mYWlsZWQiLCBlcnJvciwgZGVzY3JpcHRpb24gfTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlYXJjaFBhcmFtcy5oYXMoU0VBUkNIX1BBUkFNX0FVVEhfQ09ERSkpIHsKICAgICAgICAgIGNvbnN0IGF1dGhDb2RlID0gc2VhcmNoUGFyYW1zLmdldChTRUFSQ0hfUEFSQU1fQVVUSF9DT0RFKTsKICAgICAgICAgIGNvbnN0IGVkaXRvck9yaWdpbjMgPSBhdXRoU3RhdGUuZWRpdG9yT3JpZ2luOwogICAgICAgICAgc2VhcmNoUGFyYW1zLmRlbGV0ZShTRUFSQ0hfUEFSQU1fQVVUSF9DT0RFKTsKICAgICAgICAgIHVwZGF0ZVVSTCgpOwogICAgICAgICAgY29uc3QgY29kZVZlcmlmaWVyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkFHRV9DT0RFX1ZFUklGSUVSX05BTUUpOwogICAgICAgICAgaWYgKCFjb2RlVmVyaWZpZXIpIHsKICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiAibmVlZC1hdXRoIiB9OwogICAgICAgICAgfQogICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oU1RPUkFHRV9DT0RFX1ZFUklGSUVSX05BTUUpOwogICAgICAgICAgVG9rZW5zLmZyb21BdXRoQ29kZSh7CiAgICAgICAgICAgIGVkaXRvck9yaWdpbjogZWRpdG9yT3JpZ2luMywKICAgICAgICAgICAgY2xpZW50SWQ6IGF1dGhTdGF0ZS5jbGllbnRJZCwKICAgICAgICAgICAgYXV0aENvZGUsCiAgICAgICAgICAgIGNvZGVWZXJpZmllciwKICAgICAgICAgICAgcmVkaXJlY3RVcmk6IGRlZmF1bHRSZWRpcmVjdFVyaSgpCiAgICAgICAgICB9KS50aGVuKGFzeW5jICh0b2tlbnMpID0+IHsKICAgICAgICAgICAgYXV0aFN0YXRlLnRva2VucyA9IHRva2VuczsKICAgICAgICAgICAgYXNzZXJ0QXV0aFRva2VucyhhdXRoU3RhdGUudG9rZW5zKTsKICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGF1dGhTdGF0ZS50b2tlbnMuYWN0aXZhdGUob25GYWlsZWRUb2tlblJlZnJlc2gpOwogICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhdXRoU3RhdGUuYXV0aENvbXBsZXRlLnJlc29sdmUoKTsKICAgICAgICAgICAgYnJvYWRjYXN0TWVzc2FnZSh7IHR5cGU6ICJhdXRoLWNvbXBsZXRlIiB9KTsKICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4gewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgICAgbG9nZ2VkT3V0TGlzdGVuZXJzLmZpcmVFdmVudCgpOwogICAgICAgICAgICBicm9hZGNhc3RNZXNzYWdlKHsgdHlwZTogImF1dGgtbG9nb3V0IiB9KTsKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiAiYXV0aG9yaXplZCIgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiAibmVlZC1hdXRoIiB9OwogICAgICB9LAogICAgICBhc3luYyBzdGFydEF1dGhGbG93KHsgcG9wdXAgfSA9IHt9KSB7CiAgICAgICAgaWYgKCFhdXRoU3RhdGUuaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYXV0aC5pbml0IG11c3QgYmUgY2FsbGVkIGZpcnN0Iik7CiAgICAgICAgfQogICAgICAgIGlmIChwb3B1cCkgewogICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9QT1BVUF9OQU1FLCAidHJ1ZSIpOwogICAgICAgICAgY29uc3QgaGVpZ2h0ID0gNTAwOwogICAgICAgICAgY29uc3Qgd2lkdGggPSA2MjA7CiAgICAgICAgICBjb25zdCBsZWZ0ID0gd2luZG93LnNjcmVlbkxlZnQgKyAod2luZG93Lm91dGVyV2lkdGggLSB3aWR0aCkgLyAyOwogICAgICAgICAgY29uc3QgdG9wID0gd2luZG93LnNjcmVlblRvcCArICh3aW5kb3cub3V0ZXJIZWlnaHQgLSBoZWlnaHQpIC8gMjsKICAgICAgICAgIHdpbmRvdy5vcGVuKGF3YWl0IGdlbmVyYXRlT0F1dGhSZXF1ZXN0KCksICJfYmxhbmsiLCBgcG9wdXAsd2lkdGg9JHt3aWR0aH0saGVpZ2h0PSR7aGVpZ2h0fSxsZWZ0PSR7bGVmdH0sdG9wPSR7dG9wfWApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGF3YWl0IGdlbmVyYXRlT0F1dGhSZXF1ZXN0KCk7CiAgICAgICAgfQogICAgICB9LAogICAgICBhc3luYyBsb2dvdXQoeyBpZ25vcmVSZXZva2VFcnJvciB9ID0ge30pIHsKICAgICAgICBhd2FpdCBhdXRoU3RhdGUudG9rZW5zPy5yZXZva2UoYXV0aFN0YXRlLmNsaWVudElkLCBpZ25vcmVSZXZva2VFcnJvciA/PyBmYWxzZSk7CiAgICAgICAgbG9nZ2VkT3V0TGlzdGVuZXJzLmZpcmVFdmVudCgpOwogICAgICAgIGJyb2FkY2FzdE1lc3NhZ2UoeyB0eXBlOiAiYXV0aC1sb2dvdXQiIH0pOwogICAgICB9LAogICAgICBsb2dnZWRJbigpIHsKICAgICAgICByZXR1cm4gYXV0aFN0YXRlLmF1dGhDb21wbGV0ZS5wcm9taXNlOwogICAgICB9LAogICAgICBvbihldmVudCwgbGlzdGVuZXIyKSB7CiAgICAgICAgc3dpdGNoIChldmVudCkgewogICAgICAgICAgY2FzZSAiYXV0aC1mYWlsZWQiOiB7CiAgICAgICAgICAgIHJldHVybiBhdXRoRmFpbGVkTGlzdGVuZXJzLmxpc3RlbihsaXN0ZW5lcjIpOwogICAgICAgICAgfQogICAgICAgICAgY2FzZSAibG9nZ2VkLW91dCI6IHsKICAgICAgICAgICAgcmV0dXJuIGxvZ2dlZE91dExpc3RlbmVycy5saXN0ZW4obGlzdGVuZXIyKTsKICAgICAgICAgIH0KICAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBldmVudCB0eXBlICcke2V2ZW50fScuYCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvcHJldmlldy1tZXNzYWdlLXR5cGVzLmpzCnZhciBQcmV2aWV3TWVzc2FnZVR5cGU7CnZhciBpbml0X3ByZXZpZXdfbWVzc2FnZV90eXBlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3ByZXZpZXctbWVzc2FnZS10eXBlcy5qcyIoKSB7CiAgICAoZnVuY3Rpb24oUHJldmlld01lc3NhZ2VUeXBlMikgewogICAgICBQcmV2aWV3TWVzc2FnZVR5cGUyWyJVbmNhdWdodEV4Y2VwdGlvbiJdID0gIlBSRVZJRVdfVU5DQVVHSFRfRVhDRVBUSU9OIjsKICAgICAgUHJldmlld01lc3NhZ2VUeXBlMlsiVW5oYW5kbGVkUmVqZWN0aW9uIl0gPSAiUFJFVklFV19VTkhBTkRMRURfUkVKRUNUSU9OIjsKICAgICAgUHJldmlld01lc3NhZ2VUeXBlMlsiQ29uc29sZUVycm9yIl0gPSAiUFJFVklFV19DT05TT0xFX0VSUk9SIjsKICAgIH0pKFByZXZpZXdNZXNzYWdlVHlwZSB8fCAoUHJldmlld01lc3NhZ2VUeXBlID0ge30pKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3ZlbmRvci9pbmRleC5qcwpmdW5jdGlvbiBleHBvc2Uob2JqLCBlcCA9IHNlbGYpIHsKICBlcC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgZnVuY3Rpb24gY2FsbGJhY2soZXYpIHsKICAgIGlmICghZXYgfHwgIWV2LmRhdGEpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgeyBpZCwgdHlwZTogdHlwZTUsIHBhdGg6IHBhdGgyIH0gPSBPYmplY3QuYXNzaWduKHsgcGF0aDogW10gfSwgZXYuZGF0YSk7CiAgICBjb25zdCBhcmd1bWVudExpc3QgPSAoZXYuZGF0YS5hcmd1bWVudExpc3QgfHwgW10pLm1hcChmcm9tV2lyZVZhbHVlKTsKICAgIGxldCByZXR1cm5WYWx1ZTsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHBhcmVudCA9IHBhdGgyLnNsaWNlKDAsIC0xKS5yZWR1Y2UoKG9iajIsIHByb3ApID0+IG9iajJbcHJvcF0sIG9iaik7CiAgICAgIGNvbnN0IHJhd1ZhbHVlID0gcGF0aDIucmVkdWNlKChvYmoyLCBwcm9wKSA9PiBvYmoyW3Byb3BdLCBvYmopOwogICAgICBzd2l0Y2ggKHR5cGU1KSB7CiAgICAgICAgY2FzZSAwOgogICAgICAgICAgewogICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHJhd1ZhbHVlOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgewogICAgICAgICAgICBwYXJlbnRbcGF0aDIuc2xpY2UoLTEpWzBdXSA9IGZyb21XaXJlVmFsdWUoZXYuZGF0YS52YWx1ZSk7CiAgICAgICAgICAgIHJldHVyblZhbHVlID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjoKICAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSByYXdWYWx1ZS5hcHBseShwYXJlbnQsIGFyZ3VtZW50TGlzdCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDM6CiAgICAgICAgICB7CiAgICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IG5ldyByYXdWYWx1ZSguLi5hcmd1bWVudExpc3QpOwogICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHByb3h5KHZhbHVlMik7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDQ6CiAgICAgICAgICB7CiAgICAgICAgICAgIGNvbnN0IHsgcG9ydDEsIHBvcnQyIH0gPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsKICAgICAgICAgICAgZXhwb3NlKG9iaiwgcG9ydDIpOwogICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRyYW5zZmVyKHBvcnQxLCBbcG9ydDFdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNToKICAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB2b2lkIDA7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSBjYXRjaCAodmFsdWUyKSB7CiAgICAgIHJldHVyblZhbHVlID0geyB2YWx1ZTogdmFsdWUyLCBbdGhyb3dNYXJrZXJdOiAwIH07CiAgICB9CiAgICBQcm9taXNlLnJlc29sdmUocmV0dXJuVmFsdWUpLmNhdGNoKCh2YWx1ZTIpID0+IHsKICAgICAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlMiwgW3Rocm93TWFya2VyXTogMCB9OwogICAgfSkudGhlbigocmV0dXJuVmFsdWUyKSA9PiB7CiAgICAgIGNvbnN0IFt3aXJlVmFsdWUsIHRyYW5zZmVyYWJsZXNdID0gdG9XaXJlVmFsdWUocmV0dXJuVmFsdWUyKTsKICAgICAgZXAucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB3aXJlVmFsdWUpLCB7IGlkIH0pLCB0cmFuc2ZlcmFibGVzKTsKICAgICAgaWYgKHR5cGU1ID09PSA1KSB7CiAgICAgICAgZXAucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGNhbGxiYWNrKTsKICAgICAgICBjbG9zZUVuZFBvaW50KGVwKTsKICAgICAgfQogICAgfSk7CiAgfSk7CiAgaWYgKGVwLnN0YXJ0KSB7CiAgICBlcC5zdGFydCgpOwogIH0KfQpmdW5jdGlvbiBpc01lc3NhZ2VQb3J0KGVuZHBvaW50KSB7CiAgcmV0dXJuIGVuZHBvaW50LmNvbnN0cnVjdG9yLm5hbWUgPT09ICJNZXNzYWdlUG9ydCI7Cn0KZnVuY3Rpb24gY2xvc2VFbmRQb2ludChlbmRwb2ludCkgewogIGlmIChpc01lc3NhZ2VQb3J0KGVuZHBvaW50KSkKICAgIGVuZHBvaW50LmNsb3NlKCk7Cn0KZnVuY3Rpb24gd3JhcDQoZXAsIHRhcmdldCkgewogIHJldHVybiBjcmVhdGVQcm94eShlcCwgW10sIHRhcmdldCk7Cn0KZnVuY3Rpb24gdGhyb3dJZlByb3h5UmVsZWFzZWQoaXNSZWxlYXNlZCkgewogIGlmIChpc1JlbGVhc2VkKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpOwogIH0KfQpmdW5jdGlvbiBjcmVhdGVQcm94eShlcCwgcGF0aDIgPSBbXSwgdGFyZ2V0ID0gZnVuY3Rpb24oKSB7Cn0pIHsKICBsZXQgaXNQcm94eVJlbGVhc2VkID0gZmFsc2U7CiAgY29uc3QgcHJveHkyID0gbmV3IFByb3h5KHRhcmdldCwgewogICAgZ2V0KF90YXJnZXQsIHByb3ApIHsKICAgICAgdGhyb3dJZlByb3h5UmVsZWFzZWQoaXNQcm94eVJlbGVhc2VkKTsKICAgICAgaWYgKHByb3AgPT09IHJlbGVhc2VQcm94eSkgewogICAgICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgICByZXR1cm4gcmVxdWVzdFJlc3BvbnNlTWVzc2FnZShlcCwgewogICAgICAgICAgICB0eXBlOiA1LAogICAgICAgICAgICBwYXRoOiBwYXRoMi5tYXAoKHA3KSA9PiBwNy50b1N0cmluZygpKQogICAgICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgIGNsb3NlRW5kUG9pbnQoZXApOwogICAgICAgICAgICBpc1Byb3h5UmVsZWFzZWQgPSB0cnVlOwogICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgICAgfQogICAgICBpZiAocHJvcCA9PT0gInRoZW4iKSB7CiAgICAgICAgaWYgKHBhdGgyLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIHsgdGhlbjogKCkgPT4gcHJveHkyIH07CiAgICAgICAgfQogICAgICAgIGNvbnN0IHIxMSA9IHJlcXVlc3RSZXNwb25zZU1lc3NhZ2UoZXAsIHsKICAgICAgICAgIHR5cGU6IDAsCiAgICAgICAgICBwYXRoOiBwYXRoMi5tYXAoKHA3KSA9PiBwNy50b1N0cmluZygpKQogICAgICAgIH0pLnRoZW4oZnJvbVdpcmVWYWx1ZSk7CiAgICAgICAgcmV0dXJuIHIxMS50aGVuLmJpbmQocjExKTsKICAgICAgfQogICAgICByZXR1cm4gY3JlYXRlUHJveHkoZXAsIFsuLi5wYXRoMiwgcHJvcF0pOwogICAgfSwKICAgIHNldChfdGFyZ2V0LCBwcm9wLCByYXdWYWx1ZSkgewogICAgICB0aHJvd0lmUHJveHlSZWxlYXNlZChpc1Byb3h5UmVsZWFzZWQpOwogICAgICBjb25zdCBbdmFsdWUyLCB0cmFuc2ZlcmFibGVzXSA9IHRvV2lyZVZhbHVlKHJhd1ZhbHVlKTsKICAgICAgcmV0dXJuIHJlcXVlc3RSZXNwb25zZU1lc3NhZ2UoZXAsIHsKICAgICAgICB0eXBlOiAxLAogICAgICAgIHBhdGg6IFsuLi5wYXRoMiwgcHJvcF0ubWFwKChwNykgPT4gcDcudG9TdHJpbmcoKSksCiAgICAgICAgdmFsdWU6IHZhbHVlMgogICAgICB9LCB0cmFuc2ZlcmFibGVzKS50aGVuKGZyb21XaXJlVmFsdWUpOwogICAgfSwKICAgIGFwcGx5KF90YXJnZXQsIF90aGlzQXJnLCByYXdBcmd1bWVudExpc3QpIHsKICAgICAgdGhyb3dJZlByb3h5UmVsZWFzZWQoaXNQcm94eVJlbGVhc2VkKTsKICAgICAgY29uc3QgbGFzdDMgPSBwYXRoMltwYXRoMi5sZW5ndGggLSAxXTsKICAgICAgaWYgKGxhc3QzID09PSBjcmVhdGVFbmRwb2ludCkgewogICAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7CiAgICAgICAgICB0eXBlOiA0CiAgICAgICAgfSkudGhlbihmcm9tV2lyZVZhbHVlKTsKICAgICAgfQogICAgICBpZiAobGFzdDMgPT09ICJiaW5kIikgewogICAgICAgIHJldHVybiBjcmVhdGVQcm94eShlcCwgcGF0aDIuc2xpY2UoMCwgLTEpKTsKICAgICAgfQogICAgICBjb25zdCBbYXJndW1lbnRMaXN0LCB0cmFuc2ZlcmFibGVzXSA9IHByb2Nlc3NBcmd1bWVudHMocmF3QXJndW1lbnRMaXN0KTsKICAgICAgcmV0dXJuIHJlcXVlc3RSZXNwb25zZU1lc3NhZ2UoZXAsIHsKICAgICAgICB0eXBlOiAyLAogICAgICAgIHBhdGg6IHBhdGgyLm1hcCgocDcpID0+IHA3LnRvU3RyaW5nKCkpLAogICAgICAgIGFyZ3VtZW50TGlzdAogICAgICB9LCB0cmFuc2ZlcmFibGVzKS50aGVuKGZyb21XaXJlVmFsdWUpOwogICAgfSwKICAgIGNvbnN0cnVjdChfdGFyZ2V0LCByYXdBcmd1bWVudExpc3QpIHsKICAgICAgdGhyb3dJZlByb3h5UmVsZWFzZWQoaXNQcm94eVJlbGVhc2VkKTsKICAgICAgY29uc3QgW2FyZ3VtZW50TGlzdCwgdHJhbnNmZXJhYmxlc10gPSBwcm9jZXNzQXJndW1lbnRzKHJhd0FyZ3VtZW50TGlzdCk7CiAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7CiAgICAgICAgdHlwZTogMywKICAgICAgICBwYXRoOiBwYXRoMi5tYXAoKHA3KSA9PiBwNy50b1N0cmluZygpKSwKICAgICAgICBhcmd1bWVudExpc3QKICAgICAgfSwgdHJhbnNmZXJhYmxlcykudGhlbihmcm9tV2lyZVZhbHVlKTsKICAgIH0KICB9KTsKICByZXR1cm4gcHJveHkyOwp9CmZ1bmN0aW9uIG15RmxhdChhcnIpIHsKICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgYXJyKTsKfQpmdW5jdGlvbiBwcm9jZXNzQXJndW1lbnRzKGFyZ3VtZW50TGlzdCkgewogIGNvbnN0IHByb2Nlc3NlZCA9IGFyZ3VtZW50TGlzdC5tYXAodG9XaXJlVmFsdWUpOwogIHJldHVybiBbcHJvY2Vzc2VkLm1hcCgodjUpID0+IHY1WzBdKSwgbXlGbGF0KHByb2Nlc3NlZC5tYXAoKHY1KSA9PiB2NVsxXSkpXTsKfQpmdW5jdGlvbiB0cmFuc2ZlcihvYmosIHRyYW5zZmVycykgewogIHRyYW5zZmVyQ2FjaGUuc2V0KG9iaiwgdHJhbnNmZXJzKTsKICByZXR1cm4gb2JqOwp9CmZ1bmN0aW9uIHByb3h5KG9iaikgewogIHJldHVybiBPYmplY3QuYXNzaWduKG9iaiwgeyBbcHJveHlNYXJrZXJdOiB0cnVlIH0pOwp9CmZ1bmN0aW9uIHdpbmRvd0VuZHBvaW50KHczLCBjb250ZXh0MiA9IHNlbGYsIHRhcmdldE9yaWdpbiA9ICIqIikgewogIHJldHVybiB7CiAgICBwb3N0TWVzc2FnZTogKG1zZywgdHJhbnNmZXJhYmxlcykgPT4gdzMucG9zdE1lc3NhZ2UobXNnLCB0YXJnZXRPcmlnaW4sIHRyYW5zZmVyYWJsZXMpLAogICAgYWRkRXZlbnRMaXN0ZW5lcjogY29udGV4dDIuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKGNvbnRleHQyKSwKICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGNvbnRleHQyLnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZChjb250ZXh0MikKICB9Owp9CmZ1bmN0aW9uIHRvV2lyZVZhbHVlKHZhbHVlMikgewogIGZvciAoY29uc3QgW25hbWUsIGhhbmRsZXIyXSBvZiB0cmFuc2ZlckhhbmRsZXJzKSB7CiAgICBpZiAoaGFuZGxlcjIuY2FuSGFuZGxlKHZhbHVlMikpIHsKICAgICAgY29uc3QgW3NlcmlhbGl6ZWRWYWx1ZSwgdHJhbnNmZXJhYmxlc10gPSBoYW5kbGVyMi5zZXJpYWxpemUodmFsdWUyKTsKICAgICAgcmV0dXJuIFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAzLAogICAgICAgICAgbmFtZSwKICAgICAgICAgIHZhbHVlOiBzZXJpYWxpemVkVmFsdWUKICAgICAgICB9LAogICAgICAgIHRyYW5zZmVyYWJsZXMKICAgICAgXTsKICAgIH0KICB9CiAgcmV0dXJuIFsKICAgIHsKICAgICAgdHlwZTogMCwKICAgICAgdmFsdWU6IHZhbHVlMgogICAgfSwKICAgIHRyYW5zZmVyQ2FjaGUuZ2V0KHZhbHVlMikgfHwgW10KICBdOwp9CmZ1bmN0aW9uIGZyb21XaXJlVmFsdWUodmFsdWUyKSB7CiAgc3dpdGNoICh2YWx1ZTIudHlwZSkgewogICAgY2FzZSAzOgogICAgICByZXR1cm4gdHJhbnNmZXJIYW5kbGVycy5nZXQodmFsdWUyLm5hbWUpLmRlc2VyaWFsaXplKHZhbHVlMi52YWx1ZSk7CiAgICBjYXNlIDA6CiAgICAgIHJldHVybiB2YWx1ZTIudmFsdWU7CiAgfQp9CmZ1bmN0aW9uIHJlcXVlc3RSZXNwb25zZU1lc3NhZ2UoZXAsIG1zZywgdHJhbnNmZXJzKSB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gewogICAgY29uc3QgaWQgPSBnZW5lcmF0ZVVVSUQoKTsKICAgIGVwLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbiBsNihldikgewogICAgICBpZiAoIWV2LmRhdGEgfHwgIWV2LmRhdGEuaWQgfHwgZXYuZGF0YS5pZCAhPT0gaWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZXAucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGw2KTsKICAgICAgcmVzb2x2ZTIoZXYuZGF0YSk7CiAgICB9KTsKICAgIGlmIChlcC5zdGFydCkgewogICAgICBlcC5zdGFydCgpOwogICAgfQogICAgZXAucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7IGlkIH0sIG1zZyksIHRyYW5zZmVycyk7CiAgfSk7Cn0KZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKCkgewogIHJldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCkgPT4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpOwp9CnZhciBfX2RlZlByb3AyLCBfX2V4cG9ydDIsIGNvbWxpbmtfZXhwb3J0cywgcHJveHlNYXJrZXIsIGNyZWF0ZUVuZHBvaW50LCByZWxlYXNlUHJveHksIHRocm93TWFya2VyLCBpc09iamVjdDIsIHByb3h5VHJhbnNmZXJIYW5kbGVyLCB0aHJvd1RyYW5zZmVySGFuZGxlciwgdHJhbnNmZXJIYW5kbGVycywgdHJhbnNmZXJDYWNoZTsKdmFyIGluaXRfdmVuZG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdmVuZG9yL2luZGV4LmpzIigpIHsKICAgIF9fZGVmUHJvcDIgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgICBfX2V4cG9ydDIgPSAodGFyZ2V0LCBhbGwzKSA9PiB7CiAgICAgIGZvciAodmFyIG5hbWUgaW4gYWxsMykKICAgICAgICBfX2RlZlByb3AyKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbDNbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7CiAgICB9OwogICAgY29tbGlua19leHBvcnRzID0ge307CiAgICBfX2V4cG9ydDIoY29tbGlua19leHBvcnRzLCB7CiAgICAgIGNyZWF0ZUVuZHBvaW50OiAoKSA9PiBjcmVhdGVFbmRwb2ludCwKICAgICAgZXhwb3NlOiAoKSA9PiBleHBvc2UsCiAgICAgIHByb3h5OiAoKSA9PiBwcm94eSwKICAgICAgcHJveHlNYXJrZXI6ICgpID0+IHByb3h5TWFya2VyLAogICAgICByZWxlYXNlUHJveHk6ICgpID0+IHJlbGVhc2VQcm94eSwKICAgICAgdHJhbnNmZXI6ICgpID0+IHRyYW5zZmVyLAogICAgICB0cmFuc2ZlckhhbmRsZXJzOiAoKSA9PiB0cmFuc2ZlckhhbmRsZXJzLAogICAgICB3aW5kb3dFbmRwb2ludDogKCkgPT4gd2luZG93RW5kcG9pbnQsCiAgICAgIHdyYXA6ICgpID0+IHdyYXA0CiAgICB9KTsKICAgIHByb3h5TWFya2VyID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgiQ29tbGluay5wcm94eSIpOwogICAgY3JlYXRlRW5kcG9pbnQgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCJDb21saW5rLmVuZHBvaW50Iik7CiAgICByZWxlYXNlUHJveHkgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpOwogICAgdGhyb3dNYXJrZXIgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCJDb21saW5rLnRocm93biIpOwogICAgaXNPYmplY3QyID0gKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gIm9iamVjdCIgJiYgdmFsICE9PSBudWxsIHx8IHR5cGVvZiB2YWwgPT09ICJmdW5jdGlvbiI7CiAgICBwcm94eVRyYW5zZmVySGFuZGxlciA9IHsKICAgICAgY2FuSGFuZGxlOiAodmFsKSA9PiBpc09iamVjdDIodmFsKSAmJiB2YWxbcHJveHlNYXJrZXJdLAogICAgICBzZXJpYWxpemUob2JqKSB7CiAgICAgICAgY29uc3QgeyBwb3J0MSwgcG9ydDIgfSA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOwogICAgICAgIGV4cG9zZShvYmosIHBvcnQxKTsKICAgICAgICByZXR1cm4gW3BvcnQyLCBbcG9ydDJdXTsKICAgICAgfSwKICAgICAgZGVzZXJpYWxpemUocG9ydCkgewogICAgICAgIHBvcnQuc3RhcnQoKTsKICAgICAgICByZXR1cm4gd3JhcDQocG9ydCk7CiAgICAgIH0KICAgIH07CiAgICB0aHJvd1RyYW5zZmVySGFuZGxlciA9IHsKICAgICAgY2FuSGFuZGxlOiAodmFsdWUyKSA9PiBpc09iamVjdDIodmFsdWUyKSAmJiB0aHJvd01hcmtlciBpbiB2YWx1ZTIsCiAgICAgIHNlcmlhbGl6ZSh7IHZhbHVlOiB2YWx1ZTIgfSkgewogICAgICAgIGxldCBzZXJpYWxpemVkOwogICAgICAgIGlmICh2YWx1ZTIgaW5zdGFuY2VvZiBFcnJvcikgewogICAgICAgICAgc2VyaWFsaXplZCA9IHsKICAgICAgICAgICAgaXNFcnJvcjogdHJ1ZSwKICAgICAgICAgICAgdmFsdWU6IHsKICAgICAgICAgICAgICBtZXNzYWdlOiB2YWx1ZTIubWVzc2FnZSwKICAgICAgICAgICAgICBuYW1lOiB2YWx1ZTIubmFtZSwKICAgICAgICAgICAgICBzdGFjazogdmFsdWUyLnN0YWNrCiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlcmlhbGl6ZWQgPSB7IGlzRXJyb3I6IGZhbHNlLCB2YWx1ZTogdmFsdWUyIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiBbc2VyaWFsaXplZCwgW11dOwogICAgICB9LAogICAgICBkZXNlcmlhbGl6ZShzZXJpYWxpemVkKSB7CiAgICAgICAgaWYgKHNlcmlhbGl6ZWQuaXNFcnJvcikgewogICAgICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihuZXcgRXJyb3Ioc2VyaWFsaXplZC52YWx1ZS5tZXNzYWdlKSwgc2VyaWFsaXplZC52YWx1ZSk7CiAgICAgICAgfQogICAgICAgIHRocm93IHNlcmlhbGl6ZWQudmFsdWU7CiAgICAgIH0KICAgIH07CiAgICB0cmFuc2ZlckhhbmRsZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoWwogICAgICBbInByb3h5IiwgcHJveHlUcmFuc2ZlckhhbmRsZXJdLAogICAgICBbInRocm93IiwgdGhyb3dUcmFuc2ZlckhhbmRsZXJdCiAgICBdKTsKICAgIHRyYW5zZmVyQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL3JlbG9hZC1wcmV2aWV3LmpzCnZhciBpbml0X3JlbG9hZF9wcmV2aWV3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvcmVsb2FkLXByZXZpZXcuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvaXMtcHJldmlldy1tZXNzYWdlLmpzCmZ1bmN0aW9uIGlzUHJldmlld01lc3NhZ2UoZGF0YSkgewogIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICJvYmplY3QiKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGlmICghKCJ0eXBlIiBpbiBkYXRhKSB8fCAhUFJFVklFV19NRVNTQUdFX1RZUEVTLmluY2x1ZGVzKGRhdGEudHlwZSkpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KdmFyIFBSRVZJRVdfTUVTU0FHRV9UWVBFUzsKdmFyIGluaXRfaXNfcHJldmlld19tZXNzYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvaXMtcHJldmlldy1tZXNzYWdlLmpzIigpIHsKICAgIGluaXRfcHJldmlld19tZXNzYWdlX3R5cGVzKCk7CiAgICBQUkVWSUVXX01FU1NBR0VfVFlQRVMgPSBbCiAgICAgIFByZXZpZXdNZXNzYWdlVHlwZS5Db25zb2xlRXJyb3IsCiAgICAgIFByZXZpZXdNZXNzYWdlVHlwZS5VbmNhdWdodEV4Y2VwdGlvbiwKICAgICAgUHJldmlld01lc3NhZ2VUeXBlLlVuaGFuZGxlZFJlamVjdGlvbgogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzLmpzCnZhciBpbml0X3V0aWxzMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzLmpzIigpIHsKICAgIGluaXRfcmVsb2FkX3ByZXZpZXcoKTsKICAgIGluaXRfcHJldmlld19tZXNzYWdlX3R5cGVzKCk7CiAgICBpbml0X2lzX3ByZXZpZXdfbWVzc2FnZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvbnVsbC1wcm90b3R5cGUuanMKZnVuY3Rpb24gbnVsbFByb3RvdHlwZShzb3VyY2UpIHsKICBjb25zdCBwcm90b3R5cGUgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTsKICBpZiAoIXNvdXJjZSkgewogICAgcmV0dXJuIHByb3RvdHlwZTsKICB9CiAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJvdG90eXBlLCBzb3VyY2UpOwp9CnZhciBpbml0X251bGxfcHJvdG90eXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvbnVsbC1wcm90b3R5cGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvZmlsZS1zeXN0ZW0uanMKZnVuY3Rpb24gdG9JbnRlcm5hbEZpbGVTeXN0ZW1UcmVlKHRyZWUpIHsKICBjb25zdCBuZXdUcmVlID0geyBkOiB7fSB9OwogIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyh0cmVlKSkgewogICAgY29uc3QgZW50cnkgPSB0cmVlW25hbWVdOwogICAgaWYgKCJmaWxlIiBpbiBlbnRyeSkgewogICAgICBpZiAoInN5bWxpbmsiIGluIGVudHJ5LmZpbGUpIHsKICAgICAgICBuZXdUcmVlLmRbbmFtZV0gPSB7IGY6IHsgbDogZW50cnkuZmlsZS5zeW1saW5rIH0gfTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBjb250ZW50cyA9IGVudHJ5LmZpbGUuY29udGVudHM7CiAgICAgIGNvbnN0IHN0cmluZ0NvbnRlbnRzID0gdHlwZW9mIGNvbnRlbnRzID09PSAic3RyaW5nIiA/IGNvbnRlbnRzIDogYmluYXJ5RGVjb2Rlci5kZWNvZGUoY29udGVudHMpOwogICAgICBjb25zdCBiaW5hcnkgPSB0eXBlb2YgY29udGVudHMgPT09ICJzdHJpbmciID8ge30gOiB7IGI6IHRydWUgfTsKICAgICAgbmV3VHJlZS5kW25hbWVdID0geyBmOiB7IGM6IHN0cmluZ0NvbnRlbnRzLCAuLi5iaW5hcnkgfSB9OwogICAgICBjb250aW51ZTsKICAgIH0KICAgIGNvbnN0IG5ld0VudHJ5ID0gdG9JbnRlcm5hbEZpbGVTeXN0ZW1UcmVlKGVudHJ5LmRpcmVjdG9yeSk7CiAgICBuZXdUcmVlLmRbbmFtZV0gPSBuZXdFbnRyeTsKICB9CiAgcmV0dXJuIG5ld1RyZWU7Cn0KZnVuY3Rpb24gdG9FeHRlcm5hbEZpbGVTeXN0ZW1UcmVlKHRyZWUpIHsKICBjb25zdCBuZXdUcmVlID0gbnVsbFByb3RvdHlwZSgpOwogIGlmICgiZiIgaW4gdHJlZSkgewogICAgdGhyb3cgbmV3IEVycm9yKCJJdCBpcyBub3QgcG9zc2libGUgdG8gZXhwb3J0IGEgc2luZ2xlIGZpbGUgaW4gdGhlIEpTT04gZm9ybWF0LiIpOwogIH0KICBpZiAoImQiIGluIHRyZWUpIHsKICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyh0cmVlLmQpKSB7CiAgICAgIGNvbnN0IGVudHJ5ID0gdHJlZS5kW25hbWVdOwogICAgICBpZiAoImQiIGluIGVudHJ5KSB7CiAgICAgICAgbmV3VHJlZVtuYW1lXSA9IG51bGxQcm90b3R5cGUoewogICAgICAgICAgZGlyZWN0b3J5OiB0b0V4dGVybmFsRmlsZVN5c3RlbVRyZWUoZW50cnkpCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAoImYiIGluIGVudHJ5KSB7CiAgICAgICAgaWYgKCJjIiBpbiBlbnRyeS5mKSB7CiAgICAgICAgICBuZXdUcmVlW25hbWVdID0gbnVsbFByb3RvdHlwZSh7CiAgICAgICAgICAgIGZpbGU6IG51bGxQcm90b3R5cGUoewogICAgICAgICAgICAgIGNvbnRlbnRzOiBlbnRyeS5mLmIgPyBmcm9tQmluYXJ5U3RyaW5nKGVudHJ5LmYuYykgOiBlbnRyeS5mLmMKICAgICAgICAgICAgfSkKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSBpZiAoImwiIGluIGVudHJ5LmYpIHsKICAgICAgICAgIG5ld1RyZWVbbmFtZV0gPSBudWxsUHJvdG90eXBlKHsKICAgICAgICAgICAgZmlsZTogbnVsbFByb3RvdHlwZSh7CiAgICAgICAgICAgICAgc3ltbGluazogZW50cnkuZi5sCiAgICAgICAgICAgIH0pCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIG5ld1RyZWU7Cn0KZnVuY3Rpb24gZnJvbUJpbmFyeVN0cmluZyhzOSkgewogIGNvbnN0IGVuY29kZWQgPSBuZXcgVWludDhBcnJheShzOS5sZW5ndGgpOwogIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHM5Lmxlbmd0aDsgaTExKyspIHsKICAgIGVuY29kZWRbaTExXSA9IHM5W2kxMV0uY2hhckNvZGVBdCgwKTsKICB9CiAgcmV0dXJuIGVuY29kZWQ7Cn0KdmFyIGJpbmFyeURlY29kZXI7CnZhciBpbml0X2ZpbGVfc3lzdGVtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvdXRpbHMvZmlsZS1zeXN0ZW0uanMiKCkgewogICAgaW5pdF9udWxsX3Byb3RvdHlwZSgpOwogICAgYmluYXJ5RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigibGF0aW4xIik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbmRleC5qcwpmdW5jdGlvbiBjb25maWd1cmVBUElLZXkoa2V5MikgewogIGlmIChhdXRoU3RhdGUuYm9vdENhbGxlZCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJgY29uZmlndXJlQVBJS2V5YCBzaG91bGQgYWx3YXlzIGJlIGNhbGxlZCBiZWZvcmUgYFdlYkNvbnRhaW5lci5ib290YCIpOwogIH0KICBpZnJhbWVTZXR0aW5ncy5zZXRRdWVyeVBhcmFtKCJjbGllbnRfaWQiLCBrZXkyKTsKfQphc3luYyBmdW5jdGlvbiB1bnN5bmNocm9uaXplZEJvb3Qob3B0aW9ucykgewogIGNvbnN0IHsgc2VydmVyUHJvbWlzZSB9ID0gc2VydmVyRmFjdG9yeShvcHRpb25zKTsKICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBzZXJ2ZXJQcm9taXNlOwogIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgc2VydmVyLmJ1aWxkKHsKICAgIGhvc3Q6IHdpbmRvdy5sb2NhdGlvbi5ob3N0LAogICAgdmVyc2lvbjogIjEuNi4xIiwKICAgIHdvcmtkaXJOYW1lOiBvcHRpb25zLndvcmtkaXJOYW1lLAogICAgZm9yd2FyZFByZXZpZXdFcnJvcnM6IG9wdGlvbnMuZm9yd2FyZFByZXZpZXdFcnJvcnMKICB9KTsKICBjb25zdCBbZnMsIHByZXZpZXdTY3JpcHQsIHJ1bnRpbWVJbmZvXSA9IGF3YWl0IFByb21pc2UuYWxsKFsKICAgIGluc3RhbmNlLmZzKCksCiAgICBpbnN0YW5jZS5wcmV2aWV3U2NyaXB0KCksCiAgICBpbnN0YW5jZS5ydW50aW1lSW5mbygpCiAgXSk7CiAgcmV0dXJuIG5ldyBXZWJDb250YWluZXIoaW5zdGFuY2UsIGZzLCBwcmV2aWV3U2NyaXB0LCBydW50aW1lSW5mbyk7Cn0KZnVuY3Rpb24gYmluYXJ5TGlzdGVuZXIobGlzdGVuZXIyKSB7CiAgaWYgKGxpc3RlbmVyMiA9PSBudWxsKSB7CiAgICByZXR1cm4gdm9pZCAwOwogIH0KICByZXR1cm4gKGRhdGEpID0+IHsKICAgIGlmIChkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkgewogICAgICBsaXN0ZW5lcjIoZGVjb2Rlci5kZWNvZGUoZGF0YSkpOwogICAgfSBlbHNlIGlmIChkYXRhID09IG51bGwpIHsKICAgICAgbGlzdGVuZXIyKG51bGwpOwogICAgfQogIH07Cn0KZnVuY3Rpb24gcHJveHlMaXN0ZW5lcihsaXN0ZW5lcjIpIHsKICBpZiAobGlzdGVuZXIyID09IG51bGwpIHsKICAgIHJldHVybiB2b2lkIDA7CiAgfQogIHJldHVybiBjb21saW5rX2V4cG9ydHMucHJveHkobGlzdGVuZXIyKTsKfQpmdW5jdGlvbiBzZXJ2ZXJGYWN0b3J5KG9wdGlvbnMpIHsKICBpZiAoY2FjaGVkU2VydmVyUHJvbWlzZSAhPSBudWxsKSB7CiAgICBpZiAob3B0aW9ucy5jb2VwICE9PSBjYWNoZWRCb290T3B0aW9ucy5jb2VwKSB7CiAgICAgIGNvbnNvbGUud2FybihgQXR0ZW1wdGluZyB0byBib290IFdlYkNvbnRhaW5lciB3aXRoICdjb2VwOiAke29wdGlvbnMuY29lcH0nYCk7CiAgICAgIGNvbnNvbGUud2FybihgRmlyc3QgYm9vdCBoYWQgJ2NvZXA6ICR7Y2FjaGVkQm9vdE9wdGlvbnMuY29lcH0nLCBuZXcgc2V0dGluZ3Mgd2lsbCBub3QgdGFrZSBlZmZlY3QhYCk7CiAgICB9CiAgICByZXR1cm4geyBzZXJ2ZXJQcm9taXNlOiBjYWNoZWRTZXJ2ZXJQcm9taXNlIH07CiAgfQogIGlmIChvcHRpb25zLmNvZXApIHsKICAgIGlmcmFtZVNldHRpbmdzLnNldFF1ZXJ5UGFyYW0oImNvZXAiLCBvcHRpb25zLmNvZXApOwogIH0KICBpZiAob3B0aW9ucy5leHBlcmltZW50YWxOb2RlKSB7CiAgICBpZnJhbWVTZXR0aW5ncy5zZXRRdWVyeVBhcmFtKCJleHBlcmltZW50YWxfbm9kZSIsICIxIik7CiAgfQogIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOwogIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogIGlmcmFtZS5zZXRBdHRyaWJ1dGUoImFsbG93IiwgImNyb3NzLW9yaWdpbi1pc29sYXRlZCIpOwogIGNvbnN0IHVybCA9IGlmcmFtZVNldHRpbmdzLnVybDsKICBpZnJhbWUuc3JjID0gdXJsLnRvU3RyaW5nKCk7CiAgY29uc3QgeyBvcmlnaW4gfSA9IHVybDsKICBjYWNoZWRCb290T3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9OwogIGNhY2hlZFNlcnZlclByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgIGNvbnN0IG9uTWVzc2FnZTUgPSAoZXZlbnQpID0+IHsKICAgICAgaWYgKGV2ZW50Lm9yaWdpbiAhPT0gb3JpZ2luKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gZXZlbnQ7CiAgICAgIGlmIChkYXRhLnR5cGUgPT09ICJpbml0IikgewogICAgICAgIHJlc29sdmUyKGNvbWxpbmtfZXhwb3J0cy53cmFwKGV2ZW50LnBvcnRzWzBdKSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChkYXRhLnR5cGUgPT09ICJ3YXJuaW5nIikgewogICAgICAgIGNvbnNvbGVbZGF0YS5sZXZlbF0uY2FsbChjb25zb2xlLCBkYXRhLm1lc3NhZ2UpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgb25NZXNzYWdlNSk7CiAgfSk7CiAgZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUoaWZyYW1lLCBudWxsKTsKICByZXR1cm4geyBzZXJ2ZXJQcm9taXNlOiBjYWNoZWRTZXJ2ZXJQcm9taXNlIH07Cn0KZnVuY3Rpb24gaXNTdHJpbmdBcnJheShsaXN0NSkgewogIHJldHVybiB0eXBlb2YgbGlzdDVbMF0gPT09ICJzdHJpbmciOwp9CmZ1bmN0aW9uIGlzVHlwZWRBcnJheUNvbGxlY3Rpb24obGlzdDUpIHsKICByZXR1cm4gbGlzdDVbMF0gaW5zdGFuY2VvZiBVaW50OEFycmF5Owp9CmZ1bmN0aW9uIHN0cmVhbVdpdGhQdXNoKCkgewogIGxldCBjb250cm9sbGVyID0gbnVsbDsKICBjb25zdCBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oewogICAgc3RhcnQoY29udHJvbGxlcl8pIHsKICAgICAgY29udHJvbGxlciA9IGNvbnRyb2xsZXJfOwogICAgfQogIH0pOwogIGNvbnN0IHB1c2gyID0gKGl0ZW0pID0+IHsKICAgIGlmIChpdGVtICE9IG51bGwpIHsKICAgICAgY29udHJvbGxlcj8uZW5xdWV1ZShpdGVtKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnRyb2xsZXI/LmNsb3NlKCk7CiAgICAgIGNvbnRyb2xsZXIgPSBudWxsOwogICAgfQogIH07CiAgcmV0dXJuIHsgc3RyZWFtLCBwdXNoOiBwdXNoMiB9Owp9CmZ1bmN0aW9uIHN5bmNTdWJzY3JpcHRpb24obGlzdGVuZXIyKSB7CiAgbGV0IHN0b3BwZWQgPSBmYWxzZTsKICBsZXQgdW5zdWJzY3JpYmUgPSAoKSA9PiB7CiAgfTsKICBjb25zdCB3cmFwcGVkID0gKCguLi5hcmdzKSA9PiB7CiAgICBpZiAoc3RvcHBlZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBsaXN0ZW5lcjIoLi4uYXJncyk7CiAgfSk7CiAgcmV0dXJuIHsKICAgIHN1YnNjcmliZShwcm9taXNlKSB7CiAgICAgIHByb21pc2UudGhlbigodW5zdWJzY3JpYmVfKSA9PiB7CiAgICAgICAgdW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZV87CiAgICAgICAgaWYgKHN0b3BwZWQpIHsKICAgICAgICAgIHVuc3Vic2NyaWJlKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuICgpID0+IHsKICAgICAgICBzdG9wcGVkID0gdHJ1ZTsKICAgICAgICB1bnN1YnNjcmliZSgpOwogICAgICB9OwogICAgfSwKICAgIGxpc3RlbmVyOiB3cmFwcGVkCiAgfTsKfQp2YXIgYXV0aDIsIGJvb3RQcm9taXNlLCBjYWNoZWRTZXJ2ZXJQcm9taXNlLCBjYWNoZWRCb290T3B0aW9ucywgZGVjb2RlciwgZW5jb2RlciwgV2ViQ29udGFpbmVyLCBESVJfRU5UUllfVFlQRV9GSUxFLCBESVJfRU5UUllfVFlQRV9ESVIsIERpckVudEltcGwsIEZTV2F0Y2hlciwgV2ViQ29udGFpbmVyUHJvY2Vzc0ltcGwsIEZpbGVTeXN0ZW1BUElDbGllbnQ7CnZhciBpbml0X2Rpc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2F1dGhfc3RhdGUoKTsKICAgIGluaXRfcHJldmlld19tZXNzYWdlX3R5cGVzKCk7CiAgICBpbml0X3ZlbmRvcigpOwogICAgaW5pdF9hdXRoX3N0YXRlKCk7CiAgICBpbml0X3Rva2VucygpOwogICAgaW5pdF9pZnJhbWVfdXJsKCk7CiAgICBpbml0X3V0aWxzMigpOwogICAgaW5pdF9maWxlX3N5c3RlbSgpOwogICAgaW5pdF91dGlsczIoKTsKICAgIGF1dGgyID0gYXV0aDsKICAgIGJvb3RQcm9taXNlID0gbnVsbDsKICAgIGNhY2hlZFNlcnZlclByb21pc2UgPSBudWxsOwogICAgY2FjaGVkQm9vdE9wdGlvbnMgPSB7fTsKICAgIGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTsKICAgIGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTsKICAgIFdlYkNvbnRhaW5lciA9IGNsYXNzIF9XZWJDb250YWluZXIgewogICAgICBfaW5zdGFuY2U7CiAgICAgIF9ydW50aW1lSW5mbzsKICAgICAgLyoqCiAgICAgICAqIEdpdmVzIGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbS4KICAgICAgICovCiAgICAgIGZzOwogICAgICAvKiogQGludGVybmFsICovCiAgICAgIHN0YXRpYyBfaW5zdGFuY2UgPSBudWxsOwogICAgICAvKiogQGludGVybmFsICovCiAgICAgIHN0YXRpYyBfdGVhcmRvd25Qcm9taXNlID0gbnVsbDsKICAgICAgX3Rvcm5Eb3duID0gZmFsc2U7CiAgICAgIF91bnN1YnNjcmliZUZyb21Ub2tlbkNoYW5nZWRMaXN0ZW5lciA9ICgpID0+IHsKICAgICAgfTsKICAgICAgLyoqIEBpbnRlcm5hbCAqLwogICAgICBjb25zdHJ1Y3RvcihfaW5zdGFuY2UsIGZzLCBwcmV2aWV3U2NyaXB0LCBfcnVudGltZUluZm8pIHsKICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IF9pbnN0YW5jZTsKICAgICAgICB0aGlzLl9ydW50aW1lSW5mbyA9IF9ydW50aW1lSW5mbzsKICAgICAgICB0aGlzLmZzID0gbmV3IEZpbGVTeXN0ZW1BUElDbGllbnQoZnMpOwogICAgICAgIGlmIChhdXRoU3RhdGUuaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRnJvbVRva2VuQ2hhbmdlZExpc3RlbmVyID0gYWRkQWNjZXNzVG9rZW5DaGFuZ2VkTGlzdGVuZXIoKGFjY2Vzc1Rva2VuKSA9PiB7CiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlLnNldENyZWRlbnRpYWxzKHsgYWNjZXNzVG9rZW4sIGVkaXRvck9yaWdpbjogYXV0aFN0YXRlLmVkaXRvck9yaWdpbiB9KTsKICAgICAgICAgIH0pOwogICAgICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgYXV0aFN0YXRlLmF1dGhDb21wbGV0ZS5wcm9taXNlOwogICAgICAgICAgICBpZiAodGhpcy5fdG9ybkRvd24pIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXNzZXJ0QXV0aFRva2VucyhhdXRoU3RhdGUudG9rZW5zKTsKICAgICAgICAgICAgYXdhaXQgdGhpcy5faW5zdGFuY2Uuc2V0Q3JlZGVudGlhbHMoewogICAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBhdXRoU3RhdGUudG9rZW5zLmFjY2VzcywKICAgICAgICAgICAgICBlZGl0b3JPcmlnaW46IGF1dGhTdGF0ZS5lZGl0b3JPcmlnaW4KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KSgpLmNhdGNoKChlcnJvcikgPT4gewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBzcGF3bihjb21tYW5kLCBvcHRpb25zT3JBcmdzLCBvcHRpb25zKSB7CiAgICAgICAgbGV0IGFyZ3MgPSBbXTsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zT3JBcmdzKSkgewogICAgICAgICAgYXJncyA9IG9wdGlvbnNPckFyZ3M7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zT3JBcmdzOwogICAgICAgIH0KICAgICAgICBsZXQgb3V0cHV0ID0gdm9pZCAwOwogICAgICAgIGxldCBvdXRwdXRTdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oKTsKICAgICAgICBpZiAob3B0aW9ucz8ub3V0cHV0ICE9PSBmYWxzZSkgewogICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3RyZWFtV2l0aFB1c2goKTsKICAgICAgICAgIG91dHB1dCA9IHJlc3VsdC5wdXNoOwogICAgICAgICAgb3V0cHV0U3RyZWFtID0gcmVzdWx0LnN0cmVhbTsKICAgICAgICB9CiAgICAgICAgbGV0IHN0ZG91dCA9IHZvaWQgMDsKICAgICAgICBsZXQgc3Rkb3V0U3RyZWFtOwogICAgICAgIGxldCBzdGRlcnIgPSB2b2lkIDA7CiAgICAgICAgbGV0IHN0ZGVyclN0cmVhbTsKICAgICAgICBjb25zdCB3cmFwcGVkT3V0cHV0ID0gcHJveHlMaXN0ZW5lcihiaW5hcnlMaXN0ZW5lcihvdXRwdXQpKTsKICAgICAgICBjb25zdCB3cmFwcGVkU3Rkb3V0ID0gcHJveHlMaXN0ZW5lcihiaW5hcnlMaXN0ZW5lcihzdGRvdXQpKTsKICAgICAgICBjb25zdCB3cmFwcGVkU3RkZXJyID0gcHJveHlMaXN0ZW5lcihiaW5hcnlMaXN0ZW5lcihzdGRlcnIpKTsKICAgICAgICBjb25zdCBwcm9jZXNzNCA9IGF3YWl0IHRoaXMuX2luc3RhbmNlLnJ1bih7CiAgICAgICAgICBjb21tYW5kLAogICAgICAgICAgYXJncywKICAgICAgICAgIGN3ZDogb3B0aW9ucz8uY3dkLAogICAgICAgICAgZW52OiBvcHRpb25zPy5lbnYsCiAgICAgICAgICB0ZXJtaW5hbDogb3B0aW9ucz8udGVybWluYWwKICAgICAgICB9LCB3cmFwcGVkU3Rkb3V0LCB3cmFwcGVkU3RkZXJyLCB3cmFwcGVkT3V0cHV0KTsKICAgICAgICByZXR1cm4gbmV3IFdlYkNvbnRhaW5lclByb2Nlc3NJbXBsKHByb2Nlc3M0LCBvdXRwdXRTdHJlYW0sIHN0ZG91dFN0cmVhbSwgc3RkZXJyU3RyZWFtKTsKICAgICAgfQogICAgICBhc3luYyBleHBvcnQocGF0aDIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBzZXJpYWxpemVPcHRpb25zID0gewogICAgICAgICAgZm9ybWF0OiBvcHRpb25zPy5mb3JtYXQgPz8gImpzb24iLAogICAgICAgICAgaW5jbHVkZXM6IG9wdGlvbnM/LmluY2x1ZGVzLAogICAgICAgICAgZXhjbHVkZXM6IG9wdGlvbnM/LmV4Y2x1ZGVzLAogICAgICAgICAgZXh0ZXJuYWw6IHRydWUKICAgICAgICB9OwogICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2luc3RhbmNlLnNlcmlhbGl6ZShwYXRoMiwgc2VyaWFsaXplT3B0aW9ucyk7CiAgICAgICAgaWYgKHNlcmlhbGl6ZU9wdGlvbnMuZm9ybWF0ID09PSAianNvbiIpIHsKICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRlY29kZXIuZGVjb2RlKHJlc3VsdCkpOwogICAgICAgICAgcmV0dXJuIHRvRXh0ZXJuYWxGaWxlU3lzdGVtVHJlZShkYXRhKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICBvbihldmVudCwgbGlzdGVuZXIyKSB7CiAgICAgICAgaWYgKGV2ZW50ID09PSAicHJldmlldy1tZXNzYWdlIikgewogICAgICAgICAgY29uc3Qgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RlbmVyMjsKICAgICAgICAgIGxpc3RlbmVyMiA9ICgobWVzc2FnZTIpID0+IHsKICAgICAgICAgICAgaWYgKGlzUHJldmlld01lc3NhZ2UobWVzc2FnZTIpKSB7CiAgICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lcihtZXNzYWdlMik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBjb25zdCB7IGxpc3RlbmVyOiB3cmFwcGVkLCBzdWJzY3JpYmU6IHN1YnNjcmliZTIgfSA9IHN5bmNTdWJzY3JpcHRpb24obGlzdGVuZXIyKTsKICAgICAgICByZXR1cm4gc3Vic2NyaWJlMih0aGlzLl9pbnN0YW5jZS5vbihldmVudCwgY29tbGlua19leHBvcnRzLnByb3h5KHdyYXBwZWQpKSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIE1vdW50cyBhIHRyZWUgb2YgZmlsZXMgaW50byB0aGUgZmlsZXN5c3RlbS4gVGhpcyBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgdHJlZSBvYmplY3QgKHtAbGluayBGaWxlU3lzdGVtVHJlZX0pCiAgICAgICAqIG9yIGFzIGEgYmluYXJ5IHNuYXBzaG90IGdlbmVyYXRlZCBieSBbYEB3ZWJjb250YWluZXIvc25hcHNob3RgXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9Ad2ViY29udGFpbmVyL3NuYXBzaG90KS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHNuYXBzaG90T3JUcmVlIC0gQSB0cmVlIG9mIGZpbGVzLCBvciBhIGJpbmFyeSBzbmFwc2hvdC4gTm90ZSB0aGF0IGJpbmFyeSBwYXlsb2FkcyB3aWxsIGJlIHRyYW5zZmVycmVkLgogICAgICAgKiBAcGFyYW0gb3B0aW9ucy5tb3VudFBvaW50IC0gU3BlY2lmaWVzIGEgbmVzdGVkIHBhdGggd2hlcmUgdGhlIHRyZWUgc2hvdWxkIGJlIG1vdW50ZWQuCiAgICAgICAqLwogICAgICBtb3VudChzbmFwc2hvdE9yVHJlZSwgb3B0aW9ucykgewogICAgICAgIGNvbnN0IHBheWxvYWQgPSBzbmFwc2hvdE9yVHJlZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPyBzbmFwc2hvdE9yVHJlZSA6IHNuYXBzaG90T3JUcmVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgPyBuZXcgVWludDhBcnJheShzbmFwc2hvdE9yVHJlZSkgOiBlbmNvZGVyLmVuY29kZShKU09OLnN0cmluZ2lmeSh0b0ludGVybmFsRmlsZVN5c3RlbVRyZWUoc25hcHNob3RPclRyZWUpKSk7CiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLmxvYWRGaWxlcyhjb21saW5rX2V4cG9ydHMudHJhbnNmZXIocGF5bG9hZCwgW3BheWxvYWQuYnVmZmVyXSksIHsKICAgICAgICAgIG1vdW50UG9pbnRzOiBvcHRpb25zPy5tb3VudFBvaW50CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNldCBhIGN1c3RvbSBzY3JpcHQgdG8gYmUgaW5qZWN0ZWQgaW50byBhbGwgcHJldmlld3MuIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIGV2ZXJ5CiAgICAgICAqIGZ1dHVyZSBwYWdlIHJlbG9hZCB3aWxsIGNvbnRhaW4gdGhlIHByb3ZpZGVkIHNjcmlwdCB0YWcgb24gYWxsIEhUTUwgcmVzcG9uc2VzLgogICAgICAgKgogICAgICAgKiBOb3RlOgogICAgICAgKgogICAgICAgKiBXaGVuIHRoaXMgZnVuY3Rpb24gcmVzb2x2ZXMsIGV2ZXJ5IHByZXZpZXcgcmVsb2FkZWQgX2FmdGVyXyB3aWxsIGhhdmUgdGhlIG5ldyBzY3JpcHQuCiAgICAgICAqIEV4aXN0aW5nIHByZXZpZXcgaGF2ZSB0byBiZSBleHBsaWNpdGVseSByZWxvYWRlZC4KICAgICAgICoKICAgICAgICogVG8gcmVsb2FkIGEgcHJldmlldyB5b3UgY2FuIHVzZSBgcmVsb2FkUHJldmlld2AuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBzY3JpcHRTcmMgU291cmNlIGZvciB0aGUgc2NyaXB0IHRhZy4KICAgICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyB0byBkZWZpbmUgd2hpY2ggdHlwZSBvZiBzY3JpcHQgdGhpcyBpcy4KICAgICAgICovCiAgICAgIHNldFByZXZpZXdTY3JpcHQoc2NyaXB0U3JjLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLnNldFByZXZpZXdTY3JpcHQoc2NyaXB0U3JjLCBvcHRpb25zKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGBQQVRIYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgcHJvY2Vzc2VzIHN0YXJ0ZWQgdGhyb3VnaCB7QGxpbmsgc3Bhd259LgogICAgICAgKi8KICAgICAgZ2V0IHBhdGgoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bnRpbWVJbmZvLnBhdGg7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSBmdWxsIHBhdGggdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IChzZWUge0BsaW5rIEZpbGVTeXN0ZW1BUEl9KS4KICAgICAgICovCiAgICAgIGdldCB3b3JrZGlyKCkgewogICAgICAgIHJldHVybiB0aGlzLl9ydW50aW1lSW5mby5jd2Q7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIERlc3Ryb3lzIHRoZSBXZWJDb250YWluZXIgaW5zdGFuY2UsIHR1cm5pbmcgaXQgdW51c2FibGUsIGFuZCByZWxlYXNlcyBpdHMgcmVzb3VyY2VzLiBBZnRlciB0aGlzLAogICAgICAgKiBhIG5ldyBXZWJDb250YWluZXIgaW5zdGFuY2UgY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcge0BsaW5rIFdlYkNvbnRhaW5lci5ib290IHwgYGJvb3RgfS4KICAgICAgICoKICAgICAgICogQWxsIGVudGl0aWVzIGRlcml2ZWQgZnJvbSB0aGlzIGluc3RhbmNlIChlLmcuIHByb2Nlc3NlcywgdGhlIGZpbGUgc3lzdGVtLCBldGMuKSBhbHNvIGJlY29tZSB1bnVzYWJsZQogICAgICAgKiBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLgogICAgICAgKi8KICAgICAgdGVhcmRvd24oKSB7CiAgICAgICAgaWYgKHRoaXMuX3Rvcm5Eb3duKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldlYkNvbnRhaW5lciBhbHJlYWR5IHRvcm4gZG93biIpOwogICAgICAgIH0KICAgICAgICB0aGlzLl90b3JuRG93biA9IHRydWU7CiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVGcm9tVG9rZW5DaGFuZ2VkTGlzdGVuZXIoKTsKICAgICAgICBjb25zdCB0ZWFyZG93bkZuID0gYXN5bmMgKCkgPT4gewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5mcy5fdGVhcmRvd24oKTsKICAgICAgICAgICAgYXdhaXQgdGhpcy5faW5zdGFuY2UudGVhcmRvd24oKTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlW2NvbWxpbmtfZXhwb3J0cy5yZWxlYXNlUHJveHldKCk7CiAgICAgICAgICAgIGlmIChfV2ViQ29udGFpbmVyLl9pbnN0YW5jZSA9PT0gdGhpcykgewogICAgICAgICAgICAgIF9XZWJDb250YWluZXIuX2luc3RhbmNlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgX1dlYkNvbnRhaW5lci5fdGVhcmRvd25Qcm9taXNlID0gdGVhcmRvd25GbigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBCb290cyBhIFdlYkNvbnRhaW5lci4gT25seSBhIHNpbmdsZSBpbnN0YW5jZSBvZiBXZWJDb250YWluZXIgY2FuIGJlIGJvb3RlZCBjb25jdXJyZW50bHkKICAgICAgICogKHNlZSB7QGxpbmsgV2ViQ29udGFpbmVyLnRlYXJkb3duIHwgYHRlYXJkb3duYH0pLgogICAgICAgKgogICAgICAgKiBCb290aW5nIFdlYkNvbnRhaW5lciBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uLgogICAgICAgKi8KICAgICAgc3RhdGljIGFzeW5jIGJvb3Qob3B0aW9ucyA9IHt9KSB7CiAgICAgICAgYXdhaXQgdGhpcy5fdGVhcmRvd25Qcm9taXNlOwogICAgICAgIF9XZWJDb250YWluZXIuX3RlYXJkb3duUHJvbWlzZSA9IG51bGw7CiAgICAgICAgY29uc3QgeyB3b3JrZGlyTmFtZSB9ID0gb3B0aW9uczsKICAgICAgICBpZiAod2luZG93LmNyb3NzT3JpZ2luSXNvbGF0ZWQgJiYgb3B0aW9ucy5jb2VwID09PSAibm9uZSIpIHsKICAgICAgICAgIGNvbnNvbGUud2FybihgQSBDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5IGhlYWRlciBpcyByZXF1aXJlZCBpbiBjcm9zcyBvcmlnaW4gaXNvbGF0ZWQgZW52aXJvbm1lbnRzLgpTZXQgdGhlICdjb2VwJyBvcHRpb24gdG8gJ3JlcXVpcmUtY29ycCcuYCk7CiAgICAgICAgfQogICAgICAgIGlmICh3b3JrZGlyTmFtZT8uaW5jbHVkZXMoIi8iKSB8fCB3b3JrZGlyTmFtZSA9PT0gIi4uIiB8fCB3b3JrZGlyTmFtZSA9PT0gIi4iKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIndvcmtkaXJOYW1lIHNob3VsZCBiZSBhIHZhbGlkIGZvbGRlciBuYW1lIik7CiAgICAgICAgfQogICAgICAgIGF1dGhTdGF0ZS5ib290Q2FsbGVkID0gdHJ1ZTsKICAgICAgICB3aGlsZSAoYm9vdFByb21pc2UpIHsKICAgICAgICAgIGF3YWl0IGJvb3RQcm9taXNlOwogICAgICAgIH0KICAgICAgICBpZiAoX1dlYkNvbnRhaW5lci5faW5zdGFuY2UpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiT25seSBhIHNpbmdsZSBXZWJDb250YWluZXIgaW5zdGFuY2UgY2FuIGJlIGJvb3RlZCIpOwogICAgICAgIH0KICAgICAgICBjb25zdCBpbnN0YW5jZVByb21pc2UgPSB1bnN5bmNocm9uaXplZEJvb3Qob3B0aW9ucyk7CiAgICAgICAgYm9vdFByb21pc2UgPSBpbnN0YW5jZVByb21pc2UuY2F0Y2goKCkgPT4gewogICAgICAgIH0pOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGF3YWl0IGluc3RhbmNlUHJvbWlzZTsKICAgICAgICAgIF9XZWJDb250YWluZXIuX2luc3RhbmNlID0gaW5zdGFuY2U7CiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIGJvb3RQcm9taXNlID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBESVJfRU5UUllfVFlQRV9GSUxFID0gMTsKICAgIERJUl9FTlRSWV9UWVBFX0RJUiA9IDI7CiAgICBEaXJFbnRJbXBsID0gY2xhc3MgewogICAgICBuYW1lOwogICAgICBfdHlwZTsKICAgICAgY29uc3RydWN0b3IobmFtZSwgX3R5cGUpIHsKICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgIHRoaXMuX3R5cGUgPSBfdHlwZTsKICAgICAgfQogICAgICBpc0ZpbGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgPT09IERJUl9FTlRSWV9UWVBFX0ZJTEU7CiAgICAgIH0KICAgICAgaXNEaXJlY3RvcnkoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgPT09IERJUl9FTlRSWV9UWVBFX0RJUjsKICAgICAgfQogICAgfTsKICAgIEZTV2F0Y2hlciA9IGNsYXNzIHsKICAgICAgX2FwaUNsaWVudDsKICAgICAgX3BhdGg7CiAgICAgIF9vcHRpb25zOwogICAgICBfbGlzdGVuZXI7CiAgICAgIF93cmFwcGVkTGlzdGVuZXI7CiAgICAgIF93YXRjaGVyOwogICAgICBfY2xvc2VkID0gZmFsc2U7CiAgICAgIGNvbnN0cnVjdG9yKF9hcGlDbGllbnQsIF9wYXRoLCBfb3B0aW9ucywgX2xpc3RlbmVyMikgewogICAgICAgIHRoaXMuX2FwaUNsaWVudCA9IF9hcGlDbGllbnQ7CiAgICAgICAgdGhpcy5fcGF0aCA9IF9wYXRoOwogICAgICAgIHRoaXMuX29wdGlvbnMgPSBfb3B0aW9uczsKICAgICAgICB0aGlzLl9saXN0ZW5lciA9IF9saXN0ZW5lcjI7CiAgICAgICAgdGhpcy5fYXBpQ2xpZW50Ll93YXRjaGVycy5hZGQodGhpcyk7CiAgICAgICAgdGhpcy5fd3JhcHBlZExpc3RlbmVyID0gKGV2ZW50LCBmaWxlbmFtZSkgPT4gewogICAgICAgICAgaWYgKHRoaXMuX2xpc3RlbmVyICYmICF0aGlzLl9jbG9zZWQpIHsKICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXIoZXZlbnQsIGZpbGVuYW1lKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHRoaXMuX2FwaUNsaWVudC5fZnMud2F0Y2godGhpcy5fcGF0aCwgdGhpcy5fb3B0aW9ucywgcHJveHlMaXN0ZW5lcih0aGlzLl93cmFwcGVkTGlzdGVuZXIpKS50aGVuKChfd2F0Y2hlcikgPT4gewogICAgICAgICAgdGhpcy5fd2F0Y2hlciA9IF93YXRjaGVyOwogICAgICAgICAgaWYgKHRoaXMuX2Nsb3NlZCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5fdGVhcmRvd24oKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgICAgfSkuY2F0Y2goY29uc29sZS5lcnJvcik7CiAgICAgIH0KICAgICAgYXN5bmMgY2xvc2UoKSB7CiAgICAgICAgaWYgKCF0aGlzLl9jbG9zZWQpIHsKICAgICAgICAgIHRoaXMuX2Nsb3NlZCA9IHRydWU7CiAgICAgICAgICB0aGlzLl9hcGlDbGllbnQuX3dhdGNoZXJzLmRlbGV0ZSh0aGlzKTsKICAgICAgICAgIGF3YWl0IHRoaXMuX3RlYXJkb3duKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBAaW50ZXJuYWwKICAgICAgICovCiAgICAgIGFzeW5jIF90ZWFyZG93bigpIHsKICAgICAgICBhd2FpdCB0aGlzLl93YXRjaGVyPy5jbG9zZSgpLmZpbmFsbHkoKCkgPT4gewogICAgICAgICAgdGhpcy5fd2F0Y2hlcj8uW2NvbWxpbmtfZXhwb3J0cy5yZWxlYXNlUHJveHldKCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBXZWJDb250YWluZXJQcm9jZXNzSW1wbCA9IGNsYXNzIHsKICAgICAgb3V0cHV0OwogICAgICBpbnB1dDsKICAgICAgZXhpdDsKICAgICAgX3Byb2Nlc3M7CiAgICAgIHN0ZG91dDsKICAgICAgc3RkZXJyOwogICAgICBjb25zdHJ1Y3Rvcihwcm9jZXNzNCwgb3V0cHV0LCBzdGRvdXQsIHN0ZGVycikgewogICAgICAgIHRoaXMub3V0cHV0ID0gb3V0cHV0OwogICAgICAgIHRoaXMuX3Byb2Nlc3MgPSBwcm9jZXNzNDsKICAgICAgICB0aGlzLmlucHV0ID0gbmV3IFdyaXRhYmxlU3RyZWFtKHsKICAgICAgICAgIHdyaXRlOiAoZGF0YSkgPT4gewogICAgICAgICAgICB0aGlzLl9nZXRQcm9jZXNzKCk/LndyaXRlKGRhdGEpLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5leGl0ID0gdGhpcy5fb25FeGl0KCk7CiAgICAgICAgdGhpcy5zdGRvdXQgPSBzdGRvdXQ7CiAgICAgICAgdGhpcy5zdGRlcnIgPSBzdGRlcnI7CiAgICAgIH0KICAgICAga2lsbCgpIHsKICAgICAgICB0aGlzLl9wcm9jZXNzPy5raWxsKCk7CiAgICAgIH0KICAgICAgcmVzaXplKGRpbWVuc2lvbnMpIHsKICAgICAgICB0aGlzLl9nZXRQcm9jZXNzKCk/LnJlc2l6ZShkaW1lbnNpb25zKTsKICAgICAgfQogICAgICBhc3luYyBfb25FeGl0KCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcHJvY2Vzcy5vbkV4aXQ7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIHRoaXMuX3Byb2Nlc3M/Lltjb21saW5rX2V4cG9ydHMucmVsZWFzZVByb3h5XSgpOwogICAgICAgICAgdGhpcy5fcHJvY2VzcyA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIF9nZXRQcm9jZXNzKCkgewogICAgICAgIGlmICh0aGlzLl9wcm9jZXNzID09IG51bGwpIHsKICAgICAgICAgIGNvbnNvbGUud2FybigiVGhpcyBwcm9jZXNzIGFscmVhZHkgZXhpdGVkIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzOwogICAgICB9CiAgICB9OwogICAgRmlsZVN5c3RlbUFQSUNsaWVudCA9IGNsYXNzIHsKICAgICAgX2ZzOwogICAgICBfd2F0Y2hlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbXSk7CiAgICAgIGNvbnN0cnVjdG9yKGZzKSB7CiAgICAgICAgdGhpcy5fZnMgPSBmczsKICAgICAgfQogICAgICBybSguLi5hcmdzKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2ZzLnJtKC4uLmFyZ3MpOwogICAgICB9CiAgICAgIGFzeW5jIHJlYWRGaWxlKHBhdGgyLCBlbmNvZGluZykgewogICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9mcy5yZWFkRmlsZShwYXRoMiwgZW5jb2RpbmcpOwogICAgICB9CiAgICAgIGFzeW5jIHJlbmFtZShvbGRQYXRoLCBuZXdQYXRoKSB7CiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2ZzLnJlbmFtZShvbGRQYXRoLCBuZXdQYXRoKTsKICAgICAgfQogICAgICBhc3luYyB3cml0ZUZpbGUocGF0aDIsIGRhdGEsIG9wdGlvbnMpIHsKICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgICAgICAgIGNvbnN0IGJ1ZmZlcjIgPSBkYXRhLmJ1ZmZlci5zbGljZShkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZU9mZnNldCArIGRhdGEuYnl0ZUxlbmd0aCk7CiAgICAgICAgICBkYXRhID0gY29tbGlua19leHBvcnRzLnRyYW5zZmVyKG5ldyBVaW50OEFycmF5KGJ1ZmZlcjIpLCBbYnVmZmVyMl0pOwogICAgICAgIH0KICAgICAgICBhd2FpdCB0aGlzLl9mcy53cml0ZUZpbGUocGF0aDIsIGRhdGEsIG9wdGlvbnMpOwogICAgICB9CiAgICAgIGFzeW5jIHJlYWRkaXIocGF0aDIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9mcy5yZWFkZGlyKHBhdGgyLCBvcHRpb25zKTsKICAgICAgICBpZiAoaXNTdHJpbmdBcnJheShyZXN1bHQpKSB7CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgICBpZiAoaXNUeXBlZEFycmF5Q29sbGVjdGlvbihyZXN1bHQpKSB7CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgICBjb25zdCBlbnRyaWVzID0gcmVzdWx0Lm1hcCgoZW50cnkpID0+IG5ldyBEaXJFbnRJbXBsKGVudHJ5Lm5hbWUsIGVudHJ5WyJTeW1ib2wodHlwZSkiXSkpOwogICAgICAgIHJldHVybiBlbnRyaWVzOwogICAgICB9CiAgICAgIGFzeW5jIG1rZGlyKHBhdGgyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2ZzLm1rZGlyKHBhdGgyLCBvcHRpb25zKTsKICAgICAgfQogICAgICB3YXRjaChwYXRoMiwgb3B0aW9ucywgbGlzdGVuZXIyKSB7CiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBsaXN0ZW5lcjIgPSBvcHRpb25zOwogICAgICAgICAgb3B0aW9ucyA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgRlNXYXRjaGVyKHRoaXMsIHBhdGgyLCBvcHRpb25zLCBsaXN0ZW5lcjIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBAaW50ZXJuYWwKICAgICAgICovCiAgICAgIGFzeW5jIF90ZWFyZG93bigpIHsKICAgICAgICB0aGlzLl9mc1tjb21saW5rX2V4cG9ydHMucmVsZWFzZVByb3h5XSgpOwogICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFsuLi50aGlzLl93YXRjaGVyc10ubWFwKCh3YXRjaGVyKSA9PiB3YXRjaGVyLmNsb3NlKCkpKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvZW52aXJvbm1lbnRzL1dlYkNvbnRhaW5lckVudmlyb25tZW50LmpzCnZhciBXZWJDb250YWluZXJFbnZpcm9ubWVudDsKdmFyIGluaXRfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2Vudmlyb25tZW50cy9XZWJDb250YWluZXJFbnZpcm9ubWVudC5qcyIoKSB7CiAgICBpbml0X2Rpc3QoKTsKICAgIFdlYkNvbnRhaW5lckVudmlyb25tZW50ID0gY2xhc3MgX1dlYkNvbnRhaW5lckVudmlyb25tZW50IHsKICAgICAgLy8gU3RhdGljIHNoYXJlZCBzdGF0ZSAtIFdlYkNvbnRhaW5lciBvbmx5IGFsbG93cyBPTkUgYm9vdCBwZXIgcGFnZQogICAgICBzdGF0aWMgc2hhcmVkQ29udGFpbmVyID0gbnVsbDsKICAgICAgc3RhdGljIGJvb3RQcm9taXNlID0gbnVsbDsKICAgICAgX3JlYWR5ID0gZmFsc2U7CiAgICAgIHR5cGUgPSAid2ViY29udGFpbmVyIjsKICAgICAgZ2V0IHJlYWR5KCkgewogICAgICAgIHJldHVybiB0aGlzLl9yZWFkeTsKICAgICAgfQogICAgICBnZXQgY29udGFpbmVyKCkgewogICAgICAgIHJldHVybiBfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuc2hhcmVkQ29udGFpbmVyOwogICAgICB9CiAgICAgIC8vID09PT09PT09PT09PSBMaWZlY3ljbGUgPT09PT09PT09PT09CiAgICAgIGFzeW5jIGluaXQoKSB7CiAgICAgICAgaWYgKHRoaXMuX3JlYWR5ICYmIF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5zaGFyZWRDb250YWluZXIpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5ib290UHJvbWlzZSkgewogICAgICAgICAgYXdhaXQgX1dlYkNvbnRhaW5lckVudmlyb25tZW50LmJvb3RQcm9taXNlOwogICAgICAgICAgdGhpcy5fcmVhZHkgPSB0cnVlOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoX1dlYkNvbnRhaW5lckVudmlyb25tZW50LnNoYXJlZENvbnRhaW5lcikgewogICAgICAgICAgdGhpcy5fcmVhZHkgPSB0cnVlOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAidW5kZWZpbmVkIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXZWJDb250YWluZXIgcmVxdWlyZXMgU2hhcmVkQXJyYXlCdWZmZXIgd2hpY2ggaXMgbm90IGF2YWlsYWJsZS4gRW5zdXJlIHlvdXIgc2VydmVyIHNlbmRzIHRoZXNlIGhlYWRlcnM6XG4gIENyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5OiBzYW1lLW9yaWdpblxuICBDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5OiByZXF1aXJlLWNvcnAiKTsKICAgICAgICB9CiAgICAgICAgX1dlYkNvbnRhaW5lckVudmlyb25tZW50LmJvb3RQcm9taXNlID0gV2ViQ29udGFpbmVyLmJvb3QoKTsKICAgICAgICB0cnkgewogICAgICAgICAgX1dlYkNvbnRhaW5lckVudmlyb25tZW50LnNoYXJlZENvbnRhaW5lciA9IGF3YWl0IF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5ib290UHJvbWlzZTsKICAgICAgICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgX1dlYkNvbnRhaW5lckVudmlyb25tZW50LmJvb3RQcm9taXNlID0gbnVsbDsKICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBkZXN0cm95KCkgewogICAgICAgIGlmIChfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuc2hhcmVkQ29udGFpbmVyKSB7CiAgICAgICAgICBfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuc2hhcmVkQ29udGFpbmVyLnRlYXJkb3duKCk7CiAgICAgICAgICBfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuc2hhcmVkQ29udGFpbmVyID0gbnVsbDsKICAgICAgICAgIF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5ib290UHJvbWlzZSA9IG51bGw7CiAgICAgICAgICB0aGlzLl9yZWFkeSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyA9PT09PT09PT09PT0gRmlsZXN5c3RlbSBPcGVyYXRpb25zID09PT09PT09PT09PQogICAgICBhc3luYyByZWFkRmlsZShwYXRoMikgewogICAgICAgIHRoaXMuZW5zdXJlUmVhZHkoKTsKICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb250YWluZXIuZnMucmVhZEZpbGUocGF0aDIsICJ1dGYtOCIpOwogICAgICB9CiAgICAgIGFzeW5jIHdyaXRlRmlsZShwYXRoMiwgY29udGVudHMpIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgYXdhaXQgdGhpcy5jb250YWluZXIuZnMud3JpdGVGaWxlKHBhdGgyLCBjb250ZW50cywgInV0Zi04Iik7CiAgICAgIH0KICAgICAgYXN5bmMgcmVhZERpcihwYXRoMikgewogICAgICAgIHRoaXMuZW5zdXJlUmVhZHkoKTsKICAgICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5jb250YWluZXIuZnMucmVhZGRpcihwYXRoMiwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pOwogICAgICAgIHJldHVybiBlbnRyaWVzLm1hcCgoZW50cnkpID0+ICh7CiAgICAgICAgICB0eXBlOiBlbnRyeS5pc0RpcmVjdG9yeSgpID8gImRpcmVjdG9yeSIgOiAiZmlsZSIsCiAgICAgICAgICBuYW1lOiBlbnRyeS5uYW1lLAogICAgICAgICAgcGF0aDogcGF0aDIgPT09ICIvIiA/IGAvJHtlbnRyeS5uYW1lfWAgOiBgJHtwYXRoMn0vJHtlbnRyeS5uYW1lfWAKICAgICAgICB9KSk7CiAgICAgIH0KICAgICAgYXN5bmMgbWtkaXIocGF0aDIpIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgYXdhaXQgdGhpcy5jb250YWluZXIuZnMubWtkaXIocGF0aDIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pOwogICAgICB9CiAgICAgIGFzeW5jIHJtKHBhdGgyLCBvcHRpb25zKSB7CiAgICAgICAgdGhpcy5lbnN1cmVSZWFkeSgpOwogICAgICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLnJtKHBhdGgyLCB7IHJlY3Vyc2l2ZTogb3B0aW9ucz8ucmVjdXJzaXZlID8/IGZhbHNlIH0pOwogICAgICB9CiAgICAgIGFzeW5jIGV4aXN0cyhwYXRoMikgewogICAgICAgIHRoaXMuZW5zdXJlUmVhZHkoKTsKICAgICAgICB0cnkgewogICAgICAgICAgYXdhaXQgdGhpcy5jb250YWluZXIuZnMucmVhZEZpbGUocGF0aDIpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBhd2FpdCB0aGlzLmNvbnRhaW5lci5mcy5yZWFkZGlyKHBhdGgyKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICB3YXRjaChwYXRoMiwgY2FsbGJhY2ssIG9wdGlvbnMpIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgY29uc3Qgd2F0Y2hlciA9IHRoaXMuY29udGFpbmVyLmZzLndhdGNoKHBhdGgyLCB7IHJlY3Vyc2l2ZTogb3B0aW9ucz8ucmVjdXJzaXZlID8/IGZhbHNlIH0sIGNhbGxiYWNrKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgc3RvcDogKCkgPT4gd2F0Y2hlci5jbG9zZSgpCiAgICAgICAgfTsKICAgICAgfQogICAgICAvLyA9PT09PT09PT09PT0gUHJvY2VzcyBFeGVjdXRpb24gPT09PT09PT09PT09CiAgICAgIGFzeW5jIHNwYXduKGNvbW1hbmQsIGFyZ3MgPSBbXSkgewogICAgICAgIHRoaXMuZW5zdXJlUmVhZHkoKTsKICAgICAgICBjb25zdCBwcm9jZXNzNCA9IGF3YWl0IHRoaXMuY29udGFpbmVyLnNwYXduKGNvbW1hbmQsIGFyZ3MpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBvdXRwdXQ6IHByb2Nlc3M0Lm91dHB1dCwKICAgICAgICAgIGlucHV0OiBwcm9jZXNzNC5pbnB1dCwKICAgICAgICAgIGV4aXQ6IHByb2Nlc3M0LmV4aXQsCiAgICAgICAgICBraWxsOiAoKSA9PiBwcm9jZXNzNC5raWxsKCkKICAgICAgICB9OwogICAgICB9CiAgICAgIC8vID09PT09PT09PT09PSBXZWJDb250YWluZXItc3BlY2lmaWMgbWV0aG9kcyA9PT09PT09PT09PT0KICAgICAgLyoqCiAgICAgICAqIE1vdW50IGZpbGVzIGludG8gdGhlIHZpcnR1YWwgZmlsZXN5c3RlbS4KICAgICAgICogVGhpcyBpcyBhIFdlYkNvbnRhaW5lci1zcGVjaWZpYyBvcGVyYXRpb24uCiAgICAgICAqIEBwYXJhbSBmaWxlcyAtIEZpbGUgdHJlZSBzdHJ1Y3R1cmUgdG8gbW91bnQKICAgICAgICovCiAgICAgIGFzeW5jIG1vdW50KGZpbGVzKSB7CiAgICAgICAgdGhpcy5lbnN1cmVSZWFkeSgpOwogICAgICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLm1vdW50KGZpbGVzKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSB1bmRlcmx5aW5nIFdlYkNvbnRhaW5lciBpbnN0YW5jZS4KICAgICAgICogVXNlIHNwYXJpbmdseSAtIHByZWZlciB0aGUgaW50ZXJmYWNlIG1ldGhvZHMuCiAgICAgICAqLwogICAgICBnZXRDb250YWluZXIoKSB7CiAgICAgICAgdGhpcy5lbnN1cmVSZWFkeSgpOwogICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjsKICAgICAgfQogICAgICAvLyA9PT09PT09PT09PT0gUHJpdmF0ZSBIZWxwZXJzID09PT09PT09PT09PQogICAgICBlbnN1cmVSZWFkeSgpIHsKICAgICAgICBpZiAoIXRoaXMuX3JlYWR5IHx8ICF0aGlzLmNvbnRhaW5lcikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXZWJDb250YWluZXJFbnZpcm9ubWVudCBub3QgaW5pdGlhbGl6ZWQuIENhbGwgaW5pdCgpIGZpcnN0LiIpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvZW52aXJvbm1lbnRzL2luZGV4LmpzCnZhciBpbml0X2Vudmlyb25tZW50cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvZW52aXJvbm1lbnRzL2luZGV4LmpzIigpIHsKICAgIGluaXRfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvaW5kZXguanMKdmFyIGluaXRfZ3JvdXBfcnVudGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvaW5kZXguanMiKCkgewogICAgaW5pdF9pbnRlcmZhY2VzMygpOwogICAgaW5pdF9lbnZpcm9ubWVudHMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWFjdGlvbmJhci9kZWVzLWFjdGlvbmJhci5qcwp2YXIgX19lc0RlY29yYXRlNTAsIF9fcnVuSW5pdGlhbGl6ZXJzNTEsIERlZXNBY3Rpb25iYXI7CnZhciBpbml0X2RlZXNfYWN0aW9uYmFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtYWN0aW9uYmFyL2RlZXMtYWN0aW9uYmFyLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI2KCk7CiAgICBpbml0X3RoZW1lKCk7CiAgICBpbml0X2RlZXNfaWNvbigpOwogICAgX19lc0RlY29yYXRlNTAgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM1MSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0FjdGlvbmJhciA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWFjdGlvbmJhciIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfY3VycmVudEJhcl9kZWNvcmF0b3JzOwogICAgICBsZXQgX2N1cnJlbnRCYXJfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY3VycmVudEJhcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RpbWVSZW1haW5pbmdfZGVjb3JhdG9yczsKICAgICAgbGV0IF90aW1lUmVtYWluaW5nX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RpbWVSZW1haW5pbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9wcm9ncmVzc1BlcmNlbnRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9wcm9ncmVzc1BlcmNlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcHJvZ3Jlc3NQZXJjZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaXNWaXNpYmxlX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaXNWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc0FjdGlvbmJhcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9jdXJyZW50QmFyX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfdGltZVJlbWFpbmluZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3Byb2dyZXNzUGVyY2VudF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2lzVmlzaWJsZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX19lc0RlY29yYXRlNTAodGhpcywgbnVsbCwgX2N1cnJlbnRCYXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VycmVudEJhciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudEJhciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50QmFyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouY3VycmVudEJhciA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudEJhcl9pbml0aWFsaXplcnMsIF9jdXJyZW50QmFyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUwKHRoaXMsIG51bGwsIF90aW1lUmVtYWluaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRpbWVSZW1haW5pbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRpbWVSZW1haW5pbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGltZVJlbWFpbmluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnRpbWVSZW1haW5pbmcgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RpbWVSZW1haW5pbmdfaW5pdGlhbGl6ZXJzLCBfdGltZVJlbWFpbmluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MCh0aGlzLCBudWxsLCBfcHJvZ3Jlc3NQZXJjZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInByb2dyZXNzUGVyY2VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicHJvZ3Jlc3NQZXJjZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnByb2dyZXNzUGVyY2VudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnByb2dyZXNzUGVyY2VudCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcHJvZ3Jlc3NQZXJjZW50X2luaXRpYWxpemVycywgX3Byb2dyZXNzUGVyY2VudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MCh0aGlzLCBudWxsLCBfaXNWaXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzVmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNWaXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzVmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmlzVmlzaWJsZSA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNWaXNpYmxlX2luaXRpYWxpemVycywgX2lzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzQWN0aW9uYmFyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICAvLyBTVEFUSUMKICAgICAgICBzdGF0aWMgZGVtbyA9ICgpID0+IHsKICAgICAgICAgIGNvbnN0IGdldEFjdGlvbmJhciA9IChlMTEpID0+IHsKICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZTExLmN1cnJlbnRUYXJnZXQ7CiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGJ1dHRvbi5jbG9zZXN0KCIuZGVtby1jb250YWluZXIiKTsKICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcj8ucXVlcnlTZWxlY3RvcigiZGVlcy1hY3Rpb25iYXIiKTsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCBzaG93QWN0aW9uQmFyID0gYXN5bmMgKGUxMSkgPT4gewogICAgICAgICAgICBjb25zdCBhY3Rpb25iYXIgPSBnZXRBY3Rpb25iYXIoZTExKTsKICAgICAgICAgICAgaWYgKCFhY3Rpb25iYXIpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhY3Rpb25iYXIuc2hvdyh7CiAgICAgICAgICAgICAgbWVzc2FnZTogIkZpbGUgY2hhbmdlZCBleHRlcm5hbGx5LiBSZWxvYWQ/IiwKICAgICAgICAgICAgICB0eXBlOiAid2FybmluZyIsCiAgICAgICAgICAgICAgaWNvbjogImx1Y2lkZTphbGVydFRyaWFuZ2xlIiwKICAgICAgICAgICAgICBhY3Rpb25zOiBbCiAgICAgICAgICAgICAgICB7IGlkOiAicmVsb2FkIiwgbGFiZWw6ICJSZWxvYWQiLCBwcmltYXJ5OiB0cnVlIH0sCiAgICAgICAgICAgICAgICB7IGlkOiAiaWdub3JlIiwgbGFiZWw6ICJJZ25vcmUiIH0KICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgIHRpbWVvdXQ6IHsgZHVyYXRpb246IDVlMywgZGVmYXVsdEFjdGlvbklkOiAicmVsb2FkIiB9LAogICAgICAgICAgICAgIGRpc21pc3NpYmxlOiB0cnVlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zb2xlLmxvZygiQWN0aW9uIGJhciByZXN1bHQ6IiwgcmVzdWx0KTsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCBzaG93RXJyb3JCYXIgPSBhc3luYyAoZTExKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGFjdGlvbmJhciA9IGdldEFjdGlvbmJhcihlMTEpOwogICAgICAgICAgICBpZiAoIWFjdGlvbmJhcikKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFjdGlvbmJhci5zaG93KHsKICAgICAgICAgICAgICBtZXNzYWdlOiAiUHJvY2VzcyBmYWlsZWQgd2l0aCBleGl0IGNvZGUgMSIsCiAgICAgICAgICAgICAgdHlwZTogImVycm9yIiwKICAgICAgICAgICAgICBpY29uOiAibHVjaWRlOnhDaXJjbGUiLAogICAgICAgICAgICAgIGFjdGlvbnM6IFsKICAgICAgICAgICAgICAgIHsgaWQ6ICJyZXRyeSIsIGxhYmVsOiAiUmV0cnkiLCBwcmltYXJ5OiB0cnVlIH0sCiAgICAgICAgICAgICAgICB7IGlkOiAiZGlzbWlzcyIsIGxhYmVsOiAiRGlzbWlzcyIgfQogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgdGltZW91dDogeyBkdXJhdGlvbjogMWU0LCBkZWZhdWx0QWN0aW9uSWQ6ICJkaXNtaXNzIiB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zb2xlLmxvZygiRXJyb3IgYmFyIHJlc3VsdDoiLCByZXN1bHQpOwogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IHNob3dRdWVzdGlvbkJhciA9IGFzeW5jIChlMTEpID0+IHsKICAgICAgICAgICAgY29uc3QgYWN0aW9uYmFyID0gZ2V0QWN0aW9uYmFyKGUxMSk7CiAgICAgICAgICAgIGlmICghYWN0aW9uYmFyKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWN0aW9uYmFyLnNob3coewogICAgICAgICAgICAgIG1lc3NhZ2U6ICJTYXZlIGNoYW5nZXMgYmVmb3JlIGNsb3Npbmc/IiwKICAgICAgICAgICAgICB0eXBlOiAicXVlc3Rpb24iLAogICAgICAgICAgICAgIGljb246ICJsdWNpZGU6aGVscENpcmNsZSIsCiAgICAgICAgICAgICAgYWN0aW9uczogWwogICAgICAgICAgICAgICAgeyBpZDogInNhdmUiLCBsYWJlbDogIlNhdmUiLCBwcmltYXJ5OiB0cnVlIH0sCiAgICAgICAgICAgICAgICB7IGlkOiAiZGlzY2FyZCIsIGxhYmVsOiAiRGlzY2FyZCIgfSwKICAgICAgICAgICAgICAgIHsgaWQ6ICJjYW5jZWwiLCBsYWJlbDogIkNhbmNlbCIgfQogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJRdWVzdGlvbiBiYXIgcmVzdWx0OiIsIHJlc3VsdCk7CiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzM7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KICAgICAgICAuZGVtby1jb250ZW50IHsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb250ZW50Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHtzaG93QWN0aW9uQmFyfT5XYXJuaW5nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHtzaG93RXJyb3JCYXJ9PkVycm9yPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHtzaG93UXVlc3Rpb25CYXJ9PlF1ZXN0aW9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGVlcy1hY3Rpb25iYXI+PC9kZWVzLWFjdGlvbmJhcj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH07CiAgICAgICAgLy8gUXVldWUgb2YgcGVuZGluZyBhY3Rpb24gYmFycwogICAgICAgIHF1ZXVlID0gW107CiAgICAgICAgI2N1cnJlbnRCYXJfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTEodGhpcywgX2N1cnJlbnRCYXJfaW5pdGlhbGl6ZXJzLCBudWxsKTsKICAgICAgICAvLyBDdXJyZW50IGFjdGl2ZSBiYXIgc3RhdGUKICAgICAgICBnZXQgY3VycmVudEJhcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNjdXJyZW50QmFyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBjdXJyZW50QmFyKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jY3VycmVudEJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdGltZVJlbWFpbmluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTEodGhpcywgX2N1cnJlbnRCYXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUxKHRoaXMsIF90aW1lUmVtYWluaW5nX2luaXRpYWxpemVycywgMCkpOwogICAgICAgIGdldCB0aW1lUmVtYWluaW5nKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3RpbWVSZW1haW5pbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHRpbWVSZW1haW5pbmcodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0aW1lUmVtYWluaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNwcm9ncmVzc1BlcmNlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUxKHRoaXMsIF90aW1lUmVtYWluaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1MSh0aGlzLCBfcHJvZ3Jlc3NQZXJjZW50X2luaXRpYWxpemVycywgMTAwKSk7CiAgICAgICAgZ2V0IHByb2dyZXNzUGVyY2VudCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNwcm9ncmVzc1BlcmNlbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHByb2dyZXNzUGVyY2VudCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3Byb2dyZXNzUGVyY2VudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaXNWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1MSh0aGlzLCBfcHJvZ3Jlc3NQZXJjZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1MSh0aGlzLCBfaXNWaXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgICAgICBnZXQgaXNWaXNpYmxlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2lzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgaXNWaXNpYmxlKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaXNWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vIFRpbWVvdXQgaGFuZGxpbmcKICAgICAgICB0aW1lb3V0SW50ZXJ2YWwgPSAoX19ydW5Jbml0aWFsaXplcnM1MSh0aGlzLCBfaXNWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAgICAgY3VycmVudFJlc29sdmUgPSBudWxsOwogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5hY3Rpb25iYXItaXRlbSB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDBmcjsKICAgICAgICB0cmFuc2l0aW9uOiBncmlkLXRlbXBsYXRlLXJvd3MgMC4ycyBlYXNlLW91dDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsICJoc2woMCAwJSAxMiUpIil9OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICB9CgogICAgICA6aG9zdCgudmlzaWJsZSkgLmFjdGlvbmJhci1pdGVtIHsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjsKICAgICAgfQoKICAgICAgLmFjdGlvbmJhci1jb250ZW50IHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZS1vdXQ7CiAgICAgIH0KCiAgICAgIDpob3N0KC52aXNpYmxlKSAuYWN0aW9uYmFyLWNvbnRlbnQgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzcy1iYXIgewogICAgICAgIGhlaWdodDogM3B4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDE4JSkiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnByb2dyZXNzLWJhci1maWxsIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA1MCUpIiwgImhzbCgyMTAgMTAwJSA2MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMXMgbGluZWFyOwogICAgICB9CgogICAgICAucHJvZ3Jlc3MtYmFyLWZpbGwud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgzOCA5MiUgNTAlKSIsICJoc2woMzggOTIlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzcy1iYXItZmlsbC5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcwJSA1MCUpIiwgImhzbCgwIDcwJSA1NSUpIil9OwogICAgICB9CgogICAgICAucHJvZ3Jlc3MtYmFyLWZpbGwucXVlc3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjcwIDcwJSA1MCUpIiwgImhzbCgyNzAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5jb250ZW50IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDMycHg7CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLXNlY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLm1lc3NhZ2UtaWNvbiB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24uaW5mbyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNDUlKSIsICJoc2woMjEwIDEwMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLm1lc3NhZ2UtaWNvbi53YXJuaW5nIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgzOCA5MiUgNDUlKSIsICJoc2woMzggOTIlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24uZXJyb3IgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24ucXVlc3Rpb24gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI3MCA3MCUgNTAlKSIsICJoc2woMjcwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICAubWVzc2FnZS10ZXh0IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDg1JSkiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAuYWN0aW9ucy1zZWN0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDEwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5zZWNvbmRhcnkgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA3MCUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDgwJSkiLCAiaHNsKDAgMCUgMzAlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uc2Vjb25kYXJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTIlKSIsICJoc2woMCAwJSAxOCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDUwJSkiLCAiaHNsKDIxMCAxMDAlIDU1JSkiKX07CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDQ1JSkiLCAiaHNsKDIxMCAxMDAlIDUwJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnByaW1hcnkud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgzOCA5MiUgNDUlKSIsICJoc2woMzggOTIlIDUwJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnByaW1hcnkud2FybmluZzpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgzOCA5MiUgNDAlKSIsICJoc2woMzggOTIlIDQ1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnByaW1hcnkuZXJyb3IgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MCUgNTAlKSIsICJoc2woMCA3MCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24ucHJpbWFyeS5lcnJvcjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcwJSA0NSUpIiwgImhzbCgwIDcwJSA1MCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5LnF1ZXN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI3MCA3MCUgNTAlKSIsICJoc2woMjcwIDcwJSA1NSUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5LnF1ZXN0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI3MCA3MCUgNDUlKSIsICJoc2woMjcwIDcwJSA1MCUpIil9OwogICAgICB9CgogICAgICAuY291bnRkb3duIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIC5kaXNtaXNzLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA1MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuZGlzbWlzcy1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwgImhzbCgwIDAlIDIyJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzMCUpIiwgImhzbCgwIDAlIDcwJSkiKX07CiAgICAgIH0KICAgIGAKICAgICAgICBdOwogICAgICAgIHJlbmRlcigpIHsKICAgICAgICAgIGNvbnN0IGJhciA9IHRoaXMuY3VycmVudEJhcjsKICAgICAgICAgIGNvbnN0IHR5cGU1ID0gYmFyPy50eXBlIHx8ICJpbmZvIjsKICAgICAgICAgIGNvbnN0IGhhc1RpbWVvdXQgPSBiYXI/LnRpbWVvdXQgJiYgdGhpcy50aW1lUmVtYWluaW5nID4gMDsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uYmFyLWl0ZW0iPgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbmJhci1jb250ZW50Ij4KICAgICAgICAgICR7YmFyID8gYjJgCiAgICAgICAgICAgICR7aGFzVGltZW91dCA/IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzLWJhciI+CiAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJwcm9ncmVzcy1iYXItZmlsbCAke3R5cGU1fSIKICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAke3RoaXMucHJvZ3Jlc3NQZXJjZW50fSUiCiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVzc2FnZS1zZWN0aW9uIj4KICAgICAgICAgICAgICAgICR7YmFyLmljb24gPyBiMmAKICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtZXNzYWdlLWljb24gJHt0eXBlNX0iCiAgICAgICAgICAgICAgICAgICAgLmljb249JHtiYXIuaWNvbn0KICAgICAgICAgICAgICAgICAgICBpY29uU2l6ZT0iMTYiCiAgICAgICAgICAgICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXNzYWdlLXRleHQiPiR7YmFyLm1lc3NhZ2V9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbnMtc2VjdGlvbiI+CiAgICAgICAgICAgICAgICAke2Jhci5hY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB0aGlzLnJlbmRlckFjdGlvbkJ1dHRvbihhY3Rpb24sIGJhciwgaGFzVGltZW91dCkpfQogICAgICAgICAgICAgICAgJHtiYXIuZGlzbWlzc2libGUgPyBiMmAKICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJkaXNtaXNzLWJ1dHRvbiIKICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmhhbmRsZURpc21pc3MoKX0KICAgICAgICAgICAgICAgICAgICB0aXRsZT0iRGlzbWlzcyIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOngifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgcmVuZGVyQWN0aW9uQnV0dG9uKGFjdGlvbiwgYmFyLCBoYXNUaW1lb3V0KSB7CiAgICAgICAgICBjb25zdCBpc1ByaW1hcnkgPSBhY3Rpb24ucHJpbWFyeTsKICAgICAgICAgIGNvbnN0IHR5cGU1ID0gYmFyLnR5cGUgfHwgImluZm8iOwogICAgICAgICAgY29uc3QgaXNEZWZhdWx0QWN0aW9uID0gYmFyLnRpbWVvdXQ/LmRlZmF1bHRBY3Rpb25JZCA9PT0gYWN0aW9uLmlkOwogICAgICAgICAgY29uc3Qgc2hvd0NvdW50ZG93biA9IGhhc1RpbWVvdXQgJiYgaXNEZWZhdWx0QWN0aW9uOwogICAgICAgICAgY29uc3Qgc2Vjb25kcyA9IE1hdGguY2VpbCh0aGlzLnRpbWVSZW1haW5pbmcgLyAxZTMpOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8YnV0dG9uCiAgICAgICAgY2xhc3M9ImFjdGlvbi1idXR0b24gJHtpc1ByaW1hcnkgPyBgcHJpbWFyeSAke3R5cGU1fWAgOiAic2Vjb25kYXJ5In0iCiAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVBY3Rpb24oYWN0aW9uLmlkLCBmYWxzZSl9CiAgICAgID4KICAgICAgICAke2FjdGlvbi5pY29uID8gYjJgCiAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7YWN0aW9uLmljb259IGljb25TaXplPSIxMiI+PC9kZWVzLWljb24+CiAgICAgICAgYCA6ICIifQogICAgICAgIDxzcGFuPiR7YWN0aW9uLmxhYmVsfTwvc3Bhbj4KICAgICAgICAke3Nob3dDb3VudGRvd24gPyBiMmAKICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb3VudGRvd24iPigke3NlY29uZHN9cyk8L3NwYW4+CiAgICAgICAgYCA6ICIifQogICAgICA8L2J1dHRvbj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT0gUHVibGljIEFQSSA9PT09PT09PT09CiAgICAgICAgLyoqCiAgICAgICAgICogU2hvdyBhbiBhY3Rpb24gYmFyIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuCiAgICAgICAgICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGFuIGFjdGlvbiBpcyB0YWtlbi4KICAgICAgICAgKi8KICAgICAgICBhc3luYyBzaG93KG9wdGlvbnMpIHsKICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgICAgICAgICAgdGhpcy5xdWV1ZS5wdXNoKHsgb3B0aW9ucywgcmVzb2x2ZTogcmVzb2x2ZTIgfSk7CiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50QmFyKSB7CiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIERpc21pc3MgdGhlIGN1cnJlbnQgYWN0aW9uIGJhciB3aXRob3V0IHRyaWdnZXJpbmcgYW55IGFjdGlvbi4KICAgICAgICAgKi8KICAgICAgICBkaXNtaXNzKCkgewogICAgICAgICAgdGhpcy5oYW5kbGVEaXNtaXNzKCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIENsZWFyIGFsbCBwZW5kaW5nIGFjdGlvbiBiYXJzIGluIHRoZSBxdWV1ZS4KICAgICAgICAgKi8KICAgICAgICBjbGVhclF1ZXVlKCkgewogICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMucXVldWUpIHsKICAgICAgICAgICAgaXRlbS5yZXNvbHZlKHsgYWN0aW9uSWQ6ICJkaXNtaXNzZWQiLCB0aW1lZE91dDogZmFsc2UgfSk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnF1ZXVlID0gW107CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT0gUHJpdmF0ZSBNZXRob2RzID09PT09PT09PT0KICAgICAgICAvKioKICAgICAgICAgKiBIaWRlIHRoZSBjdXJyZW50IGFjdGlvbmJhciB3aXRoIGFuaW1hdGlvbi4KICAgICAgICAgKiBSZW1vdmVzIHZpc2libGUgY2xhc3MgZmlyc3QgdG8gdHJpZ2dlciBDU1MgdHJhbnNpdGlvbiwgdGhlbiBjbGVhcnMgY29udGVudCBhZnRlciBhbmltYXRpb24uCiAgICAgICAgICovCiAgICAgICAgYXN5bmMgaGlkZUN1cnJlbnRCYXIoKSB7CiAgICAgICAgICB0aGlzLmNsYXNzTGlzdC5yZW1vdmUoInZpc2libGUiKTsKICAgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7CiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDIyMCkpOwogICAgICAgICAgdGhpcy5jdXJyZW50QmFyID0gbnVsbDsKICAgICAgICAgIHRoaXMuY3VycmVudFJlc29sdmUgPSBudWxsOwogICAgICAgIH0KICAgICAgICBhc3luYyBwcm9jZXNzUXVldWUoKSB7CiAgICAgICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgdGhpcy5oaWRlQ3VycmVudEJhcigpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5xdWV1ZS5zaGlmdCgpOwogICAgICAgICAgdGhpcy5jdXJyZW50QmFyID0gaXRlbS5vcHRpb25zOwogICAgICAgICAgdGhpcy5jdXJyZW50UmVzb2x2ZSA9IGl0ZW0ucmVzb2x2ZTsKICAgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTsKICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgICB0aGlzLmNsYXNzTGlzdC5hZGQoInZpc2libGUiKTsKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKGl0ZW0ub3B0aW9ucy50aW1lb3V0KSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lb3V0KGl0ZW0ub3B0aW9ucy50aW1lb3V0LmR1cmF0aW9uLCBpdGVtLm9wdGlvbnMudGltZW91dC5kZWZhdWx0QWN0aW9uSWQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGFydFRpbWVvdXQoZHVyYXRpb24sIGRlZmF1bHRBY3Rpb25JZCkgewogICAgICAgICAgdGhpcy50aW1lUmVtYWluaW5nID0gZHVyYXRpb247CiAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudCA9IDEwMDsKICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7CiAgICAgICAgICBjb25zdCB1cGRhdGVJbnRlcnZhbCA9IDUwOwogICAgICAgICAgdGhpcy50aW1lb3V0SW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lOwogICAgICAgICAgICB0aGlzLnRpbWVSZW1haW5pbmcgPSBNYXRoLm1heCgwLCBkdXJhdGlvbiAtIGVsYXBzZWQpOwogICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudCA9IHRoaXMudGltZVJlbWFpbmluZyAvIGR1cmF0aW9uICogMTAwOwogICAgICAgICAgICBpZiAodGhpcy50aW1lUmVtYWluaW5nIDw9IDApIHsKICAgICAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dEludGVydmFsKCk7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb24oZGVmYXVsdEFjdGlvbklkLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgdXBkYXRlSW50ZXJ2YWwpOwogICAgICAgIH0KICAgICAgICBjbGVhclRpbWVvdXRJbnRlcnZhbCgpIHsKICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXRJbnRlcnZhbCkgewogICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMudGltZW91dEludGVydmFsKTsKICAgICAgICAgICAgdGhpcy50aW1lb3V0SW50ZXJ2YWwgPSBudWxsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBoYW5kbGVBY3Rpb24oYWN0aW9uSWQsIHRpbWVkT3V0KSB7CiAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dEludGVydmFsKCk7CiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UmVzb2x2ZSkgewogICAgICAgICAgICB0aGlzLmN1cnJlbnRSZXNvbHZlKHsgYWN0aW9uSWQsIHRpbWVkT3V0IH0pOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlRGlzbWlzcygpIHsKICAgICAgICAgIHRoaXMuaGFuZGxlQWN0aW9uKCJkaXNtaXNzZWQiLCBmYWxzZSk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICAgIHRoaXMuY2xlYXJUaW1lb3V0SW50ZXJ2YWwoKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTEoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNBY3Rpb25iYXIyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwvdGVybWluYWwtdGFiLW1hbmFnZXIuanMKdmFyIFRlcm1pbmFsVGFiTWFuYWdlcjsKdmFyIGluaXRfdGVybWluYWxfdGFiX21hbmFnZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwvdGVybWluYWwtdGFiLW1hbmFnZXIuanMiKCkgewogICAgVGVybWluYWxUYWJNYW5hZ2VyID0gY2xhc3MgewogICAgICB0YWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgdGFiQ291bnRlciA9IDA7CiAgICAgIHh0ZXJtQnVuZGxlID0gbnVsbDsKICAgICAgeHRlcm1GaXRBZGRvbkJ1bmRsZSA9IG51bGw7CiAgICAgIC8qKgogICAgICAgKiBJbml0aWFsaXplIHRoZSBtYW5hZ2VyIHdpdGggbG9hZGVkIHh0ZXJtIG1vZHVsZXMuCiAgICAgICAqIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBjcmVhdGluZyB0YWJzLgogICAgICAgKi8KICAgICAgc2V0WHRlcm1Nb2R1bGVzKHh0ZXJtQnVuZGxlLCBmaXRBZGRvbkJ1bmRsZSkgewogICAgICAgIHRoaXMueHRlcm1CdW5kbGUgPSB4dGVybUJ1bmRsZTsKICAgICAgICB0aGlzLnh0ZXJtRml0QWRkb25CdW5kbGUgPSBmaXRBZGRvbkJ1bmRsZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2VuZXJhdGUgdW5pcXVlIHRhYiBJRAogICAgICAgKi8KICAgICAgZ2VuZXJhdGVUYWJJZCgpIHsKICAgICAgICB0aGlzLnRhYkNvdW50ZXIrKzsKICAgICAgICByZXR1cm4gYHRlcm1pbmFsLSR7dGhpcy50YWJDb3VudGVyfS0ke0RhdGUubm93KCl9YDsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IGRlZmF1bHQgbGFiZWwgZm9yIHRhYiB0eXBlCiAgICAgICAqLwogICAgICBnZXREZWZhdWx0TGFiZWwodHlwZTUsIG1ldGFkYXRhKSB7CiAgICAgICAgc3dpdGNoICh0eXBlNSkgewogICAgICAgICAgY2FzZSAic2hlbGwiOgogICAgICAgICAgICByZXR1cm4gImJhc2giOwogICAgICAgICAgY2FzZSAic2NyaXB0IjoKICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhPy5zY3JpcHROYW1lIHx8ICJzY3JpcHQiOwogICAgICAgICAgY2FzZSAicGFja2FnZS11cGRhdGUiOgogICAgICAgICAgICByZXR1cm4gbWV0YWRhdGE/LnBhY2thZ2VOYW1lID8gYHVwZGF0ZSAke21ldGFkYXRhLnBhY2thZ2VOYW1lfWAgOiAidXBkYXRlIjsKICAgICAgICAgIGNhc2UgImN1c3RvbSI6CiAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YT8uY29tbWFuZCB8fCAicHJvY2VzcyI7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gInRlcm1pbmFsIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCBkZWZhdWx0IGljb24gZm9yIHRhYiB0eXBlCiAgICAgICAqLwogICAgICBnZXREZWZhdWx0SWNvbih0eXBlNSkgewogICAgICAgIHN3aXRjaCAodHlwZTUpIHsKICAgICAgICAgIGNhc2UgInNoZWxsIjoKICAgICAgICAgICAgcmV0dXJuICJsdWNpZGU6dGVybWluYWwiOwogICAgICAgICAgY2FzZSAic2NyaXB0IjoKICAgICAgICAgICAgcmV0dXJuICJsdWNpZGU6cGxheSI7CiAgICAgICAgICBjYXNlICJwYWNrYWdlLXVwZGF0ZSI6CiAgICAgICAgICAgIHJldHVybiAibHVjaWRlOnBhY2thZ2VDaGVjayI7CiAgICAgICAgICBjYXNlICJjdXN0b20iOgogICAgICAgICAgICByZXR1cm4gImx1Y2lkZTpjb2RlIjsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiAibHVjaWRlOnRlcm1pbmFsIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0ZXJtaW5hbCB0aGVtZSBjb25maWd1cmF0aW9uCiAgICAgICAqLwogICAgICBnZXRUZXJtaW5hbFRoZW1lKGlzQnJpZ2h0KSB7CiAgICAgICAgaWYgKGlzQnJpZ2h0KSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAiI2ZmZmZmZiIsCiAgICAgICAgICAgIGZvcmVncm91bmQ6ICIjMzMzMzMzIiwKICAgICAgICAgICAgY3Vyc29yOiAiIzMzMzMzMyIsCiAgICAgICAgICAgIGN1cnNvckFjY2VudDogIiNmZmZmZmYiLAogICAgICAgICAgICBzZWxlY3Rpb246ICJyZ2JhKDAsIDAsIDAsIDAuMikiLAogICAgICAgICAgICBibGFjazogIiMwMDAwMDAiLAogICAgICAgICAgICByZWQ6ICIjY2QzMTMxIiwKICAgICAgICAgICAgZ3JlZW46ICIjMDBiYzAwIiwKICAgICAgICAgICAgeWVsbG93OiAiIzk0OTgwMCIsCiAgICAgICAgICAgIGJsdWU6ICIjMDQ1MWE1IiwKICAgICAgICAgICAgbWFnZW50YTogIiNiYzA1YmMiLAogICAgICAgICAgICBjeWFuOiAiIzA1OThiYyIsCiAgICAgICAgICAgIHdoaXRlOiAiIzU1NTU1NSIsCiAgICAgICAgICAgIGJyaWdodEJsYWNrOiAiIzY2NjY2NiIsCiAgICAgICAgICAgIGJyaWdodFJlZDogIiNjZDMxMzEiLAogICAgICAgICAgICBicmlnaHRHcmVlbjogIiMxNGNlMTQiLAogICAgICAgICAgICBicmlnaHRZZWxsb3c6ICIjYjViYTAwIiwKICAgICAgICAgICAgYnJpZ2h0Qmx1ZTogIiMwNDUxYTUiLAogICAgICAgICAgICBicmlnaHRNYWdlbnRhOiAiI2JjMDViYyIsCiAgICAgICAgICAgIGJyaWdodEN5YW46ICIjMDU5OGJjIiwKICAgICAgICAgICAgYnJpZ2h0V2hpdGU6ICIjYTVhNWE1IgogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIiMwMDAwMDAiLAogICAgICAgICAgICBmb3JlZ3JvdW5kOiAiI2ZmZmZmZiIsCiAgICAgICAgICAgIGN1cnNvcjogIiNmZmZmZmYiLAogICAgICAgICAgICBjdXJzb3JBY2NlbnQ6ICIjMDAwMDAwIiwKICAgICAgICAgICAgc2VsZWN0aW9uOiAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIgogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhIG5ldyB0YWIgaW5zdGFuY2UKICAgICAgICovCiAgICAgIGNyZWF0ZVRhYihvcHRpb25zLCBpc0JyaWdodCkgewogICAgICAgIGlmICghdGhpcy54dGVybUJ1bmRsZSB8fCAhdGhpcy54dGVybUZpdEFkZG9uQnVuZGxlKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRlcm1pbmFsVGFiTWFuYWdlcjogeHRlcm0gbW9kdWxlcyBub3QgaW5pdGlhbGl6ZWQuIENhbGwgc2V0WHRlcm1Nb2R1bGVzKCkgZmlyc3QuIik7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZW5lcmF0ZVRhYklkKCk7CiAgICAgICAgY29uc3QgdHlwZTUgPSBvcHRpb25zLnR5cGU7CiAgICAgICAgY29uc3QgdGVybWluYWwgPSBuZXcgdGhpcy54dGVybUJ1bmRsZS5UZXJtaW5hbCh7CiAgICAgICAgICBjb252ZXJ0RW9sOiB0cnVlLAogICAgICAgICAgY3Vyc29yQmxpbms6IHRydWUsCiAgICAgICAgICB0aGVtZTogdGhpcy5nZXRUZXJtaW5hbFRoZW1lKGlzQnJpZ2h0KSwKICAgICAgICAgIGZvbnRGYW1pbHk6ICdNZW5sbywgTW9uYWNvLCAiQ291cmllciBOZXciLCBtb25vc3BhY2UnLAogICAgICAgICAgZm9udFNpemU6IDEzLAogICAgICAgICAgbGluZUhlaWdodDogMS4yCiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgZml0QWRkb24gPSBuZXcgdGhpcy54dGVybUZpdEFkZG9uQnVuZGxlLkZpdEFkZG9uKCk7CiAgICAgICAgdGVybWluYWwubG9hZEFkZG9uKGZpdEFkZG9uKTsKICAgICAgICBjb25zdCB0YWIyID0gewogICAgICAgICAgaWQsCiAgICAgICAgICBsYWJlbDogb3B0aW9ucy5sYWJlbCB8fCB0aGlzLmdldERlZmF1bHRMYWJlbCh0eXBlNSwgb3B0aW9ucy5tZXRhZGF0YSksCiAgICAgICAgICBpY29uTmFtZTogb3B0aW9ucy5pY29uTmFtZSB8fCB0aGlzLmdldERlZmF1bHRJY29uKHR5cGU1KSwKICAgICAgICAgIHR5cGU6IHR5cGU1LAogICAgICAgICAgY2xvc2VhYmxlOiBvcHRpb25zLmNsb3NlYWJsZSA/PyB0eXBlNSAhPT0gInNoZWxsIiwKICAgICAgICAgIHRlcm1pbmFsLAogICAgICAgICAgZml0QWRkb24sCiAgICAgICAgICBwcm9jZXNzOiBudWxsLAogICAgICAgICAgaW5wdXRXcml0ZXI6IG51bGwsCiAgICAgICAgICBleGl0ZWQ6IGZhbHNlLAogICAgICAgICAgZXhpdENvZGU6IG51bGwsCiAgICAgICAgICBjcmVhdGVkQXQ6IERhdGUubm93KCksCiAgICAgICAgICBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YQogICAgICAgIH07CiAgICAgICAgdGhpcy50YWJzLnNldChpZCwgdGFiMik7CiAgICAgICAgcmV0dXJuIHRhYjI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0YWIgYnkgSUQKICAgICAgICovCiAgICAgIGdldFRhYihpZCkgewogICAgICAgIHJldHVybiB0aGlzLnRhYnMuZ2V0KGlkKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IGFsbCB0YWJzIGFzIGFycmF5IChvcmRlcmVkIGJ5IGNyZWF0aW9uIHRpbWUpCiAgICAgICAqLwogICAgICBnZXRBbGxUYWJzKCkgewogICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMudGFicy52YWx1ZXMoKSkuc29ydCgoYTUsIGI1KSA9PiBhNS5jcmVhdGVkQXQgLSBiNS5jcmVhdGVkQXQpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGhlIG51bWJlciBvZiB0YWJzCiAgICAgICAqLwogICAgICBnZXRUYWJDb3VudCgpIHsKICAgICAgICByZXR1cm4gdGhpcy50YWJzLnNpemU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENoZWNrIGlmIHRhYiBleGlzdHMKICAgICAgICovCiAgICAgIGhhc1RhYihpZCkgewogICAgICAgIHJldHVybiB0aGlzLnRhYnMuaGFzKGlkKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ2xvc2UgYW5kIGNsZWFudXAgYSB0YWIKICAgICAgICovCiAgICAgIGNsb3NlVGFiKGlkKSB7CiAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFicy5nZXQoaWQpOwogICAgICAgIGlmICghdGFiMikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAodGFiMi5wcm9jZXNzICYmICF0YWIyLmV4aXRlZCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGFiMi5wcm9jZXNzLmtpbGwoKTsKICAgICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBraWxsIHByb2Nlc3M6IiwgZTExKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRhYjIudGVybWluYWwuZGlzcG9zZSgpOwogICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgY29uc29sZS53YXJuKCJGYWlsZWQgdG8gZGlzcG9zZSB0ZXJtaW5hbDoiLCBlMTEpOwogICAgICAgIH0KICAgICAgICB0aGlzLnRhYnMuZGVsZXRlKGlkKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVuYW1lIGEgdGFiCiAgICAgICAqLwogICAgICByZW5hbWVUYWIoaWQsIG5ld0xhYmVsKSB7CiAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFicy5nZXQoaWQpOwogICAgICAgIGlmICghdGFiMikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB0YWIyLmxhYmVsID0gbmV3TGFiZWw7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFVwZGF0ZSB0YWIgcHJvY2VzcyBzdGF0ZSB0byBleGl0ZWQKICAgICAgICovCiAgICAgIG1hcmtUYWJFeGl0ZWQoaWQsIGV4aXRDb2RlKSB7CiAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFicy5nZXQoaWQpOwogICAgICAgIGlmICghdGFiMikKICAgICAgICAgIHJldHVybjsKICAgICAgICB0YWIyLmV4aXRlZCA9IHRydWU7CiAgICAgICAgdGFiMi5leGl0Q29kZSA9IGV4aXRDb2RlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgcHJvY2VzcyBmb3IgYSB0YWIKICAgICAgICovCiAgICAgIHNldFRhYlByb2Nlc3MoaWQsIHByb2Nlc3M0LCBpbnB1dFdyaXRlcikgewogICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYnMuZ2V0KGlkKTsKICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgdGFiMi5wcm9jZXNzID0gcHJvY2VzczQ7CiAgICAgICAgdGFiMi5pbnB1dFdyaXRlciA9IGlucHV0V3JpdGVyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBVcGRhdGUgdGhlbWUgZm9yIGFsbCB0ZXJtaW5hbHMKICAgICAgICovCiAgICAgIHVwZGF0ZUFsbFRoZW1lcyhpc0JyaWdodCkgewogICAgICAgIGNvbnN0IHRoZW1lID0gdGhpcy5nZXRUZXJtaW5hbFRoZW1lKGlzQnJpZ2h0KTsKICAgICAgICBmb3IgKGNvbnN0IHRhYjIgb2YgdGhpcy50YWJzLnZhbHVlcygpKSB7CiAgICAgICAgICB0YWIyLnRlcm1pbmFsLm9wdGlvbnMudGhlbWUgPSB0aGVtZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIERpc3Bvc2UgYWxsIHRhYnMgYW5kIGNsZWFudXAKICAgICAgICovCiAgICAgIGRpc3Bvc2VBbGwoKSB7CiAgICAgICAgZm9yIChjb25zdCBbaWRdIG9mIHRoaXMudGFicykgewogICAgICAgICAgdGhpcy5jbG9zZVRhYihpZCk7CiAgICAgICAgfQogICAgICAgIHRoaXMudGFicy5jbGVhcigpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsLmpzCnZhciBkZWVzX3dvcmtzcGFjZV90ZXJtaW5hbF9leHBvcnRzID0ge307Cl9fZXhwb3J0KGRlZXNfd29ya3NwYWNlX3Rlcm1pbmFsX2V4cG9ydHMsIHsKICBEZWVzV29ya3NwYWNlVGVybWluYWw6ICgpID0+IERlZXNXb3Jrc3BhY2VUZXJtaW5hbAp9KTsKdmFyIF9fZXNEZWNvcmF0ZTUxLCBfX3J1bkluaXRpYWxpemVyczUyLCBEZWVzV29ya3NwYWNlVGVybWluYWw7CnZhciBpbml0X2RlZXNfd29ya3NwYWNlX3Rlcm1pbmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI2KCk7CiAgICBpbml0X2Rpc3RfdHMyNSgpOwogICAgaW5pdF90aGVtZSgpOwogICAgaW5pdF9ncm91cF9ydW50aW1lKCk7CiAgICBpbml0X2RlZXNfaWNvbigpOwogICAgaW5pdF9kZWVzX2FjdGlvbmJhcigpOwogICAgaW5pdF90ZXJtaW5hbF90YWJfbWFuYWdlcigpOwogICAgaW5pdF9zZXJ2aWNlcygpOwogICAgX19lc0RlY29yYXRlNTEgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogICAgICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgICAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgcmV0dXJuIGY3OwogICAgICB9CiAgICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgICAgIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogICAgICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgICAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgZG9uZSA9IHRydWU7CiAgICB9OwogICAgX19ydW5Jbml0aWFsaXplcnM1MiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc1dvcmtzcGFjZVRlcm1pbmFsID0gKCgpID0+IHsKICAgICAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtd29ya3NwYWNlLXRlcm1pbmFsIildOwogICAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICAgICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY2xhc3NUaGlzOwogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICAgICAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2V0dXBDb21tYW5kX2RlY29yYXRvcnM7CiAgICAgIGxldCBfc2V0dXBDb21tYW5kX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NldHVwQ29tbWFuZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Vudmlyb25tZW50VmFyaWFibGVzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfZW52aXJvbm1lbnRWYXJpYWJsZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZW52aXJvbm1lbnRWYXJpYWJsZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YWJCYXJXaWR0aF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3RhYkJhcldpZHRoX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RhYkJhcldpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd1RhYkJhcl9kZWNvcmF0b3JzOwogICAgICBsZXQgX3Nob3dUYWJCYXJfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfc2hvd1RhYkJhcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RhYnNfZGVjb3JhdG9yczsKICAgICAgbGV0IF90YWJzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hY3RpdmVUYWJJZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2FjdGl2ZVRhYklkX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2FjdGl2ZVRhYklkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzV29ya3NwYWNlVGVybWluYWwyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgICAgICBfc2V0dXBDb21tYW5kX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgICAgICBfZW52aXJvbm1lbnRWYXJpYWJsZXNfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgICAgIF90YWJCYXJXaWR0aF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9zaG93VGFiQmFyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfYWN0aXZlVGFiSWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUxKHRoaXMsIG51bGwsIF9leGVjdXRpb25FbnZpcm9ubWVudF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJleGVjdXRpb25FbnZpcm9ubWVudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZXhlY3V0aW9uRW52aXJvbm1lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZXhlY3V0aW9uRW52aXJvbm1lbnQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5leGVjdXRpb25FbnZpcm9ubWVudCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTEodGhpcywgbnVsbCwgX3NldHVwQ29tbWFuZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZXR1cENvbW1hbmQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNldHVwQ29tbWFuZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZXR1cENvbW1hbmQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zZXR1cENvbW1hbmQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NldHVwQ29tbWFuZF9pbml0aWFsaXplcnMsIF9zZXR1cENvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTEodGhpcywgbnVsbCwgX2Vudmlyb25tZW50VmFyaWFibGVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImVudmlyb25tZW50VmFyaWFibGVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlbnZpcm9ubWVudFZhcmlhYmxlcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbnZpcm9ubWVudFZhcmlhYmxlcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmVudmlyb25tZW50VmFyaWFibGVzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lbnZpcm9ubWVudFZhcmlhYmxlc19pbml0aWFsaXplcnMsIF9lbnZpcm9ubWVudFZhcmlhYmxlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MSh0aGlzLCBudWxsLCBfdGFiQmFyV2lkdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFiQmFyV2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRhYkJhcldpZHRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhYkJhcldpZHRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudGFiQmFyV2lkdGggPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYkJhcldpZHRoX2luaXRpYWxpemVycywgX3RhYkJhcldpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUxKHRoaXMsIG51bGwsIF9zaG93VGFiQmFyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dUYWJCYXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dUYWJCYXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd1RhYkJhciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnNob3dUYWJCYXIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dUYWJCYXJfaW5pdGlhbGl6ZXJzLCBfc2hvd1RhYkJhcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MSh0aGlzLCBudWxsLCBfdGFic19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0YWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0YWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhYnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90YWJzX2luaXRpYWxpemVycywgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTEodGhpcywgbnVsbCwgX2FjdGl2ZVRhYklkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjdGl2ZVRhYklkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhY3RpdmVUYWJJZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3RpdmVUYWJJZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmFjdGl2ZVRhYklkID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3RpdmVUYWJJZF9pbml0aWFsaXplcnMsIF9hY3RpdmVUYWJJZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzV29ya3NwYWNlVGVybWluYWwyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gewogICAgICAgICAgY29uc3QgZW52MiA9IG5ldyBXZWJDb250YWluZXJFbnZpcm9ubWVudCgpOwogICAgICAgICAgcmV0dXJuIGIyYDxkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbCAuZXhlY3V0aW9uRW52aXJvbm1lbnQ9JHtlbnYyfT48L2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsPmA7CiAgICAgICAgfTsKICAgICAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICAgICAgLy8gSU5TVEFOQ0UKICAgICAgICByZXNpemVPYnNlcnZlcjsKICAgICAgICB0YWJNYW5hZ2VyOwogICAgICAgICNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM1Mih0aGlzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBudWxsKTsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgZXhlY3V0aW9uIGVudmlyb25tZW50IChyZXF1aXJlZCkuCiAgICAgICAgICogVXNlIFdlYkNvbnRhaW5lckVudmlyb25tZW50IGZvciBicm93c2VyLWJhc2VkIGV4ZWN1dGlvbi4KICAgICAgICAgKi8KICAgICAgICBnZXQgZXhlY3V0aW9uRW52aXJvbm1lbnQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3NldHVwQ29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Mih0aGlzLCBfc2V0dXBDb21tYW5kX2luaXRpYWxpemVycywgIiIpKTsKICAgICAgICBnZXQgc2V0dXBDb21tYW5kKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3NldHVwQ29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgc2V0dXBDb21tYW5kKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2V0dXBDb21tYW5kX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNlbnZpcm9ubWVudFZhcmlhYmxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX3NldHVwQ29tbWFuZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX2Vudmlyb25tZW50VmFyaWFibGVzX2luaXRpYWxpemVycywge30pKTsKICAgICAgICAvKioKICAgICAgICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGluIHRoZSBzaGVsbAogICAgICAgICAqLwogICAgICAgIGdldCBlbnZpcm9ubWVudFZhcmlhYmxlcygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNlbnZpcm9ubWVudFZhcmlhYmxlc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgZW52aXJvbm1lbnRWYXJpYWJsZXModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNlbnZpcm9ubWVudFZhcmlhYmxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdGFiQmFyV2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF9lbnZpcm9ubWVudFZhcmlhYmxlc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX3RhYkJhcldpZHRoX2luaXRpYWxpemVycywgMTYwKSk7CiAgICAgICAgLyoqCiAgICAgICAgICogV2lkdGggb2YgdGhlIHRhYiBiYXIgaW4gcGl4ZWxzCiAgICAgICAgICovCiAgICAgICAgZ2V0IHRhYkJhcldpZHRoKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3RhYkJhcldpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB0YWJCYXJXaWR0aCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3RhYkJhcldpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzaG93VGFiQmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Mih0aGlzLCBfdGFiQmFyV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF9zaG93VGFiQmFyX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgICAgIC8qKgogICAgICAgICAqIFdoZXRoZXIgdG8gc2hvdyB0aGUgdGFiIGJhcgogICAgICAgICAqLwogICAgICAgIGdldCBzaG93VGFiQmFyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3Nob3dUYWJCYXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNob3dUYWJCYXIodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNzaG93VGFiQmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICN0YWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Mih0aGlzLCBfc2hvd1RhYkJhcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX3RhYnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgICAgIC8vIFRhYiBzdGF0ZQogICAgICAgIGdldCB0YWJzKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHRhYnModmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNhY3RpdmVUYWJJZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF9hY3RpdmVUYWJJZF9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgICAgICBnZXQgYWN0aXZlVGFiSWQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jYWN0aXZlVGFiSWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGFjdGl2ZVRhYklkKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jYWN0aXZlVGFiSWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgLy8gVGhlbWUgc3Vic2NyaXB0aW9uIGZvciBkeW5hbWljIHRoZW1lIHVwZGF0ZXMKICAgICAgICB0ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX2FjdGl2ZVRhYklkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAgICAgaXNCcmlnaHQgPSBmYWxzZTsKICAgICAgICAvLyBBY3Rpb25iYXIgcmVmZXJlbmNlIGZvciB0ZXJtaW5hbC1jb250ZXh0IG5vdGlmaWNhdGlvbnMKICAgICAgICB0ZXJtaW5hbEFjdGlvbmJhciA9IG51bGw7CiAgICAgICAgLyoqCiAgICAgICAgICogUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGVudmlyb25tZW50IGlzIHJlYWR5LgogICAgICAgICAqIEBkZXByZWNhdGVkIFVzZSBleGVjdXRpb25FbnZpcm9ubWVudCBkaXJlY3RseQogICAgICAgICAqLwogICAgICAgIGVudmlyb25tZW50RGVmZXJyZWQgPSBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cHJvbWlzZS5EZWZlcnJlZCgpOwogICAgICAgIGVudmlyb25tZW50UHJvbWlzZSA9IHRoaXMuZW52aXJvbm1lbnREZWZlcnJlZC5wcm9taXNlOwogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIHRoaXMudGFiTWFuYWdlciA9IG5ldyBUZXJtaW5hbFRhYk1hbmFnZXIoKTsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgICAgICB0aGlzLmhhbmRsZVJlc2l6ZSgpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQoKICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgfQoKICAgICAgI2FjdGl2ZS10ZXJtaW5hbC1jb250YWluZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgbWFyZ2luOiAyMHB4OwogICAgICB9CgogICAgICAudGVybWluYWwtY29udGVudCBkZWVzLWFjdGlvbmJhciB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC8qIFRhYiBiYXIgb24gdGhlIHJpZ2h0IHNpZGUgKi8KICAgICAgLnRhYi1iYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC50YWItYmFyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1JSkiLCAiaHNsKDAgMCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1iYXItdGl0bGUgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgLnRhYi1iYXItYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgLnRhYi1hY3Rpb24gewogICAgICAgIHdpZHRoOiAyMnB4OwogICAgICAgIGhlaWdodDogMjJweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnRhYi1hY3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItbGlzdCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXRhYiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1JSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXRhYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkwJSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDI1JSkiLCAiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXRhYi5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDEwMCUgOTUlKSIsICJoc2woMjEwIDMwJSAxNSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDQwJSkiLCAiaHNsKDIxMCAxMDAlIDcwJSkiKX07CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC10YWIuZXhpdGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC50YWItaWNvbiB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50YWItaWNvbi5ydW5uaW5nIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIgNzAlIDQwJSkiLCAiaHNsKDE0MiA3MCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1sYWJlbCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5leGl0LWJhZGdlIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMXB4IDVweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmV4aXQtYmFkZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIgNzAlIDkwJSkiLCAiaHNsKDE0MiAzMCUgMjAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIgNzAlIDM1JSkiLCAiaHNsKDE0MiA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLmV4aXQtYmFkZ2UuZXJyb3IgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MCUgOTMlKSIsICJoc2woMCAzMCUgMjAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcwJSA0NSUpIiwgImhzbCgwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICAudGFiLWNsb3NlIHsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAudGVybWluYWwtdGFiOmhvdmVyIC50YWItY2xvc2UgewogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgfQoKICAgICAgLnRhYi1jbG9zZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMSAhaW1wb3J0YW50OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDI1JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MCUgNTAlKSIsICJoc2woMCA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDUwJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAvKiB4dGVybS5qcyBzdHlsZXMgKi8KICAgICAgLnh0ZXJtIHsKICAgICAgICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICdsaWdhJyAwOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLnh0ZXJtLmZvY3VzLAogICAgICAueHRlcm06Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0taGVscGVycyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICB6LWluZGV4OiA1OwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLWhlbHBlci10ZXh0YXJlYSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGxlZnQ6IC05OTk5ZW07CiAgICAgICAgdG9wOiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIGhlaWdodDogMDsKICAgICAgICB6LWluZGV4OiAtNTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcmVzaXplOiBub25lOwogICAgICB9CgogICAgICAueHRlcm0gLmNvbXBvc2l0aW9uLXZpZXcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzMzMzIiwgIiNmZmZmZmYiKX07CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB6LWluZGV4OiAxOwogICAgICB9CgogICAgICAueHRlcm0gLmNvbXBvc2l0aW9uLXZpZXcuYWN0aXZlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS12aWV3cG9ydCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tc2NyZWVuIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tc2NyZWVuIGNhbnZhcyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXNjcm9sbC1hcmVhIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC54dGVybS1jaGFyLW1lYXN1cmUtZWxlbWVudCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IC05OTk5ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKICAgICAgfQoKICAgICAgLnh0ZXJtIHsKICAgICAgICBjdXJzb3I6IHRleHQ7CiAgICAgIH0KCiAgICAgIC54dGVybS5lbmFibGUtbW91c2UtZXZlbnRzIHsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC54dGVybS54dGVybS1jdXJzb3ItcG9pbnRlciB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAueHRlcm0uY29sdW1uLXNlbGVjdC5mb2N1cyB7CiAgICAgICAgY3Vyc29yOiBjcm9zc2hhaXI7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tYWNjZXNzaWJpbGl0eSwKICAgICAgLnh0ZXJtIC54dGVybS1tZXNzYWdlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnh0ZXJtIC5saXZlLXJlZ2lvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IC05OTk5cHg7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAueHRlcm0tZGltIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC54dGVybS11bmRlcmxpbmUgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICBjb25zdCBhY3RpdmVUYWIgPSB0aGlzLmFjdGl2ZVRhYklkID8gdGhpcy50YWJNYW5hZ2VyLmdldFRhYih0aGlzLmFjdGl2ZVRhYklkKSA6IG51bGw7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLWNvbnRhaW5lciI+CiAgICAgICAgPCEtLSBNYWluIHRlcm1pbmFsIGFyZWEgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtY29udGVudCI+CiAgICAgICAgICAke2FjdGl2ZVRhYiA/IGIyYAogICAgICAgICAgICA8ZGl2IGlkPSJhY3RpdmUtdGVybWluYWwtY29udGFpbmVyIj48L2Rpdj4KICAgICAgICAgIGAgOiBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnRlcm1pbmFsIn0gaWNvblNpemU9IjMyIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3Bhbj5ObyB0ZXJtaW5hbCBvcGVuPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGB9CiAgICAgICAgICA8ZGVlcy1hY3Rpb25iYXI+PC9kZWVzLWFjdGlvbmJhcj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBWZXJ0aWNhbCB0YWIgYmFyIG9uIHRoZSByaWdodCAtLT4KICAgICAgICAke3RoaXMuc2hvd1RhYkJhciA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0idGFiLWJhciIgc3R5bGU9IndpZHRoOiAke3RoaXMudGFiQmFyV2lkdGh9cHgiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItYmFyLWhlYWRlciI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1iYXItdGl0bGUiPlRlcm1pbmFsczwvc3Bhbj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItYmFyLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiLWFjdGlvbiIgQGNsaWNrPSR7dGhpcy5oYW5kbGVBZGRUYWJ9IHRpdGxlPSJOZXcgVGVybWluYWwiPgogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpwbHVzIn0gaWNvblNpemU9IjE0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1saXN0Ij4KICAgICAgICAgICAgICAke3RoaXMudGFicy5tYXAoKHRhYjIpID0+IGIyYAogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0idGVybWluYWwtdGFiICR7dGFiMi5pZCA9PT0gdGhpcy5hY3RpdmVUYWJJZCA/ICJhY3RpdmUiIDogIiJ9ICR7dGFiMi5leGl0ZWQgPyAiZXhpdGVkIiA6ICIifSIKICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zd2l0Y2hUb1RhYih0YWIyLmlkKX0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAgICAgICAgIC5pY29uPSR7dGFiMi5pY29uTmFtZX0KICAgICAgICAgICAgICAgICAgICBpY29uU2l6ZT0iMTQiCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRhYi1pY29uICR7dGFiMi5wcm9jZXNzICYmICF0YWIyLmV4aXRlZCA/ICJydW5uaW5nIiA6ICIifSIKICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFiLWxhYmVsIj4ke3RhYjIubGFiZWx9PC9zcGFuPgogICAgICAgICAgICAgICAgICAke3RhYjIuZXhpdGVkID8gYjJgCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImV4aXQtYmFkZ2UgJHt0YWIyLmV4aXRDb2RlID09PSAwID8gInN1Y2Nlc3MiIDogImVycm9yIn0iPgogICAgICAgICAgICAgICAgICAgICAgJHt0YWIyLmV4aXRDb2RlfQogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgICAgICAke3RhYjIuY2xvc2VhYmxlID8gYjJgCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1jbG9zZSIgQGNsaWNrPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVUYWJDbG9zZShlMTEsIHRhYjIuaWQpfT4KICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOngifSBpY29uU2l6ZT0iMTIiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgICAgIGNvbnN0IGRvbXRvb2xzSW5zdGFuY2UgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgICAgIHRoaXMuaXNCcmlnaHQgPSBkb210b29sc0luc3RhbmNlLnRoZW1lTWFuYWdlci5nb0JyaWdodEJvb2xlYW47CiAgICAgICAgICB0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb24gPSBkb210b29sc0luc3RhbmNlLnRoZW1lTWFuYWdlci50aGVtZU9ic2VydmFibGUuc3Vic2NyaWJlKChnb0JyaWdodCkgPT4gewogICAgICAgICAgICB0aGlzLmlzQnJpZ2h0ID0gZ29CcmlnaHQ7CiAgICAgICAgICAgIHRoaXMudGFiTWFuYWdlci51cGRhdGVBbGxUaGVtZXMoZ29CcmlnaHQpOwogICAgICAgICAgfSk7CiAgICAgICAgICBjb25zdCBsaWJMb2FkZXIgPSBEZWVzU2VydmljZUxpYkxvYWRlci5nZXRJbnN0YW5jZSgpOwogICAgICAgICAgY29uc3QgW3h0ZXJtQnVuZGxlLCBmaXRBZGRvbkJ1bmRsZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgICAgIGxpYkxvYWRlci5sb2FkWHRlcm0oKSwKICAgICAgICAgICAgbGliTG9hZGVyLmxvYWRYdGVybUZpdEFkZG9uKCkKICAgICAgICAgIF0pOwogICAgICAgICAgdGhpcy50YWJNYW5hZ2VyLnNldFh0ZXJtTW9kdWxlcyh4dGVybUJ1bmRsZSwgZml0QWRkb25CdW5kbGUpOwogICAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVTaGVsbFRhYigpOwogICAgICAgIH0KICAgICAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZCgiYWN0aXZlLXRlcm1pbmFsLWNvbnRhaW5lciIpOwogICAgICAgICAgaWYgKGNvbnRhaW5lcikgewogICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShjb250YWluZXIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbikgewogICAgICAgICAgICB0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgICAgdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMudGFiTWFuYWdlci5kaXNwb3NlQWxsKCk7CiAgICAgICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09IFRhYiBNYW5hZ2VtZW50ID09PT09PT09PT0KICAgICAgICBhc3luYyBoYW5kbGVBZGRUYWIoKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZVNoZWxsVGFiKCk7CiAgICAgICAgfQogICAgICAgIGhhbmRsZVRhYkNsb3NlKGUxMSwgdGFiSWQpIHsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIHRoaXMuY2xvc2VUYWIodGFiSWQpOwogICAgICAgIH0KICAgICAgICBzd2l0Y2hUb1RhYih0YWJJZCkgewogICAgICAgICAgaWYgKHRhYklkID09PSB0aGlzLmFjdGl2ZVRhYklkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJNYW5hZ2VyLmdldFRhYih0YWJJZCk7CiAgICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGNvbnN0IHByZXZpb3VzVGFiSWQgPSB0aGlzLmFjdGl2ZVRhYklkOwogICAgICAgICAgaWYgKHRoaXMuYWN0aXZlVGFiSWQpIHsKICAgICAgICAgICAgdGhpcy5kZXRhY2hBY3RpdmVUZXJtaW5hbCgpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5hY3RpdmVUYWJJZCA9IHRhYklkOwogICAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuYXR0YWNoVGVybWluYWxUb0NvbnRhaW5lcih0YWIyKTsKICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgidGFiLXN3aXRjaGVkIiwgewogICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgICAgICAgZGV0YWlsOiB7IHRhYklkLCBwcmV2aW91c1RhYklkIH0KICAgICAgICAgICAgfSkpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGRldGFjaEFjdGl2ZVRlcm1pbmFsKCkgewogICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZCgiYWN0aXZlLXRlcm1pbmFsLWNvbnRhaW5lciIpOwogICAgICAgICAgaWYgKGNvbnRhaW5lcikgewogICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gIiI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGF0dGFjaFRlcm1pbmFsVG9Db250YWluZXIodGFiMikgewogICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZCgiYWN0aXZlLXRlcm1pbmFsLWNvbnRhaW5lciIpOwogICAgICAgICAgaWYgKCFjb250YWluZXIpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXIpOwogICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9ICIiOwogICAgICAgICAgdGFiMi50ZXJtaW5hbC5vcGVuKGNvbnRhaW5lcik7CiAgICAgICAgICB0YWIyLmZpdEFkZG9uLmZpdCgpOwogICAgICAgICAgdGFiMi50ZXJtaW5hbC5mb2N1cygpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVSZXNpemUoKSB7CiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVUYWJJZCkgewogICAgICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJNYW5hZ2VyLmdldFRhYih0aGlzLmFjdGl2ZVRhYklkKTsKICAgICAgICAgICAgaWYgKHRhYjIpIHsKICAgICAgICAgICAgICB0YWIyLmZpdEFkZG9uLmZpdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT0gUHJvY2VzcyBNYW5hZ2VtZW50ID09PT09PT09PT0KICAgICAgICBhc3luYyBzcGF3blByb2Nlc3NGb3JUYWIodGFiMiwgY29tbWFuZCwgYXJncyA9IFtdKSB7CiAgICAgICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpIHsKICAgICAgICAgICAgdGFiMi50ZXJtaW5hbC53cml0ZSgiXHgxQlszMW0iKTsKICAgICAgICAgICAgdGFiMi50ZXJtaW5hbC53cml0ZSgiXHUyNzRDIE5vIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBhdmFpbGFibGUuXHJcbiIpOwogICAgICAgICAgICB0YWIyLnRlcm1pbmFsLndyaXRlKCJceDFCWzBtIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkeSkgewogICAgICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUoIkluaXRpYWxpemluZyBlbnZpcm9ubWVudC4uLlxyXG4iKTsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LmluaXQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBwcm9jZXNzNCA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuc3Bhd24oY29tbWFuZCwgYXJncyk7CiAgICAgICAgICAgIHByb2Nlc3M0Lm91dHB1dC5waXBlVG8obmV3IFdyaXRhYmxlU3RyZWFtKHsKICAgICAgICAgICAgICB3cml0ZTogKGRhdGEpID0+IHsKICAgICAgICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUoZGF0YSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIGNvbnN0IGlucHV0V3JpdGVyID0gcHJvY2VzczQuaW5wdXQuZ2V0V3JpdGVyKCk7CiAgICAgICAgICAgIHRhYjIudGVybWluYWwub25EYXRhKChkYXRhKSA9PiB7CiAgICAgICAgICAgICAgaW5wdXRXcml0ZXIud3JpdGUoZGF0YSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLnRhYk1hbmFnZXIuc2V0VGFiUHJvY2Vzcyh0YWIyLmlkLCBwcm9jZXNzNCwgaW5wdXRXcml0ZXIpOwogICAgICAgICAgICB0aGlzLnRhYnMgPSB0aGlzLnRhYk1hbmFnZXIuZ2V0QWxsVGFicygpOwogICAgICAgICAgICBwcm9jZXNzNC5leGl0LnRoZW4oKGV4aXRDb2RlKSA9PiB7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQcm9jZXNzRXhpdCh0YWIyLmlkLCBleGl0Q29kZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgdGFiMi50ZXJtaW5hbC53cml0ZSgiXHgxQlszMW0iKTsKICAgICAgICAgICAgdGFiMi50ZXJtaW5hbC53cml0ZShgXHUyNzRDIEZhaWxlZCB0byBzcGF3biBwcm9jZXNzOiAke2Vycm9yfVxyCmApOwogICAgICAgICAgICB0YWIyLnRlcm1pbmFsLndyaXRlKCJceDFCWzBtIik7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBzcGF3biBwcm9jZXNzOiIsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlUHJvY2Vzc0V4aXQodGFiSWQsIGV4aXRDb2RlKSB7CiAgICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJNYW5hZ2VyLmdldFRhYih0YWJJZCk7CiAgICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMudGFiTWFuYWdlci5tYXJrVGFiRXhpdGVkKHRhYklkLCBleGl0Q29kZSk7CiAgICAgICAgICBjb25zdCBtZXNzYWdlMiA9IGV4aXRDb2RlID09PSAwID8gIlxyXG5ceDFCWzMybVtQcm9jZXNzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHldXHgxQlswbVxyXG4iIDogYFxyClx4MUJbMzFtW1Byb2Nlc3MgZXhpdGVkIHdpdGggY29kZSAke2V4aXRDb2RlfV1ceDFCWzBtXHIKYDsKICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUobWVzc2FnZTIpOwogICAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInByb2Nlc3MtY29tcGxldGUiLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgICBkZXRhaWw6IHsgdGFiSWQsIGV4aXRDb2RlIH0KICAgICAgICAgIH0pKTsKICAgICAgICAgIGlmICh0YWIyLmNsb3NlYWJsZSkgewogICAgICAgICAgICB0aGlzLnNob3dFeGl0ZWRUYWJBY3Rpb25iYXIodGFiSWQsIHRhYjIubGFiZWwsIGV4aXRDb2RlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU2hvdyBhY3Rpb25iYXIgb2ZmZXJpbmcgdG8gY2xvc2UgYW4gZXhpdGVkIHRhYgogICAgICAgICAqLwogICAgICAgIGFzeW5jIHNob3dFeGl0ZWRUYWJBY3Rpb25iYXIodGFiSWQsIHRhYkxhYmVsLCBleGl0Q29kZSkgewogICAgICAgICAgY29uc3QgaXNTdWNjZXNzID0gZXhpdENvZGUgPT09IDA7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNob3dBY3Rpb25iYXIoewogICAgICAgICAgICBtZXNzYWdlOiBpc1N1Y2Nlc3MgPyBgIiR7dGFiTGFiZWx9IiBjb21wbGV0ZWQuIENsb3NlIHRhYj9gIDogYCIke3RhYkxhYmVsfSIgZXhpdGVkIChjb2RlICR7ZXhpdENvZGV9KS4gQ2xvc2UgdGFiP2AsCiAgICAgICAgICAgIHR5cGU6IGlzU3VjY2VzcyA/ICJpbmZvIiA6ICJ3YXJuaW5nIiwKICAgICAgICAgICAgaWNvbjogaXNTdWNjZXNzID8gImx1Y2lkZTpjaGVja0NpcmNsZSIgOiAibHVjaWRlOmFsZXJ0VHJpYW5nbGUiLAogICAgICAgICAgICBhY3Rpb25zOiBbCiAgICAgICAgICAgICAgeyBpZDogImNsb3NlIiwgbGFiZWw6ICJDbG9zZSBUYWIiLCBwcmltYXJ5OiB0cnVlIH0sCiAgICAgICAgICAgICAgeyBpZDogImtlZXAiLCBsYWJlbDogIktlZXAgT3BlbiIgfQogICAgICAgICAgICBdLAogICAgICAgICAgICB0aW1lb3V0OiB7IGR1cmF0aW9uOiAxZTQsIGRlZmF1bHRBY3Rpb25JZDogImNsb3NlIiB9LAogICAgICAgICAgICBkaXNtaXNzaWJsZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAocmVzdWx0LmFjdGlvbklkID09PSAiY2xvc2UiKSB7CiAgICAgICAgICAgIHRoaXMuY2xvc2VUYWIodGFiSWQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09IFB1YmxpYyBBUEkgPT09PT09PT09PQogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZSBhIG5ldyBzaGVsbCB0YWIKICAgICAgICAgKi8KICAgICAgICBhc3luYyBjcmVhdGVTaGVsbFRhYihsYWJlbCkgewogICAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFiTWFuYWdlci5jcmVhdGVUYWIoewogICAgICAgICAgICB0eXBlOiAic2hlbGwiLAogICAgICAgICAgICBsYWJlbDogbGFiZWwgfHwgYGJhc2ggJHt0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiQ291bnQoKSArIDF9YCwKICAgICAgICAgICAgY2xvc2VhYmxlOiB0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiQ291bnQoKSA+IDAKICAgICAgICAgICAgLy8gRmlyc3QgdGFiIG5vdCBjbG9zZWFibGUKICAgICAgICAgIH0sIHRoaXMuaXNCcmlnaHQpOwogICAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgIHRoaXMuc3dpdGNoVG9UYWIodGFiMi5pZCk7CiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgYXdhaXQgdGhpcy5zcGF3blByb2Nlc3NGb3JUYWIodGFiMiwgImpzaCIpOwogICAgICAgICAgaWYgKHRoaXMudGFiTWFuYWdlci5nZXRUYWJDb3VudCgpID09PSAxICYmIHRoaXMuc2V0dXBDb21tYW5kKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclByb21wdCh0YWIyLnRlcm1pbmFsLCAifi8iKTsKICAgICAgICAgICAgaWYgKHRhYjIuaW5wdXRXcml0ZXIpIHsKICAgICAgICAgICAgICB0YWIyLmlucHV0V3JpdGVyLndyaXRlKHRoaXMuc2V0dXBDb21tYW5kKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgidGFiLWNyZWF0ZWQiLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgICBkZXRhaWw6IHsgdGFiSWQ6IHRhYjIuaWQgfQogICAgICAgICAgfSkpOwogICAgICAgICAgcmV0dXJuIHRhYjIuaWQ7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZSBhIHRlcm1pbmFsIHRhYiBmb3IgcnVubmluZyBhIHByb2Nlc3MKICAgICAgICAgKi8KICAgICAgICBhc3luYyBjcmVhdGVQcm9jZXNzVGFiKG9wdGlvbnMpIHsKICAgICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYk1hbmFnZXIuY3JlYXRlVGFiKG9wdGlvbnMsIHRoaXMuaXNCcmlnaHQpOwogICAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgIGlmIChvcHRpb25zLnN3aXRjaFRvVGFiICE9PSBmYWxzZSkgewogICAgICAgICAgICB0aGlzLnN3aXRjaFRvVGFiKHRhYjIuaWQpOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICAgIGlmIChvcHRpb25zLmNvbW1hbmQpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5zcGF3blByb2Nlc3NGb3JUYWIodGFiMiwgb3B0aW9ucy5jb21tYW5kLCBvcHRpb25zLmFyZ3MpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgidGFiLWNyZWF0ZWQiLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgICBkZXRhaWw6IHsgdGFiSWQ6IHRhYjIuaWQgfQogICAgICAgICAgfSkpOwogICAgICAgICAgcmV0dXJuIHRhYjIuaWQ7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgY3VycmVudGx5IGFjdGl2ZSB0YWIKICAgICAgICAgKi8KICAgICAgICBnZXRBY3RpdmVUYWIoKSB7CiAgICAgICAgICBpZiAoIXRoaXMuYWN0aXZlVGFiSWQpCiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgcmV0dXJuIHRoaXMudGFiTWFuYWdlci5nZXRUYWIodGhpcy5hY3RpdmVUYWJJZCkgfHwgbnVsbDsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IGFsbCB0YWJzCiAgICAgICAgICovCiAgICAgICAgZ2V0VGFicygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnRhYk1hbmFnZXIuZ2V0QWxsVGFicygpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTd2l0Y2ggdG8gYSBzcGVjaWZpYyB0YWIgYnkgSUQKICAgICAgICAgKi8KICAgICAgICBzZWxlY3RUYWIodGFiSWQpIHsKICAgICAgICAgIGlmICghdGhpcy50YWJNYW5hZ2VyLmhhc1RhYih0YWJJZCkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIHRoaXMuc3dpdGNoVG9UYWIodGFiSWQpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIENsb3NlIGEgdGFiIGJ5IElECiAgICAgICAgICovCiAgICAgICAgY2xvc2VUYWIodGFiSWQpIHsKICAgICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiKHRhYklkKTsKICAgICAgICAgIGlmICghdGFiMiB8fCAhdGFiMi5jbG9zZWFibGUpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIGlmICh0YWJJZCA9PT0gdGhpcy5hY3RpdmVUYWJJZCkgewogICAgICAgICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gYWxsVGFicy5maW5kSW5kZXgoKHQ5KSA9PiB0OS5pZCA9PT0gdGFiSWQpOwogICAgICAgICAgICBjb25zdCBuZXh0VGFiID0gYWxsVGFic1tjdXJyZW50SW5kZXggKyAxXSB8fCBhbGxUYWJzW2N1cnJlbnRJbmRleCAtIDFdOwogICAgICAgICAgICBpZiAobmV4dFRhYikgewogICAgICAgICAgICAgIHRoaXMuc3dpdGNoVG9UYWIobmV4dFRhYi5pZCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5hY3RpdmVUYWJJZCA9IG51bGw7CiAgICAgICAgICAgICAgdGhpcy5kZXRhY2hBY3RpdmVUZXJtaW5hbCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnRhYk1hbmFnZXIuY2xvc2VUYWIodGFiSWQpOwogICAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1jbG9zZWQiLCB7CiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgICBkZXRhaWw6IHsgdGFiSWQgfQogICAgICAgICAgfSkpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFdyaXRlIGRhdGEgdG8gYSB0YWIncyB0ZXJtaW5hbAogICAgICAgICAqLwogICAgICAgIHdyaXRlVG9UYWIodGFiSWQsIGRhdGEpIHsKICAgICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiKHRhYklkKTsKICAgICAgICAgIGlmICghdGFiMikKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgdGFiMi50ZXJtaW5hbC53cml0ZShkYXRhKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTZW5kIGlucHV0IHRvIGEgdGFiJ3MgcHJvY2VzcyAoaWYgaW50ZXJhY3RpdmUpCiAgICAgICAgICovCiAgICAgICAgc2VuZElucHV0VG9UYWIodGFiSWQsIGRhdGEpIHsKICAgICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiKHRhYklkKTsKICAgICAgICAgIGlmICghdGFiMiB8fCAhdGFiMi5pbnB1dFdyaXRlcikKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgdGFiMi5pbnB1dFdyaXRlci53cml0ZShkYXRhKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTaG93IGFuIGFjdGlvbmJhciBub3RpZmljYXRpb24gaW4gdGhlIHRlcm1pbmFsIHBhbmVsIGNvbnRleHQuCiAgICAgICAgICogVXNlIHRoaXMgZm9yIHRlcm1pbmFsLXJlbGF0ZWQgZGVjaXNpb25zIChlLmcuLCByZXRyeSBmYWlsZWQgcHJvY2Vzcywga2lsbCBwcm9jZXNzLCBldGMuKQogICAgICAgICAqLwogICAgICAgIGFzeW5jIHNob3dBY3Rpb25iYXIob3B0aW9ucykgewogICAgICAgICAgaWYgKCF0aGlzLnRlcm1pbmFsQWN0aW9uYmFyKSB7CiAgICAgICAgICAgIHRoaXMudGVybWluYWxBY3Rpb25iYXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYWN0aW9uYmFyIik7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpcy50ZXJtaW5hbEFjdGlvbmJhcj8uc2hvdyhvcHRpb25zKTsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PSBVdGlsaXR5IE1ldGhvZHMgPT09PT09PT09PQogICAgICAgIGFzeW5jIHdhaXRGb3JQcm9tcHQodGVybSwgcHJvbXB0KSB7CiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGNoZWNrUHJvbXB0ID0gKCkgPT4gewogICAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGVybS5idWZmZXIuYWN0aXZlOwogICAgICAgICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGxpbmVzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBsaW5lcy5nZXRMaW5lKGkxMSk7CiAgICAgICAgICAgICAgICBpZiAobGluZSAmJiBsaW5lLnRyYW5zbGF0ZVRvU3RyaW5nKCkuaW5jbHVkZXMocHJvbXB0KSkgewogICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgICAgICAgICB9LCAxMDApOwogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tQcm9tcHQsIDEwMCk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGNoZWNrUHJvbXB0KCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgc2V0RW52aXJvbm1lbnRWYXJpYWJsZXMoZW52QXJnKSB7CiAgICAgICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJObyBleGVjdXRpb24gZW52aXJvbm1lbnQgYXZhaWxhYmxlIik7CiAgICAgICAgICB9CiAgICAgICAgICBsZXQgZW52RmlsZSA9ICIiOwogICAgICAgICAgZm9yIChjb25zdCBrZXkyIGluIGVudkFyZykgewogICAgICAgICAgICBlbnZGaWxlICs9IGBleHBvcnQgJHtrZXkyfT0iJHtlbnZBcmdba2V5Ml19IgpgOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoIi9zb3VyY2UuZW52IiwgZW52RmlsZSk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgdW5kZXJseWluZyBleGVjdXRpb24gZW52aXJvbm1lbnQuCiAgICAgICAgICovCiAgICAgICAgZ2V0RXhlY3V0aW9uRW52aXJvbm1lbnQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudDsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTIoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNXb3Jrc3BhY2VUZXJtaW5hbDIgPSBfY2xhc3NUaGlzOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRwcm9taXNlQDMuMS4xMC9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9pbmRleC5qcwp2YXIgcmVxdWlyZV9kaXN0X3RzMyA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2hyb2NrcytzbWFydHByb21pc2VAMy4xLjEwL25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL2luZGV4LmpzIihleHBvcnRzKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgZXhwb3J0cy5nZXRGaXJzdFRydWVPckZhbHNlID0gZXhwb3J0cy50aW1lb3V0QW5kQ29udGludWUgPSBleHBvcnRzLnRpbWVvdXRXcmFwID0gZXhwb3J0cy5tYXAgPSBleHBvcnRzLnJlamVjdGVkUHJvbWlzZSA9IGV4cG9ydHMucmVzb2x2ZWRQcm9taXNlID0gZXhwb3J0cy5kZWZlciA9IGV4cG9ydHMuRGVmZXJyZWQgPSB2b2lkIDA7CiAgICB2YXIgRGVmZXJyZWQzID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgICAgICAgdGhpcy5yZXNvbHZlID0gKHZhbHVlQXJnKSA9PiB7CiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gImZ1bGZpbGxlZCI7CiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEF0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgcmVzb2x2ZTIodmFsdWVBcmcpOwogICAgICAgICAgfTsKICAgICAgICAgIHRoaXMucmVqZWN0ID0gKHJlYXNvbikgPT4gewogICAgICAgICAgICB0aGlzLnN0YXR1cyA9ICJyZWplY3RlZCI7CiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEF0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7CiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5zdGFydGVkQXQgPSBEYXRlLm5vdygpOwogICAgICAgICAgdGhpcy5zdGF0dXMgPSAicGVuZGluZyI7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZ2V0IGR1cmF0aW9uKCkgewogICAgICAgIGlmICh0aGlzLnN0b3BwZWRBdCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcHBlZEF0IC0gdGhpcy5zdGFydGVkQXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydGVkQXQ7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgZXhwb3J0cy5EZWZlcnJlZCA9IERlZmVycmVkMzsKICAgIGV4cG9ydHMuZGVmZXIgPSAoKSA9PiB7CiAgICAgIHJldHVybiBuZXcgRGVmZXJyZWQzKCk7CiAgICB9OwogICAgZXhwb3J0cy5yZXNvbHZlZFByb21pc2UgPSAodmFsdWUyKSA9PiB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUyKTsKICAgIH07CiAgICBleHBvcnRzLnJlamVjdGVkUHJvbWlzZSA9IChlcnIpID0+IHsKICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7CiAgICB9OwogICAgZXhwb3J0cy5tYXAgPSBhc3luYyAoaW5wdXRBcmcsIGZ1bmN0aW9uQXJnKSA9PiB7CiAgICAgIGNvbnN0IHByb21pc2VBcnJheSA9IFtdOwogICAgICBjb25zdCByZXN1bHRBcnJheSA9IFtdOwogICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaW5wdXRBcmcpIHsKICAgICAgICBjb25zdCBwcm9taXNlID0gZnVuY3Rpb25BcmcoaXRlbSk7CiAgICAgICAgcHJvbWlzZUFycmF5LnB1c2gocHJvbWlzZSk7CiAgICAgICAgcHJvbWlzZS50aGVuKCh4MykgPT4gewogICAgICAgICAgcmVzdWx0QXJyYXkucHVzaCh4Myk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZUFycmF5KTsKICAgICAgcmV0dXJuIHJlc3VsdEFycmF5OwogICAgfTsKICAgIGV4cG9ydHMudGltZW91dFdyYXAgPSBhc3luYyAocHJvbWlzZUFyZywgdGltZW91dEluTXNBcmcsIHJlamVjdEFyZyA9IHRydWUpID0+IHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBpZiAocmVqZWN0QXJnKSB7CiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoInRpbWVvdXQiKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgIH0KICAgICAgICB9LCB0aW1lb3V0SW5Nc0FyZyk7CiAgICAgICAgcHJvbWlzZUFyZy50aGVuKHJlc29sdmUyLCByZWplY3QpOwogICAgICB9KTsKICAgIH07CiAgICBleHBvcnRzLnRpbWVvdXRBbmRDb250aW51ZSA9IGFzeW5jIChwcm9taXNlQXJnLCB0aW1lb3V0SW5Nc0FyZyA9IDZlNCkgPT4gewogICAgICByZXR1cm4gZXhwb3J0cy50aW1lb3V0V3JhcChwcm9taXNlQXJnLCB0aW1lb3V0SW5Nc0FyZywgZmFsc2UpOwogICAgfTsKICAgIGV4cG9ydHMuZ2V0Rmlyc3RUcnVlT3JGYWxzZSA9IGFzeW5jIChwcm9taXNlc0FyZykgPT4gewogICAgICBjb25zdCBkb25lID0gZXhwb3J0cy5kZWZlcigpOwogICAgICBmb3IgKGNvbnN0IHByb21pc2VBcmcgb2YgcHJvbWlzZXNBcmcpIHsKICAgICAgICBwcm9taXNlQXJnLnRoZW4oKHJlc3VsdEFyZykgPT4gewogICAgICAgICAgaWYgKHJlc3VsdEFyZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICBkb25lLnJlc29sdmUodHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXNBcmcpLnRoZW4oKCkgPT4gewogICAgICAgIGRvbmUucmVzb2x2ZShmYWxzZSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gZG9uZS5wcm9taXNlOwogICAgfTsKICB9Cn0pOwoKLy8gdHNfd2ViL3BsdWdpbnMudHMKdmFyIHBsdWdpbnNfZXhwb3J0czUgPSB7fTsKX19leHBvcnQocGx1Z2luc19leHBvcnRzNSwgewogIERlZXNFbGVtZW50OiAoKSA9PiBEZWVzRWxlbWVudDIsCiAgY3NzOiAoKSA9PiBjc3MyLAogIGNzc01hbmFnZXI6ICgpID0+IGNzc01hbmFnZXIyLAogIGN1c3RvbUVsZW1lbnQ6ICgpID0+IGN1c3RvbUVsZW1lbnQsCiAgZGVlc0NhdGFsb2c6ICgpID0+IGRpc3RfdHNfd2ViX2V4cG9ydHMyLAogIGRlZXNFbGVtZW50OiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMyNiwKICBodG1sOiAoKSA9PiBodG1sNywKICBwcm9wZXJ0eTogKCkgPT4gcHJvcGVydHksCiAgc21hcnRyeDogKCkgPT4gZGlzdF90c19leHBvcnRzMiwKICBzdGF0ZTogKCkgPT4gc3RhdGUsCiAgdHlwZWRyZXF1ZXN0OiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMxNSwKICB0eXBlZHNvY2tldDogKCkgPT4gZGlzdF90c19leHBvcnRzMzAKfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2luZGV4LmpzCnZhciBkaXN0X3RzX3dlYl9leHBvcnRzMiA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX3dlYl9leHBvcnRzMiwgewogIENhbnZhc1Bvb2w6ICgpID0+IENhbnZhc1Bvb2wsCiAgRGVlc0FjdGlvbmJhcjogKCkgPT4gRGVlc0FjdGlvbmJhciwKICBEZWVzQXBwdWk6ICgpID0+IERlZXNBcHB1aSwKICBEZWVzQXBwdWlBY3Rpdml0eWxvZzogKCkgPT4gRGVlc0FwcHVpQWN0aXZpdHlsb2csCiAgRGVlc0FwcHVpQmFyOiAoKSA9PiBEZWVzQXBwdWlCYXIsCiAgRGVlc0FwcHVpQm90dG9tYmFyOiAoKSA9PiBEZWVzQXBwdWlCb3R0b21iYXIsCiAgRGVlc0FwcHVpTWFpbmNvbnRlbnQ6ICgpID0+IERlZXNBcHB1aU1haW5jb250ZW50LAogIERlZXNBcHB1aU1haW5tZW51OiAoKSA9PiBEZWVzQXBwdWlNYWlubWVudSwKICBEZWVzQXBwdWlQcm9maWxlRHJvcGRvd246ICgpID0+IERlZXNBcHB1aVByb2ZpbGVEcm9wZG93biwKICBEZWVzQXBwdWlTZWNvbmRhcnltZW51OiAoKSA9PiBEZWVzQXBwdWlTZWNvbmRhcnltZW51LAogIERlZXNBcHB1aVRhYnM6ICgpID0+IERlZXNBcHB1aVRhYnMsCiAgRGVlc0JhZGdlOiAoKSA9PiBEZWVzQmFkZ2UsCiAgRGVlc0J1dHRvbjogKCkgPT4gRGVlc0J1dHRvbiwKICBEZWVzQnV0dG9uRXhpdDogKCkgPT4gRGVlc0J1dHRvbkV4aXQsCiAgRGVlc0J1dHRvbkdyb3VwOiAoKSA9PiBEZWVzQnV0dG9uR3JvdXAsCiAgRGVlc0NoYXJ0QXJlYTogKCkgPT4gRGVlc0NoYXJ0QXJlYSwKICBEZWVzQ2hhcnRMb2c6ICgpID0+IERlZXNDaGFydExvZywKICBEZWVzQ2hpcHM6ICgpID0+IERlZXNDaGlwcywKICBEZWVzQ29udGV4dG1lbnU6ICgpID0+IERlZXNDb250ZXh0bWVudSwKICBEZWVzRGFzaGJvYXJkZ3JpZDogKCkgPT4gRGVlc0Rhc2hib2FyZGdyaWQsCiAgRGVlc0RhdGF2aWV3Q29kZWJveDogKCkgPT4gRGVlc0RhdGF2aWV3Q29kZWJveCwKICBEZWVzRGF0YXZpZXdTdGF0dXNvYmplY3Q6ICgpID0+IERlZXNEYXRhdmlld1N0YXR1c29iamVjdCwKICBEZWVzRm9ybTogKCkgPT4gRGVlc0Zvcm0sCiAgRGVlc0Zvcm1TdWJtaXQ6ICgpID0+IERlZXNGb3JtU3VibWl0LAogIERlZXNGb3JtYXR0aW5nTWVudTogKCkgPT4gRGVlc0Zvcm1hdHRpbmdNZW51LAogIERlZXNIZWFkaW5nOiAoKSA9PiBEZWVzSGVhZGluZywKICBEZWVzSGludDogKCkgPT4gRGVlc0hpbnQsCiAgRGVlc0ljb246ICgpID0+IERlZXNJY29uLAogIERlZXNJbnB1dEJhc2U6ICgpID0+IERlZXNJbnB1dEJhc2UsCiAgRGVlc0lucHV0Q2hlY2tib3g6ICgpID0+IERlZXNJbnB1dENoZWNrYm94LAogIERlZXNJbnB1dENvZGU6ICgpID0+IERlZXNJbnB1dENvZGUsCiAgRGVlc0lucHV0RGF0ZXBpY2tlcjogKCkgPT4gRGVlc0lucHV0RGF0ZXBpY2tlciwKICBEZWVzSW5wdXREcm9wZG93bjogKCkgPT4gRGVlc0lucHV0RHJvcGRvd24sCiAgRGVlc0lucHV0RmlsZXVwbG9hZDogKCkgPT4gRGVlc0lucHV0RmlsZXVwbG9hZCwKICBEZWVzSW5wdXRJYmFuOiAoKSA9PiBEZWVzSW5wdXRJYmFuLAogIERlZXNJbnB1dExpc3Q6ICgpID0+IERlZXNJbnB1dExpc3QsCiAgRGVlc0lucHV0TXVsdGl0b2dnbGU6ICgpID0+IERlZXNJbnB1dE11bHRpdG9nZ2xlLAogIERlZXNJbnB1dFBob25lOiAoKSA9PiBEZWVzSW5wdXRQaG9uZSwKICBEZWVzSW5wdXRQcm9maWxlUGljdHVyZTogKCkgPT4gRGVlc0lucHV0UHJvZmlsZVBpY3R1cmUsCiAgRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvcjogKCkgPT4gRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvciwKICBEZWVzSW5wdXRSYWRpb2dyb3VwOiAoKSA9PiBEZWVzSW5wdXRSYWRpb2dyb3VwLAogIERlZXNJbnB1dFJpY2h0ZXh0OiAoKSA9PiBEZWVzSW5wdXRSaWNodGV4dCwKICBEZWVzSW5wdXRUYWdzOiAoKSA9PiBEZWVzSW5wdXRUYWdzLAogIERlZXNJbnB1dFRleHQ6ICgpID0+IERlZXNJbnB1dFRleHQsCiAgRGVlc0lucHV0VG9nZ2xlOiAoKSA9PiBEZWVzSW5wdXRUb2dnbGUsCiAgRGVlc0lucHV0VHlwZWxpc3Q6ICgpID0+IERlZXNJbnB1dFR5cGVsaXN0LAogIERlZXNJbnB1dFd5c2l3eWc6ICgpID0+IERlZXNJbnB1dFd5c2l3eWcsCiAgRGVlc0xhYmVsOiAoKSA9PiBEZWVzTGFiZWwsCiAgRGVlc01vYmlsZW5hdmlnYXRpb246ICgpID0+IERlZXNNb2JpbGVuYXZpZ2F0aW9uLAogIERlZXNNb2RhbDogKCkgPT4gRGVlc01vZGFsLAogIERlZXNQYWdpbmF0aW9uOiAoKSA9PiBEZWVzUGFnaW5hdGlvbiwKICBEZWVzUGFuZWw6ICgpID0+IERlZXNQYW5lbCwKICBEZWVzUGRmOiAoKSA9PiBEZWVzUGRmLAogIERlZXNQZGZQcmV2aWV3OiAoKSA9PiBEZWVzUGRmUHJldmlldywKICBEZWVzUGRmVmlld2VyOiAoKSA9PiBEZWVzUGRmVmlld2VyLAogIERlZXNQcm9ncmVzc2JhcjogKCkgPT4gRGVlc1Byb2dyZXNzYmFyLAogIERlZXNTZWFyY2hiYXI6ICgpID0+IERlZXNTZWFyY2hiYXIsCiAgRGVlc1Nob3BwaW5nUHJvZHVjdGNhcmQ6ICgpID0+IERlZXNTaG9wcGluZ1Byb2R1Y3RjYXJkLAogIERlZXNTaW1wbGVBcHBEYXNoOiAoKSA9PiBEZWVzU2ltcGxlQXBwRGFzaCwKICBEZWVzU2ltcGxlTG9naW46ICgpID0+IERlZXNTaW1wbGVMb2dpbiwKICBEZWVzU2xhc2hNZW51OiAoKSA9PiBEZWVzU2xhc2hNZW51LAogIERlZXNTcGVlY2hidWJibGU6ICgpID0+IERlZXNTcGVlY2hidWJibGUsCiAgRGVlc1NwaW5uZXI6ICgpID0+IERlZXNTcGlubmVyLAogIERlZXNTdGF0c0dyaWQ6ICgpID0+IERlZXNTdGF0c0dyaWQsCiAgRGVlc1N0ZXBwZXI6ICgpID0+IERlZXNTdGVwcGVyLAogIERlZXNUYWJsZTogKCkgPT4gRGVlc1RhYmxlLAogIERlZXNUaGVtZTogKCkgPT4gRGVlc1RoZW1lLAogIERlZXNUb2FzdDogKCkgPT4gRGVlc1RvYXN0LAogIERlZXNVcGRhdGVyOiAoKSA9PiBEZWVzVXBkYXRlciwKICBEZWVzV2luZG93Q29udHJvbHM6ICgpID0+IERlZXNXaW5kb3dDb250cm9scywKICBEZWVzV2luZG93TGF5ZXI6ICgpID0+IERlZXNXaW5kb3dMYXllciwKICBEZWVzV29ya3NwYWNlOiAoKSA9PiBEZWVzV29ya3NwYWNlLAogIERlZXNXb3Jrc3BhY2VCb3R0b21iYXI6ICgpID0+IERlZXNXb3Jrc3BhY2VCb3R0b21iYXIsCiAgRGVlc1dvcmtzcGFjZURpZmZFZGl0b3I6ICgpID0+IERlZXNXb3Jrc3BhY2VEaWZmRWRpdG9yLAogIERlZXNXb3Jrc3BhY2VGaWxldHJlZTogKCkgPT4gRGVlc1dvcmtzcGFjZUZpbGV0cmVlLAogIERlZXNXb3Jrc3BhY2VNYXJrZG93bjogKCkgPT4gRGVlc1dvcmtzcGFjZU1hcmtkb3duLAogIERlZXNXb3Jrc3BhY2VNYXJrZG93bm91dGxldDogKCkgPT4gRGVlc1dvcmtzcGFjZU1hcmtkb3dub3V0bGV0LAogIERlZXNXb3Jrc3BhY2VNb25hY286ICgpID0+IERlZXNXb3Jrc3BhY2VNb25hY28sCiAgRGVlc1dvcmtzcGFjZVRlcm1pbmFsOiAoKSA9PiBEZWVzV29ya3NwYWNlVGVybWluYWwsCiAgRGVlc1dvcmtzcGFjZVRlcm1pbmFsUHJldmlldzogKCkgPT4gRGVlc1dvcmtzcGFjZVRlcm1pbmFsUHJldmlldywKICBEZWVzV3lzaXd5Z0Jsb2NrOiAoKSA9PiBEZWVzV3lzaXd5Z0Jsb2NrLAogIFBST0dSQU1NSU5HX0xBTkdVQUdFUzogKCkgPT4gUFJPR1JBTU1JTkdfTEFOR1VBR0VTLAogIFBkZk1hbmFnZXI6ICgpID0+IFBkZk1hbmFnZXIsCiAgUGVyZm9ybWFuY2VNb25pdG9yOiAoKSA9PiBQZXJmb3JtYW5jZU1vbml0b3IsCiAgVGVybWluYWxUYWJNYW5hZ2VyOiAoKSA9PiBUZXJtaW5hbFRhYk1hbmFnZXIsCiAgVHlwZVNjcmlwdEludGVsbGlTZW5zZU1hbmFnZXI6ICgpID0+IFR5cGVTY3JpcHRJbnRlbGxpU2Vuc2VNYW5hZ2VyLAogIFZpZXdSZWdpc3RyeTogKCkgPT4gVmlld1JlZ2lzdHJ5LAogIFdlYkNvbnRhaW5lckVudmlyb25tZW50OiAoKSA9PiBXZWJDb250YWluZXJFbnZpcm9ubWVudCwKICBXeXNpd3lnQmxvY2tPcGVyYXRpb25zOiAoKSA9PiBXeXNpd3lnQmxvY2tPcGVyYXRpb25zLAogIFd5c2l3eWdCbG9ja3M6ICgpID0+IFd5c2l3eWdCbG9ja3MsCiAgV3lzaXd5Z0NvbnZlcnRlcnM6ICgpID0+IFd5c2l3eWdDb252ZXJ0ZXJzLAogIFd5c2l3eWdEcmFnRHJvcEhhbmRsZXI6ICgpID0+IFd5c2l3eWdEcmFnRHJvcEhhbmRsZXIsCiAgV3lzaXd5Z0Zvcm1hdHRpbmc6ICgpID0+IFd5c2l3eWdGb3JtYXR0aW5nLAogIFd5c2l3eWdIaXN0b3J5OiAoKSA9PiBXeXNpd3lnSGlzdG9yeSwKICBXeXNpd3lnSW5wdXRIYW5kbGVyOiAoKSA9PiBXeXNpd3lnSW5wdXRIYW5kbGVyLAogIFd5c2l3eWdLZXlib2FyZEhhbmRsZXI6ICgpID0+IFd5c2l3eWdLZXlib2FyZEhhbmRsZXIsCiAgV3lzaXd5Z01vZGFsTWFuYWdlcjogKCkgPT4gV3lzaXd5Z01vZGFsTWFuYWdlciwKICBXeXNpd3lnU2VsZWN0aW9uOiAoKSA9PiBXeXNpd3lnU2VsZWN0aW9uLAogIFd5c2l3eWdTaG9ydGN1dHM6ICgpID0+IFd5c2l3eWdTaG9ydGN1dHMsCiAgWkluZGV4UmVnaXN0cnk6ICgpID0+IFpJbmRleFJlZ2lzdHJ5LAogIGNvbG9yczogKCkgPT4gY29sb3JzX2V4cG9ydHMsCiAgY29tbWl0aW5mbzogKCkgPT4gY29tbWl0aW5mbywKICBjb21wb25lbnRaSW5kZXg6ICgpID0+IGNvbXBvbmVudFpJbmRleCwKICBkZWJvdW5jZTogKCkgPT4gZGVib3VuY2UzLAogIGZvcm1hdEZpbGVTaXplOiAoKSA9PiBmb3JtYXRGaWxlU2l6ZSwKICBnZXRaSW5kZXg6ICgpID0+IGdldFpJbmRleCwKICBpY29uczogKCkgPT4gaWNvbnM0LAogIGlzSW5WaWV3cG9ydDogKCkgPT4gaXNJblZpZXdwb3J0LAogIHJlZ2lzdGVyQWxsQmxvY2tIYW5kbGVyczogKCkgPT4gcmVnaXN0ZXJBbGxCbG9ja0hhbmRsZXJzLAogIHRoZW1lRGVmYXVsdFN0eWxlczogKCkgPT4gdGhlbWVEZWZhdWx0U3R5bGVzLAogIHRoZW1lRGVmYXVsdHM6ICgpID0+IHRoZW1lRGVmYXVsdHMsCiAgdGhyb3R0bGU6ICgpID0+IHRocm90dGxlMiwKICB3eXNpd3lnU3R5bGVzOiAoKSA9PiB3eXNpd3lnU3R5bGVzLAogIHpJbmRleExheWVyczogKCkgPT4gekluZGV4TGF5ZXJzLAogIHpJbmRleFJlZ2lzdHJ5OiAoKSA9PiB6SW5kZXhSZWdpc3RyeQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDB6aW5kZXguanMKdmFyIHpJbmRleExheWVycyA9IHsKICAvLyBCYXNlIGxheWVyOiBSZWd1bGFyIGNvbnRlbnQKICBiYXNlOiB7CiAgICBjb250ZW50OiAiYXV0byIsCiAgICBpbnB1dEVsZW1lbnRzOiAxCiAgfSwKICAvLyBGaXhlZCBVSSBlbGVtZW50cwogIGZpeGVkOiB7CiAgICBhcHBCYXI6IDEwLAogICAgc2lkZU1lbnU6IDEwLAogICAgbW9iaWxlTmF2OiAyNTAKICB9LAogIC8vIE92ZXJsYXkgYmFja2Ryb3BzIChzZW1pLXRyYW5zcGFyZW50IGJhY2tncm91bmRzKQogIGJhY2tkcm9wOiB7CiAgICBkcm9wZG93bjogMTk5OSwKICAgIC8vIEJlbG93IG1vZGFscyBidXQgYWJvdmUgZml4ZWQgZWxlbWVudHMKICAgIG1vZGFsOiAyOTk5LAogICAgLy8gQmVsb3cgZHJvcGRvd25zIG9uIG1vZGFscwogICAgY29udGV4dE1lbnU6IDM5OTkKICAgIC8vIEJlbG93IGNyaXRpY2FsIG92ZXJsYXlzCiAgfSwKICAvLyBJbnRlcmFjdGl2ZSBvdmVybGF5cwogIG92ZXJsYXk6IHsKICAgIGRyb3Bkb3duOiAyZTMsCiAgICAvLyBEcm9wZG93bnMgYW5kIHNlbGVjdCBtZW51cwogICAgbW9kYWw6IDNlMywKICAgIC8vIE1vZGFsIGRpYWxvZ3MKICAgIGNvbnRleHRNZW51OiA0ZTMsCiAgICAvLyBDb250ZXh0IG1lbnVzIGFuZCB0b29sdGlwcwogICAgdG9hc3Q6IDVlMwogICAgLy8gVG9hc3Qgbm90aWZpY2F0aW9ucyAoaGlnaGVzdCBwcmlvcml0eSkKICB9LAogIC8vIFNwZWNpYWwgY2FzZXMgZm9yIG5lc3RlZCBlbGVtZW50cwogIG1vZGFsRHJvcGRvd246IDM1MDAsCiAgLy8gRHJvcGRvd25zIGluc2lkZSBtb2RhbHMKICB3eXNpd3lnTWVudXM6IDQ1MDAKICAvLyBFZGl0b3IgZm9ybWF0dGluZyBtZW51cwp9OwpmdW5jdGlvbiBnZXRaSW5kZXgoY2F0ZWdvcnksIHN1YmNhdGVnb3J5KSB7CiAgY29uc3QgY2F0ZWdvcnlPYmogPSB6SW5kZXhMYXllcnNbY2F0ZWdvcnldOwogIGlmICh0eXBlb2YgY2F0ZWdvcnlPYmogPT09ICJvYmplY3QiICYmIHN1YmNhdGVnb3J5KSB7CiAgICByZXR1cm4gY2F0ZWdvcnlPYmpbc3ViY2F0ZWdvcnldIHx8ICJhdXRvIjsKICB9CiAgcmV0dXJuIHR5cGVvZiBjYXRlZ29yeU9iaiA9PT0gIm51bWJlciIgPyBjYXRlZ29yeU9iaiA6ICJhdXRvIjsKfQp2YXIgY29tcG9uZW50WkluZGV4ID0gewogICJkZWVzLW1vZGFsIjogekluZGV4TGF5ZXJzLm92ZXJsYXkubW9kYWwsCiAgImRlZXMtd2luZG93bGF5ZXIiOiB6SW5kZXhMYXllcnMub3ZlcmxheS5kcm9wZG93biwKICAiZGVlcy1jb250ZXh0bWVudSI6IHpJbmRleExheWVycy5vdmVybGF5LmNvbnRleHRNZW51LAogICJkZWVzLXRvYXN0IjogekluZGV4TGF5ZXJzLm92ZXJsYXkudG9hc3QsCiAgImRlZXMtYXBwdWktbWFpbm1lbnUiOiB6SW5kZXhMYXllcnMuZml4ZWQuYXBwQmFyLAogICJkZWVzLW1vYmlsZW5hdmlnYXRpb24iOiB6SW5kZXhMYXllcnMuZml4ZWQubW9iaWxlTmF2LAogICJkZWVzLXNsYXNoLW1lbnUiOiB6SW5kZXhMYXllcnMud3lzaXd5Z01lbnVzLAogICJkZWVzLWZvcm1hdHRpbmctbWVudSI6IHpJbmRleExheWVycy53eXNpd3lnTWVudXMKfTsKdmFyIFpJbmRleFJlZ2lzdHJ5ID0gY2xhc3MgX1pJbmRleFJlZ2lzdHJ5IHsKICBzdGF0aWMgaW5zdGFuY2U7CiAgYWN0aXZlRWxlbWVudHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogIGVsZW1lbnRaSW5kZXhNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICBjdXJyZW50WkluZGV4ID0gMWUzOwogIC8vIFN0YXJ0aW5nIHotaW5kZXgKICBjb25zdHJ1Y3RvcigpIHsKICB9CiAgc3RhdGljIGdldEluc3RhbmNlKCkgewogICAgaWYgKCFfWkluZGV4UmVnaXN0cnkuaW5zdGFuY2UpIHsKICAgICAgX1pJbmRleFJlZ2lzdHJ5Lmluc3RhbmNlID0gbmV3IF9aSW5kZXhSZWdpc3RyeSgpOwogICAgfQogICAgcmV0dXJuIF9aSW5kZXhSZWdpc3RyeS5pbnN0YW5jZTsKICB9CiAgLyoqCiAgICogR2V0IHRoZSBuZXh0IGF2YWlsYWJsZSB6LWluZGV4CiAgICogQHJldHVybnMgVGhlIG5leHQgYXZhaWxhYmxlIHotaW5kZXgKICAgKi8KICBnZXROZXh0WkluZGV4KCkgewogICAgdGhpcy5jdXJyZW50WkluZGV4ICs9IDEwOwogICAgcmV0dXJuIHRoaXMuY3VycmVudFpJbmRleDsKICB9CiAgLyoqCiAgICogUmVnaXN0ZXIgYW4gZWxlbWVudCB3aXRoIHRoZSB6LWluZGV4IHJlZ2lzdHJ5CiAgICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgSFRNTCBlbGVtZW50IHRvIHJlZ2lzdGVyCiAgICogQHBhcmFtIHpJbmRleCAtIFRoZSB6LWluZGV4IGFzc2lnbmVkIHRvIHRoaXMgZWxlbWVudAogICAqLwogIHJlZ2lzdGVyKGVsZW1lbnQ0LCB6SW5kZXgpIHsKICAgIHRoaXMuYWN0aXZlRWxlbWVudHMuYWRkKGVsZW1lbnQ0KTsKICAgIHRoaXMuZWxlbWVudFpJbmRleE1hcC5zZXQoZWxlbWVudDQsIHpJbmRleCk7CiAgfQogIC8qKgogICAqIFVucmVnaXN0ZXIgYW4gZWxlbWVudCBmcm9tIHRoZSB6LWluZGV4IHJlZ2lzdHJ5CiAgICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgSFRNTCBlbGVtZW50IHRvIHVucmVnaXN0ZXIKICAgKi8KICB1bnJlZ2lzdGVyKGVsZW1lbnQ0KSB7CiAgICB0aGlzLmFjdGl2ZUVsZW1lbnRzLmRlbGV0ZShlbGVtZW50NCk7CiAgICB0aGlzLmVsZW1lbnRaSW5kZXhNYXAuZGVsZXRlKGVsZW1lbnQ0KTsKICAgIGlmICh0aGlzLmFjdGl2ZUVsZW1lbnRzLnNpemUgPT09IDApIHsKICAgICAgdGhpcy5jdXJyZW50WkluZGV4ID0gMWUzOwogICAgfQogIH0KICAvKioKICAgKiBHZXQgdGhlIHotaW5kZXggZm9yIGEgc3BlY2lmaWMgZWxlbWVudAogICAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIEhUTUwgZWxlbWVudAogICAqIEByZXR1cm5zIFRoZSB6LWluZGV4IG9yIHVuZGVmaW5lZCBpZiBub3QgcmVnaXN0ZXJlZAogICAqLwogIGdldEVsZW1lbnRaSW5kZXgoZWxlbWVudDQpIHsKICAgIHJldHVybiB0aGlzLmVsZW1lbnRaSW5kZXhNYXAuZ2V0KGVsZW1lbnQ0KTsKICB9CiAgLyoqCiAgICogR2V0IGNvdW50IG9mIGFjdGl2ZSBlbGVtZW50cwogICAqIEByZXR1cm5zIE51bWJlciBvZiBhY3RpdmUgZWxlbWVudHMKICAgKi8KICBnZXRBY3RpdmVDb3VudCgpIHsKICAgIHJldHVybiB0aGlzLmFjdGl2ZUVsZW1lbnRzLnNpemU7CiAgfQogIC8qKgogICAqIEdldCB0aGUgY3VycmVudCBoaWdoZXN0IHotaW5kZXgKICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCB6LWluZGV4IHZhbHVlCiAgICovCiAgZ2V0Q3VycmVudFpJbmRleCgpIHsKICAgIHJldHVybiB0aGlzLmN1cnJlbnRaSW5kZXg7CiAgfQogIC8qKgogICAqIENsZWFyIGFsbCByZWdpc3RyYXRpb25zICh1c2VmdWwgZm9yIHRlc3RpbmcpCiAgICovCiAgY2xlYXIoKSB7CiAgICB0aGlzLmFjdGl2ZUVsZW1lbnRzLmNsZWFyKCk7CiAgICB0aGlzLmVsZW1lbnRaSW5kZXhNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIHRoaXMuY3VycmVudFpJbmRleCA9IDFlMzsKICB9CiAgLyoqCiAgICogR2V0IGFsbCBhY3RpdmUgZWxlbWVudHMgaW4gei1pbmRleCBvcmRlcgogICAqIEByZXR1cm5zIEFycmF5IG9mIGVsZW1lbnRzIHNvcnRlZCBieSB6LWluZGV4CiAgICovCiAgZ2V0QWN0aXZlRWxlbWVudHNJbk9yZGVyKCkgewogICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5hY3RpdmVFbGVtZW50cykuc29ydCgoYTUsIGI1KSA9PiB7CiAgICAgIGNvbnN0IGFaID0gdGhpcy5lbGVtZW50WkluZGV4TWFwLmdldChhNSkgfHwgMDsKICAgICAgY29uc3QgYlogPSB0aGlzLmVsZW1lbnRaSW5kZXhNYXAuZ2V0KGI1KSB8fCAwOwogICAgICByZXR1cm4gYVogLSBiWjsKICAgIH0pOwogIH0KfTsKdmFyIHpJbmRleFJlZ2lzdHJ5ID0gWkluZGV4UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czI3ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czI3LCB7CiAgYnVzaW5lc3M6ICgpID0+IGJ1c2luZXNzX2V4cG9ydHMyLAogIGNvZGU6ICgpID0+IGNvZGVfZXhwb3J0czIsCiAgY29udGFpbmVyOiAoKSA9PiBjb250YWluZXJfZXhwb3J0czIsCiAgY29udGVudDogKCkgPT4gY29udGVudF9leHBvcnRzMiwKICBkYXRhYmFzZTogKCkgPT4gZGF0YWJhc2VfZXhwb3J0czIsCiAgZGVzY3JpcHRvcnM6ICgpID0+IGRlc2NyaXB0b3JzX2V4cG9ydHMsCiAgZmluYW5jZTogKCkgPT4gZmluYW5jZV9leHBvcnRzMiwKICBnZW5lcmFsOiAoKSA9PiBnZW5lcmFsX2V4cG9ydHMyLAogIG5ldHdvcms6ICgpID0+IG5ldHdvcmtfZXhwb3J0czIsCiAgc2FhczogKCkgPT4gc2Fhc19leHBvcnRzMiwKICBzdG9yYWdlOiAoKSA9PiBzdG9yYWdlX2V4cG9ydHMyLAogIHdlYnNpdGU6ICgpID0+IHdlYnNpdGVfZXhwb3J0czIKfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2luZGV4LmpzCnZhciBidXNpbmVzc19leHBvcnRzMiA9IHt9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9pbmRleC5qcwp2YXIgZGF0YWJhc2VfZXhwb3J0czIgPSB7fTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9pbmRleC5qcwp2YXIgZmluYW5jZV9leHBvcnRzMiA9IHt9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb2RlL2luZGV4LmpzCnZhciBjb2RlX2V4cG9ydHMyID0ge307CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRhaW5lci9pbmRleC5qcwp2YXIgY29udGFpbmVyX2V4cG9ydHMyID0ge307CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2Rlc2NyaXB0b3JzL2luZGV4LmpzCnZhciBkZXNjcmlwdG9yc19leHBvcnRzID0ge307CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvaW5kZXguanMKdmFyIGNvbnRlbnRfZXhwb3J0czIgPSB7fTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZ2VuZXJhbC9pbmRleC5qcwp2YXIgZ2VuZXJhbF9leHBvcnRzMiA9IHt9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2luZGV4LmpzCnZhciBuZXR3b3JrX2V4cG9ydHMyID0ge307Cl9fZXhwb3J0KG5ldHdvcmtfZXhwb3J0czIsIHsKICBJQ25hbWVEZXNjcmlwdG9yOiAoKSA9PiBJQ25hbWVEZXNjcmlwdG9yMgp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9jbmFtZS5qcwp2YXIgSUNuYW1lRGVzY3JpcHRvcjIgPSBjbGFzcyB7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3NhYXMvaW5kZXguanMKdmFyIHNhYXNfZXhwb3J0czIgPSB7fTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc3RvcmFnZS9pbmRleC5qcwp2YXIgc3RvcmFnZV9leHBvcnRzMiA9IHt9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL2luZGV4LmpzCnZhciB3ZWJzaXRlX2V4cG9ydHMyID0ge307CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwcGx1Z2lucy5qcwppbml0X2Rpc3RfdHMoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1jb250ZXh0bWVudS9kZWVzLWNvbnRleHRtZW51LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jID0gKCkgPT4gYjJgCjxzdHlsZT4KICAud2l0aE1hcmdpbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1hcmdpbjogMjBweDsKICB9CiAgLmRlbW8tY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAyMHB4OwogICAgcGFkZGluZzogMjBweDsKICAgIG1pbi1oZWlnaHQ6IDQwMHB4OwogIH0KICAuZGVtby1hcmVhIHsKICAgIHBhZGRpbmc6IDQwcHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBjdXJzb3I6IGNvbnRleHQtbWVudTsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4yczsKICB9CiAgLmRlbW8tYXJlYTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDIpOwogIH0KPC9zdHlsZT4KPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogIDxkZWVzLXBhbmVsIGhlYWRpbmc9IkJhc2ljIENvbnRleHQgTWVudSB3aXRoIE5lc3RlZCBTdWJtZW51cyI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLWFyZWEiIEBjb250ZXh0bWVudT0keyhldmVudEFyZykgPT4gewogIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudEFyZywgWwogICAgewogICAgICBuYW1lOiAiRmlsZSIsCiAgICAgIGljb25OYW1lOiAiZmlsZVRleHQiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwKICAgICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgICAgc3VibWVudTogWwogICAgICAgIHsgbmFtZTogIk5ldyIsIGljb25OYW1lOiAiZmlsZVBsdXMiLCBzaG9ydGN1dDogIkNtZCtOIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiTmV3IGZpbGUiKSB9LAogICAgICAgIHsgbmFtZTogIk9wZW4iLCBpY29uTmFtZTogImZvbGRlck9wZW4iLCBzaG9ydGN1dDogIkNtZCtPIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiT3BlbiBmaWxlIikgfSwKICAgICAgICB7IG5hbWU6ICJTYXZlIiwgaWNvbk5hbWU6ICJzYXZlIiwgc2hvcnRjdXQ6ICJDbWQrUyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNhdmUiKSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIkV4cG9ydCBhcyBQREYiLCBpY29uTmFtZTogImRvd25sb2FkIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRXhwb3J0IFBERiIpIH0sCiAgICAgICAgeyBuYW1lOiAiRXhwb3J0IGFzIEhUTUwiLCBpY29uTmFtZTogImNvZGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJFeHBvcnQgSFRNTCIpIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgbmFtZTogIkVkaXQiLAogICAgICBpY29uTmFtZTogImVkaXQzIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sCiAgICAgIC8vIFBhcmVudCBpdGVtcyB3aXRoIHN1Ym1lbnVzIHN0aWxsIG5lZWQgYW4gYWN0aW9uCiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJDdXQiLCBpY29uTmFtZTogInNjaXNzb3JzIiwgc2hvcnRjdXQ6ICJDbWQrWCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkN1dCIpIH0sCiAgICAgICAgeyBuYW1lOiAiQ29weSIsIGljb25OYW1lOiAiY29weSIsIHNob3J0Y3V0OiAiQ21kK0MiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDb3B5IikgfSwKICAgICAgICB7IG5hbWU6ICJQYXN0ZSIsIGljb25OYW1lOiAiY2xpcGJvYXJkIiwgc2hvcnRjdXQ6ICJDbWQrViIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlBhc3RlIikgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7IG5hbWU6ICJGaW5kIiwgaWNvbk5hbWU6ICJzZWFyY2giLCBzaG9ydGN1dDogIkNtZCtGIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRmluZCIpIH0sCiAgICAgICAgeyBuYW1lOiAiUmVwbGFjZSIsIGljb25OYW1lOiAicmVwZWF0Iiwgc2hvcnRjdXQ6ICJDbWQrSCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlJlcGxhY2UiKSB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJWaWV3IiwKICAgICAgaWNvbk5hbWU6ICJleWUiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwKICAgICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgICAgc3VibWVudTogWwogICAgICAgIHsgbmFtZTogIlpvb20gSW4iLCBpY29uTmFtZTogInpvb21JbiIsIHNob3J0Y3V0OiAiQ21kKysiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJab29tIGluIikgfSwKICAgICAgICB7IG5hbWU6ICJab29tIE91dCIsIGljb25OYW1lOiAiem9vbU91dCIsIHNob3J0Y3V0OiAiQ21kKy0iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJab29tIG91dCIpIH0sCiAgICAgICAgeyBuYW1lOiAiUmVzZXQgWm9vbSIsIGljb25OYW1lOiAibWF4aW1pemUyIiwgc2hvcnRjdXQ6ICJDbWQrMCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlJlc2V0IHpvb20iKSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIkZ1bGwgU2NyZWVuIiwgaWNvbk5hbWU6ICJtYXhpbWl6ZSIsIHNob3J0Y3V0OiAiRjExIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRnVsbCBzY3JlZW4iKSB9CiAgICAgIF0KICAgIH0sCiAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgIHsKICAgICAgbmFtZTogIlNldHRpbmdzIiwKICAgICAgaWNvbk5hbWU6ICJzZXR0aW5ncyIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNldHRpbmdzIikKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJIZWxwIiwKICAgICAgaWNvbk5hbWU6ICJoZWxwQ2lyY2xlIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sCiAgICAgIC8vIFBhcmVudCBpdGVtcyB3aXRoIHN1Ym1lbnVzIHN0aWxsIG5lZWQgYW4gYWN0aW9uCiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJEb2N1bWVudGF0aW9uIiwgaWNvbk5hbWU6ICJib29rIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRG9jdW1lbnRhdGlvbiIpIH0sCiAgICAgICAgeyBuYW1lOiAiS2V5Ym9hcmQgU2hvcnRjdXRzIiwgaWNvbk5hbWU6ICJrZXlib2FyZCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNob3J0Y3V0cyIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiQWJvdXQiLCBpY29uTmFtZTogImluZm8iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJBYm91dCIpIH0KICAgICAgXQogICAgfQogIF0pOwp9fT4KICAgICAgPGgzPlJpZ2h0LWNsaWNrIGFueXdoZXJlIGluIHRoaXMgYXJlYTwvaDM+CiAgICAgIDxwPkEgY29udGV4dCBtZW51IHdpdGggbmVzdGVkIHN1Ym1lbnVzIHdpbGwgYXBwZWFyPC9wPgogICAgPC9kaXY+CiAgPC9kZWVzLXBhbmVsPgogIDxkZWVzLXBhbmVsIGhlYWRpbmc9IkNvbXBvbmVudC1TcGVjaWZpYyBDb250ZXh0IE1lbnUiPgogICAgPGRlZXMtYnV0dG9uIHN0eWxlPSJtYXJnaW46IDIwcHg7IiBAY29udGV4dG1lbnU9JHsoZXZlbnRBcmcpID0+IHsKICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnRBcmcsIFsKICAgIHsKICAgICAgbmFtZTogIkJ1dHRvbiBBY3Rpb25zIiwKICAgICAgaWNvbk5hbWU6ICJtb3VzZVBvaW50ZXIiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwKICAgICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgICAgc3VibWVudTogWwogICAgICAgIHsgbmFtZTogIkNsaWNrIiwgaWNvbk5hbWU6ICJtb3VzZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkNsaWNrIGFjdGlvbiIpIH0sCiAgICAgICAgeyBuYW1lOiAiRG91YmxlIENsaWNrIiwgaWNvbk5hbWU6ICJ6YXAiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJEb3VibGUgY2xpY2siKSB9LAogICAgICAgIHsgbmFtZTogIkxvbmcgUHJlc3MiLCBpY29uTmFtZTogImNsb2NrIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiTG9uZyBwcmVzcyIpIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgbmFtZTogIkJ1dHRvbiBTdGF0ZSIsCiAgICAgIGljb25OYW1lOiAidG9nZ2xlTGVmdCIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICB9LAogICAgICAvLyBQYXJlbnQgaXRlbXMgd2l0aCBzdWJtZW51cyBzdGlsbCBuZWVkIGFuIGFjdGlvbgogICAgICBzdWJtZW51OiBbCiAgICAgICAgeyBuYW1lOiAiRW5hYmxlIiwgaWNvbk5hbWU6ICJjaGVja0NpcmNsZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkVuYWJsZSIpIH0sCiAgICAgICAgeyBuYW1lOiAiRGlzYWJsZSIsIGljb25OYW1lOiAieENpcmNsZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkRpc2FibGUiKSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIlNob3ciLCBpY29uTmFtZTogImV5ZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNob3ciKSB9LAogICAgICAgIHsgbmFtZTogIkhpZGUiLCBpY29uTmFtZTogImV5ZU9mZiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkhpZGUiKSB9CiAgICAgIF0KICAgIH0sCiAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgIHsKICAgICAgbmFtZTogIkRpc2FibGVkIEFjdGlvbiIsCiAgICAgIGljb25OYW1lOiAiYmFuIiwKICAgICAgZGlzYWJsZWQ6IHRydWUsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlRoaXMgc2hvdWxkIG5vdCBydW4iKQogICAgfSwKICAgIHsKICAgICAgbmFtZTogIlByb3BlcnRpZXMiLAogICAgICBpY29uTmFtZTogInNldHRpbmdzIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQnV0dG9uIHByb3BlcnRpZXMiKQogICAgfQogIF0pOwp9fT5SaWdodC1jbGljayBvbiB0aGlzIGJ1dHRvbjwvZGVlcy1idXR0b24+CiAgPC9kZWVzLXBhbmVsPgoKICA8ZGVlcy1wYW5lbCBoZWFkaW5nPSJBZHZhbmNlZCBDb250ZXh0IE1lbnUgRXhhbXBsZSI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLWFyZWEiIEBjb250ZXh0bWVudT0keyhldmVudEFyZykgPT4gewogIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudEFyZywgWwogICAgewogICAgICBuYW1lOiAiRm9ybWF0IiwKICAgICAgaWNvbk5hbWU6ICJ0eXBlIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sCiAgICAgIC8vIFBhcmVudCBpdGVtcyB3aXRoIHN1Ym1lbnVzIHN0aWxsIG5lZWQgYW4gYWN0aW9uCiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJCb2xkIiwgaWNvbk5hbWU6ICJib2xkIiwgc2hvcnRjdXQ6ICJDbWQrQiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkJvbGQiKSB9LAogICAgICAgIHsgbmFtZTogIkl0YWxpYyIsIGljb25OYW1lOiAiaXRhbGljIiwgc2hvcnRjdXQ6ICJDbWQrSSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkl0YWxpYyIpIH0sCiAgICAgICAgeyBuYW1lOiAiVW5kZXJsaW5lIiwgaWNvbk5hbWU6ICJ1bmRlcmxpbmUiLCBzaG9ydGN1dDogIkNtZCtVIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiVW5kZXJsaW5lIikgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7IG5hbWU6ICJGb250IFNpemUiLCBpY29uTmFtZTogInR5cGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJGb250IHNpemUgbWVudSIpIH0sCiAgICAgICAgeyBuYW1lOiAiRm9udCBDb2xvciIsIGljb25OYW1lOiAicGFsZXR0ZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkZvbnQgY29sb3IgbWVudSIpIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgbmFtZTogIlRyYW5zZm9ybSIsCiAgICAgIGljb25OYW1lOiAic2h1ZmZsZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICB9LAogICAgICAvLyBQYXJlbnQgaXRlbXMgd2l0aCBzdWJtZW51cyBzdGlsbCBuZWVkIGFuIGFjdGlvbgogICAgICBzdWJtZW51OiBbCiAgICAgICAgeyBuYW1lOiAiVG8gVXBwZXJjYXNlIiwgaWNvbk5hbWU6ICJhcnJvd1VwIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiVXBwZXJjYXNlIikgfSwKICAgICAgICB7IG5hbWU6ICJUbyBMb3dlcmNhc2UiLCBpY29uTmFtZTogImFycm93RG93biIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkxvd2VyY2FzZSIpIH0sCiAgICAgICAgeyBuYW1lOiAiQ2FwaXRhbGl6ZSIsIGljb25OYW1lOiAidHlwZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkNhcGl0YWxpemUiKSB9CiAgICAgIF0KICAgIH0sCiAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgIHsKICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgIGljb25OYW1lOiAidHJhc2gyIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRGVsZXRlIikKICAgIH0KICBdKTsKfX0+CiAgICAgIDxoMz5BZHZhbmNlZCBOZXN0ZWQgTWVudSBFeGFtcGxlPC9oMz4KICAgICAgPHA+VGhpcyBzaG93cyBkZWVwbHkgbmVzdGVkIHN1Ym1lbnVzIGFuZCB2YXJpb3VzIGZvcm1hdHRpbmcgb3B0aW9uczwvcD4KICAgIDwvZGl2PgogIDwvZGVlcy1wYW5lbD4KICAKICA8ZGVlcy1wYW5lbCBoZWFkaW5nPSJTdGF0aWMgQ29udGV4dCBNZW51IChBbHdheXMgVmlzaWJsZSkiPgogICAgPGRlZXMtY29udGV4dG1lbnUKICAgICAgY2xhc3M9IndpdGhNYXJnaW4iCiAgICAgIC5tZW51SXRlbXM9JHtbCiAgewogICAgbmFtZTogIlByb2plY3QiLAogICAgaWNvbk5hbWU6ICJmb2xkZXIiLAogICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICB9LAogICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgIHN1Ym1lbnU6IFsKICAgICAgeyBuYW1lOiAiTmV3IFByb2plY3QiLCBpY29uTmFtZTogImZvbGRlclBsdXMiLCBzaG9ydGN1dDogIkNtZCtTaGlmdCtOIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiTmV3IHByb2plY3QiKSB9LAogICAgICB7IG5hbWU6ICJPcGVuIFByb2plY3QiLCBpY29uTmFtZTogImZvbGRlck9wZW4iLCBzaG9ydGN1dDogIkNtZCtTaGlmdCtPIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiT3BlbiBwcm9qZWN0IikgfSwKICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgIHsgbmFtZTogIlJlY2VudCBQcm9qZWN0cyIsIGljb25OYW1lOiAiY2xvY2siLCBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwgc3VibWVudTogWwogICAgICAgIHsgbmFtZTogIlByb2plY3QgQWxwaGEiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIEFscGhhIikgfSwKICAgICAgICB7IG5hbWU6ICJQcm9qZWN0IEJldGEiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIEJldGEiKSB9LAogICAgICAgIHsgbmFtZTogIlByb2plY3QgR2FtbWEiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIEdhbW1hIikgfQogICAgICBdIH0KICAgIF0KICB9LAogIHsKICAgIG5hbWU6ICJUb29scyIsCiAgICBpY29uTmFtZTogInRvb2wiLAogICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICB9LAogICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgIHN1Ym1lbnU6IFsKICAgICAgeyBuYW1lOiAiVGVybWluYWwiLCBpY29uTmFtZTogInRlcm1pbmFsIiwgc2hvcnRjdXQ6ICJDbWQrVCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlRlcm1pbmFsIikgfSwKICAgICAgeyBuYW1lOiAiQ29uc29sZSIsIGljb25OYW1lOiAibW9uaXRvciIsIHNob3J0Y3V0OiAiQ21kK0siLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDb25zb2xlIikgfSwKICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgIHsgbmFtZTogIkV4dGVuc2lvbnMiLCBpY29uTmFtZTogInBhY2thZ2UiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJFeHRlbnNpb25zIikgfQogICAgXQogIH0sCiAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgewogICAgbmFtZTogIlByZWZlcmVuY2VzIiwKICAgIGljb25OYW1lOiAic2xpZGVycyIsCiAgICBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJQcmVmZXJlbmNlcyIpCiAgfQpdfQogICAgPjwvZGVlcy1jb250ZXh0bWVudT4KICA8L2RlZXMtcGFuZWw+CjwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXdpbmRvd2xheWVyL2RlZXMtd2luZG93bGF5ZXIuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9fZXNEZWNvcmF0ZTMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczQgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNXaW5kb3dMYXllciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtd2luZG93bGF5ZXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9vcHRpb25zX2RlY29yYXRvcnM7CiAgbGV0IF9vcHRpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYmFja2Ryb3BaSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX2JhY2tkcm9wWkluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYmFja2Ryb3BaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRlbnRaSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX2NvbnRlbnRaSW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92aXNpYmxlX2RlY29yYXRvcnM7CiAgbGV0IF92aXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV2luZG93TGF5ZXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfb3B0aW9uc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfYmFja2Ryb3BaSW5kZXhfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2NvbnRlbnRaSW5kZXhfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3Zpc2libGVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTModGhpcywgbnVsbCwgX29wdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3B0aW9ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3B0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vcHRpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcHRpb25zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX29wdGlvbnNfaW5pdGlhbGl6ZXJzLCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTModGhpcywgbnVsbCwgX2JhY2tkcm9wWkluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJhY2tkcm9wWkluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJiYWNrZHJvcFpJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5iYWNrZHJvcFpJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYmFja2Ryb3BaSW5kZXggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYmFja2Ryb3BaSW5kZXhfaW5pdGlhbGl6ZXJzLCBfYmFja2Ryb3BaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzKHRoaXMsIG51bGwsIF9jb250ZW50WkluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRlbnRaSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRlbnRaSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29udGVudFpJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29udGVudFpJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZW50WkluZGV4X2luaXRpYWxpemVycywgX2NvbnRlbnRaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzKHRoaXMsIG51bGwsIF92aXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZpc2libGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmlzaWJsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92aXNpYmxlX2luaXRpYWxpemVycywgX3Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1dpbmRvd0xheWVyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgPGRlZXMtd2luZG93bGF5ZXI+PC9kZWVzLXdpbmRvd2xheWVyPmA7CiAgICBzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdyhvcHRpb25zQXJnKSB7CiAgICAgIGNvbnN0IGRvbXRvb2xzSW5zdGFuY2UgPSBkaXN0X3RzX2V4cG9ydHMyNS5Eb21Ub29scy5nZXRHbG9iYWxEb21Ub29sc1N5bmMoKTsKICAgICAgY29uc3Qgd2luZG93TGF5ZXIgPSBuZXcgRGVlc1dpbmRvd0xheWVyMigpOwogICAgICB3aW5kb3dMYXllci5vcHRpb25zID0gewogICAgICAgIC4uLndpbmRvd0xheWVyLm9wdGlvbnMsCiAgICAgICAgLi4ub3B0aW9uc0FyZwogICAgICB9OwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZCh3aW5kb3dMYXllcik7CiAgICAgIGF3YWl0IGRvbXRvb2xzSW5zdGFuY2UuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgd2luZG93TGF5ZXIuc2hvdygpOwogICAgICByZXR1cm4gd2luZG93TGF5ZXI7CiAgICB9CiAgICAjb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF9vcHRpb25zX2luaXRpYWxpemVycywgewogICAgICBibHVyOiBmYWxzZQogICAgfSk7CiAgICBnZXQgb3B0aW9ucygpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcHRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYmFja2Ryb3BaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQodGhpcywgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQodGhpcywgX2JhY2tkcm9wWkluZGV4X2luaXRpYWxpemVycywgMWUzKSk7CiAgICBnZXQgYmFja2Ryb3BaSW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNiYWNrZHJvcFpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGJhY2tkcm9wWkluZGV4KHZhbHVlMikgewogICAgICB0aGlzLiNiYWNrZHJvcFpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRlbnRaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQodGhpcywgX2JhY2tkcm9wWkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF9jb250ZW50WkluZGV4X2luaXRpYWxpemVycywgMTAwMSkpOwogICAgZ2V0IGNvbnRlbnRaSW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZW50WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29udGVudFpJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29udGVudFpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQodGhpcywgX2NvbnRlbnRaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQodGhpcywgX3Zpc2libGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCB2aXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZpc2libGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICBfX3J1bkluaXRpYWxpemVyczQodGhpcywgX3Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBkaXN0X3RzX2V4cG9ydHMyNS5lbGVtZW50QmFzaWMuc2V0dXAoKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke2Rpc3RfdHNfZXhwb3J0czI1LmVsZW1lbnRCYXNpYy5zdHlsZXN9CiAgICAgIDxzdHlsZT4KICAgICAgICAud2luZG93T3ZlcmxheSB7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICB0b3A6IDBweDsKICAgICAgICAgIGxlZnQ6IDBweDsKICAgICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgICAgICB3aWR0aDogMTAwdnc7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjApOwogICAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBicmlnaHRuZXNzKDEpICR7dGhpcy5vcHRpb25zLmJsdXIgPyAiYmx1cigwcHgpIiA6ICIifTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgICAgei1pbmRleDogJHt0aGlzLmJhY2tkcm9wWkluZGV4fTsKICAgICAgICB9CiAgICAgICAgLnNsb3RDb250ZW50IHsKICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgICAgICB3aWR0aDogMTAwdnc7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgei1pbmRleDogJHt0aGlzLmNvbnRlbnRaSW5kZXh9OwogICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5zbG90Q29udGVudCA+ICogewogICAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC52aXNpYmxlIHsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYnJpZ2h0bmVzcygwLjkpICR7dGhpcy5vcHRpb25zLmJsdXIgPyAiYmx1cigycHgpIiA6ICIifTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IEBjbGljaz0ke3RoaXMuZGlzcGF0Y2hDbGlja2VkfSBjbGFzcz0id2luZG93T3ZlcmxheSAke3RoaXMudmlzaWJsZSA/ICJ2aXNpYmxlIiA6IG51bGx9Ij4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNsb3RDb250ZW50Ij4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTsKICAgICAgfSwgMTAwKTsKICAgIH0KICAgIGRpc3BhdGNoQ2xpY2tlZCgpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2xpY2tlZCIpKTsKICAgIH0KICAgIHRvZ2dsZVZpc2liaWxpdHkoKSB7CiAgICAgIHRoaXMudmlzaWJsZSA9ICF0aGlzLnZpc2libGU7CiAgICB9CiAgICBnZXRDb250ZW50WkluZGV4KCkgewogICAgICByZXR1cm4gdGhpcy5jb250ZW50WkluZGV4OwogICAgfQogICAgYXN5bmMgc2hvdygpIHsKICAgICAgY29uc3QgZG9tdG9vbHMgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgdGhpcy5iYWNrZHJvcFpJbmRleCA9IHpJbmRleFJlZ2lzdHJ5LmdldE5leHRaSW5kZXgoKTsKICAgICAgdGhpcy5jb250ZW50WkluZGV4ID0gekluZGV4UmVnaXN0cnkuZ2V0TmV4dFpJbmRleCgpOwogICAgICB6SW5kZXhSZWdpc3RyeS5yZWdpc3Rlcih0aGlzLCB0aGlzLmJhY2tkcm9wWkluZGV4KTsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTsKICAgIH0KICAgIGFzeW5jIGhpZGUoKSB7CiAgICAgIGNvbnN0IGRvbXRvb2xzID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlOwogICAgfQogICAgYXN5bmMgZGVzdHJveSgpIHsKICAgICAgY29uc3QgZG9tdG9vbHMgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgYXdhaXQgdGhpcy5oaWRlKCk7CiAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMzAwKTsKICAgICAgekluZGV4UmVnaXN0cnkudW5yZWdpc3Rlcih0aGlzKTsKICAgICAgdGhpcy5yZW1vdmUoKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1dpbmRvd0xheWVyMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtY29udGV4dG1lbnUvZGVlcy1jb250ZXh0bWVudS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X2RlZXNfaWNvbigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU1ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzQ29udGV4dG1lbnUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWNvbnRleHRtZW51IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbWVudUl0ZW1zX2RlY29yYXRvcnM7CiAgbGV0IF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0NvbnRleHRtZW51NyA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX21lbnVJdGVtc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBBcnJheQogICAgICB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTUodGhpcywgbnVsbCwgX21lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVJdGVtcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVJdGVtcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNDb250ZXh0bWVudTcgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gREVNTwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzsKICAgIC8vIFNUQVRJQwogICAgLy8gVGhpcyB3aWxsIHN0b3JlIGFsbCB0aGUgYWNjdW11bGF0ZWQgbWVudSBpdGVtcwogICAgc3RhdGljIGNvbnRleHRNZW51RGVhY3RpdmF0ZWQgPSBmYWxzZTsKICAgIHN0YXRpYyBhY2N1bXVsYXRlZE1lbnVJdGVtcyA9IFtdOwogICAgLy8gQWRkIGEgZ2xvYmFsIGV2ZW50IGxpc3RlbmVyIGZvciB0aGUgcmlnaHQtY2xpY2sgY29udGV4dCBtZW51CiAgICBzdGF0aWMgaW5pdGlhbGl6ZUdsb2JhbExpc3RlbmVyKCkgewogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIChldmVudCkgPT4gewogICAgICAgIGlmICh0aGlzLmNvbnRleHRNZW51RGVhY3RpdmF0ZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICBEZWVzQ29udGV4dG1lbnU3LmFjY3VtdWxhdGVkTWVudUl0ZW1zID0gW107CiAgICAgICAgY29uc3QgcGF0aDIgPSBldmVudC5jb21wb3NlZFBhdGgoKTsKICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQ0IG9mIHBhdGgyKSB7CiAgICAgICAgICBpZiAoZWxlbWVudDQuZ2V0Q29udGV4dE1lbnVJdGVtcykgewogICAgICAgICAgICBjb25zdCBpdGVtcyA9IGVsZW1lbnQ0LmdldENvbnRleHRNZW51SXRlbXMoKTsKICAgICAgICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICBpZiAoRGVlc0NvbnRleHRtZW51Ny5hY2N1bXVsYXRlZE1lbnVJdGVtcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICBEZWVzQ29udGV4dG1lbnU3LmFjY3VtdWxhdGVkTWVudUl0ZW1zLnB1c2goeyBkaXZpZGVyOiB0cnVlIH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBEZWVzQ29udGV4dG1lbnU3LmFjY3VtdWxhdGVkTWVudUl0ZW1zLnB1c2goLi4uaXRlbXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIERlZXNDb250ZXh0bWVudTcub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIERlZXNDb250ZXh0bWVudTcuYWNjdW11bGF0ZWRNZW51SXRlbXMpOwogICAgICB9KTsKICAgIH0KICAgIC8vIGFsbG93cyBvcGVuaW5nIG9mIGEgY29udGV4dG1lbnUgd2l0aCBvcHRpb25zCiAgICBzdGF0aWMgYXN5bmMgb3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnRBcmcsIG1lbnVJdGVtc0FyZykgewogICAgICBpZiAodGhpcy5jb250ZXh0TWVudURlYWN0aXZhdGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGV2ZW50QXJnLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGV2ZW50QXJnLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb25zdCBjb250ZXh0TWVudSA9IG5ldyBEZWVzQ29udGV4dG1lbnU3KCk7CiAgICAgIGNvbnRleHRNZW51LnN0eWxlLnBvc2l0aW9uID0gImZpeGVkIjsKICAgICAgY29udGV4dE1lbnUuc3R5bGUuekluZGV4ID0gU3RyaW5nKHpJbmRleExheWVycy5vdmVybGF5LmNvbnRleHRNZW51KTsKICAgICAgY29udGV4dE1lbnUuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgICAgY29udGV4dE1lbnUuc3R5bGUudHJhbnNmb3JtID0gInNjYWxlKDAuOTUpIHRyYW5zbGF0ZVkoLTEwcHgpIjsKICAgICAgY29udGV4dE1lbnUubWVudUl0ZW1zID0gbWVudUl0ZW1zQXJnOwogICAgICBjb250ZXh0TWVudS53aW5kb3dMYXllciA9IGF3YWl0IERlZXNXaW5kb3dMYXllci5jcmVhdGVBbmRTaG93KCk7CiAgICAgIGNvbnRleHRNZW51LndpbmRvd0xheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYXN5bmMgKGV2ZW50KSA9PiB7CiAgICAgICAgY29uc3QgY2xpY2tlZEVsZW1lbnQgPSBldmVudC50YXJnZXQ7CiAgICAgICAgY29uc3QgaXNDb250ZXh0TWVudSA9IGNsaWNrZWRFbGVtZW50LmNsb3Nlc3QoImRlZXMtY29udGV4dG1lbnUiKTsKICAgICAgICBpZiAoIWlzQ29udGV4dE1lbnUpIHsKICAgICAgICAgIGF3YWl0IGNvbnRleHRNZW51LmRlc3Ryb3koKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChjb250ZXh0TWVudSk7CiAgICAgIGF3YWl0IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICBjb25zdCByZWN0ID0gY29udGV4dE1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7CiAgICAgIGNvbnN0IHdpbmRvd0hlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDsKICAgICAgbGV0IHRvcCA9IGV2ZW50QXJnLmNsaWVudFk7CiAgICAgIGxldCBsZWZ0ID0gZXZlbnRBcmcuY2xpZW50WDsKICAgICAgaWYgKGxlZnQgKyByZWN0LndpZHRoID4gd2luZG93V2lkdGgpIHsKICAgICAgICBsZWZ0ID0gd2luZG93V2lkdGggLSByZWN0LndpZHRoIC0gMTA7CiAgICAgIH0KICAgICAgaWYgKHRvcCArIHJlY3QuaGVpZ2h0ID4gd2luZG93SGVpZ2h0KSB7CiAgICAgICAgdG9wID0gd2luZG93SGVpZ2h0IC0gcmVjdC5oZWlnaHQgLSAxMDsKICAgICAgfQogICAgICBpZiAobGVmdCA8IDEwKQogICAgICAgIGxlZnQgPSAxMDsKICAgICAgaWYgKHRvcCA8IDEwKQogICAgICAgIHRvcCA9IDEwOwogICAgICBjb250ZXh0TWVudS5zdHlsZS50b3AgPSBgJHt0b3B9cHhgOwogICAgICBjb250ZXh0TWVudS5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7CiAgICAgIGNvbnRleHRNZW51LnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9ICJ0b3AgbGVmdCI7CiAgICAgIGF3YWl0IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICBjb250ZXh0TWVudS5zdHlsZS5vcGFjaXR5ID0gIjEiOwogICAgICBjb250ZXh0TWVudS5zdHlsZS50cmFuc2Zvcm0gPSAic2NhbGUoMSkgdHJhbnNsYXRlWSgwKSI7CiAgICB9CiAgICAjbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczYodGhpcywgX21lbnVJdGVtc19pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgbWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gdGhpcy4jbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWVudUl0ZW1zKHZhbHVlMikgewogICAgICB0aGlzLiNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHdpbmRvd0xheWVyID0gX19ydW5Jbml0aWFsaXplcnM2KHRoaXMsIF9tZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgc3VibWVudSA9IG51bGw7CiAgICBzdWJtZW51VGltZW91dCA9IG51bGw7CiAgICBwYXJlbnRNZW51ID0gbnVsbDsKICAgIGlzRGVzdHJveWluZyA9IGZhbHNlOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIHRoaXMudGFiSW5kZXggPSAwOwogICAgfQogICAgLyoqCiAgICAgKiBTVEFUSUMgU1RZTEVTCiAgICAgKi8KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzLCB0cmFuc2Zvcm0gMC4yczsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAubWFpbmJveCB7CiAgICAgICAgbWluLXdpZHRoOiAyMDBweDsKICAgICAgICBtYXgtd2lkdGg6IDI4MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzIwMjAyMCIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYm94LXNoYWRvdzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KSIsICIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4zKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBwYWRkaW5nOiA0cHggMDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNjY2MiKX07CiAgICAgIH0KCiAgICAgIC5tZW51aXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAubWVudWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDQpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tZW51aXRlbS5oYXMtc3VibWVudTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICfigLonOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC5tZW51aXRlbTphY3RpdmU6bm90KC5oYXMtc3VibWVudSkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDgpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tZW51aXRlbS5kaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tZW51aXRlbSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC5tZW51aXRlbS10ZXh0IHsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAubWVudWl0ZW0tc2hvcnRjdXQgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5OTkiLCAiIzY2NiIpfTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC5tZW51LWRpdmlkZXIgewogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAke3RoaXMubWVudUl0ZW1zLm1hcCgobWVudUl0ZW1BcmcpID0+IHsKICAgICAgICBpZiAoImRpdmlkZXIiIGluIG1lbnVJdGVtQXJnICYmIG1lbnVJdGVtQXJnLmRpdmlkZXIpIHsKICAgICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJtZW51LWRpdmlkZXIiPjwvZGl2PmA7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG1lbnVJdGVtID0gbWVudUl0ZW1Bcmc7CiAgICAgICAgY29uc3QgaGFzU3VibWVudSA9IG1lbnVJdGVtLnN1Ym1lbnUgJiYgbWVudUl0ZW0uc3VibWVudS5sZW5ndGggPiAwOwogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgPGRpdiAKICAgICAgICAgICAgICBjbGFzcz0ibWVudWl0ZW0gJHttZW51SXRlbS5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0gJHtoYXNTdWJtZW51ID8gImhhcy1zdWJtZW51IiA6ICIifSIgCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gIW1lbnVJdGVtLmRpc2FibGVkICYmICFoYXNTdWJtZW51ICYmIHRoaXMuaGFuZGxlQ2xpY2sobWVudUl0ZW0pfQogICAgICAgICAgICAgIEBtb3VzZWVudGVyPSR7KCkgPT4gdGhpcy5oYW5kbGVNZW51SXRlbUhvdmVyKG1lbnVJdGVtLCBoYXNTdWJtZW51KX0KICAgICAgICAgICAgICBAbW91c2VsZWF2ZT0keygpID0+IHRoaXMuaGFuZGxlTWVudUl0ZW1MZWF2ZSgpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgJHttZW51SXRlbS5pY29uTmFtZSA/IGIyYAogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHttZW51SXRlbS5pY29uTmFtZX0iPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVudWl0ZW0tdGV4dCI+JHttZW51SXRlbS5uYW1lfTwvc3Bhbj4KICAgICAgICAgICAgICAke21lbnVJdGVtLnNob3J0Y3V0ICYmICFoYXNTdWJtZW51ID8gYjJgCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVudWl0ZW0tc2hvcnRjdXQiPiR7bWVudUl0ZW0uc2hvcnRjdXR9PC9zcGFuPgogICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICAke3RoaXMubWVudUl0ZW1zLmxlbmd0aCA9PT0gMCA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZW51aXRlbSIgQGNsaWNrPSR7KCkgPT4gewogICAgICAgIERlZXNDb250ZXh0bWVudTcuY29udGV4dE1lbnVEZWFjdGl2YXRlZCA9IHRydWU7CiAgICAgICAgdGhpcy5kZXN0cm95KCk7CiAgICAgIH19PgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249Imx1Y2lkZTp4Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVudWl0ZW0tdGV4dCI+QWxsb3cgbmF0aXZlIGNvbnRleHQ8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiBiMmBgfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuZm9jdXMoKTsKICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5oYW5kbGVLZXlkb3duKTsKICAgIH0KICAgIGhhbmRsZUtleWRvd24gPSAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgiLm1lbnVpdGVtOm5vdCguZGlzYWJsZWQpIikpOwogICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBtZW51SXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLm1hdGNoZXMoIjpob3ZlciIpKTsKICAgICAgc3dpdGNoIChldmVudC5rZXkpIHsKICAgICAgICBjYXNlICJBcnJvd0Rvd24iOgogICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCArIDEgPCBtZW51SXRlbXMubGVuZ3RoID8gY3VycmVudEluZGV4ICsgMSA6IDA7CiAgICAgICAgICBtZW51SXRlbXNbbmV4dEluZGV4XS5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCJtb3VzZWVudGVyIikpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQXJyb3dVcCI6CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgY29uc3QgcHJldkluZGV4ID0gY3VycmVudEluZGV4IC0gMSA+PSAwID8gY3VycmVudEluZGV4IC0gMSA6IG1lbnVJdGVtcy5sZW5ndGggLSAxOwogICAgICAgICAgbWVudUl0ZW1zW3ByZXZJbmRleF0uZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgibW91c2VlbnRlciIpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkVudGVyIjoKICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBpZiAoY3VycmVudEluZGV4ID49IDApIHsKICAgICAgICAgICAgbWVudUl0ZW1zW2N1cnJlbnRJbmRleF0uY2xpY2soKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkVzY2FwZSI6CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5kZXN0cm95KCk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfTsKICAgIGFzeW5jIGhhbmRsZUNsaWNrKG1lbnVJdGVtKSB7CiAgICAgIG1lbnVJdGVtLmFjdGlvbigpOwogICAgICBhd2FpdCB0aGlzLmRlc3Ryb3lBbGwoKTsKICAgIH0KICAgIGFzeW5jIGhhbmRsZU1lbnVJdGVtSG92ZXIobWVudUl0ZW0sIGhhc1N1Ym1lbnUpIHsKICAgICAgaWYgKHRoaXMuc3VibWVudVRpbWVvdXQpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zdWJtZW51VGltZW91dCk7CiAgICAgICAgdGhpcy5zdWJtZW51VGltZW91dCA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuc3VibWVudSkgewogICAgICAgIGF3YWl0IHRoaXMuaGlkZVN1Ym1lbnUoKTsKICAgICAgfQogICAgICBpZiAoaGFzU3VibWVudSAmJiBtZW51SXRlbS5zdWJtZW51KSB7CiAgICAgICAgdGhpcy5zdWJtZW51VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgdGhpcy5zaG93U3VibWVudShtZW51SXRlbSk7CiAgICAgICAgfSwgMjAwKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlTWVudUl0ZW1MZWF2ZSgpIHsKICAgICAgaWYgKHRoaXMuc3VibWVudVRpbWVvdXQpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zdWJtZW51VGltZW91dCk7CiAgICAgIH0KICAgICAgdGhpcy5zdWJtZW51VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGlmICh0aGlzLnN1Ym1lbnUgJiYgIXRoaXMuc3VibWVudS5tYXRjaGVzKCI6aG92ZXIiKSkgewogICAgICAgICAgdGhpcy5oaWRlU3VibWVudSgpOwogICAgICAgIH0KICAgICAgfSwgMzAwKTsKICAgIH0KICAgIGFzeW5jIHNob3dTdWJtZW51KG1lbnVJdGVtKSB7CiAgICAgIGlmICghbWVudUl0ZW0uc3VibWVudSB8fCBtZW51SXRlbS5zdWJtZW51Lmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG1lbnVJdGVtcyA9IEFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5tZW51aXRlbSIpKTsKICAgICAgY29uc3QgbWVudUl0ZW1FbGVtZW50ID0gbWVudUl0ZW1zLmZpbmQoKGVsKSA9PiBlbC5xdWVyeVNlbGVjdG9yKCIubWVudWl0ZW0tdGV4dCIpPy50ZXh0Q29udGVudCA9PT0gbWVudUl0ZW0ubmFtZSk7CiAgICAgIGlmICghbWVudUl0ZW1FbGVtZW50KQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5zdWJtZW51ID0gbmV3IERlZXNDb250ZXh0bWVudTcoKTsKICAgICAgdGhpcy5zdWJtZW51Lm1lbnVJdGVtcyA9IG1lbnVJdGVtLnN1Ym1lbnU7CiAgICAgIHRoaXMuc3VibWVudS5wYXJlbnRNZW51ID0gdGhpczsKICAgICAgdGhpcy5zdWJtZW51LnN0eWxlLnBvc2l0aW9uID0gImZpeGVkIjsKICAgICAgdGhpcy5zdWJtZW51LnN0eWxlLnpJbmRleCA9IFN0cmluZyhwYXJzZUludCh0aGlzLnN0eWxlLnpJbmRleCkgKyAxKTsKICAgICAgdGhpcy5zdWJtZW51LnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgIHRoaXMuc3VibWVudS5zdHlsZS50cmFuc2Zvcm0gPSAic2NhbGUoMC45NSkiOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZCh0aGlzLnN1Ym1lbnUpOwogICAgICBhd2FpdCBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgY29uc3QgaXRlbVJlY3QgPSBtZW51SXRlbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IG1lbnVSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgY29uc3Qgc3VibWVudVJlY3QgPSB0aGlzLnN1Ym1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7CiAgICAgIGxldCBsZWZ0ID0gbWVudVJlY3QucmlnaHQgLSA0OwogICAgICBsZXQgdG9wID0gaXRlbVJlY3QudG9wOwogICAgICBpZiAobGVmdCArIHN1Ym1lbnVSZWN0LndpZHRoID4gd2luZG93V2lkdGggLSAxMCkgewogICAgICAgIGxlZnQgPSBtZW51UmVjdC5sZWZ0IC0gc3VibWVudVJlY3Qud2lkdGggKyA0OwogICAgICB9CiAgICAgIGlmICh0b3AgKyBzdWJtZW51UmVjdC5oZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQgLSAxMCkgewogICAgICAgIHRvcCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHN1Ym1lbnVSZWN0LmhlaWdodCAtIDEwOwogICAgICB9CiAgICAgIHRoaXMuc3VibWVudS5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7CiAgICAgIHRoaXMuc3VibWVudS5zdHlsZS50b3AgPSBgJHt0b3B9cHhgOwogICAgICBhd2FpdCBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgdGhpcy5zdWJtZW51LnN0eWxlLm9wYWNpdHkgPSAiMSI7CiAgICAgIHRoaXMuc3VibWVudS5zdHlsZS50cmFuc2Zvcm0gPSAic2NhbGUoMSkiOwogICAgICB0aGlzLnN1Ym1lbnUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsICgpID0+IHsKICAgICAgICBpZiAodGhpcy5zdWJtZW51VGltZW91dCkgewogICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3VibWVudVRpbWVvdXQpOwogICAgICAgICAgdGhpcy5zdWJtZW51VGltZW91dCA9IG51bGw7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5zdWJtZW51LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCAoKSA9PiB7CiAgICAgICAgdGhpcy5oYW5kbGVNZW51SXRlbUxlYXZlKCk7CiAgICAgIH0pOwogICAgfQogICAgYXN5bmMgaGlkZVN1Ym1lbnUoKSB7CiAgICAgIGlmICghdGhpcy5zdWJtZW51KQogICAgICAgIHJldHVybjsKICAgICAgYXdhaXQgdGhpcy5zdWJtZW51LmRlc3Ryb3koKTsKICAgICAgdGhpcy5zdWJtZW51ID0gbnVsbDsKICAgIH0KICAgIGFzeW5jIGRlc3Ryb3koKSB7CiAgICAgIGlmICh0aGlzLmlzRGVzdHJveWluZykgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLmlzRGVzdHJveWluZyA9IHRydWU7CiAgICAgIGlmICh0aGlzLnN1Ym1lbnVUaW1lb3V0KSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3VibWVudVRpbWVvdXQpOwogICAgICAgIHRoaXMuc3VibWVudVRpbWVvdXQgPSBudWxsOwogICAgICB9CiAgICAgIGlmICh0aGlzLnN1Ym1lbnUpIHsKICAgICAgICBhd2FpdCB0aGlzLnN1Ym1lbnUuZGVzdHJveSgpOwogICAgICAgIHRoaXMuc3VibWVudSA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMud2luZG93TGF5ZXIgJiYgIXRoaXMucGFyZW50TWVudSkgewogICAgICAgIHRoaXMud2luZG93TGF5ZXIuZGVzdHJveSgpOwogICAgICB9CiAgICAgIHRoaXMuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgICAgdGhpcy5zdHlsZS50cmFuc2Zvcm0gPSAic2NhbGUoMC45NSkgdHJhbnNsYXRlWSgtMTBweCkiOwogICAgICBhd2FpdCBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigxMDApOwogICAgICBpZiAodGhpcy5wYXJlbnRFbGVtZW50KSB7CiAgICAgICAgdGhpcy5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIERlc3Ryb3lzIHRoaXMgbWVudSBhbmQgYWxsIHBhcmVudCBtZW51cyBpbiB0aGUgY2hhaW4KICAgICAqLwogICAgYXN5bmMgZGVzdHJveUFsbCgpIHsKICAgICAgbGV0IHJvb3RNZW51ID0gdGhpczsKICAgICAgd2hpbGUgKHJvb3RNZW51LnBhcmVudE1lbnUpIHsKICAgICAgICByb290TWVudSA9IHJvb3RNZW51LnBhcmVudE1lbnU7CiAgICAgIH0KICAgICAgYXdhaXQgcm9vdE1lbnUuZGVzdHJveSgpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQ29udGV4dG1lbnU3ID0gX2NsYXNzVGhpczsKfSkoKTsKRGVlc0NvbnRleHRtZW51LmluaXRpYWxpemVHbG9iYWxMaXN0ZW5lcigpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtd2NjdG9vbHNAMy43LjEvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtd2NjdG9vbHMvZGlzdF90c19kZW1vdG9vbHMvZGVtb3Rvb2xzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBfX2VzRGVjb3JhdGU2ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzRGVtb1dyYXBwZXIgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWRlbW93cmFwcGVyIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfcnVuQWZ0ZXJSZW5kZXJfZGVjb3JhdG9yczsKICBsZXQgX3J1bkFmdGVyUmVuZGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcnVuQWZ0ZXJSZW5kZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0RlbW9XcmFwcGVyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3J1bkFmdGVyUmVuZGVyX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX19lc0RlY29yYXRlNih0aGlzLCBudWxsLCBfcnVuQWZ0ZXJSZW5kZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicnVuQWZ0ZXJSZW5kZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJ1bkFmdGVyUmVuZGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJ1bkFmdGVyUmVuZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ydW5BZnRlclJlbmRlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ydW5BZnRlclJlbmRlcl9pbml0aWFsaXplcnMsIF9ydW5BZnRlclJlbmRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzRGVtb1dyYXBwZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgICNydW5BZnRlclJlbmRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3KHRoaXMsIF9ydW5BZnRlclJlbmRlcl9pbml0aWFsaXplcnMsIHZvaWQgMCk7CiAgICBnZXQgcnVuQWZ0ZXJSZW5kZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNydW5BZnRlclJlbmRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJ1bkFmdGVyUmVuZGVyKHZhbHVlMikgewogICAgICB0aGlzLiNydW5BZnRlclJlbmRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGNvbnRlbnRzOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gc2V0VGltZW91dChyZXNvbHZlMiwgNTApKTsKICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiB0aGlzLnJ1bkFmdGVyUmVuZGVyKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IHRoaXMucnVuQWZ0ZXJSZW5kZXIodGhpcyk7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGluIHJ1bkFmdGVyUmVuZGVyOiIsIGVycm9yKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczcodGhpcywgX3J1bkFmdGVyUmVuZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0RlbW9XcmFwcGVyMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hY3Rpdml0eWxvZy9kZWVzLWFwcHVpLWFjdGl2aXR5bG9nLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMyA9ICgpID0+IHsKICBjb25zdCBhY3Rpdml0eUxvZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZXMtYXBwdWktYWN0aXZpdHlsb2ciKTsKICBzZXRUaW1lb3V0KCgpID0+IHsKICAgIGFjdGl2aXR5TG9nLmFkZE1hbnkoWwogICAgICB7IHR5cGU6ICJsb2dpbiIsIHVzZXI6ICJKb2huIERvZSIsIG1lc3NhZ2U6ICJsb2dnZWQgaW4gZnJvbSBDaHJvbWUgb24gbWFjT1MiIH0sCiAgICAgIHsgdHlwZTogImNyZWF0ZSIsIHVzZXI6ICJKb2huIERvZSIsIG1lc3NhZ2U6ICdjcmVhdGVkIGEgbmV3IHByb2plY3QgIkZyb250ZW5kIEFwcCInIH0sCiAgICAgIHsgdHlwZTogInVwZGF0ZSIsIHVzZXI6ICJKYW5lIFNtaXRoIiwgbWVzc2FnZTogInVwZGF0ZWQgQVBJIGRvY3VtZW50YXRpb24iIH0sCiAgICAgIHsgdHlwZTogInZpZXciLCB1c2VyOiAiSm9obiBEb2UiLCBtZXNzYWdlOiAidmlld2VkIGRhc2hib2FyZCBhbmFseXRpY3MiIH0sCiAgICAgIHsgdHlwZTogImRlbGV0ZSIsIHVzZXI6ICJBZG1pbiIsIG1lc3NhZ2U6ICJyZW1vdmVkIGRlcHJlY2F0ZWQgZW5kcG9pbnQiIH0sCiAgICAgIHsgdHlwZTogImN1c3RvbSIsIHVzZXI6ICJTeXN0ZW0iLCBtZXNzYWdlOiAic2NoZWR1bGVkIGJhY2t1cCBjb21wbGV0ZWQiLCBpY29uTmFtZTogImx1Y2lkZTpkYXRhYmFzZSIgfSwKICAgICAgeyB0eXBlOiAibG9nb3V0IiwgdXNlcjogIkFsaWNlIEJyb3duIiwgbWVzc2FnZTogImxvZ2dlZCBvdXQiIH0sCiAgICAgIHsgdHlwZTogImNyZWF0ZSIsIHVzZXI6ICJKYW5lIFNtaXRoIiwgbWVzc2FnZTogImNyZWF0ZWQgaW52b2ljZSAjMTIzNCIgfQogICAgXSk7CiAgICBhY3Rpdml0eUxvZy5lbnRyaWVzJC5zdWJzY3JpYmUoKGVudHJpZXMpID0+IHsKICAgICAgY29uc29sZS5sb2coIkFjdGl2aXR5IGxvZyB1cGRhdGVkOiIsIGVudHJpZXMubGVuZ3RoLCAiZW50cmllcyIpOwogICAgfSk7CiAgfSwgMTAwKTsKICByZXR1cm4gYjJgCiAgICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgICAgPHN0eWxlPgogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgaGVpZ2h0OiA2MDBweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMwOTA5MGIiKX07CiAgICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICAgICR7YWN0aXZpdHlMb2d9CiAgICAgIDwvZGl2PgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hY3Rpdml0eWxvZy9kZWVzLWFwcHVpLWFjdGl2aXR5bG9nLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfZGVlc19pY29uKCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTcgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczggPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aUFjdGl2aXR5bG9nID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hcHB1aS1hY3Rpdml0eWxvZyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2VudHJpZXNfZGVjb3JhdG9yczsKICBsZXQgX2VudHJpZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lbnRyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hRdWVyeV9kZWNvcmF0b3JzOwogIGxldCBfc2VhcmNoUXVlcnlfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hRdWVyeV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsdGVyQ3JpdGVyaWFfZGVjb3JhdG9yczsKICBsZXQgX2ZpbHRlckNyaXRlcmlhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsdGVyQ3JpdGVyaWFfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0FwcHVpQWN0aXZpdHlsb2cyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfZW50cmllc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2VhcmNoUXVlcnlfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2ZpbHRlckNyaXRlcmlhX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTcodGhpcywgbnVsbCwgX2VudHJpZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZW50cmllcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZW50cmllcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbnRyaWVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5lbnRyaWVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VudHJpZXNfaW5pdGlhbGl6ZXJzLCBfZW50cmllc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTcodGhpcywgbnVsbCwgX3NlYXJjaFF1ZXJ5X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlYXJjaFF1ZXJ5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWFyY2hRdWVyeSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWFyY2hRdWVyeSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VhcmNoUXVlcnkgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VhcmNoUXVlcnlfaW5pdGlhbGl6ZXJzLCBfc2VhcmNoUXVlcnlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3KHRoaXMsIG51bGwsIF9maWx0ZXJDcml0ZXJpYV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJmaWx0ZXJDcml0ZXJpYSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZmlsdGVyQ3JpdGVyaWEiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsdGVyQ3JpdGVyaWEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmZpbHRlckNyaXRlcmlhID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ZpbHRlckNyaXRlcmlhX2luaXRpYWxpemVycywgX2ZpbHRlckNyaXRlcmlhX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNBcHB1aUFjdGl2aXR5bG9nMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMzOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI2VudHJpZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzOCh0aGlzLCBfZW50cmllc19pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFIFBST1BFUlRJRVMKICAgIGdldCBlbnRyaWVzKCkgewogICAgICByZXR1cm4gdGhpcy4jZW50cmllc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGVudHJpZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI2VudHJpZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWFyY2hRdWVyeV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOCh0aGlzLCBfZW50cmllc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzOCh0aGlzLCBfc2VhcmNoUXVlcnlfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHNlYXJjaFF1ZXJ5KCkgewogICAgICByZXR1cm4gdGhpcy4jc2VhcmNoUXVlcnlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWFyY2hRdWVyeSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VhcmNoUXVlcnlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNmaWx0ZXJDcml0ZXJpYV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzOCh0aGlzLCBfc2VhcmNoUXVlcnlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczgodGhpcywgX2ZpbHRlckNyaXRlcmlhX2luaXRpYWxpemVycywge30pKTsKICAgIGdldCBmaWx0ZXJDcml0ZXJpYSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2ZpbHRlckNyaXRlcmlhX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsdGVyQ3JpdGVyaWEodmFsdWUyKSB7CiAgICAgIHRoaXMuI2ZpbHRlckNyaXRlcmlhX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBSeEpTIFN1YmplY3QgZm9yIHJlYWN0aXZlIHVwZGF0ZXMKICAgIGVudHJpZXMkID0gKF9fcnVuSW5pdGlhbGl6ZXJzOCh0aGlzLCBfZmlsdGVyQ3JpdGVyaWFfZXh0cmFJbml0aWFsaXplcnMpLCBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cngucnhqcy5TdWJqZWN0KCkpOwogICAgLy8gU1RZTEVTCiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIC8qIENTUyBWYXJpYWJsZXMgYWxpZ25lZCB3aXRoIHNlY29uZGFyeSBtZW51ICovCiAgICAgICAgLS1hY3Rpdml0eWxvZy1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgICAtLWFjdGl2aXR5bG9nLWZnOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzUyNTI1MiIsICIjYTNhM2EzIil9OwogICAgICAgIC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzM3MzczIiwgIiM3MzczNzMiKX07CiAgICAgICAgLS1hY3Rpdml0eWxvZy1mZy1hY3RpdmU6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGEwYTBhIiwgIiNmYWZhZmEiKX07CiAgICAgICAgLS1hY3Rpdml0eWxvZy1ib3JkZXI6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlNWU1IiwgIiMxYTFhMWEiKX07CiAgICAgICAgLS1hY3Rpdml0eWxvZy1ob3ZlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNCkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSIpfTsKICAgICAgICAtLWFjdGl2aXR5bG9nLWFjY2VudDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3ODcxNmMiLCAiI2I1YTk5YSIpfTsKCiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnKTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjdGl2aXR5bG9nLWJnKTsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHNhbnMtc2VyaWY7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1hY3Rpdml0eWxvZy1ib3JkZXIpOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDI4MHB4OwogICAgICB9CgogICAgICAvKiBIZWFkZXIgd2l0aCBzdHJlYW1pbmcgaW5kaWNhdG9yICovCiAgICAgIC50b3BiYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZzogMHB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYWN0aXZpdHlsb2ctYmcpOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1hY3Rpdml0eWxvZy1ib3JkZXIpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgLnRvcGJhciAuaGVhZGluZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLWFjdGl2ZSk7CiAgICAgIH0KCiAgICAgIC5saXZlLWluZGljYXRvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQpOwogICAgICB9CgogICAgICAubGl2ZS1pbmRpY2F0b3IgLmRvdCB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzIyYzU1ZSIsICIjMjJjNTVlIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IHB1bHNlIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHB1bHNlIHsKICAgICAgICAwJSwgMTAwJSB7IG9wYWNpdHk6IDAuNTsgdHJhbnNmb3JtOiBzY2FsZSgwLjkpOyB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBzY2FsZSgxLjEpOyB9CiAgICAgIH0KCiAgICAgIC8qIEFjdGl2aXR5IGNvbnRhaW5lciAqLwogICAgICAuYWN0aXZpdHlDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDQ4cHg7CiAgICAgICAgYm90dG9tOiA0OHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICAgICAgc2Nyb2xsYmFyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Q0ZDRkNCIsICIjMzMzMzMzIil9IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYWN0aXZpdHlDb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICB9CgogICAgICAuYWN0aXZpdHlDb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5Q29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkNGQ0ZDQiLCAiIzMzMzMzMyIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eUNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjYTNhM2EzIiwgIiM1MjUyNTIiKX07CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA0MHB4IDE2cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgfQoKICAgICAgLyogRGF0ZSBzZXBhcmF0b3IgLSB3YXJtIHRhdXBlIHN0eWxpbmcgKi8KICAgICAgLmRhdGUtc2VwYXJhdG9yIHsKICAgICAgICBwYWRkaW5nOiAxMnB4IDEycHggNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1hY2NlbnQpOwogICAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYWN0aXZpdHlsb2ctYmcpOwogICAgICB9CgogICAgICAvKiBBY3Rpdml0eSBlbnRyeSAtIG1vZGVybiBzdGFja2VkIGxheW91dCAqLwogICAgICAuYWN0aXZpdHllbnRyeSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIG1hcmdpbjogMnB4IDRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMC4ycyBlYXNlLW91dDsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlSW4gewogICAgICAgIGZyb20gewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsKICAgICAgICB9CiAgICAgICAgdG8gewogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eWVudHJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY3Rpdml0eWxvZy1ob3Zlcik7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uIHsKICAgICAgICB3aWR0aDogMjhweDsKICAgICAgICBoZWlnaHQ6IDI4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDQpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQpOwogICAgICAgIG1hcmdpbi10b3A6IDFweDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24ubG9naW4gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDM0LCAxOTcsIDk0LCAwLjA4KSIsICJyZ2JhKDM0LCAxOTcsIDk0LCAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxNmEzNGEiLCAiIzRhZGU4MCIpfTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24ubG9nb3V0IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC4wOCkiLCAicmdiYSgyMzksIDY4LCA2OCwgMC4xMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNmODcxNzEiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLnZpZXcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4wOCkiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzI1NjNlYiIsICIjNjBhNWZhIil9OwogICAgICB9CgogICAgICAuYWN0aXZpdHktaWNvbi5jcmVhdGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE2OCwgODUsIDI0NywgMC4wOCkiLCAicmdiYSgxNjgsIDg1LCAyNDcsIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzkzMzNlYSIsICIjYzA4NGZjIil9OwogICAgICB9CgogICAgICAuYWN0aXZpdHktaWNvbi51cGRhdGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDI1MSwgMTQ2LCA2MCwgMC4wOCkiLCAicmdiYSgyNTEsIDE0NiwgNjAsIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VhNTgwYyIsICIjZmI5MjNjIil9OwogICAgICB9CgogICAgICAuYWN0aXZpdHktaWNvbi5kZWxldGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIzOSwgNjgsIDY4LCAwLjA4KSIsICJyZ2JhKDIzOSwgNjgsIDY4LCAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkYzI2MjYiLCAiI2Y4NzE3MSIpfTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24uY3VzdG9tIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgxMDAsIDExNiwgMTM5LCAwLjA4KSIsICJyZ2JhKDEwMCwgMTE2LCAxMzksIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzQ3NTU2OSIsICIjOTRhM2I4Iil9OwogICAgICB9CgogICAgICAuYWN0aXZpdHktY29udGVudCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMnB4OwogICAgICB9CgogICAgICAuYWN0aXZpdHktaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS11c2VyIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LXNlcGFyYXRvciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KCiAgICAgIC50aW1lc3RhbXAgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1tdXRlZCk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1tZXNzYWdlIHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmcpOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICAgIH0KCiAgICAgIC8qIFNlYXJjaCBib3ggLSByZWZpbmVkIHN0eWxpbmcgKi8KICAgICAgLnNlYXJjaGJveCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY3Rpdml0eWxvZy1iZyk7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWFjdGl2aXR5bG9nLWJvcmRlcik7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgLnNlYXJjaC13cmFwcGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICB9CgogICAgICAuc2VhcmNoLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAxMHB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQpOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuc2VhcmNoYm94IGlucHV0IHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctYWN0aXZlKTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjAzKSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpIil9OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA4KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHggMCAzNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuc2VhcmNoYm94IGlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgfQoKICAgICAgLnNlYXJjaGJveCBpbnB1dDpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMTUpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wMikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSIpfTsKICAgICAgfQoKICAgICAgLnNlYXJjaC13cmFwcGVyOmhhcyhpbnB1dDpmb2N1cykgLnNlYXJjaC1pY29uIHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmcpOwogICAgICB9CiAgICBgCiAgICBdOwogICAgLy8gUkVOREVSCiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IGZpbHRlcmVkRW50cmllcyA9IHRoaXMuZ2V0RmlsdGVyZWRFbnRyaWVzKCk7CiAgICAgIGNvbnN0IGdyb3VwZWRFbnRyaWVzID0gdGhpcy5ncm91cEVudHJpZXNCeURhdGUoZmlsdGVyZWRFbnRyaWVzKTsKICAgICAgcmV0dXJuIGIyYAogICAgICAke2RvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnN0eWxlc30KICAgICAgPHN0eWxlPjwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InRvcGJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nIj5BY3Rpdml0eSBMb2c8L2Rpdj4KICAgICAgICAgICR7ZmlsdGVyZWRFbnRyaWVzLmxlbmd0aCA+IDAgPyBiMmA8ZGl2IGNsYXNzPSJsaXZlLWluZGljYXRvciI+PHNwYW4gY2xhc3M9ImRvdCI+PC9zcGFuPkxpdmU8L2Rpdj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHlDb250YWluZXIiPgogICAgICAgICAgJHtmaWx0ZXJlZEVudHJpZXMubGVuZ3RoID09PSAwID8gYjJgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPk5vIGFjdGl2aXR5IGVudHJpZXM8L2Rpdj5gIDogZ3JvdXBlZEVudHJpZXMubWFwKChncm91cCkgPT4gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRhdGUtc2VwYXJhdG9yIj4ke2dyb3VwLmxhYmVsfTwvZGl2PgogICAgICAgICAgICAgICAgICAke2dyb3VwLmVudHJpZXMubWFwKChlbnRyeSkgPT4gdGhpcy5yZW5kZXJBY3Rpdml0eUVudHJ5KGVudHJ5KSl9CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2hib3giPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2VhcmNoLXdyYXBwZXIiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJzZWFyY2gtaWNvbiIgLmljb249JHsibHVjaWRlOnNlYXJjaCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJTZWFyY2ggYWN0aXZpdGllcywgdXNlcnMuLi4iCiAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5zZWFyY2hRdWVyeX0KICAgICAgICAgICAgICBAaW5wdXQ9JHt0aGlzLmhhbmRsZVNlYXJjaElucHV0fQogICAgICAgICAgICAvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckFjdGl2aXR5RW50cnkoZW50cnkpIHsKICAgICAgY29uc3QgdGltZXN0YW1wMiA9IGVudHJ5LnRpbWVzdGFtcCB8fCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgY29uc3QgdGltZVN0ciA9IHRoaXMuZm9ybWF0VGltZSh0aW1lc3RhbXAyKTsKICAgICAgY29uc3QgaWNvbk5hbWUgPSBlbnRyeS5pY29uTmFtZSB8fCB0aGlzLmdldEljb25Gb3JUeXBlKGVudHJ5LnR5cGUpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYWN0aXZpdHllbnRyeSIKICAgICAgICBAY29udGV4dG1lbnU9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUNvbnRleHRNZW51KGUxMSwgZW50cnkpfQogICAgICA+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHktaWNvbiAke2VudHJ5LnR5cGV9Ij4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHtpY29uTmFtZX0+PC9kZWVzLWljb24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHktY29udGVudCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpdml0eS1oZWFkZXIiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iYWN0aXZpdHktdXNlciI+JHtlbnRyeS51c2VyfTwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImFjdGl2aXR5LXNlcGFyYXRvciI+wrc8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lc3RhbXAiPiR7dGltZVN0cn08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5LW1lc3NhZ2UiPiR7ZW50cnkubWVzc2FnZX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgLy8gQVBJIE1FVEhPRFMKICAgIGFkZChlbnRyeSkgewogICAgICBjb25zdCBuZXdFbnRyeSA9IHsKICAgICAgICAuLi5lbnRyeSwKICAgICAgICBpZDogZW50cnkuaWQgfHwgdGhpcy5nZW5lcmF0ZUlkKCksCiAgICAgICAgdGltZXN0YW1wOiBlbnRyeS50aW1lc3RhbXAgfHwgLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkKICAgICAgfTsKICAgICAgdGhpcy5lbnRyaWVzID0gW25ld0VudHJ5LCAuLi50aGlzLmVudHJpZXNdOwogICAgICB0aGlzLmVudHJpZXMkLm5leHQodGhpcy5lbnRyaWVzKTsKICAgIH0KICAgIGFkZE1hbnkoZW50cmllcykgewogICAgICBjb25zdCBuZXdFbnRyaWVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiAoewogICAgICAgIC4uLmVudHJ5LAogICAgICAgIGlkOiBlbnRyeS5pZCB8fCB0aGlzLmdlbmVyYXRlSWQoKSwKICAgICAgICB0aW1lc3RhbXA6IGVudHJ5LnRpbWVzdGFtcCB8fCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKQogICAgICB9KSk7CiAgICAgIHRoaXMuZW50cmllcyA9IFsuLi5uZXdFbnRyaWVzLnJldmVyc2UoKSwgLi4udGhpcy5lbnRyaWVzXTsKICAgICAgdGhpcy5lbnRyaWVzJC5uZXh0KHRoaXMuZW50cmllcyk7CiAgICB9CiAgICBjbGVhcigpIHsKICAgICAgdGhpcy5lbnRyaWVzID0gW107CiAgICAgIHRoaXMuZW50cmllcyQubmV4dCh0aGlzLmVudHJpZXMpOwogICAgfQogICAgZ2V0RW50cmllcygpIHsKICAgICAgcmV0dXJuIFsuLi50aGlzLmVudHJpZXNdOwogICAgfQogICAgZmlsdGVyKGNyaXRlcmlhKSB7CiAgICAgIHJldHVybiB0aGlzLmVudHJpZXMuZmlsdGVyKChlbnRyeSkgPT4gewogICAgICAgIGlmIChjcml0ZXJpYS51c2VyICYmIGVudHJ5LnVzZXIgIT09IGNyaXRlcmlhLnVzZXIpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKGNyaXRlcmlhLnR5cGUgJiYgZW50cnkudHlwZSAhPT0gY3JpdGVyaWEudHlwZSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSk7CiAgICB9CiAgICBzZWFyY2gocXVlcnkpIHsKICAgICAgY29uc3QgbG93ZXJRdWVyeSA9IHF1ZXJ5LnRvTG93ZXJDYXNlKCk7CiAgICAgIHJldHVybiB0aGlzLmVudHJpZXMuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyUXVlcnkpIHx8IGVudHJ5LnVzZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlclF1ZXJ5KSk7CiAgICB9CiAgICAvLyBQUklWQVRFIEhFTFBFUlMKICAgIGdlbmVyYXRlSWQoKSB7CiAgICAgIHJldHVybiBgYWN0aXZpdHktJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KX1gOwogICAgfQogICAgZ2V0RmlsdGVyZWRFbnRyaWVzKCkgewogICAgICBsZXQgcmVzdWx0ID0gdGhpcy5lbnRyaWVzOwogICAgICBpZiAodGhpcy5zZWFyY2hRdWVyeSkgewogICAgICAgIGNvbnN0IGxvd2VyUXVlcnkgPSB0aGlzLnNlYXJjaFF1ZXJ5LnRvTG93ZXJDYXNlKCk7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlclF1ZXJ5KSB8fCBlbnRyeS51c2VyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJRdWVyeSkpOwogICAgICB9CiAgICAgIGlmICh0aGlzLmZpbHRlckNyaXRlcmlhLnVzZXIgfHwgdGhpcy5maWx0ZXJDcml0ZXJpYS50eXBlKSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigoZW50cnkpID0+IHsKICAgICAgICAgIGlmICh0aGlzLmZpbHRlckNyaXRlcmlhLnVzZXIgJiYgZW50cnkudXNlciAhPT0gdGhpcy5maWx0ZXJDcml0ZXJpYS51c2VyKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICBpZiAodGhpcy5maWx0ZXJDcml0ZXJpYS50eXBlICYmIGVudHJ5LnR5cGUgIT09IHRoaXMuZmlsdGVyQ3JpdGVyaWEudHlwZSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGdyb3VwRW50cmllc0J5RGF0ZShlbnRyaWVzKSB7CiAgICAgIGNvbnN0IGdyb3VwcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgIGNvbnN0IHllc3RlcmRheSA9IG5ldyBEYXRlKHRvZGF5KTsKICAgICAgeWVzdGVyZGF5LnNldERhdGUoeWVzdGVyZGF5LmdldERhdGUoKSAtIDEpOwogICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHsKICAgICAgICBjb25zdCBkYXRlID0gZW50cnkudGltZXN0YW1wIHx8IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpOwogICAgICAgIGxldCBsYWJlbDsKICAgICAgICBpZiAodGhpcy5pc1NhbWVEYXkoZGF0ZSwgdG9kYXkpKSB7CiAgICAgICAgICBsYWJlbCA9ICJUb2RheSI7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzU2FtZURheShkYXRlLCB5ZXN0ZXJkYXkpKSB7CiAgICAgICAgICBsYWJlbCA9ICJZZXN0ZXJkYXkiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsYWJlbCA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1VUyIsIHsKICAgICAgICAgICAgbW9udGg6ICJzaG9ydCIsCiAgICAgICAgICAgIGRheTogIm51bWVyaWMiLAogICAgICAgICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCkgIT09IHRvZGF5LmdldEZ1bGxZZWFyKCkgPyAibnVtZXJpYyIgOiB2b2lkIDAKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBpZiAoIWdyb3Vwcy5oYXMobGFiZWwpKSB7CiAgICAgICAgICBncm91cHMuc2V0KGxhYmVsLCBbXSk7CiAgICAgICAgfQogICAgICAgIGdyb3Vwcy5nZXQobGFiZWwpLnB1c2goZW50cnkpOwogICAgICB9CiAgICAgIHJldHVybiBBcnJheS5mcm9tKGdyb3Vwcy5lbnRyaWVzKCkpLm1hcCgoW2xhYmVsLCBlbnRyaWVzMl0pID0+ICh7CiAgICAgICAgbGFiZWwsCiAgICAgICAgZW50cmllczogZW50cmllczIKICAgICAgfSkpOwogICAgfQogICAgaXNTYW1lRGF5KGRhdGUxLCBkYXRlMikgewogICAgICByZXR1cm4gZGF0ZTEuZ2V0RnVsbFllYXIoKSA9PT0gZGF0ZTIuZ2V0RnVsbFllYXIoKSAmJiBkYXRlMS5nZXRNb250aCgpID09PSBkYXRlMi5nZXRNb250aCgpICYmIGRhdGUxLmdldERhdGUoKSA9PT0gZGF0ZTIuZ2V0RGF0ZSgpOwogICAgfQogICAgZm9ybWF0VGltZShkYXRlKSB7CiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlVGltZVN0cmluZygiZW4tVVMiLCB7CiAgICAgICAgaG91cjogIjItZGlnaXQiLAogICAgICAgIG1pbnV0ZTogIjItZGlnaXQiLAogICAgICAgIGhvdXIxMjogZmFsc2UKICAgICAgfSk7CiAgICB9CiAgICBnZXRJY29uRm9yVHlwZSh0eXBlNSkgewogICAgICBjb25zdCBpY29uczYgPSB7CiAgICAgICAgbG9naW46ICJsdWNpZGU6bG9nSW4iLAogICAgICAgIGxvZ291dDogImx1Y2lkZTpsb2dPdXQiLAogICAgICAgIHZpZXc6ICJsdWNpZGU6ZXllIiwKICAgICAgICBjcmVhdGU6ICJsdWNpZGU6cGx1cyIsCiAgICAgICAgdXBkYXRlOiAibHVjaWRlOmVkaXQiLAogICAgICAgIGRlbGV0ZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICAgIGN1c3RvbTogImx1Y2lkZTphY3Rpdml0eSIKICAgICAgfTsKICAgICAgcmV0dXJuIGljb25zNlt0eXBlNV0gfHwgaWNvbnM2LmN1c3RvbTsKICAgIH0KICAgIGhhbmRsZVNlYXJjaElucHV0KGUxMSkgewogICAgICBjb25zdCB0YXJnZXQgPSBlMTEudGFyZ2V0OwogICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gdGFyZ2V0LnZhbHVlOwogICAgfQogICAgaGFuZGxlQ29udGV4dE1lbnUoZTExLCBlbnRyeSkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDb3B5IGFjdGl2aXR5IiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmNvcHkiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGAke2VudHJ5LnVzZXJ9ICR7ZW50cnkubWVzc2FnZX1gKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJGaWx0ZXIgYnkgdXNlciIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp1c2VyIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICB0aGlzLmZpbHRlckNyaXRlcmlhID0geyB1c2VyOiBlbnRyeS51c2VyIH07CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiRmlsdGVyIGJ5IHR5cGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsdGVyIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICB0aGlzLmZpbHRlckNyaXRlcmlhID0geyB0eXBlOiBlbnRyeS50eXBlIH07CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiQ2xlYXIgZmlsdGVycyIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp4IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICB0aGlzLmZpbHRlckNyaXRlcmlhID0ge307CiAgICAgICAgICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAiIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0pOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQXBwdWlBY3Rpdml0eWxvZzIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYXBwYmFyL2RlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNCA9ICgpID0+IHsKICBjb25zdCBtZW51SXRlbXMgPSBbCiAgICB7CiAgICAgIG5hbWU6ICJGaWxlIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sCiAgICAgIC8vIE5vLW9wIGFjdGlvbiBmb3IgbWVudSB3aXRoIHN1Ym1lbnUKICAgICAgc3VibWVudTogWwogICAgICAgIHsgbmFtZTogIk5ldyBGaWxlIiwgc2hvcnRjdXQ6ICJDbWQrTiIsIGljb25OYW1lOiAiZmlsZS1wbHVzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiTmV3IGZpbGUiKSB9LAogICAgICAgIHsgbmFtZTogIk9wZW4uLi4iLCBzaG9ydGN1dDogIkNtZCtPIiwgaWNvbk5hbWU6ICJmb2xkZXItb3BlbiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4iKSB9LAogICAgICAgIHsgbmFtZTogIk9wZW4gUmVjZW50IiwgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgfSwgc3VibWVudTogWwogICAgICAgICAgeyBuYW1lOiAicHJvamVjdC1hbHBoYS50cyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4gcmVjZW50IDEiKSB9LAogICAgICAgICAgeyBuYW1lOiAiY29uZmlnLmpzb24iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIHJlY2VudCAyIikgfSwKICAgICAgICAgIHsgbmFtZTogInJlYWRtZS5tZCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4gcmVjZW50IDMiKSB9CiAgICAgICAgXSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIlNhdmUiLCBzaG9ydGN1dDogIkNtZCtTIiwgaWNvbk5hbWU6ICJzYXZlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2F2ZSIpIH0sCiAgICAgICAgeyBuYW1lOiAiU2F2ZSBBcy4uLiIsIHNob3J0Y3V0OiAiQ21kK1NoaWZ0K1MiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTYXZlIGFzIiksIGRpc2FibGVkOiB0cnVlIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiRXhpdCIsIHNob3J0Y3V0OiAiQ21kK1EiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJFeGl0IikgfQogICAgICBdCiAgICB9LAogICAgewogICAgICBuYW1lOiAiRWRpdCIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICB9LAogICAgICAvLyBOby1vcCBhY3Rpb24gZm9yIG1lbnUgd2l0aCBzdWJtZW51CiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJVbmRvIiwgc2hvcnRjdXQ6ICJDbWQrWiIsIGljb25OYW1lOiAidW5kbyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlVuZG8iKSB9LAogICAgICAgIHsgbmFtZTogIlJlZG8iLCBzaG9ydGN1dDogIkNtZCtTaGlmdCtaIiwgaWNvbk5hbWU6ICJyZWRvIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUmVkbyIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiQ3V0Iiwgc2hvcnRjdXQ6ICJDbWQrWCIsIGljb25OYW1lOiAic2Npc3NvcnMiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDdXQiKSB9LAogICAgICAgIHsgbmFtZTogIkNvcHkiLCBzaG9ydGN1dDogIkNtZCtDIiwgaWNvbk5hbWU6ICJjb3B5IiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQ29weSIpIH0sCiAgICAgICAgeyBuYW1lOiAiUGFzdGUiLCBzaG9ydGN1dDogIkNtZCtWIiwgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJQYXN0ZSIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiRmluZCIsIHNob3J0Y3V0OiAiQ21kK0YiLCBpY29uTmFtZTogInNlYXJjaCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkZpbmQiKSB9LAogICAgICAgIHsgbmFtZTogIlJlcGxhY2UiLCBzaG9ydGN1dDogIkNtZCtIIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUmVwbGFjZSIpIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgbmFtZTogIlZpZXciLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwKICAgICAgLy8gTm8tb3AgYWN0aW9uIGZvciBtZW51IHdpdGggc3VibWVudQogICAgICBzdWJtZW51OiBbCiAgICAgICAgeyBuYW1lOiAiVG9nZ2xlIEZ1bGxzY3JlZW4iLCBzaG9ydGN1dDogIkYxMSIsIGljb25OYW1lOiAiZXhwYW5kIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRnVsbHNjcmVlbiIpIH0sCiAgICAgICAgeyBuYW1lOiAiWm9vbSBJbiIsIHNob3J0Y3V0OiAiQ21kKysiLCBpY29uTmFtZTogInpvb20taW4iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJab29tIGluIikgfSwKICAgICAgICB7IG5hbWU6ICJab29tIE91dCIsIHNob3J0Y3V0OiAiQ21kKy0iLCBpY29uTmFtZTogInpvb20tb3V0IiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiWm9vbSBvdXQiKSB9LAogICAgICAgIHsgbmFtZTogIlJlc2V0IFpvb20iLCBzaG9ydGN1dDogIkNtZCswIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUmVzZXQgem9vbSIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiVG9nZ2xlIFNpZGViYXIiLCBzaG9ydGN1dDogIkNtZCtCIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiVG9nZ2xlIHNpZGViYXIiKSB9LAogICAgICAgIHsgbmFtZTogIlRvZ2dsZSBUZXJtaW5hbCIsIHNob3J0Y3V0OiAiQ21kK0oiLCBpY29uTmFtZTogInRlcm1pbmFsIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiVG9nZ2xlIHRlcm1pbmFsIikgfQogICAgICBdCiAgICB9LAogICAgewogICAgICBuYW1lOiAiSGVscCIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICB9LAogICAgICAvLyBOby1vcCBhY3Rpb24gZm9yIG1lbnUgd2l0aCBzdWJtZW51CiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJEb2N1bWVudGF0aW9uIiwgaWNvbk5hbWU6ICJib29rIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRG9jdW1lbnRhdGlvbiIpIH0sCiAgICAgICAgeyBuYW1lOiAiUmVsZWFzZSBOb3RlcyIsIGljb25OYW1lOiAiZmlsZS10ZXh0IiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUmVsZWFzZSBub3RlcyIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiUmVwb3J0IElzc3VlIiwgaWNvbk5hbWU6ICJidWciLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJSZXBvcnQgaXNzdWUiKSB9LAogICAgICAgIHsgbmFtZTogIkFib3V0IiwgaWNvbk5hbWU6ICJpbmZvIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQWJvdXQiKSB9CiAgICAgIF0KICAgIH0KICBdOwogIHJldHVybiBiMmAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICBjb25zdCBhcHBiYXIgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNhcHBiYXIiKTsKICAgIGNvbnN0IHN0YXR1c0J1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoIi5zdGF0dXMtdG9nZ2xlIGRlZXMtYnV0dG9uIik7CiAgICBzdGF0dXNCdXR0b25zWzBdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBhcHBiYXIudXNlciA9IHsgLi4uYXBwYmFyLnVzZXIsIHN0YXR1czogIm9ubGluZSIgfTsKICAgIH0pOwogICAgc3RhdHVzQnV0dG9uc1sxXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgYXBwYmFyLnVzZXIgPSB7IC4uLmFwcGJhci51c2VyLCBzdGF0dXM6ICJidXN5IiB9OwogICAgfSk7CiAgICBzdGF0dXNCdXR0b25zWzJdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBhcHBiYXIudXNlciA9IHsgLi4uYXBwYmFyLnVzZXIsIHN0YXR1czogImF3YXkiIH07CiAgICB9KTsKICAgIHN0YXR1c0J1dHRvbnNbM10uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGFwcGJhci51c2VyID0geyAuLi5hcHBiYXIudXNlciwgc3RhdHVzOiAib2ZmbGluZSIgfTsKICAgIH0pOwogICAgY29uc3Qgd2luZG93Q29udHJvbHNCdXR0b24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIi53aW5kb3ctY29udHJvbHMtdG9nZ2xlIGRlZXMtYnV0dG9uIik7CiAgICB3aW5kb3dDb250cm9sc0J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgYXBwYmFyLnNob3dXaW5kb3dDb250cm9scyA9ICFhcHBiYXIuc2hvd1dpbmRvd0NvbnRyb2xzOwogICAgfSk7CiAgICBjb25zdCBicmVhZGNydW1iQnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiLmJyZWFkY3J1bWItdG9nZ2xlIGRlZXMtYnV0dG9uIik7CiAgICBicmVhZGNydW1iQnV0dG9uc1swXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgYXBwYmFyLmJyZWFkY3J1bWJzID0gIkhvbWUgPiBEb2N1bWVudHMgPiBQcm9qZWN0cyA+IE15QXBwID4gc3JjID4gaW5kZXgudHMiOwogICAgfSk7CiAgICBicmVhZGNydW1iQnV0dG9uc1sxXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgYXBwYmFyLmJyZWFkY3J1bWJzID0gIkRhc2hib2FyZCI7CiAgICB9KTsKICB9fT4KICAgICAgPHN0eWxlPgogICAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgaGVpZ2h0OiA2MDBweDsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29udGVudCB7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgIGNvbG9yOiAjY2NjOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29udHJvbHMgewogICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb250cm9sLWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb250cm9sLWdyb3VwIGxhYmVsIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtYXBwdWktYXBwYmFyCiAgICAgICAgaWQ9ImFwcGJhciIKICAgICAgICAubWVudUl0ZW1zPSR7bWVudUl0ZW1zfQogICAgICAgIC5icmVhZGNydW1icz0keyJQcm9qZWN0ID4gc3JjID4gY29tcG9uZW50cyA+IEFwcEJhci50cyJ9CiAgICAgICAgLmJyZWFkY3J1bWJTZXBhcmF0b3I9JHsiID4gIn0KICAgICAgICAuc2hvd1dpbmRvd0NvbnRyb2xzPSR7dHJ1ZX0KICAgICAgICAuc2hvd1NlYXJjaD0ke3RydWV9CiAgICAgICAgLnRoZW1lPSR7ImRhcmsifQogICAgICAgIC51c2VyPSR7ewogICAgbmFtZTogIkpvaG4gRG9lIiwKICAgIHN0YXR1czogIm9ubGluZSIKICB9fQogICAgICAgIEBtZW51LXNlbGVjdD0keyhlMTEpID0+IGNvbnNvbGUubG9nKCJNZW51IHNlbGVjdGVkOiIsIGUxMS5kZXRhaWwuaXRlbSl9CiAgICAgICAgQGJyZWFkY3J1bWItbmF2aWdhdGU9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiQnJlYWRjcnVtYiBjbGlja2VkOiIsIGUxMS5kZXRhaWwpfQogICAgICAgIEBzZWFyY2gtY2xpY2s9JHsoKSA9PiBjb25zb2xlLmxvZygiU2VhcmNoIGNsaWNrZWQiKX0KICAgICAgICBAdXNlci1tZW51LW9wZW49JHsoKSA9PiBjb25zb2xlLmxvZygiVXNlciBtZW51IGNsaWNrZWQiKX0KICAgICAgPjwvZGVlcy1hcHB1aS1hcHBiYXI+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgICA8aDI+QXBwIEJhciBEZW1vPC9oMj4KICAgICAgICA8cD5UaGlzIGRlbW8gc2hvd3MgdmFyaW91cyBmZWF0dXJlcyBvZiB0aGUgYXBwIGJhciBjb21wb25lbnQ6PC9wPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT5EeW5hbWljIG1lbnUgaXRlbXMgd2l0aCBpY29ucywgc2hvcnRjdXRzLCBhbmQgc3VibWVudXM8L2xpPgogICAgICAgICAgPGxpPkJyZWFkY3J1bWIgbmF2aWdhdGlvbjwvbGk+CiAgICAgICAgICA8bGk+VXNlciBhY2NvdW50IHNlY3Rpb24gd2l0aCBzdGF0dXMgaW5kaWNhdG9yPC9saT4KICAgICAgICAgIDxsaT5TZWFyY2ggaWNvbjwvbGk+CiAgICAgICAgICA8bGk+V2luZG93IGNvbnRyb2xzIChwbGF0Zm9ybS1zcGVjaWZpYyk8L2xpPgogICAgICAgICAgPGxpPkRhcmsvbGlnaHQgdGhlbWUgc3VwcG9ydDwvbGk+CiAgICAgICAgICA8bGk+S2V5Ym9hcmQgbmF2aWdhdGlvbiAoVGFiLCBFbnRlciwgRXNjYXBlKTwvbGk+CiAgICAgICAgICA8bGk+Q3VzdG9tIGV2ZW50cyBmb3IgYWxsIGludGVyYWN0aW9uczwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ncm91cCI+CiAgICAgICAgICA8bGFiZWw+VGhlbWU8L2xhYmVsPgogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGNsYXNzPSJ0aGVtZS10b2dnbGUiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+RGFyazwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5MaWdodDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPgogICAgICAgICAgPGxhYmVsPlVzZXIgU3RhdHVzPC9sYWJlbD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBjbGFzcz0ic3RhdHVzLXRvZ2dsZSI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5PbmxpbmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+QnVzeTwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5Bd2F5PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPk9mZmxpbmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIj4KICAgICAgICAgIDxsYWJlbD5XaW5kb3cgQ29udHJvbHM8L2xhYmVsPgogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGNsYXNzPSJ3aW5kb3ctY29udHJvbHMtdG9nZ2xlIj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlRvZ2dsZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPgogICAgICAgICAgPGxhYmVsPkJyZWFkY3J1bWJzPC9sYWJlbD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBjbGFzcz0iYnJlYWRjcnVtYi10b2dnbGUiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+TG9uZyBQYXRoPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlNob3J0IFBhdGg8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYXBwYmFyL3N0eWxlcy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgYXBwdWlBcHBiYXJTdHlsZXMgPSBbCiAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogIGlgCiAgICAgIDpob3N0IHsKICAgICAgICAvKiBDU1MgVmFyaWFibGVzIGZvciB0aGVtaW5nICovCiAgICAgICAgLS1hcHBiYXItaGVpZ2h0OiA0MHB4OwogICAgICAgIC0tYXBwYmFyLWZvbnQtc2l6ZTogMTJweDsKICAgICAgICAKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1hcHBiYXItaGVpZ2h0KTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzIwMjAyMCIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDgwIiwgIiNmZmZmZmY4MCIpfTsKICAgICAgICBmb250LXNpemU6IHZhcigtLWFwcGJhci1mb250LXNpemUpOwogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIDFmciBhdXRvOwogICAgICAgIC13ZWJraXQtYXBwLXJlZ2lvbjogZHJhZzsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLm1lbnVzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAubWVudUl0ZW0gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBsaW5lLWhlaWdodDogMjRweDsKICAgICAgICBwYWRkaW5nOiAwcHggMTJweDsKICAgICAgICBtYXJnaW46IDhweCAwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIC13ZWJraXQtYXBwLXJlZ2lvbjogbm8tZHJhZzsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLyogT3B0aW9uYWw6IFN0eWxlIGZvciBtZW51IGl0ZW1zIHdpdGggaWNvbnMgKG5vdCB0eXBpY2FsbHkgdXNlZCBmb3IgdG9wLWxldmVsIGl0ZW1zKSAqLwogICAgICAubWVudUl0ZW0gZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CgogICAgICAubWVudUl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMTAiLCAiI2ZmZmZmZjIwIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAubWVudUl0ZW0uYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDIwIiwgIiNmZmZmZmYzMCIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAiLCAiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtW2Rpc2FibGVkXSB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbTpmb2N1cy12aXNpYmxlIHsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDA4MCIsICIjZmZmZmZmODAiKX07CiAgICAgIH0KCgogICAgICAvKiBEcm9wZG93biBzdHlsZXMgKi8KICAgICAgLmRyb3Bkb3duIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgbWluLXdpZHRoOiAyMDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSkiLCAiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMykiKX07CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycywgdHJhbnNmb3JtIDAuMnM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi5vcGVuIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWl0ZW0gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzOwogICAgICB9CgogICAgICAuZHJvcGRvd24taXRlbTpob3ZlciwKICAgICAgLmRyb3Bkb3duLWl0ZW0uZm9jdXNlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAxMCIsICIjZmZmZmZmMjAiKX07CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi1kaXZpZGVyIHsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMjAyMDIwIil9OwogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi1pdGVtW2Rpc2FibGVkXSB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi1pdGVtIC5zaG9ydGN1dCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLyogQnJlYWRjcnVtYnMgKi8KICAgICAgLmJyZWFkY3J1bWJzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5icmVhZGNydW1iLWl0ZW0gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDgwIiwgIiNmZmZmZmY4MCIpfTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4yczsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWItaXRlbTpob3ZlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNmZmZmZmYiKX07CiAgICAgIH0KCiAgICAgIC5icmVhZGNydW1iLXNlcGFyYXRvciB7CiAgICAgICAgbWFyZ2luOiAwIDhweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC8qIEFjY291bnQgc2VjdGlvbiAqLwogICAgICAuYWNjb3VudCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1pY29uIHsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAgICAgfQoKICAgICAgLnNlYXJjaC1pY29uOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAudXNlci1pbmZvIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4yczsKICAgICAgfQoKICAgICAgLnVzZXItaW5mbzpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAxMCIsICIjZmZmZmZmMjAiKX07CiAgICAgIH0KCiAgICAgIC51c2VyLWF2YXRhciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAyMCIsICIjZmZmZmZmMzAiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQoKICAgICAgLnVzZXItYXZhdGFyIGltZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAtMnB4OwogICAgICAgIHJpZ2h0OiAtMnB4OwogICAgICAgIHdpZHRoOiA4cHg7CiAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5vbmxpbmUgewogICAgICAgIGJhY2tncm91bmQ6ICM0Y2FmNTA7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5vZmZsaW5lIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjNzU3NTc1OwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMuYnVzeSB7CiAgICAgICAgYmFja2dyb3VuZDogI2Y0NDMzNjsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLmF3YXkgewogICAgICAgIGJhY2tncm91bmQ6ICNmZjk4MDA7CiAgICAgIH0KCiAgICAgIC8qIEFjdGl2aXR5IGxvZyB0b2dnbGUgYnV0dG9uICovCiAgICAgIC5hY3Rpdml0eS10b2dnbGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDJweDsKICAgICAgICBoZWlnaHQ6IDI4cHg7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICAtd2Via2l0LWFwcC1yZWdpb246IG5vLWRyYWc7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwNjAiLCAiI2ZmZmZmZjYwIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuYWN0aXZpdHktdG9nZ2xlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDEwIiwgIiNmZmZmZmYxNSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAiLCAiI2ZmZmZmZiIpfTsKICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYWN0aXZpdHktdG9nZ2xlLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAxNSIsICIjZmZmZmZmMjAiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNmZmZmZmYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LXRvZ2dsZSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWJhZGdlIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDRweDsKICAgICAgICBtaW4td2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDAgNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNTI1MjUyIiwgIiM1MjUyNTIiKX07CiAgICAgICAgY29sb3I6ICNmYWZhZmE7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgfQogICAgYApdOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYXBwYmFyL3RlbXBsYXRlLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciByZW5kZXJBcHB1aUFwcGJhciA9IChjb21wb25lbnQpID0+IHsKICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0ibWVudXMiPgogICAgICAgICAgJHtjb21wb25lbnQuc2hvd1dpbmRvd0NvbnRyb2xzID8gYjJgPGRlZXMtd2luZG93Y29udHJvbHM+PC9kZWVzLXdpbmRvd2NvbnRyb2xzPmAgOiAiIn0KICAgICAgICAgICR7Y29tcG9uZW50LnJlbmRlck1lbnVJdGVtcygpfQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJyZWFkY3J1bWJzIj4KICAgICAgICAgICR7Y29tcG9uZW50LnJlbmRlckJyZWFkY3J1bWJzKCl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWNjb3VudCI+CiAgICAgICAgICAke2NvbXBvbmVudC5yZW5kZXJBY2NvdW50U2VjdGlvbigpfQogICAgICAgIDwvZGl2PgogICAgICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXdpbmRvd2NvbnRyb2xzL2RlZXMtd2luZG93Y29udHJvbHMuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlOCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzOSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1dpbmRvd0NvbnRyb2xzID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13aW5kb3djb250cm9scyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3R5cGVfZGVjb3JhdG9yczsKICBsZXQgX3R5cGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wb3NpdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfcG9zaXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV2luZG93Q29udHJvbHMyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdHlwZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3Bvc2l0aW9uX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGU4KHRoaXMsIG51bGwsIF90eXBlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInR5cGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInR5cGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudHlwZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudHlwZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90eXBlX2luaXRpYWxpemVycywgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4KHRoaXMsIG51bGwsIF9wb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwb3NpdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnBvc2l0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgX3Bvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlOChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXaW5kb3dDb250cm9sczIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYDxkZWVzLXdpbmRvd2NvbnRyb2xzPjwvZGVlcy13aW5kb3djb250cm9scz5gOwogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzOSh0aGlzLCBfdHlwZV9pbml0aWFsaXplcnMsICJtYWMiKTsKICAgIC8vIEluc3RhbmNlCiAgICBnZXQgdHlwZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0eXBlKHZhbHVlMikgewogICAgICB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczkodGhpcywgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczkodGhpcywgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgImxlZnQiKSk7CiAgICBnZXQgcG9zaXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNwb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHBvc2l0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNwb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDE2cHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgfQoKICAgICAgLndpbmRvd0NvbnRyb2xzIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLndpbmRvd0NvbnRyb2xzIGRpdiB7CiAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgbWFyZ2luOiAwcHg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICMyMjIyMjI7CiAgICAgIH0KCiAgICAgIC53aW5kb3dDb250cm9scyBkaXYuY2xvc2UgewogICAgICAgIGJhY2tncm91bmQ6ICNmZjVmNTc7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMnB4OwogICAgICB9CgogICAgICAud2luZG93Q29udHJvbHMgZGl2LnRvRG9jayB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmYmQyZTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEycHg7CiAgICAgIH0KCiAgICAgIC53aW5kb3dDb250cm9scyBkaXYubWluTWF4IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMjdjOTNmOwogICAgICB9CgogICAgICAud2luZG93Q29udHJvbHMgZGl2OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMzMzMzMzOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgICR7dGhpcy50eXBlID09PSAibWFjIiAmJiB0aGlzLnBvc2l0aW9uID09PSAibGVmdCIgfHwgKHRoaXMudHlwZSA9PT0gImxpbnV4IiB8fCB0aGlzLnR5cGUgPT09ICJ3aW5kb3dzIikgJiYgdGhpcy5wb3NpdGlvbiA9PT0gInJpZ2h0IiA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3aW5kb3dDb250cm9scyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2xvc2UiPjwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvRG9jayI+PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWluTWF4Ij48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogYjJgYH0KICAgIGA7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM5KHRoaXMsIF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXaW5kb3dDb250cm9sczIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktcHJvZmlsZWRyb3Bkb3duL2RlZXMtYXBwdWktcHJvZmlsZWRyb3Bkb3duLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczEwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzQXBwdWlQcm9maWxlRHJvcGRvd24gPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWFwcHVpLXByb2ZpbGVkcm9wZG93biIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3VzZXJfZGVjb3JhdG9yczsKICBsZXQgX3VzZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF91c2VyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX21lbnVJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNPcGVuX2RlY29yYXRvcnM7CiAgbGV0IF9pc09wZW5faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc09wZW5fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Bvc2l0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9wb3NpdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Bvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNBcHB1aVByb2ZpbGVEcm9wZG93bjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF91c2VyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfbWVudUl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9pc09wZW5fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSldOwogICAgICBfcG9zaXRpb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTkodGhpcywgbnVsbCwgX3VzZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidXNlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidXNlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai51c2VyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai51c2VyID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3VzZXJfaW5pdGlhbGl6ZXJzLCBfdXNlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTkodGhpcywgbnVsbCwgX21lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVJdGVtcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVJdGVtcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlOSh0aGlzLCBudWxsLCBfaXNPcGVuX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzT3BlbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNPcGVuIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzT3Blbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNPcGVuID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzT3Blbl9pbml0aWFsaXplcnMsIF9pc09wZW5fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU5KHRoaXMsIG51bGwsIF9wb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwb3NpdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnBvc2l0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgX3Bvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlOShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNBcHB1aVByb2ZpbGVEcm9wZG93bjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmAKICAgIDxkZWVzLWFwcHVpLXByb2ZpbGVkcm9wZG93bgogICAgICAudXNlcj0ke3sKICAgICAgbmFtZTogIkpvaG4gRG9lIiwKICAgICAgZW1haWw6ICJqb2huLmRvZUBleGFtcGxlLmNvbSIsCiAgICAgIGF2YXRhcjogImh0dHBzOi8vcmFuZG9tdXNlci5tZS9hcGkvcG9ydHJhaXRzL21lbi8xLmpwZyIsCiAgICAgIHN0YXR1czogIm9ubGluZSIKICAgIH19CiAgICAgIC5tZW51SXRlbXM9JHtbCiAgICAgIHsgbmFtZTogIlByb2ZpbGUgU2V0dGluZ3MiLCBpY29uTmFtZTogInVzZXIiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJQcm9maWxlIikgfSwKICAgICAgeyBuYW1lOiAiQWNjb3VudCIsIGljb25OYW1lOiAic2V0dGluZ3MiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJBY2NvdW50IikgfSwKICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgIHsgbmFtZTogIkhlbHAgJiBTdXBwb3J0IiwgaWNvbk5hbWU6ICJoZWxwQ2lyY2xlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiSGVscCIpIH0sCiAgICAgIHsgbmFtZTogIktleWJvYXJkIFNob3J0Y3V0cyIsIGljb25OYW1lOiAia2V5Ym9hcmQiLCBzaG9ydGN1dDogIkNtZCtLIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2hvcnRjdXRzIikgfSwKICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgIHsgbmFtZTogIlNpZ24gT3V0IiwgaWNvbk5hbWU6ICJsb2dPdXQiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTaWduIG91dCIpIH0KICAgIF19CiAgICAgIC5pc09wZW49JHt0cnVlfQogICAgPjwvZGVlcy1hcHB1aS1wcm9maWxlZHJvcGRvd24+CiAgYDsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiQXBwIFVJIjsKICAgICN1c2VyX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczEwKHRoaXMsIF91c2VyX2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgIGdldCB1c2VyKCkgewogICAgICByZXR1cm4gdGhpcy4jdXNlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHVzZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3VzZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczEwKHRoaXMsIF91c2VyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMCh0aGlzLCBfbWVudUl0ZW1zX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBtZW51SXRlbXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtZW51SXRlbXModmFsdWUyKSB7CiAgICAgIHRoaXMuI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzT3Blbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTAodGhpcywgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTAodGhpcywgX2lzT3Blbl9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNPcGVuKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNPcGVuX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNPcGVuKHZhbHVlMikgewogICAgICB0aGlzLiNpc09wZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTAodGhpcywgX2lzT3Blbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTAodGhpcywgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgInRvcC1yaWdodCIpKTsKICAgIGdldCBwb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcG9zaXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbWluLXdpZHRoOiAyMjBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSkiLCAiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMykiKX07CiAgICAgICAgei1pbmRleDogJHt6SW5kZXhMYXllcnMub3ZlcmxheS5kcm9wZG93bn07CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpIHRyYW5zbGF0ZVkoLTEwcHgpOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycywgdHJhbnNmb3JtIDAuMnM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpc29wZW5dKSAuZHJvcGRvd24gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVZKDApOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICAuYmFja2Ryb3AgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFBvc2l0aW9uIHZhcmlhbnRzICovCiAgICAgIC5kcm9wZG93bi50b3AtcmlnaHQgewogICAgICAgIHRvcDogMTAwJTsKICAgICAgICByaWdodDogMDsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi50b3AtbGVmdCB7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICB9CgogICAgICAuZHJvcGRvd24uYm90dG9tLXJpZ2h0IHsKICAgICAgICBib3R0b206IDEwMCU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICB9CgogICAgICAuZHJvcGRvd24uYm90dG9tLWxlZnQgewogICAgICAgIGJvdHRvbTogMTAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgfQoKICAgICAgLyogVXNlciBzZWN0aW9uICovCiAgICAgIC51c2VyLXNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgIH0KCiAgICAgIC51c2VyLWluZm8gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgIH0KCiAgICAgIC51c2VyLWF2YXRhciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmMGYwZjAiLCAiIzFhMWExYSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiM5OTkiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnVzZXItYXZhdGFyIGltZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG9iamVjdC1maXQ6IGNvdmVyOwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMub25saW5lIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjNGNhZjUwOwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMub2ZmbGluZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzc1NzU3NTsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLmJ1c3kgewogICAgICAgIGJhY2tncm91bmQ6ICNmNDQzMzY7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5hd2F5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmY5ODAwOwogICAgICB9CgogICAgICAudXNlci1kZXRhaWxzIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLnVzZXItbmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwIiwgIiNmZmYiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAudXNlci1lbWFpbCB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NiIsICIjOTk5Iil9OwogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH0KCiAgICAgIC8qIE1lbnUgc2VjdGlvbiAqLwogICAgICAubWVudS1zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiA0cHggMDsKICAgICAgfQoKICAgICAgLm1lbnUtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNjY2MiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAubWVudS1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA0KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICB9CgogICAgICAubWVudS1pdGVtOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wOCkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSIpfTsKICAgICAgfQoKICAgICAgLm1lbnUtaXRlbSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC5tZW51LWl0ZW0tdGV4dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLm1lbnUtc2hvcnRjdXQgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5OTkiLCAiIzY2NiIpfTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC5tZW51LWRpdmlkZXIgewogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgfQoKICAgICAgLyogQmFja2Ryb3AgZm9yIG1vYmlsZSAqLwogICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAuYmFja2Ryb3AgewogICAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgICAgdG9wOiAwOwogICAgICAgICAgbGVmdDogMDsKICAgICAgICAgIHJpZ2h0OiAwOwogICAgICAgICAgYm90dG9tOiAwOwogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgICAgICAgei1pbmRleDogJHt6SW5kZXhMYXllcnMuYmFja2Ryb3AuZHJvcGRvd259OwogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbaXNvcGVuXSkgLmJhY2tkcm9wIHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIH0KCiAgICAgICAgLmRyb3Bkb3duIHsKICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgIHRvcDogNTAlOwogICAgICAgICAgbGVmdDogNTAlOwogICAgICAgICAgcmlnaHQ6IGF1dG87CiAgICAgICAgICBib3R0b206IGF1dG87CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgwLjk1KTsKICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDMycHgpOwogICAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDMycHgpOwogICAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbaXNvcGVuXSkgLmRyb3Bkb3duIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDEpOwogICAgICAgIH0KICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJiYWNrZHJvcCIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jbG9zZSgpfT48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZHJvcGRvd24gJHt0aGlzLnBvc2l0aW9ufSI+CiAgICAgICAgJHt0aGlzLnVzZXIgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItaW5mbyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1hdmF0YXIiPgogICAgICAgICAgICAgICAgJHt0aGlzLnVzZXIuYXZhdGFyID8gYjJgPGltZyBzcmM9IiR7dGhpcy51c2VyLmF2YXRhcn0iIGFsdD0iJHt0aGlzLnVzZXIubmFtZX0iPmAgOiB0aGlzLmdldEluaXRpYWxzKHRoaXMudXNlci5uYW1lKX0KICAgICAgICAgICAgICAgICR7dGhpcy51c2VyLnN0YXR1cyA/IGIyYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLXN0YXR1cyAke3RoaXMudXNlci5zdGF0dXN9Ij48L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLWRldGFpbHMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1uYW1lIj4ke3RoaXMudXNlci5uYW1lfTwvZGl2PgogICAgICAgICAgICAgICAgJHt0aGlzLnVzZXIuZW1haWwgPyBiMmAKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1lbWFpbCI+JHt0aGlzLnVzZXIuZW1haWx9PC9kaXY+CiAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im1lbnUtc2VjdGlvbiI+CiAgICAgICAgICAke3RoaXMubWVudUl0ZW1zLm1hcCgoaXRlbSkgPT4gdGhpcy5yZW5kZXJNZW51SXRlbShpdGVtKSl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlck1lbnVJdGVtKGl0ZW0pIHsKICAgICAgaWYgKCJkaXZpZGVyIiBpbiBpdGVtICYmIGl0ZW0uZGl2aWRlcikgewogICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJtZW51LWRpdmlkZXIiPjwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgbWVudUl0ZW0gPSBpdGVtOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im1lbnUtaXRlbSIgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVNZW51Q2xpY2sobWVudUl0ZW0pfT4KICAgICAgICAke21lbnVJdGVtLmljb25OYW1lID8gYjJgCiAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIke2BsdWNpZGU6JHttZW51SXRlbS5pY29uTmFtZX1gfSI+PC9kZWVzLWljb24+CiAgICAgICAgYCA6ICIifQogICAgICAgIDxzcGFuIGNsYXNzPSJtZW51LWl0ZW0tdGV4dCI+JHttZW51SXRlbS5uYW1lfTwvc3Bhbj4KICAgICAgICAke21lbnVJdGVtLnNob3J0Y3V0ID8gYjJgCiAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVudS1zaG9ydGN1dCI+JHttZW51SXRlbS5zaG9ydGN1dH08L3NwYW4+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBnZXRJbml0aWFscyhuYW1lKSB7CiAgICAgIHJldHVybiBuYW1lLnNwbGl0KCIgIikubWFwKChwYXJ0KSA9PiBwYXJ0WzBdKS5qb2luKCIiKS50b1VwcGVyQ2FzZSgpLnNsaWNlKDAsIDIpOwogICAgfQogICAgYXN5bmMgaGFuZGxlTWVudUNsaWNrKGl0ZW0pIHsKICAgICAgYXdhaXQgaXRlbS5hY3Rpb24oKTsKICAgICAgdGhpcy5jbG9zZSgpOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtZW51LXNlbGVjdCIsIHsKICAgICAgICBkZXRhaWw6IHsgaXRlbSB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgb3BlbigpIHsKICAgICAgdGhpcy5pc09wZW4gPSB0cnVlOwogICAgfQogICAgY2xvc2UoKSB7CiAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7CiAgICB9CiAgICB0b2dnbGUoKSB7CiAgICAgIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuOwogICAgfQogICAgLy8gSGFuZGxlIGNsaWNrcyBvdXRzaWRlIHRoZSBkcm9wZG93bgogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuaGFuZGxlT3V0c2lkZUNsaWNrID0gdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2suYmluZCh0aGlzKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZU91dHNpZGVDbGljayk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZU91dHNpZGVDbGljayk7CiAgICB9CiAgICBoYW5kbGVPdXRzaWRlQ2xpY2soZXZlbnQpIHsKICAgICAgaWYgKHRoaXMuaXNPcGVuICYmICF0aGlzLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHsKICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGhpcy5wYXJlbnRFbGVtZW50OwogICAgICAgIGlmIChwYXJlbnRFbGVtZW50ICYmIHBhcmVudEVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLmNsb3NlKCk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczEwKHRoaXMsIF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczEwKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQXBwdWlQcm9maWxlRHJvcGRvd24yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWFwcGJhci9jb21wb25lbnQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF9kZWVzX2ljb24oKTsKdmFyIF9fZXNEZWNvcmF0ZTEwID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMxMSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0FwcHVpQmFyID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hcHB1aS1hcHBiYXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9tZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX21lbnVJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYnJlYWRjcnVtYnNfZGVjb3JhdG9yczsKICBsZXQgX2JyZWFkY3J1bWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYnJlYWRjcnVtYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JyZWFkY3J1bWJTZXBhcmF0b3JfZGVjb3JhdG9yczsKICBsZXQgX2JyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9icmVhZGNydW1iU2VwYXJhdG9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93V2luZG93Q29udHJvbHNfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dXaW5kb3dDb250cm9sc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dXaW5kb3dDb250cm9sc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdXNlcl9kZWNvcmF0b3JzOwogIGxldCBfdXNlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3VzZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Byb2ZpbGVNZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX3Byb2ZpbGVNZW51SXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wcm9maWxlTWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93U2VhcmNoX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93U2VhcmNoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93QWN0aXZpdHlMb2dUb2dnbGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93QWN0aXZpdHlMb2dUb2dnbGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2aXR5TG9nQ291bnRfZGVjb3JhdG9yczsKICBsZXQgX2FjdGl2aXR5TG9nQ291bnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpdml0eUxvZ0NvdW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpdml0eUxvZ0FjdGl2ZV9kZWNvcmF0b3JzOwogIGxldCBfYWN0aXZpdHlMb2dBY3RpdmVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpdml0eUxvZ0FjdGl2ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZlTWVudV9kZWNvcmF0b3JzOwogIGxldCBfYWN0aXZlTWVudV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2ZU1lbnVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wZW5Ecm9wZG93bnNfZGVjb3JhdG9yczsKICBsZXQgX29wZW5Ecm9wZG93bnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcGVuRHJvcGRvd25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9mb2N1c2VkSXRlbV9kZWNvcmF0b3JzOwogIGxldCBfZm9jdXNlZEl0ZW1faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9mb2N1c2VkSXRlbV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZm9jdXNlZERyb3Bkb3duSXRlbV9kZWNvcmF0b3JzOwogIGxldCBfZm9jdXNlZERyb3Bkb3duSXRlbV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZvY3VzZWREcm9wZG93bkl0ZW1fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzUHJvZmlsZURyb3Bkb3duT3Blbl9kZWNvcmF0b3JzOwogIGxldCBfaXNQcm9maWxlRHJvcGRvd25PcGVuX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNQcm9maWxlRHJvcGRvd25PcGVuX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNBcHB1aUJhcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9tZW51SXRlbXNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX2JyZWFkY3J1bWJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfYnJlYWRjcnVtYlNlcGFyYXRvcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3Nob3dXaW5kb3dDb250cm9sc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF91c2VyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfcHJvZmlsZU1lbnVJdGVtc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfc2hvd1NlYXJjaF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9zaG93QWN0aXZpdHlMb2dUb2dnbGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfYWN0aXZpdHlMb2dDb3VudF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2FjdGl2aXR5TG9nQWN0aXZlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2FjdGl2ZU1lbnVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX29wZW5Ecm9wZG93bnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2ZvY3VzZWRJdGVtX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9mb2N1c2VkRHJvcGRvd25JdGVtX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc1Byb2ZpbGVEcm9wZG93bk9wZW5fZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX21lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVJdGVtcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVJdGVtcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX2JyZWFkY3J1bWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJyZWFkY3J1bWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJicmVhZGNydW1icyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5icmVhZGNydW1icywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYnJlYWRjcnVtYnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYnJlYWRjcnVtYnNfaW5pdGlhbGl6ZXJzLCBfYnJlYWRjcnVtYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfYnJlYWRjcnVtYlNlcGFyYXRvcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJicmVhZGNydW1iU2VwYXJhdG9yIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJicmVhZGNydW1iU2VwYXJhdG9yIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJyZWFkY3J1bWJTZXBhcmF0b3IsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJyZWFkY3J1bWJTZXBhcmF0b3IgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYnJlYWRjcnVtYlNlcGFyYXRvcl9pbml0aWFsaXplcnMsIF9icmVhZGNydW1iU2VwYXJhdG9yX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX3Nob3dXaW5kb3dDb250cm9sc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93V2luZG93Q29udHJvbHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dXaW5kb3dDb250cm9scyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93V2luZG93Q29udHJvbHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dXaW5kb3dDb250cm9scyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93V2luZG93Q29udHJvbHNfaW5pdGlhbGl6ZXJzLCBfc2hvd1dpbmRvd0NvbnRyb2xzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX3VzZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidXNlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidXNlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai51c2VyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai51c2VyID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3VzZXJfaW5pdGlhbGl6ZXJzLCBfdXNlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9wcm9maWxlTWVudUl0ZW1zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInByb2ZpbGVNZW51SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInByb2ZpbGVNZW51SXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucHJvZmlsZU1lbnVJdGVtcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucHJvZmlsZU1lbnVJdGVtcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wcm9maWxlTWVudUl0ZW1zX2luaXRpYWxpemVycywgX3Byb2ZpbGVNZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfc2hvd1NlYXJjaF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93U2VhcmNoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93U2VhcmNoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dTZWFyY2gsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dTZWFyY2ggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1NlYXJjaF9pbml0aWFsaXplcnMsIF9zaG93U2VhcmNoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93QWN0aXZpdHlMb2dUb2dnbGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dBY3Rpdml0eUxvZ1RvZ2dsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93QWN0aXZpdHlMb2dUb2dnbGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dBY3Rpdml0eUxvZ1RvZ2dsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93QWN0aXZpdHlMb2dUb2dnbGVfaW5pdGlhbGl6ZXJzLCBfc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX2FjdGl2aXR5TG9nQ291bnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZpdHlMb2dDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZpdHlMb2dDb3VudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3Rpdml0eUxvZ0NvdW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hY3Rpdml0eUxvZ0NvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2aXR5TG9nQ291bnRfaW5pdGlhbGl6ZXJzLCBfYWN0aXZpdHlMb2dDb3VudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9hY3Rpdml0eUxvZ0FjdGl2ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3Rpdml0eUxvZ0FjdGl2ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZpdHlMb2dBY3RpdmUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZpdHlMb2dBY3RpdmUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2aXR5TG9nQWN0aXZlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2aXR5TG9nQWN0aXZlX2luaXRpYWxpemVycywgX2FjdGl2aXR5TG9nQWN0aXZlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX2FjdGl2ZU1lbnVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZlTWVudSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZlTWVudSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3RpdmVNZW51LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hY3RpdmVNZW51ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2ZU1lbnVfaW5pdGlhbGl6ZXJzLCBfYWN0aXZlTWVudV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9vcGVuRHJvcGRvd25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wZW5Ecm9wZG93bnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wZW5Ecm9wZG93bnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3BlbkRyb3Bkb3ducywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3BlbkRyb3Bkb3ducyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcGVuRHJvcGRvd25zX2luaXRpYWxpemVycywgX29wZW5Ecm9wZG93bnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfZm9jdXNlZEl0ZW1fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZm9jdXNlZEl0ZW0iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZvY3VzZWRJdGVtIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZvY3VzZWRJdGVtLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5mb2N1c2VkSXRlbSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9mb2N1c2VkSXRlbV9pbml0aWFsaXplcnMsIF9mb2N1c2VkSXRlbV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9mb2N1c2VkRHJvcGRvd25JdGVtX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImZvY3VzZWREcm9wZG93bkl0ZW0iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZvY3VzZWREcm9wZG93bkl0ZW0iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZm9jdXNlZERyb3Bkb3duSXRlbSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZm9jdXNlZERyb3Bkb3duSXRlbSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9mb2N1c2VkRHJvcGRvd25JdGVtX2luaXRpYWxpemVycywgX2ZvY3VzZWREcm9wZG93bkl0ZW1fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfaXNQcm9maWxlRHJvcGRvd25PcGVuX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzUHJvZmlsZURyb3Bkb3duT3BlbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNQcm9maWxlRHJvcGRvd25PcGVuIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzUHJvZmlsZURyb3Bkb3duT3Blbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNQcm9maWxlRHJvcGRvd25PcGVuID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzUHJvZmlsZURyb3Bkb3duT3Blbl9pbml0aWFsaXplcnMsIF9pc1Byb2ZpbGVEcm9wZG93bk9wZW5fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNBcHB1aUJhcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkFwcCBVSSI7CiAgICAjbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyBJTlNUQU5DRSBQUk9QRVJUSUVTCiAgICBnZXQgbWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gdGhpcy4jbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWVudUl0ZW1zKHZhbHVlMikgewogICAgICB0aGlzLiNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNicmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2JyZWFkY3J1bWJzX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBicmVhZGNydW1icygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2JyZWFkY3J1bWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYnJlYWRjcnVtYnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2JyZWFkY3J1bWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYnJlYWRjcnVtYlNlcGFyYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2JyZWFkY3J1bWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfYnJlYWRjcnVtYlNlcGFyYXRvcl9pbml0aWFsaXplcnMsICIgPiAiKSk7CiAgICBnZXQgYnJlYWRjcnVtYlNlcGFyYXRvcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2JyZWFkY3J1bWJTZXBhcmF0b3JfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBicmVhZGNydW1iU2VwYXJhdG9yKHZhbHVlMikgewogICAgICB0aGlzLiNicmVhZGNydW1iU2VwYXJhdG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hvd1dpbmRvd0NvbnRyb2xzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfYnJlYWRjcnVtYlNlcGFyYXRvcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX3Nob3dXaW5kb3dDb250cm9sc19pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzaG93V2luZG93Q29udHJvbHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93V2luZG93Q29udHJvbHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93V2luZG93Q29udHJvbHModmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dXaW5kb3dDb250cm9sc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3VzZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9zaG93V2luZG93Q29udHJvbHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF91c2VyX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgdXNlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3VzZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB1c2VyKHZhbHVlMikgewogICAgICB0aGlzLiN1c2VyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcHJvZmlsZU1lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX3VzZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9wcm9maWxlTWVudUl0ZW1zX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBwcm9maWxlTWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gdGhpcy4jcHJvZmlsZU1lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHByb2ZpbGVNZW51SXRlbXModmFsdWUyKSB7CiAgICAgIHRoaXMuI3Byb2ZpbGVNZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93U2VhcmNoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfcHJvZmlsZU1lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX3Nob3dTZWFyY2hfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHNob3dTZWFyY2goKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93U2VhcmNoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1NlYXJjaCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX3Nob3dTZWFyY2hfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9zaG93QWN0aXZpdHlMb2dUb2dnbGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgLy8gQWN0aXZpdHkgbG9nIHRvZ2dsZQogICAgZ2V0IHNob3dBY3Rpdml0eUxvZ1RvZ2dsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dBY3Rpdml0eUxvZ1RvZ2dsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYWN0aXZpdHlMb2dDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2FjdGl2aXR5TG9nQ291bnRfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgYWN0aXZpdHlMb2dDb3VudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FjdGl2aXR5TG9nQ291bnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3Rpdml0eUxvZ0NvdW50KHZhbHVlMikgewogICAgICB0aGlzLiNhY3Rpdml0eUxvZ0NvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYWN0aXZpdHlMb2dBY3RpdmVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9hY3Rpdml0eUxvZ0NvdW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfYWN0aXZpdHlMb2dBY3RpdmVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGFjdGl2aXR5TG9nQWN0aXZlKCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZpdHlMb2dBY3RpdmVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3Rpdml0eUxvZ0FjdGl2ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWN0aXZpdHlMb2dBY3RpdmVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhY3RpdmVNZW51X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfYWN0aXZpdHlMb2dBY3RpdmVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9hY3RpdmVNZW51X2luaXRpYWxpemVycywgbnVsbCkpOwogICAgLy8gU1RBVEUKICAgIGdldCBhY3RpdmVNZW51KCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZlTWVudV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjdGl2ZU1lbnUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2ZU1lbnVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNvcGVuRHJvcGRvd25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfYWN0aXZlTWVudV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX29wZW5Ecm9wZG93bnNfaW5pdGlhbGl6ZXJzLCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSk7CiAgICBnZXQgb3BlbkRyb3Bkb3ducygpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wZW5Ecm9wZG93bnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcGVuRHJvcGRvd25zKHZhbHVlMikgewogICAgICB0aGlzLiNvcGVuRHJvcGRvd25zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZm9jdXNlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9vcGVuRHJvcGRvd25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfZm9jdXNlZEl0ZW1faW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgZm9jdXNlZEl0ZW0oKSB7CiAgICAgIHJldHVybiB0aGlzLiNmb2N1c2VkSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZvY3VzZWRJdGVtKHZhbHVlMikgewogICAgICB0aGlzLiNmb2N1c2VkSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2ZvY3VzZWREcm9wZG93bkl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9mb2N1c2VkSXRlbV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2ZvY3VzZWREcm9wZG93bkl0ZW1faW5pdGlhbGl6ZXJzLCAtMSkpOwogICAgZ2V0IGZvY3VzZWREcm9wZG93bkl0ZW0oKSB7CiAgICAgIHJldHVybiB0aGlzLiNmb2N1c2VkRHJvcGRvd25JdGVtX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZm9jdXNlZERyb3Bkb3duSXRlbSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZm9jdXNlZERyb3Bkb3duSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzUHJvZmlsZURyb3Bkb3duT3Blbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2ZvY3VzZWREcm9wZG93bkl0ZW1fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9pc1Byb2ZpbGVEcm9wZG93bk9wZW5faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzUHJvZmlsZURyb3Bkb3duT3BlbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzUHJvZmlsZURyb3Bkb3duT3Blbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzUHJvZmlsZURyb3Bkb3duT3Blbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNQcm9maWxlRHJvcGRvd25PcGVuX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gYXBwdWlBcHBiYXJTdHlsZXM7CiAgICAvLyBJTlNUQU5DRQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gcmVuZGVyQXBwdWlBcHBiYXIodGhpcyk7CiAgICB9CiAgICByZW5kZXJNZW51SXRlbXMoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgJHt0aGlzLm1lbnVJdGVtcy5tYXAoKGl0ZW0sIGluZGV4MikgPT4gdGhpcy5yZW5kZXJNZW51SXRlbShpdGVtLCBgbWVudS0ke2luZGV4Mn1gKSl9CiAgICBgOwogICAgfQogICAgcmVuZGVyTWVudUl0ZW0oaXRlbSwgaXRlbUlkKSB7CiAgICAgIGlmICgiZGl2aWRlciIgaW4gaXRlbSAmJiBpdGVtLmRpdmlkZXIpIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0iZHJvcGRvd24tZGl2aWRlciI+PC9kaXY+YDsKICAgICAgfQogICAgICBjb25zdCBtZW51SXRlbSA9IGl0ZW07CiAgICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5hY3RpdmVNZW51ID09PSBpdGVtSWQ7CiAgICAgIGNvbnN0IGhhc1N1Ym1lbnUgPSBtZW51SXRlbS5zdWJtZW51ICYmIG1lbnVJdGVtLnN1Ym1lbnUubGVuZ3RoID4gMDsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9Im1lbnVJdGVtICR7aXNBY3RpdmUgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICA/ZGlzYWJsZWQ9JHttZW51SXRlbS5kaXNhYmxlZH0KICAgICAgICB0YWJpbmRleD0iJHttZW51SXRlbS5kaXNhYmxlZCA/IC0xIDogMH0iCiAgICAgICAgZGF0YS1pdGVtLWlkPSIke2l0ZW1JZH0iCiAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVNZW51Q2xpY2sobWVudUl0ZW0sIGl0ZW1JZCl9CiAgICAgICAgQGtleWRvd249JHsoZTExKSA9PiB0aGlzLmhhbmRsZU1lbnVLZXlkb3duKGUxMSwgbWVudUl0ZW0sIGl0ZW1JZCl9CiAgICAgICAgcm9sZT0ibWVudWl0ZW0iCiAgICAgICAgYXJpYS1oYXNwb3B1cD0iJHtoYXNTdWJtZW51fSIKICAgICAgICBhcmlhLWV4cGFuZGVkPSIke2lzQWN0aXZlfSIKICAgICAgPgogICAgICAgICR7bWVudUl0ZW0uaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uPSIke2BsdWNpZGU6JHttZW51SXRlbS5pY29uTmFtZX1gfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgICR7bWVudUl0ZW0ubmFtZX0KICAgICAgICAke2hhc1N1Ym1lbnUgPyB0aGlzLnJlbmRlckRyb3Bkb3duKG1lbnVJdGVtLnN1Ym1lbnUsIGl0ZW1JZCwgaXNBY3RpdmUpIDogIiJ9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckRyb3Bkb3duKGl0ZW1zLCBwYXJlbnRJZCwgaXNPcGVuKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiAKICAgICAgICBjbGFzcz0iZHJvcGRvd24gJHtpc09wZW4gPyAib3BlbiIgOiAiIn0iIAogICAgICAgIEBjbGljaz0keyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0KICAgICAgICBAa2V5ZG93bj0keyhlMTEpID0+IHRoaXMuaGFuZGxlRHJvcGRvd25LZXlkb3duKGUxMSwgaXRlbXMsIHBhcmVudElkKX0KICAgICAgICB0YWJpbmRleD0iJHtpc09wZW4gPyAwIDogLTF9IgogICAgICAgIHJvbGU9Im1lbnUiCiAgICAgID4KICAgICAgICAke2l0ZW1zLm1hcCgoaXRlbSwgaW5kZXgyKSA9PiB0aGlzLnJlbmRlckRyb3Bkb3duSXRlbShpdGVtLCBgJHtwYXJlbnRJZH0tJHtpbmRleDJ9YCkpfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJEcm9wZG93bkl0ZW0oaXRlbSwgaXRlbUlkKSB7CiAgICAgIGlmICgiZGl2aWRlciIgaW4gaXRlbSAmJiBpdGVtLmRpdmlkZXIpIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0iZHJvcGRvd24tZGl2aWRlciI+PC9kaXY+YDsKICAgICAgfQogICAgICBjb25zdCBtZW51SXRlbSA9IGl0ZW07CiAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHBhcnNlSW50KGl0ZW1JZC5zcGxpdCgiLSIpLnBvcCgpIHx8ICIwIik7CiAgICAgIGNvbnN0IGlzRm9jdXNlZCA9IHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9PT0gaXRlbUluZGV4OwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iZHJvcGRvd24taXRlbSAke2lzRm9jdXNlZCA/ICJmb2N1c2VkIiA6ICIifSIKICAgICAgICA/ZGlzYWJsZWQ9JHttZW51SXRlbS5kaXNhYmxlZH0KICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmhhbmRsZURyb3Bkb3duSXRlbUNsaWNrKG1lbnVJdGVtKX0KICAgICAgICBAbW91c2VlbnRlcj0keygpID0+IHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IGl0ZW1JbmRleH0KICAgICAgICByb2xlPSJtZW51aXRlbSIKICAgICAgICB0YWJpbmRleD0iJHttZW51SXRlbS5kaXNhYmxlZCA/IC0xIDogMH0iCiAgICAgID4KICAgICAgICAke21lbnVJdGVtLmljb25OYW1lID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0iJHtgbHVjaWRlOiR7bWVudUl0ZW0uaWNvbk5hbWV9YH0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICA8c3Bhbj4ke21lbnVJdGVtLm5hbWV9PC9zcGFuPgogICAgICAgICR7bWVudUl0ZW0uc2hvcnRjdXQgPyBiMmA8c3BhbiBjbGFzcz0ic2hvcnRjdXQiPiR7bWVudUl0ZW0uc2hvcnRjdXR9PC9zcGFuPmAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyQnJlYWRjcnVtYnMoKSB7CiAgICAgIGlmICghdGhpcy5icmVhZGNydW1icykgewogICAgICAgIHJldHVybiBiMmBgOwogICAgICB9CiAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5icmVhZGNydW1icy5zcGxpdCh0aGlzLmJyZWFkY3J1bWJTZXBhcmF0b3IpOwogICAgICByZXR1cm4gYjJgCiAgICAgICR7cGFydHMubWFwKChwYXJ0LCBpbmRleDIpID0+IGIyYAogICAgICAgICR7aW5kZXgyID4gMCA/IGIyYDxzcGFuIGNsYXNzPSJicmVhZGNydW1iLXNlcGFyYXRvciI+JHt0aGlzLmJyZWFkY3J1bWJTZXBhcmF0b3J9PC9zcGFuPmAgOiAiIn0KICAgICAgICA8c3BhbiAKICAgICAgICAgIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0iIAogICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVCcmVhZGNydW1iQ2xpY2socGFydCwgaW5kZXgyKX0KICAgICAgICA+CiAgICAgICAgICAke3BhcnR9CiAgICAgICAgPC9zcGFuPgogICAgICBgKX0KICAgIGA7CiAgICB9CiAgICByZW5kZXJBY2NvdW50U2VjdGlvbigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke3RoaXMuc2hvd1NlYXJjaCA/IGIyYAogICAgICAgIDxkZWVzLWljb24KICAgICAgICAgIGNsYXNzPSJzZWFyY2gtaWNvbiIKICAgICAgICAgIC5pY29uPSR7Imx1Y2lkZTpzZWFyY2gifQogICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVTZWFyY2hDbGlja30KICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgIGAgOiAiIn0KICAgICAgJHt0aGlzLnVzZXIgPyBiMmAKICAgICAgICA8ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItaW5mbyIgQGNsaWNrPSR7dGhpcy5oYW5kbGVVc2VyQ2xpY2t9PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLWF2YXRhciI+CiAgICAgICAgICAgICAgJHt0aGlzLnVzZXIuYXZhdGFyID8gYjJgPGltZyBzcmM9IiR7dGhpcy51c2VyLmF2YXRhcn0iIGFsdD0iJHt0aGlzLnVzZXIubmFtZX0iPmAgOiBiMmAke3RoaXMudXNlci5uYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfWB9CiAgICAgICAgICAgICAgJHt0aGlzLnVzZXIuc3RhdHVzID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLXN0YXR1cyAke3RoaXMudXNlci5zdGF0dXN9Ij48L2Rpdj4KICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8c3Bhbj4ke3RoaXMudXNlci5uYW1lfTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRlZXMtYXBwdWktcHJvZmlsZWRyb3Bkb3duCiAgICAgICAgICAgIC51c2VyPSR7dGhpcy51c2VyfQogICAgICAgICAgICAubWVudUl0ZW1zPSR7dGhpcy5wcm9maWxlTWVudUl0ZW1zfQogICAgICAgICAgICAuaXNPcGVuPSR7dGhpcy5pc1Byb2ZpbGVEcm9wZG93bk9wZW59CiAgICAgICAgICAgIC5wb3NpdGlvbj0keyJ0b3AtcmlnaHQifQogICAgICAgICAgICBAbWVudS1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZVByb2ZpbGVNZW51U2VsZWN0KGUxMSl9CiAgICAgICAgICA+PC9kZWVzLWFwcHVpLXByb2ZpbGVkcm9wZG93bj4KICAgICAgICA8L2Rpdj4KICAgICAgYCA6ICIifQogICAgICAke3RoaXMuc2hvd0FjdGl2aXR5TG9nVG9nZ2xlID8gYjJgCiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9ImFjdGl2aXR5LXRvZ2dsZSAke3RoaXMuYWN0aXZpdHlMb2dBY3RpdmUgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlQWN0aXZpdHlUb2dnbGV9CiAgICAgICAgICB0aXRsZT0iQWN0aXZpdHkgTG9nIgogICAgICAgID4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmFjdGl2aXR5In0+PC9kZWVzLWljb24+CiAgICAgICAgICAke3RoaXMuYWN0aXZpdHlMb2dDb3VudCA+IDAgPyBiMmAKICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImFjdGl2aXR5LWJhZGdlIj4ke3RoaXMuYWN0aXZpdHlMb2dDb3VudCA+IDk5ID8gIjk5KyIgOiB0aGlzLmFjdGl2aXR5TG9nQ291bnR9PC9zcGFuPgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICBgIDogIiJ9CiAgICBgOwogICAgfQogICAgLy8gRXZlbnQgaGFuZGxlcnMKICAgIGhhbmRsZU1lbnVDbGljayhpdGVtLCBpdGVtSWQpIHsKICAgICAgaWYgKGl0ZW0uZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoaXRlbS5zdWJtZW51ICYmIGl0ZW0uc3VibWVudS5sZW5ndGggPiAwKSB7CiAgICAgICAgaWYgKHRoaXMuYWN0aXZlTWVudSA9PT0gaXRlbUlkKSB7CiAgICAgICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBpdGVtSWQ7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuYWN0aXZlTWVudSA9IG51bGw7CiAgICAgICAgaWYgKGl0ZW0uYWN0aW9uKSB7CiAgICAgICAgICBpdGVtLmFjdGlvbigpOwogICAgICAgIH0KICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtZW51LXNlbGVjdCIsIHsKICAgICAgICAgIGRldGFpbDogeyBpdGVtIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZURyb3Bkb3duSXRlbUNsaWNrKGl0ZW0pIHsKICAgICAgaWYgKGl0ZW0uZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBudWxsOwogICAgICBpZiAoaXRlbS5hY3Rpb24pIHsKICAgICAgICBpdGVtLmFjdGlvbigpOwogICAgICB9CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm1lbnUtc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogeyBpdGVtIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVNZW51S2V5ZG93bihlMTEsIGl0ZW0sIGl0ZW1JZCkgewogICAgICBzd2l0Y2ggKGUxMS5rZXkpIHsKICAgICAgICBjYXNlICJFbnRlciI6CiAgICAgICAgY2FzZSAiICI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuaGFuZGxlTWVudUNsaWNrKGl0ZW0sIGl0ZW1JZCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJBcnJvd0Rvd24iOgogICAgICAgICAgaWYgKGl0ZW0uc3VibWVudSAmJiB0aGlzLmFjdGl2ZU1lbnUgPT09IGl0ZW1JZCkgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID0gMDsKICAgICAgICAgICAgY29uc3QgZmlyc3RWYWxpZEl0ZW0gPSB0aGlzLmZpbmROZXh0VmFsaWRJdGVtKGl0ZW0uc3VibWVudSwgLTEsIDEpOwogICAgICAgICAgICBpZiAoZmlyc3RWYWxpZEl0ZW0gIT09IC0xKSB7CiAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID0gZmlyc3RWYWxpZEl0ZW07CiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBkcm9wZG93biA9IHRoaXMucmVuZGVyUm9vdC5xdWVyeVNlbGVjdG9yKCIuZHJvcGRvd24ub3BlbiIpOwogICAgICAgICAgICAgICAgaWYgKGRyb3Bkb3duKSB7CiAgICAgICAgICAgICAgICAgIGRyb3Bkb3duLmZvY3VzKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwgMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkVzY2FwZSI6CiAgICAgICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBudWxsOwogICAgICAgICAgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID0gLTE7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJUYWIiOgogICAgICAgICAgaWYgKHRoaXMuYWN0aXZlTWVudSA9PT0gaXRlbUlkKSB7CiAgICAgICAgICAgIHRoaXMuYWN0aXZlTWVudSA9IG51bGw7CiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IC0xOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQXJyb3dSaWdodCI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuZm9jdXNOZXh0TWVudUl0ZW0oaXRlbUlkLCAxKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkFycm93TGVmdCI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuZm9jdXNOZXh0TWVudUl0ZW0oaXRlbUlkLCAtMSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaGFuZGxlQnJlYWRjcnVtYkNsaWNrKGJyZWFkY3J1bWIsIGluZGV4MikgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJicmVhZGNydW1iLW5hdmlnYXRlIiwgewogICAgICAgIGRldGFpbDogeyBicmVhZGNydW1iLCBpbmRleDogaW5kZXgyIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVTZWFyY2hDbGljaygpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VhcmNoLWNsaWNrIiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlQWN0aXZpdHlUb2dnbGUoKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImFjdGl2aXR5LXRvZ2dsZSIsIHsKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZVVzZXJDbGljaygpIHsKICAgICAgdGhpcy5pc1Byb2ZpbGVEcm9wZG93bk9wZW4gPSAhdGhpcy5pc1Byb2ZpbGVEcm9wZG93bk9wZW47CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInVzZXItbWVudS1vcGVuIiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlUHJvZmlsZU1lbnVTZWxlY3QoZTExKSB7CiAgICAgIHRoaXMuaXNQcm9maWxlRHJvcGRvd25PcGVuID0gZmFsc2U7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInByb2ZpbGUtbWVudS1zZWxlY3QiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgLy8gTGlmZWN5Y2xlCiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuaGFuZGxlR2xvYmFsQ2xpY2spOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuaGFuZGxlRG9jdW1lbnRDbGljayk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZURvY3VtZW50Q2xpY2spOwogICAgfQogICAgaGFuZGxlR2xvYmFsQ2xpY2sgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfaXNQcm9maWxlRHJvcGRvd25PcGVuX2V4dHJhSW5pdGlhbGl6ZXJzKSwgKGUxMSkgPT4gewogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICB9KTsKICAgIGhhbmRsZURvY3VtZW50Q2xpY2sgPSAoKSA9PiB7CiAgICAgIHRoaXMuYWN0aXZlTWVudSA9IG51bGw7CiAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IC0xOwogICAgfTsKICAgIGhhbmRsZURyb3Bkb3duS2V5ZG93bihlMTEsIGl0ZW1zLCBfcGFyZW50SWQpIHsKICAgICAgY29uc3QgdmFsaWRJdGVtcyA9IGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gISgiZGl2aWRlciIgaW4gaXRlbSAmJiBpdGVtLmRpdmlkZXIpKTsKICAgICAgc3dpdGNoIChlMTEua2V5KSB7CiAgICAgICAgY2FzZSAiQXJyb3dEb3duIjoKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gdGhpcy5maW5kTmV4dFZhbGlkSXRlbShpdGVtcywgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtLCAxKTsKICAgICAgICAgIGlmIChuZXh0SW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IG5leHRJbmRleDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkFycm93VXAiOgogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBjb25zdCBwcmV2SW5kZXggPSB0aGlzLmZpbmROZXh0VmFsaWRJdGVtKGl0ZW1zLCB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0sIC0xKTsKICAgICAgICAgIGlmIChwcmV2SW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IHByZXZJbmRleDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkVudGVyIjoKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgaWYgKHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSAhPT0gLTEpIHsKICAgICAgICAgICAgY29uc3QgZm9jdXNlZEl0ZW0gPSB2YWxpZEl0ZW1zW3RoaXMuZm9jdXNlZERyb3Bkb3duSXRlbV07CiAgICAgICAgICAgIGlmIChmb2N1c2VkSXRlbSAmJiAiYWN0aW9uIiBpbiBmb2N1c2VkSXRlbSAmJiAhZm9jdXNlZEl0ZW0uZGlzYWJsZWQpIHsKICAgICAgICAgICAgICB0aGlzLmhhbmRsZURyb3Bkb3duSXRlbUNsaWNrKGZvY3VzZWRJdGVtKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiSG9tZSI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGNvbnN0IGZpcnN0SW5kZXggPSB0aGlzLmZpbmROZXh0VmFsaWRJdGVtKGl0ZW1zLCAtMSwgMSk7CiAgICAgICAgICBpZiAoZmlyc3RJbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID0gZmlyc3RJbmRleDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkVuZCI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuZmluZE5leHRWYWxpZEl0ZW0oaXRlbXMsIGl0ZW1zLmxlbmd0aCwgLTEpOwogICAgICAgICAgaWYgKGxhc3RJbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtID0gbGFzdEluZGV4OwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiRXNjYXBlIjoKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5hY3RpdmVNZW51ID0gbnVsbDsKICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IC0xOwogICAgICAgICAgY29uc3QgbWVudUl0ZW0gPSB0aGlzLnJlbmRlclJvb3QucXVlcnlTZWxlY3RvcihgLm1lbnVJdGVtLmFjdGl2ZWApOwogICAgICAgICAgaWYgKG1lbnVJdGVtKSB7CiAgICAgICAgICAgIG1lbnVJdGVtLmZvY3VzKCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgZmluZE5leHRWYWxpZEl0ZW0oaXRlbXMsIGN1cnJlbnRJbmRleCwgZGlyZWN0aW9uKSB7CiAgICAgIGxldCBpbmRleDIgPSBjdXJyZW50SW5kZXggKyBkaXJlY3Rpb247CiAgICAgIHdoaWxlIChpbmRleDIgPj0gMCAmJiBpbmRleDIgPCBpdGVtcy5sZW5ndGgpIHsKICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaW5kZXgyXTsKICAgICAgICBpZiAoISgiZGl2aWRlciIgaW4gaXRlbSAmJiBpdGVtLmRpdmlkZXIpICYmICEoImRpc2FibGVkIiBpbiBpdGVtICYmIGl0ZW0uZGlzYWJsZWQpKSB7CiAgICAgICAgICByZXR1cm4gaW5kZXgyOwogICAgICAgIH0KICAgICAgICBpbmRleDIgKz0gZGlyZWN0aW9uOwogICAgICB9CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGZvY3VzTmV4dE1lbnVJdGVtKGN1cnJlbnRJdGVtSWQsIGRpcmVjdGlvbikgewogICAgICBjb25zdCBtZW51SXRlbXMgPSBBcnJheS5mcm9tKHRoaXMucmVuZGVyUm9vdC5xdWVyeVNlbGVjdG9yQWxsKCIubWVudUl0ZW0iKSk7CiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IG1lbnVJdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uZ2V0QXR0cmlidXRlKCJkYXRhLWl0ZW0taWQiKSA9PT0gY3VycmVudEl0ZW1JZCk7CiAgICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xKQogICAgICAgIHJldHVybjsKICAgICAgbGV0IG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCArIGRpcmVjdGlvbjsKICAgICAgaWYgKG5leHRJbmRleCA8IDApIHsKICAgICAgICBuZXh0SW5kZXggPSBtZW51SXRlbXMubGVuZ3RoIC0gMTsKICAgICAgfSBlbHNlIGlmIChuZXh0SW5kZXggPj0gbWVudUl0ZW1zLmxlbmd0aCkgewogICAgICAgIG5leHRJbmRleCA9IDA7CiAgICAgIH0KICAgICAgbGV0IGF0dGVtcHRzID0gMDsKICAgICAgd2hpbGUgKGF0dGVtcHRzIDwgbWVudUl0ZW1zLmxlbmd0aCkgewogICAgICAgIGNvbnN0IG5leHRJdGVtID0gbWVudUl0ZW1zW25leHRJbmRleF07CiAgICAgICAgaWYgKCFuZXh0SXRlbS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpIHsKICAgICAgICAgIG5leHRJdGVtLmZvY3VzKCk7CiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVNZW51KSB7CiAgICAgICAgICAgIHRoaXMuYWN0aXZlTWVudSA9IG51bGw7CiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IC0xOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIG5leHRJbmRleCA9IChuZXh0SW5kZXggKyBkaXJlY3Rpb24gKyBtZW51SXRlbXMubGVuZ3RoKSAlIG1lbnVJdGVtcy5sZW5ndGg7CiAgICAgICAgYXR0ZW1wdHMrKzsKICAgICAgfQogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxMShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0FwcHVpQmFyMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1ib3R0b21iYXIvZGVlcy1hcHB1aS1ib3R0b21iYXIuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgX2E7CnZhciBkZW1vRnVuYzUgPSAoKSA9PiB7CiAgcmV0dXJuIGIyKF9hIHx8IChfYSA9IF9fdGVtcGxhdGUoW2AKICAgIDxkZWVzLWRlbW93cmFwcGVyPgogICAgICA8c3R5bGU+CiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICMxYTFhMWE7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1sYWJlbCB7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBjb2xvcjogIzczNzM3MzsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1ib3R0b21iYXItd3JhcHBlciB7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBoc2woMCAwJSAyMCUpOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1sYWJlbCI+Qm90dG9tIGJhciB3aXRoIHN0YXR1cyB3aWRnZXRzIGFuZCBhY3Rpb25zPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLWJvdHRvbWJhci13cmFwcGVyIj4KICAgICAgICAgICAgPGRlZXMtYXBwdWktYm90dG9tYmFyCiAgICAgICAgICAgICAgaWQ9ImRlbW8tYm90dG9tYmFyIgogICAgICAgICAgICA+PC9kZWVzLWFwcHVpLWJvdHRvbWJhcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1sYWJlbCI+Q29udHJvbHM8L2Rpdj4KICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBmbGV4LXdyYXA6IHdyYXA7Ij4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJhZGRTdWNjZXNzV2lkZ2V0KCkiPkFkZCBTdWNjZXNzIFdpZGdldDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImFkZFdhcm5pbmdXaWRnZXQoKSI+QWRkIFdhcm5pbmcgV2lkZ2V0PC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iYWRkRXJyb3JXaWRnZXQoKSI+QWRkIEVycm9yIFdpZGdldDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImFkZExvYWRpbmdXaWRnZXQoKSI+QWRkIExvYWRpbmcgV2lkZ2V0PC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iYWRkUmlnaHRXaWRnZXQoKSI+QWRkIFJpZ2h0IFdpZGdldDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImFkZEFjdGlvbigpIj5BZGQgQWN0aW9uPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iY2xlYXJBbGwoKSI+Q2xlYXIgQWxsPC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxzY3JpcHQgdHlwZT0ibW9kdWxlIj4KICAgICAgICBjb25zdCBib3R0b21iYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVtby1ib3R0b21iYXInKTsKCiAgICAgICAgLy8gV2FpdCBmb3IgY29tcG9uZW50IHRvIGluaXRpYWxpemUKICAgICAgICBhd2FpdCBib3R0b21iYXIudXBkYXRlQ29tcGxldGU7CgogICAgICAgIC8vIEFkZCBpbml0aWFsIHdpZGdldHMKICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgIGlkOiAnc3RhdHVzJywKICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmFjdGl2aXR5JywKICAgICAgICAgIGxhYmVsOiAnU3lzdGVtIE9ubGluZScsCiAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJywKICAgICAgICAgIHRvb2x0aXA6ICdBbGwgc3lzdGVtcyBvcGVyYXRpb25hbCcsCiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBjb25zb2xlLmxvZygnU3RhdHVzIGNsaWNrZWQnKSwKICAgICAgICAgIGNvbnRleHRNZW51SXRlbXM6IFsKICAgICAgICAgICAgeyBuYW1lOiAnVmlldyBEZXRhaWxzJywgaWNvbk5hbWU6ICdsdWNpZGU6aW5mbycsIGFjdGlvbjogKCkgPT4gYWxlcnQoJ1N5c3RlbSBkZXRhaWxzJykgfSwKICAgICAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgICAgIHsgbmFtZTogJ1JlZnJlc2ggU3RhdHVzJywgaWNvbk5hbWU6ICdsdWNpZGU6cmVmcmVzaEN3JywgYWN0aW9uOiAoKSA9PiBhbGVydCgnUmVmcmVzaGluZy4uLicpIH0sCiAgICAgICAgICBdLAogICAgICAgIH0pOwoKICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgIGlkOiAnbm90aWZpY2F0aW9ucycsCiAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpiZWxsJywKICAgICAgICAgIGxhYmVsOiAnMyBub3RpZmljYXRpb25zJywKICAgICAgICAgIHN0YXR1czogJ3dhcm5pbmcnLAogICAgICAgICAgdG9vbHRpcDogJ1lvdSBoYXZlIHVucmVhZCBub3RpZmljYXRpb25zJywKICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGNvbnNvbGUubG9nKCdOb3RpZmljYXRpb25zIGNsaWNrZWQnKSwKICAgICAgICB9KTsKCiAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICBpZDogJ3ZlcnNpb24nLAogICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6Z2l0QnJhbmNoJywKICAgICAgICAgIGxhYmVsOiAndjEuMi4zJywKICAgICAgICAgIHRvb2x0aXA6ICdDdXJyZW50IHZlcnNpb24nLAogICAgICAgICAgcG9zaXRpb246ICdyaWdodCcsCiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBjb25zb2xlLmxvZygnVmVyc2lvbiBjbGlja2VkJyksCiAgICAgICAgfSk7CgogICAgICAgIC8vIEFkZCBpbml0aWFsIGFjdGlvbnMKICAgICAgICBib3R0b21iYXIuYWRkQWN0aW9uKHsKICAgICAgICAgIGlkOiAnc2V0dGluZ3MnLAogICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6c2V0dGluZ3MnLAogICAgICAgICAgdG9vbHRpcDogJ1NldHRpbmdzJywKICAgICAgICAgIHBvc2l0aW9uOiAncmlnaHQnLAogICAgICAgICAgb25DbGljazogKCkgPT4gYWxlcnQoJ1NldHRpbmdzIGNsaWNrZWQnKSwKICAgICAgICB9KTsKCiAgICAgICAgYm90dG9tYmFyLmFkZEFjdGlvbih7CiAgICAgICAgICBpZDogJ2hlbHAnLAogICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6aGVscENpcmNsZScsCiAgICAgICAgICB0b29sdGlwOiAnSGVscCcsCiAgICAgICAgICBwb3NpdGlvbjogJ3JpZ2h0JywKICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGFsZXJ0KCdIZWxwIGNsaWNrZWQnKSwKICAgICAgICB9KTsKCiAgICAgICAgLy8gRGVtbyBjb250cm9sIGZ1bmN0aW9ucwogICAgICAgIGxldCB3aWRnZXRDb3VudGVyID0gMDsKICAgICAgICBsZXQgYWN0aW9uQ291bnRlciA9IDA7CgogICAgICAgIHdpbmRvdy5hZGRTdWNjZXNzV2lkZ2V0ID0gKCkgPT4gewogICAgICAgICAgd2lkZ2V0Q291bnRlcisrOwogICAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICAgIGlkOiAnc3VjY2Vzcy0nICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6Y2hlY2tDaXJjbGUnLAogICAgICAgICAgICBsYWJlbDogJ1N1Y2Nlc3MgJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLAogICAgICAgICAgICB0b29sdGlwOiAnU3VjY2VzcyB3aWRnZXQnLAogICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBib3R0b21iYXIucmVtb3ZlV2lkZ2V0KCdzdWNjZXNzLScgKyB3aWRnZXRDb3VudGVyKSwKICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIHdpbmRvdy5hZGRXYXJuaW5nV2lkZ2V0ID0gKCkgPT4gewogICAgICAgICAgd2lkZ2V0Q291bnRlcisrOwogICAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICAgIGlkOiAnd2FybmluZy0nICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6YWxlcnRUcmlhbmdsZScsCiAgICAgICAgICAgIGxhYmVsOiAnV2FybmluZyAnICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgc3RhdHVzOiAnd2FybmluZycsCiAgICAgICAgICAgIHRvb2x0aXA6ICdXYXJuaW5nIHdpZGdldCcsCiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGJvdHRvbWJhci5yZW1vdmVXaWRnZXQoJ3dhcm5pbmctJyArIHdpZGdldENvdW50ZXIpLAogICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgd2luZG93LmFkZEVycm9yV2lkZ2V0ID0gKCkgPT4gewogICAgICAgICAgd2lkZ2V0Q291bnRlcisrOwogICAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICAgIGlkOiAnZXJyb3ItJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOnhDaXJjbGUnLAogICAgICAgICAgICBsYWJlbDogJ0Vycm9yICcgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsCiAgICAgICAgICAgIHRvb2x0aXA6ICdFcnJvciB3aWRnZXQnLAogICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBib3R0b21iYXIucmVtb3ZlV2lkZ2V0KCdlcnJvci0nICsgd2lkZ2V0Q291bnRlciksCiAgICAgICAgICB9KTsKICAgICAgICB9OwoKICAgICAgICB3aW5kb3cuYWRkTG9hZGluZ1dpZGdldCA9ICgpID0+IHsKICAgICAgICAgIHdpZGdldENvdW50ZXIrKzsKICAgICAgICAgIGNvbnN0IGlkID0gJ2xvYWRpbmctJyArIHdpZGdldENvdW50ZXI7CiAgICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgICAgaWQ6IGlkLAogICAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpsb2FkZXIyJywKICAgICAgICAgICAgbGFiZWw6ICdMb2FkaW5nLi4uJywKICAgICAgICAgICAgc3RhdHVzOiAnYWN0aXZlJywKICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSwKICAgICAgICAgICAgdG9vbHRpcDogJ0xvYWRpbmcgaW4gcHJvZ3Jlc3MnLAogICAgICAgICAgfSk7CgogICAgICAgICAgLy8gU2ltdWxhdGUgY29tcGxldGlvbiBhZnRlciAzIHNlY29uZHMKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBib3R0b21iYXIudXBkYXRlV2lkZ2V0KGlkLCB7CiAgICAgICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6Y2hlY2snLAogICAgICAgICAgICAgIGxhYmVsOiAnRG9uZSEnLAogICAgICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLAogICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sIDMwMDApOwogICAgICAgIH07CgogICAgICAgIHdpbmRvdy5hZGRSaWdodFdpZGdldCA9ICgpID0+IHsKICAgICAgICAgIHdpZGdldENvdW50ZXIrKzsKICAgICAgICAgIGJvdHRvbWJhci5hZGRXaWRnZXQoewogICAgICAgICAgICBpZDogJ3JpZ2h0LScgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTppbmZvJywKICAgICAgICAgICAgbGFiZWw6ICdSaWdodCAnICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgcG9zaXRpb246ICdyaWdodCcsCiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGJvdHRvbWJhci5yZW1vdmVXaWRnZXQoJ3JpZ2h0LScgKyB3aWRnZXRDb3VudGVyKSwKICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIHdpbmRvdy5hZGRBY3Rpb24gPSAoKSA9PiB7CiAgICAgICAgICBhY3Rpb25Db3VudGVyKys7CiAgICAgICAgICBib3R0b21iYXIuYWRkQWN0aW9uKHsKICAgICAgICAgICAgaWQ6ICdhY3Rpb24tJyArIGFjdGlvbkNvdW50ZXIsCiAgICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOnphcCcsCiAgICAgICAgICAgIHRvb2x0aXA6ICdBY3Rpb24gJyArIGFjdGlvbkNvdW50ZXIsCiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHsKICAgICAgICAgICAgICBhbGVydCgnQWN0aW9uICcgKyBhY3Rpb25Db3VudGVyICsgJyBjbGlja2VkJyk7CiAgICAgICAgICAgICAgYm90dG9tYmFyLnJlbW92ZUFjdGlvbignYWN0aW9uLScgKyBhY3Rpb25Db3VudGVyKTsKICAgICAgICAgICAgfSwKICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIHdpbmRvdy5jbGVhckFsbCA9ICgpID0+IHsKICAgICAgICAgIGJvdHRvbWJhci5jbGVhcldpZGdldHMoKTsKICAgICAgICAgIGJvdHRvbWJhci5jbGVhckFjdGlvbnMoKTsKICAgICAgICAgIHdpZGdldENvdW50ZXIgPSAwOwogICAgICAgICAgYWN0aW9uQ291bnRlciA9IDA7CiAgICAgICAgfTsKICAgICAgPFwvc2NyaXB0PgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIGBdKSkpOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYm90dG9tYmFyL2RlZXMtYXBwdWktYm90dG9tYmFyLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKaW5pdF9kZWVzX2ljb24oKTsKdmFyIF9fZXNEZWNvcmF0ZTExID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMxMiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0FwcHVpQm90dG9tYmFyID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hcHB1aS1ib3R0b21iYXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF93aWRnZXRzX2RlY29yYXRvcnM7CiAgbGV0IF93aWRnZXRzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfd2lkZ2V0c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aW9uc19kZWNvcmF0b3JzOwogIGxldCBfYWN0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0FwcHVpQm90dG9tYmFyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3dpZGdldHNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2FjdGlvbnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMTEodGhpcywgbnVsbCwgX3dpZGdldHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAid2lkZ2V0cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid2lkZ2V0cyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai53aWRnZXRzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai53aWRnZXRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dpZGdldHNfaW5pdGlhbGl6ZXJzLCBfd2lkZ2V0c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTExKHRoaXMsIG51bGwsIF9hY3Rpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWN0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3Rpb25zX2luaXRpYWxpemVycywgX2FjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNBcHB1aUJvdHRvbWJhcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzU7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkFwcCBVSSI7CiAgICAjd2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMxMih0aGlzLCBfd2lkZ2V0c19pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFIFBST1BFUlRJRVMKICAgIGdldCB3aWRnZXRzKCkgewogICAgICByZXR1cm4gdGhpcy4jd2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHdpZGdldHModmFsdWUyKSB7CiAgICAgIHRoaXMuI3dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhY3Rpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMih0aGlzLCBfd2lkZ2V0c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTIodGhpcywgX2FjdGlvbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IGFjdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhY3Rpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWN0aW9ucyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5ib3R0b20tYmFyIHsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICAgIGdhcDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NCUpIiwgImhzbCgwIDAlIDYlKSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBjb2xvciAwLjE1cyBlYXNlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC53aWRnZXQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQgZGVlcy1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLndpZGdldC1zZXBhcmF0b3IgewogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4MCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgLyogU3RhdHVzIGNvbG9ycyBtYXRjaGluZyBkZWVzLXdvcmtzcGFjZS1ib3R0b21iYXIgKi8KICAgICAgLndpZGdldC5hY3RpdmUgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDQ1JSkiLCAiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQuc3VjY2VzcyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyIDcwJSAzNSUpIiwgImhzbCgxNDIgNzAlIDUwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQud2FybmluZyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMzggOTIlIDQ1JSkiLCAiaHNsKDM4IDkyJSA1NSUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0LmVycm9yIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcwJSA1MCUpIiwgImhzbCgwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICAgIGZyb20geyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfQogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfQogICAgICB9CgogICAgICAuc3Bpbm5pbmcgewogICAgICAgIGFuaW1hdGlvbjogc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIC5zcGFjZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uZGlzYWJsZWQgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5kaXNhYmxlZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IGxlZnRXaWRnZXRzID0gdGhpcy53aWRnZXRzLmZpbHRlcigodzMpID0+IHczLnBvc2l0aW9uICE9PSAicmlnaHQiKS5zb3J0KChhNSwgYjUpID0+IChhNS5vcmRlciB8fCAwKSAtIChiNS5vcmRlciB8fCAwKSk7CiAgICAgIGNvbnN0IHJpZ2h0V2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5maWx0ZXIoKHczKSA9PiB3My5wb3NpdGlvbiA9PT0gInJpZ2h0Iikuc29ydCgoYTUsIGI1KSA9PiAoYTUub3JkZXIgfHwgMCkgLSAoYjUub3JkZXIgfHwgMCkpOwogICAgICBjb25zdCBsZWZ0QWN0aW9ucyA9IHRoaXMuYWN0aW9ucy5maWx0ZXIoKGE1KSA9PiBhNS5wb3NpdGlvbiA9PT0gImxlZnQiKTsKICAgICAgY29uc3QgcmlnaHRBY3Rpb25zID0gdGhpcy5hY3Rpb25zLmZpbHRlcigoYTUpID0+IGE1LnBvc2l0aW9uICE9PSAibGVmdCIpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImJvdHRvbS1iYXIiPgogICAgICAgIDwhLS0gTGVmdCBhY3Rpb25zIC0tPgogICAgICAgICR7bGVmdEFjdGlvbnMubWFwKChhY3Rpb24pID0+IHRoaXMucmVuZGVyQWN0aW9uKGFjdGlvbikpfQoKICAgICAgICA8IS0tIExlZnQgd2lkZ2V0cyAtLT4KICAgICAgICAke2xlZnRXaWRnZXRzLm1hcCgod2lkZ2V0LCBpbmRleDIpID0+IGIyYAogICAgICAgICAgJHtpbmRleDIgPiAwIHx8IGxlZnRBY3Rpb25zLmxlbmd0aCA+IDAgPyBiMmA8ZGl2IGNsYXNzPSJ3aWRnZXQtc2VwYXJhdG9yIj48L2Rpdj5gIDogIiJ9CiAgICAgICAgICAke3RoaXMucmVuZGVyV2lkZ2V0KHdpZGdldCl9CiAgICAgICAgYCl9CgogICAgICAgIDxkaXYgY2xhc3M9InNwYWNlciI+PC9kaXY+CgogICAgICAgIDwhLS0gUmlnaHQgd2lkZ2V0cyAtLT4KICAgICAgICAke3JpZ2h0V2lkZ2V0cy5tYXAoKHdpZGdldCwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAgICR7dGhpcy5yZW5kZXJXaWRnZXQod2lkZ2V0KX0KICAgICAgICAgICR7aW5kZXgyIDwgcmlnaHRXaWRnZXRzLmxlbmd0aCAtIDEgfHwgcmlnaHRBY3Rpb25zLmxlbmd0aCA+IDAgPyBiMmA8ZGl2IGNsYXNzPSJ3aWRnZXQtc2VwYXJhdG9yIj48L2Rpdj5gIDogIiJ9CiAgICAgICAgYCl9CgogICAgICAgIDwhLS0gUmlnaHQgYWN0aW9ucyAtLT4KICAgICAgICAke3JpZ2h0QWN0aW9ucy5tYXAoKGFjdGlvbikgPT4gdGhpcy5yZW5kZXJBY3Rpb24oYWN0aW9uKSl9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlcldpZGdldCh3aWRnZXQpIHsKICAgICAgY29uc3Qgc3RhdHVzQ2xhc3MgPSB3aWRnZXQuc3RhdHVzICYmIHdpZGdldC5zdGF0dXMgIT09ICJpZGxlIiA/IHdpZGdldC5zdGF0dXMgOiAiIjsKICAgICAgY29uc3QgaWNvbk5hbWUgPSB3aWRnZXQuaWNvbk5hbWUgPyB3aWRnZXQuaWNvbk5hbWUuc3RhcnRzV2l0aCgibHVjaWRlOiIpID8gd2lkZ2V0Lmljb25OYW1lIDogYGx1Y2lkZToke3dpZGdldC5pY29uTmFtZX1gIDogIiI7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJ3aWRnZXQgJHtzdGF0dXNDbGFzc30iCiAgICAgICAgdGl0bGU9IiR7d2lkZ2V0LnRvb2x0aXAgfHwgIiJ9IgogICAgICAgIEBjbGljaz0keygpID0+IHdpZGdldC5vbkNsaWNrPy4oKX0KICAgICAgICBAY29udGV4dG1lbnU9JHsoZTExKSA9PiB0aGlzLmhhbmRsZVdpZGdldENvbnRleHRNZW51KGUxMSwgd2lkZ2V0KX0KICAgICAgPgogICAgICAgICR7aWNvbk5hbWUgPyBiMmAKICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgLmljb249JHtpY29uTmFtZX0KICAgICAgICAgICAgaWNvblNpemU9IjEyIgogICAgICAgICAgICBjbGFzcz0iJHt3aWRnZXQubG9hZGluZyA/ICJzcGlubmluZyIgOiAiIn0iCiAgICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgICAgYCA6ICIifQogICAgICAgICR7d2lkZ2V0LmxhYmVsID8gYjJgPHNwYW4+JHt3aWRnZXQubGFiZWx9PC9zcGFuPmAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyQWN0aW9uKGFjdGlvbikgewogICAgICBjb25zdCBpY29uTmFtZSA9IGFjdGlvbi5pY29uTmFtZS5zdGFydHNXaXRoKCJsdWNpZGU6IikgPyBhY3Rpb24uaWNvbk5hbWUgOiBgbHVjaWRlOiR7YWN0aW9uLmljb25OYW1lfWA7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJhY3Rpb24tYnV0dG9uICR7YWN0aW9uLmRpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSIKICAgICAgICB0aXRsZT0iJHthY3Rpb24udG9vbHRpcCB8fCAiIn0iCiAgICAgICAgQGNsaWNrPSR7KCkgPT4gIWFjdGlvbi5kaXNhYmxlZCAmJiBhY3Rpb24ub25DbGljaz8uKCl9CiAgICAgID4KICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAuaWNvbj0ke2ljb25OYW1lfQogICAgICAgICAgaWNvblNpemU9IjEyIgogICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgaGFuZGxlV2lkZ2V0Q29udGV4dE1lbnUoZTExLCB3aWRnZXQpIHsKICAgICAgaWYgKCF3aWRnZXQuY29udGV4dE1lbnVJdGVtcyB8fCB3aWRnZXQuY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPT09IDApCiAgICAgICAgcmV0dXJuOwogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gW107CiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB3aWRnZXQuY29udGV4dE1lbnVJdGVtcykgewogICAgICAgIGlmIChpdGVtLmRpdmlkZXIpIHsKICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsCiAgICAgICAgICAgIGljb25OYW1lOiBpdGVtLmljb25OYW1lLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICBhd2FpdCBpdGVtLmFjdGlvbigpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGF3YWl0IERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhlMTEsIG1lbnVJdGVtcyk7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEFQSSBNRVRIT0RTIChpbXBsZW1lbnRzIElCb3R0b21CYXJBUEkpCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogQWRkIGEgd2lkZ2V0IHRvIHRoZSBib3R0b20gYmFyCiAgICAgKi8KICAgIGFkZFdpZGdldCh3aWRnZXQpIHsKICAgICAgdGhpcy53aWRnZXRzID0gdGhpcy53aWRnZXRzLmZpbHRlcigodzMpID0+IHczLmlkICE9PSB3aWRnZXQuaWQpOwogICAgICB0aGlzLndpZGdldHMgPSBbLi4udGhpcy53aWRnZXRzLCB3aWRnZXRdOwogICAgfQogICAgLyoqCiAgICAgKiBVcGRhdGUgYW4gZXhpc3Rpbmcgd2lkZ2V0IGJ5IElECiAgICAgKi8KICAgIHVwZGF0ZVdpZGdldChpZCwgdXBkYXRlKSB7CiAgICAgIHRoaXMud2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5tYXAoKHczKSA9PiB3My5pZCA9PT0gaWQgPyB7IC4uLnczLCAuLi51cGRhdGUgfSA6IHczKTsKICAgIH0KICAgIC8qKgogICAgICogUmVtb3ZlIGEgd2lkZ2V0IGJ5IElECiAgICAgKi8KICAgIHJlbW92ZVdpZGdldChpZCkgewogICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMuZmlsdGVyKCh3MykgPT4gdzMuaWQgIT09IGlkKTsKICAgIH0KICAgIC8qKgogICAgICogR2V0IGEgd2lkZ2V0IGJ5IElECiAgICAgKi8KICAgIGdldFdpZGdldChpZCkgewogICAgICByZXR1cm4gdGhpcy53aWRnZXRzLmZpbmQoKHczKSA9PiB3My5pZCA9PT0gaWQpOwogICAgfQogICAgLyoqCiAgICAgKiBDbGVhciBhbGwgd2lkZ2V0cwogICAgICovCiAgICBjbGVhcldpZGdldHMoKSB7CiAgICAgIHRoaXMud2lkZ2V0cyA9IFtdOwogICAgfQogICAgLyoqCiAgICAgKiBBZGQgYW4gYWN0aW9uIGJ1dHRvbgogICAgICovCiAgICBhZGRBY3Rpb24oYWN0aW9uKSB7CiAgICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuYWN0aW9ucy5maWx0ZXIoKGE1KSA9PiBhNS5pZCAhPT0gYWN0aW9uLmlkKTsKICAgICAgdGhpcy5hY3Rpb25zID0gWy4uLnRoaXMuYWN0aW9ucywgYWN0aW9uXTsKICAgIH0KICAgIC8qKgogICAgICogUmVtb3ZlIGFuIGFjdGlvbiBieSBJRAogICAgICovCiAgICByZW1vdmVBY3Rpb24oaWQpIHsKICAgICAgdGhpcy5hY3Rpb25zID0gdGhpcy5hY3Rpb25zLmZpbHRlcigoYTUpID0+IGE1LmlkICE9PSBpZCk7CiAgICB9CiAgICAvKioKICAgICAqIENsZWFyIGFsbCBhY3Rpb25zCiAgICAgKi8KICAgIGNsZWFyQWN0aW9ucygpIHsKICAgICAgdGhpcy5hY3Rpb25zID0gW107CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxMih0aGlzLCBfYWN0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczEyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQXBwdWlCb3R0b21iYXIyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1wYW5lbC9kZWVzLXBhbmVsLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNiA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tYmFja2dyb3VuZCB7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSA1JSkiKX07CiAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgIG1hcmdpbjogMzJweCAwIDE2cHggMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQogICAgICAKICAgICAgLnNlY3Rpb24tdGl0bGU6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC0zY29sIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmciAxZnI7CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBAbWVkaWEgKG1heC13aWR0aDogOTY4cHgpIHsKICAgICAgICAuZ3JpZC0zY29sIHsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1iYWNrZ3JvdW5kIj4KICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5EZWZhdWx0IFBhbmVsczwvaDI+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUGFuZWwgQ29tcG9uZW50In0gLnN1YnRpdGxlPSR7IlRoZSBkZWZhdWx0IHBhbmVsIHZhcmlhbnQgd2l0aCBzaGFkY24taW5zcGlyZWQgc3R5bGluZyJ9PgogICAgICAgIDxwPlRoZSBwYW5lbCBjb21wb25lbnQgYXV0b21hdGljYWxseSBmb2xsb3dzIHRoZSB0aGVtZSBhbmQgcHJvdmlkZXMgY29uc2lzdGVudCBzdHlsaW5nIGZvciBncm91cGVkIGNvbnRlbnQuPC9wPgogICAgICAgIDxwPkl0J3MgcGVyZmVjdCBmb3IgY3JlYXRpbmcgc2VjdGlvbnMgaW4geW91ciBhcHBsaWNhdGlvbiB3aXRoIHByb3BlciBzcGFjaW5nIGFuZCBib3JkZXJzLjwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGZWF0dXJlIE92ZXJ2aWV3In0gLnN1YnRpdGxlPSR7IktleSBjYXBhYmlsaXRpZXMifT4KICAgICAgICAgIDxwPkdyaWQgbGF5b3V0cyB3b3JrIGdyZWF0IHdpdGggcGFuZWxzIGZvciBjcmVhdGluZyBkYXNoYm9hcmRzIGFuZCBmZWF0dXJlIHNlY3Rpb25zLjwvcD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5MZWFybiBNb3JlPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgICAgCiAgICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlF1aWNrIEFjdGlvbnMifSAuc3VidGl0bGU9JHsiQ29tbW9uIHRhc2tzIn0+CiAgICAgICAgICA8cD5FYWNoIHBhbmVsIG1haW50YWlucyBjb25zaXN0ZW50IHNwYWNpbmcgYW5kIHN0eWxpbmcgYWNyb3NzIHlvdXIgYXBwbGljYXRpb24uPC9wPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkdldCBTdGFydGVkPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5QYW5lbCBWYXJpYW50czwvaDI+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRGVmYXVsdCBWYXJpYW50In0gLnZhcmlhbnQ9JHsiZGVmYXVsdCJ9PgogICAgICAgIDxwPlRoZSBkZWZhdWx0IHZhcmlhbnQgaGFzIGEgd2hpdGUgYmFja2dyb3VuZCwgc3VidGxlIGJvcmRlciwgYW5kIG1pbmltYWwgc2hhZG93LiBJdCdzIHRoZSBzdGFuZGFyZCBjaG9pY2UgZm9yIG1vc3QgY29udGVudC48L3A+CiAgICAgICAgPHA+VXNlIDxjb2RlPnZhcmlhbnQ9ImRlZmF1bHQiPC9jb2RlPiBvciBvbWl0IHRoZSB2YXJpYW50IHByb3BlcnR5LjwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ik91dGxpbmUgVmFyaWFudCJ9IC5zdWJ0aXRsZT0keyJUcmFuc3BhcmVudCBiYWNrZ3JvdW5kIHdpdGggYm9yZGVyIn0gLnZhcmlhbnQ9JHsib3V0bGluZSJ9PgogICAgICAgIDxwPlRoZSBvdXRsaW5lIHZhcmlhbnQgcmVtb3ZlcyB0aGUgYmFja2dyb3VuZCBjb2xvciBhbmQgc2hhZG93LCBrZWVwaW5nIG9ubHkgdGhlIGJvcmRlci48L3A+CiAgICAgICAgPHA+VXNlIDxjb2RlPnZhcmlhbnQ9Im91dGxpbmUiPC9jb2RlPiBmb3IgYSBsaWdodGVyIHZpc3VhbCB3ZWlnaHQuPC9wPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiR2hvc3QgVmFyaWFudCJ9IC5zdWJ0aXRsZT0keyJNaW5pbWFsIHN0eWxpbmcgZm9yIHN1YnRsZSBzZWN0aW9ucyJ9IC52YXJpYW50PSR7Imdob3N0In0+CiAgICAgICAgPHA+VGhlIGdob3N0IHZhcmlhbnQgaGFzIG5vIGJvcmRlciBvciBiYWNrZ3JvdW5kIGJ5IGRlZmF1bHQsIG9ubHkgc2hvd2luZyBhIHN1YnRsZSBiYWNrZ3JvdW5kIG9uIGhvdmVyLjwvcD4KICAgICAgICA8cD5Vc2UgPGNvZGU+dmFyaWFudD0iZ2hvc3QiPC9jb2RlPiBmb3IgdGhlIG1vc3QgbWluaW1hbCBhcHBlYXJhbmNlLjwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5QYW5lbCBTaXplczwvaDI+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJncmlkLTNjb2wiPgogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJTbWFsbCBQYW5lbCJ9IC5zaXplPSR7InNtIn0+CiAgICAgICAgICA8cD5Db21wYWN0IHBhZGRpbmcgZm9yIGRlbnNlIGxheW91dHMuPC9wPgogICAgICAgICAgPHA+VXNlIDxjb2RlPnNpemU9InNtIjwvY29kZT48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIAogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJNZWRpdW0gUGFuZWwifSAuc2l6ZT0keyJtZCJ9PgogICAgICAgICAgPHA+RGVmYXVsdCBzaXplIHdpdGggYmFsYW5jZWQgc3BhY2luZy48L3A+CiAgICAgICAgICA8cD5Vc2UgPGNvZGU+c2l6ZT0ibWQiPC9jb2RlPiBvciBvbWl0LjwvcD4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgICAgCiAgICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkxhcmdlIFBhbmVsIn0gLnNpemU9JHsibGcifT4KICAgICAgICAgIDxwPkdlbmVyb3VzIHBhZGRpbmcgZm9yIHByb21pbmVudCBzZWN0aW9ucy48L3A+CiAgICAgICAgICA8cD5Vc2UgPGNvZGU+c2l6ZT0ibGciPC9jb2RlPjwvcD4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Db21wbGV4IEV4YW1wbGVzPC9oMj4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGb3JtIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiUGFuZWxzIHdvcmsgZ3JlYXQgZm9yIG9yZ2FuaXppbmcgZm9ybSBzZWN0aW9ucyJ9PgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJQcm9qZWN0IE5hbWUifSAucmVxdWlyZWQ9JHt0cnVlfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkRlc2NyaXB0aW9uIn0gLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24gCiAgICAgICAgICAgIC5sYWJlbD0keyJDYXRlZ29yeSJ9IAogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIldlYiBEZXZlbG9wbWVudCIsIGtleTogIndlYiIgfSwKICB7IG9wdGlvbjogIk1vYmlsZSBBcHAiLCBrZXk6ICJtb2JpbGUiIH0sCiAgeyBvcHRpb246ICJEZXNrdG9wIFNvZnR3YXJlIiwga2V5OiAiZGVza3RvcCIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PkNyZWF0ZSBQcm9qZWN0PC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiTmVzdGVkIFBhbmVscyJ9IC5zdWJ0aXRsZT0keyJQYW5lbHMgY2FuIGJlIG5lc3RlZCBmb3IgaGllcmFyY2hpY2FsIG9yZ2FuaXphdGlvbiJ9PgogICAgICAgIDxwPllvdSBjYW4gbmVzdCBwYW5lbHMgdG8gY3JlYXRlIG1vcmUgY29tcGxleCBsYXlvdXRzOjwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiTmVzdGVkIFBhbmVsIDEifSAudmFyaWFudD0keyJvdXRsaW5lIn0gLnNpemU9JHsic20ifT4KICAgICAgICAgIDxwPlRoaXMgaXMgYSBuZXN0ZWQgcGFuZWwgd2l0aCBvdXRsaW5lIHZhcmlhbnQgYW5kIHNtYWxsIHNpemUuPC9wPgogICAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgICAKICAgICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiTmVzdGVkIFBhbmVsIDIifSAudmFyaWFudD0keyJnaG9zdCJ9IC5zaXplPSR7InNtIn0+CiAgICAgICAgICA8cD5UaGlzIGlzIGFub3RoZXIgbmVzdGVkIHBhbmVsIHdpdGggZ2hvc3QgdmFyaWFudC48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8aDIgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlVudGl0bGVkIFBhbmVsczwvaDI+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbD4KICAgICAgICA8cD5QYW5lbHMgd29yayBncmVhdCBldmVuIHdpdGhvdXQgYSB0aXRsZSBmb3Igc2ltcGxlIGNvbnRlbnQgZ3JvdXBpbmcuPC9wPgogICAgICAgIDxwPlRoZXkgcHJvdmlkZSB2aXN1YWwgc2VwYXJhdGlvbiBhbmQgY29uc2lzdGVudCBwYWRkaW5nIHRocm91Z2hvdXQgeW91ciBpbnRlcmZhY2UuPC9wPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJncmlkLWxheW91dCI+CiAgICAgICAgPGRlZXMtcGFuZWwgLnZhcmlhbnQ9JHsib3V0bGluZSJ9PgogICAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW4tdG9wOiAwOyI+Q3VzdG9tIENvbnRlbnQ8L2g0PgogICAgICAgICAgPHA+WW91IGNhbiBhZGQgeW91ciBvd24gaGVhZGluZ3MgYW5kIHN0cnVjdHVyZSB3aXRoaW4gdW50aXRsZWQgcGFuZWxzLjwvcD4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgICAgCiAgICAgICAgPGRlZXMtcGFuZWwgLnZhcmlhbnQ9JHsiZ2hvc3QifT4KICAgICAgICAgIDxoNCBzdHlsZT0ibWFyZ2luLXRvcDogMDsiPk1pbmltYWwgU3R5bGU8L2g0PgogICAgICAgICAgPHA+R2hvc3QgcGFuZWxzIHdpdGhvdXQgdGl0bGVzIGNyZWF0ZSB2ZXJ5IHN1YnRsZSBjb250ZW50IHNlY3Rpb25zLjwvcD4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZm9udHMuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGdlaXN0U2Fuc0ZvbnQgPSAiR2Vpc3QgU2FucyI7CnZhciBpbnRlbE9uZU1vbm9Gb250ID0gIkludGVsIE9uZSBNb25vIjsKdmFyIGdlaXN0Rm9udEZhbWlseSA9IGAnJHtnZWlzdFNhbnNGb250fScsIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ1JvYm90bycsICdPeHlnZW4nLCAnVWJ1bnR1JywgJ0NhbnRhcmVsbCcsICdGaXJhIFNhbnMnLCAnRHJvaWQgU2FucycsICdIZWx2ZXRpY2EgTmV1ZScsIHNhbnMtc2VyaWZgOwp2YXIgbW9ub0ZvbnRGYW1pbHkgPSBgJyR7aW50ZWxPbmVNb25vRm9udH0nLCAnU0YgTW9ubycsICdNb25hY28nLCAnSW5jb25zb2xhdGEnLCAnRmlyYSBDb2RlJywgJ0ZpcmEgTW9ubycsICdEcm9pZCBTYW5zIE1vbm8nLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2VgOwp2YXIgY3NzR2Vpc3RGb250RmFtaWx5ID0gcihnZWlzdEZvbnRGYW1pbHkpOwp2YXIgY3NzTW9ub0ZvbnRGYW1pbHkgPSByKG1vbm9Gb250RmFtaWx5KTsKdmFyIGNhbFNhbnNGb250ID0gIkNhbCBTYW5zIjsKdmFyIGNhbFNhbnNGb250RmFtaWx5ID0gYCcke2NhbFNhbnNGb250fScsICR7Z2Vpc3RGb250RmFtaWx5fWA7CnZhciBjc3NDYWxTYW5zRm9udEZhbWlseSA9IHIoY2FsU2Fuc0ZvbnRGYW1pbHkpOwp2YXIgcm9ib3RvU2xhYkZvbnQgPSAiUm9ib3RvIFNsYWIiOwp2YXIgcm9ib3RvU2xhYkZvbnRGYW1pbHkgPSBgJyR7cm9ib3RvU2xhYkZvbnR9JywgR2VvcmdpYSwgc2VyaWZgOwp2YXIgY3NzUm9ib3RvU2xhYkZvbnRGYW1pbHkgPSByKHJvYm90b1NsYWJGb250RmFtaWx5KTsKdmFyIGJhc2VGb250U3R5bGVzID0gcihgCiAgZm9udC1mYW1pbHk6ICR7Z2Vpc3RGb250RmFtaWx5fTsKICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwogIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2N2MTEnLCAndG51bScsICdjdjA1JyAxOwpgKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1wYW5lbC9kZWVzLXBhbmVsLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTEyID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMxMyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1BhbmVsID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1wYW5lbCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3RpdGxlX2RlY29yYXRvcnM7CiAgbGV0IF90aXRsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RpdGxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdWJ0aXRsZV9kZWNvcmF0b3JzOwogIGxldCBfc3VidGl0bGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdWJ0aXRsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFyaWFudF9kZWNvcmF0b3JzOwogIGxldCBfdmFyaWFudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhcmlhbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NpemVfZGVjb3JhdG9yczsKICBsZXQgX3NpemVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ydW5BZnRlclJlbmRlcl9kZWNvcmF0b3JzOwogIGxldCBfcnVuQWZ0ZXJSZW5kZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ydW5BZnRlclJlbmRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUGFuZWwyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdGl0bGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zdWJ0aXRsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3ZhcmlhbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfcnVuQWZ0ZXJSZW5kZXJfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfX2VzRGVjb3JhdGUxMih0aGlzLCBudWxsLCBfdGl0bGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGl0bGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRpdGxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRpdGxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50aXRsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90aXRsZV9pbml0aWFsaXplcnMsIF90aXRsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEyKHRoaXMsIG51bGwsIF9zdWJ0aXRsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzdWJ0aXRsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3VidGl0bGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3VidGl0bGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnN1YnRpdGxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N1YnRpdGxlX2luaXRpYWxpemVycywgX3N1YnRpdGxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTIodGhpcywgbnVsbCwgX3ZhcmlhbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFyaWFudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFyaWFudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YXJpYW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YXJpYW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhcmlhbnRfaW5pdGlhbGl6ZXJzLCBfdmFyaWFudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEyKHRoaXMsIG51bGwsIF9zaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaXplX2luaXRpYWxpemVycywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMih0aGlzLCBudWxsLCBfcnVuQWZ0ZXJSZW5kZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicnVuQWZ0ZXJSZW5kZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJ1bkFmdGVyUmVuZGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJ1bkFmdGVyUmVuZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ydW5BZnRlclJlbmRlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ydW5BZnRlclJlbmRlcl9pbml0aWFsaXplcnMsIF9ydW5BZnRlclJlbmRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1BhbmVsMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNjsKICAgICN0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMxMyh0aGlzLCBfdGl0bGVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgdGl0bGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRpdGxlKHZhbHVlMikgewogICAgICB0aGlzLiN0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3N1YnRpdGxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMyh0aGlzLCBfdGl0bGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczEzKHRoaXMsIF9zdWJ0aXRsZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgc3VidGl0bGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdWJ0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHN1YnRpdGxlKHZhbHVlMikgewogICAgICB0aGlzLiNzdWJ0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3ZhcmlhbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczEzKHRoaXMsIF9zdWJ0aXRsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTModGhpcywgX3ZhcmlhbnRfaW5pdGlhbGl6ZXJzLCAiZGVmYXVsdCIpKTsKICAgIGdldCB2YXJpYW50KCkgewogICAgICByZXR1cm4gdGhpcy4jdmFyaWFudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhcmlhbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhcmlhbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMyh0aGlzLCBfdmFyaWFudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTModGhpcywgX3NpemVfaW5pdGlhbGl6ZXJzLCAibWQiKSk7CiAgICBnZXQgc2l6ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaXplKHZhbHVlMikgewogICAgICB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcnVuQWZ0ZXJSZW5kZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczEzKHRoaXMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMyh0aGlzLCBfcnVuQWZ0ZXJSZW5kZXJfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBydW5BZnRlclJlbmRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3J1bkFmdGVyUmVuZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcnVuQWZ0ZXJSZW5kZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3J1bkFmdGVyUmVuZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIC8qIFZhcmlhbnQ6IGRlZmF1bHQgKi8KICAgICAgOmhvc3QoW3ZhcmlhbnQ9ImRlZmF1bHQiXSkgewogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIGhzbCgwIDAlIDAlIC8gMC4wNSk7CiAgICAgIH0KCiAgICAgIC8qIFZhcmlhbnQ6IG91dGxpbmUgKi8KICAgICAgOmhvc3QoW3ZhcmlhbnQ9Im91dGxpbmUiXSkgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFZhcmlhbnQ6IGdob3N0ICovCiAgICAgIDpob3N0KFt2YXJpYW50PSJnaG9zdCJdKSB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICBib3gtc2hhZG93OiBub25lOwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgIH0KCiAgICAgIC8qIFNpemUgdmFyaWF0aW9ucyAqLwogICAgICA6aG9zdChbc2l6ZT0ic20iXSkgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtzaXplPSJsZyJdKSB7CiAgICAgICAgcGFkZGluZzogMzJweDsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmhlYWRlcjplbXB0eSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLnRpdGxlIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQoKICAgICAgLyogVGl0bGUgc2l6ZSB2YXJpYXRpb25zICovCiAgICAgIDpob3N0KFtzaXplPSJzbSJdKSAudGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgfQoKICAgICAgOmhvc3QoW3NpemU9ImxnIl0pIC50aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICB9CgogICAgICAuc3VidGl0bGUgewogICAgICAgIG1hcmdpbjogNHB4IDAgMCAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAwNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgIH0KCiAgICAgIC8qIFN1YnRpdGxlIHNpemUgdmFyaWF0aW9ucyAqLwogICAgICA6aG9zdChbc2l6ZT0ic20iXSkgLnN1YnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtzaXplPSJsZyJdKSAuc3VidGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA4NC45JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgIH0KCiAgICAgIC8qIENvbnRlbnQgc2l6ZSB2YXJpYXRpb25zICovCiAgICAgIDpob3N0KFtzaXplPSJzbSJdKSAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICA6aG9zdChbc2l6ZT0ibGciXSkgLmNvbnRlbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgfQoKICAgICAgLyogUmVtb3ZlIG1hcmdpbnMgZnJvbSBmaXJzdCBhbmQgbGFzdCBjaGlsZHJlbiAqLwogICAgICAuY29udGVudCA6OnNsb3R0ZWQoKjpmaXJzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgIH0KCiAgICAgIC5jb250ZW50IDo6c2xvdHRlZCgqOmxhc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CgogICAgICAvKiBJbnRlcmFjdGl2ZSBzdGF0ZXMgZm9yIGRlZmF1bHQgdmFyaWFudCAqLwogICAgICA6aG9zdChbdmFyaWFudD0iZGVmYXVsdCJdOmhvdmVyKSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCBoc2woMCAwJSAwJSAvIDAuMSksIDAgMnB4IDRweCAtMnB4IGhzbCgwIDAlIDAlIC8gMC4xKTsKICAgICAgfQoKICAgICAgLyogSW50ZXJhY3RpdmUgc3RhdGVzIGZvciBvdXRsaW5lIHZhcmlhbnQgKi8KICAgICAgOmhvc3QoW3ZhcmlhbnQ9Im91dGxpbmUiXTpob3ZlcikgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk4JSkiLCAiaHNsKDAgMCUgNy44JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIEludGVyYWN0aXZlIHN0YXRlcyBmb3IgZ2hvc3QgdmFyaWFudCAqLwogICAgICA6aG9zdChbdmFyaWFudD0iZ2hvc3QiXTpob3ZlcikgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAvKiBGb2N1cyBzdGF0ZXMgKi8KICAgICAgOmhvc3QoOmZvY3VzLXdpdGhpbikgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlIC8gMC4xKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAvKiBOZXN0ZWQgcGFuZWxzIHNwYWNpbmcgKi8KICAgICAgOjpzbG90dGVkKGRlZXMtcGFuZWwpIHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICB9CgogICAgICA6OnNsb3R0ZWQoZGVlcy1wYW5lbDpmaXJzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAke3RoaXMudGl0bGUgPyBiMmA8aDMgY2xhc3M9InRpdGxlIj4ke3RoaXMudGl0bGV9PC9oMz5gIDogIiJ9CiAgICAgICAgJHt0aGlzLnN1YnRpdGxlID8gYjJgPHAgY2xhc3M9InN1YnRpdGxlIj4ke3RoaXMuc3VidGl0bGV9PC9wPmAgOiAiIn0KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBpZiAodGhpcy5ydW5BZnRlclJlbmRlcikgewogICAgICAgIGF3YWl0IHRoaXMucnVuQWZ0ZXJSZW5kZXIodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczEzKHRoaXMsIF9ydW5BZnRlclJlbmRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczEzKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzUGFuZWwyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1zdGF0c2dyaWQvZGVlcy1zdGF0c2dyaWQuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgX2EyOwp2YXIgZ2VuZXJhdGVDcHVDb3JlcyA9IChjb3VudDIpID0+IHsKICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogY291bnQyIH0sIChfNCwgaTExKSA9PiAoewogICAgaWQ6IGkxMSwKICAgIHVzYWdlOiBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDApLAogICAgbGFiZWw6IGAke2kxMX1gCiAgfSkpOwp9Owp2YXIgZGVtb0Z1bmM3ID0gKCkgPT4gewogIHJldHVybiBiMihfYTIgfHwgKF9hMiA9IF9fdGVtcGxhdGUoWyJcbiAgPGRlZXMtZGVtb3dyYXBwZXI+XG4gICAgPHN0eWxlPlxuICAgICAgIiwgJ1xuICAgIDwvc3R5bGU+XG4gICAgXG4gICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPlxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPScsICIgLnN1YnRpdGxlPSIsICI+XG4gICAgICAgIDxkZWVzLXN0YXRzZ3JpZFxuICAgICAgICAgIC50aWxlcz0iLCAiXG4gICAgICAgICAgLmdyaWRBY3Rpb25zPSIsICJcbiAgICAgICAgICAubWluVGlsZVdpZHRoPSIsICJcbiAgICAgICAgICAuZ2FwPSIsICdcbiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+XG4gICAgICAgIFxuICAgICAgICA8ZGl2IGlkPSJhY3Rpb24tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsgcGFkZGluZzogMTJweDsgYmFja2dyb3VuZDogJywgIjsgYm9yZGVyLXJhZGl1czogNnB4OyBmb250LXNpemU6IDE0cHg7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGNvbG9yOiAiLCAnOyI+XG4gICAgICAgICAgPGVtPkNsaWNrIG9uIHRpbGUgYWN0aW9ucyBvciBncmlkIGFjdGlvbnMgdG8gc2VlIHRoZSByZXN1bHQuLi48L2VtPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGVlcy1wYW5lbD5cbiAgICAgIFxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPScsICIgLnN1YnRpdGxlPSIsICI+XG4gICAgICAgIDxkZWVzLXN0YXRzZ3JpZFxuICAgICAgICAgIC50aWxlcz0iLCAiXG4gICAgICAgICAgLm1pblRpbGVXaWR0aD0iLCAiXG4gICAgICAgICAgLmdhcD0iLCAnXG4gICAgICAgID48L2RlZXMtc3RhdHNncmlkPlxuICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1jb25maWciPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy1zZWN0aW9uIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy10aXRsZSI+Q29uZmlndXJhdGlvbiBPcHRpb25zPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctZGVzY3JpcHRpb24iPlxuICAgICAgICAgICAgICBFYWNoIHRpbGUgdHlwZSBzdXBwb3J0cyBkaWZmZXJlbnQgcHJvcGVydGllczpcbiAgICAgICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW46IDhweCAwOyBwYWRkaW5nLWxlZnQ6IDIwcHg7Ij5cbiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5OdW1iZXI6PC9zdHJvbmc+IHZhbHVlLCB1bml0LCBjb2xvciwgZGVzY3JpcHRpb248L2xpPlxuICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPkdhdWdlOjwvc3Ryb25nPiB2YWx1ZSwgdW5pdCwgZ2F1Z2VPcHRpb25zIChtaW4sIG1heCwgdGhyZXNob2xkcyk8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPlBlcmNlbnRhZ2U6PC9zdHJvbmc+IHZhbHVlICgwLTEwMCksIGNvbG9yLCBkZXNjcmlwdGlvbjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+VHJlbmQ6PC9zdHJvbmc+IHZhbHVlLCB1bml0LCB0cmVuZERhdGEgYXJyYXksIGRlc2NyaXB0aW9uPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5UZXh0Ojwvc3Ryb25nPiB2YWx1ZSAoc3RyaW5nKSwgY29sb3IsIGRlc2NyaXB0aW9uPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGVlcy1wYW5lbD5cbiAgICAgIFxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPScsICIgLnN1YnRpdGxlPSIsICc+XG4gICAgICAgIDxoNCBzdHlsZT0ibWFyZ2luOiAwIDAgMTZweCAwOyBmb250LXNpemU6IDE2cHg7IGZvbnQtd2VpZ2h0OiA2MDA7Ij5Db21wYWN0IExheW91dCAoMTgwcHggdGlsZXMpPC9oND5cbiAgICAgICAgPGRlZXMtc3RhdHNncmlkXG4gICAgICAgICAgLnRpbGVzPScsICJcbiAgICAgICAgICAubWluVGlsZVdpZHRoPSIsICJcbiAgICAgICAgICAuZ2FwPSIsICdcbiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+XG4gICAgICAgIFxuICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbjogMjRweCAwIDE2cHggMDsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNjAwOyI+U3BhY2lvdXMgTGF5b3V0ICgzMjBweCB0aWxlcyk8L2g0PlxuICAgICAgICA8ZGVlcy1zdGF0c2dyaWRcbiAgICAgICAgICAudGlsZXM9JywgIlxuICAgICAgICAgIC5taW5UaWxlV2lkdGg9IiwgIlxuICAgICAgICAgIC5nYXA9IiwgIlxuICAgICAgICA+PC9kZWVzLXN0YXRzZ3JpZD5cbiAgICAgIDwvZGVlcy1wYW5lbD5cbiAgICAgIFxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSIsICIgLnN1YnRpdGxlPSIsICc+XG4gICAgICAgIDxkZWVzLXN0YXRzZ3JpZFxuICAgICAgICAgIGlkPSJjcHUtY29yZXMtZ3JpZCJcbiAgICAgICAgICAudGlsZXM9JywgIlxuICAgICAgICAgIC5ncmlkQWN0aW9ucz0iLCAiXG4gICAgICAgICAgLm1pblRpbGVXaWR0aD0iLCAiXG4gICAgICAgICAgLmdhcD0iLCAiXG4gICAgICAgID48L2RlZXMtc3RhdHNncmlkPlxuICAgICAgPC9kZWVzLXBhbmVsPlxuXG4gICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9IiwgIiAuc3VidGl0bGU9IiwgJz5cbiAgICAgICAgPGRlZXMtc3RhdHNncmlkXG4gICAgICAgICAgaWQ9ImludGVyYWN0aXZlLWdyaWQiXG4gICAgICAgICAgLnRpbGVzPScsICJcbiAgICAgICAgICAuZ3JpZEFjdGlvbnM9IiwgIlxuICAgICAgICAgIC5taW5UaWxlV2lkdGg9IiwgIlxuICAgICAgICAgIC5nYXA9IiwgIlxuICAgICAgICA+PC9kZWVzLXN0YXRzZ3JpZD5cbiAgICAgIDwvZGVlcy1wYW5lbD5cbiAgICAgIFxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSIsICIgLnN1YnRpdGxlPSIsICc+XG4gICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYmxvY2siPicsICI8L2Rpdj5cbiAgICAgIDwvZGVlcy1wYW5lbD5cblxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSIsICIgLnN1YnRpdGxlPSIsICI+XG4gICAgICAgIDxkZWVzLXN0YXRzZ3JpZFxuICAgICAgICAgIC50aWxlcz0iLCAiXG4gICAgICAgICAgLm1pblRpbGVXaWR0aD0iLCAiXG4gICAgICAgICAgLmdhcD0iLCBgCiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+CgogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtY29uZmlnIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLXRpdGxlIj5QYXJ0aXRpb24gVGlsZSBQcm9wZXJ0aWVzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy1kZXNjcmlwdGlvbiI+CiAgICAgICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW46IDhweCAwOyBwYWRkaW5nLWxlZnQ6IDIwcHg7Ij4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPnBhcnRpdGlvbkRhdGEudXNlZDo8L3N0cm9uZz4gVXNlZCBzcGFjZSBpbiBieXRlcyAoYXV0by1mb3JtYXR0ZWQpPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPnBhcnRpdGlvbkRhdGEudG90YWw6PC9zdHJvbmc+IFRvdGFsIGNhcGFjaXR5IGluIGJ5dGVzPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPnBhcnRpdGlvbkRhdGEuZmlsZXN5c3RlbTo8L3N0cm9uZz4gRmlsZXN5c3RlbSB0eXBlIChleHQ0LCB4ZnMsIG50ZnMpPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPnBhcnRpdGlvbkRhdGEubW91bnRQb2ludDo8L3N0cm9uZz4gTW91bnQgcG9pbnQgcGF0aCAob3B0aW9uYWwpPC9saT4KICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgIENvbG9yIHRocmVzaG9sZHM6IE5vcm1hbCAoJmx0Ozc1JSksIFdhcm5pbmcgKDc1LTkwJSksIENyaXRpY2FsICgmZ3Q7OTAlKQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctdGl0bGUiPkRpc2sgVGlsZSBQcm9wZXJ0aWVzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy1kZXNjcmlwdGlvbiI+CiAgICAgICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW46IDhweCAwOyBwYWRkaW5nLWxlZnQ6IDIwcHg7Ij4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPmRpc2tEYXRhLmNhcGFjaXR5Ojwvc3Ryb25nPiBUb3RhbCBjYXBhY2l0eSBpbiBieXRlczwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5kaXNrRGF0YS5tb2RlbDo8L3N0cm9uZz4gRGlzayBtb2RlbCBuYW1lIChvcHRpb25hbCk8L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+ZGlza0RhdGEudHlwZTo8L3N0cm9uZz4gRGlzayB0eXBlOiAnc3NkJywgJ2hkZCcsIG9yICdudm1lJzwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5kaXNrRGF0YS5pb3BzOjwvc3Ryb25nPiBSZWFkL3dyaXRlIElPUFMgKG9wdGlvbmFsKTwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5kaXNrRGF0YS5oZWFsdGg6PC9zdHJvbmc+IEhlYWx0aCBwZXJjZW50YWdlIDAtMTAwIChvcHRpb25hbCk8L2xpPgogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgSGVhbHRoIHRocmVzaG9sZHM6IEdvb2QgKDcwLTEwMCUpLCBXYXJuaW5nICgzMC03MCUpLCBDcml0aWNhbCAoJmx0OzMwJSkKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgICAgLy8gQ2xlYW51cCBsaXZlIHVwZGF0ZXMgb24gcGFnZSB1bmxvYWQKICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsICgpID0+IHsKICAgICAgICBpZiAoKHdpbmRvdyBhcyBhbnkpLmxpdmVVcGRhdGVJbnRlcnZhbCkgewogICAgICAgICAgY2xlYXJJbnRlcnZhbCgod2luZG93IGFzIGFueSkubGl2ZVVwZGF0ZUludGVydmFsKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgPFwvc2NyaXB0PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgXSkpLCBpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDE0MDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAudGlsZS1jb25maWcgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMzAwcHgsIDFmcikpOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbmZpZy1zZWN0aW9uIHsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29uZmlnLXRpdGxlIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbmZpZy1kZXNjcmlwdGlvbiB7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb2RlLWJsb2NrIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxMS44JSkiKX07CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICAgICAgfQogICAgICBgLCAiMS4gQ29tcHJlaGVuc2l2ZSBEYXNoYm9hcmQiLCAiRnVsbC1mZWF0dXJlZCBzdGF0cyBncmlkIHdpdGggdmFyaW91cyB0aWxlIHR5cGVzLCBhY3Rpb25zLCBhbmQgTHVjaWRlIGljb25zIiwgWwogICAgewogICAgICBpZDogInJldmVudWUiLAogICAgICB0aXRsZTogIlRvdGFsIFJldmVudWUiLAogICAgICB2YWx1ZTogMTI1NDIwLAogICAgICB1bml0OiAiJCIsCiAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICBpY29uOiAibHVjaWRlOmRvbGxhci1zaWduIiwKICAgICAgZGVzY3JpcHRpb246ICIrMTIuNSUgZnJvbSBsYXN0IG1vbnRoIiwKICAgICAgYWN0aW9uczogWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJWaWV3IERldGFpbHMiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dHJlbmRpbmctdXAiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNhY3Rpb24tb3V0cHV0Iik7CiAgICAgICAgICAgIGlmIChvdXRwdXQpIHsKICAgICAgICAgICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSAiVmlld2luZyByZXZlbnVlIGRldGFpbHM6ICQxMjUsNDIwICgrMTIuNSUpIjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkV4cG9ydCBEYXRhIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmRvd25sb2FkIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYWN0aW9uLW91dHB1dCIpOwogICAgICAgICAgICBpZiAob3V0cHV0KSB7CiAgICAgICAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gIkV4cG9ydGluZyByZXZlbnVlIGRhdGEgdG8gQ1NWLi4uIjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgaWQ6ICJ1c2VycyIsCiAgICAgIHRpdGxlOiAiQWN0aXZlIFVzZXJzIiwKICAgICAgdmFsdWU6IDM4NDcsCiAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICBpY29uOiAibHVjaWRlOnVzZXJzIiwKICAgICAgZGVzY3JpcHRpb246ICIzMjQgbmV3IHRoaXMgd2VlayIsCiAgICAgIGFjdGlvbnM6IFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiVmlldyBVc2VyIExpc3QiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6bGlzdCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FjdGlvbi1vdXRwdXQiKTsKICAgICAgICAgICAgaWYgKG91dHB1dCkgewogICAgICAgICAgICAgIG91dHB1dC50ZXh0Q29udGVudCA9ICJPcGVuaW5nIHVzZXIgbGlzdC4uLiI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAiY3B1IiwKICAgICAgdGl0bGU6ICJDUFUgVXNhZ2UiLAogICAgICB2YWx1ZTogNzMsCiAgICAgIHVuaXQ6ICIlIiwKICAgICAgdHlwZTogImdhdWdlIiwKICAgICAgaWNvbjogImx1Y2lkZTpjcHUiLAogICAgICBnYXVnZU9wdGlvbnM6IHsKICAgICAgICBtaW46IDAsCiAgICAgICAgbWF4OiAxMDAsCiAgICAgICAgdGhyZXNob2xkczogWwogICAgICAgICAgeyB2YWx1ZTogMCwgY29sb3I6ICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiB9LAogICAgICAgICAgeyB2YWx1ZTogNjAsIGNvbG9yOiAiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIiB9LAogICAgICAgICAgeyB2YWx1ZTogODAsIGNvbG9yOiAiaHNsKDAgODQuMiUgNjAuMiUpIiB9CiAgICAgICAgXQogICAgICB9CiAgICB9LAogICAgewogICAgICBpZDogInN0b3JhZ2UiLAogICAgICB0aXRsZTogIlN0b3JhZ2UgVXNlZCIsCiAgICAgIHZhbHVlOiA2NSwKICAgICAgdHlwZTogInBlcmNlbnRhZ2UiLAogICAgICBpY29uOiAibHVjaWRlOmhhcmQtZHJpdmUiLAogICAgICBkZXNjcmlwdGlvbjogIjY1MCBHQiBvZiAxIFRCIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJsYXRlbmN5IiwKICAgICAgdGl0bGU6ICJSZXNwb25zZSBUaW1lIiwKICAgICAgdmFsdWU6IDE0MiwKICAgICAgdW5pdDogIm1zIiwKICAgICAgdHlwZTogInRyZW5kIiwKICAgICAgaWNvbjogImx1Y2lkZTphY3Rpdml0eSIsCiAgICAgIHRyZW5kRGF0YTogWzE1MCwgMTQ1LCAxNDgsIDE0MiwgMTM4LCAxNDAsIDEzNSwgMTQ1LCAxNDJdLAogICAgICBkZXNjcmlwdGlvbjogIlA5NSIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAidXB0aW1lIiwKICAgICAgdGl0bGU6ICJTeXN0ZW0gVXB0aW1lIiwKICAgICAgdmFsdWU6ICI5OS45NSUiLAogICAgICB0eXBlOiAidGV4dCIsCiAgICAgIGljb246ICJsdWNpZGU6Y2hlY2stY2lyY2xlIiwKICAgICAgY29sb3I6ICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwKICAgICAgZGVzY3JpcHRpb246ICJMYXN0IDMwIGRheXMiCiAgICB9CiAgXSwgWwogICAgewogICAgICBuYW1lOiAiUmVmcmVzaCIsCiAgICAgIGljb25OYW1lOiAibHVjaWRlOnJlZnJlc2gtY3ciLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCBncmlkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZGVlcy1zdGF0c2dyaWQiKTsKICAgICAgICBpZiAoZ3JpZCkgewogICAgICAgICAgZ3JpZC5zdHlsZS5vcGFjaXR5ID0gIjAuNSI7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgZ3JpZC5zdHlsZS5vcGFjaXR5ID0gIjEiOwogICAgICAgICAgfSwgMzAwKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJFeHBvcnQiLAogICAgICBpY29uTmFtZTogImx1Y2lkZTpzaGFyZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNhY3Rpb24tb3V0cHV0Iik7CiAgICAgICAgaWYgKG91dHB1dCkgewogICAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gIkV4cG9ydGluZyBkYXNoYm9hcmQgcmVwb3J0Li4uIjsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJTZXR0aW5ncyIsCiAgICAgIGljb25OYW1lOiAibHVjaWRlOnNldHRpbmdzIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FjdGlvbi1vdXRwdXQiKTsKICAgICAgICBpZiAob3V0cHV0KSB7CiAgICAgICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSAiT3BlbmluZyBkYXNoYm9hcmQgc2V0dGluZ3MuLi4iOwogICAgICAgIH0KICAgICAgfQogICAgfQogIF0sIDI1MCwgMTYsIGNzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIiksIGNzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIiksICIyLiBUaWxlIFR5cGVzIiwgIkRpZmZlcmVudCB2aXN1YWxpemF0aW9uIHR5cGVzIGF2YWlsYWJsZSBpbiB0aGUgc3RhdHMgZ3JpZCIsIFsKICAgIHsKICAgICAgaWQ6ICJudW1iZXItZXhhbXBsZSIsCiAgICAgIHRpdGxlOiAiTnVtYmVyIFRpbGUiLAogICAgICB2YWx1ZTogNDIxOTUsCiAgICAgIHVuaXQ6ICIkIiwKICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgIGljb246ICJsdWNpZGU6aGFzaCIsCiAgICAgIGRlc2NyaXB0aW9uOiAiU2ltcGxlIG51bWVyaWMgZGlzcGxheSIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAiZ2F1Z2UtZXhhbXBsZSIsCiAgICAgIHRpdGxlOiAiR2F1Z2UgVGlsZSIsCiAgICAgIHZhbHVlOiA2OCwKICAgICAgdW5pdDogIiUiLAogICAgICB0eXBlOiAiZ2F1Z2UiLAogICAgICBpY29uOiAibHVjaWRlOmdhdWdlIiwKICAgICAgZ2F1Z2VPcHRpb25zOiB7CiAgICAgICAgbWluOiAwLAogICAgICAgIG1heDogMTAwLAogICAgICAgIHRocmVzaG9sZHM6IFsKICAgICAgICAgIHsgdmFsdWU6IDAsIGNvbG9yOiAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIgfSwKICAgICAgICAgIHsgdmFsdWU6IDUwLCBjb2xvcjogImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIgfSwKICAgICAgICAgIHsgdmFsdWU6IDgwLCBjb2xvcjogImhzbCgwIDg0LjIlIDYwLjIlKSIgfQogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgaWQ6ICJwZXJjZW50YWdlLWV4YW1wbGUiLAogICAgICB0aXRsZTogIlBlcmNlbnRhZ2UgVGlsZSIsCiAgICAgIHZhbHVlOiA3OCwKICAgICAgdHlwZTogInBlcmNlbnRhZ2UiLAogICAgICBpY29uOiAibHVjaWRlOnBlcmNlbnQiLAogICAgICBkZXNjcmlwdGlvbjogIlByb2dyZXNzIGJhciB2aXN1YWxpemF0aW9uIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJ0cmVuZC1leGFtcGxlIiwKICAgICAgdGl0bGU6ICJUcmVuZCBUaWxlIiwKICAgICAgdmFsdWU6IDg5MiwKICAgICAgdW5pdDogIm9wcy9zIiwKICAgICAgdHlwZTogInRyZW5kIiwKICAgICAgaWNvbjogImx1Y2lkZTp0cmVuZGluZy11cCIsCiAgICAgIHRyZW5kRGF0YTogWzcyMCwgNzUwLCA3ODAsIDc5NSwgODEwLCA4MzUsIDg1MCwgODY1LCA4ODAsIDg5Ml0sCiAgICAgIGRlc2NyaXB0aW9uOiAiYXZnIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJ0ZXh0LWV4YW1wbGUiLAogICAgICB0aXRsZTogIlRleHQgVGlsZSIsCiAgICAgIHZhbHVlOiAiT3BlcmF0aW9uYWwiLAogICAgICB0eXBlOiAidGV4dCIsCiAgICAgIGljb246ICJsdWNpZGU6aW5mbyIsCiAgICAgIGNvbG9yOiAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsCiAgICAgIGRlc2NyaXB0aW9uOiAiU3RhdHVzIGRpc3BsYXkiCiAgICB9CiAgXSwgMjgwLCAxNiwgIjMuIEdyaWQgQ29uZmlndXJhdGlvbnMiLCAiRGlmZmVyZW50IGxheW91dCBvcHRpb25zIGFuZCByZXNwb25zaXZlIGJlaGF2aW9yIiwgWwogICAgeyBpZDogIjEiLCB0aXRsZTogIk9yZGVycyIsIHZhbHVlOiAxNTYsIHR5cGU6ICJudW1iZXIiLCBpY29uOiAibHVjaWRlOnNob3BwaW5nLWNhcnQiIH0sCiAgICB7IGlkOiAiMiIsIHRpdGxlOiAiUmV2ZW51ZSIsIHZhbHVlOiA4NDIwLCB1bml0OiAiJCIsIHR5cGU6ICJudW1iZXIiLCBpY29uOiAibHVjaWRlOmRvbGxhci1zaWduIiB9LAogICAgeyBpZDogIjMiLCB0aXRsZTogIlVzZXJzIiwgdmFsdWU6IDQyMywgdHlwZTogIm51bWJlciIsIGljb246ICJsdWNpZGU6dXNlcnMiIH0sCiAgICB7IGlkOiAiNCIsIHRpdGxlOiAiR3Jvd3RoIiwgdmFsdWU6IDEyLjUsIHVuaXQ6ICIlIiwgdHlwZTogIm51bWJlciIsIGljb246ICJsdWNpZGU6dHJlbmRpbmctdXAiLCBjb2xvcjogImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiIH0KICBdLCAxODAsIDEyLCBbCiAgICB7CiAgICAgIGlkOiAic3BhY2lvdXMxIiwKICAgICAgdGl0bGU6ICJNb250aGx5IFJldmVudWUiLAogICAgICB2YWx1ZTogMTg0NTAwLAogICAgICB1bml0OiAiJCIsCiAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICBpY29uOiAibHVjaWRlOmNyZWRpdC1jYXJkIiwKICAgICAgZGVzY3JpcHRpb246ICJUb3RhbCByZXZlbnVlIHRoaXMgbW9udGgiCiAgICB9LAogICAgewogICAgICBpZDogInNwYWNpb3VzMiIsCiAgICAgIHRpdGxlOiAiQ3VzdG9tZXIgU2F0aXNmYWN0aW9uIiwKICAgICAgdmFsdWU6IDk0LAogICAgICB0eXBlOiAicGVyY2VudGFnZSIsCiAgICAgIGljb246ICJsdWNpZGU6c21pbGUiLAogICAgICBkZXNjcmlwdGlvbjogIkJhc2VkIG9uIDEsMjM0IHJldmlld3MiCiAgICB9LAogICAgewogICAgICBpZDogInNwYWNpb3VzMyIsCiAgICAgIHRpdGxlOiAiU2VydmVyIFJlc3BvbnNlIiwKICAgICAgdmFsdWU6IDk4LAogICAgICB1bml0OiAibXMiLAogICAgICB0eXBlOiAidHJlbmQiLAogICAgICBpY29uOiAibHVjaWRlOnNlcnZlciIsCiAgICAgIHRyZW5kRGF0YTogWzEwNSwgMTAyLCAxMDAsIDk5LCA5OCwgOTgsIDk3LCA5OF0sCiAgICAgIGRlc2NyaXB0aW9uOiAiYXZnIHJlc3BvbnNlIHRpbWUiCiAgICB9CiAgXSwgMzIwLCAyMCwgIjQuIENQVSBDb3JlcyBWaXN1YWxpemF0aW9uIiwgIlZlcnRpY2FsIGJhciB2aXN1YWxpemF0aW9uIGZvciBtdWx0aS1jb3JlIENQVSB1c2FnZSB3aXRoIGNvbHVtbiBzcGFubmluZyIsIFsKICAgIHsKICAgICAgaWQ6ICJjcHUtY29yZXMtOCIsCiAgICAgIHRpdGxlOiAiQ1BVIENvcmVzICg4LWNvcmUpIiwKICAgICAgdmFsdWU6IDAsCiAgICAgIHR5cGU6ICJjcHVDb3JlcyIsCiAgICAgIGljb246ICJsdWNpZGU6Y3B1IiwKICAgICAgY29sdW1uU3BhbjogMiwKICAgICAgY29yZXNEYXRhOiBnZW5lcmF0ZUNwdUNvcmVzKDgpLAogICAgICBkZXNjcmlwdGlvbjogIkludGVsIGk3IC0gOCBjb3JlcyIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAibWVtb3J5IiwKICAgICAgdGl0bGU6ICJNZW1vcnkgVXNhZ2UiLAogICAgICB2YWx1ZTogNjgsCiAgICAgIHR5cGU6ICJwZXJjZW50YWdlIiwKICAgICAgaWNvbjogImx1Y2lkZTpkYXRhYmFzZSIsCiAgICAgIGRlc2NyaXB0aW9uOiAiMTMuNiBHQiBvZiAyMCBHQiIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAiY3B1LWNvcmVzLTE2IiwKICAgICAgdGl0bGU6ICJDUFUgQ29yZXMgKDE2LWNvcmUpIiwKICAgICAgdmFsdWU6IDAsCiAgICAgIHR5cGU6ICJjcHVDb3JlcyIsCiAgICAgIGljb246ICJsdWNpZGU6Y3B1IiwKICAgICAgY29sdW1uU3BhbjogMiwKICAgICAgY29yZXNEYXRhOiBnZW5lcmF0ZUNwdUNvcmVzKDE2KSwKICAgICAgZGVzY3JpcHRpb246ICJBTUQgUnl6ZW4gOSAtIDE2IGNvcmVzIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJuZXR3b3JrIiwKICAgICAgdGl0bGU6ICJOZXR3b3JrIEkvTyIsCiAgICAgIHZhbHVlOiAyNDUsCiAgICAgIHVuaXQ6ICJNQi9zIiwKICAgICAgdHlwZTogInRyZW5kIiwKICAgICAgaWNvbjogImx1Y2lkZTpuZXR3b3JrIiwKICAgICAgdHJlbmREYXRhOiBbMjAwLCAyMjAsIDIzNSwgMjQwLCAyMzgsIDI0NV0sCiAgICAgIGRlc2NyaXB0aW9uOiAidGhyb3VnaHB1dCIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAiY3B1LWNvcmVzLTMyIiwKICAgICAgdGl0bGU6ICJTZXJ2ZXIgQ1BVICgzMi1jb3JlKSIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAiY3B1Q29yZXMiLAogICAgICBpY29uOiAibHVjaWRlOnNlcnZlciIsCiAgICAgIGNvbHVtblNwYW46IDMsCiAgICAgIGNvcmVzRGF0YTogZ2VuZXJhdGVDcHVDb3JlcygzMiksCiAgICAgIGRlc2NyaXB0aW9uOiAiQU1EIEVQWUMgLSAzMiBjb3JlcyIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAiZGlzayIsCiAgICAgIHRpdGxlOiAiRGlzayBVc2FnZSIsCiAgICAgIHZhbHVlOiA0MiwKICAgICAgdHlwZTogInBlcmNlbnRhZ2UiLAogICAgICBpY29uOiAibHVjaWRlOmhhcmQtZHJpdmUiLAogICAgICBkZXNjcmlwdGlvbjogIjQyMCBHQiBvZiAxIFRCIgogICAgfQogIF0sIFsKICAgIHsKICAgICAgbmFtZTogIlJhbmRvbWl6ZSIsCiAgICAgIGljb25OYW1lOiAibHVjaWRlOnNodWZmbGUiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCBncmlkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2NwdS1jb3Jlcy1ncmlkIik7CiAgICAgICAgaWYgKCFncmlkKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNvbnN0IHRpbGVzID0gZ3JpZC50aWxlcy5tYXAoKHRpbGUpID0+IHsKICAgICAgICAgIGlmICh0aWxlLnR5cGUgPT09ICJjcHVDb3JlcyIgJiYgdGlsZS5jb3Jlc0RhdGEpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAuLi50aWxlLAogICAgICAgICAgICAgIGNvcmVzRGF0YTogdGlsZS5jb3Jlc0RhdGEubWFwKChjb3JlMikgPT4gKHsKICAgICAgICAgICAgICAgIC4uLmNvcmUyLAogICAgICAgICAgICAgICAgdXNhZ2U6IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDEwMCkKICAgICAgICAgICAgICB9KSkKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aWxlOwogICAgICAgIH0pOwogICAgICAgIGdyaWQudGlsZXMgPSB0aWxlczsKICAgICAgfQogICAgfQogIF0sIDI1MCwgMTYsICI1LiBJbnRlcmFjdGl2ZSBGZWF0dXJlcyIsICJUaWxlcyB3aXRoIGFjdGlvbnMgYW5kIHJlYWwtdGltZSB1cGRhdGVzIiwgWwogICAgewogICAgICBpZDogImxpdmUtY3B1IiwKICAgICAgdGl0bGU6ICJMaXZlIENQVSIsCiAgICAgIHZhbHVlOiA0NSwKICAgICAgdW5pdDogIiUiLAogICAgICB0eXBlOiAiZ2F1Z2UiLAogICAgICBpY29uOiAibHVjaWRlOmNwdSIsCiAgICAgIGdhdWdlT3B0aW9uczogewogICAgICAgIG1pbjogMCwKICAgICAgICBtYXg6IDEwMCwKICAgICAgICB0aHJlc2hvbGRzOiBbCiAgICAgICAgICB7IHZhbHVlOiAwLCBjb2xvcjogImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiIH0sCiAgICAgICAgICB7IHZhbHVlOiA2MCwgY29sb3I6ICJoc2woNDUuNCA5My40JSA0Ny41JSkiIH0sCiAgICAgICAgICB7IHZhbHVlOiA4MCwgY29sb3I6ICJoc2woMCA4NC4yJSA2MC4yJSkiIH0KICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAibGl2ZS1yZXF1ZXN0cyIsCiAgICAgIHRpdGxlOiAiUmVxdWVzdHMvc2VjIiwKICAgICAgdmFsdWU6IDg5MiwKICAgICAgdHlwZTogInRyZW5kIiwKICAgICAgaWNvbjogImx1Y2lkZTphY3Rpdml0eSIsCiAgICAgIHRyZW5kRGF0YTogWzg1MCwgODYwLCA4NzAsIDg4MCwgODg1LCA4OTAsIDg5Ml0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAibGl2ZS1tZW1vcnkiLAogICAgICB0aXRsZTogIk1lbW9yeSBVc2FnZSIsCiAgICAgIHZhbHVlOiA2MiwKICAgICAgdHlwZTogInBlcmNlbnRhZ2UiLAogICAgICBpY29uOiAibHVjaWRlOmRhdGFiYXNlIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJjb3VudGVyIiwKICAgICAgdGl0bGU6ICJFdmVudCBDb3VudGVyIiwKICAgICAgdmFsdWU6IDAsCiAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICBpY29uOiAibHVjaWRlOnphcCIsCiAgICAgIGFjdGlvbnM6IFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiSW5jcmVtZW50IiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnBsdXMiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjaW50ZXJhY3RpdmUtZ3JpZCIpOwogICAgICAgICAgICBpZiAoIWdyaWQpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBjb25zdCB0aWxlID0gZ3JpZC50aWxlcy5maW5kKCh0OSkgPT4gdDkuaWQgPT09ICJjb3VudGVyIik7CiAgICAgICAgICAgIHRpbGUudmFsdWUgPSB0eXBlb2YgdGlsZS52YWx1ZSA9PT0gIm51bWJlciIgPyB0aWxlLnZhbHVlICsgMSA6IDE7CiAgICAgICAgICAgIGdyaWQudGlsZXMgPSBbLi4uZ3JpZC50aWxlc107CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiUmVzZXQiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6cm90YXRlLWNjdyIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgY29uc3QgZ3JpZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNpbnRlcmFjdGl2ZS1ncmlkIik7CiAgICAgICAgICAgIGlmICghZ3JpZCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSBncmlkLnRpbGVzLmZpbmQoKHQ5KSA9PiB0OS5pZCA9PT0gImNvdW50ZXIiKTsKICAgICAgICAgICAgdGlsZS52YWx1ZSA9IDA7CiAgICAgICAgICAgIGdyaWQudGlsZXMgPSBbLi4uZ3JpZC50aWxlc107CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdCiAgICB9CiAgXSwgWwogICAgewogICAgICBuYW1lOiAiU3RhcnQgTGl2ZSBVcGRhdGVzIiwKICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6cGxheSIsCiAgICAgIGFjdGlvbjogYXN5bmMgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKCF3aW5kb3cubGl2ZVVwZGF0ZUludGVydmFsKSB7CiAgICAgICAgICB3aW5kb3cubGl2ZVVwZGF0ZUludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgICAgICBjb25zdCBncmlkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2ludGVyYWN0aXZlLWdyaWQiKTsKICAgICAgICAgICAgaWYgKGdyaWQpIHsKICAgICAgICAgICAgICBjb25zdCB0aWxlcyA9IFsuLi5ncmlkLnRpbGVzXTsKICAgICAgICAgICAgICBjb25zdCBjcHVUaWxlID0gdGlsZXMuZmluZCgodDkpID0+IHQ5LmlkID09PSAibGl2ZS1jcHUiKTsKICAgICAgICAgICAgICBjcHVUaWxlLnZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBjcHVUaWxlLnZhbHVlICsgKE1hdGgucmFuZG9tKCkgKiAyMCAtIDEwKSkpOwogICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RzVGlsZSA9IHRpbGVzLmZpbmQoKHQ5KSA9PiB0OS5pZCA9PT0gImxpdmUtcmVxdWVzdHMiKTsKICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHJlcXVlc3RzVGlsZS52YWx1ZSArIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDUwIC0gMjUpOwogICAgICAgICAgICAgIHJlcXVlc3RzVGlsZS52YWx1ZSA9IE1hdGgubWF4KDgwMCwgbmV3VmFsdWUpOwogICAgICAgICAgICAgIHJlcXVlc3RzVGlsZS50cmVuZERhdGEgPSBbLi4ucmVxdWVzdHNUaWxlLnRyZW5kRGF0YS5zbGljZSgxKSwgcmVxdWVzdHNUaWxlLnZhbHVlXTsKICAgICAgICAgICAgICBjb25zdCBtZW1vcnlUaWxlID0gdGlsZXMuZmluZCgodDkpID0+IHQ5LmlkID09PSAibGl2ZS1tZW1vcnkiKTsKICAgICAgICAgICAgICBtZW1vcnlUaWxlLnZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBtZW1vcnlUaWxlLnZhbHVlICsgKE1hdGgucmFuZG9tKCkgKiAxMCAtIDUpKSk7CiAgICAgICAgICAgICAgZ3JpZC50aWxlcyA9IHRpbGVzOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCAxZTMpOwogICAgICAgICAgdGhpcy5uYW1lID0gIlN0b3AgTGl2ZSBVcGRhdGVzIjsKICAgICAgICAgIHRoaXMuaWNvbk5hbWUgPSAibHVjaWRlOnBhdXNlIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2xlYXJJbnRlcnZhbCh3aW5kb3cubGl2ZVVwZGF0ZUludGVydmFsKTsKICAgICAgICAgIHdpbmRvdy5saXZlVXBkYXRlSW50ZXJ2YWwgPSBudWxsOwogICAgICAgICAgdGhpcy5uYW1lID0gIlN0YXJ0IExpdmUgVXBkYXRlcyI7CiAgICAgICAgICB0aGlzLmljb25OYW1lID0gImx1Y2lkZTpwbGF5IjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICBdLCAyNTAsIDE2LCAiNi4gQ29kZSBFeGFtcGxlIiwgIkhvdyB0byBpbXBsZW1lbnQgYSBzdGF0cyBncmlkIHdpdGggVHlwZVNjcmlwdCIsIGBjb25zdCB0aWxlczogSVN0YXRzVGlsZVtdID0gWwogIHsKICAgIGlkOiAncmV2ZW51ZScsCiAgICB0aXRsZTogJ1RvdGFsIFJldmVudWUnLAogICAgdmFsdWU6IDEyNTQyMCwKICAgIHVuaXQ6ICckJywKICAgIHR5cGU6ICdudW1iZXInLAogICAgaWNvbjogJ2x1Y2lkZTpkb2xsYXItc2lnbicsCiAgICBkZXNjcmlwdGlvbjogJysxMi41JSBmcm9tIGxhc3QgbW9udGgnLAogICAgYWN0aW9uczogWwogICAgICB7CiAgICAgICAgbmFtZTogJ1ZpZXcgRGV0YWlscycsCiAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6dHJlbmRpbmctdXAnLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgY29uc29sZS5sb2coJ1ZpZXcgcmV2ZW51ZSBkZXRhaWxzJyk7CiAgICAgICAgfQogICAgICB9CiAgICBdCiAgfSwKICB7CiAgICBpZDogJ2NwdScsCiAgICB0aXRsZTogJ0NQVSBVc2FnZScsCiAgICB2YWx1ZTogNzMsCiAgICB1bml0OiAnJScsCiAgICB0eXBlOiAnZ2F1Z2UnLAogICAgaWNvbjogJ2x1Y2lkZTpjcHUnLAogICAgZ2F1Z2VPcHRpb25zOiB7CiAgICAgIG1pbjogMCwKICAgICAgbWF4OiAxMDAsCiAgICAgIHRocmVzaG9sZHM6IFsKICAgICAgICB7IHZhbHVlOiAwLCBjb2xvcjogJ2hzbCgxNDIuMSA3Ni4yJSAzNi4zJSknIH0sCiAgICAgICAgeyB2YWx1ZTogNjAsIGNvbG9yOiAnaHNsKDQ1LjQgOTMuNCUgNDcuNSUpJyB9LAogICAgICAgIHsgdmFsdWU6IDgwLCBjb2xvcjogJ2hzbCgwIDg0LjIlIDYwLjIlKScgfQogICAgICBdCiAgICB9CiAgfQpdOwoKLy8gUmVuZGVyIHRoZSBzdGF0cyBncmlkCmh0bWxcYAogIDxkZWVzLXN0YXRzZ3JpZAogICAgLnRpbGVzPVwke3RpbGVzfQogICAgLm1pblRpbGVXaWR0aD1cJHsyNTB9CiAgICAuZ2FwPVwkezE2fQogICAgLmdyaWRBY3Rpb25zPVwke1sKICAgICAgewogICAgICAgIG5hbWU6ICdSZWZyZXNoJywKICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTpyZWZyZXNoLWN3JywKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCdSZWZyZXNoJykKICAgICAgfQogICAgXX0KICA+PC9kZWVzLXN0YXRzZ3JpZD4KXGA7YCwgIjcuIERpc2sgJiBTdG9yYWdlIFRpbGVzIiwgIlBhcnRpdGlvbiBhbmQgcGh5c2ljYWwgZGlzayB2aXN1YWxpemF0aW9uIHRpbGVzIiwgWwogICAgewogICAgICBpZDogInJvb3QtcGFydGl0aW9uIiwKICAgICAgdGl0bGU6ICJSb290IFBhcnRpdGlvbiIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAicGFydGl0aW9uIiwKICAgICAgaWNvbjogImx1Y2lkZTpmb2xkZXItcm9vdCIsCiAgICAgIHBhcnRpdGlvbkRhdGE6IHsKICAgICAgICB1c2VkOiA2OTgzNDE0MjUxNTIsCiAgICAgICAgLy8gfjY1MCBHQgogICAgICAgIHRvdGFsOiAxMDczNzQxODI0ZTMsCiAgICAgICAgLy8gfjEgVEIKICAgICAgICBmaWxlc3lzdGVtOiAiZXh0NCIsCiAgICAgICAgbW91bnRQb2ludDogIi8iCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAiaG9tZS1wYXJ0aXRpb24iLAogICAgICB0aXRsZTogIkhvbWUgUGFydGl0aW9uIiwKICAgICAgdmFsdWU6IDAsCiAgICAgIHR5cGU6ICJwYXJ0aXRpb24iLAogICAgICBpY29uOiAibHVjaWRlOmhvbWUiLAogICAgICBwYXJ0aXRpb25EYXRhOiB7CiAgICAgICAgdXNlZDogMjE0NzQ4MzY0ODAwLAogICAgICAgIC8vIH4yMDAgR0IKICAgICAgICB0b3RhbDogNTM2ODcwOTEyZTMsCiAgICAgICAgLy8gfjUwMCBHQgogICAgICAgIGZpbGVzeXN0ZW06ICJleHQ0IiwKICAgICAgICBtb3VudFBvaW50OiAiL2hvbWUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAiZGF0YS1wYXJ0aXRpb24iLAogICAgICB0aXRsZTogIkRhdGEgUGFydGl0aW9uIiwKICAgICAgdmFsdWU6IDAsCiAgICAgIHR5cGU6ICJwYXJ0aXRpb24iLAogICAgICBpY29uOiAibHVjaWRlOmRhdGFiYXNlIiwKICAgICAgcGFydGl0aW9uRGF0YTogewogICAgICAgIHVzZWQ6IDE5MzI3MzUyODMyMDAsCiAgICAgICAgLy8gfjEuOCBUQiAoOTAlIC0gY3JpdGljYWwpCiAgICAgICAgdG90YWw6IDIxNDc0ODM2NDhlMywKICAgICAgICAvLyB+MiBUQgogICAgICAgIGZpbGVzeXN0ZW06ICJ4ZnMiLAogICAgICAgIG1vdW50UG9pbnQ6ICIvZGF0YSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgaWQ6ICJudm1lLXNzZCIsCiAgICAgIHRpdGxlOiAiUHJpbWFyeSBOVk1lIiwKICAgICAgdmFsdWU6IDAsCiAgICAgIHR5cGU6ICJkaXNrIiwKICAgICAgaWNvbjogImx1Y2lkZTpoYXJkLWRyaXZlIiwKICAgICAgY29sdW1uU3BhbjogMiwKICAgICAgZGlza0RhdGE6IHsKICAgICAgICBjYXBhY2l0eTogMmUxMiwKICAgICAgICAvLyAyIFRCCiAgICAgICAgbW9kZWw6ICJTYW1zdW5nIDk5MCBQcm8iLAogICAgICAgIHR5cGU6ICJudm1lIiwKICAgICAgICBpb3BzOiB7CiAgICAgICAgICByZWFkOiA3NDUwLAogICAgICAgICAgd3JpdGU6IDY5MDAKICAgICAgICB9LAogICAgICAgIGhlYWx0aDogOTgKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgaWQ6ICJzYXRhLXNzZCIsCiAgICAgIHRpdGxlOiAiU2Vjb25kYXJ5IFNTRCIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAiZGlzayIsCiAgICAgIGljb246ICJsdWNpZGU6aGFyZC1kcml2ZSIsCiAgICAgIGRpc2tEYXRhOiB7CiAgICAgICAgY2FwYWNpdHk6IDFlMTIsCiAgICAgICAgLy8gMSBUQgogICAgICAgIG1vZGVsOiAiQ3J1Y2lhbCBNWDUwMCIsCiAgICAgICAgdHlwZTogInNzZCIsCiAgICAgICAgaW9wczogewogICAgICAgICAgcmVhZDogNTYwLAogICAgICAgICAgd3JpdGU6IDUxMAogICAgICAgIH0sCiAgICAgICAgaGVhbHRoOiA4NQogICAgICB9CiAgICB9LAogICAgewogICAgICBpZDogImhkZC1zdG9yYWdlIiwKICAgICAgdGl0bGU6ICJCYWNrdXAgSEREIiwKICAgICAgdmFsdWU6IDAsCiAgICAgIHR5cGU6ICJkaXNrIiwKICAgICAgaWNvbjogImx1Y2lkZTphcmNoaXZlIiwKICAgICAgZGlza0RhdGE6IHsKICAgICAgICBjYXBhY2l0eTogOGUxMiwKICAgICAgICAvLyA4IFRCCiAgICAgICAgbW9kZWw6ICJTZWFnYXRlIElyb25Xb2xmIiwKICAgICAgICB0eXBlOiAiaGRkIiwKICAgICAgICBpb3BzOiB7CiAgICAgICAgICByZWFkOiAyMTAsCiAgICAgICAgICB3cml0ZTogMTk1CiAgICAgICAgfSwKICAgICAgICBoZWFsdGg6IDQyCiAgICAgIH0KICAgIH0KICBdLCAyODAsIDE2KTsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWJhc2UvZGVlcy1pbnB1dC1iYXNlLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CnZhciBfX2VzRGVjb3JhdGUxMyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMTQgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNJbnB1dEJhc2UgPSAoKCkgPT4gewogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbGF5b3V0TW9kZV9kZWNvcmF0b3JzOwogIGxldCBfbGF5b3V0TW9kZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xheW91dE1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsUG9zaXRpb25fZGVjb3JhdG9yczsKICBsZXQgX2xhYmVsUG9zaXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYWJlbFBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9rZXlfZGVjb3JhdG9yczsKICBsZXQgX2tleV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2tleV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFiZWxfZGVjb3JhdG9yczsKICBsZXQgX2xhYmVsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3JlcXVpcmVkX2RlY29yYXRvcnM7CiAgbGV0IF9yZXF1aXJlZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3JlcXVpcmVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9kZWNvcmF0b3JzOwogIGxldCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGVzY3JpcHRpb25fZGVjb3JhdG9yczsKICBsZXQgX2Rlc2NyaXB0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGVzY3JpcHRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICByZXR1cm4gY2xhc3MgRGVlc0lucHV0QmFzZSBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbGF5b3V0TW9kZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2xhYmVsUG9zaXRpb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9rZXlfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9sYWJlbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3JlcXVpcmVkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2Rpc2FibGVkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2Rlc2NyaXB0aW9uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfX2VzRGVjb3JhdGUxMyh0aGlzLCBudWxsLCBfbGF5b3V0TW9kZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsYXlvdXRNb2RlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYXlvdXRNb2RlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxheW91dE1vZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxheW91dE1vZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGF5b3V0TW9kZV9pbml0aWFsaXplcnMsIF9sYXlvdXRNb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTModGhpcywgbnVsbCwgX2xhYmVsUG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFiZWxQb3NpdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGFiZWxQb3NpdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYWJlbFBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sYWJlbFBvc2l0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhYmVsUG9zaXRpb25faW5pdGlhbGl6ZXJzLCBfbGFiZWxQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEzKHRoaXMsIG51bGwsIF9rZXlfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAia2V5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJrZXkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoua2V5LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5rZXkgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfa2V5X2luaXRpYWxpemVycywgX2tleV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEzKHRoaXMsIG51bGwsIF9sYWJlbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsYWJlbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGFiZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGFiZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxhYmVsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhYmVsX2luaXRpYWxpemVycywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTModGhpcywgbnVsbCwgX3JlcXVpcmVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJlcXVpcmVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZXF1aXJlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZXF1aXJlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucmVxdWlyZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzLCBfcmVxdWlyZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMyh0aGlzLCBudWxsLCBfZGlzYWJsZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlzYWJsZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc2FibGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXNhYmxlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEzKHRoaXMsIG51bGwsIF9kZXNjcmlwdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkZXNjcmlwdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZGVzY3JpcHRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGVzY3JpcHRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRlc2NyaXB0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Rlc2NyaXB0aW9uX2luaXRpYWxpemVycywgX2Rlc2NyaXB0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgI2xheW91dE1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2xheW91dE1vZGVfaW5pdGlhbGl6ZXJzLCAiYXV0byIpOwogICAgLyoqCiAgICAgKiBMYXlvdXQgbW9kZSBmb3IgdGhlIGlucHV0IGNvbXBvbmVudAogICAgICogLSB2ZXJ0aWNhbDogVHJhZGl0aW9uYWwgZm9ybSBsYXlvdXQgKGxhYmVsIG9uIHRvcCkKICAgICAqIC0gaG9yaXpvbnRhbDogSW5saW5lIGxheW91dCAobGFiZWwgcG9zaXRpb24gY29uZmlndXJhYmxlKQogICAgICogLSBhdXRvOiBEZXRlY3QgZnJvbSBwYXJlbnQgY29udGV4dAogICAgICovCiAgICBnZXQgbGF5b3V0TW9kZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xheW91dE1vZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYXlvdXRNb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNsYXlvdXRNb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbGFiZWxQb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2xheW91dE1vZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9sYWJlbFBvc2l0aW9uX2luaXRpYWxpemVycywgInRvcCIpKTsKICAgIC8qKgogICAgICogUG9zaXRpb24gb2YgdGhlIGxhYmVsIHJlbGF0aXZlIHRvIHRoZSBpbnB1dAogICAgICovCiAgICBnZXQgbGFiZWxQb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xhYmVsUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYWJlbFBvc2l0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNsYWJlbFBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAja2V5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfbGFiZWxQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2tleV9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgLyoqCiAgICAgKiBDb21tb24gcHJvcGVydGllcyBmb3IgYWxsIGlucHV0cwogICAgICovCiAgICBnZXQga2V5KCkgewogICAgICByZXR1cm4gdGhpcy4ja2V5X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQga2V5KHZhbHVlMikgewogICAgICB0aGlzLiNrZXlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2tleV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2xhYmVsX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgbGFiZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxhYmVsKHZhbHVlMikgewogICAgICB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3JlcXVpcmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9yZXF1aXJlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgcmVxdWlyZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJlcXVpcmVkKHZhbHVlMikgewogICAgICB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfcmVxdWlyZWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgZGlzYWJsZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkaXNhYmxlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRpc2FibGVkKHZhbHVlMikgewogICAgICB0aGlzLiNkaXNhYmxlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rlc2NyaXB0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfZGlzYWJsZWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9kZXNjcmlwdGlvbl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IGRlc2NyaXB0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jZGVzY3JpcHRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkZXNjcmlwdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jZGVzY3JpcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8qKgogICAgICogQ29tbW9uIHN0eWxlcyBmb3IgYWxsIGlucHV0IGNvbXBvbmVudHMKICAgICAqLwogICAgc3RhdGljIGdldCBiYXNlU3R5bGVzKCkgewogICAgICByZXR1cm4gWwogICAgICAgIGlgCiAgICAgICAgLyogQ1NTIFZhcmlhYmxlcyBmb3IgY29uc2lzdGVudCBzcGFjaW5nICovCiAgICAgICAgOmhvc3QgewogICAgICAgICAgLS1kZWVzLWlucHV0LXNwYWNpbmctdW5pdDogOHB4OwogICAgICAgICAgLS1kZWVzLWlucHV0LXZlcnRpY2FsLWdhcDogY2FsYyh2YXIoLS1kZWVzLWlucHV0LXNwYWNpbmctdW5pdCkgKiAyKTsgLyogMTZweCAqLwogICAgICAgICAgLS1kZWVzLWlucHV0LWhvcml6b250YWwtZ2FwOiBjYWxjKHZhcigtLWRlZXMtaW5wdXQtc3BhY2luZy11bml0KSAqIDIpOyAvKiAxNnB4ICovCiAgICAgICAgICAtLWRlZXMtaW5wdXQtbGFiZWwtZ2FwOiB2YXIoLS1kZWVzLWlucHV0LXNwYWNpbmctdW5pdCk7IC8qIDhweCAqLwogICAgICAgIH0KCiAgICAgICAgLyogRGVmYXVsdCB2ZXJ0aWNhbCBzdGFja2luZyBtb2RlIChmb3IgZm9ybXMpICovCiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1kZWVzLWlucHV0LXZlcnRpY2FsLWdhcCk7CiAgICAgICAgfQoKICAgICAgICAvKiBMYXN0IGNoaWxkIGluIGNvbnRhaW5lciBzaG91bGQgaGF2ZSBubyBib3R0b20gbWFyZ2luICovCiAgICAgICAgOmhvc3QoOmxhc3QtY2hpbGQpIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgfQoKICAgICAgICAvKiBIb3Jpem9udGFsIGxheW91dCBtb2RlIC0gYWN0aXZhdGVkIGJ5IGF0dHJpYnV0ZSAqLwogICAgICAgIDpob3N0KFtsYXlvdXQtbW9kZT0iaG9yaXpvbnRhbCJdKSB7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLWRlZXMtaW5wdXQtaG9yaXpvbnRhbC1nYXApOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtsYXlvdXQtbW9kZT0iaG9yaXpvbnRhbCJdOmxhc3QtY2hpbGQpIHsKICAgICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgICAgICB9CgogICAgICAgIC8qIEF1dG8gbW9kZSAtIGluaGVyaXQgZnJvbSBwYXJlbnQgZGVlcy1mb3JtIGlmIHByZXNlbnQgKi8KCiAgICAgICAgLyogTGFiZWwgcG9zaXRpb24gdmFyaWF0aW9ucyAqLwogICAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0ibGVmdCJdKSAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIDFmcjsKICAgICAgICAgIGdhcDogdmFyKC0tZGVlcy1pbnB1dC1sYWJlbC1nYXApOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0icmlnaHQiXSkgLmlucHV0LXdyYXBwZXIgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIGF1dG87CiAgICAgICAgICBnYXA6IHZhcigtLWRlZXMtaW5wdXQtbGFiZWwtZ2FwKTsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249InRvcCJdKSAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0ibm9uZSJdKSBkZWVzLWxhYmVsIHsKICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgfQogICAgICBgCiAgICAgIF07CiAgICB9CiAgICAvKioKICAgICAqIFN1YmplY3QgZm9yIHZhbHVlIGNoYW5nZXMgdGhhdCBhbGwgaW5wdXRzIHNob3VsZCBpbXBsZW1lbnQKICAgICAqLwogICAgY2hhbmdlU3ViamVjdCA9IChfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9kZXNjcmlwdGlvbl9leHRyYUluaXRpYWxpemVycyksIG5ldyBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRyeC5yeGpzLlN1YmplY3QoKSk7CiAgICAvKioKICAgICAqIENhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGNvbm5lY3RlZCB0byB0aGUgRE9NCiAgICAgKiBTZXRzIHVwIGxheW91dCBtb2RlIGRldGVjdGlvbgogICAgICovCiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy5kZXRlY3RMYXlvdXRNb2RlKCk7CiAgICB9CiAgICAvKioKICAgICAqIERldGVjdHMgdGhlIGFwcHJvcHJpYXRlIGxheW91dCBtb2RlIGJhc2VkIG9uIHBhcmVudCBjb250ZXh0CiAgICAgKi8KICAgIGRldGVjdExheW91dE1vZGUoKSB7CiAgICAgIGlmICh0aGlzLmxheW91dE1vZGUgIT09ICJhdXRvIikgewogICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJsYXlvdXQtbW9kZSIsIHRoaXMubGF5b3V0TW9kZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHBhcmVudEZvcm0gPSB0aGlzLmNsb3Nlc3QoImRlZXMtZm9ybSIpOwogICAgICBpZiAocGFyZW50Rm9ybSAmJiBwYXJlbnRGb3JtLmhhc0F0dHJpYnV0ZSgiaG9yaXpvbnRhbC1sYXlvdXQiKSkgewogICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJsYXlvdXQtbW9kZSIsICJob3Jpem9udGFsIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoImxheW91dC1tb2RlIiwgInZlcnRpY2FsIik7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogVXBkYXRlcyB0aGUgbGF5b3V0IG1vZGUgYXR0cmlidXRlIHdoZW4gcHJvcGVydHkgY2hhbmdlcwogICAgICovCiAgICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJsYXlvdXRNb2RlIikpIHsKICAgICAgICB0aGlzLmRldGVjdExheW91dE1vZGUoKTsKICAgICAgfQogICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJsYWJlbFBvc2l0aW9uIikpIHsKICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgibGFiZWwtcG9zaXRpb24iLCB0aGlzLmxhYmVsUG9zaXRpb24pOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFN0YW5kYXJkIG1ldGhvZCBmb3IgZnJlZXppbmcgaW5wdXQgKGRpc2FibGluZykKICAgICAqLwogICAgYXN5bmMgZnJlZXplKCkgewogICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTsKICAgIH0KICAgIC8qKgogICAgICogU3RhbmRhcmQgbWV0aG9kIGZvciB1bmZyZWV6aW5nIGlucHV0IChlbmFibGluZykKICAgICAqLwogICAgYXN5bmMgdW5mcmVlemUoKSB7CiAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTsKICAgIH0KICB9Owp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtY2hlY2tib3gvZGVlcy1pbnB1dC1jaGVja2JveC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzggPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGNoZWNrYm94ZXMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtY2hlY2tib3giKTsKICBjb25zdCBzZWxlY3RBbGxCdG4gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNzZWxlY3QtYWxsLWJ0biIpOwogIGNvbnN0IGNsZWFyQWxsQnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjY2xlYXItYWxsLWJ0biIpOwogIGlmIChzZWxlY3RBbGxCdG4gJiYgY2xlYXJBbGxCdG4pIHsKICAgIHNlbGVjdEFsbEJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgY2hlY2tib3hlcy5mb3JFYWNoKChjaGVja2JveCkgPT4gewogICAgICAgIGlmICghY2hlY2tib3guZGlzYWJsZWQgJiYgY2hlY2tib3gua2V5Py5zdGFydHNXaXRoKCJmZWF0dXJlIikpIHsKICAgICAgICAgIGNoZWNrYm94LnZhbHVlID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgICBjbGVhckFsbEJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgY2hlY2tib3hlcy5mb3JFYWNoKChjaGVja2JveCkgPT4gewogICAgICAgIGlmICghY2hlY2tib3guZGlzYWJsZWQgJiYgY2hlY2tib3gua2V5Py5zdGFydHNXaXRoKCJmZWF0dXJlIikpIHsKICAgICAgICAgIGNoZWNrYm94LnZhbHVlID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0KfX0+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNoZWNrYm94LWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaG9yaXpvbnRhbC1jaGVja2JveGVzIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5pbnRlcmFjdGl2ZS1zZWN0aW9uIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm91dHB1dC10ZXh0IHsKICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwgImhzbCgyMTAgNDAlIDgwJSkiKX07CiAgICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTglKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIG1pbi1oZWlnaHQ6IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5mb3JtLXNlY3Rpb24gewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCAiaHNsKDAgMCUgNyUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmJ1dHRvbi1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZmVhdHVyZS1saXN0IHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxMS44JSkiKX07CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgQ2hlY2tib3hlcyJ9IC5zdWJ0aXRsZT0keyJTaW1wbGUgY2hlY2tib3ggZXhhbXBsZXMgd2l0aCB2YXJpb3VzIGxhYmVscyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiSSBhZ3JlZSB0byB0aGUgVGVybXMgYW5kIENvbmRpdGlvbnMifSAKICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgLmtleT0keyJ0ZXJtcyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IlN1YnNjcmliZSB0byBuZXdzbGV0dGVyIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAua2V5PSR7Im5ld3NsZXR0ZXIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJFbmFibGUgbm90aWZpY2F0aW9ucyJ9IAogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlJlY2VpdmUgZW1haWwgdXBkYXRlcyBhYm91dCB5b3VyIGFjY291bnQifQogICAgICAgICAgICAua2V5PSR7Im5vdGlmaWNhdGlvbnMifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkNoZWNrYm94IFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgY2hlY2tib3ggc3RhdGVzIGFuZCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiRGVmYXVsdCBzdGF0ZSJ9IAogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiQ2hlY2tlZCBzdGF0ZSJ9IAogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCB1bmNoZWNrZWQifSAKICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIGNoZWNrZWQifSAKICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiUmVxdWlyZWQgY2hlY2tib3gifSAKICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgLmtleT0keyJyZXF1aXJlZCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiSG9yaXpvbnRhbCBMYXlvdXQifSAuc3VidGl0bGU9JHsiQ2hlY2tib3hlcyBhcnJhbmdlZCBob3Jpem9udGFsbHkgZm9yIGNvbXBhY3QgZm9ybXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWNoZWNrYm94ZXMiPgogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJPcHRpb24gQSJ9IAogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5rZXk9JHsib3B0aW9uQSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7Ik9wdGlvbiBCIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAua2V5PSR7Im9wdGlvbkIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJPcHRpb24gQyJ9IAogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5rZXk9JHsib3B0aW9uQyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7Ik9wdGlvbiBEIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAua2V5PSR7Im9wdGlvbkQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkZlYXR1cmUgU2VsZWN0aW9uIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiQ29tbW9uIHVzZSBjYXNlIGZvciBmZWF0dXJlIHRvZ2dsZXMgd2l0aCBiYXRjaCBvcGVyYXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBpZD0ic2VsZWN0LWFsbC1idG4iIHR5cGU9InNlY29uZGFyeSI+U2VsZWN0IEFsbDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gaWQ9ImNsZWFyLWFsbC1idG4iIHR5cGU9InNlY29uZGFyeSI+Q2xlYXIgQWxsPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWxpc3QiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtZ3JvdXAiPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiRGFyayBNb2RlIFN1cHBvcnQifSAKICAgICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAgIC5rZXk9JHsiZmVhdHVyZTEifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkVtYWlsIE5vdGlmaWNhdGlvbnMifSAKICAgICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAgIC5rZXk9JHsiZmVhdHVyZTIifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7IlR3by1GYWN0b3IgQXV0aGVudGljYXRpb24ifSAKICAgICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgICAua2V5PSR7ImZlYXR1cmUzIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJBUEkgQWNjZXNzIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgICAua2V5PSR7ImZlYXR1cmU0In0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJBZHZhbmNlZCBBbmFseXRpY3MifSAKICAgICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgICAua2V5PSR7ImZlYXR1cmU1In0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUHJpdmFjeSBTZXR0aW5ncyBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IkNoZWNrYm94ZXMgaW4gYSB0eXBpY2FsIGZvcm0gY29udGV4dCJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tc2VjdGlvbiI+CiAgICAgICAgICA8aDQgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlByaXZhY3kgUHJlZmVyZW5jZXM8L2g0PgogICAgICAgICAgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveC1ncm91cCI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJTaGFyZSBhbmFseXRpY3MgZGF0YSJ9IAogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkhlbHAgdXMgaW1wcm92ZSBieSBzaGFyaW5nIGFub255bW91cyB1c2FnZSBkYXRhIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJQZXJzb25hbGl6ZWQgcmVjb21tZW5kYXRpb25zIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiR2V0IHN1Z2dlc3Rpb25zIGJhc2VkIG9uIHlvdXIgYWN0aXZpdHkifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7Ik1hcmtldGluZyBjb21tdW5pY2F0aW9ucyJ9IAogICAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJSZWNlaXZlIHByb21vdGlvbmFsIGVtYWlscyBhbmQgc3BlY2lhbCBvZmZlcnMifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7IlRoaXJkLXBhcnR5IGludGVncmF0aW9ucyJ9IAogICAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBbGxvdyBhcHByb3ZlZCBwYXJ0bmVycyB0byBhY2Nlc3MgeW91ciBkYXRhIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiSW50ZXJhY3RpdmUgRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJDbGljayBjaGVja2JveGVzIHRvIHNlZSB2YWx1ZSBjaGFuZ2VzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtZ3JvdXAiPgogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJGZWF0dXJlIHRvZ2dsZSJ9IAogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgQGNoYW5nZVN1YmplY3Q9JHsoZXZlbnQpID0+IHsKICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjY2hlY2tib3gtb3V0cHV0Iik7CiAgaWYgKG91dHB1dCAmJiBldmVudC5kZXRhaWwpIHsKICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGV2ZW50LmRldGFpbC5nZXRWYWx1ZSgpOwogICAgb3V0cHV0LnRleHRDb250ZW50ID0gYEZlYXR1cmUgaXMgJHtpc0NoZWNrZWQgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQifWA7CiAgfQp9fQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJEZWJ1ZyBtb2RlIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICBAY2hhbmdlU3ViamVjdD0keyhldmVudCkgPT4gewogIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNkZWJ1Zy1vdXRwdXQiKTsKICBpZiAob3V0cHV0ICYmIGV2ZW50LmRldGFpbCkgewogICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQuZGV0YWlsLmdldFZhbHVlKCk7CiAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBgRGVidWcgbW9kZTogJHtpc0NoZWNrZWQgPyAiT04iIDogIk9GRiJ9YDsKICB9Cn19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImludGVyYWN0aXZlLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBpZD0iY2hlY2tib3gtb3V0cHV0IiBjbGFzcz0ib3V0cHV0LXRleHQiPkZlYXR1cmUgaXMgZGlzYWJsZWQ8L2Rpdj4KICAgICAgICAgIDxkaXYgaWQ9ImRlYnVnLW91dHB1dCIgY2xhc3M9Im91dHB1dC10ZXh0IiBzdHlsZT0ibWFyZ2luLXRvcDogOHB4OyI+RGVidWcgbW9kZTogT0ZGPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWNoZWNrYm94L2RlZXMtaW5wdXQtY2hlY2tib3guanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMTQgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczE1ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRDaGVja2JveCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtY2hlY2tib3giKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX3ZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF92YWx1ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbmRldGVybWluYXRlX2RlY29yYXRvcnM7CiAgbGV0IF9pbmRldGVybWluYXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5kZXRlcm1pbmF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXRDaGVja2JveDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuCiAgICAgIH0pXTsKICAgICAgX2luZGV0ZXJtaW5hdGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGUxNCh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE0KHRoaXMsIG51bGwsIF9pbmRldGVybWluYXRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImluZGV0ZXJtaW5hdGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImluZGV0ZXJtaW5hdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5kZXRlcm1pbmF0ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaW5kZXRlcm1pbmF0ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbmRldGVybWluYXRlX2luaXRpYWxpemVycywgX2luZGV0ZXJtaW5hdGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dENoZWNrYm94MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM4OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMTUodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCB2YWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaW5kZXRlcm1pbmF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTUodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNSh0aGlzLCBfaW5kZXRlcm1pbmF0ZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaW5kZXRlcm1pbmF0ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2luZGV0ZXJtaW5hdGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpbmRldGVybWluYXRlKHZhbHVlMikgewogICAgICB0aGlzLiNpbmRldGVybWluYXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxNSh0aGlzLCBfaW5kZXRlcm1pbmF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIHRoaXMubGFiZWxQb3NpdGlvbiA9ICJyaWdodCI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgICAgKiB7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIH0KCiAgICAgICAgOmhvc3QgewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzR2Vpc3RGb250RmFtaWx5fTsKICAgICAgICB9CgogICAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tib3ggewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxcHg7CiAgICAgICAgfQoKICAgICAgICAubWFpbmNvbnRhaW5lcjpob3ZlciAuY2hlY2tib3ggewogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jaGVja2JveC5zZWxlY3RlZCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIH0KCiAgICAgICAgLmNoZWNrYm94OmZvY3VzLXZpc2libGUgewogICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlIC8gMC4xKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICAgIH0KCiAgICAgICAgLyogQ2hlY2ttYXJrIHVzaW5nIEx1Y2lkZSBpY29uIHN0eWxlICovCiAgICAgICAgLmNoZWNrYm94IC5jaGVja21hcmsgewogICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2U7CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tib3guc2VsZWN0ZWQgLmNoZWNrbWFyayB7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIH0KCiAgICAgICAgLmNoZWNrYm94IC5jaGVja21hcmsgc3ZnIHsKICAgICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgICAgICB9CgogICAgICAgIC8qIERpc2FibGVkIHN0YXRlICovCiAgICAgICAgLm1haW5jb250YWluZXIuZGlzYWJsZWQgewogICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICB9CgogICAgICAgIC5jaGVja2JveC5kaXNhYmxlZCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgfQoKICAgICAgICAvKiBMYWJlbCAqLwogICAgICAgIC5sYWJlbC1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDJweDsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tib3gtbGFiZWwgewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjE1cyBlYXNlOwogICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgfQoKICAgICAgICAubWFpbmNvbnRhaW5lcjpob3ZlciAuY2hlY2tib3gtbGFiZWwgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB9CgogICAgICAgIC5tYWluY29udGFpbmVyLmRpc2FibGVkOmhvdmVyIC5jaGVja2JveC1sYWJlbCB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICB9CgogICAgICAgIC8qIERlc2NyaXB0aW9uICovCiAgICAgICAgLmRlc2NyaXB0aW9uLXRleHQgewogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIgJHt0aGlzLmRpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSIgQGNsaWNrPSIke3RoaXMudG9nZ2xlU2VsZWN0ZWR9Ij4KICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJjaGVja2JveCAke3RoaXMudmFsdWUgPyAic2VsZWN0ZWQiIDogIiJ9ICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iIAogICAgICAgICAgICB0YWJpbmRleD0iJHt0aGlzLmRpc2FibGVkID8gIi0xIiA6ICIwIn0iCiAgICAgICAgICAgIEBrZXlkb3duPSIke3RoaXMuaGFuZGxlS2V5ZG93bn0iCiAgICAgICAgICA+CiAgICAgICAgICAgICR7dGhpcy52YWx1ZSA/IGIyYAogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hlY2ttYXJrIj4KICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMCA2TDkgMTdMNCAxMiIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgogICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICBgIDogdGhpcy5pbmRldGVybWluYXRlID8gYjJgCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoZWNrbWFyayI+CiAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTUgMTJIMTkiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgYCA6IGIyYGB9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsLWNvbnRhaW5lciI+CiAgICAgICAgICAgICR7dGhpcy5sYWJlbCA/IGIyYDxkaXYgY2xhc3M9ImNoZWNrYm94LWxhYmVsIj4ke3RoaXMubGFiZWx9PC9kaXY+YCA6ICIifQogICAgICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24gPyBiMmA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbi10ZXh0Ij4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+YCA6ICIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIHRvZ2dsZVNlbGVjdGVkKCkgewogICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWU7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm5ld1ZhbHVlIiwgewogICAgICAgIGRldGFpbDogdGhpcy52YWx1ZSwKICAgICAgICBidWJibGVzOiB0cnVlCiAgICAgIH0pKTsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgIH0KICAgIGZvY3VzKCkgewogICAgICBjb25zdCBjaGVja2JveERpdiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY2hlY2tib3giKTsKICAgICAgaWYgKGNoZWNrYm94RGl2KSB7CiAgICAgICAgY2hlY2tib3hEaXYuZm9jdXMoKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlS2V5ZG93bihldmVudCkgewogICAgICBpZiAoZXZlbnQua2V5ID09PSAiICIgfHwgZXZlbnQua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdGVkKCk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTUoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dENoZWNrYm94MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwY29sb3JzLmpzCnZhciBjb2xvcnNfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChjb2xvcnNfZXhwb3J0cywgewogIGJyaWdodDogKCkgPT4gYnJpZ2h0LAogIGRhcms6ICgpID0+IGRhcmsKfSk7CnZhciBkYXJrID0gewogIGJsdWU6ICIjMDA1MGI5IiwKICBibHVlQWN0aXZlOiAiIzAwNjlmMiIsCiAgYmx1ZU11dGVkOiAiIzAxMjQ1MiIsCiAgdGV4dDogIiNmZmZmZmYiCn07CnZhciBicmlnaHQgPSB7CiAgYmx1ZTogIiMwMDUwYjkiLAogIGJsdWVBY3RpdmU6ICIjMDA2OWYyIiwKICBibHVlTXV0ZWQ6ICIjMDA2OWYyIiwKICB0ZXh0OiAiIzMzMzMzMyIKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1tb2RhbC9kZWVzLW1vZGFsLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jOSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjhmOWZhIiwgIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzMzMyIpfTsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tc2VjdGlvbiBoMyB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMyIsICIjZmZmIil9OwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1zZWN0aW9uIHAgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NiIsICIjOTk5Iil9OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24tZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDE1MHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+SGVhZGVyIEJ1dHRvbnM8L2gzPgogICAgICA8cD5Nb2RhbHMgY2FuIGhhdmUgb3B0aW9uYWwgaGVhZGVyIGJ1dHRvbnMgZm9yIGhlbHAgYW5kIGNsb3NpbmcuPC9wPgogICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiV2l0aCBIZWxwIEJ1dHRvbiIsCiAgICBzaG93SGVscEJ1dHRvbjogdHJ1ZSwKICAgIG9uSGVscDogYXN5bmMgKCkgPT4gewogICAgICBjb25zdCBoZWxwTW9kYWwgPSBhd2FpdCBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgICAgaGVhZGluZzogIkhlbHAiLAogICAgICAgIHdpZHRoOiAic21hbGwiLAogICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSwKICAgICAgICBzaG93SGVscEJ1dHRvbjogZmFsc2UsCiAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgICAgIDxwPlRoaXMgaXMgdGhlIGhlbHAgY29udGVudCBmb3IgdGhlIG1vZGFsLjwvcD4KICAgICAgICAgICAgICAgICAgPHA+WW91IGNhbiBwcm92aWRlIGNvbnRleHQtc3BlY2lmaWMgaGVscCBoZXJlLjwvcD4KICAgICAgICAgICAgICAgIGAsCiAgICAgICAgbWVudU9wdGlvbnM6IFt7CiAgICAgICAgICBuYW1lOiAiR290IGl0IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgICAgICB9XQogICAgICB9KTsKICAgIH0sCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGhhcyBhIGhlbHAgYnV0dG9uIGluIHRoZSBoZWFkZXIuIENsaWNrIGl0IHRvIHNlZSBoZWxwIGNvbnRlbnQuPC9wPgogICAgICAgICAgICAgIDxwPlRoZSBjbG9zZSBidXR0b24gaXMgYWxzbyB2aXNpYmxlIGJ5IGRlZmF1bHQuPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJPSyIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PldpdGggSGVscCBCdXR0b248L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIk5vIENsb3NlIEJ1dHRvbiIsCiAgICBzaG93Q2xvc2VCdXR0b246IGZhbHNlLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBoYXMgbm8gY2xvc2UgYnV0dG9uIGluIHRoZSBoZWFkZXIuPC9wPgogICAgICAgICAgICAgIDxwPllvdSBtdXN0IHVzZSB0aGUgYWN0aW9uIGJ1dHRvbnMgb3IgY2xpY2sgb3V0c2lkZSB0byBjbG9zZSBpdC48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkNsb3NlIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+Tm8gQ2xvc2UgQnV0dG9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJCb3RoIEJ1dHRvbnMiLAogICAgc2hvd0hlbHBCdXR0b246IHRydWUsCiAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsCiAgICBvbkhlbHA6ICgpID0+IGFsZXJ0KCJIZWxwIGNsaWNrZWQhIiksCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGhhcyBib3RoIGhlbHAgYW5kIGNsb3NlIGJ1dHRvbnMuPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJEb25lIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+Qm90aCBCdXR0b25zPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJDbGVhbiBIZWFkZXIiLAogICAgc2hvd0Nsb3NlQnV0dG9uOiBmYWxzZSwKICAgIHNob3dIZWxwQnV0dG9uOiBmYWxzZSwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgaGFzIGEgY2xlYW4gaGVhZGVyIHdpdGggbm8gYnV0dG9ucy48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkNsb3NlIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+Q2xlYW4gSGVhZGVyPC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPk1vZGFsIFdpZHRoIFZhcmlhdGlvbnM8L2gzPgogICAgICA8cD5Nb2RhbHMgY2FuIGhhdmUgZGlmZmVyZW50IHdpZHRoczogc21hbGwsIG1lZGl1bSwgbGFyZ2UsIGZ1bGxzY3JlZW4sIG9yIGN1c3RvbSBwaXhlbCB2YWx1ZXMuPC9wPgogICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiU21hbGwgTW9kYWwiLAogICAgd2lkdGg6ICJzbWFsbCIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIGlzIGEgc21hbGwgbW9kYWwgd2l0aCBhIHdpZHRoIG9mIDM4MHB4LiBQZXJmZWN0IGZvciBzaW1wbGUgY29uZmlybWF0aW9ucyBvciBicmllZiBtZXNzYWdlcy48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkNhbmNlbCIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH0sIHsKICAgICAgbmFtZTogIk9LIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+U21hbGwgTW9kYWw8L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIk1lZGl1bSBNb2RhbCAoRGVmYXVsdCkiLAogICAgd2lkdGg6ICJtZWRpdW0iLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IlVzZXJuYW1lIn0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJFbWFpbCJ9IC5pbnB1dFR5cGU9JHsiZW1haWwifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IlBhc3N3b3JkIn0gLmlucHV0VHlwZT0keyJwYXNzd29yZCJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9LCB7CiAgICAgIG5hbWU6ICJTaWduIFVwIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+TWVkaXVtIE1vZGFsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJMYXJnZSBNb2RhbCIsCiAgICB3aWR0aDogImxhcmdlIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxoND5XaWRlIENvbnRlbnQgQXJlYTwvaDQ+CiAgICAgICAgICAgICAgPHA+VGhpcyBsYXJnZSBtb2RhbCBpcyA4MDBweCB3aWRlIGFuZCBwZXJmZWN0IGZvciBkaXNwbGF5aW5nIG1vcmUgY29tcGxleCBjb250ZW50IGxpa2UgZm9ybXMgd2l0aCBtdWx0aXBsZSBjb2x1bW5zLCB0YWJsZXMsIG9yIGRldGFpbGVkIGluZm9ybWF0aW9uLjwvcD4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7IGdhcDogMTZweDsgbWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiRmlyc3QgTmFtZSJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiTGFzdCBOYW1lIn0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJDb21wYW55In0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJQb3NpdGlvbiJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9LCB7CiAgICAgIG5hbWU6ICJTYXZlIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+TGFyZ2UgTW9kYWw8L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIkZ1bGxzY3JlZW4gRWRpdG9yIiwKICAgIHdpZHRoOiAiZnVsbHNjcmVlbiIsCiAgICBzaG93SGVscEJ1dHRvbjogdHJ1ZSwKICAgIG9uSGVscDogYXN5bmMgKCkgPT4gewogICAgICBhbGVydCgiSW4gYSByZWFsIGFwcCwgdGhpcyB3b3VsZCBzaG93IGVkaXRvciBkb2N1bWVudGF0aW9uIik7CiAgICB9LAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPGg0PkZ1bGxzY3JlZW4gRXhwZXJpZW5jZSB3aXRoIEhlYWRlciBDb250cm9sczwvaDQ+CiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCB0YWtlcyB1cCBhbG1vc3QgdGhlIGVudGlyZSB2aWV3cG9ydCB3aXRoIGEgMjBweCBtYXJnaW4gb24gYWxsIHNpZGVzLiBUaGUgaGVhZGVyIGJ1dHRvbnMgYXJlIHBhcnRpY3VsYXJseSB1c2VmdWwgaW4gZnVsbHNjcmVlbiBtb2RlLjwvcD4KICAgICAgICAgICAgICA8cD5UaGUgY29udGVudCBhcmVhIGNhbiBiZSBhcyB0YWxsIGFzIG5lZWRlZCBhbmQgd2lsbCBzY3JvbGwgaWYgbmVjZXNzYXJ5LjwvcD4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJoZWlnaHQ6IDIwMHB4OyBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YwZjBmMCIsICIjMmEyYTJhIil9OyBib3JkZXItcmFkaXVzOiA4cHg7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBtYXJnaW4tdG9wOiAxNnB4OyI+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX0iPkxhcmdlIGNvbnRlbnQgYXJlYTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCwKICAgIG1lbnVPcHRpb25zOiBbewogICAgICBuYW1lOiAiU2F2ZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH0sIHsKICAgICAgbmFtZTogIkNhbmNlbCIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PkZ1bGxzY3JlZW4gTW9kYWw8L2RlZXMtYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+Q3VzdG9tIFdpZHRoICYgQ29uc3RyYWludHM8L2gzPgogICAgICA8cD5Zb3UgY2FuIGFsc28gc2V0IGN1c3RvbSBwaXhlbCB3aWR0aHMgYW5kIG1pbi9tYXggY29uc3RyYWludHMuPC9wPgogICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiQ3VzdG9tIFdpZHRoICg3MDBweCkiLAogICAgd2lkdGg6IDcwMCwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgaGFzIGEgY3VzdG9tIHdpZHRoIG9mIGV4YWN0bHkgNzAwIHBpeGVscy48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkNsb3NlIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+Q3VzdG9tIDcwMHB4PC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJXaXRoIE1heCBXaWR0aCIsCiAgICB3aWR0aDogImxhcmdlIiwKICAgIG1heFdpZHRoOiA2MDAsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGlzIHNldCB0byAnbGFyZ2UnIGJ1dCBjb25zdHJhaW5lZCBieSBhIG1heFdpZHRoIG9mIDYwMHB4LjwvcD4KICAgICAgICAgICAgYCwKICAgIG1lbnVPcHRpb25zOiBbewogICAgICBuYW1lOiAiR290IGl0IiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+TWF4IFdpZHRoIDYwMHB4PC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJXaXRoIE1pbiBXaWR0aCIsCiAgICB3aWR0aDogMzAwLAogICAgbWluV2lkdGg6IDQwMCwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgd2lkdGggaXMgc2V0IHRvIDMwMHB4IGJ1dCBoYXMgYSBtaW5XaWR0aCBvZiA0MDBweCwgc28gaXQgd2lsbCBiZSA0MDBweCB3aWRlLjwvcD4KICAgICAgICAgICAgYCwKICAgIG1lbnVPcHRpb25zOiBbewogICAgICBuYW1lOiAiT0siLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9XQogIH0pOwp9fT5NaW4gV2lkdGggNDAwcHg8L2RlZXMtYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+QnV0dG9uIFZhcmlhdGlvbnM8L2gzPgogICAgICA8cD5Nb2RhbHMgY2FuIGhhdmUgZGlmZmVyZW50IGJ1dHRvbiBjb25maWd1cmF0aW9ucyB3aXRoIHByb3BlciBzcGFjaW5nLjwvcD4KICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIk11bHRpcGxlIEFjdGlvbnMiLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBkZW1vbnN0cmF0ZXMgbXVsdGlwbGUgYnV0dG9ucyB3aXRoIHByb3BlciBzcGFjaW5nIGJldHdlZW4gdGhlbS48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH0sIHsKICAgICAgbmFtZTogIkNhbmNlbCIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH0sIHsKICAgICAgbmFtZTogIlNhdmUgQ2hhbmdlcyIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PlRocmVlIEJ1dHRvbnM8L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIlNpbmdsZSBBY3Rpb24iLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+U29tZXRpbWVzIHlvdSBqdXN0IG5lZWQgb25lIGJ1dHRvbi48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkFja25vd2xlZGdlIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+U2luZ2xlIEJ1dHRvbjwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiTm8gQWN0aW9ucyIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGhhcyBubyBib3R0b20gYnV0dG9ucy4gVXNlIHRoZSBYIGJ1dHRvbiBvciBjbGljayBvdXRzaWRlIHRvIGNsb3NlLjwvcD4KICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiM5OTkiKX07Ij5UaGlzIGlzIHVzZWZ1bCBmb3IgaW5mb3JtYXRpb25hbCBtb2RhbHMgdGhhdCBkb24ndCByZXF1aXJlIHVzZXIgYWN0aW9uLjwvcD4KICAgICAgICAgICAgYCwKICAgIG1lbnVPcHRpb25zOiBbXQogIH0pOwp9fT5ObyBCdXR0b25zPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJMb25nIEJ1dHRvbiBMYWJlbHMiLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGVzdGluZyBidXR0b24gbGF5b3V0IHdpdGggbG9uZ2VyIGxhYmVscy48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkRpc2NhcmQgQWxsIENoYW5nZXMiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9LCB7CiAgICAgIG5hbWU6ICJTYXZlIGFuZCBDb250aW51ZSBFZGl0aW5nIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+TG9uZyBMYWJlbHM8L2RlZXMtYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+UmVzcG9uc2l2ZSBCZWhhdmlvcjwvaDM+CiAgICAgIDxwPkFsbCBtb2RhbHMgYXV0b21hdGljYWxseSBiZWNvbWUgZnVsbC13aWR0aCBvbiBtb2JpbGUgZGV2aWNlcyAoPCA3NjhweCB2aWV3cG9ydCB3aWR0aCkgZm9yIGJldHRlciB1c2FiaWxpdHkuPC9wPgogICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJSZXNwb25zaXZlIE1vZGFsIiwKICAgIHdpZHRoOiAibGFyZ2UiLAogICAgc2hvd0hlbHBCdXR0b246IHRydWUsCiAgICBvbkhlbHA6ICgpID0+IGNvbnNvbGUubG9nKCJIZWxwIHJlcXVlc3RlZCBmb3IgcmVzcG9uc2l2ZSBtb2RhbCIpLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgIDxwPlJlc2l6ZSB5b3VyIGJyb3dzZXIgd2luZG93IHRvIHNlZSBob3cgdGhpcyBtb2RhbCBhZGFwdHMuIE9uIG1vYmlsZSB2aWV3cG9ydHMsIGl0IHdpbGwgYXV0b21hdGljYWxseSB0YWtlIHRoZSBmdWxsIHdpZHRoIG1pbnVzIG1hcmdpbnMuPC9wPgogICAgICAgICAgICA8cD5UaGUgaGVhZGVyIGJ1dHRvbnMgcmVtYWluIGFjY2Vzc2libGUgYXQgYWxsIHZpZXdwb3J0IHNpemVzLjwvcD4KICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkNsb3NlIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+VGVzdCBSZXNwb25zaXZlPC9kZWVzLWJ1dHRvbj4KICAgIDwvZGl2PgogIDwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLW1vZGFsL2RlZXMtbW9kYWwuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMTUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczE2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzTW9kYWwgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLW1vZGFsIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfaGVhZGluZ19kZWNvcmF0b3JzOwogIGxldCBfaGVhZGluZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRlbnRfZGVjb3JhdG9yczsKICBsZXQgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51T3B0aW9uc19kZWNvcmF0b3JzOwogIGxldCBfbWVudU9wdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51T3B0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfd2lkdGhfZGVjb3JhdG9yczsKICBsZXQgX3dpZHRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfd2lkdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21heFdpZHRoX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhXaWR0aF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21heFdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5XaWR0aF9kZWNvcmF0b3JzOwogIGxldCBfbWluV2lkdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5XaWR0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0Nsb3NlQnV0dG9uX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93Q2xvc2VCdXR0b25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93Q2xvc2VCdXR0b25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dIZWxwQnV0dG9uX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93SGVscEJ1dHRvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dIZWxwQnV0dG9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vbkhlbHBfZGVjb3JhdG9yczsKICBsZXQgX29uSGVscF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29uSGVscF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9iaWxlRnVsbHNjcmVlbl9kZWNvcmF0b3JzOwogIGxldCBfbW9iaWxlRnVsbHNjcmVlbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21vYmlsZUZ1bGxzY3JlZW5fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRlbnRQYWRkaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZW50UGFkZGluZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRlbnRQYWRkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tb2RhbFpJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfbW9kYWxaSW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tb2RhbFpJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzTW9kYWwyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfaGVhZGluZ19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfY29udGVudF9kZWNvcmF0b3JzID0gW3I1KHt9KV07CiAgICAgIF9tZW51T3B0aW9uc19kZWNvcmF0b3JzID0gW3I1KHt9KV07CiAgICAgIF93aWR0aF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX21heFdpZHRoX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfbWluV2lkdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9zaG93Q2xvc2VCdXR0b25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2hvd0hlbHBCdXR0b25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfb25IZWxwX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX21vYmlsZUZ1bGxzY3JlZW5fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfY29udGVudFBhZGRpbmdfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9tb2RhbFpJbmRleF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfaGVhZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJoZWFkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoZWFkaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhlYWRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmhlYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaGVhZGluZ19pbml0aWFsaXplcnMsIF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX2NvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29udGVudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29udGVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jb250ZW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzLCBfY29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF9tZW51T3B0aW9uc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51T3B0aW9ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWVudU9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVudU9wdGlvbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVPcHRpb25zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21lbnVPcHRpb25zX2luaXRpYWxpemVycywgX21lbnVPcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX3dpZHRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndpZHRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ3aWR0aCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai53aWR0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud2lkdGggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfd2lkdGhfaW5pdGlhbGl6ZXJzLCBfd2lkdGhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfbWF4V2lkdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWF4V2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heFdpZHRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heFdpZHRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYXhXaWR0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhXaWR0aF9pbml0aWFsaXplcnMsIF9tYXhXaWR0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF9taW5XaWR0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtaW5XaWR0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWluV2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWluV2lkdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1pbldpZHRoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21pbldpZHRoX2luaXRpYWxpemVycywgX21pbldpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX3Nob3dDbG9zZUJ1dHRvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93Q2xvc2VCdXR0b24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dDbG9zZUJ1dHRvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93Q2xvc2VCdXR0b24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dDbG9zZUJ1dHRvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93Q2xvc2VCdXR0b25faW5pdGlhbGl6ZXJzLCBfc2hvd0Nsb3NlQnV0dG9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX3Nob3dIZWxwQnV0dG9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dIZWxwQnV0dG9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93SGVscEJ1dHRvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93SGVscEJ1dHRvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd0hlbHBCdXR0b24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0hlbHBCdXR0b25faW5pdGlhbGl6ZXJzLCBfc2hvd0hlbHBCdXR0b25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfb25IZWxwX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9uSGVscCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib25IZWxwIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm9uSGVscCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub25IZWxwID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX29uSGVscF9pbml0aWFsaXplcnMsIF9vbkhlbHBfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfbW9iaWxlRnVsbHNjcmVlbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtb2JpbGVGdWxsc2NyZWVuIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2JpbGVGdWxsc2NyZWVuIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1vYmlsZUZ1bGxzY3JlZW4sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1vYmlsZUZ1bGxzY3JlZW4gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbW9iaWxlRnVsbHNjcmVlbl9pbml0aWFsaXplcnMsIF9tb2JpbGVGdWxsc2NyZWVuX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX2NvbnRlbnRQYWRkaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRlbnRQYWRkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZW50UGFkZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb250ZW50UGFkZGluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29udGVudFBhZGRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29udGVudFBhZGRpbmdfaW5pdGlhbGl6ZXJzLCBfY29udGVudFBhZGRpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfbW9kYWxaSW5kZXhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibW9kYWxaSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1vZGFsWkluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1vZGFsWkluZGV4LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tb2RhbFpJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tb2RhbFpJbmRleF9pbml0aWFsaXplcnMsIF9tb2RhbFpJbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE1KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc01vZGFsMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM5OwogICAgc3RhdGljIGFzeW5jIGNyZWF0ZUFuZFNob3cob3B0aW9uc0FyZykgewogICAgICBjb25zdCBib2R5MyA9IGRvY3VtZW50LmJvZHk7CiAgICAgIGNvbnN0IG1vZGFsID0gbmV3IERlZXNNb2RhbDIoKTsKICAgICAgbW9kYWwuaGVhZGluZyA9IG9wdGlvbnNBcmcuaGVhZGluZzsKICAgICAgbW9kYWwuY29udGVudCA9IG9wdGlvbnNBcmcuY29udGVudDsKICAgICAgbW9kYWwubWVudU9wdGlvbnMgPSBvcHRpb25zQXJnLm1lbnVPcHRpb25zOwogICAgICBpZiAob3B0aW9uc0FyZy53aWR0aCkKICAgICAgICBtb2RhbC53aWR0aCA9IG9wdGlvbnNBcmcud2lkdGg7CiAgICAgIGlmIChvcHRpb25zQXJnLm1heFdpZHRoKQogICAgICAgIG1vZGFsLm1heFdpZHRoID0gb3B0aW9uc0FyZy5tYXhXaWR0aDsKICAgICAgaWYgKG9wdGlvbnNBcmcubWluV2lkdGgpCiAgICAgICAgbW9kYWwubWluV2lkdGggPSBvcHRpb25zQXJnLm1pbldpZHRoOwogICAgICBpZiAob3B0aW9uc0FyZy5zaG93Q2xvc2VCdXR0b24gIT09IHZvaWQgMCkKICAgICAgICBtb2RhbC5zaG93Q2xvc2VCdXR0b24gPSBvcHRpb25zQXJnLnNob3dDbG9zZUJ1dHRvbjsKICAgICAgaWYgKG9wdGlvbnNBcmcuc2hvd0hlbHBCdXR0b24gIT09IHZvaWQgMCkKICAgICAgICBtb2RhbC5zaG93SGVscEJ1dHRvbiA9IG9wdGlvbnNBcmcuc2hvd0hlbHBCdXR0b247CiAgICAgIGlmIChvcHRpb25zQXJnLm9uSGVscCkKICAgICAgICBtb2RhbC5vbkhlbHAgPSBvcHRpb25zQXJnLm9uSGVscDsKICAgICAgaWYgKG9wdGlvbnNBcmcubW9iaWxlRnVsbHNjcmVlbiAhPT0gdm9pZCAwKQogICAgICAgIG1vZGFsLm1vYmlsZUZ1bGxzY3JlZW4gPSBvcHRpb25zQXJnLm1vYmlsZUZ1bGxzY3JlZW47CiAgICAgIGlmIChvcHRpb25zQXJnLmNvbnRlbnRQYWRkaW5nICE9PSB2b2lkIDApCiAgICAgICAgbW9kYWwuY29udGVudFBhZGRpbmcgPSBvcHRpb25zQXJnLmNvbnRlbnRQYWRkaW5nOwogICAgICBtb2RhbC53aW5kb3dMYXllciA9IGF3YWl0IERlZXNXaW5kb3dMYXllci5jcmVhdGVBbmRTaG93KHsKICAgICAgICBibHVyOiB0cnVlCiAgICAgIH0pOwogICAgICBtb2RhbC53aW5kb3dMYXllci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGFzeW5jICgpID0+IHsKICAgICAgICBhd2FpdCBtb2RhbC5kZXN0cm95KCk7CiAgICAgIH0pOwogICAgICBib2R5My5hcHBlbmQobW9kYWwud2luZG93TGF5ZXIpOwogICAgICBib2R5My5hcHBlbmQobW9kYWwpOwogICAgICBtb2RhbC5tb2RhbFpJbmRleCA9IHpJbmRleFJlZ2lzdHJ5LmdldE5leHRaSW5kZXgoKTsKICAgICAgekluZGV4UmVnaXN0cnkucmVnaXN0ZXIobW9kYWwsIG1vZGFsLm1vZGFsWkluZGV4KTsKICAgICAgcmV0dXJuIG1vZGFsOwogICAgfQogICAgI2hlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IGhlYWRpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoZWFkaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaGVhZGluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfY29udGVudF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IGNvbnRlbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29udGVudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21lbnVPcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfY29udGVudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX21lbnVPcHRpb25zX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBtZW51T3B0aW9ucygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21lbnVPcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWVudU9wdGlvbnModmFsdWUyKSB7CiAgICAgIHRoaXMuI21lbnVPcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjd2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9tZW51T3B0aW9uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX3dpZHRoX2luaXRpYWxpemVycywgIm1lZGl1bSIpKTsKICAgIGdldCB3aWR0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3dpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgd2lkdGgodmFsdWUyKSB7CiAgICAgIHRoaXMuI3dpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4V2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF93aWR0aF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX21heFdpZHRoX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgbWF4V2lkdGgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYXhXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1heFdpZHRoKHZhbHVlMikgewogICAgICB0aGlzLiNtYXhXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21pbldpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfbWF4V2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9taW5XaWR0aF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IG1pbldpZHRoKCkgewogICAgICByZXR1cm4gdGhpcy4jbWluV2lkdGhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW5XaWR0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWluV2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93Q2xvc2VCdXR0b25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9taW5XaWR0aF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX3Nob3dDbG9zZUJ1dHRvbl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzaG93Q2xvc2VCdXR0b24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93Q2xvc2VCdXR0b25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93Q2xvc2VCdXR0b24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dDbG9zZUJ1dHRvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dIZWxwQnV0dG9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfc2hvd0Nsb3NlQnV0dG9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfc2hvd0hlbHBCdXR0b25faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHNob3dIZWxwQnV0dG9uKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0hlbHBCdXR0b25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93SGVscEJ1dHRvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd0hlbHBCdXR0b25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNvbkhlbHBfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9zaG93SGVscEJ1dHRvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX29uSGVscF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IG9uSGVscCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI29uSGVscF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG9uSGVscCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb25IZWxwX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbW9iaWxlRnVsbHNjcmVlbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX29uSGVscF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX21vYmlsZUZ1bGxzY3JlZW5faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IG1vYmlsZUZ1bGxzY3JlZW4oKSB7CiAgICAgIHJldHVybiB0aGlzLiNtb2JpbGVGdWxsc2NyZWVuX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbW9iaWxlRnVsbHNjcmVlbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jbW9iaWxlRnVsbHNjcmVlbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRlbnRQYWRkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfbW9iaWxlRnVsbHNjcmVlbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX2NvbnRlbnRQYWRkaW5nX2luaXRpYWxpemVycywgMTYpKTsKICAgIGdldCBjb250ZW50UGFkZGluZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvbnRlbnRQYWRkaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29udGVudFBhZGRpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRlbnRQYWRkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbW9kYWxaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9jb250ZW50UGFkZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX21vZGFsWkluZGV4X2luaXRpYWxpemVycywgMWUzKSk7CiAgICBnZXQgbW9kYWxaSW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtb2RhbFpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1vZGFsWkluZGV4KHZhbHVlMikgewogICAgICB0aGlzLiNtb2RhbFpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNmZmYiKX07CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQogICAgICAubW9kYWxDb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICB3aWR0aDogMTAwdnc7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KICAgICAgLm1vZGFsIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHNjYWxlKDAuOTUpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgbWluLWhlaWdodDogMTIwcHg7CiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDQwcHgpOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgICAgIG1hcmdpbjogMjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgfQoKICAgICAgLyogV2lkdGggdmFyaWF0aW9ucyAqLwogICAgICAubW9kYWwud2lkdGgtc21hbGwgewogICAgICAgIHdpZHRoOiAzODBweDsKICAgICAgfQoKICAgICAgLm1vZGFsLndpZHRoLW1lZGl1bSB7CiAgICAgICAgd2lkdGg6IDU2MHB4OwogICAgICB9CgogICAgICAubW9kYWwud2lkdGgtbGFyZ2UgewogICAgICAgIHdpZHRoOiA4MDBweDsKICAgICAgfQoKICAgICAgLm1vZGFsLndpZHRoLWZ1bGxzY3JlZW4gewogICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gNDBweCk7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNDBweCk7CiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDQwcHgpOwogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAubW9kYWwgewogICAgICAgICAgd2lkdGg6IGNhbGMoMTAwdncgLSA0MHB4KSAhaW1wb3J0YW50OwogICAgICAgICAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIEFsbG93IGZ1bGwgaGVpZ2h0IG9uIG1vYmlsZSB3aGVuIGNvbnRlbnQgbmVlZHMgaXQgKi8KICAgICAgICAubW9kYWxDb250YWluZXIgewogICAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm1vZGFsIHsKICAgICAgICAgIG1hcmdpbjogMTBweDsKICAgICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAyMHB4KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyogRnVsbCBzY3JlZW4gbW9kZSBvbiBtb2JpbGUgKi8KICAgICAgICAubW9kYWwubW9iaWxlLWZ1bGxzY3JlZW4gewogICAgICAgICAgd2lkdGg6IDEwMHZ3ICFpbXBvcnRhbnQ7CiAgICAgICAgICBoZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7CiAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50OwogICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5tb2RhbC5zaG93IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHNjYWxlKDEpOwogICAgICB9CgogICAgICAubW9kYWwuc2hvdy5wcmVkZXN0cm95IHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KSBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIHsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgbWluLWhlaWdodDogNDBweDsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIC5oZWFkZXItYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogOHB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIC5oZWFkZXItYnV0dG9uIHsKICAgICAgICB3aWR0aDogMjhweDsKICAgICAgICBoZWlnaHQ6IDI4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyAuaGVhZGVyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIC5oZWFkZXItYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzNmM2Y0NiIpfTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIC5oZWFkZXItYnV0dG9uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAubW9kYWwgLmhlYWRpbmcgLmhlYWRpbmctdGV4dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDQwcHg7CiAgICAgICAgcGFkZGluZzogMCA0MHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICB9CgogICAgICAubW9kYWwgLmNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgfQogICAgICAubW9kYWwgLmJvdHRvbUJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b24gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBsaW5lLWhlaWdodDogMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAubW9kYWwgLmJvdHRvbUJ1dHRvbnMgLmJvdHRvbUJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkNWRiIiwgIiM1MjUyNWIiKX07CiAgICAgIH0KICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjNTI1MjViIil9OwogICAgICB9CiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyAuYm90dG9tQnV0dG9uOmxhc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b24ucHJpbWFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIH0KICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b24ucHJpbWFyeTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMyNTYzZWIiLCAiIzI1NjNlYiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiMyNTYzZWIiKX07CiAgICAgIH0KICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b24ucHJpbWFyeTphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWQ0ZWQ4IiwgIiMxZDRlZDgiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFkNGVkOCIsICIjMWQ0ZWQ4Iil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICBjb25zdCB3aWR0aENsYXNzID0gdHlwZW9mIHRoaXMud2lkdGggPT09ICJzdHJpbmciID8gYHdpZHRoLSR7dGhpcy53aWR0aH1gIDogIiI7CiAgICAgIGNvbnN0IGN1c3RvbVdpZHRoID0gdHlwZW9mIHRoaXMud2lkdGggPT09ICJudW1iZXIiID8gYCR7dGhpcy53aWR0aH1weGAgOiAiIjsKICAgICAgY29uc3QgbWF4V2lkdGhTdHlsZSA9IHRoaXMubWF4V2lkdGggPyBgJHt0aGlzLm1heFdpZHRofXB4YCA6ICIiOwogICAgICBjb25zdCBtaW5XaWR0aFN0eWxlID0gdGhpcy5taW5XaWR0aCA/IGAke3RoaXMubWluV2lkdGh9cHhgIDogIiI7CiAgICAgIGNvbnN0IG1vYmlsZUZ1bGxzY3JlZW5DbGFzcyA9IHRoaXMubW9iaWxlRnVsbHNjcmVlbiA/ICJtb2JpbGUtZnVsbHNjcmVlbiIgOiAiIjsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgJHtjdXN0b21XaWR0aCA/IGAubW9kYWwgeyB3aWR0aDogJHtjdXN0b21XaWR0aH07IH1gIDogIiJ9CiAgICAgICAgJHttYXhXaWR0aFN0eWxlID8gYC5tb2RhbCB7IG1heC13aWR0aDogJHttYXhXaWR0aFN0eWxlfTsgfWAgOiAiIn0KICAgICAgICAke21pbldpZHRoU3R5bGUgPyBgLm1vZGFsIHsgbWluLXdpZHRoOiAke21pbldpZHRoU3R5bGV9OyB9YCA6ICIifQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJtb2RhbENvbnRhaW5lciIgQGNsaWNrPSR7dGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2t9IHN0eWxlPSJ6LWluZGV4OiAke3RoaXMubW9kYWxaSW5kZXh9Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbCAke3dpZHRoQ2xhc3N9ICR7bW9iaWxlRnVsbHNjcmVlbkNsYXNzfSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy10ZXh0Ij4ke3RoaXMuaGVhZGluZ308L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLWJ1dHRvbnMiPgogICAgICAgICAgICAgICR7dGhpcy5zaG93SGVscEJ1dHRvbiA/IGIyYAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLWJ1dHRvbiIgQGNsaWNrPSR7dGhpcy5oYW5kbGVIZWxwfSB0aXRsZT0iSGVscCI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmhlbHBDaXJjbGUifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAke3RoaXMuc2hvd0Nsb3NlQnV0dG9uID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItYnV0dG9uIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmRlc3Ryb3koKX0gdGl0bGU9IkNsb3NlIj4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6eCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCIgc3R5bGU9InBhZGRpbmc6ICR7dGhpcy5jb250ZW50UGFkZGluZ31weDsiPiR7dGhpcy5jb250ZW50fTwvZGl2PgogICAgICAgICAgJHt0aGlzLm1lbnVPcHRpb25zLmxlbmd0aCA+IDAgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm90dG9tQnV0dG9ucyI+CiAgICAgICAgICAgICAgJHt0aGlzLm1lbnVPcHRpb25zLm1hcCgoYWN0aW9uQXJnLCBpbmRleDIpID0+IGIyYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJib3R0b21CdXR0b24gJHtpbmRleDIgPT09IHRoaXMubWVudU9wdGlvbnMubGVuZ3RoIC0gMSA/ICJwcmltYXJ5IiA6ICIifSAke2FjdGlvbkFyZy5uYW1lID09PSAiT0siID8gIm9rIiA6ICIifSIgQGNsaWNrPSR7KCkgPT4gewogICAgICAgIGFjdGlvbkFyZy5hY3Rpb24odGhpcyk7CiAgICAgIH19PiR7YWN0aW9uQXJnLm5hbWV9PC9kaXY+CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHdpbmRvd0xheWVyID0gX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfbW9kYWxaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgY29uc3QgZG9tdG9vbHMgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigzMCk7CiAgICAgIGNvbnN0IG1vZGFsID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbCIpOwogICAgICBtb2RhbC5jbGFzc0xpc3QuYWRkKCJzaG93Iik7CiAgICB9CiAgICBhc3luYyBoYW5kbGVPdXRzaWRlQ2xpY2soZXZlbnRBcmcpIHsKICAgICAgZXZlbnRBcmcuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnN0IG1vZGFsQ29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbENvbnRhaW5lciIpOwogICAgICBpZiAoZXZlbnRBcmcudGFyZ2V0ID09PSBtb2RhbENvbnRhaW5lcikgewogICAgICAgIGF3YWl0IHRoaXMuZGVzdHJveSgpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBkZXN0cm95KCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBjb25zdCBtb2RhbCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubW9kYWwiKTsKICAgICAgbW9kYWwuY2xhc3NMaXN0LmFkZCgicHJlZGVzdHJveSIpOwogICAgICBhd2FpdCBkb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDIwMCk7CiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcyk7CiAgICAgIGF3YWl0IHRoaXMud2luZG93TGF5ZXIuZGVzdHJveSgpOwogICAgICB6SW5kZXhSZWdpc3RyeS51bnJlZ2lzdGVyKHRoaXMpOwogICAgfQogICAgYXN5bmMgaGFuZGxlSGVscCgpIHsKICAgICAgaWYgKHRoaXMub25IZWxwKSB7CiAgICAgICAgYXdhaXQgdGhpcy5vbkhlbHAoKTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxNihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc01vZGFsMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtbGFiZWwvZGVlcy1sYWJlbC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzEwID0gKCkgPT4gewogIHJldHVybiBiMmAKICAgIDxkZWVzLWxhYmVsIC5sYWJlbD0keyJhIGxhYmVsIn0+PC9kZWVzLWxhYmVsPgogIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtbGFiZWwvZGVlcy1sYWJlbC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUxNiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMTcgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNMYWJlbCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtbGFiZWwiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9sYWJlbF9kZWNvcmF0b3JzOwogIGxldCBfbGFiZWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYWJlbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGVzY3JpcHRpb25fZGVjb3JhdG9yczsKICBsZXQgX2Rlc2NyaXB0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGVzY3JpcHRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3JlcXVpcmVkX2RlY29yYXRvcnM7CiAgbGV0IF9yZXF1aXJlZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3JlcXVpcmVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNMYWJlbDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9sYWJlbF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgcmVmbGVjdDogdHJ1ZQogICAgICB9KV07CiAgICAgIF9kZXNjcmlwdGlvbl9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgcmVmbGVjdDogdHJ1ZQogICAgICB9KV07CiAgICAgIF9yZXF1aXJlZF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGUxNih0aGlzLCBudWxsLCBfbGFiZWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFiZWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhYmVsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxhYmVsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sYWJlbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sYWJlbF9pbml0aWFsaXplcnMsIF9sYWJlbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE2KHRoaXMsIG51bGwsIF9kZXNjcmlwdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkZXNjcmlwdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZGVzY3JpcHRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGVzY3JpcHRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRlc2NyaXB0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Rlc2NyaXB0aW9uX2luaXRpYWxpemVycywgX2Rlc2NyaXB0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTYodGhpcywgbnVsbCwgX3JlcXVpcmVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJlcXVpcmVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZXF1aXJlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZXF1aXJlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucmVxdWlyZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzLCBfcmVxdWlyZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNMYWJlbDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzEwOwogICAgI2xhYmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczE3KHRoaXMsIF9sYWJlbF9pbml0aWFsaXplcnMsICIiKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgbGFiZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxhYmVsKHZhbHVlMikgewogICAgICB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rlc2NyaXB0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNyh0aGlzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE3KHRoaXMsIF9kZXNjcmlwdGlvbl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IGRlc2NyaXB0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jZGVzY3JpcHRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkZXNjcmlwdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jZGVzY3JpcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTcodGhpcywgX2Rlc2NyaXB0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNyh0aGlzLCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHJlcXVpcmVkKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVxdWlyZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCByZXF1aXJlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcmVxdWlyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ1JvYm90bycsIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5sYWJlbCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLnJlcXVpcmVkIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsICJoc2woMCA3Mi4yJSA1MC42JSkiKX07CiAgICAgICAgbWFyZ2luLWxlZnQ6IDJweDsKICAgICAgfQoKICAgICAgZGVlcy1pY29uIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpOwogICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogaGVscDsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke3RoaXMubGFiZWwgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPgogICAgICAgICAgICAgICR7dGhpcy5sYWJlbH0KICAgICAgICAgICAgICAke3RoaXMucmVxdWlyZWQgPyBiMmA8c3BhbiBjbGFzcz0icmVxdWlyZWQiPio8L3NwYW4+YCA6ICIifQogICAgICAgICAgICAgICR7dGhpcy5kZXNjcmlwdGlvbiA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmluZm8ifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICA8ZGVlcy1zcGVlY2hidWJibGUgLnRleHQ9JHt0aGlzLmRlc2NyaXB0aW9ufT48L2RlZXMtc3BlZWNoYnViYmxlPgogICAgICAgICAgICAgICAgICBgIDogYjJgYH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogYjJgYH0KICAgIGA7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxNyh0aGlzLCBfcmVxdWlyZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxNyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0xhYmVsMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLW1vbmFjby92ZXJzaW9uLmpzCnZhciBNT05BQ09fVkVSU0lPTiA9ICIwLjU1LjEiOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tb25hY28vZGVlcy13b3Jrc3BhY2UtbW9uYWNvLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTE3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMxOCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1dvcmtzcGFjZU1vbmFjbyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2NvbnRlbnRfZGVjb3JhdG9yczsKICBsZXQgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYW5ndWFnZV9kZWNvcmF0b3JzOwogIGxldCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYW5ndWFnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsZVBhdGhfZGVjb3JhdG9yczsKICBsZXQgX2ZpbGVQYXRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRlbnRTdWJqZWN0X2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZW50U3ViamVjdF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRlbnRTdWJqZWN0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF93b3JkV3JhcF9kZWNvcmF0b3JzOwogIGxldCBfd29yZFdyYXBfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF93b3JkV3JhcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV29ya3NwYWNlTW9uYWNvMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2NvbnRlbnRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX2xhbmd1YWdlX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZwogICAgICB9KV07CiAgICAgIF9maWxlUGF0aF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfY29udGVudFN1YmplY3RfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogT2JqZWN0CiAgICAgIH0pXTsKICAgICAgX3dvcmRXcmFwX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEJvb2xlYW4KICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGUxNyh0aGlzLCBudWxsLCBfY29udGVudF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRlbnQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRlbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29udGVudF9pbml0aWFsaXplcnMsIF9jb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTcodGhpcywgbnVsbCwgX2xhbmd1YWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhbmd1YWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYW5ndWFnZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYW5ndWFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFuZ3VhZ2UgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzLCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNyh0aGlzLCBudWxsLCBfZmlsZVBhdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsZVBhdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZpbGVQYXRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZpbGVQYXRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWxlUGF0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9maWxlUGF0aF9pbml0aWFsaXplcnMsIF9maWxlUGF0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE3KHRoaXMsIG51bGwsIF9jb250ZW50U3ViamVjdF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZW50U3ViamVjdCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29udGVudFN1YmplY3QiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29udGVudFN1YmplY3QsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRlbnRTdWJqZWN0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbnRlbnRTdWJqZWN0X2luaXRpYWxpemVycywgX2NvbnRlbnRTdWJqZWN0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTcodGhpcywgbnVsbCwgX3dvcmRXcmFwX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndvcmRXcmFwIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ3b3JkV3JhcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai53b3JkV3JhcCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud29yZFdyYXAgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfd29yZFdyYXBfaW5pdGlhbGl6ZXJzLCBfd29yZFdyYXBfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXb3Jrc3BhY2VNb25hY28yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIERFTU8KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgPGRlZXMtd29ya3NwYWNlLW1vbmFjbz48L2RlZXMtd29ya3NwYWNlLW1vbmFjbz5gOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJXb3Jrc3BhY2UiOwogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgbW9uYWNvRGVmZXJyZWQ7CiAgICAvLyBJTlNUQU5DRQogICAgZWRpdG9yRGVmZXJyZWQgPSBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRwcm9taXNlLmRlZmVyKCk7CiAgICAjY29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfY29udGVudF9pbml0aWFsaXplcnMsICJmdW5jdGlvbiBoZWxsbygpIHtcbglhbGVydCgnSGVsbG8gd29ybGQhJyk7XG59Iik7CiAgICBnZXQgY29udGVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb250ZW50KHZhbHVlMikgewogICAgICB0aGlzLiNjb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE4KHRoaXMsIF9jb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzLCAidHlwZXNjcmlwdCIpKTsKICAgIGdldCBsYW5ndWFnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xhbmd1YWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbGFuZ3VhZ2UodmFsdWUyKSB7CiAgICAgIHRoaXMuI2xhbmd1YWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE4KHRoaXMsIF9sYW5ndWFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTgodGhpcywgX2ZpbGVQYXRoX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBmaWxlUGF0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2ZpbGVQYXRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsZVBhdGgodmFsdWUyKSB7CiAgICAgIHRoaXMuI2ZpbGVQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29udGVudFN1YmplY3RfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE4KHRoaXMsIF9maWxlUGF0aF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTgodGhpcywgX2NvbnRlbnRTdWJqZWN0X2luaXRpYWxpemVycywgbmV3IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydHJ4LnJ4anMuU3ViamVjdCgpKSk7CiAgICBnZXQgY29udGVudFN1YmplY3QoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZW50U3ViamVjdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbnRlbnRTdWJqZWN0KHZhbHVlMikgewogICAgICB0aGlzLiNjb250ZW50U3ViamVjdF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3dvcmRXcmFwX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfY29udGVudFN1YmplY3RfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE4KHRoaXMsIF93b3JkV3JhcF9pbml0aWFsaXplcnMsICJvZmYiKSk7CiAgICBnZXQgd29yZFdyYXAoKSB7CiAgICAgIHJldHVybiB0aGlzLiN3b3JkV3JhcF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHdvcmRXcmFwKHZhbHVlMikgewogICAgICB0aGlzLiN3b3JkV3JhcF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgbW9uYWNvVGhlbWVTdWJzY3JpcHRpb24gPSAoX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfd29yZFdyYXBfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgIGlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwgPSBmYWxzZTsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICBEb21Ub29scy5zZXR1cERvbVRvb2xzKCk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5tYWluYm94IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im1haW5ib3giPgogICAgICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5nZXRFbGVtZW50QnlJZCgiY29udGFpbmVyIik7CiAgICAgIGNvbnN0IG1vbmFjb0NkbkJhc2UgPSBgaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9tb25hY28tZWRpdG9yQCR7TU9OQUNPX1ZFUlNJT059YDsKICAgICAgaWYgKCFEZWVzV29ya3NwYWNlTW9uYWNvMi5tb25hY29EZWZlcnJlZCkgewogICAgICAgIERlZXNXb3Jrc3BhY2VNb25hY28yLm1vbmFjb0RlZmVycmVkID0gZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cHJvbWlzZS5kZWZlcigpOwogICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IGAke21vbmFjb0NkbkJhc2V9L21pbi92cy9sb2FkZXIuanNgOwogICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwogICAgICAgIHNjcmlwdC5zcmMgPSBzY3JpcHRVcmw7CiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHsKICAgICAgICAgIERlZXNXb3Jrc3BhY2VNb25hY28yLm1vbmFjb0RlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICB9OwogICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKICAgICAgfQogICAgICBhd2FpdCBEZWVzV29ya3NwYWNlTW9uYWNvMi5tb25hY29EZWZlcnJlZC5wcm9taXNlOwogICAgICB3aW5kb3cucmVxdWlyZS5jb25maWcoewogICAgICAgIHBhdGhzOiB7IHZzOiBgJHttb25hY29DZG5CYXNlfS9taW4vdnNgIH0KICAgICAgfSk7CiAgICAgIHdpbmRvdy5yZXF1aXJlKFsidnMvZWRpdG9yL2VkaXRvci5tYWluIl0sIGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCBkb210b29sc0luc3RhbmNlID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgICAgY29uc3QgaXNCcmlnaHQgPSBkb210b29sc0luc3RhbmNlLnRoZW1lTWFuYWdlci5nb0JyaWdodEJvb2xlYW47CiAgICAgICAgY29uc3QgaW5pdGlhbFRoZW1lID0gaXNCcmlnaHQgPyAidnMiIDogInZzLWRhcmsiOwogICAgICAgIGNvbnN0IG1vbmFjb0luc3RhbmNlID0gd2luZG93Lm1vbmFjbzsKICAgICAgICBsZXQgbW9kZWwgPSBudWxsOwogICAgICAgIGlmICh0aGlzLmZpbGVQYXRoKSB7CiAgICAgICAgICBjb25zdCB1cmkgPSBtb25hY29JbnN0YW5jZS5VcmkucGFyc2UoYGZpbGU6Ly8ke3RoaXMuZmlsZVBhdGh9YCk7CiAgICAgICAgICBtb2RlbCA9IG1vbmFjb0luc3RhbmNlLmVkaXRvci5nZXRNb2RlbCh1cmkpOwogICAgICAgICAgaWYgKCFtb2RlbCkgewogICAgICAgICAgICBtb2RlbCA9IG1vbmFjb0luc3RhbmNlLmVkaXRvci5jcmVhdGVNb2RlbCh0aGlzLmNvbnRlbnQsIHRoaXMubGFuZ3VhZ2UsIHVyaSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtb2RlbC5zZXRWYWx1ZSh0aGlzLmNvbnRlbnQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCBlZGl0b3IyID0gbW9uYWNvSW5zdGFuY2UuZWRpdG9yLmNyZWF0ZShjb250YWluZXIsIHsKICAgICAgICAgIG1vZGVsOiBtb2RlbCB8fCB2b2lkIDAsCiAgICAgICAgICB2YWx1ZTogbW9kZWwgPyB2b2lkIDAgOiB0aGlzLmNvbnRlbnQsCiAgICAgICAgICBsYW5ndWFnZTogbW9kZWwgPyB2b2lkIDAgOiB0aGlzLmxhbmd1YWdlLAogICAgICAgICAgdGhlbWU6IGluaXRpYWxUaGVtZSwKICAgICAgICAgIHVzZVNoYWRvd0RPTTogdHJ1ZSwKICAgICAgICAgIGZvbnRTaXplOiAxNiwKICAgICAgICAgIGF1dG9tYXRpY0xheW91dDogdHJ1ZSwKICAgICAgICAgIHdvcmRXcmFwOiB0aGlzLndvcmRXcmFwLAogICAgICAgICAgaG92ZXI6IHsKICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSwKICAgICAgICAgICAgZGVsYXk6IDMwMCwKICAgICAgICAgICAgc3RpY2t5OiB0cnVlLAogICAgICAgICAgICBhYm92ZTogZmFsc2UKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZ29CcmlnaHQpID0+IHsKICAgICAgICAgIGNvbnN0IG5ld1RoZW1lID0gZ29CcmlnaHQgPyAidnMiIDogInZzLWRhcmsiOwogICAgICAgICAgZWRpdG9yMi51cGRhdGVPcHRpb25zKHsgdGhlbWU6IG5ld1RoZW1lIH0pOwogICAgICAgIH0pOwogICAgICAgIHRoaXMuZWRpdG9yRGVmZXJyZWQucmVzb2x2ZShlZGl0b3IyKTsKICAgICAgfSk7CiAgICAgIGNvbnN0IGNzczE1ID0gYXdhaXQgKGF3YWl0IGZldGNoKGAke21vbmFjb0NkbkJhc2V9L21pbi92cy9lZGl0b3IvZWRpdG9yLm1haW4uY3NzYCkpLnRleHQoKTsKICAgICAgY29uc3Qgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgICAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gY3NzMTU7CiAgICAgIHRoaXMuc2hhZG93Um9vdC5hcHBlbmQoc3R5bGVFbGVtZW50KTsKICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgdGhpcy5lZGl0b3JEZWZlcnJlZC5wcm9taXNlOwogICAgICBlZGl0b3Iub25EaWRDaGFuZ2VNb2RlbENvbnRlbnQoYXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgICAgaWYgKHRoaXMuaXNVcGRhdGluZ0Zyb21FeHRlcm5hbCkKICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCB2YWx1ZTIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsKICAgICAgICB0aGlzLmNvbnRlbnRTdWJqZWN0Lm5leHQodmFsdWUyKTsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb250ZW50LWNoYW5nZSIsIHsKICAgICAgICAgIGRldGFpbDogdmFsdWUyLAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9KTsKICAgICAgdGhpcy5jb250ZW50U3ViamVjdC5uZXh0KGVkaXRvci5nZXRWYWx1ZSgpKTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGNvbnN0IG1vbmFjb0luc3RhbmNlID0gd2luZG93Lm1vbmFjbzsKICAgICAgaWYgKCFtb25hY29JbnN0YW5jZSkKICAgICAgICByZXR1cm47CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImZpbGVQYXRoIikgJiYgdGhpcy5maWxlUGF0aCkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IHRoaXMuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBjb25zdCB1cmkgPSBtb25hY29JbnN0YW5jZS5VcmkucGFyc2UoYGZpbGU6Ly8ke3RoaXMuZmlsZVBhdGh9YCk7CiAgICAgICAgbGV0IG1vZGVsID0gbW9uYWNvSW5zdGFuY2UuZWRpdG9yLmdldE1vZGVsKHVyaSk7CiAgICAgICAgaWYgKCFtb2RlbCkgewogICAgICAgICAgbW9kZWwgPSBtb25hY29JbnN0YW5jZS5lZGl0b3IuY3JlYXRlTW9kZWwodGhpcy5jb250ZW50LCB0aGlzLmxhbmd1YWdlLCB1cmkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAobW9kZWwuZ2V0VmFsdWUoKSAhPT0gdGhpcy5jb250ZW50KSB7CiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21FeHRlcm5hbCA9IHRydWU7CiAgICAgICAgICAgIG1vZGVsLnNldFZhbHVlKHRoaXMuY29udGVudCk7CiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21FeHRlcm5hbCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCBjdXJyZW50TW9kZWwgPSBlZGl0b3IuZ2V0TW9kZWwoKTsKICAgICAgICBpZiAoY3VycmVudE1vZGVsPy51cmkudG9TdHJpbmcoKSAhPT0gdXJpLnRvU3RyaW5nKCkpIHsKICAgICAgICAgIGVkaXRvci5zZXRNb2RlbChtb2RlbCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJjb250ZW50IikpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCB0aGlzLmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gZWRpdG9yLmdldFZhbHVlKCk7CiAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gdGhpcy5jb250ZW50KSB7CiAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwgPSB0cnVlOwogICAgICAgICAgZWRpdG9yLnNldFZhbHVlKHRoaXMuY29udGVudCk7CiAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygibGFuZ3VhZ2UiKSkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IHRoaXMuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBjb25zdCBtb2RlbCA9IGVkaXRvci5nZXRNb2RlbCgpOwogICAgICAgIGlmIChtb2RlbCkgewogICAgICAgICAgbW9uYWNvSW5zdGFuY2UuZWRpdG9yLnNldE1vZGVsTGFuZ3VhZ2UobW9kZWwsIHRoaXMubGFuZ3VhZ2UpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICh0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uKSB7CiAgICAgICAgdGhpcy5tb25hY29UaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgIHRoaXMubW9uYWNvVGhlbWVTdWJzY3JpcHRpb24gPSBudWxsOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFVwZGF0ZSBjb250ZW50IGZyb20gZXh0ZXJuYWwgc291cmNlIHdpdGggb3B0aW9uYWwgY3Vyc29yIHByZXNlcnZhdGlvbi4KICAgICAqIFVzZSB0aGlzIHdoZW4gdGhlIGZpbGUgY29udGVudCBjaGFuZ2VzIGV4dGVybmFsbHkgKGUuZy4sIGZpbGUgY2hhbmdlZCBvbiBkaXNrKS4KICAgICAqIEBwYXJhbSBuZXdDb250ZW50IFRoZSBuZXcgY29udGVudCB0byBzZXQKICAgICAqIEBwYXJhbSBwcmVzZXJ2ZUN1cnNvciBXaGV0aGVyIHRvIHByZXNlcnZlIGN1cnNvci9zY3JvbGwgcG9zaXRpb24gKGRlZmF1bHQ6IHRydWUpCiAgICAgKi8KICAgIGFzeW5jIHNldENvbnRlbnRFeHRlcm5hbChuZXdDb250ZW50LCBwcmVzZXJ2ZUN1cnNvciA9IHRydWUpIHsKICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgdGhpcy5lZGl0b3JEZWZlcnJlZC5wcm9taXNlOwogICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBlZGl0b3IuZ2V0VmFsdWUoKTsKICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA9PT0gbmV3Q29udGVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHBvc2l0aW9uMyA9IHByZXNlcnZlQ3Vyc29yID8gZWRpdG9yLmdldFBvc2l0aW9uKCkgOiBudWxsOwogICAgICBjb25zdCBzZWxlY3Rpb25zID0gcHJlc2VydmVDdXJzb3IgPyBlZGl0b3IuZ2V0U2VsZWN0aW9ucygpIDogbnVsbDsKICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gcHJlc2VydmVDdXJzb3IgPyBlZGl0b3IuZ2V0U2Nyb2xsVG9wKCkgOiAwOwogICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gcHJlc2VydmVDdXJzb3IgPyBlZGl0b3IuZ2V0U2Nyb2xsTGVmdCgpIDogMDsKICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbUV4dGVybmFsID0gdHJ1ZTsKICAgICAgZWRpdG9yLnNldFZhbHVlKG5ld0NvbnRlbnQpOwogICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwgPSBmYWxzZTsKICAgICAgaWYgKHByZXNlcnZlQ3Vyc29yKSB7CiAgICAgICAgaWYgKHBvc2l0aW9uMykgewogICAgICAgICAgY29uc3QgbW9kZWwgPSBlZGl0b3IuZ2V0TW9kZWwoKTsKICAgICAgICAgIGNvbnN0IGxpbmVDb3VudCA9IG1vZGVsPy5nZXRMaW5lQ291bnQoKSB8fCAxOwogICAgICAgICAgY29uc3QgY2xhbXBlZExpbmUgPSBNYXRoLm1pbihwb3NpdGlvbjMubGluZU51bWJlciwgbGluZUNvdW50KTsKICAgICAgICAgIGNvbnN0IGxpbmVMZW5ndGggPSBtb2RlbD8uZ2V0TGluZU1heENvbHVtbihjbGFtcGVkTGluZSkgfHwgMTsKICAgICAgICAgIGNvbnN0IGNsYW1wZWRDb2x1bW4gPSBNYXRoLm1pbihwb3NpdGlvbjMuY29sdW1uLCBsaW5lTGVuZ3RoKTsKICAgICAgICAgIGVkaXRvci5zZXRQb3NpdGlvbih7IGxpbmVOdW1iZXI6IGNsYW1wZWRMaW5lLCBjb2x1bW46IGNsYW1wZWRDb2x1bW4gfSk7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxlY3Rpb25zICYmIHNlbGVjdGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgZWRpdG9yLnNldFNlbGVjdGlvbnMoc2VsZWN0aW9ucyk7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWRpdG9yLnNldFNjcm9sbFBvc2l0aW9uKHsgc2Nyb2xsVG9wLCBzY3JvbGxMZWZ0IH0pOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczE4KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlTW9uYWNvMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1jb2RlL2RlZXMtaW5wdXQtY29kZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CmluaXRfZGVlc19pY29uKCk7CnZhciBfX2VzRGVjb3JhdGUxOCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMTkgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIExBTkdVQUdFUyA9IFsKICB7IGtleTogInR5cGVzY3JpcHQiLCBsYWJlbDogIlR5cGVTY3JpcHQiIH0sCiAgeyBrZXk6ICJqYXZhc2NyaXB0IiwgbGFiZWw6ICJKYXZhU2NyaXB0IiB9LAogIHsga2V5OiAianNvbiIsIGxhYmVsOiAiSlNPTiIgfSwKICB7IGtleTogImh0bWwiLCBsYWJlbDogIkhUTUwiIH0sCiAgeyBrZXk6ICJjc3MiLCBsYWJlbDogIkNTUyIgfSwKICB7IGtleTogInNjc3MiLCBsYWJlbDogIlNDU1MiIH0sCiAgeyBrZXk6ICJtYXJrZG93biIsIGxhYmVsOiAiTWFya2Rvd24iIH0sCiAgeyBrZXk6ICJ5YW1sIiwgbGFiZWw6ICJZQU1MIiB9LAogIHsga2V5OiAieG1sIiwgbGFiZWw6ICJYTUwiIH0sCiAgeyBrZXk6ICJzcWwiLCBsYWJlbDogIlNRTCIgfSwKICB7IGtleTogInB5dGhvbiIsIGxhYmVsOiAiUHl0aG9uIiB9LAogIHsga2V5OiAiamF2YSIsIGxhYmVsOiAiSmF2YSIgfSwKICB7IGtleTogImNzaGFycCIsIGxhYmVsOiAiQyMiIH0sCiAgeyBrZXk6ICJjcHAiLCBsYWJlbDogIkMrKyIgfSwKICB7IGtleTogImdvIiwgbGFiZWw6ICJHbyIgfSwKICB7IGtleTogInJ1c3QiLCBsYWJlbDogIlJ1c3QiIH0sCiAgeyBrZXk6ICJzaGVsbCIsIGxhYmVsOiAiU2hlbGwiIH0sCiAgeyBrZXk6ICJwbGFpbnRleHQiLCBsYWJlbDogIlBsYWluIFRleHQiIH0KXTsKdmFyIERlZXNJbnB1dENvZGUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LWNvZGUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX3ZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF92YWx1ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYW5ndWFnZV9kZWNvcmF0b3JzOwogIGxldCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYW5ndWFnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGVpZ2h0X2RlY29yYXRvcnM7CiAgbGV0IF9oZWlnaHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oZWlnaHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dvcmRXcmFwX2RlY29yYXRvcnM7CiAgbGV0IF93b3JkV3JhcF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dvcmRXcmFwX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93TGluZU51bWJlcnNfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dMaW5lTnVtYmVyc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dMaW5lTnVtYmVyc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNMYW5ndWFnZURyb3Bkb3duT3Blbl9kZWNvcmF0b3JzOwogIGxldCBfaXNMYW5ndWFnZURyb3Bkb3duT3Blbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvcHlTdWNjZXNzX2RlY29yYXRvcnM7CiAgbGV0IF9jb3B5U3VjY2Vzc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvcHlTdWNjZXNzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dENvZGUyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9sYW5ndWFnZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2hlaWdodF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3dvcmRXcmFwX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc2hvd0xpbmVOdW1iZXJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2NvcHlTdWNjZXNzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTE4KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTgodGhpcywgbnVsbCwgX2xhbmd1YWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhbmd1YWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYW5ndWFnZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYW5ndWFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFuZ3VhZ2UgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzLCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOCh0aGlzLCBudWxsLCBfaGVpZ2h0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhlaWdodCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGVpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhlaWdodCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaGVpZ2h0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hlaWdodF9pbml0aWFsaXplcnMsIF9oZWlnaHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOCh0aGlzLCBudWxsLCBfd29yZFdyYXBfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAid29yZFdyYXAiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIndvcmRXcmFwIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLndvcmRXcmFwLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai53b3JkV3JhcCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF93b3JkV3JhcF9pbml0aWFsaXplcnMsIF93b3JkV3JhcF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE4KHRoaXMsIG51bGwsIF9zaG93TGluZU51bWJlcnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0xpbmVOdW1iZXJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93TGluZU51bWJlcnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0xpbmVOdW1iZXJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93TGluZU51bWJlcnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0xpbmVOdW1iZXJzX2luaXRpYWxpemVycywgX3Nob3dMaW5lTnVtYmVyc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE4KHRoaXMsIG51bGwsIF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNMYW5ndWFnZURyb3Bkb3duT3Blbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNMYW5ndWFnZURyb3Bkb3duT3BlbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2luaXRpYWxpemVycywgX2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOCh0aGlzLCBudWxsLCBfY29weVN1Y2Nlc3NfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29weVN1Y2Nlc3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvcHlTdWNjZXNzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvcHlTdWNjZXNzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jb3B5U3VjY2VzcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb3B5U3VjY2Vzc19pbml0aWFsaXplcnMsIF9jb3B5U3VjY2Vzc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE4KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0Q29kZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmAKICAgIDxkZWVzLWlucHV0LWNvZGUKICAgICAgbGFiZWw9IlR5cGVTY3JpcHQgQ29kZSIKICAgICAga2V5PSJjb2RlIgogICAgICBsYW5ndWFnZT0idHlwZXNjcmlwdCIKICAgICAgaGVpZ2h0PSIzMDBweCIKICAgICAgLnZhbHVlPSR7J2NvbnN0IGdyZWV0aW5nOiBzdHJpbmcgPSAiSGVsbG8gV29ybGQiO1xuY29uc29sZS5sb2coZ3JlZXRpbmcpOyd9CiAgICA+PC9kZWVzLWlucHV0LWNvZGU+CiAgYDsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsICIiKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2xhbmd1YWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9sYW5ndWFnZV9pbml0aWFsaXplcnMsICJ0eXBlc2NyaXB0IikpOwogICAgZ2V0IGxhbmd1YWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYW5ndWFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNoZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9sYW5ndWFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX2hlaWdodF9pbml0aWFsaXplcnMsICIyMDBweCIpKTsKICAgIGdldCBoZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBoZWlnaHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2hlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3dvcmRXcmFwX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfaGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfd29yZFdyYXBfaW5pdGlhbGl6ZXJzLCAib2ZmIikpOwogICAgZ2V0IHdvcmRXcmFwKCkgewogICAgICByZXR1cm4gdGhpcy4jd29yZFdyYXBfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB3b3JkV3JhcCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jd29yZFdyYXBfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93TGluZU51bWJlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF93b3JkV3JhcF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX3Nob3dMaW5lTnVtYmVyc19pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzaG93TGluZU51bWJlcnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93TGluZU51bWJlcnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93TGluZU51bWJlcnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dMaW5lTnVtYmVyc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9zaG93TGluZU51bWJlcnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0xhbmd1YWdlRHJvcGRvd25PcGVuKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNMYW5ndWFnZURyb3Bkb3duT3Blbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4odmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb3B5U3VjY2Vzc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9jb3B5U3VjY2Vzc19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgY29weVN1Y2Nlc3MoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb3B5U3VjY2Vzc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvcHlTdWNjZXNzKHZhbHVlMikgewogICAgICB0aGlzLiNjb3B5U3VjY2Vzc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgZWRpdG9yRWxlbWVudCA9IChfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9jb3B5U3VjY2Vzc19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICB9CgogICAgICAuaW5wdXQtd3JhcHBlciwKICAgICAgOmhvc3QoW2xhYmVsLXBvc2l0aW9uPSJ0b3AiXSkgLmlucHV0LXdyYXBwZXIsCiAgICAgIDpob3N0KFtsYWJlbC1wb3NpdGlvbj0ibGVmdCJdKSAuaW5wdXQtd3JhcHBlciwKICAgICAgOmhvc3QoW2xhYmVsLXBvc2l0aW9uPSJyaWdodCJdKSAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgfQoKICAgICAgLmNvZGUtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgIH0KCiAgICAgIC50b29sYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NyUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWxlZnQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItcmlnaHQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLmxhbmd1YWdlLXNlbGVjdG9yIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiA0cHggMTBweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmxhbmd1YWdlLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCAiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgfQoKICAgICAgLmxhbmd1YWdlLWRyb3Bkb3duIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgICAgei1pbmRleDogMTAwOwogICAgICAgIG1heC1oZWlnaHQ6IDI1MHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWluLXdpZHRoOiAxNDBweDsKICAgICAgfQoKICAgICAgLmxhbmd1YWdlLW9wdGlvbiB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1vcHRpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1vcHRpb24uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1JSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTAlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b24uYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b24uc3VjY2VzcyB7CiAgICAgICAgY29sb3I6IGhzbCgxNDIuMSA3Ni4yJSAzNi4zJSk7CiAgICAgIH0KCiAgICAgIC5lZGl0b3Itd3JhcHBlciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtbW9uYWNvIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWRpdmlkZXIgewogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLmNvZGUtY29udGFpbmVyIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IGN1cnJlbnRMYW5ndWFnZSA9IExBTkdVQUdFUy5maW5kKChsNikgPT4gbDYua2V5ID09PSB0aGlzLmxhbmd1YWdlKSB8fCBMQU5HVUFHRVNbMF07CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGhlaWdodDogJHt0aGlzLmhlaWdodH07CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1jb250YWluZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItbGVmdCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2Utc2VsZWN0b3IiPgogICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2UtYnV0dG9uIgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnRvZ2dsZUxhbmd1YWdlRHJvcGRvd259CiAgICAgICAgICAgICAgICAgIEBibHVyPSR7dGhpcy5oYW5kbGVMYW5ndWFnZUJsdXJ9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICR7Y3VycmVudExhbmd1YWdlLmxhYmVsfQogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpDaGV2cm9uRG93biJ9IGljb25TaXplPSIxNCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICR7dGhpcy5pc0xhbmd1YWdlRHJvcGRvd25PcGVuID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLWRyb3Bkb3duIj4KICAgICAgICAgICAgICAgICAgICAke0xBTkdVQUdFUy5tYXAoKGxhbmcpID0+IGIyYAogICAgICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2Utb3B0aW9uICR7bGFuZy5rZXkgPT09IHRoaXMubGFuZ3VhZ2UgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgICBAbW91c2Vkb3duPSR7KGUxMSkgPT4gdGhpcy5zZWxlY3RMYW5ndWFnZShlMTEsIGxhbmcua2V5KX0KICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgJHtsYW5nLmxhYmVsfQogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1yaWdodCI+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uICR7dGhpcy53b3JkV3JhcCA9PT0gIm9uIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgdGl0bGU9IldvcmQgV3JhcCIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMudG9nZ2xlV29yZFdyYXB9CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6V3JhcFRleHQifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiAke3RoaXMuc2hvd0xpbmVOdW1iZXJzID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgICB0aXRsZT0iTGluZSBOdW1iZXJzIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy50b2dnbGVMaW5lTnVtYmVyc30KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpIYXNoIn0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWRpdmlkZXIiPjwvZGl2PgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiAke3RoaXMuY29weVN1Y2Nlc3MgPyAic3VjY2VzcyIgOiAiIn0iCiAgICAgICAgICAgICAgICB0aXRsZT0iQ29weSBDb2RlIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5jb3B5Q29kZX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7dGhpcy5jb3B5U3VjY2VzcyA/ICJsdWNpZGU6Q2hlY2siIDogImx1Y2lkZTpDb3B5In0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICB0aXRsZT0iRXhwYW5kIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5vcGVuRnVsbHNjcmVlbn0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpNYXhpbWl6ZTIifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLXdyYXBwZXIiPgogICAgICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbW9uYWNvCiAgICAgICAgICAgICAgLmNvbnRlbnQ9JHt0aGlzLnZhbHVlfQogICAgICAgICAgICAgIC5sYW5ndWFnZT0ke3RoaXMubGFuZ3VhZ2V9CiAgICAgICAgICAgICAgLndvcmRXcmFwPSR7dGhpcy53b3JkV3JhcH0KICAgICAgICAgICAgICBAY29udGVudC1jaGFuZ2U9JHt0aGlzLmhhbmRsZUNvbnRlbnRDaGFuZ2V9CiAgICAgICAgICAgID48L2RlZXMtd29ya3NwYWNlLW1vbmFjbz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuZWRpdG9yRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgIGlmICh0aGlzLmVkaXRvckVsZW1lbnQpIHsKICAgICAgICB0aGlzLmVkaXRvckVsZW1lbnQuY29udGVudFN1YmplY3Quc3Vic2NyaWJlKChuZXdDb250ZW50KSA9PiB7CiAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPT0gbmV3Q29udGVudCkgewogICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3Q29udGVudDsKICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHRvZ2dsZUxhbmd1YWdlRHJvcGRvd24oKSB7CiAgICAgIHRoaXMuaXNMYW5ndWFnZURyb3Bkb3duT3BlbiA9ICF0aGlzLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW47CiAgICB9CiAgICBoYW5kbGVMYW5ndWFnZUJsdXIoKSB7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIHRoaXMuaXNMYW5ndWFnZURyb3Bkb3duT3BlbiA9IGZhbHNlOwogICAgICB9LCAxNTApOwogICAgfQogICAgYXN5bmMgc2VsZWN0TGFuZ3VhZ2UoZTExLCBsYW5ndWFnZUtleSkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlS2V5OwogICAgICB0aGlzLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSBmYWxzZTsKICAgICAgaWYgKHRoaXMuZWRpdG9yRWxlbWVudCkgewogICAgICAgIHRoaXMuZWRpdG9yRWxlbWVudC5sYW5ndWFnZSA9IGxhbmd1YWdlS2V5OwogICAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IHRoaXMuZWRpdG9yRWxlbWVudC5lZGl0b3JEZWZlcnJlZC5wcm9taXNlOwogICAgICAgIGNvbnN0IG1vZGVsID0gZWRpdG9yLmdldE1vZGVsKCk7CiAgICAgICAgaWYgKG1vZGVsKSB7CiAgICAgICAgICB3aW5kb3cubW9uYWNvLmVkaXRvci5zZXRNb2RlbExhbmd1YWdlKG1vZGVsLCBsYW5ndWFnZUtleSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB0b2dnbGVXb3JkV3JhcCgpIHsKICAgICAgdGhpcy53b3JkV3JhcCA9IHRoaXMud29yZFdyYXAgPT09ICJvbiIgPyAib2ZmIiA6ICJvbiI7CiAgICAgIHRoaXMudXBkYXRlRWRpdG9yT3B0aW9uKCJ3b3JkV3JhcCIsIHRoaXMud29yZFdyYXApOwogICAgfQogICAgdG9nZ2xlTGluZU51bWJlcnMoKSB7CiAgICAgIHRoaXMuc2hvd0xpbmVOdW1iZXJzID0gIXRoaXMuc2hvd0xpbmVOdW1iZXJzOwogICAgICB0aGlzLnVwZGF0ZUVkaXRvck9wdGlvbigibGluZU51bWJlcnMiLCB0aGlzLnNob3dMaW5lTnVtYmVycyA/ICJvbiIgOiAib2ZmIik7CiAgICB9CiAgICBhc3luYyB1cGRhdGVFZGl0b3JPcHRpb24ob3B0aW9uMiwgdmFsdWUyKSB7CiAgICAgIGlmICh0aGlzLmVkaXRvckVsZW1lbnQpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCB0aGlzLmVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBlZGl0b3IudXBkYXRlT3B0aW9ucyh7IFtvcHRpb24yXTogdmFsdWUyIH0pOwogICAgICB9CiAgICB9CiAgICBhc3luYyBjb3B5Q29kZSgpIHsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLnZhbHVlKTsKICAgICAgICB0aGlzLmNvcHlTdWNjZXNzID0gdHJ1ZTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIHRoaXMuY29weVN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICB9LCAyZTMpOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY29weSBjb2RlOiIsIGVycik7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZUNvbnRlbnRDaGFuZ2UoZTExKSB7CiAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBlMTEuZGV0YWlsOwogICAgICBpZiAodGhpcy52YWx1ZSAhPT0gbmV3Q29udGVudCkgewogICAgICAgIHRoaXMudmFsdWUgPSBuZXdDb250ZW50OwogICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBvcGVuRnVsbHNjcmVlbigpIHsKICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZTsKICAgICAgbGV0IG1vZGFsRWRpdG9yRWxlbWVudCA9IG51bGw7CiAgICAgIGxldCBtb2RhbExhbmd1YWdlID0gdGhpcy5sYW5ndWFnZTsKICAgICAgbGV0IG1vZGFsV29yZFdyYXAgPSB0aGlzLndvcmRXcmFwOwogICAgICBsZXQgbW9kYWxTaG93TGluZU51bWJlcnMgPSB0aGlzLnNob3dMaW5lTnVtYmVyczsKICAgICAgbGV0IG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSBmYWxzZTsKICAgICAgbGV0IG1vZGFsQ29weVN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgY29uc3QgZ2V0TGFuZ3VhZ2VMYWJlbCA9ICgpID0+IHsKICAgICAgICBjb25zdCBsYW5nID0gTEFOR1VBR0VTLmZpbmQoKGw2KSA9PiBsNi5rZXkgPT09IG1vZGFsTGFuZ3VhZ2UpOwogICAgICAgIHJldHVybiBsYW5nID8gbGFuZy5sYWJlbCA6ICJUeXBlU2NyaXB0IjsKICAgICAgfTsKICAgICAgY29uc3QgdXBkYXRlVG9vbGJhclVJID0gKG1vZGFsMikgPT4gewogICAgICAgIGNvbnN0IHRvb2xiYXIyID0gbW9kYWwyLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbC10b29sYmFyIik7CiAgICAgICAgaWYgKCF0b29sYmFyMikKICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCBsYW5nQnRuID0gdG9vbGJhcjIucXVlcnlTZWxlY3RvcigiLmxhbmd1YWdlLWJ1dHRvbiBzcGFuIik7CiAgICAgICAgaWYgKGxhbmdCdG4pCiAgICAgICAgICBsYW5nQnRuLnRleHRDb250ZW50ID0gZ2V0TGFuZ3VhZ2VMYWJlbCgpOwogICAgICAgIGNvbnN0IHdyYXBCdG4gPSB0b29sYmFyMi5xdWVyeVNlbGVjdG9yKCIud3JhcC1idG4iKTsKICAgICAgICBpZiAod3JhcEJ0bikgewogICAgICAgICAgd3JhcEJ0bi5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiLCBtb2RhbFdvcmRXcmFwID09PSAib24iKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgbGluZXNCdG4gPSB0b29sYmFyMi5xdWVyeVNlbGVjdG9yKCIubGluZXMtYnRuIik7CiAgICAgICAgaWYgKGxpbmVzQnRuKSB7CiAgICAgICAgICBsaW5lc0J0bi5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiLCBtb2RhbFNob3dMaW5lTnVtYmVycyk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGNvcHlCdG4gPSB0b29sYmFyMi5xdWVyeVNlbGVjdG9yKCIuY29weS1idG4iKTsKICAgICAgICBjb25zdCBjb3B5SWNvbiA9IGNvcHlCdG4/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaWNvbiIpOwogICAgICAgIGlmIChjb3B5QnRuICYmIGNvcHlJY29uKSB7CiAgICAgICAgICBjb3B5QnRuLmNsYXNzTGlzdC50b2dnbGUoInN1Y2Nlc3MiLCBtb2RhbENvcHlTdWNjZXNzKTsKICAgICAgICAgIGNvcHlJY29uLmljb24gPSBtb2RhbENvcHlTdWNjZXNzID8gImx1Y2lkZTpDaGVjayIgOiAibHVjaWRlOkNvcHkiOwogICAgICAgIH0KICAgICAgICBjb25zdCBkcm9wZG93biA9IHRvb2xiYXIyLnF1ZXJ5U2VsZWN0b3IoIi5sYW5ndWFnZS1kcm9wZG93biIpOwogICAgICAgIGlmIChkcm9wZG93bikgewogICAgICAgICAgZHJvcGRvd24uc3R5bGUuZGlzcGxheSA9IG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPyAiYmxvY2siIDogIm5vbmUiOwogICAgICAgIH0KICAgICAgfTsKICAgICAgY29uc3QgbW9kYWwgPSBhd2FpdCBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgICAgaGVhZGluZzogdGhpcy5sYWJlbCB8fCAiQ29kZSBFZGl0b3IiLAogICAgICAgIHdpZHRoOiAiZnVsbHNjcmVlbiIsCiAgICAgICAgY29udGVudFBhZGRpbmc6IDAsCiAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgPHN0eWxlPgogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1sZWZ0IHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1yaWdodCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogNHB4OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLXNlbGVjdG9yIHsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLWJ1dHRvbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogNnB4OwogICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAubGFuZ3VhZ2UtZHJvcGRvd24gewogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIHRvcDogMTAwJTsKICAgICAgICAgICAgbGVmdDogMDsKICAgICAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgICAgICAgICB6LWluZGV4OiAxMDA7CiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDI1MHB4OwogICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgICAgICBtaW4td2lkdGg6IDE0MHB4OwogICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLW9wdGlvbiB7CiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC5sYW5ndWFnZS1vcHRpb246aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLW9wdGlvbi5zZWxlY3RlZCB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1idXR0b24gewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLnRvb2xiYXItYnV0dG9uLmFjdGl2ZSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLnRvb2xiYXItYnV0dG9uLnN1Y2Nlc3MgewogICAgICAgICAgICBjb2xvcjogaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC50b29sYmFyLWRpdmlkZXIgewogICAgICAgICAgICB3aWR0aDogMXB4OwogICAgICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtZWRpdG9yLXdyYXBwZXIgewogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDE3NXB4KTsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICB9CiAgICAgICAgPC9zdHlsZT4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC10b29sYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItbGVmdCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLXNlbGVjdG9yIj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsYW5ndWFnZS1idXR0b24iPgogICAgICAgICAgICAgICAgPHNwYW4+JHtnZXRMYW5ndWFnZUxhYmVsKCl9PC9zcGFuPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Q2hldnJvbkRvd24ifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLWRyb3Bkb3duIj4KICAgICAgICAgICAgICAgICR7TEFOR1VBR0VTLm1hcCgobGFuZykgPT4gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2Utb3B0aW9uICR7bGFuZy5rZXkgPT09IG1vZGFsTGFuZ3VhZ2UgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgIGRhdGEtbGFuZz0iJHtsYW5nLmtleX0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAke2xhbmcubGFiZWx9CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLXJpZ2h0Ij4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbGJhci1idXR0b24gd3JhcC1idG4gJHttb2RhbFdvcmRXcmFwID09PSAib24iID8gImFjdGl2ZSIgOiAiIn0iIHRpdGxlPSJXb3JkIFdyYXAiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOldyYXBUZXh0In0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRvb2xiYXItYnV0dG9uIGxpbmVzLWJ0biAke21vZGFsU2hvd0xpbmVOdW1iZXJzID8gImFjdGl2ZSIgOiAiIn0iIHRpdGxlPSJMaW5lIE51bWJlcnMiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOkhhc2gifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1kaXZpZGVyIj48L2Rpdj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbGJhci1idXR0b24gY29weS1idG4iIHRpdGxlPSJDb3B5IENvZGUiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOkNvcHkifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWVkaXRvci13cmFwcGVyIj4KICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tb25hY28KICAgICAgICAgICAgLmNvbnRlbnQ9JHtjdXJyZW50VmFsdWV9CiAgICAgICAgICAgIC5sYW5ndWFnZT0ke21vZGFsTGFuZ3VhZ2V9CiAgICAgICAgICAgIC53b3JkV3JhcD0ke21vZGFsV29yZFdyYXB9CiAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS1tb25hY28+CiAgICAgICAgPC9kaXY+CiAgICAgIGAsCiAgICAgICAgbWVudU9wdGlvbnM6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIkNhbmNlbCIsCiAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsUmVmKSA9PiB7CiAgICAgICAgICAgICAgYXdhaXQgbW9kYWxSZWYuZGVzdHJveSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiU2F2ZSAmIENsb3NlIiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWxSZWYpID0+IHsKICAgICAgICAgICAgICBtb2RhbEVkaXRvckVsZW1lbnQgPSBtb2RhbFJlZi5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tb25hY28iKTsKICAgICAgICAgICAgICBpZiAobW9kYWxFZGl0b3JFbGVtZW50KSB7CiAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCBtb2RhbEVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZWRpdG9yLmdldFZhbHVlKCk7CiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKG5ld1ZhbHVlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYXdhaXQgbW9kYWxSZWYuZGVzdHJveSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9KTsKICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCAxMDApKTsKICAgICAgbW9kYWxFZGl0b3JFbGVtZW50ID0gbW9kYWwuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgIGNvbnN0IHRvb2xiYXIgPSBtb2RhbC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubW9kYWwtdG9vbGJhciIpOwogICAgICBpZiAodG9vbGJhcikgewogICAgICAgIGNvbnN0IGxhbmdCdG4gPSB0b29sYmFyLnF1ZXJ5U2VsZWN0b3IoIi5sYW5ndWFnZS1idXR0b24iKTsKICAgICAgICBsYW5nQnRuPy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgIG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSAhbW9kYWxMYW5ndWFnZURyb3Bkb3duT3BlbjsKICAgICAgICAgIHVwZGF0ZVRvb2xiYXJVSShtb2RhbCk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgbGFuZ09wdGlvbnMgPSB0b29sYmFyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5sYW5ndWFnZS1vcHRpb24iKTsKICAgICAgICBsYW5nT3B0aW9ucy5mb3JFYWNoKChvcHRpb24yKSA9PiB7CiAgICAgICAgICBvcHRpb24yLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjb25zdCBuZXdMYW5nID0gb3B0aW9uMi5kYXRhc2V0Lmxhbmc7CiAgICAgICAgICAgIGlmIChuZXdMYW5nICYmIG1vZGFsRWRpdG9yRWxlbWVudCkgewogICAgICAgICAgICAgIG1vZGFsTGFuZ3VhZ2UgPSBuZXdMYW5nOwogICAgICAgICAgICAgIG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSBmYWxzZTsKICAgICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCBtb2RhbEVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgICAgICBjb25zdCBtb2RlbCA9IGVkaXRvci5nZXRNb2RlbCgpOwogICAgICAgICAgICAgIGlmIChtb2RlbCkgewogICAgICAgICAgICAgICAgd2luZG93Lm1vbmFjby5lZGl0b3Iuc2V0TW9kZWxMYW5ndWFnZShtb2RlbCwgbmV3TGFuZyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxhbmdPcHRpb25zLmZvckVhY2goKG9wdCkgPT4gb3B0LmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGVkIikpOwogICAgICAgICAgICAgIG9wdGlvbjIuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKTsKICAgICAgICAgICAgICB1cGRhdGVUb29sYmFyVUkobW9kYWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICBjb25zdCB3cmFwQnRuID0gdG9vbGJhci5xdWVyeVNlbGVjdG9yKCIud3JhcC1idG4iKTsKICAgICAgICB3cmFwQnRuPy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGFzeW5jICgpID0+IHsKICAgICAgICAgIG1vZGFsV29yZFdyYXAgPSBtb2RhbFdvcmRXcmFwID09PSAib24iID8gIm9mZiIgOiAib24iOwogICAgICAgICAgaWYgKG1vZGFsRWRpdG9yRWxlbWVudCkgewogICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCBtb2RhbEVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgICAgZWRpdG9yLnVwZGF0ZU9wdGlvbnMoeyB3b3JkV3JhcDogbW9kYWxXb3JkV3JhcCB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHVwZGF0ZVRvb2xiYXJVSShtb2RhbCk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgbGluZXNCdG4gPSB0b29sYmFyLnF1ZXJ5U2VsZWN0b3IoIi5saW5lcy1idG4iKTsKICAgICAgICBsaW5lc0J0bj8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBhc3luYyAoKSA9PiB7CiAgICAgICAgICBtb2RhbFNob3dMaW5lTnVtYmVycyA9ICFtb2RhbFNob3dMaW5lTnVtYmVyczsKICAgICAgICAgIGlmIChtb2RhbEVkaXRvckVsZW1lbnQpIHsKICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgbW9kYWxFZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgICAgIGVkaXRvci51cGRhdGVPcHRpb25zKHsgbGluZU51bWJlcnM6IG1vZGFsU2hvd0xpbmVOdW1iZXJzID8gIm9uIiA6ICJvZmYiIH0pOwogICAgICAgICAgfQogICAgICAgICAgdXBkYXRlVG9vbGJhclVJKG1vZGFsKTsKICAgICAgICB9KTsKICAgICAgICBjb25zdCBjb3B5QnRuID0gdG9vbGJhci5xdWVyeVNlbGVjdG9yKCIuY29weS1idG4iKTsKICAgICAgICBjb3B5QnRuPy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChtb2RhbEVkaXRvckVsZW1lbnQpIHsKICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgbW9kYWxFZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQzID0gZWRpdG9yLmdldFZhbHVlKCk7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29udGVudDMpOwogICAgICAgICAgICAgIG1vZGFsQ29weVN1Y2Nlc3MgPSB0cnVlOwogICAgICAgICAgICAgIHVwZGF0ZVRvb2xiYXJVSShtb2RhbCk7CiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICBtb2RhbENvcHlTdWNjZXNzID0gZmFsc2U7CiAgICAgICAgICAgICAgICB1cGRhdGVUb29sYmFyVUkobW9kYWwpOwogICAgICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjb3B5IGNvZGU6IiwgZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgICAgaWYgKG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gJiYgIWxhbmdCdG4/LmNvbnRhaW5zKGUxMS50YXJnZXQpKSB7CiAgICAgICAgICAgIG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSBmYWxzZTsKICAgICAgICAgICAgdXBkYXRlVG9vbGJhclVJKG1vZGFsKTsKICAgICAgICAgIH0KICAgICAgICB9LCB7IG9uY2U6IHRydWUgfSk7CiAgICAgIH0KICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgICBpZiAodGhpcy5lZGl0b3JFbGVtZW50KSB7CiAgICAgICAgdGhpcy5lZGl0b3JFbGVtZW50LmNvbnRlbnQgPSB2YWx1ZTI7CiAgICAgICAgdGhpcy5lZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2UudGhlbigoZWRpdG9yKSA9PiB7CiAgICAgICAgICBpZiAoZWRpdG9yLmdldFZhbHVlKCkgIT09IHZhbHVlMikgewogICAgICAgICAgICBlZGl0b3Iuc2V0VmFsdWUodmFsdWUyKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dENvZGUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRhdGVwaWNrZXIvZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxMSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tb3V0cHV0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDUsIDI0MiwgMC4xKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5kYXRlLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGRhdGVQaWNrZXIgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZGF0ZXBpY2tlciIpOwogIGlmIChkYXRlUGlja2VyKSB7CiAgICBkYXRlUGlja2VyLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChldmVudCkgPT4gewogICAgICBjb25zb2xlLmxvZygiQmFzaWMgZGF0ZSBzZWxlY3RlZDoiLCBldmVudC50YXJnZXQudmFsdWUpOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhc2ljIERhdGUgUGlja2VyIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBkYXRlIHNlbGVjdGlvbiB3aXRob3V0IHRpbWUifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iU2VsZWN0IERhdGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iQ2hvb3NlIGEgZGF0ZSBmcm9tIHRoZSBjYWxlbmRhciIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGRhdGVUaW1lUGlja2VyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LWRhdGVwaWNrZXJbbGFiZWw9IkV2ZW50IERhdGUgJiBUaW1lIl0nKTsKICBjb25zdCBhcHBvaW50bWVudFBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kYXRlcGlja2VyW2xhYmVsPSJBcHBvaW50bWVudCJdJyk7CiAgaWYgKGRhdGVUaW1lUGlja2VyKSB7CiAgICBkYXRlVGltZVBpY2tlci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgdmFsdWUyID0gZXZlbnQudGFyZ2V0LnZhbHVlOwogICAgICBjb25zb2xlLmxvZygiMjRoIGZvcm1hdCBkYXRldGltZToiLCB2YWx1ZTIpOwogICAgfSk7CiAgfQogIGlmIChhcHBvaW50bWVudFBpY2tlcikgewogICAgYXBwb2ludG1lbnRQaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHZhbHVlMiA9IGV2ZW50LnRhcmdldC52YWx1ZTsKICAgICAgY29uc29sZS5sb2coIjEyaCBmb3JtYXQgZGF0ZXRpbWU6IiwgdmFsdWUyKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEYXRlIGFuZCBUaW1lIFNlbGVjdGlvbiJ9IC5zdWJ0aXRsZT0keyJEYXRlIHBpY2tlcnMgd2l0aCB0aW1lIHNlbGVjdGlvbiBpbiBkaWZmZXJlbnQgZm9ybWF0cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJFdmVudCBEYXRlICYgVGltZSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJTZWxlY3QgYm90aCBkYXRlIGFuZCB0aW1lICgyNC1ob3VyIGZvcm1hdCkiCiAgICAgICAgICAuZW5hYmxlVGltZT0ke3RydWV9CiAgICAgICAgICB0aW1lRm9ybWF0PSIyNGgiCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJBcHBvaW50bWVudCIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJEYXRlIGFuZCB0aW1lIHdpdGggQU0vUE0gc2VsZWN0b3IgKDE1LW1pbnV0ZSBpbmNyZW1lbnRzKSIKICAgICAgICAgIC5lbmFibGVUaW1lPSR7dHJ1ZX0KICAgICAgICAgIHRpbWVGb3JtYXQ9IjEyaCIKICAgICAgICAgIC5taW51dGVJbmNyZW1lbnQ9JHsxNX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHRpbWV6b25lUGlja2VycyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgdGltZXpvbmVQaWNrZXJzLmZvckVhY2goKHBpY2tlcikgPT4gewogICAgcGlja2VyLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChldmVudCkgPT4gewogICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7CiAgICAgIGNvbnNvbGUubG9nKGAke3RhcmdldC5sYWJlbH0gdmFsdWU6YCwgdGFyZ2V0LnZhbHVlKTsKICAgICAgY29uc3QgaW5wdXQgPSB0YXJnZXQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmRhdGUtaW5wdXQiKTsKICAgICAgaWYgKGlucHV0KSB7CiAgICAgICAgY29uc29sZS5sb2coYCR7dGFyZ2V0LmxhYmVsfSBmb3JtYXR0ZWQ6YCwgaW5wdXQudmFsdWUpOwogICAgICB9CiAgICB9KTsKICB9KTsKfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJUaW1lem9uZSBTdXBwb3J0In0gLnN1YnRpdGxlPSR7IkRhdGUgYW5kIHRpbWUgc2VsZWN0aW9uIHdpdGggdGltZXpvbmUgYXdhcmVuZXNzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9Ik1lZXRpbmcgVGltZSAod2l0aCBUaW1lem9uZSkiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iU2VsZWN0IGEgZGF0ZS90aW1lIGFuZCB0aW1lem9uZSBmb3IgdGhlIG1lZXRpbmciCiAgICAgICAgICAuZW5hYmxlVGltZT0ke3RydWV9CiAgICAgICAgICAuZW5hYmxlVGltZXpvbmU9JHt0cnVlfQogICAgICAgICAgdGltZUZvcm1hdD0iMjRoIgogICAgICAgICAgdGltZXpvbmU9IkFtZXJpY2EvTmV3X1lvcmsiCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJHbG9iYWwgRXZlbnQgU2NoZWR1bGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iU2NoZWR1bGUgYW4gZXZlbnQgYWNyb3NzIGRpZmZlcmVudCB0aW1lem9uZXMiCiAgICAgICAgICAuZW5hYmxlVGltZT0ke3RydWV9CiAgICAgICAgICAuZW5hYmxlVGltZXpvbmU9JHt0cnVlfQogICAgICAgICAgdGltZUZvcm1hdD0iMTJoIgogICAgICAgICAgdGltZXpvbmU9IkV1cm9wZS9Mb25kb24iCiAgICAgICAgICAubWludXRlSW5jcmVtZW50PSR7MzB9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBmdXR1cmVEYXRlUGlja2VyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LWRhdGVwaWNrZXIiKTsKICBpZiAoZnV0dXJlRGF0ZVBpY2tlcikgewogICAgZnV0dXJlRGF0ZVBpY2tlci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgdmFsdWUyID0gZXZlbnQudGFyZ2V0LnZhbHVlOwogICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodmFsdWUyKTsKICAgICAgICBjb25zdCB0b2RheSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpOwogICAgICAgIGNvbnN0IGRheXNEaWZmID0gTWF0aC5mbG9vcigoc2VsZWN0ZWREYXRlLmdldFRpbWUoKSAtIHRvZGF5LmdldFRpbWUoKSkgLyAoMWUzICogNjAgKiA2MCAqIDI0KSk7CiAgICAgICAgY29uc29sZS5sb2coYFNlbGVjdGVkIGRhdGUgaXMgJHtkYXlzRGlmZn0gZGF5cyBmcm9tIHRvZGF5YCk7CiAgICAgIH0KICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEYXRlIFJhbmdlIENvbnN0cmFpbnRzIn0gLnN1YnRpdGxlPSR7IkxpbWl0IHNlbGVjdGFibGUgZGF0ZXMgd2l0aCBtaW4gYW5kIG1heCB2YWx1ZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iRnV0dXJlIERhdGUgT25seSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJDYW4gb25seSBzZWxlY3QgZGF0ZXMgZnJvbSB0b2RheSB0byA5MCBkYXlzIGluIHRoZSBmdXR1cmUiCiAgICAgICAgICAubWluRGF0ZT0keygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKX0KICAgICAgICAgIC5tYXhEYXRlPSR7bmV3IERhdGUoRGF0ZS5ub3coKSArIDkwICogMjQgKiA2MCAqIDYwICogMWUzKS50b0lTT1N0cmluZygpfQogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZm9ybWF0dGVyczIgPSB7CiAgICAiREQvTU0vWVlZWSI6ICJFdXJvcGVhbiIsCiAgICAiTU0vREQvWVlZWSI6ICJVUyIsCiAgICAiWVlZWS1NTS1ERCI6ICJJU08iCiAgfTsKICBjb25zdCBkYXRlUGlja2VycyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgZGF0ZVBpY2tlcnMuZm9yRWFjaCgocGlja2VyKSA9PiB7CiAgICBwaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDsKICAgICAgY29uc3QgaW5wdXQgPSB0YXJnZXQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmRhdGUtaW5wdXQiKTsKICAgICAgaWYgKGlucHV0KSB7CiAgICAgICAgY29uc29sZS5sb2coYCR7dGFyZ2V0LmxhYmVsfSBmb3JtYXQ6YCwgaW5wdXQudmFsdWUpOwogICAgICB9CiAgICB9KTsKICB9KTsKfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEYXRlIEZvcm1hdHMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IGRhdGUgZGlzcGxheSBmb3JtYXRzIGZvciB2YXJpb3VzIHJlZ2lvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXRlLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgICAgbGFiZWw9IkV1cm9wZWFuIEZvcm1hdCIKICAgICAgICAgICAgZGF0ZUZvcm1hdD0iREQvTU0vWVlZWSIKICAgICAgICAgICAgLnZhbHVlPSR7KC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICAgIGxhYmVsPSJVUyBGb3JtYXQiCiAgICAgICAgICAgIGRhdGVGb3JtYXQ9Ik1NL0REL1lZWVkiCiAgICAgICAgICAgIC52YWx1ZT0keygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgICBsYWJlbD0iSVNPIEZvcm1hdCIKICAgICAgICAgICAgZGF0ZUZvcm1hdD0iWVlZWS1NTS1ERCIKICAgICAgICAgICAgLnZhbHVlPSR7KC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCByZXF1aXJlZFBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyW3JlcXVpcmVkXSIpOwogIGlmIChyZXF1aXJlZFBpY2tlcikgewogICAgcmVxdWlyZWRQaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc3QgcGlja2VyID0gcmVxdWlyZWRQaWNrZXI7CiAgICAgIGNvbnN0IHZhbHVlMiA9IHBpY2tlci5nZXRWYWx1ZSgpOwogICAgICBpZiAoIXZhbHVlMikgewogICAgICAgIGNvbnNvbGUubG9nKCJSZXF1aXJlZCBkYXRlIGZpZWxkIGlzIGVtcHR5Iik7CiAgICAgIH0KICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGb3JtIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJSZXF1aXJlZCBhbmQgZGlzYWJsZWQgc3RhdGVzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkJpcnRoIERhdGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhpcyBmaWVsZCBpcyByZXF1aXJlZCIKICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICBwbGFjZWhvbGRlcj0iU2VsZWN0IHlvdXIgYmlydGggZGF0ZSIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkRpc2FibGVkIERhdGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhpcyBmaWVsZCBjYW5ub3QgYmUgZWRpdGVkIgogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC52YWx1ZT0keygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHVzUGlja2VyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LWRhdGVwaWNrZXJbbGFiZWw9IlVTIENhbGVuZGFyIl0nKTsKICBjb25zdCBldVBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kYXRlcGlja2VyW2xhYmVsPSJFVSBDYWxlbmRhciJdJyk7CiAgaWYgKHVzUGlja2VyKSB7CiAgICBjb25zb2xlLmxvZygiVVMgQ2FsZW5kYXIgc3RhcnRzIG9uIFN1bmRheSAoMCkiKTsKICB9CiAgaWYgKGV1UGlja2VyKSB7CiAgICBjb25zb2xlLmxvZygiRVUgQ2FsZW5kYXIgc3RhcnRzIG9uIE1vbmRheSAoMSkiKTsKICB9Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQ2FsZW5kYXIgQ3VzdG9taXphdGlvbiJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgd2VlayBzdGFydCBkYXlzIGZvciB2YXJpb3VzIHJlZ2lvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXRlLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgICAgbGFiZWw9IlVTIENhbGVuZGFyIgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iV2VlayBzdGFydHMgb24gU3VuZGF5IgogICAgICAgICAgICAud2Vla1N0YXJ0c09uPSR7MH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgICBsYWJlbD0iRVUgQ2FsZW5kYXIiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJXZWVrIHN0YXJ0cyBvbiBNb25kYXkiCiAgICAgICAgICAgIC53ZWVrU3RhcnRzT249JHsxfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBnZW5lcmF0ZVdlZWtlbmRzID0gKCkgPT4gewogICAgY29uc3Qgd2Vla2VuZHMgPSBbXTsKICAgIGNvbnN0IG5vdzIgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgIGNvbnN0IHllYXIgPSBub3cyLmdldEZ1bGxZZWFyKCk7CiAgICBjb25zdCBtb250aCA9IG5vdzIuZ2V0TW9udGgoKTsKICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSk7CiAgICB3aGlsZSAoZGF0ZS5nZXRNb250aCgpID09PSBtb250aCkgewogICAgICBpZiAoZGF0ZS5nZXREYXkoKSA9PT0gMCB8fCBkYXRlLmdldERheSgpID09PSA2KSB7CiAgICAgICAgd2Vla2VuZHMucHVzaChuZXcgRGF0ZShkYXRlKS50b0lTT1N0cmluZygpKTsKICAgICAgfQogICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAxKTsKICAgIH0KICAgIHJldHVybiB3ZWVrZW5kczsKICB9OwogIGNvbnN0IHBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgaWYgKHBpY2tlcikgewogICAgcGlja2VyLmRpc2FibGVkRGF0ZXMgPSBnZW5lcmF0ZVdlZWtlbmRzKCk7CiAgICBjb25zb2xlLmxvZygiRGlzYWJsZWQgd2Vla2VuZCBkYXRlcyBmb3IgY3VycmVudCBtb250aCIpOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEaXNhYmxlZCBEYXRlcyJ9IC5zdWJ0aXRsZT0keyJDYWxlbmRhciB3aXRoIHNwZWNpZmljIGRhdGVzIGRpc2FibGVkICh3ZWVrZW5kcyBpbiBjdXJyZW50IG1vbnRoKSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJBdmFpbGFiaWxpdHkgQ2FsZW5kYXIiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iV2Vla2VuZHMgYXJlIGRpc2FibGVkIGZvciB0aGUgY3VycmVudCBtb250aCIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgY29uc3QgY3VycmVudE1vbnRoID0gdG9kYXkuZ2V0TW9udGgoKTsKICBjb25zdCBjdXJyZW50WWVhciA9IHRvZGF5LmdldEZ1bGxZZWFyKCk7CiAgY29uc3Qgc2FtcGxlRXZlbnRzID0gWwogICAgLy8gQ3VycmVudCB3ZWVrIGV2ZW50cwogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0ke3RvZGF5LmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgdGl0bGU6ICJUZWFtIE1lZXRpbmciLAogICAgICB0eXBlOiAiaW5mbyIsCiAgICAgIGNvdW50OiAyCiAgICB9LAogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0keyh0b2RheS5nZXREYXRlKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgdGl0bGU6ICJQcm9qZWN0IERlYWRsaW5lIiwKICAgICAgdHlwZTogIndhcm5pbmciCiAgICB9LAogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0keyh0b2RheS5nZXREYXRlKCkgKyAyKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgdGl0bGU6ICJSZWxlYXNlIERheSIsCiAgICAgIHR5cGU6ICJzdWNjZXNzIgogICAgfSwKICAgIHsKICAgICAgZGF0ZTogYCR7Y3VycmVudFllYXJ9LSR7KGN1cnJlbnRNb250aCArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX0tJHsodG9kYXkuZ2V0RGF0ZSgpICsgNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfWAsCiAgICAgIHRpdGxlOiAiVXJnZW50IEZpeCBSZXF1aXJlZCIsCiAgICAgIHR5cGU6ICJlcnJvciIKICAgIH0sCiAgICAvLyBNdWx0aXBsZSBldmVudHMgb24gb25lIGRheQogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0keyh0b2RheS5nZXREYXRlKCkgKyA3KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgdGl0bGU6ICJNdWx0aXBsZSBFdmVudHMgVG9kYXkiLAogICAgICB0eXBlOiAiaW5mbyIsCiAgICAgIGNvdW50OiA1CiAgICB9LAogICAgLy8gTmV4dCBtb250aCBldmVudAogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMikudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0xNWAsCiAgICAgIHRpdGxlOiAiRnV0dXJlIFBsYW5uaW5nIFNlc3Npb24iLAogICAgICB0eXBlOiAiaW5mbyIKICAgIH0KICBdOwogIGNvbnN0IHBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgaWYgKHBpY2tlcikgewogICAgcGlja2VyLmV2ZW50cyA9IHNhbXBsZUV2ZW50czsKICAgIGNvbnNvbGUubG9nKCJDYWxlbmRhciBldmVudHMgbG9hZGVkOiIsIHNhbXBsZUV2ZW50cyk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkNhbGVuZGFyIHdpdGggRXZlbnRzIn0gLnN1YnRpdGxlPSR7IlZpc3VhbCBmZWVkYmFjayBmb3Igc2NoZWR1bGVkIGV2ZW50cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJFdmVudCBDYWxlbmRhciIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJEYXlzIHdpdGggY29sb3JlZCBkb3RzIGhhdmUgZXZlbnRzLiBIb3ZlciB0byBzZWUgZGV0YWlscy4iCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgPHN0cm9uZz5FdmVudCBMZWdlbmQ6PC9zdHJvbmc+PGJyPgogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDk2OWRhOyI+4pePIEluZm88L3NwYW4+IHwgCiAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICNkMjk5MjI7Ij7il48gV2FybmluZzwvc3Bhbj4gfCAKICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzJlYTA0MzsiPuKXjyBTdWNjZXNzPC9zcGFuPiB8IAogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2YyMjJlOyI+4pePIEVycm9yPC9zcGFuPjxicj4KICAgICAgICAgIDxlbT5EYXlzIHdpdGggbW9yZSB0aGFuIDMgZXZlbnRzIHNob3cgYSBjb3VudCBiYWRnZTwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgY29uc3Qgb3V0cHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZXZlbnQtb3V0cHV0Iik7CiAgaWYgKHBpY2tlciAmJiBvdXRwdXQpIHsKICAgIHBpY2tlci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgICBjb25zdCB2YWx1ZTIgPSB0YXJnZXQudmFsdWU7CiAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUyKTsKICAgICAgICBjb25zdCBpbnB1dCA9IHRhcmdldC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZGF0ZS1pbnB1dCIpOwogICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gaW5wdXQ/LnZhbHVlIHx8ICJOL0EiOwogICAgICAgIG91dHB1dC5pbm5lckhUTUwgPSBgCiAgICAgICAgICAgICAgPHN0cm9uZz5FdmVudCB0cmlnZ2VyZWQhPC9zdHJvbmc+PGJyPgogICAgICAgICAgICAgIElTTyBWYWx1ZTogJHt2YWx1ZTJ9PGJyPgogICAgICAgICAgICAgIEZvcm1hdHRlZDogJHtmb3JtYXR0ZWRWYWx1ZX08YnI+CiAgICAgICAgICAgICAgRGF0ZSBvYmplY3Q6ICR7ZGF0ZS50b0xvY2FsZVN0cmluZygpfQogICAgICAgICAgICBgOwogICAgICB9IGVsc2UgewogICAgICAgIG91dHB1dC5pbm5lckhUTUwgPSAiPGVtPkRhdGUgY2xlYXJlZDwvZW0+IjsKICAgICAgfQogICAgfSk7CiAgICBwaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coIkRhdGVwaWNrZXIgbG9zdCBmb2N1cyIpOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkV2ZW50IEhhbmRsaW5nIn0gLnN1YnRpdGxlPSR7IkludGVyYWN0aXZlIGRlbW9uc3RyYXRpb24gb2YgY2hhbmdlIGV2ZW50cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJFdmVudCBEZW1vIgogICAgICAgICAgZGVzY3JpcHRpb249IlNlbGVjdCBhIGRhdGUgdG8gc2VlIHRoZSBldmVudCBkZXRhaWxzIgogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAKICAgICAgICA8ZGl2IGlkPSJldmVudC1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCI+CiAgICAgICAgICA8ZW0+U2VsZWN0IGEgZGF0ZSB0byBzZWUgZXZlbnQgZGV0YWlscy4uLjwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRhdGVwaWNrZXIvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkYXRlcGlja2VyU3R5bGVzID0gWwogIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZGF0ZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIyNCA3MS40JSA0LjElKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICB9CgogICAgICAuZGF0ZS1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgfQoKICAgICAgLmRhdGUtaW5wdXQ6aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgfQoKICAgICAgLmRhdGUtaW5wdXQ6Zm9jdXMsCiAgICAgIC5kYXRlLWlucHV0Lm9wZW4gewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMjQgNzEuNCUgNC4xJSkiKX0sCiAgICAgICAgICAgICAgICAgICAgMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUgLyAwLjEpIiwgImhzbCgyMTAgMjAlIDk4JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5kYXRlLWlucHV0OmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC8qIEljb24gY29udGFpbmVyIHVzaW5nIGZsZXhib3ggZm9yIGJldHRlciBwb3NpdGlvbmluZyAqLwogICAgICAuaWNvbi1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5pY29uLWNvbnRhaW5lciA+ICogewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICAuY2FsZW5kYXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmNsZWFyLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgMC4ycyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5jbGVhci1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICB9CgogICAgICAuY2xlYXItYnV0dG9uOmRpc2FibGVkIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBDYWxlbmRhciBQb3B1cCBTdHlsZXMgKi8KICAgICAgLmNhbGVuZGFyLXBvcHVwIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtLCBvcGFjaXR5OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMjQgNzEuNCUgNC4xJSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMCAxMHB4IDE1cHggLTNweCBoc2woMCAwJSAwJSAvIDAuMSksIDAgNHB4IDZweCAtNHB4IGhzbCgwIDAlIDAlIC8gMC4xKSIsICIwIDEwcHggMTVweCAtM3B4IGhzbCgwIDAlIDAlIC8gMC4yKSwgMCA0cHggNnB4IC00cHggaHNsKDAgMCUgMCUgLyAwLjIpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgei1pbmRleDogNTA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgICB9CgogICAgICAuY2FsZW5kYXItcG9wdXAudG9wIHsKICAgICAgICBib3R0b206IGNhbGMoMTAwJSArIDRweCk7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpOwogICAgICB9CgogICAgICAuY2FsZW5kYXItcG9wdXAuYm90dG9tIHsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5jYWxlbmRhci1wb3B1cC5zaG93IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYWxsOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBDYWxlbmRhciBIZWFkZXIgKi8KICAgICAgLmNhbGVuZGFyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAubW9udGgteWVhci1kaXNwbGF5IHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLm5hdi1idXR0b24gewogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5uYXYtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLm5hdi1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAvKiBXZWVrZGF5IGhlYWRlcnMgKi8KICAgICAgLndlZWtkYXlzIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDcsIDFmcik7CiAgICAgICAgZ2FwOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgfQoKICAgICAgLndlZWtkYXkgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgcGFkZGluZzogMCAwIDhweCAwOwogICAgICB9CgogICAgICAvKiBEYXlzIGdyaWQgKi8KICAgICAgLmRheXMtZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg3LCAxZnIpOwogICAgICAgIGdhcDogMnB4OwogICAgICB9CgogICAgICAuZGF5IHsKICAgICAgICBhc3BlY3QtcmF0aW86IDE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjI0IDcxLjQlIDQuMSUpIiwgImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmRheTpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC5kYXkub3RoZXItbW9udGggewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC5kYXkudG9kYXkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5kYXkuc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUpIiwgImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLmRheS5kaXNhYmxlZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CgogICAgICAvKiBFdmVudCBpbmRpY2F0b3JzICovCiAgICAgIC5kYXkuaGFzLWV2ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5ldmVudC1pbmRpY2F0b3IgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDRweDsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5ldmVudC1kb3QgewogICAgICAgIHdpZHRoOiA0cHg7CiAgICAgICAgaGVpZ2h0OiA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICB9CgogICAgICAuZXZlbnQtZG90LmluZm8gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjExIDcwJSA1MiUpIiwgImhzbCgyMTEgNzAlIDYyJSkiKX07CiAgICAgIH0KCiAgICAgIC5ldmVudC1kb3Qud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NSA5MCUgNDUlKSIsICJoc2woNDUgOTAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5ldmVudC1kb3Quc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIgNjklIDQ1JSkiLCAiaHNsKDE0MiA2OSUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLmV2ZW50LWRvdC5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyJSA1MSUpIiwgImhzbCgwIDcyJSA2MSUpIil9OwogICAgICB9CgogICAgICAuZXZlbnQtY291bnQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDJweDsKICAgICAgICByaWdodDogMnB4OwogICAgICAgIG1pbi13aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMCA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyJSA1MSUpIiwgImhzbCgwIDcyJSA2MSUpIil9OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICB9CgogICAgICAvKiBUb29sdGlwIGZvciBldmVudCBkZXRhaWxzICovCiAgICAgIC5ldmVudC10b29sdGlwIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiBjYWxjKDEwMCUgKyA4cHgpOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDAlKSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICB9CgogICAgICAuZXZlbnQtdG9vbHRpcDo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAuZGF5Lmhhcy1ldmVudDpob3ZlciAuZXZlbnQtdG9vbHRpcCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLyogVGltZSBzZWxlY3RvciAqLwogICAgICAudGltZS1zZWxlY3RvciB7CiAgICAgICAgbWFyZ2luLXRvcDogMTJweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTJweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLnRpbWUtc2VsZWN0b3ItdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0cyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAudGltZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDY1cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0OmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSAvIDAuMSkiLCAiaHNsKDIxMCAyMCUgOTglIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLnRpbWUtc2VwYXJhdG9yIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5hbS1wbS1zZWxlY3RvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICB9CgogICAgICAuYW0tcG0tYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5hbS1wbS1idXR0b24uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUpIiwgImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICB9CgogICAgICAuYW0tcG0tYnV0dG9uOmhvdmVyOm5vdCguc2VsZWN0ZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIEFjdGlvbiBidXR0b25zICovCiAgICAgIC5jYWxlbmRhci1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIG1hcmdpbi10b3A6IDEycHg7CiAgICAgICAgcGFkZGluZy10b3A6IDEycHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLnRvZGF5LWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMjQgNzEuNCUgNC4xJSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLnRvZGF5LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAudG9kYXktYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLmNsZWFyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICB9CgogICAgICAuY2xlYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjEpIiwgImhzbCgwIDYyLjglIDMwLjYlIC8gMC4xKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5jbGVhci1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjIpIiwgImhzbCgwIDYyLjglIDMwLjYlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLyogVGltZXpvbmUgc2VsZWN0b3IgKi8KICAgICAgLnRpbWV6b25lLXNlbGVjdG9yIHsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgIHBhZGRpbmctdG9wOiAxMnB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAudGltZXpvbmUtc2VsZWN0b3ItdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lem9uZS1zZWxlY3QgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICB9CgogICAgICAudGltZXpvbmUtc2VsZWN0OmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lem9uZS1zZWxlY3Q6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlIC8gMC4xKSIsICJoc2woMjEwIDIwJSA5OCUgLyAwLjEpIil9OwogICAgICB9CiAgICBgCl07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kYXRlcGlja2VyL3RlbXBsYXRlLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciByZW5kZXJEYXRlcGlja2VyID0gKGNvbXBvbmVudCkgPT4gewogIGNvbnN0IG1vbnRoTmFtZXMgPSBbCiAgICAiSmFudWFyeSIsCiAgICAiRmVicnVhcnkiLAogICAgIk1hcmNoIiwKICAgICJBcHJpbCIsCiAgICAiTWF5IiwKICAgICJKdW5lIiwKICAgICJKdWx5IiwKICAgICJBdWd1c3QiLAogICAgIlNlcHRlbWJlciIsCiAgICAiT2N0b2JlciIsCiAgICAiTm92ZW1iZXIiLAogICAgIkRlY2VtYmVyIgogIF07CiAgY29uc3Qgd2Vla0RheXMgPSBjb21wb25lbnQud2Vla1N0YXJ0c09uID09PSAxID8gWyJNbyIsICJUdSIsICJXZSIsICJUaCIsICJGciIsICJTYSIsICJTdSJdIDogWyJTdSIsICJNbyIsICJUdSIsICJXZSIsICJUaCIsICJGciIsICJTYSJdOwogIGNvbnN0IGRheXMyID0gY29tcG9uZW50LmdldERheXNJbk1vbnRoKCk7CiAgY29uc3QgaXNBTSA9IGNvbXBvbmVudC5zZWxlY3RlZEhvdXIgPCAxMjsKICBjb25zdCB0aW1lem9uZXMgPSBjb21wb25lbnQuZ2V0VGltZXpvbmVzKCk7CiAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7Y29tcG9uZW50LmxhYmVsfSAuZGVzY3JpcHRpb249JHtjb21wb25lbnQuZGVzY3JpcHRpb259IC5yZXF1aXJlZD0ke2NvbXBvbmVudC5yZXF1aXJlZH0+PC9kZWVzLWxhYmVsPgogICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtY29udGFpbmVyIj4KICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICBjbGFzcz0iZGF0ZS1pbnB1dCAke2NvbXBvbmVudC5pc09wZW5lZCA/ICJvcGVuIiA6ICIifSIKICAgICAgICAgICAgICAudmFsdWU9JHtjb21wb25lbnQuZm9ybWF0RGF0ZShjb21wb25lbnQudmFsdWUpfQogICAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0ke2NvbXBvbmVudC5wbGFjZWhvbGRlcn0KICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtjb21wb25lbnQuZGlzYWJsZWR9CiAgICAgICAgICAgICAgQGNsaWNrPSR7Y29tcG9uZW50LnRvZ2dsZUNhbGVuZGFyfQogICAgICAgICAgICAgIEBrZXlkb3duPSR7Y29tcG9uZW50LmhhbmRsZUtleWRvd259CiAgICAgICAgICAgICAgQGlucHV0PSR7Y29tcG9uZW50LmhhbmRsZU1hbnVhbElucHV0fQogICAgICAgICAgICAgIEBibHVyPSR7Y29tcG9uZW50LmhhbmRsZUlucHV0Qmx1cn0KICAgICAgICAgICAgICBzdHlsZT0icGFkZGluZy1yaWdodDogJHtjb21wb25lbnQudmFsdWUgPyAiNjRweCIgOiAiNDBweCJ9IgogICAgICAgICAgICAvPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgJHtjb21wb25lbnQudmFsdWUgJiYgIWNvbXBvbmVudC5kaXNhYmxlZCA/IGIyYAogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY2xlYXItYnV0dG9uIiBAY2xpY2s9JHtjb21wb25lbnQuY2xlYXJWYWx1ZX0gdGl0bGU9IkNsZWFyIj4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6eCIgaWNvblNpemU9IjE0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJjYWxlbmRhci1pY29uIiBpY29uPSJsdWNpZGU6Y2FsZW5kYXIiIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgCiAgICAgICAgICAgIDwhLS0gQ2FsZW5kYXIgUG9wdXAgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGVuZGFyLXBvcHVwICR7Y29tcG9uZW50LmlzT3BlbmVkID8gInNob3ciIDogIiJ9ICR7Y29tcG9uZW50Lm9wZW5zVG9Ub3AgPyAidG9wIiA6ICJib3R0b20ifSI+CiAgICAgICAgICAgICAgPCEtLSBNb250aC9ZZWFyIE5hdmlnYXRpb24gLS0+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsZW5kYXItaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idXR0b24iIEBjbGljaz0ke2NvbXBvbmVudC5wcmV2aW91c01vbnRofT4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Y2hldnJvbkxlZnQiIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vbnRoLXllYXItZGlzcGxheSI+CiAgICAgICAgICAgICAgICAgICR7bW9udGhOYW1lc1tjb21wb25lbnQudmlld0RhdGUuZ2V0TW9udGgoKV19ICR7Y29tcG9uZW50LnZpZXdEYXRlLmdldEZ1bGxZZWFyKCl9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idXR0b24iIEBjbGljaz0ke2NvbXBvbmVudC5uZXh0TW9udGh9PgogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpjaGV2cm9uUmlnaHQiIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgPCEtLSBXZWVrZGF5IEhlYWRlcnMgLS0+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2Vla2RheXMiPgogICAgICAgICAgICAgICAgJHt3ZWVrRGF5cy5tYXAoKGRheSkgPT4gYjJgPGRpdiBjbGFzcz0id2Vla2RheSI+JHtkYXl9PC9kaXY+YCl9CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDwhLS0gRGF5cyBHcmlkIC0tPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRheXMtZ3JpZCI+CiAgICAgICAgICAgICAgICAke2RheXMyLm1hcCgoZGF5KSA9PiB7CiAgICBjb25zdCBpc1RvZGF5MyA9IGNvbXBvbmVudC5pc1RvZGF5KGRheSk7CiAgICBjb25zdCBpc1NlbGVjdGVkID0gY29tcG9uZW50LmlzU2VsZWN0ZWQoZGF5KTsKICAgIGNvbnN0IGlzT3RoZXJNb250aCA9IGRheS5nZXRNb250aCgpICE9PSBjb21wb25lbnQudmlld0RhdGUuZ2V0TW9udGgoKTsKICAgIGNvbnN0IGlzRGlzYWJsZWQgPSBjb21wb25lbnQuaXNEaXNhYmxlZChkYXkpOwogICAgY29uc3QgZGF5RXZlbnRzID0gY29tcG9uZW50LmdldEV2ZW50c0ZvckRhdGUoZGF5KTsKICAgIGNvbnN0IGhhc0V2ZW50cyA9IGRheUV2ZW50cy5sZW5ndGggPiAwOwogICAgY29uc3QgdG90YWxFdmVudENvdW50ID0gZGF5RXZlbnRzLnJlZHVjZSgoc3VtLCBldmVudCkgPT4gc3VtICsgKGV2ZW50LmNvdW50IHx8IDEpLCAwKTsKICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImRheSAke2lzT3RoZXJNb250aCA/ICJvdGhlci1tb250aCIgOiAiIn0gJHtpc1RvZGF5MyA/ICJ0b2RheSIgOiAiIn0gJHtpc1NlbGVjdGVkID8gInNlbGVjdGVkIiA6ICIifSAke2lzRGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9ICR7aGFzRXZlbnRzID8gImhhcy1ldmVudCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiAhaXNEaXNhYmxlZCAmJiBjb21wb25lbnQuc2VsZWN0RGF0ZShkYXkpfQogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICR7ZGF5LmdldERhdGUoKX0KICAgICAgICAgICAgICAgICAgICAgICR7aGFzRXZlbnRzID8gYjJgCiAgICAgICAgICAgICAgICAgICAgICAgICR7dG90YWxFdmVudENvdW50ID4gMyA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LWNvdW50Ij4ke3RvdGFsRXZlbnRDb3VudH08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgYCA6IGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LWluZGljYXRvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RheUV2ZW50cy5zbGljZSgwLCAzKS5tYXAoKGV2ZW50KSA9PiBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXZlbnQtZG90ICR7ZXZlbnQudHlwZSB8fCAiaW5mbyJ9Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgICAgICAgICAgICAgICAke2RheUV2ZW50c1swXS50aXRsZSA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LXRvb2x0aXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXlFdmVudHNbMF0udGl0bGV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RvdGFsRXZlbnRDb3VudCA+IDEgPyBiMmAgKCske3RvdGFsRXZlbnRDb3VudCAtIDF9IG1vcmUpYCA6ICIifQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIGA7CiAgfSl9CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDwhLS0gVGltZSBTZWxlY3RvciAtLT4KICAgICAgICAgICAgICAke2NvbXBvbmVudC5lbmFibGVUaW1lID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW1lLXNlbGVjdG9yIj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGltZS1zZWxlY3Rvci10aXRsZSI+VGltZTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW1lLWlucHV0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIiAKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0aW1lLWlucHV0IiAKICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke2NvbXBvbmVudC50aW1lRm9ybWF0ID09PSAiMTJoIiA/IChjb21wb25lbnQuc2VsZWN0ZWRIb3VyID09PSAwID8gMTIgOiBjb21wb25lbnQuc2VsZWN0ZWRIb3VyID4gMTIgPyBjb21wb25lbnQuc2VsZWN0ZWRIb3VyIC0gMTIgOiBjb21wb25lbnQuc2VsZWN0ZWRIb3VyKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIikgOiBjb21wb25lbnQuc2VsZWN0ZWRIb3VyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX0KICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IGNvbXBvbmVudC5oYW5kbGVIb3VySW5wdXQoZTExKX0KICAgICAgICAgICAgICAgICAgICAgIG1pbj0iJHtjb21wb25lbnQudGltZUZvcm1hdCA9PT0gIjEyaCIgPyAxIDogMH0iCiAgICAgICAgICAgICAgICAgICAgICBtYXg9IiR7Y29tcG9uZW50LnRpbWVGb3JtYXQgPT09ICIxMmgiID8gMTIgOiAyM30iCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGltZS1zZXBhcmF0b3IiPjo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIiAKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0aW1lLWlucHV0IiAKICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke2NvbXBvbmVudC5zZWxlY3RlZE1pbnV0ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9CiAgICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiBjb21wb25lbnQuaGFuZGxlTWludXRlSW5wdXQoZTExKX0KICAgICAgICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTkiCiAgICAgICAgICAgICAgICAgICAgICBzdGVwPSIke2NvbXBvbmVudC5taW51dGVJbmNyZW1lbnQgfHwgMX0iCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAke2NvbXBvbmVudC50aW1lRm9ybWF0ID09PSAiMTJoIiA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYW0tcG0tc2VsZWN0b3IiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJhbS1wbS1idXR0b24gJHtpc0FNID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiBjb21wb25lbnQuc2V0QU1QTSgiYW0iKX0KICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgIEFNCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJhbS1wbS1idXR0b24gJHshaXNBTSA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gY29tcG9uZW50LnNldEFNUE0oInBtIil9CiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICBQTQogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgICAgIDwhLS0gVGltZXpvbmUgU2VsZWN0b3IgLS0+CiAgICAgICAgICAgICAgJHtjb21wb25lbnQuZW5hYmxlVGltZXpvbmUgPyBiMmAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbWV6b25lLXNlbGVjdG9yIj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGltZXpvbmUtc2VsZWN0b3ItdGl0bGUiPlRpbWV6b25lPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRpbWV6b25lLXNlbGVjdCIgCiAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7Y29tcG9uZW50LnRpbWV6b25lfQogICAgICAgICAgICAgICAgICAgIEBjaGFuZ2U9JHsoZTExKSA9PiBjb21wb25lbnQuaGFuZGxlVGltZXpvbmVDaGFuZ2UoZTExKX0KICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICR7dGltZXpvbmVzLm1hcCgodHopID0+IGIyYAogICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iJHt0ei52YWx1ZX0iID9zZWxlY3RlZD0ke3R6LnZhbHVlID09PSBjb21wb25lbnQudGltZXpvbmV9PgogICAgICAgICAgICAgICAgICAgICAgICAke3R6LmxhYmVsfQogICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCA6ICIifQoKICAgICAgICAgICAgICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGVuZGFyLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ1dHRvbiB0b2RheS1idXR0b24iIEBjbGljaz0ke2NvbXBvbmVudC5zZWxlY3RUb2RheX0+CiAgICAgICAgICAgICAgICAgIFRvZGF5CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24gY2xlYXItYnV0dG9uIiBAY2xpY2s9JHtjb21wb25lbnQuY2xlYXJ9PgogICAgICAgICAgICAgICAgICBDbGVhcgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kYXRlcGlja2VyL2NvbXBvbmVudC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlMTkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczIwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXREYXRlcGlja2VyID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1kYXRlcGlja2VyIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlVGltZV9kZWNvcmF0b3JzOwogIGxldCBfZW5hYmxlVGltZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VuYWJsZVRpbWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RpbWVGb3JtYXRfZGVjb3JhdG9yczsKICBsZXQgX3RpbWVGb3JtYXRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90aW1lRm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW51dGVJbmNyZW1lbnRfZGVjb3JhdG9yczsKICBsZXQgX21pbnV0ZUluY3JlbWVudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21pbnV0ZUluY3JlbWVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGF0ZUZvcm1hdF9kZWNvcmF0b3JzOwogIGxldCBfZGF0ZUZvcm1hdF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RhdGVGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21pbkRhdGVfZGVjb3JhdG9yczsKICBsZXQgX21pbkRhdGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5EYXRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhEYXRlX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhEYXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlzYWJsZWREYXRlc19kZWNvcmF0b3JzOwogIGxldCBfZGlzYWJsZWREYXRlc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rpc2FibGVkRGF0ZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dlZWtTdGFydHNPbl9kZWNvcmF0b3JzOwogIGxldCBfd2Vla1N0YXJ0c09uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfd2Vla1N0YXJ0c09uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzOwogIGxldCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlVGltZXpvbmVfZGVjb3JhdG9yczsKICBsZXQgX2VuYWJsZVRpbWV6b25lX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlVGltZXpvbmVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RpbWV6b25lX2RlY29yYXRvcnM7CiAgbGV0IF90aW1lem9uZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RpbWV6b25lX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ldmVudHNfZGVjb3JhdG9yczsKICBsZXQgX2V2ZW50c19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2V2ZW50c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNPcGVuZWRfZGVjb3JhdG9yczsKICBsZXQgX2lzT3BlbmVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNPcGVuZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wZW5zVG9Ub3BfZGVjb3JhdG9yczsKICBsZXQgX29wZW5zVG9Ub3BfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcGVuc1RvVG9wX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZERhdGVfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkRGF0ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkRGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlld0RhdGVfZGVjb3JhdG9yczsKICBsZXQgX3ZpZXdEYXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlld0RhdGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkSG91cl9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRIb3VyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRIb3VyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE1pbnV0ZV9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRNaW51dGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE1pbnV0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXREYXRlcGlja2VyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3ZhbHVlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfZW5hYmxlVGltZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF90aW1lRm9ybWF0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbWludXRlSW5jcmVtZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfZGF0ZUZvcm1hdF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX21pbkRhdGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tYXhEYXRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfZGlzYWJsZWREYXRlc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfd2Vla1N0YXJ0c09uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9lbmFibGVUaW1lem9uZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF90aW1lem9uZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2V2ZW50c19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfaXNPcGVuZWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX29wZW5zVG9Ub3BfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3NlbGVjdGVkRGF0ZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfdmlld0RhdGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3NlbGVjdGVkSG91cl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2VsZWN0ZWRNaW51dGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfZW5hYmxlVGltZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbmFibGVUaW1lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlbmFibGVUaW1lIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmVuYWJsZVRpbWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVuYWJsZVRpbWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZW5hYmxlVGltZV9pbml0aWFsaXplcnMsIF9lbmFibGVUaW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX3RpbWVGb3JtYXRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGltZUZvcm1hdCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGltZUZvcm1hdCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aW1lRm9ybWF0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50aW1lRm9ybWF0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RpbWVGb3JtYXRfaW5pdGlhbGl6ZXJzLCBfdGltZUZvcm1hdF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9taW51dGVJbmNyZW1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWludXRlSW5jcmVtZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtaW51dGVJbmNyZW1lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWludXRlSW5jcmVtZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5taW51dGVJbmNyZW1lbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWludXRlSW5jcmVtZW50X2luaXRpYWxpemVycywgX21pbnV0ZUluY3JlbWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9kYXRlRm9ybWF0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRhdGVGb3JtYXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRhdGVGb3JtYXQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGF0ZUZvcm1hdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGF0ZUZvcm1hdCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kYXRlRm9ybWF0X2luaXRpYWxpemVycywgX2RhdGVGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfbWluRGF0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtaW5EYXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtaW5EYXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1pbkRhdGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1pbkRhdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWluRGF0ZV9pbml0aWFsaXplcnMsIF9taW5EYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX21heERhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWF4RGF0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWF4RGF0ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYXhEYXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYXhEYXRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21heERhdGVfaW5pdGlhbGl6ZXJzLCBfbWF4RGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9kaXNhYmxlZERhdGVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpc2FibGVkRGF0ZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkRGF0ZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGlzYWJsZWREYXRlcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlzYWJsZWREYXRlcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZERhdGVzX2luaXRpYWxpemVycywgX2Rpc2FibGVkRGF0ZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfd2Vla1N0YXJ0c09uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndlZWtTdGFydHNPbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid2Vla1N0YXJ0c09uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLndlZWtTdGFydHNPbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud2Vla1N0YXJ0c09uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dlZWtTdGFydHNPbl9pbml0aWFsaXplcnMsIF93ZWVrU3RhcnRzT25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicGxhY2Vob2xkZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBsYWNlaG9sZGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBsYWNlaG9sZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wbGFjZWhvbGRlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsIF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9lbmFibGVUaW1lem9uZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbmFibGVUaW1lem9uZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZW5hYmxlVGltZXpvbmUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZW5hYmxlVGltZXpvbmUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVuYWJsZVRpbWV6b25lID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VuYWJsZVRpbWV6b25lX2luaXRpYWxpemVycywgX2VuYWJsZVRpbWV6b25lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX3RpbWV6b25lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRpbWV6b25lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aW1lem9uZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aW1lem9uZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGltZXpvbmUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGltZXpvbmVfaW5pdGlhbGl6ZXJzLCBfdGltZXpvbmVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfZXZlbnRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImV2ZW50cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZXZlbnRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV2ZW50cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZXZlbnRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2V2ZW50c19pbml0aWFsaXplcnMsIF9ldmVudHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfaXNPcGVuZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNPcGVuZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzT3BlbmVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzT3BlbmVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc09wZW5lZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc09wZW5lZF9pbml0aWFsaXplcnMsIF9pc09wZW5lZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9vcGVuc1RvVG9wX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wZW5zVG9Ub3AiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wZW5zVG9Ub3AiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3BlbnNUb1RvcCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3BlbnNUb1RvcCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcGVuc1RvVG9wX2luaXRpYWxpemVycywgX29wZW5zVG9Ub3BfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfc2VsZWN0ZWREYXRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkRGF0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWREYXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkRGF0ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWREYXRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkRGF0ZV9pbml0aWFsaXplcnMsIF9zZWxlY3RlZERhdGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfdmlld0RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmlld0RhdGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZpZXdEYXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZpZXdEYXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52aWV3RGF0ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92aWV3RGF0ZV9pbml0aWFsaXplcnMsIF92aWV3RGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9zZWxlY3RlZEhvdXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRIb3VyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZEhvdXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRIb3VyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZEhvdXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRIb3VyX2luaXRpYWxpemVycywgX3NlbGVjdGVkSG91cl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9zZWxlY3RlZE1pbnV0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZE1pbnV0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRNaW51dGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRNaW51dGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkTWludXRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkTWludXRlX2luaXRpYWxpemVycywgX3NlbGVjdGVkTWludXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTkobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXREYXRlcGlja2VyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTE7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VuYWJsZVRpbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2VuYWJsZVRpbWVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGVuYWJsZVRpbWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlbmFibGVUaW1lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZW5hYmxlVGltZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZW5hYmxlVGltZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RpbWVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9lbmFibGVUaW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfdGltZUZvcm1hdF9pbml0aWFsaXplcnMsICIyNGgiKSk7CiAgICBnZXQgdGltZUZvcm1hdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3RpbWVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0aW1lRm9ybWF0KHZhbHVlMikgewogICAgICB0aGlzLiN0aW1lRm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWludXRlSW5jcmVtZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfdGltZUZvcm1hdF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX21pbnV0ZUluY3JlbWVudF9pbml0aWFsaXplcnMsIDEpKTsKICAgIGdldCBtaW51dGVJbmNyZW1lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtaW51dGVJbmNyZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW51dGVJbmNyZW1lbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pbnV0ZUluY3JlbWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RhdGVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9taW51dGVJbmNyZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9kYXRlRm9ybWF0X2luaXRpYWxpemVycywgIllZWVktTU0tREQiKSk7CiAgICBnZXQgZGF0ZUZvcm1hdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RhdGVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkYXRlRm9ybWF0KHZhbHVlMikgewogICAgICB0aGlzLiNkYXRlRm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWluRGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2RhdGVGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9taW5EYXRlX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBtaW5EYXRlKCkgewogICAgICByZXR1cm4gdGhpcy4jbWluRGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1pbkRhdGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pbkRhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYXhEYXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfbWluRGF0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX21heERhdGVfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IG1heERhdGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYXhEYXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWF4RGF0ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWF4RGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rpc2FibGVkRGF0ZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9tYXhEYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfZGlzYWJsZWREYXRlc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZGlzYWJsZWREYXRlcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Rpc2FibGVkRGF0ZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkaXNhYmxlZERhdGVzKHZhbHVlMikgewogICAgICB0aGlzLiNkaXNhYmxlZERhdGVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjd2Vla1N0YXJ0c09uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfZGlzYWJsZWREYXRlc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3dlZWtTdGFydHNPbl9pbml0aWFsaXplcnMsIDEpKTsKICAgIGdldCB3ZWVrU3RhcnRzT24oKSB7CiAgICAgIHJldHVybiB0aGlzLiN3ZWVrU3RhcnRzT25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIC8vIERlZmF1bHQgdG8gTW9uZGF5CiAgICBzZXQgd2Vla1N0YXJ0c09uKHZhbHVlMikgewogICAgICB0aGlzLiN3ZWVrU3RhcnRzT25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3dlZWtTdGFydHNPbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycywgIllZWVktTU0tREQiKSk7CiAgICBnZXQgcGxhY2Vob2xkZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlMikgewogICAgICB0aGlzLiNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VuYWJsZVRpbWV6b25lX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9lbmFibGVUaW1lem9uZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgZW5hYmxlVGltZXpvbmUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlbmFibGVUaW1lem9uZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGVuYWJsZVRpbWV6b25lKHZhbHVlMikgewogICAgICB0aGlzLiNlbmFibGVUaW1lem9uZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RpbWV6b25lX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfZW5hYmxlVGltZXpvbmVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF90aW1lem9uZV9pbml0aWFsaXplcnMsIEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZSkpOwogICAgZ2V0IHRpbWV6b25lKCkgewogICAgICByZXR1cm4gdGhpcy4jdGltZXpvbmVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0aW1lem9uZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGltZXpvbmVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNldmVudHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF90aW1lem9uZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2V2ZW50c19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZXZlbnRzKCkgewogICAgICByZXR1cm4gdGhpcy4jZXZlbnRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZXZlbnRzKHZhbHVlMikgewogICAgICB0aGlzLiNldmVudHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc09wZW5lZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2V2ZW50c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2lzT3BlbmVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc09wZW5lZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzT3BlbmVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNPcGVuZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzT3BlbmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjb3BlbnNUb1RvcF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2lzT3BlbmVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfb3BlbnNUb1RvcF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgb3BlbnNUb1RvcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wZW5zVG9Ub3BfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcGVuc1RvVG9wKHZhbHVlMikgewogICAgICB0aGlzLiNvcGVuc1RvVG9wX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWREYXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfb3BlbnNUb1RvcF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3NlbGVjdGVkRGF0ZV9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCBzZWxlY3RlZERhdGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZERhdGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZERhdGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGVkRGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3ZpZXdEYXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfc2VsZWN0ZWREYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfdmlld0RhdGVfaW5pdGlhbGl6ZXJzLCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkpOwogICAgZ2V0IHZpZXdEYXRlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmlld0RhdGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2aWV3RGF0ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmlld0RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZEhvdXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF92aWV3RGF0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3NlbGVjdGVkSG91cl9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBzZWxlY3RlZEhvdXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZEhvdXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZEhvdXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGVkSG91cl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkTWludXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfc2VsZWN0ZWRIb3VyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfc2VsZWN0ZWRNaW51dGVfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgc2VsZWN0ZWRNaW51dGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZE1pbnV0ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkTWludXRlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZE1pbnV0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IGRhdGVwaWNrZXJTdHlsZXM7CiAgICBnZXRUaW1lem9uZXMoKSB7CiAgICAgIHJldHVybiBbCiAgICAgICAgeyB2YWx1ZTogIlVUQyIsIGxhYmVsOiAiVVRDIChDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSkiIH0sCiAgICAgICAgeyB2YWx1ZTogIkFtZXJpY2EvTmV3X1lvcmsiLCBsYWJlbDogIkVhc3Rlcm4gVGltZSAoVVMgJiBDYW5hZGEpIiB9LAogICAgICAgIHsgdmFsdWU6ICJBbWVyaWNhL0NoaWNhZ28iLCBsYWJlbDogIkNlbnRyYWwgVGltZSAoVVMgJiBDYW5hZGEpIiB9LAogICAgICAgIHsgdmFsdWU6ICJBbWVyaWNhL0RlbnZlciIsIGxhYmVsOiAiTW91bnRhaW4gVGltZSAoVVMgJiBDYW5hZGEpIiB9LAogICAgICAgIHsgdmFsdWU6ICJBbWVyaWNhL0xvc19BbmdlbGVzIiwgbGFiZWw6ICJQYWNpZmljIFRpbWUgKFVTICYgQ2FuYWRhKSIgfSwKICAgICAgICB7IHZhbHVlOiAiQW1lcmljYS9QaG9lbml4IiwgbGFiZWw6ICJBcml6b25hIiB9LAogICAgICAgIHsgdmFsdWU6ICJBbWVyaWNhL0FuY2hvcmFnZSIsIGxhYmVsOiAiQWxhc2thIiB9LAogICAgICAgIHsgdmFsdWU6ICJQYWNpZmljL0hvbm9sdWx1IiwgbGFiZWw6ICJIYXdhaWkiIH0sCiAgICAgICAgeyB2YWx1ZTogIkV1cm9wZS9Mb25kb24iLCBsYWJlbDogIkxvbmRvbiIgfSwKICAgICAgICB7IHZhbHVlOiAiRXVyb3BlL1BhcmlzIiwgbGFiZWw6ICJQYXJpcyIgfSwKICAgICAgICB7IHZhbHVlOiAiRXVyb3BlL0JlcmxpbiIsIGxhYmVsOiAiQmVybGluIiB9LAogICAgICAgIHsgdmFsdWU6ICJFdXJvcGUvTW9zY293IiwgbGFiZWw6ICJNb3Njb3ciIH0sCiAgICAgICAgeyB2YWx1ZTogIkFzaWEvRHViYWkiLCBsYWJlbDogIkR1YmFpIiB9LAogICAgICAgIHsgdmFsdWU6ICJBc2lhL0tvbGthdGEiLCBsYWJlbDogIkluZGlhIFN0YW5kYXJkIFRpbWUiIH0sCiAgICAgICAgeyB2YWx1ZTogIkFzaWEvU2hhbmdoYWkiLCBsYWJlbDogIkNoaW5hIFN0YW5kYXJkIFRpbWUiIH0sCiAgICAgICAgeyB2YWx1ZTogIkFzaWEvVG9reW8iLCBsYWJlbDogIlRva3lvIiB9LAogICAgICAgIHsgdmFsdWU6ICJBdXN0cmFsaWEvU3lkbmV5IiwgbGFiZWw6ICJTeWRuZXkiIH0sCiAgICAgICAgeyB2YWx1ZTogIlBhY2lmaWMvQXVja2xhbmQiLCBsYWJlbDogIkF1Y2tsYW5kIiB9CiAgICAgIF07CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiByZW5kZXJEYXRlcGlja2VyKHRoaXMpOwogICAgfQogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlID0gdGhpcy5oYW5kbGVDbGlja091dHNpZGUuYmluZCh0aGlzKTsKICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKTsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7CiAgICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICB9CiAgICAgIGlmICh0aGlzLnZhbHVlKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlKTsKICAgICAgICAgIGlmICghaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTsKICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKGRhdGUpOwogICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGRhdGUuZ2V0SG91cnMoKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IGRhdGUuZ2V0TWludXRlcygpOwogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggewogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBub3cyID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKG5vdzIpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gbm93Mi5nZXRIb3VycygpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSAwOwogICAgICB9CiAgICB9CiAgICBmb3JtYXREYXRlKGlzb1N0cmluZykgewogICAgICBpZiAoIWlzb1N0cmluZykKICAgICAgICByZXR1cm4gIiI7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGlzb1N0cmluZyk7CiAgICAgICAgaWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICBsZXQgZm9ybWF0dGVkID0gdGhpcy5kYXRlRm9ybWF0OwogICAgICAgIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKTsKICAgICAgICBjb25zdCBtb250aCA9IChkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIik7CiAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpOwogICAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKCJZWVlZIiwgeWVhcik7CiAgICAgICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoIllZIiwgeWVhci5zbGljZSgtMikpOwogICAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKCJNTSIsIG1vbnRoKTsKICAgICAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgiREQiLCBkYXkpOwogICAgICAgIGlmICh0aGlzLmVuYWJsZVRpbWUpIHsKICAgICAgICAgIGNvbnN0IGhvdXJzMjQgPSBkYXRlLmdldEhvdXJzKCk7CiAgICAgICAgICBjb25zdCBob3VyczEyID0gaG91cnMyNCA9PT0gMCA/IDEyIDogaG91cnMyNCA+IDEyID8gaG91cnMyNCAtIDEyIDogaG91cnMyNDsKICAgICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIik7CiAgICAgICAgICBjb25zdCBhbXBtID0gaG91cnMyNCA+PSAxMiA/ICJQTSIgOiAiQU0iOwogICAgICAgICAgaWYgKHRoaXMudGltZUZvcm1hdCA9PT0gIjEyaCIpIHsKICAgICAgICAgICAgZm9ybWF0dGVkICs9IGAgJHtob3VyczEyfToke21pbnV0ZXN9ICR7YW1wbX1gOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9ybWF0dGVkICs9IGAgJHtob3VyczI0LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX06JHttaW51dGVzfWA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmVuYWJsZVRpbWV6b25lKSB7CiAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImVuLVVTIiwgewogICAgICAgICAgICB0aW1lWm9uZU5hbWU6ICJzaG9ydCIsCiAgICAgICAgICAgIHRpbWVab25lOiB0aGlzLnRpbWV6b25lCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IHBhcnRzID0gZm9ybWF0dGVyMi5mb3JtYXRUb1BhcnRzKGRhdGUpOwogICAgICAgICAgY29uc3QgdHpQYXJ0ID0gcGFydHMuZmluZCgocGFydCkgPT4gcGFydC50eXBlID09PSAidGltZVpvbmVOYW1lIik7CiAgICAgICAgICBpZiAodHpQYXJ0KSB7CiAgICAgICAgICAgIGZvcm1hdHRlZCArPSBgICR7dHpQYXJ0LnZhbHVlfWA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3JtYXR0ZWQ7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIHJldHVybiAiIjsKICAgICAgfQogICAgfQogICAgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3NlbGVjdGVkTWludXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHBhdGgyID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7CiAgICAgIGlmICghcGF0aDIuaW5jbHVkZXModGhpcykpIHsKICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgIH0KICAgIH0pOwogICAgYXN5bmMgdG9nZ2xlQ2FsZW5kYXIoKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5pc09wZW5lZCA9ICF0aGlzLmlzT3BlbmVkOwogICAgICBpZiAodGhpcy5pc09wZW5lZCkgewogICAgICAgIGNvbnN0IGlucHV0Q29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5pbnB1dC1jb250YWluZXIiKTsKICAgICAgICBjb25zdCByZWN0ID0gaW5wdXRDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3Qgc3BhY2VCZWxvdyA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QuYm90dG9tOwogICAgICAgIGNvbnN0IHNwYWNlQWJvdmUgPSByZWN0LnRvcDsKICAgICAgICB0aGlzLm9wZW5zVG9Ub3AgPSBzcGFjZUJlbG93IDwgNDAwICYmIHNwYWNlQWJvdmUgPiBzcGFjZUJlbG93OwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgICAgfSwgMCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgIH0KICAgIH0KICAgIGdldERheXNJbk1vbnRoKCkgewogICAgICBjb25zdCB5ZWFyID0gdGhpcy52aWV3RGF0ZS5nZXRGdWxsWWVhcigpOwogICAgICBjb25zdCBtb250aCA9IHRoaXMudmlld0RhdGUuZ2V0TW9udGgoKTsKICAgICAgY29uc3QgZmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSk7CiAgICAgIGNvbnN0IGxhc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApOwogICAgICBjb25zdCBkYXlzMiA9IFtdOwogICAgICBjb25zdCBzdGFydE9mZnNldCA9IHRoaXMud2Vla1N0YXJ0c09uID09PSAxID8gZmlyc3REYXkuZ2V0RGF5KCkgPT09IDAgPyA2IDogZmlyc3REYXkuZ2V0RGF5KCkgLSAxIDogZmlyc3REYXkuZ2V0RGF5KCk7CiAgICAgIGZvciAobGV0IGkxMSA9IHN0YXJ0T2Zmc2V0OyBpMTEgPiAwOyBpMTEtLSkgewogICAgICAgIGRheXMyLnB1c2gobmV3IERhdGUoeWVhciwgbW9udGgsIDEgLSBpMTEpKTsKICAgICAgfQogICAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gbGFzdERheS5nZXREYXRlKCk7IGkxMSsrKSB7CiAgICAgICAgZGF5czIucHVzaChuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaTExKSk7CiAgICAgIH0KICAgICAgY29uc3QgcmVtYWluaW5nRGF5cyA9IDQyIC0gZGF5czIubGVuZ3RoOwogICAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gcmVtYWluaW5nRGF5czsgaTExKyspIHsKICAgICAgICBkYXlzMi5wdXNoKG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgaTExKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGRheXMyOwogICAgfQogICAgaXNUb2RheShkYXRlKSB7CiAgICAgIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgIHJldHVybiBkYXRlLmdldERhdGUoKSA9PT0gdG9kYXkuZ2V0RGF0ZSgpICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gdG9kYXkuZ2V0TW9udGgoKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHRvZGF5LmdldEZ1bGxZZWFyKCk7CiAgICB9CiAgICBpc1NlbGVjdGVkKGRhdGUpIHsKICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRGF0ZSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiBkYXRlLmdldERhdGUoKSA9PT0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0RGF0ZSgpICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHRoaXMuc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7CiAgICB9CiAgICBpc0Rpc2FibGVkKGRhdGUpIHsKICAgICAgaWYgKHRoaXMubWluRGF0ZSkgewogICAgICAgIGNvbnN0IG1pbjMgPSBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpOwogICAgICAgIGlmIChkYXRlIDwgbWluMykKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlmICh0aGlzLm1heERhdGUpIHsKICAgICAgICBjb25zdCBtYXgzID0gbmV3IERhdGUodGhpcy5tYXhEYXRlKTsKICAgICAgICBpZiAoZGF0ZSA+IG1heDMpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAodGhpcy5kaXNhYmxlZERhdGVzICYmIHRoaXMuZGlzYWJsZWREYXRlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWREYXRlcy5zb21lKChkaXNhYmxlZFN0cikgPT4gewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgZGlzYWJsZWQyID0gbmV3IERhdGUoZGlzYWJsZWRTdHIpOwogICAgICAgICAgICByZXR1cm4gZGF0ZS5nZXREYXRlKCkgPT09IGRpc2FibGVkMi5nZXREYXRlKCkgJiYgZGF0ZS5nZXRNb250aCgpID09PSBkaXNhYmxlZDIuZ2V0TW9udGgoKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IGRpc2FibGVkMi5nZXRGdWxsWWVhcigpOwogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBnZXRFdmVudHNGb3JEYXRlKGRhdGUpIHsKICAgICAgaWYgKCF0aGlzLmV2ZW50cyB8fCB0aGlzLmV2ZW50cy5sZW5ndGggPT09IDApCiAgICAgICAgcmV0dXJuIFtdOwogICAgICBjb25zdCBkYXRlU3RyID0gYCR7ZGF0ZS5nZXRGdWxsWWVhcigpfS0keyhkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9LSR7ZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfWA7CiAgICAgIHJldHVybiB0aGlzLmV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5kYXRlID09PSBkYXRlU3RyKTsKICAgIH0KICAgIHNlbGVjdERhdGUoZGF0ZSkgewogICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgdGhpcy5zZWxlY3RlZEhvdXIsIHRoaXMuc2VsZWN0ZWRNaW51dGUpOwogICAgICB0aGlzLnZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZVdpdGhUaW1lem9uZSh0aGlzLnNlbGVjdGVkRGF0ZSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICBpZiAoIXRoaXMuZW5hYmxlVGltZSkgewogICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgc2VsZWN0VG9kYXkoKSB7CiAgICAgIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gdG9kYXk7CiAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZSh0b2RheSk7CiAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdG9kYXkuZ2V0SG91cnMoKTsKICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IHRvZGF5LmdldE1pbnV0ZXMoKTsKICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWVXaXRoVGltZXpvbmUodGhpcy5zZWxlY3RlZERhdGUpOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgaWYgKCF0aGlzLmVuYWJsZVRpbWUpIHsKICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGNsZWFyKCkgewogICAgICB0aGlzLnZhbHVlID0gIiI7CiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgIH0KICAgIHByZXZpb3VzTW9udGgoKSB7CiAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLnZpZXdEYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMudmlld0RhdGUuZ2V0TW9udGgoKSAtIDEsIDEpOwogICAgfQogICAgbmV4dE1vbnRoKCkgewogICAgICB0aGlzLnZpZXdEYXRlID0gbmV3IERhdGUodGhpcy52aWV3RGF0ZS5nZXRGdWxsWWVhcigpLCB0aGlzLnZpZXdEYXRlLmdldE1vbnRoKCkgKyAxLCAxKTsKICAgIH0KICAgIGhhbmRsZUhvdXJJbnB1dChlMTEpIHsKICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICBsZXQgdmFsdWUyID0gcGFyc2VJbnQoaW5wdXQudmFsdWUpIHx8IDA7CiAgICAgIGlmICh0aGlzLnRpbWVGb3JtYXQgPT09ICIxMmgiKSB7CiAgICAgICAgdmFsdWUyID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oMTIsIHZhbHVlMikpOwogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSG91ciA+PSAxMiAmJiB2YWx1ZTIgIT09IDEyKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHZhbHVlMiArIDEyOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEhvdXIgPCAxMiAmJiB2YWx1ZTIgPT09IDEyKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IDA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IE1hdGgubWF4KDAsIE1hdGgubWluKDIzLCB2YWx1ZTIpKTsKICAgICAgfQogICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKTsKICAgIH0KICAgIGhhbmRsZU1pbnV0ZUlucHV0KGUxMSkgewogICAgICBjb25zdCBpbnB1dCA9IGUxMS50YXJnZXQ7CiAgICAgIGxldCB2YWx1ZTIgPSBwYXJzZUludChpbnB1dC52YWx1ZSkgfHwgMDsKICAgICAgdmFsdWUyID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oNTksIHZhbHVlMikpOwogICAgICBpZiAodGhpcy5taW51dGVJbmNyZW1lbnQgJiYgdGhpcy5taW51dGVJbmNyZW1lbnQgPiAxKSB7CiAgICAgICAgdmFsdWUyID0gTWF0aC5yb3VuZCh2YWx1ZTIgLyB0aGlzLm1pbnV0ZUluY3JlbWVudCkgKiB0aGlzLm1pbnV0ZUluY3JlbWVudDsKICAgICAgfQogICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gdmFsdWUyOwogICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKTsKICAgIH0KICAgIHNldEFNUE0ocGVyaW9kKSB7CiAgICAgIGlmIChwZXJpb2QgPT09ICJhbSIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPj0gMTIpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciAtPSAxMjsKICAgICAgfSBlbHNlIGlmIChwZXJpb2QgPT09ICJwbSIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPCAxMikgewogICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyICs9IDEyOwogICAgICB9CiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWREYXRlVGltZSgpOwogICAgfQogICAgdXBkYXRlU2VsZWN0ZWREYXRlVGltZSgpIHsKICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpLCB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRNb250aCgpLCB0aGlzLnNlbGVjdGVkRGF0ZS5nZXREYXRlKCksIHRoaXMuc2VsZWN0ZWRIb3VyLCB0aGlzLnNlbGVjdGVkTWludXRlKTsKICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZVdpdGhUaW1lem9uZSh0aGlzLnNlbGVjdGVkRGF0ZSk7CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVRpbWV6b25lQ2hhbmdlKGUxMSkgewogICAgICBjb25zdCBzZWxlY3QgPSBlMTEudGFyZ2V0OwogICAgICB0aGlzLnRpbWV6b25lID0gc2VsZWN0LnZhbHVlOwogICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKTsKICAgIH0KICAgIGZvcm1hdFZhbHVlV2l0aFRpbWV6b25lKGRhdGUpIHsKICAgICAgaWYgKCF0aGlzLmVuYWJsZVRpbWV6b25lKSB7CiAgICAgICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTsKICAgICAgfQogICAgICBjb25zdCBmb3JtYXR0ZXIyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImVuLVVTIiwgewogICAgICAgIHllYXI6ICJudW1lcmljIiwKICAgICAgICBtb250aDogIjItZGlnaXQiLAogICAgICAgIGRheTogIjItZGlnaXQiLAogICAgICAgIGhvdXI6ICIyLWRpZ2l0IiwKICAgICAgICBtaW51dGU6ICIyLWRpZ2l0IiwKICAgICAgICBzZWNvbmQ6ICIyLWRpZ2l0IiwKICAgICAgICBob3VyMTI6IGZhbHNlLAogICAgICAgIHRpbWVab25lOiB0aGlzLnRpbWV6b25lLAogICAgICAgIHRpbWVab25lTmFtZTogInNob3J0IgogICAgICB9KTsKICAgICAgY29uc3QgcGFydHMgPSBmb3JtYXR0ZXIyLmZvcm1hdFRvUGFydHMoZGF0ZSk7CiAgICAgIGNvbnN0IGRhdGVQYXJ0cyA9IHt9OwogICAgICBwYXJ0cy5mb3JFYWNoKChwYXJ0KSA9PiB7CiAgICAgICAgZGF0ZVBhcnRzW3BhcnQudHlwZV0gPSBwYXJ0LnZhbHVlOwogICAgICB9KTsKICAgICAgY29uc3QgaXNvU3RyaW5nID0gYCR7ZGF0ZVBhcnRzLnllYXJ9LSR7ZGF0ZVBhcnRzLm1vbnRofS0ke2RhdGVQYXJ0cy5kYXl9VCR7ZGF0ZVBhcnRzLmhvdXJ9OiR7ZGF0ZVBhcnRzLm1pbnV0ZX06JHtkYXRlUGFydHMuc2Vjb25kfWA7CiAgICAgIGNvbnN0IHR6T2Zmc2V0ID0gdGhpcy5nZXRUaW1lem9uZU9mZnNldChkYXRlLCB0aGlzLnRpbWV6b25lKTsKICAgICAgcmV0dXJuIGAke2lzb1N0cmluZ30ke3R6T2Zmc2V0fWA7CiAgICB9CiAgICBnZXRUaW1lem9uZU9mZnNldChkYXRlLCB0aW1lem9uZSkgewogICAgICBjb25zdCB0ekRhdGUgPSBuZXcgRGF0ZShkYXRlLnRvTG9jYWxlU3RyaW5nKCJlbi1VUyIsIHsgdGltZVpvbmU6IHRpbWV6b25lIH0pKTsKICAgICAgY29uc3QgdXRjRGF0ZSA9IG5ldyBEYXRlKGRhdGUudG9Mb2NhbGVTdHJpbmcoImVuLVVTIiwgeyB0aW1lWm9uZTogIlVUQyIgfSkpOwogICAgICBjb25zdCBvZmZzZXRNaW51dGVzID0gKHR6RGF0ZS5nZXRUaW1lKCkgLSB1dGNEYXRlLmdldFRpbWUoKSkgLyAoMWUzICogNjApOwogICAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IoTWF0aC5hYnMob2Zmc2V0TWludXRlcykgLyA2MCk7CiAgICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmFicyhvZmZzZXRNaW51dGVzKSAlIDYwOwogICAgICBjb25zdCBzaWduID0gb2Zmc2V0TWludXRlcyA+PSAwID8gIisiIDogIi0iOwogICAgICByZXR1cm4gYCR7c2lnbn0ke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX06JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX1gOwogICAgfQogICAgaGFuZGxlS2V5ZG93bihlMTEpIHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIgfHwgZTExLmtleSA9PT0gIiAiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy50b2dnbGVDYWxlbmRhcigpOwogICAgICB9IGVsc2UgaWYgKGUxMS5rZXkgPT09ICJFc2NhcGUiICYmIHRoaXMuaXNPcGVuZWQpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGNsZWFyVmFsdWUoZTExKSB7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgaGFuZGxlTWFudWFsSW5wdXQoZTExKSB7CiAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0LnZhbHVlLnRyaW0oKTsKICAgICAgaWYgKCFpbnB1dFZhbHVlKSB7CiAgICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgcGFyc2VkRGF0ZSA9IHRoaXMucGFyc2VNYW51YWxEYXRlKGlucHV0VmFsdWUpOwogICAgICBpZiAocGFyc2VkRGF0ZSAmJiAhaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpKSB7CiAgICAgICAgdGhpcy52YWx1ZSA9IHBhcnNlZERhdGUudG9JU09TdHJpbmcoKTsKICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHBhcnNlZERhdGU7CiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKHBhcnNlZERhdGUpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gcGFyc2VkRGF0ZS5nZXRIb3VycygpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBwYXJzZWREYXRlLmdldE1pbnV0ZXMoKTsKICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlSW5wdXRCbHVyKGUxMSkgewogICAgICBjb25zdCBpbnB1dCA9IGUxMS50YXJnZXQ7CiAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSBpbnB1dC52YWx1ZS50cmltKCk7CiAgICAgIGlmICghaW5wdXRWYWx1ZSkgewogICAgICAgIHRoaXMudmFsdWUgPSAiIjsKICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHBhcnNlZERhdGUgPSB0aGlzLnBhcnNlTWFudWFsRGF0ZShpbnB1dFZhbHVlKTsKICAgICAgaWYgKHBhcnNlZERhdGUgJiYgIWlzTmFOKHBhcnNlZERhdGUuZ2V0VGltZSgpKSkgewogICAgICAgIHRoaXMudmFsdWUgPSBwYXJzZWREYXRlLnRvSVNPU3RyaW5nKCk7CiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBwYXJzZWREYXRlOwogICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZShwYXJzZWREYXRlKTsKICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHBhcnNlZERhdGUuZ2V0SG91cnMoKTsKICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gcGFyc2VkRGF0ZS5nZXRNaW51dGVzKCk7CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLmZvcm1hdERhdGUodGhpcy52YWx1ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLmZvcm1hdERhdGUodGhpcy52YWx1ZSk7CiAgICAgIH0KICAgIH0KICAgIHBhcnNlTWFudWFsRGF0ZShpbnB1dCkgewogICAgICBpZiAoIWlucHV0KQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCBwYXJ0cyA9IGlucHV0LnNwbGl0KCIgIik7CiAgICAgIGxldCBkYXRlUGFydCA9IHBhcnRzWzBdOwogICAgICBsZXQgdGltZVBhcnQgPSBwYXJ0c1sxXSB8fCAiIjsKICAgICAgbGV0IHBhcnNlZERhdGUgPSBudWxsOwogICAgICBjb25zdCBpc29NYXRjaCA9IGRhdGVQYXJ0Lm1hdGNoKC9eKFxkezR9KS0oXGR7MSwyfSktKFxkezEsMn0pJC8pOwogICAgICBpZiAoaXNvTWF0Y2gpIHsKICAgICAgICBjb25zdCBbXzQsIHllYXIsIG1vbnRoLCBkYXldID0gaXNvTWF0Y2g7CiAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKHBhcnNlSW50KHllYXIpLCBwYXJzZUludChtb250aCkgLSAxLCBwYXJzZUludChkYXkpKTsKICAgICAgfQogICAgICBpZiAoIXBhcnNlZERhdGUpIHsKICAgICAgICBjb25zdCBldU1hdGNoID0gZGF0ZVBhcnQubWF0Y2goL14oXGR7MSwyfSlcLihcZHsxLDJ9KVwuKFxkezR9KSQvKTsKICAgICAgICBpZiAoZXVNYXRjaCkgewogICAgICAgICAgY29uc3QgW180LCBkYXksIG1vbnRoLCB5ZWFyXSA9IGV1TWF0Y2g7CiAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUocGFyc2VJbnQoeWVhciksIHBhcnNlSW50KG1vbnRoKSAtIDEsIHBhcnNlSW50KGRheSkpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIXBhcnNlZERhdGUpIHsKICAgICAgICBjb25zdCB1c01hdGNoID0gZGF0ZVBhcnQubWF0Y2goL14oXGR7MSwyfSlcLyhcZHsxLDJ9KVwvKFxkezR9KSQvKTsKICAgICAgICBpZiAodXNNYXRjaCkgewogICAgICAgICAgY29uc3QgW180LCBtb250aCwgZGF5LCB5ZWFyXSA9IHVzTWF0Y2g7CiAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUocGFyc2VJbnQoeWVhciksIHBhcnNlSW50KG1vbnRoKSAtIDEsIHBhcnNlSW50KGRheSkpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIXBhcnNlZERhdGUgfHwgaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRpbWVQYXJ0KSB7CiAgICAgICAgY29uc3QgdGltZU1hdGNoID0gdGltZVBhcnQubWF0Y2goL14oXGR7MSwyfSk6KFxkezJ9KSQvKTsKICAgICAgICBpZiAodGltZU1hdGNoKSB7CiAgICAgICAgICBjb25zdCBbXzQsIGhvdXJzLCBtaW51dGVzXSA9IHRpbWVNYXRjaDsKICAgICAgICAgIHBhcnNlZERhdGUuc2V0SG91cnMocGFyc2VJbnQoaG91cnMpKTsKICAgICAgICAgIHBhcnNlZERhdGUuc2V0TWludXRlcyhwYXJzZUludChtaW51dGVzKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKCF0aGlzLmVuYWJsZVRpbWUpIHsKICAgICAgICBjb25zdCBub3cyID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgICAgcGFyc2VkRGF0ZS5zZXRIb3Vycyhub3cyLmdldEhvdXJzKCkpOwogICAgICAgIHBhcnNlZERhdGUuc2V0TWludXRlcyhub3cyLmdldE1pbnV0ZXMoKSk7CiAgICAgICAgcGFyc2VkRGF0ZS5zZXRTZWNvbmRzKDApOwogICAgICAgIHBhcnNlZERhdGUuc2V0TWlsbGlzZWNvbmRzKDApOwogICAgICB9CiAgICAgIHJldHVybiBwYXJzZWREYXRlOwogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlMik7CiAgICAgICAgICBpZiAoIWlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgewogICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGRhdGU7CiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZShkYXRlKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBkYXRlLmdldEhvdXJzKCk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBkYXRlLmdldE1pbnV0ZXMoKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dERhdGVwaWNrZXIyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRleHQvZGVlcy1pbnB1dC10ZXh0LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMTIgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC5pbnRlcmFjdGl2ZS1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5vdXRwdXQtdGV4dCB7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjEwIDQwJSA4MCUpIil9OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTglKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWluLWhlaWdodDogMjRweDsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgaW5wdXRzID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LXRleHQiKTsKICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHsKICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVN1YmplY3QiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coYElucHV0ICIke2lucHV0LmxhYmVsfSIgY2hhbmdlZCB0bzpgLCBpbnB1dC5nZXRWYWx1ZSgpKTsKICAgIH0pOwogICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coYElucHV0ICIke2lucHV0LmxhYmVsfSIgbG9zdCBmb2N1c2ApOwogICAgfSk7CiAgfSk7CiAgY29uc3QgcGFzc3dvcmRJbnB1dCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC10ZXh0W2tleT0icGFzc3dvcmQiXScpOwogIGlmIChwYXNzd29yZElucHV0KSB7CiAgICBjb25zb2xlLmxvZygiUGFzc3dvcmQgaW5wdXQgaW5jbHVkZXMgdmlzaWJpbGl0eSB0b2dnbGUiKTsKICB9Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgVGV4dCBJbnB1dHMifSAuc3VidGl0bGU9JHsiU3RhbmRhcmQgdGV4dCBpbnB1dHMgd2l0aCBsYWJlbHMgYW5kIGRlc2NyaXB0aW9ucyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAubGFiZWw9JHsiVXNlcm5hbWUifSAKICAgICAgICAgIC52YWx1ZT0keyJqb2huZG9lIn0KICAgICAgICAgIC5rZXk9JHsidXNlcm5hbWUifQogICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IkVtYWlsIEFkZHJlc3MifSAKICAgICAgICAgIC52YWx1ZT0keyJqb2huQGV4YW1wbGUuY29tIn0gCiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiV2Ugd2lsbCBuZXZlciBzaGFyZSB5b3VyIGVtYWlsIHdpdGggYW55b25lIn0KICAgICAgICAgIC5rZXk9JHsiZW1haWwifQogICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IlBhc3N3b3JkIn0gCiAgICAgICAgICAuaXNQYXNzd29yZEJvb2w9JHt0cnVlfSAKICAgICAgICAgIC52YWx1ZT0keyJzZWNyZXQxMjMifQogICAgICAgICAgLmtleT0keyJwYXNzd29yZCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgaG9yaXpvbnRhbElucHV0cyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC10ZXh0Iik7CiAgaG9yaXpvbnRhbElucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4gewogICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGlucHV0KTsKICAgIGNvbnNvbGUubG9nKGBIb3Jpem9udGFsIGlucHV0ICIke2lucHV0LmxhYmVsfSIgZGlzcGxheTpgLCBjb21wdXRlZFN0eWxlLmRpc3BsYXkpOwogIH0pOwogIGNvbnN0IGZpcnN0TmFtZUlucHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LXRleHRba2V5PSJmaXJzdE5hbWUiXScpOwogIGNvbnN0IGxhc3ROYW1lSW5wdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtdGV4dFtrZXk9Imxhc3ROYW1lIl0nKTsKICBpZiAoZmlyc3ROYW1lSW5wdXQgJiYgbGFzdE5hbWVJbnB1dCkgewogICAgY29uc3QgdXBkYXRlRnVsbE5hbWUgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGZpcnN0TmFtZSA9IGZpcnN0TmFtZUlucHV0LmdldFZhbHVlKCk7CiAgICAgIGNvbnN0IGxhc3ROYW1lID0gbGFzdE5hbWVJbnB1dC5nZXRWYWx1ZSgpOwogICAgICBjb25zb2xlLmxvZyhgRnVsbCBuYW1lOiAke2ZpcnN0TmFtZX0gJHtsYXN0TmFtZX1gKTsKICAgIH07CiAgICBmaXJzdE5hbWVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTdWJqZWN0IiwgdXBkYXRlRnVsbE5hbWUpOwogICAgbGFzdE5hbWVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTdWJqZWN0IiwgdXBkYXRlRnVsbE5hbWUpOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJNdWx0aXBsZSBpbnB1dHMgYXJyYW5nZWQgaG9yaXpvbnRhbGx5IGZvciBjb21wYWN0IGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiRmlyc3QgTmFtZSJ9IAogICAgICAgICAgICAudmFsdWU9JHsiSm9obiJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJmaXJzdE5hbWUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiTGFzdCBOYW1lIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyJEb2UifSAKICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5rZXk9JHsibGFzdE5hbWUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiQWdlIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyIyOCJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJhZ2UifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgaW5wdXRzID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LXRleHQiKTsKICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHsKICAgIGNvbnN0IHBvc2l0aW9uMyA9IGlucHV0LmxhYmVsUG9zaXRpb247CiAgICBjb25zb2xlLmxvZyhgSW5wdXQgIiR7aW5wdXQubGFiZWx9IiBoYXMgbGFiZWwgcG9zaXRpb246ICR7cG9zaXRpb24zfWApOwogIH0pOwogIGNvbnN0IGxlZnRMYWJlbElucHV0cyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgnZGVlcy1pbnB1dC10ZXh0W2xhYmVsUG9zaXRpb249ImxlZnQiXScpOwogIGlmIChsZWZ0TGFiZWxJbnB1dHMubGVuZ3RoID4gMCkgewogICAgY29uc29sZS5sb2coYCR7bGVmdExhYmVsSW5wdXRzLmxlbmd0aH0gaW5wdXRzIGhhdmUgbGVmdC1hbGlnbmVkIGxhYmVscyBmb3IgaW5saW5lIGxheW91dGApOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJMYWJlbCBQb3NpdGlvbnMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IGxhYmVsIHBvc2l0aW9uaW5nIG9wdGlvbnMgZm9yIHZhcmlvdXMgbGF5b3V0cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAubGFiZWw9JHsiTGFiZWwgb24gVG9wIChEZWZhdWx0KSJ9IAogICAgICAgICAgLnZhbHVlPSR7IlN0YW5kYXJkIGxheW91dCJ9IAogICAgICAgICAgLmxhYmVsUG9zaXRpb249JHsidG9wIn0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJMYWJlbCBvbiBMZWZ0In0gCiAgICAgICAgICAudmFsdWU9JHsiSW5saW5lIGxhYmVsIn0gCiAgICAgICAgICAubGFiZWxQb3NpdGlvbj0keyJsZWZ0In0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLmxhYmVsPSR7IkNpdHkifSAKICAgICAgICAgICAgLnZhbHVlPSR7Ik5ldyBZb3JrIn0gCiAgICAgICAgICAgIC5sYWJlbFBvc2l0aW9uPSR7ImxlZnQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiWklQIENvZGUifSAKICAgICAgICAgICAgLnZhbHVlPSR7IjEwMDAxIn0gCiAgICAgICAgICAgIC5sYWJlbFBvc2l0aW9uPSR7ImxlZnQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgcmVxdWlyZWRJbnB1dCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0W3JlcXVpcmVkXSIpOwogIGNvbnN0IGRpc2FibGVkSW5wdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dFtkaXNhYmxlZF0iKTsKICBjb25zdCBlcnJvcklucHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LXRleHRbdmFsaWRhdGlvblN0YXRlPSJpbnZhbGlkIl0nKTsKICBpZiAocmVxdWlyZWRJbnB1dCkgewogICAgcmVxdWlyZWRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gewogICAgICBpZiAoIXJlcXVpcmVkSW5wdXQuZ2V0VmFsdWUoKSkgewogICAgICAgIGNvbnNvbGUubG9nKCJSZXF1aXJlZCBmaWVsZCBpcyBlbXB0eSEiKTsKICAgICAgfQogICAgfSk7CiAgfQogIGlmIChkaXNhYmxlZElucHV0KSB7CiAgICBjb25zb2xlLmxvZygiRGlzYWJsZWQgaW5wdXQgY2Fubm90IGJlIGVkaXRlZCIpOwogIH0KICBpZiAoZXJyb3JJbnB1dCkgewogICAgY29uc29sZS5sb2coIkVycm9yIGlucHV0IHNob3dzIHZhbGlkYXRpb24gbWVzc2FnZToiLCBlcnJvcklucHV0LnZhbGlkYXRpb25UZXh0KTsKICAgIGVycm9ySW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsICgpID0+IHsKICAgICAgY29uc3QgdmFsdWUyID0gZXJyb3JJbnB1dC5nZXRWYWx1ZSgpOwogICAgICBpZiAodmFsdWUyLmluY2x1ZGVzKCJAIikgJiYgdmFsdWUyLmluY2x1ZGVzKCIuIikpIHsKICAgICAgICBlcnJvcklucHV0LnZhbGlkYXRpb25TdGF0ZSA9ICJ2YWxpZCI7CiAgICAgICAgZXJyb3JJbnB1dC52YWxpZGF0aW9uVGV4dCA9ICIiOwogICAgICAgIGNvbnNvbGUubG9nKCJFbWFpbCB2YWxpZGF0aW9uIHBhc3NlZCEiKTsKICAgICAgfQogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlZhbGlkYXRpb24gJiBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHZhbGlkYXRpb24gc3RhdGVzIGFuZCBpbnB1dCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAubGFiZWw9JHsiUmVxdWlyZWQgRmllbGQifSAKICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAua2V5PSR7InJlcXVpcmVkRmllbGQifQogICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIEZpZWxkIn0gCiAgICAgICAgICAudmFsdWU9JHsiQ2Fubm90IGVkaXQgdGhpcyJ9IAogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJGaWVsZCB3aXRoIEVycm9yIn0gCiAgICAgICAgICAudmFsdWU9JHsiaW52YWxpZEAifSAKICAgICAgICAgIC52YWxpZGF0aW9uVGV4dD0keyJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzIn0KICAgICAgICAgIC52YWxpZGF0aW9uU3RhdGU9JHsiaW52YWxpZCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgcGFzc3dvcmRJbnB1dHMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtdGV4dFtpc1Bhc3N3b3JkQm9vbF0iKTsKICBwYXNzd29yZElucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4gewogICAgY29uc3QgY2hlY2tUb2dnbGUgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGlucHV0RWwgPSBpbnB1dC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpOwogICAgICBpZiAoaW5wdXRFbCkgewogICAgICAgIGNvbnNvbGUubG9nKGBQYXNzd29yZCBmaWVsZCAiJHtpbnB1dC5sYWJlbH0iIHR5cGU6YCwgaW5wdXRFbC50eXBlKTsKICAgICAgfQogICAgfTsKICAgIGlmIChpbnB1dC5zaGFkb3dSb290KSB7CiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2hlY2tUb2dnbGUpOwogICAgICBjb25zdCBpbnB1dEVsID0gaW5wdXQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpOwogICAgICBpZiAoaW5wdXRFbCkgewogICAgICAgIG9ic2VydmVyLm9ic2VydmUoaW5wdXRFbCwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsidHlwZSJdIH0pOwogICAgICB9CiAgICB9CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQWR2YW5jZWQgRmVhdHVyZXMifSAuc3VidGl0bGU9JHsiUGFzc3dvcmQgdmlzaWJpbGl0eSB0b2dnbGUgYW5kIG90aGVyIGFkdmFuY2VkIGZlYXR1cmVzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJQYXNzd29yZCB3aXRoIFRvZ2dsZSJ9IAogICAgICAgICAgLmlzUGFzc3dvcmRCb29sPSR7dHJ1ZX0KICAgICAgICAgIC52YWx1ZT0keyJteVNlY3VyZVBhc3N3b3JkMTIzIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJDbGljayB0aGUgZXllIGljb24gdG8gc2hvdy9oaWRlIHBhc3N3b3JkIn0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJBUEkgS2V5In0gCiAgICAgICAgICAuaXNQYXNzd29yZEJvb2w9JHt0cnVlfQogICAgICAgICAgLnZhbHVlPSR7InNrLTEyMzQ1Njc4OTBhYmNkZWYifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IktlZXAgdGhpcyBrZXkgc2VjdXJlIGFuZCBuZXZlciBzaGFyZSBpdCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZHluYW1pY0lucHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LXRleHQiKTsKICBjb25zdCBvdXRwdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiN0ZXh0LWlucHV0LW91dHB1dCIpOwogIGlmIChkeW5hbWljSW5wdXQgJiYgb3V0cHV0KSB7CiAgICBkeW5hbWljSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsIChldmVudCkgPT4gewogICAgICBjb25zdCB2YWx1ZTIgPSBldmVudC5kZXRhaWwuZ2V0VmFsdWUoKTsKICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gYEN1cnJlbnQgdmFsdWU6ICIke3ZhbHVlMn0iYDsKICAgIH0pOwogICAgZHluYW1pY0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICBjb25zb2xlLmxvZygiSW5wdXQgZm9jdXNlZCIpOwogICAgfSk7CiAgICBkeW5hbWljSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coIklucHV0IGJsdXJyZWQiKTsKICAgIH0pOwogICAgbGV0IGtleXByZXNzQ291bnQgPSAwOwogICAgZHluYW1pY0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoKSA9PiB7CiAgICAgIGtleXByZXNzQ291bnQrKzsKICAgICAgY29uc29sZS5sb2coYEtleXByZXNzIGNvdW50OiAke2tleXByZXNzQ291bnR9YCk7CiAgICB9KTsKICB9Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiSW50ZXJhY3RpdmUgRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJUcnkgdHlwaW5nIGluIHRoZSBpbnB1dHMgdG8gc2VlIHJlYWwtdGltZSB2YWx1ZSBjaGFuZ2VzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJEeW5hbWljIElucHV0In0gCiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiVHlwZSBzb21ldGhpbmcgaGVyZS4uLiJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImludGVyYWN0aXZlLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBpZD0idGV4dC1pbnB1dC1vdXRwdXQiIGNsYXNzPSJvdXRwdXQtdGV4dCI+Q3VycmVudCB2YWx1ZTogIiI8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIDwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtdGV4dC9kZWVzLWlucHV0LXRleHQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjAgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczIxID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRUZXh0ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC10ZXh0IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNQYXNzd29yZEJvb2xfZGVjb3JhdG9yczsKICBsZXQgX2lzUGFzc3dvcmRCb29sX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNQYXNzd29yZEJvb2xfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dQYXNzd29yZEJvb2xfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dQYXNzd29yZEJvb2xfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93UGFzc3dvcmRCb29sX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9yczsKICBsZXQgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25GdW5jdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfdmFsaWRhdGlvbkZ1bmN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvbkZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dFRleHQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfaXNQYXNzd29yZEJvb2xfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3Nob3dQYXNzd29yZEJvb2xfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3ZhbGlkYXRpb25TdGF0ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgcmVmbGVjdDogdHJ1ZQogICAgICB9KV07CiAgICAgIF92YWxpZGF0aW9uRnVuY3Rpb25fZGVjb3JhdG9ycyA9IFtuNSh7fSldOwogICAgICBfX2VzRGVjb3JhdGUyMCh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIwKHRoaXMsIG51bGwsIF9pc1Bhc3N3b3JkQm9vbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc1Bhc3N3b3JkQm9vbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNQYXNzd29yZEJvb2wiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNQYXNzd29yZEJvb2wsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzUGFzc3dvcmRCb29sID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzUGFzc3dvcmRCb29sX2luaXRpYWxpemVycywgX2lzUGFzc3dvcmRCb29sX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjAodGhpcywgbnVsbCwgX3Nob3dQYXNzd29yZEJvb2xfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1Bhc3N3b3JkQm9vbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1Bhc3N3b3JkQm9vbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93UGFzc3dvcmRCb29sLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93UGFzc3dvcmRCb29sID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dQYXNzd29yZEJvb2xfaW5pdGlhbGl6ZXJzLCBfc2hvd1Bhc3N3b3JkQm9vbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIwKHRoaXMsIG51bGwsIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsaWRhdGlvblN0YXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uU3RhdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWxpZGF0aW9uU3RhdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIwKHRoaXMsIG51bGwsIF92YWxpZGF0aW9uVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWxpZGF0aW9uVGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsaWRhdGlvblRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblRleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbGlkYXRpb25UZXh0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjAodGhpcywgbnVsbCwgX3ZhbGlkYXRpb25GdW5jdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWxpZGF0aW9uRnVuY3Rpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbGlkYXRpb25GdW5jdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWxpZGF0aW9uRnVuY3Rpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbGlkYXRpb25GdW5jdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWxpZGF0aW9uRnVuY3Rpb25faW5pdGlhbGl6ZXJzLCBfdmFsaWRhdGlvbkZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRUZXh0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc1Bhc3N3b3JkQm9vbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjEodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfaXNQYXNzd29yZEJvb2xfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzUGFzc3dvcmRCb29sKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNQYXNzd29yZEJvb2xfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1Bhc3N3b3JkQm9vbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNQYXNzd29yZEJvb2xfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93UGFzc3dvcmRCb29sX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfaXNQYXNzd29yZEJvb2xfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF9zaG93UGFzc3dvcmRCb29sX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93UGFzc3dvcmRCb29sKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd1Bhc3N3b3JkQm9vbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dQYXNzd29yZEJvb2wodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dQYXNzd29yZEJvb2xfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF9zaG93UGFzc3dvcmRCb29sX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgdmFsaWRhdGlvblN0YXRlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblN0YXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsaWRhdGlvblN0YXRlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YWxpZGF0aW9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjEodGhpcywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjEodGhpcywgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCB2YWxpZGF0aW9uVGV4dCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3ZhbGlkYXRpb25UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsaWRhdGlvblRleHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbGlkYXRpb25UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmFsaWRhdGlvbkZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF92YWxpZGF0aW9uRnVuY3Rpb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCB2YWxpZGF0aW9uRnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWxpZGF0aW9uRnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWxpZGF0aW9uRnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbGlkYXRpb25GdW5jdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiBhdXRvOwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgIH0KCiAgICAgIGlucHV0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBjdXJzb3I6IHRleHQ7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICB9CgogICAgICBpbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgaW5wdXQ6aG92ZXI6bm90KDpkaXNhYmxlZCk6bm90KDpmb2N1cykgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIGlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUgLyAwLjA1KSIsICJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAvKiBQYXNzd29yZCB0b2dnbGUgYnV0dG9uICovCiAgICAgIC5zaG93UGFzc3dvcmQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMXB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDM4cHg7CiAgICAgICAgaGVpZ2h0OiAzOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMCA1cHggNXB4IDA7CiAgICAgIH0KCiAgICAgIC5zaG93UGFzc3dvcmQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIFZhbGlkYXRpb24gc3R5bGVzICovCiAgICAgIC52YWxpZGF0aW9uQ29udGFpbmVyIHsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAudmFsaWRhdGlvbkNvbnRhaW5lci5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlIC8gMC4xKSIsICJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUpIil9OwogICAgICB9CgogICAgICAudmFsaWRhdGlvbkNvbnRhaW5lci53YXJuIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUgLyAwLjEpIiwgImhzbCgyNSA5NSUgNjMlIC8gMC4xKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyNSA5NSUgNTMlKSIsICJoc2woMjUgOTUlIDYzJSkiKX07CiAgICAgIH0KCiAgICAgIC52YWxpZGF0aW9uQ29udGFpbmVyLnZhbGlkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4xKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUgLyAwLjEpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICB9CgogICAgICAvKiBFcnJvciBzdGF0ZSBmb3IgaW5wdXQgKi8KICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9ImludmFsaWQiXSkgaW5wdXQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsICJoc2woMCA3Mi4yJSA1MC42JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uLXN0YXRlPSJpbnZhbGlkIl0pIGlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUgLyAwLjA1KSIsICJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMDUpIil9OwogICAgICB9CgogICAgICAvKiBXYXJuaW5nIHN0YXRlIGZvciBpbnB1dCAqLwogICAgICA6aG9zdChbdmFsaWRhdGlvbi1zdGF0ZT0id2FybiJdKSBpbnB1dCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUpIiwgImhzbCgyNSA5NSUgNjMlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9Indhcm4iXSkgaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyNSA5NSUgNTMlKSIsICJoc2woMjUgOTUlIDYzJSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjUgOTUlIDUzJSAvIDAuMDUpIiwgImhzbCgyNSA5NSUgNjMlIC8gMC4wNSkiKX07CiAgICAgIH0KCiAgICAgIC8qIFZhbGlkIHN0YXRlIGZvciBpbnB1dCAqLwogICAgICA6aG9zdChbdmFsaWRhdGlvbi1zdGF0ZT0idmFsaWQiXSkgaW5wdXQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9InZhbGlkIl0pIGlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwgImhzbCgxNDIuMSA3MC42JSA0NS4zJSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUgLyAwLjA1KSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUgLyAwLjA1KSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgaW5wdXQgewogICAgICAgICAgZm9udC1mYW1pbHk6ICR7dGhpcy5pc1Bhc3N3b3JkQm9vbCA/IGNzc01vbm9Gb250RmFtaWx5IDogImluaGVyaXQifTsKICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAke3RoaXMuaXNQYXNzd29yZEJvb2wgPyAiMC41cHgiIDogIm5vcm1hbCJ9OwogICAgICAgICAgcGFkZGluZy1yaWdodDogJHt0aGlzLmlzUGFzc3dvcmRCb29sID8gIjQ4cHgiIDogIjEycHgifTsKICAgICAgICB9CiAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25UZXh0ID8gaWAKICAgICAgICAgICAgICAudmFsaWRhdGlvbkNvbnRhaW5lciB7CiAgICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgYCA6IGlgCiAgICAgICAgICAgICAgLnZhbGlkYXRpb25Db250YWluZXIgewogICAgICAgICAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkZWVzLWxhYmVsIC5sYWJlbD0ke3RoaXMubGFiZWx9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259IC5yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWR9PjwvZGVlcy1sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSIke3RoaXMuaXNQYXNzd29yZEJvb2wgJiYgIXRoaXMuc2hvd1Bhc3N3b3JkQm9vbCA/ICJwYXNzd29yZCIgOiAidGV4dCJ9IgogICAgICAgICAgICAudmFsdWU9JHt0aGlzLnZhbHVlfQogICAgICAgICAgICBAaW5wdXQ9IiR7dGhpcy51cGRhdGVWYWx1ZX0iCiAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9CiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSIke3RoaXMubGFiZWwgPyAiIiA6ICJFbnRlciB0ZXh0Li4uIn0iCiAgICAgICAgICAvPgogICAgICAgICAgJHt0aGlzLmlzUGFzc3dvcmRCb29sID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG93UGFzc3dvcmQiIEBjbGljaz0ke3RoaXMudG9nZ2xlUGFzc3dvcmRWaWV3fT4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuc2hvd1Bhc3N3b3JkQm9vbCA/ICJsdWNpZGU6RXllIiA6ICJsdWNpZGU6RXllT2ZmIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogYjJgYH0KICAgICAgICAgICR7dGhpcy52YWxpZGF0aW9uVGV4dCA/IGIyYAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsaWRhdGlvbkNvbnRhaW5lciAke3RoaXMudmFsaWRhdGlvblN0YXRlIHx8ICJlcnJvciJ9Ij4KICAgICAgICAgICAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25UZXh0fQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCA6IGIyYDxkaXYgY2xhc3M9InZhbGlkYXRpb25Db250YWluZXIiPjwvZGl2PmB9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZVZhbHVlKGV2ZW50QXJnKSB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50QXJnLnRhcmdldDsKICAgICAgdGhpcy52YWx1ZSA9IHRhcmdldC52YWx1ZTsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgIH0KICAgIGFzeW5jIHRvZ2dsZVBhc3N3b3JkVmlldygpIHsKICAgICAgdGhpcy5zaG93UGFzc3dvcmRCb29sID0gIXRoaXMuc2hvd1Bhc3N3b3JkQm9vbDsKICAgIH0KICAgIGFzeW5jIGZvY3VzKCkgewogICAgICBjb25zdCB0ZXh0SW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKTsKICAgICAgdGV4dElucHV0LmZvY3VzKCk7CiAgICB9CiAgICBhc3luYyBibHVyKCkgewogICAgICBjb25zdCB0ZXh0SW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKTsKICAgICAgdGV4dElucHV0LmJsdXIoKTsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF92YWxpZGF0aW9uRnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyMShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0VGV4dDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkL2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxMyA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5wcm9kdWN0LWdyaWQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDI4MHB4LCAxZnIpKTsKICAgICAgICAgIGdhcDogMjBweDsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LXN1bW1hcnkgewogICAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAyMS44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgfQoKICAgICAgICAuY2FydC1zdW1tYXJ5LXRpdGxlIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LWl0ZW0gewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCAiaHNsKDIxNy45IDEwLjYlIDc0LjklKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LXRvdGFsIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgcGFkZGluZy10b3A6IDE2cHg7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuc2VsZWN0ZWQtcHJvZHVjdHMgewogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA3NC45JSkiKX07CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgUHJvZHVjdCBDYXJkcyJ9IC5zdWJ0aXRsZT0keyJTaW1wbGUgcHJvZHVjdCBkaXNwbGF5IHdpdGggdmFyaW91cyBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIldpcmVsZXNzIEJsdWV0b290aCBIZWFkcGhvbmVzIiwKICBjYXRlZ29yeTogIkF1ZGlvIiwKICBkZXNjcmlwdGlvbjogIlByZW1pdW0gc291bmQgcXVhbGl0eSB3aXRoIGFjdGl2ZSBub2lzZSBjYW5jZWxsYXRpb24iLAogIHByaWNlOiAxNDkuOTksCiAgb3JpZ2luYWxQcmljZTogMTk5Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOmhlYWRwaG9uZXMiCn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezF9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3sKICBuYW1lOiAiU21hcnQgV2F0Y2ggU2VyaWVzIDciLAogIGNhdGVnb3J5OiAiV2VhcmFibGVzIiwKICBkZXNjcmlwdGlvbjogIlRyYWNrIHlvdXIgZml0bmVzcyBhbmQgc3RheSBjb25uZWN0ZWQgb24gdGhlIGdvIiwKICBwcmljZTogMzk5LAogIGljb25OYW1lOiAibHVjaWRlOndhdGNoIgp9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIlVTQi1DIEh1YiIsCiAgY2F0ZWdvcnk6ICJBY2Nlc3NvcmllcyIsCiAgcHJpY2U6IDQ5Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOnVzYiIsCiAgaW5TdG9jazogZmFsc2UKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MH0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJJbnRlcmFjdGl2ZSBTaG9wcGluZyBDYXJ0In0gLnN1YnRpdGxlPSR7IlByb2R1Y3QgY2FyZHMgd2l0aCBkeW5hbWljIGNhcnQgY2FsY3VsYXRpb24ifSAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHByb2R1Y3RzID0gWwogICAgeyBpZDogImxhcHRvcCIsIGVsZW1lbnQ6IG51bGwsIGRhdGE6IHsgbmFtZTogJ01hY0Jvb2sgUHJvIDE0IicsIGNhdGVnb3J5OiAiQ29tcHV0ZXJzIiwgZGVzY3JpcHRpb246ICJNMyBQcm8gY2hpcCB3aXRoIDE4R0IgUkFNIiwgcHJpY2U6IDE5OTksIG9yaWdpbmFsUHJpY2U6IDIxOTksIGljb25OYW1lOiAibHVjaWRlOmxhcHRvcCIgfSB9LAogICAgeyBpZDogImlwYWQiLCBlbGVtZW50OiBudWxsLCBkYXRhOiB7IG5hbWU6ICJpUGFkIEFpciIsIGNhdGVnb3J5OiAiVGFibGV0cyIsIGRlc2NyaXB0aW9uOiAnMTAuOSIgTGlxdWlkIFJldGluYSBkaXNwbGF5JywgcHJpY2U6IDU5OSwgaWNvbk5hbWU6ICJsdWNpZGU6dGFibGV0IiB9IH0sCiAgICB7IGlkOiAia2V5Ym9hcmQiLCBlbGVtZW50OiBudWxsLCBkYXRhOiB7IG5hbWU6ICJNYWdpYyBLZXlib2FyZCIsIGNhdGVnb3J5OiAiQWNjZXNzb3JpZXMiLCBkZXNjcmlwdGlvbjogIldpcmVsZXNzIGtleWJvYXJkIHdpdGggVG91Y2ggSUQiLCBwcmljZTogMTQ5LCBpY29uTmFtZTogImx1Y2lkZTprZXlib2FyZCIgfSB9CiAgXTsKICBjb25zdCB1cGRhdGVDYXJ0U3VtbWFyeSA9ICgpID0+IHsKICAgIGxldCB0b3RhbCA9IDA7CiAgICBjb25zdCBpdGVtcyA9IFtdOwogICAgcHJvZHVjdHMuZm9yRWFjaCgocHJvZHVjdCkgPT4gewogICAgICBjb25zdCBlbGVtZW50NCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcihgIyR7cHJvZHVjdC5pZH1gKTsKICAgICAgaWYgKGVsZW1lbnQ0ICYmIGVsZW1lbnQ0LnF1YW50aXR5ID4gMCkgewogICAgICAgIGNvbnN0IHN1YnRvdGFsID0gcHJvZHVjdC5kYXRhLnByaWNlICogZWxlbWVudDQucXVhbnRpdHk7CiAgICAgICAgdG90YWwgKz0gc3VidG90YWw7CiAgICAgICAgaXRlbXMucHVzaChgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LWl0ZW0iPgogICAgICAgICAgICAgICAgICA8c3Bhbj4ke3Byb2R1Y3QuZGF0YS5uYW1lfSAoJHtlbGVtZW50NC5xdWFudGl0eX0pPC9zcGFuPgogICAgICAgICAgICAgICAgICA8c3Bhbj4kJHtzdWJ0b3RhbC50b0ZpeGVkKDIpfTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGApOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IHN1bW1hcnkgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNpbnRlcmFjdGl2ZS1jYXJ0LXN1bW1hcnkiKTsKICAgIGlmIChzdW1tYXJ5KSB7CiAgICAgIHN1bW1hcnkuaW5uZXJIVE1MID0gYAogICAgICAgICAgICAgICR7aXRlbXMuam9pbigiIil9CiAgICAgICAgICAgICAgJHtpdGVtcy5sZW5ndGggPT09IDAgPyAnPGRpdiBjbGFzcz0iY2FydC1pdGVtIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzk5OTsiPllvdXIgY2FydCBpcyBlbXB0eTwvZGl2PicgOiAiIn0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXRvdGFsIj4KICAgICAgICAgICAgICAgIDxzcGFuPlRvdGFsPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7dG90YWwudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA7CiAgICB9CiAgfTsKICBzZXRUaW1lb3V0KHVwZGF0ZUNhcnRTdW1tYXJ5LCAxMDApOwogIGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZCIpLmZvckVhY2goKGNhcmQpID0+IHsKICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcigicXVhbnRpdHlDaGFuZ2UiLCB1cGRhdGVDYXJ0U3VtbWFyeSk7CiAgfSk7Cn19PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICBpZD0ibGFwdG9wIgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogJ01hY0Jvb2sgUHJvIDE0IicsCiAgY2F0ZWdvcnk6ICJDb21wdXRlcnMiLAogIGRlc2NyaXB0aW9uOiAiTTMgUHJvIGNoaXAgd2l0aCAxOEdCIFJBTSIsCiAgcHJpY2U6IDE5OTksCiAgb3JpZ2luYWxQcmljZTogMjE5OSwKICBpY29uTmFtZTogImx1Y2lkZTpsYXB0b3AiCn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezF9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIGlkPSJpcGFkIgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogImlQYWQgQWlyIiwKICBjYXRlZ29yeTogIlRhYmxldHMiLAogIGRlc2NyaXB0aW9uOiAnMTAuOSIgTGlxdWlkIFJldGluYSBkaXNwbGF5JywKICBwcmljZTogNTk5LAogIGljb25OYW1lOiAibHVjaWRlOnRhYmxldCIKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MH0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgaWQ9ImtleWJvYXJkIgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIk1hZ2ljIEtleWJvYXJkIiwKICBjYXRlZ29yeTogIkFjY2Vzc29yaWVzIiwKICBkZXNjcmlwdGlvbjogIldpcmVsZXNzIGtleWJvYXJkIHdpdGggVG91Y2ggSUQiLAogIHByaWNlOiAxNDksCiAgaWNvbk5hbWU6ICJsdWNpZGU6a2V5Ym9hcmQiCn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezJ9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXN1bW1hcnkiPgogICAgICAgICAgPGgzIGNsYXNzPSJjYXJ0LXN1bW1hcnktdGl0bGUiPlNob3BwaW5nIENhcnQ8L2gzPgogICAgICAgICAgPGRpdiBpZD0iaW50ZXJhY3RpdmUtY2FydC1zdW1tYXJ5Ij4KICAgICAgICAgICAgPCEtLSBEeW5hbWljYWxseSB1cGRhdGVkIC0tPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJTZWxlY3RhYmxlIFByb2R1Y3QgQ2FyZHMifSAuc3VidGl0bGU9JHsiQ2xpY2sgY2FyZHMgb3IgY2hlY2tib3hlcyB0byBzZWxlY3QgcHJvZHVjdHMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWdyaWQiPgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogIG5hbWU6ICJTb255IEFscGhhIDcgSVYiLAogIGNhdGVnb3J5OiAiQ2FtZXJhcyIsCiAgZGVzY3JpcHRpb246ICJGdWxsLWZyYW1lIG1pcnJvcmxlc3MgY2FtZXJhIiwKICBwcmljZTogMjQ5OCwKICBpY29uTmFtZTogImx1Y2lkZTpjYW1lcmEiCn19CiAgICAgICAgICAgIC5zZWxlY3RhYmxlPSR7dHJ1ZX0KICAgICAgICAgICAgLnNob3dRdWFudGl0eVNlbGVjdG9yPSR7ZmFsc2V9CiAgICAgICAgICAgIEBzZWxlY3Rpb25DaGFuZ2U9JHsoZTExKSA9PiB7CiAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3NlbGVjdGlvbi1vdXRwdXQiKTsKICBpZiAob3V0cHV0KSB7CiAgICBjb25zdCBzZWxlY3RlZENhcmRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZFtzZWxlY3RhYmxlXSIpOwogICAgY29uc3Qgc2VsZWN0ZWRQcm9kdWN0cyA9IFtdOwogICAgc2VsZWN0ZWRDYXJkcy5mb3JFYWNoKChjYXJkKSA9PiB7CiAgICAgIGlmIChjYXJkLnNlbGVjdGVkKSB7CiAgICAgICAgc2VsZWN0ZWRQcm9kdWN0cy5wdXNoKGNhcmQucHJvZHVjdERhdGEubmFtZSk7CiAgICAgIH0KICAgIH0pOwogICAgb3V0cHV0LnRleHRDb250ZW50ID0gc2VsZWN0ZWRQcm9kdWN0cy5sZW5ndGggPiAwID8gYFNlbGVjdGVkOiAke3NlbGVjdGVkUHJvZHVjdHMuam9pbigiLCAiKX1gIDogIk5vIHByb2R1Y3RzIHNlbGVjdGVkIjsKICB9Cn19CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3sKICBuYW1lOiAiREpJIE1pbmkgMyBQcm8iLAogIGNhdGVnb3J5OiAiRHJvbmVzIiwKICBkZXNjcmlwdGlvbjogIkxpZ2h0d2VpZ2h0IGRyb25lIHdpdGggNEsgY2FtZXJhIiwKICBwcmljZTogNzU5LAogIGljb25OYW1lOiAibHVjaWRlOnBsYW5lIgp9fQogICAgICAgICAgICAuc2VsZWN0YWJsZT0ke3RydWV9CiAgICAgICAgICAgIC5zaG93UXVhbnRpdHlTZWxlY3Rvcj0ke2ZhbHNlfQogICAgICAgICAgICBAc2VsZWN0aW9uQ2hhbmdlPSR7KGUxMSkgPT4gewogIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNzZWxlY3Rpb24tb3V0cHV0Iik7CiAgaWYgKG91dHB1dCkgewogICAgY29uc3Qgc2VsZWN0ZWRDYXJkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmRbc2VsZWN0YWJsZV0iKTsKICAgIGNvbnN0IHNlbGVjdGVkUHJvZHVjdHMgPSBbXTsKICAgIHNlbGVjdGVkQ2FyZHMuZm9yRWFjaCgoY2FyZCkgPT4gewogICAgICBpZiAoY2FyZC5zZWxlY3RlZCkgewogICAgICAgIHNlbGVjdGVkUHJvZHVjdHMucHVzaChjYXJkLnByb2R1Y3REYXRhLm5hbWUpOwogICAgICB9CiAgICB9KTsKICAgIG91dHB1dC50ZXh0Q29udGVudCA9IHNlbGVjdGVkUHJvZHVjdHMubGVuZ3RoID4gMCA/IGBTZWxlY3RlZDogJHtzZWxlY3RlZFByb2R1Y3RzLmpvaW4oIiwgIil9YCA6ICJObyBwcm9kdWN0cyBzZWxlY3RlZCI7CiAgfQp9fQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIkdvUHJvIEhFUk8xMiIsCiAgY2F0ZWdvcnk6ICJBY3Rpb24gQ2FtZXJhcyIsCiAgZGVzY3JpcHRpb246ICI1LjNLIHZpZGVvIHdpdGggSHlwZXJTbW9vdGggNi4wIiwKICBwcmljZTogMzk5LAogIG9yaWdpbmFsUHJpY2U6IDQ0OSwKICBpY29uTmFtZTogImx1Y2lkZTp2aWRlbyIKfX0KICAgICAgICAgICAgLnNlbGVjdGFibGU9JHt0cnVlfQogICAgICAgICAgICAuc2hvd1F1YW50aXR5U2VsZWN0b3I9JHtmYWxzZX0KICAgICAgICAgICAgQHNlbGVjdGlvbkNoYW5nZT0keyhlMTEpID0+IHsKICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjc2VsZWN0aW9uLW91dHB1dCIpOwogIGlmIChvdXRwdXQpIHsKICAgIGNvbnN0IHNlbGVjdGVkQ2FyZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkW3NlbGVjdGFibGVdIik7CiAgICBjb25zdCBzZWxlY3RlZFByb2R1Y3RzID0gW107CiAgICBzZWxlY3RlZENhcmRzLmZvckVhY2goKGNhcmQpID0+IHsKICAgICAgaWYgKGNhcmQuc2VsZWN0ZWQpIHsKICAgICAgICBzZWxlY3RlZFByb2R1Y3RzLnB1c2goY2FyZC5wcm9kdWN0RGF0YS5uYW1lKTsKICAgICAgfQogICAgfSk7CiAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBzZWxlY3RlZFByb2R1Y3RzLmxlbmd0aCA+IDAgPyBgU2VsZWN0ZWQ6ICR7c2VsZWN0ZWRQcm9kdWN0cy5qb2luKCIsICIpfWAgOiAiTm8gcHJvZHVjdHMgc2VsZWN0ZWQiOwogIH0KfX0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ic2VsZWN0ZWQtcHJvZHVjdHMiIGlkPSJzZWxlY3Rpb24tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgTm8gcHJvZHVjdHMgc2VsZWN0ZWQKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlByb2R1Y3QgVmFyaWF0aW9ucyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgc3RhdGVzIGFuZCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIkxpbWl0ZWQgRWRpdGlvbiBTbmVha2VycyIsCiAgY2F0ZWdvcnk6ICJGb290d2VhciIsCiAgZGVzY3JpcHRpb246ICJFeGNsdXNpdmUgY29sb3J3YXkgLSBPbmx5IDUwMCBwYWlycyIsCiAgcHJpY2U6IDI5OSwKICBpY29uTmFtZTogImx1Y2lkZTpmb290cHJpbnRzIiwKICBpblN0b2NrOiBmYWxzZSwKICBzdG9ja1RleHQ6ICJTb2xkIE91dCIKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MH0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogIG5hbWU6ICJNaW5pbWFsaXN0IFdhbGxldCIsCiAgcHJpY2U6IDM5Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOndhbGxldCIKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MX0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogIG5hbWU6ICJQcmVtaXVtIENvZmZlZSBCZWFucyIsCiAgY2F0ZWdvcnk6ICJGb29kICYgQmV2ZXJhZ2UiLAogIGRlc2NyaXB0aW9uOiAiU2luZ2xlIG9yaWdpbiwgbWVkaXVtIHJvYXN0IiwKICBwcmljZTogMTguNSwKICBpY29uTmFtZTogImx1Y2lkZTpjb2ZmZWUiLAogIGN1cnJlbmN5OiAiXHUyMEFDIgp9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsyfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkL2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjEgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczIyID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzU2hvcHBpbmdQcm9kdWN0Y2FyZCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9wcm9kdWN0RGF0YV9kZWNvcmF0b3JzOwogIGxldCBfcHJvZHVjdERhdGFfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wcm9kdWN0RGF0YV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcXVhbnRpdHlfZGVjb3JhdG9yczsKICBsZXQgX3F1YW50aXR5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcXVhbnRpdHlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93UXVhbnRpdHlTZWxlY3Rvcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RhYmxlX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RhYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0YWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1Nob3BwaW5nUHJvZHVjdGNhcmQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfcHJvZHVjdERhdGFfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9xdWFudGl0eV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX3NlbGVjdGFibGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2VsZWN0ZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGUyMSh0aGlzLCBudWxsLCBfcHJvZHVjdERhdGFfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicHJvZHVjdERhdGEiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInByb2R1Y3REYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnByb2R1Y3REYXRhLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wcm9kdWN0RGF0YSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wcm9kdWN0RGF0YV9pbml0aWFsaXplcnMsIF9wcm9kdWN0RGF0YV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIxKHRoaXMsIG51bGwsIF9xdWFudGl0eV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJxdWFudGl0eSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicXVhbnRpdHkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucXVhbnRpdHksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnF1YW50aXR5ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3F1YW50aXR5X2luaXRpYWxpemVycywgX3F1YW50aXR5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjEodGhpcywgbnVsbCwgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dRdWFudGl0eVNlbGVjdG9yIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93UXVhbnRpdHlTZWxlY3RvciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93UXVhbnRpdHlTZWxlY3Rvciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd1F1YW50aXR5U2VsZWN0b3IgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1F1YW50aXR5U2VsZWN0b3JfaW5pdGlhbGl6ZXJzLCBfc2hvd1F1YW50aXR5U2VsZWN0b3JfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyMSh0aGlzLCBudWxsLCBfc2VsZWN0YWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RhYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RhYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGFibGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGFibGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0YWJsZV9pbml0aWFsaXplcnMsIF9zZWxlY3RhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjEodGhpcywgbnVsbCwgX3NlbGVjdGVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyMShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNTaG9wcGluZ1Byb2R1Y3RjYXJkMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTM7CiAgICAjcHJvZHVjdERhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjIodGhpcywgX3Byb2R1Y3REYXRhX2luaXRpYWxpemVycywgewogICAgICBuYW1lOiAiUHJvZHVjdCBOYW1lIiwKICAgICAgcHJpY2U6IDAKICAgIH0pOwogICAgZ2V0IHByb2R1Y3REYXRhKCkgewogICAgICByZXR1cm4gdGhpcy4jcHJvZHVjdERhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwcm9kdWN0RGF0YSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcHJvZHVjdERhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNxdWFudGl0eV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjIodGhpcywgX3Byb2R1Y3REYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfcXVhbnRpdHlfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgcXVhbnRpdHkoKSB7CiAgICAgIHJldHVybiB0aGlzLiNxdWFudGl0eV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHF1YW50aXR5KHZhbHVlMikgewogICAgICB0aGlzLiNxdWFudGl0eV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dRdWFudGl0eVNlbGVjdG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfcXVhbnRpdHlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9zaG93UXVhbnRpdHlTZWxlY3Rvcl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzaG93UXVhbnRpdHlTZWxlY3RvcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dRdWFudGl0eVNlbGVjdG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1F1YW50aXR5U2VsZWN0b3IodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dRdWFudGl0eVNlbGVjdG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0YWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjIodGhpcywgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfc2VsZWN0YWJsZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgc2VsZWN0YWJsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGFibGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RhYmxlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RhYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9zZWxlY3RhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfc2VsZWN0ZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHNlbGVjdGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWNhcmQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXJkOmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDZweCAtMXB4IGhzbCgwIDAlIDAlIC8gMC4xKSwgMCAycHggNHB4IC0ycHggaHNsKDAgMCUgMCUgLyAwLjEpOwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXJkLnNlbGVjdGFibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtY2FyZC5zZWxlY3RlZCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAucHJvZHVjdC1pbWFnZSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxODBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtaW1hZ2UgaW1nIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWltYWdlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiA0OHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb24tY2hlY2tib3ggewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgcmlnaHQ6IDEycHg7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDMwJSA2LjglKSIpfTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbi1jaGVja2JveC5jaGVja2VkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbi1jaGVja2JveCBkZWVzLWljb24gewogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb24tY2hlY2tib3guY2hlY2tlZCBkZWVzLWljb24gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtY29udGVudCB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KICAgICAgCiAgICAgIC5wcm9kdWN0LWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXRlZ29yeSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICB9CiAgICAgIAogICAgICAucHJvZHVjdC1uYW1lIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWRlc2NyaXB0aW9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgZmxleDogMTsKICAgICAgfQogICAgICAKICAgICAgLnByb2R1Y3QtZm9vdGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTJweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LXByaWNlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC5wcmljZS1jdXJyZW50IHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAucHJpY2Utb3JpZ2luYWwgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7CiAgICAgIH0KCiAgICAgIC5zdG9jay1zdGF0dXMgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgICAgfQoKICAgICAgLnN0b2NrLXN0YXR1cy5pbi1zdG9jayB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIiwgImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiKX07CiAgICAgIH0KCiAgICAgIC5zdG9jay1zdGF0dXMub3V0LW9mLXN0b2NrIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5zdG9jay1zdGF0dXMgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IHsgbmFtZSwgY2F0ZWdvcnksIGRlc2NyaXB0aW9uLCBwcmljZSwgb3JpZ2luYWxQcmljZSwgY3VycmVuY3kgPSAiJCIsIGluU3RvY2sgPSB0cnVlLCBzdG9ja1RleHQgPSBpblN0b2NrID8gIkluIFN0b2NrIiA6ICJPdXQgb2YgU3RvY2siLCBpbWFnZVVybCwgaWNvbk5hbWUgPSAibHVjaWRlOnBhY2thZ2UiIH0gPSB0aGlzLnByb2R1Y3REYXRhOwogICAgICBjb25zdCBmb3JtYXRQcmljZSA9ICh2YWx1ZTIpID0+IHsKICAgICAgICByZXR1cm4gYCR7Y3VycmVuY3l9JHt2YWx1ZTIudG9GaXhlZCgyKX1gOwogICAgICB9OwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9InByb2R1Y3QtY2FyZCAke3RoaXMuc2VsZWN0YWJsZSA/ICJzZWxlY3RhYmxlIiA6ICIifSAke3RoaXMuc2VsZWN0ZWQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlQ2FyZENsaWNrfQogICAgICA+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1pbWFnZSI+CiAgICAgICAgICAke2ltYWdlVXJsID8gYjJgCiAgICAgICAgICAgIDxpbWcgc3JjPSIke2ltYWdlVXJsfSIgYWx0PSIke25hbWV9Ij4KICAgICAgICAgIGAgOiBiMmAKICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke2ljb25OYW1lfT48L2RlZXMtaWNvbj4KICAgICAgICAgIGB9CiAgICAgICAgICAke3RoaXMuc2VsZWN0YWJsZSA/IGIyYAogICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgIGNsYXNzPSJzZWxlY3Rpb24tY2hlY2tib3ggJHt0aGlzLnNlbGVjdGVkID8gImNoZWNrZWQiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keyhlMTEpID0+IHsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3Rpb25Ub2dnbGUoKTsKICAgICAgfX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmNoZWNrIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtY29udGVudCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWhlYWRlciI+CiAgICAgICAgICAgICR7Y2F0ZWdvcnkgPyBiMmA8ZGl2IGNsYXNzPSJwcm9kdWN0LWNhdGVnb3J5Ij4ke2NhdGVnb3J5fTwvZGl2PmAgOiAiIn0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1uYW1lIj4ke25hbWV9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICR7ZGVzY3JpcHRpb24gPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1kZXNjcmlwdGlvbiI+JHtkZXNjcmlwdGlvbn08L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgIDxkaXYgY2xhc3M9InN0b2NrLXN0YXR1cyAke2luU3RvY2sgPyAiaW4tc3RvY2siIDogIm91dC1vZi1zdG9jayJ9Ij4KICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke2luU3RvY2sgPyAibHVjaWRlOmNoZWNrLWNpcmNsZSIgOiAibHVjaWRlOngtY2lyY2xlIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICR7c3RvY2tUZXh0fQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWZvb3RlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtcHJpY2UiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcmljZS1jdXJyZW50Ij4ke2Zvcm1hdFByaWNlKHByaWNlKX08L3NwYW4+CiAgICAgICAgICAgICAgJHtvcmlnaW5hbFByaWNlICYmIG9yaWdpbmFsUHJpY2UgPiBwcmljZSA/IGIyYAogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByaWNlLW9yaWdpbmFsIj4ke2Zvcm1hdFByaWNlKG9yaWdpbmFsUHJpY2UpfTwvc3Bhbj4KICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAke3RoaXMuc2hvd1F1YW50aXR5U2VsZWN0b3IgPyBiMmAKICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yCiAgICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLnF1YW50aXR5fQogICAgICAgICAgICAgICAgQGNoYW5nZVN1YmplY3Q9JHsoZTExKSA9PiB7CiAgICAgICAgdGhpcy5xdWFudGl0eSA9IGUxMS5kZXRhaWwuZ2V0VmFsdWUoKTsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJxdWFudGl0eUNoYW5nZSIsIHsKICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICBxdWFudGl0eTogdGhpcy5xdWFudGl0eSwKICAgICAgICAgICAgcHJvZHVjdERhdGE6IHRoaXMucHJvZHVjdERhdGEKICAgICAgICAgIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgIH19CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgaGFuZGxlQ2FyZENsaWNrKCkgewogICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZCA9ICF0aGlzLnNlbGVjdGVkOwogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlbGVjdGlvbkNoYW5nZSIsIHsKICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCwKICAgICAgICAgICAgcHJvZHVjdERhdGE6IHRoaXMucHJvZHVjdERhdGEKICAgICAgICAgIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVNlbGVjdGlvblRvZ2dsZSgpIHsKICAgICAgdGhpcy5zZWxlY3RlZCA9ICF0aGlzLnNlbGVjdGVkOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWxlY3Rpb25DaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7CiAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCwKICAgICAgICAgIHByb2R1Y3REYXRhOiB0aGlzLnByb2R1Y3REYXRhCiAgICAgICAgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9zZWxlY3RlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczIyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU2hvcHBpbmdQcm9kdWN0Y2FyZDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvci9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxNCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5zaG9wcGluZy1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgyODBweCwgMWZyKSk7CiAgICAgICAgICBnYXA6IDIwcHg7CiAgICAgICAgfQoKICAgICAgICAuY2FydC1zdW1tYXJ5IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMjEuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIH0KCiAgICAgICAgLmNhcnQtc3VtbWFyeS10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuY2FydC1pdGVtIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA3NC45JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuY2FydC10b3RhbCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIHBhZGRpbmctdG9wOiAxNnB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhc2ljIFF1YW50aXR5IFNlbGVjdG9yIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBxdWFudGl0eSBpbnB1dCB3aXRoIGluY3JlbWVudC9kZWNyZW1lbnQgYnV0dG9ucyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IKICAgICAgICAgIC5sYWJlbD0keyJRdWFudGl0eSJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2VsZWN0IHRoZSBkZXNpcmVkIHF1YW50aXR5In0KICAgICAgICAgIC52YWx1ZT0kezF9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IKICAgICAgICAgIC5sYWJlbD0keyJJdGVtcyBpbiBDYXJ0In0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBZGp1c3QgdGhlIHF1YW50aXR5IG9mIGl0ZW1zIn0KICAgICAgICAgIC52YWx1ZT0kezN9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiU2hvcHBpbmcgQ2FydCJ9IC5zdWJ0aXRsZT0keyJNb2Rlcm4gZS1jb21tZXJjZSBwcm9kdWN0IGNhcmRzIHdpdGggaW50ZXJhY3RpdmUgcXVhbnRpdHkgc2VsZWN0b3JzIn0gLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCB1cGRhdGVDYXJ0U3VtbWFyeSA9ICgpID0+IHsKICAgIGNvbnN0IGNhcmQxID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjaGVhZHBob25lcy1xdHkiKTsKICAgIGNvbnN0IGNhcmQyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjbW91c2UtcXR5Iik7CiAgICBjb25zdCBjYXJkMyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2tleWJvYXJkLXF0eSIpOwogICAgY29uc3QgcXR5MSA9IGNhcmQxPy5xdWFudGl0eSB8fCAwOwogICAgY29uc3QgcXR5MiA9IGNhcmQyPy5xdWFudGl0eSB8fCAwOwogICAgY29uc3QgcXR5MyA9IGNhcmQzPy5xdWFudGl0eSB8fCAwOwogICAgY29uc3QgcHJpY2UxID0gMzQ5Ljk5ICogcXR5MTsKICAgIGNvbnN0IHByaWNlMiA9IDk5Ljk5ICogcXR5MjsKICAgIGNvbnN0IHByaWNlMyA9IDc5Ljk5ICogcXR5MzsKICAgIGNvbnN0IHRvdGFsID0gcHJpY2UxICsgcHJpY2UyICsgcHJpY2UzOwogICAgY29uc3Qgc3VtbWFyeSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2NhcnQtc3VtbWFyeS1jb250ZW50Iik7CiAgICBpZiAoc3VtbWFyeSkgewogICAgICBzdW1tYXJ5LmlubmVySFRNTCA9IGAKICAgICAgICAgICAgICAke3F0eTEgPiAwID8gYDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5Tb255IFdILTEwMDBYTTUgKCR7cXR5MX0pPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7cHJpY2UxLnRvRml4ZWQoMil9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PmAgOiAiIn0KICAgICAgICAgICAgICAke3F0eTIgPiAwID8gYDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5Mb2dpdGVjaCBNWCBNYXN0ZXIgM1MgKCR7cXR5Mn0pPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7cHJpY2UyLnRvRml4ZWQoMil9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PmAgOiAiIn0KICAgICAgICAgICAgICAke3F0eTMgPiAwID8gYDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5LZXljaHJvbiBLMiAoJHtxdHkzfSk8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3Bhbj4kJHtwcmljZTMudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+YCA6ICIifQogICAgICAgICAgICAgICR7dG90YWwgPT09IDAgPyAnPGRpdiBjbGFzcz0iY2FydC1pdGVtIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzk5OTsiPllvdXIgY2FydCBpcyBlbXB0eTwvZGl2PicgOiAiIn0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXRvdGFsIj4KICAgICAgICAgICAgICAgIDxzcGFuPlRvdGFsPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7dG90YWwudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA7CiAgICB9CiAgfTsKICBzZXRUaW1lb3V0KHVwZGF0ZUNhcnRTdW1tYXJ5LCAxMDApOwogIGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZCIpLmZvckVhY2goKGNhcmQpID0+IHsKICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcigicXVhbnRpdHlDaGFuZ2UiLCB1cGRhdGVDYXJ0U3VtbWFyeSk7CiAgfSk7Cn19PgogICAgICAgIDxkaXYgY2xhc3M9InNob3BwaW5nLWdyaWQiPgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgaWQ9ImhlYWRwaG9uZXMtcXR5IgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIlNvbnkgV0gtMTAwMFhNNSBXaXJlbGVzcyBIZWFkcGhvbmVzIiwKICBjYXRlZ29yeTogIkF1ZGlvIiwKICBkZXNjcmlwdGlvbjogIkluZHVzdHJ5LWxlYWRpbmcgbm9pc2UgY2FuY2VsaW5nIHdpdGggQXV0byBOQyBPcHRpbWl6ZXIiLAogIHByaWNlOiAzNDkuOTksCiAgb3JpZ2luYWxQcmljZTogMzk5Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOmhlYWRwaG9uZXMiCn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezF9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICBpZD0ibW91c2UtcXR5IgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIkxvZ2l0ZWNoIE1YIE1hc3RlciAzUyIsCiAgY2F0ZWdvcnk6ICJBY2Nlc3NvcmllcyIsCiAgZGVzY3JpcHRpb246ICJQZXJmb3JtYW5jZSB3aXJlbGVzcyBtb3VzZSB3aXRoIHVsdHJhLWZhc3Qgc2Nyb2xsaW5nIiwKICBwcmljZTogOTkuOTksCiAgaWNvbk5hbWU6ICJsdWNpZGU6bW91c2UtcG9pbnRlciIKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7Mn0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIGlkPSJrZXlib2FyZC1xdHkiCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3sKICBuYW1lOiAiS2V5Y2hyb24gSzIgV2lyZWxlc3MgTWVjaGFuaWNhbCBLZXlib2FyZCIsCiAgY2F0ZWdvcnk6ICJLZXlib2FyZHMiLAogIGRlc2NyaXB0aW9uOiAiQ29tcGFjdCA3NSUgbGF5b3V0IHdpdGggaG90LXN3YXBwYWJsZSBzd2l0Y2hlcyIsCiAgcHJpY2U6IDc5Ljk5LAogIG9yaWdpbmFsUHJpY2U6IDk0Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOmtleWJvYXJkIgp9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iY2FydC1zdW1tYXJ5Ij4KICAgICAgICAgIDxoMyBjbGFzcz0iY2FydC1zdW1tYXJ5LXRpdGxlIj5PcmRlciBTdW1tYXJ5PC9oMz4KICAgICAgICAgIDxkaXYgaWQ9ImNhcnQtc3VtbWFyeS1jb250ZW50Ij4KICAgICAgICAgICAgPCEtLSBDb250ZW50IHdpbGwgYmUgZHluYW1pY2FsbHkgdXBkYXRlZCAtLT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUmVxdWlyZWQgJiBEaXNhYmxlZCBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHN0YXRlcyBmb3IgdmFsaWRhdGlvbiBhbmQgcmVzdHJpY3Rpb25zIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvcgogICAgICAgICAgLmxhYmVsPSR7Ik51bWJlciBvZiBMaWNlbnNlcyJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2VsZWN0IGhvdyBtYW55IGxpY2Vuc2VzIHlvdSBuZWVkIn0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAudmFsdWU9JHsxfQogICAgICAgID48L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvcj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yCiAgICAgICAgICAubGFiZWw9JHsiRml4ZWQgUXVhbnRpdHkifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoaXMgcXVhbnRpdHkgY2Fubm90IGJlIGNoYW5nZWQifQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC52YWx1ZT0kezV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiT3JkZXIgRm9ybSJ9IC5zdWJ0aXRsZT0keyJDb21wbGV0ZSBvcmRlciBmb3JtIHdpdGggcXVhbnRpdHkgc2VsZWN0aW9uIn0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkN1c3RvbWVyIE5hbWUifSAucmVxdWlyZWQ9JHt0cnVlfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJQcm9kdWN0In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkJhc2ljIFBsYW4iLCAiUHJvIFBsYW4iLCAiRW50ZXJwcmlzZSBQbGFuIl19CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgPGRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvcgogICAgICAgICAgICAubGFiZWw9JHsiUXVhbnRpdHkifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiTnVtYmVyIG9mIGxpY2Vuc2VzIn0KICAgICAgICAgICAgLnZhbHVlPSR7MX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvcj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IlNwZWNpYWwgSW5zdHJ1Y3Rpb25zIn0KICAgICAgICAgICAgLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTIyID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMyMyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBOdW1iZXIKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGUyMih0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzE0OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjModGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgMSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgICA6aG9zdCB7CiAgICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lciB7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgIG1pbi13aWR0aDogMTIwcHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAucXVhbnRpdHktY29udGFpbmVyLmRpc2FibGVkIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcjpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgICAgfQoKICAgICAgICAuc2VsZWN0b3IgewogICAgICAgICAgZmxleDogMCAwIDQwcHg7CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIH0KCiAgICAgICAgLnNlbGVjdG9yOmhvdmVyIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3RvcjphY3RpdmUgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkxJSkiLCAiaHNsKDAgMCUgMTElKSIpfTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3Rvci5taW51cyB7CiAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3Rvci5wbHVzIHsKICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgfQoKICAgICAgICAucXVhbnRpdHkgewogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAwNmVtOwogICAgICAgIH0KCiAgICAgICAgLyogS2V5Ym9hcmQgbmF2aWdhdGlvbiBmb2N1cyBzdHlsZXMgKi8KICAgICAgICAuc2VsZWN0b3I6Zm9jdXMgewogICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIH0KCiAgICAgICAgLyogTWluIHZhbHVlIHN0YXRlICovCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcltkYXRhLW1pbj0idHJ1ZSJdIC5zZWxlY3Rvci5taW51cyB7CiAgICAgICAgICBvcGFjaXR5OiAwLjM7CiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcltkYXRhLW1pbj0idHJ1ZSJdIC5zZWxlY3Rvci5taW51czpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICB9CgogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+YCA6ICIifQogICAgICAgIDxkaXYgCiAgICAgICAgICBjbGFzcz0icXVhbnRpdHktY29udGFpbmVyICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgICBkYXRhLW1pbj0iJHt0aGlzLnZhbHVlIDw9IDB9IgogICAgICAgID4KICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJzZWxlY3RvciBtaW51cyIgCiAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB7CiAgICAgICAgdGhpcy5kZWNyZWFzZSgpOwogICAgICB9fSIKICAgICAgICAgICAgdGFiaW5kZXg9IiR7dGhpcy5kaXNhYmxlZCA/ICItMSIgOiAiMCJ9IgogICAgICAgICAgICBAa2V5ZG93bj0iJHsoZTExKSA9PiB7CiAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIgfHwgZTExLmtleSA9PT0gIiAiKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuZGVjcmVhc2UoKTsKICAgICAgICB9CiAgICAgIH19IgogICAgICAgICAgICByb2xlPSJidXR0b24iCiAgICAgICAgICAgIGFyaWEtbGFiZWw9IkRlY3JlYXNlIHF1YW50aXR5IgogICAgICAgICAgPuKIkjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icXVhbnRpdHkiIGFyaWEtbGl2ZT0icG9saXRlIiBhcmlhLWF0b21pYz0idHJ1ZSI+JHt0aGlzLnZhbHVlfTwvZGl2PgogICAgICAgICAgPGRpdiAKICAgICAgICAgICAgY2xhc3M9InNlbGVjdG9yIHBsdXMiIAogICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gewogICAgICAgIHRoaXMuaW5jcmVhc2UoKTsKICAgICAgfX0iCiAgICAgICAgICAgIHRhYmluZGV4PSIke3RoaXMuZGlzYWJsZWQgPyAiLTEiIDogIjAifSIKICAgICAgICAgICAgQGtleWRvd249IiR7KGUxMSkgPT4gewogICAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiIHx8IGUxMS5rZXkgPT09ICIgIikgewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLmluY3JlYXNlKCk7CiAgICAgICAgfQogICAgICB9fSIKICAgICAgICAgICAgcm9sZT0iYnV0dG9uIgogICAgICAgICAgICBhcmlhLWxhYmVsPSJJbmNyZWFzZSBxdWFudGl0eSIKICAgICAgICAgID4rPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGluY3JlYXNlKCkgewogICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHsKICAgICAgICB0aGlzLnZhbHVlKys7CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGRlY3JlYXNlKCkgewogICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy52YWx1ZSA+IDApIHsKICAgICAgICB0aGlzLnZhbHVlLS07CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjModGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dFF1YW50aXR5U2VsZWN0b3IyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXJhZGlvZ3JvdXAvZGVlcy1pbnB1dC1yYWRpb2dyb3VwLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMTUgPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZGVtby1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDMwMHB4LCAxZnIpKTsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnJlc3VsdC1kaXNwbGF5IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDUsIDI0MiwgMC4xKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gQmFzaWMgUmFkaW8gR3JvdXBzIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBzdHJpbmcgb3B0aW9ucyBmb3IgY29tbW9uIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJTdWJzY3JpcHRpb24gUGxhbiJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJCYXNpYyAtICQ5L21vbnRoIiwgIlBybyAtICQyOS9tb250aCIsICJFbnRlcnByaXNlIC0gJDk5L21vbnRoIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJQcm8gLSAkMjkvbW9udGgifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQ2hvb3NlIHlvdXIgc3Vic2NyaXB0aW9uIHRpZXIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJQcmlvcml0eSBMZXZlbCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJIaWdoIiwgIk1lZGl1bSIsICJMb3ciXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik1lZGl1bSJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIyLiBIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJSYWRpbyBncm91cHMgd2l0aCBob3Jpem9udGFsIGFycmFuZ2VtZW50In0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgLmxhYmVsPSR7IkRvIHlvdSBhZ3JlZSB3aXRoIHRoZSB0ZXJtcz8ifQogICAgICAgICAgLm9wdGlvbnM9JHtbIlllcyIsICJObyIsICJNYXliZSJdfQogICAgICAgICAgLmRpcmVjdGlvbj0keyJob3Jpem9udGFsIn0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJZZXMifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAubGFiZWw9JHsiRXhwZXJpZW5jZSBMZXZlbCJ9CiAgICAgICAgICAub3B0aW9ucz0ke1siQmVnaW5uZXIiLCAiSW50ZXJtZWRpYXRlIiwgIkV4cGVydCJdfQogICAgICAgICAgLmRpcmVjdGlvbj0keyJob3Jpem9udGFsIn0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJJbnRlcm1lZGlhdGUifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlNlbGVjdCB5b3VyIGV4cGVyaWVuY2UgbGV2ZWwgd2l0aCB3ZWIgZGV2ZWxvcG1lbnQifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIEFkdmFuY2VkIE9wdGlvbnMifSAuc3VidGl0bGU9JHsiVXNpbmcgb2JqZWN0IGZvcm1hdCB3aXRoIGtleXMgYW5kIHBheWxvYWRzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgaWQ9ImFkdmFuY2VkLXJhZGlvIgogICAgICAgICAgLmxhYmVsPSR7IlNlbGVjdCBSZWdpb24ifQogICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJVbml0ZWQgU3RhdGVzIChVUyBFYXN0KSIsIGtleTogInVzLWVhc3QiLCBwYXlsb2FkOiB7IHJlZ2lvbjogInVzLWVhc3QtMSIsIGxhdGVuY3k6IDIwIH0gfSwKICB7IG9wdGlvbjogIkV1cm9wZSAoRnJhbmtmdXJ0KSIsIGtleTogImV1LWNlbnRyYWwiLCBwYXlsb2FkOiB7IHJlZ2lvbjogImV1LWNlbnRyYWwtMSIsIGxhdGVuY3k6IDUwIH0gfSwKICB7IG9wdGlvbjogIkFzaWEgUGFjaWZpYyAoU2luZ2Fwb3JlKSIsIGtleTogImFwLXNvdXRoZWFzdCIsIHBheWxvYWQ6IHsgcmVnaW9uOiAiYXAtc291dGhlYXN0LTEiLCBsYXRlbmN5OiAxMjAgfSB9Cl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiZXUtY2VudHJhbCJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQ2hvb3NlIHRoZSBjbG9zZXN0IHJlZ2lvbiBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSJ9CiAgICAgICAgICBAY2hhbmdlPSR7KGUxMSkgPT4gewogIGNvbnN0IGRpc3BsYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcmVnaW9uLXJlc3VsdCIpOwogIGlmIChkaXNwbGF5KSB7CiAgICBkaXNwbGF5LnRleHRDb250ZW50ID0gIlNlbGVjdGVkOiAiICsgSlNPTi5zdHJpbmdpZnkoZTExLmRldGFpbC52YWx1ZSwgbnVsbCwgMik7CiAgfQp9fQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICA8ZGl2IGlkPSJyZWdpb24tcmVzdWx0IiBjbGFzcz0icmVzdWx0LWRpc3BsYXkiPlNlbGVjdGVkOiB7ICJyZWdpb24iOiAiZXUtY2VudHJhbC0xIiwgImxhdGVuY3kiOiA1MCB9PC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBTdXJ2ZXkgRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJNdWx0aXBsZSByYWRpbyBncm91cHMgZm9yIHN1cnZleXMgYW5kIGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1ncmlkIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IkhvdyBzYXRpc2ZpZWQgYXJlIHlvdT8ifQogICAgICAgICAgICAub3B0aW9ucz0ke1siVmVyeSBTYXRpc2ZpZWQiLCAiU2F0aXNmaWVkIiwgIk5ldXRyYWwiLCAiRGlzc2F0aXNmaWVkIiwgIlZlcnkgRGlzc2F0aXNmaWVkIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJTYXRpc2ZpZWQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJXb3VsZCB5b3UgcmVjb21tZW5kIHVzPyJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJEZWZpbml0ZWx5IiwgIlByb2JhYmx5IiwgIk5vdCBTdXJlIiwgIlByb2JhYmx5IE5vdCIsICJEZWZpbml0ZWx5IE5vdCJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiUHJvYmFibHkifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNS4gU3RhdGVzICYgVmFsaWRhdGlvbiJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgc3RhdGVzIGFuZCB2YWxpZGF0aW9uIGV4YW1wbGVzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1ncmlkIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IlJlcXVpcmVkIFNlbGVjdGlvbiJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJPcHRpb24gQSIsICJPcHRpb24gQiIsICJPcHRpb24gQyJdfQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIFN0YXRlIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkRpc2FibGVkIE9wdGlvbiAxIiwgIkRpc2FibGVkIE9wdGlvbiAyIiwgIkRpc2FibGVkIE9wdGlvbiAzIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJEaXNhYmxlZCBPcHRpb24gMiJ9CiAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI2LiBTZXR0aW5ncyBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IkNvbW1vbiBwYXR0ZXJucyBpbiBhcHBsaWNhdGlvbiBzZXR0aW5ncyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgIC5sYWJlbD0keyJUaGVtZSBQcmVmZXJlbmNlIn0KICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiTGlnaHQgVGhlbWUiLCBrZXk6ICJsaWdodCIsIHBheWxvYWQ6ICJsaWdodCIgfSwKICB7IG9wdGlvbjogIkRhcmsgVGhlbWUiLCBrZXk6ICJkYXJrIiwgcGF5bG9hZDogImRhcmsiIH0sCiAgeyBvcHRpb246ICJTeXN0ZW0gRGVmYXVsdCIsIGtleTogInN5c3RlbSIsIHBheWxvYWQ6ICJhdXRvIiB9Cl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiZGFyayJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQ2hvb3NlIGhvdyB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGFwcGVhciJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgIC5sYWJlbD0keyJOb3RpZmljYXRpb24gRnJlcXVlbmN5In0KICAgICAgICAgIC5vcHRpb25zPSR7WyJBbGwgTm90aWZpY2F0aW9ucyIsICJJbXBvcnRhbnQgT25seSIsICJOb25lIl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiSW1wb3J0YW50IE9ubHkifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkNvbnRyb2wgaG93IG9mdGVuIHlvdSByZWNlaXZlIG5vdGlmaWNhdGlvbnMifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAubGFiZWw9JHsiTGFuZ3VhZ2UifQogICAgICAgICAgLm9wdGlvbnM9JHtbIkVuZ2xpc2giLCAiR2VybWFuIiwgIkZyZW5jaCIsICJTcGFuaXNoIiwgIkphcGFuZXNlIl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiRW5nbGlzaCJ9CiAgICAgICAgICAuZGlyZWN0aW9uPSR7Imhvcml6b250YWwifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjcuIEZvcm0gSW50ZWdyYXRpb24ifSAuc3VidGl0bGU9JHsiV29ya3Mgc2VhbWxlc3NseSB3aXRoIGRlZXMtZm9ybSJ9PgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJQcm9kdWN0IE5hbWUifQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAua2V5PSR7InByb2R1Y3ROYW1lIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiUHJvZHVjdCBDYXRlZ29yeSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJFbGVjdHJvbmljcyIsICJDbG90aGluZyIsICJCb29rcyIsICJIb21lICYgR2FyZGVuIiwgIlNwb3J0cyJdfQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAua2V5PSR7ImNhdGVnb3J5In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiQ29uZGl0aW9uIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIk5ldyIsICJMaWtlIE5ldyIsICJHb29kIiwgIkZhaXIiLCAiUG9vciJdfQogICAgICAgICAgICAuZGlyZWN0aW9uPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAua2V5PSR7ImNvbmRpdGlvbiJ9CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJOZXcifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJTaGlwcGluZyBTcGVlZCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiU3RhbmRhcmQgKDUtNyBkYXlzKSIsIGtleTogInN0YW5kYXJkIiwgcGF5bG9hZDogeyBkYXlzOiA3LCBwcmljZTogMCB9IH0sCiAgeyBvcHRpb246ICJFeHByZXNzICgyLTMgZGF5cykiLCBrZXk6ICJleHByZXNzIiwgcGF5bG9hZDogeyBkYXlzOiAzLCBwcmljZTogMTAgfSB9LAogIHsgb3B0aW9uOiAiT3Zlcm5pZ2h0Iiwga2V5OiAib3Zlcm5pZ2h0IiwgcGF5bG9hZDogeyBkYXlzOiAxLCBwcmljZTogMjUgfSB9Cl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJzdGFuZGFyZCJ9CiAgICAgICAgICAgIC5rZXk9JHsic2hpcHBpbmcifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCAudGV4dD0keyJTdWJtaXQgUHJvZHVjdCJ9PjwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmFkaW9ncm91cC9kZWVzLWlucHV0LXJhZGlvZ3JvdXAuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczI0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRSYWRpb2dyb3VwID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1yYWRpb2dyb3VwIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF9vcHRpb25zX2RlY29yYXRvcnM7CiAgbGV0IF9vcHRpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRPcHRpb25fZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkT3B0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRPcHRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RpcmVjdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfZGlyZWN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlyZWN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXRSYWRpb2dyb3VwMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX29wdGlvbnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX3NlbGVjdGVkT3B0aW9uX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9kaXJlY3Rpb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTIzKHRoaXMsIG51bGwsIF9vcHRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3B0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3B0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcHRpb25zX2luaXRpYWxpemVycywgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyMyh0aGlzLCBudWxsLCBfc2VsZWN0ZWRPcHRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRPcHRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkT3B0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkT3B0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZE9wdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZE9wdGlvbl9pbml0aWFsaXplcnMsIF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIzKHRoaXMsIG51bGwsIF9kaXJlY3Rpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlyZWN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaXJlY3Rpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGlyZWN0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXJlY3Rpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlyZWN0aW9uX2luaXRpYWxpemVycywgX2RpcmVjdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIzKHRoaXMsIG51bGwsIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsaWRhdGlvblN0YXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uU3RhdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWxpZGF0aW9uU3RhdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIzKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0UmFkaW9ncm91cDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzE1OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMyNCh0aGlzLCBfb3B0aW9uc19pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgb3B0aW9ucygpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcHRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI0KHRoaXMsIF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNCh0aGlzLCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHNlbGVjdGVkT3B0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZE9wdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkaXJlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI0KHRoaXMsIF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjQodGhpcywgX2RpcmVjdGlvbl9pbml0aWFsaXplcnMsICJ2ZXJ0aWNhbCIpKTsKICAgIGdldCBkaXJlY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNkaXJlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkaXJlY3Rpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2RpcmVjdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3ZhbGlkYXRpb25TdGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjQodGhpcywgX2RpcmVjdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjQodGhpcywgX3ZhbGlkYXRpb25TdGF0ZV9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCB2YWxpZGF0aW9uU3RhdGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWxpZGF0aW9uU3RhdGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbGlkYXRpb25TdGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gRm9ybSBjb21wYXRpYmlsaXR5CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIGNvbnN0IG9wdGlvbjIgPSB0aGlzLmdldE9wdGlvbkJ5S2V5KHRoaXMuc2VsZWN0ZWRPcHRpb24pOwogICAgICBpZiAodHlwZW9mIG9wdGlvbjIgPT09ICJvYmplY3QiICYmIG9wdGlvbjIucGF5bG9hZCAhPT0gdm9pZCAwKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbjIucGF5bG9hZDsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbjsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWwpIHsKICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJzdHJpbmciKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHZhbDsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBvcHRpb24yID0gdGhpcy5vcHRpb25zLmZpbmQoKG9wdCkgPT4gdHlwZW9mIG9wdCA9PT0gIm9iamVjdCIgJiYgb3B0LnBheWxvYWQgPT09IHZhbCk7CiAgICAgICAgaWYgKG9wdGlvbjIgJiYgdHlwZW9mIG9wdGlvbjIgPT09ICJvYmplY3QiKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gb3B0aW9uMi5rZXk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTBweDsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIuaG9yaXpvbnRhbCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZ2FwOiAyMHB4OwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDZweCAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyLmhvcml6b250YWwgLnJhZGlvLW9wdGlvbiB7CiAgICAgICAgcGFkZGluZzogNnB4IDIwcHggNnB4IDA7CiAgICAgIH0KCiAgICAgIC5yYWRpby1vcHRpb246aG92ZXIgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgfQoKICAgICAgLnJhZGlvLW9wdGlvbjpob3ZlciAucmFkaW8tbGFiZWwgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICB9CgogICAgICAucmFkaW8tY2lyY2xlIHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDIwLjIlIDY1LjElKSIsICJoc2woMjE1IDIwLjIlIDM1LjElKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIxNSAzMCUgNi44JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uLnNlbGVjdGVkIC5yYWRpby1jaXJjbGUgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uLnNlbGVjdGVkIC5yYWRpby1jaXJjbGU6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMzAlIDYuOCUpIil9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLnJhZGlvLW9wdGlvbi5zZWxlY3RlZCAucmFkaW8tY2lyY2xlOjphZnRlciB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLnJhZGlvLWNpcmNsZTpmb2N1cy12aXNpYmxlIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIxNSAzMCUgMy45JSkiKX0sCiAgICAgICAgICAgICAgICAgICAgMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIiwgImhzbCgyMTMuMSA5My45JSA2Ny44JSkiKX07CiAgICAgIH0KCiAgICAgIC5yYWRpby1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjE3LjkgMTAuNiUgNzQuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDA2ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5yYWRpby1vcHRpb24uc2VsZWN0ZWQgLnJhZGlvLWxhYmVsIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnJhZGlvLW9wdGlvbiB7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5yYWRpby1vcHRpb246aG92ZXIgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMzAlIDYuOCUpIil9OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAucmFkaW8tb3B0aW9uOmhvdmVyIC5yYWRpby1sYWJlbCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjE3LjkgMTAuNiUgNzQuOSUpIil9OwogICAgICB9CgogICAgICAubGFiZWwtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDA2ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5kZXNjcmlwdGlvbi10ZXh0IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDAzZW07CiAgICAgIH0KCiAgICAgIC8qIFZhbGlkYXRpb24gc3R5bGVzICovCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uU3RhdGU9ImludmFsaWQiXSkgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUpIiwgImhzbCgwIDYyLjglIDMwLjYlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbGlkYXRpb25TdGF0ZT0iaW52YWxpZCJdKSAucmFkaW8tb3B0aW9uLnNlbGVjdGVkIC5yYWRpby1jaXJjbGUgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uU3RhdGU9InZhbGlkIl0pIC5yYWRpby1vcHRpb24uc2VsZWN0ZWQgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIsICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIiwgImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uU3RhdGU9Indhcm4iXSkgLnJhZGlvLW9wdGlvbi5zZWxlY3RlZCAucmFkaW8tY2lyY2xlIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDUuNCA5My40JSA0Ny41JSkiLCAiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDUuNCA5My40JSA0Ny41JSkiLCAiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIil9OwogICAgICB9CgogICAgICAvKiBPdmVycmlkZSBiYXNlIGdyaWQgbGF5b3V0IGZvciByYWRpb2dyb3VwIHRvIHByZXZlbnQgbGFyZ2UgZ2FwcyAqLwogICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249ImxlZnQiXSkgLmlucHV0LXdyYXBwZXIgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249InJpZ2h0Il0pIC5pbnB1dC13cmFwcGVyIHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0bzsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGl2IGNsYXNzPSJsYWJlbC10ZXh0Ij4ke3RoaXMubGFiZWx9PC9kaXY+YCA6ICIifQogICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIgJHt0aGlzLmRpcmVjdGlvbn0iPgogICAgICAgICAgJHt0aGlzLm9wdGlvbnMubWFwKChvcHRpb24yKSA9PiB7CiAgICAgICAgY29uc3Qgb3B0aW9uS2V5ID0gdGhpcy5nZXRPcHRpb25LZXkob3B0aW9uMik7CiAgICAgICAgY29uc3Qgb3B0aW9uTGFiZWwgPSB0aGlzLmdldE9wdGlvbkxhYmVsKG9wdGlvbjIpOwogICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkT3B0aW9uID09PSBvcHRpb25LZXk7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgICBjbGFzcz0icmFkaW8tb3B0aW9uICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gdGhpcy5zZWxlY3RPcHRpb24ob3B0aW9uS2V5KX0iCiAgICAgICAgICAgICAgICBAa2V5ZG93bj0iJHsoZTExKSA9PiB0aGlzLmhhbmRsZUtleWRvd24oZTExLCBvcHRpb25LZXkpfSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgICAgICBjbGFzcz0icmFkaW8tY2lyY2xlIiAKICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9IiR7dGhpcy5kaXNhYmxlZCA/ICItMSIgOiAiMCJ9IgogICAgICAgICAgICAgICAgICByb2xlPSJyYWRpbyIKICAgICAgICAgICAgICAgICAgYXJpYS1jaGVja2VkPSIke2lzU2VsZWN0ZWR9IgogICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSIke29wdGlvbkxhYmVsfSIKICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGlvLWxhYmVsIj4ke29wdGlvbkxhYmVsfTwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24gPyBiMmA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbi10ZXh0Ij4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+YCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBnZXRPcHRpb25LZXkob3B0aW9uMikgewogICAgICBpZiAodHlwZW9mIG9wdGlvbjIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbjI7CiAgICAgIH0KICAgICAgcmV0dXJuIG9wdGlvbjIua2V5OwogICAgfQogICAgZ2V0T3B0aW9uTGFiZWwob3B0aW9uMikgewogICAgICBpZiAodHlwZW9mIG9wdGlvbjIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbjI7CiAgICAgIH0KICAgICAgcmV0dXJuIG9wdGlvbjIub3B0aW9uOwogICAgfQogICAgZ2V0T3B0aW9uQnlLZXkoa2V5MikgewogICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQoKG9wdCkgPT4gdGhpcy5nZXRPcHRpb25LZXkob3B0KSA9PT0ga2V5Mik7CiAgICB9CiAgICBzZWxlY3RPcHRpb24oa2V5MikgewogICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSBrZXkyOwogICAgICBpZiAob2xkVmFsdWUgIT09IGtleTIpIHsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjaGFuZ2UiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHRoaXMudmFsdWUgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pKTsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJpbnB1dCIsIHsKICAgICAgICAgIGRldGFpbDogeyB2YWx1ZTogdGhpcy52YWx1ZSB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICB9CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWwpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbDsKICAgIH0KICAgIGFzeW5jIHZhbGlkYXRlKCkgewogICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhdGhpcy5zZWxlY3RlZE9wdGlvbikgewogICAgICAgIHRoaXMudmFsaWRhdGlvblN0YXRlID0gImludmFsaWQiOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9ICJ2YWxpZCI7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA+IDAgJiYgIXRoaXMucmVxdWlyZWQpIHsKICAgICAgICBjb25zdCBmaXJzdE9wdGlvbiA9IHRoaXMub3B0aW9uc1swXTsKICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5nZXRPcHRpb25LZXkoZmlyc3RPcHRpb24pOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVLZXlkb3duKGV2ZW50LCBvcHRpb25LZXkpIHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoZXZlbnQua2V5ID09PSAiICIgfHwgZXZlbnQua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbihvcHRpb25LZXkpOwogICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gIkFycm93RG93biIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dSaWdodCIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuZm9jdXNOZXh0T3B0aW9uKCk7CiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAiQXJyb3dVcCIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dMZWZ0IikgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzT3B0aW9uKCk7CiAgICAgIH0KICAgIH0KICAgIGZvY3VzTmV4dE9wdGlvbigpIHsKICAgICAgY29uc3QgcmFkaW9DaXJjbGVzID0gQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgiLnJhZGlvLWNpcmNsZSIpKTsKICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gcmFkaW9DaXJjbGVzLmZpbmRJbmRleCgoZWwpID0+IGVsID09PSB0aGlzLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCk7CiAgICAgIGNvbnN0IG5leHRJbmRleCA9IChjdXJyZW50SW5kZXggKyAxKSAlIHJhZGlvQ2lyY2xlcy5sZW5ndGg7CiAgICAgIHJhZGlvQ2lyY2xlc1tuZXh0SW5kZXhdLmZvY3VzKCk7CiAgICB9CiAgICBmb2N1c1ByZXZpb3VzT3B0aW9uKCkgewogICAgICBjb25zdCByYWRpb0NpcmNsZXMgPSBBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCIucmFkaW8tY2lyY2xlIikpOwogICAgICBjb25zdCBjdXJyZW50SW5kZXggPSByYWRpb0NpcmNsZXMuZmluZEluZGV4KChlbCkgPT4gZWwgPT09IHRoaXMuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50KTsKICAgICAgY29uc3QgcHJldkluZGV4ID0gY3VycmVudEluZGV4IDw9IDAgPyByYWRpb0NpcmNsZXMubGVuZ3RoIC0gMSA6IGN1cnJlbnRJbmRleCAtIDE7CiAgICAgIHJhZGlvQ2lyY2xlc1twcmV2SW5kZXhdLmZvY3VzKCk7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyNCh0aGlzLCBfdmFsaWRhdGlvblN0YXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dFJhZGlvZ3JvdXAyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mb3JtL2RlZXMtZm9ybS1zdWJtaXQvZGVlcy1mb3JtLXN1Ym1pdC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzE2ID0gKCkgPT4gYjJgPGRlZXMtZm9ybS1zdWJtaXQ+U3VibWl0IEZvcm08L2RlZXMtZm9ybS1zdWJtaXQ+YDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mb3JtL2RlZXMtZm9ybS1zdWJtaXQvZGVlcy1mb3JtLXN1Ym1pdC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUyNCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMjUgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNGb3JtU3VibWl0ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1mb3JtLXN1Ym1pdCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2Rpc2FibGVkX2RlY29yYXRvcnM7CiAgbGV0IF9kaXNhYmxlZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXh0X2RlY29yYXRvcnM7CiAgbGV0IF90ZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdHVzX2RlY29yYXRvcnM7CiAgbGV0IF9zdGF0dXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0Zvcm1TdWJtaXQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfZGlzYWJsZWRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3RleHRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX3N0YXR1c19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGUyNCh0aGlzLCBudWxsLCBfZGlzYWJsZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlzYWJsZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc2FibGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXNhYmxlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI0KHRoaXMsIG51bGwsIF90ZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXh0X2luaXRpYWxpemVycywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNCh0aGlzLCBudWxsLCBfc3RhdHVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RhdHVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXR1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc3RhdHVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0YXR1c19pbml0aWFsaXplcnMsIF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNGb3JtU3VibWl0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTY7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkZvcm0iOwogICAgI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczI1KHRoaXMsIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgIGdldCBkaXNhYmxlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGlzYWJsZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjUodGhpcywgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNSh0aGlzLCBfdGV4dF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjUodGhpcywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI1KHRoaXMsIF9zdGF0dXNfaW5pdGlhbGl6ZXJzLCAibm9ybWFsIikpOwogICAgZ2V0IHN0YXR1cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHN0YXR1cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyNSh0aGlzLCBfc3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbdGhlbWVEZWZhdWx0U3R5bGVzLCBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICBgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy1idXR0b24KICAgICAgICBzdGF0dXM9IiR7dGhpcy5zdGF0dXN9IgogICAgICAgIEBjbGljaz0iJHt0aGlzLnN1Ym1pdH0iCiAgICAgICAgP2Rpc2FibGVkPSIke3RoaXMuZGlzYWJsZWR9IgogICAgICA+CiAgICAgICAgJHt0aGlzLnRleHQgfHwgYjJgPHNsb3Q+PC9zbG90PmB9CiAgICAgIDwvZGVlcy1idXR0b24+CiAgICBgOwogICAgfQogICAgYXN5bmMgc3VibWl0KCkgewogICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBwYXJlbnRGb3JtRWxlbWVudCA9IHRoaXMuY2xvc2VzdCgiZGVlcy1mb3JtIik7CiAgICAgIGlmIChwYXJlbnRGb3JtRWxlbWVudCAmJiBwYXJlbnRGb3JtRWxlbWVudC5nYXRoZXJBbmREaXNwYXRjaCkgewogICAgICAgIHBhcmVudEZvcm1FbGVtZW50LmdhdGhlckFuZERpc3BhdGNoKCk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGZvY3VzKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHsKICAgICAgICBhd2FpdCBkb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICAgIHRoaXMuc3VibWl0KCk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjUoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNGb3JtU3VibWl0MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kcm9wZG93bi9kZWVzLWlucHV0LWRyb3Bkb3duLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMTcgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLnNwYWNlciB7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBjb3VudHJ5RHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtZHJvcGRvd25bbGFiZWw9IlNlbGVjdCBDb3VudHJ5Il0nKTsKICBjb25zdCByb2xlRHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtZHJvcGRvd25bbGFiZWw9IlNlbGVjdCBSb2xlIl0nKTsKICBpZiAoY291bnRyeURyb3Bkb3duKSB7CiAgICBjb3VudHJ5RHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLCAoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coIkNvdW50cnkgc2VsZWN0ZWQ6IiwgZXZlbnQuZGV0YWlsKTsKICAgIH0pOwogIH0KICBpZiAocm9sZURyb3Bkb3duKSB7CiAgICByb2xlRHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLCAoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coIlJvbGUgc2VsZWN0ZWQ6IiwgZXZlbnQuZGV0YWlsKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIxLiBCYXNpYyBEcm9wZG93bnMifSAuc3VidGl0bGU9JHsiU3RhbmRhcmQgZHJvcGRvd24gd2l0aCBzZWFyY2ggZnVuY3Rpb25hbGl0eSBhbmQgdmFyaW91cyBvcHRpb25zIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJTZWxlY3QgQ291bnRyeSJ9CiAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIlVuaXRlZCBTdGF0ZXMiLCBrZXk6ICJ1cyIgfSwKICB7IG9wdGlvbjogIkNhbmFkYSIsIGtleTogImNhIiB9LAogIHsgb3B0aW9uOiAiR2VybWFueSIsIGtleTogImRlIiB9LAogIHsgb3B0aW9uOiAiRnJhbmNlIiwga2V5OiAiZnIiIH0sCiAgeyBvcHRpb246ICJVbml0ZWQgS2luZ2RvbSIsIGtleTogInVrIiB9LAogIHsgb3B0aW9uOiAiQXVzdHJhbGlhIiwga2V5OiAiYXUiIH0sCiAgeyBvcHRpb246ICJKYXBhbiIsIGtleTogImpwIiB9LAogIHsgb3B0aW9uOiAiQnJhemlsIiwga2V5OiAiYnIiIH0KXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3sgb3B0aW9uOiAiVW5pdGVkIFN0YXRlcyIsIGtleTogInVzIiB9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJTZWxlY3QgUm9sZSJ9CiAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIkFkbWluaXN0cmF0b3IiLCBrZXk6ICJhZG1pbiIgfSwKICB7IG9wdGlvbjogIkVkaXRvciIsIGtleTogImVkaXRvciIgfSwKICB7IG9wdGlvbjogIlZpZXdlciIsIGtleTogInZpZXdlciIgfSwKICB7IG9wdGlvbjogIkd1ZXN0Iiwga2V5OiAiZ3Vlc3QiIH0KXX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgcHJpb3JpdHlEcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kcm9wZG93biIpOwogIGlmIChwcmlvcml0eURyb3Bkb3duKSB7CiAgICBwcmlvcml0eURyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKGBQcmlvcml0eSBjaGFuZ2VkIHRvOiAke2V2ZW50LmRldGFpbC5vcHRpb259YCk7CiAgICB9KTsKICB9Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gV2l0aG91dCBTZWFyY2gifSAuc3VidGl0bGU9JHsiRHJvcGRvd24gd2l0aCBzZWFyY2ggZnVuY3Rpb25hbGl0eSBkaXNhYmxlZCBmb3Igc2ltcGxlciBzZWxlY3Rpb24ifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IlByaW9yaXR5IExldmVsIn0KICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHtmYWxzZX0KICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiSGlnaCIsIGtleTogImhpZ2giIH0sCiAgeyBvcHRpb246ICJNZWRpdW0iLCBrZXk6ICJtZWRpdW0iIH0sCiAgeyBvcHRpb246ICJMb3ciLCBrZXk6ICJsb3ciIH0KXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3sgb3B0aW9uOiAiTWVkaXVtIiwga2V5OiAibWVkaXVtIiB9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBkcm9wZG93bnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtZHJvcGRvd24iKTsKICBkcm9wZG93bnMuZm9yRWFjaCgoZHJvcGRvd24pID0+IHsKICAgIGRyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IGxhYmVsID0gZHJvcGRvd24uZ2V0QXR0cmlidXRlKCJsYWJlbCIpOwogICAgICBjb25zb2xlLmxvZyhgJHtsYWJlbH06ICR7ZXZlbnQuZGV0YWlsLm9wdGlvbn1gKTsKICAgIH0pOwogIH0pOwp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIEhvcml6b250YWwgTGF5b3V0In0gLnN1YnRpdGxlPSR7Ik11bHRpcGxlIGRyb3Bkb3ducyBpbiBhIGhvcml6b250YWwgbGF5b3V0IGZvciBjb21wYWN0IGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAubGFiZWw9JHsiRGVwYXJ0bWVudCJ9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIkVuZ2luZWVyaW5nIiwga2V5OiAiZW5nIiB9LAogIHsgb3B0aW9uOiAiRGVzaWduIiwga2V5OiAiZGVzaWduIiB9LAogIHsgb3B0aW9uOiAiTWFya2V0aW5nIiwga2V5OiAibWFya2V0aW5nIiB9LAogIHsgb3B0aW9uOiAiU2FsZXMiLCBrZXk6ICJzYWxlcyIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IlRlYW0gU2l6ZSJ9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAuZW5hYmxlU2VhcmNoPSR7ZmFsc2V9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiMS01Iiwga2V5OiAic21hbGwiIH0sCiAgeyBvcHRpb246ICI2LTIwIiwga2V5OiAibWVkaXVtIiB9LAogIHsgb3B0aW9uOiAiMjEtNTAiLCBrZXk6ICJsYXJnZSIgfSwKICB7IG9wdGlvbjogIjUwKyIsIGtleTogInhsYXJnZSIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IkxvY2F0aW9uIn0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiUmVtb3RlIiwga2V5OiAicmVtb3RlIiB9LAogIHsgb3B0aW9uOiAiT24tc2l0ZSIsIGtleTogIm9uc2l0ZSIgfSwKICB7IG9wdGlvbjogIkh5YnJpZCIsIGtleTogImh5YnJpZCIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHJlcXVpcmVkRHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZHJvcGRvd25bcmVxdWlyZWRdIik7CiAgaWYgKHJlcXVpcmVkRHJvcGRvd24pIHsKICAgIHJlcXVpcmVkRHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coIlJlcXVpcmVkIGRyb3Bkb3duIGxvc3QgZm9jdXMiKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHN0YXRlcyBhbmQgY29uZmlndXJhdGlvbnMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IlJlcXVpcmVkIEZpZWxkIn0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIk9wdGlvbiBBIiwga2V5OiAiYSIgfSwKICB7IG9wdGlvbjogIk9wdGlvbiBCIiwga2V5OiAiYiIgfSwKICB7IG9wdGlvbjogIk9wdGlvbiBDIiwga2V5OiAiYyIgfQpdfQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCBEcm9wZG93biJ9CiAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJDYW5ub3QgU2VsZWN0Iiwga2V5OiAiZGlzYWJsZWQiIH0KXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3sgb3B0aW9uOiAiQ2Fubm90IFNlbGVjdCIsIGtleTogImRpc2FibGVkIiB9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRpdiBjbGFzcz0ic3BhY2VyIj4KICAgICAgKFNwYWNlciB0byB0ZXN0IGRyb3Bkb3duIHBvc2l0aW9uaW5nKQogICAgPC9kaXY+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZHJvcGRvd24iKTsKICBpZiAoZHJvcGRvd24pIHsKICAgIGRyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJCb3R0b20gZHJvcGRvd24gc2VsZWN0ZWQ6IiwgZXZlbnQuZGV0YWlsKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI1LiBCb3R0b20gUG9zaXRpb25pbmcifSAuc3VidGl0bGU9JHsiRHJvcGRvd24gdGhhdCBvcGVucyB1cHdhcmQgd2hlbiBuZWFyIGJvdHRvbSBvZiB2aWV3cG9ydCJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAubGFiZWw9JHsiT3BlbnMgVXB3YXJkIn0KICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiRmlyc3QgT3B0aW9uIiwga2V5OiAiZmlyc3QiIH0sCiAgeyBvcHRpb246ICJTZWNvbmQgT3B0aW9uIiwga2V5OiAic2Vjb25kIiB9LAogIHsgb3B0aW9uOiAiVGhpcmQgT3B0aW9uIiwga2V5OiAidGhpcmQiIH0sCiAgeyBvcHRpb246ICJGb3VydGggT3B0aW9uIiwga2V5OiAiZm91cnRoIiB9LAogIHsgb3B0aW9uOiAiRmlmdGggT3B0aW9uIiwga2V5OiAiZmlmdGgiIH0KXX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBkcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kcm9wZG93biIpOwogIGNvbnN0IG91dHB1dCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI3NlbGVjdGlvbi1vdXRwdXQiKTsKICBpZiAoZHJvcGRvd24gJiYgb3V0cHV0KSB7CiAgICBvdXRwdXQuaW5uZXJIVE1MID0gIjxlbT5TZWxlY3QgYSBwcm9kdWN0IHRvIHNlZSBkZXRhaWxzLi4uPC9lbT4iOwogICAgZHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGlmIChldmVudC5kZXRhaWwudmFsdWUpIHsKICAgICAgICBvdXRwdXQuaW5uZXJIVE1MID0gYAogICAgICAgICAgICAgIDxzdHJvbmc+U2VsZWN0ZWQ6PC9zdHJvbmc+ICR7ZXZlbnQuZGV0YWlsLnZhbHVlLm9wdGlvbn08YnI+CiAgICAgICAgICAgICAgPHN0cm9uZz5LZXk6PC9zdHJvbmc+ICR7ZXZlbnQuZGV0YWlsLnZhbHVlLmtleX08YnI+CiAgICAgICAgICAgICAgPHN0cm9uZz5QcmljZTo8L3N0cm9uZz4gJCR7ZXZlbnQuZGV0YWlsLnZhbHVlLnBheWxvYWQ/LnByaWNlIHx8ICJOL0EifTxicj4KICAgICAgICAgICAgICA8c3Ryb25nPkZlYXR1cmVzOjwvc3Ryb25nPiAke2V2ZW50LmRldGFpbC52YWx1ZS5wYXlsb2FkPy5mZWF0dXJlcz8uam9pbigiLCAiKSB8fCAiTi9BIn0KICAgICAgICAgICAgYDsKICAgICAgfQogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjYuIEV2ZW50IEhhbmRsaW5nICYgUGF5bG9hZCJ9IC5zdWJ0aXRsZT0keyJEcm9wZG93biB3aXRoIHBheWxvYWQgZGF0YSBhbmQgY2hhbmdlIGV2ZW50IGhhbmRsaW5nIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJTZWxlY3QgUHJvZHVjdCJ9CiAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIkJhc2ljIFBsYW4iLCBrZXk6ICJiYXNpYyIsIHBheWxvYWQ6IHsgcHJpY2U6IDkuOTksIGZlYXR1cmVzOiBbIkZlYXR1cmUgQSJdIH0gfSwKICB7IG9wdGlvbjogIlBybyBQbGFuIiwga2V5OiAicHJvIiwgcGF5bG9hZDogeyBwcmljZTogMTkuOTksIGZlYXR1cmVzOiBbIkZlYXR1cmUgQSIsICJGZWF0dXJlIEIiXSB9IH0sCiAgeyBvcHRpb246ICJFbnRlcnByaXNlIFBsYW4iLCBrZXk6ICJlbnRlcnByaXNlIiwgcGF5bG9hZDogeyBwcmljZTogNDkuOTksIGZlYXR1cmVzOiBbIkZlYXR1cmUgQSIsICJGZWF0dXJlIEIiLCAiRmVhdHVyZSBDIl0gfSB9Cl19CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAKICAgICAgICA8ZGl2IGlkPSJzZWxlY3Rpb24tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsgcGFkZGluZzogMTJweDsgYmFja2dyb3VuZDogcmdiYSgwLCAxMDUsIDI0MiwgMC4xKTsgYm9yZGVyLXJhZGl1czogNHB4OyBmb250LXNpemU6IDE0cHg7Ij48L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZm9ybSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIik7CiAgY29uc3QgcHJvamVjdFR5cGVEcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kcm9wZG93bltrZXk9InByb2plY3RUeXBlIl0nKTsKICBjb25zdCBmcmFtZXdvcmtEcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kcm9wZG93bltrZXk9ImZyYW1ld29yayJdJyk7CiAgaWYgKGZvcm0pIHsKICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coIkZvcm0gc3VibWl0dGVkIHdpdGggZGF0YToiLCBldmVudC5kZXRhaWwuZGF0YSk7CiAgICB9KTsKICB9CiAgaWYgKHByb2plY3RUeXBlRHJvcGRvd24gJiYgZnJhbWV3b3JrRHJvcGRvd24pIHsKICAgIHByb2plY3RUeXBlRHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3Qgc2VsZWN0ZWRUeXBlID0gZXZlbnQuZGV0YWlsLmtleTsKICAgICAgY29uc29sZS5sb2coYFByb2plY3QgdHlwZSBjaGFuZ2VkIHRvOiAke3NlbGVjdGVkVHlwZX1gKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI3LiBGb3JtIEludGVncmF0aW9uIn0gLnN1YnRpdGxlPSR7IkRyb3Bkb3duIHdvcmtpbmcgd2l0aGluIGEgZm9ybSB3aXRoIHZhbGlkYXRpb24ifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IlByb2plY3QgVHlwZSJ9CiAgICAgICAgICAgIC5rZXk9JHsicHJvamVjdFR5cGUifQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIldlYiBBcHBsaWNhdGlvbiIsIGtleTogIndlYiIgfSwKICB7IG9wdGlvbjogIk1vYmlsZSBBcHBsaWNhdGlvbiIsIGtleTogIm1vYmlsZSIgfSwKICB7IG9wdGlvbjogIkRlc2t0b3AgQXBwbGljYXRpb24iLCBrZXk6ICJkZXNrdG9wIiB9LAogIHsgb3B0aW9uOiAiQVBJIFNlcnZpY2UiLCBrZXk6ICJhcGkiIH0KXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJEZXZlbG9wbWVudCBGcmFtZXdvcmsifQogICAgICAgICAgICAua2V5PSR7ImZyYW1ld29yayJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiUmVhY3QiLCBrZXk6ICJyZWFjdCIsIHBheWxvYWQ6IHsgdHlwZTogIndlYiIgfSB9LAogIHsgb3B0aW9uOiAiVnVlLmpzIiwga2V5OiAidnVlIiwgcGF5bG9hZDogeyB0eXBlOiAid2ViIiB9IH0sCiAgeyBvcHRpb246ICJBbmd1bGFyIiwga2V5OiAiYW5ndWxhciIsIHBheWxvYWQ6IHsgdHlwZTogIndlYiIgfSB9LAogIHsgb3B0aW9uOiAiUmVhY3QgTmF0aXZlIiwga2V5OiAicmVhY3QtbmF0aXZlIiwgcGF5bG9hZDogeyB0eXBlOiAibW9iaWxlIiB9IH0sCiAgeyBvcHRpb246ICJGbHV0dGVyIiwga2V5OiAiZmx1dHRlciIsIHBheWxvYWQ6IHsgdHlwZTogIm1vYmlsZSIgfSB9LAogIHsgb3B0aW9uOiAiRWxlY3Ryb24iLCBrZXk6ICJlbGVjdHJvbiIsIHBheWxvYWQ6IHsgdHlwZTogImRlc2t0b3AiIH0gfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgLnRleHQ9JHsiQ3JlYXRlIFByb2plY3QifT48L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRyb3Bkb3duL2RlZXMtaW5wdXQtZHJvcGRvd24uanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczI2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXREcm9wZG93biA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtZHJvcGRvd24iKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX29wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX29wdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlU2VhcmNoX2RlY29yYXRvcnM7CiAgbGV0IF9lbmFibGVTZWFyY2hfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lbmFibGVTZWFyY2hfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wZW5zVG9Ub3BfZGVjb3JhdG9yczsKICBsZXQgX29wZW5zVG9Ub3BfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcGVuc1RvVG9wX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWx0ZXJlZE9wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2ZpbHRlcmVkT3B0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlcmVkT3B0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0ZWRJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfaGlnaGxpZ2h0ZWRJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hpZ2hsaWdodGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzT3BlbmVkX2RlY29yYXRvcnM7CiAgbGV0IF9pc09wZW5lZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzT3BlbmVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hWYWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfc2VhcmNoVmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hWYWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXREcm9wZG93bjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9vcHRpb25zX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfZW5hYmxlU2VhcmNoX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEJvb2xlYW4KICAgICAgfSldOwogICAgICBfb3BlbnNUb1RvcF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZmlsdGVyZWRPcHRpb25zX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9oaWdobGlnaHRlZEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc09wZW5lZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2VhcmNoVmFsdWVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMjUodGhpcywgbnVsbCwgX29wdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3B0aW9ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3B0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vcHRpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcHRpb25zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX29wdGlvbnNfaW5pdGlhbGl6ZXJzLCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZE9wdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRPcHRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRPcHRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkT3B0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkT3B0aW9uX2luaXRpYWxpemVycywgX3NlbGVjdGVkT3B0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjUodGhpcywgbnVsbCwgX2VuYWJsZVNlYXJjaF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbmFibGVTZWFyY2giLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVuYWJsZVNlYXJjaCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbmFibGVTZWFyY2gsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVuYWJsZVNlYXJjaCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lbmFibGVTZWFyY2hfaW5pdGlhbGl6ZXJzLCBfZW5hYmxlU2VhcmNoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjUodGhpcywgbnVsbCwgX29wZW5zVG9Ub3BfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3BlbnNUb1RvcCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3BlbnNUb1RvcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vcGVuc1RvVG9wLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcGVuc1RvVG9wID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX29wZW5zVG9Ub3BfaW5pdGlhbGl6ZXJzLCBfb3BlbnNUb1RvcF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9maWx0ZXJlZE9wdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyZWRPcHRpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWx0ZXJlZE9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsdGVyZWRPcHRpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXJlZE9wdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsdGVyZWRPcHRpb25zX2luaXRpYWxpemVycywgX2ZpbHRlcmVkT3B0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9oaWdobGlnaHRlZEluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhpZ2hsaWdodGVkSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhpZ2hsaWdodGVkSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaGlnaGxpZ2h0ZWRJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaGlnaGxpZ2h0ZWRJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oaWdobGlnaHRlZEluZGV4X2luaXRpYWxpemVycywgX2hpZ2hsaWdodGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNSh0aGlzLCBudWxsLCBfaXNPcGVuZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNPcGVuZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzT3BlbmVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzT3BlbmVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc09wZW5lZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc09wZW5lZF9pbml0aWFsaXplcnMsIF9pc09wZW5lZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9zZWFyY2hWYWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWFyY2hWYWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VhcmNoVmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VhcmNoVmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlYXJjaFZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlYXJjaFZhbHVlX2luaXRpYWxpemVycywgX3NlYXJjaFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXREcm9wZG93bjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzE3OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfb3B0aW9uc19pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgb3B0aW9ucygpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcHRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgc2VsZWN0ZWRPcHRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZE9wdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkT3B0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZE9wdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gQWRkIHZhbHVlIHByb3BlcnR5IGZvciBmb3JtIGNvbXBhdGliaWxpdHkKICAgIGdldCB2YWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICB9CiAgICBzZXQgdmFsdWUodmFsKSB7CiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB2YWw7CiAgICB9CiAgICAjZW5hYmxlU2VhcmNoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfc2VsZWN0ZWRPcHRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9lbmFibGVTZWFyY2hfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgZW5hYmxlU2VhcmNoKCkgewogICAgICByZXR1cm4gdGhpcy4jZW5hYmxlU2VhcmNoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZW5hYmxlU2VhcmNoKHZhbHVlMikgewogICAgICB0aGlzLiNlbmFibGVTZWFyY2hfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNvcGVuc1RvVG9wX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfZW5hYmxlU2VhcmNoX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfb3BlbnNUb1RvcF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgb3BlbnNUb1RvcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wZW5zVG9Ub3BfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcGVuc1RvVG9wKHZhbHVlMikgewogICAgICB0aGlzLiNvcGVuc1RvVG9wX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZmlsdGVyZWRPcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfb3BlbnNUb1RvcF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX2ZpbHRlcmVkT3B0aW9uc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZmlsdGVyZWRPcHRpb25zKCkgewogICAgICByZXR1cm4gdGhpcy4jZmlsdGVyZWRPcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsdGVyZWRPcHRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNmaWx0ZXJlZE9wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNoaWdobGlnaHRlZEluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfZmlsdGVyZWRPcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfaGlnaGxpZ2h0ZWRJbmRleF9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBoaWdobGlnaHRlZEluZGV4KCkgewogICAgICByZXR1cm4gdGhpcy4jaGlnaGxpZ2h0ZWRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhpZ2hsaWdodGVkSW5kZXgodmFsdWUyKSB7CiAgICAgIHRoaXMuI2hpZ2hsaWdodGVkSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc09wZW5lZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX2hpZ2hsaWdodGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9pc09wZW5lZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNPcGVuZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc09wZW5lZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzT3BlbmVkKHZhbHVlMikgewogICAgICB0aGlzLiNpc09wZW5lZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlYXJjaFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfaXNPcGVuZWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9zZWFyY2hWYWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgc2VhcmNoVmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWFyY2hWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlYXJjaFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWFyY2hWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3ggewogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDM4cHg7CiAgICAgICAgcGFkZGluZzogMCA0MHB4IDAgMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLnNlbGVjdGVkQm94OmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3g6Zm9jdXMtdmlzaWJsZSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5zZWxlY3RlZEJveC5kaXNhYmxlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC8qIERyb3Bkb3duIGFycm93ICovCiAgICAgIC5zZWxlY3RlZEJveDo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMTJweDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXRvcDogNHB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3gub3Blbjo6YWZ0ZXIgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKSByb3RhdGUoMTgwZGVnKTsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbkJveCB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybSwgb3BhY2l0eTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtOHB4KSBzY2FsZSgwLjk4KTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggaHNsKDAgMCUgMCUgLyAwLjEpLCAwIDJweCA0cHggLTJweCBoc2woMCAwJSAwJSAvIDAuMSk7CiAgICAgICAgbWluLWhlaWdodDogNDBweDsKICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIHotaW5kZXg6IDUwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWxlY3Rpb25Cb3gudG9wIHsKICAgICAgICBib3R0b206IGNhbGMoMTAwJSArIDRweCk7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg4cHgpIHNjYWxlKDAuOTgpOwogICAgICB9CiAgICAgIAogICAgICAuc2VsZWN0aW9uQm94LmJvdHRvbSB7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICB9CgogICAgICAuc2VsZWN0aW9uQm94LnNob3cgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHNjYWxlKDEpOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC8qIE9wdGlvbnMgY29udGFpbmVyICovCiAgICAgIC5vcHRpb25zLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LWhlaWdodDogMjUwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIC8qIE9wdGlvbnMgKi8KICAgICAgLm9wdGlvbiB7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG1hcmdpbjogMnB4IDA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLm9wdGlvbi5oaWdobGlnaHRlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5vcHRpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIE5vIG9wdGlvbnMgbWVzc2FnZSAqLwogICAgICAubm8tb3B0aW9ucyB7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLyogU2VhcmNoICovCiAgICAgIC5zZWFyY2ggewogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CiAgICAgIAogICAgICAuc2VhcmNoLmJvdHRvbSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWFyY2ggaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zZWFyY2ggaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5zZWFyY2ggaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgKi8KICAgICAgLm9wdGlvbnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgfQoKICAgICAgLm9wdGlvbnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5vcHRpb25zLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLm9wdGlvbnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0gLnJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZH0+PC9kZWVzLWxhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0ic2VsZWN0ZWRCb3ggJHt0aGlzLmlzT3BlbmVkID8gIm9wZW4iIDogIiJ9ICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLnRvZ2dsZVNlbGVjdGlvbkJveCgpfSIKICAgICAgICAgICAgdGFiaW5kZXg9IiR7dGhpcy5kaXNhYmxlZCA/ICItMSIgOiAiMCJ9IgogICAgICAgICAgICBAa2V5ZG93bj0iJHt0aGlzLmhhbmRsZVNlbGVjdGVkQm94S2V5ZG93bn0iCiAgICAgICAgICA+CiAgICAgICAgICAgICR7dGhpcy5zZWxlY3RlZE9wdGlvbj8ub3B0aW9uIHx8ICJTZWxlY3QgYW4gb3B0aW9uIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2VsZWN0aW9uQm94ICR7dGhpcy5pc09wZW5lZCA/ICJzaG93IiA6ICIifSAke3RoaXMub3BlbnNUb1RvcCA/ICJ0b3AiIDogImJvdHRvbSJ9Ij4KICAgICAgICAgICAgJHt0aGlzLmVuYWJsZVNlYXJjaCA/IGIyYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2giPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCAKICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InRleHQiIAogICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IlNlYXJjaCBvcHRpb25zLi4uIiAKICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0iJHt0aGlzLnNlYXJjaFZhbHVlfSIKICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD0iJHt0aGlzLmhhbmRsZVNlYXJjaH0iCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9IiR7KGUxMSkgPT4gZTExLnN0b3BQcm9wYWdhdGlvbigpfSIKICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSIke3RoaXMuaGFuZGxlU2VhcmNoS2V5ZG93bn0iCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgIDogbnVsbH0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3B0aW9ucy1jb250YWluZXIiPgogICAgICAgICAgICAgICR7dGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwID8gYjJgPGRpdiBjbGFzcz0ibm8tb3B0aW9ucyI+Tm8gb3B0aW9ucyBmb3VuZDwvZGl2PmAgOiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5tYXAoKG9wdGlvbjIsIGluZGV4MikgPT4gewogICAgICAgIGNvbnN0IGlzSGlnaGxpZ2h0ZWQgPSB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPT09IGluZGV4MjsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJvcHRpb24gJHtpc0hpZ2hsaWdodGVkID8gImhpZ2hsaWdodGVkIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSIkeygpID0+IHRoaXMudXBkYXRlU2VsZWN0aW9uKG9wdGlvbjIpfSIKICAgICAgICAgICAgICAgICAgICAgICAgQG1vdXNlZW50ZXI9IiR7KCkgPT4gdGhpcy5oaWdobGlnaHRlZEluZGV4ID0gaW5kZXgyfSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgJHtvcHRpb24yLm9wdGlvbn0KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIGA7CiAgICAgIH0pfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy5oYW5kbGVDbGlja091dHNpZGUgPSB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZS5iaW5kKHRoaXMpOwogICAgfQogICAgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5zZWxlY3RlZE9wdGlvbiB8fCBudWxsOwogICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9uczsKICAgIH0KICAgIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoIm9wdGlvbnMiKSkgewogICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zOwogICAgICB9CiAgICB9CiAgICBhc3luYyB1cGRhdGVTZWxlY3Rpb24oc2VsZWN0ZWRPcHRpb24pIHsKICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHNlbGVjdGVkT3B0aW9uOwogICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAiIjsKICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7CiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IDA7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlbGVjdGVkT3B0aW9uIiwgewogICAgICAgIGRldGFpbDogc2VsZWN0ZWRPcHRpb24sCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX3NlYXJjaFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHBhdGgyID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7CiAgICAgIGlmICghcGF0aDIuaW5jbHVkZXModGhpcykpIHsKICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICIiOwogICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zOwogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpOwogICAgICB9CiAgICB9KTsKICAgIGFzeW5jIHRvZ2dsZVNlbGVjdGlvbkJveCgpIHsKICAgICAgdGhpcy5pc09wZW5lZCA9ICF0aGlzLmlzT3BlbmVkOwogICAgICBpZiAodGhpcy5pc09wZW5lZCkgewogICAgICAgIGNvbnN0IHNlbGVjdGVkQm94ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zZWxlY3RlZEJveCIpOwogICAgICAgIGNvbnN0IHJlY3QgPSBzZWxlY3RlZEJveC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCBzcGFjZUJlbG93ID0gd2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5ib3R0b207CiAgICAgICAgY29uc3Qgc3BhY2VBYm92ZSA9IHJlY3QudG9wOwogICAgICAgIHRoaXMub3BlbnNUb1RvcCA9IHNwYWNlQmVsb3cgPCAzMDAgJiYgc3BhY2VBYm92ZSA+IHNwYWNlQmVsb3c7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICBjb25zdCBzZWFyY2hJbnB1dCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoIGlucHV0Iik7CiAgICAgICAgaWYgKHNlYXJjaElucHV0KSB7CiAgICAgICAgICBzZWFyY2hJbnB1dC5mb2N1cygpOwogICAgICAgIH0KICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpOwogICAgICAgIH0sIDApOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAiIjsKICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9uczsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlU2VhcmNoKGV2ZW50KSB7CiAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSBldmVudC50YXJnZXQudmFsdWU7CiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBzZWFyY2hUZXJtOwogICAgICBjb25zdCBzZWFyY2hMb3dlciA9IHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKTsKICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKChvcHRpb24yKSA9PiBvcHRpb24yLm9wdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaExvd2VyKSk7CiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IDA7CiAgICB9CiAgICBoYW5kbGVLZXlEb3duKGV2ZW50KSB7CiAgICAgIGNvbnN0IGtleTIgPSBldmVudC5rZXk7CiAgICAgIGNvbnN0IG1heEluZGV4ID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMTsKICAgICAgaWYgKGtleTIgPT09ICJBcnJvd0Rvd24iKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPSB0aGlzLmhpZ2hsaWdodGVkSW5kZXggKyAxID4gbWF4SW5kZXggPyAwIDogdGhpcy5oaWdobGlnaHRlZEluZGV4ICsgMTsKICAgICAgfSBlbHNlIGlmIChrZXkyID09PSAiQXJyb3dVcCIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCAtIDEgPCAwID8gbWF4SW5kZXggOiB0aGlzLmhpZ2hsaWdodGVkSW5kZXggLSAxOwogICAgICB9IGVsc2UgaWYgKGtleTIgPT09ICJFbnRlciIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmhpZ2hsaWdodGVkSW5kZXhdKSB7CiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmhpZ2hsaWdodGVkSW5kZXhdKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoa2V5MiA9PT0gIkVzY2FwZSIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaGFuZGxlU2VhcmNoS2V5ZG93bihldmVudCkgewogICAgICBpZiAoZXZlbnQua2V5ID09PSAiQXJyb3dEb3duIiB8fCBldmVudC5rZXkgPT09ICJBcnJvd1VwIiB8fCBldmVudC5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICB0aGlzLmhhbmRsZUtleURvd24oZXZlbnQpOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVTZWxlY3RlZEJveEtleWRvd24oZXZlbnQpIHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoZXZlbnQua2V5ID09PSAiRW50ZXIiIHx8IGV2ZW50LmtleSA9PT0gIiAiKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdGlvbkJveCgpOwogICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gIkFycm93RG93biIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dVcCIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGlmICghdGhpcy5pc09wZW5lZCkgewogICAgICAgICAgdGhpcy50b2dnbGVTZWxlY3Rpb25Cb3goKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAiRXNjYXBlIikgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgaWYgKHRoaXMuaXNPcGVuZWQpIHsKICAgICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbjsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdmFsdWUyOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyNihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0RHJvcGRvd24yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWZpbGV1cGxvYWQvZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxOCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tc2hlbGwgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDMycHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMTYwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CgogICAgICAgIC5kZW1vLWdyaWQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICB9CgogICAgICAgIEBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogICAgICAgICAgLmRlbW8tZ3JpZC0tdHdvIHsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgbWlubWF4KDAsIDFmcikpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLmRlbW8tc3RhY2sgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDE4cHg7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1ub3RlIHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA5MCUpIiwgImhzbCgyMTUgMjAlIDI2JSkiKX07CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMyAxMDAlIDk3JSkiLCAiaHNsKDIxNSAyMCUgMTIlKSIpfTsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyNSUgMzIlKSIsICJoc2woMjE1IDIwJSA4MiUpIil9OwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTU7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1ub3RlIHN0cm9uZyB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDQ1JSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNoZWxsIj4KICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiTW9kZXJuIGZpbGUgdXBsb2FkZXIifQogICAgICAgIC5zdWJ0aXRsZT0keyJTaGFkY24taW5zcGlyZWQgbGF5b3V0IHdpdGggZHJhZyAmIGRyb3AsIHByZXZpZXdzIGFuZCB2YWxpZGF0aW9uIn0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCBkZW1vLWdyaWQtLXR3byI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXN0YWNrIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZmlsZXVwbG9hZAogICAgICAgICAgICAgIC5sYWJlbD0keyJBdHRhY2htZW50cyJ9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlVwbG9hZCBzdXBwb3J0aW5nIGRvY3VtZW50cyBmb3IgeW91ciByZXF1ZXN0In0KICAgICAgICAgICAgICAuYWNjZXB0PSR7ImltYWdlLyosLnBkZiwuemlwIn0KICAgICAgICAgICAgICAubWF4U2l6ZT0kezEwICogMTAyNCAqIDEwMjR9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAgICAubGFiZWw9JHsiQnJhbmQgYXNzZXRzIn0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVXBsb2FkIGhpZ2gtcmVzb2x1dGlvbiBpbWFnZXJ5IChKUEcvUE5HKSJ9CiAgICAgICAgICAgICAgLmFjY2VwdD0keyJpbWFnZS9qcGVnLGltYWdlL3BuZyJ9CiAgICAgICAgICAgICAgLm11bHRpcGxlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLm1heFNpemU9JHs1ICogMTAyNCAqIDEwMjR9CiAgICAgICAgICAgICAgLmJ1dHRvblRleHQ9JHsiU2VsZWN0IGNvdmVyIGltYWdlIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1zdGFjayI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAgICAubGFiZWw9JHsiQXVkaW8gdXBsb2FkcyJ9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlNoYXJlIHBvZGNhc3QgZHJhZnRzIChNUDMvV0FWLCBtYXggMjVNQiBlYWNoKSJ9CiAgICAgICAgICAgICAgLmFjY2VwdD0keyJhdWRpby8qIn0KICAgICAgICAgICAgICAubWF4U2l6ZT0kezI1ICogMTAyNCAqIDEwMjR9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAgICAubGFiZWw9JHsiRGlzYWJsZWQgZXhhbXBsZSJ9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlVwbG9hZGVyIGlzIGRpc2FibGVkIHdoaWxlIG1vZGVyYXRpb24gaXMgcGVuZGluZyJ9CiAgICAgICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7IkZvcm0gaW50ZWdyYXRpb24ifQogICAgICAgIC5zdWJ0aXRsZT0keyJDb21iaW5lIGZpbGUgdXBsb2FkcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBERUVTIGZvcm0gZWNvc3lzdGVtIn0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXN0YWNrIj4KICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgICAgICAubGFiZWw9JHsiUHJvamVjdCBuYW1lIn0KICAgICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJIb3cgc2hvdWxkIHdlIHJlZmVyIHRvIHRoaXMgcHJvamVjdCBpbnRlcm5hbGx5PyJ9CiAgICAgICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAgICAgLmtleT0keyJwcm9qZWN0TmFtZSJ9CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgoKICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgICAgICAubGFiZWw9JHsiQ29udGFjdCBlbWFpbCJ9CiAgICAgICAgICAgICAgICAuaW5wdXRUeXBlPSR7ImVtYWlsIn0KICAgICAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgICAgICAua2V5PSR7ImNvbnRhY3RFbWFpbCJ9CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgoKICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC1maWxldXBsb2FkCiAgICAgICAgICAgICAgICAubGFiZWw9JHsiU3RhdGVtZW50IG9mIHdvcmsifQogICAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlVwbG9hZCBhIHNpZ25lZCBzdGF0ZW1lbnQgb2Ygd29yayAoUERGLCBtYXggMTVNQikifQogICAgICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgICAgIC5hY2NlcHQ9JHsiYXBwbGljYXRpb24vcGRmIn0KICAgICAgICAgICAgICAgIC5tYXhTaXplPSR7MTUgKiAxMDI0ICogMTAyNH0KICAgICAgICAgICAgICAgIC5tdWx0aXBsZT0ke2ZhbHNlfQogICAgICAgICAgICAgICAgLmtleT0keyJzb3cifQogICAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KCiAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtZmlsZXVwbG9hZAogICAgICAgICAgICAgICAgLmxhYmVsPSR7IkNyZWF0aXZlIHJlZmVyZW5jZXMifQogICAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7Ik9wdGlvbmFsLiBVcGxvYWQgdXAgdG8gZml2ZSB2aXN1YWwgcmVmZXJlbmNlcyJ9CiAgICAgICAgICAgICAgICAuYWNjZXB0PSR7ImltYWdlLyoifQogICAgICAgICAgICAgICAgLm1heEZpbGVzPSR7NX0KICAgICAgICAgICAgICAgIC5tYXhTaXplPSR7OCAqIDEwMjQgKiAxMDI0fQogICAgICAgICAgICAgICAgLmtleT0keyJyZWZlcmVuY2VzIn0KICAgICAgICAgICAgICA+PC9kZWVzLWlucHV0LWZpbGV1cGxvYWQ+CgogICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgICAgIC5sYWJlbD0keyJOb3RlcyJ9CiAgICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIG9wdGlvbmFsIGNvbnRleHQgZm9yIHJldmlld2VycyJ9CiAgICAgICAgICAgICAgICAuaW5wdXRUeXBlPSR7InRleHRhcmVhIn0KICAgICAgICAgICAgICAgIC5rZXk9JHsibm90ZXMifQogICAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KCiAgICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgLnRleHQ9JHsiU3VibWl0IGJyaWVmaW5nIn0+PC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGVlcy1mb3JtPgoKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tbm90ZSI+CiAgICAgICAgICAgIDxzdHJvbmc+R29vZCB0byBrbm93Ojwvc3Ryb25nPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPkRyYWcgJiBkcm9wIGhpZ2hsaWdodHMgdGhlIGRyb3B6b25lIGFuZCBzdXBwb3J0cyBrZXlib2FyZCBhY3RpdmF0aW9uLjwvbGk+CiAgICAgICAgICAgICAgPGxpPkFjY2VwdGVkIGZpbGUgdHlwZXMgYXJlIHN1bW1hcmlzZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZSA8Y29kZT5hY2NlcHQ8L2NvZGU+IGF0dHJpYnV0ZS48L2xpPgogICAgICAgICAgICAgIDxsaT5JbWFnZSB1cGxvYWRzIHNob3cgbGl2ZSBwcmV2aWV3cyBnZW5lcmF0ZWQgdmlhIDxjb2RlPlVSTC5jcmVhdGVPYmplY3RVUkw8L2NvZGU+LjwvbGk+CiAgICAgICAgICAgICAgPGxpPkZpbGUgc2l6ZSBhbmQgZmlsZS1jb3VudCBsaW1pdHMgc3VyZmFjZSBpbmxpbmUgdmFsaWRhdGlvbiBtZXNzYWdlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UaGUgY29tcG9uZW50IHN0YXlzIGNvbXBhdGlibGUgd2l0aCA8Y29kZT5kZWVzLWZvcm08L2NvZGU+IHZhbHVlIGFjY2Vzc29ycy48L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWZpbGV1cGxvYWQvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBmaWxldXBsb2FkU3R5bGVzID0gWwogIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgaWAKICAgIDpob3N0IHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KCgogICAgLmlucHV0LXdyYXBwZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDEycHg7CiAgICB9CgogICAgLmRyb3B6b25lIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBwYWRkaW5nOiAyMHB4OwogICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICBib3JkZXI6IDEuNXB4IGRhc2hlZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgODAlKSIsICJoc2woMjE3IDIwJSAyNSUpIil9OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIxNSAyMCUgMTIlKSIpfTsKICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMgZWFzZSwgYm94LXNoYWRvdyAwLjJzIGVhc2UsIGJhY2tncm91bmQgMC4ycyBlYXNlOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLmRyb3B6b25lOmZvY3VzLXZpc2libGUgewogICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMjAlIDEyJSkiKX0sCiAgICAgICAgMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUgLyAwLjUpIiwgImhzbCgyMTMgOTMlIDY4JSAvIDAuNCkiKX07CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmUtLWFjdGl2ZSB7CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDMycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTUsIDIzLCA0MiwgMC4xMikiLCAicmdiYSgwLCAwLCAwLCAwLjM1KSIpfTsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSAvIDAuMDYpIiwgImhzbCgyMTMgOTMlIDY4JSAvIDAuMTIpIil9OwogICAgfQoKICAgIC5kcm9wem9uZS0taGFzLWZpbGVzIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk5JSkiLCAiaHNsKDIxNSAyMCUgMTElKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmUtLWRpc2FibGVkIHsKICAgICAgb3BhY2l0eTogMC42OwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2JvZHkgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDE2cHg7CiAgICB9CgogICAgLmRyb3B6b25lX19pY29uIHsKICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgIGhlaWdodDogNDhweDsKICAgICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlIC8gMC4xMikiLCAiaHNsKDIxMyA5MyUgNjglIC8gMC4xMikiKX07CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLmRyb3B6b25lX19pY29uIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2xvYWRlciB7CiAgICAgIHdpZHRoOiAyMHB4OwogICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgxNSwgMjMsIDQyLCAwLjE1KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIil9OwogICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBhbmltYXRpb246IGxvYWRlci1zcGluIDAuNnMgbGluZWFyIGluZmluaXRlOwogICAgfQoKICAgIC5kcm9wem9uZV9fY29udGVudCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogNHB4OwogICAgICBtaW4td2lkdGg6IDA7CiAgICB9CgogICAgLmRyb3B6b25lX19oZWFkbGluZSB7CiAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyIDQ3JSAxMSUpIiwgImhzbCgyMTAgMjAlIDk2JSkiKX07CiAgICB9CgogICAgLmRyb3B6b25lX19zdWJsaW5lIHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ2JSkiLCAiaHNsKDIxNSAxNiUgNzAlKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2Jyb3dzZSB7CiAgICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgcGFkZGluZzogMDsKICAgICAgbWFyZ2luLWxlZnQ6IDRweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwgImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgfQoKICAgIC5kcm9wem9uZV9fYnJvd3NlOmhvdmVyIHsKICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICB9CgogICAgLmRyb3B6b25lX19icm93c2U6ZGlzYWJsZWQgewogICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICBvcGFjaXR5OiAwLjY7CiAgICB9CgogICAgLmRyb3B6b25lX19tZXRhIHsKICAgICAgbWFyZ2luLXRvcDogMTRweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICBnYXA6IDhweDsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDUwJSkiLCAiaHNsKDIxNSAxNiUgNzIlKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmVfX21ldGEgc3BhbiB7CiAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDk1JSkiLCAiaHNsKDIxMyA5MyUgMTglKSIpfTsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDkwJSkiLCAiaHNsKDIxMyA5MyUgMjQlKSIpfTsKICAgIH0KCiAgICAuZmlsZS1saXN0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAxMnB4OwogICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICBwYWRkaW5nLXRvcDogMjBweDsKICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA5MCUpIiwgImhzbCgyMTMgOTMlIDI0JSkiKX07CiAgICB9CgogICAgLmZpbGUtbGlzdF9faGVhZGVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsICJoc2woMjE1IDE2JSA2OCUpIil9OwogICAgfQoKICAgIC5maWxlLWxpc3RfX2NsZWFyIHsKICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgYm9yZGVyOiBub25lOwogICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CgogICAgLmZpbGUtbGlzdF9fY2xlYXI6aG92ZXIgewogICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIH0KCiAgICAuZmlsZS1saXN0X19pdGVtcyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMTJweDsKICAgIH0KCiAgICAuZmlsZS1yb3cgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDEycHg7CiAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUgLyAwLjUpIiwgImhzbCgyMTUgMjAlIDE2JSAvIDAuNSkiKX07CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEzIDI3JSA5MiUpIiwgImhzbCgyMTcgMjUlIDI2JSkiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgfQoKICAgIC5maWxlLXJvdzpob3ZlciB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlIC8gMC44KSIsICJoc2woMjE1IDIwJSAxNiUgLyAwLjgpIil9OwogICAgfQoKICAgIC5maWxlLXRodW1iIHsKICAgICAgd2lkdGg6IDM2cHg7CiAgICAgIGhlaWdodDogMzZweDsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgOTIlKSIsICJoc2woMjE3IDMyJSAxOCUpIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLmZpbGUtdGh1bWIgZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzAlKSIpfTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHdpZHRoOiAxOHB4OwogICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICBmbGV4LXNocmluazogMDsKICAgIH0KCgogICAgLnRodW1iLWltYWdlIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICB9CgogICAgLmZpbGUtbWV0YSB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogNHB4OwogICAgICBtaW4td2lkdGg6IDA7CiAgICB9CgogICAgLmZpbGUtbmFtZSB7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyIDQ3JSAxMSUpIiwgImhzbCgyMTAgMjAlIDk2JSkiKX07CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgfQoKICAgIC5maWxlLWRldGFpbHMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDYlKSIsICJoc2woMjE1IDE2JSA3MCUpIil9OwogICAgfQoKICAgIC5maWxlLXNpemUgewogICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgfQoKICAgIC5maWxlLXR5cGUgewogICAgICBwYWRkaW5nOiAycHggOHB4OwogICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDg2JSkiLCAiaHNsKDIxNyAzMiUgMjglKSIpfTsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NiUpIiwgImhzbCgyMTUgMTYlIDcwJSkiKX07CiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgfQoKICAgIC5maWxlLWFjdGlvbnMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICB9CgogICAgLnJlbW92ZS1idXR0b24gewogICAgICB3aWR0aDogMjhweDsKICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICBib3JkZXI6IG5vbmU7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZSwgdHJhbnNmb3JtIDAuMTVzIGVhc2UsIGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNTIlKSIsICJoc2woMjE1IDE2JSA2OCUpIil9OwogICAgfQoKICAgIC5yZW1vdmUtYnV0dG9uOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyJSA1MCUgLyAwLjA4KSIsICJoc2woMCA2MiUgMzIlIC8gMC4xNSkiKX07CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIlIDQ2JSkiLCAiaHNsKDAgNzAlIDcwJSkiKX07CiAgICB9CgogICAgLnJlbW92ZS1idXR0b246YWN0aXZlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk2KTsKICAgIH0KCiAgICAucmVtb3ZlLWJ1dHRvbiBkZWVzLWljb24gewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgd2lkdGg6IDE0cHg7CiAgICAgIGhlaWdodDogMTRweDsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLnZhbGlkYXRpb24tbWVzc2FnZSB7CiAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MiUgNDAlKSIsICJoc2woMCA3MCUgNjglKSIpfTsKICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgIH0KCiAgICBAa2V5ZnJhbWVzIGxvYWRlci1zcGluIHsKICAgICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgIH0KICAgIH0KICBgCl07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1maWxldXBsb2FkL2NvbXBvbmVudC5qcwppbml0X2RlZXNfaWNvbigpOwppbml0X2Rpc3RfdHMyNigpOwp2YXIgX19lc0RlY29yYXRlMjYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczI3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRGaWxldXBsb2FkID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1maWxldXBsb2FkIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdGVfZGVjb3JhdG9yczsKICBsZXQgX3N0YXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzTG9hZGluZ19kZWNvcmF0b3JzOwogIGxldCBfaXNMb2FkaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNMb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9idXR0b25UZXh0X2RlY29yYXRvcnM7CiAgbGV0IF9idXR0b25UZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYnV0dG9uVGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWNjZXB0X2RlY29yYXRvcnM7CiAgbGV0IF9hY2NlcHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY2NlcHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX211bHRpcGxlX2RlY29yYXRvcnM7CiAgbGV0IF9tdWx0aXBsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX211bHRpcGxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhTaXplX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhTaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4U2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RmlsZXNfZGVjb3JhdG9yczsKICBsZXQgX21heEZpbGVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RmlsZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblN0YXRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dEZpbGV1cGxvYWQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfc3RhdGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2lzTG9hZGluZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfYnV0dG9uVGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2FjY2VwdF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX211bHRpcGxlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX21heFNpemVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9tYXhGaWxlc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3ZhbGlkYXRpb25TdGF0ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMjYodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfc3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RhdGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInN0YXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdGF0ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zdGF0ZV9pbml0aWFsaXplcnMsIF9zdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF9pc0xvYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNMb2FkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0xvYWRpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNMb2FkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc0xvYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNMb2FkaW5nX2luaXRpYWxpemVycywgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF9idXR0b25UZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJ1dHRvblRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJ1dHRvblRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYnV0dG9uVGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYnV0dG9uVGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9idXR0b25UZXh0X2luaXRpYWxpemVycywgX2J1dHRvblRleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfYWNjZXB0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjY2VwdCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWNjZXB0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFjY2VwdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWNjZXB0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjY2VwdF9pbml0aWFsaXplcnMsIF9hY2NlcHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfbXVsdGlwbGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibXVsdGlwbGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm11bHRpcGxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm11bHRpcGxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tdWx0aXBsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tdWx0aXBsZV9pbml0aWFsaXplcnMsIF9tdWx0aXBsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF9tYXhTaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1heFNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heFNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWF4U2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWF4U2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhTaXplX2luaXRpYWxpemVycywgX21heFNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfbWF4RmlsZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWF4RmlsZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heEZpbGVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heEZpbGVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYXhGaWxlcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhGaWxlc19pbml0aWFsaXplcnMsIF9tYXhGaWxlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsaWRhdGlvblN0YXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uU3RhdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWxpZGF0aW9uU3RhdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0RmlsZXVwbG9hZDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzE4OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgW10pOwogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzdGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfc3RhdGVfaW5pdGlhbGl6ZXJzLCAiaWRsZSIpKTsKICAgIGdldCBzdGF0ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3N0YXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc3RhdGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3N0YXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfc3RhdGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9pc0xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzTG9hZGluZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzTG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzTG9hZGluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYnV0dG9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX2J1dHRvblRleHRfaW5pdGlhbGl6ZXJzLCAiU2VsZWN0IGZpbGVzIikpOwogICAgZ2V0IGJ1dHRvblRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNidXR0b25UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYnV0dG9uVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYnV0dG9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FjY2VwdF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX2J1dHRvblRleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9hY2NlcHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGFjY2VwdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FjY2VwdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjY2VwdCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWNjZXB0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbXVsdGlwbGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9hY2NlcHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9tdWx0aXBsZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBtdWx0aXBsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI211bHRpcGxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbXVsdGlwbGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI211bHRpcGxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX211bHRpcGxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfbWF4U2l6ZV9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBtYXhTaXplKCkgewogICAgICByZXR1cm4gdGhpcy4jbWF4U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gMCBtZWFucyBubyBsaW1pdAogICAgc2V0IG1heFNpemUodmFsdWUyKSB7CiAgICAgIHRoaXMuI21heFNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYXhGaWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX21heFNpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9tYXhGaWxlc19pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBtYXhGaWxlcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21heEZpbGVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICAvLyAwIG1lYW5zIG5vIGxpbWl0CiAgICBzZXQgbWF4RmlsZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI21heEZpbGVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmFsaWRhdGlvblN0YXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfbWF4RmlsZXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF92YWxpZGF0aW9uU3RhdGVfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgdmFsaWRhdGlvblN0YXRlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblN0YXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsaWRhdGlvblN0YXRlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YWxpZGF0aW9uTWVzc2FnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyksICIiKTsKICAgIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3ZhbGlkYXRpb25NZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsaWRhdGlvbk1lc3NhZ2UodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbGlkYXRpb25NZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBwcmV2aWV3VXJsTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgICBkcm9wQXJlYSA9IG51bGw7CiAgICBzdGF0aWMgc3R5bGVzID0gZmlsZXVwbG9hZFN0eWxlczsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgYWNjZXB0ZWRTdW1tYXJ5ID0gdGhpcy5nZXRBY2NlcHRlZFN1bW1hcnkoKTsKICAgICAgY29uc3QgbWV0YUVudHJpZXMgPSBbCiAgICAgICAgdGhpcy5tdWx0aXBsZSA/ICJNdWx0aXBsZSBmaWxlcyBzdXBwb3J0ZWQiIDogIlNpbmdsZSBmaWxlIG9ubHkiLAogICAgICAgIHRoaXMubWF4U2l6ZSA+IDAgPyBgTWF4ICR7dGhpcy5mb3JtYXRGaWxlU2l6ZSh0aGlzLm1heFNpemUpfWAgOiAiTm8gc2l6ZSBsaW1pdCIKICAgICAgXTsKICAgICAgaWYgKGFjY2VwdGVkU3VtbWFyeSkgewogICAgICAgIG1ldGFFbnRyaWVzLnB1c2goYEFjY2VwdHMgJHthY2NlcHRlZFN1bW1hcnl9YCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbAogICAgICAgICAgLmxhYmVsPSR7dGhpcy5sYWJlbH0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259CiAgICAgICAgICAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfQogICAgICAgID48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9ImRyb3B6b25lICR7dGhpcy5zdGF0ZSA9PT0gImRyYWdPdmVyIiA/ICJkcm9wem9uZS0tYWN0aXZlIiA6ICIifSAke3RoaXMuZGlzYWJsZWQgPyAiZHJvcHpvbmUtLWRpc2FibGVkIiA6ICIifSAke3RoaXMudmFsdWUubGVuZ3RoID4gMCA/ICJkcm9wem9uZS0taGFzLWZpbGVzIiA6ICIifSIKICAgICAgICAgIHJvbGU9ImJ1dHRvbiIKICAgICAgICAgIHRhYmluZGV4PSR7dGhpcy5kaXNhYmxlZCA/IC0xIDogMH0KICAgICAgICAgIGFyaWEtZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgYXJpYS1sYWJlbD0ke2BTZWxlY3QgZmlsZXMke2FjY2VwdGVkU3VtbWFyeSA/IGAgKCR7YWNjZXB0ZWRTdW1tYXJ5fSlgIDogIiJ9YH0KICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlRHJvcHpvbmVDbGlja30KICAgICAgICAgIEBrZXlkb3duPSR7dGhpcy5oYW5kbGVEcm9wem9uZUtleWRvd259CiAgICAgICAgPgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIGNsYXNzPSJmaWxlLWlucHV0IgogICAgICAgICAgICBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBvcGFjaXR5OiAwOyBwb2ludGVyLWV2ZW50czogbm9uZTsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxcHg7IHRvcDogMDsgbGVmdDogMDsgb3ZlcmZsb3c6IGhpZGRlbjsiCiAgICAgICAgICAgIHR5cGU9ImZpbGUiCiAgICAgICAgICAgID9tdWx0aXBsZT0ke3RoaXMubXVsdGlwbGV9CiAgICAgICAgICAgIGFjY2VwdD0ke3RoaXMuYWNjZXB0IHx8ICIifQogICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgICBAY2hhbmdlPSR7dGhpcy5oYW5kbGVGaWxlSW5wdXRDaGFuZ2V9CiAgICAgICAgICAgIHRhYmluZGV4PSItMSIKICAgICAgICAgIC8+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9fYm9keSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRyb3B6b25lX19pY29uIj4KICAgICAgICAgICAgICAke3RoaXMuaXNMb2FkaW5nID8gYjJgPHNwYW4gY2xhc3M9ImRyb3B6b25lX19sb2FkZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L3NwYW4+YCA6IGIyYDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkZvbGRlck9wZW4iPjwvZGVlcy1pY29uPmB9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9fY29udGVudCI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRyb3B6b25lX19oZWFkbGluZSI+JHt0aGlzLmJ1dHRvblRleHQgfHwgIlNlbGVjdCBmaWxlcyJ9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkcm9wem9uZV9fc3VibGluZSI+CiAgICAgICAgICAgICAgICBEcmFnIGFuZCBkcm9wIGZpbGVzIGhlcmUgb3IKICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIgogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcHpvbmVfX2Jyb3dzZSIKICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVCcm93c2VDbGlja30KICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgYnJvd3NlCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9fbWV0YSI+CiAgICAgICAgICAgICR7bWV0YUVudHJpZXMubWFwKChlbnRyeSkgPT4gYjJgPHNwYW4+JHtlbnRyeX08L3NwYW4+YCl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICR7dGhpcy5yZW5kZXJGaWxlTGlzdCgpfQogICAgICAgIDwvZGl2PgogICAgICAgICR7dGhpcy52YWxpZGF0aW9uTWVzc2FnZSA/IGIyYDxkaXYgY2xhc3M9InZhbGlkYXRpb24tbWVzc2FnZSIgYXJpYS1saXZlPSJwb2xpdGUiPiR7dGhpcy52YWxpZGF0aW9uTWVzc2FnZX08L2Rpdj5gIDogYjJgYH0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyRmlsZUxpc3QoKSB7CiAgICAgIGlmICh0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybiBiMmBgOwogICAgICB9CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iZmlsZS1saXN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWxpc3RfX2hlYWRlciI+CiAgICAgICAgICA8c3Bhbj4ke3RoaXMudmFsdWUubGVuZ3RofSBmaWxlJHt0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMSA/ICIiIDogInMifSBzZWxlY3RlZDwvc3Bhbj4KICAgICAgICAgICR7dGhpcy52YWx1ZS5sZW5ndGggPiAwID8gYjJgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJmaWxlLWxpc3RfX2NsZWFyIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUNsZWFyQWxsfT5DbGVhciAke3RoaXMudmFsdWUubGVuZ3RoID4gMSA/ICJhbGwiIDogIiJ9PC9idXR0b24+YCA6IGIyYGB9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1saXN0X19pdGVtcyI+CiAgICAgICAgICAke3RoaXMudmFsdWUubWFwKChmaWxlKSA9PiB0aGlzLnJlbmRlckZpbGVSb3coZmlsZSkpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJGaWxlUm93KGZpbGUpIHsKICAgICAgY29uc3QgZmlsZVR5cGUgPSB0aGlzLmdldEZpbGVUeXBlKGZpbGUpOwogICAgICBjb25zdCBwcmV2aWV3VXJsID0gdGhpcy5jYW5TaG93UHJldmlldyhmaWxlKSA/IHRoaXMuZ2V0UHJldmlld1VybChmaWxlKSA6IG51bGw7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iZmlsZS1yb3cgJHtmaWxlVHlwZX0tZmlsZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS10aHVtYiIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgJHtwcmV2aWV3VXJsID8gYjJgPGltZyBjbGFzcz0idGh1bWItaW1hZ2UiIHNyYz0ke3ByZXZpZXdVcmx9IGFsdD0ke2BQcmV2aWV3IG9mICR7ZmlsZS5uYW1lfWB9PmAgOiBiMmA8ZGVlcy1pY29uIGljb249JHt0aGlzLmdldEZpbGVJY29uKGZpbGUpfT48L2RlZXMtaWNvbj5gfQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtbWV0YSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLW5hbWUiIHRpdGxlPSR7ZmlsZS5uYW1lfT4ke2ZpbGUubmFtZX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtZGV0YWlscyI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWxlLXNpemUiPiR7dGhpcy5mb3JtYXRGaWxlU2l6ZShmaWxlLnNpemUpfTwvc3Bhbj4KICAgICAgICAgICAgJHtmaWxlVHlwZSAhPT0gImZpbGUiID8gYjJgPHNwYW4gY2xhc3M9ImZpbGUtdHlwZSI+JHtmaWxlVHlwZX08L3NwYW4+YCA6IGIyYGB9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWFjdGlvbnMiPgogICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICB0eXBlPSJidXR0b24iCiAgICAgICAgICAgIGNsYXNzPSJyZW1vdmUtYnV0dG9uIgogICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnJlbW92ZUZpbGUoZmlsZSl9CiAgICAgICAgICAgIGFyaWEtbGFiZWw9JHtgUmVtb3ZlICR7ZmlsZS5uYW1lfWB9CiAgICAgICAgICA+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlgiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGhhbmRsZUZpbGVJbnB1dENoYW5nZSA9IGFzeW5jIChldmVudCkgPT4gewogICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlOwogICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7CiAgICAgIGNvbnN0IGZpbGVzID0gQXJyYXkuZnJvbSh0YXJnZXQuZmlsZXMgPz8gW10pOwogICAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkgewogICAgICAgIGF3YWl0IHRoaXMuYWRkRmlsZXMoZmlsZXMpOwogICAgICB9CiAgICAgIHRhcmdldC52YWx1ZSA9ICIiOwogICAgfTsKICAgIGhhbmRsZURyb3B6b25lQ2xpY2sgPSAoZXZlbnQpID0+IHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGV2ZW50LnRhcmdldC5jbG9zZXN0KCIuZHJvcHpvbmVfX2Jyb3dzZSwgLmZpbGUtbGlzdCIpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMub3BlbkZpbGVTZWxlY3RvcigpOwogICAgfTsKICAgIGhhbmRsZUJyb3dzZUNsaWNrID0gKGV2ZW50KSA9PiB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICB0aGlzLm9wZW5GaWxlU2VsZWN0b3IoKTsKICAgIH07CiAgICBoYW5kbGVEcm9wem9uZUtleWRvd24gPSAoZXZlbnQpID0+IHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGV2ZW50LmtleSA9PT0gIkVudGVyIiB8fCBldmVudC5rZXkgPT09ICIgIikgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy5vcGVuRmlsZVNlbGVjdG9yKCk7CiAgICAgIH0KICAgIH07CiAgICBoYW5kbGVDbGVhckFsbCA9IChldmVudCkgPT4gewogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLmNsZWFyQWxsKCk7CiAgICB9OwogICAgaGFuZGxlRHJhZ0V2ZW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoZXZlbnQudHlwZSA9PT0gImRyYWdlbnRlciIgfHwgZXZlbnQudHlwZSA9PT0gImRyYWdvdmVyIikgewogICAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHsKICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gImNvcHkiOwogICAgICAgIH0KICAgICAgICB0aGlzLnN0YXRlID0gImRyYWdPdmVyIjsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICJkcmFnbGVhdmUiKSB7CiAgICAgICAgaWYgKCF0aGlzLmRyb3BBcmVhKSB7CiAgICAgICAgICB0aGlzLnN0YXRlID0gImlkbGUiOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5kcm9wQXJlYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCB7IGNsaWVudFggPSAwLCBjbGllbnRZID0gMCB9ID0gZXZlbnQ7CiAgICAgICAgaWYgKGNsaWVudFggPD0gcmVjdC5sZWZ0IHx8IGNsaWVudFggPj0gcmVjdC5yaWdodCB8fCBjbGllbnRZIDw9IHJlY3QudG9wIHx8IGNsaWVudFkgPj0gcmVjdC5ib3R0b20pIHsKICAgICAgICAgIHRoaXMuc3RhdGUgPSAiaWRsZSI7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoZXZlbnQudHlwZSA9PT0gImRyb3AiKSB7CiAgICAgICAgdGhpcy5zdGF0ZSA9ICJpZGxlIjsKICAgICAgICBjb25zdCBmaWxlcyA9IEFycmF5LmZyb20oZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcyA/PyBbXSk7CiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGF3YWl0IHRoaXMuYWRkRmlsZXMoZmlsZXMpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIGF0dGFjaERyb3BMaXN0ZW5lcnMoKSB7CiAgICAgIGlmICghdGhpcy5kcm9wQXJlYSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBbImRyYWdlbnRlciIsICJkcmFnb3ZlciIsICJkcmFnbGVhdmUiLCAiZHJvcCJdLmZvckVhY2goKGV2ZW50TmFtZSkgPT4gewogICAgICAgIHRoaXMuZHJvcEFyZWEuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMuaGFuZGxlRHJhZ0V2ZW50KTsKICAgICAgfSk7CiAgICB9CiAgICBkZXRhY2hEcm9wTGlzdGVuZXJzKCkgewogICAgICBpZiAoIXRoaXMuZHJvcEFyZWEpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgWyJkcmFnZW50ZXIiLCAiZHJhZ292ZXIiLCAiZHJhZ2xlYXZlIiwgImRyb3AiXS5mb3JFYWNoKChldmVudE5hbWUpID0+IHsKICAgICAgICB0aGlzLmRyb3BBcmVhLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCB0aGlzLmhhbmRsZURyYWdFdmVudCk7CiAgICAgIH0pOwogICAgfQogICAgcmViaW5kSW50ZXJhY3RpdmVFbGVtZW50cygpIHsKICAgICAgY29uc3QgbmV3RHJvcEFyZWEgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kcm9wem9uZSIpOwogICAgICBpZiAobmV3RHJvcEFyZWEgIT09IHRoaXMuZHJvcEFyZWEpIHsKICAgICAgICB0aGlzLmRldGFjaERyb3BMaXN0ZW5lcnMoKTsKICAgICAgICB0aGlzLmRyb3BBcmVhID0gbmV3RHJvcEFyZWE7CiAgICAgICAgdGhpcy5hdHRhY2hEcm9wTGlzdGVuZXJzKCk7CiAgICAgIH0KICAgIH0KICAgIGZvcm1hdEZpbGVTaXplKGJ5dGVzKSB7CiAgICAgIGNvbnN0IHVuaXRzMiA9IFsiQnl0ZXMiLCAiS0IiLCAiTUIiLCAiR0IiXTsKICAgICAgaWYgKGJ5dGVzID09PSAwKQogICAgICAgIHJldHVybiAiMCBCeXRlcyI7CiAgICAgIGNvbnN0IGV4cG9uZW50ID0gTWF0aC5taW4oTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZygxMDI0KSksIHVuaXRzMi5sZW5ndGggLSAxKTsKICAgICAgY29uc3Qgc2l6ZSA9IGJ5dGVzIC8gTWF0aC5wb3coMTAyNCwgZXhwb25lbnQpOwogICAgICByZXR1cm4gYCR7TWF0aC5yb3VuZChzaXplICogMTAwKSAvIDEwMH0gJHt1bml0czJbZXhwb25lbnRdfWA7CiAgICB9CiAgICBnZXRGaWxlVHlwZShmaWxlKSB7CiAgICAgIGNvbnN0IHR5cGU1ID0gZmlsZS50eXBlLnRvTG93ZXJDYXNlKCk7CiAgICAgIGlmICh0eXBlNS5zdGFydHNXaXRoKCJpbWFnZS8iKSkKICAgICAgICByZXR1cm4gImltYWdlIjsKICAgICAgaWYgKHR5cGU1ID09PSAiYXBwbGljYXRpb24vcGRmIikKICAgICAgICByZXR1cm4gInBkZiI7CiAgICAgIGlmICh0eXBlNS5pbmNsdWRlcygid29yZCIpIHx8IHR5cGU1LmluY2x1ZGVzKCJkb2N1bWVudCIpKQogICAgICAgIHJldHVybiAiZG9jIjsKICAgICAgaWYgKHR5cGU1LmluY2x1ZGVzKCJzaGVldCIpIHx8IHR5cGU1LmluY2x1ZGVzKCJleGNlbCIpKQogICAgICAgIHJldHVybiAic3ByZWFkc2hlZXQiOwogICAgICBpZiAodHlwZTUuaW5jbHVkZXMoInByZXNlbnRhdGlvbiIpIHx8IHR5cGU1LmluY2x1ZGVzKCJwb3dlcnBvaW50IikpCiAgICAgICAgcmV0dXJuICJwcmVzZW50YXRpb24iOwogICAgICBpZiAodHlwZTUuc3RhcnRzV2l0aCgidmlkZW8vIikpCiAgICAgICAgcmV0dXJuICJ2aWRlbyI7CiAgICAgIGlmICh0eXBlNS5zdGFydHNXaXRoKCJhdWRpby8iKSkKICAgICAgICByZXR1cm4gImF1ZGlvIjsKICAgICAgaWYgKHR5cGU1LmluY2x1ZGVzKCJ6aXAiKSB8fCB0eXBlNS5pbmNsdWRlcygiY29tcHJlc3NlZCIpKQogICAgICAgIHJldHVybiAiYXJjaGl2ZSI7CiAgICAgIHJldHVybiAiZmlsZSI7CiAgICB9CiAgICBnZXRGaWxlSWNvbihmaWxlKSB7CiAgICAgIGNvbnN0IGZpbGVUeXBlID0gdGhpcy5nZXRGaWxlVHlwZShmaWxlKTsKICAgICAgY29uc3QgaWNvbk1hcCA9IHsKICAgICAgICBpbWFnZTogImx1Y2lkZTpGaWxlSW1hZ2UiLAogICAgICAgIHBkZjogImx1Y2lkZTpGaWxlVGV4dCIsCiAgICAgICAgZG9jOiAibHVjaWRlOkZpbGVUZXh0IiwKICAgICAgICBzcHJlYWRzaGVldDogImx1Y2lkZTpGaWxlU3ByZWFkc2hlZXQiLAogICAgICAgIHByZXNlbnRhdGlvbjogImx1Y2lkZTpGaWxlQmFyQ2hhcnQiLAogICAgICAgIHZpZGVvOiAibHVjaWRlOkZpbGVWaWRlbyIsCiAgICAgICAgYXVkaW86ICJsdWNpZGU6RmlsZUF1ZGlvIiwKICAgICAgICBhcmNoaXZlOiAibHVjaWRlOkZpbGVBcmNoaXZlIiwKICAgICAgICBmaWxlOiAibHVjaWRlOkZpbGUiCiAgICAgIH07CiAgICAgIHJldHVybiBpY29uTWFwW2ZpbGVUeXBlXSA/PyAibHVjaWRlOkZpbGUiOwogICAgfQogICAgY2FuU2hvd1ByZXZpZXcoZmlsZSkgewogICAgICByZXR1cm4gZmlsZS50eXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpICYmIGZpbGUuc2l6ZSA8IDUgKiAxMDI0ICogMTAyNDsKICAgIH0KICAgIHZhbGlkYXRlRmlsZShmaWxlKSB7CiAgICAgIGlmICh0aGlzLm1heFNpemUgPiAwICYmIGZpbGUuc2l6ZSA+IHRoaXMubWF4U2l6ZSkgewogICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgRmlsZSAiJHtmaWxlLm5hbWV9IiBleGNlZWRzIHRoZSBtYXhpbXVtIHNpemUgb2YgJHt0aGlzLmZvcm1hdEZpbGVTaXplKHRoaXMubWF4U2l6ZSl9YDsKICAgICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9ICJpbnZhbGlkIjsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuYWNjZXB0KSB7CiAgICAgICAgY29uc3QgYWNjZXB0ZWRUeXBlcyA9IHRoaXMuYWNjZXB0LnNwbGl0KCIsIikubWFwKChlbnRyeSkgPT4gZW50cnkudHJpbSgpKS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5sZW5ndGggPiAwKTsKICAgICAgICBpZiAoYWNjZXB0ZWRUeXBlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBsZXQgaXNBY2NlcHRlZCA9IGZhbHNlOwogICAgICAgICAgZm9yIChjb25zdCBhY2NlcHRUeXBlIG9mIGFjY2VwdGVkVHlwZXMpIHsKICAgICAgICAgICAgaWYgKGFjY2VwdFR5cGUuc3RhcnRzV2l0aCgiLiIpKSB7CiAgICAgICAgICAgICAgaWYgKGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGFjY2VwdFR5cGUudG9Mb3dlckNhc2UoKSkpIHsKICAgICAgICAgICAgICAgIGlzQWNjZXB0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGFjY2VwdFR5cGUuZW5kc1dpdGgoIi8qIikpIHsKICAgICAgICAgICAgICBjb25zdCBwcmVmaXg0ID0gYWNjZXB0VHlwZS5zbGljZSgwLCAtMik7CiAgICAgICAgICAgICAgaWYgKGZpbGUudHlwZS5zdGFydHNXaXRoKHByZWZpeDQpKSB7CiAgICAgICAgICAgICAgICBpc0FjY2VwdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxlLnR5cGUgPT09IGFjY2VwdFR5cGUpIHsKICAgICAgICAgICAgICBpc0FjY2VwdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKCFpc0FjY2VwdGVkKSB7CiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgRmlsZSB0eXBlIG5vdCBhY2NlcHRlZC4gQWxsb3dlZDogJHthY2NlcHRlZFR5cGVzLmpvaW4oIiwgIil9YDsKICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU3RhdGUgPSAiaW52YWxpZCI7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBnZXRQcmV2aWV3VXJsKGZpbGUpIHsKICAgICAgbGV0IHVybCA9IHRoaXMucHJldmlld1VybE1hcC5nZXQoZmlsZSk7CiAgICAgIGlmICghdXJsKSB7CiAgICAgICAgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTsKICAgICAgICB0aGlzLnByZXZpZXdVcmxNYXAuc2V0KGZpbGUsIHVybCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVybDsKICAgIH0KICAgIHJlbGVhc2VQcmV2aWV3KGZpbGUpIHsKICAgICAgY29uc3QgdXJsID0gdGhpcy5wcmV2aWV3VXJsTWFwLmdldChmaWxlKTsKICAgICAgaWYgKHVybCkgewogICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTsKICAgICAgICB0aGlzLnByZXZpZXdVcmxNYXAuZGVsZXRlKGZpbGUpOwogICAgICB9CiAgICB9CiAgICBnZXRBY2NlcHRlZFN1bW1hcnkoKSB7CiAgICAgIGlmICghdGhpcy5hY2NlcHQpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBmb3JtYXR0ZWQgPSBBcnJheS5mcm9tKG5ldyBTZXQodGhpcy5hY2NlcHQuc3BsaXQoIiwiKS5tYXAoKHRva2VuKSA9PiB0b2tlbi50cmltKCkpLmZpbHRlcigodG9rZW4pID0+IHRva2VuLmxlbmd0aCA+IDApLm1hcCgodG9rZW4pID0+IHRoaXMuZm9ybWF0QWNjZXB0VG9rZW4odG9rZW4pKSkpLmZpbHRlcihCb29sZWFuKTsKICAgICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBpZiAoZm9ybWF0dGVkLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHJldHVybiBmb3JtYXR0ZWRbMF07CiAgICAgIH0KICAgICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggPT09IDIpIHsKICAgICAgICByZXR1cm4gYCR7Zm9ybWF0dGVkWzBdfSwgJHtmb3JtYXR0ZWRbMV19YDsKICAgICAgfQogICAgICByZXR1cm4gYCR7Zm9ybWF0dGVkLnNsaWNlKDAsIDIpLmpvaW4oIiwgIil9XHUyMDI2YDsKICAgIH0KICAgIGZvcm1hdEFjY2VwdFRva2VuKHRva2VuKSB7CiAgICAgIGlmICh0b2tlbiA9PT0gIiovKiIpIHsKICAgICAgICByZXR1cm4gIkFsbCBmaWxlcyI7CiAgICAgIH0KICAgICAgaWYgKHRva2VuLmVuZHNXaXRoKCIvKiIpKSB7CiAgICAgICAgY29uc3QgZmFtaWx5ID0gdG9rZW4uc3BsaXQoIi8iKVswXTsKICAgICAgICBpZiAoIWZhbWlseSkgewogICAgICAgICAgcmV0dXJuICJBbGwgZmlsZXMiOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYCR7ZmFtaWx5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7ZmFtaWx5LnNsaWNlKDEpfSBmaWxlc2A7CiAgICAgIH0KICAgICAgaWYgKHRva2VuLnN0YXJ0c1dpdGgoIi4iKSkgewogICAgICAgIHJldHVybiB0b2tlbi5zbGljZSgxKS50b1VwcGVyQ2FzZSgpOwogICAgICB9CiAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygicGRmIikpCiAgICAgICAgcmV0dXJuICJQREYiOwogICAgICBpZiAodG9rZW4uaW5jbHVkZXMoInppcCIpKQogICAgICAgIHJldHVybiAiWklQIjsKICAgICAgaWYgKHRva2VuLmluY2x1ZGVzKCJqc29uIikpCiAgICAgICAgcmV0dXJuICJKU09OIjsKICAgICAgaWYgKHRva2VuLmluY2x1ZGVzKCJtc3dvcmQiKSkKICAgICAgICByZXR1cm4gIkRPQyI7CiAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygid29yZHByb2Nlc3NpbmdtbCIpKQogICAgICAgIHJldHVybiAiRE9DWCI7CiAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygiZXhjZWwiKSkKICAgICAgICByZXR1cm4gIlhMUyI7CiAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygicHJlc2VudGF0aW9uIikpCiAgICAgICAgcmV0dXJuICJQUFQiOwogICAgICBjb25zdCBzZWdtZW50cyA9IHRva2VuLnNwbGl0KCIvIik7CiAgICAgIGNvbnN0IGxhc3RTZWdtZW50ID0gc2VnbWVudHMucG9wKCkgPz8gdG9rZW47CiAgICAgIHJldHVybiBsYXN0U2VnbWVudC50b1VwcGVyQ2FzZSgpOwogICAgfQogICAgYXR0YWNoTGlmZWN5Y2xlTGlzdGVuZXJzKCkgewogICAgICB0aGlzLnJlYmluZEludGVyYWN0aXZlRWxlbWVudHMoKTsKICAgIH0KICAgIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICB0aGlzLmF0dGFjaExpZmVjeWNsZUxpc3RlbmVycygpOwogICAgfQogICAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygidmFsdWUiKSkgewogICAgICAgIHZvaWQgdGhpcy52YWxpZGF0ZSgpOwogICAgICB9CiAgICAgIHRoaXMucmViaW5kSW50ZXJhY3RpdmVFbGVtZW50cygpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIHRoaXMuZGV0YWNoRHJvcExpc3RlbmVycygpOwogICAgICB0aGlzLnZhbHVlLmZvckVhY2goKGZpbGUpID0+IHRoaXMucmVsZWFzZVByZXZpZXcoZmlsZSkpOwogICAgICB0aGlzLnByZXZpZXdVcmxNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIH0KICAgIGFzeW5jIG9wZW5GaWxlU2VsZWN0b3IoKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuaXNMb2FkaW5nKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTsKICAgICAgY29uc3QgaW5wdXRGaWxlID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZmlsZS1pbnB1dCIpOwogICAgICBpZiAoIWlucHV0RmlsZSkgewogICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4gewogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgaWYgKCFpbnB1dEZpbGUuZmlsZXMgfHwgaW5wdXRGaWxlLmZpbGVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIiwgaGFuZGxlRm9jdXMpOwogICAgICAgIH0sIDMwMCk7CiAgICAgIH07CiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIGhhbmRsZUZvY3VzKTsKICAgICAgaW5wdXRGaWxlLmNsaWNrKCk7CiAgICB9CiAgICByZW1vdmVGaWxlKGZpbGUpIHsKICAgICAgY29uc3QgaW5kZXgyID0gdGhpcy52YWx1ZS5pbmRleE9mKGZpbGUpOwogICAgICBpZiAoaW5kZXgyID4gLTEpIHsKICAgICAgICB0aGlzLnJlbGVhc2VQcmV2aWV3KGZpbGUpOwogICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4MiwgMSk7CiAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCJ2YWx1ZSIpOwogICAgICAgIHZvaWQgdGhpcy52YWxpZGF0ZSgpOwogICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICB9CiAgICB9CiAgICBjbGVhckFsbCgpIHsKICAgICAgY29uc3QgZXhpc3RpbmdGaWxlcyA9IFsuLi50aGlzLnZhbHVlXTsKICAgICAgdGhpcy52YWx1ZSA9IFtdOwogICAgICBleGlzdGluZ0ZpbGVzLmZvckVhY2goKGZpbGUpID0+IHRoaXMucmVsZWFzZVByZXZpZXcoZmlsZSkpOwogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoInZhbHVlIik7CiAgICAgIHZvaWQgdGhpcy52YWxpZGF0ZSgpOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgdGhpcy5idXR0b25UZXh0ID0gIlNlbGVjdCBmaWxlcyI7CiAgICB9CiAgICBhc3luYyB1cGRhdGVWYWx1ZShldmVudEFyZykgewogICAgICBjb25zdCB0YXJnZXQgPSBldmVudEFyZy50YXJnZXQ7CiAgICAgIHRoaXMudmFsdWUgPSBBcnJheS5mcm9tKHRhcmdldC5maWxlcyA/PyBbXSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUuZm9yRWFjaCgoZmlsZSkgPT4gdGhpcy5yZWxlYXNlUHJldmlldyhmaWxlKSk7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgIGlmICh2YWx1ZTIubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuYnV0dG9uVGV4dCA9IHRoaXMubXVsdGlwbGUgPyAiQWRkIG1vcmUgZmlsZXMiIDogIlJlcGxhY2UgZmlsZSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5idXR0b25UZXh0ID0gIlNlbGVjdCBmaWxlcyI7CiAgICAgIH0KICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCJ2YWx1ZSIpOwogICAgICB2b2lkIHRoaXMudmFsaWRhdGUoKTsKICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIGFzeW5jIGFkZEZpbGVzKGZpbGVzKSB7CiAgICAgIGNvbnN0IGZpbGVzVG9BZGQgPSBbXTsKICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7CiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVGaWxlKGZpbGUpKSB7CiAgICAgICAgICBmaWxlc1RvQWRkLnB1c2goZmlsZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChmaWxlc1RvQWRkLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLm1heEZpbGVzID4gMCkgewogICAgICAgIGNvbnN0IHRvdGFsRmlsZXMgPSB0aGlzLnZhbHVlLmxlbmd0aCArIGZpbGVzVG9BZGQubGVuZ3RoOwogICAgICAgIGlmICh0b3RhbEZpbGVzID4gdGhpcy5tYXhGaWxlcykgewogICAgICAgICAgY29uc3QgYWxsb3dlZENvdW50ID0gdGhpcy5tYXhGaWxlcyAtIHRoaXMudmFsdWUubGVuZ3RoOwogICAgICAgICAgaWYgKGFsbG93ZWRDb3VudCA8PSAwKSB7CiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgTWF4aW11bSAke3RoaXMubWF4RmlsZXN9IGZpbGVzIGFsbG93ZWRgOwogICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9ICJpbnZhbGlkIjsKICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgZmlsZXNUb0FkZC5zcGxpY2UoYWxsb3dlZENvdW50KTsKICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgT25seSAke2FsbG93ZWRDb3VudH0gbW9yZSBmaWxlKHMpIGNhbiBiZSBhZGRlZGA7CiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9ICJ3YXJuIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIGZpbGVzVG9BZGQubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMudmFsdWUuZm9yRWFjaCgoZmlsZSkgPT4gdGhpcy5yZWxlYXNlUHJldmlldyhmaWxlKSk7CiAgICAgICAgdGhpcy52YWx1ZSA9IFtmaWxlc1RvQWRkWzBdXTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnZhbHVlLnB1c2goLi4uZmlsZXNUb0FkZCk7CiAgICAgIH0KICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICIiOwogICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9IG51bGw7CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgidmFsdWUiKTsKICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTsKICAgICAgaWYgKHRoaXMudmFsdWUubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuYnV0dG9uVGV4dCA9IHRoaXMubXVsdGlwbGUgPyAiQWRkIG1vcmUgZmlsZXMiIDogIlJlcGxhY2UgZmlsZSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5idXR0b25UZXh0ID0gIlNlbGVjdCBmaWxlcyI7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHZhbGlkYXRlKCkgewogICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gIiI7CiAgICAgIGlmICh0aGlzLnJlcXVpcmVkICYmIHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy52YWxpZGF0aW9uU3RhdGUgPSAiaW52YWxpZCI7CiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICJQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBmaWxlIjsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHRoaXMudmFsdWUpIHsKICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVGaWxlKGZpbGUpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMudmFsaWRhdGlvblN0YXRlID0gdGhpcy52YWx1ZS5sZW5ndGggPiAwID8gInZhbGlkIiA6IG51bGw7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyNyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0RmlsZXVwbG9hZDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2liYW50b29sc0A0LjUuMS9ub2RlX21vZHVsZXMvaWJhbnRvb2xzL2pzbmV4dC9pYmFudG9vbHMuanMKZnVuY3Rpb24gaXNWYWxpZElCQU4oaWJhbiwgdmFsaWRhdGlvbk9wdGlvbnMpIHsKICBpZiAodmFsaWRhdGlvbk9wdGlvbnMgPT09IHZvaWQgMCkgewogICAgdmFsaWRhdGlvbk9wdGlvbnMgPSB7IGFsbG93UVJJQkFOOiB0cnVlIH07CiAgfQogIGlmIChpYmFuID09PSB2b2lkIDAgfHwgaWJhbiA9PT0gbnVsbCkKICAgIHJldHVybiBmYWxzZTsKICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgiXlswLTldezJ9JCIsICIiKTsKICB2YXIgY291bnRyeUNvZGUgPSBpYmFuLnNsaWNlKDAsIDIpOwogIHZhciBzcGVjID0gY291bnRyeVNwZWNzW2NvdW50cnlDb2RlXTsKICBpZiAoc3BlYyA9PT0gdm9pZCAwIHx8IHNwZWMuYmJhbl9yZWdleHAgPT09IHZvaWQgMCB8fCBzcGVjLmJiYW5fcmVnZXhwID09PSBudWxsIHx8IHNwZWMuY2hhcnMgPT09IHZvaWQgMCkKICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gc3BlYy5jaGFycyA9PT0gaWJhbi5sZW5ndGggJiYgcmVnLnRlc3QoaWJhbi5zbGljZSgyLCA0KSkgJiYgaXNWYWxpZEJCQU4oaWJhbi5zbGljZSg0KSwgY291bnRyeUNvZGUpICYmIGlzVmFsaWRJQkFOQ2hlY2tzdW0oaWJhbikgJiYgKHZhbGlkYXRpb25PcHRpb25zLmFsbG93UVJJQkFOIHx8ICFpc1FSSUJBTihpYmFuKSk7Cn0KdmFyIFZhbGlkYXRpb25FcnJvcnNJQkFOOwooZnVuY3Rpb24oVmFsaWRhdGlvbkVycm9yc0lCQU4yKSB7CiAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiTm9JQkFOUHJvdmlkZWQiXSA9IDBdID0gIk5vSUJBTlByb3ZpZGVkIjsKICBWYWxpZGF0aW9uRXJyb3JzSUJBTjJbVmFsaWRhdGlvbkVycm9yc0lCQU4yWyJOb0lCQU5Db3VudHJ5Il0gPSAxXSA9ICJOb0lCQU5Db3VudHJ5IjsKICBWYWxpZGF0aW9uRXJyb3JzSUJBTjJbVmFsaWRhdGlvbkVycm9yc0lCQU4yWyJXcm9uZ0JCQU5MZW5ndGgiXSA9IDJdID0gIldyb25nQkJBTkxlbmd0aCI7CiAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiV3JvbmdCQkFORm9ybWF0Il0gPSAzXSA9ICJXcm9uZ0JCQU5Gb3JtYXQiOwogIFZhbGlkYXRpb25FcnJvcnNJQkFOMltWYWxpZGF0aW9uRXJyb3JzSUJBTjJbIkNoZWNrc3VtTm90TnVtYmVyIl0gPSA0XSA9ICJDaGVja3N1bU5vdE51bWJlciI7CiAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiV3JvbmdJQkFOQ2hlY2tzdW0iXSA9IDVdID0gIldyb25nSUJBTkNoZWNrc3VtIjsKICBWYWxpZGF0aW9uRXJyb3JzSUJBTjJbVmFsaWRhdGlvbkVycm9yc0lCQU4yWyJXcm9uZ0FjY291bnRCYW5rQnJhbmNoQ2hlY2tzdW0iXSA9IDZdID0gIldyb25nQWNjb3VudEJhbmtCcmFuY2hDaGVja3N1bSI7CiAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiUVJJQkFOTm90QWxsb3dlZCJdID0gN10gPSAiUVJJQkFOTm90QWxsb3dlZCI7Cn0pKFZhbGlkYXRpb25FcnJvcnNJQkFOIHx8IChWYWxpZGF0aW9uRXJyb3JzSUJBTiA9IHt9KSk7CmZ1bmN0aW9uIHZhbGlkYXRlSUJBTihpYmFuLCB2YWxpZGF0aW9uT3B0aW9ucykgewogIGlmICh2YWxpZGF0aW9uT3B0aW9ucyA9PT0gdm9pZCAwKSB7CiAgICB2YWxpZGF0aW9uT3B0aW9ucyA9IHsgYWxsb3dRUklCQU46IHRydWUgfTsKICB9CiAgdmFyIHJlc3VsdCA9IHsgZXJyb3JDb2RlczogW10sIHZhbGlkOiB0cnVlIH07CiAgaWYgKGliYW4gIT09IHZvaWQgMCAmJiBpYmFuICE9PSBudWxsICYmIGliYW4gIT09ICIiKSB7CiAgICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1tpYmFuLnNsaWNlKDAsIDIpXTsKICAgIGlmICghc3BlYyB8fCAhKHNwZWMuYmJhbl9yZWdleHAgfHwgc3BlYy5jaGFycykpIHsKICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uTm9JQkFOQ291bnRyeSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBpZiAoc3BlYyAmJiBzcGVjLmNoYXJzICYmIHNwZWMuY2hhcnMgIT09IGliYW4ubGVuZ3RoKSB7CiAgICAgIHJlc3VsdC52YWxpZCA9IGZhbHNlOwogICAgICByZXN1bHQuZXJyb3JDb2Rlcy5wdXNoKFZhbGlkYXRpb25FcnJvcnNJQkFOLldyb25nQkJBTkxlbmd0aCk7CiAgICB9CiAgICBpZiAoc3BlYyAmJiBzcGVjLmJiYW5fcmVnZXhwICYmICFjaGVja0Zvcm1hdEJCQU4oaWJhbi5zbGljZSg0KSwgc3BlYy5iYmFuX3JlZ2V4cCkpIHsKICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uV3JvbmdCQkFORm9ybWF0KTsKICAgIH0KICAgIGlmIChzcGVjICYmIHNwZWMuYmJhbl92YWxpZGF0aW9uX2Z1bmMgJiYgIXNwZWMuYmJhbl92YWxpZGF0aW9uX2Z1bmMoaWJhbi5zbGljZSg0KSkpIHsKICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uV3JvbmdBY2NvdW50QmFua0JyYW5jaENoZWNrc3VtKTsKICAgIH0KICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKCJeWzAtOV17Mn0kIiwgIiIpOwogICAgaWYgKCFyZWcudGVzdChpYmFuLnNsaWNlKDIsIDQpKSkgewogICAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgICAgcmVzdWx0LmVycm9yQ29kZXMucHVzaChWYWxpZGF0aW9uRXJyb3JzSUJBTi5DaGVja3N1bU5vdE51bWJlcik7CiAgICB9CiAgICBpZiAocmVzdWx0LmVycm9yQ29kZXMuaW5kZXhPZihWYWxpZGF0aW9uRXJyb3JzSUJBTi5Xcm9uZ0JCQU5Gb3JtYXQpICE9PSAtMSB8fCAhaXNWYWxpZElCQU5DaGVja3N1bShpYmFuKSkgewogICAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgICAgcmVzdWx0LmVycm9yQ29kZXMucHVzaChWYWxpZGF0aW9uRXJyb3JzSUJBTi5Xcm9uZ0lCQU5DaGVja3N1bSk7CiAgICB9CiAgICBpZiAoIXZhbGlkYXRpb25PcHRpb25zLmFsbG93UVJJQkFOICYmIGlzUVJJQkFOKGliYW4pKSB7CiAgICAgIHJlc3VsdC52YWxpZCA9IGZhbHNlOwogICAgICByZXN1bHQuZXJyb3JDb2Rlcy5wdXNoKFZhbGlkYXRpb25FcnJvcnNJQkFOLlFSSUJBTk5vdEFsbG93ZWQpOwogICAgfQogIH0gZWxzZSB7CiAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uTm9JQkFOUHJvdmlkZWQpOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIGlzVmFsaWRCQkFOKGJiYW4sIGNvdW50cnlDb2RlKSB7CiAgaWYgKGJiYW4gPT09IHZvaWQgMCB8fCBiYmFuID09PSBudWxsIHx8IGNvdW50cnlDb2RlID09PSB2b2lkIDAgfHwgY291bnRyeUNvZGUgPT09IG51bGwpCiAgICByZXR1cm4gZmFsc2U7CiAgdmFyIHNwZWMgPSBjb3VudHJ5U3BlY3NbY291bnRyeUNvZGVdOwogIGlmIChzcGVjID09PSB2b2lkIDAgfHwgc3BlYyA9PT0gbnVsbCB8fCBzcGVjLmJiYW5fcmVnZXhwID09PSB2b2lkIDAgfHwgc3BlYy5iYmFuX3JlZ2V4cCA9PT0gbnVsbCB8fCBzcGVjLmNoYXJzID09PSB2b2lkIDAgfHwgc3BlYy5jaGFycyA9PT0gbnVsbCkKICAgIHJldHVybiBmYWxzZTsKICBpZiAoc3BlYy5jaGFycyAtIDQgPT09IGJiYW4ubGVuZ3RoICYmIGNoZWNrRm9ybWF0QkJBTihiYmFuLCBzcGVjLmJiYW5fcmVnZXhwKSkgewogICAgaWYgKHNwZWMuYmJhbl92YWxpZGF0aW9uX2Z1bmMpIHsKICAgICAgcmV0dXJuIHNwZWMuYmJhbl92YWxpZGF0aW9uX2Z1bmMoYmJhbi5yZXBsYWNlKC9bXHMuXSsvZywgIiIpKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gaXNTRVBBQ291bnRyeShjb3VudHJ5Q29kZSkgewogIGlmIChjb3VudHJ5Q29kZSAhPT0gdm9pZCAwICYmIGNvdW50cnlDb2RlICE9PSBudWxsKSB7CiAgICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1tjb3VudHJ5Q29kZV07CiAgICBpZiAoc3BlYyAhPT0gdm9pZCAwKSB7CiAgICAgIHJldHVybiBzcGVjLlNFUEEgPyBzcGVjLlNFUEEgOiBmYWxzZTsKICAgIH0KICB9CiAgcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIGlzUVJJQkFOKGliYW4pIHsKICBpZiAoaWJhbiA9PT0gdm9pZCAwIHx8IGliYW4gPT09IG51bGwpCiAgICByZXR1cm4gZmFsc2U7CiAgdmFyIGNvdW50cnlDb2RlID0gaWJhbi5zbGljZSgwLCAyKTsKICB2YXIgUVJJQkFOQ291bnRyaWVzID0gWyJMSSIsICJDSCJdOwogIGlmICghUVJJQkFOQ291bnRyaWVzLmluY2x1ZGVzKGNvdW50cnlDb2RlKSkKICAgIHJldHVybiBmYWxzZTsKICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgiXjNbMC0xXXsxfVswLTldezN9JCIsICIiKTsKICByZXR1cm4gcmVnLnRlc3QoaWJhbi5zbGljZSg0LCA5KSk7Cn0KZnVuY3Rpb24gY29tcG9zZUlCQU4ocGFyYW1zMikgewogIHZhciBmb3JtYXRlZF9iYmFuID0gZWxlY3Ryb25pY0Zvcm1hdElCQU4ocGFyYW1zMi5iYmFuKSB8fCAiIjsKICBpZiAocGFyYW1zMi5jb3VudHJ5Q29kZSA9PT0gbnVsbCB8fCBwYXJhbXMyLmNvdW50cnlDb2RlID09PSB2b2lkIDApIHsKICAgIHJldHVybiBudWxsOwogIH0KICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1twYXJhbXMyLmNvdW50cnlDb2RlXTsKICBpZiAoZm9ybWF0ZWRfYmJhbiAhPT0gIiIgJiYgc3BlYyAhPT0gdm9pZCAwICYmIHNwZWMuY2hhcnMgJiYgc3BlYy5jaGFycyAhPT0gbnVsbCAmJiBzcGVjLmNoYXJzID09PSBmb3JtYXRlZF9iYmFuLmxlbmd0aCArIDQgJiYgc3BlYy5iYmFuX3JlZ2V4cCAmJiBzcGVjLmJiYW5fcmVnZXhwICE9PSBudWxsICYmIGNoZWNrRm9ybWF0QkJBTihmb3JtYXRlZF9iYmFuLCBzcGVjLmJiYW5fcmVnZXhwKSkgewogICAgdmFyIGNoZWNrc29tID0gbW9kOTcxMEliYW4ocGFyYW1zMi5jb3VudHJ5Q29kZSArICIwMCIgKyBmb3JtYXRlZF9iYmFuKTsKICAgIHJldHVybiBwYXJhbXMyLmNvdW50cnlDb2RlICsgKCIwIiArICg5OCAtIGNoZWNrc29tKSkuc2xpY2UoLTIpICsgZm9ybWF0ZWRfYmJhbjsKICB9CiAgcmV0dXJuIG51bGw7Cn0KZnVuY3Rpb24gZXh0cmFjdElCQU4oaWJhbikgewogIHZhciByZXN1bHQgPSB7fTsKICB2YXIgZUZvcm1hdElCQU4gPSBlbGVjdHJvbmljRm9ybWF0SUJBTihpYmFuKTsKICByZXN1bHQuaWJhbiA9IGVGb3JtYXRJQkFOIHx8IGliYW47CiAgaWYgKCEhZUZvcm1hdElCQU4gJiYgaXNWYWxpZElCQU4oZUZvcm1hdElCQU4pKSB7CiAgICByZXN1bHQuYmJhbiA9IGVGb3JtYXRJQkFOLnNsaWNlKDQpOwogICAgcmVzdWx0LmNvdW50cnlDb2RlID0gZUZvcm1hdElCQU4uc2xpY2UoMCwgMik7CiAgICByZXN1bHQudmFsaWQgPSB0cnVlOwogICAgdmFyIHNwZWMgPSBjb3VudHJ5U3BlY3NbcmVzdWx0LmNvdW50cnlDb2RlXTsKICAgIGlmIChzcGVjLmFjY291bnRfaW5kZW50aWZpZXIpIHsKICAgICAgdmFyIGFjID0gc3BlYy5hY2NvdW50X2luZGVudGlmaWVyLnNwbGl0KCItIik7CiAgICAgIHZhciBzdGFydGluZyA9IHBhcnNlSW50KGFjWzBdKTsKICAgICAgdmFyIGVuZGluZyA9IHBhcnNlSW50KGFjWzFdKTsKICAgICAgcmVzdWx0LmFjY291bnROdW1iZXIgPSByZXN1bHQuaWJhbi5zbGljZShzdGFydGluZywgZW5kaW5nICsgMSk7CiAgICB9CiAgICBpZiAoc3BlYy5iYW5rX2lkZW50aWZpZXIpIHsKICAgICAgdmFyIGFjID0gc3BlYy5iYW5rX2lkZW50aWZpZXIuc3BsaXQoIi0iKTsKICAgICAgdmFyIHN0YXJ0aW5nID0gcGFyc2VJbnQoYWNbMF0pOwogICAgICB2YXIgZW5kaW5nID0gcGFyc2VJbnQoYWNbMV0pOwogICAgICByZXN1bHQuYmFua0lkZW50aWZpZXIgPSByZXN1bHQuYmJhbi5zbGljZShzdGFydGluZywgZW5kaW5nICsgMSk7CiAgICB9CiAgICBpZiAoc3BlYy5icmFuY2hfaW5kZW50aWZpZXIpIHsKICAgICAgdmFyIGFjID0gc3BlYy5icmFuY2hfaW5kZW50aWZpZXIuc3BsaXQoIi0iKTsKICAgICAgdmFyIHN0YXJ0aW5nID0gcGFyc2VJbnQoYWNbMF0pOwogICAgICB2YXIgZW5kaW5nID0gcGFyc2VJbnQoYWNbMV0pOwogICAgICByZXN1bHQuYnJhbmNoSWRlbnRpZmllciA9IHJlc3VsdC5iYmFuLnNsaWNlKHN0YXJ0aW5nLCBlbmRpbmcgKyAxKTsKICAgIH0KICB9IGVsc2UgewogICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gY2hlY2tGb3JtYXRCQkFOKGJiYW4sIGJmb3JtYXQpIHsKICB2YXIgcmVnID0gbmV3IFJlZ0V4cChiZm9ybWF0LCAiIik7CiAgcmV0dXJuIHJlZy50ZXN0KGJiYW4pOwp9CmZ1bmN0aW9uIGVsZWN0cm9uaWNGb3JtYXRJQkFOKGliYW4pIHsKICBpZiAodHlwZW9mIGliYW4gIT09ICJzdHJpbmciKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcmV0dXJuIGliYW4ucmVwbGFjZSgvWy1cIF0vZywgIiIpLnRvVXBwZXJDYXNlKCk7Cn0KZnVuY3Rpb24gZnJpZW5kbHlGb3JtYXRJQkFOKGliYW4sIHNlcGFyYXRvcikgewogIGlmICh0eXBlb2YgaWJhbiAhPT0gInN0cmluZyIpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBpZiAoc2VwYXJhdG9yID09PSB2b2lkIDAgfHwgc2VwYXJhdG9yID09PSBudWxsKSB7CiAgICBzZXBhcmF0b3IgPSAiICI7CiAgfQogIHZhciBlbGVjdHJvbmljX2liYW4gPSBlbGVjdHJvbmljRm9ybWF0SUJBTihpYmFuKTsKICBpZiAoZWxlY3Ryb25pY19pYmFuID09PSBudWxsKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcmV0dXJuIGVsZWN0cm9uaWNfaWJhbi5yZXBsYWNlKC8oLns0fSkoPyEkKS9nLCAiJDEiICsgc2VwYXJhdG9yKTsKfQpmdW5jdGlvbiBpc1ZhbGlkSUJBTkNoZWNrc3VtKGliYW4pIHsKICB2YXIgY291bnRyeUNvZGUgPSBpYmFuLnNsaWNlKDAsIDIpOwogIHZhciBwcm92aWRlZENoZWNrc3VtID0gcGFyc2VJbnQoaWJhbi5zbGljZSgyLCA0KSwgMTApOwogIHZhciBiYmFuID0gaWJhbi5zbGljZSg0KTsKICB2YXIgdmFsaWRhdGlvblN0cmluZyA9IHJlcGxhY2VDaGFyYXRlcldpdGhDb2RlKCIiLmNvbmNhdChiYmFuKS5jb25jYXQoY291bnRyeUNvZGUsICIwMCIpKTsKICB2YXIgcmVzdCA9IG1vZDk3MTAodmFsaWRhdGlvblN0cmluZyk7CiAgcmV0dXJuIDk4IC0gcmVzdCA9PT0gcHJvdmlkZWRDaGVja3N1bTsKfQpmdW5jdGlvbiByZXBsYWNlQ2hhcmF0ZXJXaXRoQ29kZShzdHIpIHsKICByZXR1cm4gc3RyLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oYzExKSB7CiAgICB2YXIgY29kZTQgPSBjMTEuY2hhckNvZGVBdCgwKTsKICAgIHJldHVybiBjb2RlNCA+PSA2NSA/IChjb2RlNCAtIDU1KS50b1N0cmluZygpIDogYzExOwogIH0pLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIG1vZDk3MTBJYmFuKGliYW4pIHsKICByZXR1cm4gbW9kOTcxMChyZXBsYWNlQ2hhcmF0ZXJXaXRoQ29kZShpYmFuLnNsaWNlKDQpICsgaWJhbi5zbGljZSgwLCA0KSkpOwp9CmZ1bmN0aW9uIGdldENvdW50cnlTcGVjaWZpY2F0aW9ucygpIHsKICB2YXIgY291bnR5TWFwID0ge307CiAgZm9yICh2YXIgY291bnR5Q29kZSBpbiBjb3VudHJ5U3BlY3MpIHsKICAgIHZhciBjb3VudHkgPSBjb3VudHJ5U3BlY3NbY291bnR5Q29kZV07CiAgICBjb3VudHlNYXBbY291bnR5Q29kZV0gPSB7CiAgICAgIGNoYXJzOiBjb3VudHkuY2hhcnMgfHwgbnVsbCwKICAgICAgYmJhbl9yZWdleHA6IGNvdW50eS5iYmFuX3JlZ2V4cCB8fCBudWxsLAogICAgICBJQkFOUmVnaXN0cnk6IGNvdW50eS5JQkFOUmVnaXN0cnkgfHwgZmFsc2UsCiAgICAgIFNFUEE6IGNvdW50eS5TRVBBIHx8IGZhbHNlCiAgICB9OwogIH0KICByZXR1cm4gY291bnR5TWFwOwp9CmZ1bmN0aW9uIGlzVmFsaWRCSUMoYmljKSB7CiAgaWYgKCFiaWMpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgdmFyIHJlZyA9IG5ldyBSZWdFeHAoIl5bYS16QS1aXXs2fVthLXpBLVowLTldezJ9KFthLXpBLVowLTldezN9KT8kIiwgIiIpOwogIHZhciBzcGVjID0gY291bnRyeVNwZWNzW2JpYy50b1VwcGVyQ2FzZSgpLnNsaWNlKDQsIDYpXTsKICByZXR1cm4gcmVnLnRlc3QoYmljKSAmJiBzcGVjICE9PSB2b2lkIDA7Cn0KdmFyIFZhbGlkYXRpb25FcnJvcnNCSUM7CihmdW5jdGlvbihWYWxpZGF0aW9uRXJyb3JzQklDMikgewogIFZhbGlkYXRpb25FcnJvcnNCSUMyW1ZhbGlkYXRpb25FcnJvcnNCSUMyWyJOb0JJQ1Byb3ZpZGVkIl0gPSAwXSA9ICJOb0JJQ1Byb3ZpZGVkIjsKICBWYWxpZGF0aW9uRXJyb3JzQklDMltWYWxpZGF0aW9uRXJyb3JzQklDMlsiTm9CSUNDb3VudHJ5Il0gPSAxXSA9ICJOb0JJQ0NvdW50cnkiOwogIFZhbGlkYXRpb25FcnJvcnNCSUMyW1ZhbGlkYXRpb25FcnJvcnNCSUMyWyJXcm9uZ0JJQ0Zvcm1hdCJdID0gMl0gPSAiV3JvbmdCSUNGb3JtYXQiOwp9KShWYWxpZGF0aW9uRXJyb3JzQklDIHx8IChWYWxpZGF0aW9uRXJyb3JzQklDID0ge30pKTsKZnVuY3Rpb24gdmFsaWRhdGVCSUMoYmljKSB7CiAgdmFyIHJlc3VsdCA9IHsgZXJyb3JDb2RlczogW10sIHZhbGlkOiB0cnVlIH07CiAgaWYgKGJpYyAhPT0gdm9pZCAwICYmIGJpYyAhPT0gbnVsbCAmJiBiaWMgIT09ICIiKSB7CiAgICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1tiaWMudG9VcHBlckNhc2UoKS5zbGljZSg0LCA2KV07CiAgICBpZiAoc3BlYyA9PT0gdm9pZCAwKSB7CiAgICAgIHJlc3VsdC52YWxpZCA9IGZhbHNlOwogICAgICByZXN1bHQuZXJyb3JDb2Rlcy5wdXNoKFZhbGlkYXRpb25FcnJvcnNCSUMuTm9CSUNDb3VudHJ5KTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKCJeW2EtekEtWl17Nn1bYS16QS1aMC05XXsyfShbYS16QS1aMC05XXszfSk/JCIsICIiKTsKICAgICAgaWYgKCFyZWcudGVzdChiaWMpKSB7CiAgICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgICAgcmVzdWx0LmVycm9yQ29kZXMucHVzaChWYWxpZGF0aW9uRXJyb3JzQklDLldyb25nQklDRm9ybWF0KTsKICAgICAgfQogICAgfQogIH0gZWxzZSB7CiAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0JJQy5Ob0JJQ1Byb3ZpZGVkKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBleHRyYWN0QklDKGlucHV0QmljKSB7CiAgdmFyIHJlc3VsdCA9IHt9OwogIHZhciBiaWMgPSBpbnB1dEJpYy50b1VwcGVyQ2FzZSgpOwogIGlmIChpc1ZhbGlkQklDKGJpYykpIHsKICAgIHJlc3VsdC5iYW5rQ29kZSA9IGJpYy5zbGljZSgwLCA0KTsKICAgIHJlc3VsdC5jb3VudHJ5Q29kZSA9IGJpYy5zbGljZSg0LCA2KTsKICAgIHJlc3VsdC5sb2NhdGlvbkNvZGUgPSBiaWMuc2xpY2UoNiwgOCk7CiAgICByZXN1bHQudGVzdEJJQyA9IHJlc3VsdC5sb2NhdGlvbkNvZGVbMV0gPT09ICIwIiA/IHRydWUgOiBmYWxzZTsKICAgIHJlc3VsdC5icmFuY2hDb2RlID0gYmljLmxlbmd0aCA+IDggPyBiaWMuc2xpY2UoOCkgOiBudWxsOwogICAgcmVzdWx0LnZhbGlkID0gdHJ1ZTsKICB9IGVsc2UgewogICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KdmFyIGNoZWNrTm9yd2F5QkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICB2YXIgd2VpZ2h0cyA9IFs1LCA0LCAzLCAyLCA3LCA2LCA1LCA0LCAzLCAyXTsKICB2YXIgYmJhbldpdGhvdXRTcGFjZXNBbmRQZXJpb2RzID0gYmJhbi5yZXBsYWNlKC9bXHMuXSsvZywgIiIpOwogIHZhciBjb250cm9sRGlnaXQgPSBwYXJzZUludChiYmFuV2l0aG91dFNwYWNlc0FuZFBlcmlvZHMuY2hhckF0KDEwKSwgMTApOwogIHZhciBiYmFuV2l0aG91dENvbnRyb2xEaWdpdCA9IGJiYW5XaXRob3V0U3BhY2VzQW5kUGVyaW9kcy5zdWJzdHJpbmcoMCwgMTApOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IDEwOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KGJiYW5XaXRob3V0Q29udHJvbERpZ2l0LmNoYXJBdChpbmRleDIpLCAxMCkgKiB3ZWlnaHRzW2luZGV4Ml07CiAgfQogIHZhciByZW1haW5kZXIgPSBzdW0gJSAxMTsKICByZXR1cm4gY29udHJvbERpZ2l0ID09PSAocmVtYWluZGVyID09PSAwID8gMCA6IDExIC0gcmVtYWluZGVyKTsKfTsKdmFyIGNoZWNrQmVsZ2lhbkJCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgdmFyIHN0cmlwcGVkID0gYmJhbi5yZXBsYWNlKC9bXHMuXSsvZywgIiIpOwogIHZhciBjaGVja2luZ1BhcnQgPSBwYXJzZUludChzdHJpcHBlZC5zdWJzdHJpbmcoMCwgc3RyaXBwZWQubGVuZ3RoIC0gMiksIDEwKTsKICB2YXIgY2hlY2tzdW0gPSBwYXJzZUludChzdHJpcHBlZC5zdWJzdHJpbmcoc3RyaXBwZWQubGVuZ3RoIC0gMiwgc3RyaXBwZWQubGVuZ3RoKSwgMTApOwogIHZhciByZW1haW5kZXIgPSBjaGVja2luZ1BhcnQgJSA5NyA9PT0gMCA/IDk3IDogY2hlY2tpbmdQYXJ0ICUgOTc7CiAgcmV0dXJuIHJlbWFpbmRlciA9PT0gY2hlY2tzdW07Cn07CnZhciBtb2Q5NzEwID0gZnVuY3Rpb24odmFsaWRhdGlvblN0cmluZykgewogIHdoaWxlICh2YWxpZGF0aW9uU3RyaW5nLmxlbmd0aCA+IDIpIHsKICAgIHZhciBwYXJ0ID0gdmFsaWRhdGlvblN0cmluZy5zbGljZSgwLCA2KTsKICAgIHZhciBwYXJ0SW50ID0gcGFyc2VJbnQocGFydCwgMTApOwogICAgaWYgKGlzTmFOKHBhcnRJbnQpKSB7CiAgICAgIHJldHVybiBOYU47CiAgICB9CiAgICB2YWxpZGF0aW9uU3RyaW5nID0gcGFydEludCAlIDk3ICsgdmFsaWRhdGlvblN0cmluZy5zbGljZShwYXJ0Lmxlbmd0aCk7CiAgfQogIHJldHVybiBwYXJzZUludCh2YWxpZGF0aW9uU3RyaW5nLCAxMCkgJSA5NzsKfTsKdmFyIGNoZWNrTW9kOTcxMEJCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgdmFyIHN0cmlwcGVkID0gYmJhbi5yZXBsYWNlKC9bXHMuXSsvZywgIiIpOwogIHZhciByZW1pbmRlciA9IG1vZDk3MTAoc3RyaXBwZWQpOwogIHJldHVybiByZW1pbmRlciA9PT0gMTsKfTsKdmFyIGNoZWNrUG9sYW5kQkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICB2YXIgd2VpZ2h0cyA9IFszLCA5LCA3LCAxLCAzLCA5LCA3XTsKICB2YXIgY29udHJvbERpZ2l0ID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoNyksIDEwKTsKICB2YXIgdG9DaGVjayA9IGJiYW4uc3Vic3RyaW5nKDAsIDcpOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IDc7IGluZGV4MisrKSB7CiAgICBzdW0gKz0gcGFyc2VJbnQodG9DaGVjay5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c1tpbmRleDJdOwogIH0KICB2YXIgcmVtYWluZGVyID0gc3VtICUgMTA7CiAgcmV0dXJuIGNvbnRyb2xEaWdpdCA9PT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiAxMCAtIHJlbWFpbmRlcik7Cn07CnZhciBjaGVja1NwYWluQkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICB2YXIgd2VpZ2h0c0JhbmtCcmFuY2ggPSBbNCwgOCwgNSwgMTAsIDksIDcsIDMsIDZdOwogIHZhciB3ZWlnaHRzQWNjb3VudCA9IFsxLCAyLCA0LCA4LCA1LCAxMCwgOSwgNywgMywgNl07CiAgdmFyIGNvbnRyb2xCYW5rQnJhbmNoID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoOCksIDEwKTsKICB2YXIgY29udHJvbEFjY291bnQgPSBwYXJzZUludChiYmFuLmNoYXJBdCg5KSwgMTApOwogIHZhciBiYW5rQnJhbmNoID0gYmJhbi5zdWJzdHJpbmcoMCwgOCk7CiAgdmFyIGFjY291bnQgPSBiYmFuLnN1YnN0cmluZygxMCwgMjApOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IDg7IGluZGV4MisrKSB7CiAgICBzdW0gKz0gcGFyc2VJbnQoYmFua0JyYW5jaC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c0JhbmtCcmFuY2hbaW5kZXgyXTsKICB9CiAgdmFyIHJlbWFpbmRlciA9IHN1bSAlIDExOwogIGlmIChjb250cm9sQmFua0JyYW5jaCAhPT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiByZW1haW5kZXIgPT09IDEgPyAxIDogMTEgLSByZW1haW5kZXIpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHN1bSA9IDA7CiAgZm9yICh2YXIgaW5kZXgyID0gMDsgaW5kZXgyIDwgMTA7IGluZGV4MisrKSB7CiAgICBzdW0gKz0gcGFyc2VJbnQoYWNjb3VudC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c0FjY291bnRbaW5kZXgyXTsKICB9CiAgcmVtYWluZGVyID0gc3VtICUgMTE7CiAgcmV0dXJuIGNvbnRyb2xBY2NvdW50ID09PSAocmVtYWluZGVyID09PSAwID8gMCA6IHJlbWFpbmRlciA9PT0gMSA/IDEgOiAxMSAtIHJlbWFpbmRlcik7Cn07CnZhciBjaGVja01vZDExMTAgPSBmdW5jdGlvbih0b0NoZWNrLCBjb250cm9sKSB7CiAgdmFyIG5yID0gMTA7CiAgZm9yICh2YXIgaW5kZXgyID0gMDsgaW5kZXgyIDwgdG9DaGVjay5sZW5ndGg7IGluZGV4MisrKSB7CiAgICBuciArPSBwYXJzZUludCh0b0NoZWNrLmNoYXJBdChpbmRleDIpLCAxMCk7CiAgICBpZiAobnIgJSAxMCAhPT0gMCkgewogICAgICBuciA9IG5yICUgMTA7CiAgICB9CiAgICBuciA9IG5yICogMjsKICAgIG5yID0gbnIgJSAxMTsKICB9CiAgcmV0dXJuIGNvbnRyb2wgPT09ICgxMSAtIG5yID09PSAxMCA/IDAgOiAxMSAtIG5yKTsKfTsKdmFyIGNoZWNrQ3JvYXRpYW5CQkFOID0gZnVuY3Rpb24oYmJhbikgewogIHZhciBjb250cm9sQmFua0JyYW5jaCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDYpLCAxMCk7CiAgdmFyIGNvbnRyb2xBY2NvdW50ID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoMTYpLCAxMCk7CiAgdmFyIGJhbmtCcmFuY2ggPSBiYmFuLnN1YnN0cmluZygwLCA2KTsKICB2YXIgYWNjb3VudCA9IGJiYW4uc3Vic3RyaW5nKDcsIDE2KTsKICByZXR1cm4gY2hlY2tNb2QxMTEwKGJhbmtCcmFuY2gsIGNvbnRyb2xCYW5rQnJhbmNoKSAmJiBjaGVja01vZDExMTAoYWNjb3VudCwgY29udHJvbEFjY291bnQpOwp9Owp2YXIgY2hlY2tDemVjaEFuZFNsb3Zha0JCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgdmFyIHdlaWdodHNQcmVmaXggPSBbMTAsIDUsIDgsIDQsIDIsIDFdOwogIHZhciB3ZWlnaHRzU3VmZml4ID0gWzYsIDMsIDcsIDksIDEwLCA1LCA4LCA0LCAyLCAxXTsKICB2YXIgY29udHJvbFByZWZpeCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDkpLCAxMCk7CiAgdmFyIGNvbnRyb2xTdWZmaXggPSBwYXJzZUludChiYmFuLmNoYXJBdCgxOSksIDEwKTsKICB2YXIgcHJlZml4NCA9IGJiYW4uc3Vic3RyaW5nKDQsIDkpOwogIHZhciBzdWZmaXggPSBiYmFuLnN1YnN0cmluZygxMCwgMTkpOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHByZWZpeDQubGVuZ3RoOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KHByZWZpeDQuY2hhckF0KGluZGV4MiksIDEwKSAqIHdlaWdodHNQcmVmaXhbaW5kZXgyXTsKICB9CiAgdmFyIHJlbWFpbmRlciA9IHN1bSAlIDExOwogIGlmIChjb250cm9sUHJlZml4ICE9PSAocmVtYWluZGVyID09PSAwID8gMCA6IHJlbWFpbmRlciA9PT0gMSA/IDEgOiAxMSAtIHJlbWFpbmRlcikpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgc3VtID0gMDsKICBmb3IgKHZhciBpbmRleDIgPSAwOyBpbmRleDIgPCBzdWZmaXgubGVuZ3RoOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KHN1ZmZpeC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c1N1ZmZpeFtpbmRleDJdOwogIH0KICByZW1haW5kZXIgPSBzdW0gJSAxMTsKICByZXR1cm4gY29udHJvbFN1ZmZpeCA9PT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiByZW1haW5kZXIgPT09IDEgPyAxIDogMTEgLSByZW1haW5kZXIpOwp9Owp2YXIgY2hlY2tFc3RvbmlhbkJCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgdmFyIHdlaWdodHMgPSBbNywgMSwgMywgNywgMSwgMywgNywgMSwgMywgNywgMSwgMywgN107CiAgdmFyIGNvbnRyb2xEaWdpdCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDE1KSwgMTApOwogIHZhciB0b0NoZWNrID0gYmJhbi5zdWJzdHJpbmcoMiwgMTUpOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHRvQ2hlY2subGVuZ3RoOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KHRvQ2hlY2suY2hhckF0KGluZGV4MiksIDEwKSAqIHdlaWdodHNbaW5kZXgyXTsKICB9CiAgdmFyIHJlbWFpbmRlciA9IHN1bSAlIDEwOwogIHJldHVybiBjb250cm9sRGlnaXQgPT09IChyZW1haW5kZXIgPT09IDAgPyAwIDogMTAgLSByZW1haW5kZXIpOwp9Owp2YXIgY2hlY2tGcmVuY2hCQkFOID0gZnVuY3Rpb24oYmJhbikgewogIHZhciBzdHJpcHBlZCA9IGJiYW4ucmVwbGFjZSgvW1xzLl0rL2csICIiKTsKICB2YXIgbm9ybWFsaXplZCA9IEFycmF5LmZyb20oc3RyaXBwZWQpOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHN0cmlwcGVkLmxlbmd0aDsgaW5kZXgyKyspIHsKICAgIHZhciBjMTEgPSBub3JtYWxpemVkW2luZGV4Ml0uY2hhckNvZGVBdCgwKTsKICAgIGlmIChjMTEgPj0gNjUpIHsKICAgICAgc3dpdGNoIChjMTEpIHsKICAgICAgICBjYXNlIDY1OgogICAgICAgIGNhc2UgNzQ6CiAgICAgICAgICBub3JtYWxpemVkW2luZGV4Ml0gPSAiMSI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDY2OgogICAgICAgIGNhc2UgNzU6CiAgICAgICAgY2FzZSA4MzoKICAgICAgICAgIG5vcm1hbGl6ZWRbaW5kZXgyXSA9ICIyIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNjc6CiAgICAgICAgY2FzZSA3NjoKICAgICAgICBjYXNlIDg0OgogICAgICAgICAgbm9ybWFsaXplZFtpbmRleDJdID0gIjMiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA2ODoKICAgICAgICBjYXNlIDc3OgogICAgICAgIGNhc2UgODU6CiAgICAgICAgICBub3JtYWxpemVkW2luZGV4Ml0gPSAiNCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDY5OgogICAgICAgIGNhc2UgNzg6CiAgICAgICAgY2FzZSA4NjoKICAgICAgICAgIG5vcm1hbGl6ZWRbaW5kZXgyXSA9ICI1IjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNzA6CiAgICAgICAgY2FzZSA3OToKICAgICAgICBjYXNlIDg3OgogICAgICAgICAgbm9ybWFsaXplZFtpbmRleDJdID0gIjYiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA3MToKICAgICAgICBjYXNlIDgwOgogICAgICAgIGNhc2UgODg6CiAgICAgICAgICBub3JtYWxpemVkW2luZGV4Ml0gPSAiNyI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDcyOgogICAgICAgIGNhc2UgODE6CiAgICAgICAgY2FzZSA4OToKICAgICAgICAgIG5vcm1hbGl6ZWRbaW5kZXgyXSA9ICI4IjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNzM6CiAgICAgICAgY2FzZSA4MjoKICAgICAgICBjYXNlIDkwOgogICAgICAgICAgbm9ybWFsaXplZFtpbmRleDJdID0gIjkiOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9CiAgdmFyIHJlbWFpbmRlciA9IG1vZDk3MTAobm9ybWFsaXplZC5qb2luKCIiKSk7CiAgcmV0dXJuIHJlbWFpbmRlciA9PT0gMDsKfTsKdmFyIGNoZWNrSHVuZ2FyaWFuQkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICB2YXIgd2VpZ2h0cyA9IFs5LCA3LCAzLCAxLCA5LCA3LCAzLCAxLCA5LCA3LCAzLCAxLCA5LCA3LCAzXTsKICB2YXIgY29udHJvbERpZ2l0QmFua0JyYW5jaCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDcpLCAxMCk7CiAgdmFyIHRvQ2hlY2tCYW5rQnJhbmNoID0gYmJhbi5zdWJzdHJpbmcoMCwgNyk7CiAgdmFyIHN1bSA9IDA7CiAgZm9yICh2YXIgaW5kZXgyID0gMDsgaW5kZXgyIDwgdG9DaGVja0JhbmtCcmFuY2gubGVuZ3RoOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KHRvQ2hlY2tCYW5rQnJhbmNoLmNoYXJBdChpbmRleDIpLCAxMCkgKiB3ZWlnaHRzW2luZGV4Ml07CiAgfQogIHZhciByZW1haW5kZXIgPSBzdW0gJSAxMDsKICBpZiAoY29udHJvbERpZ2l0QmFua0JyYW5jaCAhPT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiAxMCAtIHJlbWFpbmRlcikpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgc3VtID0gMDsKICBpZiAoYmJhbi5lbmRzV2l0aCgiMDAwMDAwMDAiKSkgewogICAgdmFyIHRvQ2hlY2tBY2NvdW50ID0gYmJhbi5zdWJzdHJpbmcoOCwgMTUpOwogICAgdmFyIGNvbnRyb2xEaWdpdEFjY291bnQgPSBwYXJzZUludChiYmFuLmNoYXJBdCgxNSksIDEwKTsKICAgIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHRvQ2hlY2tBY2NvdW50Lmxlbmd0aDsgaW5kZXgyKyspIHsKICAgICAgc3VtICs9IHBhcnNlSW50KHRvQ2hlY2tBY2NvdW50LmNoYXJBdChpbmRleDIpLCAxMCkgKiB3ZWlnaHRzW2luZGV4Ml07CiAgICB9CiAgICB2YXIgcmVtYWluZGVyXzEgPSBzdW0gJSAxMDsKICAgIHJldHVybiBjb250cm9sRGlnaXRBY2NvdW50ID09PSAocmVtYWluZGVyXzEgPT09IDAgPyAwIDogMTAgLSByZW1haW5kZXJfMSk7CiAgfSBlbHNlIHsKICAgIHZhciB0b0NoZWNrQWNjb3VudCA9IGJiYW4uc3Vic3RyaW5nKDgsIDIzKTsKICAgIHZhciBjb250cm9sRGlnaXRBY2NvdW50ID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoMjMpLCAxMCk7CiAgICBmb3IgKHZhciBpbmRleDIgPSAwOyBpbmRleDIgPCB0b0NoZWNrQWNjb3VudC5sZW5ndGg7IGluZGV4MisrKSB7CiAgICAgIHN1bSArPSBwYXJzZUludCh0b0NoZWNrQWNjb3VudC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c1tpbmRleDJdOwogICAgfQogICAgdmFyIHJlbWFpbmRlcl8yID0gc3VtICUgMTA7CiAgICByZXR1cm4gY29udHJvbERpZ2l0QWNjb3VudCA9PT0gKHJlbWFpbmRlcl8yID09PSAwID8gMCA6IDEwIC0gcmVtYWluZGVyXzIpOwogIH0KfTsKdmFyIHNldENvdW50cnlCQkFOVmFsaWRhdGlvbiA9IGZ1bmN0aW9uKGNvdW50cnksIGZ1bmMpIHsKICBpZiAodHlwZW9mIGNvdW50cnlTcGVjc1tjb3VudHJ5XSA9PT0gInVuZGVmaW5lZCIpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgY291bnRyeVNwZWNzW2NvdW50cnldLmJiYW5fdmFsaWRhdGlvbl9mdW5jID0gZnVuYzsKICByZXR1cm4gdHJ1ZTsKfTsKdmFyIGNvdW50cnlTcGVjcyA9IHsKICBBRDogewogICAgY2hhcnM6IDI0LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17OH1bQS1aMC05XXsxMn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTciLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI0IgogIH0sCiAgQUU6IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezN9WzAtOV17MTZ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjctMjMiCiAgfSwKICBBRjoge30sCiAgQUc6IHt9LAogIEFJOiB7fSwKICBBTDogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17OH1bQS1aMC05XXsxNn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjMtNyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEyLTI4IgogIH0sCiAgQU06IHt9LAogIEFPOiB7CiAgICBjaGFyczogMjUsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMX0kIgogIH0sCiAgQVE6IHt9LAogIEFSOiB7fSwKICBBUzoge30sCiAgQVQ6IHsgY2hhcnM6IDIwLCBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNn0kIiwgSUJBTlJlZ2lzdHJ5OiB0cnVlLCBTRVBBOiB0cnVlLCBiYW5rX2lkZW50aWZpZXI6ICIwLTQiIH0sCiAgQVU6IHt9LAogIEFXOiB7fSwKICBBWDogewogICAgY2hhcnM6IDE4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIEFaOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVtBLVowLTldezIwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTI4IgogIH0sCiAgQkE6IHsKICAgIGNoYXJzOiAyMCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE2fSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrTW9kOTcxMEJCQU4sCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTUiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgQkI6IHt9LAogIEJEOiB7fSwKICBCRTogewogICAgY2hhcnM6IDE2LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTJ9JCIsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tCZWxnaWFuQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjAtMTYiCiAgfSwKICBCRjogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17Mn1bMC05XXsyMn0kIgogIH0sCiAgQkc6IHsKICAgIGNoYXJzOiAyMiwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17Nn1bQS1aMC05XXs4fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjQtNyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiCiAgfSwKICBCSDogewogICAgY2hhcnM6IDIyLAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bQS1aMC05XXsxNH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yMiIKICB9LAogIEJJOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIiwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjUtOSIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTQiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjE0LTI3IgogIH0sCiAgQko6IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVowLTldezJ9WzAtOV17MjJ9JCIKICB9LAogIEJMOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiCiAgfSwKICBCTToge30sCiAgQk46IHt9LAogIEJPOiB7fSwKICBCUToge30sCiAgQlI6IHsKICAgIGNoYXJzOiAyOSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfVtBLVpdezF9W0EtWjAtOV17MX0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjgtMTIiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC03IiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNy0yOSIKICB9LAogIEJTOiB7fSwKICBCVDoge30sCiAgQlY6IHt9LAogIEJXOiB7fSwKICBCWTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXs0fVtBLVowLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIgogIH0sCiAgQlo6IHt9LAogIENBOiB7fSwKICBDQzoge30sCiAgQ0Q6IHt9LAogIENGOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIgogIH0sCiAgQ0c6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiCiAgfSwKICBDSDogewogICAgY2hhcnM6IDIxLAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17NX1bQS1aMC05XXsxMn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTQiCiAgfSwKICBDSTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17MX1bMC05XXsyM30kIgogIH0sCiAgQ0s6IHt9LAogIENMOiB7fSwKICBDTTogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjN9JCIKICB9LAogIENOOiB7fSwKICBDTzoge30sCiAgQ1I6IHsKICAgIGNoYXJzOiAyMiwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE4fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTIyIgogIH0sCiAgQ1U6IHt9LAogIENWOiB7IGNoYXJzOiAyNSwgYmJhbl9yZWdleHA6ICJeWzAtOV17MjF9JCIgfSwKICBDVzoge30sCiAgQ1g6IHt9LAogIENZOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXs4fVtBLVowLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjMtNyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEyLTI4IgogIH0sCiAgQ1o6IHsKICAgIGNoYXJzOiAyNCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrQ3plY2hBbmRTbG92YWtCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIKICB9LAogIERFOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxOH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTciLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEzLTIyIgogIH0sCiAgREo6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNS05IiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtNCIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTQtMjciCiAgfSwKICBESzogewogICAgY2hhcnM6IDE4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE4IgogIH0sCiAgRE06IHt9LAogIERPOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVswLTldezIwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI4IgogIH0sCiAgRFo6IHsKICAgIGNoYXJzOiAyNiwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIyfSQiCiAgfSwKICBFQzoge30sCiAgRUU6IHsKICAgIGNoYXJzOiAyMCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE2fSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrRXN0b25pYW5CQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMSIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yMCIKICB9LAogIEVHOiB7CiAgICBjaGFyczogMjksCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyNX0iLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNC03IiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTctMjkiCiAgfSwKICBFSDoge30sCiAgRVI6IHt9LAogIEVTOiB7CiAgICBjaGFyczogMjQsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tTcGFpbkJCQU4sCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTciLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNC0yNCIKICB9LAogIEVUOiB7fSwKICBGSTogewogICAgY2hhcnM6IDE4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTAiCiAgfSwKICBGSjoge30sCiAgRks6IHsKICAgIGNoYXJzOiAxOCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezJ9WzAtOV17MTJ9JCIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjYtMTgiCiAgfSwKICBGTToge30sCiAgRk86IHsKICAgIGNoYXJzOiAxOCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE0fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE4IgogIH0sCiAgRlI6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tGcmVuY2hCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtNCIsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI1LTkiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjE0LTI0IgogIH0sCiAgR0E6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiCiAgfSwKICBHQjogewogICAgY2hhcnM6IDIyLAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXsxNH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTkiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIgogIH0sCiAgR0Q6IHt9LAogIEdFOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXsyfVswLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0xIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI2LTIyIgogIH0sCiAgR0Y6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIEdHOiB7fSwKICBHSDoge30sCiAgR0k6IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MTV9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTIzIgogIH0sCiAgR0w6IHsKICAgIGNoYXJzOiAxOCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE0fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE4IgogIH0sCiAgR006IHt9LAogIEdOOiB7fSwKICBHUDogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZQogIH0sCiAgR1E6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiCiAgfSwKICBHUjogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17N31bQS1aMC05XXsxNn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTYiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI3LTI3IgogIH0sCiAgR1M6IHt9LAogIEdUOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXsyNH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yOCIKICB9LAogIEdVOiB7fSwKICBHVzogewogICAgY2hhcnM6IDI1LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsxOX0kIgogIH0sCiAgR1k6IHt9LAogIEhLOiB7fSwKICBITToge30sCiAgSE46IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17MjB9JCIKICB9LAogIEhSOiB7CiAgICBjaGFyczogMjEsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxN30kIiwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja0Nyb2F0aWFuQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTYiCiAgfSwKICBIVDoge30sCiAgSFU6IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezI0fSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrSHVuZ2FyaWFuQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTYiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgSUQ6IHt9LAogIElFOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXs0fVswLTldezE0fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjQtOSIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiCiAgfSwKICBJTDogewogICAgY2hhcnM6IDIzLAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTl9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTUiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgSU06IHt9LAogIElOOiB7fSwKICBJTzoge30sCiAgSVE6IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17MTV9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTYiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxMS0yMyIKICB9LAogIElSOiB7CiAgICBjaGFyczogMjYsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMn0kIgogIH0sCiAgSVM6IHsKICAgIGNoYXJzOiAyNiwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjItMyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiCiAgfSwKICBJVDogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17MX1bMC05XXsxMH1bQS1aMC05XXsxMn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI2LTEwIiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjEtNSIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiNC0yNyIKICB9LAogIEpFOiB7fSwKICBKTToge30sCiAgSk86IHsKICAgIGNoYXJzOiAzMCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17NH1bQS1aMC05XXsxOH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjQtNyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICI0LTciCiAgfSwKICBKUDoge30sCiAgS0U6IHt9LAogIEtHOiB7fSwKICBLSDoge30sCiAgS0k6IHt9LAogIEtNOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIgogIH0sCiAgS046IHt9LAogIEtQOiB7fSwKICBLUjoge30sCiAgS1c6IHsKICAgIGNoYXJzOiAzMCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MjJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjIwLTMwIgogIH0sCiAgS1k6IHt9LAogIEtaOiB7CiAgICBjaGFyczogMjAsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXszfVtBLVowLTldezEzfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTIwIgogIH0sCiAgTEE6IHt9LAogIExCOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXs0fVtBLVowLTldezIwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNC0yOCIKICB9LAogIExDOiB7CiAgICBjaGFyczogMzIsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVtBLVowLTldezI0fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTMyIgogIH0sCiAgTEk6IHsKICAgIGNoYXJzOiAyMSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezV9W0EtWjAtOV17MTJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC00IgogIH0sCiAgTEs6IHt9LAogIExSOiB7fSwKICBMUzoge30sCiAgTFQ6IHsgY2hhcnM6IDIwLCBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNn0kIiwgSUJBTlJlZ2lzdHJ5OiB0cnVlLCBTRVBBOiB0cnVlLCBiYW5rX2lkZW50aWZpZXI6ICIwLTQiIH0sCiAgTFU6IHsKICAgIGNoYXJzOiAyMCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezN9W0EtWjAtOV17MTN9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgTFY6IHsKICAgIGNoYXJzOiAyMSwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MTN9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTIxIgogIH0sCiAgTFk6IHsKICAgIGNoYXJzOiAyNSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIxfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiMy01IiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMiIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTAtMjUiCiAgfSwKICBNQTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjR9JCIKICB9LAogIE1DOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrRnJlbmNoQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI1LTkiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC00IgogIH0sCiAgTUQ6IHsKICAgIGNoYXJzOiAyNCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVowLTldezJ9W0EtWjAtOV17MTh9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjYtMjQiCiAgfSwKICBNRTogewogICAgY2hhcnM6IDIyLAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTh9JCIsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tNb2Q5NzEwQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMiIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiNC0yMiIKICB9LAogIE1GOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBNRzogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjN9JCIKICB9LAogIE1IOiB7fSwKICBNSzogewogICAgY2hhcnM6IDE5LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17M31bQS1aMC05XXsxMH1bMC05XXsyfSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrTW9kOTcxMEJCQU4sCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiCiAgfSwKICBNTDogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17Mn1bMC05XXsyMn0kIgogIH0sCiAgTU06IHt9LAogIE1OOiB7CiAgICBjaGFyczogMjAsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yMCIKICB9LAogIE1POiB7fSwKICBNUDoge30sCiAgTVE6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIE1SOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjUtOSIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTQiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjQtMjciCiAgfSwKICBNUzoge30sCiAgTVQ6IHsKICAgIGNoYXJzOiAzMSwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17NX1bQS1aMC05XXsxOH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTgiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNS0zMSIKICB9LAogIE1VOiB7CiAgICBjaGFyczogMzAsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVswLTldezE5fVtBLVpdezN9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI2LTciLAogICAgYmFua19pZGVudGlmaWVyOiAiMC01IiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTMwIgogIH0sCiAgTVY6IHt9LAogIE1XOiB7fSwKICBNWDoge30sCiAgTVk6IHt9LAogIE1aOiB7CiAgICBjaGFyczogMjUsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMX0kIgogIH0sCiAgTkE6IHt9LAogIE5DOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBORTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsyMn0kIgogIH0sCiAgTkY6IHt9LAogIE5HOiB7fSwKICBOSTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXsyMH0kIiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yOCIKICB9LAogIE5MOiB7CiAgICBjaGFyczogMTgsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVswLTldezEwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0xOCIKICB9LAogIE5POiB7CiAgICBjaGFyczogMTUsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMX0kIiwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja05vcndheUJCQU4sCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE1IgogIH0sCiAgTlA6IHt9LAogIE5SOiB7fSwKICBOVToge30sCiAgTlo6IHt9LAogIE9NOiB7CiAgICBjaGFyczogMjMsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXszfVtBLVowLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogZmFsc2UsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiCiAgfSwKICBQQToge30sCiAgUEU6IHt9LAogIFBGOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBQRzoge30sCiAgUEg6IHt9LAogIFBLOiB7CiAgICBjaGFyczogMjQsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXs0fVswLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIgogIH0sCiAgUEw6IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja1BvbGFuZEJCQU4sCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyNH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIwLTciLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjItMjgiCiAgfSwKICBQTTogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZQogIH0sCiAgUE46IHt9LAogIFBSOiB7fSwKICBQUzogewogICAgY2hhcnM6IDI5LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17NH1bMC05XXsyMX0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTctMjkiCiAgfSwKICBQVDogewogICAgY2hhcnM6IDI1LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjF9JCIsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tNb2Q5NzEwQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiCiAgfSwKICBQVzoge30sCiAgUFk6IHt9LAogIFFBOiB7CiAgICBjaGFyczogMjksCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVtBLVowLTldezIxfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI5IgogIH0sCiAgUkU6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIFJPOiB7CiAgICBjaGFyczogMjQsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVtBLVowLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMC0yNCIKICB9LAogIFJTOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxOH0kIiwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja01vZDk3MTBCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgUlU6IHsKICAgIGNoYXJzOiAzMywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE0fVtBLVowLTldezE1fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiOS0xMyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTgiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEzLTMzIgogIH0sCiAgUlc6IHt9LAogIFNBOiB7CiAgICBjaGFyczogMjQsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyfVtBLVowLTldezE4fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0xIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxMi0yNCIKICB9LAogIFNCOiB7fSwKICBTQzogewogICAgY2hhcnM6IDMxLAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXsyMH1bQS1aXXszfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNi03IiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtNSIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTItMjgiCiAgfSwKICBTRDogewogICAgY2hhcnM6IDE4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjYtMTgiCiAgfSwKICBTRTogeyBjaGFyczogMjQsIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLCBJQkFOUmVnaXN0cnk6IHRydWUsIFNFUEE6IHRydWUsIGJhbmtfaWRlbnRpZmllcjogIjAtMiIgfSwKICBTRzoge30sCiAgU0g6IHt9LAogIFNJOiB7CiAgICBjaGFyczogMTksCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNX0kIiwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja01vZDk3MTBCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjItNCIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjktMTYiCiAgfSwKICBTSjoge30sCiAgU0s6IHsKICAgIGNoYXJzOiAyNCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrQ3plY2hBbmRTbG92YWtCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZQogIH0sCiAgU0w6IHt9LAogIFNNOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXsxfVswLTldezEwfVtBLVowLTldezEyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjYtMTAiCiAgfSwKICBTTjogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsyMn0kIgogIH0sCiAgU086IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE5fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNC02IiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxMS0yMyIKICB9LAogIFNSOiB7fSwKICBTUzoge30sCiAgU1Q6IHsKICAgIGNoYXJzOiAyNSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIxfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNC03IgogIH0sCiAgU1Y6IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17MjB9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yOCIKICB9LAogIFNYOiB7fSwKICBTWToge30sCiAgU1o6IHt9LAogIFRDOiB7fSwKICBURDogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjN9JCIKICB9LAogIFRGOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBURzogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsyMn0kIgogIH0sCiAgVEg6IHt9LAogIFRKOiB7fSwKICBUSzoge30sCiAgVEw6IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE5fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjQtMjMiCiAgfSwKICBUTToge30sCiAgVE46IHsKICAgIGNoYXJzOiAyNCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiMi00IiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTI0IgogIH0sCiAgVE86IHt9LAogIFRSOiB7CiAgICBjaGFyczogMjYsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXs1fVtBLVowLTldezE3fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBUVDoge30sCiAgVFY6IHt9LAogIFRXOiB7fSwKICBUWjoge30sCiAgVUE6IHsKICAgIGNoYXJzOiAyOSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezZ9W0EtWjAtOV17MTl9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTUtMjkiCiAgfSwKICBVRzoge30sCiAgVU06IHt9LAogIFVTOiB7fSwKICBVWToge30sCiAgVVo6IHt9LAogIFZBOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxOH0iLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI3LTIyIgogIH0sCiAgVkM6IHt9LAogIFZFOiB7fSwKICBWRzogewogICAgY2hhcnM6IDI0LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17NH1bMC05XXsxNn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI0IgogIH0sCiAgVkk6IHt9LAogIFZOOiB7fSwKICBWVToge30sCiAgV0Y6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIFdTOiB7fSwKICBYSzogewogICAgY2hhcnM6IDIwLAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTZ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIyLTMiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjQtMjAiCiAgfSwKICBZRToge30sCiAgWVQ6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIFpBOiB7fSwKICBaTToge30sCiAgWlc6IHt9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1pYmFuL2RlZXMtaW5wdXQtaWJhbi5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzE5ID0gKCkgPT4gYjJgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnBheW1lbnQtZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgSUJBTiBJbnB1dCJ9IC5zdWJ0aXRsZT0keyJJbnRlcm5hdGlvbmFsIEJhbmsgQWNjb3VudCBOdW1iZXIgd2l0aCBhdXRvbWF0aWMgZm9ybWF0dGluZyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWliYW4gCiAgICAgICAgICAubGFiZWw9JHsiQmFuayBBY2NvdW50IElCQU4ifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJFbnRlciB5b3VyIEludGVybmF0aW9uYWwgQmFuayBBY2NvdW50IE51bWJlciJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWliYW4gCiAgICAgICAgICAubGFiZWw9JHsiVmVyaWZpZWQgSUJBTiJ9IAogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoaXMgSUJBTiBoYXMgYmVlbiB2ZXJpZmllZCJ9CiAgICAgICAgICAudmFsdWU9JHsiREU4OTM3MDQwMDQ0MDUzMjAxMzAwMCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUGF5bWVudCBJbmZvcm1hdGlvbiJ9IC5zdWJ0aXRsZT0keyJJQkFOIGlucHV0IHdpdGggaG9yaXpvbnRhbCBsYXlvdXQgZm9yIHBheW1lbnQgZm9ybXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJwYXltZW50LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJBY2NvdW50IEhvbGRlciJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLnZhbHVlPSR7IkpvaG4gRG9lIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtaWJhbiAKICAgICAgICAgICAgLmxhYmVsPSR7IklCQU4ifSAKICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC52YWx1ZT0keyJHQjgyV0VTVDEyMzQ1Njk4NzY1NDMyIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtaWJhbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlZhbGlkYXRpb24gJiBTdGF0ZXMifSAuc3VidGl0bGU9JHsiUmVxdWlyZWQgZmllbGRzIGFuZCBkaXNhYmxlZCBzdGF0ZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1pYmFuIAogICAgICAgICAgLmxhYmVsPSR7IlBheW1lbnQgQWNjb3VudCJ9IAogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlJlcXVpcmVkIGZvciBwcm9jZXNzaW5nIHBheW1lbnRzIn0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWliYW4gCiAgICAgICAgICAubGFiZWw9JHsiTG9ja2VkIElCQU4ifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGlzIElCQU4gY2Fubm90IGJlIGNoYW5nZWQifQogICAgICAgICAgLnZhbHVlPSR7IkZSMTQyMDA0MTAxMDA1MDUwMDAxM00wMjYwNiJ9CiAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgID48L2RlZXMtaW5wdXQtaWJhbj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhbmsgVHJhbnNmZXIgRm9ybSJ9IC5zdWJ0aXRsZT0keyJDb21wbGV0ZSBmb3JtIGV4YW1wbGUgd2l0aCBJQkFOIHZhbGlkYXRpb24ifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiUmVjaXBpZW50IE5hbWUifSAucmVxdWlyZWQ9JHt0cnVlfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWliYW4gLmxhYmVsPSR7IlJlY2lwaWVudCBJQkFOIn0gLnJlcXVpcmVkPSR7dHJ1ZX0+PC9kZWVzLWlucHV0LWliYW4+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJUcmFuc2ZlciBSZWZlcmVuY2UifSAuZGVzY3JpcHRpb249JHsiT3B0aW9uYWwgcmVmZXJlbmNlIGZvciB0aGUgdHJhbnNmZXIifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkFtb3VudCJ9IC5pbnB1dFR5cGU9JHsibnVtYmVyIn0gLnJlcXVpcmVkPSR7dHJ1ZX0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWliYW4vZGVlcy1pbnB1dC1pYmFuLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTI3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMyOCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0SWJhbiA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtaWJhbiIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfZW50ZXJlZFN0cmluZ19kZWNvcmF0b3JzOwogIGxldCBfZW50ZXJlZFN0cmluZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VudGVyZWRTdHJpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VudGVyZWRJYmFuSXNWYWxpZF9kZWNvcmF0b3JzOwogIGxldCBfZW50ZXJlZEliYW5Jc1ZhbGlkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW50ZXJlZEliYW5Jc1ZhbGlkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXRJYmFuMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2VudGVyZWRTdHJpbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2VudGVyZWRJYmFuSXNWYWxpZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlMjcodGhpcywgbnVsbCwgX2VudGVyZWRTdHJpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZW50ZXJlZFN0cmluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZW50ZXJlZFN0cmluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbnRlcmVkU3RyaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5lbnRlcmVkU3RyaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VudGVyZWRTdHJpbmdfaW5pdGlhbGl6ZXJzLCBfZW50ZXJlZFN0cmluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI3KHRoaXMsIG51bGwsIF9lbnRlcmVkSWJhbklzVmFsaWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZW50ZXJlZEliYW5Jc1ZhbGlkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlbnRlcmVkSWJhbklzVmFsaWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZW50ZXJlZEliYW5Jc1ZhbGlkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5lbnRlcmVkSWJhbklzVmFsaWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZW50ZXJlZEliYW5Jc1ZhbGlkX2luaXRpYWxpemVycywgX2VudGVyZWRJYmFuSXNWYWxpZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI3KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRJYmFuMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMxOTsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI2VudGVyZWRTdHJpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjgodGhpcywgX2VudGVyZWRTdHJpbmdfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IGVudGVyZWRTdHJpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlbnRlcmVkU3RyaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZW50ZXJlZFN0cmluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZW50ZXJlZFN0cmluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VudGVyZWRJYmFuSXNWYWxpZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjgodGhpcywgX2VudGVyZWRTdHJpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI4KHRoaXMsIF9lbnRlcmVkSWJhbklzVmFsaWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGVudGVyZWRJYmFuSXNWYWxpZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2VudGVyZWRJYmFuSXNWYWxpZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGVudGVyZWRJYmFuSXNWYWxpZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZW50ZXJlZEliYW5Jc1ZhbGlkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI4KHRoaXMsIF9lbnRlcmVkSWJhbklzVmFsaWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI4KHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgLyogSUJBTiBpbnB1dCBzcGVjaWZpYyBzdHlsZXMgY2FuIGdvIGhlcmUgKi8KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbCB8fCAiSUJBTiJ9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259PjwvZGVlcy1sYWJlbD4KICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAudmFsdWU9JHt0aGlzLnZhbHVlfQogICAgICAgICAgLmRpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWR9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiREU4OSAzNzA0IDAwNDQgMDUzMiAwMTMwIDAwIn0KICAgICAgICAgIEBpbnB1dD0keyhldmVudEFyZykgPT4gewogICAgICAgIHRoaXMudmFsaWRhdGVJYmFuKGV2ZW50QXJnKTsKICAgICAgfX0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGNvbnN0IGRlZXNJbnB1dFRleHQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7CiAgICAgIGlmIChkZWVzSW5wdXRUZXh0ICYmIGRlZXNJbnB1dFRleHQuY2hhbmdlU3ViamVjdCkgewogICAgICAgIGRlZXNJbnB1dFRleHQuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gewogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHZhbGlkYXRlSWJhbihldmVudEFyZykgewogICAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBldmVudEFyZy50YXJnZXQ7CiAgICAgIGxldCBlbnRlcmVkU3RyaW5nID0gaW5wdXRFbGVtZW50Py52YWx1ZTsKICAgICAgZW50ZXJlZFN0cmluZyA9IGVudGVyZWRTdHJpbmcgfHwgIiI7CiAgICAgIGlmICh0aGlzLmVudGVyZWRTdHJpbmcgIT09IGVudGVyZWRTdHJpbmcpIHsKICAgICAgICB0aGlzLmVudGVyZWRTdHJpbmcgPSBmcmllbmRseUZvcm1hdElCQU4oZW50ZXJlZFN0cmluZykgfHwgIiI7CiAgICAgICAgaWYgKGlucHV0RWxlbWVudCkgewogICAgICAgICAgaW5wdXRFbGVtZW50LnZhbHVlID0gdGhpcy5lbnRlcmVkU3RyaW5nOwogICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZW50ZXJlZFN0cmluZzsKICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLmVudGVyZWRJYmFuSXNWYWxpZCA9IGlzVmFsaWRJQkFOKHRoaXMuZW50ZXJlZFN0cmluZy5yZXBsYWNlKC8gL2csICIiKSk7CiAgICAgIGNvbnN0IGRlZXNJbnB1dFRleHQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7CiAgICAgIGRlZXNJbnB1dFRleHQudmFsaWRhdGlvblRleHQgPSBgSUJBTiBpcyB2YWxpZDogJHt0aGlzLmVudGVyZWRJYmFuSXNWYWxpZH1gOwogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgIHRoaXMuZW50ZXJlZFN0cmluZyA9IGZyaWVuZGx5Rm9ybWF0SUJBTih2YWx1ZTIpIHx8ICIiOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjgodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjgoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dEliYW4yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlL2RlZXMtaW5wdXQtbXVsdGl0b2dnbGUuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMyMCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAzMnB4OwogICAgICAgICAgcGFkZGluZzogNDhweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjhmOWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnNlY3Rpb24gewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzE4MTgxYiIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2VjdGlvbi1kZXNjcmlwdGlvbiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5zZXR0aW5ncy1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgICAgLnNldHRpbmdzLWdyaWQgewogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPk11bHRpLU9wdGlvbiBUb2dnbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5TZWxlY3QgZnJvbSBtdWx0aXBsZSBvcHRpb25zIHdpdGggYSBzbW9vdGggc2xpZGluZyBpbmRpY2F0b3IgYW5pbWF0aW9uLjwvZGl2PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAubGFiZWw9JHsiRGlzcGxheSBNb2RlIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJDaG9vc2UgaG93IGNvbnRlbnQgaXMgZGlzcGxheWVkIn0KICAgICAgICAgIC5vcHRpb25zPSR7WyJMaXN0IFZpZXciLCAiR3JpZCBWaWV3IiwgIkNvbXBhY3QiXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJHcmlkIFZpZXcifQogICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgCiAgICAgICAgPGJyPjxicj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgLmxhYmVsPSR7IlQtU2hpcnQgU2l6ZSJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2VsZWN0IHlvdXIgcHJlZmVycmVkIHNpemUifQogICAgICAgICAgLm9wdGlvbnM9JHtbIlhTIiwgIlMiLCAiTSIsICJMIiwgIlhMIiwgIlhYTCJdfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik0ifQogICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Qm9vbGVhbiBUb2dnbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5TaW1wbGUgb24vb2ZmIHN3aXRjaGVzIHdpdGggY3VzdG9taXphYmxlIGxhYmVscyBmb3IgY2xlYXJlciBjb250ZXh0LjwvZGl2PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAubGFiZWw9JHsiTm90aWZpY2F0aW9ucyJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRW5hYmxlIG9yIGRpc2FibGUgcHVzaCBub3RpZmljYXRpb25zIn0KICAgICAgICAgIC50eXBlPSR7ImJvb2xlYW4ifQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7InRydWUifQogICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgCiAgICAgICAgPGJyPjxicj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgLmxhYmVsPSR7IlRoZW1lIE1vZGUifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlN3aXRjaCBiZXR3ZWVuIGxpZ2h0IGFuZCBkYXJrIHRoZW1lIn0KICAgICAgICAgIC50eXBlPSR7ImJvb2xlYW4ifQogICAgICAgICAgLmJvb2xlYW5UcnVlTmFtZT0keyJEYXJrIn0KICAgICAgICAgIC5ib29sZWFuRmFsc2VOYW1lPSR7IkxpZ2h0In0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJEYXJrIn0KICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNldHRpbmdzIEdyaWQ8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5Db25maWd1cmF0aW9uIG9wdGlvbnMgYXJyYW5nZWQgaW4gYSByZXNwb25zaXZlIGdyaWQgbGF5b3V0LjwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLWdyaWQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkF1dG8tU2F2ZSJ9CiAgICAgICAgICAgIC50eXBlPSR7ImJvb2xlYW4ifQogICAgICAgICAgICAuYm9vbGVhblRydWVOYW1lPSR7IkVuYWJsZWQifQogICAgICAgICAgICAuYm9vbGVhbkZhbHNlTmFtZT0keyJEaXNhYmxlZCJ9CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJFbmFibGVkIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJMYW5ndWFnZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJFbmdsaXNoIiwgIkdlcm1hbiIsICJGcmVuY2giLCAiU3BhbmlzaCJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiRW5nbGlzaCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiUXVhbGl0eSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJMb3ciLCAiTWVkaXVtIiwgIkhpZ2giLCAiVWx0cmEiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkhpZ2gifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IlByaXZhY3kifQogICAgICAgICAgICAudHlwZT0keyJib29sZWFuIn0KICAgICAgICAgICAgLmJvb2xlYW5UcnVlTmFtZT0keyJQcml2YXRlIn0KICAgICAgICAgICAgLmJvb2xlYW5GYWxzZU5hbWU9JHsiUHVibGljIn0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IlByaXZhdGUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TdGF0ZXMgJiBGb3JtIEludGVncmF0aW9uPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+RXhhbXBsZXMgb2YgZGlzYWJsZWQgc3RhdGVzIGFuZCBpbnRlZ3JhdGlvbiB3aXRoaW4gZm9ybXMuPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgIC5sYWJlbD0keyJBY2NvdW50IFR5cGUifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoaXMgc2V0dGluZyBpcyBsb2NrZWQifQogICAgICAgICAgLm9wdGlvbnM9JHtbIkZyZWUiLCAiUHJvIiwgIkVudGVycHJpc2UiXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJFbnRlcnByaXNlIn0KICAgICAgICAgIC5kaXNhYmxlZD0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAKICAgICAgICA8YnI+PGJyPgogICAgICAgIAogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJQcm9qZWN0IE5hbWUifSAucmVxdWlyZWQ9JHt0cnVlfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJWaXNpYmlsaXR5In0KICAgICAgICAgICAgLnR5cGU9JHsiYm9vbGVhbiJ9CiAgICAgICAgICAgIC5ib29sZWFuVHJ1ZU5hbWU9JHsiUHVibGljIn0KICAgICAgICAgICAgLmJvb2xlYW5GYWxzZU5hbWU9JHsiUHJpdmF0ZSJ9CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJQcml2YXRlIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiTGljZW5zZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJNSVQiLCAiQXBhY2hlIDIuMCIsICJHUEwgdjMiLCAiUHJvcHJpZXRhcnkiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik1JVCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlL2RlZXMtaW5wdXQtbXVsdGl0b2dnbGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczI5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRNdWx0aXRvZ2dsZSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtbXVsdGl0b2dnbGUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX3R5cGVfZGVjb3JhdG9yczsKICBsZXQgX3R5cGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib29sZWFuVHJ1ZU5hbWVfZGVjb3JhdG9yczsKICBsZXQgX2Jvb2xlYW5UcnVlTmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Jvb2xlYW5UcnVlTmFtZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYm9vbGVhbkZhbHNlTmFtZV9kZWNvcmF0b3JzOwogIGxldCBfYm9vbGVhbkZhbHNlTmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Jvb2xlYW5GYWxzZU5hbWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX29wdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYm9vbFZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF9ib29sVmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib29sVmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0TXVsdGl0b2dnbGUyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdHlwZV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfYm9vbGVhblRydWVOYW1lX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9ib29sZWFuRmFsc2VOYW1lX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9vcHRpb25zX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX3NlbGVjdGVkT3B0aW9uX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9ib29sVmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGUyOCh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjgodGhpcywgbnVsbCwgX2Jvb2xlYW5UcnVlTmFtZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJib29sZWFuVHJ1ZU5hbWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJvb2xlYW5UcnVlTmFtZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ib29sZWFuVHJ1ZU5hbWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJvb2xlYW5UcnVlTmFtZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ib29sZWFuVHJ1ZU5hbWVfaW5pdGlhbGl6ZXJzLCBfYm9vbGVhblRydWVOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjgodGhpcywgbnVsbCwgX2Jvb2xlYW5GYWxzZU5hbWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYm9vbGVhbkZhbHNlTmFtZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYm9vbGVhbkZhbHNlTmFtZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ib29sZWFuRmFsc2VOYW1lLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ib29sZWFuRmFsc2VOYW1lID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Jvb2xlYW5GYWxzZU5hbWVfaW5pdGlhbGl6ZXJzLCBfYm9vbGVhbkZhbHNlTmFtZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI4KHRoaXMsIG51bGwsIF9vcHRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3B0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3B0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcHRpb25zX2luaXRpYWxpemVycywgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyOCh0aGlzLCBudWxsLCBfc2VsZWN0ZWRPcHRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRPcHRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkT3B0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkT3B0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZE9wdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZE9wdGlvbl9pbml0aWFsaXplcnMsIF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI4KHRoaXMsIG51bGwsIF9ib29sVmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYm9vbFZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJib29sVmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYm9vbFZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ib29sVmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYm9vbFZhbHVlX2luaXRpYWxpemVycywgX2Jvb2xWYWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI4KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0TXVsdGl0b2dnbGUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMyMDsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjkodGhpcywgX3R5cGVfaW5pdGlhbGl6ZXJzLCAibXVsdGkiKTsKICAgIGdldCB0eXBlKCkgewogICAgICByZXR1cm4gdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHR5cGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNib29sZWFuVHJ1ZU5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI5KHRoaXMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhblRydWVOYW1lX2luaXRpYWxpemVycywgInRydWUiKSk7CiAgICBnZXQgYm9vbGVhblRydWVOYW1lKCkgewogICAgICByZXR1cm4gdGhpcy4jYm9vbGVhblRydWVOYW1lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYm9vbGVhblRydWVOYW1lKHZhbHVlMikgewogICAgICB0aGlzLiNib29sZWFuVHJ1ZU5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNib29sZWFuRmFsc2VOYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhblRydWVOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhbkZhbHNlTmFtZV9pbml0aWFsaXplcnMsICJmYWxzZSIpKTsKICAgIGdldCBib29sZWFuRmFsc2VOYW1lKCkgewogICAgICByZXR1cm4gdGhpcy4jYm9vbGVhbkZhbHNlTmFtZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGJvb2xlYW5GYWxzZU5hbWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2Jvb2xlYW5GYWxzZU5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhbkZhbHNlTmFtZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjkodGhpcywgX29wdGlvbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IG9wdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgb3B0aW9ucyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkT3B0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjkodGhpcywgX3NlbGVjdGVkT3B0aW9uX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBzZWxlY3RlZE9wdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkT3B0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VsZWN0ZWRPcHRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGVkT3B0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYm9vbFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfc2VsZWN0ZWRPcHRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI5KHRoaXMsIF9ib29sVmFsdWVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGJvb2xWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Jvb2xWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGJvb2xWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYm9vbFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBBZGQgdmFsdWUgcHJvcGVydHkgZm9yIGZvcm0gY29tcGF0aWJpbGl0eQogICAgZ2V0IHZhbHVlKCkgewogICAgICBpZiAodGhpcy50eXBlID09PSAiYm9vbGVhbiIpIHsKICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbiA9PT0gdGhpcy5ib29sZWFuVHJ1ZU5hbWU7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICB9CiAgICBzZXQgdmFsdWUodmFsKSB7CiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICJib29sZWFuIiAmJiB0eXBlb2YgdmFsID09PSAiYm9vbGVhbiIpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdmFsID8gdGhpcy5ib29sZWFuVHJ1ZU5hbWUgOiB0aGlzLmJvb2xlYW5GYWxzZU5hbWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHZhbDsKICAgICAgfQogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgaWYgKHRoaXMuaGFzVXBkYXRlZCkgewogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICB0aGlzLnNldEluZGljYXRvcigpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb25zIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMDUpOwogICAgICB9CgogICAgICAub3B0aW9uIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFzZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiIzcxNzE3YSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICB6LWluZGV4OiAyOwogICAgICB9CgogICAgICAub3B0aW9uOmhvdmVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxODE4MWIiLCAiI2U0ZTRlNyIpfTsKICAgICAgfQoKICAgICAgLm9wdGlvbi5zZWxlY3RlZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgIH0KCiAgICAgIC5pbmRpY2F0b3IgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gOHB4KTsKICAgICAgICB0b3A6IDRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjE1KSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xNSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICB6LWluZGV4OiAxOwogICAgICB9CiAgICAgIAogICAgICAuaW5kaWNhdG9yLm5vLXRyYW5zaXRpb24gewogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5zZWxlY3Rpb25zIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLm9wdGlvbiB7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLmluZGljYXRvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTEzLCAxMTMsIDEyMiwgMC4xNSkiLCAicmdiYSgxMTMsIDExMywgMTIyLCAwLjE1KSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWxlY3Rpb25zIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImluZGljYXRvciI+PC9kaXY+CiAgICAgICAgICAke3RoaXMub3B0aW9ucy5tYXAoKG9wdGlvbjIpID0+IGIyYDxkaXYgY2xhc3M9Im9wdGlvbiAke29wdGlvbjIgPT09IHRoaXMuc2VsZWN0ZWRPcHRpb24gPyAic2VsZWN0ZWQiIDogIiJ9IiBAY2xpY2s9JHsoKSA9PiB0aGlzLmhhbmRsZVNlbGVjdGlvbihvcHRpb24yKX0+CiAgICAgICAgICAgICAgICAke29wdGlvbjJ9CiAgICAgICAgICAgICAgPC9kaXY+IGApfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAodGhpcy50eXBlID09PSAiYm9vbGVhbiIgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMub3B0aW9ucyA9IFt0aGlzLmJvb2xlYW5UcnVlTmFtZSB8fCAidHJ1ZSIsIHRoaXMuYm9vbGVhbkZhbHNlTmFtZSB8fCAiZmFsc2UiXTsKICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRPcHRpb24pIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLmJvb2xlYW5GYWxzZU5hbWUgfHwgImZhbHNlIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkT3B0aW9uICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHRoaXMub3B0aW9uc1swXTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKHRoaXMudHlwZSA9PT0gImJvb2xlYW4iKSB7CiAgICAgICAgdGhpcy5vcHRpb25zID0gW3RoaXMuYm9vbGVhblRydWVOYW1lIHx8ICJ0cnVlIiwgdGhpcy5ib29sZWFuRmFsc2VOYW1lIHx8ICJmYWxzZSJdOwogICAgICB9CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGlmIChkb2N1bWVudC5mb250cykgewogICAgICAgIGF3YWl0IGRvY3VtZW50LmZvbnRzLnJlYWR5OwogICAgICB9CiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgIHRoaXMuc2V0SW5kaWNhdG9yKCk7CiAgICB9CiAgICBhc3luYyBoYW5kbGVTZWxlY3Rpb24ob3B0aW9uQXJnKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IG9wdGlvbkFyZzsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICB0aGlzLnNldEluZGljYXRvcigpOwogICAgfQogICAgaW5kaWNhdG9ySW5pdGlhbGl6ZWQgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgZmFsc2UpOwogICAgYXN5bmMgc2V0SW5kaWNhdG9yKCkgewogICAgICBjb25zdCBpbmRpY2F0b3IgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmluZGljYXRvciIpOwogICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5vcHRpb25zLmluZGV4T2YodGhpcy5zZWxlY3RlZE9wdGlvbik7CiAgICAgIGlmIChzZWxlY3RlZEluZGV4ID09PSAtMSB8fCAhaW5kaWNhdG9yKSB7CiAgICAgICAgaWYgKGluZGljYXRvcikgewogICAgICAgICAgaW5kaWNhdG9yLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBvcHRpb24yID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYC5vcHRpb246bnRoLWNoaWxkKCR7c2VsZWN0ZWRJbmRleCArIDJ9KWApOwogICAgICBpZiAoaW5kaWNhdG9yICYmIG9wdGlvbjIpIHsKICAgICAgICBpZiAoIXRoaXMuaW5kaWNhdG9ySW5pdGlhbGl6ZWQpIHsKICAgICAgICAgIGluZGljYXRvci5jbGFzc0xpc3QuYWRkKCJuby10cmFuc2l0aW9uIik7CiAgICAgICAgICB0aGlzLmluZGljYXRvckluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBpbmRpY2F0b3IuY2xhc3NMaXN0LnJlbW92ZSgibm8tdHJhbnNpdGlvbiIpOwogICAgICAgICAgfSwgNTApOwogICAgICAgIH0KICAgICAgICBpbmRpY2F0b3Iuc3R5bGUud2lkdGggPSBgJHtvcHRpb24yLmNsaWVudFdpZHRofXB4YDsKICAgICAgICBpbmRpY2F0b3Iuc3R5bGUubGVmdCA9IGAke29wdGlvbjIub2Zmc2V0TGVmdH1weGA7CiAgICAgICAgaW5kaWNhdG9yLnN0eWxlLm9wYWNpdHkgPSAiMSI7CiAgICAgIH0KICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICBpZiAodGhpcy50eXBlID09PSAiYm9vbGVhbiIpIHsKICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbiA9PT0gdGhpcy5ib29sZWFuVHJ1ZU5hbWU7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgaWYgKHRoaXMudHlwZSA9PT0gImJvb2xlYW4iICYmIHR5cGVvZiB2YWx1ZTIgPT09ICJib29sZWFuIikgewogICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB2YWx1ZTIgPyB0aGlzLmJvb2xlYW5UcnVlTmFtZSB8fCAidHJ1ZSIgOiB0aGlzLmJvb2xlYW5GYWxzZU5hbWUgfHwgImZhbHNlIjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdmFsdWUyOwogICAgICB9CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICBpZiAodGhpcy5oYXNVcGRhdGVkKSB7CiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgIHRoaXMuc2V0SW5kaWNhdG9yKCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dE11bHRpdG9nZ2xlMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1waG9uZS9kZWVzLWlucHV0LXBob25lLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMjEgPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaG9yaXpvbnRhbC1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBQaG9uZSBJbnB1dCJ9IC5zdWJ0aXRsZT0keyJBdXRvbWF0aWMgZm9ybWF0dGluZyBmb3IgcGhvbmUgbnVtYmVycyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXBob25lIAogICAgICAgICAgLmxhYmVsPSR7IlBob25lIE51bWJlciJ9IAogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkVudGVyIHlvdXIgcGhvbmUgbnVtYmVyIHdpdGggY291bnRyeSBjb2RlIn0KICAgICAgICAgIC52YWx1ZT0keyI1NTUxMjM0NTY3In0KICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXBob25lIAogICAgICAgICAgLmxhYmVsPSR7IkNvbnRhY3QgUGhvbmUifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJSZXF1aXJlZCBmb3IgYWNjb3VudCB2ZXJpZmljYXRpb24ifQogICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyIrMSAoNTU1KSAwMDAtMDAwMCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ikhvcml6b250YWwgTGF5b3V0In0gLnN1YnRpdGxlPSR7IlBob25lIGlucHV0cyBhcnJhbmdlZCBob3Jpem9udGFsbHkifT4KICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXBob25lIAogICAgICAgICAgICAubGFiZWw9JHsiTW9iaWxlIn0gCiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAudmFsdWU9JHsiNDE1NTU1MTIzNCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSAKICAgICAgICAgICAgLmxhYmVsPSR7Ik9mZmljZSJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IisxICg4MDApIDU1NS0wMDAwIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcGhvbmU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJJbnRlcm5hdGlvbmFsIE51bWJlcnMifSAuc3VidGl0bGU9JHsiU3VwcG9ydHMgZm9ybWF0dGluZyBmb3IgbnVtYmVycyB3aXRoIGNvdW50cnkgY29kZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSAKICAgICAgICAgIC5sYWJlbD0keyJJbnRlcm5hdGlvbmFsIENvbnRhY3QifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBdXRvbWF0aWNhbGx5IGZvcm1hdHMgaW50ZXJuYXRpb25hbCBudW1iZXJzIn0KICAgICAgICAgIC52YWx1ZT0keyI0NDEyMzQ1Njc4OTAifQogICAgICAgID48L2RlZXMtaW5wdXQtcGhvbmU+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtcGhvbmUgCiAgICAgICAgICAubGFiZWw9JHsiRW1lcmdlbmN5IENvbnRhY3QifSAKICAgICAgICAgIC52YWx1ZT0keyI5MTEifQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRm9ybSBJbnRlZ3JhdGlvbiJ9IC5zdWJ0aXRsZT0keyJQaG9uZSBpbnB1dCBhcyBwYXJ0IG9mIGEgY29udGFjdCBmb3JtIn0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkZ1bGwgTmFtZSJ9IC5yZXF1aXJlZD0ke3RydWV9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtcGhvbmUgLmxhYmVsPSR7IlBob25lIE51bWJlciJ9IC5yZXF1aXJlZD0ke3RydWV9PjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkVtYWlsIn0gLmlucHV0VHlwZT0keyJlbWFpbCJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1waG9uZS9kZWVzLWlucHV0LXBob25lLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTI5ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMzMCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0UGhvbmUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LXBob25lIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF9mb3JtYXR0ZWRQaG9uZV9kZWNvcmF0b3JzOwogIGxldCBfZm9ybWF0dGVkUGhvbmVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9mb3JtYXR0ZWRQaG9uZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnM7CiAgbGV0IF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dFBob25lMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2Zvcm1hdHRlZFBob25lX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfX2VzRGVjb3JhdGUyOSh0aGlzLCBudWxsLCBfZm9ybWF0dGVkUGhvbmVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZm9ybWF0dGVkUGhvbmUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZvcm1hdHRlZFBob25lIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZvcm1hdHRlZFBob25lLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5mb3JtYXR0ZWRQaG9uZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9mb3JtYXR0ZWRQaG9uZV9pbml0aWFsaXplcnMsIF9mb3JtYXR0ZWRQaG9uZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI5KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjkodGhpcywgbnVsbCwgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBsYWNlaG9sZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwbGFjZWhvbGRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wbGFjZWhvbGRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGxhY2Vob2xkZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyOShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFBob25lMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMyMTsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI2Zvcm1hdHRlZFBob25lX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczMwKHRoaXMsIF9mb3JtYXR0ZWRQaG9uZV9pbml0aWFsaXplcnMsICIiKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgZm9ybWF0dGVkUGhvbmUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmb3JtYXR0ZWRQaG9uZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZvcm1hdHRlZFBob25lKHZhbHVlMikgewogICAgICB0aGlzLiNmb3JtYXR0ZWRQaG9uZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMCh0aGlzLCBfZm9ybWF0dGVkUGhvbmVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMwKHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMCh0aGlzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMwKHRoaXMsIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsICIrMSAoNTU1KSAxMjMtNDU2NyIpKTsKICAgIGdldCBwbGFjZWhvbGRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGxhY2Vob2xkZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAvKiBQaG9uZSBpbnB1dCBzcGVjaWZpYyBzdHlsZXMgY2FuIGdvIGhlcmUgKi8KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0+PC9kZWVzLWxhYmVsPgogICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgIC52YWx1ZT0ke3RoaXMuZm9ybWF0dGVkUGhvbmV9CiAgICAgICAgICAuZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgLnJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZH0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0ke3RoaXMucGxhY2Vob2xkZXJ9CiAgICAgICAgICBAaW5wdXQ9JHsoZXZlbnQpID0+IHRoaXMuaGFuZGxlUGhvbmVJbnB1dChldmVudCl9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAodGhpcy52YWx1ZSkgewogICAgICAgIHRoaXMuZm9ybWF0dGVkUGhvbmUgPSB0aGlzLmZvcm1hdFBob25lTnVtYmVyKHRoaXMudmFsdWUpOwogICAgICB9CiAgICAgIGNvbnN0IGlubmVySW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7CiAgICAgIGlmIChpbm5lcklucHV0ICYmIGlubmVySW5wdXQuY2hhbmdlU3ViamVjdCkgewogICAgICAgIGlubmVySW5wdXQuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gewogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVBob25lSW5wdXQoZXZlbnQpIHsKICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQ7CiAgICAgIGNvbnN0IGNsZWFuZWRWYWx1ZSA9IHRoaXMuY2xlYW5QaG9uZU51bWJlcihpbnB1dC52YWx1ZSk7CiAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0UGhvbmVOdW1iZXIoY2xlYW5lZFZhbHVlKTsKICAgICAgaWYgKGlucHV0LnZhbHVlICE9PSBmb3JtYXR0ZWQpIHsKICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IGlucHV0LnNlbGVjdGlvblN0YXJ0IHx8IDA7CiAgICAgICAgaW5wdXQudmFsdWUgPSBmb3JtYXR0ZWQ7CiAgICAgICAgY29uc3QgbmV3Q3Vyc29yUG9zID0gdGhpcy5jYWxjdWxhdGVDdXJzb3JQb3NpdGlvbihjbGVhbmVkVmFsdWUsIGZvcm1hdHRlZCwgY3Vyc29yUG9zaXRpb24pOwogICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKG5ld0N1cnNvclBvcywgbmV3Q3Vyc29yUG9zKTsKICAgICAgfQogICAgICB0aGlzLmZvcm1hdHRlZFBob25lID0gZm9ybWF0dGVkOwogICAgICB0aGlzLnZhbHVlID0gY2xlYW5lZFZhbHVlOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgIH0KICAgIGNsZWFuUGhvbmVOdW1iZXIodmFsdWUyKSB7CiAgICAgIHJldHVybiB2YWx1ZTIucmVwbGFjZSgvXEQvZywgIiIpOwogICAgfQogICAgZm9ybWF0UGhvbmVOdW1iZXIodmFsdWUyKSB7CiAgICAgIGNvbnN0IGNsZWFuZWQgPSB0aGlzLmNsZWFuUGhvbmVOdW1iZXIodmFsdWUyKTsKICAgICAgaWYgKGNsZWFuZWQubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybiAiIjsKICAgICAgaWYgKGNsZWFuZWQubGVuZ3RoIDw9IDMpCiAgICAgICAgcmV0dXJuIGNsZWFuZWQ7CiAgICAgIGlmIChjbGVhbmVkLmxlbmd0aCA8PSA2KQogICAgICAgIHJldHVybiBgKCR7Y2xlYW5lZC5zbGljZSgwLCAzKX0pICR7Y2xlYW5lZC5zbGljZSgzKX1gOwogICAgICBpZiAoY2xlYW5lZC5sZW5ndGggPD0gMTApCiAgICAgICAgcmV0dXJuIGAoJHtjbGVhbmVkLnNsaWNlKDAsIDMpfSkgJHtjbGVhbmVkLnNsaWNlKDMsIDYpfS0ke2NsZWFuZWQuc2xpY2UoNil9YDsKICAgICAgcmV0dXJuIGArJHtjbGVhbmVkLnNsaWNlKDAsIGNsZWFuZWQubGVuZ3RoIC0gMTApfSAoJHtjbGVhbmVkLnNsaWNlKC0xMCwgLTcpfSkgJHtjbGVhbmVkLnNsaWNlKC03LCAtNCl9LSR7Y2xlYW5lZC5zbGljZSgtNCl9YDsKICAgIH0KICAgIGNhbGN1bGF0ZUN1cnNvclBvc2l0aW9uKGNsZWFuZWQsIGZvcm1hdHRlZCwgb2xkUG9zKSB7CiAgICAgIGxldCBmb3JtYXR0aW5nQ2hhcnMgPSAwOwogICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBvbGRQb3MgJiYgaTExIDwgZm9ybWF0dGVkLmxlbmd0aDsgaTExKyspIHsKICAgICAgICBpZiAoIS9cZC8udGVzdChmb3JtYXR0ZWRbaTExXSkpIHsKICAgICAgICAgIGZvcm1hdHRpbmdDaGFycysrOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gTWF0aC5taW4ob2xkUG9zICsgZm9ybWF0dGluZ0NoYXJzLCBmb3JtYXR0ZWQubGVuZ3RoKTsKICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgICB0aGlzLmZvcm1hdHRlZFBob25lID0gdGhpcy5mb3JtYXRQaG9uZU51bWJlcih2YWx1ZTIpOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzAodGhpcywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dFBob25lMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10b2dnbGUvZGVlcy1pbnB1dC10b2dnbGUuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMyMiA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgdG9nZ2xlQWxsT25CdG4gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiN0b2dnbGUtYWxsLW9uIik7CiAgY29uc3QgdG9nZ2xlQWxsT2ZmQnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjdG9nZ2xlLWFsbC1vZmYiKTsKICBjb25zdCBmZWF0dXJlVG9nZ2xlcyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiLmZlYXR1cmUtdG9nZ2xlcyBkZWVzLWlucHV0LXRvZ2dsZSIpOwogIGlmICh0b2dnbGVBbGxPbkJ0biAmJiB0b2dnbGVBbGxPZmZCdG4pIHsKICAgIHRvZ2dsZUFsbE9uQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBmZWF0dXJlVG9nZ2xlcy5mb3JFYWNoKCh0b2dnbGUpID0+IHsKICAgICAgICBpZiAoIXRvZ2dsZS5kaXNhYmxlZCAmJiAhdG9nZ2xlLnJlcXVpcmVkKSB7CiAgICAgICAgICB0b2dnbGUudmFsdWUgPSB0cnVlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICAgIHRvZ2dsZUFsbE9mZkJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgZmVhdHVyZVRvZ2dsZXMuZm9yRWFjaCgodG9nZ2xlKSA9PiB7CiAgICAgICAgaWYgKCF0b2dnbGUuZGlzYWJsZWQgJiYgIXRvZ2dsZS5yZXF1aXJlZCkgewogICAgICAgICAgdG9nZ2xlLnZhbHVlID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0KfX0+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CgogICAgICAgIGRlZXMtcGFuZWwgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICB9CgogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KCiAgICAgICAgLnRvZ2dsZS1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICB9CgogICAgICAgIC5ob3Jpem9udGFsLXRvZ2dsZXMgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGdhcDogMzJweDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICB9CgogICAgICAgIC5pbnRlcmFjdGl2ZS1zZWN0aW9uIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICB9CgogICAgICAgIC5vdXRwdXQtdGV4dCB7CiAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjEwIDQwJSA4MCUpIil9OwogICAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk4JSkiLCAiaHNsKDIxNSAyMC4yJSAxMS44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgICAgIH0KCiAgICAgICAgLnNldHRpbmdzLXNlY3Rpb24gewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCAiaHNsKDAgMCUgNyUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgIH0KCiAgICAgICAgLmJ1dHRvbi1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIH0KCiAgICAgICAgLmZlYXR1cmUtdG9nZ2xlcyB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIH0KCiAgICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICB9CgogICAgICAgIC5kcmFnLWhpbnQgewogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgVG9nZ2xlIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBvbi9vZmYgdG9nZ2xlIHN3aXRjaCB3aXRoIGRyYWcgc3VwcG9ydCJ9PgogICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkVuYWJsZSBmZWF0dXJlIn0KICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5rZXk9JHsiYmFzaWMifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJBY3RpdmUgdG9nZ2xlIn0KICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgLmtleT0keyJhY3RpdmUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJXaXRoIGRlc2NyaXB0aW9uIn0KICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGlzIHRvZ2dsZSBoYXMgYWRkaXRpb25hbCBoZWxwZXIgdGV4dCBleHBsYWluaW5nIGl0cyBwdXJwb3NlIn0KICAgICAgICAgICAgLmtleT0keyJ3aXRoRGVzYyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cCBjbGFzcz0iZHJhZy1oaW50Ij5UaXA6IFlvdSBjYW4gZHJhZyB0aGUgdG9nZ2xlIGtub2IgdG8gc3dpdGNoIHN0YXRlczwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlRvZ2dsZSBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHRvZ2dsZSBzdGF0ZXMgYW5kIGNvbmZpZ3VyYXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0idG9nZ2xlLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiRGVmYXVsdCAob2ZmKSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJFbmFibGVkIChvbikifQogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCAob2ZmKSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCAob24pIn0KICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiUmVxdWlyZWQgKGFsd2F5cyBvbikifQogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhpcyB0b2dnbGUgY2Fubm90IGJlIHR1cm5lZCBvZmYifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJUb2dnbGVzIGFycmFuZ2VkIGhvcml6b250YWxseSBmb3IgY29tcGFjdCBpbnRlcmZhY2VzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC10b2dnbGVzIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiV2lGaSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJCbHVldG9vdGgifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkdQUyJ9CiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJORkMifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlNldHRpbmdzIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiVG9nZ2xlcyBpbiBhIHR5cGljYWwgc2V0dGluZ3MgY29udGV4dCJ9PgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgICAgPGg0IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Ob3RpZmljYXRpb24gU2V0dGluZ3M8L2g0PgoKICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1ncm91cCI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJQdXNoIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlJlY2VpdmUgcHVzaCBub3RpZmljYXRpb25zIG9uIHlvdXIgZGV2aWNlIn0KICAgICAgICAgICAgICAua2V5PSR7InB1c2gifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJFbWFpbCBub3RpZmljYXRpb25zIn0KICAgICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJHZXQgaW1wb3J0YW50IHVwZGF0ZXMgdmlhIGVtYWlsIn0KICAgICAgICAgICAgICAua2V5PSR7ImVtYWlsIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgICAubGFiZWw9JHsiU291bmQifQogICAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJQbGF5IGEgc291bmQgZm9yIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgICAgIC5rZXk9JHsic291bmQifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJWaWJyYXRpb24ifQogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlZpYnJhdGUgZm9yIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgICAgIC5rZXk9JHsidmlicmF0aW9uIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkZlYXR1cmUgVG9nZ2xlcyJ9IC5zdWJ0aXRsZT0keyJCYXRjaCBvcGVyYXRpb25zIG9uIG11bHRpcGxlIHRvZ2dsZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIGlkPSJ0b2dnbGUtYWxsLW9uIiB0eXBlPSJzZWNvbmRhcnkiPkVuYWJsZSBBbGw8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIGlkPSJ0b2dnbGUtYWxsLW9mZiIgdHlwZT0ic2Vjb25kYXJ5Ij5EaXNhYmxlIEFsbDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtdG9nZ2xlcyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgICAubGFiZWw9JHsiRGFyayBNb2RlIn0KICAgICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAgIC5rZXk9JHsiZGFya01vZGUifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJBdXRvLXNhdmUifQogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmtleT0keyJhdXRvU2F2ZSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgICAgLmxhYmVsPSR7IlNwZWxsIGNoZWNrIn0KICAgICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgICAua2V5PSR7InNwZWxsQ2hlY2sifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJEZXZlbG9wZXIgbW9kZSJ9CiAgICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLmtleT0keyJkZXZNb2RlIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgICAubGFiZWw9JHsiQmV0YSBmZWF0dXJlcyJ9CiAgICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLmtleT0keyJiZXRhIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkludGVyYWN0aXZlIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiVG9nZ2xlIHRvIHNlZSB2YWx1ZSBjaGFuZ2VzIGluIHJlYWwtdGltZSJ9PgogICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkFpcnBsYW5lIG1vZGUifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgQG5ld1ZhbHVlPSR7KGV2ZW50KSA9PiB7CiAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FpcnBsYW5lLW91dHB1dCIpOwogIGlmIChvdXRwdXQpIHsKICAgIG91dHB1dC50ZXh0Q29udGVudCA9IGBBaXJwbGFuZSBtb2RlOiAke2V2ZW50LmRldGFpbCA/ICJPTiIgOiAiT0ZGIn1gOwogIH0KfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiRG8gbm90IGRpc3R1cmIifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgQG5ld1ZhbHVlPSR7KGV2ZW50KSA9PiB7CiAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2RuZC1vdXRwdXQiKTsKICBpZiAob3V0cHV0KSB7CiAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBgRG8gbm90IGRpc3R1cmI6ICR7ZXZlbnQuZGV0YWlsID8gIkVOQUJMRUQiIDogIkRJU0FCTEVEIn1gOwogIH0KfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcmFjdGl2ZS1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgaWQ9ImFpcnBsYW5lLW91dHB1dCIgY2xhc3M9Im91dHB1dC10ZXh0Ij5BaXJwbGFuZSBtb2RlOiBPRkY8L2Rpdj4KICAgICAgICAgIDxkaXYgaWQ9ImRuZC1vdXRwdXQiIGNsYXNzPSJvdXRwdXQtdGV4dCIgc3R5bGU9Im1hcmdpbi10b3A6IDhweDsiPkRvIG5vdCBkaXN0dXJiOiBESVNBQkxFRDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10b2dnbGUvZGVlcy1pbnB1dC10b2dnbGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMzAgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczMxID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRUb2dnbGUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LXRvZ2dsZSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0VG9nZ2xlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3ZhbHVlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMzAodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFRvZ2dsZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzMSh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBmYWxzZSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8qKgogICAgICogS25vYiBwb3NpdGlvbiB0cmFja2luZyAoMCA9IG9mZiwgbWF4VHJhdmVsID0gb24pCiAgICAgKi8KICAgIGN1cnJlbnRYID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzEodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgMCk7CiAgICAvKioKICAgICAqIERyYWcgc3RhdGUKICAgICAqLwogICAgaXNEcmFnZ2luZyA9IGZhbHNlOwogICAgaGFzRHJhZ2dlZCA9IGZhbHNlOwogICAgc3RhcnRYID0gMDsKICAgIC8vIFRvZ2dsZSBkaW1lbnNpb25zCiAgICB0cmFja1dpZHRoID0gMzY7CiAgICB0cmFja0hlaWdodCA9IDIwOwogICAga25vYlNpemUgPSAxNDsKICAgIHBhZGRpbmcgPSAyOwogICAgbWF4VHJhdmVsID0gMTY7CiAgICAvLyB0cmFja1dpZHRoIC0ga25vYlNpemUgLSAocGFkZGluZyAqIDIpIC0gYm9yZGVyCiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgdGhpcy5sYWJlbFBvc2l0aW9uID0gInJpZ2h0IjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtdHJhY2sgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBtYXJnaW4tdG9wOiAxcHg7CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyOmhvdmVyIC50b2dnbGUtdHJhY2sgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWx1ZV0pIC50b2dnbGUtdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICB9CgogICAgICAudG9nZ2xlLXRyYWNrOmZvY3VzLXZpc2libGUgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC50b2dnbGUta25vYiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMnB4OwogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA3cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjE1cyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgdG91Y2gtYWN0aW9uOiBub25lOwogICAgICB9CgogICAgICAudG9nZ2xlLWtub2IuZHJhZ2dpbmcgewogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbHVlXSkgLnRvZ2dsZS1rbm9iIHsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLyogRGlzYWJsZWQgc3RhdGUgKi8KICAgICAgLm1haW5jb250YWluZXIuZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAudG9nZ2xlLXRyYWNrLmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAvKiBSZXF1aXJlZCBzdGF0ZSAobG9ja2VkIG9uKSAqLwogICAgICA6aG9zdChbcmVxdWlyZWRdW3ZhbHVlXSkgLnRvZ2dsZS10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA2MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDQ5LjglKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNjEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA0OS44JSkiKX07CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW3JlcXVpcmVkXVt2YWx1ZV0pIC50b2dnbGUta25vYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgNzAlKSIpfTsKICAgICAgfQoKICAgICAgLyogTGFiZWwgKi8KICAgICAgLmxhYmVsLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMnB4OwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyOmhvdmVyIC50b2dnbGUtbGFiZWwgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyLmRpc2FibGVkOmhvdmVyIC50b2dnbGUtbGFiZWwgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAvKiBEZXNjcmlwdGlvbiAqLwogICAgICAuZGVzY3JpcHRpb24tdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIgJHt0aGlzLmRpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSIgQGNsaWNrPSIke3RoaXMuaGFuZGxlQ2xpY2t9Ij4KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS10cmFjayAke3RoaXMuZGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9IgogICAgICAgICAgICB0YWJpbmRleD0iJHt0aGlzLmRpc2FibGVkID8gIi0xIiA6ICIwIn0iCiAgICAgICAgICAgIEBrZXlkb3duPSIke3RoaXMuaGFuZGxlS2V5ZG93bn0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICBjbGFzcz0idG9nZ2xlLWtub2IiCiAgICAgICAgICAgICAgc3R5bGU9ImxlZnQ6ICR7dGhpcy5wYWRkaW5nICsgdGhpcy5jdXJyZW50WH1weDsiCiAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSIke3RoaXMub25Qb2ludGVyRG93bn0iCiAgICAgICAgICAgICAgQHBvaW50ZXJtb3ZlPSIke3RoaXMub25Qb2ludGVyTW92ZX0iCiAgICAgICAgICAgICAgQHBvaW50ZXJ1cD0iJHt0aGlzLm9uUG9pbnRlclVwfSIKICAgICAgICAgICAgICBAcG9pbnRlcmNhbmNlbD0iJHt0aGlzLm9uUG9pbnRlclVwfSIKICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGl2IGNsYXNzPSJ0b2dnbGUtbGFiZWwiPiR7dGhpcy5sYWJlbH08L2Rpdj5gIDogIiJ9CiAgICAgICAgICAgICR7dGhpcy5kZXNjcmlwdGlvbiA/IGIyYDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uLXRleHQiPiR7dGhpcy5kZXNjcmlwdGlvbn08L2Rpdj5gIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBhd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMudmFsdWUpIHsKICAgICAgICB0aGlzLnZhbHVlID0gdHJ1ZTsKICAgICAgfQogICAgICB0aGlzLmN1cnJlbnRYID0gdGhpcy52YWx1ZSA/IHRoaXMubWF4VHJhdmVsIDogMDsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICAvKioKICAgICAqIENsaWNrIGhhbmRsZXIgLSB0b2dnbGVzIHRoZSB2YWx1ZQogICAgICovCiAgICBhc3luYyBoYW5kbGVDbGljayhldmVudCkgewogICAgICBpZiAodGhpcy5pc0RyYWdnaW5nIHx8IHRoaXMuaGFzRHJhZ2dlZCkgewogICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7CiAgICAgICAgdGhpcy5jdXJyZW50WCA9IHRoaXMubWF4VHJhdmVsOwogICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyMTEpID0+IHNldFRpbWVvdXQocjExLCAxMCkpOwogICAgICAgIHRoaXMuY3VycmVudFggPSB0aGlzLm1heFRyYXZlbCAtIDM7CiAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgYXdhaXQgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMTUwKTsKICAgICAgICB0aGlzLmN1cnJlbnRYID0gdGhpcy5tYXhUcmF2ZWw7CiAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWU7CiAgICAgIHRoaXMuY3VycmVudFggPSB0aGlzLnZhbHVlID8gdGhpcy5tYXhUcmF2ZWwgOiAwOwogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibmV3VmFsdWUiLCB7CiAgICAgICAgZGV0YWlsOiB0aGlzLnZhbHVlLAogICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgfSkpOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCkudGhlbigoKSA9PiB7CiAgICAgICAgdGhpcy5oYXNEcmFnZ2VkID0gZmFsc2U7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBQb2ludGVyIGRvd24gLSBzdGFydCBkcmFnZ2luZwogICAgICovCiAgICBvblBvaW50ZXJEb3duKGV2ZW50KSB7CiAgICAgIGlmICh0aGlzLnJlcXVpcmVkIHx8IHRoaXMuZGlzYWJsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTsKICAgICAgdGhpcy5zdGFydFggPSBldmVudC5jbGllbnRYIC0gdGhpcy5jdXJyZW50WDsKICAgICAgZXZlbnQudGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7CiAgICB9CiAgICAvKioKICAgICAqIFBvaW50ZXIgbW92ZSAtIHRyYWNrIGRyYWcgcG9zaXRpb24KICAgICAqLwogICAgb25Qb2ludGVyTW92ZShldmVudCkgewogICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5ld1ggPSBldmVudC5jbGllbnRYIC0gdGhpcy5zdGFydFg7CiAgICAgIHRoaXMuaGFzRHJhZ2dlZCA9IHRydWU7CiAgICAgIGNvbnN0IHRvZ2dsZUtub2IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50b2dnbGUta25vYiIpOwogICAgICBpZiAodG9nZ2xlS25vYikgewogICAgICAgIHRvZ2dsZUtub2IuY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKTsKICAgICAgfQogICAgICB0aGlzLmN1cnJlbnRYID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obmV3WCwgdGhpcy5tYXhUcmF2ZWwpKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICAvKioKICAgICAqIFBvaW50ZXIgdXAgLSBjb21wbGV0ZSBkcmFnIGFuZCBzbmFwIHRvIG5lYXJlc3Qgc2lkZQogICAgICovCiAgICBvblBvaW50ZXJVcChldmVudCkgewogICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykKICAgICAgICByZXR1cm47CiAgICAgIGV2ZW50LnRhcmdldC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTsKICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7CiAgICAgIGlmICghdGhpcy5oYXNEcmFnZ2VkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHRvZ2dsZUtub2IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50b2dnbGUta25vYiIpOwogICAgICBpZiAodG9nZ2xlS25vYikgewogICAgICAgIHRvZ2dsZUtub2IuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciKTsKICAgICAgfQogICAgICBjb25zdCBtaWRwb2ludCA9IHRoaXMubWF4VHJhdmVsIC8gMjsKICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY3VycmVudFggPiBtaWRwb2ludDsKICAgICAgdGhpcy5jdXJyZW50WCA9IHRoaXMudmFsdWUgPyB0aGlzLm1heFRyYXZlbCA6IDA7CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJuZXdWYWx1ZSIsIHsKICAgICAgICBkZXRhaWw6IHRoaXMudmFsdWUsCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigwKS50aGVuKCgpID0+IHsKICAgICAgICB0aGlzLmhhc0RyYWdnZWQgPSBmYWxzZTsKICAgICAgfSk7CiAgICB9CiAgICAvKioKICAgICAqIFN5bmMga25vYiBwb3NpdGlvbiB3aGVuIHZhbHVlIGlzIGNoYW5nZWQgZXh0ZXJuYWxseQogICAgICovCiAgICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJ2YWx1ZSIpICYmICF0aGlzLmlzRHJhZ2dpbmcgJiYgIXRoaXMuaGFzRHJhZ2dlZCkgewogICAgICAgIHRoaXMuY3VycmVudFggPSB0aGlzLnZhbHVlID8gdGhpcy5tYXhUcmF2ZWwgOiAwOwogICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEtleWJvYXJkIHN1cHBvcnQKICAgICAqLwogICAgaGFuZGxlS2V5ZG93bihldmVudCkgewogICAgICBpZiAoZXZlbnQua2V5ID09PSAiICIgfHwgZXZlbnQua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGV2ZW50KTsKICAgICAgfQogICAgfQogICAgLy8gRGVlc0lucHV0QmFzZSBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlQXJnKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZUFyZzsKICAgIH0KICAgIGZvY3VzKCkgewogICAgICBjb25zdCB0cmFjazIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50b2dnbGUtdHJhY2siKTsKICAgICAgaWYgKHRyYWNrMikgewogICAgICAgIHRyYWNrMi5mb2N1cygpOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczMxKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSW5wdXRUb2dnbGUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXR5cGVsaXN0L2RlZXMtaW5wdXQtdHlwZWxpc3QuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMyMyA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5ob3Jpem9udGFsLWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmluZm8tYm94IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2UzZjJmZDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAjMTk3NmQyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAuaW5mby1ib3ggewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMWUzYTVmOwogICAgICAgICAgICBjb2xvcjogIzkwY2FmOTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBUeXBlIExpc3QifSAuc3VidGl0bGU9JHsiQWRkIGFuZCByZW1vdmUgaXRlbXMgZnJvbSBhIGxpc3QifT4KICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlRhZ3MifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFkZCB0YWdzIGJ5IHR5cGluZyBhbmQgcHJlc3NpbmcgRW50ZXIifQogICAgICAgICAgLnZhbHVlPSR7WyJqYXZhc2NyaXB0IiwgInR5cGVzY3JpcHQiLCAid2ViLWNvbXBvbmVudHMiXX0KICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAubGFiZWw9JHsiVGVhbSBNZW1iZXJzIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBZGQgZW1haWwgYWRkcmVzc2VzIG9mIHRlYW0gbWVtYmVycyJ9CiAgICAgICAgICAudmFsdWU9JHtbImFsaWNlQGV4YW1wbGUuY29tIiwgImJvYkBleGFtcGxlLmNvbSJdfQogICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJTa2lsbHMgJiBLZXl3b3JkcyJ9IC5zdWJ0aXRsZT0keyJNYW5hZ2UgbGlzdHMgb2Ygc2tpbGxzIGFuZCBrZXl3b3JkcyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAubGFiZWw9JHsiWW91ciBTa2lsbHMifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7Ikxpc3QgeW91ciBwcm9mZXNzaW9uYWwgc2tpbGxzIn0KICAgICAgICAgIC52YWx1ZT0ke1siSFRNTCIsICJDU1MiLCAiSmF2YVNjcmlwdCIsICJOb2RlLmpzIiwgIlJlYWN0Il19CiAgICAgICAgPjwvZGVlcy1pbnB1dC10eXBlbGlzdD4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJDYXRlZ29yaWVzIn0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC52YWx1ZT0ke1siVGVjaG5vbG9neSIsICJEZXNpZ24iLCAiQnVzaW5lc3MiXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJLZXl3b3JkcyJ9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAudmFsdWU9JHtbImlubm92YXRpb24iLCAic3RhcnR1cCIsICJncm93dGgiXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJSZXF1aXJlZCAmIERpc2FibGVkIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgaW5wdXQgc3RhdGVzIGZvciB2YWxpZGF0aW9uIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJQcm9qZWN0IERlcGVuZGVuY2llcyJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiTGlzdCBhbGwgcmVxdWlyZWQgbnBtIHBhY2thZ2VzIn0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAudmFsdWU9JHtbIkBkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCIsICJAZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzIl19CiAgICAgICAgPjwvZGVlcy1pbnB1dC10eXBlbGlzdD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlN5c3RlbSBUYWdzIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGVzZSB0YWdzIGFyZSBtYW5hZ2VkIGJ5IHRoZSBzeXN0ZW0ifQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC52YWx1ZT0ke1sic3lzdGVtIiwgInByb3RlY3RlZCIsICJyZWFkb25seSJdfQogICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJBcnRpY2xlIFB1Ymxpc2hpbmcgRm9ybSJ9IC5zdWJ0aXRsZT0keyJDb21wbGV0ZSBmb3JtIHdpdGggdGFnIG1hbmFnZW1lbnQifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiQXJ0aWNsZSBUaXRsZSJ9IC5yZXF1aXJlZD0ke3RydWV9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLmxhYmVsPSR7IlN1bW1hcnkifSAKICAgICAgICAgICAgLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJCcmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgYXJ0aWNsZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgICAubGFiZWw9JHsiVGFncyJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBZGQgcmVsZXZhbnQgdGFncyBmb3IgYmV0dGVyIGRpc2NvdmVyYWJpbGl0eSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke1sidHV0b3JpYWwiLCAid2ViLWRldmVsb3BtZW50Il19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgICAgLmxhYmVsPSR7IkNvLUF1dGhvcnMifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGVtYWlsIGFkZHJlc3NlcyBvZiBjby1hdXRob3JzIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iaW5mby1ib3giPgogICAgICAgICAgPHN0cm9uZz5UaXA6PC9zdHJvbmc+IFR5cGUgYSB2YWx1ZSBhbmQgcHJlc3MgRW50ZXIgdG8gYWRkIGl0IHRvIHRoZSBsaXN0LiBDbGljayBvbiBhbnkgaXRlbSB0byByZW1vdmUgaXQuCiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXR5cGVsaXN0L2RlZXMtaW5wdXQtdHlwZWxpc3QuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMzEgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczMyID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRUeXBlbGlzdCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtdHlwZWxpc3QiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX3ZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF92YWx1ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbnB1dFZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF9pbnB1dFZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5wdXRWYWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXRUeXBlbGlzdDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfaW5wdXRWYWx1ZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGUzMSh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMxKHRoaXMsIG51bGwsIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlucHV0VmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlucHV0VmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5wdXRWYWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaW5wdXRWYWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgX2lucHV0VmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFR5cGVsaXN0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjM7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzMih0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpbnB1dFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMih0aGlzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMyKHRoaXMsIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBpbnB1dFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jaW5wdXRWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlucHV0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lucHV0VmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgfQogICAgICAubWFpbmJveCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMyMjIyMjIiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBib3JkZXItdG9wOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCAiMXB4IHNvbGlkICNmZmZmZmYxMCIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCAiMXB4IHNvbGlkICMyMjIiKX07CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCAiMXB4IHNvbGlkICNmZmZmZmYxMCIpfTsKICAgICAgICBib3JkZXItbGVmdDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjFweCBzb2xpZCAjQ0NDIiwgIjFweCBzb2xpZCAjZmZmZmZmMTAiKX07CiAgICAgICAgYm94LXNoYWRvdzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjBweCAxcHggNHB4IHJnYmEoMCwwLDAsMC4zKSIsICJub25lIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICAKICAgICAgLm1haW5ib3g6aG92ZXIgewogICAgICAgIGZpbHRlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImJyaWdodG5lc3MoMC45OCkiLCAiYnJpZ2h0bmVzcygxLjA1KSIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1haW5ib3g6Zm9jdXMtd2l0aGluIHsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDY5ZjIiLCAiIzAwODRmZiIpfTsKICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDsKICAgICAgfQoKICAgICAgLnRhZ3MgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAubm90YWdzIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNWY1ZjUiLCAiIzE4MTgxOCIpfTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogaW5oZXJpdDsKICAgICAgICBwYWRkaW5nOiAwcHggMTZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4OwogICAgICAgIGhlaWdodDogMHB4OwogICAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjJzOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMzMzIil9OwogICAgICB9CgogICAgICBpbnB1dDpmb2N1cyB7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMxYTFhMWEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIGlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgIH0KCiAgICAgIC50YWcgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U4ZjVlOSIsICIjMmQzYTJkIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzJlN2QzMiIsICIjODFjNzg0Iil9OwogICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBtYXJnaW46IDNweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2M4ZTZjOSIsICIjMWI1ZTIwIil9OwogICAgICB9CiAgICAgIAogICAgICAudGFnOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2M4ZTZjOSIsICIjM2Q0ZjNkIil9OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgICAgfQoKICAgICAgLnRhZyAucmVtb3ZlIHsKICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzOwogICAgICB9CgogICAgICAudGFnIC5yZW1vdmU6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjYzYyODI4IiwgIiNlZjUzNTAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIERpc2FibGVkIHN0YXRlICovCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5tYWluYm94IHsKICAgICAgICBvcGFjaXR5OiAwLjY7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRhZ3MgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC50YWcgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbZGlzYWJsZWRdKSBpbnB1dCB7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YwZjBmMCIsICIjMWExYTFhIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkZWVzLWxhYmVsIC5sYWJlbD0ke3RoaXMubGFiZWx9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259PjwvZGVlcy1sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhZ3MiIEBjbGljaz0keygpID0+IHsKICAgICAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKS5mb2N1cygpOwogICAgICB9fT4KICAgICAgICAgICAgJHt0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCA/IGIyYDxkaXYgY2xhc3M9Im5vdGFncyI+Tm8gdGFncyB5ZXQ8L2Rpdj5gIDogdGhpcy52YWx1ZS5tYXAoKHRhZykgPT4gYjJgCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyI+CiAgICAgICAgICAgICAgICAgICAgICAke3RhZ30KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZW1vdmUiIEBjbGljaz0keyhlMTEpID0+IHsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgdGhpcy5yZW1vdmVUYWcodGFnKTsKICAgICAgfX0+w5c8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJUeXBlLCBwcmVzcyBFbnRlciB0byBhZGQgaXQuLi4iCiAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuaW5wdXRWYWx1ZX0KICAgICAgICAgICAgQGlucHV0PSR7KGUxMSkgPT4gewogICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IGUxMS50YXJnZXQudmFsdWU7CiAgICAgIH19CiAgICAgICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gewogICAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiICYmIHRoaXMuaW5wdXRWYWx1ZS50cmltKCkpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5hZGRUYWcodGhpcy5pbnB1dFZhbHVlLnRyaW0oKSk7CiAgICAgICAgfQogICAgICB9fQogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgLz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYWRkVGFnKHRhZykgewogICAgICBpZiAoIXRoaXMudmFsdWUuaW5jbHVkZXModGFnKSkgewogICAgICAgIHRoaXMudmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgdGFnXTsKICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSAiIjsKICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgfQogICAgfQogICAgcmVtb3ZlVGFnKHRhZykgewogICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5maWx0ZXIoKHQ5KSA9PiB0OSAhPT0gdGFnKTsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczMyKHRoaXMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzIoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dFR5cGVsaXN0MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdGFibGUvZGVlcy10YWJsZS5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzI0ID0gKCkgPT4gYjJgCiAgPHN0eWxlPgogICAgJHtpYAogICAgICAuZGVtb1dyYXBwZXIgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgwIDAlIDUlKSIpfTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNDhweDsKICAgICAgfQogICAgICAuZGVtby10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KICAgICAgLmRlbW8tZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQogICAgICAudGhlbWUtdG9nZ2xlIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAxNnB4OwogICAgICAgIHJpZ2h0OiAxNnB4OwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vV3JhcHBlciI+CiAgICA8ZGVlcy1idXR0b24gY2xhc3M9InRoZW1lLXRvZ2dsZSIgQGNsaWNrPSR7KCkgPT4gewogIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiYnJpZ2h0Iik7CiAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrIik7Cn19PlRvZ2dsZSBUaGVtZTwvZGVlcy1idXR0b24+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkJhc2ljIFRhYmxlIHdpdGggQWN0aW9uczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkEgc3RhbmRhcmQgdGFibGUgd2l0aCByb3cgYWN0aW9ucywgZWRpdGFibGUgZmllbGRzLCBhbmQgY29udGV4dCBtZW51IHN1cHBvcnQuIERvdWJsZS1jbGljayBvbiBkZXNjcmlwdGlvbnMgdG8gZWRpdC4gR3JpZCBsaW5lcyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IkN1cnJlbnQgQWNjb3VudCBTdGF0ZW1lbnQiCiAgICAgICAgICBoZWFkaW5nMj0iQnVucSAtIFBheW1lbnQgQWNjb3VudCAyIC0gQXByaWwgMjAyMSIKICAgICAgICAgIC5lZGl0YWJsZUZpZWxkcz0iJHtbImRlc2NyaXB0aW9uIl19IgogICAgICAgICAgLmRhdGE9JHtbCiAgewogICAgZGF0ZTogIjIwMjEtMDQtMDEiLAogICAgYW1vdW50OiAiMjQ2NC42NSBcdTIwQUMiLAogICAgZGVzY3JpcHRpb246ICJQcmludGluZyBQYXBlciAoT2ZmaWNlIFN1cHBsaWVzKSAtIFNUQVBMRVMgQlJFTUVOIgogIH0sCiAgewogICAgZGF0ZTogIjIwMjEtMDQtMDIiLAogICAgYW1vdW50OiAiMTY1LjY1IFx1MjBBQyIsCiAgICBkZXNjcmlwdGlvbjogIkxvZ2l0ZWNoIE1vdXNlIChIYXJkd2FyZSkgLSBsb2dpLmNvbSBPbmxpbmVTaG9wIgogIH0sCiAgewogICAgZGF0ZTogIjIwMjEtMDQtMDMiLAogICAgYW1vdW50OiAiMjk5OSwwMCBcdTIwQUMiLAogICAgZGVzY3JpcHRpb246ICJNYWNib29rIFBybyAxNmluY2ggKEhhcmR3YXJlKSAtIEFwcGxlLmRlIE9ubGluZVNob3AiCiAgfSwKICB7CiAgICBkYXRlOiAiMjAyMS0wNC0wMSIsCiAgICBhbW91bnQ6ICIyNDY0LjY1IFx1MjBBQyIsCiAgICBkZXNjcmlwdGlvbjogIk9mZmljZS1TdXBwbGllcyAtIFNUQVBMRVMgQlJFTUVOIgogIH0sCiAgewogICAgZGF0ZTogIjIwMjEtMDQtMDEiLAogICAgYW1vdW50OiAiMjQ2NC42NSBcdTIwQUMiLAogICAgZGVzY3JpcHRpb246ICJPZmZpY2UtU3VwcGxpZXMgLSBTVEFQTEVTIEJSRU1FTiIKICB9Cl19CiAgICAgICAgICBkYXRhTmFtZT0idHJhbnNhY3Rpb25zIgogICAgICAgICAgLmRhdGFBY3Rpb25zPSIke1sKICB7CiAgICBuYW1lOiAidXBsb2FkIiwKICAgIGljb25OYW1lOiAiYmVsbCIsCiAgICB1c2VUYWJsZUJlaGF2aW91cjogInVwbG9hZCIsCiAgICB0eXBlOiBbImluUm93Il0sCiAgICBhY3Rpb25GdW5jOiBhc3luYyAob3B0aW9uc0FyZykgPT4gewogICAgICBhbGVydChvcHRpb25zQXJnLml0ZW0uYW1vdW50KTsKICAgIH0KICB9LAogIHsKICAgIG5hbWU6ICJ2aXNpYmlsaXR5IiwKICAgIGljb25OYW1lOiAiY29weSIsCiAgICB0eXBlOiBbImluUm93Il0sCiAgICB1c2VUYWJsZUJlaGF2aW91cjogInByZXZpZXciLAogICAgYWN0aW9uRnVuYzogYXN5bmMgKGl0ZW1BcmcpID0+IHsKICAgIH0KICB9LAogIHsKICAgIG5hbWU6ICJjcmVhdGUgbmV3IiwKICAgIGljb25OYW1lOiAiaW5zdGFncmFtIiwKICAgIHR5cGU6IFsiaGVhZGVyIl0sCiAgICB1c2VUYWJsZUJlaGF2aW91cjogInByZXZpZXciLAogICAgYWN0aW9uRnVuYzogYXN5bmMgKGl0ZW1BcmcpID0+IHsKICAgIH0KICB9LAogIHsKICAgIG5hbWU6ICJ0byBnYWxsZXJ5IiwKICAgIGljb25OYW1lOiAibWVzc2FnZSIsCiAgICB0eXBlOiBbImZvb3RlciJdLAogICAgdXNlVGFibGVCZWhhdmlvdXI6ICJwcmV2aWV3IiwKICAgIGFjdGlvbkZ1bmM6IGFzeW5jIChpdGVtQXJnKSA9PiB7CiAgICB9CiAgfSwKICB7CiAgICBuYW1lOiAiY29weSIsCiAgICBpY29uTmFtZTogImNvcHlTb2xpZCIsCiAgICB0eXBlOiBbImNvbnRleHRtZW51IiwgImluUm93Il0sCiAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfSwKICB7CiAgICBuYW1lOiAiZWRpdCAoZnJvbSBkZW1vKSIsCiAgICBpY29uTmFtZTogInBlblRvU3F1YXJlIiwKICAgIHR5cGU6IFsiY29udGV4dG1lbnUiXSwKICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9LAogIHsKICAgIG5hbWU6ICJwYXN0ZSIsCiAgICBpY29uTmFtZTogInBhc3RlU29saWQiLAogICAgdHlwZTogWyJjb250ZXh0bWVudSJdLAogICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0sCiAgewogICAgbmFtZTogInByZXZpZXciLAogICAgdHlwZTogWyJkb3VibGVDbGljayIsICJjb250ZXh0bWVudSJdLAogICAgaWNvbk5hbWU6ICJleWUiLAogICAgYWN0aW9uRnVuYzogYXN5bmMgKGl0ZW1BcmcpID0+IHsKICAgICAgYWxlcnQoaXRlbUFyZy5pdGVtLmFtb3VudCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KXX0iCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VGFibGUgd2l0aCBWZXJ0aWNhbCBMaW5lczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkVuaGFuY2VkIGNvbHVtbiBzZXBhcmF0aW9uIGZvciBiZXR0ZXIgZGF0YSB0cmFja2luZy48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJQcm9kdWN0IEludmVudG9yeSIKICAgICAgICAgIGhlYWRpbmcyPSJDdXJyZW50IHN0b2NrIGxldmVscyBhY3Jvc3Mgd2FyZWhvdXNlcyIKICAgICAgICAgIC5zaG93VmVydGljYWxMaW5lcz0ke3RydWV9CiAgICAgICAgICAuZGF0YT0ke1sKICB7CiAgICBwcm9kdWN0OiAnTWFjQm9vayBQcm8gMTYiJywKICAgIHdhcmVob3VzZV9hOiAiNDUiLAogICAgd2FyZWhvdXNlX2I6ICIzMiIsCiAgICB3YXJlaG91c2VfYzogIjI4IiwKICAgIHRvdGFsOiAiMTA1IiwKICAgIHN0YXR1czogIlx1MjcxMyBJbiBTdG9jayIKICB9LAogIHsKICAgIHByb2R1Y3Q6ICJpUGhvbmUgMTUgUHJvIiwKICAgIHdhcmVob3VzZV9hOiAiMTIwIiwKICAgIHdhcmVob3VzZV9iOiAiODkiLAogICAgd2FyZWhvdXNlX2M6ICIxNTYiLAogICAgdG90YWw6ICIzNjUiLAogICAgc3RhdHVzOiAiXHUyNzEzIEluIFN0b2NrIgogIH0sCiAgewogICAgcHJvZHVjdDogIkFpclBvZHMgUHJvIiwKICAgIHdhcmVob3VzZV9hOiAiMCIsCiAgICB3YXJlaG91c2VfYjogIjEyIiwKICAgIHdhcmVob3VzZV9jOiAiNSIsCiAgICB0b3RhbDogIjE3IiwKICAgIHN0YXR1czogIlx1MjZBMCBMb3cgU3RvY2siCiAgfSwKICB7CiAgICBwcm9kdWN0OiAiaVBhZCBBaXIiLAogICAgd2FyZWhvdXNlX2E6ICIyMyIsCiAgICB3YXJlaG91c2VfYjogIjQ1IiwKICAgIHdhcmVob3VzZV9jOiAiNjciLAogICAgdG90YWw6ICIxMzUiLAogICAgc3RhdHVzOiAiXHUyNzEzIEluIFN0b2NrIgogIH0KXX0KICAgICAgICAgIGRhdGFOYW1lPSJwcm9kdWN0cyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5UYWJsZSB3aXRoIEZ1bGwgR3JpZDwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkNvbXBsZXRlIGdyaWQgbGluZXMgZm9yIG1heGltdW0gcmVhZGFiaWxpdHkgYW5kIHN0cnVjdHVyZS48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJTZXJ2ZXIgTW9uaXRvcmluZyBEYXNoYm9hcmQiCiAgICAgICAgICBoZWFkaW5nMj0iUmVhbC10aW1lIG1ldHJpY3MgYWNyb3NzIHJlZ2lvbnMiCiAgICAgICAgICAuc2hvd0dyaWQ9JHt0cnVlfQogICAgICAgICAgLmRhdGE9JHtbCiAgewogICAgc2VydmVyOiAiQVBJLTEiLAogICAgcmVnaW9uOiAiVVMtRWFzdCIsCiAgICBjcHU6ICI0NSUiLAogICAgbWVtb3J5OiAiNjIlIiwKICAgIGRpc2s6ICI3OCUiLAogICAgbGF0ZW5jeTogIjEybXMiLAogICAgdXB0aW1lOiAiOTkuOSUiLAogICAgc3RhdHVzOiAiXHV7MUY3RTJ9IEhlYWx0aHkiCiAgfSwKICB7CiAgICBzZXJ2ZXI6ICJBUEktMiIsCiAgICByZWdpb246ICJFVS1XZXN0IiwKICAgIGNwdTogIjM4JSIsCiAgICBtZW1vcnk6ICI1NSUiLAogICAgZGlzazogIjQ1JSIsCiAgICBsYXRlbmN5OiAiMjVtcyIsCiAgICB1cHRpbWU6ICI5OS44JSIsCiAgICBzdGF0dXM6ICJcdXsxRjdFMn0gSGVhbHRoeSIKICB9LAogIHsKICAgIHNlcnZlcjogIkRCLU1hc3RlciIsCiAgICByZWdpb246ICJVUy1FYXN0IiwKICAgIGNwdTogIjcyJSIsCiAgICBtZW1vcnk6ICI4MSUiLAogICAgZGlzazogIjkyJSIsCiAgICBsYXRlbmN5OiAiOG1zIiwKICAgIHVwdGltZTogIjEwMCUiLAogICAgc3RhdHVzOiAiXHV7MUY3RTF9IFdhcm5pbmciCiAgfSwKICB7CiAgICBzZXJ2ZXI6ICJEQi1SZXBsaWNhIiwKICAgIHJlZ2lvbjogIkVVLVdlc3QiLAogICAgY3B1OiAiMjMlIiwKICAgIG1lbW9yeTogIjM0JSIsCiAgICBkaXNrOiAiNDUlIiwKICAgIGxhdGVuY3k6ICIxNW1zIiwKICAgIHVwdGltZTogIjk5LjclIiwKICAgIHN0YXR1czogIlx1ezFGN0UyfSBIZWFsdGh5IgogIH0sCiAgewogICAgc2VydmVyOiAiQ2FjaGUtMSIsCiAgICByZWdpb246ICJBUC1Tb3V0aCIsCiAgICBjcHU6ICI4OSUiLAogICAgbWVtb3J5OiAiOTIlIiwKICAgIGRpc2s6ICIxMiUiLAogICAgbGF0ZW5jeTogIjEyMG1zIiwKICAgIHVwdGltZTogIjk4LjUlIiwKICAgIHN0YXR1czogIlx1ezFGNTM0fSBDcml0aWNhbCIKICB9Cl19CiAgICAgICAgICBkYXRhTmFtZT0ic2VydmVycyIKICAgICAgICAgIC5kYXRhQWN0aW9ucz0iJHtbCiAgewogICAgbmFtZTogIlNTSCBDb25uZWN0IiwKICAgIGljb25OYW1lOiAibHVjaWRlOnRlcm1pbmFsIiwKICAgIHR5cGU6IFsiaW5Sb3ciXSwKICAgIGFjdGlvbkZ1bmM6IGFzeW5jIChvcHRpb25zQXJnKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJDb25uZWN0aW5nIHRvOiIsIG9wdGlvbnNBcmcuaXRlbS5zZXJ2ZXIpOwogICAgfQogIH0sCiAgewogICAgbmFtZTogIlZpZXcgTG9ncyIsCiAgICBpY29uTmFtZTogImx1Y2lkZTpmaWxlLXRleHQiLAogICAgdHlwZTogWyJpblJvdyIsICJjb250ZXh0bWVudSJdLAogICAgYWN0aW9uRnVuYzogYXN5bmMgKG9wdGlvbnNBcmcpID0+IHsKICAgICAgY29uc29sZS5sb2coIlZpZXdpbmcgbG9ncyBmb3I6Iiwgb3B0aW9uc0FyZy5pdGVtLnNlcnZlcik7CiAgICB9CiAgfSwKICB7CiAgICBuYW1lOiAiUmVzdGFydCBTZXJ2ZXIiLAogICAgaWNvbk5hbWU6ICJsdWNpZGU6cmVmcmVzaC1jdyIsCiAgICB0eXBlOiBbImNvbnRleHRtZW51Il0sCiAgICBhY3Rpb25GdW5jOiBhc3luYyAob3B0aW9uc0FyZykgPT4gewogICAgICBjb25zb2xlLmxvZygiUmVzdGFydGluZzoiLCBvcHRpb25zQXJnLml0ZW0uc2VydmVyKTsKICAgIH0KICB9Cl19IgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlRhYmxlIHdpdGggSG9yaXpvbnRhbCBMaW5lcyBPbmx5PC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+RW1waGFzaXMgb24gcm93IHNlcGFyYXRpb24gd2l0aG91dCBjb2x1bW4gZGl2aWRlcnMuPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iU2FsZXMgUGVyZm9ybWFuY2UiCiAgICAgICAgICBoZWFkaW5nMj0iVG9wIHBlcmZvcm1lcnMgdGhpcyBxdWFydGVyIgogICAgICAgICAgLnNob3dIb3Jpem9udGFsTGluZXM9JHt0cnVlfQogICAgICAgICAgLnNob3dWZXJ0aWNhbExpbmVzPSR7ZmFsc2V9CiAgICAgICAgICAuZGF0YT0ke1sKICB7CiAgICBzYWxlc3BlcnNvbjogIkVtaWx5IEpvaG5zb24iLAogICAgcmVnaW9uOiAiTm9ydGggQW1lcmljYSIsCiAgICBkZWFsc19jbG9zZWQ6ICI0MiIsCiAgICByZXZlbnVlOiAiJDEuMk0iLAogICAgcXVvdGFfYWNoaWV2ZW1lbnQ6ICIxMjglIiwKICAgIHJhdGluZzogIlx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MCIKICB9LAogIHsKICAgIHNhbGVzcGVyc29uOiAiTWljaGFlbCBDaGVuIiwKICAgIHJlZ2lvbjogIkFzaWEgUGFjaWZpYyIsCiAgICBkZWFsc19jbG9zZWQ6ICIzOCIsCiAgICByZXZlbnVlOiAiJDk4MEsiLAogICAgcXVvdGFfYWNoaWV2ZW1lbnQ6ICIxMTUlIiwKICAgIHJhdGluZzogIlx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MCIKICB9LAogIHsKICAgIHNhbGVzcGVyc29uOiAiU2FyYWggV2lsbGlhbXMiLAogICAgcmVnaW9uOiAiRXVyb3BlIiwKICAgIGRlYWxzX2Nsb3NlZDogIjM1IiwKICAgIHJldmVudWU6ICIkODc1SyIsCiAgICBxdW90YV9hY2hpZXZlbWVudDogIjEwOCUiLAogICAgcmF0aW5nOiAiXHUyQjUwXHUyQjUwXHUyQjUwXHUyQjUwIgogIH0sCiAgewogICAgc2FsZXNwZXJzb246ICJEYXZpZCBHYXJjaWEiLAogICAgcmVnaW9uOiAiTGF0aW4gQW1lcmljYSIsCiAgICBkZWFsc19jbG9zZWQ6ICIzMSIsCiAgICByZXZlbnVlOiAiJDc1MEsiLAogICAgcXVvdGFfYWNoaWV2ZW1lbnQ6ICI5NSUiLAogICAgcmF0aW5nOiAiXHUyQjUwXHUyQjUwXHUyQjUwXHUyQjUwIgogIH0KXX0KICAgICAgICAgIGRhdGFOYW1lPSJzYWxlcyByZXBzIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlNpbXBsZSBUYWJsZSAoTm8gR3JpZCk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5DbGVhbiwgbWluaW1hbCBkZXNpZ24gd2l0aG91dCBncmlkIGxpbmVzLiBTZXQgc2hvd0dyaWQgdG8gZmFsc2UgdG8gZGlzYWJsZSB0aGUgZGVmYXVsdCBncmlkLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlRlYW0gTWVtYmVycyIKICAgICAgICAgIGhlYWRpbmcyPSJFbmdpbmVlcmluZyBEZXBhcnRtZW50IgogICAgICAgICAgLnNob3dHcmlkPSR7ZmFsc2V9CiAgICAgICAgICAuZGF0YT0ke1sKICB7CiAgICBuYW1lOiAiQWxpY2UgSm9obnNvbiIsCiAgICByb2xlOiAiTGVhZCBFbmdpbmVlciIsCiAgICBlbWFpbDogImFsaWNlQGNvbXBhbnkuY29tIiwKICAgIGxvY2F0aW9uOiAiU2FuIEZyYW5jaXNjbyIsCiAgICBqb2luZWQ6ICIyMDIwLTAzLTE1IgogIH0sCiAgewogICAgbmFtZTogIkJvYiBTbWl0aCIsCiAgICByb2xlOiAiU2VuaW9yIERldmVsb3BlciIsCiAgICBlbWFpbDogImJvYkBjb21wYW55LmNvbSIsCiAgICBsb2NhdGlvbjogIk5ldyBZb3JrIiwKICAgIGpvaW5lZDogIjIwMTktMDctMjIiCiAgfSwKICB7CiAgICBuYW1lOiAiQ2hhcmxpZSBEYXZpcyIsCiAgICByb2xlOiAiRGV2T3BzIEVuZ2luZWVyIiwKICAgIGVtYWlsOiAiY2hhcmxpZUBjb21wYW55LmNvbSIsCiAgICBsb2NhdGlvbjogIkxvbmRvbiIsCiAgICBqb2luZWQ6ICIyMDIxLTAxLTEwIgogIH0sCiAgewogICAgbmFtZTogIkRpYW5hIE1hcnRpbmV6IiwKICAgIHJvbGU6ICJGcm9udGVuZCBEZXZlbG9wZXIiLAogICAgZW1haWw6ICJkaWFuYUBjb21wYW55LmNvbSIsCiAgICBsb2NhdGlvbjogIkJhcmNlbG9uYSIsCiAgICBqb2luZWQ6ICIyMDIyLTA1LTE4IgogIH0KXX0KICAgICAgICAgIGRhdGFOYW1lPSJ0ZWFtIG1lbWJlcnMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VGFibGUgd2l0aCBDdXN0b20gRGlzcGxheSBGdW5jdGlvbjwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlRyYW5zZm9ybSBkYXRhIGZvciBkaXNwbGF5IHVzaW5nIGN1c3RvbSBmb3JtYXR0aW5nLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlNhbGVzIFJlcG9ydCIKICAgICAgICAgIGhlYWRpbmcyPSJRNCAyMDIzIFBlcmZvcm1hbmNlIgogICAgICAgICAgLmRhdGE9JHtbCiAgewogICAgcHJvZHVjdDogIkVudGVycHJpc2UgTGljZW5zZSIsCiAgICB1bml0czogNDUsCiAgICByZXZlbnVlOiAyMjVlMywKICAgIGdyb3d0aDogMC4yMywKICAgIGZvcmVjYXN0OiAyOGU0CiAgfSwKICB7CiAgICBwcm9kdWN0OiAiUHJvZmVzc2lvbmFsIExpY2Vuc2UiLAogICAgdW5pdHM6IDEyOCwKICAgIHJldmVudWU6IDEyOGUzLAogICAgZ3Jvd3RoOiAwLjE1LAogICAgZm9yZWNhc3Q6IDE0N2UzCiAgfSwKICB7CiAgICBwcm9kdWN0OiAiU3RhcnRlciBMaWNlbnNlIiwKICAgIHVuaXRzOiAzNDIsCiAgICByZXZlbnVlOiA2ODQwMCwKICAgIGdyb3d0aDogMC40MiwKICAgIGZvcmVjYXN0OiA5N2UzCiAgfQpdfQogICAgICAgICAgLmRpc3BsYXlGdW5jdGlvbj0keyhpdGVtKSA9PiAoewogIFByb2R1Y3Q6IGl0ZW0ucHJvZHVjdCwKICAiVW5pdHMgU29sZCI6IGl0ZW0udW5pdHMudG9Mb2NhbGVTdHJpbmcoKSwKICBSZXZlbnVlOiAiJCIgKyBpdGVtLnJldmVudWUudG9Mb2NhbGVTdHJpbmcoKSwKICBHcm93dGg6IChpdGVtLmdyb3d0aCAqIDEwMCkudG9GaXhlZCgxKSArICIlIiwKICAiUTEgMjAyNCBGb3JlY2FzdCI6ICIkIiArIGl0ZW0uZm9yZWNhc3QudG9Mb2NhbGVTdHJpbmcoKQp9KX0KICAgICAgICAgIGRhdGFOYW1lPSJwcm9kdWN0cyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5FbXB0eSBUYWJsZSBTdGF0ZTwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkhvdyB0aGUgdGFibGUgbG9va3Mgd2hlbiBubyBkYXRhIGlzIGF2YWlsYWJsZS48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJObyBEYXRhIEF2YWlsYWJsZSIKICAgICAgICAgIGhlYWRpbmcyPSJUaGlzIHRhYmxlIGlzIGN1cnJlbnRseSBlbXB0eSIKICAgICAgICAgIC5kYXRhPSR7W119CiAgICAgICAgICBkYXRhTmFtZT0iaXRlbXMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+U2NoZW1hLUZpcnN0IENvbHVtbnMgKE5ldyk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5EZWZpbmVzIGNvbHVtbnMgZXhwbGljaXRseSBhbmQgcmVuZGVycyB2aWEgc2NoZW1hLiBObyBkaXNwbGF5RnVuY3Rpb24gbmVlZGVkLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlVzZXJzIChTY2hlbWEtRmlyc3QpIgogICAgICAgICAgaGVhZGluZzI9IkNvbHVtbnMgZGVmaW5lIHJlbmRlcmluZyBhbmQgb3JkZXIiCiAgICAgICAgICAuY29sdW1ucz0ke1sKICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImVtYWlsIiwgaGVhZGVyOiAiRW1haWwiLCByZW5kZXJlcjogKHY1KSA9PiBiMmA8ZGVlcy1iYWRnZT4ke3Y1fTwvZGVlcy1iYWRnZT5gIH0sCiAgeyBrZXk6ICJqb2luZWRBdCIsIGhlYWRlcjogIkpvaW5lZCIsIHJlbmRlcmVyOiAodjUpID0+IG5ldyBEYXRlKHY1KS50b0xvY2FsZURhdGVTdHJpbmcoKSB9Cl19CiAgICAgICAgICAuZGF0YT0ke1sKICB7IG5hbWU6ICJBbGljZSIsIGVtYWlsOiAiYWxpY2VAZXhhbXBsZS5jb20iLCBqb2luZWRBdDogIjIwMjItMDgtMDEiIH0sCiAgeyBuYW1lOiAiQm9iIiwgZW1haWw6ICJib2JAZXhhbXBsZS5jb20iLCBqb2luZWRBdDogIjIwMjEtMTItMTEiIH0sCiAgeyBuYW1lOiAiQ2Fyb2wiLCBlbWFpbDogImNhcm9sQGV4YW1wbGUuY29tIiwgam9pbmVkQXQ6ICIyMDIzLTAzLTIyIiB9Cl19CiAgICAgICAgICBkYXRhTmFtZT0idXNlcnMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+UGFydGlhbCBTY2hlbWEgKyBBdWdtZW50IChOZXcpPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+UHJvdmlkZXMgb25seSB0aGUgaW1wb3J0YW50IGNvbHVtbnM7IHRoZSByZXN0IGFyZSBtZXJnZWQgaW4gZnJvbSBkaXNwbGF5RnVuY3Rpb24uPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iVXNlcnMgKFBhcnRpYWwgKyBBdWdtZW50KSIKICAgICAgICAgIGhlYWRpbmcyPSJNaXNzaW5nIGNvbHVtbnMgYXJlIGRlcml2ZWQiCiAgICAgICAgICAuY29sdW1ucz0ke1sKICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfQpdfQogICAgICAgICAgLmRpc3BsYXlGdW5jdGlvbj0keyh1NykgPT4gKHsgbmFtZTogdTcubmFtZSwgZW1haWw6IHU3LmVtYWlsLCByb2xlOiB1Ny5yb2xlIH0pfQogICAgICAgICAgLmF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uPSR7dHJ1ZX0KICAgICAgICAgIC5kYXRhPSR7WwogIHsgbmFtZTogIkVyaW4iLCBlbWFpbDogImVyaW5AZXhhbXBsZS5jb20iLCByb2xlOiAiQWRtaW4iIH0sCiAgeyBuYW1lOiAiRmlubiIsIGVtYWlsOiAiZmlubkBleGFtcGxlLmNvbSIsIHJvbGU6ICJVc2VyIiB9LAogIHsgbmFtZTogIkdpbmEiLCBlbWFpbDogImdpbmFAZXhhbXBsZS5jb20iLCByb2xlOiAiVXNlciIgfQpdfQogICAgICAgICAgZGF0YU5hbWU9InVzZXJzIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIiAKICAgICAgICAgICBAc2VsZWN0aW9uQ2hhbmdlPSR7KGUxMSkgPT4gewogIGNvbnNvbGUubG9nKCJTZWxlY3Rpb24gY2hhbmdlZCIsIGUxMS5kZXRhaWwpOwp9fQogICAgICAgICAgIEBzZWFyY2gtY2hhbmdlZD0keyhlMTEpID0+IHsKICBjb25zdCB0YmwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFibGVGaWx0ZXJTZWxlY3REZW1vIik7CiAgaWYgKHRibCkKICAgIHRibC5zZXRGaWx0ZXJUZXh0KGUxMS5kZXRhaWwudmFsdWUpOwp9fQogICAgICAgICAgIEBzZWFyY2gtc3VibWl0PSR7KGUxMSkgPT4gewogIGNvbnN0IHRibCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YWJsZUZpbHRlclNlbGVjdERlbW8iKTsKICBpZiAodGJsKQogICAgdGJsLnNldEZpbHRlclRleHQoZTExLmRldGFpbC52YWx1ZSk7Cn19CiAgICAgID4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkZpbHRlcmluZyArIE11bHRpLVNlbGVjdGlvbiAoTmV3KTwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlVzZSB0aGUgc2VhcmNoIGJhciB0byBmaWx0ZXIgcm93czsgdG9nZ2xlIHNlbGVjdGlvbiB2aWEgY2hlY2tib3hlcy4gQ2xpY2sgaGVhZGVycyB0byBzb3J0LjwvcD4KICAgICAgICA8ZGVlcy1zZWFyY2hiYXI+PC9kZWVzLXNlYXJjaGJhcj4KICAgICAgICA8ZGl2IHN0eWxlPSJoZWlnaHQ6IDEycHgiPjwvZGl2PgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBpZD0idGFibGVGaWx0ZXJTZWxlY3REZW1vIgogICAgICAgICAgaGVhZGluZzE9IkludmVudG9yeSAoRmlsdGVyICsgU2VsZWN0KSIKICAgICAgICAgIGhlYWRpbmcyPSJUcnkgdHlwaW5nIHRvIGZpbHRlciBhbmQgc2VsZWN0aW5nIG11bHRpcGxlIHJvd3MiCiAgICAgICAgICAuc2VsZWN0aW9uTW9kZT0keyJtdWx0aSJ9CiAgICAgICAgICAucm93S2V5PSR7InNrdSJ9CiAgICAgICAgICAuY29sdW1ucz0ke1sKICB7IGtleTogInNrdSIsIGhlYWRlcjogIlNLVSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJuYW1lIiwgaGVhZGVyOiAiTmFtZSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJzdG9jayIsIGhlYWRlcjogIlN0b2NrIiwgc29ydGFibGU6IHRydWUgfQpdfQogICAgICAgICAgLmRhdGE9JHtbCiAgeyBza3U6ICJBLTEwMCIsIG5hbWU6ICJVU0ItQyBDYWJsZSIsIHN0b2NrOiAxMjAgfSwKICB7IHNrdTogIkEtMTAxIiwgbmFtZTogIldpcmVsZXNzIE1vdXNlIiwgc3RvY2s6IDU1IH0sCiAgeyBza3U6ICJBLTEwMiIsIG5hbWU6ICJMYXB0b3AgU3RhbmQiLCBzdG9jazogMTggfSwKICB7IHNrdTogIkItMjAwIiwgbmFtZTogIktleWJvYXJkIChJU08pIiwgc3RvY2s6IDg5IH0sCiAgeyBza3U6ICJCLTIwMSIsIG5hbWU6ICJIRE1JIEFkYXB0ZXIiLCBzdG9jazogMCB9LAogIHsgc2t1OiAiQy0zMDAiLCBuYW1lOiAiV2ViY2FtIDEwODBwIiwgc3RvY2s6IDQyIH0KXX0KICAgICAgICAgIGRhdGFOYW1lPSJpdGVtcyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5Db2x1bW4gRmlsdGVycyArIFN0aWNreSBIZWFkZXIgKE5ldyk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5QZXItY29sdW1uIHF1aWNrIGZpbHRlcnMgYW5kIHN0aWNreSBoZWFkZXIgd2l0aCBpbnRlcm5hbCBzY3JvbGwuIFRyeSBmaWx0ZXJpbmcgdGhlIE5hbWUgY29sdW1uLiBVc2VzIC0tdGFibGUtbWF4LWhlaWdodCB2YXIuPC9wPgogICAgICAgIDxzdHlsZT4KICAgICAgICAgIGRlZXMtdGFibGVbc3RpY2t5LWhlYWRlcl0geyAtLXRhYmxlLW1heC1oZWlnaHQ6IDIyMHB4OyB9CiAgICAgICAgPC9zdHlsZT4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IkVtcGxveWVlcyIKICAgICAgICAgIGhlYWRpbmcyPSJRdWljayBmaWx0ZXIgcGVyIGNvbHVtbiArIHN0aWNreSBoZWFkZXIiCiAgICAgICAgICAuc2hvd0NvbHVtbkZpbHRlcnM9JHt0cnVlfQogICAgICAgICAgLnN0aWNreUhlYWRlcj0ke3RydWV9CiAgICAgICAgICAuY29sdW1ucz0ke1sKICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImVtYWlsIiwgaGVhZGVyOiAiRW1haWwiLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAiZGVwYXJ0bWVudCIsIGhlYWRlcjogIkRlcGFydG1lbnQiLCBzb3J0YWJsZTogdHJ1ZSB9Cl19CiAgICAgICAgICAuZGF0YT0ke1sKICB7IG5hbWU6ICJBbGljZSBKb2huc29uIiwgZW1haWw6ICJhbGljZUBjb3JwLmNvbSIsIGRlcGFydG1lbnQ6ICJFbmdpbmVlcmluZyIgfSwKICB7IG5hbWU6ICJCb2IgU21pdGgiLCBlbWFpbDogImJvYkBjb3JwLmNvbSIsIGRlcGFydG1lbnQ6ICJTYWxlcyIgfSwKICB7IG5hbWU6ICJDaGFybGllIERhdmlzIiwgZW1haWw6ICJjaGFybGllQGNvcnAuY29tIiwgZGVwYXJ0bWVudDogIkhSIiB9LAogIHsgbmFtZTogIkRpYW5hIE1hcnRpbmV6IiwgZW1haWw6ICJkaWFuYUBjb3JwLmNvbSIsIGRlcGFydG1lbnQ6ICJFbmdpbmVlcmluZyIgfSwKICB7IG5hbWU6ICJFdGhhbiBCcm93biIsIGVtYWlsOiAiZXRoYW5AY29ycC5jb20iLCBkZXBhcnRtZW50OiAiRmluYW5jZSIgfSwKICB7IG5hbWU6ICJGaW9uYSBDbGFyayIsIGVtYWlsOiAiZmlvbmFAY29ycC5jb20iLCBkZXBhcnRtZW50OiAiU2FsZXMiIH0sCiAgeyBuYW1lOiAiR3JhY2UgTGVlIiwgZW1haWw6ICJncmFjZUBjb3JwLmNvbSIsIGRlcGFydG1lbnQ6ICJFbmdpbmVlcmluZyIgfSwKICB7IG5hbWU6ICJIZW5yeSBXaWxzb24iLCBlbWFpbDogImhlbnJ5QGNvcnAuY29tIiwgZGVwYXJ0bWVudDogIk1hcmtldGluZyIgfSwKICB7IG5hbWU6ICJJcmVuZSBXYWxrZXIiLCBlbWFpbDogImlyZW5lQGNvcnAuY29tIiwgZGVwYXJ0bWVudDogIkZpbmFuY2UiIH0sCiAgeyBuYW1lOiAiSmFjayBUdXJuZXIiLCBlbWFpbDogImphY2tAY29ycC5jb20iLCBkZXBhcnRtZW50OiAiU3VwcG9ydCIgfQpdfQogICAgICAgICAgZGF0YU5hbWU9ImVtcGxveWVlcyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiIKICAgICAgICBAc2VhcmNoUmVxdWVzdD0ke2FzeW5jIChlMTEpID0+IHsKICBjb25zdCB7IHF1ZXJ5IH0gPSBlMTEuZGV0YWlsIHx8IHsgcXVlcnk6ICIiIH07CiAgY29uc3QgdGFibGUyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlcnZlclNlYXJjaERlbW8iKTsKICBjb25zdCBiYXNlRGF0YSA9IFsKICAgIHsgaWQ6IDEsIG5hbWU6ICJBbGljZSIsIGNpdHk6ICJCZXJsaW4iLCB0aXRsZTogIkVuZ2luZWVyIiB9LAogICAgeyBpZDogMiwgbmFtZTogIkJvYiIsIGNpdHk6ICJQYXJpcyIsIHRpdGxlOiAiRGVzaWduZXIiIH0sCiAgICB7IGlkOiAzLCBuYW1lOiAiQ2hhcmxpZSIsIGNpdHk6ICJMb25kb24iLCB0aXRsZTogIk1hbmFnZXIiIH0sCiAgICB7IGlkOiA0LCBuYW1lOiAiRGlhbmEiLCBjaXR5OiAiTWFkcmlkIiwgdGl0bGU6ICJFbmdpbmVlciIgfSwKICAgIHsgaWQ6IDUsIG5hbWU6ICJFdGhhbiIsIGNpdHk6ICJSb21lIiwgdGl0bGU6ICJTdXBwb3J0IiB9CiAgXTsKICBhd2FpdCBuZXcgUHJvbWlzZSgocjExKSA9PiBzZXRUaW1lb3V0KHIxMSwgMzAwKSk7CiAgY29uc3QgcTIgPSBTdHJpbmcocXVlcnkgfHwgIiIpLnRvTG93ZXJDYXNlKCk7CiAgY29uc3QgZmlsdGVyZWQgPSBxMiA/IGJhc2VEYXRhLmZpbHRlcigocjExKSA9PiBPYmplY3QudmFsdWVzKHIxMSkuc29tZSgodjUpID0+IFN0cmluZyh2NSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxMikpKSA6IGJhc2VEYXRhOwogIHRhYmxlMi5kYXRhID0gZmlsdGVyZWQ7Cn19CiAgICAgID4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlNlcnZlciBTZWFyY2ggKE5ldyk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5TZWxlY3QgU2VydmVyIG1vZGUsIHR5cGUgYSBxdWVyeSwgYW5kIHdhdGNoIHRoZSB0YWJsZSBmZXRjaCBzaW11bGF0ZWQgcmVzdWx0cy48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGlkPSJzZXJ2ZXJTZWFyY2hEZW1vIgogICAgICAgICAgaGVhZGluZzE9IlBlb3BsZSAoU2VydmVyIFNlYXJjaCkiCiAgICAgICAgICBoZWFkaW5nMj0iQ2xpY2sgU2VhcmNoLCBjaG9vc2UgU2VydmVyIG1vZGUsIGFuZCB0eXBlIgogICAgICAgICAgLmNvbHVtbnM9JHtbCiAgeyBrZXk6ICJuYW1lIiwgaGVhZGVyOiAiTmFtZSIgfSwKICB7IGtleTogImNpdHkiLCBoZWFkZXI6ICJDaXR5IiB9LAogIHsga2V5OiAidGl0bGUiLCBoZWFkZXI6ICJUaXRsZSIgfQpdfQogICAgICAgICAgLmRhdGE9JHtbCiAgeyBpZDogMSwgbmFtZTogIkFsaWNlIiwgY2l0eTogIkJlcmxpbiIsIHRpdGxlOiAiRW5naW5lZXIiIH0sCiAgeyBpZDogMiwgbmFtZTogIkJvYiIsIGNpdHk6ICJQYXJpcyIsIHRpdGxlOiAiRGVzaWduZXIiIH0sCiAgeyBpZDogMywgbmFtZTogIkNoYXJsaWUiLCBjaXR5OiAiTG9uZG9uIiwgdGl0bGU6ICJNYW5hZ2VyIiB9LAogIHsgaWQ6IDQsIG5hbWU6ICJEaWFuYSIsIGNpdHk6ICJNYWRyaWQiLCB0aXRsZTogIkVuZ2luZWVyIiB9LAogIHsgaWQ6IDUsIG5hbWU6ICJFdGhhbiIsIGNpdHk6ICJSb21lIiwgdGl0bGU6ICJTdXBwb3J0IiB9Cl19CiAgICAgICAgICBkYXRhTmFtZT0icGVvcGxlIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPldpZGUgUHJvcGVydGllcyArIE1hbnkgQWN0aW9uczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkEgdGFibGUgd2l0aCBtYW55IGNvbHVtbnMgYW5kIHJpY2ggYWN0aW9ucyB0byBzdHJlc3MgdGVzdCBsYXlvdXQgYW5kIHN0aWNreSBBY3Rpb25zLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlBlb3BsZSBEaXJlY3RvcnkiCiAgICAgICAgICBoZWFkaW5nMj0iTWFueSBwcm9wZXJ0aWVzIGFuZCBhY3Rpb25zIgogICAgICAgICAgLmNvbHVtbnM9JHtbCiAgeyBrZXk6ICJpZCIsIGhlYWRlcjogIklEIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogInJvbGUiLCBoZWFkZXI6ICJSb2xlIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImRlcGFydG1lbnQiLCBoZWFkZXI6ICJEZXBhcnRtZW50Iiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImVtYWlsIiwgaGVhZGVyOiAiRW1haWwiIH0sCiAgeyBrZXk6ICJwaG9uZSIsIGhlYWRlcjogIlBob25lIiB9LAogIHsga2V5OiAibG9jYXRpb24iLCBoZWFkZXI6ICJMb2NhdGlvbiIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJzdGF0dXMiLCBoZWFkZXI6ICJTdGF0dXMiLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAiY3JlYXRlZEF0IiwgaGVhZGVyOiAiQ3JlYXRlZCIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJ1cGRhdGVkQXQiLCBoZWFkZXI6ICJVcGRhdGVkIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImxhc3RMb2dpbiIsIGhlYWRlcjogIkxhc3QgTG9naW4iLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAicHJvamVjdHMiLCBoZWFkZXI6ICJQcm9qZWN0cyIgfSwKICB7IGtleTogInRhZ3MiLCBoZWFkZXI6ICJUYWdzIiB9LAogIHsga2V5OiAibm90ZXMiLCBoZWFkZXI6ICJOb3RlcyIgfQpdfQogICAgICAgICAgLmRhdGE9JHtbCiAgeyBpZDogMSwgbmFtZTogIkFsaWNlIEpvaG5zb24iLCByb2xlOiAiRW5naW5lZXIiLCBkZXBhcnRtZW50OiAiUiZEIiwgZW1haWw6ICJhbGljZUBjb3JwLmNvbSIsIHBob25lOiAiKzEgMjAyIDU1NSAwMTExIiwgbG9jYXRpb246ICJCZXJsaW4iLCBzdGF0dXM6ICJBY3RpdmUiLCBjcmVhdGVkQXQ6ICIyMDIzLTAxLTEyIiwgdXBkYXRlZEF0OiAiMjAyNC0wNS0wMyIsIGxhc3RMb2dpbjogIjIwMjQtMTAtMDEiLCBwcm9qZWN0czogNSwgdGFnczogInR5cGVzY3JpcHQsIHVpIiwgbm90ZXM6ICJNZW50b3IiIH0sCiAgeyBpZDogMiwgbmFtZTogIkJvYiBTbWl0aCIsIHJvbGU6ICJEZXNpZ25lciIsIGRlcGFydG1lbnQ6ICJEZXNpZ24iLCBlbWFpbDogImJvYkBjb3JwLmNvbSIsIHBob25lOiAiKzEgMjAyIDU1NSAwMTEyIiwgbG9jYXRpb246ICJQYXJpcyIsIHN0YXR1czogIkFjdGl2ZSIsIGNyZWF0ZWRBdDogIjIwMjItMTEtMDUiLCB1cGRhdGVkQXQ6ICIyMDI0LTA0LTEwIiwgbGFzdExvZ2luOiAiMjAyNC0wOS0yOCIsIHByb2plY3RzOiA4LCB0YWdzOiAiZmlnbWEsIGJyYW5kIiwgbm90ZXM6ICJQYXJ0LXRpbWUiIH0sCiAgeyBpZDogMywgbmFtZTogIkNoYXJsaWUgRGF2aXMiLCByb2xlOiAiTWFuYWdlciIsIGRlcGFydG1lbnQ6ICJPcHMiLCBlbWFpbDogImNoYXJsaWVAY29ycC5jb20iLCBwaG9uZTogIisxIDIwMiA1NTUgMDExMyIsIGxvY2F0aW9uOiAiTG9uZG9uIiwgc3RhdHVzOiAiT24gTGVhdmUiLCBjcmVhdGVkQXQ6ICIyMDIxLTA0LTIxIiwgdXBkYXRlZEF0OiAiMjAyNC0wMi0xNSIsIGxhc3RMb2dpbjogIjIwMjQtMDgtMTIiLCBwcm9qZWN0czogMywgdGFnczogInNyZSwgbGVhZGVyc2hpcCIsIG5vdGVzOiAiIiB9LAogIHsgaWQ6IDQsIG5hbWU6ICJEaWFuYSBNYXJ0aW5leiIsIHJvbGU6ICJFbmdpbmVlciIsIGRlcGFydG1lbnQ6ICJQbGF0Zm9ybSIsIGVtYWlsOiAiZGlhbmFAY29ycC5jb20iLCBwaG9uZTogIisxIDIwMiA1NTUgMDExNCIsIGxvY2F0aW9uOiAiTWFkcmlkIiwgc3RhdHVzOiAiQWN0aXZlIiwgY3JlYXRlZEF0OiAiMjAyMC0wNi0zMCIsIHVwZGF0ZWRBdDogIjIwMjQtMDYtMjUiLCBsYXN0TG9naW46ICIyMDI0LTEwLTAyIiwgcHJvamVjdHM6IDYsIHRhZ3M6ICJub2RlLCBhcGkiLCBub3RlczogIk9uLWNhbGwiIH0sCiAgeyBpZDogNSwgbmFtZTogIkV0aGFuIEJyb3duIiwgcm9sZTogIlN1cHBvcnQiLCBkZXBhcnRtZW50OiAiQ1MiLCBlbWFpbDogImV0aGFuQGNvcnAuY29tIiwgcGhvbmU6ICIrMSAyMDIgNTU1IDAxMTUiLCBsb2NhdGlvbjogIlJvbWUiLCBzdGF0dXM6ICJJbmFjdGl2ZSIsIGNyZWF0ZWRBdDogIjIwMTktMDktMTgiLCB1cGRhdGVkQXQ6ICIyMDI0LTAzLTA5IiwgbGFzdExvZ2luOiAiMjAyNC0wNi0xOSIsIHByb2plY3RzOiAyLCB0YWdzOiAiemVuZGVzayIsIG5vdGVzOiAiUmVoaXJlIiB9LAogIHsgaWQ6IDYsIG5hbWU6ICJGaW9uYSBDbGFyayIsIHJvbGU6ICJRQSIsIGRlcGFydG1lbnQ6ICJRQSIsIGVtYWlsOiAiZmlvbmFAY29ycC5jb20iLCBwaG9uZTogIisxIDIwMiA1NTUgMDExNiIsIGxvY2F0aW9uOiAiVmllbm5hIiwgc3RhdHVzOiAiQWN0aXZlIiwgY3JlYXRlZEF0OiAiMjAyMi0wMy0xNCIsIHVwZGF0ZWRBdDogIjIwMjQtMDMtMDEiLCBsYXN0TG9naW46ICIyMDI0LTA5LTA3IiwgcHJvamVjdHM6IDcsIHRhZ3M6ICJwbGF5d3JpZ2h0Iiwgbm90ZXM6ICIiIH0KXX0KICAgICAgICAgIC5kYXRhQWN0aW9ucz0ke1sKICB7IG5hbWU6ICJWaWV3IiwgaWNvbk5hbWU6ICJsdWNpZGU6ZXllIiwgdHlwZTogWyJpblJvdyIsICJjb250ZXh0bWVudSJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJ2aWV3IiwgaXRlbSk7CiAgfSB9LAogIHsgbmFtZTogIkVkaXQiLCBpY29uTmFtZTogImx1Y2lkZTplZGl0IiwgdHlwZTogWyJpblJvdyIsICJjb250ZXh0bWVudSJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJlZGl0IiwgaXRlbSk7CiAgfSB9LAogIHsgbmFtZTogIkRlbGV0ZSIsIGljb25OYW1lOiAibHVjaWRlOnRyYXNoIiwgdHlwZTogWyJpblJvdyIsICJjb250ZXh0bWVudSJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJkZWxldGUiLCBpdGVtKTsKICB9IH0sCiAgeyBuYW1lOiAiTWVzc2FnZSIsIGljb25OYW1lOiAibHVjaWRlOm1lc3NhZ2Utc3F1YXJlIiwgdHlwZTogWyJpblJvdyJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJtZXNzYWdlIiwgaXRlbSk7CiAgfSB9LAogIHsgbmFtZTogIkhpc3RvcnkiLCBpY29uTmFtZTogImx1Y2lkZTpjbG9jayIsIHR5cGU6IFsiaW5Sb3ciXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgaXRlbSB9KSA9PiB7CiAgICBjb25zb2xlLmxvZygiaGlzdG9yeSIsIGl0ZW0pOwogIH0gfSwKICB7IG5hbWU6ICJBZGQgTmV3IiwgaWNvbk5hbWU6ICJsdWNpZGU6cGx1cyIsIHR5cGU6IFsiaGVhZGVyIl0sIGFjdGlvbkZ1bmM6IGFzeW5jICh7IHRhYmxlOiB0YWJsZTIgfSkgPT4gewogICAgY29uc29sZS5sb2coImFkZCIpOwogIH0gfSwKICB7IG5hbWU6ICJFeHBvcnQgQ1NWIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZG93bmxvYWQiLCB0eXBlOiBbImhlYWRlciJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyB0YWJsZTogdGFibGUyIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJleHBvcnQiKTsKICB9IH0sCiAgeyBuYW1lOiAiQnVsayBEZWxldGUiLCBpY29uTmFtZTogImx1Y2lkZTp0cmFzaC0yIiwgdHlwZTogWyJmb290ZXIiXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgdGFibGU6IHRhYmxlMiB9KSA9PiB7CiAgICBjb25zb2xlLmxvZygiYnVsayBkZWxldGUiKTsKICB9IH0KXX0KICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5TY3JvbGxhYmxlIFNtYWxsIEhlaWdodDwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlNhbWUgYXMgYWJvdmUsIGJ1dCB3aXRoIG1hbnkgaXRlbXMgYW5kIGEgc21hbGwgZml4ZWQgaGVpZ2h0IHRvIGZvcmNlIHZlcnRpY2FsIHNjcm9sbGluZyBpbnNpZGUgdGhlIHRhYmxlLiBBY3Rpb25zIHJlbWFpbiB2aXNpYmxlIG9uIHRoZSByaWdodDsgaG9yaXpvbnRhbCBzY3JvbGwgYXBwZWFycyBpZiBuZWVkZWQuPC9wPgogICAgICAgIDxzdHlsZT4KICAgICAgICAgICNzY3JvbGxTbWFsbEhlaWdodCB7IC0tdGFibGUtbWF4LWhlaWdodDogMjQwcHg7IH0KICAgICAgICA8L3N0eWxlPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBpZD0ic2Nyb2xsU21hbGxIZWlnaHQiCiAgICAgICAgICAuc3RpY2t5SGVhZGVyPSR7dHJ1ZX0KICAgICAgICAgIGhlYWRpbmcxPSJQZW9wbGUgRGlyZWN0b3J5IChTY3JvbGxhYmxlKSIKICAgICAgICAgIGhlYWRpbmcyPSJGb3JjZWQgc2Nyb2xsaW5nIHdpdGggbWFueSBpdGVtcyIKICAgICAgICAgIC5jb2x1bW5zPSR7WwogIHsga2V5OiAiaWQiLCBoZWFkZXI6ICJJRCIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJuYW1lIiwgaGVhZGVyOiAiTmFtZSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJyb2xlIiwgaGVhZGVyOiAiUm9sZSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJkZXBhcnRtZW50IiwgaGVhZGVyOiAiRGVwYXJ0bWVudCIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJlbWFpbCIsIGhlYWRlcjogIkVtYWlsIiB9LAogIHsga2V5OiAicGhvbmUiLCBoZWFkZXI6ICJQaG9uZSIgfSwKICB7IGtleTogImxvY2F0aW9uIiwgaGVhZGVyOiAiTG9jYXRpb24iLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAic3RhdHVzIiwgaGVhZGVyOiAiU3RhdHVzIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImNyZWF0ZWRBdCIsIGhlYWRlcjogIkNyZWF0ZWQiLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAidXBkYXRlZEF0IiwgaGVhZGVyOiAiVXBkYXRlZCIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJsYXN0TG9naW4iLCBoZWFkZXI6ICJMYXN0IExvZ2luIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogInByb2plY3RzIiwgaGVhZGVyOiAiUHJvamVjdHMiIH0sCiAgeyBrZXk6ICJ0YWdzIiwgaGVhZGVyOiAiVGFncyIgfSwKICB7IGtleTogIm5vdGVzIiwgaGVhZGVyOiAiTm90ZXMiIH0KXX0KICAgICAgICAgIC5kYXRhPSR7QXJyYXkuZnJvbSh7IGxlbmd0aDogMTAwIH0sIChfNCwgaTExKSA9PiAoewogIGlkOiBpMTEgKyAxLAogIG5hbWU6IGBVc2VyICR7aTExICsgMX1gLAogIHJvbGU6IFsiRW5naW5lZXIiLCAiRGVzaWduZXIiLCAiTWFuYWdlciIsICJRQSIsICJTdXBwb3J0Il1baTExICUgNV0sCiAgZGVwYXJ0bWVudDogWyJSJkQiLCAiRGVzaWduIiwgIk9wcyIsICJRQSIsICJDUyJdW2kxMSAlIDVdLAogIGVtYWlsOiBgdXNlciR7aTExICsgMX1AY29ycC5jb21gLAogIHBob25lOiBgKzEgMjAyIDU1NSAke1N0cmluZygxZTMgKyBpMTEpLnNsaWNlKC00KX1gLAogIGxvY2F0aW9uOiBbIkJlcmxpbiIsICJQYXJpcyIsICJMb25kb24iLCAiTWFkcmlkIiwgIlJvbWUiXVtpMTEgJSA1XSwKICBzdGF0dXM6IFsiQWN0aXZlIiwgIkluYWN0aXZlIiwgIk9uIExlYXZlIl1baTExICUgM10sCiAgY3JlYXRlZEF0OiBgMjAyMy0ke1N0cmluZyhpMTEgJSAxMiArIDEpLnBhZFN0YXJ0KDIsICIwIil9LSR7U3RyaW5nKGkxMSAlIDI4ICsgMSkucGFkU3RhcnQoMiwgIjAiKX1gLAogIHVwZGF0ZWRBdDogYDIwMjQtJHtTdHJpbmcoKGkxMSArIDMpICUgMTIgKyAxKS5wYWRTdGFydCgyLCAiMCIpfS0ke1N0cmluZygoaTExICsgNykgJSAyOCArIDEpLnBhZFN0YXJ0KDIsICIwIil9YCwKICBsYXN0TG9naW46IGAyMDI0LSR7U3RyaW5nKChpMTEgKyA2KSAlIDEyICsgMSkucGFkU3RhcnQoMiwgIjAiKX0tJHtTdHJpbmcoKGkxMSArIDEwKSAlIDI4ICsgMSkucGFkU3RhcnQoMiwgIjAiKX1gLAogIHByb2plY3RzOiBpMTEgJSAxMiwKICB0YWdzOiBpMTEgJSAyID8gInR5cGVzY3JpcHQiIDogImRlc2lnbiIsCiAgbm90ZXM6IGkxMSAlIDMgPyAiIiA6ICJOb3RlIgp9KSl9CiAgICAgICAgICAuZGF0YUFjdGlvbnM9JHtbCiAgeyBuYW1lOiAiVmlldyIsIGljb25OYW1lOiAibHVjaWRlOmV5ZSIsIHR5cGU6IFsiaW5Sb3ciXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgaXRlbSB9KSA9PiB7CiAgfSB9LAogIHsgbmFtZTogIkVkaXQiLCBpY29uTmFtZTogImx1Y2lkZTplZGl0IiwgdHlwZTogWyJpblJvdyJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICB9IH0sCiAgeyBuYW1lOiAiRGVsZXRlIiwgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2giLCB0eXBlOiBbImluUm93Il0sIGFjdGlvbkZ1bmM6IGFzeW5jICh7IGl0ZW0gfSkgPT4gewogIH0gfQpdfQogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdGFibGUvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIHRhYmxlU3R5bGVzID0gWwogIHRoZW1lRGVmYXVsdFN0eWxlcywKICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubWFpbmJveCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAxNnB4IDI0cHg7CiAgICAgICAgbWluLWhlaWdodDogNjRweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nQ29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQoKICAgICAgLmhlYWRpbmcxIHsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQogICAgICAKICAgICAgLmhlYWRpbmcyIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgfQoKICAgICAgLmhlYWRpbmdTZXBhcmF0aW9uIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAuaGVhZGVyQWN0aW9ucyB7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CiAgICAgIAogICAgICAuaGVhZGVyQWN0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5oZWFkZXJBY3Rpb246aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgfQoKICAgICAgLmhlYWRlckFjdGlvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgfQoKICAgICAgLnNlYXJjaEdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC1nYXA6IDE2cHg7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgbWF4LWNvbnRlbnQ7CiAgICAgICAgcGFkZGluZzogMTZweCAyNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5OCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHsKICAgICAgICAuc2VhcmNoR3JpZCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qIGxldCBzZWFyY2ggbW9kZSBzaXplIHRvIGNvbnRlbnQgKG5vIGZvcmNlZCB3aWR0aCkgKi8KCiAgICAgIC5zZWFyY2hHcmlkLmhpZGRlbiB7CiAgICAgICAgaGVpZ2h0OiAwcHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBhZGRpbmc6IDBweCAyNHB4OwogICAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDBweDsKICAgICAgfQoKICAgICAgLnRhYmxlU2Nyb2xsIHsKICAgICAgICAvKiBlbmFibGUgaG9yaXpvbnRhbCBzY3JvbGwgb25seSB3aGVuIGNvbnRlbnQgZXhjZWVkcyB3aWR0aCAqLwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgLyogcHJldmVudCB2ZXJ0aWNhbCBzY3JvbGwgaW5zaWRlIHRoZSB0YWJsZSBjb250YWluZXIgKi8KICAgICAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICAgICAgLyogYXZvaWQgcmVzZXJ2aW5nIGV4dHJhIHNwYWNlIGZvciBjbGFzc2ljIHNjcm9sbGJhcnMgd2hlcmUgcG9zc2libGUgKi8KICAgICAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGUgYm90aC1lZGdlczsKICAgICAgfQogICAgICAvKiBIaWRlIGhvcml6b250YWwgc2Nyb2xsYmFyIGVudGlyZWx5IHdoZW4gbm90IHVzaW5nIHN0aWNreSBoZWFkZXIgKi8KICAgICAgOmhvc3QoOm5vdChbc3RpY2t5LWhlYWRlcl0pKSAudGFibGVTY3JvbGwgewogICAgICAgIC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTsgLyogSUUvRWRnZSAqLwogICAgICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTsgICAvKiBGaXJlZm94IChoaWRlcyBib3RoIGF4ZXMpICovCiAgICAgIH0KICAgICAgOmhvc3QoOm5vdChbc3RpY2t5LWhlYWRlcl0pKSAudGFibGVTY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBkaXNwbGF5OiBub25lOyAvKiBDaHJvbWUvU2FmYXJpICovCiAgICAgIH0KICAgICAgLyogSW4gc3RpY2t5LWhlYWRlciBtb2RlLCBoaWRlIG9ubHkgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyIGluIFdlYktpdC9CbGluayAqLwogICAgICA6aG9zdChbc3RpY2t5LWhlYWRlcl0pIC50YWJsZVNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXI6aG9yaXpvbnRhbCB7CiAgICAgICAgaGVpZ2h0OiAwcHg7CiAgICAgIH0KICAgICAgOmhvc3QoW3N0aWNreS1oZWFkZXJdKSAudGFibGVTY3JvbGwgewogICAgICAgIG1heC1oZWlnaHQ6IHZhcigtLXRhYmxlLW1heC1oZWlnaHQsIDM2MHB4KTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIC8qIGFsbG93IHRhYmxlIHRvIGdyb3cgd2lkZXIgdGhhbiBjb250YWluZXIgc28gYWN0aW9ucyBjb2x1bW4gY2FuIHN0aWNrICovCiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50OwogICAgICAgIG1pbi13aWR0aDogMTAwJTsKICAgICAgICBjYXB0aW9uLXNpZGU6IGJvdHRvbTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKICAgICAgICBib3JkZXItc3BhY2luZzogMDsKICAgICAgfQogICAgICAKICAgICAgLm5vRGF0YVNldCB7CiAgICAgICAgcGFkZGluZzogNDhweCAyNHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIHRoZWFkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KICAgICAgOmhvc3QoW3N0aWNreS1oZWFkZXJdKSB0aGVhZCB0aCB7CiAgICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgei1pbmRleDogMjsKICAgICAgfQogICAgICAKICAgICAgdGJvZHkgdHIgewogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIERlZmF1bHQgaG9yaXpvbnRhbCBsaW5lcyAoYm90dG9tIGJvcmRlciBvbmx5KSAqLwogICAgICB0Ym9keSB0ciB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0Ym9keSB0cjpsYXN0LWNoaWxkIHsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAvKiBGdWxsIGhvcml6b250YWwgbGluZXMgd2hlbiBlbmFibGVkICovCiAgICAgIDpob3N0KFtzaG93LWhvcml6b250YWwtbGluZXNdKSB0Ym9keSB0ciB7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctaG9yaXpvbnRhbC1saW5lc10pIHRib2R5IHRyOmZpcnN0LWNoaWxkIHsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy1ob3Jpem9udGFsLWxpbmVzXSkgdGJvZHkgdHI6bGFzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0Ym9keSB0cjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElIC8gMC41KSIsICJoc2woMCAwJSAxNC45JSAvIDAuNSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIENvbHVtbiBob3ZlciBlZmZlY3QgZm9yIGJldHRlciB0cmFjZWFiaWxpdHkgKi8KICAgICAgdGQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICAKICAgICAgdGQ6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSAvIDAuMykiLCAiaHNsKDAgMCUgMTQuOSUgLyAwLjMpIil9OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgICAgIHotaW5kZXg6IC0xOwogICAgICB9CiAgICAgIAogICAgICB0ZDpob3Zlcjo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEdyaWQgbW9kZSAtIHNob3dzIGJvdGggdmVydGljYWwgYW5kIGhvcml6b250YWwgbGluZXMgKi8KICAgICAgOmhvc3QoW3Nob3ctZ3JpZF0pIHRoIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy1ncmlkXSkgdGQgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtzaG93LWdyaWRdKSB0aDpmaXJzdC1jaGlsZCwKICAgICAgOmhvc3QoW3Nob3ctZ3JpZF0pIHRkOmZpcnN0LWNoaWxkIHsKICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy1ncmlkXSkgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQgewogICAgICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFN0aWNreSBBY3Rpb25zIGNvbHVtbiAocmlnaHQgcGlubmVkKSAqLwogICAgICB0aGVhZCB0aC5hY3Rpb25zQ29sLAogICAgICB0Ym9keSB0ZC5hY3Rpb25zQ29sIHsKICAgICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgfQogICAgICB0aGVhZCB0aC5hY3Rpb25zQ29sIHsgei1pbmRleDogMzsgfQogICAgICB0Ym9keSB0ZC5hY3Rpb25zQ29sIHsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIGJveC1zaGFkb3c6IC0xcHggMCAwIDAgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIHRib2R5IHRyLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQoKICAgICAgdGJvZHkgdHIuaGFzQXR0YWNobWVudCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMSkiLCAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgdGggewogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDI0cHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctdmVydGljYWwtbGluZXNdKSB0aCB7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIHRkIHsKICAgICAgICBwYWRkaW5nOiAxMnB4IDI0cHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtzaG93LXZlcnRpY2FsLWxpbmVzXSkgdGQgewogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0aDpmaXJzdC1jaGlsZCwKICAgICAgdGQ6Zmlyc3QtY2hpbGQgewogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgdGg6bGFzdC1jaGlsZCwKICAgICAgdGQ6bGFzdC1jaGlsZCB7CiAgICAgICAgcGFkZGluZy1yaWdodDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctdmVydGljYWwtbGluZXNdKSB0aDpsYXN0LWNoaWxkLAogICAgICA6aG9zdChbc2hvdy12ZXJ0aWNhbC1saW5lc10pIHRkOmxhc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLmlubmVyQ2VsbENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1pbi1oZWlnaHQ6IDI0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH0KICAgICAgdGQgaW5wdXQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDRweDsKICAgICAgICBib3R0b206IDRweDsKICAgICAgICBsZWZ0OiAyMHB4OwogICAgICAgIHJpZ2h0OiAyMHB4OwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTsKICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDhweCk7CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTsKICAgICAgfQogICAgICAKICAgICAgdGQgaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMikiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLyogZmlsdGVyIHJvdyAqLwogICAgICB0aGVhZCB0ci5maWx0ZXJzUm93IHRoIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCAxMnB4IDEycHg7CiAgICAgIH0KICAgICAgdGhlYWQgdHIuZmlsdGVyc1JvdyB0aCBpbnB1dFt0eXBlPSd0ZXh0J10gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgcGFkZGluZzogNnB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICB9CiAgICAgIC5hY3Rpb25zQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5hY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5hY3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDExLjglKSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmFjdGlvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgfQoKICAgICAgLmZvb3RlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBoZWlnaHQ6IDUycHg7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAudGFibGVTdGF0aXN0aWNzIHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAuZm9vdGVyQWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmZvb3RlckFjdGlvbnMgLmZvb3RlckFjdGlvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5mb290ZXJBY3Rpb25zIC5mb290ZXJBY3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5mb290ZXJBY3Rpb25zIC5mb290ZXJBY3Rpb24gZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgIH0KICBgCl07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdGFibGUvZGF0YS5qcwpmdW5jdGlvbiBjb21wdXRlQ29sdW1uc0Zyb21EaXNwbGF5RnVuY3Rpb24oZGlzcGxheUZ1bmN0aW9uLCBkYXRhKSB7CiAgaWYgKCFkYXRhIHx8IGRhdGEubGVuZ3RoID09PSAwKQogICAgcmV0dXJuIFtdOwogIGNvbnN0IGZpcnN0VHJhbnNmb3JtZWRJdGVtID0gZGlzcGxheUZ1bmN0aW9uKGRhdGFbMF0pOwogIGNvbnN0IGtleXMyID0gT2JqZWN0LmtleXMoZmlyc3RUcmFuc2Zvcm1lZEl0ZW0pOwogIHJldHVybiBrZXlzMi5tYXAoKGtleTIpID0+ICh7CiAgICBrZXk6IGtleTIsCiAgICBoZWFkZXI6IGtleTIsCiAgICB2YWx1ZTogKHJvdykgPT4gZGlzcGxheUZ1bmN0aW9uKHJvdylba2V5Ml0KICB9KSk7Cn0KZnVuY3Rpb24gY29tcHV0ZUVmZmVjdGl2ZUNvbHVtbnMoY29sdW1ucywgYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb24sIGRpc3BsYXlGdW5jdGlvbiwgZGF0YSkgewogIGNvbnN0IGJhc2UgPSAoY29sdW1ucyB8fCBbXSkuc2xpY2UoKTsKICBpZiAoIWF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uKQogICAgcmV0dXJuIGJhc2U7CiAgY29uc3QgZnJvbURpc3BsYXkgPSBjb21wdXRlQ29sdW1uc0Zyb21EaXNwbGF5RnVuY3Rpb24oZGlzcGxheUZ1bmN0aW9uLCBkYXRhKTsKICBjb25zdCBleGlzdGluZ0tleXMgPSBuZXcgU2V0KGJhc2UubWFwKChjMTEpID0+IFN0cmluZyhjMTEua2V5KSkpOwogIGZvciAoY29uc3QgY29sIG9mIGZyb21EaXNwbGF5KSB7CiAgICBpZiAoIWV4aXN0aW5nS2V5cy5oYXMoU3RyaW5nKGNvbC5rZXkpKSkgewogICAgICBiYXNlLnB1c2goY29sKTsKICAgIH0KICB9CiAgcmV0dXJuIGJhc2U7Cn0KZnVuY3Rpb24gZ2V0Q2VsbFZhbHVlKHJvdywgY29sLCBkaXNwbGF5RnVuY3Rpb24pIHsKICByZXR1cm4gY29sLnZhbHVlID8gY29sLnZhbHVlKHJvdykgOiByb3dbY29sLmtleV07Cn0KZnVuY3Rpb24gZ2V0Vmlld0RhdGEoZGF0YSwgZWZmZWN0aXZlQ29sdW1ucywgc29ydEtleSwgc29ydERpciwgZmlsdGVyVGV4dCwgY29sdW1uRmlsdGVycywgZmlsdGVyTW9kZSA9ICJ0YWJsZSIsIGx1Y2VuZVByZWRpY2F0ZSkgewogIGxldCBhcnIgPSBkYXRhLnNsaWNlKCk7CiAgY29uc3QgZnQgPSAoZmlsdGVyVGV4dCB8fCAiIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7CiAgY29uc3QgY2YgPSBjb2x1bW5GaWx0ZXJzIHx8IHt9OwogIGNvbnN0IGNmS2V5cyA9IE9iamVjdC5rZXlzKGNmKS5maWx0ZXIoKGs0KSA9PiAoY2ZbazRdID8/ICIiKS50cmltKCkubGVuZ3RoID4gMCk7CiAgaWYgKGZ0IHx8IGNmS2V5cy5sZW5ndGggPiAwKSB7CiAgICBhcnIgPSBhcnIuZmlsdGVyKChyb3cpID0+IHsKICAgICAgZm9yIChjb25zdCBrNCBvZiBjZktleXMpIHsKICAgICAgICBpZiAoZmlsdGVyTW9kZSA9PT0gImRhdGEiKSB7CiAgICAgICAgICBjb25zdCB2YWwgPSByb3dbazRdOwogICAgICAgICAgY29uc3QgczkgPSBTdHJpbmcodmFsID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgY29uc3QgbmVlZGxlID0gU3RyaW5nKGNmW2s0XSkudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGlmICghczkuaW5jbHVkZXMobmVlZGxlKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBjb2wyID0gZWZmZWN0aXZlQ29sdW1ucy5maW5kKChjMTEpID0+IFN0cmluZyhjMTEua2V5KSA9PT0gazQpOwogICAgICAgICAgaWYgKCFjb2wyIHx8IGNvbDIuaGlkZGVuIHx8IGNvbDIuZmlsdGVyYWJsZSA9PT0gZmFsc2UpCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgY29uc3QgdmFsID0gZ2V0Q2VsbFZhbHVlKHJvdywgY29sMik7CiAgICAgICAgICBjb25zdCBzOSA9IFN0cmluZyh2YWwgPz8gIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBjb25zdCBuZWVkbGUgPSBTdHJpbmcoY2ZbazRdKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgaWYgKCFzOS5pbmNsdWRlcyhuZWVkbGUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChmdCkgewogICAgICAgIGlmIChsdWNlbmVQcmVkaWNhdGUpIHsKICAgICAgICAgIGlmICghbHVjZW5lUHJlZGljYXRlKHJvdykpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBsZXQgYW55ID0gZmFsc2U7CiAgICAgICAgaWYgKGZpbHRlck1vZGUgPT09ICJkYXRhIikgewogICAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgT2JqZWN0LnZhbHVlcyhyb3cpKSB7CiAgICAgICAgICAgIGNvbnN0IHM5ID0gU3RyaW5nKHZhbCA/PyAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgaWYgKHM5LmluY2x1ZGVzKGZ0KSkgewogICAgICAgICAgICAgIGFueSA9IHRydWU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgZm9yIChjb25zdCBjb2wyIG9mIGVmZmVjdGl2ZUNvbHVtbnMpIHsKICAgICAgICAgICAgaWYgKGNvbDIuaGlkZGVuKQogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBjb25zdCB2YWwgPSBnZXRDZWxsVmFsdWUocm93LCBjb2wyKTsKICAgICAgICAgICAgY29uc3QgczkgPSBTdHJpbmcodmFsID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICBpZiAoczkuaW5jbHVkZXMoZnQpKSB7CiAgICAgICAgICAgICAgYW55ID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIWFueSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pOwogIH0KICBpZiAoIXNvcnRLZXkgfHwgIXNvcnREaXIpCiAgICByZXR1cm4gYXJyOwogIGNvbnN0IGNvbCA9IGVmZmVjdGl2ZUNvbHVtbnMuZmluZCgoYzExKSA9PiBTdHJpbmcoYzExLmtleSkgPT09IHNvcnRLZXkpOwogIGlmICghY29sKQogICAgcmV0dXJuIGFycjsKICBjb25zdCBkaXIgPSBzb3J0RGlyID09PSAiYXNjIiA/IDEgOiAtMTsKICBhcnIuc29ydCgoYTUsIGI1KSA9PiB7CiAgICBjb25zdCB2YSA9IGdldENlbGxWYWx1ZShhNSwgY29sKTsKICAgIGNvbnN0IHZiID0gZ2V0Q2VsbFZhbHVlKGI1LCBjb2wpOwogICAgaWYgKHZhID09IG51bGwgJiYgdmIgPT0gbnVsbCkKICAgICAgcmV0dXJuIDA7CiAgICBpZiAodmEgPT0gbnVsbCkKICAgICAgcmV0dXJuIC0xICogZGlyOwogICAgaWYgKHZiID09IG51bGwpCiAgICAgIHJldHVybiAxICogZGlyOwogICAgaWYgKHR5cGVvZiB2YSA9PT0gIm51bWJlciIgJiYgdHlwZW9mIHZiID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuICh2YSAtIHZiKSAqIGRpcjsKICAgIGNvbnN0IHNhID0gU3RyaW5nKHZhKS50b0xvd2VyQ2FzZSgpOwogICAgY29uc3Qgc2IgPSBTdHJpbmcodmIpLnRvTG93ZXJDYXNlKCk7CiAgICBpZiAoc2EgPCBzYikKICAgICAgcmV0dXJuIC0xICogZGlyOwogICAgaWYgKHNhID4gc2IpCiAgICAgIHJldHVybiAxICogZGlyOwogICAgcmV0dXJuIDA7CiAgfSk7CiAgcmV0dXJuIGFycjsKfQoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRhYmxlL2x1Y2VuZS5qcwpmdW5jdGlvbiBzdHJpcFF1b3RlcyhzOSkgewogIGlmIChzOS5zdGFydHNXaXRoKCciJykgJiYgczkuZW5kc1dpdGgoJyInKSB8fCBzOS5zdGFydHNXaXRoKCInIikgJiYgczkuZW5kc1dpdGgoIiciKSkgewogICAgcmV0dXJuIHM5LnNsaWNlKDEsIC0xKTsKICB9CiAgcmV0dXJuIHM5Owp9CmZ1bmN0aW9uIHNwbGl0QnlPcihpbnB1dCkgewogIHJldHVybiBpbnB1dC5zcGxpdCgvXHMrT1JccysvaSkubWFwKChzOSkgPT4gczkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7Cn0KZnVuY3Rpb24gc3BsaXRCeUFuZChpbnB1dCkgewogIHJldHVybiBpbnB1dC5zcGxpdCgvXHMrQU5EXHMrL2kpLm1hcCgoczkpID0+IHM5LnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOwp9CmZ1bmN0aW9uIHBhcnNlVGVybShyYXcyKSB7CiAgaWYgKCFyYXcyKQogICAgcmV0dXJuIG51bGw7CiAgbGV0IG5lZ2F0ZSA9IGZhbHNlOwogIGNvbnN0IG5vdE1hdGNoID0gcmF3Mi5tYXRjaCgvXlxzKihOT1Rccyt8LSlccyooLiopJC9pKTsKICBpZiAobm90TWF0Y2gpIHsKICAgIG5lZ2F0ZSA9IHRydWU7CiAgICByYXcyID0gbm90TWF0Y2hbMl07CiAgfQogIGNvbnN0IHJhbmdlTWF0Y2ggPSByYXcyLm1hdGNoKC9eKFteOlxzXSspXHMqOlxzKlxbKC4qPylccytUT1xzKyguKj8pXF0kL2kpOwogIGlmIChyYW5nZU1hdGNoKSB7CiAgICByZXR1cm4gewogICAgICBmaWVsZDogcmFuZ2VNYXRjaFsxXSwKICAgICAgbmVnYXRlLAogICAgICByYW5nZTogeyBsb3dlcjogc3RyaXBRdW90ZXMocmFuZ2VNYXRjaFsyXSkudG9Mb3dlckNhc2UoKSwgdXBwZXI6IHN0cmlwUXVvdGVzKHJhbmdlTWF0Y2hbM10pLnRvTG93ZXJDYXNlKCksIGluY2x1c2l2ZTogdHJ1ZSB9CiAgICB9OwogIH0KICBjb25zdCBtNiA9IHJhdzIubWF0Y2goL14oW146XHNdKylccyo6XHMqKCJbXiJdKiJ8J1teJ10qJ3xbXiInXHNdKykkLyk7CiAgaWYgKG02KSB7CiAgICByZXR1cm4geyBmaWVsZDogbTZbMV0sIHZhbHVlOiBzdHJpcFF1b3RlcyhtNlsyXSkudG9Mb3dlckNhc2UoKSwgbmVnYXRlIH07CiAgfQogIGlmIChyYXcyLmxlbmd0aCA+IDApIHsKICAgIHJldHVybiB7IHZhbHVlOiBzdHJpcFF1b3RlcyhyYXcyKS50b0xvd2VyQ2FzZSgpLCBuZWdhdGUgfTsKICB9CiAgcmV0dXJuIG51bGw7Cn0KZnVuY3Rpb24gcGFyc2VMdWNlbmUoaW5wdXQpIHsKICBpZiAoIWlucHV0KQogICAgcmV0dXJuIG51bGw7CiAgY29uc3QgY2xhdXNlcyA9IHNwbGl0QnlPcihpbnB1dCkubWFwKChjbGF1c2VTdHIpID0+IHsKICAgIGNvbnN0IHRlcm1zID0gc3BsaXRCeUFuZChjbGF1c2VTdHIpLm1hcChwYXJzZVRlcm0pLmZpbHRlcigodDkpID0+ICEhdDkgJiYgISF0OS52YWx1ZSk7CiAgICByZXR1cm4geyB0ZXJtcyB9OwogIH0pLmZpbHRlcigoYzExKSA9PiBjMTEudGVybXMubGVuZ3RoID4gMCk7CiAgaWYgKGNsYXVzZXMubGVuZ3RoID09PSAwKQogICAgcmV0dXJuIG51bGw7CiAgcmV0dXJuIHsgY2xhdXNlcyB9Owp9CmZ1bmN0aW9uIGNvbXBpbGVMdWNlbmVQcmVkaWNhdGUoaW5wdXQsIG1vZGUsIGNvbHVtbnMpIHsKICBjb25zdCBhc3QgPSBwYXJzZUx1Y2VuZShpbnB1dCk7CiAgaWYgKCFhc3QpCiAgICByZXR1cm4gbnVsbDsKICBjb25zdCBjb2xNYXAgPSBuZXcgTWFwKGNvbHVtbnMubWFwKChjMTEpID0+IFtTdHJpbmcoYzExLmtleSksIGMxMV0pKTsKICBjb25zdCBjbXAgPSAoYTUsIGI1KSA9PiBhNSA8IGI1ID8gLTEgOiBhNSA+IGI1ID8gMSA6IDA7CiAgY29uc3QgY29lcmNlMiA9IChzOSkgPT4gewogICAgY29uc3Qgc3RyID0gU3RyaW5nKHM5ID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgY29uc3QgbnVtID0gTnVtYmVyKHN0cik7CiAgICBjb25zdCBkYXRlID0gRGF0ZS5wYXJzZShzdHIpOwogICAgaWYgKCFOdW1iZXIuaXNOYU4obnVtKSAmJiBzdHIudHJpbSgpICE9PSAiIikKICAgICAgcmV0dXJuIHsgdDogIm4iLCB2OiBudW0gfTsKICAgIGlmICghTnVtYmVyLmlzTmFOKGRhdGUpKQogICAgICByZXR1cm4geyB0OiAiZCIsIHY6IGRhdGUgfTsKICAgIHJldHVybiB7IHQ6ICJzIiwgdjogc3RyIH07CiAgfTsKICBjb25zdCBpblJhbmdlID0gKHZhbCwgbG93ZXIsIHVwcGVyKSA9PiB7CiAgICBjb25zdCBhNSA9IGNvZXJjZTIodmFsKTsKICAgIGNvbnN0IGxvID0gY29lcmNlMihsb3dlcik7CiAgICBjb25zdCB1cCA9IGNvZXJjZTIodXBwZXIpOwogICAgaWYgKGE1LnQgPT09ICJzIiAmJiBsby50ID09PSAicyIgJiYgdXAudCA9PT0gInMiKSB7CiAgICAgIGNvbnN0IGF2ID0gYTUudjsKICAgICAgcmV0dXJuIGNtcChhdiwgbG8udikgPj0gMCAmJiBjbXAoYXYsIHVwLnYpIDw9IDA7CiAgICB9CiAgICBpZiAoYTUudCA9PT0gIm4iICYmIGxvLnQgPT09ICJuIiAmJiB1cC50ID09PSAibiIpIHsKICAgICAgY29uc3QgYXYgPSBhNS52OwogICAgICByZXR1cm4gYXYgPj0gbG8udiAmJiBhdiA8PSB1cC52OwogICAgfQogICAgaWYgKGE1LnQgPT09ICJkIiAmJiBsby50ID09PSAiZCIgJiYgdXAudCA9PT0gImQiKSB7CiAgICAgIGNvbnN0IGF2ID0gYTUudjsKICAgICAgcmV0dXJuIGF2ID49IGxvLnYgJiYgYXYgPD0gdXAudjsKICAgIH0KICAgIGNvbnN0IGFzID0gU3RyaW5nKHZhbCA/PyAiIikudG9Mb3dlckNhc2UoKTsKICAgIHJldHVybiBjbXAoYXMsIGxvd2VyKSA+PSAwICYmIGNtcChhcywgdXBwZXIpIDw9IDA7CiAgfTsKICByZXR1cm4gKHJvdykgPT4gewogICAgZm9yIChjb25zdCBjbGF1c2Ugb2YgYXN0LmNsYXVzZXMpIHsKICAgICAgbGV0IGNsYXVzZU9rID0gdHJ1ZTsKICAgICAgZm9yIChjb25zdCB0ZXJtIG9mIGNsYXVzZS50ZXJtcykgewogICAgICAgIGxldCBvazMgPSBmYWxzZTsKICAgICAgICBpZiAodGVybS5yYW5nZSAmJiB0ZXJtLmZpZWxkKSB7CiAgICAgICAgICBpZiAobW9kZSA9PT0gImRhdGEiKSB7CiAgICAgICAgICAgIG9rMyA9IGluUmFuZ2Uocm93W3Rlcm0uZmllbGRdLCB0ZXJtLnJhbmdlLmxvd2VyLCB0ZXJtLnJhbmdlLnVwcGVyKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGNvbE1hcC5nZXQodGVybS5maWVsZCk7CiAgICAgICAgICAgIGlmICghY29sIHx8IGNvbC5oaWRkZW4pIHsKICAgICAgICAgICAgICBvazMgPSBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjb25zdCB2YWwgPSBjb2wudmFsdWUgPyBjb2wudmFsdWUocm93KSA6IHJvd1tjb2wua2V5XTsKICAgICAgICAgICAgICBvazMgPSBpblJhbmdlKHZhbCwgdGVybS5yYW5nZS5sb3dlciwgdGVybS5yYW5nZS51cHBlcik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHRlcm0uZmllbGQgJiYgdGVybS52YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICBpZiAobW9kZSA9PT0gImRhdGEiKSB7CiAgICAgICAgICAgIGNvbnN0IHM5ID0gU3RyaW5nKHJvd1t0ZXJtLmZpZWxkXSA/PyAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgb2szID0gczkuaW5jbHVkZXModGVybS52YWx1ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBjb2wgPSBjb2xNYXAuZ2V0KHRlcm0uZmllbGQpOwogICAgICAgICAgICBpZiAoIWNvbCB8fCBjb2wuaGlkZGVuID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgb2szID0gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29uc3QgdmFsID0gY29sLnZhbHVlID8gY29sLnZhbHVlKHJvdykgOiByb3dbY29sLmtleV07CiAgICAgICAgICAgICAgY29uc3QgczkgPSBTdHJpbmcodmFsID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgIG9rMyA9IHM5LmluY2x1ZGVzKHRlcm0udmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0ZXJtLnZhbHVlICE9IG51bGwpIHsKICAgICAgICAgIGlmIChtb2RlID09PSAiZGF0YSIpIHsKICAgICAgICAgICAgb2szID0gT2JqZWN0LnZhbHVlcyhyb3cpLnNvbWUoKHY1KSA9PiBTdHJpbmcodjUgPz8gIiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybS52YWx1ZSkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb2szID0gY29sdW1ucy5zb21lKChjb2wpID0+IHsKICAgICAgICAgICAgICBpZiAoY29sLmhpZGRlbikKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICBjb25zdCB2YWwgPSBjb2wudmFsdWUgPyBjb2wudmFsdWUocm93KSA6IHJvd1tjb2wua2V5XTsKICAgICAgICAgICAgICBjb25zdCBzOSA9IFN0cmluZyh2YWwgPz8gIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgcmV0dXJuIHM5LmluY2x1ZGVzKHRlcm0udmFsdWUpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHRlcm0ubmVnYXRlKQogICAgICAgICAgb2szID0gIW9rMzsKICAgICAgICBpZiAoIW9rMykgewogICAgICAgICAgY2xhdXNlT2sgPSBmYWxzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoY2xhdXNlT2spCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfTsKfQoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRhYmxlL2RlZXMtdGFibGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMzIgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczMzID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzVGFibGUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXRhYmxlIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfaGVhZGluZzFfZGVjb3JhdG9yczsKICBsZXQgX2hlYWRpbmcxX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGVhZGluZzFfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hlYWRpbmcyX2RlY29yYXRvcnM7CiAgbGV0IF9oZWFkaW5nMl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hlYWRpbmcyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kYXRhX2RlY29yYXRvcnM7CiAgbGV0IF9kYXRhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGF0YV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfa2V5X2RlY29yYXRvcnM7CiAgbGV0IF9rZXlfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9rZXlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsX2RlY29yYXRvcnM7CiAgbGV0IF9sYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9kZWNvcmF0b3JzOwogIGxldCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmVxdWlyZWRfZGVjb3JhdG9yczsKICBsZXQgX3JlcXVpcmVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmVxdWlyZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RhdGFOYW1lX2RlY29yYXRvcnM7CiAgbGV0IF9kYXRhTmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RhdGFOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hhYmxlX2RlY29yYXRvcnM7CiAgbGV0IF9zZWFyY2hhYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VhcmNoYWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGF0YUFjdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2RhdGFBY3Rpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGF0YUFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbHVtbnNfZGVjb3JhdG9yczsKICBsZXQgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2x1bW5zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb3dLZXlfZGVjb3JhdG9yczsKICBsZXQgX3Jvd0tleV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Jvd0tleV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fZGVjb3JhdG9yczsKICBsZXQgX2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rpc3BsYXlGdW5jdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfZGlzcGxheUZ1bmN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlzcGxheUZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWREYXRhUm93X2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZERhdGFSb3dfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZERhdGFSb3dfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VkaXRhYmxlRmllbGRzX2RlY29yYXRvcnM7CiAgbGV0IF9lZGl0YWJsZUZpZWxkc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VkaXRhYmxlRmllbGRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93VmVydGljYWxMaW5lc19kZWNvcmF0b3JzOwogIGxldCBfc2hvd1ZlcnRpY2FsTGluZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93VmVydGljYWxMaW5lc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0hvcml6b250YWxMaW5lc19kZWNvcmF0b3JzOwogIGxldCBfc2hvd0hvcml6b250YWxMaW5lc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dIb3Jpem9udGFsTGluZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dHcmlkX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93R3JpZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dHcmlkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zb3J0S2V5X2RlY29yYXRvcnM7CiAgbGV0IF9zb3J0S2V5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc29ydEtleV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc29ydERpcl9kZWNvcmF0b3JzOwogIGxldCBfc29ydERpcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NvcnREaXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlclRleHRfZGVjb3JhdG9yczsKICBsZXQgX2ZpbHRlclRleHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWx0ZXJUZXh0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2x1bW5GaWx0ZXJzX2RlY29yYXRvcnM7CiAgbGV0IF9jb2x1bW5GaWx0ZXJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sdW1uRmlsdGVyc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0NvbHVtbkZpbHRlcnNfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dDb2x1bW5GaWx0ZXJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0NvbHVtbkZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3N0aWNreUhlYWRlcl9kZWNvcmF0b3JzOwogIGxldCBfc3RpY2t5SGVhZGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RpY2t5SGVhZGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hNb2RlX2RlY29yYXRvcnM7CiAgbGV0IF9zZWFyY2hNb2RlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VhcmNoTW9kZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0aW9uTW9kZV9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0aW9uTW9kZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGlvbk1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkSWRzX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZElkc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkSWRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNUYWJsZTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9oZWFkaW5nMV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfaGVhZGluZzJfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX2RhdGFfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQXJyYXkKICAgICAgfSldOwogICAgICBfa2V5X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZwogICAgICB9KV07CiAgICAgIF9sYWJlbF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfZGlzYWJsZWRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9yZXF1aXJlZF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuCiAgICAgIH0pXTsKICAgICAgX2RhdGFOYW1lX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3NlYXJjaGFibGVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9kYXRhQWN0aW9uc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBBcnJheQogICAgICB9KV07CiAgICAgIF9jb2x1bW5zX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX3Jvd0tleV9kZWNvcmF0b3JzID0gW241KHsgYXR0cmlidXRlOiBmYWxzZSB9KV07CiAgICAgIF9hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9kaXNwbGF5RnVuY3Rpb25fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgYXR0cmlidXRlOiBmYWxzZQogICAgICB9KV07CiAgICAgIF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIGF0dHJpYnV0ZTogZmFsc2UKICAgICAgfSldOwogICAgICBfc2VsZWN0ZWREYXRhUm93X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IE9iamVjdAogICAgICB9KV07CiAgICAgIF9lZGl0YWJsZUZpZWxkc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBBcnJheQogICAgICB9KV07CiAgICAgIF9zaG93VmVydGljYWxMaW5lc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUsCiAgICAgICAgYXR0cmlidXRlOiAic2hvdy12ZXJ0aWNhbC1saW5lcyIKICAgICAgfSldOwogICAgICBfc2hvd0hvcml6b250YWxMaW5lc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUsCiAgICAgICAgYXR0cmlidXRlOiAic2hvdy1ob3Jpem9udGFsLWxpbmVzIgogICAgICB9KV07CiAgICAgIF9zaG93R3JpZF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUsCiAgICAgICAgYXR0cmlidXRlOiAic2hvdy1ncmlkIgogICAgICB9KV07CiAgICAgIF9zb3J0S2V5X2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX3NvcnREaXJfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfZmlsdGVyVGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2NvbHVtbkZpbHRlcnNfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfc2hvd0NvbHVtbkZpbHRlcnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogInNob3ctY29sdW1uLWZpbHRlcnMiIH0pXTsKICAgICAgX3N0aWNreUhlYWRlcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSwgYXR0cmlidXRlOiAic3RpY2t5LWhlYWRlciIgfSldOwogICAgICBfc2VhcmNoTW9kZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3NlbGVjdGlvbk1vZGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zZWxlY3RlZElkc19kZWNvcmF0b3JzID0gW241KHsgYXR0cmlidXRlOiBmYWxzZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9oZWFkaW5nMV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJoZWFkaW5nMSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGVhZGluZzEiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaGVhZGluZzEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmhlYWRpbmcxID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hlYWRpbmcxX2luaXRpYWxpemVycywgX2hlYWRpbmcxX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2hlYWRpbmcyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhlYWRpbmcyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoZWFkaW5nMiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oZWFkaW5nMiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaGVhZGluZzIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaGVhZGluZzJfaW5pdGlhbGl6ZXJzLCBfaGVhZGluZzJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfZGF0YV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkYXRhIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRhdGEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRhdGEgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGF0YV9pbml0aWFsaXplcnMsIF9kYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2tleV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJrZXkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImtleSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5rZXksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmtleSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9rZXlfaW5pdGlhbGl6ZXJzLCBfa2V5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2xhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYWJlbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFiZWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfZGlzYWJsZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlzYWJsZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc2FibGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXNhYmxlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9yZXF1aXJlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZXF1aXJlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicmVxdWlyZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVxdWlyZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJlcXVpcmVkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JlcXVpcmVkX2luaXRpYWxpemVycywgX3JlcXVpcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2RhdGFOYW1lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRhdGFOYW1lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkYXRhTmFtZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kYXRhTmFtZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGF0YU5hbWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGF0YU5hbWVfaW5pdGlhbGl6ZXJzLCBfZGF0YU5hbWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2VhcmNoYWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWFyY2hhYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWFyY2hhYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlYXJjaGFibGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlYXJjaGFibGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VhcmNoYWJsZV9pbml0aWFsaXplcnMsIF9zZWFyY2hhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2RhdGFBY3Rpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRhdGFBY3Rpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkYXRhQWN0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kYXRhQWN0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGF0YUFjdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGF0YUFjdGlvbnNfaW5pdGlhbGl6ZXJzLCBfZGF0YUFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfY29sdW1uc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2x1bW5zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb2x1bW5zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbHVtbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbHVtbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29sdW1uc19pbml0aWFsaXplcnMsIF9jb2x1bW5zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX3Jvd0tleV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyb3dLZXkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJvd0tleSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yb3dLZXksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJvd0tleSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yb3dLZXlfaW5pdGlhbGl6ZXJzLCBfcm93S2V5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25faW5pdGlhbGl6ZXJzLCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfZGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpc3BsYXlGdW5jdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZGlzcGxheUZ1bmN0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc3BsYXlGdW5jdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlzcGxheUZ1bmN0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Rpc3BsYXlGdW5jdGlvbl9pbml0aWFsaXplcnMsIF9kaXNwbGF5RnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZXZlcnNlRGlzcGxheUZ1bmN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZXZlcnNlRGlzcGxheUZ1bmN0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJldmVyc2VEaXNwbGF5RnVuY3Rpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJldmVyc2VEaXNwbGF5RnVuY3Rpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9pbml0aWFsaXplcnMsIF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX3NlbGVjdGVkRGF0YVJvd19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZERhdGFSb3ciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkRGF0YVJvdyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZERhdGFSb3csIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkRGF0YVJvdyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZERhdGFSb3dfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWREYXRhUm93X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2VkaXRhYmxlRmllbGRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImVkaXRhYmxlRmllbGRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlZGl0YWJsZUZpZWxkcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lZGl0YWJsZUZpZWxkcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZWRpdGFibGVGaWVsZHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZWRpdGFibGVGaWVsZHNfaW5pdGlhbGl6ZXJzLCBfZWRpdGFibGVGaWVsZHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2hvd1ZlcnRpY2FsTGluZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1ZlcnRpY2FsTGluZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dWZXJ0aWNhbExpbmVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dWZXJ0aWNhbExpbmVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93VmVydGljYWxMaW5lcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93VmVydGljYWxMaW5lc19pbml0aWFsaXplcnMsIF9zaG93VmVydGljYWxMaW5lc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zaG93SG9yaXpvbnRhbExpbmVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dIb3Jpem9udGFsTGluZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dIb3Jpem9udGFsTGluZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0hvcml6b250YWxMaW5lcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd0hvcml6b250YWxMaW5lcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93SG9yaXpvbnRhbExpbmVzX2luaXRpYWxpemVycywgX3Nob3dIb3Jpem9udGFsTGluZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2hvd0dyaWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0dyaWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dHcmlkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dHcmlkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93R3JpZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93R3JpZF9pbml0aWFsaXplcnMsIF9zaG93R3JpZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zb3J0S2V5X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNvcnRLZXkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNvcnRLZXkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc29ydEtleSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc29ydEtleSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zb3J0S2V5X2luaXRpYWxpemVycywgX3NvcnRLZXlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc29ydERpcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzb3J0RGlyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzb3J0RGlyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNvcnREaXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNvcnREaXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc29ydERpcl9pbml0aWFsaXplcnMsIF9zb3J0RGlyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2ZpbHRlclRleHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyVGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZmlsdGVyVGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5maWx0ZXJUZXh0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXJUZXh0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ZpbHRlclRleHRfaW5pdGlhbGl6ZXJzLCBfZmlsdGVyVGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9jb2x1bW5GaWx0ZXJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbHVtbkZpbHRlcnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbHVtbkZpbHRlcnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29sdW1uRmlsdGVycywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29sdW1uRmlsdGVycyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb2x1bW5GaWx0ZXJzX2luaXRpYWxpemVycywgX2NvbHVtbkZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2hvd0NvbHVtbkZpbHRlcnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0NvbHVtbkZpbHRlcnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dDb2x1bW5GaWx0ZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dDb2x1bW5GaWx0ZXJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93Q29sdW1uRmlsdGVycyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93Q29sdW1uRmlsdGVyc19pbml0aWFsaXplcnMsIF9zaG93Q29sdW1uRmlsdGVyc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zdGlja3lIZWFkZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RpY2t5SGVhZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzdGlja3lIZWFkZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3RpY2t5SGVhZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdGlja3lIZWFkZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3RpY2t5SGVhZGVyX2luaXRpYWxpemVycywgX3N0aWNreUhlYWRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zZWFyY2hNb2RlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlYXJjaE1vZGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlYXJjaE1vZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VhcmNoTW9kZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VhcmNoTW9kZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWFyY2hNb2RlX2luaXRpYWxpemVycywgX3NlYXJjaE1vZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2VsZWN0aW9uTW9kZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3Rpb25Nb2RlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3Rpb25Nb2RlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGlvbk1vZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGlvbk1vZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0aW9uTW9kZV9pbml0aWFsaXplcnMsIF9zZWxlY3Rpb25Nb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX3NlbGVjdGVkSWRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkSWRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZElkcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZElkcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWRJZHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRJZHNfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRJZHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNUYWJsZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI0OwogICAgI2hlYWRpbmcxX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9oZWFkaW5nMV9pbml0aWFsaXplcnMsICJoZWFkaW5nIDEiKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgaGVhZGluZzEoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoZWFkaW5nMV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhlYWRpbmcxKHZhbHVlMikgewogICAgICB0aGlzLiNoZWFkaW5nMV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2hlYWRpbmcyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfaGVhZGluZzFfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9oZWFkaW5nMl9pbml0aWFsaXplcnMsICJoZWFkaW5nIDIiKSk7CiAgICBnZXQgaGVhZGluZzIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoZWFkaW5nMl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhlYWRpbmcyKHZhbHVlMikgewogICAgICB0aGlzLiNoZWFkaW5nMl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9oZWFkaW5nMl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IGRhdGEoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkYXRhX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGF0YSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2tleV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9rZXlfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIC8vIGRlZXMtZm9ybSBjb21wYXRpYmlsaXR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBnZXQga2V5KCkgewogICAgICByZXR1cm4gdGhpcy4ja2V5X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQga2V5KHZhbHVlMikgewogICAgICB0aGlzLiNrZXlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2tleV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2xhYmVsX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgbGFiZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxhYmVsKHZhbHVlMikgewogICAgICB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgZGlzYWJsZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkaXNhYmxlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRpc2FibGVkKHZhbHVlMikgewogICAgICB0aGlzLiNkaXNhYmxlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3JlcXVpcmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZGlzYWJsZWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9yZXF1aXJlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgcmVxdWlyZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJlcXVpcmVkKHZhbHVlMikgewogICAgICB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy5kYXRhOwogICAgfQogICAgc2V0IHZhbHVlKF92YWx1ZUFyZykgewogICAgfQogICAgY2hhbmdlU3ViamVjdCA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9yZXF1aXJlZF9leHRyYUluaXRpYWxpemVycyksIG5ldyBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRyeC5yeGpzLlN1YmplY3QoKSk7CiAgICAjZGF0YU5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFOYW1lX2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgIC8vIGVuZCBkZWVzLWZvcm0gY29tcGF0aWJpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLyoqCiAgICAgKiBXaGF0IGRvZXMgYSByb3cgb2YgZGF0YSByZXByZXNlbnQ/CiAgICAgKi8KICAgIGdldCBkYXRhTmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RhdGFOYW1lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGF0YU5hbWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2RhdGFOYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VhcmNoYWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VhcmNoYWJsZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzZWFyY2hhYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VhcmNoYWJsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlYXJjaGFibGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlYXJjaGFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkYXRhQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NlYXJjaGFibGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9kYXRhQWN0aW9uc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZGF0YUFjdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkYXRhQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRhdGFBY3Rpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNkYXRhQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbHVtbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9kYXRhQWN0aW9uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgLy8gc2NoZW1hLWZpcnN0IGNvbHVtbnMgQVBJCiAgICBnZXQgY29sdW1ucygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvbHVtbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb2x1bW5zKHZhbHVlMikgewogICAgICB0aGlzLiNjb2x1bW5zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcm93S2V5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfY29sdW1uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Jvd0tleV9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgLyoqCiAgICAgKiBTdGFibGUgcm93IGlkZW50aXR5IGZvciBzZWxlY3Rpb24gYW5kIHVwZGF0ZXMuIElmIHByb3ZpZGVkIGFzIGEgZnVuY3Rpb24sCiAgICAgKiBpdCBpcyBvbmx5IHVzYWJsZSBhcyBhIHByb3BlcnR5IChub3QgdmlhIGF0dHJpYnV0ZSkuCiAgICAgKi8KICAgIGdldCByb3dLZXkoKSB7CiAgICAgIHJldHVybiB0aGlzLiNyb3dLZXlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCByb3dLZXkodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Jvd0tleV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfcm93S2V5X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgLyoqCiAgICAgKiBXaGVuIHRydWUgYW5kIGNvbHVtbnMgYXJlIHByb3ZpZGVkLCBtZXJnZSBhbnkgbWlzc2luZyBjb2x1bW5zIGRpc2NvdmVyZWQKICAgICAqIHZpYSBkaXNwbGF5RnVuY3Rpb24gaW50byB0aGUgZWZmZWN0aXZlIHNjaGVtYS4KICAgICAqLwogICAgZ2V0IGF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2Rpc3BsYXlGdW5jdGlvbl9pbml0aWFsaXplcnMsIChpdGVtQXJnKSA9PiBpdGVtQXJnKSk7CiAgICBnZXQgZGlzcGxheUZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jZGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGlzcGxheUZ1bmN0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNkaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNyZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZGlzcGxheUZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9pbml0aWFsaXplcnMsIChpdGVtQXJnKSA9PiBpdGVtQXJnKSk7CiAgICBnZXQgcmV2ZXJzZURpc3BsYXlGdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3JldmVyc2VEaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCByZXZlcnNlRGlzcGxheUZ1bmN0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNyZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWREYXRhUm93X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NlbGVjdGVkRGF0YVJvd19pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHNlbGVjdGVkRGF0YVJvdygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkRGF0YVJvd19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkRGF0YVJvdyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWREYXRhUm93X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZWRpdGFibGVGaWVsZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zZWxlY3RlZERhdGFSb3dfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9lZGl0YWJsZUZpZWxkc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZWRpdGFibGVGaWVsZHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlZGl0YWJsZUZpZWxkc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGVkaXRhYmxlRmllbGRzKHZhbHVlMikgewogICAgICB0aGlzLiNlZGl0YWJsZUZpZWxkc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dWZXJ0aWNhbExpbmVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZWRpdGFibGVGaWVsZHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zaG93VmVydGljYWxMaW5lc19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgc2hvd1ZlcnRpY2FsTGluZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93VmVydGljYWxMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dWZXJ0aWNhbExpbmVzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93VmVydGljYWxMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dIb3Jpem9udGFsTGluZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zaG93VmVydGljYWxMaW5lc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dIb3Jpem9udGFsTGluZXNfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHNob3dIb3Jpem9udGFsTGluZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93SG9yaXpvbnRhbExpbmVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd0hvcml6b250YWxMaW5lcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd0hvcml6b250YWxMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dHcmlkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2hvd0hvcml6b250YWxMaW5lc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dHcmlkX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IHNob3dHcmlkKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0dyaWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93R3JpZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd0dyaWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGZpbGVzID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dHcmlkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgW10pOwogICAgZmlsZVdlYWtNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIGRhdGFDaGFuZ2VTdWJqZWN0ID0gbmV3IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydHJ4LnJ4anMuU3ViamVjdCgpOwogICAgI3NvcnRLZXlfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NvcnRLZXlfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgLy8gc2ltcGxlIGNsaWVudC1zaWRlIHNvcnRpbmcgKFBoYXNlIDEpCiAgICBnZXQgc29ydEtleSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NvcnRLZXlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzb3J0S2V5KHZhbHVlMikgewogICAgICB0aGlzLiNzb3J0S2V5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc29ydERpcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NvcnRLZXlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zb3J0RGlyX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IHNvcnREaXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzb3J0RGlyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc29ydERpcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc29ydERpcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2ZpbHRlclRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zb3J0RGlyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZmlsdGVyVGV4dF9pbml0aWFsaXplcnMsICIiKSk7CiAgICAvLyBzaW1wbGUgY2xpZW50LXNpZGUgZmlsdGVyaW5nIChQaGFzZSAxKQogICAgZ2V0IGZpbHRlclRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmaWx0ZXJUZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsdGVyVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsdGVyVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbHVtbkZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9maWx0ZXJUZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfY29sdW1uRmlsdGVyc19pbml0aWFsaXplcnMsIHt9KSk7CiAgICAvLyBwZXItY29sdW1uIHF1aWNrIGZpbHRlcnMKICAgIGdldCBjb2x1bW5GaWx0ZXJzKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sdW1uRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbHVtbkZpbHRlcnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbHVtbkZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93Q29sdW1uRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2NvbHVtbkZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zaG93Q29sdW1uRmlsdGVyc19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgc2hvd0NvbHVtbkZpbHRlcnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93Q29sdW1uRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dDb2x1bW5GaWx0ZXJzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93Q29sdW1uRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3N0aWNreUhlYWRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dDb2x1bW5GaWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc3RpY2t5SGVhZGVyX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzdGlja3lIZWFkZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdGlja3lIZWFkZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdGlja3lIZWFkZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3N0aWNreUhlYWRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlYXJjaE1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zdGlja3lIZWFkZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zZWFyY2hNb2RlX2luaXRpYWxpemVycywgInRhYmxlIikpOwogICAgLy8gc2VhcmNoIHJvdyBzdGF0ZQogICAgZ2V0IHNlYXJjaE1vZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWFyY2hNb2RlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VhcmNoTW9kZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VhcmNoTW9kZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgX19zZWFyY2hUZXh0U3ViID0gX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VhcmNoTW9kZV9leHRyYUluaXRpYWxpemVycyk7CiAgICBfX3NlYXJjaE1vZGVTdWI7CiAgICAjc2VsZWN0aW9uTW9kZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VsZWN0aW9uTW9kZV9pbml0aWFsaXplcnMsICJub25lIik7CiAgICAvLyBzZWxlY3Rpb24gKFBoYXNlIDEpCiAgICBnZXQgc2VsZWN0aW9uTW9kZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGlvbk1vZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3Rpb25Nb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3Rpb25Nb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRJZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zZWxlY3Rpb25Nb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VsZWN0ZWRJZHNfaW5pdGlhbGl6ZXJzLCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSk7CiAgICBnZXQgc2VsZWN0ZWRJZHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZElkc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkSWRzKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZElkc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgX3Jvd0lkTWFwID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NlbGVjdGVkSWRzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpOwogICAgX3Jvd0lkQ291bnRlciA9IDA7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSB0YWJsZVN0eWxlczsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgdXNpbmdDb2x1bW5zID0gQXJyYXkuaXNBcnJheSh0aGlzLmNvbHVtbnMpICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwOwogICAgICBjb25zdCBlZmZlY3RpdmVDb2x1bW5zID0gdXNpbmdDb2x1bW5zID8gY29tcHV0ZUVmZmVjdGl2ZUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uLCB0aGlzLmRpc3BsYXlGdW5jdGlvbiwgdGhpcy5kYXRhKSA6IGNvbXB1dGVDb2x1bW5zRnJvbURpc3BsYXlGdW5jdGlvbih0aGlzLmRpc3BsYXlGdW5jdGlvbiwgdGhpcy5kYXRhKTsKICAgICAgY29uc3QgbHVjZW5lUHJlZCA9IGNvbXBpbGVMdWNlbmVQcmVkaWNhdGUodGhpcy5maWx0ZXJUZXh0LCB0aGlzLnNlYXJjaE1vZGUgPT09ICJkYXRhIiA/ICJkYXRhIiA6ICJ0YWJsZSIsIGVmZmVjdGl2ZUNvbHVtbnMpOwogICAgICBjb25zdCB2aWV3RGF0YSA9IGdldFZpZXdEYXRhKHRoaXMuZGF0YSwgZWZmZWN0aXZlQ29sdW1ucywgdGhpcy5zb3J0S2V5LCB0aGlzLnNvcnREaXIsIHRoaXMuZmlsdGVyVGV4dCwgdGhpcy5jb2x1bW5GaWx0ZXJzLCB0aGlzLnNlYXJjaE1vZGUgPT09ICJkYXRhIiA/ICJkYXRhIiA6ICJ0YWJsZSIsIGx1Y2VuZVByZWQgfHwgdm9pZCAwKTsKICAgICAgdGhpcy5fbGFzdFZpZXdEYXRhID0gdmlld0RhdGE7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgPCEtLSB0aGUgaGVhZGluZyBwYXJ0IC0tPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nQ29udGFpbmVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZyBoZWFkaW5nMSI+JHt0aGlzLmxhYmVsIHx8IHRoaXMuaGVhZGluZzF9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmcgaGVhZGluZzIiPiR7dGhpcy5oZWFkaW5nMn08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyQWN0aW9ucyI+CiAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlc29sdmVFeGVjKGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCByZXN1bHRBcnJheSA9IFtdOwogICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuZGF0YUFjdGlvbnMpIHsKICAgICAgICAgIGlmICghYWN0aW9uLnR5cGUuaW5jbHVkZXMoImhlYWRlciIpKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIHJlc3VsdEFycmF5LnB1c2goYjJgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJoZWFkZXJBY3Rpb24iCiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gewogICAgICAgICAgICBhY3Rpb24uYWN0aW9uRnVuYyh7CiAgICAgICAgICAgICAgaXRlbTogdGhpcy5zZWxlY3RlZERhdGFSb3csCiAgICAgICAgICAgICAgdGFibGU6IHRoaXMKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9fQogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgJHthY3Rpb24uaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uU2l6ZT0kezE0fSAuaWNvbj0ke2FjdGlvbi5pY29uTmFtZX0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb24ubmFtZX1gIDogYWN0aW9uLm5hbWV9CiAgICAgICAgICAgICAgICAgIDwvZGl2PmApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CiAgICAgIH0pfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZ1NlcGFyYXRpb24iPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaEdyaWQgaGlkZGVuIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7Imx1Y2VuZSBzeW50YXggc2VhcmNoIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7YAogICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBsdWNlbmUgc3ludGF4IHRvIHNlYXJjaCBmb3IgZGF0YSwgZS5nLjoKICAgICAgICAgICAgICAKICAgICAgICAgICAgICBcYFxgXGAKICAgICAgICAgICAgICBuYW1lOiAiam9obiIgQU5EIGFnZTogMTgKICAgICAgICAgICAgICBcYFxgXGAKICAgICAgICAgICAgICAKICAgICAgICAgICAgYH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJzZWFyY2ggbW9kZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJ0YWJsZSIsICJkYXRhIiwgInNlcnZlciJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsidGFibGUifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHtgCiAgICAgICAgICAgICAgVGhlcmUgYXJlIHRocmVlIGJhc2ljIG1vZGVzOgogICAgICAgICAgICAgIAogICAgICAgICAgICAgICogdGFibGU6IG9ubHkgc2VhcmNoZXMgZGF0YSBhbHJlYWR5IGluIHRoZSB0YWJsZQogICAgICAgICAgICAgICogZGF0YTogc2VhcmNoZXMgb3JpZ2luYWwgZGF0YSwgaWdub3JpbmcgdGFibGUgdHJhbnNmb3JtcwogICAgICAgICAgICAgICogc2VydmVyOiBzZWFyY2hlcyBkYXRhIG9uIHRoZSBzZXJ2ZXIKICAgICAgICAgICAgICAKICAgICAgICAgICAgYH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gdGhlIGFjdHVhbCB0YWJsZSAtLT4KICAgICAgICA8c3R5bGU+PC9zdHlsZT4KICAgICAgICAke3RoaXMuZGF0YS5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGVTY3JvbGwiPgogICAgICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICR7dGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAibm9uZSIgPyBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjQycHg7IHRleHQtYWxpZ246Y2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuc2VsZWN0aW9uTW9kZSA9PT0gIm11bHRpIiA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5hcmVBbGxWaXNpYmxlU2VsZWN0ZWQoKX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmluZGV0ZXJtaW5hdGU9JHt0aGlzLmlzVmlzaWJsZVNlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5ld1ZhbHVlPSR7KGUxMSkgPT4gewogICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB0aGlzLnNldFNlbGVjdFZpc2libGUoZTExLmRldGFpbCA9PT0gdHJ1ZSk7CiAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAgOiBiMmBgfQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIGAgOiBiMmBgfQogICAgICAgICAgICAgICAgICAgICR7ZWZmZWN0aXZlQ29sdW1ucy5maWx0ZXIoKGMxMSkgPT4gIWMxMS5oaWRkZW4pLm1hcCgoY29sKSA9PiB7CiAgICAgICAgY29uc3QgaXNTb3J0YWJsZSA9ICEhY29sLnNvcnRhYmxlOwogICAgICAgIGNvbnN0IGFyaWFTb3J0ID0gdGhpcy5nZXRBcmlhU29ydChjb2wpOwogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICA8dGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9ImNvbHVtbmhlYWRlciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtc29ydD0ke2FyaWFTb3J0fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IiR7aXNTb3J0YWJsZSA/ICJjdXJzb3I6IHBvaW50ZXI7IiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IGlzU29ydGFibGUgPyB0aGlzLnRvZ2dsZVNvcnQoY29sKSA6IG51bGx9CiAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb2wuaGVhZGVyID8/IGNvbC5rZXl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMucmVuZGVyU29ydEluZGljYXRvcihjb2wpfQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+YDsKICAgICAgfSl9CiAgICAgICAgICAgICAgICAgICAgJHsoKCkgPT4gewogICAgICAgIGlmICh0aGlzLmRhdGFBY3Rpb25zICYmIHRoaXMuZGF0YUFjdGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgICAgcmV0dXJuIGIyYCA8dGggY2xhc3M9ImFjdGlvbnNDb2wiPkFjdGlvbnM8L3RoPiBgOwogICAgICAgIH0KICAgICAgfSkoKX0KICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgJHt0aGlzLnNob3dDb2x1bW5GaWx0ZXJzID8gYjJgPHRyIGNsYXNzPSJmaWx0ZXJzUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICJub25lIiA/IGIyYDx0aCBzdHlsZT0id2lkdGg6NDJweDsiPjwvdGg+YCA6IGIyYGB9CiAgICAgICAgICAgICAgICAgICAgICAgICR7ZWZmZWN0aXZlQ29sdW1ucy5maWx0ZXIoKGMxMSkgPT4gIWMxMS5oaWRkZW4pLm1hcCgoY29sKSA9PiB7CiAgICAgICAgY29uc3Qga2V5MiA9IFN0cmluZyhjb2wua2V5KTsKICAgICAgICBpZiAoY29sLmZpbHRlcmFibGUgPT09IGZhbHNlKQogICAgICAgICAgcmV0dXJuIGIyYDx0aD48L3RoPmA7CiAgICAgICAgcmV0dXJuIGIyYDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJGaWx0ZXIuLi4iIC52YWx1ZT0ke3RoaXMuY29sdW1uRmlsdGVyc1trZXkyXSB8fCAiIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiB0aGlzLnNldENvbHVtbkZpbHRlcihrZXkyLCBlMTEudGFyZ2V0LnZhbHVlKX0gLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+YDsKICAgICAgfSl9CiAgICAgICAgICAgICAgICAgICAgICAgICR7KCgpID0+IHsKICAgICAgICBpZiAodGhpcy5kYXRhQWN0aW9ucyAmJiB0aGlzLmRhdGFBY3Rpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHJldHVybiBiMmAgPHRoPjwvdGg+IGA7CiAgICAgICAgfQogICAgICB9KSgpfQogICAgICAgICAgICAgICAgICAgICAgPC90cj5gIDogYjJgYH0KICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICAgICR7dmlld0RhdGEubWFwKChpdGVtQXJnLCByb3dJbmRleCkgPT4gewogICAgICAgIGNvbnN0IGdldFRyID0gKGVsZW1lbnRBcmcpID0+IHsKICAgICAgICAgIGlmIChlbGVtZW50QXJnLnRhZ05hbWUgPT09ICJUUiIpIHsKICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRBcmc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZ2V0VHIoZWxlbWVudEFyZy5wYXJlbnRFbGVtZW50KTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICAgICAgICAgIDx0cgogICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YVJvdyA9IGl0ZW1Bcmc7CiAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAic2luZ2xlIikgewogICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Um93SWQoaXRlbUFyZyk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuY2xlYXIoKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5hZGQoaWQpOwogICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTsKICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgICB9CiAgICAgICAgfX0KICAgICAgICAgICAgICAgICAgICAgICAgQGRyYWdlbnRlcj0ke2FzeW5jIChldmVudEFyZykgPT4gewogICAgICAgICAgZXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGV2ZW50QXJnLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgY29uc3QgcmVhbFRhcmdldCA9IGdldFRyKGV2ZW50QXJnLnRhcmdldCk7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgcmVhbFRhcmdldC5jbGFzc0xpc3QuYWRkKCJoYXNBdHRhY2htZW50Iik7CiAgICAgICAgICB9LCAwKTsKICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ2xlYXZlPSR7YXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgICAgICBldmVudEFyZy5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZXZlbnRBcmcuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICBjb25zdCByZWFsVGFyZ2V0ID0gZ2V0VHIoZXZlbnRBcmcudGFyZ2V0KTsKICAgICAgICAgIHJlYWxUYXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgiaGFzQXR0YWNobWVudCIpOwogICAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgICAgIEBkcmFnb3Zlcj0ke2FzeW5jIChldmVudEFyZykgPT4gewogICAgICAgICAgZXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBAZHJvcD0ke2FzeW5jIChldmVudEFyZykgPT4gewogICAgICAgICAgZXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGNvbnN0IG5ld0ZpbGVzID0gW107CiAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgQXJyYXkuZnJvbShldmVudEFyZy5kYXRhVHJhbnNmZXIuZmlsZXMpKSB7CiAgICAgICAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlKTsKICAgICAgICAgICAgbmV3RmlsZXMucHVzaChmaWxlKTsKICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbGVXZWFrTWFwLmdldChpdGVtQXJnKTsKICAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgIHRoaXMuZmlsZVdlYWtNYXAuc2V0KGl0ZW1BcmcsIG5ld0ZpbGVzKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLm5ld0ZpbGVzKTsKICAgICAgICAgIH0KICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBAY29udGV4dG1lbnU9JHthc3luYyAoZXZlbnRBcmcpID0+IHsKICAgICAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudEFyZywgdGhpcy5nZXRBY3Rpb25zRm9yVHlwZSgiY29udGV4dG1lbnUiKS5tYXAoKGFjdGlvbikgPT4gewogICAgICAgICAgICBjb25zdCBtZW51SXRlbSA9IHsKICAgICAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSwKICAgICAgICAgICAgICBpY29uTmFtZTogYWN0aW9uLmljb25OYW1lLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgYXdhaXQgYWN0aW9uLmFjdGlvbkZ1bmMoewogICAgICAgICAgICAgICAgICBpdGVtOiBpdGVtQXJnLAogICAgICAgICAgICAgICAgICB0YWJsZTogdGhpcwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHJldHVybiBtZW51SXRlbTsKICAgICAgICAgIH0pKTsKICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iJHtpdGVtQXJnID09PSB0aGlzLnNlbGVjdGVkRGF0YVJvdyA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAibm9uZSIgPyBiMmA8dGQgc3R5bGU9IndpZHRoOjQycHg7IHRleHQtYWxpZ246Y2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pc1Jvd1NlbGVjdGVkKGl0ZW1BcmcpfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBuZXdWYWx1ZT0keyhlMTEpID0+IHsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIHRoaXMuc2V0Um93U2VsZWN0ZWQoaXRlbUFyZywgZTExLmRldGFpbCA9PT0gdHJ1ZSk7CiAgICAgICAgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+YCA6IGIyYGB9CiAgICAgICAgICAgICAgICAgICAgICAgICR7ZWZmZWN0aXZlQ29sdW1ucy5maWx0ZXIoKGMxMSkgPT4gIWMxMS5oaWRkZW4pLm1hcCgoY29sLCBjb2xJbmRleCkgPT4gewogICAgICAgICAgY29uc3QgdmFsdWUyID0gZ2V0Q2VsbFZhbHVlKGl0ZW1BcmcsIGNvbCwgdGhpcy5kaXNwbGF5RnVuY3Rpb24pOwogICAgICAgICAgY29uc3QgY29udGVudDMgPSBjb2wucmVuZGVyZXIgPyBjb2wucmVuZGVyZXIodmFsdWUyLCBpdGVtQXJnLCB7IHJvd0luZGV4LCBjb2xJbmRleCwgY29sdW1uOiBjb2wgfSkgOiB2YWx1ZTI7CiAgICAgICAgICBjb25zdCBlZGl0S2V5ID0gU3RyaW5nKGNvbC5rZXkpOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZGJsY2xpY2s9JHsoZTExKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGRibEFjdGlvbiA9IHRoaXMuZGF0YUFjdGlvbnMuZmluZCgoYWN0aW9uQXJnKSA9PiBhY3Rpb25BcmcudHlwZS5pbmNsdWRlcygiZG91YmxlQ2xpY2siKSk7CiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRhYmxlRmllbGRzLmluY2x1ZGVzKGVkaXRLZXkpKSB7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDZWxsRWRpdGluZyhlMTEsIGl0ZW1BcmcsIGVkaXRLZXkpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGRibEFjdGlvbikgewogICAgICAgICAgICAgIGRibEFjdGlvbi5hY3Rpb25GdW5jKHsgaXRlbTogaXRlbUFyZywgdGFibGU6IHRoaXMgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbm5lckNlbGxDb250YWluZXIiPiR7Y29udGVudDN9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgOwogICAgICAgIH0pfQogICAgICAgICAgICAgICAgICAgICAgICAkeygoKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5kYXRhQWN0aW9ucyAmJiB0aGlzLmRhdGFBY3Rpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImFjdGlvbnNDb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbnNDb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmdldEFjdGlvbnNGb3JUeXBlKCJpblJvdyIpLm1hcCgoYWN0aW9uQXJnKSA9PiBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iYWN0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gYWN0aW9uQXJnLmFjdGlvbkZ1bmMoewogICAgICAgICAgICAgIGl0ZW06IGl0ZW1BcmcsCiAgICAgICAgICAgICAgdGFibGU6IHRoaXMKICAgICAgICAgICAgfSl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25BcmcuaWNvbk5hbWUgPyBiMmAgPGRlZXMtaWNvbiAuaWNvbj0ke2FjdGlvbkFyZy5pY29uTmFtZX0+PC9kZWVzLWljb24+IGAgOiBhY3Rpb25BcmcubmFtZX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgOwogICAgICAgICAgfQogICAgICAgIH0pKCl9CiAgICAgICAgICAgICAgICAgICAgICA8L3RyPmA7CiAgICAgIH0pfQogICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgIDogYjJgIDxkaXYgY2xhc3M9Im5vRGF0YVNldCI+Tm8gZGF0YSBzZXQhPC9kaXY+IGB9CiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlU3RhdGlzdGljcyI+CiAgICAgICAgICAgICR7dGhpcy5kYXRhLmxlbmd0aH0gJHt0aGlzLmRhdGFOYW1lIHx8ICJkYXRhIHJvd3MifSAodG90YWwpIHwKICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGVkRGF0YVJvdyA/IGAjICR7dGhpcy5kYXRhLmluZGV4T2YodGhpcy5zZWxlY3RlZERhdGFSb3cpICsgMX1gIDogYE5vYH0KICAgICAgICAgICAgc2VsZWN0ZWQKICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyQWN0aW9ucyI+CiAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlc29sdmVFeGVjKGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCByZXN1bHRBcnJheSA9IFtdOwogICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuZGF0YUFjdGlvbnMpIHsKICAgICAgICAgIGlmICghYWN0aW9uLnR5cGUuaW5jbHVkZXMoImZvb3RlciIpKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIHJlc3VsdEFycmF5LnB1c2goYjJgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJmb290ZXJBY3Rpb24iCiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gewogICAgICAgICAgICBhY3Rpb24uYWN0aW9uRnVuYyh7CiAgICAgICAgICAgICAgaXRlbTogdGhpcy5zZWxlY3RlZERhdGFSb3csCiAgICAgICAgICAgICAgdGFibGU6IHRoaXMKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9fQogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgJHthY3Rpb24uaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uU2l6ZT0kezE0fSAuaWNvbj0ke2FjdGlvbi5pY29uTmFtZX0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb24ubmFtZX1gIDogYWN0aW9uLm5hbWV9CiAgICAgICAgICAgICAgICAgIDwvZGl2PmApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CiAgICAgIH0pfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIHRoaXMuZGV0ZXJtaW5lQ29sdW1uV2lkdGhzKCk7CiAgICAgIGlmICh0aGlzLnNlYXJjaGFibGUpIHsKICAgICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZGF0YUFjdGlvbnMuZmluZCgoYWN0aW9uQXJnKSA9PiBhY3Rpb25BcmcudHlwZS5pbmNsdWRlcygiaGVhZGVyIikgJiYgYWN0aW9uQXJnLm5hbWUgPT09ICJTZWFyY2giKTsKICAgICAgICBpZiAoIWV4aXN0aW5nKSB7CiAgICAgICAgICB0aGlzLmRhdGFBY3Rpb25zLnVuc2hpZnQoewogICAgICAgICAgICBuYW1lOiAiU2VhcmNoIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJtYWduaWZ5aW5nR2xhc3MiLAogICAgICAgICAgICB0eXBlOiBbImhlYWRlciJdLAogICAgICAgICAgICBhY3Rpb25GdW5jOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coIm9wZW4gc2VhcmNoIik7CiAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoR3JpZCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoR3JpZCIpOwogICAgICAgICAgICAgIHNlYXJjaEdyaWQuY2xhc3NMaXN0LnRvZ2dsZSgiaGlkZGVuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgY29uc29sZS5sb2codGhpcy5kYXRhQWN0aW9ucyk7CiAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgICB9CiAgICAgICAgOwogICAgICAgIHRoaXMud2lyZVNlYXJjaElucHV0cygpOwogICAgICB9CiAgICB9CiAgICBfX2RlYm91bmNlVGltZXI7CiAgICBkZWJvdW5jZVJ1bihmbiwgbXMgPSAyMDApIHsKICAgICAgaWYgKHRoaXMuX19kZWJvdW5jZVRpbWVyKQogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9fZGVib3VuY2VUaW1lcik7CiAgICAgIHRoaXMuX19kZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dChmbiwgbXMpOwogICAgfQogICAgd2lyZVNlYXJjaElucHV0cygpIHsKICAgICAgY29uc3Qgc2VhcmNoVGV4dEVsID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoR3JpZCBkZWVzLWlucHV0LXRleHQiKTsKICAgICAgY29uc3Qgc2VhcmNoTW9kZUVsID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoR3JpZCBkZWVzLWlucHV0LW11bHRpdG9nZ2xlIik7CiAgICAgIGlmIChzZWFyY2hUZXh0RWwgJiYgIXRoaXMuX19zZWFyY2hUZXh0U3ViKSB7CiAgICAgICAgdGhpcy5fX3NlYXJjaFRleHRTdWIgPSBzZWFyY2hUZXh0RWwuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKGVsKSA9PiB7CiAgICAgICAgICBjb25zdCB2YWwgPSBlbD8udmFsdWUgPz8gIiI7CiAgICAgICAgICB0aGlzLmRlYm91bmNlUnVuKCgpID0+IHsKICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoTW9kZSA9PT0gInNlcnZlciIpIHsKICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWFyY2hSZXF1ZXN0IiwgewogICAgICAgICAgICAgICAgZGV0YWlsOiB7IHF1ZXJ5OiB2YWwsIG1vZGU6ICJzZXJ2ZXIiIH0sCiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlCiAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyVGV4dCh2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoc2VhcmNoTW9kZUVsICYmICF0aGlzLl9fc2VhcmNoTW9kZVN1YikgewogICAgICAgIHRoaXMuX19zZWFyY2hNb2RlU3ViID0gc2VhcmNoTW9kZUVsLmNoYW5nZVN1YmplY3Quc3Vic2NyaWJlKChlbCkgPT4gewogICAgICAgICAgY29uc3QgbW9kZSA9IGVsPy5zZWxlY3RlZE9wdGlvbiB8fCBlbD8udmFsdWUgfHwgInRhYmxlIjsKICAgICAgICAgIGlmIChtb2RlID09PSAidGFibGUiIHx8IG1vZGUgPT09ICJkYXRhIiB8fCBtb2RlID09PSAic2VydmVyIikgewogICAgICAgICAgICB0aGlzLnNlYXJjaE1vZGUgPSBtb2RlOwogICAgICAgICAgICBjb25zdCB2YWwgPSBzZWFyY2hUZXh0RWw/LnZhbHVlID8/ICIiOwogICAgICAgICAgICB0aGlzLmRlYm91bmNlUnVuKCgpID0+IHsKICAgICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hNb2RlID09PSAic2VydmVyIikgewogICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VhcmNoUmVxdWVzdCIsIHsgZGV0YWlsOiB7IHF1ZXJ5OiB2YWwsIG1vZGU6ICJzZXJ2ZXIiIH0sIGJ1YmJsZXM6IHRydWUgfSkpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLnNldEZpbHRlclRleHQodmFsKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBhc3luYyBkZXRlcm1pbmVDb2x1bW5XaWR0aHMoKSB7CiAgICAgIGNvbnN0IGRvbXRvb2xzID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIGNvbnN0IHRhYmxlMiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJ0YWJsZSIpOwogICAgICBpZiAoIXRhYmxlMikKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGNlbGxzMiA9IHRhYmxlMi5yb3dzWzBdLmNlbGxzOwogICAgICBjb25zdCBoYW5kbGVDb2x1bW5CeUluZGV4ID0gYXN5bmMgKGkxMSwgd2FpdEZvclJlbmRlckFyZyA9IGZhbHNlKSA9PiB7CiAgICAgICAgY29uc3QgZG9uZSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIGNvbnN0IGNlbGwyID0gY2VsbHMyW2kxMV07CiAgICAgICAgY29uc3Qgd2lkdGggPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsMikud2lkdGg7CiAgICAgICAgaWYgKGNlbGwyLnRleHRDb250ZW50LmluY2x1ZGVzKCJBY3Rpb25zIikpIHsKICAgICAgICAgIGNvbnN0IG5lZWRlZFdpZHRoID0gdGhpcy5kYXRhQWN0aW9ucy5maWx0ZXIoKGFjdGlvbkFyZykgPT4gYWN0aW9uQXJnLnR5cGUuaW5jbHVkZXMoImluUm93IikpLmxlbmd0aCAqIDM2OwogICAgICAgICAgY2VsbDIuc3R5bGUud2lkdGggPSBgJHtNYXRoLm1heChuZWVkZWRXaWR0aCwgNjgpfXB4YDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2VsbDIuc3R5bGUud2lkdGggPSB3aWR0aDsKICAgICAgICB9CiAgICAgICAgaWYgKHdhaXRGb3JSZW5kZXJBcmcpIHsKICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgIGRvbmUucmVzb2x2ZSgpOwogICAgICAgICAgfSk7CiAgICAgICAgICBhd2FpdCBkb25lLnByb21pc2U7CiAgICAgICAgfQogICAgICB9OwogICAgICBpZiAoY2VsbHMyW2NlbGxzMi5sZW5ndGggLSAxXS50ZXh0Q29udGVudC5pbmNsdWRlcygiQWN0aW9ucyIpKSB7CiAgICAgICAgYXdhaXQgaGFuZGxlQ29sdW1uQnlJbmRleChjZWxsczIubGVuZ3RoIC0gMSwgdHJ1ZSk7CiAgICAgIH0KICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgY2VsbHMyLmxlbmd0aDsgaTExKyspIHsKICAgICAgICBpZiAoY2VsbHMyW2kxMV0udGV4dENvbnRlbnQuaW5jbHVkZXMoIkFjdGlvbnMiKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGF3YWl0IGhhbmRsZUNvbHVtbkJ5SW5kZXgoaTExKTsKICAgICAgfQogICAgICB0YWJsZTIuc3R5bGUudGFibGVMYXlvdXQgPSAiZml4ZWQiOwogICAgfQogICAgLy8gY29tcHV0ZSBoZWxwZXJzIG1vdmVkIHRvIC4vZGF0YS50cwogICAgdG9nZ2xlU29ydChjb2wpIHsKICAgICAgY29uc3Qga2V5MiA9IFN0cmluZyhjb2wua2V5KTsKICAgICAgaWYgKHRoaXMuc29ydEtleSAhPT0ga2V5MikgewogICAgICAgIHRoaXMuc29ydEtleSA9IGtleTI7CiAgICAgICAgdGhpcy5zb3J0RGlyID0gImFzYyI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHRoaXMuc29ydERpciA9PT0gImFzYyIpCiAgICAgICAgICB0aGlzLnNvcnREaXIgPSAiZGVzYyI7CiAgICAgICAgZWxzZSBpZiAodGhpcy5zb3J0RGlyID09PSAiZGVzYyIpIHsKICAgICAgICAgIHRoaXMuc29ydERpciA9IG51bGw7CiAgICAgICAgICB0aGlzLnNvcnRLZXkgPSB2b2lkIDA7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICB0aGlzLnNvcnREaXIgPSAiYXNjIjsKICAgICAgfQogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzb3J0Q2hhbmdlIiwgewogICAgICAgIGRldGFpbDogeyBrZXk6IHRoaXMuc29ydEtleSwgZGlyOiB0aGlzLnNvcnREaXIgfSwKICAgICAgICBidWJibGVzOiB0cnVlCiAgICAgIH0pKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBnZXRBcmlhU29ydChjb2wpIHsKICAgICAgaWYgKFN0cmluZyhjb2wua2V5KSAhPT0gdGhpcy5zb3J0S2V5IHx8ICF0aGlzLnNvcnREaXIpCiAgICAgICAgcmV0dXJuICJub25lIjsKICAgICAgcmV0dXJuIHRoaXMuc29ydERpciA9PT0gImFzYyIgPyAiYXNjZW5kaW5nIiA6ICJkZXNjZW5kaW5nIjsKICAgIH0KICAgIHJlbmRlclNvcnRJbmRpY2F0b3IoY29sKSB7CiAgICAgIGlmIChTdHJpbmcoY29sLmtleSkgIT09IHRoaXMuc29ydEtleSB8fCAhdGhpcy5zb3J0RGlyKQogICAgICAgIHJldHVybiBiMmBgOwogICAgICByZXR1cm4gYjJgPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OjZweDsgb3BhY2l0eTowLjc7Ij4ke3RoaXMuc29ydERpciA9PT0gImFzYyIgPyAiXHUyNUIyIiA6ICJcdTI1QkMifTwvc3Bhbj5gOwogICAgfQogICAgLy8gZmlsdGVyaW5nIGhlbHBlcnMKICAgIHNldEZpbHRlclRleHQodmFsdWUyKSB7CiAgICAgIGNvbnN0IHByZXYgPSB0aGlzLmZpbHRlclRleHQ7CiAgICAgIHRoaXMuZmlsdGVyVGV4dCA9IHZhbHVlMiA/PyAiIjsKICAgICAgaWYgKHByZXYgIT09IHRoaXMuZmlsdGVyVGV4dCkgewogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImZpbHRlckNoYW5nZSIsIHsKICAgICAgICAgIGRldGFpbDogeyB0ZXh0OiB0aGlzLmZpbHRlclRleHQsIGNvbHVtbnM6IHsgLi4udGhpcy5jb2x1bW5GaWx0ZXJzIH0gfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgICB9KSk7CiAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgIH0KICAgIH0KICAgIHNldENvbHVtbkZpbHRlcihrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jb2x1bW5GaWx0ZXJzID0geyAuLi50aGlzLmNvbHVtbkZpbHRlcnMsIFtrZXkyXTogdmFsdWUyIH07CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImZpbHRlckNoYW5nZSIsIHsKICAgICAgICBkZXRhaWw6IHsgdGV4dDogdGhpcy5maWx0ZXJUZXh0LCBjb2x1bW5zOiB7IC4uLnRoaXMuY29sdW1uRmlsdGVycyB9IH0sCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgfQogICAgLy8gc2VsZWN0aW9uIGhlbHBlcnMKICAgIGdldFJvd0lkKHJvdykgewogICAgICBpZiAodGhpcy5yb3dLZXkpIHsKICAgICAgICBpZiAodHlwZW9mIHRoaXMucm93S2V5ID09PSAiZnVuY3Rpb24iKQogICAgICAgICAgcmV0dXJuIHRoaXMucm93S2V5KHJvdyk7CiAgICAgICAgcmV0dXJuIFN0cmluZyhyb3dbdGhpcy5yb3dLZXldKTsKICAgICAgfQogICAgICBjb25zdCBrZXkyID0gcm93OwogICAgICBpZiAoIXRoaXMuX3Jvd0lkTWFwLmhhcyhrZXkyKSkgewogICAgICAgIHRoaXMuX3Jvd0lkTWFwLnNldChrZXkyLCBTdHJpbmcoKyt0aGlzLl9yb3dJZENvdW50ZXIpKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5fcm93SWRNYXAuZ2V0KGtleTIpOwogICAgfQogICAgaXNSb3dTZWxlY3RlZChyb3cpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJZHMuaGFzKHRoaXMuZ2V0Um93SWQocm93KSk7CiAgICB9CiAgICB0b2dnbGVSb3dTZWxlY3RlZChyb3cpIHsKICAgICAgY29uc3QgaWQgPSB0aGlzLmdldFJvd0lkKHJvdyk7CiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJzaW5nbGUiKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5jbGVhcigpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuYWRkKGlkKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJtdWx0aSIpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3RlZElkcy5oYXMoaWQpKQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5kZWxldGUoaWQpOwogICAgICAgIGVsc2UKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuYWRkKGlkKTsKICAgICAgfQogICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBzZXRSb3dTZWxlY3RlZChyb3csIGNoZWNrZWQpIHsKICAgICAgY29uc3QgaWQgPSB0aGlzLmdldFJvd0lkKHJvdyk7CiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJzaW5nbGUiKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5jbGVhcigpOwogICAgICAgIGlmIChjaGVja2VkKQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5hZGQoaWQpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gIm11bHRpIikgewogICAgICAgIGlmIChjaGVja2VkKQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5hZGQoaWQpOwogICAgICAgIGVsc2UKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuZGVsZXRlKGlkKTsKICAgICAgfQogICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBhcmVBbGxWaXNpYmxlU2VsZWN0ZWQoKSB7CiAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLl9sYXN0Vmlld0RhdGEgfHwgW107CiAgICAgIGlmICh2aWV3Lmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGZvciAoY29uc3QgcjExIG9mIHZpZXcpIHsKICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRJZHMuaGFzKHRoaXMuZ2V0Um93SWQocjExKSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpc1Zpc2libGVTZWxlY3Rpb25JbmRldGVybWluYXRlKCkgewogICAgICBjb25zdCB2aWV3ID0gdGhpcy5fbGFzdFZpZXdEYXRhIHx8IFtdOwogICAgICBpZiAodmlldy5sZW5ndGggPT09IDApCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBsZXQgY291bnQyID0gMDsKICAgICAgZm9yIChjb25zdCByMTEgb2YgdmlldykgewogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRzLmhhcyh0aGlzLmdldFJvd0lkKHIxMSkpKQogICAgICAgICAgY291bnQyKys7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvdW50MiA+IDAgJiYgY291bnQyIDwgdmlldy5sZW5ndGg7CiAgICB9CiAgICBzZXRTZWxlY3RWaXNpYmxlKGNoZWNrZWQpIHsKICAgICAgY29uc3QgdmlldyA9IHRoaXMuX2xhc3RWaWV3RGF0YSB8fCBbXTsKICAgICAgaWYgKGNoZWNrZWQpIHsKICAgICAgICBmb3IgKGNvbnN0IHIxMSBvZiB2aWV3KQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5hZGQodGhpcy5nZXRSb3dJZChyMTEpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmb3IgKGNvbnN0IHIxMSBvZiB2aWV3KQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5kZWxldGUodGhpcy5nZXRSb3dJZChyMTEpKTsKICAgICAgfQogICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBlbWl0U2VsZWN0aW9uQ2hhbmdlKCkgewogICAgICBjb25zdCBzZWxlY3RlZElkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZElkcyk7CiAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZGF0YS5maWx0ZXIoKHIxMSkgPT4gdGhpcy5zZWxlY3RlZElkcy5oYXModGhpcy5nZXRSb3dJZChyMTEpKSk7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlbGVjdGlvbkNoYW5nZSIsIHsKICAgICAgICBkZXRhaWw6IHsgc2VsZWN0ZWRJZHMsIHNlbGVjdGVkUm93cyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgZ2V0QWN0aW9uc0ZvclR5cGUodHlwZUFyZykgewogICAgICBjb25zdCBhY3Rpb25zID0gW107CiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuZGF0YUFjdGlvbnMpIHsKICAgICAgICBpZiAoIWFjdGlvbi50eXBlLmluY2x1ZGVzKHR5cGVBcmcpKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7CiAgICAgIH0KICAgICAgcmV0dXJuIGFjdGlvbnM7CiAgICB9CiAgICBhc3luYyBoYW5kbGVDZWxsRWRpdGluZyhldmVudCwgaXRlbUFyZywga2V5MikgewogICAgICBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgICBjb25zdCBvcmlnaW5hbENvbG9yID0gdGFyZ2V0LnN0eWxlLmNvbG9yOwogICAgICB0YXJnZXQuc3R5bGUuY29sb3IgPSAidHJhbnNwYXJlbnQiOwogICAgICBjb25zdCB0cmFuc2Zvcm1lZEl0ZW0gPSB0aGlzLmRpc3BsYXlGdW5jdGlvbihpdGVtQXJnKTsKICAgICAgY29uc3QgaW5pdGlhbFZhbHVlID0gdHJhbnNmb3JtZWRJdGVtW2tleTJdID8/IGl0ZW1Bcmdba2V5Ml0gPz8gIiI7CiAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgICAgaW5wdXQudHlwZSA9ICJ0ZXh0IjsKICAgICAgaW5wdXQudmFsdWUgPSBpbml0aWFsVmFsdWU7CiAgICAgIGNvbnN0IGJsdXJJbnB1dCA9IGFzeW5jIChibHVyQXJnID0gdHJ1ZSwgc2F2ZUFyZyA9IGZhbHNlKSA9PiB7CiAgICAgICAgaWYgKGJsdXJBcmcpIHsKICAgICAgICAgIGlucHV0LmJsdXIoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNhdmVBcmcpIHsKICAgICAgICAgIGl0ZW1Bcmdba2V5Ml0gPSBpbnB1dC52YWx1ZTsKICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgIH0KICAgICAgICBpbnB1dC5yZW1vdmUoKTsKICAgICAgICB0YXJnZXQuc3R5bGUuY29sb3IgPSBvcmlnaW5hbENvbG9yOwogICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICB9OwogICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gewogICAgICAgIGJsdXJJbnB1dChmYWxzZSwgZmFsc2UpOwogICAgICB9KTsKICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICBpZiAoZTExLmtleSA9PT0gIkVudGVyIikgewogICAgICAgICAgYmx1cklucHV0KHRydWUsIHRydWUpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRhcmdldC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgIGlucHV0LmZvY3VzKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczMzKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzVGFibGUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mb3JtL2RlZXMtZm9ybS9kZWVzLWZvcm0uZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMyNSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgLmZvcm0tb3V0cHV0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICB9CiAgICAgIAogICAgICAuc3RhdHVzLW1lc3NhZ2UgewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIAogICAgICAuc3RhdHVzLW1lc3NhZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3MC42JSA0NS4zJSAvIDAuMSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3MC42JSAzNS4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDY1LjMlKSIpfTsKICAgICAgfQogICAgICAKICAgICAgLnN0YXR1cy1tZXNzYWdlLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjEpIiwgImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDQwLjYlKSIsICJoc2woMCA3Mi4yJSA2MC42JSkiKX07CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGZvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogIGNvbnN0IG91dHB1dERpdiA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiLmZvcm0tb3V0cHV0Iik7CiAgaWYgKGZvcm0gJiYgb3V0cHV0RGl2KSB7CiAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgYXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRhdGEgPSBldmVudEFyZy5kZXRhaWwuZGF0YTsKICAgICAgY29uc29sZS5sb2coIkZvcm0gc3VibWl0dGVkIHdpdGggZGF0YToiLCBkYXRhKTsKICAgICAgZm9ybS5zZXRTdGF0dXMoInBlbmRpbmciLCAiUHJvY2Vzc2luZyB5b3VyIHJlZ2lzdHJhdGlvbi4uLiIpOwogICAgICBvdXRwdXREaXYuaW5uZXJIVE1MID0gYDxzdHJvbmc+U3VibWl0dGVkIERhdGE6PC9zdHJvbmc+CiR7SlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMil9YDsKICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMjUucGx1Z2lucy5zbWFydGRlbGF5LmRlbGF5Rm9yKDJlMyk7CiAgICAgIGZvcm0uc2V0U3RhdHVzKCJzdWNjZXNzIiwgIlJlZ2lzdHJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ISIpOwogICAgICBhd2FpdCBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMmUzKTsKICAgICAgZm9ybS5yZXNldCgpOwogICAgICBvdXRwdXREaXYuaW5uZXJIVE1MID0gIjxlbT5Gb3JtIGhhcyBiZWVuIHJlc2V0PC9lbT4iOwogICAgfSk7CiAgICBjb25zdCBpbnB1dHMgPSBmb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtdGV4dCwgZGVlcy1pbnB1dC1kcm9wZG93biwgZGVlcy1pbnB1dC1jaGVja2JveCIpOwogICAgaW5wdXRzLmZvckVhY2goKGlucHV0KSA9PiB7CiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVN1YmplY3QiLCAoKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coIkZpZWxkIGNoYW5nZWQ6IiwgaW5wdXQuZ2V0QXR0cmlidXRlKCJrZXkiKSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9IkNvbXBsZXRlIEZvcm0gRXhhbXBsZSIgLmRlc2NyaXB0aW9uPSJBIGNvbXByZWhlbnNpdmUgZm9ybSB3aXRoIHZhcmlvdXMgaW5wdXQgdHlwZXMsIHZhbGlkYXRpb24sIGFuZCBmb3JtIHN1Ym1pc3Npb24gaGFuZGxpbmciPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfSAKICAgICAgICAgICAga2V5PSJmaXJzdE5hbWUiIAogICAgICAgICAgICBsYWJlbD0iRmlyc3QgTmFtZSIKICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IllvdXIgZ2l2ZW4gbmFtZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9IAogICAgICAgICAgICBrZXk9Imxhc3ROYW1lIiAKICAgICAgICAgICAgbGFiZWw9Ikxhc3QgTmFtZSIKICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0gCiAgICAgICAgICAgIGtleT0iZW1haWwiIAogICAgICAgICAgICBsYWJlbD0iRW1haWwgQWRkcmVzcyIKICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IldlIHdpbGwgdXNlIHRoaXMgdG8gY29udGFjdCB5b3UifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICBrZXk9ImNvdW50cnkiCiAgICAgICAgICAgIC5sYWJlbD0keyJDb3VudHJ5In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJVbml0ZWQgU3RhdGVzIiwga2V5OiAidXMiIH0sCiAgeyBvcHRpb246ICJDYW5hZGEiLCBrZXk6ICJjYSIgfSwKICB7IG9wdGlvbjogIkdlcm1hbnkiLCBrZXk6ICJkZSIgfSwKICB7IG9wdGlvbjogIkZyYW5jZSIsIGtleTogImZyIiB9LAogIHsgb3B0aW9uOiAiVW5pdGVkIEtpbmdkb20iLCBrZXk6ICJ1ayIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICBrZXk9InBhc3N3b3JkIgogICAgICAgICAgICBsYWJlbD0iUGFzc3dvcmQiCiAgICAgICAgICAgIGlzUGFzc3dvcmRCb29sCiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJNaW5pbXVtIDggY2hhcmFjdGVycyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIGtleT0idGVybXMiCiAgICAgICAgICAgIGxhYmVsPSJJIGFncmVlIHRvIHRoZSBUZXJtcyBhbmQgQ29uZGl0aW9ucyIKICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgIGtleT0ibmV3c2xldHRlciIKICAgICAgICAgICAgbGFiZWw9IlNlbmQgbWUgcHJvbW90aW9uYWwgZW1haWxzIgogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q3JlYXRlIEFjY291bnQ8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1vdXRwdXQiPgogICAgICAgICAgPGVtPlN1Ym1pdCB0aGUgZm9ybSB0byBzZWUgdGhlIGNvbGxlY3RlZCBkYXRhLi4uPC9lbT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGZvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogIGlmIChmb3JtKSB7CiAgICBjb25zb2xlLmxvZygiSG9yaXpvbnRhbCBmb3JtIGxheW91dCBhY3RpdmUiKTsKICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgZmlsdGVycyA9IGV2ZW50LmRldGFpbC5kYXRhOwogICAgICBjb25zb2xlLmxvZygiRmlsdGVyIGFwcGxpZWQ6IiwgZmlsdGVycyk7CiAgICAgIGNvbnN0IHJlc3VsdHNDb3VudCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMCkgKyAxOwogICAgICBjb25zb2xlLmxvZyhgRm91bmQgJHtyZXN1bHRzQ291bnR9IHJlc3VsdHMgd2l0aCBmaWx0ZXJzOmAsIGZpbHRlcnMpOwogICAgfSk7CiAgICBjb25zdCBpbnB1dHMgPSBmb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoIltrZXldIik7CiAgICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHsKICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsIGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCBmb3JtRGF0YSA9IGF3YWl0IGZvcm0uY29sbGVjdEZvcm1EYXRhKCk7CiAgICAgICAgY29uc29sZS5sb2coIkxpdmUgZmlsdGVyIHVwZGF0ZToiLCBmb3JtRGF0YSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9Ikhvcml6b250YWwgRm9ybSBMYXlvdXQiIC5kZXNjcmlwdGlvbj0iQ29tcGFjdCBmb3JtIHdpdGggaW5wdXRzIGFycmFuZ2VkIGhvcml6b250YWxseSAtIHBlcmZlY3QgZm9yIGZpbHRlcnMgYW5kIHF1aWNrIGZvcm1zIj4KICAgICAgICA8ZGVlcy1mb3JtIGhvcml6b250YWwtbGF5b3V0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAga2V5PSJzZWFyY2giIAogICAgICAgICAgICBsYWJlbD0iU2VhcmNoIgogICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIga2V5d29yZHMuLi4iCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIGtleT0iY2F0ZWdvcnkiCiAgICAgICAgICAgIC5sYWJlbD0keyJDYXRlZ29yeSJ9CiAgICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHtmYWxzZX0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJBbGwiLCBrZXk6ICJhbGwiIH0sCiAgeyBvcHRpb246ICJQcm9kdWN0cyIsIGtleTogInByb2R1Y3RzIiB9LAogIHsgb3B0aW9uOiAiU2VydmljZXMiLCBrZXk6ICJzZXJ2aWNlcyIgfSwKICB7IG9wdGlvbjogIlN1cHBvcnQiLCBrZXk6ICJzdXBwb3J0IiB9Cl19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICBrZXk9InNvcnQiCiAgICAgICAgICAgIC5sYWJlbD0keyJTb3J0IEJ5In0KICAgICAgICAgICAgLmVuYWJsZVNlYXJjaD0ke2ZhbHNlfQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIk5ld2VzdCIsIGtleTogIm5ld2VzdCIgfSwKICB7IG9wdGlvbjogIlBvcHVsYXIiLCBrZXk6ICJwb3B1bGFyIiB9LAogIHsgb3B0aW9uOiAiUHJpY2U6IExvdyB0byBIaWdoIiwga2V5OiAicHJpY2VfYXNjIiB9LAogIHsgb3B0aW9uOiAiUHJpY2U6IEhpZ2ggdG8gTG93Iiwga2V5OiAicHJpY2VfZGVzYyIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gKICAgICAgICAgICAga2V5PSJpblN0b2NrIgogICAgICAgICAgICBsYWJlbD0iSW4gU3RvY2sgT25seSIKICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBmb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICBjb25zdCBzdGF0dXNEaXYgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNzdGF0dXMtZGlzcGxheSIpOwogIGlmIChmb3JtKSB7CiAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgYXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRhdGEgPSBldmVudEFyZy5kZXRhaWwuZGF0YTsKICAgICAgY29uc29sZS5sb2coIkFkdmFuY2VkIGZvcm0gZGF0YToiLCBkYXRhKTsKICAgICAgZm9ybS5zZXRTdGF0dXMoInBlbmRpbmciLCAiVmFsaWRhdGluZyB5b3VyIGluZm9ybWF0aW9uLi4uIik7CiAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czI1LnBsdWdpbnMuc21hcnRkZWxheS5kZWxheUZvcigxNTAwKTsKICAgICAgaWYgKGRhdGEuaWJhbiAmJiBkYXRhLmliYW4ubGVuZ3RoID4gMTUpIHsKICAgICAgICBmb3JtLnNldFN0YXR1cygic3VjY2VzcyIsICJBcHBsaWNhdGlvbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5ISIpOwogICAgICAgIGlmIChzdGF0dXNEaXYpIHsKICAgICAgICAgIHN0YXR1c0Rpdi5jbGFzc05hbWUgPSAic3RhdHVzLW1lc3NhZ2Ugc3VjY2VzcyI7CiAgICAgICAgICBzdGF0dXNEaXYudGV4dENvbnRlbnQgPSAiXHUyNzEzIFlvdXIgYXBwbGljYXRpb24gaGFzIGJlZW4gc3VibWl0dGVkLiBXZSB3aWxsIGNvbnRhY3QgeW91IHNvb24uIjsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9ybS5zZXRTdGF0dXMoImVycm9yIiwgIlBsZWFzZSBjaGVjayB5b3VyIElCQU4iKTsKICAgICAgICBpZiAoc3RhdHVzRGl2KSB7CiAgICAgICAgICBzdGF0dXNEaXYuY2xhc3NOYW1lID0gInN0YXR1cy1tZXNzYWdlIGVycm9yIjsKICAgICAgICAgIHN0YXR1c0Rpdi50ZXh0Q29udGVudCA9ICJcdTI3MTcgSW52YWxpZCBJQkFOIGZvcm1hdC4gUGxlYXNlIGNoZWNrIGFuZCB0cnkgYWdhaW4uIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc29sZS5sb2coIkZvcm0gZGF0YSBsb2dnZWQ6IiwgZGF0YSk7CiAgICB9KTsKICAgIGNvbnN0IGZpbGVVcGxvYWQgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZmlsZXVwbG9hZCIpOwogICAgaWYgKGZpbGVVcGxvYWQpIHsKICAgICAgZmlsZVVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRldGFpbD8uZmlsZXMgfHwgW107CiAgICAgICAgY29uc29sZS5sb2coYCR7ZmlsZXMubGVuZ3RofSBmaWxlKHMpIHNlbGVjdGVkIGZvciB1cGxvYWRgKTsKICAgICAgfSk7CiAgICB9CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9IkFkdmFuY2VkIEZvcm0gRmVhdHVyZXMiIC5kZXNjcmlwdGlvbj0iRm9ybSB3aXRoIHNwZWNpYWxpemVkIGlucHV0IHR5cGVzIGFuZCBjb21wbGV4IHZhbGlkYXRpb24iPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1pYmFuIAogICAgICAgICAgICBrZXk9ImliYW4iCiAgICAgICAgICAgIGxhYmVsPSJJQkFOIgogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZQogICAgICAgICAgICBrZXk9InBob25lIgogICAgICAgICAgICBsYWJlbD0iUGhvbmUgTnVtYmVyIgogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAga2V5PSJwcmVmZXJlbmNlcyIKICAgICAgICAgICAgLmxhYmVsPSR7Ik5vdGlmaWNhdGlvbiBQcmVmZXJlbmNlcyJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJFbWFpbCIsICJTTVMiLCAiUHVzaCIsICJJbi1BcHAiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkVtYWlsIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpc2VsZWN0CiAgICAgICAgICAgIGtleT0iaW50ZXJlc3RzIgogICAgICAgICAgICAubGFiZWw9JHsiQXJlYXMgb2YgSW50ZXJlc3QifQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIlRlY2hub2xvZ3kiLCBrZXk6ICJ0ZWNoIiB9LAogIHsgb3B0aW9uOiAiRGVzaWduIiwga2V5OiAiZGVzaWduIiB9LAogIHsgb3B0aW9uOiAiQnVzaW5lc3MiLCBrZXk6ICJidXNpbmVzcyIgfSwKICB7IG9wdGlvbjogIk1hcmtldGluZyIsIGtleTogIm1hcmtldGluZyIgfSwKICB7IG9wdGlvbjogIlNhbGVzIiwga2V5OiAic2FsZXMiIH0KXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGlzZWxlY3Q+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAga2V5PSJkb2N1bWVudHMiCiAgICAgICAgICAgIC5sYWJlbD0keyJVcGxvYWQgRG9jdW1lbnRzIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlBERiwgRE9DLCBvciBET0NYIGZpbGVzIHVwIHRvIDEwTUIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5TdWJtaXQgQXBwbGljYXRpb248L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0ic3RhdHVzLWRpc3BsYXkiPjwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZm9ybS9kZWVzLWZvcm0vZGVlcy1mb3JtLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CnZhciBfX2VzRGVjb3JhdGUzMyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMzQgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIEZPUk1fSU5QVVRfVFlQRVMgPSBbCiAgRGVlc0lucHV0Q2hlY2tib3gsCiAgRGVlc0lucHV0Q29kZSwKICBEZWVzSW5wdXREYXRlcGlja2VyLAogIERlZXNJbnB1dERyb3Bkb3duLAogIERlZXNJbnB1dEZpbGV1cGxvYWQsCiAgRGVlc0lucHV0SWJhbiwKICBEZWVzSW5wdXRNdWx0aXRvZ2dsZSwKICBEZWVzSW5wdXRQaG9uZSwKICBEZWVzSW5wdXRRdWFudGl0eVNlbGVjdG9yLAogIERlZXNJbnB1dFJhZGlvZ3JvdXAsCiAgRGVlc0lucHV0VGV4dCwKICBEZWVzSW5wdXRUb2dnbGUsCiAgRGVlc0lucHV0VHlwZWxpc3QsCiAgRGVlc1RhYmxlCl07CnZhciBEZWVzRm9ybSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtZm9ybSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2hvcml6b250YWxMYXlvdXRfZGVjb3JhdG9yczsKICBsZXQgX2hvcml6b250YWxMYXlvdXRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ob3Jpem9udGFsTGF5b3V0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNGb3JtMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2hvcml6b250YWxMYXlvdXRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUsIGF0dHJpYnV0ZTogImhvcml6b250YWwtbGF5b3V0IiB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTMzKHRoaXMsIG51bGwsIF9ob3Jpem9udGFsTGF5b3V0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhvcml6b250YWxMYXlvdXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhvcml6b250YWxMYXlvdXQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaG9yaXpvbnRhbExheW91dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaG9yaXpvbnRhbExheW91dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ob3Jpem9udGFsTGF5b3V0X2luaXRpYWxpemVycywgX2hvcml6b250YWxMYXlvdXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNGb3JtMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjU7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkZvcm0iOwogICAgbmFtZSA9ICJteWZvcm0iOwogICAgY2hhbmdlU3ViamVjdCA9IG5ldyBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRyeC5yeGpzLlN1YmplY3QoKTsKICAgIHJlYWR5RGVmZXJyZWQgPSBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRwcm9taXNlLmRlZmVyKCk7CiAgICAjaG9yaXpvbnRhbExheW91dF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzNCh0aGlzLCBfaG9yaXpvbnRhbExheW91dF9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgIC8qKgogICAgICogQ29udHJvbHMgdGhlIGxheW91dCBtb2RlIG9mIGNoaWxkIGlucHV0IGNvbXBvbmVudHMKICAgICAqIFdoZW4gdHJ1ZSwgc2V0cyBhbGwgY2hpbGQgaW5wdXRzIHRvIGhvcml6b250YWwgbGF5b3V0CiAgICAgKi8KICAgIGdldCBob3Jpem9udGFsTGF5b3V0KCkgewogICAgICByZXR1cm4gdGhpcy4jaG9yaXpvbnRhbExheW91dF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhvcml6b250YWxMYXlvdXQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2hvcml6b250YWxMYXlvdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogY29udGVudHM7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBjb25zdCBmb3JtQ2hpbGRyZW4gPSB0aGlzLmdldEZvcm1FbGVtZW50cygpOwogICAgICB0aGlzLnVwZGF0ZVJlcXVpcmVkU3RhdHVzKCk7CiAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW5MYXlvdXRNb2RlKCk7CiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZm9ybUNoaWxkcmVuKSB7CiAgICAgICAgY2hpbGQuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4gewogICAgICAgICAgY29uc3QgdmFsdWVPYmplY3QgPSBhd2FpdCB0aGlzLmNvbGxlY3RGb3JtRGF0YSgpOwogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodmFsdWVPYmplY3QpOwogICAgICAgICAgY29uc29sZS5sb2codmFsdWVPYmplY3QpOwogICAgICAgICAgdGhpcy51cGRhdGVSZXF1aXJlZFN0YXR1cygpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGF3YWl0IHRoaXMuYWRkQmVoYXZpb3VycygpOwogICAgICB0aGlzLnJlYWR5RGVmZXJyZWQucmVzb2x2ZSgpOwogICAgfQogICAgZ2V0Rm9ybUVsZW1lbnRzKCkgewogICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5maWx0ZXIoKGNoaWxkKSA9PiBGT1JNX0lOUFVUX1RZUEVTLmluY2x1ZGVzKGNoaWxkLmNvbnN0cnVjdG9yKSk7CiAgICB9CiAgICBnZXRTdWJtaXRCdXR0b24oKSB7CiAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZpbmQoKGNoaWxkKSA9PiBjaGlsZCBpbnN0YW5jZW9mIERlZXNGb3JtU3VibWl0KTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZVJlcXVpcmVkU3RhdHVzKCkgewogICAgICBjb25zb2xlLmxvZygiY2hlY2tpbmcgdGhlIHJlcXVpcmVkIHN0YXR1cy4iKTsKICAgICAgbGV0IHJlcXVpcmVkT0sgPSB0cnVlOwogICAgICBmb3IgKGNvbnN0IGNoaWxkQXJnIG9mIHRoaXMuZ2V0Rm9ybUVsZW1lbnRzKCkpIHsKICAgICAgICBpZiAoY2hpbGRBcmcucmVxdWlyZWQgJiYgIWNoaWxkQXJnLnZhbHVlKSB7CiAgICAgICAgICByZXF1aXJlZE9LID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0aGlzLmdldFN1Ym1pdEJ1dHRvbigpKSB7CiAgICAgICAgdGhpcy5nZXRTdWJtaXRCdXR0b24oKS5kaXNhYmxlZCA9ICFyZXF1aXJlZE9LOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIGNvbGxlY3RzIHRoZSBmb3JtIGRhdGEKICAgICAqIEByZXR1cm5zCiAgICAgKi8KICAgIGFzeW5jIGNvbGxlY3RGb3JtRGF0YSgpIHsKICAgICAgY29uc3QgY2hpbGRyZW4yID0gdGhpcy5nZXRGb3JtRWxlbWVudHMoKTsKICAgICAgY29uc3QgdmFsdWVPYmplY3QgPSB7fTsKICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbjIpIHsKICAgICAgICBpZiAoIWNoaWxkLmtleSkgewogICAgICAgICAgY29uc29sZS5sb2coYGZvcm0gZWxlbWVudCB3aXRoIGxhYmVsICIke2NoaWxkLmxhYmVsfSIgaGFzIG5vIGtleS4gc2tpcHBpbmcuYCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgdmFsdWVPYmplY3RbY2hpbGQua2V5XSA9IGNoaWxkLnZhbHVlOwogICAgICB9CiAgICAgIHJldHVybiB2YWx1ZU9iamVjdDsKICAgIH0KICAgIGFzeW5jIGdhdGhlckFuZERpc3BhdGNoKCkgewogICAgICBjb25zdCB2YWx1ZU9iamVjdCA9IGF3YWl0IHRoaXMuY29sbGVjdEZvcm1EYXRhKCk7CiAgICAgIGNvbnN0IGZvcm1EYXRhRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoImZvcm1EYXRhIiwgewogICAgICAgIGRldGFpbDogewogICAgICAgICAgZGF0YTogdmFsdWVPYmplY3QKICAgICAgICB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgfSk7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChmb3JtRGF0YUV2ZW50KTsKICAgICAgY29uc29sZS5sb2coImRpc3BhdGNoZWQgZGF0YToiKTsKICAgICAgY29uc29sZS5sb2codmFsdWVPYmplY3QpOwogICAgfQogICAgc2V0U3RhdHVzKHZpc3VhbFN0YXRlQXJnLCB0ZXh0U3RhdGVBcmcpIHsKICAgICAgY29uc3QgaW5wdXRDaGlsZHJlbiA9IHRoaXMuZ2V0Rm9ybUVsZW1lbnRzKCk7CiAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbiA9IHRoaXMuZ2V0U3VibWl0QnV0dG9uKCk7CiAgICAgIHN3aXRjaCAodmlzdWFsU3RhdGVBcmcpIHsKICAgICAgICBjYXNlICJub3JtYWwiOgogICAgICAgICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICBzdWJtaXRCdXR0b24uc3RhdHVzID0gIm5vcm1hbCI7CiAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0Q2hpbGQgb2YgaW5wdXRDaGlsZHJlbikgewogICAgICAgICAgICBpbnB1dENoaWxkLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJwZW5kaW5nIjoKICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICBzdWJtaXRCdXR0b24uc3RhdHVzID0gInBlbmRpbmciOwogICAgICAgICAgZm9yIChjb25zdCBpbnB1dENoaWxkIG9mIGlucHV0Q2hpbGRyZW4pIHsKICAgICAgICAgICAgaW5wdXRDaGlsZC5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJzdWNjZXNzIjoKICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICBzdWJtaXRCdXR0b24uc3RhdHVzID0gInN1Y2Nlc3MiOwogICAgICAgICAgZm9yIChjb25zdCBpbnB1dENoaWxkIG9mIGlucHV0Q2hpbGRyZW4pIHsKICAgICAgICAgICAgaW5wdXRDaGlsZC5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJlcnJvciI6CiAgICAgICAgICBzdWJtaXRCdXR0b24uZGlzYWJsZWQgPSB0cnVlOwogICAgICAgICAgc3VibWl0QnV0dG9uLnN0YXR1cyA9ICJlcnJvciI7CiAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0Q2hpbGQgb2YgaW5wdXRDaGlsZHJlbikgewogICAgICAgICAgICBpbnB1dENoaWxkLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN1Ym1pdEJ1dHRvbi50ZXh0ID0gdGV4dFN0YXRlQXJnOwogICAgfQogICAgLyoqCiAgICAgKiByZXNldHMgdGhlIGZvcm0KICAgICAqLwogICAgcmVzZXQoKSB7CiAgICAgIGNvbnN0IGlucHV0Q2hpbGRyZW4gPSB0aGlzLmdldEZvcm1FbGVtZW50cygpOwogICAgICBjb25zdCBzdWJtaXRCdXR0b24gPSB0aGlzLmdldFN1Ym1pdEJ1dHRvbigpOwogICAgICBmb3IgKGNvbnN0IGlucHV0Q2hpbGQgb2YgaW5wdXRDaGlsZHJlbikgewogICAgICAgIGlucHV0Q2hpbGQudmFsdWUgPSBudWxsOwogICAgICB9CiAgICAgIHRoaXMuc2V0U3RhdHVzKCJub3JtYWwiLCAiU3VibWl0Iik7CiAgICB9CiAgICBhc3luYyBhZGRCZWhhdmlvdXJzKCkgewogICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZXZlbnQpID0+IHsKICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7CiAgICAgICAgaWYgKCFGT1JNX0lOUFVUX1RZUEVTLmluY2x1ZGVzKHRhcmdldC5jb25zdHJ1Y3RvcikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gIkVudGVyIikgewogICAgICAgICAgY29uc3QgY2hpbGRyZW4yID0gdGhpcy5nZXRGb3JtRWxlbWVudHMoKTsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGNoaWxkcmVuMi5pbmRleE9mKHRhcmdldCk7CiAgICAgICAgICBpZiAoY3VycmVudEluZGV4IDwgY2hpbGRyZW4yLmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgY2hpbGRyZW4yW2N1cnJlbnRJbmRleCArIDFdLmZvY3VzKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0YXJnZXQuYmx1cigpOwogICAgICAgICAgICB0aGlzLmdldFN1Ym1pdEJ1dHRvbigpPy5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICAvKioKICAgICAqIFVwZGF0ZXMgdGhlIGxheW91dCBtb2RlIG9mIGNoaWxkIGlucHV0IGNvbXBvbmVudHMgYmFzZWQgb24gZm9ybSdzIGhvcml6b250YWxMYXlvdXQgcHJvcGVydHkKICAgICAqLwogICAgdXBkYXRlQ2hpbGRyZW5MYXlvdXRNb2RlKCkgewogICAgICBjb25zdCBmb3JtQ2hpbGRyZW4gPSB0aGlzLmdldEZvcm1FbGVtZW50cygpOwogICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGZvcm1DaGlsZHJlbikgewogICAgICAgIGlmICgibGF5b3V0TW9kZSIgaW4gY2hpbGQpIHsKICAgICAgICAgIGNoaWxkLmxheW91dE1vZGUgPSAiYXV0byI7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIENhbGxlZCB3aGVuIHByb3BlcnRpZXMgY2hhbmdlCiAgICAgKi8KICAgIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImhvcml6b250YWxMYXlvdXQiKSkgewogICAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW5MYXlvdXRNb2RlKCk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczM0KHRoaXMsIF9ob3Jpem9udGFsTGF5b3V0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNGb3JtMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uL2RlZXMtYnV0dG9uLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKdmFyIGRlbW9GdW5jMjYgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24tZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIAogICAgICAudmVydGljYWwtZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXgtd2lkdGg6IDMwMHB4OwogICAgICB9CiAgICAgIAogICAgICAuaG9yaXpvbnRhbC1ncm91cCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLW91dHB1dCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICB9CiAgICAgIAogICAgICAuaWNvbi1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtc25pcHBldCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGJ1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHsKICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBjb25zdCB0eXBlNSA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoInR5cGUiKSB8fCAiZGVmYXVsdCI7CiAgICAgIGNvbnNvbGUubG9nKGBCdXR0b24gdmFyaWFudCBjbGlja2VkOiAke3R5cGU1fWApOwogICAgfSk7CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gQnV0dG9uIFZhcmlhbnRzIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCB2aXN1YWwgc3R5bGVzIGZvciB2YXJpb3VzIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVmYXVsdCI+RGVmYXVsdDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ic2Vjb25kYXJ5Ij5TZWNvbmRhcnk8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlc3RydWN0aXZlIj5EZXN0cnVjdGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ib3V0bGluZSI+T3V0bGluZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiPkdob3N0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJsaW5rIj5MaW5rIEJ1dHRvbjwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBidXR0b25zID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpOwogIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsICgpID0+IHsKICAgICAgY29uc3Qgc2l6ZSA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoInNpemUiKSB8fCAiZGVmYXVsdCI7CiAgICAgIGNvbnNvbGUubG9nKGBCdXR0b24gc2l6ZTogJHtzaXplfWApOwogICAgfSk7CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gQnV0dG9uIFNpemVzIn0gLnN1YnRpdGxlPSR7Ik11bHRpcGxlIHNpemVzIGZvciBkaWZmZXJlbnQgY29udGV4dHMgYW5kIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0ic20iPlNtYWxsIEJ1dHRvbjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iZGVmYXVsdCI+RGVmYXVsdCBTaXplPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJsZyI+TGFyZ2UgQnV0dG9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJvdXRsaW5lIiAudGV4dD0keyJcdXsxRjY4MH0ifT48L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJzbSIgdHlwZT0ic2Vjb25kYXJ5Ij5TbWFsbCBTZWNvbmRhcnk8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9ImRlZmF1bHQiIHR5cGU9ImRlc3RydWN0aXZlIj5EZWZhdWx0IERlc3RydWN0aXZlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJsZyIgdHlwZT0ib3V0bGluZSI+TGFyZ2UgT3V0bGluZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBpY29uQnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICBpY29uQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHsKICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBjb25zdCBoYXNJY29uID0gYnV0dG9uLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaWNvbiIpOwogICAgICBpZiAoaGFzSWNvbikgewogICAgICAgIGNvbnN0IGljb25OYW1lID0gaGFzSWNvbi5nZXRBdHRyaWJ1dGUoImljb25GQSIpIHx8ICJ1bmtub3duIjsKICAgICAgICBjb25zb2xlLmxvZyhgSWNvbiBidXR0b24gY2xpY2tlZDogJHtpY29uTmFtZX1gKTsKICAgICAgfQogICAgfSk7CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMy4gQnV0dG9ucyB3aXRoIEljb25zIn0gLnN1YnRpdGxlPSR7IkNvbWJpbmluZyBpY29ucyB3aXRoIHRleHQgZm9yIGVuaGFuY2VkIHZpc3VhbCBjb21tdW5pY2F0aW9uIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaWNvbi1yb3ciPgogICAgICAgICAgPGRlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249ImZhOnBsdXMiPjwvZGVlcy1pY29uPgogICAgICAgICAgICBBZGQgSXRlbQogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6dHJhc2giPjwvZGVlcy1pY29uPgogICAgICAgICAgICBEZWxldGUKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ib3V0bGluZSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkRvd25sb2FkIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgRG93bmxvYWQKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9Imljb24tcm93Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIHNpemU9InNtIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJmYTpnZWFyIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgU2V0dGluZ3MKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249ImZhOmNhcmV0TGVmdCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIEJhY2sKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiPgogICAgICAgICAgICBOZXh0CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6Y2FyZXRSaWdodCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLXJvdyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0iZGVmYXVsdCI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6cGx1cyI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9InNlY29uZGFyeSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6Z2VhciI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9Im91dGxpbmUiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpTZWFyY2giPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJnaG9zdCI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOk1vcmVWZXJ0aWNhbCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9ImRlc3RydWN0aXZlIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJmYTp0cmFzaCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBidXR0b25zID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpOwogIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsICgpID0+IHsKICAgICAgY29uc3QgaWNvbjMgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJpY29uIikgfHwgIm5vbmUiOwogICAgICBjb25zdCBwb3NpdGlvbjMgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJpY29uUG9zaXRpb24iKSB8fCAibGVmdCI7CiAgICAgIGNvbnNvbGUubG9nKGBJY29uIHByb3BlcnR5IGJ1dHRvbjogaWNvbj0ke2ljb24zfSwgcG9zaXRpb249JHtwb3NpdGlvbjN9YCk7CiAgICB9KTsKICB9KTsKfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBJY29ucyB2aWEgUHJvcGVydHkifSAuc3VidGl0bGU9JHsiU2ltcGxpZmllZCBpY29uIHN5bnRheCB1c2luZyB0aGUgaWNvbiBwcm9wZXJ0eSJ9PgogICAgICAgIDxkaXYgY2xhc3M9Imljb24tcm93Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBpY29uPSJmYTpwbHVzIj5BZGQgSXRlbTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVzdHJ1Y3RpdmUiIGljb249ImZhOnRyYXNoIj5EZWxldGU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Im91dGxpbmUiIGljb249Imx1Y2lkZTpEb3dubG9hZCI+RG93bmxvYWQ8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLXJvdyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ic2Vjb25kYXJ5IiBzaXplPSJzbSIgaWNvbj0iZmE6Z2VhciI+U2V0dGluZ3M8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0IiBpY29uPSJmYTpjYXJldExlZnQiPkJhY2s8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0IiBpY29uPSJmYTpjYXJldFJpZ2h0IiBpY29uUG9zaXRpb249InJpZ2h0Ij5OZXh0PC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iaWNvbi1yb3ciPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9ImRlZmF1bHQiIGljb249ImZhOnBsdXMiPjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0ic2Vjb25kYXJ5IiBpY29uPSJsdWNpZGU6U2V0dGluZ3MiPjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0ib3V0bGluZSIgaWNvbj0ibHVjaWRlOlNlYXJjaCI+PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJnaG9zdCIgaWNvbj0ibHVjaWRlOk1vcmVWZXJ0aWNhbCI+PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJkZXN0cnVjdGl2ZSIgaWNvbj0iZmE6dHJhc2giPjwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtc25pcHBldCI+CiAgICAgICAgICAgICZsdDtkZWVzLWJ1dHRvbiBpY29uPSJmYTpwbHVzIiZndDtBZGQgSXRlbSZsdDsvZGVlcy1idXR0b24mZ3Q7PGJyPgogICAgICAgICAgICAmbHQ7ZGVlcy1idXR0b24gaWNvbj0iZmE6Y2FyZXRSaWdodCIgaWNvblBvc2l0aW9uPSJyaWdodCImZ3Q7TmV4dCZsdDsvZGVlcy1idXR0b24mZ3Q7CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgcGVuZGluZ0J1dHRvbiA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bc3RhdHVzPSJwZW5kaW5nIl0nKTsKICBjb25zdCBzdWNjZXNzQnV0dG9uID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWJ1dHRvbltzdGF0dXM9InN1Y2Nlc3MiXScpOwogIGNvbnN0IGVycm9yQnV0dG9uID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWJ1dHRvbltzdGF0dXM9ImVycm9yIl0nKTsKICBpZiAocGVuZGluZ0J1dHRvbikgewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJQZW5kaW5nIGJ1dHRvbiBpcyBzaG93aW5nIGxvYWRpbmcgc3RhdGUiKTsKICAgIH0sIDFlMyk7CiAgfQogIGlmIChzdWNjZXNzQnV0dG9uKSB7CiAgICBzdWNjZXNzQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCAoKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJTdWNjZXNzIHN0YXRlIGJ1dHRvbiBjbGlja2VkIik7CiAgICB9KTsKICB9CiAgaWYgKGVycm9yQnV0dG9uKSB7CiAgICBlcnJvckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBjb25zb2xlLmxvZygiRXJyb3Igc3RhdGUgYnV0dG9uIGNsaWNrZWQiKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI1LiBCdXR0b24gU3RhdGVzIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBzdGF0ZXMgdG8gaW5kaWNhdGUgYnV0dG9uIHN0YXR1cyBhbmQgbG9hZGluZyBjb25kaXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzdGF0dXM9Im5vcm1hbCI+Tm9ybWFsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzdGF0dXM9InBlbmRpbmciPlByb2Nlc3NpbmcuLi48L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHN0YXR1cz0ic3VjY2VzcyI+U3VjY2VzcyE8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHN0YXR1cz0iZXJyb3IiPkVycm9yITwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gZGlzYWJsZWQ+RGlzYWJsZWQ8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIHN0YXR1cz0icGVuZGluZyIgc2l6ZT0ic20iPlNtYWxsIExvYWRpbmc8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Im91dGxpbmUiIHN0YXR1cz0icGVuZGluZyI+RGVmYXVsdCBMb2FkaW5nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSIgc3RhdHVzPSJwZW5kaW5nIiBzaXplPSJsZyI+TGFyZ2UgTG9hZGluZzwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBvdXRwdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNjbGljay1vdXRwdXQiKTsKICBjb25zdCBjbGlja01lQnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWJ1dHRvbjpmaXJzdC1vZi10eXBlIik7CiAgY29uc3QgZGF0YUJ0biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bdHlwZT0ic2Vjb25kYXJ5Il0nKTsKICBjb25zdCBhc3luY0J0biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bdHlwZT0iZGVzdHJ1Y3RpdmUiXScpOwogIGlmIChjbGlja01lQnRuICYmIG91dHB1dCkgewogICAgY2xpY2tNZUJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBgQ2xpY2tlZDogRGVmYXVsdCBidXR0b24gYXQgJHsoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvTG9jYWxlVGltZVN0cmluZygpfWA7CiAgICB9KTsKICB9CiAgaWYgKGRhdGFCdG4gJiYgb3V0cHV0KSB7CiAgICBkYXRhQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCAoZTExKSA9PiB7CiAgICAgIG91dHB1dC50ZXh0Q29udGVudCA9IGBDbGlja2VkOiBTZWNvbmRhcnkgYnV0dG9uIHdpdGggZGF0YTogJHtlMTEuZGV0YWlsLmRhdGF9YDsKICAgIH0pOwogIH0KICBpZiAoYXN5bmNCdG4gJiYgb3V0cHV0KSB7CiAgICBhc3luY0J0bi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgYXN5bmMgKCkgPT4gewogICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSAiUHJvY2Vzc2luZy4uLiI7CiAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czI1LnBsdWdpbnMuc21hcnRkZWxheS5kZWxheUZvcigyZTMpOwogICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSAiQWN0aW9uIGNvbXBsZXRlZCEiOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjYuIEV2ZW50IEhhbmRsaW5nIn0gLnN1YnRpdGxlPSR7IkludGVyYWN0aXZlIGV4YW1wbGVzIHdpdGggY2xpY2sgZXZlbnQgaGFuZGxpbmcifT4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkNsaWNrIE1lPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIC5ldmVudERldGFpbERhdGE9JHsiY3VzdG9tLWRhdGEtMTIzIn0+CiAgICAgICAgICAgIENsaWNrIHdpdGggRGF0YQogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSI+QXN5bmMgQWN0aW9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGlkPSJjbGljay1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCI+CiAgICAgICAgICA8ZW0+Q2xpY2sgYSBidXR0b24gdG8gc2VlIHRoZSByZXN1bHQuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZm9ybSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIik7CiAgY29uc3Qgb3V0cHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZm9ybS1vdXRwdXQiKTsKICBpZiAoZm9ybSAmJiBvdXRwdXQpIHsKICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoZTExKSA9PiB7CiAgICAgIG91dHB1dC5pbm5lckhUTUwgPSAiPHN0cm9uZz5Gb3JtIHN1Ym1pdHRlZCB3aXRoIGRhdGE6PC9zdHJvbmc+PGJyPiIgKyBKU09OLnN0cmluZ2lmeShlMTEuZGV0YWlsLmRhdGEsIG51bGwsIDIpOwogICAgfSk7CiAgfQogIGNvbnN0IGRyYWZ0QnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWJ1dHRvblt0eXBlPSJzZWNvbmRhcnkiXScpOwogIGNvbnN0IGNhbmNlbEJ0biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bdHlwZT0iZ2hvc3QiXScpOwogIGlmIChkcmFmdEJ0bikgewogICAgZHJhZnRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coIlNhdmUgRHJhZnQgY2xpY2tlZCIpOwogICAgfSk7CiAgfQogIGlmIChjYW5jZWxCdG4pIHsKICAgIGNhbmNlbEJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBjb25zb2xlLmxvZygiQ2FuY2VsIGNsaWNrZWQiKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI3LiBGb3JtIEludGVncmF0aW9uIn0gLnN1YnRpdGxlPSR7IkJ1dHRvbnMgd29ya2luZyB3aXRoaW4gZm9ybXMgd2l0aCBhdXRvbWF0aWMgc3BhY2luZyJ9PgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGxhYmVsPSJOYW1lIiBrZXk9Im5hbWUiIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBsYWJlbD0iRW1haWwiIGtleT0iZW1haWwiIHR5cGU9ImVtYWlsIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgbGFiZWw9Ik1lc3NhZ2UiIGtleT0ibWVzc2FnZSIgaXNNdWx0aWxpbmU+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiPlNhdmUgRHJhZnQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0Ij5DYW5jZWw8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+U3VibWl0IEZvcm08L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0iZm9ybS1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCIgc3R5bGU9IndoaXRlLXNwYWNlOiBwcmUtd3JhcDsiPgogICAgICAgICAgPGVtPlN1Ym1pdCB0aGUgZm9ybSB0byBzZWUgdGhlIGRhdGEuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgYnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4gewogICAgY29uc3QgdHlwZTUgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJ0eXBlIik7CiAgICBpZiAodHlwZTUpIHsKICAgICAgY29uc29sZS5sb2coYExlZ2FjeSB0eXBlICIke3R5cGU1fSIgaXMgc3VwcG9ydGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5YCk7CiAgICB9CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiOC4gQmFja3dhcmQgQ29tcGF0aWJpbGl0eSJ9IC5zdWJ0aXRsZT0keyJPbGQgYnV0dG9uIHR5cGVzIGFyZSBhdXRvbWF0aWNhbGx5IG1hcHBlZCB0byBuZXcgdmFyaWFudHMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Im5vcm1hbCI+Tm9ybWFsIOKGkiBEZWZhdWx0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJoaWdobGlnaHRlZCI+SGlnaGxpZ2h0ZWQg4oaSIERlc3RydWN0aXZlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkaXNjcmVldCI+RGlzY3JlZXQg4oaSIE91dGxpbmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImJpZyI+QmlnIOKGkiBMYXJnZSBTaXplPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsgZm9udC1zaXplOiAxNHB4OyBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07Ij4KICAgICAgICAgIFRoZXNlIGxlZ2FjeSB0eXBlIHZhbHVlcyBhcmUgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBidXQgd2UgcmVjb21tZW5kIHVzaW5nIHRoZSBuZXcgdmFyaWFudCBzeXN0ZW0uCiAgICAgICAgPC9wPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgYWN0aW9uR3JvdXAgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoIi52ZXJ0aWNhbC1ncm91cCIpWzBdOwogIGNvbnN0IGRhbmdlckdyb3VwID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCIudmVydGljYWwtZ3JvdXAiKVsxXTsKICBpZiAoYWN0aW9uR3JvdXApIHsKICAgIGNvbnN0IGJ1dHRvbnMgPSBhY3Rpb25Hcm91cC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpOwogICAgYnV0dG9ucy5mb3JFYWNoKChidXR0b24sIGluZGV4MikgPT4gewogICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsICgpID0+IHsKICAgICAgICBjb25zdCBhY3Rpb24gPSBbIlNhdmUgQ2hhbmdlcyIsICJEaXNjYXJkIiwgIkhlbHAiXVtpbmRleDJdOwogICAgICAgIGNvbnNvbGUubG9nKGBBY3Rpb24gZ3JvdXA6ICR7YWN0aW9ufSBjbGlja2VkYCk7CiAgICAgIH0pOwogICAgfSk7CiAgfQogIGlmIChkYW5nZXJHcm91cCkgewogICAgY29uc3QgYnV0dG9ucyA9IGRhbmdlckdyb3VwLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbiwgaW5kZXgyKSA9PiB7CiAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICAgIGNvbnN0IGFjdGlvbiA9IFsiRGVsZXRlIEFjY291bnQiLCAiQXJjaGl2ZSBEYXRhIiwgIk5vdCBBdmFpbGFibGUiXVtpbmRleDJdOwogICAgICAgIGlmIChpbmRleDIgIT09IDIpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKGBEYW5nZXIgem9uZTogJHthY3Rpb259IGNsaWNrZWRgKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjkuIEFkdmFuY2VkIEV4YW1wbGVzIn0gLnN1YnRpdGxlPSR7IkNvbXBsZXggYnV0dG9uIGNvbmZpZ3VyYXRpb25zIGFuZCByZWFsLXdvcmxkIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9Imhvcml6b250YWwtZ3JvdXAiPgogICAgICAgICAgPGRpdiBjbGFzcz0idmVydGljYWwtZ3JvdXAiPgogICAgICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbjogMCAwIDhweCAwOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7Ij5BY3Rpb24gR3JvdXA8L2g0PgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVmYXVsdCIgc2l6ZT0ic20iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlNhdmUiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIFNhdmUgQ2hhbmdlcwogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ic2Vjb25kYXJ5IiBzaXplPSJzbSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6VW5kbzIiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIERpc2NhcmQKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0IiBzaXplPSJzbSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6SGVscENpcmNsZSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgSGVscAogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPGRpdiBjbGFzcz0idmVydGljYWwtZ3JvdXAiPgogICAgICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbjogMCAwIDhweCAwOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7Ij5EYW5nZXIgWm9uZTwvaDQ+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSIgc2l6ZT0ic20iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6dHJhc2giPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIERlbGV0ZSBBY2NvdW50CiAgICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJvdXRsaW5lIiBzaXplPSJzbSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6QXJjaGl2ZSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgQXJjaGl2ZSBEYXRhCiAgICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJnaG9zdCIgc2l6ZT0ic20iIGRpc2FibGVkPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkJhbiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgTm90IEF2YWlsYWJsZQogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMjRweDsiPgogICAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW46IDAgMCA4cHggMDsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyI+Q29kZSBFeGFtcGxlOjwvaDQ+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLXNuaXBwZXQiPgogICAgICAgICAgICAmbHQ7ZGVlcy1idXR0b24gdHlwZT0iZGVmYXVsdCIgc2l6ZT0ic20iIGljb249Imx1Y2lkZTpTYXZlIiBAY2xpY2tlZD0iXCR7aGFuZGxlQ2xpY2t9IiZndDs8YnI+CiAgICAgICAgICAgICZuYnNwOyZuYnNwO1NhdmUgQ2hhbmdlczxicj4KICAgICAgICAgICAgJmx0Oy9kZWVzLWJ1dHRvbiZndDsKICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uL2RlZXMtYnV0dG9uLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTM0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMzNSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0J1dHRvbiA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYnV0dG9uIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfdGV4dF9kZWNvcmF0b3JzOwogIGxldCBfdGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2V2ZW50RGV0YWlsRGF0YV9kZWNvcmF0b3JzOwogIGxldCBfZXZlbnREZXRhaWxEYXRhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXZlbnREZXRhaWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9kZWNvcmF0b3JzOwogIGxldCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNIaWRkZW5fZGVjb3JhdG9yczsKICBsZXQgX2lzSGlkZGVuX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNIaWRkZW5fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3R5cGVfZGVjb3JhdG9yczsKICBsZXQgX3R5cGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaXplX2RlY29yYXRvcnM7CiAgbGV0IF9zaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdHVzX2RlY29yYXRvcnM7CiAgbGV0IF9zdGF0dXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2luc2lkZUZvcm1fZGVjb3JhdG9yczsKICBsZXQgX2luc2lkZUZvcm1faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbnNpZGVGb3JtX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pY29uX2RlY29yYXRvcnM7CiAgbGV0IF9pY29uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaWNvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaWNvblBvc2l0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9pY29uUG9zaXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pY29uUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0J1dHRvbjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90ZXh0X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHJlZmxlY3Q6IHRydWUsCiAgICAgICAgaGFzQ2hhbmdlZCgpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfSldOwogICAgICBfZXZlbnREZXRhaWxEYXRhX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9kaXNhYmxlZF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfaXNIaWRkZW5fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF90eXBlX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZwogICAgICB9KV07CiAgICAgIF9zaXplX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZwogICAgICB9KV07CiAgICAgIF9zdGF0dXNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX2luc2lkZUZvcm1fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX2ljb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9pY29uUG9zaXRpb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF90ZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXh0X2luaXRpYWxpemVycywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfZXZlbnREZXRhaWxEYXRhX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImV2ZW50RGV0YWlsRGF0YSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZXZlbnREZXRhaWxEYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV2ZW50RGV0YWlsRGF0YSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZXZlbnREZXRhaWxEYXRhID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2V2ZW50RGV0YWlsRGF0YV9pbml0aWFsaXplcnMsIF9ldmVudERldGFpbERhdGFfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfZGlzYWJsZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlzYWJsZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc2FibGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXNhYmxlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF9pc0hpZGRlbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0hpZGRlbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNIaWRkZW4iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNIaWRkZW4sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzSGlkZGVuID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzSGlkZGVuX2luaXRpYWxpemVycywgX2lzSGlkZGVuX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzQodGhpcywgbnVsbCwgX3R5cGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidHlwZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidHlwZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50eXBlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50eXBlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3R5cGVfaW5pdGlhbGl6ZXJzLCBfdHlwZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF9zaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaXplX2luaXRpYWxpemVycywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfc3RhdHVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RhdHVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXR1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc3RhdHVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0YXR1c19pbml0aWFsaXplcnMsIF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfaW5zaWRlRm9ybV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbnNpZGVGb3JtIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbnNpZGVGb3JtIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmluc2lkZUZvcm0sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmluc2lkZUZvcm0gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5zaWRlRm9ybV9pbml0aWFsaXplcnMsIF9pbnNpZGVGb3JtX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzQodGhpcywgbnVsbCwgX2ljb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaWNvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pY29uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pY29uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ljb25faW5pdGlhbGl6ZXJzLCBfaWNvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF9pY29uUG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvblBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpY29uUG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaWNvblBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pY29uUG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaWNvblBvc2l0aW9uX2luaXRpYWxpemVycywgX2ljb25Qb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM0KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0J1dHRvbjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI2OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJCdXR0b24iOwogICAgI3RleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3RleHRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgZ2V0IHRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2V2ZW50RGV0YWlsRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF9ldmVudERldGFpbERhdGFfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBldmVudERldGFpbERhdGEoKSB7CiAgICAgIHJldHVybiB0aGlzLiNldmVudERldGFpbERhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBldmVudERldGFpbERhdGEodmFsdWUyKSB7CiAgICAgIHRoaXMuI2V2ZW50RGV0YWlsRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfZXZlbnREZXRhaWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGRpc2FibGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jZGlzYWJsZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkaXNhYmxlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZGlzYWJsZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0hpZGRlbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaXNIaWRkZW5faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzSGlkZGVuKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNIaWRkZW5fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0hpZGRlbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNIaWRkZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaXNIaWRkZW5fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF90eXBlX2luaXRpYWxpemVycywgImRlZmF1bHQiKSk7CiAgICBnZXQgdHlwZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0eXBlKHZhbHVlMikgewogICAgICB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF9zaXplX2luaXRpYWxpemVycywgImRlZmF1bHQiKSk7CiAgICBnZXQgc2l6ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaXplKHZhbHVlMikgewogICAgICB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3N0YXR1c19pbml0aWFsaXplcnMsICJub3JtYWwiKSk7CiAgICBnZXQgc3RhdHVzKCkgewogICAgICByZXR1cm4gdGhpcy4jc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc3RhdHVzKHZhbHVlMikgewogICAgICB0aGlzLiNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpbnNpZGVGb3JtX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfc3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaW5zaWRlRm9ybV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaW5zaWRlRm9ybSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2luc2lkZUZvcm1fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpbnNpZGVGb3JtKHZhbHVlMikgewogICAgICB0aGlzLiNpbnNpZGVGb3JtX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaWNvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX2luc2lkZUZvcm1fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF9pY29uX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgaWNvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2ljb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpY29uKHZhbHVlMikgewogICAgICB0aGlzLiNpY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaWNvblBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaWNvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX2ljb25Qb3NpdGlvbl9pbml0aWFsaXplcnMsICJsZWZ0IikpOwogICAgZ2V0IGljb25Qb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2ljb25Qb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGljb25Qb3NpdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jaWNvblBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaWNvblBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAoIXRoaXMuaW5zaWRlRm9ybSAmJiB0aGlzLmNsb3Nlc3QoImRlZXMtZm9ybSIpKSB7CiAgICAgICAgdGhpcy5pbnNpZGVGb3JtID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgfQogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIEZvcm0gc3BhY2luZyBzdHlsZXMgKi8KICAgICAgOmhvc3QoW2luc2lkZS1mb3JtXSkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtpbnNpZGUtZm9ybV06bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtZm9ybVtob3Jpem9udGFsLWxheW91dF0gOmhvc3QoW2luc2lkZS1mb3JtXSkgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgZGVlcy1mb3JtW2hvcml6b250YWwtbGF5b3V0XSA6aG9zdChbaW5zaWRlLWZvcm1dOmxhc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5idXR0b24gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC8qIFNpemUgdmFyaWFudHMgKi8KICAgICAgLmJ1dHRvbi5zaXplLWRlZmF1bHQgewogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtc20gewogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtbGcgewogICAgICAgIGhlaWdodDogNDRweDsKICAgICAgICBwYWRkaW5nOiAwIDI0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtaWNvbiB7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC8qIERlZmF1bHQgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLmRlZmF1bHQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5kZWZhdWx0OmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTAuMiUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA4NSUpIiwgImhzbCgyMTUgMjAuMiUgMjAlKSIpfTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5kZWZhdWx0OmFjdGl2ZTpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSA5JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIERlc3RydWN0aXZlIHZhcmlhbnQgKi8KICAgICAgLmJ1dHRvbi5kZXN0cnVjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDAgODQuMiUgNjAuMiUpOwogICAgICAgIGNvbG9yOiBoc2woMCAwJSA5OCUpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLmRlc3RydWN0aXZlOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCA4NC4yJSA1Ni4yJSk7CiAgICAgIH0KCiAgICAgIC5idXR0b24uZGVzdHJ1Y3RpdmU6YWN0aXZlOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCA4NC4yJSA1Mi4yJSk7CiAgICAgIH0KCiAgICAgIC8qIE91dGxpbmUgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLm91dGxpbmUgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMjEuOCUpIil9OwogICAgICB9CgogICAgICAuYnV0dG9uLm91dGxpbmU6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDg1JSkiLCAiaHNsKDIxNSAyMC4yJSAyNi44JSkiKX07CiAgICAgIH0KCiAgICAgIC5idXR0b24ub3V0bGluZTphY3RpdmU6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMTMuOCUpIil9OwogICAgICB9CgogICAgICAvKiBTZWNvbmRhcnkgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLnNlY29uZGFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5zZWNvbmRhcnk6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMTMuOCUpIil9OwogICAgICB9CgogICAgICAuYnV0dG9uLnNlY29uZGFyeTphY3RpdmU6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgODUlKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgfQoKICAgICAgLyogR2hvc3QgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLmdob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5naG9zdDpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5naG9zdDphY3RpdmU6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMTMuOCUpIil9OwogICAgICB9CgogICAgICAvKiBMaW5rIHZhcmlhbnQgKi8KICAgICAgLmJ1dHRvbi5saW5rIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5saW5rOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgLyogU3RhdHVzIHN0YXRlcyAqLwogICAgICAuYnV0dG9uLnBlbmRpbmcsCiAgICAgIC5idXR0b24uc3VjY2VzcywKICAgICAgLmJ1dHRvbi5lcnJvciB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzNnB4OyAvKiBTcGFjZSBmb3Igc3Bpbm5lciAqLwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtc20ucGVuZGluZywKICAgICAgLmJ1dHRvbi5zaXplLXNtLnN1Y2Nlc3MsCiAgICAgIC5idXR0b24uc2l6ZS1zbS5lcnJvciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzMnB4OwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtbGcucGVuZGluZywKICAgICAgLmJ1dHRvbi5zaXplLWxnLnN1Y2Nlc3MsCiAgICAgIC5idXR0b24uc2l6ZS1sZy5lcnJvciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA0NHB4OwogICAgICB9CgogICAgICAuYnV0dG9uLnBlbmRpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTMuMSA5My45JSA2Ny44JSAvIDAuMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLnN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwgImhzbCgxNDIuMSA3MC42JSA0NS4zJSAvIDAuMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUpIiwgImhzbCgwIDYyLjglIDcwLjYlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDYyLjglIDcwLjYlKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLyogRGlzYWJsZWQgc3RhdGUgKi8KICAgICAgLmJ1dHRvbi5kaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIEhpZGRlbiBzdGF0ZSAqLwogICAgICAuYnV0dG9uLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogRm9jdXMgc3RhdGUgKi8KICAgICAgLmJ1dHRvbjpmb2N1cy12aXNpYmxlIHsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgICBvdXRsaW5lLW9mZnNldDogMnB4OwogICAgICB9CgogICAgICAvKiBMb2FkaW5nIHNwaW5uZXIgKi8KICAgICAgZGVlcy1zcGlubmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMTBweDsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1zbSBkZWVzLXNwaW5uZXIgewogICAgICAgIGxlZnQ6IDhweDsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1sZyBkZWVzLXNwaW5uZXIgewogICAgICAgIGxlZnQ6IDE0cHg7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICB9CiAgICAgIAogICAgICAvKiBJY29uIHNpemluZyB3aXRoaW4gYnV0dG9ucyAqLwogICAgICAuYnV0dG9uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtc20gZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1sZyBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgfQoKICAgICAgLyogVGV4dCBhbGlnbm1lbnQgKi8KICAgICAgLnRleHRib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQoKICAgIGAKICAgIF07CiAgICAvKioKICAgICAqIEV4dHJhY3RzIGljb24gYW5kIHRleHQgZnJvbSBsaWdodCBET00gYW5kIHNldHMgcHJvcGVydGllcwogICAgICovCiAgICBleHRyYWN0TGlnaHREb20oKSB7CiAgICAgIGNvbnN0IGljb25FbGVtZW50ID0gdGhpcy5xdWVyeVNlbGVjdG9yKCJkZWVzLWljb24iKTsKICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBBcnJheS5mcm9tKHRoaXMuY2hpbGROb2RlcykuZmlsdGVyKChub2RlMikgPT4gbm9kZTIubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKS5tYXAoKG5vZGUyKSA9PiBub2RlMi50ZXh0Q29udGVudD8udHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpOwogICAgICBpZiAodGV4dENvbnRlbnQgJiYgIXRoaXMudGV4dCkgewogICAgICAgIHRoaXMudGV4dCA9IHRleHRDb250ZW50OwogICAgICB9CiAgICAgIGlmIChpY29uRWxlbWVudCkgewogICAgICAgIGNvbnN0IGljb25WYWx1ZSA9IGljb25FbGVtZW50Lmljb24gfHwgaWNvbkVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpY29uIikgfHwgKGljb25FbGVtZW50Lmljb25GQSA/IGBmYToke2ljb25FbGVtZW50Lmljb25GQX1gIDogbnVsbCk7CiAgICAgICAgaWYgKGljb25WYWx1ZSkgewogICAgICAgICAgY29uc3QgY2hpbGRyZW4yID0gQXJyYXkuZnJvbSh0aGlzLmNoaWxkTm9kZXMpOwogICAgICAgICAgY29uc3QgaWNvbkluZGV4ID0gY2hpbGRyZW4yLmluZGV4T2YoaWNvbkVsZW1lbnQpOwogICAgICAgICAgY29uc3QgdGV4dE5vZGVzID0gY2hpbGRyZW4yLmZpbHRlcigobm9kZTIpID0+IG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiBub2RlMi50ZXh0Q29udGVudD8udHJpbSgpKTsKICAgICAgICAgIGlmICh0ZXh0Tm9kZXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBjb25zdCBmaXJzdFRleHRJbmRleCA9IGNoaWxkcmVuMi5pbmRleE9mKHRleHROb2Rlc1swXSk7CiAgICAgICAgICAgIHRoaXMuaWNvblBvc2l0aW9uID0gaWNvbkluZGV4IDwgZmlyc3RUZXh0SW5kZXggPyAibGVmdCIgOiAicmlnaHQiOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5pY29uID0gaWNvblZhbHVlOwogICAgICAgIH0KICAgICAgICBpY29uRWxlbWVudC5yZW1vdmUoKTsKICAgICAgfQogICAgICB0aGlzLmlubmVySFRNTCA9ICIiOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICBjb25zdCB0eXBlTWFwID0gewogICAgICAgICJub3JtYWwiOiAiZGVmYXVsdCIsCiAgICAgICAgImhpZ2hsaWdodGVkIjogImRlc3RydWN0aXZlIiwKICAgICAgICAiZGlzY3JlZXQiOiAib3V0bGluZSIsCiAgICAgICAgImJpZyI6ICJkZWZhdWx0IgogICAgICAgIC8vIFdpbGwgdXNlIHNpemUgaW5zdGVhZAogICAgICB9OwogICAgICBjb25zdCBhY3R1YWxUeXBlID0gdHlwZU1hcFt0aGlzLnR5cGVdIHx8IHRoaXMudHlwZTsKICAgICAgY29uc3QgYWN0dWFsU2l6ZSA9IHRoaXMudHlwZSA9PT0gImJpZyIgPyAibGciIDogdGhpcy5zaXplOwogICAgICBjb25zdCBsZWZ0SWNvbiA9IHRoaXMuaWNvblBvc2l0aW9uID09PSAibGVmdCIgJiYgdGhpcy5pY29uID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuaWNvbn0+PC9kZWVzLWljb24+YCA6ICIiOwogICAgICBjb25zdCByaWdodEljb24gPSB0aGlzLmljb25Qb3NpdGlvbiA9PT0gInJpZ2h0IiAmJiB0aGlzLmljb24gPyBiMmA8ZGVlcy1pY29uIC5pY29uPSR7dGhpcy5pY29ufT48L2RlZXMtaWNvbj5gIDogIiI7CiAgICAgIGNvbnN0IGlzSWNvbk9ubHkgPSBhY3R1YWxTaXplID09PSAiaWNvbiIgJiYgdGhpcy5pY29uOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYnV0dG9uICR7dGhpcy5pc0hpZGRlbiA/ICJoaWRkZW4iIDogIiJ9ICR7YWN0dWFsVHlwZX0gc2l6ZS0ke2FjdHVhbFNpemV9ICR7dGhpcy5zdGF0dXN9ICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIke3RoaXMuZGlzcGF0Y2hDbGlja30iCiAgICAgID4KICAgICAgICAke3RoaXMuc3RhdHVzID09PSAibm9ybWFsIiA/IGIyYGAgOiBiMmAKICAgICAgICAgIDxkZWVzLXNwaW5uZXIKICAgICAgICAgICAgLmJudz0ke3RydWV9CiAgICAgICAgICAgIHN0YXR1cz0iJHt0aGlzLnN0YXR1c30iCiAgICAgICAgICAgIHNpemU9IiR7YWN0dWFsU2l6ZSA9PT0gInNtIiA/IDE0IDogYWN0dWFsU2l6ZSA9PT0gImxnIiA/IDE4IDogMTZ9IgogICAgICAgICAgPjwvZGVlcy1zcGlubmVyPgogICAgICAgIGB9CiAgICAgICAgJHtsZWZ0SWNvbn0KICAgICAgICAke2lzSWNvbk9ubHkgPyAiIiA6IGIyYDxkaXYgY2xhc3M9InRleHRib3giPiR7dGhpcy50ZXh0IHx8ICJCdXR0b24ifTwvZGl2PmB9CiAgICAgICAgJHtyaWdodEljb259CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGRpc3BhdGNoQ2xpY2soKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNsaWNrZWQiLCB7CiAgICAgICAgZGV0YWlsOiB7CiAgICAgICAgICBkYXRhOiB0aGlzLmV2ZW50RGV0YWlsRGF0YQogICAgICAgIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuZXh0cmFjdExpZ2h0RG9tKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczM1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQnV0dG9uMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtc3RhdHNncmlkL2RlZXMtc3RhdHNncmlkLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGVlc19pY29uKCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTM1ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMzNiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1N0YXRzR3JpZCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtc3RhdHNncmlkIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfdGlsZXNfZGVjb3JhdG9yczsKICBsZXQgX3RpbGVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGlsZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21pblRpbGVXaWR0aF9kZWNvcmF0b3JzOwogIGxldCBfbWluVGlsZVdpZHRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWluVGlsZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9nYXBfZGVjb3JhdG9yczsKICBsZXQgX2dhcF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2dhcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZ3JpZEFjdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2dyaWRBY3Rpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZ3JpZEFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRleHRNZW51VmlzaWJsZV9kZWNvcmF0b3JzOwogIGxldCBfY29udGV4dE1lbnVWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGV4dE1lbnVWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZXh0TWVudVBvc2l0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZXh0TWVudVBvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGV4dE1lbnVQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGV4dE1lbnVBY3Rpb25zX2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZXh0TWVudUFjdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZXh0TWVudUFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1N0YXRzR3JpZDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90aWxlc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfbWluVGlsZVdpZHRoX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfZ2FwX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfZ3JpZEFjdGlvbnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX2NvbnRleHRNZW51VmlzaWJsZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY29udGV4dE1lbnVQb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY29udGV4dE1lbnVBY3Rpb25zX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTM1KHRoaXMsIG51bGwsIF90aWxlc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0aWxlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGlsZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGlsZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRpbGVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RpbGVzX2luaXRpYWxpemVycywgX3RpbGVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX21pblRpbGVXaWR0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtaW5UaWxlV2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1pblRpbGVXaWR0aCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5taW5UaWxlV2lkdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1pblRpbGVXaWR0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9taW5UaWxlV2lkdGhfaW5pdGlhbGl6ZXJzLCBfbWluVGlsZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX2dhcF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJnYXAiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImdhcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5nYXAsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmdhcCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9nYXBfaW5pdGlhbGl6ZXJzLCBfZ2FwX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX2dyaWRBY3Rpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImdyaWRBY3Rpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJncmlkQWN0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ncmlkQWN0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZ3JpZEFjdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZ3JpZEFjdGlvbnNfaW5pdGlhbGl6ZXJzLCBfZ3JpZEFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNSh0aGlzLCBudWxsLCBfY29udGV4dE1lbnVWaXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRleHRNZW51VmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29udGV4dE1lbnVWaXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRleHRNZW51VmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29udGV4dE1lbnVWaXNpYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbnRleHRNZW51VmlzaWJsZV9pbml0aWFsaXplcnMsIF9jb250ZXh0TWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNSh0aGlzLCBudWxsLCBfY29udGV4dE1lbnVQb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZXh0TWVudVBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZXh0TWVudVBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRleHRNZW51UG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRleHRNZW51UG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29udGV4dE1lbnVQb3NpdGlvbl9pbml0aWFsaXplcnMsIF9jb250ZXh0TWVudVBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX2NvbnRleHRNZW51QWN0aW9uc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZXh0TWVudUFjdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRleHRNZW51QWN0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb250ZXh0TWVudUFjdGlvbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRleHRNZW51QWN0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZXh0TWVudUFjdGlvbnNfaW5pdGlhbGl6ZXJzLCBfY29udGV4dE1lbnVBY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU3RhdHNHcmlkMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNzsKICAgICN0aWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfdGlsZXNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICBnZXQgdGlsZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0aWxlc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRpbGVzKHZhbHVlMikgewogICAgICB0aGlzLiN0aWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21pblRpbGVXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzYodGhpcywgX3RpbGVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfbWluVGlsZVdpZHRoX2luaXRpYWxpemVycywgMjUwKSk7CiAgICBnZXQgbWluVGlsZVdpZHRoKCkgewogICAgICByZXR1cm4gdGhpcy4jbWluVGlsZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWluVGlsZVdpZHRoKHZhbHVlMikgewogICAgICB0aGlzLiNtaW5UaWxlV2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNnYXBfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9taW5UaWxlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9nYXBfaW5pdGlhbGl6ZXJzLCAxNikpOwogICAgZ2V0IGdhcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2dhcF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGdhcCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZ2FwX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZ3JpZEFjdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9nYXBfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9ncmlkQWN0aW9uc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZ3JpZEFjdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNncmlkQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGdyaWRBY3Rpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNncmlkQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRleHRNZW51VmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzYodGhpcywgX2dyaWRBY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfY29udGV4dE1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBjb250ZXh0TWVudVZpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZXh0TWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb250ZXh0TWVudVZpc2libGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRleHRNZW51VmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRleHRNZW51UG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9jb250ZXh0TWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9jb250ZXh0TWVudVBvc2l0aW9uX2luaXRpYWxpemVycywgeyB4OiAwLCB5OiAwIH0pKTsKICAgIGdldCBjb250ZXh0TWVudVBvc2l0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jY29udGV4dE1lbnVQb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbnRleHRNZW51UG9zaXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRleHRNZW51UG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb250ZXh0TWVudUFjdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9jb250ZXh0TWVudVBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfY29udGV4dE1lbnVBY3Rpb25zX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBjb250ZXh0TWVudUFjdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZXh0TWVudUFjdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb250ZXh0TWVudUFjdGlvbnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRleHRNZW51QWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICB9CgogICAgICAvKiBDU1MgVmFyaWFibGVzIGZvciBjb25zaXN0ZW50IHNwYWNpbmcgYW5kIHNpemluZyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1ncmlkLWdhcDogMTJweDsKICAgICAgICAtLXRpbGUtcGFkZGluZzogMTZweDsKICAgICAgICAtLWhlYWRlci1zcGFjaW5nOiAxMnB4OwogICAgICAgIC0tY29udGVudC1taW4taGVpZ2h0OiA0MHB4OwogICAgICAgIC0tdmFsdWUtZm9udC1zaXplOiAyNnB4OwogICAgICAgIC0tdW5pdC1mb250LXNpemU6IDE0cHg7CiAgICAgICAgLS1sYWJlbC1mb250LXNpemU6IDEycHg7CiAgICAgICAgLS10aXRsZS1mb250LXNpemU6IDEzcHg7CiAgICAgICAgLS1kZXNjcmlwdGlvbi1zcGFjaW5nOiA4cHg7CiAgICAgICAgLS1ib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgLS10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE1czsKICAgICAgfQoKICAgICAgLyogR3JpZCBMYXlvdXQgKi8KICAgICAgLmdyaWQtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIG1hcmdpbi1ib3R0b206IGNhbGModmFyKC0tZ3JpZC1nYXApICogMS41KTsKICAgICAgICBtaW4taGVpZ2h0OiA0MHB4OwogICAgICB9CgogICAgICAuZ3JpZC10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5ncmlkLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgIH0KCiAgICAgIC5ncmlkLWFjdGlvbnMgZGVlcy1idXR0b24gewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgfQoKICAgICAgLnN0YXRzLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgke3IoMjUwKX1weCwgMWZyKSk7CiAgICAgICAgZ2FwOiAke3IoMTYpfXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAvKiBUaWxlIEJhc2UgU3R5bGVzICovCiAgICAgIC5zdGF0cy10aWxlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7CiAgICAgICAgcGFkZGluZzogdmFyKC0tdGlsZS1wYWRkaW5nKTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1kdXJhdGlvbikgZWFzZTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAuc3RhdHMtdGlsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBkMGQwZCIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDBkMGQwIiwgIiMyYTJhMmEiKX07CiAgICAgIH0KCiAgICAgIC5zdGF0cy10aWxlLmNsaWNrYWJsZSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAuc3RhdHMtdGlsZS5jbGlja2FibGU6aG92ZXIgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA2cHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4wMykiLCAicmdiYSgwLDAsMCwwLjE1KSIpfTsKICAgICAgfQoKICAgICAgLyogVGlsZSBIZWFkZXIgKi8KICAgICAgLnRpbGUtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1oZWFkZXItc3BhY2luZyk7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50aWxlLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICAgIH0KCiAgICAgIC50aWxlLWljb24gewogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAvKiBUaWxlIENvbnRlbnQgKi8KICAgICAgLnRpbGUtY29udGVudCB7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tY29udGVudC1taW4taGVpZ2h0KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLnRpbGUtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CgogICAgICAudGlsZS11bml0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXVuaXQtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLnRpbGUtZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgbWFyZ2luLXRvcDogdmFyKC0tZGVzY3JpcHRpb24tc3BhY2luZyk7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC8qIEdhdWdlIFN0eWxlcyAqLwogICAgICAuZ2F1Z2Utd3JhcHBlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAuZ2F1Z2UtY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTIwcHg7CiAgICAgICAgaGVpZ2h0OiA3MHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW4tdG9wOiAtOHB4OwogICAgICB9CgogICAgICAuZ2F1Z2Utc3ZnIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5nYXVnZS1iYWNrZ3JvdW5kIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZTogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlOGU4ZTgiLCAiIzFhMWExYSIpfTsKICAgICAgICBzdHJva2Utd2lkdGg6IDY7CiAgICAgIH0KCiAgICAgIC5nYXVnZS1maWxsIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZS13aWR0aDogNjsKICAgICAgICBzdHJva2UtbGluZWNhcDogcm91bmQ7CiAgICAgICAgdHJhbnNpdGlvbjogc3Ryb2tlLWRhc2hvZmZzZXQgMC42cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICAuZ2F1Z2UtdGV4dCB7CiAgICAgICAgZmlsbDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CiAgICAgIAogICAgICAuZ2F1Z2UtdW5pdCB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS11bml0LWZvbnQtc2l6ZSk7CiAgICAgICAgZmlsbDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICB9CgogICAgICAvKiBQZXJjZW50YWdlIFN0eWxlcyAqLwogICAgICAucGVyY2VudGFnZS13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC5wZXJjZW50YWdlLXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXZhbHVlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC5wZXJjZW50YWdlLWJhciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlOGU4ZTgiLCAiIzFhMWExYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBtYXJnaW4tdG9wOiBhdXRvOwogICAgICB9CgogICAgICAucGVyY2VudGFnZS1maWxsIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMzMzMiLCAiI2UwZTBlMCIpfTsKICAgICAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjZzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAvKiBNdWx0aSBQZXJjZW50YWdlIFN0eWxlcyAqLwogICAgICAubXVsdGktcGVyY2VudGFnZS13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtaXRlbXMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgbWFyZ2luLXRvcDogYXV0bzsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAubXVsdGktcGVyY2VudGFnZS1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAubXVsdGktcGVyY2VudGFnZS1iYXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZThlOGU4IiwgIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5tdWx0aS1wZXJjZW50YWdlLWZpbGwgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMzMzMyIsICIjZTBlMGUwIil9OwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgIH0KCiAgICAgIC8qIENQVSBDb3JlcyBTdHlsZXMgKi8KICAgICAgLmNwdS1jb3Jlcy13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiA4MHB4OwogICAgICB9CgogICAgICAuY3B1LWNvcmVzLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQoKICAgICAgLmNwdS1jb3Jlcy12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS12YWx1ZS1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZXMtdW5pdCB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS11bml0LWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZXMtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgfQoKICAgICAgLmNwdS1jb3Jlcy1iYXJzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgICBnYXA6IDNweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICAgICAgcGFkZGluZzogNHB4IDA7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZXMtYmFycy5jZW50ZXJlZCB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZS1iYXItY29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogNnB4OwogICAgICAgIG1heC13aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZS1iYXItd3JhcHBlciB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U4ZThlOCIsICIjMWExYTFhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBtaW4taGVpZ2h0OiA0MHB4OwogICAgICB9CgogICAgICAuY3B1LWNvcmUtYmFyLWZpbGwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NjY2NiIsICIjODg4ODg4Iil9OwogICAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIGJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweCAycHggMCAwOwogICAgICB9CgogICAgICAuY3B1LWNvcmUtYmFyLWZpbGwubG93IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICB9CgogICAgICAuY3B1LWNvcmUtYmFyLWZpbGwubWVkaXVtIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIiwgImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLmNwdS1jb3JlLWJhci1maWxsLmhpZ2ggewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgODQuMiUgNjAuMiUpIil9OwogICAgICB9CgogICAgICAuY3B1LWNvcmUtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAvKiBQYXJ0aXRpb24gU3R5bGVzICovCiAgICAgIC5wYXJ0aXRpb24td3JhcHBlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24taGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1wZXJjZW50YWdlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXZhbHVlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1iYXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZThlOGU4IiwgIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tYmFyLWZpbGwgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMzMzMyIsICIjZTBlMGUwIil9OwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tYmFyLWZpbGwud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIsICJoc2woNDUuNCA5My40JSA0Ny41JSkiKX07CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tYmFyLWZpbGwuY3JpdGljYWwgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgODQuMiUgNjAuMiUpIil9OwogICAgICB9CgogICAgICAucGFydGl0aW9uLXN0YXRzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIG1hcmdpbi10b3A6IGF1dG87CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tc3RhdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMnB4OwogICAgICB9CgogICAgICAucGFydGl0aW9uLXN0YXQtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tc3RhdC12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tbWV0YSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1maWxlc3lzdGVtIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1tb3VudHBvaW50IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICB9CgogICAgICAvKiBEaXNrIFN0eWxlcyAqLwogICAgICAuZGlzay13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmRpc2stY2FwYWNpdHkgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CgogICAgICAuZGlzay1tb2RlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgIH0KCiAgICAgIC5kaXNrLXR5cGUtYmFkZ2UgewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5kaXNrLW1ldHJpY3MgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiBhdXRvOwogICAgICB9CgogICAgICAuZGlzay1pb3BzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICB9CgogICAgICAuZGlzay1pb3BzLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAuZGlzay1pb3BzLWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgfQoKICAgICAgLmRpc2staW9wcy12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAuZGlzay1oZWFsdGgtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1iYXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZThlOGU4IiwgIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1maWxsIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC42cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgfQoKICAgICAgLmRpc2staGVhbHRoLWZpbGwuZ29vZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgfQoKICAgICAgLmRpc2staGVhbHRoLWZpbGwud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIsICJoc2woNDUuNCA5My40JSA0Ny41JSkiKX07CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1maWxsLmNyaXRpY2FsIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUpIiwgImhzbCgwIDg0LjIlIDYwLjIlKSIpfTsKICAgICAgfQoKICAgICAgLyogVHJlbmQgU3R5bGVzICovCiAgICAgIC50cmVuZC1jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAudHJlbmQtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnRyZW5kLXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXZhbHVlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQoKICAgICAgLnRyZW5kLXVuaXQgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdW5pdC1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAudHJlbmQtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgfQoKICAgICAgLnRyZW5kLWdyYXBoIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDI4cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbi10b3A6IGF1dG87CiAgICAgIH0KCiAgICAgIC50cmVuZC1zdmcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLnRyZW5kLWxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzk5OTk5OSIsICIjNjY2NjY2Iil9OwogICAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgICAgIHN0cm9rZS1saW5lam9pbjogcm91bmQ7CiAgICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICB9CgogICAgICAudHJlbmQtYXJlYSB7CiAgICAgICAgZmlsbDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTUwLCAxNTAsIDE1MCwgMC4wOCkiLCAicmdiYSgxMDAsIDEwMCwgMTAwLCAwLjA4KSIpfTsKICAgICAgfQoKICAgICAgLyogVGV4dCBWYWx1ZSBTdHlsZXMgKi8KICAgICAgLnRleHQtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CgogICAgICAvKiBDb250ZXh0IE1lbnUgKi8KICAgICAgZGVlcy1jb250ZXh0bWVudSB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfY29udGV4dE1lbnVBY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke3RoaXMuZ3JpZEFjdGlvbnMubGVuZ3RoID4gMCA/IGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtdGl0bGUiPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1hY3Rpb25zIj4KICAgICAgICAgICAgJHt0aGlzLmdyaWRBY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiBiMmAKICAgICAgICAgICAgICA8ZGVlcy1idXR0b24gCiAgICAgICAgICAgICAgICBAY2xpY2tlZD0keygpID0+IHRoaXMuaGFuZGxlR3JpZEFjdGlvbihhY3Rpb24pfQogICAgICAgICAgICAgICAgdHlwZT0ib3V0bGluZSIKICAgICAgICAgICAgICAgIHNpemU9InNtIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICR7YWN0aW9uLmljb25OYW1lID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0ke2FjdGlvbi5pY29uTmFtZX0gc2l6ZT0ic21hbGwiPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICAgICAgICAgICR7YWN0aW9uLm5hbWV9CiAgICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgYCl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYCA6ICIifQogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic3RhdHMtZ3JpZCIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoJHt0aGlzLm1pblRpbGVXaWR0aH1weCwgMWZyKSk7IGdhcDogJHt0aGlzLmdhcH1weDsiPgogICAgICAgICR7dGhpcy50aWxlcy5tYXAoKHRpbGUpID0+IHRoaXMucmVuZGVyVGlsZSh0aWxlKSl9CiAgICAgIDwvZGl2PgoKICAgICAgJHt0aGlzLmNvbnRleHRNZW51VmlzaWJsZSA/IGIyYAogICAgICAgIDxkZWVzLWNvbnRleHRtZW51CiAgICAgICAgICAueD0ke3RoaXMuY29udGV4dE1lbnVQb3NpdGlvbi54fQogICAgICAgICAgLnk9JHt0aGlzLmNvbnRleHRNZW51UG9zaXRpb24ueX0KICAgICAgICAgIC5tZW51SXRlbXM9JHt0aGlzLmNvbnRleHRNZW51QWN0aW9uc30KICAgICAgICAgIEBjbGlja2VkPSR7KCkgPT4gdGhpcy5jb250ZXh0TWVudVZpc2libGUgPSBmYWxzZX0KICAgICAgICA+PC9kZWVzLWNvbnRleHRtZW51PgogICAgICBgIDogIiJ9CiAgICBgOwogICAgfQogICAgcmVuZGVyVGlsZSh0aWxlKSB7CiAgICAgIGNvbnN0IGhhc0FjdGlvbnMgPSB0aWxlLmFjdGlvbnMgJiYgdGlsZS5hY3Rpb25zLmxlbmd0aCA+IDA7CiAgICAgIGNvbnN0IGNsaWNrYWJsZSA9IGhhc0FjdGlvbnMgJiYgdGlsZS5hY3Rpb25zLmxlbmd0aCA9PT0gMTsKICAgICAgY29uc3QgY29sdW1uU3BhbiA9IHRpbGUuY29sdW1uU3BhbiAmJiB0aWxlLmNvbHVtblNwYW4gPiAxID8gdGlsZS5jb2x1bW5TcGFuIDogdm9pZCAwOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0ic3RhdHMtdGlsZSAke2NsaWNrYWJsZSA/ICJjbGlja2FibGUiIDogIiJ9IgogICAgICAgIHN0eWxlPSIke2NvbHVtblNwYW4gPyBgZ3JpZC1jb2x1bW46IHNwYW4gJHtjb2x1bW5TcGFufWAgOiAiIn0iCiAgICAgICAgQGNsaWNrPSR7Y2xpY2thYmxlID8gKCkgPT4gdGhpcy5oYW5kbGVUaWxlQWN0aW9uKHRpbGUuYWN0aW9uc1swXSwgdGlsZSkgOiB2b2lkIDB9CiAgICAgICAgQGNvbnRleHRtZW51PSR7aGFzQWN0aW9ucyA/IChlMTEpID0+IHRoaXMuc2hvd0NvbnRleHRNZW51KGUxMSwgdGlsZSkgOiB2b2lkIDB9CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWhlYWRlciI+CiAgICAgICAgICA8aDMgY2xhc3M9InRpbGUtdGl0bGUiPiR7dGlsZS50aXRsZX08L2gzPgogICAgICAgICAgJHt0aWxlLmljb24gPyBiMmAKICAgICAgICAgICAgPGRlZXMtaWNvbiBjbGFzcz0idGlsZS1pY29uIiAuaWNvbj0ke3RpbGUuaWNvbn0gc2l6ZT0ic21hbGwiPjwvZGVlcy1pY29uPgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtY29udGVudCI+CiAgICAgICAgICAke3RoaXMucmVuZGVyVGlsZUNvbnRlbnQodGlsZSl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgJHt0aWxlLmRlc2NyaXB0aW9uICYmIHRpbGUudHlwZSAhPT0gInRyZW5kIiA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1kZXNjcmlwdGlvbiI+JHt0aWxlLmRlc2NyaXB0aW9ufTwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyVGlsZUNvbnRlbnQodGlsZSkgewogICAgICBzd2l0Y2ggKHRpbGUudHlwZSkgewogICAgICAgIGNhc2UgIm51bWJlciI6CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIiBzdHlsZT0iJHt0aWxlLmNvbG9yID8gYGNvbG9yOiAke3RpbGUuY29sb3J9YCA6ICIifSI+CiAgICAgICAgICAgIDxzcGFuPiR7dGlsZS52YWx1ZX08L3NwYW4+CiAgICAgICAgICAgICR7dGlsZS51bml0ID8gYjJgPHNwYW4gY2xhc3M9InRpbGUtdW5pdCI+JHt0aWxlLnVuaXR9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGA7CiAgICAgICAgY2FzZSAiZ2F1Z2UiOgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyR2F1Z2UodGlsZSk7CiAgICAgICAgY2FzZSAicGVyY2VudGFnZSI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJQZXJjZW50YWdlKHRpbGUpOwogICAgICAgIGNhc2UgInRyZW5kIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlclRyZW5kKHRpbGUpOwogICAgICAgIGNhc2UgIm11bHRpUGVyY2VudGFnZSI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJNdWx0aVBlcmNlbnRhZ2UodGlsZSk7CiAgICAgICAgY2FzZSAiY3B1Q29yZXMiOgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ3B1Q29yZXModGlsZSk7CiAgICAgICAgY2FzZSAicGFydGl0aW9uIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlclBhcnRpdGlvbih0aWxlKTsKICAgICAgICBjYXNlICJkaXNrIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckRpc2sodGlsZSk7CiAgICAgICAgY2FzZSAidGV4dCI6CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LXZhbHVlIiBzdHlsZT0iJHt0aWxlLmNvbG9yID8gYGNvbG9yOiAke3RpbGUuY29sb3J9YCA6ICIifSI+CiAgICAgICAgICAgICR7dGlsZS52YWx1ZX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGA7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9kaXY+YDsKICAgICAgfQogICAgfQogICAgcmVuZGVyR2F1Z2UodGlsZSkgewogICAgICBjb25zdCB2YWx1ZTIgPSB0eXBlb2YgdGlsZS52YWx1ZSA9PT0gIm51bWJlciIgPyB0aWxlLnZhbHVlIDogcGFyc2VGbG9hdCh0aWxlLnZhbHVlKTsKICAgICAgY29uc3Qgb3B0aW9ucyA9IHRpbGUuZ2F1Z2VPcHRpb25zIHx8IHsgbWluOiAwLCBtYXg6IDEwMCB9OwogICAgICBjb25zdCBwZXJjZW50YWdlID0gKHZhbHVlMiAtIG9wdGlvbnMubWluKSAvIChvcHRpb25zLm1heCAtIG9wdGlvbnMubWluKSAqIDEwMDsKICAgICAgY29uc3Qgd2lkdGggPSAxMjA7CiAgICAgIGNvbnN0IGhlaWdodCA9IDcwOwogICAgICBjb25zdCBzdHJva2VXaWR0aCA9IDY7CiAgICAgIGNvbnN0IHBhZGRpbmcgPSBzdHJva2VXaWR0aCAvIDIgKyAyOwogICAgICBjb25zdCByYWRpdXMgPSA0MDsKICAgICAgY29uc3QgY2VudGVyWCA9IHdpZHRoIC8gMjsKICAgICAgY29uc3QgY2VudGVyWSA9IGhlaWdodCAtIHBhZGRpbmc7CiAgICAgIGNvbnN0IHN0YXJ0WCA9IGNlbnRlclggLSByYWRpdXM7CiAgICAgIGNvbnN0IHN0YXJ0WSA9IGNlbnRlclk7CiAgICAgIGNvbnN0IGVuZFggPSBjZW50ZXJYICsgcmFkaXVzOwogICAgICBjb25zdCBlbmRZID0gY2VudGVyWTsKICAgICAgY29uc3QgYXJjUGF0aCA9IGBNICR7c3RhcnRYfSAke3N0YXJ0WX0gQSAke3JhZGl1c30gJHtyYWRpdXN9IDAgMCAxICR7ZW5kWH0gJHtlbmRZfWA7CiAgICAgIGNvbnN0IGNpcmN1bWZlcmVuY2UgPSBNYXRoLlBJICogcmFkaXVzOwogICAgICBjb25zdCBzdHJva2VEYXNob2Zmc2V0ID0gY2lyY3VtZmVyZW5jZSAtIGNpcmN1bWZlcmVuY2UgKiBwZXJjZW50YWdlIC8gMTAwOwogICAgICBsZXQgc3Ryb2tlQ29sb3IgPSB0aWxlLmNvbG9yIHx8IGNzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyOC44JSkiLCAiaHNsKDIxMCA0MCUgNzglKSIpOwogICAgICBpZiAob3B0aW9ucy50aHJlc2hvbGRzKSB7CiAgICAgICAgY29uc3Qgc29ydGVkVGhyZXNob2xkcyA9IFsuLi5vcHRpb25zLnRocmVzaG9sZHNdLnNvcnQoKGE1LCBiNSkgPT4gYjUudmFsdWUgLSBhNS52YWx1ZSk7CiAgICAgICAgZm9yIChjb25zdCB0aHJlc2hvbGQgb2Ygc29ydGVkVGhyZXNob2xkcykgewogICAgICAgICAgaWYgKHZhbHVlMiA+PSB0aHJlc2hvbGQudmFsdWUpIHsKICAgICAgICAgICAgc3Ryb2tlQ29sb3IgPSB0aHJlc2hvbGQuY29sb3I7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImdhdWdlLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImdhdWdlLWNvbnRhaW5lciI+CiAgICAgICAgICA8c3ZnIGNsYXNzPSJnYXVnZS1zdmciIHZpZXdCb3g9IjAgMCAke3dpZHRofSAke2hlaWdodH0iIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgogICAgICAgICAgICA8IS0tIEJhY2tncm91bmQgYXJjIC0tPgogICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgIGNsYXNzPSJnYXVnZS1iYWNrZ3JvdW5kIgogICAgICAgICAgICAgIGQ9IiR7YXJjUGF0aH0iCiAgICAgICAgICAgIC8+CiAgICAgICAgICAgIDwhLS0gRmlsbGVkIGFyYyAtLT4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICBjbGFzcz0iZ2F1Z2UtZmlsbCIKICAgICAgICAgICAgICBkPSIke2FyY1BhdGh9IgogICAgICAgICAgICAgIHN0cm9rZT0iJHtzdHJva2VDb2xvcn0iCiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT0iJHtjaXJjdW1mZXJlbmNlfSIKICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldD0iJHtzdHJva2VEYXNob2Zmc2V0fSIKICAgICAgICAgICAgLz4KICAgICAgICAgICAgPCEtLSBWYWx1ZSB0ZXh0IC0tPgogICAgICAgICAgICA8dGV4dCBjbGFzcz0iZ2F1Z2UtdGV4dCIgeD0iJHtjZW50ZXJYfSIgeT0iJHtjZW50ZXJZIC0gOH0iIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiPgogICAgICAgICAgICAgIDx0c3Bhbj4ke3ZhbHVlMn08L3RzcGFuPiR7dGlsZS51bml0ID8gYjJgPHRzcGFuIGNsYXNzPSJnYXVnZS11bml0IiBkeD0iMiIgZHk9IjAiPiR7dGlsZS51bml0fTwvdHNwYW4+YCA6ICIifQogICAgICAgICAgICA8L3RleHQ+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyUGVyY2VudGFnZSh0aWxlKSB7CiAgICAgIGNvbnN0IHZhbHVlMiA9IHR5cGVvZiB0aWxlLnZhbHVlID09PSAibnVtYmVyIiA/IHRpbGUudmFsdWUgOiBwYXJzZUZsb2F0KHRpbGUudmFsdWUpOwogICAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5taW4oMTAwLCBNYXRoLm1heCgwLCB2YWx1ZTIpKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJwZXJjZW50YWdlLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InBlcmNlbnRhZ2UtdmFsdWUiPiR7cGVyY2VudGFnZX0lPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGVyY2VudGFnZS1iYXIiPgogICAgICAgICAgPGRpdiAKICAgICAgICAgICAgY2xhc3M9InBlcmNlbnRhZ2UtZmlsbCIgCiAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogJHtwZXJjZW50YWdlfSU7ICR7dGlsZS5jb2xvciA/IGBiYWNrZ3JvdW5kOiAke3RpbGUuY29sb3J9YCA6ICIifSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyVHJlbmQodGlsZSkgewogICAgICBpZiAoIXRpbGUudHJlbmREYXRhIHx8IHRpbGUudHJlbmREYXRhLmxlbmd0aCA8IDIpIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idGlsZS12YWx1ZSI+JHt0aWxlLnZhbHVlfTwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgZGF0YSA9IHRpbGUudHJlbmREYXRhOwogICAgICBjb25zdCBtYXgzID0gTWF0aC5tYXgoLi4uZGF0YSk7CiAgICAgIGNvbnN0IG1pbjMgPSBNYXRoLm1pbiguLi5kYXRhKTsKICAgICAgY29uc3QgcmFuZ2UyID0gbWF4MyAtIG1pbjMgfHwgMTsKICAgICAgY29uc3Qgd2lkdGggPSAzMDA7CiAgICAgIGNvbnN0IGhlaWdodCA9IDMyOwogICAgICBjb25zdCBwYWRkaW5nID0gMjsKICAgICAgY29uc3QgcG9pbnRzID0gZGF0YS5tYXAoKHZhbHVlMiwgaW5kZXgyKSA9PiB7CiAgICAgICAgY29uc3QgeDMgPSBpbmRleDIgLyAoZGF0YS5sZW5ndGggLSAxKSAqIHdpZHRoOwogICAgICAgIGNvbnN0IHk1ID0gcGFkZGluZyArIChoZWlnaHQgLSAyICogcGFkZGluZykgLSAodmFsdWUyIC0gbWluMykgLyByYW5nZTIgKiAoaGVpZ2h0IC0gMiAqIHBhZGRpbmcpOwogICAgICAgIHJldHVybiBgJHt4M30sJHt5NX1gOwogICAgICB9KS5qb2luKCIgIik7CiAgICAgIGNvbnN0IGFyZWFQb2ludHMgPSBgMCwke2hlaWdodH0gJHtwb2ludHN9ICR7d2lkdGh9LCR7aGVpZ2h0fWA7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0idHJlbmQtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0cmVuZC1oZWFkZXIiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InRyZW5kLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9zcGFuPgogICAgICAgICAgJHt0aWxlLnVuaXQgPyBiMmA8c3BhbiBjbGFzcz0idHJlbmQtdW5pdCI+JHt0aWxlLnVuaXR9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgICR7dGlsZS5kZXNjcmlwdGlvbiA/IGIyYDxzcGFuIGNsYXNzPSJ0cmVuZC1sYWJlbCI+JHt0aWxlLmRlc2NyaXB0aW9ufTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idHJlbmQtZ3JhcGgiPgogICAgICAgICAgPHN2ZyBjbGFzcz0idHJlbmQtc3ZnIiB2aWV3Qm94PSIwIDAgJHt3aWR0aH0gJHtoZWlnaHR9IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIj4KICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9InRyZW5kLWFyZWEiIHBvaW50cz0iJHthcmVhUG9pbnRzfSIgLz4KICAgICAgICAgICAgPHBvbHlsaW5lIGNsYXNzPSJ0cmVuZC1saW5lIiBwb2ludHM9IiR7cG9pbnRzfSIgLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJNdWx0aVBlcmNlbnRhZ2UodGlsZSkgewogICAgICBpZiAoIXRpbGUucGVyY2VudGFnZXMgfHwgdGlsZS5wZXJjZW50YWdlcy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idGlsZS12YWx1ZSI+JHt0aWxlLnZhbHVlfTwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgaXRlbXMgPSB0aWxlLnBlcmNlbnRhZ2VzLnNsaWNlKDAsIDMpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2Utd3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0ibXVsdGktcGVyY2VudGFnZS1pdGVtcyI+CiAgICAgICAgICAke2l0ZW1zLm1hcCgoaXRlbSkgPT4gewogICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIGl0ZW0udmFsdWUpKTsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXVsdGktcGVyY2VudGFnZS1pdGVtIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2UtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2UtbGFiZWwiPiR7aXRlbS5sYWJlbH08L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdWx0aS1wZXJjZW50YWdlLXZhbHVlIj4ke3BlcmNlbnRhZ2V9JTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXVsdGktcGVyY2VudGFnZS1iYXIiPgogICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2UtZmlsbCIKICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6ICR7cGVyY2VudGFnZX0lOyAke2l0ZW0uY29sb3IgPyBgYmFja2dyb3VuZDogJHtpdGVtLmNvbG9yfWAgOiAiIn0iCiAgICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyQ3B1Q29yZXModGlsZSkgewogICAgICBpZiAoIXRpbGUuY29yZXNEYXRhIHx8IHRpbGUuY29yZXNEYXRhLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9kaXY+YDsKICAgICAgfQogICAgICBjb25zdCBjb3JlcyA9IHRpbGUuY29yZXNEYXRhOwogICAgICBjb25zdCBhdmdVc2FnZSA9IE1hdGgucm91bmQoY29yZXMucmVkdWNlKChzdW0sIGNvcmUyKSA9PiBzdW0gKyBjb3JlMi51c2FnZSwgMCkgLyBjb3Jlcy5sZW5ndGgpOwogICAgICBjb25zdCBnZXRDb2xvckNsYXNzID0gKHVzYWdlKSA9PiB7CiAgICAgICAgaWYgKHVzYWdlIDwgNTApCiAgICAgICAgICByZXR1cm4gImxvdyI7CiAgICAgICAgaWYgKHVzYWdlIDwgODApCiAgICAgICAgICByZXR1cm4gIm1lZGl1bSI7CiAgICAgICAgcmV0dXJuICJoaWdoIjsKICAgICAgfTsKICAgICAgY29uc3QgbWF4QmFyc1dpZHRoID0gY29yZXMubGVuZ3RoICogMjQgKyAoY29yZXMubGVuZ3RoIC0gMSkgKiAzOwogICAgICBjb25zdCBjb2x1bW5TcGFuID0gdGlsZS5jb2x1bW5TcGFuIHx8IDE7CiAgICAgIGNvbnN0IGVzdGltYXRlZFRpbGVXaWR0aCA9IHRoaXMubWluVGlsZVdpZHRoICogY29sdW1uU3BhbiArIChjb2x1bW5TcGFuIC0gMSkgKiB0aGlzLmdhcCAtIDMyOwogICAgICBjb25zdCBzaG91bGRDZW50ZXIgPSBtYXhCYXJzV2lkdGggPCBlc3RpbWF0ZWRUaWxlV2lkdGggKiAwLjY2NjsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJjcHUtY29yZXMtd3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY3B1LWNvcmVzLWhlYWRlciI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iY3B1LWNvcmVzLXZhbHVlIj4ke2F2Z1VzYWdlfTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJjcHUtY29yZXMtdW5pdCI+JTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJjcHUtY29yZXMtbGFiZWwiPiR7Y29yZXMubGVuZ3RofSBjb3Jlczwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjcHUtY29yZXMtYmFycyAke3Nob3VsZENlbnRlciA/ICJjZW50ZXJlZCIgOiAiIn0iPgogICAgICAgICAgJHtjb3Jlcy5tYXAoKGNvcmUyKSA9PiB7CiAgICAgICAgY29uc3QgdXNhZ2UgPSBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIGNvcmUyLnVzYWdlKSk7CiAgICAgICAgY29uc3QgY29sb3JDbGFzcyA9IGdldENvbG9yQ2xhc3ModXNhZ2UpOwogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjcHUtY29yZS1iYXItY29udGFpbmVyIiB0aXRsZT0iQ29yZSAke2NvcmUyLmxhYmVsIHx8IGNvcmUyLmlkfTogJHt1c2FnZX0lIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNwdS1jb3JlLWJhci13cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjcHUtY29yZS1iYXItZmlsbCAke2NvbG9yQ2xhc3N9IgogICAgICAgICAgICAgICAgICAgIHN0eWxlPSJoZWlnaHQ6ICR7dXNhZ2V9JSIKICAgICAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAke2NvcmVzLmxlbmd0aCA8PSAxNiA/IGIyYAogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY3B1LWNvcmUtbGFiZWwiPiR7Y29yZTIubGFiZWwgfHwgY29yZTIuaWR9PC9zcGFuPgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgZm9ybWF0Qnl0ZXMoYnl0ZXMpIHsKICAgICAgaWYgKGJ5dGVzID09PSAwKQogICAgICAgIHJldHVybiAiMCBCIjsKICAgICAgY29uc3QgazQgPSAxMDI0OwogICAgICBjb25zdCBzaXplcyA9IFsiQiIsICJLQiIsICJNQiIsICJHQiIsICJUQiIsICJQQiJdOwogICAgICBjb25zdCBpMTEgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGs0KSk7CiAgICAgIHJldHVybiBwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGs0LCBpMTEpKS50b0ZpeGVkKDEpKSArICIgIiArIHNpemVzW2kxMV07CiAgICB9CiAgICByZW5kZXJQYXJ0aXRpb24odGlsZSkgewogICAgICBpZiAoIXRpbGUucGFydGl0aW9uRGF0YSkgewogICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9kaXY+YDsKICAgICAgfQogICAgICBjb25zdCB7IHVzZWQsIHRvdGFsLCBmaWxlc3lzdGVtLCBtb3VudFBvaW50IH0gPSB0aWxlLnBhcnRpdGlvbkRhdGE7CiAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIHVzZWQgLyB0b3RhbCAqIDEwMCkpOwogICAgICBjb25zdCBmcmVlID0gdG90YWwgLSB1c2VkOwogICAgICBjb25zdCBnZXRDb2xvckNsYXNzID0gKCkgPT4gewogICAgICAgIGlmIChwZXJjZW50YWdlID49IDkwKQogICAgICAgICAgcmV0dXJuICJjcml0aWNhbCI7CiAgICAgICAgaWYgKHBlcmNlbnRhZ2UgPj0gNzUpCiAgICAgICAgICByZXR1cm4gIndhcm5pbmciOwogICAgICAgIHJldHVybiAiIjsKICAgICAgfTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJwYXJ0aXRpb24td3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0icGFydGl0aW9uLWhlYWRlciI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0icGFydGl0aW9uLXBlcmNlbnRhZ2UiPiR7TWF0aC5yb3VuZChwZXJjZW50YWdlKX0lPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhcnRpdGlvbi1iYXIiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0icGFydGl0aW9uLWJhci1maWxsICR7Z2V0Q29sb3JDbGFzcygpfSIKICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAke3BlcmNlbnRhZ2V9JSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0aXRpb24tc3RhdHMiPgogICAgICAgICAgPGRpdiBjbGFzcz0icGFydGl0aW9uLXN0YXQiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0icGFydGl0aW9uLXN0YXQtbGFiZWwiPlVzZWQ8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tc3RhdC12YWx1ZSI+JHt0aGlzLmZvcm1hdEJ5dGVzKHVzZWQpfTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icGFydGl0aW9uLXN0YXQiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0icGFydGl0aW9uLXN0YXQtbGFiZWwiPkZyZWU8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tc3RhdC12YWx1ZSI+JHt0aGlzLmZvcm1hdEJ5dGVzKGZyZWUpfTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhcnRpdGlvbi1tZXRhIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tZmlsZXN5c3RlbSI+JHtmaWxlc3lzdGVtfTwvc3Bhbj4KICAgICAgICAgICR7bW91bnRQb2ludCA/IGIyYDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tbW91bnRwb2ludCI+JHttb3VudFBvaW50fTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckRpc2sodGlsZSkgewogICAgICBpZiAoIXRpbGUuZGlza0RhdGEpIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idGlsZS12YWx1ZSI+JHt0aWxlLnZhbHVlfTwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgeyBjYXBhY2l0eSwgbW9kZWwsIHR5cGU6IHR5cGU1LCBpb3BzLCBoZWFsdGggfSA9IHRpbGUuZGlza0RhdGE7CiAgICAgIGNvbnN0IGdldEhlYWx0aENsYXNzID0gKHZhbHVlMikgPT4gewogICAgICAgIGlmICh2YWx1ZTIgPj0gNzApCiAgICAgICAgICByZXR1cm4gImdvb2QiOwogICAgICAgIGlmICh2YWx1ZTIgPj0gMzApCiAgICAgICAgICByZXR1cm4gIndhcm5pbmciOwogICAgICAgIHJldHVybiAiY3JpdGljYWwiOwogICAgICB9OwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImRpc2std3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1jYXBhY2l0eSI+JHt0aGlzLmZvcm1hdEJ5dGVzKGNhcGFjaXR5KX08L2Rpdj4KICAgICAgICAke21vZGVsIHx8IHR5cGU1ID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLW1vZGVsIj4KICAgICAgICAgICAgJHttb2RlbCA/IGIyYDxzcGFuPiR7bW9kZWx9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgICAgJHt0eXBlNSA/IGIyYDxzcGFuIGNsYXNzPSJkaXNrLXR5cGUtYmFkZ2UiPiR7dHlwZTV9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLW1ldHJpY3MiPgogICAgICAgICAgJHtpb3BzID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpc2staW9wcyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1pb3BzLWl0ZW0iPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpc2staW9wcy1sYWJlbCI+UmVhZDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXNrLWlvcHMtdmFsdWUiPiR7aW9wcy5yZWFkLnRvTG9jYWxlU3RyaW5nKCl9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpc2staW9wcy1pdGVtIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXNrLWlvcHMtbGFiZWwiPldyaXRlPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpc2staW9wcy12YWx1ZSI+JHtpb3BzLndyaXRlLnRvTG9jYWxlU3RyaW5nKCl9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICR7aGVhbHRoICE9PSB2b2lkIDAgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1oZWFsdGgiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpc2staGVhbHRoLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZGlzay1oZWFsdGgtbGFiZWwiPkhlYWx0aDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXNrLWhlYWx0aC12YWx1ZSI+JHtoZWFsdGh9JTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLWhlYWx0aC1iYXIiPgogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0iZGlzay1oZWFsdGgtZmlsbCAke2dldEhlYWx0aENsYXNzKGhlYWx0aCl9IgogICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6ICR7aGVhbHRofSUiCiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBoYW5kbGVHcmlkQWN0aW9uKGFjdGlvbikgewogICAgICBpZiAoYWN0aW9uLmFjdGlvbikgewogICAgICAgIGF3YWl0IGFjdGlvbi5hY3Rpb24oKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgaGFuZGxlVGlsZUFjdGlvbihhY3Rpb24sIF90aWxlKSB7CiAgICAgIGlmIChhY3Rpb24uYWN0aW9uKSB7CiAgICAgICAgYXdhaXQgYWN0aW9uLmFjdGlvbigpOwogICAgICB9CiAgICB9CiAgICBzaG93Q29udGV4dE1lbnUoZXZlbnQsIHRpbGUpIHsKICAgICAgaWYgKCF0aWxlLmFjdGlvbnMgfHwgdGlsZS5hY3Rpb25zLmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbiA9IHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9OwogICAgICB0aGlzLmNvbnRleHRNZW51QWN0aW9ucyA9IHRpbGUuYWN0aW9uczsKICAgICAgdGhpcy5jb250ZXh0TWVudVZpc2libGUgPSB0cnVlOwogICAgICBjb25zdCBjbG9zZUhhbmRsZXIgPSAoKSA9PiB7CiAgICAgICAgdGhpcy5jb250ZXh0TWVudVZpc2libGUgPSBmYWxzZTsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsIGNsb3NlSGFuZGxlcik7CiAgICAgIH07CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgY2xvc2VIYW5kbGVyKTsKICAgICAgfSwgMTAwKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzYoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNTdGF0c0dyaWQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpL2RlZXMtYXBwdWkuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgX19lc0RlY29yYXRlMzYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczM3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZW1vRGFzaGJvYXJkVmlldyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlbW8tZGFzaGJvYXJkLXZpZXciKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9hY3RpdmF0ZWRfZGVjb3JhdG9yczsKICBsZXQgX2FjdGl2YXRlZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2YXRlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZW1vRGFzaGJvYXJkVmlldzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9hY3RpdmF0ZWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMzYodGhpcywgbnVsbCwgX2FjdGl2YXRlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmF0ZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2YXRlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3RpdmF0ZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2YXRlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3RpdmF0ZWRfaW5pdGlhbGl6ZXJzLCBfYWN0aXZhdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZW1vRGFzaGJvYXJkVmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICBfX3J1bkluaXRpYWxpemVyczM3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgICNhY3RpdmF0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzcodGhpcywgX2FjdGl2YXRlZF9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgIGdldCBhY3RpdmF0ZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhY3RpdmF0ZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3RpdmF0ZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2YXRlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY3R4ID0gX19ydW5Jbml0aWFsaXplcnMzNyh0aGlzLCBfYWN0aXZhdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIHN0YXRzVGlsZXMgPSBbCiAgICAgIHsKICAgICAgICBpZDogInVzZXJzIiwKICAgICAgICB0aXRsZTogIkFjdGl2ZSBVc2VycyIsCiAgICAgICAgdmFsdWU6IDEyMzQsCiAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgaWNvbjogImx1Y2lkZTp1c2VycyIsCiAgICAgICAgZGVzY3JpcHRpb246ICJPbmxpbmUgbm93IiwKICAgICAgICBjb2xvcjogIiMyMmM1NWUiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogImFwaS1jYWxscyIsCiAgICAgICAgdGl0bGU6ICJBUEkgQ2FsbHMiLAogICAgICAgIHZhbHVlOiA0NTIwMCwKICAgICAgICB0eXBlOiAidHJlbmQiLAogICAgICAgIGljb246ICJsdWNpZGU6YWN0aXZpdHkiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiKzEyJSBmcm9tIGxhc3QgaG91ciIsCiAgICAgICAgY29sb3I6ICIjM2I4MmY2IiwKICAgICAgICB0cmVuZERhdGE6IFszMmUzLCAzNWUzLCAzOGUzLCA0MWUzLCAzOWUzLCA0MmUzLCA0NTIwMF0KICAgICAgfSwKICAgICAgewogICAgICAgIGlkOiAiaGVhbHRoIiwKICAgICAgICB0aXRsZTogIlN5c3RlbSBIZWFsdGgiLAogICAgICAgIHZhbHVlOiA5OS45LAogICAgICAgIHVuaXQ6ICIlIiwKICAgICAgICB0eXBlOiAiZ2F1Z2UiLAogICAgICAgIGljb246ICJsdWNpZGU6aGVhcnQtcHVsc2UiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiQWxsIHN5c3RlbXMgb3BlcmF0aW9uYWwiLAogICAgICAgIGNvbG9yOiAiIzEwYjk4MSIsCiAgICAgICAgZ2F1Z2VPcHRpb25zOiB7CiAgICAgICAgICBtaW46IDAsCiAgICAgICAgICBtYXg6IDEwMCwKICAgICAgICAgIHRocmVzaG9sZHM6IFsKICAgICAgICAgICAgeyB2YWx1ZTogODAsIGNvbG9yOiAiI2VmNDQ0NCIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogOTUsIGNvbG9yOiAiI2Y1OWUwYiIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogMTAwLCBjb2xvcjogIiMxMGI5ODEiIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogInJlc3BvbnNlIiwKICAgICAgICB0aXRsZTogIkF2ZyBSZXNwb25zZSIsCiAgICAgICAgdmFsdWU6IDEyNywKICAgICAgICB1bml0OiAibXMiLAogICAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICAgIGljb246ICJsdWNpZGU6dGltZXIiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiLTE1bXMgZnJvbSB5ZXN0ZXJkYXkiLAogICAgICAgIGNvbG9yOiAiIzhiNWNmNiIKICAgICAgfSwKICAgICAgewogICAgICAgIGlkOiAicmVzb3VyY2VzIiwKICAgICAgICB0aXRsZTogIlJlc291cmNlIFVzYWdlIiwKICAgICAgICB2YWx1ZTogIiIsCiAgICAgICAgdHlwZTogIm11bHRpUGVyY2VudGFnZSIsCiAgICAgICAgaWNvbjogImx1Y2lkZTpzZXJ2ZXIiLAogICAgICAgIHBlcmNlbnRhZ2VzOiBbCiAgICAgICAgICB7IGxhYmVsOiAiQ1BVIiwgdmFsdWU6IDY3LCBjb2xvcjogIiMzYjgyZjYiIH0sCiAgICAgICAgICB7IGxhYmVsOiAiTWVtb3J5IiwgdmFsdWU6IDg0LCBjb2xvcjogIiM4YjVjZjYiIH0sCiAgICAgICAgICB7IGxhYmVsOiAiRGlzayIsIHZhbHVlOiA0NSwgY29sb3I6ICIjMTBiOTgxIiB9CiAgICAgICAgXQogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJyZXF1ZXN0cyIsCiAgICAgICAgdGl0bGU6ICJSZXF1ZXN0cy9zZWMiLAogICAgICAgIHZhbHVlOiAxODUwLAogICAgICAgIHR5cGU6ICJ0cmVuZCIsCiAgICAgICAgaWNvbjogImx1Y2lkZTp6YXAiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiQ3VycmVudCB0aHJvdWdocHV0IiwKICAgICAgICBjb2xvcjogIiMwNmI2ZDQiLAogICAgICAgIHRyZW5kRGF0YTogWzEyMDAsIDE0MDAsIDEzNTAsIDE2MDAsIDE3NTAsIDE2ODAsIDE4NTBdCiAgICAgIH0KICAgIF07CiAgICBvbkFjdGl2YXRlKGNvbnRleHQyKSB7CiAgICAgIHRoaXMuY3R4ID0gY29udGV4dDI7CiAgICAgIHRoaXMuYWN0aXZhdGVkID0gdHJ1ZTsKICAgICAgY29uc29sZS5sb2coIkRhc2hib2FyZCBhY3RpdmF0ZWQgd2l0aCBjb250ZXh0OiIsIGNvbnRleHQyKTsKICAgICAgY29udGV4dDIuYXBwdWkuc2V0U2Vjb25kYXJ5TWVudSh7CiAgICAgICAgaGVhZGluZzogIkRhc2hib2FyZCIsCiAgICAgICAgZ3JvdXBzOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJRdWljayBBY2Nlc3MiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp6YXAiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsga2V5OiAiT3ZlcnZpZXciLCBpY29uTmFtZTogImxheW91dERhc2hib2FyZCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIk92ZXJ2aWV3IikgfSwKICAgICAgICAgICAgICB7IGtleTogIlJlY2VudCIsIGljb25OYW1lOiAiY2xvY2siLCBiYWRnZTogNSwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUmVjZW50IikgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJkaXZpZGVyIiB9LAogICAgICAgICAgICAgIHsgdHlwZTogImFjdGlvbiIsIGtleTogIlJlZnJlc2ggRGF0YSIsIGljb25OYW1lOiAibHVjaWRlOnJlZnJlc2hDdyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIlJlZnJlc2hpbmcgZGFzaGJvYXJkIGRhdGEuLi4iKSB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJGaWx0ZXJzIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsdGVyIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICB7IHR5cGU6ICJoZWFkZXIiLCBsYWJlbDogIlRpbWUgUmFuZ2UiIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZmlsdGVyIiwga2V5OiAiTGl2ZSBVcGRhdGVzIiwgaWNvbk5hbWU6ICJsdWNpZGU6cmFkaW8iLCBhY3RpdmU6IHRydWUsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiTGl2ZSB1cGRhdGVzOiIsIGFjdGl2ZSkgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJmaWx0ZXIiLCBrZXk6ICJTaG93IEFyY2hpdmVkIiwgaWNvbk5hbWU6ICJsdWNpZGU6YXJjaGl2ZSIsIGFjdGl2ZTogZmFsc2UsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiU2hvdyBhcmNoaXZlZDoiLCBhY3RpdmUpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJtdWx0aUZpbHRlciIsIGtleTogIkRhdGEgU291cmNlcyIsIGljb25OYW1lOiAibHVjaWRlOmRhdGFiYXNlIiwgb3B0aW9uczogWwogICAgICAgICAgICAgICAgeyBrZXk6ICJhcGkiLCBsYWJlbDogIkFQSSBTZXJ2ZXIiLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTpzZXJ2ZXIiIH0sCiAgICAgICAgICAgICAgICB7IGtleTogIndlYiIsIGxhYmVsOiAiV2ViIFRyYWZmaWMiLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTpnbG9iZSIgfSwKICAgICAgICAgICAgICAgIHsga2V5OiAibW9iaWxlIiwgbGFiZWw6ICJNb2JpbGUgQXBwIiwgY2hlY2tlZDogZmFsc2UsIGljb25OYW1lOiAibHVjaWRlOnNtYXJ0cGhvbmUiIH0KICAgICAgICAgICAgICBdLCBvbkNoYW5nZTogKGtleXMyKSA9PiBjb25zb2xlLmxvZygiRGF0YSBzb3VyY2VzOiIsIGtleXMyKSB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJBbmFseXRpY3MiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpiYXJDaGFydDMiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsga2V5OiAiTWV0cmljcyIsIGljb25OYW1lOiAiYWN0aXZpdHkiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJNZXRyaWNzIikgfSwKICAgICAgICAgICAgICB7IGtleTogIlJlcG9ydHMiLCBpY29uTmFtZTogImZpbGVUZXh0IiwgYmFkZ2U6ICJuZXciLCBiYWRnZVZhcmlhbnQ6ICJzdWNjZXNzIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUmVwb3J0cyIpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJsaW5rIiwga2V5OiAiQW5hbHl0aWNzIERvY3MiLCBpY29uTmFtZTogImx1Y2lkZTpleHRlcm5hbExpbmsiLCBocmVmOiAiaHR0cHM6Ly9kb2NzLmV4YW1wbGUuY29tL2FuYWx5dGljcyIgfQogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9KTsKICAgICAgY29udGV4dDIuYXBwdWkuc2V0Q29udGVudFRhYnMoWwogICAgICAgIHsga2V5OiAiT3ZlcnZpZXciLCBpY29uTmFtZTogImx1Y2lkZTpsYXlvdXREYXNoYm9hcmQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJPdmVydmlldyB0YWIiKSB9LAogICAgICAgIHsga2V5OiAiQW5hbHl0aWNzIiwgaWNvbk5hbWU6ICJsdWNpZGU6YmFyQ2hhcnQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJBbmFseXRpY3MgdGFiIikgfSwKICAgICAgICB7IGtleTogIlJlcG9ydHMiLCBpY29uTmFtZTogImx1Y2lkZTpmaWxlVGV4dCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlJlcG9ydHMgdGFiIikgfQogICAgICBdKTsKICAgIH0KICAgIG9uRGVhY3RpdmF0ZSgpIHsKICAgICAgdGhpcy5hY3RpdmF0ZWQgPSBmYWxzZTsKICAgICAgY29uc29sZS5sb2coIkRhc2hib2FyZCBkZWFjdGl2YXRlZCIpOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICA6aG9zdCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBjb2xvcjogI2EzYTNhMzsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWY7CiAgICAgICAgfQogICAgICAgIGgxIHsgY29sb3I6ICNmYWZhZmE7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMjRweDsgbWFyZ2luLWJvdHRvbTogOHB4OyB9CiAgICAgICAgcCB7IGNvbG9yOiAjNzM3MzczOyBtYXJnaW4tYm90dG9tOiAzMnB4OyB9CiAgICAgICAgZGVlcy1zdGF0c2dyaWQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDsKICAgICAgICB9CgogICAgICAgIC5jdHgtYWN0aW9ucyB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wMik7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIH0KICAgICAgICAuY3R4LWFjdGlvbnMgaDIgeyBjb2xvcjogI2ZhZmFmYTsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNjAwOyBtYXJnaW4tYm90dG9tOiAxNnB4OyB9CiAgICAgICAgLmJ1dHRvbi1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG4gewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg1OSwgMTMwLCAyNDYsIDAuMSk7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKTsKICAgICAgICAgIGNvbG9yOiAjNjBhNWZhOwogICAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG46aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg1OSwgMTMwLCAyNDYsIDAuMik7CiAgICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjUpOwogICAgICAgIH0KICAgICAgICAuY3R4LWJ0bi5kYW5nZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4xKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMzksIDY4LCA2OCwgMC4zKTsKICAgICAgICAgIGNvbG9yOiAjZjg3MTcxOwogICAgICAgIH0KICAgICAgICAuY3R4LWJ0bi5kYW5nZXI6aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4yKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMzksIDY4LCA2OCwgMC41KTsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG4uc3VjY2VzcyB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjEpOwogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjMpOwogICAgICAgICAgY29sb3I6ICM0YWRlODA7CiAgICAgICAgfQogICAgICAgIC5jdHgtYnRuLnN1Y2Nlc3M6aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzNCwgMTk3LCA5NCwgMC4yKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgzNCwgMTk3LCA5NCwgMC41KTsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxoMT5EYXNoYm9hcmQ8L2gxPgogICAgICA8cD5XZWxjb21lIGJhY2shIEhlcmUncyBhbiBvdmVydmlldyBvZiB5b3VyIHN5c3RlbS48L3A+CiAgICAgIDxkZWVzLXN0YXRzZ3JpZAogICAgICAgIC50aWxlcz0ke3RoaXMuc3RhdHNUaWxlc30KICAgICAgICBAdGlsZS1hY3Rpb249JHsoZTExKSA9PiBjb25zb2xlLmxvZygiVGlsZSBhY3Rpb246IiwgZTExLmRldGFpbCl9CiAgICAgID48L2RlZXMtc3RhdHNncmlkPgoKICAgICAgPGRpdiBjbGFzcz0iY3R4LWFjdGlvbnMiPgogICAgICAgIDxoMj5Db250ZXh0IEFjdGlvbnMgKGN0eC5hcHB1aSk8L2gyPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5zZXRNYWluTWVudVZpc2libGUoZmFsc2UpfT5IaWRlIE1haW4gTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0TWFpbk1lbnVWaXNpYmxlKHRydWUpfT5TaG93IE1haW4gTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldFNlY29uZGFyeU1lbnVWaXNpYmxlKGZhbHNlKX0+SGlkZSBTZWNvbmRhcnkgTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0U2Vjb25kYXJ5TWVudVZpc2libGUodHJ1ZSl9PlNob3cgU2Vjb25kYXJ5IE1lbnU8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5zZXRDb250ZW50VGFic1Zpc2libGUoZmFsc2UpfT5IaWRlIENvbnRlbnQgVGFiczwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0Q29udGVudFRhYnNWaXNpYmxlKHRydWUpfT5TaG93IENvbnRlbnQgVGFiczwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldE1haW5NZW51Q29sbGFwc2VkKHRydWUpfT5Db2xsYXBzZSBNYWluIE1lbnU8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4gc3VjY2VzcyIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldE1haW5NZW51Q29sbGFwc2VkKGZhbHNlKX0+RXhwYW5kIE1haW4gTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldEJyZWFkY3J1bWJzKFsiRGFzaGJvYXJkIiwgIk92ZXJ2aWV3IiwgIlN0YXRzIl0pfT5TZXQgQnJlYWRjcnVtYnM8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5uYXZpZ2F0ZVRvVmlldygicHJvamVjdHMiKX0+R28gdG8gUHJvamVjdHM8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5uYXZpZ2F0ZVRvVmlldygic2V0dGluZ3MiLCB7IHNlY3Rpb246ICJzZWN1cml0eSIgfSl9PkdvIHRvIFNldHRpbmdzL1NlY3VyaXR5PC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuYWN0aXZpdHlMb2cuYWRkKHsgdHlwZTogImN1c3RvbSIsIHVzZXI6ICJEZW1vIFVzZXIiLCBtZXNzYWdlOiAiQnV0dG9uIGNsaWNrZWQgZnJvbSBjdHghIiwgaWNvbk5hbWU6ICJsdWNpZGU6bW91c2UtcG9pbnRlci1jbGljayIgfSl9PkFkZCBBY3Rpdml0eSBFbnRyeTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldE1haW5NZW51QmFkZ2UoInRhc2tzIiwgOTkpfT5TZXQgVGFza3MgQmFkZ2UgdG8gOTk8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4gZGFuZ2VyIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuY2xlYXJNYWluTWVudUJhZGdlKCJ0YXNrcyIpfT5DbGVhciBUYXNrcyBCYWRnZTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldENvbnRlbnRUYWJzQXV0b0hpZGUodHJ1ZSwgMSl9PkF1dG8taGlkZSBUYWJzICjiiaQxKTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBkYW5nZXIiIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5zZXRDb250ZW50VGFic0F1dG9IaWRlKGZhbHNlKX0+RGlzYWJsZSBBdXRvLWhpZGU8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4gc3VjY2VzcyIgQGNsaWNrPSR7KCkgPT4gdGhpcy5hZGRDbG9zZWFibGVUYWIoKX0+QWRkIENsb3NlYWJsZSBUYWI8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgdGFiQ291bnRlciA9IDA7CiAgICBhZGRDbG9zZWFibGVUYWIoKSB7CiAgICAgIGlmICghdGhpcy5jdHgpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnRhYkNvdW50ZXIrKzsKICAgICAgY29uc3QgdGFiS2V5ID0gYFRhYiAke3RoaXMudGFiQ291bnRlcn1gOwogICAgICB0aGlzLmN0eC5hcHB1aS5hZGRDb250ZW50VGFiKHsKICAgICAgICBrZXk6IHRhYktleSwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmaWxlIiwKICAgICAgICBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKGBTZWxlY3RlZCAke3RhYktleX1gKSwKICAgICAgICBjbG9zZWFibGU6IHRydWUsCiAgICAgICAgb25DbG9zZTogKCkgPT4gewogICAgICAgICAgdGhpcy5jdHg/LmFwcHVpLnJlbW92ZUNvbnRlbnRUYWIodGFiS2V5KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9EYXNoYm9hcmRWaWV3MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CnZhciBEZW1vU2V0dGluZ3NWaWV3ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVtby1zZXR0aW5ncy12aWV3IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfc2VjdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfc2VjdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlY3Rpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hhc0NoYW5nZXNfZGVjb3JhdG9yczsKICBsZXQgX2hhc0NoYW5nZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oYXNDaGFuZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlbW9TZXR0aW5nc1ZpZXcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfc2VjdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaGFzQ2hhbmdlc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGUzNih0aGlzLCBudWxsLCBfc2VjdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWN0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlY3Rpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlY3Rpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VjdGlvbl9pbml0aWFsaXplcnMsIF9zZWN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzYodGhpcywgbnVsbCwgX2hhc0NoYW5nZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGFzQ2hhbmdlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGFzQ2hhbmdlcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oYXNDaGFuZ2VzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oYXNDaGFuZ2VzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hhc0NoYW5nZXNfaW5pdGlhbGl6ZXJzLCBfaGFzQ2hhbmdlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVtb1NldHRpbmdzVmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICBfX3J1bkluaXRpYWxpemVyczM3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgICNzZWN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczM3KHRoaXMsIF9zZWN0aW9uX2luaXRpYWxpemVycywgImdlbmVyYWwiKTsKICAgIGdldCBzZWN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VjdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlY3Rpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNoYXNDaGFuZ2VzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNyh0aGlzLCBfc2VjdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzcodGhpcywgX2hhc0NoYW5nZXNfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGhhc0NoYW5nZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoYXNDaGFuZ2VzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaGFzQ2hhbmdlcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGFzQ2hhbmdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgYXBwdWkgPSBfX3J1bkluaXRpYWxpemVyczM3KHRoaXMsIF9oYXNDaGFuZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIG9uQWN0aXZhdGUoY29udGV4dDIpIHsKICAgICAgdGhpcy5hcHB1aSA9IGNvbnRleHQyLmFwcHVpOwogICAgICBjb25zb2xlLmxvZygiU2V0dGluZ3MgYWN0aXZhdGVkIHdpdGggcGFyYW1zOiIsIGNvbnRleHQyLnBhcmFtcyk7CiAgICAgIGlmIChjb250ZXh0Mi5wYXJhbXM/LnNlY3Rpb24pIHsKICAgICAgICB0aGlzLnNlY3Rpb24gPSBjb250ZXh0Mi5wYXJhbXMuc2VjdGlvbjsKICAgICAgfQogICAgICBjb250ZXh0Mi5hcHB1aS5zZXRTZWNvbmRhcnlNZW51KHsKICAgICAgICBoZWFkaW5nOiAiU2V0dGluZ3MiLAogICAgICAgIGdyb3VwczogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiQWNjb3VudCIsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnVzZXIiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsga2V5OiAiZ2VuZXJhbCIsIGljb25OYW1lOiAic2V0dGluZ3MiLCBhY3Rpb246ICgpID0+IHRoaXMuc2hvd1NlY3Rpb24oImdlbmVyYWwiKSB9LAogICAgICAgICAgICAgIHsga2V5OiAicHJvZmlsZSIsIGljb25OYW1lOiAidXNlciIsIGFjdGlvbjogKCkgPT4gdGhpcy5zaG93U2VjdGlvbigicHJvZmlsZSIpIH0sCiAgICAgICAgICAgICAgeyBrZXk6ICJzZWN1cml0eSIsIGljb25OYW1lOiAic2hpZWxkIiwgYWN0aW9uOiAoKSA9PiB0aGlzLnNob3dTZWN0aW9uKCJzZWN1cml0eSIpIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIlByZWZlcmVuY2VzIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6c2xpZGVycyIsCiAgICAgICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICAgICAgeyBrZXk6ICJub3RpZmljYXRpb25zIiwgaWNvbk5hbWU6ICJiZWxsIiwgYmFkZ2U6IDMsIGFjdGlvbjogKCkgPT4gdGhpcy5zaG93U2VjdGlvbigibm90aWZpY2F0aW9ucyIpIH0sCiAgICAgICAgICAgICAgeyBrZXk6ICJhcHBlYXJhbmNlIiwgaWNvbk5hbWU6ICJwYWxldHRlIiwgYWN0aW9uOiAoKSA9PiB0aGlzLnNob3dTZWN0aW9uKCJhcHBlYXJhbmNlIikgfQogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9KTsKICAgICAgY29udGV4dDIuYXBwdWkuc2V0U2Vjb25kYXJ5TWVudVNlbGVjdGlvbih0aGlzLnNlY3Rpb24pOwogICAgICBjb250ZXh0Mi5hcHB1aS5zZXRDb250ZW50VGFicyhbXSk7CiAgICB9CiAgICBvbkRlYWN0aXZhdGUoKSB7CiAgICAgIGNvbnNvbGUubG9nKCJTZXR0aW5ncyBkZWFjdGl2YXRlZCIpOwogICAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTsKICAgIH0KICAgIGNhbkRlYWN0aXZhdGUoKSB7CiAgICAgIGlmICh0aGlzLmhhc0NoYW5nZXMpIHsKICAgICAgICByZXR1cm4gIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gTGVhdmUgYW55d2F5PyI7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBzaG93U2VjdGlvbihzZWN0aW9uKSB7CiAgICAgIHRoaXMuc2VjdGlvbiA9IHNlY3Rpb247CiAgICAgIHRoaXMuYXBwdWk/LnNldFNlY29uZGFyeU1lbnVTZWxlY3Rpb24oc2VjdGlvbik7CiAgICB9CiAgICBzaW11bGF0ZUNoYW5nZSgpIHsKICAgICAgdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgICAgY29sb3I6ICNhM2EzYTM7CiAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmOwogICAgICAgIH0KICAgICAgICBoMSB7IGNvbG9yOiAjZmFmYWZhOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDI0cHg7IG1hcmdpbi1ib3R0b206IDhweDsgfQogICAgICAgIHAgeyBjb2xvcjogIzczNzM3MzsgbWFyZ2luLWJvdHRvbTogMjRweDsgfQogICAgICAgIC5zZWN0aW9uLW5hbWUgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgICBjb2xvcjogI2ZhZmFmYTsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgfQogICAgICAgIC5hY3Rpb25zIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgfQogICAgICAgIGJ1dHRvbiB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjM2I4MmY2OwogICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIGJ1dHRvbjpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjU2M2ViOwogICAgICAgIH0KICAgICAgICAud2FybmluZyB7CiAgICAgICAgICBjb2xvcjogI2ZiYmYyNDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8aDE+U2V0dGluZ3M8L2gxPgogICAgICA8cD5NYW5hZ2UgeW91ciBhY2NvdW50IGFuZCBhcHBsaWNhdGlvbiBwcmVmZXJlbmNlcy48L3A+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tbmFtZSI+CiAgICAgICAgQ3VycmVudCBzZWN0aW9uOiA8c3Ryb25nPiR7dGhpcy5zZWN0aW9ufTwvc3Ryb25nPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9ucyI+CiAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNpbXVsYXRlQ2hhbmdlKCl9Pk1ha2UgQ2hhbmdlczwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLmhhc0NoYW5nZXMgPyBiMmA8cCBjbGFzcz0id2FybmluZyI+WW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBOYXZpZ2F0aW9uIHdpbGwgcHJvbXB0IGZvciBjb25maXJtYXRpb24uPC9wPmAgOiAiIn0KICAgIGA7CiAgICB9CiAgfTsKICByZXR1cm4gRGVtb1NldHRpbmdzVmlldzIgPSBfY2xhc3NUaGlzOwp9KSgpOwp2YXIgRGVtb1Byb2plY3RzVmlldyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlbW8tcHJvamVjdHMtdmlldyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICB2YXIgRGVtb1Byb2plY3RzVmlldzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9fZXNEZWNvcmF0ZTM2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVtb1Byb2plY3RzVmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICBfX3J1bkluaXRpYWxpemVyczM3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIG9uQWN0aXZhdGUoY29udGV4dDIpIHsKICAgICAgY29udGV4dDIuYXBwdWkuc2V0U2Vjb25kYXJ5TWVudSh7CiAgICAgICAgaGVhZGluZzogIlByb2plY3RzIiwKICAgICAgICBncm91cHM6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIk15IFByb2plY3RzIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICB7IGtleTogIkFjdGl2ZSIsIGljb25OYW1lOiAiZm9sZGVyIiwgYmFkZ2U6IDMsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFjdGl2ZSIpIH0sCiAgICAgICAgICAgICAgeyBrZXk6ICJBcmNoaXZlZCIsIGljb25OYW1lOiAiYXJjaGl2ZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFyY2hpdmVkIikgfSwKICAgICAgICAgICAgICB7IGtleTogIlNoYXJlZCIsIGljb25OYW1lOiAidXNlcnMiLCBiYWRnZTogMiwgYmFkZ2VWYXJpYW50OiAid2FybmluZyIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlNoYXJlZCIpIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIlF1aWNrIEFjdGlvbnMiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp6YXAiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsgdHlwZTogImFjdGlvbiIsIGtleTogIk5ldyBQcm9qZWN0IiwgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyUGx1cyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkNyZWF0ZSBuZXcgcHJvamVjdCIpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiYWN0aW9uIiwga2V5OiAiSW1wb3J0IiwgaWNvbk5hbWU6ICJsdWNpZGU6ZG93bmxvYWQiLCBhY3Rpb246ICgpID0+IGFsZXJ0KCJJbXBvcnQgcHJvamVjdCIpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJsaW5rIiwga2V5OiAiVGVtcGxhdGVzIiwgaWNvbk5hbWU6ICJsdWNpZGU6bGF5b3V0VGVtcGxhdGUiLCBocmVmOiAiaHR0cHM6Ly90ZW1wbGF0ZXMuZXhhbXBsZS5jb20iIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSk7CiAgICAgIGNvbnRleHQyLmFwcHVpLnNldENvbnRlbnRUYWJzKFsKICAgICAgICB7IGtleTogIkdyaWQiLCBpY29uTmFtZTogImx1Y2lkZTpncmlkIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiR3JpZCB2aWV3IikgfSwKICAgICAgICB7IGtleTogIkxpc3QiLCBpY29uTmFtZTogImx1Y2lkZTpsaXN0IiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiTGlzdCB2aWV3IikgfSwKICAgICAgICB7IGtleTogIkJvYXJkIiwgaWNvbk5hbWU6ICJsdWNpZGU6a2FuYmFuIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQm9hcmQgdmlldyIpIH0KICAgICAgXSk7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgIGNvbG9yOiAjYTNhM2EzOwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZjsKICAgICAgICB9CiAgICAgICAgaDEgeyBjb2xvcjogI2ZhZmFmYTsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAyNHB4OyBtYXJnaW4tYm90dG9tOiAyNHB4OyB9CiAgICAgICAgLnByb2plY3RzIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIH0KICAgICAgICAucHJvamVjdCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDMpOwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4yczsKICAgICAgICB9CiAgICAgICAgLnByb2plY3Q6aG92ZXIgewogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuMik7CiAgICAgICAgfQogICAgICAgIC5wcm9qZWN0IGgzIHsgY29sb3I6ICNmYWZhZmE7IG1hcmdpbjogMCAwIDhweCAwOyBmb250LXNpemU6IDE2cHg7IH0KICAgICAgICAucHJvamVjdCBwIHsgY29sb3I6ICM3MzczNzM7IG1hcmdpbjogMDsgZm9udC1zaXplOiAxM3B4OyB9CiAgICAgICAgLmJhZGdlIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgIGJhY2tncm91bmQ6ICMxNDUzMmQ7CiAgICAgICAgICBjb2xvcjogIzRhZGU4MDsKICAgICAgICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGgxPlByb2plY3RzPC9oMT4KICAgICAgPGRpdiBjbGFzcz0icHJvamVjdHMiPgogICAgICAgIDxkaXYgY2xhc3M9InByb2plY3QiPgogICAgICAgICAgPGgzPkZyb250ZW5kIEFwcCA8c3BhbiBjbGFzcz0iYmFkZ2UiPkFjdGl2ZTwvc3Bhbj48L2gzPgogICAgICAgICAgPHA+UmVhY3QtYmFzZWQgZGFzaGJvYXJkIGFwcGxpY2F0aW9uPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByb2plY3QiPgogICAgICAgICAgPGgzPkFQSSBTZXJ2ZXIgPHNwYW4gY2xhc3M9ImJhZGdlIj5BY3RpdmU8L3NwYW4+PC9oMz4KICAgICAgICAgIDxwPk5vZGUuanMgUkVTVCBBUEkgYmFja2VuZDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9qZWN0Ij4KICAgICAgICAgIDxoMz5Nb2JpbGUgQXBwIDxzcGFuIGNsYXNzPSJiYWRnZSI+QWN0aXZlPC9zcGFuPjwvaDM+CiAgICAgICAgICA8cD5SZWFjdCBOYXRpdmUgaU9TL0FuZHJvaWQgYXBwPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByb2plY3QiPgogICAgICAgICAgPGgzPkRvY3VtZW50YXRpb248L2gzPgogICAgICAgICAgPHA+VGVjaG5pY2FsIGRvY3VtZW50YXRpb24gc2l0ZTwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9Qcm9qZWN0c1ZpZXcyID0gX2NsYXNzVGhpczsKfSkoKTsKdmFyIERlbW9UYXNrc1ZpZXcgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZW1vLXRhc2tzLXZpZXciKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgdmFyIERlbW9UYXNrc1ZpZXcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfX2VzRGVjb3JhdGUzNihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlbW9UYXNrc1ZpZXcyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzNyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBvbkFjdGl2YXRlKGNvbnRleHQyKSB7CiAgICAgIGNvbnRleHQyLmFwcHVpLnNldFNlY29uZGFyeU1lbnUoewogICAgICAgIGhlYWRpbmc6ICJUYXNrcyIsCiAgICAgICAgZ3JvdXBzOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJWaWV3cyIsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmV5ZSIsCiAgICAgICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICAgICAgeyBrZXk6ICJBbGwgVGFza3MiLCBpY29uTmFtZTogImxpc3QiLCBiYWRnZTogMTIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFsbCIpIH0sCiAgICAgICAgICAgICAgeyBrZXk6ICJUb2RheSIsIGljb25OYW1lOiAiY2FsZW5kYXIiLCBiYWRnZTogMywgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiVG9kYXkiKSB9LAogICAgICAgICAgICAgIHsga2V5OiAiVXBjb21pbmciLCBpY29uTmFtZTogImNsb2NrIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiVXBjb21pbmciKSB9LAogICAgICAgICAgICAgIHsga2V5OiAiQ29tcGxldGVkIiwgaWNvbk5hbWU6ICJjaGVja0NpcmNsZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkNvbXBsZXRlZCIpIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIkZpbHRlcnMiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmaWx0ZXIiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsgdHlwZTogImhlYWRlciIsIGxhYmVsOiAiUHJpb3JpdHkiIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAibXVsdGlGaWx0ZXIiLCBrZXk6ICJQcmlvcml0eSIsIGljb25OYW1lOiAibHVjaWRlOmZsYWciLCBvcHRpb25zOiBbCiAgICAgICAgICAgICAgICB7IGtleTogImhpZ2giLCBsYWJlbDogIkhpZ2giLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTphbGVydENpcmNsZSIgfSwKICAgICAgICAgICAgICAgIHsga2V5OiAibWVkaXVtIiwgbGFiZWw6ICJNZWRpdW0iLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTptaW51c0NpcmNsZSIgfSwKICAgICAgICAgICAgICAgIHsga2V5OiAibG93IiwgbGFiZWw6ICJMb3ciLCBjaGVja2VkOiBmYWxzZSwgaWNvbk5hbWU6ICJsdWNpZGU6Y2lyY2xlIiB9CiAgICAgICAgICAgICAgXSwgb25DaGFuZ2U6IChrZXlzMikgPT4gY29uc29sZS5sb2coIlByaW9yaXR5IGZpbHRlcjoiLCBrZXlzMikgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJkaXZpZGVyIiB9LAogICAgICAgICAgICAgIHsgdHlwZTogImhlYWRlciIsIGxhYmVsOiAiT3B0aW9ucyIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJmaWx0ZXIiLCBrZXk6ICJTaG93IFN1YnRhc2tzIiwgaWNvbk5hbWU6ICJsdWNpZGU6bGlzdFRyZWUiLCBhY3RpdmU6IHRydWUsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiU2hvdyBzdWJ0YXNrczoiLCBhY3RpdmUpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZmlsdGVyIiwga2V5OiAiU2hvdyBDb21wbGV0ZWQiLCBpY29uTmFtZTogImx1Y2lkZTpjaGVja1NxdWFyZSIsIGFjdGl2ZTogZmFsc2UsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiU2hvdyBjb21wbGV0ZWQ6IiwgYWN0aXZlKSB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJBY3Rpb25zIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6emFwIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJBZGQgVGFzayIsIGljb25OYW1lOiAibHVjaWRlOnBsdXMiLCBhY3Rpb246ICgpID0+IGFsZXJ0KCJBZGQgbmV3IHRhc2siKSB9LAogICAgICAgICAgICAgIHsgdHlwZTogImFjdGlvbiIsIGtleTogIkltcG9ydCBUYXNrcyIsIGljb25OYW1lOiAibHVjaWRlOnVwbG9hZCIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkltcG9ydCB0YXNrcyIpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJDbGVhciBDb21wbGV0ZWQiLCBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLCB2YXJpYW50OiAiZGFuZ2VyIiwgY29uZmlybU1lc3NhZ2U6ICJEZWxldGUgYWxsIGNvbXBsZXRlZCB0YXNrcz8iLCBhY3Rpb246ICgpID0+IGFsZXJ0KCJDbGVhcmVkIGNvbXBsZXRlZCB0YXNrcyIpIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSk7CiAgICAgIGNvbnRleHQyLmFwcHVpLnNldENvbnRlbnRUYWJzKFsKICAgICAgICB7IGtleTogIkxpc3QiLCBpY29uTmFtZTogImx1Y2lkZTpsaXN0IiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiTGlzdCIpIH0sCiAgICAgICAgeyBrZXk6ICJDYWxlbmRhciIsIGljb25OYW1lOiAibHVjaWRlOmNhbGVuZGFyIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQ2FsZW5kYXIiKSB9CiAgICAgIF0pOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICA6aG9zdCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBjb2xvcjogI2EzYTNhMzsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWY7CiAgICAgICAgfQogICAgICAgIGgxIHsgY29sb3I6ICNmYWZhZmE7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMjRweDsgbWFyZ2luLWJvdHRvbTogMjRweDsgfQogICAgICAgIC50YXNrLWxpc3QgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgLnRhc2sgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDMpOwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICB9CiAgICAgICAgLmNoZWNrYm94IHsKICAgICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzUyNTI1MjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB9CiAgICAgICAgLnRhc2stdGV4dCB7IGNvbG9yOiAjZmFmYWZhOyBmbGV4OiAxOyB9CiAgICAgICAgLmR1ZS1kYXRlIHsgY29sb3I6ICM3MzczNzM7IGZvbnQtc2l6ZTogMTJweDsgfQogICAgICAgIC5wcmlvcml0eSB7CiAgICAgICAgICBwYWRkaW5nOiAycHggOHB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIH0KICAgICAgICAucHJpb3JpdHkuaGlnaCB7IGJhY2tncm91bmQ6ICM0NTBhMGE7IGNvbG9yOiAjZjg3MTcxOyB9CiAgICAgICAgLnByaW9yaXR5Lm1lZGl1bSB7IGJhY2tncm91bmQ6ICM0NTFhMDM7IGNvbG9yOiAjZmJiZjI0OyB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxoMT5UYXNrczwvaDE+CiAgICAgIDxkaXYgY2xhc3M9InRhc2stbGlzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0idGFzayI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveCI+PC9kaXY+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGFzay10ZXh0Ij5SZXZpZXcgcHVsbCByZXF1ZXN0ICM0Mjwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJkdWUtZGF0ZSI+VG9kYXk8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0icHJpb3JpdHkgaGlnaCI+SGlnaDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0YXNrIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94Ij48L2Rpdj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YXNrLXRleHQiPlVwZGF0ZSBkb2N1bWVudGF0aW9uPC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImR1ZS1kYXRlIj5Ub21vcnJvdzwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcmlvcml0eSBtZWRpdW0iPk1lZGl1bTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0YXNrIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94Ij48L2Rpdj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YXNrLXRleHQiPldyaXRlIHVuaXQgdGVzdHM8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iZHVlLWRhdGUiPkRlYyAyMDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9UYXNrc1ZpZXcyID0gX2NsYXNzVGhpczsKfSkoKTsKdmFyIGRlbW9GdW5jMjcgPSAoKSA9PiB7CiAgY29uc3QgYXBwQ29uZmlnID0gewogICAgYnJhbmRpbmc6IHsKICAgICAgbG9nb0ljb246ICJsdWNpZGU6Ym94IiwKICAgICAgbG9nb1RleHQ6ICJBY21lIEFwcCIKICAgIH0sCiAgICBhcHBCYXI6IHsKICAgICAgbWVudUl0ZW1zOiBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkZpbGUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgc3VibWVudTogWwogICAgICAgICAgICB7IG5hbWU6ICJOZXcgUHJvamVjdCIsIHNob3J0Y3V0OiAiQ21kK04iLCBpY29uTmFtZTogImZpbGVQbHVzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiTmV3IikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiT3Blbi4uLiIsIHNob3J0Y3V0OiAiQ21kK08iLCBpY29uTmFtZTogImZvbGRlck9wZW4iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiUmVjZW50IFByb2plY3RzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIH0sIHN1Ym1lbnU6IFsKICAgICAgICAgICAgICB7IG5hbWU6ICJteS1hcHAiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIG15LWFwcCIpIH0sCiAgICAgICAgICAgICAgeyBuYW1lOiAiY29tcG9uZW50LWxpYiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4gY29tcG9uZW50LWxpYiIpIH0KICAgICAgICAgICAgXSB9LAogICAgICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICAgICAgeyBuYW1lOiAiU2F2ZSBBbGwiLCBzaG9ydGN1dDogIkNtZCtTIiwgaWNvbk5hbWU6ICJzYXZlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2F2ZSIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJFZGl0IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIHN1Ym1lbnU6IFsKICAgICAgICAgICAgeyBuYW1lOiAiVW5kbyIsIHNob3J0Y3V0OiAiQ21kK1oiLCBpY29uTmFtZTogInVuZG8iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJVbmRvIikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiUmVkbyIsIHNob3J0Y3V0OiAiQ21kK1NoaWZ0K1oiLCBpY29uTmFtZTogInJlZG8iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJSZWRvIikgfSwKICAgICAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgICAgIHsgbmFtZTogIkN1dCIsIHNob3J0Y3V0OiAiQ21kK1giLCBpY29uTmFtZTogInNjaXNzb3JzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQ3V0IikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiQ29weSIsIHNob3J0Y3V0OiAiQ21kK0MiLCBpY29uTmFtZTogImNvcHkiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDb3B5IikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiUGFzdGUiLCBzaG9ydGN1dDogIkNtZCtWIiwgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJQYXN0ZSIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJWaWV3IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIHN1Ym1lbnU6IFsKICAgICAgICAgICAgeyBuYW1lOiAiVG9nZ2xlIFNpZGViYXIiLCBzaG9ydGN1dDogIkNtZCtCIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiVG9nZ2xlIHNpZGViYXIiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJUb2dnbGUgQWN0aXZpdHkgTG9nIiwgc2hvcnRjdXQ6ICJDbWQrU2hpZnQrQSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlRvZ2dsZSBhY3Rpdml0eSIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJIZWxwIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIHN1Ym1lbnU6IFsKICAgICAgICAgICAgeyBuYW1lOiAiRG9jdW1lbnRhdGlvbiIsIGljb25OYW1lOiAiYm9vayIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkRvY3MiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJLZXlib2FyZCBTaG9ydGN1dHMiLCBpY29uTmFtZTogImtleWJvYXJkIiwgc2hvcnRjdXQ6ICJDbWQrLyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNob3J0Y3V0cyIpIH0sCiAgICAgICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgICAgICB7IG5hbWU6ICJBYm91dCIsIGljb25OYW1lOiAiaW5mbyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkFib3V0IikgfQogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXSwKICAgICAgYnJlYWRjcnVtYnM6ICJEYXNoYm9hcmQiLAogICAgICBzaG93V2luZG93Q29udHJvbHM6IHRydWUsCiAgICAgIHNob3dTZWFyY2g6IHRydWUsCiAgICAgIHVzZXI6IHsKICAgICAgICBuYW1lOiAiSmFuZSBTbWl0aCIsCiAgICAgICAgZW1haWw6ICJqYW5lLnNtaXRoQGV4YW1wbGUuY29tIiwKICAgICAgICBzdGF0dXM6ICJvbmxpbmUiCiAgICAgIH0sCiAgICAgIHByb2ZpbGVNZW51SXRlbXM6IFsKICAgICAgICB7IG5hbWU6ICJQcm9maWxlIiwgaWNvbk5hbWU6ICJ1c2VyIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUHJvZmlsZSIpIH0sCiAgICAgICAgeyBuYW1lOiAiQWNjb3VudCBTZXR0aW5ncyIsIGljb25OYW1lOiAic2V0dGluZ3MiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTZXR0aW5ncyIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiSGVscCAmIFN1cHBvcnQiLCBpY29uTmFtZTogImhlbHBDaXJjbGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJIZWxwIikgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7IG5hbWU6ICJTaWduIE91dCIsIGljb25OYW1lOiAibG9nT3V0IiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2lnbiBvdXQiKSB9CiAgICAgIF0KICAgIH0sCiAgICB2aWV3czogWwogICAgICB7CiAgICAgICAgaWQ6ICJkYXNoYm9hcmQiLAogICAgICAgIG5hbWU6ICJEYXNoYm9hcmQiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmhvbWUiLAogICAgICAgIGNvbnRlbnQ6ICJkZW1vLWRhc2hib2FyZC12aWV3IiwKICAgICAgICByb3V0ZTogImRhc2hib2FyZCIKICAgICAgfSwKICAgICAgewogICAgICAgIGlkOiAicHJvamVjdHMiLAogICAgICAgIG5hbWU6ICJQcm9qZWN0cyIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyIiwKICAgICAgICBjb250ZW50OiAiZGVtby1wcm9qZWN0cy12aWV3IiwKICAgICAgICByb3V0ZTogInByb2plY3RzIiwKICAgICAgICBiYWRnZTogMwogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJ0YXNrcyIsCiAgICAgICAgbmFtZTogIlRhc2tzIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjaGVja1NxdWFyZSIsCiAgICAgICAgY29udGVudDogImRlbW8tdGFza3MtdmlldyIsCiAgICAgICAgcm91dGU6ICJ0YXNrcyIsCiAgICAgICAgYmFkZ2U6IDEyCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogInNldHRpbmdzIiwKICAgICAgICBuYW1lOiAiU2V0dGluZ3MiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOnNldHRpbmdzIiwKICAgICAgICBjb250ZW50OiAiZGVtby1zZXR0aW5ncy12aWV3IiwKICAgICAgICByb3V0ZTogInNldHRpbmdzLzpzZWN0aW9uPyIKICAgICAgfQogICAgXSwKICAgIG1haW5NZW51OiB7CiAgICAgIHNlY3Rpb25zOiBbCiAgICAgICAgeyBuYW1lOiAiTWFpbiIsIHZpZXdzOiBbImRhc2hib2FyZCJdIH0sCiAgICAgICAgeyBuYW1lOiAiV29ya3NwYWNlIiwgdmlld3M6IFsicHJvamVjdHMiLCAidGFza3MiXSB9CiAgICAgIF0sCiAgICAgIGJvdHRvbUl0ZW1zOiBbInNldHRpbmdzIl0KICAgIH0sCiAgICBkZWZhdWx0VmlldzogImRhc2hib2FyZCIsCiAgICBib3R0b21CYXI6IHsKICAgICAgdmlzaWJsZTogdHJ1ZSwKICAgICAgd2lkZ2V0czogWwogICAgICAgIHsKICAgICAgICAgIGlkOiAic3RhdHVzIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmFjdGl2aXR5IiwKICAgICAgICAgIGxhYmVsOiAiU3lzdGVtIE9ubGluZSIsCiAgICAgICAgICBzdGF0dXM6ICJzdWNjZXNzIiwKICAgICAgICAgIHRvb2x0aXA6ICJBbGwgc3lzdGVtcyBvcGVyYXRpb25hbCIsCiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBjb25zb2xlLmxvZygiU3RhdHVzIGNsaWNrZWQiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJub3RpZmljYXRpb25zIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmJlbGwiLAogICAgICAgICAgbGFiZWw6ICIzIG5vdGlmaWNhdGlvbnMiLAogICAgICAgICAgc3RhdHVzOiAid2FybmluZyIsCiAgICAgICAgICB0b29sdGlwOiAiWW91IGhhdmUgdW5yZWFkIG5vdGlmaWNhdGlvbnMiLAogICAgICAgICAgb25DbGljazogKCkgPT4gY29uc29sZS5sb2coIk5vdGlmaWNhdGlvbnMgY2xpY2tlZCIpCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogInZlcnNpb24iLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Z2l0QnJhbmNoIiwKICAgICAgICAgIGxhYmVsOiAidjEuMi4zIiwKICAgICAgICAgIHBvc2l0aW9uOiAicmlnaHQiLAogICAgICAgICAgdG9vbHRpcDogIkN1cnJlbnQgdmVyc2lvbiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIGFjdGlvbnM6IFsKICAgICAgICB7CiAgICAgICAgICBpZDogInRlcm1pbmFsIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnRlcm1pbmFsIiwKICAgICAgICAgIHRvb2x0aXA6ICJPcGVuIFRlcm1pbmFsIiwKICAgICAgICAgIHBvc2l0aW9uOiAicmlnaHQiLAogICAgICAgICAgb25DbGljazogKCkgPT4gY29uc29sZS5sb2coIlRlcm1pbmFsIGNsaWNrZWQiKQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIG9uVmlld0NoYW5nZTogKHZpZXdJZCwgdmlldykgPT4gewogICAgICBjb25zb2xlLmxvZyhgVmlldyBjaGFuZ2VkIHRvOiAke3ZpZXdJZH0gKCR7dmlldy5uYW1lfSlgKTsKICAgIH0sCiAgICBvblNlYXJjaDogKHF1ZXJ5KSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJTZWFyY2ggcXVlcnk6IiwgcXVlcnkpOwogICAgfQogIH07CiAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogIGNvbnRhaW5lckVsZW1lbnQuY2xhc3NOYW1lID0gImRlbW8tY29udGFpbmVyIjsKICBjb250YWluZXJFbGVtZW50LnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IjsKICBjb25zdCBhcHB1aUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWVzLWFwcHVpIik7CiAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZChhcHB1aUVsZW1lbnQpOwogIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4gewogICAgYXdhaXQgYXBwdWlFbGVtZW50LnVwZGF0ZUNvbXBsZXRlOwogICAgYXBwdWlFbGVtZW50LmNvbmZpZ3VyZShhcHBDb25maWcpOwogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGFwcHVpRWxlbWVudC5hY3Rpdml0eUxvZy5hZGRNYW55KFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAibG9naW4iLAogICAgICAgICAgdXNlcjogIkphbmUgU21pdGgiLAogICAgICAgICAgbWVzc2FnZTogImxvZ2dlZCBpbiBmcm9tIENocm9tZSBvbiBtYWNPUyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJjcmVhdGUiLAogICAgICAgICAgdXNlcjogIkphbmUgU21pdGgiLAogICAgICAgICAgbWVzc2FnZTogJ2NyZWF0ZWQgcHJvamVjdCAiRnJvbnRlbmQgQXBwIicKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJ1cGRhdGUiLAogICAgICAgICAgdXNlcjogIkpvaG4gRG9lIiwKICAgICAgICAgIG1lc3NhZ2U6ICJ1cGRhdGVkIEFQSSBkb2N1bWVudGF0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogInZpZXciLAogICAgICAgICAgdXNlcjogIkphbmUgU21pdGgiLAogICAgICAgICAgbWVzc2FnZTogInZpZXdlZCBkYXNoYm9hcmQgYW5hbHl0aWNzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImRlbGV0ZSIsCiAgICAgICAgICB1c2VyOiAiQWRtaW4iLAogICAgICAgICAgbWVzc2FnZTogInJlbW92ZWQgZGVwcmVjYXRlZCBlbmRwb2ludCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJjdXN0b20iLAogICAgICAgICAgdXNlcjogIlN5c3RlbSIsCiAgICAgICAgICBtZXNzYWdlOiAic2NoZWR1bGVkIGJhY2t1cCBjb21wbGV0ZWQiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZGF0YWJhc2UiCiAgICAgICAgfQogICAgICBdKTsKICAgIH0sIDUwMCk7CiAgICBhcHB1aUVsZW1lbnQudmlld0NoYW5nZWQkLnN1YnNjcmliZSgoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coIlZpZXcgY2hhbmdlZCBldmVudDoiLCBldmVudCk7CiAgICAgIGFwcHVpRWxlbWVudC5zZXRCcmVhZGNydW1icyhldmVudC52aWV3Lm5hbWUpOwogICAgfSk7CiAgICBhcHB1aUVsZW1lbnQudmlld0xpZmVjeWNsZSQuc3Vic2NyaWJlKChldmVudCkgPT4gewogICAgICBjb25zb2xlLmxvZygiTGlmZWN5Y2xlIGV2ZW50OiIsIGV2ZW50LnR5cGUsIGV2ZW50LnZpZXdJZCk7CiAgICB9KTsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBhcHB1aUVsZW1lbnQuc2V0TWFpbk1lbnVCYWRnZSgidGFza3MiLCAxNSk7CiAgICAgIGFwcHVpRWxlbWVudC5hY3Rpdml0eUxvZy5hZGQoewogICAgICAgIHR5cGU6ICJ1cGRhdGUiLAogICAgICAgIHVzZXI6ICJTeXN0ZW0iLAogICAgICAgIG1lc3NhZ2U6ICJuZXcgdGFza3MgYWRkZWQiCiAgICAgIH0pOwogICAgfSwgNWUzKTsKICB9LCAwKTsKICByZXR1cm4gYjJgCiAgICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgICAgJHtjb250YWluZXJFbGVtZW50fQogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS92aWV3LnJlZ2lzdHJ5LmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBWaWV3UmVnaXN0cnkgPSBjbGFzcyB7CiAgdmlld3MgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIGluc3RhbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY3VycmVudFZpZXdJZCA9IG51bGw7CiAgYXBwdWkgPSBudWxsOwogIC8qKgogICAqIFNldCB0aGUgYXBwdWkgcmVmZXJlbmNlIGZvciB2aWV3IGFjdGl2YXRpb24gY29udGV4dAogICAqLwogIHNldEFwcHVpUmVmKGFwcHVpKSB7CiAgICB0aGlzLmFwcHVpID0gYXBwdWk7CiAgfQogIC8qKgogICAqIFJlZ2lzdGVyIGEgc2luZ2xlIHZpZXcKICAgKi8KICByZWdpc3Rlcih2aWV3KSB7CiAgICBpZiAodGhpcy52aWV3cy5oYXModmlldy5pZCkpIHsKICAgICAgY29uc29sZS53YXJuKGBWaWV3IHdpdGggaWQgIiR7dmlldy5pZH0iIGFscmVhZHkgcmVnaXN0ZXJlZC4gT3ZlcndyaXRpbmcuYCk7CiAgICB9CiAgICB0aGlzLnZpZXdzLnNldCh2aWV3LmlkLCB2aWV3KTsKICB9CiAgLyoqCiAgICogUmVnaXN0ZXIgbXVsdGlwbGUgdmlld3MKICAgKi8KICByZWdpc3RlckFsbCh2aWV3cykgewogICAgdmlld3MuZm9yRWFjaCgodmlldykgPT4gdGhpcy5yZWdpc3Rlcih2aWV3KSk7CiAgfQogIC8qKgogICAqIEdldCBhIHZpZXcgZGVmaW5pdGlvbiBieSBJRAogICAqLwogIGdldCh2aWV3SWQpIHsKICAgIHJldHVybiB0aGlzLnZpZXdzLmdldCh2aWV3SWQpOwogIH0KICAvKioKICAgKiBHZXQgYWxsIHJlZ2lzdGVyZWQgdmlldyBJRHMKICAgKi8KICBnZXRWaWV3SWRzKCkgewogICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy52aWV3cy5rZXlzKCkpOwogIH0KICAvKioKICAgKiBHZXQgYWxsIHZpZXdzCiAgICovCiAgZ2V0QWxsKCkgewogICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy52aWV3cy52YWx1ZXMoKSk7CiAgfQogIC8qKgogICAqIEdldCByb3V0ZSBmb3IgYSB2aWV3CiAgICovCiAgZ2V0Um91dGUodmlld0lkKSB7CiAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3cy5nZXQodmlld0lkKTsKICAgIHJldHVybiB2aWV3Py5yb3V0ZSB8fCB2aWV3Py5pZCB8fCAiIjsKICB9CiAgLyoqCiAgICogRmluZCB2aWV3IGJ5IHJvdXRlIChzdXBwb3J0cyBwYXJhbWV0ZXJpemVkIHJvdXRlcyBsaWtlICdzZXR0aW5ncy86c2VjdGlvbicpCiAgICovCiAgZmluZEJ5Um91dGUocm91dGUpIHsKICAgIGZvciAoY29uc3QgdmlldyBvZiB0aGlzLnZpZXdzLnZhbHVlcygpKSB7CiAgICAgIGNvbnN0IHZpZXdSb3V0ZSA9IHZpZXcucm91dGUgfHwgdmlldy5pZDsKICAgICAgY29uc3QgcGFyYW1zMiA9IHRoaXMubWF0Y2hSb3V0ZSh2aWV3Um91dGUsIHJvdXRlKTsKICAgICAgaWYgKHBhcmFtczIgIT09IG51bGwpIHsKICAgICAgICByZXR1cm4geyB2aWV3LCBwYXJhbXM6IHBhcmFtczIgfTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHZvaWQgMDsKICB9CiAgLyoqCiAgICogTWF0Y2ggYSByb3V0ZSBwYXR0ZXJuIGFnYWluc3QgYW4gYWN0dWFsIHJvdXRlCiAgICogUmV0dXJucyBwYXJhbXMgaWYgbWF0Y2hlZCwgbnVsbCBvdGhlcndpc2UKICAgKi8KICBtYXRjaFJvdXRlKHBhdHRlcm4sIHJvdXRlKSB7CiAgICBjb25zdCBwYXR0ZXJuUGFydHMgPSBwYXR0ZXJuLnNwbGl0KCIvIik7CiAgICBjb25zdCByb3V0ZVBhcnRzID0gcm91dGUuc3BsaXQoIi8iKTsKICAgIGNvbnN0IGhhc09wdGlvbmFsUGFyYW0gPSBwYXR0ZXJuUGFydHMubGVuZ3RoID4gMCAmJiBwYXR0ZXJuUGFydHNbcGF0dGVyblBhcnRzLmxlbmd0aCAtIDFdLmVuZHNXaXRoKCI/Iik7CiAgICBpZiAoaGFzT3B0aW9uYWxQYXJhbSkgewogICAgICBpZiAocm91dGVQYXJ0cy5sZW5ndGggPCBwYXR0ZXJuUGFydHMubGVuZ3RoIC0gMSB8fCByb3V0ZVBhcnRzLmxlbmd0aCA+IHBhdHRlcm5QYXJ0cy5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfSBlbHNlIGlmIChwYXR0ZXJuUGFydHMubGVuZ3RoICE9PSByb3V0ZVBhcnRzLmxlbmd0aCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHBhcmFtczIgPSB7fTsKICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHBhdHRlcm5QYXJ0cy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGxldCBwYXJ0ID0gcGF0dGVyblBhcnRzW2kxMV07CiAgICAgIGNvbnN0IGlzT3B0aW9uYWwgPSBwYXJ0LmVuZHNXaXRoKCI/Iik7CiAgICAgIGlmIChpc09wdGlvbmFsKSB7CiAgICAgICAgcGFydCA9IHBhcnQuc2xpY2UoMCwgLTEpOwogICAgICB9CiAgICAgIGlmIChwYXJ0LnN0YXJ0c1dpdGgoIjoiKSkgewogICAgICAgIGNvbnN0IHBhcmFtTmFtZSA9IHBhcnQuc2xpY2UoMSk7CiAgICAgICAgaWYgKHJvdXRlUGFydHNbaTExXSAhPT0gdm9pZCAwKSB7CiAgICAgICAgICBwYXJhbXMyW3BhcmFtTmFtZV0gPSByb3V0ZVBhcnRzW2kxMV07CiAgICAgICAgfSBlbHNlIGlmICghaXNPcHRpb25hbCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHJvdXRlUGFydHNbaTExXSAhPT0gcGFydCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcGFyYW1zMjsKICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgbmF2aWdhdGlvbiBhd2F5IGZyb20gY3VycmVudCB2aWV3IGlzIGFsbG93ZWQKICAgKi8KICBhc3luYyBjYW5MZWF2ZUN1cnJlbnRWaWV3KCkgewogICAgaWYgKCF0aGlzLmN1cnJlbnRWaWV3SWQpCiAgICAgIHJldHVybiB0cnVlOwogICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlcy5nZXQodGhpcy5jdXJyZW50Vmlld0lkKTsKICAgIGlmICghaW5zdGFuY2UpCiAgICAgIHJldHVybiB0cnVlOwogICAgY29uc3QgbGlmZWN5Y2xlID0gaW5zdGFuY2U7CiAgICBpZiAodHlwZW9mIGxpZmVjeWNsZS5jYW5EZWFjdGl2YXRlID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIHJldHVybiBhd2FpdCBsaWZlY3ljbGUuY2FuRGVhY3RpdmF0ZSgpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQogIC8qKgogICAqIEFjdGl2YXRlIGEgdmlldyAtIGhhbmRsZXMgY2FjaGluZywgbGlmZWN5Y2xlLCBhbmQgcmVuZGVyaW5nCiAgICovCiAgYXN5bmMgYWN0aXZhdGVWaWV3KHZpZXdJZCwgY29udGFpbmVyLCBwYXJhbXMyKSB7CiAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3cy5nZXQodmlld0lkKTsKICAgIGlmICghdmlldykgewogICAgICBjb25zb2xlLmVycm9yKGBWaWV3ICIke3ZpZXdJZH0iIG5vdCBmb3VuZCBpbiByZWdpc3RyeWApOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHNob3VsZENhY2hlID0gdmlldy5jYWNoZSAhPT0gZmFsc2U7CiAgICBpZiAodGhpcy5jdXJyZW50Vmlld0lkICYmIHRoaXMuY3VycmVudFZpZXdJZCAhPT0gdmlld0lkKSB7CiAgICAgIGF3YWl0IHRoaXMuZGVhY3RpdmF0ZVZpZXcodGhpcy5jdXJyZW50Vmlld0lkKTsKICAgIH0KICAgIGxldCBlbGVtZW50NCA9IHNob3VsZENhY2hlID8gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCkgOiB2b2lkIDA7CiAgICBpZiAoZWxlbWVudDQpIHsKICAgICAgZWxlbWVudDQuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgfSBlbHNlIHsKICAgICAgZWxlbWVudDQgPSBhd2FpdCB0aGlzLmNyZWF0ZVZpZXdFbGVtZW50KHZpZXcpOwogICAgICBpZiAoIWVsZW1lbnQ0KSB7CiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBlbGVtZW50IGZvciB2aWV3ICIke3ZpZXdJZH0iYCk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQ0KTsKICAgICAgaWYgKHNob3VsZENhY2hlKSB7CiAgICAgICAgdGhpcy5pbnN0YW5jZXMuc2V0KHZpZXdJZCwgZWxlbWVudDQpOwogICAgICB9CiAgICB9CiAgICB0aGlzLmN1cnJlbnRWaWV3SWQgPSB2aWV3SWQ7CiAgICBhd2FpdCB0aGlzLmNhbGxPbkFjdGl2YXRlKGVsZW1lbnQ0LCB2aWV3SWQsIHBhcmFtczIpOwogICAgcmV0dXJuIGVsZW1lbnQ0OwogIH0KICAvKioKICAgKiBEZWFjdGl2YXRlIGEgdmlldyAoaGlkZSBhbmQgY2FsbCBsaWZlY3ljbGUgaG9vaykKICAgKi8KICBhc3luYyBkZWFjdGl2YXRlVmlldyh2aWV3SWQpIHsKICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCk7CiAgICBpZiAoIWluc3RhbmNlKQogICAgICByZXR1cm47CiAgICBjb25zdCBsaWZlY3ljbGUgPSBpbnN0YW5jZTsKICAgIGlmICh0eXBlb2YgbGlmZWN5Y2xlLm9uRGVhY3RpdmF0ZSA9PT0gImZ1bmN0aW9uIikgewogICAgICBhd2FpdCBsaWZlY3ljbGUub25EZWFjdGl2YXRlKCk7CiAgICB9CiAgICBpbnN0YW5jZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogIH0KICAvKioKICAgKiBDcmVhdGUgYSB2aWV3IGVsZW1lbnQgZnJvbSBpdHMgZGVmaW5pdGlvbiAoc3VwcG9ydHMgYXN5bmMgY29udGVudCkKICAgKi8KICBhc3luYyBjcmVhdGVWaWV3RWxlbWVudCh2aWV3KSB7CiAgICBsZXQgY29udGVudDMgPSB2aWV3LmNvbnRlbnQ7CiAgICBpZiAodHlwZW9mIGNvbnRlbnQzID09PSAiZnVuY3Rpb24iICYmICEoY29udGVudDMucHJvdG90eXBlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpICYmIGNvbnRlbnQzLmNvbnN0cnVjdG9yLm5hbWUgPT09ICJBc3luY0Z1bmN0aW9uIikgewogICAgICB0cnkgewogICAgICAgIGNvbnRlbnQzID0gYXdhaXQgY29udGVudDMoKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbG9hZCBhc3luYyBjb250ZW50IGZvciB2aWV3ICIke3ZpZXcuaWR9IjpgLCBlcnJvcik7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIGxldCBlbGVtZW50NDsKICAgIGlmICh0eXBlb2YgY29udGVudDMgPT09ICJzdHJpbmciKSB7CiAgICAgIGVsZW1lbnQ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjb250ZW50Myk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZW50MyA9PT0gImZ1bmN0aW9uIikgewogICAgICBpZiAoY29udGVudDMucHJvdG90eXBlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHsKICAgICAgICBlbGVtZW50NCA9IG5ldyBjb250ZW50MygpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9ICJ2aWV3LWNvbnRlbnQtd3JhcHBlciI7CiAgICAgICAgd3JhcHBlci5zdHlsZS5jc3NUZXh0ID0gImRpc3BsYXk6IGNvbnRlbnRzOyI7CiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBjb250ZW50MygpOwogICAgICAgIEQodGVtcGxhdGUsIHdyYXBwZXIpOwogICAgICAgIGVsZW1lbnQ0ID0gd3JhcHBlcjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBjb250ZW50IHR5cGUgZm9yIHZpZXcgIiR7dmlldy5pZH0iYCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgZWxlbWVudDQuZGF0YXNldC52aWV3SWQgPSB2aWV3LmlkOwogICAgcmV0dXJuIGVsZW1lbnQ0OwogIH0KICAvKioKICAgKiBDYWxsIG9uQWN0aXZhdGUgbGlmZWN5Y2xlIGhvb2sgb24gYSB2aWV3IGVsZW1lbnQKICAgKi8KICBhc3luYyBjYWxsT25BY3RpdmF0ZShlbGVtZW50NCwgdmlld0lkLCBwYXJhbXMyKSB7CiAgICBjb25zdCBsaWZlY3ljbGUgPSBlbGVtZW50NDsKICAgIGlmICh0eXBlb2YgbGlmZWN5Y2xlLm9uQWN0aXZhdGUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgY29uc3QgY29udGV4dDIgPSB7CiAgICAgICAgYXBwdWk6IHRoaXMuYXBwdWksCiAgICAgICAgdmlld0lkLAogICAgICAgIHBhcmFtczogcGFyYW1zMgogICAgICB9OwogICAgICBhd2FpdCBsaWZlY3ljbGUub25BY3RpdmF0ZShjb250ZXh0Mik7CiAgICB9CiAgfQogIC8qKgogICAqIExlZ2FjeSBtZXRob2QgLSByZW5kZXJzIHZpZXcgd2l0aG91dCBjYWNoaW5nCiAgICogQGRlcHJlY2F0ZWQgVXNlIGFjdGl2YXRlVmlldyBpbnN0ZWFkCiAgICovCiAgcmVuZGVyVmlldyh2aWV3SWQsIGNvbnRhaW5lcikgewogICAgY29uc3QgdmlldyA9IHRoaXMudmlld3MuZ2V0KHZpZXdJZCk7CiAgICBpZiAoIXZpZXcpIHsKICAgICAgY29uc29sZS5lcnJvcihgVmlldyAiJHt2aWV3SWR9IiBub3QgZm91bmQgaW4gcmVnaXN0cnlgKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gIiI7CiAgICBsZXQgZWxlbWVudDQ7CiAgICBjb25zdCBjb250ZW50MyA9IHZpZXcuY29udGVudDsKICAgIGlmICh0eXBlb2YgY29udGVudDMgPT09ICJzdHJpbmciKSB7CiAgICAgIGVsZW1lbnQ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjb250ZW50Myk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZW50MyA9PT0gImZ1bmN0aW9uIikgewogICAgICBpZiAoY29udGVudDMucHJvdG90eXBlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHsKICAgICAgICBlbGVtZW50NCA9IG5ldyBjb250ZW50MygpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9ICJ2aWV3LWNvbnRlbnQtd3JhcHBlciI7CiAgICAgICAgd3JhcHBlci5zdHlsZS5jc3NUZXh0ID0gImRpc3BsYXk6IGNvbnRlbnRzOyI7CiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBjb250ZW50MygpOwogICAgICAgIEQodGVtcGxhdGUsIHdyYXBwZXIpOwogICAgICAgIGVsZW1lbnQ0ID0gd3JhcHBlcjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBjb250ZW50IHR5cGUgZm9yIHZpZXcgIiR7dmlld0lkfSJgKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudDQpOwogICAgdGhpcy5pbnN0YW5jZXMuc2V0KHZpZXdJZCwgZWxlbWVudDQpOwogICAgdGhpcy5jdXJyZW50Vmlld0lkID0gdmlld0lkOwogICAgcmV0dXJuIGVsZW1lbnQ0OwogIH0KICAvKioKICAgKiBHZXQgY3VycmVudGx5IGFjdGl2ZSB2aWV3IElECiAgICovCiAgZ2V0Q3VycmVudFZpZXdJZCgpIHsKICAgIHJldHVybiB0aGlzLmN1cnJlbnRWaWV3SWQ7CiAgfQogIC8qKgogICAqIEdldCBjYWNoZWQgaW5zdGFuY2Ugb2YgYSB2aWV3CiAgICovCiAgZ2V0SW5zdGFuY2Uodmlld0lkKSB7CiAgICByZXR1cm4gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCk7CiAgfQogIC8qKgogICAqIENsZWFyIGEgc3BlY2lmaWMgY2FjaGVkIGluc3RhbmNlCiAgICovCiAgY2xlYXJJbnN0YW5jZSh2aWV3SWQpIHsKICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCk7CiAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UucGFyZW50Tm9kZSkgewogICAgICBpbnN0YW5jZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGluc3RhbmNlKTsKICAgIH0KICAgIHRoaXMuaW5zdGFuY2VzLmRlbGV0ZSh2aWV3SWQpOwogICAgaWYgKHRoaXMuY3VycmVudFZpZXdJZCA9PT0gdmlld0lkKSB7CiAgICAgIHRoaXMuY3VycmVudFZpZXdJZCA9IG51bGw7CiAgICB9CiAgfQogIC8qKgogICAqIENsZWFyIGFsbCBpbnN0YW5jZXMKICAgKi8KICBjbGVhckluc3RhbmNlcygpIHsKICAgIGZvciAoY29uc3QgW3ZpZXdJZCwgaW5zdGFuY2VdIG9mIHRoaXMuaW5zdGFuY2VzKSB7CiAgICAgIGlmIChpbnN0YW5jZS5wYXJlbnROb2RlKSB7CiAgICAgICAgaW5zdGFuY2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpbnN0YW5jZSk7CiAgICAgIH0KICAgIH0KICAgIHRoaXMuaW5zdGFuY2VzLmNsZWFyKCk7CiAgICB0aGlzLmN1cnJlbnRWaWV3SWQgPSBudWxsOwogIH0KICAvKioKICAgKiBVbnJlZ2lzdGVyIGEgdmlldwogICAqLwogIHVucmVnaXN0ZXIodmlld0lkKSB7CiAgICB0aGlzLmNsZWFySW5zdGFuY2Uodmlld0lkKTsKICAgIHJldHVybiB0aGlzLnZpZXdzLmRlbGV0ZSh2aWV3SWQpOwogIH0KICAvKioKICAgKiBDbGVhciB0aGUgcmVnaXN0cnkKICAgKi8KICBjbGVhcigpIHsKICAgIHRoaXMudmlld3MuY2xlYXIoKTsKICAgIHRoaXMuY2xlYXJJbnN0YW5jZXMoKTsKICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgYSB2aWV3IGlzIHJlZ2lzdGVyZWQKICAgKi8KICBoYXModmlld0lkKSB7CiAgICByZXR1cm4gdGhpcy52aWV3cy5oYXModmlld0lkKTsKICB9CiAgLyoqCiAgICogR2V0IHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJlZCB2aWV3cwogICAqLwogIGdldCBzaXplKCkgewogICAgcmV0dXJuIHRoaXMudmlld3Muc2l6ZTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1tYWlubWVudS9kZWVzLWFwcHVpLW1haW5tZW51LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMjggPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAuZGVtby1tYWlubWVudS1jb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGJhY2tncm91bmQ6ICMxYTFhMWE7CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIH0KICAgIC5kZW1vLW1haW5tZW51LWNvbnRhaW5lciAuc3BhY2VyIHsKICAgICAgZmxleDogMTsKICAgICAgYmFja2dyb3VuZDogIzBmMGYwZjsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tbWFpbm1lbnUtY29udGFpbmVyIj4KICAgIDxkZWVzLWFwcHVpLW1haW5tZW51CiAgICAgIC5sb2dvSWNvbj0keyJsdWNpZGU6Ym94In0KICAgICAgLmxvZ29UZXh0PSR7IkFjbWUgQXBwIn0KICAgICAgLm1lbnVHcm91cHM9JHtbCiAgewogICAgdGFiczogWwogICAgICB7IGtleTogIkRhc2hib2FyZCIsIGljb25OYW1lOiAibHVjaWRlOmhvbWUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJEYXNoYm9hcmQiKSB9LAogICAgICB7IGtleTogIkluYm94IiwgaWNvbk5hbWU6ICJsdWNpZGU6aW5ib3giLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJJbmJveCIpIH0KICAgIF0KICB9LAogIHsKICAgIG5hbWU6ICJXb3Jrc3BhY2UiLAogICAgdGFiczogWwogICAgICB7IGtleTogIlByb2plY3RzIiwgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUHJvamVjdHMiKSB9LAogICAgICB7IGtleTogIlRhc2tzIiwgaWNvbk5hbWU6ICJsdWNpZGU6Y2hlY2tTcXVhcmUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJUYXNrcyIpIH0sCiAgICAgIHsga2V5OiAiRG9jdW1lbnRzIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVRleHQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJEb2N1bWVudHMiKSB9CiAgICBdCiAgfSwKICB7CiAgICBuYW1lOiAiQW5hbHl0aWNzIiwKICAgIHRhYnM6IFsKICAgICAgeyBrZXk6ICJSZXBvcnRzIiwgaWNvbk5hbWU6ICJsdWNpZGU6YmFyQ2hhcnQzIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUmVwb3J0cyIpIH0sCiAgICAgIHsga2V5OiAiSW5zaWdodHMiLCBpY29uTmFtZTogImx1Y2lkZTpsaWdodGJ1bGIiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJJbnNpZ2h0cyIpIH0KICAgIF0KICB9Cl19CiAgICAgIC5ib3R0b21UYWJzPSR7WwogIHsga2V5OiAiU2V0dGluZ3MiLCBpY29uTmFtZTogImx1Y2lkZTpzZXR0aW5ncyIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlNldHRpbmdzIikgfSwKICB7IGtleTogIkhlbHAiLCBpY29uTmFtZTogImx1Y2lkZTpoZWxwQ2lyY2xlIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiSGVscCIpIH0KXX0KICAgID48L2RlZXMtYXBwdWktbWFpbm1lbnU+CiAgICA8ZGl2IGNsYXNzPSJzcGFjZXIiPjwvZGl2PgogIDwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktbWFpbm1lbnUvZGVlcy1hcHB1aS1tYWlubWVudS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUzNyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMzggPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aU1haW5tZW51ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hcHB1aS1tYWlubWVudSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2xvZ29JY29uX2RlY29yYXRvcnM7CiAgbGV0IF9sb2dvSWNvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xvZ29JY29uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sb2dvVGV4dF9kZWNvcmF0b3JzOwogIGxldCBfbG9nb1RleHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sb2dvVGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVudUdyb3Vwc19kZWNvcmF0b3JzOwogIGxldCBfbWVudUdyb3Vwc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JvdHRvbVRhYnNfZGVjb3JhdG9yczsKICBsZXQgX2JvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib3R0b21UYWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJzX2RlY29yYXRvcnM7CiAgbGV0IF90YWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGFic19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUYWJfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbGxhcHNlZF9kZWNvcmF0b3JzOwogIGxldCBfY29sbGFwc2VkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNBcHB1aU1haW5tZW51MiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2xvZ29JY29uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbG9nb1RleHRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tZW51R3JvdXBzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9ib3R0b21UYWJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfY29sbGFwc2VkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMzcodGhpcywgbnVsbCwgX2xvZ29JY29uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxvZ29JY29uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsb2dvSWNvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sb2dvSWNvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubG9nb0ljb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbG9nb0ljb25faW5pdGlhbGl6ZXJzLCBfbG9nb0ljb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNyh0aGlzLCBudWxsLCBfbG9nb1RleHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibG9nb1RleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxvZ29UZXh0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxvZ29UZXh0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sb2dvVGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sb2dvVGV4dF9pbml0aWFsaXplcnMsIF9sb2dvVGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM3KHRoaXMsIG51bGwsIF9tZW51R3JvdXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1lbnVHcm91cHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVHcm91cHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVudUdyb3Vwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWVudUdyb3VwcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51R3JvdXBzX2luaXRpYWxpemVycywgX21lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNyh0aGlzLCBudWxsLCBfYm90dG9tVGFic19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJib3R0b21UYWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJib3R0b21UYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJvdHRvbVRhYnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJvdHRvbVRhYnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYm90dG9tVGFic19pbml0aWFsaXplcnMsIF9ib3R0b21UYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzcodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM3KHRoaXMsIG51bGwsIF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFRhYiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRUYWIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRUYWIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVGFiID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzcodGhpcywgbnVsbCwgX2NvbGxhcHNlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2xsYXBzZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb2xsYXBzZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbGxhcHNlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQXBwdWlNYWlubWVudTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI4OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI2xvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9sb2dvSWNvbl9pbml0aWFsaXplcnMsICIiKTsKICAgIC8vIElOU1RBTkNFCiAgICAvLyBMb2dvIHByb3BlcnRpZXMKICAgIGdldCBsb2dvSWNvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbG9nb0ljb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2xvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbG9nb1RleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9sb2dvSWNvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2xvZ29UZXh0X2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBsb2dvVGV4dCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbG9nb1RleHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2xvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWVudUdyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2xvZ29UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOCh0aGlzLCBfbWVudUdyb3Vwc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAvLyBNZW51IGdyb3VwcyAobmV3IHdheSkKICAgIGdldCBtZW51R3JvdXBzKCkgewogICAgICByZXR1cm4gdGhpcy4jbWVudUdyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1lbnVHcm91cHModmFsdWUyKSB7CiAgICAgIHRoaXMuI21lbnVHcm91cHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNib3R0b21UYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzOCh0aGlzLCBfbWVudUdyb3Vwc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2JvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgLy8gQm90dG9tIHRhYnMgKHBpbm5lZCB0byBib3R0b20pCiAgICBnZXQgYm90dG9tVGFicygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2JvdHRvbVRhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBib3R0b21UYWJzKHZhbHVlMikgewogICAgICB0aGlzLiNib3R0b21UYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2JvdHRvbVRhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF90YWJzX2luaXRpYWxpemVycywgW10pKTsKICAgIC8vIExlZ2FjeSB0YWJzIHByb3BlcnR5IChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkKICAgIGdldCB0YWJzKCkgewogICAgICByZXR1cm4gdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhYnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZFRhYl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9zZWxlY3RlZFRhYl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHNlbGVjdGVkVGFiKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZFRhYih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9zZWxlY3RlZFRhYl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2NvbGxhcHNlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgY29sbGFwc2VkKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sbGFwc2VkKHZhbHVlMikgewogICAgICB0aGlzLiNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1tZW51LXdpZHRoLWV4cGFuZGVkOiAyMDBweDsKICAgICAgICAtLW1lbnUtd2lkdGgtY29sbGFwc2VkOiA1NnB4OwogICAgICAgIC0tdG9vbHRpcC1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxODE4MWIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICAtLXRvb2x0aXAtZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMxODE4MWIiKX07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLm1haW5Db250YWluZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NiIsICIjY2NjIil9OwogICAgICAgIHotaW5kZXg6ICR7ekluZGV4TGF5ZXJzLmZpeGVkLmFwcEJhcn07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogdmFyKC0tbWVudS13aWR0aC1leHBhbmRlZCk7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU1ZTUiLCAiIzFhMWExYSIpfTsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHNhbnMtc2VyaWY7CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC4yNXMgZWFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tYWluQ29udGFpbmVyIHsKICAgICAgICB3aWR0aDogdmFyKC0tbWVudS13aWR0aC1jb2xsYXBzZWQpOwogICAgICB9CgogICAgICAvKiBGbG9hdGluZyBjb2xsYXBzZSB0b2dnbGUgYnV0dG9uICovCiAgICAgIC5jb2xsYXBzZS10b2dnbGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogLTEycHg7CiAgICAgICAgdG9wOiAyNHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU1ZTUiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzM3MzczIiwgIiNhMWExYWEiKX07CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzZS10b2dnbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMzZjNmNDYiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGEwYTBhIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KDpob3ZlcikgLmNvbGxhcHNlLXRvZ2dsZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbGxhcHNlLXRvZ2dsZSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgLyogTG9nbyBTZWN0aW9uICovCiAgICAgIC5sb2dvU2VjdGlvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTBweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgcGFkZGluZzogMCAxNHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTVlNSIsICIjMWExYTFhIil9OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5sb2dvU2VjdGlvbiAubG9nb0ljb24gewogICAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmxvZ29TZWN0aW9uIC5sb2dvVGV4dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIHdpZHRoIDAuMjVzIGVhc2U7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubG9nb1NlY3Rpb24gewogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZ2FwOiAwOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmxvZ29TZWN0aW9uIC5sb2dvVGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogTWlkZGxlIFNlY3Rpb24gKHNjcm9sbGFibGUpICovCiAgICAgIC5tZW51U2VjdGlvbiB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xNSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMjUpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkiKX07CiAgICAgIH0KCiAgICAgIC8qIE1lbnUgR3JvdXAgKi8KICAgICAgLm1lbnVHcm91cCB7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICB9CgogICAgICAubWVudUdyb3VwOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlciB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHggNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzczNzM3MyIsICIjNzM3MzczIil9OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgbWF4LWhlaWdodCAwLjI1cyBlYXNlOwogICAgICAgIG1heC1oZWlnaHQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuZ3JvdXBIZWFkZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgbWF4LWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLmdyb3VwVGFicyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMnB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVHcm91cCB7CiAgICAgICAgcGFkZGluZzogMCA0cHg7CiAgICAgIH0KCiAgICAgIC8qIFRhYiBJdGVtICovCiAgICAgIC50YWIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzUyNTI1MiIsICIjYTNhM2EzIil9OwogICAgICB9CgogICAgICAudGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA0KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzI2MjYyNiIsICIjZTVlNWU1Iil9OwogICAgICB9CgogICAgICAudGFiOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgfQoKICAgICAgLnRhYi5zZWxlY3RlZFRhYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLnRhYi5zZWxlY3RlZFRhYjo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgd2lkdGg6IDNweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAwIDJweCAycHggMDsKICAgICAgfQoKICAgICAgLnRhYiBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBvcGFjaXR5OiAwLjg1OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAudGFiLnNlbGVjdGVkVGFiIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRhYiAudGFiTGFiZWwgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCB3aWR0aCAwLjI1cyBlYXNlOwogICAgICB9CgogICAgICAvKiBDb2xsYXBzZWQgdGFiIHN0eWxlcyAqLwogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLnRhYiB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICBnYXA6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAudGFiIC50YWJMYWJlbCB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAudGFiLnNlbGVjdGVkVGFiOjpiZWZvcmUgewogICAgICAgIGxlZnQ6IC00cHg7CiAgICAgIH0KCiAgICAgIC8qIFRvb2x0aXAgZm9yIGNvbGxhcHNlZCBzdGF0ZSAqLwogICAgICAudGFiLXRvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAxMDAlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBtYXJnaW4tbGVmdDogMTJweDsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10b29sdGlwLWJnKTsKICAgICAgICBjb2xvcjogdmFyKC0tdG9vbHRpcC1mZyk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2U7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgICAgfQoKICAgICAgLnRhYi10b29sdGlwOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtNHB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLXRvb2x0aXAtYmcpOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLnRhYjpob3ZlciAudGFiLXRvb2x0aXAgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogMXM7CiAgICAgIH0KCiAgICAgIC8qIEJhZGdlIHN0eWxlcyAqLwogICAgICAuYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbWluLXdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBwYWRkaW5nOiAwIDZweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgIH0KCiAgICAgIC5iYWRnZS5kZWZhdWx0IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjMjcyNzJhIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNmM2Y0NiIsICIjYTFhMWFhIil9OwogICAgICB9CgogICAgICAuYmFkZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkY2ZjZTciLCAiIzE0NTMyZCIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxNjY1MzQiLCAiIzRhZGU4MCIpfTsKICAgICAgfQoKICAgICAgLmJhZGdlLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmVmM2M3IiwgIiM0NTFhMDMiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTI0MDBlIiwgIiNmYmJmMjQiKX07CiAgICAgIH0KCiAgICAgIC5iYWRnZS5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZWUyZTIiLCAiIzQ1MGEwYSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5OTFiMWIiLCAiI2Y4NzE3MSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5iYWRnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogQm90dG9tIFNlY3Rpb24gKi8KICAgICAgLmJvdHRvbVNlY3Rpb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU1ZTUiLCAiIzFhMWExYSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuYm90dG9tU2VjdGlvbiB7CiAgICAgICAgcGFkZGluZzogOHB4IDRweDsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuZ2V0QWxsVGFicygpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im1haW5Db250YWluZXIiIEBjb250ZXh0bWVudT0keyhldmVudEFyZykgPT4gewogICAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudEFyZywgW3sKICAgICAgICAgIG5hbWU6ICJhcHAgc2V0dGluZ3MiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgaWNvbk5hbWU6ICJnZWFyIgogICAgICAgIH1dKTsKICAgICAgfX0+CiAgICAgICAgJHt0aGlzLmxvZ29JY29uIHx8IHRoaXMubG9nb1RleHQgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ29TZWN0aW9uIj4KICAgICAgICAgICAgJHt0aGlzLmxvZ29JY29uID8gYjJgPGRlZXMtaWNvbiBjbGFzcz0ibG9nb0ljb24iIC5pY29uPSIke3RoaXMubG9nb0ljb259Ij48L2RlZXMtaWNvbj5gIDogIiJ9CiAgICAgICAgICAgICR7dGhpcy5sb2dvVGV4dCA/IGIyYDxzcGFuIGNsYXNzPSJsb2dvVGV4dCI+JHt0aGlzLmxvZ29UZXh0fTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgIDogIiJ9CgogICAgICAgIDxkaXYgY2xhc3M9Im1lbnVTZWN0aW9uIj4KICAgICAgICAgICR7dGhpcy5tZW51R3JvdXBzLmxlbmd0aCA+IDAgPyB0aGlzLnJlbmRlck1lbnVHcm91cHMoKSA6IHRoaXMucmVuZGVyTGVnYWN5VGFicygpfQogICAgICAgIDwvZGl2PgoKICAgICAgICAke3RoaXMuYm90dG9tVGFicy5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3R0b21TZWN0aW9uIj4KICAgICAgICAgICAgJHt0aGlzLmJvdHRvbVRhYnMubWFwKCh0YWJBcmcpID0+IHRoaXMucmVuZGVyVGFiKHRhYkFyZykpfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iY29sbGFwc2UtdG9nZ2xlIiBAY2xpY2s9IiR7KCkgPT4gdGhpcy50b2dnbGVDb2xsYXBzZSgpfSI+CiAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLmNvbGxhcHNlZCA/ICJsdWNpZGU6Y2hldnJvblJpZ2h0IiA6ICJsdWNpZGU6Y2hldnJvbkxlZnQifSI+PC9kZWVzLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgYDsKICAgIH0KICAgIHJlbmRlck1lbnVHcm91cHMoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgJHt0aGlzLm1lbnVHcm91cHMubWFwKChncm91cCkgPT4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0ibWVudUdyb3VwIj4KICAgICAgICAgICR7Z3JvdXAubmFtZSA/IGIyYDxkaXYgY2xhc3M9Imdyb3VwSGVhZGVyIj4ke2dyb3VwLm5hbWV9PC9kaXY+YCA6ICIifQogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXBUYWJzIj4KICAgICAgICAgICAgJHtncm91cC5pdGVtcy5tYXAoKHRhYkFyZykgPT4gdGhpcy5yZW5kZXJUYWIodGFiQXJnKSl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYCl9CiAgICBgOwogICAgfQogICAgcmVuZGVyTGVnYWN5VGFicygpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtZW51R3JvdXAiPgogICAgICAgIDxkaXYgY2xhc3M9Imdyb3VwVGFicyI+CiAgICAgICAgICAke3RoaXMudGFicy5tYXAoKHRhYkFyZykgPT4gdGhpcy5yZW5kZXJUYWIodGFiQXJnKSl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlclRhYih0YWJBcmcpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9InRhYiAke3RhYkFyZyA9PT0gdGhpcy5zZWxlY3RlZFRhYiA/ICJzZWxlY3RlZFRhYiIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpID0+IHsKICAgICAgICB0aGlzLnVwZGF0ZVRhYih0YWJBcmcpOwogICAgICB9fSIKICAgICAgPgogICAgICAgIDxkZWVzLWljb24gLmljb249IiR7dGFiQXJnLmljb25OYW1lIHx8ICIifSI+PC9kZWVzLWljb24+CiAgICAgICAgPHNwYW4gY2xhc3M9InRhYkxhYmVsIj4ke3RhYkFyZy5rZXl9PC9zcGFuPgogICAgICAgICR7dGFiQXJnLmJhZGdlICE9PSB2b2lkIDAgPyBiMmAKICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSAke3RhYkFyZy5iYWRnZVZhcmlhbnQgfHwgImRlZmF1bHQifSI+JHt0YWJBcmcuYmFkZ2V9PC9zcGFuPgogICAgICAgIGAgOiAiIn0KICAgICAgICA8c3BhbiBjbGFzcz0idGFiLXRvb2x0aXAiPiR7dGFiQXJnLmtleX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGdldEFsbFRhYnMoKSB7CiAgICAgIGlmICh0aGlzLm1lbnVHcm91cHMubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IGdyb3VwVGFicyA9IHRoaXMubWVudUdyb3Vwcy5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAuaXRlbXMpOwogICAgICAgIHJldHVybiBbLi4uZ3JvdXBUYWJzLCAuLi50aGlzLmJvdHRvbVRhYnNdOwogICAgICB9CiAgICAgIHJldHVybiBbLi4udGhpcy50YWJzLCAuLi50aGlzLmJvdHRvbVRhYnNdOwogICAgfQogICAgdXBkYXRlVGFiKHRhYkFyZykgewogICAgICB0aGlzLnNlbGVjdGVkVGFiID0gdGFiQXJnOwogICAgICB0aGlzLnNlbGVjdGVkVGFiLmFjdGlvbigpOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogeyB0YWI6IHRhYkFyZyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgZmlyc3RVcGRhdGVkKCkgewogICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy5nZXRBbGxUYWJzKCk7CiAgICAgIGlmIChhbGxUYWJzLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLnVwZGF0ZVRhYihhbGxUYWJzWzBdKTsKICAgICAgfQogICAgfQogICAgdG9nZ2xlQ29sbGFwc2UoKSB7CiAgICAgIHRoaXMuY29sbGFwc2VkID0gIXRoaXMuY29sbGFwc2VkOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb2xsYXBzZS1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IGNvbGxhcHNlZDogdGhpcy5jb2xsYXBzZWQgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9jb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzOChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0FwcHVpTWFpbm1lbnUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUvZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMjkgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAuZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgfQogICAgLmRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIgLnNwYWNlciB7CiAgICAgIGZsZXg6IDE7CiAgICAgIGJhY2tncm91bmQ6ICMwZjBmMGY7CiAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIGNvbG9yOiAjYTNhM2EzOwogICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgfQogICAgLmRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIgLnNwYWNlciBoMyB7CiAgICAgIGNvbG9yOiAjZmFmYWZhOwogICAgICBtYXJnaW4tdG9wOiAwOwogICAgfQogICAgLmRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIgLnNwYWNlciBjb2RlIHsKICAgICAgYmFja2dyb3VuZDogIzI3MjcyYTsKICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CiAgICAuZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciAuc3BhY2VyIHVsIHsKICAgICAgbGluZS1oZWlnaHQ6IDEuODsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIiPgogICAgPGRlZXMtYXBwdWktc2Vjb25kYXJ5bWVudQogICAgICAuaGVhZGluZz0keyJQcm9qZWN0cyJ9CiAgICAgIC5ncm91cHM9JHtbCiAgLy8gR3JvdXAgMTogVGFiIGl0ZW1zIChkZWZhdWx0IGJlaGF2aW9yKQogIHsKICAgIG5hbWU6ICJOYXZpZ2F0aW9uIiwKICAgIGljb25OYW1lOiAibHVjaWRlOmNvbXBhc3MiLAogICAgaXRlbXM6IFsKICAgICAgeyBrZXk6ICJEYXNoYm9hcmQiLCBpY29uTmFtZTogImx1Y2lkZTpsYXlvdXREYXNoYm9hcmQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJEYXNoYm9hcmQgY2xpY2tlZCIpLCBiYWRnZTogMywgYmFkZ2VWYXJpYW50OiAid2FybmluZyIgfSwKICAgICAgeyBrZXk6ICJQcm9qZWN0cyIsIGljb25OYW1lOiAibHVjaWRlOmZvbGRlciIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlByb2plY3RzIGNsaWNrZWQiKSwgYmFkZ2U6ICJuZXciLCBiYWRnZVZhcmlhbnQ6ICJzdWNjZXNzIiB9LAogICAgICB7IGtleTogIkFuYWx5dGljcyIsIGljb25OYW1lOiAibHVjaWRlOmJhckNoYXJ0MiIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFuYWx5dGljcyBjbGlja2VkIikgfQogICAgXQogIH0sCiAgLy8gR3JvdXAgMjogQWN0aW9ucwogIHsKICAgIG5hbWU6ICJBY3Rpb25zIiwKICAgIGljb25OYW1lOiAibHVjaWRlOnphcCIsCiAgICBpdGVtczogWwogICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJDcmVhdGUgTmV3IiwgaWNvbk5hbWU6ICJsdWNpZGU6cGx1cyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkNyZWF0ZSBOZXcgY2xpY2tlZCEiKSB9LAogICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJJbXBvcnQgRGF0YSIsIGljb25OYW1lOiAibHVjaWRlOnVwbG9hZCIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkltcG9ydCBEYXRhIGNsaWNrZWQhIikgfSwKICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgeyB0eXBlOiAiYWN0aW9uIiwga2V5OiAiRGVsZXRlIEFsbCIsIGljb25OYW1lOiAibHVjaWRlOnRyYXNoMiIsIHZhcmlhbnQ6ICJkYW5nZXIiLCBjb25maXJtTWVzc2FnZTogIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgYWxsIGl0ZW1zPyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkRlbGV0ZWQhIikgfQogICAgXQogIH0sCiAgLy8gR3JvdXAgMzogRmlsdGVycwogIHsKICAgIG5hbWU6ICJGaWx0ZXJzIiwKICAgIGljb25OYW1lOiAibHVjaWRlOmZpbHRlciIsCiAgICBpdGVtczogWwogICAgICB7IHR5cGU6ICJoZWFkZXIiLCBsYWJlbDogIlN0YXR1cyIgfSwKICAgICAgeyB0eXBlOiAiZmlsdGVyIiwga2V5OiAiU2hvdyBBY3RpdmUiLCBpY29uTmFtZTogImx1Y2lkZTpjaGVja0NpcmNsZSIsIGFjdGl2ZTogdHJ1ZSwgb25Ub2dnbGU6IChhY3RpdmUpID0+IGNvbnNvbGUubG9nKCJTaG93IEFjdGl2ZToiLCBhY3RpdmUpIH0sCiAgICAgIHsgdHlwZTogImZpbHRlciIsIGtleTogIlNob3cgQXJjaGl2ZWQiLCBpY29uTmFtZTogImx1Y2lkZTphcmNoaXZlIiwgYWN0aXZlOiBmYWxzZSwgb25Ub2dnbGU6IChhY3RpdmUpID0+IGNvbnNvbGUubG9nKCJTaG93IEFyY2hpdmVkOiIsIGFjdGl2ZSkgfSwKICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgeyB0eXBlOiAibXVsdGlGaWx0ZXIiLCBrZXk6ICJDYXRlZ29yaWVzIiwgaWNvbk5hbWU6ICJsdWNpZGU6dGFnIiwgY29sbGFwc2VkOiBmYWxzZSwgb3B0aW9uczogWwogICAgICAgIHsga2V5OiAiZnJvbnRlbmQiLCBsYWJlbDogIkZyb250ZW5kIiwgY2hlY2tlZDogdHJ1ZSwgaWNvbk5hbWU6ICJsdWNpZGU6bW9uaXRvciIgfSwKICAgICAgICB7IGtleTogImJhY2tlbmQiLCBsYWJlbDogIkJhY2tlbmQiLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTpzZXJ2ZXIiIH0sCiAgICAgICAgeyBrZXk6ICJkZXZvcHMiLCBsYWJlbDogIkRldk9wcyIsIGNoZWNrZWQ6IGZhbHNlLCBpY29uTmFtZTogImx1Y2lkZTpjbG91ZCIgfSwKICAgICAgICB7IGtleTogImRlc2lnbiIsIGxhYmVsOiAiRGVzaWduIiwgY2hlY2tlZDogZmFsc2UsIGljb25OYW1lOiAibHVjaWRlOnBhbGV0dGUiIH0KICAgICAgXSwgb25DaGFuZ2U6IChrZXlzMikgPT4gY29uc29sZS5sb2coIlNlbGVjdGVkIGNhdGVnb3JpZXM6Iiwga2V5czIpIH0KICAgIF0KICB9LAogIC8vIEdyb3VwIDQ6IExpbmtzIGFuZCBtaXNjCiAgewogICAgbmFtZTogIlJlc291cmNlcyIsCiAgICBpY29uTmFtZTogImx1Y2lkZTpib29rT3BlbiIsCiAgICBjb2xsYXBzZWQ6IHRydWUsCiAgICBpdGVtczogWwogICAgICB7IHR5cGU6ICJoZWFkZXIiLCBsYWJlbDogIkRvY3VtZW50YXRpb24iIH0sCiAgICAgIHsgdHlwZTogImxpbmsiLCBrZXk6ICJBUEkgUmVmZXJlbmNlIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVRleHQiLCBocmVmOiAiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vZG9jcyIgfSwKICAgICAgeyB0eXBlOiAibGluayIsIGtleTogIlVzZXIgR3VpZGUiLCBpY29uTmFtZTogImx1Y2lkZTpib29rIiwgaHJlZjogImh0dHBzOi8vZG9jcy5leGFtcGxlLmNvbS9ndWlkZSIgfSwKICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgeyB0eXBlOiAiaGVhZGVyIiwgbGFiZWw6ICJTdXBwb3J0IiB9LAogICAgICB7IHR5cGU6ICJsaW5rIiwga2V5OiAiSGVscCBDZW50ZXIiLCBpY29uTmFtZTogImx1Y2lkZTpoZWxwQ2lyY2xlIiwgaHJlZjogIi9oZWxwIiwgZXh0ZXJuYWw6IGZhbHNlIH0sCiAgICAgIHsgdHlwZTogImxpbmsiLCBrZXk6ICJHaXRIdWIgSXNzdWVzIiwgaWNvbk5hbWU6ICJsdWNpZGU6Z2l0aHViIiwgaHJlZjogImh0dHBzOi8vZ2l0aHViLmNvbS9leGFtcGxlL2lzc3VlcyIgfQogICAgXQogIH0KXX0KICAgICAgQGl0ZW0tc2VsZWN0PSR7KGUxMSkgPT4gY29uc29sZS5sb2coIlRhYiBzZWxlY3RlZDoiLCBlMTEuZGV0YWlsKX0KICAgICAgQGFjdGlvbi1jbGljaz0keyhlMTEpID0+IGNvbnNvbGUubG9nKCJBY3Rpb24gY2xpY2tlZDoiLCBlMTEuZGV0YWlsKX0KICAgICAgQGZpbHRlci10b2dnbGU9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiRmlsdGVyIHRvZ2dsZWQ6IiwgZTExLmRldGFpbCl9CiAgICAgIEBtdWx0aWZpbHRlci1jaGFuZ2U9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiTXVsdGktZmlsdGVyIGNoYW5nZWQ6IiwgZTExLmRldGFpbCl9CiAgICAgIEBsaW5rLWNsaWNrPSR7KGUxMSkgPT4gY29uc29sZS5sb2coIkxpbmsgY2xpY2tlZDoiLCBlMTEuZGV0YWlsKX0KICAgID48L2RlZXMtYXBwdWktc2Vjb25kYXJ5bWVudT4KICAgIDxkaXYgY2xhc3M9InNwYWNlciI+CiAgICAgIDxoMz5TZWNvbmRhcnkgTWVudSBEZW1vPC9oMz4KICAgICAgPHA+VGhpcyBkZW1vIHNob3djYXNlcyBhbGwgOCBpdGVtIHR5cGVzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT48Y29kZT50YWI8L2NvZGU+IC0gU2VsZWN0YWJsZSBpdGVtcyAoTmF2aWdhdGlvbiBncm91cCk8L2xpPgogICAgICAgIDxsaT48Y29kZT5hY3Rpb248L2NvZGU+IC0gQmx1ZSBhY3Rpb25zIChBY3Rpb25zIGdyb3VwKTwvbGk+CiAgICAgICAgPGxpPjxjb2RlPmFjdGlvbjwvY29kZT4gd2l0aCA8Y29kZT52YXJpYW50OiAnZGFuZ2VyJzwvY29kZT4gLSBSZWQgZGFuZ2VyIGFjdGlvbjwvbGk+CiAgICAgICAgPGxpPjxjb2RlPmZpbHRlcjwvY29kZT4gLSBDaGVja2JveCB0b2dnbGVzIChGaWx0ZXJzIGdyb3VwKTwvbGk+CiAgICAgICAgPGxpPjxjb2RlPm11bHRpRmlsdGVyPC9jb2RlPiAtIENvbGxhcHNpYmxlIG11bHRpLXNlbGVjdCAoQ2F0ZWdvcmllcyk8L2xpPgogICAgICAgIDxsaT48Y29kZT5kaXZpZGVyPC9jb2RlPiAtIFZpc3VhbCBzZXBhcmF0b3JzPC9saT4KICAgICAgICA8bGk+PGNvZGU+aGVhZGVyPC9jb2RlPiAtIFNlY3Rpb24gbGFiZWxzPC9saT4KICAgICAgICA8bGk+PGNvZGU+bGluazwvY29kZT4gLSBFeHRlcm5hbC9pbnRlcm5hbCBsaW5rcyAoUmVzb3VyY2VzIGdyb3VwKTwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPlRyeSB0aGUgY29sbGFwc2UgdG9nZ2xlIG9uIHRoZSBsZWZ0IGVkZ2UhPC9wPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51L2RlZXMtYXBwdWktc2Vjb25kYXJ5bWVudS5qcwppbml0X2RlZXNfaWNvbigpOwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUzOCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMzkgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aVNlY29uZGFyeW1lbnUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9oZWFkaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9oZWFkaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGVhZGluZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZ3JvdXBzX2RlY29yYXRvcnM7CiAgbGV0IF9ncm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ncm91cHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGlvbk9wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGlvbk9wdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3Rpb25PcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZEl0ZW1fZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkSXRlbV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkSXRlbV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sbGFwc2VkR3JvdXBzX2RlY29yYXRvcnM7CiAgbGV0IF9jb2xsYXBzZWRHcm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2xsYXBzZWRHcm91cHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbGxhcHNlZE11bHRpRmlsdGVyc19kZWNvcmF0b3JzOwogIGxldCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZW5kZXJDb3VudGVyX2RlY29yYXRvcnM7CiAgbGV0IF9yZW5kZXJDb3VudGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmVuZGVyQ291bnRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sbGFwc2VkX2RlY29yYXRvcnM7CiAgbGV0IF9jb2xsYXBzZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0FwcHVpU2Vjb25kYXJ5bWVudTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9oZWFkaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfZ3JvdXBzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9zZWxlY3Rpb25PcHRpb25zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9zZWxlY3RlZEl0ZW1fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9jb2xsYXBzZWRHcm91cHNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2NvbGxhcHNlZE11bHRpRmlsdGVyc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfcmVuZGVyQ291bnRlcl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY29sbGFwc2VkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMzgodGhpcywgbnVsbCwgX2hlYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGVhZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGVhZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oZWFkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oZWFkaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzLCBfaGVhZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM4KHRoaXMsIG51bGwsIF9ncm91cHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZ3JvdXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJncm91cHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZ3JvdXBzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ncm91cHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZ3JvdXBzX2luaXRpYWxpemVycywgX2dyb3Vwc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM4KHRoaXMsIG51bGwsIF9zZWxlY3Rpb25PcHRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGlvbk9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGlvbk9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0aW9uT3B0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0aW9uT3B0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3Rpb25PcHRpb25zX2luaXRpYWxpemVycywgX3NlbGVjdGlvbk9wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfc2VsZWN0ZWRJdGVtX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkSXRlbSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRJdGVtIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkSXRlbSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWRJdGVtID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkSXRlbV9pbml0aWFsaXplcnMsIF9zZWxlY3RlZEl0ZW1fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfY29sbGFwc2VkR3JvdXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbGxhcHNlZEdyb3VwcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sbGFwc2VkR3JvdXBzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbGxhcHNlZEdyb3Vwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29sbGFwc2VkR3JvdXBzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbGxhcHNlZEdyb3Vwc19pbml0aWFsaXplcnMsIF9jb2xsYXBzZWRHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbGxhcHNlZE11bHRpRmlsdGVycyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sbGFwc2VkTXVsdGlGaWx0ZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbGxhcHNlZE11bHRpRmlsdGVycywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29sbGFwc2VkTXVsdGlGaWx0ZXJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbGxhcHNlZE11bHRpRmlsdGVyc19pbml0aWFsaXplcnMsIF9jb2xsYXBzZWRNdWx0aUZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfcmVuZGVyQ291bnRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZW5kZXJDb3VudGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZW5kZXJDb3VudGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJlbmRlckNvdW50ZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJlbmRlckNvdW50ZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVuZGVyQ291bnRlcl9pbml0aWFsaXplcnMsIF9yZW5kZXJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzgodGhpcywgbnVsbCwgX2NvbGxhcHNlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2xsYXBzZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb2xsYXBzZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbGxhcHNlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzgobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQXBwdWlTZWNvbmRhcnltZW51MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjk7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkFwcCBVSSI7CiAgICAjaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfaGVhZGluZ19pbml0aWFsaXplcnMsICJNZW51Iik7CiAgICAvLyBJTlNUQU5DRQogICAgLyoqIER5bmFtaWMgaGVhZGluZyAtIHR5cGljYWxseSBzaG93cyB0aGUgc2VsZWN0ZWQgTWFpbk1lbnUgaXRlbSAqLwogICAgZ2V0IGhlYWRpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoZWFkaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaGVhZGluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2dyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzkodGhpcywgX2hlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9ncm91cHNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgLyoqIEdyb3VwZWQgaXRlbXMgd2l0aCBjb2xsYXBzZSBzdXBwb3J0IC0gc3VwcG9ydHMgbmV3IElTZWNvbmRhcnlNZW51R3JvdXAgKi8KICAgIGdldCBncm91cHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNncm91cHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBncm91cHModmFsdWUyKSB7CiAgICAgIHRoaXMuI2dyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGlvbk9wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9ncm91cHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9zZWxlY3Rpb25PcHRpb25zX2luaXRpYWxpemVycywgW10pKTsKICAgIC8qKiBMZWdhY3kgZmxhdCBsaXN0IHN1cHBvcnQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KICAgIGdldCBzZWxlY3Rpb25PcHRpb25zKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uT3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGlvbk9wdGlvbnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGlvbk9wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9zZWxlY3Rpb25PcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfc2VsZWN0ZWRJdGVtX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgLyoqIEN1cnJlbnRseSBzZWxlY3RlZCB0YWIgaXRlbSAqLwogICAgZ2V0IHNlbGVjdGVkSXRlbSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkSXRlbSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRJdGVtX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29sbGFwc2VkR3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfc2VsZWN0ZWRJdGVtX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkR3JvdXBzX2luaXRpYWxpemVycywgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkpOwogICAgLyoqIEludGVybmFsIHN0YXRlIGZvciBjb2xsYXBzZWQgZ3JvdXBzICovCiAgICBnZXQgY29sbGFwc2VkR3JvdXBzKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkR3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sbGFwc2VkR3JvdXBzKHZhbHVlMikgewogICAgICB0aGlzLiNjb2xsYXBzZWRHcm91cHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb2xsYXBzZWRNdWx0aUZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9jb2xsYXBzZWRHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9jb2xsYXBzZWRNdWx0aUZpbHRlcnNfaW5pdGlhbGl6ZXJzLCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSk7CiAgICAvKiogSW50ZXJuYWwgc3RhdGUgZm9yIGNvbGxhcHNlZCBtdWx0aS1maWx0ZXJzICovCiAgICBnZXQgY29sbGFwc2VkTXVsdGlGaWx0ZXJzKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sbGFwc2VkTXVsdGlGaWx0ZXJzKHZhbHVlMikgewogICAgICB0aGlzLiNjb2xsYXBzZWRNdWx0aUZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNyZW5kZXJDb3VudGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfcmVuZGVyQ291bnRlcl9pbml0aWFsaXplcnMsIDApKTsKICAgIC8qKiBSZW5kZXIgY291bnRlciB0byBmb3JjZSByZS1yZW5kZXJzIHdoZW4gaXRlbXMgYXJlIG11dGF0ZWQgKi8KICAgIGdldCByZW5kZXJDb3VudGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVuZGVyQ291bnRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJlbmRlckNvdW50ZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3JlbmRlckNvdW50ZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9yZW5kZXJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIC8qKiBIb3Jpem9udGFsIGNvbGxhcHNlIHN0YXRlICovCiAgICBnZXQgY29sbGFwc2VkKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sbGFwc2VkKHZhbHVlMikgewogICAgICB0aGlzLiNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1zaWRlYmFyLXdpZHRoLWV4cGFuZGVkOiAyNDBweDsKICAgICAgICAtLXNpZGViYXItd2lkdGgtY29sbGFwc2VkOiA1NnB4OwogICAgICAgIC0tc2lkZWJhci1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgICAtLXNpZGViYXItZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNTI1MjUyIiwgIiNhM2EzYTMiKX07CiAgICAgICAgLS1zaWRlYmFyLWZnLW11dGVkOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzczNzM3MyIsICIjNzM3MzczIil9OwogICAgICAgIC0tc2lkZWJhci1mZy1hY3RpdmU6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGEwYTBhIiwgIiNmYWZhZmEiKX07CiAgICAgICAgLS1zaWRlYmFyLWJvcmRlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU1ZTUiLCAiIzFhMWExYSIpfTsKICAgICAgICAtLXNpZGViYXItaG92ZXI6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDQpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgLS1zaWRlYmFyLWFjdGl2ZTogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgICAtLXNpZGViYXItYWNjZW50OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzBhMGEwYSIsICIjZmFmYWZhIil9OwogICAgICAgIC0tdG9vbHRpcC1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxODE4MWIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICAtLXRvb2x0aXAtZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMxODE4MWIiKX07CgogICAgICAgIC8qIEJhZGdlIGNvbG9ycyAqLwogICAgICAgIC0tYmFkZ2UtZGVmYXVsdC1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgICAgICAtLWJhZGdlLWRlZmF1bHQtZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2YzZjQ2IiwgIiNhMWExYWEiKX07CiAgICAgICAgLS1iYWRnZS1zdWNjZXNzLWJnOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjZmNlNyIsICIjMTQ1MzJkIil9OwogICAgICAgIC0tYmFkZ2Utc3VjY2Vzcy1mZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxNjY1MzQiLCAiIzRhZGU4MCIpfTsKICAgICAgICAtLWJhZGdlLXdhcm5pbmctYmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmVmM2M3IiwgIiM0NTFhMDMiKX07CiAgICAgICAgLS1iYWRnZS13YXJuaW5nLWZnOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzkyNDAwZSIsICIjZmJiZjI0Iil9OwogICAgICAgIC0tYmFkZ2UtZXJyb3ItYmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmVlMmUyIiwgIiM0NTBhMGEiKX07CiAgICAgICAgLS1iYWRnZS1lcnJvci1mZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5OTFiMWIiLCAiI2Y4NzE3MSIpfTsKCiAgICAgICAgLyogQWN0aW9uIGNvbG9ycyAqLwogICAgICAgIC0tYWN0aW9uLXByaW1hcnk6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiMzYjgyZjYiKX07CiAgICAgICAgLS1hY3Rpb24tcHJpbWFyeS1ob3ZlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZDRlZDgiLCAiIzYwYTVmYSIpfTsKICAgICAgICAtLWFjdGlvbi1kYW5nZXI6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNlZjQ0NDQiKX07CiAgICAgICAgLS1hY3Rpb24tZGFuZ2VyLWhvdmVyOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2I5MWMxYyIsICIjZjg3MTcxIil9OwoKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiB2YXIoLS1zaWRlYmFyLXdpZHRoLWV4cGFuZGVkKTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWJnKTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1zaWRlYmFyLWJvcmRlcik7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBzYW5zLXNlcmlmOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMjVzIGVhc2U7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSB7CiAgICAgICAgd2lkdGg6IHZhcigtLXNpZGViYXItd2lkdGgtY29sbGFwc2VkKTsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC8qIEZsb2F0aW5nIGNvbGxhcHNlIHRvZ2dsZSBidXR0b24gKi8KICAgICAgLmNvbGxhcHNlLXRvZ2dsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAtMTJweDsKICAgICAgICB0b3A6IDI0cHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzI3MjcyYSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTVlNSIsICIjM2YzZjQ2Iil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MzczNzMiLCAiI2ExYTFhYSIpfTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmNvbGxhcHNlLXRvZ2dsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoOmhvdmVyKSAuY29sbGFwc2UtdG9nZ2xlIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuY29sbGFwc2UtdG9nZ2xlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAvKiBIZWFkZXIgU2VjdGlvbiAqLwogICAgICAuaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXNpZGViYXItYm9yZGVyKTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuaGVhZGVyIC5oZWFkaW5nIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLWFjdGl2ZSk7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCB3aWR0aCAwLjI1cyBlYXNlOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmhlYWRlciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuaGVhZGVyIC5oZWFkaW5nIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC8qIFNjcm9sbGFibGUgTWVudSBTZWN0aW9uICovCiAgICAgIC5tZW51U2VjdGlvbiB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xNSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMjUpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkiKX07CiAgICAgIH0KCiAgICAgIC8qIE1lbnUgR3JvdXAgKi8KICAgICAgLm1lbnVHcm91cCB7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVHcm91cCB7CiAgICAgICAgcGFkZGluZzogMCA0cHg7CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZSwgb3BhY2l0eSAwLjJzIGVhc2UsIG1heC1oZWlnaHQgMC4yNXMgZWFzZTsKICAgICAgICBtYXgtaGVpZ2h0OiA0MHB4OwogICAgICB9CgogICAgICAuZ3JvdXBIZWFkZXI6aG92ZXIgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE0MCwgMTIwLCAxMDAsIDAuMDYpIiwgInJnYmEoMTgwLCAxNjAsIDE0MCwgMC4wOCkiKX07CiAgICAgICAgcGFkZGluZzogN3B4IDExcHg7CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlcjpub3QoLmNvbGxhcHNlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE0MCwgMTIwLCAxMDAsIDAuMDYpIiwgInJnYmEoMTgwLCAxNjAsIDE0MCwgMC4wOCkiKX07CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICB9CgogICAgICAuZ3JvdXBIZWFkZXIgLmdyb3VwVGl0bGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3ODcxNmMiLCAiI2I1YTk5YSIpfTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlciAuZ3JvdXBUaXRsZSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3ODcxNmMiLCAiI2I1YTk5YSIpfTsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyIC5jaGV2cm9uIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3ODcxNmMiLCAiI2I1YTk5YSIpfTsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyLmNvbGxhcHNlZCAuY2hldnJvbiB7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKTsKICAgICAgfQoKICAgICAgLyogSGlkZSBncm91cCBoZWFkZXJzIHdoZW4gaG9yaXpvbnRhbGx5IGNvbGxhcHNlZCAqLwogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmdyb3VwSGVhZGVyIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIG1heC1oZWlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIEdyb3VwIEl0ZW1zIENvbnRhaW5lciAqLwogICAgICAuZ3JvdXBJdGVtcyB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IDAuMjVzIGVhc2UsIG9wYWNpdHkgMC4ycyBlYXNlLCBtYXJnaW4gMC4yNXMgZWFzZTsKICAgICAgICBtYXgtaGVpZ2h0OiAxMDAwcHg7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICB9CgogICAgICAuZ3JvdXBJdGVtcy5jb2xsYXBzZWQgewogICAgICAgIG1heC1oZWlnaHQ6IDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CgogICAgICAvKiBBbHdheXMgc2hvdyBpdGVtcyB3aGVuIGhvcml6b250YWxseSBjb2xsYXBzZWQgKHJlZ2FyZGxlc3Mgb2YgZ3JvdXAgY29sbGFwc2Ugc3RhdGUpICovCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuZ3JvdXBJdGVtcyB7CiAgICAgICAgbWF4LWhlaWdodDogbm9uZTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBNZW51IEl0ZW0gQmFzZSAqLwogICAgICAubWVudUl0ZW0gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIG1hcmdpbjogMnB4IDA7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0NTA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZyk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ob3Zlcik7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1hY3RpdmUpOwogICAgICB9CgogICAgICAubWVudUl0ZW0uZGlzYWJsZWQgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAubWVudUl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItYWN0aXZlKTsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1hY3RpdmUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5zZWxlY3RlZDo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgd2lkdGg6IDNweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1hY2NlbnQpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMnB4IDJweCAwOwogICAgICB9CgogICAgICAubWVudUl0ZW0gZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubWVudUl0ZW0uc2VsZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubWVudUl0ZW0gLml0ZW1MYWJlbCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIHdpZHRoIDAuMjVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC8qIEFjdGlvbiBJdGVtIFN0eWxlcyAqLwogICAgICAubWVudUl0ZW0uYWN0aW9uLXByaW1hcnkgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpb24tcHJpbWFyeSk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5hY3Rpb24tcHJpbWFyeTpob3ZlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGlvbi1wcmltYXJ5LWhvdmVyKTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgzNywgOTksIDIzNSwgMC4wOCkiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMTIpIil9OwogICAgICB9CgogICAgICAubWVudUl0ZW0uYWN0aW9uLXByaW1hcnkgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubWVudUl0ZW0uYWN0aW9uLWRhbmdlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGlvbi1kYW5nZXIpOwogICAgICB9CgogICAgICAubWVudUl0ZW0uYWN0aW9uLWRhbmdlcjpob3ZlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGlvbi1kYW5nZXItaG92ZXIpOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIyMCwgMzgsIDM4LCAwLjA4KSIsICJyZ2JhKDIzOSwgNjgsIDY4LCAwLjEyKSIpfTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmFjdGlvbi1kYW5nZXIgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBGaWx0ZXIgSXRlbSBTdHlsZXMgKi8KICAgICAgLm1lbnVJdGVtLmZpbHRlciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAubWVudUl0ZW0uZmlsdGVyIC5maWx0ZXItY2hlY2tib3ggewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Q0ZDRkNCIsICIjNTI1MjUyIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5maWx0ZXIgLmZpbHRlci1jaGVja2JveC5jaGVja2VkIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWFjY2VudCk7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1zaWRlYmFyLWFjY2VudCk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5maWx0ZXIgLmZpbHRlci1jaGVja2JveCBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubWVudUl0ZW0uZmlsdGVyLmFjdGl2ZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLyogTXVsdGktRmlsdGVyIENvbnRhaW5lciAqLwogICAgICAubXVsdGlGaWx0ZXIgewogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDIpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMikiKX07CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItaG92ZXIpOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItaGVhZGVyIC5tdWx0aUZpbHRlci10aXRsZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLWFjdGl2ZSk7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIgLm11bHRpRmlsdGVyLXRpdGxlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLWhlYWRlciAubXVsdGlGaWx0ZXItY291bnQgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1tdXRlZCk7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFkZ2UtZGVmYXVsdC1iZyk7CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIgLmNoZXZyb24gewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLW11dGVkKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLWhlYWRlci5jb2xsYXBzZWQgLmNoZXZyb24gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC05MGRlZyk7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1vcHRpb25zIHsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAwLjI1cyBlYXNlLCBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9ucy5jb2xsYXBzZWQgewogICAgICAgIG1heC1oZWlnaHQ6IDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLW9wdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ob3Zlcik7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLW9wdGlvbiAub3B0aW9uLWNoZWNrYm94IHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkNGQ0ZDQiLCAiIzUyNTI1MiIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uIC5vcHRpb24tY2hlY2tib3guY2hlY2tlZCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1hY2NlbnQpOwogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tc2lkZWJhci1hY2NlbnQpOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uIC5vcHRpb24tY2hlY2tib3ggZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1vcHRpb24gZGVlcy1pY29uLm9wdGlvbi1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAvKiBEaXZpZGVyICovCiAgICAgIC5tZW51RGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIG1hcmdpbjogOHB4IDEycHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudURpdmlkZXIgewogICAgICAgIG1hcmdpbjogOHB4IDRweDsKICAgICAgfQoKICAgICAgLyogSGVhZGVyL0xhYmVsICovCiAgICAgIC5tZW51SGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAxMnB4IDEycHggNHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctbXV0ZWQpOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVIZWFkZXIgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIExpbmsgSXRlbSAqLwogICAgICAubWVudUl0ZW0ubGluayAuZXh0ZXJuYWwtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgfQoKICAgICAgLyogQ29sbGFwc2VkIG1lbnUgaXRlbSBzdHlsZXMgKi8KICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SXRlbSB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGdhcDogMDsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SXRlbSAuaXRlbUxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SXRlbS5zZWxlY3RlZDo6YmVmb3JlIHsKICAgICAgICBsZWZ0OiAtNHB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVJdGVtIC5maWx0ZXItY2hlY2tib3gsCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUl0ZW0gLmV4dGVybmFsLWljb24gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubXVsdGlGaWx0ZXIgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFRvb2x0aXAgZm9yIGNvbGxhcHNlZCBzdGF0ZSAqLwogICAgICAuaXRlbS10b29sdGlwIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMTAwJTsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEycHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdG9vbHRpcC1iZyk7CiAgICAgICAgY29sb3I6IHZhcigtLXRvb2x0aXAtZmcpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgIH0KCiAgICAgIC5pdGVtLXRvb2x0aXA6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IC00cHg7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIGJvcmRlcjogNHB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdmFyKC0tdG9vbHRpcC1iZyk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUl0ZW06aG92ZXIgLml0ZW0tdG9vbHRpcCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAxczsKICAgICAgfQoKICAgICAgLyogQmFkZ2UgU3R5bGVzICovCiAgICAgIC5iYWRnZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBtaW4td2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIHBhZGRpbmc6IDAgNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDlweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmJhZGdlLmRlZmF1bHQgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLWRlZmF1bHQtYmcpOwogICAgICAgIGNvbG9yOiB2YXIoLS1iYWRnZS1kZWZhdWx0LWZnKTsKICAgICAgfQoKICAgICAgLmJhZGdlLnN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLXN1Y2Nlc3MtYmcpOwogICAgICAgIGNvbG9yOiB2YXIoLS1iYWRnZS1zdWNjZXNzLWZnKTsKICAgICAgfQoKICAgICAgLmJhZGdlLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLXdhcm5pbmctYmcpOwogICAgICAgIGNvbG9yOiB2YXIoLS1iYWRnZS13YXJuaW5nLWZnKTsKICAgICAgfQoKICAgICAgLmJhZGdlLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWRnZS1lcnJvci1iZyk7CiAgICAgICAgY29sb3I6IHZhcigtLWJhZGdlLWVycm9yLWZnKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5iYWRnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogTGVnYWN5IG9wdGlvbnMgY29udGFpbmVyICovCiAgICAgIC5sZWdhY3lPcHRpb25zIHsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgfQoKICAgICAgLyogRGl2aWRlciAobGVnYWN5KSAqLwogICAgICAuZGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIG1hcmdpbjogOHB4IDEycHg7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWFkaW5nIj4ke3RoaXMuaGVhZGluZ308L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWVudVNlY3Rpb24iPgogICAgICAgICAgJHt0aGlzLmdyb3Vwcy5sZW5ndGggPiAwID8gdGhpcy5yZW5kZXJHcm91cHMoKSA6IHRoaXMucmVuZGVyTGVnYWN5T3B0aW9ucygpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iY29sbGFwc2UtdG9nZ2xlIiBAY2xpY2s9IiR7KCkgPT4gdGhpcy50b2dnbGVDb2xsYXBzZSgpfSI+CiAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLmNvbGxhcHNlZCA/ICJsdWNpZGU6Y2hldnJvblJpZ2h0IiA6ICJsdWNpZGU6Y2hldnJvbkxlZnQifSI+PC9kZWVzLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgYDsKICAgIH0KICAgIHJlbmRlckdyb3VwcygpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke3RoaXMuZ3JvdXBzLm1hcCgoZ3JvdXApID0+IGIyYAogICAgICAgIDxkaXYgY2xhc3M9Im1lbnVHcm91cCI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJncm91cEhlYWRlciAke3RoaXMuY29sbGFwc2VkR3JvdXBzLmhhcyhncm91cC5uYW1lKSA/ICJjb2xsYXBzZWQiIDogIiJ9IgogICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gdGhpcy50b2dnbGVHcm91cChncm91cC5uYW1lKX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJncm91cFRpdGxlIj4KICAgICAgICAgICAgICAke2dyb3VwLmljb25OYW1lID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLm5vcm1hbGl6ZUljb24oZ3JvdXAuaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgICAgICAgICR7Z3JvdXAubmFtZX0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJjaGV2cm9uIiAuaWNvbj0iJHsibHVjaWRlOmNoZXZyb25Eb3duIn0iPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJncm91cEl0ZW1zICR7dGhpcy5jb2xsYXBzZWRHcm91cHMuaGFzKGdyb3VwLm5hbWUpID8gImNvbGxhcHNlZCIgOiAiIn0iPgogICAgICAgICAgICAke2dyb3VwLml0ZW1zLm1hcCgoaXRlbSkgPT4gdGhpcy5yZW5kZXJJdGVtKGl0ZW0sIGdyb3VwKSl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYCl9CiAgICBgOwogICAgfQogICAgcmVuZGVySXRlbShpdGVtLCBncm91cCkgewogICAgICBpZiAoImhpZGRlbiIgaW4gaXRlbSAmJiBpdGVtLmhpZGRlbikgewogICAgICAgIHJldHVybiBiMmBgOwogICAgICB9CiAgICAgIGNvbnN0IGl0ZW1UeXBlID0gInR5cGUiIGluIGl0ZW0gPyBpdGVtLnR5cGUgOiAidGFiIjsKICAgICAgc3dpdGNoIChpdGVtVHlwZSkgewogICAgICAgIGNhc2UgImFjdGlvbiI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJBY3Rpb25JdGVtKGl0ZW0pOwogICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJGaWx0ZXJJdGVtKGl0ZW0pOwogICAgICAgIGNhc2UgIm11bHRpRmlsdGVyIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlck11bHRpRmlsdGVySXRlbShpdGVtKTsKICAgICAgICBjYXNlICJkaXZpZGVyIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckRpdmlkZXIoKTsKICAgICAgICBjYXNlICJoZWFkZXIiOgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVySGVhZGVyKGl0ZW0pOwogICAgICAgIGNhc2UgImxpbmsiOgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyTGlua0l0ZW0oaXRlbSk7CiAgICAgICAgY2FzZSAidGFiIjoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyVGFiSXRlbShpdGVtLCBncm91cCk7CiAgICAgIH0KICAgIH0KICAgIHJlbmRlclRhYkl0ZW0oaXRlbSwgZ3JvdXApIHsKICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtPy5rZXkgPT09IGl0ZW0ua2V5OwogICAgICBjb25zdCBpc0Rpc2FibGVkID0gaXRlbS5kaXNhYmxlZCA9PT0gdHJ1ZTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9Im1lbnVJdGVtICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0gJHtpc0Rpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSIKICAgICAgICBAY2xpY2s9IiR7KCkgPT4gIWlzRGlzYWJsZWQgJiYgdGhpcy5zZWxlY3RUYWJJdGVtKGl0ZW0sIGdyb3VwKX0iCiAgICAgICAgQGNvbnRleHRtZW51PSIkeyhlMTEpID0+IHRoaXMuaGFuZGxlQ29udGV4dE1lbnUoZTExLCBpdGVtKX0iCiAgICAgID4KICAgICAgICAke2l0ZW0uaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uPSIke3RoaXMubm9ybWFsaXplSWNvbihpdGVtLmljb25OYW1lKX0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbUxhYmVsIj4ke2l0ZW0ua2V5fTwvc3Bhbj4KICAgICAgICAke2l0ZW0uYmFkZ2UgIT09IHZvaWQgMCA/IGIyYAogICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlICR7aXRlbS5iYWRnZVZhcmlhbnQgfHwgImRlZmF1bHQifSI+JHtpdGVtLmJhZGdlfTwvc3Bhbj4KICAgICAgICBgIDogIiJ9CiAgICAgICAgPHNwYW4gY2xhc3M9Iml0ZW0tdG9vbHRpcCI+JHtpdGVtLmtleX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckFjdGlvbkl0ZW0oaXRlbSkgewogICAgICBjb25zdCB2YXJpYW50ID0gaXRlbS52YXJpYW50IHx8ICJwcmltYXJ5IjsKICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPT09IHRydWU7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtZW51SXRlbSBhY3Rpb24tJHt2YXJpYW50fSAke2lzRGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9IgogICAgICAgIEBjbGljaz0iJHsoKSA9PiAhaXNEaXNhYmxlZCAmJiB0aGlzLmhhbmRsZUFjdGlvbkNsaWNrKGl0ZW0pfSIKICAgICAgPgogICAgICAgICR7aXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKGl0ZW0uaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtTGFiZWwiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtLXRvb2x0aXAiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJGaWx0ZXJJdGVtKGl0ZW0pIHsKICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPT09IHRydWU7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtZW51SXRlbSBmaWx0ZXIgJHtpdGVtLmFjdGl2ZSA/ICJhY3RpdmUiIDogIiJ9ICR7aXNEaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpID0+ICFpc0Rpc2FibGVkICYmIHRoaXMuaGFuZGxlRmlsdGVyVG9nZ2xlKGl0ZW0pfSIKICAgICAgPgogICAgICAgICR7aXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKGl0ZW0uaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtTGFiZWwiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICAgIDxkaXYgY2xhc3M9ImZpbHRlci1jaGVja2JveCAke2l0ZW0uYWN0aXZlID8gImNoZWNrZWQiIDogIiJ9Ij4KICAgICAgICAgICR7aXRlbS5hY3RpdmUgPyBiMmA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6Y2hlY2sifSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtLXRvb2x0aXAiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJNdWx0aUZpbHRlckl0ZW0oaXRlbSkgewogICAgICBjb25zdCBpc0NvbGxhcHNlZCA9IHRoaXMuY29sbGFwc2VkTXVsdGlGaWx0ZXJzLmhhcyhpdGVtLmtleSk7CiAgICAgIGNvbnN0IGNoZWNrZWRDb3VudCA9IGl0ZW0ub3B0aW9ucy5maWx0ZXIoKG9wdCkgPT4gb3B0LmNoZWNrZWQpLmxlbmd0aDsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtdWx0aUZpbHRlciI+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9Im11bHRpRmlsdGVyLWhlYWRlciAke2lzQ29sbGFwc2VkID8gImNvbGxhcHNlZCIgOiAiIn0iCiAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gdGhpcy50b2dnbGVNdWx0aUZpbHRlcihpdGVtLmtleSl9IgogICAgICAgID4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdWx0aUZpbHRlci10aXRsZSI+CiAgICAgICAgICAgICR7aXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKGl0ZW0uaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgICAgICAke2l0ZW0ua2V5fQogICAgICAgICAgPC9zcGFuPgogICAgICAgICAgJHtjaGVja2VkQ291bnQgPiAwID8gYjJgPHNwYW4gY2xhc3M9Im11bHRpRmlsdGVyLWNvdW50Ij4ke2NoZWNrZWRDb3VudH08L3NwYW4+YCA6ICIifQogICAgICAgICAgPGRlZXMtaWNvbiBjbGFzcz0iY2hldnJvbiIgLmljb249IiR7Imx1Y2lkZTpjaGV2cm9uRG93biJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtdWx0aUZpbHRlci1vcHRpb25zICR7aXNDb2xsYXBzZWQgPyAiY29sbGFwc2VkIiA6ICIifSI+CiAgICAgICAgICAke2l0ZW0ub3B0aW9ucy5tYXAoKG9wdGlvbjIpID0+IGIyYAogICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgY2xhc3M9Im11bHRpRmlsdGVyLW9wdGlvbiIKICAgICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gdGhpcy5oYW5kbGVNdWx0aUZpbHRlck9wdGlvblRvZ2dsZShpdGVtLCBvcHRpb24yLmtleSl9IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3B0aW9uLWNoZWNrYm94ICR7b3B0aW9uMi5jaGVja2VkID8gImNoZWNrZWQiIDogIiJ9Ij4KICAgICAgICAgICAgICAgICR7b3B0aW9uMi5jaGVja2VkID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0iJHsibHVjaWRlOmNoZWNrIn0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAke29wdGlvbjIuaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIGNsYXNzPSJvcHRpb24taWNvbiIgLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKG9wdGlvbjIuaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgICAgICAgIDxzcGFuPiR7b3B0aW9uMi5sYWJlbH08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckRpdmlkZXIoKSB7CiAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJtZW51RGl2aWRlciI+PC9kaXY+YDsKICAgIH0KICAgIHJlbmRlckhlYWRlcihpdGVtKSB7CiAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJtZW51SGVhZGVyIj4ke2l0ZW0ubGFiZWx9PC9kaXY+YDsKICAgIH0KICAgIHJlbmRlckxpbmtJdGVtKGl0ZW0pIHsKICAgICAgY29uc3QgaXNFeHRlcm5hbCA9IGl0ZW0uZXh0ZXJuYWwgPz8gaXRlbS5ocmVmLnN0YXJ0c1dpdGgoImh0dHAiKTsKICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPT09IHRydWU7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtZW51SXRlbSBsaW5rICR7aXNEaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpID0+ICFpc0Rpc2FibGVkICYmIHRoaXMuaGFuZGxlTGlua0NsaWNrKGl0ZW0pfSIKICAgICAgPgogICAgICAgICR7aXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKGl0ZW0uaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtTGFiZWwiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICAgICR7aXNFeHRlcm5hbCA/IGIyYDxkZWVzLWljb24gY2xhc3M9ImV4dGVybmFsLWljb24iIC5pY29uPSIkeyJsdWNpZGU6ZXh0ZXJuYWxMaW5rIn0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbS10b29sdGlwIj4ke2l0ZW0ua2V5fTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyTGVnYWN5T3B0aW9ucygpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJsZWdhY3lPcHRpb25zIj4KICAgICAgICAke3RoaXMuc2VsZWN0aW9uT3B0aW9ucy5tYXAoKG9wdGlvbjIpID0+IHsKICAgICAgICBpZiAoImRpdmlkZXIiIGluIG9wdGlvbjIgJiYgb3B0aW9uMi5kaXZpZGVyKSB7CiAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0iZGl2aWRlciI+PC9kaXY+YDsKICAgICAgICB9CiAgICAgICAgY29uc3QgaXRlbSA9IG9wdGlvbjI7CiAgICAgICAgY29uc3QgdGFiSXRlbSA9IHsKICAgICAgICAgIGtleTogaXRlbS5rZXksCiAgICAgICAgICBpY29uTmFtZTogaXRlbS5pY29uTmFtZSwKICAgICAgICAgIGFjdGlvbjogaXRlbS5hY3Rpb24sCiAgICAgICAgICBiYWRnZTogaXRlbS5iYWRnZSwKICAgICAgICAgIGJhZGdlVmFyaWFudDogaXRlbS5iYWRnZVZhcmlhbnQKICAgICAgICB9OwogICAgICAgIHJldHVybiB0aGlzLnJlbmRlclRhYkl0ZW0odGFiSXRlbSk7CiAgICAgIH0pfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICAvLyBIZWxwZXIgdG8gbm9ybWFsaXplIGljb24gbmFtZXMKICAgIG5vcm1hbGl6ZUljb24oaWNvbk5hbWUpIHsKICAgICAgcmV0dXJuIGljb25OYW1lLnN0YXJ0c1dpdGgoImx1Y2lkZToiKSA/IGljb25OYW1lIDogYGx1Y2lkZToke2ljb25OYW1lfWA7CiAgICB9CiAgICB0b2dnbGVHcm91cChncm91cE5hbWUpIHsKICAgICAgY29uc3QgbmV3Q29sbGFwc2VkID0gbmV3IFNldCh0aGlzLmNvbGxhcHNlZEdyb3Vwcyk7CiAgICAgIGlmIChuZXdDb2xsYXBzZWQuaGFzKGdyb3VwTmFtZSkpIHsKICAgICAgICBuZXdDb2xsYXBzZWQuZGVsZXRlKGdyb3VwTmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmV3Q29sbGFwc2VkLmFkZChncm91cE5hbWUpOwogICAgICB9CiAgICAgIHRoaXMuY29sbGFwc2VkR3JvdXBzID0gbmV3Q29sbGFwc2VkOwogICAgfQogICAgdG9nZ2xlTXVsdGlGaWx0ZXIoZmlsdGVyS2V5KSB7CiAgICAgIGNvbnN0IG5ld0NvbGxhcHNlZCA9IG5ldyBTZXQodGhpcy5jb2xsYXBzZWRNdWx0aUZpbHRlcnMpOwogICAgICBpZiAobmV3Q29sbGFwc2VkLmhhcyhmaWx0ZXJLZXkpKSB7CiAgICAgICAgbmV3Q29sbGFwc2VkLmRlbGV0ZShmaWx0ZXJLZXkpOwogICAgICB9IGVsc2UgewogICAgICAgIG5ld0NvbGxhcHNlZC5hZGQoZmlsdGVyS2V5KTsKICAgICAgfQogICAgICB0aGlzLmNvbGxhcHNlZE11bHRpRmlsdGVycyA9IG5ld0NvbGxhcHNlZDsKICAgIH0KICAgIHRvZ2dsZUNvbGxhcHNlKCkgewogICAgICB0aGlzLmNvbGxhcHNlZCA9ICF0aGlzLmNvbGxhcHNlZDsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29sbGFwc2UtY2hhbmdlIiwgewogICAgICAgIGRldGFpbDogeyBjb2xsYXBzZWQ6IHRoaXMuY29sbGFwc2VkIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBzZWxlY3RUYWJJdGVtKGl0ZW0sIGdyb3VwKSB7CiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTsKICAgICAgaXRlbS5hY3Rpb24oKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiaXRlbS1zZWxlY3QiLCB7CiAgICAgICAgZGV0YWlsOiB7IGl0ZW0sIGdyb3VwIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBhc3luYyBoYW5kbGVBY3Rpb25DbGljayhpdGVtKSB7CiAgICAgIGlmIChpdGVtLmNvbmZpcm1NZXNzYWdlKSB7CiAgICAgICAgY29uc3QgY29uZmlybWVkID0gd2luZG93LmNvbmZpcm0oaXRlbS5jb25maXJtTWVzc2FnZSk7CiAgICAgICAgaWYgKCFjb25maXJtZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXdhaXQgaXRlbS5hY3Rpb24oKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYWN0aW9uLWNsaWNrIiwgewogICAgICAgIGRldGFpbDogeyBpdGVtIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVGaWx0ZXJUb2dnbGUoaXRlbSkgewogICAgICBjb25zdCBuZXdBY3RpdmUgPSAhaXRlbS5hY3RpdmU7CiAgICAgIGl0ZW0uYWN0aXZlID0gbmV3QWN0aXZlOwogICAgICBpdGVtLm9uVG9nZ2xlKG5ld0FjdGl2ZSk7CiAgICAgIHRoaXMucmVuZGVyQ291bnRlcisrOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJmaWx0ZXItdG9nZ2xlIiwgewogICAgICAgIGRldGFpbDogeyBpdGVtLCBhY3RpdmU6IG5ld0FjdGl2ZSB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTXVsdGlGaWx0ZXJPcHRpb25Ub2dnbGUoaXRlbSwgb3B0aW9uS2V5KSB7CiAgICAgIGNvbnN0IG9wdGlvbjIgPSBpdGVtLm9wdGlvbnMuZmluZCgob3B0KSA9PiBvcHQua2V5ID09PSBvcHRpb25LZXkpOwogICAgICBpZiAob3B0aW9uMikgewogICAgICAgIG9wdGlvbjIuY2hlY2tlZCA9ICFvcHRpb24yLmNoZWNrZWQ7CiAgICAgIH0KICAgICAgY29uc3Qgc2VsZWN0ZWRLZXlzID0gaXRlbS5vcHRpb25zLmZpbHRlcigob3B0KSA9PiBvcHQuY2hlY2tlZCkubWFwKChvcHQpID0+IG9wdC5rZXkpOwogICAgICBpdGVtLm9uQ2hhbmdlKHNlbGVjdGVkS2V5cyk7CiAgICAgIHRoaXMucmVuZGVyQ291bnRlcisrOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtdWx0aWZpbHRlci1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IGl0ZW0sIHNlbGVjdGVkS2V5cyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTGlua0NsaWNrKGl0ZW0pIHsKICAgICAgY29uc3QgaXNFeHRlcm5hbCA9IGl0ZW0uZXh0ZXJuYWwgPz8gaXRlbS5ocmVmLnN0YXJ0c1dpdGgoImh0dHAiKTsKICAgICAgaWYgKGlzRXh0ZXJuYWwpIHsKICAgICAgICB3aW5kb3cub3BlbihpdGVtLmhyZWYsICJfYmxhbmsiLCAibm9vcGVuZXIsbm9yZWZlcnJlciIpOwogICAgICB9IGVsc2UgewogICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gaXRlbS5ocmVmOwogICAgICB9CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxpbmstY2xpY2siLCB7CiAgICAgICAgZGV0YWlsOiB7IGl0ZW0gfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZUNvbnRleHRNZW51KGV2ZW50LCBpdGVtKSB7CiAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJWaWV3IGRldGFpbHMiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZXllIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkVkaXQiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6cGVuY2lsIgogICAgICAgIH0KICAgICAgXSk7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGF3YWl0IHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAodGhpcy5ncm91cHMubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IGluaXRpYWxDb2xsYXBzZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICAgIGNvbnN0IGluaXRpYWxNdWx0aUZpbHRlckNvbGxhcHNlZCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgICAgICAgdGhpcy5ncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHsKICAgICAgICAgIGlmIChncm91cC5jb2xsYXBzZWQpIHsKICAgICAgICAgICAgaW5pdGlhbENvbGxhcHNlZC5hZGQoZ3JvdXAubmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgICBncm91cC5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgICAgIGlmICgidHlwZSIgaW4gaXRlbSAmJiBpdGVtLnR5cGUgPT09ICJtdWx0aUZpbHRlciIpIHsKICAgICAgICAgICAgICBjb25zdCBtdWx0aUZpbHRlciA9IGl0ZW07CiAgICAgICAgICAgICAgaWYgKG11bHRpRmlsdGVyLmNvbGxhcHNlZCkgewogICAgICAgICAgICAgICAgaW5pdGlhbE11bHRpRmlsdGVyQ29sbGFwc2VkLmFkZChtdWx0aUZpbHRlci5rZXkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5jb2xsYXBzZWRHcm91cHMgPSBpbml0aWFsQ29sbGFwc2VkOwogICAgICAgIHRoaXMuY29sbGFwc2VkTXVsdGlGaWx0ZXJzID0gaW5pdGlhbE11bHRpRmlsdGVyQ29sbGFwc2VkOwogICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEl0ZW0pIHsKICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgdGhpcy5ncm91cHMpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGdyb3VwLml0ZW1zKSB7CiAgICAgICAgICAgICAgY29uc3QgaXRlbVR5cGUgPSAidHlwZSIgaW4gaXRlbSA/IGl0ZW0udHlwZSA6ICJ0YWIiOwogICAgICAgICAgICAgIGlmIChpdGVtVHlwZSA9PT0gInRhYiIgfHwgaXRlbVR5cGUgPT09IHZvaWQgMCkgewogICAgICAgICAgICAgICAgY29uc3QgdGFiSXRlbSA9IGl0ZW07CiAgICAgICAgICAgICAgICBpZiAoIXRhYkl0ZW0uZGlzYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUYWJJdGVtKHRhYkl0ZW0sIGdyb3VwKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk9wdGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gdGhpcy5zZWxlY3Rpb25PcHRpb25zLmZpbmQoKG9wdCkgPT4gISgiZGl2aWRlciIgaW4gb3B0KSk7CiAgICAgICAgaWYgKGZpcnN0T3B0aW9uICYmICF0aGlzLnNlbGVjdGVkSXRlbSkgewogICAgICAgICAgY29uc3QgdGFiSXRlbSA9IHsKICAgICAgICAgICAga2V5OiBmaXJzdE9wdGlvbi5rZXksCiAgICAgICAgICAgIGljb25OYW1lOiBmaXJzdE9wdGlvbi5pY29uTmFtZSwKICAgICAgICAgICAgYWN0aW9uOiBmaXJzdE9wdGlvbi5hY3Rpb24KICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLnNlbGVjdFRhYkl0ZW0odGFiSXRlbSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNBcHB1aVNlY29uZGFyeW1lbnUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLXRhYnMvZGVlcy1hcHB1aS10YWJzLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9fZXNEZWNvcmF0ZTM5ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0MCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVtb0Nsb3NlYWJsZVRhYnMgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZW1vLWNsb3NlYWJsZS10YWJzIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfdGFic19kZWNvcmF0b3JzOwogIGxldCBfdGFic19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYkNvdW50ZXJfZGVjb3JhdG9yczsKICBsZXQgX3RhYkNvdW50ZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlbW9DbG9zZWFibGVUYWJzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3RhYnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3RhYkNvdW50ZXJfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMzkodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM5KHRoaXMsIG51bGwsIF90YWJDb3VudGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYkNvdW50ZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRhYkNvdW50ZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGFiQ291bnRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGFiQ291bnRlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90YWJDb3VudGVyX2luaXRpYWxpemVycywgX3RhYkNvdW50ZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlbW9DbG9zZWFibGVUYWJzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAjdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfdGFic19pbml0aWFsaXplcnMsIFsKICAgICAgeyBrZXk6ICJNYWluIiwgaWNvbk5hbWU6ICJsdWNpZGU6aG9tZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIk1haW4gY2xpY2tlZCIpIH0KICAgIF0pOwogICAgZ2V0IHRhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RhYkNvdW50ZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfdGFiQ291bnRlcl9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCB0YWJDb3VudGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jdGFiQ291bnRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhYkNvdW50ZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYkNvdW50ZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuY29udHJvbHMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgfQogICAgICBidXR0b24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMykiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMykiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiKX07CiAgICAgIH0KICAgICAgLmluZm8gewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsMCwwLDAuMDIpIiwgInJnYmEoMjU1LDI1NSwyNTUsMC4wMikiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIGFkZFRhYigpIHsKICAgICAgdGhpcy50YWJDb3VudGVyKys7CiAgICAgIGNvbnN0IHRhYktleSA9IGBEb2N1bWVudCAke3RoaXMudGFiQ291bnRlcn1gOwogICAgICB0aGlzLnRhYnMgPSBbCiAgICAgICAgLi4udGhpcy50YWJzLAogICAgICAgIHsKICAgICAgICAgIGtleTogdGFiS2V5LAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZSIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKGAke3RhYktleX0gY2xpY2tlZGApLAogICAgICAgICAgY2xvc2VhYmxlOiB0cnVlLAogICAgICAgICAgb25DbG9zZTogKCkgPT4gdGhpcy5yZW1vdmVUYWIodGFiS2V5KQogICAgICAgIH0KICAgICAgXTsKICAgIH0KICAgIHJlbW92ZVRhYih0YWJLZXkpIHsKICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJzLmZpbHRlcigodDkpID0+IHQ5LmtleSAhPT0gdGFiS2V5KTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy1hcHB1aS10YWJzCiAgICAgICAgLnRhYnM9JHt0aGlzLnRhYnN9CiAgICAgICAgQHRhYi1jbG9zZT0keyhlMTEpID0+IHRoaXMucmVtb3ZlVGFiKGUxMS5kZXRhaWwudGFiLmtleSl9CiAgICAgID48L2RlZXMtYXBwdWktdGFicz4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCkgPT4gdGhpcy5hZGRUYWIoKX0+KyBBZGQgTmV3IFRhYjwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaW5mbyI+CiAgICAgICAgQ2xpY2sgdGhlIFggYnV0dG9uIG9uIHRhYnMgdG8gY2xvc2UgdGhlbS4gVGhlICJNYWluIiB0YWIgaXMgbm90IGNsb3NlYWJsZS4KICAgICAgICA8YnI+Q3VycmVudCB0YWJzOiAke3RoaXMudGFicy5sZW5ndGh9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF90YWJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9DbG9zZWFibGVUYWJzMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CnZhciBEZW1vQXV0b0hpZGVUYWJzID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVtby1hdXRvaGlkZS10YWJzIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfdGFic19kZWNvcmF0b3JzOwogIGxldCBfdGFic19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9IaWRlX2RlY29yYXRvcnM7CiAgbGV0IF9hdXRvSGlkZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9IaWRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90aHJlc2hvbGRfZGVjb3JhdG9yczsKICBsZXQgX3RocmVzaG9sZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZW1vQXV0b0hpZGVUYWJzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3RhYnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2F1dG9IaWRlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF90aHJlc2hvbGRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMzkodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM5KHRoaXMsIG51bGwsIF9hdXRvSGlkZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhdXRvSGlkZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXV0b0hpZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXV0b0hpZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmF1dG9IaWRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2F1dG9IaWRlX2luaXRpYWxpemVycywgX2F1dG9IaWRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzkodGhpcywgbnVsbCwgX3RocmVzaG9sZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0aHJlc2hvbGQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRocmVzaG9sZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aHJlc2hvbGQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRocmVzaG9sZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90aHJlc2hvbGRfaW5pdGlhbGl6ZXJzLCBfdGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzkobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZW1vQXV0b0hpZGVUYWJzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAjdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfdGFic19pbml0aWFsaXplcnMsIFsKICAgICAgeyBrZXk6ICJUYWIgMSIsIGljb25OYW1lOiAibHVjaWRlOmZpbGUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJUYWIgMSIpIH0sCiAgICAgIHsga2V5OiAiVGFiIDIiLCBpY29uTmFtZTogImx1Y2lkZTpmaWxlIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiVGFiIDIiKSB9CiAgICBdKTsKICAgIGdldCB0YWJzKCkgewogICAgICByZXR1cm4gdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhYnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDAodGhpcywgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF9hdXRvSGlkZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBhdXRvSGlkZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXV0b0hpZGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfYXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF90aHJlc2hvbGRfaW5pdGlhbGl6ZXJzLCAxKSk7CiAgICBnZXQgdGhyZXNob2xkKCkgewogICAgICByZXR1cm4gdGhpcy4jdGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGhyZXNob2xkKHZhbHVlMikgewogICAgICB0aGlzLiN0aHJlc2hvbGRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAudGFicy1jb250YWluZXIgewogICAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQogICAgICAudGFicy1jb250YWluZXIgZGVlcy1hcHB1aS10YWJzIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAucGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ExYTFhYSIsICIjNzE3MTdhIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgLmNvbnRyb2xzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIGJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICBidXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIpfTsKICAgICAgfQogICAgICBidXR0b24uZGFuZ2VyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC4xKSIsICJyZ2JhKDIzOSwgNjgsIDY4LCAwLjEpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjM5LCA2OCwgNjgsIDAuMykiLCAicmdiYSgyMzksIDY4LCA2OCwgMC4zKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlZjQ0NDQiLCAiI2Y4NzE3MSIpfTsKICAgICAgfQogICAgICBidXR0b24uZGFuZ2VyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC4yKSIsICJyZ2JhKDIzOSwgNjgsIDY4LCAwLjIpIil9OwogICAgICB9CiAgICAgIC5pbmZvIHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLDAsMCwwLjAyKSIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMDIpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KICAgIGAKICAgIF07CiAgICB0YWJDb3VudGVyID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDAodGhpcywgX3RocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyksIDIpOwogICAgYWRkVGFiKCkgewogICAgICB0aGlzLnRhYkNvdW50ZXIrKzsKICAgICAgdGhpcy50YWJzID0gWy4uLnRoaXMudGFicywgewogICAgICAgIGtleTogYFRhYiAke3RoaXMudGFiQ291bnRlcn1gLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZpbGUiLAogICAgICAgIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coYFRhYiAke3RoaXMudGFiQ291bnRlcn1gKQogICAgICB9XTsKICAgIH0KICAgIHJlbW92ZUxhc3RUYWIoKSB7CiAgICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFicy5zbGljZSgwLCAtMSk7CiAgICAgIH0KICAgIH0KICAgIGNsZWFyVGFicygpIHsKICAgICAgdGhpcy50YWJzID0gW107CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IHNob3VsZEhpZGUgPSB0aGlzLmF1dG9IaWRlICYmIHRoaXMudGFicy5sZW5ndGggPD0gdGhpcy50aHJlc2hvbGQ7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0idGFicy1jb250YWluZXIiPgogICAgICAgICR7c2hvdWxkSGlkZSA/IGIyYDxzcGFuIGNsYXNzPSJwbGFjZWhvbGRlciI+VGFicyBoaWRkZW4gKCR7dGhpcy50YWJzLmxlbmd0aH0gdGFicyDiiaQgdGhyZXNob2xkICR7dGhpcy50aHJlc2hvbGR9KTwvc3Bhbj5gIDogYjJgPGRlZXMtYXBwdWktdGFicwogICAgICAgICAgICAgIC50YWJzPSR7dGhpcy50YWJzfQogICAgICAgICAgICAgIC5hdXRvSGlkZT0ke3RoaXMuYXV0b0hpZGV9CiAgICAgICAgICAgICAgLmF1dG9IaWRlVGhyZXNob2xkPSR7dGhpcy50aHJlc2hvbGR9CiAgICAgICAgICAgID48L2RlZXMtYXBwdWktdGFicz5gfQogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCkgPT4gdGhpcy5hZGRUYWIoKX0+KyBBZGQgVGFiPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGFuZ2VyIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnJlbW92ZUxhc3RUYWIoKX0+LSBSZW1vdmUgVGFiPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGFuZ2VyIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNsZWFyVGFicygpfT5DbGVhciBBbGw8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpID0+IHsKICAgICAgICB0aGlzLnRocmVzaG9sZCA9IDA7CiAgICAgIH19PlRocmVzaG9sZDogMDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCkgPT4gewogICAgICAgIHRoaXMudGhyZXNob2xkID0gMTsKICAgICAgfX0+VGhyZXNob2xkOiAxPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgICAgICAgdGhpcy50aHJlc2hvbGQgPSAyOwogICAgICB9fT5UaHJlc2hvbGQ6IDI8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImluZm8iPgogICAgICAgIEF1dG8taGlkZTogJHt0aGlzLmF1dG9IaWRlID8gIk9OIiA6ICJPRkYifSB8IFRocmVzaG9sZDogJHt0aGlzLnRocmVzaG9sZH0gfCBUYWJzOiAke3RoaXMudGFicy5sZW5ndGh9CiAgICAgICAgPGJyPlRhYnMgd2lsbCBoaWRlIHdoZW4gY291bnQg4omkIHRocmVzaG9sZC4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0MChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVtb0F1dG9IaWRlVGFiczIgPSBfY2xhc3NUaGlzOwp9KSgpOwp2YXIgZGVtb0Z1bmMzMCA9ICgpID0+IHsKICBjb25zdCBob3Jpem9udGFsVGFicyA9IFsKICAgIHsga2V5OiAiSG9tZSIsIGljb25OYW1lOiAibHVjaWRlOmhvbWUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJIb21lIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJBbmFseXRpY3MgRGFzaGJvYXJkIiwgaWNvbk5hbWU6ICJsdWNpZGU6bGluZUNoYXJ0IiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQW5hbHl0aWNzIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJSZXBvcnRzIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVRleHQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJSZXBvcnRzIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJVc2VyIFNldHRpbmdzIiwgaWNvbk5hbWU6ICJsdWNpZGU6c2V0dGluZ3MiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJTZXR0aW5ncyBjbGlja2VkIikgfSwKICAgIHsga2V5OiAiSGVscCIsIGljb25OYW1lOiAibHVjaWRlOmhlbHBDaXJjbGUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJIZWxwIGNsaWNrZWQiKSB9CiAgXTsKICBjb25zdCB2ZXJ0aWNhbFRhYnMgPSBbCiAgICB7IGtleTogIlByb2ZpbGUiLCBpY29uTmFtZTogImx1Y2lkZTp1c2VyIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUHJvZmlsZSBjbGlja2VkIikgfSwKICAgIHsga2V5OiAiU2VjdXJpdHkiLCBpY29uTmFtZTogImx1Y2lkZTpzaGllbGQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJTZWN1cml0eSBjbGlja2VkIikgfSwKICAgIHsga2V5OiAiTm90aWZpY2F0aW9ucyIsIGljb25OYW1lOiAibHVjaWRlOmJlbGwiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJOb3RpZmljYXRpb25zIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJJbnRlZ3JhdGlvbnMiLCBpY29uTmFtZTogImx1Y2lkZTpsaW5rIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiSW50ZWdyYXRpb25zIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJBZHZhbmNlZCIsIGljb25OYW1lOiAibHVjaWRlOmNvZGUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJBZHZhbmNlZCBjbGlja2VkIikgfQogIF07CiAgY29uc3Qgbm9JbmRpY2F0b3JUYWJzID0gWwogICAgeyBrZXk6ICJBbGwiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJBbGwgY2xpY2tlZCIpIH0sCiAgICB7IGtleTogIkFjdGl2ZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFjdGl2ZSBjbGlja2VkIikgfSwKICAgIHsga2V5OiAiQ29tcGxldGVkIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQ29tcGxldGVkIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJBcmNoaXZlZCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFyY2hpdmVkIGNsaWNrZWQiKSB9CiAgXTsKICBjb25zdCBkZW1vQ29udGVudCA9ICh0ZXh0OSkgPT4gYjJgCiAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyNHB4OyBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsiPgogICAgICAke3RleHQ5fQogICAgPC9kaXY+CiAgYDsKICByZXR1cm4gYjJgCiAgICA8c3R5bGU+CiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0OHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjhmOWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgIH0KCiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgfQoKICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC50d28tY29sdW1uIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMjAwcHggMWZyOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkhvcml6b250YWwgVGFicyB3aXRoIEFuaW1hdGVkIEluZGljYXRvcjwvZGl2PgogICAgICAgIDxkZWVzLWFwcHVpLXRhYnMgLnRhYnM9JHtob3Jpem9udGFsVGFic30+PC9kZWVzLWFwcHVpLXRhYnM+CiAgICAgICAgJHtkZW1vQ29udGVudCgiU2VsZWN0IGEgdGFiIHRvIHNlZSB0aGUgc21vb3RoIHNsaWRpbmcgYW5pbWF0aW9uIG9mIHRoZSBpbmRpY2F0b3IuIFRoZSBpbmRpY2F0b3IgYXV0b21hdGljYWxseSBhZGp1c3RzIGl0cyB3aWR0aCB0byBtYXRjaCB0aGUgdGFiIGNvbnRlbnQgd2l0aCBtaW5pbWFsIHBhZGRpbmcuIil9CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Q2xvc2VhYmxlIFRhYnMgKEJyb3dzZXItc3R5bGUpPC9kaXY+CiAgICAgICAgPGRlbW8tY2xvc2VhYmxlLXRhYnM+PC9kZW1vLWNsb3NlYWJsZS10YWJzPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkF1dG8taGlkZSBUYWJzPC9kaXY+CiAgICAgICAgPGRlbW8tYXV0b2hpZGUtdGFicz48L2RlbW8tYXV0b2hpZGUtdGFicz4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5WZXJ0aWNhbCBUYWJzIExheW91dDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InR3by1jb2x1bW4iPgogICAgICAgICAgPGRlZXMtYXBwdWktdGFicyAudGFiU3R5bGU9JHsidmVydGljYWwifSAudGFicz0ke3ZlcnRpY2FsVGFic30+PC9kZWVzLWFwcHVpLXRhYnM+CiAgICAgICAgICAke2RlbW9Db250ZW50KCJWZXJ0aWNhbCB0YWJzIHdvcmsgZ3JlYXQgZm9yIHNldHRpbmdzIHBhZ2VzIGFuZCBuYXZpZ2F0aW9uIG1lbnVzLiBUaGUgYW5pbWF0ZWQgaW5kaWNhdG9yIHNtb290aGx5IHRyYW5zaXRpb25zIGJldHdlZW4gc2VsZWN0aW9ucy4iKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5XaXRob3V0IEluZGljYXRvcjwvZGl2PgogICAgICAgIDxkZWVzLWFwcHVpLXRhYnMgLnNob3dUYWJJbmRpY2F0b3I9JHtmYWxzZX0gLnRhYnM9JHtub0luZGljYXRvclRhYnN9PjwvZGVlcy1hcHB1aS10YWJzPgogICAgICAgICR7ZGVtb0NvbnRlbnQoIlRhYnMgY2FuIGFsc28gYmUgdXNlZCB3aXRob3V0IHRoZSBhbmltYXRlZCBpbmRpY2F0b3IgYnkgc2V0dGluZyBzaG93VGFiSW5kaWNhdG9yIHRvIGZhbHNlLiIpfQogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS10YWJzL2RlZXMtYXBwdWktdGFicy5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU0MCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNDEgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aVRhYnMgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWFwcHVpLXRhYnMiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF90YWJzX2RlY29yYXRvcnM7CiAgbGV0IF90YWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGFic19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUYWJfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dUYWJJbmRpY2F0b3JfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dUYWJJbmRpY2F0b3JfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93VGFiSW5kaWNhdG9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJTdHlsZV9kZWNvcmF0b3JzOwogIGxldCBfdGFiU3R5bGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJTdHlsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b0hpZGVfZGVjb3JhdG9yczsKICBsZXQgX2F1dG9IaWRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9IaWRlVGhyZXNob2xkX2RlY29yYXRvcnM7CiAgbGV0IF9hdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9IaWRlVGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jYW5TY3JvbGxMZWZ0X2RlY29yYXRvcnM7CiAgbGV0IF9jYW5TY3JvbGxMZWZ0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2FuU2Nyb2xsTGVmdF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2FuU2Nyb2xsUmlnaHRfZGVjb3JhdG9yczsKICBsZXQgX2NhblNjcm9sbFJpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2FuU2Nyb2xsUmlnaHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0FwcHVpVGFiczIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX3NlbGVjdGVkVGFiX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfc2hvd1RhYkluZGljYXRvcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF90YWJTdHlsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2F1dG9IaWRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2F1dG9IaWRlVGhyZXNob2xkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfY2FuU2Nyb2xsTGVmdF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY2FuU2Nyb2xsUmlnaHRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlNDAodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQwKHRoaXMsIG51bGwsIF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFRhYiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRUYWIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRUYWIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVGFiID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDAodGhpcywgbnVsbCwgX3Nob3dUYWJJbmRpY2F0b3JfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1RhYkluZGljYXRvciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1RhYkluZGljYXRvciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93VGFiSW5kaWNhdG9yLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93VGFiSW5kaWNhdG9yID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dUYWJJbmRpY2F0b3JfaW5pdGlhbGl6ZXJzLCBfc2hvd1RhYkluZGljYXRvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQwKHRoaXMsIG51bGwsIF90YWJTdHlsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0YWJTdHlsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFiU3R5bGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGFiU3R5bGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRhYlN0eWxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYlN0eWxlX2luaXRpYWxpemVycywgX3RhYlN0eWxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDAodGhpcywgbnVsbCwgX2F1dG9IaWRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImF1dG9IaWRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhdXRvSGlkZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hdXRvSGlkZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXV0b0hpZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXV0b0hpZGVfaW5pdGlhbGl6ZXJzLCBfYXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MCh0aGlzLCBudWxsLCBfYXV0b0hpZGVUaHJlc2hvbGRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXV0b0hpZGVUaHJlc2hvbGQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9IaWRlVGhyZXNob2xkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmF1dG9IaWRlVGhyZXNob2xkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hdXRvSGlkZVRocmVzaG9sZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIF9hdXRvSGlkZVRocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQwKHRoaXMsIG51bGwsIF9jYW5TY3JvbGxMZWZ0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNhblNjcm9sbExlZnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNhblNjcm9sbExlZnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY2FuU2Nyb2xsTGVmdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY2FuU2Nyb2xsTGVmdCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jYW5TY3JvbGxMZWZ0X2luaXRpYWxpemVycywgX2NhblNjcm9sbExlZnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MCh0aGlzLCBudWxsLCBfY2FuU2Nyb2xsUmlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY2FuU2Nyb2xsUmlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNhblNjcm9sbFJpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNhblNjcm9sbFJpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jYW5TY3JvbGxSaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jYW5TY3JvbGxSaWdodF9pbml0aWFsaXplcnMsIF9jYW5TY3JvbGxSaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQwKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0FwcHVpVGFiczIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzMwOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX3RhYnNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHRhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfdGFic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IHNlbGVjdGVkVGFiKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZFRhYih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93VGFiSW5kaWNhdG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfc2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9zaG93VGFiSW5kaWNhdG9yX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IHNob3dUYWJJbmRpY2F0b3IoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93VGFiSW5kaWNhdG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1RhYkluZGljYXRvcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd1RhYkluZGljYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RhYlN0eWxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfc2hvd1RhYkluZGljYXRvcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX3RhYlN0eWxlX2luaXRpYWxpemVycywgImhvcml6b250YWwiKSk7CiAgICBnZXQgdGFiU3R5bGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJTdHlsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhYlN0eWxlKHZhbHVlMikgewogICAgICB0aGlzLiN0YWJTdHlsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfdGFiU3R5bGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9hdXRvSGlkZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgYXV0b0hpZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGF1dG9IaWRlKHZhbHVlMikgewogICAgICB0aGlzLiNhdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfYXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9hdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBhdXRvSGlkZVRocmVzaG9sZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXV0b0hpZGVUaHJlc2hvbGQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY2FuU2Nyb2xsTGVmdF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX2F1dG9IaWRlVGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfY2FuU2Nyb2xsTGVmdF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAvLyBTY3JvbGwgc3RhdGUgZm9yIGZhZGUgaW5kaWNhdG9ycwogICAgZ2V0IGNhblNjcm9sbExlZnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjYW5TY3JvbGxMZWZ0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2FuU2Nyb2xsTGVmdCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY2FuU2Nyb2xsTGVmdF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NhblNjcm9sbFJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfY2FuU2Nyb2xsTGVmdF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX2NhblNjcm9sbFJpZ2h0X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBjYW5TY3JvbGxSaWdodCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NhblNjcm9sbFJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2FuU2Nyb2xsUmlnaHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NhblNjcm9sbFJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICByZXNpemVPYnNlcnZlciA9IChfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9jYW5TY3JvbGxSaWdodF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC50YWJzLXdyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC50YWJzLXdyYXBwZXIuaG9yaXpvbnRhbC13cmFwcGVyIHsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAvKiBTY3JvbGwgZmFkZSBpbmRpY2F0b3JzICovCiAgICAgIC5zY3JvbGwtZmFkZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDFweDsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICB9CgogICAgICAuc2Nyb2xsLWZhZGUtbGVmdCB7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsCiAgICAgICAgICAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTYxNjE2Iil9IDAlLAogICAgICAgICAgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjU1LDI1NSwyNTUsMCkiLCAicmdiYSgyMiwyMiwyMiwwKSIpfSAxMDAlKTsKICAgICAgfQoKICAgICAgLnNjcm9sbC1mYWRlLXJpZ2h0IHsKICAgICAgICByaWdodDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwKICAgICAgICAgICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxNjE2MTYiKX0gMCUsCiAgICAgICAgICAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNTUsMjU1LDI1NSwwKSIsICJyZ2JhKDIyLDIyLDIyLDApIil9IDEwMCUpOwogICAgICB9CgogICAgICAuc2Nyb2xsLWZhZGUudmlzaWJsZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC50YWJzQ29udGFpbmVyLmhvcml6b250YWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICAgICAgc2Nyb2xsYmFyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAvKiBTaG93IHNjcm9sbGJhciBvbiBob3ZlciAqLwogICAgICAudGFicy13cmFwcGVyOmhvdmVyIC50YWJzQ29udGFpbmVyLmhvcml6b250YWwgewogICAgICAgIHNjcm9sbGJhci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4yKSIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMikiKX0gdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC50YWJzQ29udGFpbmVyLmhvcml6b250YWw6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBoZWlnaHQ6IDRweDsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAudGFic0NvbnRhaW5lci5ob3Jpem9udGFsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycyBlYXNlOwogICAgICB9CgogICAgICAudGFicy13cmFwcGVyOmhvdmVyIC50YWJzQ29udGFpbmVyLmhvcml6b250YWw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLDAsMCwwLjIpIiwgInJnYmEoMjU1LDI1NSwyNTUsMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnRhYnMtd3JhcHBlcjpob3ZlciAudGFic0NvbnRhaW5lci5ob3Jpem9udGFsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4zNSkiLCAicmdiYSgyNTUsMjU1LDI1NSwwLjM1KSIpfTsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIudmVydGljYWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGdhcDogMnB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMTgxODFiIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgfQoKICAgICAgLnRhYiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAyOwogICAgICB9CgogICAgICAuaG9yaXpvbnRhbCAudGFiIHsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmhvcml6b250YWwgLnRhYjpub3QoOmxhc3QtY2hpbGQpOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAtMnB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQogICAgICAKICAgICAgLmhvcml6b250YWwgLnRhYiAudGFiLWNvbnRlbnQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCAudGFiIHsKICAgICAgICBwYWRkaW5nOiAxMHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnRhYjpob3ZlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDMpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMykiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWI6aG92ZXI6OmFmdGVyLAogICAgICAuaG9yaXpvbnRhbCAudGFiOmhvdmVyICsgLnRhYjo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCAudGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNDQsIDI0NCwgMjQ1LCAwLjUpIiwgInJnYmEoMzksIDM5LCA0MiwgMC41KSIpfTsKICAgICAgfQoKICAgICAgLmhvcml6b250YWwgLnRhYi5zZWxlY3RlZFRhYiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWIuc2VsZWN0ZWRUYWI6OmFmdGVyLAogICAgICAuaG9yaXpvbnRhbCAudGFiLnNlbGVjdGVkVGFiICsgLnRhYjo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCAudGFiLnNlbGVjdGVkVGFiIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLnRhYiBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgfQoKICAgICAgLnRhYkluZGljYXRvciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQogICAgICAKICAgICAgLnRhYkluZGljYXRvci5uby10cmFuc2l0aW9uIHsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICAudGFicy13cmFwcGVyIC50YWJJbmRpY2F0b3IgewogICAgICAgIGhlaWdodDogM3B4OwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweCAzcHggMCAwOwogICAgICAgIHotaW5kZXg6IDM7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbC13cmFwcGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbC13cmFwcGVyIC50YWJJbmRpY2F0b3IgewogICAgICAgIGxlZnQ6IDhweDsKICAgICAgICByaWdodDogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMjcyNzJhIil9OwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wOCk7CiAgICAgIH0KCiAgICAgIC8qIENsb3NlIGJ1dHRvbiAqLwogICAgICAudGFiLWNsb3NlIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cywgYmFja2dyb3VuZCAwLjE1czsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiIzcxNzE3YSIpfTsKICAgICAgfQoKICAgICAgLnRhYjpob3ZlciAudGFiLWNsb3NlIHsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC50YWItY2xvc2U6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4xKSIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWY0NDQ0IiwgIiNmODcxNzEiKX07CiAgICAgIH0KCiAgICAgIC50YWIuc2VsZWN0ZWRUYWIgLnRhYi1jbG9zZSB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAudGFiLnNlbGVjdGVkVGFiOmhvdmVyIC50YWItY2xvc2UgewogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgfQoKICAgICAgLnRhYi5zZWxlY3RlZFRhYiAudGFiLWNsb3NlOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICBpZiAodGhpcy5hdXRvSGlkZSAmJiB0aGlzLnRhYnMubGVuZ3RoIDw9IHRoaXMuYXV0b0hpZGVUaHJlc2hvbGQpIHsKICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgfQogICAgICByZXR1cm4gYjJgCiAgICAgICR7dGhpcy5yZW5kZXJUYWJzV3JhcHBlcigpfQogICAgYDsKICAgIH0KICAgIHJlbmRlclRhYnNXcmFwcGVyKCkgewogICAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLnRhYlN0eWxlID09PSAiaG9yaXpvbnRhbCI7CiAgICAgIGNvbnN0IHdyYXBwZXJDbGFzcyA9IGlzSG9yaXpvbnRhbCA/ICJ0YWJzLXdyYXBwZXIgaG9yaXpvbnRhbC13cmFwcGVyIiA6ICJ2ZXJ0aWNhbC13cmFwcGVyIjsKICAgICAgY29uc3QgY29udGFpbmVyQ2xhc3MgPSBgdGFic0NvbnRhaW5lciAke3RoaXMudGFiU3R5bGV9YDsKICAgICAgaWYgKGlzSG9yaXpvbnRhbCkgewogICAgICAgIHJldHVybiBiMmAKICAgICAgICA8ZGl2IGNsYXNzPSIke3dyYXBwZXJDbGFzc30iPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2Nyb2xsLWZhZGUgc2Nyb2xsLWZhZGUtbGVmdCAke3RoaXMuY2FuU2Nyb2xsTGVmdCA/ICJ2aXNpYmxlIiA6ICIifSI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSIke2NvbnRhaW5lckNsYXNzfSIgQHNjcm9sbD0ke3RoaXMuaGFuZGxlU2Nyb2xsfT4KICAgICAgICAgICAgJHt0aGlzLnRhYnMubWFwKCh0YWIyKSA9PiB0aGlzLnJlbmRlclRhYih0YWIyLCBpc0hvcml6b250YWwpKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2Nyb2xsLWZhZGUgc2Nyb2xsLWZhZGUtcmlnaHQgJHt0aGlzLmNhblNjcm9sbFJpZ2h0ID8gInZpc2libGUiIDogIiJ9Ij48L2Rpdj4KICAgICAgICAgICR7dGhpcy5zaG93VGFiSW5kaWNhdG9yID8gYjJgPGRpdiBjbGFzcz0idGFiSW5kaWNhdG9yIj48L2Rpdj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSIke3dyYXBwZXJDbGFzc30iPgogICAgICAgIDxkaXYgY2xhc3M9IiR7Y29udGFpbmVyQ2xhc3N9Ij4KICAgICAgICAgICR7dGhpcy50YWJzLm1hcCgodGFiMikgPT4gdGhpcy5yZW5kZXJUYWIodGFiMiwgaXNIb3Jpem9udGFsKSl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgJHt0aGlzLnNob3dUYWJJbmRpY2F0b3IgPyBiMmA8ZGl2IGNsYXNzPSJ0YWJJbmRpY2F0b3IiPjwvZGl2PmAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyVGFiKHRhYjIsIGlzSG9yaXpvbnRhbCkgewogICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGFiMiA9PT0gdGhpcy5zZWxlY3RlZFRhYjsKICAgICAgY29uc3QgY2xhc3NlcyA9IGB0YWIgJHtpc1NlbGVjdGVkID8gInNlbGVjdGVkVGFiIiA6ICIifWA7CiAgICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gdGFiMi5jbG9zZWFibGUgPyBiMmAKICAgICAgPHNwYW4gY2xhc3M9InRhYi1jbG9zZSIgQGNsaWNrPSIkeyhlMTEpID0+IHRoaXMuY2xvc2VUYWIoZTExLCB0YWIyKX0iPgogICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOngifSBzdHlsZT0iZm9udC1zaXplOiAxMnB4OyI+PC9kZWVzLWljb24+CiAgICAgIDwvc3Bhbj4KICAgIGAgOiAiIjsKICAgICAgY29uc3QgY29udGVudDMgPSBpc0hvcml6b250YWwgPyBiMmAKICAgICAgPHNwYW4gY2xhc3M9InRhYi1jb250ZW50Ij4KICAgICAgICAke3RoaXMucmVuZGVyVGFiSWNvbih0YWIyKX0KICAgICAgICAke3RhYjIua2V5fQogICAgICA8L3NwYW4+CiAgICAgICR7Y2xvc2VCdXR0b259CiAgICBgIDogYjJgCiAgICAgICR7dGhpcy5yZW5kZXJUYWJJY29uKHRhYjIpfQogICAgICAke3RhYjIua2V5fQogICAgICAke2Nsb3NlQnV0dG9ufQogICAgYDsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9IiR7Y2xhc3Nlc30iCiAgICAgICAgQGNsaWNrPSIkeygpID0+IHRoaXMuc2VsZWN0VGFiKHRhYjIpfSIKICAgICAgPgogICAgICAgICR7Y29udGVudDN9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlclRhYkljb24odGFiMikgewogICAgICByZXR1cm4gdGFiMi5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249JHt0YWIyLmljb25OYW1lfT48L2RlZXMtaWNvbj5gIDogIiI7CiAgICB9CiAgICBzZWxlY3RUYWIodGFiQXJnKSB7CiAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSB0YWJBcmc7CiAgICAgIHRhYkFyZy5hY3Rpb24oKTsKICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICB0aGlzLnNjcm9sbFRhYkludG9WaWV3KHRhYkFyZyk7CiAgICAgIH0pOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogeyB0YWI6IHRhYkFyZyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgY2xvc2VUYWIoZTExLCB0YWIyKSB7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgaWYgKHRhYjIub25DbG9zZSkgewogICAgICAgIHRhYjIub25DbG9zZSgpOwogICAgICB9CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1jbG9zZSIsIHsKICAgICAgICBkZXRhaWw6IHsgdGFiOiB0YWIyIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGlmICh0aGlzLnRhYnMgJiYgdGhpcy50YWJzLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLnNlbGVjdFRhYih0aGlzLnRhYnNbMF0pOwogICAgICB9CiAgICAgIHRoaXMuc2V0dXBSZXNpemVPYnNlcnZlcigpOwogICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsU3RhdGUoKTsKICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHsKICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbnVsbDsKICAgICAgfQogICAgfQogICAgc2V0dXBSZXNpemVPYnNlcnZlcigpIHsKICAgICAgaWYgKHRoaXMudGFiU3R5bGUgIT09ICJob3Jpem9udGFsIikKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsU3RhdGUoKTsKICAgICAgfSk7CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbCIpOwogICAgICBpZiAoY29udGFpbmVyKSB7CiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcik7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVNjcm9sbCA9ICgpID0+IHsKICAgICAgdGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpOwogICAgfTsKICAgIHVwZGF0ZVNjcm9sbFN0YXRlKCkgewogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50YWJzQ29udGFpbmVyLmhvcml6b250YWwiKTsKICAgICAgaWYgKCFjb250YWluZXIpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gY29udGFpbmVyLnNjcm9sbExlZnQ7CiAgICAgIGNvbnN0IHNjcm9sbFdpZHRoID0gY29udGFpbmVyLnNjcm9sbFdpZHRoOwogICAgICBjb25zdCBjbGllbnRXaWR0aCA9IGNvbnRhaW5lci5jbGllbnRXaWR0aDsKICAgICAgY29uc3QgdGhyZXNob2xkID0gMjsKICAgICAgdGhpcy5jYW5TY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdCA+IHRocmVzaG9sZDsKICAgICAgdGhpcy5jYW5TY3JvbGxSaWdodCA9IHNjcm9sbExlZnQgPCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gdGhyZXNob2xkOwogICAgfQogICAgc2Nyb2xsVGFiSW50b1ZpZXcodGFiMikgewogICAgICBpZiAodGhpcy50YWJTdHlsZSAhPT0gImhvcml6b250YWwiKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgdGFiSW5kZXggPSB0aGlzLnRhYnMuaW5kZXhPZih0YWIyKTsKICAgICAgaWYgKHRhYkluZGV4ID09PSAtMSkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbCIpOwogICAgICBjb25zdCB0YWJFbGVtZW50ID0gY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKGAudGFiOm50aC1jaGlsZCgke3RhYkluZGV4ICsgMX0pYCk7CiAgICAgIGlmICh0YWJFbGVtZW50ICYmIGNvbnRhaW5lcikgewogICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgdGFiUmVjdCA9IHRhYkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgaXNGdWxseVZpc2libGUgPSB0YWJSZWN0LmxlZnQgPj0gY29udGFpbmVyUmVjdC5sZWZ0ICYmIHRhYlJlY3QucmlnaHQgPD0gY29udGFpbmVyUmVjdC5yaWdodDsKICAgICAgICBpZiAoIWlzRnVsbHlWaXNpYmxlKSB7CiAgICAgICAgICB0YWJFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICJzbW9vdGgiLCBibG9jazogIm5lYXJlc3QiLCBpbmxpbmU6ICJuZWFyZXN0IiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInRhYnMiKSAmJiB0aGlzLnRhYnMgJiYgdGhpcy50YWJzLmxlbmd0aCA+IDAgJiYgIXRoaXMuc2VsZWN0ZWRUYWIpIHsKICAgICAgICB0aGlzLnNlbGVjdFRhYih0aGlzLnRhYnNbMF0pOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInNlbGVjdGVkVGFiIikgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJ0YWJzIikpIHsKICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgIGlmICghdGhpcy5pbmRpY2F0b3JJbml0aWFsaXplZCAmJiBkb2N1bWVudC5mb250cykgewogICAgICAgICAgYXdhaXQgZG9jdW1lbnQuZm9udHMucmVhZHk7CiAgICAgICAgfQogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICB0aGlzLnVwZGF0ZVRhYkluZGljYXRvcigpOwogICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBpbmRpY2F0b3JJbml0aWFsaXplZCA9IGZhbHNlOwogICAgdXBkYXRlVGFiSW5kaWNhdG9yKCkgewogICAgICBpZiAoIXRoaXMuc2hvdWxkU2hvd0luZGljYXRvcigpKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgc2VsZWN0ZWRUYWJFbGVtZW50ID0gdGhpcy5nZXRTZWxlY3RlZFRhYkVsZW1lbnQoKTsKICAgICAgaWYgKCFzZWxlY3RlZFRhYkVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBpbmRpY2F0b3IgPSB0aGlzLmdldEluZGljYXRvckVsZW1lbnQoKTsKICAgICAgaWYgKCFpbmRpY2F0b3IpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmhhbmRsZUluaXRpYWxUcmFuc2l0aW9uKGluZGljYXRvcik7CiAgICAgIGlmICh0aGlzLnRhYlN0eWxlID09PSAiaG9yaXpvbnRhbCIpIHsKICAgICAgICB0aGlzLnVwZGF0ZUhvcml6b250YWxJbmRpY2F0b3IoaW5kaWNhdG9yLCBzZWxlY3RlZFRhYkVsZW1lbnQpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMudXBkYXRlVmVydGljYWxJbmRpY2F0b3IoaW5kaWNhdG9yLCBzZWxlY3RlZFRhYkVsZW1lbnQpOwogICAgICB9CiAgICAgIGluZGljYXRvci5zdHlsZS5vcGFjaXR5ID0gIjEiOwogICAgfQogICAgc2hvdWxkU2hvd0luZGljYXRvcigpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWIgJiYgdGhpcy5zaG93VGFiSW5kaWNhdG9yICYmIHRoaXMudGFicy5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkVGFiKTsKICAgIH0KICAgIGdldFNlbGVjdGVkVGFiRWxlbWVudCgpIHsKICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMudGFicy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRUYWIpOwogICAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLnRhYlN0eWxlID09PSAiaG9yaXpvbnRhbCI7CiAgICAgIGNvbnN0IHNlbGVjdG9yID0gaXNIb3Jpem9udGFsID8gYC50YWJzLXdyYXBwZXIgLnRhYnNDb250YWluZXIgLnRhYjpudGgtY2hpbGQoJHtzZWxlY3RlZEluZGV4ICsgMX0pYCA6IGAudmVydGljYWwtd3JhcHBlciAudGFic0NvbnRhaW5lciAudGFiOm50aC1jaGlsZCgke3NlbGVjdGVkSW5kZXggKyAxfSlgOwogICAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOwogICAgfQogICAgZ2V0SW5kaWNhdG9yRWxlbWVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIudGFiSW5kaWNhdG9yIik7CiAgICB9CiAgICBoYW5kbGVJbml0aWFsVHJhbnNpdGlvbihpbmRpY2F0b3IpIHsKICAgICAgaWYgKCF0aGlzLmluZGljYXRvckluaXRpYWxpemVkKSB7CiAgICAgICAgaW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoIm5vLXRyYW5zaXRpb24iKTsKICAgICAgICB0aGlzLmluZGljYXRvckluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGluZGljYXRvci5jbGFzc0xpc3QucmVtb3ZlKCJuby10cmFuc2l0aW9uIik7CiAgICAgICAgfSwgNTApOwogICAgICB9CiAgICB9CiAgICB1cGRhdGVIb3Jpem9udGFsSW5kaWNhdG9yKGluZGljYXRvciwgdGFiRWxlbWVudCkgewogICAgICBjb25zdCB0YWJDb250ZW50ID0gdGFiRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIudGFiLWNvbnRlbnQiKTsKICAgICAgaWYgKCF0YWJDb250ZW50KQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgd3JhcHBlclJlY3QgPSBpbmRpY2F0b3IucGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgY29uc3QgY29udGVudFJlY3QgPSB0YWJDb250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCBjb250ZW50TGVmdCA9IGNvbnRlbnRSZWN0LmxlZnQgLSB3cmFwcGVyUmVjdC5sZWZ0OwogICAgICBjb25zdCBpbmRpY2F0b3JXaWR0aCA9IGNvbnRlbnRSZWN0LndpZHRoICsgODsKICAgICAgY29uc3QgaW5kaWNhdG9yTGVmdCA9IGNvbnRlbnRMZWZ0IC0gNDsKICAgICAgaW5kaWNhdG9yLnN0eWxlLndpZHRoID0gYCR7aW5kaWNhdG9yV2lkdGh9cHhgOwogICAgICBpbmRpY2F0b3Iuc3R5bGUubGVmdCA9IGAke2luZGljYXRvckxlZnR9cHhgOwogICAgfQogICAgdXBkYXRlVmVydGljYWxJbmRpY2F0b3IoaW5kaWNhdG9yLCB0YWJFbGVtZW50KSB7CiAgICAgIGNvbnN0IHRhYnNDb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnZlcnRpY2FsLXdyYXBwZXIgLnRhYnNDb250YWluZXIiKTsKICAgICAgaWYgKCF0YWJzQ29udGFpbmVyKQogICAgICAgIHJldHVybjsKICAgICAgaW5kaWNhdG9yLnN0eWxlLnRvcCA9IGAke3RhYkVsZW1lbnQub2Zmc2V0VG9wICsgdGFic0NvbnRhaW5lci5vZmZzZXRUb3B9cHhgOwogICAgICBpbmRpY2F0b3Iuc3R5bGUuaGVpZ2h0ID0gYCR7dGFiRWxlbWVudC5jbGllbnRIZWlnaHR9cHhgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0FwcHVpVGFiczIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktbWFpbmNvbnRlbnQvZGVlcy1hcHB1aS1tYWluY29udGVudC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU0MSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNDIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aU1haW5jb250ZW50ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hcHB1aS1tYWluY29udGVudCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3RhYnNfZGVjb3JhdG9yczsKICBsZXQgX3RhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRUYWJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFRhYl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1RhYnNfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dUYWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1RhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYnNBdXRvSGlkZV9kZWNvcmF0b3JzOwogIGxldCBfdGFic0F1dG9IaWRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGFic0F1dG9IaWRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJzQXV0b0hpZGVUaHJlc2hvbGRfZGVjb3JhdG9yczsKICBsZXQgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzQXBwdWlNYWluY29udGVudDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX3NlbGVjdGVkVGFiX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfc2hvd1RhYnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfdGFic0F1dG9IaWRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX19lc0RlY29yYXRlNDEodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQxKHRoaXMsIG51bGwsIF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFRhYiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRUYWIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRUYWIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVGFiID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDEodGhpcywgbnVsbCwgX3Nob3dUYWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dUYWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93VGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93VGFicywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd1RhYnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1RhYnNfaW5pdGlhbGl6ZXJzLCBfc2hvd1RhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MSh0aGlzLCBudWxsLCBfdGFic0F1dG9IaWRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYnNBdXRvSGlkZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFic0F1dG9IaWRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhYnNBdXRvSGlkZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGFic0F1dG9IaWRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNBdXRvSGlkZV9pbml0aWFsaXplcnMsIF90YWJzQXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MSh0aGlzLCBudWxsLCBfdGFic0F1dG9IaWRlVGhyZXNob2xkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYnNBdXRvSGlkZVRocmVzaG9sZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFic0F1dG9IaWRlVGhyZXNob2xkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhYnNBdXRvSGlkZVRocmVzaG9sZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGFic0F1dG9IaWRlVGhyZXNob2xkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIF90YWJzQXV0b0hpZGVUaHJlc2hvbGRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNBcHB1aU1haW5jb250ZW50MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYAogICAgPGRlZXMtYXBwdWktbWFpbmNvbnRlbnQKICAgICAgLnRhYnM9JHtbCiAgICAgIHsga2V5OiAiT3ZlcnZpZXciLCBpY29uTmFtZTogImx1Y2lkZTpob21lIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiT3ZlcnZpZXciKSB9LAogICAgICB7IGtleTogIkRldGFpbHMiLCBpY29uTmFtZTogImx1Y2lkZTpmaWxlIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiRGV0YWlscyIpIH0sCiAgICAgIHsga2V5OiAiU2V0dGluZ3MiLCBpY29uTmFtZTogImx1Y2lkZTpzZXR0aW5ncyIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlNldHRpbmdzIikgfQogICAgXX0KICAgID4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBzdHlsZT0icGFkZGluZzogNDBweDsgY29sb3I6ICNjY2M7Ij4KICAgICAgICA8aDE+TWFpbiBDb250ZW50IEFyZWE8L2gxPgogICAgICAgIDxwPlRoaXMgaXMgd2hlcmUgeW91ciBhcHBsaWNhdGlvbiBjb250ZW50IGdvZXMuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGVlcy1hcHB1aS1tYWluY29udGVudD4KICBgOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNfaW5pdGlhbGl6ZXJzLCBbCiAgICAgIHsga2V5OiAiXHUyNkEwXHVGRTBGIFBsZWFzZSBzZXQgdGFicyIsIGFjdGlvbjogKCkgPT4gY29uc29sZS53YXJuKCJObyB0YWJzIGNvbmZpZ3VyZWQgZm9yIG1haW5jb250ZW50IikgfQogICAgXSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHRhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Mih0aGlzLCBfdGFic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IHNlbGVjdGVkVGFiKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZFRhYih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93VGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Mih0aGlzLCBfc2hvd1RhYnNfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd1RhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93VGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dUYWJzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93VGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RhYnNBdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3Nob3dUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Mih0aGlzLCBfdGFic0F1dG9IaWRlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCB0YWJzQXV0b0hpZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzQXV0b0hpZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0YWJzQXV0b0hpZGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYnNBdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNBdXRvSGlkZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCB0YWJzQXV0b0hpZGVUaHJlc2hvbGQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzQXV0b0hpZGVUaHJlc2hvbGRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0YWJzQXV0b0hpZGVUaHJlc2hvbGQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byAxZnI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxNjE2MTYiKX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBjb250ZW50czsKICAgICAgfQoKICAgICAgLnRvcGJhciB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGdyaWQtdGVtcGxhdGUtcm93cyAwLjNzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50b3BiYXIgPiAqIHsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICB9CgogICAgICAuY29udGVudC1hcmVhIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtub3RhYnNdKSAudG9wYmFyIHsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDBmcjsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b3BiYXIiPgogICAgICAgICAgPGRlZXMtYXBwdWktdGFicwogICAgICAgICAgICAudGFicz0ke3RoaXMudGFic30KICAgICAgICAgICAgLnNlbGVjdGVkVGFiPSR7dGhpcy5zZWxlY3RlZFRhYn0KICAgICAgICAgICAgLnNob3dUYWJJbmRpY2F0b3I9JHt0cnVlfQogICAgICAgICAgICAudGFiU3R5bGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5hdXRvSGlkZT0ke3RoaXMudGFic0F1dG9IaWRlfQogICAgICAgICAgICAuYXV0b0hpZGVUaHJlc2hvbGQ9JHt0aGlzLnRhYnNBdXRvSGlkZVRocmVzaG9sZH0KICAgICAgICAgICAgQHRhYi1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZVRhYlNlbGVjdChlMTEpfQogICAgICAgICAgICBAdGFiLWNsb3NlPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVUYWJDbG9zZShlMTEpfQogICAgICAgICAgPjwvZGVlcy1hcHB1aS10YWJzPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtYXJlYSI+CiAgICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgICAgICA8c2xvdCBuYW1lPSJjb250ZW50Ij48L3Nsb3Q+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGhhbmRsZVRhYlNlbGVjdChlMTEpIHsKICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IGUxMS5kZXRhaWwudGFiOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZVRhYkNsb3NlKGUxMSkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItY2xvc2UiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygic2hvd1RhYnMiKSkgewogICAgICAgIGlmICh0aGlzLnNob3dUYWJzKSB7CiAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgibm90YWJzIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJub3RhYnMiLCAiIik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGF3YWl0IHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAoIXRoaXMuc2hvd1RhYnMpIHsKICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgibm90YWJzIiwgIiIpOwogICAgICB9CiAgICAgIGNvbnN0IHRhYnNDb21wb25lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS10YWJzIik7CiAgICAgIGlmICh0YWJzQ29tcG9uZW50KSB7CiAgICAgICAgYXdhaXQgdGFic0NvbXBvbmVudC51cGRhdGVDb21wbGV0ZTsKICAgICAgfQogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczQyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQXBwdWlNYWluY29udGVudDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWkvZGVlcy1hcHB1aS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU0MiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNDMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYXBwdWkiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9hcHBiYXJNZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhck1lbnVJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhck1lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXBwYmFyQnJlYWRjcnVtYnNfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhckJyZWFkY3J1bWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXBwYmFyQnJlYWRjcnVtYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJTaG93V2luZG93Q29udHJvbHNfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhclNob3dXaW5kb3dDb250cm9sc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhclNob3dXaW5kb3dDb250cm9sc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXBwYmFyVXNlcl9kZWNvcmF0b3JzOwogIGxldCBfYXBwYmFyVXNlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhclVzZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhclByb2ZpbGVNZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhclByb2ZpbGVNZW51SXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJQcm9maWxlTWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJTaG93U2VhcmNoX2RlY29yYXRvcnM7CiAgbGV0IF9hcHBiYXJTaG93U2VhcmNoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXBwYmFyU2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVMb2dvSWNvbl9kZWNvcmF0b3JzOwogIGxldCBfbWFpbm1lbnVMb2dvSWNvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5tZW51TG9nb0ljb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5tZW51TG9nb1RleHRfZGVjb3JhdG9yczsKICBsZXQgX21haW5tZW51TG9nb1RleHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudUxvZ29UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudUdyb3Vwc19kZWNvcmF0b3JzOwogIGxldCBfbWFpbm1lbnVHcm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudUdyb3Vwc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVCb3R0b21UYWJzX2RlY29yYXRvcnM7CiAgbGV0IF9tYWlubWVudUJvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudUJvdHRvbVRhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5tZW51VGFic19kZWNvcmF0b3JzOwogIGxldCBfbWFpbm1lbnVUYWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudVNlbGVjdGVkVGFiX2RlY29yYXRvcnM7CiAgbGV0IF9tYWlubWVudVNlbGVjdGVkVGFiX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVTZWxlY3RlZFRhYl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVIZWFkaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlY29uZGFyeW1lbnVHcm91cHNfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVHcm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWNvbmRhcnltZW51R3JvdXBzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2RlY29yYXRvcnM7CiAgbGV0IF9zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVDb2xsYXBzZWRfZGVjb3JhdG9yczsKICBsZXQgX21haW5tZW51Q29sbGFwc2VkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVDb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWNvbmRhcnltZW51Q29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudVZpc2libGVfZGVjb3JhdG9yczsKICBsZXQgX21haW5tZW51VmlzaWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5tZW51VmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudVZpc2libGVfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5jb250ZW50VGFic1Zpc2libGVfZGVjb3JhdG9yczsKICBsZXQgX21haW5jb250ZW50VGFic1Zpc2libGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudFRhYnNWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50VGFic0F1dG9IaWRlX2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZW50VGFic0F1dG9IaWRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGVudFRhYnNBdXRvSGlkZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9kZWNvcmF0b3JzOwogIGxldCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2aXR5TG9nVmlzaWJsZV9kZWNvcmF0b3JzOwogIGxldCBfYWN0aXZpdHlMb2dWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlMb2dWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpdml0eUxvZ0NvdW50X2RlY29yYXRvcnM7CiAgbGV0IF9hY3Rpdml0eUxvZ0NvdW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlMb2dDb3VudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbmNvbnRlbnRUYWJzX2RlY29yYXRvcnM7CiAgbGV0IF9tYWluY29udGVudFRhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudFRhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfZGVjb3JhdG9yczsKICBsZXQgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudFNlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVfZGVjb3JhdG9yczsKICBsZXQgX21haW5tZW51X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlY29uZGFyeW1lbnVfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWNvbmRhcnltZW51X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudF9kZWNvcmF0b3JzOwogIGxldCBfbWFpbmNvbnRlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlsb2dFbGVtZW50X2RlY29yYXRvcnM7CiAgbGV0IF9hY3Rpdml0eWxvZ0VsZW1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpdml0eWxvZ0VsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JvdHRvbWJhckVsZW1lbnRfZGVjb3JhdG9yczsKICBsZXQgX2JvdHRvbWJhckVsZW1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib3R0b21iYXJFbGVtZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib3R0b21iYXJWaXNpYmxlX2RlY29yYXRvcnM7CiAgbGV0IF9ib3R0b21iYXJWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYm90dG9tYmFyVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFZpZXdfZGVjb3JhdG9yczsKICBsZXQgX2N1cnJlbnRWaWV3X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFZpZXdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0FwcHVpMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2FwcGJhck1lbnVJdGVtc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfYXBwYmFyQnJlYWRjcnVtYnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2FwcGJhclVzZXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9hcHBiYXJQcm9maWxlTWVudUl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9hcHBiYXJTaG93U2VhcmNoX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX21haW5tZW51TG9nb0ljb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tYWlubWVudUxvZ29UZXh0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbWFpbm1lbnVHcm91cHNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX21haW5tZW51Qm90dG9tVGFic19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfbWFpbm1lbnVUYWJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9tYWlubWVudVNlbGVjdGVkVGFiX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zZWNvbmRhcnltZW51R3JvdXBzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfbWFpbm1lbnVDb2xsYXBzZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9tYWlubWVudVZpc2libGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2Vjb25kYXJ5bWVudVZpc2libGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfbWFpbmNvbnRlbnRUYWJzVmlzaWJsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9jb250ZW50VGFic0F1dG9IaWRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2NvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9hY3Rpdml0eUxvZ1Zpc2libGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2FjdGl2aXR5TG9nQ291bnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX21haW5jb250ZW50VGFic19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfbWFpbmNvbnRlbnRTZWxlY3RlZFRhYl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX2FwcGJhcl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfbWFpbm1lbnVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3NlY29uZGFyeW1lbnVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX21haW5jb250ZW50X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9hY3Rpdml0eWxvZ0VsZW1lbnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2JvdHRvbWJhckVsZW1lbnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2JvdHRvbWJhclZpc2libGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2N1cnJlbnRWaWV3X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJNZW51SXRlbXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyTWVudUl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhcHBiYXJNZW51SXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyTWVudUl0ZW1zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hcHBiYXJNZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXBwYmFyTWVudUl0ZW1zX2luaXRpYWxpemVycywgX2FwcGJhck1lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJCcmVhZGNydW1ic19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhcHBiYXJCcmVhZGNydW1icyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyQnJlYWRjcnVtYnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyQnJlYWRjcnVtYnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFwcGJhckJyZWFkY3J1bWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhckJyZWFkY3J1bWJzX2luaXRpYWxpemVycywgX2FwcGJhckJyZWFkY3J1bWJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzLCBfYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJTaG93V2luZG93Q29udHJvbHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhcHBiYXJTaG93V2luZG93Q29udHJvbHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hcHBiYXJTaG93V2luZG93Q29udHJvbHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2luaXRpYWxpemVycywgX2FwcGJhclNob3dXaW5kb3dDb250cm9sc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJVc2VyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFwcGJhclVzZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFwcGJhclVzZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyVXNlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXBwYmFyVXNlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hcHBiYXJVc2VyX2luaXRpYWxpemVycywgX2FwcGJhclVzZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhcHBiYXJQcm9maWxlTWVudUl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhcHBiYXJQcm9maWxlTWVudUl0ZW1zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFwcGJhclByb2ZpbGVNZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFwcGJhclByb2ZpbGVNZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19pbml0aWFsaXplcnMsIF9hcHBiYXJQcm9maWxlTWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FwcGJhclNob3dTZWFyY2hfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyU2hvd1NlYXJjaCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyU2hvd1NlYXJjaCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hcHBiYXJTaG93U2VhcmNoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hcHBiYXJTaG93U2VhcmNoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhclNob3dTZWFyY2hfaW5pdGlhbGl6ZXJzLCBfYXBwYmFyU2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWlubWVudUxvZ29JY29uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51TG9nb0ljb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5tZW51TG9nb0ljb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbm1lbnVMb2dvSWNvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbm1lbnVMb2dvSWNvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWlubWVudUxvZ29JY29uX2luaXRpYWxpemVycywgX21haW5tZW51TG9nb0ljb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVMb2dvVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYWlubWVudUxvZ29UZXh0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudUxvZ29UZXh0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51TG9nb1RleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1haW5tZW51TG9nb1RleHQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVMb2dvVGV4dF9pbml0aWFsaXplcnMsIF9tYWlubWVudUxvZ29UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX21haW5tZW51R3JvdXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51R3JvdXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudUdyb3VwcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYWlubWVudUdyb3Vwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbm1lbnVHcm91cHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVHcm91cHNfaW5pdGlhbGl6ZXJzLCBfbWFpbm1lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVCb3R0b21UYWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51Qm90dG9tVGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbm1lbnVCb3R0b21UYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51Qm90dG9tVGFicywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbm1lbnVCb3R0b21UYWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5tZW51Qm90dG9tVGFic19pbml0aWFsaXplcnMsIF9tYWlubWVudUJvdHRvbVRhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVUYWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51VGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbm1lbnVUYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51VGFicywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbm1lbnVUYWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5tZW51VGFic19pbml0aWFsaXplcnMsIF9tYWlubWVudVRhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVTZWxlY3RlZFRhYl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYWlubWVudVNlbGVjdGVkVGFiIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudVNlbGVjdGVkVGFiIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51U2VsZWN0ZWRUYWIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1haW5tZW51U2VsZWN0ZWRUYWIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVTZWxlY3RlZFRhYl9pbml0aWFsaXplcnMsIF9tYWlubWVudVNlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX3NlY29uZGFyeW1lbnVIZWFkaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlY29uZGFyeW1lbnVIZWFkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWNvbmRhcnltZW51SGVhZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWNvbmRhcnltZW51SGVhZGluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2Vjb25kYXJ5bWVudUhlYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfaW5pdGlhbGl6ZXJzLCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfc2Vjb25kYXJ5bWVudUdyb3Vwc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWNvbmRhcnltZW51R3JvdXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWNvbmRhcnltZW51R3JvdXBzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlY29uZGFyeW1lbnVHcm91cHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlY29uZGFyeW1lbnVHcm91cHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2Vjb25kYXJ5bWVudUdyb3Vwc19pbml0aWFsaXplcnMsIF9zZWNvbmRhcnltZW51R3JvdXBzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1faW5pdGlhbGl6ZXJzLCBfc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWlubWVudUNvbGxhcHNlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYWlubWVudUNvbGxhcHNlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbm1lbnVDb2xsYXBzZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbm1lbnVDb2xsYXBzZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1haW5tZW51Q29sbGFwc2VkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5tZW51Q29sbGFwc2VkX2luaXRpYWxpemVycywgX21haW5tZW51Q29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2Vjb25kYXJ5bWVudUNvbGxhcHNlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2Vjb25kYXJ5bWVudUNvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWNvbmRhcnltZW51Q29sbGFwc2VkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWNvbmRhcnltZW51Q29sbGFwc2VkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWlubWVudVZpc2libGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbm1lbnVWaXNpYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudVZpc2libGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbm1lbnVWaXNpYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWlubWVudVZpc2libGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgX21haW5tZW51VmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9zZWNvbmRhcnltZW51VmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWNvbmRhcnltZW51VmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2Vjb25kYXJ5bWVudVZpc2libGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2Vjb25kYXJ5bWVudVZpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlY29uZGFyeW1lbnVWaXNpYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX21haW5jb250ZW50VGFic1Zpc2libGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbmNvbnRlbnRUYWJzVmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbmNvbnRlbnRUYWJzVmlzaWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYWluY29udGVudFRhYnNWaXNpYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWluY29udGVudFRhYnNWaXNpYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5jb250ZW50VGFic1Zpc2libGVfaW5pdGlhbGl6ZXJzLCBfbWFpbmNvbnRlbnRUYWJzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9jb250ZW50VGFic0F1dG9IaWRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRlbnRUYWJzQXV0b0hpZGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRlbnRUYWJzQXV0b0hpZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29udGVudFRhYnNBdXRvSGlkZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29udGVudFRhYnNBdXRvSGlkZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZW50VGFic0F1dG9IaWRlX2luaXRpYWxpemVycywgX2NvbnRlbnRUYWJzQXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIF9jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FjdGl2aXR5TG9nVmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3Rpdml0eUxvZ1Zpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2aXR5TG9nVmlzaWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3Rpdml0eUxvZ1Zpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2aXR5TG9nVmlzaWJsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3Rpdml0eUxvZ1Zpc2libGVfaW5pdGlhbGl6ZXJzLCBfYWN0aXZpdHlMb2dWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FjdGl2aXR5TG9nQ291bnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZpdHlMb2dDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZpdHlMb2dDb3VudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3Rpdml0eUxvZ0NvdW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hY3Rpdml0eUxvZ0NvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2aXR5TG9nQ291bnRfaW5pdGlhbGl6ZXJzLCBfYWN0aXZpdHlMb2dDb3VudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWluY29udGVudFRhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbmNvbnRlbnRUYWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWluY29udGVudFRhYnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbmNvbnRlbnRUYWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWluY29udGVudFRhYnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbmNvbnRlbnRUYWJzX2luaXRpYWxpemVycywgX21haW5jb250ZW50VGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWluY29udGVudFNlbGVjdGVkVGFiX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5jb250ZW50U2VsZWN0ZWRUYWIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5jb250ZW50U2VsZWN0ZWRUYWIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbmNvbnRlbnRTZWxlY3RlZFRhYiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbmNvbnRlbnRTZWxlY3RlZFRhYiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWluY29udGVudFNlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYXBwYmFyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFwcGJhciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFwcGJhciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXBwYmFyID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhcl9pbml0aWFsaXplcnMsIF9hcHBiYXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbm1lbnUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5tZW51IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWlubWVudSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWlubWVudV9pbml0aWFsaXplcnMsIF9tYWlubWVudV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9zZWNvbmRhcnltZW51X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlY29uZGFyeW1lbnUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlY29uZGFyeW1lbnUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2Vjb25kYXJ5bWVudSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2Vjb25kYXJ5bWVudSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWNvbmRhcnltZW51X2luaXRpYWxpemVycywgX3NlY29uZGFyeW1lbnVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbmNvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbmNvbnRlbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5jb250ZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5jb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWluY29udGVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWluY29udGVudF9pbml0aWFsaXplcnMsIF9tYWluY29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hY3Rpdml0eWxvZ0VsZW1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZpdHlsb2dFbGVtZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhY3Rpdml0eWxvZ0VsZW1lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZpdHlsb2dFbGVtZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hY3Rpdml0eWxvZ0VsZW1lbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWN0aXZpdHlsb2dFbGVtZW50X2luaXRpYWxpemVycywgX2FjdGl2aXR5bG9nRWxlbWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9ib3R0b21iYXJFbGVtZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJvdHRvbWJhckVsZW1lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJvdHRvbWJhckVsZW1lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYm90dG9tYmFyRWxlbWVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYm90dG9tYmFyRWxlbWVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ib3R0b21iYXJFbGVtZW50X2luaXRpYWxpemVycywgX2JvdHRvbWJhckVsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYm90dG9tYmFyVmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJib3R0b21iYXJWaXNpYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJib3R0b21iYXJWaXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJvdHRvbWJhclZpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJvdHRvbWJhclZpc2libGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYm90dG9tYmFyVmlzaWJsZV9pbml0aWFsaXplcnMsIF9ib3R0b21iYXJWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2N1cnJlbnRWaWV3X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRWaWV3Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXJyZW50VmlldyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50Vmlldywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VycmVudFZpZXcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudFZpZXdfaW5pdGlhbGl6ZXJzLCBfY3VycmVudFZpZXdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNBcHB1aTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI3OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBSRUFDVElWRSBPQlNFUlZBQkxFUyAoUnhKUyBTdWJqZWN0cykKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLyoqIE9ic2VydmFibGUgc3RyZWFtIG9mIHZpZXcgbGlmZWN5Y2xlIGV2ZW50cyAqLwogICAgdmlld0xpZmVjeWNsZSQgPSBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cngucnhqcy5TdWJqZWN0KCk7CiAgICAvKiogT2JzZXJ2YWJsZSBzdHJlYW0gb2YgdmlldyBjaGFuZ2UgZXZlbnRzICovCiAgICB2aWV3Q2hhbmdlZCQgPSBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cngucnhqcy5TdWJqZWN0KCk7CiAgICAjYXBwYmFyTWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJNZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIElOVEVSTkFMIFBST1BFUlRJRVMgKFByb3BlcnRpZXMgZm9yIGNoaWxkIGNvbXBvbmVudHMpCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFByb3BlcnRpZXMgZm9yIGFwcGJhcgogICAgZ2V0IGFwcGJhck1lbnVJdGVtcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FwcGJhck1lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFwcGJhck1lbnVJdGVtcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXBwYmFyTWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYXBwYmFyQnJlYWRjcnVtYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJNZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJCcmVhZGNydW1ic19pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgYXBwYmFyQnJlYWRjcnVtYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhcHBiYXJCcmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFwcGJhckJyZWFkY3J1bWJzKHZhbHVlMikgewogICAgICB0aGlzLiNhcHBiYXJCcmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJCcmVhZGNydW1ic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzLCAiID4gIikpOwogICAgZ2V0IGFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3IoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FwcGJhclNob3dXaW5kb3dDb250cm9sc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJTaG93V2luZG93Q29udHJvbHNfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzKCkgewogICAgICByZXR1cm4gdGhpcy4jYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzKHZhbHVlMikgewogICAgICB0aGlzLiNhcHBiYXJTaG93V2luZG93Q29udHJvbHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhcHBiYXJVc2VyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyVXNlcl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IGFwcGJhclVzZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhcHBiYXJVc2VyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXBwYmFyVXNlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXBwYmFyVXNlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FwcGJhclByb2ZpbGVNZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJVc2VyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgYXBwYmFyUHJvZmlsZU1lbnVJdGVtcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FwcGJhclByb2ZpbGVNZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhcHBiYXJQcm9maWxlTWVudUl0ZW1zKHZhbHVlMikgewogICAgICB0aGlzLiNhcHBiYXJQcm9maWxlTWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYXBwYmFyU2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhclByb2ZpbGVNZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJTaG93U2VhcmNoX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBhcHBiYXJTaG93U2VhcmNoKCkgewogICAgICByZXR1cm4gdGhpcy4jYXBwYmFyU2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFwcGJhclNob3dTZWFyY2godmFsdWUyKSB7CiAgICAgIHRoaXMuI2FwcGJhclNob3dTZWFyY2hfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWlubWVudUxvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyU2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51TG9nb0ljb25faW5pdGlhbGl6ZXJzLCAiIikpOwogICAgLy8gUHJvcGVydGllcyBmb3IgbWFpbm1lbnUKICAgIGdldCBtYWlubWVudUxvZ29JY29uKCkgewogICAgICByZXR1cm4gdGhpcy4jbWFpbm1lbnVMb2dvSWNvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1haW5tZW51TG9nb0ljb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5tZW51TG9nb0ljb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWlubWVudUxvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVMb2dvSWNvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51TG9nb1RleHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IG1haW5tZW51TG9nb1RleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYWlubWVudUxvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbm1lbnVMb2dvVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbm1lbnVMb2dvVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21haW5tZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVMb2dvVGV4dF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51R3JvdXBzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBtYWlubWVudUdyb3VwcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbm1lbnVHcm91cHModmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5tZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbm1lbnVCb3R0b21UYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudUJvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IG1haW5tZW51Qm90dG9tVGFicygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51Qm90dG9tVGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1haW5tZW51Qm90dG9tVGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbm1lbnVCb3R0b21UYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbm1lbnVUYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVCb3R0b21UYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVUYWJzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBtYWlubWVudVRhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYWlubWVudVRhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYWlubWVudVRhYnModmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5tZW51VGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21haW5tZW51U2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudVRhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudVNlbGVjdGVkVGFiX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgbWFpbm1lbnVTZWxlY3RlZFRhYigpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51U2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYWlubWVudVNlbGVjdGVkVGFiKHZhbHVlMikgewogICAgICB0aGlzLiNtYWlubWVudVNlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2Vjb25kYXJ5bWVudUhlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudVNlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgLy8gUHJvcGVydGllcyBmb3Igc2Vjb25kYXJ5bWVudQogICAgZ2V0IHNlY29uZGFyeW1lbnVIZWFkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudUhlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWNvbmRhcnltZW51SGVhZGluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2Vjb25kYXJ5bWVudUhlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWNvbmRhcnltZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9zZWNvbmRhcnltZW51R3JvdXBzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBzZWNvbmRhcnltZW51R3JvdXBzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudUdyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlY29uZGFyeW1lbnVHcm91cHModmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlY29uZGFyeW1lbnVHcm91cHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUdyb3Vwc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBzZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtKCkgewogICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0odmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWlubWVudUNvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudUNvbGxhcHNlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAvLyBDb2xsYXBzZSBzdGF0ZXMKICAgIGdldCBtYWlubWVudUNvbGxhcHNlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51Q29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbm1lbnVDb2xsYXBzZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5tZW51Q29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51Q29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgc2Vjb25kYXJ5bWVudUNvbGxhcHNlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWNvbmRhcnltZW51Q29sbGFwc2VkKHZhbHVlMikgewogICAgICB0aGlzLiNzZWNvbmRhcnltZW51Q29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbm1lbnVWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51VmlzaWJsZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIC8vIFZpc2liaWxpdHkgc3RhdGVzCiAgICBnZXQgbWFpbm1lbnVWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jbWFpbm1lbnVWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbm1lbnVWaXNpYmxlKHZhbHVlMikgewogICAgICB0aGlzLiNtYWlubWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWNvbmRhcnltZW51VmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51VmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IHNlY29uZGFyeW1lbnVWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWNvbmRhcnltZW51VmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2Vjb25kYXJ5bWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWluY29udGVudFRhYnNWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWluY29udGVudFRhYnNWaXNpYmxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IG1haW5jb250ZW50VGFic1Zpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYWluY29udGVudFRhYnNWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbmNvbnRlbnRUYWJzVmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbmNvbnRlbnRUYWJzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRlbnRUYWJzQXV0b0hpZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWluY29udGVudFRhYnNWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfY29udGVudFRhYnNBdXRvSGlkZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgY29udGVudFRhYnNBdXRvSGlkZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvbnRlbnRUYWJzQXV0b0hpZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb250ZW50VGFic0F1dG9IaWRlKHZhbHVlMikgewogICAgICB0aGlzLiNjb250ZW50VGFic0F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2NvbnRlbnRUYWJzQXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkX2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IGNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FjdGl2aXR5TG9nVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2NvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eUxvZ1Zpc2libGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgLy8gQWN0aXZpdHkgbG9nIHZpc2liaWxpdHkgYW5kIGNvdW50CiAgICBnZXQgYWN0aXZpdHlMb2dWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZpdHlMb2dWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWN0aXZpdHlMb2dWaXNpYmxlKHZhbHVlMikgewogICAgICB0aGlzLiNhY3Rpdml0eUxvZ1Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhY3Rpdml0eUxvZ0NvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYWN0aXZpdHlMb2dWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYWN0aXZpdHlMb2dDb3VudF9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBhY3Rpdml0eUxvZ0NvdW50KCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZpdHlMb2dDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjdGl2aXR5TG9nQ291bnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2aXR5TG9nQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWluY29udGVudFRhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eUxvZ0NvdW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRUYWJzX2luaXRpYWxpemVycywgW10pKTsKICAgIC8vIFByb3BlcnRpZXMgZm9yIG1haW5jb250ZW50CiAgICBnZXQgbWFpbmNvbnRlbnRUYWJzKCkgewogICAgICByZXR1cm4gdGhpcy4jbWFpbmNvbnRlbnRUYWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbmNvbnRlbnRUYWJzKHZhbHVlMikgewogICAgICB0aGlzLiNtYWluY29udGVudFRhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWluY29udGVudFNlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRTZWxlY3RlZFRhYl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IG1haW5jb250ZW50U2VsZWN0ZWRUYWIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYWluY29udGVudFNlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbmNvbnRlbnRTZWxlY3RlZFRhYih2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbmNvbnRlbnRTZWxlY3RlZFRhYl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FwcGJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIC8vIFJlZmVyZW5jZXMgdG8gY2hpbGQgY29tcG9uZW50cwogICAgZ2V0IGFwcGJhcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FwcGJhcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFwcGJhcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXBwYmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbm1lbnVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudV9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IG1haW5tZW51KCkgewogICAgICByZXR1cm4gdGhpcy4jbWFpbm1lbnVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYWlubWVudSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbm1lbnVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWNvbmRhcnltZW51X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9zZWNvbmRhcnltZW51X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgc2Vjb25kYXJ5bWVudSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlY29uZGFyeW1lbnVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWNvbmRhcnltZW51KHZhbHVlMikgewogICAgICB0aGlzLiNzZWNvbmRhcnltZW51X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbmNvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9zZWNvbmRhcnltZW51X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBtYWluY29udGVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5jb250ZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbmNvbnRlbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5jb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYWN0aXZpdHlsb2dFbGVtZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eWxvZ0VsZW1lbnRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBhY3Rpdml0eWxvZ0VsZW1lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhY3Rpdml0eWxvZ0VsZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3Rpdml0eWxvZ0VsZW1lbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2aXR5bG9nRWxlbWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2JvdHRvbWJhckVsZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eWxvZ0VsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9ib3R0b21iYXJFbGVtZW50X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgYm90dG9tYmFyRWxlbWVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2JvdHRvbWJhckVsZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBib3R0b21iYXJFbGVtZW50KHZhbHVlMikgewogICAgICB0aGlzLiNib3R0b21iYXJFbGVtZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYm90dG9tYmFyVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2JvdHRvbWJhckVsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9ib3R0b21iYXJWaXNpYmxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IGJvdHRvbWJhclZpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNib3R0b21iYXJWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYm90dG9tYmFyVmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYm90dG9tYmFyVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1cnJlbnRWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYm90dG9tYmFyVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2N1cnJlbnRWaWV3X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAvLyBDdXJyZW50IHZpZXcgc3RhdGUKICAgIGdldCBjdXJyZW50VmlldygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRWaWV3X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VycmVudFZpZXcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1cnJlbnRWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBJbnRlcm5hbCBzZXJ2aWNlcwogICAgdmlld1JlZ2lzdHJ5ID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2N1cnJlbnRWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzKSwgbmV3IFZpZXdSZWdpc3RyeSgpKTsKICAgIHJvdXRlckNsZWFudXAgPSBudWxsOwogICAgc2VhcmNoQ2FsbGJhY2sgPSBudWxsOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjBmMGYwIiwgIiMxYTFhMWEiKX07CiAgICAgIH0KICAgICAgLm1haW5ncmlkIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA0MHB4OwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gNDBweCAtIDI0cHgpOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgLyogZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIHNldCBkeW5hbWljYWxseSBpbiB0ZW1wbGF0ZSAqLwogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogMWZyOwogICAgICAgIHRyYW5zaXRpb246IGdyaWQtdGVtcGxhdGUtY29sdW1ucyAwLjNzIGVhc2UsIGhlaWdodCAwLjNzIGVhc2U7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2JvdHRvbWJhci1oaWRkZW5dKSAubWFpbmdyaWQgewogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gNDBweCk7CiAgICAgIH0KCiAgICAgIGRlZXMtYXBwdWktYm90dG9tYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgei1pbmRleDogNDsKICAgICAgfQoKICAgICAgLyogWi1pbmRleCBsYXllcmluZyBmb3IgcHJvcGVyIHN0YWNraW5nICovCiAgICAgIC5tYWluZ3JpZCA+IGRlZXMtYXBwdWktbWFpbm1lbnUgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAzOwogICAgICB9CgogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAyOwogICAgICB9CgogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLW1haW5jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICB9CgogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLWFjdGl2aXR5bG9nIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLCB0cmFuc2Zvcm0gMC4zcyBlYXNlOwogICAgICB9CgogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLWFjdGl2aXR5bG9nLmhpZGRlbiB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjBweCk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tYWluZ3JpZCA+IGRlZXMtYXBwdWktYWN0aXZpdHlsb2cudmlzaWJsZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CiAgICAgIH0KCiAgICAgIC8qIFZpZXcgY29udGFpbmVyIGZvciBkeW5hbWljYWxseSBsb2FkZWQgdmlld3MgKi8KICAgICAgLnZpZXctY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBjb250ZW50czsKICAgICAgfQoKICAgICAgLnZpZXctY29udGFpbmVyOmVtcHR5IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkZWVzLWFwcHVpLWFwcGJhcgogICAgICAgIC5tZW51SXRlbXM9JHt0aGlzLmFwcGJhck1lbnVJdGVtc30KICAgICAgICAuYnJlYWRjcnVtYnM9JHt0aGlzLmFwcGJhckJyZWFkY3J1bWJzfQogICAgICAgIC5icmVhZGNydW1iU2VwYXJhdG9yPSR7dGhpcy5hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yfQogICAgICAgIC5zaG93V2luZG93Q29udHJvbHM9JHt0aGlzLmFwcGJhclNob3dXaW5kb3dDb250cm9sc30KICAgICAgICAudXNlcj0ke3RoaXMuYXBwYmFyVXNlcn0KICAgICAgICAucHJvZmlsZU1lbnVJdGVtcz0ke3RoaXMuYXBwYmFyUHJvZmlsZU1lbnVJdGVtc30KICAgICAgICAuc2hvd1NlYXJjaD0ke3RoaXMuYXBwYmFyU2hvd1NlYXJjaH0KICAgICAgICAuc2hvd0FjdGl2aXR5TG9nVG9nZ2xlPSR7dHJ1ZX0KICAgICAgICAuYWN0aXZpdHlMb2dDb3VudD0ke3RoaXMuYWN0aXZpdHlMb2dDb3VudH0KICAgICAgICAuYWN0aXZpdHlMb2dBY3RpdmU9JHt0aGlzLmFjdGl2aXR5TG9nVmlzaWJsZX0KICAgICAgICBAbWVudS1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUFwcGJhck1lbnVTZWxlY3QoZTExKX0KICAgICAgICBAYnJlYWRjcnVtYi1uYXZpZ2F0ZT0keyhlMTEpID0+IHRoaXMuaGFuZGxlQXBwYmFyQnJlYWRjcnVtYk5hdmlnYXRlKGUxMSl9CiAgICAgICAgQHNlYXJjaC1jbGljaz0keygpID0+IHRoaXMuaGFuZGxlQXBwYmFyU2VhcmNoQ2xpY2soKX0KICAgICAgICBAc2VhcmNoLXF1ZXJ5PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVBcHBiYXJTZWFyY2hRdWVyeShlMTEpfQogICAgICAgIEB1c2VyLW1lbnUtb3Blbj0keygpID0+IHRoaXMuaGFuZGxlQXBwYmFyVXNlck1lbnVPcGVuKCl9CiAgICAgICAgQHByb2ZpbGUtbWVudS1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUFwcGJhclByb2ZpbGVNZW51U2VsZWN0KGUxMSl9CiAgICAgICAgQGFjdGl2aXR5LXRvZ2dsZT0keygpID0+IHRoaXMudG9nZ2xlQWN0aXZpdHlMb2coKX0KICAgICAgPjwvZGVlcy1hcHB1aS1hcHBiYXI+CiAgICAgIDxkaXYgY2xhc3M9Im1haW5ncmlkIiBzdHlsZT0iZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIGF1dG8gMWZyICR7dGhpcy5hY3Rpdml0eUxvZ1Zpc2libGUgPyAiMjgwcHgiIDogIjBweCJ9OyI+CiAgICAgICAgJHt0aGlzLm1haW5tZW51VmlzaWJsZSA/IGIyYAogICAgICAgICAgPGRlZXMtYXBwdWktbWFpbm1lbnUKICAgICAgICAgICAgLmxvZ29JY29uPSR7dGhpcy5tYWlubWVudUxvZ29JY29ufQogICAgICAgICAgICAubG9nb1RleHQ9JHt0aGlzLm1haW5tZW51TG9nb1RleHR9CiAgICAgICAgICAgIC5tZW51R3JvdXBzPSR7dGhpcy5tYWlubWVudUdyb3Vwc30KICAgICAgICAgICAgLmJvdHRvbVRhYnM9JHt0aGlzLm1haW5tZW51Qm90dG9tVGFic30KICAgICAgICAgICAgLnRhYnM9JHt0aGlzLm1haW5tZW51VGFic30KICAgICAgICAgICAgLnNlbGVjdGVkVGFiPSR7dGhpcy5tYWlubWVudVNlbGVjdGVkVGFifQogICAgICAgICAgICAuY29sbGFwc2VkPSR7dGhpcy5tYWlubWVudUNvbGxhcHNlZH0KICAgICAgICAgICAgQHRhYi1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZU1haW5tZW51VGFiU2VsZWN0KGUxMSl9CiAgICAgICAgICAgIEBjb2xsYXBzZS1jaGFuZ2U9JHsoZTExKSA9PiB0aGlzLmhhbmRsZU1haW5tZW51Q29sbGFwc2VDaGFuZ2UoZTExKX0KICAgICAgICAgID48L2RlZXMtYXBwdWktbWFpbm1lbnU+CiAgICAgICAgYCA6ICIifQogICAgICAgICR7dGhpcy5zZWNvbmRhcnltZW51VmlzaWJsZSA/IGIyYAogICAgICAgICAgPGRlZXMtYXBwdWktc2Vjb25kYXJ5bWVudQogICAgICAgICAgICAuaGVhZGluZz0ke3RoaXMuc2Vjb25kYXJ5bWVudUhlYWRpbmd9CiAgICAgICAgICAgIC5ncm91cHM9JHt0aGlzLnNlY29uZGFyeW1lbnVHcm91cHN9CiAgICAgICAgICAgIC5zZWxlY3RlZEl0ZW09JHt0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW19CiAgICAgICAgICAgIC5jb2xsYXBzZWQ9JHt0aGlzLnNlY29uZGFyeW1lbnVDb2xsYXBzZWR9CiAgICAgICAgICAgIEBpdGVtLXNlbGVjdD0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2Vjb25kYXJ5bWVudUl0ZW1TZWxlY3QoZTExKX0KICAgICAgICAgICAgQGNvbGxhcHNlLWNoYW5nZT0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2Vjb25kYXJ5bWVudUNvbGxhcHNlQ2hhbmdlKGUxMSl9CiAgICAgICAgICA+PC9kZWVzLWFwcHVpLXNlY29uZGFyeW1lbnU+CiAgICAgICAgYCA6ICIifQogICAgICAgIDxkZWVzLWFwcHVpLW1haW5jb250ZW50CiAgICAgICAgICAudGFicz0ke3RoaXMubWFpbmNvbnRlbnRUYWJzfQogICAgICAgICAgLnNlbGVjdGVkVGFiPSR7dGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFifQogICAgICAgICAgLnNob3dUYWJzPSR7dGhpcy5tYWluY29udGVudFRhYnNWaXNpYmxlfQogICAgICAgICAgLnRhYnNBdXRvSGlkZT0ke3RoaXMuY29udGVudFRhYnNBdXRvSGlkZX0KICAgICAgICAgIC50YWJzQXV0b0hpZGVUaHJlc2hvbGQ9JHt0aGlzLmNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGR9CiAgICAgICAgICBAdGFiLXNlbGVjdD0keyhlMTEpID0+IHRoaXMuaGFuZGxlQ29udGVudFRhYlNlbGVjdChlMTEpfQogICAgICAgICAgQHRhYi1jbG9zZT0keyhlMTEpID0+IHRoaXMuaGFuZGxlQ29udGVudFRhYkNsb3NlKGUxMSl9CiAgICAgICAgPgogICAgICAgICAgPGRpdiBjbGFzcz0idmlldy1jb250YWluZXIiPjwvZGl2PgogICAgICAgICAgPHNsb3QgbmFtZT0ibWFpbmNvbnRlbnQiPjwvc2xvdD4KICAgICAgICA8L2RlZXMtYXBwdWktbWFpbmNvbnRlbnQ+CiAgICAgICAgPGRlZXMtYXBwdWktYWN0aXZpdHlsb2cKICAgICAgICAgIGNsYXNzPSIke3RoaXMuYWN0aXZpdHlMb2dWaXNpYmxlID8gInZpc2libGUiIDogImhpZGRlbiJ9IgogICAgICAgID48L2RlZXMtYXBwdWktYWN0aXZpdHlsb2c+CiAgICAgIDwvZGl2PgogICAgICAke3RoaXMuYm90dG9tYmFyVmlzaWJsZSA/IGIyYAogICAgICAgIDxkZWVzLWFwcHVpLWJvdHRvbWJhcj48L2RlZXMtYXBwdWktYm90dG9tYmFyPgogICAgICBgIDogIiJ9CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLmFwcGJhciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLWFwcHVpLWFwcGJhciIpOwogICAgICB0aGlzLm1haW5tZW51ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktbWFpbm1lbnUiKTsKICAgICAgdGhpcy5zZWNvbmRhcnltZW51ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktc2Vjb25kYXJ5bWVudSIpOwogICAgICB0aGlzLm1haW5jb250ZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktbWFpbmNvbnRlbnQiKTsKICAgICAgdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS1hY3Rpdml0eWxvZyIpOwogICAgICB0aGlzLmJvdHRvbWJhckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS1ib3R0b21iYXIiKTsKICAgICAgaWYgKHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50KSB7CiAgICAgICAgdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuZW50cmllcyQuc3Vic2NyaWJlKChlbnRyaWVzKSA9PiB7CiAgICAgICAgICB0aGlzLmFjdGl2aXR5TG9nQ291bnQgPSBlbnRyaWVzLmxlbmd0aDsKICAgICAgICB9KTsKICAgICAgfQogICAgICB0aGlzLnZpZXdSZWdpc3RyeS5zZXRBcHB1aVJlZih0aGlzKTsKICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAodGhpcy5yb3V0ZXJDbGVhbnVwKSB7CiAgICAgICAgdGhpcy5yb3V0ZXJDbGVhbnVwKCk7CiAgICAgICAgdGhpcy5yb3V0ZXJDbGVhbnVwID0gbnVsbDsKICAgICAgfQogICAgICB0aGlzLnZpZXdMaWZlY3ljbGUkLmNvbXBsZXRlKCk7CiAgICAgIHRoaXMudmlld0NoYW5nZWQkLmNvbXBsZXRlKCk7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFBST0dSQU1NQVRJQyBBUEk6IEFQUCBCQVIKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLyoqCiAgICAgKiBTZXQgdGhlIGFwcCBiYXIgbWVudSBpdGVtcyAoRmlsZSwgRWRpdCwgVmlldywgZXRjLikKICAgICAqLwogICAgc2V0QXBwQmFyTWVudXMobWVudXMpIHsKICAgICAgdGhpcy5hcHBiYXJNZW51SXRlbXMgPSBbLi4ubWVudXNdOwogICAgfQogICAgLyoqCiAgICAgKiBVcGRhdGUgYSBzaW5nbGUgYXBwIGJhciBtZW51IGJ5IG5hbWUKICAgICAqLwogICAgdXBkYXRlQXBwQmFyTWVudShuYW1lLCB1cGRhdGUpIHsKICAgICAgdGhpcy5hcHBiYXJNZW51SXRlbXMgPSB0aGlzLmFwcGJhck1lbnVJdGVtcy5tYXAoKG1lbnUpID0+IHsKICAgICAgICBpZiAoIm5hbWUiIGluIG1lbnUgJiYgbWVudS5uYW1lID09PSBuYW1lKSB7CiAgICAgICAgICByZXR1cm4geyAuLi5tZW51LCAuLi51cGRhdGUgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1lbnU7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgdGhlIGJyZWFkY3J1bWJzIChzdHJpbmcgb3IgYXJyYXkpCiAgICAgKi8KICAgIHNldEJyZWFkY3J1bWJzKGJyZWFkY3J1bWJzKSB7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KGJyZWFkY3J1bWJzKSkgewogICAgICAgIHRoaXMuYXBwYmFyQnJlYWRjcnVtYnMgPSBicmVhZGNydW1icy5qb2luKHRoaXMuYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5hcHBiYXJCcmVhZGNydW1icyA9IGJyZWFkY3J1bWJzOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFNldCB0aGUgY3VycmVudCB1c2VyCiAgICAgKi8KICAgIHNldFVzZXIodXNlcikgewogICAgICB0aGlzLmFwcGJhclVzZXIgPSB1c2VyOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgdGhlIHByb2ZpbGUgZHJvcGRvd24gbWVudSBpdGVtcwogICAgICovCiAgICBzZXRQcm9maWxlTWVudUl0ZW1zKGl0ZW1zKSB7CiAgICAgIHRoaXMuYXBwYmFyUHJvZmlsZU1lbnVJdGVtcyA9IFsuLi5pdGVtc107CiAgICB9CiAgICAvKioKICAgICAqIFNldCBzZWFyY2ggYmFyIHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0U2VhcmNoVmlzaWJsZSh2aXNpYmxlKSB7CiAgICAgIHRoaXMuYXBwYmFyU2hvd1NlYXJjaCA9IHZpc2libGU7CiAgICB9CiAgICAvKioKICAgICAqIFNldCB3aW5kb3cgY29udHJvbHMgdmlzaWJpbGl0eQogICAgICovCiAgICBzZXRXaW5kb3dDb250cm9sc1Zpc2libGUodmlzaWJsZSkgewogICAgICB0aGlzLmFwcGJhclNob3dXaW5kb3dDb250cm9scyA9IHZpc2libGU7CiAgICB9CiAgICAvKioKICAgICAqIFJlZ2lzdGVyIGEgc2VhcmNoIGNhbGxiYWNrCiAgICAgKi8KICAgIG9uU2VhcmNoKGNhbGxiYWNrKSB7CiAgICAgIHRoaXMuc2VhcmNoQ2FsbGJhY2sgPSBjYWxsYmFjazsKICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUFJPR1JBTU1BVElDIEFQSTogTUFJTiBNRU5VCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogU2V0IHRoZSBlbnRpcmUgbWFpbiBtZW51IGNvbmZpZ3VyYXRpb24KICAgICAqLwogICAgc2V0TWFpbk1lbnUoY29uZmlnMykgewogICAgICBpZiAoY29uZmlnMy5sb2dvSWNvbiAhPT0gdm9pZCAwKSB7CiAgICAgICAgdGhpcy5tYWlubWVudUxvZ29JY29uID0gY29uZmlnMy5sb2dvSWNvbjsKICAgICAgfQogICAgICBpZiAoY29uZmlnMy5sb2dvVGV4dCAhPT0gdm9pZCAwKSB7CiAgICAgICAgdGhpcy5tYWlubWVudUxvZ29UZXh0ID0gY29uZmlnMy5sb2dvVGV4dDsKICAgICAgfQogICAgICBpZiAoY29uZmlnMy5ncm91cHMgIT09IHZvaWQgMCkgewogICAgICAgIHRoaXMubWFpbm1lbnVHcm91cHMgPSBbLi4uY29uZmlnMy5ncm91cHNdOwogICAgICB9CiAgICAgIGlmIChjb25maWczLmJvdHRvbVRhYnMgIT09IHZvaWQgMCkgewogICAgICAgIHRoaXMubWFpbm1lbnVCb3R0b21UYWJzID0gWy4uLmNvbmZpZzMuYm90dG9tVGFic107CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogVXBkYXRlIGEgc3BlY2lmaWMgbWVudSBncm91cCBieSBuYW1lCiAgICAgKi8KICAgIHVwZGF0ZU1haW5NZW51R3JvdXAoZ3JvdXBOYW1lLCB1cGRhdGUpIHsKICAgICAgdGhpcy5tYWlubWVudUdyb3VwcyA9IHRoaXMubWFpbm1lbnVHcm91cHMubWFwKChncm91cCkgPT4gZ3JvdXAubmFtZSA9PT0gZ3JvdXBOYW1lID8geyAuLi5ncm91cCwgLi4udXBkYXRlIH0gOiBncm91cCk7CiAgICB9CiAgICAvKioKICAgICAqIEFkZCBhIG1lbnUgaXRlbSB0byBhIHNwZWNpZmljIGdyb3VwCiAgICAgKi8KICAgIGFkZE1haW5NZW51SXRlbShncm91cE5hbWUsIHRhYjIpIHsKICAgICAgdGhpcy5tYWlubWVudUdyb3VwcyA9IHRoaXMubWFpbm1lbnVHcm91cHMubWFwKChncm91cCkgPT4gewogICAgICAgIGlmIChncm91cC5uYW1lID09PSBncm91cE5hbWUpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIC4uLmdyb3VwLAogICAgICAgICAgICBpdGVtczogWy4uLmdyb3VwLml0ZW1zIHx8IFtdLCB0YWIyXQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGdyb3VwOwogICAgICB9KTsKICAgIH0KICAgIC8qKgogICAgICogUmVtb3ZlIGEgbWVudSBpdGVtIGZyb20gYSBncm91cCBieSBrZXkKICAgICAqLwogICAgcmVtb3ZlTWFpbk1lbnVJdGVtKGdyb3VwTmFtZSwgdGFiS2V5KSB7CiAgICAgIHRoaXMubWFpbm1lbnVHcm91cHMgPSB0aGlzLm1haW5tZW51R3JvdXBzLm1hcCgoZ3JvdXApID0+IHsKICAgICAgICBpZiAoZ3JvdXAubmFtZSA9PT0gZ3JvdXBOYW1lKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAuLi5ncm91cCwKICAgICAgICAgICAgaXRlbXM6IChncm91cC5pdGVtcyB8fCBbXSkuZmlsdGVyKCh0OSkgPT4gdDkua2V5ICE9PSB0YWJLZXkpCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gZ3JvdXA7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgdGhlIHNlbGVjdGVkIG1haW4gbWVudSBpdGVtIGJ5IGtleQogICAgICovCiAgICBzZXRNYWluTWVudVNlbGVjdGlvbih0YWJLZXkpIHsKICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLm1haW5tZW51R3JvdXBzKSB7CiAgICAgICAgY29uc3QgdGFiMiA9IGdyb3VwLml0ZW1zPy5maW5kKCh0OSkgPT4gdDkua2V5ID09PSB0YWJLZXkpOwogICAgICAgIGlmICh0YWIyKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51U2VsZWN0ZWRUYWIgPSB0YWIyOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBib3R0b21UYWIgPSB0aGlzLm1haW5tZW51Qm90dG9tVGFicy5maW5kKCh0OSkgPT4gdDkua2V5ID09PSB0YWJLZXkpOwogICAgICBpZiAoYm90dG9tVGFiKSB7CiAgICAgICAgdGhpcy5tYWlubWVudVNlbGVjdGVkVGFiID0gYm90dG9tVGFiOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFNldCBtYWluIG1lbnUgY29sbGFwc2VkIHN0YXRlCiAgICAgKi8KICAgIHNldE1haW5NZW51Q29sbGFwc2VkKGNvbGxhcHNlZCkgewogICAgICB0aGlzLm1haW5tZW51Q29sbGFwc2VkID0gY29sbGFwc2VkOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgbWFpbiBtZW51IHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0TWFpbk1lbnVWaXNpYmxlKHZpc2libGUpIHsKICAgICAgdGhpcy5tYWlubWVudVZpc2libGUgPSB2aXNpYmxlOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgc2Vjb25kYXJ5IG1lbnUgY29sbGFwc2VkIHN0YXRlCiAgICAgKi8KICAgIHNldFNlY29uZGFyeU1lbnVDb2xsYXBzZWQoY29sbGFwc2VkKSB7CiAgICAgIHRoaXMuc2Vjb25kYXJ5bWVudUNvbGxhcHNlZCA9IGNvbGxhcHNlZDsKICAgIH0KICAgIC8qKgogICAgICogU2V0IHNlY29uZGFyeSBtZW51IHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0U2Vjb25kYXJ5TWVudVZpc2libGUodmlzaWJsZSkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVWaXNpYmxlID0gdmlzaWJsZTsKICAgIH0KICAgIC8qKgogICAgICogU2V0IGNvbnRlbnQgdGFicyB2aXNpYmlsaXR5CiAgICAgKi8KICAgIHNldENvbnRlbnRUYWJzVmlzaWJsZSh2aXNpYmxlKSB7CiAgICAgIHRoaXMubWFpbmNvbnRlbnRUYWJzVmlzaWJsZSA9IHZpc2libGU7CiAgICB9CiAgICAvKioKICAgICAqIFNldCBjb250ZW50IHRhYnMgYXV0by1oaWRlIGJlaGF2aW9yCiAgICAgKiBAcGFyYW0gZW5hYmxlZCAtIEVuYWJsZSBhdXRvLWhpZGUgZmVhdHVyZQogICAgICogQHBhcmFtIHRocmVzaG9sZCAtIEhpZGUgd2hlbiB0YWJzLmxlbmd0aCA8PSB0aHJlc2hvbGQgKGRlZmF1bHQgMCA9IGhpZGUgd2hlbiBubyB0YWJzKQogICAgICovCiAgICBzZXRDb250ZW50VGFic0F1dG9IaWRlKGVuYWJsZWQsIHRocmVzaG9sZCA9IDApIHsKICAgICAgdGhpcy5jb250ZW50VGFic0F1dG9IaWRlID0gZW5hYmxlZDsKICAgICAgdGhpcy5jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkID0gdGhyZXNob2xkOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgYSBiYWRnZSBvbiBhIG1haW4gbWVudSBpdGVtCiAgICAgKi8KICAgIHNldE1haW5NZW51QmFkZ2UodGFiS2V5LCBiYWRnZSkgewogICAgICB0aGlzLm1haW5tZW51R3JvdXBzID0gdGhpcy5tYWlubWVudUdyb3Vwcy5tYXAoKGdyb3VwKSA9PiAoewogICAgICAgIC4uLmdyb3VwLAogICAgICAgIGl0ZW1zOiAoZ3JvdXAuaXRlbXMgfHwgW10pLm1hcCgodGFiMikgPT4gdGFiMi5rZXkgPT09IHRhYktleSA/IHsgLi4udGFiMiwgYmFkZ2UgfSA6IHRhYjIpCiAgICAgIH0pKTsKICAgICAgdGhpcy5tYWlubWVudUJvdHRvbVRhYnMgPSB0aGlzLm1haW5tZW51Qm90dG9tVGFicy5tYXAoKHRhYjIpID0+IHRhYjIua2V5ID09PSB0YWJLZXkgPyB7IC4uLnRhYjIsIGJhZGdlIH0gOiB0YWIyKTsKICAgIH0KICAgIC8qKgogICAgICogQ2xlYXIgYSBiYWRnZSBmcm9tIGEgbWFpbiBtZW51IGl0ZW0KICAgICAqLwogICAgY2xlYXJNYWluTWVudUJhZGdlKHRhYktleSkgewogICAgICB0aGlzLm1haW5tZW51R3JvdXBzID0gdGhpcy5tYWlubWVudUdyb3Vwcy5tYXAoKGdyb3VwKSA9PiAoewogICAgICAgIC4uLmdyb3VwLAogICAgICAgIGl0ZW1zOiAoZ3JvdXAuaXRlbXMgfHwgW10pLm1hcCgodGFiMikgPT4gewogICAgICAgICAgaWYgKHRhYjIua2V5ID09PSB0YWJLZXkpIHsKICAgICAgICAgICAgY29uc3QgeyBiYWRnZSwgLi4ucmVzdCB9ID0gdGFiMjsKICAgICAgICAgICAgcmV0dXJuIHJlc3Q7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGFiMjsKICAgICAgICB9KQogICAgICB9KSk7CiAgICAgIHRoaXMubWFpbm1lbnVCb3R0b21UYWJzID0gdGhpcy5tYWlubWVudUJvdHRvbVRhYnMubWFwKCh0YWIyKSA9PiB7CiAgICAgICAgaWYgKHRhYjIua2V5ID09PSB0YWJLZXkpIHsKICAgICAgICAgIGNvbnN0IHsgYmFkZ2UsIC4uLnJlc3QgfSA9IHRhYjI7CiAgICAgICAgICByZXR1cm4gcmVzdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRhYjI7CiAgICAgIH0pOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQUk9HUkFNTUFUSUMgQVBJOiBTRUNPTkRBUlkgTUVOVQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIFNldCB0aGUgc2Vjb25kYXJ5IG1lbnUgY29uZmlndXJhdGlvbgogICAgICovCiAgICBzZXRTZWNvbmRhcnlNZW51KGNvbmZpZzMpIHsKICAgICAgaWYgKGNvbmZpZzMuaGVhZGluZyAhPT0gdm9pZCAwKSB7CiAgICAgICAgdGhpcy5zZWNvbmRhcnltZW51SGVhZGluZyA9IGNvbmZpZzMuaGVhZGluZzsKICAgICAgfQogICAgICB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMgPSBbLi4uY29uZmlnMy5ncm91cHNdOwogICAgfQogICAgLyoqCiAgICAgKiBVcGRhdGUgYSBzcGVjaWZpYyBzZWNvbmRhcnkgbWVudSBncm91cAogICAgICovCiAgICB1cGRhdGVTZWNvbmRhcnlNZW51R3JvdXAoZ3JvdXBOYW1lLCB1cGRhdGUpIHsKICAgICAgdGhpcy5zZWNvbmRhcnltZW51R3JvdXBzID0gdGhpcy5zZWNvbmRhcnltZW51R3JvdXBzLm1hcCgoZ3JvdXApID0+IGdyb3VwLm5hbWUgPT09IGdyb3VwTmFtZSA/IHsgLi4uZ3JvdXAsIC4uLnVwZGF0ZSB9IDogZ3JvdXApOwogICAgfQogICAgLyoqCiAgICAgKiBBZGQgYW4gaXRlbSB0byBhIHNlY29uZGFyeSBtZW51IGdyb3VwCiAgICAgKi8KICAgIGFkZFNlY29uZGFyeU1lbnVJdGVtKGdyb3VwTmFtZSwgaXRlbSkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMgPSB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMubWFwKChncm91cCkgPT4gewogICAgICAgIGlmIChncm91cC5uYW1lID09PSBncm91cE5hbWUpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIC4uLmdyb3VwLAogICAgICAgICAgICBpdGVtczogWy4uLmdyb3VwLml0ZW1zLCBpdGVtXQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGdyb3VwOwogICAgICB9KTsKICAgIH0KICAgIC8qKgogICAgICogU2V0IHRoZSBzZWxlY3RlZCBzZWNvbmRhcnkgbWVudSBpdGVtIGJ5IGtleSAoZm9yIHRhYiBpdGVtcyBvbmx5KQogICAgICovCiAgICBzZXRTZWNvbmRhcnlNZW51U2VsZWN0aW9uKGl0ZW1LZXkpIHsKICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMpIHsKICAgICAgICBjb25zdCBpdGVtID0gZ3JvdXAuaXRlbXMuZmluZCgoaTExKSA9PiAia2V5IiBpbiBpMTEgJiYgaTExLmtleSA9PT0gaXRlbUtleSk7CiAgICAgICAgaWYgKGl0ZW0gJiYgKCEoInR5cGUiIGluIGl0ZW0pIHx8IGl0ZW0udHlwZSA9PT0gInRhYiIgfHwgaXRlbS50eXBlID09PSB2b2lkIDApKSB7CiAgICAgICAgICB0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0gPSBpdGVtOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBDbGVhciB0aGUgc2Vjb25kYXJ5IG1lbnUKICAgICAqLwogICAgY2xlYXJTZWNvbmRhcnlNZW51KCkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVIZWFkaW5nID0gIiI7CiAgICAgIHRoaXMuc2Vjb25kYXJ5bWVudUdyb3VwcyA9IFtdOwogICAgICB0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0gPSB2b2lkIDA7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFBST0dSQU1NQVRJQyBBUEk6IENPTlRFTlQgVEFCUwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIFNldCB0aGUgY29udGVudCB0YWJzCiAgICAgKi8KICAgIHNldENvbnRlbnRUYWJzKHRhYnMpIHsKICAgICAgdGhpcy5tYWluY29udGVudFRhYnMgPSBbLi4udGFic107CiAgICAgIGlmICh0YWJzLmxlbmd0aCA+IDAgJiYgIXRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYikgewogICAgICAgIHRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYiA9IHRhYnNbMF07CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogQWRkIGEgY29udGVudCB0YWIKICAgICAqLwogICAgYWRkQ29udGVudFRhYih0YWIyKSB7CiAgICAgIHRoaXMubWFpbmNvbnRlbnRUYWJzID0gWy4uLnRoaXMubWFpbmNvbnRlbnRUYWJzLCB0YWIyXTsKICAgIH0KICAgIC8qKgogICAgICogUmVtb3ZlIGEgY29udGVudCB0YWIgYnkga2V5CiAgICAgKi8KICAgIHJlbW92ZUNvbnRlbnRUYWIodGFiS2V5KSB7CiAgICAgIHRoaXMubWFpbmNvbnRlbnRUYWJzID0gdGhpcy5tYWluY29udGVudFRhYnMuZmlsdGVyKCh0OSkgPT4gdDkua2V5ICE9PSB0YWJLZXkpOwogICAgICBpZiAodGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiPy5rZXkgPT09IHRhYktleSkgewogICAgICAgIHRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYiA9IHRoaXMubWFpbmNvbnRlbnRUYWJzWzBdOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFNlbGVjdCBhIGNvbnRlbnQgdGFiIGJ5IGtleQogICAgICovCiAgICBzZWxlY3RDb250ZW50VGFiKHRhYktleSkgewogICAgICBjb25zdCB0YWIyID0gdGhpcy5tYWluY29udGVudFRhYnMuZmluZCgodDkpID0+IHQ5LmtleSA9PT0gdGFiS2V5KTsKICAgICAgaWYgKHRhYjIpIHsKICAgICAgICB0aGlzLm1haW5jb250ZW50U2VsZWN0ZWRUYWIgPSB0YWIyOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEdldCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNvbnRlbnQgdGFiCiAgICAgKi8KICAgIGdldFNlbGVjdGVkQ29udGVudFRhYigpIHsKICAgICAgcmV0dXJuIHRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYjsKICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUFJPR1JBTU1BVElDIEFQSTogQUNUSVZJVFkgTE9HCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogR2V0IHRoZSBhY3Rpdml0eSBsb2cgQVBJCiAgICAgKi8KICAgIGdldCBhY3Rpdml0eUxvZygpIHsKICAgICAgaWYgKCF0aGlzLmFjdGl2aXR5bG9nRWxlbWVudCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBhZGQ6IChlbnRyeSkgPT4gewogICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQ/LmFkZChlbnRyeSkpOwogICAgICAgICAgfSwKICAgICAgICAgIGFkZE1hbnk6IChlbnRyaWVzKSA9PiB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudD8uYWRkTWFueShlbnRyaWVzKSk7CiAgICAgICAgICB9LAogICAgICAgICAgY2xlYXI6ICgpID0+IHsKICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5jbGVhcigpKTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXRFbnRyaWVzOiAoKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudD8uZ2V0RW50cmllcygpIHx8IFtdLAogICAgICAgICAgZmlsdGVyOiAoY3JpdGVyaWEpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5maWx0ZXIoY3JpdGVyaWEpIHx8IFtdLAogICAgICAgICAgc2VhcmNoOiAocXVlcnkpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5zZWFyY2gocXVlcnkpIHx8IFtdCiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgIGFkZDogKGVudHJ5KSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5hZGQoZW50cnkpLAogICAgICAgIGFkZE1hbnk6IChlbnRyaWVzKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5hZGRNYW55KGVudHJpZXMpLAogICAgICAgIGNsZWFyOiAoKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5jbGVhcigpLAogICAgICAgIGdldEVudHJpZXM6ICgpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50LmdldEVudHJpZXMoKSwKICAgICAgICBmaWx0ZXI6IChjcml0ZXJpYSkgPT4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuZmlsdGVyKGNyaXRlcmlhKSwKICAgICAgICBzZWFyY2g6IChxdWVyeSkgPT4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuc2VhcmNoKHF1ZXJ5KQogICAgICB9OwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgYWN0aXZpdHkgbG9nIHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0QWN0aXZpdHlMb2dWaXNpYmxlKHZpc2libGUpIHsKICAgICAgdGhpcy5hY3Rpdml0eUxvZ1Zpc2libGUgPSB2aXNpYmxlOwogICAgfQogICAgLyoqCiAgICAgKiBUb2dnbGUgYWN0aXZpdHkgbG9nIHZpc2liaWxpdHkKICAgICAqLwogICAgdG9nZ2xlQWN0aXZpdHlMb2coKSB7CiAgICAgIHRoaXMuYWN0aXZpdHlMb2dWaXNpYmxlID0gIXRoaXMuYWN0aXZpdHlMb2dWaXNpYmxlOwogICAgfQogICAgLyoqCiAgICAgKiBHZXQgYWN0aXZpdHkgbG9nIHZpc2liaWxpdHkgc3RhdGUKICAgICAqLwogICAgZ2V0QWN0aXZpdHlMb2dWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy5hY3Rpdml0eUxvZ1Zpc2libGU7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFBST0dSQU1NQVRJQyBBUEk6IEJPVFRPTSBCQVIKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLyoqCiAgICAgKiBHZXQgdGhlIGJvdHRvbSBiYXIgQVBJIGZvciB3aWRnZXQvYWN0aW9uIG1hbmFnZW1lbnQKICAgICAqLwogICAgZ2V0IGJvdHRvbUJhcigpIHsKICAgICAgaWYgKCF0aGlzLmJvdHRvbWJhckVsZW1lbnQpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgYWRkV2lkZ2V0OiAod2lkZ2V0KSA9PiB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQ/LmFkZFdpZGdldCh3aWRnZXQpKTsKICAgICAgICAgIH0sCiAgICAgICAgICB1cGRhdGVXaWRnZXQ6IChpZCwgdXBkYXRlKSA9PiB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQ/LnVwZGF0ZVdpZGdldChpZCwgdXBkYXRlKSk7CiAgICAgICAgICB9LAogICAgICAgICAgcmVtb3ZlV2lkZ2V0OiAoaWQpID0+IHsKICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudD8ucmVtb3ZlV2lkZ2V0KGlkKSk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0V2lkZ2V0OiAoaWQpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudD8uZ2V0V2lkZ2V0KGlkKSwKICAgICAgICAgIGNsZWFyV2lkZ2V0czogKCkgPT4gewogICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50Py5jbGVhcldpZGdldHMoKSk7CiAgICAgICAgICB9LAogICAgICAgICAgYWRkQWN0aW9uOiAoYWN0aW9uKSA9PiB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQ/LmFkZEFjdGlvbihhY3Rpb24pKTsKICAgICAgICAgIH0sCiAgICAgICAgICByZW1vdmVBY3Rpb246IChpZCkgPT4gewogICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50Py5yZW1vdmVBY3Rpb24oaWQpKTsKICAgICAgICAgIH0sCiAgICAgICAgICBjbGVhckFjdGlvbnM6ICgpID0+IHsKICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudD8uY2xlYXJBY3Rpb25zKCkpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgICAgcmV0dXJuIHsKICAgICAgICBhZGRXaWRnZXQ6ICh3aWRnZXQpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudC5hZGRXaWRnZXQod2lkZ2V0KSwKICAgICAgICB1cGRhdGVXaWRnZXQ6IChpZCwgdXBkYXRlKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQudXBkYXRlV2lkZ2V0KGlkLCB1cGRhdGUpLAogICAgICAgIHJlbW92ZVdpZGdldDogKGlkKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQucmVtb3ZlV2lkZ2V0KGlkKSwKICAgICAgICBnZXRXaWRnZXQ6IChpZCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50LmdldFdpZGdldChpZCksCiAgICAgICAgY2xlYXJXaWRnZXRzOiAoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQuY2xlYXJXaWRnZXRzKCksCiAgICAgICAgYWRkQWN0aW9uOiAoYWN0aW9uKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQuYWRkQWN0aW9uKGFjdGlvbiksCiAgICAgICAgcmVtb3ZlQWN0aW9uOiAoaWQpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudC5yZW1vdmVBY3Rpb24oaWQpLAogICAgICAgIGNsZWFyQWN0aW9uczogKCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50LmNsZWFyQWN0aW9ucygpCiAgICAgIH07CiAgICB9CiAgICAvKioKICAgICAqIFNldCBib3R0b20gYmFyIHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0Qm90dG9tQmFyVmlzaWJsZSh2aXNpYmxlKSB7CiAgICAgIHRoaXMuYm90dG9tYmFyVmlzaWJsZSA9IHZpc2libGU7CiAgICAgIGlmICghdmlzaWJsZSkgewogICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJib3R0b21iYXItaGlkZGVuIiwgIiIpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKCJib3R0b21iYXItaGlkZGVuIik7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogR2V0IGJvdHRvbSBiYXIgdmlzaWJpbGl0eSBzdGF0ZQogICAgICovCiAgICBnZXRCb3R0b21CYXJWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy5ib3R0b21iYXJWaXNpYmxlOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQUk9HUkFNTUFUSUMgQVBJOiBOQVZJR0FUSU9OCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogTmF2aWdhdGUgdG8gYSB2aWV3IGJ5IElECiAgICAgKi8KICAgIGFzeW5jIG5hdmlnYXRlVG9WaWV3KHZpZXdJZCwgcGFyYW1zMikgewogICAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3UmVnaXN0cnkuZ2V0KHZpZXdJZCk7CiAgICAgIGlmICghdmlldykgewogICAgICAgIGNvbnNvbGUud2FybihgQ2Fubm90IG5hdmlnYXRlIHRvIHVua25vd24gdmlldzogJHt2aWV3SWR9YCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGNvbnN0IGNhbkxlYXZlID0gYXdhaXQgdGhpcy52aWV3UmVnaXN0cnkuY2FuTGVhdmVDdXJyZW50VmlldygpOwogICAgICBpZiAoY2FuTGVhdmUgIT09IHRydWUpIHsKICAgICAgICBpZiAodHlwZW9mIGNhbkxlYXZlID09PSAic3RyaW5nIikgewogICAgICAgICAgY29uc3QgY29uZmlybWVkID0gd2luZG93LmNvbmZpcm0oY2FuTGVhdmUpOwogICAgICAgICAgaWYgKCFjb25maXJtZWQpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLnZpZXdMaWZlY3ljbGUkLm5leHQoeyB0eXBlOiAibG9hZGluZyIsIHZpZXdJZCB9KTsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCB0aGlzLmxvYWRWaWV3KHZpZXcsIHBhcmFtczIpOwogICAgICAgIGNvbnN0IHJvdXRlID0gdmlldy5yb3V0ZSB8fCB2aWV3SWQ7CiAgICAgICAgY29uc3QgbmV3SGFzaCA9IGAjJHtyb3V0ZX1gOwogICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaGFzaCAhPT0gbmV3SGFzaCkgewogICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHsgdmlld0lkIH0sICIiLCBuZXdIYXNoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgdGhpcy52aWV3TGlmZWN5Y2xlJC5uZXh0KHsgdHlwZTogImxvYWRFcnJvciIsIHZpZXdJZCwgZXJyb3IgfSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEdldCB0aGUgY3VycmVudCB2aWV3CiAgICAgKi8KICAgIGdldEN1cnJlbnRWaWV3KCkgewogICAgICByZXR1cm4gdGhpcy5jdXJyZW50VmlldzsKICAgIH0KICAgIC8qKgogICAgICogR2V0IGFjY2VzcyB0byB0aGUgdmlldyByZWdpc3RyeSAoZm9yIGFkdmFuY2VkIHVzZSkKICAgICAqLwogICAgZ2V0Vmlld1JlZ2lzdHJ5KCkgewogICAgICByZXR1cm4gdGhpcy52aWV3UmVnaXN0cnk7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFVOSUZJRUQgQ09ORklHVVJBVElPTgogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIENvbmZpZ3VyZSB0aGUgYXBwIHNoZWxsIHdpdGggYSB1bmlmaWVkIGNvbmZpZyBvYmplY3QKICAgICAqLwogICAgY29uZmlndXJlKGNvbmZpZzMpIHsKICAgICAgaWYgKGNvbmZpZzMudmlld3MpIHsKICAgICAgICB0aGlzLnZpZXdSZWdpc3RyeS5jbGVhcigpOwogICAgICAgIHRoaXMudmlld1JlZ2lzdHJ5LnJlZ2lzdGVyQWxsKGNvbmZpZzMudmlld3MpOwogICAgICB9CiAgICAgIGlmIChjb25maWczLmJyYW5kaW5nKSB7CiAgICAgICAgdGhpcy5tYWlubWVudUxvZ29JY29uID0gY29uZmlnMy5icmFuZGluZy5sb2dvSWNvbiB8fCAiIjsKICAgICAgICB0aGlzLm1haW5tZW51TG9nb1RleHQgPSBjb25maWczLmJyYW5kaW5nLmxvZ29UZXh0IHx8ICIiOwogICAgICB9CiAgICAgIGlmIChjb25maWczLmFwcEJhcikgewogICAgICAgIHRoaXMuYXBwYmFyTWVudUl0ZW1zID0gY29uZmlnMy5hcHBCYXIubWVudUl0ZW1zIHx8IFtdOwogICAgICAgIHRoaXMuYXBwYmFyQnJlYWRjcnVtYnMgPSBjb25maWczLmFwcEJhci5icmVhZGNydW1icyB8fCAiIjsKICAgICAgICB0aGlzLmFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3IgPSBjb25maWczLmFwcEJhci5icmVhZGNydW1iU2VwYXJhdG9yIHx8ICIgPiAiOwogICAgICAgIHRoaXMuYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzID0gY29uZmlnMy5hcHBCYXIuc2hvd1dpbmRvd0NvbnRyb2xzID8/IHRydWU7CiAgICAgICAgdGhpcy5hcHBiYXJTaG93U2VhcmNoID0gY29uZmlnMy5hcHBCYXIuc2hvd1NlYXJjaCA/PyBmYWxzZTsKICAgICAgICB0aGlzLmFwcGJhclVzZXIgPSBjb25maWczLmFwcEJhci51c2VyOwogICAgICAgIHRoaXMuYXBwYmFyUHJvZmlsZU1lbnVJdGVtcyA9IGNvbmZpZzMuYXBwQmFyLnByb2ZpbGVNZW51SXRlbXMgfHwgW107CiAgICAgIH0KICAgICAgaWYgKGNvbmZpZzMubWFpbk1lbnUpIHsKICAgICAgICBpZiAoY29uZmlnMy5tYWluTWVudS5zZWN0aW9ucykgewogICAgICAgICAgdGhpcy5tYWlubWVudUdyb3VwcyA9IHRoaXMuYnVpbGRNYWluTWVudUZyb21TZWN0aW9ucyhjb25maWczKTsKICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZzMubWFpbk1lbnUuZ3JvdXBzKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51R3JvdXBzID0gY29uZmlnMy5tYWluTWVudS5ncm91cHM7CiAgICAgICAgfQogICAgICAgIGlmIChjb25maWczLm1haW5NZW51LmxvZ29JY29uKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51TG9nb0ljb24gPSBjb25maWczLm1haW5NZW51LmxvZ29JY29uOwogICAgICAgIH0KICAgICAgICBpZiAoY29uZmlnMy5tYWluTWVudS5sb2dvVGV4dCkgewogICAgICAgICAgdGhpcy5tYWlubWVudUxvZ29UZXh0ID0gY29uZmlnMy5tYWluTWVudS5sb2dvVGV4dDsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbmZpZzMubWFpbk1lbnUuYm90dG9tVGFicykgewogICAgICAgICAgdGhpcy5tYWlubWVudUJvdHRvbVRhYnMgPSBjb25maWczLm1haW5NZW51LmJvdHRvbVRhYnM7CiAgICAgICAgfSBlbHNlIGlmIChjb25maWczLm1haW5NZW51LmJvdHRvbUl0ZW1zKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51Qm90dG9tVGFicyA9IHRoaXMuYnVpbGRCb3R0b21UYWJzRnJvbUl0ZW1zKGNvbmZpZzMubWFpbk1lbnUuYm90dG9tSXRlbXMpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoY29uZmlnMy5ib3R0b21CYXIpIHsKICAgICAgICB0aGlzLnNldEJvdHRvbUJhclZpc2libGUoY29uZmlnMy5ib3R0b21CYXIudmlzaWJsZSA/PyB0cnVlKTsKICAgICAgICBpZiAoY29uZmlnMy5ib3R0b21CYXIud2lkZ2V0cykgewogICAgICAgICAgY29uZmlnMy5ib3R0b21CYXIud2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQpID0+IHsKICAgICAgICAgICAgdGhpcy5ib3R0b21CYXIuYWRkV2lkZ2V0KHdpZGdldCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbmZpZzMuYm90dG9tQmFyLmFjdGlvbnMpIHsKICAgICAgICAgIGNvbmZpZzMuYm90dG9tQmFyLmFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7CiAgICAgICAgICAgIHRoaXMuYm90dG9tQmFyLmFkZEFjdGlvbihhY3Rpb24pOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuc2V0dXBSb3V0ZXJJbnRlZ3JhdGlvbihjb25maWczKTsKICAgICAgaWYgKGNvbmZpZzMub25WaWV3Q2hhbmdlKSB7CiAgICAgICAgdGhpcy52aWV3Q2hhbmdlZCQuc3Vic2NyaWJlKChldmVudCkgPT4gewogICAgICAgICAgY29uZmlnMy5vblZpZXdDaGFuZ2UoZXZlbnQudmlld0lkLCBldmVudC52aWV3KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoY29uZmlnMy5vblNlYXJjaCkgewogICAgICAgIHRoaXMuc2VhcmNoQ2FsbGJhY2sgPSBjb25maWczLm9uU2VhcmNoOwogICAgICB9CiAgICAgIGlmIChjb25maWczLmRlZmF1bHRWaWV3KSB7CiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvVmlldyhjb25maWczLmRlZmF1bHRWaWV3KTsKICAgICAgfQogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQUklWQVRFIEhFTFBFUiBNRVRIT0RTCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIHNldHVwUm91dGVySW50ZWdyYXRpb24oY29uZmlnMykgewogICAgICBjb25zdCBoYW5kbGVIYXNoQ2hhbmdlID0gKCkgPT4gewogICAgICAgIGNvbnN0IGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKTsKICAgICAgICBpZiAoIWhhc2gpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgbWF0Y2gyID0gdGhpcy52aWV3UmVnaXN0cnkuZmluZEJ5Um91dGUoaGFzaCk7CiAgICAgICAgaWYgKG1hdGNoMikgewogICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvVmlldyhtYXRjaDIudmlldy5pZCwgbWF0Y2gyLnBhcmFtcyk7CiAgICAgICAgfQogICAgICB9OwogICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsIGhhbmRsZUhhc2hDaGFuZ2UpOwogICAgICB0aGlzLnJvdXRlckNsZWFudXAgPSAoKSA9PiB7CiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLCBoYW5kbGVIYXNoQ2hhbmdlKTsKICAgICAgfTsKICAgICAgY29uc3QgY3VycmVudEhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKTsKICAgICAgaWYgKGN1cnJlbnRIYXNoKSB7CiAgICAgICAgY29uc3QgbWF0Y2gyID0gdGhpcy52aWV3UmVnaXN0cnkuZmluZEJ5Um91dGUoY3VycmVudEhhc2gpOwogICAgICAgIGlmIChtYXRjaDIpIHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5uYXZpZ2F0ZVRvVmlldyhtYXRjaDIudmlldy5pZCwgbWF0Y2gyLnBhcmFtcyksIDApOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYnVpbGRNYWluTWVudUZyb21TZWN0aW9ucyhjb25maWczKSB7CiAgICAgIGlmICghY29uZmlnMy5tYWluTWVudT8uc2VjdGlvbnMpCiAgICAgICAgcmV0dXJuIFtdOwogICAgICByZXR1cm4gY29uZmlnMy5tYWluTWVudS5zZWN0aW9ucy5tYXAoKHNlY3Rpb24pID0+ICh7CiAgICAgICAgbmFtZTogc2VjdGlvbi5uYW1lLAogICAgICAgIGl0ZW1zOiBzZWN0aW9uLnZpZXdzLm1hcCgodmlld0lkKSA9PiB7CiAgICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3UmVnaXN0cnkuZ2V0KHZpZXdJZCk7CiAgICAgICAgICBpZiAoIXZpZXcpIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKGBWaWV3ICIke3ZpZXdJZH0iIG5vdCBmb3VuZCBpbiByZWdpc3RyeWApOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGtleTogdmlldy5pZCwKICAgICAgICAgICAgaWNvbk5hbWU6IHZpZXcuaWNvbk5hbWUsCiAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5uYXZpZ2F0ZVRvVmlldyh2aWV3SWQpLAogICAgICAgICAgICBiYWRnZTogdmlldy5iYWRnZQogICAgICAgICAgfTsKICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbikKICAgICAgfSkpOwogICAgfQogICAgYnVpbGRCb3R0b21UYWJzRnJvbUl0ZW1zKGl0ZW1zKSB7CiAgICAgIHJldHVybiBpdGVtcy5tYXAoKHZpZXdJZCkgPT4gewogICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXdSZWdpc3RyeS5nZXQodmlld0lkKTsKICAgICAgICBpZiAoIXZpZXcpIHsKICAgICAgICAgIGNvbnNvbGUud2FybihgVmlldyAiJHt2aWV3SWR9IiBub3QgZm91bmQgaW4gcmVnaXN0cnlgKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gewogICAgICAgICAga2V5OiB2aWV3LmlkLAogICAgICAgICAgaWNvbk5hbWU6IHZpZXcuaWNvbk5hbWUsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMubmF2aWdhdGVUb1ZpZXcodmlld0lkKQogICAgICAgIH07CiAgICAgIH0pLmZpbHRlcihCb29sZWFuKTsKICAgIH0KICAgIGFzeW5jIGxvYWRWaWV3KHZpZXcsIHBhcmFtczIpIHsKICAgICAgY29uc3QgcHJldmlvdXNWaWV3ID0gdGhpcy5jdXJyZW50VmlldzsKICAgICAgdGhpcy5jdXJyZW50VmlldyA9IHZpZXc7CiAgICAgIGNvbnN0IHZpZXdDb250YWluZXIgPSB0aGlzLm1haW5jb250ZW50Py5xdWVyeVNlbGVjdG9yKCIudmlldy1jb250YWluZXIiKSB8fCB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi52aWV3LWNvbnRhaW5lciIpOwogICAgICBpZiAodmlld0NvbnRhaW5lcikgewogICAgICAgIGNvbnN0IGVsZW1lbnQ0ID0gYXdhaXQgdGhpcy52aWV3UmVnaXN0cnkuYWN0aXZhdGVWaWV3KHZpZXcuaWQsIHZpZXdDb250YWluZXIsIHBhcmFtczIpOwogICAgICAgIGlmIChlbGVtZW50NCkgewogICAgICAgICAgdGhpcy52aWV3TGlmZWN5Y2xlJC5uZXh0KHsKICAgICAgICAgICAgdHlwZTogImFjdGl2YXRlZCIsCiAgICAgICAgICAgIHZpZXdJZDogdmlldy5pZCwKICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudDQsCiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zMgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh2aWV3LnNlY29uZGFyeU1lbnUpIHsKICAgICAgICB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMgPSB2aWV3LnNlY29uZGFyeU1lbnU7CiAgICAgICAgdGhpcy5zZWNvbmRhcnltZW51SGVhZGluZyA9IHZpZXcubmFtZTsKICAgICAgfQogICAgICBpZiAodmlldy5jb250ZW50VGFicykgewogICAgICAgIHRoaXMubWFpbmNvbnRlbnRUYWJzID0gdmlldy5jb250ZW50VGFiczsKICAgICAgfQogICAgICB0aGlzLnNldE1haW5NZW51U2VsZWN0aW9uKHZpZXcuaWQpOwogICAgICBjb25zdCBjaGFuZ2VFdmVudCA9IHsKICAgICAgICB2aWV3SWQ6IHZpZXcuaWQsCiAgICAgICAgdmlldywKICAgICAgICBwcmV2aW91c1ZpZXcsCiAgICAgICAgcGFyYW1zOiBwYXJhbXMyCiAgICAgIH07CiAgICAgIHRoaXMudmlld0NoYW5nZWQkLm5leHQoY2hhbmdlRXZlbnQpOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ2aWV3LWNoYW5nZSIsIHsKICAgICAgICBkZXRhaWw6IGNoYW5nZUV2ZW50LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBFVkVOVCBIQU5ETEVSUyAoSW50ZXJuYWwpCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIGhhbmRsZUFwcGJhck1lbnVTZWxlY3QoZTExKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImFwcGJhci1tZW51LXNlbGVjdCIsIHsKICAgICAgICBkZXRhaWw6IGUxMS5kZXRhaWwsCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVBcHBiYXJCcmVhZGNydW1iTmF2aWdhdGUoZTExKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImFwcGJhci1icmVhZGNydW1iLW5hdmlnYXRlIiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZUFwcGJhclNlYXJjaENsaWNrKCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJhcHBiYXItc2VhcmNoLWNsaWNrIiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlQXBwYmFyU2VhcmNoUXVlcnkoZTExKSB7CiAgICAgIGlmICh0aGlzLnNlYXJjaENhbGxiYWNrKSB7CiAgICAgICAgdGhpcy5zZWFyY2hDYWxsYmFjayhlMTEuZGV0YWlsLnF1ZXJ5KTsKICAgICAgfQogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWFyY2gtcXVlcnkiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlQXBwYmFyVXNlck1lbnVPcGVuKCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJhcHBiYXItdXNlci1tZW51LW9wZW4iLCB7CiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVBcHBiYXJQcm9maWxlTWVudVNlbGVjdChlMTEpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYXBwYmFyLXByb2ZpbGUtbWVudS1zZWxlY3QiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTWFpbm1lbnVUYWJTZWxlY3QoZTExKSB7CiAgICAgIHRoaXMubWFpbm1lbnVTZWxlY3RlZFRhYiA9IGUxMS5kZXRhaWwudGFiOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtYWlubWVudS10YWItc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZVNlY29uZGFyeW1lbnVJdGVtU2VsZWN0KGUxMSkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0gPSBlMTEuZGV0YWlsLml0ZW07CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlY29uZGFyeW1lbnUtaXRlbS1zZWxlY3QiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTWFpbm1lbnVDb2xsYXBzZUNoYW5nZShlMTEpIHsKICAgICAgdGhpcy5tYWlubWVudUNvbGxhcHNlZCA9IGUxMS5kZXRhaWwuY29sbGFwc2VkOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtYWlubWVudS1jb2xsYXBzZS1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlU2Vjb25kYXJ5bWVudUNvbGxhcHNlQ2hhbmdlKGUxMSkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVDb2xsYXBzZWQgPSBlMTEuZGV0YWlsLmNvbGxhcHNlZDsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2Vjb25kYXJ5bWVudS1jb2xsYXBzZS1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlQ29udGVudFRhYlNlbGVjdChlMTEpIHsKICAgICAgdGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiID0gZTExLmRldGFpbC50YWI7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbnRlbnQtdGFiLXNlbGVjdCIsIHsKICAgICAgICBkZXRhaWw6IGUxMS5kZXRhaWwsCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVDb250ZW50VGFiQ2xvc2UoZTExKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbnRlbnQtdGFiLWNsb3NlIiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNBcHB1aTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWJ1dHRvbi9kZWVzLWJ1dHRvbi1leGl0L2RlZXMtYnV0dG9uLWV4aXQuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9fZXNEZWNvcmF0ZTQzID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0NCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0J1dHRvbkV4aXQgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWJ1dHRvbi1leGl0IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfc2l6ZV9kZWNvcmF0b3JzOwogIGxldCBfc2l6ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0J1dHRvbkV4aXQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfc2l6ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBOdW1iZXIKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGU0Myh0aGlzLCBudWxsLCBfc2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2l6ZV9pbml0aWFsaXplcnMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDMobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQnV0dG9uRXhpdDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gREVNTwogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmAKICAgIDxkZWVzLWJ1dHRvbi1leGl0PjwvZGVlcy1idXR0b24tZXhpdD4KICBgOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJCdXR0b24iOwogICAgI3NpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDQodGhpcywgX3NpemVfaW5pdGlhbGl6ZXJzLCAyNCk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2l6ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3R5bGVzID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDQodGhpcywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpLCBbCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKCiAgICBgCiAgICBdKTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgd2lkdGg6ICR7dGhpcy5zaXplfXB4OwogICAgICAgICAgaGVpZ2h0OiAke3RoaXMuc2l6ZX1weDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImZpcnN0TGluZSI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2Vjb25kTGluZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNCdXR0b25FeGl0MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uLWdyb3VwL2RlZXMtYnV0dG9uLWdyb3VwLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMzEgPSAoKSA9PiB7CiAgcmV0dXJuIGIyYAogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW9Cb3ggewogICAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMDsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMycHg7CiAgICAgICAgfQoKICAgICAgICAuZGVtby10aXRsZSB7CiAgICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICB9CgogICAgICAgIC5kZW1vLWRlc2NyaXB0aW9uIHsKICAgICAgICAgIGNvbG9yOiAjOTk5OwogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9ImRlbW9Cb3giPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+QmFzaWMgQnV0dG9uIEdyb3VwczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkJ1dHRvbiBncm91cHMgd2l0aG91dCBsYWJlbHMgZm9yIHNpbXBsZSBncm91cGluZzwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgICA8ZGVlcy1idXR0b24+T3B0aW9uIDE8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPk9wdGlvbiAyPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5PcHRpb24gMzwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+TGFiZWxlZCBCdXR0b24gR3JvdXBzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+QnV0dG9uIGdyb3VwcyB3aXRoIGRlc2NyaXB0aXZlIGxhYmVsczwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlZpZXcgTW9kZToiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5HcmlkPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5MaXN0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5DYXJkczwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+TXVsdGlwbGUgR3JvdXBzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+TXVsdGlwbGUgYnV0dG9uIGdyb3VwcyB1c2VkIHRvZ2V0aGVyPC9wPgogICAgICAgIAogICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogMTZweDsgZmxleC13cmFwOiB3cmFwOyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkRhdGFzZXQ6Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5TeXN0ZW08L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+TmV0d29yazwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TYWxlczwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlRpbWUgUmFuZ2U6Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPjFIPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj4yNEg8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+N0Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+MzBEPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iQWN0aW9uczoiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+UmVmcmVzaDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5FeHBvcnQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VmVydGljYWwgQnV0dG9uIEdyb3VwczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkJ1dHRvbiBncm91cHMgd2l0aCB2ZXJ0aWNhbCBsYXlvdXQ8L3A+CiAgICAgICAgCiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiAyNHB4OyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgZGlyZWN0aW9uPSJ2ZXJ0aWNhbCIgbGFiZWw9Ik5hdmlnYXRpb246Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkRhc2hib2FyZDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJoaWdobGlnaHRlZCI+QW5hbHl0aWNzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlJlcG9ydHM8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+U2V0dGluZ3M8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGRpcmVjdGlvbj0idmVydGljYWwiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+QWRkIEl0ZW08L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+RWRpdCBJdGVtPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkRlbGV0ZSBJdGVtPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPk1peGVkIEJ1dHRvbiBUeXBlczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkRpZmZlcmVudCBidXR0b24gdHlwZXMgd2l0aGluIGdyb3VwczwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlN0YXR1czoiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9InN1Y2Nlc3MiPkFjdGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+UGVuZGluZzwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGFuZ2VyIj5JbmFjdGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWJ1dHRvbi9kZWVzLWJ1dHRvbi1ncm91cC9kZWVzLWJ1dHRvbi1ncm91cC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU0NCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNDUgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNCdXR0b25Hcm91cCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYnV0dG9uLWdyb3VwIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbGFiZWxfZGVjb3JhdG9yczsKICBsZXQgX2xhYmVsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RpcmVjdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfZGlyZWN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlyZWN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNCdXR0b25Hcm91cDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9sYWJlbF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfZGlyZWN0aW9uX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTQ0KHRoaXMsIG51bGwsIF9sYWJlbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsYWJlbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGFiZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGFiZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxhYmVsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhYmVsX2luaXRpYWxpemVycywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDQodGhpcywgbnVsbCwgX2RpcmVjdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkaXJlY3Rpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpcmVjdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaXJlY3Rpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRpcmVjdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXJlY3Rpb25faW5pdGlhbGl6ZXJzLCBfZGlyZWN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQnV0dG9uR3JvdXAyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMzMTsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiQnV0dG9uIjsKICAgICNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0NSh0aGlzLCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgbGFiZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxhYmVsKHZhbHVlMikgewogICAgICB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RpcmVjdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDUodGhpcywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0NSh0aGlzLCBfZGlyZWN0aW9uX2luaXRpYWxpemVycywgImhvcml6b250YWwiKSk7CiAgICBnZXQgZGlyZWN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jZGlyZWN0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGlyZWN0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNkaXJlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICBfX3J1bkluaXRpYWxpemVyczQ1KHRoaXMsIF9kaXJlY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBkb210b29sc19lbGVtZW50YmFzaWNfZXhwb3J0cy5zZXR1cCgpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5idXR0b24tZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24tZ3JvdXAudmVydGljYWwgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICAgIH0KCiAgICAgIC5sYWJlbCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiM5OTkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi1ncm91cC52ZXJ0aWNhbCAubGFiZWwgewogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwICR7dGhpcy5kaXJlY3Rpb259Ij4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8c3BhbiBjbGFzcz0ibGFiZWwiPiR7dGhpcy5sYWJlbH08L3NwYW4+YCA6ICIifQogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0NShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0J1dHRvbkdyb3VwMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtY2hhcnQvZGVlcy1jaGFydC1hcmVhL2RlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMzIgPSAoKSA9PiB7CiAgY29uc3QgaW5pdGlhbERhdGFzZXRzID0gewogICAgc3lzdGVtOiB7CiAgICAgIGxhYmVsOiAiU3lzdGVtIFVzYWdlICglKSIsCiAgICAgIHNlcmllczogWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDUFUiLAogICAgICAgICAgZGF0YTogWwogICAgICAgICAgICB7IHg6IG5ldyBEYXRlKERhdGUubm93KCkgLSAzZTUpLnRvSVNPU3RyaW5nKCksIHk6IDI1IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDI0ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDMwIH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDE4ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDI4IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDEyZTQpLnRvSVNPU3RyaW5nKCksIHk6IDM1IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDZlNCkudG9JU09TdHJpbmcoKSwgeTogMzIgfSwKICAgICAgICAgICAgeyB4OiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksIHk6IDM4IH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJNZW1vcnkiLAogICAgICAgICAgZGF0YTogWwogICAgICAgICAgICB7IHg6IG5ldyBEYXRlKERhdGUubm93KCkgLSAzZTUpLnRvSVNPU3RyaW5nKCksIHk6IDQ1IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDI0ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDQ4IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDE4ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDQ2IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDEyZTQpLnRvSVNPU3RyaW5nKCksIHk6IDUyIH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDZlNCkudG9JU09TdHJpbmcoKSwgeTogNTAgfSwKICAgICAgICAgICAgeyB4OiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksIHk6IDU1IH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0KICAgIH0KICB9OwogIGNvbnN0IGluaXRpYWxGb3JtYXR0ZXJzID0gewogICAgc3lzdGVtOiAodmFsKSA9PiBgJHt2YWx9JWAKICB9OwogIHJldHVybiBiMmAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICBjb25zdCBjaGFydEVsZW1lbnQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNtYWluLWNoYXJ0Iik7CiAgICBjb25zdCBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2Nvbm5lY3Rpb25zLWNoYXJ0Iik7CiAgICBsZXQgaW50ZXJ2YWxJZDsKICAgIGxldCBjb25uZWN0aW9uc0ludGVydmFsSWQ7CiAgICBsZXQgY3VycmVudERhdGFzZXQgPSAic3lzdGVtIjsKICAgIGNvbnN0IGZvcm1hdHRlcnMyID0gewogICAgICBzeXN0ZW06ICh2YWwpID0+IGAke3ZhbH0lYCwKICAgICAgbmV0d29yazogKHZhbCkgPT4gYCR7dmFsfSBNYnBzYCwKICAgICAgc2FsZXM6ICh2YWwpID0+IGAkJHt2YWwudG9Mb2NhbGVTdHJpbmcoKX1gCiAgICB9OwogICAgY29uc3QgVElNRV9XSU5ET1cgPSAyICogNjAgKiAxZTM7CiAgICBjb25zdCBVUERBVEVfSU5URVJWQUwgPSAxZTM7CiAgICBjb25zdCBEQVRBX1BPSU5UX0lOVEVSVkFMID0gNWUzOwogICAgbGV0IHByZXZpb3VzVmFsdWVzID0gewogICAgICBjcHU6IDMwLAogICAgICBtZW1vcnk6IDUwLAogICAgICBkb3dubG9hZDogMTUwLAogICAgICB1cGxvYWQ6IDMwLAogICAgICBjb25uZWN0aW9uczogMTUwCiAgICB9OwogICAgY29uc3QgZ2VuZXJhdGVJbml0aWFsRGF0YSA9IChiYXNlVmFsdWUsIHZhcmlhbmNlLCBpbnRlcnZhbDMgPSBEQVRBX1BPSU5UX0lOVEVSVkFMKSA9PiB7CiAgICAgIGNvbnN0IGRhdGEgPSBbXTsKICAgICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICAgIGNvbnN0IHBvaW50Q291bnQgPSBNYXRoLmZsb29yKFRJTUVfV0lORE9XIC8gaW50ZXJ2YWwzKTsKICAgICAgZm9yIChsZXQgaTExID0gcG9pbnRDb3VudDsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgY29uc3QgdGltZXN0YW1wMiA9IG5ldyBEYXRlKG5vdzIgLSBpMTEgKiBpbnRlcnZhbDMpLnRvSVNPU3RyaW5nKCk7CiAgICAgICAgY29uc3QgdmFsdWUyID0gYmFzZVZhbHVlICsgKE1hdGgucmFuZG9tKCkgLSAwLjUpICogdmFyaWFuY2U7CiAgICAgICAgZGF0YS5wdXNoKHsgeDogdGltZXN0YW1wMiwgeTogTWF0aC5yb3VuZCh2YWx1ZTIpIH0pOwogICAgICB9CiAgICAgIHJldHVybiBkYXRhOwogICAgfTsKICAgIGNvbnN0IGRhdGFzZXRzID0gewogICAgICBzeXN0ZW06IHsKICAgICAgICBsYWJlbDogIlN5c3RlbSBVc2FnZSAoJSkiLAogICAgICAgIHNlcmllczogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiQ1BVIiwKICAgICAgICAgICAgZGF0YTogZ2VuZXJhdGVJbml0aWFsRGF0YShwcmV2aW91c1ZhbHVlcy5jcHUsIDEwKQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIk1lbW9yeSIsCiAgICAgICAgICAgIGRhdGE6IGdlbmVyYXRlSW5pdGlhbERhdGEocHJldmlvdXNWYWx1ZXMubWVtb3J5LCA4KQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSwKICAgICAgbmV0d29yazogewogICAgICAgIGxhYmVsOiAiTmV0d29yayBUcmFmZmljIChNYnBzKSIsCiAgICAgICAgc2VyaWVzOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJEb3dubG9hZCIsCiAgICAgICAgICAgIGRhdGE6IGdlbmVyYXRlSW5pdGlhbERhdGEocHJldmlvdXNWYWx1ZXMuZG93bmxvYWQsIDMwKQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIlVwbG9hZCIsCiAgICAgICAgICAgIGRhdGE6IGdlbmVyYXRlSW5pdGlhbERhdGEocHJldmlvdXNWYWx1ZXMudXBsb2FkLCAxMCkKICAgICAgICAgIH0KICAgICAgICBdCiAgICAgIH0sCiAgICAgIHNhbGVzOiB7CiAgICAgICAgbGFiZWw6ICJTYWxlcyBBbmFseXRpY3MiLAogICAgICAgIHNlcmllczogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiUmV2ZW51ZSIsCiAgICAgICAgICAgIGRhdGE6IFsKICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTAxIiwgeTogNDVlMyB9LAogICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDIiLCB5OiA1MmUzIH0sCiAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wMyIsIHk6IDQ4ZTMgfSwKICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTA0IiwgeTogNjFlMyB9LAogICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDUiLCB5OiA1OGUzIH0sCiAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wNiIsIHk6IDY1ZTMgfQogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiUHJvZml0IiwKICAgICAgICAgICAgZGF0YTogWwogICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDEiLCB5OiAxMmUzIH0sCiAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wMiIsIHk6IDE0ZTMgfSwKICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTAzIiwgeTogMTFlMyB9LAogICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDQiLCB5OiAxOGUzIH0sCiAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wNSIsIHk6IDE2ZTMgfSwKICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTA2IiwgeTogMmU0IH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfQogICAgfTsKICAgIGNvbnN0IGdldE5leHRWYWx1ZSA9IChjdXJyZW50LCBtaW4zLCBtYXgzLCBtYXhDaGFuZ2UgPSA1KSA9PiB7CiAgICAgIGNvbnN0IGNoYW5nZSA9IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIG1heENoYW5nZSAqIDI7CiAgICAgIGxldCBuZXdWYWx1ZSA9IGN1cnJlbnQgKyBjaGFuZ2U7CiAgICAgIGNvbnN0IGNlbnRlciA9IChtaW4zICsgbWF4MykgLyAyOwogICAgICBjb25zdCBwcmVzc3VyZSA9IChjZW50ZXIgLSBuZXdWYWx1ZSkgKiAwLjE7CiAgICAgIG5ld1ZhbHVlICs9IHByZXNzdXJlOwogICAgICBuZXdWYWx1ZSA9IE1hdGgubWF4KG1pbjMsIE1hdGgubWluKG1heDMsIG5ld1ZhbHVlKSk7CiAgICAgIHJldHVybiBNYXRoLnJvdW5kKG5ld1ZhbHVlKTsKICAgIH07CiAgICBsZXQgbGFzdERhdGFQb2ludFRpbWUgPSBEYXRlLm5vdygpOwogICAgbGV0IGNvbm5lY3Rpb25zTGFzdFVwZGF0ZSA9IERhdGUubm93KCk7CiAgICBjb25zdCBhZGRSZWFsdGltZURhdGEgPSAoKSA9PiB7CiAgICAgIGlmICghY2hhcnRFbGVtZW50KQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICAgIGNvbnN0IHNob3VsZEFkZFBvaW50ID0gbm93MiAtIGxhc3REYXRhUG9pbnRUaW1lID49IERBVEFfUE9JTlRfSU5URVJWQUw7CiAgICAgIGlmIChzaG91bGRBZGRQb2ludCkgewogICAgICAgIGxhc3REYXRhUG9pbnRUaW1lID0gbm93MjsKICAgICAgICBjb25zdCBuZXdUaW1lc3RhbXAgPSBuZXcgRGF0ZShub3cyKS50b0lTT1N0cmluZygpOwogICAgICAgIGlmIChjdXJyZW50RGF0YXNldCA9PT0gInN5c3RlbSIpIHsKICAgICAgICAgIHByZXZpb3VzVmFsdWVzLmNwdSA9IGdldE5leHRWYWx1ZShwcmV2aW91c1ZhbHVlcy5jcHUsIDIwLCA1MCwgMyk7CiAgICAgICAgICBwcmV2aW91c1ZhbHVlcy5tZW1vcnkgPSBnZXROZXh0VmFsdWUocHJldmlvdXNWYWx1ZXMubWVtb3J5LCA0MCwgNzAsIDIpOwogICAgICAgICAgY29uc3QgY3VycmVudFNlcmllcyA9IGNoYXJ0RWxlbWVudC5jaGFydFNlcmllcy5tYXAoKHNlcmllcywgaW5kZXgyKSA9PiAoewogICAgICAgICAgICBuYW1lOiBzZXJpZXMubmFtZSwKICAgICAgICAgICAgZGF0YTogWwogICAgICAgICAgICAgIC4uLnNlcmllcy5kYXRhLAogICAgICAgICAgICAgIGluZGV4MiA9PT0gMCA/IHsgeDogbmV3VGltZXN0YW1wLCB5OiBwcmV2aW91c1ZhbHVlcy5jcHUgfSA6IHsgeDogbmV3VGltZXN0YW1wLCB5OiBwcmV2aW91c1ZhbHVlcy5tZW1vcnkgfQogICAgICAgICAgICBdCiAgICAgICAgICB9KSk7CiAgICAgICAgICBjaGFydEVsZW1lbnQudXBkYXRlU2VyaWVzKGN1cnJlbnRTZXJpZXMsIGZhbHNlKTsKICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnREYXRhc2V0ID09PSAibmV0d29yayIpIHsKICAgICAgICAgIHByZXZpb3VzVmFsdWVzLmRvd25sb2FkID0gZ2V0TmV4dFZhbHVlKHByZXZpb3VzVmFsdWVzLmRvd25sb2FkLCAxMDAsIDIwMCwgMTApOwogICAgICAgICAgcHJldmlvdXNWYWx1ZXMudXBsb2FkID0gZ2V0TmV4dFZhbHVlKHByZXZpb3VzVmFsdWVzLnVwbG9hZCwgMjAsIDUwLCA1KTsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZXJpZXMgPSBjaGFydEVsZW1lbnQuY2hhcnRTZXJpZXMubWFwKChzZXJpZXMsIGluZGV4MikgPT4gKHsKICAgICAgICAgICAgbmFtZTogc2VyaWVzLm5hbWUsCiAgICAgICAgICAgIGRhdGE6IFsKICAgICAgICAgICAgICAuLi5zZXJpZXMuZGF0YSwKICAgICAgICAgICAgICBpbmRleDIgPT09IDAgPyB7IHg6IG5ld1RpbWVzdGFtcCwgeTogcHJldmlvdXNWYWx1ZXMuZG93bmxvYWQgfSA6IHsgeDogbmV3VGltZXN0YW1wLCB5OiBwcmV2aW91c1ZhbHVlcy51cGxvYWQgfQogICAgICAgICAgICBdCiAgICAgICAgICB9KSk7CiAgICAgICAgICBjaGFydEVsZW1lbnQudXBkYXRlU2VyaWVzKGN1cnJlbnRTZXJpZXMsIGZhbHNlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBjb25zdCB1cGRhdGVDb25uZWN0aW9ucyA9ICgpID0+IHsKICAgICAgaWYgKCFjb25uZWN0aW9uc0NoYXJ0RWxlbWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5vdzIgPSBEYXRlLm5vdygpOwogICAgICBjb25zdCBuZXdUaW1lc3RhbXAgPSBuZXcgRGF0ZShub3cyKS50b0lTT1N0cmluZygpOwogICAgICBjb25zdCBjaGFuZ2UgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyMSkgLSAxMDsKICAgICAgcHJldmlvdXNWYWx1ZXMuY29ubmVjdGlvbnMgPSBNYXRoLm1heCg1MCwgTWF0aC5taW4oMzAwLCBwcmV2aW91c1ZhbHVlcy5jb25uZWN0aW9ucyArIGNoYW5nZSkpOwogICAgICBjb25zdCBjdXJyZW50U2VyaWVzID0gY29ubmVjdGlvbnNDaGFydEVsZW1lbnQuY2hhcnRTZXJpZXM7CiAgICAgIGNvbnN0IG5ld0RhdGEgPSBbewogICAgICAgIG5hbWU6IGN1cnJlbnRTZXJpZXNbMF0/Lm5hbWUgfHwgIkNvbm5lY3Rpb25zIiwKICAgICAgICBkYXRhOiBbCiAgICAgICAgICAuLi5jdXJyZW50U2VyaWVzWzBdPy5kYXRhIHx8IFtdLAogICAgICAgICAgeyB4OiBuZXdUaW1lc3RhbXAsIHk6IHByZXZpb3VzVmFsdWVzLmNvbm5lY3Rpb25zIH0KICAgICAgICBdCiAgICAgIH1dOwogICAgICBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudC51cGRhdGVTZXJpZXMobmV3RGF0YSwgZmFsc2UpOwogICAgfTsKICAgIGNvbnN0IHN3aXRjaERhdGFzZXQgPSAobmFtZSkgPT4gewogICAgICBjdXJyZW50RGF0YXNldCA9IG5hbWU7CiAgICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tuYW1lXTsKICAgICAgY2hhcnRFbGVtZW50LmxhYmVsID0gZGF0YXNldC5sYWJlbDsKICAgICAgY2hhcnRFbGVtZW50LnNlcmllcyA9IGRhdGFzZXQuc2VyaWVzOwogICAgICBjaGFydEVsZW1lbnQueUF4aXNGb3JtYXR0ZXIgPSBmb3JtYXR0ZXJzMltuYW1lXTsKICAgICAgaWYgKG5hbWUgPT09ICJzeXN0ZW0iKSB7CiAgICAgICAgY2hhcnRFbGVtZW50LnlBeGlzU2NhbGluZyA9ICJwZXJjZW50YWdlIjsKICAgICAgICBjaGFydEVsZW1lbnQueUF4aXNNYXggPSAxMDA7CiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gIm5ldHdvcmsiKSB7CiAgICAgICAgY2hhcnRFbGVtZW50LnlBeGlzU2NhbGluZyA9ICJkeW5hbWljIjsKICAgICAgfSBlbHNlIHsKICAgICAgICBjaGFydEVsZW1lbnQueUF4aXNTY2FsaW5nID0gImR5bmFtaWMiOwogICAgICB9CiAgICAgIGxhc3REYXRhUG9pbnRUaW1lID0gRGF0ZS5ub3coKSAtIERBVEFfUE9JTlRfSU5URVJWQUw7CiAgICB9OwogICAgY29uc3Qgc3RhcnRSZWFsdGltZSA9ICgpID0+IHsKICAgICAgaWYgKCFpbnRlcnZhbElkICYmIChjdXJyZW50RGF0YXNldCA9PT0gInN5c3RlbSIgfHwgY3VycmVudERhdGFzZXQgPT09ICJuZXR3b3JrIikpIHsKICAgICAgICBjaGFydEVsZW1lbnQucmVhbHRpbWVNb2RlID0gdHJ1ZTsKICAgICAgICBpbnRlcnZhbElkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IGFkZFJlYWx0aW1lRGF0YSgpLCBEQVRBX1BPSU5UX0lOVEVSVkFMKTsKICAgICAgfQogICAgICBpZiAoIWNvbm5lY3Rpb25zSW50ZXJ2YWxJZCkgewogICAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnJlYWx0aW1lTW9kZSA9IHRydWU7CiAgICAgICAgY29ubmVjdGlvbnNJbnRlcnZhbElkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHVwZGF0ZUNvbm5lY3Rpb25zKCksIFVQREFURV9JTlRFUlZBTCk7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCBzdG9wUmVhbHRpbWUgPSAoKSA9PiB7CiAgICAgIGlmIChpbnRlcnZhbElkKSB7CiAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7CiAgICAgICAgaW50ZXJ2YWxJZCA9IG51bGw7CiAgICAgICAgY2hhcnRFbGVtZW50LnJlYWx0aW1lTW9kZSA9IGZhbHNlOwogICAgICB9CiAgICAgIGlmIChjb25uZWN0aW9uc0ludGVydmFsSWQpIHsKICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChjb25uZWN0aW9uc0ludGVydmFsSWQpOwogICAgICAgIGNvbm5lY3Rpb25zSW50ZXJ2YWxJZCA9IG51bGw7CiAgICAgICAgY29ubmVjdGlvbnNDaGFydEVsZW1lbnQucmVhbHRpbWVNb2RlID0gZmFsc2U7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCByYW5kb21pemVEYXRhID0gKCkgPT4gewogICAgICBpZiAoY3VycmVudERhdGFzZXQgPT09ICJzeXN0ZW0iKSB7CiAgICAgICAgcHJldmlvdXNWYWx1ZXMuY3B1ID0gTWF0aC5yYW5kb20oKSA+IDAuNSA/IDg1IDogMjU7CiAgICAgICAgcHJldmlvdXNWYWx1ZXMubWVtb3J5ID0gTWF0aC5yYW5kb20oKSA+IDAuNSA/IDgwIDogNDU7CiAgICAgIH0gZWxzZSBpZiAoY3VycmVudERhdGFzZXQgPT09ICJuZXR3b3JrIikgewogICAgICAgIHByZXZpb3VzVmFsdWVzLmRvd25sb2FkID0gTWF0aC5yYW5kb20oKSA+IDAuNSA/IDI1MCA6IDEwMDsKICAgICAgICBwcmV2aW91c1ZhbHVlcy51cGxvYWQgPSBNYXRoLnJhbmRvbSgpID4gMC41ID8gODAgOiAyMDsKICAgICAgfQogICAgICBwcmV2aW91c1ZhbHVlcy5jb25uZWN0aW9ucyA9IE1hdGgucmFuZG9tKCkgPiAwLjUgPyAyODAgOiA4MDsKICAgICAgbGFzdERhdGFQb2ludFRpbWUgPSAwOwogICAgICBjb25uZWN0aW9uc0xhc3RVcGRhdGUgPSAwOwogICAgfTsKICAgIGNvbnN0IGJ1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4gewogICAgICBjb25zdCB0ZXh0OSA9IGJ1dHRvbi50ZXh0Q29udGVudD8udHJpbSgpOwogICAgICBpZiAodGV4dDkgPT09ICJTeXN0ZW0gVXNhZ2UiKSB7CiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3dpdGNoRGF0YXNldCgic3lzdGVtIikpOwogICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiTmV0d29yayBUcmFmZmljIikgewogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN3aXRjaERhdGFzZXQoIm5ldHdvcmsiKSk7CiAgICAgIH0gZWxzZSBpZiAodGV4dDkgPT09ICJTYWxlcyBEYXRhIikgewogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN3aXRjaERhdGFzZXQoInNhbGVzIikpOwogICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiU3RhcnQgTGl2ZSIpIHsKICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzdGFydFJlYWx0aW1lKCkpOwogICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiU3RvcCBMaXZlIikgewogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN0b3BSZWFsdGltZSgpKTsKICAgICAgfSBlbHNlIGlmICh0ZXh0OSA9PT0gIlNwaWtlIFZhbHVlcyIpIHsKICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiByYW5kb21pemVEYXRhKCkpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IHVwZGF0ZUJ1dHRvblN0YXRlcyA9ICgpID0+IHsKICAgICAgY29uc3QgYnV0dG9uczIgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICAgIGJ1dHRvbnMyLmZvckVhY2goKGJ1dHRvbikgPT4gewogICAgICAgIGNvbnN0IHRleHQ5ID0gYnV0dG9uLnRleHRDb250ZW50Py50cmltKCk7CiAgICAgICAgaWYgKHRleHQ5ID09PSAiU3lzdGVtIFVzYWdlIikgewogICAgICAgICAgYnV0dG9uLnR5cGUgPSBjdXJyZW50RGF0YXNldCA9PT0gInN5c3RlbSIgPyAiaGlnaGxpZ2h0ZWQiIDogIm5vcm1hbCI7CiAgICAgICAgfSBlbHNlIGlmICh0ZXh0OSA9PT0gIk5ldHdvcmsgVHJhZmZpYyIpIHsKICAgICAgICAgIGJ1dHRvbi50eXBlID0gY3VycmVudERhdGFzZXQgPT09ICJuZXR3b3JrIiA/ICJoaWdobGlnaHRlZCIgOiAibm9ybWFsIjsKICAgICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiU2FsZXMgRGF0YSIpIHsKICAgICAgICAgIGJ1dHRvbi50eXBlID0gY3VycmVudERhdGFzZXQgPT09ICJzYWxlcyIgPyAiaGlnaGxpZ2h0ZWQiIDogIm5vcm1hbCI7CiAgICAgICAgfQogICAgICB9KTsKICAgIH07CiAgICBjaGFydEVsZW1lbnQucm9sbGluZ1dpbmRvdyA9IFRJTUVfV0lORE9XOwogICAgY2hhcnRFbGVtZW50LnJlYWx0aW1lTW9kZSA9IGZhbHNlOwogICAgY2hhcnRFbGVtZW50LnlBeGlzU2NhbGluZyA9ICJwZXJjZW50YWdlIjsKICAgIGNoYXJ0RWxlbWVudC55QXhpc01heCA9IDEwMDsKICAgIGNoYXJ0RWxlbWVudC5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSAxZTM7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgY2hhcnRFbGVtZW50LnVwZGF0ZVRpbWVXaW5kb3coKTsKICAgIH0sIDEwMCk7CiAgICBjb25zdCBvcmlnaW5hbFN3aXRjaERhdGFzZXQgPSBzd2l0Y2hEYXRhc2V0OwogICAgY29uc3Qgc3dpdGNoRGF0YXNldFdpdGhCdXR0b25VcGRhdGUgPSAobmFtZSkgPT4gewogICAgICBvcmlnaW5hbFN3aXRjaERhdGFzZXQobmFtZSk7CiAgICAgIHVwZGF0ZUJ1dHRvblN0YXRlcygpOwogICAgfTsKICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICAgIGNvbnN0IHRleHQ5ID0gYnV0dG9uLnRleHRDb250ZW50Py50cmltKCk7CiAgICAgIGlmICh0ZXh0OSA9PT0gIlN5c3RlbSBVc2FnZSIpIHsKICAgICAgICBidXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0KCJzeXN0ZW0iKSk7CiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3dpdGNoRGF0YXNldFdpdGhCdXR0b25VcGRhdGUoInN5c3RlbSIpKTsKICAgICAgfSBlbHNlIGlmICh0ZXh0OSA9PT0gIk5ldHdvcmsgVHJhZmZpYyIpIHsKICAgICAgICBidXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0KCJuZXR3b3JrIikpOwogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN3aXRjaERhdGFzZXRXaXRoQnV0dG9uVXBkYXRlKCJuZXR3b3JrIikpOwogICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiU2FsZXMgRGF0YSIpIHsKICAgICAgICBidXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0KCJzYWxlcyIpKTsKICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0V2l0aEJ1dHRvblVwZGF0ZSgic2FsZXMiKSk7CiAgICAgIH0KICAgIH0pOwogICAgaWYgKGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50KSB7CiAgICAgIGNvbnN0IGluaXRpYWxDb25uZWN0aW9uc0RhdGEgPSBnZW5lcmF0ZUluaXRpYWxEYXRhKHByZXZpb3VzVmFsdWVzLmNvbm5lY3Rpb25zLCAzMCwgVVBEQVRFX0lOVEVSVkFMKTsKICAgICAgY29ubmVjdGlvbnNDaGFydEVsZW1lbnQuc2VyaWVzID0gW3sKICAgICAgICBuYW1lOiAiQ29ubmVjdGlvbnMiLAogICAgICAgIGRhdGE6IGluaXRpYWxDb25uZWN0aW9uc0RhdGEKICAgICAgfV07CiAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnJvbGxpbmdXaW5kb3cgPSBUSU1FX1dJTkRPVzsKICAgICAgY29ubmVjdGlvbnNDaGFydEVsZW1lbnQucmVhbHRpbWVNb2RlID0gZmFsc2U7CiAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnlBeGlzU2NhbGluZyA9ICJmaXhlZCI7CiAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnlBeGlzTWF4ID0gMzUwOwogICAgICBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudC5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSAxZTM7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnVwZGF0ZVRpbWVXaW5kb3coKTsKICAgICAgfSwgMTAwKTsKICAgIH0KICB9fT4KICAgICAgPHN0eWxlPgogICAgICAgICR7aWAKICAgICAgICAuZGVtb0JveCB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb250cm9scyB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY2hhcnQtY29udGFpbmVyIHsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgICBtaW4taGVpZ2h0OiA0MDBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmluZm8gewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJkZW1vQm94Ij4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iRGF0YXNldDoiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5TeXN0ZW0gVXNhZ2U8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPk5ldHdvcmsgVHJhZmZpYzwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U2FsZXMgRGF0YTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlJlYWwtdGltZToiPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0YXJ0IExpdmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0b3AgTGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFjdGlvbnM6Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TcGlrZSBWYWx1ZXM8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iY2hhcnQtY29udGFpbmVyIj4KICAgICAgICA8ZGVlcy1jaGFydC1hcmVhCiAgICAgICAgICBpZD0ibWFpbi1jaGFydCIKICAgICAgICAgIC5sYWJlbD0ke2luaXRpYWxEYXRhc2V0cy5zeXN0ZW0ubGFiZWx9CiAgICAgICAgICAuc2VyaWVzPSR7aW5pdGlhbERhdGFzZXRzLnN5c3RlbS5zZXJpZXN9CiAgICAgICAgICAueUF4aXNGb3JtYXR0ZXI9JHtpbml0aWFsRm9ybWF0dGVycy5zeXN0ZW19CiAgICAgICAgPjwvZGVlcy1jaGFydC1hcmVhPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0LWNvbnRhaW5lciIgc3R5bGU9Im1hcmdpbi10b3A6IDIwcHg7Ij4KICAgICAgICA8ZGVlcy1jaGFydC1hcmVhCiAgICAgICAgICBpZD0iY29ubmVjdGlvbnMtY2hhcnQiCiAgICAgICAgICAubGFiZWw9JHsiQWN0aXZlIENvbm5lY3Rpb25zIn0KICAgICAgICAgIC5zZXJpZXM9JHtbewogICAgbmFtZTogIkNvbm5lY3Rpb25zIiwKICAgIGRhdGE6IFtdCiAgfV19CiAgICAgICAgICAueUF4aXNGb3JtYXR0ZXI9JHsodmFsKSA9PiBgJHt2YWx9YH0KICAgICAgICA+PC9kZWVzLWNoYXJ0LWFyZWE+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iaW5mbyI+CiAgICAgICAgUmVhbC10aW1lIG1vbml0b3Jpbmcgd2l0aCAyLW1pbnV0ZSByb2xsaW5nIHdpbmRvdyDigKIgCiAgICAgICAgVXBkYXRlcyBldmVyeSBzZWNvbmQgd2l0aCBzbW9vdGggdmFsdWUgdHJhbnNpdGlvbnMg4oCiIAogICAgICAgIENsaWNrICdTcGlrZSBWYWx1ZXMnIHRvIHNpbXVsYXRlIGxvYWQgc3Bpa2VzCiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWFyZWEvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBjaGFydEFyZWFTdHlsZXMgPSBbCiAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgICAgLm1haW5ib3ggewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNoYXJ0VGl0bGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICB9CiAgICAgIC5jaGFydENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICByaWdodDogMHB4OwogICAgICAgIHBhZGRpbmc6IDQ0cHggMTZweCAxNnB4IDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyAvKiBFbnN1cmUgY29udGFpbmVyIGRvZXNuJ3Qgb3ZlcnJpZGUgY2hhcnQgYmFja2dyb3VuZCAqLwogICAgICB9CiAgICAgIAogICAgICAvKiBBcGV4Q2hhcnRzIHRoZW1lIG92ZXJyaWRlcyAqLwogICAgICAuYXBleGNoYXJ0cy1jYW52YXMgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC5hcGV4Y2hhcnRzLWlubmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICB9CiAgICAgIAogICAgICAuYXBleGNoYXJ0cy1ncmFwaGljYWwgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIGAKXTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWFyZWEvdGVtcGxhdGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHJlbmRlckNoYXJ0QXJlYSA9IChjb21wb25lbnQpID0+IHsKICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGFydFRpdGxlIj4ke2NvbXBvbmVudC5sYWJlbH08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0Q29udGFpbmVyIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWFyZWEvY29tcG9uZW50LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfc2VydmljZXMoKTsKdmFyIF9fZXNEZWNvcmF0ZTQ1ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0NiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0NoYXJ0QXJlYSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtY2hhcnQtYXJlYSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2NoYXJ0X2RlY29yYXRvcnM7CiAgbGV0IF9jaGFydF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NoYXJ0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYWJlbF9kZWNvcmF0b3JzOwogIGxldCBfbGFiZWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYWJlbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VyaWVzX2RlY29yYXRvcnM7CiAgbGV0IF9zZXJpZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZXJpZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3lBeGlzRm9ybWF0dGVyX2RlY29yYXRvcnM7CiAgbGV0IF95QXhpc0Zvcm1hdHRlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3lBeGlzRm9ybWF0dGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb2xsaW5nV2luZG93X2RlY29yYXRvcnM7CiAgbGV0IF9yb2xsaW5nV2luZG93X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcm9sbGluZ1dpbmRvd19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmVhbHRpbWVNb2RlX2RlY29yYXRvcnM7CiAgbGV0IF9yZWFsdGltZU1vZGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZWFsdGltZU1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3lBeGlzU2NhbGluZ19kZWNvcmF0b3JzOwogIGxldCBfeUF4aXNTY2FsaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfeUF4aXNTY2FsaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF95QXhpc01heF9kZWNvcmF0b3JzOwogIGxldCBfeUF4aXNNYXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF95QXhpc01heF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b1Njcm9sbEludGVydmFsX2RlY29yYXRvcnM7CiAgbGV0IF9hdXRvU2Nyb2xsSW50ZXJ2YWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hdXRvU2Nyb2xsSW50ZXJ2YWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0NoYXJ0QXJlYTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9jaGFydF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfbGFiZWxfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgX3Nlcmllc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfeUF4aXNGb3JtYXR0ZXJfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfcm9sbGluZ1dpbmRvd19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3JlYWx0aW1lTW9kZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF95QXhpc1NjYWxpbmdfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF95QXhpc01heF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2F1dG9TY3JvbGxJbnRlcnZhbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX19lc0RlY29yYXRlNDUodGhpcywgbnVsbCwgX2NoYXJ0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNoYXJ0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjaGFydCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jaGFydCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY2hhcnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY2hhcnRfaW5pdGlhbGl6ZXJzLCBfY2hhcnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0NSh0aGlzLCBudWxsLCBfbGFiZWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFiZWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhYmVsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxhYmVsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sYWJlbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sYWJlbF9pbml0aWFsaXplcnMsIF9sYWJlbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF9zZXJpZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VyaWVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZXJpZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VyaWVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZXJpZXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VyaWVzX2luaXRpYWxpemVycywgX3Nlcmllc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF95QXhpc0Zvcm1hdHRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ5QXhpc0Zvcm1hdHRlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAieUF4aXNGb3JtYXR0ZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoueUF4aXNGb3JtYXR0ZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnlBeGlzRm9ybWF0dGVyID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3lBeGlzRm9ybWF0dGVyX2luaXRpYWxpemVycywgX3lBeGlzRm9ybWF0dGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDUodGhpcywgbnVsbCwgX3JvbGxpbmdXaW5kb3dfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicm9sbGluZ1dpbmRvdyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicm9sbGluZ1dpbmRvdyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yb2xsaW5nV2luZG93LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yb2xsaW5nV2luZG93ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JvbGxpbmdXaW5kb3dfaW5pdGlhbGl6ZXJzLCBfcm9sbGluZ1dpbmRvd19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF9yZWFsdGltZU1vZGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicmVhbHRpbWVNb2RlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZWFsdGltZU1vZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVhbHRpbWVNb2RlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yZWFsdGltZU1vZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVhbHRpbWVNb2RlX2luaXRpYWxpemVycywgX3JlYWx0aW1lTW9kZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF95QXhpc1NjYWxpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAieUF4aXNTY2FsaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ5QXhpc1NjYWxpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoueUF4aXNTY2FsaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai55QXhpc1NjYWxpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfeUF4aXNTY2FsaW5nX2luaXRpYWxpemVycywgX3lBeGlzU2NhbGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF95QXhpc01heF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ5QXhpc01heCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAieUF4aXNNYXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoueUF4aXNNYXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnlBeGlzTWF4ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3lBeGlzTWF4X2luaXRpYWxpemVycywgX3lBeGlzTWF4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDUodGhpcywgbnVsbCwgX2F1dG9TY3JvbGxJbnRlcnZhbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhdXRvU2Nyb2xsSW50ZXJ2YWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9TY3JvbGxJbnRlcnZhbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hdXRvU2Nyb2xsSW50ZXJ2YWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmF1dG9TY3JvbGxJbnRlcnZhbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvU2Nyb2xsSW50ZXJ2YWxfaW5pdGlhbGl6ZXJzLCBfYXV0b1Njcm9sbEludGVydmFsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQ2hhcnRBcmVhMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkNoYXJ0IjsKICAgICNjaGFydF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfY2hhcnRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgLy8gaW5zdGFuY2UKICAgIGdldCBjaGFydCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NoYXJ0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2hhcnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NoYXJ0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9jaGFydF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX2xhYmVsX2luaXRpYWxpemVycywgIlVudGl0bGVkIENoYXJ0IikpOwogICAgZ2V0IGxhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYWJlbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZXJpZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9sYWJlbF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX3Nlcmllc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgc2VyaWVzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VyaWVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VyaWVzKHZhbHVlMikgewogICAgICB0aGlzLiNzZXJpZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8vIE92ZXJyaWRlIGdldHRlciB0byByZXR1cm4gaW50ZXJuYWwgY2hhcnQgZGF0YQogICAgZ2V0IGNoYXJ0U2VyaWVzKCkgewogICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbENoYXJ0RGF0YS5sZW5ndGggPiAwID8gdGhpcy5pbnRlcm5hbENoYXJ0RGF0YSA6IHRoaXMuc2VyaWVzOwogICAgfQogICAgI3lBeGlzRm9ybWF0dGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfc2VyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfeUF4aXNGb3JtYXR0ZXJfaW5pdGlhbGl6ZXJzLCAodmFsKSA9PiBgJHt2YWx9IE1icHNgKSk7CiAgICBnZXQgeUF4aXNGb3JtYXR0ZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiN5QXhpc0Zvcm1hdHRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHlBeGlzRm9ybWF0dGVyKHZhbHVlMikgewogICAgICB0aGlzLiN5QXhpc0Zvcm1hdHRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3JvbGxpbmdXaW5kb3dfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF95QXhpc0Zvcm1hdHRlcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX3JvbGxpbmdXaW5kb3dfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgcm9sbGluZ1dpbmRvdygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3JvbGxpbmdXaW5kb3dfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIC8vIDAgbWVhbnMgbm8gcm9sbGluZyB3aW5kb3cKICAgIHNldCByb2xsaW5nV2luZG93KHZhbHVlMikgewogICAgICB0aGlzLiNyb2xsaW5nV2luZG93X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcmVhbHRpbWVNb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfcm9sbGluZ1dpbmRvd19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX3JlYWx0aW1lTW9kZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgcmVhbHRpbWVNb2RlKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVhbHRpbWVNb2RlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcmVhbHRpbWVNb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNyZWFsdGltZU1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN5QXhpc1NjYWxpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9yZWFsdGltZU1vZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF95QXhpc1NjYWxpbmdfaW5pdGlhbGl6ZXJzLCAiZHluYW1pYyIpKTsKICAgIGdldCB5QXhpc1NjYWxpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiN5QXhpc1NjYWxpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB5QXhpc1NjYWxpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI3lBeGlzU2NhbGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3lBeGlzTWF4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfeUF4aXNTY2FsaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfeUF4aXNNYXhfaW5pdGlhbGl6ZXJzLCAxMDApKTsKICAgIGdldCB5QXhpc01heCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3lBeGlzTWF4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICAvLyBVc2VkIHdoZW4geUF4aXNTY2FsaW5nIGlzICdmaXhlZCcgb3IgJ3BlcmNlbnRhZ2UnCiAgICBzZXQgeUF4aXNNYXgodmFsdWUyKSB7CiAgICAgIHRoaXMuI3lBeGlzTWF4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYXV0b1Njcm9sbEludGVydmFsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfeUF4aXNNYXhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9hdXRvU2Nyb2xsSW50ZXJ2YWxfaW5pdGlhbGl6ZXJzLCAxZTMpKTsKICAgIGdldCBhdXRvU2Nyb2xsSW50ZXJ2YWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhdXRvU2Nyb2xsSW50ZXJ2YWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIC8vIEF1dG8tc2Nyb2xsIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyAoMCB0byBkaXNhYmxlKQogICAgc2V0IGF1dG9TY3JvbGxJbnRlcnZhbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXV0b1Njcm9sbEludGVydmFsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICByZXNpemVPYnNlcnZlciA9IF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX2F1dG9TY3JvbGxJbnRlcnZhbF9leHRyYUluaXRpYWxpemVycyk7CiAgICByZXNpemVUaW1lb3V0OwogICAgaW50ZXJuYWxDaGFydERhdGEgPSBbXTsKICAgIGF1dG9TY3JvbGxUaW1lciA9IG51bGw7CiAgICBERUJVR19SRVNJWkUgPSBmYWxzZTsKICAgIC8vIFNldCB0byB0cnVlIHRvIGVuYWJsZSByZXNpemUgZGVidWdnaW5nCiAgICAvLyBDaGFydCBjb2xvciBzY2hlbWVzCiAgICBDSEFSVF9DT0xPUlMgPSB7CiAgICAgIGRhcms6IFsKICAgICAgICAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsCiAgICAgICAgLy8gQmx1ZQogICAgICAgICJoc2woMTczLjQgODAuNCUgNDAlKSIsCiAgICAgICAgLy8gVGVhbAogICAgICAgICJoc2woMjgwLjMgODcuNCUgNjYuNyUpIiwKICAgICAgICAvLyBQdXJwbGUKICAgICAgICAiaHNsKDI0LjYgOTUlIDUzLjElKSIKICAgICAgICAvLyBPcmFuZ2UKICAgICAgXSwKICAgICAgbGlnaHQ6IFsKICAgICAgICAiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsCiAgICAgICAgLy8gQmx1ZSAoc2hhZGNuIHByaW1hcnkpCiAgICAgICAgImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLAogICAgICAgIC8vIEdyZWVuIChzaGFkY24gc3VjY2VzcykKICAgICAgICAiaHNsKDI4MC4zIDQ3LjclIDUwLjIlKSIsCiAgICAgICAgLy8gUHVycGxlIChtdXRlZCkKICAgICAgICAiaHNsKDIwLjUgOTAuMiUgNDguMiUpIgogICAgICAgIC8vIE9yYW5nZSAoc2hhZGNuIGRlc3RydWN0aXZlIHZhcmlhbnQpCiAgICAgIF0KICAgIH07CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc2V0dXAoKTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4gewogICAgICAgIGlmICh0aGlzLnJlc2l6ZVRpbWVvdXQpIHsKICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZVRpbWVvdXQpOwogICAgICAgIH0KICAgICAgICB0aGlzLnJlc2l6ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5jaGFydCkgewogICAgICAgICAgICBpZiAodGhpcy5ERUJVR19SRVNJWkUgJiYgZW50cmllcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdOwogICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJEZWVzQ2hhcnRBcmVhIC0gUmVzaXplIGRldGVjdGVkOiIsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiBlbnRyeS5jb250ZW50UmVjdC53aWR0aCwKICAgICAgICAgICAgICAgIGhlaWdodDogZW50cnkuY29udGVudFJlY3QuaGVpZ2h0CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5yZXNpemVDaGFydCgpOwogICAgICAgICAgfQogICAgICAgIH0sIDEwMCk7CiAgICAgIH0pOwogICAgICB0aGlzLnJlZ2lzdGVyR2FyYmFnZUZ1bmN0aW9uKGFzeW5jICgpID0+IHsKICAgICAgICBpZiAodGhpcy5yZXNpemVUaW1lb3V0KSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lb3V0KTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgIH0KICAgICAgICB0aGlzLnN0b3BBdXRvU2Nyb2xsKCk7CiAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRoaXMuY2hhcnQuZGVzdHJveSgpOwogICAgICAgICAgICB0aGlzLmNoYXJ0ID0gbnVsbDsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGRlc3Ryb3lpbmcgY2hhcnQ6IiwgZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgaWYgKHRoaXMuY2hhcnQpIHsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICAgIGF3YWl0IHRoaXMucmVzaXplQ2hhcnQoKTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IGNoYXJ0QXJlYVN0eWxlczsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIHJlbmRlckNoYXJ0QXJlYSh0aGlzKTsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGNvbnN0IEFwZXhDaGFydHNMaWIgPSBhd2FpdCBEZWVzU2VydmljZUxpYkxvYWRlci5nZXRJbnN0YW5jZSgpLmxvYWRBcGV4Q2hhcnRzKCk7CiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgIGNvbnN0IG1haW5ib3ggPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1haW5ib3giKTsKICAgICAgY29uc3QgY2hhcnRDb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNoYXJ0Q29udGFpbmVyIik7CiAgICAgIGlmICghbWFpbmJveCB8fCAhY2hhcnRDb250YWluZXIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJDaGFydCBjb250YWluZXJzIG5vdCBmb3VuZCIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBzdHlsZUNoYXJ0Q29udGFpbmVyID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2hhcnRDb250YWluZXIpOwogICAgICBjb25zdCBwYWRkaW5nVG9wID0gcGFyc2VJbnQoc3R5bGVDaGFydENvbnRhaW5lci5wYWRkaW5nVG9wLCAxMCk7CiAgICAgIGNvbnN0IHBhZGRpbmdCb3R0b20gPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdCb3R0b20sIDEwKTsKICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdMZWZ0LCAxMCk7CiAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IHBhcnNlSW50KHN0eWxlQ2hhcnRDb250YWluZXIucGFkZGluZ1JpZ2h0LCAxMCk7CiAgICAgIGNvbnN0IGluaXRpYWxXaWR0aCA9IG1haW5ib3guY2xpZW50V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDsKICAgICAgY29uc3QgaW5pdGlhbEhlaWdodCA9IG1haW5ib3gub2Zmc2V0SGVpZ2h0IC0gcGFkZGluZ1RvcCAtIHBhZGRpbmdCb3R0b207CiAgICAgIGNvbnN0IGNoYXJ0U2VyaWVzID0gdGhpcy5zZXJpZXMubGVuZ3RoID4gMCA/IHRoaXMuc2VyaWVzIDogWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJjcHUiLAogICAgICAgICAgZGF0YTogWwogICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDAzOjAwOjAwIiwgeTogMjUgfSwKICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQwNzowMDowMCIsIHk6IDMwIH0sCiAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMTVUMTE6MDA6MDAiLCB5OiAyMCB9LAogICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDE1OjAwOjAwIiwgeTogMzUgfSwKICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQxOTowMDowMCIsIHk6IDI1IH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJtZW1vcnkiLAogICAgICAgICAgZGF0YTogWwogICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDAzOjAwOjAwIiwgeTogMTAgfSwKICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQwNzowMDowMCIsIHk6IDEyIH0sCiAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMTVUMTE6MDA6MDAiLCB5OiAxMCB9LAogICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDE1OjAwOjAwIiwgeTogMzAgfSwKICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQxOTowMDowMCIsIHk6IDQwIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF07CiAgICAgIHRoaXMuaW50ZXJuYWxDaGFydERhdGEgPSBjaGFydFNlcmllczsKICAgICAgY29uc3QgaXNEYXJrID0gIXRoaXMuZ29CcmlnaHQ7CiAgICAgIGNvbnN0IHRoZW1lID0gaXNEYXJrID8gImRhcmsiIDogImxpZ2h0IjsKICAgICAgdmFyIG9wdGlvbnMgPSB7CiAgICAgICAgc2VyaWVzOiBjaGFydFNlcmllcywKICAgICAgICBjaGFydDogewogICAgICAgICAgd2lkdGg6IGluaXRpYWxXaWR0aCB8fCAxMDAsCiAgICAgICAgICAvLyBVc2UgYWN0dWFsIHdpZHRoIG9yIGZhbGxiYWNrCiAgICAgICAgICBoZWlnaHQ6IGluaXRpYWxIZWlnaHQgfHwgMTAwLAogICAgICAgICAgLy8gVXNlIGFjdHVhbCBoZWlnaHQgb3IgZmFsbGJhY2sKICAgICAgICAgIHR5cGU6ICJhcmVhIiwKICAgICAgICAgIGJhY2tncm91bmQ6ICJ0cmFuc3BhcmVudCIsCiAgICAgICAgICAvLyBUcmFuc3BhcmVudCBiYWNrZ3JvdW5kIHRvIGluaGVyaXQgZnJvbSBjb250YWluZXIKICAgICAgICAgIHRvb2xiYXI6IHsKICAgICAgICAgICAgc2hvdzogZmFsc2UKICAgICAgICAgICAgLy8gVGhpcyBsaW5lIGRpc2FibGVzIHRoZSB0b29sYmFyCiAgICAgICAgICB9LAogICAgICAgICAgYW5pbWF0aW9uczogewogICAgICAgICAgICBlbmFibGVkOiAhdGhpcy5yZWFsdGltZU1vZGUsCiAgICAgICAgICAgIC8vIERpc2FibGUgYW5pbWF0aW9ucyBpbiByZWFsdGltZSBtb2RlCiAgICAgICAgICAgIHNwZWVkOiA0MDAsCiAgICAgICAgICAgIGFuaW1hdGVHcmFkdWFsbHk6IHsKICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSwKICAgICAgICAgICAgICAvLyBEaXNhYmxlIGdyYWR1YWwgYW5pbWF0aW9uIGZvciBjbGVhbmVyIHVwZGF0ZXMKICAgICAgICAgICAgICBkZWxheTogMAogICAgICAgICAgICB9LAogICAgICAgICAgICBkeW5hbWljQW5pbWF0aW9uOiB7CiAgICAgICAgICAgICAgZW5hYmxlZDogIXRoaXMucmVhbHRpbWVNb2RlLAogICAgICAgICAgICAgIHNwZWVkOiAzNTAKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHpvb206IHsKICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UKICAgICAgICAgICAgLy8gRGlzYWJsZSB6b29tIGZvciBjbGVhbmVyIGludGVyYWN0aW9uCiAgICAgICAgICB9LAogICAgICAgICAgc2VsZWN0aW9uOiB7CiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlCiAgICAgICAgICAgIC8vIERpc2FibGUgc2VsZWN0aW9uCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBkYXRhTGFiZWxzOiB7CiAgICAgICAgICBlbmFibGVkOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgc3Ryb2tlOiB7CiAgICAgICAgICB3aWR0aDogMiwKICAgICAgICAgIGN1cnZlOiAic21vb3RoIgogICAgICAgIH0sCiAgICAgICAgeGF4aXM6IHsKICAgICAgICAgIHR5cGU6ICJkYXRldGltZSIsCiAgICAgICAgICAvLyBUaW1lLXNlcmllcyBkYXRhCiAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgZm9ybWF0OiAiSEg6bW06c3MiLAogICAgICAgICAgICAvLyBUaW1lIGZvcm1hdHRpbmcgd2l0aCBzZWNvbmRzCiAgICAgICAgICAgIGRhdGV0aW1lVVRDOiBmYWxzZSwKICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICBjb2xvcnM6IFtpc0RhcmsgPyAiaHNsKDAgMCUgNjMuOSUpIiA6ICJoc2woMCAwJSAyMCUpIl0sCiAgICAgICAgICAgICAgLy8gTGFiZWwgY29sb3IKICAgICAgICAgICAgICBmb250U2l6ZTogIjEycHgiLAogICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICctYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIHNhbnMtc2VyaWYnLAogICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICI0MDAiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBheGlzQm9yZGVyOiB7CiAgICAgICAgICAgIHNob3c6IGZhbHNlCiAgICAgICAgICAgIC8vIEhpZGUgeC1heGlzIGJvcmRlcgogICAgICAgICAgfSwKICAgICAgICAgIGF4aXNUaWNrczogewogICAgICAgICAgICBzaG93OiBmYWxzZQogICAgICAgICAgICAvLyBIaWRlIHgtYXhpcyB0aWNrcwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgeWF4aXM6IHsKICAgICAgICAgIG1pbjogMCwKICAgICAgICAgIG1heDogdGhpcy55QXhpc1NjYWxpbmcgPT09ICJkeW5hbWljIiA/IHZvaWQgMCA6IHRoaXMueUF4aXNNYXgsCiAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgZm9ybWF0dGVyOiB0aGlzLnlBeGlzRm9ybWF0dGVyLAogICAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICAgIGNvbG9yczogW2lzRGFyayA/ICJoc2woMCAwJSA2My45JSkiIDogImhzbCgwIDAlIDIwJSkiXSwKICAgICAgICAgICAgICAvLyBMYWJlbCBjb2xvcgogICAgICAgICAgICAgIGZvbnRTaXplOiAiMTJweCIsCiAgICAgICAgICAgICAgZm9udEZhbWlseTogJy1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgc2Fucy1zZXJpZicsCiAgICAgICAgICAgICAgZm9udFdlaWdodDogIjQwMCIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGF4aXNCb3JkZXI6IHsKICAgICAgICAgICAgc2hvdzogZmFsc2UKICAgICAgICAgICAgLy8gSGlkZSB5LWF4aXMgYm9yZGVyCiAgICAgICAgICB9LAogICAgICAgICAgYXhpc1RpY2tzOiB7CiAgICAgICAgICAgIHNob3c6IGZhbHNlCiAgICAgICAgICAgIC8vIEhpZGUgeS1heGlzIHRpY2tzCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0b29sdGlwOiB7CiAgICAgICAgICBzaGFyZWQ6IHRydWUsCiAgICAgICAgICAvLyBFbmFibGVzIHRoZSB0b29sdGlwIHRvIGRpc3BsYXkgYWNyb3NzIHNlcmllcwogICAgICAgICAgaW50ZXJzZWN0OiBmYWxzZSwKICAgICAgICAgIC8vIEFsbG93cyBob3ZlcmluZyBhbnl3aGVyZSBvbiB0aGUgY2hhcnQKICAgICAgICAgIGZvbGxvd0N1cnNvcjogdHJ1ZSwKICAgICAgICAgIC8vIE1ha2VzIHRvb2x0aXAgZm9sbG93IG1vdXNlIGV2ZW4gYmV0d2VlbiBwb2ludHMKICAgICAgICAgIHg6IHsKICAgICAgICAgICAgZm9ybWF0OiAiZGQvTU0veXkgSEg6bW0iCiAgICAgICAgICB9LAogICAgICAgICAgY3VzdG9tOiAoeyBzZXJpZXMsIGRhdGFQb2ludEluZGV4LCB3OiB3MyB9KSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaGVtZSA9IHczLmNvbmZpZy50aGVtZS5tb2RlOwogICAgICAgICAgICBjb25zdCBpc0RhcmtNb2RlID0gY3VycmVudFRoZW1lID09PSAiZGFyayI7CiAgICAgICAgICAgIGNvbnN0IGJnQ29sb3IgPSBpc0RhcmtNb2RlID8gImhzbCgwIDAlIDklKSIgOiAiaHNsKDAgMCUgMTAwJSkiOwogICAgICAgICAgICBjb25zdCB0ZXh0Q29sb3IgPSBpc0RhcmtNb2RlID8gImhzbCgwIDAlIDk1JSkiIDogImhzbCgwIDAlIDklKSI7CiAgICAgICAgICAgIGNvbnN0IGJvcmRlckNvbG9yID0gaXNEYXJrTW9kZSA/ICJoc2woMCAwJSAxNC45JSkiIDogImhzbCgwIDAlIDg5LjglKSI7CiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlcjIgPSB3My5jb25maWcueWF4aXNbMF0/LmxhYmVscz8uZm9ybWF0dGVyIHx8ICgodmFsKSA9PiB2YWwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgIGxldCB0b29sdGlwQ29udGVudCA9IGA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAxMnB4OyBiYWNrZ3JvdW5kOiAke2JnQ29sb3J9OyBjb2xvcjogJHt0ZXh0Q29sb3J9OyBib3JkZXItcmFkaXVzOiA2cHg7IGJveC1zaGFkb3c6IDAgMnB4IDhweCAwIGhzbCgwIDAlIDAlIC8gJHtpc0RhcmtNb2RlID8gIjAuMiIgOiAiMC4xIn0pOyBib3JkZXI6IDFweCBzb2xpZCAke2JvcmRlckNvbG9yfTtmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij5gOwogICAgICAgICAgICBzZXJpZXMuZm9yRWFjaCgoczksIGluZGV4MikgPT4gewogICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdzMuZ2xvYmFscy5zZXJpZXNOYW1lc1tpbmRleDJdOwogICAgICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IHM5W2RhdGFQb2ludEluZGV4XTsKICAgICAgICAgICAgICBjb25zdCBjb2xvcjIgPSB3My5nbG9iYWxzLmNvbG9yc1tpbmRleDJdOwogICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gZm9ybWF0dGVyMih2YWx1ZTIpOwogICAgICAgICAgICAgIHRvb2x0aXBDb250ZW50ICs9IGA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhweDsgbWFyZ2luOiAke2luZGV4MiA+IDAgPyAiNnB4IiA6ICIwIn0gMDsiPgogICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxMHB4OyBoZWlnaHQ6IDEwcHg7IGJhY2tncm91bmQ6ICR7Y29sb3IyfTsgYm9yZGVyLXJhZGl1czogMnB4OyI+PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogNTAwOyI+JHtsYWJlbH06PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDogYXV0bzsgZm9udC13ZWlnaHQ6IDYwMDsiPiR7Zm9ybWF0dGVkVmFsdWV9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj5gOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdG9vbHRpcENvbnRlbnQgKz0gYDwvZGl2PmA7CiAgICAgICAgICAgIHJldHVybiB0b29sdGlwQ29udGVudDsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdyaWQ6IHsKICAgICAgICAgIHhheGlzOiB7CiAgICAgICAgICAgIGxpbmVzOiB7CiAgICAgICAgICAgICAgc2hvdzogZmFsc2UKICAgICAgICAgICAgICAvLyBIaWRlIHZlcnRpY2FsIGdyaWQgbGluZXMgZm9yIGNsZWFuZXIgbG9vawogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgeWF4aXM6IHsKICAgICAgICAgICAgbGluZXM6IHsKICAgICAgICAgICAgICBzaG93OiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBib3JkZXJDb2xvcjogaXNEYXJrID8gImhzbCgwIDAlIDE0LjklKSIgOiAiaHNsKDAgMCUgOTQlKSIsCiAgICAgICAgICAvLyBWZXJ5IHN1YnRsZSBncmlkIGxpbmVzCiAgICAgICAgICBzdHJva2VEYXNoQXJyYXk6IDAsCiAgICAgICAgICAvLyBTb2xpZCBsaW5lCiAgICAgICAgICBwYWRkaW5nOiB7CiAgICAgICAgICAgIHRvcDogMTAsCiAgICAgICAgICAgIHJpZ2h0OiAyMCwKICAgICAgICAgICAgYm90dG9tOiAxMCwKICAgICAgICAgICAgbGVmdDogMjAKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZpbGw6IHsKICAgICAgICAgIHR5cGU6ICJncmFkaWVudCIsCiAgICAgICAgICAvLyBHcmFkaWVudCBmaWxsIGZvciB0aGUgYXJlYQogICAgICAgICAgZ3JhZGllbnQ6IHsKICAgICAgICAgICAgc2hhZGU6IGlzRGFyayA/ICJkYXJrIiA6ICJsaWdodCIsCiAgICAgICAgICAgIHR5cGU6ICJ2ZXJ0aWNhbCIsCiAgICAgICAgICAgIHNoYWRlSW50ZW5zaXR5OiAwLjEsCiAgICAgICAgICAgIG9wYWNpdHlGcm9tOiBpc0RhcmsgPyAwLjIgOiAwLjMsCiAgICAgICAgICAgIG9wYWNpdHlUbzogMCwKICAgICAgICAgICAgc3RvcHM6IFswLCAxMDBdCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjb2xvcnM6IGlzRGFyayA/IHRoaXMuQ0hBUlRfQ09MT1JTLmRhcmsgOiB0aGlzLkNIQVJUX0NPTE9SUy5saWdodCwKICAgICAgICB0aGVtZTogewogICAgICAgICAgbW9kZTogdGhlbWUKICAgICAgICB9CiAgICAgIH07CiAgICAgIHRyeSB7CiAgICAgICAgdGhpcy5jaGFydCA9IG5ldyBBcGV4Q2hhcnRzTGliKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY2hhcnRDb250YWluZXIiKSwgb3B0aW9ucyk7CiAgICAgICAgYXdhaXQgdGhpcy5jaGFydC5yZW5kZXIoKTsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDEwMCkpOwogICAgICAgIGF3YWl0IHRoaXMucmVzaXplQ2hhcnQoKTsKICAgICAgICBjb25zdCBtYWluYm94MiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmJveCIpOwogICAgICAgIGlmIChtYWluYm94MiAmJiB0aGlzLnJlc2l6ZU9ic2VydmVyKSB7CiAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShtYWluYm94Mik7CiAgICAgICAgICBpZiAodGhpcy5ERUJVR19SRVNJWkUpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIkRlZXNDaGFydEFyZWEgLSBSZXNpemVPYnNlcnZlciBhdHRhY2hlZCB0byBtYWluYm94Iik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIGNoYXJ0OiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiZ29CcmlnaHQiKSAmJiB0aGlzLmNoYXJ0KSB7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDaGFydFRoZW1lKCk7CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygic2VyaWVzIikgJiYgdGhpcy5jaGFydCAmJiB0aGlzLnNlcmllcy5sZW5ndGggPiAwKSB7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXJpZXModGhpcy5zZXJpZXMpOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInlBeGlzRm9ybWF0dGVyIikgJiYgdGhpcy5jaGFydCkgewogICAgICAgIGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlT3B0aW9ucyh7CiAgICAgICAgICB5YXhpczogewogICAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgICBmb3JtYXR0ZXI6IHRoaXMueUF4aXNGb3JtYXR0ZXIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInJlYWx0aW1lTW9kZSIpICYmIHRoaXMuY2hhcnQpIHsKICAgICAgICBhd2FpdCB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMoewogICAgICAgICAgY2hhcnQ6IHsKICAgICAgICAgICAgYW5pbWF0aW9uczogewogICAgICAgICAgICAgIGVuYWJsZWQ6ICF0aGlzLnJlYWx0aW1lTW9kZSwKICAgICAgICAgICAgICBzcGVlZDogNDAwLAogICAgICAgICAgICAgIGFuaW1hdGVHcmFkdWFsbHk6IHsKICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgZGVsYXk6IDAKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGR5bmFtaWNBbmltYXRpb246IHsKICAgICAgICAgICAgICAgIGVuYWJsZWQ6ICF0aGlzLnJlYWx0aW1lTW9kZSwKICAgICAgICAgICAgICAgIHNwZWVkOiAzNTAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5yZWFsdGltZU1vZGUgJiYgdGhpcy5yb2xsaW5nV2luZG93ID4gMCAmJiB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCA+IDApIHsKICAgICAgICAgIHRoaXMuc3RhcnRBdXRvU2Nyb2xsKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc3RvcEF1dG9TY3JvbGwoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiYXV0b1Njcm9sbEludGVydmFsIikgJiYgdGhpcy5jaGFydCkgewogICAgICAgIHRoaXMuc3RvcEF1dG9TY3JvbGwoKTsKICAgICAgICBpZiAodGhpcy5yZWFsdGltZU1vZGUgJiYgdGhpcy5yb2xsaW5nV2luZG93ID4gMCAmJiB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCA+IDApIHsKICAgICAgICAgIHRoaXMuc3RhcnRBdXRvU2Nyb2xsKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICgoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJ5QXhpc1NjYWxpbmciKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoInlBeGlzTWF4IikpICYmIHRoaXMuY2hhcnQpIHsKICAgICAgICBhd2FpdCB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMoewogICAgICAgICAgeWF4aXM6IHsKICAgICAgICAgICAgbWluOiAwLAogICAgICAgICAgICBtYXg6IHRoaXMueUF4aXNTY2FsaW5nID09PSAiZHluYW1pYyIgPyB2b2lkIDAgOiB0aGlzLnlBeGlzTWF4CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHVwZGF0ZVNlcmllcyhuZXdTZXJpZXMsIGFuaW1hdGUgPSB0cnVlKSB7CiAgICAgIGlmICghdGhpcy5jaGFydCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIHRoaXMuaW50ZXJuYWxDaGFydERhdGEgPSBuZXdTZXJpZXM7CiAgICAgICAgaWYgKHRoaXMucm9sbGluZ1dpbmRvdyA+IDAgJiYgdGhpcy5yZWFsdGltZU1vZGUpIHsKICAgICAgICAgIGNvbnN0IG5vdzIgPSBEYXRlLm5vdygpOwogICAgICAgICAgY29uc3QgY3V0b2ZmVGltZSA9IG5vdzIgLSB0aGlzLnJvbGxpbmdXaW5kb3c7CiAgICAgICAgICBjb25zdCBmaWx0ZXJlZFNlcmllcyA9IG5ld1Nlcmllcy5tYXAoKHNlcmllcykgPT4gKHsKICAgICAgICAgICAgbmFtZTogc2VyaWVzLm5hbWUsCiAgICAgICAgICAgIGRhdGE6IHNlcmllcy5kYXRhLmZpbHRlcigocG9pbnQ0KSA9PiB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwb2ludDQgPT09ICJvYmplY3QiICYmIHBvaW50NCAhPT0gbnVsbCAmJiAieCIgaW4gcG9pbnQ0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUocG9pbnQ0LngpLmdldFRpbWUoKSA+IGN1dG9mZlRpbWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSkKICAgICAgICAgIH0pKTsKICAgICAgICAgIGlmIChmaWx0ZXJlZFNlcmllcy5zb21lKChzOSkgPT4gczkuZGF0YS5sZW5ndGggPiAwKSkgewogICAgICAgICAgICBpZiAodGhpcy55QXhpc1NjYWxpbmcgPT09ICJkeW5hbWljIikgewogICAgICAgICAgICAgIGNvbnN0IGFsbFZhbHVlcyA9IGZpbHRlcmVkU2VyaWVzLmZsYXRNYXAoKHM5KSA9PiBzOS5kYXRhLm1hcCgoZDYpID0+IGQ2LnkpKTsKICAgICAgICAgICAgICBpZiAoYWxsVmFsdWVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIGNvbnN0IG1heFZhbHVlID0gTWF0aC5tYXgoLi4uYWxsVmFsdWVzKTsKICAgICAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNNYXggPSBNYXRoLmNlaWwobWF4VmFsdWUgKiAxLjEpOwogICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHsKICAgICAgICAgICAgICAgICAgeWF4aXM6IHsKICAgICAgICAgICAgICAgICAgICBtaW46IDAsCiAgICAgICAgICAgICAgICAgICAgbWF4OiBkeW5hbWljTWF4CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlU2VyaWVzKGZpbHRlcmVkU2VyaWVzLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlU2VyaWVzKG5ld1NlcmllcywgYW5pbWF0ZSk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byB1cGRhdGUgY2hhcnQgc2VyaWVzOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLy8gVXBkYXRlIGp1c3QgdGhlIHgtYXhpcyBmb3Igc21vb3RoIHNjcm9sbGluZyBpbiByZWFsdGltZSBtb2RlCiAgICAvLyBQdWJsaWMgZm9yIGFkdmFuY2VkIHVzYWdlIGluIGRlbW9zLCBidXQgdHlwaWNhbGx5IGhhbmRsZWQgYXV0b21hdGljYWxseQogICAgYXN5bmMgdXBkYXRlVGltZVdpbmRvdygpIHsKICAgICAgaWYgKCF0aGlzLmNoYXJ0IHx8IHRoaXMucm9sbGluZ1dpbmRvdyA8PSAwKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IG5vdzIgPSBEYXRlLm5vdygpOwogICAgICBjb25zdCBjdXRvZmZUaW1lID0gbm93MiAtIHRoaXMucm9sbGluZ1dpbmRvdzsKICAgICAgYXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHsKICAgICAgICB4YXhpczogewogICAgICAgICAgbWluOiBjdXRvZmZUaW1lLAogICAgICAgICAgbWF4OiBub3cyLAogICAgICAgICAgbGFiZWxzOiB7CiAgICAgICAgICAgIGZvcm1hdDogIkhIOm1tOnNzIiwKICAgICAgICAgICAgZGF0ZXRpbWVVVEM6IGZhbHNlLAogICAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICAgIGNvbG9yczogWyF0aGlzLmdvQnJpZ2h0ID8gImhzbCgwIDAlIDYzLjklKSIgOiAiaHNsKDAgMCUgMjAlKSJdLAogICAgICAgICAgICAgIGZvbnRTaXplOiAiMTJweCIsCiAgICAgICAgICAgICAgZm9udEZhbWlseTogJy1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgc2Fucy1zZXJpZicsCiAgICAgICAgICAgICAgZm9udFdlaWdodDogIjQwMCIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHRpY2tBbW91bnQ6IDYKICAgICAgICB9CiAgICAgIH0sIGZhbHNlLCBmYWxzZSk7CiAgICB9CiAgICBhc3luYyBhcHBlbmREYXRhKG5ld0RhdGEpIHsKICAgICAgaWYgKCF0aGlzLmNoYXJ0KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuY2hhcnQuYXBwZW5kRGF0YShuZXdEYXRhKTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZU9wdGlvbnMob3B0aW9ucywgcmVkcmF3UGF0aHMsIGFuaW1hdGUpIHsKICAgICAgaWYgKCF0aGlzLmNoYXJ0KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMob3B0aW9ucywgcmVkcmF3UGF0aHMsIGFuaW1hdGUpOwogICAgfQogICAgYXN5bmMgcmVzaXplQ2hhcnQoKSB7CiAgICAgIGlmICghdGhpcy5jaGFydCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodGhpcy5ERUJVR19SRVNJWkUpIHsKICAgICAgICBjb25zb2xlLmxvZygiRGVlc0NoYXJ0QXJlYSAtIHJlc2l6ZUNoYXJ0IGNhbGxlZCIpOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgbWFpbmJveCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmJveCIpOwogICAgICAgIGNvbnN0IGNoYXJ0Q29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jaGFydENvbnRhaW5lciIpOwogICAgICAgIGlmICghbWFpbmJveCB8fCAhY2hhcnRDb250YWluZXIpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdm9pZCBtYWluYm94Lm9mZnNldEhlaWdodDsKICAgICAgICBjb25zdCBzdHlsZUNoYXJ0Q29udGFpbmVyID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2hhcnRDb250YWluZXIpOwogICAgICAgIGNvbnN0IHBhZGRpbmdUb3AgPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdUb3AsIDEwKTsKICAgICAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VJbnQoc3R5bGVDaGFydENvbnRhaW5lci5wYWRkaW5nQm90dG9tLCAxMCk7CiAgICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdMZWZ0LCAxMCk7CiAgICAgICAgY29uc3QgcGFkZGluZ1JpZ2h0ID0gcGFyc2VJbnQoc3R5bGVDaGFydENvbnRhaW5lci5wYWRkaW5nUmlnaHQsIDEwKTsKICAgICAgICBjb25zdCBhY3R1YWxXaWR0aCA9IG1haW5ib3guY2xpZW50V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDsKICAgICAgICBjb25zdCBhY3R1YWxIZWlnaHQgPSBtYWluYm94Lm9mZnNldEhlaWdodCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tOwogICAgICAgIGlmIChhY3R1YWxXaWR0aCA+IDAgJiYgYWN0dWFsSGVpZ2h0ID4gMCkgewogICAgICAgICAgaWYgKHRoaXMuREVCVUdfUkVTSVpFKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJEZWVzQ2hhcnRBcmVhIC0gVXBkYXRpbmcgY2hhcnQgZGltZW5zaW9uczoiLCB7CiAgICAgICAgICAgICAgd2lkdGg6IGFjdHVhbFdpZHRoLAogICAgICAgICAgICAgIGhlaWdodDogYWN0dWFsSGVpZ2h0CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHsKICAgICAgICAgICAgY2hhcnQ6IHsKICAgICAgICAgICAgICB3aWR0aDogYWN0dWFsV2lkdGgsCiAgICAgICAgICAgICAgaGVpZ2h0OiBhY3R1YWxIZWlnaHQKICAgICAgICAgICAgfQogICAgICAgICAgfSwgdHJ1ZSwgZmFsc2UpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gcmVzaXplIGNoYXJ0OiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBNYW51YWxseSB0cmlnZ2VyIGEgY2hhcnQgcmVzaXplLiBVc2VmdWwgd2hlbiBhdXRvbWF0aWMgZGV0ZWN0aW9uIGRvZXNuJ3Qgd29yay4KICAgICAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdGhhdCBjYW4gYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgY29tcG9uZW50LgogICAgICovCiAgICBhc3luYyBmb3JjZVJlc2l6ZSgpIHsKICAgICAgYXdhaXQgdGhpcy5yZXNpemVDaGFydCgpOwogICAgfQogICAgc3RhcnRBdXRvU2Nyb2xsKCkgewogICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsVGltZXIpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5hdXRvU2Nyb2xsVGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgIHRoaXMudXBkYXRlVGltZVdpbmRvdygpOwogICAgICB9LCB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCk7CiAgICB9CiAgICBzdG9wQXV0b1Njcm9sbCgpIHsKICAgICAgaWYgKHRoaXMuYXV0b1Njcm9sbFRpbWVyKSB7CiAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5hdXRvU2Nyb2xsVGltZXIpOwogICAgICAgIHRoaXMuYXV0b1Njcm9sbFRpbWVyID0gbnVsbDsKICAgICAgfQogICAgfQogICAgYXN5bmMgdXBkYXRlQ2hhcnRUaGVtZSgpIHsKICAgICAgaWYgKCF0aGlzLmNoYXJ0KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IGlzRGFyayA9ICF0aGlzLmdvQnJpZ2h0OwogICAgICBjb25zdCB0aGVtZSA9IGlzRGFyayA/ICJkYXJrIiA6ICJsaWdodCI7CiAgICAgIGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlT3B0aW9ucyh7CiAgICAgICAgdGhlbWU6IHsKICAgICAgICAgIG1vZGU6IHRoZW1lCiAgICAgICAgfSwKICAgICAgICBjb2xvcnM6IGlzRGFyayA/IHRoaXMuQ0hBUlRfQ09MT1JTLmRhcmsgOiB0aGlzLkNIQVJUX0NPTE9SUy5saWdodCwKICAgICAgICB4YXhpczogewogICAgICAgICAgbGFiZWxzOiB7CiAgICAgICAgICAgIHN0eWxlOiB7CiAgICAgICAgICAgICAgY29sb3JzOiBbaXNEYXJrID8gImhzbCgwIDAlIDYzLjklKSIgOiAiaHNsKDAgMCUgMjAlKSJdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHlheGlzOiB7CiAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICBjb2xvcnM6IFtpc0RhcmsgPyAiaHNsKDAgMCUgNjMuOSUpIiA6ICJoc2woMCAwJSAyMCUpIl0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZ3JpZDogewogICAgICAgICAgYm9yZGVyQ29sb3I6IGlzRGFyayA/ICJoc2woMCAwJSAxNC45JSkiIDogImhzbCgwIDAlIDk0JSkiCiAgICAgICAgfSwKICAgICAgICBmaWxsOiB7CiAgICAgICAgICBncmFkaWVudDogewogICAgICAgICAgICBzaGFkZTogaXNEYXJrID8gImRhcmsiIDogImxpZ2h0IiwKICAgICAgICAgICAgb3BhY2l0eUZyb206IGlzRGFyayA/IDAuMiA6IDAuMwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczQ2KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQ2hhcnRBcmVhMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtY2hhcnQvZGVlcy1jaGFydC1sb2cvZGVlcy1jaGFydC1sb2cuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMzMyA9ICgpID0+IHsKICByZXR1cm4gYjJgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgY29uc3Qgc3RydWN0dXJlZExvZyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI3N0cnVjdHVyZWQtbG9nIik7CiAgICBjb25zdCByYXdMb2cgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNyYXctbG9nIik7CiAgICBsZXQgc3RydWN0dXJlZEludGVydmFsSWQ7CiAgICBsZXQgcmF3SW50ZXJ2YWxJZDsKICAgIGNvbnN0IHNlcnZlclNvdXJjZXMgPSBbIlNlcnZlciIsICJEYXRhYmFzZSIsICJBUEkiLCAiQXV0aCIsICJDYWNoZSIsICJRdWV1ZSIsICJXZWJTb2NrZXQiLCAiU2NoZWR1bGVyIl07CiAgICBjb25zdCBsb2dUZW1wbGF0ZXMgPSB7CiAgICAgIGRlYnVnOiBbCiAgICAgICAgIkxvYWRpbmcgbW9kdWxlOiB7e21vZHVsZX19IiwKICAgICAgICAiQ2FjaGUgaGl0IGZvciBrZXk6IHt7a2V5fX0iLAogICAgICAgICJTUUwgcXVlcnkgZXhlY3V0ZWQgaW4ge3t0aW1lfX1tcyIsCiAgICAgICAgIlJlcXVlc3QgaGVhZGVyczoge3toZWFkZXJzfX0iLAogICAgICAgICJFbnZpcm9ubWVudCB2YXJpYWJsZSBsb2FkZWQ6IHt7dmFyfX0iCiAgICAgIF0sCiAgICAgIGluZm86IFsKICAgICAgICAiUmVxdWVzdCByZWNlaXZlZDoge3ttZXRob2R9fSB7e3BhdGh9fSIsCiAgICAgICAgIlVzZXIge3t1c2VySWR9fSBhdXRoZW50aWNhdGVkIHN1Y2Nlc3NmdWxseSIsCiAgICAgICAgIlByb2Nlc3Npbmcgam9iIHt7am9iSWR9fSBmcm9tIHF1ZXVlIiwKICAgICAgICAnU2NoZWR1bGVkIHRhc2sgInt7dGFza319IiBzdGFydGVkJywKICAgICAgICAiV2ViU29ja2V0IGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQgZnJvbSB7e2lwfX0iCiAgICAgIF0sCiAgICAgIHdhcm46IFsKICAgICAgICAiU2xvdyBxdWVyeSBkZXRlY3RlZDoge3txdWVyeX19ICh7e3RpbWV9fW1zKSIsCiAgICAgICAgIk1lbW9yeSB1c2FnZSBhdCB7e3BlcmNlbnR9fSUiLAogICAgICAgICJSYXRlIGxpbWl0IGFwcHJvYWNoaW5nIGZvciBJUCB7e2lwfX0iLAogICAgICAgICJEZXByZWNhdGVkIEFQSSBlbmRwb2ludCBjYWxsZWQ6IHt7ZW5kcG9pbnR9fSIsCiAgICAgICAgIkNlcnRpZmljYXRlIGV4cGlyZXMgaW4ge3tkYXlzfX0gZGF5cyIKICAgICAgXSwKICAgICAgZXJyb3I6IFsKICAgICAgICAiRGF0YWJhc2UgY29ubmVjdGlvbiBsb3N0OiB7e2Vycm9yfX0iLAogICAgICAgICJGYWlsZWQgdG8gcHJvY2VzcyByZXF1ZXN0OiB7e2Vycm9yfX0iLAogICAgICAgICJBdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIge3t1c2VyfX0iLAogICAgICAgICJGaWxlIG5vdCBmb3VuZDoge3twYXRofX0iLAogICAgICAgICJTZXJ2aWNlIHVuYXZhaWxhYmxlOiB7e3NlcnZpY2V9fSIKICAgICAgXSwKICAgICAgc3VjY2VzczogWwogICAgICAgICJTZXJ2ZXIgc3RhcnRlZCBzdWNjZXNzZnVsbHkgb24gcG9ydCB7e3BvcnR9fSIsCiAgICAgICAgIkRhdGFiYXNlIG1pZ3JhdGlvbiBjb21wbGV0ZWQiLAogICAgICAgICJCYWNrdXAgY29tcGxldGVkOiB7e3NpemV9fSBNQiIsCiAgICAgICAgIlNTTCBjZXJ0aWZpY2F0ZSByZW5ld2VkIiwKICAgICAgICAiSGVhbHRoIGNoZWNrIHBhc3NlZDogYWxsIHN5c3RlbXMgb3BlcmF0aW9uYWwiCiAgICAgIF0KICAgIH07CiAgICBjb25zdCBkb2NrZXJMb2dUZW1wbGF0ZXMgPSBbCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDUuMTIzWlx4MUJbMG0gXHgxQlszNm1JTkZPXHgxQlswbSAgW25naW54XSBHRVQgL2FwaS9oZWFsdGggMjAwIC0gMm1zIiwKICAgICAgIlx4MUJbOTBtMjAyNC0wMS0xNVQxMDoyMzo0NS40NTZaXHgxQlswbSBceDFCWzMzbVdBUk5ceDFCWzBtICBbcmVkaXNdIENvbm5lY3Rpb24gcG9vbCBydW5uaW5nIGxvdzogMy8xMCIsCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDUuNzg5Wlx4MUJbMG0gXHgxQlszMW1FUlJPUlx4MUJbMG0gW21vbmdvZGJdIFF1ZXJ5IHRpbWVvdXQgYWZ0ZXIgMzAwMDBtcyIsCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDYuMDEyWlx4MUJbMG0gXHgxQlszNm1JTkZPXHgxQlswbSAgW2FwcF0gUHJvY2Vzc2luZyBiYXRjaCBqb2IgI3t7am9iSWR9fSIsCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDYuMzQ1Wlx4MUJbMG0gXHgxQlszMm1PS1x4MUJbMG0gICAgW2hlYWx0aF0gQWxsIHNlcnZpY2VzIGhlYWx0aHkiLAogICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ2LjY3OFpceDFCWzBtIFx4MUJbMzZtSU5GT1x4MUJbMG0gIFtrYWZrYV0gTWVzc2FnZSBjb25zdW1lZCBmcm9tIHRvcGljOiBldmVudHMiLAogICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ3LjAwMVpceDFCWzBtIFx4MUJbMzVtREVCVUdceDFCWzBtIFtncnBjXSBSZXF1ZXN0IHJlY2VpdmVkOiBHZXRVc2VyKGlkPXt7dXNlcklkfX0pIiwKICAgICAgIlx4MUJbOTBtMjAyNC0wMS0xNVQxMDoyMzo0Ny4yMzRaXHgxQlswbSBceDFCWzMxbUVSUk9SXHgxQlswbSBbYXV0aF0gVG9rZW4gdmFsaWRhdGlvbiBmYWlsZWQ6IGV4cGlyZWQiLAogICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ3LjU2N1pceDFCWzBtIFx4MUJbMzNtV0FSTlx4MUJbMG0gIFtyYXRlLWxpbWl0XSBJUCB7e2lwfX0gYXBwcm9hY2hpbmcgcmF0ZSBsaW1pdCIsCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDcuODkwWlx4MUJbMG0gXHgxQlszNm1JTkZPXHgxQlswbSAgW3dlYnNvY2tldF0gQ2xpZW50IGNvbm5lY3RlZDogc2Vzc2lvbj17e3Nlc3Npb259fSIsCiAgICAgIC8vIE11bHRpLWxpbmUgbG9nIGVudHJ5IGxpa2Ugc3RhY2sgdHJhY2VzCiAgICAgICJceDFCWzMxbUVycm9yOiBDb25uZWN0aW9uIHJlZnVzZWRceDFCWzBtXG4gICAgYXQgVGNwQ29ubmVjdGlvbi5jb25uZWN0ICgvYXBwL25vZGVfbW9kdWxlcy9wZy9saWIvY29ubmVjdGlvbi5qczoxMjoxNSlcbiAgICBhdCBQb29sLmNvbm5lY3QgKC9hcHAvbm9kZV9tb2R1bGVzL3BnL2xpYi9wb29sLmpzOjQ1OjIzKVxuICAgIGF0IGFzeW5jIERhdGFiYXNlU2VydmljZS5xdWVyeSAoL2FwcC9zcmMvZGIvc2VydmljZS50czo4OToxMikiCiAgICBdOwogICAgY29uc3QgZ2VuZXJhdGVSYW5kb21Mb2cgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGxldmVscyA9IFsiZGVidWciLCAiaW5mbyIsICJ3YXJuIiwgImVycm9yIiwgInN1Y2Nlc3MiXTsKICAgICAgY29uc3Qgd2VpZ2h0cyA9IFswLjIsIDAuNSwgMC4xNSwgMC4xLCAwLjA1XTsKICAgICAgY29uc3QgcmFuZG9tID0gTWF0aC5yYW5kb20oKTsKICAgICAgbGV0IGN1bXVsYXRpdmUgPSAwOwogICAgICBsZXQgbGV2ZWwgPSAiaW5mbyI7CiAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHdlaWdodHMubGVuZ3RoOyBpMTErKykgewogICAgICAgIGN1bXVsYXRpdmUgKz0gd2VpZ2h0c1tpMTFdOwogICAgICAgIGlmIChyYW5kb20gPCBjdW11bGF0aXZlKSB7CiAgICAgICAgICBsZXZlbCA9IGxldmVsc1tpMTFdOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHNvdXJjZSA9IHNlcnZlclNvdXJjZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogc2VydmVyU291cmNlcy5sZW5ndGgpXTsKICAgICAgY29uc3QgdGVtcGxhdGVzID0gbG9nVGVtcGxhdGVzW2xldmVsXTsKICAgICAgY29uc3QgdGVtcGxhdGUgPSB0ZW1wbGF0ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGVtcGxhdGVzLmxlbmd0aCldOwogICAgICBjb25zdCBtZXNzYWdlMiA9IHRlbXBsYXRlLnJlcGxhY2UoInt7bW9kdWxlfX0iLCBbImV4cHJlc3MiLCAibW9uZ29vc2UiLCAicmVkaXMiLCAic29ja2V0LmlvIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCldKS5yZXBsYWNlKCJ7e2tleX19IiwgInVzZXI6IiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDFlMykpLnJlcGxhY2UoInt7dGltZX19IiwgU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUwMCkgKyA1MCkpLnJlcGxhY2UoInt7aGVhZGVyc319IiwgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbiwgQXV0aG9yaXphdGlvbjogQmVhcmVyIC4uLiIpLnJlcGxhY2UoInt7dmFyfX0iLCBbIk5PREVfRU5WIiwgIkRBVEFCQVNFX1VSTCIsICJBUElfS0VZIiwgIlBPUlQiXVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KV0pLnJlcGxhY2UoInt7bWV0aG9kfX0iLCBbIkdFVCIsICJQT1NUIiwgIlBVVCIsICJERUxFVEUiXVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KV0pLnJlcGxhY2UoInt7cGF0aH19IiwgWyIvYXBpL3VzZXJzIiwgIi9hcGkvYXV0aC9sb2dpbiIsICIvYXBpL3Byb2R1Y3RzIiwgIi9oZWFsdGgiXVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KV0pLnJlcGxhY2UoInt7dXNlcklkfX0iLCBTdHJpbmcoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMWU0KSkpLnJlcGxhY2UoInt7am9iSWR9fSIsICJqb2JfIiArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxMSkpLnJlcGxhY2UoInt7dGFza319IiwgWyJjbGVhbnVwIiwgImJhY2t1cCIsICJyZXBvcnQtZ2VuZXJhdGlvbiIsICJjYWNoZS1yZWZyZXNoIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCldKS5yZXBsYWNlKCJ7e2lwfX0iLCBgMTkyLjE2OC4xLiR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjU1KX1gKS5yZXBsYWNlKCJ7e3F1ZXJ5fX0iLCAiU0VMRUNUICogRlJPTSB1c2VycyBXSEVSRSAuLi4iKS5yZXBsYWNlKCJ7e3BlcmNlbnR9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAzMCkgKyA3MCkpLnJlcGxhY2UoInt7ZW5kcG9pbnR9fSIsICIvYXBpL3YxL2xlZ2FjeSIpLnJlcGxhY2UoInt7ZGF5c319IiwgU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDMwKSArIDEpKS5yZXBsYWNlKCJ7e2Vycm9yfX0iLCBbIkVDT05OUkVGVVNFRCIsICJFVElNRURPVVQiLCAiRU5PVEZPVU5EIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMyldKS5yZXBsYWNlKCJ7e3VzZXJ9fSIsICJ1c2VyXyIgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTMpKS5yZXBsYWNlKCJ7e3NlcnZpY2V9fSIsIFsiUmVkaXMiLCAiTW9uZ29EQiIsICJFbGFzdGljU2VhcmNoIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMyldKS5yZXBsYWNlKCJ7e3BvcnR9fSIsIFN0cmluZygzZTMgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkpKS5yZXBsYWNlKCJ7e3NpemV9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1MDApICsgMTAwKSk7CiAgICAgIHN0cnVjdHVyZWRMb2cuYWRkTG9nKGxldmVsLCBtZXNzYWdlMiwgc291cmNlKTsKICAgIH07CiAgICBjb25zdCBnZW5lcmF0ZURvY2tlckxvZyA9ICgpID0+IHsKICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2NrZXJMb2dUZW1wbGF0ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZG9ja2VyTG9nVGVtcGxhdGVzLmxlbmd0aCldOwogICAgICBjb25zdCBub3cyID0gKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpOwogICAgICBjb25zdCBsb2dMaW5lID0gdGVtcGxhdGUucmVwbGFjZSgvMjAyNC0wMS0xNVQxMDoyMzpcZHsyfVwuXGR7M31aL2csIG5vdzIpLnJlcGxhY2UoInt7am9iSWR9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTQpKSkucmVwbGFjZSgie3t1c2VySWR9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTQpKSkucmVwbGFjZSgie3tpcH19IiwgYDE5Mi4xNjguMS4ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NSl9YCkucmVwbGFjZSgie3tzZXNzaW9ufX0iLCBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTEpKTsKICAgICAgcmF3TG9nLndyaXRlbG5SYXcobG9nTGluZSk7CiAgICB9OwogICAgY29uc3Qgc3RhcnRTdHJ1Y3R1cmVkU2ltdWxhdGlvbiA9ICgpID0+IHsKICAgICAgaWYgKCFzdHJ1Y3R1cmVkSW50ZXJ2YWxJZCkgewogICAgICAgIGNvbnN0IHNjaGVkdWxlTmV4dCA9ICgpID0+IHsKICAgICAgICAgIGdlbmVyYXRlUmFuZG9tTG9nKCk7CiAgICAgICAgICBjb25zdCBuZXh0RGVsYXkgPSBNYXRoLnJhbmRvbSgpICogMmUzICsgNTAwOwogICAgICAgICAgc3RydWN0dXJlZEludGVydmFsSWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVkSW50ZXJ2YWxJZCkgewogICAgICAgICAgICAgIHNjaGVkdWxlTmV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBuZXh0RGVsYXkpOwogICAgICAgIH07CiAgICAgICAgc2NoZWR1bGVOZXh0KCk7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCBzdG9wU3RydWN0dXJlZFNpbXVsYXRpb24gPSAoKSA9PiB7CiAgICAgIGlmIChzdHJ1Y3R1cmVkSW50ZXJ2YWxJZCkgewogICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoc3RydWN0dXJlZEludGVydmFsSWQpOwogICAgICAgIHN0cnVjdHVyZWRJbnRlcnZhbElkID0gbnVsbDsKICAgICAgfQogICAgfTsKICAgIGNvbnN0IHN0YXJ0UmF3U2ltdWxhdGlvbiA9ICgpID0+IHsKICAgICAgaWYgKCFyYXdJbnRlcnZhbElkKSB7CiAgICAgICAgY29uc3Qgc2NoZWR1bGVOZXh0ID0gKCkgPT4gewogICAgICAgICAgZ2VuZXJhdGVEb2NrZXJMb2coKTsKICAgICAgICAgIGNvbnN0IG5leHREZWxheSA9IE1hdGgucmFuZG9tKCkgKiAxZTMgKyAyMDA7CiAgICAgICAgICByYXdJbnRlcnZhbElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBpZiAocmF3SW50ZXJ2YWxJZCkgewogICAgICAgICAgICAgIHNjaGVkdWxlTmV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBuZXh0RGVsYXkpOwogICAgICAgIH07CiAgICAgICAgc2NoZWR1bGVOZXh0KCk7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCBzdG9wUmF3U2ltdWxhdGlvbiA9ICgpID0+IHsKICAgICAgaWYgKHJhd0ludGVydmFsSWQpIHsKICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHJhd0ludGVydmFsSWQpOwogICAgICAgIHJhd0ludGVydmFsSWQgPSBudWxsOwogICAgICB9CiAgICB9OwogICAgY29uc3QgYnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICAgIGNvbnN0IHRleHQ5ID0gYnV0dG9uLnRleHRDb250ZW50Py50cmltKCk7CiAgICAgIHN3aXRjaCAodGV4dDkpIHsKICAgICAgICBjYXNlICJBZGQgU3RydWN0dXJlZCBMb2ciOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gZ2VuZXJhdGVSYW5kb21Mb2coKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJTdGFydCBTdHJ1Y3R1cmVkIjoKICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN0YXJ0U3RydWN0dXJlZFNpbXVsYXRpb24oKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJTdG9wIFN0cnVjdHVyZWQiOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3RvcFN0cnVjdHVyZWRTaW11bGF0aW9uKCkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQWRkIERvY2tlciBMb2ciOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gZ2VuZXJhdGVEb2NrZXJMb2coKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJTdGFydCBEb2NrZXIiOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3RhcnRSYXdTaW11bGF0aW9uKCkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiU3RvcCBEb2NrZXIiOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3RvcFJhd1NpbXVsYXRpb24oKSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSk7CiAgfX0+CiAgICAgIDxzdHlsZT4KICAgICAgICAke2lgCiAgICAgICAgICAuZGVtb0JveCB7CiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCAiaHNsKDAgMCUgNSUpIil9OwogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICB9CiAgICAgICAgICAuc2VjdGlvbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgIGdhcDogMTJweDsKICAgICAgICAgIH0KICAgICAgICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgICAgfQogICAgICAgICAgLnNlY3Rpb24tZGVzY3JpcHRpb24gewogICAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICAgIH0KICAgICAgICAgIC5jb250cm9scyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGdhcDogMTBweDsKICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgfQogICAgICAgIGB9CiAgICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJkZW1vQm94Ij4KICAgICAgPCEtLSBTdHJ1Y3R1cmVkIExvZ3MgU2VjdGlvbiAtLT4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U3RydWN0dXJlZCBMb2dzIChJTG9nRW50cnkpPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBTdHJ1Y3R1cmVkIGxvZyBlbnRyaWVzIHdpdGggbGV2ZWwsIG1lc3NhZ2UsIGFuZCBzb3VyY2UuIFN1cHBvcnRzIHNlYXJjaCBhbmQga2V5d29yZCBoaWdobGlnaHRpbmcuCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkFkZCBTdHJ1Y3R1cmVkIExvZzwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U3RhcnQgU3RydWN0dXJlZDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U3RvcCBTdHJ1Y3R1cmVkPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGVlcy1jaGFydC1sb2cKICAgICAgICAgIGlkPSJzdHJ1Y3R1cmVkLWxvZyIKICAgICAgICAgIC5sYWJlbD0keyJQcm9kdWN0aW9uIFNlcnZlciBMb2dzIn0KICAgICAgICAgIC5oaWdobGlnaHRLZXl3b3Jkcz0ke1siZXJyb3IiLCAiZmFpbGVkIiwgInRpbWVvdXQiXX0KICAgICAgICAgIC5zaG93TWV0cmljcz0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1jaGFydC1sb2c+CiAgICAgIDwvZGl2PgoKICAgICAgPCEtLSBSYXcgTG9ncyBTZWN0aW9uIC0tPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5SYXcgTG9ncyAoRG9ja2VyL0NvbnRhaW5lciBTdHlsZSk8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIFJhdyBsb2cgb3V0cHV0IHdpdGggQU5TSSBlc2NhcGUgc2VxdWVuY2VzIGZvciByZWFsIERvY2tlci9jb250YWluZXIgbG9ncy4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24+QWRkIERvY2tlciBMb2c8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0YXJ0IERvY2tlcjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U3RvcCBEb2NrZXI8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkZWVzLWNoYXJ0LWxvZwogICAgICAgICAgaWQ9InJhdy1sb2ciCiAgICAgICAgICAubGFiZWw9JHsiRG9ja2VyIENvbnRhaW5lciBMb2dzIn0KICAgICAgICAgIC5tb2RlPSR7InJhdyJ9CiAgICAgICAgICAuc2hvd01ldHJpY3M9JHtmYWxzZX0KICAgICAgICA+PC9kZWVzLWNoYXJ0LWxvZz4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWNoYXJ0L2RlZXMtY2hhcnQtbG9nL2RlZXMtY2hhcnQtbG9nLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKaW5pdF9zZXJ2aWNlcygpOwp2YXIgX19lc0RlY29yYXRlNDYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczQ3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzQ2hhcnRMb2cgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWNoYXJ0LWxvZyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2xhYmVsX2RlY29yYXRvcnM7CiAgbGV0IF9sYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tb2RlX2RlY29yYXRvcnM7CiAgbGV0IF9tb2RlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9kZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbG9nRW50cmllc19kZWNvcmF0b3JzOwogIGxldCBfbG9nRW50cmllc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xvZ0VudHJpZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9TY3JvbGxfZGVjb3JhdG9yczsKICBsZXQgX2F1dG9TY3JvbGxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hdXRvU2Nyb2xsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhFbnRyaWVzX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhFbnRyaWVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RW50cmllc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0S2V5d29yZHNfZGVjb3JhdG9yczsKICBsZXQgX2hpZ2hsaWdodEtleXdvcmRzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0S2V5d29yZHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dNZXRyaWNzX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93TWV0cmljc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dNZXRyaWNzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hRdWVyeV9kZWNvcmF0b3JzOwogIGxldCBfc2VhcmNoUXVlcnlfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hRdWVyeV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsdGVyTW9kZV9kZWNvcmF0b3JzOwogIGxldCBfZmlsdGVyTW9kZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlck1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21ldHJpY3NfZGVjb3JhdG9yczsKICBsZXQgX21ldHJpY3NfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZXRyaWNzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXJtaW5hbFJlYWR5X2RlY29yYXRvcnM7CiAgbGV0IF90ZXJtaW5hbFJlYWR5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGVybWluYWxSZWFkeV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzQ2hhcnRMb2cyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbGFiZWxfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgX21vZGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9sb2dFbnRyaWVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9hdXRvU2Nyb2xsX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX21heEVudHJpZXNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9oaWdobGlnaHRLZXl3b3Jkc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfc2hvd01ldHJpY3NfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2VhcmNoUXVlcnlfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2ZpbHRlck1vZGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX21ldHJpY3NfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3Rlcm1pbmFsUmVhZHlfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlNDYodGhpcywgbnVsbCwgX2xhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYWJlbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFiZWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfbW9kZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtb2RlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2RlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1vZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1vZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbW9kZV9pbml0aWFsaXplcnMsIF9tb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDYodGhpcywgbnVsbCwgX2xvZ0VudHJpZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibG9nRW50cmllcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibG9nRW50cmllcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sb2dFbnRyaWVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sb2dFbnRyaWVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xvZ0VudHJpZXNfaW5pdGlhbGl6ZXJzLCBfbG9nRW50cmllc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ2KHRoaXMsIG51bGwsIF9hdXRvU2Nyb2xsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImF1dG9TY3JvbGwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9TY3JvbGwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXV0b1Njcm9sbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXV0b1Njcm9sbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvU2Nyb2xsX2luaXRpYWxpemVycywgX2F1dG9TY3JvbGxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfbWF4RW50cmllc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYXhFbnRyaWVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYXhFbnRyaWVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heEVudHJpZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1heEVudHJpZXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWF4RW50cmllc19pbml0aWFsaXplcnMsIF9tYXhFbnRyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDYodGhpcywgbnVsbCwgX2hpZ2hsaWdodEtleXdvcmRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhpZ2hsaWdodEtleXdvcmRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoaWdobGlnaHRLZXl3b3JkcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oaWdobGlnaHRLZXl3b3Jkcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaGlnaGxpZ2h0S2V5d29yZHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaGlnaGxpZ2h0S2V5d29yZHNfaW5pdGlhbGl6ZXJzLCBfaGlnaGxpZ2h0S2V5d29yZHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfc2hvd01ldHJpY3NfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd01ldHJpY3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dNZXRyaWNzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dNZXRyaWNzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93TWV0cmljcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93TWV0cmljc19pbml0aWFsaXplcnMsIF9zaG93TWV0cmljc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ2KHRoaXMsIG51bGwsIF9zZWFyY2hRdWVyeV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWFyY2hRdWVyeSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VhcmNoUXVlcnkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VhcmNoUXVlcnksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlYXJjaFF1ZXJ5ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlYXJjaFF1ZXJ5X2luaXRpYWxpemVycywgX3NlYXJjaFF1ZXJ5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDYodGhpcywgbnVsbCwgX2ZpbHRlck1vZGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyTW9kZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZmlsdGVyTW9kZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5maWx0ZXJNb2RlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXJNb2RlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ZpbHRlck1vZGVfaW5pdGlhbGl6ZXJzLCBfZmlsdGVyTW9kZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ2KHRoaXMsIG51bGwsIF9tZXRyaWNzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1ldHJpY3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1ldHJpY3MiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWV0cmljcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWV0cmljcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZXRyaWNzX2luaXRpYWxpemVycywgX21ldHJpY3NfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfdGVybWluYWxSZWFkeV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0ZXJtaW5hbFJlYWR5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0ZXJtaW5hbFJlYWR5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRlcm1pbmFsUmVhZHksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRlcm1pbmFsUmVhZHkgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGVybWluYWxSZWFkeV9pbml0aWFsaXplcnMsIF90ZXJtaW5hbFJlYWR5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQ2hhcnRMb2cyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMzMzsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiQ2hhcnQiOwogICAgI2xhYmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9sYWJlbF9pbml0aWFsaXplcnMsICJTZXJ2ZXIgTG9ncyIpOwogICAgZ2V0IGxhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYWJlbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9tb2RlX2luaXRpYWxpemVycywgInN0cnVjdHVyZWQiKSk7CiAgICBnZXQgbW9kZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21vZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNtb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbG9nRW50cmllc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX21vZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9sb2dFbnRyaWVzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBsb2dFbnRyaWVzKCkgewogICAgICByZXR1cm4gdGhpcy4jbG9nRW50cmllc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxvZ0VudHJpZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI2xvZ0VudHJpZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhdXRvU2Nyb2xsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfbG9nRW50cmllc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2F1dG9TY3JvbGxfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgYXV0b1Njcm9sbCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2F1dG9TY3JvbGxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhdXRvU2Nyb2xsKHZhbHVlMikgewogICAgICB0aGlzLiNhdXRvU2Nyb2xsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4RW50cmllc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2F1dG9TY3JvbGxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9tYXhFbnRyaWVzX2luaXRpYWxpemVycywgMWU0KSk7CiAgICBnZXQgbWF4RW50cmllcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21heEVudHJpZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYXhFbnRyaWVzKHZhbHVlMikgewogICAgICB0aGlzLiNtYXhFbnRyaWVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaGlnaGxpZ2h0S2V5d29yZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9tYXhFbnRyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfaGlnaGxpZ2h0S2V5d29yZHNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IGhpZ2hsaWdodEtleXdvcmRzKCkgewogICAgICByZXR1cm4gdGhpcy4jaGlnaGxpZ2h0S2V5d29yZHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBoaWdobGlnaHRLZXl3b3Jkcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGlnaGxpZ2h0S2V5d29yZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93TWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2hpZ2hsaWdodEtleXdvcmRzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfc2hvd01ldHJpY3NfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd01ldHJpY3MoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93TWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dNZXRyaWNzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93TWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlYXJjaFF1ZXJ5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfc2hvd01ldHJpY3NfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9zZWFyY2hRdWVyeV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgc2VhcmNoUXVlcnkoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWFyY2hRdWVyeV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlYXJjaFF1ZXJ5KHZhbHVlMikgewogICAgICB0aGlzLiNzZWFyY2hRdWVyeV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2ZpbHRlck1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9zZWFyY2hRdWVyeV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2ZpbHRlck1vZGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGZpbHRlck1vZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmaWx0ZXJNb2RlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsdGVyTW9kZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsdGVyTW9kZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21ldHJpY3NfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9maWx0ZXJNb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfbWV0cmljc19pbml0aWFsaXplcnMsIHsgZGVidWc6IDAsIGluZm86IDAsIHdhcm46IDAsIGVycm9yOiAwLCBzdWNjZXNzOiAwLCB0b3RhbDogMCwgcmF0ZTogMCB9KSk7CiAgICBnZXQgbWV0cmljcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21ldHJpY3NfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtZXRyaWNzKHZhbHVlMikgewogICAgICB0aGlzLiNtZXRyaWNzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGVybWluYWxSZWFkeV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX21ldHJpY3NfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF90ZXJtaW5hbFJlYWR5X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCB0ZXJtaW5hbFJlYWR5KCkgewogICAgICByZXR1cm4gdGhpcy4jdGVybWluYWxSZWFkeV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRlcm1pbmFsUmVhZHkodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Rlcm1pbmFsUmVhZHlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8vIEJ1ZmZlciBvZiBhbGwgbG9nIGVudHJpZXMgZm9yIGZpbHRlciBtb2RlCiAgICBsb2dCdWZmZXIgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfdGVybWluYWxSZWFkeV9leHRyYUluaXRpYWxpemVycyksIFtdKTsKICAgIC8vIFRyYWNrIHRyYWlsaW5nIGhpZGRlbiBlbnRyaWVzIGNvdW50IGZvciBsaXZlIHVwZGF0ZXMgaW4gZmlsdGVyIG1vZGUKICAgIHRyYWlsaW5nSGlkZGVuQ291bnQgPSAwOwogICAgLy8geHRlcm0gaW5zdGFuY2VzCiAgICB0ZXJtaW5hbCA9IG51bGw7CiAgICBmaXRBZGRvbiA9IG51bGw7CiAgICBzZWFyY2hBZGRvbiA9IG51bGw7CiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7CiAgICB0ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIGRvbXRvb2xzSW5zdGFuY2UgPSBudWxsOwogICAgLy8gUmF0ZSBjYWxjdWxhdGlvbgogICAgcmF0ZUJ1ZmZlciA9IFtdOwogICAgcmF0ZUludGVydmFsID0gbnVsbDsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5tYWluYm94IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CgogICAgICAudGl0bGUgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1ib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzMDBweDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1ib3ggaW5wdXQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAuc2VhcmNoLWJveCBpbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICB9CgogICAgICAuc2VhcmNoLWJveCBpbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwgImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgfQoKICAgICAgLnNlYXJjaC1uYXYgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtbmF2IGJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogNHB4IDZweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgfQoKICAgICAgLnNlYXJjaC1uYXYgYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmZpbHRlci10b2dnbGUgewogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmZpbHRlci10b2dnbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuZmlsdGVyLXRvZ2dsZS5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDUgOTMlIDQ3JSkiLCAiaHNsKDQ1IDkzJSA0NyUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NSA5MyUgNDclKSIsICJoc2woNDUgOTMlIDQ3JSkiKX07CiAgICAgICAgY29sb3I6IGhzbCgwIDAlIDklKTsKICAgICAgfQoKICAgICAgLmNvbnRyb2xzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNnB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICB9CgogICAgICAuY29udHJvbC1idXR0b24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwogICAgICB9CgogICAgICAuY29udHJvbC1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuY29udHJvbC1idXR0b24uYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1jb250YWluZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICB9CgogICAgICAudGVybWluYWwtY29udGFpbmVyIC54dGVybSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubG9hZGluZy1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgLm1ldHJpY3MtYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubWV0cmljIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5tZXRyaWM6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIC5tZXRyaWMuZXJyb3I6OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDAgODQuMiUgNjAuMiUpOwogICAgICB9CgogICAgICAubWV0cmljLndhcm46OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDI1IDk1JSA1MyUpOwogICAgICB9CgogICAgICAubWV0cmljLmluZm86OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKTsKICAgICAgfQoKICAgICAgLm1ldHJpYy5zdWNjZXNzOjpiZWZvcmUgewogICAgICAgIGJhY2tncm91bmQ6IGhzbCgxNDIuMSA3Ni4yJSAzNi4zJSk7CiAgICAgIH0KCiAgICAgIC5tZXRyaWMuZGVidWc6OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDAgMCUgNjMuOSUpOwogICAgICB9CgogICAgICAubWV0cmljLnJhdGUgewogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgLm1ldHJpYy5yYXRlOjpiZWZvcmUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc2V0dXAoKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPiR7dGhpcy5sYWJlbH08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaC1ib3giPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJTZWFyY2ggbG9ncy4uLiIKICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLnNlYXJjaFF1ZXJ5fQogICAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2VhcmNoSW5wdXQoZTExKX0KICAgICAgICAgICAgICBAa2V5ZG93bj0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2VhcmNoS2V5ZG93bihlMTEpfQogICAgICAgICAgICAvPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtbmF2Ij4KICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpID0+IHRoaXMuc2VhcmNoUHJldmlvdXMoKX0gdGl0bGU9IlByZXZpb3VzIG1hdGNoIj7ihpE8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpID0+IHRoaXMuc2VhcmNoTmV4dCgpfSB0aXRsZT0iTmV4dCBtYXRjaCI+4oaTPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9ImZpbHRlci10b2dnbGUgJHt0aGlzLmZpbHRlck1vZGUgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnRvZ2dsZUZpbHRlck1vZGUoKX0KICAgICAgICAgICAgICB0aXRsZT0iJHt0aGlzLmZpbHRlck1vZGUgPyAiU3dpdGNoIHRvIGhpZ2hsaWdodCBtb2RlIiA6ICJTd2l0Y2ggdG8gZmlsdGVyIG1vZGUifSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgICR7dGhpcy5maWx0ZXJNb2RlID8gIkZpbHRlciIgOiAiSGlnaGxpZ2h0In0KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJjb250cm9sLWJ1dHRvbiAke3RoaXMuYXV0b1Njcm9sbCA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMudG9nZ2xlQXV0b1Njcm9sbCgpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgQXV0byBTY3JvbGwKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNvbnRyb2wtYnV0dG9uIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNsZWFyTG9ncygpfT4KICAgICAgICAgICAgICBDbGVhcgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1jb250YWluZXIiPgogICAgICAgICAgJHshdGhpcy50ZXJtaW5hbFJlYWR5ID8gYjJgPGRpdiBjbGFzcz0ibG9hZGluZy1zdGF0ZSI+TG9hZGluZyB0ZXJtaW5hbC4uLjwvZGl2PmAgOiAiIn0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgJHt0aGlzLnNob3dNZXRyaWNzID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWV0cmljcy1iYXIiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1ldHJpYyBlcnJvciI+ZXJyb3JzOiAke3RoaXMubWV0cmljcy5lcnJvcn08L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0cmljIHdhcm4iPndhcm5zOiAke3RoaXMubWV0cmljcy53YXJufTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXRyaWMgaW5mbyI+aW5mbzogJHt0aGlzLm1ldHJpY3MuaW5mb308L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0cmljIHN1Y2Nlc3MiPnN1Y2Nlc3M6ICR7dGhpcy5tZXRyaWNzLnN1Y2Nlc3N9PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1ldHJpYyBkZWJ1ZyI+ZGVidWc6ICR7dGhpcy5tZXRyaWNzLmRlYnVnfTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXRyaWMgcmF0ZSI+JHt0aGlzLm1ldHJpY3MucmF0ZS50b0ZpeGVkKDEpfSBsb2dzL3NlYzwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuZG9tdG9vbHNJbnN0YW5jZSA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVUZXJtaW5hbCgpOwogICAgICBpZiAodGhpcy5sb2dFbnRyaWVzLmxlbmd0aCA+IDApIHsKICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMubG9nRW50cmllcykgewogICAgICAgICAgdGhpcy53cml0ZUxvZ0VudHJ5KGVudHJ5KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGluaXRpYWxpemVUZXJtaW5hbCgpIHsKICAgICAgY29uc3QgbGliTG9hZGVyID0gRGVlc1NlcnZpY2VMaWJMb2FkZXIuZ2V0SW5zdGFuY2UoKTsKICAgICAgY29uc3QgW3h0ZXJtQnVuZGxlLCBmaXRCdW5kbGUsIHNlYXJjaEJ1bmRsZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgbGliTG9hZGVyLmxvYWRYdGVybSgpLAogICAgICAgIGxpYkxvYWRlci5sb2FkWHRlcm1GaXRBZGRvbigpLAogICAgICAgIGxpYkxvYWRlci5sb2FkWHRlcm1TZWFyY2hBZGRvbigpCiAgICAgIF0pOwogICAgICBhd2FpdCB0aGlzLmluamVjdFh0ZXJtU3R5bGVzSW50b1NoYWRvdygpOwogICAgICB0aGlzLnRlcm1pbmFsID0gbmV3IHh0ZXJtQnVuZGxlLlRlcm1pbmFsKHsKICAgICAgICBjdXJzb3JCbGluazogZmFsc2UsCiAgICAgICAgZGlzYWJsZVN0ZGluOiB0cnVlLAogICAgICAgIGZvbnRTaXplOiAxMiwKICAgICAgICBmb250RmFtaWx5OiAiJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0xpYmVyYXRpb24gTW9ubycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZSIsCiAgICAgICAgdGhlbWU6IHRoaXMuZ2V0VGVybWluYWxUaGVtZSgpLAogICAgICAgIHNjcm9sbGJhY2s6IHRoaXMubWF4RW50cmllcywKICAgICAgICBjb252ZXJ0RW9sOiB0cnVlCiAgICAgIH0pOwogICAgICB0aGlzLmZpdEFkZG9uID0gbmV3IGZpdEJ1bmRsZS5GaXRBZGRvbigpOwogICAgICB0aGlzLnNlYXJjaEFkZG9uID0gbmV3IHNlYXJjaEJ1bmRsZS5TZWFyY2hBZGRvbigpOwogICAgICB0aGlzLnRlcm1pbmFsLmxvYWRBZGRvbih0aGlzLmZpdEFkZG9uKTsKICAgICAgdGhpcy50ZXJtaW5hbC5sb2FkQWRkb24odGhpcy5zZWFyY2hBZGRvbik7CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIudGVybWluYWwtY29udGFpbmVyIik7CiAgICAgIHRoaXMudGVybWluYWwub3Blbihjb250YWluZXIpOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICB0aGlzLmZpdEFkZG9uLmZpdCgpOwogICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHsKICAgICAgICB0aGlzLmZpdEFkZG9uPy5maXQoKTsKICAgICAgfSk7CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXIpOwogICAgICB0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb24gPSB0aGlzLmRvbXRvb2xzSW5zdGFuY2UudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoKCkgPT4gewogICAgICAgIGlmICh0aGlzLnRlcm1pbmFsKSB7CiAgICAgICAgICB0aGlzLnRlcm1pbmFsLm9wdGlvbnMudGhlbWUgPSB0aGlzLmdldFRlcm1pbmFsVGhlbWUoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLnJhdGVJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHRoaXMuY2FsY3VsYXRlUmF0ZSgpLCAxZTMpOwogICAgICB0aGlzLnRlcm1pbmFsUmVhZHkgPSB0cnVlOwogICAgfQogICAgZ2V0VGVybWluYWxUaGVtZSgpIHsKICAgICAgY29uc3QgaXNEYXJrID0gdGhpcy5kb210b29sc0luc3RhbmNlPy50aGVtZU1hbmFnZXI/LmlzRGFya01vZGUgPz8gdHJ1ZTsKICAgICAgcmV0dXJuIGlzRGFyayA/IHsKICAgICAgICBiYWNrZ3JvdW5kOiAiIzBhMGEwYSIsCiAgICAgICAgZm9yZWdyb3VuZDogIiNlMGUwZTAiLAogICAgICAgIGN1cnNvcjogIiNlMGUwZTAiLAogICAgICAgIHNlbGVjdGlvbkJhY2tncm91bmQ6ICIjNDA0MDQwIiwKICAgICAgICBibGFjazogIiMwMDAwMDAiLAogICAgICAgIHJlZDogIiNmZjU1NTUiLAogICAgICAgIGdyZWVuOiAiIzUwZmE3YiIsCiAgICAgICAgeWVsbG93OiAiI2YxZmE4YyIsCiAgICAgICAgYmx1ZTogIiM2MjcyYTQiLAogICAgICAgIG1hZ2VudGE6ICIjZmY3OWM2IiwKICAgICAgICBjeWFuOiAiIzhiZTlmZCIsCiAgICAgICAgd2hpdGU6ICIjZjhmOGYyIiwKICAgICAgICBicmlnaHRCbGFjazogIiM2MjcyYTQiLAogICAgICAgIGJyaWdodFJlZDogIiNmZjZlNmUiLAogICAgICAgIGJyaWdodEdyZWVuOiAiIzY5ZmY5NCIsCiAgICAgICAgYnJpZ2h0WWVsbG93OiAiI2ZmZmZhNSIsCiAgICAgICAgYnJpZ2h0Qmx1ZTogIiNkNmFjZmYiLAogICAgICAgIGJyaWdodE1hZ2VudGE6ICIjZmY5MmRmIiwKICAgICAgICBicmlnaHRDeWFuOiAiI2E0ZmZmZiIsCiAgICAgICAgYnJpZ2h0V2hpdGU6ICIjZmZmZmZmIgogICAgICB9IDogewogICAgICAgIGJhY2tncm91bmQ6ICIjZmZmZmZmIiwKICAgICAgICBmb3JlZ3JvdW5kOiAiIzMzMzMzMyIsCiAgICAgICAgY3Vyc29yOiAiIzMzMzMzMyIsCiAgICAgICAgc2VsZWN0aW9uQmFja2dyb3VuZDogIiNhZGQ2ZmYiLAogICAgICAgIGJsYWNrOiAiIzAwMDAwMCIsCiAgICAgICAgcmVkOiAiI2NkMzEzMSIsCiAgICAgICAgZ3JlZW46ICIjMDBiYzAwIiwKICAgICAgICB5ZWxsb3c6ICIjOTQ5ODAwIiwKICAgICAgICBibHVlOiAiIzA0NTFhNSIsCiAgICAgICAgbWFnZW50YTogIiNiYzA1YmMiLAogICAgICAgIGN5YW46ICIjMDU5OGJjIiwKICAgICAgICB3aGl0ZTogIiM1NTU1NTUiLAogICAgICAgIGJyaWdodEJsYWNrOiAiIzY2NjY2NiIsCiAgICAgICAgYnJpZ2h0UmVkOiAiI2NkMzEzMSIsCiAgICAgICAgYnJpZ2h0R3JlZW46ICIjMTRjZTE0IiwKICAgICAgICBicmlnaHRZZWxsb3c6ICIjYjViYTAwIiwKICAgICAgICBicmlnaHRCbHVlOiAiIzA0NTFhNSIsCiAgICAgICAgYnJpZ2h0TWFnZW50YTogIiNiYzA1YmMiLAogICAgICAgIGJyaWdodEN5YW46ICIjMDU5OGJjIiwKICAgICAgICBicmlnaHRXaGl0ZTogIiNhNWE1YTUiCiAgICAgIH07CiAgICB9CiAgICAvKioKICAgICAqIEluamVjdCB4dGVybSBDU1Mgc3R5bGVzIGludG8gc2hhZG93IHJvb3QKICAgICAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc2hhZG93IERPTSBkb2Vzbid0IGluaGVyaXQgc3R5bGVzIGZyb20gZG9jdW1lbnQuaGVhZAogICAgICovCiAgICBhc3luYyBpbmplY3RYdGVybVN0eWxlc0ludG9TaGFkb3coKSB7CiAgICAgIGNvbnN0IHN0eWxlSWQgPSAieHRlcm0tc2hhZG93LXN0eWxlcyI7CiAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgY3NzVXJsID0gYCR7Q0ROX0JBU0V9L3h0ZXJtQCR7Q0ROX1ZFUlNJT05TLnh0ZXJtfS9jc3MveHRlcm0uY3NzYDsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChjc3NVcmwpOwogICAgICBjb25zdCBjc3NUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgIHN0eWxlLmlkID0gc3R5bGVJZDsKICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBjc3NUZXh0OwogICAgICB0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoc3R5bGUpOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBTdHJ1Y3R1cmVkIExvZyBNZXRob2RzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogQWRkIGEgc2luZ2xlIHN0cnVjdHVyZWQgbG9nIGVudHJ5CiAgICAgKi8KICAgIGFkZExvZyhsZXZlbCwgbWVzc2FnZTIsIHNvdXJjZSkgewogICAgICBjb25zdCBlbnRyeSA9IHsKICAgICAgICB0aW1lc3RhbXA6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSwKICAgICAgICBsZXZlbCwKICAgICAgICBtZXNzYWdlOiBtZXNzYWdlMiwKICAgICAgICBzb3VyY2UKICAgICAgfTsKICAgICAgdGhpcy5sb2dCdWZmZXIucHVzaChlbnRyeSk7CiAgICAgIGlmICh0aGlzLmxvZ0J1ZmZlci5sZW5ndGggPiB0aGlzLm1heEVudHJpZXMpIHsKICAgICAgICB0aGlzLmxvZ0J1ZmZlci5zaGlmdCgpOwogICAgICB9CiAgICAgIGlmICghdGhpcy5maWx0ZXJNb2RlIHx8ICF0aGlzLnNlYXJjaFF1ZXJ5KSB7CiAgICAgICAgdGhpcy53cml0ZUxvZ0VudHJ5KGVudHJ5KTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmVudHJ5TWF0Y2hlc0ZpbHRlcihlbnRyeSkpIHsKICAgICAgICB0aGlzLnRyYWlsaW5nSGlkZGVuQ291bnQgPSAwOwogICAgICAgIHRoaXMud3JpdGVMb2dFbnRyeShlbnRyeSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy51cGRhdGVUcmFpbGluZ1BsYWNlaG9sZGVyKCk7CiAgICAgIH0KICAgICAgdGhpcy51cGRhdGVNZXRyaWNzKGVudHJ5LmxldmVsKTsKICAgIH0KICAgIC8qKgogICAgICogQWRkIG11bHRpcGxlIHN0cnVjdHVyZWQgbG9nIGVudHJpZXMKICAgICAqLwogICAgdXBkYXRlTG9nKGVudHJpZXMpIHsKICAgICAgaWYgKCFlbnRyaWVzKQogICAgICAgIHJldHVybjsKICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICAgICAgdGhpcy5sb2dCdWZmZXIucHVzaChlbnRyeSk7CiAgICAgICAgaWYgKHRoaXMubG9nQnVmZmVyLmxlbmd0aCA+IHRoaXMubWF4RW50cmllcykgewogICAgICAgICAgdGhpcy5sb2dCdWZmZXIuc2hpZnQoKTsKICAgICAgICB9CiAgICAgICAgaWYgKCF0aGlzLmZpbHRlck1vZGUgfHwgIXRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICAgIHRoaXMud3JpdGVMb2dFbnRyeShlbnRyeSk7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVudHJ5TWF0Y2hlc0ZpbHRlcihlbnRyeSkpIHsKICAgICAgICAgIHRoaXMudHJhaWxpbmdIaWRkZW5Db3VudCA9IDA7CiAgICAgICAgICB0aGlzLndyaXRlTG9nRW50cnkoZW50cnkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnVwZGF0ZVRyYWlsaW5nUGxhY2Vob2xkZXIoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy51cGRhdGVNZXRyaWNzKGVudHJ5LmxldmVsKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBVcGRhdGUgdGhlIHRyYWlsaW5nIGhpZGRlbiBwbGFjZWhvbGRlciBpbiByZWFsLXRpbWUKICAgICAqIENsZWFycyB0aGUgbGFzdCBsaW5lIGlmIGEgcGxhY2Vob2xkZXIgYWxyZWFkeSBleGlzdHMsIHRoZW4gd3JpdGVzIHVwZGF0ZWQgY291bnQKICAgICAqLwogICAgdXBkYXRlVHJhaWxpbmdQbGFjZWhvbGRlcigpIHsKICAgICAgaWYgKCF0aGlzLnRlcm1pbmFsKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKHRoaXMudHJhaWxpbmdIaWRkZW5Db3VudCA+IDApIHsKICAgICAgICB0aGlzLnRlcm1pbmFsLndyaXRlKCJceDFCWzFBXHgxQlsyS1xyIik7CiAgICAgIH0KICAgICAgdGhpcy50cmFpbGluZ0hpZGRlbkNvdW50Kys7CiAgICAgIHRoaXMud3JpdGVIaWRkZW5QbGFjZWhvbGRlcih0aGlzLnRyYWlsaW5nSGlkZGVuQ291bnQpOwogICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC5zY3JvbGxUb0JvdHRvbSgpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIENoZWNrIGlmIGEgbG9nIGVudHJ5IG1hdGNoZXMgdGhlIGN1cnJlbnQgZmlsdGVyCiAgICAgKi8KICAgIGVudHJ5TWF0Y2hlc0ZpbHRlcihlbnRyeSkgewogICAgICBpZiAoIXRoaXMuc2VhcmNoUXVlcnkpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5zZWFyY2hRdWVyeS50b0xvd2VyQ2FzZSgpOwogICAgICByZXR1cm4gZW50cnkubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSB8fCBlbnRyeS5sZXZlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSB8fCAoZW50cnkuc291cmNlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSA/PyBmYWxzZSk7CiAgICB9CiAgICB3cml0ZUxvZ0VudHJ5KGVudHJ5KSB7CiAgICAgIGlmICghdGhpcy50ZXJtaW5hbCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0TG9nRW50cnkoZW50cnkpOwogICAgICB0aGlzLnRlcm1pbmFsLndyaXRlbG4oZm9ybWF0dGVkKTsKICAgICAgaWYgKHRoaXMuYXV0b1Njcm9sbCkgewogICAgICAgIHRoaXMudGVybWluYWwuc2Nyb2xsVG9Cb3R0b20oKTsKICAgICAgfQogICAgfQogICAgZm9ybWF0TG9nRW50cnkoZW50cnkpIHsKICAgICAgY29uc3QgdGltZXN0YW1wMiA9IHRoaXMuZm9ybWF0VGltZXN0YW1wKGVudHJ5LnRpbWVzdGFtcCk7CiAgICAgIGNvbnN0IGxldmVsQ29sb3JzID0gewogICAgICAgIGRlYnVnOiAiXHgxQls5MG0iLAogICAgICAgIC8vIEdyYXkKICAgICAgICBpbmZvOiAiXHgxQlszNm0iLAogICAgICAgIC8vIEN5YW4KICAgICAgICB3YXJuOiAiXHgxQlszM20iLAogICAgICAgIC8vIFllbGxvdwogICAgICAgIGVycm9yOiAiXHgxQlszMW0iLAogICAgICAgIC8vIFJlZAogICAgICAgIHN1Y2Nlc3M6ICJceDFCWzMybSIKICAgICAgICAvLyBHcmVlbgogICAgICB9OwogICAgICBjb25zdCByZXNldCA9ICJceDFCWzBtIjsKICAgICAgY29uc3QgZGltID0gIlx4MUJbMm0iOwogICAgICBjb25zdCBsZXZlbFN0ciA9IGAke2xldmVsQ29sb3JzW2VudHJ5LmxldmVsXX1bJHtlbnRyeS5sZXZlbC50b1VwcGVyQ2FzZSgpLnBhZEVuZCg3KX1dJHtyZXNldH1gOwogICAgICBjb25zdCBzb3VyY2VTdHIgPSBlbnRyeS5zb3VyY2UgPyBgJHtkaW19WyR7ZW50cnkuc291cmNlfV0ke3Jlc2V0fSBgIDogIiI7CiAgICAgIGNvbnN0IG1lc3NhZ2VTdHIgPSB0aGlzLmFwcGx5SGlnaGxpZ2h0cyhlbnRyeS5tZXNzYWdlKTsKICAgICAgcmV0dXJuIGAke2RpbX0ke3RpbWVzdGFtcDJ9JHtyZXNldH0gJHtsZXZlbFN0cn0gJHtzb3VyY2VTdHJ9JHttZXNzYWdlU3RyfWA7CiAgICB9CiAgICBmb3JtYXRUaW1lc3RhbXAoaXNvU3RyaW5nKSB7CiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpc29TdHJpbmcpOwogICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoImVuLVVTIiwgewogICAgICAgIGhvdXIxMjogZmFsc2UsCiAgICAgICAgaG91cjogIjItZGlnaXQiLAogICAgICAgIG1pbnV0ZTogIjItZGlnaXQiLAogICAgICAgIHNlY29uZDogIjItZGlnaXQiLAogICAgICAgIGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDMKICAgICAgfSk7CiAgICB9CiAgICBhcHBseUhpZ2hsaWdodHModGV4dDkpIHsKICAgICAgY29uc3Qga2V5d29yZHMgPSBbLi4udGhpcy5oaWdobGlnaHRLZXl3b3Jkc107CiAgICAgIGlmICh0aGlzLmZpbHRlck1vZGUgJiYgdGhpcy5zZWFyY2hRdWVyeSkgewogICAgICAgIGtleXdvcmRzLnB1c2godGhpcy5zZWFyY2hRdWVyeSk7CiAgICAgIH0KICAgICAgaWYgKGtleXdvcmRzLmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm4gdGV4dDk7CiAgICAgIGxldCByZXN1bHQgPSB0ZXh0OTsKICAgICAgZm9yIChjb25zdCBrZXl3b3JkIG9mIGtleXdvcmRzKSB7CiAgICAgICAgY29uc3QgZXNjYXBlZCA9IGtleXdvcmQucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csICJcXCQmIik7CiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGAoJHtlc2NhcGVkfSlgLCAiZ2kiKTsKICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShyZWdleCwgIlx4MUJbNDNtXHgxQlszMG0kMVx4MUJbMG0iKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBSYXcgTG9nIE1ldGhvZHMKICAgIC8vID09PT09PT09PT09PT09PT09PT09PQogICAgLyoqCiAgICAgKiBXcml0ZSByYXcgZGF0YSB0byB0aGUgdGVybWluYWwgKGZvciBEb2NrZXIgbG9ncywgZXRjLikKICAgICAqLwogICAgd3JpdGVSYXcoZGF0YSkgewogICAgICBpZiAoIXRoaXMudGVybWluYWwpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnRlcm1pbmFsLndyaXRlKGRhdGEpOwogICAgICB0aGlzLnJlY29yZExvZ0V2ZW50KCk7CiAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGwpIHsKICAgICAgICB0aGlzLnRlcm1pbmFsLnNjcm9sbFRvQm90dG9tKCk7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogV3JpdGUgYSByYXcgbGluZSB0byB0aGUgdGVybWluYWwKICAgICAqLwogICAgd3JpdGVsblJhdyhsaW5lKSB7CiAgICAgIGlmICghdGhpcy50ZXJtaW5hbCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMudGVybWluYWwud3JpdGVsbihsaW5lKTsKICAgICAgdGhpcy5yZWNvcmRMb2dFdmVudCgpOwogICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC5zY3JvbGxUb0JvdHRvbSgpOwogICAgICB9CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFNlYXJjaCBNZXRob2RzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIGhhbmRsZVNlYXJjaElucHV0KGUxMSkgewogICAgICBjb25zdCBpbnB1dCA9IGUxMS50YXJnZXQ7CiAgICAgIGNvbnN0IG5ld1F1ZXJ5ID0gaW5wdXQudmFsdWU7CiAgICAgIGNvbnN0IHF1ZXJ5Q2hhbmdlZCA9IHRoaXMuc2VhcmNoUXVlcnkgIT09IG5ld1F1ZXJ5OwogICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gbmV3UXVlcnk7CiAgICAgIGlmICh0aGlzLmZpbHRlck1vZGUgJiYgcXVlcnlDaGFuZ2VkKSB7CiAgICAgICAgdGhpcy5yZVJlbmRlckZpbHRlcmVkTG9ncygpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICB0aGlzLnNlYXJjaEFkZG9uPy5maW5kTmV4dCh0aGlzLnNlYXJjaFF1ZXJ5KTsKICAgICAgfQogICAgfQogICAgaGFuZGxlU2VhcmNoS2V5ZG93bihlMTEpIHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICBpZiAoZTExLnNoaWZ0S2V5KSB7CiAgICAgICAgICB0aGlzLnNlYXJjaFByZXZpb3VzKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2VhcmNoTmV4dCgpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChlMTEua2V5ID09PSAiRXNjYXBlIikgewogICAgICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAiIjsKICAgICAgICBlMTEudGFyZ2V0LnZhbHVlID0gIiI7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogU2VhcmNoIGZvciBhIHF1ZXJ5IGluIHRoZSB0ZXJtaW5hbAogICAgICovCiAgICBzZWFyY2gocXVlcnkpIHsKICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9IHF1ZXJ5OwogICAgICB0aGlzLnNlYXJjaEFkZG9uPy5maW5kTmV4dChxdWVyeSk7CiAgICB9CiAgICAvKioKICAgICAqIEZpbmQgbmV4dCBzZWFyY2ggbWF0Y2gKICAgICAqLwogICAgc2VhcmNoTmV4dCgpIHsKICAgICAgaWYgKHRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICB0aGlzLnNlYXJjaEFkZG9uPy5maW5kTmV4dCh0aGlzLnNlYXJjaFF1ZXJ5KTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBGaW5kIHByZXZpb3VzIHNlYXJjaCBtYXRjaAogICAgICovCiAgICBzZWFyY2hQcmV2aW91cygpIHsKICAgICAgaWYgKHRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICB0aGlzLnNlYXJjaEFkZG9uPy5maW5kUHJldmlvdXModGhpcy5zZWFyY2hRdWVyeSk7CiAgICAgIH0KICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PQogICAgLy8gQ29udHJvbCBNZXRob2RzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIHRvZ2dsZUF1dG9TY3JvbGwoKSB7CiAgICAgIHRoaXMuYXV0b1Njcm9sbCA9ICF0aGlzLmF1dG9TY3JvbGw7CiAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGwgJiYgdGhpcy50ZXJtaW5hbCkgewogICAgICAgIHRoaXMudGVybWluYWwuc2Nyb2xsVG9Cb3R0b20oKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBUb2dnbGUgYmV0d2VlbiBmaWx0ZXIgbW9kZSBhbmQgaGlnaGxpZ2h0IG1vZGUKICAgICAqLwogICAgdG9nZ2xlRmlsdGVyTW9kZSgpIHsKICAgICAgdGhpcy5maWx0ZXJNb2RlID0gIXRoaXMuZmlsdGVyTW9kZTsKICAgICAgdGhpcy5yZVJlbmRlckZpbHRlcmVkTG9ncygpOwogICAgfQogICAgLyoqCiAgICAgKiBSZS1yZW5kZXIgbG9ncyBiYXNlZCBvbiBjdXJyZW50IGZpbHRlciBzdGF0ZQogICAgICogSW4gZmlsdGVyIG1vZGU6IHNob3cgbWF0Y2hpbmcgbG9ncyB3aXRoIHBsYWNlaG9sZGVycyBmb3IgaGlkZGVuIGVudHJpZXMKICAgICAqIEluIGhpZ2hsaWdodCBtb2RlOiBzaG93IGFsbCBsb2dzCiAgICAgKi8KICAgIHJlUmVuZGVyRmlsdGVyZWRMb2dzKCkgewogICAgICBpZiAoIXRoaXMudGVybWluYWwpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnRlcm1pbmFsLmNsZWFyKCk7CiAgICAgIHRoaXMudHJhaWxpbmdIaWRkZW5Db3VudCA9IDA7CiAgICAgIGlmICghdGhpcy5maWx0ZXJNb2RlIHx8ICF0aGlzLnNlYXJjaFF1ZXJ5KSB7CiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmxvZ0J1ZmZlcikgewogICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRMb2dFbnRyeShlbnRyeSk7CiAgICAgICAgICB0aGlzLnRlcm1pbmFsLndyaXRlbG4oZm9ybWF0dGVkKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGV0IGhpZGRlbkNvdW50ID0gMDsKICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMubG9nQnVmZmVyKSB7CiAgICAgICAgICBpZiAodGhpcy5lbnRyeU1hdGNoZXNGaWx0ZXIoZW50cnkpKSB7CiAgICAgICAgICAgIGlmIChoaWRkZW5Db3VudCA+IDApIHsKICAgICAgICAgICAgICB0aGlzLndyaXRlSGlkZGVuUGxhY2Vob2xkZXIoaGlkZGVuQ291bnQpOwogICAgICAgICAgICAgIGhpZGRlbkNvdW50ID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdExvZ0VudHJ5KGVudHJ5KTsKICAgICAgICAgICAgdGhpcy50ZXJtaW5hbC53cml0ZWxuKGZvcm1hdHRlZCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBoaWRkZW5Db3VudCsrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaGlkZGVuQ291bnQgPiAwKSB7CiAgICAgICAgICB0aGlzLndyaXRlSGlkZGVuUGxhY2Vob2xkZXIoaGlkZGVuQ291bnQpOwogICAgICAgICAgdGhpcy50cmFpbGluZ0hpZGRlbkNvdW50ID0gaGlkZGVuQ291bnQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGwpIHsKICAgICAgICB0aGlzLnRlcm1pbmFsLnNjcm9sbFRvQm90dG9tKCk7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogV3JpdGUgYSBwbGFjZWhvbGRlciBsaW5lIHNob3dpbmcgaG93IG1hbnkgbG9nIGVudHJpZXMgYXJlIGhpZGRlbiBieSBmaWx0ZXIKICAgICAqLwogICAgd3JpdGVIaWRkZW5QbGFjZWhvbGRlcihjb3VudDIpIHsKICAgICAgY29uc3QgZGltID0gIlx4MUJbMm0iOwogICAgICBjb25zdCByZXNldCA9ICJceDFCWzBtIjsKICAgICAgY29uc3QgdGV4dDkgPSBjb3VudDIgPT09IDEgPyBgWzEgbG9nIGxpbmUgaGlkZGVuIGJ5IGZpbHRlciAuLi5dYCA6IGBbJHtjb3VudDJ9IGxvZyBsaW5lcyBoaWRkZW4gYnkgZmlsdGVyIC4uLl1gOwogICAgICB0aGlzLnRlcm1pbmFsPy53cml0ZWxuKGAke2RpbX0ke3RleHQ5fSR7cmVzZXR9YCk7CiAgICB9CiAgICAvKioKICAgICAqIENsZWFyIGFsbCBsb2dzIGFuZCByZXNldCBtZXRyaWNzCiAgICAgKi8KICAgIGNsZWFyTG9ncygpIHsKICAgICAgdGhpcy50ZXJtaW5hbD8uY2xlYXIoKTsKICAgICAgdGhpcy5sb2dCdWZmZXIgPSBbXTsKICAgICAgdGhpcy50cmFpbGluZ0hpZGRlbkNvdW50ID0gMDsKICAgICAgdGhpcy5yZXNldE1ldHJpY3MoKTsKICAgIH0KICAgIC8qKgogICAgICogU2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIGxvZwogICAgICovCiAgICBzY3JvbGxUb0JvdHRvbSgpIHsKICAgICAgdGhpcy50ZXJtaW5hbD8uc2Nyb2xsVG9Cb3R0b20oKTsKICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PQogICAgLy8gTWV0cmljcyBNZXRob2RzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIHVwZGF0ZU1ldHJpY3MobGV2ZWwpIHsKICAgICAgdGhpcy5tZXRyaWNzID0gewogICAgICAgIC4uLnRoaXMubWV0cmljcywKICAgICAgICBbbGV2ZWxdOiB0aGlzLm1ldHJpY3NbbGV2ZWxdICsgMSwKICAgICAgICB0b3RhbDogdGhpcy5tZXRyaWNzLnRvdGFsICsgMQogICAgICB9OwogICAgICB0aGlzLnJlY29yZExvZ0V2ZW50KCk7CiAgICB9CiAgICByZWNvcmRMb2dFdmVudCgpIHsKICAgICAgdGhpcy5yYXRlQnVmZmVyLnB1c2goRGF0ZS5ub3coKSk7CiAgICB9CiAgICBjYWxjdWxhdGVSYXRlKCkgewogICAgICBjb25zdCBub3cyID0gRGF0ZS5ub3coKTsKICAgICAgdGhpcy5yYXRlQnVmZmVyID0gdGhpcy5yYXRlQnVmZmVyLmZpbHRlcigodDkpID0+IG5vdzIgLSB0OSA8IDFlNCk7CiAgICAgIGNvbnN0IHJhdGUgPSB0aGlzLnJhdGVCdWZmZXIubGVuZ3RoIC8gMTA7CiAgICAgIGlmIChyYXRlICE9PSB0aGlzLm1ldHJpY3MucmF0ZSkgewogICAgICAgIHRoaXMubWV0cmljcyA9IHsgLi4udGhpcy5tZXRyaWNzLCByYXRlIH07CiAgICAgIH0KICAgIH0KICAgIHJlc2V0TWV0cmljcygpIHsKICAgICAgdGhpcy5tZXRyaWNzID0geyBkZWJ1ZzogMCwgaW5mbzogMCwgd2FybjogMCwgZXJyb3I6IDAsIHN1Y2Nlc3M6IDAsIHRvdGFsOiAwLCByYXRlOiAwIH07CiAgICAgIHRoaXMucmF0ZUJ1ZmZlciA9IFtdOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBMaWZlY3ljbGUKICAgIC8vID09PT09PT09PT09PT09PT09PT09PQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKSB7CiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbikgewogICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICB9CiAgICAgIGlmICh0aGlzLnJhdGVJbnRlcnZhbCkgewogICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5yYXRlSW50ZXJ2YWwpOwogICAgICB9CiAgICAgIGlmICh0aGlzLnRlcm1pbmFsKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC5kaXNwb3NlKCk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDcoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNDaGFydExvZzIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtZGF0YXZpZXctY29kZWJveC9kZWVzLWRhdGF2aWV3LWNvZGVib3guZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMzNCA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vV3JhcHBlciB7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICBwYWRkaW5nOiA0OHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y4ZjlmYSIsICIjMGEwYTBhIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDMycHg7CiAgICB9CiAgICAKICAgIC5zZWN0aW9uIHsKICAgICAgbWF4LXdpZHRoOiA5MDBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgfQogICAgCiAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICB9CiAgICAKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW9XcmFwcGVyIj4KICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5UeXBlU2NyaXB0IENvZGUgRXhhbXBsZTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5BIGNvbXByZWhlbnNpdmUgVHlwZVNjcmlwdCBjb2RlIGV4YW1wbGUgd2l0aCB2YXJpb3VzIHN5bnRheCBoaWdobGlnaHRpbmcuPC9kaXY+CiAgICAgIDxkZWVzLWRhdGF2aWV3LWNvZGVib3ggcHJvZ2xhbmc9InR5cGVzY3JpcHQiPgppbnRlcmZhY2UgVXNlciB7CiAgaWQ6IG51bWJlcjsKICBuYW1lOiBzdHJpbmc7CiAgZW1haWw6IHN0cmluZzsKICBpc0FjdGl2ZTogYm9vbGVhbjsKfQoKY2xhc3MgVXNlclNlcnZpY2UgewogIHByaXZhdGUgdXNlcnM6IFVzZXJbXSA9IFtdOwogIAogIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpVXJsOiBzdHJpbmcpIHsKICAgIGNvbnNvbGUubG9nKCdVc2VyU2VydmljZSBpbml0aWFsaXplZCcpOwogIH0KICAKICBhc3luYyBnZXRVc2VycygpOiBQcm9taXNlPFVzZXJbXT4gewogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLmFwaVVybCk7CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7CiAgICAgIHJldHVybiBkYXRhLnVzZXJzOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHVzZXJzOicsIGVycm9yKTsKICAgICAgcmV0dXJuIFtdOwogICAgfQogIH0KICAKICBhZGRVc2VyKHVzZXI6IFVzZXIpOiB2b2lkIHsKICAgIHRoaXMudXNlcnMucHVzaCh1c2VyKTsKICB9Cn0KCi8vIFVzYWdlIGV4YW1wbGUKY29uc3Qgc2VydmljZSA9IG5ldyBVc2VyU2VydmljZSgnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vdXNlcnMnKTsKY29uc3QgdXNlcnMgPSBhd2FpdCBzZXJ2aWNlLmdldFVzZXJzKCk7CmNvbnNvbGUubG9nKCdGb3VuZCB1c2VyczonLCB1c2Vycy5sZW5ndGgpOwogICAgICA8L2RlZXMtZGF0YXZpZXctY29kZWJveD4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+SmF2YVNjcmlwdCBFeGFtcGxlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPk1vZGVybiBKYXZhU2NyaXB0IHdpdGggRVM2KyBmZWF0dXJlcy48L2Rpdj4KICAgICAgPGRlZXMtZGF0YXZpZXctY29kZWJveCBwcm9nbGFuZz0iamF2YXNjcmlwdCI+Ci8vIEFycmF5IG1hbmlwdWxhdGlvbiBleGFtcGxlcwpjb25zdCBudW1iZXJzID0gWzEsIDIsIDMsIDQsIDVdOwpjb25zdCBkb3VibGVkID0gbnVtYmVycy5tYXAobiA9PiBuICogMik7CmNvbnN0IGZpbHRlcmVkID0gbnVtYmVycy5maWx0ZXIobiA9PiBuID4gMyk7CgovLyBPYmplY3QgZGVzdHJ1Y3R1cmluZwpjb25zdCB1c2VyID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAsIGNpdHk6ICdOZXcgWW9yaycgfTsKY29uc3QgeyBuYW1lLCBhZ2UgfSA9IHVzZXI7CgovLyBQcm9taXNlIGhhbmRsaW5nCmNvbnN0IGZldGNoRGF0YSA9IGFzeW5jICh1cmwpID0+IHsKICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7CiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTsKfTsKCi8vIE1vZGVybiBzeW50YXgKY29uc3QgZ3JlZXQgPSAobmFtZSA9ICdXb3JsZCcpID0+IFxgSGVsbG8sIFwke25hbWV9IVxgOwpjb25zb2xlLmxvZyhncmVldCgnU2hhZENOJykpOwogICAgICA8L2RlZXMtZGF0YXZpZXctY29kZWJveD4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UHl0aG9uIEV4YW1wbGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+UHl0aG9uIGNvZGUgd2l0aCBjbGFzc2VzIGFuZCB0eXBlIGhpbnRzLjwvZGl2PgogICAgICA8ZGVlcy1kYXRhdmlldy1jb2RlYm94IHByb2dsYW5nPSJweXRob24iPgpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgT3B0aW9uYWwKaW1wb3J0IGFzeW5jaW8KCmNsYXNzIERhdGFQcm9jZXNzb3I6CiAgICAiIiJBIHNpbXBsZSBkYXRhIHByb2Nlc3NvciBjbGFzcyIiIgogICAgCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZTogc3RyKToKICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgc2VsZi5kYXRhOiBMaXN0W2RpY3RdID0gW10KICAgIAogICAgYXN5bmMgZGVmIHByb2Nlc3NfZGF0YShzZWxmLCBpdGVtczogTGlzdFtkaWN0XSkgLT4gTGlzdFtkaWN0XToKICAgICAgICAiIiJQcm9jZXNzIGRhdGEgaXRlbXMgYXN5bmNocm9ub3VzbHkiIiIKICAgICAgICByZXN1bHRzID0gW10KICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKICAgICAgICAgICAgIyBTaW11bGF0ZSBhc3luYyBwcm9jZXNzaW5nCiAgICAgICAgICAgIGF3YWl0IGFzeW5jaW8uc2xlZXAoMC4xKQogICAgICAgICAgICByZXN1bHRzLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAnaWQnOiBpdGVtLmdldCgnaWQnKSwKICAgICAgICAgICAgICAgICdwcm9jZXNzZWQnOiBUcnVlLAogICAgICAgICAgICAgICAgJ3Byb2Nlc3Nvcic6IHNlbGYubmFtZQogICAgICAgICAgICB9KQogICAgICAgIHJldHVybiByZXN1bHRzCiAgICAKICAgIGRlZiBnZXRfc3VtbWFyeShzZWxmKSAtPiBkaWN0OgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICdwcm9jZXNzb3InOiBzZWxmLm5hbWUsCiAgICAgICAgICAgICdpdGVtc19wcm9jZXNzZWQnOiBsZW4oc2VsZi5kYXRhKQogICAgICAgIH0KCiMgVXNhZ2UKcHJvY2Vzc29yID0gRGF0YVByb2Nlc3NvcigiTWFpbiIpCmRhdGEgPSBhd2FpdCBwcm9jZXNzb3IucHJvY2Vzc19kYXRhKFt7J2lkJzogMX0sIHsnaWQnOiAyfV0pCiAgICAgIDwvZGVlcy1kYXRhdmlldy1jb2RlYm94PgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5DU1MgRXhhbXBsZTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5Nb2Rlcm4gQ1NTIHdpdGggY3VzdG9tIHByb3BlcnRpZXMgYW5kIGFuaW1hdGlvbnMuIE5vdGUgdGhlIHNob3J0ZXIgbGFuZ3VhZ2UgbGFiZWwuPC9kaXY+CiAgICAgIDxkZWVzLWRhdGF2aWV3LWNvZGVib3ggcHJvZ2xhbmc9ImNzcyI+Ci8qIE1vZGVybiBDU1Mgd2l0aCBjdXN0b20gcHJvcGVydGllcyAqLwo6cm9vdCB7CiAgLS1wcmltYXJ5LWNvbG9yOiAjM2I4MmY2OwogIC0tc2Vjb25kYXJ5LWNvbG9yOiAjMTBiOTgxOwogIC0tYmFja2dyb3VuZDogI2ZmZmZmZjsKICAtLXRleHQtY29sb3I6ICMwOTA5MGI7CiAgLS1ib3JkZXItcmFkaXVzOiA2cHg7Cn0KCi5jYXJkIHsKICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kKTsKICBib3JkZXI6IDFweCBzb2xpZCAjZTVlN2ViOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpOwogIHBhZGRpbmc6IDI0cHg7CiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwp9CgouY2FyZDpob3ZlciB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOwogIGJveC1zaGFkb3c6IDAgNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMSk7Cn0KCkBrZXlmcmFtZXMgZmFkZUluIHsKICBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpOyB9CiAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH0KfQogICAgICA8L2RlZXMtZGF0YXZpZXctY29kZWJveD4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+SlNPTiBFeGFtcGxlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkpTT04gY29uZmlndXJhdGlvbiB3aXRoIHByb3BlciBmb3JtYXR0aW5nLjwvZGl2PgogICAgICA8ZGVlcy1kYXRhdmlldy1jb2RlYm94IHByb2dsYW5nPSJqc29uIj4KewogICJuYW1lIjogIkBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZyIsCiAgInZlcnNpb24iOiAiMS4xMC43IiwKICAiZGVzY3JpcHRpb24iOiAiQSBjb21wcmVoZW5zaXZlIGNhdGFsb2cgb2Ygd2ViIGNvbXBvbmVudHMiLAogICJtYWluIjogImRpc3RfdHNfd2ViL2luZGV4LmpzIiwKICAidHlwZSI6ICJtb2R1bGUiLAogICJzY3JpcHRzIjogewogICAgImJ1aWxkIjogInRzYnVpbGQgdHNmb2xkZXJzIC0tYWxsb3dpbXBsaWNpdGFueSAmJiB0c2J1bmRsZSBlbGVtZW50IC0tcHJvZHVjdGlvbiIsCiAgICAid2F0Y2giOiAidHN3YXRjaCBlbGVtZW50IiwKICAgICJ0ZXN0IjogInRzdGVzdCB0ZXN0LyAtLXdlYiAtLXZlcmJvc2UiCiAgfSwKICAiZGVwZW5kZW5jaWVzIjogewogICAgIkBkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCI6ICJeMi4wLjQ1IiwKICAgICJoaWdobGlnaHQuanMiOiAiXjExLjkuMCIKICB9Cn0KICAgICAgPC9kZWVzLWRhdGF2aWV3LWNvZGVib3g+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1kYXRhdmlldy9kZWVzLWRhdGF2aWV3LWNvZGVib3gvZGVlcy1kYXRhdmlldy1jb2RlYm94LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czExKCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfc2VydmljZXMoKTsKdmFyIF9fZXNEZWNvcmF0ZTQ3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0OCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0RhdGF2aWV3Q29kZWJveCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtZGF0YXZpZXctY29kZWJveCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3Byb2dMYW5nX2RlY29yYXRvcnM7CiAgbGV0IF9wcm9nTGFuZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Byb2dMYW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2RlVG9EaXNwbGF5X2RlY29yYXRvcnM7CiAgbGV0IF9jb2RlVG9EaXNwbGF5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29kZVRvRGlzcGxheV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzRGF0YXZpZXdDb2RlYm94MiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3Byb2dMYW5nX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9jb2RlVG9EaXNwbGF5X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlNDcodGhpcywgbnVsbCwgX3Byb2dMYW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInByb2dMYW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwcm9nTGFuZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wcm9nTGFuZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucHJvZ0xhbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcHJvZ0xhbmdfaW5pdGlhbGl6ZXJzLCBfcHJvZ0xhbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nyh0aGlzLCBudWxsLCBfY29kZVRvRGlzcGxheV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2RlVG9EaXNwbGF5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb2RlVG9EaXNwbGF5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvZGVUb0Rpc3BsYXksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvZGVUb0Rpc3BsYXkgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29kZVRvRGlzcGxheV9pbml0aWFsaXplcnMsIF9jb2RlVG9EaXNwbGF5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzRGF0YXZpZXdDb2RlYm94MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzQ7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkRhdGEgVmlldyI7CiAgICAjcHJvZ0xhbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX3Byb2dMYW5nX2luaXRpYWxpemVycywgInR5cGVzY3JpcHQiKTsKICAgIGdldCBwcm9nTGFuZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Byb2dMYW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcHJvZ0xhbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Byb2dMYW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29kZVRvRGlzcGxheV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX3Byb2dMYW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0OCh0aGlzLCBfY29kZVRvRGlzcGxheV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgY29kZVRvRGlzcGxheSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvZGVUb0Rpc3BsYXlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb2RlVG9EaXNwbGF5KHZhbHVlMikgewogICAgICB0aGlzLiNjb2RlVG9EaXNwbGF5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke2RvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnN0eWxlc30KICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgfQogICAgICAgIC5tYWluYm94IHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzA5MDkwYiIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAuYXBwYmFyIHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzE4MTgxYiIpfTsKICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLmFwcGJhciAuZmlsZU5hbWUgewogICAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLmJvdHRvbUJhciB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxODE4MWIiKX07CiAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAuc3BhY2VzTGFiZWwgewogICAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICAubGFuZ3VhZ2VMYWJlbCB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIil9OwogICAgICAgICAgcGFkZGluZzogMHB4IDE2cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1rZXl3b3JkIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZjg3MTcxIil9OwogICAgICAgIH0KCiAgICAgICAgLmNvZGVncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDUwcHggYXV0bzsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAubGluZU51bWJlcnMgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM1MjUyNWIiKX07CiAgICAgICAgICBwYWRkaW5nOiAyNHB4IDE2cHggMHB4IDBweDsKICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICB9CgogICAgICAgIC5saW5lQ291bnRlcjpsYXN0LWNoaWxkIHsKICAgICAgICAgIG9wYWNpdHk6IDUwJTsKICAgICAgICB9CgogICAgICAgIHByZSB7CiAgICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgICAgbWFyZ2luOiAwcHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4IDI0cHg7CiAgICAgICAgfQoKICAgICAgICBjb2RlIHsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgICBtYXJnaW46IDBweDsKICAgICAgICB9CgogICAgICAgIGNvZGUsCiAgICAgICAgY29kZSAqLAogICAgICAgIC5saW5lTnVtYmVycyB7CiAgICAgICAgICBsaW5lLWhlaWdodDogMS40ZW07CiAgICAgICAgICBmb250LXdlaWdodDogMjAwOwogICAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzTW9ub0ZvbnRGYW1pbHl9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtc3RyaW5nIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA1OTY2OSIsICIjMTBiOTgxIil9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtYnVpbHRfaW4gewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOGI1Y2Y2IiwgIiNhNzhiZmEiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1mdW5jdGlvbiB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLXBhcmFtcyB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwODkxYjIiLCAiIzA2YjZkNCIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLWNvbW1lbnQgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1udW1iZXIgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWE1ODBjIiwgIiNmYjkyM2MiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1saXRlcmFsIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZjg3MTcxIil9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtYXR0ciB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM4YjVjZjYiLCAiI2E3OGJmYSIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLXZhcmlhYmxlIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtYWluYm94IgogICAgICAgIEBjb250ZXh0bWVudT0iJHsoZXZlbnRBcmcpID0+IHsKICAgICAgICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnRBcmcsIFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIkFib3V0IiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJjaXJjbGVJbmZvIiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBdKTsKICAgICAgfX0iCiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJhcHBiYXIiPgogICAgICAgICAgPGRlZXMtd2luZG93Y29udHJvbHMgdHlwZT0ibWFjIiBwb3NpdGlvbj0ibGVmdCI+PC9kZWVzLXdpbmRvd2NvbnRyb2xzPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZU5hbWUiPmluZGV4LnRzPC9kaXY+CiAgICAgICAgICA8ZGVlcy13aW5kb3djb250cm9scyB0eXBlPSJtYWMiIHBvc2l0aW9uPSJyaWdodCI+PC9kZWVzLXdpbmRvd2NvbnRyb2xzPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvZGVncmlkIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmVOdW1iZXJzIj4KICAgICAgICAgICAgJHsoKCkgPT4gewogICAgICAgIGxldCBsaW5lQ291bnRlciA9IDA7CiAgICAgICAgcmV0dXJuIHRoaXMuY29kZVRvRGlzcGxheS5zcGxpdCgiXG4iKS5tYXAoKGxpbmVBcmcpID0+IHsKICAgICAgICAgIGxpbmVDb3VudGVyKys7CiAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0ibGluZUNvdW50ZXIiPiR7bGluZUNvdW50ZXJ9PC9kaXY+YDsKICAgICAgICB9KTsKICAgICAgfSkoKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHByZT48Y29kZT48L2NvZGU+PC9wcmU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYm90dG9tQmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlc0xhYmVsIj5TcGFjZXM6IDI8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlTGFiZWwiPiR7dGhpcy5wcm9nTGFuZ308L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgY29kZVRvRGlzcGxheVN0b3JlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX2NvZGVUb0Rpc3BsYXlfZXh0cmFJbml0aWFsaXplcnMpLCAiIik7CiAgICBoaWdobGlnaHRKcyA9IG51bGw7CiAgICBhc3luYyB1cGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGNvbnNvbGUubG9nKCJoaWdobGlnaHRpbmcgbm93Iik7CiAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2hpbGROb2Rlcyk7CiAgICAgIGNvbnN0IHNsb3R0ZWRDb2RlTm9kZXMgPSBbXTsKICAgICAgdGhpcy5jaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4gewogICAgICAgIGlmIChjaGlsZE5vZGUubm9kZU5hbWUgPT09ICIjdGV4dCIpIHsKICAgICAgICAgIHNsb3R0ZWRDb2RlTm9kZXMucHVzaChjaGlsZE5vZGUpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmICh0aGlzLmNvZGVUb0Rpc3BsYXkgJiYgdGhpcy5jb2RlVG9EaXNwbGF5ICE9PSB0aGlzLmNvZGVUb0Rpc3BsYXlTdG9yZSkgewogICAgICAgIHRoaXMuY29kZVRvRGlzcGxheVN0b3JlID0gc21hcnRzdHJpbmdfaW5kZW50X2V4cG9ydHMubm9ybWFsaXplKHRoaXMuY29kZVRvRGlzcGxheSkudHJpbVN0YXJ0KCk7CiAgICAgIH0KICAgICAgaWYgKHNsb3R0ZWRDb2RlTm9kZXNbMF0gJiYgc2xvdHRlZENvZGVOb2Rlc1swXS53aG9sZVRleHQgJiYgIXRoaXMuY29kZVRvRGlzcGxheSkgewogICAgICAgIHRoaXMuY29kZVRvRGlzcGxheVN0b3JlID0gc21hcnRzdHJpbmdfaW5kZW50X2V4cG9ydHMubm9ybWFsaXplKHNsb3R0ZWRDb2RlTm9kZXNbMF0ud2hvbGVUZXh0KS50cmltU3RhcnQoKTsKICAgICAgICB0aGlzLmNvZGVUb0Rpc3BsYXkgPSB0aGlzLmNvZGVUb0Rpc3BsYXlTdG9yZTsKICAgICAgfQogICAgICBhd2FpdCBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgaWYgKCF0aGlzLmhpZ2hsaWdodEpzKSB7CiAgICAgICAgdGhpcy5oaWdobGlnaHRKcyA9IGF3YWl0IERlZXNTZXJ2aWNlTGliTG9hZGVyLmdldEluc3RhbmNlKCkubG9hZEhpZ2hsaWdodEpzKCk7CiAgICAgIH0KICAgICAgY29uc3QgbG9jYWxDb2RlTm9kZSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJjb2RlIik7CiAgICAgIGNvbnN0IGhpZ2hsaWdodGVkSHRtbCA9IHRoaXMuaGlnaGxpZ2h0SnMuaGlnaGxpZ2h0KHRoaXMuY29kZVRvRGlzcGxheVN0b3JlLCB7CiAgICAgICAgbGFuZ3VhZ2U6IHRoaXMucHJvZ0xhbmcsCiAgICAgICAgaWdub3JlSWxsZWdhbHM6IHRydWUKICAgICAgfSk7CiAgICAgIGxvY2FsQ29kZU5vZGUuaW5uZXJIVE1MID0gaGlnaGxpZ2h0ZWRIdG1sLnZhbHVlOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0OChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0RhdGF2aWV3Q29kZWJveDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMzUgPSAoKSA9PiBiMmAgPHN0eWxlPgogICAgLmRlbW8gewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y1ZjVmNSIsICIjMGEwYTBhIil9OwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgY29udGVudDogJyc7CiAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICB9CiAgICAKICAgIC5kZW1vLWdyaWQgewogICAgICBkaXNwbGF5OiBncmlkOwogICAgICBnYXA6IDI0cHg7CiAgICAgIG1heC13aWR0aDogODAwcHg7CiAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgfQogICAgCiAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAxNnB4OwogICAgfQogICAgCiAgICAuZGVtby10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICB9CiAgICAKICAgIC5kZW1vLW5vdGUgewogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vIj4KICAgIDxkaXYgY2xhc3M9ImRlbW8tbm90ZSI+CiAgICAgIFJpZ2h0LWNsaWNrIG9uIGFueSBkZXRhaWwgcm93IHRvIGNvcHkgdGhlIHZhbHVlLCBrZXksIG9yIGtleTp2YWx1ZSBjb21iaW5hdGlvbgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLWdyaWQiPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tdGl0bGUiPlNlcnZpY2UgSGVhbHRoIFN0YXR1czwvZGl2PgogICAgICAgIDxkZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdAogICAgICAgICAgLnN0YXR1c09iamVjdD0ke3sKICBpZDogIjEiLAogIG5hbWU6ICJBUEkgR2F0ZXdheSBTZXJ2aWNlIiwKICBjb21iaW5lZFN0YXR1czogIm9rIiwKICBjb21iaW5lZFN0YXR1c1RleHQ6ICJBbGwgc3lzdGVtcyBvcGVyYXRpb25hbCIsCiAgZGV0YWlsczogWwogICAgewogICAgICBuYW1lOiAiUmVzcG9uc2UgVGltZSIsCiAgICAgIHZhbHVlOiAiNDVtcyAoYXZnKSIsCiAgICAgIHN0YXR1czogIm9rIiwKICAgICAgc3RhdHVzVGV4dDogIldpdGhpbiBub3JtYWwgcmFuZ2UiCiAgICB9LAogICAgewogICAgICBuYW1lOiAiVXB0aW1lIiwKICAgICAgdmFsdWU6ICI5OS45OSUgKDMwIGRheXMpIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiRXhjZWxsZW50IHVwdGltZSIKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJBY3RpdmUgQ29ubmVjdGlvbnMiLAogICAgICB2YWx1ZTogIjEsMjM0IC8gMTAsMDAwIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiTm9ybWFsIGxvYWQiCiAgICB9LAogICAgewogICAgICBuYW1lOiAiU1NMIENlcnRpZmljYXRlIiwKICAgICAgdmFsdWU6ICJWYWxpZCB1bnRpbCAyMDI0LTEyLTMxIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiQ2VydGlmaWNhdGUgdmFsaWQiCiAgICB9CiAgXQp9fQogICAgICAgID4KICAgICAgICA8L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0PgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby10aXRsZSI+RGF0YWJhc2UgQ2x1c3RlciBTdGF0dXM8L2Rpdj4KICAgICAgICA8ZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QKICAgICAgICAgIC5zdGF0dXNPYmplY3Q9JHt7CiAgaWQ6ICIyIiwKICBuYW1lOiAiUG9zdGdyZVNRTCBDbHVzdGVyIiwKICBjb21iaW5lZFN0YXR1czogInBhcnRseV9vayIsCiAgY29tYmluZWRTdGF0dXNUZXh0OiAiTWlub3IgaXNzdWVzIGRldGVjdGVkIiwKICBkZXRhaWxzOiBbCiAgICB7CiAgICAgIG5hbWU6ICJQcmltYXJ5IE5vZGUiLAogICAgICB2YWx1ZTogImRiLXByaW1hcnktMDEgKGhlYWx0aHkpIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiT3BlcmF0aW5nIG5vcm1hbGx5IgogICAgfSwKICAgIHsKICAgICAgbmFtZTogIlJlcGxpY2EgTGFnIiwKICAgICAgdmFsdWU6ICIyLjUgc2Vjb25kcyIsCiAgICAgIHN0YXR1czogInBhcnRseV9vayIsCiAgICAgIHN0YXR1c1RleHQ6ICJTbGlnaHRseSBlbGV2YXRlZCIKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJEaXNrIFVzYWdlIiwKICAgICAgdmFsdWU6ICI3OCUgKDMxMkdCIC8gNDAwR0IpIiwKICAgICAgc3RhdHVzOiAicGFydGx5X29rIiwKICAgICAgc3RhdHVzVGV4dDogIkFwcHJvYWNoaW5nIHRocmVzaG9sZCIKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJDb25uZWN0aW9uIFBvb2wiLAogICAgICB2YWx1ZTogIjg5IC8gMTAwIGNvbm5lY3Rpb25zIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiV2l0aGluIGxpbWl0cyIKICAgIH0KICBdCn19CiAgICAgICAgPgogICAgICAgIDwvZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3Q+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXRpdGxlIj5CdWlsZCBQaXBlbGluZSBTdGF0dXM8L2Rpdj4KICAgICAgICA8ZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QKICAgICAgICAgIC5zdGF0dXNPYmplY3Q9JHt7CiAgaWQ6ICIzIiwKICBuYW1lOiAiQ0kvQ0QgUGlwZWxpbmUiLAogIGNvbWJpbmVkU3RhdHVzOiAibm90X29rIiwKICBjb21iaW5lZFN0YXR1c1RleHQ6ICJCdWlsZCBmYWlsdXJlIiwKICBkZXRhaWxzOiBbCiAgICB7CiAgICAgIG5hbWU6ICJMYXN0IEJ1aWxkIiwKICAgICAgdmFsdWU6ICJCdWlsZCAjMTIzNCAtIEZhaWxlZCIsCiAgICAgIHN0YXR1czogIm5vdF9vayIsCiAgICAgIHN0YXR1c1RleHQ6ICJUZXN0IGZhaWx1cmVzIgogICAgfSwKICAgIHsKICAgICAgbmFtZTogIkZhaWxlZCBUZXN0cyIsCiAgICAgIHZhbHVlOiAiMyB0ZXN0cyBmYWlsZWQ6IGF1dGguc3BlYy50cywgdXNlci5zcGVjLnRzLCBhcGkuc3BlYy50cyIsCiAgICAgIHN0YXR1czogIm5vdF9vayIsCiAgICAgIHN0YXR1c1RleHQ6ICJVbml0IHRlc3QgZmFpbHVyZXMiCiAgICB9LAogICAgewogICAgICBuYW1lOiAiQ29kZSBDb3ZlcmFnZSIsCiAgICAgIHZhbHVlOiAiODIuNSUgKHRhcmdldDogODUlKSIsCiAgICAgIHN0YXR1czogInBhcnRseV9vayIsCiAgICAgIHN0YXR1c1RleHQ6ICJCZWxvdyB0YXJnZXQiCiAgICB9LAogICAgewogICAgICBuYW1lOiAiQnVpbGQgRHVyYXRpb24iLAogICAgICB2YWx1ZTogIjEybSAzNHMiLAogICAgICBzdGF0dXM6ICJvayIsCiAgICAgIHN0YXR1c1RleHQ6ICJOb3JtYWwgZHVyYXRpb24iCiAgICB9CiAgXQp9fQogICAgICAgID4KICAgICAgICA8L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QvZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNDggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczQ5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzRGF0YXZpZXdTdGF0dXNvYmplY3QgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3N0YXR1c09iamVjdF9kZWNvcmF0b3JzOwogIGxldCBfc3RhdHVzT2JqZWN0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdHVzT2JqZWN0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNEYXRhdmlld1N0YXR1c29iamVjdDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9zdGF0dXNPYmplY3RfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTQ4KHRoaXMsIG51bGwsIF9zdGF0dXNPYmplY3RfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RhdHVzT2JqZWN0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzdGF0dXNPYmplY3QiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3RhdHVzT2JqZWN0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdGF0dXNPYmplY3QgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3RhdHVzT2JqZWN0X2luaXRpYWxpemVycywgX3N0YXR1c09iamVjdF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ4KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0RhdGF2aWV3U3RhdHVzb2JqZWN0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzU7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkRhdGEgVmlldyI7CiAgICAjc3RhdHVzT2JqZWN0X2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczQ5KHRoaXMsIF9zdGF0dXNPYmplY3RfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgZ2V0IHN0YXR1c09iamVjdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3N0YXR1c09iamVjdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHN0YXR1c09iamVjdCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc3RhdHVzT2JqZWN0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAubWFpbmJveCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMCBoc2woMCAwJSAwJSAvIDAuMSksIDAgMXB4IDJweCAtMXB4IGhzbCgwIDAlIDAlIC8gMC4xKTsKICAgICAgICBtaW4taGVpZ2h0OiA0OHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA0OHB4IGF1dG8gMTAwcHg7CiAgICAgICAgaGVpZ2h0OiA1NnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAwcHg7CiAgICAgICAgcGFkZGluZzogMHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdCB7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwgImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA2My45JSAvIDAuMikiLCAiaHNsKDAgMCUgNDUuMSUgLyAwLjIpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5jb3B5TWFpbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5jb3B5TWFpbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuY29weU1haW46YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdC5vayB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMikiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdC5ub3Rfb2sgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUgLyAwLjIpIiwgImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdC5wYXJ0bHlfb2sgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjUgOTUlIDUzJSkiLCAiaHNsKDI1IDk1JSA2MyUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUgLyAwLjIpIiwgImhzbCgyNSA5NSUgNjMlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLmRldGFpbCB7CiAgICAgICAgbWluLWhlaWdodDogNjBweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA0OHB4IGF1dG87CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgICBjdXJzb3I6IGNvbnRleHQtbWVudTsKICAgICAgfQoKICAgICAgLmRldGFpbDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCAiaHNsKDAgMCUgNyUpIil9OwogICAgICB9CgogICAgICAuZGV0YWlsOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICB9CgogICAgICAuZGV0YWlsIC5kZXRhaWxzVGV4dCB7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgIH0KCiAgICAgIC5kZXRhaWwgLmRldGFpbHNUZXh0IC5sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAuZGV0YWlsIC5kZXRhaWxzVGV4dCAudmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogJ0ludGVsIE9uZSBNb25vJywgJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXR1c2RvdCAke3RoaXMuc3RhdHVzT2JqZWN0Py5jb21iaW5lZFN0YXR1c30iPjwvZGl2PgogICAgICAgICAgPGgxPiR7dGhpcy5zdGF0dXNPYmplY3Q/Lm5hbWUgfHwgIk5vIHN0YXR1cyBvYmplY3QgYXNzaWduZWQifTwvaDE+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb3B5TWFpbiIgQGNsaWNrPSR7dGhpcy5oYW5kbGVDb3B5QXNKc29ufT5Db3B5IEpTT048L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMuc3RhdHVzT2JqZWN0Py5kZXRhaWxzPy5tYXAoKGRldGFpbEFyZykgPT4gewogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgPGRpdiAKICAgICAgICAgICAgICBjbGFzcz0iZGV0YWlsIgogICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhldmVudCkgPT4gewogICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIkNvcHkgVmFsdWUiLAogICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmNvcHkiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5VG9DbGlwYm9hcmQoZGV0YWlsQXJnLnZhbHVlLCAiVmFsdWUiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiQ29weSBLZXkiLAogICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmtleSIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlUb0NsaXBib2FyZChkZXRhaWxBcmcubmFtZSwgIktleSIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJDb3B5IEtleTpWYWx1ZSIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Y29weS1wbHVzIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29weVRvQ2xpcGJvYXJkKGAke2RldGFpbEFyZy5uYW1lfTogJHtkZXRhaWxBcmcudmFsdWV9YCwgIktleTpWYWx1ZSIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgXSk7CiAgICAgICAgfX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXR1c2RvdCAke2RldGFpbEFyZy5zdGF0dXN9Ij48L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXRhaWxzVGV4dCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+JHtkZXRhaWxBcmcubmFtZX08L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIj4ke2RldGFpbEFyZy52YWx1ZX08L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgfQogICAgYXN5bmMgY29weVRvQ2xpcGJvYXJkKHRleHQ5LCB0eXBlNSA9ICJUZXh0IikgewogICAgICB0cnkgewogICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQ5KTsKICAgICAgICBjb25zb2xlLmxvZyhgJHt0eXBlNX0gY29waWVkIHRvIGNsaXBib2FyZGApOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY29weSAke3R5cGU1fTpgLCBlcnIpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBoYW5kbGVDb3B5QXNKc29uKCkgewogICAgICBpZiAoIXRoaXMuc3RhdHVzT2JqZWN0KQogICAgICAgIHJldHVybjsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXR1c09iamVjdCwgbnVsbCwgMikpOwogICAgICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29weU1haW4iKTsKICAgICAgICBjb25zdCBvcmlnaW5hbFRleHQgPSBidXR0b24udGV4dENvbnRlbnQ7CiAgICAgICAgYnV0dG9uLnRleHRDb250ZW50ID0gIkNvcGllZCEiOwogICAgICAgIGNvbnN0IGlzRGFyayA9ICF0aGlzLmdvQnJpZ2h0OwogICAgICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kID0gaXNEYXJrID8gImhzbCgxNDIuMSA3MC42JSA0NS4zJSAvIDAuMSkiIDogImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMSkiOwogICAgICAgIGJ1dHRvbi5zdHlsZS5ib3JkZXJDb2xvciA9IGlzRGFyayA/ICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIiA6ICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIjsKICAgICAgICBidXR0b24uc3R5bGUuY29sb3IgPSBpc0RhcmsgPyAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIgOiAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSI7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBidXR0b24udGV4dENvbnRlbnQgPSBvcmlnaW5hbFRleHQ7CiAgICAgICAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZCA9ICIiOwogICAgICAgICAgYnV0dG9uLnN0eWxlLmJvcmRlckNvbG9yID0gIiI7CiAgICAgICAgICBidXR0b24uc3R5bGUuY29sb3IgPSAiIjsKICAgICAgICB9LCAxNTAwKTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGNvcHk6IiwgZXJyKTsKICAgICAgfQogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDkodGhpcywgX3N0YXR1c09iamVjdF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczQ5KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzRGF0YXZpZXdTdGF0dXNvYmplY3QyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUvZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlNDkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczUwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV29ya3NwYWNlRmlsZXRyZWUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdvcmtzcGFjZS1maWxldHJlZSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnM7CiAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb290UGF0aF9kZWNvcmF0b3JzOwogIGxldCBfcm9vdFBhdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb290UGF0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRQYXRoX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZFBhdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFBhdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RyZWVEYXRhX2RlY29yYXRvcnM7CiAgbGV0IF90cmVlRGF0YV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RyZWVEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0xvYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX2lzTG9hZGluZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXJyb3JNZXNzYWdlX2RlY29yYXRvcnM7CiAgbGV0IF9lcnJvck1lc3NhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lcnJvck1lc3NhZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1dvcmtzcGFjZUZpbGV0cmVlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfcm9vdFBhdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zZWxlY3RlZFBhdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF90cmVlRGF0YV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNMb2FkaW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9lcnJvck1lc3NhZ2VfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlNDkodGhpcywgbnVsbCwgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImV4ZWN1dGlvbkVudmlyb25tZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJleGVjdXRpb25FbnZpcm9ubWVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5leGVjdXRpb25FbnZpcm9ubWVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZXhlY3V0aW9uRW52aXJvbm1lbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0OSh0aGlzLCBudWxsLCBfcm9vdFBhdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicm9vdFBhdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJvb3RQYXRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJvb3RQYXRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yb290UGF0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yb290UGF0aF9pbml0aWFsaXplcnMsIF9yb290UGF0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ5KHRoaXMsIG51bGwsIF9zZWxlY3RlZFBhdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRQYXRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZFBhdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRQYXRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZFBhdGggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRQYXRoX2luaXRpYWxpemVycywgX3NlbGVjdGVkUGF0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ5KHRoaXMsIG51bGwsIF90cmVlRGF0YV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0cmVlRGF0YSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidHJlZURhdGEiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudHJlZURhdGEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRyZWVEYXRhID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RyZWVEYXRhX2luaXRpYWxpemVycywgX3RyZWVEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDkodGhpcywgbnVsbCwgX2lzTG9hZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0xvYWRpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzTG9hZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0xvYWRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzTG9hZGluZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBfaXNMb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDkodGhpcywgbnVsbCwgX2Vycm9yTWVzc2FnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlcnJvck1lc3NhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVycm9yTWVzc2FnZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lcnJvck1lc3NhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVycm9yTWVzc2FnZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lcnJvck1lc3NhZ2VfaW5pdGlhbGl6ZXJzLCBfZXJyb3JNZXNzYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDkobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzV29ya3NwYWNlRmlsZXRyZWUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgCiAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogMzAwcHg7IGhlaWdodDogNDAwcHg7IHBvc2l0aW9uOiByZWxhdGl2ZTsiPgogICAgICA8ZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWU+PC9kZWVzLXdvcmtzcGFjZS1maWxldHJlZT4KICAgIDwvZGl2PgogIGA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICAjZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycywgbnVsbCk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KCkgewogICAgICByZXR1cm4gdGhpcy4jZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBleGVjdXRpb25FbnZpcm9ubWVudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNyb290UGF0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfcm9vdFBhdGhfaW5pdGlhbGl6ZXJzLCAiLyIpKTsKICAgIGdldCByb290UGF0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Jvb3RQYXRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcm9vdFBhdGgodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Jvb3RQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfcm9vdFBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUwKHRoaXMsIF9zZWxlY3RlZFBhdGhfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHNlbGVjdGVkUGF0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkUGF0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkUGF0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdHJlZURhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUwKHRoaXMsIF9zZWxlY3RlZFBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUwKHRoaXMsIF90cmVlRGF0YV9pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgdHJlZURhdGEoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0cmVlRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRyZWVEYXRhKHZhbHVlMikgewogICAgICB0aGlzLiN0cmVlRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzTG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX3RyZWVEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfaXNMb2FkaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0xvYWRpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc0xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0xvYWRpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzTG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Vycm9yTWVzc2FnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX2Vycm9yTWVzc2FnZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgZXJyb3JNZXNzYWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jZXJyb3JNZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZXJyb3JNZXNzYWdlKHZhbHVlMikgewogICAgICB0aGlzLiNlcnJvck1lc3NhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGV4cGFuZGVkUGF0aHMgPSAoX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfZXJyb3JNZXNzYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7CiAgICBsb2FkVHJlZVN0YXJ0ZWQgPSBmYWxzZTsKICAgIC8vIENsaXBib2FyZCBzdGF0ZSBmb3IgY29weS9wYXN0ZSBvcGVyYXRpb25zCiAgICBjbGlwYm9hcmRQYXRoID0gbnVsbDsKICAgIGNsaXBib2FyZE9wZXJhdGlvbiA9IG51bGw7CiAgICAvLyBGaWxlIHdhdGNoZXIgZm9yIGF1dG8tcmVmcmVzaAogICAgZmlsZVdhdGNoZXIgPSBudWxsOwogICAgcmVmcmVzaERlYm91bmNlVGltZW91dCA9IG51bGw7CiAgICBsYXN0RXhlY3V0aW9uRW52aXJvbm1lbnQgPSBudWxsOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5OCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAudHJlZS1jb250YWluZXIgewogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICB9CgogICAgICAudHJlZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG1hcmdpbjogMXB4IDRweDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXMgZWFzZTsKICAgICAgfQoKICAgICAgLnRyZWUtaXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkzJSkiLCAiaHNsKDAgMCUgMTQlKSIpfTsKICAgICAgfQoKICAgICAgLnRyZWUtaXRlbS5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA5NSUpIiwgImhzbCgyMTAgNTAlIDIwJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNDAlKSIsICJoc2woMjEwIDEwMCUgNzAlKSIpfTsKICAgICAgfQoKICAgICAgLnRyZWUtaXRlbS5zZWxlY3RlZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA5MiUpIiwgImhzbCgyMTAgNTAlIDI1JSkiKX07CiAgICAgIH0KCiAgICAgIC5pbmRlbnQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmV4cGFuZC1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuZXhwYW5kLWljb24uZXhwYW5kZWQgewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAgICAgfQoKICAgICAgLmV4cGFuZC1pY29uLmhpZGRlbiB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuZmlsZS1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA2cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAuZmlsZS1pY29uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmZvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDUgODAlIDQ1JSkiLCAiaHNsKDQ1IDcwJSA1NSUpIil9OwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmZpbGUgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuZmlsZS1pY29uLnR5cGVzY3JpcHQgewogICAgICAgIGNvbG9yOiBoc2woMjExIDYwJSA0OCUpOwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmphdmFzY3JpcHQgewogICAgICAgIGNvbG9yOiBoc2woNTMgOTMlIDU0JSk7CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24uanNvbiB7CiAgICAgICAgY29sb3I6IGhzbCg0NSA4MCUgNTAlKTsKICAgICAgfQoKICAgICAgLmZpbGUtaWNvbi5odG1sIHsKICAgICAgICBjb2xvcjogaHNsKDE0IDc3JSA1MiUpOwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmNzcyB7CiAgICAgICAgY29sb3I6IGhzbCgyMjggNzclIDU5JSk7CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24ubWFya2Rvd24gewogICAgICAgIGNvbG9yOiBoc2woMCAwJSA1MCUpOwogICAgICB9CgogICAgICAuZmlsZS1uYW1lIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgODUlKSIpfTsKICAgICAgfQoKICAgICAgLmxvYWRpbmcgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuZXJyb3IgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiBoc2woMCA3MCUgNTAlKTsKICAgICAgfQoKICAgICAgLmVtcHR5IHsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5maWxldHJlZS10b29sYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgOCUpIil9OwogICAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cywgYmFja2dyb3VuZCAwLjE1czsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzMCUpIiwgImhzbCgwIDAlIDcwJSkiKX07CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjA4KSIsICJoc2woMCAwJSAxMDAlIC8gMC4xKSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5Ij4KICAgICAgICAgIE5vIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBwcm92aWRlZC4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgICAgfQogICAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZyI+CiAgICAgICAgICBMb2FkaW5nIGZpbGVzLi4uCiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuZXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImVycm9yIj4KICAgICAgICAgICR7dGhpcy5lcnJvck1lc3NhZ2V9CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJmaWxldHJlZS10b29sYmFyIj4KICAgICAgICA8c3BhbiBjbGFzcz0idG9vbGJhci10aXRsZSI+RXhwbG9yZXI8L3NwYW4+CiAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1hY3Rpb25zIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYnV0dG9uIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNyZWF0ZU5ld0ZpbGUoIi8iKX0gdGl0bGU9Ik5ldyBGaWxlIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6ZmlsZVBsdXMifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jcmVhdGVOZXdGb2xkZXIoIi8iKX0gdGl0bGU9Ik5ldyBGb2xkZXIiPgogICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpmb2xkZXJQbHVzIn0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLnRyZWVEYXRhLmxlbmd0aCA9PT0gMCA/IGIyYDxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBmaWxlcyBmb3VuZC48L2Rpdj5gIDogYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRyZWUtY29udGFpbmVyIiBAY29udGV4dG1lbnU9JHt0aGlzLmhhbmRsZUVtcHR5U3BhY2VDb250ZXh0TWVudX0+CiAgICAgICAgICAgICAgJHt0aGlzLnJlbmRlclRyZWUodGhpcy50cmVlRGF0YSl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYH0KICAgIGA7CiAgICB9CiAgICByZW5kZXJUcmVlKG5vZGVzKSB7CiAgICAgIHJldHVybiBub2Rlcy5tYXAoKG5vZGUyKSA9PiB0aGlzLnJlbmRlck5vZGUobm9kZTIpKTsKICAgIH0KICAgIHJlbmRlck5vZGUobm9kZTIpIHsKICAgICAgY29uc3QgaXNEaXJlY3RvcnkgPSBub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IjsKICAgICAgY29uc3QgaXNFeHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRQYXRocy5oYXMobm9kZTIucGF0aCk7CiAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBub2RlMi5wYXRoID09PSB0aGlzLnNlbGVjdGVkUGF0aDsKICAgICAgY29uc3QgaWNvbkNsYXNzID0gdGhpcy5nZXRGaWxlSWNvbkNsYXNzKG5vZGUyKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9InRyZWUtaXRlbSAke2lzU2VsZWN0ZWQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgIHN0eWxlPSJwYWRkaW5nLWxlZnQ6ICR7OCArIG5vZGUyLmxldmVsICogMTZ9cHgiCiAgICAgICAgQGNsaWNrPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVJdGVtQ2xpY2soZTExLCBub2RlMil9CiAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVDb250ZXh0TWVudShlMTEsIG5vZGUyKX0KICAgICAgPgogICAgICAgIDxzcGFuIGNsYXNzPSJleHBhbmQtaWNvbiAke2lzRXhwYW5kZWQgPyAiZXhwYW5kZWQiIDogIiJ9ICR7IWlzRGlyZWN0b3J5ID8gImhpZGRlbiIgOiAiIn0iPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Y2hldnJvblJpZ2h0In0gaWNvblNpemU9IjEyIj48L2RlZXMtaWNvbj4KICAgICAgICA8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZpbGUtaWNvbiAke2ljb25DbGFzc30iPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuZ2V0RmlsZUljb24obm9kZTIpfSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iZmlsZS1uYW1lIj4ke25vZGUyLm5hbWV9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgJHtpc0RpcmVjdG9yeSAmJiBpc0V4cGFuZGVkICYmIG5vZGUyLmNoaWxkcmVuID8gdGhpcy5yZW5kZXJUcmVlKG5vZGUyLmNoaWxkcmVuKSA6ICIifQogICAgYDsKICAgIH0KICAgIGdldEZpbGVJY29uKG5vZGUyKSB7CiAgICAgIGlmIChub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IikgewogICAgICAgIHJldHVybiB0aGlzLmV4cGFuZGVkUGF0aHMuaGFzKG5vZGUyLnBhdGgpID8gImx1Y2lkZTpmb2xkZXJPcGVuIiA6ICJsdWNpZGU6Zm9sZGVyIjsKICAgICAgfQogICAgICBjb25zdCBleHQgPSBub2RlMi5uYW1lLnNwbGl0KCIuIikucG9wKCk/LnRvTG93ZXJDYXNlKCk7CiAgICAgIHN3aXRjaCAoZXh0KSB7CiAgICAgICAgY2FzZSAidHMiOgogICAgICAgIGNhc2UgInRzeCI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlQ29kZSI7CiAgICAgICAgY2FzZSAianMiOgogICAgICAgIGNhc2UgImpzeCI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlQ29kZSI7CiAgICAgICAgY2FzZSAianNvbiI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlSnNvbiI7CiAgICAgICAgY2FzZSAiaHRtbCI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlQ29kZSI7CiAgICAgICAgY2FzZSAiY3NzIjoKICAgICAgICBjYXNlICJzY3NzIjoKICAgICAgICBjYXNlICJsZXNzIjoKICAgICAgICAgIHJldHVybiAibHVjaWRlOmZpbGVDb2RlIjsKICAgICAgICBjYXNlICJtZCI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlVGV4dCI7CiAgICAgICAgY2FzZSAicG5nIjoKICAgICAgICBjYXNlICJqcGciOgogICAgICAgIGNhc2UgImpwZWciOgogICAgICAgIGNhc2UgImdpZiI6CiAgICAgICAgY2FzZSAic3ZnIjoKICAgICAgICAgIHJldHVybiAibHVjaWRlOmltYWdlIjsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuICJsdWNpZGU6ZmlsZSI7CiAgICAgIH0KICAgIH0KICAgIGdldEZpbGVJY29uQ2xhc3Mobm9kZTIpIHsKICAgICAgaWYgKG5vZGUyLnR5cGUgPT09ICJkaXJlY3RvcnkiKQogICAgICAgIHJldHVybiAiZm9sZGVyIjsKICAgICAgY29uc3QgZXh0ID0gbm9kZTIubmFtZS5zcGxpdCgiLiIpLnBvcCgpPy50b0xvd2VyQ2FzZSgpOwogICAgICBzd2l0Y2ggKGV4dCkgewogICAgICAgIGNhc2UgInRzIjoKICAgICAgICBjYXNlICJ0c3giOgogICAgICAgICAgcmV0dXJuICJ0eXBlc2NyaXB0IjsKICAgICAgICBjYXNlICJqcyI6CiAgICAgICAgY2FzZSAianN4IjoKICAgICAgICAgIHJldHVybiAiamF2YXNjcmlwdCI7CiAgICAgICAgY2FzZSAianNvbiI6CiAgICAgICAgICByZXR1cm4gImpzb24iOwogICAgICAgIGNhc2UgImh0bWwiOgogICAgICAgICAgcmV0dXJuICJodG1sIjsKICAgICAgICBjYXNlICJjc3MiOgogICAgICAgIGNhc2UgInNjc3MiOgogICAgICAgIGNhc2UgImxlc3MiOgogICAgICAgICAgcmV0dXJuICJjc3MiOwogICAgICAgIGNhc2UgIm1kIjoKICAgICAgICAgIHJldHVybiAibWFya2Rvd24iOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gImZpbGUiOwogICAgICB9CiAgICB9CiAgICBhc3luYyBoYW5kbGVJdGVtQ2xpY2soZTExLCBub2RlMikgewogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGlmIChub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IikgewogICAgICAgIGF3YWl0IHRoaXMudG9nZ2xlRGlyZWN0b3J5KG5vZGUyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNlbGVjdGVkUGF0aCA9IG5vZGUyLnBhdGg7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZmlsZS1zZWxlY3QiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgcGF0aDogbm9kZTIucGF0aCwgbmFtZTogbm9kZTIubmFtZSB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9CiAgICB9CiAgICBhc3luYyB0b2dnbGVEaXJlY3Rvcnkobm9kZTIpIHsKICAgICAgaWYgKHRoaXMuZXhwYW5kZWRQYXRocy5oYXMobm9kZTIucGF0aCkpIHsKICAgICAgICB0aGlzLmV4cGFuZGVkUGF0aHMuZGVsZXRlKG5vZGUyLnBhdGgpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuZXhwYW5kZWRQYXRocy5hZGQobm9kZTIucGF0aCk7CiAgICAgICAgaWYgKCFub2RlMi5jaGlsZHJlbiB8fCBub2RlMi5jaGlsZHJlbi5sZW5ndGggPT09IDApIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZERpcmVjdG9yeUNvbnRlbnRzKG5vZGUyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBhc3luYyBsb2FkRGlyZWN0b3J5Q29udGVudHMobm9kZTIpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgIHJldHVybjsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKG5vZGUyLnBhdGgpOwogICAgICAgIG5vZGUyLmNoaWxkcmVuID0gdGhpcy5zb3J0RW50cmllcyhlbnRyaWVzKS5tYXAoKGVudHJ5KSA9PiAoewogICAgICAgICAgLi4uZW50cnksCiAgICAgICAgICBsZXZlbDogbm9kZTIubGV2ZWwgKyAxLAogICAgICAgICAgZXhwYW5kZWQ6IGZhbHNlLAogICAgICAgICAgY2hpbGRyZW46IGVudHJ5LnR5cGUgPT09ICJkaXJlY3RvcnkiID8gW10gOiB2b2lkIDAKICAgICAgICB9KSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgZGlyZWN0b3J5ICR7bm9kZTIucGF0aH06YCwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBoYW5kbGVDb250ZXh0TWVudShlMTEsIG5vZGUyKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnN0IG1lbnVJdGVtcyA9IFtdOwogICAgICBpZiAobm9kZTIudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICBtZW51SXRlbXMucHVzaCh7CiAgICAgICAgICBuYW1lOiAiTmV3IEZpbGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJmaWxlUGx1cyIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMuY3JlYXRlTmV3RmlsZShub2RlMi5wYXRoKQogICAgICAgIH0sIHsKICAgICAgICAgIG5hbWU6ICJOZXcgRm9sZGVyIiwKICAgICAgICAgIGljb25OYW1lOiAiZm9sZGVyUGx1cyIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMuY3JlYXRlTmV3Rm9sZGVyKG5vZGUyLnBhdGgpCiAgICAgICAgfSwgeyBkaXZpZGVyOiB0cnVlIH0pOwogICAgICB9CiAgICAgIG1lbnVJdGVtcy5wdXNoKHsKICAgICAgICBuYW1lOiAiUmVuYW1lIiwKICAgICAgICBpY29uTmFtZTogInBlbmNpbCIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnJlbmFtZUl0ZW0obm9kZTIpCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAiRHVwbGljYXRlIiwKICAgICAgICBpY29uTmFtZTogImZpbGVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMuZHVwbGljYXRlSXRlbShub2RlMikKICAgICAgfSwgewogICAgICAgIG5hbWU6ICJDb3B5IiwKICAgICAgICBpY29uTmFtZTogImNvcHkiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5jb3B5SXRlbShub2RlMikKICAgICAgfSk7CiAgICAgIGlmIChub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IiAmJiB0aGlzLmNsaXBib2FyZFBhdGgpIHsKICAgICAgICBtZW51SXRlbXMucHVzaCh7CiAgICAgICAgICBuYW1lOiAiUGFzdGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnBhc3RlSXRlbShub2RlMi5wYXRoKQogICAgICAgIH0pOwogICAgICB9CiAgICAgIG1lbnVJdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9LCB7CiAgICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgICAgaWNvbk5hbWU6ICJ0cmFzaDIiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5kZWxldGVJdGVtKG5vZGUyKQogICAgICB9KTsKICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgIH0KICAgIGFzeW5jIGhhbmRsZUVtcHR5U3BhY2VDb250ZXh0TWVudShlMTEpIHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZTExLnRhcmdldDsKICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KCIudHJlZS1pdGVtIikpCiAgICAgICAgcmV0dXJuOwogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb25zdCBtZW51SXRlbXMgPSBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIk5ldyBGaWxlIiwKICAgICAgICAgIGljb25OYW1lOiAiZmlsZVBsdXMiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLmNyZWF0ZU5ld0ZpbGUoIi8iKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIk5ldyBGb2xkZXIiLAogICAgICAgICAgaWNvbk5hbWU6ICJmb2xkZXJQbHVzIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5jcmVhdGVOZXdGb2xkZXIoIi8iKQogICAgICAgIH0KICAgICAgXTsKICAgICAgaWYgKHRoaXMuY2xpcGJvYXJkUGF0aCkgewogICAgICAgIG1lbnVJdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9LCB7CiAgICAgICAgICBuYW1lOiAiUGFzdGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnBhc3RlSXRlbSgiLyIpCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgIH0KICAgIGFzeW5jIHNob3dJbnB1dE1vZGFsKG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlMikgPT4gewogICAgICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgICAgICAgaGVhZGluZzogb3B0aW9ucy5oZWFkaW5nLAogICAgICAgICAgd2lkdGg6ICJzbWFsbCIsCiAgICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7b3B0aW9ucy5sYWJlbH0KICAgICAgICAgICAgLnZhbHVlPSR7b3B0aW9ucy52YWx1ZSB8fCAiIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICBgLAogICAgICAgICAgbWVudU9wdGlvbnM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsUmVmKSA9PiB7CiAgICAgICAgICAgICAgICBhd2FpdCBtb2RhbFJlZi5kZXN0cm95KCk7CiAgICAgICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiBvcHRpb25zLmJ1dHRvbk5hbWUgfHwgIkNyZWF0ZSIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWxSZWYpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRFbDIgPSBtb2RhbFJlZi5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubW9kYWwgLmNvbnRlbnQiKTsKICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IGNvbnRlbnRFbDI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dCIpOwogICAgICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0RWxlbWVudD8udmFsdWU/LnRyaW0oKSB8fCAiIjsKICAgICAgICAgICAgICAgIGF3YWl0IG1vZGFsUmVmLmRlc3Ryb3koKTsKICAgICAgICAgICAgICAgIHJlc29sdmUyKGlucHV0VmFsdWUgfHwgbnVsbCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSk7CiAgICAgICAgYXdhaXQgbW9kYWwudXBkYXRlQ29tcGxldGU7CiAgICAgICAgY29uc3QgY29udGVudEVsID0gbW9kYWwuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLm1vZGFsIC5jb250ZW50Iik7CiAgICAgICAgaWYgKGNvbnRlbnRFbCkgewogICAgICAgICAgY29uc3QgaW5wdXRFbGVtZW50ID0gY29udGVudEVsLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dCIpOwogICAgICAgICAgaWYgKGlucHV0RWxlbWVudCkgewogICAgICAgICAgICBhd2FpdCBpbnB1dEVsZW1lbnQudXBkYXRlQ29tcGxldGU7CiAgICAgICAgICAgIGlucHV0RWxlbWVudC5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBjcmVhdGVOZXdGaWxlKHBhcmVudFBhdGgpIHsKICAgICAgY29uc3QgZmlsZU5hbWUgPSBhd2FpdCB0aGlzLnNob3dJbnB1dE1vZGFsKHsKICAgICAgICBoZWFkaW5nOiAiTmV3IEZpbGUiLAogICAgICAgIGxhYmVsOiAiRmlsZSBuYW1lIgogICAgICB9KTsKICAgICAgaWYgKCFmaWxlTmFtZSB8fCAhdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXJlbnRQYXRoID09PSAiLyIgPyBgLyR7ZmlsZU5hbWV9YCA6IGAke3BhcmVudFBhdGh9LyR7ZmlsZU5hbWV9YDsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShuZXdQYXRoLCAiIik7CiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZmlsZS1jcmVhdGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IHBhdGg6IG5ld1BhdGggfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGZpbGU6IiwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBjcmVhdGVOZXdGb2xkZXIocGFyZW50UGF0aCkgewogICAgICBjb25zdCBmb2xkZXJOYW1lID0gYXdhaXQgdGhpcy5zaG93SW5wdXRNb2RhbCh7CiAgICAgICAgaGVhZGluZzogIk5ldyBGb2xkZXIiLAogICAgICAgIGxhYmVsOiAiRm9sZGVyIG5hbWUiCiAgICAgIH0pOwogICAgICBpZiAoIWZvbGRlck5hbWUgfHwgIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBuZXdQYXRoID0gcGFyZW50UGF0aCA9PT0gIi8iID8gYC8ke2ZvbGRlck5hbWV9YCA6IGAke3BhcmVudFBhdGh9LyR7Zm9sZGVyTmFtZX1gOwogICAgICB0cnkgewogICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQubWtkaXIobmV3UGF0aCk7CiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZm9sZGVyLWNyZWF0ZWQiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgcGF0aDogbmV3UGF0aCB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgZm9sZGVyOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZGVsZXRlSXRlbShub2RlMikgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBjb25maXJtZWQgPSBjb25maXJtKGBEZWxldGUgJHtub2RlMi5uYW1lfT9gKTsKICAgICAgaWYgKCFjb25maXJtZWQpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucm0obm9kZTIucGF0aCwgeyByZWN1cnNpdmU6IG5vZGUyLnR5cGUgPT09ICJkaXJlY3RvcnkiIH0pOwogICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpOwogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIml0ZW0tZGVsZXRlZCIsIHsKICAgICAgICAgIGRldGFpbDogeyBwYXRoOiBub2RlMi5wYXRoLCB0eXBlOiBub2RlMi50eXBlIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGRlbGV0ZSBpdGVtOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBSZW5hbWUgYSBmaWxlIG9yIGZvbGRlcgogICAgICovCiAgICBhc3luYyByZW5hbWVJdGVtKG5vZGUyKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5ld05hbWUgPSBhd2FpdCB0aGlzLnNob3dJbnB1dE1vZGFsKHsKICAgICAgICBoZWFkaW5nOiAiUmVuYW1lIiwKICAgICAgICBsYWJlbDogIk5ldyBuYW1lIiwKICAgICAgICB2YWx1ZTogbm9kZTIubmFtZSwKICAgICAgICBidXR0b25OYW1lOiAiUmVuYW1lIgogICAgICB9KTsKICAgICAgaWYgKCFuZXdOYW1lIHx8IG5ld05hbWUgPT09IG5vZGUyLm5hbWUpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBwYXJlbnRQYXRoID0gbm9kZTIucGF0aC5zdWJzdHJpbmcoMCwgbm9kZTIucGF0aC5sYXN0SW5kZXhPZigiLyIpKSB8fCAiLyI7CiAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXJlbnRQYXRoID09PSAiLyIgPyBgLyR7bmV3TmFtZX1gIDogYCR7cGFyZW50UGF0aH0vJHtuZXdOYW1lfWA7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKG5vZGUyLnR5cGUgPT09ICJmaWxlIikgewogICAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKG5vZGUyLnBhdGgpOwogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUobmV3UGF0aCwgY29udGVudDMpOwogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5ybShub2RlMi5wYXRoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXdhaXQgdGhpcy5jb3B5RGlyZWN0b3J5Q29udGVudHMobm9kZTIucGF0aCwgbmV3UGF0aCk7CiAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJtKG5vZGUyLnBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pOwogICAgICAgIH0KICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJpdGVtLXJlbmFtZWQiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgb2xkUGF0aDogbm9kZTIucGF0aCwgbmV3UGF0aCwgdHlwZTogbm9kZTIudHlwZSB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byByZW5hbWUgaXRlbToiLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogRHVwbGljYXRlIGEgZmlsZSBvciBmb2xkZXIKICAgICAqLwogICAgYXN5bmMgZHVwbGljYXRlSXRlbShub2RlMikgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBwYXJlbnRQYXRoID0gbm9kZTIucGF0aC5zdWJzdHJpbmcoMCwgbm9kZTIucGF0aC5sYXN0SW5kZXhPZigiLyIpKSB8fCAiLyI7CiAgICAgIGxldCBuZXdOYW1lOwogICAgICBpZiAobm9kZTIudHlwZSA9PT0gImZpbGUiKSB7CiAgICAgICAgY29uc3QgbGFzdERvdCA9IG5vZGUyLm5hbWUubGFzdEluZGV4T2YoIi4iKTsKICAgICAgICBpZiAobGFzdERvdCA+IDApIHsKICAgICAgICAgIGNvbnN0IGJhc2VOYW1lID0gbm9kZTIubmFtZS5zdWJzdHJpbmcoMCwgbGFzdERvdCk7CiAgICAgICAgICBjb25zdCBleHQgPSBub2RlMi5uYW1lLnN1YnN0cmluZyhsYXN0RG90KTsKICAgICAgICAgIG5ld05hbWUgPSBgJHtiYXNlTmFtZX1fY29weSR7ZXh0fWA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG5ld05hbWUgPSBgJHtub2RlMi5uYW1lfV9jb3B5YDsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmV3TmFtZSA9IGAke25vZGUyLm5hbWV9X2NvcHlgOwogICAgICB9CiAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXJlbnRQYXRoID09PSAiLyIgPyBgLyR7bmV3TmFtZX1gIDogYCR7cGFyZW50UGF0aH0vJHtuZXdOYW1lfWA7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKG5vZGUyLnR5cGUgPT09ICJmaWxlIikgewogICAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKG5vZGUyLnBhdGgpOwogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUobmV3UGF0aCwgY29udGVudDMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlEaXJlY3RvcnlDb250ZW50cyhub2RlMi5wYXRoLCBuZXdQYXRoKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiaXRlbS1kdXBsaWNhdGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IHNvdXJjZVBhdGg6IG5vZGUyLnBhdGgsIG5ld1BhdGgsIHR5cGU6IG5vZGUyLnR5cGUgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gZHVwbGljYXRlIGl0ZW06IiwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIENvcHkgaXRlbSBwYXRoIHRvIGNsaXBib2FyZAogICAgICovCiAgICBhc3luYyBjb3B5SXRlbShub2RlMikgewogICAgICB0aGlzLmNsaXBib2FyZFBhdGggPSBub2RlMi5wYXRoOwogICAgICB0aGlzLmNsaXBib2FyZE9wZXJhdGlvbiA9ICJjb3B5IjsKICAgIH0KICAgIC8qKgogICAgICogUGFzdGUgY29waWVkIGl0ZW0gdG8gdGFyZ2V0IGRpcmVjdG9yeQogICAgICovCiAgICBhc3luYyBwYXN0ZUl0ZW0odGFyZ2V0UGF0aCkgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQgfHwgIXRoaXMuY2xpcGJvYXJkUGF0aCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNsaXBib2FyZFBhdGguc3BsaXQoIi8iKS5wb3AoKSB8fCAicGFzdGVkIjsKICAgICAgY29uc3QgbmV3UGF0aCA9IHRhcmdldFBhdGggPT09ICIvIiA/IGAvJHtuYW1lfWAgOiBgJHt0YXJnZXRQYXRofS8ke25hbWV9YDsKICAgICAgdHJ5IHsKICAgICAgICBpZiAoIWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKHRoaXMuY2xpcGJvYXJkUGF0aCkpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlNvdXJjZSBmaWxlIG5vIGxvbmdlciBleGlzdHMiKTsKICAgICAgICAgIHRoaXMuY2xpcGJvYXJkUGF0aCA9IG51bGw7CiAgICAgICAgICB0aGlzLmNsaXBib2FyZE9wZXJhdGlvbiA9IG51bGw7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUodGhpcy5jbGlwYm9hcmRQYXRoKTsKICAgICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKG5ld1BhdGgsIGNvbnRlbnQzKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIGF3YWl0IHRoaXMuY29weURpcmVjdG9yeUNvbnRlbnRzKHRoaXMuY2xpcGJvYXJkUGF0aCwgbmV3UGF0aCk7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpOwogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIml0ZW0tcGFzdGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IHNvdXJjZVBhdGg6IHRoaXMuY2xpcGJvYXJkUGF0aCwgdGFyZ2V0UGF0aDogbmV3UGF0aCB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICAgIHRoaXMuY2xpcGJvYXJkUGF0aCA9IG51bGw7CiAgICAgICAgdGhpcy5jbGlwYm9hcmRPcGVyYXRpb24gPSBudWxsOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBwYXN0ZSBpdGVtOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBSZWN1cnNpdmVseSBjb3B5IGRpcmVjdG9yeSBjb250ZW50cyB0byBhIG5ldyBwYXRoCiAgICAgKi8KICAgIGFzeW5jIGNvcHlEaXJlY3RvcnlDb250ZW50cyhzb3VyY2VQYXRoLCBkZXN0UGF0aCkgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50Lm1rZGlyKGRlc3RQYXRoKTsKICAgICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZERpcihzb3VyY2VQYXRoKTsKICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICAgICAgY29uc3Qgc3JjRW50cnlQYXRoID0gc291cmNlUGF0aCA9PT0gIi8iID8gYC8ke2VudHJ5Lm5hbWV9YCA6IGAke3NvdXJjZVBhdGh9LyR7ZW50cnkubmFtZX1gOwogICAgICAgIGNvbnN0IGRlc3RFbnRyeVBhdGggPSBkZXN0UGF0aCA9PT0gIi8iID8gYC8ke2VudHJ5Lm5hbWV9YCA6IGAke2Rlc3RQYXRofS8ke2VudHJ5Lm5hbWV9YDsKICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuY29weURpcmVjdG9yeUNvbnRlbnRzKHNyY0VudHJ5UGF0aCwgZGVzdEVudHJ5UGF0aCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGNvbnRlbnQzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShzcmNFbnRyeVBhdGgpOwogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoZGVzdEVudHJ5UGF0aCwgY29udGVudDMpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBhd2FpdCB0aGlzLmxvYWRUcmVlKCk7CiAgICB9CiAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImV4ZWN1dGlvbkVudmlyb25tZW50IikpIHsKICAgICAgICBpZiAodGhpcy5sYXN0RXhlY3V0aW9uRW52aXJvbm1lbnQgIT09IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpIHsKICAgICAgICAgIHRoaXMuc3RvcEZpbGVXYXRjaGVyKCk7CiAgICAgICAgICB0aGlzLmxhc3RFeGVjdXRpb25FbnZpcm9ubWVudCA9IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQ7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRUcmVlKCk7CiAgICAgICAgICB0aGlzLnN0YXJ0RmlsZVdhdGNoZXIoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB0aGlzLnN0b3BGaWxlV2F0Y2hlcigpOwogICAgICBpZiAodGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0KSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVmcmVzaERlYm91bmNlVGltZW91dCk7CiAgICAgICAgdGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0ID0gbnVsbDsKICAgICAgfQogICAgfQogICAgc3RhcnRGaWxlV2F0Y2hlcigpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50IHx8IHRoaXMuZmlsZVdhdGNoZXIpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIHRoaXMuZmlsZVdhdGNoZXIgPSB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndhdGNoKCIvIiwgKF9ldmVudCwgX2ZpbGVuYW1lKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0KSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hEZWJvdW5jZVRpbWVvdXQpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpOwogICAgICAgICAgfSwgMzAwKTsKICAgICAgICB9LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLndhcm4oIkZpbGUgd2F0Y2hpbmcgbm90IHN1cHBvcnRlZDoiLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICAgIHN0b3BGaWxlV2F0Y2hlcigpIHsKICAgICAgaWYgKHRoaXMuZmlsZVdhdGNoZXIpIHsKICAgICAgICB0aGlzLmZpbGVXYXRjaGVyLnN0b3AoKTsKICAgICAgICB0aGlzLmZpbGVXYXRjaGVyID0gbnVsbDsKICAgICAgfQogICAgfQogICAgYXN5bmMgbG9hZFRyZWUoKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGlmICh0aGlzLmxvYWRUcmVlU3RhcnRlZCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMubG9hZFRyZWVTdGFydGVkID0gdHJ1ZTsKICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlOwogICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICIiOwogICAgICB0cnkgewogICAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkeSkgewogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5pbml0KCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWREaXIodGhpcy5yb290UGF0aCk7CiAgICAgICAgdGhpcy50cmVlRGF0YSA9IHRoaXMuc29ydEVudHJpZXMoZW50cmllcykubWFwKChlbnRyeSkgPT4gKHsKICAgICAgICAgIC4uLmVudHJ5LAogICAgICAgICAgbGV2ZWw6IDAsCiAgICAgICAgICBleHBhbmRlZDogZmFsc2UsCiAgICAgICAgICBjaGlsZHJlbjogZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIgPyBbXSA6IHZvaWQgMAogICAgICAgIH0pKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGBGYWlsZWQgdG8gbG9hZCBmaWxlczogJHtlcnJvcn1gOwogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIGZpbGUgdHJlZToiLCBlcnJvcik7CiAgICAgICAgdGhpcy5sb2FkVHJlZVN0YXJ0ZWQgPSBmYWxzZTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBzb3J0RW50cmllcyhlbnRyaWVzKSB7CiAgICAgIHJldHVybiBlbnRyaWVzLnNvcnQoKGE1LCBiNSkgPT4gewogICAgICAgIGlmIChhNS50eXBlICE9PSBiNS50eXBlKSB7CiAgICAgICAgICByZXR1cm4gYTUudHlwZSA9PT0gImRpcmVjdG9yeSIgPyAtMSA6IDE7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhNS5uYW1lLmxvY2FsZUNvbXBhcmUoYjUubmFtZSk7CiAgICAgIH0pOwogICAgfQogICAgYXN5bmMgcmVmcmVzaCgpIHsKICAgICAgdGhpcy5leHBhbmRlZFBhdGhzLmNsZWFyKCk7CiAgICAgIHRoaXMubG9hZFRyZWVTdGFydGVkID0gZmFsc2U7CiAgICAgIGF3YWl0IHRoaXMubG9hZFRyZWUoKTsKICAgIH0KICAgIHNlbGVjdEZpbGUocGF0aDIpIHsKICAgICAgdGhpcy5zZWxlY3RlZFBhdGggPSBwYXRoMjsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXb3Jrc3BhY2VGaWxldHJlZTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3L2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsLXByZXZpZXcuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwppbml0X3NlcnZpY2VzKCk7CnZhciBfX2VzRGVjb3JhdGU1MiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNTMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNXb3Jrc3BhY2VUZXJtaW5hbFByZXZpZXcgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfY29tbWFuZF9kZWNvcmF0b3JzOwogIGxldCBfY29tbWFuZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xpbmVzX2RlY29yYXRvcnM7CiAgbGV0IF9saW5lc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xpbmVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNXb3Jrc3BhY2VUZXJtaW5hbFByZXZpZXcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfY29tbWFuZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2xpbmVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTUyKHRoaXMsIG51bGwsIF9jb21tYW5kX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbW1hbmQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbW1hbmQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29tbWFuZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29tbWFuZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb21tYW5kX2luaXRpYWxpemVycywgX2NvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Mih0aGlzLCBudWxsLCBfbGluZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGluZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxpbmVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxpbmVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5saW5lcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9saW5lc19pbml0aWFsaXplcnMsIF9saW5lc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTUyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1dvcmtzcGFjZVRlcm1pbmFsUHJldmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmAKICAgIDxkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3CiAgICAgIC5jb21tYW5kPSR7InBucG0gaW5zdGFsbCJ9CiAgICAgIC5saW5lcz0ke1sKICAgICAgIlBhY2thZ2VzOiArNDIiLAogICAgICAiUHJvZ3Jlc3M6IHJlc29sdmVkIDE0MiwgcmV1c2VkIDE0MCwgZG93bmxvYWRlZCAyLCBhZGRlZCA0MiwgZG9uZSIsCiAgICAgICIiLAogICAgICAiZGVwZW5kZW5jaWVzOiIsCiAgICAgICIrIEBwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZSA0LjIuMyIsCiAgICAgICIrIHR5cGVzY3JpcHQgNS4zLjMiLAogICAgICAiIiwKICAgICAgIkRvbmUgaW4gMi4zcyIKICAgIF19CiAgICA+PC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3PgogIGA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICAjY29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM1Myh0aGlzLCBfY29tbWFuZF9pbml0aWFsaXplcnMsICIiKTsKICAgIC8qKgogICAgICogVGhlIGNvbW1hbmQgYmVpbmcgZGlzcGxheWVkIChzaG93biBpbiBoZWFkZXIpCiAgICAgKi8KICAgIGdldCBjb21tYW5kKCkgewogICAgICByZXR1cm4gdGhpcy4jY29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbW1hbmQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsaW5lc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTModGhpcywgX2NvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUzKHRoaXMsIF9saW5lc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAvKioKICAgICAqIE91dHB1dCBsaW5lcyB0byBkaXNwbGF5CiAgICAgKi8KICAgIGdldCBsaW5lcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xpbmVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbGluZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI2xpbmVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICB0ZXJtaW5hbCA9IChfX3J1bkluaXRpYWxpemVyczUzKHRoaXMsIF9saW5lc19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgZml0QWRkb24gPSBudWxsOwogICAgbGFzdExpbmVDb3VudCA9IDA7CiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7CiAgICB0ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXByZXZpZXcgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAudGVybWluYWwtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgMTAlKSIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1oZWFkZXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDUwJSkiKX07CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1oZWFkZXItY29tbWFuZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRhaW5lciB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICB9CgogICAgICAjeHRlcm0tY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgICAgbGVmdDogOHB4OwogICAgICAgIHJpZ2h0OiA4cHg7CiAgICAgICAgYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC8qIHh0ZXJtLmpzIHN0eWxlcyAqLwogICAgICAueHRlcm0gewogICAgICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2xpZ2EnIDA7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAueHRlcm0uZm9jdXMsCiAgICAgIC54dGVybTpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1oZWxwZXJzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHotaW5kZXg6IDU7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0taGVscGVyLXRleHRhcmVhIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgbGVmdDogLTk5OTllbTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIHotaW5kZXg6IC01OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC54dGVybSAuY29tcG9zaXRpb24tdmlldyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMzMzMiLCAiI2ZmZmZmZiIpfTsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgIH0KCiAgICAgIC54dGVybSAuY29tcG9zaXRpb24tdmlldy5hY3RpdmUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXZpZXdwb3J0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JlZW4gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JlZW4gY2FudmFzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tc2Nyb2xsLWFyZWEgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnh0ZXJtLWNoYXItbWVhc3VyZS1lbGVtZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogLTk5OTllbTsKICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAueHRlcm0gewogICAgICAgIGN1cnNvcjogdGV4dDsKICAgICAgfQoKICAgICAgLnh0ZXJtLmVuYWJsZS1tb3VzZS1ldmVudHMgewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgLnh0ZXJtLnh0ZXJtLWN1cnNvci1wb2ludGVyIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC54dGVybS5jb2x1bW4tc2VsZWN0LmZvY3VzIHsKICAgICAgICBjdXJzb3I6IGNyb3NzaGFpcjsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1hY2Nlc3NpYmlsaXR5LAogICAgICAueHRlcm0gLnh0ZXJtLW1lc3NhZ2UgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgICAgY29sb3I6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAueHRlcm0gLmxpdmUtcmVnaW9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogLTk5OTlweDsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC54dGVybS1kaW0gewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLnh0ZXJtLXVuZGVybGluZSB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIC8qIEN1c3RvbSBzY3JvbGxiYXIgZm9yIHh0ZXJtIHZpZXdwb3J0ICovCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXZpZXdwb3J0Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgOCUpIil9OwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXZpZXdwb3J0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDgwJSkiLCAiaHNsKDAgMCUgMjUlKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzAlKSIsICJoc2woMCAwJSAzNSUpIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLXByZXZpZXciPgogICAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLWhlYWRlciI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybWluYWwtaGVhZGVyLWljb24iPiQ8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybWluYWwtaGVhZGVyLWNvbW1hbmQiPiR7dGhpcy5jb21tYW5kIHx8ICJXYWl0aW5nLi4uIn08L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgaWQ9Inh0ZXJtLWNvbnRhaW5lciI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIC8qKgogICAgICogR2V0IHRlcm1pbmFsIHRoZW1lIGNvbG9ycyBiYXNlZCBvbiBicmlnaHQvZGFyayBtb2RlCiAgICAgKi8KICAgIGdldFRlcm1pbmFsVGhlbWUoaXNCcmlnaHQpIHsKICAgICAgcmV0dXJuIGlzQnJpZ2h0ID8gewogICAgICAgIGJhY2tncm91bmQ6ICIjZmZmZmZmIiwKICAgICAgICBmb3JlZ3JvdW5kOiAiIzMzMzMzMyIsCiAgICAgICAgY3Vyc29yOiAiIzMzMzMzMyIsCiAgICAgICAgY3Vyc29yQWNjZW50OiAiI2ZmZmZmZiIsCiAgICAgICAgc2VsZWN0aW9uQmFja2dyb3VuZDogInJnYmEoMCwgMCwgMCwgMC4yKSIKICAgICAgfSA6IHsKICAgICAgICBiYWNrZ3JvdW5kOiAiIzAwMDAwMCIsCiAgICAgICAgZm9yZWdyb3VuZDogIiNjY2NjY2MiLAogICAgICAgIGN1cnNvcjogIiNjY2NjY2MiLAogICAgICAgIGN1cnNvckFjY2VudDogIiMwMDAwMDAiLAogICAgICAgIHNlbGVjdGlvbkJhY2tncm91bmQ6ICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikiCiAgICAgIH07CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LmdldEVsZW1lbnRCeUlkKCJ4dGVybS1jb250YWluZXIiKTsKICAgICAgaWYgKCFjb250YWluZXIpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBkb210b29sc0luc3RhbmNlID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGNvbnN0IGlzQnJpZ2h0ID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIuZ29CcmlnaHRCb29sZWFuOwogICAgICBjb25zdCBsaWJMb2FkZXIgPSBEZWVzU2VydmljZUxpYkxvYWRlci5nZXRJbnN0YW5jZSgpOwogICAgICBjb25zdCBbeHRlcm1CdW5kbGUsIGZpdEFkZG9uQnVuZGxlXSA9IGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgICBsaWJMb2FkZXIubG9hZFh0ZXJtKCksCiAgICAgICAgbGliTG9hZGVyLmxvYWRYdGVybUZpdEFkZG9uKCkKICAgICAgXSk7CiAgICAgIHRoaXMudGVybWluYWwgPSBuZXcgeHRlcm1CdW5kbGUuVGVybWluYWwoewogICAgICAgIGNvbnZlcnRFb2w6IHRydWUsCiAgICAgICAgY3Vyc29yQmxpbms6IGZhbHNlLAogICAgICAgIGRpc2FibGVTdGRpbjogdHJ1ZSwKICAgICAgICBmb250U2l6ZTogMTIsCiAgICAgICAgZm9udEZhbWlseTogIidTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2UiLAogICAgICAgIHRoZW1lOiB0aGlzLmdldFRlcm1pbmFsVGhlbWUoaXNCcmlnaHQpLAogICAgICAgIHNjcm9sbGJhY2s6IDFlMwogICAgICB9KTsKICAgICAgdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZ29CcmlnaHQpID0+IHsKICAgICAgICBpZiAodGhpcy50ZXJtaW5hbCkgewogICAgICAgICAgdGhpcy50ZXJtaW5hbC5vcHRpb25zLnRoZW1lID0gdGhpcy5nZXRUZXJtaW5hbFRoZW1lKGdvQnJpZ2h0KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLmZpdEFkZG9uID0gbmV3IGZpdEFkZG9uQnVuZGxlLkZpdEFkZG9uKCk7CiAgICAgIHRoaXMudGVybWluYWwubG9hZEFkZG9uKHRoaXMuZml0QWRkb24pOwogICAgICB0aGlzLnRlcm1pbmFsLm9wZW4oY29udGFpbmVyKTsKICAgICAgdGhpcy5maXRBZGRvbi5maXQoKTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7CiAgICAgICAgaWYgKHRoaXMuZml0QWRkb24pIHsKICAgICAgICAgIHRoaXMuZml0QWRkb24uZml0KCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcik7CiAgICAgIHRoaXMud3JpdGVOZXdMaW5lcygpOwogICAgfQogICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygibGluZXMiKSkgewogICAgICAgIHRoaXMud3JpdGVOZXdMaW5lcygpOwogICAgICB9CiAgICB9CiAgICB3cml0ZU5ld0xpbmVzKCkgewogICAgICBpZiAoIXRoaXMudGVybWluYWwpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBuZXdMaW5lcyA9IHRoaXMubGluZXMuc2xpY2UodGhpcy5sYXN0TGluZUNvdW50KTsKICAgICAgZm9yIChjb25zdCBsaW5lIG9mIG5ld0xpbmVzKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC53cml0ZWxuKGxpbmUpOwogICAgICB9CiAgICAgIHRoaXMubGFzdExpbmVDb3VudCA9IHRoaXMubGluZXMubGVuZ3RoOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKSB7CiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbikgewogICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMudGVybWluYWwpIHsKICAgICAgICB0aGlzLnRlcm1pbmFsLmRpc3Bvc2UoKTsKICAgICAgICB0aGlzLnRlcm1pbmFsID0gbnVsbDsKICAgICAgfQogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgfQogICAgLyoqCiAgICAgKiBBZGQgYSBuZXcgbGluZSB0byB0aGUgb3V0cHV0CiAgICAgKi8KICAgIGFkZExpbmUobGluZSkgewogICAgICB0aGlzLmxpbmVzID0gWy4uLnRoaXMubGluZXMsIGxpbmVdOwogICAgfQogICAgLyoqCiAgICAgKiBDbGVhciBhbGwgb3V0cHV0IGxpbmVzCiAgICAgKi8KICAgIGNsZWFyKCkgewogICAgICB0aGlzLmxpbmVzID0gW107CiAgICAgIHRoaXMubGFzdExpbmVDb3VudCA9IDA7CiAgICAgIGlmICh0aGlzLnRlcm1pbmFsKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC5jbGVhcigpOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczUzKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlVGVybWluYWxQcmV2aWV3MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLWJvdHRvbWJhci9kZWVzLXdvcmtzcGFjZS1ib3R0b21iYXIuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlNTMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczU0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV29ya3NwYWNlQm90dG9tYmFyID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13b3Jrc3BhY2UtYm90dG9tYmFyIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9yczsKICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NjcmlwdHNfZGVjb3JhdG9yczsKICBsZXQgX3NjcmlwdHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zY3JpcHRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wYWNrYWdlU3RhdHVzX2RlY29yYXRvcnM7CiAgbGV0IF9wYWNrYWdlU3RhdHVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGFja2FnZVN0YXR1c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0ZGF0ZWRQYWNrYWdlc19kZWNvcmF0b3JzOwogIGxldCBfb3V0ZGF0ZWRQYWNrYWdlc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dGRhdGVkUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzQ2hlY2tpbmdQYWNrYWdlc19kZWNvcmF0b3JzOwogIGxldCBfaXNDaGVja2luZ1BhY2thZ2VzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNDaGVja2luZ1BhY2thZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNXb3Jrc3BhY2VCb3R0b21iYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9zY3JpcHRzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9wYWNrYWdlU3RhdHVzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9vdXRkYXRlZFBhY2thZ2VzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc0NoZWNraW5nUGFja2FnZXNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlNTModGhpcywgbnVsbCwgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImV4ZWN1dGlvbkVudmlyb25tZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJleGVjdXRpb25FbnZpcm9ubWVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5leGVjdXRpb25FbnZpcm9ubWVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZXhlY3V0aW9uRW52aXJvbm1lbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Myh0aGlzLCBudWxsLCBfc2NyaXB0c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzY3JpcHRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzY3JpcHRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNjcmlwdHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNjcmlwdHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2NyaXB0c19pbml0aWFsaXplcnMsIF9zY3JpcHRzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTModGhpcywgbnVsbCwgX3BhY2thZ2VTdGF0dXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicGFja2FnZVN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGFja2FnZVN0YXR1cyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wYWNrYWdlU3RhdHVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wYWNrYWdlU3RhdHVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BhY2thZ2VTdGF0dXNfaW5pdGlhbGl6ZXJzLCBfcGFja2FnZVN0YXR1c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTUzKHRoaXMsIG51bGwsIF9vdXRkYXRlZFBhY2thZ2VzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm91dGRhdGVkUGFja2FnZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm91dGRhdGVkUGFja2FnZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3V0ZGF0ZWRQYWNrYWdlcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3V0ZGF0ZWRQYWNrYWdlcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vdXRkYXRlZFBhY2thZ2VzX2luaXRpYWxpemVycywgX291dGRhdGVkUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Myh0aGlzLCBudWxsLCBfaXNDaGVja2luZ1BhY2thZ2VzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzQ2hlY2tpbmdQYWNrYWdlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNDaGVja2luZ1BhY2thZ2VzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzQ2hlY2tpbmdQYWNrYWdlcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNDaGVja2luZ1BhY2thZ2VzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzQ2hlY2tpbmdQYWNrYWdlc19pbml0aWFsaXplcnMsIF9pc0NoZWNraW5nUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1MyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXb3Jrc3BhY2VCb3R0b21iYXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgICNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM1NCh0aGlzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBudWxsKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgZXhlY3V0aW9uRW52aXJvbm1lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KHZhbHVlMikgewogICAgICB0aGlzLiNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NjcmlwdHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTQodGhpcywgX3NjcmlwdHNfaW5pdGlhbGl6ZXJzLCB7fSkpOwogICAgLy8gU2NyaXB0IHJ1bm5lciBzdGF0ZQogICAgZ2V0IHNjcmlwdHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzY3JpcHRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2NyaXB0cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2NyaXB0c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3BhY2thZ2VTdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9zY3JpcHRzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1NCh0aGlzLCBfcGFja2FnZVN0YXR1c19pbml0aWFsaXplcnMsICJpZGxlIikpOwogICAgLy8gUGFja2FnZSBjaGVja2VyIHN0YXRlCiAgICBnZXQgcGFja2FnZVN0YXR1cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BhY2thZ2VTdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwYWNrYWdlU3RhdHVzKHZhbHVlMikgewogICAgICB0aGlzLiNwYWNrYWdlU3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjb3V0ZGF0ZWRQYWNrYWdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTQodGhpcywgX3BhY2thZ2VTdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9vdXRkYXRlZFBhY2thZ2VzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBvdXRkYXRlZFBhY2thZ2VzKCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0ZGF0ZWRQYWNrYWdlc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG91dGRhdGVkUGFja2FnZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI291dGRhdGVkUGFja2FnZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0NoZWNraW5nUGFja2FnZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9vdXRkYXRlZFBhY2thZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1NCh0aGlzLCBfaXNDaGVja2luZ1BhY2thZ2VzX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0NoZWNraW5nUGFja2FnZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc0NoZWNraW5nUGFja2FnZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0NoZWNraW5nUGFja2FnZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzQ2hlY2tpbmdQYWNrYWdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gVHJhY2sgaWYgd2UgaGF2ZSBhIHBlbmRpbmcgcGFja2FnZSB1cGRhdGUgdGhhdCBzaG91bGQgdHJpZ2dlciByZWZyZXNoCiAgICBwZW5kaW5nUGFja2FnZVVwZGF0ZSA9IChfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9pc0NoZWNraW5nUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMpLCBmYWxzZSk7CiAgICAvLyBCb3VuZCBoYW5kbGVyIGZvciBwcm9jZXNzLWNvbXBsZXRlIGV2ZW50cwogICAgaGFuZGxlUHJvY2Vzc0NvbXBsZXRlID0gKGUxMSkgPT4gewogICAgICBpZiAodGhpcy5wZW5kaW5nUGFja2FnZVVwZGF0ZSkgewogICAgICAgIHRoaXMucGVuZGluZ1BhY2thZ2VVcGRhdGUgPSBmYWxzZTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2hlY2tQYWNrYWdlcygpLCA1MDApOwogICAgICB9CiAgICB9OwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5ib3R0b20tYmFyIHsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICAgIGdhcDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NCUpIiwgImhzbCgwIDAlIDYlKSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBjb2xvciAwLjE1cyBlYXNlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC53aWRnZXQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQgZGVlcy1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLndpZGdldC1zZXBhcmF0b3IgewogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4MCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgLndpZGdldC5ydW5uaW5nIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA0NSUpIiwgImhzbCgyMTAgMTAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0LnVwLXRvLWRhdGUgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0MiA3MCUgMzUlKSIsICJoc2woMTQyIDcwJSA1MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0LnVwZGF0ZXMtYXZhaWxhYmxlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgzOCA5MiUgNDUlKSIsICJoc2woMzggOTIlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQuZXJyb3IgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgZnJvbSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9CiAgICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9CiAgICAgIH0KCiAgICAgIC5zcGlubmluZyB7CiAgICAgICAgYW5pbWF0aW9uOiBzcGluIDFzIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgLnNwYWNlciB7CiAgICAgICAgZmxleDogMTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJib3R0b20tYmFyIj4KICAgICAgICA8IS0tIFNjcmlwdCBSdW5uZXIgV2lkZ2V0IC0tPgogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJ3aWRnZXQiCiAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZVNjcmlwdENsaWNrfQogICAgICAgICAgdGl0bGU9IlJ1biBzY3JpcHQiCiAgICAgICAgPgogICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAuaWNvbj0keyJsdWNpZGU6cGxheSJ9CiAgICAgICAgICAgIGljb25TaXplPSIxMiIKICAgICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgICAgIDxzcGFuPlNjcmlwdHM8L3NwYW4+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1zZXBhcmF0b3IiPjwvZGl2PgoKICAgICAgICA8IS0tIFBhY2thZ2UgQ2hlY2tlciBXaWRnZXQgLS0+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9IndpZGdldCAke3RoaXMuZ2V0UGFja2FnZVN0YXR1c0NsYXNzKCl9IgogICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVQYWNrYWdlQ2xpY2t9CiAgICAgICAgICB0aXRsZT0iJHt0aGlzLmdldFBhY2thZ2VUb29sdGlwKCl9IgogICAgICAgID4KICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgLmljb249JHt0aGlzLmdldFBhY2thZ2VJY29uKCl9CiAgICAgICAgICAgIGljb25TaXplPSIxMiIKICAgICAgICAgICAgY2xhc3M9IiR7dGhpcy5pc0NoZWNraW5nUGFja2FnZXMgPyAic3Bpbm5pbmciIDogIiJ9IgogICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+JHt0aGlzLmdldFBhY2thZ2VTdGF0dXNUZXh0KCl9PC9zcGFuPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZXIiPjwvZGl2PgoKICAgICAgICA8IS0tIEZ1dHVyZSB3aWRnZXRzIGNhbiBiZSBhZGRlZCBoZXJlIC0tPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInByb2Nlc3MtY29tcGxldGUiLCB0aGlzLmhhbmRsZVByb2Nlc3NDb21wbGV0ZSk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2Nlc3MtY29tcGxldGUiLCB0aGlzLmhhbmRsZVByb2Nlc3NDb21wbGV0ZSk7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGF3YWl0IHRoaXMubG9hZFNjcmlwdHMoKTsKICAgICAgYXdhaXQgdGhpcy5jaGVja1BhY2thZ2VzKCk7CiAgICB9CiAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImV4ZWN1dGlvbkVudmlyb25tZW50IikgJiYgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkgewogICAgICAgIGF3YWl0IHRoaXMubG9hZFNjcmlwdHMoKTsKICAgICAgICBhd2FpdCB0aGlzLmNoZWNrUGFja2FnZXMoKTsKICAgICAgfQogICAgfQogICAgLy8gPT09PT09PT09PSBTY3JpcHQgUnVubmVyID09PT09PT09PT0KICAgIGFzeW5jIGxvYWRTY3JpcHRzKCkgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIGNvbnN0IHBhY2thZ2VKc29uRXhpc3RzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoIi9wYWNrYWdlLmpzb24iKTsKICAgICAgICBpZiAoIXBhY2thZ2VKc29uRXhpc3RzKSB7CiAgICAgICAgICB0aGlzLnNjcmlwdHMgPSB7fTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKCIvcGFja2FnZS5qc29uIik7CiAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQzKTsKICAgICAgICB0aGlzLnNjcmlwdHMgPSBwYWNrYWdlSnNvbi5zY3JpcHRzIHx8IHt9OwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGxvYWQgc2NyaXB0cyBmcm9tIHBhY2thZ2UuanNvbjoiLCBlcnJvcik7CiAgICAgICAgdGhpcy5zY3JpcHRzID0ge307CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGhhbmRsZVNjcmlwdENsaWNrKGUxMSkgewogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnN0IHNjcmlwdE5hbWVzID0gT2JqZWN0LmtleXModGhpcy5zY3JpcHRzKTsKICAgICAgaWYgKHNjcmlwdE5hbWVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBtZW51SXRlbXMgPSBzY3JpcHROYW1lcy5tYXAoKG5hbWUpID0+ICh7CiAgICAgICAgbmFtZSwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0ZXJtaW5hbCIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBhd2FpdCB0aGlzLnJ1blNjcmlwdChuYW1lKTsKICAgICAgICB9CiAgICAgIH0pKTsKICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgIH0KICAgIGFzeW5jIHJ1blNjcmlwdChzY3JpcHROYW1lKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGRldGFpbCA9IHsKICAgICAgICB0eXBlOiAic2NyaXB0IiwKICAgICAgICBsYWJlbDogc2NyaXB0TmFtZSwKICAgICAgICBjb21tYW5kOiAicG5wbSIsCiAgICAgICAgYXJnczogWyJydW4iLCBzY3JpcHROYW1lXSwKICAgICAgICBtZXRhZGF0YTogeyBzY3JpcHROYW1lIH0KICAgICAgfTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicnVuLXByb2Nlc3MiLCB7CiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZSwKICAgICAgICBkZXRhaWwKICAgICAgfSkpOwogICAgfQogICAgLy8gPT09PT09PT09PSBQYWNrYWdlIENoZWNrZXIgPT09PT09PT09PQogICAgYXN5bmMgY2hlY2tQYWNrYWdlcygpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgdGhpcy5wYWNrYWdlU3RhdHVzID0gImlkbGUiOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIGNvbnN0IHBhY2thZ2VKc29uRXhpc3RzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoIi9wYWNrYWdlLmpzb24iKTsKICAgICAgICBpZiAoIXBhY2thZ2VKc29uRXhpc3RzKSB7CiAgICAgICAgICB0aGlzLnBhY2thZ2VTdGF0dXMgPSAiaWRsZSI7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMucGFja2FnZVN0YXR1cyA9ICJjaGVja2luZyI7CiAgICAgICAgdGhpcy5pc0NoZWNraW5nUGFja2FnZXMgPSB0cnVlOwogICAgICAgIGNvbnN0IHByb2Nlc3M0ID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5zcGF3bigicG5wbSIsIFsib3V0ZGF0ZWQiLCAiLS1qc29uIl0pOwogICAgICAgIGxldCBvdXRwdXQgPSAiIjsKICAgICAgICBjb25zdCBvdXRwdXRSZWFkZXIgPSBwcm9jZXNzNC5vdXRwdXQuZ2V0UmVhZGVyKCk7CiAgICAgICAgY29uc3QgcmVhZE91dHB1dCA9IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZTogdmFsdWUyIH0gPSBhd2FpdCBvdXRwdXRSZWFkZXIucmVhZCgpOwogICAgICAgICAgICAgIGlmIChkb25lKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgb3V0cHV0ICs9IHZhbHVlMjsKICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICByZWFkT3V0cHV0KCk7CiAgICAgICAgY29uc3QgZXhpdENvZGUgPSBhd2FpdCBQcm9taXNlLnJhY2UoWwogICAgICAgICAgcHJvY2VzczQuZXhpdCwKICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlMigtMSksIDFlNCkpCiAgICAgICAgXSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IG91dHB1dFJlYWRlci5jYW5jZWwoKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgICAgaWYgKGV4aXRDb2RlID09PSAtMSkgewogICAgICAgICAgY29uc29sZS53YXJuKCJQYWNrYWdlIGNoZWNrIHRpbWVkIG91dCIpOwogICAgICAgICAgdGhpcy5wYWNrYWdlU3RhdHVzID0gImVycm9yIjsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGV4aXRDb2RlID09PSAwKSB7CiAgICAgICAgICB0aGlzLnBhY2thZ2VTdGF0dXMgPSAidXAtdG8tZGF0ZSI7CiAgICAgICAgICB0aGlzLm91dGRhdGVkUGFja2FnZXMgPSBbXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3Qgb3V0ZGF0ZWREYXRhID0gSlNPTi5wYXJzZShvdXRwdXQpOwogICAgICAgICAgICB0aGlzLm91dGRhdGVkUGFja2FnZXMgPSB0aGlzLnBhcnNlT3V0ZGF0ZWRQYWNrYWdlcyhvdXRkYXRlZERhdGEpOwogICAgICAgICAgICB0aGlzLnBhY2thZ2VTdGF0dXMgPSB0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoID4gMCA/ICJ1cGRhdGVzLWF2YWlsYWJsZSIgOiAidXAtdG8tZGF0ZSI7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgdGhpcy5wYWNrYWdlU3RhdHVzID0gInVwZGF0ZXMtYXZhaWxhYmxlIjsKICAgICAgICAgICAgdGhpcy5vdXRkYXRlZFBhY2thZ2VzID0gW107CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGNoZWNrIGZvciBwYWNrYWdlIHVwZGF0ZXM6IiwgZXJyb3IpOwogICAgICAgIHRoaXMucGFja2FnZVN0YXR1cyA9ICJlcnJvciI7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgdGhpcy5pc0NoZWNraW5nUGFja2FnZXMgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgcGFyc2VPdXRkYXRlZFBhY2thZ2VzKGRhdGEpIHsKICAgICAgY29uc3QgcGFja2FnZXMgPSBbXTsKICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAib2JqZWN0IiAmJiBkYXRhICE9PSBudWxsKSB7CiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgaW5mb10gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHsKICAgICAgICAgIGNvbnN0IHBrZ0luZm8gPSBpbmZvOwogICAgICAgICAgcGFja2FnZXMucHVzaCh7CiAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgIGN1cnJlbnQ6IHBrZ0luZm8uY3VycmVudCB8fCAidW5rbm93biIsCiAgICAgICAgICAgIHdhbnRlZDogcGtnSW5mby53YW50ZWQgfHwgcGtnSW5mby5jdXJyZW50IHx8ICJ1bmtub3duIiwKICAgICAgICAgICAgbGF0ZXN0OiBwa2dJbmZvLmxhdGVzdCB8fCBwa2dJbmZvLndhbnRlZCB8fCAidW5rbm93biIsCiAgICAgICAgICAgIHR5cGU6IHBrZ0luZm8uZGVwZW5kZW5jeVR5cGUgPT09ICJkZXZEZXBlbmRlbmNpZXMiID8gImRldkRlcGVuZGVuY2llcyIgOiAiZGVwZW5kZW5jaWVzIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBwYWNrYWdlczsKICAgIH0KICAgIGFzeW5jIGhhbmRsZVBhY2thZ2VDbGljayhlMTEpIHsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb25zdCBtZW51SXRlbXMgPSBbXTsKICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgIG5hbWU6IHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzID8gIkNoZWNraW5nLi4uIiA6ICJDaGVjayBmb3IgdXBkYXRlcyIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6cmVmcmVzaEN3IiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmICh0aGlzLmlzQ2hlY2tpbmdQYWNrYWdlcykKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgZGV0YWlsID0gewogICAgICAgICAgICB0eXBlOiAicGFja2FnZS11cGRhdGUiLAogICAgICAgICAgICBsYWJlbDogImNoZWNrIHBhY2thZ2VzIiwKICAgICAgICAgICAgY29tbWFuZDogInBucG0iLAogICAgICAgICAgICBhcmdzOiBbIm91dGRhdGVkIl0KICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJydW4tcHJvY2VzcyIsIHsKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgICAgIGRldGFpbAogICAgICAgICAgfSkpOwogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNoZWNrUGFja2FnZXMoKSwgM2UzKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBpZiAodGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aCA+IDApIHsKICAgICAgICBtZW51SXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSk7CiAgICAgICAgY29uc3QgZGlzcGxheVBhY2thZ2VzID0gdGhpcy5vdXRkYXRlZFBhY2thZ2VzLnNsaWNlKDAsIDEwKTsKICAgICAgICBmb3IgKGNvbnN0IHBrZyBvZiBkaXNwbGF5UGFja2FnZXMpIHsKICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKHsKICAgICAgICAgICAgbmFtZTogYCR7cGtnLm5hbWV9OiAke3BrZy5jdXJyZW50fSBcdTIxOTIgJHtwa2cubGF0ZXN0fWAsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnBhY2thZ2UiLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVBhY2thZ2UocGtnLm5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGggPiAxMCkgewogICAgICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgICAgICBuYW1lOiBgLi4uIGFuZCAke3RoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGggLSAxMH0gbW9yZWAsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOm1vcmVIb3Jpem9udGFsIiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBtZW51SXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSk7CiAgICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgICAgbmFtZTogIlVwZGF0ZSBhbGwgcGFja2FnZXMiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6YXJyb3dVcENpcmNsZSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVBbGxQYWNrYWdlcygpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGF3YWl0IERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhlMTEsIG1lbnVJdGVtcyk7CiAgICB9CiAgICBhc3luYyB1cGRhdGVQYWNrYWdlKHBhY2thZ2VOYW1lKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMucGVuZGluZ1BhY2thZ2VVcGRhdGUgPSB0cnVlOwogICAgICBjb25zdCBkZXRhaWwgPSB7CiAgICAgICAgdHlwZTogInBhY2thZ2UtdXBkYXRlIiwKICAgICAgICBsYWJlbDogYHVwZGF0ZSAke3BhY2thZ2VOYW1lfWAsCiAgICAgICAgY29tbWFuZDogInBucG0iLAogICAgICAgIGFyZ3M6IFsidXBkYXRlIiwgIi0tbGF0ZXN0IiwgcGFja2FnZU5hbWVdLAogICAgICAgIG1ldGFkYXRhOiB7IHBhY2thZ2VOYW1lIH0KICAgICAgfTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicnVuLXByb2Nlc3MiLCB7CiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZSwKICAgICAgICBkZXRhaWwKICAgICAgfSkpOwogICAgfQogICAgYXN5bmMgdXBkYXRlQWxsUGFja2FnZXMoKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMucGVuZGluZ1BhY2thZ2VVcGRhdGUgPSB0cnVlOwogICAgICBjb25zdCBkZXRhaWwgPSB7CiAgICAgICAgdHlwZTogInBhY2thZ2UtdXBkYXRlIiwKICAgICAgICBsYWJlbDogInVwZGF0ZSBhbGwiLAogICAgICAgIGNvbW1hbmQ6ICJwbnBtIiwKICAgICAgICBhcmdzOiBbInVwZGF0ZSIsICItLWxhdGVzdCJdCiAgICAgIH07CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInJ1bi1wcm9jZXNzIiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgZGV0YWlsCiAgICAgIH0pKTsKICAgIH0KICAgIC8vID09PT09PT09PT0gSGVscGVyIE1ldGhvZHMgPT09PT09PT09PQogICAgZ2V0UGFja2FnZVN0YXR1c0NsYXNzKCkgewogICAgICBpZiAodGhpcy5pc0NoZWNraW5nUGFja2FnZXMpCiAgICAgICAgcmV0dXJuICIiOwogICAgICByZXR1cm4gdGhpcy5wYWNrYWdlU3RhdHVzOwogICAgfQogICAgZ2V0UGFja2FnZUljb24oKSB7CiAgICAgIGlmICh0aGlzLmlzQ2hlY2tpbmdQYWNrYWdlcykKICAgICAgICByZXR1cm4gImx1Y2lkZTpsb2FkZXIyIjsKICAgICAgc3dpdGNoICh0aGlzLnBhY2thZ2VTdGF0dXMpIHsKICAgICAgICBjYXNlICJ1cC10by1kYXRlIjoKICAgICAgICAgIHJldHVybiAibHVjaWRlOmNoZWNrQ2lyY2xlIjsKICAgICAgICBjYXNlICJ1cGRhdGVzLWF2YWlsYWJsZSI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTphbGVydENpcmNsZSI7CiAgICAgICAgY2FzZSAiZXJyb3IiOgogICAgICAgICAgcmV0dXJuICJsdWNpZGU6eENpcmNsZSI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiAibHVjaWRlOnBhY2thZ2UiOwogICAgICB9CiAgICB9CiAgICBnZXRQYWNrYWdlU3RhdHVzVGV4dCgpIHsKICAgICAgaWYgKHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzKQogICAgICAgIHJldHVybiAiQ2hlY2tpbmcuLi4iOwogICAgICBzd2l0Y2ggKHRoaXMucGFja2FnZVN0YXR1cykgewogICAgICAgIGNhc2UgInVwLXRvLWRhdGUiOgogICAgICAgICAgcmV0dXJuICJVcCB0byBkYXRlIjsKICAgICAgICBjYXNlICJ1cGRhdGVzLWF2YWlsYWJsZSI6CiAgICAgICAgICByZXR1cm4gYCR7dGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aH0gdXBkYXRlJHt0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoICE9PSAxID8gInMiIDogIiJ9YDsKICAgICAgICBjYXNlICJlcnJvciI6CiAgICAgICAgICByZXR1cm4gIkNoZWNrIGZhaWxlZCI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiAiUGFja2FnZXMiOwogICAgICB9CiAgICB9CiAgICBnZXRQYWNrYWdlVG9vbHRpcCgpIHsKICAgICAgaWYgKHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzKQogICAgICAgIHJldHVybiAiQ2hlY2tpbmcgZm9yIHBhY2thZ2UgdXBkYXRlcy4uLiI7CiAgICAgIHN3aXRjaCAodGhpcy5wYWNrYWdlU3RhdHVzKSB7CiAgICAgICAgY2FzZSAidXAtdG8tZGF0ZSI6CiAgICAgICAgICByZXR1cm4gIkFsbCBwYWNrYWdlcyBhcmUgdXAgdG8gZGF0ZSI7CiAgICAgICAgY2FzZSAidXBkYXRlcy1hdmFpbGFibGUiOgogICAgICAgICAgcmV0dXJuIGAke3RoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGh9IHBhY2thZ2UgdXBkYXRlJHt0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoICE9PSAxID8gInMiIDogIiJ9IGF2YWlsYWJsZWA7CiAgICAgICAgY2FzZSAiZXJyb3IiOgogICAgICAgICAgcmV0dXJuICJGYWlsZWQgdG8gY2hlY2sgZm9yIHVwZGF0ZXMuIENsaWNrIHRvIHJldHJ5LiI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiAiQ2xpY2sgdG8gY2hlY2sgZm9yIHBhY2thZ2UgdXBkYXRlcyI7CiAgICAgIH0KICAgIH0KICAgIC8vID09PT09PT09PT0gUHVibGljIE1ldGhvZHMgPT09PT09PT09PQogICAgLyoqCiAgICAgKiBNYW51YWxseSB0cmlnZ2VyIGEgcGFja2FnZSBjaGVjawogICAgICovCiAgICBhc3luYyByZWZyZXNoUGFja2FnZVN0YXR1cygpIHsKICAgICAgYXdhaXQgdGhpcy5jaGVja1BhY2thZ2VzKCk7CiAgICB9CiAgICAvKioKICAgICAqIE1hbnVhbGx5IHJlbG9hZCBzY3JpcHRzIGZyb20gcGFja2FnZS5qc29uCiAgICAgKi8KICAgIGFzeW5jIHJlZnJlc2hTY3JpcHRzKCkgewogICAgICBhd2FpdCB0aGlzLmxvYWRTY3JpcHRzKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczU0KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlQm90dG9tYmFyMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlL3R5cGVzY3JpcHQtaW50ZWxsaXNlbnNlLmpzCnZhciBUeXBlU2NyaXB0SW50ZWxsaVNlbnNlTWFuYWdlciA9IGNsYXNzIHsKICBsb2FkZWRMaWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICBub3RGb3VuZFBhY2thZ2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAvLyBQYWNrYWdlcyBjaGVja2VkIGJ1dCBub3QgZm91bmQKICBtb25hY29JbnN0YW5jZSA9IG51bGw7CiAgZXhlY3V0aW9uRW52aXJvbm1lbnQgPSBudWxsOwogIC8vIENhY2hlIG9mIGZpbGUgY29udGVudHMgZm9yIHN5bmNocm9ub3VzIGFjY2VzcyBhbmQgbW9kdWxlIHJlc29sdXRpb24KICBmaWxlQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIC8vIFRyYWNrIGV4dHJhIGxpYnMgYWRkZWQgZm9yIGNsZWFudXAKICBhZGRlZEV4dHJhTGlicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgLyoqCiAgICogR2V0IFR5cGVTY3JpcHQgQVBJIHdpdGggcHJvcGVyIHR5cGluZyBmb3IgTW9uYWNvIDAuNTUrCiAgICovCiAgZ2V0IHRzQXBpKCkgewogICAgaWYgKCF0aGlzLm1vbmFjb0luc3RhbmNlKQogICAgICByZXR1cm4gbnVsbDsKICAgIHJldHVybiB0aGlzLm1vbmFjb0luc3RhbmNlLmxhbmd1YWdlcy50eXBlc2NyaXB0OwogIH0KICAvKioKICAgKiBJbml0aWFsaXplIHdpdGggTW9uYWNvIGFuZCBleGVjdXRpb24gZW52aXJvbm1lbnQKICAgKi8KICBhc3luYyBpbml0KG1vbmFjb0luc3QsIGVudjIpIHsKICAgIHRoaXMubW9uYWNvSW5zdGFuY2UgPSBtb25hY29JbnN0OwogICAgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCA9IGVudjI7CiAgICB0aGlzLmNvbmZpZ3VyZUNvbXBpbGVyT3B0aW9ucygpOwogICAgYXdhaXQgdGhpcy5sb2FkQWxsUHJvamVjdEZpbGVzKCk7CiAgfQogIC8qKgogICAqIFJlY3Vyc2l2ZWx5IGxvYWQgYWxsIC50cy8uanMgZmlsZXMgZnJvbSB0aGUgdmlydHVhbCBmaWxlc3lzdGVtIGludG8gTW9uYWNvCiAgICovCiAgYXN5bmMgbG9hZEFsbFByb2plY3RGaWxlcygpIHsKICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgcmV0dXJuOwogICAgYXdhaXQgdGhpcy5sb2FkRmlsZXNGcm9tRGlyZWN0b3J5KCIvIik7CiAgfQogIC8qKgogICAqIFJlY3Vyc2l2ZWx5IGxvYWQgZmlsZXMgZnJvbSBhIGRpcmVjdG9yeQogICAqLwogIGFzeW5jIGxvYWRGaWxlc0Zyb21EaXJlY3RvcnkoZGlyUGF0aCkgewogICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICByZXR1cm47CiAgICB0cnkgewogICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKGRpclBhdGgpOwogICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHsKICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGRpclBhdGggPT09ICIvIiA/IGAvJHtlbnRyeS5uYW1lfWAgOiBgJHtkaXJQYXRofS8ke2VudHJ5Lm5hbWV9YDsKICAgICAgICBpZiAoZW50cnkubmFtZSA9PT0gIm5vZGVfbW9kdWxlcyIpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEZpbGVzRnJvbURpcmVjdG9yeShmdWxsUGF0aCk7CiAgICAgICAgfSBlbHNlIGlmIChlbnRyeS50eXBlID09PSAiZmlsZSIpIHsKICAgICAgICAgIGNvbnN0IGV4dCA9IGVudHJ5Lm5hbWUuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGlmIChleHQgPT09ICJ0cyIgfHwgZXh0ID09PSAidHN4IiB8fCBleHQgPT09ICJqcyIgfHwgZXh0ID09PSAianN4IikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShmdWxsUGF0aCk7CiAgICAgICAgICAgICAgdGhpcy5hZGRGaWxlTW9kZWwoZnVsbFBhdGgsIGNvbnRlbnQzKTsKICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggewogICAgfQogIH0KICBjb25maWd1cmVDb21waWxlck9wdGlvbnMoKSB7CiAgICBjb25zdCB0cyA9IHRoaXMudHNBcGk7CiAgICBpZiAoIXRzKQogICAgICByZXR1cm47CiAgICB0cy50eXBlc2NyaXB0RGVmYXVsdHMuc2V0Q29tcGlsZXJPcHRpb25zKHsKICAgICAgdGFyZ2V0OiB0cy5TY3JpcHRUYXJnZXQuRVMyMDIwLAogICAgICBtb2R1bGU6IHRzLk1vZHVsZUtpbmQuRVNOZXh0LAogICAgICAvLyBVc2UgQnVuZGxlciByZXNvbHV0aW9uIGlmIGF2YWlsYWJsZSAoTW9uYWNvIDAuNDUrKSwgZmFsbGJhY2sgdG8gTm9kZUpzCiAgICAgIG1vZHVsZVJlc29sdXRpb246IHRzLk1vZHVsZVJlc29sdXRpb25LaW5kLkJ1bmRsZXIgPz8gdHMuTW9kdWxlUmVzb2x1dGlvbktpbmQuTm9kZUpzLAogICAgICBhbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzOiB0cnVlLAogICAgICBlc01vZHVsZUludGVyb3A6IHRydWUsCiAgICAgIHN0cmljdDogdHJ1ZSwKICAgICAgbm9FbWl0OiB0cnVlLAogICAgICBhbGxvd0pzOiB0cnVlLAogICAgICBjaGVja0pzOiBmYWxzZSwKICAgICAgYWxsb3dOb25Uc0V4dGVuc2lvbnM6IHRydWUsCiAgICAgIGxpYjogWyJlczIwMjAiLCAiZG9tIiwgImRvbS5pdGVyYWJsZSJdLAogICAgICAvLyBTZXQgYmFzZVVybCB0byByb290IGZvciByZXNvbHZpbmcgYWJzb2x1dGUgaW1wb3J0cwogICAgICBiYXNlVXJsOiAiLyIsCiAgICAgIC8vIEFsbG93IGltcG9ydGluZyAudHMgZXh0ZW5zaW9ucyBkaXJlY3RseSAodXNlZnVsIGZvciBzb21lIHNldHVwcykKICAgICAgYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnM6IHRydWUsCiAgICAgIC8vIFJlc29sdmUgSlNPTiBtb2R1bGVzCiAgICAgIHJlc29sdmVKc29uTW9kdWxlOiB0cnVlCiAgICB9KTsKICAgIHRzLnR5cGVzY3JpcHREZWZhdWx0cy5zZXREaWFnbm9zdGljc09wdGlvbnMoewogICAgICBub1NlbWFudGljVmFsaWRhdGlvbjogZmFsc2UsCiAgICAgIG5vU3ludGF4VmFsaWRhdGlvbjogZmFsc2UKICAgIH0pOwogICAgdHMudHlwZXNjcmlwdERlZmF1bHRzLnNldEVhZ2VyTW9kZWxTeW5jKHRydWUpOwogIH0KICAvKioKICAgKiBQYXJzZSBpbXBvcnRzIGZyb20gVHlwZVNjcmlwdC9KYXZhU2NyaXB0IGNvbnRlbnQKICAgKi8KICBwYXJzZUltcG9ydHMoY29udGVudDMpIHsKICAgIGNvbnN0IGltcG9ydHMgPSBbXTsKICAgIGNvbnN0IGltcG9ydFJlZ2V4ID0gL2ltcG9ydFxzKyg/Oltcdyp7fVxzLF0rZnJvbVxzKyk/WyciXShbXiciXSspWyciXS9nOwogICAgbGV0IG1hdGNoMjsKICAgIHdoaWxlICgobWF0Y2gyID0gaW1wb3J0UmVnZXguZXhlYyhjb250ZW50MykpICE9PSBudWxsKSB7CiAgICAgIGNvbnN0IGltcG9ydFBhdGggPSBtYXRjaDJbMV07CiAgICAgIGlmICghaW1wb3J0UGF0aC5zdGFydHNXaXRoKCIuIikgJiYgIWltcG9ydFBhdGguc3RhcnRzV2l0aCgiLyIpKSB7CiAgICAgICAgY29uc3QgcGFja2FnZU5hbWUgPSBpbXBvcnRQYXRoLnN0YXJ0c1dpdGgoIkAiKSA/IGltcG9ydFBhdGguc3BsaXQoIi8iKS5zbGljZSgwLCAyKS5qb2luKCIvIikgOiBpbXBvcnRQYXRoLnNwbGl0KCIvIilbMF07CiAgICAgICAgaW1wb3J0cy5wdXNoKHBhY2thZ2VOYW1lKTsKICAgICAgfQogICAgfQogICAgY29uc3QgcmVxdWlyZVJlZ2V4ID0gL3JlcXVpcmVccypcKFxzKlsnIl0oW14nIl0rKVsnIl1ccypcKS9nOwogICAgd2hpbGUgKChtYXRjaDIgPSByZXF1aXJlUmVnZXguZXhlYyhjb250ZW50MykpICE9PSBudWxsKSB7CiAgICAgIGNvbnN0IGltcG9ydFBhdGggPSBtYXRjaDJbMV07CiAgICAgIGlmICghaW1wb3J0UGF0aC5zdGFydHNXaXRoKCIuIikgJiYgIWltcG9ydFBhdGguc3RhcnRzV2l0aCgiLyIpKSB7CiAgICAgICAgY29uc3QgcGFja2FnZU5hbWUgPSBpbXBvcnRQYXRoLnN0YXJ0c1dpdGgoIkAiKSA/IGltcG9ydFBhdGguc3BsaXQoIi8iKS5zbGljZSgwLCAyKS5qb2luKCIvIikgOiBpbXBvcnRQYXRoLnNwbGl0KCIvIilbMF07CiAgICAgICAgaW1wb3J0cy5wdXNoKHBhY2thZ2VOYW1lKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIFsuLi5uZXcgU2V0KGltcG9ydHMpXTsKICB9CiAgLyoqCiAgICogTG9hZCB0eXBlIGRlZmluaXRpb25zIGZvciBhIHBhY2thZ2UgZnJvbSB2aXJ0dWFsIEZTCiAgICovCiAgYXN5bmMgbG9hZFR5cGVzRm9yUGFja2FnZShwYWNrYWdlTmFtZSkgewogICAgaWYgKCF0aGlzLm1vbmFjb0luc3RhbmNlIHx8ICF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICByZXR1cm47CiAgICBpZiAodGhpcy5sb2FkZWRMaWJzLmhhcyhwYWNrYWdlTmFtZSkpCiAgICAgIHJldHVybjsKICAgIGlmICh0aGlzLm5vdEZvdW5kUGFja2FnZXMuaGFzKHBhY2thZ2VOYW1lKSkKICAgICAgcmV0dXJuOwogICAgdHJ5IHsKICAgICAgbGV0IHR5cGVzTG9hZGVkID0gYXdhaXQgdGhpcy50cnlMb2FkUGFja2FnZVR5cGVzKHBhY2thZ2VOYW1lKTsKICAgICAgaWYgKCF0eXBlc0xvYWRlZCkgewogICAgICAgIHR5cGVzTG9hZGVkID0gYXdhaXQgdGhpcy50cnlMb2FkQXRUeXBlc1BhY2thZ2UocGFja2FnZU5hbWUpOwogICAgICB9CiAgICAgIGlmICh0eXBlc0xvYWRlZCkgewogICAgICAgIHRoaXMubG9hZGVkTGlicy5hZGQocGFja2FnZU5hbWUpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMubm90Rm91bmRQYWNrYWdlcy5hZGQocGFja2FnZU5hbWUpOwogICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBsb2FkIHR5cGVzIGZvciAke3BhY2thZ2VOYW1lfTpgLCBlcnJvcik7CiAgICB9CiAgfQogIGFzeW5jIHRyeUxvYWRQYWNrYWdlVHlwZXMocGFja2FnZU5hbWUpIHsKICAgIGNvbnN0IHRzID0gdGhpcy50c0FwaTsKICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCB8fCAhdHMpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IGJhc2VQYXRoID0gYC9ub2RlX21vZHVsZXMvJHtwYWNrYWdlTmFtZX1gOwogICAgdHJ5IHsKICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gYCR7YmFzZVBhdGh9L3BhY2thZ2UuanNvbmA7CiAgICAgIGNvbnN0IHBhY2thZ2VKc29uRXhpc3RzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMocGFja2FnZUpzb25QYXRoKTsKICAgICAgaWYgKHBhY2thZ2VKc29uRXhpc3RzKSB7CiAgICAgICAgY29uc3QgcGFja2FnZUpzb25Db250ZW50ID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShwYWNrYWdlSnNvblBhdGgpOwogICAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShwYWNrYWdlSnNvbkNvbnRlbnQpOwogICAgICAgIHRzLnR5cGVzY3JpcHREZWZhdWx0cy5hZGRFeHRyYUxpYihwYWNrYWdlSnNvbkNvbnRlbnQsIGBmaWxlOi8vJHtwYWNrYWdlSnNvblBhdGh9YCk7CiAgICAgICAgY29uc3QgdHlwZXNQYXRoID0gcGFja2FnZUpzb24udHlwZXMgfHwgcGFja2FnZUpzb24udHlwaW5nczsKICAgICAgICBpZiAodHlwZXNQYXRoKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRBbGxEdHNGaWxlc0Zyb21QYWNrYWdlKGJhc2VQYXRoKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBjb21tb25QYXRocyA9IFsKICAgICAgICBgJHtiYXNlUGF0aH0vaW5kZXguZC50c2AsCiAgICAgICAgYCR7YmFzZVBhdGh9L2Rpc3QvaW5kZXguZC50c2AsCiAgICAgICAgYCR7YmFzZVBhdGh9L2xpYi9pbmRleC5kLnRzYAogICAgICBdOwogICAgICBmb3IgKGNvbnN0IGR0c1BhdGggb2YgY29tbW9uUGF0aHMpIHsKICAgICAgICBpZiAoYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoZHRzUGF0aCkpIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEFsbER0c0ZpbGVzRnJvbVBhY2thZ2UoYmFzZVBhdGgpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkIHBhY2thZ2UgdHlwZXMgZm9yICR7cGFja2FnZU5hbWV9OmAsIGVycm9yKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICAvKioKICAgKiBSZWN1cnNpdmVseSBsb2FkIGFsbCAuZC50cyBmaWxlcyBmcm9tIGEgcGFja2FnZSBkaXJlY3RvcnkKICAgKi8KICBhc3luYyBsb2FkQWxsRHRzRmlsZXNGcm9tUGFja2FnZShiYXNlUGF0aCkgewogICAgY29uc3QgdHMgPSB0aGlzLnRzQXBpOwogICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50IHx8ICF0cykKICAgICAgcmV0dXJuOwogICAgYXdhaXQgdGhpcy5sb2FkRHRzRmlsZXNGcm9tRGlyZWN0b3J5KGJhc2VQYXRoKTsKICB9CiAgLyoqCiAgICogUmVjdXJzaXZlbHkgbG9hZCAuZC50cyBmaWxlcyBmcm9tIGEgZGlyZWN0b3J5CiAgICovCiAgYXN5bmMgbG9hZER0c0ZpbGVzRnJvbURpcmVjdG9yeShkaXJQYXRoKSB7CiAgICBjb25zdCB0cyA9IHRoaXMudHNBcGk7CiAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQgfHwgIXRzKQogICAgICByZXR1cm47CiAgICB0cnkgewogICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKGRpclBhdGgpOwogICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHsKICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGRpclBhdGggPT09ICIvIiA/IGAvJHtlbnRyeS5uYW1lfWAgOiBgJHtkaXJQYXRofS8ke2VudHJ5Lm5hbWV9YDsKICAgICAgICBpZiAoZW50cnkubmFtZSA9PT0gIm5vZGVfbW9kdWxlcyIpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZER0c0ZpbGVzRnJvbURpcmVjdG9yeShmdWxsUGF0aCk7CiAgICAgICAgfSBlbHNlIGlmIChlbnRyeS50eXBlID09PSAiZmlsZSIgJiYgZW50cnkubmFtZS5lbmRzV2l0aCgiLmQudHMiKSkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKGZ1bGxQYXRoKTsKICAgICAgICAgICAgdHMudHlwZXNjcmlwdERlZmF1bHRzLmFkZEV4dHJhTGliKGNvbnRlbnQzLCBgZmlsZTovLyR7ZnVsbFBhdGh9YCk7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggewogICAgfQogIH0KICBhc3luYyB0cnlMb2FkQXRUeXBlc1BhY2thZ2UocGFja2FnZU5hbWUpIHsKICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgY29uc3QgdHlwZXNQYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lLnN0YXJ0c1dpdGgoIkAiKSA/IGBAdHlwZXMvJHtwYWNrYWdlTmFtZS5zbGljZSgxKS5yZXBsYWNlKCIvIiwgIl9fIil9YCA6IGBAdHlwZXMvJHtwYWNrYWdlTmFtZX1gOwogICAgY29uc3QgYmFzZVBhdGggPSBgL25vZGVfbW9kdWxlcy8ke3R5cGVzUGFja2FnZU5hbWV9YDsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGluZGV4UGF0aCA9IGAke2Jhc2VQYXRofS9pbmRleC5kLnRzYDsKICAgICAgaWYgKGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKGluZGV4UGF0aCkpIHsKICAgICAgICBhd2FpdCB0aGlzLmxvYWRBbGxEdHNGaWxlc0Zyb21QYWNrYWdlKGJhc2VQYXRoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGNhdGNoIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICAvKioKICAgKiBQcm9jZXNzIGNvbnRlbnQgY2hhbmdlIGFuZCBsb2FkIHR5cGVzIGZvciBhbnkgbmV3IGltcG9ydHMKICAgKi8KICBhc3luYyBwcm9jZXNzQ29udGVudENoYW5nZShjb250ZW50MykgewogICAgY29uc3QgaW1wb3J0cyA9IHRoaXMucGFyc2VJbXBvcnRzKGNvbnRlbnQzKTsKICAgIGZvciAoY29uc3QgcGFja2FnZU5hbWUgb2YgaW1wb3J0cykgewogICAgICBpZiAoIXRoaXMubG9hZGVkTGlicy5oYXMocGFja2FnZU5hbWUpKSB7CiAgICAgICAgYXdhaXQgdGhpcy5sb2FkVHlwZXNGb3JQYWNrYWdlKHBhY2thZ2VOYW1lKTsKICAgICAgfQogICAgfQogIH0KICAvKioKICAgKiBTY2FuIG5vZGVfbW9kdWxlcyBmb3IgcGFja2FnZXMgYW5kIGxvYWQgdHlwZXMgZm9yIGFueSBub3QgeWV0IGxvYWRlZC4KICAgKiBDYWxsZWQgd2hlbiBub2RlX21vZHVsZXMgY2hhbmdlcyAoZS5nLiwgYWZ0ZXIgcG5wbSBpbnN0YWxsKS4KICAgKi8KICBhc3luYyBzY2FuQW5kTG9hZE5ld1BhY2thZ2VUeXBlcygpIHsKICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgcmV0dXJuOwogICAgdGhpcy5ub3RGb3VuZFBhY2thZ2VzLmNsZWFyKCk7CiAgICB0cnkgewogICAgICBpZiAoIWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKCIvbm9kZV9tb2R1bGVzIikpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKCIvbm9kZV9tb2R1bGVzIik7CiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykgewogICAgICAgIGlmIChlbnRyeS50eXBlICE9PSAiZGlyZWN0b3J5IikKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGlmIChlbnRyeS5uYW1lLnN0YXJ0c1dpdGgoIkAiKSkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3Qgc2NvcGVkUGF0aCA9IGAvbm9kZV9tb2R1bGVzLyR7ZW50cnkubmFtZX1gOwogICAgICAgICAgICBjb25zdCBzY29wZWRFbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKHNjb3BlZFBhdGgpOwogICAgICAgICAgICBmb3IgKGNvbnN0IHNjb3BlZEVudHJ5IG9mIHNjb3BlZEVudHJpZXMpIHsKICAgICAgICAgICAgICBpZiAoc2NvcGVkRW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gYCR7ZW50cnkubmFtZX0vJHtzY29wZWRFbnRyeS5uYW1lfWA7CiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRUeXBlc0ZvclBhY2thZ2UocGFja2FnZU5hbWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICghZW50cnkubmFtZS5zdGFydHNXaXRoKCIuIikpIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFR5cGVzRm9yUGFja2FnZShlbnRyeS5uYW1lKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIHNjYW4gbm9kZV9tb2R1bGVzOiIsIGVycm9yKTsKICAgIH0KICB9CiAgLyoqCiAgICogQWRkIGEgZmlsZSBtb2RlbCB0byBNb25hY28gZm9yIGNyb3NzLWZpbGUgSW50ZWxsaVNlbnNlCiAgICogQWxzbyByZWdpc3RlcnMgdGhlIGZpbGUgd2l0aCBUeXBlU2NyaXB0IHZpYSBhZGRFeHRyYUxpYiBmb3IgbW9kdWxlIHJlc29sdXRpb24KICAgKi8KICBhZGRGaWxlTW9kZWwocGF0aDIsIGNvbnRlbnQzKSB7CiAgICBpZiAoIXRoaXMubW9uYWNvSW5zdGFuY2UpCiAgICAgIHJldHVybjsKICAgIHRoaXMuZmlsZUNhY2hlLnNldChwYXRoMiwgY29udGVudDMpOwogICAgY29uc3QgdXJpID0gdGhpcy5tb25hY29JbnN0YW5jZS5VcmkucGFyc2UoYGZpbGU6Ly8ke3BhdGgyfWApOwogICAgY29uc3QgZXhpc3RpbmdNb2RlbCA9IHRoaXMubW9uYWNvSW5zdGFuY2UuZWRpdG9yLmdldE1vZGVsKHVyaSk7CiAgICBpZiAoZXhpc3RpbmdNb2RlbCkgewogICAgICBpZiAoZXhpc3RpbmdNb2RlbC5nZXRWYWx1ZSgpICE9PSBjb250ZW50MykgewogICAgICAgIGV4aXN0aW5nTW9kZWwuc2V0VmFsdWUoY29udGVudDMpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuZ2V0TGFuZ3VhZ2VGcm9tUGF0aChwYXRoMik7CiAgICAgIHRoaXMubW9uYWNvSW5zdGFuY2UuZWRpdG9yLmNyZWF0ZU1vZGVsKGNvbnRlbnQzLCBsYW5ndWFnZSwgdXJpKTsKICAgIH0KICAgIHRoaXMuYWRkRmlsZUFzRXh0cmFMaWIocGF0aDIsIGNvbnRlbnQzKTsKICB9CiAgLyoqCiAgICogQWRkIGEgZmlsZSBhcyBhbiBleHRyYSBsaWIgZm9yIFR5cGVTY3JpcHQgbW9kdWxlIHJlc29sdXRpb24uCiAgICogVGhpcyBlbmFibGVzIFR5cGVTY3JpcHQgdG8gcmVzb2x2ZSBpbXBvcnRzIHRvIHByb2plY3QgZmlsZXMuCiAgICovCiAgYWRkRmlsZUFzRXh0cmFMaWIocGF0aDIsIGNvbnRlbnQzKSB7CiAgICBjb25zdCB0cyA9IHRoaXMudHNBcGk7CiAgICBpZiAoIXRzKQogICAgICByZXR1cm47CiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuYWRkZWRFeHRyYUxpYnMuZ2V0KHBhdGgyKTsKICAgIGlmIChleGlzdGluZykgewogICAgICBleGlzdGluZy5kaXNwb3NlKCk7CiAgICB9CiAgICBjb25zdCBmaWxlUGF0aCA9IGBmaWxlOi8vJHtwYXRoMn1gOwogICAgY29uc3QgZGlzcG9zYWJsZSA9IHRzLnR5cGVzY3JpcHREZWZhdWx0cy5hZGRFeHRyYUxpYihjb250ZW50MywgZmlsZVBhdGgpOwogICAgdGhpcy5hZGRlZEV4dHJhTGlicy5zZXQocGF0aDIsIGRpc3Bvc2FibGUpOwogICAgaWYgKHBhdGgyLmVuZHNXaXRoKCIudHMiKSAmJiAhcGF0aDIuZW5kc1dpdGgoIi5kLnRzIikpIHsKICAgICAgY29uc3QganNQYXRoID0gcGF0aDIucmVwbGFjZSgvXC50cyQvLCAiLmpzIik7CiAgICAgIGNvbnN0IGpzRmlsZVBhdGggPSBgZmlsZTovLyR7anNQYXRofWA7CiAgICAgIGNvbnN0IGpzRGlzcG9zYWJsZSA9IHRzLnR5cGVzY3JpcHREZWZhdWx0cy5hZGRFeHRyYUxpYihjb250ZW50MywganNGaWxlUGF0aCk7CiAgICAgIHRoaXMuYWRkZWRFeHRyYUxpYnMuc2V0KGpzUGF0aCwganNEaXNwb3NhYmxlKTsKICAgICAgdGhpcy5maWxlQ2FjaGUuc2V0KGpzUGF0aCwgY29udGVudDMpOwogICAgfSBlbHNlIGlmIChwYXRoMi5lbmRzV2l0aCgiLnRzeCIpKSB7CiAgICAgIGNvbnN0IGpzeFBhdGggPSBwYXRoMi5yZXBsYWNlKC9cLnRzeCQvLCAiLmpzeCIpOwogICAgICBjb25zdCBqc3hGaWxlUGF0aCA9IGBmaWxlOi8vJHtqc3hQYXRofWA7CiAgICAgIGNvbnN0IGpzeERpc3Bvc2FibGUgPSB0cy50eXBlc2NyaXB0RGVmYXVsdHMuYWRkRXh0cmFMaWIoY29udGVudDMsIGpzeEZpbGVQYXRoKTsKICAgICAgdGhpcy5hZGRlZEV4dHJhTGlicy5zZXQoanN4UGF0aCwganN4RGlzcG9zYWJsZSk7CiAgICAgIHRoaXMuZmlsZUNhY2hlLnNldChqc3hQYXRoLCBjb250ZW50Myk7CiAgICB9CiAgfQogIC8qKgogICAqIEdldCBjYWNoZWQgZmlsZSBjb250ZW50IGZvciBzeW5jaHJvbm91cyBhY2Nlc3MKICAgKi8KICBnZXRGaWxlQ29udGVudChwYXRoMikgewogICAgcmV0dXJuIHRoaXMuZmlsZUNhY2hlLmdldChwYXRoMik7CiAgfQogIGdldExhbmd1YWdlRnJvbVBhdGgocGF0aDIpIHsKICAgIGNvbnN0IGV4dCA9IHBhdGgyLnNwbGl0KCIuIikucG9wKCk/LnRvTG93ZXJDYXNlKCk7CiAgICBzd2l0Y2ggKGV4dCkgewogICAgICBjYXNlICJ0cyI6CiAgICAgIGNhc2UgInRzeCI6CiAgICAgICAgcmV0dXJuICJ0eXBlc2NyaXB0IjsKICAgICAgY2FzZSAianMiOgogICAgICBjYXNlICJqc3giOgogICAgICAgIHJldHVybiAiamF2YXNjcmlwdCI7CiAgICAgIGNhc2UgImpzb24iOgogICAgICAgIHJldHVybiAianNvbiI7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuICJwbGFpbnRleHQiOwogICAgfQogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3IvZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3IuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNTQgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczU1ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV29ya3NwYWNlRGlmZkVkaXRvciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfb3JpZ2luYWxDb250ZW50X2RlY29yYXRvcnM7CiAgbGV0IF9vcmlnaW5hbENvbnRlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcmlnaW5hbENvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21vZGlmaWVkQ29udGVudF9kZWNvcmF0b3JzOwogIGxldCBfbW9kaWZpZWRDb250ZW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9kaWZpZWRDb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcmlnaW5hbExhYmVsX2RlY29yYXRvcnM7CiAgbGV0IF9vcmlnaW5hbExhYmVsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3JpZ2luYWxMYWJlbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9kaWZpZWRMYWJlbF9kZWNvcmF0b3JzOwogIGxldCBfbW9kaWZpZWRMYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21vZGlmaWVkTGFiZWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhbmd1YWdlX2RlY29yYXRvcnM7CiAgbGV0IF9sYW5ndWFnZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhbmd1YWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWxlUGF0aF9kZWNvcmF0b3JzOwogIGxldCBfZmlsZVBhdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWxlUGF0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV29ya3NwYWNlRGlmZkVkaXRvcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9vcmlnaW5hbENvbnRlbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tb2RpZmllZENvbnRlbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9vcmlnaW5hbExhYmVsX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbW9kaWZpZWRMYWJlbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2xhbmd1YWdlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfZmlsZVBhdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTU0KHRoaXMsIG51bGwsIF9vcmlnaW5hbENvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3JpZ2luYWxDb250ZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvcmlnaW5hbENvbnRlbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3JpZ2luYWxDb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcmlnaW5hbENvbnRlbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3JpZ2luYWxDb250ZW50X2luaXRpYWxpemVycywgX29yaWdpbmFsQ29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU0KHRoaXMsIG51bGwsIF9tb2RpZmllZENvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibW9kaWZpZWRDb250ZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2RpZmllZENvbnRlbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubW9kaWZpZWRDb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tb2RpZmllZENvbnRlbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbW9kaWZpZWRDb250ZW50X2luaXRpYWxpemVycywgX21vZGlmaWVkQ29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU0KHRoaXMsIG51bGwsIF9vcmlnaW5hbExhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9yaWdpbmFsTGFiZWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9yaWdpbmFsTGFiZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3JpZ2luYWxMYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3JpZ2luYWxMYWJlbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcmlnaW5hbExhYmVsX2luaXRpYWxpemVycywgX29yaWdpbmFsTGFiZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NCh0aGlzLCBudWxsLCBfbW9kaWZpZWRMYWJlbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtb2RpZmllZExhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2RpZmllZExhYmVsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1vZGlmaWVkTGFiZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1vZGlmaWVkTGFiZWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbW9kaWZpZWRMYWJlbF9pbml0aWFsaXplcnMsIF9tb2RpZmllZExhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTQodGhpcywgbnVsbCwgX2xhbmd1YWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhbmd1YWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYW5ndWFnZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYW5ndWFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFuZ3VhZ2UgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzLCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NCh0aGlzLCBudWxsLCBfZmlsZVBhdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsZVBhdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZpbGVQYXRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZpbGVQYXRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWxlUGF0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9maWxlUGF0aF9pbml0aWFsaXplcnMsIF9maWxlUGF0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU0KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1dvcmtzcGFjZURpZmZFZGl0b3IyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIERFTU8KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgCiAgICA8ZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3IKICAgICAgLm9yaWdpbmFsQ29udGVudD0keydmdW5jdGlvbiBoZWxsbygpIHtcbiAgY29uc29sZS5sb2coIkhlbGxvIik7XG59J30KICAgICAgLm1vZGlmaWVkQ29udGVudD0keydmdW5jdGlvbiBoZWxsbygpIHtcbiAgY29uc29sZS5sb2coIkhlbGxvIFdvcmxkISIpO1xuICByZXR1cm4gdHJ1ZTtcbn0nfQogICAgICAubGFuZ3VhZ2U9JHsidHlwZXNjcmlwdCJ9CiAgICAgIC5maWxlUGF0aD0keyIvZGVtby9leGFtcGxlLnRzIn0KICAgID48L2RlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yPgogIGA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICAvLyBJTlNUQU5DRQogICAgZGlmZkVkaXRvckRlZmVycmVkID0gZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cHJvbWlzZS5kZWZlcigpOwogICAgI29yaWdpbmFsQ29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfb3JpZ2luYWxDb250ZW50X2luaXRpYWxpemVycywgIiIpOwogICAgZ2V0IG9yaWdpbmFsQ29udGVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI29yaWdpbmFsQ29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG9yaWdpbmFsQ29udGVudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb3JpZ2luYWxDb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbW9kaWZpZWRDb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfb3JpZ2luYWxDb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfbW9kaWZpZWRDb250ZW50X2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBtb2RpZmllZENvbnRlbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtb2RpZmllZENvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtb2RpZmllZENvbnRlbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21vZGlmaWVkQ29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI29yaWdpbmFsTGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU1KHRoaXMsIF9tb2RpZmllZENvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU1KHRoaXMsIF9vcmlnaW5hbExhYmVsX2luaXRpYWxpemVycywgIkRpc2sgVmVyc2lvbiIpKTsKICAgIGdldCBvcmlnaW5hbExhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jb3JpZ2luYWxMYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG9yaWdpbmFsTGFiZWwodmFsdWUyKSB7CiAgICAgIHRoaXMuI29yaWdpbmFsTGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtb2RpZmllZExhYmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfb3JpZ2luYWxMYWJlbF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTUodGhpcywgX21vZGlmaWVkTGFiZWxfaW5pdGlhbGl6ZXJzLCAiTG9jYWwgVmVyc2lvbiIpKTsKICAgIGdldCBtb2RpZmllZExhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jbW9kaWZpZWRMYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1vZGlmaWVkTGFiZWwodmFsdWUyKSB7CiAgICAgIHRoaXMuI21vZGlmaWVkTGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsYW5ndWFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTUodGhpcywgX21vZGlmaWVkTGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU1KHRoaXMsIF9sYW5ndWFnZV9pbml0aWFsaXplcnMsICJ0eXBlc2NyaXB0IikpOwogICAgZ2V0IGxhbmd1YWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYW5ndWFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNmaWxlUGF0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTUodGhpcywgX2xhbmd1YWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfZmlsZVBhdGhfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGZpbGVQYXRoKCkgewogICAgICByZXR1cm4gdGhpcy4jZmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBmaWxlUGF0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGRpZmZFZGl0b3IgPSAoX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfZmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgIG1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIG9yaWdpbmFsTW9kZWwgPSBudWxsOwogICAgbW9kaWZpZWRNb2RlbCA9IG51bGw7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgRG9tVG9vbHMuc2V0dXBEb21Ub29scygpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuZGlmZi13cmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZGlmZi10b29sYmFyIHsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmRpZmYtaW5mbyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC5kaWZmLWZpbGVuYW1lIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAuZGlmZi1sYWJlbHMgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLmRpZmYtYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuZGlmZi1jb250YWluZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm5hdi1idXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5maWxlUGF0aC5zcGxpdCgiLyIpLnBvcCgpIHx8ICJmaWxlIjsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJkaWZmLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtdG9vbGJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWZmLWluZm8iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZGlmZi1maWxlbmFtZSI+JHtmaWxlTmFtZX08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaWZmLWxhYmVscyI+JHt0aGlzLm9yaWdpbmFsTGFiZWx9IOKGlCAke3RoaXMubW9kaWZpZWRMYWJlbH08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtYWN0aW9ucyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hdi1idXR0b25zIj4KICAgICAgICAgICAgICA8ZGVlcy1idXR0b24KICAgICAgICAgICAgICAgIHR5cGU9Im91dGxpbmUiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmdvVG9QcmV2aW91c0RpZmZ9CiAgICAgICAgICAgICAgPlByZXZpb3VzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgICA8ZGVlcy1idXR0b24KICAgICAgICAgICAgICAgIHR5cGU9Im91dGxpbmUiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmdvVG9OZXh0RGlmZn0KICAgICAgICAgICAgICA+TmV4dDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24tYnV0dG9ucyI+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJoaWdobGlnaHRlZCIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuYWNjZXB0TG9jYWx9CiAgICAgICAgICAgICAgPlVzZSBMb2NhbDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJvdXRsaW5lIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5hY2NlcHREaXNrfQogICAgICAgICAgICAgID5Vc2UgRGlzazwvZGVlcy1idXR0b24+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJvdXRsaW5lIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5jbG9zZX0KICAgICAgICAgICAgICA+Q2xvc2U8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtY29udGFpbmVyIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBhd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQoLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7CiAgICAgIGF3YWl0IHRoaXMuaW5pdERpZmZFZGl0b3IoKTsKICAgIH0KICAgIGFzeW5jIGluaXREaWZmRWRpdG9yKCkgewogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kaWZmLWNvbnRhaW5lciIpOwogICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG1vbmFjb0NkbkJhc2UgPSBgaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9tb25hY28tZWRpdG9yQCR7TU9OQUNPX1ZFUlNJT059YDsKICAgICAgbGV0IG1vbmFjb0luc3RhbmNlID0gd2luZG93Lm1vbmFjbzsKICAgICAgaWYgKCFtb25hY29JbnN0YW5jZSkgewogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gewogICAgICAgICAgY29uc3QgY2hlY2tNb25hY28gPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgICAgIGlmICh3aW5kb3cubW9uYWNvKSB7CiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja01vbmFjbyk7CiAgICAgICAgICAgICAgcmVzb2x2ZTIoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMTAwKTsKICAgICAgICB9KTsKICAgICAgICBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgIH0KICAgICAgY29uc3QgZG9tdG9vbHNJbnN0YW5jZSA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBjb25zdCBpc0JyaWdodCA9IGRvbXRvb2xzSW5zdGFuY2UudGhlbWVNYW5hZ2VyLmdvQnJpZ2h0Qm9vbGVhbjsKICAgICAgY29uc3QgaW5pdGlhbFRoZW1lID0gaXNCcmlnaHQgPyAidnMiIDogInZzLWRhcmsiOwogICAgICBjb25zdCB0aW1lc3RhbXAyID0gRGF0ZS5ub3coKTsKICAgICAgY29uc3Qgb3JpZ2luYWxVcmkgPSBtb25hY29JbnN0YW5jZS5VcmkucGFyc2UoYGRpZmY6Ly9vcmlnaW5hbC8ke3RpbWVzdGFtcDJ9JHt0aGlzLmZpbGVQYXRofWApOwogICAgICBjb25zdCBtb2RpZmllZFVyaSA9IG1vbmFjb0luc3RhbmNlLlVyaS5wYXJzZShgZGlmZjovL21vZGlmaWVkLyR7dGltZXN0YW1wMn0ke3RoaXMuZmlsZVBhdGh9YCk7CiAgICAgIHRoaXMub3JpZ2luYWxNb2RlbCA9IG1vbmFjb0luc3RhbmNlLmVkaXRvci5jcmVhdGVNb2RlbCh0aGlzLm9yaWdpbmFsQ29udGVudCwgdGhpcy5sYW5ndWFnZSwgb3JpZ2luYWxVcmkpOwogICAgICB0aGlzLm1vZGlmaWVkTW9kZWwgPSBtb25hY29JbnN0YW5jZS5lZGl0b3IuY3JlYXRlTW9kZWwodGhpcy5tb2RpZmllZENvbnRlbnQsIHRoaXMubGFuZ3VhZ2UsIG1vZGlmaWVkVXJpKTsKICAgICAgdGhpcy5kaWZmRWRpdG9yID0gbW9uYWNvSW5zdGFuY2UuZWRpdG9yLmNyZWF0ZURpZmZFZGl0b3IoY29udGFpbmVyLCB7CiAgICAgICAgYXV0b21hdGljTGF5b3V0OiB0cnVlLAogICAgICAgIHJlYWRPbmx5OiBmYWxzZSwKICAgICAgICAvLyBBbGxvdyBlZGl0aW5nIHRoZSBtb2RpZmllZCAobG9jYWwpIHNpZGUKICAgICAgICBvcmlnaW5hbEVkaXRhYmxlOiBmYWxzZSwKICAgICAgICAvLyBEaXNrIHZlcnNpb24gaXMgcmVhZC1vbmx5CiAgICAgICAgcmVuZGVyU2lkZUJ5U2lkZTogdHJ1ZSwKICAgICAgICBpZ25vcmVUcmltV2hpdGVzcGFjZTogZmFsc2UsCiAgICAgICAgZm9udFNpemU6IDE0LAogICAgICAgIG1pbmltYXA6IHsKICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlCiAgICAgICAgfQogICAgICB9KTsKICAgICAgbW9uYWNvSW5zdGFuY2UuZWRpdG9yLnNldFRoZW1lKGluaXRpYWxUaGVtZSk7CiAgICAgIHRoaXMuZGlmZkVkaXRvci5zZXRNb2RlbCh7CiAgICAgICAgb3JpZ2luYWw6IHRoaXMub3JpZ2luYWxNb2RlbCwKICAgICAgICBtb2RpZmllZDogdGhpcy5tb2RpZmllZE1vZGVsCiAgICAgIH0pOwogICAgICB0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZ29CcmlnaHQpID0+IHsKICAgICAgICBjb25zdCBuZXdUaGVtZSA9IGdvQnJpZ2h0ID8gInZzIiA6ICJ2cy1kYXJrIjsKICAgICAgICBtb25hY29JbnN0YW5jZS5lZGl0b3Iuc2V0VGhlbWUobmV3VGhlbWUpOwogICAgICB9KTsKICAgICAgY29uc3QgY3NzSWQgPSAibW9uYWNvLWRpZmYtZWRpdG9yLWNzcyI7CiAgICAgIGlmICghdGhpcy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZChjc3NJZCkpIHsKICAgICAgICBjb25zdCBjc3NSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke21vbmFjb0NkbkJhc2V9L21pbi92cy9lZGl0b3IvZWRpdG9yLm1haW4uY3NzYCk7CiAgICAgICAgY29uc3QgY3NzVGV4dCA9IGF3YWl0IGNzc1Jlc3BvbnNlLnRleHQoKTsKICAgICAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgICAgIHN0eWxlRWxlbWVudC5pZCA9IGNzc0lkOwogICAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9IGNzc1RleHQ7CiAgICAgICAgdGhpcy5zaGFkb3dSb290Py5hcHBlbmQoc3R5bGVFbGVtZW50KTsKICAgICAgfQogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgdGhpcy5kaWZmRWRpdG9yPy5yZXZlYWxGaXJzdERpZmYoKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgIH0sIDEwMCk7CiAgICAgIHRoaXMuZGlmZkVkaXRvckRlZmVycmVkLnJlc29sdmUodGhpcy5kaWZmRWRpdG9yKTsKICAgIH0KICAgIGdvVG9OZXh0RGlmZigpIHsKICAgICAgdHJ5IHsKICAgICAgICB0aGlzLmRpZmZFZGl0b3I/LmdvVG9EaWZmKCJuZXh0Iik7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICB9CiAgICBnb1RvUHJldmlvdXNEaWZmKCkgewogICAgICB0cnkgewogICAgICAgIHRoaXMuZGlmZkVkaXRvcj8uZ29Ub0RpZmYoInByZXZpb3VzIik7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICB9CiAgICBhY2NlcHRMb2NhbCgpIHsKICAgICAgY29uc3QgbW9kaWZpZWRDb250ZW50ID0gdGhpcy5kaWZmRWRpdG9yPy5nZXRNb2RpZmllZEVkaXRvcigpLmdldFZhbHVlKCkgfHwgdGhpcy5tb2RpZmllZENvbnRlbnQ7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRpZmYtcmVzb2x2ZWQiLCB7CiAgICAgICAgZGV0YWlsOiB7IGFjdGlvbjogInVzZS1sb2NhbCIsIGNvbnRlbnQ6IG1vZGlmaWVkQ29udGVudCB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgYWNjZXB0RGlzaygpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZGlmZi1yZXNvbHZlZCIsIHsKICAgICAgICBkZXRhaWw6IHsgYWN0aW9uOiAidXNlLWRpc2siLCBjb250ZW50OiB0aGlzLm9yaWdpbmFsQ29udGVudCB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgY2xvc2UoKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRpZmYtY2xvc2VkIiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICh0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uKSB7CiAgICAgICAgdGhpcy5tb25hY29UaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgIHRoaXMubW9uYWNvVGhlbWVTdWJzY3JpcHRpb24gPSBudWxsOwogICAgICB9CiAgICAgIGlmICh0aGlzLm9yaWdpbmFsTW9kZWwpIHsKICAgICAgICB0aGlzLm9yaWdpbmFsTW9kZWwuZGlzcG9zZSgpOwogICAgICAgIHRoaXMub3JpZ2luYWxNb2RlbCA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMubW9kaWZpZWRNb2RlbCkgewogICAgICAgIHRoaXMubW9kaWZpZWRNb2RlbC5kaXNwb3NlKCk7CiAgICAgICAgdGhpcy5tb2RpZmllZE1vZGVsID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5kaWZmRWRpdG9yKSB7CiAgICAgICAgdGhpcy5kaWZmRWRpdG9yLmRpc3Bvc2UoKTsKICAgICAgICB0aGlzLmRpZmZFZGl0b3IgPSBudWxsOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczU1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlRGlmZkVkaXRvcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CmluaXRfZ3JvdXBfcnVudGltZSgpOwppbml0X2RlZXNfd29ya3NwYWNlX3Rlcm1pbmFsKCk7CmluaXRfZGVlc193b3Jrc3BhY2VfdGVybWluYWwoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF9kZWVzX2FjdGlvbmJhcigpOwp2YXIgX19lc0RlY29yYXRlNTUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczU2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV29ya3NwYWNlID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13b3Jrc3BhY2UiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9kZWNvcmF0b3JzOwogIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdGlhbGl6YXRpb25Qcm9taXNlX2RlY29yYXRvcnM7CiAgbGV0IF9pbml0aWFsaXphdGlvblByb21pc2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbml0aWFsaXphdGlvblByb21pc2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dGaWxlVHJlZV9kZWNvcmF0b3JzOwogIGxldCBfc2hvd0ZpbGVUcmVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0ZpbGVUcmVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93VGVybWluYWxfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dUZXJtaW5hbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dUZXJtaW5hbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzOwogIGxldCBfZmlsZVRyZWVXaWR0aF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Rlcm1pbmFsSGVpZ2h0X2RlY29yYXRvcnM7CiAgbGV0IF90ZXJtaW5hbEhlaWdodF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Rlcm1pbmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcGVuRmlsZXNfZGVjb3JhdG9yczsKICBsZXQgX29wZW5GaWxlc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wZW5GaWxlc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZlRmlsZVBhdGhfZGVjb3JhdG9yczsKICBsZXQgX2FjdGl2ZUZpbGVQYXRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZlRmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzVGVybWluYWxDb2xsYXBzZWRfZGVjb3JhdG9yczsKICBsZXQgX2lzVGVybWluYWxDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc1Rlcm1pbmFsQ29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2RlY29yYXRvcnM7CiAgbGV0IF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNGaWxlVHJlZUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNJbml0aWFsaXppbmdfZGVjb3JhdG9yczsKICBsZXQgX2lzSW5pdGlhbGl6aW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNJbml0aWFsaXppbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2ZUJvdHRvbVBhbmVsX2RlY29yYXRvcnM7CiAgbGV0IF9hY3RpdmVCb3R0b21QYW5lbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2ZUJvdHRvbVBhbmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaWFnbm9zdGljTWFya2Vyc19kZWNvcmF0b3JzOwogIGxldCBfZGlhZ25vc3RpY01hcmtlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaWFnbm9zdGljTWFya2Vyc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b1NhdmVfZGVjb3JhdG9yczsKICBsZXQgX2F1dG9TYXZlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b1NhdmVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2luaXRDb21tYW5kX2RlY29yYXRvcnM7CiAgbGV0IF9pbml0Q29tbWFuZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2luaXRDb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbml0T3V0cHV0X2RlY29yYXRvcnM7CiAgbGV0IF9pbml0T3V0cHV0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdE91dHB1dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudEZpbGVUcmVlV2lkdGhfZGVjb3JhdG9yczsKICBsZXQgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudEZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9kZWNvcmF0b3JzOwogIGxldCBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0RyYWdnaW5nRmlsZVRyZWVfZGVjb3JhdG9yczsKICBsZXQgX2lzRHJhZ2dpbmdGaWxlVHJlZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzRHJhZ2dpbmdGaWxlVHJlZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNEcmFnZ2luZ1Rlcm1pbmFsX2RlY29yYXRvcnM7CiAgbGV0IF9pc0RyYWdnaW5nVGVybWluYWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0RyYWdnaW5nVGVybWluYWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dEaWZmVmlld19kZWNvcmF0b3JzOwogIGxldCBfc2hvd0RpZmZWaWV3X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0RpZmZWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaWZmVmlld0NvbmZpZ19kZWNvcmF0b3JzOwogIGxldCBfZGlmZlZpZXdDb25maWdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaWZmVmlld0NvbmZpZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV29ya3NwYWNlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfaW5pdGlhbGl6YXRpb25Qcm9taXNlX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX3Nob3dGaWxlVHJlZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9zaG93VGVybWluYWxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfZmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3Rlcm1pbmFsSGVpZ2h0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfb3BlbkZpbGVzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9hY3RpdmVGaWxlUGF0aF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNUZXJtaW5hbENvbGxhcHNlZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNGaWxlVHJlZUNvbGxhcHNlZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNJbml0aWFsaXppbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2FjdGl2ZUJvdHRvbVBhbmVsX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kaWFnbm9zdGljTWFya2Vyc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfYXV0b1NhdmVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2luaXRDb21tYW5kX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pbml0T3V0cHV0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9jdXJyZW50RmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc0RyYWdnaW5nRmlsZVRyZWVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2lzRHJhZ2dpbmdUZXJtaW5hbF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2hvd0RpZmZWaWV3X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kaWZmVmlld0NvbmZpZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU1NSh0aGlzLCBudWxsLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZXhlY3V0aW9uRW52aXJvbm1lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImV4ZWN1dGlvbkVudmlyb25tZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV4ZWN1dGlvbkVudmlyb25tZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5leGVjdXRpb25FbnZpcm9ubWVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9leGVjdXRpb25FbnZpcm9ubWVudF9pbml0aWFsaXplcnMsIF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9pbml0aWFsaXphdGlvblByb21pc2VfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5pdGlhbGl6YXRpb25Qcm9taXNlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbml0aWFsaXphdGlvblByb21pc2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5pdGlhbGl6YXRpb25Qcm9taXNlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pbml0aWFsaXphdGlvblByb21pc2UgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5pdGlhbGl6YXRpb25Qcm9taXNlX2luaXRpYWxpemVycywgX2luaXRpYWxpemF0aW9uUHJvbWlzZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9zaG93RmlsZVRyZWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0ZpbGVUcmVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93RmlsZVRyZWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0ZpbGVUcmVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93RmlsZVRyZWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0ZpbGVUcmVlX2luaXRpYWxpemVycywgX3Nob3dGaWxlVHJlZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9zaG93VGVybWluYWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1Rlcm1pbmFsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93VGVybWluYWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd1Rlcm1pbmFsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93VGVybWluYWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1Rlcm1pbmFsX2luaXRpYWxpemVycywgX3Nob3dUZXJtaW5hbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9maWxlVHJlZVdpZHRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImZpbGVUcmVlV2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZpbGVUcmVlV2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsZVRyZWVXaWR0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZmlsZVRyZWVXaWR0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9maWxlVHJlZVdpZHRoX2luaXRpYWxpemVycywgX2ZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NSh0aGlzLCBudWxsLCBfdGVybWluYWxIZWlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGVybWluYWxIZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRlcm1pbmFsSGVpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRlcm1pbmFsSGVpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50ZXJtaW5hbEhlaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXJtaW5hbEhlaWdodF9pbml0aWFsaXplcnMsIF90ZXJtaW5hbEhlaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9vcGVuRmlsZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3BlbkZpbGVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvcGVuRmlsZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3BlbkZpbGVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcGVuRmlsZXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3BlbkZpbGVzX2luaXRpYWxpemVycywgX29wZW5GaWxlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9hY3RpdmVGaWxlUGF0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmVGaWxlUGF0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZlRmlsZVBhdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlRmlsZVBhdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2ZUZpbGVQYXRoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2ZUZpbGVQYXRoX2luaXRpYWxpemVycywgX2FjdGl2ZUZpbGVQYXRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2lzVGVybWluYWxDb2xsYXBzZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNUZXJtaW5hbENvbGxhcHNlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNUZXJtaW5hbENvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc1Rlcm1pbmFsQ29sbGFwc2VkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc1Rlcm1pbmFsQ29sbGFwc2VkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzVGVybWluYWxDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfaXNUZXJtaW5hbENvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzRmlsZVRyZWVDb2xsYXBzZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRmlsZVRyZWVDb2xsYXBzZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNGaWxlVHJlZUNvbGxhcHNlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNGaWxlVHJlZUNvbGxhcHNlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2luaXRpYWxpemVycywgX2lzRmlsZVRyZWVDb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NSh0aGlzLCBudWxsLCBfaXNJbml0aWFsaXppbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNJbml0aWFsaXppbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzSW5pdGlhbGl6aW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzSW5pdGlhbGl6aW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc0luaXRpYWxpemluZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0luaXRpYWxpemluZ19pbml0aWFsaXplcnMsIF9pc0luaXRpYWxpemluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9hY3RpdmVCb3R0b21QYW5lbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmVCb3R0b21QYW5lbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZlQm90dG9tUGFuZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlQm90dG9tUGFuZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2ZUJvdHRvbVBhbmVsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2ZUJvdHRvbVBhbmVsX2luaXRpYWxpemVycywgX2FjdGl2ZUJvdHRvbVBhbmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2RpYWdub3N0aWNNYXJrZXJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpYWdub3N0aWNNYXJrZXJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaWFnbm9zdGljTWFya2VycyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaWFnbm9zdGljTWFya2Vycywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlhZ25vc3RpY01hcmtlcnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlhZ25vc3RpY01hcmtlcnNfaW5pdGlhbGl6ZXJzLCBfZGlhZ25vc3RpY01hcmtlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NSh0aGlzLCBudWxsLCBfYXV0b1NhdmVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXV0b1NhdmUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9TYXZlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmF1dG9TYXZlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hdXRvU2F2ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvU2F2ZV9pbml0aWFsaXplcnMsIF9hdXRvU2F2ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9pbml0Q29tbWFuZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbml0Q29tbWFuZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdENvbW1hbmQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5pdENvbW1hbmQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmluaXRDb21tYW5kID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2luaXRDb21tYW5kX2luaXRpYWxpemVycywgX2luaXRDb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2luaXRPdXRwdXRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5pdE91dHB1dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdE91dHB1dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pbml0T3V0cHV0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pbml0T3V0cHV0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2luaXRPdXRwdXRfaW5pdGlhbGl6ZXJzLCBfaW5pdE91dHB1dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9jdXJyZW50RmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50RmlsZVRyZWVXaWR0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudEZpbGVUcmVlV2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudEZpbGVUcmVlV2lkdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1cnJlbnRGaWxlVHJlZVdpZHRoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2luaXRpYWxpemVycywgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50VGVybWluYWxIZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRUZXJtaW5hbEhlaWdodCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50VGVybWluYWxIZWlnaHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1cnJlbnRUZXJtaW5hbEhlaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jdXJyZW50VGVybWluYWxIZWlnaHRfaW5pdGlhbGl6ZXJzLCBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2lzRHJhZ2dpbmdGaWxlVHJlZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0RyYWdnaW5nRmlsZVRyZWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmdGaWxlVHJlZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0RyYWdnaW5nRmlsZVRyZWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzRHJhZ2dpbmdGaWxlVHJlZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nRmlsZVRyZWVfaW5pdGlhbGl6ZXJzLCBfaXNEcmFnZ2luZ0ZpbGVUcmVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2lzRHJhZ2dpbmdUZXJtaW5hbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0RyYWdnaW5nVGVybWluYWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmdUZXJtaW5hbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0RyYWdnaW5nVGVybWluYWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzRHJhZ2dpbmdUZXJtaW5hbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nVGVybWluYWxfaW5pdGlhbGl6ZXJzLCBfaXNEcmFnZ2luZ1Rlcm1pbmFsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX3Nob3dEaWZmVmlld19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93RGlmZlZpZXciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dEaWZmVmlldyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93RGlmZlZpZXcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dEaWZmVmlldyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93RGlmZlZpZXdfaW5pdGlhbGl6ZXJzLCBfc2hvd0RpZmZWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2RpZmZWaWV3Q29uZmlnX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpZmZWaWV3Q29uZmlnIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaWZmVmlld0NvbmZpZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaWZmVmlld0NvbmZpZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlmZlZpZXdDb25maWcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlmZlZpZXdDb25maWdfaW5pdGlhbGl6ZXJzLCBfZGlmZlZpZXdDb25maWdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXb3Jrc3BhY2UyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gewogICAgICBjb25zdCBlbnYyID0gbmV3IFdlYkNvbnRhaW5lckVudmlyb25tZW50KCk7CiAgICAgIGNvbnN0IG1vdW50UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgYXdhaXQgZW52Mi5pbml0KCk7CiAgICAgICAgY29uc3QgZmlsZVRyZWUgPSB7CiAgICAgICAgICAicGFja2FnZS5qc29uIjogewogICAgICAgICAgICBmaWxlOiB7CiAgICAgICAgICAgICAgY29udGVudHM6IEpTT04uc3RyaW5naWZ5KHsKICAgICAgICAgICAgICAgIG5hbWU6ICJkZW1vLXByb2plY3QiLAogICAgICAgICAgICAgICAgdmVyc2lvbjogIjEuMC4wIiwKICAgICAgICAgICAgICAgIHR5cGU6ICJtb2R1bGUiLAogICAgICAgICAgICAgICAgc2NyaXB0czogewogICAgICAgICAgICAgICAgICBidWlsZDogInRzYyIsCiAgICAgICAgICAgICAgICAgIGRldjogInRzYyAtLXdhdGNoIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llczogewogICAgICAgICAgICAgICAgICAiQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlIjogIl40LjIuMyIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBkZXZEZXBlbmRlbmNpZXM6IHsKICAgICAgICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIl4yMi4wLjAiLAogICAgICAgICAgICAgICAgICB0eXBlc2NyaXB0OiAiXjUuMC4wIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sIG51bGwsIDIpCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAibnBtZXh0cmEuanNvbiI6IHsKICAgICAgICAgICAgZmlsZTogewogICAgICAgICAgICAgIGNvbnRlbnRzOiBKU09OLnN0cmluZ2lmeSh7CiAgICAgICAgICAgICAgICBkZWVzRWRpdG9yV29ya3NwYWNlOiB7CiAgICAgICAgICAgICAgICAgIG9uSW5pdDogInBucG0gaW5zdGFsbCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LCBudWxsLCAyKQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgInRzY29uZmlnLmpzb24iOiB7CiAgICAgICAgICAgIGZpbGU6IHsKICAgICAgICAgICAgICBjb250ZW50czogSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7CiAgICAgICAgICAgICAgICAgIHRhcmdldDogIkVTMjAyMiIsCiAgICAgICAgICAgICAgICAgIG1vZHVsZTogIk5vZGVOZXh0IiwKICAgICAgICAgICAgICAgICAgbW9kdWxlUmVzb2x1dGlvbjogIk5vZGVOZXh0IiwKICAgICAgICAgICAgICAgICAgc3RyaWN0OiB0cnVlLAogICAgICAgICAgICAgICAgICBvdXREaXI6ICIuL2Rpc3QiLAogICAgICAgICAgICAgICAgICByb290RGlyOiAiLi9zcmMiLAogICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbjogdHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGluY2x1ZGU6IFsic3JjLyoqLyoiXQogICAgICAgICAgICAgIH0sIG51bGwsIDIpCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBzcmM6IHsKICAgICAgICAgICAgZGlyZWN0b3J5OiB7CiAgICAgICAgICAgICAgImluZGV4LnRzIjogewogICAgICAgICAgICAgICAgZmlsZTogewogICAgICAgICAgICAgICAgICBjb250ZW50czogYC8vIE1haW4gZW50cnkgcG9pbnQKaW1wb3J0IHsgZ3JlZXQsIGZvcm1hdE5hbWUgfSBmcm9tICcuL3V0aWxzLmpzJzsKCmNvbnN0IG5hbWUgPSBmb3JtYXROYW1lKCdXb3JsZCcpOwpjb25zb2xlLmxvZyhncmVldChuYW1lKSk7CgovLyBFeGFtcGxlIGFzeW5jIGZ1bmN0aW9uCmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7CiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCdIZWxsbyBmcm9tIGFzeW5jIScpOwogIGNvbnNvbGUubG9nKHJlc3VsdCk7Cn0KCm1haW4oKTsKYAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInV0aWxzLnRzIjogewogICAgICAgICAgICAgICAgZmlsZTogewogICAgICAgICAgICAgICAgICBjb250ZW50czogYC8vIFV0aWxpdHkgZnVuY3Rpb25zCgpleHBvcnQgaW50ZXJmYWNlIElVc2VyIHsKICBmaXJzdE5hbWU6IHN0cmluZzsKICBsYXN0TmFtZTogc3RyaW5nOwp9CgpleHBvcnQgZnVuY3Rpb24gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICByZXR1cm4gXGBIZWxsbywgXCR7bmFtZX0hXGA7Cn0KCmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgcmV0dXJuIG5hbWUudHJpbSgpLnRvVXBwZXJDYXNlKCk7Cn0KCmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVc2VyKGZpcnN0TmFtZTogc3RyaW5nLCBsYXN0TmFtZTogc3RyaW5nKTogSVVzZXIgewogIHJldHVybiB7IGZpcnN0TmFtZSwgbGFzdE5hbWUgfTsKfQpgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiaW1wb3J0dGVzdC50cyI6IHsKICAgICAgICAgICAgICAgIGZpbGU6IHsKICAgICAgICAgICAgICAgICAgY29udGVudHM6IGAvLyBUZXN0IG5wbSBwYWNrYWdlIGltcG9ydHMKaW1wb3J0ICogYXMgc21hcnRwcm9taXNlIGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZSc7CgovLyBUaGlzIHNob3VsZCBoYXZlIEludGVsbGlTZW5zZSBzaG93aW5nIGRlZmVyKCkgbWV0aG9kCmNvbnN0IGRlZmVycmVkID0gc21hcnRwcm9taXNlLmRlZmVyPHN0cmluZz4oKTsKCi8vIFRlc3QgdXNpbmcgdGhlIGRlZmVycmVkIHByb21pc2UKYXN5bmMgZnVuY3Rpb24gdGVzdFNtYXJ0UHJvbWlzZSgpIHsKICBzZXRUaW1lb3V0KCgpID0+IHsKICAgIGRlZmVycmVkLnJlc29sdmUoJ0hlbGxvIGZyb20gc21hcnRwcm9taXNlIScpOwogIH0sIDEwMCk7CgogIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlZmVycmVkLnByb21pc2U7CiAgY29uc29sZS5sb2cocmVzdWx0KTsKfQoKdGVzdFNtYXJ0UHJvbWlzZSgpOwpgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBhd2FpdCBlbnYyLm1vdW50KGZpbGVUcmVlKTsKICAgICAgfSkoKTsKICAgICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBjb250YWluZXJFbGVtZW50LnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IjsKICAgICAgY29uc3Qgd29ya3NwYWNlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZXMtd29ya3NwYWNlIik7CiAgICAgIHdvcmtzcGFjZUVsZW1lbnQuZXhlY3V0aW9uRW52aXJvbm1lbnQgPSBlbnYyOwogICAgICB3b3Jrc3BhY2VFbGVtZW50LmluaXRpYWxpemF0aW9uUHJvbWlzZSA9IG1vdW50UHJvbWlzZTsKICAgICAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh3b3Jrc3BhY2VFbGVtZW50KTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgICAgICAke2NvbnRhaW5lckVsZW1lbnR9CiAgICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIGA7CiAgICB9OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJXb3Jrc3BhY2UiOwogICAgI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9leGVjdXRpb25FbnZpcm9ubWVudF9pbml0aWFsaXplcnMsIG51bGwpOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBleGVjdXRpb25FbnZpcm9ubWVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZXhlY3V0aW9uRW52aXJvbm1lbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaW5pdGlhbGl6YXRpb25Qcm9taXNlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pbml0aWFsaXphdGlvblByb21pc2VfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgaW5pdGlhbGl6YXRpb25Qcm9taXNlKCkgewogICAgICByZXR1cm4gdGhpcy4jaW5pdGlhbGl6YXRpb25Qcm9taXNlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaW5pdGlhbGl6YXRpb25Qcm9taXNlKHZhbHVlMikgewogICAgICB0aGlzLiNpbml0aWFsaXphdGlvblByb21pc2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93RmlsZVRyZWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pbml0aWFsaXphdGlvblByb21pc2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9zaG93RmlsZVRyZWVfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd0ZpbGVUcmVlKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0ZpbGVUcmVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd0ZpbGVUcmVlKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93RmlsZVRyZWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93VGVybWluYWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9zaG93RmlsZVRyZWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9zaG93VGVybWluYWxfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd1Rlcm1pbmFsKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd1Rlcm1pbmFsX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1Rlcm1pbmFsKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93VGVybWluYWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNmaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfc2hvd1Rlcm1pbmFsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfZmlsZVRyZWVXaWR0aF9pbml0aWFsaXplcnMsIDI1MCkpOwogICAgZ2V0IGZpbGVUcmVlV2lkdGgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsZVRyZWVXaWR0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsZVRyZWVXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Rlcm1pbmFsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfZmlsZVRyZWVXaWR0aF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX3Rlcm1pbmFsSGVpZ2h0X2luaXRpYWxpemVycywgMjAwKSk7CiAgICBnZXQgdGVybWluYWxIZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0ZXJtaW5hbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRlcm1pbmFsSGVpZ2h0KHZhbHVlMikgewogICAgICB0aGlzLiN0ZXJtaW5hbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI29wZW5GaWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX3Rlcm1pbmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfb3BlbkZpbGVzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBvcGVuRmlsZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNvcGVuRmlsZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcGVuRmlsZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI29wZW5GaWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FjdGl2ZUZpbGVQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfb3BlbkZpbGVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfYWN0aXZlRmlsZVBhdGhfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGFjdGl2ZUZpbGVQYXRoKCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZlRmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3RpdmVGaWxlUGF0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWN0aXZlRmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc1Rlcm1pbmFsQ29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfYWN0aXZlRmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pc1Rlcm1pbmFsQ29sbGFwc2VkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc1Rlcm1pbmFsQ29sbGFwc2VkKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNUZXJtaW5hbENvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzVGVybWluYWxDb2xsYXBzZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzVGVybWluYWxDb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0ZpbGVUcmVlQ29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfaXNUZXJtaW5hbENvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2lzRmlsZVRyZWVDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzRmlsZVRyZWVDb2xsYXBzZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc0ZpbGVUcmVlQ29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNGaWxlVHJlZUNvbGxhcHNlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNGaWxlVHJlZUNvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzSW5pdGlhbGl6aW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfaXNGaWxlVHJlZUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2lzSW5pdGlhbGl6aW5nX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IGlzSW5pdGlhbGl6aW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNJbml0aWFsaXppbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0luaXRpYWxpemluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNJbml0aWFsaXppbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhY3RpdmVCb3R0b21QYW5lbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2lzSW5pdGlhbGl6aW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfYWN0aXZlQm90dG9tUGFuZWxfaW5pdGlhbGl6ZXJzLCAidGVybWluYWwiKSk7CiAgICBnZXQgYWN0aXZlQm90dG9tUGFuZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhY3RpdmVCb3R0b21QYW5lbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjdGl2ZUJvdHRvbVBhbmVsKHZhbHVlMikgewogICAgICB0aGlzLiNhY3RpdmVCb3R0b21QYW5lbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RpYWdub3N0aWNNYXJrZXJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfYWN0aXZlQm90dG9tUGFuZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9kaWFnbm9zdGljTWFya2Vyc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZGlhZ25vc3RpY01hcmtlcnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkaWFnbm9zdGljTWFya2Vyc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRpYWdub3N0aWNNYXJrZXJzKHZhbHVlMikgewogICAgICB0aGlzLiNkaWFnbm9zdGljTWFya2Vyc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgZWRpdG9yRWxlbWVudCA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9kaWFnbm9zdGljTWFya2Vyc19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgaW5pdGlhbGl6YXRpb25TdGFydGVkID0gZmFsc2U7CiAgICBpbnRlbGxpU2Vuc2VNYW5hZ2VyID0gbnVsbDsKICAgIGludGVsbGlTZW5zZUluaXRpYWxpemVkID0gZmFsc2U7CiAgICAvLyBub2RlX21vZHVsZXMgd2F0Y2hlciBmb3IgYXV0by1sb2FkaW5nIHR5cGVzCiAgICBub2RlTW9kdWxlc1dhdGNoZXIgPSBudWxsOwogICAgbm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQgPSBudWxsOwogICAgaW50ZWxsaVNlbnNlRGVib3VuY2VUaW1lb3V0ID0gbnVsbDsKICAgIC8vIE9wZW4gZmlsZSB3YXRjaGVycyBmb3IgZXh0ZXJuYWwgY2hhbmdlIGRldGVjdGlvbgogICAgb3BlbkZpbGVXYXRjaGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBmaWxlQ2hhbmdlRGVib3VuY2UgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgYWN0aW9uYmFyRWxlbWVudCA9IG51bGw7CiAgICAjYXV0b1NhdmVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2F1dG9TYXZlX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgLy8gQXV0by1zYXZlIGZ1bmN0aW9uYWxpdHkKICAgIGdldCBhdXRvU2F2ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2F1dG9TYXZlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXV0b1NhdmUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2F1dG9TYXZlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBhdXRvU2F2ZUludGVydmFsID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2F1dG9TYXZlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAjaW5pdENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2luaXRDb21tYW5kX2luaXRpYWxpemVycywgIiIpOwogICAgLy8gSW5pdCB0ZXJtaW5hbCBwcmV2aWV3IHN0YXRlCiAgICBnZXQgaW5pdENvbW1hbmQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbml0Q29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGluaXRDb21tYW5kKHZhbHVlMikgewogICAgICB0aGlzLiNpbml0Q29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2luaXRPdXRwdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pbml0Q29tbWFuZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2luaXRPdXRwdXRfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IGluaXRPdXRwdXQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbml0T3V0cHV0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaW5pdE91dHB1dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaW5pdE91dHB1dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1cnJlbnRGaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfaW5pdE91dHB1dF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2luaXRpYWxpemVycywgMjUwKSk7CiAgICAvLyBSZXNpemUgc3RhdGUKICAgIGdldCBjdXJyZW50RmlsZVRyZWVXaWR0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRGaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VycmVudEZpbGVUcmVlV2lkdGgodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1cnJlbnRGaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VycmVudFRlcm1pbmFsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfY3VycmVudEZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9jdXJyZW50VGVybWluYWxIZWlnaHRfaW5pdGlhbGl6ZXJzLCAyMDApKTsKICAgIGdldCBjdXJyZW50VGVybWluYWxIZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjdXJyZW50VGVybWluYWxIZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50VGVybWluYWxIZWlnaHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1cnJlbnRUZXJtaW5hbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzRHJhZ2dpbmdGaWxlVHJlZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2lzRHJhZ2dpbmdGaWxlVHJlZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNEcmFnZ2luZ0ZpbGVUcmVlKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNEcmFnZ2luZ0ZpbGVUcmVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNEcmFnZ2luZ0ZpbGVUcmVlKHZhbHVlMikgewogICAgICB0aGlzLiNpc0RyYWdnaW5nRmlsZVRyZWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0RyYWdnaW5nVGVybWluYWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pc0RyYWdnaW5nRmlsZVRyZWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pc0RyYWdnaW5nVGVybWluYWxfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzRHJhZ2dpbmdUZXJtaW5hbCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzRHJhZ2dpbmdUZXJtaW5hbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzRHJhZ2dpbmdUZXJtaW5hbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNEcmFnZ2luZ1Rlcm1pbmFsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hvd0RpZmZWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfaXNEcmFnZ2luZ1Rlcm1pbmFsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfc2hvd0RpZmZWaWV3X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIC8vIERpZmYgdmlldyBzdGF0ZQogICAgZ2V0IHNob3dEaWZmVmlldygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dEaWZmVmlld19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dEaWZmVmlldyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd0RpZmZWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZGlmZlZpZXdDb25maWdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9zaG93RGlmZlZpZXdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9kaWZmVmlld0NvbmZpZ19pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCBkaWZmVmlld0NvbmZpZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RpZmZWaWV3Q29uZmlnX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGlmZlZpZXdDb25maWcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2RpZmZWaWV3Q29uZmlnX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBLZXlib2FyZCBzaG9ydGN1dCBoYW5kbGVyIChib3VuZCBmb3IgcHJvcGVyIGNsZWFudXApCiAgICBrZXlkb3duSGFuZGxlciA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9kaWZmVmlld0NvbmZpZ19leHRyYUluaXRpYWxpemVycyksIChlMTEpID0+IHsKICAgICAgaWYgKChlMTEubWV0YUtleSB8fCBlMTEuY3RybEtleSkgJiYgZTExLmtleSA9PT0gInMiICYmICFlMTEuc2hpZnRLZXkpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnNhdmVBY3RpdmVGaWxlKCk7CiAgICAgIH0KICAgICAgaWYgKChlMTEubWV0YUtleSB8fCBlMTEuY3RybEtleSkgJiYgZTExLnNoaWZ0S2V5ICYmIGUxMS5rZXkudG9Mb3dlckNhc2UoKSA9PT0gInMiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy5zYXZlQWxsRmlsZXMoKTsKICAgICAgfQogICAgfSk7CiAgICAvLyA9PT09PT09PT09IEZpbGV0cmVlIFJlc2l6ZSBIYW5kbGVycyA9PT09PT09PT09CiAgICBoYW5kbGVGaWxlVHJlZU1vdXNlRG93biA9IChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHRoaXMuaXNEcmFnZ2luZ0ZpbGVUcmVlID0gdHJ1ZTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVGaWxlVHJlZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VVcCk7CiAgICB9OwogICAgaGFuZGxlRmlsZVRyZWVNb3VzZU1vdmUgPSAoZTExKSA9PiB7CiAgICAgIGlmICghdGhpcy5pc0RyYWdnaW5nRmlsZVRyZWUpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgY29uc3QgbW91c2VYID0gZTExLmNsaWVudFggLSBjb250YWluZXJSZWN0LmxlZnQ7CiAgICAgIGNvbnN0IG1pbldpZHRoID0gMTUwOwogICAgICBjb25zdCBtYXhXaWR0aCA9IGNvbnRhaW5lclJlY3Qud2lkdGggKiAwLjU7CiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgobWluV2lkdGgsIE1hdGgubWluKG1heFdpZHRoLCBtb3VzZVgpKTsKICAgICAgdGhpcy5jdXJyZW50RmlsZVRyZWVXaWR0aCA9IG5ld1dpZHRoOwogICAgfTsKICAgIGhhbmRsZUZpbGVUcmVlTW91c2VVcCA9ICgpID0+IHsKICAgICAgdGhpcy5pc0RyYWdnaW5nRmlsZVRyZWUgPSBmYWxzZTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVGaWxlVHJlZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VVcCk7CiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgicmVzaXplIikpOwogICAgfTsKICAgIC8vID09PT09PT09PT0gVGVybWluYWwgUmVzaXplIEhhbmRsZXJzID09PT09PT09PT0KICAgIGhhbmRsZVRlcm1pbmFsTW91c2VEb3duID0gKGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgdGhpcy5pc0RyYWdnaW5nVGVybWluYWwgPSB0cnVlOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZVRlcm1pbmFsTW91c2VNb3ZlKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZVVwKTsKICAgIH07CiAgICBoYW5kbGVUZXJtaW5hbE1vdXNlTW92ZSA9IChlMTEpID0+IHsKICAgICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmdUZXJtaW5hbCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCBtb3VzZVkgPSBlMTEuY2xpZW50WSAtIGNvbnRhaW5lclJlY3QudG9wOwogICAgICBjb25zdCB0ZXJtaW5hbEhlaWdodCA9IGNvbnRhaW5lclJlY3QuaGVpZ2h0IC0gbW91c2VZOwogICAgICBjb25zdCBtaW5IZWlnaHQgPSAxMDA7CiAgICAgIGNvbnN0IG1heEhlaWdodCA9IGNvbnRhaW5lclJlY3QuaGVpZ2h0ICogMC43OwogICAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLm1heChtaW5IZWlnaHQsIE1hdGgubWluKG1heEhlaWdodCwgdGVybWluYWxIZWlnaHQpKTsKICAgICAgdGhpcy5jdXJyZW50VGVybWluYWxIZWlnaHQgPSBuZXdIZWlnaHQ7CiAgICB9OwogICAgaGFuZGxlVGVybWluYWxNb3VzZVVwID0gKCkgPT4gewogICAgICB0aGlzLmlzRHJhZ2dpbmdUZXJtaW5hbCA9IGZhbHNlOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZVRlcm1pbmFsTW91c2VNb3ZlKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZVVwKTsKICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNpemUiKSk7CiAgICB9OwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NiUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2Utb3V0ZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2UtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZWRpdG9yLWFyZWEgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuZmlsZXRyZWUtcGFuZWwgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuZmlsZXRyZWUtcGFuZWwuY29sbGFwc2VkIHsKICAgICAgICB3aWR0aDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZWRpdG9yLXBhbmVsIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMjAwcHg7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1wYW5lbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1wYW5lbC5jb2xsYXBzZWQgewogICAgICAgIGhlaWdodDogMzJweCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAucGFuZWwtaGVhZGVyIHsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSA4JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5wYW5lbC1oZWFkZXItdGl0bGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgfQoKICAgICAgLnBhbmVsLWhlYWRlci1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5wYW5lbC1hY3Rpb24gewogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnBhbmVsLWFjdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMTglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMwJSkiLCAiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYnMtYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsICJoc2woMCAwJSA4JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLnRhYiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgICAgIG1heC13aWR0aDogMjAwcHg7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NCUpIiwgImhzbCgwIDAlIDEwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MiUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWIuYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDUwJSkiLCAiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItbmFtZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC50YWItY2xvc2UgewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50YWI6aG92ZXIgLnRhYi1jbG9zZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRhYi1jbG9zZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjUlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1tb2RpZmllZCB7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYnMtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLmVkaXRvci1tZW51LWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogNnB4IDhweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDRweDsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzLCBiYWNrZ3JvdW5kIDAuMTVzOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmVkaXRvci1tZW51LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjA4KSIsICJoc2woMCAwJSAxMDAlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDMycHg7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtcy1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAzMnB4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDA7CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNTUlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWI6aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA3NSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWIuYWN0aXZlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDUwJSkiLCAiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWItYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbWluLXdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBwYWRkaW5nOiAwIDVweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcwJSA1MCUpIiwgImhzbCgwIDcwJSA0NSUpIil9OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYi1iYWRnZS53YXJuaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDQwIDcwJSA1MCUpIiwgImhzbCg0MCA3MCUgNDUlKSIpfTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYi1iYWRnZS5ub25lIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAucHJvYmxlbXMtbGlzdCB7CiAgICAgICAgcGFkZGluZzogNHB4IDA7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA4MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xcyBlYXNlOwogICAgICB9CgogICAgICAucHJvYmxlbS1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICB9CgogICAgICAucHJvYmxlbS1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWljb24uZXJyb3IgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWljb24ud2FybmluZyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDAgNzAlIDUwJSkiLCAiaHNsKDQwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICAucHJvYmxlbS1kZXRhaWxzIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLnByb2JsZW0tbWVzc2FnZSB7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLnByb2JsZW0tbG9jYXRpb24gewogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtcy1lbXB0eSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTUlKSIsICJoc2woMCAwJSA1MCUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDUwJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICAgIGZyb20geyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfQogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfQogICAgICB9CgogICAgICAuaW5pdGlhbGl6aW5nIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLmluaXRpYWxpemluZyBkZWVzLWljb24gewogICAgICAgIGFuaW1hdGlvbjogc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIC5pbml0aWFsaXppbmcgZGVlcy13b3Jrc3BhY2UtdGVybWluYWwtcHJldmlldyB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICB3aWR0aDogODAlOwogICAgICAgIG1heC13aWR0aDogNjAwcHg7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIGRlZXMtd29ya3NwYWNlLW1vbmFjbyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtdGVybWluYWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIFJlc2l6ZSBoYW5kbGVzICovCiAgICAgIC5yZXNpemUtaGFuZGxlLXZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS12ZXJ0aWNhbDpob3ZlciwKICAgICAgLnJlc2l6ZS1oYW5kbGUtdmVydGljYWwuZHJhZ2dpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM1OGE2ZmYiKX07CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLXZlcnRpY2FsOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICB3aWR0aDogMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmU3NjgxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDFweDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtdmVydGljYWw6aG92ZXI6OmFmdGVyLAogICAgICAucmVzaXplLWhhbmRsZS12ZXJ0aWNhbC5kcmFnZ2luZzo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtaG9yaXpvbnRhbCB7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgY3Vyc29yOiByb3ctcmVzaXplOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWw6aG92ZXIsCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWwuZHJhZ2dpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM1OGE2ZmYiKX07CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWw6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2ZTc2ODEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMXB4OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS1ob3Jpem9udGFsOmhvdmVyOjphZnRlciwKICAgICAgLnJlc2l6ZS1oYW5kbGUtaG9yaXpvbnRhbC5kcmFnZ2luZzo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLyogUHJldmVudCB0ZXh0IHNlbGVjdGlvbiB3aGlsZSBkcmFnZ2luZyAqLwogICAgICAud29ya3NwYWNlLWNvbnRhaW5lci5kcmFnZ2luZyB7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2UtY29udGFpbmVyLmRyYWdnaW5nIC5maWxldHJlZS1wYW5lbCwKICAgICAgLndvcmtzcGFjZS1jb250YWluZXIuZHJhZ2dpbmcgLmVkaXRvci1wYW5lbCwKICAgICAgLndvcmtzcGFjZS1jb250YWluZXIuZHJhZ2dpbmcgLnRlcm1pbmFsLXBhbmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IGNvbnRhaW5lckNsYXNzZXMgPSBbCiAgICAgICAgIndvcmtzcGFjZS1jb250YWluZXIiLAogICAgICAgIHRoaXMuaXNEcmFnZ2luZ0ZpbGVUcmVlIHx8IHRoaXMuaXNEcmFnZ2luZ1Rlcm1pbmFsID8gImRyYWdnaW5nIiA6ICIiCiAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTsKICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXppbmcpIHsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0iaW5pdGlhbGl6aW5nIj4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmxvYWRlcjIifSBpY29uU2l6ZT0iMzIiPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+SW5pdGlhbGl6aW5nIHdvcmtzcGFjZS4uLjwvc3Bhbj4KICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3CiAgICAgICAgICAgIC5jb21tYW5kPSR7dGhpcy5pbml0Q29tbWFuZCB8fCAiIn0KICAgICAgICAgICAgLmxpbmVzPSR7dGhpcy5pbml0T3V0cHV0fQogICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwtcHJldmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgICAgfQogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9IndvcmtzcGFjZS1vdXRlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iJHtjb250YWluZXJDbGFzc2VzfSI+CiAgICAgICAgICA8IS0tIEZpbGV0cmVlIHBhbmVsIChmdWxsIGhlaWdodCkgLS0+CiAgICAgICAgICAke3RoaXMuc2hvd0ZpbGVUcmVlID8gYjJgCiAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICBjbGFzcz0iZmlsZXRyZWUtcGFuZWwgJHt0aGlzLmlzRmlsZVRyZWVDb2xsYXBzZWQgPyAiY29sbGFwc2VkIiA6ICIifSIKICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6ICR7dGhpcy5pc0ZpbGVUcmVlQ29sbGFwc2VkID8gMCA6IHRoaXMuY3VycmVudEZpbGVUcmVlV2lkdGh9cHgiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUKICAgICAgICAgICAgICAgIC5leGVjdXRpb25FbnZpcm9ubWVudD0ke3RoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnR9CiAgICAgICAgICAgICAgICAuc2VsZWN0ZWRQYXRoPSR7dGhpcy5hY3RpdmVGaWxlUGF0aH0KICAgICAgICAgICAgICAgIEBmaWxlLXNlbGVjdD0ke3RoaXMuaGFuZGxlRmlsZVNlbGVjdH0KICAgICAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS1maWxldHJlZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICR7IXRoaXMuaXNGaWxlVHJlZUNvbGxhcHNlZCA/IGIyYAogICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgIGNsYXNzPSJyZXNpemUtaGFuZGxlLXZlcnRpY2FsICR7dGhpcy5pc0RyYWdnaW5nRmlsZVRyZWUgPyAiZHJhZ2dpbmciIDogIiJ9IgogICAgICAgICAgICAgICAgQG1vdXNlZG93bj0ke3RoaXMuaGFuZGxlRmlsZVRyZWVNb3VzZURvd259CiAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgPCEtLSBFZGl0b3IgKyBUZXJtaW5hbCBhcmVhIC0tPgogICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLWFyZWEiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItcGFuZWwiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYnMtYmFyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYnMtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgJHt0aGlzLm9wZW5GaWxlcy5tYXAoKGZpbGUpID0+IGIyYAogICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0YWIgJHtmaWxlLnBhdGggPT09IHRoaXMuYWN0aXZlRmlsZVBhdGggPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuYWN0aXZhdGVGaWxlKGZpbGUucGF0aCl9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgJHtmaWxlLm1vZGlmaWVkID8gYjJgPHNwYW4gY2xhc3M9InRhYi1tb2RpZmllZCI+PC9zcGFuPmAgOiAiIn0KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWItbmFtZSI+JHtmaWxlLm5hbWV9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1jbG9zZSIgQGNsaWNrPSR7KGUxMSkgPT4gdGhpcy5jbG9zZUZpbGUoZTExLCBmaWxlLnBhdGgpfT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6eCJ9IGljb25TaXplPSIxMiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItbWVudS1idXR0b24iIEBjbGljaz0ke3RoaXMuc2hvd0VkaXRvck1lbnV9IHRpdGxlPSJFZGl0b3Igb3B0aW9ucyI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOm1vcmVWZXJ0aWNhbCJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItY29udGVudCI+CiAgICAgICAgICAgICAgICAke3RoaXMuc2hvd0RpZmZWaWV3ICYmIHRoaXMuZGlmZlZpZXdDb25maWcgPyBiMmAKICAgICAgICAgICAgICAgICAgPGRlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yCiAgICAgICAgICAgICAgICAgICAgLmZpbGVQYXRoPSR7dGhpcy5kaWZmVmlld0NvbmZpZy5maWxlUGF0aH0KICAgICAgICAgICAgICAgICAgICAub3JpZ2luYWxDb250ZW50PSR7dGhpcy5kaWZmVmlld0NvbmZpZy5vcmlnaW5hbENvbnRlbnR9CiAgICAgICAgICAgICAgICAgICAgLm1vZGlmaWVkQ29udGVudD0ke3RoaXMuZGlmZlZpZXdDb25maWcubW9kaWZpZWRDb250ZW50fQogICAgICAgICAgICAgICAgICAgIC5sYW5ndWFnZT0ke3RoaXMuZGlmZlZpZXdDb25maWcubGFuZ3VhZ2V9CiAgICAgICAgICAgICAgICAgICAgQGRpZmYtcmVzb2x2ZWQ9JHt0aGlzLmhhbmRsZURpZmZSZXNvbHZlZH0KICAgICAgICAgICAgICAgICAgICBAZGlmZi1jbG9zZWQ9JHsoKSA9PiB7CiAgICAgICAgdGhpcy5zaG93RGlmZlZpZXcgPSBmYWxzZTsKICAgICAgICB0aGlzLmRpZmZWaWV3Q29uZmlnID0gbnVsbDsKICAgICAgfX0KICAgICAgICAgICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3I+CiAgICAgICAgICAgICAgICBgIDogdGhpcy5vcGVuRmlsZXMubGVuZ3RoID09PSAwID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpmaWxlQ29kZSJ9IGljb25TaXplPSI0OCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+U2VsZWN0IGEgZmlsZSB0byBlZGl0PC9zcGFuPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiBiMmAKICAgICAgICAgICAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1vbmFjbwogICAgICAgICAgICAgICAgICAgIC5maWxlUGF0aD0ke3RoaXMuYWN0aXZlRmlsZVBhdGh9CiAgICAgICAgICAgICAgICAgICAgLmNvbnRlbnQ9JHt0aGlzLmdldEFjdGl2ZUZpbGVDb250ZW50KCl9CiAgICAgICAgICAgICAgICAgICAgLmxhbmd1YWdlPSR7dGhpcy5nZXRMYW5ndWFnZUZyb21QYXRoKHRoaXMuYWN0aXZlRmlsZVBhdGgpfQogICAgICAgICAgICAgICAgICAgIEBjb250ZW50LWNoYW5nZT0ke3RoaXMuaGFuZGxlQ29udGVudENoYW5nZX0KICAgICAgICAgICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtbW9uYWNvPgogICAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGVlcy1hY3Rpb25iYXI+PC9kZWVzLWFjdGlvbmJhcj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIEhvcml6b250YWwgcmVzaXplIGhhbmRsZSBmb3IgdGVybWluYWwgLS0+CiAgICAgICAgICAgICR7dGhpcy5zaG93VGVybWluYWwgJiYgIXRoaXMuaXNUZXJtaW5hbENvbGxhcHNlZCA/IGIyYAogICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgIGNsYXNzPSJyZXNpemUtaGFuZGxlLWhvcml6b250YWwgJHt0aGlzLmlzRHJhZ2dpbmdUZXJtaW5hbCA/ICJkcmFnZ2luZyIgOiAiIn0iCiAgICAgICAgICAgICAgICBAbW91c2Vkb3duPSR7dGhpcy5oYW5kbGVUZXJtaW5hbE1vdXNlRG93bn0KICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgIGAgOiAiIn0KCiAgICAgICAgICAgIDwhLS0gVGVybWluYWwgcGFuZWwgLS0+CiAgICAgICAgICAgICR7dGhpcy5zaG93VGVybWluYWwgPyBiMmAKICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICBjbGFzcz0idGVybWluYWwtcGFuZWwgJHt0aGlzLmlzVGVybWluYWxDb2xsYXBzZWQgPyAiY29sbGFwc2VkIiA6ICIifSIKICAgICAgICAgICAgICAgIHN0eWxlPSJoZWlnaHQ6ICR7dGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkID8gMzIgOiB0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodH1weCIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC10YWJzIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icGFuZWwtdGFiICR7dGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9PT0gInRlcm1pbmFsIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9ICJ0ZXJtaW5hbCJ9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6dGVybWluYWwifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgICAgVGVybWluYWwKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icGFuZWwtdGFiICR7dGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9PT0gInByb2JsZW1zIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9ICJwcm9ibGVtcyJ9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Y2lyY2xlQWxlcnQifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgICAgUHJvYmxlbXMKICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5kaWFnbm9zdGljTWFya2Vycy5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYW5lbC10YWItYmFkZ2UgJHt0aGlzLmdldEVycm9yQ291bnQoKSA9PT0gMCA/ICJ3YXJuaW5nIiA6ICIifSI+JHt0aGlzLmRpYWdub3N0aWNNYXJrZXJzLmxlbmd0aH08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1oZWFkZXItYWN0aW9ucyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtYWN0aW9uIiBAY2xpY2s9JHt0aGlzLnRvZ2dsZVRlcm1pbmFsfT4KICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgICAgICAgICAgICAgLmljb249JHt0aGlzLmlzVGVybWluYWxDb2xsYXBzZWQgPyAibHVjaWRlOmNoZXZyb25VcCIgOiAibHVjaWRlOmNoZXZyb25Eb3duIn0KICAgICAgICAgICAgICAgICAgICAgICAgaWNvblNpemU9IjE0IgogICAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtY29udGVudCIgc3R5bGU9ImRpc3BsYXk6ICR7dGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9PT0gInRlcm1pbmFsIiA/ICJibG9jayIgOiAibm9uZSJ9Ij4KICAgICAgICAgICAgICAgICAgPGRlZXMtd29ya3NwYWNlLXRlcm1pbmFsCiAgICAgICAgICAgICAgICAgICAgLmV4ZWN1dGlvbkVudmlyb25tZW50PSR7dGhpcy5leGVjdXRpb25FbnZpcm9ubWVudH0KICAgICAgICAgICAgICAgICAgICAuc2V0dXBDb21tYW5kPSR7IiJ9CiAgICAgICAgICAgICAgICAgID48L2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ibGVtcy1jb250ZW50IiBzdHlsZT0iZGlzcGxheTogJHt0aGlzLmFjdGl2ZUJvdHRvbVBhbmVsID09PSAicHJvYmxlbXMiID8gImJsb2NrIiA6ICJub25lIn0iPgogICAgICAgICAgICAgICAgICAke3RoaXMucmVuZGVyUHJvYmxlbXNQYW5lbCgpfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIEJvdHRvbSBCYXIgKGZ1bGwgd2lkdGgpIC0tPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1ib3R0b21iYXIKICAgICAgICAgIC5leGVjdXRpb25FbnZpcm9ubWVudD0ke3RoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnR9CiAgICAgICAgICBAcnVuLXByb2Nlc3M9JHt0aGlzLmhhbmRsZVJ1blByb2Nlc3N9CiAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtYm90dG9tYmFyPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMua2V5ZG93bkhhbmRsZXIpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLmtleWRvd25IYW5kbGVyKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVGaWxlVHJlZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VVcCk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZU1vdmUpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5oYW5kbGVUZXJtaW5hbE1vdXNlVXApOwogICAgICBpZiAodGhpcy5hdXRvU2F2ZUludGVydmFsKSB7CiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9TYXZlSW50ZXJ2YWwpOwogICAgICAgIHRoaXMuYXV0b1NhdmVJbnRlcnZhbCA9IG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5zdG9wTm9kZU1vZHVsZXNXYXRjaGVyKCk7CiAgICAgIHRoaXMuc3RvcEFsbEZpbGVXYXRjaGVycygpOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLmN1cnJlbnRGaWxlVHJlZVdpZHRoID0gdGhpcy5maWxlVHJlZVdpZHRoOwogICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodCA9IHRoaXMudGVybWluYWxIZWlnaHQ7CiAgICAgIGlmICh0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplV29ya3NwYWNlKCk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiZXhlY3V0aW9uRW52aXJvbm1lbnQiKSAmJiB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplV29ya3NwYWNlKCk7CiAgICAgIH0KICAgICAgaWYgKCF0aGlzLmFjdGlvbmJhckVsZW1lbnQpIHsKICAgICAgICB0aGlzLmFjdGlvbmJhckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5lZGl0b3ItcGFuZWwgZGVlcy1hY3Rpb25iYXIiKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgaW5pdGlhbGl6ZVdvcmtzcGFjZSgpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgIHJldHVybjsKICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6YXRpb25TdGFydGVkKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5pbml0aWFsaXphdGlvblN0YXJ0ZWQgPSB0cnVlOwogICAgICB0aGlzLmlzSW5pdGlhbGl6aW5nID0gdHJ1ZTsKICAgICAgdHJ5IHsKICAgICAgICBpZiAodGhpcy5pbml0aWFsaXphdGlvblByb21pc2UpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlOwogICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZHkpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuaW5pdCgpOwogICAgICAgIH0KICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVPbkluaXRDb21tYW5kKCk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgd29ya3NwYWNlOiIsIGVycm9yKTsKICAgICAgICB0aGlzLmluaXRpYWxpemF0aW9uU3RhcnRlZCA9IGZhbHNlOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIHRoaXMuaXNJbml0aWFsaXppbmcgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBFeGVjdXRlIG9uSW5pdCBjb21tYW5kIGZyb20gbnBtZXh0cmEuanNvbiBpZiBwcmVzZW50CiAgICAgKiBUaGlzIGFsbG93cyBhdXRvbWF0aWMgc2V0dXAgbGlrZSBgcG5wbSBpbnN0YWxsYCBvbiB3b3Jrc3BhY2UgaW5pdGlhbGl6YXRpb24KICAgICAqLwogICAgYXN5bmMgZXhlY3V0ZU9uSW5pdENvbW1hbmQoKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKCIvbnBtZXh0cmEuanNvbiIpKSB7CiAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUoIi9ucG1leHRyYS5qc29uIik7CiAgICAgICAgICBjb25zdCBjb25maWczID0gSlNPTi5wYXJzZShjb250ZW50Myk7CiAgICAgICAgICBjb25zdCBvbkluaXQgPSBjb25maWczPy5kZWVzRWRpdG9yV29ya3NwYWNlPy5vbkluaXQ7CiAgICAgICAgICBpZiAob25Jbml0ICYmIHR5cGVvZiBvbkluaXQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJFeGVjdXRpbmcgb25Jbml0IGNvbW1hbmQ6Iiwgb25Jbml0KTsKICAgICAgICAgICAgdGhpcy5pbml0Q29tbWFuZCA9IG9uSW5pdDsKICAgICAgICAgICAgdGhpcy5pbml0T3V0cHV0ID0gW107CiAgICAgICAgICAgIGNvbnN0IFtjbWQsIC4uLmFyZ3NdID0gb25Jbml0LnNwbGl0KCIgIik7CiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3M0ID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5zcGF3bihjbWQsIGFyZ3MpOwogICAgICAgICAgICBwcm9jZXNzNC5vdXRwdXQucGlwZVRvKG5ldyBXcml0YWJsZVN0cmVhbSh7CiAgICAgICAgICAgICAgd3JpdGU6IChkYXRhKSA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBsaW5lcyA9IGRhdGEuc3BsaXQoIlxuIik7CiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHsKICAgICAgICAgICAgICAgICAgaWYgKGxpbmUpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRPdXRwdXQgPSBbLi4udGhpcy5pbml0T3V0cHV0LCBsaW5lXTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkpOwogICAgICAgICAgICBjb25zdCBleGl0Q29kZSA9IGF3YWl0IHByb2Nlc3M0LmV4aXQ7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJvbkluaXQgY29tbWFuZCBjb21wbGV0ZWQgd2l0aCBleGl0IGNvZGU6IiwgZXhpdENvZGUpOwogICAgICAgICAgICB0aGlzLmluaXRPdXRwdXQgPSBbLi4udGhpcy5pbml0T3V0cHV0LCAiIiwgYENvbW1hbmQgY29tcGxldGVkIHdpdGggZXhpdCBjb2RlOiAke2V4aXRDb2RlfWBdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBleGVjdXRlIG9uSW5pdCBjb21tYW5kOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgaW5pdGlhbGl6ZUludGVsbGlTZW5zZSgpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgIHJldHVybjsKICAgICAgaWYgKHRoaXMuaW50ZWxsaVNlbnNlSW5pdGlhbGl6ZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgbW9uYWNvSW5zdGFuY2UgPSB3aW5kb3cubW9uYWNvOwogICAgICBpZiAoIW1vbmFjb0luc3RhbmNlKSB7CiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCAxMDApKTsKICAgICAgICBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgIH0KICAgICAgaWYgKCFtb25hY29JbnN0YW5jZSkgewogICAgICAgIGNvbnNvbGUud2FybigiTW9uYWNvIG5vdCB5ZXQgbG9hZGVkLCBJbnRlbGxpU2Vuc2Ugd2lsbCBiZSBpbml0aWFsaXplZCBsYXRlciIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLmludGVsbGlTZW5zZUluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyID0gbmV3IFR5cGVTY3JpcHRJbnRlbGxpU2Vuc2VNYW5hZ2VyKCk7CiAgICAgIGF3YWl0IHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlci5pbml0KG1vbmFjb0luc3RhbmNlLCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KTsKICAgICAgdGhpcy5zZXR1cE1hcmtlckxpc3RlbmVyKCk7CiAgICAgIHRoaXMuc3RhcnROb2RlTW9kdWxlc1dhdGNoZXIoKTsKICAgICAgYXdhaXQgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLnNjYW5BbmRMb2FkTmV3UGFja2FnZVR5cGVzKCk7CiAgICB9CiAgICAvKioKICAgICAqIFdhdGNoIG5vZGVfbW9kdWxlcyBmb3IgY2hhbmdlcyAoZS5nLiwgYWZ0ZXIgcG5wbSBpbnN0YWxsKQogICAgICogYW5kIGF1dG9tYXRpY2FsbHkgbG9hZCB0eXBlcyBmb3IgbmV3IHBhY2thZ2VzCiAgICAgKi8KICAgIHN0YXJ0Tm9kZU1vZHVsZXNXYXRjaGVyKCkgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQgfHwgdGhpcy5ub2RlTW9kdWxlc1dhdGNoZXIpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIHRoaXMubm9kZU1vZHVsZXNXYXRjaGVyID0gdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53YXRjaCgiL25vZGVfbW9kdWxlcyIsIChfZXZlbnQsIF9maWxlbmFtZSkgPT4gewogICAgICAgICAgaWYgKHRoaXMubm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQpIHsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5ub2RlTW9kdWxlc0RlYm91bmNlVGltZW91dCA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4gewogICAgICAgICAgICBpZiAodGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyKSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLnNjYW5BbmRMb2FkTmV3UGFja2FnZVR5cGVzKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgfSwgeyByZWN1cnNpdmU6IHRydWUgfSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJDb3VsZCBub3Qgd2F0Y2ggbm9kZV9tb2R1bGVzOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgc3RvcE5vZGVNb2R1bGVzV2F0Y2hlcigpIHsKICAgICAgaWYgKHRoaXMubm9kZU1vZHVsZXNXYXRjaGVyKSB7CiAgICAgICAgdGhpcy5ub2RlTW9kdWxlc1dhdGNoZXIuc3RvcCgpOwogICAgICAgIHRoaXMubm9kZU1vZHVsZXNXYXRjaGVyID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5ub2RlTW9kdWxlc0RlYm91bmNlVGltZW91dCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm5vZGVNb2R1bGVzRGVib3VuY2VUaW1lb3V0KTsKICAgICAgICB0aGlzLm5vZGVNb2R1bGVzRGVib3VuY2VUaW1lb3V0ID0gbnVsbDsKICAgICAgfQogICAgfQogICAgLy8gPT09PT09PT09PSBPcGVuIEZpbGUgV2F0Y2hpbmcgZm9yIEV4dGVybmFsIENoYW5nZXMgPT09PT09PT09PQogICAgLyoqCiAgICAgKiBTdGFydCB3YXRjaGluZyBhbiBvcGVuIGZpbGUgZm9yIGV4dGVybmFsIGNoYW5nZXMKICAgICAqLwogICAgc3RhcnRXYXRjaGluZ0ZpbGUocGF0aDIpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50IHx8IHRoaXMub3BlbkZpbGVXYXRjaGVycy5oYXMocGF0aDIpKQogICAgICAgIHJldHVybjsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCB3YXRjaGVyID0gdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53YXRjaChwYXRoMiwgKF9ldmVudCwgX2ZpbGVuYW1lKSA9PiB7CiAgICAgICAgICBjb25zdCBleGlzdGluZ1RpbWVvdXQgPSB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5nZXQocGF0aDIpOwogICAgICAgICAgaWYgKGV4aXN0aW5nVGltZW91dCkgewogICAgICAgICAgICBjbGVhclRpbWVvdXQoZXhpc3RpbmdUaW1lb3V0KTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHRpbWVvdXQyID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXh0ZXJuYWxGaWxlQ2hhbmdlKHBhdGgyKTsKICAgICAgICAgICAgdGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuZGVsZXRlKHBhdGgyKTsKICAgICAgICAgIH0sIDMwMCk7CiAgICAgICAgICB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5zZXQocGF0aDIsIHRpbWVvdXQyKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLm9wZW5GaWxlV2F0Y2hlcnMuc2V0KHBhdGgyLCB3YXRjaGVyKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLndhcm4oYENvdWxkIG5vdCB3YXRjaCBmaWxlICR7cGF0aDJ9OmAsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBTdG9wIHdhdGNoaW5nIGEgZmlsZSB3aGVuIGl0J3MgY2xvc2VkCiAgICAgKi8KICAgIHN0b3BXYXRjaGluZ0ZpbGUocGF0aDIpIHsKICAgICAgY29uc3Qgd2F0Y2hlciA9IHRoaXMub3BlbkZpbGVXYXRjaGVycy5nZXQocGF0aDIpOwogICAgICBpZiAod2F0Y2hlcikgewogICAgICAgIHdhdGNoZXIuc3RvcCgpOwogICAgICAgIHRoaXMub3BlbkZpbGVXYXRjaGVycy5kZWxldGUocGF0aDIpOwogICAgICB9CiAgICAgIGNvbnN0IHRpbWVvdXQyID0gdGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuZ2V0KHBhdGgyKTsKICAgICAgaWYgKHRpbWVvdXQyKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTsKICAgICAgICB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5kZWxldGUocGF0aDIpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFN0b3AgYWxsIGZpbGUgd2F0Y2hlcnMKICAgICAqLwogICAgc3RvcEFsbEZpbGVXYXRjaGVycygpIHsKICAgICAgZm9yIChjb25zdCB3YXRjaGVyIG9mIHRoaXMub3BlbkZpbGVXYXRjaGVycy52YWx1ZXMoKSkgewogICAgICAgIHdhdGNoZXIuc3RvcCgpOwogICAgICB9CiAgICAgIHRoaXMub3BlbkZpbGVXYXRjaGVycy5jbGVhcigpOwogICAgICBmb3IgKGNvbnN0IHRpbWVvdXQyIG9mIHRoaXMuZmlsZUNoYW5nZURlYm91bmNlLnZhbHVlcygpKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTsKICAgICAgfQogICAgICB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5jbGVhcigpOwogICAgfQogICAgLyoqCiAgICAgKiBIYW5kbGUgZXh0ZXJuYWwgZmlsZSBjaGFuZ2UgLSBzaG93IGFjdGlvbmJhciBpZiBmaWxlIGhhcyBsb2NhbCBjaGFuZ2VzLAogICAgICogb3RoZXJ3aXNlIHNpbGVudGx5IHVwZGF0ZSB3aXRoIGN1cnNvciBwcmVzZXJ2YXRpb24KICAgICAqLwogICAgYXN5bmMgaGFuZGxlRXh0ZXJuYWxGaWxlQ2hhbmdlKHBhdGgyKSB7CiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLm9wZW5GaWxlcy5maW5kKChmNykgPT4gZjcucGF0aCA9PT0gcGF0aDIpOwogICAgICBpZiAoIWZpbGUgfHwgIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKHBhdGgyKTsKICAgICAgICBpZiAobmV3Q29udGVudCA9PT0gZmlsZS5jb250ZW50KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmIChmaWxlLm1vZGlmaWVkKSB7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFjdGlvbmJhckVsZW1lbnQ/LnNob3coewogICAgICAgICAgICBtZXNzYWdlOiBgIiR7ZmlsZS5uYW1lfSIgY2hhbmdlZCBvbiBkaXNrLiBXaGF0IGRvIHlvdSB3YW50IHRvIGRvP2AsCiAgICAgICAgICAgIHR5cGU6ICJxdWVzdGlvbiIsCiAgICAgICAgICAgIGljb246ICJsdWNpZGU6Z2l0TWVyZ2UiLAogICAgICAgICAgICBhY3Rpb25zOiBbCiAgICAgICAgICAgICAgeyBpZDogImxvYWQtZGlzayIsIGxhYmVsOiAiTG9hZCBmcm9tIERpc2siLCBwcmltYXJ5OiB0cnVlIH0sCiAgICAgICAgICAgICAgeyBpZDogInNhdmUtbG9jYWwiLCBsYWJlbDogIlNhdmUgTG9jYWwgdG8gRGlzayIgfSwKICAgICAgICAgICAgICB7IGlkOiAiY29tcGFyZSIsIGxhYmVsOiAiQ29tcGFyZSIgfQogICAgICAgICAgICBdLAogICAgICAgICAgICB0aW1lb3V0OiB7IGR1cmF0aW9uOiAxNWUzLCBkZWZhdWx0QWN0aW9uSWQ6ICJsb2FkLWRpc2siIH0sCiAgICAgICAgICAgIGRpc21pc3NpYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmIChyZXN1bHQ/LmFjdGlvbklkID09PSAibG9hZC1kaXNrIikgewogICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUZpbGVDb250ZW50KHBhdGgyLCBuZXdDb250ZW50LCBmYWxzZSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdD8uYWN0aW9uSWQgPT09ICJzYXZlLWxvY2FsIikgewogICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShwYXRoMiwgZmlsZS5jb250ZW50KTsKICAgICAgICAgICAgdGhpcy5vcGVuRmlsZXMgPSB0aGlzLm9wZW5GaWxlcy5tYXAoKGY3KSA9PiBmNy5wYXRoID09PSBwYXRoMiA/IHsgLi4uZjcsIG1vZGlmaWVkOiBmYWxzZSB9IDogZjcpOwogICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQ/LmFjdGlvbklkID09PSAiY29tcGFyZSIpIHsKICAgICAgICAgICAgdGhpcy5vcGVuRGlmZlZpZXcocGF0aDIsIGZpbGUuY29udGVudCwgbmV3Q29udGVudCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRmlsZUNvbnRlbnQocGF0aDIsIG5ld0NvbnRlbnQsIHRydWUpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBoYW5kbGUgZXh0ZXJuYWwgY2hhbmdlIGZvciAke3BhdGgyfTpgLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogVXBkYXRlIGZpbGUgY29udGVudCBpbiBzdGF0ZSBhbmQgb3B0aW9uYWxseSBpbiB0aGUgZWRpdG9yCiAgICAgKi8KICAgIGFzeW5jIHVwZGF0ZUZpbGVDb250ZW50KHBhdGgyLCBuZXdDb250ZW50LCBwcmVzZXJ2ZUN1cnNvcikgewogICAgICB0aGlzLm9wZW5GaWxlcyA9IHRoaXMub3BlbkZpbGVzLm1hcCgoZjcpID0+IGY3LnBhdGggPT09IHBhdGgyID8geyAuLi5mNywgY29udGVudDogbmV3Q29udGVudCwgbW9kaWZpZWQ6IGZhbHNlIH0gOiBmNyk7CiAgICAgIGlmIChwYXRoMiA9PT0gdGhpcy5hY3RpdmVGaWxlUGF0aCkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgYXdhaXQgZWRpdG9yLnNldENvbnRlbnRFeHRlcm5hbChuZXdDb250ZW50LCBwcmVzZXJ2ZUN1cnNvcik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIE9wZW4gdGhlIGRpZmYgdmlldyB0byBjb21wYXJlIGxvY2FsIGFuZCBkaXNrIHZlcnNpb25zCiAgICAgKi8KICAgIG9wZW5EaWZmVmlldyhwYXRoMiwgbG9jYWxDb250ZW50LCBkaXNrQ29udGVudCkgewogICAgICB0aGlzLmRpZmZWaWV3Q29uZmlnID0gewogICAgICAgIGZpbGVQYXRoOiBwYXRoMiwKICAgICAgICBvcmlnaW5hbENvbnRlbnQ6IGRpc2tDb250ZW50LAogICAgICAgIG1vZGlmaWVkQ29udGVudDogbG9jYWxDb250ZW50LAogICAgICAgIGxhbmd1YWdlOiB0aGlzLmdldExhbmd1YWdlRnJvbVBhdGgocGF0aDIpCiAgICAgIH07CiAgICAgIHRoaXMuc2hvd0RpZmZWaWV3ID0gdHJ1ZTsKICAgIH0KICAgIC8qKgogICAgICogSGFuZGxlIGRpZmYgdmlldyByZXNvbHV0aW9uCiAgICAgKi8KICAgIGFzeW5jIGhhbmRsZURpZmZSZXNvbHZlZChlMTEpIHsKICAgICAgY29uc3QgeyBhY3Rpb24sIGNvbnRlbnQ6IGNvbnRlbnQzIH0gPSBlMTEuZGV0YWlsOwogICAgICBjb25zdCBwYXRoMiA9IHRoaXMuZGlmZlZpZXdDb25maWc/LmZpbGVQYXRoOwogICAgICBpZiAoIXBhdGgyIHx8ICF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgdGhpcy5zaG93RGlmZlZpZXcgPSBmYWxzZTsKICAgICAgICB0aGlzLmRpZmZWaWV3Q29uZmlnID0gbnVsbDsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGFjdGlvbiA9PT0gInVzZS1sb2NhbCIpIHsKICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShwYXRoMiwgY29udGVudDMpOwogICAgICAgIHRoaXMub3BlbkZpbGVzID0gdGhpcy5vcGVuRmlsZXMubWFwKChmNykgPT4gZjcucGF0aCA9PT0gcGF0aDIgPyB7IC4uLmY3LCBjb250ZW50OiBjb250ZW50MywgbW9kaWZpZWQ6IGZhbHNlIH0gOiBmNyk7CiAgICAgICAgaWYgKHBhdGgyID09PSB0aGlzLmFjdGl2ZUZpbGVQYXRoKSB7CiAgICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpOwogICAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgICBhd2FpdCBlZGl0b3Iuc2V0Q29udGVudEV4dGVybmFsKGNvbnRlbnQzLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gInVzZS1kaXNrIikgewogICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRmlsZUNvbnRlbnQocGF0aDIsIGNvbnRlbnQzLCBmYWxzZSk7CiAgICAgIH0KICAgICAgdGhpcy5zaG93RGlmZlZpZXcgPSBmYWxzZTsKICAgICAgdGhpcy5kaWZmVmlld0NvbmZpZyA9IG51bGw7CiAgICB9CiAgICBhc3luYyBoYW5kbGVGaWxlU2VsZWN0KGUxMSkgewogICAgICBjb25zdCB7IHBhdGg6IHBhdGgyLCBuYW1lIH0gPSBlMTEuZGV0YWlsOwogICAgICBhd2FpdCB0aGlzLm9wZW5GaWxlKHBhdGgyLCBuYW1lKTsKICAgIH0KICAgIGFzeW5jIG9wZW5GaWxlKHBhdGgyLCBuYW1lKSB7CiAgICAgIGNvbnN0IGV4aXN0aW5nRmlsZSA9IHRoaXMub3BlbkZpbGVzLmZpbmQoKGY3KSA9PiBmNy5wYXRoID09PSBwYXRoMik7CiAgICAgIGlmIChleGlzdGluZ0ZpbGUpIHsKICAgICAgICB0aGlzLmFjdGl2ZUZpbGVQYXRoID0gcGF0aDI7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKHBhdGgyKTsKICAgICAgICB0aGlzLm9wZW5GaWxlcyA9IFsKICAgICAgICAgIC4uLnRoaXMub3BlbkZpbGVzLAogICAgICAgICAgeyBwYXRoOiBwYXRoMiwgbmFtZSwgY29udGVudDogY29udGVudDMsIG1vZGlmaWVkOiBmYWxzZSB9CiAgICAgICAgXTsKICAgICAgICB0aGlzLmFjdGl2ZUZpbGVQYXRoID0gcGF0aDI7CiAgICAgICAgdGhpcy5zdGFydFdhdGNoaW5nRmlsZShwYXRoMik7CiAgICAgICAgaWYgKCF0aGlzLmludGVsbGlTZW5zZUluaXRpYWxpemVkKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCA1MDApKTsKICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZUludGVsbGlTZW5zZSgpOwogICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmdldExhbmd1YWdlRnJvbVBhdGgocGF0aDIpOwogICAgICAgICAgaWYgKHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlciAmJiAobGFuZ3VhZ2UgPT09ICJ0eXBlc2NyaXB0IiB8fCBsYW5ndWFnZSA9PT0gImphdmFzY3JpcHQiKSkgewogICAgICAgICAgICBhd2FpdCB0aGlzLmludGVsbGlTZW5zZU1hbmFnZXIucHJvY2Vzc0NvbnRlbnRDaGFuZ2UoY29udGVudDMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gb3BlbiBmaWxlICR7cGF0aDJ9OmAsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgYWN0aXZhdGVGaWxlKHBhdGgyKSB7CiAgICAgIHRoaXMuYWN0aXZlRmlsZVBhdGggPSBwYXRoMjsKICAgIH0KICAgIGNsb3NlRmlsZShlMTEsIHBhdGgyKSB7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29uc3QgZmlsZUluZGV4ID0gdGhpcy5vcGVuRmlsZXMuZmluZEluZGV4KChmNykgPT4gZjcucGF0aCA9PT0gcGF0aDIpOwogICAgICBpZiAoZmlsZUluZGV4ID09PSAtMSkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLm9wZW5GaWxlc1tmaWxlSW5kZXhdOwogICAgICBpZiAoZmlsZS5tb2RpZmllZCkgewogICAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGNvbmZpcm0oYCR7ZmlsZS5uYW1lfSBoYXMgdW5zYXZlZCBjaGFuZ2VzLiBDbG9zZSBhbnl3YXk/YCk7CiAgICAgICAgaWYgKCFjb25maXJtZWQpCiAgICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5zdG9wV2F0Y2hpbmdGaWxlKHBhdGgyKTsKICAgICAgdGhpcy5vcGVuRmlsZXMgPSB0aGlzLm9wZW5GaWxlcy5maWx0ZXIoKGY3KSA9PiBmNy5wYXRoICE9PSBwYXRoMik7CiAgICAgIGlmICh0aGlzLmFjdGl2ZUZpbGVQYXRoID09PSBwYXRoMikgewogICAgICAgIGlmICh0aGlzLm9wZW5GaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IE1hdGgubWluKGZpbGVJbmRleCwgdGhpcy5vcGVuRmlsZXMubGVuZ3RoIC0gMSk7CiAgICAgICAgICB0aGlzLmFjdGl2ZUZpbGVQYXRoID0gdGhpcy5vcGVuRmlsZXNbbmV3SW5kZXhdLnBhdGg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuYWN0aXZlRmlsZVBhdGggPSAiIjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGdldEFjdGl2ZUZpbGVDb250ZW50KCkgewogICAgICBjb25zdCBmaWxlID0gdGhpcy5vcGVuRmlsZXMuZmluZCgoZjcpID0+IGY3LnBhdGggPT09IHRoaXMuYWN0aXZlRmlsZVBhdGgpOwogICAgICByZXR1cm4gZmlsZT8uY29udGVudCB8fCAiIjsKICAgIH0KICAgIGhhbmRsZUNvbnRlbnRDaGFuZ2UoZTExKSB7CiAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBlMTEuZGV0YWlsOwogICAgICBjb25zdCBmaWxlSW5kZXggPSB0aGlzLm9wZW5GaWxlcy5maW5kSW5kZXgoKGY3KSA9PiBmNy5wYXRoID09PSB0aGlzLmFjdGl2ZUZpbGVQYXRoKTsKICAgICAgaWYgKGZpbGVJbmRleCA9PT0gLTEpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBmaWxlID0gdGhpcy5vcGVuRmlsZXNbZmlsZUluZGV4XTsKICAgICAgaWYgKGZpbGUuY29udGVudCAhPT0gbmV3Q29udGVudCkgewogICAgICAgIHRoaXMub3BlbkZpbGVzID0gWwogICAgICAgICAgLi4udGhpcy5vcGVuRmlsZXMuc2xpY2UoMCwgZmlsZUluZGV4KSwKICAgICAgICAgIHsgLi4uZmlsZSwgY29udGVudDogbmV3Q29udGVudCwgbW9kaWZpZWQ6IHRydWUgfSwKICAgICAgICAgIC4uLnRoaXMub3BlbkZpbGVzLnNsaWNlKGZpbGVJbmRleCArIDEpCiAgICAgICAgXTsKICAgICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuZ2V0TGFuZ3VhZ2VGcm9tUGF0aCh0aGlzLmFjdGl2ZUZpbGVQYXRoKTsKICAgICAgICBpZiAodGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyICYmIChsYW5ndWFnZSA9PT0gInR5cGVzY3JpcHQiIHx8IGxhbmd1YWdlID09PSAiamF2YXNjcmlwdCIpKSB7CiAgICAgICAgICBpZiAodGhpcy5pbnRlbGxpU2Vuc2VEZWJvdW5jZVRpbWVvdXQpIHsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaW50ZWxsaVNlbnNlRGVib3VuY2VUaW1lb3V0KTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuaW50ZWxsaVNlbnNlRGVib3VuY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlcj8ucHJvY2Vzc0NvbnRlbnRDaGFuZ2UobmV3Q29udGVudCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZ2V0TGFuZ3VhZ2VGcm9tUGF0aChwYXRoMikgewogICAgICBjb25zdCBleHQgPSBwYXRoMi5zcGxpdCgiLiIpLnBvcCgpPy50b0xvd2VyQ2FzZSgpOwogICAgICBjb25zdCBsYW5ndWFnZU1hcCA9IHsKICAgICAgICB0czogInR5cGVzY3JpcHQiLAogICAgICAgIHRzeDogInR5cGVzY3JpcHQiLAogICAgICAgIGpzOiAiamF2YXNjcmlwdCIsCiAgICAgICAganN4OiAiamF2YXNjcmlwdCIsCiAgICAgICAganNvbjogImpzb24iLAogICAgICAgIGh0bWw6ICJodG1sIiwKICAgICAgICBjc3M6ICJjc3MiLAogICAgICAgIHNjc3M6ICJzY3NzIiwKICAgICAgICBsZXNzOiAibGVzcyIsCiAgICAgICAgbWQ6ICJtYXJrZG93biIsCiAgICAgICAgeWFtbDogInlhbWwiLAogICAgICAgIHltbDogInlhbWwiLAogICAgICAgIHhtbDogInhtbCIsCiAgICAgICAgc3FsOiAic3FsIiwKICAgICAgICBweTogInB5dGhvbiIsCiAgICAgICAgc2g6ICJzaGVsbCIsCiAgICAgICAgYmFzaDogInNoZWxsIgogICAgICB9OwogICAgICByZXR1cm4gbGFuZ3VhZ2VNYXBbZXh0IHx8ICIiXSB8fCAicGxhaW50ZXh0IjsKICAgIH0KICAgIHRvZ2dsZVRlcm1pbmFsKCkgewogICAgICB0aGlzLmlzVGVybWluYWxDb2xsYXBzZWQgPSAhdGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkOwogICAgfQogICAgLy8gPT09PT09PT09PSBTYXZlIE9wZXJhdGlvbnMgPT09PT09PT09PQogICAgYXN5bmMgc2F2ZUFjdGl2ZUZpbGUoKSB7CiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLm9wZW5GaWxlcy5maW5kKChmNykgPT4gZjcucGF0aCA9PT0gdGhpcy5hY3RpdmVGaWxlUGF0aCk7CiAgICAgIGlmICghZmlsZSB8fCAhdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRyeSB7CiAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoZmlsZS5wYXRoLCBmaWxlLmNvbnRlbnQpOwogICAgICAgIHRoaXMub3BlbkZpbGVzID0gdGhpcy5vcGVuRmlsZXMubWFwKChmNykgPT4gZjcucGF0aCA9PT0gZmlsZS5wYXRoID8geyAuLi5mNywgbW9kaWZpZWQ6IGZhbHNlIH0gOiBmNyk7CiAgICAgICAgaWYgKHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlcikgewogICAgICAgICAgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLmFkZEZpbGVNb2RlbChmaWxlLnBhdGgsIGZpbGUuY29udGVudCk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBzYXZlIGZpbGU6IiwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBzYXZlQWxsRmlsZXMoKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiB0aGlzLm9wZW5GaWxlcy5maWx0ZXIoKGY3KSA9PiBmNy5tb2RpZmllZCkpIHsKICAgICAgICB0cnkgewogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoZmlsZS5wYXRoLCBmaWxlLmNvbnRlbnQpOwogICAgICAgICAgaWYgKHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlcikgewogICAgICAgICAgICB0aGlzLmludGVsbGlTZW5zZU1hbmFnZXIuYWRkRmlsZU1vZGVsKGZpbGUucGF0aCwgZmlsZS5jb250ZW50KTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHNhdmUgJHtmaWxlLnBhdGh9OmAsIGVycm9yKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5vcGVuRmlsZXMgPSB0aGlzLm9wZW5GaWxlcy5tYXAoKGY3KSA9PiAoeyAuLi5mNywgbW9kaWZpZWQ6IGZhbHNlIH0pKTsKICAgIH0KICAgIC8vID09PT09PT09PT0gRWRpdG9yIE1lbnUgPT09PT09PT09PQogICAgYXN5bmMgc2hvd0VkaXRvck1lbnUoZTExKSB7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6IHRoaXMuYXV0b1NhdmUgPyAiXHUyNzEzIEF1dG8gU2F2ZSIgOiAiQXV0byBTYXZlIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnNhdmUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnRvZ2dsZUF1dG9TYXZlKCkKICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJTYXZlIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnNhdmUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnNhdmVBY3RpdmVGaWxlKCkKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJTYXZlIEFsbCIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpzYXZlIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5zYXZlQWxsRmlsZXMoKQogICAgICAgIH0KICAgICAgXTsKICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgIH0KICAgIHRvZ2dsZUF1dG9TYXZlKCkgewogICAgICB0aGlzLmF1dG9TYXZlID0gIXRoaXMuYXV0b1NhdmU7CiAgICAgIGlmICh0aGlzLmF1dG9TYXZlKSB7CiAgICAgICAgdGhpcy5hdXRvU2F2ZUludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgICAgY29uc3QgaGFzVW5zYXZlZCA9IHRoaXMub3BlbkZpbGVzLnNvbWUoKGY3KSA9PiBmNy5tb2RpZmllZCk7CiAgICAgICAgICBpZiAoaGFzVW5zYXZlZCkgewogICAgICAgICAgICB0aGlzLnNhdmVBbGxGaWxlcygpOwogICAgICAgICAgfQogICAgICAgIH0sIDJlMyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHRoaXMuYXV0b1NhdmVJbnRlcnZhbCkgewogICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9TYXZlSW50ZXJ2YWwpOwogICAgICAgICAgdGhpcy5hdXRvU2F2ZUludGVydmFsID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGdldEVycm9yQ291bnQoKSB7CiAgICAgIHJldHVybiB0aGlzLmRpYWdub3N0aWNNYXJrZXJzLmZpbHRlcigobTYpID0+IG02LnNldmVyaXR5ID09PSA4KS5sZW5ndGg7CiAgICB9CiAgICByZW5kZXJQcm9ibGVtc1BhbmVsKCkgewogICAgICBpZiAodGhpcy5kaWFnbm9zdGljTWFya2Vycy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbXMtZW1wdHkiPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Y2hlY2tDaXJjbGUifSBpY29uU2l6ZT0iMjQiPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+Tm8gcHJvYmxlbXMgZGV0ZWN0ZWQ8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJwcm9ibGVtcy1saXN0Ij4KICAgICAgICAke3RoaXMuZGlhZ25vc3RpY01hcmtlcnMubWFwKChtYXJrZXIpID0+IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbS1pdGVtIiBAY2xpY2s9JHsoKSA9PiB0aGlzLm5hdmlnYXRlVG9Qcm9ibGVtKG1hcmtlcil9PgogICAgICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAgICAgY2xhc3M9InByb2JsZW0taWNvbiAke21hcmtlci5zZXZlcml0eSA9PT0gOCA/ICJlcnJvciIgOiAid2FybmluZyJ9IgogICAgICAgICAgICAgIC5pY29uPSR7bWFya2VyLnNldmVyaXR5ID09PSA4ID8gImx1Y2lkZTpjaXJjbGVYIiA6ICJsdWNpZGU6dHJpYW5nbGVBbGVydCJ9CiAgICAgICAgICAgICAgaWNvblNpemU9IjE0IgogICAgICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2JsZW0tZGV0YWlscyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbS1tZXNzYWdlIj4ke21hcmtlci5tZXNzYWdlfTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2JsZW0tbG9jYXRpb24iPgogICAgICAgICAgICAgICAgJHttYXJrZXIucmVzb3VyY2UucGF0aC5zcGxpdCgiLyIpLnBvcCgpfSAoJHttYXJrZXIuc3RhcnRMaW5lTnVtYmVyfSwgJHttYXJrZXIuc3RhcnRDb2x1bW59KQogICAgICAgICAgICAgICAgJHttYXJrZXIuc291cmNlID8gYFske21hcmtlci5zb3VyY2V9XWAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgKX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgbmF2aWdhdGVUb1Byb2JsZW0obWFya2VyKSB7CiAgICAgIGNvbnN0IGZpbGVQYXRoID0gbWFya2VyLnJlc291cmNlLnBhdGg7CiAgICAgIGNvbnN0IGZpbGVOYW1lID0gZmlsZVBhdGguc3BsaXQoIi8iKS5wb3AoKSB8fCAiIjsKICAgICAgY29uc3QgZXhpc3RpbmdGaWxlID0gdGhpcy5vcGVuRmlsZXMuZmluZCgoZjcpID0+IGY3LnBhdGggPT09IGZpbGVQYXRoKTsKICAgICAgaWYgKCFleGlzdGluZ0ZpbGUpIHsKICAgICAgICBhd2FpdCB0aGlzLm9wZW5GaWxlKGZpbGVQYXRoLCBmaWxlTmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5hY3RpdmVGaWxlUGF0aCA9IGZpbGVQYXRoOwogICAgICB9CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGNvbnN0IGVkaXRvckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpOwogICAgICBpZiAoZWRpdG9yRWxlbWVudCkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IGVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBlZGl0b3IucmV2ZWFsTGluZUluQ2VudGVyKG1hcmtlci5zdGFydExpbmVOdW1iZXIpOwogICAgICAgIGVkaXRvci5zZXRQb3NpdGlvbih7CiAgICAgICAgICBsaW5lTnVtYmVyOiBtYXJrZXIuc3RhcnRMaW5lTnVtYmVyLAogICAgICAgICAgY29sdW1uOiBtYXJrZXIuc3RhcnRDb2x1bW4KICAgICAgICB9KTsKICAgICAgICBlZGl0b3IuZm9jdXMoKTsKICAgICAgfQogICAgfQogICAgc2V0dXBNYXJrZXJMaXN0ZW5lcigpIHsKICAgICAgY29uc3QgbW9uYWNvSW5zdGFuY2UgPSB3aW5kb3cubW9uYWNvOwogICAgICBpZiAoIW1vbmFjb0luc3RhbmNlKQogICAgICAgIHJldHVybjsKICAgICAgbW9uYWNvSW5zdGFuY2UuZWRpdG9yLm9uRGlkQ2hhbmdlTWFya2VycygodXJpcykgPT4gewogICAgICAgIHRoaXMudXBkYXRlRGlhZ25vc3RpY01hcmtlcnMoKTsKICAgICAgfSk7CiAgICAgIHRoaXMudXBkYXRlRGlhZ25vc3RpY01hcmtlcnMoKTsKICAgIH0KICAgIHVwZGF0ZURpYWdub3N0aWNNYXJrZXJzKCkgewogICAgICBjb25zdCBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgIGlmICghbW9uYWNvSW5zdGFuY2UpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBhbGxNYXJrZXJzID0gbW9uYWNvSW5zdGFuY2UuZWRpdG9yLmdldE1vZGVsTWFya2Vycyh7fSk7CiAgICAgIHRoaXMuZGlhZ25vc3RpY01hcmtlcnMgPSBhbGxNYXJrZXJzLm1hcCgobTYpID0+ICh7CiAgICAgICAgbWVzc2FnZTogbTYubWVzc2FnZSwKICAgICAgICBzZXZlcml0eTogbTYuc2V2ZXJpdHksCiAgICAgICAgc3RhcnRMaW5lTnVtYmVyOiBtNi5zdGFydExpbmVOdW1iZXIsCiAgICAgICAgc3RhcnRDb2x1bW46IG02LnN0YXJ0Q29sdW1uLAogICAgICAgIGVuZExpbmVOdW1iZXI6IG02LmVuZExpbmVOdW1iZXIsCiAgICAgICAgZW5kQ29sdW1uOiBtNi5lbmRDb2x1bW4sCiAgICAgICAgc291cmNlOiBtNi5zb3VyY2UsCiAgICAgICAgcmVzb3VyY2U6IHsgcGF0aDogbTYucmVzb3VyY2UucGF0aCB9CiAgICAgIH0pKTsKICAgIH0KICAgIC8vID09PT09PT09PT0gQm90dG9tIEJhciBFdmVudCBIYW5kbGVycyA9PT09PT09PT09CiAgICAvKioKICAgICAqIEhhbmRsZSBydW4tcHJvY2VzcyBldmVudHMgZnJvbSBib3R0b20gYmFyIHdpZGdldHMKICAgICAqIENyZWF0ZXMgYSBuZXcgdGVybWluYWwgdGFiIGZvciB0aGUgcHJvY2VzcwogICAgICovCiAgICBhc3luYyBoYW5kbGVSdW5Qcm9jZXNzKGUxMSkgewogICAgICBjb25zdCBkZXRhaWwgPSBlMTEuZGV0YWlsOwogICAgICBjb25zdCB0ZXJtaW5hbCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtdGVybWluYWwiKTsKICAgICAgaWYgKCF0ZXJtaW5hbCkgewogICAgICAgIGNvbnNvbGUud2FybigiVGVybWluYWwgY29tcG9uZW50IG5vdCBmb3VuZCIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkKSB7CiAgICAgICAgdGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkID0gZmFsc2U7CiAgICAgIH0KICAgICAgdGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9ICJ0ZXJtaW5hbCI7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGF3YWl0IHRlcm1pbmFsLmNyZWF0ZVByb2Nlc3NUYWIoewogICAgICAgIHR5cGU6IGRldGFpbC50eXBlLAogICAgICAgIGxhYmVsOiBkZXRhaWwubGFiZWwsCiAgICAgICAgY29tbWFuZDogZGV0YWlsLmNvbW1hbmQsCiAgICAgICAgYXJnczogZGV0YWlsLmFyZ3MsCiAgICAgICAgbWV0YWRhdGE6IGRldGFpbC5tZXRhZGF0YSwKICAgICAgICBzd2l0Y2hUb1RhYjogdHJ1ZQogICAgICB9KTsKICAgIH0KICAgIC8vID09PT09PT09PT0gUHVibGljIExheW91dCBNZXRob2RzID09PT09PT09PT0KICAgIC8qKgogICAgICogUHJvZ3JhbW1hdGljYWxseSBzZXQgdGhlIGZpbGUgdHJlZSB3aWR0aAogICAgICovCiAgICBzZXRGaWxlVHJlZVdpZHRoKHdpZHRoKSB7CiAgICAgIGNvbnN0IG1pbldpZHRoID0gMTUwOwogICAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKiAwLjU7CiAgICAgIHRoaXMuY3VycmVudEZpbGVUcmVlV2lkdGggPSBNYXRoLm1heChtaW5XaWR0aCwgTWF0aC5taW4obWF4V2lkdGgsIHdpZHRoKSk7CiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgicmVzaXplIikpOwogICAgfQogICAgLyoqCiAgICAgKiBQcm9ncmFtbWF0aWNhbGx5IHNldCB0aGUgdGVybWluYWwgaGVpZ2h0CiAgICAgKi8KICAgIHNldFRlcm1pbmFsSGVpZ2h0KGhlaWdodCkgewogICAgICBjb25zdCBtaW5IZWlnaHQgPSAxMDA7CiAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ICogMC43OwogICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodCA9IE1hdGgubWF4KG1pbkhlaWdodCwgTWF0aC5taW4obWF4SGVpZ2h0LCBoZWlnaHQpKTsKICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNpemUiKSk7CiAgICB9CiAgICAvKioKICAgICAqIFJlc2V0IGxheW91dCB0byBpbml0aWFsIHByb3BlcnR5IHZhbHVlcwogICAgICovCiAgICByZXNldExheW91dCgpIHsKICAgICAgdGhpcy5jdXJyZW50RmlsZVRyZWVXaWR0aCA9IHRoaXMuZmlsZVRyZWVXaWR0aDsKICAgICAgdGhpcy5jdXJyZW50VGVybWluYWxIZWlnaHQgPSB0aGlzLnRlcm1pbmFsSGVpZ2h0OwogICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoInJlc2l6ZSIpKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTYoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXb3Jrc3BhY2UyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwvaW5kZXguanMKaW5pdF9kZWVzX3dvcmtzcGFjZV90ZXJtaW5hbCgpOwppbml0X3Rlcm1pbmFsX3RhYl9tYW5hZ2VyKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLW1hcmtkb3duL2RlZXMtd29ya3NwYWNlLW1hcmtkb3duLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTU2ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM1NyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgZGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0cHJvbWlzZS5kZWZlcigpOwp2YXIgRGVlc1dvcmtzcGFjZU1hcmtkb3duID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd24iKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9zcGxpdFJhdGlvX2RlY29yYXRvcnM7CiAgbGV0IF9zcGxpdFJhdGlvX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3BsaXRSYXRpb19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWluUGFuZWxTaXplX2RlY29yYXRvcnM7CiAgbGV0IF9taW5QYW5lbFNpemVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5QYW5lbFNpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRTcGxpdFJhdGlvX2RlY29yYXRvcnM7CiAgbGV0IF9jdXJyZW50U3BsaXRSYXRpb19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRTcGxpdFJhdGlvX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0RyYWdnaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9pc0RyYWdnaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNEcmFnZ2luZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV29ya3NwYWNlTWFya2Rvd24yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfc3BsaXRSYXRpb19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX21pblBhbmVsU2l6ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2N1cnJlbnRTcGxpdFJhdGlvX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc0RyYWdnaW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTU2KHRoaXMsIG51bGwsIF9zcGxpdFJhdGlvX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNwbGl0UmF0aW8iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNwbGl0UmF0aW8iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3BsaXRSYXRpbywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc3BsaXRSYXRpbyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zcGxpdFJhdGlvX2luaXRpYWxpemVycywgX3NwbGl0UmF0aW9fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Nih0aGlzLCBudWxsLCBfbWluUGFuZWxTaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1pblBhbmVsU2l6ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWluUGFuZWxTaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1pblBhbmVsU2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWluUGFuZWxTaXplID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21pblBhbmVsU2l6ZV9pbml0aWFsaXplcnMsIF9taW5QYW5lbFNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Nih0aGlzLCBudWxsLCBfY3VycmVudFNwbGl0UmF0aW9fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VycmVudFNwbGl0UmF0aW8iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRTcGxpdFJhdGlvIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1cnJlbnRTcGxpdFJhdGlvLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jdXJyZW50U3BsaXRSYXRpbyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jdXJyZW50U3BsaXRSYXRpb19pbml0aWFsaXplcnMsIF9jdXJyZW50U3BsaXRSYXRpb19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU2KHRoaXMsIG51bGwsIF9pc0RyYWdnaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzRHJhZ2dpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNEcmFnZ2luZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNEcmFnZ2luZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nX2luaXRpYWxpemVycywgX2lzRHJhZ2dpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXb3Jrc3BhY2VNYXJrZG93bjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd24+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bj5gOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJXb3Jrc3BhY2UiOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuc3BsaXRDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CgogICAgICAuZWRpdG9yQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG1pbi13aWR0aDogMTAwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnJlc2l6ZUhhbmRsZSB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzMwMzYzZCIpfTsKICAgICAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnJlc2l6ZUhhbmRsZTpob3ZlciwKICAgICAgLnJlc2l6ZUhhbmRsZS5kcmFnZ2luZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzU4YTZmZiIpfTsKICAgICAgfQoKICAgICAgLnJlc2l6ZUhhbmRsZTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgICAgd2lkdGg6IDJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZlNzY4MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxcHg7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICB9CgogICAgICAucmVzaXplSGFuZGxlOmhvdmVyOjphZnRlciwKICAgICAgLnJlc2l6ZUhhbmRsZS5kcmFnZ2luZzo6YWZ0ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiNmZmZmZmYiKX07CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLm91dGxldENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtaW4td2lkdGg6IDEwMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwZDExMTciKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjQyOTJmIiwgIiNlNmVkZjMiKX07CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ05vdG8gU2FucycsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC8qIFByZXZlbnQgdGV4dCBzZWxlY3Rpb24gd2hpbGUgZHJhZ2dpbmcgKi8KICAgICAgLnNwbGl0Q29udGFpbmVyLmRyYWdnaW5nIHsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLnNwbGl0Q29udGFpbmVyLmRyYWdnaW5nIC5lZGl0b3JDb250YWluZXIsCiAgICAgIC5zcGxpdENvbnRhaW5lci5kcmFnZ2luZyAub3V0bGV0Q29udGFpbmVyIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgYAogICAgXTsKICAgICNzcGxpdFJhdGlvX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9zcGxpdFJhdGlvX2luaXRpYWxpemVycywgNTApOwogICAgLyoqCiAgICAgKiBJbml0aWFsIHNwbGl0IHJhdGlvIGZvciB0aGUgZWRpdG9yIChsZWZ0KSBwYW5lbC4KICAgICAqIFZhbHVlIGZyb20gMCB0byAxMDAgcmVwcmVzZW50aW5nIHBlcmNlbnRhZ2Ugd2lkdGguCiAgICAgKiBEZWZhdWx0IGlzIDUwICg1MC81MCBzcGxpdCkuCiAgICAgKi8KICAgIGdldCBzcGxpdFJhdGlvKCkgewogICAgICByZXR1cm4gdGhpcy4jc3BsaXRSYXRpb19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNwbGl0UmF0aW8odmFsdWUyKSB7CiAgICAgIHRoaXMuI3NwbGl0UmF0aW9fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtaW5QYW5lbFNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9zcGxpdFJhdGlvX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfbWluUGFuZWxTaXplX2luaXRpYWxpemVycywgMTApKTsKICAgIC8qKgogICAgICogTWluaW11bSB3aWR0aCBwZXJjZW50YWdlIGZvciBlaXRoZXIgcGFuZWwuCiAgICAgKi8KICAgIGdldCBtaW5QYW5lbFNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtaW5QYW5lbFNpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW5QYW5lbFNpemUodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pblBhbmVsU2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1cnJlbnRTcGxpdFJhdGlvX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfbWluUGFuZWxTaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfY3VycmVudFNwbGl0UmF0aW9faW5pdGlhbGl6ZXJzLCA1MCkpOwogICAgZ2V0IGN1cnJlbnRTcGxpdFJhdGlvKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFNwbGl0UmF0aW9fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50U3BsaXRSYXRpbyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VycmVudFNwbGl0UmF0aW9fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0RyYWdnaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfY3VycmVudFNwbGl0UmF0aW9fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9pc0RyYWdnaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0RyYWdnaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNEcmFnZ2luZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzRHJhZ2dpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzRHJhZ2dpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHJlc2l6ZUhhbmRsZUVsZW1lbnQgPSBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9pc0RyYWdnaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGNvbnRhaW5lckVsZW1lbnQ7CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ic3BsaXRDb250YWluZXIgJHt0aGlzLmlzRHJhZ2dpbmcgPyAiZHJhZ2dpbmciIDogIiJ9Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3JDb250YWluZXIiIHN0eWxlPSJ3aWR0aDogJHt0aGlzLmN1cnJlbnRTcGxpdFJhdGlvfSUiPgogICAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1vbmFjbwogICAgICAgICAgICAubGFuZ3VhZ2U9JHsibWFya2Rvd24ifQogICAgICAgICAgICAuY29udGVudD0ke2AjIGEgdGVzdCBjb250ZW50CgpUaGlzIGlzIHRlc3QgY29udGVudCB0aGF0IGlzIG9mIGxvbmdlciBmb3JtIGFuIGhvcGVmdWxseSBzdGFydHMgdG8gd3JhcCB3aGVuIEkgbmVlZCBpdC4gQW5kIHllcywgaXQgZG9lcyBwZXJmZWN0bHkuIG5pY2UuCgpUZXN0IHwgSGVsbG8KLS0tIHwgLS0tClllYWggfCBTbyBnb29kCgpUaGlzIGlzIHJlYWwgYXNzZXQgSSB0aGluay4gV2h5IHdvdWxkIHdlIHdhbnQgdG8gbGVhdmUgdGhhdCBvbiB0aGUgdGFibGU/IENhbiB5b3UgdGVsbCBteSB0aGF0PwoKV2h5IGFyZSB3ZSBoZXJlPwoKRG8geW91IGtub3c/Cgo+IG5vdGU6ClRoZXJlIGlzIHNvbWV0aGluZyBnb2luZyBvbi4KClxgXGBcYHR5cGVzY3JpcHQKY29uc3QgaGVsbG8gPSAneWVzJwpcYFxgXGAKYH0KICAgICAgICAgICAgd29yZFdyYXA9ImJvdW5kZWQiCiAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS1tb25hY28+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9InJlc2l6ZUhhbmRsZSAke3RoaXMuaXNEcmFnZ2luZyA/ICJkcmFnZ2luZyIgOiAiIn0iCiAgICAgICAgICBAbW91c2Vkb3duPSR7dGhpcy5oYW5kbGVNb3VzZURvd259CiAgICAgICAgPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im91dGxldENvbnRhaW5lciIgc3R5bGU9IndpZHRoOiAkezEwMCAtIHRoaXMuY3VycmVudFNwbGl0UmF0aW99JSI+CiAgICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllc0FyZykgewogICAgICBhd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzQXJnKTsKICAgICAgdGhpcy5jdXJyZW50U3BsaXRSYXRpbyA9IHRoaXMuc3BsaXRSYXRpbzsKICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zcGxpdENvbnRhaW5lciIpOwogICAgICB0aGlzLnJlc2l6ZUhhbmRsZUVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnJlc2l6ZUhhbmRsZSIpOwogICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgIGNvbnN0IG1hcmtkb3duT3V0bGV0ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik7CiAgICAgIGNvbnN0IHNtYXJ0bWFya2Rvd25JbnN0YW5jZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0bWFya2Rvd24uU21hcnRNYXJrZG93bigpOwogICAgICBjb25zdCBtZFBhcnNlZFJlc3VsdCA9IGF3YWl0IHNtYXJ0bWFya2Rvd25JbnN0YW5jZS5nZXRNZFBhcnNlZFJlc3VsdEZyb21NYXJrZG93bigibG9hZGluZy4uLiIpOwogICAgICBlZGl0b3IuY29udGVudFN1YmplY3Quc3Vic2NyaWJlKGFzeW5jIChjb250ZW50QXJnKSA9PiB7CiAgICAgICAgYXdhaXQgbWRQYXJzZWRSZXN1bHQudXBkYXRlRnJvbU1hcmtkb3duU3RyaW5nKGNvbnRlbnRBcmcpOwogICAgICAgIGNvbnN0IGh0bWwyMCA9IG1kUGFyc2VkUmVzdWx0Lmh0bWw7CiAgICAgICAgbWFya2Rvd25PdXRsZXQudXBkYXRlSHRtbFRleHQoaHRtbDIwKTsKICAgICAgfSk7CiAgICB9CiAgICBoYW5kbGVNb3VzZURvd24gPSAoZTExKSA9PiB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZU1vdXNlVXApOwogICAgfTsKICAgIGhhbmRsZU1vdXNlTW92ZSA9IChlMTEpID0+IHsKICAgICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcgfHwgIXRoaXMuY29udGFpbmVyRWxlbWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLmNvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyUmVjdC53aWR0aDsKICAgICAgY29uc3QgbW91c2VYID0gZTExLmNsaWVudFggLSBjb250YWluZXJSZWN0LmxlZnQ7CiAgICAgIGxldCBuZXdSYXRpbyA9IG1vdXNlWCAvIGNvbnRhaW5lcldpZHRoICogMTAwOwogICAgICBuZXdSYXRpbyA9IE1hdGgubWF4KHRoaXMubWluUGFuZWxTaXplLCBNYXRoLm1pbigxMDAgLSB0aGlzLm1pblBhbmVsU2l6ZSwgbmV3UmF0aW8pKTsKICAgICAgdGhpcy5jdXJyZW50U3BsaXRSYXRpbyA9IG5ld1JhdGlvOwogICAgfTsKICAgIGhhbmRsZU1vdXNlVXAgPSAoKSA9PiB7CiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZU1vdXNlVXApOwogICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgIGlmIChlZGl0b3IpIHsKICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoInJlc2l6ZSIpKTsKICAgICAgfQogICAgfTsKICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZU1vdXNlVXApOwogICAgfQogICAgLyoqCiAgICAgKiBQcm9ncmFtbWF0aWNhbGx5IHNldCB0aGUgc3BsaXQgcmF0aW8KICAgICAqLwogICAgc2V0U3BsaXRSYXRpbyhyYXRpbykgewogICAgICB0aGlzLmN1cnJlbnRTcGxpdFJhdGlvID0gTWF0aC5tYXgodGhpcy5taW5QYW5lbFNpemUsIE1hdGgubWluKDEwMCAtIHRoaXMubWluUGFuZWxTaXplLCByYXRpbykpOwogICAgfQogICAgLyoqCiAgICAgKiBSZXNldCB0byBpbml0aWFsIHNwbGl0IHJhdGlvCiAgICAgKi8KICAgIHJlc2V0U3BsaXRSYXRpbygpIHsKICAgICAgdGhpcy5jdXJyZW50U3BsaXRSYXRpbyA9IHRoaXMuc3BsaXRSYXRpbzsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTcoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXb3Jrc3BhY2VNYXJrZG93bjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzM2ID0gKCkgPT4gYjJgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiA5MDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8IS0tIERlbW8gMTogSGVhZGluZ3MgLS0+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7IkhlYWRpbmdzIn0KICAgICAgICAuc3VidGl0bGU9JHsiQWxsIGhlYWRpbmcgbGV2ZWxzIGZyb20gSDEgdG8gSDYifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChwYW5lbEVsKSA9PiB7CiAgY29uc3Qgb3V0bGV0ID0gcGFuZWxFbC5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldCIpOwogIGF3YWl0IG91dGxldD8udXBkYXRlSHRtbFRleHQoYAogICAgICAgICAgICA8aDE+SGVhZGluZyBMZXZlbCAxPC9oMT4KICAgICAgICAgICAgPGgyPkhlYWRpbmcgTGV2ZWwgMjwvaDI+CiAgICAgICAgICAgIDxoMz5IZWFkaW5nIExldmVsIDM8L2gzPgogICAgICAgICAgICA8aDQ+SGVhZGluZyBMZXZlbCA0PC9oND4KICAgICAgICAgICAgPGg1PkhlYWRpbmcgTGV2ZWwgNTwvaDU+CiAgICAgICAgICAgIDxoNj5IZWFkaW5nIExldmVsIDY8L2g2PgogICAgICAgICAgYCk7Cn19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDI6IFRleHQgRm9ybWF0dGluZyAtLT4KICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiVGV4dCBGb3JtYXR0aW5nIn0KICAgICAgICAuc3VidGl0bGU9JHsiQm9sZCwgaXRhbGljLCBsaW5rcywgY29kZSwgYW5kIGtleWJvYXJkIGlucHV0In0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICBhd2FpdCBvdXRsZXQ/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPHA+VGhpcyBpcyBhIHBhcmFncmFwaCB3aXRoIDxzdHJvbmc+Ym9sZCB0ZXh0PC9zdHJvbmc+IGFuZCA8ZW0+aXRhbGljIHRleHQ8L2VtPi48L3A+CiAgICAgICAgICAgIDxwPllvdSBjYW4gYWxzbyB1c2UgPHN0cm9uZz48ZW0+Ym9sZCBpdGFsaWM8L2VtPjwvc3Ryb25nPiBmb3IgZW1waGFzaXMuPC9wPgogICAgICAgICAgICA8cD5IZXJlJ3MgYSA8YSBocmVmPSIjIj5saW5rIGV4YW1wbGU8L2E+IGFuZCBzb21lIDxjb2RlPmlubGluZSBjb2RlPC9jb2RlPi48L3A+CiAgICAgICAgICAgIDxwPlByZXNzIDxrYmQ+Q3RybDwva2JkPiArIDxrYmQ+Qzwva2JkPiB0byBjb3B5IHRleHQuPC9wPgogICAgICAgICAgICA8aHI+CiAgICAgICAgICAgIDxwPkFib3ZlIGlzIGEgaG9yaXpvbnRhbCBydWxlIHNlcGFyYXRvci48L3A+CiAgICAgICAgICBgKTsKfX0KICAgICAgPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD48L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8IS0tIERlbW8gMzogTGlzdHMgLS0+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7Ikxpc3RzIn0KICAgICAgICAuc3VidGl0bGU9JHsiT3JkZXJlZCwgdW5vcmRlcmVkLCBhbmQgdGFzayBsaXN0cyJ9CiAgICAgICAgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKHBhbmVsRWwpID0+IHsKICBjb25zdCBvdXRsZXQgPSBwYW5lbEVsLnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik7CiAgYXdhaXQgb3V0bGV0Py51cGRhdGVIdG1sVGV4dChgCiAgICAgICAgICAgIDxoMz5Vbm9yZGVyZWQgTGlzdDwvaDM+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+Rmlyc3QgaXRlbTwvbGk+CiAgICAgICAgICAgICAgPGxpPlNlY29uZCBpdGVtCiAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgIDxsaT5OZXN0ZWQgaXRlbSAxPC9saT4KICAgICAgICAgICAgICAgICAgPGxpPk5lc3RlZCBpdGVtIDI8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UaGlyZCBpdGVtPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxoMz5PcmRlcmVkIExpc3Q8L2gzPgogICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgPGxpPlN0ZXAgb25lPC9saT4KICAgICAgICAgICAgICA8bGk+U3RlcCB0d288L2xpPgogICAgICAgICAgICAgIDxsaT5TdGVwIHRocmVlPC9saT4KICAgICAgICAgICAgPC9vbD4KCiAgICAgICAgICAgIDxoMz5UYXNrIExpc3Q8L2gzPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0YXNrLWxpc3QtaXRlbSI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBjaGVja2VkIGRpc2FibGVkPiBDb21wbGV0ZWQgdGFzazwvbGk+CiAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0YXNrLWxpc3QtaXRlbSI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBkaXNhYmxlZD4gUGVuZGluZyB0YXNrPC9saT4KICAgICAgICAgICAgICA8bGkgY2xhc3M9InRhc2stbGlzdC1pdGVtIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGRpc2FibGVkPiBBbm90aGVyIHRhc2s8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgYCk7Cn19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDQ6IENvZGUgQmxvY2tzIC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJDb2RlIEJsb2NrcyJ9CiAgICAgICAgLnN1YnRpdGxlPSR7IlN5bnRheCBoaWdobGlnaHRlZCBjb2RlIGV4YW1wbGVzIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICBhd2FpdCBvdXRsZXQ/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPHA+SW5saW5lIGNvZGU6IDxjb2RlPmNvbnN0IGdyZWV0aW5nID0gIkhlbGxvLCBXb3JsZCEiOzwvY29kZT48L3A+CgogICAgICAgICAgICA8aDM+VHlwZVNjcmlwdCBFeGFtcGxlPC9oMz4KICAgICAgICAgICAgPHByZT48Y29kZT48c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5pbXBvcnQ8L3NwYW4+IHsgaHRtbCwgY3NzIH0gPHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+ZnJvbTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4nQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50Jzwvc3Bhbj47Cgo8c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5pbnRlcmZhY2U8L3NwYW4+IDxzcGFuIGNsYXNzPSJobGpzLXRpdGxlIj5JVXNlcjwvc3Bhbj4gewogIDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPm5hbWU8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+c3RyaW5nPC9zcGFuPjsKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj5lbWFpbDwvc3Bhbj46IDxzcGFuIGNsYXNzPSJobGpzLWJ1aWx0X2luIj5zdHJpbmc8L3NwYW4+OwogIDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPmFnZTwvc3Bhbj4/OiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+bnVtYmVyPC9zcGFuPjsKfQoKPHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJobGpzLXRpdGxlIj5nZXRVc2VyPC9zcGFuPiA9IDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmFzeW5jPC9zcGFuPiAoPHNwYW4gY2xhc3M9ImhsanMtYXR0ciI+aWQ8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+c3RyaW5nPC9zcGFuPik6IDxzcGFuIGNsYXNzPSJobGpzLWJ1aWx0X2luIj5Qcm9taXNlPC9zcGFuPiZsdDtJVXNlciZndDsgPSZndDsgewogIDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmNvbnN0PC9zcGFuPiByZXNwb25zZSA9IDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmF3YWl0PC9zcGFuPiBmZXRjaChcYC9hcGkvdXNlcnMvXCR7aWR9XGApOwogIDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPnJldHVybjwvc3Bhbj4gcmVzcG9uc2UuanNvbigpOwp9OzwvY29kZT48L3ByZT4KCiAgICAgICAgICAgIDxoMz5KU09OIEV4YW1wbGU8L2gzPgogICAgICAgICAgICA8cHJlPjxjb2RlPnsKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj4ibmFtZSI8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1zdHJpbmciPiJkZWVzLWNhdGFsb2ciPC9zcGFuPiwKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj4idmVyc2lvbiI8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1zdHJpbmciPiIzLjAuMCI8L3NwYW4+LAogIDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPiJkZXBlbmRlbmNpZXMiPC9zcGFuPjogewogICAgPHNwYW4gY2xhc3M9ImhsanMtYXR0ciI+IkBkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCI8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1zdHJpbmciPiJeMi4wLjAiPC9zcGFuPgogIH0KfTwvY29kZT48L3ByZT4KICAgICAgICAgIGApOwp9fQogICAgICA+CiAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDwhLS0gRGVtbyA1OiBUYWJsZXMgLS0+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7IlRhYmxlcyJ9CiAgICAgICAgLnN1YnRpdGxlPSR7IlN0eWxlZCB0YWJsZXMgd2l0aCBhbHRlcm5hdGluZyByb3dzIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICBhd2FpdCBvdXRsZXQ/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRoPkZlYXR1cmU8L3RoPgogICAgICAgICAgICAgICAgICA8dGg+U3RhdHVzPC90aD4KICAgICAgICAgICAgICAgICAgPHRoPlByaW9yaXR5PC90aD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZD5EYXJrIG1vZGUgc3VwcG9ydDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5Db21wbGV0ZWQ8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SGlnaDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+UmVzcG9uc2l2ZSBkZXNpZ248L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SW4gUHJvZ3Jlc3M8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+TWVkaXVtPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZD5BY2Nlc3NpYmlsaXR5PC90ZD4KICAgICAgICAgICAgICAgICAgPHRkPlBsYW5uZWQ8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SGlnaDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+RG9jdW1lbnRhdGlvbjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5JbiBQcm9ncmVzczwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5Mb3c8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgYCk7Cn19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDY6IEJsb2NrcXVvdGVzICYgQWxlcnRzIC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJCbG9ja3F1b3RlcyAmIEFsZXJ0cyJ9CiAgICAgICAgLnN1YnRpdGxlPSR7IlF1b3RlcyBhbmQgR2l0SHViLXN0eWxlIGFsZXJ0cyJ9CiAgICAgICAgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKHBhbmVsRWwpID0+IHsKICBjb25zdCBvdXRsZXQgPSBwYW5lbEVsLnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik7CiAgYXdhaXQgb3V0bGV0Py51cGRhdGVIdG1sVGV4dChgCiAgICAgICAgICAgIDxibG9ja3F1b3RlPgogICAgICAgICAgICAgIDxwPlRoaXMgaXMgYSBzdGFuZGFyZCBibG9ja3F1b3RlLiBJdCdzIGdyZWF0IGZvciBoaWdobGlnaHRpbmcgaW1wb3J0YW50IGluZm9ybWF0aW9uIG9yIHF1b3RlcyBmcm9tIG90aGVyIHNvdXJjZXMuPC9wPgogICAgICAgICAgICA8L2Jsb2NrcXVvdGU+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1hbGVydCBtYXJrZG93bi1hbGVydC1ub3RlIj4KICAgICAgICAgICAgICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoaXMgaXMgYW4gaW5mb3JtYXRpb25hbCBub3RlIHRvIGRyYXcgYXR0ZW50aW9uIHRvIGltcG9ydGFudCBkZXRhaWxzLjwvcD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1hbGVydCBtYXJrZG93bi1hbGVydC10aXAiPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+VGlwOjwvc3Ryb25nPiBIZXJlJ3MgYSBoZWxwZnVsIHRpcCB0byBpbXByb3ZlIHlvdXIgd29ya2Zsb3cuPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWFsZXJ0IG1hcmtkb3duLWFsZXJ0LWltcG9ydGFudCI+CiAgICAgICAgICAgICAgPHA+PHN0cm9uZz5JbXBvcnRhbnQ6PC9zdHJvbmc+IFRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdG9waWMuPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWFsZXJ0IG1hcmtkb3duLWFsZXJ0LXdhcm5pbmciPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+V2FybmluZzo8L3N0cm9uZz4gQmUgY2FyZWZ1bCB3aGVuIHBlcmZvcm1pbmcgdGhpcyBhY3Rpb24uPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWFsZXJ0IG1hcmtkb3duLWFsZXJ0LWNhdXRpb24iPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+Q2F1dGlvbjo8L3N0cm9uZz4gVGhpcyBhY3Rpb24gbWF5IGhhdmUgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGApOwp9fQogICAgICA+CiAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDwhLS0gRGVtbyA3OiBGdWxsIERvY3VtZW50IC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJGdWxsIERvY3VtZW50In0KICAgICAgICAuc3VidGl0bGU9JHsiQSBjb21wbGV0ZSBtYXJrZG93biBkb2N1bWVudCBleGFtcGxlIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICBhd2FpdCBvdXRsZXQ/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPGgxPkdldHRpbmcgU3RhcnRlZCBHdWlkZTwvaDE+CiAgICAgICAgICAgIDxwPldlbGNvbWUgdG8gdGhlIDxzdHJvbmc+ZGVlcy1jYXRhbG9nPC9zdHJvbmc+IGNvbXBvbmVudCBsaWJyYXJ5LiBUaGlzIGd1aWRlIHdpbGwgaGVscCB5b3UgZ2V0IHVwIGFuZCBydW5uaW5nIHF1aWNrbHkuPC9wPgoKICAgICAgICAgICAgPGgyPkluc3RhbGxhdGlvbjwvaDI+CiAgICAgICAgICAgIDxwPkluc3RhbGwgdGhlIHBhY2thZ2UgdXNpbmcgeW91ciBwcmVmZXJyZWQgcGFja2FnZSBtYW5hZ2VyOjwvcD4KICAgICAgICAgICAgPHByZT48Y29kZT48c3BhbiBjbGFzcz0iaGxqcy1jb21tZW50Ij4jIFVzaW5nIHBucG0gKHJlY29tbWVuZGVkKTwvc3Bhbj4KcG5wbSBhZGQgQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nCgo8c3BhbiBjbGFzcz0iaGxqcy1jb21tZW50Ij4jIFVzaW5nIG5wbTwvc3Bhbj4KbnBtIGluc3RhbGwgQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nPC9jb2RlPjwvcHJlPgoKICAgICAgICAgICAgPGgyPkJhc2ljIFVzYWdlPC9oMj4KICAgICAgICAgICAgPHA+SW1wb3J0IGFuZCB1c2UgY29tcG9uZW50cyBpbiB5b3VyIFR5cGVTY3JpcHQgZmlsZXM6PC9wPgogICAgICAgICAgICA8cHJlPjxjb2RlPjxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmltcG9ydDwvc3Bhbj4geyBEZWVzQnV0dG9uIH0gPHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+ZnJvbTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4nQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nJzwvc3Bhbj47Cgo8c3BhbiBjbGFzcz0iaGxqcy1jb21tZW50Ij4vLyBVc2UgaW4geW91ciB0ZW1wbGF0ZXM8L3NwYW4+Cmh0bWxcYCZsdDtkZWVzLWJ1dHRvbiZndDtDbGljayBtZSZsdDsvZGVlcy1idXR0b24mZ3Q7XGA8L2NvZGU+PC9wcmU+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1hbGVydCBtYXJrZG93bi1hbGVydC10aXAiPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+VGlwOjwvc3Ryb25nPiBDaGVjayB0aGUgZGVtbyBzaG93Y2FzZSBmb3IgbGl2ZSBleGFtcGxlcyBvZiBhbGwgY29tcG9uZW50cy48L3A+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGgyPkF2YWlsYWJsZSBDb21wb25lbnRzPC9oMj4KICAgICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRoPkNvbXBvbmVudDwvdGg+CiAgICAgICAgICAgICAgICAgIDx0aD5EZXNjcmlwdGlvbjwvdGg+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+ZGVlcy1idXR0b248L2NvZGU+PC90ZD4KICAgICAgICAgICAgICAgICAgPHRkPlByaW1hcnkgYnV0dG9uIGNvbXBvbmVudDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+ZGVlcy1pbnB1dC10ZXh0PC9jb2RlPjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5UZXh0IGlucHV0IGZpZWxkPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZD48Y29kZT5kZWVzLXRhYmxlPC9jb2RlPjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5EYXRhIHRhYmxlIHdpdGggc29ydGluZzwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+ZGVlcy1tb2RhbDwvY29kZT48L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+TW9kYWwgZGlhbG9nPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgPC90YWJsZT4KCiAgICAgICAgICAgIDxoMj5OZXh0IFN0ZXBzPC9oMj4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5FeHBsb3JlIHRoZSA8YSBocmVmPSIjIj5jb21wb25lbnQgZG9jdW1lbnRhdGlvbjwvYT48L2xpPgogICAgICAgICAgICAgIDxsaT5DaGVjayBvdXQgdGhlIDxhIGhyZWY9IiMiPnRoZW1pbmcgZ3VpZGU8L2E+PC9saT4KICAgICAgICAgICAgICA8bGk+Sm9pbiBvdXIgPGEgaHJlZj0iIyI+Y29tbXVuaXR5IERpc2NvcmQ8L2E+PC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxibG9ja3F1b3RlPgogICAgICAgICAgICAgIDxwPiJUaGUgYmVzdCBjb21wb25lbnQgbGlicmFyeSBpcyBvbmUgdGhhdCBnZXRzIG91dCBvZiB5b3VyIHdheS4iIFx1MjAxNCBEZXNpZ24gU3lzdGVtcyBUZWFtPC9wPgogICAgICAgICAgICA8L2Jsb2NrcXVvdGU+CiAgICAgICAgICBgKTsKfX0KICAgICAgPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD48L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTU3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM1OCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1dvcmtzcGFjZU1hcmtkb3dub3V0bGV0ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgdmFyIERlZXNXb3Jrc3BhY2VNYXJrZG93bm91dGxldDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9fZXNEZWNvcmF0ZTU3KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1dvcmtzcGFjZU1hcmtkb3dub3V0bGV0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBERU1PCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzY7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdOb3RvIFNhbnMnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzI0MjkyZiIsICIjZTZlZGYzIil9OwogICAgICB9CgogICAgICAub3V0bGV0IHsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KCiAgICAgIC8qIEhlYWRpbmdzICovCiAgICAgIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYgewogICAgICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI1OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFmMjMyOCIsICIjZjBmNmZjIil9OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgZm9udC1zaXplOiAyZW07CiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuM2VtOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDllMCIsICIjMzAzNjNkIil9OwogICAgICB9CgogICAgICBoMiB7CiAgICAgICAgZm9udC1zaXplOiAxLjVlbTsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMC4zZW07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkOWUwIiwgIiMzMDM2M2QiKX07CiAgICAgIH0KCiAgICAgIGgzIHsKICAgICAgICBmb250LXNpemU6IDEuMjVlbTsKICAgICAgfQoKICAgICAgaDQgewogICAgICAgIGZvbnQtc2l6ZTogMWVtOwogICAgICB9CgogICAgICBoNSB7CiAgICAgICAgZm9udC1zaXplOiAwLjg3NWVtOwogICAgICB9CgogICAgICBoNiB7CiAgICAgICAgZm9udC1zaXplOiAwLjg1ZW07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjU2ZDc2IiwgIiM4Yjk0OWUiKX07CiAgICAgIH0KCiAgICAgIC8qIFBhcmFncmFwaHMgYW5kIHRleHQgKi8KICAgICAgcCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAvKiBMaW5rcyAqLwogICAgICBhIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTY5ZGEiLCAiIzU4YTZmZiIpfTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgIGE6aG92ZXIgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CgogICAgICAvKiBTdHJvbmcgYW5kIGVtcGhhc2lzICovCiAgICAgIHN0cm9uZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZjIzMjgiLCAiI2YwZjZmYyIpfTsKICAgICAgfQoKICAgICAgZW0gewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLyogTGlzdHMgKi8KICAgICAgdWwsIG9sIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyZW07CiAgICAgIH0KCiAgICAgIGxpIHsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIGxpICsgbGkgewogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQoKICAgICAgdWwgdWwsIHVsIG9sLCBvbCB1bCwgb2wgb2wgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLyogQmxvY2txdW90ZXMgKi8KICAgICAgYmxvY2txdW90ZSB7CiAgICAgICAgbWFyZ2luOiAwIDAgMTZweCAwOwogICAgICAgIHBhZGRpbmc6IDAgMWVtOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY1NmQ3NiIsICIjOGI5NDllIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgfQoKICAgICAgYmxvY2txdW90ZSA+IDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgfQoKICAgICAgYmxvY2txdW90ZSA+IDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CgogICAgICAvKiBJbmxpbmUgY29kZSAqLwogICAgICBjb2RlIHsKICAgICAgICBwYWRkaW5nOiAwLjJlbSAwLjRlbTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC1zaXplOiA4NSU7CiAgICAgICAgZm9udC1mYW1pbHk6IHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsICdTRiBNb25vJywgTWVubG8sIENvbnNvbGFzLCAnTGliZXJhdGlvbiBNb25vJywgbW9ub3NwYWNlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE3NSwgMTg0LCAxOTMsIDAuMikiLCAicmdiYSgxMTAsIDExOCwgMTI5LCAwLjQpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzOwogICAgICB9CgogICAgICAvKiBDb2RlIGJsb2NrcyAqLwogICAgICBwcmUgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGZvbnQtc2l6ZTogODUlOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ1OwogICAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCAnU0YgTW9ubycsIE1lbmxvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y2ZjhmYSIsICIjMTYxYjIyIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB3b3JkLXdyYXA6IG5vcm1hbDsKICAgICAgfQoKICAgICAgcHJlIGNvZGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgIHdvcmQtd3JhcDogbm9ybWFsOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBmb250LXNpemU6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKICAgICAgfQoKICAgICAgLyogVGFibGVzICovCiAgICAgIHRhYmxlIHsKICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBib3JkZXItc3BhY2luZzogMDsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICB0YWJsZSB0aCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDllMCIsICIjMzAzNjNkIil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjZmOGZhIiwgIiMxNjFiMjIiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWYyMzI4IiwgIiNlNmVkZjMiKX07CiAgICAgIH0KCiAgICAgIHRhYmxlIHRkIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDllMCIsICIjMzAzNjNkIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFmMjMyOCIsICIjZTZlZGYzIil9OwogICAgICB9CgogICAgICB0YWJsZSB0ciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzBkMTExNyIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzIxMjYyZCIpfTsKICAgICAgfQoKICAgICAgdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNmY4ZmEiLCAiIzE2MWIyMiIpfTsKICAgICAgfQoKICAgICAgLyogSG9yaXpvbnRhbCBydWxlcyAqLwogICAgICBociB7CiAgICAgICAgaGVpZ2h0OiA0cHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDI0cHggMDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDllMCIsICIjMzAzNjNkIil9OwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgIH0KCiAgICAgIC8qIEltYWdlcyAqLwogICAgICBpbWcgewogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgfQoKICAgICAgLyogVGFzayBsaXN0cyAqLwogICAgICAudGFzay1saXN0LWl0ZW0gewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgfQoKICAgICAgLnRhc2stbGlzdC1pdGVtIGlucHV0IHsKICAgICAgICBtYXJnaW46IDAgMC4yZW0gMC4yNWVtIC0xLjRlbTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAvKiBEZWZpbml0aW9uIGxpc3RzICovCiAgICAgIGRsIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICBkbCBkdCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMWVtOwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CgogICAgICBkbCBkZCB7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC8qIEtleWJvYXJkIGlucHV0ICovCiAgICAgIGtiZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBhZGRpbmc6IDNweCA1cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCAnU0YgTW9ubycsIE1lbmxvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTsKICAgICAgICBsaW5lLWhlaWdodDogMTBweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZjIzMjgiLCAiI2U2ZWRmMyIpfTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjZmOGZhIiwgIiMxNjFiMjIiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgfQoKICAgICAgLyogRm9vdG5vdGVzICovCiAgICAgIC5mb290bm90ZXMgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2NTZkNzYiLCAiIzhiOTQ5ZSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OwogICAgICB9CgogICAgICAvKiBBbGVydHMvQWRtb25pdGlvbnMgKi8KICAgICAgLm1hcmtkb3duLWFsZXJ0IHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtbm90ZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5NjlkYSIsICIjNThhNmZmIil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDksIDEwNSwgMjE4LCAwLjEpIiwgInJnYmEoNTYsIDEzOSwgMjUzLCAwLjEpIil9OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtd2FybmluZyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2JmODcwMCIsICIjZDI5OTIyIil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE5MSwgMTM1LCAwLCAwLjEpIiwgInJnYmEoMTg3LCAxMjgsIDksIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5tYXJrZG93bi1hbGVydC1pbXBvcnRhbnQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM4MjUwZGYiLCAiI2EzNzFmNyIpfTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgxMzAsIDgwLCAyMjMsIDAuMSkiLCAicmdiYSgxNjMsIDExMywgMjQ3LCAwLjEpIil9OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtY2F1dGlvbiB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2NmMjIyZSIsICIjZjg1MTQ5Iil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIwNywgMzQsIDQ2LCAwLjEpIiwgInJnYmEoMjQ4LCA4MSwgNzMsIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5tYXJrZG93bi1hbGVydC10aXAgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxYTdmMzciLCAiIzNmYjk1MCIpfTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNiwgMTI3LCA1NSwgMC4xKSIsICJyZ2JhKDQ2LCAxNjAsIDY3LCAwLjEpIil9OwogICAgICB9CgogICAgICAvKiBTeW50YXggaGlnaGxpZ2h0aW5nIGZvciBjb2RlIGJsb2NrcyAqLwogICAgICAuaGxqcy1jb21tZW50LAogICAgICAuaGxqcy1xdW90ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmE3MzdkIiwgIiM4Yjk0OWUiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWtleXdvcmQsCiAgICAgIC5obGpzLXNlbGVjdG9yLXRhZywKICAgICAgLmhsanMtYWRkaXRpb24gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Q3M2E0OSIsICIjZmY3YjcyIil9OwogICAgICB9CgogICAgICAuaGxqcy1udW1iZXIsCiAgICAgIC5obGpzLXN0cmluZywKICAgICAgLmhsanMtbWV0YSAuaGxqcy1tZXRhLXN0cmluZywKICAgICAgLmhsanMtbGl0ZXJhbCwKICAgICAgLmhsanMtZG9jdGFnLAogICAgICAuaGxqcy1yZWdleHAgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAzMmY2MiIsICIjYTVkNmZmIil9OwogICAgICB9CgogICAgICAuaGxqcy10aXRsZSwKICAgICAgLmhsanMtc2VjdGlvbiwKICAgICAgLmhsanMtbmFtZSwKICAgICAgLmhsanMtc2VsZWN0b3ItaWQsCiAgICAgIC5obGpzLXNlbGVjdG9yLWNsYXNzIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2ZjQyYzEiLCAiI2QyYThmZiIpfTsKICAgICAgfQoKICAgICAgLmhsanMtYXR0cmlidXRlLAogICAgICAuaGxqcy1hdHRyLAogICAgICAuaGxqcy12YXJpYWJsZSwKICAgICAgLmhsanMtdGVtcGxhdGUtdmFyaWFibGUsCiAgICAgIC5obGpzLWNsYXNzIC5obGpzLXRpdGxlLAogICAgICAuaGxqcy10eXBlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDVjYzUiLCAiIzc5YzBmZiIpfTsKICAgICAgfQoKICAgICAgLmhsanMtc3ltYm9sLAogICAgICAuaGxqcy1idWxsZXQsCiAgICAgIC5obGpzLXN1YnN0LAogICAgICAuaGxqcy1tZXRhLAogICAgICAuaGxqcy1tZXRhIC5obGpzLWtleXdvcmQsCiAgICAgIC5obGpzLXNlbGVjdG9yLWF0dHIsCiAgICAgIC5obGpzLXNlbGVjdG9yLXBzZXVkbywKICAgICAgLmhsanMtbGluayB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTM2MjA5IiwgIiNmZmE2NTciKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWJ1aWx0X2luLAogICAgICAuaGxqcy1kZWxldGlvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjYjMxZDI4IiwgIiNmZmExOTgiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWZvcm11bGEgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjZmOGZhIiwgIiMxNjFiMjIiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWVtcGhhc2lzIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5obGpzLXN0cm9uZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICAvLyBJTlNUQU5DRQogICAgb3V0bGV0OwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im91dGxldCI+CiAgICAgICAgPGgxPk1hcmtkb3duIFByZXZpZXc8L2gxPgogICAgICAgIDxwPkNvbnRlbnQgd2lsbCBhcHBlYXIgaGVyZSB3aGVuIG1hcmtkb3duIGlzIHBhcnNlZC48L3A+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgYXdhaXQgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIHRoaXMub3V0bGV0ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5vdXRsZXQiKTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZUh0bWxUZXh0KGh0bWxUZXh0QXJnKSB7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGlmICghdGhpcy5vdXRsZXQpIHsKICAgICAgICB0aGlzLm91dGxldCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIub3V0bGV0Iik7CiAgICAgIH0KICAgICAgdGhpcy5vdXRsZXQuaW5uZXJIVE1MID0gaHRtbFRleHRBcmc7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczU4KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlTWFya2Rvd25vdXRsZXQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWxpc3QvZGVlcy1pbnB1dC1saXN0LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMzcgPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2YzZjRmNjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGNvbG9yOiAjMzc0MTUxOwogICAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOwogICAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAub3V0cHV0LXByZXZpZXcgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMmMyYzJjOwogICAgICAgICAgICBjb2xvcjogI2U0ZTRlNzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmZlYXR1cmUtbm90ZSB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNlZmY2ZmY7CiAgICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICMzYjgyZjY7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBjb2xvcjogIzFlNDBhZjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLmZlYXR1cmUtbm90ZSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxZTNhNWY7CiAgICAgICAgICAgIGNvbG9yOiAjOTNjNWZkOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjEuIEJhc2ljIExpc3QgSW5wdXQifSAuc3VidGl0bGU9JHsiU2ltcGxlIGxpc3QgbWFuYWdlbWVudCB3aXRoIGFkZCwgZWRpdCwgYW5kIGRlbGV0ZSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJTaG9wcGluZyBMaXN0In0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBZGQgaXRlbSB0byB5b3VyIGxpc3QuLi4ifQogICAgICAgICAgLnZhbHVlPSR7WyJNaWxrIiwgIkJyZWFkIiwgIkVnZ3MiLCAiQ2hlZXNlIl19CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRG91YmxlLWNsaWNrIHRvIGVkaXQgaXRlbXMsIG9yIHVzZSB0aGUgZWRpdCBidXR0b24ifQogICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5vdGUiPgogICAgICAgICAg8J+SoSBEb3VibGUtY2xpY2sgYW55IGl0ZW0gdG8gcXVpY2tseSBlZGl0IGl0IGlubGluZQogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gU29ydGFibGUgTGlzdCJ9IC5zdWJ0aXRsZT0keyJEcmFnIGFuZCBkcm9wIHRvIHJlb3JkZXIgaXRlbXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAubGFiZWw9JHsiVGFzayBQcmlvcml0eSJ9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIGEgdGFzay4uLiJ9CiAgICAgICAgICAuc29ydGFibGU9JHt0cnVlfQogICAgICAgICAgLnZhbHVlPSR7WwogICJSZXZpZXcgcHVsbCByZXF1ZXN0cyIsCiAgIkZpeCBjcml0aWNhbCBidWciLAogICJVcGRhdGUgZG9jdW1lbnRhdGlvbiIsCiAgIkRlcGxveSB0byBwcm9kdWN0aW9uIiwKICAiVGVhbSBzdGFuZHVwIG1lZXRpbmciCl19CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRHJhZyBpdGVtcyB1c2luZyB0aGUgaGFuZGxlIHRvIHJlb3JkZXIgdGhlbSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtbm90ZSI+CiAgICAgICAgICDwn5SEIERyYWcgdGhlIGdyaXAgaGFuZGxlIHRvIHJlb3JkZXIgdGFza3MgYnkgcHJpb3JpdHkKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIFZhbGlkYXRpb24gJiBDb25zdHJhaW50cyJ9IC5zdWJ0aXRsZT0keyJMaXN0cyB3aXRoIG1pbmltdW0vbWF4aW11bSBpdGVtcyBhbmQgZHVwbGljYXRlIHByZXZlbnRpb24ifT4KICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWxheW91dCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJUZWFtIE1lbWJlcnMgKE1pbiAyLCBNYXggNSkifQogICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIHRlYW0gbWVtYmVyLi4uIn0KICAgICAgICAgICAgLm1pbkl0ZW1zPSR7Mn0KICAgICAgICAgICAgLm1heEl0ZW1zPSR7NX0KICAgICAgICAgICAgLnZhbHVlPSR7WyJBbGljZSIsICJCb2IiXX0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFkZCAyLTUgdGVhbSBtZW1iZXJzIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAubGFiZWw9JHsiVW5pcXVlIFRhZ3MgKE5vIER1cGxpY2F0ZXMpIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCB1bmlxdWUgdGFnLi4uIn0KICAgICAgICAgICAgLmFsbG93RHVwbGljYXRlcz0ke2ZhbHNlfQogICAgICAgICAgICAudmFsdWU9JHtbImZyb250ZW5kIiwgImJhY2tlbmQiLCAiZGF0YWJhc2UiXX0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkR1cGxpY2F0ZSBpdGVtcyBhcmUgbm90IGFsbG93ZWQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNC4gRGVsZXRlIENvbmZpcm1hdGlvbiJ9IC5zdWJ0aXRsZT0keyJSZXF1aXJlIGNvbmZpcm1hdGlvbiBiZWZvcmUgZGVsZXRpbmcgaXRlbXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAubGFiZWw9JHsiSW1wb3J0YW50IERvY3VtZW50cyJ9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIGRvY3VtZW50IG5hbWUuLi4ifQogICAgICAgICAgLmNvbmZpcm1EZWxldGU9JHt0cnVlfQogICAgICAgICAgLnZhbHVlPSR7WwogICJDb250cmFjdF8yMDI0LnBkZiIsCiAgIkZpbmFuY2lhbF9SZXBvcnRfUTMueGxzeCIsCiAgIlByb2plY3RfUHJvcG9zYWwuZG9jeCIsCiAgIk1lZXRpbmdfTm90ZXMudHh0IgpdfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkRlbGV0aW9uIHJlcXVpcmVzIGNvbmZpcm1hdGlvbiBmb3Igc2FmZXR5In0KICAgICAgICA+PC9kZWVzLWlucHV0LWxpc3Q+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI1LiBEaXNhYmxlZCBTdGF0ZSJ9IC5zdWJ0aXRsZT0keyJSZWFkLW9ubHkgbGlzdCBkaXNwbGF5In0+CiAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlN5c3RlbSBEZWZhdWx0cyJ9CiAgICAgICAgICAudmFsdWU9JHtbIkRlZmF1bHQgU2V0dGluZyAxIiwgIkRlZmF1bHQgU2V0dGluZyAyIiwgIkRlZmF1bHQgU2V0dGluZyAzIl19CiAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoZXNlIGl0ZW1zIGNhbm5vdCBiZSBtb2RpZmllZCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNi4gRm9ybSBJbnRlZ3JhdGlvbiJ9IC5zdWJ0aXRsZT0keyJMaXN0IGlucHV0IHdvcmtpbmcgd2l0aGluIGEgZm9ybSBjb250ZXh0In0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IlJlY2lwZSBOYW1lIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7Ik15IEFtYXppbmcgUmVjaXBlIn0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgLmtleT0keyJuYW1lIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAgICAgLmxhYmVsPSR7IkluZ3JlZGllbnRzIn0KICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIGluZ3JlZGllbnQuLi4ifQogICAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgICAgLm1pbkl0ZW1zPSR7M30KICAgICAgICAgICAgICAua2V5PSR7ImluZ3JlZGllbnRzIn0KICAgICAgICAgICAgICAuc29ydGFibGU9JHt0cnVlfQogICAgICAgICAgICAgIC52YWx1ZT0ke1sKICAiMiBjdXBzIGZsb3VyIiwKICAiMSBjdXAgc3VnYXIiLAogICIzIGVnZ3MiCl19CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFkZCBhdCBsZWFzdCAzIGluZ3JlZGllbnRzIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAgIC5sYWJlbD0keyJJbnN0cnVjdGlvbnMifQogICAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBZGQgaW5zdHJ1Y3Rpb24gc3RlcC4uLiJ9CiAgICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgICAubWluSXRlbXM9JHsyfQogICAgICAgICAgICAgIC5rZXk9JHsiaW5zdHJ1Y3Rpb25zIn0KICAgICAgICAgICAgICAuc29ydGFibGU9JHt0cnVlfQogICAgICAgICAgICAgIC52YWx1ZT0ke1sKICAiUHJlaGVhdCBvdmVuIHRvIDM1MFx4QjBGIiwKICAiTWl4IGRyeSBpbmdyZWRpZW50cyIKXX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGNvb2tpbmcgaW5zdHJ1Y3Rpb25zIGluIG9yZGVyIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7Ik5vdGVzIn0KICAgICAgICAgICAgLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9CiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBbnkgc3BlY2lhbCBub3RlcyBvciB0aXBzLi4uIn0KICAgICAgICAgICAgLmtleT0keyJub3RlcyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IC50ZXh0PSR7IlNhdmUgUmVjaXBlIn0+PC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNy4gSW50ZXJhY3RpdmUgRGVtbyJ9IC5zdWJ0aXRsZT0keyJCdWlsZCB5b3VyIG93biBmZWF0dXJlIGxpc3QgYW5kIHNlZSB0aGUgZGF0YSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS1saXN0IgogICAgICAgICAgLmxhYmVsPSR7IlByb2R1Y3QgRmVhdHVyZXMifQogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCBhIGZlYXR1cmUuLi4ifQogICAgICAgICAgLnNvcnRhYmxlPSR7dHJ1ZX0KICAgICAgICAgIC5jb25maXJtRGVsZXRlPSR7ZmFsc2V9CiAgICAgICAgICAuYWxsb3dEdXBsaWNhdGVzPSR7ZmFsc2V9CiAgICAgICAgICAubWF4SXRlbXM9JHsxMH0KICAgICAgICAgIEBjaGFuZ2U9JHsoZTExKSA9PiB7CiAgY29uc3QgcHJldmlldyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNsaXN0LWpzb24iKTsKICBpZiAocHJldmlldykgewogICAgY29uc3QgZGF0YSA9IHsKICAgICAgaXRlbXM6IGUxMS5kZXRhaWwudmFsdWUsCiAgICAgIGNvdW50OiBlMTEuZGV0YWlsLnZhbHVlLmxlbmd0aCwKICAgICAgdGltZXN0YW1wOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCkKICAgIH07CiAgICBwcmV2aWV3LnRleHRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7CiAgfQp9fQogICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJvdXRwdXQtcHJldmlldyIgaWQ9Imxpc3QtanNvbiI+CiAgICAgICAgICB7CiAgICAgICAgICAgICJpdGVtcyI6IFtdLAogICAgICAgICAgICAiY291bnQiOiAwLAogICAgICAgICAgICAidGltZXN0YW1wIjogIiR7KC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpfSIKICAgICAgICAgIH0KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5vdGUiPgogICAgICAgICAg4pyoIEFkZCwgZWRpdCwgcmVtb3ZlLCBhbmQgcmVvcmRlciBpdGVtcyB0byBzZWUgdGhlIEpTT04gb3V0cHV0IHVwZGF0ZSBpbiByZWFsLXRpbWUKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjguIEFkdmFuY2VkIENvbmZpZ3VyYXRpb24ifSAuc3VidGl0bGU9JHsiQ29tYmluZSBhbGwgZmVhdHVyZXMgZm9yIGNvbXBsZXggdXNlIGNhc2VzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlByb2plY3QgTWlsZXN0b25lcyJ9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIG1pbGVzdG9uZS4uLiJ9CiAgICAgICAgICAudmFsdWU9JHtbCiAgIlByb2plY3QgS2lja29mZiAtIFdlZWsgMSIsCiAgIlJlcXVpcmVtZW50cyBHYXRoZXJpbmcgLSBXZWVrIDItMyIsCiAgIkRlc2lnbiBQaGFzZSAtIFdlZWsgNC02IiwKICAiRGV2ZWxvcG1lbnQgU3ByaW50IDEgLSBXZWVrIDctOSIsCiAgIlRlc3RpbmcgJiBRQSAtIFdlZWsgMTAtMTEiLAogICJEZXBsb3ltZW50IC0gV2VlayAxMiIKXX0KICAgICAgICAgIC5zb3J0YWJsZT0ke3RydWV9CiAgICAgICAgICAuY29uZmlybURlbGV0ZT0ke3RydWV9CiAgICAgICAgICAuYWxsb3dEdXBsaWNhdGVzPSR7ZmFsc2V9CiAgICAgICAgICAubWluSXRlbXM9JHszfQogICAgICAgICAgLm1heEl0ZW1zPSR7MTJ9CiAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7Ik1hbmFnZSBwcm9qZWN0IG1pbGVzdG9uZXMgKDMtMTIgaXRlbXMsIHNvcnRhYmxlLCBubyBkdXBsaWNhdGVzKSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiOS4gRW1wdHkgU3RhdGUifSAuc3VidGl0bGU9JHsiSG93IHRoZSBjb21wb25lbnQgbG9va3Mgd2l0aCBubyBpdGVtcyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJZb3VyIElkZWFzIn0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJTaGFyZSB5b3VyIGlkZWFzLi4uIn0KICAgICAgICAgIC52YWx1ZT0ke1tdfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlN0YXJ0IGFkZGluZyBpdGVtcyB0byBidWlsZCB5b3VyIGxpc3QifQogICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtbGlzdC9kZWVzLWlucHV0LWxpc3QuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNTggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczU5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRMaXN0ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1saXN0IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9yczsKICBsZXQgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21heEl0ZW1zX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21heEl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5JdGVtc19kZWNvcmF0b3JzOwogIGxldCBfbWluSXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5JdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWxsb3dEdXBsaWNhdGVzX2RlY29yYXRvcnM7CiAgbGV0IF9hbGxvd0R1cGxpY2F0ZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hbGxvd0R1cGxpY2F0ZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NvcnRhYmxlX2RlY29yYXRvcnM7CiAgbGV0IF9zb3J0YWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NvcnRhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb25maXJtRGVsZXRlX2RlY29yYXRvcnM7CiAgbGV0IF9jb25maXJtRGVsZXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29uZmlybURlbGV0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9yczsKICBsZXQgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lucHV0VmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX2lucHV0VmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lZGl0aW5nSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX2VkaXRpbmdJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VkaXRpbmdJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZWRpdGluZ1ZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF9lZGl0aW5nVmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lZGl0aW5nVmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RyYWdnZWRJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfZHJhZ2dlZEluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ2dlZEluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kcmFnT3ZlckluZGV4X2RlY29yYXRvcnM7CiAgbGV0IF9kcmFnT3ZlckluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ092ZXJJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ1N0YXJ0WV9kZWNvcmF0b3JzOwogIGxldCBfZHJhZ1N0YXJ0WV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RyYWdTdGFydFlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RyYWdDdXJyZW50WV9kZWNvcmF0b3JzOwogIGxldCBfZHJhZ0N1cnJlbnRZX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ0N1cnJlbnRZX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YXJnZXRJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfdGFyZ2V0SW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YXJnZXRJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXRlbUhlaWdodF9kZWNvcmF0b3JzOwogIGxldCBfaXRlbUhlaWdodF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2l0ZW1IZWlnaHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0TGlzdDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tYXhJdGVtc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX21pbkl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfYWxsb3dEdXBsaWNhdGVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX3NvcnRhYmxlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2NvbmZpcm1EZWxldGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9lZGl0aW5nSW5kZXhfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2VkaXRpbmdWYWx1ZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZHJhZ2dlZEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kcmFnT3ZlckluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kcmFnU3RhcnRZX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kcmFnQ3VycmVudFlfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3RhcmdldEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pdGVtSGVpZ2h0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTU4KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBsYWNlaG9sZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwbGFjZWhvbGRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wbGFjZWhvbGRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGxhY2Vob2xkZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfbWF4SXRlbXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWF4SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heEl0ZW1zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heEl0ZW1zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYXhJdGVtcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhJdGVtc19pbml0aWFsaXplcnMsIF9tYXhJdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU4KHRoaXMsIG51bGwsIF9taW5JdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtaW5JdGVtcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWluSXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWluSXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1pbkl0ZW1zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21pbkl0ZW1zX2luaXRpYWxpemVycywgX21pbkl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2FsbG93RHVwbGljYXRlc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhbGxvd0R1cGxpY2F0ZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFsbG93RHVwbGljYXRlcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hbGxvd0R1cGxpY2F0ZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFsbG93RHVwbGljYXRlcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hbGxvd0R1cGxpY2F0ZXNfaW5pdGlhbGl6ZXJzLCBfYWxsb3dEdXBsaWNhdGVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX3NvcnRhYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNvcnRhYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzb3J0YWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zb3J0YWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc29ydGFibGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc29ydGFibGVfaW5pdGlhbGl6ZXJzLCBfc29ydGFibGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfY29uZmlybURlbGV0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb25maXJtRGVsZXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb25maXJtRGVsZXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbmZpcm1EZWxldGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbmZpcm1EZWxldGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29uZmlybURlbGV0ZV9pbml0aWFsaXplcnMsIF9jb25maXJtRGVsZXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX3ZhbGlkYXRpb25UZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbGlkYXRpb25UZXh0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uVGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWxpZGF0aW9uVGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsaWRhdGlvblRleHQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvblRleHRfaW5pdGlhbGl6ZXJzLCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfaW5wdXRWYWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbnB1dFZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbnB1dFZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlucHV0VmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlucHV0VmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5wdXRWYWx1ZV9pbml0aWFsaXplcnMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2VkaXRpbmdJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlZGl0aW5nSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVkaXRpbmdJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lZGl0aW5nSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVkaXRpbmdJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lZGl0aW5nSW5kZXhfaW5pdGlhbGl6ZXJzLCBfZWRpdGluZ0luZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2VkaXRpbmdWYWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlZGl0aW5nVmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVkaXRpbmdWYWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lZGl0aW5nVmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVkaXRpbmdWYWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lZGl0aW5nVmFsdWVfaW5pdGlhbGl6ZXJzLCBfZWRpdGluZ1ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2RyYWdnZWRJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkcmFnZ2VkSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRyYWdnZWRJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kcmFnZ2VkSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRyYWdnZWRJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kcmFnZ2VkSW5kZXhfaW5pdGlhbGl6ZXJzLCBfZHJhZ2dlZEluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2RyYWdPdmVySW5kZXhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZHJhZ092ZXJJbmRleCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHJhZ092ZXJJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kcmFnT3ZlckluZGV4LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kcmFnT3ZlckluZGV4ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RyYWdPdmVySW5kZXhfaW5pdGlhbGl6ZXJzLCBfZHJhZ092ZXJJbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU4KHRoaXMsIG51bGwsIF9kcmFnU3RhcnRZX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdTdGFydFkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRyYWdTdGFydFkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZHJhZ1N0YXJ0WSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHJhZ1N0YXJ0WSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kcmFnU3RhcnRZX2luaXRpYWxpemVycywgX2RyYWdTdGFydFlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfZHJhZ0N1cnJlbnRZX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdDdXJyZW50WSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHJhZ0N1cnJlbnRZIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRyYWdDdXJyZW50WSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHJhZ0N1cnJlbnRZID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RyYWdDdXJyZW50WV9pbml0aWFsaXplcnMsIF9kcmFnQ3VycmVudFlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfdGFyZ2V0SW5kZXhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFyZ2V0SW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRhcmdldEluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhcmdldEluZGV4LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YXJnZXRJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90YXJnZXRJbmRleF9pbml0aWFsaXplcnMsIF90YXJnZXRJbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU4KHRoaXMsIG51bGwsIF9pdGVtSGVpZ2h0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIml0ZW1IZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIml0ZW1IZWlnaHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXRlbUhlaWdodCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXRlbUhlaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pdGVtSGVpZ2h0X2luaXRpYWxpemVycywgX2l0ZW1IZWlnaHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dExpc3QyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIFNUQVRJQwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzM3OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgW10pOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCB2YWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycywgIkFkZCBuZXcgaXRlbS4uLiIpKTsKICAgIGdldCBwbGFjZWhvbGRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGxhY2Vob2xkZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX21heEl0ZW1zX2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IG1heEl0ZW1zKCkgewogICAgICByZXR1cm4gdGhpcy4jbWF4SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIC8vIDAgbWVhbnMgdW5saW1pdGVkCiAgICBzZXQgbWF4SXRlbXModmFsdWUyKSB7CiAgICAgIHRoaXMuI21heEl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWluSXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9tYXhJdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX21pbkl0ZW1zX2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IG1pbkl0ZW1zKCkgewogICAgICByZXR1cm4gdGhpcy4jbWluSXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW5JdGVtcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWluSXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhbGxvd0R1cGxpY2F0ZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9taW5JdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2FsbG93RHVwbGljYXRlc19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgYWxsb3dEdXBsaWNhdGVzKCkgewogICAgICByZXR1cm4gdGhpcy4jYWxsb3dEdXBsaWNhdGVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWxsb3dEdXBsaWNhdGVzKHZhbHVlMikgewogICAgICB0aGlzLiNhbGxvd0R1cGxpY2F0ZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzb3J0YWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2FsbG93RHVwbGljYXRlc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3NvcnRhYmxlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzb3J0YWJsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NvcnRhYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc29ydGFibGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NvcnRhYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29uZmlybURlbGV0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3NvcnRhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfY29uZmlybURlbGV0ZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgY29uZmlybURlbGV0ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvbmZpcm1EZWxldGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb25maXJtRGVsZXRlKHZhbHVlMikgewogICAgICB0aGlzLiNjb25maXJtRGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9jb25maXJtRGVsZXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfdmFsaWRhdGlvblRleHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHZhbGlkYXRpb25UZXh0KCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWxpZGF0aW9uVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpbnB1dFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBpbnB1dFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jaW5wdXRWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlucHV0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lucHV0VmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNlZGl0aW5nSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfZWRpdGluZ0luZGV4X2luaXRpYWxpemVycywgLTEpKTsKICAgIGdldCBlZGl0aW5nSW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlZGl0aW5nSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlZGl0aW5nSW5kZXgodmFsdWUyKSB7CiAgICAgIHRoaXMuI2VkaXRpbmdJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VkaXRpbmdWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2VkaXRpbmdJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2VkaXRpbmdWYWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgZWRpdGluZ1ZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jZWRpdGluZ1ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZWRpdGluZ1ZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiNlZGl0aW5nVmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkcmFnZ2VkSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9lZGl0aW5nVmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9kcmFnZ2VkSW5kZXhfaW5pdGlhbGl6ZXJzLCAtMSkpOwogICAgZ2V0IGRyYWdnZWRJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RyYWdnZWRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRyYWdnZWRJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ2dlZEluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZHJhZ092ZXJJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2RyYWdnZWRJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2RyYWdPdmVySW5kZXhfaW5pdGlhbGl6ZXJzLCAtMSkpOwogICAgZ2V0IGRyYWdPdmVySW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkcmFnT3ZlckluZGV4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZHJhZ092ZXJJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ092ZXJJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RyYWdTdGFydFlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9kcmFnT3ZlckluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfZHJhZ1N0YXJ0WV9pbml0aWFsaXplcnMsIDApKTsKICAgIC8vIEVuaGFuY2VkIGRyYWcgc3RhdGUgZm9yIGludGVyYWN0aXZlIHJlb3JkZXJpbmcKICAgIGdldCBkcmFnU3RhcnRZKCkgewogICAgICByZXR1cm4gdGhpcy4jZHJhZ1N0YXJ0WV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRyYWdTdGFydFkodmFsdWUyKSB7CiAgICAgIHRoaXMuI2RyYWdTdGFydFlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkcmFnQ3VycmVudFlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9kcmFnU3RhcnRZX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfZHJhZ0N1cnJlbnRZX2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IGRyYWdDdXJyZW50WSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RyYWdDdXJyZW50WV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRyYWdDdXJyZW50WSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ0N1cnJlbnRZX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGFyZ2V0SW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9kcmFnQ3VycmVudFlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF90YXJnZXRJbmRleF9pbml0aWFsaXplcnMsIC0xKSk7CiAgICBnZXQgdGFyZ2V0SW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YXJnZXRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhcmdldEluZGV4KHZhbHVlMikgewogICAgICB0aGlzLiN0YXJnZXRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2l0ZW1IZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF90YXJnZXRJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2l0ZW1IZWlnaHRfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgaXRlbUhlaWdodCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2l0ZW1IZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpdGVtSGVpZ2h0KHZhbHVlMikgewogICAgICB0aGlzLiNpdGVtSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBCb3VuZCBldmVudCBoYW5kbGVycyBmb3IgY2xlYW51cAogICAgYm91bmRIYW5kbGVHbG9iYWxEcmFnT3ZlciA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9pdGVtSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICBib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQgPSBudWxsOwogICAgLy8gU3RvcmUgb3JpZ2luYWwgaXRlbSBwb3NpdGlvbnMgZm9yIGFjY3VyYXRlIGhpdCBkZXRlY3Rpb24gKGJlZm9yZSB0cmFuc2Zvcm1zKQogICAgb3JpZ2luYWxJdGVtUmVjdHMgPSBbXTsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubGlzdC1jb250YWluZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmxpc3QtY29udGFpbmVyOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CgogICAgICAubGlzdC1jb250YWluZXI6Zm9jdXMtd2l0aGluIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5saXN0LWNvbnRhaW5lci5kaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIC5saXN0LWl0ZW1zIHsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubGlzdC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBib3gtc2hhZG93IDAuMTVzIGVhc2U7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47IC8qIFByZXZlbnQgYW5pbWF0aW9uIGZyb20gYWZmZWN0aW5nIHNjcm9sbCBib3VuZHMgKi8KICAgICAgfQoKICAgICAgLmxpc3QtaXRlbTpsYXN0LW9mLXR5cGUgewogICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICAgIH0KCiAgICAgIC5saXN0LWl0ZW1zOm5vdCguaXMtZHJhZ2dpbmcpIC5saXN0LWl0ZW06aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5Ny41JSkiLCAiaHNsKDAgMCUgNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIERyYWdnaW5nIGl0ZW0gLSBmb2xsb3dzIGN1cnNvciAqLwogICAgICAubGlzdC1pdGVtLmRyYWdnaW5nIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMTAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5OCUpIiwgImhzbCgyMTUgMjAuMiUgMTIlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMTUpIiwgInJnYmEoMCwgMCwgMCwgMC40KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjE1cyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC8qIEl0ZW1zIHRoYXQgbmVlZCB0byBtb3ZlIHVwIHRvIG1ha2Ugc3BhY2UgKi8KICAgICAgLmxpc3QtaXRlbS5tb3ZlLXVwIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMSAqIHZhcigtLWl0ZW0taGVpZ2h0LCA0OHB4KSkpOwogICAgICB9CgogICAgICAvKiBJdGVtcyB0aGF0IG5lZWQgdG8gbW92ZSBkb3duIHRvIG1ha2Ugc3BhY2UgKi8KICAgICAgLmxpc3QtaXRlbS5tb3ZlLWRvd24gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSh2YXIoLS1pdGVtLWhlaWdodCwgNDhweCkpOwogICAgICB9CgoKICAgICAgLmRyYWctaGFuZGxlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwgImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuZHJhZy1oYW5kbGU6aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmRyYWctaGFuZGxlIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICB9CgogICAgICAuaXRlbS1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5pdGVtLXRleHQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLml0ZW0tZWRpdC1pbnB1dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLml0ZW0tYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5zYXZlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uc2F2ZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uY2FuY2VsIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSA1MC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLmNhbmNlbDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4xKSIsICJoc2woMCA2Mi44JSA1MC42JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLmRlbGV0ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSkiLCAiaHNsKDAgNjIuOCUgNTAuNiUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5kZWxldGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMSkiLCAiaHNsKDAgNjIuOCUgNTAuNiUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgfQoKICAgICAgLmFkZC1pdGVtLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3LjUlKSIsICJoc2woMCAwJSA2LjklKSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5hZGQtaW5wdXQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmFkZC1pbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlIC8gMC4xKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAuYWRkLWlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCAiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICB9CgogICAgICAuYWRkLWlucHV0OmRpc2FibGVkIHsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLmFkZC1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIHBhZGRpbmc6IDMycHggMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCAiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC52YWxpZGF0aW9uLW1lc3NhZ2UgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUpIiwgImhzbCgwIDYyLjglIDMwLjYlKSIpfTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luLXRvcDogNnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgIH0KCiAgICAgIC5kZXNjcmlwdGlvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgKi8KICAgICAgLmxpc3QtaXRlbXM6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICB9CgogICAgICAubGlzdC1pdGVtczo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAubGlzdC1pdGVtczo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMjQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLmxpc3QtaXRlbXM6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDM0LjklKSIpfTsKICAgICAgfQoKICAgICAgLyogRGlzYWJsZSB0cmFuc2l0aW9ucyBkdXJpbmcgZHJvcCB0byBwcmV2ZW50IGZsYXNoICovCiAgICAgIC5saXN0LWl0ZW1zLmRyb3BwaW5nIC5saXN0LWl0ZW0gewogICAgICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+YCA6ICIifQogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Imxpc3QtY29udGFpbmVyICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGlzdC1pdGVtcyI+CiAgICAgICAgICAgICR7dGhpcy52YWx1ZS5sZW5ndGggPiAwID8gdGhpcy52YWx1ZS5tYXAoKGl0ZW0sIGluZGV4MikgPT4gYjJgCiAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgY2xhc3M9Imxpc3QtaXRlbSAke3RoaXMuZHJhZ2dlZEluZGV4ID09PSBpbmRleDIgPyAiZHJhZ2dpbmciIDogIiJ9IgogICAgICAgICAgICAgICAgZHJhZ2dhYmxlPSIke3RoaXMuc29ydGFibGUgJiYgIXRoaXMuZGlzYWJsZWR9IgogICAgICAgICAgICAgICAgQGRyYWdzdGFydD0keyhlMTEpID0+IHRoaXMuaGFuZGxlRHJhZ1N0YXJ0KGUxMSwgaW5kZXgyKX0KICAgICAgICAgICAgICAgIEBkcmFnZW5kPSR7dGhpcy5oYW5kbGVEcmFnRW5kfQogICAgICAgICAgICAgICAgQGRyYWdvdmVyPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVEcmFnT3ZlcihlMTEsIGluZGV4Mil9CiAgICAgICAgICAgICAgICBAZHJvcD0keyhlMTEpID0+IHRoaXMuaGFuZGxlRHJvcChlMTEsIGluZGV4Mil9CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgJHt0aGlzLnNvcnRhYmxlICYmICF0aGlzLmRpc2FibGVkID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRyYWctaGFuZGxlIj4KICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpncmlwVmVydGljYWwifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Iml0ZW0tY29udGVudCI+CiAgICAgICAgICAgICAgICAgICR7dGhpcy5lZGl0aW5nSW5kZXggPT09IGluZGV4MiA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpdGVtLWVkaXQtaW5wdXQiCiAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLmVkaXRpbmdWYWx1ZX0KICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IHRoaXMuZWRpdGluZ1ZhbHVlID0gZTExLnRhcmdldC52YWx1ZX0KICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVFZGl0S2V5RG93bihlMTEsIGluZGV4Mil9CiAgICAgICAgICAgICAgICAgICAgICBAYmx1cj0keygpID0+IHRoaXMuc2F2ZUVkaXQoaW5kZXgyKX0KICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS10ZXh0IiBAZGJsY2xpY2s9JHsoKSA9PiAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLnN0YXJ0RWRpdChpbmRleDIpfT4KICAgICAgICAgICAgICAgICAgICAgICR7aXRlbX0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgICAke3RoaXMuZWRpdGluZ0luZGV4ID09PSBpbmRleDIgPyBiMmAKICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnV0dG9uIHNhdmUiIEBjbGljaz0keygpID0+IHRoaXMuc2F2ZUVkaXQoaW5kZXgyKX0+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpjaGVjayJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24gY2FuY2VsIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNhbmNlbEVkaXQoKX0+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp4In0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIGAgOiBiMmAKICAgICAgICAgICAgICAgICAgICAkeyF0aGlzLmRpc2FibGVkID8gYjJgCiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnV0dG9uIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnN0YXJ0RWRpdChpbmRleDIpfT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6cGVuY2lsIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24gZGVsZXRlIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnJlbW92ZUl0ZW0oaW5kZXgyKX0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnRyYXNoMiJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGApIDogYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPgogICAgICAgICAgICAgICAgTm8gaXRlbXMgYWRkZWQgeWV0CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGB9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIAogICAgICAgICAgJHshdGhpcy5kaXNhYmxlZCAmJiAoIXRoaXMubWF4SXRlbXMgfHwgdGhpcy52YWx1ZS5sZW5ndGggPCB0aGlzLm1heEl0ZW1zKSA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZGQtaXRlbS1jb250YWluZXIiPgogICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgIGNsYXNzPSJhZGQtaW5wdXQiCiAgICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9JHt0aGlzLnBsYWNlaG9sZGVyfQogICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pbnB1dFZhbHVlfQogICAgICAgICAgICAgICAgQGlucHV0PSR7dGhpcy5oYW5kbGVJbnB1dH0KICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7dGhpcy5oYW5kbGVBZGRLZXlEb3dufQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgIDxkZWVzLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9ImFkZC1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmFkZEl0ZW19CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5pbnB1dFZhbHVlLnRyaW0oKX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpwbHVzIn0+PC9kZWVzLWljb24+IEFkZAogICAgICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgoKICAgICAgICAke3RoaXMudmFsaWRhdGlvblRleHQgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InZhbGlkYXRpb24tbWVzc2FnZSI+JHt0aGlzLnZhbGlkYXRpb25UZXh0fTwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgICAKICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24gPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBoYW5kbGVJbnB1dChlMTEpIHsKICAgICAgdGhpcy5pbnB1dFZhbHVlID0gZTExLnRhcmdldC52YWx1ZTsKICAgIH0KICAgIGhhbmRsZUFkZEtleURvd24oZTExKSB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiICYmIHRoaXMuaW5wdXRWYWx1ZS50cmltKCkpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmFkZEl0ZW0oKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlRWRpdEtleURvd24oZTExLCBpbmRleDIpIHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnNhdmVFZGl0KGluZGV4Mik7CiAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkVzY2FwZSIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmNhbmNlbEVkaXQoKTsKICAgICAgfQogICAgfQogICAgYWRkSXRlbSgpIHsKICAgICAgY29uc3QgdHJpbW1lZFZhbHVlID0gdGhpcy5pbnB1dFZhbHVlLnRyaW0oKTsKICAgICAgaWYgKCF0cmltbWVkVmFsdWUpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoIXRoaXMuYWxsb3dEdXBsaWNhdGVzICYmIHRoaXMudmFsdWUuaW5jbHVkZXModHJpbW1lZFZhbHVlKSkgewogICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiVGhpcyBpdGVtIGFscmVhZHkgZXhpc3RzIGluIHRoZSBsaXN0IjsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudmFsaWRhdGlvblRleHQgPSAiIiwgM2UzKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHRoaXMubWF4SXRlbXMgJiYgdGhpcy52YWx1ZS5sZW5ndGggPj0gdGhpcy5tYXhJdGVtcykgewogICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSBgTWF4aW11bSAke3RoaXMubWF4SXRlbXN9IGl0ZW1zIGFsbG93ZWRgOwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy52YWxpZGF0aW9uVGV4dCA9ICIiLCAzZTMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIHRyaW1tZWRWYWx1ZV07CiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICIiOwogICAgICB0aGlzLnZhbGlkYXRpb25UZXh0ID0gIiI7CiAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYWRkLWlucHV0Iik7CiAgICAgIGlmIChpbnB1dCkgewogICAgICAgIGlucHV0LnZhbHVlID0gIiI7CiAgICAgICAgaW5wdXQuZm9jdXMoKTsKICAgICAgfQogICAgICB0aGlzLmVtaXRDaGFuZ2UoKTsKICAgIH0KICAgIHN0YXJ0RWRpdChpbmRleDIpIHsKICAgICAgdGhpcy5lZGl0aW5nSW5kZXggPSBpbmRleDI7CiAgICAgIHRoaXMuZWRpdGluZ1ZhbHVlID0gdGhpcy52YWx1ZVtpbmRleDJdOwogICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuaXRlbS1lZGl0LWlucHV0Iik7CiAgICAgICAgaWYgKGlucHV0KSB7CiAgICAgICAgICBpbnB1dC5mb2N1cygpOwogICAgICAgICAgaW5wdXQuc2VsZWN0KCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHNhdmVFZGl0KGluZGV4MikgewogICAgICBjb25zdCB0cmltbWVkVmFsdWUgPSB0aGlzLmVkaXRpbmdWYWx1ZS50cmltKCk7CiAgICAgIGlmICghdHJpbW1lZFZhbHVlKSB7CiAgICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghdGhpcy5hbGxvd0R1cGxpY2F0ZXMgJiYgdHJpbW1lZFZhbHVlICE9PSB0aGlzLnZhbHVlW2luZGV4Ml0gJiYgdGhpcy52YWx1ZS5pbmNsdWRlcyh0cmltbWVkVmFsdWUpKSB7CiAgICAgICAgdGhpcy52YWxpZGF0aW9uVGV4dCA9ICJUaGlzIGl0ZW0gYWxyZWFkeSBleGlzdHMgaW4gdGhlIGxpc3QiOwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy52YWxpZGF0aW9uVGV4dCA9ICIiLCAzZTMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBuZXdWYWx1ZSA9IFsuLi50aGlzLnZhbHVlXTsKICAgICAgbmV3VmFsdWVbaW5kZXgyXSA9IHRyaW1tZWRWYWx1ZTsKICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlOwogICAgICB0aGlzLmVkaXRpbmdJbmRleCA9IC0xOwogICAgICB0aGlzLmVkaXRpbmdWYWx1ZSA9ICIiOwogICAgICB0aGlzLnZhbGlkYXRpb25UZXh0ID0gIiI7CiAgICAgIHRoaXMuZW1pdENoYW5nZSgpOwogICAgfQogICAgY2FuY2VsRWRpdCgpIHsKICAgICAgdGhpcy5lZGl0aW5nSW5kZXggPSAtMTsKICAgICAgdGhpcy5lZGl0aW5nVmFsdWUgPSAiIjsKICAgIH0KICAgIGFzeW5jIHJlbW92ZUl0ZW0oaW5kZXgyKSB7CiAgICAgIGlmICh0aGlzLmNvbmZpcm1EZWxldGUpIHsKICAgICAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCB0aGlzLnNob3dDb25maXJtRGlhbG9nKGBEZWxldGUgIiR7dGhpcy52YWx1ZVtpbmRleDJdfSI/YCk7CiAgICAgICAgaWYgKCFjb25maXJtZWQpCiAgICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUuZmlsdGVyKChfNCwgaTExKSA9PiBpMTEgIT09IGluZGV4Mik7CiAgICAgIHRoaXMuZW1pdENoYW5nZSgpOwogICAgfQogICAgYXN5bmMgc2hvd0NvbmZpcm1EaWFsb2cobWVzc2FnZTIpIHsKICAgICAgcmV0dXJuIGNvbmZpcm0obWVzc2FnZTIpOwogICAgfQogICAgLy8gRHJhZyBhbmQgZHJvcCBoYW5kbGVycyAtIEludGVyYWN0aXZlIGltcGxlbWVudGF0aW9uCiAgICBoYW5kbGVEcmFnU3RhcnQoZTExLCBpbmRleDIpIHsKICAgICAgaWYgKCF0aGlzLnNvcnRhYmxlIHx8IHRoaXMuZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmRyYWdnZWRJbmRleCA9IGluZGV4MjsKICAgICAgdGhpcy50YXJnZXRJbmRleCA9IGluZGV4MjsKICAgICAgZTExLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gIm1vdmUiOwogICAgICBlMTEuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLCBpbmRleDIudG9TdHJpbmcoKSk7CiAgICAgIGNvbnN0IGVtcHR5SW1nID0gbmV3IEltYWdlKCk7CiAgICAgIGVtcHR5SW1nLnNyYyA9ICJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBVUVCQUFBQUN3QUFBQUFBUUFCQUFBQ0FrUUJBRHM9IjsKICAgICAgZTExLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoZW1wdHlJbWcsIDAsIDApOwogICAgICB0aGlzLmRyYWdTdGFydFkgPSBlMTEuY2xpZW50WTsKICAgICAgdGhpcy5kcmFnQ3VycmVudFkgPSBlMTEuY2xpZW50WTsKICAgICAgY29uc3QgbGlzdEl0ZW1zID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubGlzdC1pdGVtcyIpOwogICAgICBjb25zdCBhbGxJdGVtcyA9IEFycmF5LmZyb20obGlzdEl0ZW1zPy5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIikgfHwgW10pOwogICAgICBpZiAoYWxsSXRlbXNbaW5kZXgyXSkgewogICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IGFsbEl0ZW1zW2luZGV4Ml0ub2Zmc2V0SGVpZ2h0OwogICAgICB9CiAgICAgIHRoaXMub3JpZ2luYWxJdGVtUmVjdHMgPSBhbGxJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpOwogICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5hZGQoImlzLWRyYWdnaW5nIik7CiAgICAgIHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnT3ZlciA9IHRoaXMuaGFuZGxlR2xvYmFsRHJhZ092ZXIuYmluZCh0aGlzKTsKICAgICAgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQgPSB0aGlzLmhhbmRsZUdsb2JhbERyYWdFbmQuYmluZCh0aGlzKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCB0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ092ZXIpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW5kIiwgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQpOwogICAgfQogICAgaGFuZGxlR2xvYmFsRHJhZ092ZXIoZTExKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAodGhpcy5kcmFnZ2VkSW5kZXggPT09IC0xKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5kcmFnQ3VycmVudFkgPSBlMTEuY2xpZW50WTsKICAgICAgY29uc3QgbGlzdEl0ZW1zID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubGlzdC1pdGVtcyIpOwogICAgICBpZiAoIWxpc3RJdGVtcykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuZnJvbShsaXN0SXRlbXMucXVlcnlTZWxlY3RvckFsbCgiLmxpc3QtaXRlbSIpKTsKICAgICAgY29uc3QgZHJhZ2dlZEVsZW1lbnQgPSBpdGVtc1t0aGlzLmRyYWdnZWRJbmRleF07CiAgICAgIGlmICghZHJhZ2dlZEVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBkZWx0YVkgPSB0aGlzLmRyYWdDdXJyZW50WSAtIHRoaXMuZHJhZ1N0YXJ0WTsKICAgICAgZHJhZ2dlZEVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtkZWx0YVl9cHgpYDsKICAgICAgY29uc3QgZHJhZ2dlZFJlY3QgPSB0aGlzLm9yaWdpbmFsSXRlbVJlY3RzW3RoaXMuZHJhZ2dlZEluZGV4XTsKICAgICAgaWYgKCFkcmFnZ2VkUmVjdCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGRyYWdnZWRDZW50ZXIgPSBkcmFnZ2VkUmVjdC50b3AgKyBkcmFnZ2VkUmVjdC5oZWlnaHQgLyAyICsgZGVsdGFZOwogICAgICBsZXQgbmV3VGFyZ2V0SW5kZXggPSB0aGlzLmRyYWdnZWRJbmRleDsKICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgaXRlbXMubGVuZ3RoOyBpMTErKykgewogICAgICAgIGlmIChpMTEgPT09IHRoaXMuZHJhZ2dlZEluZGV4KQogICAgICAgICAgY29udGludWU7CiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMub3JpZ2luYWxJdGVtUmVjdHNbaTExXTsKICAgICAgICBpZiAoIXJlY3QpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBsZXQgaXRlbUNlbnRlciA9IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyAyOwogICAgICAgIGlmIChpdGVtc1tpMTFdLmNsYXNzTGlzdC5jb250YWlucygibW92ZS11cCIpKSB7CiAgICAgICAgICBpdGVtQ2VudGVyIC09IHRoaXMuaXRlbUhlaWdodDsKICAgICAgICB9IGVsc2UgaWYgKGl0ZW1zW2kxMV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJtb3ZlLWRvd24iKSkgewogICAgICAgICAgaXRlbUNlbnRlciArPSB0aGlzLml0ZW1IZWlnaHQ7CiAgICAgICAgfQogICAgICAgIGlmIChkcmFnZ2VkQ2VudGVyIDwgaXRlbUNlbnRlciAmJiBpMTEgPCB0aGlzLmRyYWdnZWRJbmRleCkgewogICAgICAgICAgbmV3VGFyZ2V0SW5kZXggPSBpMTE7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgaWYgKGRyYWdnZWRDZW50ZXIgPiBpdGVtQ2VudGVyICYmIGkxMSA+IHRoaXMuZHJhZ2dlZEluZGV4KSB7CiAgICAgICAgICBuZXdUYXJnZXRJbmRleCA9IGkxMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKG5ld1RhcmdldEluZGV4ICE9PSB0aGlzLnRhcmdldEluZGV4KSB7CiAgICAgICAgdGhpcy50YXJnZXRJbmRleCA9IG5ld1RhcmdldEluZGV4OwogICAgICAgIHRoaXMudXBkYXRlSXRlbVBvc2l0aW9ucyhpdGVtcyk7CiAgICAgIH0KICAgIH0KICAgIHVwZGF0ZUl0ZW1Qb3NpdGlvbnMoaXRlbXMpIHsKICAgICAgY29uc3QgZHJhZ2dlZElkeCA9IHRoaXMuZHJhZ2dlZEluZGV4OwogICAgICBjb25zdCB0YXJnZXRJZHggPSB0aGlzLnRhcmdldEluZGV4OwogICAgICBjb25zdCBsaXN0SXRlbXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik7CiAgICAgIGlmIChsaXN0SXRlbXMpIHsKICAgICAgICBsaXN0SXRlbXMuc3R5bGUuc2V0UHJvcGVydHkoIi0taXRlbS1oZWlnaHQiLCBgJHt0aGlzLml0ZW1IZWlnaHR9cHhgKTsKICAgICAgfQogICAgICBpdGVtcy5mb3JFYWNoKChpdGVtLCBpMTEpID0+IHsKICAgICAgICBpZiAoaTExID09PSBkcmFnZ2VkSWR4KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgibW92ZS11cCIsICJtb3ZlLWRvd24iKTsKICAgICAgICBpdGVtLnN0eWxlLnNldFByb3BlcnR5KCItLWl0ZW0taGVpZ2h0IiwgYCR7dGhpcy5pdGVtSGVpZ2h0fXB4YCk7CiAgICAgICAgaWYgKGRyYWdnZWRJZHggPCB0YXJnZXRJZHgpIHsKICAgICAgICAgIGlmIChpMTEgPiBkcmFnZ2VkSWR4ICYmIGkxMSA8PSB0YXJnZXRJZHgpIHsKICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCJtb3ZlLXVwIik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChkcmFnZ2VkSWR4ID4gdGFyZ2V0SWR4KSB7CiAgICAgICAgICBpZiAoaTExID49IHRhcmdldElkeCAmJiBpMTEgPCBkcmFnZ2VkSWR4KSB7CiAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgibW92ZS1kb3duIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGhhbmRsZUdsb2JhbERyYWdFbmQoKSB7CiAgICAgIGlmICh0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ092ZXIpIHsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnT3Zlcik7CiAgICAgICAgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdPdmVyID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQpIHsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnZW5kIiwgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQpOwogICAgICAgIHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnRW5kID0gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBsaXN0SXRlbXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik7CiAgICAgIGNvbnN0IGl0ZW1zID0gbGlzdEl0ZW1zPy5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIik7CiAgICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50ID0gaXRlbXM/Llt0aGlzLmRyYWdnZWRJbmRleF07CiAgICAgIGlmICh0aGlzLmRyYWdnZWRJbmRleCA9PT0gLTEgfHwgdGhpcy50YXJnZXRJbmRleCA9PT0gLTEgfHwgdGhpcy5kcmFnZ2VkSW5kZXggPT09IHRoaXMudGFyZ2V0SW5kZXgpIHsKICAgICAgICBpZiAoZHJhZ2dlZEVsZW1lbnQgJiYgdGhpcy5kcmFnZ2VkSW5kZXggIT09IC0xKSB7CiAgICAgICAgICBkcmFnZ2VkRWxlbWVudC5zdHlsZS50cmFuc2l0aW9uID0gInRyYW5zZm9ybSAwLjE1cyBlYXNlIjsKICAgICAgICAgIGRyYWdnZWRFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDApIjsKICAgICAgICAgIGxldCBoYW5kbGVkMiA9IGZhbHNlOwogICAgICAgICAgY29uc3Qgb25SZXR1cm4gPSAoKSA9PiB7CiAgICAgICAgICAgIGlmIChoYW5kbGVkMikKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGhhbmRsZWQyID0gdHJ1ZTsKICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsIG9uUmV0dXJuKTsKICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ1N0YXRlKGxpc3RJdGVtcywgaXRlbXMpOwogICAgICAgICAgfTsKICAgICAgICAgIGRyYWdnZWRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLCBvblJldHVybiwgeyBvbmNlOiB0cnVlIH0pOwogICAgICAgICAgc2V0VGltZW91dChvblJldHVybiwgMjAwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ1N0YXRlKGxpc3RJdGVtcywgaXRlbXMpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgZHJhZ2dlZFJlY3QgPSB0aGlzLm9yaWdpbmFsSXRlbVJlY3RzW3RoaXMuZHJhZ2dlZEluZGV4XTsKICAgICAgY29uc3QgdGFyZ2V0UmVjdCA9IHRoaXMub3JpZ2luYWxJdGVtUmVjdHNbdGhpcy50YXJnZXRJbmRleF07CiAgICAgIGlmICghZHJhZ2dlZFJlY3QgfHwgIXRhcmdldFJlY3QgfHwgIWRyYWdnZWRFbGVtZW50KSB7CiAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ1N0YXRlKGxpc3RJdGVtcywgaXRlbXMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBsZXQgZmluYWxZOwogICAgICBpZiAodGhpcy50YXJnZXRJbmRleCA+IHRoaXMuZHJhZ2dlZEluZGV4KSB7CiAgICAgICAgZmluYWxZID0gdGFyZ2V0UmVjdC5ib3R0b20gLSBkcmFnZ2VkUmVjdC5ib3R0b207CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmluYWxZID0gdGFyZ2V0UmVjdC50b3AgLSBkcmFnZ2VkUmVjdC50b3A7CiAgICAgIH0KICAgICAgZHJhZ2dlZEVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbiA9ICJ0cmFuc2Zvcm0gMC4xNXMgZWFzZSI7CiAgICAgIGRyYWdnZWRFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7ZmluYWxZfXB4KWA7CiAgICAgIGxldCBoYW5kbGVkID0gZmFsc2U7CiAgICAgIGNvbnN0IG9uVHJhbnNpdGlvbkVuZCA9ICgpID0+IHsKICAgICAgICBpZiAoaGFuZGxlZCkKICAgICAgICAgIHJldHVybjsKICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICBkcmFnZ2VkRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIiwgb25UcmFuc2l0aW9uRW5kKTsKICAgICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5hZGQoImRyb3BwaW5nIik7CiAgICAgICAgdm9pZCBsaXN0SXRlbXM/Lm9mZnNldEhlaWdodDsKICAgICAgICBpdGVtcz8uZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCJtb3ZlLXVwIiwgIm1vdmUtZG93biIsICJkcmFnZ2luZyIpOwogICAgICAgICAgaXRlbS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgidHJhbnNmb3JtIik7CiAgICAgICAgICBpdGVtLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2l0aW9uIik7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBbLi4udGhpcy52YWx1ZV07CiAgICAgICAgY29uc3QgW2RyYWdnZWRJdGVtXSA9IG5ld1ZhbHVlLnNwbGljZSh0aGlzLmRyYWdnZWRJbmRleCwgMSk7CiAgICAgICAgbmV3VmFsdWUuc3BsaWNlKHRoaXMudGFyZ2V0SW5kZXgsIDAsIGRyYWdnZWRJdGVtKTsKICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7CiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7CiAgICAgICAgdGhpcy5kcmFnZ2VkSW5kZXggPSAtMTsKICAgICAgICB0aGlzLmRyYWdPdmVySW5kZXggPSAtMTsKICAgICAgICB0aGlzLnRhcmdldEluZGV4ID0gLTE7CiAgICAgICAgdGhpcy5kcmFnU3RhcnRZID0gMDsKICAgICAgICB0aGlzLmRyYWdDdXJyZW50WSA9IDA7CiAgICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1SZWN0cyA9IFtdOwogICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB7CiAgICAgICAgICBjb25zdCBmcmVzaEl0ZW1zID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIik7CiAgICAgICAgICBmcmVzaEl0ZW1zPy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgICAgIGl0ZW0uc3R5bGUudHJhbnNpdGlvbiA9ICJub25lIjsKICAgICAgICAgIH0pOwogICAgICAgICAgdm9pZCB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik/Lm9mZnNldEhlaWdodDsKICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgIGZyZXNoSXRlbXM/LmZvckVhY2goKGl0ZW0pID0+IHsKICAgICAgICAgICAgICBpdGVtLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2l0aW9uIik7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5yZW1vdmUoImRyb3BwaW5nIiwgImlzLWRyYWdnaW5nIik7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgZHJhZ2dlZEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsIG9uVHJhbnNpdGlvbkVuZCwgeyBvbmNlOiB0cnVlIH0pOwogICAgICBzZXRUaW1lb3V0KG9uVHJhbnNpdGlvbkVuZCwgMjAwKTsKICAgIH0KICAgIGNsZWFudXBEcmFnU3RhdGUobGlzdEl0ZW1zLCBpdGVtcykgewogICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5hZGQoImRyb3BwaW5nIik7CiAgICAgIHZvaWQgbGlzdEl0ZW1zPy5vZmZzZXRIZWlnaHQ7CiAgICAgIGl0ZW1zPy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCJtb3ZlLXVwIiwgIm1vdmUtZG93biIsICJkcmFnZ2luZyIpOwogICAgICAgIGl0ZW0uc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zZm9ybSIpOwogICAgICAgIGl0ZW0uc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zaXRpb24iKTsKICAgICAgfSk7CiAgICAgIHRoaXMuZHJhZ2dlZEluZGV4ID0gLTE7CiAgICAgIHRoaXMuZHJhZ092ZXJJbmRleCA9IC0xOwogICAgICB0aGlzLnRhcmdldEluZGV4ID0gLTE7CiAgICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IDA7CiAgICAgIHRoaXMuZHJhZ0N1cnJlbnRZID0gMDsKICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1SZWN0cyA9IFtdOwogICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgIGNvbnN0IGZyZXNoSXRlbXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5saXN0LWl0ZW0iKTsKICAgICAgICBmcmVzaEl0ZW1zPy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgICBpdGVtLnN0eWxlLnRyYW5zaXRpb24gPSAibm9uZSI7CiAgICAgICAgfSk7CiAgICAgICAgdm9pZCB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik/Lm9mZnNldEhlaWdodDsKICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgZnJlc2hJdGVtcz8uZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICAgICAgICBpdGVtLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2l0aW9uIik7CiAgICAgICAgICB9KTsKICAgICAgICAgIGxpc3RJdGVtcz8uY2xhc3NMaXN0LnJlbW92ZSgiZHJvcHBpbmciLCAiaXMtZHJhZ2dpbmciKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgICBoYW5kbGVEcmFnRW5kKCkgewogICAgICB0aGlzLmhhbmRsZUdsb2JhbERyYWdFbmQoKTsKICAgIH0KICAgIGhhbmRsZURyYWdPdmVyKGUxMSwgaW5kZXgyKSB7CiAgICAgIGlmICghdGhpcy5zb3J0YWJsZSB8fCB0aGlzLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGUxMS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICJtb3ZlIjsKICAgIH0KICAgIGhhbmRsZURyYWdMZWF2ZSgpIHsKICAgIH0KICAgIGhhbmRsZURyb3AoZTExLCBkcm9wSW5kZXgpIHsKICAgICAgaWYgKCF0aGlzLnNvcnRhYmxlIHx8IHRoaXMuZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgIH0KICAgIGVtaXRDaGFuZ2UoKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNoYW5nZSIsIHsKICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHRoaXMudmFsdWUgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMiB8fCBbXTsKICAgIH0KICAgIGFzeW5jIHZhbGlkYXRlKCkgewogICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAoIXRoaXMudmFsdWUgfHwgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApKSB7CiAgICAgICAgdGhpcy52YWxpZGF0aW9uVGV4dCA9ICJBdCBsZWFzdCBvbmUgaXRlbSBpcyByZXF1aXJlZCI7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmICh0aGlzLm1pbkl0ZW1zICYmIHRoaXMudmFsdWUubGVuZ3RoIDwgdGhpcy5taW5JdGVtcykgewogICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSBgQXQgbGVhc3QgJHt0aGlzLm1pbkl0ZW1zfSBpdGVtcyByZXF1aXJlZGA7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiIjsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczU5KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSW5wdXRMaXN0MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1yaWNodGV4dC9kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzM4ID0gKCkgPT4gYjJgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5vdXRwdXQtcHJldmlldyB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNmM2Y0ZjY7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBjb2xvcjogIzM3NDE1MTsKICAgICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzJjMmMyYzsKICAgICAgICAgICAgY29sb3I6ICNlNGU0ZTc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gQmFzaWMgUmljaCBUZXh0IEVkaXRvciJ9IC5zdWJ0aXRsZT0keyJBIGZ1bGwtZmVhdHVyZWQgcmljaCB0ZXh0IGVkaXRvciB3aXRoIGZvcm1hdHRpbmcgdG9vbGJhciJ9PgogICAgICAgIDxkZWVzLWlucHV0LXJpY2h0ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IkFydGljbGUgQ29udGVudCJ9IAogICAgICAgICAgLnZhbHVlPSR7JzxoMT5XZWxjb21lIHRvIHRoZSBSaWNoIFRleHQgRWRpdG9yITwvaDE+PHA+VGhpcyBpcyBhIGZlYXR1cmUtcmljaCBlZGl0b3IgYnVpbHQgd2l0aCBUaXBUYXAuIFlvdSBjYW46PC9wPjx1bD48bGk+PHN0cm9uZz5Gb3JtYXQgdGV4dDwvc3Ryb25nPiB3aXRoIDxlbT52YXJpb3VzPC9lbT4gPHU+c3R5bGVzPC91PjwvbGk+PGxpPkNyZWF0ZSBkaWZmZXJlbnQgaGVhZGluZyBsZXZlbHM8L2xpPjxsaT5BZGQgPGEgaHJlZj0iaHR0cHM6Ly9leGFtcGxlLmNvbSI+bGlua3M8L2E+IHRvIGV4dGVybmFsIHJlc291cmNlczwvbGk+PGxpPldyaXRlIDxjb2RlPmlubGluZSBjb2RlPC9jb2RlPiBvciBjb2RlIGJsb2NrczwvbGk+PC91bD48YmxvY2txdW90ZT48cD5Vc2UgdGhlIHRvb2xiYXIgYWJvdmUgdG8gZXhwbG9yZSBhbGwgdGhlIGZvcm1hdHRpbmcgb3B0aW9ucyBhdmFpbGFibGUhPC9wPjwvYmxvY2txdW90ZT48cD5TdGFydCB0eXBpbmcgdG8gc2VlIHRoZSBtYWdpYyBoYXBwZW4uLi48L3A+J30KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJVc2UgdGhlIHRvb2xiYXIgdG8gZm9ybWF0IHlvdXIgY29udGVudCB3aXRoIGhlYWRpbmdzLCBsaXN0cywgbGlua3MsIGFuZCBtb3JlIn0KICAgICAgICAgIC5zaG93V29yZENvdW50PSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gV2l0aCBQbGFjZWhvbGRlciJ9IC5zdWJ0aXRsZT0keyJFbXB0eSBlZGl0b3Igd2l0aCBwbGFjZWhvbGRlciB0ZXh0In0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICAubGFiZWw9JHsiQmxvZyBQb3N0In0gCiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiU3RhcnQgd3JpdGluZyB5b3VyIGJsb2cgcG9zdCBoZXJlLi4uIn0KICAgICAgICAgIC5zaG93V29yZENvdW50PSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMy4gRGlmZmVyZW50IEhlaWdodHMifSAuc3VidGl0bGU9JHsiRWRpdG9ycyB3aXRoIGRpZmZlcmVudCBtaW5pbXVtIGhlaWdodHMgZm9yIHZhcmlvdXMgdXNlIGNhc2VzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJTaG9ydCBOb3RlIn0gCiAgICAgICAgICAgIC5taW5IZWlnaHQ9JHsxNTB9CiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJRdWljayBub3RlLi4uIn0KICAgICAgICAgICAgLnNob3dXb3JkQ291bnQ9JHtmYWxzZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmljaHRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXJpY2h0ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiRXh0ZW5kZWQgQ29udGVudCJ9IAogICAgICAgICAgICAubWluSGVpZ2h0PSR7MzAwfQogICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiV3JpdGUgeW91ciBleHRlbmRlZCBjb250ZW50IGhlcmUuLi4ifQogICAgICAgICAgICAuc2hvd1dvcmRDb3VudD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNC4gQ29kZSBFeGFtcGxlcyJ9IC5zdWJ0aXRsZT0keyJFZGl0b3IgcHJlLWZpbGxlZCB3aXRoIGNvZGUgZXhhbXBsZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1yaWNodGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJUZWNobmljYWwgRG9jdW1lbnRhdGlvbiJ9IAogICAgICAgICAgLnZhbHVlPSR7JzxoMj5JbnN0YWxsYXRpb24gR3VpZGU8L2gyPjxwPlRvIGluc3RhbGwgdGhlIHBhY2thZ2UsIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6PC9wPjxwcmU+PGNvZGU+bnBtIGluc3RhbGwgQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nPC9jb2RlPjwvcHJlPjxwPlRoZW4gaW1wb3J0IHRoZSBjb21wb25lbnQgaW4geW91ciBUeXBlU2NyaXB0IGZpbGU6PC9wPjxwcmU+PGNvZGU+aW1wb3J0IHsgRGVlc0lucHV0UmljaHRleHQgfSBmcm9tICJAZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2ciOzwvY29kZT48L3ByZT48cD5Zb3UgY2FuIG5vdyB1c2UgdGhlIDxjb2RlPiZsdDtkZWVzLWlucHV0LXJpY2h0ZXh0Jmd0OzwvY29kZT4gZWxlbWVudCBpbiB5b3VyIHRlbXBsYXRlcy48L3A+J30KICAgICAgICAgIC5taW5IZWlnaHQ9JHsyNTB9CiAgICAgICAgICAuc2hvd1dvcmRDb3VudD0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1yaWNodGV4dD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjUuIERpc2FibGVkIFN0YXRlIn0gLnN1YnRpdGxlPSR7IlJlYWQtb25seSByaWNoIHRleHQgY29udGVudCJ9PgogICAgICAgIDxkZWVzLWlucHV0LXJpY2h0ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IlB1Ymxpc2hlZCBBcnRpY2xlIChSZWFkIE9ubHkpIn0gCiAgICAgICAgICAudmFsdWU9JHsnPGgyPlRoZSBGdXR1cmUgb2YgV2ViIENvbXBvbmVudHM8L2gyPjxwPldlYiBDb21wb25lbnRzIGhhdmUgcmV2b2x1dGlvbml6ZWQgaG93IHdlIGJ1aWxkIG1vZGVybiB3ZWIgYXBwbGljYXRpb25zLi4uPC9wPjxibG9ja3F1b3RlPjxwPiJUaGUgZnV0dXJlIG9mIHdlYiBkZXZlbG9wbWVudCBsaWVzIGluIHJldXNhYmxlLCBlbmNhcHN1bGF0ZWQgY29tcG9uZW50cy4iPC9wPjwvYmxvY2txdW90ZT4nfQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC5zaG93V29yZENvdW50PSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNi4gSW50ZXJhY3RpdmUgRGVtbyJ9IC5zdWJ0aXRsZT0keyJUeXBlIGluIHRoZSBlZGl0b3IgYmVsb3cgYW5kIHNlZSB0aGUgSFRNTCBvdXRwdXQifT4KICAgICAgICA8ZGVlcy1pbnB1dC1yaWNodGV4dCAKICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS1lZGl0b3IiCiAgICAgICAgICAubGFiZWw9JHsiVHJ5IGl0IHlvdXJzZWxmIn0gCiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiVHlwZSBzb21ldGhpbmcgaGVyZS4uLiJ9CiAgICAgICAgICAuc2hvd1dvcmRDb3VudD0ke3RydWV9CiAgICAgICAgICBAY2hhbmdlPSR7KGUxMSkgPT4gewogIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNvdXRwdXQtcHJldmlldyIpOwogIGlmIChvdXRwdXQpIHsKICAgIG91dHB1dC50ZXh0Q29udGVudCA9IGUxMS5kZXRhaWwudmFsdWU7CiAgfQp9fQogICAgICAgID48L2RlZXMtaW5wdXQtcmljaHRleHQ+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LXByZXZpZXciIGlkPSJvdXRwdXQtcHJldmlldyI+CiAgICAgICAgICA8ZW0+SFRNTCBvdXRwdXQgd2lsbCBhcHBlYXIgaGVyZS4uLjwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXJpY2h0ZXh0L3N0eWxlcy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgcmljaHRleHRTdHlsZXMgPSBbCiAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZvbnQtZmFtaWx5OiBJbnRlciwgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5pbnB1dC13cmFwcGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5sYWJlbCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgbWluLWhlaWdodDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjIwMHB4IiwgIjIwMHB4Iil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250YWluZXI6aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGFpbmVyLmZvY3VzZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUgLyAwLjA1KSIsICJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci10b29sYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b24uYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uOmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItZGl2aWRlciB7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1taW4taGVpZ2h0LCAyMDBweCk7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgbWluLWhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBwIHsKICAgICAgICBtYXJnaW46IDAuNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBwOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgaDEgewogICAgICAgIGZvbnQtc2l6ZTogMmVtOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbjogMWVtIDAgMC41ZW0gMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGgyIHsKICAgICAgICBmb250LXNpemU6IDEuNWVtOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbjogMWVtIDAgMC41ZW0gMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGgzIHsKICAgICAgICBmb250LXNpemU6IDEuMjVlbTsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBtYXJnaW46IDFlbSAwIDAuNWVtIDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciB1bCwKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBvbCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxLjVlbTsKICAgICAgICBtYXJnaW46IDAuNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgbGkgewogICAgICAgIG1hcmdpbjogMC4yNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgYmxvY2txdW90ZSB7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBtYXJnaW46IDFlbSAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMWVtOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIHBhZGRpbmc6IDAuMmVtIDAuNGVtOwogICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZWwgT25lIE1vbm8nLCAnRmlyYSBDb2RlJywgJ1NGIE1vbm8nLCBNb25hY28sICdDYXNjYWRpYSBDb2RlJywgJ1JvYm90byBNb25vJywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcHJlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk4JSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBhZGRpbmc6IDFlbTsKICAgICAgICBtYXJnaW46IDFlbSAwOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcHJlIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiAwOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGEgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBhOmhvdmVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA0MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDY5LjglKSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci1mb290ZXIgewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC53b3JkLWNvdW50IHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubGluay1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQuc2hvdyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0IGlucHV0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQgaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUgLyAwLjA1KSIsICJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQtYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0LWJ1dHRvbnMgYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubGluay1pbnB1dC1idXR0b25zIGJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQtYnV0dG9ucyBidXR0b24ucHJpbWFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0LWJ1dHRvbnMgYnV0dG9uLnByaW1hcnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmRlc2NyaXB0aW9uIHsKICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAuZWRpdG9yLWNvbnRhaW5lciB7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC50b29sYmFyLWJ1dHRvbiwKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLmVkaXRvci1jb250ZW50IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgYApdOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmljaHRleHQvdGVtcGxhdGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHJlbmRlclJpY2h0ZXh0ID0gKGNvbXBvbmVudCkgPT4gewogIHJldHVybiBiMmAKICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAgICR7Y29tcG9uZW50LmxhYmVsID8gYjJgPGxhYmVsIGNsYXNzPSJsYWJlbCI+JHtjb21wb25lbnQubGFiZWx9PC9sYWJlbD5gIDogIiJ9CiAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItY29udGFpbmVyICR7Y29tcG9uZW50LmVkaXRvcj8uaXNGb2N1c2VkID8gImZvY3VzZWQiIDogIiJ9IiBzdHlsZT0iLS1taW4taGVpZ2h0OiAke2NvbXBvbmVudC5taW5IZWlnaHR9cHgiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItdG9vbGJhciI+CiAgICAgICAgICAgICAgJHtjb21wb25lbnQucmVuZGVyVG9vbGJhcigpfQogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmstaW5wdXQgJHtjb21wb25lbnQuc2hvd0xpbmtJbnB1dCA/ICJzaG93IiA6ICIifSI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idXJsIiBwbGFjZWhvbGRlcj0iRW50ZXIgVVJMLi4uIiBAa2V5ZG93bj0ke2NvbXBvbmVudC5oYW5kbGVMaW5rSW5wdXRLZXlkb3dufSAvPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluay1pbnB1dC1idXR0b25zIj4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icHJpbWFyeSIgQGNsaWNrPSR7Y29tcG9uZW50LnNhdmVMaW5rfT5TYXZlPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPSR7Y29tcG9uZW50LnJlbW92ZUxpbmt9PlJlbW92ZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0ke2NvbXBvbmVudC5oaWRlTGlua0lucHV0fT5DYW5jZWw8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLWNvbnRlbnQiPjwvZGl2PgogICAgICAgICAgICAke2NvbXBvbmVudC5zaG93V29yZENvdW50ID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXRvci1mb290ZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3b3JkLWNvdW50Ij4ke2NvbXBvbmVudC53b3JkQ291bnR9IHdvcmQke2NvbXBvbmVudC53b3JkQ291bnQgIT09IDEgPyAicyIgOiAiIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAke2NvbXBvbmVudC5kZXNjcmlwdGlvbiA/IGIyYDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4ke2NvbXBvbmVudC5kZXNjcmlwdGlvbn08L2Rpdj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1yaWNodGV4dC9jb21wb25lbnQuanMKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9zZXJ2aWNlcygpOwp2YXIgX19lc0RlY29yYXRlNTkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczYwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRSaWNodGV4dCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtcmljaHRleHQiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX3ZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF92YWx1ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzOwogIGxldCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1dvcmRDb3VudF9kZWNvcmF0b3JzOwogIGxldCBfc2hvd1dvcmRDb3VudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dXb3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21pbkhlaWdodF9kZWNvcmF0b3JzOwogIGxldCBfbWluSGVpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWluSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93TGlua0lucHV0X2RlY29yYXRvcnM7CiAgbGV0IF9zaG93TGlua0lucHV0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0xpbmtJbnB1dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfd29yZENvdW50X2RlY29yYXRvcnM7CiAgbGV0IF93b3JkQ291bnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF93b3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0UmljaHRleHQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX3Nob3dXb3JkQ291bnRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9taW5IZWlnaHRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogTnVtYmVyCiAgICAgIH0pXTsKICAgICAgX3Nob3dMaW5rSW5wdXRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3dvcmRDb3VudF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU1OSh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU5KHRoaXMsIG51bGwsIF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwbGFjZWhvbGRlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGxhY2Vob2xkZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucGxhY2Vob2xkZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnBsYWNlaG9sZGVyID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTkodGhpcywgbnVsbCwgX3Nob3dXb3JkQ291bnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1dvcmRDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1dvcmRDb3VudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93V29yZENvdW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93V29yZENvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dXb3JkQ291bnRfaW5pdGlhbGl6ZXJzLCBfc2hvd1dvcmRDb3VudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU5KHRoaXMsIG51bGwsIF9taW5IZWlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWluSGVpZ2h0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtaW5IZWlnaHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWluSGVpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5taW5IZWlnaHQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWluSGVpZ2h0X2luaXRpYWxpemVycywgX21pbkhlaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU5KHRoaXMsIG51bGwsIF9zaG93TGlua0lucHV0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dMaW5rSW5wdXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dMaW5rSW5wdXQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0xpbmtJbnB1dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd0xpbmtJbnB1dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93TGlua0lucHV0X2luaXRpYWxpemVycywgX3Nob3dMaW5rSW5wdXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OSh0aGlzLCBudWxsLCBfd29yZENvdW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndvcmRDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid29yZENvdW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLndvcmRDb3VudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud29yZENvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dvcmRDb3VudF9pbml0aWFsaXplcnMsIF93b3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFJpY2h0ZXh0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzg7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjAodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHBsYWNlaG9sZGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwbGFjZWhvbGRlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93V29yZENvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9zaG93V29yZENvdW50X2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IHNob3dXb3JkQ291bnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93V29yZENvdW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1dvcmRDb3VudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd1dvcmRDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21pbkhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjAodGhpcywgX3Nob3dXb3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9taW5IZWlnaHRfaW5pdGlhbGl6ZXJzLCAyMDApKTsKICAgIGdldCBtaW5IZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtaW5IZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW5IZWlnaHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pbkhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dMaW5rSW5wdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9taW5IZWlnaHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9zaG93TGlua0lucHV0X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93TGlua0lucHV0KCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0xpbmtJbnB1dF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dMaW5rSW5wdXQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dMaW5rSW5wdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN3b3JkQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9zaG93TGlua0lucHV0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfd29yZENvdW50X2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IHdvcmRDb3VudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3dvcmRDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHdvcmRDb3VudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jd29yZENvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBlZGl0b3JFbGVtZW50ID0gX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfd29yZENvdW50X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGxpbmtJbnB1dEVsZW1lbnQ7CiAgICB0aXB0YXBCdW5kbGUgPSBudWxsOwogICAgZWRpdG9yOwogICAgc3RhdGljIHN0eWxlcyA9IHJpY2h0ZXh0U3R5bGVzOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gcmVuZGVyUmljaHRleHQodGhpcyk7CiAgICB9CiAgICByZW5kZXJUb29sYmFyKCkgewogICAgICBjb25zdCBidXR0b25zID0gdGhpcy5nZXRUb29sYmFyQnV0dG9ucygpOwogICAgICByZXR1cm4gYjJgCiAgICAgICR7YnV0dG9ucy5tYXAoKGJ1dHRvbikgPT4gewogICAgICAgIGlmIChidXR0b24uaXNEaXZpZGVyKSB7CiAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idG9vbGJhci1kaXZpZGVyIj48L2Rpdj5gOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiAke2J1dHRvbi5pc0FjdGl2ZT8uKCkgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgQGNsaWNrPSR7YnV0dG9uLmFjdGlvbn0KICAgICAgICAgICAgdGl0bGU9JHtidXR0b24udGl0bGV9CiAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWQgfHwgIXRoaXMuZWRpdG9yfQogICAgICAgICAgPgogICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7YnV0dG9uLmljb259PjwvZGVlcy1pY29uPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgYDsKICAgICAgfSl9CiAgICBgOwogICAgfQogICAgZ2V0VG9vbGJhckJ1dHRvbnMoKSB7CiAgICAgIGlmICghdGhpcy5lZGl0b3IpCiAgICAgICAgcmV0dXJuIFtdOwogICAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJib2xkIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6Ym9sZCIsCiAgICAgICAgICB0aXRsZTogIkJvbGQgKEN0cmwrQikiLAogICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQm9sZCgpLnJ1bigpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJib2xkIikKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJpdGFsaWMiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTppdGFsaWMiLAogICAgICAgICAgdGl0bGU6ICJJdGFsaWMgKEN0cmwrSSkiLAogICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlSXRhbGljKCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoIml0YWxpYyIpCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAidW5kZXJsaW5lIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6dW5kZXJsaW5lIiwKICAgICAgICAgIHRpdGxlOiAiVW5kZXJsaW5lIChDdHJsK1UpIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVVuZGVybGluZSgpLnJ1bigpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJ1bmRlcmxpbmUiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogInN0cmlrZSIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOnN0cmlrZXRocm91Z2giLAogICAgICAgICAgdGl0bGU6ICJTdHJpa2V0aHJvdWdoIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN0cmlrZSgpLnJ1bigpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJzdHJpa2UiKQogICAgICAgIH0sCiAgICAgICAgeyBuYW1lOiAiZGl2aWRlcjEiLCB0aXRsZTogIiIsIGlzRGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJoMSIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmhlYWRpbmcxIiwKICAgICAgICAgIHRpdGxlOiAiSGVhZGluZyAxIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMSB9KS5ydW4oKSwKICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiaGVhZGluZyIsIHsgbGV2ZWw6IDEgfSkKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJoMiIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmhlYWRpbmcyIiwKICAgICAgICAgIHRpdGxlOiAiSGVhZGluZyAyIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMiB9KS5ydW4oKSwKICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiaGVhZGluZyIsIHsgbGV2ZWw6IDIgfSkKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJoMyIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmhlYWRpbmczIiwKICAgICAgICAgIHRpdGxlOiAiSGVhZGluZyAzIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMyB9KS5ydW4oKSwKICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiaGVhZGluZyIsIHsgbGV2ZWw6IDMgfSkKICAgICAgICB9LAogICAgICAgIHsgbmFtZTogImRpdmlkZXIyIiwgdGl0bGU6ICIiLCBpc0RpdmlkZXI6IHRydWUgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiYnVsbGV0TGlzdCIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmxpc3QiLAogICAgICAgICAgdGl0bGU6ICJCdWxsZXQgTGlzdCIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVCdWxsZXRMaXN0KCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoImJ1bGxldExpc3QiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIm9yZGVyZWRMaXN0IiwKICAgICAgICAgIGljb246ICJsdWNpZGU6bGlzdE9yZGVyZWQiLAogICAgICAgICAgdGl0bGU6ICJOdW1iZXJlZCBMaXN0IiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZU9yZGVyZWRMaXN0KCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoIm9yZGVyZWRMaXN0IikKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJibG9ja3F1b3RlIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6cXVvdGUiLAogICAgICAgICAgdGl0bGU6ICJRdW90ZSIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVCbG9ja3F1b3RlKCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoImJsb2NrcXVvdGUiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogImNvZGUiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTpjb2RlIiwKICAgICAgICAgIHRpdGxlOiAiQ29kZSIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVDb2RlKCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoImNvZGUiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogImNvZGVCbG9jayIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmZpbGVDb2RlIiwKICAgICAgICAgIHRpdGxlOiAiQ29kZSBCbG9jayIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVDb2RlQmxvY2soKS5ydW4oKSwKICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiY29kZUJsb2NrIikKICAgICAgICB9LAogICAgICAgIHsgbmFtZTogImRpdmlkZXIzIiwgdGl0bGU6ICIiLCBpc0RpdmlkZXI6IHRydWUgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAibGluayIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmxpbmsiLAogICAgICAgICAgdGl0bGU6ICJBZGQgTGluayIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMudG9nZ2xlTGluaygpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJsaW5rIikKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJhbGlnbkxlZnQiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTphbGlnbkxlZnQiLAogICAgICAgICAgdGl0bGU6ICJBbGlnbiBMZWZ0IiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldFRleHRBbGlnbigibGVmdCIpLnJ1bigpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKHsgdGV4dEFsaWduOiAibGVmdCIgfSkKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJhbGlnbkNlbnRlciIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmFsaWduQ2VudGVyIiwKICAgICAgICAgIHRpdGxlOiAiQWxpZ24gQ2VudGVyIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldFRleHRBbGlnbigiY2VudGVyIikucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICJjZW50ZXIiIH0pCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiYWxpZ25SaWdodCIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmFsaWduUmlnaHQiLAogICAgICAgICAgdGl0bGU6ICJBbGlnbiBSaWdodCIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5zZXRUZXh0QWxpZ24oInJpZ2h0IikucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICJyaWdodCIgfSkKICAgICAgICB9LAogICAgICAgIHsgbmFtZTogImRpdmlkZXI0IiwgdGl0bGU6ICIiLCBpc0RpdmlkZXI6IHRydWUgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAidW5kbyIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOnVuZG8iLAogICAgICAgICAgdGl0bGU6ICJVbmRvIChDdHJsK1opIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnVuZG8oKS5ydW4oKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogInJlZG8iLAogICAgICAgICAgaWNvbjogImx1Y2lkZTpyZWRvIiwKICAgICAgICAgIHRpdGxlOiAiUmVkbyAoQ3RybCtZKSIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5yZWRvKCkucnVuKCkKICAgICAgICB9CiAgICAgIF07CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIHRoaXMudGlwdGFwQnVuZGxlID0gYXdhaXQgRGVlc1NlcnZpY2VMaWJMb2FkZXIuZ2V0SW5zdGFuY2UoKS5sb2FkVGlwdGFwKCk7CiAgICAgIHRoaXMuZWRpdG9yRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLWNvbnRlbnQiKTsKICAgICAgdGhpcy5saW5rSW5wdXRFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5saW5rLWlucHV0IGlucHV0Iik7CiAgICAgIHRoaXMuaW5pdGlhbGl6ZUVkaXRvcigpOwogICAgfQogICAgaW5pdGlhbGl6ZUVkaXRvcigpIHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMudGlwdGFwQnVuZGxlKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgeyBFZGl0b3IsIFN0YXJ0ZXJLaXQsIFVuZGVybGluZSwgVGV4dEFsaWduLCBMaW5rLCBUeXBvZ3JhcGh5IH0gPSB0aGlzLnRpcHRhcEJ1bmRsZTsKICAgICAgdGhpcy5lZGl0b3IgPSBuZXcgRWRpdG9yKHsKICAgICAgICBlbGVtZW50OiB0aGlzLmVkaXRvckVsZW1lbnQsCiAgICAgICAgZXh0ZW5zaW9uczogWwogICAgICAgICAgU3RhcnRlcktpdC5jb25maWd1cmUoewogICAgICAgICAgICBoZWFkaW5nOiB7CiAgICAgICAgICAgICAgbGV2ZWxzOiBbMSwgMiwgM10KICAgICAgICAgICAgfQogICAgICAgICAgfSksCiAgICAgICAgICBVbmRlcmxpbmUuY29uZmlndXJlKHt9KSwKICAgICAgICAgIFRleHRBbGlnbi5jb25maWd1cmUoewogICAgICAgICAgICB0eXBlczogWyJoZWFkaW5nIiwgInBhcmFncmFwaCJdCiAgICAgICAgICB9KSwKICAgICAgICAgIExpbmsuY29uZmlndXJlKHsKICAgICAgICAgICAgb3Blbk9uQ2xpY2s6IGZhbHNlLAogICAgICAgICAgICBIVE1MQXR0cmlidXRlczogewogICAgICAgICAgICAgIGNsYXNzOiAiZWRpdG9yLWxpbmsiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pLAogICAgICAgICAgVHlwb2dyYXBoeS5jb25maWd1cmUoe30pCiAgICAgICAgXSwKICAgICAgICBjb250ZW50OiB0aGlzLnZhbHVlIHx8ICh0aGlzLnBsYWNlaG9sZGVyID8gYDxwPiR7dGhpcy5wbGFjZWhvbGRlcn08L3A+YCA6ICIiKSwKICAgICAgICBvblVwZGF0ZTogKHsgZWRpdG9yIH0pID0+IHsKICAgICAgICAgIHRoaXMudmFsdWUgPSBlZGl0b3IuZ2V0SFRNTCgpOwogICAgICAgICAgdGhpcy51cGRhdGVXb3JkQ291bnQoKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImlucHV0IiwgewogICAgICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHRoaXMudmFsdWUgfSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNoYW5nZSIsIHsKICAgICAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnZhbHVlIH0sCiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgfSwKICAgICAgICBvblNlbGVjdGlvblVwZGF0ZTogKCkgPT4gewogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgfSwKICAgICAgICBvbkZvY3VzOiAoKSA9PiB7CiAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgICB9LAogICAgICAgIG9uQmx1cjogKCkgPT4gewogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy51cGRhdGVXb3JkQ291bnQoKTsKICAgIH0KICAgIHVwZGF0ZVdvcmRDb3VudCgpIHsKICAgICAgaWYgKCF0aGlzLmVkaXRvcikKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHRleHQ5ID0gdGhpcy5lZGl0b3IuZ2V0VGV4dCgpOwogICAgICB0aGlzLndvcmRDb3VudCA9IHRleHQ5LnRyaW0oKSA/IHRleHQ5LnRyaW0oKS5zcGxpdCgvXHMrLykubGVuZ3RoIDogMDsKICAgIH0KICAgIHRvZ2dsZUxpbmsoKSB7CiAgICAgIGlmICghdGhpcy5lZGl0b3IpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAodGhpcy5lZGl0b3IuaXNBY3RpdmUoImxpbmsiKSkgewogICAgICAgIGNvbnN0IGhyZWYgPSB0aGlzLmVkaXRvci5nZXRBdHRyaWJ1dGVzKCJsaW5rIikuaHJlZjsKICAgICAgICB0aGlzLnNob3dMaW5rSW5wdXQgPSB0cnVlOwogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5saW5rSW5wdXRFbGVtZW50KSB7CiAgICAgICAgICAgIHRoaXMubGlua0lucHV0RWxlbWVudC52YWx1ZSA9IGhyZWYgfHwgIiI7CiAgICAgICAgICAgIHRoaXMubGlua0lucHV0RWxlbWVudC5mb2N1cygpOwogICAgICAgICAgICB0aGlzLmxpbmtJbnB1dEVsZW1lbnQuc2VsZWN0KCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zaG93TGlua0lucHV0ID0gdHJ1ZTsKICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgaWYgKHRoaXMubGlua0lucHV0RWxlbWVudCkgewogICAgICAgICAgICB0aGlzLmxpbmtJbnB1dEVsZW1lbnQudmFsdWUgPSAiIjsKICAgICAgICAgICAgdGhpcy5saW5rSW5wdXRFbGVtZW50LmZvY3VzKCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHNhdmVMaW5rKCkgewogICAgICBpZiAoIXRoaXMuZWRpdG9yIHx8ICF0aGlzLmxpbmtJbnB1dEVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCB1cmwgPSB0aGlzLmxpbmtJbnB1dEVsZW1lbnQudmFsdWU7CiAgICAgIGlmICh1cmwpIHsKICAgICAgICB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkuc2V0TGluayh7IGhyZWY6IHVybCB9KS5ydW4oKTsKICAgICAgfQogICAgICB0aGlzLmhpZGVMaW5rSW5wdXQoKTsKICAgIH0KICAgIHJlbW92ZUxpbmsoKSB7CiAgICAgIGlmICghdGhpcy5lZGl0b3IpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudW5zZXRMaW5rKCkucnVuKCk7CiAgICAgIHRoaXMuaGlkZUxpbmtJbnB1dCgpOwogICAgfQogICAgaGlkZUxpbmtJbnB1dCgpIHsKICAgICAgdGhpcy5zaG93TGlua0lucHV0ID0gZmFsc2U7CiAgICAgIHRoaXMuZWRpdG9yPy5jb21tYW5kcy5mb2N1cygpOwogICAgfQogICAgaGFuZGxlTGlua0lucHV0S2V5ZG93bihlMTEpIHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnNhdmVMaW5rKCk7CiAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkVzY2FwZSIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmhpZGVMaW5rSW5wdXQoKTsKICAgICAgfQogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgIGlmICh0aGlzLmVkaXRvciAmJiB2YWx1ZTIgIT09IHRoaXMuZWRpdG9yLmdldEhUTUwoKSkgewogICAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLnNldENvbnRlbnQodmFsdWUyKTsKICAgICAgfQogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgY2xlYXIoKSB7CiAgICAgIHRoaXMuc2V0VmFsdWUoIiIpOwogICAgfQogICAgZm9jdXMoKSB7CiAgICAgIHRoaXMuZWRpdG9yPy5jb21tYW5kcy5mb2N1cygpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICh0aGlzLmVkaXRvcikgewogICAgICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2MChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0UmljaHRleHQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRhZ3MvZGVlcy1pbnB1dC10YWdzLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9hMzsKdmFyIGRlbW9GdW5jMzkgPSAoKSA9PiBiMihfYTMgfHwgKF9hMyA9IF9fdGVtcGxhdGUoWyJcbiAgPGRlZXMtZGVtb3dyYXBwZXI+XG4gICAgPHN0eWxlPlxuICAgICAgIiwgJ1xuICAgIDwvc3R5bGU+XG4gICAgXG4gICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPlxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPScsICIgLnN1YnRpdGxlPSIsICI+XG4gICAgICAgIDxkZWVzLWlucHV0LXRhZ3NcbiAgICAgICAgICAubGFiZWw9IiwgIlxuICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgLnZhbHVlPSIsICJcbiAgICAgICAgICAuZGVzY3JpcHRpb249IiwgIlxuICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+XG4gICAgICA8L2RlZXMtcGFuZWw+XG5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1pbnB1dC10YWdzXG4gICAgICAgICAgLmxhYmVsPSIsICJcbiAgICAgICAgICAucGxhY2Vob2xkZXI9IiwgIlxuICAgICAgICAgIC5zdWdnZXN0aW9ucz0iLCAiXG4gICAgICAgICAgLnZhbHVlPSIsICJcbiAgICAgICAgICAuZGVzY3JpcHRpb249IiwgIlxuICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+XG4gICAgICA8L2RlZXMtcGFuZWw+XG5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAnPlxuICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWxheW91dCI+XG4gICAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgICAgLmxhYmVsPScsICJcbiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgICAubWF4VGFncz0iLCAiXG4gICAgICAgICAgICAudmFsdWU9IiwgIlxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSIsICJcbiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgICAgLmxhYmVsPSIsICJcbiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgICAubWF4VGFncz0iLCAiXG4gICAgICAgICAgICAuc3VnZ2VzdGlvbnM9IiwgIlxuICAgICAgICAgICAgLnZhbHVlPSIsICJcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0iLCAiXG4gICAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGVlcy1wYW5lbD5cblxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSIsICIgLnN1YnRpdGxlPSIsICI+XG4gICAgICAgIDxkZWVzLWlucHV0LXRhZ3NcbiAgICAgICAgICAubGFiZWw9IiwgIlxuICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgLnJlcXVpcmVkPSIsICJcbiAgICAgICAgICAuZGVzY3JpcHRpb249IiwgIlxuICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+XG4gICAgICA8L2RlZXMtcGFuZWw+XG5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1pbnB1dC10YWdzXG4gICAgICAgICAgLmxhYmVsPSIsICJcbiAgICAgICAgICAudmFsdWU9IiwgIlxuICAgICAgICAgIC5kaXNhYmxlZD0iLCAiXG4gICAgICAgICAgLmRlc2NyaXB0aW9uPSIsICJcbiAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPlxuICAgICAgPC9kZWVzLXBhbmVsPlxuXG4gICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9IiwgIiAuc3VidGl0bGU9IiwgIj5cbiAgICAgICAgPGRlZXMtZm9ybT5cbiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0XG4gICAgICAgICAgICAubGFiZWw9IiwgIlxuICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSIsICJcbiAgICAgICAgICAgIC5yZXF1aXJlZD0iLCAiXG4gICAgICAgICAgICAua2V5PSIsICdcbiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPlxuICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgICAgICAubGFiZWw9JywgIlxuICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9IiwgIlxuICAgICAgICAgICAgICAucmVxdWlyZWQ9IiwgIlxuICAgICAgICAgICAgICAua2V5PSIsICJcbiAgICAgICAgICAgICAgLnN1Z2dlc3Rpb25zPSIsICJcbiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdGFncz5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgICAgICAubGFiZWw9IiwgIlxuICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9IiwgIlxuICAgICAgICAgICAgICAua2V5PSIsICJcbiAgICAgICAgICAgICAgLm1heFRhZ3M9IiwgIlxuICAgICAgICAgICAgICAuc3VnZ2VzdGlvbnM9IiwgIlxuICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgIDxkZWVzLWlucHV0LXRleHRcbiAgICAgICAgICAgIC5sYWJlbD0iLCAiXG4gICAgICAgICAgICAuaW5wdXRUeXBlPSIsICJcbiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgICAua2V5PSIsICJcbiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgLnRleHQ9IiwgIj48L2RlZXMtZm9ybS1zdWJtaXQ+XG4gICAgICAgIDwvZGVlcy1mb3JtPlxuICAgICAgPC9kZWVzLXBhbmVsPlxuXG4gICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9IiwgIiAuc3VidGl0bGU9IiwgJz5cbiAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS10YWdzIlxuICAgICAgICAgIC5sYWJlbD0nLCAiXG4gICAgICAgICAgLnBsYWNlaG9sZGVyPSIsICJcbiAgICAgICAgICAuc3VnZ2VzdGlvbnM9IiwgIlxuICAgICAgICAgIEBjaGFuZ2U9IiwgYAogICAgICAgID48L2RlZXMtaW5wdXQtdGFncz4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJ0YWctcHJldmlldyIgaWQ9InRhZ3MtcHJldmlldyI+CiAgICAgICAgICA8ZW0gc3R5bGU9ImNvbG9yOiAjOTk5OyI+Tm8gdGFncyBhZGRlZCB5ZXQuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1wcmV2aWV3IiBpZD0idGFncy1qc29uIj4KICAgICAgICAgIDxlbT5KU09OIG91dHB1dCB3aWxsIGFwcGVhciBoZXJlLi4uPC9lbT4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8c2NyaXB0PgogICAgICAgICAgLy8gVXBkYXRlIEpTT04gcHJldmlldwogICAgICAgICAgY29uc3QgdGFnc0lucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2ludGVyYWN0aXZlLXRhZ3MnKTsKICAgICAgICAgIHRhZ3NJbnB1dD8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHsKICAgICAgICAgICAgY29uc3QganNvblByZXZpZXcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdGFncy1qc29uJyk7CiAgICAgICAgICAgIGlmIChqc29uUHJldmlldykgewogICAgICAgICAgICAgIGpzb25QcmV2aWV3LnRleHRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZS5kZXRhaWwudmFsdWUsIG51bGwsIDIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICA8XC9zY3JpcHQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYF0pKSwgaWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5vdXRwdXQtcHJldmlldyB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNmM2Y0ZjY7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBjb2xvcjogIzM3NDE1MTsKICAgICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzJjMmMyYzsKICAgICAgICAgICAgY29sb3I6ICNlNGU0ZTc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC50YWctcHJldmlldyB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZmFmYjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAudGFnLXByZXZpZXcgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMWYyOTM3OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAudGFnLXByZXZpZXctaXRlbSB7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICBwYWRkaW5nOiA0cHggMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNlMGU3ZmY7CiAgICAgICAgICBjb2xvcjogIzQzMzhjYTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAgIC50YWctcHJldmlldy1pdGVtIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzMxMmU4MTsKICAgICAgICAgICAgY29sb3I6ICNjN2QyZmU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBgLCAiMS4gQmFzaWMgVGFncyBJbnB1dCIsICJTaW1wbGUgdGFnIGlucHV0IHdpdGggY29tbW9uIHByb2dyYW1taW5nIGxhbmd1YWdlcyIsICJQcm9ncmFtbWluZyBMYW5ndWFnZXMiLCAiQWRkIGEgbGFuZ3VhZ2UuLi4iLCBbIkphdmFTY3JpcHQiLCAiVHlwZVNjcmlwdCIsICJQeXRob24iLCAiR28iXSwgIlByZXNzIEVudGVyIG9yIGNvbW1hIHRvIGFkZCB0YWdzIiwgIjIuIFRhZ3Mgd2l0aCBTdWdnZXN0aW9ucyIsICJBdXRvLWNvbXBsZXRlIHN1Z2dlc3Rpb25zIGZvciBmYXN0ZXIgaW5wdXQiLCAiVGVjaCBTdGFjayIsICJUeXBlIHRvIHNlZSBzdWdnZXN0aW9ucy4uLiIsIFsKICAiUmVhY3QiLAogICJWdWUiLAogICJBbmd1bGFyIiwKICAiU3ZlbHRlIiwKICAiTGl0IiwKICAiTmV4dC5qcyIsCiAgIk51eHQiLAogICJTdmVsdGVLaXQiLAogICJOb2RlLmpzIiwKICAiRGVubyIsCiAgIkJ1biIsCiAgIkV4cHJlc3MiLAogICJGYXN0aWZ5IiwKICAiTmVzdC5qcyIsCiAgIktvYSIsCiAgIk1vbmdvREIiLAogICJQb3N0Z3JlU1FMIiwKICAiUmVkaXMiLAogICJNeVNRTCIsCiAgIlNRTGl0ZSIsCiAgIkNhc3NhbmRyYSIsCiAgIkRvY2tlciIsCiAgIkt1YmVybmV0ZXMiLAogICJBV1MiLAogICJBenVyZSIsCiAgIkdDUCIsCiAgIlZlcmNlbCIsCiAgIk5ldGxpZnkiCl0sIFsiUmVhY3QiLCAiTm9kZS5qcyIsICJQb3N0Z3JlU1FMIiwgIkRvY2tlciJdLCAiU3RhcnQgdHlwaW5nIHRvIHNlZSBzdWdnZXN0aW9ucyBmcm9tIHBvcHVsYXIgdGVjaG5vbG9naWVzIiwgIjMuIExpbWl0ZWQgVGFncyIsICJSZXN0cmljdCB0aGUgbnVtYmVyIG9mIHRhZ3MgdXNlcnMgY2FuIGFkZCIsICJUb3AgMyBTa2lsbHMiLCAiQWRkIHVwIHRvIDMgc2tpbGxzLi4uIiwgMywgWyJEZXNpZ24iLCAiRGV2ZWxvcG1lbnQiXSwgIk1heGltdW0gMyB0YWdzIGFsbG93ZWQiLCAiQ2F0ZWdvcmllcyAoTWF4IDUpIiwgIlNlbGVjdCBjYXRlZ29yaWVzLi4uIiwgNSwgWyJCbG9nIiwgIlR1dG9yaWFsIiwgIk5ld3MiLCAiUmV2aWV3IiwgIkd1aWRlIiwgIkNhc2UgU3R1ZHkiLCAiSW50ZXJ2aWV3Il0sIFsiVHV0b3JpYWwiLCAiR3VpZGUiXSwgIkNob29zZSB1cCB0byA1IGNhdGVnb3JpZXMiLCAiNC4gUmVxdWlyZWQgJiBWYWxpZGF0aW9uIiwgIlRhZ3MgaW5wdXQgd2l0aCB2YWxpZGF0aW9uIHJlcXVpcmVtZW50cyIsICJQcm9qZWN0IFRhZ3MiLCAiQWRkIGF0IGxlYXN0IG9uZSB0YWcuLi4iLCB0cnVlLCAiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCAtIGFkZCBhdCBsZWFzdCBvbmUgdGFnIiwgIjUuIERpc2FibGVkIFN0YXRlIiwgIlJlYWQtb25seSB0YWdzIGRpc3BsYXkiLCAiU3lzdGVtIFRhZ3MiLCBbIlN5c3RlbSIsICJQcm90ZWN0ZWQiLCAiUmVhZC1Pbmx5IiwgIkFyY2hpdmUiXSwgdHJ1ZSwgIlRoZXNlIHRhZ3MgY2Fubm90IGJlIG1vZGlmaWVkIiwgIjYuIEZvcm0gSW50ZWdyYXRpb24iLCAiVGFncyBpbnB1dCB3b3JraW5nIHdpdGhpbiBhIGZvcm0gY29udGV4dCIsICJQcm9qZWN0IE5hbWUiLCAiTXkgQXdlc29tZSBQcm9qZWN0IiwgdHJ1ZSwgIm5hbWUiLCAiVGVjaG5vbG9naWVzIFVzZWQiLCAiQWRkIHRlY2hub2xvZ2llcy4uLiIsIHRydWUsICJ0ZWNobm9sb2dpZXMiLCBbCiAgIlR5cGVTY3JpcHQiLAogICJKYXZhU2NyaXB0IiwKICAiUHl0aG9uIiwKICAiR28iLAogICJSdXN0IiwKICAiUmVhY3QiLAogICJWdWUiLAogICJBbmd1bGFyIiwKICAiU3ZlbHRlIiwKICAiTm9kZS5qcyIsCiAgIkRlbm8iLAogICJFeHByZXNzIiwKICAiRmFzdEFQSSIKXSwgIlByb2plY3QgVGFncyIsICJBZGQgZGVzY3JpcHRpdmUgdGFncy4uLiIsICJ0YWdzIiwgMTAsIFsKICAiZnJvbnRlbmQiLAogICJiYWNrZW5kIiwKICAiZnVsbHN0YWNrIiwKICAibW9iaWxlIiwKICAiZGVza3RvcCIsCiAgIndlYiIsCiAgImFwaSIsCiAgImRhdGFiYXNlIiwKICAiZGV2b3BzIiwKICAidWkvdXgiLAogICJvcGVuc291cmNlIiwKICAic2FhcyIsCiAgImVudGVycHJpc2UiLAogICJzdGFydHVwIgpdLCAiRGVzY3JpcHRpb24iLCAidGV4dGFyZWEiLCAiRGVzY3JpYmUgeW91ciBwcm9qZWN0Li4uIiwgImRlc2NyaXB0aW9uIiwgIkNyZWF0ZSBQcm9qZWN0IiwgIjcuIEludGVyYWN0aXZlIERlbW8iLCAiQWRkIHRhZ3MgYW5kIHNlZSB0aGVtIGNvbGxlY3RlZCBpbiByZWFsLXRpbWUiLCAiWW91ciBJbnRlcmVzdHMiLCAiVHlwZSB5b3VyIGludGVyZXN0cy4uLiIsIFsKICAiTXVzaWMiLAogICJNb3ZpZXMiLAogICJCb29rcyIsCiAgIlRyYXZlbCIsCiAgIlBob3RvZ3JhcGh5IiwKICAiQ29va2luZyIsCiAgIkdhbWluZyIsCiAgIlNwb3J0cyIsCiAgIkFydCIsCiAgIlRlY2hub2xvZ3kiLAogICJGYXNoaW9uIiwKICAiRml0bmVzcyIsCiAgIk5hdHVyZSIsCiAgIlNjaWVuY2UiLAogICJIaXN0b3J5IgpdLCAoZTExKSA9PiB7CiAgY29uc3QgcHJldmlldyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiN0YWdzLXByZXZpZXciKTsKICBjb25zdCB0YWdzID0gZTExLmRldGFpbC52YWx1ZTsKICBpZiAocHJldmlldykgewogICAgaWYgKHRhZ3MubGVuZ3RoID09PSAwKSB7CiAgICAgIHByZXZpZXcuaW5uZXJIVE1MID0gJzxlbSBzdHlsZT0iY29sb3I6ICM5OTk7Ij5ObyB0YWdzIGFkZGVkIHlldC4uLjwvZW0+JzsKICAgIH0gZWxzZSB7CiAgICAgIHByZXZpZXcuaW5uZXJIVE1MID0gdGFncy5tYXAoKHRhZykgPT4gYDxzcGFuIGNsYXNzPSJ0YWctcHJldmlldy1pdGVtIj4ke3RhZ308L3NwYW4+YCkuam9pbigiIik7CiAgICB9CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRhZ3MvZGVlcy1pbnB1dC10YWdzLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGVlc19pY29uKCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTYwID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2MSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0VGFncyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtdGFncyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnM7CiAgbGV0IF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhUYWdzX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhUYWdzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4VGFnc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3VnZ2VzdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX3N1Z2dlc3Rpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3VnZ2VzdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lucHV0VmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX2lucHV0VmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93U3VnZ2VzdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dTdWdnZXN0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dTdWdnZXN0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25UZXh0X2RlY29yYXRvcnM7CiAgbGV0IF92YWxpZGF0aW9uVGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dFRhZ3MyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbWF4VGFnc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3N1Z2dlc3Rpb25zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9zaG93U3VnZ2VzdGlvbnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF92YWxpZGF0aW9uVGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX19lc0RlY29yYXRlNjAodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MCh0aGlzLCBudWxsLCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicGxhY2Vob2xkZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBsYWNlaG9sZGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBsYWNlaG9sZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wbGFjZWhvbGRlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsIF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYwKHRoaXMsIG51bGwsIF9tYXhUYWdzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1heFRhZ3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heFRhZ3MiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWF4VGFncywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWF4VGFncyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhUYWdzX2luaXRpYWxpemVycywgX21heFRhZ3NfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MCh0aGlzLCBudWxsLCBfc3VnZ2VzdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3VnZ2VzdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInN1Z2dlc3Rpb25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN1Z2dlc3Rpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdWdnZXN0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zdWdnZXN0aW9uc19pbml0aWFsaXplcnMsIF9zdWdnZXN0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYwKHRoaXMsIG51bGwsIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlucHV0VmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlucHV0VmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5wdXRWYWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaW5wdXRWYWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgX2lucHV0VmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MCh0aGlzLCBudWxsLCBfc2hvd1N1Z2dlc3Rpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dTdWdnZXN0aW9ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1N1Z2dlc3Rpb25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dTdWdnZXN0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd1N1Z2dlc3Rpb25zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dTdWdnZXN0aW9uc19pbml0aWFsaXplcnMsIF9zaG93U3VnZ2VzdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MCh0aGlzLCBudWxsLCBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleF9pbml0aWFsaXplcnMsIF9oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYwKHRoaXMsIG51bGwsIF92YWxpZGF0aW9uVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWxpZGF0aW9uVGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsaWRhdGlvblRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblRleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbGlkYXRpb25UZXh0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRUYWdzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMzOTsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsICJBZGQgdGFncy4uLiIpKTsKICAgIGdldCBwbGFjZWhvbGRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGxhY2Vob2xkZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4VGFnc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjEodGhpcywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfbWF4VGFnc19pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBtYXhUYWdzKCkgewogICAgICByZXR1cm4gdGhpcy4jbWF4VGFnc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gMCBtZWFucyB1bmxpbWl0ZWQKICAgIHNldCBtYXhUYWdzKHZhbHVlMikgewogICAgICB0aGlzLiNtYXhUYWdzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9tYXhUYWdzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfc3VnZ2VzdGlvbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IHN1Z2dlc3Rpb25zKCkgewogICAgICByZXR1cm4gdGhpcy4jc3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdWdnZXN0aW9ucyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpbnB1dFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfc3VnZ2VzdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBpbnB1dFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jaW5wdXRWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlucHV0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lucHV0VmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93U3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfc2hvd1N1Z2dlc3Rpb25zX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93U3VnZ2VzdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93U3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93U3VnZ2VzdGlvbnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dTdWdnZXN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfc2hvd1N1Z2dlc3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfaW5pdGlhbGl6ZXJzLCAtMSkpOwogICAgZ2V0IGhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4KCkgewogICAgICByZXR1cm4gdGhpcy4jaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBoaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YWxpZGF0aW9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjEodGhpcywgX2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfdmFsaWRhdGlvblRleHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHZhbGlkYXRpb25UZXh0KCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWxpZGF0aW9uVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAudGFncy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgICAgbWluLWhlaWdodDogNDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY3Vyc29yOiB0ZXh0OwogICAgICB9CgogICAgICAudGFncy1jb250YWluZXI6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWdzLWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLnRhZ3MtY29udGFpbmVyLmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAudGFnIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjAuMiUgNjUuMSUgLyAwLjIpIiwgImhzbCgyMTUgMjAuMiUgMzUuMSUgLyAwLjIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCAiaHNsKDIxNy45IDEwLjYlIDc0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSAvIDAuMykiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSAvIDAuMykiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGFuaW1hdGlvbjogdGFnQXBwZWFyIDAuMTVzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgdGFnQXBwZWFyIHsKICAgICAgICBmcm9tIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICB0byB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC50YWctcmVtb3ZlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgNDYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA1NC45JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWctcmVtb3ZlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjA4KSIsICJoc2woMCAwJSAxMDAlIC8gMC4wOCkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjE3LjkgMTAuNiUgNzQuOSUpIil9OwogICAgICB9CgogICAgICAudGFnLXJlbW92ZSBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGhlaWdodDogMTBweDsKICAgICAgfQoKICAgICAgLnRhZy1pbnB1dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIHBhZGRpbmc6IDJweCA0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIC50YWctaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWctaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIC8qIFN1Z2dlc3Rpb25zIGRyb3Bkb3duICovCiAgICAgIC5zdWdnZXN0aW9ucy1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb25zLWRyb3Bkb3duIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggaHNsKDAgMCUgMCUgLyAwLjEpLCAwIDJweCA0cHggLTJweCBoc2woMCAwJSAwJSAvIDAuMSk7CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB6LWluZGV4OiAxMDAwOwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbiB7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbi5oaWdobGlnaHRlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAvKiBWYWxpZGF0aW9uIHN0eWxlcyAqLwogICAgICAudmFsaWRhdGlvbi1tZXNzYWdlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDZweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAvKiBEZXNjcmlwdGlvbiBzdHlsZXMgKi8KICAgICAgLmRlc2NyaXB0aW9uIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDZweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAvKiBTY3JvbGxiYXIgc3R5bGluZyAqLwogICAgICAuc3VnZ2VzdGlvbnMtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbnMtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb25zLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbnMtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgZmlsdGVyZWRTdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnMuZmlsdGVyKChzdWdnZXN0aW9uKSA9PiAhdGhpcy52YWx1ZS5pbmNsdWRlcyhzdWdnZXN0aW9uKSAmJiBzdWdnZXN0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5pbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCkpKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+YCA6ICIifQogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InN1Z2dlc3Rpb25zLWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJ0YWdzLWNvbnRhaW5lciAke3RoaXMuZGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9IgogICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUNvbnRhaW5lckNsaWNrfQogICAgICAgICAgPgogICAgICAgICAgICAke3RoaXMudmFsdWUubWFwKCh0YWcpID0+IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhZyI+CiAgICAgICAgICAgICAgICA8c3Bhbj4ke3RhZ308L3NwYW4+CiAgICAgICAgICAgICAgICAkeyF0aGlzLmRpc2FibGVkID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhZy1yZW1vdmUiIEBjbGljaz0keyhlMTEpID0+IHRoaXMucmVtb3ZlVGFnKGUxMSwgdGFnKX0+CiAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6eCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCl9CiAgICAgICAgICAgIAogICAgICAgICAgICAkeyF0aGlzLmRpc2FibGVkICYmICghdGhpcy5tYXhUYWdzIHx8IHRoaXMudmFsdWUubGVuZ3RoIDwgdGhpcy5tYXhUYWdzKSA/IGIyYAogICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgIGNsYXNzPSJ0YWctaW5wdXQiCiAgICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9JHt0aGlzLnBsYWNlaG9sZGVyfQogICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pbnB1dFZhbHVlfQogICAgICAgICAgICAgICAgQGlucHV0PSR7dGhpcy5oYW5kbGVJbnB1dH0KICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7dGhpcy5oYW5kbGVLZXlEb3dufQogICAgICAgICAgICAgICAgQGZvY3VzPSR7dGhpcy5oYW5kbGVGb2N1c30KICAgICAgICAgICAgICAgIEBibHVyPSR7dGhpcy5oYW5kbGVCbHVyfQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgICAgICAvPgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAke3RoaXMuc2hvd1N1Z2dlc3Rpb25zICYmIGZpbHRlcmVkU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWdnZXN0aW9ucy1kcm9wZG93biI+CiAgICAgICAgICAgICAgJHtmaWx0ZXJlZFN1Z2dlc3Rpb25zLm1hcCgoc3VnZ2VzdGlvbiwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9InN1Z2dlc3Rpb24gJHtpbmRleDIgPT09IHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPyAiaGlnaGxpZ2h0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICBAbW91c2Vkb3duPSR7KGUxMSkgPT4gewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuYWRkVGFnKHN1Z2dlc3Rpb24pOwogICAgICB9fQogICAgICAgICAgICAgICAgICBAbW91c2VlbnRlcj0keygpID0+IHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPSBpbmRleDJ9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICR7c3VnZ2VzdGlvbn0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGApfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25UZXh0ID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWxpZGF0aW9uLW1lc3NhZ2UiPiR7dGhpcy52YWxpZGF0aW9uVGV4dH08L2Rpdj4KICAgICAgICBgIDogIiJ9CiAgICAgICAgCiAgICAgICAgJHt0aGlzLmRlc2NyaXB0aW9uID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+JHt0aGlzLmRlc2NyaXB0aW9ufTwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgaGFuZGxlQ29udGFpbmVyQ2xpY2soZTExKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50YWctaW5wdXQiKTsKICAgICAgaWYgKGlucHV0ICYmIGUxMS50YXJnZXQgIT09IGlucHV0KSB7CiAgICAgICAgaW5wdXQuZm9jdXMoKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlSW5wdXQoZTExKSB7CiAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgdGhpcy5pbnB1dFZhbHVlID0gaW5wdXQudmFsdWU7CiAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUuaW5jbHVkZXMoIiwiKSB8fCB0aGlzLmlucHV0VmFsdWUuaW5jbHVkZXMoIjsiKSkgewogICAgICAgIGNvbnN0IHRhZyA9IHRoaXMuaW5wdXRWYWx1ZS5yZXBsYWNlKC9bLDtdL2csICIiKS50cmltKCk7CiAgICAgICAgaWYgKHRhZykgewogICAgICAgICAgdGhpcy5hZGRUYWcodGFnKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZUtleURvd24oZTExKSB7CiAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCA+PSAwICYmIHRoaXMuc2hvd1N1Z2dlc3Rpb25zKSB7CiAgICAgICAgICBjb25zdCBmaWx0ZXJlZFN1Z2dlc3Rpb25zID0gdGhpcy5zdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+ICF0aGlzLnZhbHVlLmluY2x1ZGVzKHN1Z2dlc3Rpb24pICYmIHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpOwogICAgICAgICAgaWYgKGZpbHRlcmVkU3VnZ2VzdGlvbnNbdGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleF0pIHsKICAgICAgICAgICAgdGhpcy5hZGRUYWcoZmlsdGVyZWRTdWdnZXN0aW9uc1t0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4XSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlucHV0VmFsdWUudHJpbSgpKSB7CiAgICAgICAgICB0aGlzLmFkZFRhZyh0aGlzLmlucHV0VmFsdWUudHJpbSgpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkJhY2tzcGFjZSIgJiYgIXRoaXMuaW5wdXRWYWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLnJlbW92ZVRhZyhlMTEsIHRoaXMudmFsdWVbdGhpcy52YWx1ZS5sZW5ndGggLSAxXSk7CiAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkFycm93RG93biIgJiYgdGhpcy5zaG93U3VnZ2VzdGlvbnMpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBjb25zdCBmaWx0ZXJlZENvdW50ID0gdGhpcy5zdWdnZXN0aW9ucy5maWx0ZXIoKHM5KSA9PiAhdGhpcy52YWx1ZS5pbmNsdWRlcyhzOSkgJiYgczkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpLmxlbmd0aDsKICAgICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gTWF0aC5taW4odGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCArIDEsIGZpbHRlcmVkQ291bnQgLSAxKTsKICAgICAgfSBlbHNlIGlmIChlMTEua2V5ID09PSAiQXJyb3dVcCIgJiYgdGhpcy5zaG93U3VnZ2VzdGlvbnMpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gTWF0aC5tYXgodGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCAtIDEsIDApOwogICAgICB9IGVsc2UgaWYgKGUxMS5rZXkgPT09ICJFc2NhcGUiKSB7CiAgICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMgPSBmYWxzZTsKICAgICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gLTE7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZUZvY3VzKCkgewogICAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVCbHVyKCkgewogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlOwogICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPSAtMTsKICAgICAgfSwgMjAwKTsKICAgIH0KICAgIGFkZFRhZyh0YWcpIHsKICAgICAgaWYgKCF0YWcgfHwgdGhpcy52YWx1ZS5pbmNsdWRlcyh0YWcpKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKHRoaXMubWF4VGFncyAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+PSB0aGlzLm1heFRhZ3MpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIHRhZ107CiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICIiOwogICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlOwogICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gLTE7CiAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIudGFnLWlucHV0Iik7CiAgICAgIGlmIChpbnB1dCkgewogICAgICAgIGlucHV0LnZhbHVlID0gIiI7CiAgICAgIH0KICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7CiAgICB9CiAgICByZW1vdmVUYWcoZTExLCB0YWcpIHsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5maWx0ZXIoKHQ5KSA9PiB0OSAhPT0gdGFnKTsKICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7CiAgICB9CiAgICBlbWl0Q2hhbmdlKCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnZhbHVlIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTIgfHwgW107CiAgICB9CiAgICBhc3luYyB2YWxpZGF0ZSgpIHsKICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgKCF0aGlzLnZhbHVlIHx8IHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSkgewogICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiQXQgbGVhc3Qgb25lIHRhZyBpcyByZXF1aXJlZCI7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiIjsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0VGFnczIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBnZW5lcmF0ZVJlcG9ydEJsb2NrcyA9ICgpID0+IHsKICBjb25zdCB0aW1lc3RhbXAyID0gRGF0ZS5ub3coKTsKICByZXR1cm4gWwogICAgewogICAgICBpZDogYHRpdGxlLSR7dGltZXN0YW1wMn1gLAogICAgICB0eXBlOiAiaGVhZGluZy0xIiwKICAgICAgY29udGVudDogIlN5c3RlbSBQZXJmb3JtYW5jZSBSZXBvcnQiCiAgICB9LAogICAgewogICAgICBpZDogYGRhdGUtJHt0aW1lc3RhbXAyICsgMX1gLAogICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgY29udGVudDogYEdlbmVyYXRlZCBvbjogJHsoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvTG9jYWxlU3RyaW5nKCl9YAogICAgfSwKICAgIHsKICAgICAgaWQ6IGBzdW1tYXJ5LWhlYWRpbmctJHt0aW1lc3RhbXAyICsgMn1gLAogICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgY29udGVudDogIkV4ZWN1dGl2ZSBTdW1tYXJ5IgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBzdW1tYXJ5LSR7dGltZXN0YW1wMiArIDN9YCwKICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgIGNvbnRlbnQ6ICJUaGlzIHJlcG9ydCBwcm92aWRlcyBhbiBhbmFseXNpcyBvZiBzeXN0ZW0gcGVyZm9ybWFuY2UgbWV0cmljcyBvdmVyIHRoZSBsYXN0IDMwIGRheXMuIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBtZXRyaWNzLWhlYWRpbmctJHt0aW1lc3RhbXAyICsgNH1gLAogICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgY29udGVudDogIktleSBNZXRyaWNzIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBtZXRyaWNzLWxpc3QtJHt0aW1lc3RhbXAyICsgNX1gLAogICAgICB0eXBlOiAibGlzdCIsCiAgICAgIGNvbnRlbnQ6ICJBdmVyYWdlIHJlc3BvbnNlIHRpbWU6IDEyNG1zXG5VcHRpbWU6IDk5Ljk3JVxuQ1BVIHV0aWxpemF0aW9uOiA0NSVcbk1lbW9yeSB1c2FnZTogMi4zR0IgLyA4R0IiLAogICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogImJ1bGxldCIgfQogICAgfSwKICAgIHsKICAgICAgaWQ6IGBhbmFseXNpcy1oZWFkaW5nLSR7dGltZXN0YW1wMiArIDZ9YCwKICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgIGNvbnRlbnQ6ICJQZXJmb3JtYW5jZSBBbmFseXNpcyIKICAgIH0sCiAgICB7CiAgICAgIGlkOiBgYW5hbHlzaXMtcXVvdGUtJHt0aW1lc3RhbXAyICsgN31gLAogICAgICB0eXBlOiAicXVvdGUiLAogICAgICBjb250ZW50OiAiU3lzdGVtIHBlcmZvcm1hbmNlIHJlbWFpbnMgd2l0aGluIGFjY2VwdGFibGUgcGFyYW1ldGVycyB3aXRoIHJvb20gZm9yIG9wdGltaXphdGlvbiBpbiBtZW1vcnkgbWFuYWdlbWVudC4iCiAgICB9LAogICAgewogICAgICBpZDogYGNvZGUtaGVhZGluZy0ke3RpbWVzdGFtcDIgKyA4fWAsCiAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICBjb250ZW50OiAiU2FtcGxlIFF1ZXJ5IFBlcmZvcm1hbmNlIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBjb2RlLWJsb2NrLSR7dGltZXN0YW1wMiArIDl9YCwKICAgICAgdHlwZTogImNvZGUiLAogICAgICBjb250ZW50OiAiU0VMRUNUIEFWRyhyZXNwb25zZV90aW1lKSBhcyBhdmdfdGltZSxcbiAgICAgICBDT1VOVCgqKSBhcyB0b3RhbF9yZXF1ZXN0cyxcbiAgICAgICBEQVRFKGNyZWF0ZWRfYXQpIGFzIGRhdGVcbkZST00gcGVyZm9ybWFuY2VfbG9nc1xuV0hFUkUgY3JlYXRlZF9hdCA+PSBOT1coKSAtIElOVEVSVkFMIDMwIERBWVxuR1JPVVAgQlkgREFURShjcmVhdGVkX2F0KVxuT1JERVIgQlkgZGF0ZSBERVNDOyIsCiAgICAgIG1ldGFkYXRhOiB7IGxhbmd1YWdlOiAic3FsIiB9CiAgICB9LAogICAgewogICAgICBpZDogYGRpdmlkZXItJHt0aW1lc3RhbXAyICsgMTB9YCwKICAgICAgdHlwZTogImRpdmlkZXIiLAogICAgICBjb250ZW50OiAiIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBmb290ZXItJHt0aW1lc3RhbXAyICsgMTF9YCwKICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgIGNvbnRlbnQ6ICJSZXBvcnQgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgU3lzdGVtIE1vbml0b3IgdjIuNS4wIgogICAgfQogIF07Cn07CnZhciBnZW5lcmF0ZVJlY2lwZUJsb2NrcyA9ICgpID0+IHsKICBjb25zdCB0aW1lc3RhbXAyID0gRGF0ZS5ub3coKTsKICByZXR1cm4gWwogICAgewogICAgICBpZDogYHJlY2lwZS10aXRsZS0ke3RpbWVzdGFtcDJ9YCwKICAgICAgdHlwZTogImhlYWRpbmctMSIsCiAgICAgIGNvbnRlbnQ6ICJDbGFzc2ljIE1hcmdoZXJpdGEgUGl6emEiCiAgICB9LAogICAgewogICAgICBpZDogYHJlY2lwZS1pbnRyby0ke3RpbWVzdGFtcDIgKyAxfWAsCiAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICBjb250ZW50OiAiQSB0cmFkaXRpb25hbCBJdGFsaWFuIHBpenphIHdpdGggZnJlc2ggYmFzaWwsIG1venphcmVsbGEsIGFuZCB0b21hdG8gc2F1Y2UuIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBpbmdyZWRpZW50cy1oZWFkaW5nLSR7dGltZXN0YW1wMiArIDJ9YCwKICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgIGNvbnRlbnQ6ICJcdXsxRjM1NX0gSW5ncmVkaWVudHMiCiAgICB9LAogICAgewogICAgICBpZDogYGRvdWdoLWhlYWRpbmctJHt0aW1lc3RhbXAyICsgM31gLAogICAgICB0eXBlOiAiaGVhZGluZy0zIiwKICAgICAgY29udGVudDogIkZvciB0aGUgRG91Z2g6IgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBkb3VnaC1saXN0LSR7dGltZXN0YW1wMiArIDR9YCwKICAgICAgdHlwZTogImxpc3QiLAogICAgICBjb250ZW50OiAnNTAwZyB0aXBvICIwMCIgZmxvdXJcbjMyNW1sIHdhcm0gd2F0ZXJcbjEwZyBzYWx0XG43ZyBhY3RpdmUgZHJ5IHllYXN0XG4yIHRic3Agb2xpdmUgb2lsJywKICAgICAgbWV0YWRhdGE6IHsgbGlzdFR5cGU6ICJidWxsZXQiIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiBgdG9wcGluZ3MtaGVhZGluZy0ke3RpbWVzdGFtcDIgKyA1fWAsCiAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICBjb250ZW50OiAiRm9yIHRoZSBUb3BwaW5nczoiCiAgICB9LAogICAgewogICAgICBpZDogYHRvcHBpbmdzLWxpc3QtJHt0aW1lc3RhbXAyICsgNn1gLAogICAgICB0eXBlOiAibGlzdCIsCiAgICAgIGNvbnRlbnQ6ICI0MDBnIGNhbm5lZCBTYW4gTWFyemFubyB0b21hdG9lc1xuMjUwZyBmcmVzaCBtb3p6YXJlbGxhXG5GcmVzaCBiYXNpbCBsZWF2ZXNcbkV4dHJhIHZpcmdpbiBvbGl2ZSBvaWxcblNhbHQgYW5kIHBlcHBlciB0byB0YXN0ZSIsCiAgICAgIG1ldGFkYXRhOiB7IGxpc3RUeXBlOiAiYnVsbGV0IiB9CiAgICB9LAogICAgewogICAgICBpZDogYGluc3RydWN0aW9ucy1oZWFkaW5nLSR7dGltZXN0YW1wMiArIDd9YCwKICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgIGNvbnRlbnQ6ICJcdXsxRjQ2OH1cdTIwMERcdXsxRjM3M30gSW5zdHJ1Y3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBzdGVwcy1saXN0LSR7dGltZXN0YW1wMiArIDh9YCwKICAgICAgdHlwZTogImxpc3QiLAogICAgICBjb250ZW50OiAiRGlzc29sdmUgeWVhc3QgaW4gd2FybSB3YXRlciBhbmQgbGV0IHN0YW5kIGZvciA1IG1pbnV0ZXNcbk1peCBmbG91ciBhbmQgc2FsdCwgY3JlYXRlIGEgd2VsbCBpbiBjZW50ZXJcbkFkZCB5ZWFzdCBtaXh0dXJlIGFuZCBvbGl2ZSBvaWxcbktuZWFkIGZvciAxMCBtaW51dGVzIHVudGlsIHNtb290aFxuTGV0IHJpc2UgZm9yIDEtMiBob3VycyB1bnRpbCBkb3VibGVkXG5QdW5jaCBkb3duIGFuZCBkaXZpZGUgaW50byBwb3J0aW9uc1xuUm9sbCBvdXQgZWFjaCBwb3J0aW9uIHRvIDEyLWluY2ggY2lyY2xlc1xuVG9wIHdpdGggY3J1c2hlZCB0b21hdG9lcywgbW96emFyZWxsYSwgYW5kIGJhc2lsXG5CYWtlIGF0IDQ3NVx4QjBGICgyNDVceEIwQykgZm9yIDEwLTEyIG1pbnV0ZXMiLAogICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogIm9yZGVyZWQiIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiBgdGlwLSR7dGltZXN0YW1wMiArIDl9YCwKICAgICAgdHlwZTogInF1b3RlIiwKICAgICAgY29udGVudDogIlBybyB0aXA6IEZvciBhbiBhdXRoZW50aWMgdGFzdGUsIHVzZSBhIHBpenphIHN0b25lIGFuZCBwcmVoZWF0IGl0IGluIHRoZSBvdmVuIGZvciBhdCBsZWFzdCAzMCBtaW51dGVzIGJlZm9yZSBiYWtpbmcuIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBkaXZpZGVyLSR7dGltZXN0YW1wMiArIDEwfWAsCiAgICAgIHR5cGU6ICJkaXZpZGVyIiwKICAgICAgY29udGVudDogIiIKICAgIH0sCiAgICB7CiAgICAgIGlkOiBgc2VydmluZ3MtJHt0aW1lc3RhbXAyICsgMTF9YCwKICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgIGNvbnRlbnQ6ICJTZXJ2aW5nczogNCBwaXp6YXMgfCBQcmVwIHRpbWU6IDIgaG91cnMgfCBDb29rIHRpbWU6IDEyIG1pbnV0ZXMiCiAgICB9CiAgXTsKfTsKdmFyIGluaXRpYWxpemVFZGl0b3JzID0gKGNvbnRhaW5lcikgPT4gewogIGNvbnN0IGVkaXRvcnMgPSB7fTsKICBlZGl0b3JzLmJhc2ljID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItYmFzaWMiKTsKICBlZGl0b3JzLmFydGljbGUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2VkaXRvci1hcnRpY2xlIik7CiAgZWRpdG9ycy5kcmFnRHJvcCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWRyYWdkcm9wIik7CiAgZWRpdG9ycy50dXRvcmlhbCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLXR1dG9yaWFsIik7CiAgZWRpdG9ycy5tZWV0aW5nID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItbWVldGluZyIpOwogIGVkaXRvcnMucmVjaXBlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItcmVjaXBlIik7CiAgZWRpdG9ycy50ZWNobmljYWwgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2VkaXRvci10ZWNobmljYWwiKTsKICBlZGl0b3JzLmZvcm1JbnRlZ3JhdGlvbiA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWZvcm0taW50ZWdyYXRpb24iKTsKICBlZGl0b3JzLnByb2dyYW1tYXRpYyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLXByb2dyYW1tYXRpYyIpOwogIGVkaXRvcnMuZXhwb3J0RGVtbyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWV4cG9ydCIpOwogIHJldHVybiBlZGl0b3JzOwp9Owp2YXIgc2V0dXBQcm9ncmFtbWF0aWNEZW1vID0gKGNvbnRhaW5lciwgZWRpdG9yKSA9PiB7CiAgY29uc3QgcmVwb3J0QnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tZ2VuZXJhdGUtcmVwb3J0Iik7CiAgY29uc3QgcmVjaXBlQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tZ2VuZXJhdGUtcmVjaXBlIik7CiAgY29uc3QgY2xlYXJCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1jbGVhci1lZGl0b3IiKTsKICBpZiAocmVwb3J0QnRuKSB7CiAgICByZXBvcnRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGVkaXRvci5pbXBvcnRCbG9ja3MoZ2VuZXJhdGVSZXBvcnRCbG9ja3MoKSk7CiAgICB9KTsKICB9CiAgaWYgKHJlY2lwZUJ0bikgewogICAgcmVjaXBlQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBlZGl0b3IuaW1wb3J0QmxvY2tzKGdlbmVyYXRlUmVjaXBlQmxvY2tzKCkpOwogICAgfSk7CiAgfQogIGlmIChjbGVhckJ0bikgewogICAgY2xlYXJCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGVkaXRvci5pbXBvcnRCbG9ja3MoW10pOwogICAgfSk7CiAgfQp9Owp2YXIgc2V0dXBFeHBvcnREZW1vID0gKGNvbnRhaW5lciwgZWRpdG9yKSA9PiB7CiAgY29uc3QgZXhwb3J0QmxvY2tzQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tZXhwb3J0LWJsb2NrcyIpOwogIGNvbnN0IGV4cG9ydEh0bWxCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1leHBvcnQtaHRtbCIpOwogIGNvbnN0IGV4cG9ydE1hcmtkb3duQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tZXhwb3J0LW1hcmtkb3duIik7CiAgY29uc3Qgc2F2ZVN0YXRlQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tc2F2ZS1zdGF0ZSIpOwogIGNvbnN0IHJlc3RvcmVTdGF0ZUJ0biA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjYnRuLXJlc3RvcmUtc3RhdGUiKTsKICBsZXQgc2F2ZWRTdGF0ZSA9IG51bGw7CiAgaWYgKGV4cG9ydEJsb2Nrc0J0bikgewogICAgZXhwb3J0QmxvY2tzQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBjb25zdCBibG9ja3MgPSBlZGl0b3IuZXhwb3J0QmxvY2tzKCk7CiAgICAgIGNvbnNvbGUubG9nKCJFeHBvcnRlZCBibG9ja3M6IiwgYmxvY2tzKTsKICAgICAgYWxlcnQoYEV4cG9ydGVkICR7YmxvY2tzLmxlbmd0aH0gYmxvY2tzIHRvIGNvbnNvbGUuIENoZWNrIGRldmVsb3BlciB0b29scy5gKTsKICAgIH0pOwogIH0KICBpZiAoZXhwb3J0SHRtbEJ0bikgewogICAgZXhwb3J0SHRtbEJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgY29uc3QgaHRtbDIwID0gZWRpdG9yLmV4cG9ydEFzSHRtbCgpOwogICAgICBjb25zb2xlLmxvZygiSFRNTCBFeHBvcnQ6IiwgaHRtbDIwKTsKICAgICAgYWxlcnQoIkhUTUwgZXhwb3J0ZWQgdG8gY29uc29sZS4gQ2hlY2sgZGV2ZWxvcGVyIHRvb2xzLiIpOwogICAgfSk7CiAgfQogIGlmIChleHBvcnRNYXJrZG93bkJ0bikgewogICAgZXhwb3J0TWFya2Rvd25CdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGNvbnN0IG1hcmtkb3duID0gZWRpdG9yLmV4cG9ydEFzTWFya2Rvd24oKTsKICAgICAgY29uc29sZS5sb2coIk1hcmtkb3duIEV4cG9ydDoiLCBtYXJrZG93bik7CiAgICAgIGFsZXJ0KCJNYXJrZG93biBleHBvcnRlZCB0byBjb25zb2xlLiBDaGVjayBkZXZlbG9wZXIgdG9vbHMuIik7CiAgICB9KTsKICB9CiAgaWYgKHNhdmVTdGF0ZUJ0bikgewogICAgc2F2ZVN0YXRlQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBzYXZlZFN0YXRlID0gZWRpdG9yLmV4cG9ydFN0YXRlKCk7CiAgICAgIGNvbnNvbGUubG9nKCJTYXZlZCBzdGF0ZToiLCBzYXZlZFN0YXRlKTsKICAgICAgYWxlcnQoIkVkaXRvciBzdGF0ZSBzYXZlZCEiKTsKICAgIH0pOwogIH0KICBpZiAocmVzdG9yZVN0YXRlQnRuKSB7CiAgICByZXN0b3JlU3RhdGVCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGlmIChzYXZlZFN0YXRlKSB7CiAgICAgICAgZWRpdG9yLmltcG9ydFN0YXRlKHNhdmVkU3RhdGUpOwogICAgICAgIGFsZXJ0KCJFZGl0b3Igc3RhdGUgcmVzdG9yZWQhIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWxlcnQoIk5vIHNhdmVkIHN0YXRlIGZvdW5kLiBTYXZlIHN0YXRlIGZpcnN0ISIpOwogICAgICB9CiAgICB9KTsKICB9Cn07CnZhciBzZXR1cE91dHB1dEZvcm1hdERlbW8gPSAoY29udGFpbmVyLCBodG1sRWRpdG9yLCBtYXJrZG93bkVkaXRvcikgPT4gewogIGNvbnN0IGh0bWxCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1zaG93LWh0bWwtb3V0cHV0Iik7CiAgY29uc3QgaHRtbFByZXZpZXcgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI291dHB1dC1wcmV2aWV3LWh0bWwiKTsKICBpZiAoaHRtbEJ0biAmJiBodG1sUHJldmlldyAmJiBodG1sRWRpdG9yKSB7CiAgICBodG1sQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBodG1sUHJldmlldy50ZXh0Q29udGVudCA9IGh0bWxFZGl0b3IuZ2V0VmFsdWUoKTsKICAgICAgaHRtbFByZXZpZXcuY2xhc3NMaXN0LmFkZCgidmlzaWJsZSIpOwogICAgfSk7CiAgfQogIGNvbnN0IG1hcmtkb3duQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tc2hvdy1tYXJrZG93bi1vdXRwdXQiKTsKICBjb25zdCBtYXJrZG93blByZXZpZXcgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI291dHB1dC1wcmV2aWV3LW1hcmtkb3duIik7CiAgaWYgKG1hcmtkb3duQnRuICYmIG1hcmtkb3duUHJldmlldyAmJiBtYXJrZG93bkVkaXRvcikgewogICAgbWFya2Rvd25CdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIG1hcmtkb3duUHJldmlldy50ZXh0Q29udGVudCA9IG1hcmtkb3duRWRpdG9yLmdldFZhbHVlKCk7CiAgICAgIG1hcmtkb3duUHJldmlldy5jbGFzc0xpc3QuYWRkKCJ2aXNpYmxlIik7CiAgICB9KTsKICB9Cn07CnZhciBwb3B1bGF0ZUluaXRpYWxDb250ZW50ID0gKGVkaXRvcnMpID0+IHsKICBpZiAoZWRpdG9ycy5hcnRpY2xlKSB7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgY29uc3QgYXJ0aWNsZUJsb2NrcyA9IFsKICAgICAgICB7CiAgICAgICAgICBpZDogImludHJvLWhlYWRpbmctIiArIERhdGUubm93KCksCiAgICAgICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgICAgIGNvbnRlbnQ6ICJJbnRyb2R1Y3Rpb24gdG8gTW9kZXJuIFdlYiBEZXZlbG9wbWVudCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiaW50cm8tcGFyYS0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICAgICAgY29udGVudDogIk1vZGVybiB3ZWIgZGV2ZWxvcG1lbnQgaGFzIGV2b2x2ZWQgc2lnbmlmaWNhbnRseSBvdmVyIHRoZSBwYXN0IGRlY2FkZS4gSW4gdGhpcyBhcnRpY2xlLCB3ZSdsbCBleHBsb3JlIHRoZSBrZXkgdGVjaG5vbG9naWVzIGFuZCBiZXN0IHByYWN0aWNlcyB0aGF0IGRlZmluZSB3ZWIgZGV2ZWxvcG1lbnQgaW4gMjAyNC4iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogInRlY2gtaGVhZGluZy0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICAgICAgY29udGVudDogIktleSBUZWNobm9sb2dpZXMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogInRlY2gtbGlzdC0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJsaXN0IiwKICAgICAgICAgIGNvbnRlbnQ6ICJUeXBlU2NyaXB0IC0gVHlwZS1zYWZlIEphdmFTY3JpcHQgZGV2ZWxvcG1lbnRcbldlYiBDb21wb25lbnRzIC0gTmF0aXZlIGNvbXBvbmVudCBtb2RlbFxuRVMgTW9kdWxlcyAtIE1vZGVybiBtb2R1bGUgc3lzdGVtXG5XZWJBc3NlbWJseSAtIEhpZ2gtcGVyZm9ybWFuY2UgY29tcHV0aW5nIiwKICAgICAgICAgIG1ldGFkYXRhOiB7IGxpc3RUeXBlOiAib3JkZXJlZCIgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJxdW90ZS0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJxdW90ZSIsCiAgICAgICAgICBjb250ZW50OiAiVGhlIGJlc3Qgd2F5IHRvIHByZWRpY3QgdGhlIGZ1dHVyZSBpcyB0byBpbnZlbnQgaXQuIC0gQWxhbiBLYXkiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogImV4YW1wbGUtaGVhZGluZy0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICAgICAgY29udGVudDogIkNvZGUgRXhhbXBsZSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiY29kZS1leGFtcGxlLSIgKyBEYXRlLm5vdygpLAogICAgICAgICAgdHlwZTogImNvZGUiLAogICAgICAgICAgY29udGVudDogImNsYXNzIE1vZGVybldlYkFwcCBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KTtcbiAgfVxuICBcbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxufSIsCiAgICAgICAgICBtZXRhZGF0YTogeyBsYW5ndWFnZTogImphdmFzY3JpcHQiIH0KICAgICAgICB9CiAgICAgIF07CiAgICAgIGVkaXRvcnMuYXJ0aWNsZS5pbXBvcnRCbG9ja3MoYXJ0aWNsZUJsb2Nrcyk7CiAgICB9LCA1MDApOwogIH0KICBpZiAoZWRpdG9ycy5kcmFnRHJvcCkgewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGNvbnN0IGRyYWdCbG9ja3MgPSBbCiAgICAgICAgewogICAgICAgICAgaWQ6ICJkcmFnLXRpdGxlLSIgKyBEYXRlLm5vdygpLAogICAgICAgICAgdHlwZTogImhlYWRpbmctMSIsCiAgICAgICAgICBjb250ZW50OiAiRHJhZyAmIERyb3AgRGVtbyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiZHJhZy1pbnRyby0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICAgICAgY29udGVudDogIlRoaXMgZWRpdG9yIGRlbW9uc3RyYXRlcyBkcmFnIGFuZCBkcm9wIGZ1bmN0aW9uYWxpdHkuIFRyeSBkcmFnZ2luZyB0aGVzZSBibG9ja3MgYXJvdW5kISIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiZHJhZy1oZWFkaW5nLSIgKyBEYXRlLm5vdygpLAogICAgICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgICAgICBjb250ZW50OiAiSG93IEl0IFdvcmtzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJkcmFnLWxpc3QtIiArIERhdGUubm93KCksCiAgICAgICAgICB0eXBlOiAibGlzdCIsCiAgICAgICAgICBjb250ZW50OiAiSG92ZXIgb3ZlciBhbnkgYmxvY2sgdG8gc2VlIHRoZSBkcmFnIGhhbmRsZVxuQ2xpY2sgYW5kIGhvbGQgdGhlIGhhbmRsZSB0byBzdGFydCBkcmFnZ2luZ1xuRHJhZyB0byByZW9yZGVyIGJsb2Nrc1xuUmVsZWFzZSB0byBkcm9wIGluIHRoZSBuZXcgcG9zaXRpb24iLAogICAgICAgICAgbWV0YWRhdGE6IHsgbGlzdFR5cGU6ICJvcmRlcmVkIiB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogImRyYWctcXVvdGUtIiArIERhdGUubm93KCksCiAgICAgICAgICB0eXBlOiAicXVvdGUiLAogICAgICAgICAgY29udGVudDogIlRoZSBkcmFnIGFuZCBkcm9wIGZlYXR1cmUgbWFrZXMgaXQgZWFzeSB0byByZW9yZ2FuaXplIHlvdXIgY29udGVudCB3aXRob3V0IGN1dHRpbmcgYW5kIHBhc3RpbmcuIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJkcmFnLWRpdmlkZXItIiArIERhdGUubm93KCksCiAgICAgICAgICB0eXBlOiAiZGl2aWRlciIsCiAgICAgICAgICBjb250ZW50OiAiIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJkcmFnLWZvb3Rlci0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICAgICAgY29udGVudDogIk5vdGU6IERpdmlkZXIgYmxvY2tzIGNhbm5vdCBiZSBkcmFnZ2VkLCBidXQgb3RoZXIgYmxvY2tzIGNhbiBiZSBtb3ZlZCBhcm91bmQgdGhlbS4iCiAgICAgICAgfQogICAgICBdOwogICAgICBlZGl0b3JzLmRyYWdEcm9wLmltcG9ydEJsb2NrcyhkcmFnQmxvY2tzKTsKICAgIH0sIDYwMCk7CiAgfQp9Owp2YXIgZGVtb0Z1bmM0MCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCA1MDApKTsKICBjb25zdCBlZGl0b3JzID0gaW5pdGlhbGl6ZUVkaXRvcnMoZWxlbWVudEFyZyk7CiAgaWYgKGVkaXRvcnMucHJvZ3JhbW1hdGljKSB7CiAgICBzZXR1cFByb2dyYW1tYXRpY0RlbW8oZWxlbWVudEFyZywgZWRpdG9ycy5wcm9ncmFtbWF0aWMpOwogIH0KICBpZiAoZWRpdG9ycy5leHBvcnREZW1vKSB7CiAgICBzZXR1cEV4cG9ydERlbW8oZWxlbWVudEFyZywgZWRpdG9ycy5leHBvcnREZW1vKTsKICB9CiAgc2V0dXBPdXRwdXRGb3JtYXREZW1vKGVsZW1lbnRBcmcsIGVkaXRvcnMubWVldGluZywgZWRpdG9ycy5yZWNpcGUpOwogIHBvcHVsYXRlSW5pdGlhbENvbnRlbnQoZWRpdG9ycyk7CiAgY29uc29sZS5sb2coIldZU0lXWUcgRGVtbyBpbml0aWFsaXplZCB3aXRoIGVkaXRvcnM6IiwgT2JqZWN0LmtleXMoZWRpdG9ycykpOwp9fT4KICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMzJweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAzMnB4OwogICAgICB9CiAgICAgIAogICAgICAucGFuZWwtZGVzY3JpcHRpb24gewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC5wYW5lbC1kZXNjcmlwdGlvbiB7CiAgICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyMDBweCwgMWZyKSk7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLWljb24gewogICAgICAgIGNvbG9yOiAjMDA2NmNjOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIH0KCiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAuZmVhdHVyZS1pdGVtIHsKICAgICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIH0KICAgICAgICAuZmVhdHVyZS1pY29uIHsKICAgICAgICAgIGNvbG9yOiAjNGQ5NGZmOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLnNob3J0Y3V0cy1ib3ggewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMTAyLCAyMDQsIDAuMDUpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMTAyLCAyMDQsIDAuMik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgfQoKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC5zaG9ydGN1dHMtYm94IHsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNzcsIDE0OCwgMjU1LCAwLjEpOwogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc3LCAxNDgsIDI1NSwgMC4zKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5zaG9ydGN1dHMtdGl0bGUgewogICAgICAgIG1hcmdpbjogMCAwIDEycHggMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogIzAwNjZjYzsKICAgICAgfQoKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC5zaG9ydGN1dHMtdGl0bGUgewogICAgICAgICAgY29sb3I6ICM0ZDk0ZmY7CiAgICAgICAgfQogICAgICB9CgogICAgICAuc2hvcnRjdXRzLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTgwcHgsIDFmcikpOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuc2hvcnRjdXQtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgfQoKICAgICAgLnNob3J0Y3V0LWtleSB7CiAgICAgICAgYmFja2dyb3VuZDogI2YwZjBmMDsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogIzMzMzsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLnNob3J0Y3V0LWl0ZW0gewogICAgICAgICAgY29sb3I6ICNiYmI7CiAgICAgICAgfQogICAgICAgIC5zaG9ydGN1dC1rZXkgewogICAgICAgICAgYmFja2dyb3VuZDogIzMzMzsKICAgICAgICAgIGNvbG9yOiAjZGRkOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLm91dHB1dC1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMzIwcHgsIDFmcikpOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICB9CgogICAgICAub3V0cHV0LWNhcmQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KCiAgICAgIC5vdXRwdXQtYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAub3V0cHV0LXByZXZpZXcgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjA0KTsKICAgICAgICBjb2xvcjogdmFyKC0tZGVlcy1jb2xvci10ZXh0LCAjMGYxNzJhKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE1LCAyMywgNDIsIDAuMSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgTW9ubycsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1heC1oZWlnaHQ6IDI4MHB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbdGhlbWU9J2RhcmsnXSkgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1MCwgMjUwLCAyNTAsIDAuMDYpOwogICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTAsIDI1MCwgMjUwLCAwLjE1KTsKICAgICAgICBjb2xvcjogdmFyKC0tZGVlcy1jb2xvci10ZXh0LCAjZjRmNGY1KTsKICAgICAgfQoKICAgICAgLm91dHB1dC1wcmV2aWV3LnZpc2libGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAub3V0cHV0LWdyaWQgewogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICAudGlwcy1ib3ggewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjBmOGZmOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC50aXBzLWJveCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDc3LCAxNDgsIDI1NSwgMC4xKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC50aXBzLWJveCBzdHJvbmcgewogICAgICAgIGNvbG9yOiAjMDA2NmNjOwogICAgICB9CiAgICAgIAogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLnRpcHMtYm94IHN0cm9uZyB7CiAgICAgICAgICBjb2xvcjogIzRkOTRmZjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC50aXBzLWxpc3QgewogICAgICAgIG1hcmdpbjogOHB4IDAgMCAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLnRpcHMtbGlzdCBsaSB7CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgfQogICAgICAKICAgICAgLmJ1dHRvbi1ncm91cCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmOGY4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZThlOGU4OwogICAgICAgIGJvcmRlci1jb2xvcjogI2NjYzsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7CiAgICAgIH0KICAgICAgCiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAuZGVtby1idXR0b24gewogICAgICAgICAgYmFja2dyb3VuZDogIzMzMzsKICAgICAgICAgIGJvcmRlci1jb2xvcjogIzU1NTsKICAgICAgICAgIGNvbG9yOiAjZGRkOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZGVtby1idXR0b246aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogIzQ0NDsKICAgICAgICAgIGJvcmRlci1jb2xvcjogIzY2NjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjUwcHgsIDFmcikpOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZCB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLmJsb2NrcyB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDIsIDIwNCwgMC4xKTsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQuaHRtbCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSg3NiwgMTc1LCA4MCwgMC4xKTsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQubWFya2Rvd24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAxNTIsIDAsIDAuMSk7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLnN0YXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1NiwgMzksIDE3NiwgMC4xKTsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQgc3Ryb25nIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLmJsb2NrcyBzdHJvbmcgewogICAgICAgIGNvbG9yOiAjMDA2NmNjOwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZC5odG1sIHN0cm9uZyB7CiAgICAgICAgY29sb3I6ICM0Q0FGNTA7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLm1hcmtkb3duIHN0cm9uZyB7CiAgICAgICAgY29sb3I6ICNGRjk4MDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLnN0YXRlIHN0cm9uZyB7CiAgICAgICAgY29sb3I6ICM5QzI3QjA7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkIHAgewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gXHV7MUY2ODB9IE1vZGVybiBXWVNJV1lHIEVkaXRvciJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBBIHBvd2VyZnVsIGJsb2NrLWJhc2VkIGVkaXRvciB3aXRoIHNsYXNoIGNvbW1hbmRzLCBrZXlib2FyZCBzaG9ydGN1dHMsIGFuZCBtdWx0aXBsZSBvdXRwdXQgZm9ybWF0cy4gCiAgICAgICAgICBQZXJmZWN0IGZvciBjb250ZW50IGNyZWF0aW9uLCBibG9nIHBvc3RzLCBkb2N1bWVudGF0aW9uLCBhbmQgbW9yZS4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1ncmlkIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaXRlbSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmZWF0dXJlLWljb24iPuKckzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+U2xhc2ggY29tbWFuZHMgKC8pPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7inJM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPktleWJvYXJkIHNob3J0Y3V0czwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5CbG9jay1iYXNlZCBlZGl0aW5nPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7inJM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPkRyYWcgJiBkcm9wIHJlb3JkZXJpbmc8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaXRlbSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmZWF0dXJlLWljb24iPuKckzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+SFRNTCAmIE1hcmtkb3duIG91dHB1dDwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5EYXJrIG1vZGUgc3VwcG9ydDwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5Nb2JpbGUgcmVzcG9uc2l2ZTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICBpZD0iZWRpdG9yLWJhc2ljIgogICAgICAgICAgbGFiZWw9IlJpY2ggVGV4dCBFZGl0b3IiIAogICAgICAgICAgZGVzY3JpcHRpb249IlN0YXJ0IHR5cGluZyBvciB1c2UgJy8nIHRvIGluc2VydCBkaWZmZXJlbnQgYmxvY2sgdHlwZXMiCiAgICAgICAgICBvdXRwdXRGb3JtYXQ9Imh0bWwiCiAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgoKICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dHMtYm94Ij4KICAgICAgICAgIDxoNCBjbGFzcz0ic2hvcnRjdXRzLXRpdGxlIj7ijKjvuI8gS2V5Ym9hcmQgU2hvcnRjdXRzPC9oND4KICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0cy1ncmlkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+Lzwvc3Bhbj4gU2xhc2ggY29tbWFuZHMKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPiM8L3NwYW4+IEhlYWRpbmcgMQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+IyM8L3NwYW4+IEhlYWRpbmcgMgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+IyMjPC9zcGFuPiBIZWFkaW5nIDMKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPj48L3NwYW4+IFF1b3RlCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij5cYFxgXGA8L3NwYW4+IENvZGUgYmxvY2sKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPio8L3NwYW4+IG9yIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPi08L3NwYW4+IEJ1bGxldCBsaXN0CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij4xLjwvc3Bhbj4gTnVtYmVyZWQgbGlzdAogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+LS0tPC9zcGFuPiBEaXZpZGVyCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIyLiBcdXsxRjRERH0gQmxvZyBQb3N0IEV4YW1wbGUifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgUGVyZmVjdCBmb3IgY3JlYXRpbmcgcmljaCBjb250ZW50IHdpdGggbXVsdGlwbGUgYmxvY2sgdHlwZXMuIAogICAgICAgICAgVGhlIGVkaXRvciBwcmVzZXJ2ZXMgZm9ybWF0dGluZyBhbmQgcHJvdmlkZXMgYSBjbGVhbiBlZGl0aW5nIGV4cGVyaWVuY2UuCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICBpZD0iZWRpdG9yLWFydGljbGUiCiAgICAgICAgICBsYWJlbD0iQmxvZyBQb3N0IENvbnRlbnQiIAogICAgICAgICAgZGVzY3JpcHRpb249IldyaXRlIHlvdXIgYXJ0aWNsZSB1c2luZyB2YXJpb3VzIGZvcm1hdHRpbmcgb3B0aW9ucyIKICAgICAgICAgIG91dHB1dEZvcm1hdD0iaHRtbCIKICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIzLiBcdXsxRjUwMH0gRHJhZyAmIERyb3AgUmVvcmRlcmluZyJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBFYXNpbHkgcmVhcnJhbmdlIHlvdXIgY29udGVudCBibG9ja3MgYnkgZHJhZ2dpbmcgdGhlbS4gCiAgICAgICAgICBIb3ZlciBvdmVyIGFueSBibG9jayB0byByZXZlYWwgdGhlIGRyYWcgaGFuZGxlIG9uIHRoZSBsZWZ0IHNpZGUuCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICBpZD0iZWRpdG9yLWRyYWdkcm9wIgogICAgICAgICAgbGFiZWw9IkRyYWcgJiBEcm9wIERlbW8iIAogICAgICAgICAgZGVzY3JpcHRpb249IlRyeSBkcmFnZ2luZyBibG9ja3MgdG8gcmVvcmRlciB0aGVtIC0gaG92ZXIgdG8gc2VlIGRyYWcgaGFuZGxlcyIKICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0idGlwcy1ib3giPgogICAgICAgICAgPHN0cm9uZz7wn5KhIFRpcHM6PC9zdHJvbmc+CiAgICAgICAgICA8dWwgY2xhc3M9InRpcHMtbGlzdCI+CiAgICAgICAgICAgIDxsaT5Ib3ZlciBvdmVyIGFueSBibG9jayB0byBzZWUgdGhlIGRyYWcgaGFuZGxlICjii67ii64pIG9uIHRoZSBsZWZ0PC9saT4KICAgICAgICAgICAgPGxpPkNsaWNrIGFuZCBob2xkIHRoZSBkcmFnIGhhbmRsZSB0byBzdGFydCBkcmFnZ2luZzwvbGk+CiAgICAgICAgICAgIDxsaT5CbHVlIGluZGljYXRvcnMgc2hvdyB3aGVyZSB0aGUgYmxvY2sgd2lsbCBiZSBkcm9wcGVkPC9saT4KICAgICAgICAgICAgPGxpPkRpdmlkZXIgYmxvY2tzIGNhbm5vdCBiZSBkcmFnZ2VkPC9saT4KICAgICAgICAgICAgPGxpPlRoZSBlZGl0b3IgbWFpbnRhaW5zIGZvY3VzIG9uIHRoZSBtb3ZlZCBibG9jayBhZnRlciBkcm9wcGluZzwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNC4gXHV7MUY0REF9IFR1dG9yaWFsICYgRG9jdW1lbnRhdGlvbiJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDcmVhdGUgY29tcHJlaGVuc2l2ZSB0dXRvcmlhbHMgYW5kIGRvY3VtZW50YXRpb24gd2l0aCBjb2RlIGV4YW1wbGVzLCBsaXN0cywgYW5kIHN0cnVjdHVyZWQgY29udGVudC4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgIGlkPSJlZGl0b3ItdHV0b3JpYWwiCiAgICAgICAgICBsYWJlbD0iR2l0IFR1dG9yaWFsIiAKICAgICAgICAgIGRlc2NyaXB0aW9uPSJTdGVwLWJ5LXN0ZXAgZ3VpZGUgd2l0aCBjb21tYW5kcyBhbmQgZXhwbGFuYXRpb25zIgogICAgICAgICAgb3V0cHV0Rm9ybWF0PSJtYXJrZG93biIKICAgICAgICAgIHZhbHVlPSIjIEdpdCBUdXRvcmlhbCBmb3IgQmVnaW5uZXJzCgpHaXQgaXMgYSBkaXN0cmlidXRlZCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIHRoYXQgaGVscHMgeW91IHRyYWNrIGNoYW5nZXMgaW4geW91ciBjb2RlIG92ZXIgdGltZS4gVGhpcyB0dXRvcmlhbCB3aWxsIGd1aWRlIHlvdSB0aHJvdWdoIHRoZSBiYXNpY3MuCgojIyBQcmVyZXF1aXNpdGVzCgpCZWZvcmUgc3RhcnRpbmcsIGVuc3VyZSB5b3UgaGF2ZToKCi0gR2l0IGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbQotIEEgdGV4dCBlZGl0b3Igb3IgSURFCi0gQmFzaWMgY29tbWFuZCBsaW5lIGtub3dsZWRnZQoKIyMgR2V0dGluZyBTdGFydGVkCgojIyMgMS4gQ29uZmlndXJlIEdpdAoKRmlyc3QsIHNldCB1cCB5b3VyIGlkZW50aXR5OgoKXGBcYFxgYmFzaApnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSAmcXVvdDtZb3VyIE5hbWUmcXVvdDsKZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsICZxdW90O3lvdXIuZW1haWxAZXhhbXBsZS5jb20mcXVvdDsKXGBcYFxgCgojIyMgMi4gSW5pdGlhbGl6ZSBhIFJlcG9zaXRvcnkKCkNyZWF0ZSBhIG5ldyBHaXQgcmVwb3NpdG9yeToKClxgXGBcYGJhc2gKbWtkaXIgbXktcHJvamVjdApjZCBteS1wcm9qZWN0CmdpdCBpbml0ClxgXGBcYAoKIyMjIDMuIEJhc2ljIEdpdCBXb3JrZmxvdwoKIyMjIyBBZGRpbmcgRmlsZXMKCkNyZWF0ZSBhIGZpbGUgYW5kIGFkZCBpdCB0byBzdGFnaW5nOgoKXGBcYFxgYmFzaAplY2hvICZxdW90OyMgTXkgUHJvamVjdCZxdW90OyA+IFJFQURNRS5tZApnaXQgYWRkIFJFQURNRS5tZApcYFxgXGAKCiMjIyMgQ29tbWl0dGluZyBDaGFuZ2VzCgpcYFxgXGBiYXNoCmdpdCBjb21taXQgLW0gJnF1b3Q7SW5pdGlhbCBjb21taXQmcXVvdDsKXGBcYFxgCgo+ICoqQmVzdCBQcmFjdGljZToqKiBXcml0ZSBjbGVhciwgZGVzY3JpcHRpdmUgY29tbWl0IG1lc3NhZ2VzIHRoYXQgZXhwbGFpbiB3aGF0IGNoYW5nZXMgd2VyZSBtYWRlIGFuZCB3aHkuCgojIyMgNC4gV29ya2luZyB3aXRoIEJyYW5jaGVzCgpCcmFuY2hlcyBhbGxvdyB5b3UgdG8gd29yayBvbiBmZWF0dXJlcyBpbmRlcGVuZGVudGx5OgoKXGBcYFxgYmFzaAojIENyZWF0ZSBhbmQgc3dpdGNoIHRvIGEgbmV3IGJyYW5jaApnaXQgY2hlY2tvdXQgLWIgZmVhdHVyZS1icmFuY2gKCiMgTWFrZSBjaGFuZ2VzIGFuZCBjb21taXQKZ2l0IGFkZCAuCmdpdCBjb21taXQgLW0gJnF1b3Q7QWRkIG5ldyBmZWF0dXJlJnF1b3Q7CgojIFN3aXRjaCBiYWNrIHRvIG1haW4KZ2l0IGNoZWNrb3V0IG1haW4KCiMgTWVyZ2UgdGhlIGZlYXR1cmUKZ2l0IG1lcmdlIGZlYXR1cmUtYnJhbmNoClxgXGBcYAoKLS0tCgojIyBDb21tb24gQ29tbWFuZHMgUmVmZXJlbmNlCgp8IENvbW1hbmQgfCBEZXNjcmlwdGlvbiB8CnwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwKfCBcYGdpdCBzdGF0dXNcYCB8IENoZWNrIHJlcG9zaXRvcnkgc3RhdHVzIHwKfCBcYGdpdCBsb2dcYCB8IFZpZXcgY29tbWl0IGhpc3RvcnkgfAp8IFxgZ2l0IGRpZmZcYCB8IFNob3cgY2hhbmdlcyB8CnwgXGBnaXQgcHVsbFxgIHwgRmV0Y2ggYW5kIG1lcmdlIGNoYW5nZXMgfAp8IFxgZ2l0IHB1c2hcYCB8IFVwbG9hZCBjaGFuZ2VzIHRvIHJlbW90ZSB8CgojIyBOZXh0IFN0ZXBzCgoxLiBMZWFybiBhYm91dCByZW1vdGUgcmVwb3NpdG9yaWVzCjIuIEV4cGxvcmUgYWR2YW5jZWQgR2l0IGZlYXR1cmVzCjMuIFByYWN0aWNlIHdpdGggcmVhbCBwcm9qZWN0cwo0LiBDb250cmlidXRlIHRvIG9wZW4gc291cmNlCgoqKkhhcHB5IGNvZGluZyEqKiDwn5qAIgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjUuIFx1ezFGNTA0fSBPdXRwdXQgRm9ybWF0cyJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDaG9vc2UgYmV0d2VlbiBIVE1MIGFuZCBNYXJrZG93biBvdXRwdXQgZm9ybWF0cyBkZXBlbmRpbmcgb24geW91ciBuZWVkcy4gCiAgICAgICAgICBQZXJmZWN0IGZvciBzdGF0aWMgc2l0ZSBnZW5lcmF0b3JzLCBkb2N1bWVudGF0aW9uIHN5c3RlbXMsIG9yIGFueSBjb250ZW50IG1hbmFnZW1lbnQgd29ya2Zsb3cuCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1ncmlkIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1jYXJkIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgICAgICBpZD0iZWRpdG9yLW1lZXRpbmciCiAgICAgICAgICAgICAgbGFiZWw9Ik1lZXRpbmcgTm90ZXMiIAogICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJTdHJ1Y3R1cmVkIG1lZXRpbmcgZG9jdW1lbnRhdGlvbiIKICAgICAgICAgICAgICBvdXRwdXRGb3JtYXQ9Imh0bWwiCiAgICAgICAgICAgICAgdmFsdWU9IjxoMj5RNCBQbGFubmluZyBNZWV0aW5nPC9oMj48cD48c3Ryb25nPkRhdGU6PC9zdHJvbmc+IERlY2VtYmVyIDE1LCAyMDI0PGJyPjxzdHJvbmc+QXR0ZW5kZWVzOjwvc3Ryb25nPiBQcm9kdWN0IFRlYW0sIEVuZ2luZWVyaW5nLCBEZXNpZ248L3A+PGgzPkFnZW5kYSBJdGVtczwvaDM+PG9sPjxsaT5SZXZpZXcgUTMgYWNoaWV2ZW1lbnRzPC9saT48bGk+U2V0IFE0IG9iamVjdGl2ZXM8L2xpPjxsaT5SZXNvdXJjZSBhbGxvY2F0aW9uPC9saT48bGk+VGltZWxpbmUgZGlzY3Vzc2lvbjwvbGk+PC9vbD48aDM+S2V5IERlY2lzaW9uczwvaDM+PHVsPjxsaT5MYXVuY2ggbmV3IGRhc2hib2FyZCBmZWF0dXJlIGJ5IGVuZCBvZiBKYW51YXJ5PC9saT48bGk+SW5jcmVhc2UgZW5naW5lZXJpbmcgdGVhbSBieSAyIGRldmVsb3BlcnM8L2xpPjxsaT5JbXBsZW1lbnQgd2Vla2x5IGRlc2lnbiByZXZpZXdzPC9saT48L3VsPjxibG9ja3F1b3RlPiZxdW90O0ZvY3VzIG9uIHVzZXIgZXhwZXJpZW5jZSBpbXByb3ZlbWVudHMgYmFzZWQgb24gUTMgZmVlZGJhY2smcXVvdDsgLSBQcm9kdWN0IE1hbmFnZXI8L2Jsb2NrcXVvdGU+PGgzPkFjdGlvbiBJdGVtczwvaDM+PHVsPjxsaT5TYXJhaDogQ3JlYXRlIGRldGFpbGVkIHByb2plY3QgdGltZWxpbmU8L2xpPjxsaT5NaWtlOiBEcmFmdCB0ZWNobmljYWwgcmVxdWlyZW1lbnRzPC9saT48bGk+TGlzYTogU2NoZWR1bGUgdXNlciByZXNlYXJjaCBzZXNzaW9uczwvbGk+PC91bD48aHI+PHA+TmV4dCBtZWV0aW5nOiBKYW51YXJ5IDUsIDIwMjU8L3A+IgogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1hY3Rpb25zIj4KICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tc2hvdy1odG1sLW91dHB1dCIgY2xhc3M9ImRlbW8tYnV0dG9uIj5TaG93IEhUTUwgT3V0cHV0PC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8cHJlIGlkPSJvdXRwdXQtcHJldmlldy1odG1sIiBjbGFzcz0ib3V0cHV0LXByZXZpZXciIGFyaWEtbGl2ZT0icG9saXRlIj48L3ByZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJvdXRwdXQtY2FyZCI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICAgICAgaWQ9ImVkaXRvci1yZWNpcGUiCiAgICAgICAgICAgICAgbGFiZWw9IlJlY2lwZSBCbG9nIFBvc3QiIAogICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJGb29kIGJsb2cgd2l0aCBtaXhlZCBjb250ZW50IgogICAgICAgICAgICAgIG91dHB1dEZvcm1hdD0ibWFya2Rvd24iCiAgICAgICAgICAgICAgdmFsdWU9IiMgVWx0aW1hdGUgQ2hvY29sYXRlIENoaXAgQ29va2llcwoKVGhlcmUncyBub3RoaW5nIHF1aXRlIGxpa2UgdGhlIHNtZWxsIG9mIGZyZXNobHkgYmFrZWQgY2hvY29sYXRlIGNoaXAgY29va2llcy4gVGhpcyByZWNpcGUgaGFzIGJlZW4gcGVyZmVjdGVkIG92ZXIgeWVhcnMgb2YgdGVzdGluZyEKCiMjIEluZ3JlZGllbnRzCgotIDLCvCBjdXBzIGFsbC1wdXJwb3NlIGZsb3VyCi0gMSB0c3AgYmFraW5nIHNvZGEKLSAxIHRzcCBzYWx0Ci0gMSBjdXAgYnV0dGVyLCBzb2Z0ZW5lZAotIMK+IGN1cCBncmFudWxhdGVkIHN1Z2FyCi0gwr4gY3VwIHBhY2tlZCBicm93biBzdWdhcgotIDIgbGFyZ2UgZWdncwotIDIgdHNwIHZhbmlsbGEgZXh0cmFjdAotIDIgY3VwcyBjaG9jb2xhdGUgY2hpcHMKCiMjIEluc3RydWN0aW9ucwoKIyMjIFN0ZXAgMTogUHJlcGFyYXRpb24KClByZWhlYXQgeW91ciBvdmVuIHRvICoqMzc1wrBGICgxOTDCsEMpKiouIFRoaXMgdGVtcGVyYXR1cmUgaXMgY3J1Y2lhbCBmb3IgYWNoaWV2aW5nIHRoZSBwZXJmZWN0IHRleHR1cmUuCgojIyMgU3RlcCAyOiBNaXggRHJ5IEluZ3JlZGllbnRzCgpJbiBhIG1lZGl1bSBib3dsLCB3aGlzayB0b2dldGhlcjoKCjEuIEZsb3VyCjIuIEJha2luZyBzb2RhCjMuIFNhbHQKCiMjIyBTdGVwIDM6IENyZWFtIEJ1dHRlciBhbmQgU3VnYXJzCgpcYFxgXGAKQ3JlYW0gYnV0dGVyIGFuZCBzdWdhcnMgZm9yIDMtNCBtaW51dGVzCnVudGlsIGxpZ2h0IGFuZCBmbHVmZnkKXGBcYFxgCgo+ICoqUHJvIHRpcDoqKiBSb29tIHRlbXBlcmF0dXJlIGluZ3JlZGllbnRzIG1peCBiZXR0ZXIgYW5kIGNyZWF0ZSBhIG1vcmUgdW5pZm9ybSBkb3VnaC4KCiMjIyBTdGVwIDQ6IEFkZCBXZXQgSW5ncmVkaWVudHMKCkJlYXQgaW4gZWdncyBvbmUgYXQgYSB0aW1lLCB0aGVuIGFkZCB2YW5pbGxhIGV4dHJhY3QuCgojIyMgU3RlcCA1OiBDb21iaW5lIGFuZCBCYWtlCgpHcmFkdWFsbHkgYmxlbmQgaW4gZmxvdXIgbWl4dHVyZSwgdGhlbiBzdGlyIGluIGNob2NvbGF0ZSBjaGlwcy4gRHJvcCByb3VuZGVkIHRhYmxlc3Bvb25zIG9udG8gdW5ncmVhc2VkIGNvb2tpZSBzaGVldHMuCgotLS0KCioqQmFraW5nIHRpbWU6KiogOS0xMSBtaW51dGVzIG9yIHVudGlsIGdvbGRlbiBicm93bgoKKipZaWVsZDoqKiBBYm91dCA1IGRvemVuIGNvb2tpZXMiCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LWFjdGlvbnMiPgogICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1zaG93LW1hcmtkb3duLW91dHB1dCIgY2xhc3M9ImRlbW8tYnV0dG9uIj5TaG93IE1hcmtkb3duIE91dHB1dDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHByZSBpZD0ib3V0cHV0LXByZXZpZXctbWFya2Rvd24iIGNsYXNzPSJvdXRwdXQtcHJldmlldyIgYXJpYS1saXZlPSJwb2xpdGUiPjwvcHJlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI2LiBcdXsxRjNBOH0gQWR2YW5jZWQgRWRpdGluZyJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDcmVhdGUgY29tcGxleCBkb2N1bWVudHMgd2l0aCBtaXhlZCBjb250ZW50IHR5cGVzLiBUaGUgZWRpdG9yIGhhbmRsZXMgYWxsIGZvcm1hdHRpbmcgc2VhbWxlc3NseS4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgIGlkPSJlZGl0b3ItdGVjaG5pY2FsIgogICAgICAgICAgbGFiZWw9IlRlY2huaWNhbCBEb2N1bWVudGF0aW9uIiAKICAgICAgICAgIGRlc2NyaXB0aW9uPSJDcmVhdGUgdGVjaG5pY2FsIGRvY3Mgd2l0aCBjb2RlIGV4YW1wbGVzIGFuZCBzdHJ1Y3R1cmVkIGNvbnRlbnQiCiAgICAgICAgICB2YWx1ZT0iPGgxPkFQSSBEb2N1bWVudGF0aW9uPC9oMT48cD5XZWxjb21lIHRvIG91ciBBUEkgZG9jdW1lbnRhdGlvbi4gQmVsb3cgeW91J2xsIGZpbmQgZXhhbXBsZXMgb2YgaG93IHRvIHVzZSBvdXIgZW5kcG9pbnRzLjwvcD48aDI+QXV0aGVudGljYXRpb248L2gyPjxwPkFsbCBBUEkgcmVxdWVzdHMgcmVxdWlyZSBhdXRoZW50aWNhdGlvbiB1c2luZyBhbiBBUEkga2V5OjwvcD48cHJlPjxjb2RlPkF1dGhvcml6YXRpb246IEJlYXJlciBZT1VSX0FQSV9LRVk8L2NvZGU+PC9wcmU+PGgyPkVuZHBvaW50czwvaDI+PGgzPkdFVCAvdXNlcnM8L2gzPjxwPlJldHJpZXZlIGEgbGlzdCBvZiB1c2VycyBmcm9tIHRoZSBzeXN0ZW0uPC9wPjxwcmU+PGNvZGU+Y3VybCAtWCBHRVQgaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vdXNlcnMgXFwKICAtSCAmcXVvdDtBdXRob3JpemF0aW9uOiBCZWFyZXIgWU9VUl9BUElfS0VZJnF1b3Q7PC9jb2RlPjwvcHJlPjxibG9ja3F1b3RlPk5vdGU6IFJhdGUgbGltaXRpbmcgYXBwbGllcyB0byBhbGwgZW5kcG9pbnRzLiBZb3UgY2FuIG1ha2UgdXAgdG8gMTAwIHJlcXVlc3RzIHBlciBtaW51dGUuPC9ibG9ja3F1b3RlPjxoMz5QT1NUIC91c2VyczwvaDM+PHA+Q3JlYXRlIGEgbmV3IHVzZXIgaW4gdGhlIHN5c3RlbS48L3A+PHByZT48Y29kZT57CiAgJnF1b3Q7bmFtZSZxdW90OzogJnF1b3Q7Sm9obiBEb2UmcXVvdDssCiAgJnF1b3Q7ZW1haWwmcXVvdDs6ICZxdW90O2pvaG5AZXhhbXBsZS5jb20mcXVvdDssCiAgJnF1b3Q7cm9sZSZxdW90OzogJnF1b3Q7dXNlciZxdW90Owp9PC9jb2RlPjwvcHJlPjxocj48cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIG91ciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLjwvcD4iCiAgICAgICAgICBvdXRwdXRGb3JtYXQ9Imh0bWwiCiAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNy4gXHUyNjk5XHVGRTBGIEZvcm0gSW50ZWdyYXRpb24ifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgU2VhbWxlc3NseSBpbnRlZ3JhdGVzIHdpdGggZGVlcy1mb3JtIGZvciBjb21wbGV0ZSBmb3JtIHNvbHV0aW9ucy4gCiAgICAgICAgICBBbGwgc3RhbmRhcmQgZm9ybSBmZWF0dXJlcyBsaWtlIHZhbGlkYXRpb24sIHJlcXVpcmVkIGZpZWxkcywgYW5kIGRhdGEgYmluZGluZyB3b3JrIG91dCBvZiB0aGUgYm94LgogICAgICAgIDwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgbGFiZWw9IkFydGljbGUgVGl0bGUiIAogICAgICAgICAgICByZXF1aXJlZD0idHJ1ZSIKICAgICAgICAgICAgdmFsdWU9IkhvdyB0byBCdWlsZCBNb2Rlcm4gV2ViIEFwcGxpY2F0aW9ucyIKICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgICAgaWQ9ImVkaXRvci1mb3JtLWludGVncmF0aW9uIgogICAgICAgICAgICBsYWJlbD0iQXJ0aWNsZSBDb250ZW50IiAKICAgICAgICAgICAgZGVzY3JpcHRpb249IldyaXRlIHlvdXIgYXJ0aWNsZSBjb250ZW50IGhlcmUiCiAgICAgICAgICAgIHJlcXVpcmVkPSJ0cnVlIgogICAgICAgICAgICBvdXRwdXRGb3JtYXQ9Im1hcmtkb3duIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10YWdzCiAgICAgICAgICAgIGxhYmVsPSJUYWdzIgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iQWRkIHJlbGV2YW50IHRhZ3MgZm9yIHlvdXIgYXJ0aWNsZSIKICAgICAgICAgID48L2RlZXMtaW5wdXQtdGFncz4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjguIFx1ezFGOUU5fSBQcm9ncmFtbWF0aWMgQmxvY2sgQ3JlYXRpb24ifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgQ3JlYXRlIGNvbnRlbnQgcHJvZ3JhbW1hdGljYWxseSB1c2luZyB0aGUgYmxvY2sgQVBJIGZvciBkeW5hbWljIGRvY3VtZW50IGdlbmVyYXRpb24uCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcKICAgICAgICAgIGlkPSJlZGl0b3ItcHJvZ3JhbW1hdGljIgogICAgICAgICAgbGFiZWw9IlByb2dyYW1tYXRpY2FsbHkgR2VuZXJhdGVkIENvbnRlbnQiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhpcyBjb250ZW50IHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBpbXBvcnRCbG9ja3MgQVBJIgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWdlbmVyYXRlLXJlcG9ydCIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgR2VuZXJhdGUgUmVwb3J0CiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWdlbmVyYXRlLXJlY2lwZSIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgR2VuZXJhdGUgUmVjaXBlCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWNsZWFyLWVkaXRvciIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgQ2xlYXIgRWRpdG9yCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjkuIFx1ezFGNEU0fSBFeHBvcnQvSW1wb3J0IEZlYXR1cmVzIn0+CiAgICAgICAgPHAgY2xhc3M9InBhbmVsLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIFRoZSBXWVNJV1lHIGVkaXRvciBwcm92aWRlcyBtdWx0aXBsZSBleHBvcnQgZm9ybWF0cyBhbmQgbG9zc2xlc3Mgc2F2ZS9yZXN0b3JlIGNhcGFiaWxpdGllcyBmb3IgbWF4aW11bSBmbGV4aWJpbGl0eS4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZXhwb3J0LWluZm8tZ3JpZCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJleHBvcnQtaW5mby1jYXJkIGJsb2NrcyI+CiAgICAgICAgICAgIDxzdHJvbmc+TG9zc2xlc3MgQmxvY2tzPC9zdHJvbmc+CiAgICAgICAgICAgIDxwPkV4cG9ydCBhbmQgaW1wb3J0IHJhdyBibG9jayBzdHJ1Y3R1cmUgZm9yIHBlcmZlY3Qgcm91bmQtdHJpcCBlZGl0aW5nPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJleHBvcnQtaW5mby1jYXJkIGh0bWwiPgogICAgICAgICAgICA8c3Ryb25nPkhUTUwgRXhwb3J0PC9zdHJvbmc+CiAgICAgICAgICAgIDxwPkdldCBjbGVhbiwgc2VtYW50aWMgSFRNTCByZWdhcmRsZXNzIG9mIG91dHB1dCBmb3JtYXQgc2V0dGluZzwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZXhwb3J0LWluZm8tY2FyZCBtYXJrZG93biI+CiAgICAgICAgICAgIDxzdHJvbmc+TWFya2Rvd24gRXhwb3J0PC9zdHJvbmc+CiAgICAgICAgICAgIDxwPkV4cG9ydCBhcyBNYXJrZG93biBmb3IgZG9jcywgUkVBRE1FcywgYW5kIHN0YXRpYyBzaXRlczwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZXhwb3J0LWluZm8tY2FyZCBzdGF0ZSI+CiAgICAgICAgICAgIDxzdHJvbmc+U3RhdGUgTWFuYWdlbWVudDwvc3Ryb25nPgogICAgICAgICAgICA8cD5TYXZlIGFuZCByZXN0b3JlIGNvbXBsZXRlIGVkaXRvciBzdGF0ZSBpbmNsdWRpbmcgc2V0dGluZ3M8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC13eXNpd3lnCiAgICAgICAgICBpZD0iZWRpdG9yLWV4cG9ydCIKICAgICAgICAgIGxhYmVsPSJFeHBvcnQgRGVtbyBFZGl0b3IiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVHJ5IHRoZSBleHBvcnQgYnV0dG9ucyBiZWxvdyB0byBzZWUgZGlmZmVyZW50IG91dHB1dCBmb3JtYXRzIgogICAgICAgICAgdmFsdWU9IjxoMT5Tb2Z0d2FyZSBSZWxlYXNlIE5vdGVzPC9oMT48cD48c3Ryb25nPlZlcnNpb24gMi41LjA8L3N0cm9uZz4gLSBSZWxlYXNlZCBEZWNlbWJlciAxNSwgMjAyNDwvcD48aDI+8J+OiSBOZXcgRmVhdHVyZXM8L2gyPjx1bD48bGk+QWRkZWQgZGFyayBtb2RlIHN1cHBvcnQgYWNyb3NzIGFsbCBjb21wb25lbnRzPC9saT48bGk+SW1wbGVtZW50ZWQgcmVhbC10aW1lIGNvbGxhYm9yYXRpb24gZmVhdHVyZXM8L2xpPjxsaT5OZXcgZGFzaGJvYXJkIGFuYWx5dGljcyB3aWRnZXRzPC9saT48bGk+RXhwb3J0IGZ1bmN0aW9uYWxpdHkgZm9yIGFsbCByZXBvcnQgdHlwZXM8L2xpPjwvdWw+PGgyPvCfkJsgQnVnIEZpeGVzPC9oMj48dWw+PGxpPkZpeGVkIG1lbW9yeSBsZWFrIGluIGRhdGEgcHJvY2Vzc2luZyBtb2R1bGU8L2xpPjxsaT5SZXNvbHZlZCBhdXRoZW50aWNhdGlvbiB0aW1lb3V0IGlzc3VlczwvbGk+PGxpPkNvcnJlY3RlZCB0aW1lem9uZSBoYW5kbGluZyBpbiBzY2hlZHVsZWQgdGFza3M8L2xpPjwvdWw+PGgyPuKaoSBQZXJmb3JtYW5jZSBJbXByb3ZlbWVudHM8L2gyPjxibG9ja3F1b3RlPlBhZ2UgbG9hZCB0aW1lcyByZWR1Y2VkIGJ5IDQwJSB0aHJvdWdoIGxhenkgbG9hZGluZyBhbmQgY29kZSBzcGxpdHRpbmc8L2Jsb2NrcXVvdGU+PGgyPvCflKcgVGVjaG5pY2FsIERldGFpbHM8L2gyPjxwcmU+PGNvZGU+Ly8gTmV3IEFQSSBlbmRwb2ludCBmb3IgYmF0Y2ggb3BlcmF0aW9ucwpQT1NUIC9hcGkvdjIvYmF0Y2gKewogICZxdW90O29wZXJhdGlvbnMmcXVvdDs6IFsKICAgIHsgJnF1b3Q7bWV0aG9kJnF1b3Q7OiAmcXVvdDtHRVQmcXVvdDssICZxdW90O3BhdGgmcXVvdDs6ICZxdW90Oy91c2Vycy8xMjMmcXVvdDsgfSwKICAgIHsgJnF1b3Q7bWV0aG9kJnF1b3Q7OiAmcXVvdDtQVVQmcXVvdDssICZxdW90O3BhdGgmcXVvdDs6ICZxdW90Oy9zZXR0aW5ncyZxdW90OywgJnF1b3Q7Ym9keSZxdW90Ozogey4uLn0gfQogIF0KfTwvY29kZT48L3ByZT48aDI+8J+SoSBNaWdyYXRpb24gR3VpZGU8L2gyPjxvbD48bGk+VXBkYXRlIHlvdXIgZGVwZW5kZW5jaWVzIHRvIHRoZSBsYXRlc3QgdmVyc2lvbnM8L2xpPjxsaT5SdW4gZGF0YWJhc2UgbWlncmF0aW9uczogPGNvZGU+bnBtIHJ1biBtaWdyYXRlPC9jb2RlPjwvbGk+PGxpPkNsZWFyIGNhY2hlOiA8Y29kZT5ucG0gcnVuIGNhY2hlOmNsZWFyPC9jb2RlPjwvbGk+PGxpPlJlc3RhcnQgYWxsIHNlcnZpY2VzPC9saT48L29sPjxocj48cD5Gb3IgcXVlc3Rpb25zIG9yIGlzc3VlcywgcGxlYXNlIGNvbnRhY3QgdGhlIGRldmVsb3BtZW50IHRlYW0gb3IgZmlsZSBhIHRpY2tldCBpbiBvdXIgaXNzdWUgdHJhY2tlci48L3A+IgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWV4cG9ydC1ibG9ja3MiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+CiAgICAgICAgICAgIEV4cG9ydCBCbG9ja3MKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tZXhwb3J0LWh0bWwiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+CiAgICAgICAgICAgIEV4cG9ydCBhcyBIVE1MCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWV4cG9ydC1tYXJrZG93biIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgRXhwb3J0IGFzIE1hcmtkb3duCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXNhdmUtc3RhdGUiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+CiAgICAgICAgICAgIFNhdmUgU3RhdGUKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tcmVzdG9yZS1zdGF0ZSIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgUmVzdG9yZSBTdGF0ZQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5zaG9ydGN1dHMuanMKdmFyIFd5c2l3eWdTaG9ydGN1dHMgPSBjbGFzcyB7CiAgc3RhdGljIEhFQURJTkdfUEFUVEVSTlMgPSBbCiAgICB7IHBhdHRlcm46IC9eI1tcc1x1MDBBMF0kLywgdHlwZTogImhlYWRpbmctMSIgfSwKICAgIHsgcGF0dGVybjogL14jI1tcc1x1MDBBMF0kLywgdHlwZTogImhlYWRpbmctMiIgfSwKICAgIHsgcGF0dGVybjogL14jIyNbXHNcdTAwQTBdJC8sIHR5cGU6ICJoZWFkaW5nLTMiIH0KICBdOwogIHN0YXRpYyBMSVNUX1BBVFRFUk5TID0gWwogICAgeyBwYXR0ZXJuOiAvXlsqLV1bXHNcdTAwQTBdJC8sIHR5cGU6ICJidWxsZXQiIH0sCiAgICB7IHBhdHRlcm46IC9eKFxkKylcLltcc1x1MDBBMF0kLywgdHlwZTogIm9yZGVyZWQiIH0sCiAgICB7IHBhdHRlcm46IC9eKFxkKylcKVtcc1x1MDBBMF0kLywgdHlwZTogIm9yZGVyZWQiIH0KICBdOwogIHN0YXRpYyBRVU9URV9QQVRURVJOID0gL14+W1xzXHUwMEEwXSQvOwogIHN0YXRpYyBDT0RFX1BBVFRFUk4gPSAvXmBgYCQvOwogIHN0YXRpYyBESVZJREVSX1BBVFRFUk5TID0gWyItLS0iLCAiKioqIiwgIl9fXyJdOwogIHN0YXRpYyBjaGVja0hlYWRpbmdTaG9ydGN1dChjb250ZW50MykgewogICAgZm9yIChjb25zdCB7IHBhdHRlcm4sIHR5cGU6IHR5cGU1IH0gb2YgdGhpcy5IRUFESU5HX1BBVFRFUk5TKSB7CiAgICAgIGlmIChwYXR0ZXJuLnRlc3QoY29udGVudDMpKSB7CiAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZTUgfTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIHN0YXRpYyBjaGVja0xpc3RTaG9ydGN1dChjb250ZW50MykgewogICAgZm9yIChjb25zdCB7IHBhdHRlcm4sIHR5cGU6IHR5cGU1IH0gb2YgdGhpcy5MSVNUX1BBVFRFUk5TKSB7CiAgICAgIGlmIChwYXR0ZXJuLnRlc3QoY29udGVudDMpKSB7CiAgICAgICAgcmV0dXJuIHsgdHlwZTogImxpc3QiLCBsaXN0VHlwZTogdHlwZTUgfTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIHN0YXRpYyBjaGVja1F1b3RlU2hvcnRjdXQoY29udGVudDMpIHsKICAgIHJldHVybiB0aGlzLlFVT1RFX1BBVFRFUk4udGVzdChjb250ZW50Myk7CiAgfQogIHN0YXRpYyBjaGVja0NvZGVTaG9ydGN1dChjb250ZW50MykgewogICAgcmV0dXJuIHRoaXMuQ09ERV9QQVRURVJOLnRlc3QoY29udGVudDMpOwogIH0KICBzdGF0aWMgY2hlY2tEaXZpZGVyU2hvcnRjdXQoY29udGVudDMpIHsKICAgIHJldHVybiB0aGlzLkRJVklERVJfUEFUVEVSTlMuaW5jbHVkZXMoY29udGVudDMpOwogIH0KICBzdGF0aWMgZ2V0U2xhc2hNZW51SXRlbXMoKSB7CiAgICByZXR1cm4gWwogICAgICB7IHR5cGU6ICJwYXJhZ3JhcGgiLCBsYWJlbDogIlBhcmFncmFwaCIsIGljb246ICJsdWNpZGU6cGlsY3JvdyIgfSwKICAgICAgeyB0eXBlOiAiaGVhZGluZy0xIiwgbGFiZWw6ICJIZWFkaW5nIDEiLCBpY29uOiAibHVjaWRlOmhlYWRpbmcxIiB9LAogICAgICB7IHR5cGU6ICJoZWFkaW5nLTIiLCBsYWJlbDogIkhlYWRpbmcgMiIsIGljb246ICJsdWNpZGU6aGVhZGluZzIiIH0sCiAgICAgIHsgdHlwZTogImhlYWRpbmctMyIsIGxhYmVsOiAiSGVhZGluZyAzIiwgaWNvbjogImx1Y2lkZTpoZWFkaW5nMyIgfSwKICAgICAgeyB0eXBlOiAicXVvdGUiLCBsYWJlbDogIlF1b3RlIiwgaWNvbjogImx1Y2lkZTpxdW90ZSIgfSwKICAgICAgeyB0eXBlOiAiY29kZSIsIGxhYmVsOiAiQ29kZSBCbG9jayIsIGljb246ICJsdWNpZGU6ZmlsZUNvZGUiIH0sCiAgICAgIHsgdHlwZTogImxpc3QiLCBsYWJlbDogIkJ1bGxldCBMaXN0IiwgaWNvbjogImx1Y2lkZTpsaXN0IiB9LAogICAgICB7IHR5cGU6ICJpbWFnZSIsIGxhYmVsOiAiSW1hZ2UiLCBpY29uOiAibHVjaWRlOmltYWdlIiB9LAogICAgICB7IHR5cGU6ICJkaXZpZGVyIiwgbGFiZWw6ICJEaXZpZGVyIiwgaWNvbjogImx1Y2lkZTptaW51cyIgfSwKICAgICAgeyB0eXBlOiAieW91dHViZSIsIGxhYmVsOiAiWW91VHViZSIsIGljb246ICJsdWNpZGU6eW91dHViZSIgfSwKICAgICAgeyB0eXBlOiAibWFya2Rvd24iLCBsYWJlbDogIk1hcmtkb3duIiwgaWNvbjogImx1Y2lkZTpmaWxlVGV4dCIgfSwKICAgICAgeyB0eXBlOiAiaHRtbCIsIGxhYmVsOiAiSFRNTCIsIGljb246ICJsdWNpZGU6Y29kZSIgfSwKICAgICAgeyB0eXBlOiAiYXR0YWNobWVudCIsIGxhYmVsOiAiRmlsZSBBdHRhY2htZW50IiwgaWNvbjogImx1Y2lkZTpwYXBlcmNsaXAiIH0KICAgIF07CiAgfQogIHN0YXRpYyBnZW5lcmF0ZUJsb2NrSWQoKSB7CiAgICByZXR1cm4gYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YDsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2RlZXMtc2xhc2gtbWVudS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2RlZXNfaWNvbigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU2MSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNjIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNTbGFzaE1lbnUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNsYXNoLW1lbnUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF92aXNpYmxlX2RlY29yYXRvcnM7CiAgbGV0IF92aXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZGVjb3JhdG9yczsKICBsZXQgX3Bvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlcl9kZWNvcmF0b3JzOwogIGxldCBfZmlsdGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsdGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZEluZGV4X2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZEluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVudVpJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfbWVudVpJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1NsYXNoTWVudTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92aXNpYmxlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9wb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZmlsdGVyX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9zZWxlY3RlZEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9tZW51WkluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTYxKHRoaXMsIG51bGwsIF92aXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZpc2libGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmlzaWJsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92aXNpYmxlX2luaXRpYWxpemVycywgX3Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MSh0aGlzLCBudWxsLCBfcG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicG9zaXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wb3NpdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wb3NpdGlvbl9pbml0aWFsaXplcnMsIF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYxKHRoaXMsIG51bGwsIF9maWx0ZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWx0ZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsdGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsdGVyX2luaXRpYWxpemVycywgX2ZpbHRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYxKHRoaXMsIG51bGwsIF9zZWxlY3RlZEluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWRJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZEluZGV4X2luaXRpYWxpemVycywgX3NlbGVjdGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MSh0aGlzLCBudWxsLCBfbWVudVpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51WkluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZW51WkluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1lbnVaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVaSW5kZXggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWVudVpJbmRleF9pbml0aWFsaXplcnMsIF9tZW51WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU2xhc2hNZW51MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgaW5zdGFuY2U7CiAgICBzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7CiAgICAgIGlmICghRGVlc1NsYXNoTWVudTIuaW5zdGFuY2UpIHsKICAgICAgICBEZWVzU2xhc2hNZW51Mi5pbnN0YW5jZSA9IG5ldyBEZWVzU2xhc2hNZW51MigpOwogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoRGVlc1NsYXNoTWVudTIuaW5zdGFuY2UpOwogICAgICB9CiAgICAgIHJldHVybiBEZWVzU2xhc2hNZW51Mi5pbnN0YW5jZTsKICAgIH0KICAgICN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF92aXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgZ2V0IHZpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Mih0aGlzLCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjIodGhpcywgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgeyB4OiAwLCB5OiAwIH0pKTsKICAgIGdldCBwb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcG9zaXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZmlsdGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Mih0aGlzLCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF9maWx0ZXJfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGZpbHRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2ZpbHRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZpbHRlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsdGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjIodGhpcywgX2ZpbHRlcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjIodGhpcywgX3NlbGVjdGVkSW5kZXhfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgc2VsZWN0ZWRJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZEluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWVudVpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjIodGhpcywgX3NlbGVjdGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF9tZW51WkluZGV4X2luaXRpYWxpemVycywgMWUzKSk7CiAgICBnZXQgbWVudVpJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21lbnVaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtZW51WkluZGV4KHZhbHVlMikgewogICAgICB0aGlzLiNtZW51WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjYWxsYmFjayA9IChfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF9tZW51WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzA5MDkwYiIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA2KTsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgICAgbWluLXdpZHRoOiAyMjBweDsKICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGFuaW1hdGlvbjogZmFkZUluU2NhbGUgMC4xNXMgZWFzZS1vdXQ7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgZmFkZUluU2NhbGUgewogICAgICAgIGZyb20gewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCkgdHJhbnNsYXRlWSgtMnB4KTsKICAgICAgICB9CiAgICAgICAgdG8gewogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlWSgwKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0gewogICAgICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW06aG92ZXIsCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0gLmljb24gewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW06aG92ZXIgLmljb24sCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgLmljb24gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICBpZiAoIXRoaXMudmlzaWJsZSkKICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgdGhpcy5zdHlsZS56SW5kZXggPSB0aGlzLm1lbnVaSW5kZXgudG9TdHJpbmcoKTsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gdGhpcy5nZXRGaWx0ZXJlZE1lbnVJdGVtcygpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9InNsYXNoLW1lbnUiIAogICAgICAgIHN0eWxlPSJsZWZ0OiAke3RoaXMucG9zaXRpb24ueH1weDsgdG9wOiAke3RoaXMucG9zaXRpb24ueX1weDsiCiAgICAgICAgdGFiaW5kZXg9Ii0xIgogICAgICAgIGRhdGEtbWVudS10eXBlPSJzbGFzaCIKICAgICAgPgogICAgICAgICR7bWVudUl0ZW1zLm1hcCgoaXRlbSwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJzbGFzaC1tZW51LWl0ZW0gJHtpbmRleDIgPT09IHRoaXMuc2VsZWN0ZWRJbmRleCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgIGRhdGEtaXRlbS10eXBlPSIke2l0ZW0udHlwZX0iCiAgICAgICAgICAgIGRhdGEtaXRlbS1pbmRleD0iJHtpbmRleDJ9IgogICAgICAgICAgPgogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJpY29uIiAuaWNvbj0iJHtpdGVtLmljb259IiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8c3Bhbj4ke2l0ZW0ubGFiZWx9PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGdldEZpbHRlcmVkTWVudUl0ZW1zKCkgewogICAgICBjb25zdCBhbGxJdGVtcyA9IFd5c2l3eWdTaG9ydGN1dHMuZ2V0U2xhc2hNZW51SXRlbXMoKTsKICAgICAgcmV0dXJuIGFsbEl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gdGhpcy5maWx0ZXIgPT09ICIiIHx8IGl0ZW0ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmZpbHRlci50b0xvd2VyQ2FzZSgpKSk7CiAgICB9CiAgICBzZWxlY3RJdGVtKHR5cGU1KSB7CiAgICAgIGlmICh0aGlzLmNhbGxiYWNrKSB7CiAgICAgICAgdGhpcy5jYWxsYmFjayh0eXBlNSk7CiAgICAgIH0KICAgICAgdGhpcy5oaWRlKCk7CiAgICB9CiAgICBzaG93KHBvc2l0aW9uMywgY2FsbGJhY2spIHsKICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uMzsKICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgICB0aGlzLmZpbHRlciA9ICIiOwogICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAwOwogICAgICB0aGlzLm1lbnVaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMsIHRoaXMubWVudVpJbmRleCk7CiAgICAgIHRoaXMuc3R5bGUuekluZGV4ID0gdGhpcy5tZW51WkluZGV4LnRvU3RyaW5nKCk7CiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAgICB9CiAgICBoaWRlKCkgewogICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTsKICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7CiAgICAgIHRoaXMuZmlsdGVyID0gIiI7CiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnVucmVnaXN0ZXIodGhpcyk7CiAgICB9CiAgICB1cGRhdGVGaWx0ZXIoZmlsdGVyMikgewogICAgICB0aGlzLmZpbHRlciA9IGZpbHRlcjI7CiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7CiAgICB9CiAgICBuYXZpZ2F0ZShkaXJlY3Rpb24pIHsKICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEZpbHRlcmVkTWVudUl0ZW1zKCk7CiAgICAgIGlmIChkaXJlY3Rpb24gPT09ICJkb3duIikgewogICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9ICh0aGlzLnNlbGVjdGVkSW5kZXggKyAxKSAlIGl0ZW1zLmxlbmd0aDsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkSW5kZXggPT09IDAgPyBpdGVtcy5sZW5ndGggLSAxIDogdGhpcy5zZWxlY3RlZEluZGV4IC0gMTsKICAgICAgfQogICAgfQogICAgc2VsZWN0Q3VycmVudCgpIHsKICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEZpbHRlcmVkTWVudUl0ZW1zKCk7CiAgICAgIGlmIChpdGVtc1t0aGlzLnNlbGVjdGVkSW5kZXhdKSB7CiAgICAgICAgdGhpcy5zZWxlY3RJdGVtKGl0ZW1zW3RoaXMuc2VsZWN0ZWRJbmRleF0udHlwZSk7CiAgICAgIH0KICAgIH0KICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCAoZTExKSA9PiB7CiAgICAgICAgY29uc3QgbWVudSA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnNsYXNoLW1lbnUiKTsKICAgICAgICBpZiAobWVudSAmJiBtZW51LmNvbnRhaW5zKGUxMS50YXJnZXQpKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLnNoYWRvd1Jvb3Q/LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgIGNvbnN0IHRhcmdldCA9IGUxMS50YXJnZXQ7CiAgICAgICAgY29uc3QgbWVudUl0ZW0gPSB0YXJnZXQuY2xvc2VzdCgiLnNsYXNoLW1lbnUtaXRlbSIpOwogICAgICAgIGlmIChtZW51SXRlbSkgewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICBjb25zdCBpdGVtVHlwZSA9IG1lbnVJdGVtLmdldEF0dHJpYnV0ZSgiZGF0YS1pdGVtLXR5cGUiKTsKICAgICAgICAgIGlmIChpdGVtVHlwZSkgewogICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oaXRlbVR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCB0YXJnZXQgPSBlMTEudGFyZ2V0OwogICAgICAgIGNvbnN0IG1lbnVJdGVtID0gdGFyZ2V0LmNsb3Nlc3QoIi5zbGFzaC1tZW51LWl0ZW0iKTsKICAgICAgICBpZiAobWVudUl0ZW0pIHsKICAgICAgICAgIGNvbnN0IGluZGV4MiA9IHBhcnNlSW50KG1lbnVJdGVtLmdldEF0dHJpYnV0ZSgiZGF0YS1pdGVtLWluZGV4IikgfHwgIjAiLCAxMCk7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDI7CiAgICAgICAgfQogICAgICB9LCB0cnVlKTsKICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCBtZW51ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2xhc2gtbWVudSIpOwogICAgICAgIGlmIChtZW51ICYmIG1lbnUuY29udGFpbnMoZTExLnRhcmdldCkpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIH0KICAgICAgfSwgdHJ1ZSk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczYyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU2xhc2hNZW51MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuc2VsZWN0aW9uLmpzCnZhciBXeXNpd3lnU2VsZWN0aW9uID0gY2xhc3MgewogIC8qKgogICAqIEdldHMgc2VsZWN0aW9uIGluZm8gdGhhdCB3b3JrcyBhY3Jvc3MgU2hhZG93IERPTSBib3VuZGFyaWVzCiAgICogQHBhcmFtIHNoYWRvd1Jvb3RzIC0gU2hhZG93IHJvb3RzIHRvIGluY2x1ZGUgaW4gdGhlIHNlbGVjdGlvbiBzZWFyY2gKICAgKi8KICBzdGF0aWMgZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cykgewogICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgY29uc29sZS5sb2coIld5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyAtIHNlbGVjdGlvbjoiLCBzZWxlY3Rpb24sICJyYW5nZUNvdW50OiIsIHNlbGVjdGlvbj8ucmFuZ2VDb3VudCk7CiAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgcmV0dXJuIG51bGw7CiAgICBpZiAoImdldENvbXBvc2VkUmFuZ2VzIiBpbiBzZWxlY3Rpb24gJiYgdHlwZW9mIHNlbGVjdGlvbi5nZXRDb21wb3NlZFJhbmdlcyA9PT0gImZ1bmN0aW9uIikgewogICAgICBjb25zb2xlLmxvZygiVXNpbmcgZ2V0Q29tcG9zZWRSYW5nZXMgd2l0aCIsIHNoYWRvd1Jvb3RzLmxlbmd0aCwgInNoYWRvdyByb290cyIpOwogICAgICB0cnkgewogICAgICAgIGNvbnN0IHJhbmdlcyA9IHNlbGVjdGlvbi5nZXRDb21wb3NlZFJhbmdlcyh7IHNoYWRvd1Jvb3RzIH0pOwogICAgICAgIGNvbnNvbGUubG9nKCJnZXRDb21wb3NlZFJhbmdlcyByZXR1cm5lZCIsIHJhbmdlcy5sZW5ndGgsICJyYW5nZXMiKTsKICAgICAgICBpZiAocmFuZ2VzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IHJhbmdlc1swXTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyOiByYW5nZTIuc3RhcnRDb250YWluZXIsCiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiByYW5nZTIuc3RhcnRPZmZzZXQsCiAgICAgICAgICAgIGVuZENvbnRhaW5lcjogcmFuZ2UyLmVuZENvbnRhaW5lciwKICAgICAgICAgICAgZW5kT2Zmc2V0OiByYW5nZTIuZW5kT2Zmc2V0LAogICAgICAgICAgICBjb2xsYXBzZWQ6IHJhbmdlMi5jb2xsYXBzZWQKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUud2FybigiZ2V0Q29tcG9zZWRSYW5nZXMgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gZ2V0UmFuZ2VBdDoiLCBlcnJvcik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGNvbnNvbGUubG9nKCJnZXRDb21wb3NlZFJhbmdlcyBub3QgYXZhaWxhYmxlLCB1c2luZyBmYWxsYmFjayIpOwogICAgfQogICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgcmV0dXJuIHsKICAgICAgICBzdGFydENvbnRhaW5lcjogcmFuZ2UyLnN0YXJ0Q29udGFpbmVyLAogICAgICAgIHN0YXJ0T2Zmc2V0OiByYW5nZTIuc3RhcnRPZmZzZXQsCiAgICAgICAgZW5kQ29udGFpbmVyOiByYW5nZTIuZW5kQ29udGFpbmVyLAogICAgICAgIGVuZE9mZnNldDogcmFuZ2UyLmVuZE9mZnNldCwKICAgICAgICBjb2xsYXBzZWQ6IHJhbmdlMi5jb2xsYXBzZWQKICAgICAgfTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICAvKioKICAgKiBDaGVja3MgaWYgYSBzZWxlY3Rpb24gaXMgd2l0aGluIGEgc3BlY2lmaWMgZWxlbWVudCAoY29uc2lkZXJpbmcgU2hhZG93IERPTSkKICAgKi8KICBzdGF0aWMgaXNTZWxlY3Rpb25JbkVsZW1lbnQoZWxlbWVudDQsIHNoYWRvd1Jvb3QpIHsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBzaGFkb3dSb290ID8gdGhpcy5nZXRTZWxlY3Rpb25JbmZvKHNoYWRvd1Jvb3QpIDogdGhpcy5nZXRTZWxlY3Rpb25JbmZvKCk7CiAgICBpZiAoIXNlbGVjdGlvbkluZm8pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBlbGVtZW50NC5jb250YWlucyhzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSB8fCBlbGVtZW50NC5jb250YWlucyhzZWxlY3Rpb25JbmZvLmVuZENvbnRhaW5lcik7CiAgfQogIC8qKgogICAqIEdldHMgdGhlIHNlbGVjdGVkIHRleHQgYWNyb3NzIFNoYWRvdyBET00gYm91bmRhcmllcwogICAqLwogIHN0YXRpYyBnZXRTZWxlY3RlZFRleHQoKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICByZXR1cm4gc2VsZWN0aW9uID8gc2VsZWN0aW9uLnRvU3RyaW5nKCkgOiAiIjsKICB9CiAgLyoqCiAgICogQ3JlYXRlcyBhIHJhbmdlIGZyb20gc2VsZWN0aW9uIGluZm8KICAgKi8KICBzdGF0aWMgY3JlYXRlUmFuZ2VGcm9tSW5mbyhpbmZvKSB7CiAgICBjb25zdCByYW5nZTIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgcmFuZ2UyLnNldFN0YXJ0KGluZm8uc3RhcnRDb250YWluZXIsIGluZm8uc3RhcnRPZmZzZXQpOwogICAgcmFuZ2UyLnNldEVuZChpbmZvLmVuZENvbnRhaW5lciwgaW5mby5lbmRPZmZzZXQpOwogICAgcmV0dXJuIHJhbmdlMjsKICB9CiAgLyoqCiAgICogU2V0cyBzZWxlY3Rpb24gZnJvbSBhIHJhbmdlICh3b3JrcyB3aXRoIFNoYWRvdyBET00pCiAgICovCiAgc3RhdGljIHNldFNlbGVjdGlvbkZyb21SYW5nZShyYW5nZTIpIHsKICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgIGlmIChzZWxlY3Rpb24pIHsKICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UyKTsKICAgIH0KICB9CiAgLyoqCiAgICogR2V0cyBjdXJzb3IgcG9zaXRpb24gcmVsYXRpdmUgdG8gYSBzcGVjaWZpYyBlbGVtZW50CiAgICovCiAgc3RhdGljIGdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KGVsZW1lbnQ0LCAuLi5zaGFkb3dSb290cykgewogICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IHNoYWRvd1Jvb3RzLmxlbmd0aCA+IDAgPyB0aGlzLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpIDogdGhpcy5nZXRTZWxlY3Rpb25JbmZvKCk7CiAgICBpZiAoIXNlbGVjdGlvbkluZm8gfHwgIXNlbGVjdGlvbkluZm8uY29sbGFwc2VkKQogICAgICByZXR1cm4gbnVsbDsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgIHJhbmdlMi5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudDQpOwogICAgICBjb25zdCBpc0NvbnRhaW5lZCA9IHRoaXMuY29udGFpbnNBY3Jvc3NTaGFkb3dET00oZWxlbWVudDQsIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpOwogICAgICBpZiAoaXNDb250YWluZWQpIHsKICAgICAgICByYW5nZTIuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgICAgIGNvbnN0IHBvc2l0aW9uMyA9IHJhbmdlMi50b1N0cmluZygpLmxlbmd0aDsKICAgICAgICByZXR1cm4gcG9zaXRpb24zOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHRleHQ5ID0gZWxlbWVudDQudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uVGV4dCA9IHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgaWYgKHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQgPT09IDApIHsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCA9PT0gc2VsZWN0aW9uVGV4dC5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiB0ZXh0OS5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIGNvbnNvbGUud2FybigiU2VsZWN0aW9uIGNvbnRhaW5lciBub3Qgd2l0aGluIGVsZW1lbnQsIHVzaW5nIHRleHQgbWF0Y2hpbmcgZmFsbGJhY2siKTsKICAgICAgICByZXR1cm4gc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldDsKICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCJGYWlsZWQgdG8gZ2V0IGN1cnNvciBwb3NpdGlvbjoiLCBlcnJvcik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KICAvKioKICAgKiBHZXRzIGN1cnNvciBwb3NpdGlvbiBmcm9tIG1vdXNlIGNvb3JkaW5hdGVzIHdpdGggU2hhZG93IERPTSBzdXBwb3J0CiAgICovCiAgc3RhdGljIGdldEN1cnNvclBvc2l0aW9uRnJvbVBvaW50KHgzLCB5NSwgY29udGFpbmVyLCAuLi5zaGFkb3dSb290cykgewogICAgaWYgKCJjYXJldFBvc2l0aW9uRnJvbVBvaW50IiBpbiBkb2N1bWVudCAmJiBkb2N1bWVudC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KSB7CiAgICAgIGxldCBjYXJldFBvcyA9IG51bGw7CiAgICAgIHRyeSB7CiAgICAgICAgY2FyZXRQb3MgPSBkb2N1bWVudC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KHgzLCB5NSwgLi4uc2hhZG93Um9vdHMpOwogICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICBjYXJldFBvcyA9IGRvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQoeDMsIHk1KTsKICAgICAgfQogICAgICBpZiAoY2FyZXRQb3MgJiYgY29udGFpbmVyLmNvbnRhaW5zKGNhcmV0UG9zLm9mZnNldE5vZGUpKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2Zmc2V0SW5FbGVtZW50KGNhcmV0UG9zLm9mZnNldE5vZGUsIGNhcmV0UG9zLm9mZnNldCwgY29udGFpbmVyKTsKICAgICAgfQogICAgfQogICAgaWYgKCJjYXJldFJhbmdlRnJvbVBvaW50IiBpbiBkb2N1bWVudCkgewogICAgICBjb25zdCByYW5nZTIgPSBkb2N1bWVudC5jYXJldFJhbmdlRnJvbVBvaW50KHgzLCB5NSk7CiAgICAgIGlmIChyYW5nZTIgJiYgY29udGFpbmVyLmNvbnRhaW5zKHJhbmdlMi5zdGFydENvbnRhaW5lcikpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRPZmZzZXRJbkVsZW1lbnQocmFuZ2UyLnN0YXJ0Q29udGFpbmVyLCByYW5nZTIuc3RhcnRPZmZzZXQsIGNvbnRhaW5lcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICAvKioKICAgKiBIZWxwZXIgdG8gZ2V0IHRoZSB0b3RhbCBjaGFyYWN0ZXIgb2Zmc2V0IG9mIGEgcG9zaXRpb24gd2l0aGluIGFuIGVsZW1lbnQKICAgKi8KICBzdGF0aWMgZ2V0T2Zmc2V0SW5FbGVtZW50KG5vZGUyLCBvZmZzZXQsIGNvbnRhaW5lcikgewogICAgbGV0IHRvdGFsT2Zmc2V0ID0gMDsKICAgIGxldCBmb3VuZCA9IGZhbHNlOwogICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihjb250YWluZXIsIE5vZGVGaWx0ZXIuU0hPV19URVhULCBudWxsKTsKICAgIGxldCB0ZXh0Tm9kZTsKICAgIHdoaWxlICh0ZXh0Tm9kZSA9IHdhbGtlci5uZXh0Tm9kZSgpKSB7CiAgICAgIGlmICh0ZXh0Tm9kZSA9PT0gbm9kZTIpIHsKICAgICAgICB0b3RhbE9mZnNldCArPSBvZmZzZXQ7CiAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgewogICAgICAgIHRvdGFsT2Zmc2V0ICs9IHRleHROb2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZvdW5kID8gdG90YWxPZmZzZXQgOiAwOwogIH0KICAvKioKICAgKiBTZXRzIGN1cnNvciBwb3NpdGlvbiBpbiBhbiBlbGVtZW50CiAgICovCiAgc3RhdGljIHNldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0LCBwb3NpdGlvbjMpIHsKICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZWxlbWVudDQsIE5vZGVGaWx0ZXIuU0hPV19URVhULCBudWxsKTsKICAgIGxldCBjdXJyZW50UG9zaXRpb24gPSAwOwogICAgbGV0IHRhcmdldE5vZGUgPSBudWxsOwogICAgbGV0IHRhcmdldE9mZnNldCA9IDA7CiAgICB3aGlsZSAod2Fsa2VyLm5leHROb2RlKCkpIHsKICAgICAgY29uc3Qgbm9kZTIgPSB3YWxrZXIuY3VycmVudE5vZGU7CiAgICAgIGNvbnN0IG5vZGVMZW5ndGggPSBub2RlMi50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDA7CiAgICAgIGlmIChjdXJyZW50UG9zaXRpb24gKyBub2RlTGVuZ3RoID49IHBvc2l0aW9uMykgewogICAgICAgIHRhcmdldE5vZGUgPSBub2RlMjsKICAgICAgICB0YXJnZXRPZmZzZXQgPSBwb3NpdGlvbjMgLSBjdXJyZW50UG9zaXRpb247CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY3VycmVudFBvc2l0aW9uICs9IG5vZGVMZW5ndGg7CiAgICB9CiAgICBpZiAodGFyZ2V0Tm9kZSkgewogICAgICBjb25zdCByYW5nZTIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICByYW5nZTIuc2V0U3RhcnQodGFyZ2V0Tm9kZSwgdGFyZ2V0T2Zmc2V0KTsKICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgICB0aGlzLnNldFNlbGVjdGlvbkZyb21SYW5nZShyYW5nZTIpOwogICAgfQogIH0KICAvKioKICAgKiBDaGVjayBpZiBhIG5vZGUgaXMgY29udGFpbmVkIHdpdGhpbiBhbiBlbGVtZW50IGFjcm9zcyBTaGFkb3cgRE9NIGJvdW5kYXJpZXMKICAgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIGVsZW1lbnQuY29udGFpbnMoKSBkb2Vzbid0IHdvcmsgYWNyb3NzIFNoYWRvdyBET00KICAgKi8KICBzdGF0aWMgY29udGFpbnNBY3Jvc3NTaGFkb3dET00oY29udGFpbmVyLCBub2RlMikgewogICAgaWYgKCFjb250YWluZXIgfHwgIW5vZGUyKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgY3VycmVudCA9IG5vZGUyOwogICAgd2hpbGUgKGN1cnJlbnQpIHsKICAgICAgaWYgKGN1cnJlbnQgPT09IGNvbnRhaW5lcikgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlmIChjdXJyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUgJiYgY3VycmVudC5ob3N0KSB7CiAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGN1cnJlbnQ7CiAgICAgICAgaWYgKHNoYWRvd1Jvb3QuY29udGFpbnMoY29udGFpbmVyKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBjdXJyZW50ID0gc2hhZG93Um9vdC5ob3N0OwogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudE5vZGU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuZm9ybWF0dGluZy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgV3lzaXd5Z0Zvcm1hdHRpbmcgPSBjbGFzcyB7CiAgc3RhdGljIGZvcm1hdEJ1dHRvbnMgPSBbCiAgICB7IGNvbW1hbmQ6ICJib2xkIiwgaWNvbjogIkIiLCBsYWJlbDogIkJvbGQiLCBzaG9ydGN1dDogIlx1MjMxOEIiIH0sCiAgICB7IGNvbW1hbmQ6ICJpdGFsaWMiLCBpY29uOiAiSSIsIGxhYmVsOiAiSXRhbGljIiwgc2hvcnRjdXQ6ICJcdTIzMThJIiB9LAogICAgeyBjb21tYW5kOiAidW5kZXJsaW5lIiwgaWNvbjogIlUiLCBsYWJlbDogIlVuZGVybGluZSIsIHNob3J0Y3V0OiAiXHUyMzE4VSIgfSwKICAgIHsgY29tbWFuZDogInN0cmlrZVRocm91Z2giLCBpY29uOiAiU1x1MDMzNiIsIGxhYmVsOiAiU3RyaWtldGhyb3VnaCIgfSwKICAgIHsgY29tbWFuZDogImNvZGUiLCBpY29uOiAieyB9IiwgbGFiZWw6ICJJbmxpbmUgQ29kZSIgfSwKICAgIHsgY29tbWFuZDogImxpbmsiLCBpY29uOiAiXHV7MUY1MTd9IiwgbGFiZWw6ICJMaW5rIiwgc2hvcnRjdXQ6ICJcdTIzMThLIiB9CiAgXTsKICBzdGF0aWMgcmVuZGVyRm9ybWF0dGluZ01lbnUocG9zaXRpb24zLCBvbkZvcm1hdCkgewogICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IAogICAgICAgIGNsYXNzPSJmb3JtYXR0aW5nLW1lbnUiIAogICAgICAgIHN0eWxlPSJ0b3A6ICR7cG9zaXRpb24zLnl9cHg7IGxlZnQ6ICR7cG9zaXRpb24zLnh9cHg7IgogICAgICAgIEBtb3VzZWRvd249IiR7KGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgfX0iCiAgICAgICAgQGNsaWNrPSIkeyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0iCiAgICAgID4KICAgICAgICAke3RoaXMuZm9ybWF0QnV0dG9ucy5tYXAoKGJ1dHRvbikgPT4gYjJgCiAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICBjbGFzcz0iZm9ybWF0LWJ1dHRvbiAke2J1dHRvbi5jb21tYW5kfSIKICAgICAgICAgICAgQGNsaWNrPSIkeygpID0+IG9uRm9ybWF0KGJ1dHRvbi5jb21tYW5kKX0iCiAgICAgICAgICAgIHRpdGxlPSIke2J1dHRvbi5sYWJlbH0ke2J1dHRvbi5zaG9ydGN1dCA/IGAgKCR7YnV0dG9uLnNob3J0Y3V0fSlgIDogIiJ9IgogICAgICAgICAgPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iJHtidXR0b24uY29tbWFuZCA9PT0gImNvZGUiID8gImNvZGUtaWNvbiIgOiAiIn0iPiR7YnV0dG9uLmljb259PC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgc3RhdGljIGFwcGx5Rm9ybWF0KGNvbW1hbmQsIHZhbHVlMiwgcmFuZ2UyLCBzaGFkb3dSb290cykgewogICAgbGV0IHdvcmtpbmdSYW5nZTsKICAgIGlmIChyYW5nZTIpIHsKICAgICAgd29ya2luZ1JhbmdlID0gcmFuZ2UyOwogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHdvcmtpbmdSYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgfQogICAgc3dpdGNoIChjb21tYW5kKSB7CiAgICAgIGNhc2UgImJvbGQiOgogICAgICAgIHRoaXMud3JhcFNlbGVjdGlvbih3b3JraW5nUmFuZ2UsICJzdHJvbmciKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiaXRhbGljIjoKICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24od29ya2luZ1JhbmdlLCAiZW0iKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAidW5kZXJsaW5lIjoKICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24od29ya2luZ1JhbmdlLCAidSIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJzdHJpa2VUaHJvdWdoIjoKICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24od29ya2luZ1JhbmdlLCAicyIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJjb2RlIjoKICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24od29ya2luZ1JhbmdlLCAiY29kZSIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJsaW5rIjoKICAgICAgICBpZiAoIXZhbHVlMikgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb25XaXRoTGluayh3b3JraW5nUmFuZ2UsIHZhbHVlMik7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoc2hhZG93Um9vdHMgJiYgc2hhZG93Um9vdHMubGVuZ3RoID4gMCkgewogICAgICBXeXNpd3lnU2VsZWN0aW9uLnNldFNlbGVjdGlvbkZyb21SYW5nZSh3b3JraW5nUmFuZ2UpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBpZiAoc2VsZWN0aW9uKSB7CiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSh3b3JraW5nUmFuZ2UpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgc3RhdGljIHdyYXBTZWxlY3Rpb24ocmFuZ2UyLCB0YWdOYW1lKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgcmV0dXJuOwogICAgY29uc3QgaGFzRm9ybWF0dGluZyA9IHRoaXMuc2VsZWN0aW9uQ29udGFpbnNUYWcocmFuZ2UyLCB0YWdOYW1lKTsKICAgIGlmIChoYXNGb3JtYXR0aW5nKSB7CiAgICAgIHRoaXMucmVtb3ZlVGFnRnJvbVNlbGVjdGlvbihyYW5nZTIsIHRhZ05hbWUpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgY29udGVudHMgPSByYW5nZTIuZXh0cmFjdENvbnRlbnRzKCk7CiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChjb250ZW50cyk7CiAgICAgICAgcmFuZ2UyLmluc2VydE5vZGUod3JhcHBlcik7CiAgICAgICAgcmFuZ2UyLnNlbGVjdE5vZGVDb250ZW50cyh3cmFwcGVyKTsKICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byB3cmFwIHNlbGVjdGlvbjoiLCBlMTEpOwogICAgICB9CiAgICB9CiAgfQogIC8qKgogICAqIENoZWNrIGlmIHRoZSBzZWxlY3Rpb24gY29udGFpbnMgb3IgaXMgd2l0aGluIGFueSBpbnN0YW5jZXMgb2YgYSB0YWcKICAgKi8KICBzdGF0aWMgc2VsZWN0aW9uQ29udGFpbnNUYWcocmFuZ2UyLCB0YWdOYW1lKSB7CiAgICBsZXQgbm9kZTIgPSByYW5nZTIuc3RhcnRDb250YWluZXI7CiAgICB3aGlsZSAobm9kZTIgJiYgbm9kZTIgIT09IHJhbmdlMi5jb21tb25BbmNlc3RvckNvbnRhaW5lci5vd25lckRvY3VtZW50KSB7CiAgICAgIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHsKICAgICAgICBjb25zdCBlbGVtZW50NCA9IG5vZGUyOwogICAgICAgIGlmIChlbGVtZW50NC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBub2RlMiA9IG5vZGUyLnBhcmVudE5vZGU7CiAgICB9CiAgICBub2RlMiA9IHJhbmdlMi5lbmRDb250YWluZXI7CiAgICB3aGlsZSAobm9kZTIgJiYgbm9kZTIgIT09IHJhbmdlMi5jb21tb25BbmNlc3RvckNvbnRhaW5lci5vd25lckRvY3VtZW50KSB7CiAgICAgIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHsKICAgICAgICBjb25zdCBlbGVtZW50NCA9IG5vZGUyOwogICAgICAgIGlmIChlbGVtZW50NC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBub2RlMiA9IG5vZGUyLnBhcmVudE5vZGU7CiAgICB9CiAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBjb25zdCBjb250ZW50cyA9IHJhbmdlMi5jbG9uZUNvbnRlbnRzKCk7CiAgICB0ZW1wRGl2LmFwcGVuZENoaWxkKGNvbnRlbnRzKTsKICAgIGNvbnN0IHRhZ3MgPSB0ZW1wRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpOwogICAgcmV0dXJuIHRhZ3MubGVuZ3RoID4gMDsKICB9CiAgLyoqCiAgICogUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2YgYSB0YWcgZnJvbSB0aGUgc2VsZWN0aW9uCiAgICovCiAgc3RhdGljIHJlbW92ZVRhZ0Zyb21TZWxlY3Rpb24ocmFuZ2UyLCB0YWdOYW1lKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgcmV0dXJuOwogICAgbGV0IGV4cGFuZGVkUmFuZ2UgPSByYW5nZTIuY2xvbmVSYW5nZSgpOwogICAgbGV0IHN0YXJ0Tm9kZSA9IHJhbmdlMi5zdGFydENvbnRhaW5lcjsKICAgIGxldCBzdGFydFRhZyA9IG51bGw7CiAgICB3aGlsZSAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZSAhPT0gcmFuZ2UyLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm93bmVyRG9jdW1lbnQpIHsKICAgICAgaWYgKHN0YXJ0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgc3RhcnROb2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGFnTmFtZSkgewogICAgICAgIHN0YXJ0VGFnID0gc3RhcnROb2RlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS5wYXJlbnROb2RlOwogICAgfQogICAgbGV0IGVuZE5vZGUgPSByYW5nZTIuZW5kQ29udGFpbmVyOwogICAgbGV0IGVuZFRhZyA9IG51bGw7CiAgICB3aGlsZSAoZW5kTm9kZSAmJiBlbmROb2RlICE9PSByYW5nZTIuY29tbW9uQW5jZXN0b3JDb250YWluZXIub3duZXJEb2N1bWVudCkgewogICAgICBpZiAoZW5kTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgZW5kTm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUpIHsKICAgICAgICBlbmRUYWcgPSBlbmROb2RlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGVuZE5vZGUgPSBlbmROb2RlLnBhcmVudE5vZGU7CiAgICB9CiAgICBpZiAoc3RhcnRUYWcpIHsKICAgICAgZXhwYW5kZWRSYW5nZS5zZXRTdGFydEJlZm9yZShzdGFydFRhZyk7CiAgICB9CiAgICBpZiAoZW5kVGFnKSB7CiAgICAgIGV4cGFuZGVkUmFuZ2Uuc2V0RW5kQWZ0ZXIoZW5kVGFnKTsKICAgIH0KICAgIGNvbnN0IGZyYWdtZW50ID0gZXhwYW5kZWRSYW5nZS5leHRyYWN0Q29udGVudHMoKTsKICAgIGNvbnN0IHByb2Nlc3NlZEZyYWdtZW50ID0gdGhpcy5yZW1vdmVUYWdzRnJvbUZyYWdtZW50KGZyYWdtZW50LCB0YWdOYW1lKTsKICAgIGV4cGFuZGVkUmFuZ2UuaW5zZXJ0Tm9kZShwcm9jZXNzZWRGcmFnbWVudCk7CiAgICBjb25zdCB0ZXh0Tm9kZXMgPSBbXTsKICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIocHJvY2Vzc2VkRnJhZ21lbnQsIE5vZGVGaWx0ZXIuU0hPV19URVhULCBudWxsKTsKICAgIGxldCBub2RlMjsKICAgIHdoaWxlIChub2RlMiA9IHdhbGtlci5uZXh0Tm9kZSgpKSB7CiAgICAgIHRleHROb2Rlcy5wdXNoKG5vZGUyKTsKICAgIH0KICAgIGlmICh0ZXh0Tm9kZXMubGVuZ3RoID4gMCkgewogICAgICBjb25zdCBuZXdSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgIG5ld1JhbmdlLnNldFN0YXJ0KHRleHROb2Rlc1swXSwgMCk7CiAgICAgIG5ld1JhbmdlLnNldEVuZCh0ZXh0Tm9kZXNbdGV4dE5vZGVzLmxlbmd0aCAtIDFdLCB0ZXh0Tm9kZXNbdGV4dE5vZGVzLmxlbmd0aCAtIDFdLnRleHRDb250ZW50Py5sZW5ndGggfHwgMCk7CiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5ld1JhbmdlKTsKICAgIH0KICB9CiAgLyoqCiAgICogUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2YgYSB0YWcgZnJvbSBhIGRvY3VtZW50IGZyYWdtZW50CiAgICovCiAgc3RhdGljIHJlbW92ZVRhZ3NGcm9tRnJhZ21lbnQoZnJhZ21lbnQsIHRhZ05hbWUpIHsKICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHRlbXBEaXYuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOwogICAgY29uc3QgdGFncyA9IHRlbXBEaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSk7CiAgICBjb25zdCB0YWdBcnJheSA9IEFycmF5LmZyb20odGFncyk7CiAgICB0YWdBcnJheS5mb3JFYWNoKCh0YWcpID0+IHsKICAgICAgY29uc3QgcGFyZW50ID0gdGFnLnBhcmVudE5vZGU7CiAgICAgIGlmIChwYXJlbnQpIHsKICAgICAgICB3aGlsZSAodGFnLmZpcnN0Q2hpbGQpIHsKICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUodGFnLmZpcnN0Q2hpbGQsIHRhZyk7CiAgICAgICAgfQogICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZCh0YWcpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IG5ld0ZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgd2hpbGUgKHRlbXBEaXYuZmlyc3RDaGlsZCkgewogICAgICBuZXdGcmFnbWVudC5hcHBlbmRDaGlsZCh0ZW1wRGl2LmZpcnN0Q2hpbGQpOwogICAgfQogICAgcmV0dXJuIG5ld0ZyYWdtZW50OwogIH0KICBzdGF0aWMgd3JhcFNlbGVjdGlvbldpdGhMaW5rKHJhbmdlMiwgdXJsKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgcmV0dXJuOwogICAgaWYgKHRoaXMuc2VsZWN0aW9uQ29udGFpbnNUYWcocmFuZ2UyLCAiYSIpKSB7CiAgICAgIHRoaXMucmVtb3ZlVGFnRnJvbVNlbGVjdGlvbihyYW5nZTIsICJhIik7CiAgICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHsKICAgICAgICByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgfQogICAgfQogICAgY29uc3QgbGluazMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICBsaW5rMy5ocmVmID0gdXJsOwogICAgbGluazMudGFyZ2V0ID0gIl9ibGFuayI7CiAgICBsaW5rMy5yZWwgPSAibm9vcGVuZXIgbm9yZWZlcnJlciI7CiAgICB0cnkgewogICAgICBjb25zdCBjb250ZW50cyA9IHJhbmdlMi5leHRyYWN0Q29udGVudHMoKTsKICAgICAgbGluazMuYXBwZW5kQ2hpbGQoY29udGVudHMpOwogICAgICByYW5nZTIuaW5zZXJ0Tm9kZShsaW5rMyk7CiAgICAgIHJhbmdlMi5zZWxlY3ROb2RlQ29udGVudHMobGluazMpOwogICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZTIpOwogICAgfSBjYXRjaCAoZTExKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgbGluazoiLCBlMTEpOwogICAgfQogIH0KICBzdGF0aWMgZ2V0U2VsZWN0aW9uQ29vcmRpbmF0ZXMoLi4uc2hhZG93Um9vdHMpIHsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgY29uc29sZS5sb2coImdldFNlbGVjdGlvbkNvb3JkaW5hdGVzIC0gc2VsZWN0aW9uSW5mbzoiLCBzZWxlY3Rpb25JbmZvKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICBjb25zb2xlLmxvZygiTm8gc2VsZWN0aW9uIGluZm8gYXZhaWxhYmxlIik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgcmFuZ2UyID0gV3lzaXd5Z1NlbGVjdGlvbi5jcmVhdGVSYW5nZUZyb21JbmZvKHNlbGVjdGlvbkluZm8pOwogICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIGNvbnNvbGUubG9nKCJSYW5nZSByZWN0OiIsIHJlY3QpOwogICAgaWYgKHJlY3Qud2lkdGggPT09IDAgJiYgcmVjdC5oZWlnaHQgPT09IDApIHsKICAgICAgY29uc29sZS5sb2coIlJlY3Qgd2lkdGggYW5kIGhlaWdodCBhcmUgMCwgdHJ5aW5nIGRpZmZlcmVudCBhcHByb2FjaCIpOwogICAgICBpZiAoImNhcmV0UG9zaXRpb25Gcm9tUG9pbnQiIGluIGRvY3VtZW50KSB7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7CiAgICAgICAgICBjb25zdCByYW5nZTMgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgICAgIGNvbnN0IHRlbXBTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICAgdGVtcFNwYW4udGV4dENvbnRlbnQgPSAiXHUyMDBCIjsKICAgICAgICAgIHJhbmdlMy5pbnNlcnROb2RlKHRlbXBTcGFuKTsKICAgICAgICAgIGNvbnN0IHNwYW5SZWN0ID0gdGVtcFNwYW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICB0ZW1wU3Bhbi5yZW1vdmUoKTsKICAgICAgICAgIGlmIChzcGFuUmVjdC53aWR0aCA+IDAgfHwgc3BhblJlY3QuaGVpZ2h0ID4gMCkgewogICAgICAgICAgICBjb25zdCBjb29yZHMyID0gewogICAgICAgICAgICAgIHg6IHNwYW5SZWN0LmxlZnQsCiAgICAgICAgICAgICAgeTogTWF0aC5tYXgoNDUsIHNwYW5SZWN0LnRvcCAtIDQ1KQogICAgICAgICAgICB9OwogICAgICAgICAgICBjb25zb2xlLmxvZygiVXNlZCBzcGFuIHRyaWNrIGZvciBjb29yZHM6IiwgY29vcmRzMik7CiAgICAgICAgICAgIHJldHVybiBjb29yZHMyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IGNvb3JkcyA9IHsKICAgICAgeDogcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDIsCiAgICAgIHk6IE1hdGgubWF4KDQ1LCByZWN0LnRvcCAtIDQ1KQogICAgICAvLyBQb3NpdGlvbiBhYm92ZSBzZWxlY3Rpb24sIGJ1dCBlbnN1cmUgaXQncyBub3QgbmVnYXRpdmUKICAgIH07CiAgICBjb25zb2xlLmxvZygiUmV0dXJuaW5nIGNvb3JkczoiLCBjb29yZHMpOwogICAgcmV0dXJuIGNvb3JkczsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2RlZXMtZm9ybWF0dGluZy1tZW51LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTYyID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2MyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0Zvcm1hdHRpbmdNZW51ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1mb3JtYXR0aW5nLW1lbnUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF92aXNpYmxlX2RlY29yYXRvcnM7CiAgbGV0IF92aXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZGVjb3JhdG9yczsKICBsZXQgX3Bvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVaSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX21lbnVaSW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNGb3JtYXR0aW5nTWVudTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92aXNpYmxlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9wb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfbWVudVpJbmRleF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU2Mih0aGlzLCBudWxsLCBfdmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2aXNpYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2aXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZpc2libGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmlzaWJsZV9pbml0aWFsaXplcnMsIF92aXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjIodGhpcywgbnVsbCwgX3Bvc2l0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwb3NpdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wb3NpdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcG9zaXRpb25faW5pdGlhbGl6ZXJzLCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Mih0aGlzLCBudWxsLCBfbWVudVpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51WkluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZW51WkluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1lbnVaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVaSW5kZXggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWVudVpJbmRleF9pbml0aWFsaXplcnMsIF9tZW51WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjIobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzRm9ybWF0dGluZ01lbnUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBpbnN0YW5jZTsKICAgIHN0YXRpYyBnZXRJbnN0YW5jZSgpIHsKICAgICAgaWYgKCFEZWVzRm9ybWF0dGluZ01lbnUyLmluc3RhbmNlKSB7CiAgICAgICAgRGVlc0Zvcm1hdHRpbmdNZW51Mi5pbnN0YW5jZSA9IG5ldyBEZWVzRm9ybWF0dGluZ01lbnUyKCk7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChEZWVzRm9ybWF0dGluZ01lbnUyLmluc3RhbmNlKTsKICAgICAgfQogICAgICByZXR1cm4gRGVlc0Zvcm1hdHRpbmdNZW51Mi5pbnN0YW5jZTsKICAgIH0KICAgICN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczYzKHRoaXMsIF92aXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgZ2V0IHZpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Myh0aGlzLCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjModGhpcywgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgeyB4OiAwLCB5OiAwIH0pKTsKICAgIGdldCBwb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcG9zaXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWVudVpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjModGhpcywgX3Bvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Myh0aGlzLCBfbWVudVpJbmRleF9pbml0aWFsaXplcnMsIDFlMykpOwogICAgZ2V0IG1lbnVaSW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZW51WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWVudVpJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWVudVpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY2FsbGJhY2sgPSAoX19ydW5Jbml0aWFsaXplcnM2Myh0aGlzLCBfbWVudVpJbmRleF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICB9CgogICAgICAuZm9ybWF0dGluZy1tZW51IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzI2MjYyNiIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjNDA0MDQwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW5TY2FsZSAwLjE1cyBlYXNlLW91dDsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlSW5TY2FsZSB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KSB0cmFuc2xhdGVZKDVweCk7CiAgICAgICAgfQogICAgICAgIHRvIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAiLCAiI2UwZTBlMCIpfTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YwZjBmMCIsICIjMzMzMzMzIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwNjZjYyIsICIjNGQ5NGZmIil9OwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbjphY3RpdmUgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uLmJvbGQgewogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uLml0YWxpYyB7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbi51bmRlcmxpbmUgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbiAuY29kZS1pY29uIHsKICAgICAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGlmICghdGhpcy52aXNpYmxlKQogICAgICAgIHJldHVybiBiMmBgOwogICAgICB0aGlzLnN0eWxlLnpJbmRleCA9IHRoaXMubWVudVpJbmRleC50b1N0cmluZygpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9ImZvcm1hdHRpbmctbWVudSIgCiAgICAgICAgc3R5bGU9ImxlZnQ6ICR7dGhpcy5wb3NpdGlvbi54fXB4OyB0b3A6ICR7dGhpcy5wb3NpdGlvbi55fXB4OyIKICAgICAgICB0YWJpbmRleD0iLTEiCiAgICAgICAgZGF0YS1tZW51LXR5cGU9ImZvcm1hdHRpbmciCiAgICAgID4KICAgICAgICAke1d5c2l3eWdGb3JtYXR0aW5nLmZvcm1hdEJ1dHRvbnMubWFwKChidXR0b24pID0+IGIyYAogICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgY2xhc3M9ImZvcm1hdC1idXR0b24gJHtidXR0b24uY29tbWFuZH0iCiAgICAgICAgICAgIGRhdGEtY29tbWFuZD0iJHtidXR0b24uY29tbWFuZH0iCiAgICAgICAgICAgIHRpdGxlPSIke2J1dHRvbi5sYWJlbH0ke2J1dHRvbi5zaG9ydGN1dCA/IGAgKCR7YnV0dG9uLnNob3J0Y3V0fSlgIDogIiJ9IgogICAgICAgICAgPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iJHtidXR0b24uY29tbWFuZCA9PT0gImNvZGUiID8gImNvZGUtaWNvbiIgOiAiIn0iPiR7YnV0dG9uLmljb259PC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFwcGx5Rm9ybWF0KGNvbW1hbmQpIHsKICAgICAgaWYgKHRoaXMuY2FsbGJhY2spIHsKICAgICAgICB0aGlzLmNhbGxiYWNrKGNvbW1hbmQpOwogICAgICB9CiAgICAgIGlmIChjb21tYW5kID09PSAibGluayIpIHsKICAgICAgICB0aGlzLmhpZGUoKTsKICAgICAgfQogICAgfQogICAgc2hvdyhwb3NpdGlvbjMsIGNhbGxiYWNrKSB7CiAgICAgIGNvbnNvbGUubG9nKCJGb3JtYXR0aW5nTWVudS5zaG93IGNhbGxlZDoiLCB7IHBvc2l0aW9uOiBwb3NpdGlvbjMsIHZpc2libGU6IHRoaXMudmlzaWJsZSB9KTsKICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uMzsKICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgICB0aGlzLm1lbnVaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMsIHRoaXMubWVudVpJbmRleCk7CiAgICAgIHRoaXMuc3R5bGUuekluZGV4ID0gdGhpcy5tZW51WkluZGV4LnRvU3RyaW5nKCk7CiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAgICB9CiAgICBoaWRlKCkgewogICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTsKICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnVucmVnaXN0ZXIodGhpcyk7CiAgICB9CiAgICB1cGRhdGVQb3NpdGlvbihwb3NpdGlvbjMpIHsKICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uMzsKICAgIH0KICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCAoZTExKSA9PiB7CiAgICAgICAgY29uc3QgbWVudSA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmZvcm1hdHRpbmctbWVudSIpOwogICAgICAgIGlmIChtZW51ICYmIG1lbnUuY29udGFpbnMoZTExLnRhcmdldCkpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZTExKSA9PiB7CiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZTExLnRhcmdldDsKICAgICAgICBjb25zdCBidXR0b24gPSB0YXJnZXQuY2xvc2VzdCgiLmZvcm1hdC1idXR0b24iKTsKICAgICAgICBpZiAoYnV0dG9uKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJkYXRhLWNvbW1hbmQiKTsKICAgICAgICAgIGlmIChjb21tYW5kKSB7CiAgICAgICAgICAgIHRoaXMuYXBwbHlGb3JtYXQoY29tbWFuZCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCBtZW51ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZm9ybWF0dGluZy1tZW51Iik7CiAgICAgICAgaWYgKG1lbnUgJiYgbWVudS5jb250YWlucyhlMTEudGFyZ2V0KSkgewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgfQogICAgICB9LCB0cnVlKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNGb3JtYXR0aW5nTWVudTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmludGVyZmFjZXMuanMKaW5pdF9kaXN0X3RzMjYoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5jb25zdGFudHMuanMKdmFyIFBST0dSQU1NSU5HX0xBTkdVQUdFUyA9IFsKICAiSmF2YVNjcmlwdCIsCiAgIlR5cGVTY3JpcHQiLAogICJQeXRob24iLAogICJKYXZhIiwKICAiQysrIiwKICAiQyMiLAogICJHbyIsCiAgIlJ1c3QiLAogICJIVE1MIiwKICAiQ1NTIiwKICAiU1FMIiwKICAiU2hlbGwiLAogICJKU09OIiwKICAiWUFNTCIsCiAgIk1hcmtkb3duIiwKICAiUGxhaW4gVGV4dCIKXTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5zdHlsZXMuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHd5c2l3eWdTdHlsZXMgPSBpYAogIDpob3N0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogIH0KCiAgLnd5c2l3eWctY29udGFpbmVyIHsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgbWluLWhlaWdodDogMjAwcHg7CiAgICBwYWRkaW5nOiAyNHB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLnd5c2l3eWctY29udGFpbmVyOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzNmM2Y0NiIpfTsKICB9CgogIC53eXNpd3lnLWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgb3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjMTgxODFiIil9LCAwIDAgMCA0cHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjUpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjUpIil9OwogICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogIH0KCiAgLyogVmlzdWFsIGhpbnQgZm9yIHRleHQgc2VsZWN0aW9uICovCiAgLmVkaXRvci1jb250ZW50OmhvdmVyIHsKICAgIGN1cnNvcjogdGV4dDsKICB9CgogIC5lZGl0b3ItY29udGVudCB7CiAgICBvdXRsaW5lOiBub25lOwogICAgbWluLWhlaWdodDogMTYwcHg7CiAgICBtYXJnaW46IDAgLThweDsKICAgIHBhZGRpbmc6IDAgOHB4OwogIH0KCiAgLmJsb2NrIHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDRweCAwOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICBtaW4taGVpZ2h0OiAxLjZlbTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLyogRmlyc3QgYW5kIGxhc3QgYmxvY2tzIGRvbid0IG5lZWQgZXh0cmEgc3BhY2luZyAqLwogIC5ibG9jay13cmFwcGVyOmZpcnN0LWNoaWxkIC5ibG9jayB7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgfQoKICAuYmxvY2std3JhcHBlcjpsYXN0LWNoaWxkIC5ibG9jayB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwogIH0KCiAgLmJsb2NrLnNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4wNSkiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMDUpIil9OwogICAgb3V0bGluZTogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIpfTsKICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgbWFyZ2luLWxlZnQ6IC04cHg7CiAgICBtYXJnaW4tcmlnaHQ6IC04cHg7CiAgICBwYWRkaW5nLWxlZnQ6IDhweDsKICAgIHBhZGRpbmctcmlnaHQ6IDhweDsKICB9CgogIC5ibG9ja1tjb250ZW50ZWRpdGFibGVdIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQoKICAuYmxvY2sucGFyYWdyYXBoIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBmb250LXdlaWdodDogNDAwOwogIH0KCiAgLmJsb2NrLnBhcmFncmFwaDplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJUeXBlICcvJyBmb3IgY29tbWFuZHMuLi4iOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBmb250LXdlaWdodDogNDAwOwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMSB7CiAgICBmb250LXNpemU6IDMycHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMTplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJIZWFkaW5nIDEiOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMzJweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICBmb250LXdlaWdodDogNzAwOwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMiB7CiAgICBmb250LXNpemU6IDI0cHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuMzsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMjplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJIZWFkaW5nIDIiOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMjRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM7CiAgICBmb250LXdlaWdodDogNjAwOwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMyB7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMzplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJIZWFkaW5nIDMiOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMjBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBmb250LXdlaWdodDogNjAwOwogIH0KCiAgLmJsb2NrLnF1b3RlIHsKICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICBsaW5lLWhlaWdodDogMS42OwogIH0KCiAgLmJsb2NrLnF1b3RlOmVtcHR5OjpiZWZvcmUgewogICAgY29udGVudDogIlF1b3RlIjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMS42OwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICB9CgogIC5jb2RlLWJsb2NrLWNvbnRhaW5lciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW46IDIwcHggMDsKICB9CgogIC5jb2RlLWxhbmd1YWdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIHJpZ2h0OiAwOwogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgcGFkZGluZzogNHB4IDEycHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiAwIDRweCAwIDRweDsKICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgc2Fucy1zZXJpZjsKICAgIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2U7CiAgICB6LWluZGV4OiAxOwogIH0KCiAgLmJsb2NrLmNvZGUgewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzE4MTgxYiIpfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBwYWRkaW5nOiAxNnB4OwogICAgcGFkZGluZy10b3A6IDMycHg7IC8qIE1ha2Ugcm9vbSBmb3IgbGFuZ3VhZ2UgaW5kaWNhdG9yICovCiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgIG92ZXJmbG93LXg6IGF1dG87CiAgfQoKICAuYmxvY2suY29kZTplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIvLyBDb2RlIGJsb2NrIjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBmb250LXdlaWdodDogNDAwOwogIH0KCiAgLmJsb2NrLmxpc3QgewogICAgcGFkZGluZy1sZWZ0OiAwOwogIH0KCiAgLmJsb2NrLmxpc3QgdWwsCiAgLmJsb2NrLmxpc3Qgb2wgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMCAwIDAgMjRweDsKICAgIGxpc3Qtc3R5bGUtcG9zaXRpb246IG91dHNpZGU7CiAgfQoKICAuYmxvY2subGlzdCB1bCB7CiAgICBsaXN0LXN0eWxlOiBkaXNjOwogIH0KCiAgLmJsb2NrLmxpc3Qgb2wgewogICAgbGlzdC1zdHlsZTogZGVjaW1hbDsKICB9CgogIC5ibG9jay5saXN0IGxpIHsKICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgfQoKICAuYmxvY2subGlzdCBsaTpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7CiAgfQoKICAuYmxvY2suZGl2aWRlciB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAyMHB4IDA7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICB9CgogIC5ibG9jay5kaXZpZGVyIGhyIHsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgbWFyZ2luOiAwOwogIH0KCiAgLnNsYXNoLW1lbnUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzA5MDkwYiIpfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA2KTsKICAgIHBhZGRpbmc6IDRweDsKICAgIHotaW5kZXg6IDEwMDA7CiAgICBtaW4td2lkdGg6IDIyMHB4OwogICAgbWF4LWhlaWdodDogMzAwcHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICB9CgogIC5zbGFzaC1tZW51LWl0ZW0gewogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICBmb250LXNpemU6IDE0cHg7CiAgfQoKICAuc2xhc2gtbWVudS1pdGVtOmhvdmVyLAogIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLnNsYXNoLW1lbnUtaXRlbSAuaWNvbiB7CiAgICB3aWR0aDogMjRweDsKICAgIGhlaWdodDogMjRweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgfQoKICAuc2xhc2gtbWVudS1pdGVtOmhvdmVyIC5pY29uLAogIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgLmljb24gewogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgfQoKICAudG9vbGJhciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC00MHB4OwogICAgbGVmdDogMDsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNik7CiAgICBwYWRkaW5nOiA0cHg7CiAgICBkaXNwbGF5OiBub25lOwogICAgZ2FwOiA0cHg7CiAgICB6LWluZGV4OiAxMDAwOwogIH0KCiAgLnRvb2xiYXIudmlzaWJsZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogIH0KCiAgLnRvb2xiYXItYnV0dG9uIHsKICAgIHdpZHRoOiAzMnB4OwogICAgaGVpZ2h0OiAzMnB4OwogICAgYm9yZGVyOiBub25lOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICB9CgogIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjMjcyNzJhIil9OwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgfQoKICAvKiBEcmFnIGFuZCBEcm9wIFN0eWxlcyAqLwogIC5ibG9jay13cmFwcGVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2UsIG9wYWNpdHkgMC4ycyBlYXNlOwogIH0KCiAgLyogRW5zdXJlIHByb3BlciBzcGFjaW5nIGNvbnRleHQgZm9yIGJsb2NrcyAqLwogIC5ibG9jay13cmFwcGVyICsgLmJsb2NrLXdyYXBwZXIgLmJsb2NrIHsKICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgfQoKICAvKiBPdmVycmlkZSBmb3IgaGVhZGluZ3MgZm9sbG93aW5nIG90aGVyIGJsb2NrcyAqLwogIC5ibG9jay13cmFwcGVyICsgLmJsb2NrLXdyYXBwZXIgLmJsb2NrLmhlYWRpbmctMSwKICAuYmxvY2std3JhcHBlciArIC5ibG9jay13cmFwcGVyIC5ibG9jay5oZWFkaW5nLTIsCiAgLmJsb2NrLXdyYXBwZXIgKyAuYmxvY2std3JhcHBlciAuYmxvY2suaGVhZGluZy0zIHsKICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgfQoKICAvKiBDb2RlIGFuZCBxdW90ZSBibG9ja3MgbmVlZCBjb25zaXN0ZW50IHNwYWNpbmcgKi8KICAuYmxvY2std3JhcHBlciArIC5ibG9jay13cmFwcGVyIC5ibG9jay5jb2RlLAogIC5ibG9jay13cmFwcGVyICsgLmJsb2NrLXdyYXBwZXIgLmJsb2NrLnF1b3RlIHsKICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgfQoKICAuZHJhZy1oYW5kbGUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogLTI4cHg7CiAgICB0b3A6IDUwJTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgIHdpZHRoOiAyNHB4OwogICAgaGVpZ2h0OiAyNHB4OwogICAgY3Vyc29yOiBncmFiOwogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogIH0KCiAgLmRyYWctaGFuZGxlOjpiZWZvcmUgewogICAgY29udGVudDogIuKLruKLriI7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsZXR0ZXItc3BhY2luZzogLTJweDsKICB9CgogIC5ibG9jay13cmFwcGVyOmhvdmVyIC5kcmFnLWhhbmRsZSB7CiAgICBvcGFjaXR5OiAxOwogIH0KCiAgLmRyYWctaGFuZGxlOmhvdmVyIHsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICB9CgogIC5kcmFnLWhhbmRsZTphY3RpdmUgewogICAgY3Vyc29yOiBncmFiYmluZzsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgfQoKICAuYmxvY2std3JhcHBlci5kcmFnZ2luZyB7CiAgICBvcGFjaXR5OiAwLjg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDIwMDE7CiAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7CiAgfQoKCiAgLyogQmxvY2tzIHRoYXQgc2hvdWxkIG1vdmUgb3V0IG9mIHRoZSB3YXkgKi8KICAuYmxvY2std3JhcHBlci5tb3ZlLWRvd24gewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHZhcigtLWRyYWctb2Zmc2V0LCAwcHgpKTsKICB9CgogIC5ibG9jay13cmFwcGVyLm1vdmUtdXAgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKGNhbGMoLTEgKiB2YXIoLS1kcmFnLW9mZnNldCwgMHB4KSkpOwogIH0KCiAgLyogRHJvcCBpbmRpY2F0b3IgKi8KICAuZHJvcC1pbmRpY2F0b3IgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjA1KSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4wNSkiKX07CiAgICBib3JkZXI6IDJweCBkYXNoZWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIHRyYW5zaXRpb246IHRvcCAwLjJzIGVhc2UsIGhlaWdodCAwLjJzIGVhc2U7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDE5OTk7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIH0KCiAgLyogUmVtb3ZlIG9sZCBkcmFnLW92ZXIgc3R5bGVzICovCiAgLmJsb2NrLXdyYXBwZXIuZHJhZy1vdmVyLWJlZm9yZSwKICAuYmxvY2std3JhcHBlci5kcmFnLW92ZXItYWZ0ZXIgewogICAgLyogTm8gbG9uZ2VyIG5lZWRlZCwgdXNpbmcgZHJvcCBpbmRpY2F0b3IgaW5zdGVhZCAqLwogIH0KCiAgLmVkaXRvci1jb250ZW50LmRyYWdnaW5nICogewogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgfQoKICAvKiBCbG9jayBTZXR0aW5ncyBCdXR0b24gLSBSZW1vdmVkIGluIGZhdm9yIG9mIGNvbnRleHQgbWVudSAqLwoKICAvKiBUZXh0IFNlbGVjdGlvbiBTdHlsZXMgKi8KICAuYmxvY2sgOjpzZWxlY3Rpb24gewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjIpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjIpIil9OwogICAgY29sb3I6IGluaGVyaXQ7CiAgfQoKICAvKiBGb3JtYXR0aW5nIE1lbnUgKi8KICAuZm9ybWF0dGluZy1tZW51IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNik7CiAgICBwYWRkaW5nOiA0cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAycHg7CiAgICB6LWluZGV4OiAxMDAxOwogICAgYW5pbWF0aW9uOiBmYWRlSW5TY2FsZSAwLjE1cyBlYXNlLW91dDsKICB9CgogIEBrZXlmcmFtZXMgZmFkZUluU2NhbGUgewogICAgZnJvbSB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCkgdHJhbnNsYXRlWSgycHgpOwogICAgfQogICAgdG8gewogICAgICBvcGFjaXR5OiAxOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMCk7CiAgICB9CiAgfQoKICAuZm9ybWF0LWJ1dHRvbiB7CiAgICB3aWR0aDogMzJweDsKICAgIGhlaWdodDogMzJweDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICBmb250LXdlaWdodDogNjAwOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogIH0KCiAgLmZvcm1hdC1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogIH0KCiAgLmZvcm1hdC1idXR0b246YWN0aXZlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7CiAgfQoKICAuZm9ybWF0LWJ1dHRvbi5ib2xkIHsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgfQoKICAuZm9ybWF0LWJ1dHRvbi5pdGFsaWMgewogICAgZm9udC1zdHlsZTogaXRhbGljOwogIH0KCiAgLmZvcm1hdC1idXR0b24udW5kZXJsaW5lIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIH0KCiAgLmZvcm1hdC1idXR0b24gLmNvZGUtaWNvbiB7CiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICB9CgogIC8qIEFwcGxpZWQgZm9ybWF0IHN0eWxlcyBpbiBjb250ZW50ICovCiAgLmJsb2NrIHN0cm9uZywKICAuYmxvY2sgYiB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgfQoKICAuYmxvY2sgZW0sCiAgLmJsb2NrIGkgewogICAgZm9udC1zdHlsZTogaXRhbGljOwogIH0KCiAgLmJsb2NrIHUgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgfQoKICAuYmxvY2sgc3RyaWtlLAogIC5ibG9jayBzIHsKICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwogICAgb3BhY2l0eTogMC43OwogIH0KCiAgLmJsb2NrIGNvZGUgewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICB9CgogIC5ibG9jayBhIHsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgfQoKICAuYmxvY2sgYTpob3ZlciB7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogIH0KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5jb252ZXJ0ZXJzLmpzCnZhciBXeXNpd3lnQ29udmVydGVycyA9IGNsYXNzIHsKICBzdGF0aWMgZXNjYXBlSHRtbCh0ZXh0OSkgewogICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBkaXYudGV4dENvbnRlbnQgPSB0ZXh0OTsKICAgIHJldHVybiBkaXYuaW5uZXJIVE1MOwogIH0KICBzdGF0aWMgZm9ybWF0RmlsZVNpemUoYnl0ZXMpIHsKICAgIGlmIChieXRlcyA9PT0gMCkKICAgICAgcmV0dXJuICIwIEJ5dGVzIjsKICAgIGNvbnN0IGs0ID0gMTAyNDsKICAgIGNvbnN0IHNpemVzID0gWyJCeXRlcyIsICJLQiIsICJNQiIsICJHQiJdOwogICAgY29uc3QgaTExID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrNCkpOwogICAgcmV0dXJuIHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coazQsIGkxMSkpLnRvRml4ZWQoMikpICsgIiAiICsgc2l6ZXNbaTExXTsKICB9CiAgc3RhdGljIGdldEh0bWxPdXRwdXQoYmxvY2tzKSB7CiAgICByZXR1cm4gYmxvY2tzLm1hcCgoYmxvY2spID0+IHsKICAgICAgY29uc3QgY29udGVudDMgPSBibG9jay5jb250ZW50LmluY2x1ZGVzKCI8IikgJiYgYmxvY2suY29udGVudC5pbmNsdWRlcygiPiIpID8gYmxvY2suY29udGVudCA6IHRoaXMuZXNjYXBlSHRtbChibG9jay5jb250ZW50KTsKICAgICAgc3dpdGNoIChibG9jay50eXBlKSB7CiAgICAgICAgY2FzZSAicGFyYWdyYXBoIjoKICAgICAgICAgIHJldHVybiBibG9jay5jb250ZW50ID8gYDxwPiR7Y29udGVudDN9PC9wPmAgOiAiIjsKICAgICAgICBjYXNlICJoZWFkaW5nLTEiOgogICAgICAgICAgcmV0dXJuIGA8aDE+JHtjb250ZW50M308L2gxPmA7CiAgICAgICAgY2FzZSAiaGVhZGluZy0yIjoKICAgICAgICAgIHJldHVybiBgPGgyPiR7Y29udGVudDN9PC9oMj5gOwogICAgICAgIGNhc2UgImhlYWRpbmctMyI6CiAgICAgICAgICByZXR1cm4gYDxoMz4ke2NvbnRlbnQzfTwvaDM+YDsKICAgICAgICBjYXNlICJxdW90ZSI6CiAgICAgICAgICByZXR1cm4gYDxibG9ja3F1b3RlPiR7Y29udGVudDN9PC9ibG9ja3F1b3RlPmA7CiAgICAgICAgY2FzZSAiY29kZSI6CiAgICAgICAgICByZXR1cm4gYDxwcmU+PGNvZGU+JHt0aGlzLmVzY2FwZUh0bWwoYmxvY2suY29udGVudCl9PC9jb2RlPjwvcHJlPmA7CiAgICAgICAgY2FzZSAibGlzdCI6CiAgICAgICAgICBjb25zdCBpdGVtcyA9IGJsb2NrLmNvbnRlbnQuc3BsaXQoIlxuIikuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnRyaW0oKSk7CiAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBjb25zdCBsaXN0VGFnID0gYmxvY2subWV0YWRhdGE/Lmxpc3RUeXBlID09PSAib3JkZXJlZCIgPyAib2wiIDogInVsIjsKICAgICAgICAgICAgcmV0dXJuIGA8JHtsaXN0VGFnfT4ke2l0ZW1zLm1hcCgoaXRlbSkgPT4gYDxsaT4ke2l0ZW19PC9saT5gKS5qb2luKCIiKX08LyR7bGlzdFRhZ30+YDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICBjYXNlICJkaXZpZGVyIjoKICAgICAgICAgIHJldHVybiAiPGhyPiI7CiAgICAgICAgY2FzZSAiaW1hZ2UiOgogICAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBibG9jay5tZXRhZGF0YT8udXJsOwogICAgICAgICAgaWYgKGltYWdlVXJsKSB7CiAgICAgICAgICAgIGNvbnN0IGFsdFRleHQgPSB0aGlzLmVzY2FwZUh0bWwoYmxvY2suY29udGVudCB8fCAiSW1hZ2UiKTsKICAgICAgICAgICAgcmV0dXJuIGA8aW1nIHNyYz0iJHtpbWFnZVVybH0iIGFsdD0iJHthbHRUZXh0fSIgLz5gOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIGNhc2UgInlvdXR1YmUiOgogICAgICAgICAgY29uc3QgdmlkZW9JZCA9IGJsb2NrLm1ldGFkYXRhPy52aWRlb0lkOwogICAgICAgICAgaWYgKHZpZGVvSWQpIHsKICAgICAgICAgICAgcmV0dXJuIGA8aWZyYW1lIHdpZHRoPSI1NjAiIGhlaWdodD0iMzE1IiBzcmM9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7dmlkZW9JZH0iIGZyYW1lYm9yZGVyPSIwIiBhbGxvdz0iYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGNsaXBib2FyZC13cml0ZTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZSIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPmA7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgY2FzZSAibWFya2Rvd24iOgogICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJtYXJrZG93bi1jb250ZW50Ij4ke3RoaXMuZXNjYXBlSHRtbChibG9jay5jb250ZW50KX08L2Rpdj5gOwogICAgICAgIGNhc2UgImh0bWwiOgogICAgICAgICAgcmV0dXJuIGJsb2NrLmNvbnRlbnQ7CiAgICAgICAgY2FzZSAiYXR0YWNobWVudCI6CiAgICAgICAgICBjb25zdCBmaWxlcyA9IGJsb2NrLm1ldGFkYXRhPy5maWxlcyB8fCBbXTsKICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0iYXR0YWNobWVudHMiPiR7ZmlsZXMubWFwKChmaWxlKSA9PiBgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1pdGVtIiBkYXRhLWZpbGUtaWQ9IiR7ZmlsZS5pZH0iPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iJHtmaWxlLmRhdGF9IiBkb3dubG9hZD0iJHtmaWxlLm5hbWV9Ij4ke3RoaXMuZXNjYXBlSHRtbChmaWxlLm5hbWUpfTwvYT4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWxlLXNpemUiPigke3RoaXMuZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKX0pPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmA7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBgPHA+JHtjb250ZW50M308L3A+YDsKICAgICAgfQogICAgfSkuZmlsdGVyKChodG1sMjApID0+IGh0bWwyMCAhPT0gIiIpLmpvaW4oIlxuIik7CiAgfQogIHN0YXRpYyBnZXRNYXJrZG93bk91dHB1dChibG9ja3MpIHsKICAgIHJldHVybiBibG9ja3MubWFwKChibG9jaykgPT4gewogICAgICBzd2l0Y2ggKGJsb2NrLnR5cGUpIHsKICAgICAgICBjYXNlICJwYXJhZ3JhcGgiOgogICAgICAgICAgcmV0dXJuIGJsb2NrLmNvbnRlbnQ7CiAgICAgICAgY2FzZSAiaGVhZGluZy0xIjoKICAgICAgICAgIHJldHVybiBgIyAke2Jsb2NrLmNvbnRlbnR9YDsKICAgICAgICBjYXNlICJoZWFkaW5nLTIiOgogICAgICAgICAgcmV0dXJuIGAjIyAke2Jsb2NrLmNvbnRlbnR9YDsKICAgICAgICBjYXNlICJoZWFkaW5nLTMiOgogICAgICAgICAgcmV0dXJuIGAjIyMgJHtibG9jay5jb250ZW50fWA7CiAgICAgICAgY2FzZSAicXVvdGUiOgogICAgICAgICAgcmV0dXJuIGA+ICR7YmxvY2suY29udGVudH1gOwogICAgICAgIGNhc2UgImNvZGUiOgogICAgICAgICAgcmV0dXJuIGBcYFxgXGAKJHtibG9jay5jb250ZW50fQpcYFxgXGBgOwogICAgICAgIGNhc2UgImxpc3QiOgogICAgICAgICAgY29uc3QgaXRlbXMgPSBibG9jay5jb250ZW50LnNwbGl0KCJcbiIpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS50cmltKCkpOwogICAgICAgICAgaWYgKGJsb2NrLm1ldGFkYXRhPy5saXN0VHlwZSA9PT0gIm9yZGVyZWQiKSB7CiAgICAgICAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGluZGV4MikgPT4gYCR7aW5kZXgyICsgMX0uICR7aXRlbX1gKS5qb2luKCJcbiIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSkgPT4gYC0gJHtpdGVtfWApLmpvaW4oIlxuIik7CiAgICAgICAgICB9CiAgICAgICAgY2FzZSAiZGl2aWRlciI6CiAgICAgICAgICByZXR1cm4gIi0tLSI7CiAgICAgICAgY2FzZSAiaW1hZ2UiOgogICAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBibG9jay5tZXRhZGF0YT8udXJsOwogICAgICAgICAgY29uc3QgYWx0VGV4dCA9IGJsb2NrLmNvbnRlbnQgfHwgIkltYWdlIjsKICAgICAgICAgIHJldHVybiBpbWFnZVVybCA/IGAhWyR7YWx0VGV4dH1dKCR7aW1hZ2VVcmx9KWAgOiAiIjsKICAgICAgICBjYXNlICJ5b3V0dWJlIjoKICAgICAgICAgIGNvbnN0IHZpZGVvSWQgPSBibG9jay5tZXRhZGF0YT8udmlkZW9JZDsKICAgICAgICAgIGNvbnN0IHVybCA9IGJsb2NrLm1ldGFkYXRhPy51cmwgfHwgKHZpZGVvSWQgPyBgaHR0cHM6Ly95b3V0dWJlLmNvbS93YXRjaD92PSR7dmlkZW9JZH1gIDogIiIpOwogICAgICAgICAgcmV0dXJuIHVybCA/IGBbWW91VHViZSBWaWRlb10oJHt1cmx9KWAgOiAiIjsKICAgICAgICBjYXNlICJtYXJrZG93biI6CiAgICAgICAgICByZXR1cm4gYmxvY2suY29udGVudDsKICAgICAgICBjYXNlICJodG1sIjoKICAgICAgICAgIHJldHVybiBgPCEtLSBIVE1MIEJsb2NrCiR7YmxvY2suY29udGVudH0KLS0+YDsKICAgICAgICBjYXNlICJhdHRhY2htZW50IjoKICAgICAgICAgIGNvbnN0IGZpbGVzID0gYmxvY2subWV0YWRhdGE/LmZpbGVzIHx8IFtdOwogICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgcmV0dXJuIGZpbGVzLm1hcCgoZmlsZSkgPT4gYC0gWyR7ZmlsZS5uYW1lfV0oJHtmaWxlLmRhdGF9KWApLmpvaW4oIlxuIik7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBibG9jay5jb250ZW50OwogICAgICB9CiAgICB9KS5maWx0ZXIoKG1kKSA9PiBtZCAhPT0gIiIpLmpvaW4oIlxuXG4iKTsKICB9CiAgc3RhdGljIHBhcnNlSHRtbFRvQmxvY2tzKGh0bWwyMCkgewogICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpOwogICAgY29uc3QgZG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhodG1sMjAsICJ0ZXh0L2h0bWwiKTsKICAgIGNvbnN0IGJsb2NrcyA9IFtdOwogICAgY29uc3QgcHJvY2Vzc05vZGUgPSAobm9kZTIpID0+IHsKICAgICAgaWYgKG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiBub2RlMi50ZXh0Q29udGVudD8udHJpbSgpKSB7CiAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgICAgIGNvbnRlbnQ6IG5vZGUyLnRleHRDb250ZW50LnRyaW0oKQogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkgewogICAgICAgIGNvbnN0IGVsZW1lbnQ0ID0gbm9kZTI7CiAgICAgICAgY29uc3QgdGFnTmFtZSA9IGVsZW1lbnQ0LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKICAgICAgICBzd2l0Y2ggKHRhZ05hbWUpIHsKICAgICAgICAgIGNhc2UgInAiOgogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgICAgICAgICAgY29udGVudDogZWxlbWVudDQuaW5uZXJIVE1MIHx8ICIiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImgxIjoKICAgICAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTEiLAogICAgICAgICAgICAgIGNvbnRlbnQ6IGVsZW1lbnQ0LmlubmVySFRNTCB8fCAiIgogICAgICAgICAgICB9KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJoMiI6CiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgICAgICAgICBjb250ZW50OiBlbGVtZW50NC5pbm5lckhUTUwgfHwgIiIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiaDMiOgogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogImhlYWRpbmctMyIsCiAgICAgICAgICAgICAgY29udGVudDogZWxlbWVudDQuaW5uZXJIVE1MIHx8ICIiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImJsb2NrcXVvdGUiOgogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogInF1b3RlIiwKICAgICAgICAgICAgICBjb250ZW50OiBlbGVtZW50NC5pbm5lckhUTUwgfHwgIiIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAicHJlIjoKICAgICAgICAgIGNhc2UgImNvZGUiOgogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogImNvZGUiLAogICAgICAgICAgICAgIGNvbnRlbnQ6IGVsZW1lbnQ0LnRleHRDb250ZW50IHx8ICIiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInVsIjoKICAgICAgICAgIGNhc2UgIm9sIjoKICAgICAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gQXJyYXkuZnJvbShlbGVtZW50NC5xdWVyeVNlbGVjdG9yQWxsKCJsaSIpKTsKICAgICAgICAgICAgY29uc3QgY29udGVudDMgPSBsaXN0SXRlbXMubWFwKChsaTIpID0+IGxpMi5pbm5lckhUTUwgfHwgIiIpLmpvaW4oIlxuIik7CiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgICAgICB0eXBlOiAibGlzdCIsCiAgICAgICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICAgICAgbWV0YWRhdGE6IHsgbGlzdFR5cGU6IHRhZ05hbWUgPT09ICJvbCIgPyAib3JkZXJlZCIgOiAiYnVsbGV0IiB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImhyIjoKICAgICAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgICAgIHR5cGU6ICJkaXZpZGVyIiwKICAgICAgICAgICAgICBjb250ZW50OiAiICIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiaW1nIjoKICAgICAgICAgICAgY29uc3QgaW1nRWxlbWVudCA9IGVsZW1lbnQ0OwogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogImltYWdlIiwKICAgICAgICAgICAgICBjb250ZW50OiBpbWdFbGVtZW50LmFsdCB8fCAiIiwKICAgICAgICAgICAgICBtZXRhZGF0YTogeyB1cmw6IGltZ0VsZW1lbnQuc3JjIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgZWxlbWVudDQuY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZCkgPT4gcHJvY2Vzc05vZGUoY2hpbGQpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBkb2MuYm9keS5jaGlsZE5vZGVzLmZvckVhY2goKG5vZGUyKSA9PiBwcm9jZXNzTm9kZShub2RlMikpOwogICAgcmV0dXJuIGJsb2NrczsKICB9CiAgc3RhdGljIHBhcnNlTWFya2Rvd25Ub0Jsb2NrcyhtYXJrZG93bikgewogICAgY29uc3QgbGluZXMgPSBtYXJrZG93bi5zcGxpdCgiXG4iKTsKICAgIGNvbnN0IGJsb2NrcyA9IFtdOwogICAgbGV0IGN1cnJlbnRMaXN0SXRlbXMgPSBbXTsKICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGxpbmVzLmxlbmd0aDsgaTExKyspIHsKICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2kxMV07CiAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoIiMgIikpIHsKICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTEiLAogICAgICAgICAgY29udGVudDogbGluZS5zdWJzdHJpbmcoMikKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoIiMjICIpKSB7CiAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgICAgIGNvbnRlbnQ6IGxpbmUuc3Vic3RyaW5nKDMpCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKCIjIyMgIikpIHsKICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICAgICAgY29udGVudDogbGluZS5zdWJzdHJpbmcoNCkKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoIj4gIikpIHsKICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgIHR5cGU6ICJxdW90ZSIsCiAgICAgICAgICBjb250ZW50OiBsaW5lLnN1YnN0cmluZygyKQogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgiYGBgIikpIHsKICAgICAgICBjb25zdCBjb2RlTGluZXMgPSBbXTsKICAgICAgICBpMTErKzsKICAgICAgICB3aGlsZSAoaTExIDwgbGluZXMubGVuZ3RoICYmICFsaW5lc1tpMTFdLnN0YXJ0c1dpdGgoImBgYCIpKSB7CiAgICAgICAgICBjb2RlTGluZXMucHVzaChsaW5lc1tpMTFdKTsKICAgICAgICAgIGkxMSsrOwogICAgICAgIH0KICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgIHR5cGU6ICJjb2RlIiwKICAgICAgICAgIGNvbnRlbnQ6IGNvZGVMaW5lcy5qb2luKCJcbiIpCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAobGluZS5tYXRjaCgvXihcKnwtKSAvKSkgewogICAgICAgIGN1cnJlbnRMaXN0SXRlbXMucHVzaChsaW5lLnN1YnN0cmluZygyKSk7CiAgICAgICAgaWYgKGkxMSA9PT0gbGluZXMubGVuZ3RoIC0gMSB8fCAhbGluZXNbaTExICsgMV0ubWF0Y2goL14oXCp8LSkgLykpIHsKICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgIHR5cGU6ICJsaXN0IiwKICAgICAgICAgICAgY29udGVudDogY3VycmVudExpc3RJdGVtcy5qb2luKCJcbiIpLAogICAgICAgICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogImJ1bGxldCIgfQogICAgICAgICAgfSk7CiAgICAgICAgICBjdXJyZW50TGlzdEl0ZW1zID0gW107CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGxpbmUubWF0Y2goL15cZCtcLiAvKSkgewogICAgICAgIGN1cnJlbnRMaXN0SXRlbXMucHVzaChsaW5lLnJlcGxhY2UoL15cZCtcLiAvLCAiIikpOwogICAgICAgIGlmIChpMTEgPT09IGxpbmVzLmxlbmd0aCAtIDEgfHwgIWxpbmVzW2kxMSArIDFdLm1hdGNoKC9eXGQrXC4gLykpIHsKICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgIHR5cGU6ICJsaXN0IiwKICAgICAgICAgICAgY29udGVudDogY3VycmVudExpc3RJdGVtcy5qb2luKCJcbiIpLAogICAgICAgICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogIm9yZGVyZWQiIH0KICAgICAgICAgIH0pOwogICAgICAgICAgY3VycmVudExpc3RJdGVtcyA9IFtdOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChsaW5lID09PSAiLS0tIiB8fCBsaW5lID09PSAiKioqIiB8fCBsaW5lID09PSAiX19fIikgewogICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgdHlwZTogImRpdmlkZXIiLAogICAgICAgICAgY29udGVudDogIiAiCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAobGluZS5tYXRjaCgvXiFcWyhbXlxdXSopXF1cKChbXlwpXSspXCkkLykpIHsKICAgICAgICBjb25zdCBtYXRjaDIgPSBsaW5lLm1hdGNoKC9eIVxbKFteXF1dKilcXVwoKFteXCldKylcKSQvKTsKICAgICAgICBpZiAobWF0Y2gyKSB7CiAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgICB0eXBlOiAiaW1hZ2UiLAogICAgICAgICAgICBjb250ZW50OiBtYXRjaDJbMV0gfHwgIiIsCiAgICAgICAgICAgIG1ldGFkYXRhOiB7IHVybDogbWF0Y2gyWzJdIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChsaW5lLnRyaW0oKSkgewogICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgICAgICBjb250ZW50OiBsaW5lCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBibG9ja3M7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmJsb2Nrcy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgV3lzaXd5Z0Jsb2NrcyA9IGNsYXNzIHsKICBzdGF0aWMgcmVuZGVyTGlzdENvbnRlbnQoY29udGVudDMsIG1ldGFkYXRhKSB7CiAgICBjb25zdCBpdGVtcyA9IGNvbnRlbnQzLnNwbGl0KCJcbiIpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS50cmltKCkpOwogICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkKICAgICAgcmV0dXJuICIiOwogICAgY29uc3QgbGlzdFRhZyA9IG1ldGFkYXRhPy5saXN0VHlwZSA9PT0gIm9yZGVyZWQiID8gIm9sIiA6ICJ1bCI7CiAgICByZXR1cm4gYDwke2xpc3RUYWd9PiR7aXRlbXMubWFwKChpdGVtKSA9PiBgPGxpPiR7aXRlbX08L2xpPmApLmpvaW4oIiIpfTwvJHtsaXN0VGFnfT5gOwogIH0KICBzdGF0aWMgcmVuZGVyQmxvY2soYmxvY2ssIGlzU2VsZWN0ZWQsIGhhbmRsZXJzMikgewogICAgaWYgKGJsb2NrLnR5cGUgPT09ICJkaXZpZGVyIikgewogICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9ImJsb2NrIGRpdmlkZXIiCiAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICA+CiAgICAgICAgICA8aHI+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAoYmxvY2sudHlwZSA9PT0gImxpc3QiKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgICA8ZGl2CiAgICAgICAgICBjbGFzcz0iYmxvY2sgbGlzdCAke2lzU2VsZWN0ZWQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICBjb250ZW50ZWRpdGFibGU9InRydWUiCiAgICAgICAgICBAaW5wdXQ9IiR7aGFuZGxlcnMyLm9uSW5wdXR9IgogICAgICAgICAgQGtleWRvd249IiR7aGFuZGxlcnMyLm9uS2V5RG93bn0iCiAgICAgICAgICBAZm9jdXM9IiR7aGFuZGxlcnMyLm9uRm9jdXN9IgogICAgICAgICAgQGJsdXI9IiR7aGFuZGxlcnMyLm9uQmx1cn0iCiAgICAgICAgICBAY29tcG9zaXRpb25zdGFydD0iJHtoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0fSIKICAgICAgICAgIEBjb21wb3NpdGlvbmVuZD0iJHtoYW5kbGVyczIub25Db21wb3NpdGlvbkVuZH0iCiAgICAgICAgICBAbW91c2V1cD0iJHsoZTExKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coIkJsb2NrIG1vdXNldXAgZXZlbnQgZmlyZWQiKTsKICAgICAgICBpZiAoaGFuZGxlcnMyLm9uTW91c2VVcCkKICAgICAgICAgIGhhbmRsZXJzMi5vbk1vdXNlVXAoZTExKTsKICAgICAgfX0iCiAgICAgICAgICAuaW5uZXJIVE1MPSIke3RoaXMucmVuZGVyTGlzdENvbnRlbnQoYmxvY2suY29udGVudCwgYmxvY2subWV0YWRhdGEpfSIKICAgICAgICA+PC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAoYmxvY2sudHlwZSA9PT0gImNvZGUiKSB7CiAgICAgIGNvbnN0IGxhbmd1YWdlID0gYmxvY2subWV0YWRhdGE/Lmxhbmd1YWdlIHx8ICJwbGFpbiB0ZXh0IjsKICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYmxvY2stY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtbGFuZ3VhZ2UiPiR7bGFuZ3VhZ2V9PC9kaXY+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJibG9jayAke2Jsb2NrLnR5cGV9ICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICAgICAgQGlucHV0PSIke2hhbmRsZXJzMi5vbklucHV0fSIKICAgICAgICAgICAgQGtleWRvd249IiR7aGFuZGxlcnMyLm9uS2V5RG93bn0iCiAgICAgICAgICAgIEBmb2N1cz0iJHtoYW5kbGVyczIub25Gb2N1c30iCiAgICAgICAgICAgIEBibHVyPSIke2hhbmRsZXJzMi5vbkJsdXJ9IgogICAgICAgICAgICBAY29tcG9zaXRpb25zdGFydD0iJHtoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0fSIKICAgICAgICAgICAgQGNvbXBvc2l0aW9uZW5kPSIke2hhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kfSIKICAgICAgICAgICAgQG1vdXNldXA9IiR7KGUxMSkgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJCbG9jayBtb3VzZXVwIGV2ZW50IGZpcmVkIik7CiAgICAgICAgaWYgKGhhbmRsZXJzMi5vbk1vdXNlVXApCiAgICAgICAgICBoYW5kbGVyczIub25Nb3VzZVVwKGUxMSk7CiAgICAgIH19IgogICAgICAgICAgICAudGV4dENvbnRlbnQ9IiR7YmxvY2suY29udGVudCB8fCAiIn0iCiAgICAgICAgICA+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBjb25zdCBibG9ja0VsZW1lbnQgPSBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayAke2Jsb2NrLnR5cGV9ICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICAgIEBpbnB1dD0iJHtoYW5kbGVyczIub25JbnB1dH0iCiAgICAgICAgQGtleWRvd249IiR7aGFuZGxlcnMyLm9uS2V5RG93bn0iCiAgICAgICAgQGZvY3VzPSIke2hhbmRsZXJzMi5vbkZvY3VzfSIKICAgICAgICBAYmx1cj0iJHtoYW5kbGVyczIub25CbHVyfSIKICAgICAgICBAY29tcG9zaXRpb25zdGFydD0iJHtoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0fSIKICAgICAgICBAY29tcG9zaXRpb25lbmQ9IiR7aGFuZGxlcnMyLm9uQ29tcG9zaXRpb25FbmR9IgogICAgICAgIEBtb3VzZXVwPSIkeyhlMTEpID0+IHsKICAgICAgY29uc29sZS5sb2coIkJsb2NrIG1vdXNldXAgZXZlbnQgZmlyZWQiKTsKICAgICAgaWYgKGhhbmRsZXJzMi5vbk1vdXNlVXApCiAgICAgICAgaGFuZGxlcnMyLm9uTW91c2VVcChlMTEpOwogICAgfX0iCiAgICAgICAgLmlubmVySFRNTD0iJHtibG9jay5jb250ZW50IHx8ICIifSIKICAgICAgPjwvZGl2PgogICAgYDsKICAgIHJldHVybiBibG9ja0VsZW1lbnQ7CiAgfQogIHN0YXRpYyBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCkgewogICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgaWYgKCFzZWwpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICBpZiAoZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHsKICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXHUyMDBCIik7CiAgICAgIGVsZW1lbnQ0LmFwcGVuZENoaWxkKHRleHROb2RlKTsKICAgICAgcmFuZ2UyLnNldFN0YXJ0KHRleHROb2RlLCAxKTsKICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgbGFzdE5vZGUgPSB0aGlzLmdldExhc3ROb2RlKGVsZW1lbnQ0KTsKICAgICAgaWYgKGxhc3ROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgIHJhbmdlMi5zZXRTdGFydChsYXN0Tm9kZSwgbGFzdE5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByYW5nZTIuc2V0U3RhcnRBZnRlcihsYXN0Tm9kZSk7CiAgICAgIH0KICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgfQogICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOwogICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgICBpZiAoZWxlbWVudDQudGV4dENvbnRlbnQgPT09ICJcdTIwMEIiKSB7CiAgICAgIGVsZW1lbnQ0LnRleHRDb250ZW50ID0gIiI7CiAgICB9CiAgfQogIHN0YXRpYyBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgIGlmIChlbGVtZW50NC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkgewogICAgICByYW5nZTIuc2V0U3RhcnQoZWxlbWVudDQsIDApOwogICAgICByYW5nZTIuY29sbGFwc2UodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBmaXJzdE5vZGUgPSB0aGlzLmdldEZpcnN0Tm9kZShlbGVtZW50NCk7CiAgICAgIGlmIChmaXJzdE5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgICAgcmFuZ2UyLnNldFN0YXJ0KGZpcnN0Tm9kZSwgMCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmFuZ2UyLnNldFN0YXJ0QmVmb3JlKGZpcnN0Tm9kZSk7CiAgICAgIH0KICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgfQogICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOwogICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgfQogIHN0YXRpYyBnZXRMYXN0Tm9kZShlbGVtZW50NCkgewogICAgaWYgKGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH0KICAgIGNvbnN0IGxhc3RDaGlsZCA9IGVsZW1lbnQ0LmNoaWxkTm9kZXNbZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXTsKICAgIGlmIChsYXN0Q2hpbGQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFIHx8IGxhc3RDaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gbGFzdENoaWxkOwogICAgfQogICAgcmV0dXJuIHRoaXMuZ2V0TGFzdE5vZGUobGFzdENoaWxkKTsKICB9CiAgc3RhdGljIGdldEZpcnN0Tm9kZShlbGVtZW50NCkgewogICAgaWYgKGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH0KICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBlbGVtZW50NC5jaGlsZE5vZGVzWzBdOwogICAgaWYgKGZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFIHx8IGZpcnN0Q2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQ7CiAgICB9CiAgICByZXR1cm4gdGhpcy5nZXRGaXJzdE5vZGUoZmlyc3RDaGlsZCk7CiAgfQogIHN0YXRpYyBmb2N1c0xpc3RJdGVtKGxpc3RFbGVtZW50KSB7CiAgICBjb25zdCBmaXJzdExpID0gbGlzdEVsZW1lbnQucXVlcnlTZWxlY3RvcigibGkiKTsKICAgIGlmIChmaXJzdExpKSB7CiAgICAgIGZpcnN0TGkuZm9jdXMoKTsKICAgICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICByYW5nZTIuc2VsZWN0Tm9kZUNvbnRlbnRzKGZpcnN0TGkpOwogICAgICByYW5nZTIuY29sbGFwc2UodHJ1ZSk7CiAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgICB9CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmJsb2Nrb3BlcmF0aW9ucy5qcwp2YXIgV3lzaXd5Z0Jsb2NrT3BlcmF0aW9ucyA9IGNsYXNzIHsKICBjb21wb25lbnQ7CiAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7CiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICB9CiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBibG9jayB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycwogICAqLwogIGNyZWF0ZUJsb2NrKHR5cGU1ID0gInBhcmFncmFwaCIsIGNvbnRlbnQzID0gIiIsIG1ldGFkYXRhKSB7CiAgICByZXR1cm4gewogICAgICBpZDogV3lzaXd5Z1Nob3J0Y3V0cy5nZW5lcmF0ZUJsb2NrSWQoKSwKICAgICAgdHlwZTogdHlwZTUsCiAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICAuLi5tZXRhZGF0YSAmJiB7IG1ldGFkYXRhIH0KICAgIH07CiAgfQogIC8qKgogICAqIEluc2VydHMgYSBibG9jayBhZnRlciB0aGUgc3BlY2lmaWVkIGJsb2NrCiAgICovCiAgYXN5bmMgaW5zZXJ0QmxvY2tBZnRlcihhZnRlckJsb2NrLCBuZXdCbG9jaywgZm9jdXNOZXdCbG9jayA9IHRydWUpIHsKICAgIGNvbnN0IGJsb2NrcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrczsKICAgIGNvbnN0IGJsb2NrSW5kZXggPSBibG9ja3MuZmluZEluZGV4KChiNSkgPT4gYjUuaWQgPT09IGFmdGVyQmxvY2suaWQpOwogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gWwogICAgICAuLi5ibG9ja3Muc2xpY2UoMCwgYmxvY2tJbmRleCArIDEpLAogICAgICBuZXdCbG9jaywKICAgICAgLi4uYmxvY2tzLnNsaWNlKGJsb2NrSW5kZXggKyAxKQogICAgXTsKICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgIGNvbnN0IGFmdGVyV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YWZ0ZXJCbG9jay5pZH0iXWApOwogICAgICBpZiAoYWZ0ZXJXcmFwcGVyKSB7CiAgICAgICAgY29uc3QgbmV3V3JhcHBlciA9IHRoaXMuY29tcG9uZW50LmNyZWF0ZUJsb2NrRWxlbWVudChuZXdCbG9jayk7CiAgICAgICAgYWZ0ZXJXcmFwcGVyLmluc2VydEFkamFjZW50RWxlbWVudCgiYWZ0ZXJlbmQiLCBuZXdXcmFwcGVyKTsKICAgICAgfQogICAgfQogICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgIGlmIChmb2N1c05ld0Jsb2NrICYmIG5ld0Jsb2NrLnR5cGUgIT09ICJkaXZpZGVyIikgewogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDApKTsKICAgICAgYXdhaXQgdGhpcy5mb2N1c0Jsb2NrKG5ld0Jsb2NrLmlkLCAic3RhcnQiKTsKICAgIH0KICB9CiAgLyoqCiAgICogUmVtb3ZlcyBhIGJsb2NrIGJ5IGl0cyBJRAogICAqLwogIHJlbW92ZUJsb2NrKGJsb2NrSWQpIHsKICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gdGhpcy5jb21wb25lbnQuYmxvY2tzLmZpbHRlcigoYjUpID0+IGI1LmlkICE9PSBibG9ja0lkKTsKICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrSWR9Il1gKTsKICAgICAgaWYgKHdyYXBwZXIpIHsKICAgICAgICB3cmFwcGVyLnJlbW92ZSgpOwogICAgICB9CiAgICB9CiAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogIH0KICAvKioKICAgKiBGaW5kcyBhIGJsb2NrIGJ5IGl0cyBJRAogICAqLwogIGZpbmRCbG9jayhibG9ja0lkKSB7CiAgICByZXR1cm4gdGhpcy5jb21wb25lbnQuYmxvY2tzLmZpbmQoKGI1KSA9PiBiNS5pZCA9PT0gYmxvY2tJZCk7CiAgfQogIC8qKgogICAqIEdldHMgdGhlIGluZGV4IG9mIGEgYmxvY2sKICAgKi8KICBnZXRCbG9ja0luZGV4KGJsb2NrSWQpIHsKICAgIHJldHVybiB0aGlzLmNvbXBvbmVudC5ibG9ja3MuZmluZEluZGV4KChiNSkgPT4gYjUuaWQgPT09IGJsb2NrSWQpOwogIH0KICAvKioKICAgKiBGb2N1c2VzIGEgc3BlY2lmaWMgYmxvY2sKICAgKi8KICBhc3luYyBmb2N1c0Jsb2NrKGJsb2NrSWQsIGN1cnNvclBvc2l0aW9uID0gInN0YXJ0IikgewogICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0aGlzLmNvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrSWR9Il1gKTsKICAgIGlmICh3cmFwcGVyRWxlbWVudCkgewogICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICBpZiAoYmxvY2tDb21wb25lbnQpIHsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICAgIGJsb2NrQ29tcG9uZW50LmZvY3VzV2l0aEN1cnNvcihjdXJzb3JQb3NpdGlvbik7CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogVXBkYXRlcyB0aGUgY29udGVudCBvZiBhIGJsb2NrCiAgICovCiAgdXBkYXRlQmxvY2tDb250ZW50KGJsb2NrSWQsIGNvbnRlbnQzKSB7CiAgICBjb25zdCBibG9jayA9IHRoaXMuZmluZEJsb2NrKGJsb2NrSWQpOwogICAgaWYgKGJsb2NrKSB7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBjb250ZW50MzsKICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgIH0KICB9CiAgLyoqCiAgICogVHJhbnNmb3JtcyBhIGJsb2NrIHRvIGEgZGlmZmVyZW50IHR5cGUKICAgKi8KICB0cmFuc2Zvcm1CbG9jayhibG9ja0lkLCBuZXdUeXBlLCBtZXRhZGF0YSkgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmZpbmRCbG9jayhibG9ja0lkKTsKICAgIGlmIChibG9jaykgewogICAgICB0aGlzLmNvbXBvbmVudC5zYXZlVG9IaXN0b3J5KGZhbHNlKTsKICAgICAgYmxvY2sudHlwZSA9IG5ld1R5cGU7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgaWYgKG1ldGFkYXRhKSB7CiAgICAgICAgYmxvY2subWV0YWRhdGEgPSBtZXRhZGF0YTsKICAgICAgfQogICAgICBpZiAodGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChibG9ja0lkKTsKICAgICAgfQogICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgfQogIH0KICAvKioKICAgKiBNb3ZlcyBhIGJsb2NrIHRvIGEgbmV3IHBvc2l0aW9uCiAgICovCiAgbW92ZUJsb2NrKGJsb2NrSWQsIHRhcmdldEluZGV4KSB7CiAgICBjb25zdCBibG9ja3MgPSBbLi4udGhpcy5jb21wb25lbnQuYmxvY2tzXTsKICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0QmxvY2tJbmRleChibG9ja0lkKTsKICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xIHx8IHRhcmdldEluZGV4IDwgMCB8fCB0YXJnZXRJbmRleCA+PSBibG9ja3MubGVuZ3RoKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IFttb3ZlZEJsb2NrXSA9IGJsb2Nrcy5zcGxpY2UoY3VycmVudEluZGV4LCAxKTsKICAgIGJsb2Nrcy5zcGxpY2UodGFyZ2V0SW5kZXgsIDAsIG1vdmVkQmxvY2spOwogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gYmxvY2tzOwogICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICB9CiAgLyoqCiAgICogR2V0cyB0aGUgcHJldmlvdXMgYmxvY2sKICAgKi8KICBnZXRQcmV2aW91c0Jsb2NrKGJsb2NrSWQpIHsKICAgIGNvbnN0IGluZGV4MiA9IHRoaXMuZ2V0QmxvY2tJbmRleChibG9ja0lkKTsKICAgIHJldHVybiBpbmRleDIgPiAwID8gdGhpcy5jb21wb25lbnQuYmxvY2tzW2luZGV4MiAtIDFdIDogbnVsbDsKICB9CiAgLyoqCiAgICogR2V0cyB0aGUgbmV4dCBibG9jawogICAqLwogIGdldE5leHRCbG9jayhibG9ja0lkKSB7CiAgICBjb25zdCBpbmRleDIgPSB0aGlzLmdldEJsb2NrSW5kZXgoYmxvY2tJZCk7CiAgICByZXR1cm4gaW5kZXgyIDwgdGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aCAtIDEgPyB0aGlzLmNvbXBvbmVudC5ibG9ja3NbaW5kZXgyICsgMV0gOiBudWxsOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL2Jsb2NrLmJhc2UuanMKdmFyIEJhc2VCbG9ja0hhbmRsZXIgPSBjbGFzcyB7CiAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgY29tbW9uIHNldHVwCiAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICB9CiAgLy8gQ29tbW9uIHN0eWxlcyBjYW4gYmUgZGVmaW5lZCBoZXJlCiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuICIiOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL2Jsb2NrLnJlZ2lzdHJ5LmpzCnZhciBCbG9ja1JlZ2lzdHJ5ID0gY2xhc3MgewogIHN0YXRpYyBoYW5kbGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgc3RhdGljIHJlZ2lzdGVyKHR5cGU1LCBoYW5kbGVyMikgewogICAgdGhpcy5oYW5kbGVycy5zZXQodHlwZTUsIGhhbmRsZXIyKTsKICB9CiAgc3RhdGljIGdldEhhbmRsZXIodHlwZTUpIHsKICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmdldCh0eXBlNSk7CiAgfQogIHN0YXRpYyBnZXRBbGxUeXBlcygpIHsKICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuaGFuZGxlcnMua2V5cygpKTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy90ZXh0L3BhcmFncmFwaC5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgUGFyYWdyYXBoQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gInBhcmFncmFwaCI7CiAgLy8gVHJhY2sgY3Vyc29yIHBvc2l0aW9uCiAgbGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSAwOwogIGxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICBzZWxlY3Rpb25IYW5kbGVyID0gbnVsbDsKICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSBpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIjsKICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5nZXRQbGFjZWhvbGRlcigpOwogICAgcmV0dXJuIGAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayBwYXJhZ3JhcGgke3NlbGVjdGVkQ2xhc3N9IgogICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICBkYXRhLXBsYWNlaG9sZGVyPSIke3BsYWNlaG9sZGVyfSIKICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICBkYXRhLWJsb2NrLXR5cGU9IiR7YmxvY2sudHlwZX0iCiAgICAgID48L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmICghcGFyYWdyYXBoQmxvY2spIHsKICAgICAgY29uc29sZS5lcnJvcigiUGFyYWdyYXBoQmxvY2tIYW5kbGVyLnNldHVwOiBObyBwYXJhZ3JhcGggYmxvY2sgZWxlbWVudCBmb3VuZCIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoYmxvY2suY29udGVudCAmJiAhcGFyYWdyYXBoQmxvY2suaW5uZXJIVE1MKSB7CiAgICAgIHBhcmFncmFwaEJsb2NrLmlubmVySFRNTCA9IGJsb2NrLmNvbnRlbnQ7CiAgICB9CiAgICBwYXJhZ3JhcGhCbG9jay5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIChlMTEpID0+IHsKICAgICAgaGFuZGxlcnMyLm9uSW5wdXQoZTExKTsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICB9KTsKICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICB9KTsKICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Gb2N1cygpOwogICAgfSk7CiAgICBwYXJhZ3JhcGhCbG9jay5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25CbHVyKCk7CiAgICB9KTsKICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uU3RhcnQoKTsKICAgIH0pOwogICAgcGFyYWdyYXBoQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kKCk7CiAgICB9KTsKICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgICBoYW5kbGVyczIub25Nb3VzZVVwPy4oZTExKTsKICAgIH0pOwogICAgcGFyYWdyYXBoQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZTExKSA9PiB7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgfQogICAgICB9LCAwKTsKICAgIH0pOwogICAgcGFyYWdyYXBoQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICB0aGlzLnNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgcGFyYWdyYXBoQmxvY2ssIGJsb2NrKTsKICB9CiAgc2V0dXBTZWxlY3Rpb25IYW5kbGVyKGVsZW1lbnQ0LCBwYXJhZ3JhcGhCbG9jaywgYmxvY2spIHsKICAgIGNvbnN0IGNoZWNrU2VsZWN0aW9uID0gKCkgPT4gewogICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7CiAgICAgIGlmIChzZWxlY3RlZFRleHQubGVuZ3RoID09PSAwKSB7CiAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICBoYXNTZWxlY3Rpb246IGZhbHNlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHd5c2l3eWdCbG9jazIgPSBwYXJhZ3JhcGhCbG9jay5nZXRSb290Tm9kZSgpLmhvc3Q7CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jazI/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSB3eXNpd3lnQmxvY2syPy5zaGFkb3dSb290OwogICAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICAgIGlmICghc2VsZWN0aW9uSW5mbykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHN0YXJ0SW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00ocGFyYWdyYXBoQmxvY2ssIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpOwogICAgICBjb25zdCBlbmRJbkJsb2NrID0gV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShwYXJhZ3JhcGhCbG9jaywgc2VsZWN0aW9uSW5mby5lbmRDb250YWluZXIpOwogICAgICBpZiAoc3RhcnRJbkJsb2NrIHx8IGVuZEluQmxvY2spIHsKICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0ICE9PSB0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9IHNlbGVjdGVkVGV4dDsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgICAgIGNvbnN0IHJlY3QgPSByYW5nZTIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgdGV4dDogc2VsZWN0ZWRUZXh0LnRyaW0oKSwKICAgICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQsCiAgICAgICAgICAgIHJhbmdlOiByYW5nZTIsCiAgICAgICAgICAgIHJlY3QsCiAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIGNoZWNrU2VsZWN0aW9uKTsKICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IGNoZWNrU2VsZWN0aW9uOwogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gZWxlbWVudDQuY2xvc2VzdCgiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICBpZiAod3lzaXd5Z0Jsb2NrKSB7CiAgICAgIGNvbnN0IG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2sgPSB3eXNpd3lnQmxvY2suZGlzY29ubmVjdGVkQ2FsbGJhY2s7CiAgICAgIHd5c2l3eWdCbG9jay5kaXNjb25uZWN0ZWRDYWxsYmFjayA9IGFzeW5jIGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkhhbmRsZXIpIHsKICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIHRoaXMuc2VsZWN0aW9uSGFuZGxlcik7CiAgICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIgPSBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAob3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjaykgewogICAgICAgICAgYXdhaXQgb3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjay5jYWxsKHd5c2l3eWdCbG9jayk7CiAgICAgICAgfQogICAgICB9LmJpbmQodGhpcyk7CiAgICB9CiAgfQogIGRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIGRldGFpbCkgewogICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLCB7CiAgICAgIGRldGFpbCwKICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgY29tcG9zZWQ6IHRydWUKICAgIH0pOwogICAgZWxlbWVudDQuZGlzcGF0Y2hFdmVudChldmVudCk7CiAgfQogIGdldFN0eWxlcygpIHsKICAgIHJldHVybiBgCiAgICAgIC8qIFBhcmFncmFwaCBzcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgLmJsb2NrLnBhcmFncmFwaCB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgfQogICAgYDsKICB9CiAgZ2V0UGxhY2Vob2xkZXIoKSB7CiAgICByZXR1cm4gIlR5cGUgJy8nIGZvciBjb21tYW5kcy4uLiI7CiAgfQogIC8qKgogICAqIEhlbHBlciB0byBnZXQgdGhlIGxhc3QgdGV4dCBub2RlIGluIGFuIGVsZW1lbnQKICAgKi8KICBnZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQpIHsKICAgIGlmIChlbGVtZW50NC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgfQogICAgZm9yIChsZXQgaTExID0gZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgY29uc3QgbGFzdFRleHQgPSB0aGlzLmdldExhc3RUZXh0Tm9kZShlbGVtZW50NC5jaGlsZE5vZGVzW2kxMV0pOwogICAgICBpZiAobGFzdFRleHQpCiAgICAgICAgcmV0dXJuIGxhc3RUZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIC8vIEhlbHBlciBtZXRob2RzIGZvciBwYXJhZ3JhcGggZnVuY3Rpb25hbGl0eQogIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0LCBjb250ZXh0MikgewogICAgY29uc3QgcGFyYWdyYXBoQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucGFyYWdyYXBoIik7CiAgICBpZiAoIXBhcmFncmFwaEJsb2NrKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gY29udGV4dDI/LmNvbXBvbmVudDsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jaz8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gY29udGV4dDI/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShwYXJhZ3JhcGhCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcikpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCBwcmVDYXJldFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHBhcmFncmFwaEJsb2NrKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgY29uc3QgcG9zaXRpb24zID0gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpLmxlbmd0aDsKICAgIHJldHVybiBwb3NpdGlvbjM7CiAgfQogIGdldENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmICghcGFyYWdyYXBoQmxvY2spCiAgICAgIHJldHVybiAiIjsKICAgIGNvbnN0IGNvbnRlbnQzID0gcGFyYWdyYXBoQmxvY2suaW5uZXJIVE1MIHx8ICIiOwogICAgcmV0dXJuIGNvbnRlbnQzOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MywgY29udGV4dDIpIHsKICAgIGNvbnN0IHBhcmFncmFwaEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpOwogICAgaWYgKCFwYXJhZ3JhcGhCbG9jaykKICAgICAgcmV0dXJuOwogICAgY29uc3QgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBwYXJhZ3JhcGhCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBwYXJhZ3JhcGhCbG9jazsKICAgIHBhcmFncmFwaEJsb2NrLmlubmVySFRNTCA9IGNvbnRlbnQzOwogICAgaWYgKGhhZEZvY3VzKSB7CiAgICAgIHBhcmFncmFwaEJsb2NrLmZvY3VzKCk7CiAgICB9CiAgfQogIHNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmIChwYXJhZ3JhcGhCbG9jaykgewogICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvU3RhcnQocGFyYWdyYXBoQmxvY2spOwogICAgfQogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IHBhcmFncmFwaEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpOwogICAgaWYgKHBhcmFncmFwaEJsb2NrKSB7CiAgICAgIFd5c2l3eWdCbG9ja3Muc2V0Q3Vyc29yVG9FbmQocGFyYWdyYXBoQmxvY2spOwogICAgfQogIH0KICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IHBhcmFncmFwaEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpOwogICAgaWYgKCFwYXJhZ3JhcGhCbG9jaykKICAgICAgcmV0dXJuOwogICAgaWYgKCFwYXJhZ3JhcGhCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgIHBhcmFncmFwaEJsb2NrLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgInRydWUiKTsKICAgIH0KICAgIHBhcmFncmFwaEJsb2NrLmZvY3VzKCk7CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gcGFyYWdyYXBoQmxvY2sgJiYgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCAhPT0gcGFyYWdyYXBoQmxvY2spIHsKICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgcGFyYWdyYXBoQmxvY2suZm9jdXMoKTsKICAgICAgfSk7CiAgICB9CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIsIGNvbnRleHQyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmICghcGFyYWdyYXBoQmxvY2spCiAgICAgIHJldHVybjsKICAgIGlmICghcGFyYWdyYXBoQmxvY2suaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSkgewogICAgICBwYXJhZ3JhcGhCbG9jay5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICB9CiAgICBpZiAocG9zaXRpb24zID09PSAiZW5kIiAmJiBwYXJhZ3JhcGhCbG9jay50ZXh0Q29udGVudCAmJiBwYXJhZ3JhcGhCbG9jay50ZXh0Q29udGVudC5sZW5ndGggPiAwKSB7CiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgaWYgKHNlbCkgewogICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgY29uc3QgbGFzdE5vZGUgPSB0aGlzLmdldExhc3RUZXh0Tm9kZShwYXJhZ3JhcGhCbG9jaykgfHwgcGFyYWdyYXBoQmxvY2s7CiAgICAgICAgaWYgKGxhc3ROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgICAgcmFuZ2UyLnNldFN0YXJ0KGxhc3ROb2RlLCBsYXN0Tm9kZS50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDApOwogICAgICAgICAgcmFuZ2UyLnNldEVuZChsYXN0Tm9kZSwgbGFzdE5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmFuZ2UyLnNlbGVjdE5vZGVDb250ZW50cyhsYXN0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuY29sbGFwc2UoZmFsc2UpOwogICAgICAgIH0KICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgIH0KICAgIH0KICAgIHBhcmFncmFwaEJsb2NrLmZvY3VzKCk7CiAgICBjb25zdCBzZXRDdXJzb3IgPSAoKSA9PiB7CiAgICAgIGlmIChwb3NpdGlvbjMgPT09ICJzdGFydCIpIHsKICAgICAgICB0aGlzLnNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbjMgPT09ICJlbmQiICYmICghcGFyYWdyYXBoQmxvY2sudGV4dENvbnRlbnQgfHwgcGFyYWdyYXBoQmxvY2sudGV4dENvbnRlbnQubGVuZ3RoID09PSAwKSkgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcG9zaXRpb24zID09PSAibnVtYmVyIikgewogICAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24ocGFyYWdyYXBoQmxvY2ssIHBvc2l0aW9uMyk7CiAgICAgIH0KICAgIH07CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2spIHsKICAgICAgc2V0Q3Vyc29yKCk7CiAgICB9IGVsc2UgewogICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHsKICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2spIHsKICAgICAgICAgIHNldEN1cnNvcigpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHBhcmFncmFwaEJsb2NrIHx8IGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IHBhcmFncmFwaEJsb2NrKSB7CiAgICAgICAgICAgICAgc2V0Q3Vyc29yKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIDEwKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KICBnZXRTcGxpdENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmICghcGFyYWdyYXBoQmxvY2spIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCB3eXNpd3lnQmxvY2sgPSBjb250ZXh0Mj8uY29tcG9uZW50OwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gd3lzaXd5Z0Jsb2NrPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSBjb250ZXh0Mj8uc2hhZG93Um9vdDsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgIGlmIChibG9ja1NoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgaWYgKCFzZWxlY3Rpb25JbmZvKSB7CiAgICAgIGlmICh0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uICE9PSBudWxsKSB7CiAgICAgICAgY29uc3QgZnVsbFRleHQgPSBwYXJhZ3JhcGhCbG9jay50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBiZWZvcmU6IGZ1bGxUZXh0LnN1YnN0cmluZygwLCBwb3MpLAogICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShwYXJhZ3JhcGhCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcikpIHsKICAgICAgaWYgKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gIT09IG51bGwpIHsKICAgICAgICBjb25zdCBmdWxsVGV4dCA9IHBhcmFncmFwaEJsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgIGNvbnN0IHBvcyA9IE1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sIGZ1bGxUZXh0Lmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgY3Vyc29yUG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpOwogICAgaWYgKGN1cnNvclBvcyA9PT0gbnVsbCB8fCBjdXJzb3JQb3MgPT09IDApIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBiZWZvcmU6ICIiLAogICAgICAgIGFmdGVyOiBwYXJhZ3JhcGhCbG9jay5pbm5lckhUTUwKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IGJlZm9yZVJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgIGNvbnN0IGFmdGVyUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgYmVmb3JlUmFuZ2Uuc2V0U3RhcnQocGFyYWdyYXBoQmxvY2ssIDApOwogICAgYmVmb3JlUmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgYWZ0ZXJSYW5nZS5zZXRTdGFydChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgIGFmdGVyUmFuZ2Uuc2V0RW5kKHBhcmFncmFwaEJsb2NrLCBwYXJhZ3JhcGhCbG9jay5jaGlsZE5vZGVzLmxlbmd0aCk7CiAgICBjb25zdCBiZWZvcmVGcmFnbWVudCA9IGJlZm9yZVJhbmdlLmNsb25lQ29udGVudHMoKTsKICAgIGNvbnN0IGFmdGVyRnJhZ21lbnQgPSBhZnRlclJhbmdlLmNsb25lQ29udGVudHMoKTsKICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHRlbXBEaXYuYXBwZW5kQ2hpbGQoYmVmb3JlRnJhZ21lbnQpOwogICAgY29uc3QgYmVmb3JlSHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgdGVtcERpdi5pbm5lckhUTUwgPSAiIjsKICAgIHRlbXBEaXYuYXBwZW5kQ2hpbGQoYWZ0ZXJGcmFnbWVudCk7CiAgICBjb25zdCBhZnRlckh0bWwgPSB0ZW1wRGl2LmlubmVySFRNTDsKICAgIHJldHVybiB7CiAgICAgIGJlZm9yZTogYmVmb3JlSHRtbCwKICAgICAgYWZ0ZXI6IGFmdGVySHRtbAogICAgfTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy90ZXh0L2hlYWRpbmcuYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIEhlYWRpbmdCbG9ja0hhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEJhc2VCbG9ja0hhbmRsZXIgewogIHR5cGU7CiAgbGV2ZWw7CiAgLy8gVHJhY2sgY3Vyc29yIHBvc2l0aW9uCiAgbGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSAwOwogIGxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICBzZWxlY3Rpb25IYW5kbGVyID0gbnVsbDsKICBjb25zdHJ1Y3Rvcih0eXBlNSkgewogICAgc3VwZXIoKTsKICAgIHRoaXMudHlwZSA9IHR5cGU1OwogICAgdGhpcy5sZXZlbCA9IHBhcnNlSW50KHR5cGU1LnNwbGl0KCItIilbMV0pOwogIH0KICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSBpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIjsKICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5nZXRQbGFjZWhvbGRlcigpOwogICAgcmV0dXJuIGAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayBoZWFkaW5nLSR7dGhpcy5sZXZlbH0ke3NlbGVjdGVkQ2xhc3N9IgogICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICBkYXRhLXBsYWNlaG9sZGVyPSIke3BsYWNlaG9sZGVyfSIKICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICBkYXRhLWJsb2NrLXR5cGU9IiR7YmxvY2sudHlwZX0iCiAgICAgID48L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICBpZiAoIWhlYWRpbmdCbG9jaykgewogICAgICBjb25zb2xlLmVycm9yKCJIZWFkaW5nQmxvY2tIYW5kbGVyLnNldHVwOiBObyBoZWFkaW5nIGJsb2NrIGVsZW1lbnQgZm91bmQiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGJsb2NrLmNvbnRlbnQgJiYgIWhlYWRpbmdCbG9jay5pbm5lckhUTUwpIHsKICAgICAgaGVhZGluZ0Jsb2NrLmlubmVySFRNTCA9IGJsb2NrLmNvbnRlbnQ7CiAgICB9CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoZTExKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbklucHV0KGUxMSk7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgIH0pOwogICAgaGVhZGluZ0Jsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Gb2N1cygpOwogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgaGFuZGxlcnMyLm9uQmx1cigpOwogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25zdGFydCIsICgpID0+IHsKICAgICAgaGFuZGxlcnMyLm9uQ29tcG9zaXRpb25TdGFydCgpOwogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kKCk7CiAgICB9KTsKICAgIGhlYWRpbmdCbG9jay5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgKGUxMSkgPT4gewogICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uTW91c2VVcD8uKGUxMSk7CiAgICB9KTsKICAgIGhlYWRpbmdCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICB9CiAgICAgIH0sIDApOwogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICB0aGlzLnNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgaGVhZGluZ0Jsb2NrLCBibG9jayk7CiAgfQogIHNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgaGVhZGluZ0Jsb2NrLCBibG9jaykgewogICAgY29uc3QgY2hlY2tTZWxlY3Rpb24gPSAoKSA9PiB7CiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBzZWxlY3RlZFRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTsKICAgICAgaWYgKHNlbGVjdGVkVGV4dC5sZW5ndGggPT09IDApIHsKICAgICAgICBpZiAodGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgICB0ZXh0OiAiIiwKICAgICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQsCiAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgd3lzaXd5Z0Jsb2NrMiA9IGhlYWRpbmdCbG9jay5nZXRSb290Tm9kZSgpLmhvc3Q7CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jazI/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSB3eXNpd3lnQmxvY2syPy5zaGFkb3dSb290OwogICAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICAgIGlmICghc2VsZWN0aW9uSW5mbykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHN0YXJ0SW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oaGVhZGluZ0Jsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKTsKICAgICAgY29uc3QgZW5kSW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oaGVhZGluZ0Jsb2NrLCBzZWxlY3Rpb25JbmZvLmVuZENvbnRhaW5lcik7CiAgICAgIGlmIChzdGFydEluQmxvY2sgfHwgZW5kSW5CbG9jaykgewogICAgICAgIGlmIChzZWxlY3RlZFRleHQgIT09IHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gc2VsZWN0ZWRUZXh0OwogICAgICAgICAgY29uc3QgcmFuZ2UyID0gV3lzaXd5Z1NlbGVjdGlvbi5jcmVhdGVSYW5nZUZyb21JbmZvKHNlbGVjdGlvbkluZm8pOwogICAgICAgICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgICB0ZXh0OiBzZWxlY3RlZFRleHQudHJpbSgpLAogICAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgICAgcmFuZ2U6IHJhbmdlMiwKICAgICAgICAgICAgcmVjdCwKICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgdGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCB7CiAgICAgICAgICB0ZXh0OiAiIiwKICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgaGFzU2VsZWN0aW9uOiBmYWxzZQogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgY2hlY2tTZWxlY3Rpb24pOwogICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gY2hlY2tTZWxlY3Rpb247CiAgICBjb25zdCB3eXNpd3lnQmxvY2sgPSBoZWFkaW5nQmxvY2suZ2V0Um9vdE5vZGUoKS5ob3N0OwogICAgaWYgKHd5c2l3eWdCbG9jaykgewogICAgICBjb25zdCBvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrID0gd3lzaXd5Z0Jsb2NrLmRpc2Nvbm5lY3RlZENhbGxiYWNrOwogICAgICB3eXNpd3lnQmxvY2suZGlzY29ubmVjdGVkQ2FsbGJhY2sgPSBhc3luYyBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25IYW5kbGVyKSB7CiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCB0aGlzLnNlbGVjdGlvbkhhbmRsZXIpOwogICAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2spIHsKICAgICAgICAgIGF3YWl0IG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh3eXNpd3lnQmxvY2spOwogICAgICAgIH0KICAgICAgfS5iaW5kKHRoaXMpOwogICAgfQogIH0KICBkaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCBkZXRhaWwpIHsKICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCJibG9jay10ZXh0LXNlbGVjdGVkIiwgewogICAgICBkZXRhaWwsCiAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICB9KTsKICAgIGVsZW1lbnQ0LmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogIH0KICBnZXRTdHlsZXMoKSB7CiAgICByZXR1cm4gYAogICAgICAuYmxvY2suaGVhZGluZy0xIHsKICAgICAgICBmb250LXNpemU6IDMycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgICAgIG1hcmdpbjogMjRweCAwIDhweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAuYmxvY2suaGVhZGluZy0yIHsKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICAgIG1hcmdpbjogMjBweCAwIDZweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAuYmxvY2suaGVhZGluZy0zIHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICAgIG1hcmdpbjogMTZweCAwIDRweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CiAgICBgOwogIH0KICBnZXRQbGFjZWhvbGRlcigpIHsKICAgIHN3aXRjaCAodGhpcy5sZXZlbCkgewogICAgICBjYXNlIDE6CiAgICAgICAgcmV0dXJuICJIZWFkaW5nIDEiOwogICAgICBjYXNlIDI6CiAgICAgICAgcmV0dXJuICJIZWFkaW5nIDIiOwogICAgICBjYXNlIDM6CiAgICAgICAgcmV0dXJuICJIZWFkaW5nIDMiOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiAiSGVhZGluZyI7CiAgICB9CiAgfQogIC8qKgogICAqIEhlbHBlciB0byBnZXQgdGhlIGxhc3QgdGV4dCBub2RlIGluIGFuIGVsZW1lbnQKICAgKi8KICBnZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQpIHsKICAgIGlmIChlbGVtZW50NC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgfQogICAgZm9yIChsZXQgaTExID0gZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgY29uc3QgbGFzdFRleHQgPSB0aGlzLmdldExhc3RUZXh0Tm9kZShlbGVtZW50NC5jaGlsZE5vZGVzW2kxMV0pOwogICAgICBpZiAobGFzdFRleHQpCiAgICAgICAgcmV0dXJuIGxhc3RUZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIC8vIEhlbHBlciBtZXRob2RzIGZvciBoZWFkaW5nIGZ1bmN0aW9uYWxpdHkgKG1vc3RseSB0aGUgc2FtZSBhcyBwYXJhZ3JhcGgpCiAgZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICBpZiAoIWhlYWRpbmdCbG9jaykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHd5c2l3eWdCbG9jayA9IGNvbnRleHQyPy5jb21wb25lbnQ7CiAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB3eXNpd3lnQmxvY2s/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgY29uc3QgcGFyZW50U2hhZG93Um9vdCA9IHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdDsKICAgIGNvbnN0IGJsb2NrU2hhZG93Um9vdCA9IGNvbnRleHQyPy5zaGFkb3dSb290OwogICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgIGlmIChwYXJlbnRTaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgaWYgKGJsb2NrU2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChibG9ja1NoYWRvd1Jvb3QpOwogICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICBpZiAoIXNlbGVjdGlvbkluZm8pIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoIVd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oaGVhZGluZ0Jsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgcHJlQ2FyZXRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoaGVhZGluZ0Jsb2NrKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgY29uc3QgcG9zaXRpb24zID0gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpLmxlbmd0aDsKICAgIHJldHVybiBwb3NpdGlvbjM7CiAgfQogIGdldENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICBpZiAoIWhlYWRpbmdCbG9jaykKICAgICAgcmV0dXJuICIiOwogICAgY29uc3QgY29udGVudDMgPSBoZWFkaW5nQmxvY2suaW5uZXJIVE1MIHx8ICIiOwogICAgcmV0dXJuIGNvbnRlbnQzOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MywgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmICghaGVhZGluZ0Jsb2NrKQogICAgICByZXR1cm47CiAgICBjb25zdCBoYWRGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGhlYWRpbmdCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2s7CiAgICBoZWFkaW5nQmxvY2suaW5uZXJIVE1MID0gY29udGVudDM7CiAgICBpZiAoaGFkRm9jdXMpIHsKICAgICAgaGVhZGluZ0Jsb2NrLmZvY3VzKCk7CiAgICB9CiAgfQogIHNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICBpZiAoaGVhZGluZ0Jsb2NrKSB7CiAgICAgIFd5c2l3eWdCbG9ja3Muc2V0Q3Vyc29yVG9TdGFydChoZWFkaW5nQmxvY2spOwogICAgfQogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmIChoZWFkaW5nQmxvY2spIHsKICAgICAgV3lzaXd5Z0Jsb2Nrcy5zZXRDdXJzb3JUb0VuZChoZWFkaW5nQmxvY2spOwogICAgfQogIH0KICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmICghaGVhZGluZ0Jsb2NrKQogICAgICByZXR1cm47CiAgICBpZiAoIWhlYWRpbmdCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgIGhlYWRpbmdCbG9jay5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICB9CiAgICBoZWFkaW5nQmxvY2suZm9jdXMoKTsKICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBoZWFkaW5nQmxvY2sgJiYgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCAhPT0gaGVhZGluZ0Jsb2NrKSB7CiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gewogICAgICAgIGhlYWRpbmdCbG9jay5mb2N1cygpOwogICAgICB9KTsKICAgIH0KICB9CiAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIiwgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmICghaGVhZGluZ0Jsb2NrKQogICAgICByZXR1cm47CiAgICBpZiAoIWhlYWRpbmdCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgIGhlYWRpbmdCbG9jay5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICB9CiAgICBpZiAocG9zaXRpb24zID09PSAiZW5kIiAmJiBoZWFkaW5nQmxvY2sudGV4dENvbnRlbnQgJiYgaGVhZGluZ0Jsb2NrLnRleHRDb250ZW50Lmxlbmd0aCA+IDApIHsKICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBpZiAoc2VsKSB7CiAgICAgICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICBjb25zdCBsYXN0Tm9kZSA9IHRoaXMuZ2V0TGFzdFRleHROb2RlKGhlYWRpbmdCbG9jaykgfHwgaGVhZGluZ0Jsb2NrOwogICAgICAgIGlmIChsYXN0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgICAgIHJhbmdlMi5zZXRTdGFydChsYXN0Tm9kZSwgbGFzdE5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwKTsKICAgICAgICAgIHJhbmdlMi5zZXRFbmQobGFzdE5vZGUsIGxhc3ROb2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJhbmdlMi5zZWxlY3ROb2RlQ29udGVudHMobGFzdE5vZGUpOwogICAgICAgICAgcmFuZ2UyLmNvbGxhcHNlKGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgIHNlbC5hZGRSYW5nZShyYW5nZTIpOwogICAgICB9CiAgICB9CiAgICBoZWFkaW5nQmxvY2suZm9jdXMoKTsKICAgIGNvbnN0IHNldEN1cnNvciA9ICgpID0+IHsKICAgICAgaWYgKHBvc2l0aW9uMyA9PT0gInN0YXJ0IikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCwgY29udGV4dDIpOwogICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uMyA9PT0gImVuZCIgJiYgKCFoZWFkaW5nQmxvY2sudGV4dENvbnRlbnQgfHwgaGVhZGluZ0Jsb2NrLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gMCkpIHsKICAgICAgICB0aGlzLnNldEN1cnNvclRvRW5kKGVsZW1lbnQ0LCBjb250ZXh0Mik7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBvc2l0aW9uMyA9PT0gIm51bWJlciIpIHsKICAgICAgICBXeXNpd3lnU2VsZWN0aW9uLnNldEN1cnNvclBvc2l0aW9uKGhlYWRpbmdCbG9jaywgcG9zaXRpb24zKTsKICAgICAgfQogICAgfTsKICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gaGVhZGluZ0Jsb2NrKSB7CiAgICAgIHNldEN1cnNvcigpOwogICAgfSBlbHNlIHsKICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGhlYWRpbmdCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2spIHsKICAgICAgICAgIHNldEN1cnNvcigpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGhlYWRpbmdCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2spIHsKICAgICAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMTApOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQogIGdldFNwbGl0Q29udGVudChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmICghaGVhZGluZ0Jsb2NrKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gY29udGV4dDI/LmNvbXBvbmVudDsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jaz8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gY29udGV4dDI/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICBpZiAodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiAhPT0gbnVsbCkgewogICAgICAgIGNvbnN0IGZ1bGxUZXh0ID0gaGVhZGluZ0Jsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgIGNvbnN0IHBvcyA9IE1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sIGZ1bGxUZXh0Lmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKCFXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGhlYWRpbmdCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcikpIHsKICAgICAgaWYgKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gIT09IG51bGwpIHsKICAgICAgICBjb25zdCBmdWxsVGV4dCA9IGhlYWRpbmdCbG9jay50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBiZWZvcmU6IGZ1bGxUZXh0LnN1YnN0cmluZygwLCBwb3MpLAogICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IGN1cnNvclBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQsIGNvbnRleHQyKTsKICAgIGlmIChjdXJzb3JQb3MgPT09IG51bGwgfHwgY3Vyc29yUG9zID09PSAwKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgYmVmb3JlOiAiIiwKICAgICAgICBhZnRlcjogaGVhZGluZ0Jsb2NrLmlubmVySFRNTAogICAgICB9OwogICAgfQogICAgY29uc3QgYmVmb3JlUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgY29uc3QgYWZ0ZXJSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICBiZWZvcmVSYW5nZS5zZXRTdGFydChoZWFkaW5nQmxvY2ssIDApOwogICAgYmVmb3JlUmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgYWZ0ZXJSYW5nZS5zZXRTdGFydChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgIGFmdGVyUmFuZ2Uuc2V0RW5kKGhlYWRpbmdCbG9jaywgaGVhZGluZ0Jsb2NrLmNoaWxkTm9kZXMubGVuZ3RoKTsKICAgIGNvbnN0IGJlZm9yZUZyYWdtZW50ID0gYmVmb3JlUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgY29uc3QgYWZ0ZXJGcmFnbWVudCA9IGFmdGVyUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGVtcERpdi5hcHBlbmRDaGlsZChiZWZvcmVGcmFnbWVudCk7CiAgICBjb25zdCBiZWZvcmVIdG1sID0gdGVtcERpdi5pbm5lckhUTUw7CiAgICB0ZW1wRGl2LmlubmVySFRNTCA9ICIiOwogICAgdGVtcERpdi5hcHBlbmRDaGlsZChhZnRlckZyYWdtZW50KTsKICAgIGNvbnN0IGFmdGVySHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgcmV0dXJuIHsKICAgICAgYmVmb3JlOiBiZWZvcmVIdG1sLAogICAgICBhZnRlcjogYWZ0ZXJIdG1sCiAgICB9OwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvcXVvdGUuYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIFF1b3RlQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gInF1b3RlIjsKICAvLyBUcmFjayBjdXJzb3IgcG9zaXRpb24KICBsYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IDA7CiAgbGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogIHNlbGVjdGlvbkhhbmRsZXIgPSBudWxsOwogIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgY29uc3Qgc2VsZWN0ZWRDbGFzcyA9IGlzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIiOwogICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLmdldFBsYWNlaG9sZGVyKCk7CiAgICByZXR1cm4gYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImJsb2NrIHF1b3RlJHtzZWxlY3RlZENsYXNzfSIKICAgICAgICBjb250ZW50ZWRpdGFibGU9InRydWUiCiAgICAgICAgZGF0YS1wbGFjZWhvbGRlcj0iJHtwbGFjZWhvbGRlcn0iCiAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgZGF0YS1ibG9jay10eXBlPSIke2Jsb2NrLnR5cGV9IgogICAgICA+PC9kaXY+CiAgICBgOwogIH0KICBzZXR1cChlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc3QgcXVvdGVCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpOwogICAgaWYgKCFxdW90ZUJsb2NrKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIlF1b3RlQmxvY2tIYW5kbGVyLnNldHVwOiBObyBxdW90ZSBibG9jayBlbGVtZW50IGZvdW5kIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChibG9jay5jb250ZW50ICYmICFxdW90ZUJsb2NrLmlubmVySFRNTCkgewogICAgICBxdW90ZUJsb2NrLmlubmVySFRNTCA9IGJsb2NrLmNvbnRlbnQ7CiAgICB9CiAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKGUxMSkgPT4gewogICAgICBoYW5kbGVyczIub25JbnB1dChlMTEpOwogICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgIH0KICAgIH0pOwogICAgcXVvdGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgfSk7CiAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Gb2N1cygpOwogICAgfSk7CiAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkJsdXIoKTsKICAgIH0pOwogICAgcXVvdGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbnN0YXJ0IiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0KCk7CiAgICB9KTsKICAgIHF1b3RlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kKCk7CiAgICB9KTsKICAgIHF1b3RlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIChlMTEpID0+IHsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbk1vdXNlVXA/LihlMTEpOwogICAgfSk7CiAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICAgIH0KICAgICAgfSwgMCk7CiAgICB9KTsKICAgIHF1b3RlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICB0aGlzLnNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgcXVvdGVCbG9jaywgYmxvY2spOwogIH0KICBzZXR1cFNlbGVjdGlvbkhhbmRsZXIoZWxlbWVudDQsIHF1b3RlQmxvY2ssIGJsb2NrKSB7CiAgICBjb25zdCBjaGVja1NlbGVjdGlvbiA9ICgpID0+IHsKICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpOwogICAgICBpZiAoc2VsZWN0ZWRUZXh0Lmxlbmd0aCA9PT0gMCkgewogICAgICAgIGlmICh0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgICAgdGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCB7CiAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiBmYWxzZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCB3eXNpd3lnQmxvY2syID0gcXVvdGVCbG9jay5nZXRSb290Tm9kZSgpLmhvc3Q7CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jazI/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSB3eXNpd3lnQmxvY2syPy5zaGFkb3dSb290OwogICAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICAgIGlmICghc2VsZWN0aW9uSW5mbykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHN0YXJ0SW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00ocXVvdGVCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcik7CiAgICAgIGNvbnN0IGVuZEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKHF1b3RlQmxvY2ssIHNlbGVjdGlvbkluZm8uZW5kQ29udGFpbmVyKTsKICAgICAgaWYgKHN0YXJ0SW5CbG9jayB8fCBlbmRJbkJsb2NrKSB7CiAgICAgICAgaWYgKHNlbGVjdGVkVGV4dCAhPT0gdGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSBzZWxlY3RlZFRleHQ7CiAgICAgICAgICBjb25zdCByYW5nZTIgPSBXeXNpd3lnU2VsZWN0aW9uLmNyZWF0ZVJhbmdlRnJvbUluZm8oc2VsZWN0aW9uSW5mbyk7CiAgICAgICAgICBjb25zdCByZWN0ID0gcmFuZ2UyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgdGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCB7CiAgICAgICAgICAgIHRleHQ6IHNlbGVjdGVkVGV4dC50cmltKCksCiAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICByYW5nZTogcmFuZ2UyLAogICAgICAgICAgICByZWN0LAogICAgICAgICAgICBoYXNTZWxlY3Rpb246IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQsCiAgICAgICAgICBoYXNTZWxlY3Rpb246IGZhbHNlCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCBjaGVja1NlbGVjdGlvbik7CiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIgPSBjaGVja1NlbGVjdGlvbjsKICAgIGNvbnN0IHd5c2l3eWdCbG9jayA9IHF1b3RlQmxvY2suZ2V0Um9vdE5vZGUoKS5ob3N0OwogICAgaWYgKHd5c2l3eWdCbG9jaykgewogICAgICBjb25zdCBvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrID0gd3lzaXd5Z0Jsb2NrLmRpc2Nvbm5lY3RlZENhbGxiYWNrOwogICAgICB3eXNpd3lnQmxvY2suZGlzY29ubmVjdGVkQ2FsbGJhY2sgPSBhc3luYyBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25IYW5kbGVyKSB7CiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCB0aGlzLnNlbGVjdGlvbkhhbmRsZXIpOwogICAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2spIHsKICAgICAgICAgIGF3YWl0IG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh3eXNpd3lnQmxvY2spOwogICAgICAgIH0KICAgICAgfS5iaW5kKHRoaXMpOwogICAgfQogIH0KICBkaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCBkZXRhaWwpIHsKICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCJibG9jay10ZXh0LXNlbGVjdGVkIiwgewogICAgICBkZXRhaWwsCiAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICB9KTsKICAgIGVsZW1lbnQ0LmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogIH0KICBnZXRTdHlsZXMoKSB7CiAgICByZXR1cm4gYAogICAgICAvKiBRdW90ZSBzcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgLmJsb2NrLnF1b3RlIHsKICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDA2NmNjIiwgIiM0ZDk0ZmYiKX07CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzU1NSIsICIjYjBiMGIwIil9OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIG1hcmdpbjogMTZweCAwOwogICAgICB9CiAgICBgOwogIH0KICBnZXRQbGFjZWhvbGRlcigpIHsKICAgIHJldHVybiAiQWRkIGEgcXVvdGUuLi4iOwogIH0KICAvLyBIZWxwZXIgbWV0aG9kcyBmb3IgcXVvdGUgZnVuY3Rpb25hbGl0eQogIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0LCBjb250ZXh0MikgewogICAgY29uc3QgcXVvdGVCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpOwogICAgaWYgKCFxdW90ZUJsb2NrKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gY29udGV4dDI/LmNvbXBvbmVudDsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jaz8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gY29udGV4dDI/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShxdW90ZUJsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgcHJlQ2FyZXRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMocXVvdGVCbG9jayk7CiAgICBwcmVDYXJldFJhbmdlLnNldEVuZChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgIGNvbnN0IHBvc2l0aW9uMyA9IHByZUNhcmV0UmFuZ2UudG9TdHJpbmcoKS5sZW5ndGg7CiAgICByZXR1cm4gcG9zaXRpb24zOwogIH0KICBnZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZXh0MikgewogICAgY29uc3QgcXVvdGVCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpOwogICAgaWYgKCFxdW90ZUJsb2NrKQogICAgICByZXR1cm4gIiI7CiAgICBjb25zdCBjb250ZW50MyA9IHF1b3RlQmxvY2suaW5uZXJIVE1MIHx8ICIiOwogICAgcmV0dXJuIGNvbnRlbnQzOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MywgY29udGV4dDIpIHsKICAgIGNvbnN0IHF1b3RlQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTsKICAgIGlmICghcXVvdGVCbG9jaykKICAgICAgcmV0dXJuOwogICAgY29uc3QgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBxdW90ZUJsb2NrIHx8IGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IHF1b3RlQmxvY2s7CiAgICBxdW90ZUJsb2NrLmlubmVySFRNTCA9IGNvbnRlbnQzOwogICAgaWYgKGhhZEZvY3VzKSB7CiAgICAgIHF1b3RlQmxvY2suZm9jdXMoKTsKICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IHF1b3RlQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTsKICAgIGlmIChxdW90ZUJsb2NrKSB7CiAgICAgIFd5c2l3eWdCbG9ja3Muc2V0Q3Vyc29yVG9TdGFydChxdW90ZUJsb2NrKTsKICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICBpZiAocXVvdGVCbG9jaykgewogICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvRW5kKHF1b3RlQmxvY2spOwogICAgfQogIH0KICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IHF1b3RlQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTsKICAgIGlmICghcXVvdGVCbG9jaykKICAgICAgcmV0dXJuOwogICAgaWYgKCFxdW90ZUJsb2NrLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpIHsKICAgICAgcXVvdGVCbG9jay5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICB9CiAgICBxdW90ZUJsb2NrLmZvY3VzKCk7CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gcXVvdGVCbG9jayAmJiBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ICE9PSBxdW90ZUJsb2NrKSB7CiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gewogICAgICAgIHF1b3RlQmxvY2suZm9jdXMoKTsKICAgICAgfSk7CiAgICB9CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIsIGNvbnRleHQyKSB7CiAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICBpZiAoIXF1b3RlQmxvY2spCiAgICAgIHJldHVybjsKICAgIGlmICghcXVvdGVCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgIHF1b3RlQmxvY2suc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCAidHJ1ZSIpOwogICAgfQogICAgcXVvdGVCbG9jay5mb2N1cygpOwogICAgY29uc3Qgc2V0Q3Vyc29yID0gKCkgPT4gewogICAgICBpZiAocG9zaXRpb24zID09PSAic3RhcnQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0LCBjb250ZXh0Mik7CiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24zID09PSAiZW5kIikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcG9zaXRpb24zID09PSAibnVtYmVyIikgewogICAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24ocXVvdGVCbG9jaywgcG9zaXRpb24zKTsKICAgICAgfQogICAgfTsKICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBxdW90ZUJsb2NrIHx8IGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IHF1b3RlQmxvY2spIHsKICAgICAgc2V0Q3Vyc29yKCk7CiAgICB9IGVsc2UgewogICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHsKICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcXVvdGVCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBxdW90ZUJsb2NrKSB7CiAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KICBnZXRTcGxpdENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICBpZiAoIXF1b3RlQmxvY2spIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCB3eXNpd3lnQmxvY2sgPSBjb250ZXh0Mj8uY29tcG9uZW50OwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gd3lzaXd5Z0Jsb2NrPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSBjb250ZXh0Mj8uc2hhZG93Um9vdDsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgIGlmIChibG9ja1NoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgaWYgKCFzZWxlY3Rpb25JbmZvKSB7CiAgICAgIGlmICh0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uICE9PSBudWxsKSB7CiAgICAgICAgY29uc3QgZnVsbFRleHQgPSBxdW90ZUJsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgIGNvbnN0IHBvcyA9IE1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sIGZ1bGxUZXh0Lmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKCFXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKHF1b3RlQmxvY2ssIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpKSB7CiAgICAgIGlmICh0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uICE9PSBudWxsKSB7CiAgICAgICAgY29uc3QgZnVsbFRleHQgPSBxdW90ZUJsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgIGNvbnN0IHBvcyA9IE1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sIGZ1bGxUZXh0Lmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgY3Vyc29yUG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpOwogICAgaWYgKGN1cnNvclBvcyA9PT0gbnVsbCB8fCBjdXJzb3JQb3MgPT09IDApIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBiZWZvcmU6ICIiLAogICAgICAgIGFmdGVyOiBxdW90ZUJsb2NrLmlubmVySFRNTAogICAgICB9OwogICAgfQogICAgY29uc3QgYmVmb3JlUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgY29uc3QgYWZ0ZXJSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICBiZWZvcmVSYW5nZS5zZXRTdGFydChxdW90ZUJsb2NrLCAwKTsKICAgIGJlZm9yZVJhbmdlLnNldEVuZChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgIGFmdGVyUmFuZ2Uuc2V0U3RhcnQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICBhZnRlclJhbmdlLnNldEVuZChxdW90ZUJsb2NrLCBxdW90ZUJsb2NrLmNoaWxkTm9kZXMubGVuZ3RoKTsKICAgIGNvbnN0IGJlZm9yZUZyYWdtZW50ID0gYmVmb3JlUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgY29uc3QgYWZ0ZXJGcmFnbWVudCA9IGFmdGVyUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGVtcERpdi5hcHBlbmRDaGlsZChiZWZvcmVGcmFnbWVudCk7CiAgICBjb25zdCBiZWZvcmVIdG1sID0gdGVtcERpdi5pbm5lckhUTUw7CiAgICB0ZW1wRGl2LmlubmVySFRNTCA9ICIiOwogICAgdGVtcERpdi5hcHBlbmRDaGlsZChhZnRlckZyYWdtZW50KTsKICAgIGNvbnN0IGFmdGVySHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgcmV0dXJuIHsKICAgICAgYmVmb3JlOiBiZWZvcmVIdG1sLAogICAgICBhZnRlcjogYWZ0ZXJIdG1sCiAgICB9OwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvY29kZS5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3NlcnZpY2VzKCk7CnZhciBDb2RlQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gImNvZGUiOwogIGhpZ2hsaWdodFRpbWVyID0gbnVsbDsKICBoaWdobGlnaHRKcyA9IG51bGw7CiAgcmVuZGVyKGJsb2NrLCBpc1NlbGVjdGVkKSB7CiAgICBjb25zdCBsYW5ndWFnZSA9IGJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZSB8fCAidHlwZXNjcmlwdCI7CiAgICBjb25zdCBjb250ZW50MyA9IGJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICBjb25zdCBsaW5lQ291bnQgPSBjb250ZW50My5zcGxpdCgiXG4iKS5sZW5ndGg7CiAgICBsZXQgbGluZU51bWJlcnNIdG1sID0gIiI7CiAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gbGluZUNvdW50OyBpMTErKykgewogICAgICBsaW5lTnVtYmVyc0h0bWwgKz0gYDxkaXYgY2xhc3M9ImxpbmUtbnVtYmVyIj4ke2kxMX08L2Rpdj5gOwogICAgfQogICAgY29uc3QgbGFuZ3VhZ2VPcHRpb25zID0gUFJPR1JBTU1JTkdfTEFOR1VBR0VTLm1hcCgobGFuZykgPT4gewogICAgICBjb25zdCB2YWx1ZTIgPSBsYW5nLnRvTG93ZXJDYXNlKCk7CiAgICAgIHJldHVybiBgPG9wdGlvbiB2YWx1ZT0iJHt2YWx1ZTJ9IiAke3ZhbHVlMiA9PT0gbGFuZ3VhZ2UgPyAic2VsZWN0ZWQiIDogIiJ9PiR7bGFuZ308L29wdGlvbj5gOwogICAgfSkuam9pbigiIik7CiAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJsb2NrLWNvbnRhaW5lciR7aXNTZWxlY3RlZCA/ICIgc2VsZWN0ZWQiIDogIiJ9IiBkYXRhLWxhbmd1YWdlPSIke2xhbmd1YWdlfSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1oZWFkZXIiPgogICAgICAgICAgPHNlbGVjdCBjbGFzcz0ibGFuZ3VhZ2Utc2VsZWN0b3IiIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Ij4KICAgICAgICAgICAgJHtsYW5ndWFnZU9wdGlvbnN9CiAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNvcHktYnV0dG9uIiB0aXRsZT0iQ29weSBjb2RlIj4KICAgICAgICAgICAgPHN2ZyBjbGFzcz0iY29weS1pY29uIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMCA2Ljc1QzAgNS43ODQuNzg0IDUgMS43NSA1aDEuNWEuNzUuNzUgMCAwMTAgMS41aC0xLjVhLjI1LjI1IDAgMDAtLjI1LjI1djcuNWMwIC4xMzguMTEyLjI1LjI1LjI1aDcuNWEuMjUuMjUgMCAwMC4yNS0uMjV2LTEuNWEuNzUuNzUgMCAwMTEuNSAwdjEuNUExLjc1IDEuNzUgMCAwMTkuMjUgMTZoLTcuNUExLjc1IDEuNzUgMCAwMTAgMTQuMjV2LTcuNXoiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNNSAxLjc1QzUgLjc4NCA1Ljc4NCAwIDYuNzUgMGg3LjVDMTUuMjE2IDAgMTYgLjc4NCAxNiAxLjc1djcuNUExLjc1IDEuNzUgMCAwMTE0LjI1IDExaC03LjVBMS43NSAxLjc1IDAgMDE1IDkuMjV2LTcuNXptMS43NS0uMjVhLjI1LjI1IDAgMDAtLjI1LjI1djcuNWMwIC4xMzguMTEyLjI1LjI1LjI1aDcuNWEuMjUuMjUgMCAwMC4yNS0uMjV2LTcuNWEuMjUuMjUgMCAwMC0uMjUtLjI1aC03LjV6Ij48L3BhdGg+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29weS10ZXh0Ij5Db3B5PC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1ib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtbnVtYmVycyI+JHtsaW5lTnVtYmVyc0h0bWx9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWNvbnRlbnQiPgogICAgICAgICAgICA8cHJlIGNsYXNzPSJjb2RlLXByZSI+PGNvZGUgY2xhc3M9ImNvZGUtZWRpdG9yIiAKICAgICAgICAgICAgICAgICBjb250ZW50ZWRpdGFibGU9InRydWUiCiAgICAgICAgICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICAgICAgICAgZGF0YS1ibG9jay10eXBlPSIke2Jsb2NrLnR5cGV9IgogICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9ImZhbHNlIj4ke3RoaXMuZXNjYXBlSHRtbChjb250ZW50Myl9PC9jb2RlPjwvcHJlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBjb3B5QnV0dG9uID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvcHktYnV0dG9uIik7CiAgICBjb25zdCBsYW5ndWFnZVNlbGVjdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmxhbmd1YWdlLXNlbGVjdG9yIik7CiAgICBpZiAoIWVkaXRvciB8fCAhY29udGFpbmVyKQogICAgICByZXR1cm47CiAgICBpZiAobGFuZ3VhZ2VTZWxlY3RvcikgewogICAgICBsYW5ndWFnZVNlbGVjdG9yLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCBuZXdMYW5ndWFnZSA9IGUxMS50YXJnZXQudmFsdWU7CiAgICAgICAgYmxvY2subWV0YWRhdGEgPSB7IC4uLmJsb2NrLm1ldGFkYXRhLCBsYW5ndWFnZTogbmV3TGFuZ3VhZ2UgfTsKICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCJkYXRhLWxhbmd1YWdlIiwgbmV3TGFuZ3VhZ2UpOwogICAgICAgIGlmIChibG9jay5jb250ZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGVkaXRvcikgewogICAgICAgICAgdGhpcy5hcHBseUhpZ2hsaWdodGluZyhlbGVtZW50NCwgYmxvY2spOwogICAgICAgIH0KICAgICAgICBpZiAoaGFuZGxlcnMyLm9uSW5wdXQpIHsKICAgICAgICAgIGhhbmRsZXJzMi5vbklucHV0KG5ldyBJbnB1dEV2ZW50KCJpbnB1dCIpKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgaWYgKGNvcHlCdXR0b24pIHsKICAgICAgY29weUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCBjb250ZW50MyA9IGVkaXRvci50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICB0cnkgewogICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29udGVudDMpOwogICAgICAgICAgY29uc3QgY29weVRleHQgPSBjb3B5QnV0dG9uLnF1ZXJ5U2VsZWN0b3IoIi5jb3B5LXRleHQiKTsKICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVGV4dCA9IGNvcHlUZXh0LnRleHRDb250ZW50OwogICAgICAgICAgY29weVRleHQudGV4dENvbnRlbnQgPSAiQ29waWVkISI7CiAgICAgICAgICBjb3B5QnV0dG9uLmNsYXNzTGlzdC5hZGQoImNvcGllZCIpOwogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGNvcHlUZXh0LnRleHRDb250ZW50ID0gb3JpZ2luYWxUZXh0OwogICAgICAgICAgICBjb3B5QnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoImNvcGllZCIpOwogICAgICAgICAgfSwgMmUzKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjb3B5OiIsIGVycik7CiAgICAgICAgICBjb25zdCB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7CiAgICAgICAgICB0ZXh0QXJlYS52YWx1ZSA9IGNvbnRlbnQzOwogICAgICAgICAgdGV4dEFyZWEuc3R5bGUucG9zaXRpb24gPSAiZml4ZWQiOwogICAgICAgICAgdGV4dEFyZWEuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dEFyZWEpOwogICAgICAgICAgdGV4dEFyZWEuc2VsZWN0KCk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpOwogICAgICAgICAgICBjb25zdCBjb3B5VGV4dCA9IGNvcHlCdXR0b24ucXVlcnlTZWxlY3RvcigiLmNvcHktdGV4dCIpOwogICAgICAgICAgICBjb25zdCBvcmlnaW5hbFRleHQgPSBjb3B5VGV4dC50ZXh0Q29udGVudDsKICAgICAgICAgICAgY29weVRleHQudGV4dENvbnRlbnQgPSAiQ29waWVkISI7CiAgICAgICAgICAgIGNvcHlCdXR0b24uY2xhc3NMaXN0LmFkZCgiY29waWVkIik7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIGNvcHlUZXh0LnRleHRDb250ZW50ID0gb3JpZ2luYWxUZXh0OwogICAgICAgICAgICAgIGNvcHlCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgiY29waWVkIik7CiAgICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgICB9IGNhdGNoIChlcnIyKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhbGxiYWNrIGNvcHkgZmFpbGVkOiIsIGVycjIpOwogICAgICAgICAgfQogICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0QXJlYSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGxldCBpc0VkaXRpbmcgPSBmYWxzZTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IHsKICAgICAgaXNFZGl0aW5nID0gdHJ1ZTsKICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImVkaXRpbmciKTsKICAgICAgY29uc3QgY29udGVudDMgPSBlZGl0b3IudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgIGVkaXRvci50ZXh0Q29udGVudCA9IGNvbnRlbnQzOwogICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmIChlZGl0b3IuZmlyc3RDaGlsZCkgewogICAgICAgICAgcmFuZ2UyLnNldFN0YXJ0KGVkaXRvci5maXJzdENoaWxkLCAwKTsKICAgICAgICAgIHJhbmdlMi5jb2xsYXBzZSh0cnVlKTsKICAgICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlMik7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaGFuZGxlcnMyLm9uRm9jdXMoKTsKICAgIH0pOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgIGlzRWRpdGluZyA9IGZhbHNlOwogICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiZWRpdGluZyIpOwogICAgICB0aGlzLmFwcGx5SGlnaGxpZ2h0aW5nKGVsZW1lbnQ0LCBibG9jayk7CiAgICAgIGhhbmRsZXJzMi5vbkJsdXIoKTsKICAgIH0pOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKGUxMSkgPT4gewogICAgICBoYW5kbGVyczIub25JbnB1dChlMTEpOwogICAgICB0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGVsZW1lbnQ0KTsKICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaGlnaGxpZ2h0VGltZXIpOwogICAgfSk7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJUYWIiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7CiAgICAgICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAgIik7CiAgICAgICAgICByYW5nZTIuaW5zZXJ0Tm9kZSh0ZXh0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuc2V0U3RhcnRBZnRlcih0ZXh0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuc2V0RW5kQWZ0ZXIodGV4dE5vZGUpOwogICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgICAgICBoYW5kbGVyczIub25JbnB1dChuZXcgSW5wdXRFdmVudCgiaW5wdXQiKSk7CiAgICAgICAgICB0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGVsZW1lbnQ0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChbIkFycm93TGVmdCIsICJBcnJvd1JpZ2h0IiwgIkFycm93VXAiLCAiQXJyb3dEb3duIl0uaW5jbHVkZXMoZTExLmtleSkpIHsKICAgICAgICBjb25zdCBjdXJzb3JQb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gZWRpdG9yLnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgICBpZiAoZTExLmtleSA9PT0gIkFycm93TGVmdCIgJiYgY3Vyc29yUG9zID09PSAwIHx8IGUxMS5rZXkgPT09ICJBcnJvd1JpZ2h0IiAmJiBjdXJzb3JQb3MgPT09IHRleHRMZW5ndGgpIHsKICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJBcnJvd1VwIiB8fCBlMTEua2V5ID09PSAiQXJyb3dEb3duIikgewogICAgICAgICAgY29uc3QgbGluZXMgPSAoZWRpdG9yLnRleHRDb250ZW50IHx8ICIiKS5zcGxpdCgiXG4iKTsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lID0gdGhpcy5nZXRDdXJyZW50TGluZUluZGV4KGVkaXRvcik7CiAgICAgICAgICBpZiAoZTExLmtleSA9PT0gIkFycm93VXAiICYmIGN1cnJlbnRMaW5lID09PSAwIHx8IGUxMS5rZXkgPT09ICJBcnJvd0Rvd24iICYmIGN1cnJlbnRMaW5lID09PSBsaW5lcy5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICB9KTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJwYXN0ZSIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IHRleHQ5ID0gZTExLmNsaXBib2FyZERhdGE/LmdldERhdGEoInRleHQvcGxhaW4iKTsKICAgICAgaWYgKHRleHQ5KSB7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7CiAgICAgICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgICAgIHJhbmdlMi5kZWxldGVDb250ZW50cygpOwogICAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0OSk7CiAgICAgICAgICByYW5nZTIuaW5zZXJ0Tm9kZSh0ZXh0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuc2V0U3RhcnRBZnRlcih0ZXh0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuc2V0RW5kQWZ0ZXIodGV4dE5vZGUpOwogICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgICAgICBoYW5kbGVyczIub25JbnB1dChuZXcgSW5wdXRFdmVudCgiaW5wdXQiKSk7CiAgICAgICAgICB0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGVsZW1lbnQ0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCAoKSA9PiBoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0KCkpOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uZW5kIiwgKCkgPT4gaGFuZGxlcnMyLm9uQ29tcG9zaXRpb25FbmQoKSk7CiAgICBpZiAoYmxvY2suY29udGVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBlZGl0b3IpIHsKICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICB0aGlzLmFwcGx5SGlnaGxpZ2h0aW5nKGVsZW1lbnQ0LCBibG9jayk7CiAgICAgIH0pOwogICAgfQogIH0KICB1cGRhdGVMaW5lTnVtYmVycyhlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICBjb25zdCBsaW5lTnVtYmVyc0NvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5saW5lLW51bWJlcnMiKTsKICAgIGlmICghZWRpdG9yIHx8ICFsaW5lTnVtYmVyc0NvbnRhaW5lcikKICAgICAgcmV0dXJuOwogICAgY29uc3QgY29udGVudDMgPSBlZGl0b3IudGV4dENvbnRlbnQgfHwgIiI7CiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQzLnNwbGl0KCJcbiIpOwogICAgY29uc3QgbGluZUNvdW50ID0gbGluZXMubGVuZ3RoIHx8IDE7CiAgICBsZXQgbGluZU51bWJlcnNIdG1sID0gIiI7CiAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gbGluZUNvdW50OyBpMTErKykgewogICAgICBsaW5lTnVtYmVyc0h0bWwgKz0gYDxkaXYgY2xhc3M9ImxpbmUtbnVtYmVyIj4ke2kxMX08L2Rpdj5gOwogICAgfQogICAgbGluZU51bWJlcnNDb250YWluZXIuaW5uZXJIVE1MID0gbGluZU51bWJlcnNIdG1sOwogIH0KICBnZXRDdXJyZW50TGluZUluZGV4KGVkaXRvcikgewogICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApCiAgICAgIHJldHVybiAwOwogICAgY29uc3QgcmFuZ2UyID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7CiAgICBjb25zdCBwcmVDYXJldFJhbmdlID0gcmFuZ2UyLmNsb25lUmFuZ2UoKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcik7CiAgICBwcmVDYXJldFJhbmdlLnNldEVuZChyYW5nZTIuc3RhcnRDb250YWluZXIsIHJhbmdlMi5zdGFydE9mZnNldCk7CiAgICBjb25zdCB0ZXh0QmVmb3JlQ3Vyc29yID0gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpOwogICAgY29uc3QgbGluZXNCZWZvcmVDdXJzb3IgPSB0ZXh0QmVmb3JlQ3Vyc29yLnNwbGl0KCJcbiIpOwogICAgcmV0dXJuIGxpbmVzQmVmb3JlQ3Vyc29yLmxlbmd0aCAtIDE7CiAgfQogIGFzeW5jIGFwcGx5SGlnaGxpZ2h0aW5nKGVsZW1lbnQ0LCBibG9jaykgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICBpZiAoIWVkaXRvcikKICAgICAgcmV0dXJuOwogICAgaWYgKCF0aGlzLmhpZ2hsaWdodEpzKSB7CiAgICAgIHRoaXMuaGlnaGxpZ2h0SnMgPSBhd2FpdCBEZWVzU2VydmljZUxpYkxvYWRlci5nZXRJbnN0YW5jZSgpLmxvYWRIaWdobGlnaHRKcygpOwogICAgfQogICAgY29uc3QgY3Vyc29yUG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICBjb25zdCBjb250ZW50MyA9IGVkaXRvci50ZXh0Q29udGVudCB8fCAiIjsKICAgIGNvbnN0IGxhbmd1YWdlID0gYmxvY2subWV0YWRhdGE/Lmxhbmd1YWdlIHx8ICJ0eXBlc2NyaXB0IjsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuaGlnaGxpZ2h0SnMuaGlnaGxpZ2h0KGNvbnRlbnQzLCB7CiAgICAgICAgbGFuZ3VhZ2UsCiAgICAgICAgaWdub3JlSWxsZWdhbHM6IHRydWUKICAgICAgfSk7CiAgICAgIGlmIChyZXN1bHQudmFsdWUpIHsKICAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gcmVzdWx0LnZhbHVlOwogICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBlZGl0b3IgJiYgY3Vyc29yUG9zICE9PSBudWxsKSB7CiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgICBXeXNpd3lnU2VsZWN0aW9uLnNldEN1cnNvclBvc2l0aW9uKGVkaXRvciwgY3Vyc29yUG9zKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCJTeW50YXggaGlnaGxpZ2h0aW5nIGZhaWxlZDoiLCBlcnJvcik7CiAgICB9CiAgfQogIGVzY2FwZUh0bWwodGV4dDkpIHsKICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDk7CiAgICByZXR1cm4gZGl2LmlubmVySFRNTDsKICB9CiAgZ2V0Q29udGVudChlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICByZXR1cm4gZWRpdG9yPy50ZXh0Q29udGVudCB8fCAiIjsKICB9CiAgc2V0Q29udGVudChlbGVtZW50NCwgY29udGVudDMpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgaWYgKCFlZGl0b3IpCiAgICAgIHJldHVybjsKICAgIGVkaXRvci50ZXh0Q29udGVudCA9IGNvbnRlbnQzOwogICAgdGhpcy51cGRhdGVMaW5lTnVtYmVycyhlbGVtZW50NCk7CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZWRpdG9yKSB7CiAgICAgIGNvbnN0IGJsb2NrID0gewogICAgICAgIGlkOiBlZGl0b3IuZGF0YXNldC5ibG9ja0lkIHx8ICIiLAogICAgICAgIHR5cGU6ICJjb2RlIiwKICAgICAgICBjb250ZW50OiBjb250ZW50MywKICAgICAgICBtZXRhZGF0YTogewogICAgICAgICAgbGFuZ3VhZ2U6IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWJsb2NrLWNvbnRhaW5lciIpPy5nZXRBdHRyaWJ1dGUoImRhdGEtbGFuZ3VhZ2UiKSB8fCAidHlwZXNjcmlwdCIKICAgICAgICB9CiAgICAgIH07CiAgICAgIHRoaXMuYXBwbHlIaWdobGlnaHRpbmcoZWxlbWVudDQsIGJsb2NrKTsKICAgIH0KICB9CiAgZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgaWYgKCFlZGl0b3IpCiAgICAgIHJldHVybiBudWxsOwogICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApCiAgICAgIHJldHVybiBudWxsOwogICAgY29uc3QgcmFuZ2UyID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7CiAgICBpZiAoIWVkaXRvci5jb250YWlucyhyYW5nZTIuc3RhcnRDb250YWluZXIpKQogICAgICByZXR1cm4gbnVsbDsKICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgcHJlQ2FyZXRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHJhbmdlMi5zdGFydENvbnRhaW5lciwgcmFuZ2UyLnN0YXJ0T2Zmc2V0KTsKICAgIHJldHVybiBwcmVDYXJldFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoOwogIH0KICBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgV3lzaXd5Z1NlbGVjdGlvbi5zZXRDdXJzb3JQb3NpdGlvbihlZGl0b3IsIDApOwogICAgfQogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICBpZiAoZWRpdG9yKSB7CiAgICAgIGNvbnN0IGxlbmd0aCA9IGVkaXRvci50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDA7CiAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24oZWRpdG9yLCBsZW5ndGgpOwogICAgfQogIH0KICBmb2N1cyhlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICBlZGl0b3I/LmZvY3VzKCk7CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgaWYgKCFlZGl0b3IpCiAgICAgIHJldHVybjsKICAgIGVkaXRvci5mb2N1cygpOwogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgaWYgKHBvc2l0aW9uMyA9PT0gInN0YXJ0IikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCk7CiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24zID09PSAiZW5kIikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQpOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwb3NpdGlvbjMgPT09ICJudW1iZXIiKSB7CiAgICAgICAgV3lzaXd5Z1NlbGVjdGlvbi5zZXRDdXJzb3JQb3NpdGlvbihlZGl0b3IsIHBvc2l0aW9uMyk7CiAgICAgIH0KICAgIH0pOwogIH0KICBnZXRTcGxpdENvbnRlbnQoZWxlbWVudDQpIHsKICAgIGNvbnN0IHBvc2l0aW9uMyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgaWYgKHBvc2l0aW9uMyA9PT0gbnVsbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCBjb250ZW50MyA9IHRoaXMuZ2V0Q29udGVudChlbGVtZW50NCk7CiAgICByZXR1cm4gewogICAgICBiZWZvcmU6IGNvbnRlbnQzLnN1YnN0cmluZygwLCBwb3NpdGlvbjMpLAogICAgICBhZnRlcjogY29udGVudDMuc3Vic3RyaW5nKHBvc2l0aW9uMykKICAgIH07CiAgfQogIGdldFN0eWxlcygpIHsKICAgIHJldHVybiBgCiAgICAgIC8qIENvZGUgQmxvY2sgQ29udGFpbmVyIC0gTWluaW1hbGlzdCBzaGFkY24gc3R5bGUgKi8KICAgICAgLmNvZGUtYmxvY2stY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luOiAxMnB4IDA7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtYmxvY2stY29udGFpbmVyLnNlbGVjdGVkIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWJsb2NrLWNvbnRhaW5lci5lZGl0aW5nIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmI3MjgwIiwgIiM5Y2EzYWYiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSGVhZGVyIC0gU2ltcGxpZmllZCAqLwogICAgICAuY29kZS1oZWFkZXIgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KICAgICAgCiAgICAgIC5sYW5ndWFnZS1zZWxlY3RvciB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5sYW5ndWFnZS1zZWxlY3Rvcjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5sYW5ndWFnZS1zZWxlY3Rvcjpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBDb3B5IEJ1dHRvbiAtIE1pbmltYWwgKi8KICAgICAgLmNvcHktYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmI3MjgwIiwgIiM5Y2EzYWYiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbjphY3RpdmUgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbi5jb3BpZWQgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA1OTY2OSIsICIjMTBiOTgxIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29weS1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbjpob3ZlciAuY29weS1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICAgIAogICAgICAuY29weS10ZXh0IHsKICAgICAgICBtaW4td2lkdGg6IDQwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CiAgICAgIAogICAgICAvKiBDb2RlIEJvZHkgKi8KICAgICAgLmNvZGUtYm9keSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogTGluZSBOdW1iZXJzIC0gU3VidGxlICovCiAgICAgIC5saW5lLW51bWJlcnMgewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHBhZGRpbmc6IDEycHggMDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBtaW4td2lkdGg6IDQwcHg7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmxpbmUtbnVtYmVyIHsKICAgICAgICBwYWRkaW5nOiAwIDEycHggMCA4cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM0YjU1NjMiKX07CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzTW9ub0ZvbnRGYW1pbHl9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIENvZGUgQ29udGVudCAqLwogICAgICAuY29kZS1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1wcmUgewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzTW9ub0ZvbnRGYW1pbHl9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxMTE4MjciLCAiI2Y5ZmFmYiIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFBsYWNlaG9sZGVyICovCiAgICAgIC5jb2RlLWVkaXRvcjplbXB0eTo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAiLy8gVHlwZSBvciBwYXN0ZSBjb2RlIGhlcmUuLi4iOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNGI1NTYzIil9OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAvKiBXaGVuIGVkaXRpbmcgKGZvY3VzZWQpLCBzaG93IGdyZXkgdGV4dCB3aXRob3V0IGhpZ2hsaWdodGluZyAqLwogICAgICAuY29kZS1ibG9jay1jb250YWluZXIuZWRpdGluZyAuY29kZS1lZGl0b3IgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWJsb2NrLWNvbnRhaW5lci5lZGl0aW5nIC5jb2RlLWVkaXRvciAqIHsKICAgICAgICBjb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50OwogICAgICB9CiAgICAgIAogICAgICAvKiBTeW50YXggSGlnaGxpZ2h0aW5nIC0gTXV0ZWQgY29sb3JzICovCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1rZXl3b3JkIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkYzI2MjYiLCAiI2Y4NzE3MSIpfTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtc3RyaW5nIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwNTk2NjkiLCAiIzEwYjk4MSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLW51bWJlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjN2MzYWVkIiwgIiNhNzhiZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1mdW5jdGlvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiM2MGE1ZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1jb21tZW50IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2YjcyODAiLCAiIzZiNzI4MCIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy12YXJpYWJsZSwKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWF0dHIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VhNTgwYyIsICIjZmI5MjNjIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtY2xhc3MsCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy10aXRsZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiM2MGE1ZmEiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLXBhcmFtcyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1idWlsdF9pbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjN2MzYWVkIiwgIiNhNzhiZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1saXRlcmFsIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3YzNhZWQiLCAiI2E3OGJmYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLW1ldGEgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtcHVuY3R1YXRpb24gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzM3NDE1MSIsICIjZDFkNWRiIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtdGFnIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkYzI2MjYiLCAiI2Y4NzE3MSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWF0dHJpYnV0ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiM2MGE1ZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1zZWxlY3Rvci10YWcgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZjg3MTcxIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtc2VsZWN0b3ItY2xhc3MgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzI1NjNlYiIsICIjNjBhNWZhIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtc2VsZWN0b3ItaWQgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzdjM2FlZCIsICIjYTc4YmZhIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBTZWxlY3Rpb24gKi8KICAgICAgLmNvZGUtZWRpdG9yOjpzZWxlY3Rpb24sCiAgICAgIC5jb2RlLWVkaXRvciAqOjpzZWxlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDk5LCAxMDIsIDI0MSwgMC4yKSIsICJyZ2JhKDk5LCAxMDIsIDI0MSwgMC4zKSIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgLSBNaW5pbWFsICovCiAgICAgIC5jb2RlLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzRiNTU2MyIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICB9CiAgICBgOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvbGlzdC5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgTGlzdEJsb2NrSGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgQmFzZUJsb2NrSGFuZGxlciB7CiAgdHlwZSA9ICJsaXN0IjsKICAvLyBUcmFjayBjdXJzb3IgcG9zaXRpb24gYW5kIGxpc3Qgc3RhdGUKICBsYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IDA7CiAgbGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogIHNlbGVjdGlvbkhhbmRsZXIgPSBudWxsOwogIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgY29uc3Qgc2VsZWN0ZWRDbGFzcyA9IGlzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIiOwogICAgY29uc3QgbGlzdFR5cGUgPSBibG9jay5tZXRhZGF0YT8ubGlzdFR5cGUgfHwgInVub3JkZXJlZCI7CiAgICBjb25zdCBsaXN0VGFnID0gbGlzdFR5cGUgPT09ICJvcmRlcmVkIiA/ICJvbCIgOiAidWwiOwogICAgY29uc3QgbGlzdENvbnRlbnQgPSB0aGlzLnJlbmRlckxpc3RDb250ZW50KGJsb2NrLmNvbnRlbnQsIGJsb2NrLm1ldGFkYXRhKTsKICAgIHJldHVybiBgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYmxvY2sgbGlzdCR7c2VsZWN0ZWRDbGFzc30iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICAgIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9IgogICAgICAgIGRhdGEtYmxvY2stdHlwZT0iJHtibG9jay50eXBlfSIKICAgICAgPiR7bGlzdENvbnRlbnR9PC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJMaXN0Q29udGVudChjb250ZW50MywgbWV0YWRhdGEpIHsKICAgIGlmICghY29udGVudDMpCiAgICAgIHJldHVybiAiPHVsPjxsaT48L2xpPjwvdWw+IjsKICAgIGNvbnN0IGxpc3RUeXBlID0gbWV0YWRhdGE/Lmxpc3RUeXBlIHx8ICJ1bm9yZGVyZWQiOwogICAgY29uc3QgbGlzdFRhZyA9IGxpc3RUeXBlID09PSAib3JkZXJlZCIgPyAib2wiIDogInVsIjsKICAgIGNvbnN0IGxpbmVzID0gY29udGVudDMuc3BsaXQoIlxuIikuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnRyaW0oKSk7CiAgICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBgPCR7bGlzdFRhZ30+PGxpPjwvbGk+PC8ke2xpc3RUYWd9PmA7CiAgICB9CiAgICBjb25zdCBsaXN0SXRlbXMgPSBsaW5lcy5tYXAoKGxpbmUpID0+IGA8bGk+JHtsaW5lfTwvbGk+YCkuam9pbigiIik7CiAgICByZXR1cm4gYDwke2xpc3RUYWd9PiR7bGlzdEl0ZW1zfTwvJHtsaXN0VGFnfT5gOwogIH0KICBzZXR1cChlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc3QgbGlzdEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLmxpc3QiKTsKICAgIGlmICghbGlzdEJsb2NrKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkxpc3RCbG9ja0hhbmRsZXIuc2V0dXA6IE5vIGxpc3QgYmxvY2sgZWxlbWVudCBmb3VuZCIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoYmxvY2suY29udGVudCAmJiAhbGlzdEJsb2NrLmlubmVySFRNTCkgewogICAgICBsaXN0QmxvY2suaW5uZXJIVE1MID0gdGhpcy5yZW5kZXJMaXN0Q29udGVudChibG9jay5jb250ZW50LCBibG9jay5tZXRhZGF0YSk7CiAgICB9CiAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoZTExKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbklucHV0KGUxMSk7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiICYmICFlMTEuc2hpZnRLZXkpIHsKICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgICAgICAgY29uc3QgY3VycmVudExpID0gcmFuZ2UyLnN0YXJ0Q29udGFpbmVyLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoImxpIik7CiAgICAgICAgICBpZiAoY3VycmVudExpICYmIGN1cnJlbnRMaS50ZXh0Q29udGVudCA9PT0gIiIpIHsKICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICB9KTsKICAgIGxpc3RCbG9jay5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IHsKICAgICAgaGFuZGxlcnMyLm9uRm9jdXMoKTsKICAgIH0pOwogICAgbGlzdEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkJsdXIoKTsKICAgIH0pOwogICAgbGlzdEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uU3RhcnQoKTsKICAgIH0pOwogICAgbGlzdEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uZW5kIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Db21wb3NpdGlvbkVuZCgpOwogICAgfSk7CiAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIChlMTEpID0+IHsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbk1vdXNlVXA/LihlMTEpOwogICAgfSk7CiAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZTExKSA9PiB7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgfQogICAgICB9LCAwKTsKICAgIH0pOwogICAgbGlzdEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwgKGUxMSkgPT4gewogICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgIH0KICAgIH0pOwogICAgdGhpcy5zZXR1cFNlbGVjdGlvbkhhbmRsZXIoZWxlbWVudDQsIGxpc3RCbG9jaywgYmxvY2spOwogIH0KICBzZXR1cFNlbGVjdGlvbkhhbmRsZXIoZWxlbWVudDQsIGxpc3RCbG9jaywgYmxvY2spIHsKICAgIGNvbnN0IGNoZWNrU2VsZWN0aW9uID0gKCkgPT4gewogICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7CiAgICAgIGlmIChzZWxlY3RlZFRleHQubGVuZ3RoID09PSAwKSB7CiAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICBoYXNTZWxlY3Rpb246IGZhbHNlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHd5c2l3eWdCbG9jazIgPSBsaXN0QmxvY2suZ2V0Um9vdE5vZGUoKS5ob3N0OwogICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB3eXNpd3lnQmxvY2syPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgICAgY29uc3QgcGFyZW50U2hhZG93Um9vdCA9IHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdDsKICAgICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gd3lzaXd5Z0Jsb2NrMj8uc2hhZG93Um9vdDsKICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgICAgaWYgKGJsb2NrU2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgICBpZiAoIXNlbGVjdGlvbkluZm8pCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBzdGFydEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGxpc3RCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcik7CiAgICAgIGNvbnN0IGVuZEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGxpc3RCbG9jaywgc2VsZWN0aW9uSW5mby5lbmRDb250YWluZXIpOwogICAgICBpZiAoc3RhcnRJbkJsb2NrIHx8IGVuZEluQmxvY2spIHsKICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0ICE9PSB0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9IHNlbGVjdGVkVGV4dDsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgICAgIGNvbnN0IHJlY3QgPSByYW5nZTIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgdGV4dDogc2VsZWN0ZWRUZXh0LnRyaW0oKSwKICAgICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQsCiAgICAgICAgICAgIHJhbmdlOiByYW5nZTIsCiAgICAgICAgICAgIHJlY3QsCiAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIGNoZWNrU2VsZWN0aW9uKTsKICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IGNoZWNrU2VsZWN0aW9uOwogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gbGlzdEJsb2NrLmdldFJvb3ROb2RlKCkuaG9zdDsKICAgIGlmICh3eXNpd3lnQmxvY2spIHsKICAgICAgY29uc3Qgb3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjayA9IHd5c2l3eWdCbG9jay5kaXNjb25uZWN0ZWRDYWxsYmFjazsKICAgICAgd3lzaXd5Z0Jsb2NrLmRpc2Nvbm5lY3RlZENhbGxiYWNrID0gYXN5bmMgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSGFuZGxlcikgewogICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgdGhpcy5zZWxlY3Rpb25IYW5kbGVyKTsKICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGlmIChvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrKSB7CiAgICAgICAgICBhd2FpdCBvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrLmNhbGwod3lzaXd5Z0Jsb2NrKTsKICAgICAgICB9CiAgICAgIH0uYmluZCh0aGlzKTsKICAgIH0KICB9CiAgZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgZGV0YWlsKSB7CiAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIsIHsKICAgICAgZGV0YWlsLAogICAgICBidWJibGVzOiB0cnVlLAogICAgICBjb21wb3NlZDogdHJ1ZQogICAgfSk7CiAgICBlbGVtZW50NC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICB9CiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuIGAKICAgICAgLyogTGlzdCBzcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgLmJsb2NrLmxpc3QgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ibG9jay5saXN0IHVsLAogICAgICAuYmxvY2subGlzdCBvbCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLmJsb2NrLmxpc3QgbGkgewogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgfQogICAgICAKICAgICAgLmJsb2NrLmxpc3QgbGk6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgYDsKICB9CiAgZ2V0UGxhY2Vob2xkZXIoKSB7CiAgICByZXR1cm4gIiI7CiAgfQogIC8vIEhlbHBlciBtZXRob2RzIGZvciBsaXN0IGZ1bmN0aW9uYWxpdHkKICBnZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCB3eXNpd3lnQmxvY2sgPSBjb250ZXh0Mj8uY29tcG9uZW50OwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gd3lzaXd5Z0Jsb2NrPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSBjb250ZXh0Mj8uc2hhZG93Um9vdDsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgIGlmIChibG9ja1NoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgaWYgKCFzZWxlY3Rpb25JbmZvKQogICAgICByZXR1cm4gbnVsbDsKICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShsaXN0QmxvY2ssIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgcHJlQ2FyZXRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICBwcmVDYXJldFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhsaXN0QmxvY2spOwogICAgcHJlQ2FyZXRSYW5nZS5zZXRFbmQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICByZXR1cm4gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpLmxlbmd0aDsKICB9CiAgZ2V0Q29udGVudChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuICIiOwogICAgY29uc3QgbGlzdEl0ZW1zID0gbGlzdEJsb2NrLnF1ZXJ5U2VsZWN0b3JBbGwoImxpIik7CiAgICBjb25zdCBjb250ZW50MyA9IEFycmF5LmZyb20obGlzdEl0ZW1zKS5tYXAoKGxpMikgPT4gbGkyLnRleHRDb250ZW50IHx8ICIiKS5qb2luKCJcbiIpOwogICAgcmV0dXJuIGNvbnRlbnQzOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MywgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuOwogICAgY29uc3QgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsaXN0QmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gbGlzdEJsb2NrOwogICAgY29uc3QgbGlzdEVsZW1lbnQgPSBsaXN0QmxvY2sucXVlcnlTZWxlY3RvcigidWwsIG9sIik7CiAgICBjb25zdCBpc09yZGVyZWQgPSBsaXN0RWxlbWVudD8udGFnTmFtZSA9PT0gIk9MIjsKICAgIGxpc3RCbG9jay5pbm5lckhUTUwgPSB0aGlzLnJlbmRlckxpc3RDb250ZW50KGNvbnRlbnQzLCB7IGxpc3RUeXBlOiBpc09yZGVyZWQgPyAib3JkZXJlZCIgOiAidW5vcmRlcmVkIiB9KTsKICAgIGlmIChoYWRGb2N1cykgewogICAgICBsaXN0QmxvY2suZm9jdXMoKTsKICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuOwogICAgY29uc3QgZmlyc3RMaSA9IGxpc3RCbG9jay5xdWVyeVNlbGVjdG9yKCJsaSIpOwogICAgaWYgKGZpcnN0TGkpIHsKICAgICAgY29uc3QgdGV4dE5vZGUgPSB0aGlzLmdldEZpcnN0VGV4dE5vZGUoZmlyc3RMaSk7CiAgICAgIGlmICh0ZXh0Tm9kZSkgewogICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIHJhbmdlMi5zZXRTdGFydCh0ZXh0Tm9kZSwgMCk7CiAgICAgICAgcmFuZ2UyLnNldEVuZCh0ZXh0Tm9kZSwgMCk7CiAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlMik7CiAgICAgIH0KICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBsaXN0QmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpOwogICAgaWYgKCFsaXN0QmxvY2spCiAgICAgIHJldHVybjsKICAgIGNvbnN0IGxhc3RMaSA9IGxpc3RCbG9jay5xdWVyeVNlbGVjdG9yKCJsaTpsYXN0LWNoaWxkIik7CiAgICBpZiAobGFzdExpKSB7CiAgICAgIGNvbnN0IHRleHROb2RlID0gdGhpcy5nZXRMYXN0VGV4dE5vZGUobGFzdExpKTsKICAgICAgaWYgKHRleHROb2RlKSB7CiAgICAgICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgY29uc3QgdGV4dExlbmd0aCA9IHRleHROb2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgICByYW5nZTIuc2V0U3RhcnQodGV4dE5vZGUsIHRleHRMZW5ndGgpOwogICAgICAgIHJhbmdlMi5zZXRFbmQodGV4dE5vZGUsIHRleHRMZW5ndGgpOwogICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZTIpOwogICAgICB9CiAgICB9CiAgfQogIGdldEZpcnN0VGV4dE5vZGUoZWxlbWVudDQpIHsKICAgIGlmIChlbGVtZW50NC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgfQogICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGNvbnN0IGZpcnN0VGV4dCA9IHRoaXMuZ2V0Rmlyc3RUZXh0Tm9kZShlbGVtZW50NC5jaGlsZE5vZGVzW2kxMV0pOwogICAgICBpZiAoZmlyc3RUZXh0KQogICAgICAgIHJldHVybiBmaXJzdFRleHQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZ2V0TGFzdFRleHROb2RlKGVsZW1lbnQ0KSB7CiAgICBpZiAoZWxlbWVudDQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH0KICAgIGZvciAobGV0IGkxMSA9IGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgIGNvbnN0IGxhc3RUZXh0ID0gdGhpcy5nZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQuY2hpbGROb2Rlc1tpMTFdKTsKICAgICAgaWYgKGxhc3RUZXh0KQogICAgICAgIHJldHVybiBsYXN0VGV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuOwogICAgaWYgKCFsaXN0QmxvY2suaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSkgewogICAgICBsaXN0QmxvY2suc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCAidHJ1ZSIpOwogICAgfQogICAgbGlzdEJsb2NrLmZvY3VzKCk7CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gbGlzdEJsb2NrICYmIGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgIT09IGxpc3RCbG9jaykgewogICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHsKICAgICAgICBsaXN0QmxvY2suZm9jdXMoKTsKICAgICAgfSk7CiAgICB9CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIsIGNvbnRleHQyKSB7CiAgICBjb25zdCBsaXN0QmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpOwogICAgaWYgKCFsaXN0QmxvY2spCiAgICAgIHJldHVybjsKICAgIGlmICghbGlzdEJsb2NrLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpIHsKICAgICAgbGlzdEJsb2NrLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgInRydWUiKTsKICAgIH0KICAgIGxpc3RCbG9jay5mb2N1cygpOwogICAgY29uc3Qgc2V0Q3Vyc29yID0gKCkgPT4gewogICAgICBpZiAocG9zaXRpb24zID09PSAic3RhcnQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0LCBjb250ZXh0Mik7CiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24zID09PSAiZW5kIikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcG9zaXRpb24zID09PSAibnVtYmVyIikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfQogICAgfTsKICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsaXN0QmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gbGlzdEJsb2NrKSB7CiAgICAgIHNldEN1cnNvcigpOwogICAgfSBlbHNlIHsKICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGxpc3RCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBsaXN0QmxvY2spIHsKICAgICAgICAgIHNldEN1cnNvcigpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQogIGdldFNwbGl0Q29udGVudChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbnVsbDsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy9tZWRpYS9pbWFnZS5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgSW1hZ2VCbG9ja0hhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEJhc2VCbG9ja0hhbmRsZXIgewogIHR5cGUgPSAiaW1hZ2UiOwogIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgY29uc3QgaW1hZ2VVcmwgPSBibG9jay5tZXRhZGF0YT8udXJsOwogICAgY29uc3QgYWx0VGV4dCA9IGJsb2NrLmNvbnRlbnQgfHwgIkltYWdlIjsKICAgIGNvbnN0IGlzTG9hZGluZyA9IGJsb2NrLm1ldGFkYXRhPy5sb2FkaW5nOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iaW1hZ2UtYmxvY2stY29udGFpbmVyJHtpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIn0iIAogICAgICAgICAgIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9IgogICAgICAgICAgIGRhdGEtaGFzLWltYWdlPSIkeyEhaW1hZ2VVcmx9IgogICAgICAgICAgIHRhYmluZGV4PSIwIj4KICAgICAgICAke2lzTG9hZGluZyA/IHRoaXMucmVuZGVyTG9hZGluZygpIDogaW1hZ2VVcmwgPyB0aGlzLnJlbmRlckltYWdlKGltYWdlVXJsLCBhbHRUZXh0KSA6IHRoaXMucmVuZGVyUGxhY2Vob2xkZXIoKX0KICAgICAgICA8aW5wdXQgdHlwZT0iZmlsZSIgCiAgICAgICAgICAgICAgIGNsYXNzPSJpbWFnZS1maWxlLWlucHV0IiAKICAgICAgICAgICAgICAgYWNjZXB0PSJpbWFnZS8qIiAKICAgICAgICAgICAgICAgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IiAvPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlclBsYWNlaG9sZGVyKCkgewogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iaW1hZ2UtdXBsb2FkLXBsYWNlaG9sZGVyIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyI+CiAgICAgICAgPGRpdiBjbGFzcz0idXBsb2FkLWljb24iIHN0eWxlPSJwb2ludGVyLWV2ZW50czogbm9uZTsiPgogICAgICAgICAgPHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS41Ij4KICAgICAgICAgICAgPHJlY3QgeD0iMyIgeT0iMyIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiByeD0iMiIgcnk9IjIiLz4KICAgICAgICAgICAgPGNpcmNsZSBjeD0iOC41IiBjeT0iOC41IiByPSIxLjUiLz4KICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz0iMjEgMTUgMTYgMTAgNSAyMSIvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idXBsb2FkLXRleHQiIHN0eWxlPSJwb2ludGVyLWV2ZW50czogbm9uZTsiPkNsaWNrIHRvIHVwbG9hZCBhbiBpbWFnZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InVwbG9hZC1oaW50IiBzdHlsZT0icG9pbnRlci1ldmVudHM6IG5vbmU7Ij5vciBkcmFnIGFuZCBkcm9wPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVySW1hZ2UodXJsLCBhbHRUZXh0KSB7CiAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1jb250YWluZXIiPgogICAgICAgIDxpbWcgc3JjPSIke3VybH0iIGFsdD0iJHt0aGlzLmVzY2FwZUh0bWwoYWx0VGV4dCl9IiAvPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlckxvYWRpbmcoKSB7CiAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1sb2FkaW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctdGV4dCI+VXBsb2FkaW5nIGltYWdlLi4uPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgIGNvbnN0IGNvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IGZpbGVJbnB1dCA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS1maWxlLWlucHV0Iik7CiAgICBpZiAoIWNvbnRhaW5lcikgewogICAgICBjb25zb2xlLmVycm9yKCJJbWFnZUJsb2NrSGFuZGxlcjogQ291bGQgbm90IGZpbmQgY29udGFpbmVyIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghZmlsZUlucHV0KSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkltYWdlQmxvY2tIYW5kbGVyOiBDb3VsZCBub3QgZmluZCBmaWxlIGlucHV0Iik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS11cGxvYWQtcGxhY2Vob2xkZXIiKTsKICAgIGlmIChwbGFjZWhvbGRlcikgewogICAgICBwbGFjZWhvbGRlci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBQbGFjZWhvbGRlciBjbGlja2VkLCBvcGVuaW5nIGZpbGUgc2VsZWN0b3IiKTsKICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTsKICAgICAgfSk7CiAgICB9CiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkZvY3VzKCk7CiAgICB9KTsKICAgIGZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCBhc3luYyAoZTExKSA9PiB7CiAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzPy5bMF07CiAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBGaWxlIHNlbGVjdGVkOiIsIGZpbGUubmFtZSk7CiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVGaWxlVXBsb2FkKGZpbGUsIGJsb2NrLCBoYW5kbGVyczIpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgaWYgKCFibG9jay5tZXRhZGF0YT8udXJsKSB7CiAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImRyYWctb3ZlciIpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcmFnbGVhdmUiLCAoZTExKSA9PiB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnLW92ZXIiKTsKICAgIH0pOwogICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBhc3luYyAoZTExKSA9PiB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnLW92ZXIiKTsKICAgICAgY29uc3QgZmlsZSA9IGUxMS5kYXRhVHJhbnNmZXI/LmZpbGVzWzBdOwogICAgICBpZiAoZmlsZSAmJiBmaWxlLnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikgJiYgIWJsb2NrLm1ldGFkYXRhPy51cmwpIHsKICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUZpbGVVcGxvYWQoZmlsZSwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICAgIH0KICAgIH0pOwogICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gaGFuZGxlcnMyLm9uRm9jdXMoKSk7CiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IGhhbmRsZXJzMi5vbkJsdXIoKSk7CiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJEZWxldGUiIHx8IGUxMS5rZXkgPT09ICJCYWNrc3BhY2UiKSB7CiAgICAgICAgaWYgKGJsb2NrLm1ldGFkYXRhPy51cmwpIHsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhLnVybCA9IHZvaWQgMDsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICAgIGhhbmRsZXJzMi5vbklucHV0KG5ldyBJbnB1dEV2ZW50KCJpbnB1dCIpKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgfSk7CiAgfQogIGFzeW5jIGhhbmRsZUZpbGVVcGxvYWQoZmlsZSwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBTdGFydGluZyBmaWxlIHVwbG9hZCIsIHsKICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSwKICAgICAgZmlsZVNpemU6IGZpbGUuc2l6ZSwKICAgICAgYmxvY2tJZDogYmxvY2suaWQKICAgIH0pOwogICAgaWYgKCFmaWxlLnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikpIHsKICAgICAgY29uc29sZS5lcnJvcigiSW52YWxpZCBmaWxlIHR5cGU6IiwgZmlsZS50eXBlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgbWF4U2l6ZSA9IDEwICogMTAyNCAqIDEwMjQ7CiAgICBpZiAoZmlsZS5zaXplID4gbWF4U2l6ZSkgewogICAgICBjb25zb2xlLmVycm9yKCJGaWxlIHRvbyBsYXJnZS4gTWF4aW11bSBzaXplIGlzIDEwTUIiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgIGJsb2NrLm1ldGFkYXRhLmxvYWRpbmcgPSB0cnVlOwogICAgYmxvY2subWV0YWRhdGEuZmlsZU5hbWUgPSBmaWxlLm5hbWU7CiAgICBibG9jay5tZXRhZGF0YS5maWxlU2l6ZSA9IGZpbGUuc2l6ZTsKICAgIGJsb2NrLm1ldGFkYXRhLm1pbWVUeXBlID0gZmlsZS50eXBlOwogICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBTZXQgbG9hZGluZyBzdGF0ZSwgcmVxdWVzdGluZyB1cGRhdGUiKTsKICAgIGhhbmRsZXJzMi5vblJlcXVlc3RVcGRhdGU/LigpOwogICAgdHJ5IHsKICAgICAgY29uc3QgZGF0YVVybCA9IGF3YWl0IHRoaXMuZmlsZVRvRGF0YVVybChmaWxlKTsKICAgICAgYmxvY2subWV0YWRhdGEudXJsID0gZGF0YVVybDsKICAgICAgYmxvY2subWV0YWRhdGEubG9hZGluZyA9IGZhbHNlOwogICAgICBjb25zdCBuYW1lV2l0aG91dEV4dCA9IGZpbGUubmFtZS5yZXBsYWNlKC9cLlteLy5dKyQvLCAiIik7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBuYW1lV2l0aG91dEV4dDsKICAgICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBVcGxvYWQgY29tcGxldGUsIHJlcXVlc3RpbmcgdXBkYXRlIiwgewogICAgICAgIGhhc1VybDogISFibG9jay5tZXRhZGF0YS51cmwsCiAgICAgICAgdXJsTGVuZ3RoOiBkYXRhVXJsLmxlbmd0aCwKICAgICAgICBhbHRUZXh0OiBibG9jay5jb250ZW50CiAgICAgIH0pOwogICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byB1cGxvYWQgaW1hZ2U6IiwgZXJyb3IpOwogICAgICBibG9jay5tZXRhZGF0YS5sb2FkaW5nID0gZmFsc2U7CiAgICAgIGhhbmRsZXJzMi5vblJlcXVlc3RVcGRhdGU/LigpOwogICAgfQogIH0KICBmaWxlVG9EYXRhVXJsKGZpbGUpIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICByZWFkZXIub25sb2FkID0gKGUxMSkgPT4gewogICAgICAgIGNvbnN0IHJlc3VsdCA9IGUxMS50YXJnZXQ/LnJlc3VsdDsKICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIHJlc29sdmUyKHJlc3VsdCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoIkZhaWxlZCB0byByZWFkIGZpbGUiKSk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDsKICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7CiAgICB9KTsKICB9CiAgZXNjYXBlSHRtbCh0ZXh0OSkgewogICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBkaXYudGV4dENvbnRlbnQgPSB0ZXh0OTsKICAgIHJldHVybiBkaXYuaW5uZXJIVE1MOwogIH0KICBnZXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBibG9jayA9IHRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCk7CiAgICByZXR1cm4gYmxvY2s/LmNvbnRlbnQgfHwgIiI7CiAgfQogIHNldENvbnRlbnQoZWxlbWVudDQsIGNvbnRlbnQzKSB7CiAgICBjb25zdCBibG9jayA9IHRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCk7CiAgICBpZiAoYmxvY2spIHsKICAgICAgYmxvY2suY29udGVudCA9IGNvbnRlbnQzOwogICAgfQogIH0KICBnZXRCbG9ja0Zyb21FbGVtZW50KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaW1hZ2UtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgIGlmICghYmxvY2tJZCkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gewogICAgICBpZDogYmxvY2tJZCwKICAgICAgdHlwZTogImltYWdlIiwKICAgICAgY29udGVudDogIiIsCiAgICAgIG1ldGFkYXRhOiB7fQogICAgfTsKICB9CiAgZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICB9CiAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQpIHsKICAgIHRoaXMuZm9jdXMoZWxlbWVudDQpOwogIH0KICBmb2N1cyhlbGVtZW50NCkgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmltYWdlLWJsb2NrLWNvbnRhaW5lciIpOwogICAgY29udGFpbmVyPy5mb2N1cygpOwogIH0KICBmb2N1c1dpdGhDdXJzb3IoZWxlbWVudDQsIHBvc2l0aW9uMyA9ICJlbmQiKSB7CiAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICB9CiAgZ2V0U3BsaXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuIGAKICAgICAgLyogSW1hZ2UgQmxvY2sgQ29udGFpbmVyICovCiAgICAgIC5pbWFnZS1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgICAKICAgICAgLmltYWdlLWJsb2NrLWNvbnRhaW5lci5zZWxlY3RlZCB7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjM2NmYxIiwgIiM4MThjZjgiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFVwbG9hZCBQbGFjZWhvbGRlciAqLwogICAgICAuaW1hZ2UtdXBsb2FkLXBsYWNlaG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA0OHB4IDI0cHg7CiAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5pbWFnZS1ibG9jay1jb250YWluZXI6aG92ZXIgLmltYWdlLXVwbG9hZC1wbGFjZWhvbGRlciB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5pbWFnZS1ibG9jay1jb250YWluZXIuZHJhZy1vdmVyIC5pbWFnZS11cGxvYWQtcGxhY2Vob2xkZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2MzY2ZjEiLCAiIzgxOGNmOCIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VmZjZmZiIsICIjMWUxYjRiIil9OwogICAgICB9CiAgICAgIAogICAgICAudXBsb2FkLWljb24gewogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM0YjU1NjMiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC51cGxvYWQtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CiAgICAgIAogICAgICAudXBsb2FkLWhpbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSW1hZ2UgQ29udGFpbmVyICovCiAgICAgIC5pbWFnZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMTExODI3Iil9OwogICAgICB9CiAgICAgIAogICAgICAuaW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIExvYWRpbmcgU3RhdGUgKi8KICAgICAgLmltYWdlLWxvYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDQ4cHggMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZhZmFmYSIsICIjMGEwYTBhIil9OwogICAgICB9CiAgICAgIAogICAgICAubG9hZGluZy1zcGlubmVyIHsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYm9yZGVyOiAzcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzYzNjZmMSIsICIjODE4Y2Y4Iil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQogICAgICAKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0KICAgICAgfQogICAgICAKICAgICAgLmxvYWRpbmctdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBGaWxlIGlucHV0IGhpZGRlbiAqLwogICAgICAuaW1hZ2UtZmlsZS1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICBgOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL21lZGlhL3lvdXR1YmUuYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIFlvdVR1YmVCbG9ja0hhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEJhc2VCbG9ja0hhbmRsZXIgewogIHR5cGUgPSAieW91dHViZSI7CiAgcmVuZGVyKGJsb2NrLCBpc1NlbGVjdGVkKSB7CiAgICBjb25zdCB2aWRlb0lkID0gYmxvY2subWV0YWRhdGE/LnZpZGVvSWQ7CiAgICBjb25zdCB1cmwgPSBibG9jay5tZXRhZGF0YT8udXJsIHx8ICIiOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0ieW91dHViZS1ibG9jay1jb250YWluZXIke2lzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIifSIgCiAgICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICAgZGF0YS1oYXMtdmlkZW89IiR7ISF2aWRlb0lkfSI+CiAgICAgICAgJHt2aWRlb0lkID8gdGhpcy5yZW5kZXJWaWRlbyh2aWRlb0lkKSA6IHRoaXMucmVuZGVyUGxhY2Vob2xkZXIodXJsKX0KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJQbGFjZWhvbGRlcih1cmwpIHsKICAgIHJldHVybiBgCiAgICAgIDxkaXYgY2xhc3M9InlvdXR1YmUtcGxhY2Vob2xkZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InBsYWNlaG9sZGVyLWljb24iPgogICAgICAgICAgPHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYxNSAzLjE4NGMtMy42MDQtLjI0Ni0xMS42MzEtLjI0NS0xNS4yMyAwLTMuODk3LjI2Ni00LjM1NiAyLjYyLTQuMzg1IDguODE2LjAyOSA2LjE4NS40ODQgOC41NDkgNC4zODUgOC44MTYgMy42LjI0NSAxMS42MjYuMjQ2IDE1LjIzIDAgMy44OTctLjI2NiA0LjM1Ni0yLjYyIDQuMzg1LTguODE2LS4wMjktNi4xODUtLjQ4NC04LjU0OS00LjM4NS04LjgxNnptLTEwLjYxNSAxMi44MTZ2LThsOCAzLjk5My04IDQuMDA3eiIvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGxhY2Vob2xkZXItdGV4dCI+RW50ZXIgWW91VHViZSBVUkw8L2Rpdj4KICAgICAgICA8aW5wdXQgdHlwZT0idXJsIiAKICAgICAgICAgICAgICAgY2xhc3M9InlvdXR1YmUtdXJsLWlucHV0IiAKICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Imh0dHBzOi8veW91dHViZS5jb20vd2F0Y2g/dj0uLi4iIAogICAgICAgICAgICAgICB2YWx1ZT0iJHt0aGlzLmVzY2FwZUh0bWwodXJsKX0iIC8+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ieW91dHViZS1lbWJlZC1idG4iPkVtYmVkIFZpZGVvPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVyVmlkZW8odmlkZW9JZCkgewogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0ieW91dHViZS1jb250YWluZXIiPgogICAgICAgIDxpZnJhbWUgCiAgICAgICAgICBzcmM9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7dmlkZW9JZH0iCiAgICAgICAgICBmcmFtZWJvcmRlcj0iMCIKICAgICAgICAgIGFsbG93PSJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgY2xpcGJvYXJkLXdyaXRlOyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlIgogICAgICAgICAgYWxsb3dmdWxsc2NyZWVuCiAgICAgICAgPjwvaWZyYW1lPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIueW91dHViZS1ibG9jay1jb250YWluZXIiKTsKICAgIGlmICghY29udGFpbmVyKQogICAgICByZXR1cm47CiAgICBpZiAoYmxvY2subWV0YWRhdGE/LnZpZGVvSWQpIHsKICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCAiMCIpOwogICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICBpZiAoZTExLmtleSA9PT0gIkRlbGV0ZSIgfHwgZTExLmtleSA9PT0gIkJhY2tzcGFjZSIpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgdXJsSW5wdXQgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIueW91dHViZS11cmwtaW5wdXQiKTsKICAgIGNvbnN0IGVtYmVkQnRuID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLnlvdXR1YmUtZW1iZWQtYnRuIik7CiAgICBpZiAoIXVybElucHV0IHx8ICFlbWJlZEJ0bikKICAgICAgcmV0dXJuOwogICAgdXJsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgIHVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgZW1iZWRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIHRoaXMuZW1iZWRWaWRlbyh1cmxJbnB1dC52YWx1ZSwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9KTsKICAgIHVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy5lbWJlZFZpZGVvKHVybElucHV0LnZhbHVlLCBibG9jaywgaGFuZGxlcnMyKTsKICAgICAgfSBlbHNlIGlmIChlMTEua2V5ID09PSAiRXNjYXBlIikgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHVybElucHV0LmJsdXIoKTsKICAgICAgfQogICAgfSk7CiAgICB1cmxJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJwYXN0ZSIsIChlMTEpID0+IHsKICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgY29uc3QgcGFzdGVkVXJsID0gdXJsSW5wdXQudmFsdWU7CiAgICAgICAgaWYgKHRoaXMuZXh0cmFjdFlvdVR1YmVWaWRlb0lkKHBhc3RlZFVybCkpIHsKICAgICAgICAgIHRoaXMuZW1iZWRWaWRlbyhwYXN0ZWRVcmwsIGJsb2NrLCBoYW5kbGVyczIpOwogICAgICAgIH0KICAgICAgfSwgMCk7CiAgICB9KTsKICAgIHVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKCkgPT4gewogICAgICBpZiAoIWJsb2NrLm1ldGFkYXRhKQogICAgICAgIGJsb2NrLm1ldGFkYXRhID0ge307CiAgICAgIGJsb2NrLm1ldGFkYXRhLnVybCA9IHVybElucHV0LnZhbHVlOwogICAgfSk7CiAgfQogIGVtYmVkVmlkZW8odXJsLCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCB2aWRlb0lkID0gdGhpcy5leHRyYWN0WW91VHViZVZpZGVvSWQodXJsKTsKICAgIGlmICghdmlkZW9JZCkgewogICAgICBjb25zb2xlLmVycm9yKCJJbnZhbGlkIFlvdVR1YmUgVVJMIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghYmxvY2subWV0YWRhdGEpCiAgICAgIGJsb2NrLm1ldGFkYXRhID0ge307CiAgICBibG9jay5tZXRhZGF0YS52aWRlb0lkID0gdmlkZW9JZDsKICAgIGJsb2NrLm1ldGFkYXRhLnVybCA9IHVybDsKICAgIGJsb2NrLmNvbnRlbnQgPSBgWW91VHViZSBWaWRlbzogJHt2aWRlb0lkfWA7CiAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICB9CiAgZXh0cmFjdFlvdVR1YmVWaWRlb0lkKHVybCkgewogICAgY29uc3QgcGF0dGVybnMyID0gWwogICAgICAvKD86eW91dHViZVwuY29tXC8oPzpbXlwvXStcLy4rXC98KD86dnxlKD86bWJlZCk/KVwvfC4qWz8mXXY9KXx5b3V0dVwuYmVcLykoW14iJj9cLyBdezExfSkvLAogICAgICAveW91dHViZVwuY29tXC9lbWJlZFwvKFteIiY/XC8gXXsxMX0pLywKICAgICAgL3lvdXR1YmVcLmNvbVwvd2F0Y2hcP3Y9KFteIiY/XC8gXXsxMX0pLywKICAgICAgL3lvdXR1XC5iZVwvKFteIiY/XC8gXXsxMX0pLwogICAgXTsKICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJuczIpIHsKICAgICAgY29uc3QgbWF0Y2gyID0gdXJsLm1hdGNoKHBhdHRlcm4pOwogICAgICBpZiAobWF0Y2gyKSB7CiAgICAgICAgcmV0dXJuIG1hdGNoMlsxXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGVzY2FwZUh0bWwodGV4dDkpIHsKICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDk7CiAgICByZXR1cm4gZGl2LmlubmVySFRNTDsKICB9CiAgZ2V0Q29udGVudChlbGVtZW50NCkgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgcmV0dXJuIGJsb2NrPy5jb250ZW50IHx8ICIiOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MykgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgaWYgKGJsb2NrKSB7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBjb250ZW50MzsKICAgIH0KICB9CiAgZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCkgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLnlvdXR1YmUtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgIGlmICghYmxvY2tJZCkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gewogICAgICBpZDogYmxvY2tJZCwKICAgICAgdHlwZTogInlvdXR1YmUiLAogICAgICBjb250ZW50OiAiIiwKICAgICAgbWV0YWRhdGE6IHt9CiAgICB9OwogIH0KICBnZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQpIHsKICAgIHRoaXMuZm9jdXMoZWxlbWVudDQpOwogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCkgewogICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgfQogIGZvY3VzKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIueW91dHViZS1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IHVybElucHV0ID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLnlvdXR1YmUtdXJsLWlucHV0Iik7CiAgICBpZiAodXJsSW5wdXQpIHsKICAgICAgdXJsSW5wdXQuZm9jdXMoKTsKICAgIH0gZWxzZSBpZiAoY29udGFpbmVyKSB7CiAgICAgIGNvbnRhaW5lci5mb2N1cygpOwogICAgfQogIH0KICBmb2N1c1dpdGhDdXJzb3IoZWxlbWVudDQsIHBvc2l0aW9uMyA9ICJlbmQiKSB7CiAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICB9CiAgZ2V0U3BsaXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuIGAKICAgICAgLyogWW91VHViZSBCbG9jayBDb250YWluZXIgKi8KICAgICAgLnlvdXR1YmUtYmxvY2stY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luOiAxMnB4IDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLnlvdXR1YmUtYmxvY2stY29udGFpbmVyLnNlbGVjdGVkIHsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2MzY2ZjEiLCAiIzgxOGNmOCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogWW91VHViZSBQbGFjZWhvbGRlciAqLwogICAgICAueW91dHViZS1wbGFjZWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMzJweCAyNHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICB9CiAgICAgIAogICAgICAucGxhY2Vob2xkZXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNlZjQ0NDQiKX07CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CiAgICAgIAogICAgICAucGxhY2Vob2xkZXItdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLXVybC1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiA0MDBweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTExODI3Iil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBzYW5zLXNlcmlmOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLXVybC1pbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxZjI5MzciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLXVybC1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS1lbWJlZC1idG4gewogICAgICAgIHBhZGRpbmc6IDZweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxMTE4MjciKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLWVtYmVkLWJ0bjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLnlvdXR1YmUtZW1iZWQtYnRuOmFjdGl2ZSB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQogICAgICAKICAgICAgLyogWW91VHViZSBDb250YWluZXIgKi8KICAgICAgLnlvdXR1YmUtY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDU2LjI1JTsgLyogMTY6OSBhc3BlY3QgcmF0aW8gKi8KICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjMDAwMDAwIil9OwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS1jb250YWluZXIgaWZyYW1lIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIH0KICAgIGA7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvbWVkaWEvYXR0YWNobWVudC5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgQXR0YWNobWVudEJsb2NrSGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgQmFzZUJsb2NrSGFuZGxlciB7CiAgdHlwZSA9ICJhdHRhY2htZW50IjsKICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IGZpbGVzID0gYmxvY2subWV0YWRhdGE/LmZpbGVzIHx8IFtdOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1ibG9jay1jb250YWluZXIke2lzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIifSIgCiAgICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICAgdGFiaW5kZXg9IjAiPgogICAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtaWNvbiI+XHV7MUY0Q0V9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRhY2htZW50LXRpdGxlIj5GaWxlIEF0dGFjaG1lbnRzPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1saXN0Ij4KICAgICAgICAgICR7ZmlsZXMubGVuZ3RoID4gMCA/IHRoaXMucmVuZGVyRmlsZXMoZmlsZXMpIDogdGhpcy5yZW5kZXJQbGFjZWhvbGRlcigpfQogICAgICAgIDwvZGl2PgogICAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiAKICAgICAgICAgICAgICAgY2xhc3M9ImF0dGFjaG1lbnQtZmlsZS1pbnB1dCIgCiAgICAgICAgICAgICAgIG11bHRpcGxlIAogICAgICAgICAgICAgICBzdHlsZT0iZGlzcGxheTogbm9uZTsiIC8+CiAgICAgICAgJHtmaWxlcy5sZW5ndGggPiAwID8gJzxidXR0b24gY2xhc3M9ImFkZC1tb3JlLWZpbGVzIj5BZGQgTW9yZSBGaWxlczwvYnV0dG9uPicgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJQbGFjZWhvbGRlcigpIHsKICAgIHJldHVybiBgCiAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtcGxhY2Vob2xkZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InBsYWNlaG9sZGVyLXRleHQiPkNsaWNrIHRvIGFkZCBmaWxlczwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBsYWNlaG9sZGVyLWhpbnQiPm9yIGRyYWcgYW5kIGRyb3A8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJGaWxlcyhmaWxlcykgewogICAgcmV0dXJuIGZpbGVzLm1hcCgoZmlsZSkgPT4gYAogICAgICA8ZGl2IGNsYXNzPSJhdHRhY2htZW50LWl0ZW0iIGRhdGEtZmlsZS1pZD0iJHtmaWxlLmlkfSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1pY29uIj4ke3RoaXMuZ2V0RmlsZUljb24oZmlsZS50eXBlKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWluZm8iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1uYW1lIj4ke3RoaXMuZXNjYXBlSHRtbChmaWxlLm5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1zaXplIj4ke3RoaXMuZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJyZW1vdmUtZmlsZSIgZGF0YS1maWxlLWlkPSIke2ZpbGUuaWR9Ij5ceEQ3PC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgYCkuam9pbigiIik7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IGZpbGVJbnB1dCA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5hdHRhY2htZW50LWZpbGUtaW5wdXQiKTsKICAgIGlmICghY29udGFpbmVyIHx8ICFmaWxlSW5wdXQpIHsKICAgICAgY29uc29sZS5lcnJvcigiQXR0YWNobWVudEJsb2NrSGFuZGxlcjogQ291bGQgbm90IGZpbmQgcmVxdWlyZWQgZWxlbWVudHMiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgIGlmICghYmxvY2subWV0YWRhdGEuZmlsZXMpCiAgICAgIGJsb2NrLm1ldGFkYXRhLmZpbGVzID0gW107CiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1wbGFjZWhvbGRlciIpOwogICAgaWYgKHBsYWNlaG9sZGVyKSB7CiAgICAgIHBsYWNlaG9sZGVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTsKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBhZGRNb3JlQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5hZGQtbW9yZS1maWxlcyIpOwogICAgaWYgKGFkZE1vcmVCdG4pIHsKICAgICAgYWRkTW9yZUJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgZmlsZUlucHV0LmNsaWNrKCk7CiAgICAgIH0pOwogICAgfQogICAgZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGFzeW5jIChlMTEpID0+IHsKICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICBjb25zdCBmaWxlcyA9IGlucHV0LmZpbGVzOwogICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkgewogICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRmlsZUF0dGFjaG1lbnRzKGZpbGVzLCBibG9jaywgaGFuZGxlcnMyKTsKICAgICAgICBpbnB1dC52YWx1ZSA9ICIiOwogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZTExLnRhcmdldDsKICAgICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoInJlbW92ZS1maWxlIikpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgY29uc3QgZmlsZUlkID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS1maWxlLWlkIik7CiAgICAgICAgaWYgKGZpbGVJZCkgewogICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKGZpbGVJZCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImRyYWctb3ZlciIpOwogICAgfSk7CiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIiwgKGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZy1vdmVyIik7CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcm9wIiwgYXN5bmMgKGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZy1vdmVyIik7CiAgICAgIGNvbnN0IGZpbGVzID0gZTExLmRhdGFUcmFuc2Zlcj8uZmlsZXM7CiAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVGaWxlQXR0YWNobWVudHMoZmlsZXMsIGJsb2NrLCBoYW5kbGVyczIpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IGhhbmRsZXJzMi5vbkZvY3VzKCkpOwogICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiRGVsZXRlIiB8fCBlMTEua2V5ID09PSAiQmFja3NwYWNlIikgewogICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBjb250YWluZXIgJiYgYmxvY2subWV0YWRhdGE/LmZpbGVzPy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhLmZpbGVzID0gW107CiAgICAgICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgfSk7CiAgfQogIGFzeW5jIGhhbmRsZUZpbGVBdHRhY2htZW50cyhmaWxlcywgYmxvY2ssIGhhbmRsZXJzMikgewogICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgIGlmICghYmxvY2subWV0YWRhdGEuZmlsZXMpCiAgICAgIGJsb2NrLm1ldGFkYXRhLmZpbGVzID0gW107CiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgQXJyYXkuZnJvbShmaWxlcykpIHsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBkYXRhVXJsID0gYXdhaXQgdGhpcy5maWxlVG9EYXRhVXJsKGZpbGUpOwogICAgICAgIGNvbnN0IGZpbGVEYXRhID0gewogICAgICAgICAgaWQ6IHRoaXMuZ2VuZXJhdGVJZCgpLAogICAgICAgICAgbmFtZTogZmlsZS5uYW1lLAogICAgICAgICAgc2l6ZTogZmlsZS5zaXplLAogICAgICAgICAgdHlwZTogZmlsZS50eXBlLAogICAgICAgICAgZGF0YTogZGF0YVVybAogICAgICAgIH07CiAgICAgICAgYmxvY2subWV0YWRhdGEuZmlsZXMucHVzaChmaWxlRGF0YSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGF0dGFjaCBmaWxlOiIsIGZpbGUubmFtZSwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICBibG9jay5jb250ZW50ID0gYCR7YmxvY2subWV0YWRhdGEuZmlsZXMubGVuZ3RofSBmaWxlJHtibG9jay5tZXRhZGF0YS5maWxlcy5sZW5ndGggIT09IDEgPyAicyIgOiAiIn0gYXR0YWNoZWRgOwogICAgaGFuZGxlcnMyLm9uUmVxdWVzdFVwZGF0ZT8uKCk7CiAgfQogIHJlbW92ZUZpbGUoZmlsZUlkLCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBpZiAoIWJsb2NrLm1ldGFkYXRhPy5maWxlcykKICAgICAgcmV0dXJuOwogICAgYmxvY2subWV0YWRhdGEuZmlsZXMgPSBibG9jay5tZXRhZGF0YS5maWxlcy5maWx0ZXIoKGY3KSA9PiBmNy5pZCAhPT0gZmlsZUlkKTsKICAgIGJsb2NrLmNvbnRlbnQgPSBibG9jay5tZXRhZGF0YS5maWxlcy5sZW5ndGggPiAwID8gYCR7YmxvY2subWV0YWRhdGEuZmlsZXMubGVuZ3RofSBmaWxlJHtibG9jay5tZXRhZGF0YS5maWxlcy5sZW5ndGggIT09IDEgPyAicyIgOiAiIn0gYXR0YWNoZWRgIDogIiI7CiAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICB9CiAgZmlsZVRvRGF0YVVybChmaWxlKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QpID0+IHsKICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgcmVhZGVyLm9ubG9hZCA9IChlMTEpID0+IHsKICAgICAgICBjb25zdCByZXN1bHQgPSBlMTEudGFyZ2V0Py5yZXN1bHQ7CiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICByZXNvbHZlMihyZXN1bHQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWplY3QobmV3IEVycm9yKCJGYWlsZWQgdG8gcmVhZCBmaWxlIikpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmVhZGVyLm9uZXJyb3IgPSByZWplY3Q7CiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgfSk7CiAgfQogIGdldEZpbGVJY29uKG1pbWVUeXBlKSB7CiAgICBpZiAobWltZVR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikpCiAgICAgIHJldHVybiAiXHV7MUY1QkN9XHVGRTBGIjsKICAgIGlmIChtaW1lVHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSkKICAgICAgcmV0dXJuICJcdXsxRjNBNX0iOwogICAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoImF1ZGlvLyIpKQogICAgICByZXR1cm4gIlx1ezFGM0I1fSI7CiAgICBpZiAobWltZVR5cGUuaW5jbHVkZXMoInBkZiIpKQogICAgICByZXR1cm4gIlx1ezFGNEM0fSI7CiAgICBpZiAobWltZVR5cGUuaW5jbHVkZXMoInppcCIpIHx8IG1pbWVUeXBlLmluY2x1ZGVzKCJyYXIiKSB8fCBtaW1lVHlwZS5pbmNsdWRlcygidGFyIikpCiAgICAgIHJldHVybiAiXHV7MUY1QzR9XHVGRTBGIjsKICAgIGlmIChtaW1lVHlwZS5pbmNsdWRlcygic2hlZXQiKSkKICAgICAgcmV0dXJuICJcdXsxRjRDQX0iOwogICAgaWYgKG1pbWVUeXBlLmluY2x1ZGVzKCJkb2N1bWVudCIpIHx8IG1pbWVUeXBlLmluY2x1ZGVzKCJtc3dvcmQiKSkKICAgICAgcmV0dXJuICJcdXsxRjRERH0iOwogICAgaWYgKG1pbWVUeXBlLmluY2x1ZGVzKCJwcmVzZW50YXRpb24iKSkKICAgICAgcmV0dXJuICJcdXsxRjRDQn0iOwogICAgaWYgKG1pbWVUeXBlLmluY2x1ZGVzKCJ0ZXh0IikpCiAgICAgIHJldHVybiAiXHV7MUY0QzN9IjsKICAgIHJldHVybiAiXHV7MUY0QzF9IjsKICB9CiAgZm9ybWF0RmlsZVNpemUoYnl0ZXMpIHsKICAgIGlmIChieXRlcyA9PT0gMCkKICAgICAgcmV0dXJuICIwIEJ5dGVzIjsKICAgIGNvbnN0IGs0ID0gMTAyNDsKICAgIGNvbnN0IHNpemVzID0gWyJCeXRlcyIsICJLQiIsICJNQiIsICJHQiJdOwogICAgY29uc3QgaTExID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrNCkpOwogICAgcmV0dXJuIHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coazQsIGkxMSkpLnRvRml4ZWQoMikpICsgIiAiICsgc2l6ZXNbaTExXTsKICB9CiAgZ2VuZXJhdGVJZCgpIHsKICAgIHJldHVybiBgZmlsZS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWA7CiAgfQogIGVzY2FwZUh0bWwodGV4dDkpIHsKICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDk7CiAgICByZXR1cm4gZGl2LmlubmVySFRNTDsKICB9CiAgZ2V0Q29udGVudChlbGVtZW50NCkgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgcmV0dXJuIGJsb2NrPy5jb250ZW50IHx8ICIiOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MykgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgaWYgKGJsb2NrKSB7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBjb250ZW50MzsKICAgIH0KICB9CiAgZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCkgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmF0dGFjaG1lbnQtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgIGlmICghYmxvY2tJZCkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gewogICAgICBpZDogYmxvY2tJZCwKICAgICAgdHlwZTogImF0dGFjaG1lbnQiLAogICAgICBjb250ZW50OiAiIiwKICAgICAgbWV0YWRhdGE6IHt9CiAgICB9OwogIH0KICBnZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQpIHsKICAgIHRoaXMuZm9jdXMoZWxlbWVudDQpOwogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCkgewogICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgfQogIGZvY3VzKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnRhaW5lcj8uZm9jdXMoKTsKICB9CiAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIikgewogICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgfQogIGdldFNwbGl0Q29udGVudChlbGVtZW50NCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIGdldFN0eWxlcygpIHsKICAgIHJldHVybiBgCiAgICAgIC8qIEF0dGFjaG1lbnQgQmxvY2sgQ29udGFpbmVyICovCiAgICAgIC5hdHRhY2htZW50LWJsb2NrLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbjogMTJweCAwOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTExODI3Iil9OwogICAgICB9CiAgICAgIAogICAgICAuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLmF0dGFjaG1lbnQtYmxvY2stY29udGFpbmVyLmRyYWctb3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjM2NmYxIiwgIiM4MThjZjgiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEhlYWRlciAqLwogICAgICAuYXR0YWNobWVudC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmF0dGFjaG1lbnQtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgfQogICAgICAKICAgICAgLmF0dGFjaG1lbnQtdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzM3NDE1MSIsICIjZTVlN2ViIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBGaWxlIExpc3QgKi8KICAgICAgLmF0dGFjaG1lbnQtbGlzdCB7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDgwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CiAgICAgIAogICAgICAvKiBQbGFjZWhvbGRlciAqLwogICAgICAuYXR0YWNobWVudC1wbGFjZWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5hdHRhY2htZW50LXBsYWNlaG9sZGVyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICB9CiAgICAgIAogICAgICAucGxhY2Vob2xkZXItdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgfQogICAgICAKICAgICAgLnBsYWNlaG9sZGVyLWhpbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogRmlsZSBJdGVtcyAqLwogICAgICAuYXR0YWNobWVudC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5hdHRhY2htZW50LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMzNzQxNTEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5maWxlLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQogICAgICAKICAgICAgLmZpbGUtaW5mbyB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5maWxlLW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLmZpbGUtc2l6ZSB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgfQogICAgICAKICAgICAgLnJlbW92ZS1maWxlIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2YjcyODAiLCAiIzljYTNhZiIpfTsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5yZW1vdmUtZmlsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZWUyZTIiLCAiIzk5MWIxYiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmNhNWE1IiwgIiNkYzI2MjYiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNmY2E1YTUiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEFkZCBNb3JlIEZpbGVzIEJ1dHRvbiAqLwogICAgICAuYWRkLW1vcmUtZmlsZXMgewogICAgICAgIG1hcmdpbjogOHB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsKICAgICAgfQogICAgICAKICAgICAgLmFkZC1tb3JlLWZpbGVzOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzRiNTU2MyIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSGlkZGVuIGZpbGUgaW5wdXQgKi8KICAgICAgLmF0dGFjaG1lbnQtZmlsZS1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICBgOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL2NvbnRlbnQvZGl2aWRlci5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgRGl2aWRlckJsb2NrSGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgQmFzZUJsb2NrSGFuZGxlciB7CiAgdHlwZSA9ICJkaXZpZGVyIjsKICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSBpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIjsKICAgIHJldHVybiBgCiAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIGRpdmlkZXIke3NlbGVjdGVkQ2xhc3N9IiBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIgZGF0YS1ibG9jay10eXBlPSIke2Jsb2NrLnR5cGV9IiB0YWJpbmRleD0iMCI+CiAgICAgICAgPGhyPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBkaXZpZGVyQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2suZGl2aWRlciIpOwogICAgaWYgKCFkaXZpZGVyQmxvY2spCiAgICAgIHJldHVybjsKICAgIGRpdmlkZXJCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBkaXZpZGVyQmxvY2suZm9jdXMoKTsKICAgICAgaGFuZGxlcnMyLm9uRm9jdXM/LigpOwogICAgfSk7CiAgICBkaXZpZGVyQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkZvY3VzPy4oKTsKICAgIH0pOwogICAgZGl2aWRlckJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkJsdXI/LigpOwogICAgfSk7CiAgICBkaXZpZGVyQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJCYWNrc3BhY2UiIHx8IGUxMS5rZXkgPT09ICJEZWxldGUiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bj8uKGUxMSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bj8uKGUxMSk7CiAgICAgIH0KICAgIH0pOwogIH0KICBnZXRTdHlsZXMoKSB7CiAgICByZXR1cm4gYAogICAgICAuYmxvY2suZGl2aWRlciB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgICAgbWFyZ2luOiAxNnB4IDA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5ibG9jay5kaXZpZGVyOmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAuYmxvY2suZGl2aWRlci5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMDUpIiwgInJnYmEoNzcsIDE0OCwgMjU1LCAwLjA4KSIpfTsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMikiLCAicmdiYSg3NywgMTQ4LCAyNTUsIDAuMikiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jay5kaXZpZGVyIGhyIHsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMzMzMiKX07CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICBgOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL2NvbnRlbnQvbWFya2Rvd24uYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIE1hcmtkb3duQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gIm1hcmtkb3duIjsKICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IGlzRWRpdE1vZGUgPSBibG9jay5tZXRhZGF0YT8uaXNFZGl0TW9kZSA/PyB0cnVlOwogICAgY29uc3QgY29udGVudDMgPSBibG9jay5jb250ZW50IHx8ICIiOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tYmxvY2stY29udGFpbmVyJHtpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIn0iIAogICAgICAgICAgIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9IgogICAgICAgICAgIGRhdGEtZWRpdC1tb2RlPSIke2lzRWRpdE1vZGV9Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24taWNvbiI+TVx1MjE5MzwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tdGl0bGUiPk1hcmtkb3duPC9kaXY+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJtYXJrZG93bi10b2dnbGUtbW9kZSIgdGl0bGU9IiR7aXNFZGl0TW9kZSA/ICJQcmV2aWV3IiA6ICJFZGl0In0iPgogICAgICAgICAgICAke2lzRWRpdE1vZGUgPyAiXHV7MUY0NDF9XHVGRTBGIiA6ICJcdTI3MEZcdUZFMEYifQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tY29udGVudCI+CiAgICAgICAgICAke2lzRWRpdE1vZGUgPyB0aGlzLnJlbmRlckVkaXRvcihjb250ZW50MykgOiB0aGlzLnJlbmRlclByZXZpZXcoY29udGVudDMpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlckVkaXRvcihjb250ZW50MykgewogICAgcmV0dXJuIGAKICAgICAgPHRleHRhcmVhIGNsYXNzPSJtYXJrZG93bi1lZGl0b3IiIAogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkVudGVyIG1hcmtkb3duIGNvbnRlbnQuLi4iCiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPSJmYWxzZSI+JHt0aGlzLmVzY2FwZUh0bWwoY29udGVudDMpfTwvdGV4dGFyZWE+CiAgICBgOwogIH0KICByZW5kZXJQcmV2aWV3KGNvbnRlbnQzKSB7CiAgICBjb25zdCBodG1sMjAgPSB0aGlzLnBhcnNlTWFya2Rvd24oY29udGVudDMpOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tcHJldmlldyI+CiAgICAgICAgJHtodG1sMjAgfHwgJzxkaXYgY2xhc3M9InByZXZpZXctZW1wdHkiPk5vIGNvbnRlbnQgdG8gcHJldmlldzwvZGl2Pid9CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgIGNvbnN0IGNvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IHRvZ2dsZUJ0biA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi10b2dnbGUtbW9kZSIpOwogICAgaWYgKCFjb250YWluZXIgfHwgIXRvZ2dsZUJ0bikgewogICAgICBjb25zb2xlLmVycm9yKCJNYXJrZG93bkJsb2NrSGFuZGxlcjogQ291bGQgbm90IGZpbmQgcmVxdWlyZWQgZWxlbWVudHMiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgIGlmIChibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlID09PSB2b2lkIDApCiAgICAgIGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUgPSB0cnVlOwogICAgdG9nZ2xlQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBpZiAoYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSA9ICFibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlOwogICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgIH0pOwogICAgaWYgKGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUpIHsKICAgICAgdGhpcy5zZXR1cEVkaXRvcihlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnNldHVwUHJldmlldyhlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9CiAgfQogIHNldHVwRWRpdG9yKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICBpZiAoIWVkaXRvcikKICAgICAgcmV0dXJuOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gaGFuZGxlcnMyLm9uRm9jdXMoKSk7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IGhhbmRsZXJzMi5vbkJsdXIoKSk7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoKSA9PiB7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICB9KTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICBpZiAoZTExLmtleSA9PT0gIlRhYiIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBjb25zdCBzdGFydCA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgICAgICBjb25zdCBlbmQzID0gZWRpdG9yLnNlbGVjdGlvbkVuZDsKICAgICAgICBjb25zdCB2YWx1ZTIgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgaWYgKGUxMS5zaGlmdEtleSkgewogICAgICAgICAgY29uc3QgYmVmb3JlQ3Vyc29yID0gdmFsdWUyLnN1YnN0cmluZygwLCBzdGFydCk7CiAgICAgICAgICBjb25zdCBsYXN0TmV3bGluZSA9IGJlZm9yZUN1cnNvci5sYXN0SW5kZXhPZigiXG4iKTsKICAgICAgICAgIGNvbnN0IGxpbmVTdGFydCA9IGxhc3ROZXdsaW5lICsgMTsKICAgICAgICAgIGNvbnN0IGxpbmVDb250ZW50ID0gdmFsdWUyLnN1YnN0cmluZyhsaW5lU3RhcnQsIHN0YXJ0KTsKICAgICAgICAgIGlmIChsaW5lQ29udGVudC5zdGFydHNXaXRoKCIgICIpKSB7CiAgICAgICAgICAgIGVkaXRvci52YWx1ZSA9IHZhbHVlMi5zdWJzdHJpbmcoMCwgbGluZVN0YXJ0KSArIGxpbmVDb250ZW50LnN1YnN0cmluZygyKSArIHZhbHVlMi5zdWJzdHJpbmcoc3RhcnQpOwogICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gc3RhcnQgLSAyOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBlZGl0b3IudmFsdWUgPSB2YWx1ZTIuc3Vic3RyaW5nKDAsIHN0YXJ0KSArICIgICIgKyB2YWx1ZTIuc3Vic3RyaW5nKGVuZDMpOwogICAgICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IHN0YXJ0ICsgMjsKICAgICAgICB9CiAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKChlMTEuY3RybEtleSB8fCBlMTEubWV0YUtleSkgJiYgZTExLmtleSA9PT0gImIiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy53cmFwU2VsZWN0aW9uKGVkaXRvciwgIioqIiwgIioqIik7CiAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKChlMTEuY3RybEtleSB8fCBlMTEubWV0YUtleSkgJiYgZTExLmtleSA9PT0gImkiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy53cmFwU2VsZWN0aW9uKGVkaXRvciwgIl8iLCAiXyIpOwogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICgoZTExLmN0cmxLZXkgfHwgZTExLm1ldGFLZXkpICYmIGUxMS5rZXkgPT09ICJrIikgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuaW5zZXJ0TGluayhlZGl0b3IpOwogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgIH0pOwogICAgdGhpcy5hdXRvUmVzaXplKGVkaXRvcik7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoKSA9PiB0aGlzLmF1dG9SZXNpemUoZWRpdG9yKSk7CiAgfQogIHNldHVwUHJldmlldyhlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWJsb2NrLWNvbnRhaW5lciIpOwogICAgY29uc3QgcHJldmlldyA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1wcmV2aWV3Iik7CiAgICBpZiAoIWNvbnRhaW5lciB8fCAhcHJldmlldykKICAgICAgcmV0dXJuOwogICAgcHJldmlldy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwgIjAiKTsKICAgIHByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgIHByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IGhhbmRsZXJzMi5vbkJsdXIoKSk7CiAgICBwcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiICYmICFlMTEuc2hpZnRLZXkpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlID0gdHJ1ZTsKICAgICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgfSk7CiAgfQogIHdyYXBTZWxlY3Rpb24oZWRpdG9yLCBiZWZvcmUsIGFmdGVyKSB7CiAgICBjb25zdCBzdGFydCA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgIGNvbnN0IGVuZDMgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kOwogICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLnZhbHVlLnN1YnN0cmluZyhzdGFydCwgZW5kMyk7CiAgICBjb25zdCByZXBsYWNlbWVudCA9IGJlZm9yZSArIChzZWxlY3RlZFRleHQgfHwgInRleHQiKSArIGFmdGVyOwogICAgZWRpdG9yLnZhbHVlID0gZWRpdG9yLnZhbHVlLnN1YnN0cmluZygwLCBzdGFydCkgKyByZXBsYWNlbWVudCArIGVkaXRvci52YWx1ZS5zdWJzdHJpbmcoZW5kMyk7CiAgICBpZiAoc2VsZWN0ZWRUZXh0KSB7CiAgICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0OwogICAgICBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gc3RhcnQgKyByZXBsYWNlbWVudC5sZW5ndGg7CiAgICB9IGVsc2UgewogICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBzdGFydCArIGJlZm9yZS5sZW5ndGg7CiAgICAgIGVkaXRvci5zZWxlY3Rpb25FbmQgPSBzdGFydCArIGJlZm9yZS5sZW5ndGggKyA0OwogICAgfQogICAgZWRpdG9yLmZvY3VzKCk7CiAgfQogIGluc2VydExpbmsoZWRpdG9yKSB7CiAgICBjb25zdCBzdGFydCA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgIGNvbnN0IGVuZDMgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kOwogICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLnZhbHVlLnN1YnN0cmluZyhzdGFydCwgZW5kMyk7CiAgICBjb25zdCBsaW5rVGV4dCA9IHNlbGVjdGVkVGV4dCB8fCAibGluayB0ZXh0IjsKICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gYFske2xpbmtUZXh0fV0odXJsKWA7CiAgICBlZGl0b3IudmFsdWUgPSBlZGl0b3IudmFsdWUuc3Vic3RyaW5nKDAsIHN0YXJ0KSArIHJlcGxhY2VtZW50ICsgZWRpdG9yLnZhbHVlLnN1YnN0cmluZyhlbmQzKTsKICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0ICsgbGlua1RleHQubGVuZ3RoICsgMzsKICAgIGVkaXRvci5zZWxlY3Rpb25FbmQgPSBzdGFydCArIGxpbmtUZXh0Lmxlbmd0aCArIDY7CiAgICBlZGl0b3IuZm9jdXMoKTsKICB9CiAgYXV0b1Jlc2l6ZShlZGl0b3IpIHsKICAgIGVkaXRvci5zdHlsZS5oZWlnaHQgPSAiYXV0byI7CiAgICBlZGl0b3Iuc3R5bGUuaGVpZ2h0ID0gZWRpdG9yLnNjcm9sbEhlaWdodCArICJweCI7CiAgfQogIHBhcnNlTWFya2Rvd24obWFya2Rvd24pIHsKICAgIGxldCBodG1sMjAgPSB0aGlzLmVzY2FwZUh0bWwobWFya2Rvd24pOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoL14jIyMgKC4rKSQvZ20sICI8aDM+JDE8L2gzPiIpOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoL14jIyAoLispJC9nbSwgIjxoMj4kMTwvaDI+Iik7CiAgICBodG1sMjAgPSBodG1sMjAucmVwbGFjZSgvXiMgKC4rKSQvZ20sICI8aDE+JDE8L2gxPiIpOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoL1wqXCooLis/KVwqXCovZywgIjxzdHJvbmc+JDE8L3N0cm9uZz4iKTsKICAgIGh0bWwyMCA9IGh0bWwyMC5yZXBsYWNlKC9fXyguKz8pX18vZywgIjxzdHJvbmc+JDE8L3N0cm9uZz4iKTsKICAgIGh0bWwyMCA9IGh0bWwyMC5yZXBsYWNlKC9cKiguKz8pXCovZywgIjxlbT4kMTwvZW0+Iik7CiAgICBodG1sMjAgPSBodG1sMjAucmVwbGFjZSgvXyguKz8pXy9nLCAiPGVtPiQxPC9lbT4iKTsKICAgIGh0bWwyMCA9IGh0bWwyMC5yZXBsYWNlKC9gYGAoW1xzXFNdKj8pYGBgL2csICI8cHJlPjxjb2RlPiQxPC9jb2RlPjwvcHJlPiIpOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoL2AoLis/KWAvZywgIjxjb2RlPiQxPC9jb2RlPiIpOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoL1xbKFteXF1dKylcXVwoKFteKV0rKVwpL2csICc8YSBocmVmPSIkMiI+JDE8L2E+Jyk7CiAgICBodG1sMjAgPSBodG1sMjAucmVwbGFjZSgvXlwqICguKykkL2dtLCAiPGxpPiQxPC9saT4iKTsKICAgIGh0bWwyMCA9IGh0bWwyMC5yZXBsYWNlKC9eLSAoLispJC9nbSwgIjxsaT4kMTwvbGk+Iik7CiAgICBodG1sMjAgPSBodG1sMjAucmVwbGFjZSgvXlxkK1wuICguKykkL2dtLCAiPGxpPiQxPC9saT4iKTsKICAgIGh0bWwyMCA9IGh0bWwyMC5yZXBsYWNlKC8oPGxpPi4qPFwvbGk+XG4/KSsvZywgKG1hdGNoMikgPT4gewogICAgICByZXR1cm4gIjx1bD4iICsgbWF0Y2gyICsgIjwvdWw+IjsKICAgIH0pOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoL1xuXG4vZywgIjwvcD48cD4iKTsKICAgIGh0bWwyMCA9ICI8cD4iICsgaHRtbDIwICsgIjwvcD4iOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoLzxwPjxcL3A+L2csICIiKTsKICAgIGh0bWwyMCA9IGh0bWwyMC5yZXBsYWNlKC88cD4oPGhbMS0zXT4pL2csICIkMSIpOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoLyg8XC9oWzEtM10+KTxcL3A+L2csICIkMSIpOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoLzxwPig8dWw+KS9nLCAiJDEiKTsKICAgIGh0bWwyMCA9IGh0bWwyMC5yZXBsYWNlKC8oPFwvdWw+KTxcL3A+L2csICIkMSIpOwogICAgaHRtbDIwID0gaHRtbDIwLnJlcGxhY2UoLzxwPig8cHJlPikvZywgIiQxIik7CiAgICBodG1sMjAgPSBodG1sMjAucmVwbGFjZSgvKDxcL3ByZT4pPFwvcD4vZywgIiQxIik7CiAgICByZXR1cm4gaHRtbDIwOwogIH0KICBlc2NhcGVIdG1sKHRleHQ5KSB7CiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ5OwogICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7CiAgfQogIGdldENvbnRlbnQoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgcmV0dXJuIGVkaXRvci52YWx1ZTsKICAgIH0KICAgIGNvbnN0IGNvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IGJsb2NrSWQgPSBjb250YWluZXI/LmdldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIpOwogICAgcmV0dXJuICIiOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MykgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBlZGl0b3IudmFsdWUgPSBjb250ZW50MzsKICAgICAgdGhpcy5hdXRvUmVzaXplKGVkaXRvcik7CiAgICB9CiAgfQogIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICByZXR1cm4gZWRpdG9yID8gZWRpdG9yLnNlbGVjdGlvblN0YXJ0IDogbnVsbDsKICB9CiAgc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gMDsKICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgY29uc3QgbGVuZ3RoID0gZWRpdG9yLnZhbHVlLmxlbmd0aDsKICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IGxlbmd0aDsKICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgZm9jdXMoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBwcmV2aWV3ID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLXByZXZpZXciKTsKICAgICAgcHJldmlldz8uZm9jdXMoKTsKICAgIH0KICB9CiAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIikgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBpZiAocG9zaXRpb24zID09PSAic3RhcnQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KTsKICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbjMgPT09ICJlbmQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb0VuZChlbGVtZW50NCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBvc2l0aW9uMyA9PT0gIm51bWJlciIpIHsKICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gcG9zaXRpb24zOwogICAgICAgIGVkaXRvci5mb2N1cygpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgZ2V0U3BsaXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICBpZiAoIWVkaXRvcikKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCBjdXJzb3JQb3MgPSBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQ7CiAgICByZXR1cm4gewogICAgICBiZWZvcmU6IGVkaXRvci52YWx1ZS5zdWJzdHJpbmcoMCwgY3Vyc29yUG9zKSwKICAgICAgYWZ0ZXI6IGVkaXRvci52YWx1ZS5zdWJzdHJpbmcoY3Vyc29yUG9zKQogICAgfTsKICB9CiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuIGAKICAgICAgLyogTWFya2Rvd24gQmxvY2sgQ29udGFpbmVyICovCiAgICAgIC5tYXJrZG93bi1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSGVhZGVyICovCiAgICAgIC5tYXJrZG93bi1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMGEwYTBhIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24taWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tdGl0bGUgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi10b2dnbGUtbW9kZSB7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tdG9nZ2xlLW1vZGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBDb250ZW50ICovCiAgICAgIC5tYXJrZG93bi1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogMTIwcHg7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEVkaXRvciAqLwogICAgICAubWFya2Rvd24tZWRpdG9yIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtaW4taGVpZ2h0OiAxMjBweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgICBmb250LWZhbWlseTogJ01vbmFjbycsICdDb25zb2xhcycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZjI5MzciLCAiI2YzZjRmNiIpfTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tZWRpdG9yOjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFByZXZpZXcgKi8KICAgICAgLm1hcmtkb3duLXByZXZpZXcgewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgbWluLWhlaWdodDogOTZweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFmMjkzNyIsICIjZjNmNGY2Iil9OwogICAgICB9CiAgICAgIAogICAgICAucHJldmlldy1lbXB0eSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CiAgICAgIAogICAgICAvKiBNYXJrZG93biBwcmV2aWV3IHN0eWxlcyAqLwogICAgICAubWFya2Rvd24tcHJldmlldyBoMSB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luOiAxNnB4IDAgOHB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGgyIHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBtYXJnaW46IDE0cHggMCA2cHggMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxMTE4MjciLCAiI2Y5ZmFmYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgaDMgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbjogMTJweCAwIDRweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBwIHsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyB1bCwKICAgICAgLm1hcmtkb3duLXByZXZpZXcgb2wgewogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBsaSB7CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmM2Y0ZjYiLCAiIzFmMjkzNyIpfTsKICAgICAgICBwYWRkaW5nOiAycHggNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBmb250LWZhbWlseTogJ01vbmFjbycsICdDb25zb2xhcycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBwcmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMxZjI5MzciKX07CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBwcmUgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgc3Ryb25nIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBlbSB7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBhIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGE6aG92ZXIgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBibG9ja3F1b3RlIHsKICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMnB4OwogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmI3MjgwIiwgIiM5Y2EzYWYiKX07CiAgICAgIH0KICAgIGA7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvY29udGVudC9odG1sLmJsb2NrLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBIdG1sQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gImh0bWwiOwogIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgY29uc3QgaXNFZGl0TW9kZSA9IGJsb2NrLm1ldGFkYXRhPy5pc0VkaXRNb2RlID8/IHRydWU7CiAgICBjb25zdCBjb250ZW50MyA9IGJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJodG1sLWJsb2NrLWNvbnRhaW5lciR7aXNTZWxlY3RlZCA/ICIgc2VsZWN0ZWQiIDogIiJ9IiAKICAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICAgICBkYXRhLWVkaXQtbW9kZT0iJHtpc0VkaXRNb2RlfSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaHRtbC1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iaHRtbC1pY29uIj4mbHQ7LyZndDs8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Imh0bWwtdGl0bGUiPkhUTUw8L2Rpdj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9Imh0bWwtdG9nZ2xlLW1vZGUiIHRpdGxlPSIke2lzRWRpdE1vZGUgPyAiUHJldmlldyIgOiAiRWRpdCJ9Ij4KICAgICAgICAgICAgJHtpc0VkaXRNb2RlID8gIlx1ezFGNDQxfVx1RkUwRiIgOiAiXHUyNzBGXHVGRTBGIn0KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Imh0bWwtY29udGVudCI+CiAgICAgICAgICAke2lzRWRpdE1vZGUgPyB0aGlzLnJlbmRlckVkaXRvcihjb250ZW50MykgOiB0aGlzLnJlbmRlclByZXZpZXcoY29udGVudDMpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlckVkaXRvcihjb250ZW50MykgewogICAgcmV0dXJuIGAKICAgICAgPHRleHRhcmVhIGNsYXNzPSJodG1sLWVkaXRvciIgCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIgSFRNTCBjb250ZW50Li4uIgogICAgICAgICAgICAgICAgc3BlbGxjaGVjaz0iZmFsc2UiPiR7dGhpcy5lc2NhcGVIdG1sKGNvbnRlbnQzKX08L3RleHRhcmVhPgogICAgYDsKICB9CiAgcmVuZGVyUHJldmlldyhjb250ZW50MykgewogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iaHRtbC1wcmV2aWV3Ij4KICAgICAgICAke2NvbnRlbnQzIHx8ICc8ZGl2IGNsYXNzPSJwcmV2aWV3LWVtcHR5Ij5ObyBjb250ZW50IHRvIHByZXZpZXc8L2Rpdj4nfQogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IHRvZ2dsZUJ0biA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLXRvZ2dsZS1tb2RlIik7CiAgICBpZiAoIWNvbnRhaW5lciB8fCAhdG9nZ2xlQnRuKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkh0bWxCbG9ja0hhbmRsZXI6IENvdWxkIG5vdCBmaW5kIHJlcXVpcmVkIGVsZW1lbnRzIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghYmxvY2subWV0YWRhdGEpCiAgICAgIGJsb2NrLm1ldGFkYXRhID0ge307CiAgICBpZiAoYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSA9PT0gdm9pZCAwKQogICAgICBibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlID0gdHJ1ZTsKICAgIHRvZ2dsZUJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgaWYgKGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiLmh0bWwtZWRpdG9yIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSA9ICFibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlOwogICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgIH0pOwogICAgaWYgKGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUpIHsKICAgICAgdGhpcy5zZXR1cEVkaXRvcihlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnNldHVwUHJldmlldyhlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9CiAgfQogIHNldHVwRWRpdG9yKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIGlmICghZWRpdG9yKQogICAgICByZXR1cm47CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gaGFuZGxlcnMyLm9uQmx1cigpKTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsICgpID0+IHsKICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgdGhpcy52YWxpZGF0ZUh0bWwoZWRpdG9yLnZhbHVlKTsKICAgIH0pOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiVGFiIikgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IHN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvblN0YXJ0OwogICAgICAgIGNvbnN0IGVuZDMgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kOwogICAgICAgIGNvbnN0IHZhbHVlMiA9IGVkaXRvci52YWx1ZTsKICAgICAgICBpZiAoZTExLnNoaWZ0S2V5KSB7CiAgICAgICAgICBjb25zdCBiZWZvcmVDdXJzb3IgPSB2YWx1ZTIuc3Vic3RyaW5nKDAsIHN0YXJ0KTsKICAgICAgICAgIGNvbnN0IGxhc3ROZXdsaW5lID0gYmVmb3JlQ3Vyc29yLmxhc3RJbmRleE9mKCJcbiIpOwogICAgICAgICAgY29uc3QgbGluZVN0YXJ0ID0gbGFzdE5ld2xpbmUgKyAxOwogICAgICAgICAgY29uc3QgbGluZUNvbnRlbnQgPSB2YWx1ZTIuc3Vic3RyaW5nKGxpbmVTdGFydCwgc3RhcnQpOwogICAgICAgICAgaWYgKGxpbmVDb250ZW50LnN0YXJ0c1dpdGgoIiAgIikpIHsKICAgICAgICAgICAgZWRpdG9yLnZhbHVlID0gdmFsdWUyLnN1YnN0cmluZygwLCBsaW5lU3RhcnQpICsgbGluZUNvbnRlbnQuc3Vic3RyaW5nKDIpICsgdmFsdWUyLnN1YnN0cmluZyhzdGFydCk7CiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IGVkaXRvci5zZWxlY3Rpb25FbmQgPSBzdGFydCAtIDI7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVkaXRvci52YWx1ZSA9IHZhbHVlMi5zdWJzdHJpbmcoMCwgc3RhcnQpICsgIiAgIiArIHZhbHVlMi5zdWJzdHJpbmcoZW5kMyk7CiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gc3RhcnQgKyAyOwogICAgICAgIH0KICAgICAgICBibG9jay5jb250ZW50ID0gZWRpdG9yLnZhbHVlOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoKGUxMS5jdHJsS2V5IHx8IGUxMS5tZXRhS2V5KSAmJiBlMTEua2V5ID09PSAiLyIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmF1dG9DbG9zZVRhZyhlZGl0b3IpOwogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgIH0pOwogICAgdGhpcy5hdXRvUmVzaXplKGVkaXRvcik7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoKSA9PiB0aGlzLmF1dG9SZXNpemUoZWRpdG9yKSk7CiAgfQogIHNldHVwUHJldmlldyhlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBwcmV2aWV3ID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtcHJldmlldyIpOwogICAgaWYgKCFjb250YWluZXIgfHwgIXByZXZpZXcpCiAgICAgIHJldHVybjsKICAgIHByZXZpZXcuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsICIwIik7CiAgICBwcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gaGFuZGxlcnMyLm9uRm9jdXMoKSk7CiAgICBwcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgcHJldmlldy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICBpZiAoZTExLmtleSA9PT0gIkVudGVyIiAmJiAhZTExLnNoaWZ0S2V5KSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSA9IHRydWU7CiAgICAgICAgaGFuZGxlcnMyLm9uUmVxdWVzdFVwZGF0ZT8uKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgIH0pOwogICAgdGhpcy5zYW5kYm94Q29udGVudChwcmV2aWV3KTsKICB9CiAgYXV0b0Nsb3NlVGFnKGVkaXRvcikgewogICAgY29uc3QgY3Vyc29yUG9zID0gZWRpdG9yLnNlbGVjdGlvblN0YXJ0OwogICAgY29uc3QgdGV4dDkgPSBlZGl0b3IudmFsdWU7CiAgICBsZXQgdGFnU3RhcnQgPSBjdXJzb3JQb3M7CiAgICB3aGlsZSAodGFnU3RhcnQgPiAwICYmIHRleHQ5W3RhZ1N0YXJ0IC0gMV0gIT09ICI8IikgewogICAgICB0YWdTdGFydC0tOwogICAgfQogICAgaWYgKHRhZ1N0YXJ0ID4gMCkgewogICAgICBjb25zdCB0YWdDb250ZW50ID0gdGV4dDkuc3Vic3RyaW5nKHRhZ1N0YXJ0LCBjdXJzb3JQb3MpOwogICAgICBjb25zdCB0YWdNYXRjaCA9IHRhZ0NvbnRlbnQubWF0Y2goL14oXHcrKS8pOwogICAgICBpZiAodGFnTWF0Y2gpIHsKICAgICAgICBjb25zdCB0YWdOYW1lID0gdGFnTWF0Y2hbMV07CiAgICAgICAgY29uc3QgY2xvc2luZ1RhZyA9IGA8LyR7dGFnTmFtZX0+YDsKICAgICAgICBlZGl0b3IudmFsdWUgPSB0ZXh0OS5zdWJzdHJpbmcoMCwgY3Vyc29yUG9zKSArICI+IiArIGNsb3NpbmdUYWcgKyB0ZXh0OS5zdWJzdHJpbmcoY3Vyc29yUG9zKTsKICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gY3Vyc29yUG9zICsgMTsKICAgICAgfQogICAgfQogIH0KICBhdXRvUmVzaXplKGVkaXRvcikgewogICAgZWRpdG9yLnN0eWxlLmhlaWdodCA9ICJhdXRvIjsKICAgIGVkaXRvci5zdHlsZS5oZWlnaHQgPSBlZGl0b3Iuc2Nyb2xsSGVpZ2h0ICsgInB4IjsKICB9CiAgdmFsaWRhdGVIdG1sKGh0bWwyMCkgewogICAgY29uc3Qgb3BlblRhZ3MgPSBbXTsKICAgIGNvbnN0IHRhZ1JlZ2V4ID0gLzxcLz8oW2EtekEtWl1bYS16QS1aMC05XSopXGJbXj5dKj4vZzsKICAgIGxldCBtYXRjaDI7CiAgICB3aGlsZSAoKG1hdGNoMiA9IHRhZ1JlZ2V4LmV4ZWMoaHRtbDIwKSkgIT09IG51bGwpIHsKICAgICAgY29uc3QgaXNDbG9zaW5nID0gbWF0Y2gyWzBdLnN0YXJ0c1dpdGgoIjwvIik7CiAgICAgIGNvbnN0IHRhZ05hbWUgPSBtYXRjaDJbMV0udG9Mb3dlckNhc2UoKTsKICAgICAgaWYgKGlzQ2xvc2luZykgewogICAgICAgIGlmIChvcGVuVGFncy5sZW5ndGggPT09IDAgfHwgb3BlblRhZ3Nbb3BlblRhZ3MubGVuZ3RoIC0gMV0gIT09IHRhZ05hbWUpIHsKICAgICAgICAgIGNvbnNvbGUud2FybihgTWlzbWF0Y2hlZCBjbG9zaW5nIHRhZzogJHt0YWdOYW1lfWApOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBvcGVuVGFncy5wb3AoKTsKICAgICAgfSBlbHNlIGlmICghbWF0Y2gyWzBdLmVuZHNXaXRoKCIvPiIpKSB7CiAgICAgICAgb3BlblRhZ3MucHVzaCh0YWdOYW1lKTsKICAgICAgfQogICAgfQogICAgaWYgKG9wZW5UYWdzLmxlbmd0aCA+IDApIHsKICAgICAgY29uc29sZS53YXJuKGBVbmNsb3NlZCB0YWdzOiAke29wZW5UYWdzLmpvaW4oIiwgIil9YCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KICBzYW5kYm94Q29udGVudChwcmV2aWV3KSB7CiAgICBjb25zdCBzY3JpcHRzID0gcHJldmlldy5xdWVyeVNlbGVjdG9yQWxsKCJzY3JpcHQiKTsKICAgIHNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KSA9PiBzY3JpcHQucmVtb3ZlKCkpOwogICAgY29uc3QgYWxsRWxlbWVudHMgPSBwcmV2aWV3LnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTsKICAgIGFsbEVsZW1lbnRzLmZvckVhY2goKGVsKSA9PiB7CiAgICAgIEFycmF5LmZyb20oZWwuYXR0cmlidXRlcykuZm9yRWFjaCgoYXR0cikgPT4gewogICAgICAgIGlmIChhdHRyLm5hbWUuc3RhcnRzV2l0aCgib24iKSkgewogICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHIubmFtZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogICAgY29uc3QgZm9ybXMgPSBwcmV2aWV3LnF1ZXJ5U2VsZWN0b3JBbGwoImZvcm0iKTsKICAgIGZvcm1zLmZvckVhY2goKGZvcm0pID0+IHsKICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCJzdWJtaXQiLCAoZTExKSA9PiB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICB9KTsKICAgIH0pOwogIH0KICBlc2NhcGVIdG1sKHRleHQ5KSB7CiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ5OwogICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7CiAgfQogIGdldENvbnRlbnQoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICByZXR1cm4gZWRpdG9yLnZhbHVlOwogICAgfQogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgIHJldHVybiAiIjsKICB9CiAgc2V0Q29udGVudChlbGVtZW50NCwgY29udGVudDMpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBlZGl0b3IudmFsdWUgPSBjb250ZW50MzsKICAgICAgdGhpcy5hdXRvUmVzaXplKGVkaXRvcik7CiAgICB9CiAgfQogIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIHJldHVybiBlZGl0b3IgPyBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgOiBudWxsOwogIH0KICBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IDA7CiAgICAgIGVkaXRvci5mb2N1cygpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgICB9CiAgfQogIHNldEN1cnNvclRvRW5kKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgY29uc3QgbGVuZ3RoID0gZWRpdG9yLnZhbHVlLmxlbmd0aDsKICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IGxlbmd0aDsKICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgZm9jdXMoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBlZGl0b3IuZm9jdXMoKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IHByZXZpZXcgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1wcmV2aWV3Iik7CiAgICAgIHByZXZpZXc/LmZvY3VzKCk7CiAgICB9CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBpZiAocG9zaXRpb24zID09PSAic3RhcnQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KTsKICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbjMgPT09ICJlbmQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb0VuZChlbGVtZW50NCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBvc2l0aW9uMyA9PT0gIm51bWJlciIpIHsKICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gcG9zaXRpb24zOwogICAgICAgIGVkaXRvci5mb2N1cygpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgZ2V0U3BsaXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIGlmICghZWRpdG9yKQogICAgICByZXR1cm4gbnVsbDsKICAgIGNvbnN0IGN1cnNvclBvcyA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgIHJldHVybiB7CiAgICAgIGJlZm9yZTogZWRpdG9yLnZhbHVlLnN1YnN0cmluZygwLCBjdXJzb3JQb3MpLAogICAgICBhZnRlcjogZWRpdG9yLnZhbHVlLnN1YnN0cmluZyhjdXJzb3JQb3MpCiAgICB9OwogIH0KICBnZXRTdHlsZXMoKSB7CiAgICByZXR1cm4gYAogICAgICAvKiBIVE1MIEJsb2NrIENvbnRhaW5lciAqLwogICAgICAuaHRtbC1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLWJsb2NrLWNvbnRhaW5lci5zZWxlY3RlZCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBIZWFkZXIgKi8KICAgICAgLmh0bWwtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC10aXRsZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtdG9nZ2xlLW1vZGUgewogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtdG9nZ2xlLW1vZGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBDb250ZW50ICovCiAgICAgIC5odG1sLWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAxMjBweDsKICAgICAgfQogICAgICAKICAgICAgLyogRWRpdG9yICovCiAgICAgIC5odG1sLWVkaXRvciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLWhlaWdodDogMTIwcHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgICAgZm9udC1mYW1pbHk6ICdNb25hY28nLCAnQ29uc29sYXMnLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWYyOTM3IiwgIiNmM2Y0ZjYiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtZWRpdG9yOjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFByZXZpZXcgKi8KICAgICAgLmh0bWwtcHJldmlldyB7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBtaW4taGVpZ2h0OiA5NnB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWYyOTM3IiwgIiNmM2Y0ZjYiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5wcmV2aWV3LWVtcHR5IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFNhbmRib3hlZCBIVE1MIHByZXZpZXcgc3R5bGVzICovCiAgICAgIC5odG1sLXByZXZpZXcgKiB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IGltZyB7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IGEgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjNjBhNWZhIil9OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyBhOmhvdmVyIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyB0YWJsZSB7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IHRoLAogICAgICAuaHRtbC1wcmV2aWV3IHRkIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IHRoIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgcHJlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMWYyOTM3Iil9OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyBjb2RlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMWYyOTM3Iil9OwogICAgICAgIHBhZGRpbmc6IDJweCA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgcHJlIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgIGA7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmJsb2NrcmVnaXN0cmF0aW9uLmpzCmZ1bmN0aW9uIHJlZ2lzdGVyQWxsQmxvY2tIYW5kbGVycygpIHsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJkaXZpZGVyIiwgbmV3IERpdmlkZXJCbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigicGFyYWdyYXBoIiwgbmV3IFBhcmFncmFwaEJsb2NrSGFuZGxlcigpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJoZWFkaW5nLTEiLCBuZXcgSGVhZGluZ0Jsb2NrSGFuZGxlcigiaGVhZGluZy0xIikpOwogIEJsb2NrUmVnaXN0cnkucmVnaXN0ZXIoImhlYWRpbmctMiIsIG5ldyBIZWFkaW5nQmxvY2tIYW5kbGVyKCJoZWFkaW5nLTIiKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigiaGVhZGluZy0zIiwgbmV3IEhlYWRpbmdCbG9ja0hhbmRsZXIoImhlYWRpbmctMyIpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJxdW90ZSIsIG5ldyBRdW90ZUJsb2NrSGFuZGxlcigpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJjb2RlIiwgbmV3IENvZGVCbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigibGlzdCIsIG5ldyBMaXN0QmxvY2tIYW5kbGVyKCkpOwogIEJsb2NrUmVnaXN0cnkucmVnaXN0ZXIoImltYWdlIiwgbmV3IEltYWdlQmxvY2tIYW5kbGVyKCkpOwogIEJsb2NrUmVnaXN0cnkucmVnaXN0ZXIoInlvdXR1YmUiLCBuZXcgWW91VHViZUJsb2NrSGFuZGxlcigpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJhdHRhY2htZW50IiwgbmV3IEF0dGFjaG1lbnRCbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigibWFya2Rvd24iLCBuZXcgTWFya2Rvd25CbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigiaHRtbCIsIG5ldyBIdG1sQmxvY2tIYW5kbGVyKCkpOwp9CnJlZ2lzdGVyQWxsQmxvY2tIYW5kbGVycygpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLm1vZGFsbWFuYWdlci5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgV3lzaXd5Z01vZGFsTWFuYWdlciA9IGNsYXNzIHsKICAvKioKICAgKiBTaG93cyBsYW5ndWFnZSBzZWxlY3Rpb24gbW9kYWwgZm9yIGNvZGUgYmxvY2tzCiAgICovCiAgc3RhdGljIGFzeW5jIHNob3dMYW5ndWFnZVNlbGVjdGlvbk1vZGFsKCkgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gewogICAgICBsZXQgc2VsZWN0ZWRMYW5ndWFnZSA9IG51bGw7CiAgICAgIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICBoZWFkaW5nOiAiU2VsZWN0IFByb2dyYW1taW5nIExhbmd1YWdlIiwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgLmxhbmd1YWdlLWNvbnRhaW5lciB7CiAgICAgICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5sYW5ndWFnZS1ncmlkIHsKICAgICAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDEyMHB4LCAxZnIpKTsKICAgICAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAubGFuZ3VhZ2UtYnV0dG9uIHsKICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDhweDsKICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzM3NDE1MSIsICIjZTVlN2ViIil9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5sYW5ndWFnZS1idXR0b246aG92ZXIgewogICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxZjI5MzciKX07CiAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5sYW5ndWFnZS1idXR0b24uc2VsZWN0ZWQgewogICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMzNzQxNTEiKX07CiAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICAgICAgICB9CiAgICAgICAgICA8L3N0eWxlPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2UtY29udGFpbmVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2UtZ3JpZCI+CiAgICAgICAgICAgICAgJHt0aGlzLmdldExhbmd1YWdlcygpLm1hcCgobGFuZykgPT4gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2UtYnV0dG9uICR7c2VsZWN0ZWRMYW5ndWFnZSA9PT0gbGFuZy50b0xvd2VyQ2FzZSgpID8gInNlbGVjdGVkIiA6ICIifSIgCiAgICAgICAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB7CiAgICAgICAgICBzZWxlY3RlZExhbmd1YWdlID0gbGFuZy50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJkZWVzLW1vZGFsIik7CiAgICAgICAgICBpZiAobW9kYWwgJiYgdHlwZW9mIG1vZGFsLmRlc3Ryb3kgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgfQogICAgICAgICAgcmVzb2x2ZTIoc2VsZWN0ZWRMYW5ndWFnZSk7CiAgICAgICAgfX0iPgogICAgICAgICAgICAgICAgICAke2xhbmd9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgLAogICAgICAgIG1lbnVPcHRpb25zOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSk7CiAgICB9KTsKICB9CiAgLyoqCiAgICogU2hvd3MgYmxvY2sgc2V0dGluZ3MgbW9kYWwKICAgKi8KICBzdGF0aWMgYXN5bmMgc2hvd0Jsb2NrU2V0dGluZ3NNb2RhbChibG9jaywgb25VcGRhdGUpIHsKICAgIGNvbnN0IGNvbnRlbnQzID0gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICAuc2V0dGluZ3MtY29udGFpbmVyIHsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgfQogICAgICAgIC5zZXR0aW5ncy1zZWN0aW9uIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIC5zZXR0aW5ncy1zZWN0aW9uOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgLnNldHRpbmdzLWxhYmVsIHsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2YjcyODAiLCAiIzljYTNhZiIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOwogICAgICAgIH0KICAgICAgICAuYmxvY2stdHlwZS1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgxNjBweCwgMWZyKSk7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgLmJsb2NrLXR5cGUtYnV0dG9uIHsKICAgICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgICAgfQogICAgICAgIC5ibG9jay10eXBlLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICAgIH0KICAgICAgICAuYmxvY2stdHlwZS1idXR0b24uc2VsZWN0ZWQgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmM2Y0ZjYiLCAiIzM3NDE1MSIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICAgIH0KICAgICAgICAuYmxvY2stdHlwZS1pY29uIHsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgICAgb3BhY2l0eTogMC43OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MtY29udGFpbmVyIj4KICAgICAgICAke3RoaXMuZ2V0QmxvY2tUeXBlU2VsZWN0b3IoYmxvY2ssIG9uVXBkYXRlKX0KICAgICAgICAke2Jsb2NrLnR5cGUgPT09ICJjb2RlIiA/IHRoaXMuZ2V0Q29kZUJsb2NrU2V0dGluZ3MoYmxvY2ssIG9uVXBkYXRlKSA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgIGhlYWRpbmc6ICJCbG9jayBTZXR0aW5ncyIsCiAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICBtZW51T3B0aW9uczogWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEb25lIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiB7CiAgICAgICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0KICAgIH0pOwogIH0KICAvKioKICAgKiBHZXRzIGNvZGUgYmxvY2sgc2V0dGluZ3MgY29udGVudAogICAqLwogIHN0YXRpYyBnZXRDb2RlQmxvY2tTZXR0aW5ncyhibG9jaywgb25VcGRhdGUpIHsKICAgIGNvbnN0IGN1cnJlbnRMYW5ndWFnZSA9IGJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZSB8fCAiamF2YXNjcmlwdCI7CiAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICAubGFuZ3VhZ2UtZ3JpZCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTAwcHgsIDFmcikpOwogICAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgfQogICAgICAgIC5sYW5ndWFnZS1idXR0b24gewogICAgICAgICAgcGFkZGluZzogOHB4IDRweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgICAgfQogICAgICAgIC5sYW5ndWFnZS1idXR0b246aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzRiNTU2MyIpfTsKICAgICAgICB9CiAgICAgICAgLmxhbmd1YWdlLWJ1dHRvbi5zZWxlY3RlZCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMzc0MTUxIil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1zZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1sYWJlbCI+UHJvZ3JhbW1pbmcgTGFuZ3VhZ2U8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJsYW5ndWFnZS1ncmlkIj4KICAgICAgICAgICR7dGhpcy5nZXRMYW5ndWFnZXMoKS5tYXAoKGxhbmcpID0+IGIyYAogICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgIGNsYXNzPSJsYW5ndWFnZS1idXR0b24gJHtjdXJyZW50TGFuZ3VhZ2UgPT09IGxhbmcudG9Mb3dlckNhc2UoKSA/ICJzZWxlY3RlZCIgOiAiIn0iIAogICAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB7CiAgICAgIGlmICghYmxvY2subWV0YWRhdGEpCiAgICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgICAgYmxvY2subWV0YWRhdGEubGFuZ3VhZ2UgPSBsYW5nLnRvTG93ZXJDYXNlKCk7CiAgICAgIG9uVXBkYXRlKGJsb2NrKTsKICAgICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJkZWVzLW1vZGFsIik7CiAgICAgIGlmIChtb2RhbCAmJiB0eXBlb2YgbW9kYWwuZGVzdHJveSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgfQogICAgfX0iCiAgICAgICAgICAgICAgZGF0YS1sYW5nPSIke2xhbmd9IgogICAgICAgICAgICA+JHtsYW5nfTwvZGl2PgogICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgLyoqCiAgICogR2V0cyBhdmFpbGFibGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzCiAgICovCiAgc3RhdGljIGdldExhbmd1YWdlcygpIHsKICAgIHJldHVybiBbLi4uUFJPR1JBTU1JTkdfTEFOR1VBR0VTXTsKICB9CiAgLyoqCiAgICogR2V0cyBibG9jayB0eXBlIHNlbGVjdG9yCiAgICovCiAgc3RhdGljIGdldEJsb2NrVHlwZVNlbGVjdG9yKGJsb2NrLCBvblVwZGF0ZSkgewogICAgY29uc3QgYmxvY2tUeXBlcyA9IFd5c2l3eWdTaG9ydGN1dHMuZ2V0U2xhc2hNZW51SXRlbXMoKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udHlwZSAhPT0gImRpdmlkZXIiKTsKICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3Mtc2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MtbGFiZWwiPkJsb2NrIFR5cGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJibG9jay10eXBlLWdyaWQiPgogICAgICAgICAgJHtibG9ja1R5cGVzLm1hcCgoaXRlbSkgPT4gYjJgCiAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgY2xhc3M9ImJsb2NrLXR5cGUtYnV0dG9uICR7YmxvY2sudHlwZSA9PT0gaXRlbS50eXBlID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9IiR7YXN5bmMgKGUxMSkgPT4gewogICAgICBjb25zdCBidXR0b24gPSBlMTEuY3VycmVudFRhcmdldDsKICAgICAgY29uc3Qgb2xkVHlwZSA9IGJsb2NrLnR5cGU7CiAgICAgIGJsb2NrLnR5cGUgPSBpdGVtLnR5cGU7CiAgICAgIGlmIChvbGRUeXBlID09PSAiY29kZSIgJiYgYmxvY2sudHlwZSAhPT0gImNvZGUiKSB7CiAgICAgICAgZGVsZXRlIGJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZTsKICAgICAgfSBlbHNlIGlmIChvbGRUeXBlID09PSAibGlzdCIgJiYgYmxvY2sudHlwZSAhPT0gImxpc3QiKSB7CiAgICAgICAgZGVsZXRlIGJsb2NrLm1ldGFkYXRhPy5saXN0VHlwZTsKICAgICAgfSBlbHNlIGlmIChibG9jay50eXBlID09PSAibGlzdCIgJiYgIWJsb2NrLm1ldGFkYXRhPy5saXN0VHlwZSkgewogICAgICAgIGJsb2NrLm1ldGFkYXRhID0geyBsaXN0VHlwZTogImJ1bGxldCIgfTsKICAgICAgfSBlbHNlIGlmIChibG9jay50eXBlID09PSAiY29kZSIgJiYgIWJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZSkgewogICAgICAgIGNvbnN0IGxhbmd1YWdlID0gYXdhaXQgdGhpcy5zaG93TGFuZ3VhZ2VTZWxlY3Rpb25Nb2RhbCgpOwogICAgICAgIGlmIChsYW5ndWFnZSkgewogICAgICAgICAgYmxvY2subWV0YWRhdGEgPSB7IGxhbmd1YWdlIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJsb2NrLnR5cGUgPSBvbGRUeXBlOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBvblVwZGF0ZShibG9jayk7CiAgICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZGVlcy1tb2RhbCIpOwogICAgICBpZiAobW9kYWwgJiYgdHlwZW9mIG1vZGFsLmRlc3Ryb3kgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBtb2RhbC5kZXN0cm95KCk7CiAgICAgIH0KICAgIH19IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJsb2NrLXR5cGUtaWNvbiI+JHtpdGVtLmljb259PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuPiR7aXRlbS5sYWJlbH08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuaW5wdXRoYW5kbGVyLmpzCnZhciBXeXNpd3lnSW5wdXRIYW5kbGVyID0gY2xhc3MgewogIGNvbXBvbmVudDsKICBzYXZlVGltZW91dCA9IG51bGw7CiAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7CiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBpbnB1dCBldmVudHMgZm9yIGJsb2NrcwogICAqLwogIGhhbmRsZUJsb2NrSW5wdXQoZTExLCBibG9jaykgewogICAgaWYgKHRoaXMuY29tcG9uZW50LmlzQ29tcG9zaW5nKQogICAgICByZXR1cm47CiAgICBjb25zdCB0YXJnZXQgPSBlMTEudGFyZ2V0OwogICAgY29uc3QgdGV4dENvbnRlbnQgPSB0YXJnZXQudGV4dENvbnRlbnQgfHwgIiI7CiAgICBjb25zdCBkZXRlY3RlZFR5cGUgPSB0aGlzLmRldGVjdEJsb2NrVHlwZUludGVudCh0ZXh0Q29udGVudCk7CiAgICBpZiAoZGV0ZWN0ZWRUeXBlICYmIGRldGVjdGVkVHlwZS50eXBlICE9PSBibG9jay50eXBlKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLmhhbmRsZUJsb2NrVHJhbnNmb3JtYXRpb24oYmxvY2ssIGRldGVjdGVkVHlwZSwgdGFyZ2V0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5oYW5kbGVTbGFzaENvbW1hbmQodGV4dENvbnRlbnQsIHRhcmdldCk7CiAgICB0aGlzLnNjaGVkdWxlQXV0b1NhdmUoKTsKICB9CiAgLyoqCiAgICogVXBkYXRlcyBibG9jayBjb250ZW50IGJhc2VkIG9uIGl0cyB0eXBlCiAgICovCiAgdXBkYXRlQmxvY2tDb250ZW50KGJsb2NrLCB0YXJnZXQpIHsKICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gdGFyZ2V0LmNsb3Nlc3QoIi5ibG9jay13cmFwcGVyIik7CiAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgIGlmIChibG9ja0NvbXBvbmVudCkgewogICAgICBjb25zdCBuZXdDb250ZW50ID0gYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpOwogICAgICBpZiAoYmxvY2suY29udGVudCAhPT0gbmV3Q29udGVudCkgewogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBuZXdDb250ZW50OwogICAgICB9CiAgICAgIGlmIChibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgICBjb25zdCBsaXN0RWxlbWVudCA9IHRhcmdldC5xdWVyeVNlbGVjdG9yKCJvbCwgdWwiKTsKICAgICAgICBpZiAobGlzdEVsZW1lbnQpIHsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhID0gewogICAgICAgICAgICBsaXN0VHlwZTogbGlzdEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAib2wiID8gIm9yZGVyZWQiIDogImJ1bGxldCIKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoYmxvY2sudHlwZSA9PT0gImxpc3QiKSB7CiAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gdGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoImxpIik7CiAgICAgICAgYmxvY2suY29udGVudCA9IEFycmF5LmZyb20obGlzdEl0ZW1zKS5tYXAoKGxpMikgPT4gbGkyLmlubmVySFRNTCB8fCAiIikuam9pbigiXG4iKTsKICAgICAgICBjb25zdCBsaXN0RWxlbWVudCA9IHRhcmdldC5xdWVyeVNlbGVjdG9yKCJvbCwgdWwiKTsKICAgICAgICBpZiAobGlzdEVsZW1lbnQpIHsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhID0gewogICAgICAgICAgICBsaXN0VHlwZTogbGlzdEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAib2wiID8gIm9yZGVyZWQiIDogImJ1bGxldCIKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGJsb2NrLnR5cGUgPT09ICJjb2RlIikgewogICAgICAgIGJsb2NrLmNvbnRlbnQgPSB0YXJnZXQudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYmxvY2suY29udGVudCA9IHRhcmdldC5pbm5lckhUTUwgfHwgIiI7CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogRGV0ZWN0cyBpZiB0aGUgdXNlciBpcyB0cnlpbmcgdG8gY3JlYXRlIGEgc3BlY2lmaWMgYmxvY2sgdHlwZQogICAqLwogIGRldGVjdEJsb2NrVHlwZUludGVudChjb250ZW50MykgewogICAgY29uc3QgaGVhZGluZ1Jlc3VsdCA9IFd5c2l3eWdTaG9ydGN1dHMuY2hlY2tIZWFkaW5nU2hvcnRjdXQoY29udGVudDMpOwogICAgaWYgKGhlYWRpbmdSZXN1bHQpIHsKICAgICAgcmV0dXJuIGhlYWRpbmdSZXN1bHQ7CiAgICB9CiAgICBjb25zdCBsaXN0UmVzdWx0ID0gV3lzaXd5Z1Nob3J0Y3V0cy5jaGVja0xpc3RTaG9ydGN1dChjb250ZW50Myk7CiAgICBpZiAobGlzdFJlc3VsdCkgewogICAgICByZXR1cm4gbGlzdFJlc3VsdDsKICAgIH0KICAgIGlmIChXeXNpd3lnU2hvcnRjdXRzLmNoZWNrUXVvdGVTaG9ydGN1dChjb250ZW50MykpIHsKICAgICAgcmV0dXJuIHsgdHlwZTogInF1b3RlIiB9OwogICAgfQogICAgaWYgKFd5c2l3eWdTaG9ydGN1dHMuY2hlY2tDb2RlU2hvcnRjdXQoY29udGVudDMpKSB7CiAgICAgIHJldHVybiB7IHR5cGU6ICJjb2RlIiB9OwogICAgfQogICAgaWYgKFd5c2l3eWdTaG9ydGN1dHMuY2hlY2tEaXZpZGVyU2hvcnRjdXQoY29udGVudDMpKSB7CiAgICAgIHJldHVybiB7IHR5cGU6ICJkaXZpZGVyIiB9OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIC8qKgogICAqIEhhbmRsZXMgYmxvY2sgdHlwZSB0cmFuc2Zvcm1hdGlvbgogICAqLwogIGFzeW5jIGhhbmRsZUJsb2NrVHJhbnNmb3JtYXRpb24oYmxvY2ssIGRldGVjdGVkVHlwZSwgdGFyZ2V0KSB7CiAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgIGlmIChkZXRlY3RlZFR5cGUudHlwZSA9PT0gImxpc3QiKSB7CiAgICAgIGJsb2NrLnR5cGUgPSAibGlzdCI7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgYmxvY2subWV0YWRhdGEgPSB7IGxpc3RUeXBlOiBkZXRlY3RlZFR5cGUubGlzdFR5cGUgfTsKICAgICAgY29uc3QgbGlzdFRhZyA9IGRldGVjdGVkVHlwZS5saXN0VHlwZSA9PT0gIm9yZGVyZWQiID8gIm9sIiA6ICJ1bCI7CiAgICAgIHRhcmdldC5pbm5lckhUTUwgPSBgPCR7bGlzdFRhZ30+PGxpPjwvbGk+PC8ke2xpc3RUYWd9PmA7CiAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCk7CiAgICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlQmxvY2tFbGVtZW50KGJsb2NrLmlkKTsKICAgICAgfQogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBXeXNpd3lnQmxvY2tzLmZvY3VzTGlzdEl0ZW0odGFyZ2V0KTsKICAgICAgfSwgMCk7CiAgICB9IGVsc2UgaWYgKGRldGVjdGVkVHlwZS50eXBlID09PSAiZGl2aWRlciIpIHsKICAgICAgYmxvY2sudHlwZSA9ICJkaXZpZGVyIjsKICAgICAgYmxvY2suY29udGVudCA9ICIgIjsKICAgICAgaWYgKHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYpIHsKICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVCbG9ja0VsZW1lbnQoYmxvY2suaWQpOwogICAgICB9CiAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgfSBlbHNlIGlmIChkZXRlY3RlZFR5cGUudHlwZSA9PT0gImNvZGUiKSB7CiAgICAgIGNvbnN0IGxhbmd1YWdlID0gYXdhaXQgV3lzaXd5Z01vZGFsTWFuYWdlci5zaG93TGFuZ3VhZ2VTZWxlY3Rpb25Nb2RhbCgpOwogICAgICBpZiAobGFuZ3VhZ2UpIHsKICAgICAgICBibG9jay50eXBlID0gImNvZGUiOwogICAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICBibG9jay5tZXRhZGF0YSA9IHsgbGFuZ3VhZ2UgfTsKICAgICAgICB0YXJnZXQudGV4dENvbnRlbnQgPSAiIjsKICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVCbG9ja0VsZW1lbnQoYmxvY2suaWQpOwogICAgICAgIH0KICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2soYmxvY2suaWQsICJzdGFydCIpOwogICAgICAgIH0sIDUwKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYmxvY2sudHlwZSA9IGRldGVjdGVkVHlwZS50eXBlOwogICAgICBibG9jay5jb250ZW50ID0gIiI7CiAgICAgIHRhcmdldC50ZXh0Q29udGVudCA9ICIiOwogICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgICBpZiAodGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChibG9jay5pZCk7CiAgICAgIH0KICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhibG9jay5pZCwgInN0YXJ0Iik7CiAgICAgIH0sIDUwKTsKICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBzbGFzaCBjb21tYW5kIGRldGVjdGlvbiBhbmQgbWVudSBkaXNwbGF5CiAgICovCiAgaGFuZGxlU2xhc2hDb21tYW5kKHRleHRDb250ZW50LCB0YXJnZXQpIHsKICAgIGNvbnN0IHNsYXNoTWVudSA9IHRoaXMuY29tcG9uZW50LnNsYXNoTWVudTsKICAgIGNvbnN0IGlzU2xhc2hNZW51VmlzaWJsZSA9IHNsYXNoTWVudSAmJiBzbGFzaE1lbnUudmlzaWJsZTsKICAgIGlmICh0ZXh0Q29udGVudCA9PT0gIi8iIHx8IHRleHRDb250ZW50LnN0YXJ0c1dpdGgoIi8iKSAmJiBpc1NsYXNoTWVudVZpc2libGUpIHsKICAgICAgaWYgKCFpc1NsYXNoTWVudVZpc2libGUgJiYgdGV4dENvbnRlbnQgPT09ICIvIikgewogICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmdldENhcmV0Q29vcmRpbmF0ZXModGFyZ2V0KTsKICAgICAgICBzbGFzaE1lbnUuc2hvdyh7IHg6IHJlY3QubGVmdCwgeTogcmVjdC5ib3R0b20gKyA0IH0sICh0eXBlNSkgPT4gewogICAgICAgICAgdGhpcy5jb21wb25lbnQuaW5zZXJ0QmxvY2sodHlwZTUpOwogICAgICAgIH0pOwogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gdGFyZ2V0KSB7CiAgICAgICAgICAgIHRhcmdldC5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChzbGFzaE1lbnUpIHsKICAgICAgICBzbGFzaE1lbnUudXBkYXRlRmlsdGVyKHRleHRDb250ZW50LnNsaWNlKDEpKTsKICAgICAgfQogICAgfSBlbHNlIGlmICghdGV4dENvbnRlbnQuc3RhcnRzV2l0aCgiLyIpKSB7CiAgICAgIHRoaXMuY29tcG9uZW50LmNsb3NlU2xhc2hNZW51KCk7CiAgICB9CiAgfQogIC8qKgogICAqIEdldHMgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBjYXJldC9jdXJzb3IKICAgKi8KICBnZXRDYXJldENvb3JkaW5hdGVzKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgaWYgKHJlY3Qud2lkdGggPiAwIHx8IHJlY3QuaGVpZ2h0ID4gMCkgewogICAgICAgIHJldHVybiByZWN0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZWxlbWVudDQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgfQogIC8qKgogICAqIFNjaGVkdWxlcyBhdXRvLXNhdmUgYWZ0ZXIgYSBkZWxheQogICAqLwogIHNjaGVkdWxlQXV0b1NhdmUoKSB7CiAgICBpZiAodGhpcy5zYXZlVGltZW91dCkgewogICAgICBjbGVhclRpbWVvdXQodGhpcy5zYXZlVGltZW91dCk7CiAgICB9CiAgICBpZiAodGhpcy5jb21wb25lbnQuc2xhc2hNZW51ICYmIHRoaXMuY29tcG9uZW50LnNsYXNoTWVudS52aXNpYmxlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuc2F2ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgdGhpcy5zeW5jQWxsQmxvY2tDb250ZW50KCk7CiAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCk7CiAgICB9LCAyZTMpOwogIH0KICAvKioKICAgKiBTeW5jcyBjb250ZW50IGZyb20gYWxsIGJsb2NrIERPTXMgdG8gdGhlIGRhdGEgbW9kZWwKICAgKi8KICBzeW5jQWxsQmxvY2tDb250ZW50KCkgewogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7CiAgICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gdGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSB3cmFwcGVyRWxlbWVudD8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgIGlmIChibG9ja0NvbXBvbmVudCAmJiBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KSB7CiAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQoKTsKICAgICAgICBpZiAoYmxvY2suY29udGVudCAhPT0gbmV3Q29udGVudCkgewogICAgICAgICAgYmxvY2suY29udGVudCA9IG5ld0NvbnRlbnQ7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9CiAgLyoqCiAgICogQ2xlYW5zIHVwIHJlc291cmNlcwogICAqLwogIGRlc3Ryb3koKSB7CiAgICBpZiAodGhpcy5zYXZlVGltZW91dCkgewogICAgICBjbGVhclRpbWVvdXQodGhpcy5zYXZlVGltZW91dCk7CiAgICB9CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmtleWJvYXJkaGFuZGxlci5qcwp2YXIgV3lzaXd5Z0tleWJvYXJkSGFuZGxlciA9IGNsYXNzIHsKICBjb21wb25lbnQ7CiAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7CiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBrZXlib2FyZCBldmVudHMgZm9yIGJsb2NrcwogICAqLwogIGFzeW5jIGhhbmRsZUJsb2NrS2V5RG93bihlMTEsIGJsb2NrKSB7CiAgICBpZiAodGhpcy5jb21wb25lbnQuc2xhc2hNZW51LnZpc2libGUgJiYgdGhpcy5pc1NsYXNoTWVudUtleShlMTEua2V5KSkgewogICAgICB0aGlzLmNvbXBvbmVudC5oYW5kbGVTbGFzaE1lbnVLZXlib2FyZChlMTEpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAodGhpcy5oYW5kbGVGb3JtYXR0aW5nU2hvcnRjdXRzKGUxMSkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgc3dpdGNoIChlMTEua2V5KSB7CiAgICAgIGNhc2UgIlRhYiI6CiAgICAgICAgdGhpcy5oYW5kbGVUYWIoZTExLCBibG9jayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkVudGVyIjoKICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUVudGVyKGUxMSwgYmxvY2spOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJCYWNrc3BhY2UiOgogICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQmFja3NwYWNlKGUxMSwgYmxvY2spOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJEZWxldGUiOgogICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRGVsZXRlKGUxMSwgYmxvY2spOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJBcnJvd1VwIjoKICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUFycm93VXAoZTExLCBibG9jayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkFycm93RG93biI6CiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVBcnJvd0Rvd24oZTExLCBibG9jayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkFycm93TGVmdCI6CiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVBcnJvd0xlZnQoZTExLCBibG9jayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkFycm93UmlnaHQiOgogICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQXJyb3dSaWdodChlMTEsIGJsb2NrKTsKICAgICAgICBicmVhazsKICAgIH0KICB9CiAgLyoqCiAgICogQ2hlY2tzIGlmIGtleSBpcyBmb3Igc2xhc2ggbWVudSBuYXZpZ2F0aW9uCiAgICovCiAgaXNTbGFzaE1lbnVLZXkoa2V5MikgewogICAgcmV0dXJuIFsiQXJyb3dEb3duIiwgIkFycm93VXAiLCAiRW50ZXIiLCAiRXNjYXBlIl0uaW5jbHVkZXMoa2V5Mik7CiAgfQogIC8qKgogICAqIEhhbmRsZXMgZm9ybWF0dGluZyBrZXlib2FyZCBzaG9ydGN1dHMKICAgKi8KICBoYW5kbGVGb3JtYXR0aW5nU2hvcnRjdXRzKGUxMSkgewogICAgaWYgKCEoZTExLm1ldGFLZXkgfHwgZTExLmN0cmxLZXkpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBzd2l0Y2ggKGUxMS5rZXkudG9Mb3dlckNhc2UoKSkgewogICAgICBjYXNlICJiIjoKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuY29tcG9uZW50LmFwcGx5Rm9ybWF0KCJib2xkIikpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICBjYXNlICJpIjoKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuY29tcG9uZW50LmFwcGx5Rm9ybWF0KCJpdGFsaWMiKSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGNhc2UgInUiOgogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5jb21wb25lbnQuYXBwbHlGb3JtYXQoInVuZGVybGluZSIpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgY2FzZSAiayI6CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLmNvbXBvbmVudC5hcHBseUZvcm1hdCgibGluayIpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBUYWIga2V5CiAgICovCiAgaGFuZGxlVGFiKGUxMSwgYmxvY2spIHsKICAgIGlmIChibG9jay50eXBlID09PSAiY29kZSIpIHsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmIChibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICB9CiAgfQogIC8qKgogICAqIEhhbmRsZXMgRW50ZXIga2V5CiAgICovCiAgYXN5bmMgaGFuZGxlRW50ZXIoZTExLCBibG9jaykgewogICAgY29uc3QgYmxvY2tPcHMgPSB0aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7CiAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgaWYgKG5vbkVkaXRhYmxlVHlwZXMuaW5jbHVkZXMoYmxvY2sudHlwZSkpIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgYXdhaXQgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoYmxvY2sudHlwZSA9PT0gImNvZGUiKSB7CiAgICAgIGlmIChlMTEuc2hpZnRLZXkpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBjb25zdCBuZXdCbG9jayA9IGJsb2NrT3BzLmNyZWF0ZUJsb2NrKCk7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghZTExLnNoaWZ0S2V5KSB7CiAgICAgIGlmIChibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUVudGVySW5MaXN0KGUxMSwgYmxvY2spOwogICAgICB9IGVsc2UgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmIChibG9ja0NvbXBvbmVudCAmJiBibG9ja0NvbXBvbmVudC5nZXRTcGxpdENvbnRlbnQpIHsKICAgICAgICAgIGNvbnN0IHNwbGl0Q29udGVudCA9IGJsb2NrQ29tcG9uZW50LmdldFNwbGl0Q29udGVudCgpOwogICAgICAgICAgaWYgKHNwbGl0Q29udGVudCkgewogICAgICAgICAgICBibG9ja0NvbXBvbmVudC5zZXRDb250ZW50KHNwbGl0Q29udGVudC5iZWZvcmUpOwogICAgICAgICAgICBibG9jay5jb250ZW50ID0gc3BsaXRDb250ZW50LmJlZm9yZTsKICAgICAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBibG9ja09wcy5jcmVhdGVCbG9jaygicGFyYWdyYXBoIiwgc3BsaXRDb250ZW50LmFmdGVyKTsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBibG9ja09wcy5jcmVhdGVCbG9jaygpOwogICAgICAgICAgICBhd2FpdCBibG9ja09wcy5pbnNlcnRCbG9ja0FmdGVyKGJsb2NrLCBuZXdCbG9jayk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgICAgIGF3YWl0IGJsb2NrT3BzLmluc2VydEJsb2NrQWZ0ZXIoYmxvY2ssIG5ld0Jsb2NrKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBFbnRlciBrZXkgaW4gbGlzdCBibG9ja3MKICAgKi8KICBhc3luYyBoYW5kbGVFbnRlckluTGlzdChlMTEsIGJsb2NrKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgY29uc3QgY3VycmVudExpID0gcmFuZ2UyLnN0YXJ0Q29udGFpbmVyLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoImxpIik7CiAgICAgIGlmIChjdXJyZW50TGkgJiYgY3VycmVudExpLnRleHRDb250ZW50ID09PSAiIikgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgICBhd2FpdCBibG9ja09wcy5pbnNlcnRCbG9ja0FmdGVyKGJsb2NrLCBuZXdCbG9jayk7CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBCYWNrc3BhY2Uga2V5CiAgICovCiAgYXN5bmMgaGFuZGxlQmFja3NwYWNlKGUxMSwgYmxvY2spIHsKICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAodGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICBjb25zdCBuZXdCbG9jayA9IGJsb2NrT3BzLmNyZWF0ZUJsb2NrKCJwYXJhZ3JhcGgiLCAiIik7CiAgICAgICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gW25ld0Jsb2NrXTsKICAgICAgICB0aGlzLmNvbXBvbmVudC5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCk7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhuZXdCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5jb21wb25lbnQuc2F2ZVRvSGlzdG9yeShmYWxzZSk7CiAgICAgIGNvbnN0IHByZXZCbG9jayA9IGJsb2NrT3BzLmdldFByZXZpb3VzQmxvY2soYmxvY2suaWQpOwogICAgICBjb25zdCBuZXh0QmxvY2sgPSBibG9ja09wcy5nZXROZXh0QmxvY2soYmxvY2suaWQpOwogICAgICBibG9ja09wcy5yZW1vdmVCbG9jayhibG9jay5pZCk7CiAgICAgIGlmIChwcmV2QmxvY2sgJiYgcHJldkJsb2NrLnR5cGUgIT09ICJkaXZpZGVyIiAmJiBwcmV2QmxvY2sudHlwZSAhPT0gImltYWdlIikgewogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2socHJldkJsb2NrLmlkLCAiZW5kIik7CiAgICAgIH0gZWxzZSBpZiAobmV4dEJsb2NrICYmIG5leHRCbG9jay50eXBlICE9PSAiZGl2aWRlciIgJiYgbmV4dEJsb2NrLnR5cGUgIT09ICJpbWFnZSIpIHsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgIH0gZWxzZSBpZiAocHJldkJsb2NrKSB7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQpOwogICAgICB9IGVsc2UgaWYgKG5leHRCbG9jaykgewogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV4dEJsb2NrLmlkKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLmNvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iXWApOwogICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgaWYgKCFibG9ja0NvbXBvbmVudCB8fCAhYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgdGFyZ2V0ID0gYmxvY2sudHlwZSA9PT0gImNvZGUiID8gYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKSA6IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICBpZiAoIXRhcmdldCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gYmxvY2tDb21wb25lbnQuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgY29uc3QgY3Vyc29yUG9zID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudCh0YXJnZXQsIC4uLnNoYWRvd1Jvb3RzKTsKICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50ID8gYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpIDogdGFyZ2V0LnRleHRDb250ZW50OwogICAgaWYgKGN1cnNvclBvcyA9PT0gMCkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgY29uc3QgcHJldkJsb2NrID0gYmxvY2tPcHMuZ2V0UHJldmlvdXNCbG9jayhibG9jay5pZCk7CiAgICAgIGlmIChwcmV2QmxvY2spIHsKICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzMiA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICBpZiAobm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMocHJldkJsb2NrLnR5cGUpKSB7CiAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgICAgIGlmIChwcmV2QmxvY2sudHlwZSA9PT0gImNvZGUiICYmIGJsb2NrLnR5cGUgIT09ICJjb2RlIikgewogICAgICAgICAgaWYgKGJsb2NrLmNvbnRlbnQgPT09ICIiKSB7CiAgICAgICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQsICJlbmQiKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGJsb2NrLnR5cGUgPT09ICJjb2RlIiAmJiBwcmV2QmxvY2sudHlwZSAhPT0gImNvZGUiKSB7CiAgICAgICAgICBjb25zdCBhY3R1YWxDb250ZW50MiA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQgPyBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCkgOiBibG9jay5jb250ZW50OwogICAgICAgICAgaWYgKGFjdHVhbENvbnRlbnQyID09PSAiIiB8fCBhY3R1YWxDb250ZW50Mi50cmltKCkgPT09ICIiKSB7CiAgICAgICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQsICJlbmQiKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgcHJldkJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3ByZXZCbG9jay5pZH0iXWApOwogICAgICAgIGNvbnN0IHByZXZCbG9ja0NvbXBvbmVudCA9IHByZXZCbG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGNvbnN0IHByZXZDb250ZW50ID0gcHJldkJsb2NrQ29tcG9uZW50Py5nZXRDb250ZW50KCkgfHwgcHJldkJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICAgICAgY29uc3QgY3VycmVudENvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCkgfHwgYmxvY2suY29udGVudCB8fCAiIjsKICAgICAgICBsZXQgbWVyZ2VkQ29udGVudCA9ICIiOwogICAgICAgIGlmIChwcmV2QmxvY2sudHlwZSA9PT0gImNvZGUiICYmIGJsb2NrLnR5cGUgPT09ICJjb2RlIikgewogICAgICAgICAgbWVyZ2VkQ29udGVudCA9IHByZXZDb250ZW50ICsgKHByZXZDb250ZW50ICYmIGN1cnJlbnRDb250ZW50ID8gIlxuIiA6ICIiKSArIGN1cnJlbnRDb250ZW50OwogICAgICAgIH0gZWxzZSBpZiAocHJldkJsb2NrLnR5cGUgPT09ICJsaXN0IiAmJiBibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgICAgIG1lcmdlZENvbnRlbnQgPSBwcmV2Q29udGVudCArIChwcmV2Q29udGVudCAmJiBjdXJyZW50Q29udGVudCA/ICJcbiIgOiAiIikgKyBjdXJyZW50Q29udGVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWVyZ2VkQ29udGVudCA9IHByZXZDb250ZW50ICsgKHByZXZDb250ZW50ICYmIGN1cnJlbnRDb250ZW50ID8gIiAiIDogIiIpICsgY3VycmVudENvbnRlbnQ7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG1lcmdlUG9pbnQgPSBwcmV2Q29udGVudC5sZW5ndGg7CiAgICAgICAgYmxvY2tPcHMudXBkYXRlQmxvY2tDb250ZW50KHByZXZCbG9jay5pZCwgbWVyZ2VkQ29udGVudCk7CiAgICAgICAgaWYgKHByZXZCbG9ja0NvbXBvbmVudCkgewogICAgICAgICAgcHJldkJsb2NrQ29tcG9uZW50LnNldENvbnRlbnQobWVyZ2VkQ29udGVudCk7CiAgICAgICAgfQogICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCwgbWVyZ2VQb2ludCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aCA+IDEpIHsKICAgICAgY29uc3QgY3VycmVudENvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50ID8gYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpIDogYmxvY2suY29udGVudDsKICAgICAgaWYgKGN1cnJlbnRDb250ZW50ID09PSAiIiB8fCBjdXJyZW50Q29udGVudC50cmltKCkgPT09ICIiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgY29uc3QgcHJldkJsb2NrID0gYmxvY2tPcHMuZ2V0UHJldmlvdXNCbG9jayhibG9jay5pZCk7CiAgICAgICAgaWYgKHByZXZCbG9jaykgewogICAgICAgICAgYmxvY2tPcHMucmVtb3ZlQmxvY2soYmxvY2suaWQpOwogICAgICAgICAgaWYgKHByZXZCbG9jay50eXBlICE9PSAiZGl2aWRlciIpIHsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQsICJlbmQiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBEZWxldGUga2V5CiAgICovCiAgYXN5bmMgaGFuZGxlRGVsZXRlKGUxMSwgYmxvY2spIHsKICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAodGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICBjb25zdCBuZXdCbG9jayA9IGJsb2NrT3BzLmNyZWF0ZUJsb2NrKCJwYXJhZ3JhcGgiLCAiIik7CiAgICAgICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gW25ld0Jsb2NrXTsKICAgICAgICB0aGlzLmNvbXBvbmVudC5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCk7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhuZXdCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5jb21wb25lbnQuc2F2ZVRvSGlzdG9yeShmYWxzZSk7CiAgICAgIGNvbnN0IHByZXZCbG9jayA9IGJsb2NrT3BzLmdldFByZXZpb3VzQmxvY2soYmxvY2suaWQpOwogICAgICBjb25zdCBuZXh0QmxvY2sgPSBibG9ja09wcy5nZXROZXh0QmxvY2soYmxvY2suaWQpOwogICAgICBibG9ja09wcy5yZW1vdmVCbG9jayhibG9jay5pZCk7CiAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICBpZiAobmV4dEJsb2NrICYmICFub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhuZXh0QmxvY2sudHlwZSkpIHsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgIH0gZWxzZSBpZiAocHJldkJsb2NrICYmICFub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhwcmV2QmxvY2sudHlwZSkpIHsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCwgImVuZCIpOwogICAgICB9IGVsc2UgaWYgKG5leHRCbG9jaykgewogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV4dEJsb2NrLmlkKTsKICAgICAgfSBlbHNlIGlmIChwcmV2QmxvY2spIHsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCk7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgYmxvY2tXcmFwcGVyID0gdGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgIGNvbnN0IGJsb2NrQ29tcG9uZW50ID0gYmxvY2tXcmFwcGVyPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgIGlmICghYmxvY2tDb21wb25lbnQgfHwgIWJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHRhcmdldCA9IGJsb2NrLnR5cGUgPT09ICJjb2RlIiA/IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIikgOiBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgaWYgKCF0YXJnZXQpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IGJsb2NrQ29tcG9uZW50LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgIGlmIChwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50Q29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgc2hhZG93Um9vdHMucHVzaChibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KTsKICAgIGNvbnN0IGN1cnNvclBvcyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0Q3Vyc29yUG9zaXRpb25JbkVsZW1lbnQodGFyZ2V0LCAuLi5zaGFkb3dSb290cyk7CiAgICBjb25zdCB0ZXh0TGVuZ3RoID0gdGFyZ2V0LnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgIGlmIChjdXJzb3JQb3MgPT09IHRleHRMZW5ndGgpIHsKICAgICAgY29uc3QgbmV4dEJsb2NrID0gYmxvY2tPcHMuZ2V0TmV4dEJsb2NrKGJsb2NrLmlkKTsKICAgICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlczIgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICAgIGlmIChuZXh0QmxvY2sgJiYgbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMobmV4dEJsb2NrLnR5cGUpKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhuZXh0QmxvY2suaWQpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogIH0KICAvKioKICAgKiBIYW5kbGVzIEFycm93VXAga2V5IC0gbmF2aWdhdGUgdG8gcHJldmlvdXMgYmxvY2sgaWYgYXQgYmVnaW5uaW5nIG9yIGZpcnN0IGxpbmUKICAgKi8KICBhc3luYyBoYW5kbGVBcnJvd1VwKGUxMSwgYmxvY2spIHsKICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICBpZiAobm9uRWRpdGFibGVUeXBlcy5pbmNsdWRlcyhibG9jay50eXBlKSkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgY29uc3QgYmxvY2tPcHMgPSB0aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7CiAgICAgIGNvbnN0IHByZXZCbG9jayA9IGJsb2NrT3BzLmdldFByZXZpb3VzQmxvY2soYmxvY2suaWQpOwogICAgICBpZiAocHJldkJsb2NrKSB7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQsIG5vbkVkaXRhYmxlVHlwZXMuaW5jbHVkZXMocHJldkJsb2NrLnR5cGUpID8gdm9pZCAwIDogImVuZCIpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IGJsb2NrV3JhcHBlcj8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICBpZiAoIWJsb2NrQ29tcG9uZW50IHx8ICFibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KQogICAgICByZXR1cm47CiAgICBjb25zdCB0YXJnZXQgPSBibG9jay50eXBlID09PSAiY29kZSIgPyBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpIDogYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgIGlmICghdGFyZ2V0KQogICAgICByZXR1cm47CiAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSBibG9ja0NvbXBvbmVudC5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudENvbXBvbmVudC5zaGFkb3dSb290KTsKICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbyB8fCAhc2VsZWN0aW9uSW5mby5jb2xsYXBzZWQpCiAgICAgIHJldHVybjsKICAgIGlmICh0aGlzLmlzT25GaXJzdExpbmUoc2VsZWN0aW9uSW5mbywgdGFyZ2V0LCAuLi5zaGFkb3dSb290cykpIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICBjb25zdCBwcmV2QmxvY2sgPSBibG9ja09wcy5nZXRQcmV2aW91c0Jsb2NrKGJsb2NrLmlkKTsKICAgICAgaWYgKHByZXZCbG9jaykgewogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2socHJldkJsb2NrLmlkLCBub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhwcmV2QmxvY2sudHlwZSkgPyB2b2lkIDAgOiAiZW5kIik7CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBBcnJvd0Rvd24ga2V5IC0gbmF2aWdhdGUgdG8gbmV4dCBibG9jayBpZiBhdCBlbmQgb3IgbGFzdCBsaW5lCiAgICovCiAgYXN5bmMgaGFuZGxlQXJyb3dEb3duKGUxMSwgYmxvY2spIHsKICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICBpZiAobm9uRWRpdGFibGVUeXBlcy5pbmNsdWRlcyhibG9jay50eXBlKSkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgY29uc3QgYmxvY2tPcHMgPSB0aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7CiAgICAgIGNvbnN0IG5leHRCbG9jayA9IGJsb2NrT3BzLmdldE5leHRCbG9jayhibG9jay5pZCk7CiAgICAgIGlmIChuZXh0QmxvY2spIHsKICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzMiA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCwgbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMobmV4dEJsb2NrLnR5cGUpID8gdm9pZCAwIDogInN0YXJ0Iik7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgYmxvY2tXcmFwcGVyID0gdGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgIGNvbnN0IGJsb2NrQ29tcG9uZW50ID0gYmxvY2tXcmFwcGVyPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgIGlmICghYmxvY2tDb21wb25lbnQgfHwgIWJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHRhcmdldCA9IGJsb2NrLnR5cGUgPT09ICJjb2RlIiA/IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIikgOiBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgaWYgKCF0YXJnZXQpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IGJsb2NrQ29tcG9uZW50LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgIGlmIChwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50Q29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgc2hhZG93Um9vdHMucHVzaChibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KTsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgaWYgKCFzZWxlY3Rpb25JbmZvIHx8ICFzZWxlY3Rpb25JbmZvLmNvbGxhcHNlZCkKICAgICAgcmV0dXJuOwogICAgaWYgKHRoaXMuaXNPbkxhc3RMaW5lKHNlbGVjdGlvbkluZm8sIHRhcmdldCwgLi4uc2hhZG93Um9vdHMpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgICAgY29uc3QgbmV4dEJsb2NrID0gYmxvY2tPcHMuZ2V0TmV4dEJsb2NrKGJsb2NrLmlkKTsKICAgICAgaWYgKG5leHRCbG9jaykgewogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV4dEJsb2NrLmlkLCBub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhuZXh0QmxvY2sudHlwZSkgPyB2b2lkIDAgOiAic3RhcnQiKTsKICAgICAgfQogICAgfQogIH0KICAvKioKICAgKiBIZWxwZXIgdG8gZ2V0IHRoZSBsYXN0IHRleHQgbm9kZSBpbiBhbiBlbGVtZW50CiAgICovCiAgZ2V0TGFzdFRleHROb2RlKGVsZW1lbnQ0KSB7CiAgICBpZiAoZWxlbWVudDQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH0KICAgIGZvciAobGV0IGkxMSA9IGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgIGNvbnN0IGxhc3RUZXh0ID0gdGhpcy5nZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQuY2hpbGROb2Rlc1tpMTFdKTsKICAgICAgaWYgKGxhc3RUZXh0KQogICAgICAgIHJldHVybiBsYXN0VGV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICAvKioKICAgKiBIYW5kbGVzIEFycm93TGVmdCBrZXkgLSBuYXZpZ2F0ZSB0byBwcmV2aW91cyBibG9jayBpZiBhdCBiZWdpbm5pbmcKICAgKi8KICBhc3luYyBoYW5kbGVBcnJvd0xlZnQoZTExLCBibG9jaykgewogICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgICAgY29uc3QgcHJldkJsb2NrID0gYmxvY2tPcHMuZ2V0UHJldmlvdXNCbG9jayhibG9jay5pZCk7CiAgICAgIGlmIChwcmV2QmxvY2spIHsKICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzMiA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCwgbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMocHJldkJsb2NrLnR5cGUpID8gdm9pZCAwIDogImVuZCIpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IGJsb2NrV3JhcHBlcj8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICBpZiAoIWJsb2NrQ29tcG9uZW50IHx8ICFibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KQogICAgICByZXR1cm47CiAgICBjb25zdCB0YXJnZXQgPSBibG9jay50eXBlID09PSAiY29kZSIgPyBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpIDogYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgIGlmICghdGFyZ2V0KQogICAgICByZXR1cm47CiAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSBibG9ja0NvbXBvbmVudC5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudENvbXBvbmVudC5zaGFkb3dSb290KTsKICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbyB8fCAhc2VsZWN0aW9uSW5mby5jb2xsYXBzZWQpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IGN1cnNvclBvcyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0Q3Vyc29yUG9zaXRpb25JbkVsZW1lbnQodGFyZ2V0LCAuLi5zaGFkb3dSb290cyk7CiAgICBpZiAoY3Vyc29yUG9zID09PSAwKSB7CiAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICBjb25zdCBwcmV2QmxvY2sgPSBibG9ja09wcy5nZXRQcmV2aW91c0Jsb2NrKGJsb2NrLmlkKTsKICAgICAgaWYgKHByZXZCbG9jaykgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGNvbnN0IHBvc2l0aW9uMyA9IG5vbkVkaXRhYmxlVHlwZXMyLmluY2x1ZGVzKHByZXZCbG9jay50eXBlKSA/IHZvaWQgMCA6ICJlbmQiOwogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2socHJldkJsb2NrLmlkLCBwb3NpdGlvbjMpOwogICAgICB9CiAgICB9CiAgfQogIC8qKgogICAqIEhhbmRsZXMgQXJyb3dSaWdodCBrZXkgLSBuYXZpZ2F0ZSB0byBuZXh0IGJsb2NrIGlmIGF0IGVuZAogICAqLwogIGFzeW5jIGhhbmRsZUFycm93UmlnaHQoZTExLCBibG9jaykgewogICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgICAgY29uc3QgbmV4dEJsb2NrID0gYmxvY2tPcHMuZ2V0TmV4dEJsb2NrKGJsb2NrLmlkKTsKICAgICAgaWYgKG5leHRCbG9jaykgewogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV4dEJsb2NrLmlkLCBub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhuZXh0QmxvY2sudHlwZSkgPyB2b2lkIDAgOiAic3RhcnQiKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLmNvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iXWApOwogICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgaWYgKCFibG9ja0NvbXBvbmVudCB8fCAhYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgdGFyZ2V0ID0gYmxvY2sudHlwZSA9PT0gImNvZGUiID8gYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKSA6IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICBpZiAoIXRhcmdldCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gYmxvY2tDb21wb25lbnQuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICBpZiAoIXNlbGVjdGlvbkluZm8gfHwgIXNlbGVjdGlvbkluZm8uY29sbGFwc2VkKQogICAgICByZXR1cm47CiAgICBjb25zdCBjdXJzb3JQb3MgPSBXeXNpd3lnU2VsZWN0aW9uLmdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KHRhcmdldCwgLi4uc2hhZG93Um9vdHMpOwogICAgY29uc3QgdGV4dExlbmd0aCA9IHRhcmdldC50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDA7CiAgICBpZiAoY3Vyc29yUG9zID09PSB0ZXh0TGVuZ3RoKSB7CiAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICBjb25zdCBuZXh0QmxvY2sgPSBibG9ja09wcy5nZXROZXh0QmxvY2soYmxvY2suaWQpOwogICAgICBpZiAobmV4dEJsb2NrKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlczIgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhuZXh0QmxvY2suaWQsIG5vbkVkaXRhYmxlVHlwZXMyLmluY2x1ZGVzKG5leHRCbG9jay50eXBlKSA/IHZvaWQgMCA6ICJzdGFydCIpOwogICAgICB9CiAgICB9CiAgfQogIC8qKgogICAqIEhhbmRsZXMgc2xhc2ggbWVudSBrZXlib2FyZCBuYXZpZ2F0aW9uCiAgICogTm90ZTogVGhpcyBpcyBub3cgaGFuZGxlZCBieSB0aGUgY29tcG9uZW50IGRpcmVjdGx5CiAgICovCiAgLyoqCiAgICogQ2hlY2sgaWYgY3Vyc29yIGlzIG9uIHRoZSBmaXJzdCBsaW5lIG9mIGEgYmxvY2sKICAgKi8KICBpc09uRmlyc3RMaW5lKHNlbGVjdGlvbkluZm8sIHRhcmdldCwgLi4uc2hhZG93Um9vdHMpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgbGV0IGNvbnRhaW5lciA9IHJhbmdlMi5jb21tb25BbmNlc3RvckNvbnRhaW5lcjsKICAgICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50RWxlbWVudDsKICAgICAgfQogICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCBpc05lYXJUb3AgPSByZWN0LnRvcCAtIGNvbnRhaW5lclJlY3QudG9wIDwgNTsKICAgICAgaWYgKGNvbnRhaW5lci50ZXh0Q29udGVudCAmJiAhY29udGFpbmVyLnRleHRDb250ZW50LmluY2x1ZGVzKCJcbiIpKSB7CiAgICAgICAgY29uc3QgY3Vyc29yUG9zID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudChjb250YWluZXIsIC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgICByZXR1cm4gY3Vyc29yUG9zID09PSAwOwogICAgICB9CiAgICAgIHJldHVybiBpc05lYXJUb3A7CiAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgY29uc29sZS53YXJuKCJFcnJvciBjaGVja2luZyBmaXJzdCBsaW5lOiIsIGUxMSk7CiAgICAgIGNvbnN0IGN1cnNvclBvcyA9IHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQ7CiAgICAgIHJldHVybiBjdXJzb3JQb3MgPT09IDA7CiAgICB9CiAgfQogIC8qKgogICAqIENoZWNrIGlmIGN1cnNvciBpcyBvbiB0aGUgbGFzdCBsaW5lIG9mIGEgYmxvY2sKICAgKi8KICBpc09uTGFzdExpbmUoc2VsZWN0aW9uSW5mbywgdGFyZ2V0LCAuLi5zaGFkb3dSb290cykgewogICAgdHJ5IHsKICAgICAgY29uc3QgcmFuZ2UyID0gV3lzaXd5Z1NlbGVjdGlvbi5jcmVhdGVSYW5nZUZyb21JbmZvKHNlbGVjdGlvbkluZm8pOwogICAgICBjb25zdCByZWN0ID0gcmFuZ2UyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBsZXQgY29udGFpbmVyID0gcmFuZ2UyLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyOwogICAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnRFbGVtZW50OwogICAgICB9CiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGlzTmVhckJvdHRvbSA9IGNvbnRhaW5lclJlY3QuYm90dG9tIC0gcmVjdC5ib3R0b20gPCA1OwogICAgICBpZiAoY29udGFpbmVyLnRleHRDb250ZW50ICYmICFjb250YWluZXIudGV4dENvbnRlbnQuaW5jbHVkZXMoIlxuIikpIHsKICAgICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gdGFyZ2V0LnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgICBjb25zdCBjdXJzb3JQb3MgPSBXeXNpd3lnU2VsZWN0aW9uLmdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KHRhcmdldCwgLi4uc2hhZG93Um9vdHMpOwogICAgICAgIHJldHVybiBjdXJzb3JQb3MgPT09IHRleHRMZW5ndGg7CiAgICAgIH0KICAgICAgcmV0dXJuIGlzTmVhckJvdHRvbTsKICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICBjb25zb2xlLndhcm4oIkVycm9yIGNoZWNraW5nIGxhc3QgbGluZToiLCBlMTEpOwogICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gdGFyZ2V0LnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgY29uc3QgY3Vyc29yUG9zID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudCh0YXJnZXQsIC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgcmV0dXJuIGN1cnNvclBvcyA9PT0gdGV4dExlbmd0aDsKICAgIH0KICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuZHJhZ2Ryb3BoYW5kbGVyLmpzCnZhciBXeXNpd3lnRHJhZ0Ryb3BIYW5kbGVyID0gY2xhc3MgewogIGNvbXBvbmVudDsKICBkcmFnZ2VkQmxvY2tJZCA9IG51bGw7CiAgZHJhZ092ZXJCbG9ja0lkID0gbnVsbDsKICBkcmFnT3ZlclBvc2l0aW9uID0gbnVsbDsKICBkcm9wSW5kaWNhdG9yID0gbnVsbDsKICBpbml0aWFsTW91c2VZID0gMDsKICBpbml0aWFsQmxvY2tZID0gMDsKICBkcmFnZ2VkQmxvY2tFbGVtZW50ID0gbnVsbDsKICBkcmFnZ2VkQmxvY2tIZWlnaHQgPSAwOwogIGRyYWdnZWRCbG9ja0NvbnRlbnRIZWlnaHQgPSAwOwogIGRyYWdnZWRCbG9ja01hcmdpblRvcCA9IDA7CiAgbGFzdFVwZGF0ZVRpbWUgPSAwOwogIHVwZGF0ZVRocm90dGxlID0gODA7CiAgLy8gbWlsbGlzZWNvbmRzCiAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7CiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICB9CiAgLyoqCiAgICogR2V0cyB0aGUgY3VycmVudCBkcmFnIHN0YXRlCiAgICovCiAgZ2V0IGRyYWdTdGF0ZSgpIHsKICAgIHJldHVybiB7CiAgICAgIGRyYWdnZWRCbG9ja0lkOiB0aGlzLmRyYWdnZWRCbG9ja0lkLAogICAgICBkcmFnT3ZlckJsb2NrSWQ6IHRoaXMuZHJhZ092ZXJCbG9ja0lkLAogICAgICBkcmFnT3ZlclBvc2l0aW9uOiB0aGlzLmRyYWdPdmVyUG9zaXRpb24KICAgIH07CiAgfQogIC8qKgogICAqIEhhbmRsZXMgZHJhZyBzdGFydAogICAqLwogIGhhbmRsZURyYWdTdGFydChlMTEsIGJsb2NrKSB7CiAgICBpZiAoIWUxMS5kYXRhVHJhbnNmZXIpCiAgICAgIHJldHVybjsKICAgIHRoaXMuZHJhZ2dlZEJsb2NrSWQgPSBibG9jay5pZDsKICAgIGUxMS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9ICJtb3ZlIjsKICAgIGUxMS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgidGV4dC9wbGFpbiIsIGJsb2NrLmlkKTsKICAgIGNvbnN0IGVtcHR5SW1nID0gbmV3IEltYWdlKCk7CiAgICBlbXB0eUltZy5zcmMgPSAiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQVVFQkFBQUFDd0FBQUFBQVFBQkFBQUNBa1FCQURzPSI7CiAgICBlMTEuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShlbXB0eUltZywgMCwgMCk7CiAgICB0aGlzLmluaXRpYWxNb3VzZVkgPSBlMTEuY2xpZW50WTsKICAgIHRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudCA9IHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgIGlmICh0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQpIHsKICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgdGhpcy5pbml0aWFsQmxvY2tZID0gcmVjdC50b3A7CiAgICAgIGNvbnN0IGlubmVyQmxvY2sgPSB0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmIChpbm5lckJsb2NrKSB7CiAgICAgICAgY29uc3QgaW5uZXJSZWN0ID0gaW5uZXJCbG9jay5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaW5uZXJCbG9jayk7CiAgICAgICAgdGhpcy5kcmFnZ2VkQmxvY2tNYXJnaW5Ub3AgPSBwYXJzZUludChjb21wdXRlZFN0eWxlLm1hcmdpblRvcCkgfHwgMDsKICAgICAgICB0aGlzLmRyYWdnZWRCbG9ja0NvbnRlbnRIZWlnaHQgPSBpbm5lclJlY3QuaGVpZ2h0OwogICAgICB9CiAgICAgIHRoaXMuZHJhZ2dlZEJsb2NrSGVpZ2h0ID0gcmVjdC5oZWlnaHQ7CiAgICAgIGNvbnNvbGUubG9nKCJEcmFnIG1lYXN1cmVtZW50czoiLCB7CiAgICAgICAgd3JhcHBlckhlaWdodDogcmVjdC5oZWlnaHQsCiAgICAgICAgbWFyZ2luVG9wOiB0aGlzLmRyYWdnZWRCbG9ja01hcmdpblRvcCwKICAgICAgICBkcm9wSW5kaWNhdG9ySGVpZ2h0OiB0aGlzLmRyYWdnZWRCbG9ja0hlaWdodCwKICAgICAgICBjb250ZW50SGVpZ2h0OiB0aGlzLmRyYWdnZWRCbG9ja0NvbnRlbnRIZWlnaHQsCiAgICAgICAgYmxvY2tJZDogYmxvY2suaWQKICAgICAgfSk7CiAgICAgIHRoaXMuY3JlYXRlRHJvcEluZGljYXRvcigpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIHRoaXMuaGFuZGxlR2xvYmFsRHJhZ092ZXIpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW5kIiwgdGhpcy5oYW5kbGVHbG9iYWxEcmFnRW5kKTsKICAgIH0KICAgIHRoaXMuY29tcG9uZW50LmRyYWdnZWRCbG9ja0lkID0gdGhpcy5kcmFnZ2VkQmxvY2tJZDsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBpZiAodGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50KSB7CiAgICAgICAgdGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50LmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIik7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYpIHsKICAgICAgICB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIik7CiAgICAgIH0KICAgIH0sIDEwKTsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBkcmFnIGVuZAogICAqLwogIGhhbmRsZURyYWdFbmQoKSB7CiAgICBjb25zdCBhbGxCbG9ja3MgPSB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3JBbGwoIi5ibG9jay13cmFwcGVyIik7CiAgICBhbGxCbG9ja3MuZm9yRWFjaCgoYmxvY2spID0+IHsKICAgICAgYmxvY2suY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciLCAibW92ZS11cCIsICJtb3ZlLWRvd24iKTsKICAgICAgYmxvY2suc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tZHJhZy1vZmZzZXQiKTsKICAgICAgYmxvY2suc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zZm9ybSIpOwogICAgfSk7CiAgICBpZiAodGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZikgewogICAgICB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIik7CiAgICB9CiAgICB0aGlzLmRyYWdnZWRCbG9ja0lkID0gbnVsbDsKICAgIHRoaXMuZHJhZ092ZXJCbG9ja0lkID0gbnVsbDsKICAgIHRoaXMuZHJhZ092ZXJQb3NpdGlvbiA9IG51bGw7CiAgICB0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQgPSBudWxsOwogICAgdGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHQgPSAwOwogICAgdGhpcy5kcmFnZ2VkQmxvY2tDb250ZW50SGVpZ2h0ID0gMDsKICAgIHRoaXMuZHJhZ2dlZEJsb2NrTWFyZ2luVG9wID0gMDsKICAgIHRoaXMuaW5pdGlhbEJsb2NrWSA9IDA7CiAgICB0aGlzLmNvbXBvbmVudC5kcmFnZ2VkQmxvY2tJZCA9IG51bGw7CiAgICB0aGlzLmNvbXBvbmVudC5kcmFnT3ZlckJsb2NrSWQgPSBudWxsOwogICAgdGhpcy5jb21wb25lbnQuZHJhZ092ZXJQb3NpdGlvbiA9IG51bGw7CiAgfQogIC8qKgogICAqIEhhbmRsZXMgZHJhZyBvdmVyCiAgICovCiAgaGFuZGxlRHJhZ092ZXIoZTExLCBibG9jaykgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICBpZiAoIWUxMS5kYXRhVHJhbnNmZXIgfHwgIXRoaXMuZHJhZ2dlZEJsb2NrSWQgfHwgdGhpcy5kcmFnZ2VkQmxvY2tJZCA9PT0gYmxvY2suaWQpCiAgICAgIHJldHVybjsKICAgIGUxMS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICJtb3ZlIjsKICAgIGNvbnN0IHJlY3QgPSBlMTEuY3VycmVudFRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIGNvbnN0IG1pZHBvaW50ID0gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDI7CiAgICB0aGlzLmRyYWdPdmVyQmxvY2tJZCA9IGJsb2NrLmlkOwogICAgdGhpcy5kcmFnT3ZlclBvc2l0aW9uID0gZTExLmNsaWVudFkgPCBtaWRwb2ludCA/ICJiZWZvcmUiIDogImFmdGVyIjsKICAgIHRoaXMuY29tcG9uZW50LmRyYWdPdmVyQmxvY2tJZCA9IHRoaXMuZHJhZ092ZXJCbG9ja0lkOwogICAgdGhpcy5jb21wb25lbnQuZHJhZ092ZXJQb3NpdGlvbiA9IHRoaXMuZHJhZ092ZXJQb3NpdGlvbjsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBkcmFnIGxlYXZlCiAgICovCiAgaGFuZGxlRHJhZ0xlYXZlKGJsb2NrKSB7CiAgICBpZiAodGhpcy5kcmFnT3ZlckJsb2NrSWQgPT09IGJsb2NrLmlkKSB7CiAgICAgIHRoaXMuZHJhZ092ZXJCbG9ja0lkID0gbnVsbDsKICAgICAgdGhpcy5kcmFnT3ZlclBvc2l0aW9uID0gbnVsbDsKICAgICAgdGhpcy5jb21wb25lbnQuZHJhZ092ZXJCbG9ja0lkID0gbnVsbDsKICAgICAgdGhpcy5jb21wb25lbnQuZHJhZ092ZXJQb3NpdGlvbiA9IG51bGw7CiAgICB9CiAgfQogIC8qKgogICAqIEhhbmRsZXMgZHJvcAogICAqLwogIGhhbmRsZURyb3AoZTExLCB0YXJnZXRCbG9jaykgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICBpZiAoIXRoaXMuZHJhZ2dlZEJsb2NrSWQgfHwgdGhpcy5kcmFnZ2VkQmxvY2tJZCA9PT0gdGFyZ2V0QmxvY2suaWQpCiAgICAgIHJldHVybjsKICAgIHRoaXMuY29tcG9uZW50LmhhbmRsZURyb3AoZTExLCB0YXJnZXRCbG9jayk7CiAgfQogIC8qKgogICAqIENoZWNrcyBpZiBhIGJsb2NrIGlzIGJlaW5nIGRyYWdnZWQKICAgKi8KICBpc0RyYWdnaW5nKGJsb2NrSWQpIHsKICAgIHJldHVybiB0aGlzLmRyYWdnZWRCbG9ja0lkID09PSBibG9ja0lkOwogIH0KICAvKioKICAgKiBDaGVja3MgaWYgYSBibG9jayBoYXMgZHJhZyBvdmVyIHN0YXRlCiAgICovCiAgaXNEcmFnT3ZlcihibG9ja0lkKSB7CiAgICByZXR1cm4gdGhpcy5kcmFnT3ZlckJsb2NrSWQgPT09IGJsb2NrSWQ7CiAgfQogIC8qKgogICAqIEdldHMgZHJhZyBvdmVyIENTUyBjbGFzc2VzIGZvciBhIGJsb2NrCiAgICovCiAgZ2V0RHJhZ092ZXJDbGFzc2VzKGJsb2NrSWQpIHsKICAgIGlmICghdGhpcy5pc0RyYWdPdmVyKGJsb2NrSWQpKQogICAgICByZXR1cm4gIiI7CiAgICByZXR1cm4gdGhpcy5kcmFnT3ZlclBvc2l0aW9uID09PSAiYmVmb3JlIiA/ICJkcmFnLW92ZXItYmVmb3JlIiA6ICJkcmFnLW92ZXItYWZ0ZXIiOwogIH0KICAvKioKICAgKiBDcmVhdGVzIHRoZSBkcm9wIGluZGljYXRvciBlbGVtZW50CiAgICovCiAgY3JlYXRlRHJvcEluZGljYXRvcigpIHsKICAgIHRoaXMuZHJvcEluZGljYXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy5kcm9wSW5kaWNhdG9yLmNsYXNzTmFtZSA9ICJkcm9wLWluZGljYXRvciI7CiAgICB0aGlzLmRyb3BJbmRpY2F0b3Iuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYuYXBwZW5kQ2hpbGQodGhpcy5kcm9wSW5kaWNhdG9yKTsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBnbG9iYWwgZHJhZ292ZXIgdG8gdXBkYXRlIGRyYWdnZWQgYmxvY2sgcG9zaXRpb24gYW5kIG1vdmUgb3RoZXIgYmxvY2tzCiAgICovCiAgaGFuZGxlR2xvYmFsRHJhZ092ZXIgPSAoZTExKSA9PiB7CiAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgIGlmICghdGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50KQogICAgICByZXR1cm47CiAgICBjb25zdCBkZWx0YVkgPSBlMTEuY2xpZW50WSAtIHRoaXMuaW5pdGlhbE1vdXNlWTsKICAgIHRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgke2RlbHRhWX1weClgOwogICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICBpZiAobm93MiAtIHRoaXMubGFzdFVwZGF0ZVRpbWUgPCB0aGlzLnVwZGF0ZVRocm90dGxlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMubGFzdFVwZGF0ZVRpbWUgPSBub3cyOwogICAgdGhpcy51cGRhdGVCbG9ja1Bvc2l0aW9ucyhlMTEuY2xpZW50WSk7CiAgfTsKICAvKioKICAgKiBVcGRhdGVzIGJsb2NrIHBvc2l0aW9ucyBiYXNlZCBvbiBjdXJzb3IgcG9zaXRpb24KICAgKi8KICB1cGRhdGVCbG9ja1Bvc2l0aW9ucyhtb3VzZVkpIHsKICAgIGNvbnN0IGJsb2NrcyA9IEFycmF5LmZyb20odGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpKTsKICAgIGNvbnN0IGRyYWdnZWRJbmRleCA9IGJsb2Nrcy5maW5kSW5kZXgoKGI1KSA9PiBiNS5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKSA9PT0gdGhpcy5kcmFnZ2VkQmxvY2tJZCk7CiAgICBpZiAoZHJhZ2dlZEluZGV4ID09PSAtMSkKICAgICAgcmV0dXJuOwogICAgYmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7CiAgICAgIGlmIChibG9jay5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKSAhPT0gdGhpcy5kcmFnZ2VkQmxvY2tJZCkgewogICAgICAgIGJsb2NrLmNsYXNzTGlzdC5yZW1vdmUoIm1vdmUtdXAiLCAibW92ZS1kb3duIik7CiAgICAgICAgYmxvY2suc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tZHJhZy1vZmZzZXQiKTsKICAgICAgfQogICAgfSk7CiAgICBsZXQgbmV3SW5kZXggPSBibG9ja3MubGVuZ3RoOwogICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgYmxvY2tzLmxlbmd0aDsgaTExKyspIHsKICAgICAgaWYgKGkxMSA9PT0gZHJhZ2dlZEluZGV4KQogICAgICAgIGNvbnRpbnVlOwogICAgICBjb25zdCBibG9jayA9IGJsb2Nrc1tpMTFdOwogICAgICBjb25zdCByZWN0ID0gYmxvY2suZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGJsb2NrVG9wID0gcmVjdC50b3A7CiAgICAgIGlmIChtb3VzZVkgPCBibG9ja1RvcCArIHJlY3QuaGVpZ2h0ICogMC41KSB7CiAgICAgICAgbmV3SW5kZXggPSBpMTE7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGJsb2Nrcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGlmIChpMTEgPT09IGRyYWdnZWRJbmRleCkKICAgICAgICBjb250aW51ZTsKICAgICAgY29uc3QgYmxvY2sgPSBibG9ja3NbaTExXTsKICAgICAgaWYgKGRyYWdnZWRJbmRleCA8IG5ld0luZGV4KSB7CiAgICAgICAgaWYgKGkxMSA+IGRyYWdnZWRJbmRleCAmJiBpMTEgPCBuZXdJbmRleCkgewogICAgICAgICAgYmxvY2suY2xhc3NMaXN0LmFkZCgibW92ZS11cCIpOwogICAgICAgICAgYmxvY2suc3R5bGUuc2V0UHJvcGVydHkoIi0tZHJhZy1vZmZzZXQiLCBgJHt0aGlzLmRyYWdnZWRCbG9ja0hlaWdodH1weGApOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChkcmFnZ2VkSW5kZXggPiBuZXdJbmRleCkgewogICAgICAgIGlmIChpMTEgPj0gbmV3SW5kZXggJiYgaTExIDwgZHJhZ2dlZEluZGV4KSB7CiAgICAgICAgICBibG9jay5jbGFzc0xpc3QuYWRkKCJtb3ZlLWRvd24iKTsKICAgICAgICAgIGJsb2NrLnN0eWxlLnNldFByb3BlcnR5KCItLWRyYWctb2Zmc2V0IiwgYCR7dGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHR9cHhgKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHRoaXMudXBkYXRlRHJvcEluZGljYXRvcihibG9ja3MsIG5ld0luZGV4LCBkcmFnZ2VkSW5kZXgpOwogIH0KICAvKioKICAgKiBVcGRhdGVzIHRoZSBkcm9wIGluZGljYXRvciBwb3NpdGlvbgogICAqLwogIHVwZGF0ZURyb3BJbmRpY2F0b3IoYmxvY2tzLCB0YXJnZXRJbmRleCwgZHJhZ2dlZEluZGV4KSB7CiAgICBpZiAoIXRoaXMuZHJvcEluZGljYXRvciB8fCAhdGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50KQogICAgICByZXR1cm47CiAgICB0aGlzLmRyb3BJbmRpY2F0b3Iuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIGxldCB0b3BQb3NpdGlvbiA9IDA7CiAgICBjb25zdCB2aXN1YWxCbG9ja3MgPSBbXTsKICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGJsb2Nrcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGlmIChpMTEgPT09IGRyYWdnZWRJbmRleCkKICAgICAgICBjb250aW51ZTsKICAgICAgY29uc3QgYmxvY2sgPSBibG9ja3NbaTExXTsKICAgICAgY29uc3QgcmVjdCA9IGJsb2NrLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBsZXQgdG9wID0gcmVjdC50b3AgLSBjb250YWluZXJSZWN0LnRvcDsKICAgICAgbGV0IGJvdHRvbSA9IHJlY3QuYm90dG9tIC0gY29udGFpbmVyUmVjdC50b3A7CiAgICAgIGNvbnN0IHRyYW5zZm9ybTIgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShibG9jaykudHJhbnNmb3JtOwogICAgICBpZiAodHJhbnNmb3JtMiAmJiB0cmFuc2Zvcm0yICE9PSAibm9uZSIpIHsKICAgICAgICBjb25zdCBtYXRyaXggPSBuZXcgRE9NTWF0cml4KHRyYW5zZm9ybTIpOwogICAgICAgIGNvbnN0IHlPZmZzZXQgPSBtYXRyaXgubTQyOwogICAgICAgIHRvcCArPSB5T2Zmc2V0OwogICAgICAgIGJvdHRvbSArPSB5T2Zmc2V0OwogICAgICB9CiAgICAgIHZpc3VhbEJsb2Nrcy5wdXNoKHsgaW5kZXg6IGkxMSwgdG9wLCBib3R0b20gfSk7CiAgICB9CiAgICB2aXN1YWxCbG9ja3Muc29ydCgoYTUsIGI1KSA9PiBhNS50b3AgLSBiNS50b3ApOwogICAgbGV0IGFkanVzdGVkVGFyZ2V0SW5kZXggPSB0YXJnZXRJbmRleDsKICAgIGlmICh0YXJnZXRJbmRleCA+IGRyYWdnZWRJbmRleCkgewogICAgICBhZGp1c3RlZFRhcmdldEluZGV4LS07CiAgICB9CiAgICBsZXQgYmxvY2tNYXJnaW4gPSAxNjsKICAgIGlmICh0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQpIHsKICAgICAgY29uc3QgZHJhZ2dlZEJsb2NrID0gdGhpcy5jb21wb25lbnQuYmxvY2tzLmZpbmQoKGI1KSA9PiBiNS5pZCA9PT0gdGhpcy5kcmFnZ2VkQmxvY2tJZCk7CiAgICAgIGlmIChkcmFnZ2VkQmxvY2spIHsKICAgICAgICBjb25zdCBibG9ja1R5cGUgPSBkcmFnZ2VkQmxvY2sudHlwZTsKICAgICAgICBpZiAoYmxvY2tUeXBlID09PSAiaGVhZGluZy0xIiB8fCBibG9ja1R5cGUgPT09ICJoZWFkaW5nLTIiIHx8IGJsb2NrVHlwZSA9PT0gImhlYWRpbmctMyIpIHsKICAgICAgICAgIGJsb2NrTWFyZ2luID0gMjQ7CiAgICAgICAgfSBlbHNlIGlmIChibG9ja1R5cGUgPT09ICJjb2RlIiB8fCBibG9ja1R5cGUgPT09ICJxdW90ZSIpIHsKICAgICAgICAgIGJsb2NrTWFyZ2luID0gMjA7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoYWRqdXN0ZWRUYXJnZXRJbmRleCA9PT0gMCkgewogICAgICB0b3BQb3NpdGlvbiA9IDA7CiAgICB9IGVsc2UgaWYgKGFkanVzdGVkVGFyZ2V0SW5kZXggPj0gdmlzdWFsQmxvY2tzLmxlbmd0aCkgewogICAgICBjb25zdCBsYXN0QmxvY2sgPSB2aXN1YWxCbG9ja3NbdmlzdWFsQmxvY2tzLmxlbmd0aCAtIDFdOwogICAgICBpZiAobGFzdEJsb2NrKSB7CiAgICAgICAgdG9wUG9zaXRpb24gPSBsYXN0QmxvY2suYm90dG9tOwogICAgICAgIHRvcFBvc2l0aW9uICs9IGJsb2NrTWFyZ2luOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb25zdCBibG9ja0JlZm9yZSA9IHZpc3VhbEJsb2Nrc1thZGp1c3RlZFRhcmdldEluZGV4IC0gMV07CiAgICAgIGlmIChibG9ja0JlZm9yZSkgewogICAgICAgIHRvcFBvc2l0aW9uID0gYmxvY2tCZWZvcmUuYm90dG9tOwogICAgICAgIHRvcFBvc2l0aW9uICs9IGJsb2NrTWFyZ2luOwogICAgICB9CiAgICB9CiAgICB0aGlzLmRyb3BJbmRpY2F0b3Iuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHR9cHhgOwogICAgdGhpcy5kcm9wSW5kaWNhdG9yLnN0eWxlLnRvcCA9IGAke01hdGgubWF4KDAsIHRvcFBvc2l0aW9uKX1weGA7CiAgICBjb25zb2xlLmxvZygiRHJvcCBpbmRpY2F0b3IgdXBkYXRlOiIsIHsKICAgICAgdGFyZ2V0SW5kZXgsCiAgICAgIGFkanVzdGVkVGFyZ2V0SW5kZXgsCiAgICAgIGRyYWdnZWRJbmRleCwKICAgICAgdG9wUG9zaXRpb24sCiAgICAgIGhlaWdodDogdGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHQsCiAgICAgIGJsb2NrTWFyZ2luLAogICAgICB2aXN1YWxCbG9ja3M6IHZpc3VhbEJsb2Nrcy5tYXAoKGI1KSA9PiAoeyBpbmRleDogYjUuaW5kZXgsIHRvcDogYjUudG9wLCBib3R0b206IGI1LmJvdHRvbSB9KSkKICAgIH0pOwogIH0KICAvKioKICAgKiBIYW5kbGVzIGdsb2JhbCBkcmFnIGVuZAogICAqLwogIGhhbmRsZUdsb2JhbERyYWdFbmQgPSAoKSA9PiB7CiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIHRoaXMuaGFuZGxlR2xvYmFsRHJhZ092ZXIpOwogICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsIHRoaXMuaGFuZGxlR2xvYmFsRHJhZ0VuZCk7CiAgICBpZiAodGhpcy5kcm9wSW5kaWNhdG9yKSB7CiAgICAgIHRoaXMuZHJvcEluZGljYXRvci5yZW1vdmUoKTsKICAgICAgdGhpcy5kcm9wSW5kaWNhdG9yID0gbnVsbDsKICAgIH0KICAgIGlmICh0aGlzLmRyYWdnZWRCbG9ja0lkKSB7CiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgdGhpcy5wZXJmb3JtRHJvcCgpOwogICAgICAgIHRoaXMuaGFuZGxlRHJhZ0VuZCgpOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuaGFuZGxlRHJhZ0VuZCgpOwogICAgfQogIH07CiAgLyoqCiAgICogUGVyZm9ybXMgdGhlIGFjdHVhbCBkcm9wIG9wZXJhdGlvbgogICAqLwogIHBlcmZvcm1Ecm9wKCkgewogICAgaWYgKCF0aGlzLmRyYWdnZWRCbG9ja0lkKQogICAgICByZXR1cm47CiAgICBjb25zdCBibG9ja0VsZW1lbnRzMiA9IEFycmF5LmZyb20odGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpKTsKICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50ID0gYmxvY2tFbGVtZW50czIuZmluZCgoZWwpID0+IGVsLmdldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIpID09PSB0aGlzLmRyYWdnZWRCbG9ja0lkKTsKICAgIGlmICghZHJhZ2dlZEVsZW1lbnQpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHZpc3VhbE9yZGVyID0gYmxvY2tFbGVtZW50czIubWFwKChlbCkgPT4gewogICAgICBjb25zdCBpZCA9IGVsLmdldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIpOwogICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGNlbnRlclkgPSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMjsKICAgICAgcmV0dXJuIHsgaWQsIGNlbnRlclksIGVsZW1lbnQ6IGVsIH07CiAgICB9KTsKICAgIHZpc3VhbE9yZGVyLnNvcnQoKGE1LCBiNSkgPT4gYTUuY2VudGVyWSAtIGI1LmNlbnRlclkpOwogICAgY29uc3QgbmV3QmxvY2tJZHMgPSB2aXN1YWxPcmRlci5tYXAoKGl0ZW0pID0+IGl0ZW0uaWQpLmZpbHRlcigoaWQpID0+IGlkICE9PSBudWxsKTsKICAgIGNvbnN0IG9yaWdpbmFsQmxvY2tzID0gWy4uLnRoaXMuY29tcG9uZW50LmJsb2Nrc107CiAgICBjb25zdCBkcmFnZ2VkQmxvY2sgPSBvcmlnaW5hbEJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IHRoaXMuZHJhZ2dlZEJsb2NrSWQpOwogICAgaWYgKCFkcmFnZ2VkQmxvY2spCiAgICAgIHJldHVybjsKICAgIGNvbnN0IG9sZE9yZGVyID0gb3JpZ2luYWxCbG9ja3MubWFwKChiNSkgPT4gYjUuaWQpOwogICAgY29uc3Qgb3JkZXJDaGFuZ2VkID0gIW5ld0Jsb2NrSWRzLmV2ZXJ5KChpZCwgaW5kZXgyKSA9PiBpZCA9PT0gb2xkT3JkZXJbaW5kZXgyXSk7CiAgICBpZiAoIW9yZGVyQ2hhbmdlZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBuZXdCbG9ja3MgPSBuZXdCbG9ja0lkcy5tYXAoKGlkKSA9PiBvcmlnaW5hbEJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IGlkKSkuZmlsdGVyKEJvb2xlYW4pOwogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gbmV3QmxvY2tzOwogICAgdGhpcy5jb21wb25lbnQucmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpOwogICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBpZiAoZHJhZ2dlZEJsb2NrLnR5cGUgIT09ICJkaXZpZGVyIikgewogICAgICAgIHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGRyYWdnZWRCbG9jay5pZCk7CiAgICAgIH0KICAgIH0sIDEwMCk7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmhpc3RvcnkuanMKdmFyIFd5c2l3eWdIaXN0b3J5ID0gY2xhc3MgewogIGhpc3RvcnkgPSBbXTsKICBjdXJyZW50SW5kZXggPSAtMTsKICBtYXhIaXN0b3J5U2l6ZSA9IDUwOwogIGxhc3RTYXZlVGltZSA9IDA7CiAgc2F2ZURlYm91bmNlTXMgPSA1MDA7CiAgLy8gRGVib3VuY2Ugc2F2ZXMgdG8gYXZvaWQgdG9vIG1hbnkgc25hcHNob3RzCiAgY29uc3RydWN0b3IoKSB7CiAgICB0aGlzLmhpc3RvcnkgPSBbXTsKICAgIHRoaXMuY3VycmVudEluZGV4ID0gLTE7CiAgfQogIC8qKgogICAqIFNhdmUgY3VycmVudCBzdGF0ZSB0byBoaXN0b3J5CiAgICovCiAgc2F2ZVN0YXRlKGJsb2Nrcywgc2VsZWN0ZWRCbG9ja0lkLCBjdXJzb3JQb3NpdGlvbikgewogICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICBpZiAobm93MiAtIHRoaXMubGFzdFNhdmVUaW1lIDwgdGhpcy5zYXZlRGVib3VuY2VNcyAmJiB0aGlzLmN1cnJlbnRJbmRleCA+PSAwKSB7CiAgICAgIHRoaXMuaGlzdG9yeVt0aGlzLmN1cnJlbnRJbmRleF0gPSB7CiAgICAgICAgYmxvY2tzOiB0aGlzLmNsb25lQmxvY2tzKGJsb2NrcyksCiAgICAgICAgc2VsZWN0ZWRCbG9ja0lkLAogICAgICAgIGN1cnNvclBvc2l0aW9uOiBjdXJzb3JQb3NpdGlvbiA/IHsgLi4uY3Vyc29yUG9zaXRpb24gfSA6IHZvaWQgMCwKICAgICAgICB0aW1lc3RhbXA6IG5vdzIKICAgICAgfTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDEpIHsKICAgICAgdGhpcy5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5LnNsaWNlKDAsIHRoaXMuY3VycmVudEluZGV4ICsgMSk7CiAgICB9CiAgICBjb25zdCBuZXdTdGF0ZSA9IHsKICAgICAgYmxvY2tzOiB0aGlzLmNsb25lQmxvY2tzKGJsb2NrcyksCiAgICAgIHNlbGVjdGVkQmxvY2tJZCwKICAgICAgY3Vyc29yUG9zaXRpb246IGN1cnNvclBvc2l0aW9uID8geyAuLi5jdXJzb3JQb3NpdGlvbiB9IDogdm9pZCAwLAogICAgICB0aW1lc3RhbXA6IG5vdzIKICAgIH07CiAgICB0aGlzLmhpc3RvcnkucHVzaChuZXdTdGF0ZSk7CiAgICB0aGlzLmN1cnJlbnRJbmRleCsrOwogICAgaWYgKHRoaXMuaGlzdG9yeS5sZW5ndGggPiB0aGlzLm1heEhpc3RvcnlTaXplKSB7CiAgICAgIHRoaXMuaGlzdG9yeS5zaGlmdCgpOwogICAgICB0aGlzLmN1cnJlbnRJbmRleC0tOwogICAgfQogICAgdGhpcy5sYXN0U2F2ZVRpbWUgPSBub3cyOwogIH0KICAvKioKICAgKiBGb3JjZSBzYXZlIGEgY2hlY2twb2ludCAodXNlZnVsIGZvciBvcGVyYXRpb25zIGxpa2UgYmxvY2sgZGVsZXRpb24pCiAgICovCiAgc2F2ZUNoZWNrcG9pbnQoYmxvY2tzLCBzZWxlY3RlZEJsb2NrSWQsIGN1cnNvclBvc2l0aW9uKSB7CiAgICB0aGlzLmxhc3RTYXZlVGltZSA9IDA7CiAgICB0aGlzLnNhdmVTdGF0ZShibG9ja3MsIHNlbGVjdGVkQmxvY2tJZCwgY3Vyc29yUG9zaXRpb24pOwogIH0KICAvKioKICAgKiBVbmRvIHRvIHByZXZpb3VzIHN0YXRlCiAgICovCiAgdW5kbygpIHsKICAgIGlmICghdGhpcy5jYW5VbmRvKCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB0aGlzLmN1cnJlbnRJbmRleC0tOwogICAgcmV0dXJuIHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SW5kZXhdKTsKICB9CiAgLyoqCiAgICogUmVkbyB0byBuZXh0IHN0YXRlCiAgICovCiAgcmVkbygpIHsKICAgIGlmICghdGhpcy5jYW5SZWRvKCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB0aGlzLmN1cnJlbnRJbmRleCsrOwogICAgcmV0dXJuIHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SW5kZXhdKTsKICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgdW5kbyBpcyBhdmFpbGFibGUKICAgKi8KICBjYW5VbmRvKCkgewogICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4ID4gMDsKICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgcmVkbyBpcyBhdmFpbGFibGUKICAgKi8KICBjYW5SZWRvKCkgewogICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDE7CiAgfQogIC8qKgogICAqIEdldCBjdXJyZW50IHN0YXRlCiAgICovCiAgZ2V0Q3VycmVudFN0YXRlKCkgewogICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID49IDAgJiYgdGhpcy5jdXJyZW50SW5kZXggPCB0aGlzLmhpc3RvcnkubGVuZ3RoKSB7CiAgICAgIHJldHVybiB0aGlzLmNsb25lU3RhdGUodGhpcy5oaXN0b3J5W3RoaXMuY3VycmVudEluZGV4XSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgLyoqCiAgICogQ2xlYXIgaGlzdG9yeQogICAqLwogIGNsZWFyKCkgewogICAgdGhpcy5oaXN0b3J5ID0gW107CiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IC0xOwogICAgdGhpcy5sYXN0U2F2ZVRpbWUgPSAwOwogIH0KICAvKioKICAgKiBEZWVwIGNsb25lIGJsb2NrcwogICAqLwogIGNsb25lQmxvY2tzKGJsb2NrcykgewogICAgcmV0dXJuIGJsb2Nrcy5tYXAoKGJsb2NrKSA9PiAoewogICAgICAuLi5ibG9jaywKICAgICAgbWV0YWRhdGE6IGJsb2NrLm1ldGFkYXRhID8geyAuLi5ibG9jay5tZXRhZGF0YSB9IDogdm9pZCAwCiAgICB9KSk7CiAgfQogIC8qKgogICAqIENsb25lIGEgaGlzdG9yeSBzdGF0ZQogICAqLwogIGNsb25lU3RhdGUoc3RhdGUxNCkgewogICAgcmV0dXJuIHsKICAgICAgYmxvY2tzOiB0aGlzLmNsb25lQmxvY2tzKHN0YXRlMTQuYmxvY2tzKSwKICAgICAgc2VsZWN0ZWRCbG9ja0lkOiBzdGF0ZTE0LnNlbGVjdGVkQmxvY2tJZCwKICAgICAgY3Vyc29yUG9zaXRpb246IHN0YXRlMTQuY3Vyc29yUG9zaXRpb24gPyB7IC4uLnN0YXRlMTQuY3Vyc29yUG9zaXRpb24gfSA6IHZvaWQgMCwKICAgICAgdGltZXN0YW1wOiBzdGF0ZTE0LnRpbWVzdGFtcAogICAgfTsKICB9CiAgLyoqCiAgICogR2V0IGhpc3RvcnkgaW5mbyBmb3IgZGVidWdnaW5nCiAgICovCiAgZ2V0SGlzdG9yeUluZm8oKSB7CiAgICByZXR1cm4gewogICAgICBzaXplOiB0aGlzLmhpc3RvcnkubGVuZ3RoLAogICAgICBjdXJyZW50SW5kZXg6IHRoaXMuY3VycmVudEluZGV4LAogICAgICBjYW5VbmRvOiB0aGlzLmNhblVuZG8oKSwKICAgICAgY2FuUmVkbzogdGhpcy5jYW5SZWRvKCkKICAgIH07CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9kZWVzLXd5c2l3eWctYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNjMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczY0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV3lzaXd5Z0Jsb2NrID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13eXNpd3lnLWJsb2NrIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfYmxvY2tfZGVjb3JhdG9yczsKICBsZXQgX2Jsb2NrX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYmxvY2tfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzU2VsZWN0ZWRfZGVjb3JhdG9yczsKICBsZXQgX2lzU2VsZWN0ZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc1NlbGVjdGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oYW5kbGVyc19kZWNvcmF0b3JzOwogIGxldCBfaGFuZGxlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oYW5kbGVyc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfd3lzaXd5Z0NvbXBvbmVudF9kZWNvcmF0b3JzOwogIGxldCBfd3lzaXd5Z0NvbXBvbmVudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3d5c2l3eWdDb21wb25lbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1d5c2l3eWdCbG9jazIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9ibG9ja19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX2lzU2VsZWN0ZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfaGFuZGxlcnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF93eXNpd3lnQ29tcG9uZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfX2VzRGVjb3JhdGU2Myh0aGlzLCBudWxsLCBfYmxvY2tfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYmxvY2siLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJsb2NrIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJsb2NrLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ibG9jayA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ibG9ja19pbml0aWFsaXplcnMsIF9ibG9ja19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYzKHRoaXMsIG51bGwsIF9pc1NlbGVjdGVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzU2VsZWN0ZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzU2VsZWN0ZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNTZWxlY3RlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNTZWxlY3RlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc1NlbGVjdGVkX2luaXRpYWxpemVycywgX2lzU2VsZWN0ZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Myh0aGlzLCBudWxsLCBfaGFuZGxlcnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGFuZGxlcnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhhbmRsZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhhbmRsZXJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oYW5kbGVycyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oYW5kbGVyc19pbml0aWFsaXplcnMsIF9oYW5kbGVyc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYzKHRoaXMsIG51bGwsIF93eXNpd3lnQ29tcG9uZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInd5c2l3eWdDb21wb25lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInd5c2l3eWdDb21wb25lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud3lzaXd5Z0NvbXBvbmVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud3lzaXd5Z0NvbXBvbmVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF93eXNpd3lnQ29tcG9uZW50X2luaXRpYWxpemVycywgX3d5c2l3eWdDb21wb25lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXeXNpd3lnQmxvY2syID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAodGhpcy5fc2VsZWN0aW9uSGFuZGxlcikgewogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIHRoaXMuX3NlbGVjdGlvbkhhbmRsZXIpOwogICAgICB9CiAgICB9CiAgICAjYmxvY2tfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX2Jsb2NrX2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgIGdldCBibG9jaygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Jsb2NrX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYmxvY2sodmFsdWUyKSB7CiAgICAgIHRoaXMuI2Jsb2NrX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNTZWxlY3RlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX2Jsb2NrX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfaXNTZWxlY3RlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNTZWxlY3RlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzU2VsZWN0ZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1NlbGVjdGVkKHZhbHVlMikgewogICAgICB0aGlzLiNpc1NlbGVjdGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaGFuZGxlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY0KHRoaXMsIF9pc1NlbGVjdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfaGFuZGxlcnNfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBoYW5kbGVycygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2hhbmRsZXJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaGFuZGxlcnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2hhbmRsZXJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjd3lzaXd5Z0NvbXBvbmVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX2hhbmRsZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfd3lzaXd5Z0NvbXBvbmVudF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHd5c2l3eWdDb21wb25lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN3eXNpd3lnQ29tcG9uZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICAvLyBSZWZlcmVuY2UgdG8gcGFyZW50IGRlZXMtaW5wdXQtd3lzaXd5ZwogICAgc2V0IHd5c2l3eWdDb21wb25lbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3d5c2l3eWdDb21wb25lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8vIFJlZmVyZW5jZSB0byB0aGUgZWRpdGFibGUgYmxvY2sgZWxlbWVudAogICAgYmxvY2tFbGVtZW50ID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX3d5c2l3eWdDb21wb25lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgIC8vIFRyYWNrIGlmIHdlJ3ZlIGluaXRpYWxpemVkIHRoZSBjb250ZW50CiAgICBjb250ZW50SW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgIC8vIFRyYWNrIGN1cnNvciBwb3NpdGlvbgogICAgbGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSAwOwogICAgbGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgaGFuZGxlclN0eWxlc0luamVjdGVkID0gZmFsc2U7CiAgICAvLyBCbG9jayB0eXBlcyB0aGF0IGRvbid0IHN1cHBvcnQgY29udGVudGVkaXRhYmxlCiAgICBzdGF0aWMgTk9OX0VESVRBQkxFX1RZUEVTID0gWyJpbWFnZSIsICJkaXZpZGVyIiwgInlvdXR1YmUiXTsKICAgIGluamVjdEhhbmRsZXJTdHlsZXMoKSB7CiAgICAgIGlmICh0aGlzLmhhbmRsZXJTdHlsZXNJbmplY3RlZCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMuaGFuZGxlclN0eWxlc0luamVjdGVkID0gdHJ1ZTsKICAgICAgbGV0IHN0eWxlczMgPSAiIjsKICAgICAgY29uc3QgYmxvY2tUeXBlcyA9IEJsb2NrUmVnaXN0cnkuZ2V0QWxsVHlwZXMoKTsKICAgICAgZm9yIChjb25zdCB0eXBlNSBvZiBibG9ja1R5cGVzKSB7CiAgICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodHlwZTUpOwogICAgICAgIGlmIChoYW5kbGVyMikgewogICAgICAgICAgc3R5bGVzMyArPSBoYW5kbGVyMi5nZXRTdHlsZXMoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHN0eWxlczMpIHsKICAgICAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9IHN0eWxlczM7CiAgICAgICAgdGhpcy5zaGFkb3dSb290Py5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAuYmxvY2sgewogICAgICAgIHBhZGRpbmc6IDRweCAwOwogICAgICAgIG1pbi1oZWlnaHQ6IDEuNmVtOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAiLCAiI2UwZTBlMCIpfTsKICAgICAgfQoKICAgICAgLmJsb2NrOmVtcHR5Om5vdCg6Zm9jdXMpOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1wbGFjZWhvbGRlcik7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAvKiBCbG9jay1zcGVjaWZpYyBzdHlsZXMgbW92ZWQgdG8gaGFuZGxlcnMgKi8KCgogICAgICAvKiBGb3JtYXR0aW5nIHN0eWxlcyAqLwogICAgICAuYmxvY2sgOmlzKGIsIHN0cm9uZykgewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNmZmZmZmYiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jayA6aXMoaSwgZW0pIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5ibG9jayB1IHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLmJsb2NrIHMgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwogICAgICB9CgogICAgICAuYmxvY2sgY29kZSB7CiAgICAgICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAwLjllbTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA2KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDE0IiwgIiNmZjZiNmIiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jayBhIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDY2Y2MiLCAiIzRkOTRmZiIpfTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE1cyBlYXNlOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLmJsb2NrIGE6aG92ZXIgewogICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDA2NmNjIiwgIiM0ZDk0ZmYiKX07CiAgICAgIH0KCiAgICAgIC8qIENvZGUgYmxvY2sgY29udGFpbmVyIGFuZCBsYW5ndWFnZSBzdHlsZXMgbW92ZWQgdG8gaGFuZGxlciAqLwoKICAgICAgLyogU2VsZWN0aW9uIHN0eWxlcyAqLwogICAgICAuYmxvY2sgOjpzZWxlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDEwMiwgMjA0LCAwLjMpIiwgInJnYmEoNzcsIDE0OCwgMjU1LCAwLjMpIil9OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICB9CgoKICAgICAgLyogU3RyaWtlIHRocm91Z2ggKi8KICAgICAgLmJsb2NrIDppcyhzLCBzdHJpa2UpIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCgogICAgICAvKiBCbG9jayBtYXJnaW4gYWRqdXN0bWVudHMgYmFzZWQgb24gdHlwZSAqLwogICAgICA6aG9zdC1jb250ZXh0KC5ibG9jay13cmFwcGVyOmZpcnN0LWNoaWxkKSAuYmxvY2sgewogICAgICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QtY29udGV4dCguYmxvY2std3JhcHBlcjpsYXN0LWNoaWxkKSAuYmxvY2sgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIFNlbGVjdGVkIHN0YXRlICovCiAgICAgIC5ibG9jay5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMDUpIiwgInJnYmEoNzcsIDE0OCwgMjU1LCAwLjA4KSIpfTsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMikiLCAicmdiYSg3NywgMTQ4LCAyNTUsIDAuMikiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAtOHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogLThweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDhweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA4cHg7CiAgICAgIH0KCgoKCiAgICBgCiAgICBdOwogICAgc2hvdWxkVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImlzU2VsZWN0ZWQiKSAmJiB0aGlzLmJsb2NrKSB7CiAgICAgICAgbGV0IGVsZW1lbnQ0ID0gbnVsbDsKICAgICAgICBjb25zdCBibG9ja1R5cGUgPSB0aGlzLmJsb2NrLnR5cGU7CiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSBgLmJsb2NrLiR7YmxvY2tUeXBlfWA7CiAgICAgICAgZWxlbWVudDQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOwogICAgICAgIGlmIChlbGVtZW50NCkgewogICAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZCkgewogICAgICAgICAgICBlbGVtZW50NC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZCIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWxlbWVudDQuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImJsb2NrIikgJiYgdGhpcy5ibG9jaykgewogICAgICAgIGNvbnN0IG9sZEJsb2NrID0gY2hhbmdlZFByb3BlcnRpZXMuZ2V0KCJibG9jayIpOwogICAgICAgIGlmIChvbGRCbG9jayAmJiBvbGRCbG9jay5pZCAmJiBvbGRCbG9jay50eXBlICYmIG9sZEJsb2NrLmlkID09PSB0aGlzLmJsb2NrLmlkICYmIG9sZEJsb2NrLnR5cGUgPT09IHRoaXMuYmxvY2sudHlwZSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gIXRoaXMuYmxvY2tFbGVtZW50IHx8IHRoaXMuYmxvY2s/LnR5cGUgIT09IHRoaXMuYmxvY2tFbGVtZW50LmRhdGFzZXQuYmxvY2tUeXBlOwogICAgfQogICAgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLmNvbnRlbnRJbml0aWFsaXplZCA9IHRydWU7CiAgICAgIHRoaXMuaW5qZWN0SGFuZGxlclN0eWxlcygpOwogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICBpZiAoY29udGFpbmVyICYmIHRoaXMuYmxvY2spIHsKICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gdGhpcy5yZW5kZXJCbG9ja0NvbnRlbnQoKTsKICAgICAgfQogICAgICBpZiAodGhpcy5ibG9jaykgewogICAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgICAgaWYgKGhhbmRsZXIyKSB7CiAgICAgICAgICBjb25zdCBibG9ja0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgICAgaWYgKGJsb2NrRWxlbWVudCkgewogICAgICAgICAgICBoYW5kbGVyMi5zZXR1cChibG9ja0VsZW1lbnQsIHRoaXMuYmxvY2ssIHRoaXMuaGFuZGxlcnMpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBlZGl0YWJsZUJsb2NrID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgICAgaWYgKGVkaXRhYmxlQmxvY2spIHsKICAgICAgICBlZGl0YWJsZUJsb2NrLnNldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIsIHRoaXMuYmxvY2suaWQpOwogICAgICAgIGVkaXRhYmxlQmxvY2suc2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLXR5cGUiLCB0aGlzLmJsb2NrLnR5cGUpOwogICAgICAgIGVkaXRhYmxlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoZTExKSA9PiB7CiAgICAgICAgICB0aGlzLmhhbmRsZXJzPy5vbklucHV0Py4oZTExKTsKICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWRpdGFibGVCbG9jayk7CiAgICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUJsb2NrKTsKICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuaGFuZGxlcnM/Lm9uS2V5RG93bj8uKGUxMSk7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IHsKICAgICAgICAgIHRoaXMuaGFuZGxlcnM/Lm9uRm9jdXM/LigpOwogICAgICAgIH0pOwogICAgICAgIGVkaXRhYmxlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgICAgIHRoaXMuaGFuZGxlcnM/Lm9uQmx1cj8uKCk7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbnN0YXJ0IiwgKCkgPT4gewogICAgICAgICAgdGhpcy5oYW5kbGVycz8ub25Db21wb3NpdGlvblN0YXJ0Py4oKTsKICAgICAgICB9KTsKICAgICAgICBlZGl0YWJsZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uZW5kIiwgKCkgPT4gewogICAgICAgICAgdGhpcy5oYW5kbGVycz8ub25Db21wb3NpdGlvbkVuZD8uKCk7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgKGUxMSkgPT4gewogICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUJsb2NrKTsKICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuaGFuZGxlcnM/Lm9uTW91c2VVcD8uKGUxMSk7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVkaXRhYmxlQmxvY2spOwogICAgICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMCk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgY2hlY2tTZWxlY3Rpb24gPSAoKSA9PiB7CiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7CiAgICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0Lmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIsIHsKICAgICAgICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICAgICAgICB0ZXh0OiAiIiwKICAgICAgICAgICAgICAgICAgYmxvY2tJZDogdGhpcy5ibG9jay5pZCwKICAgICAgICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiBmYWxzZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBjdXJyZW50RWRpdGFibGVCbG9jayA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgICBpZiAoIWN1cnJlbnRFZGl0YWJsZUJsb2NrKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB0aGlzLmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICAgICAgY29uc3QgcGFyZW50U2hhZG93Um9vdCA9IHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdDsKICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgICAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QpCiAgICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2godGhpcy5zaGFkb3dSb290KTsKICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBzdGFydEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGN1cnJlbnRFZGl0YWJsZUJsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKTsKICAgICAgICAgIGNvbnN0IGVuZEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGN1cnJlbnRFZGl0YWJsZUJsb2NrLCBzZWxlY3Rpb25JbmZvLmVuZENvbnRhaW5lcik7CiAgICAgICAgICBpZiAoc3RhcnRJbkJsb2NrIHx8IGVuZEluQmxvY2spIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkVGV4dCAhPT0gdGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gc2VsZWN0ZWRUZXh0OwogICAgICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgICAgICAgICBjb25zdCByZWN0ID0gcmFuZ2UyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLCB7CiAgICAgICAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgICAgICAgdGV4dDogc2VsZWN0ZWRUZXh0LnRyaW0oKSwKICAgICAgICAgICAgICAgICAgYmxvY2tJZDogdGhpcy5ibG9jay5pZCwKICAgICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlMiwKICAgICAgICAgICAgICAgICAgcmVjdCwKICAgICAgICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIsIHsKICAgICAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgYmxvY2tJZDogdGhpcy5ibG9jay5pZCwKICAgICAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgICAgfSkpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgY2hlY2tTZWxlY3Rpb24pOwogICAgICAgIHRoaXMuX3NlbGVjdGlvbkhhbmRsZXIgPSBjaGVja1NlbGVjdGlvbjsKICAgICAgICBlZGl0YWJsZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwgKCkgPT4gewogICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUJsb2NrKTsKICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5ibG9jay5jb250ZW50KSB7CiAgICAgICAgICBlZGl0YWJsZUJsb2NrLmlubmVySFRNTCA9IHRoaXMuYmxvY2suY29udGVudDsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5ibG9ja0VsZW1lbnQgPSBlZGl0YWJsZUJsb2NrOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICBpZiAoIXRoaXMuYmxvY2spCiAgICAgICAgcmV0dXJuIHUzYGA7CiAgICAgIHJldHVybiB1M2A8ZGl2IGNsYXNzPSJ3eXNpd3lnLWJsb2NrLWNvbnRhaW5lciI+PC9kaXY+YDsKICAgIH0KICAgIHJlbmRlckJsb2NrQ29udGVudCgpIHsKICAgICAgaWYgKCF0aGlzLmJsb2NrKQogICAgICAgIHJldHVybiAiIjsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgaWYgKGhhbmRsZXIyKSB7CiAgICAgICAgcmV0dXJuIGhhbmRsZXIyLnJlbmRlcih0aGlzLmJsb2NrLCB0aGlzLmlzU2VsZWN0ZWQpOwogICAgICB9CiAgICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSB0aGlzLmlzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIiOwogICAgICByZXR1cm4gYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImJsb2NrICR7dGhpcy5ibG9jay50eXBlfSR7c2VsZWN0ZWRDbGFzc30iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICA+PC9kaXY+CiAgICBgOwogICAgfQogICAgZm9jdXMoKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5mb2N1cykgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgY29uc3QgY29udGV4dDIgPSB7IHNoYWRvd1Jvb3Q6IHRoaXMuc2hhZG93Um9vdCwgY29tcG9uZW50OiB0aGlzIH07CiAgICAgICAgcmV0dXJuIGhhbmRsZXIyLmZvY3VzKGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGlmICh0aGlzLmJsb2NrICYmIERlZXNXeXNpd3lnQmxvY2syLk5PTl9FRElUQUJMRV9UWVBFUy5pbmNsdWRlcyh0aGlzLmJsb2NrLnR5cGUpKSB7CiAgICAgICAgY29uc3QgYmxvY2tFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAuYmxvY2suJHt0aGlzLmJsb2NrLnR5cGV9YCk7CiAgICAgICAgaWYgKGJsb2NrRWxlbWVudCkgewogICAgICAgICAgYmxvY2tFbGVtZW50LmZvY3VzKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBlZGl0YWJsZUVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgICBpZiAoIWVkaXRhYmxlRWxlbWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGlmICghZWRpdGFibGVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpIHsKICAgICAgICBlZGl0YWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCAidHJ1ZSIpOwogICAgICB9CiAgICAgIGVkaXRhYmxlRWxlbWVudC5mb2N1cygpOwogICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZWRpdGFibGVFbGVtZW50ICYmIHRoaXMuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCAhPT0gZWRpdGFibGVFbGVtZW50KSB7CiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgICBlZGl0YWJsZUVsZW1lbnQuZm9jdXMoKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgZm9jdXNXaXRoQ3Vyc29yKHBvc2l0aW9uMyA9ICJlbmQiKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5mb2N1c1dpdGhDdXJzb3IpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgIHJldHVybiBoYW5kbGVyMi5mb2N1c1dpdGhDdXJzb3IoY29udGFpbmVyLCBwb3NpdGlvbjMsIGNvbnRleHQyKTsKICAgICAgfQogICAgICBpZiAodGhpcy5ibG9jayAmJiBEZWVzV3lzaXd5Z0Jsb2NrMi5OT05fRURJVEFCTEVfVFlQRVMuaW5jbHVkZXModGhpcy5ibG9jay50eXBlKSkgewogICAgICAgIHRoaXMuZm9jdXMoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgZWRpdGFibGVFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgICAgaWYgKCFlZGl0YWJsZUVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoIWVkaXRhYmxlRWxlbWVudC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgICAgZWRpdGFibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgInRydWUiKTsKICAgICAgfQogICAgICBlZGl0YWJsZUVsZW1lbnQuZm9jdXMoKTsKICAgICAgY29uc3Qgc2V0Q3Vyc29yID0gKCkgPT4gewogICAgICAgIGlmIChwb3NpdGlvbjMgPT09ICJzdGFydCIpIHsKICAgICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9TdGFydCgpOwogICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24zID09PSAiZW5kIikgewogICAgICAgICAgdGhpcy5zZXRDdXJzb3JUb0VuZCgpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBvc2l0aW9uMyA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24oZWRpdGFibGVFbGVtZW50LCBwb3NpdGlvbjMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCB8fCB0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCkgewogICAgICAgIHNldEN1cnNvcigpOwogICAgICB9IGVsc2UgewogICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gewogICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCB8fCB0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCkgewogICAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBHZXQgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSBlZGl0YWJsZSBlbGVtZW50CiAgICAgKi8KICAgIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5nZXRDdXJzb3JQb3NpdGlvbikgewogICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgIHJldHVybiBoYW5kbGVyMi5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHRoaXMuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgIGlmIChwYXJlbnRTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QpCiAgICAgICAgc2hhZG93Um9vdHMucHVzaCh0aGlzLnNoYWRvd1Jvb3QpOwogICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgY29uc29sZS5sb2coImdldEN1cnNvclBvc2l0aW9uOiBTZWxlY3Rpb24gaW5mbyBmcm9tIHNoYWRvdyBET01zOiIsIHsKICAgICAgICBzZWxlY3Rpb25JbmZvLAogICAgICAgIHNoYWRvd1Jvb3RzQ291bnQ6IHNoYWRvd1Jvb3RzLmxlbmd0aAogICAgICB9KTsKICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKSB7CiAgICAgICAgY29uc29sZS5sb2coImdldEN1cnNvclBvc2l0aW9uOiBObyBzZWxlY3Rpb24gZm91bmQiKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjb25zb2xlLmxvZygiZ2V0Q3Vyc29yUG9zaXRpb246IFJhbmdlIGluZm86IiwgewogICAgICAgIHN0YXJ0Q29udGFpbmVyOiBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLAogICAgICAgIHN0YXJ0T2Zmc2V0OiBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0LAogICAgICAgIGNvbGxhcHNlZDogc2VsZWN0aW9uSW5mby5jb2xsYXBzZWQsCiAgICAgICAgc3RhcnRDb250YWluZXJUZXh0OiBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLnRleHRDb250ZW50CiAgICAgIH0pOwogICAgICBpZiAoIWVsZW1lbnQ0LmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpKSB7CiAgICAgICAgY29uc29sZS5sb2coImdldEN1cnNvclBvc2l0aW9uOiBSYW5nZSBub3QgaW4gZWxlbWVudCIpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICBwcmVDYXJldFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50NCk7CiAgICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgICBjb25zdCBwb3NpdGlvbjMgPSBwcmVDYXJldFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoOwogICAgICBjb25zb2xlLmxvZygiZ2V0Q3Vyc29yUG9zaXRpb246IENhbGN1bGF0ZWQgcG9zaXRpb246IiwgewogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbjMsCiAgICAgICAgcHJlQ2FyZXRUZXh0OiBwcmVDYXJldFJhbmdlLnRvU3RyaW5nKCksCiAgICAgICAgZWxlbWVudFRleHQ6IGVsZW1lbnQ0LnRleHRDb250ZW50LAogICAgICAgIGVsZW1lbnRUZXh0TGVuZ3RoOiBlbGVtZW50NC50ZXh0Q29udGVudD8ubGVuZ3RoCiAgICAgIH0pOwogICAgICByZXR1cm4gcG9zaXRpb24zOwogICAgfQogICAgZ2V0Q29udGVudCgpIHsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgaWYgKGhhbmRsZXIyICYmIGhhbmRsZXIyLmdldENvbnRlbnQpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgIHJldHVybiBoYW5kbGVyMi5nZXRDb250ZW50KGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmICghZWRpdGFibGVFbGVtZW50KQogICAgICAgIHJldHVybiAiIjsKICAgICAgY29uc3QgY29udGVudDMgPSBlZGl0YWJsZUVsZW1lbnQuaW5uZXJIVE1MIHx8ICIiOwogICAgICBjb25zb2xlLmxvZygiR2V0dGluZyBjb250ZW50IGZyb20gYmxvY2s6IiwgY29udGVudDMpOwogICAgICByZXR1cm4gY29udGVudDM7CiAgICB9CiAgICBzZXRDb250ZW50KGNvbnRlbnQzKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5zZXRDb250ZW50KSB7CiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIud3lzaXd5Zy1ibG9jay1jb250YWluZXIiKTsKICAgICAgICBjb25zdCBjb250ZXh0MiA9IHsgc2hhZG93Um9vdDogdGhpcy5zaGFkb3dSb290LCBjb21wb25lbnQ6IHRoaXMgfTsKICAgICAgICByZXR1cm4gaGFuZGxlcjIuc2V0Q29udGVudChjb250YWluZXIsIGNvbnRlbnQzLCBjb250ZXh0Mik7CiAgICAgIH0KICAgICAgY29uc3QgZWRpdGFibGVFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgICAgaWYgKCFlZGl0YWJsZUVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBoYWRGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCB8fCB0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudDsKICAgICAgZWRpdGFibGVFbGVtZW50LmlubmVySFRNTCA9IGNvbnRlbnQzOwogICAgICBpZiAoaGFkRm9jdXMpIHsKICAgICAgICBlZGl0YWJsZUVsZW1lbnQuZm9jdXMoKTsKICAgICAgfQogICAgfQogICAgc2V0Q3Vyc29yVG9TdGFydCgpIHsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgaWYgKGhhbmRsZXIyICYmIGhhbmRsZXIyLnNldEN1cnNvclRvU3RhcnQpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgIHJldHVybiBoYW5kbGVyMi5zZXRDdXJzb3JUb1N0YXJ0KGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmIChlZGl0YWJsZUVsZW1lbnQpIHsKICAgICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvU3RhcnQoZWRpdGFibGVFbGVtZW50KTsKICAgICAgfQogICAgfQogICAgc2V0Q3Vyc29yVG9FbmQoKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5zZXRDdXJzb3JUb0VuZCkgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgY29uc3QgY29udGV4dDIgPSB7IHNoYWRvd1Jvb3Q6IHRoaXMuc2hhZG93Um9vdCwgY29tcG9uZW50OiB0aGlzIH07CiAgICAgICAgcmV0dXJuIGhhbmRsZXIyLnNldEN1cnNvclRvRW5kKGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmIChlZGl0YWJsZUVsZW1lbnQpIHsKICAgICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvRW5kKGVkaXRhYmxlRWxlbWVudCk7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogR2V0IGNvbnRleHQgbWVudSBpdGVtcyBmb3IgdGhpcyBibG9jawogICAgICovCiAgICBnZXRDb250ZXh0TWVudUl0ZW1zKCkgewogICAgICBpZiAoIXRoaXMuYmxvY2sgfHwgdGhpcy5ibG9jay50eXBlID09PSAiZGl2aWRlciIpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgY29uc3QgYmxvY2tUeXBlcyA9IFd5c2l3eWdTaG9ydGN1dHMuZ2V0U2xhc2hNZW51SXRlbXMoKTsKICAgICAgY29uc3QgY3VycmVudFR5cGUgPSB0aGlzLmJsb2NrLnR5cGU7CiAgICAgIGNvbnN0IHd5c2l3eWdDb21wb25lbnQgPSB0aGlzLnd5c2l3eWdDb21wb25lbnQ7CiAgICAgIGNvbnN0IGJsb2NrSWQgPSB0aGlzLmJsb2NrLmlkOwogICAgICBjb25zdCBibG9ja1R5cGVJdGVtcyA9IGJsb2NrVHlwZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnR5cGUgIT09IGN1cnJlbnRUeXBlICYmIGl0ZW0udHlwZSAhPT0gImRpdmlkZXIiKS5tYXAoKGl0ZW0pID0+ICh7CiAgICAgICAgbmFtZTogaXRlbS5sYWJlbCwKICAgICAgICBpY29uTmFtZTogaXRlbS5pY29uLnJlcGxhY2UoImx1Y2lkZToiLCAiIiksCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAod3lzaXd5Z0NvbXBvbmVudCAmJiB3eXNpd3lnQ29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucykgewogICAgICAgICAgICBjb25zdCBibG9ja1RvVHJhbnNmb3JtID0gd3lzaXd5Z0NvbXBvbmVudC5ibG9ja3MuZmluZCgoYjUpID0+IGI1LmlkID09PSBibG9ja0lkKTsKICAgICAgICAgICAgaWYgKGJsb2NrVG9UcmFuc2Zvcm0pIHsKICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLnR5cGUgPSBpdGVtLnR5cGU7CiAgICAgICAgICAgICAgYmxvY2tUb1RyYW5zZm9ybS5jb250ZW50ID0gYmxvY2tUb1RyYW5zZm9ybS5jb250ZW50IHx8ICIiOwogICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICJjb2RlIikgewogICAgICAgICAgICAgICAgYmxvY2tUb1RyYW5zZm9ybS5tZXRhZGF0YSA9IHsgbGFuZ3VhZ2U6ICJ0eXBlc2NyaXB0IiB9OwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAibGlzdCIpIHsKICAgICAgICAgICAgICAgIGJsb2NrVG9UcmFuc2Zvcm0ubWV0YWRhdGEgPSB7IGxpc3RUeXBlOiAiYnVsbGV0IiB9OwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAiaW1hZ2UiKSB7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLmNvbnRlbnQgPSAiIjsKICAgICAgICAgICAgICAgIGJsb2NrVG9UcmFuc2Zvcm0ubWV0YWRhdGEgPSB7IHVybDogIiIsIGxvYWRpbmc6IGZhbHNlIH07CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICJ5b3V0dWJlIikgewogICAgICAgICAgICAgICAgYmxvY2tUb1RyYW5zZm9ybS5jb250ZW50ID0gIiI7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLm1ldGFkYXRhID0geyB2aWRlb0lkOiAiIiwgdXJsOiAiIiB9OwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAibWFya2Rvd24iKSB7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLm1ldGFkYXRhID0geyBzaG93UHJldmlldzogZmFsc2UgfTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gImh0bWwiKSB7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLm1ldGFkYXRhID0geyBzaG93UHJldmlldzogZmFsc2UgfTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gImF0dGFjaG1lbnQiKSB7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLmNvbnRlbnQgPSAiIjsKICAgICAgICAgICAgICAgIGJsb2NrVG9UcmFuc2Zvcm0ubWV0YWRhdGEgPSB7IGZpbGVzOiBbXSB9OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB3eXNpd3lnQ29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChibG9ja0lkKTsKICAgICAgICAgICAgICB3eXNpd3lnQ29tcG9uZW50LnVwZGF0ZVZhbHVlKCk7CiAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgICAgIHd5c2l3eWdDb21wb25lbnQuYmxvY2tPcGVyYXRpb25zLmZvY3VzQmxvY2soYmxvY2tJZCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pKTsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDaGFuZ2UgVHlwZSIsCiAgICAgICAgICBpY29uTmFtZTogInR5cGUiLAogICAgICAgICAgc3VibWVudTogYmxvY2tUeXBlSXRlbXMKICAgICAgICB9CiAgICAgIF07CiAgICAgIGlmICghWyJpbWFnZSIsICJkaXZpZGVyIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdLmluY2x1ZGVzKHRoaXMuYmxvY2sudHlwZSkpIHsKICAgICAgICBtZW51SXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSwgewogICAgICAgICAgbmFtZTogIkN1dCIsCiAgICAgICAgICBpY29uTmFtZTogInNjaXNzb3JzIiwKICAgICAgICAgIHNob3J0Y3V0OiAiQ21kK1giLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJjdXQiKTsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBuYW1lOiAiQ29weSIsCiAgICAgICAgICBpY29uTmFtZTogImNvcHkiLAogICAgICAgICAgc2hvcnRjdXQ6ICJDbWQrQyIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKTsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBuYW1lOiAiUGFzdGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLAogICAgICAgICAgc2hvcnRjdXQ6ICJDbWQrViIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoInBhc3RlIik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgbWVudUl0ZW1zLnB1c2goeyBkaXZpZGVyOiB0cnVlIH0sIHsKICAgICAgICBuYW1lOiAiRGVsZXRlIEJsb2NrIiwKICAgICAgICBpY29uTmFtZTogInRyYXNoMiIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAod3lzaXd5Z0NvbXBvbmVudCAmJiB3eXNpd3lnQ29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucykgewogICAgICAgICAgICB3eXNpd3lnQ29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucy5kZWxldGVCbG9jayhibG9ja0lkKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXR1cm4gbWVudUl0ZW1zOwogICAgfQogICAgLyoqCiAgICAgKiBHZXRzIGNvbnRlbnQgc3BsaXQgYXQgY3Vyc29yIHBvc2l0aW9uCiAgICAgKi8KICAgIGdldFNwbGl0Q29udGVudCgpIHsKICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU3RhcnRpbmcuLi4iKTsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogQ2hlY2tpbmcgZm9yIGhhbmRsZXIiLCB7CiAgICAgICAgYmxvY2tUeXBlOiB0aGlzLmJsb2NrLnR5cGUsCiAgICAgICAgaGFzSGFuZGxlcjogISFoYW5kbGVyMiwKICAgICAgICBoYXNTcGxpdE1ldGhvZDogISEoaGFuZGxlcjIgJiYgaGFuZGxlcjIuZ2V0U3BsaXRDb250ZW50KQogICAgICB9KTsKICAgICAgaWYgKGhhbmRsZXIyICYmIGhhbmRsZXIyLmdldFNwbGl0Q29udGVudCkgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogRm91bmQgY29udGFpbmVyIiwgewogICAgICAgICAgY29udGFpbmVyOiAhIWNvbnRhaW5lciwKICAgICAgICAgIGNvbnRhaW5lckhUTUw6IGNvbnRhaW5lcj8uaW5uZXJIVE1MPy5zdWJzdHJpbmcoMCwgMTAwKQogICAgICAgIH0pOwogICAgICAgIGNvbnN0IGNvbnRleHQyID0gewogICAgICAgICAgc2hhZG93Um9vdDogdGhpcy5zaGFkb3dSb290LAogICAgICAgICAgY29tcG9uZW50OiB0aGlzCiAgICAgICAgfTsKICAgICAgICByZXR1cm4gaGFuZGxlcjIuZ2V0U3BsaXRDb250ZW50KGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmICghZWRpdGFibGVFbGVtZW50KSB7CiAgICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogTm8gZWRpdGFibGUgZWxlbWVudCBmb3VuZCIpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IEVsZW1lbnQgaW5mbzoiLCB7CiAgICAgICAgYmxvY2tUeXBlOiB0aGlzLmJsb2NrLnR5cGUsCiAgICAgICAgaW5uZXJIVE1MOiBlZGl0YWJsZUVsZW1lbnQuaW5uZXJIVE1MLAogICAgICAgIHRleHRDb250ZW50OiBlZGl0YWJsZUVsZW1lbnQudGV4dENvbnRlbnQsCiAgICAgICAgdGV4dExlbmd0aDogZWRpdGFibGVFbGVtZW50LnRleHRDb250ZW50Py5sZW5ndGgKICAgICAgfSk7CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHRoaXMuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgIGlmIChwYXJlbnRTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QpCiAgICAgICAgc2hhZG93Um9vdHMucHVzaCh0aGlzLnNoYWRvd1Jvb3QpOwogICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU2VsZWN0aW9uIGluZm8gZnJvbSBzaGFkb3cgRE9NczoiLCB7CiAgICAgICAgc2VsZWN0aW9uSW5mbywKICAgICAgICBzaGFkb3dSb290c0NvdW50OiBzaGFkb3dSb290cy5sZW5ndGgKICAgICAgfSk7CiAgICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IE5vIHNlbGVjdGlvbiwgdXNpbmcgbGFzdCBrbm93biBwb3NpdGlvbjoiLCB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uKTsKICAgICAgICBpZiAodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiAhPT0gbnVsbCkgewogICAgICAgICAgY29uc3QgZnVsbFRleHQgPSBlZGl0YWJsZUVsZW1lbnQudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU3BsaXR0aW5nIHdpdGggbGFzdCBrbm93biBwb3NpdGlvbjoiLCB7CiAgICAgICAgICAgIHBvcywKICAgICAgICAgICAgZnVsbFRleHRMZW5ndGg6IGZ1bGxUZXh0Lmxlbmd0aCwKICAgICAgICAgICAgYmVmb3JlOiBmdWxsVGV4dC5zdWJzdHJpbmcoMCwgcG9zKSwKICAgICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICAgIGFmdGVyOiBmdWxsVGV4dC5zdWJzdHJpbmcocG9zKQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU2VsZWN0aW9uIHJhbmdlOiIsIHsKICAgICAgICBzdGFydENvbnRhaW5lcjogc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwKICAgICAgICBzdGFydE9mZnNldDogc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCwKICAgICAgICBzdGFydENvbnRhaW5lckluRWxlbWVudDogZWRpdGFibGVFbGVtZW50LmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpCiAgICAgIH0pOwogICAgICBpZiAoIVd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oZWRpdGFibGVFbGVtZW50LCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSkgewogICAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IFNlbGVjdGlvbiBub3QgaW4gdGhpcyBibG9jaywgdXNpbmcgbGFzdCBrbm93biBwb3NpdGlvbjoiLCB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uKTsKICAgICAgICBpZiAodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiAhPT0gbnVsbCkgewogICAgICAgICAgY29uc3QgZnVsbFRleHQgPSBlZGl0YWJsZUVsZW1lbnQudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgYmVmb3JlOiBmdWxsVGV4dC5zdWJzdHJpbmcoMCwgcG9zKSwKICAgICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBjdXJzb3JQb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVkaXRhYmxlRWxlbWVudCk7CiAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IEN1cnNvciBwb3NpdGlvbiBmb3IgSFRNTCBzcGxpdDoiLCBjdXJzb3JQb3MpOwogICAgICBpZiAoY3Vyc29yUG9zID09PSBudWxsIHx8IGN1cnNvclBvcyA9PT0gMCkgewogICAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IEN1cnNvciBhdCBzdGFydCBvciBudWxsLCBtb3ZpbmcgYWxsIGNvbnRlbnQiKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgYmVmb3JlOiAiIiwKICAgICAgICAgIGFmdGVyOiBlZGl0YWJsZUVsZW1lbnQuaW5uZXJIVE1MCiAgICAgICAgfTsKICAgICAgfQogICAgICBjb25zdCBiZWZvcmVSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgIGNvbnN0IGFmdGVyUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICBiZWZvcmVSYW5nZS5zZXRTdGFydChlZGl0YWJsZUVsZW1lbnQsIDApOwogICAgICBiZWZvcmVSYW5nZS5zZXRFbmQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICAgIGFmdGVyUmFuZ2Uuc2V0U3RhcnQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICAgIGFmdGVyUmFuZ2Uuc2V0RW5kKGVkaXRhYmxlRWxlbWVudCwgZWRpdGFibGVFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoKTsKICAgICAgY29uc3QgYmVmb3JlRnJhZ21lbnQgPSBiZWZvcmVSYW5nZS5jbG9uZUNvbnRlbnRzKCk7CiAgICAgIGNvbnN0IGFmdGVyRnJhZ21lbnQgPSBhZnRlclJhbmdlLmNsb25lQ29udGVudHMoKTsKICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICB0ZW1wRGl2LmFwcGVuZENoaWxkKGJlZm9yZUZyYWdtZW50KTsKICAgICAgY29uc3QgYmVmb3JlSHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgICB0ZW1wRGl2LmlubmVySFRNTCA9ICIiOwogICAgICB0ZW1wRGl2LmFwcGVuZENoaWxkKGFmdGVyRnJhZ21lbnQpOwogICAgICBjb25zdCBhZnRlckh0bWwgPSB0ZW1wRGl2LmlubmVySFRNTDsKICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogRmluYWwgc3BsaXQgcmVzdWx0OiIsIHsKICAgICAgICBjdXJzb3JQb3MsCiAgICAgICAgYmVmb3JlSHRtbCwKICAgICAgICBiZWZvcmVMZW5ndGg6IGJlZm9yZUh0bWwubGVuZ3RoLAogICAgICAgIGJlZm9yZUh0bWxQcmV2aWV3OiBiZWZvcmVIdG1sLnN1YnN0cmluZygwLCAxMDApICsgKGJlZm9yZUh0bWwubGVuZ3RoID4gMTAwID8gIi4uLiIgOiAiIiksCiAgICAgICAgYWZ0ZXJIdG1sLAogICAgICAgIGFmdGVyTGVuZ3RoOiBhZnRlckh0bWwubGVuZ3RoLAogICAgICAgIGFmdGVySHRtbFByZXZpZXc6IGFmdGVySHRtbC5zdWJzdHJpbmcoMCwgMTAwKSArIChhZnRlckh0bWwubGVuZ3RoID4gMTAwID8gIi4uLiIgOiAiIikKICAgICAgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgYmVmb3JlOiBiZWZvcmVIdG1sLAogICAgICAgIGFmdGVyOiBhZnRlckh0bWwKICAgICAgfTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXeXNpd3lnQmxvY2syID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvZGVlcy1pbnB1dC13eXNpd3lnLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTY0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2NSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0V3lzaXd5ZyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtd3lzaXd5ZyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dHB1dEZvcm1hdF9kZWNvcmF0b3JzOwogIGxldCBfb3V0cHV0Rm9ybWF0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0cHV0Rm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ibG9ja3NfZGVjb3JhdG9yczsKICBsZXQgX2Jsb2Nrc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Jsb2Nrc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ2dlZEJsb2NrSWRfZGVjb3JhdG9yczsKICBsZXQgX2RyYWdnZWRCbG9ja0lkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ2dlZEJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RyYWdPdmVyQmxvY2tJZF9kZWNvcmF0b3JzOwogIGxldCBfZHJhZ092ZXJCbG9ja0lkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ092ZXJCbG9ja0lkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kcmFnT3ZlclBvc2l0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9kcmFnT3ZlclBvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ092ZXJQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUZXh0X2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZFRleHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFRleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0V3lzaXd5ZzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX291dHB1dEZvcm1hdF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2Jsb2Nrc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZHJhZ2dlZEJsb2NrSWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2RyYWdPdmVyQmxvY2tJZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZHJhZ092ZXJQb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2VsZWN0ZWRUZXh0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTY0KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX291dHB1dEZvcm1hdF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvdXRwdXRGb3JtYXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm91dHB1dEZvcm1hdCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vdXRwdXRGb3JtYXQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm91dHB1dEZvcm1hdCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vdXRwdXRGb3JtYXRfaW5pdGlhbGl6ZXJzLCBfb3V0cHV0Rm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX2Jsb2Nrc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJibG9ja3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJsb2NrcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ibG9ja3MsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJsb2NrcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ibG9ja3NfaW5pdGlhbGl6ZXJzLCBfYmxvY2tzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX2RyYWdnZWRCbG9ja0lkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdnZWRCbG9ja0lkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkcmFnZ2VkQmxvY2tJZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kcmFnZ2VkQmxvY2tJZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHJhZ2dlZEJsb2NrSWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHJhZ2dlZEJsb2NrSWRfaW5pdGlhbGl6ZXJzLCBfZHJhZ2dlZEJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NCh0aGlzLCBudWxsLCBfZHJhZ092ZXJCbG9ja0lkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdPdmVyQmxvY2tJZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHJhZ092ZXJCbG9ja0lkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRyYWdPdmVyQmxvY2tJZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHJhZ092ZXJCbG9ja0lkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RyYWdPdmVyQmxvY2tJZF9pbml0aWFsaXplcnMsIF9kcmFnT3ZlckJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NCh0aGlzLCBudWxsLCBfZHJhZ092ZXJQb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkcmFnT3ZlclBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkcmFnT3ZlclBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRyYWdPdmVyUG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRyYWdPdmVyUG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHJhZ092ZXJQb3NpdGlvbl9pbml0aWFsaXplcnMsIF9kcmFnT3ZlclBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX3NlbGVjdGVkVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkVGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZFRleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZFRleHRfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRUZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRXeXNpd3lnMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNDA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI291dHB1dEZvcm1hdF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfb3V0cHV0Rm9ybWF0X2luaXRpYWxpemVycywgImh0bWwiKSk7CiAgICBnZXQgb3V0cHV0Rm9ybWF0KCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0cHV0Rm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgb3V0cHV0Rm9ybWF0KHZhbHVlMikgewogICAgICB0aGlzLiNvdXRwdXRGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNibG9ja3NfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9vdXRwdXRGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9ibG9ja3NfaW5pdGlhbGl6ZXJzLCBbCiAgICAgIHsKICAgICAgICBpZDogV3lzaXd5Z1Nob3J0Y3V0cy5nZW5lcmF0ZUJsb2NrSWQoKSwKICAgICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgICBjb250ZW50OiAiIgogICAgICB9CiAgICBdKSk7CiAgICBnZXQgYmxvY2tzKCkgewogICAgICByZXR1cm4gdGhpcy4jYmxvY2tzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYmxvY2tzKHZhbHVlMikgewogICAgICB0aGlzLiNibG9ja3NfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8vIE5vdCB1c2luZyBAc3RhdGUgdG8gYXZvaWQgcmUtcmVuZGVycyB3aGVuIHNlbGVjdGlvbiBjaGFuZ2VzCiAgICBzZWxlY3RlZEJsb2NrSWQgPSAoX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfYmxvY2tzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAvLyBTbGFzaCBtZW51IGlzIG5vdyBnbG9iYWxseSByZW5kZXJlZAogICAgc2xhc2hNZW51ID0gRGVlc1NsYXNoTWVudS5nZXRJbnN0YW5jZSgpOwogICAgI2RyYWdnZWRCbG9ja0lkX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9kcmFnZ2VkQmxvY2tJZF9pbml0aWFsaXplcnMsIG51bGwpOwogICAgZ2V0IGRyYWdnZWRCbG9ja0lkKCkgewogICAgICByZXR1cm4gdGhpcy4jZHJhZ2dlZEJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkcmFnZ2VkQmxvY2tJZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ2dlZEJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkcmFnT3ZlckJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9kcmFnZ2VkQmxvY2tJZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX2RyYWdPdmVyQmxvY2tJZF9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCBkcmFnT3ZlckJsb2NrSWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkcmFnT3ZlckJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkcmFnT3ZlckJsb2NrSWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2RyYWdPdmVyQmxvY2tJZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RyYWdPdmVyUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9kcmFnT3ZlckJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9kcmFnT3ZlclBvc2l0aW9uX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IGRyYWdPdmVyUG9zaXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNkcmFnT3ZlclBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZHJhZ092ZXJQb3NpdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ092ZXJQb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gRm9ybWF0dGluZyBtZW51IGlzIG5vdyBnbG9iYWxseSByZW5kZXJlZAogICAgZm9ybWF0dGluZ01lbnUgPSAoX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfZHJhZ092ZXJQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyksIERlZXNGb3JtYXR0aW5nTWVudS5nZXRJbnN0YW5jZSgpKTsKICAgICNzZWxlY3RlZFRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX3NlbGVjdGVkVGV4dF9pbml0aWFsaXplcnMsICIiKTsKICAgIGdldCBzZWxlY3RlZFRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZFRleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZFRleHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGVkVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgZWRpdG9yQ29udGVudFJlZiA9IF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX3NlbGVjdGVkVGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICBpc0NvbXBvc2luZyA9IGZhbHNlOwogICAgLy8gSGFuZGxlciBpbnN0YW5jZXMKICAgIGJsb2NrT3BlcmF0aW9uczsKICAgIGlucHV0SGFuZGxlcjsKICAgIGtleWJvYXJkSGFuZGxlcjsKICAgIGRyYWdEcm9wSGFuZGxlcjsKICAgIGhpc3Rvcnk7CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICB3eXNpd3lnU3R5bGVzCiAgICBdOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIHRoaXMuYmxvY2tPcGVyYXRpb25zID0gbmV3IFd5c2l3eWdCbG9ja09wZXJhdGlvbnModGhpcyk7CiAgICAgIHRoaXMuaW5wdXRIYW5kbGVyID0gbmV3IFd5c2l3eWdJbnB1dEhhbmRsZXIodGhpcyk7CiAgICAgIHRoaXMua2V5Ym9hcmRIYW5kbGVyID0gbmV3IFd5c2l3eWdLZXlib2FyZEhhbmRsZXIodGhpcyk7CiAgICAgIHRoaXMuZHJhZ0Ryb3BIYW5kbGVyID0gbmV3IFd5c2l3eWdEcmFnRHJvcEhhbmRsZXIodGhpcyk7CiAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBXeXNpd3lnSGlzdG9yeSgpOwogICAgfQogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy5pbnB1dEhhbmRsZXI/LmRlc3Ryb3koKTsKICAgICAgaWYgKHRoaXMuYmx1clRpbWVvdXQpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZW91dCk7CiAgICAgICAgdGhpcy5ibHVyVGltZW91dCA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS50cmltKCkubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IHBhcnNlZEJsb2NrcyA9IHRoaXMub3V0cHV0Rm9ybWF0ID09PSAiaHRtbCIgPyBXeXNpd3lnQ29udmVydGVycy5wYXJzZUh0bWxUb0Jsb2Nrcyh0aGlzLnZhbHVlKSA6IFd5c2l3eWdDb252ZXJ0ZXJzLnBhcnNlTWFya2Rvd25Ub0Jsb2Nrcyh0aGlzLnZhbHVlKTsKICAgICAgICBpZiAocGFyc2VkQmxvY2tzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHRoaXMuYmxvY2tzID0gcGFyc2VkQmxvY2tzOwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgIHRoaXMuZWRpdG9yQ29udGVudFJlZiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLWNvbnRlbnQiKTsKICAgICAgaWYgKHRoaXMuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgIHRoaXMuZWRpdG9yQ29udGVudFJlZi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHRoaXMuaGFuZGxlRWRpdG9yQ2xpY2soZTExKSk7CiAgICAgIH0KICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibG9jay10ZXh0LXNlbGVjdGVkIiwgKGUxMSkgPT4gewogICAgICAgIGlmICghdGhpcy5zbGFzaE1lbnUudmlzaWJsZSAmJiBlMTEuZGV0YWlsLmhhc1NlbGVjdGlvbiAmJiBlMTEuZGV0YWlsLnRleHQubGVuZ3RoID4gMCkgewogICAgICAgICAgdGhpcy5zZWxlY3RlZFRleHQgPSBlMTEuZGV0YWlsLnRleHQ7CiAgICAgICAgICBpZiAoZTExLmRldGFpbC5yZWN0KSB7CiAgICAgICAgICAgIGNvbnN0IGNvb3JkcyA9IHsKICAgICAgICAgICAgICB4OiBlMTEuZGV0YWlsLnJlY3QubGVmdCArIGUxMS5kZXRhaWwucmVjdC53aWR0aCAvIDIsCiAgICAgICAgICAgICAgeTogTWF0aC5tYXgoNDUsIGUxMS5kZXRhaWwucmVjdC50b3AgLSA0NSkKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5mb3JtYXR0aW5nTWVudS5zaG93KGNvb3JkcywgYXN5bmMgKGNvbW1hbmQpID0+IGF3YWl0IHRoaXMuYXBwbHlGb3JtYXQoY29tbWFuZCkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCBmb3JtYXR0aW5nTWVudUVsZW1lbnQgPSB0aGlzLmZvcm1hdHRpbmdNZW51LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5mb3JtYXR0aW5nLW1lbnUiKTsKICAgICAgICBpZiAoZm9ybWF0dGluZ01lbnVFbGVtZW50ICYmIGZvcm1hdHRpbmdNZW51RWxlbWVudC5jb250YWlucyhlMTEudGFyZ2V0KSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24udG9TdHJpbmcoKS50cmltKCkubGVuZ3RoID4gMCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5mb3JtYXR0aW5nTWVudS52aXNpYmxlKSB7CiAgICAgICAgICB0aGlzLmhpZGVGb3JtYXR0aW5nTWVudSgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCB0YXJnZXQgPSBlMTEudGFyZ2V0OwogICAgICAgIGlmICghdGhpcy5jb250YWlucyh0YXJnZXQpICYmICF0aGlzLnNoYWRvd1Jvb3Q/LmNvbnRhaW5zKHRhcmdldCkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKChlMTEubWV0YUtleSB8fCBlMTEuY3RybEtleSkgJiYgIWUxMS5zaGlmdEtleSAmJiBlMTEua2V5ID09PSAieiIpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy51bmRvKCk7CiAgICAgICAgfSBlbHNlIGlmICgoZTExLm1ldGFLZXkgfHwgZTExLmN0cmxLZXkpICYmIGUxMS5zaGlmdEtleSAmJiBlMTEua2V5ID09PSAieiIpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5yZWRvKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5oaXN0b3J5LnNhdmVTdGF0ZSh0aGlzLmJsb2NrcywgdGhpcy5zZWxlY3RlZEJsb2NrSWQpOwogICAgICB0aGlzLnJlbmRlckJsb2Nrc1Byb2dyYW1tYXRpY2FsbHkoKTsKICAgIH0KICAgIC8qKgogICAgICogUmVuZGVycyBhbGwgYmxvY2tzIHByb2dyYW1tYXRpY2FsbHkgd2l0aG91dCB0cmlnZ2VyaW5nIHJlLXJlbmRlcnMKICAgICAqLwogICAgcmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpIHsKICAgICAgaWYgKCF0aGlzLmVkaXRvckNvbnRlbnRSZWYpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmVkaXRvckNvbnRlbnRSZWYuaW5uZXJIVE1MID0gIiI7CiAgICAgIHRoaXMuYmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7CiAgICAgICAgY29uc3QgYmxvY2tXcmFwcGVyID0gdGhpcy5jcmVhdGVCbG9ja0VsZW1lbnQoYmxvY2spOwogICAgICAgIHRoaXMuZWRpdG9yQ29udGVudFJlZi5hcHBlbmRDaGlsZChibG9ja1dyYXBwZXIpOwogICAgICB9KTsKICAgIH0KICAgIC8qKgogICAgICogQ3JlYXRlcyBhIGJsb2NrIGVsZW1lbnQgcHJvZ3JhbW1hdGljYWxseQogICAgICovCiAgICBjcmVhdGVCbG9ja0VsZW1lbnQoYmxvY2spIHsKICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9ICJibG9jay13cmFwcGVyIjsKICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiLCBibG9jay5pZCk7CiAgICAgIGlmIChibG9jay50eXBlICE9PSAiZGl2aWRlciIpIHsKICAgICAgICBjb25zdCBkcmFnSGFuZGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgZHJhZ0hhbmRsZS5jbGFzc05hbWUgPSAiZHJhZy1oYW5kbGUiOwogICAgICAgIGRyYWdIYW5kbGUuZHJhZ2dhYmxlID0gdHJ1ZTsKICAgICAgICBkcmFnSGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsIChlMTEpID0+IHRoaXMuZHJhZ0Ryb3BIYW5kbGVyLmhhbmRsZURyYWdTdGFydChlMTEsIGJsb2NrKSk7CiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChkcmFnSGFuZGxlKTsKICAgICAgfQogICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICBibG9ja0NvbXBvbmVudC5ibG9jayA9IGJsb2NrOwogICAgICBibG9ja0NvbXBvbmVudC5pc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEJsb2NrSWQgPT09IGJsb2NrLmlkOwogICAgICBibG9ja0NvbXBvbmVudC53eXNpd3lnQ29tcG9uZW50ID0gdGhpczsKICAgICAgYmxvY2tDb21wb25lbnQuaGFuZGxlcnMgPSB7CiAgICAgICAgb25JbnB1dDogKGUxMSkgPT4gdGhpcy5pbnB1dEhhbmRsZXIuaGFuZGxlQmxvY2tJbnB1dChlMTEsIGJsb2NrKSwKICAgICAgICBvbktleURvd246IChlMTEpID0+IHRoaXMua2V5Ym9hcmRIYW5kbGVyLmhhbmRsZUJsb2NrS2V5RG93bihlMTEsIGJsb2NrKSwKICAgICAgICBvbkZvY3VzOiAoKSA9PiB0aGlzLmhhbmRsZUJsb2NrRm9jdXMoYmxvY2spLAogICAgICAgIG9uQmx1cjogKCkgPT4gdGhpcy5oYW5kbGVCbG9ja0JsdXIoYmxvY2spLAogICAgICAgIG9uQ29tcG9zaXRpb25TdGFydDogKCkgPT4gdGhpcy5pc0NvbXBvc2luZyA9IHRydWUsCiAgICAgICAgb25Db21wb3NpdGlvbkVuZDogKCkgPT4gdGhpcy5pc0NvbXBvc2luZyA9IGZhbHNlLAogICAgICAgIG9uTW91c2VVcDogKGUxMSkgPT4gdGhpcy5oYW5kbGVUZXh0U2VsZWN0aW9uKGUxMSksCiAgICAgICAgb25SZXF1ZXN0VXBkYXRlOiAoKSA9PiB0aGlzLnVwZGF0ZUJsb2NrRWxlbWVudChibG9jay5pZCkKICAgICAgfTsKICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChibG9ja0NvbXBvbmVudCk7CiAgICAgIHdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCAoZTExKSA9PiB0aGlzLmRyYWdEcm9wSGFuZGxlci5oYW5kbGVEcmFnT3ZlcihlMTEsIGJsb2NrKSk7CiAgICAgIHdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsIChlMTEpID0+IHRoaXMuZHJhZ0Ryb3BIYW5kbGVyLmhhbmRsZURyb3AoZTExLCBibG9jaykpOwogICAgICB3cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdsZWF2ZSIsICgpID0+IHRoaXMuZHJhZ0Ryb3BIYW5kbGVyLmhhbmRsZURyYWdMZWF2ZShibG9jaykpOwogICAgICByZXR1cm4gd3JhcHBlcjsKICAgIH0KICAgIC8qKgogICAgICogVXBkYXRlcyBhIHNwZWNpZmljIGJsb2NrIGVsZW1lbnQKICAgICAqLwogICAgdXBkYXRlQmxvY2tFbGVtZW50KGJsb2NrSWQpIHsKICAgICAgY29uc3QgYmxvY2sgPSB0aGlzLmJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IGJsb2NrSWQpOwogICAgICBpZiAoIWJsb2NrKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtibG9ja0lkfSJdYCk7CiAgICAgIGlmICghd3JhcHBlcikKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5ld1dyYXBwZXIgPSB0aGlzLmNyZWF0ZUJsb2NrRWxlbWVudChibG9jayk7CiAgICAgIHdyYXBwZXIucmVwbGFjZVdpdGgobmV3V3JhcHBlcik7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiB1M2AKICAgICAgPGRlZXMtbGFiZWwKICAgICAgICAubGFiZWw9IiR7dGhpcy5sYWJlbH0iCiAgICAgICAgLmRlc2NyaXB0aW9uPSIke3RoaXMuZGVzY3JpcHRpb259IgogICAgICAgIC5yZXF1aXJlZD0iJHt0aGlzLnJlcXVpcmVkfSIKICAgICAgPjwvZGVlcy1sYWJlbD4KICAgICAgPGRpdiBjbGFzcz0id3lzaXd5Zy1jb250YWluZXIiPgogICAgICAgIDxkaXYgCiAgICAgICAgICBjbGFzcz0iZWRpdG9yLWNvbnRlbnQgJHt0aGlzLmRyYWdnZWRCbG9ja0lkID8gImRyYWdnaW5nIiA6ICIifSIKICAgICAgICAgIGlkPSJlZGl0b3ItY29udGVudCIKICAgICAgICA+CiAgICAgICAgICA8IS0tIEJsb2NrcyB3aWxsIGJlIHJlbmRlcmVkIHByb2dyYW1tYXRpY2FsbHkgLS0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIC8vIE9sZCByZW5kZXJCbG9jayBtZXRob2QgcmVtb3ZlZCAtIHVzaW5nIHByb2dyYW1tYXRpYyByZW5kZXJpbmcgaW5zdGVhZAogICAgaGFuZGxlU2xhc2hNZW51S2V5Ym9hcmQoZTExKSB7CiAgICAgIHN3aXRjaCAoZTExLmtleSkgewogICAgICAgIGNhc2UgIkFycm93RG93biI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuc2xhc2hNZW51Lm5hdmlnYXRlKCJkb3duIik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJBcnJvd1VwIjoKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5zbGFzaE1lbnUubmF2aWdhdGUoInVwIik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJFbnRlciI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuc2xhc2hNZW51LnNlbGVjdEN1cnJlbnQoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkVzY2FwZSI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuY2xvc2VTbGFzaE1lbnUodHJ1ZSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgY2xvc2VTbGFzaE1lbnUoY2xlYXJTbGFzaCA9IGZhbHNlKSB7CiAgICAgIGlmIChjbGVhclNsYXNoICYmIHRoaXMuc2VsZWN0ZWRCbG9ja0lkKSB7CiAgICAgICAgY29uc3QgY3VycmVudEJsb2NrID0gdGhpcy5ibG9ja3MuZmluZCgoYjUpID0+IGI1LmlkID09PSB0aGlzLnNlbGVjdGVkQmxvY2tJZCk7CiAgICAgICAgaWYgKGN1cnJlbnRCbG9jaykgewogICAgICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7Y3VycmVudEJsb2NrLmlkfSJdYCk7CiAgICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgICAgICAgIGlmIChibG9ja0NvbXBvbmVudCkgewogICAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQoKTsKICAgICAgICAgICAgaWYgKGNvbnRlbnQzLnN0YXJ0c1dpdGgoIi8iKSkgewogICAgICAgICAgICAgIGNvbnN0IGNsZWFuQ29udGVudCA9IGNvbnRlbnQzLnJlcGxhY2UoL15cL1teXHNdKlxzKi8sICIiKS50cmltKCk7CiAgICAgICAgICAgICAgYmxvY2tDb21wb25lbnQuc2V0Q29udGVudChjbGVhbkNvbnRlbnQpOwogICAgICAgICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gY2xlYW5Db250ZW50OwogICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgICAgICBibG9ja0NvbXBvbmVudC5mb2N1c1dpdGhDdXJzb3IoMCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5zbGFzaE1lbnUuaGlkZSgpOwogICAgfQogICAgaGFuZGxlQmxvY2tGb2N1cyhibG9jaykgewogICAgICBpZiAodGhpcy5ibHVyVGltZW91dCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmJsdXJUaW1lb3V0KTsKICAgICAgICB0aGlzLmJsdXJUaW1lb3V0ID0gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBwcmV2U2VsZWN0ZWRJZCA9IHRoaXMuc2VsZWN0ZWRCbG9ja0lkOwogICAgICB0aGlzLnNlbGVjdGVkQmxvY2tJZCA9IGJsb2NrLmlkOwogICAgICBpZiAocHJldlNlbGVjdGVkSWQgIT09IGJsb2NrLmlkKSB7CiAgICAgICAgaWYgKHByZXZTZWxlY3RlZElkKSB7CiAgICAgICAgICBjb25zdCBwcmV2V3JhcHBlciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7cHJldlNlbGVjdGVkSWR9Il1gKTsKICAgICAgICAgIGNvbnN0IHByZXZCbG9ja0NvbXBvbmVudCA9IHByZXZXcmFwcGVyPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgICAgICAgIGlmIChwcmV2QmxvY2tDb21wb25lbnQpIHsKICAgICAgICAgICAgcHJldkJsb2NrQ29tcG9uZW50LmlzU2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmIChibG9ja0NvbXBvbmVudCkgewogICAgICAgICAgYmxvY2tDb21wb25lbnQuaXNTZWxlY3RlZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBibHVyVGltZW91dCA9IG51bGw7CiAgICBoYW5kbGVCbG9ja0JsdXIoYmxvY2spIHsKICAgICAgaWYgKHRoaXMuYmx1clRpbWVvdXQpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZW91dCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuc2xhc2hNZW51LnZpc2libGUpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICAgIGNvbnN0IGJsb2NrQ29tcG9uZW50ID0gd3JhcHBlckVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICBpZiAoYmxvY2tDb21wb25lbnQgJiYgYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCkgewogICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCk7CiAgICAgICAgaWYgKGJsb2NrLmNvbnRlbnQgIT09IG5ld0NvbnRlbnQpIHsKICAgICAgICAgIGJsb2NrLmNvbnRlbnQgPSBuZXdDb250ZW50OwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLmJsdXJUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudDsKICAgICAgICBjb25zdCBpc0Jsb2NrRm9jdXNlZCA9IGFjdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5jb250YWlucygiYmxvY2siKTsKICAgICAgICBpZiAoIWlzQmxvY2tGb2N1c2VkKSB7CiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgICAgfQogICAgICB9LCAxMDApOwogICAgfQogICAgaGFuZGxlRWRpdG9yQ2xpY2soZTExKSB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGUxMS50YXJnZXQ7CiAgICAgIGlmICh0aGlzLnNsYXNoTWVudS52aXNpYmxlKSB7CiAgICAgICAgdGhpcy5jbG9zZVNsYXNoTWVudSh0cnVlKTsKICAgICAgfQogICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiZWRpdG9yLWNvbnRlbnQiKSkgewogICAgICAgIGNvbnN0IGxhc3RCbG9jayA9IHRoaXMuYmxvY2tzW3RoaXMuYmxvY2tzLmxlbmd0aCAtIDFdOwogICAgICAgIHRoaXMuYmxvY2tPcGVyYXRpb25zLmZvY3VzQmxvY2sobGFzdEJsb2NrLmlkLCBsYXN0QmxvY2sudHlwZSA9PT0gImRpdmlkZXIiIHx8IGxhc3RCbG9jay50eXBlID09PSAiaW1hZ2UiID8gdm9pZCAwIDogImVuZCIpOwogICAgICB9CiAgICB9CiAgICBjcmVhdGVOZXdCbG9jayh0eXBlNSA9ICJwYXJhZ3JhcGgiLCBjb250ZW50MyA9ICIiLCBtZXRhZGF0YSkgewogICAgICByZXR1cm4gewogICAgICAgIGlkOiBXeXNpd3lnU2hvcnRjdXRzLmdlbmVyYXRlQmxvY2tJZCgpLAogICAgICAgIHR5cGU6IHR5cGU1LAogICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICAgIC4uLm1ldGFkYXRhICYmIHsgbWV0YWRhdGEgfQogICAgICB9OwogICAgfQogICAgYXN5bmMgaW5zZXJ0QmxvY2tBZnRlcihhZnRlckJsb2NrLCBuZXdCbG9jaywgZm9jdXNOZXdCbG9jayA9IHRydWUpIHsKICAgICAgY29uc3QgYmxvY2tJbmRleCA9IHRoaXMuYmxvY2tzLmZpbmRJbmRleCgoYjUpID0+IGI1LmlkID09PSBhZnRlckJsb2NrLmlkKTsKICAgICAgdGhpcy5ibG9ja3MgPSBbLi4udGhpcy5ibG9ja3Muc2xpY2UoMCwgYmxvY2tJbmRleCArIDEpLCBuZXdCbG9jaywgLi4udGhpcy5ibG9ja3Muc2xpY2UoYmxvY2tJbmRleCArIDEpXTsKICAgICAgY29uc3QgYWZ0ZXJXcmFwcGVyID0gdGhpcy5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2FmdGVyQmxvY2suaWR9Il1gKTsKICAgICAgaWYgKGFmdGVyV3JhcHBlcikgewogICAgICAgIGNvbnN0IG5ld1dyYXBwZXIgPSB0aGlzLmNyZWF0ZUJsb2NrRWxlbWVudChuZXdCbG9jayk7CiAgICAgICAgYWZ0ZXJXcmFwcGVyLmluc2VydEFkamFjZW50RWxlbWVudCgiYWZ0ZXJlbmQiLCBuZXdXcmFwcGVyKTsKICAgICAgfQogICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgIGlmIChmb2N1c05ld0Jsb2NrICYmIG5ld0Jsb2NrLnR5cGUgIT09ICJkaXZpZGVyIikgewogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gc2V0VGltZW91dChyZXNvbHZlMiwgMCkpOwogICAgICAgIGF3YWl0IHRoaXMuYmxvY2tPcGVyYXRpb25zLmZvY3VzQmxvY2sobmV3QmxvY2suaWQsICJzdGFydCIpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBpbnNlcnRCbG9jayh0eXBlNSkgewogICAgICBjb25zdCBjdXJyZW50QmxvY2sgPSB0aGlzLmJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IHRoaXMuc2VsZWN0ZWRCbG9ja0lkKTsKICAgICAgaWYgKCFjdXJyZW50QmxvY2spIHsKICAgICAgICB0aGlzLmNsb3NlU2xhc2hNZW51KCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2N1cnJlbnRCbG9jay5pZH0iXWApOwogICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgICAgaWYgKGJsb2NrQ29tcG9uZW50KSB7CiAgICAgICAgY29uc3QgY29udGVudDMgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCk7CiAgICAgICAgaWYgKGNvbnRlbnQzLnN0YXJ0c1dpdGgoIi8iKSkgewogICAgICAgICAgY29uc3QgY2xlYW5Db250ZW50ID0gY29udGVudDMucmVwbGFjZSgvXlwvW15cc10qXHMqLywgIiIpLnRyaW0oKTsKICAgICAgICAgIGJsb2NrQ29tcG9uZW50LnNldENvbnRlbnQoY2xlYW5Db250ZW50KTsKICAgICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gY2xlYW5Db250ZW50OwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLmNsb3NlU2xhc2hNZW51KGZhbHNlKTsKICAgICAgaWYgKHR5cGU1ID09PSAiY29kZSIpIHsKICAgICAgICBjdXJyZW50QmxvY2subWV0YWRhdGEgPSB7IGxhbmd1YWdlOiAidHlwZXNjcmlwdCIgfTsKICAgICAgfQogICAgICBjdXJyZW50QmxvY2sudHlwZSA9IHR5cGU1OwogICAgICBjdXJyZW50QmxvY2suY29udGVudCA9IGN1cnJlbnRCbG9jay5jb250ZW50IHx8ICIiOwogICAgICBpZiAodHlwZTUgPT09ICJkaXZpZGVyIikgewogICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gIiAiOwogICAgICAgIGNvbnN0IG5ld0Jsb2NrID0gdGhpcy5jcmVhdGVOZXdCbG9jaygpOwogICAgICAgIHRoaXMuaW5zZXJ0QmxvY2tBZnRlcihjdXJyZW50QmxvY2ssIG5ld0Jsb2NrKTsKICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gImxpc3QiKSB7CiAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyBsaXN0VHlwZTogImJ1bGxldCIgfTsKICAgICAgICBjdXJyZW50QmxvY2suY29udGVudCA9ICIiOwogICAgICB9IGVsc2UgaWYgKHR5cGU1ID09PSAiaW1hZ2UiKSB7CiAgICAgICAgY3VycmVudEJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICBjdXJyZW50QmxvY2subWV0YWRhdGEgPSB7IHVybDogIiIsIGxvYWRpbmc6IGZhbHNlIH07CiAgICAgIH0gZWxzZSBpZiAodHlwZTUgPT09ICJ5b3V0dWJlIikgewogICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gIiI7CiAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyB2aWRlb0lkOiAiIiwgdXJsOiAiIiB9OwogICAgICB9IGVsc2UgaWYgKHR5cGU1ID09PSAibWFya2Rvd24iKSB7CiAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyBzaG93UHJldmlldzogZmFsc2UgfTsKICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gImh0bWwiKSB7CiAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyBzaG93UHJldmlldzogZmFsc2UgfTsKICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gImF0dGFjaG1lbnQiKSB7CiAgICAgICAgY3VycmVudEJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICBjdXJyZW50QmxvY2subWV0YWRhdGEgPSB7IGZpbGVzOiBbXSB9OwogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gY3VycmVudEJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICAgIH0KICAgICAgdGhpcy51cGRhdGVCbG9ja0VsZW1lbnQoY3VycmVudEJsb2NrLmlkKTsKICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDApKTsKICAgICAgaWYgKHR5cGU1ID09PSAibGlzdCIpIHsKICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGN1cnJlbnRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7Y3VycmVudEJsb2NrLmlkfSJdYCk7CiAgICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudDIgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50MikgewogICAgICAgICAgICBibG9ja0NvbXBvbmVudDIuZm9jdXNMaXN0SXRlbSgpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKHR5cGU1ICE9PSAiZGl2aWRlciIgJiYgdHlwZTUgIT09ICJpbWFnZSIgJiYgdHlwZTUgIT09ICJ5b3V0dWJlIiAmJiB0eXBlNSAhPT0gIm1hcmtkb3duIiAmJiB0eXBlNSAhPT0gImh0bWwiICYmIHR5cGU1ICE9PSAiYXR0YWNobWVudCIpIHsKICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGN1cnJlbnRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgIH0gZWxzZSBpZiAodHlwZTUgPT09ICJpbWFnZSIgfHwgdHlwZTUgPT09ICJ5b3V0dWJlIiB8fCB0eXBlNSA9PT0gIm1hcmtkb3duIiB8fCB0eXBlNSA9PT0gImh0bWwiIHx8IHR5cGU1ID09PSAiYXR0YWNobWVudCIpIHsKICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGN1cnJlbnRCbG9jay5pZCk7CiAgICAgIH0KICAgIH0KICAgIHVwZGF0ZVZhbHVlKCkgewogICAgICBpZiAodGhpcy5vdXRwdXRGb3JtYXQgPT09ICJodG1sIikgewogICAgICAgIHRoaXMudmFsdWUgPSBXeXNpd3lnQ29udmVydGVycy5nZXRIdG1sT3V0cHV0KHRoaXMuYmxvY2tzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnZhbHVlID0gV3lzaXd5Z0NvbnZlcnRlcnMuZ2V0TWFya2Rvd25PdXRwdXQodGhpcy5ibG9ja3MpOwogICAgICB9CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMudmFsdWUpOwogICAgICB0aGlzLnNhdmVUb0hpc3RvcnkodHJ1ZSk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgICAgaWYgKHRoaXMub3V0cHV0Rm9ybWF0ID09PSAiaHRtbCIpIHsKICAgICAgICB0aGlzLmJsb2NrcyA9IFd5c2l3eWdDb252ZXJ0ZXJzLnBhcnNlSHRtbFRvQmxvY2tzKHZhbHVlMik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5ibG9ja3MgPSBXeXNpd3lnQ29udmVydGVycy5wYXJzZU1hcmtkb3duVG9CbG9ja3ModmFsdWUyKTsKICAgICAgfQogICAgICBpZiAodGhpcy5ibG9ja3MubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy5ibG9ja3MgPSBbewogICAgICAgICAgaWQ6IFd5c2l3eWdTaG9ydGN1dHMuZ2VuZXJhdGVCbG9ja0lkKCksCiAgICAgICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgICAgIGNvbnRlbnQ6ICIiCiAgICAgICAgfV07CiAgICAgIH0KICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcy52YWx1ZSk7CiAgICAgIGlmICh0aGlzLmVkaXRvckNvbnRlbnRSZWYpIHsKICAgICAgICB0aGlzLnJlbmRlckJsb2Nrc1Byb2dyYW1tYXRpY2FsbHkoKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBFeHBvcnQgdGhlIGVkaXRvciBjb250ZW50IGFzIHJhdyBibG9ja3MgKGxvc3NsZXNzKQogICAgICovCiAgICBleHBvcnRCbG9ja3MoKSB7CiAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuYmxvY2tzKSk7CiAgICB9CiAgICAvKioKICAgICAqIEltcG9ydCByYXcgYmxvY2tzIChsb3NzbGVzcykKICAgICAqLwogICAgaW1wb3J0QmxvY2tzKGJsb2NrcykgewogICAgICB0aGlzLmJsb2NrcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYmxvY2tzKSk7CiAgICAgIHRoaXMudXBkYXRlVmFsdWUoKTsKICAgICAgaWYgKHRoaXMuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgIHRoaXMucmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEV4cG9ydCBjb250ZW50IGFzIEhUTUwgcmVnYXJkbGVzcyBvZiBvdXRwdXRGb3JtYXQgc2V0dGluZwogICAgICovCiAgICBleHBvcnRBc0h0bWwoKSB7CiAgICAgIHJldHVybiBXeXNpd3lnQ29udmVydGVycy5nZXRIdG1sT3V0cHV0KHRoaXMuYmxvY2tzKTsKICAgIH0KICAgIC8qKgogICAgICogRXhwb3J0IGNvbnRlbnQgYXMgTWFya2Rvd24gcmVnYXJkbGVzcyBvZiBvdXRwdXRGb3JtYXQgc2V0dGluZwogICAgICovCiAgICBleHBvcnRBc01hcmtkb3duKCkgewogICAgICByZXR1cm4gV3lzaXd5Z0NvbnZlcnRlcnMuZ2V0TWFya2Rvd25PdXRwdXQodGhpcy5ibG9ja3MpOwogICAgfQogICAgLyoqCiAgICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlZGl0b3Igc3RhdGUgKGZvciBzYXZpbmcpCiAgICAgKi8KICAgIGV4cG9ydFN0YXRlKCkgewogICAgICByZXR1cm4gewogICAgICAgIGJsb2NrczogdGhpcy5leHBvcnRCbG9ja3MoKSwKICAgICAgICBvdXRwdXRGb3JtYXQ6IHRoaXMub3V0cHV0Rm9ybWF0CiAgICAgIH07CiAgICB9CiAgICAvKioKICAgICAqIFJlc3RvcmUgZWRpdG9yIHN0YXRlIGZyb20gSlNPTgogICAgICovCiAgICBpbXBvcnRTdGF0ZShzdGF0ZTE0KSB7CiAgICAgIGlmIChzdGF0ZTE0Lm91dHB1dEZvcm1hdCkgewogICAgICAgIHRoaXMub3V0cHV0Rm9ybWF0ID0gc3RhdGUxNC5vdXRwdXRGb3JtYXQ7CiAgICAgIH0KICAgICAgdGhpcy5pbXBvcnRCbG9ja3Moc3RhdGUxNC5ibG9ja3MpOwogICAgfQogICAgaGFuZGxlRHJhZ0VuZCgpIHsKICAgICAgaWYgKHRoaXMuZHJhZ2dlZEJsb2NrSWQpIHsKICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3RoaXMuZHJhZ2dlZEJsb2NrSWR9Il1gKTsKICAgICAgICBpZiAod3JhcHBlcikgewogICAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBhbGxXcmFwcGVycyA9IHRoaXMuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpOwogICAgICBhbGxXcmFwcGVycy5mb3JFYWNoKCh3cmFwcGVyKSA9PiB7CiAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnLW92ZXItYmVmb3JlIiwgImRyYWctb3Zlci1hZnRlciIpOwogICAgICB9KTsKICAgICAgdGhpcy5lZGl0b3JDb250ZW50UmVmLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIik7CiAgICAgIHRoaXMuZHJhZ2dlZEJsb2NrSWQgPSBudWxsOwogICAgICB0aGlzLmRyYWdPdmVyQmxvY2tJZCA9IG51bGw7CiAgICAgIHRoaXMuZHJhZ092ZXJQb3NpdGlvbiA9IG51bGw7CiAgICB9CiAgICBoYW5kbGVEcm9wKGUxMSwgdGFyZ2V0QmxvY2spIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGlmICghdGhpcy5kcmFnZ2VkQmxvY2tJZCB8fCB0aGlzLmRyYWdnZWRCbG9ja0lkID09PSB0YXJnZXRCbG9jay5pZCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGRyYWdnZWRJbmRleCA9IHRoaXMuYmxvY2tzLmZpbmRJbmRleCgoYjUpID0+IGI1LmlkID09PSB0aGlzLmRyYWdnZWRCbG9ja0lkKTsKICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSB0aGlzLmJsb2Nrcy5maW5kSW5kZXgoKGI1KSA9PiBiNS5pZCA9PT0gdGFyZ2V0QmxvY2suaWQpOwogICAgICBpZiAoZHJhZ2dlZEluZGV4ID09PSAtMSB8fCB0YXJnZXRJbmRleCA9PT0gLTEpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBbZHJhZ2dlZEJsb2NrXSA9IHRoaXMuYmxvY2tzLnNwbGljZShkcmFnZ2VkSW5kZXgsIDEpOwogICAgICBsZXQgbmV3SW5kZXggPSB0YXJnZXRJbmRleDsKICAgICAgaWYgKHRoaXMuZHJhZ092ZXJQb3NpdGlvbiA9PT0gImFmdGVyIikgewogICAgICAgIG5ld0luZGV4ID0gZHJhZ2dlZEluZGV4IDwgdGFyZ2V0SW5kZXggPyB0YXJnZXRJbmRleCA6IHRhcmdldEluZGV4ICsgMTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuZXdJbmRleCA9IGRyYWdnZWRJbmRleCA8IHRhcmdldEluZGV4ID8gdGFyZ2V0SW5kZXggLSAxIDogdGFyZ2V0SW5kZXg7CiAgICAgIH0KICAgICAgdGhpcy5ibG9ja3Muc3BsaWNlKG5ld0luZGV4LCAwLCBkcmFnZ2VkQmxvY2spOwogICAgICB0aGlzLnJlbmRlckJsb2Nrc1Byb2dyYW1tYXRpY2FsbHkoKTsKICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpOwogICAgICB0aGlzLmhhbmRsZURyYWdFbmQoKTsKICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgY29uc3QgbW92ZWRCbG9ja0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7ZHJhZ2dlZEJsb2NrLmlkfSJdIC5ibG9ja2ApOwogICAgICAgIGlmIChtb3ZlZEJsb2NrRWxlbWVudCAmJiBkcmFnZ2VkQmxvY2sudHlwZSAhPT0gImRpdmlkZXIiKSB7CiAgICAgICAgICBtb3ZlZEJsb2NrRWxlbWVudC5mb2N1cygpOwogICAgICAgIH0KICAgICAgfSwgMTAwKTsKICAgIH0KICAgIGhhbmRsZVRleHRTZWxlY3Rpb24oX2UpIHsKICAgICAgaWYgKHRoaXMuc2xhc2hNZW51LnZpc2libGUpCiAgICAgICAgcmV0dXJuOwogICAgfQogICAgdXBkYXRlRm9ybWF0dGluZ01lbnVQb3NpdGlvbigpIHsKICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgaWYgKHRoaXMuc2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKHRoaXMuc2hhZG93Um9vdCk7CiAgICAgIGNvbnN0IGJsb2NrV3JhcHBlcnMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5ibG9jay13cmFwcGVyIik7CiAgICAgIGJsb2NrV3JhcHBlcnM/LmZvckVhY2goKHdyYXBwZXIpID0+IHsKICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXIucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50Py5zaGFkb3dSb290KSB7CiAgICAgICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGNvbnN0IGNvb3JkcyA9IFd5c2l3eWdGb3JtYXR0aW5nLmdldFNlbGVjdGlvbkNvb3JkaW5hdGVzKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgaWYgKGNvb3JkcykgewogICAgICAgIHRoaXMuZm9ybWF0dGluZ01lbnUuc2hvdyh7IHg6IGNvb3Jkcy54LCB5OiBjb29yZHMueSB9LCBhc3luYyAoY29tbWFuZCkgPT4gYXdhaXQgdGhpcy5hcHBseUZvcm1hdChjb21tYW5kKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgIH0KICAgIH0KICAgIGhpZGVGb3JtYXR0aW5nTWVudSgpIHsKICAgICAgdGhpcy5mb3JtYXR0aW5nTWVudS5oaWRlKCk7CiAgICAgIHRoaXMuc2VsZWN0ZWRUZXh0ID0gIiI7CiAgICB9CiAgICBhc3luYyBhcHBseUZvcm1hdChjb21tYW5kKSB7CiAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QpCiAgICAgICAgc2hhZG93Um9vdHMucHVzaCh0aGlzLnNoYWRvd1Jvb3QpOwogICAgICBjb25zdCBibG9ja1dyYXBwZXJzID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpOwogICAgICBibG9ja1dyYXBwZXJzPy5mb3JFYWNoKCh3cmFwcGVyKSA9PiB7CiAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmIChibG9ja0NvbXBvbmVudD8uc2hhZG93Um9vdCkgewogICAgICAgICAgc2hhZG93Um9vdHMucHVzaChibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKQogICAgICAgIHJldHVybjsKICAgICAgbGV0IHRhcmdldEJsb2NrOwogICAgICBsZXQgdGFyZ2V0QmxvY2tDb21wb25lbnQ7CiAgICAgIGNvbnN0IHdyYXBwZXJzID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5ibG9jay13cmFwcGVyIik7CiAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHdyYXBwZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICBjb25zdCB3cmFwcGVyID0gd3JhcHBlcnNbaTExXTsKICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXIucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50Py5zaGFkb3dSb290KSB7CiAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgICBpZiAoYmxvY2sgJiYgKGJsb2NrLmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpIHx8IGJsb2NrLmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uZW5kQ29udGFpbmVyKSkpIHsKICAgICAgICAgICAgY29uc3QgYmxvY2tJZCA9IHdyYXBwZXIuZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik7CiAgICAgICAgICAgIHRhcmdldEJsb2NrID0gdGhpcy5ibG9ja3MuZmluZCgoYjUpID0+IGI1LmlkID09PSBibG9ja0lkKTsKICAgICAgICAgICAgdGFyZ2V0QmxvY2tDb21wb25lbnQgPSBibG9ja0NvbXBvbmVudDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghdGFyZ2V0QmxvY2sgfHwgIXRhcmdldEJsb2NrQ29tcG9uZW50KQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgcmFuZ2UyID0gV3lzaXd5Z1NlbGVjdGlvbi5jcmVhdGVSYW5nZUZyb21JbmZvKHNlbGVjdGlvbkluZm8pOwogICAgICBpZiAoY29tbWFuZCA9PT0gImxpbmsiKSB7CiAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgdGhpcy5zaG93TGlua0RpYWxvZygpOwogICAgICAgIGlmICghdXJsKSB7CiAgICAgICAgICB0YXJnZXRCbG9ja0NvbXBvbmVudC5mb2N1cygpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBXeXNpd3lnRm9ybWF0dGluZy5hcHBseUZvcm1hdChjb21tYW5kLCB1cmwsIHJhbmdlMiwgc2hhZG93Um9vdHMpOwogICAgICB9IGVsc2UgewogICAgICAgIFd5c2l3eWdGb3JtYXR0aW5nLmFwcGx5Rm9ybWF0KGNvbW1hbmQsIHZvaWQgMCwgcmFuZ2UyLCBzaGFkb3dSb290cyk7CiAgICAgIH0KICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCAxMCkpOwogICAgICB0YXJnZXRCbG9jay5jb250ZW50ID0gdGFyZ2V0QmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpOwogICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgIHRhcmdldEJsb2NrQ29tcG9uZW50LmZvY3VzKCk7CiAgICAgIGlmIChjb21tYW5kID09PSAibGluayIpIHsKICAgICAgICB0aGlzLmhpZGVGb3JtYXR0aW5nTWVudSgpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHNob3dMaW5rRGlhbG9nKCkgewogICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiB7CiAgICAgICAgbGV0IGxpbmtVcmwgPSBudWxsOwogICAgICAgIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICAgIGhlYWRpbmc6ICJBZGQgTGluayIsCiAgICAgICAgICBjb250ZW50OiB1M2AKICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgLmxpbmstaW5wdXQgewogICAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWRlZXMtY29sb3ItbGluZS1icmlnaHQpOwogICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kZWVzLWNvbG9yLWlucHV0KTsKICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tZGVlcy1jb2xvci10ZXh0KTsKICAgICAgICAgICAgICBtYXJnaW46IDE2cHggMDsKICAgICAgICAgICAgfQogICAgICAgICAgICAubGluay1pbnB1dDpmb2N1cyB7CiAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWRlZXMtY29sb3ItcHJpbWFyeSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgICA8aW5wdXQgCiAgICAgICAgICAgIGNsYXNzPSJsaW5rLWlucHV0IiAKICAgICAgICAgICAgdHlwZT0idXJsIiAKICAgICAgICAgICAgcGxhY2Vob2xkZXI9Imh0dHBzOi8vZXhhbXBsZS5jb20iIAogICAgICAgICAgICBAa2V5ZG93bj0iJHsoZTExKSA9PiB7CiAgICAgICAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICAgICAgICAgIGxpbmtVcmwgPSBpbnB1dC52YWx1ZTsKICAgICAgICAgICAgICBjb25zdCBtb2RhbCA9IGlucHV0LmNsb3Nlc3QoImRlZXMtbW9kYWwiKTsKICAgICAgICAgICAgICBpZiAobW9kYWwpIHsKICAgICAgICAgICAgICAgIGNvbnN0IG9rQnV0dG9uID0gbW9kYWwuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJvdHRvbUJ1dHRvbjpsYXN0LWNoaWxkIik7CiAgICAgICAgICAgICAgICBpZiAob2tCdXR0b24pCiAgICAgICAgICAgICAgICAgIG9rQnV0dG9uLmNsaWNrKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9fSIKICAgICAgICAgICAgQGlucHV0PSIkeyhlMTEpID0+IHsKICAgICAgICAgICAgbGlua1VybCA9IGUxMS50YXJnZXQudmFsdWU7CiAgICAgICAgICB9fSIKICAgICAgICAgIC8+CiAgICAgICAgYCwKICAgICAgICAgIG1lbnVPcHRpb25zOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiQ2FuY2VsIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgICAgICAgcmVzb2x2ZTIobnVsbCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIkFkZCBMaW5rIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgICAgICAgcmVzb2x2ZTIobGlua1VybCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSk7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImRlZXMtbW9kYWwgLmxpbmstaW5wdXQiKTsKICAgICAgICAgIGlmIChpbnB1dCkgewogICAgICAgICAgICBpbnB1dC5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0sIDEwMCk7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBVbmRvIHRoZSBsYXN0IGFjdGlvbgogICAgICovCiAgICB1bmRvKCkgewogICAgICBjb25zdCBzdGF0ZTE0ID0gdGhpcy5oaXN0b3J5LnVuZG8oKTsKICAgICAgaWYgKHN0YXRlMTQpIHsKICAgICAgICB0aGlzLnJlc3RvcmVTdGF0ZShzdGF0ZTE0KTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBSZWRvIHRoZSBuZXh0IGFjdGlvbgogICAgICovCiAgICByZWRvKCkgewogICAgICBjb25zdCBzdGF0ZTE0ID0gdGhpcy5oaXN0b3J5LnJlZG8oKTsKICAgICAgaWYgKHN0YXRlMTQpIHsKICAgICAgICB0aGlzLnJlc3RvcmVTdGF0ZShzdGF0ZTE0KTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBSZXN0b3JlIGVkaXRvciBzdGF0ZSBmcm9tIGhpc3RvcnkKICAgICAqLwogICAgcmVzdG9yZVN0YXRlKHN0YXRlMTQpIHsKICAgICAgdGhpcy5ibG9ja3MgPSBzdGF0ZTE0LmJsb2NrczsKICAgICAgdGhpcy5zZWxlY3RlZEJsb2NrSWQgPSBzdGF0ZTE0LnNlbGVjdGVkQmxvY2tJZDsKICAgICAgdGhpcy5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCk7CiAgICAgIGlmIChzdGF0ZTE0LmN1cnNvclBvc2l0aW9uKSB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3N0YXRlMTQuY3Vyc29yUG9zaXRpb24uYmxvY2tJZH0iXWApOwogICAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50KSB7CiAgICAgICAgICAgIGJsb2NrQ29tcG9uZW50LmZvY3VzV2l0aEN1cnNvcihzdGF0ZTE0LmN1cnNvclBvc2l0aW9uLm9mZnNldCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgNTApOwogICAgICB9IGVsc2UgaWYgKHN0YXRlMTQuc2VsZWN0ZWRCbG9ja0lkKSB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKHN0YXRlMTQuc2VsZWN0ZWRCbG9ja0lkKTsKICAgICAgICB9LCA1MCk7CiAgICAgIH0KICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpOwogICAgfQogICAgLyoqCiAgICAgKiBTYXZlIGN1cnJlbnQgc3RhdGUgdG8gaGlzdG9yeSB3aXRoIGN1cnNvciBwb3NpdGlvbgogICAgICovCiAgICBzYXZlVG9IaXN0b3J5KGRlYm91bmNlNCA9IHRydWUpIHsKICAgICAgbGV0IGN1cnNvclBvc2l0aW9uOwogICAgICBpZiAodGhpcy5zZWxlY3RlZEJsb2NrSWQpIHsKICAgICAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3RoaXMuc2VsZWN0ZWRCbG9ja0lkfSJdYCk7CiAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmIChibG9ja0NvbXBvbmVudCAmJiB0eXBlb2YgYmxvY2tDb21wb25lbnQuZ2V0Q3Vyc29yUG9zaXRpb24gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgICAgICAgaWYgKGVkaXRhYmxlRWxlbWVudCkgewogICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBibG9ja0NvbXBvbmVudC5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUVsZW1lbnQpOwogICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgY3Vyc29yUG9zaXRpb24gPSB7CiAgICAgICAgICAgICAgICBibG9ja0lkOiB0aGlzLnNlbGVjdGVkQmxvY2tJZCwKICAgICAgICAgICAgICAgIG9mZnNldAogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGRlYm91bmNlNCkgewogICAgICAgIHRoaXMuaGlzdG9yeS5zYXZlU3RhdGUodGhpcy5ibG9ja3MsIHRoaXMuc2VsZWN0ZWRCbG9ja0lkLCBjdXJzb3JQb3NpdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5oaXN0b3J5LnNhdmVDaGVja3BvaW50KHRoaXMuYmxvY2tzLCB0aGlzLnNlbGVjdGVkQmxvY2tJZCwgY3Vyc29yUG9zaXRpb24pOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczY1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSW5wdXRXeXNpd3lnMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvcHJvZmlsZXBpY3R1cmUvcHJvZmlsZXBpY3R1cmUuY3JvcHBlci5qcwp2YXIgSW1hZ2VDcm9wcGVyID0gY2xhc3MgewogIG9wdGlvbnM7CiAgY2FudmFzOwogIGN0eDsKICBpbWc7CiAgb3ZlcmxheUNhbnZhczsKICBvdmVybGF5Q3R4OwogIC8vIENyb3AgYXJlYSBwcm9wZXJ0aWVzCiAgY3JvcFggPSAwOwogIGNyb3BZID0gMDsKICBjcm9wU2l6ZSA9IDIwMDsKICBtaW5Dcm9wU2l6ZSA9IDUwOwogIC8vIEludGVyYWN0aW9uIHN0YXRlCiAgaXNEcmFnZ2luZyA9IGZhbHNlOwogIGlzUmVzaXppbmcgPSBmYWxzZTsKICBkcmFnU3RhcnRYID0gMDsKICBkcmFnU3RhcnRZID0gMDsKICByZXNpemVIYW5kbGUgPSAiIjsKICAvLyBJbWFnZSBwcm9wZXJ0aWVzCiAgaW1hZ2VTY2FsZSA9IDE7CiAgaW1hZ2VPZmZzZXRYID0gMDsKICBpbWFnZU9mZnNldFkgPSAwOwogIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHsKICAgIHRoaXMub3B0aW9ucyA9IHsKICAgICAgbWluU2l6ZTogNTAsCiAgICAgIG91dHB1dFNpemU6IDgwMCwKICAgICAgLy8gSGlnaGVyIGRlZmF1bHQgcmVzb2x1dGlvbgogICAgICBvdXRwdXRRdWFsaXR5OiAwLjk1LAogICAgICAvLyBIaWdoZXIgcXVhbGl0eQogICAgICAuLi5vcHRpb25zCiAgICB9OwogICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgdGhpcy5vdmVybGF5Q3R4ID0gdGhpcy5vdmVybGF5Q2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICB0aGlzLmltZyA9IG5ldyBJbWFnZSgpOwogIH0KICBhc3luYyBpbml0aWFsaXplKCkgewogICAgYXdhaXQgdGhpcy5sb2FkSW1hZ2UoKTsKICAgIHRoaXMuc2V0dXBDYW52YXNlcygpOwogICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKCk7CiAgICB0aGlzLnJlbmRlcigpOwogIH0KICBhc3luYyBsb2FkSW1hZ2UoKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QpID0+IHsKICAgICAgdGhpcy5pbWcub25sb2FkID0gKCkgPT4gcmVzb2x2ZTIoKTsKICAgICAgdGhpcy5pbWcub25lcnJvciA9IHJlamVjdDsKICAgICAgdGhpcy5pbWcuc3JjID0gdGhpcy5vcHRpb25zLmltYWdlOwogICAgfSk7CiAgfQogIHNldHVwQ2FudmFzZXMoKSB7CiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLm9wdGlvbnMuY29udGFpbmVyOwogICAgY29uc3QgY29udGFpbmVyU2l6ZSA9IE1hdGgubWluKGNvbnRhaW5lci5jbGllbnRXaWR0aCwgY29udGFpbmVyLmNsaWVudEhlaWdodCk7CiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IGNvbnRhaW5lclNpemU7CiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBjb250YWluZXJTaXplOwogICAgdGhpcy5jYW52YXMuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICB0aGlzLmNhbnZhcy5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICB0aGlzLmNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICB0aGlzLmNhbnZhcy5zdHlsZS50b3AgPSAiMCI7CiAgICB0aGlzLmNhbnZhcy5zdHlsZS5sZWZ0ID0gIjAiOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLndpZHRoID0gY29udGFpbmVyU2l6ZTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5oZWlnaHQgPSBjb250YWluZXJTaXplOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICB0aGlzLm92ZXJsYXlDYW52YXMuc3R5bGUudG9wID0gIjAiOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmxlZnQgPSAiMCI7CiAgICB0aGlzLm92ZXJsYXlDYW52YXMuc3R5bGUuY3Vyc29yID0gIm1vdmUiOwogICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuY2FudmFzKTsKICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLm92ZXJsYXlDYW52YXMpOwogICAgY29uc3Qgc2NhbGUgPSBNYXRoLm1pbihjb250YWluZXJTaXplIC8gdGhpcy5pbWcud2lkdGgsIGNvbnRhaW5lclNpemUgLyB0aGlzLmltZy5oZWlnaHQpOwogICAgdGhpcy5pbWFnZVNjYWxlID0gc2NhbGU7CiAgICB0aGlzLmltYWdlT2Zmc2V0WCA9IChjb250YWluZXJTaXplIC0gdGhpcy5pbWcud2lkdGggKiBzY2FsZSkgLyAyOwogICAgdGhpcy5pbWFnZU9mZnNldFkgPSAoY29udGFpbmVyU2l6ZSAtIHRoaXMuaW1nLmhlaWdodCAqIHNjYWxlKSAvIDI7CiAgICBjb25zdCBzY2FsZWRJbWFnZVdpZHRoID0gdGhpcy5pbWcud2lkdGggKiBzY2FsZTsKICAgIGNvbnN0IHNjYWxlZEltYWdlSGVpZ2h0ID0gdGhpcy5pbWcuaGVpZ2h0ICogc2NhbGU7CiAgICBjb25zdCBtYXhDcm9wU2l6ZSA9IE1hdGgubWluKHNjYWxlZEltYWdlV2lkdGgsIHNjYWxlZEltYWdlSGVpZ2h0LCBjb250YWluZXJTaXplICogMC44KTsKICAgIHRoaXMuY3JvcFNpemUgPSBtYXhDcm9wU2l6ZSAqIDAuODsKICAgIHRoaXMuY3JvcFggPSAoY29udGFpbmVyU2l6ZSAtIHRoaXMuY3JvcFNpemUpIC8gMjsKICAgIHRoaXMuY3JvcFkgPSAoY29udGFpbmVyU2l6ZSAtIHRoaXMuY3JvcFNpemUpIC8gMjsKICB9CiAgc2V0dXBFdmVudExpc3RlbmVycygpIHsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLmhhbmRsZU1vdXNlRG93bi5iaW5kKHRoaXMpKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZU1vdXNlTW92ZS5iaW5kKHRoaXMpKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5oYW5kbGVNb3VzZVVwLmJpbmQodGhpcykpOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCB0aGlzLmhhbmRsZU1vdXNlVXAuYmluZCh0aGlzKSk7CiAgICB0aGlzLm92ZXJsYXlDYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsIHRoaXMuaGFuZGxlVG91Y2hTdGFydC5iaW5kKHRoaXMpKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCB0aGlzLmhhbmRsZVRvdWNoTW92ZS5iaW5kKHRoaXMpKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsIHRoaXMuaGFuZGxlVG91Y2hFbmQuYmluZCh0aGlzKSk7CiAgfQogIGhhbmRsZU1vdXNlRG93bihlMTEpIHsKICAgIGNvbnN0IHJlY3QgPSB0aGlzLm92ZXJsYXlDYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICBjb25zdCB4MyA9IChlMTEuY2xpZW50WCAtIHJlY3QubGVmdCkgKiAodGhpcy5vdmVybGF5Q2FudmFzLndpZHRoIC8gcmVjdC53aWR0aCk7CiAgICBjb25zdCB5NSA9IChlMTEuY2xpZW50WSAtIHJlY3QudG9wKSAqICh0aGlzLm92ZXJsYXlDYW52YXMuaGVpZ2h0IC8gcmVjdC5oZWlnaHQpOwogICAgY29uc3QgaGFuZGxlMyA9IHRoaXMuZ2V0UmVzaXplSGFuZGxlKHgzLCB5NSk7CiAgICBpZiAoaGFuZGxlMykgewogICAgICB0aGlzLmlzUmVzaXppbmcgPSB0cnVlOwogICAgICB0aGlzLnJlc2l6ZUhhbmRsZSA9IGhhbmRsZTM7CiAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbnNpZGVDcm9wQXJlYSh4MywgeTUpKSB7CiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7CiAgICB9CiAgICB0aGlzLmRyYWdTdGFydFggPSB4MzsKICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IHk1OwogIH0KICBoYW5kbGVNb3VzZU1vdmUoZTExKSB7CiAgICBjb25zdCByZWN0ID0gdGhpcy5vdmVybGF5Q2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgY29uc3QgeDMgPSAoZTExLmNsaWVudFggLSByZWN0LmxlZnQpICogKHRoaXMub3ZlcmxheUNhbnZhcy53aWR0aCAvIHJlY3Qud2lkdGgpOwogICAgY29uc3QgeTUgPSAoZTExLmNsaWVudFkgLSByZWN0LnRvcCkgKiAodGhpcy5vdmVybGF5Q2FudmFzLmhlaWdodCAvIHJlY3QuaGVpZ2h0KTsKICAgIGNvbnN0IGhhbmRsZTMgPSB0aGlzLmdldFJlc2l6ZUhhbmRsZSh4MywgeTUpOwogICAgaWYgKGhhbmRsZTMpIHsKICAgICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmN1cnNvciA9IHRoaXMuZ2V0UmVzaXplQ3Vyc29yKGhhbmRsZTMpOwogICAgfSBlbHNlIGlmICh0aGlzLmlzSW5zaWRlQ3JvcEFyZWEoeDMsIHk1KSkgewogICAgICB0aGlzLm92ZXJsYXlDYW52YXMuc3R5bGUuY3Vyc29yID0gIm1vdmUiOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmN1cnNvciA9ICJkZWZhdWx0IjsKICAgIH0KICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcpIHsKICAgICAgY29uc3QgZHggPSB4MyAtIHRoaXMuZHJhZ1N0YXJ0WDsKICAgICAgY29uc3QgZHkgPSB5NSAtIHRoaXMuZHJhZ1N0YXJ0WTsKICAgICAgY29uc3QgbWluWCA9IHRoaXMuaW1hZ2VPZmZzZXRYOwogICAgICBjb25zdCBtYXhYID0gdGhpcy5pbWFnZU9mZnNldFggKyB0aGlzLmltZy53aWR0aCAqIHRoaXMuaW1hZ2VTY2FsZSAtIHRoaXMuY3JvcFNpemU7CiAgICAgIGNvbnN0IG1pblkgPSB0aGlzLmltYWdlT2Zmc2V0WTsKICAgICAgY29uc3QgbWF4WSA9IHRoaXMuaW1hZ2VPZmZzZXRZICsgdGhpcy5pbWcuaGVpZ2h0ICogdGhpcy5pbWFnZVNjYWxlIC0gdGhpcy5jcm9wU2l6ZTsKICAgICAgdGhpcy5jcm9wWCA9IE1hdGgubWF4KG1pblgsIE1hdGgubWluKG1heFgsIHRoaXMuY3JvcFggKyBkeCkpOwogICAgICB0aGlzLmNyb3BZID0gTWF0aC5tYXgobWluWSwgTWF0aC5taW4obWF4WSwgdGhpcy5jcm9wWSArIGR5KSk7CiAgICAgIHRoaXMuZHJhZ1N0YXJ0WCA9IHgzOwogICAgICB0aGlzLmRyYWdTdGFydFkgPSB5NTsKICAgICAgdGhpcy5yZW5kZXIoKTsKICAgIH0KICAgIGlmICh0aGlzLmlzUmVzaXppbmcpIHsKICAgICAgdGhpcy5oYW5kbGVSZXNpemUoeDMsIHk1KTsKICAgICAgdGhpcy5kcmFnU3RhcnRYID0geDM7CiAgICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IHk1OwogICAgICB0aGlzLnJlbmRlcigpOwogICAgfQogIH0KICBoYW5kbGVNb3VzZVVwKCkgewogICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7CiAgICB0aGlzLmlzUmVzaXppbmcgPSBmYWxzZTsKICAgIHRoaXMucmVzaXplSGFuZGxlID0gIiI7CiAgfQogIGhhbmRsZVRvdWNoU3RhcnQoZTExKSB7CiAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgIGNvbnN0IHRvdWNoID0gZTExLnRvdWNoZXNbMF07CiAgICBjb25zdCBtb3VzZUV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoIm1vdXNlZG93biIsIHsKICAgICAgY2xpZW50WDogdG91Y2guY2xpZW50WCwKICAgICAgY2xpZW50WTogdG91Y2guY2xpZW50WQogICAgfSk7CiAgICB0aGlzLmhhbmRsZU1vdXNlRG93bihtb3VzZUV2ZW50KTsKICB9CiAgaGFuZGxlVG91Y2hNb3ZlKGUxMSkgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICBjb25zdCB0b3VjaCA9IGUxMS50b3VjaGVzWzBdOwogICAgY29uc3QgbW91c2VFdmVudCA9IG5ldyBNb3VzZUV2ZW50KCJtb3VzZW1vdmUiLCB7CiAgICAgIGNsaWVudFg6IHRvdWNoLmNsaWVudFgsCiAgICAgIGNsaWVudFk6IHRvdWNoLmNsaWVudFkKICAgIH0pOwogICAgdGhpcy5oYW5kbGVNb3VzZU1vdmUobW91c2VFdmVudCk7CiAgfQogIGhhbmRsZVRvdWNoRW5kKGUxMSkgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICB0aGlzLmhhbmRsZU1vdXNlVXAoKTsKICB9CiAgZ2V0UmVzaXplSGFuZGxlKHgzLCB5NSkgewogICAgY29uc3QgaGFuZGxlU2l6ZSA9IDIwOwogICAgY29uc3QgaGFuZGxlcyA9IHsKICAgICAgIm53IjogeyB4OiB0aGlzLmNyb3BYLCB5OiB0aGlzLmNyb3BZIH0sCiAgICAgICJuZSI6IHsgeDogdGhpcy5jcm9wWCArIHRoaXMuY3JvcFNpemUsIHk6IHRoaXMuY3JvcFkgfSwKICAgICAgInN3IjogeyB4OiB0aGlzLmNyb3BYLCB5OiB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSB9LAogICAgICAic2UiOiB7IHg6IHRoaXMuY3JvcFggKyB0aGlzLmNyb3BTaXplLCB5OiB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSB9CiAgICB9OwogICAgZm9yIChjb25zdCBba2V5MiwgcG9zXSBvZiBPYmplY3QuZW50cmllcyhoYW5kbGVzKSkgewogICAgICBpZiAoTWF0aC5hYnMoeDMgLSBwb3MueCkgPCBoYW5kbGVTaXplICYmIE1hdGguYWJzKHk1IC0gcG9zLnkpIDwgaGFuZGxlU2l6ZSkgewogICAgICAgIHJldHVybiBrZXkyOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gIiI7CiAgfQogIGdldFJlc2l6ZUN1cnNvcihoYW5kbGUzKSB7CiAgICBjb25zdCBjdXJzb3JzID0gewogICAgICAibnciOiAibnctcmVzaXplIiwKICAgICAgIm5lIjogIm5lLXJlc2l6ZSIsCiAgICAgICJzdyI6ICJzdy1yZXNpemUiLAogICAgICAic2UiOiAic2UtcmVzaXplIgogICAgfTsKICAgIHJldHVybiBjdXJzb3JzW2hhbmRsZTNdIHx8ICJkZWZhdWx0IjsKICB9CiAgaXNJbnNpZGVDcm9wQXJlYSh4MywgeTUpIHsKICAgIHJldHVybiB4MyA+PSB0aGlzLmNyb3BYICYmIHgzIDw9IHRoaXMuY3JvcFggKyB0aGlzLmNyb3BTaXplICYmIHk1ID49IHRoaXMuY3JvcFkgJiYgeTUgPD0gdGhpcy5jcm9wWSArIHRoaXMuY3JvcFNpemU7CiAgfQogIGhhbmRsZVJlc2l6ZSh4MywgeTUpIHsKICAgIGNvbnN0IGR4ID0geDMgLSB0aGlzLmRyYWdTdGFydFg7CiAgICBjb25zdCBkeSA9IHk1IC0gdGhpcy5kcmFnU3RhcnRZOwogICAgY29uc3QgaW1nTGVmdCA9IHRoaXMuaW1hZ2VPZmZzZXRYOwogICAgY29uc3QgaW1nVG9wID0gdGhpcy5pbWFnZU9mZnNldFk7CiAgICBjb25zdCBpbWdSaWdodCA9IHRoaXMuaW1hZ2VPZmZzZXRYICsgdGhpcy5pbWcud2lkdGggKiB0aGlzLmltYWdlU2NhbGU7CiAgICBjb25zdCBpbWdCb3R0b20gPSB0aGlzLmltYWdlT2Zmc2V0WSArIHRoaXMuaW1nLmhlaWdodCAqIHRoaXMuaW1hZ2VTY2FsZTsKICAgIHN3aXRjaCAodGhpcy5yZXNpemVIYW5kbGUpIHsKICAgICAgY2FzZSAic2UiOgogICAgICAgIHRoaXMuY3JvcFNpemUgPSBNYXRoLm1heCh0aGlzLm1pbkNyb3BTaXplLCBNYXRoLm1pbih0aGlzLmNyb3BTaXplICsgTWF0aC5tYXgoZHgsIGR5KSwgTWF0aC5taW4oaW1nUmlnaHQgLSB0aGlzLmNyb3BYLCBpbWdCb3R0b20gLSB0aGlzLmNyb3BZKSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJudyI6CiAgICAgICAgY29uc3QgbmV3U2l6ZSA9IE1hdGgubWF4KHRoaXMubWluQ3JvcFNpemUsIHRoaXMuY3JvcFNpemUgLSBNYXRoLm1heChkeCwgZHkpKTsKICAgICAgICBjb25zdCBzaXplRGlmZiA9IHRoaXMuY3JvcFNpemUgLSBuZXdTaXplOwogICAgICAgIGNvbnN0IG5ld1ggPSB0aGlzLmNyb3BYICsgc2l6ZURpZmY7CiAgICAgICAgY29uc3QgbmV3WSA9IHRoaXMuY3JvcFkgKyBzaXplRGlmZjsKICAgICAgICBpZiAobmV3WCA+PSBpbWdMZWZ0ICYmIG5ld1kgPj0gaW1nVG9wKSB7CiAgICAgICAgICB0aGlzLmNyb3BYID0gbmV3WDsKICAgICAgICAgIHRoaXMuY3JvcFkgPSBuZXdZOwogICAgICAgICAgdGhpcy5jcm9wU2l6ZSA9IG5ld1NpemU7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJuZSI6CiAgICAgICAgY29uc3QgbmVTaXplRHggPSBNYXRoLm1heChkeCwgLWR5KTsKICAgICAgICBjb25zdCBuZU5ld1NpemUgPSBNYXRoLm1heCh0aGlzLm1pbkNyb3BTaXplLCB0aGlzLmNyb3BTaXplICsgbmVTaXplRHgpOwogICAgICAgIGNvbnN0IG5lU2l6ZURpZmYgPSBuZU5ld1NpemUgLSB0aGlzLmNyb3BTaXplOwogICAgICAgIGNvbnN0IG5lTmV3WSA9IHRoaXMuY3JvcFkgLSBuZVNpemVEaWZmOwogICAgICAgIGlmIChuZU5ld1kgPj0gaW1nVG9wICYmIHRoaXMuY3JvcFggKyBuZU5ld1NpemUgPD0gaW1nUmlnaHQpIHsKICAgICAgICAgIHRoaXMuY3JvcFkgPSBuZU5ld1k7CiAgICAgICAgICB0aGlzLmNyb3BTaXplID0gbmVOZXdTaXplOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSAic3ciOgogICAgICAgIGNvbnN0IHN3U2l6ZUR4ID0gTWF0aC5tYXgoLWR4LCBkeSk7CiAgICAgICAgY29uc3Qgc3dOZXdTaXplID0gTWF0aC5tYXgodGhpcy5taW5Dcm9wU2l6ZSwgdGhpcy5jcm9wU2l6ZSArIHN3U2l6ZUR4KTsKICAgICAgICBjb25zdCBzd1NpemVEaWZmID0gc3dOZXdTaXplIC0gdGhpcy5jcm9wU2l6ZTsKICAgICAgICBjb25zdCBzd05ld1ggPSB0aGlzLmNyb3BYIC0gc3dTaXplRGlmZjsKICAgICAgICBpZiAoc3dOZXdYID49IGltZ0xlZnQgJiYgdGhpcy5jcm9wWSArIHN3TmV3U2l6ZSA8PSBpbWdCb3R0b20pIHsKICAgICAgICAgIHRoaXMuY3JvcFggPSBzd05ld1g7CiAgICAgICAgICB0aGlzLmNyb3BTaXplID0gc3dOZXdTaXplOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgIH0KICB9CiAgcmVuZGVyKCkgewogICAgdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpOwogICAgdGhpcy5vdmVybGF5Q3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLm92ZXJsYXlDYW52YXMud2lkdGgsIHRoaXMub3ZlcmxheUNhbnZhcy5oZWlnaHQpOwogICAgdGhpcy5jdHguZmlsbFN0eWxlID0gIiMwMDAwMDAiOwogICAgdGhpcy5jdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7CiAgICB0aGlzLmN0eC5kcmF3SW1hZ2UodGhpcy5pbWcsIHRoaXMuaW1hZ2VPZmZzZXRYLCB0aGlzLmltYWdlT2Zmc2V0WSwgdGhpcy5pbWcud2lkdGggKiB0aGlzLmltYWdlU2NhbGUsIHRoaXMuaW1nLmhlaWdodCAqIHRoaXMuaW1hZ2VTY2FsZSk7CiAgICB0aGlzLm92ZXJsYXlDdHguZmlsbFN0eWxlID0gInJnYmEoMCwgMCwgMCwgMC41KSI7CiAgICB0aGlzLm92ZXJsYXlDdHguZmlsbFJlY3QodGhpcy5pbWFnZU9mZnNldFgsIHRoaXMuaW1hZ2VPZmZzZXRZLCB0aGlzLmltZy53aWR0aCAqIHRoaXMuaW1hZ2VTY2FsZSwgdGhpcy5pbWcuaGVpZ2h0ICogdGhpcy5pbWFnZVNjYWxlKTsKICAgIHRoaXMub3ZlcmxheUN0eC5zYXZlKCk7CiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlID09PSAicm91bmQiKSB7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5iZWdpblBhdGgoKTsKICAgICAgdGhpcy5vdmVybGF5Q3R4LmFyYyh0aGlzLmNyb3BYICsgdGhpcy5jcm9wU2l6ZSAvIDIsIHRoaXMuY3JvcFkgKyB0aGlzLmNyb3BTaXplIC8gMiwgdGhpcy5jcm9wU2l6ZSAvIDIsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgdGhpcy5vdmVybGF5Q3R4LmNsaXAoKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5iZWdpblBhdGgoKTsKICAgICAgdGhpcy5vdmVybGF5Q3R4LnJlY3QodGhpcy5jcm9wWCwgdGhpcy5jcm9wWSwgdGhpcy5jcm9wU2l6ZSwgdGhpcy5jcm9wU2l6ZSk7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5jbGlwKCk7CiAgICB9CiAgICB0aGlzLm92ZXJsYXlDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMub3ZlcmxheUNhbnZhcy53aWR0aCwgdGhpcy5vdmVybGF5Q2FudmFzLmhlaWdodCk7CiAgICB0aGlzLm92ZXJsYXlDdHgucmVzdG9yZSgpOwogICAgdGhpcy5vdmVybGF5Q3R4LnN0cm9rZVN0eWxlID0gIndoaXRlIjsKICAgIHRoaXMub3ZlcmxheUN0eC5saW5lV2lkdGggPSAyOwogICAgaWYgKHRoaXMub3B0aW9ucy5zaGFwZSA9PT0gInJvdW5kIikgewogICAgICB0aGlzLm92ZXJsYXlDdHguYmVnaW5QYXRoKCk7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5hcmModGhpcy5jcm9wWCArIHRoaXMuY3JvcFNpemUgLyAyLCB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSAvIDIsIHRoaXMuY3JvcFNpemUgLyAyLCAwLCBNYXRoLlBJICogMik7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5zdHJva2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5zdHJva2VSZWN0KHRoaXMuY3JvcFgsIHRoaXMuY3JvcFksIHRoaXMuY3JvcFNpemUsIHRoaXMuY3JvcFNpemUpOwogICAgfQogICAgdGhpcy5kcmF3UmVzaXplSGFuZGxlcygpOwogIH0KICBkcmF3UmVzaXplSGFuZGxlcygpIHsKICAgIGNvbnN0IGhhbmRsZVNpemUgPSA4OwogICAgY29uc3QgaGFuZGxlcyA9IFsKICAgICAgeyB4OiB0aGlzLmNyb3BYLCB5OiB0aGlzLmNyb3BZIH0sCiAgICAgIHsgeDogdGhpcy5jcm9wWCArIHRoaXMuY3JvcFNpemUsIHk6IHRoaXMuY3JvcFkgfSwKICAgICAgeyB4OiB0aGlzLmNyb3BYLCB5OiB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSB9LAogICAgICB7IHg6IHRoaXMuY3JvcFggKyB0aGlzLmNyb3BTaXplLCB5OiB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSB9CiAgICBdOwogICAgdGhpcy5vdmVybGF5Q3R4LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CiAgICBoYW5kbGVzLmZvckVhY2goKGhhbmRsZTMpID0+IHsKICAgICAgdGhpcy5vdmVybGF5Q3R4LmJlZ2luUGF0aCgpOwogICAgICB0aGlzLm92ZXJsYXlDdHguYXJjKGhhbmRsZTMueCwgaGFuZGxlMy55LCBoYW5kbGVTaXplLCAwLCBNYXRoLlBJICogMik7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5maWxsKCk7CiAgICB9KTsKICB9CiAgYXN5bmMgZ2V0Q3JvcHBlZEltYWdlKCkgewogICAgY29uc3QgY3JvcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgY29uc3QgY3JvcEN0eCA9IGNyb3BDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgIGNvbnN0IHNjYWxlID0gMSAvIHRoaXMuaW1hZ2VTY2FsZTsKICAgIGNvbnN0IG9yaWdpbmFsQ3JvcFNpemUgPSB0aGlzLmNyb3BTaXplICogc2NhbGU7CiAgICBjb25zdCBvdXRwdXRTaXplID0gdGhpcy5vcHRpb25zLm91dHB1dFNpemU7CiAgICBpZiAob3V0cHV0U2l6ZSA+IG9yaWdpbmFsQ3JvcFNpemUpIHsKICAgICAgY29uc29sZS5pbmZvKGBQcm9maWxlIHBpY3R1cmU6IFVwc2NhbGluZyBmcm9tICR7TWF0aC5yb3VuZChvcmlnaW5hbENyb3BTaXplKX1weCB0byAke291dHB1dFNpemV9cHhgKTsKICAgIH0KICAgIGNyb3BDYW52YXMud2lkdGggPSBvdXRwdXRTaXplOwogICAgY3JvcENhbnZhcy5oZWlnaHQgPSBvdXRwdXRTaXplOwogICAgY29uc3Qgc3ggPSAodGhpcy5jcm9wWCAtIHRoaXMuaW1hZ2VPZmZzZXRYKSAqIHNjYWxlOwogICAgY29uc3Qgc3kgPSAodGhpcy5jcm9wWSAtIHRoaXMuaW1hZ2VPZmZzZXRZKSAqIHNjYWxlOwogICAgY29uc3Qgc1NpemUgPSB0aGlzLmNyb3BTaXplICogc2NhbGU7CiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlID09PSAicm91bmQiKSB7CiAgICAgIGNyb3BDdHguYmVnaW5QYXRoKCk7CiAgICAgIGNyb3BDdHguYXJjKG91dHB1dFNpemUgLyAyLCBvdXRwdXRTaXplIC8gMiwgb3V0cHV0U2l6ZSAvIDIsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgY3JvcEN0eC5jbGlwKCk7CiAgICB9CiAgICBjcm9wQ3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IHRydWU7CiAgICBjcm9wQ3R4LmltYWdlU21vb3RoaW5nUXVhbGl0eSA9ICJoaWdoIjsKICAgIGNyb3BDdHguZHJhd0ltYWdlKHRoaXMuaW1nLCBzeCwgc3ksIHNTaXplLCBzU2l6ZSwgMCwgMCwgb3V0cHV0U2l6ZSwgb3V0cHV0U2l6ZSk7CiAgICBjb25zdCBpc1BuZyA9IHRoaXMub3B0aW9ucy5pbWFnZS5pbmNsdWRlcygiaW1hZ2UvcG5nIik7CiAgICBjb25zdCBmb3JtYXQyID0gaXNQbmcgPyAiaW1hZ2UvcG5nIiA6ICJpbWFnZS9qcGVnIjsKICAgIHJldHVybiBjcm9wQ2FudmFzLnRvRGF0YVVSTChmb3JtYXQyLCB0aGlzLm9wdGlvbnMub3V0cHV0UXVhbGl0eSk7CiAgfQogIGRlc3Ryb3koKSB7CiAgICB0aGlzLmNhbnZhcy5yZW1vdmUoKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5yZW1vdmUoKTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvcHJvZmlsZXBpY3R1cmUvcHJvZmlsZXBpY3R1cmUubW9kYWwuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNjUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczY2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBQcm9maWxlUGljdHVyZU1vZGFsID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1wcm9maWxlcGljdHVyZS1tb2RhbCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2luaXRpYWxJbWFnZV9kZWNvcmF0b3JzOwogIGxldCBfaW5pdGlhbEltYWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdGlhbEltYWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaGFwZV9kZWNvcmF0b3JzOwogIGxldCBfc2hhcGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaGFwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0cHV0U2l6ZV9kZWNvcmF0b3JzOwogIGxldCBfb3V0cHV0U2l6ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dHB1dFNpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dHB1dFF1YWxpdHlfZGVjb3JhdG9yczsKICBsZXQgX291dHB1dFF1YWxpdHlfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vdXRwdXRRdWFsaXR5X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXJyZW50U3RlcF9kZWNvcmF0b3JzOwogIGxldCBfY3VycmVudFN0ZXBfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXJyZW50U3RlcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3JvcHBlZEltYWdlX2RlY29yYXRvcnM7CiAgbGV0IF9jcm9wcGVkSW1hZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jcm9wcGVkSW1hZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzUHJvY2Vzc2luZ19kZWNvcmF0b3JzOwogIGxldCBfaXNQcm9jZXNzaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNQcm9jZXNzaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIFByb2ZpbGVQaWN0dXJlTW9kYWwyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfaW5pdGlhbEltYWdlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc2hhcGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9vdXRwdXRTaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2N1cnJlbnRTdGVwX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9jcm9wcGVkSW1hZ2VfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2lzUHJvY2Vzc2luZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfaW5pdGlhbEltYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImluaXRpYWxJbWFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdGlhbEltYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmluaXRpYWxJbWFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaW5pdGlhbEltYWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2luaXRpYWxJbWFnZV9pbml0aWFsaXplcnMsIF9pbml0aWFsSW1hZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfc2hhcGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hhcGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNoYXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNoYXBlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaGFwZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaGFwZV9pbml0aWFsaXplcnMsIF9zaGFwZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY1KHRoaXMsIG51bGwsIF9vdXRwdXRTaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm91dHB1dFNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm91dHB1dFNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3V0cHV0U2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3V0cHV0U2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vdXRwdXRTaXplX2luaXRpYWxpemVycywgX291dHB1dFNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvdXRwdXRRdWFsaXR5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvdXRwdXRRdWFsaXR5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm91dHB1dFF1YWxpdHksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm91dHB1dFF1YWxpdHkgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3V0cHV0UXVhbGl0eV9pbml0aWFsaXplcnMsIF9vdXRwdXRRdWFsaXR5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjUodGhpcywgbnVsbCwgX2N1cnJlbnRTdGVwX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRTdGVwIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXJyZW50U3RlcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50U3RlcCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VycmVudFN0ZXAgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudFN0ZXBfaW5pdGlhbGl6ZXJzLCBfY3VycmVudFN0ZXBfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfY3JvcHBlZEltYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNyb3BwZWRJbWFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3JvcHBlZEltYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNyb3BwZWRJbWFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3JvcHBlZEltYWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Nyb3BwZWRJbWFnZV9pbml0aWFsaXplcnMsIF9jcm9wcGVkSW1hZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfaXNQcm9jZXNzaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzUHJvY2Vzc2luZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNQcm9jZXNzaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzUHJvY2Vzc2luZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNQcm9jZXNzaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzUHJvY2Vzc2luZ19pbml0aWFsaXplcnMsIF9pc1Byb2Nlc3NpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIFByb2ZpbGVQaWN0dXJlTW9kYWwyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgICNpbml0aWFsSW1hZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNjYodGhpcywgX2luaXRpYWxJbWFnZV9pbml0aWFsaXplcnMsICIiKTsKICAgIGdldCBpbml0aWFsSW1hZ2UoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbml0aWFsSW1hZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpbml0aWFsSW1hZ2UodmFsdWUyKSB7CiAgICAgIHRoaXMuI2luaXRpYWxJbWFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NoYXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfaW5pdGlhbEltYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfc2hhcGVfaW5pdGlhbGl6ZXJzLCAicm91bmQiKSk7CiAgICBnZXQgc2hhcGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaGFwZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNoYXBlKHZhbHVlMikgewogICAgICB0aGlzLiNzaGFwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI291dHB1dFNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9zaGFwZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjYodGhpcywgX291dHB1dFNpemVfaW5pdGlhbGl6ZXJzLCA4MDApKTsKICAgIGdldCBvdXRwdXRTaXplKCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0cHV0U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG91dHB1dFNpemUodmFsdWUyKSB7CiAgICAgIHRoaXMuI291dHB1dFNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNvdXRwdXRRdWFsaXR5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfb3V0cHV0U2l6ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjYodGhpcywgX291dHB1dFF1YWxpdHlfaW5pdGlhbGl6ZXJzLCAwLjk1KSk7CiAgICBnZXQgb3V0cHV0UXVhbGl0eSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI291dHB1dFF1YWxpdHlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvdXRwdXRRdWFsaXR5KHZhbHVlMikgewogICAgICB0aGlzLiNvdXRwdXRRdWFsaXR5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VycmVudFN0ZXBfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9vdXRwdXRRdWFsaXR5X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfY3VycmVudFN0ZXBfaW5pdGlhbGl6ZXJzLCAiY3JvcCIpKTsKICAgIGdldCBjdXJyZW50U3RlcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRTdGVwX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VycmVudFN0ZXAodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1cnJlbnRTdGVwX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3JvcHBlZEltYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfY3VycmVudFN0ZXBfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9jcm9wcGVkSW1hZ2VfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGNyb3BwZWRJbWFnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Nyb3BwZWRJbWFnZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNyb3BwZWRJbWFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3JvcHBlZEltYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNQcm9jZXNzaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfY3JvcHBlZEltYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfaXNQcm9jZXNzaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc1Byb2Nlc3NpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc1Byb2Nlc3NpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1Byb2Nlc3NpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzUHJvY2Vzc2luZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY3JvcHBlciA9IChfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9pc1Byb2Nlc3NpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgIHdpbmRvd0xheWVyOwogICAgekluZGV4ID0gMDsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzR2Vpc3RGb250RmFtaWx5fTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB6LWluZGV4OiB2YXIoLS16LWluZGV4KTsKICAgICAgfQoKICAgICAgLm1vZGFsLWNvbnRhaW5lciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzBhMGEwYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDgpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkiKX07CiAgICAgICAgYm94LXNoYWRvdzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjAgMjBweCAyNXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDEwcHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4wNCkiLCAiMCAyMHB4IDI1cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMyksIDAgMTBweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpIil9OwogICAgICAgIHdpZHRoOiA0ODBweDsKICAgICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAzMnB4KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCkgc2NhbGUoMC45OCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBhbmltYXRpb246IG1vZGFsU2hvdyAwLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGZvcndhcmRzOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIG1vZGFsU2hvdyB7CiAgICAgICAgdG8gewogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHNjYWxlKDEpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLm1vZGFsLWhlYWRlciB7CiAgICAgICAgaGVpZ2h0OiA1MnB4OwogICAgICAgIHBhZGRpbmc6IDAgMjBweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubW9kYWwtdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAuY2xvc2UtYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDEwcHg7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5jbG9zZS1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDUpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5jbG9zZS1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA4KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICB9CgogICAgICAubW9kYWwtYm9keSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAyMHB4OwogICAgICB9CgogICAgICAuY3JvcHBlci1jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1heC13aWR0aDogMzYwcHg7CiAgICAgICAgYXNwZWN0LXJhdGlvOiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjMDAwMDAwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4wNikiLCAiaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnByZXZpZXctY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWltYWdlIHsKICAgICAgICB3aWR0aDogMTgwcHg7CiAgICAgICAgaGVpZ2h0OiAxODBweDsKICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDEwcHggMTVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCA0cHggNnB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjA1KSIsICIwIDEwcHggMTVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4zKSwgMCA0cHggNnB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpIil9OwogICAgICB9CgogICAgICAucHJldmlldy1pbWFnZS5yb3VuZCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICAucHJldmlldy1pbWFnZS5zcXVhcmUgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5zdWNjZXNzLW1lc3NhZ2UgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMTBweCAyMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTBiOTgxIiwgIiMxMGI5ODEiKX07CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGFuaW1hdGlvbjogc3VjY2Vzc1B1bHNlIDAuNHMgZWFzZS1vdXQ7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3VjY2Vzc1B1bHNlIHsKICAgICAgICAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMC45KTsgb3BhY2l0eTogMDsgfQogICAgICAgIDUwJSB7IHRyYW5zZm9ybTogc2NhbGUoMS4wMik7IH0KICAgICAgICAxMDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgb3BhY2l0eTogMTsgfQogICAgICB9CgogICAgICAubW9kYWwtZm9vdGVyIHsKICAgICAgICBwYWRkaW5nOiAyMHB4IDI0cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDYpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmluc3RydWN0aW9ucyB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIG1heC13aWR0aDogMzIwcHg7CiAgICAgIH0KCiAgICAgIC5sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSIpfTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjNjBhNWZhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IHNwaW4gMC42cyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgdG8gewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5tb2RhbC1jb250YWluZXIgewogICAgICAgICAgd2lkdGg6IGNhbGMoMTAwdncgLSAzMnB4KTsKICAgICAgICAgIG1hcmdpbjogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm1vZGFsLWJvZHkgewogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICB9CiAgICAgIH0KICAgIGAKICAgIF07CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy53aW5kb3dMYXllciA9IGF3YWl0IERlZXNXaW5kb3dMYXllci5jcmVhdGVBbmRTaG93KHsKICAgICAgICBibHVyOiB0cnVlCiAgICAgIH0pOwogICAgICB0aGlzLndpbmRvd0xheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gdGhpcy5jbG9zZSgpKTsKICAgICAgdGhpcy56SW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoIi0tei1pbmRleCIsIHRoaXMuekluZGV4LnRvU3RyaW5nKCkpOwogICAgICB6SW5kZXhSZWdpc3RyeS5yZWdpc3Rlcih0aGlzLCB0aGlzLnpJbmRleCk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgaWYgKHRoaXMuY3JvcHBlcikgewogICAgICAgIHRoaXMuY3JvcHBlci5kZXN0cm95KCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMud2luZG93TGF5ZXIpIHsKICAgICAgICBhd2FpdCB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKTsKICAgICAgfQogICAgICB6SW5kZXhSZWdpc3RyeS51bnJlZ2lzdGVyKHRoaXMpOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRhaW5lciIgQGNsaWNrPSR7KGUxMSkgPT4gZTExLnN0b3BQcm9wYWdhdGlvbigpfT4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgPGgzIGNsYXNzPSJtb2RhbC10aXRsZSI+CiAgICAgICAgICAgICR7dGhpcy5jdXJyZW50U3RlcCA9PT0gImNyb3AiID8gIkFkanVzdCBJbWFnZSIgOiAiU3VjY2VzcyJ9CiAgICAgICAgICA8L2gzPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY2xvc2UtYnV0dG9uIiBAY2xpY2s9JHt0aGlzLmNsb3NlfSB0aXRsZT0iQ2xvc2UiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTp4IiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICAke3RoaXMuY3VycmVudFN0ZXAgPT09ICJjcm9wIiA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnN0cnVjdGlvbnMiPgogICAgICAgICAgICAgIFBvc2l0aW9uIGFuZCByZXNpemUgdGhlIHNxdWFyZSB0byBzZWxlY3QgeW91ciBwcm9maWxlIGFyZWEKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNyb3BwZXItY29udGFpbmVyIiBpZD0iY3JvcHBlckNvbnRhaW5lciI+PC9kaXY+CiAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctY29udGFpbmVyIj4KICAgICAgICAgICAgICAke3RoaXMuaXNQcm9jZXNzaW5nID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5zdHJ1Y3Rpb25zIj5TYXZpbmcuLi48L2Rpdj4KICAgICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgICA8aW1nIAogICAgICAgICAgICAgICAgICBjbGFzcz0icHJldmlldy1pbWFnZSAke3RoaXMuc2hhcGV9IiAKICAgICAgICAgICAgICAgICAgc3JjPSIke3RoaXMuY3JvcHBlZEltYWdlfSIgCiAgICAgICAgICAgICAgICAgIGFsdD0iQ3JvcHBlZCBwcmV2aWV3IgogICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Y2Nlc3MtbWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOmNoZWNrIiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8c3Bhbj5Mb29raW5nIGdvb2QhPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgfQogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICAgICAgICAke3RoaXMuY3VycmVudFN0ZXAgPT09ICJjcm9wIiA/IGIyYAogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVzdHJ1Y3RpdmUiIHNpemU9InNtIiBAY2xpY2s9JHt0aGlzLmNsb3NlfT4KICAgICAgICAgICAgICBDYW5jZWwKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlZmF1bHQiIHNpemU9InNtIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUNyb3B9PgogICAgICAgICAgICAgIFNhdmUKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCA9PT0gImNyb3AiKSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplQ3JvcHBlcigpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBpbml0aWFsaXplQ3JvcHBlcigpIHsKICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCJjcm9wcGVyQ29udGFpbmVyIik7CiAgICAgIGlmICghY29udGFpbmVyKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5jcm9wcGVyID0gbmV3IEltYWdlQ3JvcHBlcih7CiAgICAgICAgY29udGFpbmVyLAogICAgICAgIGltYWdlOiB0aGlzLmluaXRpYWxJbWFnZSwKICAgICAgICBzaGFwZTogdGhpcy5zaGFwZSwKICAgICAgICBhc3BlY3RSYXRpbzogMSwKICAgICAgICBvdXRwdXRTaXplOiB0aGlzLm91dHB1dFNpemUsCiAgICAgICAgb3V0cHV0UXVhbGl0eTogdGhpcy5vdXRwdXRRdWFsaXR5CiAgICAgIH0pOwogICAgICBhd2FpdCB0aGlzLmNyb3BwZXIuaW5pdGlhbGl6ZSgpOwogICAgfQogICAgYXN5bmMgaGFuZGxlQ3JvcCgpIHsKICAgICAgaWYgKCF0aGlzLmNyb3BwZXIpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gdHJ1ZTsKICAgICAgICB0aGlzLmN1cnJlbnRTdGVwID0gInByZXZpZXciOwogICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgICAgY29uc3QgY3JvcHBlZERhdGEgPSBhd2FpdCB0aGlzLmNyb3BwZXIuZ2V0Q3JvcHBlZEltYWdlKCk7CiAgICAgICAgdGhpcy5jcm9wcGVkSW1hZ2UgPSBjcm9wcGVkRGF0YTsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDgwMCkpOwogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2F2ZSIsIHsKICAgICAgICAgIGRldGFpbDogeyBjcm9wcGVkSW1hZ2U6IHRoaXMuY3JvcHBlZEltYWdlIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICB0aGlzLmNsb3NlKCk7CiAgICAgICAgfSwgMTUwMCk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgY3JvcHBpbmcgaW1hZ2U6IiwgZXJyb3IpOwogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGNsb3NlKCkgewogICAgICB0aGlzLnJlbW92ZSgpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2NihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gUHJvZmlsZVBpY3R1cmVNb2RhbDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L3Byb2ZpbGVwaWN0dXJlL2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM0MSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDQ4cHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLW91dHB1dCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMTA1LCAyNDIsIDAuMSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICBtYXgtaGVpZ2h0OiAxMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICAuZmVhdHVyZS1saXN0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgICAgfQogICAgICAKICAgICAgLmZlYXR1cmUtbGlzdCBsaSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCByb3VuZFByb2ZpbGUgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmVbc2hhcGU9InJvdW5kIl0nKTsKICBpZiAocm91bmRQcm9maWxlKSB7CiAgICByb3VuZFByb2ZpbGUuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDsKICAgICAgY29uc29sZS5sb2coIlJvdW5kIHByb2ZpbGUgcGljdHVyZSBjaGFuZ2VkOiIsIHRhcmdldC52YWx1ZT8uc3Vic3RyaW5nKDAsIDUwKSArICIuLi4iKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJQcm9maWxlIFBpY3R1cmUgSW5wdXQifSAuc3VidGl0bGU9JHsiQmFzaWMgdXNhZ2Ugd2l0aCByb3VuZCBhbmQgc3F1YXJlIHNoYXBlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGxhYmVsPSJQcm9maWxlIFBpY3R1cmUgKFJvdW5kKSIKICAgICAgICAgICAgZGVzY3JpcHRpb249IkNsaWNrIHRvIHVwbG9hZCBvciBkcmFnICYgZHJvcCBhbiBpbWFnZSIKICAgICAgICAgICAgc2hhcGU9InJvdW5kIgogICAgICAgICAgICBzaXplPSIxMjAiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZQogICAgICAgICAgICBsYWJlbD0iUHJvZmlsZSBQaWN0dXJlIChTcXVhcmUpIgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iU3VwcG9ydHMgSlBFRywgUE5HLCBhbmQgV2ViUCBmb3JtYXRzIgogICAgICAgICAgICBzaGFwZT0ic3F1YXJlIgogICAgICAgICAgICBzaXplPSIxMjAiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBwcm9maWxlcyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZSIpOwogIHByb2ZpbGVzLmZvckVhY2goKHByb2ZpbGUpID0+IHsKICAgIHByb2ZpbGUuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDsKICAgICAgY29uc29sZS5sb2coYFByb2ZpbGUgKHNpemUgJHt0YXJnZXQuc2l6ZX0pIGNoYW5nZWRgKTsKICAgIH0pOwogIH0pOwp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlNpemUgVmFyaWF0aW9ucyJ9IC5zdWJ0aXRsZT0keyJQcm9maWxlIHBpY3R1cmVzIGluIGRpZmZlcmVudCBzaXplcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGxhYmVsPSJTbWFsbCAoODBweCkiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iODAiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZQogICAgICAgICAgICBsYWJlbD0iTWVkaXVtICgxMjBweCkiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iMTIwIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgbGFiZWw9IkxhcmdlICgxNjBweCkiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iMTYwIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3Qgc2FtcGxlSW1hZ2VVcmwgPSAiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTWpBd0lpQm9aV2xuYUhROUlqSXdNQ0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLSUNBOFpHVm1jejRLSUNBZ0lEeHNhVzVsWVhKSGNtRmthV1Z1ZENCcFpEMGlaM0poWkdsbGJuUWlJSGd4UFNJd0pTSWdlVEU5SWpBbElpQjRNajBpTVRBd0pTSWdlVEk5SWpFd01DVWlQZ29nSUNBZ0lDQThjM1J2Y0NCdlptWnpaWFE5SWpBbElpQnpkRzl3TFdOdmJHOXlQU0lqTmpZM1pXVmhJaUF2UGdvZ0lDQWdJQ0E4YzNSdmNDQnZabVp6WlhROUlqRXdNQ1VpSUhOMGIzQXRZMjlzYjNJOUlpTTNOalJpWVRJaUlDOCtDaUFnSUNBOEwyeHBibVZoY2tkeVlXUnBaVzUwUGdvZ0lEd3ZaR1ZtY3o0S0lDQThjbVZqZENCM2FXUjBhRDBpTWpBd0lpQm9aV2xuYUhROUlqSXdNQ0lnWm1sc2JEMGlkWEpzS0NObmNtRmthV1Z1ZENraUlDOCtDaUFnUEhSbGVIUWdlRDBpTlRBbElpQjVQU0kxTUNVaUlHUnZiV2x1WVc1MExXSmhjMlZzYVc1bFBTSnRhV1JrYkdVaUlIUmxlSFF0WVc1amFHOXlQU0p0YVdSa2JHVWlJR1p2Ym5RdFptRnRhV3g1UFNKQmNtbGhiQ0lnWm05dWRDMXphWHBsUFNJNE1DSWdabWxzYkQwaWQyaHBkR1VpUGtwRVBDOTBaWGgwUGdvOEwzTjJaejQ9IjsKICBjb25zdCBwcmVmaWxsZWRQcm9maWxlID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjcHJlZmlsbGVkLXByb2ZpbGUiKTsKICBpZiAocHJlZmlsbGVkUHJvZmlsZSkgewogICAgcHJlZmlsbGVkUHJvZmlsZS52YWx1ZSA9IHNhbXBsZUltYWdlVXJsOwogICAgcHJlZmlsbGVkUHJvZmlsZS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgICBjb25zdCBvdXRwdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNwcmVmaWxsZWQtb3V0cHV0Iik7CiAgICAgIGlmIChvdXRwdXQpIHsKICAgICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSB0YXJnZXQudmFsdWUgPyBgSW1hZ2UgZGF0YTogJHt0YXJnZXQudmFsdWUuc3Vic3RyaW5nKDAsIDgwKX0uLi5gIDogIk5vIGltYWdlIHNlbGVjdGVkIjsKICAgICAgfQogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlByZS1maWxsZWQgYW5kIFZhbHVlIEJpbmRpbmcifSAuc3VidGl0bGU9JHsiUHJvZmlsZSBwaWN0dXJlIHdpdGggaW5pdGlhbCB2YWx1ZSBhbmQgY2hhbmdlIHRyYWNraW5nIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgIGlkPSJwcmVmaWxsZWQtcHJvZmlsZSIKICAgICAgICAgIGxhYmVsPSJFZGl0IEV4aXN0aW5nIFByb2ZpbGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iQ2xpY2sgdGhlIGVkaXQgYnV0dG9uIHRvIGNoYW5nZSBvciBkZWxldGUgdG8gcmVtb3ZlIgogICAgICAgICAgc2hhcGU9InJvdW5kIgogICAgICAgICAgc2l6ZT0iMTUwIgogICAgICAgID48L2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmU+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0icHJlZmlsbGVkLW91dHB1dCIgY2xhc3M9ImRlbW8tb3V0cHV0Ij4KICAgICAgICAgIEltYWdlIGRhdGEgd2lsbCBhcHBlYXIgaGVyZSB3aGVuIGNoYW5nZWQKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZGlzYWJsZWRQcm9maWxlID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZGlzYWJsZWQtcHJvZmlsZSIpOwogIGlmIChkaXNhYmxlZFByb2ZpbGUpIHsKICAgIGRpc2FibGVkUHJvZmlsZS52YWx1ZSA9ICJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNakF3SWlCb1pXbG5hSFE5SWpJd01DSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtJQ0E4Y21WamRDQjNhV1IwYUQwaU1qQXdJaUJvWldsbmFIUTlJakl3TUNJZ1ptbHNiRDBpSTJOalkyTmpZeUlnTHo0S0lDQThkR1Y0ZENCNFBTSTFNQ1VpSUhrOUlqVXdKU0lnWkc5dGFXNWhiblF0WW1GelpXeHBibVU5SW0xcFpHUnNaU0lnZEdWNGRDMWhibU5vYjNJOUltMXBaR1JzWlNJZ1ptOXVkQzFtWVcxcGJIazlJa0Z5YVdGc0lpQm1iMjUwTFhOcGVtVTlJall3SWlCbWFXeHNQU0ozYUdsMFpTSStUa0U4TDNSbGVIUStDand2YzNablBnPT0iOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGb3JtIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgc3RhdGVzIGFuZCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGxhYmVsPSJSZXF1aXJlZCBGaWVsZCIKICAgICAgICAgICAgZGVzY3JpcHRpb249IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGlkPSJkaXNhYmxlZC1wcm9maWxlIgogICAgICAgICAgICBsYWJlbD0iRGlzYWJsZWQgU3RhdGUiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDYW5ub3QgYmUgZWRpdGVkIgogICAgICAgICAgICBzaGFwZT0ic3F1YXJlIgogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgbGFiZWw9IlVwbG9hZCBPbmx5IgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iRGVsZXRlIG5vdCBhbGxvd2VkIgogICAgICAgICAgICBzaGFwZT0icm91bmQiCiAgICAgICAgICAgIC5hbGxvd0RlbGV0ZT0ke2ZhbHNlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRmVhdHVyZXMifSAuc3VidGl0bGU9JHsiQ29tcGxldGUgZmVhdHVyZSBzZXQgb2YgdGhlIHByb2ZpbGUgcGljdHVyZSBpbnB1dCJ9PgogICAgICAgIDx1bCBjbGFzcz0iZmVhdHVyZS1saXN0Ij4KICAgICAgICAgIDxsaT48c3Ryb25nPkltYWdlIFVwbG9hZDo8L3N0cm9uZz4gQ2xpY2sgdG8gdXBsb2FkIG9yIGRyYWcgJiBkcm9wIGltYWdlczwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5JbWFnZSBDcm9wcGluZzo8L3N0cm9uZz4gSW50ZXJhY3RpdmUgY3JvcCB0b29sIHdpdGggcmVzaXplIGhhbmRsZXM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+U2hhcGUgU3VwcG9ydDo8L3N0cm9uZz4gUm91bmQgb3Igc3F1YXJlIHByb2ZpbGUgcGljdHVyZXM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+U2l6ZSBDdXN0b21pemF0aW9uOjwvc3Ryb25nPiBBZGp1c3RhYmxlIGRpbWVuc2lvbnM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlldyAmIEVkaXQ6PC9zdHJvbmc+IEhvdmVyIG92ZXJsYXkgd2l0aCBlZGl0IGFuZCBkZWxldGUgb3B0aW9uczwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5GaWxlIFZhbGlkYXRpb246PC9zdHJvbmc+IEZvcm1hdCBhbmQgc2l6ZSByZXN0cmljdGlvbnM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+UmVzcG9uc2l2ZSBEZXNpZ246PC9zdHJvbmc+IFdvcmtzIG9uIGRlc2t0b3AgYW5kIG1vYmlsZSBkZXZpY2VzPC9saT4KICAgICAgICAgIDxsaT48c3Ryb25nPkZvcm0gSW50ZWdyYXRpb246PC9zdHJvbmc+IFN0YW5kYXJkIGZvcm0gdmFsdWUgYmluZGluZyBhbmQgdmFsaWRhdGlvbjwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5BY2Nlc3NpYmlsaXR5Ojwvc3Ryb25nPiBLZXlib2FyZCBuYXZpZ2F0aW9uIGFuZCBzY3JlZW4gcmVhZGVyIHN1cHBvcnQ8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+Wi1JbmRleCBNYW5hZ2VtZW50Ojwvc3Ryb25nPiBQcm9wZXIgbW9kYWwgc3RhY2tpbmcgd2l0aCByZWdpc3RyeTwvbGk+CiAgICAgICAgPC91bD4KICAgICAgICAKICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAyNHB4OyI+CiAgICAgICAgICA8c3Ryb25nPlN1cHBvcnRlZCBGb3JtYXRzOjwvc3Ryb25nPiBKUEVHLCBQTkcsIFdlYlA8YnI+CiAgICAgICAgICA8c3Ryb25nPk1heCBGaWxlIFNpemU6PC9zdHJvbmc+IDVNQiAoY29uZmlndXJhYmxlKTxicj4KICAgICAgICAgIDxzdHJvbmc+T3V0cHV0IEZvcm1hdDo8L3N0cm9uZz4gQmFzZTY0IGVuY29kZWQgSlBFRwogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvcHJvZmlsZXBpY3R1cmUvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2RlZXNfaWNvbigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU2NiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNjcgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNJbnB1dFByb2ZpbGVQaWN0dXJlID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NoYXBlX2RlY29yYXRvcnM7CiAgbGV0IF9zaGFwZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NoYXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaXplX2RlY29yYXRvcnM7CiAgbGV0IF9zaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9yczsKICBsZXQgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FsbG93VXBsb2FkX2RlY29yYXRvcnM7CiAgbGV0IF9hbGxvd1VwbG9hZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FsbG93VXBsb2FkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hbGxvd0RlbGV0ZV9kZWNvcmF0b3JzOwogIGxldCBfYWxsb3dEZWxldGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hbGxvd0RlbGV0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RmlsZVNpemVfZGVjb3JhdG9yczsKICBsZXQgX21heEZpbGVTaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RmlsZVNpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjY2VwdGVkRm9ybWF0c19kZWNvcmF0b3JzOwogIGxldCBfYWNjZXB0ZWRGb3JtYXRzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWNjZXB0ZWRGb3JtYXRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vdXRwdXRTaXplX2RlY29yYXRvcnM7CiAgbGV0IF9vdXRwdXRTaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0cHV0U2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzOwogIGxldCBfb3V0cHV0UXVhbGl0eV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dHB1dFF1YWxpdHlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzSG92ZXJlZF9kZWNvcmF0b3JzOwogIGxldCBfaXNIb3ZlcmVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNIb3ZlcmVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0RyYWdnaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9pc0RyYWdnaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNEcmFnZ2luZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNMb2FkaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9pc0xvYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0UHJvZmlsZVBpY3R1cmUyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zaGFwZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3NpemVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2FsbG93VXBsb2FkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2FsbG93RGVsZXRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX21heEZpbGVTaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfYWNjZXB0ZWRGb3JtYXRzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9vdXRwdXRTaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2lzSG92ZXJlZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNEcmFnZ2luZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNMb2FkaW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX3NoYXBlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNoYXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaGFwZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaGFwZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hhcGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hhcGVfaW5pdGlhbGl6ZXJzLCBfc2hhcGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfc2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2l6ZV9pbml0aWFsaXplcnMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBsYWNlaG9sZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwbGFjZWhvbGRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wbGFjZWhvbGRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGxhY2Vob2xkZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfYWxsb3dVcGxvYWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWxsb3dVcGxvYWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFsbG93VXBsb2FkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFsbG93VXBsb2FkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hbGxvd1VwbG9hZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hbGxvd1VwbG9hZF9pbml0aWFsaXplcnMsIF9hbGxvd1VwbG9hZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF9hbGxvd0RlbGV0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhbGxvd0RlbGV0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWxsb3dEZWxldGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWxsb3dEZWxldGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFsbG93RGVsZXRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FsbG93RGVsZXRlX2luaXRpYWxpemVycywgX2FsbG93RGVsZXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX21heEZpbGVTaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1heEZpbGVTaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYXhGaWxlU2l6ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYXhGaWxlU2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWF4RmlsZVNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWF4RmlsZVNpemVfaW5pdGlhbGl6ZXJzLCBfbWF4RmlsZVNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfYWNjZXB0ZWRGb3JtYXRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjY2VwdGVkRm9ybWF0cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWNjZXB0ZWRGb3JtYXRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFjY2VwdGVkRm9ybWF0cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWNjZXB0ZWRGb3JtYXRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjY2VwdGVkRm9ybWF0c19pbml0aWFsaXplcnMsIF9hY2NlcHRlZEZvcm1hdHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfb3V0cHV0U2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvdXRwdXRTaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvdXRwdXRTaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm91dHB1dFNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm91dHB1dFNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3V0cHV0U2l6ZV9pbml0aWFsaXplcnMsIF9vdXRwdXRTaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX291dHB1dFF1YWxpdHlfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3V0cHV0UXVhbGl0eSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3V0cHV0UXVhbGl0eSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vdXRwdXRRdWFsaXR5LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vdXRwdXRRdWFsaXR5ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX291dHB1dFF1YWxpdHlfaW5pdGlhbGl6ZXJzLCBfb3V0cHV0UXVhbGl0eV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF9pc0hvdmVyZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNIb3ZlcmVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0hvdmVyZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNIb3ZlcmVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc0hvdmVyZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNIb3ZlcmVkX2luaXRpYWxpemVycywgX2lzSG92ZXJlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF9pc0RyYWdnaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzRHJhZ2dpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNEcmFnZ2luZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNEcmFnZ2luZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nX2luaXRpYWxpemVycywgX2lzRHJhZ2dpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfaXNMb2FkaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzTG9hZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNMb2FkaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzTG9hZGluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNMb2FkaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzTG9hZGluZ19pbml0aWFsaXplcnMsIF9pc0xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFByb2ZpbGVQaWN0dXJlMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNDE7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gQmFzZTY0IGVuY29kZWQgaW1hZ2Ugb3IgVVJMCiAgICBzZXQgdmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hhcGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX3NoYXBlX2luaXRpYWxpemVycywgInJvdW5kIikpOwogICAgZ2V0IHNoYXBlKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hhcGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaGFwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hhcGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfc2hhcGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9zaXplX2luaXRpYWxpemVycywgMTIwKSk7CiAgICBnZXQgc2l6ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaXplKHZhbHVlMikgewogICAgICB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHBsYWNlaG9sZGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwbGFjZWhvbGRlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhbGxvd1VwbG9hZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfYWxsb3dVcGxvYWRfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgYWxsb3dVcGxvYWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhbGxvd1VwbG9hZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFsbG93VXBsb2FkKHZhbHVlMikgewogICAgICB0aGlzLiNhbGxvd1VwbG9hZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FsbG93RGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfYWxsb3dVcGxvYWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9hbGxvd0RlbGV0ZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBhbGxvd0RlbGV0ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FsbG93RGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWxsb3dEZWxldGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FsbG93RGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4RmlsZVNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9hbGxvd0RlbGV0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX21heEZpbGVTaXplX2luaXRpYWxpemVycywgNSAqIDEwMjQgKiAxMDI0KSk7CiAgICBnZXQgbWF4RmlsZVNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYXhGaWxlU2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gNU1CCiAgICBzZXQgbWF4RmlsZVNpemUodmFsdWUyKSB7CiAgICAgIHRoaXMuI21heEZpbGVTaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYWNjZXB0ZWRGb3JtYXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfbWF4RmlsZVNpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9hY2NlcHRlZEZvcm1hdHNfaW5pdGlhbGl6ZXJzLCBbImltYWdlL2pwZWciLCAiaW1hZ2UvcG5nIiwgImltYWdlL3dlYnAiXSkpOwogICAgZ2V0IGFjY2VwdGVkRm9ybWF0cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FjY2VwdGVkRm9ybWF0c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjY2VwdGVkRm9ybWF0cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWNjZXB0ZWRGb3JtYXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjb3V0cHV0U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX2FjY2VwdGVkRm9ybWF0c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX291dHB1dFNpemVfaW5pdGlhbGl6ZXJzLCA4MDApKTsKICAgIGdldCBvdXRwdXRTaXplKCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0cHV0U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gT3V0cHV0IHJlc29sdXRpb24gaW4gcGl4ZWxzCiAgICBzZXQgb3V0cHV0U2l6ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb3V0cHV0U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI291dHB1dFF1YWxpdHlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9vdXRwdXRTaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfb3V0cHV0UXVhbGl0eV9pbml0aWFsaXplcnMsIDAuOTUpKTsKICAgIGdldCBvdXRwdXRRdWFsaXR5KCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0cHV0UXVhbGl0eV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gMC0xIHF1YWxpdHkgZm9yIEpQRUcKICAgIHNldCBvdXRwdXRRdWFsaXR5KHZhbHVlMikgewogICAgICB0aGlzLiNvdXRwdXRRdWFsaXR5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNIb3ZlcmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfb3V0cHV0UXVhbGl0eV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX2lzSG92ZXJlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNIb3ZlcmVkKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNIb3ZlcmVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNIb3ZlcmVkKHZhbHVlMikgewogICAgICB0aGlzLiNpc0hvdmVyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0RyYWdnaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfaXNIb3ZlcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfaXNEcmFnZ2luZ19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNEcmFnZ2luZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzRHJhZ2dpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0RyYWdnaW5nKHZhbHVlMikgewogICAgICB0aGlzLiNpc0RyYWdnaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfaXNEcmFnZ2luZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX2lzTG9hZGluZ19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNMb2FkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNMb2FkaW5nKHZhbHVlMikgewogICAgICB0aGlzLiNpc0xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIG1vZGFsSW5zdGFuY2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfaXNMb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTZweDsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICB9CgogICAgICAucHJvZmlsZS1jb250YWluZXI6aG92ZXIgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMik7CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmUgewogICAgICAgIHdpZHRoOiB2YXIoLS1zaXplLCAxMjBweCk7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLCAxMjBweCk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNWY1ZjUiLCAiIzE4MTgxYiIpfTsKICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlLnJvdW5kIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmUuc3F1YXJlIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlLmRyYWdnaW5nIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xNSkiLCAicmdiYSg5NiwgMTY1LCAyNTAsIDAuMTUpIil9OwogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlOmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDRkNGQ4IiwgIiMzZjNmNDYiKX07CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmU6ZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAucHJvZmlsZS1pbWFnZSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG9iamVjdC1maXQ6IGNvdmVyOwogICAgICB9CgogICAgICAucGxhY2Vob2xkZXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5vdmVybGF5IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtY29udGFpbmVyOmhvdmVyIC5vdmVybGF5IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAub3ZlcmxheS1jb250ZW50IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLm92ZXJsYXktYnV0dG9uIHsKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpIiwgInJnYmEoMzksIDM5LCA0MiwgMC45NSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xKSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgIH0KCiAgICAgIC5vdmVybGF5LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzNmM2Y0NiIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgIH0KCiAgICAgIC5vdmVybGF5LWJ1dHRvbi5kZWxldGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIzOSwgNjgsIDY4LCAwLjkpIiwgInJnYmEoMjIwLCAzOCwgMzgsIDAuOSkiKX07CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5vdmVybGF5LWJ1dHRvbi5kZWxldGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWY0NDQ0IiwgIiNkYzI2MjYiKX07CiAgICAgIH0KCiAgICAgIC5kcm9wLXpvbmUtdGV4dCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5oaWRkZW4taW5wdXQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIExvYWRpbmcgYW5pbWF0aW9uICovCiAgICAgIC5sb2FkaW5nLW92ZXJsYXkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSIsICJyZ2JhKDAsIDAsIDAsIDAuOCkiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgLmxvYWRpbmctb3ZlcmxheS5zaG93IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICAubG9hZGluZy1zcGlubmVyIHsKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgYm9yZGVyOiAzcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xKSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYW5pbWF0aW9uOiBzcGluIDAuNnMgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICAgIHRvIHsKICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHB1bHNlIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7CiAgICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgfQogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlLmNsaWNraW5nIHsKICAgICAgICBhbmltYXRpb246IHB1bHNlIDAuM3MgZWFzZS1vdXQ7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0gLnJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZH0+PC9kZWVzLWxhYmVsPgogICAgICAgIAogICAgICAgIDxkaXYgCiAgICAgICAgICBjbGFzcz0icHJvZmlsZS1jb250YWluZXIiCiAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUNsaWNrfQogICAgICAgICAgQGRyYWdvdmVyPSR7dGhpcy5oYW5kbGVEcmFnT3Zlcn0KICAgICAgICAgIEBkcmFnbGVhdmU9JHt0aGlzLmhhbmRsZURyYWdMZWF2ZX0KICAgICAgICAgIEBkcm9wPSR7dGhpcy5oYW5kbGVEcm9wfQogICAgICAgICAgc3R5bGU9Ii0tc2l6ZTogJHt0aGlzLnNpemV9cHgiCiAgICAgICAgPgogICAgICAgICAgPGRpdiBjbGFzcz0icHJvZmlsZS1waWN0dXJlICR7dGhpcy5zaGFwZX0gJHt0aGlzLmlzRHJhZ2dpbmcgPyAiZHJhZ2dpbmciIDogIiJ9ICR7dGhpcy5pc0xvYWRpbmcgJiYgIXRoaXMudmFsdWUgPyAiY2xpY2tpbmciIDogIiJ9Ij4KICAgICAgICAgICAgJHt0aGlzLnZhbHVlID8gYjJgCiAgICAgICAgICAgICAgPGltZyBjbGFzcz0icHJvZmlsZS1pbWFnZSIgc3JjPSIke3RoaXMudmFsdWV9IiBhbHQ9IlByb2ZpbGUgcGljdHVyZSIgLz4KICAgICAgICAgICAgYCA6IGIyYAogICAgICAgICAgICAgIDxkZWVzLWljb24gY2xhc3M9InBsYWNlaG9sZGVyLWljb24iIGljb249Imx1Y2lkZTp1c2VyIiBpY29uU2l6ZT0iJHt0aGlzLnNpemUgKiAwLjV9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgYH0KICAgICAgICAgICAgCiAgICAgICAgICAgICR7dGhpcy5pc0RyYWdnaW5nID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3ZlcmxheSIgc3R5bGU9Im9wYWNpdHk6IDEiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZHJvcC16b25lLXRleHQiPgogICAgICAgICAgICAgICAgICBEcm9wIGltYWdlIGhlcmUKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgIAogICAgICAgICAgICAke3RoaXMudmFsdWUgJiYgIXRoaXMuZGlzYWJsZWQgPyBiMmAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvdmVybGF5Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im92ZXJsYXktY29udGVudCI+CiAgICAgICAgICAgICAgICAgICR7dGhpcy5hbGxvd1VwbG9hZCA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im92ZXJsYXktYnV0dG9uIiBAY2xpY2s9JHsoZTExKSA9PiB7CiAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIHRoaXMub3Blbk1vZGFsKCk7CiAgICAgIH19IHRpdGxlPSJDaGFuZ2UgcGljdHVyZSI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpwZW5jaWwiIGljb25TaXplPSIyMCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgICAgJHt0aGlzLmFsbG93RGVsZXRlID8gYjJgCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ib3ZlcmxheS1idXR0b24gZGVsZXRlIiBAY2xpY2s9JHsoZTExKSA9PiB7CiAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIHRoaXMuZGVsZXRlUGljdHVyZSgpOwogICAgICB9fSB0aXRsZT0iRGVsZXRlIHBpY3R1cmUiPgogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6dHJhc2gyIiBpY29uU2l6ZT0iMjAiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAKICAgICAgICAgICAgJHt0aGlzLmlzTG9hZGluZyAmJiAhdGhpcy52YWx1ZSA/IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctb3ZlcmxheSBzaG93Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctc3Bpbm5lciI+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxpbnB1dAogICAgICAgICAgdHlwZT0iZmlsZSIKICAgICAgICAgIGNsYXNzPSJoaWRkZW4taW5wdXQiCiAgICAgICAgICBhY2NlcHQ9IiR7dGhpcy5hY2NlcHRlZEZvcm1hdHMuam9pbigiLCIpfSIKICAgICAgICAgIEBjaGFuZ2U9JHt0aGlzLmhhbmRsZUZpbGVTZWxlY3R9CiAgICAgICAgLz4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgaGFuZGxlQ2xpY2soKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmFsbG93VXBsb2FkKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7CiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlOwogICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5oaWRkZW4taW5wdXQiKTsKICAgICAgICBjb25zdCBoYW5kbGVGb2N1cyA9ICgpID0+IHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBpZiAoIWlucHV0LmZpbGVzIHx8IGlucHV0LmZpbGVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIiwgaGFuZGxlRm9jdXMpOwogICAgICAgICAgfSwgMzAwKTsKICAgICAgICB9OwogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIGhhbmRsZUZvY3VzKTsKICAgICAgICBpbnB1dC5jbGljaygpOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVGaWxlU2VsZWN0KGV2ZW50KSB7CiAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0OwogICAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXM/LlswXTsKICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTsKICAgICAgaWYgKGZpbGUpIHsKICAgICAgICB0aGlzLnByb2Nlc3NGaWxlKGZpbGUpOwogICAgICB9CiAgICAgIGlucHV0LnZhbHVlID0gIiI7CiAgICB9CiAgICBoYW5kbGVEcmFnT3ZlcihldmVudCkgewogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5hbGxvd1VwbG9hZCkgewogICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZURyYWdMZWF2ZSgpIHsKICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7CiAgICB9CiAgICBoYW5kbGVEcm9wKGV2ZW50KSB7CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlOwogICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5hbGxvd1VwbG9hZCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGZpbGUgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzWzBdOwogICAgICBpZiAoZmlsZSkgewogICAgICAgIHRoaXMucHJvY2Vzc0ZpbGUoZmlsZSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHByb2Nlc3NGaWxlKGZpbGUpIHsKICAgICAgaWYgKCF0aGlzLmFjY2VwdGVkRm9ybWF0cy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiSW52YWxpZCBmaWxlIHR5cGU6IiwgZmlsZS50eXBlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGZpbGUuc2l6ZSA+IHRoaXMubWF4RmlsZVNpemUpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGaWxlIHRvbyBsYXJnZToiLCBmaWxlLnNpemUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICByZWFkZXIub25sb2FkID0gYXN5bmMgKGUxMSkgPT4gewogICAgICAgIGNvbnN0IGJhc2U2NDIgPSBlMTEudGFyZ2V0Py5yZXN1bHQ7CiAgICAgICAgYXdhaXQgdGhpcy5vcGVuTW9kYWwoYmFzZTY0Mik7CiAgICAgIH07CiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgfQogICAgYXN5bmMgb3Blbk1vZGFsKGluaXRpYWxJbWFnZSkgewogICAgICBjb25zdCBpbWFnZVRvRWRpdCA9IGluaXRpYWxJbWFnZSB8fCB0aGlzLnZhbHVlOwogICAgICBpZiAoIWltYWdlVG9FZGl0KSB7CiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmhpZGRlbi1pbnB1dCIpOwogICAgICAgIGlucHV0LmNsaWNrKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMubW9kYWxJbnN0YW5jZSA9IG5ldyBQcm9maWxlUGljdHVyZU1vZGFsKCk7CiAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5zaGFwZSA9IHRoaXMuc2hhcGU7CiAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5pbml0aWFsSW1hZ2UgPSBpbWFnZVRvRWRpdDsKICAgICAgdGhpcy5tb2RhbEluc3RhbmNlLm91dHB1dFNpemUgPSB0aGlzLm91dHB1dFNpemU7CiAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5vdXRwdXRRdWFsaXR5ID0gdGhpcy5vdXRwdXRRdWFsaXR5OwogICAgICB0aGlzLm1vZGFsSW5zdGFuY2UuYWRkRXZlbnRMaXN0ZW5lcigic2F2ZSIsIChldmVudCkgPT4gewogICAgICAgIHRoaXMudmFsdWUgPSBldmVudC5kZXRhaWwuY3JvcHBlZEltYWdlOwogICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICB9KTsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLm1vZGFsSW5zdGFuY2UpOwogICAgfQogICAgZGVsZXRlUGljdHVyZSgpIHsKICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2NyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0UHJvZmlsZVBpY3R1cmUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYvY29tcG9uZW50LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90cygpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlNjcgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczY4ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzUGRmID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1wZGYiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9wZGZVcmxfZGVjb3JhdG9yczsKICBsZXQgX3BkZlVybF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BkZlVybF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUGRmMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3BkZlVybF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfX2VzRGVjb3JhdGU2Nyh0aGlzLCBudWxsLCBfcGRmVXJsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBkZlVybCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGRmVXJsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBkZlVybCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGRmVXJsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BkZlVybF9pbml0aWFsaXplcnMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNQZGYyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIERFTU8KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgIDxkZWVzLXBkZj48L2RlZXMtcGRmPiBgOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJQREYiOwogICAgI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2OCh0aGlzLCBfcGRmVXJsX2luaXRpYWxpemVycywgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIpOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBwZGZVcmwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNwZGZVcmxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwZGZVcmwodmFsdWUyKSB7CiAgICAgIHRoaXMuI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjgodGhpcywgX3BkZlVybF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICBtYXgtd2lkdGg6IDgwMHB4OwogICAgICAgIH0KICAgICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB9CgogICAgICAgICNwZGZjYW52YXMgewogICAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCA1cHggI2NjYzsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGNhbnZhcwogICAgICAgIGlkPSJwZGZjYW52YXMiCiAgICAgICAgLmhlaWdodD0kezB9CiAgICAgICAgLndpZHRoPSR7MH0KCiAgICAgID48L2NhbnZhcz4KICAgIGA7CiAgICB9CiAgICBzdGF0aWMgcGRmSnNSZWFkeTsKICAgIHN0YXRpYyBwZGZqc0xpYjsKICAgIC8vIHR5cGVvZiBwZGZqc1R5cGVzOwogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICghRGVlc1BkZjIucGRmSnNSZWFkeSkgewogICAgICAgIGNvbnN0IHBkZkpzUmVhZHlEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0czI1LnBsdWdpbnMuc21hcnRwcm9taXNlLmRlZmVyKCk7CiAgICAgICAgRGVlc1BkZjIucGRmSnNSZWFkeSA9IHBkZkpzUmVhZHlEZWZlcnJlZC5wcm9taXNlOwogICAgICAgIERlZXNQZGYyLnBkZmpzTGliID0gYXdhaXQgaW1wb3J0KCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3BkZmpzLWRpc3RANC4wLjM3OS8rZXNtIik7CiAgICAgICAgRGVlc1BkZjIucGRmanNMaWIuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMgPSAiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9wZGZqcy1kaXN0QDQuMC4zNzkvYnVpbGQvcGRmLndvcmtlci5tanMiOwogICAgICAgIHBkZkpzUmVhZHlEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgIH0KICAgICAgYXdhaXQgRGVlc1BkZjIucGRmSnNSZWFkeTsKICAgICAgdGhpcy5kaXNwbGF5Q29udGVudCgpOwogICAgfQogICAgYXN5bmMgZGlzcGxheUNvbnRlbnQoKSB7CiAgICAgIGF3YWl0IERlZXNQZGYyLnBkZkpzUmVhZHk7CiAgICAgIGNvbnN0IGxvYWRpbmdUYXNrID0gRGVlc1BkZjIucGRmanNMaWIuZ2V0RG9jdW1lbnQodGhpcy5wZGZVcmwpOwogICAgICBsb2FkaW5nVGFzay5wcm9taXNlLnRoZW4oKHBkZikgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJQREYgbG9hZGVkIik7CiAgICAgICAgY29uc3QgcGFnZU51bWJlciA9IDE7CiAgICAgICAgcGRmLmdldFBhZ2UocGFnZU51bWJlcikudGhlbigocGFnZSkgPT4gewogICAgICAgICAgY29uc29sZS5sb2coIlBhZ2UgbG9hZGVkIik7CiAgICAgICAgICBjb25zdCBzY2FsZSA9IDEwOwogICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGUgfSk7CiAgICAgICAgICBjb25zdCBjYW52YXMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiI3BkZmNhbnZhcyIpOwogICAgICAgICAgY29uc3QgY29udGV4dDIgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQ7CiAgICAgICAgICBjYW52YXMud2lkdGggPSB2aWV3cG9ydC53aWR0aDsKICAgICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7CiAgICAgICAgICAgIGNhbnZhc0NvbnRleHQ6IGNvbnRleHQyLAogICAgICAgICAgICB2aWV3cG9ydAogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IHJlbmRlclRhc2sgPSBwYWdlLnJlbmRlcihyZW5kZXJDb250ZXh0KTsKICAgICAgICAgIHJlbmRlclRhc2sucHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBjb25zb2xlLmxvZygiUGFnZSByZW5kZXJlZCIpOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0sIChyZWFzb24pID0+IHsKICAgICAgICBjb25zb2xlLmVycm9yKHJlYXNvbik7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBQcm92aWRlIGNvbnRleHQgbWVudSBpdGVtcyBmb3IgdGhlIGdsb2JhbCBjb250ZXh0IG1lbnUgaGFuZGxlcgogICAgICovCiAgICBnZXRDb250ZXh0TWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJPcGVuIFBERiBpbiBOZXcgVGFiIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOkV4dGVybmFsTGluayIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy5wZGZVcmwsICJfYmxhbmsiKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDb3B5IFBERiBVUkwiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Q29weSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5wZGZVcmwpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkRvd25sb2FkIFBERiIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpEb3dubG9hZCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgY29uc3QgbGluazMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICAgICAgICAgIGxpbmszLmhyZWYgPSB0aGlzLnBkZlVybDsKICAgICAgICAgICAgbGluazMuZG93bmxvYWQgPSB0aGlzLnBkZlVybC5zcGxpdCgiLyIpLnBvcCgpIHx8ICJkb2N1bWVudC5wZGYiOwogICAgICAgICAgICBsaW5rMy5jbGljaygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjgoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNQZGYyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtc2hhcmVkL1BkZk1hbmFnZXIuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIFBkZk1hbmFnZXIgPSBjbGFzcyB7CiAgc3RhdGljIHBkZmpzTGliOwogIHN0YXRpYyBpbml0aWFsaXplZCA9IGZhbHNlOwogIHN0YXRpYyBhc3luYyBpbml0aWFsaXplKCkgewogICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpCiAgICAgIHJldHVybjsKICAgIHRoaXMucGRmanNMaWIgPSBhd2FpdCBpbXBvcnQoImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcGRmanMtZGlzdEA0LjAuMzc5Lytlc20iKTsKICAgIHRoaXMucGRmanNMaWIuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMgPSAiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9wZGZqcy1kaXN0QDQuMC4zNzkvYnVpbGQvcGRmLndvcmtlci5tanMiOwogICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7CiAgfQogIHN0YXRpYyBhc3luYyBsb2FkRG9jdW1lbnQodXJsKSB7CiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemUoKTsKICAgIGNvbnN0IGxvYWRpbmdUYXNrID0gdGhpcy5wZGZqc0xpYi5nZXREb2N1bWVudCh1cmwpOwogICAgY29uc3QgZG9jdW1lbnQ0ID0gYXdhaXQgbG9hZGluZ1Rhc2sucHJvbWlzZTsKICAgIHJldHVybiBkb2N1bWVudDQ7CiAgfQogIHN0YXRpYyByZWxlYXNlRG9jdW1lbnQoX3VybCkgewogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtc2hhcmVkL0NhbnZhc1Bvb2wuanMKdmFyIENhbnZhc1Bvb2wgPSBjbGFzcyB7CiAgc3RhdGljIHBvb2wgPSBbXTsKICBzdGF0aWMgbWF4UG9vbFNpemUgPSAyMDsKICBzdGF0aWMgTUlOX0NBTlZBU19TSVpFID0gMjU2OwogIHN0YXRpYyBNQVhfQ0FOVkFTX1NJWkUgPSA0MDk2OwogIHN0YXRpYyBhY3F1aXJlKHdpZHRoLCBoZWlnaHQpIHsKICAgIGNvbnN0IHN1aXRhYmxlID0gdGhpcy5wb29sLmZpbmQoKGl0ZW0pID0+ICFpdGVtLmluVXNlICYmIGl0ZW0uY2FudmFzLndpZHRoID49IHdpZHRoICYmIGl0ZW0uY2FudmFzLmhlaWdodCA+PSBoZWlnaHQgJiYgaXRlbS5jYW52YXMud2lkdGggPD0gd2lkdGggKiAxLjUgJiYgaXRlbS5jYW52YXMuaGVpZ2h0IDw9IGhlaWdodCAqIDEuNSk7CiAgICBpZiAoc3VpdGFibGUpIHsKICAgICAgc3VpdGFibGUuaW5Vc2UgPSB0cnVlOwogICAgICBzdWl0YWJsZS5sYXN0VXNlZCA9IERhdGUubm93KCk7CiAgICAgIHN1aXRhYmxlLmNhbnZhcy53aWR0aCA9IHdpZHRoOwogICAgICBzdWl0YWJsZS5jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0OwogICAgICBzdWl0YWJsZS5jdHguY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogICAgICByZXR1cm4gc3VpdGFibGU7CiAgICB9CiAgICBpZiAodGhpcy5wb29sLmxlbmd0aCA8IHRoaXMubWF4UG9vbFNpemUpIHsKICAgICAgY29uc3QgY2FudmFzMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICBjb25zdCBjdHgyID0gY2FudmFzMi5nZXRDb250ZXh0KCIyZCIsIHsKICAgICAgICBhbHBoYTogdHJ1ZSwKICAgICAgICBkZXN5bmNocm9uaXplZDogdHJ1ZQogICAgICB9KTsKICAgICAgY2FudmFzMi53aWR0aCA9IE1hdGgubWluKE1hdGgubWF4KHdpZHRoLCB0aGlzLk1JTl9DQU5WQVNfU0laRSksIHRoaXMuTUFYX0NBTlZBU19TSVpFKTsKICAgICAgY2FudmFzMi5oZWlnaHQgPSBNYXRoLm1pbihNYXRoLm1heChoZWlnaHQsIHRoaXMuTUlOX0NBTlZBU19TSVpFKSwgdGhpcy5NQVhfQ0FOVkFTX1NJWkUpOwogICAgICBjb25zdCBwb29sZWRDYW52YXMgPSB7CiAgICAgICAgY2FudmFzOiBjYW52YXMyLAogICAgICAgIGN0eDogY3R4MiwKICAgICAgICBpblVzZTogdHJ1ZSwKICAgICAgICBsYXN0VXNlZDogRGF0ZS5ub3coKQogICAgICB9OwogICAgICB0aGlzLnBvb2wucHVzaChwb29sZWRDYW52YXMpOwogICAgICByZXR1cm4gcG9vbGVkQ2FudmFzOwogICAgfQogICAgY29uc3QgbHJ1ID0gdGhpcy5wb29sLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaW5Vc2UpLnNvcnQoKGE1LCBiNSkgPT4gYTUubGFzdFVzZWQgLSBiNS5sYXN0VXNlZClbMF07CiAgICBpZiAobHJ1KSB7CiAgICAgIGxydS5jYW52YXMud2lkdGggPSB3aWR0aDsKICAgICAgbHJ1LmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7CiAgICAgIGxydS5jdHguY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogICAgICBscnUuaW5Vc2UgPSB0cnVlOwogICAgICBscnUubGFzdFVzZWQgPSBEYXRlLm5vdygpOwogICAgICByZXR1cm4gbHJ1OwogICAgfQogICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CiAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoOwogICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDsKICAgIHJldHVybiB7CiAgICAgIGNhbnZhcywKICAgICAgY3R4LAogICAgICBpblVzZTogdHJ1ZSwKICAgICAgbGFzdFVzZWQ6IERhdGUubm93KCkKICAgIH07CiAgfQogIHN0YXRpYyByZWxlYXNlKHBvb2xlZENhbnZhcykgewogICAgaWYgKHRoaXMucG9vbC5pbmNsdWRlcyhwb29sZWRDYW52YXMpKSB7CiAgICAgIHBvb2xlZENhbnZhcy5pblVzZSA9IGZhbHNlOwogICAgICBwb29sZWRDYW52YXMuY3R4LmNsZWFyUmVjdCgwLCAwLCBwb29sZWRDYW52YXMuY2FudmFzLndpZHRoLCBwb29sZWRDYW52YXMuY2FudmFzLmhlaWdodCk7CiAgICB9CiAgfQogIHN0YXRpYyByZWxlYXNlQWxsKCkgewogICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMucG9vbCkgewogICAgICBpdGVtLmluVXNlID0gZmFsc2U7CiAgICAgIGl0ZW0uY3R4LmNsZWFyUmVjdCgwLCAwLCBpdGVtLmNhbnZhcy53aWR0aCwgaXRlbS5jYW52YXMuaGVpZ2h0KTsKICAgIH0KICB9CiAgc3RhdGljIGRlc3Ryb3koKSB7CiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5wb29sKSB7CiAgICAgIGl0ZW0uY2FudmFzLndpZHRoID0gMDsKICAgICAgaXRlbS5jYW52YXMuaGVpZ2h0ID0gMDsKICAgIH0KICAgIHRoaXMucG9vbCA9IFtdOwogIH0KICBzdGF0aWMgZ2V0U3RhdHMoKSB7CiAgICByZXR1cm4gewogICAgICBwb29sU2l6ZTogdGhpcy5wb29sLmxlbmd0aCwKICAgICAgbWF4UG9vbFNpemU6IHRoaXMubWF4UG9vbFNpemUsCiAgICAgIGluVXNlOiB0aGlzLnBvb2wuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmluVXNlKS5sZW5ndGgsCiAgICAgIGF2YWlsYWJsZTogdGhpcy5wb29sLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaW5Vc2UpLmxlbmd0aAogICAgfTsKICB9CiAgc3RhdGljIGFkanVzdFBvb2xTaXplKG5ld1NpemUpIHsKICAgIGlmIChuZXdTaXplIDwgdGhpcy5wb29sLmxlbmd0aCkgewogICAgICBjb25zdCB0b1JlbW92ZSA9IHRoaXMucG9vbC5sZW5ndGggLSBuZXdTaXplOwogICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5wb29sLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaW5Vc2UpLnNsaWNlKDAsIHRvUmVtb3ZlKTsKICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJlbW92ZWQpIHsKICAgICAgICBjb25zdCBpbmRleDIgPSB0aGlzLnBvb2wuaW5kZXhPZihpdGVtKTsKICAgICAgICBpZiAoaW5kZXgyID4gLTEpIHsKICAgICAgICAgIHRoaXMucG9vbC5zcGxpY2UoaW5kZXgyLCAxKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHRoaXMubWF4UG9vbFNpemUgPSBuZXdTaXplOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtc2hhcmVkL3V0aWxzLmpzCmZ1bmN0aW9uIGRlYm91bmNlMyhmdW5jLCB3YWl0MikgewogIGxldCB0aW1lb3V0MjsKICByZXR1cm4gZnVuY3Rpb24gZXhlY3V0ZWRGdW5jdGlvbiguLi5hcmdzKSB7CiAgICBjb25zdCBsYXRlciA9ICgpID0+IHsKICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTsKICAgICAgZnVuYyguLi5hcmdzKTsKICAgIH07CiAgICBjbGVhclRpbWVvdXQodGltZW91dDIpOwogICAgdGltZW91dDIgPSB3aW5kb3cuc2V0VGltZW91dChsYXRlciwgd2FpdDIpOwogIH07Cn0KZnVuY3Rpb24gdGhyb3R0bGUyKGZ1bmMsIGxpbWl0KSB7CiAgbGV0IGluVGhyb3R0bGU7CiAgcmV0dXJuIGZ1bmN0aW9uIGV4ZWN1dGVkRnVuY3Rpb24oLi4uYXJncykgewogICAgaWYgKCFpblRocm90dGxlKSB7CiAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7CiAgICAgIGluVGhyb3R0bGUgPSB0cnVlOwogICAgICBzZXRUaW1lb3V0KCgpID0+IGluVGhyb3R0bGUgPSBmYWxzZSwgbGltaXQpOwogICAgfQogIH07Cn0KZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoYnl0ZXMpIHsKICBpZiAoYnl0ZXMgPT09IDApCiAgICByZXR1cm4gIjAgQnl0ZXMiOwogIGNvbnN0IGs0ID0gMTAyNDsKICBjb25zdCBzaXplcyA9IFsiQnl0ZXMiLCAiS0IiLCAiTUIiLCAiR0IiXTsKICBjb25zdCBpMTEgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGs0KSk7CiAgcmV0dXJuIE1hdGgucm91bmQoYnl0ZXMgLyBNYXRoLnBvdyhrNCwgaTExKSAqIDEwMCkgLyAxMDAgKyAiICIgKyBzaXplc1tpMTFdOwp9CmZ1bmN0aW9uIGlzSW5WaWV3cG9ydChlbGVtZW50NCwgbWFyZ2luID0gMCkgewogIGNvbnN0IHJlY3QgPSBlbGVtZW50NC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICByZXR1cm4gcmVjdC50b3AgPj0gLW1hcmdpbiAmJiByZWN0LmxlZnQgPj0gLW1hcmdpbiAmJiByZWN0LmJvdHRvbSA8PSAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpICsgbWFyZ2luICYmIHJlY3QucmlnaHQgPD0gKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCkgKyBtYXJnaW47Cn0KdmFyIFBlcmZvcm1hbmNlTW9uaXRvciA9IGNsYXNzIHsKICBzdGF0aWMgbWFya3MgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIHN0YXRpYyBtZWFzdXJlcyA9IFtdOwogIHN0YXRpYyBtYXJrKG5hbWUpIHsKICAgIHRoaXMubWFya3Muc2V0KG5hbWUsIHBlcmZvcm1hbmNlLm5vdygpKTsKICB9CiAgc3RhdGljIG1lYXN1cmUobmFtZSwgc3RhcnRNYXJrKSB7CiAgICBjb25zdCBzdGFydCA9IHRoaXMubWFya3MuZ2V0KHN0YXJ0TWFyayk7CiAgICBpZiAoc3RhcnQpIHsKICAgICAgY29uc3QgZHVyYXRpb24gPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0OwogICAgICB0aGlzLm1lYXN1cmVzLnB1c2goeyBuYW1lLCBkdXJhdGlvbiB9KTsKICAgICAgdGhpcy5tYXJrcy5kZWxldGUoc3RhcnRNYXJrKTsKICAgICAgcmV0dXJuIGR1cmF0aW9uOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQogIHN0YXRpYyBnZXRSZXBvcnQoKSB7CiAgICBjb25zdCByZXBvcnQgPSB7CiAgICAgIG1lYXN1cmVzOiBbLi4udGhpcy5tZWFzdXJlc10sCiAgICAgIGF2ZXJhZ2VzOiB7fQogICAgfTsKICAgIGNvbnN0IGdyb3VwZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgZm9yIChjb25zdCBtZWFzdXJlIG9mIHRoaXMubWVhc3VyZXMpIHsKICAgICAgaWYgKCFncm91cGVkLmhhcyhtZWFzdXJlLm5hbWUpKSB7CiAgICAgICAgZ3JvdXBlZC5zZXQobWVhc3VyZS5uYW1lLCBbXSk7CiAgICAgIH0KICAgICAgZ3JvdXBlZC5nZXQobWVhc3VyZS5uYW1lKS5wdXNoKG1lYXN1cmUuZHVyYXRpb24pOwogICAgfQogICAgZm9yIChjb25zdCBbbmFtZSwgZHVyYXRpb25zXSBvZiBncm91cGVkKSB7CiAgICAgIHJlcG9ydC5hdmVyYWdlc1tuYW1lXSA9IGR1cmF0aW9ucy5yZWR1Y2UoKGE1LCBiNSkgPT4gYTUgKyBiNSwgMCkgLyBkdXJhdGlvbnMubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlcG9ydDsKICB9CiAgc3RhdGljIGNsZWFyKCkgewogICAgdGhpcy5tYXJrcy5jbGVhcigpOwogICAgdGhpcy5tZWFzdXJlcyA9IFtdOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtcHJldmlldy9zdHlsZXMuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHByZXZpZXdTdHlsZXMgPSBbCiAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogIGlgCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgd2lkdGg6IDIwMHB4OwogICAgICBoZWlnaHQ6IDI2MHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTglKSIsICJoc2woMjE1IDIwJSAxNCUpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2UsIGJveC1zaGFkb3cgMC4ycyBlYXNlOwogICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xMikiLCAicmdiYSgwLCAwLCAwLCAwLjI0KSIpfTsKICAgIH0KCiAgICAucHJldmlldy1jb250YWluZXIuY2xpY2thYmxlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC5wcmV2aWV3LWNvbnRhaW5lci5jbGlja2FibGU6aG92ZXIgewogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7CiAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xMikiLCAicmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgfQoKICAgIC5wcmV2aWV3LWNvbnRhaW5lci5jbGlja2FibGU6aG92ZXIgLnByZXZpZXctb3ZlcmxheSB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICB9CgogICAgLnByZXZpZXctc3RhY2sgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC5wcmV2aWV3LXN0YWNrLm5vbi1hNCB7CiAgICAgIHBhZGRpbmc6IDEycHg7CiAgICB9CgogICAgLnByZXZpZXctY2FudmFzIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgbWF4LWhlaWdodDogMTAwJTsKICAgICAgd2lkdGg6IGF1dG87CiAgICAgIGhlaWdodDogYXV0bzsKICAgICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBhdXRvOwogICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgfQoKICAgIC5ub24tYTQgLnByZXZpZXctY2FudmFzIHsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDkyJSkiLCAiaHNsKDIxNyAyNSUgMjQlKSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgfQoKICAgIC5wcmV2aWV3LWluZm8gewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJvdHRvbTogOHB4OwogICAgICBsZWZ0OiA4cHg7CiAgICAgIHJpZ2h0OiA4cHg7CiAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSAvIDAuOTIpIiwgImhzbCgyMTUgMjAlIDEyJSAvIDAuOTIpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGdhcDogNnB4OwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsICJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTJweCk7CiAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgIHotaW5kZXg6IDEwOwogICAgfQoKICAgIC5wcmV2aWV3LWluZm8gZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1wYWdlcyB7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIH0KCiAgICAucHJldmlldy1vdmVybGF5IHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuNykiLCAicmdiYSgwLCAwLCAwLCAwLjgpIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgZ2FwOiA4cHg7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgICB6LWluZGV4OiAyMDsKICAgIH0KCiAgICAucHJldmlldy1vdmVybGF5IGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQoKICAgIC5wcmV2aWV3LW92ZXJsYXkgc3BhbiB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQoKICAgIC5wcmV2aWV3LWxvYWRpbmcsCiAgICAucHJldmlldy1lcnJvciB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgZ2FwOiAxMnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1sb2FkaW5nIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk5JSkiLCAiaHNsKDIxNSAyMCUgMTQlKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1lcnJvciB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MiUgOTglKSIsICJoc2woMCA2MiUgMjAlKSIpfTsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MiUgNDAlKSIsICJoc2woMCA3MCUgNjglKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1zcGlubmVyIHsKICAgICAgd2lkdGg6IDI0cHg7CiAgICAgIGhlaWdodDogMjRweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgODYlKSIsICJoc2woMjE3IDI1JSAyOCUpIil9OwogICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICB9CgogICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgIH0KICAgIH0KCiAgICAucHJldmlldy10ZXh0IHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIC5wcmV2aWV3LWVycm9yIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMzJweDsKICAgIH0KCiAgICAucHJldmlldy1wYWdlLWluZGljYXRvciB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiA4cHg7CiAgICAgIGxlZnQ6IDhweDsKICAgICAgcmlnaHQ6IDhweDsKICAgICAgcGFkZGluZzogNXB4IDhweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDAlIC8gMC43KSIsICJoc2woMCAwJSAxMDAlIC8gMC45KSIpfTsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJ3aGl0ZSIsICJoc2woMjE1IDIwJSAxMiUpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTJweCk7CiAgICAgIHotaW5kZXg6IDE1OwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMC4ycyBlYXNlOwogICAgfQoKICAgIEBrZXlmcmFtZXMgZmFkZUluIHsKICAgICAgZnJvbSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICAgIH0KICAgICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICB9CiAgICB9CgogICAgLyogUmVzcG9uc2l2ZSBzaXplcyAqLwogICAgOmhvc3QoW3NpemU9InNtYWxsIl0pIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgaGVpZ2h0OiAxOTVweDsKICAgIH0KCiAgICA6aG9zdChbc2l6ZT0ibGFyZ2UiXSkgLnByZXZpZXctY29udGFpbmVyIHsKICAgICAgd2lkdGg6IDI1MHB4OwogICAgICBoZWlnaHQ6IDMyNXB4OwogICAgfQoKICAgIC8qIEdyaWQgb3B0aW1pemF0aW9ucyAqLwogICAgOmhvc3QoW2dyaWQtbW9kZV0pIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgIHdpbGwtY2hhbmdlOiBhdXRvOwogICAgfQoKICAgIDpob3N0KFtncmlkLW1vZGVdKSAucHJldmlldy1jYW52YXMgewogICAgICBpbWFnZS1yZW5kZXJpbmc6IC13ZWJraXQtb3B0aW1pemUtY29udHJhc3Q7CiAgICAgIGltYWdlLXJlbmRlcmluZzogY3Jpc3AtZWRnZXM7CiAgICB9CiAgYApdOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXBkZi9kZWVzLXBkZi1wcmV2aWV3L2RlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW8gPSAoKSA9PiB7CiAgY29uc3Qgc2FtcGxlUGRmcyA9IFsKICAgICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvZXhhbXBsZXMvbGVhcm5pbmcvaGVsbG93b3JsZC5wZGYiLAogICAgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS93ZWIvY29tcHJlc3NlZC50cmFjZW1vbmtleS1wbGRpLTA5LnBkZiIKICBdOwogIGNvbnN0IGdlbmVyYXRlR3JpZEl0ZW1zID0gKGNvdW50MikgPT4gewogICAgY29uc3QgaXRlbXMgPSBbXTsKICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGNvdW50MjsgaTExKyspIHsKICAgICAgY29uc3QgcGRmVXJsID0gc2FtcGxlUGRmc1tpMTEgJSBzYW1wbGVQZGZzLmxlbmd0aF07CiAgICAgIGl0ZW1zLnB1c2goYjJgCiAgICAgICAgPGRlZXMtcGRmLXByZXZpZXcKICAgICAgICAgIHBkZlVybD0iJHtwZGZVcmx9IgogICAgICAgICAgbWF4UGFnZXM9IjMiCiAgICAgICAgICBzdGFja09mZnNldD0iNiIKICAgICAgICAgIGNsaWNrYWJsZT0idHJ1ZSIKICAgICAgICAgIGdyaWQtbW9kZQogICAgICAgICAgQHBkZi1wcmV2aWV3LWNsaWNrPSR7KGUxMSkgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJQREYgUHJldmlldyBjbGlja2VkOiIsIGUxMS5kZXRhaWwpOwogICAgICAgIGFsZXJ0KGBQREYgY2xpY2tlZDogJHtlMTEuZGV0YWlsLnBhZ2VDb3VudH0gcGFnZXNgKTsKICAgICAgfX0KICAgICAgICA+PC9kZWVzLXBkZi1wcmV2aWV3PgogICAgICBgKTsKICAgIH0KICAgIHJldHVybiBpdGVtczsKICB9OwogIHJldHVybiBiMmAKICAgIDxzdHlsZT4KICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICAgIH0KCiAgICAgIC5kZW1vLXNlY3Rpb24gewogICAgICAgIG1hcmdpbi1ib3R0b206IDYwcHg7CiAgICAgIH0KCiAgICAgIGgzIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CgogICAgICAucHJldmlldy1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAucHJldmlldy1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbWluLXdpZHRoOiAxMDBweDsKICAgICAgfQoKICAgICAgLnBlcmZvcm1hbmNlLXN0YXRzIHsKICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgLnN0YXRzLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTUwcHgsIDFmcikpOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICB9CgogICAgICAuc3RhdC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5zdGF0LWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5zdGF0LXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgzPlNpbmdsZSBQREYgUHJldmlldyB3aXRoIFN0YWNrZWQgUGFnZXM8L2gzPgogICAgICAgIDxkZWVzLXBkZi1wcmV2aWV3CiAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS93ZWIvY29tcHJlc3NlZC50cmFjZW1vbmtleS1wbGRpLTA5LnBkZiIKICAgICAgICAgIG1heFBhZ2VzPSIzIgogICAgICAgICAgc3RhY2tPZmZzZXQ9IjgiCiAgICAgICAgICBjbGlja2FibGU9InRydWUiCiAgICAgICAgPjwvZGVlcy1wZGYtcHJldmlldz4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMz5EaWZmZXJlbnQgU2l6ZXM8L2gzPgogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctbGFiZWwiPlNtYWxsOjwvZGl2PgogICAgICAgICAgPGRlZXMtcGRmLXByZXZpZXcKICAgICAgICAgICAgc2l6ZT0ic21hbGwiCiAgICAgICAgICAgIHBkZlVybD0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL2V4YW1wbGVzL2xlYXJuaW5nL2hlbGxvd29ybGQucGRmIgogICAgICAgICAgICBtYXhQYWdlcz0iMiIKICAgICAgICAgICAgc3RhY2tPZmZzZXQ9IjYiCiAgICAgICAgICAgIGNsaWNrYWJsZT0idHJ1ZSIKICAgICAgICAgID48L2RlZXMtcGRmLXByZXZpZXc+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctbGFiZWwiPkRlZmF1bHQ6PC9kaXY+CiAgICAgICAgICA8ZGVlcy1wZGYtcHJldmlldwogICAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgICAgbWF4UGFnZXM9IjMiCiAgICAgICAgICAgIHN0YWNrT2Zmc2V0PSI4IgogICAgICAgICAgICBjbGlja2FibGU9InRydWUiCiAgICAgICAgICA+PC9kZWVzLXBkZi1wcmV2aWV3PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWxhYmVsIj5MYXJnZTo8L2Rpdj4KICAgICAgICAgIDxkZWVzLXBkZi1wcmV2aWV3CiAgICAgICAgICAgIHNpemU9ImxhcmdlIgogICAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgICAgbWF4UGFnZXM9IjQiCiAgICAgICAgICAgIHN0YWNrT2Zmc2V0PSIxMCIKICAgICAgICAgICAgY2xpY2thYmxlPSJ0cnVlIgogICAgICAgICAgPjwvZGVlcy1wZGYtcHJldmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMz5Ob24tQ2xpY2thYmxlIFByZXZpZXc8L2gzPgogICAgICAgIDxkZWVzLXBkZi1wcmV2aWV3CiAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgIG1heFBhZ2VzPSIzIgogICAgICAgICAgc3RhY2tPZmZzZXQ9IjgiCiAgICAgICAgICBjbGlja2FibGU9ImZhbHNlIgogICAgICAgID48L2RlZXMtcGRmLXByZXZpZXc+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDM+UGVyZm9ybWFuY2UgR3JpZCAtIDUwIFBERnMgd2l0aCBMYXp5IExvYWRpbmc8L2gzPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAyMHB4OyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiAjNjY2OyI+CiAgICAgICAgICBUaGlzIGdyaWQgZGVtb25zdHJhdGVzIHRoZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIHdpdGggNTAgUERGIHByZXZpZXdzLgogICAgICAgICAgU2Nyb2xsIHRvIHNlZSBsYXp5IGxvYWRpbmcgaW4gYWN0aW9uIC0gcHJldmlld3MgcmVuZGVyIG9ubHkgd2hlbiB2aXNpYmxlLgogICAgICAgIDwvcD4KCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1ncmlkIj4KICAgICAgICAgICR7Z2VuZXJhdGVHcmlkSXRlbXMoNTApfQogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmb3JtYW5jZS1zdGF0cyI+CiAgICAgICAgICA8aDQ+UGVyZm9ybWFuY2UgRmVhdHVyZXM8L2g0PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHMtZ3JpZCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtbGFiZWwiPkxhenkgTG9hZGluZzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC12YWx1ZSI+4pyTIEVuYWJsZWQ8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LWxhYmVsIj5DYW52YXMgUG9vbGluZzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC12YWx1ZSI+4pyTIEFjdGl2ZTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtbGFiZWwiPk1lbW9yeSBNYW5hZ2VtZW50PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LXZhbHVlIj7inJMgT3B0aW1pemVkPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC1sYWJlbCI+SW50ZXJzZWN0aW9uIE9ic2VydmVyPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LXZhbHVlIj4yMDBweCBtYXJnaW48L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtcHJldmlldy9jb21wb25lbnQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKdmFyIF9fZXNEZWNvcmF0ZTY4ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2OSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1BkZlByZXZpZXcgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXBkZi1wcmV2aWV3IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfcGRmVXJsX2RlY29yYXRvcnM7CiAgbGV0IF9wZGZVcmxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRQcmV2aWV3UGFnZV9kZWNvcmF0b3JzOwogIGxldCBfY3VycmVudFByZXZpZXdQYWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFByZXZpZXdQYWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGlja2FibGVfZGVjb3JhdG9yczsKICBsZXQgX2NsaWNrYWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsaWNrYWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGFnZUNvdW50X2RlY29yYXRvcnM7CiAgbGV0IF9wYWdlQ291bnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wYWdlQ291bnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xvYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX2xvYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZW5kZXJlZF9kZWNvcmF0b3JzOwogIGxldCBfcmVuZGVyZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZW5kZXJlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXJyb3JfZGVjb3JhdG9yczsKICBsZXQgX2Vycm9yX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXJyb3JfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzSG92ZXJpbmdfZGVjb3JhdG9yczsKICBsZXQgX2lzSG92ZXJpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0hvdmVyaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0E0Rm9ybWF0X2RlY29yYXRvcnM7CiAgbGV0IF9pc0E0Rm9ybWF0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNBNEZvcm1hdF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUGRmUHJldmlldzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9wZGZVcmxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9jdXJyZW50UHJldmlld1BhZ2VfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9jbGlja2FibGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfcGFnZUNvdW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfbG9hZGluZ19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9yZW5kZXJlZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9lcnJvcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9pc0hvdmVyaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2lzQTRGb3JtYXRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfcGRmVXJsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBkZlVybCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGRmVXJsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBkZlVybCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGRmVXJsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BkZlVybF9pbml0aWFsaXplcnMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfY3VycmVudFByZXZpZXdQYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRQcmV2aWV3UGFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudFByZXZpZXdQYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1cnJlbnRQcmV2aWV3UGFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VycmVudFByZXZpZXdQYWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRQcmV2aWV3UGFnZV9pbml0aWFsaXplcnMsIF9jdXJyZW50UHJldmlld1BhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfY2xpY2thYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNsaWNrYWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY2xpY2thYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNsaWNrYWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY2xpY2thYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NsaWNrYWJsZV9pbml0aWFsaXplcnMsIF9jbGlja2FibGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfcGFnZUNvdW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBhZ2VDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGFnZUNvdW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBhZ2VDb3VudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGFnZUNvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BhZ2VDb3VudF9pbml0aWFsaXplcnMsIF9wYWdlQ291bnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfbG9hZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsb2FkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsb2FkaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxvYWRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxvYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbG9hZGluZ19pbml0aWFsaXplcnMsIF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjgodGhpcywgbnVsbCwgX3JlbmRlcmVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJlbmRlcmVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZW5kZXJlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZW5kZXJlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucmVuZGVyZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVuZGVyZWRfaW5pdGlhbGl6ZXJzLCBfcmVuZGVyZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfZXJyb3JfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZXJyb3IiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVycm9yIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmVycm9yLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5lcnJvciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lcnJvcl9pbml0aWFsaXplcnMsIF9lcnJvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY4KHRoaXMsIG51bGwsIF9pc0hvdmVyaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzSG92ZXJpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzSG92ZXJpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNIb3ZlcmluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNIb3ZlcmluZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0hvdmVyaW5nX2luaXRpYWxpemVycywgX2lzSG92ZXJpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfaXNBNEZvcm1hdF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0E0Rm9ybWF0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0E0Rm9ybWF0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzQTRGb3JtYXQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzQTRGb3JtYXQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNBNEZvcm1hdF9pbml0aWFsaXplcnMsIF9pc0E0Rm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjgobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzUGRmUHJldmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJQREYiOwogICAgc3RhdGljIHN0eWxlcyA9IHByZXZpZXdTdHlsZXM7CiAgICAjcGRmVXJsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9wZGZVcmxfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgcGRmVXJsKCkgewogICAgICByZXR1cm4gdGhpcy4jcGRmVXJsX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGRmVXJsKHZhbHVlMikgewogICAgICB0aGlzLiNwZGZVcmxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjdXJyZW50UHJldmlld1BhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9jdXJyZW50UHJldmlld1BhZ2VfaW5pdGlhbGl6ZXJzLCAxKSk7CiAgICBnZXQgY3VycmVudFByZXZpZXdQYWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFByZXZpZXdQYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VycmVudFByZXZpZXdQYWdlKHZhbHVlMikgewogICAgICB0aGlzLiNjdXJyZW50UHJldmlld1BhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjbGlja2FibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9jdXJyZW50UHJldmlld1BhZ2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9jbGlja2FibGVfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgY2xpY2thYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jY2xpY2thYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2xpY2thYmxlKHZhbHVlMikgewogICAgICB0aGlzLiNjbGlja2FibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwYWdlQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9jbGlja2FibGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9wYWdlQ291bnRfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgcGFnZUNvdW50KCkgewogICAgICByZXR1cm4gdGhpcy4jcGFnZUNvdW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGFnZUNvdW50KHZhbHVlMikgewogICAgICB0aGlzLiNwYWdlQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfcGFnZUNvdW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfbG9hZGluZ19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgbG9hZGluZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsb2FkaW5nKHZhbHVlMikgewogICAgICB0aGlzLiNsb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcmVuZGVyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfcmVuZGVyZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHJlbmRlcmVkKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVuZGVyZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCByZW5kZXJlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcmVuZGVyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNlcnJvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjkodGhpcywgX3JlbmRlcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfZXJyb3JfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGVycm9yKCkgewogICAgICByZXR1cm4gdGhpcy4jZXJyb3JfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlcnJvcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jZXJyb3JfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0hvdmVyaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfZXJyb3JfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9pc0hvdmVyaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0hvdmVyaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNIb3ZlcmluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzSG92ZXJpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzSG92ZXJpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0E0Rm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfaXNIb3ZlcmluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjkodGhpcywgX2lzQTRGb3JtYXRfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgaXNBNEZvcm1hdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzQTRGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0E0Rm9ybWF0KHZhbHVlMikgewogICAgICB0aGlzLiNpc0E0Rm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICByZW5kZXJQYWdlc1Rhc2sgPSAoX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfaXNBNEZvcm1hdF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgcmVuZGVyUGFnZXNRdWV1ZWQgPSBmYWxzZTsKICAgIG9ic2VydmVyOwogICAgcGRmRG9jdW1lbnQ7CiAgICBjYW52YXNlcyA9IFtdOwogICAgcmVzaXplT2JzZXJ2ZXI7CiAgICBwcmV2aWV3Q29udGFpbmVyID0gbnVsbDsKICAgIHN0YWNrRWxlbWVudCA9IG51bGw7CiAgICBsb2FkZWRQZGZVcmwgPSBudWxsOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJwcmV2aWV3LWNvbnRhaW5lciAke3RoaXMubG9hZGluZyA/ICJsb2FkaW5nIiA6ICIifSAke3RoaXMuZXJyb3IgPyAiZXJyb3IiIDogIiJ9ICR7dGhpcy5jbGlja2FibGUgPyAiY2xpY2thYmxlIiA6ICIifSIKICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUNsaWNrfQogICAgICAgIEBtb3VzZWVudGVyPSR7dGhpcy5oYW5kbGVNb3VzZUVudGVyfQogICAgICAgIEBtb3VzZWxlYXZlPSR7dGhpcy5oYW5kbGVNb3VzZUxlYXZlfQogICAgICAgIEBtb3VzZW1vdmU9JHt0aGlzLmhhbmRsZU1vdXNlTW92ZX0KICAgICAgPgogICAgICAgICR7dGhpcy5sb2FkaW5nID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWxvYWRpbmciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LXNwaW5uZXIiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LXRleHQiPkxvYWRpbmcgcHJldmlldy4uLjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQoKICAgICAgICAke3RoaXMuZXJyb3IgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctZXJyb3IiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpGaWxlWCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctdGV4dCI+RmFpbGVkIHRvIGxvYWQgUERGPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgIDogIiJ9CgogICAgICAgICR7IXRoaXMubG9hZGluZyAmJiAhdGhpcy5lcnJvciA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1zdGFjayAkeyF0aGlzLmlzQTRGb3JtYXQgPyAibm9uLWE0IiA6ICIifSI+CiAgICAgICAgICAgIDxjYW52YXMKICAgICAgICAgICAgICBjbGFzcz0icHJldmlldy1jYW52YXMiCiAgICAgICAgICAgICAgZGF0YS1wYWdlPSIke3RoaXMuY3VycmVudFByZXZpZXdQYWdlfSIKICAgICAgICAgICAgPjwvY2FudmFzPgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgJHt0aGlzLnBhZ2VDb3VudCA+IDEgJiYgdGhpcy5pc0hvdmVyaW5nID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcGFnZS1pbmRpY2F0b3IiPgogICAgICAgICAgICAgIFBhZ2UgJHt0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZX0gb2YgJHt0aGlzLnBhZ2VDb3VudH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgJHt0aGlzLnBhZ2VDb3VudCA+IDAgJiYgIXRoaXMuaXNIb3ZlcmluZyA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWluZm8iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkZpbGVUZXh0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJldmlldy1wYWdlcyI+JHt0aGlzLnBhZ2VDb3VudH0gcGFnZSR7dGhpcy5wYWdlQ291bnQgPiAxID8gInMiIDogIiJ9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KCiAgICAgICAgICAke3RoaXMuY2xpY2thYmxlID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctb3ZlcmxheSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6RXllIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3Bhbj5WaWV3IFBERjwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBoYW5kbGVNb3VzZUVudGVyKCkgewogICAgICB0aGlzLmlzSG92ZXJpbmcgPSB0cnVlOwogICAgfQogICAgaGFuZGxlTW91c2VMZWF2ZSgpIHsKICAgICAgdGhpcy5pc0hvdmVyaW5nID0gZmFsc2U7CiAgICAgIGlmICh0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZSAhPT0gMSkgewogICAgICAgIHRoaXMuY3VycmVudFByZXZpZXdQYWdlID0gMTsKICAgICAgICB2b2lkIHRoaXMuc2NoZWR1bGVSZW5kZXJQYWdlcygpOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVNb3VzZU1vdmUoZTExKSB7CiAgICAgIGlmICghdGhpcy5pc0hvdmVyaW5nIHx8IHRoaXMucGFnZUNvdW50IDw9IDEpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCByZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgY29uc3QgeDMgPSBlMTEuY2xpZW50WCAtIHJlY3QubGVmdDsKICAgICAgY29uc3Qgd2lkdGggPSByZWN0LndpZHRoOwogICAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgeDMgLyB3aWR0aCkpOwogICAgICBjb25zdCBuZXdQYWdlID0gTWF0aC5jZWlsKHBlcmNlbnRhZ2UgKiB0aGlzLnBhZ2VDb3VudCkgfHwgMTsKICAgICAgaWYgKG5ld1BhZ2UgIT09IHRoaXMuY3VycmVudFByZXZpZXdQYWdlKSB7CiAgICAgICAgdGhpcy5jdXJyZW50UHJldmlld1BhZ2UgPSBuZXdQYWdlOwogICAgICAgIHZvaWQgdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB0aGlzLnNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTsKICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgdGhpcy5jYWNoZUVsZW1lbnRzKCk7CiAgICAgIHRoaXMuc2V0dXBSZXNpemVPYnNlcnZlcigpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuY2xlYW51cCgpOwogICAgICBpZiAodGhpcy5vYnNlcnZlcikgewogICAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICB9CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IHZvaWQgMDsKICAgIH0KICAgIHNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSB7CiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7CiAgICAgICAgcm9vdDogbnVsbCwKICAgICAgICByb290TWFyZ2luOiAiMjAwcHgiLAogICAgICAgIHRocmVzaG9sZDogMC4wMQogICAgICB9OwogICAgICB0aGlzLm9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHRocm90dGxlMigoZW50cmllcykgPT4gewogICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykgewogICAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nICYmICF0aGlzLnJlbmRlcmVkICYmIHRoaXMucGRmVXJsKSB7CiAgICAgICAgICAgIHRoaXMubG9hZEFuZFJlbmRlclByZXZpZXcoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoIWVudHJ5LmlzSW50ZXJzZWN0aW5nICYmIHRoaXMucmVuZGVyZWQpIHsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sIDEwMCksIG9wdGlvbnMpOwogICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcyk7CiAgICB9CiAgICBhc3luYyBsb2FkQW5kUmVuZGVyUHJldmlldygpIHsKICAgICAgaWYgKHRoaXMucmVuZGVyZWQgfHwgdGhpcy5sb2FkaW5nKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgICAgdGhpcy5lcnJvciA9IGZhbHNlOwogICAgICBQZXJmb3JtYW5jZU1vbml0b3IubWFyayhgcHJldmlldy1sb2FkLSR7dGhpcy5wZGZVcmx9YCk7CiAgICAgIHRyeSB7CiAgICAgICAgdGhpcy5wZGZEb2N1bWVudCA9IGF3YWl0IFBkZk1hbmFnZXIubG9hZERvY3VtZW50KHRoaXMucGRmVXJsKTsKICAgICAgICB0aGlzLnBhZ2VDb3VudCA9IHRoaXMucGRmRG9jdW1lbnQubnVtUGFnZXM7CiAgICAgICAgdGhpcy5jdXJyZW50UHJldmlld1BhZ2UgPSAxOwogICAgICAgIHRoaXMubG9hZGVkUGRmVXJsID0gdGhpcy5wZGZVcmw7CiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICB0aGlzLmNhY2hlRWxlbWVudHMoKTsKICAgICAgICBhd2FpdCB0aGlzLnNjaGVkdWxlUmVuZGVyUGFnZXMoKTsKICAgICAgICB0aGlzLnJlbmRlcmVkID0gdHJ1ZTsKICAgICAgICBjb25zdCBkdXJhdGlvbiA9IFBlcmZvcm1hbmNlTW9uaXRvci5tZWFzdXJlKGBwcmV2aWV3LXJlbmRlci0ke3RoaXMucGRmVXJsfWAsIGBwcmV2aWV3LWxvYWQtJHt0aGlzLnBkZlVybH1gKTsKICAgICAgICBjb25zb2xlLmxvZyhgUERGIHByZXZpZXcgcmVuZGVyZWQgaW4gJHtkdXJhdGlvbn1tc2ApOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIFBERiBwcmV2aWV3OiIsIGVycm9yKTsKICAgICAgICB0aGlzLmVycm9yID0gdHJ1ZTsKICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgc2NoZWR1bGVSZW5kZXJQYWdlcygpIHsKICAgICAgaWYgKCF0aGlzLnBkZkRvY3VtZW50KSB7CiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwogICAgICB9CiAgICAgIGlmICh0aGlzLnJlbmRlclBhZ2VzVGFzaykgewogICAgICAgIHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQgPSB0cnVlOwogICAgICAgIHJldHVybiB0aGlzLnJlbmRlclBhZ2VzVGFzazsKICAgICAgfQogICAgICB0aGlzLnJlbmRlclBhZ2VzVGFzayA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IHRoaXMucGVyZm9ybVJlbmRlclBhZ2VzKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byByZW5kZXIgUERGIHByZXZpZXcgcGFnZXM6IiwgZXJyb3IpOwogICAgICAgIH0KICAgICAgfSkoKS5maW5hbGx5KCgpID0+IHsKICAgICAgICB0aGlzLnJlbmRlclBhZ2VzVGFzayA9IG51bGw7CiAgICAgICAgaWYgKHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQpIHsKICAgICAgICAgIHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQgPSBmYWxzZTsKICAgICAgICAgIHZvaWQgdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIHRoaXMucmVuZGVyUGFnZXNUYXNrOwogICAgfQogICAgYXN5bmMgcGVyZm9ybVJlbmRlclBhZ2VzKCkgewogICAgICBpZiAoIXRoaXMucGRmRG9jdW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICBjb25zdCBjYW52YXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wcmV2aWV3LWNhbnZhcyIpOwogICAgICBpZiAoIWNhbnZhcykgewogICAgICAgIGNvbnNvbGUud2FybigiUHJldmlldyBjYW52YXMgbm90IGZvdW5kIGluIERPTSIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLmNsZWFyQ2FudmFzZXMoKTsKICAgICAgdGhpcy5jYWNoZUVsZW1lbnRzKCk7CiAgICAgIGNvbnN0IHsgYXZhaWxhYmxlV2lkdGgsIGF2YWlsYWJsZUhlaWdodCB9ID0gdGhpcy5nZXRBdmFpbGFibGVTaXplKCk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgcGFnZU51bSA9IHRoaXMuY3VycmVudFByZXZpZXdQYWdlOwogICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UocGFnZU51bSk7CiAgICAgICAgY29uc3QgaW5pdGlhbFZpZXdwb3J0ID0gcGFnZS5nZXRWaWV3cG9ydCh7IHNjYWxlOiAxIH0pOwogICAgICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gaW5pdGlhbFZpZXdwb3J0LmhlaWdodCAvIGluaXRpYWxWaWV3cG9ydC53aWR0aDsKICAgICAgICBjb25zdCBhNFBvcnRyYWl0UmF0aW8gPSAxLjQxNDsKICAgICAgICBjb25zdCBhNExhbmRzY2FwZVJhdGlvID0gMC43MDc7CiAgICAgICAgY29uc3QgbGV0dGVyUG9ydHJhaXRSYXRpbyA9IDEuMjk0OwogICAgICAgIGNvbnN0IGxldHRlckxhbmRzY2FwZVJhdGlvID0gMC43NzM7CiAgICAgICAgY29uc3QgdG9sZXJhbmNlID0gMC4wNTsKICAgICAgICBjb25zdCBpc0E0UG9ydHJhaXQgPSBNYXRoLmFicyhhc3BlY3RSYXRpbyAtIGE0UG9ydHJhaXRSYXRpbykgPCBhNFBvcnRyYWl0UmF0aW8gKiB0b2xlcmFuY2U7CiAgICAgICAgY29uc3QgaXNBNExhbmRzY2FwZSA9IE1hdGguYWJzKGFzcGVjdFJhdGlvIC0gYTRMYW5kc2NhcGVSYXRpbykgPCBhNExhbmRzY2FwZVJhdGlvICogdG9sZXJhbmNlOwogICAgICAgIGNvbnN0IGlzTGV0dGVyUG9ydHJhaXQgPSBNYXRoLmFicyhhc3BlY3RSYXRpbyAtIGxldHRlclBvcnRyYWl0UmF0aW8pIDwgbGV0dGVyUG9ydHJhaXRSYXRpbyAqIHRvbGVyYW5jZTsKICAgICAgICBjb25zdCBpc0xldHRlckxhbmRzY2FwZSA9IE1hdGguYWJzKGFzcGVjdFJhdGlvIC0gbGV0dGVyTGFuZHNjYXBlUmF0aW8pIDwgbGV0dGVyTGFuZHNjYXBlUmF0aW8gKiB0b2xlcmFuY2U7CiAgICAgICAgdGhpcy5pc0E0Rm9ybWF0ID0gaXNBNFBvcnRyYWl0IHx8IGlzQTRMYW5kc2NhcGUgfHwgaXNMZXR0ZXJQb3J0cmFpdCB8fCBpc0xldHRlckxhbmRzY2FwZTsKICAgICAgICBjb25zb2xlLmxvZyhgUERGIGFzcGVjdCByYXRpbzogJHthc3BlY3RSYXRpby50b0ZpeGVkKDMpfSwgc3RhbmRhcmQgZm9ybWF0OiAke3RoaXMuaXNBNEZvcm1hdH1gKTsKICAgICAgICBjb25zdCBhZGp1c3RlZFdpZHRoID0gdGhpcy5pc0E0Rm9ybWF0ID8gYXZhaWxhYmxlV2lkdGggOiBhdmFpbGFibGVXaWR0aCAtIDI0OwogICAgICAgIGNvbnN0IGFkanVzdGVkSGVpZ2h0ID0gdGhpcy5pc0E0Rm9ybWF0ID8gYXZhaWxhYmxlSGVpZ2h0IDogYXZhaWxhYmxlSGVpZ2h0IC0gMjQ7CiAgICAgICAgY29uc3Qgc2NhbGVYID0gYWRqdXN0ZWRXaWR0aCA+IDAgPyBhZGp1c3RlZFdpZHRoIC8gaW5pdGlhbFZpZXdwb3J0LndpZHRoIDogMDsKICAgICAgICBjb25zdCBzY2FsZVkgPSBhZGp1c3RlZEhlaWdodCA+IDAgPyBhZGp1c3RlZEhlaWdodCAvIGluaXRpYWxWaWV3cG9ydC5oZWlnaHQgOiAwOwogICAgICAgIGNvbnN0IGJhc2VTY2FsZSA9IE1hdGgubWluKHNjYWxlWCB8fCAwLjUsIHNjYWxlWSB8fCBzY2FsZVggfHwgMC41KTsKICAgICAgICBjb25zdCByZW5kZXJTY2FsZSA9IE1hdGgubWluKGJhc2VTY2FsZSAqIDIsIDMpOwogICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHJlbmRlclNjYWxlKSB8fCByZW5kZXJTY2FsZSA8PSAwKSB7CiAgICAgICAgICBwYWdlLmNsZWFudXA/LigpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHBhZ2UuZ2V0Vmlld3BvcnQoeyBzY2FsZTogcmVuZGVyU2NhbGUgfSk7CiAgICAgICAgY29uc3QgcG9vbGVkQ2FudmFzID0gQ2FudmFzUG9vbC5hY3F1aXJlKHZpZXdwb3J0LndpZHRoLCB2aWV3cG9ydC5oZWlnaHQpOwogICAgICAgIHRoaXMuY2FudmFzZXMucHVzaChwb29sZWRDYW52YXMpOwogICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7CiAgICAgICAgICBjYW52YXNDb250ZXh0OiBwb29sZWRDYW52YXMuY3R4LAogICAgICAgICAgdmlld3BvcnQKICAgICAgICB9OwogICAgICAgIGF3YWl0IHBhZ2UucmVuZGVyKHJlbmRlckNvbnRleHQpLnByb21pc2U7CiAgICAgICAgY2FudmFzLndpZHRoID0gdmlld3BvcnQud2lkdGg7CiAgICAgICAgY2FudmFzLmhlaWdodCA9IHZpZXdwb3J0LmhlaWdodDsKICAgICAgICBjb25zdCBkaXNwbGF5V2lkdGggPSBhZGp1c3RlZFdpZHRoOwogICAgICAgIGNvbnN0IGRpc3BsYXlIZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQgLyB2aWV3cG9ydC53aWR0aCAqIGFkanVzdGVkV2lkdGg7CiAgICAgICAgaWYgKGRpc3BsYXlIZWlnaHQgPiBhZGp1c3RlZEhlaWdodCkgewogICAgICAgICAgY29uc3QgYWx0RGlzcGxheUhlaWdodCA9IGFkanVzdGVkSGVpZ2h0OwogICAgICAgICAgY29uc3QgYWx0RGlzcGxheVdpZHRoID0gdmlld3BvcnQud2lkdGggLyB2aWV3cG9ydC5oZWlnaHQgKiBhZGp1c3RlZEhlaWdodDsKICAgICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke2FsdERpc3BsYXlXaWR0aH1weGA7CiAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7YWx0RGlzcGxheUhlaWdodH1weGA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke2Rpc3BsYXlXaWR0aH1weGA7CiAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7ZGlzcGxheUhlaWdodH1weGA7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgIGlmIChjdHgpIHsKICAgICAgICAgIGN0eC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSB0cnVlOwogICAgICAgICAgY3R4LmltYWdlU21vb3RoaW5nUXVhbGl0eSA9ICJoaWdoIjsKICAgICAgICAgIGN0eC5kcmF3SW1hZ2UocG9vbGVkQ2FudmFzLmNhbnZhcywgMCwgMCk7CiAgICAgICAgfQogICAgICAgIHBhZ2UuY2xlYW51cCgpOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byByZW5kZXIgcGFnZSAke3RoaXMuY3VycmVudFByZXZpZXdQYWdlfTpgLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICAgIGNsZWFyQ2FudmFzZXMoKSB7CiAgICAgIGZvciAoY29uc3QgcG9vbGVkQ2FudmFzIG9mIHRoaXMuY2FudmFzZXMpIHsKICAgICAgICBDYW52YXNQb29sLnJlbGVhc2UocG9vbGVkQ2FudmFzKTsKICAgICAgfQogICAgICB0aGlzLmNhbnZhc2VzID0gW107CiAgICB9CiAgICBjbGVhbnVwKCkgewogICAgICB0aGlzLmNsZWFyQ2FudmFzZXMoKTsKICAgICAgaWYgKHRoaXMucGRmRG9jdW1lbnQpIHsKICAgICAgICBQZGZNYW5hZ2VyLnJlbGVhc2VEb2N1bWVudCh0aGlzLmxvYWRlZFBkZlVybCA/PyB0aGlzLnBkZlVybCk7CiAgICAgICAgdGhpcy5wZGZEb2N1bWVudCA9IG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5yZW5kZXJQYWdlc1F1ZXVlZCA9IGZhbHNlOwogICAgICB0aGlzLnBhZ2VDb3VudCA9IDA7CiAgICAgIHRoaXMuY3VycmVudFByZXZpZXdQYWdlID0gMTsKICAgICAgdGhpcy5pc0hvdmVyaW5nID0gZmFsc2U7CiAgICAgIHRoaXMuaXNBNEZvcm1hdCA9IHRydWU7CiAgICAgIHRoaXMucHJldmlld0NvbnRhaW5lciA9IG51bGw7CiAgICAgIHRoaXMuc3RhY2tFbGVtZW50ID0gbnVsbDsKICAgICAgdGhpcy5sb2FkZWRQZGZVcmwgPSBudWxsOwogICAgICB0aGlzLnJlbmRlcmVkID0gZmFsc2U7CiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICB0aGlzLmVycm9yID0gZmFsc2U7CiAgICB9CiAgICBoYW5kbGVDbGljaygpIHsKICAgICAgaWYgKCF0aGlzLmNsaWNrYWJsZSkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInBkZi1wcmV2aWV3LWNsaWNrIiwgewogICAgICAgIGRldGFpbDogewogICAgICAgICAgcGRmVXJsOiB0aGlzLnBkZlVybCwKICAgICAgICAgIHBhZ2VDb3VudDogdGhpcy5wYWdlQ291bnQKICAgICAgICB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygicGRmVXJsIikgJiYgdGhpcy5wZGZVcmwpIHsKICAgICAgICBjb25zdCBwcmV2aW91c1VybCA9IGNoYW5nZWRQcm9wZXJ0aWVzLmdldCgicGRmVXJsIik7CiAgICAgICAgaWYgKHByZXZpb3VzVXJsKSB7CiAgICAgICAgICBQZGZNYW5hZ2VyLnJlbGVhc2VEb2N1bWVudChwcmV2aW91c1VybCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuY2xlYW51cCgpOwogICAgICAgIHRoaXMucmVuZGVyZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZSA9IDE7CiAgICAgICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHsKICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgaWYgKHJlY3QudG9wIDwgd2luZG93LmlubmVySGVpZ2h0ICYmIHJlY3QuYm90dG9tID4gMCkgewogICAgICAgICAgICB0aGlzLmxvYWRBbmRSZW5kZXJQcmV2aWV3KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImN1cnJlbnRQcmV2aWV3UGFnZSIpICYmIHRoaXMucmVuZGVyZWQpIHsKICAgICAgICBhd2FpdCB0aGlzLnNjaGVkdWxlUmVuZGVyUGFnZXMoKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBQcm92aWRlIGNvbnRleHQgbWVudSBpdGVtcyBmb3IgcmlnaHQtY2xpY2sgZnVuY3Rpb25hbGl0eQogICAgICovCiAgICBnZXRDb250ZXh0TWVudUl0ZW1zKCkgewogICAgICBjb25zdCBpdGVtcyA9IFtdOwogICAgICBpZiAodGhpcy5jbGlja2FibGUpIHsKICAgICAgICBpdGVtcy5wdXNoKHsKICAgICAgICAgIG5hbWU6ICJWaWV3IFBERiIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpFeWUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9KTsKICAgICAgfQogICAgICBpdGVtcy5wdXNoKHsKICAgICAgICBuYW1lOiAiT3BlbiBQREYgaW4gTmV3IFRhYiIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6RXh0ZXJuYWxMaW5rIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMucGRmVXJsLCAiX2JsYW5rIik7CiAgICAgICAgfQogICAgICB9LCB7IGRpdmlkZXI6IHRydWUgfSwgewogICAgICAgIG5hbWU6ICJDb3B5IFBERiBVUkwiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOkNvcHkiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5wZGZVcmwpOwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIG5hbWU6ICJEb3dubG9hZCBQREYiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOkRvd25sb2FkIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IGxpbmszID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwogICAgICAgICAgbGluazMuaHJlZiA9IHRoaXMucGRmVXJsOwogICAgICAgICAgbGluazMuZG93bmxvYWQgPSB0aGlzLnBkZlVybC5zcGxpdCgiLyIpLnBvcCgpIHx8ICJkb2N1bWVudC5wZGYiOwogICAgICAgICAgbGluazMuY2xpY2soKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBpZiAodGhpcy5wYWdlQ291bnQgPiAwKSB7CiAgICAgICAgaXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSwgewogICAgICAgICAgbmFtZTogYCR7dGhpcy5wYWdlQ291bnR9IHBhZ2Uke3RoaXMucGFnZUNvdW50ID4gMSA/ICJzIiA6ICIifWAsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpGaWxlVGV4dCIsCiAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBpdGVtczsKICAgIH0KICAgIGNhY2hlRWxlbWVudHMoKSB7CiAgICAgIGlmICghdGhpcy5wcmV2aWV3Q29udGFpbmVyKSB7CiAgICAgICAgdGhpcy5wcmV2aWV3Q29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIucHJldmlldy1jb250YWluZXIiKTsKICAgICAgfQogICAgICBpZiAoIXRoaXMuc3RhY2tFbGVtZW50KSB7CiAgICAgICAgdGhpcy5zdGFja0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wcmV2aWV3LXN0YWNrIik7CiAgICAgIH0KICAgIH0KICAgIHNldHVwUmVzaXplT2JzZXJ2ZXIoKSB7CiAgICAgIGlmICghdGhpcy5wcmV2aWV3Q29udGFpbmVyIHx8IHRoaXMucmVzaXplT2JzZXJ2ZXIpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHsKICAgICAgICBpZiAodGhpcy5yZW5kZXJlZCAmJiB0aGlzLnBkZkRvY3VtZW50ICYmICF0aGlzLmxvYWRpbmcpIHsKICAgICAgICAgIHZvaWQgdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMpOwogICAgfQogICAgZ2V0QXZhaWxhYmxlU2l6ZSgpIHsKICAgICAgaWYgKCF0aGlzLnN0YWNrRWxlbWVudCkgewogICAgICAgIHRoaXMuc3RhY2tFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIucHJldmlldy1zdGFjayIpOwogICAgICB9CiAgICAgIGlmICghdGhpcy5zdGFja0VsZW1lbnQpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgYXZhaWxhYmxlV2lkdGg6IDIwMCwKICAgICAgICAgIC8vIEZ1bGwgY29udGFpbmVyIHdpZHRoCiAgICAgICAgICBhdmFpbGFibGVIZWlnaHQ6IDI2MAogICAgICAgICAgLy8gRnVsbCBjb250YWluZXIgaGVpZ2h0CiAgICAgICAgfTsKICAgICAgfQogICAgICBjb25zdCByZWN0ID0gdGhpcy5zdGFja0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gTWF0aC5tYXgocmVjdC53aWR0aCwgMCkgfHwgMjAwOwogICAgICBjb25zdCBhdmFpbGFibGVIZWlnaHQgPSBNYXRoLm1heChyZWN0LmhlaWdodCwgMCkgfHwgMjYwOwogICAgICByZXR1cm4geyBhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0IH07CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczY5KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzUGRmUHJldmlldzIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXBkZi9kZWVzLXBkZi12aWV3ZXIvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciB2aWV3ZXJTdHlsZXMgPSBbCiAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogIGlgCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiA2MDBweDsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICBjb250YWluOiBsYXlvdXQgc3R5bGU7CiAgICB9CgogICAgLnBkZi12aWV3ZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMjE1IDIwJSAxMCUpIil9OwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnRvb2xiYXIgewogICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwJSAxNSUpIil9OwogICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDkxJSkiLCAiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICBnYXA6IDE2cHg7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgfQoKICAgIC50b29sYmFyLWdyb3VwIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgZ2FwOiA0cHg7CiAgICB9CgogICAgLnRvb2xiYXItZ3JvdXAtLWVuZCB7CiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgfQoKICAgIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAudG9vbGJhci1idXR0b246aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgOTIlKSIsICJoc2woMjE3IDI1JSAyMiUpIil9OwogICAgfQoKICAgIC50b29sYmFyLWJ1dHRvbjpkaXNhYmxlZCB7CiAgICAgIG9wYWNpdHk6IDAuNDsKICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgIH0KCiAgICAudG9vbGJhci1idXR0b24gZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgfQoKICAgIC5wYWdlLWluZm8gewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwgImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICB9CgogICAgLnBhZ2UtaW5wdXQgewogICAgICB3aWR0aDogNDhweDsKICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA4NiUpIiwgImhzbCgyMTcgMjUlIDI4JSkiKX07CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwJSAxMiUpIil9OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIgNDclIDExJSkiLCAiaHNsKDIxMCAyMCUgOTYlKSIpfTsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIC5wYWdlLWlucHV0OmZvY3VzIHsKICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgfQoKICAgIC5wYWdlLXNlcGFyYXRvciB7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNjAlKSIsICJoc2woMjE1IDE2JSA1MCUpIil9OwogICAgfQoKICAgIC56b29tLWxldmVsIHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICBtaW4td2lkdGg6IDQ4cHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAudmlld2VyLWNvbnRhaW5lciB7CiAgICAgIGZsZXg6IDE7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgbWluLWhlaWdodDogMDsKICAgIH0KCiAgICAuc2lkZWJhciB7CiAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMjAlIDE1JSkiKX07CiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MSUpIiwgImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAuc2lkZWJhci1oZWFkZXIgewogICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDkxJSkiLCAiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAuc2lkZWJhci1jbG9zZSB7CiAgICAgIHdpZHRoOiAyNHB4OwogICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwgImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgIH0KCiAgICAuc2lkZWJhci1jbG9zZTpob3ZlciB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MiUpIiwgImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICB9CgogICAgLnNpZGViYXItY2xvc2UgZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgfQoKICAgIC5zaWRlYmFyLWNvbnRlbnQgewogICAgICBmbGV4OiAxOwogICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICBtaW4taGVpZ2h0OiAwOwogICAgfQoKICAgIC50aHVtYm5haWwgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgyMTUgMjAlIDE4JSkiKX07CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgLyogRGVmYXVsdCBBNCBhc3BlY3QgcmF0aW8gKDI5N21tIC8gMjEwbW0g4omIIDEuNDE0KSAqLwogICAgICBtaW4taGVpZ2h0OiBjYWxjKDE3NnB4ICogMS40MTQpOwogICAgfQoKICAgIC50aHVtYm5haWw6bGFzdC1jaGlsZCB7CiAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICB9CgogICAgLnRodW1ibmFpbDpob3ZlciB7CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDg2JSkiLCAiaHNsKDIxNyAyNSUgMzUlKSIpfTsKICAgIH0KCiAgICAudGh1bWJuYWlsLmFjdGl2ZSB7CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAudGh1bWJuYWlsLWNhbnZhcyB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICBpbWFnZS1yZW5kZXJpbmc6IC13ZWJraXQtb3B0aW1pemUtY29udHJhc3Q7CiAgICAgIGltYWdlLXJlbmRlcmluZzogY3Jpc3AtZWRnZXM7CiAgICB9CgogICAgLnRodW1ibmFpbC1udW1iZXIgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJvdHRvbTogNHB4OwogICAgICByaWdodDogNHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjcpIiwgInJnYmEoMCwgMCwgMCwgMC44KSIpfTsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIH0KCiAgICAudmlld2VyLW1haW4gewogICAgICBmbGV4OiAxOwogICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoOwogICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICBtaW4taGVpZ2h0OiAwOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgLmxvYWRpbmctY29udGFpbmVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgZ2FwOiAxNnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAubG9hZGluZy1zcGlubmVyIHsKICAgICAgd2lkdGg6IDMycHg7CiAgICAgIGhlaWdodDogMzJweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBib3JkZXI6IDNweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgODYlKSIsICJoc2woMjE3IDI1JSAyOCUpIil9OwogICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICB9CgogICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgIH0KICAgIH0KCiAgICAubG9hZGluZy10ZXh0IHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIC5wYWdlcy1jb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDIwcHg7CiAgICB9CgogICAgLnBhZ2Utd3JhcHBlciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAuY2FudmFzLWNvbnRhaW5lciB7CiAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICBib3gtc2hhZG93OiAwIDJweCAxMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIH0KCiAgICAucGFnZS1jYW52YXMgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgaW1hZ2UtcmVuZGVyaW5nOiAtd2Via2l0LW9wdGltaXplLWNvbnRyYXN0OwogICAgICBpbWFnZS1yZW5kZXJpbmc6IGNyaXNwLWVkZ2VzOwogICAgfQoKICAgIC5wZGYtdmlld2VyLndpdGgtc2lkZWJhciAudmlld2VyLW1haW4gewogICAgICBtYXJnaW4tbGVmdDogMDsKICAgIH0KICBgCl07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcGRmL2RlZXMtcGRmLXZpZXdlci9kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vMiA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICB9CgogICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgIG1hcmdpbi1ib3R0b206IDQwcHg7CiAgICB9CgogICAgaDMgewogICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICB9CgogICAgZGVlcy1wZGYtdmlld2VyIHsKICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC52aWV3ZXItdGFsbCB7CiAgICAgIGhlaWdodDogODAwcHg7CiAgICB9CgogICAgLnZpZXdlci1jb21wYWN0IHsKICAgICAgaGVpZ2h0OiA1MDBweDsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+RnVsbCBGZWF0dXJlZCBQREYgVmlld2VyIHdpdGggVG9vbGJhcjwvaDM+CiAgICAgIDxkZWVzLXBkZi12aWV3ZXIKICAgICAgICBjbGFzcz0idmlld2VyLXRhbGwiCiAgICAgICAgcGRmVXJsPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvd2ViL2NvbXByZXNzZWQudHJhY2Vtb25rZXktcGxkaS0wOS5wZGYiCiAgICAgICAgc2hvd1Rvb2xiYXI9InRydWUiCiAgICAgICAgc2hvd1NpZGViYXI9ImZhbHNlIgogICAgICAgIGluaXRpYWxab29tPSJwYWdlLWZpdCIKICAgICAgPjwvZGVlcy1wZGYtdmlld2VyPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPlBERiBWaWV3ZXIgd2l0aCBTaWRlYmFyIE5hdmlnYXRpb248L2gzPgogICAgICA8ZGVlcy1wZGYtdmlld2VyCiAgICAgICAgY2xhc3M9InZpZXdlci10YWxsIgogICAgICAgIHBkZlVybD0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL3dlYi9jb21wcmVzc2VkLnRyYWNlbW9ua2V5LXBsZGktMDkucGRmIgogICAgICAgIHNob3dUb29sYmFyPSJ0cnVlIgogICAgICAgIHNob3dTaWRlYmFyPSJ0cnVlIgogICAgICAgIGluaXRpYWxab29tPSJwYWdlLXdpZHRoIgogICAgICA+PC9kZWVzLXBkZi12aWV3ZXI+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+Q29tcGFjdCBWaWV3ZXIgd2l0aG91dCBDb250cm9sczwvaDM+CiAgICAgIDxkZWVzLXBkZi12aWV3ZXIKICAgICAgICBjbGFzcz0idmlld2VyLWNvbXBhY3QiCiAgICAgICAgcGRmVXJsPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvZXhhbXBsZXMvbGVhcm5pbmcvaGVsbG93b3JsZC5wZGYiCiAgICAgICAgc2hvd1Rvb2xiYXI9ImZhbHNlIgogICAgICAgIHNob3dTaWRlYmFyPSJmYWxzZSIKICAgICAgICBpbml0aWFsWm9vbT0iYXV0byIKICAgICAgPjwvZGVlcy1wZGYtdmlld2VyPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcGRmL2RlZXMtcGRmLXZpZXdlci9jb21wb25lbnQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKdmFyIF9fZXNEZWNvcmF0ZTY5ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3MCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1BkZlZpZXdlciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtcGRmLXZpZXdlciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3BkZlVybF9kZWNvcmF0b3JzOwogIGxldCBfcGRmVXJsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGRmVXJsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbml0aWFsUGFnZV9kZWNvcmF0b3JzOwogIGxldCBfaW5pdGlhbFBhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbml0aWFsUGFnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdGlhbFpvb21fZGVjb3JhdG9yczsKICBsZXQgX2luaXRpYWxab29tX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdGlhbFpvb21fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dUb29sYmFyX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93VG9vbGJhcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dUb29sYmFyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93U2lkZWJhcl9kZWNvcmF0b3JzOwogIGxldCBfc2hvd1NpZGViYXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93U2lkZWJhcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFBhZ2VfZGVjb3JhdG9yczsKICBsZXQgX2N1cnJlbnRQYWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFBhZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RvdGFsUGFnZXNfZGVjb3JhdG9yczsKICBsZXQgX3RvdGFsUGFnZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90b3RhbFBhZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXJyZW50Wm9vbV9kZWNvcmF0b3JzOwogIGxldCBfY3VycmVudFpvb21faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXJyZW50Wm9vbV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbG9hZGluZ19kZWNvcmF0b3JzOwogIGxldCBfbG9hZGluZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RvY3VtZW50SWRfZGVjb3JhdG9yczsKICBsZXQgX2RvY3VtZW50SWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kb2N1bWVudElkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90aHVtYm5haWxEYXRhX2RlY29yYXRvcnM7CiAgbGV0IF90aHVtYm5haWxEYXRhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGh1bWJuYWlsRGF0YV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGFnZURhdGFfZGVjb3JhdG9yczsKICBsZXQgX3BhZ2VEYXRhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGFnZURhdGFfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1BkZlZpZXdlcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9wZGZVcmxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9pbml0aWFsUGFnZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2luaXRpYWxab29tX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc2hvd1Rvb2xiYXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2hvd1NpZGViYXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfY3VycmVudFBhZ2VfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF90b3RhbFBhZ2VzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfY3VycmVudFpvb21fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9sb2FkaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2RvY3VtZW50SWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF90aHVtYm5haWxEYXRhX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9wYWdlRGF0YV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfX2VzRGVjb3JhdGU2OSh0aGlzLCBudWxsLCBfcGRmVXJsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBkZlVybCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGRmVXJsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBkZlVybCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGRmVXJsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BkZlVybF9pbml0aWFsaXplcnMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OSh0aGlzLCBudWxsLCBfaW5pdGlhbFBhZ2VfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5pdGlhbFBhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImluaXRpYWxQYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmluaXRpYWxQYWdlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pbml0aWFsUGFnZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbml0aWFsUGFnZV9pbml0aWFsaXplcnMsIF9pbml0aWFsUGFnZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY5KHRoaXMsIG51bGwsIF9pbml0aWFsWm9vbV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbml0aWFsWm9vbSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdGlhbFpvb20iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5pdGlhbFpvb20sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmluaXRpYWxab29tID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2luaXRpYWxab29tX2luaXRpYWxpemVycywgX2luaXRpYWxab29tX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjkodGhpcywgbnVsbCwgX3Nob3dUb29sYmFyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dUb29sYmFyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93VG9vbGJhciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93VG9vbGJhciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd1Rvb2xiYXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1Rvb2xiYXJfaW5pdGlhbGl6ZXJzLCBfc2hvd1Rvb2xiYXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OSh0aGlzLCBudWxsLCBfc2hvd1NpZGViYXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1NpZGViYXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dTaWRlYmFyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dTaWRlYmFyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93U2lkZWJhciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93U2lkZWJhcl9pbml0aWFsaXplcnMsIF9zaG93U2lkZWJhcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY5KHRoaXMsIG51bGwsIF9jdXJyZW50UGFnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50UGFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudFBhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudFBhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1cnJlbnRQYWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRQYWdlX2luaXRpYWxpemVycywgX2N1cnJlbnRQYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjkodGhpcywgbnVsbCwgX3RvdGFsUGFnZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidG90YWxQYWdlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidG90YWxQYWdlcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50b3RhbFBhZ2VzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50b3RhbFBhZ2VzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RvdGFsUGFnZXNfaW5pdGlhbGl6ZXJzLCBfdG90YWxQYWdlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY5KHRoaXMsIG51bGwsIF9jdXJyZW50Wm9vbV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50Wm9vbSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudFpvb20iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudFpvb20sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1cnJlbnRab29tID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRab29tX2luaXRpYWxpemVycywgX2N1cnJlbnRab29tX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjkodGhpcywgbnVsbCwgX2xvYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibG9hZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibG9hZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sb2FkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sb2FkaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBfbG9hZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY5KHRoaXMsIG51bGwsIF9kb2N1bWVudElkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRvY3VtZW50SWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRvY3VtZW50SWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZG9jdW1lbnRJZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZG9jdW1lbnRJZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kb2N1bWVudElkX2luaXRpYWxpemVycywgX2RvY3VtZW50SWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OSh0aGlzLCBudWxsLCBfdGh1bWJuYWlsRGF0YV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0aHVtYm5haWxEYXRhIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aHVtYm5haWxEYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRodW1ibmFpbERhdGEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRodW1ibmFpbERhdGEgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGh1bWJuYWlsRGF0YV9pbml0aWFsaXplcnMsIF90aHVtYm5haWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjkodGhpcywgbnVsbCwgX3BhZ2VEYXRhX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBhZ2VEYXRhIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwYWdlRGF0YSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wYWdlRGF0YSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGFnZURhdGEgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGFnZURhdGFfaW5pdGlhbGl6ZXJzLCBfcGFnZURhdGFfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNQZGZWaWV3ZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtbzI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIlBERiI7CiAgICBzdGF0aWMgc3R5bGVzID0gdmlld2VyU3R5bGVzOwogICAgI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfcGRmVXJsX2luaXRpYWxpemVycywgIiIpOwogICAgZ2V0IHBkZlVybCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHBkZlVybCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGRmVXJsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaW5pdGlhbFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9pbml0aWFsUGFnZV9pbml0aWFsaXplcnMsIDEpKTsKICAgIGdldCBpbml0aWFsUGFnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2luaXRpYWxQYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaW5pdGlhbFBhZ2UodmFsdWUyKSB7CiAgICAgIHRoaXMuI2luaXRpYWxQYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaW5pdGlhbFpvb21fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9pbml0aWFsUGFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX2luaXRpYWxab29tX2luaXRpYWxpemVycywgImF1dG8iKSk7CiAgICBnZXQgaW5pdGlhbFpvb20oKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbml0aWFsWm9vbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGluaXRpYWxab29tKHZhbHVlMikgewogICAgICB0aGlzLiNpbml0aWFsWm9vbV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dUb29sYmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfaW5pdGlhbFpvb21fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9zaG93VG9vbGJhcl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzaG93VG9vbGJhcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dUb29sYmFyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1Rvb2xiYXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dUb29sYmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hvd1NpZGViYXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9zaG93VG9vbGJhcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX3Nob3dTaWRlYmFyX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93U2lkZWJhcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dTaWRlYmFyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1NpZGViYXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dTaWRlYmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VycmVudFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9zaG93U2lkZWJhcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX2N1cnJlbnRQYWdlX2luaXRpYWxpemVycywgMSkpOwogICAgZ2V0IGN1cnJlbnRQYWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50UGFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VycmVudFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN0b3RhbFBhZ2VzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfY3VycmVudFBhZ2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF90b3RhbFBhZ2VzX2luaXRpYWxpemVycywgMSkpOwogICAgZ2V0IHRvdGFsUGFnZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0b3RhbFBhZ2VzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdG90YWxQYWdlcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdG90YWxQYWdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1cnJlbnRab29tX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfdG90YWxQYWdlc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX2N1cnJlbnRab29tX2luaXRpYWxpemVycywgMSkpOwogICAgZ2V0IGN1cnJlbnRab29tKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFpvb21fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50Wm9vbSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VycmVudFpvb21fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfY3VycmVudFpvb21fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9sb2FkaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBsb2FkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jbG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxvYWRpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkb2N1bWVudElkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfbG9hZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX2RvY3VtZW50SWRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGRvY3VtZW50SWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkb2N1bWVudElkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZG9jdW1lbnRJZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZG9jdW1lbnRJZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RodW1ibmFpbERhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9kb2N1bWVudElkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfdGh1bWJuYWlsRGF0YV9pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgdGh1bWJuYWlsRGF0YSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3RodW1ibmFpbERhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0aHVtYm5haWxEYXRhKHZhbHVlMikgewogICAgICB0aGlzLiN0aHVtYm5haWxEYXRhX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcGFnZURhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF90aHVtYm5haWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfcGFnZURhdGFfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IHBhZ2VEYXRhKCkgewogICAgICByZXR1cm4gdGhpcy4jcGFnZURhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwYWdlRGF0YSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGFnZURhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHBkZkRvY3VtZW50ID0gX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfcGFnZURhdGFfZXh0cmFJbml0aWFsaXplcnMpOwogICAgcmVuZGVyU3RhdGUgPSAiaWRsZSI7CiAgICByZW5kZXJBYm9ydENvbnRyb2xsZXIgPSBudWxsOwogICAgcGFnZVJlbmRlcmluZyA9IGZhbHNlOwogICAgcGFnZU51bVBlbmRpbmcgPSBudWxsOwogICAgY3VycmVudFJlbmRlclRhc2sgPSBudWxsOwogICAgY3VycmVudFJlbmRlclByb21pc2UgPSBudWxsOwogICAgdGh1bWJuYWlsUmVuZGVyVGFza3MgPSBbXTsKICAgIHBhZ2VSZW5kZXJUYXNrcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBjYW52YXM7CiAgICBjdHg7CiAgICB2aWV3ZXJNYWluID0gbnVsbDsKICAgIHJlc2l6ZU9ic2VydmVyOwogICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXI7CiAgICBzY3JvbGxUaHJvdHRsZVRpbWVvdXQ7CiAgICB2aWV3cG9ydERpbWVuc2lvbnMgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTsKICAgIHZpZXdwb3J0TW9kZSA9ICJhdXRvIjsKICAgIE1BTlVBTF9NSU5fWk9PTSA9IDAuNTsKICAgIE1BTlVBTF9NQVhfWk9PTSA9IDM7CiAgICBBQlNPTFVURV9NSU5fWk9PTSA9IDAuMTsKICAgIEFCU09MVVRFX01BWF9aT09NID0gNDsKICAgIFBBR0VfR0FQID0gMjA7CiAgICBSRU5ERVJfQlVGRkVSID0gMzsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InBkZi12aWV3ZXIgJHt0aGlzLnNob3dTaWRlYmFyID8gIndpdGgtc2lkZWJhciIgOiAiIn0iPgogICAgICAgICR7dGhpcy5zaG93VG9vbGJhciA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItZ3JvdXAiPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMucHJldmlvdXNQYWdlfQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5jdXJyZW50UGFnZSA8PSAxfQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkNoZXZyb25MZWZ0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlLWluZm8iPgogICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICAgICAgICAgICAgbWluPSIxIgogICAgICAgICAgICAgICAgICBtYXg9IiR7dGhpcy50b3RhbFBhZ2VzfSIKICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7U3RyaW5nKHRoaXMuY3VycmVudFBhZ2UpfQogICAgICAgICAgICAgICAgICBAY2hhbmdlPSR7dGhpcy5oYW5kbGVQYWdlSW5wdXR9CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJwYWdlLWlucHV0IgogICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYWdlLXNlcGFyYXRvciI+Lzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYWdlLXRvdGFsIj4ke3RoaXMudG90YWxQYWdlc308L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5uZXh0UGFnZX0KICAgICAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuY3VycmVudFBhZ2UgPj0gdGhpcy50b3RhbFBhZ2VzfQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkNoZXZyb25SaWdodCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCI+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy56b29tT3V0fQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7IXRoaXMuY2FuWm9vbU91dH0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpab29tT3V0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnJlc2V0Wm9vbX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iem9vbS1sZXZlbCI+JHtNYXRoLnJvdW5kKHRoaXMuY3VycmVudFpvb20gKiAxMDApfSU8L3NwYW4+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy56b29tSW59CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5jYW5ab29tSW59CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Wm9vbUluIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWdyb3VwIj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmZpdFRvUGFnZX0KICAgICAgICAgICAgICAgIHRpdGxlPSJGaXQgdG8gcGFnZSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpNYXhpbWl6ZSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5maXRUb1dpZHRofQogICAgICAgICAgICAgICAgdGl0bGU9IkZpdCB0byB3aWR0aCIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpBcnJvd0xlZnRSaWdodCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCB0b29sYmFyLWdyb3VwLS1lbmQiPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2hvd1NpZGViYXIgPSAhdGhpcy5zaG93U2lkZWJhcn0KICAgICAgICAgICAgICAgIHRpdGxlPSIke3RoaXMuc2hvd1NpZGViYXIgPyAiSGlkZSB0aHVtYm5haWxzIiA6ICJTaG93IHRodW1ibmFpbHMifSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249IiR7dGhpcy5zaG93U2lkZWJhciA/ICJsdWNpZGU6U2lkZWJhckNsb3NlIiA6ICJsdWNpZGU6U2lkZWJhciJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmRvd25sb2FkUGRmfQogICAgICAgICAgICAgICAgdGl0bGU9IkRvd25sb2FkIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkRvd25sb2FkIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnByaW50UGRmfQogICAgICAgICAgICAgICAgdGl0bGU9IlByaW50IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlByaW50ZXIiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KCiAgICAgICAgPGRpdiBjbGFzcz0idmlld2VyLWNvbnRhaW5lciI+CiAgICAgICAgICAke3RoaXMuc2hvd1NpZGViYXIgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1oZWFkZXIiPgogICAgICAgICAgICAgICAgPHNwYW4+UGFnZXM8L3NwYW4+CiAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJzaWRlYmFyLWNsb3NlIgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dTaWRlYmFyID0gZmFsc2V9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlgiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1jb250ZW50Ij4KICAgICAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLmtleWVkKHRoaXMuZG9jdW1lbnRJZCwgYjJgCiAgICAgICAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlcGVhdCh0aGlzLnRodW1ibmFpbERhdGEsIChpdGVtKSA9PiBpdGVtLnBhZ2UsIChpdGVtKSA9PiBiMmAKICAgICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRodW1ibmFpbCAke3RoaXMuY3VycmVudFBhZ2UgPT09IGl0ZW0ucGFnZSA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXBhZ2U9IiR7aXRlbS5wYWdlfSIKICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVUaHVtYm5haWxDbGlja30KICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPGNhbnZhcyBjbGFzcz0idGh1bWJuYWlsLWNhbnZhcyIgZGF0YS1wYWdlPSIke2l0ZW0ucGFnZX0iPjwvY2FudmFzPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGh1bWJuYWlsLW51bWJlciI+JHtpdGVtLnBhZ2V9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgPGRpdiBjbGFzcz0idmlld2VyLW1haW4iIEBzY3JvbGw9JHt0aGlzLmhhbmRsZVNjcm9sbH0+CiAgICAgICAgICAgICR7dGhpcy5sb2FkaW5nID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1jb250YWluZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1zcGlubmVyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctdGV4dCI+TG9hZGluZyBQREYuLi48L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCA6IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2VzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAke2RpcmVjdGl2ZXNfZXhwb3J0cy5yZXBlYXQodGhpcy5wYWdlRGF0YSwgKGl0ZW0pID0+IGl0ZW0ucGFnZSwgKGl0ZW0pID0+IGIyYAogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2Utd3JhcHBlciIgZGF0YS1wYWdlPSIke2l0ZW0ucGFnZX0iPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FudmFzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxjYW52YXMgY2xhc3M9InBhZ2UtY2FudmFzIiBkYXRhLXBhZ2U9IiR7aXRlbS5wYWdlfSI+PC9jYW52YXM+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGB9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIHRoaXMuZW5zdXJlVmlld2VyUmVmcygpOwogICAgICBpZiAodGhpcy5wZGZVcmwpIHsKICAgICAgICB0aGlzLmRvY3VtZW50SWQgPSBgJHt0aGlzLnBkZlVybH0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCl9YDsKICAgICAgICBhd2FpdCB0aGlzLmxvYWRQZGYoKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IHZvaWQgMDsKICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj8uZGlzY29ubmVjdCgpOwogICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyID0gdm9pZCAwOwogICAgICBpZiAodGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQpOwogICAgICAgIHRoaXMuc2Nyb2xsVGhyb3R0bGVUaW1lb3V0ID0gdm9pZCAwOwogICAgICB9CiAgICAgIHRoaXMucmVuZGVyU3RhdGUgPSAiZGlzcG9zZWQiOwogICAgICBhd2FpdCB0aGlzLmNsZWFudXBEb2N1bWVudCgpOwogICAgICB0aGlzLmNhbnZhcyA9IHZvaWQgMDsKICAgICAgdGhpcy5jdHggPSB2b2lkIDA7CiAgICB9CiAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJwZGZVcmwiKSAmJiB0aGlzLnBkZlVybCkgewogICAgICAgIGNvbnN0IHByZXZpb3VzVXJsID0gY2hhbmdlZFByb3BlcnRpZXMuZ2V0KCJwZGZVcmwiKTsKICAgICAgICBpZiAocHJldmlvdXNVcmwpIHsKICAgICAgICAgIFBkZk1hbmFnZXIucmVsZWFzZURvY3VtZW50KHByZXZpb3VzVXJsKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5kb2N1bWVudElkID0gYCR7dGhpcy5wZGZVcmx9LSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpfWA7CiAgICAgICAgYXdhaXQgdGhpcy5sb2FkUGRmKCk7CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygic2hvd1NpZGViYXIiKSAmJiB0aGlzLnNob3dTaWRlYmFyICYmIHRoaXMucGRmRG9jdW1lbnQpIHsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICAgIHRoaXMudGh1bWJuYWlsRGF0YS5mb3JFYWNoKCh0aHVtYikgPT4gdGh1bWIucmVuZGVyZWQgPSBmYWxzZSk7CiAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJUaHVtYm5haWxzKCk7CiAgICAgICAgdGhpcy5zZXR1cEludGVyc2VjdGlvbk9ic2VydmVyKCk7CiAgICAgICAgdGhpcy5zY3JvbGxUaHVtYm5haWxJbnRvVmlldyh0aGlzLmN1cnJlbnRQYWdlKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgbG9hZFBkZigpIHsKICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgICAgdGhpcy5yZW5kZXJTdGF0ZSA9ICJsb2FkaW5nIjsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXBEb2N1bWVudCgpOwogICAgICAgIHRoaXMucmVuZGVyQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMucmVuZGVyQWJvcnRDb250cm9sbGVyLnNpZ25hbDsKICAgICAgICB0aGlzLnBkZkRvY3VtZW50ID0gYXdhaXQgUGRmTWFuYWdlci5sb2FkRG9jdW1lbnQodGhpcy5wZGZVcmwpOwogICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkKICAgICAgICAgIHJldHVybjsKICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSB0aGlzLnBkZkRvY3VtZW50Lm51bVBhZ2VzOwogICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLmluaXRpYWxQYWdlOwogICAgICAgIHRoaXMucmVzb2x2ZUluaXRpYWxWaWV3cG9ydE1vZGUoKTsKICAgICAgICB0aGlzLnRodW1ibmFpbERhdGEgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLnRvdGFsUGFnZXMgfSwgKF80LCBpMTEpID0+ICh7CiAgICAgICAgICBwYWdlOiBpMTEgKyAxLAogICAgICAgICAgcmVuZGVyZWQ6IGZhbHNlCiAgICAgICAgfSkpOwogICAgICAgIHRoaXMucGFnZURhdGEgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLnRvdGFsUGFnZXMgfSwgKF80LCBpMTEpID0+ICh7CiAgICAgICAgICBwYWdlOiBpMTEgKyAxLAogICAgICAgICAgcmVuZGVyZWQ6IGZhbHNlLAogICAgICAgICAgcmVuZGVyaW5nOiBmYWxzZQogICAgICAgIH0pKTsKICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgIHRoaXMuZW5zdXJlVmlld2VyUmVmcygpOwogICAgICAgIHRoaXMuc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpOwogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIHRoaXMucmVuZGVyU3RhdGUgPSAicmVuZGVyaW5nLW1haW4iOwogICAgICAgIGF3YWl0IHRoaXMucmVuZGVyVmlzaWJsZVBhZ2VzKCk7CiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmICh0aGlzLmluaXRpYWxQYWdlID4gMSkgewogICAgICAgICAgYXdhaXQgdGhpcy5zY3JvbGxUb1BhZ2UodGhpcy5pbml0aWFsUGFnZSwgZmFsc2UpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5zaG93U2lkZWJhcikgewogICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyVGh1bWJuYWlscygpOwogICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMucmVuZGVyU3RhdGUgPSAicmVuZGVyZWQiOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGxvYWRpbmcgUERGOiIsIGVycm9yKTsKICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICB0aGlzLnJlbmRlclN0YXRlID0gImVycm9yIjsKICAgICAgfQogICAgfQogICAgc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHsKICAgICAgaWYgKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHsKICAgICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgfQogICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7CiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICAgICAgICBjb25zdCBwYWdlV3JhcHBlciA9IGVudHJ5LnRhcmdldDsKICAgICAgICAgIGNvbnN0IHBhZ2VOdW0gPSBwYXJzZUludChwYWdlV3JhcHBlci5kYXRhc2V0LnBhZ2UgfHwgIjEiKTsKICAgICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykgewogICAgICAgICAgICB0aGlzLnJlbmRlclBhZ2VJZk5lZWRlZChwYWdlTnVtKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICByb290OiB0aGlzLnZpZXdlck1haW4sCiAgICAgICAgcm9vdE1hcmdpbjogYCR7dGhpcy5SRU5ERVJfQlVGRkVSICogMTAwfXB4IDBweGAsCiAgICAgICAgdGhyZXNob2xkOiAwLjAxCiAgICAgIH0pOwogICAgICBjb25zdCBwYWdlV3JhcHBlcnMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5wYWdlLXdyYXBwZXIiKTsKICAgICAgaWYgKHBhZ2VXcmFwcGVycykgewogICAgICAgIHBhZ2VXcmFwcGVycy5mb3JFYWNoKCh3cmFwcGVyKSA9PiB7CiAgICAgICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPy5vYnNlcnZlKHdyYXBwZXIpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBhc3luYyByZW5kZXJWaXNpYmxlUGFnZXMoKSB7CiAgICAgIGlmICghdGhpcy52aWV3ZXJNYWluKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgY2xpZW50SGVpZ2h0ID0gdGhpcy52aWV3ZXJNYWluLmNsaWVudEhlaWdodDsKICAgICAgZm9yIChjb25zdCBwYWdlSW5mbyBvZiB0aGlzLnBhZ2VEYXRhKSB7CiAgICAgICAgY29uc3QgcGFnZVdyYXBwZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYC5wYWdlLXdyYXBwZXJbZGF0YS1wYWdlPSIke3BhZ2VJbmZvLnBhZ2V9Il1gKTsKICAgICAgICBpZiAoIXBhZ2VXcmFwcGVyKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgY29uc3QgcmVjdCA9IHBhZ2VXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IHZpZXdlclJlY3QgPSB0aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgcmVsYXRpdmVUb3AgPSByZWN0LnRvcCAtIHZpZXdlclJlY3QudG9wOwogICAgICAgIGNvbnN0IHJlbGF0aXZlQm90dG9tID0gcmVsYXRpdmVUb3AgKyByZWN0LmhlaWdodDsKICAgICAgICBjb25zdCBidWZmZXIyID0gdGhpcy5SRU5ERVJfQlVGRkVSICogY2xpZW50SGVpZ2h0OwogICAgICAgIGlmIChyZWxhdGl2ZUJvdHRvbSA+PSAtYnVmZmVyMiAmJiByZWxhdGl2ZVRvcCA8PSBjbGllbnRIZWlnaHQgKyBidWZmZXIyKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlclBhZ2VJZk5lZWRlZChwYWdlSW5mby5wYWdlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHJlbmRlclBhZ2VJZk5lZWRlZChwYWdlTnVtKSB7CiAgICAgIGNvbnN0IHBhZ2VJbmZvID0gdGhpcy5wYWdlRGF0YS5maW5kKChwNykgPT4gcDcucGFnZSA9PT0gcGFnZU51bSk7CiAgICAgIGlmICghcGFnZUluZm8gfHwgcGFnZUluZm8ucmVuZGVyZWQgfHwgcGFnZUluZm8ucmVuZGVyaW5nKQogICAgICAgIHJldHVybjsKICAgICAgcGFnZUluZm8ucmVuZGVyaW5nID0gdHJ1ZTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBjYW52YXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYC5wYWdlLWNhbnZhc1tkYXRhLXBhZ2U9IiR7cGFnZU51bX0iXWApOwogICAgICAgIGlmICghY2FudmFzKSB7CiAgICAgICAgICBwYWdlSW5mby5yZW5kZXJpbmcgPSBmYWxzZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHRoaXMucGRmRG9jdW1lbnQuZ2V0UGFnZShwYWdlTnVtKTsKICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuY29tcHV0ZVZpZXdwb3J0KHBhZ2UpOwogICAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQ7CiAgICAgICAgY2FudmFzLndpZHRoID0gdmlld3BvcnQud2lkdGg7CiAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnQud2lkdGh9cHhgOwogICAgICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHt2aWV3cG9ydC5oZWlnaHR9cHhgOwogICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgIGlmICghY3R4KSB7CiAgICAgICAgICBwYWdlLmNsZWFudXA/LigpOwogICAgICAgICAgcGFnZUluZm8ucmVuZGVyaW5nID0gZmFsc2U7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7CiAgICAgICAgICBjYW52YXNDb250ZXh0OiBjdHgsCiAgICAgICAgICB2aWV3cG9ydAogICAgICAgIH07CiAgICAgICAgY29uc3QgcmVuZGVyVGFzayA9IHBhZ2UucmVuZGVyKHJlbmRlckNvbnRleHQpOwogICAgICAgIHRoaXMucGFnZVJlbmRlclRhc2tzLnNldChwYWdlTnVtLCByZW5kZXJUYXNrKTsKICAgICAgICBhd2FpdCByZW5kZXJUYXNrLnByb21pc2U7CiAgICAgICAgcGFnZS5jbGVhbnVwPy4oKTsKICAgICAgICBwYWdlSW5mby5yZW5kZXJlZCA9IHRydWU7CiAgICAgICAgcGFnZUluZm8ucmVuZGVyaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5wYWdlUmVuZGVyVGFza3MuZGVsZXRlKHBhZ2VOdW0pOwogICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgicGFnZURhdGEiKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBpZiAoZXJyb3I/Lm5hbWUgIT09ICJSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24iKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciByZW5kZXJpbmcgcGFnZSAke3BhZ2VOdW19OmAsIGVycm9yKTsKICAgICAgICB9CiAgICAgICAgcGFnZUluZm8ucmVuZGVyaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5wYWdlUmVuZGVyVGFza3MuZGVsZXRlKHBhZ2VOdW0pOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7CiAgICAgIGlmICh0aGlzLnNjcm9sbFRocm90dGxlVGltZW91dCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRocm90dGxlVGltZW91dCk7CiAgICAgIH0KICAgICAgdGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgdGhpcy51cGRhdGVDdXJyZW50UGFnZSgpOwogICAgICAgIHRoaXMucmVuZGVyVmlzaWJsZVBhZ2VzKCk7CiAgICAgIH0sIDUwKTsKICAgIH07CiAgICB1cGRhdGVDdXJyZW50UGFnZSgpIHsKICAgICAgaWYgKCF0aGlzLnZpZXdlck1haW4pCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLnZpZXdlck1haW4uc2Nyb2xsVG9wOwogICAgICBjb25zdCBjbGllbnRIZWlnaHQgPSB0aGlzLnZpZXdlck1haW4uY2xpZW50SGVpZ2h0OwogICAgICBjb25zdCBjZW50ZXJZID0gc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0IC8gMjsKICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgdGhpcy5wYWdlRGF0YS5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgY29uc3QgcGFnZVdyYXBwZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYC5wYWdlLXdyYXBwZXJbZGF0YS1wYWdlPSIke2kxMSArIDF9Il1gKTsKICAgICAgICBpZiAoIXBhZ2VXcmFwcGVyKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgY29uc3QgcmVjdCA9IHBhZ2VXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IHZpZXdlclJlY3QgPSB0aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgcmVsYXRpdmVUb3AgPSByZWN0LnRvcCAtIHZpZXdlclJlY3QudG9wICsgc2Nyb2xsVG9wOwogICAgICAgIGNvbnN0IHJlbGF0aXZlQm90dG9tID0gcmVsYXRpdmVUb3AgKyByZWN0LmhlaWdodDsKICAgICAgICBpZiAoY2VudGVyWSA+PSByZWxhdGl2ZVRvcCAmJiBjZW50ZXJZIDw9IHJlbGF0aXZlQm90dG9tKSB7CiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSAhPT0gaTExICsgMSkgewogICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gaTExICsgMTsKICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1NpZGViYXIpIHsKICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRodW1ibmFpbEludG9WaWV3KGkxMSArIDEpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHNjcm9sbFRodW1ibmFpbEludG9WaWV3KHBhZ2VOdW0pIHsKICAgICAgY29uc3QgdGh1bWJuYWlsID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAudGh1bWJuYWlsW2RhdGEtcGFnZT0iJHtwYWdlTnVtfSJdYCk7CiAgICAgIGNvbnN0IHNpZGViYXJDb250ZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2lkZWJhci1jb250ZW50Iik7CiAgICAgIGlmICh0aHVtYm5haWwgJiYgc2lkZWJhckNvbnRlbnQpIHsKICAgICAgICBjb25zdCB0aHVtYm5haWxSZWN0ID0gdGh1bWJuYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IHNpZGViYXJSZWN0ID0gc2lkZWJhckNvbnRlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgaXNBYm92ZSA9IHRodW1ibmFpbFJlY3QudG9wIDwgc2lkZWJhclJlY3QudG9wOwogICAgICAgIGNvbnN0IGlzQmVsb3cgPSB0aHVtYm5haWxSZWN0LmJvdHRvbSA+IHNpZGViYXJSZWN0LmJvdHRvbTsKICAgICAgICBpZiAoaXNBYm92ZSB8fCBpc0JlbG93KSB7CiAgICAgICAgICBjb25zdCB0aHVtYm5haWxPZmZzZXQgPSB0aHVtYm5haWwub2Zmc2V0VG9wOwogICAgICAgICAgY29uc3QgdGh1bWJuYWlsSGVpZ2h0ID0gdGh1bWJuYWlsLm9mZnNldEhlaWdodDsKICAgICAgICAgIGNvbnN0IHNpZGViYXJIZWlnaHQgPSBzaWRlYmFyQ29udGVudC5jbGllbnRIZWlnaHQ7CiAgICAgICAgICBjb25zdCB0YXJnZXRTY3JvbGxUb3AgPSB0aHVtYm5haWxPZmZzZXQgLSBzaWRlYmFySGVpZ2h0IC8gMiArIHRodW1ibmFpbEhlaWdodCAvIDI7CiAgICAgICAgICBzaWRlYmFyQ29udGVudC5zY3JvbGxUbyh7CiAgICAgICAgICAgIHRvcDogTWF0aC5tYXgoMCwgdGFyZ2V0U2Nyb2xsVG9wKSwKICAgICAgICAgICAgYmVoYXZpb3I6ICJzbW9vdGgiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHNjcm9sbFRvUGFnZShwYWdlTnVtLCBzbW9vdGggPSB0cnVlKSB7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGNvbnN0IHBhZ2VXcmFwcGVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAucGFnZS13cmFwcGVyW2RhdGEtcGFnZT0iJHtwYWdlTnVtfSJdYCk7CiAgICAgIGlmIChwYWdlV3JhcHBlciAmJiB0aGlzLnZpZXdlck1haW4pIHsKICAgICAgICBjb25zdCBwYWdlUmVjdCA9IHBhZ2VXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IHZpZXdlclJlY3QgPSB0aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgY3VycmVudFNjcm9sbFRvcCA9IHRoaXMudmlld2VyTWFpbi5zY3JvbGxUb3A7CiAgICAgICAgY29uc3QgdGFyZ2V0U2Nyb2xsVG9wID0gY3VycmVudFNjcm9sbFRvcCArIChwYWdlUmVjdC50b3AgLSB2aWV3ZXJSZWN0LnRvcCkgLSB0aGlzLnZpZXdlck1haW4uY2xpZW50VG9wOwogICAgICAgIGlmIChzbW9vdGgpIHsKICAgICAgICAgIHRoaXMudmlld2VyTWFpbi5zY3JvbGxUbyh7CiAgICAgICAgICAgIHRvcDogdGFyZ2V0U2Nyb2xsVG9wLAogICAgICAgICAgICBiZWhhdmlvcjogInNtb290aCIKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnZpZXdlck1haW4uc2Nyb2xsVG9wID0gdGFyZ2V0U2Nyb2xsVG9wOwogICAgICAgIH0KICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZU51bTsKICAgICAgICBpZiAodGhpcy5zaG93U2lkZWJhcikgewogICAgICAgICAgdGhpcy5zY3JvbGxUaHVtYm5haWxJbnRvVmlldyhwYWdlTnVtKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJQYWdlSWZOZWVkZWQocGFnZU51bSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHJlbmRlclRodW1ibmFpbHMoKSB7CiAgICAgIGlmICghdGhpcy5wZGZEb2N1bWVudCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodGhpcy50aHVtYm5haWxEYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy50aHVtYm5haWxEYXRhLmV2ZXJ5KCh0OSkgPT4gdDkucmVuZGVyZWQpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLnJlbmRlckFib3J0Q29udHJvbGxlcj8uc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgc2lnbmFsID0gdGhpcy5yZW5kZXJBYm9ydENvbnRyb2xsZXI/LnNpZ25hbDsKICAgICAgdGhpcy5yZW5kZXJTdGF0ZSA9ICJyZW5kZXJpbmctdGh1bWJzIjsKICAgICAgZm9yIChjb25zdCB0YXNrIG9mIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MpIHsKICAgICAgICB0cnkgewogICAgICAgICAgdGFzay5jYW5jZWwoKTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLnRodW1ibmFpbFJlbmRlclRhc2tzID0gW107CiAgICAgIHRyeSB7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICBjb25zdCB0aHVtYm5haWxzID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIudGh1bWJuYWlsIik7CiAgICAgICAgY29uc3QgdGh1bWJuYWlsQ2FudmFzZXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi50aHVtYm5haWwtY2FudmFzIik7CiAgICAgICAgY29uc3Qgc2lkZWJhckNvbnRlbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5zaWRlYmFyLWNvbnRlbnQiKTsKICAgICAgICBjb25zdCBzaWRlYmFyU3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc2lkZWJhckNvbnRlbnQpOwogICAgICAgIGNvbnN0IHNpZGViYXJQYWRkaW5nID0gcGFyc2VGbG9hdChzaWRlYmFyU3R5bGVzLnBhZGRpbmdMZWZ0KSArIHBhcnNlRmxvYXQoc2lkZWJhclN0eWxlcy5wYWRkaW5nUmlnaHQpOwogICAgICAgIGNvbnN0IG1heFRodW1ibmFpbFdpZHRoID0gMjAwIC0gc2lkZWJhclBhZGRpbmcgLSA0OwogICAgICAgIGZvciAoY29uc3QgY2FudmFzIG9mIEFycmF5LmZyb20odGh1bWJuYWlsQ2FudmFzZXMpKSB7CiAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgICAgaWYgKGNvbnRleHQyKSB7CiAgICAgICAgICAgIGNvbnRleHQyLmNsZWFyUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCB0aHVtYm5haWxDYW52YXNlcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBjYW52YXMgPSB0aHVtYm5haWxDYW52YXNlc1tpMTFdOwogICAgICAgICAgY29uc3QgdGh1bWJuYWlsID0gdGh1bWJuYWlsc1tpMTFdOwogICAgICAgICAgY29uc3QgcGFnZU51bSA9IHBhcnNlSW50KGNhbnZhcy5kYXRhc2V0LnBhZ2UgfHwgIjEiKTsKICAgICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UocGFnZU51bSk7CiAgICAgICAgICBjb25zdCBpbml0aWFsVmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGU6IDEgfSk7CiAgICAgICAgICBjb25zdCBzY2FsZSA9IG1heFRodW1ibmFpbFdpZHRoIC8gaW5pdGlhbFZpZXdwb3J0LndpZHRoOwogICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGUgfSk7CiAgICAgICAgICBjYW52YXMud2lkdGggPSB2aWV3cG9ydC53aWR0aDsKICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQ7CiAgICAgICAgICBjYW52YXMuc3R5bGUud2lkdGggPSBgJHt2aWV3cG9ydC53aWR0aH1weGA7CiAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7dmlld3BvcnQuaGVpZ2h0fXB4YDsKICAgICAgICAgIHRodW1ibmFpbC5zdHlsZS5oZWlnaHQgPSBgJHt2aWV3cG9ydC5oZWlnaHR9cHhgOwogICAgICAgICAgdGh1bWJuYWlsLnN0eWxlLm1pbkhlaWdodCA9IGAke3ZpZXdwb3J0LmhlaWdodH1weGA7CiAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgICAgaWYgKCFjb250ZXh0MikgewogICAgICAgICAgICBwYWdlLmNsZWFudXA/LigpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7CiAgICAgICAgICAgIGNhbnZhc0NvbnRleHQ6IGNvbnRleHQyLAogICAgICAgICAgICB2aWV3cG9ydAogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IHJlbmRlclRhc2sgPSBwYWdlLnJlbmRlcihyZW5kZXJDb250ZXh0KTsKICAgICAgICAgIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MucHVzaChyZW5kZXJUYXNrKTsKICAgICAgICAgIGF3YWl0IHJlbmRlclRhc2sucHJvbWlzZTsKICAgICAgICAgIHBhZ2UuY2xlYW51cD8uKCk7CiAgICAgICAgICBjb25zdCB0aHVtYkRhdGEgPSB0aGlzLnRodW1ibmFpbERhdGEuZmluZCgodDkpID0+IHQ5LnBhZ2UgPT09IHBhZ2VOdW0pOwogICAgICAgICAgaWYgKHRodW1iRGF0YSkgewogICAgICAgICAgICB0aHVtYkRhdGEucmVuZGVyZWQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoInRodW1ibmFpbERhdGEiKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBpZiAoZXJyb3I/Lm5hbWUgIT09ICJSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24iKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKCJFcnJvciByZW5kZXJpbmcgdGh1bWJuYWlsczoiLCBlcnJvcik7CiAgICAgICAgfQogICAgICB9IGZpbmFsbHkgewogICAgICAgIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MgPSBbXTsKICAgICAgfQogICAgfQogICAgcHJldmlvdXNQYWdlKCkgewogICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IDEpIHsKICAgICAgICB0aGlzLnNjcm9sbFRvUGFnZSh0aGlzLmN1cnJlbnRQYWdlIC0gMSk7CiAgICAgIH0KICAgIH0KICAgIG5leHRQYWdlKCkgewogICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA8IHRoaXMudG90YWxQYWdlcykgewogICAgICAgIHRoaXMuc2Nyb2xsVG9QYWdlKHRoaXMuY3VycmVudFBhZ2UgKyAxKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlVGh1bWJuYWlsQ2xpY2soZTExKSB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGUxMS5jdXJyZW50VGFyZ2V0OwogICAgICBjb25zdCBwYWdlTnVtID0gcGFyc2VJbnQodGFyZ2V0LmRhdGFzZXQucGFnZSB8fCAiMSIpOwogICAgICB0aGlzLnNjcm9sbFRvUGFnZShwYWdlTnVtKTsKICAgIH0KICAgIGhhbmRsZVBhZ2VJbnB1dChlMTEpIHsKICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICBjb25zdCBwYWdlTnVtID0gcGFyc2VJbnQoaW5wdXQudmFsdWUpOwogICAgICB0aGlzLnNjcm9sbFRvUGFnZShwYWdlTnVtKTsKICAgIH0KICAgIHpvb21JbigpIHsKICAgICAgY29uc3QgbmV4dFpvb20gPSBNYXRoLm1pbih0aGlzLk1BTlVBTF9NQVhfWk9PTSwgdGhpcy5jdXJyZW50Wm9vbSAqIDEuMik7CiAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gImN1c3RvbSI7CiAgICAgIGlmIChuZXh0Wm9vbSAhPT0gdGhpcy5jdXJyZW50Wm9vbSkgewogICAgICAgIHRoaXMuY3VycmVudFpvb20gPSBuZXh0Wm9vbTsKICAgICAgICB0aGlzLnJlUmVuZGVyQWxsUGFnZXMoKTsKICAgICAgfQogICAgfQogICAgem9vbU91dCgpIHsKICAgICAgY29uc3QgbmV4dFpvb20gPSBNYXRoLm1heCh0aGlzLk1BTlVBTF9NSU5fWk9PTSwgdGhpcy5jdXJyZW50Wm9vbSAvIDEuMik7CiAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gImN1c3RvbSI7CiAgICAgIGlmIChuZXh0Wm9vbSAhPT0gdGhpcy5jdXJyZW50Wm9vbSkgewogICAgICAgIHRoaXMuY3VycmVudFpvb20gPSBuZXh0Wm9vbTsKICAgICAgICB0aGlzLnJlUmVuZGVyQWxsUGFnZXMoKTsKICAgICAgfQogICAgfQogICAgcmVzZXRab29tKCkgewogICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJjdXN0b20iOwogICAgICB0aGlzLmN1cnJlbnRab29tID0gMTsKICAgICAgdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCk7CiAgICB9CiAgICBmaXRUb1BhZ2UoKSB7CiAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gInBhZ2UtZml0IjsKICAgICAgdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCk7CiAgICB9CiAgICBmaXRUb1dpZHRoKCkgewogICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJwYWdlLXdpZHRoIjsKICAgICAgdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCk7CiAgICB9CiAgICByZVJlbmRlckFsbFBhZ2VzKCkgewogICAgICB0aGlzLnBhZ2VEYXRhLmZvckVhY2goKHBhZ2UpID0+IHsKICAgICAgICBwYWdlLnJlbmRlcmVkID0gZmFsc2U7CiAgICAgICAgcGFnZS5yZW5kZXJpbmcgPSBmYWxzZTsKICAgICAgfSk7CiAgICAgIHRoaXMucGFnZVJlbmRlclRhc2tzLmZvckVhY2goKHRhc2spID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgdGFzay5jYW5jZWwoKTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMucGFnZVJlbmRlclRhc2tzLmNsZWFyKCk7CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgIHRoaXMucmVuZGVyVmlzaWJsZVBhZ2VzKCk7CiAgICAgIH0pOwogICAgfQogICAgZG93bmxvYWRQZGYoKSB7CiAgICAgIGNvbnN0IGxpbmszID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwogICAgICBsaW5rMy5ocmVmID0gdGhpcy5wZGZVcmw7CiAgICAgIGxpbmszLmRvd25sb2FkID0gdGhpcy5wZGZVcmwuc3BsaXQoIi8iKS5wb3AoKSB8fCAiZG9jdW1lbnQucGRmIjsKICAgICAgbGluazMuY2xpY2soKTsKICAgIH0KICAgIHByaW50UGRmKCkgewogICAgICB3aW5kb3cub3Blbih0aGlzLnBkZlVybCwgIl9ibGFuayIpPy5wcmludCgpOwogICAgfQogICAgLyoqCiAgICAgKiBQcm92aWRlIGNvbnRleHQgbWVudSBpdGVtcyBmb3IgcmlnaHQtY2xpY2sgZnVuY3Rpb25hbGl0eQogICAgICovCiAgICBnZXRDb250ZXh0TWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJPcGVuIFBERiBpbiBOZXcgVGFiIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOkV4dGVybmFsTGluayIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy5wZGZVcmwsICJfYmxhbmsiKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDb3B5IFBERiBVUkwiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Q29weSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5wZGZVcmwpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkRvd25sb2FkIFBERiIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpEb3dubG9hZCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgdGhpcy5kb3dubG9hZFBkZigpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIlByaW50IFBERiIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpQcmludGVyIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICB0aGlzLnByaW50UGRmKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdOwogICAgfQogICAgZ2V0IGNhblpvb21JbigpIHsKICAgICAgcmV0dXJuIHRoaXMudmlld3BvcnRNb2RlICE9PSAiY3VzdG9tIiB8fCB0aGlzLmN1cnJlbnRab29tIDwgdGhpcy5NQU5VQUxfTUFYX1pPT007CiAgICB9CiAgICBnZXQgY2FuWm9vbU91dCgpIHsKICAgICAgcmV0dXJuIHRoaXMudmlld3BvcnRNb2RlICE9PSAiY3VzdG9tIiB8fCB0aGlzLmN1cnJlbnRab29tID4gdGhpcy5NQU5VQUxfTUlOX1pPT007CiAgICB9CiAgICBlbnN1cmVWaWV3ZXJSZWZzKCkgewogICAgICBpZiAoIXRoaXMudmlld2VyTWFpbikgewogICAgICAgIHRoaXMudmlld2VyTWFpbiA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnZpZXdlci1tYWluIik7CiAgICAgIH0KICAgICAgaWYgKHRoaXMudmlld2VyTWFpbiAmJiAhdGhpcy5yZXNpemVPYnNlcnZlcikgewogICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgICAgdGhpcy5tZWFzdXJlVmlld3BvcnREaW1lbnNpb25zKCk7CiAgICAgICAgICBpZiAodGhpcy5wZGZEb2N1bWVudCkgewogICAgICAgICAgICB0aGlzLnJlUmVuZGVyQWxsUGFnZXMoKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy52aWV3ZXJNYWluKTsKICAgICAgICB0aGlzLm1lYXN1cmVWaWV3cG9ydERpbWVuc2lvbnMoKTsKICAgICAgICB0aGlzLnZpZXdlck1haW4uYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLCAoZTExKSA9PiB7CiAgICAgICAgICBjb25zdCBlbGVtZW50NCA9IGUxMS5jdXJyZW50VGFyZ2V0OwogICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gZWxlbWVudDQuc2Nyb2xsVG9wOwogICAgICAgICAgY29uc3Qgc2Nyb2xsSGVpZ2h0ID0gZWxlbWVudDQuc2Nyb2xsSGVpZ2h0OwogICAgICAgICAgY29uc3QgY2xpZW50SGVpZ2h0ID0gZWxlbWVudDQuY2xpZW50SGVpZ2h0OwogICAgICAgICAgY29uc3QgZGVsdGFZID0gZTExLmRlbHRhWTsKICAgICAgICAgIGNvbnN0IGlzQXRUb3AgPSBzY3JvbGxUb3AgPT09IDA7CiAgICAgICAgICBjb25zdCBpc0F0Qm90dG9tID0gTWF0aC5hYnMoc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0IC0gc2Nyb2xsSGVpZ2h0KSA8IDE7CiAgICAgICAgICBpZiAoZGVsdGFZIDwgMCAmJiAhaXNBdFRvcCB8fCBkZWx0YVkgPiAwICYmICFpc0F0Qm90dG9tKSB7CiAgICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIH0gZWxzZSBpZiAoZGVsdGFZIDwgMCAmJiBpc0F0VG9wIHx8IGRlbHRhWSA+IDAgJiYgaXNBdEJvdHRvbSkgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgfQogICAgICAgIH0sIHsgcGFzc2l2ZTogZmFsc2UgfSk7CiAgICAgIH0KICAgIH0KICAgIG1lYXN1cmVWaWV3cG9ydERpbWVuc2lvbnMoKSB7CiAgICAgIGlmICghdGhpcy52aWV3ZXJNYWluKSB7CiAgICAgICAgdGhpcy52aWV3cG9ydERpbWVuc2lvbnMgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgc3R5bGVzMyA9IGdldENvbXB1dGVkU3R5bGUodGhpcy52aWV3ZXJNYWluKTsKICAgICAgY29uc3QgcGFkZGluZ1ggPSBwYXJzZUZsb2F0KHN0eWxlczMucGFkZGluZ0xlZnQgfHwgIjAiKSArIHBhcnNlRmxvYXQoc3R5bGVzMy5wYWRkaW5nUmlnaHQgfHwgIjAiKTsKICAgICAgY29uc3QgcGFkZGluZ1kgPSBwYXJzZUZsb2F0KHN0eWxlczMucGFkZGluZ1RvcCB8fCAiMCIpICsgcGFyc2VGbG9hdChzdHlsZXMzLnBhZGRpbmdCb3R0b20gfHwgIjAiKTsKICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCh0aGlzLnZpZXdlck1haW4uY2xpZW50V2lkdGggLSBwYWRkaW5nWCwgMCk7CiAgICAgIGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KHRoaXMudmlld2VyTWFpbi5jbGllbnRIZWlnaHQgLSBwYWRkaW5nWSwgMCk7CiAgICAgIHRoaXMudmlld3BvcnREaW1lbnNpb25zID0geyB3aWR0aCwgaGVpZ2h0IH07CiAgICB9CiAgICByZXNvbHZlSW5pdGlhbFZpZXdwb3J0TW9kZSgpIHsKICAgICAgaWYgKHR5cGVvZiB0aGlzLmluaXRpYWxab29tID09PSAibnVtYmVyIikgewogICAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gImN1c3RvbSI7CiAgICAgICAgdGhpcy5jdXJyZW50Wm9vbSA9IHRoaXMubm9ybWFsaXplWm9vbSh0aGlzLmluaXRpYWxab29tLCB0cnVlKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxab29tID09PSAicGFnZS13aWR0aCIpIHsKICAgICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJwYWdlLXdpZHRoIjsKICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxab29tID09PSAicGFnZS1maXQiIHx8IHRoaXMuaW5pdGlhbFpvb20gPT09ICJhdXRvIikgewogICAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gInBhZ2UtZml0IjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJhdXRvIjsKICAgICAgfQogICAgICBpZiAodGhpcy52aWV3cG9ydE1vZGUgIT09ICJjdXN0b20iKSB7CiAgICAgICAgdGhpcy5jdXJyZW50Wm9vbSA9IDE7CiAgICAgIH0KICAgIH0KICAgIGNvbXB1dGVWaWV3cG9ydChwYWdlKSB7CiAgICAgIHRoaXMubWVhc3VyZVZpZXdwb3J0RGltZW5zaW9ucygpOwogICAgICBjb25zdCBiYXNlVmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGU6IDEgfSk7CiAgICAgIGxldCBzY2FsZTsKICAgICAgc3dpdGNoICh0aGlzLnZpZXdwb3J0TW9kZSkgewogICAgICAgIGNhc2UgInBhZ2Utd2lkdGgiOiB7CiAgICAgICAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IHRoaXMudmlld3BvcnREaW1lbnNpb25zLndpZHRoIHx8IGJhc2VWaWV3cG9ydC53aWR0aDsKICAgICAgICAgIHNjYWxlID0gYXZhaWxhYmxlV2lkdGggLyBiYXNlVmlld3BvcnQud2lkdGg7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAicGFnZS1maXQiOgogICAgICAgIGNhc2UgImF1dG8iOiB7CiAgICAgICAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IHRoaXMudmlld3BvcnREaW1lbnNpb25zLndpZHRoIHx8IGJhc2VWaWV3cG9ydC53aWR0aDsKICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZUhlaWdodCA9IHRoaXMudmlld3BvcnREaW1lbnNpb25zLmhlaWdodCB8fCBiYXNlVmlld3BvcnQuaGVpZ2h0OwogICAgICAgICAgY29uc3Qgd2lkdGhTY2FsZSA9IGF2YWlsYWJsZVdpZHRoIC8gYmFzZVZpZXdwb3J0LndpZHRoOwogICAgICAgICAgY29uc3QgaGVpZ2h0U2NhbGUgPSBhdmFpbGFibGVIZWlnaHQgLyBiYXNlVmlld3BvcnQuaGVpZ2h0OwogICAgICAgICAgc2NhbGUgPSBNYXRoLm1pbih3aWR0aFNjYWxlLCBoZWlnaHRTY2FsZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAiY3VzdG9tIjoKICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICBzY2FsZSA9IHRoaXMubm9ybWFsaXplWm9vbSh0aGlzLmN1cnJlbnRab29tIHx8IDEsIGZhbHNlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzY2FsZSkgfHwgc2NhbGUgPD0gMCkgewogICAgICAgIHNjYWxlID0gMTsKICAgICAgfQogICAgICBjb25zdCBjbGFtcGVkU2NhbGUgPSB0aGlzLnZpZXdwb3J0TW9kZSA9PT0gImN1c3RvbSIgPyB0aGlzLm5vcm1hbGl6ZVpvb20oc2NhbGUsIHRydWUpIDogdGhpcy5ub3JtYWxpemVab29tKHNjYWxlLCBmYWxzZSk7CiAgICAgIGlmICh0aGlzLnZpZXdwb3J0TW9kZSAhPT0gImN1c3RvbSIpIHsKICAgICAgICB0aGlzLmN1cnJlbnRab29tID0gY2xhbXBlZFNjYWxlOwogICAgICB9CiAgICAgIHJldHVybiBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGU6IGNsYW1wZWRTY2FsZSB9KTsKICAgIH0KICAgIG5vcm1hbGl6ZVpvb20odmFsdWUyLCBjbGFtcFRvTWFudWFsUmFuZ2UpIHsKICAgICAgY29uc3QgbWluMyA9IGNsYW1wVG9NYW51YWxSYW5nZSA/IHRoaXMuTUFOVUFMX01JTl9aT09NIDogdGhpcy5BQlNPTFVURV9NSU5fWk9PTTsKICAgICAgY29uc3QgbWF4MyA9IGNsYW1wVG9NYW51YWxSYW5nZSA/IHRoaXMuTUFOVUFMX01BWF9aT09NIDogdGhpcy5BQlNPTFVURV9NQVhfWk9PTTsKICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbHVlMiwgbWluMyksIG1heDMpOwogICAgfQogICAgYXN5bmMgY2xlYW51cERvY3VtZW50KCkgewogICAgICBpZiAodGhpcy5yZW5kZXJBYm9ydENvbnRyb2xsZXIpIHsKICAgICAgICB0aGlzLnJlbmRlckFib3J0Q29udHJvbGxlci5hYm9ydCgpOwogICAgICAgIHRoaXMucmVuZGVyQWJvcnRDb250cm9sbGVyID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyUHJvbWlzZSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmN1cnJlbnRSZW5kZXJQcm9taXNlOwogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgfQogICAgICAgIHRoaXMuY3VycmVudFJlbmRlclByb21pc2UgPSBudWxsOwogICAgICB9CiAgICAgIHRoaXMuY3VycmVudFJlbmRlclRhc2sgPSBudWxsOwogICAgICB0aGlzLnBhZ2VSZW5kZXJUYXNrcy5mb3JFYWNoKCh0YXNrKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRhc2suY2FuY2VsKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLnBhZ2VSZW5kZXJUYXNrcy5jbGVhcigpOwogICAgICBmb3IgKGNvbnN0IHRhc2sgb2YgdGhpcy50aHVtYm5haWxSZW5kZXJUYXNrcyB8fCBbXSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICB0YXNrLmNhbmNlbCgpOwogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MgPSBbXTsKICAgICAgdGhpcy5yZW5kZXJTdGF0ZSA9ICJpZGxlIjsKICAgICAgdGhpcy5wYWdlUmVuZGVyaW5nID0gZmFsc2U7CiAgICAgIHRoaXMucGFnZU51bVBlbmRpbmcgPSBudWxsOwogICAgICB0aGlzLnRodW1ibmFpbERhdGEgPSBbXTsKICAgICAgdGhpcy5wYWdlRGF0YSA9IFtdOwogICAgICB0aGlzLmRvY3VtZW50SWQgPSAiIjsKICAgICAgaWYgKHRoaXMuY2FudmFzICYmIHRoaXMuY3R4KSB7CiAgICAgICAgdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpOwogICAgICB9CiAgICAgIGlmICh0aGlzLnBkZkRvY3VtZW50KSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRoaXMucGRmRG9jdW1lbnQuZGVzdHJveSgpOwogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBkZXN0cm95aW5nIFBERiBkb2N1bWVudDoiLCBlcnJvcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMucGRmRG9jdW1lbnQgPSBudWxsOwogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNQZGZWaWV3ZXIyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtYXBwZGFzaC9kZWVzLXNpbXBsZS1hcHBkYXNoLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9fZXNEZWNvcmF0ZTcwID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3MSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVtb1ZpZXdEYXNoYm9hcmQgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZW1vLXZpZXctZGFzaGJvYXJkIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIHZhciBEZW1vVmlld0Rhc2hib2FyZDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9fZXNEZWNvcmF0ZTcwKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVtb1ZpZXdEYXNoYm9hcmQyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgIH0KICAgICAgaDEgewogICAgICAgIG1hcmdpbjogMCAwIDIwcHggMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAiLCAiI2ZmZiIpfTsKICAgICAgfQogICAgICBkZWVzLXN0YXRzZ3JpZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgfQogICAgYAogICAgXTsKICAgIHN0YXRzVGlsZXMgPSBbCiAgICAgIHsKICAgICAgICBpZDogInVzZXJzIiwKICAgICAgICB0aXRsZTogIkFjdGl2ZSBVc2VycyIsCiAgICAgICAgdmFsdWU6IDEyMzQsCiAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgaWNvbjogImZhVXNlcnMiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiKzE1JSBmcm9tIGxhc3Qgd2VlayIsCiAgICAgICAgY29sb3I6ICIjMjJjNTVlIgogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJwYWdldmlld3MiLAogICAgICAgIHRpdGxlOiAiUGFnZSBWaWV3cyIsCiAgICAgICAgdmFsdWU6IDU2NzAwLAogICAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICAgIGljb246ICJmYUV5ZSIsCiAgICAgICAgZGVzY3JpcHRpb246ICI1Ni43ayB0b3RhbCB2aWV3cyIsCiAgICAgICAgY29sb3I6ICIjM2I4MmY2IgogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJ1cHRpbWUiLAogICAgICAgIHRpdGxlOiAiU3lzdGVtIFVwdGltZSIsCiAgICAgICAgdmFsdWU6IDg5LAogICAgICAgIHVuaXQ6ICIlIiwKICAgICAgICB0eXBlOiAiZ2F1Z2UiLAogICAgICAgIGljb246ICJmYVNlcnZlciIsCiAgICAgICAgZGVzY3JpcHRpb246ICJMYXN0IDMwIGRheXMiLAogICAgICAgIGNvbG9yOiAiIzEwYjk4MSIsCiAgICAgICAgZ2F1Z2VPcHRpb25zOiB7CiAgICAgICAgICBtaW46IDAsCiAgICAgICAgICBtYXg6IDEwMCwKICAgICAgICAgIHRocmVzaG9sZHM6IFsKICAgICAgICAgICAgeyB2YWx1ZTogODAsIGNvbG9yOiAiI2VmNDQ0NCIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogOTAsIGNvbG9yOiAiI2Y1OWUwYiIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogMTAwLCBjb2xvcjogIiMxMGI5ODEiIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogInJlc3BvbnNlIiwKICAgICAgICB0aXRsZTogIkF2ZyBSZXNwb25zZSBUaW1lIiwKICAgICAgICB2YWx1ZTogMy4yLAogICAgICAgIHVuaXQ6ICJzIiwKICAgICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgICBpY29uOiAiZmFDbG9jayIsCiAgICAgICAgZGVzY3JpcHRpb246ICItMC41cyBpbXByb3ZlbWVudCIsCiAgICAgICAgY29sb3I6ICIjZjU5ZTBiIgogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJyZXZlbnVlIiwKICAgICAgICB0aXRsZTogIk1vbnRobHkgUmV2ZW51ZSIsCiAgICAgICAgdmFsdWU6IDQ4NTIwLAogICAgICAgIHVuaXQ6ICIkIiwKICAgICAgICB0eXBlOiAidHJlbmQiLAogICAgICAgIGljb246ICJmYURvbGxhclNpZ24iLAogICAgICAgIGRlc2NyaXB0aW9uOiAiKzguMiUgZ3Jvd3RoIiwKICAgICAgICBjb2xvcjogIiMyMmM1NWUiLAogICAgICAgIHRyZW5kRGF0YTogWzM1ZTMsIDM4ZTMsIDM3NTAwLCA0MWUzLCAzOTgwMCwgNDJlMywgNDQxMDAsIDQzMjAwLCA0NTYwMCwgNDcxMDAsIDQ2ODAwLCA0ODUyMF0KICAgICAgfSwKICAgICAgewogICAgICAgIGlkOiAidHJhZmZpYyIsCiAgICAgICAgdGl0bGU6ICJUcmFmZmljIFRyZW5kIiwKICAgICAgICB2YWx1ZTogMTY4MCwKICAgICAgICB0eXBlOiAidHJlbmQiLAogICAgICAgIGljb246ICJmYUNoYXJ0TGluZSIsCiAgICAgICAgZGVzY3JpcHRpb246ICJMYXN0IDcgZGF5cyIsCiAgICAgICAgY29sb3I6ICIjM2I4MmY2IiwKICAgICAgICB0cmVuZERhdGE6IFsxMjAwLCAxMzUwLCAxMTAwLCAxNDUwLCAxNjAwLCAxNTUwLCAxNjgwXQogICAgICB9CiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxoMT5EYXNoYm9hcmQ8L2gxPgogICAgICA8cD5XZWxjb21lIHRvIHlvdXIgYXBwbGljYXRpb24gZGFzaGJvYXJkLiBIZXJlJ3MgYW4gb3ZlcnZpZXcgb2YgeW91ciBtZXRyaWNzOjwvcD4KICAgICAgPGRlZXMtc3RhdHNncmlkCiAgICAgICAgLnRpbGVzPSR7dGhpcy5zdGF0c1RpbGVzfQogICAgICAgIEB0aWxlLWFjdGlvbj0keyhlMTEpID0+IHsKICAgICAgICBjb25zb2xlLmxvZygiVGlsZSBhY3Rpb246IiwgZTExLmRldGFpbCk7CiAgICAgIH19CiAgICAgID48L2RlZXMtc3RhdHNncmlkPgogICAgYDsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzEoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9WaWV3RGFzaGJvYXJkMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CnZhciBEZW1vVmlld0FuYWx5dGljcyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlbW8tdmlldy1hbmFseXRpY3MiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgdmFyIERlbW9WaWV3QW5hbHl0aWNzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX19lc0RlY29yYXRlNzAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZW1vVmlld0FuYWx5dGljczIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgfQogICAgICBoMSB7CiAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMCIsICIjZmZmIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxoMT5BbmFseXRpY3M8L2gxPgogICAgICA8cD5UaGlzIGlzIHRoZSBhbmFseXRpY3Mgdmlldy4gWW91IGNhbiBhZGQgY2hhcnRzIGFuZCBtZXRyaWNzIGhlcmUuPC9wPgogICAgYDsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzEoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9WaWV3QW5hbHl0aWNzMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CnZhciBEZW1vVmlld1NldHRpbmdzID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVtby12aWV3LXNldHRpbmdzIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIHZhciBEZW1vVmlld1NldHRpbmdzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX19lc0RlY29yYXRlNzAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZW1vVmlld1NldHRpbmdzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICB9CiAgICAgIGgxIHsKICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwIiwgIiNmZmYiKX07CiAgICAgIH0KICAgICAgLnNldHRpbmdzLXNlY3Rpb24gewogICAgICAgIG1hcmdpbi10b3A6IDMwcHg7CiAgICAgIH0KICAgICAgLnNldHRpbmdzLXNlY3Rpb24gaDIgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBtYXJnaW46IDAgMCAxNXB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNjY2MiKX07CiAgICAgIH0KICAgICAgLmhvcml6b250YWwtZm9ybS1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y1ZjVmNSIsICIjMWExYTFhIil9OwogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIG1hcmdpbjogMTVweCAwOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxoMT5TZXR0aW5nczwvaDE+CiAgICAgIDxwPkNvbmZpZ3VyZSB5b3VyIGFwcGxpY2F0aW9uIHNldHRpbmdzIGJlbG93OjwvcD4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgIDxoMj5HZW5lcmFsIFNldHRpbmdzPC9oMj4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9ImFwcE5hbWUiIGxhYmVsPSJBcHBsaWNhdGlvbiBOYW1lIiB2YWx1ZT0iTXkgQXBwIj48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJhcGlFbmRwb2ludCIgbGFiZWw9IkFQSSBFbmRwb2ludCIgdmFsdWU9Imh0dHBzOi8vYXBpLmV4YW1wbGUuY29tIj48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIGtleT0iZW52aXJvbm1lbnQiCiAgICAgICAgICAgIGxhYmVsPSJFbnZpcm9ubWVudCIKICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgICAgeyBvcHRpb246ICJEZXZlbG9wbWVudCIsIGtleTogImRldiIgfSwKICAgICAgICB7IG9wdGlvbjogIlN0YWdpbmciLCBrZXk6ICJzdGFnaW5nIiB9LAogICAgICAgIHsgb3B0aW9uOiAiUHJvZHVjdGlvbiIsIGtleTogInByb2QiIH0KICAgICAgXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7eyBvcHRpb246ICJQcm9kdWN0aW9uIiwga2V5OiAicHJvZCIgfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCBrZXk9ImVuYWJsZU5vdGlmaWNhdGlvbnMiIGxhYmVsPSJFbmFibGUgTm90aWZpY2F0aW9ucyIgdmFsdWU9InRydWUiPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IGtleT0iZW5hYmxlQW5hbHl0aWNzIiBsYWJlbD0iRW5hYmxlIEFuYWx5dGljcyIgdmFsdWU9ImZhbHNlIj48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5TYXZlIEdlbmVyYWwgU2V0dGluZ3M8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3Mtc2VjdGlvbiI+CiAgICAgICAgPGgyPkRpc3BsYXkgUHJlZmVyZW5jZXM8L2gyPgogICAgICAgIDxkaXYgY2xhc3M9Imhvcml6b250YWwtZm9ybS1zZWN0aW9uIj4KICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tdG9wOiAwOyBtYXJnaW4tYm90dG9tOiAxNnB4OyI+UXVpY2sgZGlzcGxheSBzZXR0aW5ncyB1c2luZyBob3Jpem9udGFsIGxheW91dDo8L3A+CiAgICAgICAgICA8ZGVlcy1mb3JtIGhvcml6b250YWwtbGF5b3V0PgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAgIGtleT0idGhlbWUiCiAgICAgICAgICAgICAgbGFiZWw9IlRoZW1lIgogICAgICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHtmYWxzZX0KICAgICAgICAgICAgICAub3B0aW9ucz0ke1sKICAgICAgICB7IG9wdGlvbjogIkxpZ2h0Iiwga2V5OiAibGlnaHQiIH0sCiAgICAgICAgeyBvcHRpb246ICJEYXJrIiwga2V5OiAiZGFyayIgfSwKICAgICAgICB7IG9wdGlvbjogIkF1dG8iLCBrZXk6ICJhdXRvIiB9CiAgICAgIF19CiAgICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7eyBvcHRpb246ICJEYXJrIiwga2V5OiAiZGFyayIgfX0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgICBrZXk9Imxhbmd1YWdlIgogICAgICAgICAgICAgIGxhYmVsPSJMYW5ndWFnZSIKICAgICAgICAgICAgICAuZW5hYmxlU2VhcmNoPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgICAgeyBvcHRpb246ICJFbmdsaXNoIiwga2V5OiAiZW4iIH0sCiAgICAgICAgeyBvcHRpb246ICJHZXJtYW4iLCBrZXk6ICJkZSIgfSwKICAgICAgICB7IG9wdGlvbjogIlNwYW5pc2giLCBrZXk6ICJlcyIgfSwKICAgICAgICB7IG9wdGlvbjogIkZyZW5jaCIsIGtleTogImZyIiB9CiAgICAgIF19CiAgICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7eyBvcHRpb246ICJFbmdsaXNoIiwga2V5OiAiZW4iIH19CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IGtleT0iY29tcGFjdE1vZGUiIGxhYmVsPSJDb21wYWN0IE1vZGUiPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgIDxoMj5Ob3RpZmljYXRpb24gU2V0dGluZ3M8L2gyPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJFbWFpbCBGcmVxdWVuY3kifQogICAgICAgICAgICAub3B0aW9ucz0ke1siUmVhbC10aW1lIiwgIkRhaWx5IERpZ2VzdCIsICJXZWVrbHkgU3VtbWFyeSIsICJOZXZlciJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiUmVhbC10aW1lIn0KICAgICAgICAgICAgLmtleT0keyJlbWFpbEZyZXF1ZW5jeSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCBrZXk9InB1c2hOb3RpZmljYXRpb25zIiBsYWJlbD0iRW5hYmxlIFB1c2ggTm90aWZpY2F0aW9ucyIgdmFsdWU9InRydWUiPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IGtleT0ic291bmRBbGVydHMiIGxhYmVsPSJQbGF5IFNvdW5kIGZvciBBbGVydHMiIHZhbHVlPSJ0cnVlIj48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5VcGRhdGUgTm90aWZpY2F0aW9uczwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVtb1ZpZXdTZXR0aW5nczIgPSBfY2xhc3NUaGlzOwp9KSgpOwp2YXIgZGVtb0Z1bmM0MiA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIGJvZHkgewogICAgICBtYXJnaW46IDA7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CiAgICAuZGVtby1jb250YWluZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogMDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLXNpbXBsZS1hcHBkYXNoCiAgICAgIG5hbWU9Ik15IEFwcGxpY2F0aW9uIgogICAgICB0ZXJtaW5hbFNldHVwQ29tbWFuZD0iZWNobyAnV2VsY29tZSB0byB0aGUgdGVybWluYWwhJyIKICAgICAgLnZpZXdUYWJzPSR7WwogIHsKICAgIG5hbWU6ICJEYXNoYm9hcmQiLAogICAgaWNvbk5hbWU6ICJsdWNpZGU6aG9tZSIsCiAgICBlbGVtZW50OiBEZW1vVmlld0Rhc2hib2FyZAogIH0sCiAgewogICAgbmFtZTogIkFuYWx5dGljcyIsCiAgICBpY29uTmFtZTogImx1Y2lkZTpsaW5lQ2hhcnQiLAogICAgZWxlbWVudDogRGVtb1ZpZXdBbmFseXRpY3MKICB9LAogIHsKICAgIG5hbWU6ICJTZXR0aW5ncyIsCiAgICBpY29uTmFtZTogImx1Y2lkZTpzZXR0aW5ncyIsCiAgICBlbGVtZW50OiBEZW1vVmlld1NldHRpbmdzCiAgfQpdfQogICAgICBAbG9nb3V0PSR7KCkgPT4gewogIGNvbnNvbGUubG9nKCJMb2dvdXQgZXZlbnQgdHJpZ2dlcmVkIik7CiAgYWxlcnQoIkxvZ291dCBjbGlja2VkISIpOwp9fQogICAgICBAdmlldy1zZWxlY3Q9JHsoZTExKSA9PiB7CiAgY29uc29sZS5sb2coIlZpZXcgc2VsZWN0ZWQ6IiwgZTExLmRldGFpbC52aWV3Lm5hbWUpOwp9fQogICAgPjwvZGVlcy1zaW1wbGUtYXBwZGFzaD4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtYXBwZGFzaC9kZWVzLXNpbXBsZS1hcHBkYXNoLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGVlc19pY29uKCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTcxID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3MiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1NpbXBsZUFwcERhc2ggPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNpbXBsZS1hcHBkYXNoIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbmFtZV9kZWNvcmF0b3JzOwogIGxldCBfbmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX25hbWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZpZXdUYWJzX2RlY29yYXRvcnM7CiAgbGV0IF92aWV3VGFic19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZpZXdUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXJtaW5hbFNldHVwQ29tbWFuZF9kZWNvcmF0b3JzOwogIGxldCBfdGVybWluYWxTZXR1cENvbW1hbmRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXJtaW5hbFNldHVwQ29tbWFuZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRWaWV3X2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZFZpZXdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFZpZXdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1NpbXBsZUFwcERhc2gyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbmFtZV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfdmlld1RhYnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX3Rlcm1pbmFsU2V0dXBDb21tYW5kX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc2VsZWN0ZWRWaWV3X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTcxKHRoaXMsIG51bGwsIF9uYW1lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm5hbWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm5hbWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubmFtZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubmFtZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9uYW1lX2luaXRpYWxpemVycywgX25hbWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3MSh0aGlzLCBudWxsLCBfdmlld1RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmlld1RhYnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZpZXdUYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZpZXdUYWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52aWV3VGFicyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92aWV3VGFic19pbml0aWFsaXplcnMsIF92aWV3VGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTcxKHRoaXMsIG51bGwsIF90ZXJtaW5hbFNldHVwQ29tbWFuZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0ZXJtaW5hbFNldHVwQ29tbWFuZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGVybWluYWxTZXR1cENvbW1hbmQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGVybWluYWxTZXR1cENvbW1hbmQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRlcm1pbmFsU2V0dXBDb21tYW5kID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Rlcm1pbmFsU2V0dXBDb21tYW5kX2luaXRpYWxpemVycywgX3Rlcm1pbmFsU2V0dXBDb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzEodGhpcywgbnVsbCwgX3NlbGVjdGVkVmlld19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFZpZXciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkVmlldyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZFZpZXcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVmlldyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZFZpZXdfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU2ltcGxlQXBwRGFzaDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNDI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIlNpbXBsZSI7CiAgICAjbmFtZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfbmFtZV9pbml0aWFsaXplcnMsICJBcHBsaWNhdGlvbiBEYXNoYm9hcmQiKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgbmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI25hbWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBuYW1lKHZhbHVlMikgewogICAgICB0aGlzLiNuYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmlld1RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcyKHRoaXMsIF9uYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfdmlld1RhYnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IHZpZXdUYWJzKCkgewogICAgICByZXR1cm4gdGhpcy4jdmlld1RhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2aWV3VGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmlld1RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN0ZXJtaW5hbFNldHVwQ29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX3ZpZXdUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfdGVybWluYWxTZXR1cENvbW1hbmRfaW5pdGlhbGl6ZXJzLCBgZWNobyAiVGVybWluYWwgcmVhZHkiYCkpOwogICAgZ2V0IHRlcm1pbmFsU2V0dXBDb21tYW5kKCkgewogICAgICByZXR1cm4gdGhpcy4jdGVybWluYWxTZXR1cENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0ZXJtaW5hbFNldHVwQ29tbWFuZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGVybWluYWxTZXR1cENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZFZpZXdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcyKHRoaXMsIF90ZXJtaW5hbFNldHVwQ29tbWFuZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX3NlbGVjdGVkVmlld19pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHNlbGVjdGVkVmlldygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkVmlld19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkVmlldyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuYXBwYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMjRweCk7CiAgICAgICAgd2lkdGg6IDI0MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5OSUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTElKSIsICJoc2woMCAwJSAxMyUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gMWZyIG1pbi1jb250ZW50OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMjBweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTElKSIsICJoc2woMCAwJSAxMyUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KCiAgICAgIC5oZWFkZXItaWNvbi13cmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImxpbmVhci1ncmFkaWVudCgxMzVkZWcsIGhzbCgyMTUgMjAlIDk1JSkgMCUsIGhzbCgyMTUgMjAlIDkwJSkgMTAwJSkiLCAibGluZWFyLWdyYWRpZW50KDEzNWRlZywgaHNsKDIxNSAyMCUgMTglKSAwJSwgaHNsKDIxNSAyMCUgMTQlKSAxMDAlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMCAxcHggMnB4IHJnYigwIDAgMCAvIDAuMDUpLCBpbnNldCAwIDFweCAwIHJnYigyNTUgMjU1IDI1NSAvIDAuNSkiLCAiMCAxcHggMnB4IHJnYigwIDAgMCAvIDAuMiksIGluc2V0IDAgMXB4IDAgcmdiKDI1NSAyNTUgMjU1IC8gMC4wNSkiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkZXItaWNvbi13cmFwcGVyIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMCUgNDAlKSIsICJoc2woMjE1IDIwJSA3MCUpIil9OwogICAgICB9CgogICAgICAuYXBwTmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07CiAgICAgIH0KCiAgICAgIC52aWV3VGFicy1jb250YWluZXIgewogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcGFkZGluZzogMTJweCA4cHg7CiAgICAgICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwogICAgICAgIHNjcm9sbGJhci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfSB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnZpZXdUYWJzLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiA2cHg7CiAgICAgIH0KCiAgICAgIC52aWV3VGFicy1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnZpZXdUYWJzLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAudmlld1RhYnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc1JSkiLCAiaHNsKDAgMCUgMzAlKSIpfTsKICAgICAgfQoKICAgICAgLnNlY3Rpb24tbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNTAlKSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICAudmlld1RhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgLnZpZXdUYWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCAiaHNsKDAgMCUgNjUlKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICB9CgogICAgICAudmlld1RhYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDAlIC8gMC4wNCkiLCAiaHNsKDAgMCUgMTAwJSAvIDAuMDUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAudmlld1RhYjphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAwJSAvIDAuMDYpIiwgImhzbCgwIDAlIDEwMCUgLyAwLjA3KSIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTkpOwogICAgICB9CgogICAgICAudmlld1RhYi5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjUlIDk1JSkiLCAiaHNsKDIxNSAyMCUgMTUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjUlIDMwJSkiLCAiaHNsKDIxNSAyNSUgODUlKSIpfTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAudmlld1RhYi5zZWxlY3RlZDo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDhweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICB3aWR0aDogM3B4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMnB4IDJweCAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDcwJSA1MCUpIiwgImhzbCgyMTUgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC52aWV3VGFiIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC52aWV3VGFiOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMC43NTsKICAgICAgfQoKICAgICAgLnZpZXdUYWIuc2VsZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAwLjk7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDcwJSA0NSUpIiwgImhzbCgyMTUgNzAlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC52aWV3VGFiIHNwYW4gewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYXBwQWN0aW9ucyB7CiAgICAgICAgcGFkZGluZzogMTJweCA4cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MSUpIiwgImhzbCgwIDAlIDEzJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NCUgNjAlIC8gMC4wOCkiLCAiaHNsKDAgODQlIDYwJSAvIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQlIDQ1JSkiLCAiaHNsKDAgODQlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24gZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuYWN0aW9uOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMC45OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQlIDQ1JSkiLCAiaHNsKDAgODQlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hcHBjb250ZW50IHsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICByaWdodDogMHB4OwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMjRweCk7CiAgICAgICAgYm90dG9tOiAyNHB4OwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyNDBweCk7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCAiaHNsKDAgMCUgNSUpIil9OwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgIH0KCiAgICAgIC5jb250cm9sYmFyIHsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMCAxMyUgMTglKSIsICJoc2woMjIwIDEzJSAxMiUpIil9OwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwogICAgICB9CgogICAgICAuY29udHJvbCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgY29sb3I6IGhzbCgwIDAlIDcwJSk7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBoc2woMCAwJSAxMDAlIC8gMC4wOCk7CiAgICAgIH0KCiAgICAgIC5jb250cm9sOmZpcnN0LWNoaWxkIHsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2w6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IGhzbCgwIDAlIDEwMCUgLyAwLjA2KTsKICAgICAgICBjb2xvcjogaHNsKDAgMCUgOTUlKTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLnN0YXR1cy1jb25uZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBjb2xvcjogaHNsKDE0MiA3MCUgNTAlKTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wuc3RhdHVzLXRlcm1pbmFsIGRlZXMtaWNvbiB7CiAgICAgICAgY29sb3I6IGhzbCg0NSA5MCUgNTUlKTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJhcHBiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1oZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItaWNvbi13cmFwcGVyIj4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6bGF5b3V0R3JpZCJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFwcE5hbWUiPiR7dGhpcy5uYW1lfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3VGFicy1jb250YWluZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWxhYmVsIj5OYXZpZ2F0aW9uPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZpZXdUYWJzIj4KICAgICAgICAgICAgICAke3RoaXMudmlld1RhYnMubWFwKCh2aWV3KSA9PiBiMmAKICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ2aWV3VGFiICR7dGhpcy5zZWxlY3RlZFZpZXcgPT09IHZpZXcgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMubG9hZFZpZXcodmlldyl9CiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAke3ZpZXcuaWNvbk5hbWUgPyBiMmAKICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249IiR7dmlldy5pY29uTmFtZS5pbmNsdWRlcygiOiIpID8gdmlldy5pY29uTmFtZSA6IGBsdWNpZGU6JHt2aWV3Lmljb25OYW1lfWB9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6ZmlsZSJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgICAgICAgICAgIDxzcGFuPiR7dmlldy5uYW1lfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFwcEFjdGlvbnMiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iIEBjbGljaz0keygpID0+IHsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJsb2dvdXQiLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTsKICAgICAgfX0+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHsibHVjaWRlOmxvZ091dCJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3Bhbj5TaWduIG91dDwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhcHBjb250ZW50Ij4KICAgICAgICAgIDwhLS0gQ29udGVudCBnb2VzIGhlcmUgLS0+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbGJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sIHN0YXR1cy1jb25uZWN0ZWQiPgogICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6d2lmaSJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPHNwYW4+Q29ubmVjdGVkPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sIHN0YXR1cy10ZXJtaW5hbCIgQGNsaWNrPSR7dGhpcy5sYXVuY2hUZXJtaW5hbH0+CiAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249IiR7Imx1Y2lkZTp0ZXJtaW5hbCJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPHNwYW4+VGVybWluYWw8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKHRoaXMudmlld1RhYnMgJiYgdGhpcy52aWV3VGFicy5sZW5ndGggPiAwKSB7CiAgICAgICAgYXdhaXQgdGhpcy5sb2FkVmlldyh0aGlzLnZpZXdUYWJzWzBdKTsKICAgICAgfQogICAgfQogICAgY3VycmVudFRlcm1pbmFsID0gX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfc2VsZWN0ZWRWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGFzeW5jIGxhdW5jaFRlcm1pbmFsKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBpZiAodGhpcy5jdXJyZW50VGVybWluYWwpIHsKICAgICAgICBhd2FpdCB0aGlzLmNsb3NlVGVybWluYWwoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgbWFpbmNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmNvbnRhaW5lciIpOwogICAgICBjb25zdCB7IERlZXNXb3Jrc3BhY2VUZXJtaW5hbDogRGVlc1dvcmtzcGFjZVRlcm1pbmFsMiB9ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiAoaW5pdF9kZWVzX3dvcmtzcGFjZV90ZXJtaW5hbCgpLCBkZWVzX3dvcmtzcGFjZV90ZXJtaW5hbF9leHBvcnRzKSk7CiAgICAgIGNvbnN0IHRlcm1pbmFsID0gbmV3IERlZXNXb3Jrc3BhY2VUZXJtaW5hbDIoKTsKICAgICAgdGVybWluYWwuc2V0dXBDb21tYW5kID0gdGhpcy50ZXJtaW5hbFNldHVwQ29tbWFuZDsKICAgICAgdGhpcy5jdXJyZW50VGVybWluYWwgPSB0ZXJtaW5hbDsKICAgICAgbWFpbmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0ZXJtaW5hbCk7CiAgICAgIHRlcm1pbmFsLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgdGVybWluYWwuc3R5bGUuekluZGV4ID0gIjEwIjsKICAgICAgdGVybWluYWwuc3R5bGUudG9wID0gIjBweCI7CiAgICAgIHRlcm1pbmFsLnN0eWxlLmxlZnQgPSAiMjQwcHgiOwogICAgICB0ZXJtaW5hbC5zdHlsZS5yaWdodCA9ICIwcHgiOwogICAgICB0ZXJtaW5hbC5zdHlsZS5ib3R0b20gPSAiMjRweCI7CiAgICAgIHRlcm1pbmFsLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgIHRlcm1pbmFsLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDhweCkgc2NhbGUoMC45OSkiOwogICAgICB0ZXJtaW5hbC5zdHlsZS50cmFuc2l0aW9uID0gImFsbCAwLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIjsKICAgICAgdGVybWluYWwuc3R5bGUuYm94U2hhZG93ID0gIjAgMjVweCA1MHB4IC0xMnB4IHJnYigwIDAgMCAvIDAuNSksIDAgMCAwIDFweCByZ2IoMjU1IDI1NSAyNTUgLyAwLjA1KSI7CiAgICAgIHRlcm1pbmFsLnN0eWxlLm1heFdpZHRoID0gYGNhbGMoJHttYWluY29udGFpbmVyLmNsaWVudFdpZHRofXB4IC0yNDBweClgOwogICAgICB0ZXJtaW5hbC5zdHlsZS5tYXhIZWlnaHQgPSBgY2FsYygke21haW5jb250YWluZXIuY2xpZW50SGVpZ2h0fXB4IC0gMjRweClgOwogICAgICB0ZXJtaW5hbC5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsICgpID0+IHRoaXMuY2xvc2VUZXJtaW5hbCgpKTsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgdGVybWluYWwuc3R5bGUub3BhY2l0eSA9ICIxIjsKICAgICAgdGVybWluYWwuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZVkoMCkgc2NhbGUoMSkiOwogICAgICByZXR1cm4gdGVybWluYWw7CiAgICB9CiAgICBhc3luYyBjbG9zZVRlcm1pbmFsKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBpZiAodGhpcy5jdXJyZW50VGVybWluYWwpIHsKICAgICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbC5zdHlsZS5vcGFjaXR5ID0gIjAiOwogICAgICAgIHRoaXMuY3VycmVudFRlcm1pbmFsLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDhweCkgc2NhbGUoMC45OSkiOwogICAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMjUwKTsKICAgICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbC5yZW1vdmUoKTsKICAgICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbCA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGN1cnJlbnRWaWV3OwogICAgYXN5bmMgbG9hZFZpZXcodmlld0FyZykgewogICAgICBjb25zdCBhcHBjb250ZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5hcHBjb250ZW50Iik7CiAgICAgIGNvbnN0IHZpZXcgPSBuZXcgdmlld0FyZy5lbGVtZW50KCk7CiAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3KSB7CiAgICAgICAgdGhpcy5jdXJyZW50Vmlldy5yZW1vdmUoKTsKICAgICAgfQogICAgICBhcHBjb250ZW50LmFwcGVuZENoaWxkKHZpZXcpOwogICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gdmlldzsKICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSB2aWV3QXJnOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ2aWV3LXNlbGVjdCIsIHsKICAgICAgICBkZXRhaWw6IHsgdmlldzogdmlld0FyZyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3MihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1NpbXBsZUFwcERhc2gyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtbG9naW4vZGVlcy1zaW1wbGUtbG9naW4uZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM0MyA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIGJvZHkgewogICAgICBtYXJnaW46IDA7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CiAgICAuZGVtby1jb250YWluZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogMDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLXNpbXBsZS1sb2dpbiAKICAgICAgbmFtZT0iTXkgQXBwbGljYXRpb24iCiAgICAgIEBsb2dpbj0keyhlMTEpID0+IHsKICBjb25zb2xlLmxvZygiTG9naW4gZXZlbnQgcmVjZWl2ZWQ6IiwgZTExLmRldGFpbCk7CiAgY29uc3QgbG9naW5EYXRhID0gZTExLmRldGFpbD8uZGF0YSB8fCBlMTEuZGV0YWlsOwogIGlmIChsb2dpbkRhdGE/LnVzZXJuYW1lICYmIGxvZ2luRGF0YT8ucGFzc3dvcmQpIHsKICAgIGFsZXJ0KGBMb2dpbiBhdHRlbXB0ZWQgd2l0aDoKVXNlcm5hbWU6ICR7bG9naW5EYXRhLnVzZXJuYW1lfQpQYXNzd29yZDogJHtsb2dpbkRhdGEucGFzc3dvcmR9YCk7CiAgfSBlbHNlIHsKICAgIGNvbnNvbGUuZXJyb3IoIkludmFsaWQgbG9naW4gZGF0YSBzdHJ1Y3R1cmU6IiwgZTExLmRldGFpbCk7CiAgfQp9fQogICAgPgogICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiA0MHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4KICAgICAgICA8aDE+V2VsY29tZSE8L2gxPgogICAgICAgIDxwPlRoaXMgaXMgdGhlIHNsb3R0ZWQgY29udGVudCB0aGF0IGFwcGVhcnMgYWZ0ZXIgbG9naW4uPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGVlcy1zaW1wbGUtbG9naW4+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtc2ltcGxlL2RlZXMtc2ltcGxlLWxvZ2luL2RlZXMtc2ltcGxlLWxvZ2luLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTcyID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3MyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1NpbXBsZUxvZ2luID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1zaW1wbGUtbG9naW4iKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9uYW1lX2RlY29yYXRvcnM7CiAgbGV0IF9uYW1lX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbmFtZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzU2ltcGxlTG9naW4yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbmFtZV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfX2VzRGVjb3JhdGU3Mih0aGlzLCBudWxsLCBfbmFtZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJuYW1lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJuYW1lIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm5hbWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm5hbWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbmFtZV9pbml0aWFsaXplcnMsIF9uYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzIobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU2ltcGxlTG9naW4yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIFNUQVRJQwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQzOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJTaW1wbGUiOwogICAgI25hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzModGhpcywgX25hbWVfaW5pdGlhbGl6ZXJzLCAiQXBwbGljYXRpb24iKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgbmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI25hbWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBuYW1lKHZhbHVlMikgewogICAgICB0aGlzLiNuYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmxvZ2luQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgIH0KCiAgICAgIC5zbG90Q29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIHRyYW5zZm9ybSAwLjJzIGVhc2U7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5sb2dpbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAzNjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICB9CgogICAgICAubG9naW4taGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLnN1YmhlYWRlciB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmxvZ2luLWNhcmQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5sb2dpbi1jYXJkIGRlZXMtZm9ybSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTZweDsKICAgICAgfQoKICAgICAgLmxvZ2luLWNhcmQgZGVlcy1pbnB1dC10ZXh0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLmxvZ2luLWNhcmQgZGVlcy1mb3JtLXN1Ym1pdCB7CiAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImxvZ2luQ29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsb2dpbiI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dpbi1oZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPlNpZ24gaW48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViaGVhZGVyIj5FbnRlciB5b3VyIGNyZWRlbnRpYWxzIHRvIGFjY2VzcyAke3RoaXMubmFtZX08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibG9naW4tY2FyZCI+CiAgICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9InVzZXJuYW1lIiBsYWJlbD0iVXNlcm5hbWUiIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJwYXNzd29yZCIgbGFiZWw9IlBhc3N3b3JkIiBpc1Bhc3N3b3JkQm9vbCByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5TaWduIGluPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2xvdENvbnRhaW5lciI+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBjb25zdCBmb3JtID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBpZiAoZm9ybSkgewogICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoZXZlbnQpID0+IHsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxvZ2luIiwgewogICAgICAgICAgICBkZXRhaWw6IGV2ZW50LmRldGFpbCwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBhbGxvd3Mgc3dpdGNoaW5nIHRvIHNsb3R0ZWQgY29udGVudAogICAgICovCiAgICBhc3luYyBzd2l0Y2hUb1Nsb3R0ZWRDb250ZW50KCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBjb25zdCBsb2dpbkRpdiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubG9naW4iKTsKICAgICAgY29uc3QgbG9naW5Db250YWluZXJEaXYgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmxvZ2luQ29udGFpbmVyIik7CiAgICAgIGNvbnN0IHNsb3RDb250YWluZXJEaXYgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnNsb3RDb250YWluZXIiKTsKICAgICAgbG9naW5EaXYuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgICAgbG9naW5EaXYuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZVkoMjBweCkiOwogICAgICBsb2dpbkNvbnRhaW5lckRpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gIm5vbmUiOwogICAgICBzbG90Q29udGFpbmVyRGl2LnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDIwcHgpIjsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigzMDApOwogICAgICBzbG90Q29udGFpbmVyRGl2LnN0eWxlLm9wYWNpdHkgPSAiMSI7CiAgICAgIHNsb3RDb250YWluZXJEaXYuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZVkoMHB4KSI7CiAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMzAwKTsKICAgICAgc2xvdENvbnRhaW5lckRpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gImFsbCI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3Myh0aGlzLCBfbmFtZV9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczczKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU2ltcGxlTG9naW4yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1hY3Rpb25iYXIvaW5kZXguanMKaW5pdF9kZWVzX2FjdGlvbmJhcigpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWJhZGdlL2RlZXMtYmFkZ2UuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM0NCA9ICgpID0+IGIyYAogIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBhbGlnbi1pdGVtczogY2VudGVyOyI+CiAgICA8ZGVlcy1iYWRnZSAudGV4dD0keyJEZWZhdWx0In0+PC9kZWVzLWJhZGdlPgogICAgPGRlZXMtYmFkZ2UgLnR5cGU9JHsicHJpbWFyeSJ9IC50ZXh0PSR7IlByaW1hcnkifT48L2RlZXMtYmFkZ2U+CiAgICA8ZGVlcy1iYWRnZSAudHlwZT0keyJzdWNjZXNzIn0gLnRleHQ9JHsiU3VjY2VzcyJ9PjwvZGVlcy1iYWRnZT4KICAgIDxkZWVzLWJhZGdlIC50eXBlPSR7Indhcm5pbmcifSAudGV4dD0keyJXYXJuaW5nIn0+PC9kZWVzLWJhZGdlPgogICAgPGRlZXMtYmFkZ2UgLnR5cGU9JHsiZXJyb3IifSAudGV4dD0keyJFcnJvciJ9PjwvZGVlcy1iYWRnZT4KICAgIDxkZWVzLWJhZGdlIC50eXBlPSR7InByaW1hcnkifSAucm91bmRlZD0ke3RydWV9IC50ZXh0PSR7IlJvdW5kZWQifT48L2RlZXMtYmFkZ2U+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtYmFkZ2UvZGVlcy1iYWRnZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU3MyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNzQgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNCYWRnZSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYmFkZ2UiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF90eXBlX2RlY29yYXRvcnM7CiAgbGV0IF90eXBlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdHlwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGV4dF9kZWNvcmF0b3JzOwogIGxldCBfdGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3JvdW5kZWRfZGVjb3JhdG9yczsKICBsZXQgX3JvdW5kZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb3VuZGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNCYWRnZTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90eXBlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfdGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3JvdW5kZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGU3Myh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzModGhpcywgbnVsbCwgX3RleHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50ZXh0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50ZXh0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RleHRfaW5pdGlhbGl6ZXJzLCBfdGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTczKHRoaXMsIG51bGwsIF9yb3VuZGVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJvdW5kZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJvdW5kZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucm91bmRlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucm91bmRlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yb3VuZGVkX2luaXRpYWxpemVycywgX3JvdW5kZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3MyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNCYWRnZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ0OwogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzQodGhpcywgX3R5cGVfaW5pdGlhbGl6ZXJzLCAiZGVmYXVsdCIpOwogICAgZ2V0IHR5cGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdHlwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NCh0aGlzLCBfdGV4dF9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgdGV4dCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3RleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0ZXh0KHZhbHVlMikgewogICAgICB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcm91bmRlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzQodGhpcywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9yb3VuZGVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCByb3VuZGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jcm91bmRlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJvdW5kZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3JvdW5kZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICBfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9yb3VuZGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc2V0dXAoKTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMnB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYmFkZ2Uucm91bmRlZCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgfQoKICAgICAgLmJhZGdlLmRlZmF1bHQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjVmNWY1IiwgIiMzMzMiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiNjY2MiKX07CiAgICAgIH0KCiAgICAgIC5iYWRnZS5wcmltYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMDA1MGI5OwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICB9CgogICAgICAuYmFkZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogIzJlN2QzMjsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQoKICAgICAgLmJhZGdlLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICNlZDZjMDI7CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIH0KCiAgICAgIC5iYWRnZS5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogI2U0MDAyYjsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJiYWRnZSAke3RoaXMudHlwZX0gJHt0aGlzLnJvdW5kZWQgPyAicm91bmRlZCIgOiAiIn0iPgogICAgICAgICR7dGhpcy50ZXh0fQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczc0KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQmFkZ2UyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1jaGlwcy9kZWVzLWNoaXBzLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNDUgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAuZGVtb0NvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMzJweDsKICAgICAgcGFkZGluZzogNDhweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOGY5ZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICB9CiAgICAKICAgIC5zZWN0aW9uIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzE4MTgxYiIpfTsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBwYWRkaW5nOiAyNHB4OwogICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgfQogICAgCiAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICB9CiAgICAKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW9Db250YWluZXIiPgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPk5vbi1TZWxlY3RhYmxlIENoaXBzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkJhc2ljIGNoaXBzIHdpdGhvdXQgc2VsZWN0aW9uIGNhcGFiaWxpdHkuIFVzZSBmb3IgZGlzcGxheS1vbmx5IHRhZ3MuPC9kaXY+CiAgICAgIDxkZWVzLWNoaXBzCiAgICAgICAgc2VsZWN0aW9uTW9kZT0ibm9uZSIKICAgICAgICAuc2VsZWN0YWJsZUNoaXBzPSR7WwogIHsga2V5OiAic3RhdHVzIiwgdmFsdWU6ICJBY3RpdmUiIH0sCiAgeyBrZXk6ICJ0aWVyIiwgdmFsdWU6ICJQcmVtaXVtIiB9LAogIHsga2V5OiAicmVnaW9uIiwgdmFsdWU6ICJFVS1XZXN0IiB9LAogIHsga2V5OiAidHlwZSIsIHZhbHVlOiAiRW50ZXJwcmlzZSIgfQpdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TaW5nbGUgU2VsZWN0aW9uIENoaXBzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkNsaWNrIHRvIHNlbGVjdCBvbmUgY2hpcCBhdCBhIHRpbWUuIFVzZWZ1bCBmb3IgZmlsdGVycyBhbmQgb3B0aW9ucy48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJzaW5nbGUiCiAgICAgICAgLnNlbGVjdGFibGVDaGlwcz0ke1sKICB7IGtleTogImFsbCIsIHZhbHVlOiAiQWxsIFByb2plY3RzIiB9LAogIHsga2V5OiAiYWN0aXZlIiwgdmFsdWU6ICJBY3RpdmUiIH0sCiAgeyBrZXk6ICJhcmNoaXZlZCIsIHZhbHVlOiAiQXJjaGl2ZWQiIH0sCiAgeyBrZXk6ICJkcmFmdHMiLCB2YWx1ZTogIkRyYWZ0cyIgfQpdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NdWx0aXBsZSBTZWxlY3Rpb24gQ2hpcHM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+U2VsZWN0IG11bHRpcGxlIGNoaXBzIHNpbXVsdGFuZW91c2x5LiBHcmVhdCBmb3IgdGFnIHNlbGVjdGlvbi48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJtdWx0aXBsZSIKICAgICAgICAuc2VsZWN0YWJsZUNoaXBzPSR7WwogIHsga2V5OiAianMiLCB2YWx1ZTogIkphdmFTY3JpcHQiIH0sCiAgeyBrZXk6ICJ0cyIsIHZhbHVlOiAiVHlwZVNjcmlwdCIgfSwKICB7IGtleTogInJlYWN0IiwgdmFsdWU6ICJSZWFjdCIgfSwKICB7IGtleTogInZ1ZSIsIHZhbHVlOiAiVnVlIiB9LAogIHsga2V5OiAiYW5ndWxhciIsIHZhbHVlOiAiQW5ndWxhciIgfSwKICB7IGtleTogIm5vZGUiLCB2YWx1ZTogIk5vZGUuanMiIH0KXX0KICAgICAgPjwvZGVlcy1jaGlwcz4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UmVtb3ZhYmxlIENoaXBzIHdpdGggS2V5czwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5DaGlwcyB3aXRoIHJlbW92ZSBidXR0b25zIGFuZCBrZXktdmFsdWUgcGFpcnMuIFBlcmZlY3QgZm9yIGR5bmFtaWMgbGlzdHMuPC9kaXY+CiAgICAgIDxkZWVzLWNoaXBzCiAgICAgICAgc2VsZWN0aW9uTW9kZT0ic2luZ2xlIgogICAgICAgIGNoaXBzQXJlUmVtb3ZhYmxlCiAgICAgICAgLnNlbGVjdGFibGVDaGlwcz0ke1sKICB7IGtleTogImVudiIsIHZhbHVlOiAiUHJvZHVjdGlvbiIgfSwKICB7IGtleTogInZlcnNpb24iLCB2YWx1ZTogIjIuNC4xIiB9LAogIHsga2V5OiAiYnJhbmNoIiwgdmFsdWU6ICJtYWluIiB9LAogIHsga2V5OiAiYXV0aG9yIiwgdmFsdWU6ICJKb2huIERvZSIgfQpdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NaXhlZCBDb250ZW50IEV4YW1wbGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+Q29tYmluaW5nIGRpZmZlcmVudCBjaGlwIHR5cGVzIGZvciBjb21wbGV4IFVJcy48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJtdWx0aXBsZSIKICAgICAgICBjaGlwc0FyZVJlbW92YWJsZQogICAgICAgIC5zZWxlY3RhYmxlQ2hpcHM9JHtbCiAgeyBrZXk6ICJwcmlvcml0eSIsIHZhbHVlOiAiSGlnaCIgfSwKICB7IGtleTogInN0YXR1cyIsIHZhbHVlOiAiSW4gUHJvZ3Jlc3MiIH0sCiAgeyBrZXk6ICJidWciLCB2YWx1ZTogIkJ1ZyIgfSwKICB7IGtleTogImZlYXR1cmUiLCB2YWx1ZTogIkZlYXR1cmUiIH0sCiAgeyBrZXk6ICJzcHJpbnQiLCB2YWx1ZTogIlNwcmludCAyMyIgfSwKICB7IGtleTogImFzc2lnbmVlIiwgdmFsdWU6ICJBbGljZSIgfQpdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtY2hpcHMvZGVlcy1jaGlwcy5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU3NCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNzUgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNDaGlwcyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtY2hpcHMiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9zZWxlY3Rpb25Nb2RlX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3Rpb25Nb2RlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0aW9uTW9kZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2hpcHNBcmVSZW1vdmFibGVfZGVjb3JhdG9yczsKICBsZXQgX2NoaXBzQXJlUmVtb3ZhYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2hpcHNBcmVSZW1vdmFibGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGFibGVDaGlwc19kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0YWJsZUNoaXBzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0YWJsZUNoaXBzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZENoaXBfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkQ2hpcF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkQ2hpcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRDaGlwc19kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRDaGlwc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkQ2hpcHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0NoaXBzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3NlbGVjdGlvbk1vZGVfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgX2NoaXBzQXJlUmVtb3ZhYmxlX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEJvb2xlYW4KICAgICAgfSldOwogICAgICBfc2VsZWN0YWJsZUNoaXBzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX3NlbGVjdGVkQ2hpcF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfc2VsZWN0ZWRDaGlwc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBBcnJheQogICAgICB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9zZWxlY3Rpb25Nb2RlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGlvbk1vZGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGlvbk1vZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0aW9uTW9kZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0aW9uTW9kZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3Rpb25Nb2RlX2luaXRpYWxpemVycywgX3NlbGVjdGlvbk1vZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NCh0aGlzLCBudWxsLCBfY2hpcHNBcmVSZW1vdmFibGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY2hpcHNBcmVSZW1vdmFibGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNoaXBzQXJlUmVtb3ZhYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNoaXBzQXJlUmVtb3ZhYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jaGlwc0FyZVJlbW92YWJsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jaGlwc0FyZVJlbW92YWJsZV9pbml0aWFsaXplcnMsIF9jaGlwc0FyZVJlbW92YWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9zZWxlY3RhYmxlQ2hpcHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0YWJsZUNoaXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RhYmxlQ2hpcHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0YWJsZUNoaXBzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RhYmxlQ2hpcHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0YWJsZUNoaXBzX2luaXRpYWxpemVycywgX3NlbGVjdGFibGVDaGlwc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9zZWxlY3RlZENoaXBfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRDaGlwIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZENoaXAiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRDaGlwLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZENoaXAgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRDaGlwX2luaXRpYWxpemVycywgX3NlbGVjdGVkQ2hpcF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9zZWxlY3RlZENoaXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkQ2hpcHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkQ2hpcHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRDaGlwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWRDaGlwcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZENoaXBzX2luaXRpYWxpemVycywgX3NlbGVjdGVkQ2hpcHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNDaGlwczIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ1OwogICAgI3NlbGVjdGlvbk1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX3NlbGVjdGlvbk1vZGVfaW5pdGlhbGl6ZXJzLCAic2luZ2xlIik7CiAgICBnZXQgc2VsZWN0aW9uTW9kZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGlvbk1vZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3Rpb25Nb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3Rpb25Nb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY2hpcHNBcmVSZW1vdmFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9zZWxlY3Rpb25Nb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfY2hpcHNBcmVSZW1vdmFibGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGNoaXBzQXJlUmVtb3ZhYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jY2hpcHNBcmVSZW1vdmFibGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjaGlwc0FyZVJlbW92YWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY2hpcHNBcmVSZW1vdmFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RhYmxlQ2hpcHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9jaGlwc0FyZVJlbW92YWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX3NlbGVjdGFibGVDaGlwc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgc2VsZWN0YWJsZUNoaXBzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0YWJsZUNoaXBzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VsZWN0YWJsZUNoaXBzKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RhYmxlQ2hpcHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZENoaXBfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9zZWxlY3RhYmxlQ2hpcHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9zZWxlY3RlZENoaXBfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgc2VsZWN0ZWRDaGlwKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRDaGlwX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VsZWN0ZWRDaGlwKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZENoaXBfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZENoaXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfc2VsZWN0ZWRDaGlwX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfc2VsZWN0ZWRDaGlwc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgc2VsZWN0ZWRDaGlwcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkQ2hpcHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZENoaXBzKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZENoaXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfc2VsZWN0ZWRDaGlwc19leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5tYWluYm94IHsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmNoaXAgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiAwcHggMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMDUpOwogICAgICB9CgogICAgICAuY2hpcDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkNWRiIiwgIiM1MjUyNWIiKX07CiAgICAgIH0KCiAgICAgIC5jaGlwOmFjdGl2ZSB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQoKICAgICAgLmNoaXAuc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICB9CgogICAgICAuY2hpcC5zZWxlY3RlZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMyNTYzZWIiLCAiIzI1NjNlYiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiMyNTYzZWIiKX07CiAgICAgIH0KCiAgICAgIC5jaGlwS2V5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA2KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC04cHg7CiAgICAgICAgcGFkZGluZzogMHB4IDhweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5jaGlwLnNlbGVjdGVkIC5jaGlwS2V5IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgfQoKICAgICAgZGVlcy1pY29uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAtNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgfQoKICAgICAgLmNoaXAuc2VsZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgICB9CgogICAgICBkZWVzLWljb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VmNDQ0NCIsICIjZWY0NDQ0Iil9OwogICAgICB9CgogICAgICAuY2hpcC5zZWxlY3RlZCBkZWVzLWljb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAke3RoaXMuc2VsZWN0YWJsZUNoaXBzLm1hcCgoY2hpcCkgPT4gYjJgCiAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNlbGVjdENoaXAoY2hpcCl9CiAgICAgICAgICAgICAgY2xhc3M9ImNoaXAgJHt0aGlzLmlzU2VsZWN0ZWQoY2hpcCkgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgJHtjaGlwLmtleSA/IGIyYDxkaXYgY2xhc3M9ImNoaXBLZXkiPiR7Y2hpcC5rZXl9PC9kaXY+YCA6IGIyYGB9ICR7Y2hpcC52YWx1ZX0KICAgICAgICAgICAgICAke3RoaXMuY2hpcHNBcmVSZW1vdmFibGUgPyBiMmAKICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoZXZlbnQpID0+IHsKICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB0aGlzLnJlbW92ZUNoaXAoY2hpcCk7CiAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgICAuaWNvbj0keyJmYTp4bWFyayJ9CiAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICBgIDogYjJgYH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgKX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgfQogICAgaXNTZWxlY3RlZChjaGlwKSB7CiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJzaW5nbGUiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDaGlwID8gdGhpcy5pc1NhbWVDaGlwKHRoaXMuc2VsZWN0ZWRDaGlwLCBjaGlwKSA6IGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ2hpcHMuc29tZSgoc2VsZWN0ZWQpID0+IHRoaXMuaXNTYW1lQ2hpcChzZWxlY3RlZCwgY2hpcCkpOwogICAgICB9CiAgICB9CiAgICBpc1NhbWVDaGlwKGNoaXAxLCBjaGlwMikgewogICAgICBpZiAoY2hpcDEua2V5ICYmIGNoaXAyLmtleSkgewogICAgICAgIHJldHVybiBjaGlwMS5rZXkgPT09IGNoaXAyLmtleTsKICAgICAgfQogICAgICByZXR1cm4gY2hpcDEudmFsdWUgPT09IGNoaXAyLnZhbHVlICYmIGNoaXAxLmtleSA9PT0gY2hpcDIua2V5OwogICAgfQogICAgYXN5bmMgc2VsZWN0Q2hpcChjaGlwKSB7CiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJub25lIikgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAic2luZ2xlIikgewogICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQoY2hpcCkpIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwID0gbnVsbDsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwcyA9IFtdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpcCA9IGNoaXA7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpcHMgPSBbY2hpcF07CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gIm11bHRpcGxlIikgewogICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQoY2hpcCkpIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwcyA9IHRoaXMuc2VsZWN0ZWRDaGlwcy5maWx0ZXIoKHNlbGVjdGVkKSA9PiAhdGhpcy5pc1NhbWVDaGlwKHNlbGVjdGVkLCBjaGlwKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwcyA9IFsuLi50aGlzLnNlbGVjdGVkQ2hpcHMsIGNoaXBdOwogICAgICAgIH0KICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgfQogICAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkQ2hpcHMpOwogICAgfQogICAgcmVtb3ZlQ2hpcChjaGlwVG9SZW1vdmUpIHsKICAgICAgdGhpcy5zZWxlY3RhYmxlQ2hpcHMgPSB0aGlzLnNlbGVjdGFibGVDaGlwcy5maWx0ZXIoKGNoaXApID0+ICF0aGlzLmlzU2FtZUNoaXAoY2hpcCwgY2hpcFRvUmVtb3ZlKSk7CiAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwcyA9IHRoaXMuc2VsZWN0ZWRDaGlwcy5maWx0ZXIoKGNoaXApID0+ICF0aGlzLmlzU2FtZUNoaXAoY2hpcCwgY2hpcFRvUmVtb3ZlKSk7CiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ2hpcCAmJiB0aGlzLmlzU2FtZUNoaXAodGhpcy5zZWxlY3RlZENoaXAsIGNoaXBUb1JlbW92ZSkpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpcCA9IG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczc1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQ2hpcHMyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1kYXNoYm9hcmRncmlkL2RlZXMtZGFzaGJvYXJkZ3JpZC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzQ2ID0gKCkgPT4gewogIHJldHVybiBiMmAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICBjb25zdCBncmlkID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZGFzaGJvYXJkR3JpZCIpOwogICAgY29uc3Qgc2VlZFdpZGdldHMgPSBbCiAgICAgIHsKICAgICAgICBpZDogIm1ldHJpY3MxIiwKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAsCiAgICAgICAgdzogMywKICAgICAgICBoOiAyLAogICAgICAgIHRpdGxlOiAiUmV2ZW51ZSIsCiAgICAgICAgaWNvbjogImx1Y2lkZTpkb2xsYXJTaWduIiwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzogMjBweDsiPgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMzJweDsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07Ij4kMTI0LDU2MzwvZGl2PgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImNvbG9yOiAjMjJjNTVlOyBmb250LXNpemU6IDE0cHg7IG1hcmdpbi10b3A6IDhweDsiPuKGkSAxMi41JSBmcm9tIGxhc3QgbW9udGg8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogIm1ldHJpY3MyIiwKICAgICAgICB4OiAzLAogICAgICAgIHk6IDAsCiAgICAgICAgdzogMywKICAgICAgICBoOiAyLAogICAgICAgIHRpdGxlOiAiVXNlcnMiLAogICAgICAgIGljb246ICJsdWNpZGU6dXNlcnMiLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyMHB4OyI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAzMnB4OyBmb250LXdlaWdodDogNzAwOyBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsiPjgsMjM0PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iY29sb3I6ICMzYjgyZjY7IGZvbnQtc2l6ZTogMTRweDsgbWFyZ2luLXRvcDogOHB4OyI+4oaRIDUuMiUgZnJvbSBsYXN0IHdlZWs8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogImNoYXJ0MSIsCiAgICAgICAgeDogNiwKICAgICAgICB5OiAwLAogICAgICAgIHc6IDYsCiAgICAgICAgaDogNCwKICAgICAgICB0aXRsZTogIkFuYWx5dGljcyIsCiAgICAgICAgaWNvbjogImx1Y2lkZTpsaW5lQ2hhcnQiLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyMHB4OyBoZWlnaHQ6IDEwMCU7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzcxNzE3YTsiPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6bGluZUNoYXJ0In0gc3R5bGU9ImZvbnQtc2l6ZTogNDhweDsgbWFyZ2luLWJvdHRvbTogMTZweDsiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPGRpdj5DaGFydCB2aXN1YWxpemF0aW9uIGFyZWE8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgCiAgICAgIH0KICAgIF07CiAgICBncmlkLndpZGdldHMgPSBzZWVkV2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gKHsgLi4ud2lkZ2V0IH0pKTsKICAgIGdyaWQuY2VsbEhlaWdodCA9IDgwOwogICAgZ3JpZC5tYXJnaW4gPSB7IHRvcDogMTAsIHJpZ2h0OiAxMCwgYm90dG9tOiAxMCwgbGVmdDogMTAgfTsKICAgIGdyaWQuZW5hYmxlQW5pbWF0aW9uID0gdHJ1ZTsKICAgIGdyaWQuc2hvd0dyaWRMaW5lcyA9IGZhbHNlOwogICAgY29uc3QgYmFzZUxheW91dCA9IGdyaWQuZ2V0TGF5b3V0KCkubWFwKChpdGVtKSA9PiAoeyAuLi5pdGVtIH0pKTsKICAgIGNvbnN0IG1vYmlsZUxheW91dCA9IGdyaWQud2lkZ2V0cy5tYXAoKHdpZGdldCwgaW5kZXgyKSA9PiAoewogICAgICBpZDogd2lkZ2V0LmlkLAogICAgICB4OiAwLAogICAgICB5OiBpbmRleDIgPT09IDAgPyAwIDogZ3JpZC53aWRnZXRzLnNsaWNlKDAsIGluZGV4MikucmVkdWNlKChhY2MsIHByZXYpID0+IGFjYyArIHByZXYuaCwgMCksCiAgICAgIHc6IGdyaWQuY29sdW1ucywKICAgICAgaDogd2lkZ2V0LmgKICAgIH0pKTsKICAgIGdyaWQubGF5b3V0cyA9IHsKICAgICAgYmFzZTogYmFzZUxheW91dCwKICAgICAgbW9iaWxlOiBtb2JpbGVMYXlvdXQKICAgIH07CiAgICBjb25zdCBzdGF0dXNFbCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2Rhc2hib2FyZExheW91dFN0YXR1cyIpOwogICAgY29uc3QgdXBkYXRlU3RhdHVzID0gKCkgPT4gewogICAgICBjb25zdCBsYXlvdXQgPSBncmlkLmdldExheW91dCgpOwogICAgICBzdGF0dXNFbC50ZXh0Q29udGVudCA9IGBBY3RpdmUgYnJlYWtwb2ludDogJHtncmlkLmFjdGl2ZUJyZWFrcG9pbnR9IFx1MjAyMiBUaWxlczogJHtsYXlvdXQubGVuZ3RofWA7CiAgICB9OwogICAgY29uc3QgbWVkaWFRdWVyeSA9IHdpbmRvdy5tYXRjaE1lZGlhKCIobWF4LXdpZHRoOiA3NjhweCkiKTsKICAgIGNvbnN0IGhhbmRsZUJyZWFrcG9pbnQgPSAoKSA9PiB7CiAgICAgIGNvbnN0IHRhcmdldCA9IG1lZGlhUXVlcnkubWF0Y2hlcyA/ICJtb2JpbGUiIDogImJhc2UiOwogICAgICBncmlkLmFwcGx5QnJlYWtwb2ludExheW91dCh0YXJnZXQpOwogICAgICB1cGRhdGVTdGF0dXMoKTsKICAgIH07CiAgICBpZiAodHlwZW9mIG1lZGlhUXVlcnkuYWRkRXZlbnRMaXN0ZW5lciA9PT0gImZ1bmN0aW9uIikgewogICAgICBtZWRpYVF1ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGhhbmRsZUJyZWFrcG9pbnQpOwogICAgfSBlbHNlIHsKICAgICAgbWVkaWFRdWVyeS5hZGRMaXN0ZW5lcj8uKGhhbmRsZUJyZWFrcG9pbnQpOwogICAgfQogICAgaGFuZGxlQnJlYWtwb2ludCgpOwogICAgbGV0IHdpZGdldENvdW50ZXIgPSA0OwogICAgY29uc3QgYnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICAgIGNvbnN0IHRleHQ5ID0gYnV0dG9uLnRleHRDb250ZW50Py50cmltKCk7CiAgICAgIHN3aXRjaCAodGV4dDkpIHsKICAgICAgICBjYXNlICJUb2dnbGUgQW5pbWF0aW9uIjoKICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgZ3JpZC5lbmFibGVBbmltYXRpb24gPSAhZ3JpZC5lbmFibGVBbmltYXRpb247CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlRvZ2dsZSBHcmlkIExpbmVzIjoKICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgZ3JpZC5zaG93R3JpZExpbmVzID0gIWdyaWQuc2hvd0dyaWRMaW5lczsKICAgICAgICAgIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQWRkIFdpZGdldCI6CiAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IG5ld1dpZGdldCA9IHsKICAgICAgICAgICAgICBpZDogYHdpZGdldCR7d2lkZ2V0Q291bnRlcisrfWAsCiAgICAgICAgICAgICAgeDogMCwKICAgICAgICAgICAgICB5OiAwLAogICAgICAgICAgICAgIHc6IDMsCiAgICAgICAgICAgICAgaDogMiwKICAgICAgICAgICAgICBhdXRvUG9zaXRpb246IHRydWUsCiAgICAgICAgICAgICAgdGl0bGU6IGBXaWRnZXQgJHt3aWRnZXRDb3VudGVyIC0gMX1gLAogICAgICAgICAgICAgIGljb246ICJsdWNpZGU6cGFja2FnZSIsCiAgICAgICAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6IDIwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImNvbG9yOiAjNzE3MTdhOyI+TmV3IHdpZGdldCBjb250ZW50PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogOHB4OyBmb250LXNpemU6IDI0cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OyI+JHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTMpfTwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAKICAgICAgICAgICAgfTsKICAgICAgICAgICAgZ3JpZC5hZGRXaWRnZXQobmV3V2lkZ2V0LCB0cnVlKTsKICAgICAgICAgIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQ29tcGFjdCBHcmlkIjoKICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgZ3JpZC5jb21wYWN0KCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlRvZ2dsZSBFZGl0IE1vZGUiOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICBncmlkLmVkaXRhYmxlID0gIWdyaWQuZWRpdGFibGU7CiAgICAgICAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9IGdyaWQuZWRpdGFibGUgPyAiTG9jayBHcmlkIiA6ICJVbmxvY2sgR3JpZCI7CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlJlc2V0IExheW91dCI6CiAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgIGdyaWQuYXBwbHlCcmVha3BvaW50TGF5b3V0KGdyaWQuYWN0aXZlQnJlYWtwb2ludCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSk7CiAgICBsZXQgbGFzdFBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgbGV0IG1vdmVFdmVudENvdW50ZXIgPSAwOwogICAgY29uc3QgbG9nR3JpZFN0YXRlID0gKGV2ZW50TmFtZSwgZGV0YWlscykgPT4gewogICAgICBjb25zdCBsYXlvdXQgPSBncmlkLmdldExheW91dCgpOwogICAgICBjb25zb2xlLmdyb3VwKGBcdXsxRjUwNH0gJHtldmVudE5hbWV9IFtFdmVudCAjJHsrK21vdmVFdmVudENvdW50ZXJ9XWApOwogICAgICBjb25zb2xlLmxvZygiVGltZXN0YW1wOiIsICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSk7CiAgICAgIGNvbnNvbGUubG9nKCJHcmlkIENvbmZpZ3VyYXRpb246IiwgewogICAgICAgIGNvbHVtbnM6IGdyaWQuY29sdW1ucywKICAgICAgICBjZWxsSGVpZ2h0OiBncmlkLmNlbGxIZWlnaHQsCiAgICAgICAgbWFyZ2luOiBncmlkLm1hcmdpbiwKICAgICAgICBlZGl0YWJsZTogZ3JpZC5lZGl0YWJsZSwKICAgICAgICBhY3RpdmVCcmVha3BvaW50OiBncmlkLmFjdGl2ZUJyZWFrcG9pbnQKICAgICAgfSk7CiAgICAgIGNvbnNvbGUubG9nKCJDdXJyZW50IExheW91dDoiLCBsYXlvdXQpOwogICAgICBjb25zb2xlLmxvZygiV2lkZ2V0IENvdW50OiIsIGxheW91dC5sZW5ndGgpOwogICAgICBjb25zb2xlLmxvZygiR3JpZCBCb3VuZHM6IiwgewogICAgICAgIHRvdGFsV2lkZ2V0czogZ3JpZC53aWRnZXRzLmxlbmd0aCwKICAgICAgICBtYXhZOiBNYXRoLm1heCguLi5sYXlvdXQubWFwKCh3MykgPT4gdzMueSArIHczLmgpKSwKICAgICAgICBvY2N1cGllZDogbGF5b3V0Lm1hcCgodzMpID0+IGAke3czLmlkfTogKCR7dzMueH0sJHt3My55fSkgJHt3My53fXgke3czLmh9YCkuam9pbigiLCAiKQogICAgICB9KTsKICAgICAgaWYgKGRldGFpbHMpIHsKICAgICAgICBjb25zb2xlLmxvZygiRXZlbnQgRGV0YWlsczoiLCBkZXRhaWxzKTsKICAgICAgfQogICAgICBjb25zb2xlLmdyb3VwRW5kKCk7CiAgICB9OwogICAgY29uc3QgcGxhY2Vob2xkZXJPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHsKICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSBncmlkLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wbGFjZWhvbGRlciIpOwogICAgICBpZiAocGxhY2Vob2xkZXIpIHsKICAgICAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSB7CiAgICAgICAgICBsZWZ0OiBwbGFjZWhvbGRlci5zdHlsZS5sZWZ0LAogICAgICAgICAgdG9wOiBwbGFjZWhvbGRlci5zdHlsZS50b3AsCiAgICAgICAgICB3aWR0aDogcGxhY2Vob2xkZXIuc3R5bGUud2lkdGgsCiAgICAgICAgICBoZWlnaHQ6IHBsYWNlaG9sZGVyLnN0eWxlLmhlaWdodAogICAgICAgIH07CiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRQb3NpdGlvbikgIT09IEpTT04uc3RyaW5naWZ5KGxhc3RQbGFjZWhvbGRlclBvc2l0aW9uKSkgewogICAgICAgICAgY29uc29sZS5ncm91cCgiXHV7MUY0Q0R9IFBsYWNlaG9sZGVyIFBvc2l0aW9uIENoYW5nZWQiKTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJQcmV2aW91czoiLCBsYXN0UGxhY2Vob2xkZXJQb3NpdGlvbik7CiAgICAgICAgICBjb25zb2xlLmxvZygiQ3VycmVudDoiLCBjdXJyZW50UG9zaXRpb24pOwogICAgICAgICAgY29uc3QgZ3JpZEluZm8gPSBncmlkLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ncmlkLWNvbnRhaW5lciIpOwogICAgICAgICAgaWYgKGdyaWRJbmZvKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJHcmlkIENvbnRhaW5lciBEaW1lbnNpb25zOiIsIHsKICAgICAgICAgICAgICB3aWR0aDogZ3JpZEluZm8uY2xpZW50V2lkdGgsCiAgICAgICAgICAgICAgaGVpZ2h0OiBncmlkSW5mby5jbGllbnRIZWlnaHQKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7CiAgICAgICAgICBsYXN0UGxhY2Vob2xkZXJQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbjsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgaWYgKGdyaWQuc2hhZG93Um9vdCkgewogICAgICBwbGFjZWhvbGRlck9ic2VydmVyLm9ic2VydmUoZ3JpZC5zaGFkb3dSb290LCB7CiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLAogICAgICAgIHN1YnRyZWU6IHRydWUsCiAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwKICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsic3R5bGUiXQogICAgICB9KTsKICAgIH0KICAgIGxvZ0dyaWRTdGF0ZSgiSW5pdGlhbCBHcmlkIFN0YXRlIik7CiAgICBncmlkLmFkZEV2ZW50TGlzdGVuZXIoIndpZGdldC1tb3ZlIiwgKGUxMSkgPT4gewogICAgICBsb2dHcmlkU3RhdGUoIldpZGdldCBNb3ZlIiwgewogICAgICAgIHdpZGdldDogZTExLmRldGFpbC53aWRnZXQsCiAgICAgICAgZGlzcGxhY2VkOiBlMTEuZGV0YWlsLmRpc3BsYWNlZCwKICAgICAgICBzd2FwcGVkV2l0aDogZTExLmRldGFpbC5zd2FwcGVkV2l0aAogICAgICB9KTsKICAgIH0pOwogICAgZ3JpZC5hZGRFdmVudExpc3RlbmVyKCJ3aWRnZXQtcmVzaXplIiwgKGUxMSkgPT4gewogICAgICBsb2dHcmlkU3RhdGUoIldpZGdldCBSZXNpemUiLCB7CiAgICAgICAgd2lkZ2V0OiBlMTEuZGV0YWlsLndpZGdldCwKICAgICAgICBkaXNwbGFjZWQ6IGUxMS5kZXRhaWwuZGlzcGxhY2VkLAogICAgICAgIHN3YXBwZWRXaXRoOiBlMTEuZGV0YWlsLnN3YXBwZWRXaXRoCiAgICAgIH0pOwogICAgfSk7CiAgICBncmlkLmFkZEV2ZW50TGlzdGVuZXIoIndpZGdldC1yZW1vdmUiLCAoZTExKSA9PiB7CiAgICAgIGxvZ0dyaWRTdGF0ZSgiV2lkZ2V0IFJlbW92ZSIsIHsKICAgICAgICByZW1vdmVkV2lkZ2V0OiBlMTEuZGV0YWlsLndpZGdldAogICAgICB9KTsKICAgICAgdXBkYXRlU3RhdHVzKCk7CiAgICB9KTsKICAgIGdyaWQuYWRkRXZlbnRMaXN0ZW5lcigibGF5b3V0LWNoYW5nZSIsICgpID0+IHsKICAgICAgbG9nR3JpZFN0YXRlKCJMYXlvdXQgQ2hhbmdlIik7CiAgICAgIHVwZGF0ZVN0YXR1cygpOwogICAgfSk7CiAgICBncmlkLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIiwgKGUxMSkgPT4gewogICAgICBjb25zdCBpc0hlYWRlciA9IGUxMS50YXJnZXQuY2xvc2VzdCgiLndpZGdldC1oZWFkZXIiKTsKICAgICAgY29uc3QgaXNSZXNpemVIYW5kbGUgPSBlMTEudGFyZ2V0LmNsb3Nlc3QoIi5yZXNpemUtaGFuZGxlIik7CiAgICAgIGlmIChpc0hlYWRlciB8fCBpc1Jlc2l6ZUhhbmRsZSkgewogICAgICAgIGNvbnNvbGUuZ3JvdXAoYFx1ezFGM0FGfSBJbnRlcmFjdGlvbiBTdGFydGVkOiAke2lzSGVhZGVyID8gIkRyYWciIDogIlJlc2l6ZSJ9YCk7CiAgICAgICAgY29uc29sZS5sb2coIlRhcmdldCBXaWRnZXQ6IiwgZTExLnRhcmdldC5jbG9zZXN0KCIud2lkZ2V0Iik/LmdldEF0dHJpYnV0ZSgiZGF0YS13aWRnZXQtaWQiKSk7CiAgICAgICAgY29uc29sZS5sb2coIlBvaW50ZXIgUG9zaXRpb246IiwgeyB4OiBlMTEuY2xpZW50WCwgeTogZTExLmNsaWVudFkgfSk7CiAgICAgICAgY29uc29sZS5ncm91cEVuZCgpOwogICAgICAgIGNvbnN0IGhhbmRsZVBvaW50ZXJNb3ZlID0gKG1vdmVFdmVudCkgPT4gewogICAgICAgICAgY29uc3Qgd2lkZ2V0ID0gZTExLnRhcmdldC5jbG9zZXN0KCIud2lkZ2V0Iik7CiAgICAgICAgICBpZiAod2lkZ2V0KSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcdTIxOTRcdUZFMEYgUG9pbnRlciBNb3ZlOmAsIHsKICAgICAgICAgICAgICB3aWRnZXRJZDogd2lkZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS13aWRnZXQtaWQiKSwKICAgICAgICAgICAgICBwb3NpdGlvbjogeyB4OiBtb3ZlRXZlbnQuY2xpZW50WCwgeTogbW92ZUV2ZW50LmNsaWVudFkgfSwKICAgICAgICAgICAgICBkZWx0YTogewogICAgICAgICAgICAgICAgeDogbW92ZUV2ZW50LmNsaWVudFggLSBlMTEuY2xpZW50WCwKICAgICAgICAgICAgICAgIHk6IG1vdmVFdmVudC5jbGllbnRZIC0gZTExLmNsaWVudFkKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgY29uc3QgaGFuZGxlUG9pbnRlclVwID0gKCkgPT4gewogICAgICAgICAgY29uc29sZS5ncm91cCgiXHV7MUYzQzF9IEludGVyYWN0aW9uIEVuZGVkIik7CiAgICAgICAgICBsb2dHcmlkU3RhdGUoIkZpbmFsIFN0YXRlIEFmdGVyIEludGVyYWN0aW9uIik7CiAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7CiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIGhhbmRsZVBvaW50ZXJNb3ZlKTsKICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsIGhhbmRsZVBvaW50ZXJVcCk7CiAgICAgICAgfTsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIGhhbmRsZVBvaW50ZXJNb3ZlKTsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCBoYW5kbGVQb2ludGVyVXApOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IG9yaWdpbmFsQWRkV2lkZ2V0ID0gZ3JpZC5hZGRXaWRnZXQuYmluZChncmlkKTsKICAgIGdyaWQuYWRkV2lkZ2V0ID0gKHdpZGdldCwgYXV0b1Bvc2l0aW9uKSA9PiB7CiAgICAgIGNvbnNvbGUuZ3JvdXAoIlx1Mjc5NSBBZGRpbmcgV2lkZ2V0Iik7CiAgICAgIGNvbnNvbGUubG9nKCJOZXcgV2lkZ2V0OiIsIHdpZGdldCk7CiAgICAgIGNvbnNvbGUubG9nKCJBdXRvIFBvc2l0aW9uOiIsIGF1dG9Qb3NpdGlvbik7CiAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsQWRkV2lkZ2V0KHdpZGdldCwgYXV0b1Bvc2l0aW9uKTsKICAgICAgbG9nR3JpZFN0YXRlKCJBZnRlciBXaWRnZXQgQWRkZWQiKTsKICAgICAgY29uc29sZS5ncm91cEVuZCgpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIGNvbnN0IG9yaWdpbmFsQ29tcGFjdCA9IGdyaWQuY29tcGFjdC5iaW5kKGdyaWQpOwogICAgZ3JpZC5jb21wYWN0ID0gKGRpcmVjdGlvbikgPT4gewogICAgICBjb25zb2xlLmdyb3VwKCJcdXsxRjVEQ31cdUZFMEYgQ29tcGFjdGluZyBHcmlkIik7CiAgICAgIGNvbnNvbGUubG9nKCJEaXJlY3Rpb246IiwgZGlyZWN0aW9uIHx8ICJ2ZXJ0aWNhbCIpOwogICAgICBsb2dHcmlkU3RhdGUoIkJlZm9yZSBDb21wYWN0Iik7CiAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsQ29tcGFjdChkaXJlY3Rpb24pOwogICAgICBsb2dHcmlkU3RhdGUoIkFmdGVyIENvbXBhY3QiKTsKICAgICAgY29uc29sZS5ncm91cEVuZCgpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIHVwZGF0ZVN0YXR1cygpOwogIH19PgogICAgICA8c3R5bGU+CiAgICAgICAgJHtpYAogICAgICAgICAgLmRlbW9Cb3ggewogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMwOTA5MGIiKX07CiAgICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIH0KCiAgICAgICAgICAuZGVtby1jb250cm9scyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgICAgfQoKICAgICAgICAgIC5kZW1vLWNvbnRyb2xzIGRlZXMtYnV0dG9uIHsKICAgICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgICB9CgogICAgICAgICAgLmdyaWQtY29udGFpbmVyLXdyYXBwZXIgewogICAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgICBtaW4taGVpZ2h0OiA2MDBweDsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgfQoKICAgICAgICAgIC5pbmZvIHsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICBnYXA6IDZweDsKICAgICAgICAgIH0KCiAgICAgICAgICAjZGFzaGJvYXJkTGF5b3V0U3RhdHVzIHsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgICAgICB9CiAgICAgICAgYH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0iZGVtb0JveCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb250cm9scyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFuaW1hdGlvbjoiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEFuaW1hdGlvbjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgoKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iRGlzcGxheToiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEdyaWQgTGluZXM8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KCiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFjdGlvbnM6Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkFkZCBXaWRnZXQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+Q29tcGFjdCBHcmlkPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlJlc2V0IExheW91dDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgoKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iTW9kZToiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEVkaXQgTW9kZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWNvbnRhaW5lci13cmFwcGVyIj4KICAgICAgICAgIDxkZWVzLWRhc2hib2FyZGdyaWQgaWQ9ImRhc2hib2FyZEdyaWQiPjwvZGVlcy1kYXNoYm9hcmRncmlkPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvIj4KICAgICAgICAgIDxkaXY+RHJhZyB0byByZXBvc2l0aW9uLCByZXNpemUgZnJvbSBoYW5kbGVzLCBvciByaWdodC1jbGljayBhIGhlYWRlciB0byBkZWxldGUgYSB0aWxlLjwvZGl2PgogICAgICAgICAgPGRpdiBpZD0iZGFzaGJvYXJkTGF5b3V0U3RhdHVzIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1kYXNoYm9hcmRncmlkL3N0eWxlcy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGFzaGJvYXJkR3JpZFN0eWxlcyA9IFsKICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5ncmlkLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1pbi1oZWlnaHQ6IDQwMHB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpbGwtY2hhbmdlOiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbZW5hYmxlYW5pbWF0aW9uXSkgLmdyaWQtd2lkZ2V0IHsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICAuZ3JpZC13aWRnZXQuZHJhZ2dpbmcgewogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KICAgICAgCiAgICAgIC5ncmlkLXdpZGdldC5wbGFjZWhvbGRlciB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQogICAgICAKICAgICAgLmdyaWQtd2lkZ2V0LnBsYWNlaG9sZGVyIC53aWRnZXQtY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIil9OwogICAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldC5yZXNpemluZyB7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAud2lkZ2V0LWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpIiwgIjAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMykiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldDpob3ZlciAud2lkZ2V0LWNvbnRlbnQgewogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSkiLCAiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuNCkiKX07CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldC5kcmFnZ2luZyAud2lkZ2V0LWNvbnRlbnQgewogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDE2cHggNDhweCByZ2JhKDAsIDAsIDAsIDAuMjUpIiwgIjAgMTZweCA0OHB4IHJnYmEoMCwgMCwgMCwgMC42KSIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpOwogICAgICB9CgogICAgICAud2lkZ2V0LWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMGEwYTBhIil9OwogICAgICAgIGN1cnNvcjogZ3JhYjsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLndpZGdldC1oZWFkZXI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMxODE4MWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC53aWRnZXQtaGVhZGVyOmFjdGl2ZSB7CiAgICAgICAgY3Vyc29yOiBncmFiYmluZzsKICAgICAgfQoKICAgICAgLndpZGdldC1oZWFkZXIubG9ja2VkIHsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KICAgICAgCiAgICAgIC53aWRnZXQtaGVhZGVyLmxvY2tlZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzBhMGEwYSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC1oZWFkZXIgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQtYm9keSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC1ib2R5Lmhhcy1oZWFkZXIgewogICAgICAgIHRvcDogNDVweDsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS1lIHsKICAgICAgICBjdXJzb3I6IGV3LXJlc2l6ZTsKICAgICAgICB3aWR0aDogMTJweDsKICAgICAgICByaWdodDogLTZweDsKICAgICAgICB0b3A6IDEwJTsKICAgICAgICBoZWlnaHQ6IDgwJTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtcyB7CiAgICAgICAgY3Vyc29yOiBucy1yZXNpemU7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgICAgYm90dG9tOiAtNnB4OwogICAgICAgIGxlZnQ6IDEwJTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtc2UgewogICAgICAgIGN1cnNvcjogc2UtcmVzaXplOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICByaWdodDogLTJweDsKICAgICAgICBib3R0b206IC0ycHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLnJlc2l6ZS1oYW5kbGUtc2U6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDRweDsKICAgICAgICBib3R0b206IDRweDsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldDpob3ZlciAucmVzaXplLWhhbmRsZS1zZSB7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS1zZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMSAhaW1wb3J0YW50OwogICAgICB9CiAgICAgIAogICAgICAucmVzaXplLWhhbmRsZS1zZTpob3Zlcjo6YWZ0ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgICAgfQoKICAgICAgLmdyaWQtcGxhY2Vob2xkZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDQ4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KICAgICAgCiAgICAgIC5ncmlkLWxpbmVzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHotaW5kZXg6IC0xOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1saW5lLXZlcnRpY2FsIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1saW5lLWhvcml6b250YWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgYApdOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWRhc2hib2FyZGdyaWQvbGF5b3V0LmpzCnZhciBERUZBVUxUX01BUkdJTiA9IDEwOwp2YXIgcmVzb2x2ZU1hcmdpbnMgPSAobWFyZ2luKSA9PiB7CiAgaWYgKHR5cGVvZiBtYXJnaW4gPT09ICJudW1iZXIiKSB7CiAgICByZXR1cm4gewogICAgICBob3Jpem9udGFsOiBtYXJnaW4sCiAgICAgIHZlcnRpY2FsOiBtYXJnaW4sCiAgICAgIHRvcDogbWFyZ2luLAogICAgICByaWdodDogbWFyZ2luLAogICAgICBib3R0b206IG1hcmdpbiwKICAgICAgbGVmdDogbWFyZ2luCiAgICB9OwogIH0KICBjb25zdCByZXNvbHZlZDIgPSB7CiAgICB0b3A6IG1hcmdpbi50b3AgPz8gREVGQVVMVF9NQVJHSU4sCiAgICByaWdodDogbWFyZ2luLnJpZ2h0ID8/IERFRkFVTFRfTUFSR0lOLAogICAgYm90dG9tOiBtYXJnaW4uYm90dG9tID8/IERFRkFVTFRfTUFSR0lOLAogICAgbGVmdDogbWFyZ2luLmxlZnQgPz8gREVGQVVMVF9NQVJHSU4KICB9OwogIHJldHVybiB7CiAgICAuLi5yZXNvbHZlZDIsCiAgICBob3Jpem9udGFsOiAocmVzb2x2ZWQyLmxlZnQgKyByZXNvbHZlZDIucmlnaHQpIC8gMiwKICAgIHZlcnRpY2FsOiAocmVzb2x2ZWQyLnRvcCArIHJlc29sdmVkMi5ib3R0b20pIC8gMgogIH07Cn07CnZhciBjYWxjdWxhdGVDZWxsTWV0cmljcyA9IChjb250YWluZXJXaWR0aCwgY29sdW1ucywgbWFyZ2lucywgY2VsbEhlaWdodCwgY2VsbEhlaWdodFVuaXQpID0+IHsKICBjb25zdCB0b3RhbE1hcmdpbldpZHRoID0gbWFyZ2lucy5ob3Jpem9udGFsICogKGNvbHVtbnMgKyAxKTsKICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IE1hdGgubWF4KGNvbnRhaW5lcldpZHRoIC0gdG90YWxNYXJnaW5XaWR0aCwgMCk7CiAgY29uc3QgY2VsbFdpZHRoUHggPSBjb2x1bW5zID4gMCA/IGF2YWlsYWJsZVdpZHRoIC8gY29sdW1ucyA6IDA7CiAgY29uc3QgY2VsbEhlaWdodFB4ID0gY2VsbEhlaWdodFVuaXQgPT09ICJhdXRvIiA/IGNlbGxXaWR0aFB4IDogY2VsbEhlaWdodDsKICByZXR1cm4gewogICAgY29udGFpbmVyV2lkdGgsCiAgICBjZWxsV2lkdGhQeCwKICAgIG1hcmdpbkhvcml6b250YWxQeDogbWFyZ2lucy5ob3Jpem9udGFsLAogICAgY2VsbEhlaWdodFB4LAogICAgbWFyZ2luVmVydGljYWxQeDogbWFyZ2lucy52ZXJ0aWNhbAogIH07Cn07CnZhciBjYWxjdWxhdGVHcmlkSGVpZ2h0ID0gKHdpZGdldHMsIG1hcmdpbnMsIGNlbGxIZWlnaHQpID0+IHsKICBpZiAod2lkZ2V0cy5sZW5ndGggPT09IDApCiAgICByZXR1cm4gMDsKICBjb25zdCBtYXhZID0gTWF0aC5tYXgoLi4ud2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gd2lkZ2V0LnkgKyB3aWRnZXQuaCksIDApOwogIHJldHVybiBtYXhZICogY2VsbEhlaWdodCArIChtYXhZICsgMSkgKiBtYXJnaW5zLnZlcnRpY2FsOwp9Owp2YXIgb3ZlcmxhcHMgPSAod2lkZ2V0LCB4MywgeTUsIHczLCBoOSkgPT4geDMgPCB3aWRnZXQueCArIHdpZGdldC53ICYmIHgzICsgdzMgPiB3aWRnZXQueCAmJiB5NSA8IHdpZGdldC55ICsgd2lkZ2V0LmggJiYgeTUgKyBoOSA+IHdpZGdldC55Owp2YXIgY29sbGVjdENvbGxpc2lvbnMgPSAod2lkZ2V0cywgdGFyZ2V0LCBuZXh0WCwgbmV4dFksIG5leHRXID0gdGFyZ2V0LncsIG5leHRIID0gdGFyZ2V0LmgpID0+IHsKICByZXR1cm4gd2lkZ2V0cy5maWx0ZXIoKHdpZGdldCkgPT4gewogICAgaWYgKHdpZGdldC5pZCA9PT0gdGFyZ2V0LmlkKQogICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gb3ZlcmxhcHMod2lkZ2V0LCBuZXh0WCwgbmV4dFksIG5leHRXLCBuZXh0SCk7CiAgfSk7Cn07CnZhciBjaGVja0NvbGxpc2lvbiA9ICh3aWRnZXRzLCB0YXJnZXQsIG5leHRYLCBuZXh0WSkgPT4gY29sbGVjdENvbGxpc2lvbnMod2lkZ2V0cywgdGFyZ2V0LCBuZXh0WCwgbmV4dFkpLmxlbmd0aCA+IDA7CnZhciBjbG9uZVdpZGdldCA9ICh3aWRnZXQpID0+ICh7IC4uLndpZGdldCB9KTsKdmFyIGNsb25lV2lkZ2V0cyA9ICh3aWRnZXRzKSA9PiB3aWRnZXRzLm1hcChjbG9uZVdpZGdldCk7CnZhciBmaW5kQXZhaWxhYmxlUG9zaXRpb24gPSAod2lkZ2V0cywgd2lkdGgsIGhlaWdodCwgY29sdW1ucykgPT4gewogIGZvciAobGV0IHk1ID0gMDsgeTUgPCAyMDA7IHk1KyspIHsKICAgIGZvciAobGV0IHgzID0gMDsgeDMgPD0gY29sdW1ucyAtIHdpZHRoOyB4MysrKSB7CiAgICAgIGNvbnN0IGlzRnJlZSA9ICF3aWRnZXRzLnNvbWUoKHdpZGdldCkgPT4gb3ZlcmxhcHMod2lkZ2V0LCB4MywgeTUsIHdpZHRoLCBoZWlnaHQpKTsKICAgICAgaWYgKGlzRnJlZSkgewogICAgICAgIHJldHVybiB7IHg6IHgzLCB5OiB5NSB9OwogICAgICB9CiAgICB9CiAgfQogIGNvbnN0IG1heFkgPSB3aWRnZXRzLnJlZHVjZSgoYWNjLCB3aWRnZXQpID0+IE1hdGgubWF4KGFjYywgd2lkZ2V0LnkgKyB3aWRnZXQuaCksIDApOwogIHJldHVybiB7IHg6IDAsIHk6IG1heFkgfTsKfTsKdmFyIHJlc29sdmVXaWRnZXRQbGFjZW1lbnQgPSAod2lkZ2V0cywgd2lkZ2V0SWQsIG5leHQyLCBjb2x1bW5zLCBwcmV2aW91c1Bvc2l0aW9uKSA9PiB7CiAgY29uc3Qgc291cmNlV2lkZ2V0cyA9IGNsb25lV2lkZ2V0cyh3aWRnZXRzKTsKICBjb25zdCBtb3ZpbmcgPSBzb3VyY2VXaWRnZXRzLmZpbmQoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSB3aWRnZXRJZCk7CiAgY29uc3Qgb3JpZ2luYWwgPSB3aWRnZXRzLmZpbmQoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSB3aWRnZXRJZCk7CiAgaWYgKCFtb3ZpbmcgfHwgIW9yaWdpbmFsKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgY29uc3QgdGFyZ2V0ID0gewogICAgeDogbmV4dDIueCwKICAgIHk6IG5leHQyLnksCiAgICB3OiBuZXh0Mi53ID8/IG1vdmluZy53LAogICAgaDogbmV4dDIuaCA/PyBtb3ZpbmcuaAogIH07CiAgbW92aW5nLnggPSB0YXJnZXQueDsKICBtb3ZpbmcueSA9IHRhcmdldC55OwogIG1vdmluZy53ID0gdGFyZ2V0Lnc7CiAgbW92aW5nLmggPSB0YXJnZXQuaDsKICBjb25zdCBjb2xsaXNpb25zID0gY29sbGVjdENvbGxpc2lvbnMoc291cmNlV2lkZ2V0cywgbW92aW5nLCB0YXJnZXQueCwgdGFyZ2V0LnksIHRhcmdldC53LCB0YXJnZXQuaCk7CiAgaWYgKGNvbGxpc2lvbnMubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm4geyB3aWRnZXRzOiBzb3VyY2VXaWRnZXRzLCBtb3ZlZFdpZGdldHM6IFttb3ZpbmcuaWRdIH07CiAgfQogIGlmIChjb2xsaXNpb25zLmxlbmd0aCA9PT0gMSkgewogICAgY29uc3Qgb3RoZXIgPSBjb2xsaXNpb25zWzBdOwogICAgaWYgKCFvdGhlci5sb2NrZWQgJiYgIW90aGVyLm5vTW92ZSAmJiBvdGhlci53ID09PSBtb3ZpbmcudyAmJiBvdGhlci5oID09PSBtb3ZpbmcuaCkgewogICAgICBjb25zdCBvdGhlckNsb25lID0gc291cmNlV2lkZ2V0cy5maW5kKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gb3RoZXIuaWQpOwogICAgICBpZiAob3RoZXJDbG9uZSkgewogICAgICAgIGNvbnN0IHN3YXBUYXJnZXQgPSBvcmlnaW5hbDsKICAgICAgICBjb25zdCBwcmV2aW91c090aGVyUG9zaXRpb24gPSB7IHg6IG90aGVyQ2xvbmUueCwgeTogb3RoZXJDbG9uZS55IH07CiAgICAgICAgb3RoZXJDbG9uZS54ID0gc3dhcFRhcmdldC54OwogICAgICAgIG90aGVyQ2xvbmUueSA9IHN3YXBUYXJnZXQueTsKICAgICAgICBjb25zdCBzd2FwVmFsaWQgPSBjb2xsZWN0Q29sbGlzaW9ucyhzb3VyY2VXaWRnZXRzLCBtb3ZpbmcsIG1vdmluZy54LCBtb3ZpbmcueSwgbW92aW5nLncsIG1vdmluZy5oKS5sZW5ndGggPT09IDAgJiYgY29sbGVjdENvbGxpc2lvbnMoc291cmNlV2lkZ2V0cywgb3RoZXJDbG9uZSwgb3RoZXJDbG9uZS54LCBvdGhlckNsb25lLnksIG90aGVyQ2xvbmUudywgb3RoZXJDbG9uZS5oKS5sZW5ndGggPT09IDA7CiAgICAgICAgaWYgKHN3YXBWYWxpZCkgewogICAgICAgICAgcmV0dXJuIHsgd2lkZ2V0czogc291cmNlV2lkZ2V0cywgbW92ZWRXaWRnZXRzOiBbbW92aW5nLmlkLCBvdGhlckNsb25lLmlkXSwgc3dhcHBlZFdpdGg6IG90aGVyQ2xvbmUuaWQgfTsKICAgICAgICB9CiAgICAgICAgb3RoZXJDbG9uZS54ID0gcHJldmlvdXNPdGhlclBvc2l0aW9uLng7CiAgICAgICAgb3RoZXJDbG9uZS55ID0gcHJldmlvdXNPdGhlclBvc2l0aW9uLnk7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgbW92ZWRJZHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbbW92aW5nLmlkXSk7CiAgZm9yIChjb25zdCBvZmZlbmRpbmcgb2YgY29sbGlzaW9ucykgewogICAgaWYgKG9mZmVuZGluZy5sb2NrZWQgfHwgb2ZmZW5kaW5nLm5vTW92ZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IGNsb25lID0gc291cmNlV2lkZ2V0cy5maW5kKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gb2ZmZW5kaW5nLmlkKTsKICAgIGlmICghY2xvbmUpCiAgICAgIGNvbnRpbnVlOwogICAgY29uc3QgcmVtYWluaW5nID0gc291cmNlV2lkZ2V0cy5maWx0ZXIoKHdpZGdldCkgPT4gd2lkZ2V0LmlkICE9PSBvZmZlbmRpbmcuaWQpOwogICAgY29uc3QgcG9zaXRpb24zID0gZmluZEF2YWlsYWJsZVBvc2l0aW9uKHJlbWFpbmluZywgY2xvbmUudywgY2xvbmUuaCwgY29sdW1ucyk7CiAgICBjbG9uZS54ID0gcG9zaXRpb24zLng7CiAgICBjbG9uZS55ID0gcG9zaXRpb24zLnk7CiAgICBtb3ZlZElkcy5hZGQoY2xvbmUuaWQpOwogIH0KICBjb25zdCB2ZXJpZnkgPSBjb2xsZWN0Q29sbGlzaW9ucyhzb3VyY2VXaWRnZXRzLCBtb3ZpbmcsIG1vdmluZy54LCBtb3ZpbmcueSwgbW92aW5nLncsIG1vdmluZy5oKTsKICBpZiAodmVyaWZ5Lmxlbmd0aCA+IDApIHsKICAgIHJldHVybiBudWxsOwogIH0KICByZXR1cm4geyB3aWRnZXRzOiBzb3VyY2VXaWRnZXRzLCBtb3ZlZFdpZGdldHM6IEFycmF5LmZyb20obW92ZWRJZHMpIH07Cn07CnZhciBjb21wYWN0TGF5b3V0ID0gKHdpZGdldHMsIGRpcmVjdGlvbiA9ICJ2ZXJ0aWNhbCIpID0+IHsKICBjb25zdCBzb3J0ZWQgPSBbLi4ud2lkZ2V0c10uc29ydCgoYTUsIGI1KSA9PiB7CiAgICBpZiAoZGlyZWN0aW9uID09PSAidmVydGljYWwiKSB7CiAgICAgIGlmIChhNS55ICE9PSBiNS55KQogICAgICAgIHJldHVybiBhNS55IC0gYjUueTsKICAgICAgcmV0dXJuIGE1LnggLSBiNS54OwogICAgfQogICAgaWYgKGE1LnggIT09IGI1LngpCiAgICAgIHJldHVybiBhNS54IC0gYjUueDsKICAgIHJldHVybiBhNS55IC0gYjUueTsKICB9KTsKICBmb3IgKGNvbnN0IHdpZGdldCBvZiBzb3J0ZWQpIHsKICAgIGlmICh3aWRnZXQubG9ja2VkIHx8IHdpZGdldC5ub01vdmUpCiAgICAgIGNvbnRpbnVlOwogICAgaWYgKGRpcmVjdGlvbiA9PT0gInZlcnRpY2FsIikgewogICAgICB3aGlsZSAod2lkZ2V0LnkgPiAwICYmICFjaGVja0NvbGxpc2lvbih3aWRnZXRzLCB3aWRnZXQsIHdpZGdldC54LCB3aWRnZXQueSAtIDEpKSB7CiAgICAgICAgd2lkZ2V0LnkgLT0gMTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgd2hpbGUgKHdpZGdldC54ID4gMCAmJiAhY2hlY2tDb2xsaXNpb24od2lkZ2V0cywgd2lkZ2V0LCB3aWRnZXQueCAtIDEsIHdpZGdldC55KSkgewogICAgICAgIHdpZGdldC54IC09IDE7CiAgICAgIH0KICAgIH0KICB9Cn07CnZhciBhcHBseUxheW91dCA9ICh3aWRnZXRzLCBsYXlvdXQpID0+IHsKICByZXR1cm4gd2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gewogICAgY29uc3QgbGF5b3V0SXRlbSA9IGxheW91dC5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSB3aWRnZXQuaWQpOwogICAgcmV0dXJuIGxheW91dEl0ZW0gPyB7IC4uLndpZGdldCwgLi4ubGF5b3V0SXRlbSB9IDogd2lkZ2V0OwogIH0pOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWRhc2hib2FyZGdyaWQvaW50ZXJhY3Rpb24uanMKdmFyIGNvbXB1dGVHcmlkQ29vcmRpbmF0ZXMgPSAoeyBwb2ludGVyLCBjb250YWluZXJSZWN0LCBtZXRyaWNzLCBjb2x1bW5zLCB3aWRnZXQsIHJ0bCwgZHJhZ09mZnNldFggPSAwLCBkcmFnT2Zmc2V0WSA9IDAgfSkgPT4gewogIGNvbnN0IHJlbGF0aXZlWCA9IHBvaW50ZXIuY2xpZW50WCAtIGNvbnRhaW5lclJlY3QubGVmdCAtIGRyYWdPZmZzZXRYOwogIGNvbnN0IHJlbGF0aXZlWSA9IHBvaW50ZXIuY2xpZW50WSAtIGNvbnRhaW5lclJlY3QudG9wIC0gZHJhZ09mZnNldFk7CiAgY29uc3QgbWFyZ2luWCA9IG1ldHJpY3MubWFyZ2luSG9yaXpvbnRhbFB4OwogIGNvbnN0IG1hcmdpblkgPSBtZXRyaWNzLm1hcmdpblZlcnRpY2FsUHg7CiAgY29uc3QgY2VsbFdpZHRoID0gbWV0cmljcy5jZWxsV2lkdGhQeDsKICBjb25zdCBjZWxsSGVpZ2h0ID0gbWV0cmljcy5jZWxsSGVpZ2h0UHg7CiAgY29uc3QgY2xhbXAzID0gKHZhbHVlMiwgbWluMywgbWF4MykgPT4gTWF0aC5tYXgobWluMywgTWF0aC5taW4obWF4MywgdmFsdWUyKSk7CiAgY29uc3QgYWRqdXN0ZWRYID0gY2xhbXAzKHJlbGF0aXZlWCAtIG1hcmdpblgsIDAsIGNvbnRhaW5lclJlY3Qud2lkdGggLSBtYXJnaW5YKTsKICBjb25zdCBhZGp1c3RlZFkgPSBjbGFtcDMocmVsYXRpdmVZIC0gbWFyZ2luWSwgMCwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTsKICBjb25zdCBjZWxsUGx1c01hcmdpblggPSBjZWxsV2lkdGggKyBtYXJnaW5YOwogIGNvbnN0IGNlbGxQbHVzTWFyZ2luWSA9IGNlbGxIZWlnaHQgKyBtYXJnaW5ZOwogIGxldCBncmlkWCA9IE1hdGgucm91bmQoYWRqdXN0ZWRYIC8gY2VsbFBsdXNNYXJnaW5YKTsKICBpZiAocnRsKSB7CiAgICBncmlkWCA9IGNvbHVtbnMgLSB3aWRnZXQudyAtIGdyaWRYOwogIH0KICBncmlkWCA9IGNsYW1wMyhncmlkWCwgMCwgY29sdW1ucyAtIHdpZGdldC53KTsKICBjb25zdCBncmlkWSA9IGNsYW1wMyhNYXRoLnJvdW5kKGFkanVzdGVkWSAvIGNlbGxQbHVzTWFyZ2luWSksIDAsIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTsKICByZXR1cm4geyB4OiBncmlkWCwgeTogZ3JpZFkgfTsKfTsKdmFyIGNvbXB1dGVSZXNpemVEaW1lbnNpb25zID0gKHsgcG9pbnRlciwgY29udGFpbmVyUmVjdCwgbWV0cmljcywgc3RhcnRXaWR0aCwgc3RhcnRIZWlnaHQsIHN0YXJ0UG9pbnRlciwgaGFuZGxlcjogaGFuZGxlcjIsIHdpZGdldCwgY29sdW1ucyB9KSA9PiB7CiAgY29uc3QgZGVsdGFYID0gcG9pbnRlci5jbGllbnRYIC0gc3RhcnRQb2ludGVyLmNsaWVudFg7CiAgY29uc3QgZGVsdGFZID0gcG9pbnRlci5jbGllbnRZIC0gc3RhcnRQb2ludGVyLmNsaWVudFk7CiAgbGV0IHdpZHRoID0gc3RhcnRXaWR0aDsKICBsZXQgaGVpZ2h0ID0gc3RhcnRIZWlnaHQ7CiAgY29uc3QgY2VsbFBsdXNNYXJnaW5YID0gbWV0cmljcy5jZWxsV2lkdGhQeCArIG1ldHJpY3MubWFyZ2luSG9yaXpvbnRhbFB4OwogIGNvbnN0IGNlbGxQbHVzTWFyZ2luWSA9IG1ldHJpY3MuY2VsbEhlaWdodFB4ICsgbWV0cmljcy5tYXJnaW5WZXJ0aWNhbFB4OwogIGlmIChoYW5kbGVyMi5pbmNsdWRlcygiZSIpKSB7CiAgICBjb25zdCBkZWx0YUNvbHMgPSBNYXRoLnJvdW5kKGRlbHRhWCAvIGNlbGxQbHVzTWFyZ2luWCk7CiAgICB3aWR0aCA9IHN0YXJ0V2lkdGggKyBkZWx0YUNvbHM7CiAgfQogIGlmIChoYW5kbGVyMi5pbmNsdWRlcygicyIpKSB7CiAgICBjb25zdCBkZWx0YVJvd3MgPSBNYXRoLnJvdW5kKGRlbHRhWSAvIGNlbGxQbHVzTWFyZ2luWSk7CiAgICBoZWlnaHQgPSBzdGFydEhlaWdodCArIGRlbHRhUm93czsKICB9CiAgY29uc3QgY2xhbXBlZFdpZHRoID0gTWF0aC5tYXgod2lkZ2V0Lm1pblcgfHwgMSwgTWF0aC5taW4od2lkdGgsIHdpZGdldC5tYXhXIHx8IGNvbHVtbnMgLSB3aWRnZXQueCkpOwogIGNvbnN0IGNsYW1wZWRIZWlnaHQgPSBNYXRoLm1heCh3aWRnZXQubWluSCB8fCAxLCBNYXRoLm1pbihoZWlnaHQsIHdpZGdldC5tYXhIIHx8IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSk7CiAgcmV0dXJuIHsKICAgIHdpZHRoOiBjbGFtcGVkV2lkdGgsCiAgICBoZWlnaHQ6IGNsYW1wZWRIZWlnaHQKICB9Owp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWRhc2hib2FyZGdyaWQvY29udGV4dG1lbnUuanMKdmFyIG9wZW5XaWRnZXRDb250ZXh0TWVudSA9ICh7IHdpZGdldCwgaG9zdCwgZXZlbnQgfSkgPT4gewogIGNvbnN0IGl0ZW1zID0gWwogICAgewogICAgICBuYW1lOiAiRGVsZXRlIHRpbGUiLAogICAgICBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICBob3N0LnJlbW92ZVdpZGdldCh3aWRnZXQuaWQpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgXTsKICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIGl0ZW1zKTsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1kYXNoYm9hcmRncmlkL2RlZXMtZGFzaGJvYXJkZ3JpZC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlNzUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczc2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzRGFzaGJvYXJkZ3JpZCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtZGFzaGJvYXJkZ3JpZCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3dpZGdldHNfZGVjb3JhdG9yczsKICBsZXQgX3dpZGdldHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF93aWRnZXRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jZWxsSGVpZ2h0X2RlY29yYXRvcnM7CiAgbGV0IF9jZWxsSGVpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2VsbEhlaWdodF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFyZ2luX2RlY29yYXRvcnM7CiAgbGV0IF9tYXJnaW5faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXJnaW5fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbHVtbnNfZGVjb3JhdG9yczsKICBsZXQgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2x1bW5zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lZGl0YWJsZV9kZWNvcmF0b3JzOwogIGxldCBfZWRpdGFibGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lZGl0YWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlQW5pbWF0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9lbmFibGVBbmltYXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lbmFibGVBbmltYXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NlbGxIZWlnaHRVbml0X2RlY29yYXRvcnM7CiAgbGV0IF9jZWxsSGVpZ2h0VW5pdF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NlbGxIZWlnaHRVbml0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ydGxfZGVjb3JhdG9yczsKICBsZXQgX3J0bF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3J0bF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0dyaWRMaW5lc19kZWNvcmF0b3JzOwogIGxldCBfc2hvd0dyaWRMaW5lc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dHcmlkTGluZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xheW91dHNfZGVjb3JhdG9yczsKICBsZXQgX2xheW91dHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYXlvdXRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3RpdmVCcmVha3BvaW50X2RlY29yYXRvcnM7CiAgbGV0IF9hY3RpdmVCcmVha3BvaW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZlQnJlYWtwb2ludF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21ldHJpY3NfZGVjb3JhdG9yczsKICBsZXQgX21ldHJpY3NfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZXRyaWNzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZXNvbHZlZE1hcmdpbnNfZGVjb3JhdG9yczsKICBsZXQgX3Jlc29sdmVkTWFyZ2luc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Jlc29sdmVkTWFyZ2luc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcHJldmlld1dpZGdldHNfZGVjb3JhdG9yczsKICBsZXQgX3ByZXZpZXdXaWRnZXRzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcHJldmlld1dpZGdldHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0Rhc2hib2FyZGdyaWQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfd2lkZ2V0c19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfY2VsbEhlaWdodF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX21hcmdpbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX2NvbHVtbnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9lZGl0YWJsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9lbmFibGVBbmltYXRpb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSldOwogICAgICBfY2VsbEhlaWdodFVuaXRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9ydGxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2hvd0dyaWRMaW5lc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9sYXlvdXRzX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX2FjdGl2ZUJyZWFrcG9pbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9wbGFjZWhvbGRlclBvc2l0aW9uX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9tZXRyaWNzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9yZXNvbHZlZE1hcmdpbnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3ByZXZpZXdXaWRnZXRzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF93aWRnZXRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndpZGdldHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIndpZGdldHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud2lkZ2V0cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud2lkZ2V0cyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF93aWRnZXRzX2luaXRpYWxpemVycywgX3dpZGdldHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NSh0aGlzLCBudWxsLCBfY2VsbEhlaWdodF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjZWxsSGVpZ2h0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjZWxsSGVpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNlbGxIZWlnaHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNlbGxIZWlnaHQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY2VsbEhlaWdodF9pbml0aWFsaXplcnMsIF9jZWxsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX21hcmdpbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYXJnaW4iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1hcmdpbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYXJnaW4sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1hcmdpbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXJnaW5faW5pdGlhbGl6ZXJzLCBfbWFyZ2luX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX2NvbHVtbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29sdW1ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sdW1ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb2x1bW5zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jb2x1bW5zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzLCBfY29sdW1uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF9lZGl0YWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlZGl0YWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZWRpdGFibGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZWRpdGFibGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVkaXRhYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VkaXRhYmxlX2luaXRpYWxpemVycywgX2VkaXRhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX2VuYWJsZUFuaW1hdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbmFibGVBbmltYXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVuYWJsZUFuaW1hdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbmFibGVBbmltYXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVuYWJsZUFuaW1hdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lbmFibGVBbmltYXRpb25faW5pdGlhbGl6ZXJzLCBfZW5hYmxlQW5pbWF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX2NlbGxIZWlnaHRVbml0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNlbGxIZWlnaHRVbml0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjZWxsSGVpZ2h0VW5pdCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jZWxsSGVpZ2h0VW5pdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY2VsbEhlaWdodFVuaXQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY2VsbEhlaWdodFVuaXRfaW5pdGlhbGl6ZXJzLCBfY2VsbEhlaWdodFVuaXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NSh0aGlzLCBudWxsLCBfcnRsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJ0bCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicnRsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJ0bCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucnRsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3J0bF9pbml0aWFsaXplcnMsIF9ydGxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NSh0aGlzLCBudWxsLCBfc2hvd0dyaWRMaW5lc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93R3JpZExpbmVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93R3JpZExpbmVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dHcmlkTGluZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dHcmlkTGluZXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0dyaWRMaW5lc19pbml0aWFsaXplcnMsIF9zaG93R3JpZExpbmVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX2xheW91dHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGF5b3V0cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGF5b3V0cyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYXlvdXRzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sYXlvdXRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xheW91dHNfaW5pdGlhbGl6ZXJzLCBfbGF5b3V0c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF9hY3RpdmVCcmVha3BvaW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjdGl2ZUJyZWFrcG9pbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2ZUJyZWFrcG9pbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlQnJlYWtwb2ludCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWN0aXZlQnJlYWtwb2ludCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3RpdmVCcmVha3BvaW50X2luaXRpYWxpemVycywgX2FjdGl2ZUJyZWFrcG9pbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NSh0aGlzLCBudWxsLCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwbGFjZWhvbGRlclBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwbGFjZWhvbGRlclBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBsYWNlaG9sZGVyUG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnBsYWNlaG9sZGVyUG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9pbml0aWFsaXplcnMsIF9wbGFjZWhvbGRlclBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX21ldHJpY3NfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWV0cmljcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWV0cmljcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZXRyaWNzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tZXRyaWNzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21ldHJpY3NfaW5pdGlhbGl6ZXJzLCBfbWV0cmljc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF9yZXNvbHZlZE1hcmdpbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicmVzb2x2ZWRNYXJnaW5zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZXNvbHZlZE1hcmdpbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVzb2x2ZWRNYXJnaW5zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yZXNvbHZlZE1hcmdpbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVzb2x2ZWRNYXJnaW5zX2luaXRpYWxpemVycywgX3Jlc29sdmVkTWFyZ2luc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF9wcmV2aWV3V2lkZ2V0c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwcmV2aWV3V2lkZ2V0cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicHJldmlld1dpZGdldHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucHJldmlld1dpZGdldHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnByZXZpZXdXaWRnZXRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ByZXZpZXdXaWRnZXRzX2luaXRpYWxpemVycywgX3ByZXZpZXdXaWRnZXRzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzRGFzaGJvYXJkZ3JpZDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ2OwogICAgc3RhdGljIHN0eWxlcyA9IGRhc2hib2FyZEdyaWRTdHlsZXM7CiAgICAjd2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfd2lkZ2V0c19pbml0aWFsaXplcnMsIFtdKTsKICAgIGdldCB3aWRnZXRzKCkgewogICAgICByZXR1cm4gdGhpcy4jd2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHdpZGdldHModmFsdWUyKSB7CiAgICAgIHRoaXMuI3dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjZWxsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfd2lkZ2V0c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2NlbGxIZWlnaHRfaW5pdGlhbGl6ZXJzLCA4MCkpOwogICAgZ2V0IGNlbGxIZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjZWxsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2VsbEhlaWdodCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY2VsbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21hcmdpbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2NlbGxIZWlnaHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9tYXJnaW5faW5pdGlhbGl6ZXJzLCAxMCkpOwogICAgZ2V0IG1hcmdpbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI21hcmdpbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1hcmdpbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFyZ2luX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29sdW1uc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX21hcmdpbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzLCAxMikpOwogICAgZ2V0IGNvbHVtbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb2x1bW5zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sdW1ucyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29sdW1uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VkaXRhYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfY29sdW1uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2VkaXRhYmxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IGVkaXRhYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jZWRpdGFibGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlZGl0YWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZWRpdGFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNlbmFibGVBbmltYXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9lZGl0YWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2VuYWJsZUFuaW1hdGlvbl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBlbmFibGVBbmltYXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNlbmFibGVBbmltYXRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlbmFibGVBbmltYXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2VuYWJsZUFuaW1hdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NlbGxIZWlnaHRVbml0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfZW5hYmxlQW5pbWF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfY2VsbEhlaWdodFVuaXRfaW5pdGlhbGl6ZXJzLCAicHgiKSk7CiAgICBnZXQgY2VsbEhlaWdodFVuaXQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjZWxsSGVpZ2h0VW5pdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNlbGxIZWlnaHRVbml0KHZhbHVlMikgewogICAgICB0aGlzLiNjZWxsSGVpZ2h0VW5pdF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3J0bF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2NlbGxIZWlnaHRVbml0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfcnRsX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBydGwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNydGxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBydGwodmFsdWUyKSB7CiAgICAgIHRoaXMuI3J0bF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dHcmlkTGluZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9ydGxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9zaG93R3JpZExpbmVzX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93R3JpZExpbmVzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0dyaWRMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dHcmlkTGluZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dHcmlkTGluZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsYXlvdXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfc2hvd0dyaWRMaW5lc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2xheW91dHNfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBsYXlvdXRzKCkgewogICAgICByZXR1cm4gdGhpcy4jbGF5b3V0c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxheW91dHModmFsdWUyKSB7CiAgICAgIHRoaXMuI2xheW91dHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhY3RpdmVCcmVha3BvaW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfbGF5b3V0c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2FjdGl2ZUJyZWFrcG9pbnRfaW5pdGlhbGl6ZXJzLCAiYmFzZSIpKTsKICAgIGdldCBhY3RpdmVCcmVha3BvaW50KCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZlQnJlYWtwb2ludF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjdGl2ZUJyZWFrcG9pbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2ZUJyZWFrcG9pbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwbGFjZWhvbGRlclBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfYWN0aXZlQnJlYWtwb2ludF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX3BsYWNlaG9sZGVyUG9zaXRpb25faW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgcGxhY2Vob2xkZXJQb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwbGFjZWhvbGRlclBvc2l0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNwbGFjZWhvbGRlclBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX3BsYWNlaG9sZGVyUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9tZXRyaWNzX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IG1ldHJpY3MoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZXRyaWNzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWV0cmljcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Jlc29sdmVkTWFyZ2luc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX21ldHJpY3NfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9yZXNvbHZlZE1hcmdpbnNfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgcmVzb2x2ZWRNYXJnaW5zKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVzb2x2ZWRNYXJnaW5zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcmVzb2x2ZWRNYXJnaW5zKHZhbHVlMikgewogICAgICB0aGlzLiNyZXNvbHZlZE1hcmdpbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwcmV2aWV3V2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX3Jlc29sdmVkTWFyZ2luc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX3ByZXZpZXdXaWRnZXRzX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IHByZXZpZXdXaWRnZXRzKCkgewogICAgICByZXR1cm4gdGhpcy4jcHJldmlld1dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwcmV2aWV3V2lkZ2V0cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcHJldmlld1dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnRhaW5lckJvdW5kcyA9IChfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9wcmV2aWV3V2lkZ2V0c19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgZHJhZ1N0YXRlID0gbnVsbDsKICAgIHJlc2l6ZVN0YXRlID0gbnVsbDsKICAgIHJlc2l6ZU9ic2VydmVyOwogICAgaW50ZXJhY3Rpb25BY3RpdmUgPSBmYWxzZTsKICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB0aGlzLmNvbXB1dGVNZXRyaWNzKCk7CiAgICAgIHRoaXMub2JzZXJ2ZVJlc2l6ZSgpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCk7CiAgICAgIHRoaXMucmVsZWFzZVBvaW50ZXJFdmVudHMoKTsKICAgIH0KICAgIHVwZGF0ZWQoY2hhbmdlZCkgewogICAgICBpZiAoY2hhbmdlZC5oYXMoIm1hcmdpbiIpIHx8IGNoYW5nZWQuaGFzKCJjb2x1bW5zIikgfHwgY2hhbmdlZC5oYXMoImNlbGxIZWlnaHQiKSB8fCBjaGFuZ2VkLmhhcygiY2VsbEhlaWdodFVuaXQiKSkgewogICAgICAgIHRoaXMuY29tcHV0ZU1ldHJpY3MoKTsKICAgICAgfQogICAgICBpZiAoY2hhbmdlZC5oYXMoIndpZGdldHMiKSAmJiAhdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZSkgewogICAgICAgIHRoaXMubm90aWZ5TGF5b3V0Q2hhbmdlKCk7CiAgICAgIH0KICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgYmFzZVdpZGdldHMgPSB0aGlzLndpZGdldHM7CiAgICAgIGlmIChiYXNlV2lkZ2V0cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6bGF5b3V0R3JpZCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgPGRpdj5ObyB3aWRnZXRzIGNvbmZpZ3VyZWQ8L2Rpdj4KICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsgbWFyZ2luLXRvcDogOHB4OyI+QWRkIHdpZGdldHMgdG8gcG9wdWxhdGUgdGhlIGRhc2hib2FyZDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgICB9CiAgICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLmVuc3VyZU1ldHJpY3MoKTsKICAgICAgY29uc3QgbWFyZ2lucyA9IHRoaXMucmVzb2x2ZWRNYXJnaW5zID8/IHJlc29sdmVNYXJnaW5zKHRoaXMubWFyZ2luKTsKICAgICAgY29uc3QgY2VsbEhlaWdodCA9IG1ldHJpY3MuY2VsbEhlaWdodFB4OwogICAgICBjb25zdCBsYXlvdXRGb3JIZWlnaHQgPSB0aGlzLnByZXZpZXdXaWRnZXRzID8/IHRoaXMud2lkZ2V0czsKICAgICAgY29uc3QgZ3JpZEhlaWdodCA9IGNhbGN1bGF0ZUdyaWRIZWlnaHQobGF5b3V0Rm9ySGVpZ2h0LCBtYXJnaW5zLCBjZWxsSGVpZ2h0KTsKICAgICAgY29uc3QgcHJldmlld01hcCA9IHRoaXMucHJldmlld1dpZGdldHMgPyBuZXcgTWFwKHRoaXMucHJldmlld1dpZGdldHMubWFwKCh3aWRnZXQpID0+IFt3aWRnZXQuaWQsIHdpZGdldF0pKSA6IG51bGw7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1jb250YWluZXIiIHN0eWxlPSJoZWlnaHQ6ICR7Z3JpZEhlaWdodH1weDsiPgogICAgICAgICR7dGhpcy5zaG93R3JpZExpbmVzID8gdGhpcy5yZW5kZXJHcmlkTGluZXMobWV0cmljcywgZ3JpZEhlaWdodCkgOiBudWxsfQogICAgICAgICR7YmFzZVdpZGdldHMubWFwKCh3aWRnZXQpID0+IHRoaXMucmVuZGVyV2lkZ2V0KHdpZGdldCwgbWV0cmljcywgbWFyZ2lucywgcHJldmlld01hcCkpfQogICAgICAgICR7dGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uID8gdGhpcy5yZW5kZXJQbGFjZWhvbGRlcihtZXRyaWNzLCBtYXJnaW5zKSA6IG51bGx9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckdyaWRMaW5lcyhtZXRyaWNzLCBncmlkSGVpZ2h0KSB7CiAgICAgIGNvbnN0IHZlcnRpY2FsID0gW107CiAgICAgIGNvbnN0IGhvcml6b250YWwgPSBbXTsKICAgICAgY29uc3QgY2VsbFBsdXNNYXJnaW5YID0gbWV0cmljcy5jZWxsV2lkdGhQeCArIG1ldHJpY3MubWFyZ2luSG9yaXpvbnRhbFB4OwogICAgICBjb25zdCBjZWxsUGx1c01hcmdpblkgPSBtZXRyaWNzLmNlbGxIZWlnaHRQeCArIG1ldHJpY3MubWFyZ2luVmVydGljYWxQeDsKICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDw9IHRoaXMuY29sdW1uczsgaTExKyspIHsKICAgICAgICBjb25zdCBsZWZ0UHggPSBpMTEgKiBjZWxsUGx1c01hcmdpblggKyBtZXRyaWNzLm1hcmdpbkhvcml6b250YWxQeDsKICAgICAgICBjb25zdCBsZWZ0UGVyY2VudCA9IHRoaXMucHhUb1BlcmNlbnQobGVmdFB4LCBtZXRyaWNzLmNvbnRhaW5lcldpZHRoKTsKICAgICAgICB2ZXJ0aWNhbC5wdXNoKGIyYDxkaXYgY2xhc3M9ImdyaWQtbGluZS12ZXJ0aWNhbCIgc3R5bGU9ImxlZnQ6ICR7bGVmdFBlcmNlbnR9JTsiPjwvZGl2PmApOwogICAgICB9CiAgICAgIGNvbnN0IHJvd3MgPSBNYXRoLmNlaWwoZ3JpZEhlaWdodCAvIGNlbGxQbHVzTWFyZ2luWSk7CiAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8PSByb3dzOyByb3crKykgewogICAgICAgIGNvbnN0IHRvcCA9IHJvdyAqIGNlbGxQbHVzTWFyZ2luWTsKICAgICAgICBob3Jpem9udGFsLnB1c2goYjJgPGRpdiBjbGFzcz0iZ3JpZC1saW5lLWhvcml6b250YWwiIHN0eWxlPSJ0b3A6ICR7dG9wfXB4OyI+PC9kaXY+YCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJncmlkLWxpbmVzIj4KICAgICAgICAke3ZlcnRpY2FsfQogICAgICAgICR7aG9yaXpvbnRhbH0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyV2lkZ2V0KHdpZGdldCwgbWV0cmljcywgbWFyZ2lucywgcHJldmlld01hcCkgewogICAgICBjb25zdCBpc0RyYWdnaW5nID0gdGhpcy5kcmFnU3RhdGU/LndpZGdldElkID09PSB3aWRnZXQuaWQ7CiAgICAgIGNvbnN0IGlzUmVzaXppbmcgPSB0aGlzLnJlc2l6ZVN0YXRlPy53aWRnZXRJZCA9PT0gd2lkZ2V0LmlkOwogICAgICBjb25zdCBpc0xvY2tlZCA9IHdpZGdldC5sb2NrZWQgfHwgIXRoaXMuZWRpdGFibGU7CiAgICAgIGNvbnN0IHByZXZpZXdXaWRnZXQgPSBwcmV2aWV3TWFwPy5nZXQod2lkZ2V0LmlkKSA/PyBudWxsOwogICAgICBjb25zdCBsYXlvdXRGb3JSZW5kZXIgPSBpc0RyYWdnaW5nID8gd2lkZ2V0IDogcHJldmlld1dpZGdldCA/PyB3aWRnZXQ7CiAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmNvbXB1dGVXaWRnZXRSZWN0KGxheW91dEZvclJlbmRlciwgbWV0cmljcywgbWFyZ2lucyk7CiAgICAgIGNvbnN0IHNpZGVQcm9wZXJ0eSA9IHRoaXMucnRsID8gInJpZ2h0IiA6ICJsZWZ0IjsKICAgICAgY29uc3Qgc2lkZVZhbHVlID0gdGhpcy5weFRvUGVyY2VudChyZWN0LmxlZnQsIG1ldHJpY3MuY29udGFpbmVyV2lkdGgpOwogICAgICBjb25zdCB3aWR0aFBlcmNlbnQgPSB0aGlzLnB4VG9QZXJjZW50KHJlY3Qud2lkdGgsIG1ldHJpY3MuY29udGFpbmVyV2lkdGgpOwogICAgICBsZXQgdHJhbnNmb3JtMiA9ICIiOwogICAgICBpZiAoaXNEcmFnZ2luZyAmJiB0aGlzLmRyYWdTdGF0ZT8uY3VycmVudFBvaW50ZXIpIHsKICAgICAgICBjb25zdCBwb2ludGVyID0gdGhpcy5kcmFnU3RhdGUuY3VycmVudFBvaW50ZXI7CiAgICAgICAgY29uc3QgYm91bmRzID0gdGhpcy5jb250YWluZXJCb3VuZHMgPz8gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCB0cmFuc2xhdGVYID0gcG9pbnRlci5jbGllbnRYIC0gYm91bmRzLmxlZnQgLSB0aGlzLmRyYWdTdGF0ZS5vZmZzZXRYIC0gcmVjdC5sZWZ0OwogICAgICAgIGNvbnN0IHRyYW5zbGF0ZVkgPSBwb2ludGVyLmNsaWVudFkgLSBib3VuZHMudG9wIC0gdGhpcy5kcmFnU3RhdGUub2Zmc2V0WSAtIHJlY3QudG9wOwogICAgICAgIHRyYW5zZm9ybTIgPSBgdHJhbnNmb3JtOiB0cmFuc2xhdGUoJHt0cmFuc2xhdGVYfXB4LCAke3RyYW5zbGF0ZVl9cHgpO2A7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImdyaWQtd2lkZ2V0ICR7aXNEcmFnZ2luZyA/ICJkcmFnZ2luZyIgOiAiIn0gJHtpc1Jlc2l6aW5nID8gInJlc2l6aW5nIiA6ICIifSIKICAgICAgICBzdHlsZT0iCiAgICAgICAgICAke3NpZGVQcm9wZXJ0eX06ICR7c2lkZVZhbHVlfSU7CiAgICAgICAgICB0b3A6ICR7cmVjdC50b3B9cHg7CiAgICAgICAgICB3aWR0aDogJHt3aWR0aFBlcmNlbnR9JTsKICAgICAgICAgIGhlaWdodDogJHtyZWN0LmhlaWdodH1weDsKICAgICAgICAgICR7dHJhbnNmb3JtMn0KICAgICAgICAiCiAgICAgICAgZGF0YS13aWRnZXQtaWQ9JHt3aWRnZXQuaWR9CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJ3aWRnZXQtY29udGVudCI+CiAgICAgICAgICAke3dpZGdldC50aXRsZSA/IGIyYAogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0id2lkZ2V0LWhlYWRlciAke2lzTG9ja2VkID8gImxvY2tlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgIEBwb2ludGVyZG93bj0keyFpc0xvY2tlZCAmJiAhd2lkZ2V0Lm5vTW92ZSA/IChldnQpID0+IHRoaXMuc3RhcnREcmFnKGV2dCwgd2lkZ2V0KSA6IG51bGx9CiAgICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhldnQpID0+IHRoaXMuaGFuZGxlV2lkZ2V0Q29udGV4dE1lbnUoZXZ0LCB3aWRnZXQpfQogICAgICAgICAgICAgICAgICB0YWJpbmRleD0keyFpc0xvY2tlZCAmJiAhd2lkZ2V0Lm5vTW92ZSA/IDAgOiAtMX0KICAgICAgICAgICAgICAgICAgQGtleWRvd249JHsoZXZ0KSA9PiB0aGlzLmhhbmRsZUhlYWRlcktleWRvd24oZXZ0LCB3aWRnZXQpfQogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAke3dpZGdldC5pY29uID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0ke3dpZGdldC5pY29ufT48L2RlZXMtaWNvbj5gIDogbnVsbH0KICAgICAgICAgICAgICAgICAgJHt3aWRnZXQudGl0bGV9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogbnVsbH0KICAgICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1ib2R5ICR7d2lkZ2V0LnRpdGxlID8gImhhcy1oZWFkZXIiIDogIiJ9Ij4KICAgICAgICAgICAgJHt3aWRnZXQuY29udGVudH0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgJHshaXNMb2NrZWQgJiYgIXdpZGdldC5ub1Jlc2l6ZSA/IGIyYAogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0icmVzaXplLWhhbmRsZSByZXNpemUtaGFuZGxlLWUiCiAgICAgICAgICAgICAgICAgIEBwb2ludGVyZG93bj0keyhldnQpID0+IHRoaXMuc3RhcnRSZXNpemUoZXZ0LCB3aWRnZXQsICJlIil9CiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJyZXNpemUtaGFuZGxlIHJlc2l6ZS1oYW5kbGUtcyIKICAgICAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSR7KGV2dCkgPT4gdGhpcy5zdGFydFJlc2l6ZShldnQsIHdpZGdldCwgInMiKX0KICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9InJlc2l6ZS1oYW5kbGUgcmVzaXplLWhhbmRsZS1zZSIKICAgICAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSR7KGV2dCkgPT4gdGhpcy5zdGFydFJlc2l6ZShldnQsIHdpZGdldCwgInNlIil9CiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgYCA6IG51bGx9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlclBsYWNlaG9sZGVyKG1ldHJpY3MsIG1hcmdpbnMpIHsKICAgICAgaWYgKCF0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24pIHsKICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgfQogICAgICBjb25zdCByZWN0ID0gdGhpcy5jb21wdXRlV2lkZ2V0UmVjdCh0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24sIG1ldHJpY3MsIG1hcmdpbnMpOwogICAgICBjb25zdCBzaWRlUHJvcGVydHkgPSB0aGlzLnJ0bCA/ICJyaWdodCIgOiAibGVmdCI7CiAgICAgIGNvbnN0IHNpZGVWYWx1ZSA9IHRoaXMucHhUb1BlcmNlbnQocmVjdC5sZWZ0LCBtZXRyaWNzLmNvbnRhaW5lcldpZHRoKTsKICAgICAgY29uc3Qgd2lkdGhQZXJjZW50ID0gdGhpcy5weFRvUGVyY2VudChyZWN0LndpZHRoLCBtZXRyaWNzLmNvbnRhaW5lcldpZHRoKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImdyaWQtd2lkZ2V0IHBsYWNlaG9sZGVyIgogICAgICAgIHN0eWxlPSIKICAgICAgICAgICR7c2lkZVByb3BlcnR5fTogJHtzaWRlVmFsdWV9JTsKICAgICAgICAgIHRvcDogJHtyZWN0LnRvcH1weDsKICAgICAgICAgIHdpZHRoOiAke3dpZHRoUGVyY2VudH0lOwogICAgICAgICAgaGVpZ2h0OiAke3JlY3QuaGVpZ2h0fXB4OwogICAgICAgICIKICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1jb250ZW50Ij48L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgc3RhcnREcmFnKGV2ZW50LCB3aWRnZXQpIHsKICAgICAgaWYgKCF0aGlzLmVkaXRhYmxlIHx8IHdpZGdldC5ub01vdmUgfHwgd2lkZ2V0LmxvY2tlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29uc3Qgd2lkZ2V0RWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuY2xvc2VzdCgiLmdyaWQtd2lkZ2V0Iik7CiAgICAgIGlmICghd2lkZ2V0RWxlbWVudCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCB3aWRnZXRSZWN0ID0gd2lkZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgdGhpcy5jb250YWluZXJCb3VuZHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICB0aGlzLmVuc3VyZU1ldHJpY3MoKTsKICAgICAgdGhpcy5kcmFnU3RhdGUgPSB7CiAgICAgICAgd2lkZ2V0SWQ6IHdpZGdldC5pZCwKICAgICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCwKICAgICAgICBvZmZzZXRYOiBldmVudC5jbGllbnRYIC0gd2lkZ2V0UmVjdC5sZWZ0LAogICAgICAgIG9mZnNldFk6IGV2ZW50LmNsaWVudFkgLSB3aWRnZXRSZWN0LnRvcCwKICAgICAgICBzdGFydDogeyBpZDogd2lkZ2V0LmlkLCB4OiB3aWRnZXQueCwgeTogd2lkZ2V0LnksIHc6IHdpZGdldC53LCBoOiB3aWRnZXQuaCB9LAogICAgICAgIHByZXZpb3VzUG9zaXRpb246IHsgaWQ6IHdpZGdldC5pZCwgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCB3OiB3aWRnZXQudywgaDogd2lkZ2V0LmggfSwKICAgICAgICBjdXJyZW50UG9pbnRlcjogeyBjbGllbnRYOiBldmVudC5jbGllbnRYLCBjbGllbnRZOiBldmVudC5jbGllbnRZIH0sCiAgICAgICAgbGFzdFBsYWNlbWVudDogbnVsbAogICAgICB9OwogICAgICB0aGlzLmludGVyYWN0aW9uQWN0aXZlID0gdHJ1ZTsKICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIHRoaXMuaGFuZGxlRHJhZ01vdmUpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCB0aGlzLmhhbmRsZURyYWdFbmQpOwogICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSB7IGlkOiB3aWRnZXQuaWQsIHg6IHdpZGdldC54LCB5OiB3aWRnZXQueSwgdzogd2lkZ2V0LncsIGg6IHdpZGdldC5oIH07CiAgICB9CiAgICBoYW5kbGVEcmFnTW92ZSA9IChldmVudCkgPT4gewogICAgICBpZiAoIXRoaXMuZHJhZ1N0YXRlKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgbWV0cmljcyA9IHRoaXMuZW5zdXJlTWV0cmljcygpOwogICAgICBjb25zdCBhY3RpdmVXaWRnZXRzID0gdGhpcy53aWRnZXRzOwogICAgICBjb25zdCB3aWRnZXQgPSBhY3RpdmVXaWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHRoaXMuZHJhZ1N0YXRlLndpZGdldElkKTsKICAgICAgaWYgKCF3aWRnZXQpCiAgICAgICAgcmV0dXJuOwogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBwcmV2aW91c1Bvc2l0aW9uID0gdGhpcy5kcmFnU3RhdGUucHJldmlvdXNQb3NpdGlvbjsKICAgICAgY29uc3QgY29vcmRzID0gY29tcHV0ZUdyaWRDb29yZGluYXRlcyh7CiAgICAgICAgcG9pbnRlcjogeyBjbGllbnRYOiBldmVudC5jbGllbnRYLCBjbGllbnRZOiBldmVudC5jbGllbnRZIH0sCiAgICAgICAgY29udGFpbmVyUmVjdDogdGhpcy5jb250YWluZXJCb3VuZHMgPz8gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwKICAgICAgICBtZXRyaWNzLAogICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucywKICAgICAgICB3aWRnZXQsCiAgICAgICAgcnRsOiB0aGlzLnJ0bCwKICAgICAgICBkcmFnT2Zmc2V0WDogdGhpcy5kcmFnU3RhdGUub2Zmc2V0WCwKICAgICAgICBkcmFnT2Zmc2V0WTogdGhpcy5kcmFnU3RhdGUub2Zmc2V0WQogICAgICB9KTsKICAgICAgY29uc3QgcGxhY2VtZW50ID0gcmVzb2x2ZVdpZGdldFBsYWNlbWVudChhY3RpdmVXaWRnZXRzLCB3aWRnZXQuaWQsIHsgeDogY29vcmRzLngsIHk6IGNvb3Jkcy55IH0sIHRoaXMuY29sdW1ucywgcHJldmlvdXNQb3NpdGlvbik7CiAgICAgIGlmIChwbGFjZW1lbnQpIHsKICAgICAgICBjb25zdCB1cGRhdGVkV2lkZ2V0ID0gcGxhY2VtZW50LndpZGdldHMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gd2lkZ2V0LmlkKTsKICAgICAgICB0aGlzLmRyYWdTdGF0ZSA9IHsKICAgICAgICAgIC4uLnRoaXMuZHJhZ1N0YXRlLAogICAgICAgICAgY3VycmVudFBvaW50ZXI6IHsgY2xpZW50WDogZXZlbnQuY2xpZW50WCwgY2xpZW50WTogZXZlbnQuY2xpZW50WSB9LAogICAgICAgICAgbGFzdFBsYWNlbWVudDogcGxhY2VtZW50LAogICAgICAgICAgcHJldmlvdXNQb3NpdGlvbjogdXBkYXRlZFdpZGdldCA/IHsgaWQ6IHVwZGF0ZWRXaWRnZXQuaWQsIHg6IHVwZGF0ZWRXaWRnZXQueCwgeTogdXBkYXRlZFdpZGdldC55LCB3OiB1cGRhdGVkV2lkZ2V0LncsIGg6IHVwZGF0ZWRXaWRnZXQuaCB9IDogeyBpZDogd2lkZ2V0LmlkLCB4OiBjb29yZHMueCwgeTogY29vcmRzLnksIHc6IHdpZGdldC53LCBoOiB3aWRnZXQuaCB9CiAgICAgICAgfTsKICAgICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gcGxhY2VtZW50LndpZGdldHM7CiAgICAgICAgY29uc3QgcHJldmlld1dpZGdldCA9IHBsYWNlbWVudC53aWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHdpZGdldC5pZCk7CiAgICAgICAgaWYgKHByZXZpZXdXaWRnZXQpIHsKICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IHsKICAgICAgICAgICAgaWQ6IHByZXZpZXdXaWRnZXQuaWQsCiAgICAgICAgICAgIHg6IHByZXZpZXdXaWRnZXQueCwKICAgICAgICAgICAgeTogcHJldmlld1dpZGdldC55LAogICAgICAgICAgICB3OiBwcmV2aWV3V2lkZ2V0LncsCiAgICAgICAgICAgIGg6IHByZXZpZXdXaWRnZXQuaAogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uID0geyBpZDogd2lkZ2V0LmlkLCB4OiBjb29yZHMueCwgeTogY29vcmRzLnksIHc6IHdpZGdldC53LCBoOiB3aWRnZXQuaCB9OwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gbnVsbDsKICAgICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgICB9CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgfTsKICAgIGhhbmRsZURyYWdFbmQgPSAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgZHJhZ1N0YXRlID0gdGhpcy5kcmFnU3RhdGU7CiAgICAgIGlmICghZHJhZ1N0YXRlIHx8IGV2ZW50LnBvaW50ZXJJZCAhPT0gZHJhZ1N0YXRlLnBvaW50ZXJJZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBsYXlvdXRTb3VyY2UgPSB0aGlzLndpZGdldHM7CiAgICAgIHRoaXMucHJldmlld1dpZGdldHMgPSBudWxsOwogICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPz8gZHJhZ1N0YXRlLnN0YXJ0OwogICAgICBjb25zdCBwbGFjZW1lbnQgPSByZXNvbHZlV2lkZ2V0UGxhY2VtZW50KGxheW91dFNvdXJjZSwgZHJhZ1N0YXRlLndpZGdldElkLCB7IHg6IHRhcmdldC54LCB5OiB0YXJnZXQueSB9LCB0aGlzLmNvbHVtbnMsIGRyYWdTdGF0ZS5wcmV2aW91c1Bvc2l0aW9uKTsKICAgICAgaWYgKHBsYWNlbWVudCkgewogICAgICAgIGNvbnN0IGZpbmFsV2lkZ2V0ID0gcGxhY2VtZW50LndpZGdldHMuZmluZCgodzMpID0+IHczLmlkID09PSBkcmFnU3RhdGUud2lkZ2V0SWQpOwogICAgICAgIGlmIChmaW5hbFdpZGdldCkgewogICAgICAgICAgY29uc3QgaGFzT3ZlcmxhcCA9IHBsYWNlbWVudC53aWRnZXRzLnNvbWUoKHczKSA9PiB7CiAgICAgICAgICAgIGlmICh3My5pZCA9PT0gZHJhZ1N0YXRlLndpZGdldElkKQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgcmV0dXJuIGZpbmFsV2lkZ2V0LnggPCB3My54ICsgdzMudyAmJiBmaW5hbFdpZGdldC54ICsgZmluYWxXaWRnZXQudyA+IHczLnggJiYgZmluYWxXaWRnZXQueSA8IHczLnkgKyB3My5oICYmIGZpbmFsV2lkZ2V0LnkgKyBmaW5hbFdpZGdldC5oID4gdzMueTsKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFoYXNPdmVybGFwKSB7CiAgICAgICAgICAgIHRoaXMuY29tbWl0UGxhY2VtZW50KHBsYWNlbWVudCwgZHJhZ1N0YXRlLndpZGdldElkLCAid2lkZ2V0LW1vdmUiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMud2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSBkcmFnU3RhdGUud2lkZ2V0SWQgPyB7IC4uLndpZGdldCwgeDogZHJhZ1N0YXRlLnN0YXJ0LngsIHk6IGRyYWdTdGF0ZS5zdGFydC55IH0gOiB3aWRnZXQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gZHJhZ1N0YXRlLndpZGdldElkID8geyAuLi53aWRnZXQsIHg6IGRyYWdTdGF0ZS5zdGFydC54LCB5OiBkcmFnU3RhdGUuc3RhcnQueSB9IDogd2lkZ2V0KTsKICAgICAgfQogICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgICB0aGlzLmRyYWdTdGF0ZSA9IG51bGw7CiAgICAgIHRoaXMuaW50ZXJhY3Rpb25BY3RpdmUgPSBmYWxzZTsKICAgICAgdGhpcy5yZWxlYXNlUG9pbnRlckV2ZW50cygpOwogICAgfTsKICAgIHN0YXJ0UmVzaXplKGV2ZW50LCB3aWRnZXQsIGhhbmRsZXIyKSB7CiAgICAgIGlmICghdGhpcy5lZGl0YWJsZSB8fCB3aWRnZXQubm9SZXNpemUgfHwgd2lkZ2V0LmxvY2tlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgdGhpcy5lbnN1cmVNZXRyaWNzKCk7CiAgICAgIHRoaXMucmVzaXplU3RhdGUgPSB7CiAgICAgICAgd2lkZ2V0SWQ6IHdpZGdldC5pZCwKICAgICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCwKICAgICAgICBoYW5kbGVyOiBoYW5kbGVyMiwKICAgICAgICBzdGFydFBvaW50ZXI6IHsgY2xpZW50WDogZXZlbnQuY2xpZW50WCwgY2xpZW50WTogZXZlbnQuY2xpZW50WSB9LAogICAgICAgIHN0YXJ0OiB7IGlkOiB3aWRnZXQuaWQsIHg6IHdpZGdldC54LCB5OiB3aWRnZXQueSwgdzogd2lkZ2V0LncsIGg6IHdpZGdldC5oIH0sCiAgICAgICAgc3RhcnRXaWR0aDogd2lkZ2V0LncsCiAgICAgICAgc3RhcnRIZWlnaHQ6IHdpZGdldC5oLAogICAgICAgIGxhc3RQbGFjZW1lbnQ6IG51bGwKICAgICAgfTsKICAgICAgdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZSA9IHRydWU7CiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCB0aGlzLmhhbmRsZVJlc2l6ZU1vdmUpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCB0aGlzLmhhbmRsZVJlc2l6ZUVuZCk7CiAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IHsgaWQ6IHdpZGdldC5pZCwgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCB3OiB3aWRnZXQudywgaDogd2lkZ2V0LmggfTsKICAgIH0KICAgIGhhbmRsZVJlc2l6ZU1vdmUgPSAoZXZlbnQpID0+IHsKICAgICAgaWYgKCF0aGlzLnJlc2l6ZVN0YXRlKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgbWV0cmljcyA9IHRoaXMuZW5zdXJlTWV0cmljcygpOwogICAgICBjb25zdCBhY3RpdmVXaWRnZXRzID0gdGhpcy53aWRnZXRzOwogICAgICBjb25zdCB3aWRnZXQgPSBhY3RpdmVXaWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHRoaXMucmVzaXplU3RhdGUud2lkZ2V0SWQpOwogICAgICBpZiAoIXdpZGdldCkKICAgICAgICByZXR1cm47CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IG5leHRTaXplID0gY29tcHV0ZVJlc2l6ZURpbWVuc2lvbnMoewogICAgICAgIHBvaW50ZXI6IHsgY2xpZW50WDogZXZlbnQuY2xpZW50WCwgY2xpZW50WTogZXZlbnQuY2xpZW50WSB9LAogICAgICAgIGNvbnRhaW5lclJlY3Q6IHRoaXMuY29udGFpbmVyQm91bmRzID8/IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksCiAgICAgICAgbWV0cmljcywKICAgICAgICBzdGFydFdpZHRoOiB0aGlzLnJlc2l6ZVN0YXRlLnN0YXJ0V2lkdGgsCiAgICAgICAgc3RhcnRIZWlnaHQ6IHRoaXMucmVzaXplU3RhdGUuc3RhcnRIZWlnaHQsCiAgICAgICAgc3RhcnRQb2ludGVyOiB0aGlzLnJlc2l6ZVN0YXRlLnN0YXJ0UG9pbnRlciwKICAgICAgICBoYW5kbGVyOiB0aGlzLnJlc2l6ZVN0YXRlLmhhbmRsZXIsCiAgICAgICAgd2lkZ2V0LAogICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucwogICAgICB9KTsKICAgICAgY29uc3QgcGxhY2VtZW50ID0gcmVzb2x2ZVdpZGdldFBsYWNlbWVudChhY3RpdmVXaWRnZXRzLCB3aWRnZXQuaWQsIHsgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCB3OiBuZXh0U2l6ZS53aWR0aCwgaDogbmV4dFNpemUuaGVpZ2h0IH0sIHRoaXMuY29sdW1ucywgdGhpcy5yZXNpemVTdGF0ZS5zdGFydCk7CiAgICAgIGlmIChwbGFjZW1lbnQpIHsKICAgICAgICB0aGlzLnJlc2l6ZVN0YXRlID0geyAuLi50aGlzLnJlc2l6ZVN0YXRlLCBsYXN0UGxhY2VtZW50OiBwbGFjZW1lbnQgfTsKICAgICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gcGxhY2VtZW50LndpZGdldHM7CiAgICAgICAgY29uc3QgcHJldmlld1dpZGdldCA9IHBsYWNlbWVudC53aWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHdpZGdldC5pZCk7CiAgICAgICAgaWYgKHByZXZpZXdXaWRnZXQpIHsKICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IHsKICAgICAgICAgICAgaWQ6IHByZXZpZXdXaWRnZXQuaWQsCiAgICAgICAgICAgIHg6IHByZXZpZXdXaWRnZXQueCwKICAgICAgICAgICAgeTogcHJldmlld1dpZGdldC55LAogICAgICAgICAgICB3OiBwcmV2aWV3V2lkZ2V0LncsCiAgICAgICAgICAgIGg6IHByZXZpZXdXaWRnZXQuaAogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uID0gewogICAgICAgICAgICBpZDogd2lkZ2V0LmlkLAogICAgICAgICAgICB4OiB3aWRnZXQueCwKICAgICAgICAgICAgeTogd2lkZ2V0LnksCiAgICAgICAgICAgIHc6IG5leHRTaXplLndpZHRoLAogICAgICAgICAgICBoOiBuZXh0U2l6ZS5oZWlnaHQKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMucHJldmlld1dpZGdldHMgPSBudWxsOwogICAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9OwogICAgaGFuZGxlUmVzaXplRW5kID0gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHJlc2l6ZVN0YXRlID0gdGhpcy5yZXNpemVTdGF0ZTsKICAgICAgaWYgKCFyZXNpemVTdGF0ZSB8fCBldmVudC5wb2ludGVySWQgIT09IHJlc2l6ZVN0YXRlLnBvaW50ZXJJZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBsYXlvdXRTb3VyY2UgPSB0aGlzLndpZGdldHM7CiAgICAgIHRoaXMucHJldmlld1dpZGdldHMgPSBudWxsOwogICAgICBjb25zdCBwbGFjZW1lbnQgPSByZXNpemVTdGF0ZS5sYXN0UGxhY2VtZW50ID8/IHJlc29sdmVXaWRnZXRQbGFjZW1lbnQobGF5b3V0U291cmNlLCByZXNpemVTdGF0ZS53aWRnZXRJZCwgewogICAgICAgIHg6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8ueCA/PyByZXNpemVTdGF0ZS5zdGFydC54LAogICAgICAgIHk6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8ueSA/PyByZXNpemVTdGF0ZS5zdGFydC55LAogICAgICAgIHc6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8udyA/PyByZXNpemVTdGF0ZS5zdGFydC53LAogICAgICAgIGg6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8uaCA/PyByZXNpemVTdGF0ZS5zdGFydC5oCiAgICAgIH0sIHRoaXMuY29sdW1ucywgcmVzaXplU3RhdGUuc3RhcnQpOwogICAgICBpZiAocGxhY2VtZW50KSB7CiAgICAgICAgdGhpcy5jb21taXRQbGFjZW1lbnQocGxhY2VtZW50LCByZXNpemVTdGF0ZS53aWRnZXRJZCwgIndpZGdldC1yZXNpemUiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gcmVzaXplU3RhdGUud2lkZ2V0SWQgPyB7IC4uLndpZGdldCwgdzogcmVzaXplU3RhdGUuc3RhcnQudywgaDogcmVzaXplU3RhdGUuc3RhcnQuaCB9IDogd2lkZ2V0KTsKICAgICAgfQogICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgICB0aGlzLnJlc2l6ZVN0YXRlID0gbnVsbDsKICAgICAgdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZSA9IGZhbHNlOwogICAgICB0aGlzLnJlbGVhc2VQb2ludGVyRXZlbnRzKCk7CiAgICB9OwogICAgaGFuZGxlSGVhZGVyS2V5ZG93bihldmVudCwgd2lkZ2V0KSB7CiAgICAgIGlmICghdGhpcy5lZGl0YWJsZSB8fCB3aWRnZXQubm9Nb3ZlIHx8IHdpZGdldC5sb2NrZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qga2V5MiA9IGV2ZW50LmtleTsKICAgICAgY29uc3QgaXNSZXNpemUgPSBldmVudC5zaGlmdEtleTsKICAgICAgbGV0IHBsYWNlbWVudCA9IG51bGw7CiAgICAgIGlmIChpc1Jlc2l6ZSAmJiBbIkFycm93TGVmdCIsICJBcnJvd1JpZ2h0IiwgIkFycm93VXAiLCAiQXJyb3dEb3duIl0uaW5jbHVkZXMoa2V5MikpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IGRlbHRhMiA9IGtleTIgPT09ICJBcnJvd1JpZ2h0IiB8fCBrZXkyID09PSAiQXJyb3dEb3duIiA/IDEgOiAtMTsKICAgICAgICBpZiAoa2V5MiA9PT0gIkFycm93TGVmdCIgfHwga2V5MiA9PT0gIkFycm93UmlnaHQiKSB7CiAgICAgICAgICBjb25zdCBtYXhXaWR0aCA9IHdpZGdldC5tYXhXID8/IHRoaXMuY29sdW1ucyAtIHdpZGdldC54OwogICAgICAgICAgY29uc3QgbmV4dFdpZHRoID0gTWF0aC5tYXgod2lkZ2V0Lm1pblcgPz8gMSwgTWF0aC5taW4obWF4V2lkdGgsIHdpZGdldC53ICsgZGVsdGEyKSk7CiAgICAgICAgICBwbGFjZW1lbnQgPSByZXNvbHZlV2lkZ2V0UGxhY2VtZW50KHRoaXMud2lkZ2V0cywgd2lkZ2V0LmlkLCB7IHg6IHdpZGdldC54LCB5OiB3aWRnZXQueSwgdzogbmV4dFdpZHRoLCBoOiB3aWRnZXQuaCB9LCB0aGlzLmNvbHVtbnMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSB3aWRnZXQubWF4SCA/PyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgICAgICAgICBjb25zdCBuZXh0SGVpZ2h0ID0gTWF0aC5tYXgod2lkZ2V0Lm1pbkggPz8gMSwgTWF0aC5taW4obWF4SGVpZ2h0LCB3aWRnZXQuaCArIGRlbHRhMikpOwogICAgICAgICAgcGxhY2VtZW50ID0gcmVzb2x2ZVdpZGdldFBsYWNlbWVudCh0aGlzLndpZGdldHMsIHdpZGdldC5pZCwgeyB4OiB3aWRnZXQueCwgeTogd2lkZ2V0LnksIHc6IHdpZGdldC53LCBoOiBuZXh0SGVpZ2h0IH0sIHRoaXMuY29sdW1ucyk7CiAgICAgICAgfQogICAgICAgIGlmIChwbGFjZW1lbnQpIHsKICAgICAgICAgIHRoaXMuY29tbWl0UGxhY2VtZW50KHBsYWNlbWVudCwgd2lkZ2V0LmlkLCAid2lkZ2V0LXJlc2l6ZSIpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgbW92ZU1hcCA9IHsKICAgICAgICBBcnJvd0xlZnQ6IHsgZHg6IC0xLCBkeTogMCB9LAogICAgICAgIEFycm93UmlnaHQ6IHsgZHg6IDEsIGR5OiAwIH0sCiAgICAgICAgQXJyb3dVcDogeyBkeDogMCwgZHk6IC0xIH0sCiAgICAgICAgQXJyb3dEb3duOiB7IGR4OiAwLCBkeTogMSB9CiAgICAgIH07CiAgICAgIGNvbnN0IGRlbHRhID0gbW92ZU1hcFtrZXkyXTsKICAgICAgaWYgKCFkZWx0YSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCB0YXJnZXRYID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5jb2x1bW5zIC0gd2lkZ2V0LncsIHdpZGdldC54ICsgZGVsdGEuZHgpKTsKICAgICAgY29uc3QgdGFyZ2V0WSA9IE1hdGgubWF4KDAsIHdpZGdldC55ICsgZGVsdGEuZHkpOwogICAgICBwbGFjZW1lbnQgPSByZXNvbHZlV2lkZ2V0UGxhY2VtZW50KHRoaXMud2lkZ2V0cywgd2lkZ2V0LmlkLCB7IHg6IHRhcmdldFgsIHk6IHRhcmdldFkgfSwgdGhpcy5jb2x1bW5zKTsKICAgICAgaWYgKHBsYWNlbWVudCkgewogICAgICAgIHRoaXMuY29tbWl0UGxhY2VtZW50KHBsYWNlbWVudCwgd2lkZ2V0LmlkLCAid2lkZ2V0LW1vdmUiKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlV2lkZ2V0Q29udGV4dE1lbnUoZXZlbnQsIHdpZGdldCkgewogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgb3BlbldpZGdldENvbnRleHRNZW51KHsgd2lkZ2V0LCBob3N0OiB0aGlzLCBldmVudCB9KTsKICAgIH0KICAgIGNvbW1pdFBsYWNlbWVudChyZXN1bHQsIHdpZGdldElkLCB0eXBlNSkgewogICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gbnVsbDsKICAgICAgdGhpcy53aWRnZXRzID0gcmVzdWx0LndpZGdldHM7CiAgICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLndpZGdldHMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gd2lkZ2V0SWQpOwogICAgICBpZiAoc3ViamVjdCkgewogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQodHlwZTUsIHsKICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICB3aWRnZXQ6IHN1YmplY3QsCiAgICAgICAgICAgIGRpc3BsYWNlZDogcmVzdWx0Lm1vdmVkV2lkZ2V0cy5maWx0ZXIoKGlkKSA9PiBpZCAhPT0gd2lkZ2V0SWQpLAogICAgICAgICAgICBzd2FwcGVkV2l0aDogcmVzdWx0LnN3YXBwZWRXaXRoCiAgICAgICAgICB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9CiAgICB9CiAgICByZW1vdmVXaWRnZXQod2lkZ2V0SWQpIHsKICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy53aWRnZXRzLmZpbmQoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSB3aWRnZXRJZCk7CiAgICAgIGlmICghdGFyZ2V0KQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy53aWRnZXRzID0gdGhpcy53aWRnZXRzLmZpbHRlcigod2lkZ2V0KSA9PiB3aWRnZXQuaWQgIT09IHdpZGdldElkKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgid2lkZ2V0LXJlbW92ZSIsIHsKICAgICAgICBkZXRhaWw6IHsgd2lkZ2V0OiB0YXJnZXQgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIHVwZGF0ZVdpZGdldCh3aWRnZXRJZCwgdXBkYXRlcykgewogICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gd2lkZ2V0SWQgPyB7IC4uLndpZGdldCwgLi4udXBkYXRlcyB9IDogd2lkZ2V0KTsKICAgIH0KICAgIGdldExheW91dCgpIHsKICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0cy5tYXAoKHsgaWQsIHg6IHgzLCB5OiB5NSwgdzogdzMsIGg6IGg5IH0pID0+ICh7IGlkLCB4OiB4MywgeTogeTUsIHc6IHczLCBoOiBoOSB9KSk7CiAgICB9CiAgICBzZXRMYXlvdXQobGF5b3V0KSB7CiAgICAgIHRoaXMud2lkZ2V0cyA9IGFwcGx5TGF5b3V0KHRoaXMud2lkZ2V0cywgbGF5b3V0KTsKICAgIH0KICAgIGxvY2tHcmlkKCkgewogICAgICB0aGlzLmVkaXRhYmxlID0gZmFsc2U7CiAgICB9CiAgICB1bmxvY2tHcmlkKCkgewogICAgICB0aGlzLmVkaXRhYmxlID0gdHJ1ZTsKICAgIH0KICAgIGFkZFdpZGdldCh3aWRnZXQsIGF1dG9Qb3NpdGlvbiA9IGZhbHNlKSB7CiAgICAgIGNvbnN0IG5leHRXaWRnZXQgPSB7IC4uLndpZGdldCB9OwogICAgICBpZiAoYXV0b1Bvc2l0aW9uIHx8IG5leHRXaWRnZXQuYXV0b1Bvc2l0aW9uKSB7CiAgICAgICAgY29uc3QgcG9zaXRpb24zID0gZmluZEF2YWlsYWJsZVBvc2l0aW9uKHRoaXMud2lkZ2V0cywgbmV4dFdpZGdldC53LCBuZXh0V2lkZ2V0LmgsIHRoaXMuY29sdW1ucyk7CiAgICAgICAgbmV4dFdpZGdldC54ID0gcG9zaXRpb24zLng7CiAgICAgICAgbmV4dFdpZGdldC55ID0gcG9zaXRpb24zLnk7CiAgICAgIH0KICAgICAgdGhpcy53aWRnZXRzID0gWy4uLnRoaXMud2lkZ2V0cywgbmV4dFdpZGdldF07CiAgICB9CiAgICBjb21wYWN0KGRpcmVjdGlvbiA9ICJ2ZXJ0aWNhbCIpIHsKICAgICAgY29uc3QgbmV4dFdpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+ICh7IC4uLndpZGdldCB9KSk7CiAgICAgIGNvbXBhY3RMYXlvdXQobmV4dFdpZGdldHMsIGRpcmVjdGlvbik7CiAgICAgIHRoaXMud2lkZ2V0cyA9IG5leHRXaWRnZXRzOwogICAgfQogICAgYXBwbHlCcmVha3BvaW50TGF5b3V0KGJyZWFrcG9pbnQpIHsKICAgICAgdGhpcy5hY3RpdmVCcmVha3BvaW50ID0gYnJlYWtwb2ludDsKICAgICAgY29uc3QgbGF5b3V0ID0gdGhpcy5sYXlvdXRzPy5bYnJlYWtwb2ludF07CiAgICAgIGlmIChsYXlvdXQpIHsKICAgICAgICB0aGlzLnNldExheW91dChsYXlvdXQpOwogICAgICB9CiAgICB9CiAgICBub3RpZnlMYXlvdXRDaGFuZ2UoKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxheW91dC1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IGxheW91dDogdGhpcy5nZXRMYXlvdXQoKSB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgZW5zdXJlTWV0cmljcygpIHsKICAgICAgaWYgKCF0aGlzLm1ldHJpY3MpIHsKICAgICAgICB0aGlzLmNvbXB1dGVNZXRyaWNzKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMubWV0cmljczsKICAgIH0KICAgIGNvbXB1dGVNZXRyaWNzKCkgewogICAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICB0aGlzLmNvbnRhaW5lckJvdW5kcyA9IGJvdW5kczsKICAgICAgY29uc3QgbWFyZ2lucyA9IHJlc29sdmVNYXJnaW5zKHRoaXMubWFyZ2luKTsKICAgICAgdGhpcy5yZXNvbHZlZE1hcmdpbnMgPSBtYXJnaW5zOwogICAgICB0aGlzLm1ldHJpY3MgPSBjYWxjdWxhdGVDZWxsTWV0cmljcyhib3VuZHMud2lkdGgsIHRoaXMuY29sdW1ucywgbWFyZ2lucywgdGhpcy5jZWxsSGVpZ2h0LCB0aGlzLmNlbGxIZWlnaHRVbml0KTsKICAgIH0KICAgIG9ic2VydmVSZXNpemUoKSB7CiAgICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7CiAgICAgICAgdGhpcy5jb21wdXRlTWV0cmljcygpOwogICAgICB9KTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMpOwogICAgfQogICAgZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkgewogICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSB2b2lkIDA7CiAgICB9CiAgICByZWxlYXNlUG9pbnRlckV2ZW50cygpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCB0aGlzLmhhbmRsZURyYWdNb3ZlKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwgdGhpcy5oYW5kbGVEcmFnRW5kKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCB0aGlzLmhhbmRsZVJlc2l6ZU1vdmUpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCB0aGlzLmhhbmRsZVJlc2l6ZUVuZCk7CiAgICB9CiAgICBweFRvUGVyY2VudCh2YWx1ZTIsIGNvbnRhaW5lcikgewogICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICByZXR1cm4gMDsKICAgICAgcmV0dXJuIE51bWJlcigodmFsdWUyIC8gY29udGFpbmVyICogMTAwKS50b0ZpeGVkKDQpKTsKICAgIH0KICAgIGNvbXB1dGVXaWRnZXRSZWN0KHdpZGdldCwgbWV0cmljcywgbWFyZ2lucykgewogICAgICBjb25zdCBjZWxsV2lkdGggPSBtZXRyaWNzLmNlbGxXaWR0aFB4OwogICAgICBjb25zdCBjZWxsSGVpZ2h0ID0gbWV0cmljcy5jZWxsSGVpZ2h0UHg7CiAgICAgIGNvbnN0IGxlZnQgPSB3aWRnZXQueCAqIChjZWxsV2lkdGggKyBtYXJnaW5zLmhvcml6b250YWwpICsgbWFyZ2lucy5ob3Jpem9udGFsOwogICAgICBjb25zdCB0b3AgPSB3aWRnZXQueSAqIChjZWxsSGVpZ2h0ICsgbWFyZ2lucy52ZXJ0aWNhbCkgKyBtYXJnaW5zLnZlcnRpY2FsOwogICAgICBjb25zdCB3aWR0aCA9IHdpZGdldC53ICogY2VsbFdpZHRoICsgTWF0aC5tYXgoMCwgd2lkZ2V0LncgLSAxKSAqIG1hcmdpbnMuaG9yaXpvbnRhbDsKICAgICAgY29uc3QgaGVpZ2h0ID0gd2lkZ2V0LmggKiBjZWxsSGVpZ2h0ICsgTWF0aC5tYXgoMCwgd2lkZ2V0LmggLSAxKSAqIG1hcmdpbnMudmVydGljYWw7CiAgICAgIHJldHVybiB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9OwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3NihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0Rhc2hib2FyZGdyaWQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1oZWFkaW5nL2RlZXMtaGVhZGluZy5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CmZ1bmN0aW9uIGRlbW9GdW5jNDcoKSB7CiAgcmV0dXJuIGIyYAogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iMSI+VGhpcyBpcyBhIEgxIGhlYWRpbmc8L2RlZXMtaGVhZGluZz4KICAgIDxkZWVzLWhlYWRpbmcgbGV2ZWw9IjIiPlRoaXMgaXMgYSBIMiBoZWFkaW5nPC9kZWVzLWhlYWRpbmc+CiAgICA8ZGVlcy1oZWFkaW5nIGxldmVsPSIzIj5UaGlzIGlzIGEgSDMgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iNCI+VGhpcyBpcyBhIEg0IGhlYWRpbmc8L2RlZXMtaGVhZGluZz4KICAgIDxkZWVzLWhlYWRpbmcgbGV2ZWw9IjUiPlRoaXMgaXMgYSBINSBoZWFkaW5nPC9kZWVzLWhlYWRpbmc+CiAgICA8ZGVlcy1oZWFkaW5nIGxldmVsPSI2Ij5UaGlzIGlzIGEgSDYgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iaHIiPlRoaXMgaXMgYW4gaHIgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iaHItc21hbGwiPlRoaXMgaXMgYW4gaHIgc21hbGwgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogIGA7Cn0KCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1oZWFkaW5nL2RlZXMtaGVhZGluZy5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU3NiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNzcgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNIZWFkaW5nID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1oZWFkaW5nIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbGV2ZWxfZGVjb3JhdG9yczsKICBsZXQgX2xldmVsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGV2ZWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0hlYWRpbmcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbGV2ZWxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTc2KHRoaXMsIG51bGwsIF9sZXZlbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsZXZlbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGV2ZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGV2ZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxldmVsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xldmVsX2luaXRpYWxpemVycywgX2xldmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSGVhZGluZzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gZGVtbwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ3OwogICAgI2xldmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczc3KHRoaXMsIF9sZXZlbF9pbml0aWFsaXplcnMsICIxIik7CiAgICAvLyBwcm9wZXJ0aWVzCiAgICAvKioKICAgICAqIEhlYWRpbmcgbGV2ZWw6IDEtNiBmb3IgaDEtaDYsIG9yICdocicgZm9yIGhvcml6b250YWwgcnVsZSBzdHlsZQogICAgICovCiAgICBnZXQgbGV2ZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsZXZlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxldmVsKHZhbHVlMikgewogICAgICB0aGlzLiNsZXZlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gU1RBVElDIFNUWUxFUwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIC8qIEhlYWRpbmcgc3R5bGVzICovCiAgICAgIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYgewogICAgICAgIG1hcmdpbjogMTZweCAwIDhweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMCIsICIjZmZmIil9OwogICAgICB9CiAgICAgIGgxIHsgZm9udC1zaXplOiAzMnB4OyBmb250LWZhbWlseTogJHtjc3NDYWxTYW5zRm9udEZhbWlseX07IGxldHRlci1zcGFjaW5nOiAwLjAyNWVtO30KICAgICAgaDIgeyBmb250LXNpemU6IDI4cHg7IH0KICAgICAgaDMgeyBmb250LXNpemU6IDI0cHg7IH0KICAgICAgaDQgeyBmb250LXNpemU6IDIwcHg7IH0KICAgICAgaDUgeyBmb250LXNpemU6IDE2cHg7IH0KICAgICAgaDYgeyBmb250LXNpemU6IDE0cHg7IH0KICAgICAgLyogSG9yaXpvbnRhbCBydWxlIHN0eWxlIGhlYWRpbmcgKi8KICAgICAgLmhlYWRpbmctaHIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luOiAxNnB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwIiwgIiNmZmYiKX07CiAgICAgIH0KICAgICAgLyogRmFkZSBsaW5lcyB0b3dhcmQgYW5kIGF3YXkgZnJvbSB0ZXh0IGZvciBociBzdHlsZSAqLwogICAgICAuaGVhZGluZy1ocjo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIC8qIGZhZGUgaW4gdG93YXJkIGNlbnRlciAqLwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50LCAjY2NjKSIsICJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50LCAjMzMzKSIpfTsKICAgICAgICBtYXJnaW46IDAgOHB4OwogICAgICB9CiAgICAgIC5oZWFkaW5nLWhyOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgZmxleDogMTsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICAvKiBmYWRlIG91dCBhd2F5IGZyb20gY2VudGVyICovCiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2NjYywgdHJhbnNwYXJlbnQpIiwgImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzMzMywgdHJhbnNwYXJlbnQpIil9OwogICAgICAgIG1hcmdpbjogMCA4cHg7CiAgICAgIH0KICAgICAgLyogU21hbGwgaHIgdmFyaWFudCB3aXRoIHJlZHVjZWQgbWFyZ2lucyAqLwogICAgICAuaGVhZGluZy1oci5oZWFkaW5nLWhyLXNtYWxsIHsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQogICAgICAuaGVhZGluZy1oci5oZWFkaW5nLWhyLXNtYWxsOjpiZWZvcmUsCiAgICAgIC5oZWFkaW5nLWhyLmhlYWRpbmctaHItc21hbGw6OmFmdGVyIHsKICAgICAgICBtYXJnaW46IDAgOHB4OwogICAgICB9CiAgICBgCiAgICBdOwogICAgLy8gSU5TVEFOQ0UKICAgIHJlbmRlcigpIHsKICAgICAgc3dpdGNoICh0aGlzLmxldmVsKSB7CiAgICAgICAgY2FzZSAiMSI6CiAgICAgICAgICByZXR1cm4gYjJgPGgxPjxzbG90Pjwvc2xvdD48L2gxPmA7CiAgICAgICAgY2FzZSAiMiI6CiAgICAgICAgICByZXR1cm4gYjJgPGgyPjxzbG90Pjwvc2xvdD48L2gyPmA7CiAgICAgICAgY2FzZSAiMyI6CiAgICAgICAgICByZXR1cm4gYjJgPGgzPjxzbG90Pjwvc2xvdD48L2gzPmA7CiAgICAgICAgY2FzZSAiNCI6CiAgICAgICAgICByZXR1cm4gYjJgPGg0PjxzbG90Pjwvc2xvdD48L2g0PmA7CiAgICAgICAgY2FzZSAiNSI6CiAgICAgICAgICByZXR1cm4gYjJgPGg1PjxzbG90Pjwvc2xvdD48L2g1PmA7CiAgICAgICAgY2FzZSAiNiI6CiAgICAgICAgICByZXR1cm4gYjJgPGg2PjxzbG90Pjwvc2xvdD48L2g2PmA7CiAgICAgICAgY2FzZSAiaHIiOgogICAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9ImhlYWRpbmctaHIiPjxzbG90Pjwvc2xvdD48L2Rpdj5gOwogICAgICAgIGNhc2UgImhyLXNtYWxsIjoKICAgICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJoZWFkaW5nLWhyIGhlYWRpbmctaHItc21hbGwiPjxzbG90Pjwvc2xvdD48L2Rpdj5gOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gYjJgPGgxPjxzbG90Pjwvc2xvdD48L2gxPmA7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczc3KHRoaXMsIF9sZXZlbF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczc3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSGVhZGluZzIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWhpbnQvZGVlcy1oaW50LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNDggPSAoKSA9PiBiMmAKICA8ZGVlcy1oaW50PjwvZGVlcy1oaW50PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWhpbnQvZGVlcy1oaW50LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTc3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3OCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0hpbnQgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWhpbnQiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF90eXBlX2RlY29yYXRvcnM7CiAgbGV0IF90eXBlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdHlwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSGludDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90eXBlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfX2VzRGVjb3JhdGU3Nyh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSGludDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ4OwogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzgodGhpcywgX3R5cGVfaW5pdGlhbGl6ZXJzLCAiaW5mbyIpOwogICAgZ2V0IHR5cGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdHlwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzgodGhpcywgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBkb210b29sc19lbGVtZW50YmFzaWNfZXhwb3J0cy5zZXR1cCgpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFt0aGVtZURlZmF1bHRTdHlsZXMsIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgIGBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgIDxkaXYgY2xhc3M9Im1haW5ib3giPjwvZGl2PiBgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3OChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0hpbnQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1pY29uL2luZGV4LmpzCmluaXRfZGVlc19pY29uKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtbW9iaWxlbmF2aWdhdGlvbi9kZWVzLW1vYmlsZW5hdmlnYXRpb24uanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNzggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczc5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzTW9iaWxlbmF2aWdhdGlvbiA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtbW9iaWxlbmF2aWdhdGlvbiIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2hlYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX21lbnVJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9iaWxlTmF2WkluZGV4X2RlY29yYXRvcnM7CiAgbGV0IF9tb2JpbGVOYXZaSW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tb2JpbGVOYXZaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc01vYmlsZW5hdmlnYXRpb24yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfaGVhZGluZ19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfbWVudUl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX21vYmlsZU5hdlpJbmRleF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU3OCh0aGlzLCBudWxsLCBfaGVhZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJoZWFkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoZWFkaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhlYWRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmhlYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaGVhZGluZ19pbml0aWFsaXplcnMsIF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzgodGhpcywgbnVsbCwgX21lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVJdGVtcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVJdGVtcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzgodGhpcywgbnVsbCwgX21vYmlsZU5hdlpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtb2JpbGVOYXZaSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1vYmlsZU5hdlpJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tb2JpbGVOYXZaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1vYmlsZU5hdlpJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tb2JpbGVOYXZaSW5kZXhfaW5pdGlhbGl6ZXJzLCBfbW9iaWxlTmF2WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzgobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzTW9iaWxlbmF2aWdhdGlvbjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYAogICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICAgICAgRGVlc01vYmlsZW5hdmlnYXRpb24yLmNyZWF0ZUFuZFNob3coWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEYXNoYm9hcmQiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6bGF5b3V0LWRhc2hib2FyZCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChkZWVzTW9iaWxlTmF2KSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJOYXZpZ2F0ZSB0byBkYXNoYm9hcmQiKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiUHJvZmlsZSIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp1c2VyIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKGRlZXNNb2JpbGVOYXYpID0+IHsKICAgICAgICAgICAgY29uc29sZS5sb2coIk5hdmlnYXRlIHRvIHByb2ZpbGUiKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiU2V0dGluZ3MiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6c2V0dGluZ3MiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoZGVlc01vYmlsZU5hdikgPT4gewogICAgICAgICAgICBjb25zb2xlLmxvZygiTmF2aWdhdGUgdG8gc2V0dGluZ3MiKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiSGVscCIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpoZWxwLWNpcmNsZSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChkZWVzTW9iaWxlTmF2KSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTaG93IGhlbHAiKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiU2lnbiBPdXQiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6bG9nLW91dCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChkZWVzTW9iaWxlTmF2KSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTaWduIG91dCIpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0pOwogICAgfX0+T3BlbiBNb2JpbGUgTmF2aWdhdGlvbjwvZGVlcy1idXR0b24+CiAgYDsKICAgIHN0YXRpYyBzaW5nbGV0b25SZWY7CiAgICBzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdyhtZW51SXRlbXNBcmcpIHsKICAgICAgaWYgKCF0aGlzLnNpbmdsZXRvblJlZikgewogICAgICAgIHRoaXMuc2luZ2xldG9uUmVmID0gbmV3IERlZXNNb2JpbGVuYXZpZ2F0aW9uMigpOwogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMuc2luZ2xldG9uUmVmKTsKICAgICAgICBhd2FpdCB0aGlzLnNpbmdsZXRvblJlZi5pbml0KCk7CiAgICAgIH0KICAgICAgdGhpcy5zaW5nbGV0b25SZWYubWVudUl0ZW1zID0gbWVudUl0ZW1zQXJnOwogICAgICBhd2FpdCB0aGlzLnNpbmdsZXRvblJlZi5yZWFkeURlZmVycmVkLnByb21pc2U7CiAgICAgIHRoaXMuc2luZ2xldG9uUmVmLnNob3coKTsKICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9uUmVmOwogICAgfQogICAgI2hlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzkodGhpcywgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzLCBgTWVudWApOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBoZWFkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhlYWRpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2hlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc5KHRoaXMsIF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3OSh0aGlzLCBfbWVudUl0ZW1zX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBtZW51SXRlbXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtZW51SXRlbXModmFsdWUyKSB7CiAgICAgIHRoaXMuI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21vYmlsZU5hdlpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzkodGhpcywgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzkodGhpcywgX21vYmlsZU5hdlpJbmRleF9pbml0aWFsaXplcnMsIDFlMykpOwogICAgZ2V0IG1vYmlsZU5hdlpJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21vYmlsZU5hdlpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1vYmlsZU5hdlpJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbW9iaWxlTmF2WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICByZWFkeURlZmVycmVkID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzkodGhpcywgX21vYmlsZU5hdlpJbmRleF9leHRyYUluaXRpYWxpemVycyksIGRpc3RfdHNfZXhwb3J0czI1LnBsdWdpbnMuc21hcnRwcm9taXNlLmRlZmVyKCkpOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICB9CiAgICAvKioKICAgICAqIGluaXRzIHRoZSBtb2JpbGUgbmF2aWdhdGlvbgogICAgICovCiAgICBhc3luYyBpbml0KCkgewogICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICB0aGlzLnJlYWR5RGVmZXJyZWQucmVzb2x2ZSgpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICB9CgogICAgICAubWFpbiB7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1heC13aWR0aDogMzIwcHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIHotaW5kZXg6IHZhcigtLXotaW5kZXgpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiLTIwcHggMCAyNXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjEpLCAtMTBweCAwIDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMDQpIiwgIi0yMHB4IDAgMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4zKSwgLTEwcHggMCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgLm1haW4uc2hvdyB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMHB4KTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICAubWVudS1jb250YWluZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAubWVudUl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbTphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtIGRlZXMtaWNvbiB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS10ZXh0IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAubWVudUl0ZW0tZGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICBtYXJnaW46IDhweCAxNnB4OwogICAgICB9CgogICAgICAvKiBNb2JpbGUgcmVzcG9uc2l2ZW5lc3MgKi8KICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDQwMHB4KSB7CiAgICAgICAgLm1haW4gewogICAgICAgICAgbWF4LXdpZHRoOiAxMDB2dzsKICAgICAgICAgIHdpZHRoOiA4NXZ3OwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyogQW5pbWF0aW9uIGZvciBtZW51IGl0ZW1zICovCiAgICAgIEBrZXlmcmFtZXMgc2xpZGVJblJpZ2h0IHsKICAgICAgICBmcm9tIHsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjBweCk7CiAgICAgICAgfQogICAgICAgIHRvIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAubWFpbi5zaG93IC5tZW51SXRlbSB7CiAgICAgICAgYW5pbWF0aW9uOiBzbGlkZUluUmlnaHQgMC4zcyBlYXNlLW91dCBmb3J3YXJkczsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IGNhbGModmFyKC0taXRlbS1pbmRleCwgMCkgKiAwLjA1cyk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgKi8KICAgICAgLm1lbnUtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgfQoKICAgICAgLm1lbnUtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5tZW51LWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAubWVudS1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNTI1MjViIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICAubWFpbiB7CiAgICAgICAgICAtLXotaW5kZXg6ICR7dGhpcy5tb2JpbGVOYXZaSW5kZXh9OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0ibWFpbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxoMiBjbGFzcz0iaGVhZGluZyI+JHt0aGlzLmhlYWRpbmd9PC9oMj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZW51LWNvbnRhaW5lciI+CiAgICAgICAgICAke3RoaXMubWVudUl0ZW1zLm1hcCgobWVudUl0ZW0sIGluZGV4MikgPT4gewogICAgICAgIGlmICgiZGl2aWRlciIgaW4gbWVudUl0ZW0gJiYgbWVudUl0ZW0uZGl2aWRlcikgewogICAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9Im1lbnVJdGVtLWRpdmlkZXIiPjwvZGl2PmA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICBjbGFzcz0ibWVudUl0ZW0iCiAgICAgICAgICAgICAgICBzdHlsZT0iLS1pdGVtLWluZGV4OiAke2luZGV4Mn0iCiAgICAgICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gewogICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICBtZW51SXRlbS5hY3Rpb24odGhpcyk7CiAgICAgICAgfX0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgJHttZW51SXRlbS5pY29uTmFtZSA/IGIyYAogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7bWVudUl0ZW0uaWNvbk5hbWV9IHNpemU9IjIwIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZW51SXRlbS10ZXh0Ij4ke21lbnVJdGVtLm5hbWV9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgd2luZG93TGF5ZXI7CiAgICAvKioKICAgICAqIGluaXRzIHRoZSBzaG93CiAgICAgKi8KICAgIGFzeW5jIHNob3coKSB7CiAgICAgIGNvbnN0IGRvbXRvb2xzID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGNvbnN0IG1haW4gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1haW4iKTsKICAgICAgaWYgKCF0aGlzLndpbmRvd0xheWVyKSB7CiAgICAgICAgdGhpcy53aW5kb3dMYXllciA9IGF3YWl0IERlZXNXaW5kb3dMYXllci5jcmVhdGVBbmRTaG93KHsKICAgICAgICAgIGJsdXI6IHRydWUKICAgICAgICB9KTsKICAgICAgICB0aGlzLndpbmRvd0xheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQodGhpcy53aW5kb3dMYXllcik7CiAgICAgICAgYXdhaXQgdGhpcy53aW5kb3dMYXllci5zaG93KCk7CiAgICAgIH0KICAgICAgdGhpcy5tb2JpbGVOYXZaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMsIHRoaXMubW9iaWxlTmF2WkluZGV4KTsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigxMCk7CiAgICAgIG1haW4uY2xhc3NMaXN0LmFkZCgic2hvdyIpOwogICAgfQogICAgLyoqCiAgICAgKiBpbml0cyB0aGUgaGlkZSBmdW5jdGlvbgogICAgICovCiAgICBhc3luYyBoaWRlKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBjb25zdCBtYWluID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tYWluIik7CiAgICAgIG1haW4uY2xhc3NMaXN0LnJlbW92ZSgic2hvdyIpOwogICAgICB6SW5kZXhSZWdpc3RyeS51bnJlZ2lzdGVyKHRoaXMpOwogICAgICBpZiAodGhpcy53aW5kb3dMYXllcikgewogICAgICAgIGF3YWl0IHRoaXMud2luZG93TGF5ZXIuZGVzdHJveSgpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgekluZGV4UmVnaXN0cnkudW5yZWdpc3Rlcih0aGlzKTsKICAgICAgaWYgKHRoaXMud2luZG93TGF5ZXIpIHsKICAgICAgICBhd2FpdCB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3OShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc01vYmlsZW5hdmlnYXRpb24yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4xX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1wYWdpbmF0aW9uL2RlZXMtcGFnaW5hdGlvbi5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzQ5ID0gKCkgPT4gYjJgCiAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxNnB4OyI+CiAgICA8IS0tIFNtYWxsIHNldCBvZiBwYWdlcyAtLT4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNHB4OyI+CiAgICAgIDxzcGFuPjUgcGFnZXMsIHN0YXJ0aW5nIGF0IDE6PC9zcGFuPgogICAgICA8ZGVlcy1wYWdpbmF0aW9uCiAgICAgICAgLnRvdGFsPSR7NX0KICAgICAgICAucGFnZT0kezF9CiAgICAgICAgQHBhZ2UtY2hhbmdlPSR7KGUxMSkgPT4gY29uc29sZS5sb2coIlBhZ2UgY2hhbmdlZCB0byIsIGUxMS5kZXRhaWwucGFnZSl9CiAgICAgID48L2RlZXMtcGFnaW5hdGlvbj4KICAgIDwvZGl2PgoKICAgIDwhLS0gTGFyZ2VyIHNldCBvZiBwYWdlcyAtLT4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNHB4OyI+CiAgICAgIDxzcGFuPjE1IHBhZ2VzLCBzdGFydGluZyBhdCA4Ojwvc3Bhbj4KICAgICAgPGRlZXMtcGFnaW5hdGlvbgogICAgICAgIC50b3RhbD0kezE1fQogICAgICAgIC5wYWdlPSR7OH0KICAgICAgICBAcGFnZS1jaGFuZ2U9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiUGFnZSBjaGFuZ2VkIHRvIiwgZTExLmRldGFpbC5wYWdlKX0KICAgICAgPjwvZGVlcy1wYWdpbmF0aW9uPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtcGFnaW5hdGlvbi9kZWVzLXBhZ2luYXRpb24uanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNzkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczgwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzUGFnaW5hdGlvbiA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtcGFnaW5hdGlvbiIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3BhZ2VfZGVjb3JhdG9yczsKICBsZXQgX3BhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wYWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90b3RhbF9kZWNvcmF0b3JzOwogIGxldCBfdG90YWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90b3RhbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUGFnaW5hdGlvbjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9wYWdlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUgfSldOwogICAgICBfdG90YWxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTc5KHRoaXMsIG51bGwsIF9wYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucGFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGFnZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wYWdlX2luaXRpYWxpemVycywgX3BhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3OSh0aGlzLCBudWxsLCBfdG90YWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidG90YWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRvdGFsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRvdGFsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50b3RhbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90b3RhbF9pbml0aWFsaXplcnMsIF90b3RhbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc5KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1BhZ2luYXRpb24yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM0OTsKICAgICNwYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczgwKHRoaXMsIF9wYWdlX2luaXRpYWxpemVycywgMSk7CiAgICAvKiogQ3VycmVudCBwYWdlICgxLWJhc2VkKSAqLwogICAgZ2V0IHBhZ2UoKSB7CiAgICAgIHJldHVybiB0aGlzLiNwYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RvdGFsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4MCh0aGlzLCBfcGFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODAodGhpcywgX3RvdGFsX2luaXRpYWxpemVycywgMSkpOwogICAgLyoqIFRvdGFsIG51bWJlciBvZiBwYWdlcyAqLwogICAgZ2V0IHRvdGFsKCkgewogICAgICByZXR1cm4gdGhpcy4jdG90YWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0b3RhbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdG90YWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQogICAgICBidXR0b24gewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIG1hcmdpbjogMCAycHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2NjYyIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzOwogICAgICB9CiAgICAgIGJ1dHRvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlZWUiLCAiIzQ0NCIpfTsKICAgICAgfQogICAgICBidXR0b246ZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNhYWEiLCAiIzY2NiIpfTsKICAgICAgfQogICAgICBidXR0b24uY3VycmVudCB7CiAgICAgICAgYmFja2dyb3VuZDogIzAwNTBiOTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KICAgICAgc3Bhbi5lbGxpcHNpcyB7CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2NjYyIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIGdldCBwYWdlcygpIHsKICAgICAgY29uc3QgcGFnZXMgPSBbXTsKICAgICAgY29uc3QgdG90YWwgPSB0aGlzLnRvdGFsOwogICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5wYWdlOwogICAgICBpZiAodG90YWwgPD0gNykgewogICAgICAgIGZvciAobGV0IGkxMSA9IDE7IGkxMSA8PSB0b3RhbDsgaTExKyspIHsKICAgICAgICAgIHBhZ2VzLnB1c2goaTExKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcGFnZXMucHVzaCgxKTsKICAgICAgICBpZiAoY3VycmVudCA+IDQpIHsKICAgICAgICAgIHBhZ2VzLnB1c2goIi4uLiIpOwogICAgICAgIH0KICAgICAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDIsIGN1cnJlbnQgLSAyKTsKICAgICAgICBjb25zdCBlbmQzID0gTWF0aC5taW4odG90YWwgLSAxLCBjdXJyZW50ICsgMik7CiAgICAgICAgZm9yIChsZXQgaTExID0gc3RhcnQ7IGkxMSA8PSBlbmQzOyBpMTErKykgewogICAgICAgICAgcGFnZXMucHVzaChpMTEpOwogICAgICAgIH0KICAgICAgICBpZiAoY3VycmVudCA8IHRvdGFsIC0gMykgewogICAgICAgICAgcGFnZXMucHVzaCgiLi4uIik7CiAgICAgICAgfQogICAgICAgIHBhZ2VzLnB1c2godG90YWwpOwogICAgICB9CiAgICAgIHJldHVybiBwYWdlczsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8YnV0dG9uCiAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5jaGFuZ2VQYWdlKHRoaXMucGFnZSAtIDEpfQogICAgICAgID9kaXNhYmxlZD0ke3RoaXMucGFnZSA8PSAxfQogICAgICAgIGFyaWEtbGFiZWw9IlByZXZpb3VzIHBhZ2UiCiAgICAgID4KICAgICAgICDigLkKICAgICAgPC9idXR0b24+CiAgICAgICR7dGhpcy5wYWdlcy5tYXAoKHA3KSA9PiBwNyA9PT0gIi4uLiIgPyBiMmA8c3BhbiBjbGFzcz0iZWxsaXBzaXMiPuKApjwvc3Bhbj5gIDogYjJgCiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IiR7cDcgPT09IHRoaXMucGFnZSA/ICJjdXJyZW50IiA6ICIifSIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuY2hhbmdlUGFnZShwNyl9CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtwNyA9PT0gdGhpcy5wYWdlfQogICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iUGFnZSAke3A3fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAke3A3fQogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICBgKX0KICAgICAgPGJ1dHRvbgogICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuY2hhbmdlUGFnZSh0aGlzLnBhZ2UgKyAxKX0KICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLnBhZ2UgPj0gdGhpcy50b3RhbH0KICAgICAgICBhcmlhLWxhYmVsPSJOZXh0IHBhZ2UiCiAgICAgID4KICAgICAgICDigLoKICAgICAgPC9idXR0b24+CiAgICBgOwogICAgfQogICAgY2hhbmdlUGFnZShuZXdQYWdlKSB7CiAgICAgIGlmIChuZXdQYWdlIDwgMSB8fCBuZXdQYWdlID4gdGhpcy50b3RhbCB8fCBuZXdQYWdlID09PSB0aGlzLnBhZ2UpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5wYWdlID0gbmV3UGFnZTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicGFnZS1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IHBhZ2U6IHRoaXMucGFnZSB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODAodGhpcywgX3RvdGFsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNQYWdpbmF0aW9uMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtcHJvZ3Jlc3NiYXIvZGVlcy1wcm9ncmVzc2Jhci5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzUwID0gKCkgPT4gewogIHJldHVybiBiMmAKICAgIDxkZWVzLXByb2dyZXNzYmFyCiAgICAgIC5wZXJjZW50YWdlPSR7NTB9CiAgICA+PC9kZWVzLXByb2dyZXNzYmFyPgogIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtcHJvZ3Jlc3NiYXIvZGVlcy1wcm9ncmVzc2Jhci5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU4MCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzODEgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNQcm9ncmVzc2JhciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtcHJvZ3Jlc3NiYXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9wZXJjZW50YWdlX2RlY29yYXRvcnM7CiAgbGV0IF9wZXJjZW50YWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGVyY2VudGFnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUHJvZ3Jlc3NiYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfcGVyY2VudGFnZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBOdW1iZXIKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGU4MCh0aGlzLCBudWxsLCBfcGVyY2VudGFnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwZXJjZW50YWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwZXJjZW50YWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBlcmNlbnRhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnBlcmNlbnRhZ2UgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGVyY2VudGFnZV9pbml0aWFsaXplcnMsIF9wZXJjZW50YWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzUHJvZ3Jlc3NiYXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIFNUQVRJQwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzUwOwogICAgI3BlcmNlbnRhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzODEodGhpcywgX3BlcmNlbnRhZ2VfaW5pdGlhbGl6ZXJzLCAwKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgcGVyY2VudGFnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BlcmNlbnRhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwZXJjZW50YWdlKHZhbHVlMikgewogICAgICB0aGlzLiNwZXJjZW50YWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZShicmlnaHQudGV4dCwgZGFyay50ZXh0KX07CiAgICAgIH0KICAgICAgLnByb2dyZXNzQmFyQ29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgbWluLXdpZHRoOiAyMDBweDsKICAgICAgfQoKICAgICAgLnByb2dyZXNzQmFyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VlZWVlYiIsICIjNDQ0Iil9OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBib3JkZXItdG9wOiAwLjVweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgibm9uZSIsICIjNTU1Iil9OwogICAgICB9CgogICAgICAucHJvZ3Jlc3NCYXJGaWxsIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZShkYXJrLmJsdWVBY3RpdmUsIGJyaWdodC5ibHVlQWN0aXZlKX07CiAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgbWFyZ2luLXRvcDogLTAuNXB4OwogICAgICAgIHRyYW5zaXRpb246IDAuMnMgd2lkdGg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHdpZHRoOiAwcHg7CiAgICAgICAgYm9yZGVyLXRvcDogMC41IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJub25lIiwgIiMzOThmZmYiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzc1RleHQgewogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3NCYXJDb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzQmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzQmFyRmlsbCI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzc1RleHQiPgogICAgICAgICAgICAke3RoaXMucGVyY2VudGFnZX0lCiAgICAgICAgICA8ZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgIHRoaXMudXBkYXRlUGVyY2VudGFnZSgpOwogICAgICB9KTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZVBlcmNlbnRhZ2UoKSB7CiAgICAgIGNvbnN0IHByb2dyZXNzQmFyRmlsbCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIucHJvZ3Jlc3NCYXJGaWxsIik7CiAgICAgIHByb2dyZXNzQmFyRmlsbC5zdHlsZS53aWR0aCA9IGAke3RoaXMucGVyY2VudGFnZX0lYDsKICAgIH0KICAgIHVwZGF0ZWQoKSB7CiAgICAgIHRoaXMudXBkYXRlUGVyY2VudGFnZSgpOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODEodGhpcywgX3BlcmNlbnRhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1Byb2dyZXNzYmFyMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtc2VhcmNoYmFyL2RlZXMtc2VhcmNoYmFyLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNTEgPSAoKSA9PiB7CiAgY29uc3Qgb25DaGFuZ2VkID0gKGUxMSkgPT4gewogICAgY29uc3Qgd3JhcHBlciA9IGUxMS50YXJnZXQuY2xvc2VzdCgiLmRlbW9XcmFwcGVyIik7CiAgICBjb25zdCBlbCA9IHdyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoIiNjaGFuZ2VkIik7CiAgICBpZiAoZWwpCiAgICAgIGVsLnRleHRDb250ZW50ID0gYHNlYXJjaC1jaGFuZ2VkOiAke2UxMS5kZXRhaWwudmFsdWV9YDsKICB9OwogIGNvbnN0IG9uU3VibWl0ID0gKGUxMSkgPT4gewogICAgY29uc3Qgd3JhcHBlciA9IGUxMS50YXJnZXQuY2xvc2VzdCgiLmRlbW9XcmFwcGVyIik7CiAgICBjb25zdCBlbCA9IHdyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoIiNzdWJtaXR0ZWQiKTsKICAgIGlmIChlbCkKICAgICAgZWwudGV4dENvbnRlbnQgPSBgc2VhcmNoLXN1Ym1pdDogJHtlMTEuZGV0YWlsLnZhbHVlfWA7CiAgfTsKICByZXR1cm4gYjJgCiAgICA8c3R5bGU+CiAgICAgIC5kZW1vV3JhcHBlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIAogICAgICAgIGJhY2tncm91bmQ6ICM4ODg4ODg7CiAgICAgIH0KICAgICAgLmxvZ3MgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgd2lkdGg6IDYwMHB4OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIH0KICAgICAgLmxvZ3MgZGl2IHsKICAgICAgICBtYXJnaW46IDRweCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0iZGVtb1dyYXBwZXIiPgogICAgICA8ZGVlcy1zZWFyY2hiYXIKICAgICAgICBAc2VhcmNoLWNoYW5nZWQ9JHtvbkNoYW5nZWR9CiAgICAgICAgQHNlYXJjaC1zdWJtaXQ9JHtvblN1Ym1pdH0KICAgICAgPjwvZGVlcy1zZWFyY2hiYXI+CiAgICAgIDxkaXYgY2xhc3M9ImxvZ3MiPgogICAgICAgIDxkaXYgaWQ9ImNoYW5nZWQiPnNlYXJjaC1jaGFuZ2VkOjwvZGl2PgogICAgICAgIDxkaXYgaWQ9InN1Ym1pdHRlZCI+c2VhcmNoLXN1Ym1pdDo8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNlYXJjaGJhci9kZWVzLXNlYXJjaGJhci5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU4MSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzODIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNTZWFyY2hiYXIgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNlYXJjaGJhciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2ZpbHRlcnNfZGVjb3JhdG9yczsKICBsZXQgX2ZpbHRlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNTZWFyY2hiYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfZmlsdGVyc19kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfX2VzRGVjb3JhdGU4MSh0aGlzLCBudWxsLCBfZmlsdGVyc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJmaWx0ZXJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWx0ZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZpbHRlcnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmZpbHRlcnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsdGVyc19pbml0aWFsaXplcnMsIF9maWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU2VhcmNoYmFyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBERU1PCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNTE7CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICBmb250LWZhbWlseTogRGVlcyBTYW5zOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMwMDAwMDAiKX07CiAgICAgIH0KCiAgICAgIC5zZWFyY2hib3hDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDE1IiwgIiNmZmZmZmYxNSIpfTsKICAgICAgICAtLWJveEhlaWdodDogNjBweDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWJveEhlaWdodCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm94SGVpZ2h0KTsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDE0MHB4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMTUiLCAiI2ZmZmZmZjIwIil9OwogICAgICB9CgogICAgICBpbnB1dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZWVlZWViIil9OwogICAgICAgIHBhZGRpbmctbGVmdDogMjVweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IC04cHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5zZWFyY2hCdXR0b24gewogICAgICAgIC0tYnV0dG9uUGFkZGluZzogOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMwMDAwMDAiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNlZWVlZWIiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IGNhbGModmFyKC0tYm94SGVpZ2h0KSAtICh2YXIoLS1idXR0b25QYWRkaW5nKSAqIDIpKTsKICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3hIZWlnaHQpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA1MCU7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIAogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzLCBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1idXR0b25QYWRkaW5nKTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLnNlYXJjaEJ1dHRvbjpob3ZlciB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoYnJpZ2h0LmJsdWUsIGRhcmsuYmx1ZSl9OwogICAgICB9CgogICAgICAuc2VhcmNoQnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoYnJpZ2h0LmJsdWVBY3RpdmUsIGRhcmsuYmx1ZUFjdGl2ZSl9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICAgIH0KCiAgICAgIC5maWx0ZXJzIHsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgfQogICAgYAogICAgXTsKICAgICNmaWx0ZXJzX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczgyKHRoaXMsIF9maWx0ZXJzX2luaXRpYWxpemVycywgW10pOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBmaWx0ZXJzKCkgewogICAgICByZXR1cm4gdGhpcy4jZmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZpbHRlcnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2ZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHNlYXJjaElucHV0ID0gX19ydW5Jbml0aWFsaXplcnM4Mih0aGlzLCBfZmlsdGVyc19leHRyYUluaXRpYWxpemVycyk7CiAgICBzZWFyY2hCdXR0b247CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJzZWFyY2hib3hDb250YWluZXIiPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iWW91ciBTa2lsbHMgKGUuZy4gVHlwZVNjcmlwdCwgUnVzdCwgUHJvamVjdG1hbmFnZW1lbnQpIiAvPgogICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaEJ1dHRvbiI+U2VhcmNoIC0+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICAke3RoaXMuZmlsdGVycy5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0iZmlsdGVycyI+CiAgICAgICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iaHItc21hbGwiPkZpbHRlcnM8L2RlZXMtaGVhZGluZz4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93biAubGFiZWw9JHsibG9jYXRpb24ifT48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgIDwvZGl2PiAgCiAgICAgIGAgOiBiMmBgfQogICAgYDsKICAgIH0KICAgIC8qKgogICAgICogTGlmZWN5Y2xlOiBhZnRlciBmaXJzdCByZW5kZXIsIHdpcmUgdXAgZXZlbnRzIGZvciBpbnB1dCBhbmQgc3VibWl0IGFjdGlvbnMKICAgICAqLwogICAgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLnNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKCkgPT4gewogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlYXJjaC1jaGFuZ2VkIiwgewogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnNlYXJjaElucHV0LnZhbHVlIH0KICAgICAgICB9KSk7CiAgICAgIH0pOwogICAgICB0aGlzLnNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoU3VibWl0KCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5zZWFyY2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB0aGlzLl9kaXNwYXRjaFN1Ym1pdCgpKTsKICAgIH0KICAgIC8qKgogICAgICogRGlzcGF0Y2ggYSBzdWJtaXQgZXZlbnQgd2l0aCB0aGUgY3VycmVudCBzZWFyY2ggdmFsdWUKICAgICAqLwogICAgX2Rpc3BhdGNoU3VibWl0KCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWFyY2gtc3VibWl0IiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnNlYXJjaElucHV0LnZhbHVlIH0KICAgICAgfSkpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4MihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1NlYXJjaGJhcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNwZWVjaGJ1YmJsZS9kZWVzLXNwZWVjaGJ1YmJsZS5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzUyID0gKCkgPT4gewogIHJldHVybiBiMmAKICAgIDxzdHlsZT4KICAgICAgLnJlZjEgewogICAgICAgIG1hcmdpbjogMjBweDsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0icmVmMSI+PC9kaXY+CiAgICA8ZGVlcy1zcGVlY2hidWJibGUgLnRleHQ9JHtgCiAgICAgICoqVGhpcyBpcyBhIGxvbmdlciBtYXJrZG93biB0ZXh0IHRoYXQgIGNhbiBiZSB1c2VkIHRoZSB3cml0ZSoqICAKICAgICAgYSBsb25nZXIgZGVzY3JpcHRpb24gYWJvdXQgd2hhdHMgZ29pbmcgb24gdGhlIGFwcCAgCiAgCiAgICAgICoqVGhpcyBpcyBhIHN1YmhlYWRlcioqCiAgICAgIGFuZCBhbm90aGVyIHRleHQKICAgIAogICAgYH0+PC9kZWVzLXNwZWVjaGJ1YmJsZT4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNwZWVjaGJ1YmJsZS9kZWVzLXNwZWVjaGJ1YmJsZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU4MiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzODMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNTcGVlY2hidWJibGUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNwZWVjaGJ1YmJsZSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3JlZmZlZEVsZW1lbnRfZGVjb3JhdG9yczsKICBsZXQgX3JlZmZlZEVsZW1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZWZmZWRFbGVtZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXh0X2RlY29yYXRvcnM7CiAgbGV0IF90ZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfd2F2ZV9kZWNvcmF0b3JzOwogIGxldCBfd2F2ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dhdmVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21hbmlmZXN0ZWRfZGVjb3JhdG9yczsKICBsZXQgX21hbmlmZXN0ZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYW5pZmVzdGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdGF0dXNfZGVjb3JhdG9yczsKICBsZXQgX3N0YXR1c19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3N0YXR1c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzU3BlZWNoYnViYmxlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3JlZmZlZEVsZW1lbnRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogT2JqZWN0CiAgICAgIH0pXTsKICAgICAgX3RleHRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfd2F2ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuCiAgICAgIH0pXTsKICAgICAgX21hbmlmZXN0ZWRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9zdGF0dXNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlODIodGhpcywgbnVsbCwgX3JlZmZlZEVsZW1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicmVmZmVkRWxlbWVudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicmVmZmVkRWxlbWVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZWZmZWRFbGVtZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yZWZmZWRFbGVtZW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JlZmZlZEVsZW1lbnRfaW5pdGlhbGl6ZXJzLCBfcmVmZmVkRWxlbWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTgyKHRoaXMsIG51bGwsIF90ZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXh0X2luaXRpYWxpemVycywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Mih0aGlzLCBudWxsLCBfd2F2ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ3YXZlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ3YXZlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLndhdmUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLndhdmUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfd2F2ZV9pbml0aWFsaXplcnMsIF93YXZlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODIodGhpcywgbnVsbCwgX21hbmlmZXN0ZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFuaWZlc3RlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFuaWZlc3RlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYW5pZmVzdGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYW5pZmVzdGVkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21hbmlmZXN0ZWRfaW5pdGlhbGl6ZXJzLCBfbWFuaWZlc3RlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTgyKHRoaXMsIG51bGwsIF9zdGF0dXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RhdHVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzdGF0dXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3RhdHVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdGF0dXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3RhdHVzX2luaXRpYWxpemVycywgX3N0YXR1c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTgyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1NwZWVjaGJ1YmJsZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzUyOwogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdyhyZWZFbGVtZW50LCB0ZXh0QXJnKSB7CiAgICAgIGNvbnN0IHdpbmRvd0xheWVyID0gYXdhaXQgRGVlc1dpbmRvd0xheWVyLmNyZWF0ZUFuZFNob3coewogICAgICAgIGJsdXI6IGZhbHNlCiAgICAgIH0pOwogICAgICBjb25zdCBzcGVlY2hidWJibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWVzLXNwZWVjaGJ1YmJsZSIpOwogICAgICBzcGVlY2hidWJibGUud2luZG93TGF5ZXIgPSB3aW5kb3dMYXllcjsKICAgICAgc3BlZWNoYnViYmxlLnJlZmZlZEVsZW1lbnQgPSByZWZFbGVtZW50OwogICAgICBzcGVlY2hidWJibGUudGV4dCA9IHRleHRBcmc7CiAgICAgIHNwZWVjaGJ1YmJsZS5tYW5pZmVzdGVkID0gdHJ1ZTsKICAgICAgd2luZG93TGF5ZXIuYXBwZW5kQ2hpbGQoc3BlZWNoYnViYmxlKTsKICAgICAgd2luZG93TGF5ZXIuc3R5bGUucG9pbnRlckV2ZW50cyA9ICJub25lIjsKICAgICAgd2luZG93TGF5ZXIuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIud2luZG93T3ZlcmxheSIpLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAibm9uZSI7CiAgICAgIHJldHVybiBzcGVlY2hidWJibGU7CiAgICB9CiAgICAjcmVmZmVkRWxlbWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfcmVmZmVkRWxlbWVudF9pbml0aWFsaXplcnMsIHZvaWQgMCk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHJlZmZlZEVsZW1lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNyZWZmZWRFbGVtZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcmVmZmVkRWxlbWVudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcmVmZmVkRWxlbWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9yZWZmZWRFbGVtZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfdGV4dF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3dhdmVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF90ZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfd2F2ZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgd2F2ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3dhdmVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB3YXZlKHZhbHVlMikgewogICAgICB0aGlzLiN3YXZlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFuaWZlc3RlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODModGhpcywgX3dhdmVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9tYW5pZmVzdGVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBtYW5pZmVzdGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jbWFuaWZlc3RlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1hbmlmZXN0ZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21hbmlmZXN0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9tYW5pZmVzdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfc3RhdHVzX2luaXRpYWxpemVycywgIm5vcm1hbCIpKTsKICAgIGdldCBzdGF0dXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdGF0dXModmFsdWUyKSB7CiAgICAgIHRoaXMuI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgd2luZG93TGF5ZXIgPSBfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNmZmYiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yczsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMHB4KTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgICBtYXJnaW4tbGVmdDogMHB4OwogICAgICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMHB4IDBweCAycHggcmdiYSgwLCAwLCAwLCAwLjIpKTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICB9CgogICAgICAuYXJyb3cgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmYiLCAiIzMzMyIpfTsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgd2lkdGg6IDE1cHg7CiAgICAgICAgbGVmdDogMnB4OwogICAgICAgIHRvcDogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5zcGVlY2hidWJibGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmIiwgIiMzMzMiKX07CiAgICAgICAgcGFkZGluZzogMHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBtaW4td2lkdGg6IDI0MHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiA4cHg7CiAgICAgIH0KCiAgICAgIC53YXZlIHsKICAgICAgICBhbmltYXRpb24tbmFtZTogd2F2ZS1hbmltYXRpb247IC8qIFJlZmVycyB0byB0aGUgbmFtZSBvZiB5b3VyIEBrZXlmcmFtZXMgZWxlbWVudCBiZWxvdyAqLwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMi41czsgLyogQ2hhbmdlIHRvIHNwZWVkIHVwIG9yIHNsb3cgZG93biAqLwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOyAvKiBOZXZlciBzdG9wIHdhdmluZyA6KSAqLwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDcwJSA3MCU7IC8qIFBpdm90IGFyb3VuZCB0aGUgYm90dG9tLWxlZnQgcGFsbSAqLwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyB3YXZlLWFuaW1hdGlvbiB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfQogICAgICAgIDEwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNGRlZyk7CiAgICAgICAgfSAvKiBUaGUgZm9sbG93aW5nIGZpdmUgdmFsdWVzIGNhbiBiZSBwbGF5ZWQgd2l0aCB0byBtYWtlIHRoZSB3YXZpbmcgbW9yZSBvciBsZXNzIGV4dHJlbWUgKi8KICAgICAgICAyMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLThkZWcpOwogICAgICAgIH0KICAgICAgICAzMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTRkZWcpOwogICAgICAgIH0KICAgICAgICA0MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTRkZWcpOwogICAgICAgIH0KICAgICAgICA1MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTBkZWcpOwogICAgICAgIH0KICAgICAgICA2MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfSAvKiBSZXNldCBmb3IgdGhlIGxhc3QgaGFsZiB0byBwYXVzZSAqLwogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfQogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgICR7dGhpcy5tYW5pZmVzdGVkID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiIEBjbGljaz0ke3RoaXMuaGFuZGxlQ2xpY2t9PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGVlY2hidWJibGUiPgogICAgICAgICAgICAgICAgJHt0aGlzLndhdmUgPyBiMmA8c3BhbiBjbGFzcz0id2F2ZSI+8J+Rizwvc3Bhbj5gIDogYjJgYH0KICAgICAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlc29sdmUodGhpcy5nZXRIdG1sKCkpfQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiBiMmBgfQogICAgYDsKICAgIH0KICAgIGFzeW5jIGhhbmRsZUNsaWNrKCkgewogICAgICBjb25zb2xlLmxvZygic3BlZWNoYnViYmxlIGdvdCBjbGlja2VkLiIpOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBpZiAoIXRoaXMucmVmZmVkRWxlbWVudCkgewogICAgICAgIHRoaXMucmVmZmVkRWxlbWVudCA9IHRoaXMucHJldmlvdXNFbGVtZW50U2libGluZzsKICAgICAgfQogICAgICBpZiAodGhpcy5tYW5pZmVzdGVkKSB7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVQb3NpdGlvbigpOwogICAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmNvbnRhaW5lciIpLnN0eWxlLm9wYWNpdHkgPSAiMSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGV0IHNwZWVjaGJ1YmJsZTsKICAgICAgICB0aGlzLnJlZmZlZEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsIGFzeW5jICgpID0+IHsKICAgICAgICAgIHNwZWVjaGJ1YmJsZSA9IGF3YWl0IERlZXNTcGVlY2hidWJibGUyLmNyZWF0ZUFuZFNob3codGhpcy5yZWZmZWRFbGVtZW50LCB0aGlzLnRleHQpOwogICAgICAgIH0pOwogICAgICAgIHRoaXMucmVmZmVkRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIiwgKCkgPT4gewogICAgICAgICAgc3BlZWNoYnViYmxlLmRlc3Ryb3koKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgYXN5bmMgdXBkYXRlUG9zaXRpb24oKSB7CiAgICAgIGNvbnN0IHJlZkVsZW1lbnQgPSB0aGlzLnJlZmZlZEVsZW1lbnQ7CiAgICAgIGNvbnN0IGJvdW5kaW5nQ2xpZW50UmVjdCA9IHJlZkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIHRoaXMuc3R5bGUucG9zaXRpb24gPSAiZml4ZWQiOwogICAgICB0aGlzLnN0eWxlLnRvcCA9IGAke2JvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSAxM31weGA7CiAgICAgIHRoaXMuc3R5bGUubGVmdCA9IGAke2JvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0ICsgcmVmRWxlbWVudC5jbGllbnRXaWR0aCArIDR9cHhgOwogICAgICBpZiAoYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ID4gMjUwKSB7CiAgICAgICAgdGhpcy5zdHlsZS53aWR0aCA9IGAyNTBweGA7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGdldEh0bWwoKSB7CiAgICAgIGlmICghdGhpcy50ZXh0KSB7CiAgICAgICAgcmV0dXJuICIiOwogICAgICB9CiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0c3RyaW5nLm5vcm1hbGl6ZS5zdGFuZGFyZCh0aGlzLnRleHQpOwogICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0bWFya2Rvd24uU21hcnRNYXJrZG93bi5lYXN5TWFya2Rvd25Ub0h0bWwobm9ybWFsaXplZCk7CiAgICAgIHJldHVybiBvOChyZXN1bHQpOwogICAgfQogICAgYXN5bmMgc2hvdygpIHsKICAgIH0KICAgIGFzeW5jIGRlc3Ryb3koKSB7CiAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmNvbnRhaW5lciIpLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgIHRoaXMud2luZG93TGF5ZXIuZGVzdHJveSgpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4MyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1NwZWVjaGJ1YmJsZTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNwaW5uZXIvZGVlcy1zcGlubmVyLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTgzID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM4NCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1NwaW5uZXIgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNwaW5uZXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9zaXplX2RlY29yYXRvcnM7CiAgbGV0IF9zaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYm53X2RlY29yYXRvcnM7CiAgbGV0IF9ibndfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ibndfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3N0YXR1c19kZWNvcmF0b3JzOwogIGxldCBfc3RhdHVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNTcGlubmVyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3NpemVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogTnVtYmVyCiAgICAgIH0pXTsKICAgICAgX2Jud19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfc3RhdHVzX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTgzKHRoaXMsIG51bGwsIF9zaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaXplX2luaXRpYWxpemVycywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Myh0aGlzLCBudWxsLCBfYm53X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJudyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYm53IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJudywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYm53ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Jud19pbml0aWFsaXplcnMsIF9ibndfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Myh0aGlzLCBudWxsLCBfc3RhdHVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RhdHVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXR1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc3RhdHVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0YXR1c19pbml0aWFsaXplcnMsIF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4MyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNTcGlubmVyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYAogICAgPGRlZXMtc3Bpbm5lcj48L2RlZXMtc3Bpbm5lcj4KICAgIDxkZWVzLXNwaW5uZXIgc3RhdHVzPSJzdWNjZXNzIj48L2RlZXMtc3Bpbm5lcj4KICAgIDxkZWVzLXNwaW5uZXIgc3RhdHVzPSJlcnJvciI+PC9kZWVzLXNwaW5uZXI+CiAgICA8ZGVlcy1zcGlubmVyIHNpemU9JHs2NH0gc3RhdHVzPSJzdWNjZXNzIj48L2RlZXMtc3Bpbm5lcj4KICAgIDxkZWVzLXNwaW5uZXIgLnNpemU9JHs2NH0gc3RhdHVzPSJlcnJvciI+PC9kZWVzLXNwaW5uZXI+CiAgYDsKICAgICNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczg0KHRoaXMsIF9zaXplX2luaXRpYWxpemVycywgMjApOwogICAgZ2V0IHNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2l6ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Jud19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODQodGhpcywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczg0KHRoaXMsIF9ibndfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGJudygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Jud19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGJudyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYm53X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4NCh0aGlzLCBfYm53X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4NCh0aGlzLCBfc3RhdHVzX2luaXRpYWxpemVycywgIm5vcm1hbCIpKTsKICAgIGdldCBzdGF0dXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdGF0dXModmFsdWUyKSB7CiAgICAgIHRoaXMuI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODQodGhpcywgX3N0YXR1c19leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAjbG9hZGluZyB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYmFja2dyb3VuZDogIzhiYzM0YTAwOwogICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMyIsICIjZmZmIil9OwogICAgICAgIGFuaW1hdGlvbjogc3BpbiAxcyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogc3BpbiAxcyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgI2xvYWRpbmcuc3VjY2VzcyB7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IG5vbmU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgICNsb2FkaW5nLmVycm9yIHsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGFuaW1hdGlvbjogbm9uZTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogbm9uZTsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICB0byB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBzcGluIHsKICAgICAgICB0byB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgfQogICAgICB9CgogICAgICBkZWVzLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgICNsb2FkaW5nIHsKICAgICAgICAgIHdpZHRoOiAke3RoaXMuc2l6ZX1weDsKICAgICAgICAgIGhlaWdodDogJHt0aGlzLnNpemV9cHg7CiAgICAgICAgfQogICAgICAgICNsb2FkaW5nLnN1Y2Nlc3MgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKHRoaXMuYm53ID8gIiMzMzMiIDogYCM4YmMzNGFgLCB0aGlzLmJudyA/ICIjZmZmIiA6IGAjOGJjMzRhYCl9OwogICAgICAgICAgCiAgICAgICAgfQogICAgICAgICNsb2FkaW5nLmVycm9yIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSh0aGlzLmJudyA/ICIjMzMzIiA6IGAjZTY0YTE5YCwgdGhpcy5ibncgPyAiI2ZmZiIgOiBgI2U2NGExOWApfTsKICAgICAgICB9CiAgICAgICAgZGVlcy1pY29uIHsKICAgICAgICAgIGZvbnQtc2l6ZTogJHt0aGlzLnNpemV9cHg7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSIke3RoaXMuc3RhdHVzfSIgaWQ9ImxvYWRpbmciPgogICAgICAgICR7KCgpID0+IHsKICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09ICJzdWNjZXNzIikgewogICAgICAgICAgcmV0dXJuIGIyYDxkZWVzLWljb24gc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlWCgxJSkgdHJhbnNsYXRlWSgzJSk7IiAuaWNvbj0keyJmYTpjaXJjbGUtY2hlY2sifT48L2RlZXMtaWNvbj5gOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0dXMgPT09ICJlcnJvciIpIHsKICAgICAgICAgIHJldHVybiBiMmA8ZGVlcy1pY29uIC5pY29uPSR7ImZhOmNpcmNsZS14bWFyayJ9PjwvZGVlcy1pY29uPmA7CiAgICAgICAgfQogICAgICB9KSgpfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczg0KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU3Bpbm5lcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXN0ZXBwZXIvZGVlcy1zdGVwcGVyLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHN0ZXBwZXJEZW1vID0gKCkgPT4gYjJgCiAgPGRlZXMtc3RlcHBlcgogICAgLnN0ZXBzPSR7WwogIHsKICAgIHRpdGxlOiAiQWNjb3VudCBTZXR1cCIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJlbWFpbCIgbGFiZWw9IldvcmsgRW1haWwiIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0icGFzc3dvcmQiIGxhYmVsPSJDcmVhdGUgUGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLAogICAgdmFsaWRhdGlvbkZ1bmM6IGFzeW5jIChzdGVwcGVyQXJnLCBlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRlZXNGb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgZGVlc0Zvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoKSA9PiBzdGVwcGVyQXJnLmdvTmV4dCgpLCB7IG9uY2U6IHRydWUgfSk7CiAgICB9CiAgfSwKICB7CiAgICB0aXRsZTogIlByb2ZpbGUgRGV0YWlscyIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJmaXJzdE5hbWUiIGxhYmVsPSJGaXJzdCBOYW1lIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9Imxhc3ROYW1lIiBsYWJlbD0iTGFzdCBOYW1lIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLAogICAgdmFsaWRhdGlvbkZ1bmM6IGFzeW5jIChzdGVwcGVyQXJnLCBlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRlZXNGb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgZGVlc0Zvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoKSA9PiBzdGVwcGVyQXJnLmdvTmV4dCgpLCB7IG9uY2U6IHRydWUgfSk7CiAgICB9CiAgfSwKICB7CiAgICB0aXRsZTogIkNvbnRhY3QgSW5mb3JtYXRpb24iLAogICAgY29udGVudDogYjJgCiAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSBrZXk9InBob25lIiBsYWJlbD0iTW9iaWxlIE51bWJlciIgcmVxdWlyZWQ+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0iY29tcGFueSIgbGFiZWw9IkNvbXBhbnkiPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5Db250aW51ZTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIGAsCiAgICB2YWxpZGF0aW9uRnVuYzogYXN5bmMgKHN0ZXBwZXJBcmcsIGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgZGVlc0Zvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBkZWVzRm9ybS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsICgpID0+IHN0ZXBwZXJBcmcuZ29OZXh0KCksIHsgb25jZTogdHJ1ZSB9KTsKICAgIH0KICB9LAogIHsKICAgIHRpdGxlOiAiVGVhbSBTaXplIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgICBrZXk9InRlYW1TaXplIgogICAgICAgICAgICAgIGxhYmVsPSJIb3cgYmlnIGlzIHlvdXIgdGVhbT8iCiAgICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgbGFiZWw6ICIxLTUiLCB2YWx1ZTogIjEtNSIgfSwKICAgICAgeyBsYWJlbDogIjYtMjAiLCB2YWx1ZTogIjYtMjAiIH0sCiAgICAgIHsgbGFiZWw6ICIyMS01MCIsIHZhbHVlOiAiMjEtNTAiIH0sCiAgICAgIHsgbGFiZWw6ICI1MSsiLCB2YWx1ZTogIjUxKyIgfQogICAgXX0KICAgICAgICAgICAgICByZXF1aXJlZAogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5Db250aW51ZTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIGAsCiAgICB2YWxpZGF0aW9uRnVuYzogYXN5bmMgKHN0ZXBwZXJBcmcsIGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgZGVlc0Zvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBkZWVzRm9ybS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsICgpID0+IHN0ZXBwZXJBcmcuZ29OZXh0KCksIHsgb25jZTogdHJ1ZSB9KTsKICAgIH0KICB9LAogIHsKICAgIHRpdGxlOiAiR29hbHMiLAogICAgY29udGVudDogYjJgCiAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAgIGtleT0iZ29hbCIKICAgICAgICAgICAgICBsYWJlbD0iTWFpbiBvYmplY3RpdmUiCiAgICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgbGFiZWw6ICJPbmJvYXJkaW5nIiwgdmFsdWU6ICJvbmJvYXJkaW5nIiB9LAogICAgICB7IGxhYmVsOiAiQW5hbHl0aWNzIiwgdmFsdWU6ICJhbmFseXRpY3MiIH0sCiAgICAgIHsgbGFiZWw6ICJBdXRvbWF0aW9uIiwgdmFsdWU6ICJhdXRvbWF0aW9uIiB9CiAgICBdfQogICAgICAgICAgICAgIHJlcXVpcmVkCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PkNvbnRpbnVlPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgYCwKICAgIHZhbGlkYXRpb25GdW5jOiBhc3luYyAoc3RlcHBlckFyZywgZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCBkZWVzRm9ybSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIik7CiAgICAgIGRlZXNGb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgKCkgPT4gc3RlcHBlckFyZy5nb05leHQoKSwgeyBvbmNlOiB0cnVlIH0pOwogICAgfQogIH0sCiAgewogICAgdGl0bGU6ICJCcmFuZCBQcmVmZXJlbmNlcyIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJicmFuZENvbG9yIiBsYWJlbD0iUHJpbWFyeSBicmFuZCBjb2xvciI+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJ0b25lIiBsYWJlbD0iUHJlZmVycmVkIHRvbmUgKGUuZy4gZnJpZW5kbHksIGZvcm1hbCkiPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5Db250aW51ZTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIGAsCiAgICB2YWxpZGF0aW9uRnVuYzogYXN5bmMgKHN0ZXBwZXJBcmcsIGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgZGVlc0Zvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBkZWVzRm9ybS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsICgpID0+IHN0ZXBwZXJBcmcuZ29OZXh0KCksIHsgb25jZTogdHJ1ZSB9KTsKICAgIH0KICB9LAogIHsKICAgIHRpdGxlOiAiSW50ZWdyYXRpb25zIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAgIGtleT0iaW50ZWdyYXRpb25zIgogICAgICAgICAgICAgIGxhYmVsPSJJbnRlZ3JhdGlvbnMgaW4gdXNlIgogICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJBZGQgaW50ZWdyYXRpb24iCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLAogICAgdmFsaWRhdGlvbkZ1bmM6IGFzeW5jIChzdGVwcGVyQXJnLCBlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRlZXNGb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgZGVlc0Zvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoKSA9PiBzdGVwcGVyQXJnLmdvTmV4dCgpLCB7IG9uY2U6IHRydWUgfSk7CiAgICB9CiAgfSwKICB7CiAgICB0aXRsZTogIlJldmlldyAmIExhdW5jaCIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLXBhbmVsPgogICAgICAgICAgICA8cD5BbG1vc3QgdGhlcmUhIFJldmlldyB5b3VyIHNlbGVjdGlvbnMgYW5kIGxhdW5jaCB3aGVuZXZlciB5b3UncmUgcmVhZHkuPC9wPgogICAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIGAKICB9Cl19CiAgPjwvZGVlcy1zdGVwcGVyPgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXN0ZXBwZXIvZGVlcy1zdGVwcGVyLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTg0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM4NSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1N0ZXBwZXIgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXN0ZXBwZXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9zdGVwc19kZWNvcmF0b3JzOwogIGxldCBfc3RlcHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdGVwc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRTdGVwX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZFN0ZXBfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFN0ZXBfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1N0ZXBwZXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfc3RlcHNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQXJyYXkKICAgICAgfSldOwogICAgICBfc2VsZWN0ZWRTdGVwX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IE9iamVjdAogICAgICB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTg0KHRoaXMsIG51bGwsIF9zdGVwc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzdGVwcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RlcHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3RlcHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnN0ZXBzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0ZXBzX2luaXRpYWxpemVycywgX3N0ZXBzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODQodGhpcywgbnVsbCwgX3NlbGVjdGVkU3RlcF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFN0ZXAiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkU3RlcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZFN0ZXAsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkU3RlcCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZFN0ZXBfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRTdGVwX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU3RlcHBlcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBzdGVwcGVyRGVtbzsKICAgICNzdGVwc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4NSh0aGlzLCBfc3RlcHNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICBnZXQgc3RlcHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdGVwc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHN0ZXBzKHZhbHVlMikgewogICAgICB0aGlzLiNzdGVwc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkU3RlcF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODUodGhpcywgX3N0ZXBzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4NSh0aGlzLCBfc2VsZWN0ZWRTdGVwX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgc2VsZWN0ZWRTdGVwKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRTdGVwX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VsZWN0ZWRTdGVwKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZFN0ZXBfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5zdGVwcGVyQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5zdGVwIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC43cyBjdWJpYy1iZXppZXIoMC44NywgMCwgMC4xMywgMSksIGJveC1zaGFkb3cgMC43cyBjdWJpYy1iZXppZXIoMC44NywgMCwgMC4xMywgMSksIGZpbHRlciAwLjdzIGN1YmljLWJlemllcigwLjg3LCAwLCAwLjEzLCAxKSwgYm9yZGVyIDAuN3MgY3ViaWMtYmV6aWVyKDAuODcsIDAsIDAuMTMsIDEpOwogICAgICAgIG1heC13aWR0aDogNTAwcHg7CiAgICAgICAgbWluLWhlaWdodDogMzAwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMGYwZjExIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTJlOGYwIiwgIiMyNzI3MjkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGYxNzJhIiwgIiNmNWY1ZjUiKX07CiAgICAgICAgbWFyZ2luOiBhdXRvOwogICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgICAgZmlsdGVyOiBvcGFjaXR5KDAuNTUpIHNhdHVyYXRlKDAuODUpOwogICAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDMycHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAuc3RlcC5zZWxlY3RlZCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDsKICAgICAgICBmaWx0ZXI6IG9wYWNpdHkoMSkgc2F0dXJhdGUoMSk7CiAgICAgICAgdXNlci1zZWxlY3Q6IGF1dG87CiAgICAgIH0KCiAgICAgIC5zdGVwLmhpZGRlblN0ZXAgewogICAgICAgIGZpbHRlcjogb3BhY2l0eSgwKTsKICAgICAgfQoKICAgICAgLnN0ZXAuZW50cmFuY2UgewogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjM1cyBlYXNlLCBib3gtc2hhZG93IDAuMzVzIGVhc2UsIGZpbHRlciAwLjM1cyBlYXNlLCBib3JkZXIgMC4zNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnN0ZXAuZW50cmFuY2UuaGlkZGVuU3RlcCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDE2cHgpOwogICAgICB9CgogICAgICAuc3RlcDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMDB2aDsKICAgICAgfQoKICAgICAgLnN0ZXAgLnN0ZXBDb3VudGVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2NDc0OGIiLCAiI2ExYTFhYSIpfTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMnB4OwogICAgICAgIHJpZ2h0OiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMjYsIDIzMiwgMjQwLCAwLjUpIiwgInJnYmEoNjMsIDYzLCA3MCwgMC40NSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjI2LCAyMzIsIDI0MCwgMC43KSIsICJyZ2JhKDYzLCA2MywgNzAsIDAuNikiKX07CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2sgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgbGVmdDogMTJweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIyNiwgMjMyLCAyNDAsIDAuOSkiLCAicmdiYSg2MywgNjMsIDcwLCAwLjg1KSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpIiwgInJnYmEoMzksIDM5LCA0MiwgMC44NSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNDc1NTY5IiwgIiNkNGQ0ZDgiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGJvcmRlciAwLjJzIGVhc2UsIGNvbG9yIDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjJzIGVhc2UsIHRyYW5zZm9ybSAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2s6aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzBmMTcyYSIsICIjZmFmYWZhIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoZGFyay5ibHVlLCBkYXJrLmJsdWUpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMjYsIDIzMiwgMjQwLCAwLjk1KSIsICJyZ2JhKDYzLCA2MywgNzAsIDAuNykiKX07CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0ycHgpOwogICAgICB9CgogICAgICAuc3RlcCAuZ29CYWNrOmFjdGl2ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGYxNzJhIiwgIiNmYWZhZmEiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZShkYXJrLmJsdWVBY3RpdmUsIGRhcmsuYmx1ZUFjdGl2ZSl9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIyNiwgMjMyLCAyNDAsIDAuODUpIiwgInJnYmEoNjMsIDYzLCA3MCwgMC42KSIpfTsKICAgICAgfQoKICAgICAgLnN0ZXAgLmdvQmFjayBzcGFuIHsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLnN0ZXAgLmdvQmFjazpob3ZlciBzcGFuIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTJweCk7CiAgICAgIH0KCiAgICAgIC5zdGVwIC50aXRsZSB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmctdG9wOiA2NHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgIH0KCiAgICAgIC5zdGVwIC5jb250ZW50IHsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InN0ZXBwZXJDb250YWluZXIiPgogICAgICAgICR7dGhpcy5zdGVwcy5tYXAoKHN0ZXBBcmcpID0+IGIyYDxkaXYKICAgICAgICAgICAgICBjbGFzcz0ic3RlcCAke3N0ZXBBcmcgPT09IHRoaXMuc2VsZWN0ZWRTdGVwID8gInNlbGVjdGVkIiA6IG51bGx9ICR7dGhpcy5nZXRJbmRleE9mU3RlcChzdGVwQXJnKSA+IHRoaXMuZ2V0SW5kZXhPZlN0ZXAodGhpcy5zZWxlY3RlZFN0ZXApID8gImhpZGRlblN0ZXAiIDogIiJ9ICR7dGhpcy5nZXRJbmRleE9mU3RlcChzdGVwQXJnKSA9PT0gMCA/ICJlbnRyYW5jZSIgOiAiIn0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICAke3RoaXMuZ2V0SW5kZXhPZlN0ZXAoc3RlcEFyZykgPiAwID8gYjJgPGRpdiBjbGFzcz0iZ29CYWNrIiBAY2xpY2s9JHt0aGlzLmdvQmFja30+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBJbnRlciI+PC08L3NwYW4+IGdvIHRvIHByZXZpb3VzIHN0ZXA8L2Rpdj5gIDogYGB9CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcENvdW50ZXIiPgogICAgICAgICAgICAgICAgU3RlcCAke3RoaXMuc3RlcHMuZmluZEluZGV4KChlbGVtZW50QXJnKSA9PiBlbGVtZW50QXJnID09PSBzdGVwQXJnKSArIDF9IG9mCiAgICAgICAgICAgICAgICAke3RoaXMuc3RlcHMubGVuZ3RofQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj4ke3N0ZXBBcmcudGl0bGV9PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+JHtzdGVwQXJnLmNvbnRlbnR9PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PiBgKX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgZ2V0SW5kZXhPZlN0ZXAgPSAoX19ydW5Jbml0aWFsaXplcnM4NSh0aGlzLCBfc2VsZWN0ZWRTdGVwX2V4dHJhSW5pdGlhbGl6ZXJzKSwgKHN0ZXBBcmcpID0+IHsKICAgICAgcmV0dXJuIHRoaXMuc3RlcHMuZmluZEluZGV4KChzdGVwQXJnMikgPT4gc3RlcEFyZyA9PT0gc3RlcEFyZzIpOwogICAgfSk7CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBhd2FpdCB0aGlzLmRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwID0gdGhpcy5zdGVwc1swXTsKICAgICAgdGhpcy5zZXRTY3JvbGxTdGF0dXMoKTsKICAgICAgYXdhaXQgdGhpcy5kb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDM1MCk7CiAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc3RlcC5lbnRyYW5jZSIpPy5jbGFzc0xpc3QucmVtb3ZlKCJlbnRyYW5jZSIpOwogICAgfQogICAgYXN5bmMgdXBkYXRlZCgpIHsKICAgICAgdGhpcy5zZXRTY3JvbGxTdGF0dXMoKTsKICAgIH0KICAgIHNjcm9sbGVyOwogICAgYXN5bmMgc2V0U2Nyb2xsU3RhdHVzKCkgewogICAgICBjb25zdCBzdGVwcGVyQ29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zdGVwcGVyQ29udGFpbmVyIik7CiAgICAgIGNvbnN0IGZpcnN0U3RlcEVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnN0ZXAiKTsKICAgICAgY29uc3Qgc2VsZWN0ZWRTdGVwRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VsZWN0ZWQiKTsKICAgICAgaWYgKCFzZWxlY3RlZFN0ZXBFbGVtZW50KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghc3RlcHBlckNvbnRhaW5lci5zdHlsZS5wYWRkaW5nVG9wKSB7CiAgICAgICAgc3RlcHBlckNvbnRhaW5lci5zdHlsZS5wYWRkaW5nVG9wID0gYCR7c3RlcHBlckNvbnRhaW5lci5vZmZzZXRIZWlnaHQgLyAyIC0gc2VsZWN0ZWRTdGVwRWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyfXB4YDsKICAgICAgfQogICAgICBjb25zb2xlLmxvZygiU2V0dGluZyBzY3JvbGwgc3RhdHVzIik7CiAgICAgIGNvbnNvbGUubG9nKHNlbGVjdGVkU3RlcEVsZW1lbnQpOwogICAgICBjb25zdCBzY3JvbGxQb3NpdGlvbiA9IHNlbGVjdGVkU3RlcEVsZW1lbnQub2Zmc2V0VG9wIC0gc3RlcHBlckNvbnRhaW5lci5vZmZzZXRIZWlnaHQgLyAyICsgc2VsZWN0ZWRTdGVwRWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOwogICAgICBjb25zb2xlLmxvZyhzY3JvbGxQb3NpdGlvbik7CiAgICAgIGNvbnN0IGRvbXRvb2xzSW5zdGFuY2UgPSBhd2FpdCBEb21Ub29scy5zZXR1cERvbVRvb2xzKCk7CiAgICAgIGlmICghdGhpcy5zY3JvbGxlcikgewogICAgICAgIHRoaXMuc2Nyb2xsZXIgPSBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLlN3ZWV0U2Nyb2xsKHsKICAgICAgICAgIHZlcnRpY2FsOiB0cnVlLAogICAgICAgICAgaG9yaXpvbnRhbDogZmFsc2UsCiAgICAgICAgICBlYXNpbmc6ICJlYXNlSW5PdXRFeHBvIiwKICAgICAgICAgIGR1cmF0aW9uOiA3MDAKICAgICAgICB9LCBzdGVwcGVyQ29udGFpbmVyKTsKICAgICAgfQogICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkICYmIHRoaXMuc2VsZWN0ZWRTdGVwLnZhbGlkYXRpb25GdW5jKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZFN0ZXAuYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkID0gdHJ1ZTsKICAgICAgICBhd2FpdCB0aGlzLnNlbGVjdGVkU3RlcC52YWxpZGF0aW9uRnVuYyh0aGlzLCBzZWxlY3RlZFN0ZXBFbGVtZW50LCB0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXIuc2lnbmFsKTsKICAgICAgfQogICAgICB0aGlzLnNjcm9sbGVyLnRvKHNjcm9sbFBvc2l0aW9uKTsKICAgIH0KICAgIGFzeW5jIGdvQmFjaygpIHsKICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5zdGVwcy5maW5kSW5kZXgoKHN0ZXBBcmcpID0+IHN0ZXBBcmcgPT09IHRoaXMuc2VsZWN0ZWRTdGVwKTsKICAgICAgaWYgKGN1cnJlbnRJbmRleCA8PSAwKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXIpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgfQogICAgICBjb25zdCBjdXJyZW50U3RlcCA9IHRoaXMuc3RlcHNbY3VycmVudEluZGV4XTsKICAgICAgY3VycmVudFN0ZXAudmFsaWRhdGlvbkZ1bmNDYWxsZWQgPSBmYWxzZTsKICAgICAgY29uc3QgcHJldmlvdXNTdGVwID0gdGhpcy5zdGVwc1tjdXJyZW50SW5kZXggLSAxXTsKICAgICAgcHJldmlvdXNTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkID0gZmFsc2U7CiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwID0gcHJldmlvdXNTdGVwOwogICAgICBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgYXdhaXQgdGhpcy5kb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDEwMCk7CiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwLm9uUmV0dXJuVG9TdGVwRnVuYz8uKHRoaXMsIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VsZWN0ZWQiKSk7CiAgICB9CiAgICBnb05leHQoKSB7CiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuc3RlcHMuZmluZEluZGV4KChzdGVwQXJnKSA9PiBzdGVwQXJnID09PSB0aGlzLnNlbGVjdGVkU3RlcCk7CiAgICAgIGlmIChjdXJyZW50SW5kZXggPCAwIHx8IGN1cnJlbnRJbmRleCA+PSB0aGlzLnN0ZXBzLmxlbmd0aCAtIDEpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTdGVwLmFib3J0Q29udHJvbGxlcikgewogICAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwLmFib3J0Q29udHJvbGxlci5hYm9ydCgpOwogICAgICB9CiAgICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gdGhpcy5zdGVwc1tjdXJyZW50SW5kZXhdOwogICAgICBjdXJyZW50U3RlcC52YWxpZGF0aW9uRnVuY0NhbGxlZCA9IGZhbHNlOwogICAgICBjb25zdCBuZXh0U3RlcCA9IHRoaXMuc3RlcHNbY3VycmVudEluZGV4ICsgMV07CiAgICAgIG5leHRTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkID0gZmFsc2U7CiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwID0gbmV4dFN0ZXA7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczg1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU3RlcHBlcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRvYXN0L2RlZXMtdG9hc3QuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM1MyA9ICgpID0+IGIyYAogICAgPHN0eWxlPgogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIHBhZGRpbmc6IDMycHg7CiAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOGY5ZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgfQoKICAgICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNDhweDsKICAgICAgfQoKICAgICAgLmRlbW8tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNmZmYiKX07CiAgICAgIH0KCiAgICAgIC5kZW1vLWRlc2NyaXB0aW9uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiNhYWEiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjAwcHgsIDFmcikpOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAzMnB4OwogICAgICB9CgogICAgICAudGhlbWUtdG9nZ2xlIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAxNnB4OwogICAgICAgIHJpZ2h0OiAxNnB4OwogICAgICAgIHotaW5kZXg6IDEwMDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLWJ1dHRvbiBjbGFzcz0idGhlbWUtdG9nZ2xlIiBAY2xpY2tlZD0keygpID0+IHsKICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoImJyaWdodCIpOwp9fT5Ub2dnbGUgVGhlbWU8L2RlZXMtYnV0dG9uPgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlRvYXN0IFR5cGVzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBEaWZmZXJlbnQgdG9hc3QgdHlwZXMgZm9yIHZhcmlvdXMgbm90aWZpY2F0aW9uIHNjZW5hcmlvcy4gQ2xpY2sgYW55IGJ1dHRvbiB0byBzaG93IGEgdG9hc3QuCiAgICAgICAgPC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3QuaW5mbygiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UiKTsKfX0+SW5mbyBUb2FzdDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJoaWdobGlnaHRlZCIgQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnN1Y2Nlc3MoIk9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ISIpOwp9fT5TdWNjZXNzIFRvYXN0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC53YXJuaW5nKCJQbGVhc2UgcmV2aWV3IGJlZm9yZSBwcm9jZWVkaW5nIik7Cn19Pldhcm5pbmcgVG9hc3Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LmVycm9yKCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIik7Cn19PkVycm9yIFRvYXN0PC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VG9hc3QgUG9zaXRpb25zPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBUb2FzdHMgY2FuIGFwcGVhciBpbiBkaWZmZXJlbnQgcG9zaXRpb25zIG9uIHRoZSBzY3JlZW4uCiAgICAgICAgPC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiVG9wIFJpZ2h0IFBvc2l0aW9uIiwKICAgIHR5cGU6ICJpbmZvIiwKICAgIHBvc2l0aW9uOiAidG9wLXJpZ2h0IgogIH0pOwp9fT5Ub3AgUmlnaHQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnNob3coewogICAgbWVzc2FnZTogIlRvcCBMZWZ0IFBvc2l0aW9uIiwKICAgIHR5cGU6ICJpbmZvIiwKICAgIHBvc2l0aW9uOiAidG9wLWxlZnQiCiAgfSk7Cn19PlRvcCBMZWZ0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5zaG93KHsKICAgIG1lc3NhZ2U6ICJCb3R0b20gUmlnaHQgUG9zaXRpb24iLAogICAgdHlwZTogImluZm8iLAogICAgcG9zaXRpb246ICJib3R0b20tcmlnaHQiCiAgfSk7Cn19PkJvdHRvbSBSaWdodDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiQm90dG9tIExlZnQgUG9zaXRpb24iLAogICAgdHlwZTogImluZm8iLAogICAgcG9zaXRpb246ICJib3R0b20tbGVmdCIKICB9KTsKfX0+Qm90dG9tIExlZnQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnNob3coewogICAgbWVzc2FnZTogIlRvcCBDZW50ZXIgUG9zaXRpb24iLAogICAgdHlwZTogImluZm8iLAogICAgcG9zaXRpb246ICJ0b3AtY2VudGVyIgogIH0pOwp9fT5Ub3AgQ2VudGVyPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5zaG93KHsKICAgIG1lc3NhZ2U6ICJCb3R0b20gQ2VudGVyIFBvc2l0aW9uIiwKICAgIHR5cGU6ICJpbmZvIiwKICAgIHBvc2l0aW9uOiAiYm90dG9tLWNlbnRlciIKICB9KTsKfX0+Qm90dG9tIENlbnRlcjwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkR1cmF0aW9uIE9wdGlvbnM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENvbnRyb2wgaG93IGxvbmcgdG9hc3RzIHN0YXkgdmlzaWJsZS4gRHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnNob3coewogICAgbWVzc2FnZTogIlF1aWNrIHRvYXN0ICgxIHNlY29uZCkiLAogICAgdHlwZTogImluZm8iLAogICAgZHVyYXRpb246IDFlMwogIH0pOwp9fT4xIFNlY29uZDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiU3RhbmRhcmQgdG9hc3QgKDMgc2Vjb25kcykiLAogICAgdHlwZTogImluZm8iLAogICAgZHVyYXRpb246IDNlMwogIH0pOwp9fT4zIFNlY29uZHMgKERlZmF1bHQpPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5zaG93KHsKICAgIG1lc3NhZ2U6ICJMb25nIHRvYXN0ICg1IHNlY29uZHMpIiwKICAgIHR5cGU6ICJpbmZvIiwKICAgIGR1cmF0aW9uOiA1ZTMKICB9KTsKfX0+NSBTZWNvbmRzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5zaG93KHsKICAgIG1lc3NhZ2U6ICJNYW51YWwgZGlzbWlzcyBvbmx5IChjbGljayB0byBjbG9zZSkiLAogICAgdHlwZTogIndhcm5pbmciLAogICAgZHVyYXRpb246IDAKICB9KTsKfX0+Tm8gQXV0by1EaXNtaXNzPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+TXVsdGlwbGUgVG9hc3RzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBNdWx0aXBsZSB0b2FzdHMgc3RhY2sgYXV0b21hdGljYWxseS4gVGhleSBtYWludGFpbiB0aGVpciBvcmRlciBhbmQgYW5pbWF0ZSBzbW9vdGhseS4KICAgICAgICA8L3A+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5pbmZvKCJGaXJzdCBub3RpZmljYXRpb24iKTsKICBzZXRUaW1lb3V0KCgpID0+IERlZXNUb2FzdC5zdWNjZXNzKCJTZWNvbmQgbm90aWZpY2F0aW9uIiksIDIwMCk7CiAgc2V0VGltZW91dCgoKSA9PiBEZWVzVG9hc3Qud2FybmluZygiVGhpcmQgbm90aWZpY2F0aW9uIiksIDQwMCk7CiAgc2V0VGltZW91dCgoKSA9PiBEZWVzVG9hc3QuZXJyb3IoIkZvdXJ0aCBub3RpZmljYXRpb24iKSwgNjAwKTsKfX0+U2hvdyBNdWx0aXBsZTwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gNTsgaTExKyspIHsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBEZWVzVG9hc3Quc2hvdyh7CiAgICAgICAgbWVzc2FnZTogYE5vdGlmaWNhdGlvbiAjJHtpMTF9YCwKICAgICAgICB0eXBlOiBpMTEgJSAyID09PSAwID8gInN1Y2Nlc3MiIDogImluZm8iLAogICAgICAgIGR1cmF0aW9uOiAyZTMgKyBpMTEgKiA1MDAKICAgICAgfSk7CiAgICB9LCBpMTEgKiAxMDApOwogIH0KfX0+UmFwaWQgRmlyZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlJlYWwtV29ybGQgRXhhbXBsZXM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENvbW1vbiB1c2UgY2FzZXMgZm9yIHRvYXN0IG5vdGlmaWNhdGlvbnMgaW4gYXBwbGljYXRpb25zLgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHthc3luYyAoKSA9PiB7CiAgY29uc3QgdG9hc3QgPSBhd2FpdCBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiU2F2aW5nIGNoYW5nZXMuLi4iLAogICAgdHlwZTogImluZm8iLAogICAgZHVyYXRpb246IDAKICB9KTsKICBzZXRUaW1lb3V0KCgpID0+IHsKICAgIHRvYXN0LmRpc21pc3MoKTsKICAgIERlZXNUb2FzdC5zdWNjZXNzKCJDaGFuZ2VzIHNhdmVkIHN1Y2Nlc3NmdWxseSEiKTsKICB9LCAyZTMpOwp9fT5TYXZlIE9wZXJhdGlvbjwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3QuZXJyb3IoIkZhaWxlZCB0byBjb25uZWN0IHRvIHNlcnZlci4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbi4iKTsKfX0+TmV0d29yayBFcnJvcjwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3Qud2FybmluZygiWW91ciBzZXNzaW9uIHdpbGwgZXhwaXJlIGluIDUgbWludXRlcyIpOwp9fT5TZXNzaW9uIFdhcm5pbmc8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnN1Y2Nlc3MoIkZpbGUgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5ISIpOwp9fT5VcGxvYWQgQ29tcGxldGU8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5Qcm9ncmFtbWF0aWMgQ29udHJvbDwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPgogICAgICAgICAgQWR2YW5jZWQgY29udHJvbCBvdmVyIHRvYXN0IGJlaGF2aW9yLgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHthc3luYyAoKSA9PiB7CiAgY29uc3QgdG9hc3QgPSBhd2FpdCBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiVGhpcyB0b2FzdCBjYW4gYmUgZGlzbWlzc2VkIHByb2dyYW1tYXRpY2FsbHkiLAogICAgdHlwZTogImluZm8iLAogICAgZHVyYXRpb246IDAKICB9KTsKICBzZXRUaW1lb3V0KCgpID0+IHsKICAgIHRvYXN0LmRpc21pc3MoKTsKICAgIERlZXNUb2FzdC5zdWNjZXNzKCJUb2FzdCBkaXNtaXNzZWQgYWZ0ZXIgMiBzZWNvbmRzIik7CiAgfSwgMmUzKTsKfX0+UHJvZ3JhbW1hdGljIERpc21pc3M8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LmluZm8oIkluZm8gbWVzc2FnZSIsIDJlMyk7CiAgc2V0VGltZW91dCgoKSA9PiBEZWVzVG9hc3Quc3VjY2VzcygiU3VjY2VzcyBtZXNzYWdlIiwgMmUzKSwgNTAwKTsKICBzZXRUaW1lb3V0KCgpID0+IERlZXNUb2FzdC53YXJuaW5nKCJXYXJuaW5nIG1lc3NhZ2UiLCAyZTMpLCAxZTMpOwogIHNldFRpbWVvdXQoKCkgPT4gRGVlc1RvYXN0LmVycm9yKCJFcnJvciBtZXNzYWdlIiwgMmUzKSwgMTUwMCk7Cn19PkNvbnZlbmllbmNlIE1ldGhvZHM8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdG9hc3QvZGVlcy10b2FzdC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU4NSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzODYgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNUb2FzdCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtdG9hc3QiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9tZXNzYWdlX2RlY29yYXRvcnM7CiAgbGV0IF9tZXNzYWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVzc2FnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdHlwZV9kZWNvcmF0b3JzOwogIGxldCBfdHlwZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2R1cmF0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9kdXJhdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2R1cmF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc1Zpc2libGVfZGVjb3JhdG9yczsKICBsZXQgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzVG9hc3QyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbWVzc2FnZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3R5cGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9kdXJhdGlvbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2lzVmlzaWJsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTg1KHRoaXMsIG51bGwsIF9tZXNzYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1lc3NhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lc3NhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVzc2FnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWVzc2FnZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZXNzYWdlX2luaXRpYWxpemVycywgX21lc3NhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4NSh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODUodGhpcywgbnVsbCwgX2R1cmF0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImR1cmF0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkdXJhdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kdXJhdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHVyYXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHVyYXRpb25faW5pdGlhbGl6ZXJzLCBfZHVyYXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4NSh0aGlzLCBudWxsLCBfaXNWaXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzVmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNWaXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzVmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNWaXNpYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMsIF9pc1Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4NShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNUb2FzdDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNTM7CiAgICBzdGF0aWMgdG9hc3RDb250YWluZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgIHN0YXRpYyBnZXRPckNyZWF0ZUNvbnRhaW5lcihwb3NpdGlvbjMpIHsKICAgICAgaWYgKCF0aGlzLnRvYXN0Q29udGFpbmVycy5oYXMocG9zaXRpb24zKSkgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSBgdG9hc3QtY29udGFpbmVyIHRvYXN0LWNvbnRhaW5lci0ke3Bvc2l0aW9uM31gOwogICAgICAgIGNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gYAogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB6LWluZGV4OiAke3pJbmRleExheWVycy5vdmVybGF5LnRvYXN0fTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgYDsKICAgICAgICBzd2l0Y2ggKHBvc2l0aW9uMykgewogICAgICAgICAgY2FzZSAidG9wLXJpZ2h0IjoKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnRvcCA9ICIwIjsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gIjAiOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInRvcC1sZWZ0IjoKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnRvcCA9ICIwIjsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAiMCI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYm90dG9tLXJpZ2h0IjoKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvdHRvbSA9ICIwIjsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gIjAiOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImJvdHRvbS1sZWZ0IjoKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvdHRvbSA9ICIwIjsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAiMCI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAidG9wLWNlbnRlciI6CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50b3AgPSAiMCI7CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gIjUwJSI7CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlWCgtNTAlKSI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYm90dG9tLWNlbnRlciI6CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3R0b20gPSAiMCI7CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gIjUwJSI7CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlWCgtNTAlKSI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CiAgICAgICAgdGhpcy50b2FzdENvbnRhaW5lcnMuc2V0KHBvc2l0aW9uMywgY29udGFpbmVyKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy50b2FzdENvbnRhaW5lcnMuZ2V0KHBvc2l0aW9uMyk7CiAgICB9CiAgICBzdGF0aWMgYXN5bmMgc2hvdyhvcHRpb25zKSB7CiAgICAgIGNvbnN0IG9wdHMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gInN0cmluZyIgPyB7IG1lc3NhZ2U6IG9wdGlvbnMgfSA6IG9wdGlvbnM7CiAgICAgIGNvbnN0IHRvYXN0ID0gbmV3IERlZXNUb2FzdDIoKTsKICAgICAgdG9hc3QubWVzc2FnZSA9IG9wdHMubWVzc2FnZTsKICAgICAgdG9hc3QudHlwZSA9IG9wdHMudHlwZSB8fCAiaW5mbyI7CiAgICAgIHRvYXN0LmR1cmF0aW9uID0gb3B0cy5kdXJhdGlvbiB8fCAzZTM7CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuZ2V0T3JDcmVhdGVDb250YWluZXIob3B0cy5wb3NpdGlvbiB8fCAidG9wLXJpZ2h0Iik7CiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0b2FzdCk7CiAgICAgIGF3YWl0IHRvYXN0LnVwZGF0ZUNvbXBsZXRlOwogICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgIHRvYXN0LmlzVmlzaWJsZSA9IHRydWU7CiAgICAgIH0pOwogICAgICBpZiAodG9hc3QuZHVyYXRpb24gPiAwKSB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICB0b2FzdC5kaXNtaXNzKCk7CiAgICAgICAgfSwgdG9hc3QuZHVyYXRpb24pOwogICAgICB9CiAgICAgIHJldHVybiB0b2FzdDsKICAgIH0KICAgIC8vIEFsaWFzIGZvciBjb25zaXN0ZW5jeSB3aXRoIERlZXNNb2RhbAogICAgc3RhdGljIGFzeW5jIGNyZWF0ZUFuZFNob3cob3B0aW9ucykgewogICAgICByZXR1cm4gdGhpcy5zaG93KG9wdGlvbnMpOwogICAgfQogICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kcwogICAgc3RhdGljIGluZm8obWVzc2FnZTIsIGR1cmF0aW9uKSB7CiAgICAgIHJldHVybiB0aGlzLnNob3coeyBtZXNzYWdlOiBtZXNzYWdlMiwgdHlwZTogImluZm8iLCBkdXJhdGlvbiB9KTsKICAgIH0KICAgIHN0YXRpYyBzdWNjZXNzKG1lc3NhZ2UyLCBkdXJhdGlvbikgewogICAgICByZXR1cm4gdGhpcy5zaG93KHsgbWVzc2FnZTogbWVzc2FnZTIsIHR5cGU6ICJzdWNjZXNzIiwgZHVyYXRpb24gfSk7CiAgICB9CiAgICBzdGF0aWMgd2FybmluZyhtZXNzYWdlMiwgZHVyYXRpb24pIHsKICAgICAgcmV0dXJuIHRoaXMuc2hvdyh7IG1lc3NhZ2U6IG1lc3NhZ2UyLCB0eXBlOiAid2FybmluZyIsIGR1cmF0aW9uIH0pOwogICAgfQogICAgc3RhdGljIGVycm9yKG1lc3NhZ2UyLCBkdXJhdGlvbikgewogICAgICByZXR1cm4gdGhpcy5zaG93KHsgbWVzc2FnZTogbWVzc2FnZTIsIHR5cGU6ICJlcnJvciIsIGR1cmF0aW9uIH0pOwogICAgfQogICAgI21lc3NhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX21lc3NhZ2VfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IG1lc3NhZ2UoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWVzc2FnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWVzc2FnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg2KHRoaXMsIF9tZXNzYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Nih0aGlzLCBfdHlwZV9pbml0aWFsaXplcnMsICJpbmZvIikpOwogICAgZ2V0IHR5cGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdHlwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2R1cmF0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4Nih0aGlzLCBfdHlwZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX2R1cmF0aW9uX2luaXRpYWxpemVycywgM2UzKSk7CiAgICBnZXQgZHVyYXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNkdXJhdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGR1cmF0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNkdXJhdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX2R1cmF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Nih0aGlzLCBfaXNWaXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc1Zpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc1Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1Zpc2libGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX2lzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIGRvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnNldHVwKCk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpc3Zpc2libGVdKSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgIH0KCiAgICAgIC50b2FzdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxNnB4IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmIiwgIiMyMjIiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzMzMyIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsMCwwLDAuMSkiLCAicmdiYSgwLDAsMCwwLjMpIil9OwogICAgICAgIG1pbi13aWR0aDogMzAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiA1MDBweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC50b2FzdDpob3ZlciB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjAyKTsKICAgICAgfQoKICAgICAgLmljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5pY29uIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubWVzc2FnZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgfQoKICAgICAgLmNsb3NlIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgIH0KCiAgICAgIC5jbG9zZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNsb3NlIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgLyogVHlwZS1zcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgOmhvc3QoW3R5cGU9ImluZm8iXSkgLmljb24gewogICAgICAgIGNvbG9yOiAjMDA4NGZmOwogICAgICB9CgogICAgICA6aG9zdChbdHlwZT0ic3VjY2VzcyJdKSAuaWNvbiB7CiAgICAgICAgY29sb3I6ICMyMmM1NWU7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0eXBlPSJ3YXJuaW5nIl0pIC5pY29uIHsKICAgICAgICBjb2xvcjogI2Y1OWUwYjsKICAgICAgfQoKICAgICAgOmhvc3QoW3R5cGU9ImVycm9yIl0pIC5pY29uIHsKICAgICAgICBjb2xvcjogI2VmNDQ0NDsKICAgICAgfQoKICAgICAgLyogUHJvZ3Jlc3MgYmFyICovCiAgICAgIC5wcm9ncmVzcyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogM3B4OwogICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDhweCA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnByb2dyZXNzLWJhciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdDsKICAgICAgICBhbmltYXRpb246IHByb2dyZXNzIGxpbmVhciBmb3J3YXJkczsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBwcm9ncmVzcyB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKTsKICAgICAgICB9CiAgICAgICAgdG8gewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCk7CiAgICAgICAgfQogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICBjb25zdCBpY29uczYgPSB7CiAgICAgICAgaW5mbzogYjJgPHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgMThhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnptMS0xMWExIDEgMCAxMC0yIDB2Mkg3YTEgMSAwIDEwMCAyaDJ2MmExIDEgMCAxMDIgMHYtMmgyYTEgMSAwIDEwMC0yaC0yVjd6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz4KICAgICAgPC9zdmc+YCwKICAgICAgICBzdWNjZXNzOiBiMmA8c3ZnIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0zLjcwNy05LjI5M2ExIDEgMCAwMC0xLjQxNC0xLjQxNEw5IDEwLjU4NiA3LjcwNyA5LjI5M2ExIDEgMCAwMC0xLjQxNCAxLjQxNGwyIDJhMSAxIDAgMDAxLjQxNCAwbDQtNHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPgogICAgICA8L3N2Zz5gLAogICAgICAgIHdhcm5pbmc6IGIyYDxzdmcgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTguMjU3IDMuMDk5Yy43NjUtMS4zNiAyLjcyMi0xLjM2IDMuNDg2IDBsNS41OCA5LjkyYy43NSAxLjMzNC0uMjEzIDIuOTgtMS43NDIgMi45OEg0LjQyYy0xLjUzIDAtMi40OTMtMS42NDYtMS43NDMtMi45OGw1LjU4LTkuOTJ6TTExIDEzYTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHptLTEtOGExIDEgMCAwMC0xIDF2M2ExIDEgMCAwMDIgMFY2YTEgMSAwIDAwLTEtMXoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPgogICAgICA8L3N2Zz5gLAogICAgICAgIGVycm9yOiBiMmA8c3ZnIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2ek04LjcwNyA3LjI5M2ExIDEgMCAwMC0xLjQxNCAxLjQxNEw4LjU4NiAxMGwtMS4yOTMgMS4yOTNhMSAxIDAgMTAxLjQxNCAxLjQxNEwxMCAxMS40MTRsMS4yOTMgMS4yOTNhMSAxIDAgMDAxLjQxNC0xLjQxNEwxMS40MTQgMTBsMS4yOTMtMS4yOTNhMSAxIDAgMDAtMS40MTQtMS40MTRMMTAgOC41ODYgOC43MDcgNy4yOTN6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz4KICAgICAgPC9zdmc+YAogICAgICB9OwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InRvYXN0IiBAY2xpY2s9JHt0aGlzLmRpc21pc3N9PgogICAgICAgIDxkaXYgY2xhc3M9Imljb24iPgogICAgICAgICAgJHtpY29uczZbdGhpcy50eXBlXX0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXNzYWdlIj4ke3RoaXMubWVzc2FnZX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjbG9zZSI+CiAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgPHBhdGggZD0iTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOHoiLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgIDwvZGl2PgogICAgICAgICR7dGhpcy5kdXJhdGlvbiA+IDAgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIiBzdHlsZT0iYW5pbWF0aW9uLWR1cmF0aW9uOiAke3RoaXMuZHVyYXRpb259bXMiPjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBkaXNtaXNzKCkgewogICAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDMwMCkpOwogICAgICB0aGlzLnJlbW92ZSgpOwogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnBhcmVudEVsZW1lbnQ7CiAgICAgIGlmIChjb250YWluZXIgJiYgY29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgewogICAgICAgIGNvbnRhaW5lci5yZW1vdmUoKTsKICAgICAgICBmb3IgKGNvbnN0IFtwb3NpdGlvbjMsIGNvbnRdIG9mIERlZXNUb2FzdDIudG9hc3RDb250YWluZXJzLmVudHJpZXMoKSkgewogICAgICAgICAgaWYgKGNvbnQgPT09IGNvbnRhaW5lcikgewogICAgICAgICAgICBEZWVzVG9hc3QyLnRvYXN0Q29udGFpbmVycy5kZWxldGUocG9zaXRpb24zKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJ0eXBlIiwgdGhpcy50eXBlKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODYoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNUb2FzdDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXVwZGF0ZXIvZGVlcy11cGRhdGVyLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNTQgPSBhc3luYyAoKSA9PiB7CiAgY29uc3QgdXBkYXRlciA9IGF3YWl0IERlZXNVcGRhdGVyLmNyZWF0ZUFuZFNob3coKTsKICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgIGF3YWl0IHVwZGF0ZXIuZGVzdHJveSgpOwogIH0sIDFlNCk7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMV9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdXBkYXRlci9kZWVzLXVwZGF0ZXIuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlODYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczg3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzVXBkYXRlciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtdXBkYXRlciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2N1cnJlbnRWZXJzaW9uX2RlY29yYXRvcnM7CiAgbGV0IF9jdXJyZW50VmVyc2lvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRWZXJzaW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF91cGRhdGVkVmVyc2lvbl9kZWNvcmF0b3JzOwogIGxldCBfdXBkYXRlZFZlcnNpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF91cGRhdGVkVmVyc2lvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzVXBkYXRlcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9jdXJyZW50VmVyc2lvbl9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfdXBkYXRlZFZlcnNpb25fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlODYodGhpcywgbnVsbCwgX2N1cnJlbnRWZXJzaW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRWZXJzaW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXJyZW50VmVyc2lvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50VmVyc2lvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VycmVudFZlcnNpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudFZlcnNpb25faW5pdGlhbGl6ZXJzLCBfY3VycmVudFZlcnNpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Nih0aGlzLCBudWxsLCBfdXBkYXRlZFZlcnNpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidXBkYXRlZFZlcnNpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInVwZGF0ZWRWZXJzaW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnVwZGF0ZWRWZXJzaW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai51cGRhdGVkVmVyc2lvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF91cGRhdGVkVmVyc2lvbl9pbml0aWFsaXplcnMsIF91cGRhdGVkVmVyc2lvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTg2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1VwZGF0ZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM1NDsKICAgIHN0YXRpYyBhc3luYyBjcmVhdGVBbmRTaG93KCkgewogICAgICBjb25zdCB1cGRhdGVyID0gbmV3IERlZXNVcGRhdGVyMigpOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHVwZGF0ZXIpOwogICAgICByZXR1cm4gdXBkYXRlcjsKICAgIH0KICAgICNjdXJyZW50VmVyc2lvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4Nyh0aGlzLCBfY3VycmVudFZlcnNpb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgZ2V0IGN1cnJlbnRWZXJzaW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFZlcnNpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50VmVyc2lvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VycmVudFZlcnNpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN1cGRhdGVkVmVyc2lvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODcodGhpcywgX2N1cnJlbnRWZXJzaW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Nyh0aGlzLCBfdXBkYXRlZFZlcnNpb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCB1cGRhdGVkVmVyc2lvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3VwZGF0ZWRWZXJzaW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdXBkYXRlZFZlcnNpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3VwZGF0ZWRWZXJzaW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4Nyh0aGlzLCBfdXBkYXRlZFZlcnNpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBkaXN0X3RzX2V4cG9ydHMyNS5lbGVtZW50QmFzaWMuc2V0dXAoKTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAubW9kYWxDb250YWluZXIgewogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMyMjIiKX07CiAgICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMzMzMiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNDBweCA0MHB4OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgbWFyZ2luOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgICBtYXJnaW4tbGVmdDogMjBweDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAuYnV0dG9uQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNTAlIDUwJTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy13aW5kb3dsYXllcgogICAgICAgIEBjbGlja2VkPSIke3RoaXMud2luZG93TGF5ZXJDbGlja2VkfSIKICAgICAgICAub3B0aW9ucz0ke3sKICAgICAgICBibHVyOiB0cnVlCiAgICAgIH19CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbENvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nQ29udGFpbmVyIj4KICAgICAgICAgICAgPGRlZXMtc3Bpbm5lciAuc2l6ZT0kezYwfT48L2RlZXMtc3Bpbm5lcj4KICAgICAgICAgICAgPGgxPlVwZGF0aW5nIHRoZSBhcHBsaWNhdGlvbi4uLjwvaDE+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIj4KICAgICAgICAgICAgPGRlZXMtcHJvZ3Jlc3NiYXIgLnByb2dyZXNzPSR7MC41fT48L2RlZXMtcHJvZ3Jlc3NiYXI+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbkNvbnRhaW5lciI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5Nb3JlIGluZm88L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+Q2hhbmdlbG9nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PiA8L2RlZXMtd2luZG93bGF5ZXIKICAgICAgPj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBkZXN0cm95KCkgewogICAgICB0aGlzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcyk7CiAgICB9CiAgICB3aW5kb3dMYXllckNsaWNrZWQoKSB7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczg3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzVXBkYXRlcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRoZW1lL2RlZXMtdGhlbWUuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM1NSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMzJweDsKICAgICAgcGFkZGluZzogNDhweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOGY5ZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICB9CgogICAgLnNlY3Rpb24gewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICB9CgogICAgLnNlY3Rpb24tdGl0bGUgewogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgfQoKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgIH0KCiAgICAudG9rZW4tZ3JpZCB7CiAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgZ2FwOiAxNnB4OwogICAgfQoKICAgIC50b2tlbi1pdGVtIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICBwYWRkaW5nOiAxNnB4OwogICAgfQoKICAgIC50b2tlbi1uYW1lIHsKICAgICAgZm9udC1mYW1pbHk6ICdJbnRlbCBPbmUgTW9ubycsIG1vbm9zcGFjZTsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgfQoKICAgIC50b2tlbi12YWx1ZSB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICB9CgogICAgLnNwYWNpbmctZGVtbyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgZ2FwOiA4cHg7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIH0KCiAgICAuc3BhY2luZy1ib3ggewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICB9CgogICAgLnJhZGl1cy1kZW1vIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAxNnB4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLnJhZGl1cy1ib3ggewogICAgICB3aWR0aDogNjBweDsKICAgICAgaGVpZ2h0OiA2MHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICB9CgogICAgLnNoYWRvdy1kZW1vIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAyNHB4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLnNoYWRvdy1ib3ggewogICAgICB3aWR0aDogMTAwcHg7CiAgICAgIGhlaWdodDogMTAwcHg7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMyNzI3MmEiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICB9CgogICAgLmhlaWdodC1kZW1vIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAxNnB4OwogICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIH0KCiAgICAuaGVpZ2h0LWJveCB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgIHdpZHRoOiAxMjBweDsKICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy10aGVtZT4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U3BhY2luZyBTY2FsZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPgogICAgICAgICAgQ1NTIHZhcmlhYmxlczogLS1kZWVzLXNwYWNpbmcteHMgdGhyb3VnaCAtLWRlZXMtc3BhY2luZy0zeGwKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWRlbW8iPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2luZy1ib3giIHN0eWxlPSJ3aWR0aDogdmFyKC0tZGVlcy1zcGFjaW5nLXhzKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmcteHMpOyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPnhzICg0cHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy1zbSk7IGhlaWdodDogdmFyKC0tZGVlcy1zcGFjaW5nLXNtKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5zbSAoOHB4KTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWJveCIgc3R5bGU9IndpZHRoOiB2YXIoLS1kZWVzLXNwYWNpbmctbWQpOyBoZWlnaHQ6IHZhcigtLWRlZXMtc3BhY2luZy1tZCk7Ij48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+bWQgKDEycHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy1sZyk7IGhlaWdodDogdmFyKC0tZGVlcy1zcGFjaW5nLWxnKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5sZyAoMTZweCk8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2luZy1ib3giIHN0eWxlPSJ3aWR0aDogdmFyKC0tZGVlcy1zcGFjaW5nLXhsKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmcteGwpOyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPnhsICgyNHB4KTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWJveCIgc3R5bGU9IndpZHRoOiB2YXIoLS1kZWVzLXNwYWNpbmctMnhsKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmctMnhsKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4yeGwgKDMycHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy0zeGwpOyBoZWlnaHQ6IHZhcigtLWRlZXMtc3BhY2luZy0zeGwpOyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjN4bCAoNDhweCk8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkJvcmRlciBSYWRpdXMgU2NhbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENTUyB2YXJpYWJsZXM6IC0tZGVlcy1yYWRpdXMteHMgdGhyb3VnaCAtLWRlZXMtcmFkaXVzLWZ1bGwKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtZGVtbyI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtYm94IiBzdHlsZT0iYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcy1yYWRpdXMteHMpOyI+eHM8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+MnB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGl1cy1ib3giIHN0eWxlPSJib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVzLXJhZGl1cy1zbSk7Ij5zbTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj40cHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmFkaXVzLWJveCIgc3R5bGU9ImJvcmRlci1yYWRpdXM6IHZhcigtLWRlZXMtcmFkaXVzLW1kKTsiPm1kPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjZweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtYm94IiBzdHlsZT0iYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcy1yYWRpdXMtbGcpOyI+bGc8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+OHB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGl1cy1ib3giIHN0eWxlPSJib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVzLXJhZGl1cy14bCk7Ij54bDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4xMnB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGl1cy1ib3giIHN0eWxlPSJib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVzLXJhZGl1cy1mdWxsKTsiPmZ1bGw8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+OTk5cHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNoYWRvdyBFbGV2YXRpb24gU2NhbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENTUyB2YXJpYWJsZXM6IC0tZGVlcy1zaGFkb3cteHMgdGhyb3VnaCAtLWRlZXMtc2hhZG93LWxnCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93LWRlbW8iPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93LWJveCIgc3R5bGU9ImJveC1zaGFkb3c6IHZhcigtLWRlZXMtc2hhZG93LXhzKTsiPnhzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPm1pbmltYWw8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93LWJveCIgc3R5bGU9ImJveC1zaGFkb3c6IHZhcigtLWRlZXMtc2hhZG93LXNtKTsiPnNtPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPnN1YnRsZTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGFkb3ctYm94IiBzdHlsZT0iYm94LXNoYWRvdzogdmFyKC0tZGVlcy1zaGFkb3ctbWQpOyI+bWQ8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+bWVkaXVtPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNoYWRvdy1ib3giIHN0eWxlPSJib3gtc2hhZG93OiB2YXIoLS1kZWVzLXNoYWRvdy1sZyk7Ij5sZzwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5wcm9taW5lbnQ8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkNvbnRyb2wgSGVpZ2h0IFNjYWxlPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDU1MgdmFyaWFibGVzOiAtLWRlZXMtY29udHJvbC1oZWlnaHQtc20gdGhyb3VnaCAtLWRlZXMtY29udHJvbC1oZWlnaHQteGwKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWlnaHQtZGVtbyI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWlnaHQtYm94IiBzdHlsZT0iaGVpZ2h0OiB2YXIoLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXNtKTsiPnNtPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjMycHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVpZ2h0LWJveCIgc3R5bGU9ImhlaWdodDogdmFyKC0tZGVlcy1jb250cm9sLWhlaWdodC1tZCk7Ij5tZDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4zNnB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlaWdodC1ib3giIHN0eWxlPSJoZWlnaHQ6IHZhcigtLWRlZXMtY29udHJvbC1oZWlnaHQtbGcpOyI+bGc8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+NDBweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWlnaHQtYm94IiBzdHlsZT0iaGVpZ2h0OiB2YXIoLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXhsKTsiPnhsPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjQ4cHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlRyYW5zaXRpb24gRHVyYXRpb25zPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDU1MgdmFyaWFibGVzOiAtLWRlZXMtdHJhbnNpdGlvbi1mYXN0IHRocm91Z2ggLS1kZWVzLXRyYW5zaXRpb24tc2xvd2VyCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tZ3JpZCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1pdGVtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+LS1kZWVzLXRyYW5zaXRpb24tZmFzdDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi12YWx1ZSI+MC4xczwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1pdGVtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+LS1kZWVzLXRyYW5zaXRpb24tZGVmYXVsdDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi12YWx1ZSI+MC4xNXM8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4taXRlbSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPi0tZGVlcy10cmFuc2l0aW9uLXNsb3c8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tdmFsdWUiPjAuMnM8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4taXRlbSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPi0tZGVlcy10cmFuc2l0aW9uLXNsb3dlcjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi12YWx1ZSI+MC4zczwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kZWVzLXRoZW1lPgogIDwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRoZW1lL2RlZXMtdGhlbWUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlODcgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczg4ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzVGhlbWUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXRoZW1lIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfY3VzdG9tU3BhY2luZ19kZWNvcmF0b3JzOwogIGxldCBfY3VzdG9tU3BhY2luZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1c3RvbVNwYWNpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1c3RvbVJhZGl1c19kZWNvcmF0b3JzOwogIGxldCBfY3VzdG9tUmFkaXVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VzdG9tUmFkaXVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXN0b21TaGFkb3dzX2RlY29yYXRvcnM7CiAgbGV0IF9jdXN0b21TaGFkb3dzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VzdG9tU2hhZG93c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VzdG9tVHJhbnNpdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2N1c3RvbVRyYW5zaXRpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VzdG9tVHJhbnNpdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1c3RvbUNvbnRyb2xIZWlnaHRzX2RlY29yYXRvcnM7CiAgbGV0IF9jdXN0b21Db250cm9sSGVpZ2h0c19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1c3RvbUNvbnRyb2xIZWlnaHRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNUaGVtZTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9jdXN0b21TcGFjaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfY3VzdG9tUmFkaXVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfY3VzdG9tU2hhZG93c19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX2N1c3RvbVRyYW5zaXRpb25zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfY3VzdG9tQ29udHJvbEhlaWdodHNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTg3KHRoaXMsIG51bGwsIF9jdXN0b21TcGFjaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1c3RvbVNwYWNpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1c3RvbVNwYWNpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VzdG9tU3BhY2luZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VzdG9tU3BhY2luZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jdXN0b21TcGFjaW5nX2luaXRpYWxpemVycywgX2N1c3RvbVNwYWNpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Nyh0aGlzLCBudWxsLCBfY3VzdG9tUmFkaXVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1c3RvbVJhZGl1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VzdG9tUmFkaXVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1c3RvbVJhZGl1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VzdG9tUmFkaXVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1c3RvbVJhZGl1c19pbml0aWFsaXplcnMsIF9jdXN0b21SYWRpdXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Nyh0aGlzLCBudWxsLCBfY3VzdG9tU2hhZG93c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXN0b21TaGFkb3dzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXN0b21TaGFkb3dzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1c3RvbVNoYWRvd3MsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1c3RvbVNoYWRvd3MgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VzdG9tU2hhZG93c19pbml0aWFsaXplcnMsIF9jdXN0b21TaGFkb3dzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODcodGhpcywgbnVsbCwgX2N1c3RvbVRyYW5zaXRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1c3RvbVRyYW5zaXRpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXN0b21UcmFuc2l0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXN0b21UcmFuc2l0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VzdG9tVHJhbnNpdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VzdG9tVHJhbnNpdGlvbnNfaW5pdGlhbGl6ZXJzLCBfY3VzdG9tVHJhbnNpdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Nyh0aGlzLCBudWxsLCBfY3VzdG9tQ29udHJvbEhlaWdodHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VzdG9tQ29udHJvbEhlaWdodHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1c3RvbUNvbnRyb2xIZWlnaHRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1c3RvbUNvbnRyb2xIZWlnaHRzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jdXN0b21Db250cm9sSGVpZ2h0cyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jdXN0b21Db250cm9sSGVpZ2h0c19pbml0aWFsaXplcnMsIF9jdXN0b21Db250cm9sSGVpZ2h0c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTg3KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1RoZW1lMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNTU7CiAgICAjY3VzdG9tU3BhY2luZ19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfY3VzdG9tU3BhY2luZ19pbml0aWFsaXplcnMsIG51bGwpOwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFByb3BlcnRpZXMgZm9yIHRoZW1lIG92ZXJyaWRlcwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIGdldCBjdXN0b21TcGFjaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VzdG9tU3BhY2luZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGN1c3RvbVNwYWNpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1c3RvbVNwYWNpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjdXN0b21SYWRpdXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg4KHRoaXMsIF9jdXN0b21TcGFjaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfY3VzdG9tUmFkaXVzX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IGN1c3RvbVJhZGl1cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1c3RvbVJhZGl1c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGN1c3RvbVJhZGl1cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VzdG9tUmFkaXVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VzdG9tU2hhZG93c19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODgodGhpcywgX2N1c3RvbVJhZGl1c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODgodGhpcywgX2N1c3RvbVNoYWRvd3NfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgY3VzdG9tU2hhZG93cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1c3RvbVNoYWRvd3NfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXN0b21TaGFkb3dzKHZhbHVlMikgewogICAgICB0aGlzLiNjdXN0b21TaGFkb3dzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VzdG9tVHJhbnNpdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg4KHRoaXMsIF9jdXN0b21TaGFkb3dzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfY3VzdG9tVHJhbnNpdGlvbnNfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgY3VzdG9tVHJhbnNpdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjdXN0b21UcmFuc2l0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGN1c3RvbVRyYW5zaXRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNjdXN0b21UcmFuc2l0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1c3RvbUNvbnRyb2xIZWlnaHRzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfY3VzdG9tVHJhbnNpdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczg4KHRoaXMsIF9jdXN0b21Db250cm9sSGVpZ2h0c19pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCBjdXN0b21Db250cm9sSGVpZ2h0cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1c3RvbUNvbnRyb2xIZWlnaHRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VzdG9tQ29udHJvbEhlaWdodHModmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1c3RvbUNvbnRyb2xIZWlnaHRzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gU3R5bGVzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBjb250ZW50czsKICAgICAgfQogICAgYAogICAgXTsKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBSZW5kZXIKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgICR7dGhpcy5nZW5lcmF0ZUN1c3RvbVN0eWxlcygpfQogICAgICA8L3N0eWxlPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICBgOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFByaXZhdGUgTWV0aG9kcwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIGdlbmVyYXRlQ3VzdG9tU3R5bGVzKCkgewogICAgICBjb25zdCBzdHlsZXMzID0gWyI6aG9zdCB7Il07CiAgICAgIGlmICh0aGlzLmN1c3RvbVNwYWNpbmcpIHsKICAgICAgICBmb3IgKGNvbnN0IFtrZXkyLCB2YWx1ZTJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tU3BhY2luZykpIHsKICAgICAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICAgICAgc3R5bGVzMy5wdXNoKGAgIC0tZGVlcy1zcGFjaW5nLSR7a2V5Mn06ICR7dmFsdWUyfTtgKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY3VzdG9tUmFkaXVzKSB7CiAgICAgICAgZm9yIChjb25zdCBba2V5MiwgdmFsdWUyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmN1c3RvbVJhZGl1cykpIHsKICAgICAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICAgICAgc3R5bGVzMy5wdXNoKGAgIC0tZGVlcy1yYWRpdXMtJHtrZXkyfTogJHt2YWx1ZTJ9O2ApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGhpcy5jdXN0b21TaGFkb3dzKSB7CiAgICAgICAgZm9yIChjb25zdCBba2V5MiwgdmFsdWUyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmN1c3RvbVNoYWRvd3MpKSB7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIHN0eWxlczMucHVzaChgICAtLWRlZXMtc2hhZG93LSR7a2V5Mn06ICR7dmFsdWUyfTtgKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY3VzdG9tVHJhbnNpdGlvbnMpIHsKICAgICAgICBmb3IgKGNvbnN0IFtrZXkyLCB2YWx1ZTJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tVHJhbnNpdGlvbnMpKSB7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIGNvbnN0IGNzc0tleSA9IGtleTIgPT09ICJkZWZhdWx0IiA/ICJkZWZhdWx0IiA6IGtleTI7CiAgICAgICAgICAgIHN0eWxlczMucHVzaChgICAtLWRlZXMtdHJhbnNpdGlvbi0ke2Nzc0tleX06ICR7dmFsdWUyfTtgKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY3VzdG9tQ29udHJvbEhlaWdodHMpIHsKICAgICAgICBmb3IgKGNvbnN0IFtrZXkyLCB2YWx1ZTJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tQ29udHJvbEhlaWdodHMpKSB7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIHN0eWxlczMucHVzaChgICAtLWRlZXMtY29udHJvbC1oZWlnaHQtJHtrZXkyfTogJHt2YWx1ZTJ9O2ApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBzdHlsZXMzLnB1c2goIn0iKTsKICAgICAgcmV0dXJuIHN0eWxlczMuam9pbigiXG4iKTsKICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQdWJsaWMgQVBJIE1ldGhvZHMKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIFNldCBhIHNwYWNpbmcgdmFsdWUgZHluYW1pY2FsbHkKICAgICAqLwogICAgc2V0U3BhY2luZyhrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jdXN0b21TcGFjaW5nID0geyAuLi50aGlzLmN1c3RvbVNwYWNpbmcsIFtrZXkyXTogdmFsdWUyIH07CiAgICB9CiAgICAvKioKICAgICAqIFNldCBhIHJhZGl1cyB2YWx1ZSBkeW5hbWljYWxseQogICAgICovCiAgICBzZXRSYWRpdXMoa2V5MiwgdmFsdWUyKSB7CiAgICAgIHRoaXMuY3VzdG9tUmFkaXVzID0geyAuLi50aGlzLmN1c3RvbVJhZGl1cywgW2tleTJdOiB2YWx1ZTIgfTsKICAgIH0KICAgIC8qKgogICAgICogU2V0IGEgc2hhZG93IHZhbHVlIGR5bmFtaWNhbGx5CiAgICAgKi8KICAgIHNldFNoYWRvdyhrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jdXN0b21TaGFkb3dzID0geyAuLi50aGlzLmN1c3RvbVNoYWRvd3MsIFtrZXkyXTogdmFsdWUyIH07CiAgICB9CiAgICAvKioKICAgICAqIFNldCBhIHRyYW5zaXRpb24gdmFsdWUgZHluYW1pY2FsbHkKICAgICAqLwogICAgc2V0VHJhbnNpdGlvbihrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jdXN0b21UcmFuc2l0aW9ucyA9IHsgLi4udGhpcy5jdXN0b21UcmFuc2l0aW9ucywgW2tleTJdOiB2YWx1ZTIgfTsKICAgIH0KICAgIC8qKgogICAgICogU2V0IGEgY29udHJvbCBoZWlnaHQgdmFsdWUgZHluYW1pY2FsbHkKICAgICAqLwogICAgc2V0Q29udHJvbEhlaWdodChrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cyA9IHsgLi4udGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cywgW2tleTJdOiB2YWx1ZTIgfTsKICAgIH0KICAgIC8qKgogICAgICogR2V0IHRoZSBjdXJyZW50IHRoZW1lIGNvbmZpZ3VyYXRpb24gKGRlZmF1bHRzICsgb3ZlcnJpZGVzKQogICAgICovCiAgICBnZXRUaGVtZSgpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBjb2xvcnM6IHRoZW1lRGVmYXVsdHMuY29sb3JzLAogICAgICAgIHNwYWNpbmc6IHsgLi4udGhlbWVEZWZhdWx0cy5zcGFjaW5nLCAuLi50aGlzLmN1c3RvbVNwYWNpbmcgfSwKICAgICAgICByYWRpdXM6IHsgLi4udGhlbWVEZWZhdWx0cy5yYWRpdXMsIC4uLnRoaXMuY3VzdG9tUmFkaXVzIH0sCiAgICAgICAgc2hhZG93czogeyAuLi50aGVtZURlZmF1bHRzLnNoYWRvd3MsIC4uLnRoaXMuY3VzdG9tU2hhZG93cyB9LAogICAgICAgIHRyYW5zaXRpb25zOiB7IC4uLnRoZW1lRGVmYXVsdHMudHJhbnNpdGlvbnMsIC4uLnRoaXMuY3VzdG9tVHJhbnNpdGlvbnMgfSwKICAgICAgICBjb250cm9sSGVpZ2h0czogeyAuLi50aGVtZURlZmF1bHRzLmNvbnRyb2xIZWlnaHRzLCAuLi50aGlzLmN1c3RvbUNvbnRyb2xIZWlnaHRzIH0KICAgICAgfTsKICAgIH0KICAgIC8qKgogICAgICogUmVzZXQgYWxsIGN1c3RvbSBvdmVycmlkZXMgdG8gZGVmYXVsdHMKICAgICAqLwogICAgcmVzZXRUb0RlZmF1bHRzKCkgewogICAgICB0aGlzLmN1c3RvbVNwYWNpbmcgPSBudWxsOwogICAgICB0aGlzLmN1c3RvbVJhZGl1cyA9IG51bGw7CiAgICAgIHRoaXMuY3VzdG9tU2hhZG93cyA9IG51bGw7CiAgICAgIHRoaXMuY3VzdG9tVHJhbnNpdGlvbnMgPSBudWxsOwogICAgICB0aGlzLmN1c3RvbUNvbnRyb2xIZWlnaHRzID0gbnVsbDsKICAgIH0KICAgIC8qKgogICAgICogQXBwbHkgYSBjb21wbGV0ZSB0aGVtZSBvYmplY3QKICAgICAqLwogICAgYXBwbHlUaGVtZSh0aGVtZSkgewogICAgICBpZiAodGhlbWUuc3BhY2luZykKICAgICAgICB0aGlzLmN1c3RvbVNwYWNpbmcgPSB0aGVtZS5zcGFjaW5nOwogICAgICBpZiAodGhlbWUucmFkaXVzKQogICAgICAgIHRoaXMuY3VzdG9tUmFkaXVzID0gdGhlbWUucmFkaXVzOwogICAgICBpZiAodGhlbWUuc2hhZG93cykKICAgICAgICB0aGlzLmN1c3RvbVNoYWRvd3MgPSB0aGVtZS5zaGFkb3dzOwogICAgICBpZiAodGhlbWUudHJhbnNpdGlvbnMpCiAgICAgICAgdGhpcy5jdXN0b21UcmFuc2l0aW9ucyA9IHRoZW1lLnRyYW5zaXRpb25zOwogICAgICBpZiAodGhlbWUuY29udHJvbEhlaWdodHMpCiAgICAgICAgdGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cyA9IHRoZW1lLmNvbnRyb2xIZWlnaHRzOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODgodGhpcywgX2N1c3RvbUNvbnRyb2xIZWlnaHRzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODgoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNUaGVtZTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9pbmRleC5qcwppbml0X3RoZW1lKCk7CmluaXRfZ3JvdXBfcnVudGltZSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjFfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi8wMF9jb21taXRpbmZvX2RhdGEuanMKdmFyIGNvbW1pdGluZm8gPSB7CiAgbmFtZTogIkBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZyIsCiAgdmVyc2lvbjogIjMuMzcuMSIsCiAgZGVzY3JpcHRpb246ICJBIGNvbXByZWhlbnNpdmUgbGlicmFyeSB0aGF0IHByb3ZpZGVzIGR5bmFtaWMgd2ViIGNvbXBvbmVudHMgZm9yIGJ1aWxkaW5nIHNvcGhpc3RpY2F0ZWQgYW5kIG1vZGVybiB3ZWIgYXBwbGljYXRpb25zIHVzaW5nIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQuIgp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkc29ja2V0QDQuMS4wX0BwdXNoLnJvY2tzK3NtYXJ0c2VydmVAMi4wLjEvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkc29ja2V0L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czMwID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czMwLCB7CiAgVHlwZWRTb2NrZXQ6ICgpID0+IFR5cGVkU29ja2V0Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2lzb2hhc2hAMi4wLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2lzb2hhc2gvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjkgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjksIHsKICBzaGEyNTZGcm9tU3RyaW5nOiAoKSA9PiBzaGEyNTZGcm9tU3RyaW5nMgp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0ZW52QDUuMC41L25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0ZW52L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czI4ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czI4LCB7CiAgU21hcnRlbnY6ICgpID0+IFNtYXJ0ZW52Mgp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0ZW52QDUuMC41L25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0ZW52L2Rpc3RfdHMvc21hcnRlbnYucGx1Z2lucy5qcwp2YXIgc21hcnRwcm9taXNlID0gX190b0VTTShyZXF1aXJlX2Rpc3RfdHMzKCksIDEpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRlbnZANS4wLjUvbm9kZV9tb2R1bGVzL0BwdXNocm9ja3Mvc21hcnRlbnYvZGlzdF90cy9zbWFydGVudi5jbGFzc2VzLnNtYXJ0ZW52LmpzCnZhciBTbWFydGVudjIgPSBjbGFzcyB7CiAgY29uc3RydWN0b3IoKSB7CiAgICB0aGlzLmxvYWRlZFNjcmlwdHMgPSBbXTsKICB9CiAgYXN5bmMgZ2V0RW52QXdhcmVNb2R1bGUob3B0aW9uc0FyZykgewogICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgIGNvbnN0IG1vZHVsZVJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0U2FmZU5vZGVNb2R1bGUob3B0aW9uc0FyZy5ub2RlTW9kdWxlTmFtZSk7CiAgICAgIHJldHVybiBtb2R1bGVSZXN1bHQ7CiAgICB9IGVsc2UgaWYgKHRoaXMuaXNCcm93c2VyKSB7CiAgICAgIGNvbnN0IG1vZHVsZVJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0U2FmZVdlYk1vZHVsZShvcHRpb25zQXJnLndlYlVybEFyZywgb3B0aW9uc0FyZy5nZXRGdW5jdGlvbik7CiAgICAgIHJldHVybiBtb2R1bGVSZXN1bHQ7CiAgICB9IGVsc2UgewogICAgICBjb25zb2xlLmVycm9yKCJwbGF0Zm9ybSBmb3IgbG9hZGluZyBub3Qgc3VwcG9ydGVkIGJ5IHNtYXJ0ZW52Iik7CiAgICB9CiAgfQogIGFzeW5jIGdldFNhZmVOb2RlTW9kdWxlKG1vZHVsZU5hbWVBcmcpIHsKICAgIGlmICghdGhpcy5pc05vZGUpIHsKICAgICAgY29uc29sZS5lcnJvcihgWW91IHRyaWVkIHRvIGxvYWQgYSBub2RlIG1vZHVsZSBpbiBhIHdyb25nIGNvbnRleHQ6ICR7bW9kdWxlTmFtZUFyZ31gKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgcmV0dXJuIG5ldyBGdW5jdGlvbihgcmV0dXJuIGltcG9ydCgnJHttb2R1bGVOYW1lQXJnfScpYCkoKTsKICB9CiAgYXN5bmMgZ2V0U2FmZVdlYk1vZHVsZSh1cmxBcmcsIGdldEZ1bmN0aW9uQXJnKSB7CiAgICBpZiAoIXRoaXMuaXNCcm93c2VyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIllvdSB0cmllZCB0byBsb2FkIGEgd2ViIG1vZHVsZSBpbiBhIHdyb25nIGNvbnRleHQiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRoaXMubG9hZGVkU2NyaXB0cy5pbmNsdWRlcyh1cmxBcmcpKSB7CiAgICAgIHJldHVybiBnZXRGdW5jdGlvbkFyZygpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5sb2FkZWRTY3JpcHRzLnB1c2godXJsQXJnKTsKICAgIH0KICAgIGNvbnN0IGRvbmUgPSBzbWFydHByb21pc2UuZGVmZXIoKTsKICAgIGlmIChnbG9iYWxUaGlzLmltcG9ydFNjcmlwdHMpIHsKICAgICAgZ2xvYmFsVGhpcy5pbXBvcnRTY3JpcHRzKHVybEFyZyk7CiAgICAgIGRvbmUucmVzb2x2ZSgpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7CiAgICAgICAgZG9uZS5yZXNvbHZlKCk7CiAgICAgIH07CiAgICAgIHNjcmlwdC5zcmMgPSB1cmxBcmc7CiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKICAgIH0KICAgIGF3YWl0IGRvbmUucHJvbWlzZTsKICAgIHJldHVybiBnZXRGdW5jdGlvbkFyZygpOwogIH0KICBnZXQgcnVudGltZUVudigpIHsKICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgcmV0dXJuICJub2RlIjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAiYnJvd3NlciI7CiAgICB9CiAgfQogIGdldCBpc0Jyb3dzZXIoKSB7CiAgICByZXR1cm4gIXRoaXMuaXNOb2RlOwogIH0KICBnZXQgdXNlckFnZW50KCkgewogICAgaWYgKHRoaXMuaXNCcm93c2VyKSB7CiAgICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICJ1bmRlZmluZWQiOwogICAgfQogIH0KICBnZXQgaXNOb2RlKCkgewogICAgcmV0dXJuIHRoaXMucnVudGltZUVudiA9PT0gIm5vZGUiOwogIH0KICBnZXQgbm9kZVZlcnNpb24oKSB7CiAgICByZXR1cm4gcHJvY2Vzcy52ZXJzaW9uOwogIH0KICBnZXQgaXNDSSgpIHsKICAgIGlmICh0aGlzLmlzTm9kZSkgewogICAgICBpZiAocHJvY2Vzcy5lbnYuQ0kpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgYXN5bmMgaXNNYWNBc3luYygpIHsKICAgIGlmICh0aGlzLmlzTm9kZSkgewogICAgICBjb25zdCBvcyA9IGF3YWl0IHRoaXMuZ2V0U2FmZU5vZGVNb2R1bGUoIm9zIik7CiAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAiZGFyd2luIjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgYXN5bmMgaXNXaW5kb3dzQXN5bmMoKSB7CiAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgY29uc3Qgb3MgPSBhd2FpdCB0aGlzLmdldFNhZmVOb2RlTW9kdWxlKCJvcyIpOwogICAgICByZXR1cm4gb3MucGxhdGZvcm0oKSA9PT0gIndpbjMyIjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgYXN5bmMgaXNMaW51eEFzeW5jKCkgewogICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgIGNvbnN0IG9zID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKTsKICAgICAgcmV0dXJuIG9zLnBsYXRmb3JtKCkgPT09ICJsaW51eCI7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIC8qKgogICAqIHByaW50cyB0aGUgZW52aXJvbm1lbnQgdG8gY29uc29sZQogICAqLwogIGFzeW5jIHByaW50RW52KCkgewogICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgIGNvbnNvbGUubG9nKCJydW5uaW5nIG9uIE5PREUiKTsKICAgICAgY29uc29sZS5sb2coIm5vZGUgdmVyc2lvbiBpcyAiICsgdGhpcy5ub2RlVmVyc2lvbik7CiAgICB9IGVsc2UgewogICAgICBjb25zb2xlLmxvZygicnVubmluZyBvbiBCUk9XU0VSIik7CiAgICAgIGNvbnNvbGUubG9nKCJicm93c2VyIGlzICIgKyB0aGlzLnVzZXJBZ2VudCk7CiAgICB9CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2lzb2hhc2hAMi4wLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2lzb2hhc2gvZGlzdF90cy9pbmRleC5qcwp2YXIgaGV4MiA9IChidWZmZXIyKSA9PiB7CiAgY29uc3QgaGV4Q29kZXMgPSBbXTsKICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlcjIpOwogIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHZpZXcuYnl0ZUxlbmd0aDsgaTExICs9IDQpIHsKICAgIGNvbnN0IHZhbHVlMiA9IHZpZXcuZ2V0VWludDMyKGkxMSk7CiAgICBjb25zdCBzdHJpbmdWYWx1ZSA9IHZhbHVlMi50b1N0cmluZygxNik7CiAgICBjb25zdCBwYWRkaW5nID0gIjAwMDAwMDAwIjsKICAgIGNvbnN0IHBhZGRlZFZhbHVlID0gKHBhZGRpbmcgKyBzdHJpbmdWYWx1ZSkuc2xpY2UoLXBhZGRpbmcubGVuZ3RoKTsKICAgIGhleENvZGVzLnB1c2gocGFkZGVkVmFsdWUpOwogIH0KICByZXR1cm4gaGV4Q29kZXMuam9pbigiIik7Cn07CnZhciBzaGEyNTZGcm9tU3RyaW5nMiA9IGFzeW5jIChzdHJpbmdBcmcpID0+IHsKICBjb25zdCBzbWFydGVudiA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyOC5TbWFydGVudigpOwogIGlmIChzbWFydGVudi5pc0Jyb3dzZXIpIHsKICAgIGNvbnN0IGJ1ZmZlcjIgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyaW5nQXJnKTsKICAgIGNvbnN0IGhhc2ggPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgiU0hBLTI1NiIsIGJ1ZmZlcjIpOwogICAgY29uc3QgcmVzdWx0ID0gaGV4MihoYXNoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSBlbHNlIGlmIChzbWFydGVudi5pc05vZGUpIHsKICAgIGNvbnN0IHNtYXJ0aGFzaE1vZHVsZSA9IGF3YWl0IHNtYXJ0ZW52LmdldFNhZmVOb2RlTW9kdWxlKCJAcHVzaHJvY2tzL3NtYXJ0aGFzaCIpOwogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc21hcnRoYXNoTW9kdWxlLnNoYTI1NkZyb21TdHJpbmcoc3RyaW5nQXJnKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkc29ja2V0QDQuMS4wX0BwdXNoLnJvY2tzK3NtYXJ0c2VydmVAMi4wLjEvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkc29ja2V0L2Rpc3RfdHMvdHlwZWRzb2NrZXQucGx1Z2lucy5qcwppbml0X2Rpc3RfdHMxNSgpOwppbml0X2Rpc3RfdHM0KCk7CmluaXRfZGlzdF90czMoKTsKaW5pdF9kaXN0X3RzMTIoKTsKaW5pdF9kaXN0X3RzKCk7CmluaXRfZGlzdF90czIoKTsKaW5pdF9kaXN0X3RzMTEoKTsKaW5pdF9kaXN0X3RzMjAoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHNvY2tldEA0LjEuMF9AcHVzaC5yb2NrcytzbWFydHNlcnZlQDIuMC4xL25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHNvY2tldC9kaXN0X3RzL3R5cGVkc29ja2V0LmNsYXNzZXMudHlwZWRzb2NrZXQuanMKdmFyIFRBR19QUkVGSVggPSAiX190eXBlZHNvY2tldF90YWdfXyI7CmZ1bmN0aW9uIHdyYXBTbWFydFNlcnZlUGVlcihwZWVyKSB7CiAgcmV0dXJuIHsKICAgIHBlZXIsCiAgICBhc3luYyBnZXRUYWdCeUlkKHRhZ0lkKSB7CiAgICAgIGlmICghcGVlci50YWdzLmhhcyh0YWdJZCkpIHsKICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9CiAgICAgIGNvbnN0IHBheWxvYWQgPSBwZWVyLmRhdGEuZ2V0KGAke1RBR19QUkVGSVh9JHt0YWdJZH1gKTsKICAgICAgcmV0dXJuIHsgaWQ6IHRhZ0lkLCBwYXlsb2FkIH07CiAgICB9CiAgfTsKfQp2YXIgVHlwZWRTb2NrZXQgPSBjbGFzcyBfVHlwZWRTb2NrZXQgewogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBTVEFUSUMgTUVUSE9EUwogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvKioKICAgKiBDcmVhdGVzIGEgVHlwZWRTb2NrZXQgY2xpZW50IHVzaW5nIG5hdGl2ZSBXZWJTb2NrZXQuCiAgICogV29ya3MgaW4gYm90aCBicm93c2VyIGFuZCBOb2RlLmpzIGVudmlyb25tZW50cy4KICAgKgogICAqIEBwYXJhbSB0eXBlZHJvdXRlckFyZyAtIFR5cGVkUm91dGVyIGZvciBoYW5kbGluZyBzZXJ2ZXItaW5pdGlhdGVkIHJlcXVlc3RzCiAgICogQHBhcmFtIHNlcnZlclVybEFyZyAtIFNlcnZlciBVUkwgKGUuZy4sICdodHRwOi8vbG9jYWxob3N0OjMwMDAnIG9yICd3c3M6Ly9leGFtcGxlLmNvbScpCiAgICogQHBhcmFtIG9wdGlvbnMgLSBDb25uZWN0aW9uIG9wdGlvbnMKICAgKgogICAqIEBleGFtcGxlCiAgICogYGBgdHlwZXNjcmlwdAogICAqIGNvbnN0IHR5cGVkUm91dGVyID0gbmV3IFR5cGVkUm91dGVyKCk7CiAgICogY29uc3QgY2xpZW50ID0gYXdhaXQgVHlwZWRTb2NrZXQuY3JlYXRlQ2xpZW50KAogICAqICAgdHlwZWRSb3V0ZXIsCiAgICogICAnaHR0cDovL2xvY2FsaG9zdDozMDAwJywKICAgKiAgIHsgYXV0b1JlY29ubmVjdDogdHJ1ZSB9CiAgICogKTsKICAgKiBgYGAKICAgKi8KICBzdGF0aWMgYXN5bmMgY3JlYXRlQ2xpZW50KHR5cGVkcm91dGVyQXJnLCBzZXJ2ZXJVcmxBcmcsIG9wdGlvbnMgPSB7fSkgewogICAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gewogICAgICBhdXRvUmVjb25uZWN0OiB0cnVlLAogICAgICBtYXhSZXRyaWVzOiAxMDAsCiAgICAgIGluaXRpYWxCYWNrb2ZmTXM6IDFlMywKICAgICAgbWF4QmFja29mZk1zOiA2ZTQKICAgIH07CiAgICBjb25zdCBvcHRzID0geyAuLi5kZWZhdWx0T3B0aW9uczIsIC4uLm9wdGlvbnMgfTsKICAgIGNvbnN0IHR5cGVkU29ja2V0ID0gbmV3IF9UeXBlZFNvY2tldCgiY2xpZW50IiwgdHlwZWRyb3V0ZXJBcmcpOwogICAgdHlwZWRTb2NrZXQuY2xpZW50T3B0aW9ucyA9IG9wdHM7CiAgICB0eXBlZFNvY2tldC5zZXJ2ZXJVcmwgPSBzZXJ2ZXJVcmxBcmc7CiAgICB0eXBlZFNvY2tldC5jdXJyZW50QmFja29mZiA9IG9wdHMuaW5pdGlhbEJhY2tvZmZNczsKICAgIGF3YWl0IHR5cGVkU29ja2V0LmNvbm5lY3QoKTsKICAgIHJldHVybiB0eXBlZFNvY2tldDsKICB9CiAgc3RhdGljIHsKICAgIHRoaXMudXNlV2luZG93TG9jYXRpb25PcmlnaW5VcmwgPSAoKSA9PiB7CiAgICAgIHJldHVybiBkaXN0X3RzX2V4cG9ydHMyMC5TbWFydHVybC5jcmVhdGVGcm9tVXJsKGdsb2JhbFRoaXMubG9jYXRpb24ub3JpZ2luKS50b1N0cmluZygpOwogICAgfTsKICB9CiAgLyoqCiAgICogQ3JlYXRlcyBhIFR5cGVkU29ja2V0IHNlcnZlciBmcm9tIGFuIGV4aXN0aW5nIFNtYXJ0U2VydmUgaW5zdGFuY2UuCiAgICogVGhpcyBpcyB0aGUgb25seSB3YXkgdG8gY3JlYXRlIGEgc2VydmVyLXNpZGUgVHlwZWRTb2NrZXQuCiAgICoKICAgKiBAcGFyYW0gc21hcnRTZXJ2ZUFyZyAtIFNtYXJ0U2VydmUgaW5zdGFuY2Ugd2l0aCB0eXBlZFJvdXRlciBjb25maWd1cmVkIGluIHdlYnNvY2tldCBvcHRpb25zCiAgICogQHBhcmFtIHR5cGVkUm91dGVyQXJnIC0gVHlwZWRSb3V0ZXIgZm9yIGhhbmRsaW5nIHJlcXVlc3RzIChtdXN0IG1hdGNoIFNtYXJ0U2VydmUncyB0eXBlZFJvdXRlcikKICAgKgogICAqIEBleGFtcGxlCiAgICogYGBgdHlwZXNjcmlwdAogICAqIGNvbnN0IHR5cGVkUm91dGVyID0gbmV3IFR5cGVkUm91dGVyKCk7CiAgICogY29uc3Qgc21hcnRTZXJ2ZSA9IG5ldyBTbWFydFNlcnZlKHsKICAgKiAgIHBvcnQ6IDMwMDAsCiAgICogICB3ZWJzb2NrZXQ6IHsKICAgKiAgICAgdHlwZWRSb3V0ZXIsCiAgICogICAgIG9uQ29ubmVjdGlvbk9wZW46IChwZWVyKSA9PiBwZWVyLnRhZ3MuYWRkKCdjbGllbnQnKQogICAqICAgfQogICAqIH0pOwogICAqIGF3YWl0IHNtYXJ0U2VydmUuc3RhcnQoKTsKICAgKiBjb25zdCB0eXBlZFNvY2tldCA9IFR5cGVkU29ja2V0LmZyb21TbWFydFNlcnZlKHNtYXJ0U2VydmUsIHR5cGVkUm91dGVyKTsKICAgKiBgYGAKICAgKi8KICBzdGF0aWMgZnJvbVNtYXJ0U2VydmUoc21hcnRTZXJ2ZUFyZywgdHlwZWRSb3V0ZXJBcmcpIHsKICAgIGNvbnN0IGNvbm5lY3Rpb25XcmFwcGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBfVHlwZWRTb2NrZXQucmVnaXN0ZXJUYWdIYW5kbGVycyh0eXBlZFJvdXRlckFyZyk7CiAgICBjb25zdCB0eXBlZFNvY2tldCA9IG5ldyBfVHlwZWRTb2NrZXQoInNlcnZlciIsIHR5cGVkUm91dGVyQXJnKTsKICAgIHR5cGVkU29ja2V0LnNtYXJ0U2VydmVSZWYgPSBzbWFydFNlcnZlQXJnOwogICAgdHlwZWRTb2NrZXQuc21hcnRTZXJ2ZUNvbm5lY3Rpb25XcmFwcGVycyA9IGNvbm5lY3Rpb25XcmFwcGVyczsKICAgIHJldHVybiB0eXBlZFNvY2tldDsKICB9CiAgLyoqCiAgICogUmVnaXN0ZXJzIGJ1aWx0LWluIFR5cGVkSGFuZGxlcnMgZm9yIHRhZyBtYW5hZ2VtZW50CiAgICovCiAgc3RhdGljIHJlZ2lzdGVyVGFnSGFuZGxlcnModHlwZWRSb3V0ZXIpIHsKICAgIHR5cGVkUm91dGVyLmFkZFR5cGVkSGFuZGxlcihuZXcgZGlzdF90c19leHBvcnRzMTUuVHlwZWRIYW5kbGVyKCJfX3R5cGVkc29ja2V0X3NldFRhZyIsIGFzeW5jIChkYXRhLCBtZXRhKSA9PiB7CiAgICAgIGNvbnN0IHBlZXIgPSBtZXRhPy5sb2NhbERhdGE/LnBlZXI7CiAgICAgIGlmICghcGVlcikgewogICAgICAgIGNvbnNvbGUud2Fybigic2V0VGFnOiBObyBwZWVyIGZvdW5kIGluIHJlcXVlc3QgY29udGV4dCIpOwogICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlIH07CiAgICAgIH0KICAgICAgcGVlci50YWdzLmFkZChkYXRhLm5hbWUpOwogICAgICBwZWVyLmRhdGEuc2V0KGAke1RBR19QUkVGSVh9JHtkYXRhLm5hbWV9YCwgZGF0YS5wYXlsb2FkKTsKICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9OwogICAgfSkpOwogICAgdHlwZWRSb3V0ZXIuYWRkVHlwZWRIYW5kbGVyKG5ldyBkaXN0X3RzX2V4cG9ydHMxNS5UeXBlZEhhbmRsZXIoIl9fdHlwZWRzb2NrZXRfcmVtb3ZlVGFnIiwgYXN5bmMgKGRhdGEsIG1ldGEpID0+IHsKICAgICAgY29uc3QgcGVlciA9IG1ldGE/LmxvY2FsRGF0YT8ucGVlcjsKICAgICAgaWYgKCFwZWVyKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJyZW1vdmVUYWc6IE5vIHBlZXIgZm91bmQgaW4gcmVxdWVzdCBjb250ZXh0Iik7CiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UgfTsKICAgICAgfQogICAgICBwZWVyLnRhZ3MuZGVsZXRlKGRhdGEubmFtZSk7CiAgICAgIHBlZXIuZGF0YS5kZWxldGUoYCR7VEFHX1BSRUZJWH0ke2RhdGEubmFtZX1gKTsKICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9OwogICAgfSkpOwogIH0KICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLy8gQ09OU1RSVUNUT1IKICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgY29uc3RydWN0b3Ioc2lkZUFyZywgdHlwZWRyb3V0ZXJBcmcpIHsKICAgIHRoaXMuc3RhdHVzU3ViamVjdCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLnJ4anMuU3ViamVjdCgpOwogICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzID0gIm5ldyI7CiAgICB0aGlzLndlYnNvY2tldCA9IG51bGw7CiAgICB0aGlzLmNsaWVudE9wdGlvbnMgPSBudWxsOwogICAgdGhpcy5zZXJ2ZXJVcmwgPSAiIjsKICAgIHRoaXMucmV0cnlDb3VudCA9IDA7CiAgICB0aGlzLmN1cnJlbnRCYWNrb2ZmID0gMWUzOwogICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgdGhpcy5zbWFydFNlcnZlUmVmID0gbnVsbDsKICAgIHRoaXMuc21hcnRTZXJ2ZUNvbm5lY3Rpb25XcmFwcGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICB0aGlzLnNpZGUgPSBzaWRlQXJnOwogICAgdGhpcy50eXBlZHJvdXRlciA9IHR5cGVkcm91dGVyQXJnOwogIH0KICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLy8gQ0xJRU5UIE1FVEhPRFMKICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLyoqCiAgICogQ29ubmVjdHMgdGhlIGNsaWVudCB0byB0aGUgc2VydmVyIHVzaW5nIG5hdGl2ZSBXZWJTb2NrZXQKICAgKi8KICBhc3luYyBjb25uZWN0KCkgewogICAgY29uc3QgZG9uZSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgdGhpcy51cGRhdGVTdGF0dXMoImNvbm5lY3RpbmciKTsKICAgIGNvbnN0IHdzVXJsID0gdGhpcy50b1dlYlNvY2tldFVybCh0aGlzLnNlcnZlclVybCk7CiAgICBjb25zb2xlLmxvZyhgVHlwZWRTb2NrZXQgY29ubmVjdGluZyB0byAke3dzVXJsfS4uLmApOwogICAgdGhpcy53ZWJzb2NrZXQgPSBuZXcgV2ViU29ja2V0KHdzVXJsKTsKICAgIGNvbnN0IGNvbm5lY3Rpb25UaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMgIT09ICJjb25uZWN0ZWQiKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJUeXBlZFNvY2tldCBjb25uZWN0aW9uIHRpbWVvdXQiKTsKICAgICAgICB0aGlzLndlYnNvY2tldD8uY2xvc2UoKTsKICAgICAgICBkb25lLnJlamVjdChuZXcgRXJyb3IoIkNvbm5lY3Rpb24gdGltZW91dCIpKTsKICAgICAgfQogICAgfSwgMWU0KTsKICAgIHRoaXMud2Vic29ja2V0Lm9ub3BlbiA9ICgpID0+IHsKICAgICAgY2xlYXJUaW1lb3V0KGNvbm5lY3Rpb25UaW1lb3V0KTsKICAgICAgY29uc29sZS5sb2coIlR5cGVkU29ja2V0IGNvbm5lY3RlZCEiKTsKICAgICAgdGhpcy51cGRhdGVTdGF0dXMoImNvbm5lY3RlZCIpOwogICAgICB0aGlzLnJldHJ5Q291bnQgPSAwOwogICAgICB0aGlzLmN1cnJlbnRCYWNrb2ZmID0gdGhpcy5jbGllbnRPcHRpb25zPy5pbml0aWFsQmFja29mZk1zID8/IDFlMzsKICAgICAgZG9uZS5yZXNvbHZlKCk7CiAgICB9OwogICAgdGhpcy53ZWJzb2NrZXQub25tZXNzYWdlID0gYXN5bmMgKGV2ZW50KSA9PiB7CiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlTWVzc2FnZShldmVudC5kYXRhKTsKICAgIH07CiAgICB0aGlzLndlYnNvY2tldC5vbmNsb3NlID0gKCkgPT4gewogICAgICBjbGVhclRpbWVvdXQoY29ubmVjdGlvblRpbWVvdXQpOwogICAgICB0aGlzLmhhbmRsZURpc2Nvbm5lY3QoKTsKICAgIH07CiAgICB0aGlzLndlYnNvY2tldC5vbmVycm9yID0gKGVycm9yKSA9PiB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIlR5cGVkU29ja2V0IFdlYlNvY2tldCBlcnJvcjoiLCBlcnJvcik7CiAgICB9OwogICAgdHJ5IHsKICAgICAgYXdhaXQgZG9uZS5wcm9taXNlOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNsZWFyVGltZW91dChjb25uZWN0aW9uVGltZW91dCk7CiAgICAgIGlmICh0aGlzLmNsaWVudE9wdGlvbnM/LmF1dG9SZWNvbm5lY3QpIHsKICAgICAgICBhd2FpdCB0aGlzLnNjaGVkdWxlUmVjb25uZWN0KCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgZXJyOwogICAgICB9CiAgICB9CiAgfQogIC8qKgogICAqIENvbnZlcnRzIGFuIEhUVFAoUykgVVJMIHRvIGEgV2ViU29ja2V0IFVSTAogICAqLwogIHRvV2ViU29ja2V0VXJsKHVybCkgewogICAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpOwogICAgY29uc3Qgd3NQcm90b2NvbCA9IHBhcnNlZC5wcm90b2NvbCA9PT0gImh0dHBzOiIgPyAid3NzOiIgOiAid3M6IjsKICAgIHJldHVybiBgJHt3c1Byb3RvY29sfS8vJHtwYXJzZWQuaG9zdH0ke3BhcnNlZC5wYXRobmFtZX1gOwogIH0KICAvKioKICAgKiBIYW5kbGVzIGluY29taW5nIFdlYlNvY2tldCBtZXNzYWdlcwogICAqLwogIGFzeW5jIGhhbmRsZU1lc3NhZ2UoZGF0YSkgewogICAgdHJ5IHsKICAgICAgY29uc3QgbWVzc2FnZVRleHQgPSB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgPyBkYXRhIDogbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGRhdGEpOwogICAgICBjb25zdCBtZXNzYWdlMiA9IGRpc3RfdHNfZXhwb3J0czEyLnBhcnNlKG1lc3NhZ2VUZXh0KTsKICAgICAgaWYgKG1lc3NhZ2UyLmNvcnJlbGF0aW9uPy5pZCAmJiB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5oYXMobWVzc2FnZTIuY29ycmVsYXRpb24uaWQpKSB7CiAgICAgICAgY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ1JlcXVlc3RzLmdldChtZXNzYWdlMi5jb3JyZWxhdGlvbi5pZCk7CiAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKG1lc3NhZ2UyLmNvcnJlbGF0aW9uLmlkKTsKICAgICAgICBwZW5kaW5nLnJlc29sdmUobWVzc2FnZTIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMudHlwZWRyb3V0ZXIucm91dGVBbmRBZGRSZXNwb25zZShtZXNzYWdlMik7CiAgICAgIGlmIChyZXNwb25zZSAmJiB0aGlzLndlYnNvY2tldD8ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHsKICAgICAgICB0aGlzLndlYnNvY2tldC5zZW5kKGRpc3RfdHNfZXhwb3J0czEyLnN0cmluZ2lmeShyZXNwb25zZSkpOwogICAgICB9CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiVHlwZWRTb2NrZXQgZmFpbGVkIHRvIHByb2Nlc3MgbWVzc2FnZToiLCBlcnIpOwogICAgfQogIH0KICAvKioKICAgKiBIYW5kbGVzIFdlYlNvY2tldCBkaXNjb25uZWN0aW9uCiAgICovCiAgaGFuZGxlRGlzY29ubmVjdCgpIHsKICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMgPT09ICJkaXNjb25uZWN0ZWQiKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMudXBkYXRlU3RhdHVzKCJkaXNjb25uZWN0ZWQiKTsKICAgIGlmICh0aGlzLmNsaWVudE9wdGlvbnM/LmF1dG9SZWNvbm5lY3QgJiYgdGhpcy5yZXRyeUNvdW50IDwgdGhpcy5jbGllbnRPcHRpb25zLm1heFJldHJpZXMpIHsKICAgICAgdGhpcy5zY2hlZHVsZVJlY29ubmVjdCgpOwogICAgfQogIH0KICAvKioKICAgKiBTY2hlZHVsZXMgYSByZWNvbm5lY3Rpb24gYXR0ZW1wdCB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYKICAgKi8KICBhc3luYyBzY2hlZHVsZVJlY29ubmVjdCgpIHsKICAgIGlmICghdGhpcy5jbGllbnRPcHRpb25zKQogICAgICByZXR1cm47CiAgICB0aGlzLnVwZGF0ZVN0YXR1cygicmVjb25uZWN0aW5nIik7CiAgICB0aGlzLnJldHJ5Q291bnQrKzsKICAgIGNvbnN0IGppdHRlciA9IHRoaXMuY3VycmVudEJhY2tvZmYgKiAwLjIgKiAoTWF0aC5yYW5kb20oKSAqIDIgLSAxKTsKICAgIGNvbnN0IGRlbGF5MiA9IE1hdGgubWluKHRoaXMuY3VycmVudEJhY2tvZmYgKyBqaXR0ZXIsIHRoaXMuY2xpZW50T3B0aW9ucy5tYXhCYWNrb2ZmTXMpOwogICAgY29uc29sZS5sb2coYFR5cGVkU29ja2V0IHJlY29ubmVjdGluZyBpbiAke01hdGgucm91bmQoZGVsYXkyKX1tcyAoYXR0ZW1wdCAke3RoaXMucmV0cnlDb3VudH0vJHt0aGlzLmNsaWVudE9wdGlvbnMubWF4UmV0cmllc30pYCk7CiAgICBhd2FpdCBkaXN0X3RzX2V4cG9ydHMzLmRlbGF5Rm9yKGRlbGF5Mik7CiAgICB0aGlzLmN1cnJlbnRCYWNrb2ZmID0gTWF0aC5taW4odGhpcy5jdXJyZW50QmFja29mZiAqIDIsIHRoaXMuY2xpZW50T3B0aW9ucy5tYXhCYWNrb2ZmTXMpOwogICAgdHJ5IHsKICAgICAgYXdhaXQgdGhpcy5jb25uZWN0KCk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiVHlwZWRTb2NrZXQgcmVjb25uZWN0aW9uIGZhaWxlZDoiLCBlcnIpOwogICAgfQogIH0KICAvKioKICAgKiBVcGRhdGVzIGNvbm5lY3Rpb24gc3RhdHVzIGFuZCBub3RpZmllcyBzdWJzY3JpYmVycwogICAqLwogIHVwZGF0ZVN0YXR1cyhzdGF0dXMpIHsKICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMgIT09IHN0YXR1cykgewogICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMgPSBzdGF0dXM7CiAgICAgIHRoaXMuc3RhdHVzU3ViamVjdC5uZXh0KHN0YXR1cyk7CiAgICB9CiAgfQogIC8qKgogICAqIFNlbmRzIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIGFuZCB3YWl0cyBmb3IgcmVzcG9uc2UgKGNsaWVudC1zaWRlKQogICAqLwogIGFzeW5jIHNlbmRSZXF1ZXN0KHJlcXVlc3QpIHsKICAgIGlmICghdGhpcy53ZWJzb2NrZXQgfHwgdGhpcy53ZWJzb2NrZXQucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0Lk9QRU4pIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXZWJTb2NrZXQgbm90IGNvbm5lY3RlZCIpOwogICAgfQogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgIGNvbnN0IHRpbWVvdXQyID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMuZGVsZXRlKHJlcXVlc3QuY29ycmVsYXRpb24uaWQpOwogICAgICAgIHJlamVjdChuZXcgRXJyb3IoIlJlcXVlc3QgdGltZW91dCIpKTsKICAgICAgfSwgM2U0KTsKICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMuc2V0KHJlcXVlc3QuY29ycmVsYXRpb24uaWQsIHsKICAgICAgICByZXNvbHZlOiAocmVzcG9uc2UpID0+IHsKICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0Mik7CiAgICAgICAgICByZXNvbHZlMihyZXNwb25zZSk7CiAgICAgICAgfSwKICAgICAgICByZWplY3Q6IChlcnJvcikgPT4gewogICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTsKICAgICAgICAgIHJlamVjdChlcnJvcik7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy53ZWJzb2NrZXQuc2VuZChkaXN0X3RzX2V4cG9ydHMxMi5zdHJpbmdpZnkocmVxdWVzdCkpOwogICAgfSk7CiAgfQogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBQVUJMSUMgQVBJIC0gU0hBUkVECiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC8qKgogICAqIENyZWF0ZXMgYSBUeXBlZFJlcXVlc3QgZm9yIHRoZSBzcGVjaWZpZWQgbWV0aG9kLgogICAqIE9uIGNsaWVudHMsIHNlbmRzIHRvIHRoZSBzZXJ2ZXIuCiAgICogT24gc2VydmVycywgc2VuZHMgdG8gdGhlIHNwZWNpZmllZCB0YXJnZXQgY29ubmVjdGlvbi4KICAgKi8KICBjcmVhdGVUeXBlZFJlcXVlc3QobWV0aG9kTmFtZSwgdGFyZ2V0Q29ubmVjdGlvbikgewogICAgY29uc3QgcG9zdE1ldGhvZCA9IGFzeW5jIChyZXF1ZXN0RGF0YUFyZykgPT4gewogICAgICBpZiAodGhpcy5zaWRlID09PSAiY2xpZW50IikgewogICAgICAgIHJldHVybiB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3REYXRhQXJnKTsKICAgICAgfQogICAgICBpZiAoIXRoaXMuc21hcnRTZXJ2ZVJlZikgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiU2VydmVyIG5vdCBpbml0aWFsaXplZCIpOwogICAgICB9CiAgICAgIGxldCB0YXJnZXQgPSB0YXJnZXRDb25uZWN0aW9uOwogICAgICBpZiAoIXRhcmdldCkgewogICAgICAgIGNvbnN0IGFsbENvbm5lY3Rpb25zID0gdGhpcy5zbWFydFNlcnZlUmVmLmdldFdlYlNvY2tldENvbm5lY3Rpb25zKCk7CiAgICAgICAgaWYgKGFsbENvbm5lY3Rpb25zLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgY29uc3QgcGVlciA9IGFsbENvbm5lY3Rpb25zWzBdOwogICAgICAgICAgdGFyZ2V0ID0gdGhpcy5nZXRPckNyZWF0ZVdyYXBwZXIocGVlcik7CiAgICAgICAgfSBlbHNlIGlmIChhbGxDb25uZWN0aW9ucy5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gV2ViU29ja2V0IGNvbm5lY3Rpb25zIGF2YWlsYWJsZSIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk11bHRpcGxlIGNvbm5lY3Rpb25zIGF2YWlsYWJsZSAtIHNwZWNpZnkgdGFyZ2V0Q29ubmVjdGlvbiIpOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBpbnRlcmVzdCA9IGF3YWl0IHRoaXMudHlwZWRyb3V0ZXIuZmlyZUV2ZW50SW50ZXJlc3RNYXAuYWRkSW50ZXJlc3QocmVxdWVzdERhdGFBcmcuY29ycmVsYXRpb24uaWQsIHJlcXVlc3REYXRhQXJnKTsKICAgICAgdGFyZ2V0LnBlZXIuc2VuZChkaXN0X3RzX2V4cG9ydHMxMi5zdHJpbmdpZnkocmVxdWVzdERhdGFBcmcpKTsKICAgICAgcmV0dXJuIGF3YWl0IGludGVyZXN0LmludGVyZXN0RnVsbGZpbGxlZDsKICAgIH07CiAgICByZXR1cm4gbmV3IGRpc3RfdHNfZXhwb3J0czE1LlR5cGVkUmVxdWVzdChuZXcgZGlzdF90c19leHBvcnRzMTUuVHlwZWRUYXJnZXQoeyBwb3N0TWV0aG9kIH0pLCBtZXRob2ROYW1lKTsKICB9CiAgLyoqCiAgICogR2V0cyB0aGUgY3VycmVudCBjb25uZWN0aW9uIHN0YXR1cwogICAqLwogIGdldFN0YXR1cygpIHsKICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25TdGF0dXM7CiAgfQogIC8qKgogICAqIFN0b3BzIHRoZSBUeXBlZFNvY2tldCBjbGllbnQgb3IgY2xlYW5zIHVwIHNlcnZlciBzdGF0ZQogICAqLwogIGFzeW5jIHN0b3AoKSB7CiAgICBpZiAodGhpcy5zaWRlID09PSAiY2xpZW50IikgewogICAgICBpZiAodGhpcy5jbGllbnRPcHRpb25zKSB7CiAgICAgICAgdGhpcy5jbGllbnRPcHRpb25zLmF1dG9SZWNvbm5lY3QgPSBmYWxzZTsKICAgICAgfQogICAgICBpZiAodGhpcy53ZWJzb2NrZXQpIHsKICAgICAgICB0aGlzLndlYnNvY2tldC5jbG9zZSgpOwogICAgICAgIHRoaXMud2Vic29ja2V0ID0gbnVsbDsKICAgICAgfQogICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5jbGVhcigpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5zbWFydFNlcnZlQ29ubmVjdGlvbldyYXBwZXJzLmNsZWFyKCk7CiAgICB9CiAgfQogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBDTElFTlQtT05MWSBNRVRIT0RTCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC8qKgogICAqIFNldHMgYSB0YWcgb24gdGhpcyBjbGllbnQgY29ubmVjdGlvbi4KICAgKiBUYWdzIGFyZSBzdG9yZWQgb24gdGhlIHNlcnZlciBhbmQgY2FuIGJlIHVzZWQgZm9yIGZpbHRlcmluZy4KICAgKiBAY2xpZW50LW9ubHkKICAgKi8KICBhc3luYyBzZXRUYWcobmFtZSwgcGF5bG9hZCkgewogICAgaWYgKHRoaXMuc2lkZSAhPT0gImNsaWVudCIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJzZXRUYWcgaXMgb25seSBhdmFpbGFibGUgb24gY2xpZW50cyIpOwogICAgfQogICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuY3JlYXRlVHlwZWRSZXF1ZXN0KCJfX3R5cGVkc29ja2V0X3NldFRhZyIpOwogICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0LmZpcmUoeyBuYW1lLCBwYXlsb2FkIH0pOwogICAgaWYgKCFyZXNwb25zZS5zdWNjZXNzKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNldCB0YWcgb24gc2VydmVyIik7CiAgICB9CiAgfQogIC8qKgogICAqIFJlbW92ZXMgYSB0YWcgZnJvbSB0aGlzIGNsaWVudCBjb25uZWN0aW9uLgogICAqIEBjbGllbnQtb25seQogICAqLwogIGFzeW5jIHJlbW92ZVRhZyhuYW1lKSB7CiAgICBpZiAodGhpcy5zaWRlICE9PSAiY2xpZW50IikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoInJlbW92ZVRhZyBpcyBvbmx5IGF2YWlsYWJsZSBvbiBjbGllbnRzIik7CiAgICB9CiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5jcmVhdGVUeXBlZFJlcXVlc3QoIl9fdHlwZWRzb2NrZXRfcmVtb3ZlVGFnIik7CiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QuZmlyZSh7IG5hbWUgfSk7CiAgICBpZiAoIXJlc3BvbnNlLnN1Y2Nlc3MpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gcmVtb3ZlIHRhZyBvbiBzZXJ2ZXIiKTsKICAgIH0KICB9CiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC8vIFNFUlZFUi1PTkxZIE1FVEhPRFMKICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLyoqCiAgICogR2V0cyBvciBjcmVhdGVzIGEgY29ubmVjdGlvbiB3cmFwcGVyIGZvciBhIHBlZXIKICAgKi8KICBnZXRPckNyZWF0ZVdyYXBwZXIocGVlcikgewogICAgbGV0IHdyYXBwZXIgPSB0aGlzLnNtYXJ0U2VydmVDb25uZWN0aW9uV3JhcHBlcnMuZ2V0KHBlZXIuaWQpOwogICAgaWYgKCF3cmFwcGVyKSB7CiAgICAgIHdyYXBwZXIgPSB3cmFwU21hcnRTZXJ2ZVBlZXIocGVlcik7CiAgICAgIHRoaXMuc21hcnRTZXJ2ZUNvbm5lY3Rpb25XcmFwcGVycy5zZXQocGVlci5pZCwgd3JhcHBlcik7CiAgICB9CiAgICByZXR1cm4gd3JhcHBlcjsKICB9CiAgLyoqCiAgICogRmluZHMgYWxsIGNvbm5lY3Rpb25zIG1hdGNoaW5nIHRoZSBmaWx0ZXIgZnVuY3Rpb24uCiAgICogQHNlcnZlci1vbmx5CiAgICovCiAgYXN5bmMgZmluZEFsbFRhcmdldENvbm5lY3Rpb25zKGFzeW5jRmluZEZ1bmNBcmcpIHsKICAgIGlmICh0aGlzLnNpZGUgIT09ICJzZXJ2ZXIiIHx8ICF0aGlzLnNtYXJ0U2VydmVSZWYpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJmaW5kQWxsVGFyZ2V0Q29ubmVjdGlvbnMgaXMgb25seSBhdmFpbGFibGUgb24gc2VydmVycyIpOwogICAgfQogICAgY29uc3QgbWF0Y2hpbmdDb25uZWN0aW9ucyA9IFtdOwogICAgZm9yIChjb25zdCBwZWVyIG9mIHRoaXMuc21hcnRTZXJ2ZVJlZi5nZXRXZWJTb2NrZXRDb25uZWN0aW9ucygpKSB7CiAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmdldE9yQ3JlYXRlV3JhcHBlcihwZWVyKTsKICAgICAgaWYgKGF3YWl0IGFzeW5jRmluZEZ1bmNBcmcod3JhcHBlcikpIHsKICAgICAgICBtYXRjaGluZ0Nvbm5lY3Rpb25zLnB1c2god3JhcHBlcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBtYXRjaGluZ0Nvbm5lY3Rpb25zOwogIH0KICAvKioKICAgKiBGaW5kcyB0aGUgZmlyc3QgY29ubmVjdGlvbiBtYXRjaGluZyB0aGUgZmlsdGVyIGZ1bmN0aW9uLgogICAqIEBzZXJ2ZXItb25seQogICAqLwogIGFzeW5jIGZpbmRUYXJnZXRDb25uZWN0aW9uKGFzeW5jRmluZEZ1bmNBcmcpIHsKICAgIGNvbnN0IGFsbE1hdGNoaW5nID0gYXdhaXQgdGhpcy5maW5kQWxsVGFyZ2V0Q29ubmVjdGlvbnMoYXN5bmNGaW5kRnVuY0FyZyk7CiAgICByZXR1cm4gYWxsTWF0Y2hpbmdbMF07CiAgfQogIC8qKgogICAqIEZpbmRzIGFsbCBjb25uZWN0aW9ucyB3aXRoIHRoZSBzcGVjaWZpZWQgdGFnLgogICAqIEBzZXJ2ZXItb25seQogICAqLwogIGFzeW5jIGZpbmRBbGxUYXJnZXRDb25uZWN0aW9uc0J5VGFnKGtleUFyZywgcGF5bG9hZEFyZykgewogICAgaWYgKHRoaXMuc2lkZSAhPT0gInNlcnZlciIgfHwgIXRoaXMuc21hcnRTZXJ2ZVJlZikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoImZpbmRBbGxUYXJnZXRDb25uZWN0aW9uc0J5VGFnIGlzIG9ubHkgYXZhaWxhYmxlIG9uIHNlcnZlcnMiKTsKICAgIH0KICAgIGNvbnN0IHBlZXJzID0gdGhpcy5zbWFydFNlcnZlUmVmLmdldFdlYlNvY2tldENvbm5lY3Rpb25zQnlUYWcoa2V5QXJnKTsKICAgIGNvbnN0IHJlc3VsdHMgPSBbXTsKICAgIGZvciAoY29uc3QgcGVlciBvZiBwZWVycykgewogICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5nZXRPckNyZWF0ZVdyYXBwZXIocGVlcik7CiAgICAgIGlmIChwYXlsb2FkQXJnICE9PSB2b2lkIDApIHsKICAgICAgICBjb25zdCB0YWcgPSBhd2FpdCB3cmFwcGVyLmdldFRhZ0J5SWQoa2V5QXJnKTsKICAgICAgICBpZiAoZGlzdF90c19leHBvcnRzMTIuc3RyaW5naWZ5KHRhZz8ucGF5bG9hZCkgIT09IGRpc3RfdHNfZXhwb3J0czEyLnN0cmluZ2lmeShwYXlsb2FkQXJnKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlc3VsdHMucHVzaCh3cmFwcGVyKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvKioKICAgKiBGaW5kcyB0aGUgZmlyc3QgY29ubmVjdGlvbiB3aXRoIHRoZSBzcGVjaWZpZWQgdGFnLgogICAqIEBzZXJ2ZXItb25seQogICAqLwogIGFzeW5jIGZpbmRUYXJnZXRDb25uZWN0aW9uQnlUYWcoa2V5QXJnLCBwYXlsb2FkQXJnKSB7CiAgICBjb25zdCBhbGxSZXN1bHRzID0gYXdhaXQgdGhpcy5maW5kQWxsVGFyZ2V0Q29ubmVjdGlvbnNCeVRhZyhrZXlBcmcsIHBheWxvYWRBcmcpOwogICAgcmV0dXJuIGFsbFJlc3VsdHNbMF07CiAgfQp9OwoKLy8gdHNfd2ViL3BsdWdpbnMudHMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMTUoKTsKaW5pdF9kaXN0X3RzMigpOwp2YXIgaHRtbDcgPSBiMjsKdmFyIGNzczIgPSBpOwp2YXIgY3NzTWFuYWdlcjIgPSBjc3NNYW5hZ2VyOwp2YXIgY3VzdG9tRWxlbWVudCA9IHQ0Owp2YXIgcHJvcGVydHkgPSBuNTsKdmFyIHN0YXRlID0gcjU7CnZhciBEZWVzRWxlbWVudDIgPSBEZWVzRWxlbWVudDsKCi8vIHRzX3dlYi9zZXJ2aWNlcy9hcGkuc2VydmljZS50cwp2YXIgQXBpU2VydmljZSA9IGNsYXNzIHsKICBiYXNlVXJsOwogIGNvbnN0cnVjdG9yKCkgewogICAgdGhpcy5iYXNlVXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiArICIvdHlwZWRyZXF1ZXN0IjsKICB9CiAgLyoqCiAgICogTWFrZSBhIHR5cGVkIHJlcXVlc3QgdG8gdGhlIGJhY2tlbmQKICAgKi8KICBhc3luYyByZXF1ZXN0KG1ldGhvZCwgcmVxdWVzdERhdGEpIHsKICAgIGNvbnN0IHR5cGVkUmVxdWVzdCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxNS5UeXBlZFJlcXVlc3QodGhpcy5iYXNlVXJsLCBtZXRob2QpOwogICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0eXBlZFJlcXVlc3QuZmlyZShyZXF1ZXN0RGF0YSk7CiAgICByZXR1cm4gcmVzcG9uc2U7CiAgfQogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBTMyBBUEkgTWV0aG9kcwogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICBhc3luYyBsaXN0QnVja2V0cygpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgibGlzdEJ1Y2tldHMiLCB7fSk7CiAgICByZXR1cm4gcmVzdWx0LmJ1Y2tldHM7CiAgfQogIGFzeW5jIGNyZWF0ZUJ1Y2tldChidWNrZXROYW1lKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoCiAgICAgICJjcmVhdGVCdWNrZXQiLAogICAgICB7IGJ1Y2tldE5hbWUgfQogICAgKTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgZGVsZXRlQnVja2V0KGJ1Y2tldE5hbWUpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgKICAgICAgImRlbGV0ZUJ1Y2tldCIsCiAgICAgIHsgYnVja2V0TmFtZSB9CiAgICApOwogICAgcmV0dXJuIHJlc3VsdC5zdWNjZXNzOwogIH0KICBhc3luYyBsaXN0T2JqZWN0cyhidWNrZXROYW1lLCBwcmVmaXg0LCBkZWxpbWl0ZXIpIHsKICAgIHJldHVybiB0aGlzLnJlcXVlc3QoImxpc3RPYmplY3RzIiwgeyBidWNrZXROYW1lLCBwcmVmaXg6IHByZWZpeDQsIGRlbGltaXRlciB9KTsKICB9CiAgYXN5bmMgZ2V0T2JqZWN0KGJ1Y2tldE5hbWUsIGtleTIpIHsKICAgIHJldHVybiB0aGlzLnJlcXVlc3QoImdldE9iamVjdCIsIHsgYnVja2V0TmFtZSwga2V5OiBrZXkyIH0pOwogIH0KICBhc3luYyBnZXRPYmplY3RNZXRhZGF0YShidWNrZXROYW1lLCBrZXkyKSB7CiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCJnZXRPYmplY3RNZXRhZGF0YSIsIHsgYnVja2V0TmFtZSwga2V5OiBrZXkyIH0pOwogIH0KICBhc3luYyBwdXRPYmplY3QoYnVja2V0TmFtZSwga2V5MiwgY29udGVudDMsIGNvbnRlbnRUeXBlKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoInB1dE9iamVjdCIsIHsgYnVja2V0TmFtZSwga2V5OiBrZXkyLCBjb250ZW50OiBjb250ZW50MywgY29udGVudFR5cGUgfSk7CiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3M7CiAgfQogIGFzeW5jIGRlbGV0ZU9iamVjdChidWNrZXROYW1lLCBrZXkyKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoImRlbGV0ZU9iamVjdCIsIHsgYnVja2V0TmFtZSwga2V5OiBrZXkyIH0pOwogICAgcmV0dXJuIHJlc3VsdC5zdWNjZXNzOwogIH0KICBhc3luYyBkZWxldGVQcmVmaXgoYnVja2V0TmFtZSwgcHJlZml4NCkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJkZWxldGVQcmVmaXgiLCB7IGJ1Y2tldE5hbWUsIHByZWZpeDogcHJlZml4NCB9KTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgZ2V0T2JqZWN0VXJsKGJ1Y2tldE5hbWUsIGtleTIpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgiZ2V0T2JqZWN0VXJsIiwgeyBidWNrZXROYW1lLCBrZXk6IGtleTIgfSk7CiAgICByZXR1cm4gcmVzdWx0LnVybDsKICB9CiAgYXN5bmMgY29weU9iamVjdChzb3VyY2VCdWNrZXQsIHNvdXJjZUtleSwgZGVzdEJ1Y2tldCwgZGVzdEtleSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJjb3B5T2JqZWN0IiwgeyBzb3VyY2VCdWNrZXQsIHNvdXJjZUtleSwgZGVzdEJ1Y2tldCwgZGVzdEtleSB9KTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC8vIE1vbmdvREIgQVBJIE1ldGhvZHMKICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgYXN5bmMgbGlzdERhdGFiYXNlcygpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgKICAgICAgImxpc3REYXRhYmFzZXMiLAogICAgICB7fQogICAgKTsKICAgIHJldHVybiByZXN1bHQuZGF0YWJhc2VzOwogIH0KICBhc3luYyBjcmVhdGVEYXRhYmFzZShkYXRhYmFzZU5hbWUpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgKICAgICAgImNyZWF0ZURhdGFiYXNlIiwKICAgICAgeyBkYXRhYmFzZU5hbWUgfQogICAgKTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgZHJvcERhdGFiYXNlKGRhdGFiYXNlTmFtZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KAogICAgICAiZHJvcERhdGFiYXNlIiwKICAgICAgeyBkYXRhYmFzZU5hbWUgfQogICAgKTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgbGlzdENvbGxlY3Rpb25zKGRhdGFiYXNlTmFtZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJsaXN0Q29sbGVjdGlvbnMiLCB7IGRhdGFiYXNlTmFtZSB9KTsKICAgIHJldHVybiByZXN1bHQuY29sbGVjdGlvbnM7CiAgfQogIGFzeW5jIGNyZWF0ZUNvbGxlY3Rpb24oZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJjcmVhdGVDb2xsZWN0aW9uIiwgeyBkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lIH0pOwogICAgcmV0dXJuIHJlc3VsdC5zdWNjZXNzOwogIH0KICBhc3luYyBkcm9wQ29sbGVjdGlvbihkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoImRyb3BDb2xsZWN0aW9uIiwgeyBkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lIH0pOwogICAgcmV0dXJuIHJlc3VsdC5zdWNjZXNzOwogIH0KICBhc3luYyBmaW5kRG9jdW1lbnRzKGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUsIG9wdGlvbnMpIHsKICAgIHJldHVybiB0aGlzLnJlcXVlc3QoImZpbmREb2N1bWVudHMiLCB7CiAgICAgIGRhdGFiYXNlTmFtZSwKICAgICAgY29sbGVjdGlvbk5hbWUsCiAgICAgIC4uLm9wdGlvbnMKICAgIH0pOwogIH0KICBhc3luYyBnZXREb2N1bWVudChkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBkb2N1bWVudElkKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoImdldERvY3VtZW50IiwgeyBkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBkb2N1bWVudElkIH0pOwogICAgcmV0dXJuIHJlc3VsdC5kb2N1bWVudDsKICB9CiAgYXN5bmMgaW5zZXJ0RG9jdW1lbnQoZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwgZG9jdW1lbnQ0KSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoImluc2VydERvY3VtZW50IiwgeyBkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBkb2N1bWVudDogZG9jdW1lbnQ0IH0pOwogICAgcmV0dXJuIHJlc3VsdC5pbnNlcnRlZElkOwogIH0KICBhc3luYyB1cGRhdGVEb2N1bWVudChkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBkb2N1bWVudElkLCB1cGRhdGUpIHsKICAgIHJldHVybiB0aGlzLnJlcXVlc3QoInVwZGF0ZURvY3VtZW50IiwgewogICAgICBkYXRhYmFzZU5hbWUsCiAgICAgIGNvbGxlY3Rpb25OYW1lLAogICAgICBkb2N1bWVudElkLAogICAgICB1cGRhdGUKICAgIH0pOwogIH0KICBhc3luYyBkZWxldGVEb2N1bWVudChkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBkb2N1bWVudElkKSB7CiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCJkZWxldGVEb2N1bWVudCIsIHsgZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwgZG9jdW1lbnRJZCB9KTsKICB9CiAgYXN5bmMgcnVuQWdncmVnYXRpb24oZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwgcGlwZWxpbmUpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgicnVuQWdncmVnYXRpb24iLCB7IGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUsIHBpcGVsaW5lIH0pOwogICAgcmV0dXJuIHJlc3VsdC5yZXN1bHRzOwogIH0KICBhc3luYyBsaXN0SW5kZXhlcyhkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoImxpc3RJbmRleGVzIiwgeyBkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lIH0pOwogICAgcmV0dXJuIHJlc3VsdC5pbmRleGVzOwogIH0KICBhc3luYyBjcmVhdGVJbmRleChkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBrZXlzMiwgb3B0aW9ucykgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJjcmVhdGVJbmRleCIsIHsgZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwga2V5czoga2V5czIsIG9wdGlvbnMgfSk7CiAgICByZXR1cm4gcmVzdWx0LmluZGV4TmFtZTsKICB9CiAgYXN5bmMgZHJvcEluZGV4KGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUsIGluZGV4TmFtZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJkcm9wSW5kZXgiLCB7IGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUsIGluZGV4TmFtZSB9KTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgZ2V0Q29sbGVjdGlvblN0YXRzKGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgiZ2V0Q29sbGVjdGlvblN0YXRzIiwgeyBkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lIH0pOwogICAgcmV0dXJuIHJlc3VsdC5zdGF0czsKICB9CiAgYXN5bmMgZ2V0U2VydmVyU3RhdHVzKCkgewogICAgcmV0dXJuIHRoaXMucmVxdWVzdCgiZ2V0U2VydmVyU3RhdHVzIiwge30pOwogIH0KICBhc3luYyBnZXREYXRhYmFzZVN0YXRzKGRhdGFiYXNlTmFtZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJnZXREYXRhYmFzZVN0YXRzIiwgeyBkYXRhYmFzZU5hbWUgfSk7CiAgICByZXR1cm4gcmVzdWx0LnN0YXRzOwogIH0KfTsKCi8vIHRzX3dlYi9zZXJ2aWNlcy9jaGFuZ2VzdHJlYW0uc2VydmljZS50cwp2YXIgQ2hhbmdlU3RyZWFtU2VydmljZSA9IGNsYXNzIHsKICB0eXBlZFNvY2tldCA9IG51bGw7CiAgaXNDb25uZWN0ZWQgPSBmYWxzZTsKICBpc0Nvbm5lY3RpbmcgPSBmYWxzZTsKICBzdWJzY3JpcHRpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAvLyBSeEpTIFN1YmplY3RzIGZvciBVSSBjb21wb25lbnRzCiAgbW9uZ29DaGFuZ2VzJCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLnJ4anMuU3ViamVjdCgpOwogIHMzQ2hhbmdlcyQgPSBuZXcgZGlzdF90c19leHBvcnRzMi5yeGpzLlN1YmplY3QoKTsKICBhY3Rpdml0eUV2ZW50cyQgPSBuZXcgZGlzdF90c19leHBvcnRzMi5yeGpzLlN1YmplY3QoKTsKICBjb25uZWN0aW9uU3RhdHVzJCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLnJ4anMuUmVwbGF5U3ViamVjdCgxKTsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dCgiZGlzY29ubmVjdGVkIik7CiAgfQogIC8qKgogICAqIENvbm5lY3QgdG8gdGhlIFdlYlNvY2tldCBzZXJ2ZXIKICAgKi8KICBhc3luYyBjb25uZWN0KCkgewogICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQgfHwgdGhpcy5pc0Nvbm5lY3RpbmcpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5pc0Nvbm5lY3RpbmcgPSB0cnVlOwogICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KCJjb25uZWN0aW5nIik7CiAgICB0cnkgewogICAgICBjb25zdCBjbGllbnRSb3V0ZXIgPSBuZXcgZGlzdF90c19leHBvcnRzMTUuVHlwZWRSb3V0ZXIoKTsKICAgICAgdGhpcy5yZWdpc3RlclB1c2hIYW5kbGVycyhjbGllbnRSb3V0ZXIpOwogICAgICB0aGlzLnR5cGVkU29ja2V0ID0gYXdhaXQgZGlzdF90c19leHBvcnRzMzAuVHlwZWRTb2NrZXQuY3JlYXRlQ2xpZW50KAogICAgICAgIGNsaWVudFJvdXRlciwKICAgICAgICBkaXN0X3RzX2V4cG9ydHMzMC5UeXBlZFNvY2tldC51c2VXaW5kb3dMb2NhdGlvbk9yaWdpblVybCgpCiAgICAgICk7CiAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSB0cnVlOwogICAgICB0aGlzLmlzQ29ubmVjdGluZyA9IGZhbHNlOwogICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoImNvbm5lY3RlZCIpOwogICAgICBjb25zb2xlLmxvZygiW0NoYW5nZVN0cmVhbV0gV2ViU29ja2V0IGNvbm5lY3RlZCIpOwogICAgICB0aGlzLnR5cGVkU29ja2V0LnN0YXR1c1N1YmplY3Quc3Vic2NyaWJlKChzdGF0dXMpID0+IHsKICAgICAgICBpZiAoc3RhdHVzID09PSAiZGlzY29ubmVjdGVkIikgewogICAgICAgICAgdGhpcy5oYW5kbGVEaXNjb25uZWN0KCk7CiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09ICJjb25uZWN0ZWQiKSB7CiAgICAgICAgICB0aGlzLmhhbmRsZVJlY29ubmVjdCgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICB0aGlzLmlzQ29ubmVjdGluZyA9IGZhbHNlOwogICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoImRpc2Nvbm5lY3RlZCIpOwogICAgICBjb25zb2xlLmVycm9yKCJbQ2hhbmdlU3RyZWFtXSBGYWlsZWQgdG8gY29ubmVjdDoiLCBlcnJvcik7CiAgICAgIHRocm93IGVycm9yOwogICAgfQogIH0KICAvKioKICAgKiBEaXNjb25uZWN0IGZyb20gdGhlIFdlYlNvY2tldCBzZXJ2ZXIKICAgKi8KICBhc3luYyBkaXNjb25uZWN0KCkgewogICAgaWYgKCF0aGlzLnR5cGVkU29ja2V0KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRyeSB7CiAgICAgIGF3YWl0IHRoaXMudHlwZWRTb2NrZXQuc3RvcCgpOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS5lcnJvcigiW0NoYW5nZVN0cmVhbV0gRXJyb3IgZHVyaW5nIGRpc2Nvbm5lY3Q6IiwgZXJyb3IpOwogICAgfQogICAgdGhpcy50eXBlZFNvY2tldCA9IG51bGw7CiAgICB0aGlzLmlzQ29ubmVjdGVkID0gZmFsc2U7CiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuY2xlYXIoKTsKICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dCgiZGlzY29ubmVjdGVkIik7CiAgICBjb25zb2xlLmxvZygiW0NoYW5nZVN0cmVhbV0gV2ViU29ja2V0IGRpc2Nvbm5lY3RlZCIpOwogIH0KICAvKioKICAgKiBSZWdpc3RlciBoYW5kbGVycyBmb3Igc2VydmVyIHB1c2ggZXZlbnRzCiAgICovCiAgcmVnaXN0ZXJQdXNoSGFuZGxlcnMocm91dGVyKSB7CiAgICByb3V0ZXIuYWRkVHlwZWRIYW5kbGVyKAogICAgICBuZXcgZGlzdF90c19leHBvcnRzMTUuVHlwZWRIYW5kbGVyKAogICAgICAgICJwdXNoTW9uZ29DaGFuZ2UiLAogICAgICAgIGFzeW5jIChkYXRhKSA9PiB7CiAgICAgICAgICB0aGlzLm1vbmdvQ2hhbmdlcyQubmV4dChkYXRhLmV2ZW50KTsKICAgICAgICAgIHJldHVybiB7IHJlY2VpdmVkOiB0cnVlIH07CiAgICAgICAgfQogICAgICApCiAgICApOwogICAgcm91dGVyLmFkZFR5cGVkSGFuZGxlcigKICAgICAgbmV3IGRpc3RfdHNfZXhwb3J0czE1LlR5cGVkSGFuZGxlcigKICAgICAgICAicHVzaFMzQ2hhbmdlIiwKICAgICAgICBhc3luYyAoZGF0YSkgPT4gewogICAgICAgICAgdGhpcy5zM0NoYW5nZXMkLm5leHQoZGF0YS5ldmVudCk7CiAgICAgICAgICByZXR1cm4geyByZWNlaXZlZDogdHJ1ZSB9OwogICAgICAgIH0KICAgICAgKQogICAgKTsKICAgIHJvdXRlci5hZGRUeXBlZEhhbmRsZXIoCiAgICAgIG5ldyBkaXN0X3RzX2V4cG9ydHMxNS5UeXBlZEhhbmRsZXIoCiAgICAgICAgInB1c2hBY3Rpdml0eUV2ZW50IiwKICAgICAgICBhc3luYyAoZGF0YSkgPT4gewogICAgICAgICAgdGhpcy5hY3Rpdml0eUV2ZW50cyQubmV4dChkYXRhLmV2ZW50KTsKICAgICAgICAgIHJldHVybiB7IHJlY2VpdmVkOiB0cnVlIH07CiAgICAgICAgfQogICAgICApCiAgICApOwogIH0KICAvKioKICAgKiBIYW5kbGUgV2ViU29ja2V0IGRpc2Nvbm5lY3Rpb24KICAgKi8KICBoYW5kbGVEaXNjb25uZWN0KCkgewogICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlOwogICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KCJkaXNjb25uZWN0ZWQiKTsKICAgIGNvbnNvbGUubG9nKCJbQ2hhbmdlU3RyZWFtXSBXZWJTb2NrZXQgZGlzY29ubmVjdGVkLCB3YWl0aW5nIGZvciByZWNvbm5lY3QuLi4iKTsKICB9CiAgLyoqCiAgICogSGFuZGxlIFdlYlNvY2tldCByZWNvbm5lY3Rpb24gLSByZXN0b3JlIGFsbCBzdWJzY3JpcHRpb25zCiAgICovCiAgYXN5bmMgaGFuZGxlUmVjb25uZWN0KCkgewogICAgdGhpcy5pc0Nvbm5lY3RlZCA9IHRydWU7CiAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoImNvbm5lY3RlZCIpOwogICAgY29uc29sZS5sb2coIltDaGFuZ2VTdHJlYW1dIFdlYlNvY2tldCByZWNvbm5lY3RlZCwgcmVzdG9yaW5nIHN1YnNjcmlwdGlvbnMuLi4iKTsKICAgIGNvbnN0IHN1YnNjcmlwdGlvbnNUb1Jlc3RvcmUgPSBBcnJheS5mcm9tKHRoaXMuc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSk7CiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuY2xlYXIoKTsKICAgIGZvciAoY29uc3Qgc3ViMiBvZiBzdWJzY3JpcHRpb25zVG9SZXN0b3JlKSB7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKHN1YjIudHlwZSA9PT0gIm1vbmdvIikgewogICAgICAgICAgY29uc3QgW2RhdGFiYXNlLCBjb2xsZWN0aW9uXSA9IHN1YjIua2V5LnNwbGl0KCIvIik7CiAgICAgICAgICBhd2FpdCB0aGlzLnN1YnNjcmliZVRvQ29sbGVjdGlvbihkYXRhYmFzZSwgY29sbGVjdGlvbik7CiAgICAgICAgfSBlbHNlIGlmIChzdWIyLnR5cGUgPT09ICJzMyIpIHsKICAgICAgICAgIGNvbnN0IHBhcnRzID0gc3ViMi5rZXkuc3BsaXQoIi8iKTsKICAgICAgICAgIGNvbnN0IGJ1Y2tldCA9IHBhcnRzWzBdOwogICAgICAgICAgY29uc3QgcHJlZml4NCA9IHBhcnRzLnNsaWNlKDEpLmpvaW4oIi8iKSB8fCB2b2lkIDA7CiAgICAgICAgICBhd2FpdCB0aGlzLnN1YnNjcmliZVRvQnVja2V0KGJ1Y2tldCwgcHJlZml4NCk7CiAgICAgICAgfSBlbHNlIGlmIChzdWIyLnR5cGUgPT09ICJhY3Rpdml0eSIpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuc3Vic2NyaWJlVG9BY3Rpdml0eSgpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKGBbQ2hhbmdlU3RyZWFtXSBGYWlsZWQgdG8gcmVzdG9yZSBzdWJzY3JpcHRpb24gJHtzdWIyLmtleX06YCwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgfQogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBNb25nb0RCIFN1YnNjcmlwdGlvbnMKICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLyoqCiAgICogU3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gYSBNb25nb0RCIGNvbGxlY3Rpb24KICAgKi8KICBhc3luYyBzdWJzY3JpYmVUb0NvbGxlY3Rpb24oZGF0YWJhc2UsIGNvbGxlY3Rpb24pIHsKICAgIGlmICghdGhpcy50eXBlZFNvY2tldCB8fCAhdGhpcy5pc0Nvbm5lY3RlZCkgewogICAgICBjb25zb2xlLndhcm4oIltDaGFuZ2VTdHJlYW1dIE5vdCBjb25uZWN0ZWQsIGNhbm5vdCBzdWJzY3JpYmUiKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgY29uc3Qga2V5MiA9IGAke2RhdGFiYXNlfS8ke2NvbGxlY3Rpb259YDsKICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMuaGFzKGBtb25nbzoke2tleTJ9YCkpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICB0cnkgewogICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy50eXBlZFNvY2tldC5jcmVhdGVUeXBlZFJlcXVlc3QoInN1YnNjcmliZU1vbmdvIik7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdC5maXJlKHsgZGF0YWJhc2UsIGNvbGxlY3Rpb24gfSk7CiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7CiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnNldChgbW9uZ286JHtrZXkyfWAsIHsKICAgICAgICAgIHR5cGU6ICJtb25nbyIsCiAgICAgICAgICBrZXk6IGtleTIsCiAgICAgICAgICBzdWJzY3JpcHRpb25JZDogcmVzcG9uc2Uuc3Vic2NyaXB0aW9uSWQKICAgICAgICB9KTsKICAgICAgICBjb25zb2xlLmxvZyhgW0NoYW5nZVN0cmVhbV0gU3Vic2NyaWJlZCB0byBNb25nb0RCICR7a2V5Mn1gKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLmVycm9yKGBbQ2hhbmdlU3RyZWFtXSBGYWlsZWQgdG8gc3Vic2NyaWJlIHRvIE1vbmdvREIgJHtrZXkyfTpgLCBlcnJvcik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgLyoqCiAgICogVW5zdWJzY3JpYmUgZnJvbSBjaGFuZ2VzIGluIGEgTW9uZ29EQiBjb2xsZWN0aW9uCiAgICovCiAgYXN5bmMgdW5zdWJzY3JpYmVGcm9tQ29sbGVjdGlvbihkYXRhYmFzZSwgY29sbGVjdGlvbikgewogICAgaWYgKCF0aGlzLnR5cGVkU29ja2V0IHx8ICF0aGlzLmlzQ29ubmVjdGVkKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGNvbnN0IGtleTIgPSBgJHtkYXRhYmFzZX0vJHtjb2xsZWN0aW9ufWA7CiAgICBjb25zdCBzdWJLZXkgPSBgbW9uZ286JHtrZXkyfWA7CiAgICBpZiAoIXRoaXMuc3Vic2NyaXB0aW9ucy5oYXMoc3ViS2V5KSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnR5cGVkU29ja2V0LmNyZWF0ZVR5cGVkUmVxdWVzdCgidW5zdWJzY3JpYmVNb25nbyIpOwogICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QuZmlyZSh7IGRhdGFiYXNlLCBjb2xsZWN0aW9uIH0pOwogICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcykgewogICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5kZWxldGUoc3ViS2V5KTsKICAgICAgICBjb25zb2xlLmxvZyhgW0NoYW5nZVN0cmVhbV0gVW5zdWJzY3JpYmVkIGZyb20gTW9uZ29EQiAke2tleTJ9YCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlLnN1Y2Nlc3M7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLmVycm9yKGBbQ2hhbmdlU3RyZWFtXSBGYWlsZWQgdG8gdW5zdWJzY3JpYmUgZnJvbSBNb25nb0RCICR7a2V5Mn06YCwgZXJyb3IpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIC8qKgogICAqIENoZWNrIGlmIHN1YnNjcmliZWQgdG8gYSBNb25nb0RCIGNvbGxlY3Rpb24KICAgKi8KICBpc1N1YnNjcmliZWRUb0NvbGxlY3Rpb24oZGF0YWJhc2UsIGNvbGxlY3Rpb24pIHsKICAgIHJldHVybiB0aGlzLnN1YnNjcmlwdGlvbnMuaGFzKGBtb25nbzoke2RhdGFiYXNlfS8ke2NvbGxlY3Rpb259YCk7CiAgfQogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBTMyBTdWJzY3JpcHRpb25zCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC8qKgogICAqIFN1YnNjcmliZSB0byBjaGFuZ2VzIGluIGFuIFMzIGJ1Y2tldC9wcmVmaXgKICAgKi8KICBhc3luYyBzdWJzY3JpYmVUb0J1Y2tldChidWNrZXQsIHByZWZpeDQpIHsKICAgIGlmICghdGhpcy50eXBlZFNvY2tldCB8fCAhdGhpcy5pc0Nvbm5lY3RlZCkgewogICAgICBjb25zb2xlLndhcm4oIltDaGFuZ2VTdHJlYW1dIE5vdCBjb25uZWN0ZWQsIGNhbm5vdCBzdWJzY3JpYmUiKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgY29uc3Qga2V5MiA9IHByZWZpeDQgPyBgJHtidWNrZXR9LyR7cHJlZml4NH1gIDogYnVja2V0OwogICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9ucy5oYXMoYHMzOiR7a2V5Mn1gKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnR5cGVkU29ja2V0LmNyZWF0ZVR5cGVkUmVxdWVzdCgic3Vic2NyaWJlUzMiKTsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0LmZpcmUoeyBidWNrZXQsIHByZWZpeDogcHJlZml4NCB9KTsKICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHsKICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuc2V0KGBzMzoke2tleTJ9YCwgewogICAgICAgICAgdHlwZTogInMzIiwKICAgICAgICAgIGtleToga2V5MiwKICAgICAgICAgIHN1YnNjcmlwdGlvbklkOiByZXNwb25zZS5zdWJzY3JpcHRpb25JZAogICAgICAgIH0pOwogICAgICAgIGNvbnNvbGUubG9nKGBbQ2hhbmdlU3RyZWFtXSBTdWJzY3JpYmVkIHRvIFMzICR7a2V5Mn1gKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLmVycm9yKGBbQ2hhbmdlU3RyZWFtXSBGYWlsZWQgdG8gc3Vic2NyaWJlIHRvIFMzICR7a2V5Mn06YCwgZXJyb3IpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIC8qKgogICAqIFVuc3Vic2NyaWJlIGZyb20gY2hhbmdlcyBpbiBhbiBTMyBidWNrZXQvcHJlZml4CiAgICovCiAgYXN5bmMgdW5zdWJzY3JpYmVGcm9tQnVja2V0KGJ1Y2tldCwgcHJlZml4NCkgewogICAgaWYgKCF0aGlzLnR5cGVkU29ja2V0IHx8ICF0aGlzLmlzQ29ubmVjdGVkKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGNvbnN0IGtleTIgPSBwcmVmaXg0ID8gYCR7YnVja2V0fS8ke3ByZWZpeDR9YCA6IGJ1Y2tldDsKICAgIGNvbnN0IHN1YktleSA9IGBzMzoke2tleTJ9YDsKICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zLmhhcyhzdWJLZXkpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgdHJ5IHsKICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMudHlwZWRTb2NrZXQuY3JlYXRlVHlwZWRSZXF1ZXN0KCJ1bnN1YnNjcmliZVMzIik7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdC5maXJlKHsgYnVja2V0LCBwcmVmaXg6IHByZWZpeDQgfSk7CiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7CiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmRlbGV0ZShzdWJLZXkpOwogICAgICAgIGNvbnNvbGUubG9nKGBbQ2hhbmdlU3RyZWFtXSBVbnN1YnNjcmliZWQgZnJvbSBTMyAke2tleTJ9YCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlLnN1Y2Nlc3M7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLmVycm9yKGBbQ2hhbmdlU3RyZWFtXSBGYWlsZWQgdG8gdW5zdWJzY3JpYmUgZnJvbSBTMyAke2tleTJ9OmAsIGVycm9yKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICAvKioKICAgKiBDaGVjayBpZiBzdWJzY3JpYmVkIHRvIGFuIFMzIGJ1Y2tldC9wcmVmaXgKICAgKi8KICBpc1N1YnNjcmliZWRUb0J1Y2tldChidWNrZXQsIHByZWZpeDQpIHsKICAgIGNvbnN0IGtleTIgPSBwcmVmaXg0ID8gYCR7YnVja2V0fS8ke3ByZWZpeDR9YCA6IGJ1Y2tldDsKICAgIHJldHVybiB0aGlzLnN1YnNjcmlwdGlvbnMuaGFzKGBzMzoke2tleTJ9YCk7CiAgfQogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBBY3Rpdml0eSBTdHJlYW0gU3Vic2NyaXB0aW9ucwogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvKioKICAgKiBTdWJzY3JpYmUgdG8gdGhlIGFjdGl2aXR5IHN0cmVhbQogICAqLwogIGFzeW5jIHN1YnNjcmliZVRvQWN0aXZpdHkoKSB7CiAgICBpZiAoIXRoaXMudHlwZWRTb2NrZXQgfHwgIXRoaXMuaXNDb25uZWN0ZWQpIHsKICAgICAgY29uc29sZS53YXJuKCJbQ2hhbmdlU3RyZWFtXSBOb3QgY29ubmVjdGVkLCBjYW5ub3Qgc3Vic2NyaWJlIik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMuaGFzKCJhY3Rpdml0eTphY3Rpdml0eSIpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgdHJ5IHsKICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMudHlwZWRTb2NrZXQuY3JlYXRlVHlwZWRSZXF1ZXN0KCJzdWJzY3JpYmVBY3Rpdml0eSIpOwogICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QuZmlyZSh7fSk7CiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7CiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnNldCgiYWN0aXZpdHk6YWN0aXZpdHkiLCB7CiAgICAgICAgICB0eXBlOiAiYWN0aXZpdHkiLAogICAgICAgICAga2V5OiAiYWN0aXZpdHkiLAogICAgICAgICAgc3Vic2NyaXB0aW9uSWQ6IHJlc3BvbnNlLnN1YnNjcmlwdGlvbklkCiAgICAgICAgfSk7CiAgICAgICAgY29uc29sZS5sb2coIltDaGFuZ2VTdHJlYW1dIFN1YnNjcmliZWQgdG8gYWN0aXZpdHkgc3RyZWFtIik7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS5lcnJvcigiW0NoYW5nZVN0cmVhbV0gRmFpbGVkIHRvIHN1YnNjcmliZSB0byBhY3Rpdml0eSBzdHJlYW06IiwgZXJyb3IpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIC8qKgogICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGFjdGl2aXR5IHN0cmVhbQogICAqLwogIGFzeW5jIHVuc3Vic2NyaWJlRnJvbUFjdGl2aXR5KCkgewogICAgaWYgKCF0aGlzLnR5cGVkU29ja2V0IHx8ICF0aGlzLmlzQ29ubmVjdGVkKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zLmhhcygiYWN0aXZpdHk6YWN0aXZpdHkiKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnR5cGVkU29ja2V0LmNyZWF0ZVR5cGVkUmVxdWVzdCgidW5zdWJzY3JpYmVBY3Rpdml0eSIpOwogICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QuZmlyZSh7fSk7CiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7CiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmRlbGV0ZSgiYWN0aXZpdHk6YWN0aXZpdHkiKTsKICAgICAgICBjb25zb2xlLmxvZygiW0NoYW5nZVN0cmVhbV0gVW5zdWJzY3JpYmVkIGZyb20gYWN0aXZpdHkgc3RyZWFtIik7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlLnN1Y2Nlc3M7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLmVycm9yKCJbQ2hhbmdlU3RyZWFtXSBGYWlsZWQgdG8gdW5zdWJzY3JpYmUgZnJvbSBhY3Rpdml0eSBzdHJlYW06IiwgZXJyb3IpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIC8qKgogICAqIEdldCByZWNlbnQgYWN0aXZpdHkgZXZlbnRzCiAgICovCiAgYXN5bmMgZ2V0UmVjZW50QWN0aXZpdHkobGltaXQgPSAxMDApIHsKICAgIGlmICghdGhpcy50eXBlZFNvY2tldCB8fCAhdGhpcy5pc0Nvbm5lY3RlZCkgewogICAgICByZXR1cm4gW107CiAgICB9CiAgICB0cnkgewogICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy50eXBlZFNvY2tldC5jcmVhdGVUeXBlZFJlcXVlc3QoImdldFJlY2VudEFjdGl2aXR5Iik7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdC5maXJlKHsgbGltaXQgfSk7CiAgICAgIHJldHVybiByZXNwb25zZS5ldmVudHMgfHwgW107CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLmVycm9yKCJbQ2hhbmdlU3RyZWFtXSBGYWlsZWQgdG8gZ2V0IHJlY2VudCBhY3Rpdml0eToiLCBlcnJvcik7CiAgICAgIHJldHVybiBbXTsKICAgIH0KICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgc3Vic2NyaWJlZCB0byBhY3Rpdml0eSBzdHJlYW0KICAgKi8KICBpc1N1YnNjcmliZWRUb0FjdGl2aXR5KCkgewogICAgcmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9ucy5oYXMoImFjdGl2aXR5OmFjdGl2aXR5Iik7CiAgfQogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBPYnNlcnZhYmxlcyBmb3IgVUkgQ29tcG9uZW50cwogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvKioKICAgKiBHZXQgTW9uZ29EQiBjaGFuZ2VzIGFzIGFuIE9ic2VydmFibGUKICAgKi8KICBnZXRNb25nb0NoYW5nZXMoKSB7CiAgICByZXR1cm4gdGhpcy5tb25nb0NoYW5nZXMkLmFzT2JzZXJ2YWJsZSgpOwogIH0KICAvKioKICAgKiBHZXQgUzMgY2hhbmdlcyBhcyBhbiBPYnNlcnZhYmxlCiAgICovCiAgZ2V0UzNDaGFuZ2VzKCkgewogICAgcmV0dXJuIHRoaXMuczNDaGFuZ2VzJC5hc09ic2VydmFibGUoKTsKICB9CiAgLyoqCiAgICogR2V0IGFjdGl2aXR5IGV2ZW50cyBhcyBhbiBPYnNlcnZhYmxlCiAgICovCiAgZ2V0QWN0aXZpdHlTdHJlYW0oKSB7CiAgICByZXR1cm4gdGhpcy5hY3Rpdml0eUV2ZW50cyQuYXNPYnNlcnZhYmxlKCk7CiAgfQogIC8qKgogICAqIEdldCBmaWx0ZXJlZCBNb25nb0RCIGNoYW5nZXMgZm9yIGEgc3BlY2lmaWMgY29sbGVjdGlvbgogICAqLwogIGdldENvbGxlY3Rpb25DaGFuZ2VzKGRhdGFiYXNlLCBjb2xsZWN0aW9uKSB7CiAgICByZXR1cm4gdGhpcy5tb25nb0NoYW5nZXMkLnBpcGUoCiAgICAgIGRpc3RfdHNfZXhwb3J0czIucnhqcy5vcHMuZmlsdGVyKAogICAgICAgIChldmVudCkgPT4gZXZlbnQuZGF0YWJhc2UgPT09IGRhdGFiYXNlICYmIGV2ZW50LmNvbGxlY3Rpb24gPT09IGNvbGxlY3Rpb24KICAgICAgKQogICAgKTsKICB9CiAgLyoqCiAgICogR2V0IGZpbHRlcmVkIFMzIGNoYW5nZXMgZm9yIGEgc3BlY2lmaWMgYnVja2V0L3ByZWZpeAogICAqLwogIGdldEJ1Y2tldENoYW5nZXMoYnVja2V0LCBwcmVmaXg0KSB7CiAgICByZXR1cm4gdGhpcy5zM0NoYW5nZXMkLnBpcGUoCiAgICAgIGRpc3RfdHNfZXhwb3J0czIucnhqcy5vcHMuZmlsdGVyKChldmVudCkgPT4gewogICAgICAgIGlmIChldmVudC5idWNrZXQgIT09IGJ1Y2tldCkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChwcmVmaXg0ICYmICFldmVudC5rZXkuc3RhcnRzV2l0aChwcmVmaXg0KSkgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9KQogICAgKTsKICB9Cn07CgovLyB0c193ZWIvc2VydmljZXMvaW5kZXgudHMKdmFyIGFwaVNlcnZpY2UgPSBuZXcgQXBpU2VydmljZSgpOwp2YXIgY2hhbmdlU3RyZWFtU2VydmljZSA9IG5ldyBDaGFuZ2VTdHJlYW1TZXJ2aWNlKCk7CgovLyB0c193ZWIvc3R5bGVzL3RoZW1lLnRzCmluaXRfZGlzdF90czI2KCk7CnZhciB0aGVtZVN0eWxlcyA9IGlgCiAgOmhvc3QgewogICAgLyogQmFja2dyb3VuZCBjb2xvcnMgKi8KICAgIC0tdHN2aWV3LWJnLXByaW1hcnk6ICMxYTFhMWE7CiAgICAtLXRzdmlldy1iZy1zZWNvbmRhcnk6ICMxZTFlMWU7CiAgICAtLXRzdmlldy1iZy10ZXJ0aWFyeTogIzE0MTQxNDsKICAgIC0tdHN2aWV3LWJnLW92ZXJsYXk6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgIC0tdHN2aWV3LWJnLW92ZXJsYXktZGFyazogcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgLS10c3ZpZXctYmctZGlhbG9nLW92ZXJsYXk6IHJnYmEoMCwgMCwgMCwgMC43KTsKCiAgICAvKiBCb3JkZXIgY29sb3JzICovCiAgICAtLXRzdmlldy1ib3JkZXItcHJpbWFyeTogIzMzMzsKICAgIC0tdHN2aWV3LWJvcmRlci1zZWNvbmRhcnk6ICM0NDQ7CiAgICAtLXRzdmlldy1ib3JkZXItdGVydGlhcnk6ICMyYTJhM2U7CgogICAgLyogVGV4dCBjb2xvcnMgKi8KICAgIC0tdHN2aWV3LXRleHQtcHJpbWFyeTogI2ZmZjsKICAgIC0tdHN2aWV3LXRleHQtc2Vjb25kYXJ5OiAjZTBlMGUwOwogICAgLS10c3ZpZXctdGV4dC10ZXJ0aWFyeTogI2NjYzsKICAgIC0tdHN2aWV3LXRleHQtbXV0ZWQ6ICM4ODg7CiAgICAtLXRzdmlldy10ZXh0LWRpbTogIzY2NjsKCiAgICAvKiBJbnRlcmFjdGl2ZSBzdGF0ZXMgKi8KICAgIC0tdHN2aWV3LWhvdmVyLWJnOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgLS10c3ZpZXctaG92ZXItYmctc3Ryb25nOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAtLXRzdmlldy1zZWxlY3RlZC1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIC0tdHN2aWV3LWFjdGl2ZS1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwoKICAgIC8qIEFjY2VudCBjb2xvcnMgKi8KICAgIC0tdHN2aWV3LWFjY2VudC1mb2xkZXI6ICNmYmJmMjQ7CgogICAgLyogRGFuZ2VyL2Rlc3RydWN0aXZlIGFjdGlvbnMgKi8KICAgIC0tdHN2aWV3LWRhbmdlcjogI2VmNDQ0NDsKICAgIC0tdHN2aWV3LWRhbmdlci10ZXh0OiAjZjg3MTcxOwogICAgLS10c3ZpZXctZGFuZ2VyLWJnOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjIpOwogICAgLS10c3ZpZXctZGFuZ2VyLWJnLWhvdmVyOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjMpOwoKICAgIC8qIFN1Y2Nlc3Mgc3RhdGVzICovCiAgICAtLXRzdmlldy1zdWNjZXNzOiAjMjJjNTVlOwogICAgLS10c3ZpZXctc3VjY2Vzcy1iZzogcmdiYSgzNCwgMTk3LCA5NCwgMC4yKTsKCiAgICAvKiBCb3JkZXIgcmFkaXVzICovCiAgICAtLXRzdmlldy1yYWRpdXMtc206IDRweDsKICAgIC0tdHN2aWV3LXJhZGl1cy1tZDogNnB4OwogICAgLS10c3ZpZXctcmFkaXVzLWxnOiA4cHg7CiAgICAtLXRzdmlldy1yYWRpdXMteGw6IDEycHg7CgogICAgLyogU3BhY2luZyAqLwogICAgLS10c3ZpZXctc3BhY2luZy14czogNHB4OwogICAgLS10c3ZpZXctc3BhY2luZy1zbTogOHB4OwogICAgLS10c3ZpZXctc3BhY2luZy1tZDogMTJweDsKICAgIC0tdHN2aWV3LXNwYWNpbmctbGc6IDE2cHg7CiAgICAtLXRzdmlldy1zcGFjaW5nLXhsOiAyNHB4OwogIH0KYDsKCi8vIHRzX3dlYi9lbGVtZW50cy90c3ZpZXctYXBwLnRzCnZhciBfaXNSZXNpemluZ1NpZGViYXJfZGVjLCBfc2lkZWJhcldpZHRoX2RlYywgX3MzQ3JlYXRlRGlhbG9nTmFtZV9kZWMsIF9zM0NyZWF0ZURpYWxvZ0J1Y2tldF9kZWMsIF9zM0NyZWF0ZURpYWxvZ1R5cGVfZGVjLCBfc2hvd1MzQ3JlYXRlRGlhbG9nX2RlYywgX3Nob3dTeXN0ZW1EYXRhYmFzZXNfZGVjLCBfbmV3RGF0YWJhc2VOYW1lX2RlYywgX3Nob3dDcmVhdGVEYXRhYmFzZURpYWxvZ19kZWMsIF9uZXdDb2xsZWN0aW9uTmFtZV9kZWMsIF9zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZ19kZWMsIF9uZXdCdWNrZXROYW1lX2RlYywgX3Nob3dDcmVhdGVCdWNrZXREaWFsb2dfZGVjLCBfZGF0YWJhc2VzX2RlYywgX2J1Y2tldHNfZGVjLCBfc2VsZWN0ZWRDb2xsZWN0aW9uX2RlYywgX3NlbGVjdGVkRGF0YWJhc2VfZGVjLCBfc2VsZWN0ZWRCdWNrZXRfZGVjLCBfdmlld01vZGVfZGVjLCBfYTQsIF9Uc3ZpZXdBcHBfZGVjb3JhdG9ycywgX2luaXQsIF92aWV3TW9kZSwgX3NlbGVjdGVkQnVja2V0LCBfc2VsZWN0ZWREYXRhYmFzZSwgX3NlbGVjdGVkQ29sbGVjdGlvbiwgX2J1Y2tldHMsIF9kYXRhYmFzZXMsIF9zaG93Q3JlYXRlQnVja2V0RGlhbG9nLCBfbmV3QnVja2V0TmFtZSwgX3Nob3dDcmVhdGVDb2xsZWN0aW9uRGlhbG9nLCBfbmV3Q29sbGVjdGlvbk5hbWUsIF9zaG93Q3JlYXRlRGF0YWJhc2VEaWFsb2csIF9uZXdEYXRhYmFzZU5hbWUsIF9zaG93U3lzdGVtRGF0YWJhc2VzLCBfc2hvd1MzQ3JlYXRlRGlhbG9nLCBfczNDcmVhdGVEaWFsb2dUeXBlLCBfczNDcmVhdGVEaWFsb2dCdWNrZXQsIF9zM0NyZWF0ZURpYWxvZ05hbWUsIF9zaWRlYmFyV2lkdGgsIF9pc1Jlc2l6aW5nU2lkZWJhcjsKdmFyIHsgaHRtbDogaHRtbDgsIGNzczogY3NzMywgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjMsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQyLCBzdGF0ZTogc3RhdGUyLCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQzIH0gPSBwbHVnaW5zX2V4cG9ydHM1Owp2YXIgeyBEZWVzQ29udGV4dG1lbnU6IERlZXNDb250ZXh0bWVudTIgfSA9IGRpc3RfdHNfd2ViX2V4cG9ydHMyOwpfVHN2aWV3QXBwX2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDIoInRzdmlldy1hcHAiKV07CnZhciBUc3ZpZXdBcHAgPSBjbGFzcyBleHRlbmRzIChfYTQgPSBEZWVzRWxlbWVudDMsIF92aWV3TW9kZV9kZWMgPSBbc3RhdGUyKCldLCBfc2VsZWN0ZWRCdWNrZXRfZGVjID0gW3N0YXRlMigpXSwgX3NlbGVjdGVkRGF0YWJhc2VfZGVjID0gW3N0YXRlMigpXSwgX3NlbGVjdGVkQ29sbGVjdGlvbl9kZWMgPSBbc3RhdGUyKCldLCBfYnVja2V0c19kZWMgPSBbc3RhdGUyKCldLCBfZGF0YWJhc2VzX2RlYyA9IFtzdGF0ZTIoKV0sIF9zaG93Q3JlYXRlQnVja2V0RGlhbG9nX2RlYyA9IFtzdGF0ZTIoKV0sIF9uZXdCdWNrZXROYW1lX2RlYyA9IFtzdGF0ZTIoKV0sIF9zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZ19kZWMgPSBbc3RhdGUyKCldLCBfbmV3Q29sbGVjdGlvbk5hbWVfZGVjID0gW3N0YXRlMigpXSwgX3Nob3dDcmVhdGVEYXRhYmFzZURpYWxvZ19kZWMgPSBbc3RhdGUyKCldLCBfbmV3RGF0YWJhc2VOYW1lX2RlYyA9IFtzdGF0ZTIoKV0sIF9zaG93U3lzdGVtRGF0YWJhc2VzX2RlYyA9IFtzdGF0ZTIoKV0sIF9zaG93UzNDcmVhdGVEaWFsb2dfZGVjID0gW3N0YXRlMigpXSwgX3MzQ3JlYXRlRGlhbG9nVHlwZV9kZWMgPSBbc3RhdGUyKCldLCBfczNDcmVhdGVEaWFsb2dCdWNrZXRfZGVjID0gW3N0YXRlMigpXSwgX3MzQ3JlYXRlRGlhbG9nTmFtZV9kZWMgPSBbc3RhdGUyKCldLCBfc2lkZWJhcldpZHRoX2RlYyA9IFtzdGF0ZTIoKV0sIF9pc1Jlc2l6aW5nU2lkZWJhcl9kZWMgPSBbc3RhdGUyKCldLCBfYTQpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3ZpZXdNb2RlLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgOCwgdGhpcywgInMzIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZEJ1Y2tldCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDEyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZERhdGFiYXNlLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMTYsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAxOSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3NlbGVjdGVkQ29sbGVjdGlvbiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDIwLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMjMsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9idWNrZXRzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMjQsIHRoaXMsIFtdKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAyNywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RhdGFiYXNlcywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDI4LCB0aGlzLCBbXSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMzEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zaG93Q3JlYXRlQnVja2V0RGlhbG9nLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMzIsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAzNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX25ld0J1Y2tldE5hbWUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAzNiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDM5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2csIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA0MCwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDQzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbmV3Q29sbGVjdGlvbk5hbWUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA0NCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDQ3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNDgsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA1MSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX25ld0RhdGFiYXNlTmFtZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDUyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zaG93U3lzdGVtRGF0YWJhc2VzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNTYsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA1OSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3Nob3dTM0NyZWF0ZURpYWxvZywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDYwLCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNjMsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zM0NyZWF0ZURpYWxvZ1R5cGUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA2NCwgdGhpcywgImZvbGRlciIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDY3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfczNDcmVhdGVEaWFsb2dCdWNrZXQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA2OCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDcxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfczNDcmVhdGVEaWFsb2dOYW1lLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNzIsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA3NSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3NpZGViYXJXaWR0aCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDc2LCB0aGlzLCAyNDApKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDc5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfaXNSZXNpemluZ1NpZGViYXIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA4MCwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDgzLCB0aGlzKTsKICAgIF9fcHVibGljRmllbGQodGhpcywgIlNZU1RFTV9EQVRBQkFTRVMiLCBbImFkbWluIiwgImNvbmZpZyIsICJsb2NhbCJdKTsKICAgIF9fcHVibGljRmllbGQodGhpcywgInN0YXJ0U2lkZWJhclJlc2l6ZSIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHRoaXMuaXNSZXNpemluZ1NpZGViYXIgPSB0cnVlOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZVNpZGViYXJSZXNpemUpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5lbmRTaWRlYmFyUmVzaXplKTsKICAgIH0pOwogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiaGFuZGxlU2lkZWJhclJlc2l6ZSIsIChlMTEpID0+IHsKICAgICAgaWYgKCF0aGlzLmlzUmVzaXppbmdTaWRlYmFyKSByZXR1cm47CiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5taW4oTWF0aC5tYXgoZTExLmNsaWVudFgsIDE1MCksIDUwMCk7CiAgICAgIHRoaXMuc2lkZWJhcldpZHRoID0gbmV3V2lkdGg7CiAgICB9KTsKICAgIF9fcHVibGljRmllbGQodGhpcywgImVuZFNpZGViYXJSZXNpemUiLCAoKSA9PiB7CiAgICAgIHRoaXMuaXNSZXNpemluZ1NpZGViYXIgPSBmYWxzZTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVTaWRlYmFyUmVzaXplKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuZW5kU2lkZWJhclJlc2l6ZSk7CiAgICB9KTsKICB9CiAgZ2V0IHZpc2libGVEYXRhYmFzZXMoKSB7CiAgICBpZiAodGhpcy5zaG93U3lzdGVtRGF0YWJhc2VzKSB7CiAgICAgIHJldHVybiB0aGlzLmRhdGFiYXNlczsKICAgIH0KICAgIHJldHVybiB0aGlzLmRhdGFiYXNlcy5maWx0ZXIoKGRiKSA9PiAhdGhpcy5TWVNURU1fREFUQUJBU0VTLmluY2x1ZGVzKGRiLm5hbWUpKTsKICB9CiAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgYXdhaXQgdGhpcy5sb2FkRGF0YSgpOwogICAgdGhpcy5pbml0aWFsaXplQ2hhbmdlU3RyZWFtKCk7CiAgfQogIGFzeW5jIGluaXRpYWxpemVDaGFuZ2VTdHJlYW0oKSB7CiAgICB0cnkgewogICAgICBhd2FpdCBjaGFuZ2VTdHJlYW1TZXJ2aWNlLmNvbm5lY3QoKTsKICAgICAgY29uc29sZS5sb2coIltUc3ZpZXdBcHBdIENoYW5nZVN0cmVhbSBjb25uZWN0ZWQiKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUud2FybigiW1Rzdmlld0FwcF0gRmFpbGVkIHRvIGNvbm5lY3QgdG8gQ2hhbmdlU3RyZWFtOiIsIGVycm9yKTsKICAgIH0KICB9CiAgYXN5bmMgbG9hZERhdGEoKSB7CiAgICB0cnkgewogICAgICB0aGlzLmJ1Y2tldHMgPSBhd2FpdCBhcGlTZXJ2aWNlLmxpc3RCdWNrZXRzKCk7CiAgICAgIHRoaXMuZGF0YWJhc2VzID0gYXdhaXQgYXBpU2VydmljZS5saXN0RGF0YWJhc2VzKCk7CiAgICAgIGlmICh0aGlzLnZpZXdNb2RlID09PSAiczMiICYmIHRoaXMuYnVja2V0cy5sZW5ndGggPiAwICYmICF0aGlzLnNlbGVjdGVkQnVja2V0KSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZEJ1Y2tldCA9IHRoaXMuYnVja2V0c1swXTsKICAgICAgfQogICAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gIm1vbmdvIiAmJiB0aGlzLmRhdGFiYXNlcy5sZW5ndGggPiAwICYmICF0aGlzLnNlbGVjdGVkRGF0YWJhc2UpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YWJhc2UgPSB0aGlzLmRhdGFiYXNlc1swXS5uYW1lOwogICAgICB9CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBkYXRhOiIsIGVycik7CiAgICB9CiAgfQogIHNldFZpZXdNb2RlKG1vZGUpIHsKICAgIHRoaXMudmlld01vZGUgPSBtb2RlOwogIH0KICBzZWxlY3RCdWNrZXQoYnVja2V0KSB7CiAgICB0aGlzLnNlbGVjdGVkQnVja2V0ID0gYnVja2V0OwogIH0KICBzZWxlY3REYXRhYmFzZShkYikgewogICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhYmFzZSA9PT0gZGIpIHsKICAgICAgdGhpcy5zZWxlY3RlZERhdGFiYXNlID0gIiI7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnNlbGVjdGVkRGF0YWJhc2UgPSBkYjsKICAgICAgdGhpcy5zZWxlY3RlZENvbGxlY3Rpb24gPSAiIjsKICAgIH0KICB9CiAgc2VsZWN0Q29sbGVjdGlvbihjb2xsZWN0aW9uKSB7CiAgICB0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbiA9IGNvbGxlY3Rpb247CiAgfQogIGFzeW5jIGNyZWF0ZUJ1Y2tldCgpIHsKICAgIGlmICghdGhpcy5uZXdCdWNrZXROYW1lLnRyaW0oKSkgcmV0dXJuOwogICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuY3JlYXRlQnVja2V0KHRoaXMubmV3QnVja2V0TmFtZS50cmltKCkpOwogICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgdGhpcy5idWNrZXRzID0gWy4uLnRoaXMuYnVja2V0cywgdGhpcy5uZXdCdWNrZXROYW1lLnRyaW0oKV07CiAgICAgIHRoaXMubmV3QnVja2V0TmFtZSA9ICIiOwogICAgICB0aGlzLnNob3dDcmVhdGVCdWNrZXREaWFsb2cgPSBmYWxzZTsKICAgIH0KICB9CiAgYXN5bmMgY3JlYXRlQ29sbGVjdGlvbigpIHsKICAgIGlmICghdGhpcy5uZXdDb2xsZWN0aW9uTmFtZS50cmltKCkgfHwgIXRoaXMuc2VsZWN0ZWREYXRhYmFzZSkgcmV0dXJuOwogICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuY3JlYXRlQ29sbGVjdGlvbih0aGlzLnNlbGVjdGVkRGF0YWJhc2UsIHRoaXMubmV3Q29sbGVjdGlvbk5hbWUudHJpbSgpKTsKICAgIGlmIChzdWNjZXNzKSB7CiAgICAgIHRoaXMubmV3Q29sbGVjdGlvbk5hbWUgPSAiIjsKICAgICAgdGhpcy5zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZyA9IGZhbHNlOwogICAgfQogIH0KICBhc3luYyBjcmVhdGVEYXRhYmFzZSgpIHsKICAgIGlmICghdGhpcy5uZXdEYXRhYmFzZU5hbWUudHJpbSgpKSByZXR1cm47CiAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXBpU2VydmljZS5jcmVhdGVEYXRhYmFzZSh0aGlzLm5ld0RhdGFiYXNlTmFtZS50cmltKCkpOwogICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgdGhpcy5kYXRhYmFzZXMgPSBbLi4udGhpcy5kYXRhYmFzZXMsIHsgbmFtZTogdGhpcy5uZXdEYXRhYmFzZU5hbWUudHJpbSgpIH1dOwogICAgICB0aGlzLm5ld0RhdGFiYXNlTmFtZSA9ICIiOwogICAgICB0aGlzLnNob3dDcmVhdGVEYXRhYmFzZURpYWxvZyA9IGZhbHNlOwogICAgfQogIH0KICBhc3luYyBkZWxldGVCdWNrZXQoYnVja2V0LCBlMTEpIHsKICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgIGlmICghY29uZmlybShgRGVsZXRlIGJ1Y2tldCAiJHtidWNrZXR9Ij8gVGhpcyB3aWxsIGRlbGV0ZSBhbGwgb2JqZWN0cyBpbiB0aGUgYnVja2V0LmApKSByZXR1cm47CiAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXBpU2VydmljZS5kZWxldGVCdWNrZXQoYnVja2V0KTsKICAgIGlmIChzdWNjZXNzKSB7CiAgICAgIHRoaXMuYnVja2V0cyA9IHRoaXMuYnVja2V0cy5maWx0ZXIoKGI1KSA9PiBiNSAhPT0gYnVja2V0KTsKICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRCdWNrZXQgPT09IGJ1Y2tldCkgewogICAgICAgIHRoaXMuc2VsZWN0ZWRCdWNrZXQgPSB0aGlzLmJ1Y2tldHNbMF0gfHwgIiI7CiAgICAgIH0KICAgIH0KICB9CiAgYXN5bmMgZGVsZXRlRGF0YWJhc2UoZGJOYW1lLCBlMTEpIHsKICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgIGlmICghY29uZmlybShgRGVsZXRlIGRhdGFiYXNlICIke2RiTmFtZX0iPyBUaGlzIHdpbGwgZGVsZXRlIGFsbCBjb2xsZWN0aW9ucyBhbmQgZG9jdW1lbnRzLmApKSByZXR1cm47CiAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXBpU2VydmljZS5kcm9wRGF0YWJhc2UoZGJOYW1lKTsKICAgIGlmIChzdWNjZXNzKSB7CiAgICAgIHRoaXMuZGF0YWJhc2VzID0gdGhpcy5kYXRhYmFzZXMuZmlsdGVyKChkNikgPT4gZDYubmFtZSAhPT0gZGJOYW1lKTsKICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhYmFzZSA9PT0gZGJOYW1lKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFiYXNlID0gdGhpcy5kYXRhYmFzZXNbMF0/Lm5hbWUgfHwgIiI7CiAgICAgICAgdGhpcy5zZWxlY3RlZENvbGxlY3Rpb24gPSAiIjsKICAgICAgfQogICAgfQogIH0KICBhc3luYyBkZWxldGVDb2xsZWN0aW9uKGRiTmFtZSwgY29sbGVjdGlvbk5hbWUpIHsKICAgIGlmICghY29uZmlybShgRGVsZXRlIGNvbGxlY3Rpb24gIiR7Y29sbGVjdGlvbk5hbWV9Ij8gVGhpcyB3aWxsIGRlbGV0ZSBhbGwgZG9jdW1lbnRzLmApKSByZXR1cm47CiAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXBpU2VydmljZS5kcm9wQ29sbGVjdGlvbihkYk5hbWUsIGNvbGxlY3Rpb25OYW1lKTsKICAgIGlmIChzdWNjZXNzKSB7CiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbiA9PT0gY29sbGVjdGlvbk5hbWUpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbiA9ICIiOwogICAgICB9CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgfQogIH0KICBoYW5kbGVCdWNrZXRDb250ZXh0TWVudShldmVudCwgYnVja2V0KSB7CiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgRGVlc0NvbnRleHRtZW51Mi5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICB7CiAgICAgICAgbmFtZTogIlZpZXcgQ29udGVudHMiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZvbGRlck9wZW4iLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgdGhpcy5zZWxlY3RCdWNrZXQoYnVja2V0KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7CiAgICAgICAgbmFtZTogIk5ldyBGb2xkZXIiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZvbGRlclBsdXMiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5vcGVuUzNDcmVhdGVEaWFsb2coYnVja2V0LCAiZm9sZGVyIikKICAgICAgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJOZXcgRmlsZSIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVBsdXMiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5vcGVuUzNDcmVhdGVEaWFsb2coYnVja2V0LCAiZmlsZSIpCiAgICAgIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkRlbGV0ZSBCdWNrZXQiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOnRyYXNoMiIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAoY29uZmlybShgRGVsZXRlIGJ1Y2tldCAiJHtidWNrZXR9Ij8gVGhpcyB3aWxsIGRlbGV0ZSBhbGwgb2JqZWN0cyBpbiB0aGUgYnVja2V0LmApKSB7CiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLmRlbGV0ZUJ1Y2tldChidWNrZXQpOwogICAgICAgICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICAgICAgIHRoaXMuYnVja2V0cyA9IHRoaXMuYnVja2V0cy5maWx0ZXIoKGI1KSA9PiBiNSAhPT0gYnVja2V0KTsKICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEJ1Y2tldCA9PT0gYnVja2V0KSB7CiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVja2V0ID0gdGhpcy5idWNrZXRzWzBdIHx8ICIiOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXSk7CiAgfQogIG9wZW5TM0NyZWF0ZURpYWxvZyhidWNrZXQsIHR5cGU1KSB7CiAgICB0aGlzLnMzQ3JlYXRlRGlhbG9nQnVja2V0ID0gYnVja2V0OwogICAgdGhpcy5zM0NyZWF0ZURpYWxvZ1R5cGUgPSB0eXBlNTsKICAgIHRoaXMuczNDcmVhdGVEaWFsb2dOYW1lID0gIiI7CiAgICB0aGlzLnNob3dTM0NyZWF0ZURpYWxvZyA9IHRydWU7CiAgfQogIGdldENvbnRlbnRUeXBlKGV4dCkgewogICAgY29uc3QgY29udGVudFR5cGVzID0gewogICAgICBqc29uOiAiYXBwbGljYXRpb24vanNvbiIsCiAgICAgIHR4dDogInRleHQvcGxhaW4iLAogICAgICBodG1sOiAidGV4dC9odG1sIiwKICAgICAgY3NzOiAidGV4dC9jc3MiLAogICAgICBqczogImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiLAogICAgICB0czogInRleHQvdHlwZXNjcmlwdCIsCiAgICAgIG1kOiAidGV4dC9tYXJrZG93biIsCiAgICAgIHhtbDogImFwcGxpY2F0aW9uL3htbCIsCiAgICAgIHlhbWw6ICJ0ZXh0L3lhbWwiLAogICAgICB5bWw6ICJ0ZXh0L3lhbWwiLAogICAgICBjc3Y6ICJ0ZXh0L2NzdiIKICAgIH07CiAgICByZXR1cm4gY29udGVudFR5cGVzW2V4dF0gfHwgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7CiAgfQogIGdldERlZmF1bHRDb250ZW50KGV4dCkgewogICAgY29uc3QgZGVmYXVsdHMgPSB7CiAgICAgIGpzb246ICJ7XG4gIFxufSIsCiAgICAgIGh0bWw6ICI8IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG4gIDx0aXRsZT48L3RpdGxlPlxuPC9oZWFkPlxuPGJvZHk+XG4gIFxuPC9ib2R5PlxuPC9odG1sPiIsCiAgICAgIG1kOiAiIyBUaXRsZVxuXG4iLAogICAgICB0eHQ6ICIiCiAgICB9OwogICAgcmV0dXJuIGRlZmF1bHRzW2V4dF0gfHwgIiI7CiAgfQogIGFzeW5jIGhhbmRsZVMzQ3JlYXRlKCkgewogICAgaWYgKCF0aGlzLnMzQ3JlYXRlRGlhbG9nTmFtZS50cmltKCkpIHJldHVybjsKICAgIGNvbnN0IG5hbWUgPSB0aGlzLnMzQ3JlYXRlRGlhbG9nTmFtZS50cmltKCk7CiAgICBsZXQgcGF0aDI7CiAgICBpZiAodGhpcy5zM0NyZWF0ZURpYWxvZ1R5cGUgPT09ICJmb2xkZXIiKSB7CiAgICAgIHBhdGgyID0gbmFtZSArICIvLmtlZXAiOwogICAgfSBlbHNlIHsKICAgICAgcGF0aDIgPSBuYW1lOwogICAgfQogICAgY29uc3QgZXh0ID0gbmFtZS5zcGxpdCgiLiIpLnBvcCgpPy50b0xvd2VyQ2FzZSgpIHx8ICIiOwogICAgY29uc3QgY29udGVudFR5cGUgPSB0aGlzLnMzQ3JlYXRlRGlhbG9nVHlwZSA9PT0gImZpbGUiID8gdGhpcy5nZXRDb250ZW50VHlwZShleHQpIDogImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7CiAgICBjb25zdCBjb250ZW50MyA9IHRoaXMuczNDcmVhdGVEaWFsb2dUeXBlID09PSAiZmlsZSIgPyB0aGlzLmdldERlZmF1bHRDb250ZW50KGV4dCkgOiAiIjsKICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLnB1dE9iamVjdCgKICAgICAgdGhpcy5zM0NyZWF0ZURpYWxvZ0J1Y2tldCwKICAgICAgcGF0aDIsCiAgICAgIGJ0b2EoY29udGVudDMpLAogICAgICBjb250ZW50VHlwZQogICAgKTsKICAgIGlmIChzdWNjZXNzKSB7CiAgICAgIHRoaXMuc2hvd1MzQ3JlYXRlRGlhbG9nID0gZmFsc2U7CiAgICAgIHRoaXMuc2VsZWN0ZWRCdWNrZXQgPSB0aGlzLnMzQ3JlYXRlRGlhbG9nQnVja2V0OwogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgIH0KICB9CiAgaGFuZGxlRGF0YWJhc2VDb250ZXh0TWVudShldmVudCwgZGJOYW1lKSB7CiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgRGVlc0NvbnRleHRtZW51Mi5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICB7CiAgICAgICAgbmFtZTogIk5ldyBDb2xsZWN0aW9uIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmb2xkZXJQbHVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhYmFzZSA9IGRiTmFtZTsKICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2cgPSB0cnVlOwogICAgICAgIH0KICAgICAgfSwKICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiRGVsZXRlIERhdGFiYXNlIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgaWYgKGNvbmZpcm0oYERlbGV0ZSBkYXRhYmFzZSAiJHtkYk5hbWV9Ij8gVGhpcyB3aWxsIGRlbGV0ZSBhbGwgY29sbGVjdGlvbnMgYW5kIGRvY3VtZW50cy5gKSkgewogICAgICAgICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXBpU2VydmljZS5kcm9wRGF0YWJhc2UoZGJOYW1lKTsKICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICAgICAgICB0aGlzLmRhdGFiYXNlcyA9IHRoaXMuZGF0YWJhc2VzLmZpbHRlcigoZDYpID0+IGQ2Lm5hbWUgIT09IGRiTmFtZSk7CiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhYmFzZSA9PT0gZGJOYW1lKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YWJhc2UgPSB0aGlzLmRhdGFiYXNlc1swXT8ubmFtZSB8fCAiIjsKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uID0gIiI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICBdKTsKICB9CiAgaGFuZGxlU2lkZWJhckNvbnRleHRNZW51KGV2ZW50KSB7CiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgRGVlc0NvbnRleHRtZW51Mi5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICB7CiAgICAgICAgbmFtZTogdGhpcy5zaG93U3lzdGVtRGF0YWJhc2VzID8gIkhpZGUgU3lzdGVtIERhdGFiYXNlcyIgOiAiU2hvdyBTeXN0ZW0gRGF0YWJhc2VzIiwKICAgICAgICBpY29uTmFtZTogdGhpcy5zaG93U3lzdGVtRGF0YWJhc2VzID8gImx1Y2lkZTpleWVPZmYiIDogImx1Y2lkZTpleWUiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgdGhpcy5zaG93U3lzdGVtRGF0YWJhc2VzID0gIXRoaXMuc2hvd1N5c3RlbURhdGFiYXNlczsKICAgICAgICB9CiAgICAgIH0KICAgIF0pOwogIH0KICByZW5kZXIoKSB7CiAgICByZXR1cm4gaHRtbDhgCiAgICAgIDxkaXYgY2xhc3M9ImFwcC1jb250YWluZXIiPgogICAgICAgIDxoZWFkZXIgY2xhc3M9ImFwcC1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iYXBwLXRpdGxlIj4KICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yIDNoNmE0IDQgMCAwIDEgNCA0djE0YTMgMyAwIDAgMC0zLTNIMnoiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMjIgM2gtNmE0IDQgMCAwIDAtNCA0djE0YTMgMyAwIDAgMSAzLTNoN3oiPjwvcGF0aD4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIFRzVmlldwogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPG5hdiBjbGFzcz0ibmF2LXRhYnMiPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9Im5hdi10YWIgJHt0aGlzLnZpZXdNb2RlID09PSAiczMiID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZXRWaWV3TW9kZSgiczMiKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIFMzIFN0b3JhZ2UKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0ibmF2LXRhYiAke3RoaXMudmlld01vZGUgPT09ICJtb25nbyIgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNldFZpZXdNb2RlKCJtb25nbyIpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgTW9uZ29EQgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJuYXYtdGFiICR7dGhpcy52aWV3TW9kZSA9PT0gImFjdGl2aXR5IiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2V0Vmlld01vZGUoImFjdGl2aXR5Iil9CiAgICAgICAgICAgID4KICAgICAgICAgICAgICBBY3Rpdml0eQogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJuYXYtdGFiICR7dGhpcy52aWV3TW9kZSA9PT0gInNldHRpbmdzIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2V0Vmlld01vZGUoInNldHRpbmdzIil9CiAgICAgICAgICAgID4KICAgICAgICAgICAgICBTZXR0aW5ncwogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvbmF2PgogICAgICAgIDwvaGVhZGVyPgoKICAgICAgICA8bWFpbiBjbGFzcz0iYXBwLW1haW4iIHN0eWxlPSItLXNpZGViYXItd2lkdGg6ICR7dGhpcy5zaWRlYmFyV2lkdGh9cHgiPgogICAgICAgICAgJHt0aGlzLnJlbmRlclNpZGViYXIoKX0KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9InJlc2l6ZS1kaXZpZGVyICR7dGhpcy5pc1Jlc2l6aW5nU2lkZWJhciA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICBAbW91c2Vkb3duPSR7dGhpcy5zdGFydFNpZGViYXJSZXNpemV9CiAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAke3RoaXMucmVuZGVyQ29udGVudCgpfQogICAgICAgIDwvbWFpbj4KICAgICAgPC9kaXY+CiAgICAgICR7dGhpcy5yZW5kZXJDcmVhdGVCdWNrZXREaWFsb2coKX0KICAgICAgJHt0aGlzLnJlbmRlckNyZWF0ZUNvbGxlY3Rpb25EaWFsb2coKX0KICAgICAgJHt0aGlzLnJlbmRlckNyZWF0ZURhdGFiYXNlRGlhbG9nKCl9CiAgICAgICR7dGhpcy5yZW5kZXJTM0NyZWF0ZURpYWxvZygpfQogICAgYDsKICB9CiAgcmVuZGVyQ3JlYXRlQnVja2V0RGlhbG9nKCkgewogICAgaWYgKCF0aGlzLnNob3dDcmVhdGVCdWNrZXREaWFsb2cpIHJldHVybiAiIjsKICAgIHJldHVybiBodG1sOGAKICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLW92ZXJsYXkiIEBjbGljaz0keygpID0+IHRoaXMuc2hvd0NyZWF0ZUJ1Y2tldERpYWxvZyA9IGZhbHNlfT4KICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ciIEBjbGljaz0keyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPkNyZWF0ZSBOZXcgQnVja2V0PC9kaXY+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgY2xhc3M9ImRpYWxvZy1pbnB1dCIKICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkJ1Y2tldCBuYW1lIgogICAgICAgICAgICAudmFsdWU9JHt0aGlzLm5ld0J1Y2tldE5hbWV9CiAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IHRoaXMubmV3QnVja2V0TmFtZSA9IGUxMS50YXJnZXQudmFsdWV9CiAgICAgICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gZTExLmtleSA9PT0gIkVudGVyIiAmJiB0aGlzLmNyZWF0ZUJ1Y2tldCgpfQogICAgICAgICAgLz4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1hY3Rpb25zIj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGlhbG9nLWJ0biBkaWFsb2ctYnRuLWNhbmNlbCIgQGNsaWNrPSR7KCkgPT4gdGhpcy5zaG93Q3JlYXRlQnVja2V0RGlhbG9nID0gZmFsc2V9PgogICAgICAgICAgICAgIENhbmNlbAogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJkaWFsb2ctYnRuIGRpYWxvZy1idG4tY3JlYXRlIgogICAgICAgICAgICAgID9kaXNhYmxlZD0keyF0aGlzLm5ld0J1Y2tldE5hbWUudHJpbSgpfQogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuY3JlYXRlQnVja2V0KCl9CiAgICAgICAgICAgID4KICAgICAgICAgICAgICBDcmVhdGUKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJDcmVhdGVDb2xsZWN0aW9uRGlhbG9nKCkgewogICAgaWYgKCF0aGlzLnNob3dDcmVhdGVDb2xsZWN0aW9uRGlhbG9nKSByZXR1cm4gIiI7CiAgICByZXR1cm4gaHRtbDhgCiAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1vdmVybGF5IiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVDb2xsZWN0aW9uRGlhbG9nID0gZmFsc2V9PgogICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZyIgQGNsaWNrPSR7KGUxMSkgPT4gZTExLnN0b3BQcm9wYWdhdGlvbigpfT4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+Q3JlYXRlIENvbGxlY3Rpb24gaW4gJHt0aGlzLnNlbGVjdGVkRGF0YWJhc2V9PC9kaXY+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgY2xhc3M9ImRpYWxvZy1pbnB1dCIKICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkNvbGxlY3Rpb24gbmFtZSIKICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5uZXdDb2xsZWN0aW9uTmFtZX0KICAgICAgICAgICAgQGlucHV0PSR7KGUxMSkgPT4gdGhpcy5uZXdDb2xsZWN0aW9uTmFtZSA9IGUxMS50YXJnZXQudmFsdWV9CiAgICAgICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gZTExLmtleSA9PT0gIkVudGVyIiAmJiB0aGlzLmNyZWF0ZUNvbGxlY3Rpb24oKX0KICAgICAgICAgIC8+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctYWN0aW9ucyI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRpYWxvZy1idG4gZGlhbG9nLWJ0bi1jYW5jZWwiIEBjbGljaz0keygpID0+IHRoaXMuc2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2cgPSBmYWxzZX0+CiAgICAgICAgICAgICAgQ2FuY2VsCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9ImRpYWxvZy1idG4gZGlhbG9nLWJ0bi1jcmVhdGUiCiAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7IXRoaXMubmV3Q29sbGVjdGlvbk5hbWUudHJpbSgpfQogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuY3JlYXRlQ29sbGVjdGlvbigpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgQ3JlYXRlCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVyQ3JlYXRlRGF0YWJhc2VEaWFsb2coKSB7CiAgICBpZiAoIXRoaXMuc2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nKSByZXR1cm4gIiI7CiAgICByZXR1cm4gaHRtbDhgCiAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1vdmVybGF5IiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVEYXRhYmFzZURpYWxvZyA9IGZhbHNlfT4KICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ciIEBjbGljaz0keyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPkNyZWF0ZSBOZXcgRGF0YWJhc2U8L2Rpdj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICBjbGFzcz0iZGlhbG9nLWlucHV0IgogICAgICAgICAgICBwbGFjZWhvbGRlcj0iRGF0YWJhc2UgbmFtZSIKICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5uZXdEYXRhYmFzZU5hbWV9CiAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IHRoaXMubmV3RGF0YWJhc2VOYW1lID0gZTExLnRhcmdldC52YWx1ZX0KICAgICAgICAgICAgQGtleWRvd249JHsoZTExKSA9PiBlMTEua2V5ID09PSAiRW50ZXIiICYmIHRoaXMuY3JlYXRlRGF0YWJhc2UoKX0KICAgICAgICAgIC8+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctYWN0aW9ucyI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRpYWxvZy1idG4gZGlhbG9nLWJ0bi1jYW5jZWwiIEBjbGljaz0keygpID0+IHRoaXMuc2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nID0gZmFsc2V9PgogICAgICAgICAgICAgIENhbmNlbAogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJkaWFsb2ctYnRuIGRpYWxvZy1idG4tY3JlYXRlIgogICAgICAgICAgICAgID9kaXNhYmxlZD0keyF0aGlzLm5ld0RhdGFiYXNlTmFtZS50cmltKCl9CiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5jcmVhdGVEYXRhYmFzZSgpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgQ3JlYXRlCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVyUzNDcmVhdGVEaWFsb2coKSB7CiAgICBpZiAoIXRoaXMuc2hvd1MzQ3JlYXRlRGlhbG9nKSByZXR1cm4gIiI7CiAgICBjb25zdCBpc0ZvbGRlciA9IHRoaXMuczNDcmVhdGVEaWFsb2dUeXBlID09PSAiZm9sZGVyIjsKICAgIGNvbnN0IHRpdGxlID0gaXNGb2xkZXIgPyAiQ3JlYXRlIE5ldyBGb2xkZXIiIDogIkNyZWF0ZSBOZXcgRmlsZSI7CiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGlzRm9sZGVyID8gImZvbGRlci1uYW1lIG9yIHBhdGgvdG8vZm9sZGVyIiA6ICJmaWxlbmFtZS50eHQgb3IgcGF0aC90by9maWxlLnR4dCI7CiAgICByZXR1cm4gaHRtbDhgCiAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1vdmVybGF5IiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dTM0NyZWF0ZURpYWxvZyA9IGZhbHNlfT4KICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ciIEBjbGljaz0keyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPiR7dGl0bGV9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctbG9jYXRpb24iPgogICAgICAgICAgICBMb2NhdGlvbjogJHt0aGlzLnMzQ3JlYXRlRGlhbG9nQnVja2V0fS8KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIGNsYXNzPSJkaWFsb2ctaW5wdXQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSR7cGxhY2Vob2xkZXJ9CiAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuczNDcmVhdGVEaWFsb2dOYW1lfQogICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiB0aGlzLnMzQ3JlYXRlRGlhbG9nTmFtZSA9IGUxMS50YXJnZXQudmFsdWV9CiAgICAgICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gZTExLmtleSA9PT0gIkVudGVyIiAmJiB0aGlzLmhhbmRsZVMzQ3JlYXRlKCl9CiAgICAgICAgICAvPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWhpbnQiPgogICAgICAgICAgICBVc2UgIi8iIHRvIGNyZWF0ZSBuZXN0ZWQgJHtpc0ZvbGRlciA/ICJmb2xkZXJzIiA6ICJwYXRoIn0gKGUuZy4sICR7aXNGb2xkZXIgPyAicGFyZW50L2NoaWxkIiA6ICJmb2xkZXIvZmlsZS50eHQifSkKICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWFjdGlvbnMiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkaWFsb2ctYnRuIGRpYWxvZy1idG4tY2FuY2VsIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dTM0NyZWF0ZURpYWxvZyA9IGZhbHNlfT4KICAgICAgICAgICAgICBDYW5jZWwKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0iZGlhbG9nLWJ0biBkaWFsb2ctYnRuLWNyZWF0ZSIKICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5zM0NyZWF0ZURpYWxvZ05hbWUudHJpbSgpfQogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuaGFuZGxlUzNDcmVhdGUoKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIENyZWF0ZQogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlclNpZGViYXIoKSB7CiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gInMzIikgewogICAgICByZXR1cm4gaHRtbDhgCiAgICAgICAgPGFzaWRlIGNsYXNzPSJzaWRlYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItaGVhZGVyIj5CdWNrZXRzPC9kaXY+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjcmVhdGUtYnRuIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVCdWNrZXREaWFsb2cgPSB0cnVlfT4KICAgICAgICAgICAgPHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+CiAgICAgICAgICAgICAgPGxpbmUgeDE9IjEyIiB5MT0iNSIgeDI9IjEyIiB5Mj0iMTkiPjwvbGluZT4KICAgICAgICAgICAgICA8bGluZSB4MT0iNSIgeTE9IjEyIiB4Mj0iMTkiIHkyPSIxMiI+PC9saW5lPgogICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgTmV3IEJ1Y2tldAogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWxpc3QiPgogICAgICAgICAgICAke3RoaXMuYnVja2V0cy5sZW5ndGggPT09IDAgPyBodG1sOGA8ZGl2IGNsYXNzPSJzaWRlYmFyLWl0ZW0iIHN0eWxlPSJjb2xvcjogIzY2NjsgY3Vyc29yOiBkZWZhdWx0OyI+Tm8gYnVja2V0cyBmb3VuZDwvZGl2PmAgOiB0aGlzLmJ1Y2tldHMubWFwKAogICAgICAgIChidWNrZXQpID0+IGh0bWw4YAogICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzaWRlYmFyLWl0ZW0gJHtidWNrZXQgPT09IHRoaXMuc2VsZWN0ZWRCdWNrZXQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZWxlY3RCdWNrZXQoYnVja2V0KX0KICAgICAgICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhlMTEpID0+IHRoaXMuaGFuZGxlQnVja2V0Q29udGV4dE1lbnUoZTExLCBidWNrZXQpfQogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaWRlYmFyLWl0ZW0tbmFtZSI+JHtidWNrZXR9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICBgCiAgICAgICl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2FzaWRlPgogICAgICBgOwogICAgfQogICAgaWYgKHRoaXMudmlld01vZGUgPT09ICJtb25nbyIpIHsKICAgICAgcmV0dXJuIGh0bWw4YAogICAgICAgIDxhc2lkZSBjbGFzcz0ic2lkZWJhciIgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVTaWRlYmFyQ29udGV4dE1lbnUoZTExKX0+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWhlYWRlciI+RGF0YWJhc2VzICYgQ29sbGVjdGlvbnM8L2Rpdj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNyZWF0ZS1idG4iIEBjbGljaz0keygpID0+IHRoaXMuc2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nID0gdHJ1ZX0+CiAgICAgICAgICAgIDxzdmcgd2lkdGg9IjE0IiBoZWlnaHQ9IjE0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgIDxsaW5lIHgxPSIxMiIgeTE9IjUiIHgyPSIxMiIgeTI9IjE5Ij48L2xpbmU+CiAgICAgICAgICAgICAgPGxpbmUgeDE9IjUiIHkxPSIxMiIgeDI9IjE5IiB5Mj0iMTIiPjwvbGluZT4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIE5ldyBEYXRhYmFzZQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWxpc3QiPgogICAgICAgICAgICAke3RoaXMudmlzaWJsZURhdGFiYXNlcy5sZW5ndGggPT09IDAgPyBodG1sOGA8ZGl2IGNsYXNzPSJzaWRlYmFyLWl0ZW0iIHN0eWxlPSJjb2xvcjogIzY2NjsgY3Vyc29yOiBkZWZhdWx0OyI+Tm8gZGF0YWJhc2VzIGZvdW5kPC9kaXY+YCA6IHRoaXMudmlzaWJsZURhdGFiYXNlcy5tYXAoKGRiKSA9PiB0aGlzLnJlbmRlckRhdGFiYXNlR3JvdXAoZGIpKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvYXNpZGU+CiAgICAgIGA7CiAgICB9CiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gImFjdGl2aXR5IikgewogICAgICByZXR1cm4gaHRtbDhgCiAgICAgICAgPGFzaWRlIGNsYXNzPSJzaWRlYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItaGVhZGVyIj5BY3Rpdml0eSBTdHJlYW08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItbGlzdCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItaXRlbSIgc3R5bGU9ImNvbG9yOiAjODg4OyBmb250LXNpemU6IDEycHg7IGN1cnNvcjogZGVmYXVsdDsiPgogICAgICAgICAgICAgIFJlYWwtdGltZSBjaGFuZ2VzIGZyb20gTW9uZ29EQiBhbmQgUzMgYXBwZWFyIGhlcmUgYXV0b21hdGljYWxseS4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2FzaWRlPgogICAgICBgOwogICAgfQogICAgcmV0dXJuIGh0bWw4YAogICAgICA8YXNpZGUgY2xhc3M9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItaGVhZGVyIj5TZXR0aW5nczwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItbGlzdCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWl0ZW0iPkNvbm5lY3Rpb248L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItaXRlbSI+RGlzcGxheTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2FzaWRlPgogICAgYDsKICB9CiAgcmVuZGVyRGF0YWJhc2VHcm91cChkYikgewogICAgcmV0dXJuIGh0bWw4YAogICAgICA8ZGl2IGNsYXNzPSJkYi1ncm91cCI+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9ImRiLWdyb3VwLWhlYWRlciAke3RoaXMuc2VsZWN0ZWREYXRhYmFzZSA9PT0gZGIubmFtZSA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNlbGVjdERhdGFiYXNlKGRiLm5hbWUpfQogICAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVEYXRhYmFzZUNvbnRleHRNZW51KGUxMSwgZGIubmFtZSl9CiAgICAgICAgPgogICAgICAgICAgPHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+CiAgICAgICAgICAgIDxlbGxpcHNlIGN4PSIxMiIgY3k9IjUiIHJ4PSI5IiByeT0iMyI+PC9lbGxpcHNlPgogICAgICAgICAgICA8cGF0aCBkPSJNMjEgMTJjMCAxLjY2LTQgMy05IDNzLTktMS4zNC05LTMiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggZD0iTTMgNXYxNGMwIDEuNjYgNCAzIDkgM3M5LTEuMzQgOS0zVjUiPjwvcGF0aD4KICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgPHNwYW4gc3R5bGU9ImZsZXg6IDE7Ij4ke2RiLm5hbWV9PC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgICR7dGhpcy5zZWxlY3RlZERhdGFiYXNlID09PSBkYi5uYW1lID8gdGhpcy5yZW5kZXJDb2xsZWN0aW9uc0xpc3QoZGIubmFtZSkgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJDb2xsZWN0aW9uc0xpc3QoZGJOYW1lKSB7CiAgICByZXR1cm4gaHRtbDhgCiAgICAgIDx0c3ZpZXctbW9uZ28tY29sbGVjdGlvbnMKICAgICAgICAuZGF0YWJhc2VOYW1lPSR7ZGJOYW1lfQogICAgICAgIC5zZWxlY3RlZENvbGxlY3Rpb249JHt0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbn0KICAgICAgICBAY29sbGVjdGlvbi1zZWxlY3RlZD0keyhlMTEpID0+IHRoaXMuc2VsZWN0Q29sbGVjdGlvbihlMTEuZGV0YWlsKX0KICAgICAgICBAY29sbGVjdGlvbi1kZWxldGVkPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVDb2xsZWN0aW9uRGVsZXRlZChlMTEpfQogICAgICA+PC90c3ZpZXctbW9uZ28tY29sbGVjdGlvbnM+CiAgICBgOwogIH0KICBoYW5kbGVDb2xsZWN0aW9uRGVsZXRlZChlMTEpIHsKICAgIGNvbnN0IHsgY29sbGVjdGlvbk5hbWUgfSA9IGUxMS5kZXRhaWw7CiAgICBpZiAodGhpcy5zZWxlY3RlZENvbGxlY3Rpb24gPT09IGNvbGxlY3Rpb25OYW1lKSB7CiAgICAgIHRoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uID0gIiI7CiAgICB9CiAgfQogIHJlbmRlckNvbnRlbnQoKSB7CiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gInMzIikgewogICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRCdWNrZXQpIHsKICAgICAgICByZXR1cm4gaHRtbDhgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWFyZWEiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTIyIDE5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg1bDIgM2g5YTIgMiAwIDAgMSAyIDJ6Ij48L3BhdGg+CiAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgPHA+U2VsZWN0IGEgYnVja2V0IHRvIGJyb3dzZTwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOwogICAgICB9CiAgICAgIHJldHVybiBodG1sOGAKICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWFyZWEiPgogICAgICAgICAgPHRzdmlldy1zMy1icm93c2VyIC5idWNrZXROYW1lPSR7dGhpcy5zZWxlY3RlZEJ1Y2tldH0+PC90c3ZpZXctczMtYnJvd3Nlcj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgIH0KICAgIGlmICh0aGlzLnZpZXdNb2RlID09PSAibW9uZ28iKSB7CiAgICAgIGlmICghdGhpcy5zZWxlY3RlZENvbGxlY3Rpb24pIHsKICAgICAgICByZXR1cm4gaHRtbDhgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWFyZWEiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgICAgPGVsbGlwc2UgY3g9IjEyIiBjeT0iNSIgcng9IjkiIHJ5PSIzIj48L2VsbGlwc2U+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjEgMTJjMCAxLjY2LTQgMy05IDNzLTktMS4zNC05LTMiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zIDV2MTRjMCAxLjY2IDQgMyA5IDNzOS0xLjM0IDktM1Y1Ij48L3BhdGg+CiAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgPHA+U2VsZWN0IGEgY29sbGVjdGlvbiB0byB2aWV3IGRvY3VtZW50czwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOwogICAgICB9CiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbiA9PT0gIl9fb3ZlcnZpZXdfXyIpIHsKICAgICAgICByZXR1cm4gaHRtbDhgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWFyZWEiPgogICAgICAgICAgICA8dHN2aWV3LW1vbmdvLWRiLW92ZXJ2aWV3CiAgICAgICAgICAgICAgLmRhdGFiYXNlTmFtZT0ke3RoaXMuc2VsZWN0ZWREYXRhYmFzZX0KICAgICAgICAgICAgPjwvdHN2aWV3LW1vbmdvLWRiLW92ZXJ2aWV3PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYDsKICAgICAgfQogICAgICByZXR1cm4gaHRtbDhgCiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudC1hcmVhIj4KICAgICAgICAgIDx0c3ZpZXctbW9uZ28tYnJvd3NlcgogICAgICAgICAgICAuZGF0YWJhc2VOYW1lPSR7dGhpcy5zZWxlY3RlZERhdGFiYXNlfQogICAgICAgICAgICAuY29sbGVjdGlvbk5hbWU9JHt0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbn0KICAgICAgICAgID48L3Rzdmlldy1tb25nby1icm93c2VyPgogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgfQogICAgaWYgKHRoaXMudmlld01vZGUgPT09ICJhY3Rpdml0eSIpIHsKICAgICAgcmV0dXJuIGh0bWw4YAogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtYXJlYSIgc3R5bGU9InBhZGRpbmc6IDA7Ij4KICAgICAgICAgIDx0c3ZpZXctYWN0aXZpdHktc3RyZWFtCiAgICAgICAgICAgIEBuYXZpZ2F0ZS10by1tb25nbz0ke3RoaXMuaGFuZGxlTmF2aWdhdGVUb01vbmdvfQogICAgICAgICAgICBAbmF2aWdhdGUtdG8tczM9JHt0aGlzLmhhbmRsZU5hdmlnYXRlVG9TM30KICAgICAgICAgID48L3Rzdmlldy1hY3Rpdml0eS1zdHJlYW0+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICByZXR1cm4gaHRtbDhgCiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtYXJlYSI+CiAgICAgICAgPGgyPlNldHRpbmdzPC9oMj4KICAgICAgICA8cD5Db25maWd1cmF0aW9uIG9wdGlvbnMgY29taW5nIHNvb24uPC9wPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIGhhbmRsZU5hdmlnYXRlVG9Nb25nbyhlMTEpIHsKICAgIGNvbnN0IHsgZGF0YWJhc2UsIGNvbGxlY3Rpb24sIGRvY3VtZW50SWQgfSA9IGUxMS5kZXRhaWw7CiAgICB0aGlzLnZpZXdNb2RlID0gIm1vbmdvIjsKICAgIHRoaXMuc2VsZWN0ZWREYXRhYmFzZSA9IGRhdGFiYXNlOwogICAgdGhpcy5zZWxlY3RlZENvbGxlY3Rpb24gPSBjb2xsZWN0aW9uOwogIH0KICBoYW5kbGVOYXZpZ2F0ZVRvUzMoZTExKSB7CiAgICBjb25zdCB7IGJ1Y2tldCwga2V5OiBrZXkyIH0gPSBlMTEuZGV0YWlsOwogICAgdGhpcy52aWV3TW9kZSA9ICJzMyI7CiAgICB0aGlzLnNlbGVjdGVkQnVja2V0ID0gYnVja2V0OwogIH0KfTsKX2luaXQgPSBfX2RlY29yYXRvclN0YXJ0KF9hNCk7Cl92aWV3TW9kZSA9IG5ldyBXZWFrTWFwKCk7Cl9zZWxlY3RlZEJ1Y2tldCA9IG5ldyBXZWFrTWFwKCk7Cl9zZWxlY3RlZERhdGFiYXNlID0gbmV3IFdlYWtNYXAoKTsKX3NlbGVjdGVkQ29sbGVjdGlvbiA9IG5ldyBXZWFrTWFwKCk7Cl9idWNrZXRzID0gbmV3IFdlYWtNYXAoKTsKX2RhdGFiYXNlcyA9IG5ldyBXZWFrTWFwKCk7Cl9zaG93Q3JlYXRlQnVja2V0RGlhbG9nID0gbmV3IFdlYWtNYXAoKTsKX25ld0J1Y2tldE5hbWUgPSBuZXcgV2Vha01hcCgpOwpfc2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2cgPSBuZXcgV2Vha01hcCgpOwpfbmV3Q29sbGVjdGlvbk5hbWUgPSBuZXcgV2Vha01hcCgpOwpfc2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nID0gbmV3IFdlYWtNYXAoKTsKX25ld0RhdGFiYXNlTmFtZSA9IG5ldyBXZWFrTWFwKCk7Cl9zaG93U3lzdGVtRGF0YWJhc2VzID0gbmV3IFdlYWtNYXAoKTsKX3Nob3dTM0NyZWF0ZURpYWxvZyA9IG5ldyBXZWFrTWFwKCk7Cl9zM0NyZWF0ZURpYWxvZ1R5cGUgPSBuZXcgV2Vha01hcCgpOwpfczNDcmVhdGVEaWFsb2dCdWNrZXQgPSBuZXcgV2Vha01hcCgpOwpfczNDcmVhdGVEaWFsb2dOYW1lID0gbmV3IFdlYWtNYXAoKTsKX3NpZGViYXJXaWR0aCA9IG5ldyBXZWFrTWFwKCk7Cl9pc1Jlc2l6aW5nU2lkZWJhciA9IG5ldyBXZWFrTWFwKCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAidmlld01vZGUiLCBfdmlld01vZGVfZGVjLCBUc3ZpZXdBcHAsIF92aWV3TW9kZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2VsZWN0ZWRCdWNrZXQiLCBfc2VsZWN0ZWRCdWNrZXRfZGVjLCBUc3ZpZXdBcHAsIF9zZWxlY3RlZEJ1Y2tldCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2VsZWN0ZWREYXRhYmFzZSIsIF9zZWxlY3RlZERhdGFiYXNlX2RlYywgVHN2aWV3QXBwLCBfc2VsZWN0ZWREYXRhYmFzZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2VsZWN0ZWRDb2xsZWN0aW9uIiwgX3NlbGVjdGVkQ29sbGVjdGlvbl9kZWMsIFRzdmlld0FwcCwgX3NlbGVjdGVkQ29sbGVjdGlvbik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiYnVja2V0cyIsIF9idWNrZXRzX2RlYywgVHN2aWV3QXBwLCBfYnVja2V0cyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiZGF0YWJhc2VzIiwgX2RhdGFiYXNlc19kZWMsIFRzdmlld0FwcCwgX2RhdGFiYXNlcyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2hvd0NyZWF0ZUJ1Y2tldERpYWxvZyIsIF9zaG93Q3JlYXRlQnVja2V0RGlhbG9nX2RlYywgVHN2aWV3QXBwLCBfc2hvd0NyZWF0ZUJ1Y2tldERpYWxvZyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAibmV3QnVja2V0TmFtZSIsIF9uZXdCdWNrZXROYW1lX2RlYywgVHN2aWV3QXBwLCBfbmV3QnVja2V0TmFtZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2ciLCBfc2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2dfZGVjLCBUc3ZpZXdBcHAsIF9zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAibmV3Q29sbGVjdGlvbk5hbWUiLCBfbmV3Q29sbGVjdGlvbk5hbWVfZGVjLCBUc3ZpZXdBcHAsIF9uZXdDb2xsZWN0aW9uTmFtZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nIiwgX3Nob3dDcmVhdGVEYXRhYmFzZURpYWxvZ19kZWMsIFRzdmlld0FwcCwgX3Nob3dDcmVhdGVEYXRhYmFzZURpYWxvZyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAibmV3RGF0YWJhc2VOYW1lIiwgX25ld0RhdGFiYXNlTmFtZV9kZWMsIFRzdmlld0FwcCwgX25ld0RhdGFiYXNlTmFtZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2hvd1N5c3RlbURhdGFiYXNlcyIsIF9zaG93U3lzdGVtRGF0YWJhc2VzX2RlYywgVHN2aWV3QXBwLCBfc2hvd1N5c3RlbURhdGFiYXNlcyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2hvd1MzQ3JlYXRlRGlhbG9nIiwgX3Nob3dTM0NyZWF0ZURpYWxvZ19kZWMsIFRzdmlld0FwcCwgX3Nob3dTM0NyZWF0ZURpYWxvZyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiczNDcmVhdGVEaWFsb2dUeXBlIiwgX3MzQ3JlYXRlRGlhbG9nVHlwZV9kZWMsIFRzdmlld0FwcCwgX3MzQ3JlYXRlRGlhbG9nVHlwZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiczNDcmVhdGVEaWFsb2dCdWNrZXQiLCBfczNDcmVhdGVEaWFsb2dCdWNrZXRfZGVjLCBUc3ZpZXdBcHAsIF9zM0NyZWF0ZURpYWxvZ0J1Y2tldCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiczNDcmVhdGVEaWFsb2dOYW1lIiwgX3MzQ3JlYXRlRGlhbG9nTmFtZV9kZWMsIFRzdmlld0FwcCwgX3MzQ3JlYXRlRGlhbG9nTmFtZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2lkZWJhcldpZHRoIiwgX3NpZGViYXJXaWR0aF9kZWMsIFRzdmlld0FwcCwgX3NpZGViYXJXaWR0aCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiaXNSZXNpemluZ1NpZGViYXIiLCBfaXNSZXNpemluZ1NpZGViYXJfZGVjLCBUc3ZpZXdBcHAsIF9pc1Jlc2l6aW5nU2lkZWJhcik7ClRzdmlld0FwcCA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCAwLCAiVHN2aWV3QXBwIiwgX1Rzdmlld0FwcF9kZWNvcmF0b3JzLCBUc3ZpZXdBcHApOwpfX3B1YmxpY0ZpZWxkKFRzdmlld0FwcCwgInN0eWxlcyIsIFsKICBjc3NNYW5hZ2VyMy5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczNgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRzdmlldy1iZy1wcmltYXJ5LCAjMWExYTFhKTsKICAgICAgICBjb2xvcjogI2VlZTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5hcHAtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogNDhweCAxZnI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuYXBwLWhlYWRlciB7CiAgICAgICAgYmFja2dyb3VuZDogIzE0MTQxNDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIGdhcDogMjRweDsKICAgICAgfQoKICAgICAgLmFwcC10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuYXBwLXRpdGxlIHN2ZyB7CiAgICAgICAgd2lkdGg6IDI0cHg7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICB9CgogICAgICAubmF2LXRhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5uYXYtdGFiIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7CiAgICAgIH0KCiAgICAgIC5uYXYtdGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICB9CgogICAgICAubmF2LXRhYi5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBjb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLmFwcC1tYWluIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogdmFyKC0tc2lkZWJhci13aWR0aCwgMjQwcHgpIDRweCAxZnI7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1kaXZpZGVyIHsKICAgICAgICB3aWR0aDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtZGl2aWRlcjpob3ZlciwKICAgICAgLnJlc2l6ZS1kaXZpZGVyLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogICAgICB9CgogICAgICAuc2lkZWJhciB7CiAgICAgICAgYmFja2dyb3VuZDogIzFlMWUxZTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjMzMzOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzM7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWxpc3QgewogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgfQoKICAgICAgLnNpZGViYXItaXRlbSB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzOwogICAgICB9CgogICAgICAuc2lkZWJhci1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICB9CgogICAgICAuc2lkZWJhci1pdGVtLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWl0ZW0gLmNvdW50IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQtYXJlYSB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSBzdmcgewogICAgICAgIHdpZHRoOiA2NHB4OwogICAgICAgIGhlaWdodDogNjRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLmRiLWdyb3VwIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC5kYi1ncm91cC1oZWFkZXIgewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAjOTk5OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5kYi1ncm91cC1oZWFkZXI6aG92ZXIgewogICAgICAgIGNvbG9yOiAjY2NjOwogICAgICB9CgogICAgICAuZGItZ3JvdXAtY29sbGVjdGlvbnMgewogICAgICAgIHBhZGRpbmctbGVmdDogMTJweDsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24taXRlbSB7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24taXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24taXRlbS5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgICAgICBjb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLmNyZWF0ZS1idG4gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBtYXJnaW46IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgfQoKICAgICAgLmNyZWF0ZS1idG46aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7CiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctb3ZlcmxheSB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNyk7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgIH0KCiAgICAgIC5kaWFsb2cgewogICAgICAgIGJhY2tncm91bmQ6ICMxZTFlMWU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1pbi13aWR0aDogNDAwcHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAyMHB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjUpOwogICAgICB9CgogICAgICAuZGlhbG9nLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuZGlhbG9nLWlucHV0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAxMHB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogIzE0MTQxNDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuZGlhbG9nLWlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1sb2NhdGlvbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgfQoKICAgICAgLmRpYWxvZy1oaW50IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBtYXJnaW4tdG9wOiAtOHB4OwogICAgICB9CgogICAgICAuZGlhbG9nLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tY2FuY2VsIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0OwogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1jYW5jZWw6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWNyZWF0ZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzQwNDA0MDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWNyZWF0ZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogIzUwNTA1MDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tY3JlYXRlOmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tZGVsZXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjIpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlZjQ0NDQ7CiAgICAgICAgY29sb3I6ICNmODcxNzE7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWRlbGV0ZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4zKTsKICAgICAgfQoKICAgICAgLnNpZGViYXItaXRlbS1jb250ZW50IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWl0ZW0tbmFtZSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMSwgVHN2aWV3QXBwKTsKCi8vIHRzX3dlYi9lbGVtZW50cy90c3ZpZXctczMtYnJvd3Nlci50cwp2YXIgX2lzU3RyZWFtQ29ubmVjdGVkX2RlYywgX3JlY2VudENoYW5nZUNvdW50X2RlYywgX2lzUmVzaXppbmdQcmV2aWV3X2RlYywgX3ByZXZpZXdXaWR0aF9kZWMsIF9yZWZyZXNoS2V5X2RlYywgX3NlbGVjdGVkS2V5X2RlYywgX2N1cnJlbnRQcmVmaXhfZGVjLCBfdmlld1R5cGVfZGVjLCBfYnVja2V0TmFtZV9kZWMsIF9hNSwgX1Rzdmlld1MzQnJvd3Nlcl9kZWNvcmF0b3JzLCBfaW5pdDIsIF9idWNrZXROYW1lLCBfdmlld1R5cGUsIF9jdXJyZW50UHJlZml4LCBfc2VsZWN0ZWRLZXksIF9yZWZyZXNoS2V5LCBfcHJldmlld1dpZHRoLCBfaXNSZXNpemluZ1ByZXZpZXcsIF9yZWNlbnRDaGFuZ2VDb3VudCwgX2lzU3RyZWFtQ29ubmVjdGVkOwp2YXIgeyBodG1sOiBodG1sOSwgY3NzOiBjc3M0LCBjc3NNYW5hZ2VyOiBjc3NNYW5hZ2VyNCwgY3VzdG9tRWxlbWVudDogY3VzdG9tRWxlbWVudDMsIHByb3BlcnR5OiBwcm9wZXJ0eTIsIHN0YXRlOiBzdGF0ZTMsIERlZXNFbGVtZW50OiBEZWVzRWxlbWVudDQgfSA9IHBsdWdpbnNfZXhwb3J0czU7Cl9Uc3ZpZXdTM0Jyb3dzZXJfZGVjb3JhdG9ycyA9IFtjdXN0b21FbGVtZW50MygidHN2aWV3LXMzLWJyb3dzZXIiKV07CnZhciBUc3ZpZXdTM0Jyb3dzZXIgPSBjbGFzcyBleHRlbmRzIChfYTUgPSBEZWVzRWxlbWVudDQsIF9idWNrZXROYW1lX2RlYyA9IFtwcm9wZXJ0eTIoeyB0eXBlOiBTdHJpbmcgfSldLCBfdmlld1R5cGVfZGVjID0gW3N0YXRlMygpXSwgX2N1cnJlbnRQcmVmaXhfZGVjID0gW3N0YXRlMygpXSwgX3NlbGVjdGVkS2V5X2RlYyA9IFtzdGF0ZTMoKV0sIF9yZWZyZXNoS2V5X2RlYyA9IFtzdGF0ZTMoKV0sIF9wcmV2aWV3V2lkdGhfZGVjID0gW3N0YXRlMygpXSwgX2lzUmVzaXppbmdQcmV2aWV3X2RlYyA9IFtzdGF0ZTMoKV0sIF9yZWNlbnRDaGFuZ2VDb3VudF9kZWMgPSBbc3RhdGUzKCldLCBfaXNTdHJlYW1Db25uZWN0ZWRfZGVjID0gW3N0YXRlMygpXSwgX2E1KSB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9idWNrZXROYW1lLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDIsIDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF92aWV3VHlwZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCAxMiwgdGhpcywgImNvbHVtbnMiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jdXJyZW50UHJlZml4LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDIsIDE2LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDIsIDE5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2VsZWN0ZWRLZXksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMjAsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMjMsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9yZWZyZXNoS2V5LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDIsIDI0LCB0aGlzLCAwKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMjcsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9wcmV2aWV3V2lkdGgsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMjgsIHRoaXMsIDM1MCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDIsIDMxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfaXNSZXNpemluZ1ByZXZpZXcsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMzIsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMzUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9yZWNlbnRDaGFuZ2VDb3VudCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCAzNiwgdGhpcywgMCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDIsIDM5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfaXNTdHJlYW1Db25uZWN0ZWQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgNDAsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgNDMsIHRoaXMpOwogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiY2hhbmdlU3Vic2NyaXB0aW9uIiwgbnVsbCk7CiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJzdGFydFByZXZpZXdSZXNpemUiLCAoZTExKSA9PiB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLmlzUmVzaXppbmdQcmV2aWV3ID0gdHJ1ZTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVQcmV2aWV3UmVzaXplKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuZW5kUHJldmlld1Jlc2l6ZSk7CiAgICB9KTsKICAgIF9fcHVibGljRmllbGQodGhpcywgImhhbmRsZVByZXZpZXdSZXNpemUiLCAoZTExKSA9PiB7CiAgICAgIGlmICghdGhpcy5pc1Jlc2l6aW5nUHJldmlldykgcmV0dXJuOwogICAgICBjb25zdCBjb250ZW50RWwgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5jb250ZW50Iik7CiAgICAgIGlmICghY29udGVudEVsKSByZXR1cm47CiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250ZW50RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5taW4oTWF0aC5tYXgoY29udGFpbmVyUmVjdC5yaWdodCAtIGUxMS5jbGllbnRYLCAyNTApLCA2MDApOwogICAgICB0aGlzLnByZXZpZXdXaWR0aCA9IG5ld1dpZHRoOwogICAgfSk7CiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJlbmRQcmV2aWV3UmVzaXplIiwgKCkgPT4gewogICAgICB0aGlzLmlzUmVzaXppbmdQcmV2aWV3ID0gZmFsc2U7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMuaGFuZGxlUHJldmlld1Jlc2l6ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmVuZFByZXZpZXdSZXNpemUpOwogICAgfSk7CiAgfQogIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIHRoaXMuc3Vic2NyaWJlVG9DaGFuZ2VzKCk7CiAgfQogIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tQ2hhbmdlcygpOwogIH0KICBzZXRWaWV3VHlwZSh0eXBlNSkgewogICAgdGhpcy52aWV3VHlwZSA9IHR5cGU1OwogIH0KICBuYXZpZ2F0ZVRvUHJlZml4KHByZWZpeDQpIHsKICAgIHRoaXMuY3VycmVudFByZWZpeCA9IHByZWZpeDQ7CiAgICB0aGlzLnNlbGVjdGVkS2V5ID0gIiI7CiAgfQogIGhhbmRsZUtleVNlbGVjdGVkKGUxMSkgewogICAgdGhpcy5zZWxlY3RlZEtleSA9IGUxMS5kZXRhaWwua2V5OwogIH0KICBoYW5kbGVOYXZpZ2F0ZShlMTEpIHsKICAgIHRoaXMubmF2aWdhdGVUb1ByZWZpeChlMTEuZGV0YWlsLnByZWZpeCk7CiAgfQogIGhhbmRsZU9iamVjdERlbGV0ZWQoZTExKSB7CiAgICB0aGlzLnNlbGVjdGVkS2V5ID0gIiI7CiAgICB0aGlzLnJlZnJlc2hLZXkrKzsKICB9CiAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiYnVja2V0TmFtZSIpKSB7CiAgICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSAiIjsKICAgICAgdGhpcy5jdXJyZW50UHJlZml4ID0gIiI7CiAgICAgIHRoaXMucmVjZW50Q2hhbmdlQ291bnQgPSAwOwogICAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbUNoYW5nZXMoKTsKICAgICAgdGhpcy5zdWJzY3JpYmVUb0NoYW5nZXMoKTsKICAgIH0KICB9CiAgYXN5bmMgc3Vic2NyaWJlVG9DaGFuZ2VzKCkgewogICAgaWYgKCF0aGlzLmJ1Y2tldE5hbWUpIHJldHVybjsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBjaGFuZ2VTdHJlYW1TZXJ2aWNlLnN1YnNjcmliZVRvQnVja2V0KHRoaXMuYnVja2V0TmFtZSwgdGhpcy5jdXJyZW50UHJlZml4IHx8IHZvaWQgMCk7CiAgICAgIHRoaXMuaXNTdHJlYW1Db25uZWN0ZWQgPSBzdWNjZXNzOwogICAgICBpZiAoc3VjY2VzcykgewogICAgICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uID0gY2hhbmdlU3RyZWFtU2VydmljZS5nZXRCdWNrZXRDaGFuZ2VzKHRoaXMuYnVja2V0TmFtZSwgdGhpcy5jdXJyZW50UHJlZml4IHx8IHZvaWQgMCkuc3Vic2NyaWJlKChldmVudCkgPT4gewogICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UoZXZlbnQpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oIltTM0Jyb3dzZXJdIEZhaWxlZCB0byBzdWJzY3JpYmUgdG8gY2hhbmdlczoiLCBlcnJvcik7CiAgICAgIHRoaXMuaXNTdHJlYW1Db25uZWN0ZWQgPSBmYWxzZTsKICAgIH0KICB9CiAgdW5zdWJzY3JpYmVGcm9tQ2hhbmdlcygpIHsKICAgIGlmICh0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbikgewogICAgICB0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICB0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbiA9IG51bGw7CiAgICB9CiAgICBpZiAodGhpcy5idWNrZXROYW1lKSB7CiAgICAgIGNoYW5nZVN0cmVhbVNlcnZpY2UudW5zdWJzY3JpYmVGcm9tQnVja2V0KHRoaXMuYnVja2V0TmFtZSwgdGhpcy5jdXJyZW50UHJlZml4IHx8IHZvaWQgMCk7CiAgICB9CiAgICB0aGlzLmlzU3RyZWFtQ29ubmVjdGVkID0gZmFsc2U7CiAgfQogIGhhbmRsZUNoYW5nZShldmVudCkgewogICAgY29uc29sZS5sb2coIltTM0Jyb3dzZXJdIFJlY2VpdmVkIGNoYW5nZToiLCBldmVudCk7CiAgICB0aGlzLnJlY2VudENoYW5nZUNvdW50Kys7CiAgICB0aGlzLnJlZnJlc2hLZXkrKzsKICB9CiAgcmVuZGVyKCkgewogICAgY29uc3QgYnJlYWRjcnVtYlBhcnRzID0gdGhpcy5jdXJyZW50UHJlZml4ID8gdGhpcy5jdXJyZW50UHJlZml4LnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pIDogW107CiAgICByZXR1cm4gaHRtbDlgCiAgICAgIDxkaXYgY2xhc3M9ImJyb3dzZXItY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImJyZWFkY3J1bWIiPgogICAgICAgICAgICA8c3BhbgogICAgICAgICAgICAgIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5uYXZpZ2F0ZVRvUHJlZml4KCIiKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgICR7dGhpcy5idWNrZXROYW1lfQogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICR7YnJlYWRjcnVtYlBhcnRzLm1hcCgocGFydCwgaW5kZXgyKSA9PiB7CiAgICAgIGNvbnN0IHByZWZpeDQgPSBicmVhZGNydW1iUGFydHMuc2xpY2UoMCwgaW5kZXgyICsgMSkuam9pbigiLyIpICsgIi8iOwogICAgICByZXR1cm4gaHRtbDlgCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYnJlYWRjcnVtYi1zZXBhcmF0b3IiPi88L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbgogICAgICAgICAgICAgICAgICBjbGFzcz0iYnJlYWRjcnVtYi1pdGVtIgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLm5hdmlnYXRlVG9QcmVmaXgocHJlZml4NCl9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICR7cGFydH0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICBgOwogICAgfSl9CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdHJlYW0tc3RhdHVzIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0cmVhbS1kb3QgJHt0aGlzLmlzU3RyZWFtQ29ubmVjdGVkID8gImNvbm5lY3RlZCIgOiAiIn0iPjwvc3Bhbj4KICAgICAgICAgICAgJHt0aGlzLmlzU3RyZWFtQ29ubmVjdGVkID8gIkxpdmUiIDogIk9mZmxpbmUifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAke3RoaXMucmVjZW50Q2hhbmdlQ291bnQgPiAwID8gaHRtbDlgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGFuZ2UtaW5kaWNhdG9yIHB1bHNlIj4KICAgICAgICAgICAgICAgICAgJHt0aGlzLnJlY2VudENoYW5nZUNvdW50fSBjaGFuZ2Uke3RoaXMucmVjZW50Q2hhbmdlQ291bnQgPiAxID8gInMiIDogIiJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3LXRvZ2dsZSI+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0idmlldy1idG4gJHt0aGlzLnZpZXdUeXBlID09PSAiY29sdW1ucyIgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNldFZpZXdUeXBlKCJjb2x1bW5zIil9CiAgICAgICAgICAgID4KICAgICAgICAgICAgICBDb2x1bW5zCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9InZpZXctYnRuICR7dGhpcy52aWV3VHlwZSA9PT0gImtleXMiID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZXRWaWV3VHlwZSgia2V5cyIpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgTGlzdAogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50ICR7dGhpcy5zZWxlY3RlZEtleSA/ICJoYXMtcHJldmlldyIgOiAiIn0iIHN0eWxlPSItLXByZXZpZXctd2lkdGg6ICR7dGhpcy5wcmV2aWV3V2lkdGh9cHgiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFpbi12aWV3Ij4KICAgICAgICAgICAgJHt0aGlzLnZpZXdUeXBlID09PSAiY29sdW1ucyIgPyBodG1sOWAKICAgICAgICAgICAgICAgICAgPHRzdmlldy1zMy1jb2x1bW5zCiAgICAgICAgICAgICAgICAgICAgLmJ1Y2tldE5hbWU9JHt0aGlzLmJ1Y2tldE5hbWV9CiAgICAgICAgICAgICAgICAgICAgLmN1cnJlbnRQcmVmaXg9JHt0aGlzLmN1cnJlbnRQcmVmaXh9CiAgICAgICAgICAgICAgICAgICAgLnJlZnJlc2hLZXk9JHt0aGlzLnJlZnJlc2hLZXl9CiAgICAgICAgICAgICAgICAgICAgQGtleS1zZWxlY3RlZD0ke3RoaXMuaGFuZGxlS2V5U2VsZWN0ZWR9CiAgICAgICAgICAgICAgICAgICAgQG5hdmlnYXRlPSR7dGhpcy5oYW5kbGVOYXZpZ2F0ZX0KICAgICAgICAgICAgICAgICAgPjwvdHN2aWV3LXMzLWNvbHVtbnM+CiAgICAgICAgICAgICAgICBgIDogaHRtbDlgCiAgICAgICAgICAgICAgICAgIDx0c3ZpZXctczMta2V5cwogICAgICAgICAgICAgICAgICAgIC5idWNrZXROYW1lPSR7dGhpcy5idWNrZXROYW1lfQogICAgICAgICAgICAgICAgICAgIC5jdXJyZW50UHJlZml4PSR7dGhpcy5jdXJyZW50UHJlZml4fQogICAgICAgICAgICAgICAgICAgIC5yZWZyZXNoS2V5PSR7dGhpcy5yZWZyZXNoS2V5fQogICAgICAgICAgICAgICAgICAgIEBrZXktc2VsZWN0ZWQ9JHt0aGlzLmhhbmRsZUtleVNlbGVjdGVkfQogICAgICAgICAgICAgICAgICAgIEBuYXZpZ2F0ZT0ke3RoaXMuaGFuZGxlTmF2aWdhdGV9CiAgICAgICAgICAgICAgICAgID48L3Rzdmlldy1zMy1rZXlzPgogICAgICAgICAgICAgICAgYH0KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICR7dGhpcy5zZWxlY3RlZEtleSA/IGh0bWw5YAogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0icmVzaXplLWRpdmlkZXIgJHt0aGlzLmlzUmVzaXppbmdQcmV2aWV3ID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgICAgIEBtb3VzZWRvd249JHt0aGlzLnN0YXJ0UHJldmlld1Jlc2l6ZX0KICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcGFuZWwiPgogICAgICAgICAgICAgICAgICA8dHN2aWV3LXMzLXByZXZpZXcKICAgICAgICAgICAgICAgICAgICAuYnVja2V0TmFtZT0ke3RoaXMuYnVja2V0TmFtZX0KICAgICAgICAgICAgICAgICAgICAub2JqZWN0S2V5PSR7dGhpcy5zZWxlY3RlZEtleX0KICAgICAgICAgICAgICAgICAgICBAb2JqZWN0LWRlbGV0ZWQ9JHt0aGlzLmhhbmRsZU9iamVjdERlbGV0ZWR9CiAgICAgICAgICAgICAgICAgID48L3Rzdmlldy1zMy1wcmV2aWV3PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQp9OwpfaW5pdDIgPSBfX2RlY29yYXRvclN0YXJ0KF9hNSk7Cl9idWNrZXROYW1lID0gbmV3IFdlYWtNYXAoKTsKX3ZpZXdUeXBlID0gbmV3IFdlYWtNYXAoKTsKX2N1cnJlbnRQcmVmaXggPSBuZXcgV2Vha01hcCgpOwpfc2VsZWN0ZWRLZXkgPSBuZXcgV2Vha01hcCgpOwpfcmVmcmVzaEtleSA9IG5ldyBXZWFrTWFwKCk7Cl9wcmV2aWV3V2lkdGggPSBuZXcgV2Vha01hcCgpOwpfaXNSZXNpemluZ1ByZXZpZXcgPSBuZXcgV2Vha01hcCgpOwpfcmVjZW50Q2hhbmdlQ291bnQgPSBuZXcgV2Vha01hcCgpOwpfaXNTdHJlYW1Db25uZWN0ZWQgPSBuZXcgV2Vha01hcCgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDIsIDQsICJidWNrZXROYW1lIiwgX2J1Y2tldE5hbWVfZGVjLCBUc3ZpZXdTM0Jyb3dzZXIsIF9idWNrZXROYW1lKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQyLCA0LCAidmlld1R5cGUiLCBfdmlld1R5cGVfZGVjLCBUc3ZpZXdTM0Jyb3dzZXIsIF92aWV3VHlwZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MiwgNCwgImN1cnJlbnRQcmVmaXgiLCBfY3VycmVudFByZWZpeF9kZWMsIFRzdmlld1MzQnJvd3NlciwgX2N1cnJlbnRQcmVmaXgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDIsIDQsICJzZWxlY3RlZEtleSIsIF9zZWxlY3RlZEtleV9kZWMsIFRzdmlld1MzQnJvd3NlciwgX3NlbGVjdGVkS2V5KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQyLCA0LCAicmVmcmVzaEtleSIsIF9yZWZyZXNoS2V5X2RlYywgVHN2aWV3UzNCcm93c2VyLCBfcmVmcmVzaEtleSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MiwgNCwgInByZXZpZXdXaWR0aCIsIF9wcmV2aWV3V2lkdGhfZGVjLCBUc3ZpZXdTM0Jyb3dzZXIsIF9wcmV2aWV3V2lkdGgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDIsIDQsICJpc1Jlc2l6aW5nUHJldmlldyIsIF9pc1Jlc2l6aW5nUHJldmlld19kZWMsIFRzdmlld1MzQnJvd3NlciwgX2lzUmVzaXppbmdQcmV2aWV3KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQyLCA0LCAicmVjZW50Q2hhbmdlQ291bnQiLCBfcmVjZW50Q2hhbmdlQ291bnRfZGVjLCBUc3ZpZXdTM0Jyb3dzZXIsIF9yZWNlbnRDaGFuZ2VDb3VudCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MiwgNCwgImlzU3RyZWFtQ29ubmVjdGVkIiwgX2lzU3RyZWFtQ29ubmVjdGVkX2RlYywgVHN2aWV3UzNCcm93c2VyLCBfaXNTdHJlYW1Db25uZWN0ZWQpOwpUc3ZpZXdTM0Jyb3dzZXIgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDIsIDAsICJUc3ZpZXdTM0Jyb3dzZXIiLCBfVHN2aWV3UzNCcm93c2VyX2RlY29yYXRvcnMsIFRzdmlld1MzQnJvd3Nlcik7Cl9fcHVibGljRmllbGQoVHN2aWV3UzNCcm93c2VyLCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXI0LmRlZmF1bHRTdHlsZXMsCiAgdGhlbWVTdHlsZXMsCiAgY3NzNGAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmJyb3dzZXItY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAudG9vbGJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWItaXRlbSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7CiAgICAgIH0KCiAgICAgIC5icmVhZGNydW1iLWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWItc2VwYXJhdG9yIHsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgfQoKICAgICAgLnZpZXctdG9nZ2xlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAudmlldy1idG4gewogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0NDQ7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwogICAgICB9CgogICAgICAudmlldy1idG46aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogIzY2NjsKICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgfQoKICAgICAgLnZpZXctYnRuLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGJvcmRlci1jb2xvcjogIzQwNDA0MDsKICAgICAgICBjb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICBnYXA6IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNvbnRlbnQuaGFzLXByZXZpZXcgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDRweCB2YXIoLS1wcmV2aWV3LXdpZHRoLCAzNTBweCk7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtZGl2aWRlciB7CiAgICAgICAgd2lkdGg6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzOwogICAgICB9CgogICAgICAucmVzaXplLWRpdmlkZXI6aG92ZXIsCiAgICAgIC5yZXNpemUtZGl2aWRlci5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgICAgfQoKICAgICAgLm1haW4tdmlldyB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgfQoKICAgICAgLnByZXZpZXctcGFuZWwgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBtYXJnaW4tbGVmdDogMTJweDsKICAgICAgfQoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkgewogICAgICAgIC5jb250ZW50LAogICAgICAgIC5jb250ZW50Lmhhcy1wcmV2aWV3IHsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgIH0KCiAgICAgICAgLnByZXZpZXctcGFuZWwsCiAgICAgICAgLnJlc2l6ZS1kaXZpZGVyIHsKICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgfQogICAgICB9CgogICAgICAuc3RyZWFtLXN0YXR1cyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEycHg7CiAgICAgIH0KCiAgICAgIC5zdHJlYW0tZG90IHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAjODg4OwogICAgICB9CgogICAgICAuc3RyZWFtLWRvdC5jb25uZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICMyMmM1NWU7CiAgICAgIH0KCiAgICAgIC5jaGFuZ2UtaW5kaWNhdG9yIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NSwgMTU4LCAxMSwgMC4yKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAjZjU5ZTBiOwogICAgICAgIG1hcmdpbi1yaWdodDogMTJweDsKICAgICAgfQoKICAgICAgLmNoYW5nZS1pbmRpY2F0b3IucHVsc2UgewogICAgICAgIGFuaW1hdGlvbjogcHVsc2Utb3JhbmdlIDFzIGVhc2UtaW4tb3V0OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHB1bHNlLW9yYW5nZSB7CiAgICAgICAgMCUgeyBiYWNrZ3JvdW5kOiByZ2JhKDI0NSwgMTU4LCAxMSwgMC40KTsgfQogICAgICAgIDEwMCUgeyBiYWNrZ3JvdW5kOiByZ2JhKDI0NSwgMTU4LCAxMSwgMC4yKTsgfQogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdDIsIDEsIFRzdmlld1MzQnJvd3Nlcik7CgovLyB0c193ZWIvdXRpbGl0aWVzL2Zvcm1hdHRlcnMudHMKZnVuY3Rpb24gZm9ybWF0U2l6ZShieXRlcykgewogIGlmIChieXRlcyA9PT0gdm9pZCAwIHx8IGJ5dGVzID09PSBudWxsKSByZXR1cm4gIi0iOwogIGlmIChieXRlcyA9PT0gMCkgcmV0dXJuICIwIEIiOwogIGNvbnN0IHVuaXRzMiA9IFsiQiIsICJLQiIsICJNQiIsICJHQiIsICJUQiJdOwogIGxldCBzaXplID0gYnl0ZXM7CiAgbGV0IHVuaXRJbmRleCA9IDA7CiAgd2hpbGUgKHNpemUgPj0gMTAyNCAmJiB1bml0SW5kZXggPCB1bml0czIubGVuZ3RoIC0gMSkgewogICAgc2l6ZSAvPSAxMDI0OwogICAgdW5pdEluZGV4Kys7CiAgfQogIHJldHVybiBgJHtzaXplLnRvRml4ZWQodW5pdEluZGV4ID4gMCA/IDEgOiAwKX0gJHt1bml0czJbdW5pdEluZGV4XX1gOwp9CmZ1bmN0aW9uIGZvcm1hdENvdW50KGNvdW50MikgewogIGlmIChjb3VudDIgPT09IHZvaWQgMCB8fCBjb3VudDIgPT09IG51bGwpIHJldHVybiAiIjsKICBpZiAoY291bnQyID49IDFlNikgcmV0dXJuIGAkeyhjb3VudDIgLyAxZTYpLnRvRml4ZWQoMSl9TWA7CiAgaWYgKGNvdW50MiA+PSAxZTMpIHJldHVybiBgJHsoY291bnQyIC8gMWUzKS50b0ZpeGVkKDEpfUtgOwogIHJldHVybiBjb3VudDIudG9TdHJpbmcoKTsKfQpmdW5jdGlvbiBnZXRGaWxlTmFtZShwYXRoMikgewogIGNvbnN0IHBhcnRzID0gcGF0aDIucmVwbGFjZSgvXC8kLywgIiIpLnNwbGl0KCIvIik7CiAgcmV0dXJuIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdIHx8IHBhdGgyOwp9CgovLyB0c193ZWIvZWxlbWVudHMvdHN2aWV3LXMzLWNvbHVtbnMudHMKdmFyIF9jcmVhdGVEaWFsb2dOYW1lX2RlYywgX2NyZWF0ZURpYWxvZ1ByZWZpeF9kZWMsIF9jcmVhdGVEaWFsb2dUeXBlX2RlYywgX3Nob3dDcmVhdGVEaWFsb2dfZGVjLCBfbG9hZGluZ19kZWMsIF9jb2x1bW5zX2RlYywgX3JlZnJlc2hLZXlfZGVjMiwgX2N1cnJlbnRQcmVmaXhfZGVjMiwgX2J1Y2tldE5hbWVfZGVjMiwgX2E2LCBfVHN2aWV3UzNDb2x1bW5zX2RlY29yYXRvcnMsIF9pbml0MywgX2J1Y2tldE5hbWUyLCBfY3VycmVudFByZWZpeDIsIF9yZWZyZXNoS2V5MiwgX2NvbHVtbnMsIF9sb2FkaW5nLCBfc2hvd0NyZWF0ZURpYWxvZywgX2NyZWF0ZURpYWxvZ1R5cGUsIF9jcmVhdGVEaWFsb2dQcmVmaXgsIF9jcmVhdGVEaWFsb2dOYW1lOwp2YXIgeyBodG1sOiBodG1sMTAsIGNzczogY3NzNSwgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjUsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQ0LCBwcm9wZXJ0eTogcHJvcGVydHkzLCBzdGF0ZTogc3RhdGU0LCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQ1IH0gPSBwbHVnaW5zX2V4cG9ydHM1Owp2YXIgeyBEZWVzQ29udGV4dG1lbnU6IERlZXNDb250ZXh0bWVudTMgfSA9IGRpc3RfdHNfd2ViX2V4cG9ydHMyOwpfVHN2aWV3UzNDb2x1bW5zX2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDQoInRzdmlldy1zMy1jb2x1bW5zIildOwp2YXIgVHN2aWV3UzNDb2x1bW5zID0gY2xhc3MgZXh0ZW5kcyAoX2E2ID0gRGVlc0VsZW1lbnQ1LCBfYnVja2V0TmFtZV9kZWMyID0gW3Byb3BlcnR5Myh7IHR5cGU6IFN0cmluZyB9KV0sIF9jdXJyZW50UHJlZml4X2RlYzIgPSBbcHJvcGVydHkzKHsgdHlwZTogU3RyaW5nIH0pXSwgX3JlZnJlc2hLZXlfZGVjMiA9IFtwcm9wZXJ0eTMoeyB0eXBlOiBOdW1iZXIgfSldLCBfY29sdW1uc19kZWMgPSBbc3RhdGU0KCldLCBfbG9hZGluZ19kZWMgPSBbc3RhdGU0KCldLCBfc2hvd0NyZWF0ZURpYWxvZ19kZWMgPSBbc3RhdGU0KCldLCBfY3JlYXRlRGlhbG9nVHlwZV9kZWMgPSBbc3RhdGU0KCldLCBfY3JlYXRlRGlhbG9nUHJlZml4X2RlYyA9IFtzdGF0ZTQoKV0sIF9jcmVhdGVEaWFsb2dOYW1lX2RlYyA9IFtzdGF0ZTQoKV0sIF9hNikgewogIGNvbnN0cnVjdG9yKCkgewogICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfYnVja2V0TmFtZTIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgOCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAxMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2N1cnJlbnRQcmVmaXgyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDEyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDE1LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfcmVmcmVzaEtleTIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMTYsIHRoaXMsIDApKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAxOSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NvbHVtbnMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMjAsIHRoaXMsIFtdKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMjMsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9sb2FkaW5nLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDI0LCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDI3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2hvd0NyZWF0ZURpYWxvZywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAyOCwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAzMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NyZWF0ZURpYWxvZ1R5cGUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMzIsIHRoaXMsICJmb2xkZXIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMzUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jcmVhdGVEaWFsb2dQcmVmaXgsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMzYsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMzksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jcmVhdGVEaWFsb2dOYW1lLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDQwLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDQzLCB0aGlzKTsKICAgIF9fcHVibGljRmllbGQodGhpcywgInJlc2l6aW5nIiwgbnVsbCk7CiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJERUZBVUxUX0NPTFVNTl9XSURUSCIsIDI1MCk7CiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJNSU5fQ09MVU1OX1dJRFRIIiwgMTUwKTsKICAgIF9fcHVibGljRmllbGQodGhpcywgIk1BWF9DT0xVTU5fV0lEVEgiLCA1MDApOwogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiaGFuZGxlUmVzaXplIiwgKGUxMSkgPT4gewogICAgICBpZiAoIXRoaXMucmVzaXppbmcpIHJldHVybjsKICAgICAgY29uc3QgZGVsdGEgPSBlMTEuY2xpZW50WCAtIHRoaXMucmVzaXppbmcuc3RhcnRYOwogICAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWluKAogICAgICAgIHRoaXMuTUFYX0NPTFVNTl9XSURUSCwKICAgICAgICBNYXRoLm1heCh0aGlzLk1JTl9DT0xVTU5fV0lEVEgsIHRoaXMucmVzaXppbmcuc3RhcnRXaWR0aCArIGRlbHRhKQogICAgICApOwogICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKChjb2wsIGkxMSkgPT4gewogICAgICAgIGlmIChpMTEgPT09IHRoaXMucmVzaXppbmcuY29sdW1uSW5kZXgpIHsKICAgICAgICAgIHJldHVybiB7IC4uLmNvbCwgd2lkdGg6IG5ld1dpZHRoIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiBjb2w7CiAgICAgIH0pOwogICAgfSk7CiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJzdG9wUmVzaXplIiwgKCkgPT4gewogICAgICB0aGlzLnJlc2l6aW5nID0gbnVsbDsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVSZXNpemUpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5zdG9wUmVzaXplKTsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAiIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gIiI7CiAgICB9KTsKICB9CiAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgYXdhaXQgdGhpcy5sb2FkSW5pdGlhbENvbHVtbigpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJidWNrZXROYW1lIikgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJyZWZyZXNoS2V5IikpIHsKICAgICAgdGhpcy5sb2FkSW5pdGlhbENvbHVtbigpOwogICAgfQogIH0KICBhc3luYyBsb2FkSW5pdGlhbENvbHVtbigpIHsKICAgIHRoaXMubG9hZGluZyA9IHRydWU7CiAgICB0cnkgewogICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGlTZXJ2aWNlLmxpc3RPYmplY3RzKHRoaXMuYnVja2V0TmFtZSwgdGhpcy5jdXJyZW50UHJlZml4LCAiLyIpOwogICAgICB0aGlzLmNvbHVtbnMgPSBbCiAgICAgICAgewogICAgICAgICAgcHJlZml4OiB0aGlzLmN1cnJlbnRQcmVmaXgsCiAgICAgICAgICBvYmplY3RzOiByZXN1bHQub2JqZWN0cywKICAgICAgICAgIHByZWZpeGVzOiByZXN1bHQucHJlZml4ZXMsCiAgICAgICAgICBzZWxlY3RlZEl0ZW06IG51bGwsCiAgICAgICAgICB3aWR0aDogdGhpcy5ERUZBVUxUX0NPTFVNTl9XSURUSAogICAgICAgIH0KICAgICAgXTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBsb2FkaW5nIG9iamVjdHM6IiwgZXJyKTsKICAgICAgdGhpcy5jb2x1bW5zID0gW107CiAgICB9CiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICB9CiAgYXN5bmMgc2VsZWN0Rm9sZGVyKGNvbHVtbkluZGV4LCBwcmVmaXg0KSB7CiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKChjb2wsIGkxMSkgPT4gewogICAgICBpZiAoaTExID09PSBjb2x1bW5JbmRleCkgewogICAgICAgIHJldHVybiB7IC4uLmNvbCwgc2VsZWN0ZWRJdGVtOiBwcmVmaXg0IH07CiAgICAgIH0KICAgICAgcmV0dXJuIGNvbDsKICAgIH0pOwogICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLnNsaWNlKDAsIGNvbHVtbkluZGV4ICsgMSk7CiAgICB0cnkgewogICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGlTZXJ2aWNlLmxpc3RPYmplY3RzKHRoaXMuYnVja2V0TmFtZSwgcHJlZml4NCwgIi8iKTsKICAgICAgdGhpcy5jb2x1bW5zID0gWwogICAgICAgIC4uLnRoaXMuY29sdW1ucywKICAgICAgICB7CiAgICAgICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgICAgICBvYmplY3RzOiByZXN1bHQub2JqZWN0cywKICAgICAgICAgIHByZWZpeGVzOiByZXN1bHQucHJlZml4ZXMsCiAgICAgICAgICBzZWxlY3RlZEl0ZW06IG51bGwsCiAgICAgICAgICB3aWR0aDogdGhpcy5ERUZBVUxUX0NPTFVNTl9XSURUSAogICAgICAgIH0KICAgICAgXTsKICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuc2Nyb2xsVG9FbmQoKSk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBmb2xkZXI6IiwgZXJyKTsKICAgIH0KICB9CiAgc2Nyb2xsVG9FbmQoKSB7CiAgICB0aGlzLnNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbFdpZHRoIC0gdGhpcy5jbGllbnRXaWR0aDsKICB9CiAgc3RhcnRSZXNpemUoZTExLCBjb2x1bW5JbmRleCkgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICB0aGlzLnJlc2l6aW5nID0gewogICAgICBjb2x1bW5JbmRleCwKICAgICAgc3RhcnRYOiBlMTEuY2xpZW50WCwKICAgICAgc3RhcnRXaWR0aDogdGhpcy5jb2x1bW5zW2NvbHVtbkluZGV4XS53aWR0aAogICAgfTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMuaGFuZGxlUmVzaXplKTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLnN0b3BSZXNpemUpOwogICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAiY29sLXJlc2l6ZSI7CiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSAibm9uZSI7CiAgfQogIHNlbGVjdEZpbGUoY29sdW1uSW5kZXgsIGtleTIpIHsKICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbCwgaTExKSA9PiB7CiAgICAgIGlmIChpMTEgPT09IGNvbHVtbkluZGV4KSB7CiAgICAgICAgcmV0dXJuIHsgLi4uY29sLCBzZWxlY3RlZEl0ZW06IGtleTIgfTsKICAgICAgfQogICAgICByZXR1cm4gY29sOwogICAgfSk7CiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuc2xpY2UoMCwgY29sdW1uSW5kZXggKyAxKTsKICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgbmV3IEN1c3RvbUV2ZW50KCJrZXktc2VsZWN0ZWQiLCB7CiAgICAgICAgZGV0YWlsOiB7IGtleToga2V5MiB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkKICAgICk7CiAgfQogIGdldEZpbGVJY29uKGtleTIpIHsKICAgIGNvbnN0IGV4dCA9IGtleTIuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKSB8fCAiIjsKICAgIGNvbnN0IGljb25NYXAgPSB7CiAgICAgIGpzb246ICJNMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjh6IiwKICAgICAgdHh0OiAiTTE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4eiIsCiAgICAgIHBuZzogIk01IDNoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJ6IiwKICAgICAganBnOiAiTTUgM2gxNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMnoiLAogICAgICBqcGVnOiAiTTUgM2gxNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMnoiLAogICAgICBnaWY6ICJNNSAzaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yeiIsCiAgICAgIHBkZjogIk0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHoiCiAgICB9OwogICAgcmV0dXJuIGljb25NYXBbZXh0XSB8fCAiTTE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4eiI7CiAgfQogIGhhbmRsZUZvbGRlckNvbnRleHRNZW51KGV2ZW50LCBjb2x1bW5JbmRleCwgcHJlZml4NCkgewogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIERlZXNDb250ZXh0bWVudTMub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIFsKICAgICAgewogICAgICAgIG5hbWU6ICJPcGVuIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmb2xkZXJPcGVuIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0Rm9sZGVyKGNvbHVtbkluZGV4LCBwcmVmaXg0KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiQ29weSBQYXRoIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjb3B5IiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHByZWZpeDQpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiTmV3IEZvbGRlciBJbnNpZGUiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZvbGRlclBsdXMiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5vcGVuQ3JlYXRlRGlhbG9nKCJmb2xkZXIiLCBwcmVmaXg0KQogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIk5ldyBGaWxlIEluc2lkZSIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVBsdXMiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5vcGVuQ3JlYXRlRGlhbG9nKCJmaWxlIiwgcHJlZml4NCkKICAgICAgfSwKICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiRGVsZXRlIEZvbGRlciIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2gyIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChjb25maXJtKGBEZWxldGUgZm9sZGVyICIke2dldEZpbGVOYW1lKHByZWZpeDQpfSIgYW5kIGFsbCBpdHMgY29udGVudHM/YCkpIHsKICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuZGVsZXRlUHJlZml4KHRoaXMuYnVja2V0TmFtZSwgcHJlZml4NCk7CiAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkSW5pdGlhbENvbHVtbigpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICBdKTsKICB9CiAgaGFuZGxlRmlsZUNvbnRleHRNZW51KGV2ZW50LCBjb2x1bW5JbmRleCwga2V5MikgewogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIERlZXNDb250ZXh0bWVudTMub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIFsKICAgICAgewogICAgICAgIG5hbWU6ICJQcmV2aWV3IiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpleWUiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgdGhpcy5zZWxlY3RGaWxlKGNvbHVtbkluZGV4LCBrZXkyKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiRG93bmxvYWQiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmRvd25sb2FkIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHVybCA9IGF3YWl0IGFwaVNlcnZpY2UuZ2V0T2JqZWN0VXJsKHRoaXMuYnVja2V0TmFtZSwga2V5Mik7CiAgICAgICAgICBjb25zdCBsaW5rMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgICAgICAgIGxpbmszLmhyZWYgPSB1cmw7CiAgICAgICAgICBsaW5rMy5kb3dubG9hZCA9IGdldEZpbGVOYW1lKGtleTIpOwogICAgICAgICAgbGluazMuY2xpY2soKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiQ29weSBQYXRoIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjb3B5IiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGtleTIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiRGVsZXRlIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgaWYgKGNvbmZpcm0oYERlbGV0ZSBmaWxlICIke2dldEZpbGVOYW1lKGtleTIpfSI/YCkpIHsKICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuZGVsZXRlT2JqZWN0KHRoaXMuYnVja2V0TmFtZSwga2V5Mik7CiAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkSW5pdGlhbENvbHVtbigpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICBdKTsKICB9CiAgaGFuZGxlRW1wdHlTcGFjZUNvbnRleHRNZW51KGV2ZW50LCBjb2x1bW5JbmRleCkgewogICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gZXZlbnQuY3VycmVudFRhcmdldCkgcmV0dXJuOwogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIGNvbnN0IHByZWZpeDQgPSB0aGlzLmNvbHVtbnNbY29sdW1uSW5kZXhdLnByZWZpeDsKICAgIERlZXNDb250ZXh0bWVudTMub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIFsKICAgICAgewogICAgICAgIG5hbWU6ICJOZXcgRm9sZGVyIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmb2xkZXJQbHVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMub3BlbkNyZWF0ZURpYWxvZygiZm9sZGVyIiwgcHJlZml4NCkKICAgICAgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJOZXcgRmlsZSIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVBsdXMiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5vcGVuQ3JlYXRlRGlhbG9nKCJmaWxlIiwgcHJlZml4NCkKICAgICAgfQogICAgXSk7CiAgfQogIG9wZW5DcmVhdGVEaWFsb2codHlwZTUsIHByZWZpeDQpIHsKICAgIHRoaXMuY3JlYXRlRGlhbG9nVHlwZSA9IHR5cGU1OwogICAgdGhpcy5jcmVhdGVEaWFsb2dQcmVmaXggPSBwcmVmaXg0OwogICAgdGhpcy5jcmVhdGVEaWFsb2dOYW1lID0gIiI7CiAgICB0aGlzLnNob3dDcmVhdGVEaWFsb2cgPSB0cnVlOwogIH0KICBnZXRDb250ZW50VHlwZShleHQpIHsKICAgIGNvbnN0IGNvbnRlbnRUeXBlcyA9IHsKICAgICAganNvbjogImFwcGxpY2F0aW9uL2pzb24iLAogICAgICB0eHQ6ICJ0ZXh0L3BsYWluIiwKICAgICAgaHRtbDogInRleHQvaHRtbCIsCiAgICAgIGNzczogInRleHQvY3NzIiwKICAgICAganM6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiwKICAgICAgdHM6ICJ0ZXh0L3R5cGVzY3JpcHQiLAogICAgICBtZDogInRleHQvbWFya2Rvd24iLAogICAgICB4bWw6ICJhcHBsaWNhdGlvbi94bWwiLAogICAgICB5YW1sOiAidGV4dC95YW1sIiwKICAgICAgeW1sOiAidGV4dC95YW1sIiwKICAgICAgY3N2OiAidGV4dC9jc3YiCiAgICB9OwogICAgcmV0dXJuIGNvbnRlbnRUeXBlc1tleHRdIHx8ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iOwogIH0KICBnZXREZWZhdWx0Q29udGVudChleHQpIHsKICAgIGNvbnN0IGRlZmF1bHRzID0gewogICAgICBqc29uOiAie1xuICBcbn0iLAogICAgICBodG1sOiAiPCFET0NUWVBFIGh0bWw+XG48aHRtbD5cbjxoZWFkPlxuICA8dGl0bGU+PC90aXRsZT5cbjwvaGVhZD5cbjxib2R5PlxuICBcbjwvYm9keT5cbjwvaHRtbD4iLAogICAgICBtZDogIiMgVGl0bGVcblxuIiwKICAgICAgdHh0OiAiIgogICAgfTsKICAgIHJldHVybiBkZWZhdWx0c1tleHRdIHx8ICIiOwogIH0KICBhc3luYyBoYW5kbGVDcmVhdGUoKSB7CiAgICBpZiAoIXRoaXMuY3JlYXRlRGlhbG9nTmFtZS50cmltKCkpIHJldHVybjsKICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNyZWF0ZURpYWxvZ05hbWUudHJpbSgpOwogICAgbGV0IHBhdGgyOwogICAgaWYgKHRoaXMuY3JlYXRlRGlhbG9nVHlwZSA9PT0gImZvbGRlciIpIHsKICAgICAgcGF0aDIgPSB0aGlzLmNyZWF0ZURpYWxvZ1ByZWZpeCArIG5hbWUgKyAiLy5rZWVwIjsKICAgIH0gZWxzZSB7CiAgICAgIHBhdGgyID0gdGhpcy5jcmVhdGVEaWFsb2dQcmVmaXggKyBuYW1lOwogICAgfQogICAgY29uc3QgZXh0ID0gbmFtZS5zcGxpdCgiLiIpLnBvcCgpPy50b0xvd2VyQ2FzZSgpIHx8ICIiOwogICAgY29uc3QgY29udGVudFR5cGUgPSB0aGlzLmNyZWF0ZURpYWxvZ1R5cGUgPT09ICJmaWxlIiA/IHRoaXMuZ2V0Q29udGVudFR5cGUoZXh0KSA6ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iOwogICAgY29uc3QgY29udGVudDMgPSB0aGlzLmNyZWF0ZURpYWxvZ1R5cGUgPT09ICJmaWxlIiA/IHRoaXMuZ2V0RGVmYXVsdENvbnRlbnQoZXh0KSA6ICIiOwogICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UucHV0T2JqZWN0KAogICAgICB0aGlzLmJ1Y2tldE5hbWUsCiAgICAgIHBhdGgyLAogICAgICBidG9hKGNvbnRlbnQzKSwKICAgICAgY29udGVudFR5cGUKICAgICk7CiAgICBpZiAoc3VjY2VzcykgewogICAgICB0aGlzLnNob3dDcmVhdGVEaWFsb2cgPSBmYWxzZTsKICAgICAgYXdhaXQgdGhpcy5sb2FkSW5pdGlhbENvbHVtbigpOwogICAgfQogIH0KICByZW5kZXJDcmVhdGVEaWFsb2coKSB7CiAgICBpZiAoIXRoaXMuc2hvd0NyZWF0ZURpYWxvZykgcmV0dXJuICIiOwogICAgY29uc3QgaXNGb2xkZXIgPSB0aGlzLmNyZWF0ZURpYWxvZ1R5cGUgPT09ICJmb2xkZXIiOwogICAgY29uc3QgdGl0bGUgPSBpc0ZvbGRlciA/ICJDcmVhdGUgTmV3IEZvbGRlciIgOiAiQ3JlYXRlIE5ldyBGaWxlIjsKICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gaXNGb2xkZXIgPyAiZm9sZGVyLW5hbWUgb3IgcGF0aC90by9mb2xkZXIiIDogImZpbGVuYW1lLnR4dCBvciBwYXRoL3RvL2ZpbGUudHh0IjsKICAgIHJldHVybiBodG1sMTBgCiAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1vdmVybGF5IiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVEaWFsb2cgPSBmYWxzZX0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nIiBAY2xpY2s9JHsoZTExKSA9PiBlMTEuc3RvcFByb3BhZ2F0aW9uKCl9PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj4ke3RpdGxlfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWxvY2F0aW9uIj4KICAgICAgICAgICAgTG9jYXRpb246ICR7dGhpcy5idWNrZXROYW1lfS8ke3RoaXMuY3JlYXRlRGlhbG9nUHJlZml4fQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgY2xhc3M9ImRpYWxvZy1pbnB1dCIKICAgICAgICAgICAgcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0KICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5jcmVhdGVEaWFsb2dOYW1lfQogICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiB0aGlzLmNyZWF0ZURpYWxvZ05hbWUgPSBlMTEudGFyZ2V0LnZhbHVlfQogICAgICAgICAgICBAa2V5ZG93bj0keyhlMTEpID0+IGUxMS5rZXkgPT09ICJFbnRlciIgJiYgdGhpcy5oYW5kbGVDcmVhdGUoKX0KICAgICAgICAgIC8+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctaGludCI+CiAgICAgICAgICAgIFVzZSAiLyIgdG8gY3JlYXRlIG5lc3RlZCAke2lzRm9sZGVyID8gImZvbGRlcnMiIDogInBhdGgifSAoZS5nLiwgJHtpc0ZvbGRlciA/ICJwYXJlbnQvY2hpbGQiIDogImZvbGRlci9maWxlLnR4dCJ9KQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctYWN0aW9ucyI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRpYWxvZy1idG4gZGlhbG9nLWJ0bi1jYW5jZWwiIEBjbGljaz0keygpID0+IHRoaXMuc2hvd0NyZWF0ZURpYWxvZyA9IGZhbHNlfT4KICAgICAgICAgICAgICBDYW5jZWwKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0iZGlhbG9nLWJ0biBkaWFsb2ctYnRuLWNyZWF0ZSIKICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5jcmVhdGVEaWFsb2dOYW1lLnRyaW0oKX0KICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmhhbmRsZUNyZWF0ZSgpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgQ3JlYXRlCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVyKCkgewogICAgaWYgKHRoaXMubG9hZGluZyAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBodG1sMTBgPGRpdiBjbGFzcz0ibG9hZGluZyI+TG9hZGluZy4uLjwvZGl2PmA7CiAgICB9CiAgICByZXR1cm4gaHRtbDEwYAogICAgICA8ZGl2IGNsYXNzPSJjb2x1bW5zLWNvbnRhaW5lciI+CiAgICAgICAgJHt0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4MikgPT4gdGhpcy5yZW5kZXJDb2x1bW5XcmFwcGVyKGNvbHVtbiwgaW5kZXgyKSl9CiAgICAgIDwvZGl2PgogICAgICAke3RoaXMucmVuZGVyQ3JlYXRlRGlhbG9nKCl9CiAgICBgOwogIH0KICByZW5kZXJDb2x1bW5XcmFwcGVyKGNvbHVtbiwgaW5kZXgyKSB7CiAgICByZXR1cm4gaHRtbDEwYAogICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4td3JhcHBlciI+CiAgICAgICAgJHt0aGlzLnJlbmRlckNvbHVtbihjb2x1bW4sIGluZGV4Mil9CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9InJlc2l6ZS1oYW5kbGUgJHt0aGlzLnJlc2l6aW5nPy5jb2x1bW5JbmRleCA9PT0gaW5kZXgyID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICBAbW91c2Vkb3duPSR7KGUxMSkgPT4gdGhpcy5zdGFydFJlc2l6ZShlMTEsIGluZGV4Mil9CiAgICAgICAgPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlckNvbHVtbihjb2x1bW4sIGluZGV4MikgewogICAgY29uc3QgaGVhZGVyTmFtZSA9IGNvbHVtbi5wcmVmaXggPyBnZXRGaWxlTmFtZShjb2x1bW4ucHJlZml4KSA6IHRoaXMuYnVja2V0TmFtZTsKICAgIHJldHVybiBodG1sMTBgCiAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbiIgc3R5bGU9IndpZHRoOiAke2NvbHVtbi53aWR0aH1weCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sdW1uLWhlYWRlciIgdGl0bGU9JHtjb2x1bW4ucHJlZml4IHx8IHRoaXMuYnVja2V0TmFtZX0+CiAgICAgICAgICAke2hlYWRlck5hbWV9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sdW1uLWl0ZW1zIiBAY29udGV4dG1lbnU9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUVtcHR5U3BhY2VDb250ZXh0TWVudShlMTEsIGluZGV4Mil9PgogICAgICAgICAgJHtjb2x1bW4ucHJlZml4ZXMubGVuZ3RoID09PSAwICYmIGNvbHVtbi5vYmplY3RzLmxlbmd0aCA9PT0gMCA/IGh0bWwxMGA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+RW1wdHkgZm9sZGVyPC9kaXY+YCA6ICIifQogICAgICAgICAgJHtjb2x1bW4ucHJlZml4ZXMubWFwKAogICAgICAocHJlZml4NCkgPT4gaHRtbDEwYAogICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgIGNsYXNzPSJjb2x1bW4taXRlbSBmb2xkZXIgJHtjb2x1bW4uc2VsZWN0ZWRJdGVtID09PSBwcmVmaXg0ID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2VsZWN0Rm9sZGVyKGluZGV4MiwgcHJlZml4NCl9CiAgICAgICAgICAgICAgICBAY29udGV4dG1lbnU9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUZvbGRlckNvbnRleHRNZW51KGUxMSwgaW5kZXgyLCBwcmVmaXg0KX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNWwyIDNoOWEyIDIgMCAwIDEgMiAyeiIgLz4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPiR7Z2V0RmlsZU5hbWUocHJlZml4NCl9PC9zcGFuPgogICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iY2hldnJvbiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj4KICAgICAgICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz0iOSAxOCAxNSAxMiA5IDYiPjwvcG9seWxpbmU+CiAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYAogICAgKX0KICAgICAgICAgICR7Y29sdW1uLm9iamVjdHMubWFwKAogICAgICAob2JqKSA9PiBodG1sMTBgCiAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgY2xhc3M9ImNvbHVtbi1pdGVtICR7Y29sdW1uLnNlbGVjdGVkSXRlbSA9PT0gb2JqLmtleSA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNlbGVjdEZpbGUoaW5kZXgyLCBvYmoua2V5KX0KICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhlMTEpID0+IHRoaXMuaGFuZGxlRmlsZUNvbnRleHRNZW51KGUxMSwgaW5kZXgyLCBvYmoua2V5KX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgICAgICA8cGF0aCBkPSIke3RoaXMuZ2V0RmlsZUljb24ob2JqLmtleSl9IiAvPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+JHtnZXRGaWxlTmFtZShvYmoua2V5KX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAKICAgICl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07Cl9pbml0MyA9IF9fZGVjb3JhdG9yU3RhcnQoX2E2KTsKX2J1Y2tldE5hbWUyID0gbmV3IFdlYWtNYXAoKTsKX2N1cnJlbnRQcmVmaXgyID0gbmV3IFdlYWtNYXAoKTsKX3JlZnJlc2hLZXkyID0gbmV3IFdlYWtNYXAoKTsKX2NvbHVtbnMgPSBuZXcgV2Vha01hcCgpOwpfbG9hZGluZyA9IG5ldyBXZWFrTWFwKCk7Cl9zaG93Q3JlYXRlRGlhbG9nID0gbmV3IFdlYWtNYXAoKTsKX2NyZWF0ZURpYWxvZ1R5cGUgPSBuZXcgV2Vha01hcCgpOwpfY3JlYXRlRGlhbG9nUHJlZml4ID0gbmV3IFdlYWtNYXAoKTsKX2NyZWF0ZURpYWxvZ05hbWUgPSBuZXcgV2Vha01hcCgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDMsIDQsICJidWNrZXROYW1lIiwgX2J1Y2tldE5hbWVfZGVjMiwgVHN2aWV3UzNDb2x1bW5zLCBfYnVja2V0TmFtZTIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDMsIDQsICJjdXJyZW50UHJlZml4IiwgX2N1cnJlbnRQcmVmaXhfZGVjMiwgVHN2aWV3UzNDb2x1bW5zLCBfY3VycmVudFByZWZpeDIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDMsIDQsICJyZWZyZXNoS2V5IiwgX3JlZnJlc2hLZXlfZGVjMiwgVHN2aWV3UzNDb2x1bW5zLCBfcmVmcmVzaEtleTIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDMsIDQsICJjb2x1bW5zIiwgX2NvbHVtbnNfZGVjLCBUc3ZpZXdTM0NvbHVtbnMsIF9jb2x1bW5zKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQzLCA0LCAibG9hZGluZyIsIF9sb2FkaW5nX2RlYywgVHN2aWV3UzNDb2x1bW5zLCBfbG9hZGluZyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MywgNCwgInNob3dDcmVhdGVEaWFsb2ciLCBfc2hvd0NyZWF0ZURpYWxvZ19kZWMsIFRzdmlld1MzQ29sdW1ucywgX3Nob3dDcmVhdGVEaWFsb2cpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDMsIDQsICJjcmVhdGVEaWFsb2dUeXBlIiwgX2NyZWF0ZURpYWxvZ1R5cGVfZGVjLCBUc3ZpZXdTM0NvbHVtbnMsIF9jcmVhdGVEaWFsb2dUeXBlKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQzLCA0LCAiY3JlYXRlRGlhbG9nUHJlZml4IiwgX2NyZWF0ZURpYWxvZ1ByZWZpeF9kZWMsIFRzdmlld1MzQ29sdW1ucywgX2NyZWF0ZURpYWxvZ1ByZWZpeCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MywgNCwgImNyZWF0ZURpYWxvZ05hbWUiLCBfY3JlYXRlRGlhbG9nTmFtZV9kZWMsIFRzdmlld1MzQ29sdW1ucywgX2NyZWF0ZURpYWxvZ05hbWUpOwpUc3ZpZXdTM0NvbHVtbnMgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDMsIDAsICJUc3ZpZXdTM0NvbHVtbnMiLCBfVHN2aWV3UzNDb2x1bW5zX2RlY29yYXRvcnMsIFRzdmlld1MzQ29sdW1ucyk7Cl9fcHVibGljRmllbGQoVHN2aWV3UzNDb2x1bW5zLCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXI1LmRlZmF1bHRTdHlsZXMsCiAgdGhlbWVTdHlsZXMsCiAgY3NzNWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNvbHVtbnMtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtaW4td2lkdGg6IG1heC1jb250ZW50OwogICAgICB9CgogICAgICAuY29sdW1uLXdyYXBwZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuY29sdW1uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlIHsKICAgICAgICB3aWR0aDogNXB4OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMnB4OwogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICMzMzM7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlOmhvdmVyOjphZnRlciwKICAgICAgLnJlc2l6ZS1oYW5kbGUuYWN0aXZlOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogIzQwNDA0MDsKICAgICAgICB3aWR0aDogMnB4OwogICAgICAgIGxlZnQ6IDFweDsKICAgICAgfQoKICAgICAgLmNvbHVtbi13cmFwcGVyOmxhc3QtY2hpbGQgLnJlc2l6ZS1oYW5kbGUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5jb2x1bW4taGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAuY29sdW1uLWl0ZW1zIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICAuY29sdW1uLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgIH0KCiAgICAgIC5jb2x1bW4taXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgICAgfQoKICAgICAgLmNvbHVtbi1pdGVtLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5jb2x1bW4taXRlbS5mb2xkZXIgewogICAgICAgIGNvbG9yOiAjZmJiZjI0OwogICAgICB9CgogICAgICAuY29sdW1uLWl0ZW0gLmljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmNvbHVtbi1pdGVtIC5uYW1lIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgLmNvbHVtbi1pdGVtIC5jaGV2cm9uIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgICAgY29sb3I6ICM1NTU7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAubG9hZGluZyB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctb3ZlcmxheSB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNyk7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgIH0KCiAgICAgIC5kaWFsb2cgewogICAgICAgIGJhY2tncm91bmQ6ICMxZTFlMWU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1pbi13aWR0aDogNDAwcHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAyMHB4IDQwcHggcmdiYSgwLCAwLCAwLCAwLjUpOwogICAgICB9CgogICAgICAuZGlhbG9nLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuZGlhbG9nLWxvY2F0aW9uIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICB9CgogICAgICAuZGlhbG9nLWlucHV0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAxMHB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogIzE0MTQxNDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctaW5wdXQ6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuZGlhbG9nLWhpbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAuZGlhbG9nLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tY2FuY2VsIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0OwogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1jYW5jZWw6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWNyZWF0ZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzQwNDA0MDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWNyZWF0ZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogIzUwNTA1MDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tY3JlYXRlOmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQogICAgYApdKTsKX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAxLCBUc3ZpZXdTM0NvbHVtbnMpOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1zMy1rZXlzLnRzCnZhciBfY3JlYXRlRGlhbG9nTmFtZV9kZWMyLCBfY3JlYXRlRGlhbG9nUHJlZml4X2RlYzIsIF9jcmVhdGVEaWFsb2dUeXBlX2RlYzIsIF9zaG93Q3JlYXRlRGlhbG9nX2RlYzIsIF9maWx0ZXJUZXh0X2RlYywgX3NlbGVjdGVkS2V5X2RlYzIsIF9sb2FkaW5nX2RlYzIsIF9wcmVmaXhlc19kZWMsIF9hbGxLZXlzX2RlYywgX3JlZnJlc2hLZXlfZGVjMywgX2N1cnJlbnRQcmVmaXhfZGVjMywgX2J1Y2tldE5hbWVfZGVjMywgX2E3LCBfVHN2aWV3UzNLZXlzX2RlY29yYXRvcnMsIF9pbml0NCwgX2J1Y2tldE5hbWUzLCBfY3VycmVudFByZWZpeDMsIF9yZWZyZXNoS2V5MywgX2FsbEtleXMsIF9wcmVmaXhlcywgX2xvYWRpbmcyLCBfc2VsZWN0ZWRLZXkyLCBfZmlsdGVyVGV4dCwgX3Nob3dDcmVhdGVEaWFsb2cyLCBfY3JlYXRlRGlhbG9nVHlwZTIsIF9jcmVhdGVEaWFsb2dQcmVmaXgyLCBfY3JlYXRlRGlhbG9nTmFtZTI7CnZhciB7IGh0bWw6IGh0bWwxMSwgY3NzOiBjc3M2LCBjc3NNYW5hZ2VyOiBjc3NNYW5hZ2VyNiwgY3VzdG9tRWxlbWVudDogY3VzdG9tRWxlbWVudDUsIHByb3BlcnR5OiBwcm9wZXJ0eTQsIHN0YXRlOiBzdGF0ZTUsIERlZXNFbGVtZW50OiBEZWVzRWxlbWVudDYgfSA9IHBsdWdpbnNfZXhwb3J0czU7CnZhciB7IERlZXNDb250ZXh0bWVudTogRGVlc0NvbnRleHRtZW51NCB9ID0gZGlzdF90c193ZWJfZXhwb3J0czI7Cl9Uc3ZpZXdTM0tleXNfZGVjb3JhdG9ycyA9IFtjdXN0b21FbGVtZW50NSgidHN2aWV3LXMzLWtleXMiKV07CnZhciBUc3ZpZXdTM0tleXMgPSBjbGFzcyBleHRlbmRzIChfYTcgPSBEZWVzRWxlbWVudDYsIF9idWNrZXROYW1lX2RlYzMgPSBbcHJvcGVydHk0KHsgdHlwZTogU3RyaW5nIH0pXSwgX2N1cnJlbnRQcmVmaXhfZGVjMyA9IFtwcm9wZXJ0eTQoeyB0eXBlOiBTdHJpbmcgfSldLCBfcmVmcmVzaEtleV9kZWMzID0gW3Byb3BlcnR5NCh7IHR5cGU6IE51bWJlciB9KV0sIF9hbGxLZXlzX2RlYyA9IFtzdGF0ZTUoKV0sIF9wcmVmaXhlc19kZWMgPSBbc3RhdGU1KCldLCBfbG9hZGluZ19kZWMyID0gW3N0YXRlNSgpXSwgX3NlbGVjdGVkS2V5X2RlYzIgPSBbc3RhdGU1KCldLCBfZmlsdGVyVGV4dF9kZWMgPSBbc3RhdGU1KCldLCBfc2hvd0NyZWF0ZURpYWxvZ19kZWMyID0gW3N0YXRlNSgpXSwgX2NyZWF0ZURpYWxvZ1R5cGVfZGVjMiA9IFtzdGF0ZTUoKV0sIF9jcmVhdGVEaWFsb2dQcmVmaXhfZGVjMiA9IFtzdGF0ZTUoKV0sIF9jcmVhdGVEaWFsb2dOYW1lX2RlYzIgPSBbc3RhdGU1KCldLCBfYTcpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2J1Y2tldE5hbWUzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jdXJyZW50UHJlZml4MywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAxMiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAxNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3JlZnJlc2hLZXkzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDE2LCB0aGlzLCAwKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9hbGxLZXlzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDIwLCB0aGlzLCBbXSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDIzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfcHJlZml4ZXMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMjQsIHRoaXMsIFtdKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMjcsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9sb2FkaW5nMiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAyOCwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAzMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3NlbGVjdGVkS2V5MiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAzMiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAzNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2ZpbHRlclRleHQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMzYsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMzksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zaG93Q3JlYXRlRGlhbG9nMiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCA0MCwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCA0MywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NyZWF0ZURpYWxvZ1R5cGUyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDQ0LCB0aGlzLCAiZm9sZGVyIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDQ3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfY3JlYXRlRGlhbG9nUHJlZml4MiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCA0OCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCA1MSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NyZWF0ZURpYWxvZ05hbWUyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDUyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDU1LCB0aGlzKTsKICB9CiAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgYXdhaXQgdGhpcy5sb2FkT2JqZWN0cygpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJidWNrZXROYW1lIikgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJjdXJyZW50UHJlZml4IikgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJyZWZyZXNoS2V5IikpIHsKICAgICAgdGhpcy5sb2FkT2JqZWN0cygpOwogICAgfQogIH0KICBhc3luYyBsb2FkT2JqZWN0cygpIHsKICAgIHRoaXMubG9hZGluZyA9IHRydWU7CiAgICB0cnkgewogICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGlTZXJ2aWNlLmxpc3RPYmplY3RzKHRoaXMuYnVja2V0TmFtZSwgdGhpcy5jdXJyZW50UHJlZml4LCAiLyIpOwogICAgICB0aGlzLmFsbEtleXMgPSByZXN1bHQub2JqZWN0czsKICAgICAgdGhpcy5wcmVmaXhlcyA9IHJlc3VsdC5wcmVmaXhlczsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBsb2FkaW5nIG9iamVjdHM6IiwgZXJyKTsKICAgICAgdGhpcy5hbGxLZXlzID0gW107CiAgICAgIHRoaXMucHJlZml4ZXMgPSBbXTsKICAgIH0KICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogIH0KICBoYW5kbGVGaWx0ZXJJbnB1dChlMTEpIHsKICAgIHRoaXMuZmlsdGVyVGV4dCA9IGUxMS50YXJnZXQudmFsdWU7CiAgfQogIHNlbGVjdEtleShrZXkyLCBpc0ZvbGRlcikgewogICAgdGhpcy5zZWxlY3RlZEtleSA9IGtleTI7CiAgICBpZiAoaXNGb2xkZXIpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KAogICAgICAgIG5ldyBDdXN0b21FdmVudCgibmF2aWdhdGUiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgcHJlZml4OiBrZXkyIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KQogICAgICApOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KAogICAgICAgIG5ldyBDdXN0b21FdmVudCgia2V5LXNlbGVjdGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IGtleToga2V5MiB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkKICAgICAgKTsKICAgIH0KICB9CiAgZ2V0IGZpbHRlcmVkSXRlbXMoKSB7CiAgICBjb25zdCBmaWx0ZXIyID0gdGhpcy5maWx0ZXJUZXh0LnRvTG93ZXJDYXNlKCk7CiAgICBjb25zdCBmb2xkZXJzID0gdGhpcy5wcmVmaXhlcy5maWx0ZXIoKHA3KSA9PiAhZmlsdGVyMiB8fCBnZXRGaWxlTmFtZShwNykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIyKSkubWFwKChwNykgPT4gKHsga2V5OiBwNywgaXNGb2xkZXI6IHRydWUsIHNpemU6IHZvaWQgMCB9KSk7CiAgICBjb25zdCBmaWxlcyA9IHRoaXMuYWxsS2V5cy5maWx0ZXIoKG8xMykgPT4gIWZpbHRlcjIgfHwgZ2V0RmlsZU5hbWUobzEzLmtleSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIyKSkubWFwKChvMTMpID0+ICh7IGtleTogbzEzLmtleSwgaXNGb2xkZXI6IGZhbHNlLCBzaXplOiBvMTMuc2l6ZSB9KSk7CiAgICByZXR1cm4gWy4uLmZvbGRlcnMsIC4uLmZpbGVzXTsKICB9CiAgaGFuZGxlSXRlbUNvbnRleHRNZW51KGV2ZW50LCBrZXkyLCBpc0ZvbGRlcikgewogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIGlmIChpc0ZvbGRlcikgewogICAgICBEZWVzQ29udGV4dG1lbnU0Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIk9wZW4iLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyT3BlbiIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RLZXkoa2V5MiwgdHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiQ29weSBQYXRoIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmNvcHkiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGtleTIpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIk5ldyBGb2xkZXIgSW5zaWRlIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZvbGRlclBsdXMiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLm9wZW5DcmVhdGVEaWFsb2coImZvbGRlciIsIGtleTIpCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiTmV3IEZpbGUgSW5zaWRlIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZpbGVQbHVzIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5vcGVuQ3JlYXRlRGlhbG9nKCJmaWxlIiwga2V5MikKICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEZWxldGUgRm9sZGVyIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnRyYXNoMiIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgaWYgKGNvbmZpcm0oYERlbGV0ZSBmb2xkZXIgIiR7Z2V0RmlsZU5hbWUoa2V5Mil9IiBhbmQgYWxsIGl0cyBjb250ZW50cz9gKSkgewogICAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLmRlbGV0ZVByZWZpeCh0aGlzLmJ1Y2tldE5hbWUsIGtleTIpOwogICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPYmplY3RzKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdKTsKICAgIH0gZWxzZSB7CiAgICAgIERlZXNDb250ZXh0bWVudTQub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiUHJldmlldyIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpleWUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0S2V5KGtleTIsIGZhbHNlKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEb3dubG9hZCIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpkb3dubG9hZCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgYXBpU2VydmljZS5nZXRPYmplY3RVcmwodGhpcy5idWNrZXROYW1lLCBrZXkyKTsKICAgICAgICAgICAgY29uc3QgbGluazMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICAgICAgICAgIGxpbmszLmhyZWYgPSB1cmw7CiAgICAgICAgICAgIGxpbmszLmRvd25sb2FkID0gZ2V0RmlsZU5hbWUoa2V5Mik7CiAgICAgICAgICAgIGxpbmszLmNsaWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiQ29weSBQYXRoIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmNvcHkiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGtleTIpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGlmIChjb25maXJtKGBEZWxldGUgZmlsZSAiJHtnZXRGaWxlTmFtZShrZXkyKX0iP2ApKSB7CiAgICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuZGVsZXRlT2JqZWN0KHRoaXMuYnVja2V0TmFtZSwga2V5Mik7CiAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE9iamVjdHMoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0pOwogICAgfQogIH0KICBoYW5kbGVFbXB0eVNwYWNlQ29udGV4dE1lbnUoZXZlbnQpIHsKICAgIGlmIChldmVudC50YXJnZXQuY2xvc2VzdCgidHIiKSkgcmV0dXJuOwogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIERlZXNDb250ZXh0bWVudTQub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIFsKICAgICAgewogICAgICAgIG5hbWU6ICJOZXcgRm9sZGVyIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmb2xkZXJQbHVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMub3BlbkNyZWF0ZURpYWxvZygiZm9sZGVyIiwgdGhpcy5jdXJyZW50UHJlZml4KQogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIk5ldyBGaWxlIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmaWxlUGx1cyIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLm9wZW5DcmVhdGVEaWFsb2coImZpbGUiLCB0aGlzLmN1cnJlbnRQcmVmaXgpCiAgICAgIH0KICAgIF0pOwogIH0KICBvcGVuQ3JlYXRlRGlhbG9nKHR5cGU1LCBwcmVmaXg0KSB7CiAgICB0aGlzLmNyZWF0ZURpYWxvZ1R5cGUgPSB0eXBlNTsKICAgIHRoaXMuY3JlYXRlRGlhbG9nUHJlZml4ID0gcHJlZml4NDsKICAgIHRoaXMuY3JlYXRlRGlhbG9nTmFtZSA9ICIiOwogICAgdGhpcy5zaG93Q3JlYXRlRGlhbG9nID0gdHJ1ZTsKICB9CiAgZ2V0Q29udGVudFR5cGUoZXh0KSB7CiAgICBjb25zdCBjb250ZW50VHlwZXMgPSB7CiAgICAgIGpzb246ICJhcHBsaWNhdGlvbi9qc29uIiwKICAgICAgdHh0OiAidGV4dC9wbGFpbiIsCiAgICAgIGh0bWw6ICJ0ZXh0L2h0bWwiLAogICAgICBjc3M6ICJ0ZXh0L2NzcyIsCiAgICAgIGpzOiAiYXBwbGljYXRpb24vamF2YXNjcmlwdCIsCiAgICAgIHRzOiAidGV4dC90eXBlc2NyaXB0IiwKICAgICAgbWQ6ICJ0ZXh0L21hcmtkb3duIiwKICAgICAgeG1sOiAiYXBwbGljYXRpb24veG1sIiwKICAgICAgeWFtbDogInRleHQveWFtbCIsCiAgICAgIHltbDogInRleHQveWFtbCIsCiAgICAgIGNzdjogInRleHQvY3N2IgogICAgfTsKICAgIHJldHVybiBjb250ZW50VHlwZXNbZXh0XSB8fCAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIjsKICB9CiAgZ2V0RGVmYXVsdENvbnRlbnQoZXh0KSB7CiAgICBjb25zdCBkZWZhdWx0cyA9IHsKICAgICAganNvbjogIntcbiAgXG59IiwKICAgICAgaHRtbDogIjwhRE9DVFlQRSBodG1sPlxuPGh0bWw+XG48aGVhZD5cbiAgPHRpdGxlPjwvdGl0bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgXG48L2JvZHk+XG48L2h0bWw+IiwKICAgICAgbWQ6ICIjIFRpdGxlXG5cbiIsCiAgICAgIHR4dDogIiIKICAgIH07CiAgICByZXR1cm4gZGVmYXVsdHNbZXh0XSB8fCAiIjsKICB9CiAgYXN5bmMgaGFuZGxlQ3JlYXRlKCkgewogICAgaWYgKCF0aGlzLmNyZWF0ZURpYWxvZ05hbWUudHJpbSgpKSByZXR1cm47CiAgICBjb25zdCBuYW1lID0gdGhpcy5jcmVhdGVEaWFsb2dOYW1lLnRyaW0oKTsKICAgIGxldCBwYXRoMjsKICAgIGlmICh0aGlzLmNyZWF0ZURpYWxvZ1R5cGUgPT09ICJmb2xkZXIiKSB7CiAgICAgIHBhdGgyID0gdGhpcy5jcmVhdGVEaWFsb2dQcmVmaXggKyBuYW1lICsgIi8ua2VlcCI7CiAgICB9IGVsc2UgewogICAgICBwYXRoMiA9IHRoaXMuY3JlYXRlRGlhbG9nUHJlZml4ICsgbmFtZTsKICAgIH0KICAgIGNvbnN0IGV4dCA9IG5hbWUuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKSB8fCAiIjsKICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gdGhpcy5jcmVhdGVEaWFsb2dUeXBlID09PSAiZmlsZSIgPyB0aGlzLmdldENvbnRlbnRUeXBlKGV4dCkgOiAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIjsKICAgIGNvbnN0IGNvbnRlbnQzID0gdGhpcy5jcmVhdGVEaWFsb2dUeXBlID09PSAiZmlsZSIgPyB0aGlzLmdldERlZmF1bHRDb250ZW50KGV4dCkgOiAiIjsKICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLnB1dE9iamVjdCgKICAgICAgdGhpcy5idWNrZXROYW1lLAogICAgICBwYXRoMiwKICAgICAgYnRvYShjb250ZW50MyksCiAgICAgIGNvbnRlbnRUeXBlCiAgICApOwogICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgdGhpcy5zaG93Q3JlYXRlRGlhbG9nID0gZmFsc2U7CiAgICAgIGF3YWl0IHRoaXMubG9hZE9iamVjdHMoKTsKICAgIH0KICB9CiAgcmVuZGVyQ3JlYXRlRGlhbG9nKCkgewogICAgaWYgKCF0aGlzLnNob3dDcmVhdGVEaWFsb2cpIHJldHVybiAiIjsKICAgIGNvbnN0IGlzRm9sZGVyID0gdGhpcy5jcmVhdGVEaWFsb2dUeXBlID09PSAiZm9sZGVyIjsKICAgIGNvbnN0IHRpdGxlID0gaXNGb2xkZXIgPyAiQ3JlYXRlIE5ldyBGb2xkZXIiIDogIkNyZWF0ZSBOZXcgRmlsZSI7CiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGlzRm9sZGVyID8gImZvbGRlci1uYW1lIG9yIHBhdGgvdG8vZm9sZGVyIiA6ICJmaWxlbmFtZS50eHQgb3IgcGF0aC90by9maWxlLnR4dCI7CiAgICByZXR1cm4gaHRtbDExYAogICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctb3ZlcmxheSIgQGNsaWNrPSR7KCkgPT4gdGhpcy5zaG93Q3JlYXRlRGlhbG9nID0gZmFsc2V9PgogICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZyIgQGNsaWNrPSR7KGUxMSkgPT4gZTExLnN0b3BQcm9wYWdhdGlvbigpfT4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+JHt0aXRsZX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1sb2NhdGlvbiI+CiAgICAgICAgICAgIExvY2F0aW9uOiAke3RoaXMuYnVja2V0TmFtZX0vJHt0aGlzLmNyZWF0ZURpYWxvZ1ByZWZpeH0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIGNsYXNzPSJkaWFsb2ctaW5wdXQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSR7cGxhY2Vob2xkZXJ9CiAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuY3JlYXRlRGlhbG9nTmFtZX0KICAgICAgICAgICAgQGlucHV0PSR7KGUxMSkgPT4gdGhpcy5jcmVhdGVEaWFsb2dOYW1lID0gZTExLnRhcmdldC52YWx1ZX0KICAgICAgICAgICAgQGtleWRvd249JHsoZTExKSA9PiBlMTEua2V5ID09PSAiRW50ZXIiICYmIHRoaXMuaGFuZGxlQ3JlYXRlKCl9CiAgICAgICAgICAvPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWhpbnQiPgogICAgICAgICAgICBVc2UgIi8iIHRvIGNyZWF0ZSBuZXN0ZWQgJHtpc0ZvbGRlciA/ICJmb2xkZXJzIiA6ICJwYXRoIn0gKGUuZy4sICR7aXNGb2xkZXIgPyAicGFyZW50L2NoaWxkIiA6ICJmb2xkZXIvZmlsZS50eHQifSkKICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWFjdGlvbnMiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkaWFsb2ctYnRuIGRpYWxvZy1idG4tY2FuY2VsIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVEaWFsb2cgPSBmYWxzZX0+CiAgICAgICAgICAgICAgQ2FuY2VsCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9ImRpYWxvZy1idG4gZGlhbG9nLWJ0bi1jcmVhdGUiCiAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7IXRoaXMuY3JlYXRlRGlhbG9nTmFtZS50cmltKCl9CiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVDcmVhdGUoKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIENyZWF0ZQogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlcigpIHsKICAgIHJldHVybiBodG1sMTFgCiAgICAgIDxkaXYgY2xhc3M9ImtleXMtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWx0ZXItYmFyIj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICBjbGFzcz0iZmlsdGVyLWlucHV0IgogICAgICAgICAgICBwbGFjZWhvbGRlcj0iRmlsdGVyIGZpbGVzLi4uIgogICAgICAgICAgICAudmFsdWU9JHt0aGlzLmZpbHRlclRleHR9CiAgICAgICAgICAgIEBpbnB1dD0ke3RoaXMuaGFuZGxlRmlsdGVySW5wdXR9CiAgICAgICAgICAvPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJrZXlzLWxpc3QiIEBjb250ZXh0bWVudT0keyhlMTEpID0+IHRoaXMuaGFuZGxlRW1wdHlTcGFjZUNvbnRleHRNZW51KGUxMSl9PgogICAgICAgICAgJHt0aGlzLmxvYWRpbmcgPyBodG1sMTFgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPkxvYWRpbmcuLi48L2Rpdj5gIDogdGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCA9PT0gMCA/IGh0bWwxMWA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+Tm8gb2JqZWN0cyBmb3VuZDwvZGl2PmAgOiBodG1sMTFgCiAgICAgICAgICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5OYW1lPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDogMTAwcHg7Ij5TaXplPC90aD4KICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuZmlsdGVyZWRJdGVtcy5tYXAoCiAgICAgIChpdGVtKSA9PiBodG1sMTFgCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iJHt0aGlzLnNlbGVjdGVkS2V5ID09PSBpdGVtLmtleSA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNlbGVjdEtleShpdGVtLmtleSwgaXRlbS5pc0ZvbGRlcil9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY29udGV4dG1lbnU9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUl0ZW1Db250ZXh0TWVudShlMTEsIGl0ZW0ua2V5LCBpdGVtLmlzRm9sZGVyKX0KICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImtleS1jZWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2l0ZW0uaXNGb2xkZXIgPyBodG1sMTFgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ia2V5LWljb24gZm9sZGVyLWljb24iIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNWwyIDNoOWEyIDIgMCAwIDEgMiAyeiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCA6IGh0bWwxMWAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJrZXktaWNvbiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1uYW1lIj4ke2dldEZpbGVOYW1lKGl0ZW0ua2V5KX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ic2l6ZS1jZWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpdGVtLmlzRm9sZGVyID8gIi0iIDogZm9ybWF0U2l6ZShpdGVtLnNpemUpfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICBgCiAgICApfQogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICBgfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLnJlbmRlckNyZWF0ZURpYWxvZygpfQogICAgYDsKICB9Cn07Cl9pbml0NCA9IF9fZGVjb3JhdG9yU3RhcnQoX2E3KTsKX2J1Y2tldE5hbWUzID0gbmV3IFdlYWtNYXAoKTsKX2N1cnJlbnRQcmVmaXgzID0gbmV3IFdlYWtNYXAoKTsKX3JlZnJlc2hLZXkzID0gbmV3IFdlYWtNYXAoKTsKX2FsbEtleXMgPSBuZXcgV2Vha01hcCgpOwpfcHJlZml4ZXMgPSBuZXcgV2Vha01hcCgpOwpfbG9hZGluZzIgPSBuZXcgV2Vha01hcCgpOwpfc2VsZWN0ZWRLZXkyID0gbmV3IFdlYWtNYXAoKTsKX2ZpbHRlclRleHQgPSBuZXcgV2Vha01hcCgpOwpfc2hvd0NyZWF0ZURpYWxvZzIgPSBuZXcgV2Vha01hcCgpOwpfY3JlYXRlRGlhbG9nVHlwZTIgPSBuZXcgV2Vha01hcCgpOwpfY3JlYXRlRGlhbG9nUHJlZml4MiA9IG5ldyBXZWFrTWFwKCk7Cl9jcmVhdGVEaWFsb2dOYW1lMiA9IG5ldyBXZWFrTWFwKCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImJ1Y2tldE5hbWUiLCBfYnVja2V0TmFtZV9kZWMzLCBUc3ZpZXdTM0tleXMsIF9idWNrZXROYW1lMyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImN1cnJlbnRQcmVmaXgiLCBfY3VycmVudFByZWZpeF9kZWMzLCBUc3ZpZXdTM0tleXMsIF9jdXJyZW50UHJlZml4Myk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgInJlZnJlc2hLZXkiLCBfcmVmcmVzaEtleV9kZWMzLCBUc3ZpZXdTM0tleXMsIF9yZWZyZXNoS2V5Myk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImFsbEtleXMiLCBfYWxsS2V5c19kZWMsIFRzdmlld1MzS2V5cywgX2FsbEtleXMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDQsIDQsICJwcmVmaXhlcyIsIF9wcmVmaXhlc19kZWMsIFRzdmlld1MzS2V5cywgX3ByZWZpeGVzKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ0LCA0LCAibG9hZGluZyIsIF9sb2FkaW5nX2RlYzIsIFRzdmlld1MzS2V5cywgX2xvYWRpbmcyKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ0LCA0LCAic2VsZWN0ZWRLZXkiLCBfc2VsZWN0ZWRLZXlfZGVjMiwgVHN2aWV3UzNLZXlzLCBfc2VsZWN0ZWRLZXkyKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ0LCA0LCAiZmlsdGVyVGV4dCIsIF9maWx0ZXJUZXh0X2RlYywgVHN2aWV3UzNLZXlzLCBfZmlsdGVyVGV4dCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgInNob3dDcmVhdGVEaWFsb2ciLCBfc2hvd0NyZWF0ZURpYWxvZ19kZWMyLCBUc3ZpZXdTM0tleXMsIF9zaG93Q3JlYXRlRGlhbG9nMik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImNyZWF0ZURpYWxvZ1R5cGUiLCBfY3JlYXRlRGlhbG9nVHlwZV9kZWMyLCBUc3ZpZXdTM0tleXMsIF9jcmVhdGVEaWFsb2dUeXBlMik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImNyZWF0ZURpYWxvZ1ByZWZpeCIsIF9jcmVhdGVEaWFsb2dQcmVmaXhfZGVjMiwgVHN2aWV3UzNLZXlzLCBfY3JlYXRlRGlhbG9nUHJlZml4Mik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImNyZWF0ZURpYWxvZ05hbWUiLCBfY3JlYXRlRGlhbG9nTmFtZV9kZWMyLCBUc3ZpZXdTM0tleXMsIF9jcmVhdGVEaWFsb2dOYW1lMik7ClRzdmlld1MzS2V5cyA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgMCwgIlRzdmlld1MzS2V5cyIsIF9Uc3ZpZXdTM0tleXNfZGVjb3JhdG9ycywgVHN2aWV3UzNLZXlzKTsKX19wdWJsaWNGaWVsZChUc3ZpZXdTM0tleXMsICJzdHlsZXMiLCBbCiAgY3NzTWFuYWdlcjYuZGVmYXVsdFN0eWxlcywKICB0aGVtZVN0eWxlcywKICBjc3M2YAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5rZXlzLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmZpbHRlci1iYXIgewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzM7CiAgICAgIH0KCiAgICAgIC5maWx0ZXItaW5wdXQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5maWx0ZXItaW5wdXQ6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDA0MDQwOwogICAgICB9CgogICAgICAuZmlsdGVyLWlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5rZXlzLWxpc3QgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KCiAgICAgIHRoZWFkIHsKICAgICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICAgIHRvcDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAjMWExYTFhOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgIH0KCiAgICAgIHRoIHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOwogICAgICB9CgogICAgICB0ZCB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMmEyYTNlOwogICAgICB9CgogICAgICB0cjpob3ZlciB0ZCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKTsKICAgICAgfQoKICAgICAgdHIuc2VsZWN0ZWQgdGQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICAgIH0KCiAgICAgIC5rZXktY2VsbCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLmtleS1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5mb2xkZXItaWNvbiB7CiAgICAgICAgY29sb3I6ICNmYmJmMjQ7CiAgICAgIH0KCiAgICAgIC5rZXktbmFtZSB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAuc2l6ZS1jZWxsIHsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIHBhZGRpbmc6IDMycHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAuZGlhbG9nLW92ZXJsYXkgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjcpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB6LWluZGV4OiAxMDAwOwogICAgICB9CgogICAgICAuZGlhbG9nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMWUxZTFlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBtaW4td2lkdGg6IDQwMHB4OwogICAgICAgIGJveC1zaGFkb3c6IDAgMjBweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC41KTsKICAgICAgfQoKICAgICAgLmRpYWxvZy10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmRpYWxvZy1sb2NhdGlvbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgfQoKICAgICAgLmRpYWxvZy1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICMxNDE0MTQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuZGlhbG9nLWlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1oaW50IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0biB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWNhbmNlbCB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDsKICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tY2FuY2VsOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1jcmVhdGUgewogICAgICAgIGJhY2tncm91bmQ6ICM0MDQwNDA7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1jcmVhdGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICM1MDUwNTA7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWNyZWF0ZTpkaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KICAgIGAKXSk7Cl9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMSwgVHN2aWV3UzNLZXlzKTsKCi8vIHRzX3dlYi9lbGVtZW50cy90c3ZpZXctczMtcHJldmlldy50cwp2YXIgX2Vycm9yX2RlYywgX2xhc3RNb2RpZmllZF9kZWMsIF9zaXplX2RlYywgX2NvbnRlbnRUeXBlX2RlYywgX2hhc0NoYW5nZXNfZGVjLCBfb3JpZ2luYWxUZXh0Q29udGVudF9kZWMsIF9jb250ZW50X2RlYywgX3NhdmluZ19kZWMsIF9sb2FkaW5nX2RlYzMsIF9vYmplY3RLZXlfZGVjLCBfYnVja2V0TmFtZV9kZWM0LCBfYTgsIF9Uc3ZpZXdTM1ByZXZpZXdfZGVjb3JhdG9ycywgX2luaXQ1LCBfYnVja2V0TmFtZTQsIF9vYmplY3RLZXksIF9sb2FkaW5nMywgX3NhdmluZywgX2NvbnRlbnQsIF9vcmlnaW5hbFRleHRDb250ZW50LCBfaGFzQ2hhbmdlcywgX2NvbnRlbnRUeXBlLCBfc2l6ZSwgX2xhc3RNb2RpZmllZCwgX2Vycm9yOwp2YXIgeyBodG1sOiBodG1sMTIsIGNzczogY3NzNywgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjcsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQ2LCBwcm9wZXJ0eTogcHJvcGVydHk1LCBzdGF0ZTogc3RhdGU2LCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQ3IH0gPSBwbHVnaW5zX2V4cG9ydHM1OwpfVHN2aWV3UzNQcmV2aWV3X2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDYoInRzdmlldy1zMy1wcmV2aWV3IildOwp2YXIgVHN2aWV3UzNQcmV2aWV3ID0gY2xhc3MgZXh0ZW5kcyAoX2E4ID0gRGVlc0VsZW1lbnQ3LCBfYnVja2V0TmFtZV9kZWM0ID0gW3Byb3BlcnR5NSh7IHR5cGU6IFN0cmluZyB9KV0sIF9vYmplY3RLZXlfZGVjID0gW3Byb3BlcnR5NSh7IHR5cGU6IFN0cmluZyB9KV0sIF9sb2FkaW5nX2RlYzMgPSBbc3RhdGU2KCldLCBfc2F2aW5nX2RlYyA9IFtzdGF0ZTYoKV0sIF9jb250ZW50X2RlYyA9IFtzdGF0ZTYoKV0sIF9vcmlnaW5hbFRleHRDb250ZW50X2RlYyA9IFtzdGF0ZTYoKV0sIF9oYXNDaGFuZ2VzX2RlYyA9IFtzdGF0ZTYoKV0sIF9jb250ZW50VHlwZV9kZWMgPSBbc3RhdGU2KCldLCBfc2l6ZV9kZWMgPSBbc3RhdGU2KCldLCBfbGFzdE1vZGlmaWVkX2RlYyA9IFtzdGF0ZTYoKV0sIF9lcnJvcl9kZWMgPSBbc3RhdGU2KCldLCBfYTgpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2J1Y2tldE5hbWU0LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9vYmplY3RLZXksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMTIsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9sb2FkaW5nMywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAxNiwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAxOSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3NhdmluZywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAyMCwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAyMywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NvbnRlbnQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMjQsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMjcsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9vcmlnaW5hbFRleHRDb250ZW50LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDI4LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDMxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfaGFzQ2hhbmdlcywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAzMiwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAzNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NvbnRlbnRUeXBlLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDM2LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDM5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2l6ZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCA0MCwgdGhpcywgMCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDQzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbGFzdE1vZGlmaWVkLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDQ0LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDQ3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZXJyb3IsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgNDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgNTEsIHRoaXMpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJvYmplY3RLZXkiKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoImJ1Y2tldE5hbWUiKSkgewogICAgICBpZiAodGhpcy5vYmplY3RLZXkpIHsKICAgICAgICB0aGlzLmxvYWRPYmplY3QoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmNvbnRlbnQgPSAiIjsKICAgICAgICB0aGlzLmNvbnRlbnRUeXBlID0gIiI7CiAgICAgICAgdGhpcy5lcnJvciA9ICIiOwogICAgICAgIHRoaXMub3JpZ2luYWxUZXh0Q29udGVudCA9ICIiOwogICAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgfQogIGFzeW5jIGxvYWRPYmplY3QoKSB7CiAgICBpZiAoIXRoaXMub2JqZWN0S2V5IHx8ICF0aGlzLmJ1Y2tldE5hbWUpIHJldHVybjsKICAgIHRoaXMubG9hZGluZyA9IHRydWU7CiAgICB0aGlzLmVycm9yID0gIiI7CiAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwaVNlcnZpY2UuZ2V0T2JqZWN0KHRoaXMuYnVja2V0TmFtZSwgdGhpcy5vYmplY3RLZXkpOwogICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgIHRoaXMuZXJyb3IgPSAiT2JqZWN0IG5vdCBmb3VuZCI7CiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuY29udGVudCA9IHJlc3VsdC5jb250ZW50IHx8ICIiOwogICAgICB0aGlzLmNvbnRlbnRUeXBlID0gcmVzdWx0LmNvbnRlbnRUeXBlIHx8ICIiOwogICAgICB0aGlzLnNpemUgPSByZXN1bHQuc2l6ZSB8fCAwOwogICAgICB0aGlzLmxhc3RNb2RpZmllZCA9IHJlc3VsdC5sYXN0TW9kaWZpZWQgfHwgIiI7CiAgICAgIGlmICh0aGlzLmlzVGV4dCgpKSB7CiAgICAgICAgdGhpcy5vcmlnaW5hbFRleHRDb250ZW50ID0gdGhpcy5nZXRUZXh0Q29udGVudCgpOwogICAgICB9CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBvYmplY3Q6IiwgZXJyKTsKICAgICAgdGhpcy5lcnJvciA9ICJGYWlsZWQgdG8gbG9hZCBvYmplY3QiOwogICAgfQogICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgfQogIGZvcm1hdERhdGUoZGF0ZVN0cikgewogICAgaWYgKCFkYXRlU3RyKSByZXR1cm4gIi0iOwogICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHIpOwogICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcoKTsKICB9CiAgaXNJbWFnZSgpIHsKICAgIHJldHVybiB0aGlzLmNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpOwogIH0KICBpc1RleHQoKSB7CiAgICByZXR1cm4gdGhpcy5jb250ZW50VHlwZS5zdGFydHNXaXRoKCJ0ZXh0LyIpIHx8IHRoaXMuY29udGVudFR5cGUgPT09ICJhcHBsaWNhdGlvbi9qc29uIiB8fCB0aGlzLmNvbnRlbnRUeXBlID09PSAiYXBwbGljYXRpb24veG1sIiB8fCB0aGlzLmNvbnRlbnRUeXBlID09PSAiYXBwbGljYXRpb24vamF2YXNjcmlwdCI7CiAgfQogIGdldFRleHRDb250ZW50KCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgYmluYXJ5U3RyaW5nID0gYXRvYih0aGlzLmNvbnRlbnQpOwogICAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpbmFyeVN0cmluZy5sZW5ndGgpOwogICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBiaW5hcnlTdHJpbmcubGVuZ3RoOyBpMTErKykgewogICAgICAgIGJ5dGVzW2kxMV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpMTEpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoInV0Zi04IikuZGVjb2RlKGJ5dGVzKTsKICAgIH0gY2F0Y2ggewogICAgICByZXR1cm4gIlVuYWJsZSB0byBkZWNvZGUgY29udGVudCI7CiAgICB9CiAgfQogIGFzeW5jIGhhbmRsZURvd25sb2FkKCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtVaW50OEFycmF5LmZyb20oYXRvYih0aGlzLmNvbnRlbnQpLCAoYzExKSA9PiBjMTEuY2hhckNvZGVBdCgwKSldLCB7CiAgICAgICAgdHlwZTogdGhpcy5jb250ZW50VHlwZQogICAgICB9KTsKICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICAgY29uc3QgYTUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICAgIGE1LmhyZWYgPSB1cmw7CiAgICAgIGE1LmRvd25sb2FkID0gZ2V0RmlsZU5hbWUodGhpcy5vYmplY3RLZXkpOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGE1KTsKICAgICAgYTUuY2xpY2soKTsKICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhNSk7CiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBkb3dubG9hZGluZzoiLCBlcnIpOwogICAgfQogIH0KICBhc3luYyBoYW5kbGVEZWxldGUoKSB7CiAgICBpZiAoIWNvbmZpcm0oYERlbGV0ZSAiJHtnZXRGaWxlTmFtZSh0aGlzLm9iamVjdEtleSl9Ij9gKSkgcmV0dXJuOwogICAgdHJ5IHsKICAgICAgYXdhaXQgYXBpU2VydmljZS5kZWxldGVPYmplY3QodGhpcy5idWNrZXROYW1lLCB0aGlzLm9iamVjdEtleSk7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoIm9iamVjdC1kZWxldGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IGtleTogdGhpcy5vYmplY3RLZXkgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pCiAgICAgICk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgZGVsZXRpbmcgb2JqZWN0OiIsIGVycik7CiAgICB9CiAgfQogIGdldExhbmd1YWdlKCkgewogICAgY29uc3QgZXh0ID0gdGhpcy5vYmplY3RLZXkuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKSB8fCAiIjsKICAgIGNvbnN0IGxhbmd1YWdlTWFwID0gewogICAgICB0czogInR5cGVzY3JpcHQiLAogICAgICB0c3g6ICJ0eXBlc2NyaXB0IiwKICAgICAganM6ICJqYXZhc2NyaXB0IiwKICAgICAganN4OiAiamF2YXNjcmlwdCIsCiAgICAgIG1qczogImphdmFzY3JpcHQiLAogICAgICBjanM6ICJqYXZhc2NyaXB0IiwKICAgICAganNvbjogImpzb24iLAogICAgICBodG1sOiAiaHRtbCIsCiAgICAgIGh0bTogImh0bWwiLAogICAgICBjc3M6ICJjc3MiLAogICAgICBzY3NzOiAic2NzcyIsCiAgICAgIHNhc3M6ICJzY3NzIiwKICAgICAgbGVzczogImxlc3MiLAogICAgICBtZDogIm1hcmtkb3duIiwKICAgICAgbWFya2Rvd246ICJtYXJrZG93biIsCiAgICAgIHhtbDogInhtbCIsCiAgICAgIHlhbWw6ICJ5YW1sIiwKICAgICAgeW1sOiAieWFtbCIsCiAgICAgIHB5OiAicHl0aG9uIiwKICAgICAgcmI6ICJydWJ5IiwKICAgICAgZ286ICJnbyIsCiAgICAgIHJzOiAicnVzdCIsCiAgICAgIGphdmE6ICJqYXZhIiwKICAgICAgYzogImMiLAogICAgICBjcHA6ICJjcHAiLAogICAgICBoOiAiYyIsCiAgICAgIGhwcDogImNwcCIsCiAgICAgIGNzOiAiY3NoYXJwIiwKICAgICAgcGhwOiAicGhwIiwKICAgICAgc2g6ICJzaGVsbCIsCiAgICAgIGJhc2g6ICJzaGVsbCIsCiAgICAgIHpzaDogInNoZWxsIiwKICAgICAgc3FsOiAic3FsIiwKICAgICAgZ3JhcGhxbDogImdyYXBocWwiLAogICAgICBncWw6ICJncmFwaHFsIiwKICAgICAgZG9ja2VyZmlsZTogImRvY2tlcmZpbGUiLAogICAgICB0eHQ6ICJwbGFpbnRleHQiCiAgICB9OwogICAgcmV0dXJuIGxhbmd1YWdlTWFwW2V4dF0gfHwgInBsYWludGV4dCI7CiAgfQogIGhhbmRsZUNvbnRlbnRDaGFuZ2UoZXZlbnQpIHsKICAgIGNvbnN0IG5ld1ZhbHVlID0gZXZlbnQuZGV0YWlsOwogICAgdGhpcy5oYXNDaGFuZ2VzID0gbmV3VmFsdWUgIT09IHRoaXMub3JpZ2luYWxUZXh0Q29udGVudDsKICB9CiAgaGFuZGxlRGlzY2FyZCgpIHsKICAgIGNvbnN0IGNvZGVFZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtY29kZSIpOwogICAgaWYgKGNvZGVFZGl0b3IpIHsKICAgICAgY29kZUVkaXRvci52YWx1ZSA9IHRoaXMub3JpZ2luYWxUZXh0Q29udGVudDsKICAgIH0KICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlOwogIH0KICBhc3luYyBoYW5kbGVTYXZlKCkgewogICAgaWYgKCF0aGlzLmhhc0NoYW5nZXMgfHwgdGhpcy5zYXZpbmcpIHJldHVybjsKICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGNvZGVFZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtY29kZSIpOwogICAgICBjb25zdCBjdXJyZW50Q29udGVudCA9IGNvZGVFZGl0b3I/LnZhbHVlID8/ICIiOwogICAgICBjb25zdCBlbmNvZGVyMiA9IG5ldyBUZXh0RW5jb2RlcigpOwogICAgICBjb25zdCBieXRlcyA9IGVuY29kZXIyLmVuY29kZShjdXJyZW50Q29udGVudCk7CiAgICAgIGNvbnN0IGJhc2U2NENvbnRlbnQgPSBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnl0ZXMpKTsKICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UucHV0T2JqZWN0KAogICAgICAgIHRoaXMuYnVja2V0TmFtZSwKICAgICAgICB0aGlzLm9iamVjdEtleSwKICAgICAgICBiYXNlNjRDb250ZW50LAogICAgICAgIHRoaXMuY29udGVudFR5cGUKICAgICAgKTsKICAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICB0aGlzLm9yaWdpbmFsVGV4dENvbnRlbnQgPSBjdXJyZW50Q29udGVudDsKICAgICAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTsKICAgICAgICB0aGlzLmNvbnRlbnQgPSBiYXNlNjRDb250ZW50OwogICAgICB9CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3Igc2F2aW5nIG9iamVjdDoiLCBlcnIpOwogICAgfQogICAgdGhpcy5zYXZpbmcgPSBmYWxzZTsKICB9CiAgcmVuZGVyKCkgewogICAgaWYgKCF0aGlzLm9iamVjdEtleSkgewogICAgICByZXR1cm4gaHRtbDEyYAogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHoiIC8+CiAgICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz0iMTQgMiAxNCA4IDIwIDgiIC8+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8cD5TZWxlY3QgYSBmaWxlIHRvIHByZXZpZXc8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgIH0KICAgIGlmICh0aGlzLmxvYWRpbmcpIHsKICAgICAgcmV0dXJuIGh0bWwxMmAKICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXN0YXRlIj5Mb2FkaW5nLi4uPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAodGhpcy5lcnJvcikgewogICAgICByZXR1cm4gaHRtbDEyYAogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImVycm9yLXN0YXRlIj4ke3RoaXMuZXJyb3J9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICByZXR1cm4gaHRtbDEyYAogICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy10aXRsZSI+JHtnZXRGaWxlTmFtZSh0aGlzLm9iamVjdEtleSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LW1ldGEiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0YS1pdGVtIj4ke3RoaXMuY29udGVudFR5cGV9PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0YS1pdGVtIj4ke2Zvcm1hdFNpemUodGhpcy5zaXplKX08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXRhLWl0ZW0iPiR7dGhpcy5mb3JtYXREYXRlKHRoaXMubGFzdE1vZGlmaWVkKX08L3NwYW4+CiAgICAgICAgICAgICR7dGhpcy5oYXNDaGFuZ2VzID8gaHRtbDEyYAogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ1bnNhdmVkLWluZGljYXRvciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idW5zYXZlZC1kb3QiPjwvc3Bhbj4KICAgICAgICAgICAgICAgIFVuc2F2ZWQgY2hhbmdlcwogICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctY29udGVudCAke3RoaXMuaXNUZXh0KCkgPyAiY29kZS1lZGl0b3IiIDogIiJ9Ij4KICAgICAgICAgICR7dGhpcy5pc0ltYWdlKCkgPyBodG1sMTJgPGltZyBjbGFzcz0icHJldmlldy1pbWFnZSIgc3JjPSJkYXRhOiR7dGhpcy5jb250ZW50VHlwZX07YmFzZTY0LCR7dGhpcy5jb250ZW50fSIgLz5gIDogdGhpcy5pc1RleHQoKSA/IGh0bWwxMmAKICAgICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtY29kZQogICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMub3JpZ2luYWxUZXh0Q29udGVudH0KICAgICAgICAgICAgICAgICAgICAubGFuZ3VhZ2U9JHt0aGlzLmdldExhbmd1YWdlKCl9CiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIgogICAgICAgICAgICAgICAgICAgIEBjb250ZW50LWNoYW5nZT0keyhlMTEpID0+IHRoaXMuaGFuZGxlQ29udGVudENoYW5nZShlMTEpfQogICAgICAgICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNvZGU+CiAgICAgICAgICAgICAgICBgIDogaHRtbDEyYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiaW5hcnktcHJldmlldyI+CiAgICAgICAgICAgICAgICAgICAgPHA+QmluYXJ5IGZpbGUgcHJldmlldyBub3QgYXZhaWxhYmxlPC9wPgogICAgICAgICAgICAgICAgICAgIDxwPkRvd25sb2FkIHRvIHZpZXc8L3A+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYH0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1hY3Rpb25zIj4KICAgICAgICAgICR7dGhpcy5oYXNDaGFuZ2VzID8gaHRtbDEyYAogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIHNlY29uZGFyeSIgQGNsaWNrPSR7dGhpcy5oYW5kbGVEaXNjYXJkfT5EaXNjYXJkPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0iYWN0aW9uLWJ0biBwcmltYXJ5IgogICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlU2F2ZX0KICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLnNhdmluZ30KICAgICAgICAgICAgPgogICAgICAgICAgICAgICR7dGhpcy5zYXZpbmcgPyAiU2F2aW5nLi4uIiA6ICJTYXZlIn0KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICBgIDogaHRtbDEyYAogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIiBAY2xpY2s9JHt0aGlzLmhhbmRsZURvd25sb2FkfT5Eb3dubG9hZDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIGRhbmdlciIgQGNsaWNrPSR7dGhpcy5oYW5kbGVEZWxldGV9PkRlbGV0ZTwvYnV0dG9uPgogICAgICAgICAgYH0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KfTsKX2luaXQ1ID0gX19kZWNvcmF0b3JTdGFydChfYTgpOwpfYnVja2V0TmFtZTQgPSBuZXcgV2Vha01hcCgpOwpfb2JqZWN0S2V5ID0gbmV3IFdlYWtNYXAoKTsKX2xvYWRpbmczID0gbmV3IFdlYWtNYXAoKTsKX3NhdmluZyA9IG5ldyBXZWFrTWFwKCk7Cl9jb250ZW50ID0gbmV3IFdlYWtNYXAoKTsKX29yaWdpbmFsVGV4dENvbnRlbnQgPSBuZXcgV2Vha01hcCgpOwpfaGFzQ2hhbmdlcyA9IG5ldyBXZWFrTWFwKCk7Cl9jb250ZW50VHlwZSA9IG5ldyBXZWFrTWFwKCk7Cl9zaXplID0gbmV3IFdlYWtNYXAoKTsKX2xhc3RNb2RpZmllZCA9IG5ldyBXZWFrTWFwKCk7Cl9lcnJvciA9IG5ldyBXZWFrTWFwKCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgImJ1Y2tldE5hbWUiLCBfYnVja2V0TmFtZV9kZWM0LCBUc3ZpZXdTM1ByZXZpZXcsIF9idWNrZXROYW1lNCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgIm9iamVjdEtleSIsIF9vYmplY3RLZXlfZGVjLCBUc3ZpZXdTM1ByZXZpZXcsIF9vYmplY3RLZXkpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDUsIDQsICJsb2FkaW5nIiwgX2xvYWRpbmdfZGVjMywgVHN2aWV3UzNQcmV2aWV3LCBfbG9hZGluZzMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDUsIDQsICJzYXZpbmciLCBfc2F2aW5nX2RlYywgVHN2aWV3UzNQcmV2aWV3LCBfc2F2aW5nKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ1LCA0LCAiY29udGVudCIsIF9jb250ZW50X2RlYywgVHN2aWV3UzNQcmV2aWV3LCBfY29udGVudCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgIm9yaWdpbmFsVGV4dENvbnRlbnQiLCBfb3JpZ2luYWxUZXh0Q29udGVudF9kZWMsIFRzdmlld1MzUHJldmlldywgX29yaWdpbmFsVGV4dENvbnRlbnQpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDUsIDQsICJoYXNDaGFuZ2VzIiwgX2hhc0NoYW5nZXNfZGVjLCBUc3ZpZXdTM1ByZXZpZXcsIF9oYXNDaGFuZ2VzKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ1LCA0LCAiY29udGVudFR5cGUiLCBfY29udGVudFR5cGVfZGVjLCBUc3ZpZXdTM1ByZXZpZXcsIF9jb250ZW50VHlwZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgInNpemUiLCBfc2l6ZV9kZWMsIFRzdmlld1MzUHJldmlldywgX3NpemUpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDUsIDQsICJsYXN0TW9kaWZpZWQiLCBfbGFzdE1vZGlmaWVkX2RlYywgVHN2aWV3UzNQcmV2aWV3LCBfbGFzdE1vZGlmaWVkKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ1LCA0LCAiZXJyb3IiLCBfZXJyb3JfZGVjLCBUc3ZpZXdTM1ByZXZpZXcsIF9lcnJvcik7ClRzdmlld1MzUHJldmlldyA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgMCwgIlRzdmlld1MzUHJldmlldyIsIF9Uc3ZpZXdTM1ByZXZpZXdfZGVjb3JhdG9ycywgVHN2aWV3UzNQcmV2aWV3KTsKX19wdWJsaWNGaWVsZChUc3ZpZXdTM1ByZXZpZXcsICJzdHlsZXMiLCBbCiAgY3NzTWFuYWdlcjcuZGVmYXVsdFN0eWxlcywKICB0aGVtZVN0eWxlcywKICBjc3M3YAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAucHJldmlldy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsKICAgICAgfQoKICAgICAgLnByZXZpZXctdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LW1ldGEgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgIH0KCiAgICAgIC5tZXRhLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLnByZXZpZXctY29udGVudCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICB9CgogICAgICAucHJldmlldy1jb250ZW50LmNvZGUtZWRpdG9yIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWNvbnRlbnQuY29kZS1lZGl0b3IgZGVlcy1pbnB1dC1jb2RlIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWltYWdlIHsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LWhlaWdodDogMTAwJTsKICAgICAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLnByZXZpZXctdGV4dCB7CiAgICAgICAgZm9udC1mYW1pbHk6ICdNb25hY28nLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICBjb2xvcjogI2NjYzsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWFjdGlvbnMgewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICMzMzM7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4gewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0MDQwNDA7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ0bjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4uZGFuZ2VyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjIpOwogICAgICAgIGJvcmRlci1jb2xvcjogI2VmNDQ0NDsKICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4uZGFuZ2VyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjMpOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ0bi5wcmltYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKTsKICAgICAgICBib3JkZXItY29sb3I6ICMzYjgyZjY7CiAgICAgICAgY29sb3I6ICM2MGE1ZmE7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnRuLnByaW1hcnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjQpOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ0bi5wcmltYXJ5OmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4uc2Vjb25kYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICAgIGJvcmRlci1jb2xvcjogIzU1NTsKICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4uc2Vjb25kYXJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIC51bnNhdmVkLWluZGljYXRvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjUxLCAxOTEsIDM2LCAwLjEpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjUxLCAxOTEsIDM2LCAwLjMpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICNmYmJmMjQ7CiAgICAgIH0KCiAgICAgIC51bnNhdmVkLWRvdCB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogI2ZiYmYyNDsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSBzdmcgewogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLmxvYWRpbmctc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1zdGF0ZSB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5iaW5hcnktcHJldmlldyB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIH0KICAgIGAKXSk7Cl9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMSwgVHN2aWV3UzNQcmV2aWV3KTsKCi8vIHRzX3dlYi9lbGVtZW50cy90c3ZpZXctbW9uZ28tYnJvd3Nlci50cwp2YXIgX2lzU3RyZWFtQ29ubmVjdGVkX2RlYzIsIF9yZWNlbnRDaGFuZ2VDb3VudF9kZWMyLCBfaXNSZXNpemluZ0VkaXRvcl9kZWMsIF9lZGl0b3JXaWR0aF9kZWMsIF9zdGF0c19kZWMsIF9zZWxlY3RlZERvY3VtZW50SWRfZGVjLCBfYWN0aXZlVGFiX2RlYywgX2NvbGxlY3Rpb25OYW1lX2RlYywgX2RhdGFiYXNlTmFtZV9kZWMsIF9hOSwgX1Rzdmlld01vbmdvQnJvd3Nlcl9kZWNvcmF0b3JzLCBfaW5pdDYsIF9kYXRhYmFzZU5hbWUsIF9jb2xsZWN0aW9uTmFtZSwgX2FjdGl2ZVRhYiwgX3NlbGVjdGVkRG9jdW1lbnRJZCwgX3N0YXRzLCBfZWRpdG9yV2lkdGgsIF9pc1Jlc2l6aW5nRWRpdG9yLCBfcmVjZW50Q2hhbmdlQ291bnQyLCBfaXNTdHJlYW1Db25uZWN0ZWQyOwp2YXIgeyBodG1sOiBodG1sMTMsIGNzczogY3NzOCwgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjgsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQ3LCBwcm9wZXJ0eTogcHJvcGVydHk2LCBzdGF0ZTogc3RhdGU3LCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQ4IH0gPSBwbHVnaW5zX2V4cG9ydHM1OwpfVHN2aWV3TW9uZ29Ccm93c2VyX2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDcoInRzdmlldy1tb25nby1icm93c2VyIildOwp2YXIgVHN2aWV3TW9uZ29Ccm93c2VyID0gY2xhc3MgZXh0ZW5kcyAoX2E5ID0gRGVlc0VsZW1lbnQ4LCBfZGF0YWJhc2VOYW1lX2RlYyA9IFtwcm9wZXJ0eTYoeyB0eXBlOiBTdHJpbmcgfSldLCBfY29sbGVjdGlvbk5hbWVfZGVjID0gW3Byb3BlcnR5Nih7IHR5cGU6IFN0cmluZyB9KV0sIF9hY3RpdmVUYWJfZGVjID0gW3N0YXRlNygpXSwgX3NlbGVjdGVkRG9jdW1lbnRJZF9kZWMgPSBbc3RhdGU3KCldLCBfc3RhdHNfZGVjID0gW3N0YXRlNygpXSwgX2VkaXRvcldpZHRoX2RlYyA9IFtzdGF0ZTcoKV0sIF9pc1Jlc2l6aW5nRWRpdG9yX2RlYyA9IFtzdGF0ZTcoKV0sIF9yZWNlbnRDaGFuZ2VDb3VudF9kZWMyID0gW3N0YXRlNygpXSwgX2lzU3RyZWFtQ29ubmVjdGVkX2RlYzIgPSBbc3RhdGU3KCldLCBfYTkpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RhdGFiYXNlTmFtZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCA4LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDExLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfY29sbGVjdGlvbk5hbWUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMTIsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9hY3RpdmVUYWIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMTYsIHRoaXMsICJkb2N1bWVudHMiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZERvY3VtZW50SWQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMjAsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMjMsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zdGF0cywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAyNCwgdGhpcywgbnVsbCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDI3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZWRpdG9yV2lkdGgsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMjgsIHRoaXMsIDQwMCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDMxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfaXNSZXNpemluZ0VkaXRvciwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAzMiwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAzNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3JlY2VudENoYW5nZUNvdW50MiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAzNiwgdGhpcywgMCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDM5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfaXNTdHJlYW1Db25uZWN0ZWQyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDQwLCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDQzLCB0aGlzKTsKICAgIF9fcHVibGljRmllbGQodGhpcywgImNoYW5nZVN1YnNjcmlwdGlvbiIsIG51bGwpOwogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAic3RhcnRFZGl0b3JSZXNpemUiLCAoZTExKSA9PiB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLmlzUmVzaXppbmdFZGl0b3IgPSB0cnVlOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZUVkaXRvclJlc2l6ZSk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmVuZEVkaXRvclJlc2l6ZSk7CiAgICB9KTsKICAgIF9fcHVibGljRmllbGQodGhpcywgImhhbmRsZUVkaXRvclJlc2l6ZSIsIChlMTEpID0+IHsKICAgICAgaWYgKCF0aGlzLmlzUmVzaXppbmdFZGl0b3IpIHJldHVybjsKICAgICAgY29uc3QgY29udGVudEVsID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuY29udGVudCIpOwogICAgICBpZiAoIWNvbnRlbnRFbCkgcmV0dXJuOwogICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGVudEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWluKE1hdGgubWF4KGNvbnRhaW5lclJlY3QucmlnaHQgLSBlMTEuY2xpZW50WCwgMzAwKSwgNzAwKTsKICAgICAgdGhpcy5lZGl0b3JXaWR0aCA9IG5ld1dpZHRoOwogICAgfSk7CiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJlbmRFZGl0b3JSZXNpemUiLCAoKSA9PiB7CiAgICAgIHRoaXMuaXNSZXNpemluZ0VkaXRvciA9IGZhbHNlOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZUVkaXRvclJlc2l6ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmVuZEVkaXRvclJlc2l6ZSk7CiAgICB9KTsKICB9CiAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgYXdhaXQgdGhpcy5sb2FkU3RhdHMoKTsKICAgIHRoaXMuc3Vic2NyaWJlVG9DaGFuZ2VzKCk7CiAgfQogIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tQ2hhbmdlcygpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJkYXRhYmFzZU5hbWUiKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoImNvbGxlY3Rpb25OYW1lIikpIHsKICAgICAgdGhpcy5sb2FkU3RhdHMoKTsKICAgICAgdGhpcy5zZWxlY3RlZERvY3VtZW50SWQgPSAiIjsKICAgICAgdGhpcy5yZWNlbnRDaGFuZ2VDb3VudCA9IDA7CiAgICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tQ2hhbmdlcygpOwogICAgICB0aGlzLnN1YnNjcmliZVRvQ2hhbmdlcygpOwogICAgfQogIH0KICBhc3luYyBzdWJzY3JpYmVUb0NoYW5nZXMoKSB7CiAgICBpZiAoIXRoaXMuZGF0YWJhc2VOYW1lIHx8ICF0aGlzLmNvbGxlY3Rpb25OYW1lKSByZXR1cm47CiAgICB0cnkgewogICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgY2hhbmdlU3RyZWFtU2VydmljZS5zdWJzY3JpYmVUb0NvbGxlY3Rpb24odGhpcy5kYXRhYmFzZU5hbWUsIHRoaXMuY29sbGVjdGlvbk5hbWUpOwogICAgICB0aGlzLmlzU3RyZWFtQ29ubmVjdGVkID0gc3VjY2VzczsKICAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICB0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbiA9IGNoYW5nZVN0cmVhbVNlcnZpY2UuZ2V0Q29sbGVjdGlvbkNoYW5nZXModGhpcy5kYXRhYmFzZU5hbWUsIHRoaXMuY29sbGVjdGlvbk5hbWUpLnN1YnNjcmliZSgoZXZlbnQpID0+IHsKICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKGV2ZW50KTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCJbTW9uZ29Ccm93c2VyXSBGYWlsZWQgdG8gc3Vic2NyaWJlIHRvIGNoYW5nZXM6IiwgZXJyb3IpOwogICAgICB0aGlzLmlzU3RyZWFtQ29ubmVjdGVkID0gZmFsc2U7CiAgICB9CiAgfQogIHVuc3Vic2NyaWJlRnJvbUNoYW5nZXMoKSB7CiAgICBpZiAodGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24pIHsKICAgICAgdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24gPSBudWxsOwogICAgfQogICAgaWYgKHRoaXMuZGF0YWJhc2VOYW1lICYmIHRoaXMuY29sbGVjdGlvbk5hbWUpIHsKICAgICAgY2hhbmdlU3RyZWFtU2VydmljZS51bnN1YnNjcmliZUZyb21Db2xsZWN0aW9uKHRoaXMuZGF0YWJhc2VOYW1lLCB0aGlzLmNvbGxlY3Rpb25OYW1lKTsKICAgIH0KICAgIHRoaXMuaXNTdHJlYW1Db25uZWN0ZWQgPSBmYWxzZTsKICB9CiAgaGFuZGxlQ2hhbmdlKGV2ZW50KSB7CiAgICBjb25zb2xlLmxvZygiW01vbmdvQnJvd3Nlcl0gUmVjZWl2ZWQgY2hhbmdlOiIsIGV2ZW50KTsKICAgIHRoaXMucmVjZW50Q2hhbmdlQ291bnQrKzsKICAgIHRoaXMubG9hZFN0YXRzKCk7CiAgICBjb25zdCBkb2N1bWVudHNFbCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigidHN2aWV3LW1vbmdvLWRvY3VtZW50cyIpOwogICAgaWYgKGRvY3VtZW50c0VsPy5yZWZyZXNoKSB7CiAgICAgIGRvY3VtZW50c0VsLnJlZnJlc2goKTsKICAgIH0KICB9CiAgYXN5bmMgbG9hZFN0YXRzKCkgewogICAgaWYgKCF0aGlzLmRhdGFiYXNlTmFtZSB8fCAhdGhpcy5jb2xsZWN0aW9uTmFtZSkgcmV0dXJuOwogICAgdHJ5IHsKICAgICAgdGhpcy5zdGF0cyA9IGF3YWl0IGFwaVNlcnZpY2UuZ2V0Q29sbGVjdGlvblN0YXRzKHRoaXMuZGF0YWJhc2VOYW1lLCB0aGlzLmNvbGxlY3Rpb25OYW1lKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBsb2FkaW5nIHN0YXRzOiIsIGVycik7CiAgICAgIHRoaXMuc3RhdHMgPSBudWxsOwogICAgfQogIH0KICBzZXRBY3RpdmVUYWIodGFiMikgewogICAgdGhpcy5hY3RpdmVUYWIgPSB0YWIyOwogIH0KICBoYW5kbGVEb2N1bWVudFNlbGVjdGVkKGUxMSkgewogICAgdGhpcy5zZWxlY3RlZERvY3VtZW50SWQgPSBlMTEuZGV0YWlsLmRvY3VtZW50SWQ7CiAgfQogIHJlbmRlcigpIHsKICAgIHJldHVybiBodG1sMTNgCiAgICAgIDxkaXYgY2xhc3M9ImJyb3dzZXItY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sbGVjdGlvbi1pbmZvIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxlY3Rpb24tdGl0bGUiPiR7dGhpcy5jb2xsZWN0aW9uTmFtZX08L3NwYW4+CiAgICAgICAgICAgICR7dGhpcy5zdGF0cyA/IGh0bWwxM2AKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sbGVjdGlvbi1zdGF0cyI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtaXRlbSI+JHtmb3JtYXRDb3VudCh0aGlzLnN0YXRzLmNvdW50KX0gZG9jczwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC1pdGVtIj4ke2Zvcm1hdFNpemUodGhpcy5zdGF0cy5zaXplKX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtaXRlbSI+JHt0aGlzLnN0YXRzLmluZGV4Q291bnR9IGluZGV4ZXM8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdHJlYW0tc3RhdHVzIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RyZWFtLWRvdCAke3RoaXMuaXNTdHJlYW1Db25uZWN0ZWQgPyAiY29ubmVjdGVkIiA6ICIifSI+PC9zcGFuPgogICAgICAgICAgICAgICR7dGhpcy5pc1N0cmVhbUNvbm5lY3RlZCA/ICJMaXZlIiA6ICJPZmZsaW5lIn0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICR7dGhpcy5yZWNlbnRDaGFuZ2VDb3VudCA+IDAgPyBodG1sMTNgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYW5nZS1pbmRpY2F0b3IgcHVsc2UiPgogICAgICAgICAgICAgICAgICAgICR7dGhpcy5yZWNlbnRDaGFuZ2VDb3VudH0gY2hhbmdlJHt0aGlzLnJlY2VudENoYW5nZUNvdW50ID4gMSA/ICJzIiA6ICIifQogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgY2xhc3M9InRhYnMiPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9InRhYiAke3RoaXMuYWN0aXZlVGFiID09PSAiZG9jdW1lbnRzIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2V0QWN0aXZlVGFiKCJkb2N1bWVudHMiKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIERvY3VtZW50cwogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJ0YWIgJHt0aGlzLmFjdGl2ZVRhYiA9PT0gImluZGV4ZXMiID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZXRBY3RpdmVUYWIoImluZGV4ZXMiKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIEluZGV4ZXMKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0idGFiICR7dGhpcy5hY3RpdmVUYWIgPT09ICJhZ2dyZWdhdGlvbiIgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNldEFjdGl2ZVRhYigiYWdncmVnYXRpb24iKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIEFnZ3JlZ2F0aW9uCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiIHN0eWxlPSItLWVkaXRvci13aWR0aDogJHt0aGlzLmVkaXRvcldpZHRofXB4Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1haW4tcGFuZWwiPgogICAgICAgICAgICAke3RoaXMuYWN0aXZlVGFiID09PSAiZG9jdW1lbnRzIiA/IGh0bWwxM2AKICAgICAgICAgICAgICAgICAgPHRzdmlldy1tb25nby1kb2N1bWVudHMKICAgICAgICAgICAgICAgICAgICAuZGF0YWJhc2VOYW1lPSR7dGhpcy5kYXRhYmFzZU5hbWV9CiAgICAgICAgICAgICAgICAgICAgLmNvbGxlY3Rpb25OYW1lPSR7dGhpcy5jb2xsZWN0aW9uTmFtZX0KICAgICAgICAgICAgICAgICAgICBAZG9jdW1lbnQtc2VsZWN0ZWQ9JHt0aGlzLmhhbmRsZURvY3VtZW50U2VsZWN0ZWR9CiAgICAgICAgICAgICAgICAgID48L3Rzdmlldy1tb25nby1kb2N1bWVudHM+CiAgICAgICAgICAgICAgICBgIDogdGhpcy5hY3RpdmVUYWIgPT09ICJpbmRleGVzIiA/IGh0bWwxM2AKICAgICAgICAgICAgICAgICAgICA8dHN2aWV3LW1vbmdvLWluZGV4ZXMKICAgICAgICAgICAgICAgICAgICAgIC5kYXRhYmFzZU5hbWU9JHt0aGlzLmRhdGFiYXNlTmFtZX0KICAgICAgICAgICAgICAgICAgICAgIC5jb2xsZWN0aW9uTmFtZT0ke3RoaXMuY29sbGVjdGlvbk5hbWV9CiAgICAgICAgICAgICAgICAgICAgPjwvdHN2aWV3LW1vbmdvLWluZGV4ZXM+CiAgICAgICAgICAgICAgICAgIGAgOiBodG1sMTNgCiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzogMjRweDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzY2NjsiPgogICAgICAgICAgICAgICAgICAgICAgQWdncmVnYXRpb24gcGlwZWxpbmUgYnVpbGRlciBjb21pbmcgc29vbgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0icmVzaXplLWRpdmlkZXIgJHt0aGlzLmlzUmVzaXppbmdFZGl0b3IgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgQG1vdXNlZG93bj0ke3RoaXMuc3RhcnRFZGl0b3JSZXNpemV9CiAgICAgICAgICA+PC9kaXY+CgogICAgICAgICAgPGRpdiBjbGFzcz0iZGV0YWlsLXBhbmVsIj4KICAgICAgICAgICAgPHRzdmlldy1tb25nby1kb2N1bWVudAogICAgICAgICAgICAgIC5kYXRhYmFzZU5hbWU9JHt0aGlzLmRhdGFiYXNlTmFtZX0KICAgICAgICAgICAgICAuY29sbGVjdGlvbk5hbWU9JHt0aGlzLmNvbGxlY3Rpb25OYW1lfQogICAgICAgICAgICAgIC5kb2N1bWVudElkPSR7dGhpcy5zZWxlY3RlZERvY3VtZW50SWR9CiAgICAgICAgICAgID48L3Rzdmlldy1tb25nby1kb2N1bWVudD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQp9OwpfaW5pdDYgPSBfX2RlY29yYXRvclN0YXJ0KF9hOSk7Cl9kYXRhYmFzZU5hbWUgPSBuZXcgV2Vha01hcCgpOwpfY29sbGVjdGlvbk5hbWUgPSBuZXcgV2Vha01hcCgpOwpfYWN0aXZlVGFiID0gbmV3IFdlYWtNYXAoKTsKX3NlbGVjdGVkRG9jdW1lbnRJZCA9IG5ldyBXZWFrTWFwKCk7Cl9zdGF0cyA9IG5ldyBXZWFrTWFwKCk7Cl9lZGl0b3JXaWR0aCA9IG5ldyBXZWFrTWFwKCk7Cl9pc1Jlc2l6aW5nRWRpdG9yID0gbmV3IFdlYWtNYXAoKTsKX3JlY2VudENoYW5nZUNvdW50MiA9IG5ldyBXZWFrTWFwKCk7Cl9pc1N0cmVhbUNvbm5lY3RlZDIgPSBuZXcgV2Vha01hcCgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDYsIDQsICJkYXRhYmFzZU5hbWUiLCBfZGF0YWJhc2VOYW1lX2RlYywgVHN2aWV3TW9uZ29Ccm93c2VyLCBfZGF0YWJhc2VOYW1lKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ2LCA0LCAiY29sbGVjdGlvbk5hbWUiLCBfY29sbGVjdGlvbk5hbWVfZGVjLCBUc3ZpZXdNb25nb0Jyb3dzZXIsIF9jb2xsZWN0aW9uTmFtZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NiwgNCwgImFjdGl2ZVRhYiIsIF9hY3RpdmVUYWJfZGVjLCBUc3ZpZXdNb25nb0Jyb3dzZXIsIF9hY3RpdmVUYWIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDYsIDQsICJzZWxlY3RlZERvY3VtZW50SWQiLCBfc2VsZWN0ZWREb2N1bWVudElkX2RlYywgVHN2aWV3TW9uZ29Ccm93c2VyLCBfc2VsZWN0ZWREb2N1bWVudElkKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ2LCA0LCAic3RhdHMiLCBfc3RhdHNfZGVjLCBUc3ZpZXdNb25nb0Jyb3dzZXIsIF9zdGF0cyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NiwgNCwgImVkaXRvcldpZHRoIiwgX2VkaXRvcldpZHRoX2RlYywgVHN2aWV3TW9uZ29Ccm93c2VyLCBfZWRpdG9yV2lkdGgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDYsIDQsICJpc1Jlc2l6aW5nRWRpdG9yIiwgX2lzUmVzaXppbmdFZGl0b3JfZGVjLCBUc3ZpZXdNb25nb0Jyb3dzZXIsIF9pc1Jlc2l6aW5nRWRpdG9yKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ2LCA0LCAicmVjZW50Q2hhbmdlQ291bnQiLCBfcmVjZW50Q2hhbmdlQ291bnRfZGVjMiwgVHN2aWV3TW9uZ29Ccm93c2VyLCBfcmVjZW50Q2hhbmdlQ291bnQyKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ2LCA0LCAiaXNTdHJlYW1Db25uZWN0ZWQiLCBfaXNTdHJlYW1Db25uZWN0ZWRfZGVjMiwgVHN2aWV3TW9uZ29Ccm93c2VyLCBfaXNTdHJlYW1Db25uZWN0ZWQyKTsKVHN2aWV3TW9uZ29Ccm93c2VyID0gX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ2LCAwLCAiVHN2aWV3TW9uZ29Ccm93c2VyIiwgX1Rzdmlld01vbmdvQnJvd3Nlcl9kZWNvcmF0b3JzLCBUc3ZpZXdNb25nb0Jyb3dzZXIpOwpfX3B1YmxpY0ZpZWxkKFRzdmlld01vbmdvQnJvd3NlciwgInN0eWxlcyIsIFsKICBjc3NNYW5hZ2VyOC5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczhgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5icm93c2VyLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24taW5mbyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTZweDsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAuY29sbGVjdGlvbi1zdGF0cyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CgogICAgICAuc3RhdC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC50YWJzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAudGFiIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwogICAgICB9CgogICAgICAudGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICB9CgogICAgICAudGFiLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDRweCB2YXIoLS1lZGl0b3Itd2lkdGgsIDQwMHB4KTsKICAgICAgICBnYXA6IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1kaXZpZGVyIHsKICAgICAgICB3aWR0aDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtZGl2aWRlcjpob3ZlciwKICAgICAgLnJlc2l6ZS1kaXZpZGVyLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogICAgICB9CgogICAgICAubWFpbi1wYW5lbCB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgfQoKICAgICAgLmRldGFpbC1wYW5lbCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMnB4OwogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogMTIwMHB4KSB7CiAgICAgICAgLmNvbnRlbnQgewogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgfQoKICAgICAgICAuZGV0YWlsLXBhbmVsLAogICAgICAgIC5yZXNpemUtZGl2aWRlciB7CiAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmNoYW5nZS1pbmRpY2F0b3IgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzQsIDE5NywgOTQsIDAuMik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogIzRhZGU4MDsKICAgICAgfQoKICAgICAgLmNoYW5nZS1pbmRpY2F0b3IucHVsc2UgewogICAgICAgIGFuaW1hdGlvbjogcHVsc2UtZ3JlZW4gMXMgZWFzZS1pbi1vdXQ7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgcHVsc2UtZ3JlZW4gewogICAgICAgIDAlIHsgYmFja2dyb3VuZDogcmdiYSgzNCwgMTk3LCA5NCwgMC40KTsgfQogICAgICAgIDEwMCUgeyBiYWNrZ3JvdW5kOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjIpOyB9CiAgICAgIH0KCiAgICAgIC5zdHJlYW0tc3RhdHVzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CgogICAgICAuc3RyZWFtLWRvdCB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogIzg4ODsKICAgICAgfQoKICAgICAgLnN0cmVhbS1kb3QuY29ubmVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMjJjNTVlOwogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDEsIFRzdmlld01vbmdvQnJvd3Nlcik7CgovLyB0c193ZWIvZWxlbWVudHMvdHN2aWV3LW1vbmdvLWNvbGxlY3Rpb25zLnRzCnZhciBfbG9hZGluZ19kZWM0LCBfY29sbGVjdGlvbnNfZGVjLCBfc2VsZWN0ZWRDb2xsZWN0aW9uX2RlYzIsIF9kYXRhYmFzZU5hbWVfZGVjMiwgX2ExMCwgX1Rzdmlld01vbmdvQ29sbGVjdGlvbnNfZGVjb3JhdG9ycywgX2luaXQ3LCBfZGF0YWJhc2VOYW1lMiwgX3NlbGVjdGVkQ29sbGVjdGlvbjIsIF9jb2xsZWN0aW9ucywgX2xvYWRpbmc0Owp2YXIgeyBodG1sOiBodG1sMTQsIGNzczogY3NzOSwgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjksIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQ4LCBwcm9wZXJ0eTogcHJvcGVydHk3LCBzdGF0ZTogc3RhdGU4LCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQ5IH0gPSBwbHVnaW5zX2V4cG9ydHM1Owp2YXIgeyBEZWVzQ29udGV4dG1lbnU6IERlZXNDb250ZXh0bWVudTUgfSA9IGRpc3RfdHNfd2ViX2V4cG9ydHMyOwpfVHN2aWV3TW9uZ29Db2xsZWN0aW9uc19kZWNvcmF0b3JzID0gW2N1c3RvbUVsZW1lbnQ4KCJ0c3ZpZXctbW9uZ28tY29sbGVjdGlvbnMiKV07CnZhciBUc3ZpZXdNb25nb0NvbGxlY3Rpb25zID0gY2xhc3MgZXh0ZW5kcyAoX2ExMCA9IERlZXNFbGVtZW50OSwgX2RhdGFiYXNlTmFtZV9kZWMyID0gW3Byb3BlcnR5Nyh7IHR5cGU6IFN0cmluZyB9KV0sIF9zZWxlY3RlZENvbGxlY3Rpb25fZGVjMiA9IFtwcm9wZXJ0eTcoeyB0eXBlOiBTdHJpbmcgfSldLCBfY29sbGVjdGlvbnNfZGVjID0gW3N0YXRlOCgpXSwgX2xvYWRpbmdfZGVjNCA9IFtzdGF0ZTgoKV0sIF9hMTApIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RhdGFiYXNlTmFtZTIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NywgOCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ3LCAxMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3NlbGVjdGVkQ29sbGVjdGlvbjIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NywgMTIsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NywgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jb2xsZWN0aW9ucywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ3LCAxNiwgdGhpcywgW10pKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ3LCAxOSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2xvYWRpbmc0LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDcsIDIwLCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDcsIDIzLCB0aGlzKTsKICB9CiAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgYXdhaXQgdGhpcy5sb2FkQ29sbGVjdGlvbnMoKTsKICB9CiAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiZGF0YWJhc2VOYW1lIikpIHsKICAgICAgdGhpcy5sb2FkQ29sbGVjdGlvbnMoKTsKICAgIH0KICB9CiAgYXN5bmMgbG9hZENvbGxlY3Rpb25zKCkgewogICAgaWYgKCF0aGlzLmRhdGFiYXNlTmFtZSkgcmV0dXJuOwogICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgIHRyeSB7CiAgICAgIHRoaXMuY29sbGVjdGlvbnMgPSBhd2FpdCBhcGlTZXJ2aWNlLmxpc3RDb2xsZWN0aW9ucyh0aGlzLmRhdGFiYXNlTmFtZSk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBjb2xsZWN0aW9uczoiLCBlcnIpOwogICAgICB0aGlzLmNvbGxlY3Rpb25zID0gW107CiAgICB9CiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICB9CiAgc2VsZWN0Q29sbGVjdGlvbihuYW1lKSB7CiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoCiAgICAgIG5ldyBDdXN0b21FdmVudCgiY29sbGVjdGlvbi1zZWxlY3RlZCIsIHsKICAgICAgICBkZXRhaWw6IG5hbWUsCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KQogICAgKTsKICB9CiAgYXN5bmMgZGVsZXRlQ29sbGVjdGlvbihuYW1lKSB7CiAgICBpZiAoIWNvbmZpcm0oYERlbGV0ZSBjb2xsZWN0aW9uICIke25hbWV9Ij8gVGhpcyB3aWxsIGRlbGV0ZSBhbGwgZG9jdW1lbnRzLmApKSByZXR1cm47CiAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXBpU2VydmljZS5kcm9wQ29sbGVjdGlvbih0aGlzLmRhdGFiYXNlTmFtZSwgbmFtZSk7CiAgICBpZiAoc3VjY2VzcykgewogICAgICB0aGlzLmNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9ucy5maWx0ZXIoKGMxMSkgPT4gYzExLm5hbWUgIT09IG5hbWUpOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoCiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCJjb2xsZWN0aW9uLWRlbGV0ZWQiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgZGF0YWJhc2VOYW1lOiB0aGlzLmRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWU6IG5hbWUgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pCiAgICAgICk7CiAgICB9CiAgfQogIGhhbmRsZUNvbGxlY3Rpb25Db250ZXh0TWVudShldmVudCwgY29sbGVjdGlvbikgewogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIERlZXNDb250ZXh0bWVudTUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIFsKICAgICAgewogICAgICAgIG5hbWU6ICJWaWV3IERvY3VtZW50cyIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVRleHQiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgdGhpcy5zZWxlY3RDb2xsZWN0aW9uKGNvbGxlY3Rpb24ubmFtZSk7CiAgICAgICAgfQogICAgICB9LAogICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJEZWxldGUgQ29sbGVjdGlvbiIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2gyIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlQ29sbGVjdGlvbihjb2xsZWN0aW9uLm5hbWUpOwogICAgICAgIH0KICAgICAgfQogICAgXSk7CiAgfQogIGFzeW5jIHJlZnJlc2goKSB7CiAgICBhd2FpdCB0aGlzLmxvYWRDb2xsZWN0aW9ucygpOwogIH0KICBzZWxlY3RPdmVydmlldygpIHsKICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgbmV3IEN1c3RvbUV2ZW50KCJjb2xsZWN0aW9uLXNlbGVjdGVkIiwgewogICAgICAgIGRldGFpbDogIl9fb3ZlcnZpZXdfXyIsCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KQogICAgKTsKICB9CiAgcmVuZGVyKCkgewogICAgaWYgKHRoaXMubG9hZGluZykgewogICAgICByZXR1cm4gaHRtbDE0YDxkaXYgY2xhc3M9ImxvYWRpbmctc3RhdGUiPkxvYWRpbmcgY29sbGVjdGlvbnMuLi48L2Rpdj5gOwogICAgfQogICAgcmV0dXJuIGh0bWwxNGAKICAgICAgPGRpdiBjbGFzcz0iY29sbGVjdGlvbnMtbGlzdCI+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9Im92ZXJ2aWV3LWl0ZW0gJHt0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbiA9PT0gIl9fb3ZlcnZpZXdfXyIgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZWxlY3RPdmVydmlldygpfQogICAgICAgID4KICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj4KICAgICAgICAgICAgPHJlY3QgeD0iMyIgeT0iMyIgd2lkdGg9IjciIGhlaWdodD0iNyI+PC9yZWN0PgogICAgICAgICAgICA8cmVjdCB4PSIxNCIgeT0iMyIgd2lkdGg9IjciIGhlaWdodD0iNyI+PC9yZWN0PgogICAgICAgICAgICA8cmVjdCB4PSIxNCIgeT0iMTQiIHdpZHRoPSI3IiBoZWlnaHQ9IjciPjwvcmVjdD4KICAgICAgICAgICAgPHJlY3QgeD0iMyIgeT0iMTQiIHdpZHRoPSI3IiBoZWlnaHQ9IjciPjwvcmVjdD4KICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgT3ZlcnZpZXcKICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMuY29sbGVjdGlvbnMubGVuZ3RoID09PSAwID8gaHRtbDE0YDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj5ObyBjb2xsZWN0aW9uczwvZGl2PmAgOiB0aGlzLmNvbGxlY3Rpb25zLm1hcCgKICAgICAgKGNvbGwpID0+IGh0bWwxNGAKICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9ImNvbGxlY3Rpb24taXRlbSAke3RoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uID09PSBjb2xsLm5hbWUgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNlbGVjdENvbGxlY3Rpb24oY29sbC5uYW1lKX0KICAgICAgICAgICAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVDb2xsZWN0aW9uQ29udGV4dE1lbnUoZTExLCBjb2xsKX0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxlY3Rpb24tbmFtZSI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iY29sbGVjdGlvbi1pY29uIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTIyIDE5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg1bDIgM2g5YTIgMiAwIDAgMSAyIDJ6Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgJHtjb2xsLm5hbWV9CiAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgJHtjb2xsLmNvdW50ICE9PSB2b2lkIDAgPyBodG1sMTRgPHNwYW4gY2xhc3M9ImNvbGxlY3Rpb24tY291bnQiPiR7Zm9ybWF0Q291bnQoY29sbC5jb3VudCl9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGAKICAgICl9CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07Cl9pbml0NyA9IF9fZGVjb3JhdG9yU3RhcnQoX2ExMCk7Cl9kYXRhYmFzZU5hbWUyID0gbmV3IFdlYWtNYXAoKTsKX3NlbGVjdGVkQ29sbGVjdGlvbjIgPSBuZXcgV2Vha01hcCgpOwpfY29sbGVjdGlvbnMgPSBuZXcgV2Vha01hcCgpOwpfbG9hZGluZzQgPSBuZXcgV2Vha01hcCgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDcsIDQsICJkYXRhYmFzZU5hbWUiLCBfZGF0YWJhc2VOYW1lX2RlYzIsIFRzdmlld01vbmdvQ29sbGVjdGlvbnMsIF9kYXRhYmFzZU5hbWUyKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ3LCA0LCAic2VsZWN0ZWRDb2xsZWN0aW9uIiwgX3NlbGVjdGVkQ29sbGVjdGlvbl9kZWMyLCBUc3ZpZXdNb25nb0NvbGxlY3Rpb25zLCBfc2VsZWN0ZWRDb2xsZWN0aW9uMik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NywgNCwgImNvbGxlY3Rpb25zIiwgX2NvbGxlY3Rpb25zX2RlYywgVHN2aWV3TW9uZ29Db2xsZWN0aW9ucywgX2NvbGxlY3Rpb25zKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ3LCA0LCAibG9hZGluZyIsIF9sb2FkaW5nX2RlYzQsIFRzdmlld01vbmdvQ29sbGVjdGlvbnMsIF9sb2FkaW5nNCk7ClRzdmlld01vbmdvQ29sbGVjdGlvbnMgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDcsIDAsICJUc3ZpZXdNb25nb0NvbGxlY3Rpb25zIiwgX1Rzdmlld01vbmdvQ29sbGVjdGlvbnNfZGVjb3JhdG9ycywgVHN2aWV3TW9uZ29Db2xsZWN0aW9ucyk7Cl9fcHVibGljRmllbGQoVHN2aWV3TW9uZ29Db2xsZWN0aW9ucywgInN0eWxlcyIsIFsKICBjc3NNYW5hZ2VyOS5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb25zLWxpc3QgewogICAgICAgIHBhZGRpbmctbGVmdDogMTJweDsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24taXRlbSB7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgIH0KCiAgICAgIC5jb2xsZWN0aW9uLWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICAgIH0KCiAgICAgIC5jb2xsZWN0aW9uLWl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5jb2xsZWN0aW9uLW5hbWUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24taWNvbiB7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CgogICAgICAuY29sbGVjdGlvbi1jb3VudCB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5sb2FkaW5nLXN0YXRlIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLm92ZXJ2aWV3LWl0ZW0gewogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgICAgY29sb3I6ICNhNWQ2YTc7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICAub3ZlcnZpZXctaXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgICAgfQoKICAgICAgLm92ZXJ2aWV3LWl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTY1LCAyMTQsIDE2NywgMC4xNSk7CiAgICAgICAgY29sb3I6ICNhNWQ2YTc7CiAgICAgIH0KCiAgICAgIC5vdmVydmlldy1pdGVtIHN2ZyB7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdDcsIDEsIFRzdmlld01vbmdvQ29sbGVjdGlvbnMpOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1tb25nby1kb2N1bWVudHMudHMKdmFyIF9zZWxlY3RlZElkX2RlYywgX2ZpbHRlclRleHRfZGVjMiwgX2xvYWRpbmdfZGVjNSwgX3BhZ2VTaXplX2RlYywgX3BhZ2VfZGVjLCBfdG90YWxfZGVjLCBfZG9jdW1lbnRzX2RlYywgX2NvbGxlY3Rpb25OYW1lX2RlYzIsIF9kYXRhYmFzZU5hbWVfZGVjMywgX2ExMSwgX1Rzdmlld01vbmdvRG9jdW1lbnRzX2RlY29yYXRvcnMsIF9pbml0OCwgX2RhdGFiYXNlTmFtZTMsIF9jb2xsZWN0aW9uTmFtZTIsIF9kb2N1bWVudHMsIF90b3RhbCwgX3BhZ2UsIF9wYWdlU2l6ZSwgX2xvYWRpbmc1LCBfZmlsdGVyVGV4dDIsIF9zZWxlY3RlZElkOwp2YXIgeyBodG1sOiBodG1sMTUsIGNzczogY3NzMTAsIGNzc01hbmFnZXI6IGNzc01hbmFnZXIxMCwgY3VzdG9tRWxlbWVudDogY3VzdG9tRWxlbWVudDksIHByb3BlcnR5OiBwcm9wZXJ0eTgsIHN0YXRlOiBzdGF0ZTksIERlZXNFbGVtZW50OiBEZWVzRWxlbWVudDEwIH0gPSBwbHVnaW5zX2V4cG9ydHM1Owp2YXIgeyBEZWVzQ29udGV4dG1lbnU6IERlZXNDb250ZXh0bWVudTYgfSA9IGRpc3RfdHNfd2ViX2V4cG9ydHMyOwpfVHN2aWV3TW9uZ29Eb2N1bWVudHNfZGVjb3JhdG9ycyA9IFtjdXN0b21FbGVtZW50OSgidHN2aWV3LW1vbmdvLWRvY3VtZW50cyIpXTsKdmFyIFRzdmlld01vbmdvRG9jdW1lbnRzID0gY2xhc3MgZXh0ZW5kcyAoX2ExMSA9IERlZXNFbGVtZW50MTAsIF9kYXRhYmFzZU5hbWVfZGVjMyA9IFtwcm9wZXJ0eTgoeyB0eXBlOiBTdHJpbmcgfSldLCBfY29sbGVjdGlvbk5hbWVfZGVjMiA9IFtwcm9wZXJ0eTgoeyB0eXBlOiBTdHJpbmcgfSldLCBfZG9jdW1lbnRzX2RlYyA9IFtzdGF0ZTkoKV0sIF90b3RhbF9kZWMgPSBbc3RhdGU5KCldLCBfcGFnZV9kZWMgPSBbc3RhdGU5KCldLCBfcGFnZVNpemVfZGVjID0gW3N0YXRlOSgpXSwgX2xvYWRpbmdfZGVjNSA9IFtzdGF0ZTkoKV0sIF9maWx0ZXJUZXh0X2RlYzIgPSBbc3RhdGU5KCldLCBfc2VsZWN0ZWRJZF9kZWMgPSBbc3RhdGU5KCldLCBfYTExKSB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9kYXRhYmFzZU5hbWUzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jb2xsZWN0aW9uTmFtZTIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMTIsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9kb2N1bWVudHMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMTYsIHRoaXMsIFtdKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF90b3RhbCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAyMCwgdGhpcywgMCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDIzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfcGFnZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAyNCwgdGhpcywgMSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDI3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfcGFnZVNpemUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMjgsIHRoaXMsIDUwKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMzEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9sb2FkaW5nNSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAzMiwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAzNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2ZpbHRlclRleHQyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDM2LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDM5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2VsZWN0ZWRJZCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCA0MCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCA0MywgdGhpcyk7CiAgfQogIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIGF3YWl0IHRoaXMubG9hZERvY3VtZW50cygpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJkYXRhYmFzZU5hbWUiKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoImNvbGxlY3Rpb25OYW1lIikpIHsKICAgICAgdGhpcy5wYWdlID0gMTsKICAgICAgdGhpcy5sb2FkRG9jdW1lbnRzKCk7CiAgICB9CiAgfQogIGFzeW5jIGxvYWREb2N1bWVudHMoKSB7CiAgICBpZiAoIXRoaXMuZGF0YWJhc2VOYW1lIHx8ICF0aGlzLmNvbGxlY3Rpb25OYW1lKSByZXR1cm47CiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgdHJ5IHsKICAgICAgbGV0IGZpbHRlcjIgPSB7fTsKICAgICAgaWYgKHRoaXMuZmlsdGVyVGV4dC50cmltKCkpIHsKICAgICAgICB0cnkgewogICAgICAgICAgZmlsdGVyMiA9IEpTT04ucGFyc2UodGhpcy5maWx0ZXJUZXh0KTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBpU2VydmljZS5maW5kRG9jdW1lbnRzKAogICAgICAgIHRoaXMuZGF0YWJhc2VOYW1lLAogICAgICAgIHRoaXMuY29sbGVjdGlvbk5hbWUsCiAgICAgICAgewogICAgICAgICAgZmlsdGVyOiBmaWx0ZXIyLAogICAgICAgICAgc2tpcDogKHRoaXMucGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSwKICAgICAgICAgIGxpbWl0OiB0aGlzLnBhZ2VTaXplCiAgICAgICAgfQogICAgICApOwogICAgICB0aGlzLmRvY3VtZW50cyA9IHJlc3VsdC5kb2N1bWVudHM7CiAgICAgIHRoaXMudG90YWwgPSByZXN1bHQudG90YWw7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBkb2N1bWVudHM6IiwgZXJyKTsKICAgICAgdGhpcy5kb2N1bWVudHMgPSBbXTsKICAgICAgdGhpcy50b3RhbCA9IDA7CiAgICB9CiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICB9CiAgLyoqCiAgICogUHVibGljIG1ldGhvZCB0byByZWZyZXNoIGRvY3VtZW50cyAoY2FsbGVkIGJ5IHBhcmVudCBvbiBjaGFuZ2UgZXZlbnRzKQogICAqLwogIGFzeW5jIHJlZnJlc2goKSB7CiAgICBhd2FpdCB0aGlzLmxvYWREb2N1bWVudHMoKTsKICB9CiAgaGFuZGxlRmlsdGVySW5wdXQoZTExKSB7CiAgICB0aGlzLmZpbHRlclRleHQgPSBlMTEudGFyZ2V0LnZhbHVlOwogIH0KICBoYW5kbGVGaWx0ZXJTdWJtaXQoKSB7CiAgICB0aGlzLnBhZ2UgPSAxOwogICAgdGhpcy5sb2FkRG9jdW1lbnRzKCk7CiAgfQogIGhhbmRsZUtleVByZXNzKGUxMSkgewogICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJTdWJtaXQoKTsKICAgIH0KICB9CiAgc2VsZWN0RG9jdW1lbnQoZG9jKSB7CiAgICBjb25zdCBpZCA9IGRvYy5faWQgfHwgIiI7CiAgICB0aGlzLnNlbGVjdGVkSWQgPSBpZDsKICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgbmV3IEN1c3RvbUV2ZW50KCJkb2N1bWVudC1zZWxlY3RlZCIsIHsKICAgICAgICBkZXRhaWw6IHsgZG9jdW1lbnRJZDogaWQsIGRvY3VtZW50OiBkb2MgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pCiAgICApOwogIH0KICBnb1RvUGFnZShwYWdlTnVtKSB7CiAgICB0aGlzLnBhZ2UgPSBwYWdlTnVtOwogICAgdGhpcy5sb2FkRG9jdW1lbnRzKCk7CiAgfQogIGdldERvY3VtZW50UHJldmlldyhkb2MpIHsKICAgIGNvbnN0IHByZXZpZXcgPSB7fTsKICAgIGNvbnN0IGtleXMyID0gT2JqZWN0LmtleXMoZG9jKS5maWx0ZXIoKGs0KSA9PiBrNCAhPT0gIl9pZCIpOwogICAgZm9yIChjb25zdCBrZXkyIG9mIGtleXMyLnNsaWNlKDAsIDMpKSB7CiAgICAgIHByZXZpZXdba2V5Ml0gPSBkb2Nba2V5Ml07CiAgICB9CiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocHJldmlldyk7CiAgfQogIGdldCB0b3RhbFBhZ2VzKCkgewogICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gdGhpcy5wYWdlU2l6ZSk7CiAgfQogIGFzeW5jIGhhbmRsZUluc2VydE5ldygpIHsKICAgIGNvbnN0IG5ld0RvYyA9IHsKICAgICAgLy8gRGVmYXVsdCBlbXB0eSBkb2N1bWVudAogICAgICBjcmVhdGVkQXQ6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKQogICAgfTsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGluc2VydGVkSWQgPSBhd2FpdCBhcGlTZXJ2aWNlLmluc2VydERvY3VtZW50KAogICAgICAgIHRoaXMuZGF0YWJhc2VOYW1lLAogICAgICAgIHRoaXMuY29sbGVjdGlvbk5hbWUsCiAgICAgICAgbmV3RG9jCiAgICAgICk7CiAgICAgIGF3YWl0IHRoaXMubG9hZERvY3VtZW50cygpOwogICAgICB0aGlzLnNlbGVjdGVkSWQgPSBpbnNlcnRlZElkOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoCiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCJkb2N1bWVudC1zZWxlY3RlZCIsIHsKICAgICAgICAgIGRldGFpbDogeyBkb2N1bWVudElkOiBpbnNlcnRlZElkIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KQogICAgICApOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGluc2VydGluZyBkb2N1bWVudDoiLCBlcnIpOwogICAgfQogIH0KICBoYW5kbGVEb2N1bWVudENvbnRleHRNZW51KGV2ZW50LCBkb2MpIHsKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICBjb25zdCBkb2NJZCA9IGRvYy5faWQ7CiAgICBEZWVzQ29udGV4dG1lbnU2Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBbCiAgICAgIHsKICAgICAgICBuYW1lOiAiVmlldy9FZGl0IiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTplZGl0IiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0RG9jdW1lbnQoZG9jKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiQ29weSBhcyBKU09OIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjb3B5IiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3RyaW5naWZ5KGRvYywgbnVsbCwgMikpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJEdXBsaWNhdGUiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmNvcHlQbHVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHsgX2lkLCAuLi5kb2NXaXRob3V0SWQgfSA9IGRvYzsKICAgICAgICAgIGNvbnN0IG5ld0RvYyA9IHsgLi4uZG9jV2l0aG91dElkLCBjcmVhdGVkQXQ6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSB9OwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgaW5zZXJ0ZWRJZCA9IGF3YWl0IGFwaVNlcnZpY2UuaW5zZXJ0RG9jdW1lbnQoCiAgICAgICAgICAgICAgdGhpcy5kYXRhYmFzZU5hbWUsCiAgICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uTmFtZSwKICAgICAgICAgICAgICBuZXdEb2MKICAgICAgICAgICAgKTsKICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkRG9jdW1lbnRzKCk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZCA9IGluc2VydGVkSWQ7CiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoImRvY3VtZW50LXNlbGVjdGVkIiwgewogICAgICAgICAgICAgICAgZGV0YWlsOiB7IGRvY3VtZW50SWQ6IGluc2VydGVkSWQgfSwKICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICk7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgZHVwbGljYXRpbmcgZG9jdW1lbnQ6IiwgZXJyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2gyIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChjb25maXJtKGBEZWxldGUgZG9jdW1lbnQgIiR7ZG9jSWR9Ij9gKSkgewogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGlTZXJ2aWNlLmRlbGV0ZURvY3VtZW50KAogICAgICAgICAgICAgIHRoaXMuZGF0YWJhc2VOYW1lLAogICAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbk5hbWUsCiAgICAgICAgICAgICAgZG9jSWQKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkRG9jdW1lbnRzKCk7CiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJZCA9PT0gZG9jSWQpIHsKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZCA9ICIiOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXSk7CiAgfQogIHJlbmRlcigpIHsKICAgIGNvbnN0IHN0YXJ0UmVjb3JkID0gKHRoaXMucGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSArIDE7CiAgICBjb25zdCBlbmRSZWNvcmQgPSBNYXRoLm1pbih0aGlzLnBhZ2UgKiB0aGlzLnBhZ2VTaXplLCB0aGlzLnRvdGFsKTsKICAgIHJldHVybiBodG1sMTVgCiAgICAgIDxkaXYgY2xhc3M9ImRvY3VtZW50cy1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImZpbHRlci1iYXIiPgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIGNsYXNzPSJmaWx0ZXItaW5wdXQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSdGaWx0ZXI6IHsiZmllbGQiOiAidmFsdWUifScKICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5maWx0ZXJUZXh0fQogICAgICAgICAgICBAaW5wdXQ9JHt0aGlzLmhhbmRsZUZpbHRlcklucHV0fQogICAgICAgICAgICBAa2V5cHJlc3M9JHt0aGlzLmhhbmRsZUtleVByZXNzfQogICAgICAgICAgLz4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImZpbHRlci1idG4iIEBjbGljaz0ke3RoaXMuaGFuZGxlRmlsdGVyU3VibWl0fT5BcHBseTwvYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb25zLWJhciI+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUluc2VydE5ld30+KyBJbnNlcnQgRG9jdW1lbnQ8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnRzLWxpc3QiPgogICAgICAgICAgJHt0aGlzLmxvYWRpbmcgPyBodG1sMTVgPGRpdiBjbGFzcz0ibG9hZGluZy1zdGF0ZSI+TG9hZGluZy4uLjwvZGl2PmAgOiB0aGlzLmRvY3VtZW50cy5sZW5ndGggPT09IDAgPyBodG1sMTVgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPk5vIGRvY3VtZW50cyBmb3VuZDwvZGl2PmAgOiB0aGlzLmRvY3VtZW50cy5tYXAoCiAgICAgIChkb2MpID0+IGh0bWwxNWAKICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZG9jdW1lbnQtcm93ICR7dGhpcy5zZWxlY3RlZElkID09PSBkb2MuX2lkID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2VsZWN0RG9jdW1lbnQoZG9jKX0KICAgICAgICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhlMTEpID0+IHRoaXMuaGFuZGxlRG9jdW1lbnRDb250ZXh0TWVudShlMTEsIGRvYyl9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnQtaWQiPl9pZDogJHtkb2MuX2lkfTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnQtcHJldmlldyI+JHt0aGlzLmdldERvY3VtZW50UHJldmlldyhkb2MpfTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICBgCiAgICApfQogICAgICAgIDwvZGl2PgoKICAgICAgICAke3RoaXMudG90YWwgPiAwID8gaHRtbDE1YAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2luYXRpb24iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFnaW5hdGlvbi1pbmZvIj4KICAgICAgICAgICAgICAgICAgU2hvd2luZyAke3N0YXJ0UmVjb3JkfS0ke2VuZFJlY29yZH0gb2YgJHt0aGlzLnRvdGFsfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdpbmF0aW9uLWNvbnRyb2xzIj4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJwYWdlLWJ0biIKICAgICAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLnBhZ2UgPD0gMX0KICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmdvVG9QYWdlKHRoaXMucGFnZSAtIDEpfQogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgUHJldmlvdXMKICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgICBjbGFzcz0icGFnZS1idG4iCiAgICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5wYWdlID49IHRoaXMudG90YWxQYWdlc30KICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmdvVG9QYWdlKHRoaXMucGFnZSArIDEpfQogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgTmV4dAogICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgIDogIiJ9CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07Cl9pbml0OCA9IF9fZGVjb3JhdG9yU3RhcnQoX2ExMSk7Cl9kYXRhYmFzZU5hbWUzID0gbmV3IFdlYWtNYXAoKTsKX2NvbGxlY3Rpb25OYW1lMiA9IG5ldyBXZWFrTWFwKCk7Cl9kb2N1bWVudHMgPSBuZXcgV2Vha01hcCgpOwpfdG90YWwgPSBuZXcgV2Vha01hcCgpOwpfcGFnZSA9IG5ldyBXZWFrTWFwKCk7Cl9wYWdlU2l6ZSA9IG5ldyBXZWFrTWFwKCk7Cl9sb2FkaW5nNSA9IG5ldyBXZWFrTWFwKCk7Cl9maWx0ZXJUZXh0MiA9IG5ldyBXZWFrTWFwKCk7Cl9zZWxlY3RlZElkID0gbmV3IFdlYWtNYXAoKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ4LCA0LCAiZGF0YWJhc2VOYW1lIiwgX2RhdGFiYXNlTmFtZV9kZWMzLCBUc3ZpZXdNb25nb0RvY3VtZW50cywgX2RhdGFiYXNlTmFtZTMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDgsIDQsICJjb2xsZWN0aW9uTmFtZSIsIF9jb2xsZWN0aW9uTmFtZV9kZWMyLCBUc3ZpZXdNb25nb0RvY3VtZW50cywgX2NvbGxlY3Rpb25OYW1lMik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgImRvY3VtZW50cyIsIF9kb2N1bWVudHNfZGVjLCBUc3ZpZXdNb25nb0RvY3VtZW50cywgX2RvY3VtZW50cyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgInRvdGFsIiwgX3RvdGFsX2RlYywgVHN2aWV3TW9uZ29Eb2N1bWVudHMsIF90b3RhbCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgInBhZ2UiLCBfcGFnZV9kZWMsIFRzdmlld01vbmdvRG9jdW1lbnRzLCBfcGFnZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgInBhZ2VTaXplIiwgX3BhZ2VTaXplX2RlYywgVHN2aWV3TW9uZ29Eb2N1bWVudHMsIF9wYWdlU2l6ZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgImxvYWRpbmciLCBfbG9hZGluZ19kZWM1LCBUc3ZpZXdNb25nb0RvY3VtZW50cywgX2xvYWRpbmc1KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ4LCA0LCAiZmlsdGVyVGV4dCIsIF9maWx0ZXJUZXh0X2RlYzIsIFRzdmlld01vbmdvRG9jdW1lbnRzLCBfZmlsdGVyVGV4dDIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDgsIDQsICJzZWxlY3RlZElkIiwgX3NlbGVjdGVkSWRfZGVjLCBUc3ZpZXdNb25nb0RvY3VtZW50cywgX3NlbGVjdGVkSWQpOwpUc3ZpZXdNb25nb0RvY3VtZW50cyA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgMCwgIlRzdmlld01vbmdvRG9jdW1lbnRzIiwgX1Rzdmlld01vbmdvRG9jdW1lbnRzX2RlY29yYXRvcnMsIFRzdmlld01vbmdvRG9jdW1lbnRzKTsKX19wdWJsaWNGaWVsZChUc3ZpZXdNb25nb0RvY3VtZW50cywgInN0eWxlcyIsIFsKICBjc3NNYW5hZ2VyMTAuZGVmYXVsdFN0eWxlcywKICB0aGVtZVN0eWxlcywKICBjc3MxMGAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuZG9jdW1lbnRzLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmZpbHRlci1iYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzM7CiAgICAgIH0KCiAgICAgIC5maWx0ZXItaW5wdXQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0NDQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICB9CgogICAgICAuZmlsdGVyLWlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogIzQwNDA0MDsKICAgICAgfQoKICAgICAgLmZpbHRlci1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAuZmlsdGVyLWJ0biB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0MDQwNDA7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5maWx0ZXItYnRuOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogICAgICB9CgogICAgICAuZG9jdW1lbnRzLWxpc3QgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgIC5kb2N1bWVudC1yb3cgewogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzOwogICAgICB9CgogICAgICAuZG9jdW1lbnQtcm93OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICB9CgogICAgICAuZG9jdW1lbnQtcm93LnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7CiAgICAgIH0KCiAgICAgIC5kb2N1bWVudC1pZCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICAuZG9jdW1lbnQtcHJldmlldyB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnBhZ2luYXRpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgIzMzMzsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgIH0KCiAgICAgIC5wYWdpbmF0aW9uLWluZm8gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnBhZ2luYXRpb24tY29udHJvbHMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5wYWdlLWJ0biB7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQoKICAgICAgLnBhZ2UtYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsKICAgICAgICBib3JkZXItY29sb3I6ICM2NjY7CiAgICAgICAgY29sb3I6ICNhYWE7CiAgICAgIH0KCiAgICAgIC5wYWdlLWJ0bjpkaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLmxvYWRpbmctc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CgogICAgICAuYWN0aW9ucy1iYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4gewogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzQsIDE5NywgOTQsIDAuMik7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzIyYzU1ZTsKICAgICAgICBjb2xvcjogIzRhZGU4MDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG46aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzQsIDE5NywgOTQsIDAuMyk7CiAgICAgIH0KICAgIGAKXSk7Cl9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMSwgVHN2aWV3TW9uZ29Eb2N1bWVudHMpOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1tb25nby1kb2N1bWVudC50cwp2YXIgX2Vycm9yX2RlYzIsIF9oYXNDaGFuZ2VzX2RlYzIsIF9vcmlnaW5hbENvbnRlbnRfZGVjLCBfZWRpdGluZ19kZWMsIF9sb2FkaW5nX2RlYzYsIF9kb2N1bWVudF9kZWMsIF9kb2N1bWVudElkX2RlYywgX2NvbGxlY3Rpb25OYW1lX2RlYzMsIF9kYXRhYmFzZU5hbWVfZGVjNCwgX2ExMiwgX1Rzdmlld01vbmdvRG9jdW1lbnRfZGVjb3JhdG9ycywgX2luaXQ5LCBfZGF0YWJhc2VOYW1lNCwgX2NvbGxlY3Rpb25OYW1lMywgX2RvY3VtZW50SWQsIF9kb2N1bWVudCwgX2xvYWRpbmc2LCBfZWRpdGluZywgX29yaWdpbmFsQ29udGVudCwgX2hhc0NoYW5nZXMyLCBfZXJyb3IyOwp2YXIgeyBodG1sOiBodG1sMTYsIGNzczogY3NzMTEsIGNzc01hbmFnZXI6IGNzc01hbmFnZXIxMSwgY3VzdG9tRWxlbWVudDogY3VzdG9tRWxlbWVudDEwLCBwcm9wZXJ0eTogcHJvcGVydHk5LCBzdGF0ZTogc3RhdGUxMCwgRGVlc0VsZW1lbnQ6IERlZXNFbGVtZW50MTEgfSA9IHBsdWdpbnNfZXhwb3J0czU7Cl9Uc3ZpZXdNb25nb0RvY3VtZW50X2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDEwKCJ0c3ZpZXctbW9uZ28tZG9jdW1lbnQiKV07CnZhciBUc3ZpZXdNb25nb0RvY3VtZW50ID0gY2xhc3MgZXh0ZW5kcyAoX2ExMiA9IERlZXNFbGVtZW50MTEsIF9kYXRhYmFzZU5hbWVfZGVjNCA9IFtwcm9wZXJ0eTkoeyB0eXBlOiBTdHJpbmcgfSldLCBfY29sbGVjdGlvbk5hbWVfZGVjMyA9IFtwcm9wZXJ0eTkoeyB0eXBlOiBTdHJpbmcgfSldLCBfZG9jdW1lbnRJZF9kZWMgPSBbcHJvcGVydHk5KHsgdHlwZTogU3RyaW5nIH0pXSwgX2RvY3VtZW50X2RlYyA9IFtzdGF0ZTEwKCldLCBfbG9hZGluZ19kZWM2ID0gW3N0YXRlMTAoKV0sIF9lZGl0aW5nX2RlYyA9IFtzdGF0ZTEwKCldLCBfb3JpZ2luYWxDb250ZW50X2RlYyA9IFtzdGF0ZTEwKCldLCBfaGFzQ2hhbmdlc19kZWMyID0gW3N0YXRlMTAoKV0sIF9lcnJvcl9kZWMyID0gW3N0YXRlMTAoKV0sIF9hMTIpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RhdGFiYXNlTmFtZTQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgOCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAxMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NvbGxlY3Rpb25OYW1lMywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAxMiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAxNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RvY3VtZW50SWQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMTYsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9kb2N1bWVudCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAyMCwgdGhpcywgbnVsbCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDIzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbG9hZGluZzYsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMjQsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMjcsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9lZGl0aW5nLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDI4LCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDMxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfb3JpZ2luYWxDb250ZW50LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDMyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDM1LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfaGFzQ2hhbmdlczIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMzYsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMzksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9lcnJvcjIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgNDAsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgNDMsIHRoaXMpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJkb2N1bWVudElkIikpIHsKICAgICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7CiAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlOwogICAgICBpZiAodGhpcy5kb2N1bWVudElkKSB7CiAgICAgICAgdGhpcy5sb2FkRG9jdW1lbnQoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmRvY3VtZW50ID0gbnVsbDsKICAgICAgICB0aGlzLm9yaWdpbmFsQ29udGVudCA9ICIiOwogICAgICB9CiAgICB9CiAgfQogIGFzeW5jIGxvYWREb2N1bWVudCgpIHsKICAgIGlmICghdGhpcy5kb2N1bWVudElkIHx8ICF0aGlzLmRhdGFiYXNlTmFtZSB8fCAhdGhpcy5jb2xsZWN0aW9uTmFtZSkgcmV0dXJuOwogICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgIHRoaXMuZXJyb3IgPSAiIjsKICAgIHRyeSB7CiAgICAgIHRoaXMuZG9jdW1lbnQgPSBhd2FpdCBhcGlTZXJ2aWNlLmdldERvY3VtZW50KAogICAgICAgIHRoaXMuZGF0YWJhc2VOYW1lLAogICAgICAgIHRoaXMuY29sbGVjdGlvbk5hbWUsCiAgICAgICAgdGhpcy5kb2N1bWVudElkCiAgICAgICk7CiAgICAgIHRoaXMub3JpZ2luYWxDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5kb2N1bWVudCwgbnVsbCwgMik7CiAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGxvYWRpbmcgZG9jdW1lbnQ6IiwgZXJyKTsKICAgICAgdGhpcy5lcnJvciA9ICJGYWlsZWQgdG8gbG9hZCBkb2N1bWVudCI7CiAgICB9CiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICB9CiAgc3RhcnRFZGl0aW5nKCkgewogICAgdGhpcy5lZGl0aW5nID0gdHJ1ZTsKICB9CiAgY2FuY2VsRWRpdGluZygpIHsKICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlOwogICAgY29uc3QgY29kZUVkaXRvciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1jb2RlIik7CiAgICBpZiAoY29kZUVkaXRvcikgewogICAgICBjb2RlRWRpdG9yLnZhbHVlID0gdGhpcy5vcmlnaW5hbENvbnRlbnQ7CiAgICB9CiAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTsKICB9CiAgaGFuZGxlQ29udGVudENoYW5nZShlMTEpIHsKICAgIGNvbnN0IG5ld1ZhbHVlID0gZTExLmRldGFpbDsKICAgIHRoaXMuaGFzQ2hhbmdlcyA9IG5ld1ZhbHVlICE9PSB0aGlzLm9yaWdpbmFsQ29udGVudDsKICB9CiAgaGFuZGxlRGlzY2FyZCgpIHsKICAgIGNvbnN0IGNvZGVFZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtY29kZSIpOwogICAgaWYgKGNvZGVFZGl0b3IpIHsKICAgICAgY29kZUVkaXRvci52YWx1ZSA9IHRoaXMub3JpZ2luYWxDb250ZW50OwogICAgfQogICAgdGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7CiAgfQogIGFzeW5jIHNhdmVEb2N1bWVudCgpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGNvZGVFZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtY29kZSIpOwogICAgICBjb25zdCBjb250ZW50MyA9IGNvZGVFZGl0b3I/LnZhbHVlIHx8IHRoaXMub3JpZ2luYWxDb250ZW50OwogICAgICBjb25zdCB1cGRhdGVkRG9jID0gSlNPTi5wYXJzZShjb250ZW50Myk7CiAgICAgIGNvbnN0IHsgX2lkLCAuLi51cGRhdGVGaWVsZHMgfSA9IHVwZGF0ZWREb2M7CiAgICAgIGF3YWl0IGFwaVNlcnZpY2UudXBkYXRlRG9jdW1lbnQoCiAgICAgICAgdGhpcy5kYXRhYmFzZU5hbWUsCiAgICAgICAgdGhpcy5jb2xsZWN0aW9uTmFtZSwKICAgICAgICB0aGlzLmRvY3VtZW50SWQsCiAgICAgICAgdXBkYXRlRmllbGRzCiAgICAgICk7CiAgICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlOwogICAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTsKICAgICAgYXdhaXQgdGhpcy5sb2FkRG9jdW1lbnQoKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KAogICAgICAgIG5ldyBDdXN0b21FdmVudCgiZG9jdW1lbnQtdXBkYXRlZCIsIHsKICAgICAgICAgIGRldGFpbDogeyBkb2N1bWVudElkOiB0aGlzLmRvY3VtZW50SWQgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pCiAgICAgICk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3Igc2F2aW5nIGRvY3VtZW50OiIsIGVycik7CiAgICAgIHRoaXMuZXJyb3IgPSAiSW52YWxpZCBKU09OIG9yIHNhdmUgZmFpbGVkIjsKICAgIH0KICB9CiAgYXN5bmMgZGVsZXRlRG9jdW1lbnQoKSB7CiAgICBpZiAoIWNvbmZpcm0oIkRlbGV0ZSB0aGlzIGRvY3VtZW50PyIpKSByZXR1cm47CiAgICB0cnkgewogICAgICBhd2FpdCBhcGlTZXJ2aWNlLmRlbGV0ZURvY3VtZW50KAogICAgICAgIHRoaXMuZGF0YWJhc2VOYW1lLAogICAgICAgIHRoaXMuY29sbGVjdGlvbk5hbWUsCiAgICAgICAgdGhpcy5kb2N1bWVudElkCiAgICAgICk7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoImRvY3VtZW50LWRlbGV0ZWQiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgZG9jdW1lbnRJZDogdGhpcy5kb2N1bWVudElkIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KQogICAgICApOwogICAgICB0aGlzLmRvY3VtZW50ID0gbnVsbDsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBkZWxldGluZyBkb2N1bWVudDoiLCBlcnIpOwogICAgICB0aGlzLmVycm9yID0gIkRlbGV0ZSBmYWlsZWQiOwogICAgfQogIH0KICByZW5kZXIoKSB7CiAgICBpZiAoIXRoaXMuZG9jdW1lbnRJZCkgewogICAgICByZXR1cm4gaHRtbDE2YAogICAgICAgIDxkaXYgY2xhc3M9ImRvY3VtZW50LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjh6IiAvPgogICAgICAgICAgICAgIDxwb2x5bGluZSBwb2ludHM9IjE0IDIgMTQgOCAyMCA4IiAvPgogICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgPHA+U2VsZWN0IGEgZG9jdW1lbnQgdG8gdmlldzwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgfQogICAgaWYgKHRoaXMubG9hZGluZykgewogICAgICByZXR1cm4gaHRtbDE2YAogICAgICAgIDxkaXYgY2xhc3M9ImRvY3VtZW50LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXN0YXRlIj5Mb2FkaW5nLi4uPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAodGhpcy5lcnJvciAmJiAhdGhpcy5kb2N1bWVudCkgewogICAgICByZXR1cm4gaHRtbDE2YAogICAgICAgIDxkaXYgY2xhc3M9ImRvY3VtZW50LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJlcnJvci1zdGF0ZSI+JHt0aGlzLmVycm9yfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgfQogICAgcmV0dXJuIGh0bWwxNmAKICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnQtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImhlYWRlci10aXRsZSI+RG9jdW1lbnQ8L3NwYW4+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItYWN0aW9ucyI+CiAgICAgICAgICAgICR7dGhpcy5lZGl0aW5nID8gdGhpcy5oYXNDaGFuZ2VzID8gaHRtbDE2YAogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idG4iIEBjbGljaz0ke3RoaXMuaGFuZGxlRGlzY2FyZH0+RGlzY2FyZDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idG4gcHJpbWFyeSIgQGNsaWNrPSR7dGhpcy5zYXZlRG9jdW1lbnR9PlNhdmU8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgYCA6IGh0bWwxNmAKICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIiBAY2xpY2s9JHt0aGlzLmNhbmNlbEVkaXRpbmd9PkNhbmNlbDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICBgIDogaHRtbDE2YAogICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIiBAY2xpY2s9JHt0aGlzLnN0YXJ0RWRpdGluZ30+RWRpdDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIGRhbmdlciIgQGNsaWNrPSR7dGhpcy5kZWxldGVEb2N1bWVudH0+RGVsZXRlPC9idXR0b24+CiAgICAgICAgICAgICAgICBgfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtY29kZQogICAgICAgICAgICAudmFsdWU9JHt0aGlzLm9yaWdpbmFsQ29udGVudH0KICAgICAgICAgICAgLmxhbmd1YWdlPSR7Impzb24ifQogICAgICAgICAgICAuZGlzYWJsZWQ9JHshdGhpcy5lZGl0aW5nfQogICAgICAgICAgICBAY29udGVudC1jaGFuZ2U9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUNvbnRlbnRDaGFuZ2UoZTExKX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY29kZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KfTsKX2luaXQ5ID0gX19kZWNvcmF0b3JTdGFydChfYTEyKTsKX2RhdGFiYXNlTmFtZTQgPSBuZXcgV2Vha01hcCgpOwpfY29sbGVjdGlvbk5hbWUzID0gbmV3IFdlYWtNYXAoKTsKX2RvY3VtZW50SWQgPSBuZXcgV2Vha01hcCgpOwpfZG9jdW1lbnQgPSBuZXcgV2Vha01hcCgpOwpfbG9hZGluZzYgPSBuZXcgV2Vha01hcCgpOwpfZWRpdGluZyA9IG5ldyBXZWFrTWFwKCk7Cl9vcmlnaW5hbENvbnRlbnQgPSBuZXcgV2Vha01hcCgpOwpfaGFzQ2hhbmdlczIgPSBuZXcgV2Vha01hcCgpOwpfZXJyb3IyID0gbmV3IFdlYWtNYXAoKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ5LCA0LCAiZGF0YWJhc2VOYW1lIiwgX2RhdGFiYXNlTmFtZV9kZWM0LCBUc3ZpZXdNb25nb0RvY3VtZW50LCBfZGF0YWJhc2VOYW1lNCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OSwgNCwgImNvbGxlY3Rpb25OYW1lIiwgX2NvbGxlY3Rpb25OYW1lX2RlYzMsIFRzdmlld01vbmdvRG9jdW1lbnQsIF9jb2xsZWN0aW9uTmFtZTMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDksIDQsICJkb2N1bWVudElkIiwgX2RvY3VtZW50SWRfZGVjLCBUc3ZpZXdNb25nb0RvY3VtZW50LCBfZG9jdW1lbnRJZCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OSwgNCwgImRvY3VtZW50IiwgX2RvY3VtZW50X2RlYywgVHN2aWV3TW9uZ29Eb2N1bWVudCwgX2RvY3VtZW50KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ5LCA0LCAibG9hZGluZyIsIF9sb2FkaW5nX2RlYzYsIFRzdmlld01vbmdvRG9jdW1lbnQsIF9sb2FkaW5nNik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OSwgNCwgImVkaXRpbmciLCBfZWRpdGluZ19kZWMsIFRzdmlld01vbmdvRG9jdW1lbnQsIF9lZGl0aW5nKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ5LCA0LCAib3JpZ2luYWxDb250ZW50IiwgX29yaWdpbmFsQ29udGVudF9kZWMsIFRzdmlld01vbmdvRG9jdW1lbnQsIF9vcmlnaW5hbENvbnRlbnQpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDksIDQsICJoYXNDaGFuZ2VzIiwgX2hhc0NoYW5nZXNfZGVjMiwgVHN2aWV3TW9uZ29Eb2N1bWVudCwgX2hhc0NoYW5nZXMyKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ5LCA0LCAiZXJyb3IiLCBfZXJyb3JfZGVjMiwgVHN2aWV3TW9uZ29Eb2N1bWVudCwgX2Vycm9yMik7ClRzdmlld01vbmdvRG9jdW1lbnQgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDksIDAsICJUc3ZpZXdNb25nb0RvY3VtZW50IiwgX1Rzdmlld01vbmdvRG9jdW1lbnRfZGVjb3JhdG9ycywgVHN2aWV3TW9uZ29Eb2N1bWVudCk7Cl9fcHVibGljRmllbGQoVHN2aWV3TW9uZ29Eb2N1bWVudCwgInN0eWxlcyIsIFsKICBjc3NNYW5hZ2VyMTEuZGVmYXVsdFN0eWxlcywKICB0aGVtZVN0eWxlcywKICBjc3MxMWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmRvY3VtZW50LWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuaGVhZGVyLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLmhlYWRlci1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ0biB7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXM7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnRuOmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICM2NjY7CiAgICAgICAgY29sb3I6ICNhYWE7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnRuLnByaW1hcnkgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBib3JkZXItY29sb3I6ICM0MDQwNDA7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnRuLnByaW1hcnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnRuLmRhbmdlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4yKTsKICAgICAgICBib3JkZXItY29sb3I6ICNlZjQ0NDQ7CiAgICAgICAgY29sb3I6ICNmODcxNzE7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnRuLmRhbmdlcjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4zKTsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5jb250ZW50IGRlZXMtaW5wdXQtY29kZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSBzdmcgewogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLmxvYWRpbmctc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1zdGF0ZSB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KICAgIGAKXSk7Cl9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMSwgVHN2aWV3TW9uZ29Eb2N1bWVudCk7CgovLyB0c193ZWIvZWxlbWVudHMvdHN2aWV3LW1vbmdvLWluZGV4ZXMudHMKdmFyIF9uZXdJbmRleFNwYXJzZV9kZWMsIF9uZXdJbmRleFVuaXF1ZV9kZWMsIF9uZXdJbmRleEtleXNfZGVjLCBfc2hvd0NyZWF0ZURpYWxvZ19kZWMzLCBfbG9hZGluZ19kZWM3LCBfaW5kZXhlc19kZWMsIF9jb2xsZWN0aW9uTmFtZV9kZWM0LCBfZGF0YWJhc2VOYW1lX2RlYzUsIF9hMTMsIF9Uc3ZpZXdNb25nb0luZGV4ZXNfZGVjb3JhdG9ycywgX2luaXQxMCwgX2RhdGFiYXNlTmFtZTUsIF9jb2xsZWN0aW9uTmFtZTQsIF9pbmRleGVzLCBfbG9hZGluZzcsIF9zaG93Q3JlYXRlRGlhbG9nMywgX25ld0luZGV4S2V5cywgX25ld0luZGV4VW5pcXVlLCBfbmV3SW5kZXhTcGFyc2U7CnZhciB7IGh0bWw6IGh0bWwxNywgY3NzOiBjc3MxMiwgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjEyLCBjdXN0b21FbGVtZW50OiBjdXN0b21FbGVtZW50MTEsIHByb3BlcnR5OiBwcm9wZXJ0eTEwLCBzdGF0ZTogc3RhdGUxMSwgRGVlc0VsZW1lbnQ6IERlZXNFbGVtZW50MTIgfSA9IHBsdWdpbnNfZXhwb3J0czU7Cl9Uc3ZpZXdNb25nb0luZGV4ZXNfZGVjb3JhdG9ycyA9IFtjdXN0b21FbGVtZW50MTEoInRzdmlldy1tb25nby1pbmRleGVzIildOwp2YXIgVHN2aWV3TW9uZ29JbmRleGVzID0gY2xhc3MgZXh0ZW5kcyAoX2ExMyA9IERlZXNFbGVtZW50MTIsIF9kYXRhYmFzZU5hbWVfZGVjNSA9IFtwcm9wZXJ0eTEwKHsgdHlwZTogU3RyaW5nIH0pXSwgX2NvbGxlY3Rpb25OYW1lX2RlYzQgPSBbcHJvcGVydHkxMCh7IHR5cGU6IFN0cmluZyB9KV0sIF9pbmRleGVzX2RlYyA9IFtzdGF0ZTExKCldLCBfbG9hZGluZ19kZWM3ID0gW3N0YXRlMTEoKV0sIF9zaG93Q3JlYXRlRGlhbG9nX2RlYzMgPSBbc3RhdGUxMSgpXSwgX25ld0luZGV4S2V5c19kZWMgPSBbc3RhdGUxMSgpXSwgX25ld0luZGV4VW5pcXVlX2RlYyA9IFtzdGF0ZTExKCldLCBfbmV3SW5kZXhTcGFyc2VfZGVjID0gW3N0YXRlMTEoKV0sIF9hMTMpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RhdGFiYXNlTmFtZTUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDExLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfY29sbGVjdGlvbk5hbWU0LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAxMiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9pbmRleGVzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAxNiwgdGhpcywgW10pKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9sb2FkaW5nNywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMjAsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDIzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2hvd0NyZWF0ZURpYWxvZzMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDI0LCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAyNywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX25ld0luZGV4S2V5cywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMjgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDMxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbmV3SW5kZXhVbmlxdWUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDMyLCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAzNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX25ld0luZGV4U3BhcnNlLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAzNiwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMzksIHRoaXMpOwogIH0KICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICBhd2FpdCB0aGlzLmxvYWRJbmRleGVzKCk7CiAgfQogIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImRhdGFiYXNlTmFtZSIpIHx8IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiY29sbGVjdGlvbk5hbWUiKSkgewogICAgICB0aGlzLmxvYWRJbmRleGVzKCk7CiAgICB9CiAgfQogIGFzeW5jIGxvYWRJbmRleGVzKCkgewogICAgaWYgKCF0aGlzLmRhdGFiYXNlTmFtZSB8fCAhdGhpcy5jb2xsZWN0aW9uTmFtZSkgcmV0dXJuOwogICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgIHRyeSB7CiAgICAgIHRoaXMuaW5kZXhlcyA9IGF3YWl0IGFwaVNlcnZpY2UubGlzdEluZGV4ZXModGhpcy5kYXRhYmFzZU5hbWUsIHRoaXMuY29sbGVjdGlvbk5hbWUpOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGxvYWRpbmcgaW5kZXhlczoiLCBlcnIpOwogICAgICB0aGlzLmluZGV4ZXMgPSBbXTsKICAgIH0KICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogIH0KICBvcGVuQ3JlYXRlRGlhbG9nKCkgewogICAgdGhpcy5uZXdJbmRleEtleXMgPSAiIjsKICAgIHRoaXMubmV3SW5kZXhVbmlxdWUgPSBmYWxzZTsKICAgIHRoaXMubmV3SW5kZXhTcGFyc2UgPSBmYWxzZTsKICAgIHRoaXMuc2hvd0NyZWF0ZURpYWxvZyA9IHRydWU7CiAgfQogIGNsb3NlQ3JlYXRlRGlhbG9nKCkgewogICAgdGhpcy5zaG93Q3JlYXRlRGlhbG9nID0gZmFsc2U7CiAgfQogIGFzeW5jIGNyZWF0ZUluZGV4KCkgewogICAgdHJ5IHsKICAgICAgY29uc3Qga2V5czIgPSBKU09OLnBhcnNlKHRoaXMubmV3SW5kZXhLZXlzKTsKICAgICAgYXdhaXQgYXBpU2VydmljZS5jcmVhdGVJbmRleCh0aGlzLmRhdGFiYXNlTmFtZSwgdGhpcy5jb2xsZWN0aW9uTmFtZSwga2V5czIsIHsKICAgICAgICB1bmlxdWU6IHRoaXMubmV3SW5kZXhVbmlxdWUsCiAgICAgICAgc3BhcnNlOiB0aGlzLm5ld0luZGV4U3BhcnNlCiAgICAgIH0pOwogICAgICB0aGlzLmNsb3NlQ3JlYXRlRGlhbG9nKCk7CiAgICAgIGF3YWl0IHRoaXMubG9hZEluZGV4ZXMoKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBjcmVhdGluZyBpbmRleDoiLCBlcnIpOwogICAgICBhbGVydCgiSW52YWxpZCBKU09OIG9yIGluZGV4IGNyZWF0aW9uIGZhaWxlZCIpOwogICAgfQogIH0KICBhc3luYyBkcm9wSW5kZXgoaW5kZXhOYW1lKSB7CiAgICBpZiAoaW5kZXhOYW1lID09PSAiX2lkXyIpIHsKICAgICAgYWxlcnQoIkNhbm5vdCBkcm9wIHRoZSBfaWQgaW5kZXgiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFjb25maXJtKGBEcm9wIGluZGV4ICIke2luZGV4TmFtZX0iP2ApKSByZXR1cm47CiAgICB0cnkgewogICAgICBhd2FpdCBhcGlTZXJ2aWNlLmRyb3BJbmRleCh0aGlzLmRhdGFiYXNlTmFtZSwgdGhpcy5jb2xsZWN0aW9uTmFtZSwgaW5kZXhOYW1lKTsKICAgICAgYXdhaXQgdGhpcy5sb2FkSW5kZXhlcygpOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGRyb3BwaW5nIGluZGV4OiIsIGVycik7CiAgICB9CiAgfQogIGZvcm1hdEtleXMoa2V5czIpIHsKICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShrZXlzMik7CiAgfQogIHJlbmRlcigpIHsKICAgIHJldHVybiBodG1sMTdgCiAgICAgIDxkaXYgY2xhc3M9ImluZGV4ZXMtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyIj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNyZWF0ZS1idG4iIEBjbGljaz0ke3RoaXMub3BlbkNyZWF0ZURpYWxvZ30+KyBDcmVhdGUgSW5kZXg8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iaW5kZXhlcy1saXN0Ij4KICAgICAgICAgICR7dGhpcy5sb2FkaW5nID8gaHRtbDE3YDxkaXYgY2xhc3M9ImxvYWRpbmctc3RhdGUiPkxvYWRpbmcuLi48L2Rpdj5gIDogdGhpcy5pbmRleGVzLmxlbmd0aCA9PT0gMCA/IGh0bWwxN2A8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+Tm8gaW5kZXhlcyBmb3VuZDwvZGl2PmAgOiB0aGlzLmluZGV4ZXMubWFwKAogICAgICAoaWR4KSA9PiBodG1sMTdgCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5kZXgtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmRleC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW5kZXgtbmFtZSI+JHtpZHgubmFtZX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZGV4LWJhZGdlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpZHgudW5pcXVlID8gaHRtbDE3YDxzcGFuIGNsYXNzPSJiYWRnZSB1bmlxdWUiPnVuaXF1ZTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpZHguc3BhcnNlID8gaHRtbDE3YDxzcGFuIGNsYXNzPSJiYWRnZSBzcGFyc2UiPnNwYXJzZTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmRleC1rZXlzIj4ke3RoaXMuZm9ybWF0S2V5cyhpZHgua2V5cyl9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmRleC1hY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJkcm9wLWJ0biIKICAgICAgICAgICAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtpZHgubmFtZSA9PT0gIl9pZF8ifQogICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuZHJvcEluZGV4KGlkeC5uYW1lKX0KICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgIERyb3AKICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYAogICAgKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICAke3RoaXMuc2hvd0NyZWF0ZURpYWxvZyA/IGh0bWwxN2AKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLW92ZXJsYXkiIEBjbGljaz0ke3RoaXMuY2xvc2VDcmVhdGVEaWFsb2d9PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZyIgQGNsaWNrPSR7KGUxMSkgPT4gZTExLnN0b3BQcm9wYWdhdGlvbigpfT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+Q3JlYXRlIEluZGV4PC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWZpZWxkIj4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJkaWFsb2ctbGFiZWwiPkluZGV4IEtleXMgKEpTT04pPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZGlhbG9nLWlucHV0IgogICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSd7ImZpZWxkIjogMX0nCiAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5uZXdJbmRleEtleXN9CiAgICAgICAgICAgICAgICAgICAgQGlucHV0PSR7KGUxMSkgPT4gdGhpcy5uZXdJbmRleEtleXMgPSBlMTEudGFyZ2V0LnZhbHVlfQogICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWZpZWxkIj4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJkaWFsb2ctY2hlY2tib3giPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgICAgICAgICAgICAuY2hlY2tlZD0ke3RoaXMubmV3SW5kZXhVbmlxdWV9CiAgICAgICAgICAgICAgICAgICAgICBAY2hhbmdlPSR7KGUxMSkgPT4gdGhpcy5uZXdJbmRleFVuaXF1ZSA9IGUxMS50YXJnZXQuY2hlY2tlZH0KICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgIFVuaXF1ZQogICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWZpZWxkIj4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJkaWFsb2ctY2hlY2tib3giPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgICAgICAgICAgICAuY2hlY2tlZD0ke3RoaXMubmV3SW5kZXhTcGFyc2V9CiAgICAgICAgICAgICAgICAgICAgICBAY2hhbmdlPSR7KGUxMSkgPT4gdGhpcy5uZXdJbmRleFNwYXJzZSA9IGUxMS50YXJnZXQuY2hlY2tlZH0KICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgIFNwYXJzZQogICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkaWFsb2ctYnRuIHNlY29uZGFyeSIgQGNsaWNrPSR7dGhpcy5jbG9zZUNyZWF0ZURpYWxvZ30+Q2FuY2VsPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRpYWxvZy1idG4gcHJpbWFyeSIgQGNsaWNrPSR7dGhpcy5jcmVhdGVJbmRleH0+Q3JlYXRlPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CiAgICBgOwogIH0KfTsKX2luaXQxMCA9IF9fZGVjb3JhdG9yU3RhcnQoX2ExMyk7Cl9kYXRhYmFzZU5hbWU1ID0gbmV3IFdlYWtNYXAoKTsKX2NvbGxlY3Rpb25OYW1lNCA9IG5ldyBXZWFrTWFwKCk7Cl9pbmRleGVzID0gbmV3IFdlYWtNYXAoKTsKX2xvYWRpbmc3ID0gbmV3IFdlYWtNYXAoKTsKX3Nob3dDcmVhdGVEaWFsb2czID0gbmV3IFdlYWtNYXAoKTsKX25ld0luZGV4S2V5cyA9IG5ldyBXZWFrTWFwKCk7Cl9uZXdJbmRleFVuaXF1ZSA9IG5ldyBXZWFrTWFwKCk7Cl9uZXdJbmRleFNwYXJzZSA9IG5ldyBXZWFrTWFwKCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTAsIDQsICJkYXRhYmFzZU5hbWUiLCBfZGF0YWJhc2VOYW1lX2RlYzUsIFRzdmlld01vbmdvSW5kZXhlcywgX2RhdGFiYXNlTmFtZTUpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDEwLCA0LCAiY29sbGVjdGlvbk5hbWUiLCBfY29sbGVjdGlvbk5hbWVfZGVjNCwgVHN2aWV3TW9uZ29JbmRleGVzLCBfY29sbGVjdGlvbk5hbWU0KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMCwgNCwgImluZGV4ZXMiLCBfaW5kZXhlc19kZWMsIFRzdmlld01vbmdvSW5kZXhlcywgX2luZGV4ZXMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDEwLCA0LCAibG9hZGluZyIsIF9sb2FkaW5nX2RlYzcsIFRzdmlld01vbmdvSW5kZXhlcywgX2xvYWRpbmc3KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMCwgNCwgInNob3dDcmVhdGVEaWFsb2ciLCBfc2hvd0NyZWF0ZURpYWxvZ19kZWMzLCBUc3ZpZXdNb25nb0luZGV4ZXMsIF9zaG93Q3JlYXRlRGlhbG9nMyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTAsIDQsICJuZXdJbmRleEtleXMiLCBfbmV3SW5kZXhLZXlzX2RlYywgVHN2aWV3TW9uZ29JbmRleGVzLCBfbmV3SW5kZXhLZXlzKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMCwgNCwgIm5ld0luZGV4VW5pcXVlIiwgX25ld0luZGV4VW5pcXVlX2RlYywgVHN2aWV3TW9uZ29JbmRleGVzLCBfbmV3SW5kZXhVbmlxdWUpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDEwLCA0LCAibmV3SW5kZXhTcGFyc2UiLCBfbmV3SW5kZXhTcGFyc2VfZGVjLCBUc3ZpZXdNb25nb0luZGV4ZXMsIF9uZXdJbmRleFNwYXJzZSk7ClRzdmlld01vbmdvSW5kZXhlcyA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTAsIDAsICJUc3ZpZXdNb25nb0luZGV4ZXMiLCBfVHN2aWV3TW9uZ29JbmRleGVzX2RlY29yYXRvcnMsIFRzdmlld01vbmdvSW5kZXhlcyk7Cl9fcHVibGljRmllbGQoVHN2aWV3TW9uZ29JbmRleGVzLCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXIxMi5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczEyYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5pbmRleGVzLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLnRvb2xiYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOwogICAgICB9CgogICAgICAuY3JlYXRlLWJ0biB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzNCwgMTk3LCA5NCwgMC4yKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMjJjNTVlOwogICAgICAgIGNvbG9yOiAjNGFkZTgwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAuY3JlYXRlLWJ0bjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzNCwgMTk3LCA5NCwgMC4zKTsKICAgICAgfQoKICAgICAgLmluZGV4ZXMtbGlzdCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgIH0KCiAgICAgIC5pbmRleC1jYXJkIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICB9CgogICAgICAuaW5kZXgtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgIH0KCiAgICAgIC5pbmRleC1uYW1lIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmluZGV4LWJhZGdlcyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmJhZGdlIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgcGFkZGluZzogMnB4IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLmJhZGdlLnVuaXF1ZSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuYmFkZ2Uuc3BhcnNlIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1MSwgMTkxLCAzNiwgMC4yKTsKICAgICAgICBjb2xvcjogI2ZiYmYyNDsKICAgICAgfQoKICAgICAgLmluZGV4LWtleXMgewogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQoKICAgICAgLmluZGV4LWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmRyb3AtYnRuIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWY0NDQ0OwogICAgICAgIGNvbG9yOiAjZjg3MTcxOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB9CgogICAgICAuZHJvcC1idG46aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjM5LCA2OCwgNjgsIDAuMik7CiAgICAgIH0KCiAgICAgIC5kcm9wLWJ0bjpkaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLmxvYWRpbmctc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CgogICAgICAvKiBEaWFsb2cgc3R5bGVzICovCiAgICAgIC5kaWFsb2ctb3ZlcmxheSB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNyk7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgIH0KCiAgICAgIC5kaWFsb2cgewogICAgICAgIGJhY2tncm91bmQ6ICMxZTFlMWU7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgd2lkdGg6IDQwMHB4OwogICAgICAgIG1heC13aWR0aDogOTAlOwogICAgICB9CgogICAgICAuZGlhbG9nLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAuZGlhbG9nLWZpZWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAuZGlhbG9nLWxhYmVsIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNnB4OwogICAgICB9CgogICAgICAuZGlhbG9nLWlucHV0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctaW5wdXQ6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDA0MDQwOwogICAgICB9CgogICAgICAuZGlhbG9nLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAuZGlhbG9nLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0biB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLnNlY29uZGFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4uc2Vjb25kYXJ5OmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICM2NjY7CiAgICAgICAgY29sb3I6ICNhYWE7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLnByaW1hcnkgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDA0MDQwOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi5wcmltYXJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAxLCBUc3ZpZXdNb25nb0luZGV4ZXMpOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1tb25nby1kYi1vdmVydmlldy50cwp2YXIgX2Vycm9yX2RlYzMsIF9sb2FkaW5nX2RlYzgsIF9zdGF0c19kZWMyLCBfZGF0YWJhc2VOYW1lX2RlYzYsIF9hMTQsIF9Uc3ZpZXdNb25nb0RiT3ZlcnZpZXdfZGVjb3JhdG9ycywgX2luaXQxMSwgX2RhdGFiYXNlTmFtZTYsIF9zdGF0czIsIF9sb2FkaW5nOCwgX2Vycm9yMzsKdmFyIHsgaHRtbDogaHRtbDE4LCBjc3M6IGNzczEzLCBjc3NNYW5hZ2VyOiBjc3NNYW5hZ2VyMTMsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQxMiwgcHJvcGVydHk6IHByb3BlcnR5MTEsIHN0YXRlOiBzdGF0ZTEyLCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQxMyB9ID0gcGx1Z2luc19leHBvcnRzNTsKX1Rzdmlld01vbmdvRGJPdmVydmlld19kZWNvcmF0b3JzID0gW2N1c3RvbUVsZW1lbnQxMigidHN2aWV3LW1vbmdvLWRiLW92ZXJ2aWV3IildOwp2YXIgVHN2aWV3TW9uZ29EYk92ZXJ2aWV3ID0gY2xhc3MgZXh0ZW5kcyAoX2ExNCA9IERlZXNFbGVtZW50MTMsIF9kYXRhYmFzZU5hbWVfZGVjNiA9IFtwcm9wZXJ0eTExKHsgdHlwZTogU3RyaW5nIH0pXSwgX3N0YXRzX2RlYzIgPSBbc3RhdGUxMigpXSwgX2xvYWRpbmdfZGVjOCA9IFtzdGF0ZTEyKCldLCBfZXJyb3JfZGVjMyA9IFtzdGF0ZTEyKCldLCBfYTE0KSB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9kYXRhYmFzZU5hbWU2LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDExLCA4LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDExLCAxMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3N0YXRzMiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMSwgMTIsIHRoaXMsIG51bGwpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMSwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9sb2FkaW5nOCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMSwgMTYsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTEsIDE5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZXJyb3IzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDExLCAyMCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMSwgMjMsIHRoaXMpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJkYXRhYmFzZU5hbWUiKSAmJiB0aGlzLmRhdGFiYXNlTmFtZSkgewogICAgICB0aGlzLmxvYWRTdGF0cygpOwogICAgfQogIH0KICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICBpZiAodGhpcy5kYXRhYmFzZU5hbWUpIHsKICAgICAgYXdhaXQgdGhpcy5sb2FkU3RhdHMoKTsKICAgIH0KICB9CiAgYXN5bmMgbG9hZFN0YXRzKCkgewogICAgaWYgKCF0aGlzLmRhdGFiYXNlTmFtZSkgcmV0dXJuOwogICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgIHRoaXMuZXJyb3IgPSAiIjsKICAgIHRyeSB7CiAgICAgIHRoaXMuc3RhdHMgPSBhd2FpdCBhcGlTZXJ2aWNlLmdldERhdGFiYXNlU3RhdHModGhpcy5kYXRhYmFzZU5hbWUpOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGxvYWRpbmcgZGF0YWJhc2Ugc3RhdHM6IiwgZXJyKTsKICAgICAgdGhpcy5lcnJvciA9ICJGYWlsZWQgdG8gbG9hZCBkYXRhYmFzZSBzdGF0aXN0aWNzIjsKICAgIH0KICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogIH0KICByZW5kZXIoKSB7CiAgICBpZiAoIXRoaXMuZGF0YWJhc2VOYW1lKSB7CiAgICAgIHJldHVybiBodG1sMThgCiAgICAgICAgPGRpdiBjbGFzcz0ib3ZlcnZpZXctY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgIDxlbGxpcHNlIGN4PSIxMiIgY3k9IjUiIHJ4PSI5IiByeT0iMyI+PC9lbGxpcHNlPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSAxMmMwIDEuNjYtNCAzLTkgM3MtOS0xLjM0LTktMyI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zIDV2MTRjMCAxLjY2IDQgMyA5IDNzOS0xLjM0IDktM1Y1Ij48L3BhdGg+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8cD5TZWxlY3QgYSBkYXRhYmFzZSB0byB2aWV3IG92ZXJ2aWV3PC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAodGhpcy5sb2FkaW5nKSB7CiAgICAgIHJldHVybiBodG1sMThgCiAgICAgICAgPGRpdiBjbGFzcz0ib3ZlcnZpZXctY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctc3RhdGUiPkxvYWRpbmcgZGF0YWJhc2Ugc3RhdGlzdGljcy4uLjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgfQogICAgaWYgKHRoaXMuZXJyb3IpIHsKICAgICAgcmV0dXJuIGh0bWwxOGAKICAgICAgICA8ZGl2IGNsYXNzPSJvdmVydmlldy1jb250YWluZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3Itc3RhdGUiPiR7dGhpcy5lcnJvcn08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgIH0KICAgIGlmICghdGhpcy5zdGF0cykgewogICAgICByZXR1cm4gaHRtbDE4YAogICAgICAgIDxkaXYgY2xhc3M9Im92ZXJ2aWV3LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgIDxwPk5vIHN0YXRpc3RpY3MgYXZhaWxhYmxlPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICByZXR1cm4gaHRtbDE4YAogICAgICA8ZGl2IGNsYXNzPSJvdmVydmlldy1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICA8aDEgY2xhc3M9ImhlYWRlci10aXRsZSI+CiAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj4KICAgICAgICAgICAgICA8ZWxsaXBzZSBjeD0iMTIiIGN5PSI1IiByeD0iOSIgcnk9IjMiPjwvZWxsaXBzZT4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMjEgMTJjMCAxLjY2LTQgMy05IDNzLTktMS4zNC05LTMiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMyA1djE0YzAgMS42NiA0IDMgOSAzczktMS4zNCA5LTNWNSI+PC9wYXRoPgogICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgJHt0aGlzLmRhdGFiYXNlTmFtZX0KICAgICAgICAgIDwvaDE+CiAgICAgICAgICA8cCBjbGFzcz0iaGVhZGVyLXN1YnRpdGxlIj5EYXRhYmFzZSBPdmVydmlldzwvcD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TdG9yYWdlPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0cy1ncmlkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1jYXJkIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC1sYWJlbCI+Q29sbGVjdGlvbnM8L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtdmFsdWUiPiR7dGhpcy5zdGF0cy5jb2xsZWN0aW9uc308L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtZGVzY3JpcHRpb24iPlRvdGFsIGNvbGxlY3Rpb25zIGluIGRhdGFiYXNlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1jYXJkIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC1sYWJlbCI+RG9jdW1lbnRzPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LXZhbHVlIj4ke2Zvcm1hdENvdW50KHRoaXMuc3RhdHMub2JqZWN0cykgfHwgdGhpcy5zdGF0cy5vYmplY3RzfTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC1kZXNjcmlwdGlvbiI+VG90YWwgZG9jdW1lbnRzIHN0b3JlZDwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtY2FyZCI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtbGFiZWwiPkF2ZyBEb2N1bWVudCBTaXplPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LXZhbHVlIHNtYWxsIj4ke2Zvcm1hdFNpemUodGhpcy5zdGF0cy5hdmdPYmpTaXplKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtZGVzY3JpcHRpb24iPkF2ZXJhZ2Ugc2l6ZSBwZXIgZG9jdW1lbnQ8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LWxhYmVsIj5EYXRhIFNpemU8L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtdmFsdWUgc21hbGwiPiR7Zm9ybWF0U2l6ZSh0aGlzLnN0YXRzLmRhdGFTaXplKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtZGVzY3JpcHRpb24iPlVuY29tcHJlc3NlZCBkYXRhIHNpemU8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LWxhYmVsIj5TdG9yYWdlIFNpemU8L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtdmFsdWUgc21hbGwiPiR7Zm9ybWF0U2l6ZSh0aGlzLnN0YXRzLnN0b3JhZ2VTaXplKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtZGVzY3JpcHRpb24iPkFsbG9jYXRlZCBzdG9yYWdlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkluZGV4ZXM8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXRzLWdyaWQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LWxhYmVsIj5JbmRleCBDb3VudDwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC12YWx1ZSI+JHt0aGlzLnN0YXRzLmluZGV4ZXN9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LWRlc2NyaXB0aW9uIj5Ub3RhbCBpbmRleGVzIGluIGRhdGFiYXNlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1jYXJkIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC1sYWJlbCI+SW5kZXggU2l6ZTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC12YWx1ZSBzbWFsbCI+JHtmb3JtYXRTaXplKHRoaXMuc3RhdHMuaW5kZXhTaXplKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtZGVzY3JpcHRpb24iPlRvdGFsIGluZGV4IHN0b3JhZ2U8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07Cl9pbml0MTEgPSBfX2RlY29yYXRvclN0YXJ0KF9hMTQpOwpfZGF0YWJhc2VOYW1lNiA9IG5ldyBXZWFrTWFwKCk7Cl9zdGF0czIgPSBuZXcgV2Vha01hcCgpOwpfbG9hZGluZzggPSBuZXcgV2Vha01hcCgpOwpfZXJyb3IzID0gbmV3IFdlYWtNYXAoKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMSwgNCwgImRhdGFiYXNlTmFtZSIsIF9kYXRhYmFzZU5hbWVfZGVjNiwgVHN2aWV3TW9uZ29EYk92ZXJ2aWV3LCBfZGF0YWJhc2VOYW1lNik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTEsIDQsICJzdGF0cyIsIF9zdGF0c19kZWMyLCBUc3ZpZXdNb25nb0RiT3ZlcnZpZXcsIF9zdGF0czIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDExLCA0LCAibG9hZGluZyIsIF9sb2FkaW5nX2RlYzgsIFRzdmlld01vbmdvRGJPdmVydmlldywgX2xvYWRpbmc4KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMSwgNCwgImVycm9yIiwgX2Vycm9yX2RlYzMsIFRzdmlld01vbmdvRGJPdmVydmlldywgX2Vycm9yMyk7ClRzdmlld01vbmdvRGJPdmVydmlldyA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTEsIDAsICJUc3ZpZXdNb25nb0RiT3ZlcnZpZXciLCBfVHN2aWV3TW9uZ29EYk92ZXJ2aWV3X2RlY29yYXRvcnMsIFRzdmlld01vbmdvRGJPdmVydmlldyk7Cl9fcHVibGljRmllbGQoVHN2aWV3TW9uZ29EYk92ZXJ2aWV3LCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXIxMy5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczEzYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAub3ZlcnZpZXctY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLmhlYWRlci10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgbWFyZ2luOiAwIDAgOHB4IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLmhlYWRlci10aXRsZSBzdmcgewogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLmhlYWRlci1zdWJ0aXRsZSB7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAuc3RhdHMtZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDsKICAgICAgfQoKICAgICAgLnN0YXQtY2FyZCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnN0YXQtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLnN0YXQtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuc3RhdC12YWx1ZS5zbWFsbCB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICB9CgogICAgICAuc3RhdC1kZXNjcmlwdGlvbiB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAuc2VjdGlvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDhweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsKICAgICAgfQoKICAgICAgLmxvYWRpbmctc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAuZXJyb3Itc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHN2ZyB7CiAgICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdDExLCAxLCBUc3ZpZXdNb25nb0RiT3ZlcnZpZXcpOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1hY3Rpdml0eS1zdHJlYW0udHMKdmFyIF9hdXRvU2Nyb2xsX2RlYywgX2lzTG9hZGluZ19kZWMsIF9pc0Nvbm5lY3RlZF9kZWMsIF9maWx0ZXJNb2RlX2RlYywgX2V2ZW50c19kZWMsIF9hMTUsIF9Uc3ZpZXdBY3Rpdml0eVN0cmVhbV9kZWNvcmF0b3JzLCBfaW5pdDEyLCBfZXZlbnRzLCBfZmlsdGVyTW9kZSwgX2lzQ29ubmVjdGVkLCBfaXNMb2FkaW5nLCBfYXV0b1Njcm9sbDsKdmFyIHsgaHRtbDogaHRtbDE5LCBjc3M6IGNzczE0LCBjc3NNYW5hZ2VyOiBjc3NNYW5hZ2VyMTQsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQxMywgcHJvcGVydHk6IHByb3BlcnR5MTIsIHN0YXRlOiBzdGF0ZTEzLCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQxNCB9ID0gcGx1Z2luc19leHBvcnRzNTsKX1Rzdmlld0FjdGl2aXR5U3RyZWFtX2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDEzKCJ0c3ZpZXctYWN0aXZpdHktc3RyZWFtIildOwp2YXIgVHN2aWV3QWN0aXZpdHlTdHJlYW0gPSBjbGFzcyBleHRlbmRzIChfYTE1ID0gRGVlc0VsZW1lbnQxNCwgX2V2ZW50c19kZWMgPSBbc3RhdGUxMygpXSwgX2ZpbHRlck1vZGVfZGVjID0gW3N0YXRlMTMoKV0sIF9pc0Nvbm5lY3RlZF9kZWMgPSBbc3RhdGUxMygpXSwgX2lzTG9hZGluZ19kZWMgPSBbc3RhdGUxMygpXSwgX2F1dG9TY3JvbGxfZGVjID0gW3N0YXRlMTMoKV0sIF9hMTUpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2V2ZW50cywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMiwgOCwgdGhpcywgW10pKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMiwgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9maWx0ZXJNb2RlLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEyLCAxMiwgdGhpcywgImFsbCIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMiwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9pc0Nvbm5lY3RlZCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMiwgMTYsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTIsIDE5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfaXNMb2FkaW5nLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEyLCAyMCwgdGhpcywgdHJ1ZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEyLCAyMywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2F1dG9TY3JvbGwsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTIsIDI0LCB0aGlzLCB0cnVlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTIsIDI3LCB0aGlzKTsKICAgIF9fcHVibGljRmllbGQodGhpcywgInN1YnNjcmlwdGlvbiIsIG51bGwpOwogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiY29ubmVjdGlvblN1YnNjcmlwdGlvbiIsIG51bGwpOwogIH0KICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVTdHJlYW1pbmcoKTsKICB9CiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgdGhpcy5jbGVhbnVwKCk7CiAgfQogIGFzeW5jIGluaXRpYWxpemVTdHJlYW1pbmcoKSB7CiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7CiAgICB0cnkgewogICAgICBhd2FpdCBjaGFuZ2VTdHJlYW1TZXJ2aWNlLmNvbm5lY3QoKTsKICAgICAgdGhpcy5jb25uZWN0aW9uU3Vic2NyaXB0aW9uID0gY2hhbmdlU3RyZWFtU2VydmljZS5jb25uZWN0aW9uU3RhdHVzJC5zdWJzY3JpYmUoKHN0YXR1cykgPT4gewogICAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBzdGF0dXMgPT09ICJjb25uZWN0ZWQiOwogICAgICB9KTsKICAgICAgYXdhaXQgY2hhbmdlU3RyZWFtU2VydmljZS5zdWJzY3JpYmVUb0FjdGl2aXR5KCk7CiAgICAgIGNvbnN0IHJlY2VudEV2ZW50cyA9IGF3YWl0IGNoYW5nZVN0cmVhbVNlcnZpY2UuZ2V0UmVjZW50QWN0aXZpdHkoMTAwKTsKICAgICAgdGhpcy5ldmVudHMgPSByZWNlbnRFdmVudHM7CiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gY2hhbmdlU3RyZWFtU2VydmljZS5nZXRBY3Rpdml0eVN0cmVhbSgpLnN1YnNjcmliZSgoZXZlbnQpID0+IHsKICAgICAgICB0aGlzLmV2ZW50cyA9IFsuLi50aGlzLmV2ZW50cywgZXZlbnRdLnNsaWNlKC01MDApOwogICAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGwpIHsKICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLmlzQ29ubmVjdGVkID0gdHJ1ZTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIGFjdGl2aXR5IHN0cmVhbToiLCBlcnJvcik7CiAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTsKICAgIH0KICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7CiAgfQogIGNsZWFudXAoKSB7CiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHsKICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSBudWxsOwogICAgfQogICAgaWYgKHRoaXMuY29ubmVjdGlvblN1YnNjcmlwdGlvbikgewogICAgICB0aGlzLmNvbm5lY3Rpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgdGhpcy5jb25uZWN0aW9uU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIH0KICAgIGNoYW5nZVN0cmVhbVNlcnZpY2UudW5zdWJzY3JpYmVGcm9tQWN0aXZpdHkoKTsKICB9CiAgc2Nyb2xsVG9Cb3R0b20oKSB7CiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICBjb25zdCBsaXN0NSA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmV2ZW50cy1saXN0Iik7CiAgICAgIGlmIChsaXN0NSkgewogICAgICAgIGxpc3Q1LnNjcm9sbFRvcCA9IGxpc3Q1LnNjcm9sbEhlaWdodDsKICAgICAgfQogICAgfSk7CiAgfQogIHNldEZpbHRlck1vZGUobW9kZSkgewogICAgdGhpcy5maWx0ZXJNb2RlID0gbW9kZTsKICB9CiAgdG9nZ2xlQXV0b1Njcm9sbCgpIHsKICAgIHRoaXMuYXV0b1Njcm9sbCA9ICF0aGlzLmF1dG9TY3JvbGw7CiAgfQogIGdldCBmaWx0ZXJlZEV2ZW50cygpIHsKICAgIGlmICh0aGlzLmZpbHRlck1vZGUgPT09ICJhbGwiKSB7CiAgICAgIHJldHVybiB0aGlzLmV2ZW50czsKICAgIH0KICAgIHJldHVybiB0aGlzLmV2ZW50cy5maWx0ZXIoKGUxMSkgPT4gZTExLnNvdXJjZSA9PT0gdGhpcy5maWx0ZXJNb2RlKTsKICB9CiAgZm9ybWF0VGltZSh0aW1lc3RhbXAyKSB7CiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGltZXN0YW1wMik7CiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoImVuLVVTIiwgewogICAgICBob3VyOiAiMi1kaWdpdCIsCiAgICAgIG1pbnV0ZTogIjItZGlnaXQiLAogICAgICBzZWNvbmQ6ICIyLWRpZ2l0IgogICAgfSk7CiAgfQogIGZvcm1hdFJlbGF0aXZlVGltZSh0aW1lc3RhbXAyKSB7CiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGltZXN0YW1wMik7CiAgICBjb25zdCBub3cyID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICBjb25zdCBkaWZmID0gbm93Mi5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWUoKTsKICAgIGlmIChkaWZmIDwgNmU0KSB7CiAgICAgIHJldHVybiAianVzdCBub3ciOwogICAgfSBlbHNlIGlmIChkaWZmIDwgMzZlNSkgewogICAgICBjb25zdCBtaW5zID0gTWF0aC5mbG9vcihkaWZmIC8gNmU0KTsKICAgICAgcmV0dXJuIGAke21pbnN9bSBhZ29gOwogICAgfSBlbHNlIGlmIChkaWZmIDwgODY0ZTUpIHsKICAgICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKGRpZmYgLyAzNmU1KTsKICAgICAgcmV0dXJuIGAke2hvdXJzfWggYWdvYDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpOwogICAgfQogIH0KICBnZXRFdmVudFRpdGxlKGV2ZW50KSB7CiAgICBpZiAoZXZlbnQuc291cmNlID09PSAibW9uZ29kYiIpIHsKICAgICAgY29uc3QgbW9uZ29FdmVudCA9IGV2ZW50LmV2ZW50OwogICAgICByZXR1cm4gYCR7bW9uZ29FdmVudC5kYXRhYmFzZX0uJHttb25nb0V2ZW50LmNvbGxlY3Rpb259YDsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IHMzRXZlbnQgPSBldmVudC5ldmVudDsKICAgICAgcmV0dXJuIHMzRXZlbnQuYnVja2V0OwogICAgfQogIH0KICBnZXRFdmVudERldGFpbHMoZXZlbnQpIHsKICAgIGlmIChldmVudC5zb3VyY2UgPT09ICJtb25nb2RiIikgewogICAgICBjb25zdCBtb25nb0V2ZW50ID0gZXZlbnQuZXZlbnQ7CiAgICAgIGlmIChtb25nb0V2ZW50LmRvY3VtZW50SWQpIHsKICAgICAgICByZXR1cm4gYERvY3VtZW50OiAke21vbmdvRXZlbnQuZG9jdW1lbnRJZH1gOwogICAgICB9CiAgICAgIHJldHVybiAiIjsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IHMzRXZlbnQgPSBldmVudC5ldmVudDsKICAgICAgcmV0dXJuIHMzRXZlbnQua2V5OwogICAgfQogIH0KICBnZXRFdmVudFR5cGUoZXZlbnQpIHsKICAgIHJldHVybiBldmVudC5ldmVudC50eXBlOwogIH0KICBoYW5kbGVFdmVudENsaWNrKGV2ZW50KSB7CiAgICBpZiAoZXZlbnQuc291cmNlID09PSAibW9uZ29kYiIpIHsKICAgICAgY29uc3QgbW9uZ29FdmVudCA9IGV2ZW50LmV2ZW50OwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoCiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCJuYXZpZ2F0ZS10by1tb25nbyIsIHsKICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICBkYXRhYmFzZTogbW9uZ29FdmVudC5kYXRhYmFzZSwKICAgICAgICAgICAgY29sbGVjdGlvbjogbW9uZ29FdmVudC5jb2xsZWN0aW9uLAogICAgICAgICAgICBkb2N1bWVudElkOiBtb25nb0V2ZW50LmRvY3VtZW50SWQKICAgICAgICAgIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KQogICAgICApOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgczNFdmVudCA9IGV2ZW50LmV2ZW50OwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoCiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCJuYXZpZ2F0ZS10by1zMyIsIHsKICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICBidWNrZXQ6IHMzRXZlbnQuYnVja2V0LAogICAgICAgICAgICBrZXk6IHMzRXZlbnQua2V5CiAgICAgICAgICB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkKICAgICAgKTsKICAgIH0KICB9CiAgcmVuZGVyTW9uZ29JY29uKCkgewogICAgcmV0dXJuIGh0bWwxOWAKICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgIDxlbGxpcHNlIGN4PSIxMiIgY3k9IjUiIHJ4PSI5IiByeT0iMyI+PC9lbGxpcHNlPgogICAgICAgIDxwYXRoIGQ9Ik0yMSAxMmMwIDEuNjYtNCAzLTkgM3MtOS0xLjM0LTktMyI+PC9wYXRoPgogICAgICAgIDxwYXRoIGQ9Ik0zIDV2MTRjMCAxLjY2IDQgMyA5IDNzOS0xLjM0IDktM1Y1Ij48L3BhdGg+CiAgICAgIDwvc3ZnPgogICAgYDsKICB9CiAgcmVuZGVyUzNJY29uKCkgewogICAgcmV0dXJuIGh0bWwxOWAKICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgIDxwYXRoIGQ9Ik0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNWwyIDNoOWEyIDIgMCAwIDEgMiAyeiI+PC9wYXRoPgogICAgICA8L3N2Zz4KICAgIGA7CiAgfQogIGdldENvbm5lY3Rpb25TdGF0dXNUZXh0KCkgewogICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQpIHsKICAgICAgcmV0dXJuICJMaXZlIjsKICAgIH0KICAgIHJldHVybiAiRGlzY29ubmVjdGVkIjsKICB9CiAgcmVuZGVyKCkgewogICAgcmV0dXJuIGh0bWwxOWAKICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHktY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLXRpdGxlIj4KICAgICAgICAgICAgQWN0aXZpdHkgU3RyZWFtCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbm5lY3Rpb24tc3RhdHVzIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdHVzLWRvdCAke3RoaXMuaXNDb25uZWN0ZWQgPyAiY29ubmVjdGVkIiA6ICJkaXNjb25uZWN0ZWQifSI+PC9zcGFuPgogICAgICAgICAgICAgICR7dGhpcy5nZXRDb25uZWN0aW9uU3RhdHVzVGV4dCgpfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLWNvbnRyb2xzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmlsdGVyLXRhYnMiPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJmaWx0ZXItdGFiICR7dGhpcy5maWx0ZXJNb2RlID09PSAiYWxsIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZXRGaWx0ZXJNb2RlKCJhbGwiKX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICBBbGwKICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0iZmlsdGVyLXRhYiAke3RoaXMuZmlsdGVyTW9kZSA9PT0gIm1vbmdvZGIiID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNldEZpbHRlck1vZGUoIm1vbmdvZGIiKX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICBNb25nb0RCCiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9ImZpbHRlci10YWIgJHt0aGlzLmZpbHRlck1vZGUgPT09ICJzMyIgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2V0RmlsdGVyTW9kZSgiczMiKX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICBTMwogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJhdXRvLXNjcm9sbC10b2dnbGUiPgogICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgICAgICAuY2hlY2tlZD0ke3RoaXMuYXV0b1Njcm9sbH0KICAgICAgICAgICAgICAgIEBjaGFuZ2U9JHt0aGlzLnRvZ2dsZUF1dG9TY3JvbGx9CiAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICBBdXRvLXNjcm9sbAogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50cy1saXN0Ij4KICAgICAgICAgICR7dGhpcy5pc0xvYWRpbmcgPyBodG1sMTlgPGRpdiBjbGFzcz0ibG9hZGluZy1zdGF0ZSI+Q29ubmVjdGluZyB0byBhY3Rpdml0eSBzdHJlYW0uLi48L2Rpdj5gIDogdGhpcy5maWx0ZXJlZEV2ZW50cy5sZW5ndGggPT09IDAgPyBodG1sMTlgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+CiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjIgMTJoLTRsLTMgOUw5IDNsLTMgOUgyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgPHA+Tm8gYWN0aXZpdHkgeWV0LiBDaGFuZ2VzIHdpbGwgYXBwZWFyIGhlcmUgaW4gcmVhbC10aW1lLjwvcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgIDogdGhpcy5maWx0ZXJlZEV2ZW50cy5tYXAoCiAgICAgIChldmVudCkgPT4gaHRtbDE5YAogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LWl0ZW0iIEBjbGljaz0keygpID0+IHRoaXMuaGFuZGxlRXZlbnRDbGljayhldmVudCl9PgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXZlbnQtaWNvbiAke2V2ZW50LnNvdXJjZX0iPgogICAgICAgICAgICAgICAgICAgICAgICAke2V2ZW50LnNvdXJjZSA9PT0gIm1vbmdvZGIiID8gdGhpcy5yZW5kZXJNb25nb0ljb24oKSA6IHRoaXMucmVuZGVyUzNJY29uKCl9CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJldmVudC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJldmVudC10eXBlICR7dGhpcy5nZXRFdmVudFR5cGUoZXZlbnQpfSI+JHt0aGlzLmdldEV2ZW50VHlwZShldmVudCl9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmdldEV2ZW50VGl0bGUoZXZlbnQpfQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LXRpbWUiIHRpdGxlPSR7dGhpcy5mb3JtYXRUaW1lKGV2ZW50LnRpbWVzdGFtcCl9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmZvcm1hdFJlbGF0aXZlVGltZShldmVudC50aW1lc3RhbXApfQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXZlbnQtZGV0YWlscyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImV2ZW50LXBhdGgiPiR7dGhpcy5nZXRFdmVudERldGFpbHMoZXZlbnQpfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYAogICAgKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KfTsKX2luaXQxMiA9IF9fZGVjb3JhdG9yU3RhcnQoX2ExNSk7Cl9ldmVudHMgPSBuZXcgV2Vha01hcCgpOwpfZmlsdGVyTW9kZSA9IG5ldyBXZWFrTWFwKCk7Cl9pc0Nvbm5lY3RlZCA9IG5ldyBXZWFrTWFwKCk7Cl9pc0xvYWRpbmcgPSBuZXcgV2Vha01hcCgpOwpfYXV0b1Njcm9sbCA9IG5ldyBXZWFrTWFwKCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTIsIDQsICJldmVudHMiLCBfZXZlbnRzX2RlYywgVHN2aWV3QWN0aXZpdHlTdHJlYW0sIF9ldmVudHMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDEyLCA0LCAiZmlsdGVyTW9kZSIsIF9maWx0ZXJNb2RlX2RlYywgVHN2aWV3QWN0aXZpdHlTdHJlYW0sIF9maWx0ZXJNb2RlKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMiwgNCwgImlzQ29ubmVjdGVkIiwgX2lzQ29ubmVjdGVkX2RlYywgVHN2aWV3QWN0aXZpdHlTdHJlYW0sIF9pc0Nvbm5lY3RlZCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTIsIDQsICJpc0xvYWRpbmciLCBfaXNMb2FkaW5nX2RlYywgVHN2aWV3QWN0aXZpdHlTdHJlYW0sIF9pc0xvYWRpbmcpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDEyLCA0LCAiYXV0b1Njcm9sbCIsIF9hdXRvU2Nyb2xsX2RlYywgVHN2aWV3QWN0aXZpdHlTdHJlYW0sIF9hdXRvU2Nyb2xsKTsKVHN2aWV3QWN0aXZpdHlTdHJlYW0gPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDEyLCAwLCAiVHN2aWV3QWN0aXZpdHlTdHJlYW0iLCBfVHN2aWV3QWN0aXZpdHlTdHJlYW1fZGVjb3JhdG9ycywgVHN2aWV3QWN0aXZpdHlTdHJlYW0pOwpfX3B1YmxpY0ZpZWxkKFRzdmlld0FjdGl2aXR5U3RyZWFtLCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXIxNC5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczE0YAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsKICAgICAgfQoKICAgICAgLmhlYWRlci10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLmNvbm5lY3Rpb24tc3RhdHVzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KCiAgICAgIC5zdGF0dXMtZG90IHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgLnN0YXR1cy1kb3QuY29ubmVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMjJjNTVlOwogICAgICAgIGJveC1zaGFkb3c6IDAgMCA2cHggcmdiYSgzNCwgMTk3LCA5NCwgMC41KTsKICAgICAgfQoKICAgICAgLnN0YXR1cy1kb3QuZGlzY29ubmVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZWY0NDQ0OwogICAgICB9CgogICAgICAuc3RhdHVzLWRvdC5jb25uZWN0aW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjU5ZTBiOwogICAgICAgIGFuaW1hdGlvbjogcHVsc2UgMXMgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgcHVsc2UgewogICAgICAgIDAlLCAxMDAlIHsgb3BhY2l0eTogMTsgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDAuNTsgfQogICAgICB9CgogICAgICAuaGVhZGVyLWNvbnRyb2xzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICB9CgogICAgICAuZmlsdGVyLXRhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5maWx0ZXItdGFiIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICB9CgogICAgICAuZmlsdGVyLXRhYjpob3ZlciB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNjY2OwogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICB9CgogICAgICAuZmlsdGVyLXRhYi5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBib3JkZXItY29sb3I6ICM2NjY7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5hdXRvLXNjcm9sbC10b2dnbGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAuYXV0by1zY3JvbGwtdG9nZ2xlIGlucHV0IHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC5ldmVudHMtbGlzdCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgIH0KCiAgICAgIC5ldmVudC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgIH0KCiAgICAgIC5ldmVudC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICB9CgogICAgICAuZXZlbnQtaWNvbiB7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5ldmVudC1pY29uLm1vbmdvZGIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTYsIDE4NSwgMTI5LCAwLjIpOwogICAgICAgIGNvbG9yOiAjMTBiOTgxOwogICAgICB9CgogICAgICAuZXZlbnQtaWNvbi5zMyB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNDUsIDE1OCwgMTEsIDAuMik7CiAgICAgICAgY29sb3I6ICNmNTllMGI7CiAgICAgIH0KCiAgICAgIC5ldmVudC1pY29uIHN2ZyB7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICB9CgogICAgICAuZXZlbnQtY29udGVudCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5ldmVudC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICAuZXZlbnQtdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuZXZlbnQtdGltZSB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAuZXZlbnQtZGV0YWlscyB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIH0KCiAgICAgIC5ldmVudC10eXBlIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgICAgfQoKICAgICAgLmV2ZW50LXR5cGUuaW5zZXJ0LCAuZXZlbnQtdHlwZS5hZGQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzQsIDE5NywgOTQsIDAuMik7CiAgICAgICAgY29sb3I6ICM0YWRlODA7CiAgICAgIH0KCiAgICAgIC5ldmVudC10eXBlLnVwZGF0ZSwgLmV2ZW50LXR5cGUubW9kaWZ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKTsKICAgICAgICBjb2xvcjogIzYwYTVmYTsKICAgICAgfQoKICAgICAgLmV2ZW50LXR5cGUuZGVsZXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjIpOwogICAgICAgIGNvbG9yOiAjZjg3MTcxOwogICAgICB9CgogICAgICAuZXZlbnQtdHlwZS5yZXBsYWNlIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE2OCwgODUsIDI0NywgMC4yKTsKICAgICAgICBjb2xvcjogI2MwODRmYzsKICAgICAgfQoKICAgICAgLmV2ZW50LXR5cGUuZHJvcCwgLmV2ZW50LXR5cGUuaW52YWxpZGF0ZSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4zKTsKICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgc3ZnIHsKICAgICAgICB3aWR0aDogNjRweDsKICAgICAgICBoZWlnaHQ6IDY0cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgcCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAubG9hZGluZy1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLmV2ZW50LXBhdGggewogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgfQogICAgYApdKTsKX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMiwgMSwgVHN2aWV3QWN0aXZpdHlTdHJlYW0pOwoKLy8gdHNfd2ViL2luZGV4LnRzCnZhciBpbml0QXBwID0gYXN5bmMgKCkgPT4gewogIGNvbnNvbGUubG9nKCJUc1ZpZXcgVUkgaW5pdGlhbGl6aW5nLi4uIik7CiAgYXdhaXQgY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQoInRzdmlldy1hcHAiKTsKICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRzdmlldy1hcHAiKSkgewogICAgY29uc3QgYXBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHN2aWV3LWFwcCIpOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhcHApOwogIH0KICBjb25zb2xlLmxvZygiVHNWaWV3IFVJIHJlYWR5Iik7Cn07CmlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAibG9hZGluZyIpIHsKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgaW5pdEFwcCk7Cn0gZWxzZSB7CiAgaW5pdEFwcCgpOwp9Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246CgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvY3NzLXRhZy5qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgICopCgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvcmVhY3RpdmUtZWxlbWVudC5qczoKbGl0LWh0bWwvbGl0LWh0bWwuanM6CmxpdC1lbGVtZW50L2xpdC1lbGVtZW50LmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9wcm9wZXJ0eS5qczoKbGl0LWh0bWwvZGlyZWN0aXZlLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9jdXN0b20tZWxlbWVudC5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvc3RhdGUuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL2V2ZW50LW9wdGlvbnMuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL2Jhc2UuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hbGwuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFzeW5jLmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3NpZ25lZC1ub2Rlcy5qczoKbGl0LWh0bWwvYXN5bmMtZGlyZWN0aXZlLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL3VudGlsLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL2FzeW5jLXJlcGxhY2UuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMvYXN5bmMtYXBwZW5kLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL3JlcGVhdC5qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgICopCgpsaXQtaHRtbC9pcy1zZXJ2ZXIuanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICAqKQoKc3dlZXQtc2Nyb2xsL3N3ZWV0LXNjcm9sbC5qczoKICAoKiEgQHByZXNlcnZlIHN3ZWV0LXNjcm9sbCB2NC4wLjAgLSB0c3V5b3NoaXdhZGEgfCBNSVQgTGljZW5zZSAqKQogICgqISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZQogICAgICB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZQogICAgICBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogIAogICAgICBUSElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCiAgICAgIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQKICAgICAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwKICAgICAgTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC4KICAKICAgICAgU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zCiAgICAgIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKikKCmxpdC1odG1sL3N0YXRpYy5qczoKbGl0LWh0bWwvZGlyZWN0aXZlLWhlbHBlcnMuanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICAqKQoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXNzaWduZWQtZWxlbWVudHMuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMvcHJpdmF0ZS1hc3luYy1oZWxwZXJzLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL2tleWVkLmpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAgKikKCkBmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZS9pbmRleC5tanM6CkBmb3J0YXdlc29tZS9mcmVlLWJyYW5kcy1zdmctaWNvbnMvaW5kZXgubWpzOgpAZm9ydGF3ZXNvbWUvZnJlZS1yZWd1bGFyLXN2Zy1pY29ucy9pbmRleC5tanM6CkBmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9pbmRleC5tanM6CiAgKCohCiAgICogRm9udCBBd2Vzb21lIEZyZWUgNy4xLjAgYnkgQGZvbnRhd2Vzb21lIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20KICAgKiBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIChJY29uczogQ0MgQlkgNC4wLCBGb250czogU0lMIE9GTCAxLjEsIENvZGU6IE1JVCBMaWNlbnNlKQogICAqIENvcHlyaWdodCAyMDI1IEZvbnRpY29ucywgSW5jLgogICAqKQoKbHVjaWRlL2Rpc3QvY2pzL2x1Y2lkZS5qczoKICAoKioKICAgKiBAbGljZW5zZSBsdWNpZGUgdjAuNTYzLjAgLSBJU0MKICAgKgogICAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLgogICAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogICAqKQoKaWJhbnRvb2xzL2pzbmV4dC9pYmFudG9vbHMuanM6CiAgKCohCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgU2HFoWEgSm92YW5pxIcKICAgKiBMaWNlbnNlZCB1bmRlciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyLjAgb3IgdGhlIE1JVCBsaWNlbnNlLAogICAqIGF0IHlvdXIgb3B0aW9uLiBUaGlzIGZpbGUgbWF5IG5vdCBiZSBjb3BpZWQsIG1vZGlmaWVkLCBvciBkaXN0cmlidXRlZAogICAqIGV4Y2VwdCBhY2NvcmRpbmcgdG8gdGhvc2UgdGVybXMuCiAgICogU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU2HFoWEgSm92YW5pxIcKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUIG9yIE1QTC8yLjAKICAgKikKICAoKioKICAgKiBWYWxpZGF0aW9uLCBleHRyYWN0aW9uIGFuZCBjcmVhdGlvbiBvZiBJQkFOLCBCQkFOLCBCSUMvU1dJRlQgbnVtYmVycyBwbHVzIHNvbWUgb3RoZXIgaGVscGZ1bCBzdHVmZgogICAqIEBwYWNrYWdlIERvY3VtZW50YXRpb24KICAgKiBAYXV0aG9yIFNhxaFhIEpvdmFuacSHCiAgICogQG1vZHVsZSBpYmFudG9vbHMKICAgKiBAdmVyc2lvbiA0LjUuMQogICAqIEBsaWNlbnNlIE1JVCBvciBNUEwtMi4wCiAgICogQHByZWZlcnJlZAogICAqKQoqLwovLyMgc291cmNlTWFwcGluZ1VSTD1idW5kbGUtMTc2OTQzMTczMjQxMy5qcy5tYXAK" }, { "path": "index.html",